[Pkg-samba-maint] r1953 - in branches/samba/upstream: . docs docs/htmldocs docs/htmldocs/Samba3-ByExample docs/htmldocs/Samba3-ByExample/images docs/htmldocs/Samba3-Developers-Guide docs/htmldocs/Samba3-HOWTO docs/htmldocs/Samba3-HOWTO/images docs/htmldocs/manpages docs/manpages docs-xml/Samba3-Developers-Guide docs-xml/Samba3-HOWTO docs-xml/manpages-3 docs-xml/smbdotconf/base docs-xml/smbdotconf/browse docs-xml/smbdotconf/filename docs-xml/smbdotconf/ldap docs-xml/smbdotconf/logging docs-xml/smbdotconf/misc docs-xml/smbdotconf/protocol docs-xml/smbdotconf/security docs-xml/smbdotconf/tuning docs-xml/smbdotconf/vfs docs-xml/smbdotconf/winbind docs-xml/xslt examples examples/LDAP examples/VFS examples/auth examples/libsmbclient examples/libsmbclient/smbwrapper examples/logon/mklogon examples/misc examples/pam_winbind examples/pcap2nbench examples/pdb examples/perfcounter examples/printing examples/scripts examples/scripts/eventlog examples/scripts/printing/cups examples/scripts/shares/perl examples/scripts/shares/python packaging packaging/Debian packaging/Debian/debian-sarge packaging/Debian/debian-sarge/patches packaging/Debian/debian-unstable packaging/Debian/debian-woody packaging/LSB packaging/RHEL pcp release-scripts source source/auth source/client source/groupdb source/include source/iniparser source/iniparser/html source/iniparser/src source/intl source/lib source/lib/replace source/lib/replace/system source/lib/replace/test source/lib/socket_wrapper source/lib/talloc source/libaddns source/libads source/libgpo source/librpc source/librpc/gen_ndr source/librpc/ndr source/libsmb source/locking source/modules source/nmbd source/nsswitch source/pam_smbpass source/param source/passdb source/po source/popt source/printing source/profile source/registry source/rpc_client source/rpc_parse source/rpc_server source/rpcclient source/script source/script/tests source/services source/smbd source/stf source/tests source/torture source/utils source/web testsuite/config testsuite/lib testsuite/nsswitch testsuite/printing testsuite/smbd

vorlon at alioth.debian.org vorlon at alioth.debian.org
Sun Jun 15 01:58:59 UTC 2008


Author: vorlon
Date: 2008-06-15 01:55:18 +0000 (Sun, 15 Jun 2008)
New Revision: 1953

Added:
   branches/samba/upstream/docs-xml/manpages-3/smbmnt.8.xml
   branches/samba/upstream/docs-xml/manpages-3/smbmount.8.xml
   branches/samba/upstream/docs-xml/manpages-3/smbumount.8.xml
   branches/samba/upstream/docs-xml/smbdotconf/filename/mangledmap.xml
   branches/samba/upstream/docs-xml/smbdotconf/protocol/readbmpx.xml
   branches/samba/upstream/docs-xml/smbdotconf/tuning/openfilesdatabasehashsize.xml
   branches/samba/upstream/docs/htmldocs/manpages/smbmnt.8.html
   branches/samba/upstream/docs/htmldocs/manpages/smbmount.8.html
   branches/samba/upstream/docs/htmldocs/manpages/smbumount.8.html
   branches/samba/upstream/docs/manpages/smbmnt.8
   branches/samba/upstream/docs/manpages/smbmount.8
   branches/samba/upstream/docs/manpages/smbumount.8
   branches/samba/upstream/examples/libmsrpc/
   branches/samba/upstream/packaging/Debian/debian-sarge/patches/nmbd-signalling.patch.unused
   branches/samba/upstream/packaging/RHEL/makerpms.sh
   branches/samba/upstream/packaging/RHEL/samba.spec
   branches/samba/upstream/pcp/Install
   branches/samba/upstream/pcp/Makefile
   branches/samba/upstream/pcp/Remove
   branches/samba/upstream/pcp/samba.c
   branches/samba/upstream/release-scripts/build-docs
   branches/samba/upstream/source/aclocal.m4
   branches/samba/upstream/source/client/smbctool.c
   branches/samba/upstream/source/client/smbmnt.c
   branches/samba/upstream/source/client/smbmount.c
   branches/samba/upstream/source/client/smbumount.c
   branches/samba/upstream/source/include/ads_cldap.h
   branches/samba/upstream/source/include/core/
   branches/samba/upstream/source/include/pstring.h
   branches/samba/upstream/source/include/rpc_brs.h
   branches/samba/upstream/source/include/rpc_dfs.h
   branches/samba/upstream/source/include/rpc_ds.h
   branches/samba/upstream/source/include/rpc_echo.h
   branches/samba/upstream/source/include/rpc_netlogon.h
   branches/samba/upstream/source/include/rpc_reg.h
   branches/samba/upstream/source/include/rpc_samr.h
   branches/samba/upstream/source/include/rpc_shutdown.h
   branches/samba/upstream/source/include/rpc_srvsvc.h
   branches/samba/upstream/source/include/samba_xfs_quota.h
   branches/samba/upstream/source/iniparser/html/dir_000000.html
   branches/samba/upstream/source/iniparser/html/dirs.html
   branches/samba/upstream/source/lib/repdir.c
   branches/samba/upstream/source/lib/replace/system/printing.h
   branches/samba/upstream/source/libads/smb_krb5_locator.c
   branches/samba/upstream/source/libgpo/gpo_parse.c
   branches/samba/upstream/source/libmsrpc/
   branches/samba/upstream/source/librpc/ndr/misc.h
   branches/samba/upstream/source/librpc/ndr/security.h
   branches/samba/upstream/source/libsmb/libsmbclient.c
   branches/samba/upstream/source/nsswitch/idmap.c
   branches/samba/upstream/source/nsswitch/idmap_ad.c
   branches/samba/upstream/source/nsswitch/idmap_cache.c
   branches/samba/upstream/source/nsswitch/idmap_ldap.c
   branches/samba/upstream/source/nsswitch/idmap_nss.c
   branches/samba/upstream/source/nsswitch/idmap_passdb.c
   branches/samba/upstream/source/nsswitch/idmap_rid.c
   branches/samba/upstream/source/nsswitch/idmap_tdb.c
   branches/samba/upstream/source/nsswitch/idmap_util.c
   branches/samba/upstream/source/nsswitch/nss_info.c
   branches/samba/upstream/source/nsswitch/nss_info_template.c
   branches/samba/upstream/source/nsswitch/wb_client.c
   branches/samba/upstream/source/nsswitch/winbindd.c
   branches/samba/upstream/source/nsswitch/winbindd.h
   branches/samba/upstream/source/nsswitch/winbindd_ads.c
   branches/samba/upstream/source/nsswitch/winbindd_async.c
   branches/samba/upstream/source/nsswitch/winbindd_cache.c
   branches/samba/upstream/source/nsswitch/winbindd_ccache_access.c
   branches/samba/upstream/source/nsswitch/winbindd_cm.c
   branches/samba/upstream/source/nsswitch/winbindd_cred_cache.c
   branches/samba/upstream/source/nsswitch/winbindd_creds.c
   branches/samba/upstream/source/nsswitch/winbindd_dual.c
   branches/samba/upstream/source/nsswitch/winbindd_group.c
   branches/samba/upstream/source/nsswitch/winbindd_misc.c
   branches/samba/upstream/source/nsswitch/winbindd_nss.h
   branches/samba/upstream/source/nsswitch/winbindd_pam.c
   branches/samba/upstream/source/nsswitch/winbindd_passdb.c
   branches/samba/upstream/source/nsswitch/winbindd_reconnect.c
   branches/samba/upstream/source/nsswitch/winbindd_rpc.c
   branches/samba/upstream/source/nsswitch/winbindd_sid.c
   branches/samba/upstream/source/nsswitch/winbindd_user.c
   branches/samba/upstream/source/nsswitch/winbindd_util.c
   branches/samba/upstream/source/nsswitch/winbindd_wins.c
   branches/samba/upstream/source/printing/print_test.c
   branches/samba/upstream/source/python/
   branches/samba/upstream/source/registry/reg_db.c
   branches/samba/upstream/source/registry/reg_dynamic.c
   branches/samba/upstream/source/registry/reg_frontend.c
   branches/samba/upstream/source/registry/reg_printing.c
   branches/samba/upstream/source/registry/reg_shares.c
   branches/samba/upstream/source/rpc_client/cli_dfs.c
   branches/samba/upstream/source/rpc_client/cli_ds.c
   branches/samba/upstream/source/rpc_client/cli_echo.c
   branches/samba/upstream/source/rpc_client/cli_shutdown.c
   branches/samba/upstream/source/rpc_client/cli_srvsvc.c
   branches/samba/upstream/source/rpc_parse/parse_dfs.c
   branches/samba/upstream/source/rpc_parse/parse_ds.c
   branches/samba/upstream/source/rpc_parse/parse_echo.c
   branches/samba/upstream/source/rpc_parse/parse_lsa.c
   branches/samba/upstream/source/rpc_parse/parse_net.c
   branches/samba/upstream/source/rpc_parse/parse_reg.c
   branches/samba/upstream/source/rpc_parse/parse_samr.c
   branches/samba/upstream/source/rpc_parse/parse_shutdown.c
   branches/samba/upstream/source/rpc_parse/parse_srv.c
   branches/samba/upstream/source/rpc_server/srv_dfs.c
   branches/samba/upstream/source/rpc_server/srv_echo.c
   branches/samba/upstream/source/rpc_server/srv_lsa.c
   branches/samba/upstream/source/rpc_server/srv_lsa_ds.c
   branches/samba/upstream/source/rpc_server/srv_lsa_ds_nt.c
   branches/samba/upstream/source/rpc_server/srv_netlog.c
   branches/samba/upstream/source/rpc_server/srv_reg.c
   branches/samba/upstream/source/rpc_server/srv_reg_nt.c
   branches/samba/upstream/source/rpc_server/srv_samr.c
   branches/samba/upstream/source/rpc_server/srv_srvsvc.c
   branches/samba/upstream/source/rpcclient/cmd_ds.c
   branches/samba/upstream/source/smbd/mangle_map.c
   branches/samba/upstream/source/tdb/
   branches/samba/upstream/source/tests/os2_delete.c
   branches/samba/upstream/source/tests/shared_mmap.c
   branches/samba/upstream/source/tests/unixsock.c
   branches/samba/upstream/source/torture/rpctorture.c
   branches/samba/upstream/source/torture/samtest.h
   branches/samba/upstream/source/torture/t_doschar.c
   branches/samba/upstream/source/utils/net_domain.c
Removed:
   branches/samba/upstream/PFIF.txt
   branches/samba/upstream/docs-xml/manpages-3/ldb.3.xml
   branches/samba/upstream/docs-xml/manpages-3/ldbadd.1.xml
   branches/samba/upstream/docs-xml/manpages-3/ldbdel.1.xml
   branches/samba/upstream/docs-xml/manpages-3/ldbedit.1.xml
   branches/samba/upstream/docs-xml/manpages-3/ldbmodify.1.xml
   branches/samba/upstream/docs-xml/manpages-3/ldbsearch.1.xml
   branches/samba/upstream/docs-xml/smbdotconf/base/configbackend.xml
   branches/samba/upstream/docs-xml/smbdotconf/browse/administrative_share.xml
   branches/samba/upstream/docs-xml/smbdotconf/ldap/clientldapsaslwrapping.xml
   branches/samba/upstream/docs-xml/smbdotconf/ldap/ldapconnectiontimeout.xml
   branches/samba/upstream/docs-xml/smbdotconf/logging/debugclass.xml
   branches/samba/upstream/docs-xml/smbdotconf/logging/ldapdebuglevel.xml
   branches/samba/upstream/docs-xml/smbdotconf/logging/ldapdebugthreshold.xml
   branches/samba/upstream/docs-xml/smbdotconf/misc/clusteraddresses.xml
   branches/samba/upstream/docs-xml/smbdotconf/misc/clustering.xml
   branches/samba/upstream/docs-xml/smbdotconf/misc/ctdbdsocket.xml
   branches/samba/upstream/docs-xml/smbdotconf/misc/registryshares.xml
   branches/samba/upstream/docs-xml/smbdotconf/protocol/minreceivefilesize.xml
   branches/samba/upstream/docs-xml/smbdotconf/security/smbencrypt.xml
   branches/samba/upstream/docs-xml/smbdotconf/winbind/winbindexpandgroups.xml
   branches/samba/upstream/docs-xml/smbdotconf/winbind/winbindrpconly.xml
   branches/samba/upstream/docs/htmldocs/manpages/ldb.3.html
   branches/samba/upstream/docs/htmldocs/manpages/ldbadd.1.html
   branches/samba/upstream/docs/htmldocs/manpages/ldbdel.1.html
   branches/samba/upstream/docs/htmldocs/manpages/ldbedit.1.html
   branches/samba/upstream/docs/htmldocs/manpages/ldbmodify.1.html
   branches/samba/upstream/docs/htmldocs/manpages/ldbsearch.1.html
   branches/samba/upstream/docs/htmldocs/using_samba/
   branches/samba/upstream/docs/manpages/ldb.3
   branches/samba/upstream/docs/manpages/ldbadd.1
   branches/samba/upstream/docs/manpages/ldbdel.1
   branches/samba/upstream/docs/manpages/ldbedit.1
   branches/samba/upstream/docs/manpages/ldbmodify.1
   branches/samba/upstream/docs/manpages/ldbsearch.1
   branches/samba/upstream/examples/LDAP/ol-schema-migrate.pl
   branches/samba/upstream/examples/LDAP/samba-schema-FDS.ldif
   branches/samba/upstream/examples/libsmbclient/testacl3.c
   branches/samba/upstream/examples/libsmbclient/teststat3.c
   branches/samba/upstream/examples/libsmbclient/testtruncate.c
   branches/samba/upstream/examples/libsmbclient/testwrite.c
   branches/samba/upstream/examples/scripts/mount/
   branches/samba/upstream/examples/scripts/users_and_groups/
   branches/samba/upstream/packaging/Debian/debian-sarge/patches/nmbd-signalling.patch
   branches/samba/upstream/packaging/Debian/debian-sarge/patches/undefined-symbols.patch
   branches/samba/upstream/packaging/RHEL4-CTDB/
   branches/samba/upstream/source/auth/token_util.c
   branches/samba/upstream/source/client/cifs.spnego.c
   branches/samba/upstream/source/client/cifs_spnego.h
   branches/samba/upstream/source/client/dnsbrowse.c
   branches/samba/upstream/source/exports/
   branches/samba/upstream/source/groupdb/mapping_ldb.c
   branches/samba/upstream/source/include/async_req.h
   branches/samba/upstream/source/include/async_smb.h
   branches/samba/upstream/source/include/ctdbd_conn.h
   branches/samba/upstream/source/include/dbwrap.h
   branches/samba/upstream/source/include/memcache.h
   branches/samba/upstream/source/include/packet.h
   branches/samba/upstream/source/include/rbtree.h
   branches/samba/upstream/source/include/reg_db.h
   branches/samba/upstream/source/include/talloc_stack.h
   branches/samba/upstream/source/include/transfer_file.h
   branches/samba/upstream/source/iniparser/html/tab_b.gif
   branches/samba/upstream/source/iniparser/html/tab_l.gif
   branches/samba/upstream/source/iniparser/html/tab_r.gif
   branches/samba/upstream/source/iniparser/html/tabs.css
   branches/samba/upstream/source/iniparser_build/
   branches/samba/upstream/source/lib/async_req.c
   branches/samba/upstream/source/lib/conn_tdb.c
   branches/samba/upstream/source/lib/ctdbd_conn.c
   branches/samba/upstream/source/lib/dbwrap.c
   branches/samba/upstream/source/lib/dbwrap_ctdb.c
   branches/samba/upstream/source/lib/dbwrap_file.c
   branches/samba/upstream/source/lib/dbwrap_rbt.c
   branches/samba/upstream/source/lib/dbwrap_tdb.c
   branches/samba/upstream/source/lib/dbwrap_tdb2.c
   branches/samba/upstream/source/lib/dbwrap_util.c
   branches/samba/upstream/source/lib/errmap_unix.c
   branches/samba/upstream/source/lib/file_id.c
   branches/samba/upstream/source/lib/ldb/
   branches/samba/upstream/source/lib/memcache.c
   branches/samba/upstream/source/lib/messages_ctdbd.c
   branches/samba/upstream/source/lib/messages_local.c
   branches/samba/upstream/source/lib/netapi/
   branches/samba/upstream/source/lib/nss_wrapper/
   branches/samba/upstream/source/lib/packet.c
   branches/samba/upstream/source/lib/privileges_basic.c
   branches/samba/upstream/source/lib/rbtree.c
   branches/samba/upstream/source/lib/recvfile.c
   branches/samba/upstream/source/lib/replace/getaddrinfo.c
   branches/samba/upstream/source/lib/replace/getaddrinfo.h
   branches/samba/upstream/source/lib/replace/getifaddrs.c
   branches/samba/upstream/source/lib/replace/inet_aton.c
   branches/samba/upstream/source/lib/replace/inet_ntoa.c
   branches/samba/upstream/source/lib/replace/inet_ntop.c
   branches/samba/upstream/source/lib/replace/inet_pton.c
   branches/samba/upstream/source/lib/replace/libreplace_ld.m4
   branches/samba/upstream/source/lib/replace/libreplace_network.m4
   branches/samba/upstream/source/lib/replace/socket.c
   branches/samba/upstream/source/lib/replace/socketpair.c
   branches/samba/upstream/source/lib/replace/test/getifaddrs.c
   branches/samba/upstream/source/lib/smbconf/
   branches/samba/upstream/source/lib/talloc/rules.mk
   branches/samba/upstream/source/lib/talloc/talloc.i
   branches/samba/upstream/source/lib/talloc/talloc.mk
   branches/samba/upstream/source/lib/talloc_stack.c
   branches/samba/upstream/source/lib/tdb/
   branches/samba/upstream/source/lib/util_nttoken.c
   branches/samba/upstream/source/lib/util_reg.c
   branches/samba/upstream/source/lib/util_reg_api.c
   branches/samba/upstream/source/lib/util_transfer_file.c
   branches/samba/upstream/source/lib/winbind_util.c
   branches/samba/upstream/source/libads/ndr.c
   branches/samba/upstream/source/libads/sasl_wrapping.c
   branches/samba/upstream/source/libcli/
   branches/samba/upstream/source/libgpo/gpo_ini.c
   branches/samba/upstream/source/libgpo/gpo_ini.h
   branches/samba/upstream/source/libgpo/gpo_sec.c
   branches/samba/upstream/source/libnet/
   branches/samba/upstream/source/library-versions.in
   branches/samba/upstream/source/librpc/gen_ndr/cli_dfs.c
   branches/samba/upstream/source/librpc/gen_ndr/cli_dfs.h
   branches/samba/upstream/source/librpc/gen_ndr/cli_dssetup.c
   branches/samba/upstream/source/librpc/gen_ndr/cli_dssetup.h
   branches/samba/upstream/source/librpc/gen_ndr/cli_echo.c
   branches/samba/upstream/source/librpc/gen_ndr/cli_echo.h
   branches/samba/upstream/source/librpc/gen_ndr/cli_epmapper.c
   branches/samba/upstream/source/librpc/gen_ndr/cli_epmapper.h
   branches/samba/upstream/source/librpc/gen_ndr/cli_eventlog.c
   branches/samba/upstream/source/librpc/gen_ndr/cli_eventlog.h
   branches/samba/upstream/source/librpc/gen_ndr/cli_initshutdown.c
   branches/samba/upstream/source/librpc/gen_ndr/cli_initshutdown.h
   branches/samba/upstream/source/librpc/gen_ndr/cli_lsa.c
   branches/samba/upstream/source/librpc/gen_ndr/cli_lsa.h
   branches/samba/upstream/source/librpc/gen_ndr/cli_netlogon.c
   branches/samba/upstream/source/librpc/gen_ndr/cli_netlogon.h
   branches/samba/upstream/source/librpc/gen_ndr/cli_ntsvcs.c
   branches/samba/upstream/source/librpc/gen_ndr/cli_ntsvcs.h
   branches/samba/upstream/source/librpc/gen_ndr/cli_samr.c
   branches/samba/upstream/source/librpc/gen_ndr/cli_samr.h
   branches/samba/upstream/source/librpc/gen_ndr/cli_srvsvc.c
   branches/samba/upstream/source/librpc/gen_ndr/cli_srvsvc.h
   branches/samba/upstream/source/librpc/gen_ndr/cli_svcctl.c
   branches/samba/upstream/source/librpc/gen_ndr/cli_svcctl.h
   branches/samba/upstream/source/librpc/gen_ndr/cli_winreg.c
   branches/samba/upstream/source/librpc/gen_ndr/cli_winreg.h
   branches/samba/upstream/source/librpc/gen_ndr/dfs.h
   branches/samba/upstream/source/librpc/gen_ndr/dssetup.h
   branches/samba/upstream/source/librpc/gen_ndr/echo.h
   branches/samba/upstream/source/librpc/gen_ndr/epmapper.h
   branches/samba/upstream/source/librpc/gen_ndr/eventlog.h
   branches/samba/upstream/source/librpc/gen_ndr/initshutdown.h
   branches/samba/upstream/source/librpc/gen_ndr/krb5pac.h
   branches/samba/upstream/source/librpc/gen_ndr/libnet_join.h
   branches/samba/upstream/source/librpc/gen_ndr/libnetapi.h
   branches/samba/upstream/source/librpc/gen_ndr/lsa.h
   branches/samba/upstream/source/librpc/gen_ndr/messaging.h
   branches/samba/upstream/source/librpc/gen_ndr/misc.h
   branches/samba/upstream/source/librpc/gen_ndr/nbt.h
   branches/samba/upstream/source/librpc/gen_ndr/ndr_dfs.c
   branches/samba/upstream/source/librpc/gen_ndr/ndr_dfs.h
   branches/samba/upstream/source/librpc/gen_ndr/ndr_dssetup.c
   branches/samba/upstream/source/librpc/gen_ndr/ndr_dssetup.h
   branches/samba/upstream/source/librpc/gen_ndr/ndr_echo.c
   branches/samba/upstream/source/librpc/gen_ndr/ndr_echo.h
   branches/samba/upstream/source/librpc/gen_ndr/ndr_epmapper.c
   branches/samba/upstream/source/librpc/gen_ndr/ndr_epmapper.h
   branches/samba/upstream/source/librpc/gen_ndr/ndr_eventlog.c
   branches/samba/upstream/source/librpc/gen_ndr/ndr_eventlog.h
   branches/samba/upstream/source/librpc/gen_ndr/ndr_initshutdown.c
   branches/samba/upstream/source/librpc/gen_ndr/ndr_initshutdown.h
   branches/samba/upstream/source/librpc/gen_ndr/ndr_krb5pac.c
   branches/samba/upstream/source/librpc/gen_ndr/ndr_krb5pac.h
   branches/samba/upstream/source/librpc/gen_ndr/ndr_libnet_join.c
   branches/samba/upstream/source/librpc/gen_ndr/ndr_libnet_join.h
   branches/samba/upstream/source/librpc/gen_ndr/ndr_libnetapi.c
   branches/samba/upstream/source/librpc/gen_ndr/ndr_libnetapi.h
   branches/samba/upstream/source/librpc/gen_ndr/ndr_lsa.c
   branches/samba/upstream/source/librpc/gen_ndr/ndr_lsa.h
   branches/samba/upstream/source/librpc/gen_ndr/ndr_messaging.c
   branches/samba/upstream/source/librpc/gen_ndr/ndr_messaging.h
   branches/samba/upstream/source/librpc/gen_ndr/ndr_misc.c
   branches/samba/upstream/source/librpc/gen_ndr/ndr_misc.h
   branches/samba/upstream/source/librpc/gen_ndr/ndr_nbt.c
   branches/samba/upstream/source/librpc/gen_ndr/ndr_nbt.h
   branches/samba/upstream/source/librpc/gen_ndr/ndr_netlogon.c
   branches/samba/upstream/source/librpc/gen_ndr/ndr_netlogon.h
   branches/samba/upstream/source/librpc/gen_ndr/ndr_ntsvcs.c
   branches/samba/upstream/source/librpc/gen_ndr/ndr_ntsvcs.h
   branches/samba/upstream/source/librpc/gen_ndr/ndr_samr.c
   branches/samba/upstream/source/librpc/gen_ndr/ndr_samr.h
   branches/samba/upstream/source/librpc/gen_ndr/ndr_security.c
   branches/samba/upstream/source/librpc/gen_ndr/ndr_security.h
   branches/samba/upstream/source/librpc/gen_ndr/ndr_srvsvc.c
   branches/samba/upstream/source/librpc/gen_ndr/ndr_svcctl.c
   branches/samba/upstream/source/librpc/gen_ndr/ndr_svcctl.h
   branches/samba/upstream/source/librpc/gen_ndr/ndr_winreg.c
   branches/samba/upstream/source/librpc/gen_ndr/ndr_winreg.h
   branches/samba/upstream/source/librpc/gen_ndr/ndr_xattr.c
   branches/samba/upstream/source/librpc/gen_ndr/ndr_xattr.h
   branches/samba/upstream/source/librpc/gen_ndr/netlogon.h
   branches/samba/upstream/source/librpc/gen_ndr/ntsvcs.h
   branches/samba/upstream/source/librpc/gen_ndr/samr.h
   branches/samba/upstream/source/librpc/gen_ndr/srv_dfs.c
   branches/samba/upstream/source/librpc/gen_ndr/srv_dfs.h
   branches/samba/upstream/source/librpc/gen_ndr/srv_dssetup.c
   branches/samba/upstream/source/librpc/gen_ndr/srv_dssetup.h
   branches/samba/upstream/source/librpc/gen_ndr/srv_echo.c
   branches/samba/upstream/source/librpc/gen_ndr/srv_echo.h
   branches/samba/upstream/source/librpc/gen_ndr/srv_epmapper.c
   branches/samba/upstream/source/librpc/gen_ndr/srv_epmapper.h
   branches/samba/upstream/source/librpc/gen_ndr/srv_eventlog.c
   branches/samba/upstream/source/librpc/gen_ndr/srv_eventlog.h
   branches/samba/upstream/source/librpc/gen_ndr/srv_initshutdown.c
   branches/samba/upstream/source/librpc/gen_ndr/srv_initshutdown.h
   branches/samba/upstream/source/librpc/gen_ndr/srv_lsa.c
   branches/samba/upstream/source/librpc/gen_ndr/srv_lsa.h
   branches/samba/upstream/source/librpc/gen_ndr/srv_netlogon.c
   branches/samba/upstream/source/librpc/gen_ndr/srv_netlogon.h
   branches/samba/upstream/source/librpc/gen_ndr/srv_ntsvcs.c
   branches/samba/upstream/source/librpc/gen_ndr/srv_ntsvcs.h
   branches/samba/upstream/source/librpc/gen_ndr/srv_samr.c
   branches/samba/upstream/source/librpc/gen_ndr/srv_samr.h
   branches/samba/upstream/source/librpc/gen_ndr/srv_srvsvc.c
   branches/samba/upstream/source/librpc/gen_ndr/srv_srvsvc.h
   branches/samba/upstream/source/librpc/gen_ndr/srv_svcctl.c
   branches/samba/upstream/source/librpc/gen_ndr/srv_svcctl.h
   branches/samba/upstream/source/librpc/gen_ndr/srv_winreg.c
   branches/samba/upstream/source/librpc/gen_ndr/srv_winreg.h
   branches/samba/upstream/source/librpc/gen_ndr/winreg.h
   branches/samba/upstream/source/librpc/gen_ndr/xattr.h
   branches/samba/upstream/source/librpc/idl/
   branches/samba/upstream/source/librpc/ndr/ndr_krb5pac.c
   branches/samba/upstream/source/librpc/ndr/uuid.c
   branches/samba/upstream/source/librpc/tables.pl
   branches/samba/upstream/source/librpc/tools/
   branches/samba/upstream/source/libsmb/async_smb.c
   branches/samba/upstream/source/libsmb/dsgetdcname.c
   branches/samba/upstream/source/libsmb/libsmb_context.c
   branches/samba/upstream/source/libsmb/libsmb_dir.c
   branches/samba/upstream/source/libsmb/libsmb_file.c
   branches/samba/upstream/source/libsmb/libsmb_misc.c
   branches/samba/upstream/source/libsmb/libsmb_path.c
   branches/samba/upstream/source/libsmb/libsmb_printjob.c
   branches/samba/upstream/source/libsmb/libsmb_server.c
   branches/samba/upstream/source/libsmb/libsmb_setget.c
   branches/samba/upstream/source/libsmb/libsmb_stat.c
   branches/samba/upstream/source/libsmb/libsmb_xattr.c
   branches/samba/upstream/source/libsmb/smb_seal.c
   branches/samba/upstream/source/m4/
   branches/samba/upstream/source/modules/vfs_aio_fork.c
   branches/samba/upstream/source/modules/vfs_fileid.c
   branches/samba/upstream/source/modules/vfs_gpfs.h
   branches/samba/upstream/source/modules/vfs_shadow_copy2.c
   branches/samba/upstream/source/modules/vfs_streams_depot.c
   branches/samba/upstream/source/modules/vfs_streams_xattr.c
   branches/samba/upstream/source/modules/vfs_syncops.c
   branches/samba/upstream/source/modules/vfs_tsmsm.c
   branches/samba/upstream/source/modules/vfs_xattr_tdb.c
   branches/samba/upstream/source/modules/vfs_zfsacl.c
   branches/samba/upstream/source/nsswitch/libwbclient/
   branches/samba/upstream/source/nsswitch/winbind_krb5_locator.c
   branches/samba/upstream/source/nsswitch/winbind_struct_protocol.h
   branches/samba/upstream/source/param/util.c
   branches/samba/upstream/source/pkgconfig/
   branches/samba/upstream/source/registry/reg_api.c
   branches/samba/upstream/source/registry/reg_backend_current_version.c
   branches/samba/upstream/source/registry/reg_backend_db.c
   branches/samba/upstream/source/registry/reg_backend_hkpt_params.c
   branches/samba/upstream/source/registry/reg_backend_netlogon_params.c
   branches/samba/upstream/source/registry/reg_backend_perflib.c
   branches/samba/upstream/source/registry/reg_backend_printing.c
   branches/samba/upstream/source/registry/reg_backend_prod_options.c
   branches/samba/upstream/source/registry/reg_backend_shares.c
   branches/samba/upstream/source/registry/reg_backend_smbconf.c
   branches/samba/upstream/source/registry/reg_backend_tcpip_params.c
   branches/samba/upstream/source/registry/reg_dispatcher.c
   branches/samba/upstream/source/registry/reg_init_basic.c
   branches/samba/upstream/source/registry/reg_init_full.c
   branches/samba/upstream/source/registry/reg_init_smbconf.c
   branches/samba/upstream/source/registry/reg_util_legacy.c
   branches/samba/upstream/source/rpc_client/init_lsa.c
   branches/samba/upstream/source/rpc_client/init_netlogon.c
   branches/samba/upstream/source/rpc_client/init_samr.c
   branches/samba/upstream/source/rpc_client/init_srvsvc.c
   branches/samba/upstream/source/rpc_server/srv_dssetup_nt.c
   branches/samba/upstream/source/rpc_server/srv_initshutdown_nt.c
   branches/samba/upstream/source/rpc_server/srv_winreg_nt.c
   branches/samba/upstream/source/rpcclient/cmd_dssetup.c
   branches/samba/upstream/source/rpcclient/cmd_ntsvcs.c
   branches/samba/upstream/source/script/build_idl.sh
   branches/samba/upstream/source/script/count_80_col.pl
   branches/samba/upstream/source/script/fix_bool.pl
   branches/samba/upstream/source/script/format_indent.sh
   branches/samba/upstream/source/script/mksyms.awk
   branches/samba/upstream/source/script/mksyms.sh
   branches/samba/upstream/source/script/strip_trail_ws.pl
   branches/samba/upstream/source/script/tests/test_net_registry.sh
   branches/samba/upstream/source/script/tests/test_ntlm_auth_s3.sh
   branches/samba/upstream/source/script/tests/test_wbinfo_s3.sh
   branches/samba/upstream/source/smbd/dnsregister.c
   branches/samba/upstream/source/smbd/file_access.c
   branches/samba/upstream/source/smbd/seal.c
   branches/samba/upstream/source/torture/test_ntlm_auth.py
   branches/samba/upstream/source/utils/net_conf.c
   branches/samba/upstream/source/utils/net_dom.c
   branches/samba/upstream/source/utils/net_registry.c
   branches/samba/upstream/source/utils/net_registry_util.c
   branches/samba/upstream/source/utils/net_registry_util.h
   branches/samba/upstream/source/winbindd/
Modified:
   branches/samba/upstream/COPYING
   branches/samba/upstream/README
   branches/samba/upstream/README.Coding
   branches/samba/upstream/WHATSNEW.txt
   branches/samba/upstream/docs-xml/Samba3-Developers-Guide/vfs.xml
   branches/samba/upstream/docs-xml/Samba3-HOWTO/TOSHARG-CUPS-printing.xml
   branches/samba/upstream/docs-xml/manpages-3/eventlogadm.8.xml
   branches/samba/upstream/docs-xml/manpages-3/findsmb.1.xml
   branches/samba/upstream/docs-xml/manpages-3/idmap_ad.8.xml
   branches/samba/upstream/docs-xml/manpages-3/idmap_ldap.8.xml
   branches/samba/upstream/docs-xml/manpages-3/idmap_nss.8.xml
   branches/samba/upstream/docs-xml/manpages-3/idmap_rid.8.xml
   branches/samba/upstream/docs-xml/manpages-3/idmap_tdb.8.xml
   branches/samba/upstream/docs-xml/manpages-3/libsmbclient.7.xml
   branches/samba/upstream/docs-xml/manpages-3/lmhosts.5.xml
   branches/samba/upstream/docs-xml/manpages-3/log2pcap.1.xml
   branches/samba/upstream/docs-xml/manpages-3/mount.cifs.8.xml
   branches/samba/upstream/docs-xml/manpages-3/net.8.xml
   branches/samba/upstream/docs-xml/manpages-3/nmbd.8.xml
   branches/samba/upstream/docs-xml/manpages-3/nmblookup.1.xml
   branches/samba/upstream/docs-xml/manpages-3/ntlm_auth.1.xml
   branches/samba/upstream/docs-xml/manpages-3/pam_winbind.7.xml
   branches/samba/upstream/docs-xml/manpages-3/pdbedit.8.xml
   branches/samba/upstream/docs-xml/manpages-3/profiles.1.xml
   branches/samba/upstream/docs-xml/manpages-3/rpcclient.1.xml
   branches/samba/upstream/docs-xml/manpages-3/samba.7.xml
   branches/samba/upstream/docs-xml/manpages-3/smb.conf.5.xml
   branches/samba/upstream/docs-xml/manpages-3/smbcacls.1.xml
   branches/samba/upstream/docs-xml/manpages-3/smbclient.1.xml
   branches/samba/upstream/docs-xml/manpages-3/smbcontrol.1.xml
   branches/samba/upstream/docs-xml/manpages-3/smbcquotas.1.xml
   branches/samba/upstream/docs-xml/manpages-3/smbd.8.xml
   branches/samba/upstream/docs-xml/manpages-3/smbget.1.xml
   branches/samba/upstream/docs-xml/manpages-3/smbgetrc.5.xml
   branches/samba/upstream/docs-xml/manpages-3/smbpasswd.5.xml
   branches/samba/upstream/docs-xml/manpages-3/smbpasswd.8.xml
   branches/samba/upstream/docs-xml/manpages-3/smbsh.1.xml
   branches/samba/upstream/docs-xml/manpages-3/smbspool.8.xml
   branches/samba/upstream/docs-xml/manpages-3/smbstatus.1.xml
   branches/samba/upstream/docs-xml/manpages-3/smbtar.1.xml
   branches/samba/upstream/docs-xml/manpages-3/smbtree.1.xml
   branches/samba/upstream/docs-xml/manpages-3/swat.8.xml
   branches/samba/upstream/docs-xml/manpages-3/tdbbackup.8.xml
   branches/samba/upstream/docs-xml/manpages-3/tdbdump.8.xml
   branches/samba/upstream/docs-xml/manpages-3/tdbtool.8.xml
   branches/samba/upstream/docs-xml/manpages-3/testparm.1.xml
   branches/samba/upstream/docs-xml/manpages-3/umount.cifs.8.xml
   branches/samba/upstream/docs-xml/manpages-3/vfs_audit.8.xml
   branches/samba/upstream/docs-xml/manpages-3/vfs_cacheprime.8.xml
   branches/samba/upstream/docs-xml/manpages-3/vfs_cap.8.xml
   branches/samba/upstream/docs-xml/manpages-3/vfs_catia.8.xml
   branches/samba/upstream/docs-xml/manpages-3/vfs_commit.8.xml
   branches/samba/upstream/docs-xml/manpages-3/vfs_default_quota.8.xml
   branches/samba/upstream/docs-xml/manpages-3/vfs_extd_audit.8.xml
   branches/samba/upstream/docs-xml/manpages-3/vfs_fake_perms.8.xml
   branches/samba/upstream/docs-xml/manpages-3/vfs_full_audit.8.xml
   branches/samba/upstream/docs-xml/manpages-3/vfs_gpfs.8.xml
   branches/samba/upstream/docs-xml/manpages-3/vfs_netatalk.8.xml
   branches/samba/upstream/docs-xml/manpages-3/vfs_notify_fam.8.xml
   branches/samba/upstream/docs-xml/manpages-3/vfs_prealloc.8.xml
   branches/samba/upstream/docs-xml/manpages-3/vfs_readahead.8.xml
   branches/samba/upstream/docs-xml/manpages-3/vfs_readonly.8.xml
   branches/samba/upstream/docs-xml/manpages-3/vfs_recycle.8.xml
   branches/samba/upstream/docs-xml/manpages-3/vfs_shadow_copy.8.xml
   branches/samba/upstream/docs-xml/manpages-3/vfs_xattr_tdb.8.xml
   branches/samba/upstream/docs-xml/manpages-3/vfstest.1.xml
   branches/samba/upstream/docs-xml/manpages-3/wbinfo.1.xml
   branches/samba/upstream/docs-xml/manpages-3/winbindd.8.xml
   branches/samba/upstream/docs-xml/smbdotconf/ldap/ldaptimeout.xml
   branches/samba/upstream/docs-xml/smbdotconf/misc/include.xml
   branches/samba/upstream/docs-xml/smbdotconf/misc/lockdirectory.xml
   branches/samba/upstream/docs-xml/smbdotconf/security/clientlanmanauth.xml
   branches/samba/upstream/docs-xml/smbdotconf/security/clientplaintextauth.xml
   branches/samba/upstream/docs-xml/smbdotconf/security/lanmanauth.xml
   branches/samba/upstream/docs-xml/smbdotconf/vfs/getquotacommand.xml
   branches/samba/upstream/docs-xml/xslt/expand-smbconfdoc.xsl
   branches/samba/upstream/docs/Samba3-ByExample.pdf
   branches/samba/upstream/docs/Samba3-Developers-Guide.pdf
   branches/samba/upstream/docs/Samba3-HOWTO.pdf
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/2000users.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/Big500users.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/DMSMig.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/DomApps.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/ExNetworks.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/HA.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/RefSection.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/apa.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/appendix.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/ch14.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/go01.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/happy.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/AccountingNetwork.png
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/Charity-Network.png
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/UNIX-Samba-and-LDAP.png
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/acct2net.png
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/ch7-dual-additive-LDAP-Ok.png
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/ch7-dual-additive-LDAP.png
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/ch7-fail-overLDAP.png
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/ch7-singleLDAP.png
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/ch8-migration.png
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/chap4-net.png
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/chap5-net.png
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/chap6-net.png
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/chap7-idresol.png
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/chap9-ADSDC.png
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/chap9-SambaDC.png
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/index.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/ix01.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/kerberos.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/ntmigration.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/nw4migration.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/pr01.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/pr02.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/pr03.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/preface.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/primer.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/secure.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/simple.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/small.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/unixclients.html
   branches/samba/upstream/docs/htmldocs/Samba3-ByExample/upgrades.html
   branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/CodingSuggestions.html
   branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/Packaging.html
   branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/architecture.html
   branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/contributing.html
   branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/debug.html
   branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/devprinting.html
   branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/index.html
   branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/internals.html
   branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/modules.html
   branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/ntdomain.html
   branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/parsing.html
   branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pr01.html
   branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pt01.html
   branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pt02.html
   branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pt03.html
   branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pt04.html
   branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pt05.html
   branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pwencrypt.html
   branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/rpc-plugin.html
   branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/tracing.html
   branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/unix-smb.html
   branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/vfs.html
   branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/wins.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/AccessControls.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/AdvancedNetworkManagement.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/Appendix.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/Backup.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/CUPS-printing.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ChangeNotes.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ClientConfig.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/DNSDHCP.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/FastStart.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/InterdomainTrusts.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/IntroSMB.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/NT4Migration.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/NetCommand.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/NetworkBrowsing.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/Other-Clients.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/PolicyMgmt.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/Portability.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ProfileMgmt.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/SWAT.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/SambaHA.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ServerType.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/StandAloneServer.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/TOSHpreface.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/VFS.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/apa.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/bugreport.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/cfgsmarts.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ch-ldap-tls.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ch46.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/classicalprinting.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/compiling.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/diagnosis.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/domain-member.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/go01.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/groupmapping.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/idmapper.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/access1.png
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/browsing1.png
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/cups1.png
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/cups2.png
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/domain.png
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/idmap-gid2sid.png
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/idmap-sid2gid.png
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/idmap-sid2uid.png
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/idmap-store-gid2sid.png
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/idmap-uid2sid.png
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/pdftoepsonusb.png
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/pdftosocket.png
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/trusts1.png
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/index.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/install.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/integrate-ms-networks.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/introduction.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ix01.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/largefile.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/locking.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/migration.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/msdfs.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/optional.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/pam.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/passdb.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/pr01.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/pr02.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/pr03.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/problems.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/rights.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/samba-bdc.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/samba-pdc.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/securing-samba.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/speed.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/troubleshooting.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/type.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/unicode.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/upgrading-to-3.0.html
   branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/winbind.html
   branches/samba/upstream/docs/htmldocs/manpages/eventlogadm.8.html
   branches/samba/upstream/docs/htmldocs/manpages/findsmb.1.html
   branches/samba/upstream/docs/htmldocs/manpages/idmap_ad.8.html
   branches/samba/upstream/docs/htmldocs/manpages/idmap_ldap.8.html
   branches/samba/upstream/docs/htmldocs/manpages/idmap_nss.8.html
   branches/samba/upstream/docs/htmldocs/manpages/idmap_rid.8.html
   branches/samba/upstream/docs/htmldocs/manpages/idmap_tdb.8.html
   branches/samba/upstream/docs/htmldocs/manpages/index.html
   branches/samba/upstream/docs/htmldocs/manpages/libsmbclient.7.html
   branches/samba/upstream/docs/htmldocs/manpages/lmhosts.5.html
   branches/samba/upstream/docs/htmldocs/manpages/log2pcap.1.html
   branches/samba/upstream/docs/htmldocs/manpages/mount.cifs.8.html
   branches/samba/upstream/docs/htmldocs/manpages/net.8.html
   branches/samba/upstream/docs/htmldocs/manpages/nmbd.8.html
   branches/samba/upstream/docs/htmldocs/manpages/nmblookup.1.html
   branches/samba/upstream/docs/htmldocs/manpages/ntlm_auth.1.html
   branches/samba/upstream/docs/htmldocs/manpages/pam_winbind.7.html
   branches/samba/upstream/docs/htmldocs/manpages/pdbedit.8.html
   branches/samba/upstream/docs/htmldocs/manpages/profiles.1.html
   branches/samba/upstream/docs/htmldocs/manpages/rpcclient.1.html
   branches/samba/upstream/docs/htmldocs/manpages/samba.7.html
   branches/samba/upstream/docs/htmldocs/manpages/smb.conf.5.html
   branches/samba/upstream/docs/htmldocs/manpages/smbcacls.1.html
   branches/samba/upstream/docs/htmldocs/manpages/smbclient.1.html
   branches/samba/upstream/docs/htmldocs/manpages/smbcontrol.1.html
   branches/samba/upstream/docs/htmldocs/manpages/smbcquotas.1.html
   branches/samba/upstream/docs/htmldocs/manpages/smbd.8.html
   branches/samba/upstream/docs/htmldocs/manpages/smbget.1.html
   branches/samba/upstream/docs/htmldocs/manpages/smbgetrc.5.html
   branches/samba/upstream/docs/htmldocs/manpages/smbpasswd.5.html
   branches/samba/upstream/docs/htmldocs/manpages/smbpasswd.8.html
   branches/samba/upstream/docs/htmldocs/manpages/smbsh.1.html
   branches/samba/upstream/docs/htmldocs/manpages/smbspool.8.html
   branches/samba/upstream/docs/htmldocs/manpages/smbstatus.1.html
   branches/samba/upstream/docs/htmldocs/manpages/smbtar.1.html
   branches/samba/upstream/docs/htmldocs/manpages/smbtree.1.html
   branches/samba/upstream/docs/htmldocs/manpages/swat.8.html
   branches/samba/upstream/docs/htmldocs/manpages/tdbbackup.8.html
   branches/samba/upstream/docs/htmldocs/manpages/tdbdump.8.html
   branches/samba/upstream/docs/htmldocs/manpages/tdbtool.8.html
   branches/samba/upstream/docs/htmldocs/manpages/testparm.1.html
   branches/samba/upstream/docs/htmldocs/manpages/umount.cifs.8.html
   branches/samba/upstream/docs/htmldocs/manpages/vfs_audit.8.html
   branches/samba/upstream/docs/htmldocs/manpages/vfs_cacheprime.8.html
   branches/samba/upstream/docs/htmldocs/manpages/vfs_cap.8.html
   branches/samba/upstream/docs/htmldocs/manpages/vfs_catia.8.html
   branches/samba/upstream/docs/htmldocs/manpages/vfs_commit.8.html
   branches/samba/upstream/docs/htmldocs/manpages/vfs_default_quota.8.html
   branches/samba/upstream/docs/htmldocs/manpages/vfs_extd_audit.8.html
   branches/samba/upstream/docs/htmldocs/manpages/vfs_fake_perms.8.html
   branches/samba/upstream/docs/htmldocs/manpages/vfs_full_audit.8.html
   branches/samba/upstream/docs/htmldocs/manpages/vfs_gpfs.8.html
   branches/samba/upstream/docs/htmldocs/manpages/vfs_netatalk.8.html
   branches/samba/upstream/docs/htmldocs/manpages/vfs_notify_fam.8.html
   branches/samba/upstream/docs/htmldocs/manpages/vfs_prealloc.8.html
   branches/samba/upstream/docs/htmldocs/manpages/vfs_readahead.8.html
   branches/samba/upstream/docs/htmldocs/manpages/vfs_readonly.8.html
   branches/samba/upstream/docs/htmldocs/manpages/vfs_recycle.8.html
   branches/samba/upstream/docs/htmldocs/manpages/vfs_shadow_copy.8.html
   branches/samba/upstream/docs/htmldocs/manpages/vfs_xattr_tdb.8.html
   branches/samba/upstream/docs/htmldocs/manpages/vfstest.1.html
   branches/samba/upstream/docs/htmldocs/manpages/wbinfo.1.html
   branches/samba/upstream/docs/htmldocs/manpages/winbindd.8.html
   branches/samba/upstream/docs/manpages/eventlogadm.8
   branches/samba/upstream/docs/manpages/findsmb.1
   branches/samba/upstream/docs/manpages/idmap_ad.8
   branches/samba/upstream/docs/manpages/idmap_ldap.8
   branches/samba/upstream/docs/manpages/idmap_nss.8
   branches/samba/upstream/docs/manpages/idmap_rid.8
   branches/samba/upstream/docs/manpages/idmap_tdb.8
   branches/samba/upstream/docs/manpages/libsmbclient.7
   branches/samba/upstream/docs/manpages/lmhosts.5
   branches/samba/upstream/docs/manpages/log2pcap.1
   branches/samba/upstream/docs/manpages/mount.cifs.8
   branches/samba/upstream/docs/manpages/net.8
   branches/samba/upstream/docs/manpages/nmbd.8
   branches/samba/upstream/docs/manpages/nmblookup.1
   branches/samba/upstream/docs/manpages/ntlm_auth.1
   branches/samba/upstream/docs/manpages/pam_winbind.7
   branches/samba/upstream/docs/manpages/pdbedit.8
   branches/samba/upstream/docs/manpages/profiles.1
   branches/samba/upstream/docs/manpages/rpcclient.1
   branches/samba/upstream/docs/manpages/samba.7
   branches/samba/upstream/docs/manpages/smb.conf.5
   branches/samba/upstream/docs/manpages/smbcacls.1
   branches/samba/upstream/docs/manpages/smbclient.1
   branches/samba/upstream/docs/manpages/smbcontrol.1
   branches/samba/upstream/docs/manpages/smbcquotas.1
   branches/samba/upstream/docs/manpages/smbd.8
   branches/samba/upstream/docs/manpages/smbget.1
   branches/samba/upstream/docs/manpages/smbgetrc.5
   branches/samba/upstream/docs/manpages/smbpasswd.5
   branches/samba/upstream/docs/manpages/smbpasswd.8
   branches/samba/upstream/docs/manpages/smbsh.1
   branches/samba/upstream/docs/manpages/smbspool.8
   branches/samba/upstream/docs/manpages/smbstatus.1
   branches/samba/upstream/docs/manpages/smbtar.1
   branches/samba/upstream/docs/manpages/smbtree.1
   branches/samba/upstream/docs/manpages/swat.8
   branches/samba/upstream/docs/manpages/tdbbackup.8
   branches/samba/upstream/docs/manpages/tdbdump.8
   branches/samba/upstream/docs/manpages/tdbtool.8
   branches/samba/upstream/docs/manpages/testparm.1
   branches/samba/upstream/docs/manpages/umount.cifs.8
   branches/samba/upstream/docs/manpages/vfs_audit.8
   branches/samba/upstream/docs/manpages/vfs_cacheprime.8
   branches/samba/upstream/docs/manpages/vfs_cap.8
   branches/samba/upstream/docs/manpages/vfs_catia.8
   branches/samba/upstream/docs/manpages/vfs_commit.8
   branches/samba/upstream/docs/manpages/vfs_default_quota.8
   branches/samba/upstream/docs/manpages/vfs_extd_audit.8
   branches/samba/upstream/docs/manpages/vfs_fake_perms.8
   branches/samba/upstream/docs/manpages/vfs_full_audit.8
   branches/samba/upstream/docs/manpages/vfs_gpfs.8
   branches/samba/upstream/docs/manpages/vfs_netatalk.8
   branches/samba/upstream/docs/manpages/vfs_notify_fam.8
   branches/samba/upstream/docs/manpages/vfs_prealloc.8
   branches/samba/upstream/docs/manpages/vfs_readahead.8
   branches/samba/upstream/docs/manpages/vfs_readonly.8
   branches/samba/upstream/docs/manpages/vfs_recycle.8
   branches/samba/upstream/docs/manpages/vfs_shadow_copy.8
   branches/samba/upstream/docs/manpages/vfs_xattr_tdb.8
   branches/samba/upstream/docs/manpages/vfstest.1
   branches/samba/upstream/docs/manpages/wbinfo.1
   branches/samba/upstream/docs/manpages/winbindd.8
   branches/samba/upstream/examples/LDAP/README
   branches/samba/upstream/examples/LDAP/samba.schema
   branches/samba/upstream/examples/VFS/Makefile.in
   branches/samba/upstream/examples/VFS/config.guess
   branches/samba/upstream/examples/VFS/config.sub
   branches/samba/upstream/examples/VFS/configure.in
   branches/samba/upstream/examples/VFS/shadow_copy_test.c
   branches/samba/upstream/examples/VFS/skel_opaque.c
   branches/samba/upstream/examples/VFS/skel_transparent.c
   branches/samba/upstream/examples/auth/auth_skel.c
   branches/samba/upstream/examples/libsmbclient/Makefile
   branches/samba/upstream/examples/libsmbclient/get_auth_data_fn.h
   branches/samba/upstream/examples/libsmbclient/smbwrapper/Makefile
   branches/samba/upstream/examples/libsmbclient/smbwrapper/select.c
   branches/samba/upstream/examples/libsmbclient/smbwrapper/smbsh.c
   branches/samba/upstream/examples/libsmbclient/smbwrapper/smbw.c
   branches/samba/upstream/examples/libsmbclient/smbwrapper/smbw.h
   branches/samba/upstream/examples/libsmbclient/smbwrapper/smbw_dir.c
   branches/samba/upstream/examples/libsmbclient/smbwrapper/smbw_stat.c
   branches/samba/upstream/examples/libsmbclient/smbwrapper/wrapper.c
   branches/samba/upstream/examples/libsmbclient/smbwrapper/wrapper.h
   branches/samba/upstream/examples/libsmbclient/testacl.c
   branches/samba/upstream/examples/libsmbclient/testacl2.c
   branches/samba/upstream/examples/libsmbclient/testbrowse.c
   branches/samba/upstream/examples/libsmbclient/testbrowse2.c
   branches/samba/upstream/examples/libsmbclient/testread.c
   branches/samba/upstream/examples/libsmbclient/testsmbc.c
   branches/samba/upstream/examples/libsmbclient/tree.c
   branches/samba/upstream/examples/logon/mklogon/mklogon.pl
   branches/samba/upstream/examples/misc/adssearch.pl
   branches/samba/upstream/examples/pam_winbind/pam_winbind.conf
   branches/samba/upstream/examples/pcap2nbench/COPYING
   branches/samba/upstream/examples/pcap2nbench/Makefile
   branches/samba/upstream/examples/pcap2nbench/closerequest.cpp
   branches/samba/upstream/examples/pcap2nbench/closerequest.hpp
   branches/samba/upstream/examples/pcap2nbench/ethernet.cpp
   branches/samba/upstream/examples/pcap2nbench/ethernet.hpp
   branches/samba/upstream/examples/pcap2nbench/ip.cpp
   branches/samba/upstream/examples/pcap2nbench/ip.hpp
   branches/samba/upstream/examples/pcap2nbench/main.cpp
   branches/samba/upstream/examples/pcap2nbench/ntcreateandxrequest.cpp
   branches/samba/upstream/examples/pcap2nbench/ntcreateandxrequest.hpp
   branches/samba/upstream/examples/pcap2nbench/ntcreateandxresponse.cpp
   branches/samba/upstream/examples/pcap2nbench/ntcreateandxresponse.hpp
   branches/samba/upstream/examples/pcap2nbench/readandxrequest.cpp
   branches/samba/upstream/examples/pcap2nbench/readandxrequest.hpp
   branches/samba/upstream/examples/pcap2nbench/readandxresponse.hpp
   branches/samba/upstream/examples/pcap2nbench/smb.cpp
   branches/samba/upstream/examples/pcap2nbench/smb.hpp
   branches/samba/upstream/examples/pcap2nbench/tcp.cpp
   branches/samba/upstream/examples/pcap2nbench/tcp.hpp
   branches/samba/upstream/examples/pcap2nbench/writeandxrequest.cpp
   branches/samba/upstream/examples/pcap2nbench/writeandxrequest.hpp
   branches/samba/upstream/examples/pdb/test.c
   branches/samba/upstream/examples/perfcounter/Makefile
   branches/samba/upstream/examples/perfcounter/perf.h
   branches/samba/upstream/examples/perfcounter/perf_writer.c
   branches/samba/upstream/examples/perfcounter/perf_writer_cpu.c
   branches/samba/upstream/examples/perfcounter/perf_writer_disk.c
   branches/samba/upstream/examples/perfcounter/perf_writer_mem.c
   branches/samba/upstream/examples/perfcounter/perf_writer_process.c
   branches/samba/upstream/examples/perfcounter/perf_writer_util.c
   branches/samba/upstream/examples/perfcounter/perfcountd.init
   branches/samba/upstream/examples/printing/VampireDriversFunctions
   branches/samba/upstream/examples/printing/prtpub.c
   branches/samba/upstream/examples/scripts/eventlog/parselog.pl
   branches/samba/upstream/examples/scripts/printing/cups/smbaddprinter.pl
   branches/samba/upstream/examples/scripts/printing/cups/smbdelprinter.pl
   branches/samba/upstream/examples/scripts/shares/perl/modify_samba_config.pl
   branches/samba/upstream/examples/scripts/shares/python/SambaConfig.py
   branches/samba/upstream/examples/scripts/shares/python/SambaParm.py
   branches/samba/upstream/examples/scripts/shares/python/generate_parm_table.py
   branches/samba/upstream/examples/scripts/shares/python/modify_samba_config.py
   branches/samba/upstream/examples/scripts/shares/python/smbparm.py
   branches/samba/upstream/packaging/Debian/README
   branches/samba/upstream/packaging/Debian/debian-sarge/changelog
   branches/samba/upstream/packaging/Debian/debian-sarge/copyright
   branches/samba/upstream/packaging/Debian/debian-sarge/patches/documentation.patch
   branches/samba/upstream/packaging/Debian/debian-sarge/patches/fhs.patch
   branches/samba/upstream/packaging/Debian/debian-sarge/patches/non-linux-ports.patch
   branches/samba/upstream/packaging/Debian/debian-sarge/patches/samba.patch
   branches/samba/upstream/packaging/Debian/debian-unstable/copyright
   branches/samba/upstream/packaging/Debian/debian-woody/copyright
   branches/samba/upstream/packaging/LSB/smb.conf
   branches/samba/upstream/pcp/README
   branches/samba/upstream/release-scripts/create-tarball
   branches/samba/upstream/source/Makefile.in
   branches/samba/upstream/source/VERSION
   branches/samba/upstream/source/auth/auth.c
   branches/samba/upstream/source/auth/auth_builtin.c
   branches/samba/upstream/source/auth/auth_compat.c
   branches/samba/upstream/source/auth/auth_domain.c
   branches/samba/upstream/source/auth/auth_ntlmssp.c
   branches/samba/upstream/source/auth/auth_sam.c
   branches/samba/upstream/source/auth/auth_script.c
   branches/samba/upstream/source/auth/auth_server.c
   branches/samba/upstream/source/auth/auth_unix.c
   branches/samba/upstream/source/auth/auth_util.c
   branches/samba/upstream/source/auth/auth_winbind.c
   branches/samba/upstream/source/auth/pampass.c
   branches/samba/upstream/source/auth/pass_check.c
   branches/samba/upstream/source/autogen.sh
   branches/samba/upstream/source/client/client.c
   branches/samba/upstream/source/client/clitar.c
   branches/samba/upstream/source/client/mount.cifs.c
   branches/samba/upstream/source/client/smbspool.c
   branches/samba/upstream/source/client/tree.c
   branches/samba/upstream/source/client/umount.cifs.c
   branches/samba/upstream/source/config.guess
   branches/samba/upstream/source/config.sub
   branches/samba/upstream/source/configure
   branches/samba/upstream/source/configure.developer
   branches/samba/upstream/source/configure.in
   branches/samba/upstream/source/dynconfig.c
   branches/samba/upstream/source/groupdb/mapping.c
   branches/samba/upstream/source/groupdb/mapping.h
   branches/samba/upstream/source/groupdb/mapping_tdb.c
   branches/samba/upstream/source/include/MacExtensions.h
   branches/samba/upstream/source/include/ads.h
   branches/samba/upstream/source/include/ads_dns.h
   branches/samba/upstream/source/include/ads_protos.h
   branches/samba/upstream/source/include/adt_tree.h
   branches/samba/upstream/source/include/asn_1.h
   branches/samba/upstream/source/include/auth.h
   branches/samba/upstream/source/include/authdata.h
   branches/samba/upstream/source/include/byteorder.h
   branches/samba/upstream/source/include/charset.h
   branches/samba/upstream/source/include/client.h
   branches/samba/upstream/source/include/clitar.h
   branches/samba/upstream/source/include/config.h.in
   branches/samba/upstream/source/include/dcerpc.h
   branches/samba/upstream/source/include/debug.h
   branches/samba/upstream/source/include/debugparse.h
   branches/samba/upstream/source/include/dlinklist.h
   branches/samba/upstream/source/include/doserr.h
   branches/samba/upstream/source/include/dynconfig.h
   branches/samba/upstream/source/include/event.h
   branches/samba/upstream/source/include/fake_file.h
   branches/samba/upstream/source/include/gpo.h
   branches/samba/upstream/source/include/hmacmd5.h
   branches/samba/upstream/source/include/idmap.h
   branches/samba/upstream/source/include/includes.h
   branches/samba/upstream/source/include/interfaces.h
   branches/samba/upstream/source/include/intl.h
   branches/samba/upstream/source/include/libmsrpc.h
   branches/samba/upstream/source/include/libmsrpc_internal.h
   branches/samba/upstream/source/include/libsmb_internal.h
   branches/samba/upstream/source/include/libsmbclient.h
   branches/samba/upstream/source/include/local.h
   branches/samba/upstream/source/include/locking.h
   branches/samba/upstream/source/include/mangle.h
   branches/samba/upstream/source/include/mapping.h
   branches/samba/upstream/source/include/messages.h
   branches/samba/upstream/source/include/module.h
   branches/samba/upstream/source/include/msdfs.h
   branches/samba/upstream/source/include/nameserv.h
   branches/samba/upstream/source/include/nss_info.h
   branches/samba/upstream/source/include/nt_printing.h
   branches/samba/upstream/source/include/nt_status.h
   branches/samba/upstream/source/include/ntdomain.h
   branches/samba/upstream/source/include/nterr.h
   branches/samba/upstream/source/include/ntioctl.h
   branches/samba/upstream/source/include/ntlmssp.h
   branches/samba/upstream/source/include/ntquotas.h
   branches/samba/upstream/source/include/passdb.h
   branches/samba/upstream/source/include/popt_common.h
   branches/samba/upstream/source/include/printing.h
   branches/samba/upstream/source/include/privileges.h
   branches/samba/upstream/source/include/rap.h
   branches/samba/upstream/source/include/reg_objects.h
   branches/samba/upstream/source/include/regfio.h
   branches/samba/upstream/source/include/rpc_client.h
   branches/samba/upstream/source/include/rpc_dce.h
   branches/samba/upstream/source/include/rpc_eventlog.h
   branches/samba/upstream/source/include/rpc_lsa.h
   branches/samba/upstream/source/include/rpc_misc.h
   branches/samba/upstream/source/include/rpc_ntsvcs.h
   branches/samba/upstream/source/include/rpc_perfcount.h
   branches/samba/upstream/source/include/rpc_perfcount_defs.h
   branches/samba/upstream/source/include/rpc_secdes.h
   branches/samba/upstream/source/include/rpc_spoolss.h
   branches/samba/upstream/source/include/rpc_svcctl.h
   branches/samba/upstream/source/include/safe_string.h
   branches/samba/upstream/source/include/samba_linux_quota.h
   branches/samba/upstream/source/include/secrets.h
   branches/samba/upstream/source/include/session.h
   branches/samba/upstream/source/include/smb.h
   branches/samba/upstream/source/include/smb_acls.h
   branches/samba/upstream/source/include/smb_ldap.h
   branches/samba/upstream/source/include/smb_macros.h
   branches/samba/upstream/source/include/smb_share_modes.h
   branches/samba/upstream/source/include/smbldap.h
   branches/samba/upstream/source/include/smbprofile.h
   branches/samba/upstream/source/include/spnego.h
   branches/samba/upstream/source/include/srvstr.h
   branches/samba/upstream/source/include/sysquotas.h
   branches/samba/upstream/source/include/trans2.h
   branches/samba/upstream/source/include/util_getent.h
   branches/samba/upstream/source/include/util_tdb.h
   branches/samba/upstream/source/include/version.h
   branches/samba/upstream/source/include/vfs.h
   branches/samba/upstream/source/include/vfs_macros.h
   branches/samba/upstream/source/include/xfile.h
   branches/samba/upstream/source/iniparser/AUTHORS
   branches/samba/upstream/source/iniparser/Makefile
   branches/samba/upstream/source/iniparser/html/doxygen.css
   branches/samba/upstream/source/iniparser/html/globals_func.html
   branches/samba/upstream/source/iniparser/html/index.html
   branches/samba/upstream/source/iniparser/html/iniparser_8h.html
   branches/samba/upstream/source/iniparser/html/iniparser_8main.html
   branches/samba/upstream/source/iniparser/src/dictionary.c
   branches/samba/upstream/source/iniparser/src/dictionary.h
   branches/samba/upstream/source/iniparser/src/iniparser.c
   branches/samba/upstream/source/iniparser/src/iniparser.h
   branches/samba/upstream/source/iniparser/src/strlib.c
   branches/samba/upstream/source/iniparser/src/strlib.h
   branches/samba/upstream/source/intl/lang_tdb.c
   branches/samba/upstream/source/intl/linux-msg.sed
   branches/samba/upstream/source/lib/access.c
   branches/samba/upstream/source/lib/account_pol.c
   branches/samba/upstream/source/lib/adt_tree.c
   branches/samba/upstream/source/lib/afs.c
   branches/samba/upstream/source/lib/afs_settoken.c
   branches/samba/upstream/source/lib/arc4.c
   branches/samba/upstream/source/lib/audit.c
   branches/samba/upstream/source/lib/bitmap.c
   branches/samba/upstream/source/lib/charcnv.c
   branches/samba/upstream/source/lib/clobber.c
   branches/samba/upstream/source/lib/data_blob.c
   branches/samba/upstream/source/lib/debug.c
   branches/samba/upstream/source/lib/display_sec.c
   branches/samba/upstream/source/lib/dmallocmsg.c
   branches/samba/upstream/source/lib/dprintf.c
   branches/samba/upstream/source/lib/dummyroot.c
   branches/samba/upstream/source/lib/dummysmbd.c
   branches/samba/upstream/source/lib/events.c
   branches/samba/upstream/source/lib/fault.c
   branches/samba/upstream/source/lib/fsusage.c
   branches/samba/upstream/source/lib/gencache.c
   branches/samba/upstream/source/lib/genrand.c
   branches/samba/upstream/source/lib/hmacmd5.c
   branches/samba/upstream/source/lib/iconv.c
   branches/samba/upstream/source/lib/interface.c
   branches/samba/upstream/source/lib/interfaces.c
   branches/samba/upstream/source/lib/ldap_debug_handler.c
   branches/samba/upstream/source/lib/ldap_escape.c
   branches/samba/upstream/source/lib/md4.c
   branches/samba/upstream/source/lib/messages.c
   branches/samba/upstream/source/lib/module.c
   branches/samba/upstream/source/lib/ms_fnmatch.c
   branches/samba/upstream/source/lib/pam_errors.c
   branches/samba/upstream/source/lib/pidfile.c
   branches/samba/upstream/source/lib/popt_common.c
   branches/samba/upstream/source/lib/privileges.c
   branches/samba/upstream/source/lib/readline.c
   branches/samba/upstream/source/lib/replace/Makefile.in
   branches/samba/upstream/source/lib/replace/README
   branches/samba/upstream/source/lib/replace/config.guess
   branches/samba/upstream/source/lib/replace/config.sub
   branches/samba/upstream/source/lib/replace/configure.ac
   branches/samba/upstream/source/lib/replace/dlfcn.c
   branches/samba/upstream/source/lib/replace/dlfcn.m4
   branches/samba/upstream/source/lib/replace/getpass.c
   branches/samba/upstream/source/lib/replace/getpass.m4
   branches/samba/upstream/source/lib/replace/libreplace.m4
   branches/samba/upstream/source/lib/replace/libreplace_cc.m4
   branches/samba/upstream/source/lib/replace/libreplace_macros.m4
   branches/samba/upstream/source/lib/replace/repdir_getdents.c
   branches/samba/upstream/source/lib/replace/repdir_getdirentries.c
   branches/samba/upstream/source/lib/replace/replace.c
   branches/samba/upstream/source/lib/replace/replace.h
   branches/samba/upstream/source/lib/replace/samba.m4
   branches/samba/upstream/source/lib/replace/snprintf.c
   branches/samba/upstream/source/lib/replace/strptime.c
   branches/samba/upstream/source/lib/replace/system/aio.h
   branches/samba/upstream/source/lib/replace/system/capability.h
   branches/samba/upstream/source/lib/replace/system/config.m4
   branches/samba/upstream/source/lib/replace/system/dir.h
   branches/samba/upstream/source/lib/replace/system/filesys.h
   branches/samba/upstream/source/lib/replace/system/glob.h
   branches/samba/upstream/source/lib/replace/system/iconv.h
   branches/samba/upstream/source/lib/replace/system/kerberos.h
   branches/samba/upstream/source/lib/replace/system/locale.h
   branches/samba/upstream/source/lib/replace/system/network.h
   branches/samba/upstream/source/lib/replace/system/passwd.h
   branches/samba/upstream/source/lib/replace/system/readline.h
   branches/samba/upstream/source/lib/replace/system/select.h
   branches/samba/upstream/source/lib/replace/system/shmem.h
   branches/samba/upstream/source/lib/replace/system/syslog.h
   branches/samba/upstream/source/lib/replace/system/terminal.h
   branches/samba/upstream/source/lib/replace/system/time.h
   branches/samba/upstream/source/lib/replace/system/wait.h
   branches/samba/upstream/source/lib/replace/test/os2_delete.c
   branches/samba/upstream/source/lib/replace/test/testsuite.c
   branches/samba/upstream/source/lib/replace/win32.m4
   branches/samba/upstream/source/lib/secace.c
   branches/samba/upstream/source/lib/secacl.c
   branches/samba/upstream/source/lib/secdesc.c
   branches/samba/upstream/source/lib/select.c
   branches/samba/upstream/source/lib/sendfile.c
   branches/samba/upstream/source/lib/server_mutex.c
   branches/samba/upstream/source/lib/sharesec.c
   branches/samba/upstream/source/lib/signal.c
   branches/samba/upstream/source/lib/smbldap.c
   branches/samba/upstream/source/lib/smbldap_util.c
   branches/samba/upstream/source/lib/smbrun.c
   branches/samba/upstream/source/lib/sock_exec.c
   branches/samba/upstream/source/lib/socket_wrapper/socket_wrapper.c
   branches/samba/upstream/source/lib/substitute.c
   branches/samba/upstream/source/lib/sysacls.c
   branches/samba/upstream/source/lib/sysquotas.c
   branches/samba/upstream/source/lib/sysquotas_4A.c
   branches/samba/upstream/source/lib/sysquotas_linux.c
   branches/samba/upstream/source/lib/sysquotas_xfs.c
   branches/samba/upstream/source/lib/system.c
   branches/samba/upstream/source/lib/system_smbd.c
   branches/samba/upstream/source/lib/talloc/Makefile.in
   branches/samba/upstream/source/lib/talloc/config.guess
   branches/samba/upstream/source/lib/talloc/config.mk
   branches/samba/upstream/source/lib/talloc/config.sub
   branches/samba/upstream/source/lib/talloc/configure.ac
   branches/samba/upstream/source/lib/talloc/libtalloc.m4
   branches/samba/upstream/source/lib/talloc/talloc.3.xml
   branches/samba/upstream/source/lib/talloc/talloc.c
   branches/samba/upstream/source/lib/talloc/talloc.h
   branches/samba/upstream/source/lib/talloc/talloc.pc.in
   branches/samba/upstream/source/lib/talloc/talloc_guide.txt
   branches/samba/upstream/source/lib/talloc/testsuite.c
   branches/samba/upstream/source/lib/tallocmsg.c
   branches/samba/upstream/source/lib/time.c
   branches/samba/upstream/source/lib/ufc.c
   branches/samba/upstream/source/lib/username.c
   branches/samba/upstream/source/lib/util.c
   branches/samba/upstream/source/lib/util_file.c
   branches/samba/upstream/source/lib/util_nscd.c
   branches/samba/upstream/source/lib/util_pw.c
   branches/samba/upstream/source/lib/util_seaccess.c
   branches/samba/upstream/source/lib/util_sec.c
   branches/samba/upstream/source/lib/util_sid.c
   branches/samba/upstream/source/lib/util_sock.c
   branches/samba/upstream/source/lib/util_str.c
   branches/samba/upstream/source/lib/util_tdb.c
   branches/samba/upstream/source/lib/util_unistr.c
   branches/samba/upstream/source/lib/util_uuid.c
   branches/samba/upstream/source/lib/version.c
   branches/samba/upstream/source/lib/wins_srv.c
   branches/samba/upstream/source/lib/xfile.c
   branches/samba/upstream/source/libaddns/addns.h
   branches/samba/upstream/source/libaddns/dns.h
   branches/samba/upstream/source/libaddns/dnserr.h
   branches/samba/upstream/source/libaddns/dnsgss.c
   branches/samba/upstream/source/libaddns/dnsmarshall.c
   branches/samba/upstream/source/libaddns/dnsrecord.c
   branches/samba/upstream/source/libaddns/dnssock.c
   branches/samba/upstream/source/libaddns/dnsutils.c
   branches/samba/upstream/source/libads/ads_status.c
   branches/samba/upstream/source/libads/ads_struct.c
   branches/samba/upstream/source/libads/ads_utils.c
   branches/samba/upstream/source/libads/authdata.c
   branches/samba/upstream/source/libads/cldap.c
   branches/samba/upstream/source/libads/disp_sec.c
   branches/samba/upstream/source/libads/dns.c
   branches/samba/upstream/source/libads/kerberos.c
   branches/samba/upstream/source/libads/kerberos_keytab.c
   branches/samba/upstream/source/libads/kerberos_verify.c
   branches/samba/upstream/source/libads/krb5_errs.c
   branches/samba/upstream/source/libads/krb5_setpw.c
   branches/samba/upstream/source/libads/ldap.c
   branches/samba/upstream/source/libads/ldap_printer.c
   branches/samba/upstream/source/libads/ldap_schema.c
   branches/samba/upstream/source/libads/ldap_user.c
   branches/samba/upstream/source/libads/ldap_utils.c
   branches/samba/upstream/source/libads/sasl.c
   branches/samba/upstream/source/libads/util.c
   branches/samba/upstream/source/libgpo/gpo_fetch.c
   branches/samba/upstream/source/libgpo/gpo_filesync.c
   branches/samba/upstream/source/libgpo/gpo_ldap.c
   branches/samba/upstream/source/libgpo/gpo_util.c
   branches/samba/upstream/source/librpc/gen_ndr/cli_wkssvc.c
   branches/samba/upstream/source/librpc/gen_ndr/cli_wkssvc.h
   branches/samba/upstream/source/librpc/gen_ndr/ndr_notify.c
   branches/samba/upstream/source/librpc/gen_ndr/ndr_notify.h
   branches/samba/upstream/source/librpc/gen_ndr/ndr_srvsvc.h
   branches/samba/upstream/source/librpc/gen_ndr/ndr_wkssvc.c
   branches/samba/upstream/source/librpc/gen_ndr/ndr_wkssvc.h
   branches/samba/upstream/source/librpc/gen_ndr/notify.h
   branches/samba/upstream/source/librpc/gen_ndr/security.h
   branches/samba/upstream/source/librpc/gen_ndr/srv_wkssvc.c
   branches/samba/upstream/source/librpc/gen_ndr/srv_wkssvc.h
   branches/samba/upstream/source/librpc/gen_ndr/srvsvc.h
   branches/samba/upstream/source/librpc/gen_ndr/svcctl.h
   branches/samba/upstream/source/librpc/gen_ndr/wkssvc.h
   branches/samba/upstream/source/librpc/ndr/libndr.h
   branches/samba/upstream/source/librpc/ndr/ndr.c
   branches/samba/upstream/source/librpc/ndr/ndr_basic.c
   branches/samba/upstream/source/librpc/ndr/ndr_misc.c
   branches/samba/upstream/source/librpc/ndr/ndr_sec.h
   branches/samba/upstream/source/librpc/ndr/ndr_sec_helper.c
   branches/samba/upstream/source/librpc/ndr/ndr_string.c
   branches/samba/upstream/source/librpc/ndr/sid.c
   branches/samba/upstream/source/libsmb/asn1.c
   branches/samba/upstream/source/libsmb/cliconnect.c
   branches/samba/upstream/source/libsmb/clidfs.c
   branches/samba/upstream/source/libsmb/clidgram.c
   branches/samba/upstream/source/libsmb/clientgen.c
   branches/samba/upstream/source/libsmb/clierror.c
   branches/samba/upstream/source/libsmb/clifile.c
   branches/samba/upstream/source/libsmb/clifsinfo.c
   branches/samba/upstream/source/libsmb/clikrb5.c
   branches/samba/upstream/source/libsmb/clilist.c
   branches/samba/upstream/source/libsmb/climessage.c
   branches/samba/upstream/source/libsmb/clioplock.c
   branches/samba/upstream/source/libsmb/cliprint.c
   branches/samba/upstream/source/libsmb/cliquota.c
   branches/samba/upstream/source/libsmb/clirap.c
   branches/samba/upstream/source/libsmb/clirap2.c
   branches/samba/upstream/source/libsmb/clireadwrite.c
   branches/samba/upstream/source/libsmb/clisecdesc.c
   branches/samba/upstream/source/libsmb/clispnego.c
   branches/samba/upstream/source/libsmb/clistr.c
   branches/samba/upstream/source/libsmb/clitrans.c
   branches/samba/upstream/source/libsmb/conncache.c
   branches/samba/upstream/source/libsmb/credentials.c
   branches/samba/upstream/source/libsmb/dcerpc_err.c
   branches/samba/upstream/source/libsmb/doserr.c
   branches/samba/upstream/source/libsmb/errormap.c
   branches/samba/upstream/source/libsmb/libsmb_cache.c
   branches/samba/upstream/source/libsmb/libsmb_compat.c
   branches/samba/upstream/source/libsmb/namecache.c
   branches/samba/upstream/source/libsmb/namequery.c
   branches/samba/upstream/source/libsmb/namequery_dc.c
   branches/samba/upstream/source/libsmb/nmblib.c
   branches/samba/upstream/source/libsmb/nterr.c
   branches/samba/upstream/source/libsmb/ntlm_check.c
   branches/samba/upstream/source/libsmb/ntlmssp.c
   branches/samba/upstream/source/libsmb/ntlmssp_parse.c
   branches/samba/upstream/source/libsmb/ntlmssp_sign.c
   branches/samba/upstream/source/libsmb/passchange.c
   branches/samba/upstream/source/libsmb/pwd_cache.c
   branches/samba/upstream/source/libsmb/samlogon_cache.c
   branches/samba/upstream/source/libsmb/smb_share_modes.c
   branches/samba/upstream/source/libsmb/smb_signing.c
   branches/samba/upstream/source/libsmb/smbdes.c
   branches/samba/upstream/source/libsmb/smbencrypt.c
   branches/samba/upstream/source/libsmb/smberr.c
   branches/samba/upstream/source/libsmb/spnego.c
   branches/samba/upstream/source/libsmb/trustdom_cache.c
   branches/samba/upstream/source/libsmb/trusts_util.c
   branches/samba/upstream/source/libsmb/unexpected.c
   branches/samba/upstream/source/locking/brlock.c
   branches/samba/upstream/source/locking/locking.c
   branches/samba/upstream/source/locking/posix.c
   branches/samba/upstream/source/modules/CP437.c
   branches/samba/upstream/source/modules/CP850.c
   branches/samba/upstream/source/modules/charset_macosxfs.c
   branches/samba/upstream/source/modules/developer.c
   branches/samba/upstream/source/modules/getdate.c
   branches/samba/upstream/source/modules/getdate.h
   branches/samba/upstream/source/modules/getdate.y
   branches/samba/upstream/source/modules/gpfs.c
   branches/samba/upstream/source/modules/nfs4_acls.c
   branches/samba/upstream/source/modules/nfs4_acls.h
   branches/samba/upstream/source/modules/vfs_afsacl.c
   branches/samba/upstream/source/modules/vfs_aixacl.c
   branches/samba/upstream/source/modules/vfs_aixacl2.c
   branches/samba/upstream/source/modules/vfs_aixacl_util.c
   branches/samba/upstream/source/modules/vfs_audit.c
   branches/samba/upstream/source/modules/vfs_cacheprime.c
   branches/samba/upstream/source/modules/vfs_cap.c
   branches/samba/upstream/source/modules/vfs_catia.c
   branches/samba/upstream/source/modules/vfs_commit.c
   branches/samba/upstream/source/modules/vfs_default.c
   branches/samba/upstream/source/modules/vfs_default_quota.c
   branches/samba/upstream/source/modules/vfs_expand_msdfs.c
   branches/samba/upstream/source/modules/vfs_extd_audit.c
   branches/samba/upstream/source/modules/vfs_fake_perms.c
   branches/samba/upstream/source/modules/vfs_full_audit.c
   branches/samba/upstream/source/modules/vfs_gpfs.c
   branches/samba/upstream/source/modules/vfs_hpuxacl.c
   branches/samba/upstream/source/modules/vfs_irixacl.c
   branches/samba/upstream/source/modules/vfs_netatalk.c
   branches/samba/upstream/source/modules/vfs_notify_fam.c
   branches/samba/upstream/source/modules/vfs_posixacl.c
   branches/samba/upstream/source/modules/vfs_prealloc.c
   branches/samba/upstream/source/modules/vfs_readahead.c
   branches/samba/upstream/source/modules/vfs_readonly.c
   branches/samba/upstream/source/modules/vfs_recycle.c
   branches/samba/upstream/source/modules/vfs_shadow_copy.c
   branches/samba/upstream/source/modules/vfs_solarisacl.c
   branches/samba/upstream/source/modules/vfs_tru64acl.c
   branches/samba/upstream/source/modules/weird.c
   branches/samba/upstream/source/nmbd/asyncdns.c
   branches/samba/upstream/source/nmbd/nmbd.c
   branches/samba/upstream/source/nmbd/nmbd_become_dmb.c
   branches/samba/upstream/source/nmbd/nmbd_become_lmb.c
   branches/samba/upstream/source/nmbd/nmbd_browserdb.c
   branches/samba/upstream/source/nmbd/nmbd_browsesync.c
   branches/samba/upstream/source/nmbd/nmbd_elections.c
   branches/samba/upstream/source/nmbd/nmbd_incomingdgrams.c
   branches/samba/upstream/source/nmbd/nmbd_incomingrequests.c
   branches/samba/upstream/source/nmbd/nmbd_lmhosts.c
   branches/samba/upstream/source/nmbd/nmbd_logonnames.c
   branches/samba/upstream/source/nmbd/nmbd_mynames.c
   branches/samba/upstream/source/nmbd/nmbd_namelistdb.c
   branches/samba/upstream/source/nmbd/nmbd_namequery.c
   branches/samba/upstream/source/nmbd/nmbd_nameregister.c
   branches/samba/upstream/source/nmbd/nmbd_namerelease.c
   branches/samba/upstream/source/nmbd/nmbd_nodestatus.c
   branches/samba/upstream/source/nmbd/nmbd_packets.c
   branches/samba/upstream/source/nmbd/nmbd_processlogon.c
   branches/samba/upstream/source/nmbd/nmbd_responserecordsdb.c
   branches/samba/upstream/source/nmbd/nmbd_sendannounce.c
   branches/samba/upstream/source/nmbd/nmbd_serverlistdb.c
   branches/samba/upstream/source/nmbd/nmbd_subnetdb.c
   branches/samba/upstream/source/nmbd/nmbd_synclists.c
   branches/samba/upstream/source/nmbd/nmbd_winsproxy.c
   branches/samba/upstream/source/nmbd/nmbd_winsserver.c
   branches/samba/upstream/source/nmbd/nmbd_workgroupdb.c
   branches/samba/upstream/source/nsswitch/pam_winbind.c
   branches/samba/upstream/source/nsswitch/pam_winbind.h
   branches/samba/upstream/source/nsswitch/wb_common.c
   branches/samba/upstream/source/nsswitch/wbinfo.c
   branches/samba/upstream/source/nsswitch/winbind_client.h
   branches/samba/upstream/source/nsswitch/winbind_nss.h
   branches/samba/upstream/source/nsswitch/winbind_nss_aix.c
   branches/samba/upstream/source/nsswitch/winbind_nss_config.h
   branches/samba/upstream/source/nsswitch/winbind_nss_freebsd.c
   branches/samba/upstream/source/nsswitch/winbind_nss_hpux.h
   branches/samba/upstream/source/nsswitch/winbind_nss_irix.c
   branches/samba/upstream/source/nsswitch/winbind_nss_irix.h
   branches/samba/upstream/source/nsswitch/winbind_nss_linux.c
   branches/samba/upstream/source/nsswitch/winbind_nss_linux.h
   branches/samba/upstream/source/nsswitch/winbind_nss_netbsd.c
   branches/samba/upstream/source/nsswitch/winbind_nss_netbsd.h
   branches/samba/upstream/source/nsswitch/winbind_nss_solaris.c
   branches/samba/upstream/source/nsswitch/winbind_nss_solaris.h
   branches/samba/upstream/source/nsswitch/wins.c
   branches/samba/upstream/source/pam_smbpass/general.h
   branches/samba/upstream/source/pam_smbpass/pam_smb_acct.c
   branches/samba/upstream/source/pam_smbpass/pam_smb_auth.c
   branches/samba/upstream/source/pam_smbpass/pam_smb_passwd.c
   branches/samba/upstream/source/pam_smbpass/support.c
   branches/samba/upstream/source/pam_smbpass/support.h
   branches/samba/upstream/source/param/loadparm.c
   branches/samba/upstream/source/param/params.c
   branches/samba/upstream/source/passdb/login_cache.c
   branches/samba/upstream/source/passdb/lookup_sid.c
   branches/samba/upstream/source/passdb/machine_sid.c
   branches/samba/upstream/source/passdb/passdb.c
   branches/samba/upstream/source/passdb/pdb_compat.c
   branches/samba/upstream/source/passdb/pdb_get_set.c
   branches/samba/upstream/source/passdb/pdb_interface.c
   branches/samba/upstream/source/passdb/pdb_ldap.c
   branches/samba/upstream/source/passdb/pdb_nds.c
   branches/samba/upstream/source/passdb/pdb_smbpasswd.c
   branches/samba/upstream/source/passdb/pdb_tdb.c
   branches/samba/upstream/source/passdb/secrets.c
   branches/samba/upstream/source/passdb/util_builtin.c
   branches/samba/upstream/source/passdb/util_unixsids.c
   branches/samba/upstream/source/passdb/util_wellknown.c
   branches/samba/upstream/source/po/de.msg
   branches/samba/upstream/source/po/en.msg
   branches/samba/upstream/source/po/fi.msg
   branches/samba/upstream/source/po/fr.msg
   branches/samba/upstream/source/po/genmsg
   branches/samba/upstream/source/po/it.msg
   branches/samba/upstream/source/po/ja.msg
   branches/samba/upstream/source/po/nl.msg
   branches/samba/upstream/source/po/pl.msg
   branches/samba/upstream/source/po/tr.msg
   branches/samba/upstream/source/popt/poptconfig.c
   branches/samba/upstream/source/popt/popthelp.c
   branches/samba/upstream/source/popt/poptparse.c
   branches/samba/upstream/source/printing/load.c
   branches/samba/upstream/source/printing/lpq_parse.c
   branches/samba/upstream/source/printing/notify.c
   branches/samba/upstream/source/printing/nt_printing.c
   branches/samba/upstream/source/printing/pcap.c
   branches/samba/upstream/source/printing/print_aix.c
   branches/samba/upstream/source/printing/print_cups.c
   branches/samba/upstream/source/printing/print_generic.c
   branches/samba/upstream/source/printing/print_iprint.c
   branches/samba/upstream/source/printing/print_svid.c
   branches/samba/upstream/source/printing/printfsp.c
   branches/samba/upstream/source/printing/printing.c
   branches/samba/upstream/source/printing/printing_db.c
   branches/samba/upstream/source/profile/profile.c
   branches/samba/upstream/source/registry/reg_cachehook.c
   branches/samba/upstream/source/registry/reg_eventlog.c
   branches/samba/upstream/source/registry/reg_objects.c
   branches/samba/upstream/source/registry/reg_perfcount.c
   branches/samba/upstream/source/registry/reg_util.c
   branches/samba/upstream/source/registry/regfio.c
   branches/samba/upstream/source/rpc_client/cli_lsarpc.c
   branches/samba/upstream/source/rpc_client/cli_netlogon.c
   branches/samba/upstream/source/rpc_client/cli_pipe.c
   branches/samba/upstream/source/rpc_client/cli_reg.c
   branches/samba/upstream/source/rpc_client/cli_samr.c
   branches/samba/upstream/source/rpc_client/cli_spoolss.c
   branches/samba/upstream/source/rpc_client/cli_spoolss_notify.c
   branches/samba/upstream/source/rpc_client/cli_svcctl.c
   branches/samba/upstream/source/rpc_client/ndr.c
   branches/samba/upstream/source/rpc_parse/parse_buffer.c
   branches/samba/upstream/source/rpc_parse/parse_eventlog.c
   branches/samba/upstream/source/rpc_parse/parse_misc.c
   branches/samba/upstream/source/rpc_parse/parse_ntsvcs.c
   branches/samba/upstream/source/rpc_parse/parse_prs.c
   branches/samba/upstream/source/rpc_parse/parse_rpc.c
   branches/samba/upstream/source/rpc_parse/parse_sec.c
   branches/samba/upstream/source/rpc_parse/parse_spoolss.c
   branches/samba/upstream/source/rpc_parse/parse_svcctl.c
   branches/samba/upstream/source/rpc_server/srv_dfs_nt.c
   branches/samba/upstream/source/rpc_server/srv_echo_nt.c
   branches/samba/upstream/source/rpc_server/srv_eventlog.c
   branches/samba/upstream/source/rpc_server/srv_eventlog_lib.c
   branches/samba/upstream/source/rpc_server/srv_eventlog_nt.c
   branches/samba/upstream/source/rpc_server/srv_lsa_hnd.c
   branches/samba/upstream/source/rpc_server/srv_lsa_nt.c
   branches/samba/upstream/source/rpc_server/srv_netlog_nt.c
   branches/samba/upstream/source/rpc_server/srv_ntsvcs.c
   branches/samba/upstream/source/rpc_server/srv_ntsvcs_nt.c
   branches/samba/upstream/source/rpc_server/srv_pipe.c
   branches/samba/upstream/source/rpc_server/srv_pipe_hnd.c
   branches/samba/upstream/source/rpc_server/srv_samr_nt.c
   branches/samba/upstream/source/rpc_server/srv_samr_util.c
   branches/samba/upstream/source/rpc_server/srv_spoolss.c
   branches/samba/upstream/source/rpc_server/srv_spoolss_nt.c
   branches/samba/upstream/source/rpc_server/srv_srvsvc_nt.c
   branches/samba/upstream/source/rpc_server/srv_svcctl.c
   branches/samba/upstream/source/rpc_server/srv_svcctl_nt.c
   branches/samba/upstream/source/rpc_server/srv_util.c
   branches/samba/upstream/source/rpc_server/srv_wkssvc_nt.c
   branches/samba/upstream/source/rpcclient/cmd_dfs.c
   branches/samba/upstream/source/rpcclient/cmd_echo.c
   branches/samba/upstream/source/rpcclient/cmd_lsarpc.c
   branches/samba/upstream/source/rpcclient/cmd_netlogon.c
   branches/samba/upstream/source/rpcclient/cmd_samr.c
   branches/samba/upstream/source/rpcclient/cmd_shutdown.c
   branches/samba/upstream/source/rpcclient/cmd_spoolss.c
   branches/samba/upstream/source/rpcclient/cmd_srvsvc.c
   branches/samba/upstream/source/rpcclient/cmd_test.c
   branches/samba/upstream/source/rpcclient/cmd_wkssvc.c
   branches/samba/upstream/source/rpcclient/rpcclient.c
   branches/samba/upstream/source/rpcclient/rpcclient.h
   branches/samba/upstream/source/script/gen-8bit-gap.sh.in
   branches/samba/upstream/source/script/installbin.sh.in
   branches/samba/upstream/source/script/installman.sh
   branches/samba/upstream/source/script/installmodules.sh
   branches/samba/upstream/source/script/installswat.sh
   branches/samba/upstream/source/script/mkbuildoptions.awk
   branches/samba/upstream/source/script/mkproto.awk
   branches/samba/upstream/source/script/mkproto.sh
   branches/samba/upstream/source/script/mkversion.sh
   branches/samba/upstream/source/script/tests/dlopen.sh
   branches/samba/upstream/source/script/tests/gdb_backtrace
   branches/samba/upstream/source/script/tests/selftest.sh
   branches/samba/upstream/source/script/tests/test_functions.sh
   branches/samba/upstream/source/script/tests/test_local_s3.sh
   branches/samba/upstream/source/script/tests/test_posix_s3.sh
   branches/samba/upstream/source/script/tests/test_smbclient_s3.sh
   branches/samba/upstream/source/script/tests/test_smbtorture_s3.sh
   branches/samba/upstream/source/script/tests/tests_all.sh
   branches/samba/upstream/source/script/tests/timelimit.c
   branches/samba/upstream/source/script/uninstallbin.sh.in
   branches/samba/upstream/source/services/services_db.c
   branches/samba/upstream/source/services/svc_netlogon.c
   branches/samba/upstream/source/services/svc_rcinit.c
   branches/samba/upstream/source/services/svc_spoolss.c
   branches/samba/upstream/source/services/svc_winreg.c
   branches/samba/upstream/source/services/svc_wins.c
   branches/samba/upstream/source/smbd/aio.c
   branches/samba/upstream/source/smbd/blocking.c
   branches/samba/upstream/source/smbd/change_trust_pw.c
   branches/samba/upstream/source/smbd/chgpasswd.c
   branches/samba/upstream/source/smbd/close.c
   branches/samba/upstream/source/smbd/conn.c
   branches/samba/upstream/source/smbd/connection.c
   branches/samba/upstream/source/smbd/dfree.c
   branches/samba/upstream/source/smbd/dir.c
   branches/samba/upstream/source/smbd/dmapi.c
   branches/samba/upstream/source/smbd/dosmode.c
   branches/samba/upstream/source/smbd/error.c
   branches/samba/upstream/source/smbd/fake_file.c
   branches/samba/upstream/source/smbd/fileio.c
   branches/samba/upstream/source/smbd/filename.c
   branches/samba/upstream/source/smbd/files.c
   branches/samba/upstream/source/smbd/ipc.c
   branches/samba/upstream/source/smbd/lanman.c
   branches/samba/upstream/source/smbd/mangle.c
   branches/samba/upstream/source/smbd/mangle_hash.c
   branches/samba/upstream/source/smbd/mangle_hash2.c
   branches/samba/upstream/source/smbd/map_username.c
   branches/samba/upstream/source/smbd/message.c
   branches/samba/upstream/source/smbd/msdfs.c
   branches/samba/upstream/source/smbd/negprot.c
   branches/samba/upstream/source/smbd/noquotas.c
   branches/samba/upstream/source/smbd/notify.c
   branches/samba/upstream/source/smbd/notify_inotify.c
   branches/samba/upstream/source/smbd/notify_internal.c
   branches/samba/upstream/source/smbd/ntquotas.c
   branches/samba/upstream/source/smbd/nttrans.c
   branches/samba/upstream/source/smbd/open.c
   branches/samba/upstream/source/smbd/oplock.c
   branches/samba/upstream/source/smbd/oplock_irix.c
   branches/samba/upstream/source/smbd/oplock_linux.c
   branches/samba/upstream/source/smbd/password.c
   branches/samba/upstream/source/smbd/pipes.c
   branches/samba/upstream/source/smbd/posix_acls.c
   branches/samba/upstream/source/smbd/process.c
   branches/samba/upstream/source/smbd/quotas.c
   branches/samba/upstream/source/smbd/reply.c
   branches/samba/upstream/source/smbd/sec_ctx.c
   branches/samba/upstream/source/smbd/server.c
   branches/samba/upstream/source/smbd/service.c
   branches/samba/upstream/source/smbd/session.c
   branches/samba/upstream/source/smbd/sesssetup.c
   branches/samba/upstream/source/smbd/share_access.c
   branches/samba/upstream/source/smbd/srvstr.c
   branches/samba/upstream/source/smbd/statcache.c
   branches/samba/upstream/source/smbd/statvfs.c
   branches/samba/upstream/source/smbd/trans2.c
   branches/samba/upstream/source/smbd/uid.c
   branches/samba/upstream/source/smbd/utmp.c
   branches/samba/upstream/source/smbd/vfs.c
   branches/samba/upstream/source/stf/comfychair.py
   branches/samba/upstream/source/stf/example.py
   branches/samba/upstream/source/stf/pythoncheck.py
   branches/samba/upstream/source/stf/sambalib.py
   branches/samba/upstream/source/stf/standardcheck.py
   branches/samba/upstream/source/stf/strings.py
   branches/samba/upstream/source/stf/unicodenames.py
   branches/samba/upstream/source/tests/crypttest.c
   branches/samba/upstream/source/tests/summary.c
   branches/samba/upstream/source/torture/cmd_vfs.c
   branches/samba/upstream/source/torture/denytest.c
   branches/samba/upstream/source/torture/locktest.c
   branches/samba/upstream/source/torture/locktest2.c
   branches/samba/upstream/source/torture/mangle_test.c
   branches/samba/upstream/source/torture/masktest.c
   branches/samba/upstream/source/torture/msgtest.c
   branches/samba/upstream/source/torture/nbio.c
   branches/samba/upstream/source/torture/nsstest.c
   branches/samba/upstream/source/torture/pdbtest.c
   branches/samba/upstream/source/torture/scanner.c
   branches/samba/upstream/source/torture/smbiconv.c
   branches/samba/upstream/source/torture/t_asn1.c
   branches/samba/upstream/source/torture/torture.c
   branches/samba/upstream/source/torture/utable.c
   branches/samba/upstream/source/torture/vfstest.c
   branches/samba/upstream/source/torture/vfstest.h
   branches/samba/upstream/source/utils/debug2html.c
   branches/samba/upstream/source/utils/debugparse.c
   branches/samba/upstream/source/utils/eventlogadm.c
   branches/samba/upstream/source/utils/log2pcaphex.c
   branches/samba/upstream/source/utils/net.c
   branches/samba/upstream/source/utils/net.h
   branches/samba/upstream/source/utils/net_ads.c
   branches/samba/upstream/source/utils/net_ads_gpo.c
   branches/samba/upstream/source/utils/net_cache.c
   branches/samba/upstream/source/utils/net_dns.c
   branches/samba/upstream/source/utils/net_groupmap.c
   branches/samba/upstream/source/utils/net_help.c
   branches/samba/upstream/source/utils/net_idmap.c
   branches/samba/upstream/source/utils/net_lookup.c
   branches/samba/upstream/source/utils/net_rap.c
   branches/samba/upstream/source/utils/net_rpc.c
   branches/samba/upstream/source/utils/net_rpc_audit.c
   branches/samba/upstream/source/utils/net_rpc_join.c
   branches/samba/upstream/source/utils/net_rpc_printer.c
   branches/samba/upstream/source/utils/net_rpc_registry.c
   branches/samba/upstream/source/utils/net_rpc_rights.c
   branches/samba/upstream/source/utils/net_rpc_samsync.c
   branches/samba/upstream/source/utils/net_rpc_service.c
   branches/samba/upstream/source/utils/net_rpc_sh_acct.c
   branches/samba/upstream/source/utils/net_rpc_shell.c
   branches/samba/upstream/source/utils/net_sam.c
   branches/samba/upstream/source/utils/net_status.c
   branches/samba/upstream/source/utils/net_time.c
   branches/samba/upstream/source/utils/net_usershare.c
   branches/samba/upstream/source/utils/net_util.c
   branches/samba/upstream/source/utils/netlookup.c
   branches/samba/upstream/source/utils/nmblookup.c
   branches/samba/upstream/source/utils/ntlm_auth.c
   branches/samba/upstream/source/utils/ntlm_auth.h
   branches/samba/upstream/source/utils/ntlm_auth_diagnostics.c
   branches/samba/upstream/source/utils/passwd_util.c
   branches/samba/upstream/source/utils/pdbedit.c
   branches/samba/upstream/source/utils/profiles.c
   branches/samba/upstream/source/utils/rpccheck.c
   branches/samba/upstream/source/utils/sharesec.c
   branches/samba/upstream/source/utils/smbcacls.c
   branches/samba/upstream/source/utils/smbcontrol.c
   branches/samba/upstream/source/utils/smbcquotas.c
   branches/samba/upstream/source/utils/smbfilter.c
   branches/samba/upstream/source/utils/smbget.c
   branches/samba/upstream/source/utils/smbpasswd.c
   branches/samba/upstream/source/utils/smbtree.c
   branches/samba/upstream/source/utils/smbw_sample.c
   branches/samba/upstream/source/utils/status.c
   branches/samba/upstream/source/utils/status_profile.c
   branches/samba/upstream/source/utils/testparm.c
   branches/samba/upstream/source/web/cgi.c
   branches/samba/upstream/source/web/diagnose.c
   branches/samba/upstream/source/web/neg_lang.c
   branches/samba/upstream/source/web/startstop.c
   branches/samba/upstream/source/web/statuspage.c
   branches/samba/upstream/source/web/swat.c
   branches/samba/upstream/testsuite/config/unix.exp
   branches/samba/upstream/testsuite/lib/compile.exp
   branches/samba/upstream/testsuite/nsswitch/getent.c
   branches/samba/upstream/testsuite/nsswitch/getent_grent.c
   branches/samba/upstream/testsuite/nsswitch/getent_pwent.c
   branches/samba/upstream/testsuite/nsswitch/longarg_getgrnam.c
   branches/samba/upstream/testsuite/nsswitch/longarg_getpwnam.c
   branches/samba/upstream/testsuite/nsswitch/longarg_utils.h
   branches/samba/upstream/testsuite/printing/psec.c
   branches/samba/upstream/testsuite/printing/vlp.c
   branches/samba/upstream/testsuite/smbd/se_access_check.exp
   branches/samba/upstream/testsuite/smbd/se_access_check_allowall.c
   branches/samba/upstream/testsuite/smbd/se_access_check_allowsome.c
   branches/samba/upstream/testsuite/smbd/se_access_check_denyall.c
   branches/samba/upstream/testsuite/smbd/se_access_check_denysome.c
   branches/samba/upstream/testsuite/smbd/se_access_check_empty.c
   branches/samba/upstream/testsuite/smbd/se_access_check_nullsd.c
   branches/samba/upstream/testsuite/smbd/se_access_check_printer.c
   branches/samba/upstream/testsuite/smbd/se_access_check_utils.c
   branches/samba/upstream/testsuite/smbd/se_access_check_utils.h
   branches/samba/upstream/testsuite/smbd/sec_ctx.exp
   branches/samba/upstream/testsuite/smbd/sec_ctx1.c
   branches/samba/upstream/testsuite/smbd/sec_ctx_current_user.c
   branches/samba/upstream/testsuite/smbd/sec_ctx_flow.c
   branches/samba/upstream/testsuite/smbd/sec_ctx_groups.c
   branches/samba/upstream/testsuite/smbd/sec_ctx_nonroot.c
   branches/samba/upstream/testsuite/smbd/sec_ctx_root.c
   branches/samba/upstream/testsuite/smbd/sec_ctx_stack.c
   branches/samba/upstream/testsuite/smbd/sec_ctx_torture.c
   branches/samba/upstream/testsuite/smbd/sec_ctx_utils.c
   branches/samba/upstream/testsuite/smbd/sec_ctx_utils.h
Log:
take 3.2.0rc2 back off of the upstream branch; everything should now be in order

Modified: branches/samba/upstream/COPYING
===================================================================
--- branches/samba/upstream/COPYING	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/COPYING	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,642 +1,301 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
 
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                          675 Mass Ave, Cambridge, MA 02139, USA
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
 
-                            Preamble
+			    Preamble
 
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
 your programs, too.
 
   When we speak of free software, we are referring to freedom, not
 price.  Our General Public Licenses are designed to make sure that you
 have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
 
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
 
   For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
 
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
 
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
 
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
 
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
   The precise terms and conditions for copying, distribution and
 modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
-                       TERMS AND CONDITIONS
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
 
-  0. Definitions.
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
 
-  "This License" refers to version 3 of the GNU General Public License.
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
 
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
 
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
 
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
 
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
 
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
 
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
 
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
 
-  1. Source Code.
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
 
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
 
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
 
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
 
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
 
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
 
-  The Corresponding Source for a work in source code form is that
-same work.
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
 
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
 this License.
 
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
 otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
 
-  13. Use with the GNU Affero General Public License.
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
 
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
 
-  14. Revised Versions of this License.
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
 
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
 be similar in spirit to the present version, but may differ in detail to
 address new problems or concerns.
 
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
 
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
 
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
+			    NO WARRANTY
 
-  15. Disclaimer of Warranty.
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
 
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
 
-  16. Limitation of Liability.
+		     END OF TERMS AND CONDITIONS
+
+	Appendix: How to Apply These Terms to Your New Programs
 
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
   If you develop a new program, and you want it to be of the greatest
 possible use to the public, the best way to achieve this is to make it
 free software which everyone can redistribute and change under these terms.
 
   To do so, attach the following notices to the program.  It is safest
 to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
+convey the exclusion of warranty; and each file should have at least
 the "copyright" line and a pointer to where the full notice is found.
 
     <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
+    Copyright (C) 19yy  <name of author>
 
-    This program is free software: you can redistribute it and/or modify
+    This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
+    the Free Software Foundation; either version 2 of the License, or
     (at your option) any later version.
 
     This program is distributed in the hope that it will be useful,
@@ -645,30 +304,36 @@
     GNU General Public License for more details.
 
     You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
 Also add information on how to contact you by electronic and paper mail.
 
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
 
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
     This is free software, and you are welcome to redistribute it
     under certain conditions; type `show c' for details.
 
 The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
 
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
 
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.

Deleted: branches/samba/upstream/PFIF.txt
===================================================================
--- branches/samba/upstream/PFIF.txt	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/PFIF.txt	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,7 +0,0 @@
-This code was developed in participation with the Protocol Freedom
-Information Foundation.
-
-Please see 
-  http://protocolfreedom.org/ and
-  http://samba.org/samba/PFIF/ 
-for more details.

Modified: branches/samba/upstream/README
===================================================================
--- branches/samba/upstream/README	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/README	2008-06-15 01:55:18 UTC (rev 1953)
@@ -102,16 +102,16 @@
 suggestions to the address samba at lists.samba.org.  More information
 on the various Samba mailing lists can be found at http://lists.samba.org/.
 
-You can also get the Samba sourcecode straight from the git repository - see
-http://wiki.samba.org/index.php/Using_Git_for_Samba_Development.
+You can also get the Samba sourcecode straight from the Subversion tree - see
+http://samba.org/samba/subversion.html.
 
 You could also send hardware/software/money/jewelry or pre-paid pizza
 vouchers directly to Andrew. The pizza vouchers would be especially
 welcome, in fact there is a special field in the survey for people who
 have paid up their pizza :-)
 
-If you like a particular feature then look through the git change-log
-(on the web at http://gitweb.samba.org/?p=samba.git;a=summary) and see
+If you like a particular feature then look through the Subversion change-log
+(on the web at http://websvn.samba.org/cgi-bin/viewcvs.cgi) and see
 who added it, then send them an email.
 
 Remember that free software of this kind lives or dies by the response

Modified: branches/samba/upstream/README.Coding
===================================================================
--- branches/samba/upstream/README.Coding	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/README.Coding	2008-06-15 01:55:18 UTC (rev 1953)
@@ -76,14 +76,8 @@
 	endf
 	autocmd BufNewFile,BufRead * call ActivateInvisibleCharIndicator()
   endif
-  " Show tabs, trailing whitespace, and continued lines visually
-  set list listchars=tab:»·,trail:·,extends:…
 
-  " highlight overly long lines same as TODOs.
-  set textwidth=80
-  autocmd BufNewFile,BufRead *.c,*.h exec 'match Todo /\%>' . &textwidth . 'v.\+/'
 
-
 =========================
 FAQ & Statement Reference
 =========================
@@ -219,18 +213,3 @@
 	if (!x) {
 		fprintf(stderr, "Unable to alloc memory!\n");
 	}
-
-
-Primitive Data Types
---------------------
-
-Samba has large amounts of historical code which makes use of data types 
-commonly supported by the C99 standard. However, at the time such types 
-as boolean and exact width integers did not exist and Samba developers 
-were forced to provide their own.  Now that these types are guaranteed to 
-be available either as part of the compiler C99 support or from lib/replace/, 
-new code should adhere to the following conventions:
-
-  * Booleans are of type "bool" (not BOOL)
-  * Boolean values are "true" and "false" (not True or False)
-  * Exact width integers are of type [u]int[8|16|32|64]_t

Modified: branches/samba/upstream/WHATSNEW.txt
===================================================================
--- branches/samba/upstream/WHATSNEW.txt	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/WHATSNEW.txt	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,180 +1,182 @@
-                   =================================
-                   Release Notes for Samba 3.2.0rc2
-                             June 10, 2008
-                   =================================
+                   ===============================
+                   Release Notes for Samba 3.0.30
+                            May 28, 2008
+                   ===============================
 
-This is the second release candidate of Samba 3.2.0.  This is *not*
-intended for production environments and is designed for testing
-purposes only.  Please report any defects via the Samba bug reporting
-system at https://bugzilla.samba.org/.
+This is a security release in order to address CVE-2008-1105 ("Boundary 
+failure when parsing SMB responses can result in a buffer overrun").
 
-Please be aware that Samba is now distributed under the version 3
-of the new GNU General Public License.  You may refer to the COPYING
-file that accompanies these release notes for further licensing details.
+  o CVE-2008-1105
+    Specifically crafted SMB responses can result in a heap overflow 
+    in the Samba client code.  Because the server process, smbd, can 
+    itself act as a client during operations such as printer notification
+    and domain authentication,  this issue affects both Samba client 
+    and server installations.
+    
+The original security announcement for this and past advisories can 
+be found http://www.samba.org/samba/security/
 
-Major enhancements in Samba 3.2.0 include:
 
-  File Serving:
-  o Use of IDL generated parsing layer for several DCE/RPC
-    interfaces.
-  o Removal of the 1024 byte limit on pathnames and 256 byte limit on
-    filename components to honor the MAX_PATH setting from the host OS.
-  o Introduction of a registry based configuration system.
-  o Improved CIFS Unix Extensions support.
-  o Experimental support for file serving clusters.
-  o Support for IPv6 in the server, and client tools and libraries.
-  o Support for storing alternate data streams in xattrs.
-  o Encrypted SMB transport in client tools and libraries, and server.
-  o Support for Vista clients authenticating via Kerberos.
+######################################################################
+Changes
+#######
 
-  Winbind and Active Directory Integration:
-  o Full support for Windows 2003 cross-forest, transitive trusts
-    and one-way domain trusts.
-  o Support for userPrincipalName logons via pam_winbind and NSS
-    lookups.
-  o Expansion of nested domain groups via NSS calls.
-  o Support for Active Directory LDAP Signing policy.
-  o New LGPL Winbind client library (libwbclient.so).
-  o Support for establishing interdomain trust relationships with
-    Windows 2008.
+Changes since 3.0.29
+--------------------
 
-  Joining:
-  o New NetApi library for domain join related queries (libnetapi.so)
-    and example GTK+ Domain join gui.
-  o New client and server support for remotely joining and unjoining
-    Domains.
-  o Support for joining into Windows 2008 domains.
+o   Jeremy Allison <jra at samba.org>
+    * Fix for CVE-2008-1105.
 
-  Users & Groups:
-  o New ldb backend for local group mapping tables
-  o Raised level of security defaults for authentication operations.
-  o New NetApi library for user account related queries.
 
+o   Karolin Seeger <kseeger at samba.org>
+    * Remove man pages for ldb tools not included in Samba 3.0.
 
-  Documentation:
-  o Inclusion of an HTML version of the 3rd edition of "Using Samba"
-    from O'Reilly Publishing.
 
+Release notes for older releases follow:
 
-Now Licensed under the GNU GPLv3
-================================
+      --------------------------------------------------
 
-The Samba Team has adopted the Version 3 of the GNU General Public
-License for the 3.2 and later releases.   The GPLv3 is the updated
-version of the GPLv2 license under which Samba is currently
-distributed. It has been updated to improve compatibility with other
-licenses and to make it easier to adopt internationally, and is an
-improved version of the license to better suit the needs of Free
-Software in the 21st Century.
+                   ===============================
+                   Release Notes for Samba 3.0.29
+                            May 20, 2008
+                   ===============================
 
-The original announcement is available on-line at
+Major bug fixes included in Samba 3.0.29 are:
 
-    http://news.samba.org/announcements/samba_gplv3/
+  o Problems following domain trusts on a Samba DC.
+  o SMB Signing errors.
+  o Interoperability issues with Windows 2008 domains.
 
 
-New Security Defaults for Authentication
-========================================
+######################################################################
+Changes
+#######
 
-Support for LanMan passwords is now disabled in both client and server
-applications.  Additionally, clear text authentication requests are
-disabled by default in client utilities such as smbclient and all
-libsmbclient based applications.  This will affect connection both
-to and from hosts running DOS, Windows 9x/ME, and OS/2.  Please refer
-to the "Changes" section for details on the exact parameters that were
-updated.
+Changes since 3.0.28a
+---------------------
 
+o   Michael Adam <obnox at samba.org>
+    * Fix build for pam_smbpass.
+    * Fix a crash in tdb_wrap_log().
 
-Registry Configuration Backend
-==============================
 
-Samba is now able to use a registry based configuration backed to
-supplement smb.conf settings.  This feature may be enabled by setting
-"config backend = registry" in the [global] section of smb.conf for a
-registry only configuration, or by specifying "include = registry" to
-include global options from registry for a mixed setup.
+o   Jeremy Allison <jra at samba.org>
+    * BUG 5267: Fix for nmbd termination problems when no interfaces 
+      found.
+    * BUG 5326: OS/2 servers give strange "high word" replies for 
+      print jobs.
+    * Remove MS-DFS check that required the target host be ourself.
+    * BUG 5372: Fix high CPU usage of cupsd on large print servers
+      by using more efficient CUPS queries in smbd.
+    * Rewrite integer wrap checks to deal with gcc 4.x optimizations.
+    * BUG 5095: Fix the enforcement of the "Manage Documents" access right.
+    * Don't free memory from getpass() in mount.cifs.
+    * BUG 5460: Fix MS-DFS referral problem in server code.
+    * Fix bug in Winbind that caused the parent to ignore dead children.
+    * Fix compile warnings.
 
-The new parameter "registry shares = yes" in the [global] section of
-smb.conf can be used to activate share definitions from registry.
-These shares are loaded on demand by the server. Registry shares are
-automatically activated by the global registry options above.
 
-The configuration stored in registry can be conveniently managed using
-the "net conf" command.
+o   Alexander Bokovoy <ab at samba.org>
+    * Fix build for pam_smbpass.
+    * Document build fixes.
 
-More information may be obtained from the smb.conf(5) and net(8) man
-pages.
 
+o   Kai Blin <kai at samba.org>
+    * BUG 4235: Improve compliance to the Squid helper protocol.
+      Original patch from Pawel Worach <pawel.worach at gmail.com>.
 
-Removed Features
-================
 
-Both the Python bindings and the libmsrpc shared library have been
-removed from the tree due to lack of an official maintainer.
+o   Gerald (Jerry) Carter <jerry at samba.org>
+    * BUG 5107: Fix handling of large DNS replies on AIX and Solaris.
 
-As smbfs is no longer supported in current kernel versions, smbmount has
-been removed in this Samba version. Please use cifs (mount.cifs) instead.
-See examples/scripts/mount/mount.smbfs as an example for a wrapper which
-calls mount.cifs instead of smbmount/mount.smbfs.
 
+o   Glenn Curtis <gcurtis at likewisesoftware.com>
+    * Prevent cycle in Wibind's list of children when reaping dead processes.
 
-Modified API for libsmbclient
-==============================================================================
 
-Maintaining ABI compatibility for libsmbclient has become increasingly
-difficult to accomplish, while also keeping the code organization such that it
-is easily readable.  Towards the goal of maintaining ABI compatibility and
-also keeping the code easy to maintain and enhance, the API has been enhanced.
-In particular, the fields in the SMBCCTX context structure are no longer
-intended to be read/write by the user, and are marked as deprecated.  An
-application that previously accessed the members of the SMBCCTX context
-structure will now encounter warnings if recompiled.  This is intentional, to
-encourage implementation of the small changes required for the new interface.
-The number of changes is expected to be quite small for the vast majority of
-applications, and no changes need be made for many applications.  The changes
-required for KDE (konqueror) to conform to the new interface, for example, are
-only four lines in only one file.
+o   Steven Danneman <steven.danneman at isilon.com>
+    * BUG 5419: Fix memory leak in ads_do_search_all_args() (merge from v3-2).
 
-Instead of the application manually changing or reading values in the context
-structure, there are now setter and getter functions for each configurable
-member in that structure.  Similarly, the smbc_option_get() and
-smbc_option_set() functions are deprecated in favor of the setter/getter
-interface.  The setters and getters are all documented in libsmbclient.h
-under these comment blocks:
 
-  Getters and setters for CONFIGURATION
-  Getters and setters for OPTIONS
-  Getters and setters for FUNCTIONS
-  Callable functions for files
-  Callable functions for directories
-  Callable functions applicable to both files and directories
+o   Guenther Deschner <gd at samba.org>
+    * Fix winbind NETLOGON credential chain on a samba dc for w2k8 trusts.
+    * Fix client connections and negotiation with Windows 2008 DCs
+      in member server code.
+    * Add NT_STATUS_DOWNGRADE_DETECTED error code (merge from v3-2).
+    * BUG 5430: Fix pam_winbind.so on Solaris (requires -lsocket).
+    * Re-add samr getdispinfoindex parsing which got lost in the glue commit.
+    * BUG 5461: Implement a very basic _samr_GetDisplayEnumerationIndex().
+      Corrects interop problem between Citrix PM and a Samba DC.
 
-Example changes that may be required to eliminate "deprecated" warnings:
 
-  /* Set the debug level */
-  context->debug = 99;
-changes to:
-  smbc_setDebug(context, 99);
+o   Bryan Kolodziej <bryan.kolodziej at allenlund.com>
+    * BUG 3840: Fix smbclient connecting to NetApp filers when using
+      whitespace in the user's password.
 
-  /* Specify the authentication callback function */
-  context->callbacks.auth_fn = auth_smbc_get_data;
-changes to:
-  smbc_setFunctionAuthData(context, auth_smbc_get_data);
 
-  /* Specify the new-style authentication callback with context parameter */
-  smbc_option_set("auth_function", auth_smbc_get_data_with_ctx);
-changes to:
-  smbc_setFunctionAuthDataWithContext(context, auth_smbc_get_data_with_ctx);
+o   Volker Lendecke <vl at samba.org>
+    * BUG 4901: Fix behavior of "ldap passwd sync = only".
+    * BUG 5317: Fix debug output from domain_client_validate().
+    * BUG 5338: Fix format string bug in rpcclient.
+    * Ensure that "wbinfo -a trusted\\user%password" works correctly
+      on a Samba DC with trusts.
+    * BUG 5336: Fix SetUsetrInfo(level 25) to update the pwdLastSet 
+      attribute.
+    * BUG 5350: Fallback to anonymous sessions if not trust password
+      could be obtained on Samba DCs and member servers.
+    * BUG 5366: Fix password chat on Sun OpenSolaris (Nevada).
+    * Fix signing problem in the client with trans requests.
 
-  /* Set kerberos flags */
-  context->flags = (SMB_CTX_FLAG_USE_KERBEROS |
-                    SMB_CTX_FLAG_FALLBACK_AFTER_KERBEROS);
-changes to:
-  smbc_setOptionUseKerberos(context, 1);
-  smbc_setOptionFallbackAfterKerberos(context, 1);
 
+o   Björn Jacke <bj at sernet.de>
+    * Fix alignment bug hitting Solaris with "reset in zero vc" activated.
 
 
+o   Jim McDonough <jmcd at samba.org>
+    * Fix build with glibc 2.8.
+    * Enable winbind child processes to do something with signals, in 
+      particular closing and reopening logs on SIGHUP.
 
+
+o   Karolin Seeger <kseeger at samba.org>
+    * Documentation cleanup after r emerging docs from svn to git and 
+      back-porting from the v3-2 branch.
+
+
+o   Rafal Szczesniak <mimir at samba.org>
+    * Add implementation of machine-authenticated connection to netlogon
+      pipe used when connecting to win2k and newer domain controllers.
+
+
+o   Simo Sorce <idra at samba.org>
+    * Fix trusted users on a DC that uses the old idmap syntax.
+
+
+o   Bo Yang <boyang at novell.com>
+    * Only have Winbind cache domain password policies that were
+      successfully retrieved.
+
+
+o   Martin Zielinski <mz at seh.de>
+    * Fix alignment bug when marshalling printer data replies.
+    * Fix DeleteDriverDriverEx() checks to prevent removing in use files.
+
+
+
+      --------------------------------------------------
+
+                   ===============================
+                   Release Notes for Samba 3.0.28a
+                            Mar 8, 2008
+                   ===============================
+
+Major bug fixes included in Samba 3.0.28a are:
+
+  o Failure to join Windows 2008 domains
+  o Windows Vista (including SP1 RC) interop issues
+
+
+
 ######################################################################
 Changes
 #######
@@ -184,659 +186,8830 @@
 
     Parameter Name                      Description     Default
     --------------                      -----------     -------
-    administrative share		New		No
-    client lanman auth			Changed Default	No
-    client ldap sasl wrapping		New		plain
-    client plaintext auth		Changed Default	No
-    clustering				New		No
-    cluster addresses			New		""
-    config backend			New		file
-    ctdbd socket			New		""
-    debug class				New		No
-    lanman auth				Changed Default	No
-    ldap connection timeout		New		2
-    ldap debug level			New		0
-    ldap debug threshold		New		10
-    mangled map				Removed
-    min receive file size		New             0
-    open files database hashsize	Removed
-    read bmpx				Removed
-    registry shares			New		No
-    smb encrypt				New		Auto
-    winbind expand groups		New		1
-    winbind rpc only			New		No
+    administrative share                New             No
+    ldap debug level                    New             0
+    ldap debug threshold                New             10
 
-    New special meaning of "include = registry".
 
+Changes since 3.0.28
+--------------------
 
-Changes since 3.2.0rc1:
------------------------
+o   Michael Adam <obnox at samba.org>
+    * Fix bug in version string's vendor tag.
+    * Prevent net getdomainsid from crashing when called as non-root.
+    * BUG 4801: Correctly implement LSA lookup levels for LookupNames.
+    * Fixes for internal LookupNames() calls for unqualified users and 
+      groups.
+    * Remove unnecessary functions when managing domain trust 
+      passwords.
+    * Fix winbindd on a Samba DC talking to a trusted domain DC
+      (again).
+    * Consolidate the detection of the machine_account_name when
+      obtaining trust credentials from the local database.
+    * Refactor trust account database routines and session key
+      management.
+    * Fix retrieval of trusted domain password policies when
+      authenticating a user (only when WBFLAG_PAM_GET_PWD is config
+      flags is set).
+    * Refactor Winbind's cm_connect_sam().
+    * Enable building the notify_fam module.
+    * Add "ldap debug level" and "ldap debug threshold" smb.conf options.
 
 
 o   Jeremy Allison <jra at samba.org>
-    * BUG 5504: Fix behaviour of winbindd children receiving a SIGTERM.
-    * BUG 5489: Split the winbindd_passdb backend into a 'builtin' and a 'sam'.
-    * Security fix for CVE-2008-1105.
-    * Fix valgrind bug in debug statement.
-    * Make sure we take account of the large read/write SMB headers as
-      well as the buffer space when allocating cli buffers for large
-      read/write.
-    * Fix tag as a goto target we were not reinitializing the array counts.
+    * Fix cut-n-paste bug when filling in form values for Printer
+      info.
+    * Fix SMB signing bug found by Volker.
+    * Create locking.tdb when running smbstatus before smbd to avoid
+      confusing error messages.
+    * Add a portable version of strlcpy and strlcat.
+    * BUG 4780: Cause user mounts to inherit uid= and gid= from the
+      calling user when called as non-root, except when overridden on
+      the command line.  Original patch by Steve Langasek.
+    * BUG 5802: Recent versions of Linux-PAM support localization of
+      user prompts, so Samba must use the C locale when invoking PAM
+    * Merge Vista principal detection changes by Andreas Schneider
+      from 3.2 branch.
+    * BUG 5121: Fix problems running unix passwd sync on streams based 
+      systems.
+    * BUG 4612: Fix smbd crash when connecting from an OS/2 client.
+    * Back port Volker's ACL fixes on newly create files form 3.2.
+    * Ensure that send_getdc_request() matches the 3.2 code base.
+    * BUG 3617: Fix crash in nmbd caused by referencing freed memory.
+    * Fixes for issues reported by IBM checker.
+    * Fixes for issues reported by Coverity.
+    * Back port Volker's fix for nlink count.
+    * Back port SAMR flag fixes from Matt Geddes
+      <musicalcarrion at gmail.com>.
+    * BUG 4929: Cope with protected ACL set correctly (based on work
+      from Jim McDonough).
+    * Fix ACL set bug when group being set is the primary group.
+    * Ensure NDR wire-reads of string types are always null
+      terminated.
+    * BUG 5247: Fix mget wildcard expansion in smbclient.
+    * Fix bug in SPNEGO negotiation.
+    * BUG 3617: Fix "Invalid read of size 4" errors.
+    * BUG 5267: Prevent nmbd from shutting down when no network
+      interfaces can be located.
 
 
-o   Steven Danneman <sdanneman at isilon.com>
-    * BUG 5451: Fix for using the correct machine domain when looking up trust
-      credentials in our tdb.
-    * Fix spnego SPN when contacting trusted domains.
+o   Kai Blin <kai at samba.org>
+    * libsmb: Do not upper-case target name on NTLMv2 hash generation.
+    * Fix an incompatible pointer type warning.
 
 
-o   Günther Deschner <gd at samba.org>
-    * BUG 5285: Fix libcap header mismatch.
-    * Fix pam_sm_chauthtok for storing modified cached creds.
-    * Fix joining issue in setups with "config backend = registry".
+o   Gerald Carter <jerry at samba.org>
+    * Restrict the enctypes in the generated krb5.conf files to
+      Win2003 types.
 
 
-o   Björn Jacke <bj at sernet.de>
-    * BUG 4544: Add new parameter 'ldap connection timeout' to prevent
-      waiting for TCP connection timeouts if no LDAP server is available.
+o   Steven Danneman <steven.danneman at isilon.com>
+    * Error path memory leak fixes.
 
 
+o   Guenther Deschner <gd at samba.org>
+    * Fix PAC decoding from Vista SP1 client.
+    * Fix get_trust_creds() to return always an upper-cased krb5
+      principal.
+    * Back port additional fixes necessary for support Windows 2008
+      domain joins from the 3.2 branch.
+
+
+o   Mathias Gug <mathiaz at ubuntu.com>
+    * BUG 5802: Recent versions of Linux-PAM support localization of
+      user prompts, so Samba must use the C locale when invoking PAM
+
+
+o   Steve Langasek <vorlon at debian.org>
+    * BUG 3727: Fix smbpasswd abort when called by non-root user.
+    * BUG 4784: Prevent umount.cifs from allowing all users to unmount shares.
+    * BUG 5802: Recent versions of Linux-PAM support localization of
+      user prompts, so Samba must use the C locale when invoking PAM
+
+
 o   Volker Lendecke <vl at samba.org>
-    * BUG 5502: Fix security=server.
-    * Fix coverity IDs 552, 553, 570, 571, 572.
-    * Fix the compile on NetBSD.
-    * Shrink ldbtools.
+    * When allocating a new vuid, also avoid partial ones.  Also
+      fully invalidate intermediate ones.
+    * Fix error path exit in create_local_nt_token() to correctly roll 
+      back security contexts.
+    * Fix valgrind warnings in nmbd.
+    * Pointer initialization fixes in notify_marshall_changes().
+    * BUG 5208: Fix uninitialized variables in vfs_hpuxacl.c (reported 
+      by David Leonard <David.Leonard at quest.com>).
+    * Copy the 3.2 version of string_replace to 3.0.
+    * Port SMB_FS_OBJECTID_INFORMATION from 3.2 (Patch by Corinna
+      Vinschen).
+    * Memory leak fixes.
+    * Fix error code propagation from cli_session_setup_kerberos().
+    * BUG 5217: Fix inotify detection.
+    * BUG 5279: Correctly check return of rename().
+    * BUG 5252: Fix confusing error messages in mount.cifs.
+    * BUG 5307: Respect FAMChanged (Thanks to Ricardo Santos).
+    * Work around a handle leak in XP 64 bit.
 
 
-o   Jim McDonough <jmcd at samba.org>
-    * Fix reset of password last set time just because the expired flag
-      is set to 0.
+o   Guenter Kukkukk <linux at kukkukk.com>
+    * OS/2 returns eclass == ERRDOS && ecode == ERRnofiles for a zero 
+      entry directory listing.
 
 
+o   Tom Maher <tmaher at watson.org>
+    * BUG 5175: Support krb5 auth in smbcacls.
+
+
+o   Hans Mayer <hans.mayer at ages.at>
+    * BUG 5141: Solaris 9 compile fix.
+
+
 o   Stefan Metzmacher <metze at samba.org>
-    * Remove support for symbol versioning in shared libraries.
-      For more information, please have a look at the disussion on
-      samba-technical starting with
-      http://lists.samba.org/archive/samba-technical/2008-June/059511.html.
-    * Fix autogen for autoconf 2.62.
+    * Fix default printing system detection in libreplace. 
 
 
-o   Marc VanHeyningen <marc.vanheyningen at isilon.com>
-    * Fix memory leak.
+o   Laurent Pinchart <pinchart at skynet.be>
+    * BUG 5163: Return better error codes when a password cannot be
+      set in and LDAP directory.
 
 
+o   Jiri Sasek <Jiri.Sasek at Sun.COM>
+    * BUG 4866: Correct password routine detection on Solaris.
+
+
 o   Andreas Schneider <anschneider at suse.de>
-    * BUG 5515: Fix empty input fields in SWAT.
-    * BUG 5516: Fix saving of the config file in SWAT.
+    * Remove trailing slashes on server names when parsing input from
+      smbclient.
+    * Support Windows 2008 domain joins (variant of Todd Stecher's
+      original patch).
+    * Add "administrative share" service parameter for defining hidden
+      administrative shares that cannot be managed from Windows.
 
 
+o   Karolin Seeger <kseeger at samba.org>
+    * Use the "ldap user suffix" when enumerating a users group
+      memberships.
+
+
+o   Simo Sorce <idra at samba.org>
+    * Don't assume NULL termination when copying the principal name
+      in kerberos_get_default_realm_from_ccache().
+    * Fix winbindd running on a Samba DC (again).
+
+
 o   Bo Yang <boyang at novell.com>
-    * Fix winbindd trusted domain child not keeping primary domain
-      online status up to date.
+    * Fix bad private_data pointer in winbindd_lookupname_async().
 
 
-o   Chere Zhou <chere.zhou at isilon.com>
-    * Fix memory leaks. 
 
+Release notes for older releases follow:
 
-Changes since 3.2.0pre3:
------------------------
+      --------------------------------------------------
 
+                   ==============================
+                   Release Notes for Samba 3.0.28
+                            Dec 10, 2007
+                   ==============================
 
+Samba 3.0.28 is a security release in order to address the following
+defect:
+
+  o CVE-2007-6015
+    Boundary failure in GETDC mailslot processing can result in 
+    a buffer overrun
+
+The original security announcement for this and past advisories can 
+be found http://www.samba.org/samba/security/
+
+######################################################################
+Changes
+#######
+
+Changes since 3.0.27a
+---------------------
+
+o   Jeremy Allison <jra at samba.org>
+    * Fix for CVE-2007-6015.
+
+o   Volker Lendecke <vl at samba.org>
+    * Fix for CVE-2007-6015.
+    * Add missing unbecome_root() calls in error path processing
+      when failing to add local groups in create_local_nt_token().
+
+
+      --------------------------------------------------
+
+                   ===============================
+                   Release Notes for Samba 3.0.27a
+                             Nov 20, 2007
+                   ===============================
+
+Samba 3.0.27a is a bug fix release and is the current release
+for production servers running the Samba 3.0 series.
+
+Important fixes in 3.0.27a include:
+
+  o A crash bug regression experienced by smbfs clients caused
+    by the fix for CVE-2007-4572.
+
+
+
+######################################################################
+Changes
+#######
+
+Changes since 3.0.27
+--------------------
+
 o   Michael Adam <obnox at samba.org>
-    * Move the posix pending close functionality down into the VFS layer.
-    * Fix activation of registry globals in loadparm.
+    * BUG 4308: Add missing become_root/unbecome_root around calls of 
+      add_aliases.  Add same changes in create_token_from_username()
+      surrounding the call to getsampwsid().
+    * BUG 5083: Make solarisacl_sys_acl_get_fd() return a result when 
+      there is one (thereby fixing a memleak).
+    * BUG 5023: Fix smbd's interaction with NFSv4 ACL compatible VFS 
+      plugins such as GPFS and ZFS.
 
 
 o   Jeremy Allison <jra at samba.org>
-    * BUG 5452: Fix smbclient put.
-    * BUG 5095: Fix Manage Documents privilege.
-    * BUG 5434: Ensure the loaded password doesn't contain the '\n' at the end.
-    * BUG 5456: Fix missing echo if we ^C at the prompt. 
-    * BUG 5460: Fix DFS referrals.
-    * BUG 5464: Fix timeout in winbindd.
-    * Fix returning a directory value for a QPATHINFO on a msdfs link
-      with a non-dfs path.
+    * BUG 4978: Ensure that DOS attributes are copied with folders.
+    * Fix bug where tdb lock call interrupted with an alarm sig would 
+      not terminate and could lead to runaway smbd processes.
+    * Fix smbd crash bug which resulted from a regression in the patch
+      for CVE-2007-4572 patch.
+    * Prevent nmbd from adding non-initialized name to IP address
+      mappings to it's WINS database.
 
 
+o   Dmitry Butskoy <buc at odusz.so-cdu.ru>
+    * Properly catch errors in the query_user() callback to avoid
+      generated struct passwd replies with zero length usernames.
+
+
+o   Gerald (Jerry) Carter <jerry at samba.org>
+    * Prevent segv in winbindd running on a DC using the "idmap
+      backend" syntax.
+
+
+o   Steve Langasek <vorlon at debian.org>
+    * BUG 4781: Allow cleaning of /etc/mtab by canonicalizing mountpoint.
+
+
+o   Volker Lendecke <vl at samba.org>
+    * BUG 4028: Fix message popup sent via "smbclient -M".
+    * BUG 4984: Filename unix_convert() fixes for WinNT 4.0 clients.
+
+
+o   Stefan Metzmacher <metze at samba.org>
+    * Fix crash bug in pidl generated client code caused by
+      [in,out,unique] pointers.
+    * Fix crash bug in the group mapping code.
+
+
+o   Heinrich Mislik <Heinrich.Mislik at univie.ac.at>
+    * Fixes for AIX quota support.
+
+
+o   Tomasz Ostrowski <tometzky at batory.org.pl>
+    * BUG 4393: Prevent smbclient from dropping 0 bytes files from tar 
+      archives.
+
+
+o   Simo Sorce <idra at samba.org>
+    * Fixes for internal idmap domain list when "winbind trusted
+      domains only" is enabled.
+    * Fix 32/64-bit compatibility issues in the winbind request/response
+      structures.
+
+
+o   Martin Zielinski <mz at seh.de>
+    * Error code path fix for get_mydnsdomname().
+
+
+
+      --------------------------------------------------
+
+                   ==============================
+                   Release Notes for Samba 3.0.27
+                            Nov 15, 2007
+                   ==============================
+
+Samba 3.0.27 is a security release in order to address the following
+defects:
+
+  o CVE-2007-4572
+    Stack buffer overflow in nmbd's logon request processing.
+
+  o CVE-2007-5398
+    Remote code execution in Samba's WINS server daemon (nmbd) 
+    when processing name registration followed name query requests.
+
+The original security announcement for this and past advisories can 
+be found http://www.samba.org/samba/security/
+
+######################################################################
+Changes
+#######
+
+Changes since 3.0.26a
+---------------------
+
+o   Jeremy Allison <jra at samba.org>
+    * Fix for CVE-2007-4572.
+    * Fix for CVE-2007-5398.
+
+
+o   Simo Sorce <idra at samba.org>
+    * Additional fixes for CVE-2007-4572.
+
+
+      --------------------------------------------------
+                   ===============================
+                   Release Notes for Samba 3.0.26a
+                             Sep 11, 2007
+                   ===============================
+
+Major bug fixes included in Samba 3.0.26a are:
+
+  o Memory leaks in Winbind's IDMap manager.
+
+
+######################################################################
+Changes
+#######
+
+Changes since 3.0.26
+--------------------
+
+o   Michael Adam <obnox at samba.org>
+    * Fix read_sock() semantics in wb_common.c to address "invalid
+      request size" errors in winbindd logs.
+    * Fix use of pwrite() in tdb IO code paths.
+
+     
+o   Jeremy Allison <jra at samba.org>
+    * Fix logic error in timeout of blocking lock processing.
+
+
+o   Guenther Deschner <gd at samba.org>
+    * Fix error code in the msrpc EnumerateDomainGroups() Winbind
+      method when a memory allocation fails.
+    * Fix Winbind initialization storms when contacting an older Samba DC.
+
+    
+o   Volker Lendecke <vl at samba.org>
+    * Fix compile failure in NFSv4 VFS module.
+    * Fix compile failures on True64.
+    * Fix compile failure in unmaintained python bindings.
+    * BUG 4917: Fix memory leaks in Winbind's idmap_ldap and
+      idmap_cache backends.
+    * Coverity fixes in the group mapping code.
+
+
+o   Derrell Lipman <derrell at samba.org>
+    * Remove NetBIOS keepalives from libsmbclient and consolidate on
+      the use of getpeername() when checking connection health.
+    * Use formal syntax for invoking function pointers in
+      libsmbclient.
+
+
+o   Lars Mueller <lars at samba.org>
+    * Fixes for Winbind's AD site support when the host is not
+      configured in any site or nor DC's are present within the host's
+      configured site.
+
+
+o   Simo Sorce <idra at samba.org>
+    * Debian packaging updates for 3.0.25c.
+    * Add sanity checks for "smb ports" values.
+    * Fix compile issues related to the VFS "open" method and newer
+      glibc implementations.
+    * Fix a segv in smbldap_set_creds() when using an anonymous
+      connection.
+    * BUG 4772: Fix us of ldap_base_dn for the idmap_ldap plugin.
+
+
+Release notes for older releases follow:
+
+      --------------------------------------------------
+                   ==============================
+                   Release Notes for Samba 3.0.26
+                             Sep 11, 2007
+                   ==============================
+
+This is a security release of Samba 3.0 to address
+
+  o CVE-2007-4138
+	Versions: All Samba 3.0.25 releases
+	Incorrect primary group assignment for
+	domain users using the rfc2307 or sfu
+	winbind nss info plugin.
+
+The original security announcement for this and past advisories
+can be found http://www.samba.org/samba/security/
+
+######################################################################
+Changes
+#######
+
+Changes since 3.0.25c
+---------------------
+
+o   Gerald (Jerry) Carter <jerry at samba.org>
+    * Fix CVE-2007-4138 in the "winbind nss info = {sfu | rfc2307}"
+      plugin (idmap_ad.c)
+
+
+      --------------------------------------------------
+                   ===============================
+                   Release Notes for Samba 3.0.25c
+                             Aug 20, 2007
+                   ===============================
+
+Major bug fixes included in Samba 3.0.25c are:
+
+  o File sharing with Widows 9x clients.
+  o Winbind running out of file descriptors due to stalled 
+    child processes.
+  o MS-DFS inter-operability issues.
+
+
+######################################################################
+Changes
+#######
+
+Changes since 3.0.25b
+---------------------
+
+o   Michael Adam <obnox at samba.org>
+    * Fix incorrect log messages in tdbbackup.
+    * Fix a bug in pwrite error detection in tdb_expand_file().
+
+
+o   Jeremy Allison <jra at samba.org>
+    * BUG 4711: Make cli_connect() return NT_STATUS codes.
+    * Ensure we obey Unicode consortium restrictions.  Based on 
+      patch from MORIYAMA Masayuki.
+    * BUG 3204: Cope with stalled winbindd child processes and 
+      prevent the parent winbindd process from running out of file  
+      descriptors.
+    * Fix realloc leak on failure case from Jim Meyering.
+    * BUG 4759: Fix crash in ber_printf() caused invalid tag.
+    * BUG 4763: Limit notify responses to client max buf size.      
+    * BUG 4777: Doing a DFS traverse through a deep link could fail
+      (not using explorer).
+    * BUG 4779: Setting the allocation size updates the modified 
+      time as a write does.
+    * BUG 4308: Fix interaction with MS Excel and POSIX ACLs.
+    * Fix POSIX unlink bug found by the Linux CIFS fs client.
+    * Stop counting locks if we get a POSIX lock request.
+    * Fix interaction between Linux CIFS fs client and Windows
+      clients when the former tries to remove a file opened by the 
+      latter.
+    * Fix incorrect mapping of invalid resume names in FindNext 
+      commands.
+    * Cope with dead entries in the locking database tied to 
+      non-existent processes (merge from 3.2-ctdb).
+    * Fix MS-DFS related renaming bug in smbclient.
+    * Fix for write cache corruption bug.
+    * Fix invalid vuid from being returned by a failed call to
+      cli_session_setup_spnego.().
+    * Fixes for error mappings from NT_STATUS to the appropriate DOS
+      error codes in reply_opeNXXX() calls.
+
+
+o   Ofir Azoulay <Ofir.Azoulay at expand.com>
+    * Only look at errno set by SMB_VFS_CLOSE() if the call actually 
+      failed.
+
+
 o   Alexander Bokovoy <ab at samba.org>
-    * Use more error-prone form of testing dm_destroy_session() return code.
+    * Fix vfs_readahead: transparent modules should always pass 
+      through.
 
 
-o   Günther Deschner <gd at samba.org>
-    * BUG 5453: Fix winbindd and smbd crash when dsgetdcname is used.
-    * BUG 5465: Fix joining with createcomputer=ou1/ou2/ou3.
-    * BUG 5461: Fix issue with Citrix on Samba DCs with more than 900 groups.
-    * Fix wins null pointer crash in nss_wins module.
-    * Fix lm session key length in _netr_LogonSamLogon.
-    * Add -f switch for DsGetDCName() example and be more verbose on output.
+o   David S. Collier-Brown <davecb at spamcop.net>
+    * BUG 4897: Fix Solaris xattr misdeclarations.
 
 
+o   Guenther Deschner <gd at samba.org>
+    * Remove redundant pointer checks when freeing memory in winbindd.
+    * BUG 4408: Remove last traces of Heimdal KCM support.
+    * Fix bug in user Krb5 ticket refresh feature in winbindd.
+    * Fix Heimdal path in the krb5 renew routine.
+    * Unused code cleanup in winbindd.
+
+
+o   SATOH Fumiyasu <fumiyas at osstech.co.jp>
+    * BUG 4750: smbc_telldir_ctx() was not returning a value useful 
+      to smbc_lseekdir_ctx().
+
+
+o   Bjoern Jacke <bj at sernet.de>
+    * Add support for Extended Attributes on Solaris.
+
+
+o   Matthijs Kooijman <matthijs at stdin.nl>
+    * BUG 4836: Fix incorrect log message in the nss_info 
+      plugin init call.
+    * BUG 4849: Fix "net ads dns register" usage text.
+
+
+o   Volker Lendecke <vl at samba.org>
+    * Port cli_connect() NT_STATUS fixes to smbmount.
+    * Add notes about smbfs/cifs to usage() in smb[u]mount.
+    * BUG 4792: Fix pidfile name bug.
+    * Fix missing END_PROFILE() call in the SMBunlink reply.
+    * Coverity fixes.
+    * Correct logic error in change notify code that would result in 
+      an endless loop.
+    * Fix uninitialized reads in the spoolss GetPrinterData() replies.
+    * Fix file overwrites from Windows 9x clients.
+
+
+o   Herb Lewis <herb at samba.org>
+    * Unused code cleanup.
+    * Avoid a crash in "net rpc info" when no username has 
+      been specified.
+    * Remove biconv detection on *BSD.
+
+
+o   Derrell Lipman <derrell at samba.org>
+    * Get/Set ACL fixes in libsmbclient.
+
+
+o   Jan Martin <Jan.Martin at rwedea.com>
+    * BUG 4860: Patches for fixing MS-DFS links with trailing 
+      back slashes.
+
+
+o   Jim McDonough <jmcd at us.ibm.com>
+    * BUG 4719: "Must change password" is not set from usrmgr.exe.
+
+
+o   Atsushi Nakabayashi <nakabayashi at miraclelinux.com>
+    * Ensure proper exit when nmbd is unable to reopen the wins.tdb.
+    * Fix error path memleaks in the messaging subsystem.
+
+      --------------------------------------------------
+                   ===============================
+                   Release Notes for Samba 3.0.25b
+                             June 26, 2007
+                   ===============================
+
+Major bug fixes included in Samba 3.0.25b are:
+
+  o Offline caching of files with Windows XP/Vista clients.
+  o Improper cleanup of expired or invalid byte range locks 
+    on files.
+  o Crashes is idmap_ldap and idmap_rid.
+
+
+Changes to 'net idmap dump'
+===========================
+
+A change in command line syntax and behavior was introduced in the
+3.0.25 release series where the command 
+
+  $ net idmap dump /.../path/to/idmap.tdb
+
+would overwrite the tdb instead of dumping its contents to standard 
+output as was the case in releases prior to Samba 3.0.25.  The 
+changed has been reverted in 3.0.25b and the semantics from 3.0.24
+and earlier releases have been restored.  
+
+
+######################################################################
+Changes
+#######
+
+Changes since 3.0.25a
+---------------------
+
+o   Jeremy Allison <jra at samba.org>
+    * BUG 4655: Fix client parsing bug in spoolss EnumPrinterDataEx().
+    * Ensure that proper oplock break requests occur during file open
+      and performing internal checks for compatible open modes.
+    * Fix offline file caching with Windows XP/Vista clients.
+    * Coverity fixes.
+    * Ensure that winbindd reports the correct client connection
+      details in response to a SIGUSR2.
+    * Fix timespec_current() to return the correct nano-second time.
+    * Fix lock logic inconsistencies in tdb_traverse().
+    * Remove restriction on string length for rpcclient commands.
+    * BUG 4683: Fix LSA crash bug.
+    * BUG 3204: Fix file descriptor leak in the parent winbindd when
+      child processes hang.
+    * Avoid calling rename_open_files() when the old and new names 
+      are identical.
+    * BUG 4689: Fix bug in new change notify code caused by not
+      ignoring the max_params_return value and as a resulting
+      returning truncated names.
+    * Fix sync_file() to return NTSTATUS and return this on failure in
+      the write reply path.
+    * BUG 4678,4697: Fix token creation for clear text logins.  
+    * BUG 4725: Don't crash when no eventlog names are defined in
+      smb.conf.
+    * Ensure we will always release any timeout handler on fsp close 
+      or removal of oplock.
+
+
+o   Jacob Berkman <jberkman at novell.com>
+    * BUG 4566: Pass password data to krb5_prompter.
+
+
 o   Gerald (Jerry) Carter <jerry at samba.org>
-    * Prevent Winbind cycle in children list when reaping dead child processes.
-    * BUG 5107: Fix handling of large DNS replies on AIX and Solaris.
-    * BUG 5429: Clarify log msgs re: failure to create
-      BUILTIN\{Administrators,Users}
-    * Fix the DNS Update option of "net ads join".
+    * BUG 4579: Fix "wbinfo -t" when running winbindd on a Samba DC.
 
 
-o   Eric Cronin <ecronin at gizmolabs.org>
-    * BUG 5184: Add Missing HAVE_UPDWTMPX check before using updwtmpx().
+o   Guenther Deschner <gd at samba.org>
+    * BUG 4657: Fix compilation and linking of pam_smbpass.so.
+    * Add more netlogon GetDcName() client calls.
+    * Fix event based krb5 ticket refreshing in winbindd.
 
+o   SATOH Fumiyasu <fumiyas at osstech.co.jp>
+    * BUG 4720: Fix smbclient connections to share names containing 
+      multibyte characters.
 
-o   Steven Danneman <sdanneman at sd-ubuntu.(none)>
-    * Bug 5419: Fix memory leak in ads_do_search_all_args() when enumerating 
-      1000s of entries 
 
+o   Steve Langasek <vorlon at debian.org>
+    * Allow SIGTERM to cause nmbd to exit on awaiting an interface 
+      to come up.
 
-o   Holger Hetterich <hhetter at novell.com>
-    * Recognize and allow longer UA keys in winbindd_cache.
 
+o   Volker Lendecke <vl at samba.org>
+    * Fix record state check error when reviewing entries in nmbd's
+      WINS database.
+    * Revert 'net idmap dump' behavior to 3.0.24 behavior to fix change 
+      in command line syntax that would overwrite winbindd_idmap.tdb.
+      
 
-o   Björn Jacke <bj at sernet.de>
-    * Fix compile warnings.
-    * Increase log level for failed setsockopt call.
+o   Justin Maggard <jmaggard at infrant.com>
+    * Don't expire a password if it's explicitly set as ACB_PWNOTREQ.
 
 
+o   <mnix at wanm.com.au>
+    * Fix old old bug in cli_smbwrite() (not incrementing data 
+      being sent).
+
+
+o   Jens Nissen <jens.nissen at gmx.net>
+    * BUG 4537: Fix smbtorture deny test2.
+
+
+o   James Peach <jpeach at apple.com>
+    * Fix structure types in the vfs_catia NT_ACL operations.
+
+
+o   Doug Rudoff <doug_rudoff at isilon.com>
+    * Ensure that the the lck struct for invalid locks are correctly
+      saved and therefore cleaned up.
+
+
+o   Simo Sorce <idra at samba.org>
+    * Updates for the packaging/Debian directory.
+    * Add missing 'c' character to the list of shell safe characters.
+    * BUG 4667 (partial): Fix crash bug in idmap_ldap.c.
+    * Fix inconsistencies between creating machine and user accounts.
+    * Fix bug deleting LDAP user accounts that used the account 
+      objectclass as its structural basis.
+    * BUG 2319: Ensure that smbspool correctly decodes %-encoded
+      characters.
+    * BUG 4624: Fix crashes in idmap_rid.
+
+
+Release notes for older releases follow:
+
+      --------------------------------------------------
+                   ===============================
+                   Release Notes for Samba 3.0.25a
+                             May 25, 2007
+                   ===============================
+
+Major bug fixes included in Samba 3.0.25a are:
+
+  o Missing supplementary Unix group membership when using "force 
+    group".
+  o Premature expiration of domain user passwords when using a 
+    Samba domain controller.
+  o Failure to open the Windows object picker against a server
+    configured to use "security = domain".
+  * Authentication failures when using security = server.
+
+
+Changes to MS-DFS Root Share Behavior
+=====================================
+
+Please be aware that the initial value for the "msdfs root" share 
+parameter was changed in the 3.0.25 release series and that this 
+option is now disabled by default.  Windows clients frequently require 
+a reboot in order to clear any cached information about MS-DFS
+root shares on a server and you may experience failures accessing
+file services on Samba 3.0.25 servers until the client reboot 
+is performed.  Alternately, you may explicitly re-enable the 
+parameter in smb.conf.   Please refer to the smb.conf(5) man page
+for more details.
+
+
+
+######################################################################
+Changes
+#######
+
+Changes since 3.0.25
+--------------------
+
+o   Michael Adam <obnox at samba.org>
+    * Fix logic in detection of the need to replace dlopen, et. al.
+    * Add HP-UX ACL VFS module.
+    * Fix build of Tru64 ACL VFS module.
+
+
+o   Jeremy Allison <jra at samba.org>
+    * BUG 4622: Fix authentication failures in security = server.
+    * Fix pointer marshalling in srvsvc parsing code.
+    * BUG 4630: Fix conversion of 8 byte time_t and NT_TIME values.
+    * Ensure that if we're blocked on a POSIX lock we know nothing
+      about that we retry the lock every 10 seconds instead of waiting
+      for the standard select timeout.
+    * BUG 4637: Fix samlogon reply regression that broke domain logons.
+    * Fix rename on open files and improved delete-on-close semantics.
+    * Fix POSIX setfilepathinfo to use lstat.
+
+
+o   Alexander Bokovoy <ab at samba.org>
+    * Add -pie support to Python's setup.py.
+    * Strip STYPE_TEMPORARY and STYPE_HIDDEN when printing share
+      listing from 'net rap shares".
+    * Fix argument parsing in "net rap server domain".
+   
+
+o   Gerald (Jerry) Carter <jerry at samba.org>
+    * BUG 4616: Don't return a dns or forest name when replying to the
+      DsGetPrimaryRoleInfo() and configured for security = domain.
+    * Trim noise by removing redundant WARNING log message that would 
+      flood at log level 2. 
+    * Fix truncation of supplementary Unix groups when using "force group".
+
+
+o   Guenther Deschner <gd at samba.org>
+    * Always fallback to NTLM authentication in pam_winbind when the 
+      user's account has UF_DONT_REQUIRE_PREAUTH set.
+
+
+o   Steve French <sfrench at us.ibm.com> 
+    * Valgrind fixes in mount.cifs.
+
+
 o   Volker Lendecke <vl at samba.org>
-    * BUG 5420: Fix build on IRIX.
-    * BUG 5398: Fix compiler warning.
-    * BUG 5399: Fix compiler warning.
-    * BUG 5400: Fix compiler warning.
-    * BUG 5436: Fix signing problem in the client with transs requests.
-    * Fix a valgrind bug in the new [ug]id2sid cache.
-    * Fix Coverity IDs 565 and 222.
-    * Fix dfs_Enum: In form_junctions, correctly check for malloc failure.
+    * Fix crash bug in the Solaria ACL VFS module caused by
+      uninitialized variables.
 
 
+o   Herb Lewis <herb at samba.org>
+    * Update connection structure definition for tdbtool display
+      output.
+
+
+o   Derrell Lipman <derrell at samba.org>
+    * BUG 4601: Fix smbc_getxattr() to properly return the required
+      size of the buffer needed to contain the extended attributes.
+    * BUG 4599: Fix failure when setting attributes.
+    * BUG 4634: Type of the size parameter to getpeername in
+      libsmbclient code was wrong.
+    * Fix libsmbclient interaction with links on Vista and properly
+      detect non-NTSTATUS errors.
+    
+
+o   Jim McDonough <jmcd at us.ibm.com>
+    * BUG 4630: Fix special case of unix_to_nt_time() for TIME_T_MAX
+      and the output from http_timestring().
+
+
 o   Stefan Metzmacher <metze at samba.org>
-    * BUG 5443: Fix build on HP-UX.
-    * Add support for symbol versioning in shared libraries (can be
-      disabled with --disable-sysmbol-versioning).
-    * Add new function wbcLibraryDetails() to libwbclient.
+    * Merge gdb_backtrace script changes form SAMBA_4_0.
 
 
-o   Tim Prouty <tim.prouty at isilon.com>
-    * Cleanup size_t return values in convert_string_allocate.
+o   Lars Mueller <lars at samba.org>
+    * Allow idmap_ldap to be built as a shared lib.
 
 
-o   Mike Sweet <msweet at apple.com>
-    * Fix Kerberos support for CUPS 1.3 in smbspool.
+o   James Peach <jpeach at apple.com>
+    * BUG 4426: Move FAM libraries from smbd to vfs_fam_notify.
+    * BUG 2287: Replace unnecessary AC_TRY_RUN with AC_TRY_LINK.
+    * BUG 4589: Fix typo in pdbedit output.
 
 
-o   Martin Zielinski <mz at seh.de>
-    * Fix printing with Vista.
-    * Fix deletion of files when they're in use by other drivers.
+o   Simo Sorce <idra at samba.org>
+    * Short circuit Unix Users and Unix Groups Domain SID checks 
+      in smbd to avoid unnecessary calls to winbindd.
 
+      --------------------------------------------------
+                   ==============================
+                   Release Notes for Samba 3.0.25
+                            May 14, 2007
+                   ==============================
 
-Changes since 3.2.0pre2:
+The 3.0.25 release is an upgrade release over the 3.0.23/3.0.24 
+series which means that a substantial amount of development has 
+occurred and many new features have been added since the last
+Samba production release.  We would like to thank everyone in 
+the Samba community that help to test the preview snapshots and 
+release candidates.  We believe that the this production release 
+is in much better shape due to your help.  
+
+Major features included in the 3.0.25 code base include:
+
+  o Significant improvements in the winbind off-line logon support.
+  o Support for secure DDNS updates as part of the 'net ads join' 
+    process.
+  o Rewritten IdMap interface which allows for TTL based caching and 
+    per domain backends.
+  o New plug-in interface for the "winbind nss info" parameter.
+  o New file change notify subsystem which is able to make use of 
+    inotify on Linux.
+  o Support for passing Windows security descriptors to a VFS 
+    plug-in allowing for multiple Unix ACL implements to running side 
+    by side on the Same server.
+  o Improved compatibility with Windows Vista clients including 
+    improved read performance with Linux servers.
+  o Man pages for IdMap and VFS plug-ins.
+
+Security Fixes included in the Samba 3.0.25 release are:
+
+  o CVE-2007-2444
+	Versions: Samba 3.0.23d - 3.0.25pre2
+	Local SID/Name translation bug can result in
+	user privilege elevation
+
+  o CVE-2007-2446
+	Versions: Samba 3.0.0 - 3.0.24
+	Multiple heap overflows allow remote code execution
+
+  o CVE-2007-2447
+	Versions: Samba 3.0.0 - 3.0.24
+	Unescaped user input parameters are passed as
+	arguments to /bin/sh allowing for remote command
+	execution
+
+
+Off-line Logons and AD Site Support
+===================================
+
+Winbind's capability to support offline logons has been greatly
+improved with the 3.0.25 release including support for locating 
+domain controllers asynchronously using Active Directory Site
+information.
+
+
+New IdMap Interface for Winbindd
+================================
+
+The 3.0.25 release of Samba includes a rewritten IdMap interface
+for winbindd which replaces the "idmap backend" parameter.  Please 
+refer to the "idmap domains" description in the smb.conf(5) man 
+page for more details.
+
+
+Dynamic DNS Updates
+===================
+
+The "net ads join" command is now able to register the host's DNS A
+records with Windows 2000 SP4 and 2003 DNS servers.  This 
+feature must be enabled at compile time using the --with-dnsupdate 
+when running the ./configure script.  There is also a related "net ads 
+dns" command for refreshing a host's records which could be launched
+from a dhcp client script when a new IP address is obtained.
+
+
+Support for Additional ACL Modules
+==================================
+
+Samba's POSIX ACL support has been moved inside of the VFS layer 
+which means it is now possible to support multiple ACL implementations
+on the same server including NFSv4 and GPFS ACLs.
+
+
+VFS ReadAhead Plugin
+====================
+
+Windows Vista introduces pipe-lined read support for improved 
+performance when transferring files.  The new vfs_readahead plugin
+allows Linux file servers to utilize additional Kernel buffers
+for caching files in order to avoid Disk I/O wait time when serving
+Vista clients.  If you experience poor read performance between 
+Linux servers and Vista clients, please test the vfs_readahead
+module by adding the following lines to the share definition
+in smb.conf:
+
+[file_share]
+	vfs objects = readahead
+
+Note that this plugin will result in additional RAM requirements
+due to the increased amount of kernel buffer caches used by smbd.
+Please refer to vfs_readahead(8) for more information.
+
+
+Windows Vista, Office 2007, and Offline Files
+=============================================
+
+Research surrounding offline files, Windows Vista, and Microsoft 
+Office 2007 has revealed a incompatibility between these 
+applications and the "map acl inherit = no" setting in smb.conf.  
+Users requiring support client side caching (csc) and offline 
+files are encouraged to enable the "map acl inherit" for any 
+affected share definitions in the server's configuration.
+Future versions of Samba will enable this setting by default.
+
+Please refer to the smb.conf(5) man page for more details on 
+"map acl inherit".
+
+
+######################################################################
+Changes
+#######
+
+smb.conf changes
+----------------
+
+    Parameter Name                      Description     Default
+    --------------                      -----------     -------
+    change notify timeout		Removed 	n/a
+    change notify			New		Yes
+    debug prefix timestamp              New             No
+    fam change notify			Removed		n/a
+    idmap domains			New		""
+    idmap alloc backend			New		""
+    idmap cache time			New             900
+    idmap negative cache time           New             120
+    kernel change notify		Per share	Yes
+    lock spin count                     Removed         n/a
+    max stat cache size 		Modified 	1024KB
+    msdfs root                          Modified	no
+    printjob username			New		%U
+    winbind normalize names		New		no
+
+
+
+
+Changes since 3.0.25rc3
 -----------------------
 
 
-o   Michael Adam <obnox at samba.org>
-    * Fix session setup with security = share.
-    * Fix segfault in testparm.
-    * Fix several Makefile issues.
-    * Fix build of bin/net on Solaris.
-    * Reformat the parm table of loadparm to use named initializers.
-    * Fix %I macro expansion for IPv4 mapped IPv6 addresses.
-    * Convert registry.tdb to use dbwrap and fix memleaks.
-    * Several make test fixes and improvements.
-    * Several libreplace extensions and fixes (portet from v4-0-test).
-    * Rename libnet_conf to libsmbconf and introduce backend abstraction layer.
-    * Add text backend to libsmbconf, based on params.c.
-    * Fix handling of includes in registry libsmbconf backend.
-    * Fix net conf import by reading from text backend.
-    * Add a "net registry" command to locally access the registry.
-    * Add getvalue subcommand to "net rpc registry".
-    * Add testsuites for libsmbconf and "net registry".
-    * Fix Coverity IDs 517, 536, 545.
-    * Remove unneeded REGISTRY_HOOKS layer from reghook cache
-      to allow plugging one backend to multiple keys more easily.
-    * Add smbconf_init dispatcher taking source strings like "backend:path"
-    * Fix handling of dangling parameters (without share) in libsmbconf.
-    * Introduce special meaning of "include = registry" to complement
-      the registry-only configuration of "config backend = registry".
-    * Enhance error propagation by making several registry functions
-      return WERROR.
-    * Fix loading of registry shares in smbd by fixing the token.
-    * Fix a segfault in tdb_wrap_log().
+o   Jeremy Allison <jra at samba.org>
+    * Fix memory corruption bug during string processing.
+    * Instantiate idiom that malloc/tallocs of array of 0 elements
+      returns NULL.
+    * Fix marshalling bugs in samr code based on incorrect
+      assumptions.
+    * Fix DFS MS-RPC enumeration reply when we have no DFS shares.
+    * Fix memory corruption when enumerating accounts in the 
+      LsaPrivilege database.
+    * Fixes for CVE-2007-2444, CVE-2007-2446, and CVE-2007-2447.
 
 
+o   Gerald (Jerry) Carter <jerry at samba.org>
+    * Fix memory corruption when adding/removing members from Local 
+      Groups.
+
+
+o   Guenther Deschner <gd at samba.org>
+    * Prevent leaking on full NET_USER_INFO_3 structure memory on each
+      cached login.
+    * Plug memory leak in client SPNEGO session setup code.
+    * Don't clear cached U/SID and UG/SID entries when we want to 
+      logon offline.
+
+
+o   Steve French <sfrench at us.ibm.com> 
+    * Allow prepaths in mount.cifs.
+    * Don't prompt for a password in mount.cifs when sec=none has been 
+      specified.
+
+
+o   Steve Langasek <vorlon at debian.org>
+    * BUG 4600: Fix compilation of --with-python.
+
+
+o   Volker Lendecke <vl at samba.org>
+    * Fix memory corruption bug in string_replace().
+    * Fix valgrind error in parse_domain_user().
+    * Fix compilation of explicit --without-winbind.
+    * Fix an uninitialized variable and other compiler warnings.
+    * Fix memory leak in smbd's claim session code.
+    * BUG 4613: Fix incorrect password expiration caused by stomping on 
+      the time values in the NET_USER_INFO_3 for remote users.
+    * Fixes for CVE-2007-2446.
+
+
+o   Stefan Metzmacher <metze at samba.org>
+    * Add AC_GNU_SOURCE macro in libreplace for systems which don't have it.
+    * Fix libreplace compiler warnings.
+
+
+o   Jens Nissen <jens.nissen at gmx.net>
+    * Fix memory leak on the file/directory ACL processing code.
+
+
+o   Simo Sorce <idra at samba.org>
+    * Memory allocation cleanups and sanity checks after the malloc(0)
+      == NULL crusade.
+    * Fix socket leak in idmap_ldap.c.
+    * Fix failure in "net idmap restore".
+    * Fix crash bug in idmap_ldap's get_credentials() code.
+    * Fixes for CVE-2007-2446.
+
+
+o   Alison Winters <alisonw at sgi.com>
+    * Add missing return calls in sendfilereadbraw.
+
+
+Changes since 3.0.24
+--------------------
+
+
+commits
+-------
+
+o   Michael Adam <ma at sernet.de>
+    * Patch to lib/sysquotas_linux.c replacing some "get"s by "set"s.  
+      This makes the difference between the get and set calls for
+      SMB_USER_FS_QUOTA_TYPE and SMB_GROUP_FS_QUOTA_TYPE. 
+    * Prevent collision from config.h created by stand alone component
+      builds.
+
+
 o   Jeremy Allison <jra at samba.org>
-    * BUG 5311: Fix IPv6 issue with hosts allow/deny settings.
-    * BUG 5372: Fix client timeouts in large CUPS installations.
-    * Fix problem with nmbd not waiting until interfaces come up.
-    * Fix S3 to pass the test_raw_oplock_exclusive3 test.
-    * Fix MSDFS bug breaking MS clients in some cases by ensuring 
-      the target host is ourselves.
-    * Rewrite the wrap checks to deal with gcc 4.x optimisations.
+    * Fix CIFS POSIX unlink behavior.
+    * Change POSIX_UNLINK to allow clients to differentiate between 
+      unlink/rmdir calls.
+    * Add smbclient implementations of POSIX open/mkdir/unlink/rmdir.
+    * Refactor MS-DFS server and client code.
+    * Support deep MS-DFS referrals in Samba client applications.
+    * Change the VFS interface to use struct timespec for utimes.
+    * Fix build failures on *BSD platforms caused by introduction of 
+      memalign().
+    * Optimize exit path in the byte-range locking code in smbd to 
+      only read the locking db if there are outstanding lock requests.
+    * Fix long-standing bug in our chain processing code.
+    * BUG 4384: Fix bug in old search code.
+    * Add support for the UNIX_INFO2 info level.
+    * Add in the "create info" field to the reply from POSIX_OPEN 
+      and POSIX_MKDIR.
+    * Refactor the sessionsetupX code a little to allow us to return 
+      a NT_STATUS_TIME_DIFFERENCE_AT_DC error to a client.
+    * Fix memory leaks in the LDAP sasl bind code.
+    * Fix crash in vfs audit/full audit modules caused by API changes.
+    * Fix connection problem between pre-3.0.25 smbclient and new DFS
+      server code.
+    * Fix valgrind errors in credentials.c.
+    * Fix logic error in CIFS POSIX extensions for open() and mkdir().
+    * Fix if logic error when checking for password resets of machine
+      trust accounts in Samba's passdb.
+    * Ensure we use the same technique to pull the share mode data out
+      that locking.c does.
+    * Fixes buffer parsing in the server side Lanman and RAP calls.
+    * Fix GetPrinter() info level 3 to fix displaying and setting
+      security descriptors on printers from WinXP x86_64 clients.
+    * Return correct error code to the trans2 GetDfsReferral() request
+      from Vista clients (fixes listing share contents in the Vista
+      explorer.exe).
+    * BUG 4486: Fix the exclude_dir parameter in the VFS recycle
+      plugin.
+    * Consolidate the become_root_uid_only() calls to only use
+      become_root().
+    * Add vfs_readahead module to deal with the pipe-lined reads 
+      from Vista clients.
+    * BUG 4404: Fix server SMB/CIFS protocol bugs that broke Vista
+      clients trying to utilize offline file support.
+    * BUG 4494: Make sure to fail immediately if sendfile fails and
+      don't continue on to call chain_reply() (based on report from
+      Kevin Jamieson).
+    * Remove tdb.h from the libsmbsharemodes.so header file.
+    * BUG 3634: Fix crash in nmbd caused by a bad "interfaces" include
+      in smb.conf.
+    * Add initial version to winbindd_cache.tdb file.  Automatically
+      delete existing non-versioned cache files.
+    * Fix the storage size of time_t in winbindd_cache.tdb to be 8
+      bytes.
+    * Cope with signature errors on sessionsetupX logins where the
+      server just reflects our signature back to us. Allow the upper 
+      layer to see the real error.  
+    * BUG 4512: Limit the volume label for a share to 32 UNICODE
+      characters.
+    * Allow arbitrary bases in int and ulong parsing in smb.conf.
+    * Fix off-by-one error in tconX parsing.
+    * Winbind off-line logon fixes.
+    * Support for AD sites when locating domain controllers.
+    * Fix libsmbclient bug with Konqueror and NetApp filers that need 
+      a leading / in OpenAndX calls. 
+    * BUG 4187: Possible crash in signing on/off code.
+    * Fix memory leaks in pam_winbind.c.
+    * Fix a bug in the sequence number store/fetch routines in
+      winbindd_cache.tdb.
+    * Fix the problem with Linux clients requesting O_WRONLY on write-only
+      files.
+    * Fix a class of memory allocation bugs in the handling of user tokens.
+    * Fix crash bug in winbindd caused by a bug in the messaging dispatch
+      code.
+    * Fix memory bloat in trans calls caused by talloc()'ing memory off the
+      wrong context.
+    * Fix wildcard renames with SMBmv.
+    * Fixes for pathname handling code.
+    * Add in the wdel smbclient command to perform wildcard deletes.
+    * Fix a bug that causes smbd to 'hang' intermittently while updating
+      the trusted domain cache.
+    * Cleanup error path processing in reduce_name().
+    * Fixes for smbtorture tests (BASE-DELETE, ...)
+    * Delete on close fixes ("I completely understand it this time").
+    * Remove unneeded checks on incoming uid/gid for mknod (fifo) Unix
+      extensions code.
+    * More fixes for Unix Extensions include support for POSIX locking.
+    * NTLMv2 fixes for Vista clients.
+    * Add an optimized lookup for Domain Users and only report the current
+      user (which is generally what the calling application wants to know 
+      anyways).
+    * Fixes for supporting the Vista backup utility based on work by Joe
+      Meadows <jameadows at webopolis.com>.
+    * Fix 4377: Fix rename of "foo" -> "Foo".
+    * BUG 4188: Fix for Vista delete directory bug.
+    * BUG 4400: Add support for processing large Krb5 tickets in SMB
+      sesssetup&X.  Based on work by <todd.stecher at isilon.com>.
+    * Fix trans2 file size reporting for Linux CIFS client.
+    * Allow Well-Known and Local Groups to be stored in POSIX ACLs
+      as long as there is a SID/gid mapping entry available.
+    * Fix memory corruption bug in the CIFS POSIX open/mkdir.
+    * BUG 4536: Correctly delete symlinks pointing to a directory.
 
 
-o   Kai Blin <kai at samba.org>
-    * BUG 4235: Prevent ntlm_auth from sending BH responses without a message.
-    * Fix one BH message.
+o   Danilo Almeida <dalmeida at centeris.com>
+    * Add additional debug support for pam_winbind.
+    * Add support for listing multiple groups in pam_winbind's 
+      require-membership-of option which act as a logical OR.
 
 
+o   Andrew Bartlett <abartlet at samba.org>
+    * Ensure debug messages from tools print the correct config file 
+      location if the file was defined as a command line option.
+
+
+o   Andrew Benham <andrew.benham at thus.net>
+    * BUG 4290: Properly compute time to password expiration in message
+      from pam_winbind.
+
+
+o   Alexander Bokovoy <ab at samba.org>
+    * Ensure nfsv4 chown logic is controlled by "nfs4:chown=[yes|no]".
+    * Add GPFS-provided DMAPI support
+
+
+o   Kai Blin <kai.blin at gmail.com>
+    * Match Windows NTLMSSP flags.
+
+
 o   Gerald (Jerry) Carter <jerry at samba.org>
-    * Fix libtdb some to move back towards allowing out of tree builds.
-    * Ignore port when pulling IP addr from struct sockaddr_storage..
+    * Implement pluggable "winbind nss info" interface.
+    * Removal of unmaintained smbwrapper utility.
+    * Fix server affinity bugs in the 'net ads join' code to include
+      support for AD sites.
+    * Implement DDNS update client code.
+    * Upper case the host/sAMAccountName in the keytab file.
+    * Fix lookupname call in winbindd when joined to a child domain and
+      trying to resolve a SID in a sibling domain.
+    * Fix password changes against a Windows 2000 DC using pam_winbind.
+    * Fix crash in "pdbedit -L -w"
+    * Add "winbind normalize names" option.
+    * BUG 4093: Make %a resolve correctly for Windows Vista and Windows 
+      XP 64bit clients.
+    * Printing fixes for Windows Vista.
+    * Protect the sasl bind against a NULL principal string in the 
+      SPNEGO negTokenInit
+    * Fix some "cannot access LDAP when no root" bugs.
+    * NSS and PAM fixes on AIX.
+    * Cached credentials and Krb5 ticket renewal fixes in winbindd.
+    * Fix server affinity bug in Winbind's ADS connection handling.
+    * Fix crash when enumerating local group membership in usrmgr.exe
+      on a Samba DC.
+    * Rework parsing for NetFileEnum() and NetSessionEnum()
+    * Add server stub for NetFileClose()
+    * Return correct information for sessions and open files
+      including session duration, number of open files, and open pipes.
+    * Fixes for "winbind normalize names" functionality: 
+      - Fix getgroups() call called using a normalized name
+      - Fix some more name mappings that could cause for example
+        a user to be unable to unlock the screen as the username
+        would not match in the PAM authenticate call.
+     * Blacklist BUILTIN and MACHINE domains from the idmap domains as 
+       these should only be handled by the winbindd_passdb.c backend.
+     * Allow the alloc init to fail for backwards compatible 
+       configurations such as with idmap_ad.
+     * Remove the deprecated flags from idmap backend, et. al. These 
+       are mutually exclusive with the "idmap domains".
+     * Add the osname and osver options to 'net ads join'
+    * Ensure winbindd honors the "idmap domains" option and not 
+      default to idmap_tdb.
+    * Fix memory corruption caused by calling free() on talloc()'d
+      memory when adding and removing users from local groups.
+    * BUG 4501 (partial): Fix crash bugs in idmap_ad plugin by adding
+      the schema_mode option when using "winbind nss info = template".
+    * BUG 4491, 4501 (partial): Disable attempts to allocate a uid/gid if no
+      idmap alloc backend has been defined.  Do not defined a default
+      alloc backend.
+    * Fix "make install" to include creating the links between
+      idmap_ad and the nss_info_rfc2307 and nss_info_sfu plugins.
+    * Enable the --with-dnsupdate in the Fedora/RHEL RPM packaging
+      files.
+    * BUG 4508: Remove potential loops in the idmap API by requiring
+      the caller defined the SID type rather than having the idmap layer
+      call back up to determine the SID type when allocating
+      uids/gids.
+    * Don't inherit the offline flag for winbindd_domains that have
+      not been initialized yet.
+    * Fix a crash in idmap_ldap caused by a NULL pointer dereference.
+    * Fix deadlock and timeout conditions in idmap_rid.
 
 
+o   Steven Danneman <steven.danneman at isilon.com>
+    * Memory leak fixes.
+    * Fix core dump when config file in same directory.
+
+
+o   Mathias Dietz <mdietz at de.ibm.com>
+    * Initial implementation of the GPFS VFS module.
+    * Work on NFSv4 ACL VFS plugin.
+    * Add support for share modes to the GPFS VFS plugin.
+
+
 o   Guenther Deschner <gd at samba.org>
-    * Fix build of pam_smbpass.
-    * Fix lp_load with an empty registry and "config backend = registry".
-    * Fix build targets for bin/net.
-    * Fix _dssetup_DsRoleGetPrimaryDomainInformation().
-    * Fix the build of cifs.spnego.
-    * Migration of the SRVSVC client and server DCE/RPC code to IDL
-      based structures and autogenerated code
-    * Fix Kerberos session setup with Vista SP1 (ignore PAC type 12)
-    * Fix support for vampire of lockout policies and
-      for storing dialin/terminal server settings.
-    * Fix remote join/unjoin server implementation.
-    * BUG 5328: Fix netlogon credential chain with Windows 2008
-      (this also fixes joining Windows 2008 with rpc methods).
-    * Various fixes for establishing and validating interdomain trust
-      relationships with Windows 2008.
-    * Use IDL for storing domain controller information in dsgetdcname.
-    * Re-arranged internal structure of libnetapi.
-    * Add support for domain\dcname syntax in libnetjoin.
-    * Add support for browsing/joining OUs in netdomjoin-gui.
-    * Add various new calls to libnetapi.
+    * Winbind off-line logon fixes.
+    * Support for AD sites when locating domain controllers.
+    * Various fixes for 'net ads' user management functions.
+    * Add an CLDAP client written in Perl.
+    * Cleanups to the Krb5 ticket refresh code in winbindd.
+    * Fixes for various error messages from pam_winbind when password
+      policies are being enforced.
+    * Implement grace logons for offline authentications in pam_winbind.
+    * Fixes for idmap_ad.
+    * Memory leak fixes.
+    * BUG 4009: Fixes leaking file descriptors (CLOSE_WAIT) in winbindd
+      with short lived service tickets
+    * Implement basic AD group policy library
+    * Adding experimental krb5 lib locator plugin.
+    * Ensure that Samba clients are correctly reported by the %a 
+      smb.conf as "Samba" and not "Vista".
+    * Prevent a user from issuing a PAM_DELETE_CREDS request in 
+      pam_close_session() for another user.
+    * Fix tdb keynames in netsamlogon_clear_cached_user().
+    * Add missing proto_exists dependency for the Winbind NSS target
+      in the Makefile.
+    * Build fixes when linking against Heimdal 0.8 Kerberos libraries.
+    * Build fixes when using older Heimdal Krb5 libs (e.g. 0.6.3).
+    * Memory allocation error checks in libgpo.
 
 
+o   Steve French <sfrench at us.ibm.com> 
+    * Fix mount.cifs compile on old libc missing bind mount #define.
+
+
+o   SATOH Fumiyasu <fumiyas at osstech.co.jp>
+    * Fix memory leaks in the error paths used by winbindd's credential 
+      cache code.
+    * BUG 4409: Add minsize parameter to the vfs_recycle plugin.
+    * BUG 3319: Ensure that 'hide unreadable' does not filter MS-DFS links.
+
+
+o   Krishna Ganugapati <krishnag at centeris.com>
+    * Implement DDNS update client code.
+
+
+o   YAMASAKI Hiroyuki <h-yamasaki at pd.jp.nec.com>
+    * BUG 4346: Fix type reported for hidden shares via MS-RPC.
+
+
+o   David Hu <david.hu at hp.com>
+    * BUG 4267: Fix memory leaks in ldapsam.
+
+
+o   Bjoern Jacke <bj at sernet.de>
+    * BUG 4244: Limit stat cache to a default of 1MB.
+
+
+o   William Jojo <jojowil at hvcc.edu>
+    * BUG 3713: Re-add reporting what the profiles tool does (-v).
+    * BUG 3632: Fix for EISCON in open_any_socket_out() on AIX.
+    * BUG 4447: Fix compile failure on AIX 5.2.
+
+
+o   Taj Khattra <taj.khattra at gmail.com>
+    * Fix missing lock count release in transaction cancel.
+
+
+o   Zack Kirsch <zack.kirsch at isilon.com>
+    * Fix memory leaks on some error paths.
+    * Memory leak fixes on error paths in various places.
+
+
+o   Derrell Lipman <derrell at samba.org>
+    * BUG 4115: Fix for using kerberos logins in libsmbclient.so.
+    * BUG 4309: Prevent netbios keepalive on port 445 which causes
+      Vista to disconnect Samba clients.
+    * Ensure that the libsmbclient example programs link with the
+      libsmbclient library that's part of the current tree.
+
+
+o   Volker Lendecke <vl at samba.org>
+    * Replace snum references with a structure based array.
+    * Allow changing of the hashsize when running tdbbackup.
+    * Implement secure DDNS update code
+    * Klocwork, Coverity, and IBM Checker fixes.
+    * BUG 4273: Fix crash in 'net rpc vampire'
+    * Refactor older SMB file serving code.
+    * Refactor open directory file serving code.
+    * Implement support for inotify when serving CIFS change notification
+      requests (includes merge work from SAMBA_4_0).
+    * Fixes to allow Samba 3.0 to pass various smbtorture tests (RAW-OPEN,
+      RAW-UNLINK, RAW-CLOSE, ...)
+    * Refactor delete on close file server code.
+    * MS-DFS fixes for Vista clients.
+    * BUG 4372: Long timeout in LDAP setup when accessing files after 
+      10 secs.
+    * Change the static array for the in-memory mirrors of the hash chain
+      locks to a dynamically allocated one.
+    * Use inotify for file change notification on Linux.
+    * Revert "msdfs root" to default to "no".
+    * Refactor AIO code.
+    * Fix memory leaks when returning user lists to clients via SAMR calls.
+    * BUG 4365: Fix NTLMv2 implementation on Samba member servers not 
+      running winbindd.
+    * Reduce contention on the tdb free list by periodic reclamation
+      of dead tdb records into groups
+    * Split tdb free lists per hash chain.
+    * Coverity fixes.
+    * Add winbindd_priv_request_response() request that kills the 
+      existing winbind pipe connection if it's not privileged to prevent
+      race conditions during the challenge/response authentication sequence.
+    * BUG 4460: Fix compile error in winbind_nss_irix.c.
+    * Fix Coverity bug reports.
+    * Fixes buffer parsing in the server side Lanman and RAP calls.
+
+
+o   David Leonard <dleonard at vintela.com>.
+    * Fix file descriptor leak from an error path in winbindd.
+    * BUG 4369: Fix smbclient's showacls on files in subdirectories.
+
+
+o   Herb Lewis <herb at samba.org>
+    * Cleanups to sharesec utility.
+    * Compiler warning cleanups.
+    * Compiler warning fixes.
+    * Allow smbcontrol to use POPT_COMMON_SAMBA options to allow setting
+      debug level.
+    * Add "debug prefix timestamp" to allow syslog type timestamps to be 
+      added in the Samba log files.
+    * Fix compile error in nmbd_incomingdgrams.c.
+    * Allow profiling level to be set on startup.
+
+
+o   Ying Li <ying.li2 at hp.com>
+    * Use the default tdb idmap plugin when neither idmap domains
+      nor idmap backend have been defined.
+
+
+o   Jason Mader <jason at ncac.gwu.edu>
+    * Various compile warning fixes. 
+    * Initial patch set for strptime() in libreplace.
+
+
+o   Don McCall <don.mccall at hp.com>
+    * Fix compile bug in vfs_default on platforms without utimes().
+    * HP-UX compile fixes.
+
+
+o   Jim McDonough <jmcd at us.ibm.com>
+    * Bug fixes for GPFS VFS module.
+    * Fix "password never expires" policy which would be incorrectly 
+      require all users to change their password at login time.
+    * Fix the GPFS VFS module to pass the POSIX ACL tests (Thanks to
+      Gomati Mohanan).
+    * Fix crate_user() access checks when setting the "User Cannot 
+      Change Password" flag.
+
+
+o   Stefan Metzmacher <metze at samba.org>
+    * POSIX ACL compile warning fixes.
+    * Fix --with-fhs, where confdir is set to \${sysconfdir} but
+      sysconfdir wasn't defined in the Makefile.
+    * Add localstatedir to configure.in for completeness.
+    * BUG 4496: Fix libreplace failure on ulibc systems.    
+    * Merge numerous libreplace fixes from the SAMBA_4_0 code base 
+      (stdint.h, stdbool.h, unsetenv, strptime(), strtoll(), et. al.).
+    * Move ZERO_*, ARRAY_SIZE and PTR_DIFF macros into libreplace.
+    * Portability fixes for dlopen() (merge from SAMBA_4_0)
+    * Sync libreplace (merge from SAMBA_4_0)
+
+
+o   Heinrich Mislik <Heinrich.Mislik at univie.ac.at>
+    * AIX quota fixes.
+
+
+o   Gomati Mohanan <gomati.mohanan at in.ibm.com>
+    * Work on NFSv4 ACL VFS plugin.
+
+
+o   Lars Mueller <lars at samba.org>
+    * Provide better feedback about deprecated use of multiple passdb
+      backends.  Use the first backend to have at least this one working.
+    * Fix make install to include smbmount, et. al. docs.
+    * Merge more proto_exists dependency fixes from SAMBA_3_0.
+    * Makefile cleanups.
+    * Log the reason for failures when not creating a core file on a
+      crash due to restrictive permissions on the log file directory.
+
+
+o   James Peach <jpeach at apple.com>
+    * Replace exit_server with exit_server_cleanly where appropriate.
+    * Add docs for VFS modules.
+    * Portability fixes for autoconf and character set modules on 
+      OS X.
+    * Only attempt to reload the config file after the fork point 
+      if we are in daemon mode.
+    * Support the SMB_QUERY_POSIX_WHOAMI info level on QueryFsInfo.
+    * Changing the FindFirst response for the UNIX_INFO2 level to
+      include a length field before the name.
+    * Add call to chflags(2) in the default VFS module.
+
+
+o   Andy Polyakov <appro at fy.chalmers.se>
+    * Pull the CUPS comment and location attributes when not overridden 
+      by values stored in Samba's ntprinters.tdb.
+    * BUG 3275: Allow upload of x64 printer drivers by relaxing the COFF 
+      header parsing code in smbd.
+
+
+o   J Raynor <raynorj at mn.rr.com>
+    * Make sure we are privileged when doing DMAPI operations on systems
+      that don't have capability support.
+
+
+o   Jorge Santos <jorge_a_santos at hotmail.com>
+    * BUG 4500: Fix compile bug in quota.c.
+
+
+o   Jiri Sasek <jiri.sasek at sun.com>
+    * Fix incorrect Krb5 linking on Solaris.
+    * Fix possible NULL dereference in adt_tree.c
+
+
+o   Karolin Seeger <ks at sernet.de> 
+    * Fix a compile problem in shadow_copy_test.c.
+    * Add 'net sam policy' commands.
+    * Fixes for "net usershare" and "guest_ok=y"
+
+
+o   Robert Shearman <rob at codeweavers.com>
+    * Allow NULL domain and username in the form of user at domain to be 
+      interpreted correctly by ntlm_auth for use by Wine applications.
+
+
+o   Simo Sorce <idra at samba.org>
+    * Remove redundant log messages from idmap_ad.c.
+    * BUG 3974: Fix ambiguity between the -N option and the -T
+      tar options.
+    * Fix linking flags used when creating shared libraries.
+    * Offline logon fixes in the idmap backend manager.
+    * Cleanup initialization code in the sfu and rfc2307 nss_info
+      plugins to protect against a crash if called before the idmap_ad
+      module has been initialized.
+    * Protect against crashes in get_dc_name() in the idmap_ad code
+      when we are working offline.
+    * BUG 4438, 4440: Fix bugs in "net sam provision".
+    * Initial implementation of new IdMap interface.
+    * Fix crash in pam_winbind caused by referencing a pointer after the 
+      memory had been freed.
+    * Implement escaping function for ldap RDN values.
+
+
+o   Peter Somogyi <SOMOGYI at de.ibm.com>
+    * Work on NFSv4 ACL VFS plugin.
+
+
+o   Andrew Tridgell <tridge at samba.org>
+    * Fix an integer overflow in the ndr library code used by PIDL.
+
+
+o   Jelmer Vernooij <jelmer at samba.org>
+    * Implement support for IDL autogenerated code to
+      handle the MS-RPC parsing functions.
+
+
+o   Don Watson <dwwatson at us.ibm.com>
+    * Fixes for 'net rpc vampire' and the guest account
+
+
+o   Martin Zielinski <mz at seh.de>
+    * Printing fixes for Windows Vista clients.
+
+
+      --------------------------------------------------
+                   ==============================
+                   Release Notes for Samba 3.0.24
+                             Feb 5, 2007
+                   ==============================
+
+
+Important issues addressed in 3.0.24 include:
+
+  o Fixes for the following security advisories:
+    - CVE-2007-0452 (Potential Denial of Service bug in smbd)
+    - CVE-2007-0453 (Buffer overrun in NSS host lookup Winbind
+      NSS library on Solaris)
+    - CVE-2007-0454 (Format string bug in afsacl.so VFS plugin)
+
+
+######################################################################
+Changes
+#######
+
+Changes since 3.0.23d
+---------------------
+
+commits
+-------
+
+o   Jeremy Allison <jra at samba.org>
+    * Fix for CVE-2007-0452 & CVE-2007-0454
+
+
+o   Olivier Gay <ouah at ouah.org>
+    * Fix for CVE-2007-0453
+
+
+o   Volker Lendecke <vl at samba.org>
+    * Fix for CVE-2007-0452
+
+
+      --------------------------------------------------
+                   ===============================
+                   Release Notes for Samba 3.0.23d
+                             Nov 14, 2006
+                   ===============================
+
+This is the latest stable release of Samba. This is the version 
+that production Samba servers should be running for all current 
+bug-fixes.  Please read the changes in this section and for the 
+original 3.0.23 release regarding new features and difference 
+in behavior from previous releases.
+
+Important issues addressed in 3.0.23d include:
+
+  o Stability fixes for winbindd
+  o Portability fixes on FreeBSD and Solaris operating systems.
+
+######################################################################
+Changes
+#######
+
+Changes since 3.0.23c
+---------------------
+
+commits
+-------
+
+o   Jeremy Allison <jra at samba.org>
+    * Changes to ntlm_auth to better support Firefox's NTLM 
+      authentication.
+    * Make the "max usershares" parameter an advisory limit.
+    * BUG 4095: Cleanup bad substitution causing the username 
+      to be translated to domain\user twice in spnego path. 
+    * BUG 4097: Ensure all pdb_XXX calls are wrapped in 
+      [un]become_root() pairs.
+    * Ensure we always return the canonicalized name 
+    * Add in fixes to mangling dir code.
+    * Do not assume that gencache can always be opened for RW access.
+      Fall back to RO.
+    * Always initialize variables in winbindd request/response 
+      structure.
+    * Fix libsmbclient bug with Konqueror and NetApp filers that 
+      need a leading / in OpenAndX calls. 
+    * Added showacls toggle in the smbclient code.
+    * Add a suffix to the pidfile's program name if this is a process
+      with a non-default configuration file name.
+    * Fix protection from invalid struct tm values.
+    * BUG 4187: Possible crash in signing on/off code.
+    * BUG 4214: Fix crash bug in find_forced_group().
+    * BUG 4224: Fix enforcement of the deadtime parameter.
+
+
+o   Timur Bakeyev <timur at com.bat.ru>
+    * BUG 3856: Set the nss soname version on FreeBSD.
+    * BUG 4109: Fix bug causing smbd to turn off winbindd and 
+      fail to disable the _NO_WINBIND environment.
+    * BUG 3868: Prevent --with-aio-support from trimming the 
+      $LIBS variable in configure.in.
+
+
+o   Dmitry Butskoy <dmitry at butskoy.name>
+    * BUG 4075: Allow smbd to use winbindd to lookup uids/gids 
+      outside the idmap range if 'winbind trusted domains 
+      only = yes'.
+
+
+o   Gerald (Jerry) Carter <jerry at samba.org>
+    * Fix primary group lookup failures.  Use the Get_Pwnam_alloc() 
+      call to ensure it finds the Unix user first.
+    * Only grant privs to Administrators if privileges are enabled 
+      to avoid bogus error messages in the logs.
+
+
+o   Alex Deiter <tiamat at komi.mts.ru>
+    * BUG 3524: Fix for quota support on Solaris.
+
+
+o   Guenther Deschner <gd at samba.org>
+    * Close socket when the CLDAP request has failed.
+    * Memory leak fixes in the libads/ldap.c code.
+    * Printer publishing fixes for "net ads".
+    * Fix error code returns in the CLDAP client code.
+    * Do not anonymously query for AD schema items in winbindd.
+    * Protect against storing null-sids in the winbind cache.
+    * Fallback to non-paging LDAP searches for anonymous bound 
+      connections.
+    * More workarounds when nscd.
+    * Fix error code typoe in the GetDcName() netlogon call  
+      (including two new error codes).
+    * Fix valgrind warnings in pam_winbind
+    * Add two missing refresh_sequence_number calls where they are 
+      missing just before writing to the winbind cache tdb.
+    * Attempt to locate a valid domain controller before prompting
+      for credentials in "net ads".
+    * Set 35 second timeout in winbindd's netlogon code when sending 
+      a GETDC request.
+    * Stop "net ads {user,group} delete" from doing funny things.
+    * Fix container handling for "net ads user" and "net ads group" 
+      functions.
+    * Fix various memleaks and seg faults in "net ads {user,group}".
+
+
+o   Udo Eberhardt <udo.eberhardt at thesycon.de>
+    * BUG 4100: Fix crash in the server spooler code by initializing 
+      values for smb_io_notify_info_data_strings.
+
+
+o   Olaf Flebbe <o.flebbe at science-computing.de>
+    * BUG 4133: pam_winbind.c compile fix on AIX 5.1.
+
+
+o   David Hu <david.hu at hp.com>
+    * BUG 4212: Fix memleak in the default_ou_string handling.
+
+
+o   Mikhail Kshevetskiy <kl at laska.dorms.spbu.ru>
+    * BUG 4229: Compile fix for systems without kerberos.
+
+
+o   Volker Lendecke <vl at samba.org>
+    * NTLMSSP LanMan session key fixes.
+    * Various potential seg fault fixes.
+    * Extra logic in share access checks for bad smb.conf parameter 
+      settings.
+    * Fixes to allow smbclient to connect to Vista RC1 workstations.
+    * Fix bad search filter in ldapsam when enumerating group 
+      members.
+
+
+o   Jim McDonough <jmcd at us.ibm.com>
+    * Correctly handle the password expiration policy on Samba DCs.
+
+
+o   Nils Nordman <nils.nordman at nordman.org>
+    * BUG 4085: Allow smbpasswd to change expired passwords on 
+      remote servers.
+
+
+o   Simo Sorce <idra at samba.org>
+    * Merge uid2sid and gid2sid async calls for SAMBA_3_0.
+    * Better fqdn handling when parsing the /etc/hosts file.
+    * Fix crash bug in pam_winbind.
+
+o   Andrew Tridgell <tridge at samba.org>
+    * Fix string alignment problem in password change code.
+
+
+o   Jim Wang
+    * BUG 4211: Logic error when enforcing "acl group control"
+      behavior.
+
+
+Release Notes for older release follow:
+
+      --------------------------------------------------
+                   ===============================
+                   Release Notes for Samba 3.0.23c
+                             Aug 30, 2006
+                   ===============================
+
+We would like to thank the developers of the Saturn code analysis 
+tool from Stanford University (http://glide.stanford.edu/saturn).
+This release includes several code fixes based on its reports.
+
+Common bugs fixed in 3.0.23c include:
+
+  o Authentication failures in pam_winbind when the AD domain
+    policy is set to not expire passwords.
+  o Authorization failures when using smb.conf options such
+    as "valid users" with the smbpasswd passdb backend.
+
+
+RID Algorithms & Passdb
+=======================
+
+Starting with the 3.0.23c release, the officially supported passdb 
+backends (smbpasswd, tdbsam, and ldapsam) now operate identically
+with regards to the historical RID algorithm for unmapped users 
+and groups (i.e. accounts not in the passdb or group mapping table).
+The resulting behavior is that all unmapped users are resolved 
+to a SID in the S-1-22-1 domain and all unmapped groups resolve
+to a SID in the S-1-22-2 domain.  Previously, when using the 
+smbpasswd passdb, such users and groups would resolve to an 
+algorithmic SID in the machine's own domain (S-1-5-XX-XX-XX).
+However, the smbpasswd backend still utilizes the RID algorithm
+when creating new user accounts or allocating a RID for a new 
+group mapping entry.
+
+With the changes in the 3.0.23c release, it is now possible to 
+resolve a uid/gid, name, or SID in any direction and always obtain
+a symmetric mapping.  This is important so that values for smb.conf 
+parameters such as "valid users" resolve to the same SIDs as those 
+included  in the local user's initial token.
+
+Most installations will notice no change.  However, because
+an unmapped account's SID will now change even when using 
+smbpasswd it is possible that any security descriptors on files
+previously copied from a Samba host to a Windows NTFS partition
+may now fail to give access. The workaround is to either manually
+map all affect groups (or add impacted users to the server's 
+passdb) or to manually reset the file's ACL.
+
+
+######################################################################
+Changes
+#######
+
+Changes since 3.0.23b
+---------------------
+
+commits
+-------
+o   Michael Adam <ma at sernet.de>
+    * Fix incorrect logic in internal_resolve_name() caused by if 
+      statement.
+
+
+o   Jeremy Allison <jra at samba.org>
+    * Don't store a NULL SID in winbindd's offline cache.
+    * Ensure we store the offline password hash in the correct format.
+    * OS/2 fixes for large Extended Attributes data.
+    * Fix nmbd crashes caused by miscalculation in pushing 
+      announcements.
+    * Handle times consistently across all client utils including
+      libsmbclient.
+    * Fix a file descriptor leak in nmbd sync DNS lookup code.
+    * Fix inconsistency found in checking for NULL in DLIST_REMOVE
+      macro.
+    * Pointer dereference fixes based on the Saturn analysis tool.
+    * Fix memory leak in the AD DC lookup code.
+
+
+o   Gerald (Jerry) Carter <jerry at samba.org>
+    * RHEL4  and Fedora packaging updates.
+    * Remove RID algorithm support for unmapped users and groups
+      when using an smbpasswd backend.
+    * Extend the NT token for local users' with the S-1-22-2 
+      SID for each supplementary group
+    * BUG 3969: Fix unsigned time comparison with expiration 
+      policy from AD DC.
+    * Merge Guenther's fixes from the SuSE SLES10 tree to ensure 
+      that winbindd talks to the correct DC when servicing PAM 
+      authentication requests.
+    * Do not use the generic IP address sort routines for AD DCs
+      since the SRV lookup include a sorting algorithm based
+      on priority and weight. 
+    * Fix our DNS SRV lookup code to deal with multi-homed hosts.
+    * More changes to ensure that the primary group SID for 
+      a local user is based on the primary Unix group and not the
+      primaryGroupSID passdb attribute.
+    * Disable storing SIDs in the S-1-22-1 and S-1-22-2 domain 
+      to the SID<->uid/gid cache.
+
+
+o   Guenther Deschner <gd at samba.org>
+    * Fix msdfs RPC client and server management RPCs.
+    * Align idmap_ad with the current idmap_methods interface.
+
+
+o   Volker Lendecke <vl at samba.org>
+    * Re-add support for "username level" when looking up the 
+      matching Unix user for an smbpasswd entry.
+    * snprintf() fixes.
+
+
+o   Simo Sorce <idra at samba.org>
+    * Let innetgr() work without binding its use to a 
+      NIS domain to support netgroups in local files.
+
+
+o   Ben Winslow <rain at bluecherry.net>
+    * Allow client smb signing to be turned off correctly.
+
+
+      --------------------------------------------------
+                   ===============================
+                   Release Notes for Samba 3.0.23b
+                             Aug 7, 2006
+                   ===============================
+
+Common bugs fixed in 3.0.23b include:
+
+  o Ambiguity with unqualified names in smb.conf parameters
+    such as "force user" and "valid users".
+  o Errors in 'net ads join' caused by bad IP address in the list
+    of domain controllers.
+  o SMB signing errors in the client and server code.
+  o Domain join failures when using smbpasswd on a Samba PDC.
+
+
+Member servers, domain accounts, and smb.conf
+=============================================
+
+Since Samba 3.0.8, it has been recommended that all domain accounts 
+listed in smb.conf on a member server be fully qualified with the 
+domain name.  This is now a requirement.  All unqualified names are 
+assumed to be local to the Unix host, either as part of the server's 
+local passdb or in the local system list of accounts (e.g. /etc/passwd 
+or /etc/group).
+
+The reason for this change is that smbd has transitioned from
+access checks based on string comparisons to token based
+authorization.  All names are resolved to a SID and then verified
+against the logged on user's NT user token.  Local names will
+resolve to a local SID, while qualified domain names will resolve
+to the appropriate domain SID.  
+
+If the member server is not running winbindd at all, domain 
+accounts will be implicitly mapped to local accounts and their
+tokens will be modified appropriately to reflect the local 
+SID and group membership.
+
+For example, the following share will restrict access to the
+domain group "Linux Admins" and the local group srvadmin.
+
+[restricted]
+	path = /data
+	valid users = +"DOMAIN\Linux Admins" +srvadmin
+
+Note that to restrict the [homes] share on a member server to the 
+owner of that directory, it is necessary to prefix the %S value 
+to "valid users".
+
+[global]
+	security = {domain,ads}
+	workgroup = DOM
+	winbind separator = +
+[homes]
+	valid users = DOM+%S
+
+
+
+######################################################################
+Changes
+#######
+
+Changes since 3.0.23a
+---------------------
+
+commits
+-------
+o   Michael Adams <ma at sernet.de>
+    * Fix memory leaks on error paths in 'net ads join'.
+
+
+o   Jeremy Allison <jra at samba.org>
+    * BUG 3962: Fix memory leak when enumerating print jobs.
+    * Fix file access flags for the Linux CIFS fs client.
+    * Fix memory leaks in the smbclient DFS code.
+    * BUG 3967: Fix SMB signing client bug in trans calls.
+    * BUG 3985: Ensure in msdfs we check for our NetBIOS aliases.
+    * Added lookup_name_smbconf() to be called when looking up names 
+      from smb.conf.  Unqualified names are assumed to be local.
+    * BUG 4003: Fix SMB signing server error in NTcancel reply.
+
+
+o   Gerald (Jerry) Carter <jerry at samba.org>
+    * Fix a few "smbldap_open(): Cannot open when not root" bugs when 
+      viewing or modifying local group membership.
+    * Make LsaLookupSids() reply include the full SID of unresolved 
+      SIDs.
+    * BUG 3957: Prevent returning strange DC IP addresses by zeroing 
+      memory in the SRV hostlist in case there is not an A record for 
+      each SRV name.
+    * BUG 3964: normalize the case of usernames prior to getpwnam() 
+      call in the smbpasswd backend.
+    * Cleanup the 'net ads help join' output and document createupn 
+      and createcomputer options.
+    * Fix a regression in the ldapsam URI syntax.  Allow multiple 
+      LDAP URIs to be grouped by  "".
+
+
+o   William Charles <william at charles.name>
+    * BUG 3959: Remove rand() from SRV RR comparison to fix crashes 
+      in qsort().
+
+
+o   Guenther Deschner <gd at samba.org>
+    * Fix memory leaks in pam_winbind.
+    * Save the logon script path from the info3 in the PAM session 
+      allowing other PAM modules to pick it up from there.
+
+
+o   Volker Lendecke <vl at samba.org>
+    * BUG 3991: Fix problem with user tokens on standalone systems
+      configured to use a username map.
+    * Fix bug where qualified user or group names in smb.conf
+      were assumed to use the '\' character as the winbind separator.
+
+      --------------------------------------------------
+                   ===============================
+                   Release Notes for Samba 3.0.23a
+                             Jul 21, 2006
+                   ===============================
+
+Common bugs fixed in 3.0.23a include:
+
+  o Failure to strip the domain name from groups when 'winbind 
+    use default domain = yes'
+  o Failure in pam_winbind to correctly parse arguments.
+  o Bad token creation of local users on member servers not 
+    running winbindd.
+  o Failure to add users or groups to ACLs using the Windows
+    object picker.
+  o Failure in file serving code when 'kernel oplocks = yes'.
+
+New features in 3.0.23a include:
+
+  o New "createupn" option to "net ads join"
+  o Rewritten Kerberos keytab generation when 'use kerberos 
+    keytab = yes'
+
+
+
+######################################################################
+Changes
+#######
+
+Changes since 3.0.23
+--------------------
+
+commits
+-------
+o   Jeremy Allison <jra at samba.org>
+    * Fix memory leaks in the POSIX locking for for the Linux CIFS fs 
+      client.
+    * Fix memory leaks in the AD schema parsing code.
+    * Fixed bug in interaction with Linux kernel oplocks.
+
+
+o   Gerald (Jerry) Carter <jerry at samba.org>
+    * Rewrite the detection of the correct DES salting principal name
+      when joining an Active Directory Domain.
+    * Rewrite the keytab generation code based on existing SPN, 
+      UPN, and sAMAccountName attributes in the AD machine object.
+    * Cleanup of dead code from idmap_ad.
+    * Fix Winbind 32bit/64bit portability issues.
+    * Fail 'net ads join' and disable the machine account if we cannot 
+      set any SPNs for ourselves.
+    * Make sure to lower case all usernames before calling the create, 
+      delete, or rename hooks.
+    * Preserve case for usernames in passdb
+    * Flush the getpwnam cache after renaming a user
+    * Add become/unbecome root block in _samr_delete_dom_user() when 
+      trying to verify the account's existence.
+    * Changed 'net ads join' syntax for specifying an alternate 
+      OU.  New syntax is createcomputer=<ou path top to bottom>.
+    * Add createupn=[UPN] option to 'net ads join' for setting the
+      userPrincipalName attribute.
+    * Bug 3920: Restore winbind use default domain behavior for domain 
+      groups.  This break local users and 'winbind nested groups' on 
+      domain members.
+
+
+o   Guenther Deschner <gd at samba.org>
+    * Don't clear the cache when starting winbindd in off line mode.
+    * Fix errno reporting in pam_winbind debug messages.
+    * BUG 3937: Fix segv in libnss_wins.so.
+
+
+o   Volker Lendecke <vl at samba.org>
+    * Fix memory leaks in the in error paths out of the CLDAP 
+      request code.
+    * AIX portability fixes for DNS client code.
+    * BUG 3811, 3948: Fix alignment bug in on lsaquery. 
+    * BUG 3949: Fixed authorization issue on domain member 
+      servers not running winbindd.
+
+
+o   Andrew Tridgell <tridge at samba.org>
+    * Fixed a bug which caused resolve_ads() to spin forever if 
+      one of the DCs isn't resolvable in DNS.
+
+
+o   Simo Sorce <idra at samba.org>
+    * Debian packaging fixes.
+
+
+o   Dietrich Streifert <dietrich.streifert at visionet.de>
+    * BUG 3916: Fix error parsing pam_winbind config arguments.
+
+
+Release Notes for older release follow:
+
+      --------------------------------------------------
+
+                   ==============================
+                   Release Notes for Samba 3.0.23
+                            Jul 10, 2006
+                   ==============================
+
+There has been a substantial amount of cleanup work done during 
+this development cycle.  We would like to thank both Coverity 
+(http://www.coverity.com/) and Klocwork (http://www.klocwork.com/)
+for analyzing the Samba source code. As a result, this release 
+includes fixes for over 400 defects.  The coverage was approximately 
+even with over 200 defects reported by each tool.
+
+Thanks very much to those people who spent time testing the 
+release candidates and reported their findings.  We would like to 
+especially thank Thomas Bork <tombork at web.de> for his numerous 
+reports.  We believe that the final release is in much better shape 
+in large part due to his efforts.
+
+New features in 3.0.23 include:
+
+   o Improved 'make test'
+   o New offline mode in winbindd.
+   o New Kerberos support for pam_winbind.so.
+   o New handling of unmapped users and groups. 
+   o New non-root share management tools.
+   o Improved support for local and BUILTIN groups.
+   o Winbind IDMAP integration with RFC2307 schema objects supported 
+     by Windows 2003 R2.
+   o Rewritten 'net ads join' to mimic Windows XP without requiring 
+     administrative rights to join a domain.
+
+
+User and Group changes
+======================
+
+The user and group internal management routines have been 
+rewritten to prevent overlaps of assigned Relative Identifiers 
+(RIDs).  In the past the has been a potential problem when either 
+manually mapping Unix groups with the 'net groupmap' command or 
+when migrating a Windows domain to a Samba domain using 'net rpc 
+vampire'.
+
+Unmapped users are now assigned a SID in the S-1-22-1 domain and 
+unmapped groups are assigned a SID in the S-1-22-2 domain. 
+Previously they were assign a RID within the SAM on the Samba 
+server.  For a DC this would have been under the authority of the 
+domain SID where as on a member server or standalone host, this 
+would have been under the authority of the local SAM (hint: net 
+getlocalsid).
+
+The result is that any unmapped users or groups on an upgraded 
+Samba domain controller may be assigned a new SID.  Because the 
+SID rather than a name is stored in Windows security descriptors, 
+this can cause a user to no longer have access to a resource for 
+example if a file was copied from a Samba file server to a local 
+NTFS partition.  Any files stored on the Samba server itself will 
+continue to be accessible because Unix stores the Unix gid and not 
+the SID for authorization checks.
+
+A further example will help illustrate the change.  Assume that a 
+group named 'developers' exists with a Unix gid of 782 but this 
+user does not exist in Samba's group mapping table. it would be 
+perfectly normal for this group to be appear in an ACL editor.  
+Prior to 3.0.23, the group SID might appear as 
+S-1-5-21-647511796-4126122067-3123570092-2565. With 3.0.23, the 
+group SID would be reported as S-1-22-2-782. Any security 
+descriptors associated with files stored on an NTFS disk partition 
+would not allow access based on the group permissions if the user 
+was not a member of the 
+S-1-5-21-647511796-4126122067-3123570092-2565 group. Because this 
+group SID not reported in a user's token is S-1-22-2-782, Windows 
+would fail the authorization check even though both SIDs in some 
+respect referred to the same Unix group.
+
+The current workaround is to create a manual domain group mapping 
+entry for the group 'developers' to point at the 
+S-1-5-21-647511796-4126122067-3123570092-2565 SID.
+
+
+Passdb Changes
+==============
+
+The "passdb backend" parameter no long accepts multiple backends 
+in a chaining configuration.  Also be aware that the SQL and XML 
+based passdb modules have been removed in this release.  More 
+information of external support for a SQL passdb module can be 
+found at http://pdbsql.sourceforge.net/.
+
+
+Group Mapping Changes
+=====================
+
+The default mapping entries for groups such as "Domain Admins" are 
+no longer created when using an smbpasswd file or a tdbsam passdb 
+backend.  This means that it is necessary to use 'net groupmap 
+add' rather than 'net groupmap modify' to set these entries.  
+This change has no effect on winbindd's IDmap functionality for 
+domain groups.
+
+
+LDAP Changes
+============
+
+There has also been a minor update the Samba LDAP schema file. A 
+substring matching rule has been added to the sambaSID attribute 
+definition.  For OpenLDAP servers, this will require the addition 
+of 'index sambaSID sub' to the slapd.conf configuration file.  It 
+will be necessary to run slapindex after making this change. There 
+has been no change to actual data storage schema.
+
+
+######################################################################
+Changes
+#######
+
+smb.conf changes
+----------------
+
+    Parameter Name                      Description	  Default
+    --------------                      -----------	  -------
+    acl group control			Deprecated	  No
+    add port command			New		  ""
+    change notify timeout		Changed Scope
+    dmapi support			New		  No
+    dos filemode			Modified	  No
+    enable asu support			Changed default	  No
+    enable core files			New               Yes
+    enable privileges			Changed default	  Yes
+    enable rid algorithm		Removed
+    fam change notify			New		  Yes
+    hosts equiv 			Removed
+    host msdfs				Changed default	  Yes
+    msdfs root				Changed default	  Yes
+    open files database hash size	New		  10007
+    passdb expand explicit		Changed default   No
+    strict locking			Changed default	  auto
+    usershare allow guests		New               No
+    usershare max shares		New		  0
+    usershare owner only		New		  Yes
+    usershare path			New		  ${lockdir}
+    usershare prefix allow list		New		  ""
+    usershare prefix deny list		New		  ""
+    usershare template share		New		  ""
+    winbind enum users			Changed default	  No
+    winbind enum groups			Changed default	  No
+    winbind nested groups		Changed default	  Yes
+    winbind offline logon		New		  No
+    winbind refresh tickets		New		  No
+    winbind max idle children		Removed
+    wins partners			Removed
+
+
+Changes since 3.0.22
+--------------------
+
+commits
+-------
+o   Jeremy Allison <jra at samba.org>
+    * Fixes for various Klocwork defect reports.
+    * Cleanup pdb_get_XXX() methods and ensure that a failure
+      to allocate memory for a samu user structure is reported 
+      as a failure to the calling function.
+    * Fix memleak in printing gencache contents.
+    * Fix warnings reported by gcc4 -O6 on 64-bit systems 
+    * Fix naming conflicts with 'net usershare' structures and 
+      Solaris header files.
+    * Fix memleaks on error paths from the ASN.1 parsing code.
+    * Add uid to share_mode_entry structure so we can report who 
+      opened the file.
+    * Ensure we use sys_write in password chats so we're not 
+      interrupted.
+    * Ensure all new rid allocation goes through the same pdb_ldap 
+      interface.
+    * BUG 3308: Stop us returning duplicate mid replies on path 
+      based set-EOF trans2 calls.
+    * Pass RAW-OPLOCK with kernel oplocks off.
+    * Fix bug in OS/2 Warp - it doesn't set the ff_last offset 
+      correctly when doing info level 1 directory scans.
+    * Add Samba4 replacement for timegm() to work on Solaris.
+    * Remove extra add-byte in the trans2 UNIX_BASIC infolevel.
+    * BUG 3592: Ignore a file in the tar output from smbclient if the 
+      read failed (e.g. due to ACCESS_DENIED).  (Based on ideas from
+      Justin Best <justinb at pdxmission.org>).
+    * BUG 3668: Workaround issues in Windows server code with LARGE_READX.
+    * Push/Pull Kerberos principal and realm names to/from UTF-8.
+    * Fix incorrect boolean in assert to make POSIX lock tests
+      pass with CIFSFS.
+    * Don't ever set O_SYNC on open unless "strict sync = yes".
+    * Remove dead printing code.
+    * Allow configurable guest access to Samba's usershare functionality.
+    * BUG 3587: Make byte-range locking tdb self-cleaning.
+    * Ensure every exit error path in the session setup code calls 
+      nt_status_squash().
+    * Use portable wrapper functions instead of seteuid directly in 
+      winbindd.
+    * Make "change notify timeout" a per-share parameter.
+    * Fix regression in SAMBA_4_0's smbtorture DENY tests.
+    * Fix valgrind-spotted issue in BASE-DELETE test.
+    * Fix early termination condition in winbindd when trying to 
+      connect to a remote DC.
+    * Instruct winbindd to ignore fd_set when select() returns -1.
+    * BUG 3779: Make nmbd udp sockets non-blocking to prevent problem
+      with select returning true but no data being available.
+    * Back port talloc_steal() fixes from SAMBA_4_0 (original fixes by 
+      Andrew Tridgell).
+    * BUG 3467: Fix delete on close semantics needed by WinXP Media 
+      Center Ed. for simultaneous recording and playback (thanks to 
+      Jason Qian for the debugging assistance).
+    * BUG 3347: Save the Unix user token used to set the 
+      delete-on-close flag.
+    * Fix parsing of SAMR_Q_CONNECT_ANON.
+    * Add in support for userinfo26 structure and re-enable 
+      userinfo25 
+    * Schannel server fixes.  Fix the credentials chaining across 
+      \netlogon pipe disconnects.
+    * Replace ubqix code in nmbd with an internal tdb.
+    * Fix struct timespec checks in configure.in.
+    * Add in server support for the NetSamLogonEx().
+    * Add support for LsaLookupSids2() and LsaLookupSids3().
+    * Add LsaLookupNames[2-4]().
+    * Add support for 'net usershare'.
+    * BUG 3522: Fix error code return on SMBmkdir(foo) when foo 
+      already exists (thanks to Sandeep Tamhankar).
+    * BUG 3510: Fix 'net rpc join' against a server when 
+      schannel is disabled.
+    * Get rid of poor errno mapping table. Bounce through NTSTATUS 
+      instead.
+    * Check for SeMachineAccountPrivilege when deleting machine 
+      accounts.
+    * Fix a logic bug with multiple oplock contention.
+    * Add the replacements for opendir/readdir etc from SAMBA_4_0.
+      Attempt to fix the broken directory handling in the *BSD.
+    * Allow run time tuning of the locking tdb hash size for
+      very busy servers.
+    * BUG 3642: Ensure we don't call FD_SET on read with 
+      fd == -1.
+    * BUG 3569: Work around linear posix locking issue on AIX
+      which was causing high loads due to the tdb CLEAR_IF_FIRST
+      flag (based on work from William JoJo).
+    * Fix OS/2 directory delete bug found by kukks.
+    * Match the Windows 2003 NTLMSSP signature.
+    * Performance tuning work in core read & write file serving 
+      paths.
+    * Change default to 'strict locking' to better reflect 
+      real world clients.
+    * Fix error return on session setup. Ensure no data blob is 
+      added if the logon call failed so that Windows clients 
+      interpret the NT_STATUS code correctly.
+    * Teach Samba the difference between exclusive and batch 
+      oplocks.
+    * BUG 3592: Ignore a file in a smbtar output if the first 
+      read fails (inspired by Justin Best).
+    * BUG 3668: Workaround Windows bug with LARGE_READX where if 
+      you ask for exactly 64k bytes it returns 0.
+    * BUG 3858: Ensure that all files are removed by a wildcard 
+      delete when 'hide unreadable = yes'.
+    * Fix various issues raised by the Klocwork code analyzer.
+    * Fix nmbd WINS serving bug causing duplicate IPs in the *<1b> 
+      query reply ("enhanced browsing = yes").
+    * Fix SMB signing failures in client tools.
+    * BUG 3909: Avoid EA lookups on MS-DFS links.
+
+
+o   Andrew Bartlett <abartlet at samba.org>
+    * Work around abort() in the OpenLDAP client libs caused by a NULL 
+      msg pointer.
+
+
+o   Timur Bakeyev <timur at com.bat.ru>
+    * BUG 2961: Fix compile warnings for pam_smbpass.
+    * BUG 2746, 3763: Fix compile warnings in pam_winbind.
+
+
+o   Alexander Bokovoy <ab at samba.org>
+    * Fix 'smbcontrol shutdown' messages for nmbd and winbindd.
+    * Fix absolute symlinks in the installbin.sh script.
+
+
+o   Max N. Boyarov <m.boyarov at sam-solutions.net>
+    * Fix crash bug in perfmon daemon example code.
+
+
+o   Nicholas Brealey <nick at brealey.org>
+    * Compile fix for pam_winbind.
+
+
+o   Gerald (Jerry) Carter <jerry at samba.org>
+    * Fix 'make install' problem when building outside source/.
+    * Fix 'net ads join' when the workgroup is set incorrectly in 
+      smb.conf.
+    * Re-add code to include the BUILTIN\Administrators SID when
+      winbindd is not running, but the user's token includes the 
+      Domain Admin SID.  Fixes access problem for managing Services.
+    * Only call the printer publishing calls if 'security = ads'.
+    * Normalize printing keys when deleting.
+    * Only store LANMAN passwords on a change if 'lanman auth = yes'.
+    * Look at the NT password (not lanman one) when determining if 'smbpasswd 
+      -e' should probably for a password.
+    * Default eventlog tdbs to mode 0660 to allow easier access by 
+      BUILTIN\Administrators.
+    * Remove extra call to create_user on member servers without winbindd.
+    * Replace the use of OpenLDAP's ldap_domain2hostlist() for locating 
+      AD DC's with out own DNS SRV queries.
+    * Fix compile error on HP-UX reported by Ryan Novosielski.
+    * Rewrite 'net ads join' to share common code with 'net rpc join' 
+      and behave more like a Windows XP client.
+    * Remove --with-ldapsam option from configure (only used for 
+      backwards compatibility for 2.2 smb.conf files).
+    * Remove 'wins partners' and 'hosts equiv' smb.conf parameters.
+    * Remove rhosts authentication module.
+    * Reimplement 'net ads leave' to disable the machine account in the 
+      domain rather than removing it.
+    * Rewrite of tdbsam file descriptor handling.
+    * Add server affinity support when selecting a remote 
+      domain controller.
+    * Remove chaining of passdb modules.
+    * Generate a local users primary group SID based on his 
+      or her primary Unix group rather than storing the attribute 
+      in the passdb entry.
+    * Default primary group SID to 'Domain Users' if the real Unix 
+      primary group maps to the S-1-22-2 domain.
+    * Refactor memory management in passdb user objects.
+    * RHEL and Fedora packaging fixes.
+    * Implement XcvDataPort() spooler call and supporting 'add 
+      port command'.
+    * BUG 3534: Ignore lines in the username map file with no right 
+      hand list.
+    * Add support for the experimental %(DomainSID) smb.conf 
+      variable.
+    * Add support for parsing SIDs in smb.conf value lists.
+    * Fix vuid allocation in Kerberos SMBsesssetup reply. 
+    * Ensure that local group membership is included in the 
+      getgroups() NSS reply.
+    * Automatically create a BUILTIN\{Administrators,Users} if
+      winbindd is running.
+    * Automatically grant all privileges to members of the local 
+      Administrators group.
+    * Protect against NULL cli_state* pointers in 
+      cli_rpc_pipe_open().
+    * Add a SUBSTR matching rule the the Samba LDAP schema 
+      file for the sambaSID attribute.  This will allow for 
+      Searching group mapping entries within a given domain
+      without reorganizing the directory namespace.  Also 
+      requires 'index sambaSID sub' in slapd.conf.
+    * Fix parsing of 'idmap uid/gid' values that broke when
+      the range included any whitespace.
+    * Support renaming local groups (protect against renaming 
+      BUILTIN groups).
+    * Do not allow the root account to be deleted via MS-RPC.
+    * Fix RID allocation to skip over RIDs that resolve in our
+      own domain (work around upgraded users and groups).
+    * Store the name/ip address combination when we do a reverse 
+      look up in case future forward lookups would fail.
+      Fixes cases where a DC name could not be resolved via 
+      NetBIOS queries,
+    * Allow winbindd to run on standalone servers in order to
+      provide support for local groups.
+    * Deprecate 'acl group control' and replace it with added 
+      functionality to 'dos filemode'.
+    * Ensure that all global memory is freed from pam_winbind 
+      when unloading the shared library (based on work from Arkady 
+      Glabek).
+    * Fix 32-bit/64-bit portability issues between PAM & NSS winbind 
+      libraries and winbindd.
+    * Add defensive checks about create local accounts (i.e. calling
+      'add user script') on domain member servers when winbindd
+      is running but having problems.
+    * Use system provided killproc() in RedHat init scripts for 
+      more robust shutdown.
+    * Fix a crash in the printer publishing code when adding a 
+      new printer via the APW.
+    * Fix broken compile of unsupported smbwrapper utility.
+    * BUG 3905: Fix smbd startup failure caused by a failure to
+      create an NT token for the guest account.
+    * BUG 3908: Fix RPC bind authentication failure which broke
+      user password changes.
+    * Ensure that "net ads join" reports failure correctly if
+      it cannot set the machine account password.
+
+
+o   Mathias Dietz <MDIETZ at de.ibm.com>
+    * EPERM can be a valid return from getting an xattr. 
+      Don't disable if we get it.
+
+
+o   Guenther Deschner <gd at samba.org>
+    * Fix memleaks in winbindd ads searches.
+    * Fix timestamp bug in pam_winbindd which forced users to change
+      passwords prematurely.
+    * Small debug message cleanups.
+    * Small fixes for 'net ads password'.
+    * BUG 3843: Allow to set passwords directly when creating users 
+      via "net rpc user add" 
+    * Add "rpc shell" to the usage text for the net command.
+    * Winbindd user aliases lookup fixes for large domains.
+    * Fix memleak in the CLDAP processing code.
+    * Enable AD features in winbindd's PAM support only when 
+      communicating with an AD domain controller.
+    * Set our internal domains to "online" by default in winbindd.
+    * BUG 3800: Fill the password_policy method in winbindd for 
+      winbindd_passdb.
+    * Fix memory leak when LDAP POSIX attribute queries fail.
+    * Honor the krb5 principal name change (of the new ads join code) 
+      in the kerberized winbind pam_auth.
+    * Correctly handle the case when there is no configuration file 
+      for pam_winbind.
+    * Adding "own-domain" switch to wbinfo which is handy from time 
+      to time.
+    * BUG 3823: Fix in-forest domain trust enumeration in winbindd.
+    * Fix winbindd group enumeration for groups with no members.
+    * Correct "net ads changetrustpw" to use the sAMAccountName.
+    * Fix winbindd in ADS domains by removing code using the 
+      UPN and rely upon the sAMAccountName.
+    * Fix a eDir related memory leak.
+    * Don't try to add the sn attribute twice to an LDAP 
+      inetOrgPerson + samSamAccount entry.
+    * Fix winbind function table typo.
+    * Attempt to send the correct warning from pam_winbind when a password 
+      change was attempted too early.
+    * Don't use cached credentials when changing passwords.
+    * Correctly disallow unauthorized access when logging on with the
+      kerberized pam_winbind and workstation restrictions are in effect.
+    * Save useless round trips in pam_winbind's auth calls.
+    * Make the existence of the /etc/security/pam_winbind.conf file
+      non-critical and fallback to only parse the argv options in that 
+      case.
+    * Add winbind debug class to the main winbindd process.
+    * Be consistent between rpc and ads winbind backend: let the 
+      ads backend query the samlogon cache first as well.
+    * Ignore BUILTIN groups when searching AD for group memberships.
+    * Fix KRB5KDC_ERR_POLICY -> NTSTATUS mapping.
+    * Cleanup credential caches from winbind's linked list.
+    * Fix 'winbindd -n' for new persistent caches.
+    * Fix searching by SID in winbindd.
+    * Add "smbcontrol winbind onlinestatus" for debugging purpose.
+    * Prefer to use the indexed objectCategory attribute (instead of
+      objectClass which is not indexed on AD) in LDAP queries.
+    * Free LDAP result in ads_get_attrname_by_oid().
+    * Prevent unnecessary storing of password in a WINBINDD_CCACHE_ENTRY.
+    * Prevent passwords of winbindd's list of credential caches from 
+      being swapped to disk using mlock().
+    * BUG 3345: Expand the "winbind nss info" to also take "rfc2307" to 
+      support the plain posix attributes LDAP schema from win2k3-r2
+      (based on patches from Howard Wilkinson and Bob Gautier).
+    * Add more robust code for fallback when lookup_usergroups() fails.
+    * Fix 'net rpc join' for winbindd running on a Samba DC.
+    * Add help text for new 'net rpc audit' utility.
+    * Add net ads search SID.
+    * samrQueryDomainInfo level 5 should return the domain name, not our 
+      NetBIOS name when we are a DC.
+    * Add some more client rpc for the querydominfo calls (from samba4 idl).
+    * Process all the supported info levels in the samr_query_domain_info2 
+      call.
+    * Wrap the samr_query_domain_info2() call around 
+      samr_query_domain_info().
+    * Fix segv in smbctool.
+    * Honor the time_offset also when verifying Kerberos tickets.
+    * Prevent unnecessary longstanding LDAP connection to eDirectory.
+    * Fix segv in smbspool.
+    * BUG 1914: Allow to store 24 password history entries in ldapsam.
+    * Enhancements to various commands in rpcclient 
+    * Don't force 'Administrator' to change an expired password on 
+      logon.
+    * Add support for offline mode in winbindd.
+    * Provide support in pam_winbind for initializing a user's 
+      ticket cache.
+    * Implement samr_chgpasswd_user3 server-side.
+    * Make pam_winbind more robust when detecting domain users.
+    * Add client side support for SAMR_GET_USRDOM_PWINFO.
+    * Re-enable strict checking on C++ reserved keywords since Heimdal 
+      0.7.2 has been released.
+    * Allow renaming of machine accounts in a Samba domain.
+    * BUG 3539: Let winbindd try to obtain the gecos field from 
+      the msSFU30Gecos attribute when "winbind nss info = sfu" is 
+      set. 
+    * Correctly handle acb_info/acct_flags as uint32 not as uint16.
+    * Return the real ACB-flags in the SamLogon() reply.
+    * Some client side cleanup for the samr set security object 
+      functions.
+    * Make sure we always reset the userAccountControl bits when 
+      re-joining (net ads join) with an existing account.
+    * Document some more MSV1_0 bits and their behavior.
+    * Only set the last rebind timestamp when we did rebind 
+      after a update LDAP operation to avoid the ldap replication 
+      sleep period.
+    * Fix incorrect error checking in winbindd for domains with 
+      no trusts.
+    * Consolidate the parsing of the Krb5 PAC and NET_USER_INFO3 
+      structure.
+    * Work around crash bug in MIT krb5 libs when reading a 
+      keytab file.  Stop trying to decrypt a ticket as soon as 
+      we have a clear indication that the ticket is bad.
+    * Merge DCERPC_FAULT constants from the SAMBA_4_0 tree.
+    * Adding client side samr querygroup infolevels 2 & 5.
+    * Make smbpasswd -a root work for eDirectory where there 
+      is no "account" structural objectclass.
+    * Make sure we only send out a CLDAP request (net ads) to 
+      an connected AD server.
+    * Fix a broken LDAP search filter when looking for groups.
+    * Add in-tree version of iniparser library from 
+      http://ndevilla.free.fr/iniparser/ for use by pam_winbind
+      (rather than linking in loadparm.c).  Settings are now stored
+      in /etc/security/pam_winbind.conf.
+    * Fix different extended_dn handling in adssearch.pl
+      (Thanks to Frederic Brin at Novell).
+    * Fix a memleak in winbindd's credentials cache.
+    * Protect against crashes in CLDAP request processing.
+    * Remove incomplete DfsEnum() info level to avoid an smbd crash.
+
+
+o   Aleksey Fedoseev <fedoseev at ru.ibm.com>
+    * Fix parameter type for 'acl compatibility'.
+    * Fixes for msgtest torture tool.
+    * Fix crash bug in the file locking code.
+
+
+o   Arek Glabek <aglabek at centeris.com>
+    *  Fix parsing error on input parameters in eventlogadm.
+
+
+o   Paul Green <paulg at samba.org>
+    * Properly rebuild time limit on systems with executable extensions.
+    * Fix build on platforms that do not support shared libs.
+    * Remove dead code in the auth_script module. 
+
+
+o   Bjoern Jacke <samba at j3e.de>.
+    * Fix DMAPI compile failures on AIX and True64.
+    * Fix AIX PIC suffix (use .o instead of .po).
+    * Fall back to less-preferred clocks until we find one that we 
+      can use if clock_gmtime() is not available at run-time.
+    * Fix EA support on AIX platforms.
+    * Automatically disable file shares with no explicit path set.
+    * Remove the local hack to set the RO bit on directories in 
+      user profiles when profile acls = yes.  Rely on EAs instead.
+    * Compile fixes for Solaris LDAP client libs.
+    * Add DMAPI/XDSM support for AIX.
+    * Find JFS DMAPI libs on Linux when only they are available.
+
+
+o   William Jojo <jojowil at hvcc.edu>
+    * Fixes for the winbind NSS library on AIX.
+    * Fix VFS builds on AIX platforms.
+    * Fixes for the AIX version of libnss_winbind.so
+
+
+o   Leonid Kabanov <lkabanov at mail.ru> 
+    * BUG 3711: Shell portability fixes for 'make test'.
+
+
+o   Volker Lendecke <vl at samba.org>
+    * Fixes for various Klocwork defect reports.
+    * Fixes for various Coverity defect reports.
+    * BUG 3848: Fix WinXP join error in a Samba domain using ldapsam.
+    * Fix more potential seg-faults when something on our way to a 
+      DC connection fails.
+    * Never fall back to using the IP address for a DC's name in RPC 
+      connections.
+    * Implement recycle:subdir_mode.
+    * Activate RPC-AUTHCONTEXT in "make test".
+    * Portability fixes for 'make test'.
+    * Correctly set the group RID in init_sam_from_buffer.
+    * Fix missing prompt in smbclient.
+    * Return correct error code upon success from _net_srv_pwset().
+    * Fix Windows XP joins to a Samba domain.
+    * Fix 'valid users = +unixgroup' which was failing with smbpasswd
+      when mapped to a non-algorithmic rid.
+    * Fix regression which upper-cased machine names passed to the
+      'add machine script'.
+    * Correct parsing error in parse_net.c for user's with no group
+      membership.
+    * Fix off by one error in client SPNEGO code and other klocwork
+      bug fixes.
+    * Memory leak fixes in 'net sam'.
+    * BUG 3720: Fix uninitialized error return variable.
+    * Default "passdb expand explicit" to no.
+    * BUG 3741: Re-enable algorithmic SID mapping in one critical place.
+    * Fix user NT token creation when utilizing a username map.
+    * More coverity fixes.
+    * Fix a VUID bug in 'security = share'.
+    * Correctly fill in the gid for local users.
+    * Fix some warnings on True64.
+    * Add special close handling for fake files.
+    * BUG 3788: Fix nss_winbind's getgrouplist() call on AIX.
+    * BUG 3435: Fix 'msdfs root = yes' in [homes].
+    * Instruct winbindd to find a trusted DC on its own when running on 
+      a Samba DC.
+    * Fix segv in child winbindd processes caused by a failed tconX 
+      to the DC.
+    * Dynamically compute the maximum password age based no the 
+      last change time rather than reading the must change time 
+      from the passdb record.
+    * Rewrite mechanisms for handling lookup_{name,sid} resolution.
+    * Assign unmapped users to the S-1-22-1 domain and unmapped 
+      groups to the S-1-22-2 domain
+    * Disable algorithmic mapping for RIDs in tdbsam & ldapsam
+    * Remove sql passdb backends.
+    * Implement rpccli_samr_set_domain_info()
+    * Add initial support for 'net sam' command.
+    * BUG 2413: Remove anonymous connections in 'net rpc info'.
+    * Implement asynchronous support for trans2 calls.
+    * Make smbclient -L use RPC to list shares, fall back to RAP.
+    * Ensure that the global SAM SID is initialized before any
+      dependent routines are called.
+    * Enhance consistency checks on local configuration when joining
+      a domain.
+    * Fix a memleak in the server registry code for enumeration 
+      shares.
+    * Fix an invalid munlock() call in winbindd's credentials cache.
+    * Fix compile warnings when passing NULL to snprintf().
+    * BUG 3915: Fall back to a pure unix user with S-1-22 SIDs in the
+      token in case anything weird is going on with the 'force user'.
+    * CVE-2006-3403: Fix minor memory exhaustion DoS in smbd.
+
+
+o   Derrell Lipman <derrell at samba.org>
+    [libsmbclient]
+    * BUG 3814: Only set the DFS capability flag in client requests
+      if the share is a DFS root.
+    * Fix bug causing previous settings to be re-initialized 
+      when parsing new configuration files.
+    * BUG 3446: Don't ignore the authentication domain when parsing 
+      the SMB URI.
+    * Fix cli_setpathinfo() to actually do what it's supposed to.
+    * Fix libsmbclient to make correct use of the new "one connection
+      per server feature".
+
+
+o   Jason Mader <jason at ncac.gwu.edu>
+    * Numerous compiler warning fixes.
+
+
+o   John E. Malmberg <wb8tyw at qsl.net>
+    * Make smbldap obey config tests.
+
+
+o   Jim McDonough <jmcd at us.ibm.com>
+    * Fixes for 'make test' on AIX.
+    * Ensure we do a wildcard search for SID's starting with the global SAM 
+      sid, not an exact search (from John Janosik).
+    * Adapt smbclient fix to smbtree to enable long share names.
+    * Prevent machines and users with no home directory from 
+      getting the previous entries home path when migrating via 
+      'net rpc vampire' (based on a patch from Richard Renard).
+    * Remove hard-coded LDIF names when dumping a migrated 
+      domain's users and groups.
+    * BUG 1374: Can't join an OU with name that contains '#'.
+
+
+o   Stefan Metzmacher <metze at samba.org>
+    * Add more tests to 'make test'.
+    * Try to make timelimit.c more portable.
+    * Fix linking of smbmount tools with --enable-socket-wrapper.
+    * Pass 'target:samba3=yes' to samba4's smbtorture when running 
+      samba3's make test.
+    * Miscellaneous fixes for 'make test'.
+    * Add improved support for 'make test' including making 
+      use of smbtorture from SAMBA_4_0.
+    * Add --no-process-group to all server programs 
+      (e.g. timelimit 20000 bin/nmbd -F -S --no-process-group).
+    * Add configure tests --with-selftest-prefix=/tmp/samba-test
+
+
+o   Lars Müller <lmuelle at samba.org>
+    * Fix lock calls in the python tdb bindings.
+    * Add -k switch to tdbdump for accessing a single key.
+    * Debian packaging fixes.
+    * Add -t|--password-from-stdin option to pdbedit as we had 
+      with Samba 2.2.
+    * Various minor fixes to install scripts used by 'make install'.
+
+
+o   James Peach <jpeach at sgi.com>
+    * Ensure smbclient always prompts on standard output when in
+      interactive mode.
+    * BUG 3801, 3805: Fix MIPSPro compiler warnings on IRIX.
+    * Introduce command line options to set the remainder of the 
+      parameters in dynconfig.c.
+    * Avoid pulling in -lpthreads caused by -lrt.
+    * Fix build failures on IRIX 6.4 due to DMAPI support.
+    * Isolate the slow CLOCK_REALTIME message in the profiling code.
+    * Correct comparison logic so that libunwind can be correctly detected.
+    * Implement a "stacktrace" smbcontrol option using libunwind's remote
+      stack tracing support (ia64 only).
+    * Use dynamic buffers in the IRIX nsswitch module to prevent truncation
+      of long group lists.
+    * New autoconf macro to test for sysconf variables.
+    * Change profiling data macros to use stack variables rather than
+      globals. This catches mismatched start/end calls and removes
+      the need for special nested profiling calls.
+    * Rewrite AC_LIBTESTFUNC so that it works like the callers
+      of it expect.
+    * Use clock_gettime for profiling timstamps if it is available. Use
+      the fastest clock available on uniprocessors.
+    * Preserve errno in fcntl lock wrappers.
+    * Initialize our saved uid and gid so that we can tell when we 
+      created the profiling shmem segment and don't bogusly refuse to 
+      look at it.
+    * Add a new option "enable core files" which can be used to disable 
+      automatic core file dumping. 
+    * Update our internal copy of popt to that distributed with the RPM 
+      4.2 source code.
+    * Add support for FAM for file change notification.
+    * Disable sendfile if the 'write cache;' has been enabled.
+    * Refactor capability interface from being IRIX-specific to 
+      using only the POSIX interface.
+    * Consolidate core dumping code to aid in debugging.
+    * Add support for libunwind to generating a backtrace.
+    * BUG 3490: Don't test for ldap or krb5 libs if --without-ldap
+      and --without-ads are specified.
+    * Allow the user to set winbind nss timeouts in seconds on IRIX.
+    * Set the FILE_STATUS_OFFLINE bit by observing the events 
+      a DMAPI-based HSM is interested in.
+
+
+o   Tim Potter <tpot at samba.org>
+    * Build janitorial duties.
+    * BUG 3725: Put references to $PICFLAGS in quotes.
+
+
+o   Aruna Prabakar <aruna.prabakar at hp.com>
+    * Show -W option in smbpasswd usage text.
+
+
+o   ISHIKAWA Tomonori <toishika at fsi.co.jp>
+    * BUG 2715: Fix nmbd datagram comment buffer size for multibyte 
+      character strings
+
+
+o   Andreas Schwab
+    * Correct syntax error in aclocal.m4.
+
+
+o   Simo Sorce <idra at samba.org>
+    * Pam modules install fix.
+    * Allow "net changesecretpw" to accept a password via stdin.
+    * Implement 'net setdomainsid' command.
+    * Ensure that sid -> group conversion are done as root.
+    * BUG 3413: Sanity check for existence of 'ldap admin 
+      dn' before setting a password in secrets.tdb (based on
+      work by William Jojo).
+    * New revision of the snprintf replace code.
+    * Set the correct sid type when looking up a gid.
+
+
+o   Todd Stecher <tstecher at isilon.com>
+    * Add TCP fallback for our implementation of the CHANGEPW 
+      kpasswd calls.
+
+
+o   Ronan Waide <waider at waider.ie>
+    * Add 'wbinfo -i' functionality to exercise winbindd's getpwnam() 
+      functionality.
+
+
+o   Shlomi Yaakobovich <Shlomi at exanet.com>
+    * Fix for machine password time_t overflow.
+
+
+      --------------------------------------------------
+                   ==============================
+                   Release Notes for Samba 3.0.22
+                            Mar 30, 2006
+                   ==============================
+
+This is a security release of Samba. The Samba 3.0.21 release 
+series (including the patch releases a through c) has been 
+discovered to expose the clear text of the server's machine 
+account credentials in the winbind log files when the log 
+level is set to 5 or higher.  This defect has been assigned 
+the CVE number CAN-2006-1059.
+
+Summary
+=======
+
+The machine trust account password is the secret shared
+between a domain controller and a specific member server.
+Access to the member server machine credentials allows
+an attacker to impersonate the server in the domain and 
+gain access to additional information regarding domain 
+users and groups.
+
+The winbindd daemon included in Samba 3.0.21 and subsequent
+patch releases (3.0.21a-c) writes the clear text of server's
+machine credentials to its log file at level 5.  The winbindd
+log files are world readable by default and often log files
+are requested on open mailing lists as tools used to debug
+server misconfigurations.
+
+This affects servers configured to use domain or ads security
+and possibly Samba domain controllers as well (if configured
+to use winbindd).
+
+=======
+
+      --------------------------------------------------
+
+                   ===============================
+                   Release Notes for Samba 3.0.21c
+                              Feb 24, 2006
+                   ===============================
+
+Common bugs fixed in 3.0.21c include:
+
+  o Access checks when deleting printer driver meta-data.
+  o Several non-default combinations schannel and SPNEGO support.
+  o Password changes with NT4 and Win2k pre-SP4 clients.
+  o High load issues on IRIX caused by a bug when interfacing 
+    with kernel oplocks.
+
+
+######################################################################
+Changes
+#######
+
+Changes since 3.0.21b
+---------------------
+
+commits
+-------
+o   Michael Adam <ma at SerNet.DE>
+    * Add popt to the include path for examples/VFS.
+
+
+o   Jeremy Allison <jra at samba.org>
+    * Fix bug in the USC2 macros on big-endian CPUs.
+    * Filter deleted oplocks from the output of smbstatus.
+    * Remove invalid test check_for_pipe().
+    * BUG 3515: Fix kernel oplock support on IRIX.
+    * BUG 3522: Fix return value for mkdir request when the directory
+      already exists.
+    * BUG 3526: Add missing FindNext info levels (diagnosed by Corinna 
+      Vinschen).
+    * BUG 3330: Fix username parsing in Kerberos PAC (based on work 
+      by Guenther).
+    * BUG 3512: Fix cause of "use spnego=no" and "server signing=auto" 
+      resulting in a client disconnect after negprot.
+    * BUG 3510: Fix 'net join' against a server with client schannel 
+      disabled.
+    * Fix negprot bug causing a 2k client with cached domain 
+      credentials to refuse to connect to a standalone Samba host.
+    * Ensure that the correct error is checked when encountering a 
+      socket error (fixes crashes in winbindd).
+
+
+o   Andrew Bartlett <abartlet at samba.org>
+    * Fix domain joins from NT4 clients and password changes.
+
+
+o   Richard Bollinger <rabollinger at gmail.com>.
+    * Compile fix in pdbedit.
+
+
+o   Gerald (Jerry) Carter <jerry at samba.org>
+    * Break RHEL/Fedora packaging out to include a samba-docs rpm.
+    * Remove use of /var/cache/samba from RHEL/Fedora packaging.
+    * Fix bug in loadparm.c that caused builtin services to be also
+      listed as external services (e.g. Spooler, NETLOGON, etc..).
+    * Fix bug in the samr dispinfo enumeration code.
+    * Add earlier checks to deny deleting a printer driver meta-data.
+
+
+o   Guenther Deschner <gd at samba.org>
+    * Add Account Policy LDAP attributes for eDirectory schema.
+
+
+o   William JoJo <jojowil at hvcc.edu>
+    * BUG 1870: Make nmblookup do a node status on all IP's when 
+      requested.
+    * BUG 2353: Fix clitar -F processing.
+
+
+o   Volker Lendecke <vl at samba.org>
+    * Fix the build for --with-aio-support.
+    * Fix remote password changing if password must change is set.
+    * Fix rpcclient to obey the -W parameter.
+    * Fix segv in smbmount and the profiles tool.
+    * Fix typo in pdbedit help text (reported by Karolin Seeger).
+
+
+o   Vladimir Lettiev
+    * Honour the $(DESTDIR) Makefile variable when installing 
+      Python extensions.
+
+
+o   Jason Mader <jason at ncac.gwu.edu>
+    * Compiler warning fixes.
+
+
+o   Lars Müller <lmuelle at samba.org>
+    * Fix python build with older python versions.
+    * Update dhcp.conf files in Debian packaging
+    * SWAT welcome file updates
+    * Compiler warning fixes.
+    * Add .2 to the SONAME as version suffix if we link the nss 
+      modules on linux.
+    * Add -t|--password-from-stdin option to pdbedit.
+
+
+o   James Peach <jpeach at sgi.com>
+    * Continue not enabling valgrind on 64-bit Linux.
+
+
+o   Tim Potter <tpot at samba.org>
+    * Remove unused #defines.
+
+
+o   Simo Sorce <idra at samba.org>
+    * Debian packaging updates.
+
+
+o   Qiao Yang <qyang at stbernard.com>
+    * Make sure to refresh the timestamp on entries in the failed 
+      connection code in winbindd.
+
+
+      --------------------------------------------------
+                   ===============================
+                   Release Notes for Samba 3.0.21b
+                              Jan 30, 2006
+                   ===============================
+
+Common bugs fixed in 3.0.21b include:
+
+  o Server crashes in smbd.
+  o Compile issues on 64-bit platforms.
+  o Crash bugs on big-endian systems.
+  o Packaging fixes for RHEL/Fedora, Solaris, & Debian.
+  o Over 30 bugzilla reports closed.
+
+
+######################################################################
+Changes
+#######
+
+Changes since 3.0.21a
+---------------------
+
+commits
+-------
+o   Jeremy Allison <jra at samba.org>
+    * Fix the SAMR cache across handles opens and closes.
+    * Re-add the talloc_describe_all() function for reporting pool 
+      usage.
+    * Merge talloc license change from Samba 4.
+    * Fix 64-bit compile warnings reported by gcc.
+    * Add the share path into the sharemode db. 
+    * Consistency fixes: Remove use of uint8_t -> uint8.
+    * BUG 3346: Fix crash bug in big-endian boxes by linearizing 
+      structure when passing through the messaging API.
+    * BUG 3421: Fix segv in the Kerberos key tab code (Thanks to 
+      Luke Deller).
+    * Force smbd to exit if the guest account internal setup fails.
+    * BUG 3419: vfs_full_audit fixes for multiple connections.
+    * Ensure SWAT lists running processes.
+    * Fix NTLMv2 interoperability bug between Samba servers.
+    * Oplock break logic fixes.
+
+
+o   Andrew Bartlett <abartlet at samba.org>
+    * BUG 3401: Fix crash bug caused by incorrect handling of weak 
+      session keys.  Based on original patch from Yau Lam Yiu.
+
+
+o   Alexander Bokovoy <ab at samba.org>
+    * BUG 3397: Add USER_INFO_9 for SMS 2003 support (ported from 
+      Samba TNG code).
+
+
+o   Stefan Burkei <stefan at burkei.de>
+    * BUG 3248: When doing auth_crap authentication use the client 
+      given workstation name not our own.
+
+
+o   Gerald (Jerry) Carter <jerry at samba.org>
+    * Fixing net rpc registry enumerate from overwriting the open 
+      subkey handle.
+    * BUG 3380: fix crash when changing printer drivers.
+    * BUG 3391: ensure we can lookup account policies for failed 
+      logons.
+    * Adding query/set ops for security descriptors on services.
+    * BUG 3329: Solaris packaging fixes.
+    * Better formatting for smbstatus output (based on patch from
+      Adam Neilson).
+    * Hook the max connections spin box in the share properties 
+      MMC plug-in dialog to the 'max connections' smb.conf parameter
+      and the 'modify share command' option.
+    * Work around building libnss_winbind.so on Solaris when 
+      --enable-developer is specified.
+    * Add vendor patch level string to VERSION.
+    * Consolidate packaging for RHEL4 and Fedora based on initial
+      work by jht.  
+
+
+o   Albert Chin <@thewrittenword.com>
+    * BUG 3374: Build failures on True64.
+
+
+o   Guenther Deschner <gd at samba.org>
+    * Fill in samr_get_dom_pwinfo based on Samba4.
+    * Fill in the clientside TRUSTED_DOMAIN_INFO_EX query.
+    * Fixes for adssearch.pl example script.
+    * Prevent 'net rpc' from dumping clear text password at high log 
+      levels unless built with DEBUG_PASSWORD.
+    * Fix 'net ads user add' with a Windows 2003 SP1 DC.
+    * Fix python build.
+    * Fix segfault in pdb_nds.c.
+    * Don't write null sid mappings into the winbindd_cache.tdb.
+    * Save sid_to_name lookup result in winbindd already after doing 
+      a successful name_to_sid.
+    * BUG 3390: Fix segfault in "net rpc vampire|samdump".
+    * BUG 1524, 3205: Support changing expired passwords in 
+      pam_winbindd.
+    * Fix netfileenum returning WERR_BUF_TOO_SMALL in rpcclient.
+    * BUG 3264: Allow idmap_ad to load as 'ad'.  Cleanup the way 
+      idmap modules are build and loaded, idmap_rid now will have 
+      to be loaded without prefix, just "rid".
+    * Prevent cli_krb5_get_ticket of getting into an infinite loop. 
+
+
+o   Andrew Esh <Andrew_Esh at adaptec.com>
+    * BUG 1061: Fix nmbd to correctly the path to an lmhosts files 
+      specified on the command line with -H.
+
+
+o   SATOH Fumiyasu <fumiya at samba.gr.jp>
+    * End profile fixes.
+    * BUG 3348: Don't assume owning sticky bit directory means 
+      write access allowed.
+    * Fix double free in on failure path in POSIX acl code.
+
+
+o   Andriy Gapon <avg at icyb.net.ua>
+    * BUG 3458: Fix crash bug in smbd and winbindd caused by 
+      accessing freed memory.
+
+
 o   Björn Jacke <bj at sernet.de>
-    * Add AC_TRY_RUN_STRICT support for Sun Studio compiler.
+    * Configure check for Tru64 EA functions (not yet implemented).
+    * Find Tru64 AIO lib in configure.
+    * Cut-n-paste fixes in configure.in.
 
 
+o   John Janosik <jpjanosi at us.ibm.com>
+    * IBM Tivoli Directory Server schema updates.
+
+
+o   Michael James <michael at james.st>
+    * sid2string fix in adssearch.pl.
+
+
+o   William JoJo <jojowil at hvcc.edu>
+    * BUG 3340: Prevent automatic inclusion of AIO support on AIX.
+    * BUG 3389: Failures on AIX in linking smbd when the symbol 
+      table for ld exceeds 65536 bytes.
+    * Add -W to smbpassword so that the ldap admin dn password does
+      not have to be specified on the command line.
+    * BUG 3408: Fix for external password change programs on AIX.
+    * BUG 1779: 64-bit compile fixes.
+
+
+o   Martin Koeppe <mkoeppe at gmx.de>
+    * BUG 3287: Match SFU behavior for dev/inode numbers.
+
+
 o   Volker Lendecke <vl at samba.org>
-    * Add support for async SMB requests.
-    * Add transactions to the dbwrap API.
-    * Add "net idmap aclmapset".
-    * Change default bufsize to 512k.
-    * Fix Coverity IDs 473, 481, 506, 507, 525, 526, 527, 528, 529, 530, 537,
-      538, 547, 548, 551, 552, 553, 554, 555, 557, 558, 559, 563, 564, 567.
-      ... and half a ton more
-    * Fix some warnings in the tsmsm module.
-    * Fix warnings.
-    * BUG 4901: Fix "ldap passwd sync = only".
-    * BUG 5334: Fix download of empty files using smbclient.
-    * BUG 5307: Fix notify changes.
-    * BUG 5317: Fix debug output in domain_client_validate.
-    * BUG 5338: Fix format string issue in rpcclient.
-    * Convert account_pol.tdb and share_info.tdb to dbwrap.
-    * Protect group_mapping.tdb ops with transactions.
-    * BUG 5366: "passwd program" should work on Solaris 10 again now.
-    * A level 25 setuserinfo does change the pwdlastset, fixes XP joins.
-    * BUG 5350: A Samba DC trusting NT4 should do an anon session setup.
-    * BUG 5375: Fix a segfault with "security=share" and [in]valid users.
-    * Fix printing from DOS clients -- introduced by inbuf/outbuf rewrite.
-    * Fix wbinfo -a trusted\\user%password on a Samba DC with trusts.
-    * BUG 5341: Fix async smbclient get command on Solaris.
-    * Make winbind use NetSamLogonEx when possible.
-    * Merge fixes in the 3-0-ctdb cluster code.
-    * Fix a segfault in snprintf replacement code.
-    * Fix a regression for wbinfo --group-info if winbind separator is set
+    * BUG 3291: Fix valgrind error in client connection code.
+    * BUG 3292: Prevent smbclient from spinning if server terminates
+      connection.
+    * BUG 3293: Use SMBecho instead of chkpath to keep a smbclient 
+      connection alive smbclient.
+    * Add lookupname to rpcclient query_user as a fallback, we now 
+      accept both rid and username.
+    * Introduce yet another copy of the string_sub function: 
+      talloc_string_sub use by AFS token code in winbindd.
+    * BUG 3351: pdb_mysql again overwrites password fields.
+    * BUG 3384: Fix segv in tdbtool.
+    * Use the same CFLAGS for generating the pch as we use to 
+      actually compile.
+    * Correct typo when compiling the vfs_catia module.
+    * Fix automatic recreation of a new tdb sam file.
 
 
 o   Derrell Lipman <derrell at samba.org>
-    * Check for NULL pointers before dereferencing them.
-    * Fix use of AuthDataWithContext capability.
+    [libsmbclient]
+    * Fix parsing of file times (w_time and m_time were reversed).
+    * Add additional libsmbclient test programs.
+    * BUG 3336: Load networks interfaces in libsmbcliebt after parsing 
+      the configuration files.
+    * Avoid doing a NetBIOS name query for each server and workgroup 
+      enumeration call.
+    * Do not open connection when only looking for cached connection.
+    * BUG 2651: Add option to log debug messages to stderr instead 
+      of stdout.
+    * Added flag to not request authentication information.
+    * Enhancements to smbwrapper example code.
+    * Replace smbwrapper call to dlopen(/lib/libc...) with direct 
+      use of RTLD_NEXT.
 
 
+o   David May <mayd at cygnus.uwa.edu.au>
+    * BUG 3329: Shell scripting portability fixes on 'make test'.
+
+
+o   Tony Mountifield <tony at softins.co.uk>
+    * BUG 3327: fix bad access to gencache.tdb after fork() in 
+      smbmount.
+
+
+o   Lars Müller <lmuelle at samba.org>
+    * BUG 3264: Support backwards compatible setups using 
+      'idmap backend = idmap_rid'.
+    * Add %w macro for the winbind separator.
+    * Convert net command to use stderr for error messages rather 
+      than stdout.
+
+
+o   James Peach <jpeach at sgi.com>
+    * Portability fixes in LDAP code.  Don't use non-static array 
+      initializers.
+    * Support the TCP_FASTACK socket option if it is available. 
+    * Tell the MIPSPro compiler to push DEBUG calls out of line.
+
+
+o   Makr Proehl <m.proehl at science-computing.de>
+    * BUG 1336: Print the server role when calling testparm in 
+      non-verbose mode.
+
+
+o   Simo Sorce <idra at samba.org>
+    * Crackcheck utility enhancement based on patch sent by 
+      Tom Geissler.
+    * BUG 3405: Fix segv in vfs_recycle module on platforms wither 
+      mode_t is not 32-bits.
+
+
+o   John Terpstra <jht at samba.org>
+    * RHEL/Fedora spec file patches.
+
+
+      --------------------------------------------------
+                   ===============================
+                   Release Notes for Samba 3.0.21a
+                              Dec 30, 2005
+                   ===============================
+
+Common bugs fixed in 3.0.21a include:
+
+  o Deadlocks when multiple users access an oplocked file 
+    concurrently
+
+
+######################################################################
+Changes
+#######
+
+Changes since 3.0.21
+--------------------
+
+commits
+-------
+o   Gerald (Jerry) Carter <jerry at samba.org>
+    * RedHat 9 packaging Fixes.
+
+
+o   Guenther Deschner <gd at samba.org>
+    * eDirectory schema syntax fixes.
+
+
+o   Volker Lendecke <vl at samba.org>
+    * BUG 3349: Deadlock caused logic error in oplock code.
+
+      --------------------------------------------------
+                   ==============================
+                   Release Notes for Samba 3.0.21
+                            Dec 20, 2005
+                   ==============================
+
+Common bugs fixed in 3.0.21 include:
+
+  o Missing groups in a user's token when logging in via Kerberos
+  o Incompatibilities with newer MS Windows hotfixes and 
+    embedded OS platforms
+  o Portability and crash bugs.
+  o Performance issues in winbindd.
+
+New features introduced in Samba 3.0.21 include:
+
+  o Complete NTLMv2 support by consolidating authentication
+    mechanism used at the CIFS and RPC layers.
+  o The capability to manage Unix services using the Win32 
+    Service Control API.
+  o The capability to view external Unix log files via the
+    Microsoft Event Viewer.
+  o New libmsrpc share library for application developers.
+  o Rewrite of CIFS oplock implementation.
+  o Performance Counter external daemon.
+  o Winbindd auto-detection query methods when communicating with
+    a domain controller.
+  o The ability to enumerate long share names in libsmbclient 
+    applications.
+
+
+######################################################################
+Changes
+#######
+
+smb.conf changes
+----------------
+
+    Parameter Name                      Action
+    --------------                      ------
+    dfree cache time			New
+    dfree command			Per share
+    eventlog list			New
+    iprint server			New
+    map read only			New
+    passdb expand explicit		New
+    rename user script			New
+    reset on zero vc			New
+    svcctl list 			Renamed from 'enable svcctl'
+
+
+
+Changes since 3.0.20b
+---------------------
+
+o   Jeremy Allison <jra at samba.org>
+    * BUG 1828: Fixed SPNEGO issues with PocketPC clients.
+    * Added 'map readonly' parameter.
+    * BUG 3166: Fix crash in libsmbclient if the $HOME environment is
+      not defined.
+    * Maintain schannel client session keys in volatile 
+      $(privatedir)/schannel_store.tdb.
+    * BUG 2769: Ensure we mangle filenames ending in a space
+    * Catch corner case of renaming a symlinked directory into 
+      itself
+    * Ensure that smb.conf requests for hidden files are honored, 
+      even when DOS attributes are stored in EA's
+    * Add new auth method "auth_script" for calling an external 
+      program
+    * BUG 2152: Fix for mangled filenames when the client does 
+      support long filenames
+    * Rewritten implementation of client and server DCE/RPC infrastructure 
+    * BUG 3192: Adds a "dfree cache time" parameter.
+    * Fix acl evaluation bug found by Marc Cousin.  Only evaluate 
+      the S_IWGRP mask in the absence of a POSIX ACL.
+    * Remove use of 'long long' in libsmbclient code.
+    * Ensure the new canonicalize_servicename() in name/snum hash 
+      is multi-byte safe.
+    * BUG 2922: Integration of FreeBSD AIO patches from Timur 
+      Bakeyev.
+    * BUG 3216: Put directory opens into the share mode db so we 
+      can treat them similarly to file opens (delete on close, 
+      share mode violations etc.).
+    * Fix bug in name mangling code when case sensitivity is enabled.
+    * Remove external dependencies from the sharemodes library.
+    * BUG 3212: Ignore bogus OS/2 set EA values on trans2 calls.
+    * Don't misinterpret wild card characters in file names on disk
+      as they are actually valid characters.
+    * BUG 3223: Fix bug in account policy management when 
+      account_pol.tdb settings have been migrating to an LDAP 
+      backend.
+    * Allow the hash size of the tdb open (locking) database to be 
+      set in local.h.
+    * Fix error code returns on client spoolss code.
+    * Remove unneeded strncpy use.
+    * Fix uninitialized variables warnings.
+    * Cleanup smbcacls security descriptor parsing and error codes.
+    * BUG 3224: Correctly use machine_account_name and client_name 
+      when doing netlogon credential setup.  Fixes winbindd running 
+      on a Samba PDC.
+    * Backport Samba 4 time zone handling.
+    * Fix core dump if setmntent() returns NULL.
+    * Replace old crc32 code with one from the FreeBSD tree.
+    * Filter stored DOS attributes by SAMBA_ATTRIBUTES_MASK.
+    * Remove #define of close -> close_fn macro in libsmbclient.
+    * Return early if -1 returned from *BSD EA call (reported by 
+      Timur).
+    * Name space cleanup by marking local functions static.
+    * Move samr enumeration cache from per handle basis to a shared 
+      cache.
+    * BUG 3274: Fix invalid smbclient qpath_basic() queries against 
+      OS/2 servers (based on patch from Guenter Kukkukk).
+    * Ensure default applies to new files (reported by Thomas 
+      Neumann).
+    * BUG 3293: Use SMBecho to testing the server in client rather 
+      than SMBchkpath.
+    * Merge talloc fixes from Samba 4 branch.
+    * Add support DCE/RPC cancel operation.
+    * Don't reset attrs to zero in EA get.  Fixes 'hide dot files'
+      when using EA for DOS attributes.
+    * Fix bug in returning remote time (reported by Thomas Bork).
+    * No users or groups to return in BUILTIN domain.
+    * Removed separate "builtin" search enumeration.
+    * Added count_sam_aliases to return the correct alias count.
+    * Correctly handle the LDAP_UNWILLING_TO_PERFORM error from 
+      eDirectory when accessing the universal password.
+    * Fix deadlock condition in share mode locking code.
+    * Fix logic bug in unix_mask_match().
+    * Fix memory leak in SMB client code found by Mikhail Kshevetskiy.
+
+
+
+o   Rashid N. Achilov <shelton at granch.ru>
+    * Add better service description names to the svcctl code.
+
+
+o   Timur Bakeyev <timur at com.bat.ru>
+    * BUG 3262: Improve FreeBSD DOS attribute error reporting.
+
+
+o   Andrew Bartlett <abartlet at samba.org>
+    * Remove another ancient NTLMSSP implementation.
+    * Allow machine account logons work if the client gives the 
+      appropriate flags. 
+
+
+o   Alexander Bokovoy <ab at samba.org>
+    * Add POSIX statvfs() to VFS api.
+
+
+o   Gerald (Jerry) Carter <jerry at samba.org>
+    * Eventlog and ServiceControl support.
+    * BUG 1051: store the directory path so we can send the full 
+      name in the unlink call from smbclient.
+    * Use reference count strategy for keeping the registry tdb 
+      open.
+    * Convert internal registry objects to new hierarchical talloc
+    * Allow the root user a free pass for access checks in the
+      registry and service control checks.
+    * Sanity checks in the privilege code to prevent empty SID 
+      entries
+    * Add basic infrastructure for 'make test' when the socket 
+      wrapper library is configured at compile time
+    * Convert profiles utility to use the current regfio interface 
+      for reading and writing user profiles
+    * Remove netsamlogon_cache interface
+    * Ensure that print jobs are removed even when the cancel 
+      command is received before the print cache has been updated
+    * Fix linking problem on Solaris when including ACL support.
+    * Give root a free pass to open the eventlog tdb files.
+    * Fix segfault in addprinter due to mixing talloc() and 
+      malloc()'d memory.
+    * fix invalid read reported by valgrind in the spoolss 
+      backchannel connection.
+    * Remove use of 'long long' in perfcounter registry code.
+    * BUG 3201: make sure request structure is cleared prior to 
+      sending the request to winbindd.
+    * Don't count open pipes in the num_files_open on a connection
+      (regression from Samba 2.2).
+    * Ensure servername hashing code normalizes the name.
+    * Fix checks for connect() in -lnsl[_s].
+    * Convert eventlog API to use NTSTATUS return codes rather 
+      than WERROR.
+    * Fix segv in winbindd caused by an uninitialized variable 
+      in winbindd_dual_getsidaliases().
+    * Allow winbindd to select the appropriate backend methods
+      based on the DC attributes and not the security parameter.
+    * Re-add the netsamlogon_cache tdb and ensure that user entries
+      are updated from the PAC data during Kerberos ticket 
+      validation.
+    * Fix lockup when running 'wbinfo -t' on a Samba PDC caused 
+      by mangling machine names in sub_set_smb_name().
+    * Add smbget to the list of tools built by default.
+    * Fix clearing of eventlog tdb files.
+    * Fix sequential reads in eventlog support.
+    * BUG 2718: Don't use qpathinfo_basic() call when remote server 
+      is Win9x.
+    * Fix build issues with the Sun compiler.
+    * BUG 3156: Don't use find_service() when explicitly looking 
+      for a printer.
+    * Fix nss_winbind_solaris.c build breakage on HP-UX.
+    * Initialize the local group description.
+    * Disable WINS and NetLogon services in the MMC services
+      plugin when the associated smb.conf features are not enabled.
+    * Add checks for invalid characters in new share names on the 
+      srvsvc pipe.
+    * Fix SWAT installation issues with 'make install'.
+    * Always add the BUILTIN\Administrators SID to a Domain 
+      Admins token.
+
+
+o   Alex Deiter <tiamat at komi.mts.ru>
+    * BUG 3196: Patch to compile against the Sun LDAP client libs.
+      (not for AD support; just ldap support).
+
+
+o   Guenther Deschner <gd at samba.org>
+    * Fixed compile problems and warnings with newer OpenLDAP 
+      and OpenSSL libs
+    * Fix bug when enumerating trusted domains via 'wbinfo -m'
+    * Parse the MS Kerberos PAC to obtain the user group 
+      membership during logon.
+    * Add support for SeRestorePrivilege to allow a process to 
+      change the ownership of a file to any arbitrary account
+    * Fix password history storage when using Novell eDirectory for 
+      ldapsam storage
+    * Backport Kerberos PAC parsing from Samba 4 branch in order to
+      correctly create the NT User Token when logging into a Samba 
+      member server
+    * Add small helper function to return a PAC_LOGON_INFO.
+    * Use LDAP bitwise matching rule when searching for groups 
+      in ADS.
+    * Avoid an infinite loop when retrying to connect in smbspool.
+    * Memory leak fixes in the Kerberos PAC parsing code.
+    * Improve NT_STATUS error messages returned from pam_winbind.
+    * Rename unknown samr group fields in samr structures with 
+      the correct name.removed separate "builtin" search enumeration.
+    * Cleanup redundant StartTLS code.
+    * Allow StartTLS support when connecting to Windows 2003 by
+      setting 'ldap ssl = start_tls'.
+    * Support raw NTLMSSP session setups in smbspool.
+    * Add rpccli_samr_chgpasswd3().
+    * Add 'wbinfo --separator'.
+    * Uninitialized warnings fixes.
+    * Fix return value in client spooler code.
+    * Require forced migration of account policies.  
+
+
+o   Steve French <sfrench at us.ibm.com>
+    * Fix cifs to handle non-numeric uid and gid parameters.
+    * Merge trunk and SAMBA_3_0 mount.cifs code.
+    * Cleanup cifs cfs help message.
+
+
+o   Paul Green <paulg at samba.org>
+    * Update to the latest config.guess and config.sub files.
+
+
+o   Deryck Hodge <deryck at samba.org>
+    * Allow control of syslog facility and level in audit vfs modules.
+
+
+o   S Murthy Kambhampaty <smk_va at yahoo.com>
+    * Patches for Fedora RPM specfile and init script
+
+
+o   Krishna Ganugapati <krishnag at centeris.com>
+    * Use the subtree delete ldap control when running 'net ads 
+      leave'.
+
+
+o   Volker Lendecke <vl at samba.org>
+    * New oplock implementation.
+    * Add assert() call if winbindd cannot locate the domain SID in 
+      secrets.tdb on startup
+    * Fix an annoying timeout in winbindd when nmbd is not running.
+    * Speed up loading smb.conf for large numbers of share 
+      definitions by adding an internal hashing of names to snums. 
+      Thanks to Michael Adam.
+    * Fix potential segv in rpcclient's lsarpc calls.
+    * Fix bugs in winbindd's use of rpccli_netlogon_getdcname().
+    * Fix alignment in getdc response.
+    * Allow pdbedit to set the domain for a user account.
+    * Fix fallback logic in rpc binds.
+    * Fix memleak in message handling code.
+    * Fix connection bug to port 445 and 139 after a successful 
+      getdcname response.
+    * Add additional calls to initialize_krb5_error_table() for 
+      Kerberos client code.
+    * Implement the possibility to have AFS users as SIDs in pts.
+    * Removed unused alternative_name code from winbindd.
+    * Protect against NULL alternative_name strings in winbindd.
+    * Define a default panic action with -DEVELOPER is defined.
+    * Add the capability to reset smbd connections on a zero VC id.
+    * Allow smb.conf variable expansion to be disabled in passdb 
+      backends.
+    * Add lookupname to rpcclient query_user as a fallback.
+    * BUG 3292: Prevent smbclient from spinning when the server 
+      disconnects.
+    * BUG 2191: Fix valgrind error in cli_session_setup_guest().
+    * Add samr_lookup_rids for the builtin domain.
+    * Memory allocation cleanups in passdb.
+    * Restrict samr_open_domain() to our domain only.
+    * Change local_lookup_sid() to local_lookup_rid() since it 
+      is responsible for our domain only.
+    * Fix some uninitialized variable warnings.
+    * Fix winbind_lookup_name for the local domain, 
+
+
+o   Derrell Lipman <derrell at samba.org>
+    * Cleanup libmsrpc version numbers.
+    * BUG 3257, 3267, 3273: Plug memory and file descriptor leaks.    
+    * Fix crash bug in libsmbclient.
+    * Add long share name support to libsmbclient when enumerating 
+      shares.
+
+
+o   Jason Mader <jason at ncac.gwu.edu>
+    * Removed compiler various warnings.
+
+
+o   Alex Masterov <alex at infobit.ru>
+    * BUG 3218: Fix XATTR calls on *BSD systems.
+
+
+o   Jim McDonough <jmcd at us.ibm.com>
+    * Speed up string_to_sid by removing next_token calls and 
+      unneeded strncmp() calls.
+    * Implement user rename for smbpasswd and LDAP backends.
+    * BUG 2961 (partial): Add rename support for user accounts to tdbsam
+    * BUG 3187: Fix time zone offset in logon hours restrictions.
+
+
 o   Stefan Metzmacher <metze at samba.org>
-    * Add dbwrap_tdb2 backend, useful for cluster setups.
-    * Add more functions to libwbclient:
-      - wbcGetGroups()
-      - wbcInterfaceDetails()
-      - wbcListUsers()
-      - wbcListGroups()
-      - wbcLookupUserSids()
-      - wbcSetUidMapping()
-      - wbcSetGidMapping()
-      - wbcSetUidHwm()
-      - wbcSetGidHwm()
-      - wbcResolveWinsByName()
-      - wbcResolveWinsByIP()
-      - wbcCheckTrustCredentials()
-    * Let wbinfo use libwbclient where possible.
-    * Let net use only libwbclient to access winbindd.
-    * Make socket wrapper pcap support more portable.
-    * Some libreplace backports from v4-0-test.
-    * Store the write time in the locking.tdb,
-      so that smbd passes the BASE-DELAYWRITE test.
-    * Run RAW-SEARCH and BASE-DELAYWRITE by 'make test'.
-    * Let each process use its own connection to ctdb
-      in cluster mode.
-    * Add a reinit_after_fork() helper function to correct
-      reinitialize the same things in all cases.
-    * Fix a chicken and egg problem with "include = registry".
+    * Fix setting of quotas on linux kernel with the struct 
+      if_dqblk interface
+    * Enable sysquota interface on Linux by default
+    * Use lp_socket_address() when binding to port 138/udp in nmbd.
 
 
-o   Karolin Seeger <kseeger at samba.org>
-    * Fix usage message for "net idmap dump".
+o   Brian Moran <bmoran at centeris.com>
+    * Eventlog and ServiceControl support.
+    * Added eventlogadm tool for writing Eventlog records.
+    * Fix typo when creating Eventlog source DLL registry paths.
+    * Add simple script to tail syslog and write records to 
+      eventlog tdb.
+    * Fix segv in eventlogadm when not event logs are listed in 
+      smb.conf.
 
 
+o   Lars Müller <lmuelle at samba.org>
+    * Only install smbsh manpage if smbwrapper has been successfully
+      built.
+    * Ensure setmntent() returns with != NULL in the disk_quotas() 
+      Linux version.
+    * Add configure switch to disable libmsrpc build.
+    * Add a soname to libmsrpc.
+
+
+o   Ricky Nance <ricky.nance at gmail.com>
+    * Updates for the mklogon perl scripts.
+
+
+o   Chris Nicholls <skel at samba.org>
+    * New libmsrpc library (Google SoC Project).
+    * Fix libmsrpc build of on the Sun compiler by removing empty 
+      structure declarations.
+
+
+o   James Peach <jpeach at sgi.com>
+    * Fix parsing error for smb ports parameter.
+
+
+o   Tim Potter <tpot at samba.org>
+    * BUG 3260: Fix DYNEXP flags on HPUX.
+
+
+o   Marcin Porwit <mporwit at centeris.com>
+    * Eventlog and ServiceControl support.
+    * Added basic Performance Counter daemon which can feed data
+      for the Windows perfmon.exe tool.
+    * Fix directory permissions in the perfcounter daemon.
+    * Add the 'File' registry value for the eventlog keys.
+
+
+o   Aruna Prabakar <aruna.prabakar at hp.com.
+    * Add checks to verify that the spooler is running on HP-UX when
+      reloading the printer name cache.
+
+
+o   Joel Smith <joel.j.smith at novell.com>
+    * Add iPrint printing backend support.
+
+
+o   Toomas Soome <Toomas.Soome at mls.ee>
+    * Implement host lookups in nss_winbind.so.1 on Solaris
+
+
+o   Simo Sorce <idra at samba.org>
+    * Update Debian packaging.
+
+
+o   John Terpstra <jht at samba.org>
+    * Add 'net idmap' usage help text.
+
+
 o   Andrew Tridgell <tridge at samba.org>
-    * Suppress superfluous message.
+    * Change license notice of standalone talloc library to LGPL.
 
 
-o   Marc VanHeyningen <marc.vanheyningen at isilon.com>
-    * Coverity fixes.
+o   Darren Tucker <dtucker at zip.com.au>
+    o Crash fix for snprintf() code.
 
 
-Changes since 3.2.0pre1:
------------------------
+o   Rainer Weikusat <rainer.weikusat at sncag.com>
+    * Fix function name typo in skeleton VFS code.
 
-o   Michael Adam <obnox at samba.org>
-    * Add library for access to the registry configuration data.
-    * BUG 5023: Separate NFS4 and POSIX ACL code in file access checks.
-    * BUG 4308: Fix Excel save operation ACL bug.
-    * Refactor and consolidate logic for retrieving the machine
-      trust password information.
-    * VFS API cleanup (remove redundant parameter).
-    * BUG 4801: Correctly implement LSA lookup levels for LookupNames.
-    * Add new option "debug class" to control printing of the debug class.
-      in debug headers.
-    * Enable building of the zfsacl and notify_fam vfs modules.
-    * BUG 5083: Fix memleak in solarisacl module.
-    * BUG 5063: Fix build on RHEL5.
-    * New smb.conf parameter "config backend = registry" to enable registry
-      only configuration.
-    * Move "net conf" functionality into a separate module libnet_conf.c
-    * Restructure registry code, eliminating the dynamic overlay.
-      Make use of reg_api instead of backend code in most places.
-    * Add support for intercepting LDAP libraries' debug output and print
-      it in Samba's debugging system.
-    * Libreplace fixes.
-    * Build fixes.
-    * Initial support for using subsystems as shared libraries.
-      Use talloc, tdb, and libnetapi as shared libraries internally.
 
 
+Release Notes for older release follow:
+
+      --------------------------------------------------
+                   ===============================
+                   Release Notes for Samba 3.0.20b
+                             Oct 12, 2005
+                   ===============================
+
+Common bugs fixed in 3.0.20b include:
+
+  o A crash bug in winbindd
+  o Reporting files as read-only instead of returning the 
+    correct error code of "access denied"
+  o File system quota support defects
+  
+
+######################################################################
+Changes
+#######
+
+
+Changes since 3.0.20a
+---------------------
+
+commits
+-------
+
 o   Jeremy Allison <jra at samba.org>
-    * Added support for IPv6 client and server connections.
-    * Add in the recvfile entry to the VFS layer.
-    * Removal of pstring data type.
-    * Remove unused utilities: smbctool and rpctorture.
-    * Fix service principal detection to match Windows Vista
-      (based on work from Andreas Schneider).
-    * Encrypted SMB transport in client tools and libraries, and server.
+    * BUG 3088: Fix error condition for files on a read-write share 
+      which cannot be read due to permissions.
 
 
-o   Kai Blin <kai at samba.org>
-    * Added support for an SMB_CONF_PATH environment variable
-      containing the path to smb.conf.
-    * Various fixes to ntlm_auth.
-    * make test now supports more extensive SPOOLSS testing using vlp.
-    * Correctly handle mixed-case hostnames in NTLMv2 authentication.
+o   Gerald (Jerry) Carter <jerry at samba.org>
+    * BUG 3070: Fix crash bug in qfsinfo when retrieving fs quota 
+      details.
+    * BUG 1473, 3090: Quota detection and compilation problems on 
+      Solaris.
 
 
+o   Marc Balmer <marc at msys.ch>
+    * Build fixes when builddir != srcdir
+
+
+o   Alex Deiter <tiamat at komi.mts.ru>
+    * BUG 3145: Fix build issue regarding quota support on Solaris.
+
+
+o   Volker Lendecke <vl at samba.org>
+    * BUG 3068: Fix for winbindd crashed by empty DC alternative 
+      name.
+
+
+      --------------------------------------------------
+                   ===============================
+                   Release Notes for Samba 3.0.20a
+                             Sept 30, 2005
+                   ===============================
+
+Common bugs fixed in 3.0.20a include:
+
+  o Stability problems with winbindd.
+  o Crash bugs caused by incompatibilities on 64-bit systems.
+  o Missing files from directory listings on AIX servers
+  o User Manager interoperability problems.
+  o Minor build difficulties on various platforms such as 
+    Solaris and OpenBSD, 
+
+
+Winbind, security = domain, and Active Directory
+================================================
+
+Recent security updates for Windows 2000 and Windows 2003 have 
+changed the fashion in which user and group lists can be obtained 
+from domain controllers.  In short, the RPC mechanisms used by 
+"security = domain" to retrieve users and groups is not compatible 
+with these changes.   The "security = ads" configuration is not 
+affected by the Windows protocol changes.
+
+Samba developers are actively working to correct this problem in 
+the 3.0.21 release.  In the meantime, Administrators who are unable 
+to migrate to "security = ads" and must continue using "security = 
+domain", can define credentials to be used by winbindd for account
+enumeration by executing the following command as root.
+
+	wbinfo --set-auth-user='DOMAIN\username%password'
+
+
+
+######################################################################
+Changes
+#######
+
+
+Changes since 3.0.20
+--------------------
+
+commits
+-------
+
+o   Jeremy Allison <jra at samba.org>
+    * BUG 3065: Fix for legacy clients retrieving a listing of 
+      an empty directory.
+    * Added external library for accessing Samba's share mode 
+      database.
+    * Fix winbindd credentials chain which caused logon failures 
+      after attempting to authenticate an unknown user.
+    * Fix recursive looping bug in winbindd.
+    * Fix build errors on 64-bit systems.
+    * Posix ACL memory leak and crash bug fixes.
+    * BUG 3044: Ensure OPEN-EXEC is honored as read-only.
+    * BUG 3060: Ensure SMBcreate truncates the file if it exists.
+    * Hide dot files and directory logic fixes.
+    * Correct display of open file modes by smbstatus.
+    * BUG 3010: Fix missing files bug on AIX systems.
+
+
 o   Gerald (Jerry) Carter <jerry at samba.org>
-    * Add Winbind client library.
-    * Decouple static linking between smbd and winbindd's client
-      interface.
+    * Allow the root user to automatically pass se_access_checks()
+      in the registry and service control server code.
+    * Ensure that winbindd uses the correct name in the net_auth2()
+      request when running on a Samba PDC.
+    * Fix linking problem with tdb utilities.
+    * BUG 3080: Fix regression in 'net rpc shutdown' command.
+    * Fix segv in 'net rpc' when the pipe open fails.
+    * Fix upload bug when installing 64-bit Windows printer drivers.
+    * Fix regression in the smburi syntax used by smbspool.
+    * Fix sorting of subkey hash records in registry files.
+    * Correct REG_CREATE_KEY_EX parsing error.
+    * Interoperability issues with usrmgr.exe and Samba groups.
+    * Use the display names and not the Unix names when enumerating
+      groups in the ldapsam passdb backend.
+    * Ensure that Windows domain user names are converted to lower case.
 
 
 o   Guenther Deschner <gd at samba.org>
-    * Enhance client and server remote registry access.
-    * Add client calls for remotely joining a computer to a domain
-      (including calls from "net dom" command).
-    * Add libnetapi.so library for joining domains including
-      sample GTK+ app.
-    * Fixes for Vista SP1 Kerberos authdata handling to only pickup
-      the PAC.
-    * Various error code and error message fixes.
-    * Add initial draft of libnetconf to allow programmatic
-      configuration changes.
-    * Add libnet_join internal library for programmatically joining
-      and unjoining Domains.
-    * Add various fixes and new calls to libnetapi.so library.
-    * Various fixes for DsGetDcName and conversion to IDL based
+    * Prevent BUILTIN sids returned in the user's token from 
+      a Windows DC from being applied to any local group mappings
+      on the Samba host.
+    * Plug memory leaks in the Kerberos keytab code.
+    * Ensure BUILTIN groups are returned from winbindd's idmap_rid
+      backend when 'winbind nested groups' is enabled.
+    * Fix crash bug in winbindd caused by 64-bit build issues.
+    * Improve debug messages in smbspool.
+    * Give better error-message when "NDS Universal Password" change fails.
+    * Fix password history error in the eDirectory schema file.
+    * Ensure that Windows domain group names are converted to lower case.
+
+
+o   Steve French <sfrench at us.ibm.com>
+    * Allow disabling mandatory byte range lock mount flag, and fix 
+      corresponding entry in mtab.
+
+
+o   Volker Lendecke <vl at samba.org>
+    * Fix race condition in the NTcreate&X open code when the 
+      disposition is NTCREATEX_DISP_CREATE.
+    * Correct logic error when checking the pid for pending print 
+      change notify messages.
+    * Ensure that winbindd child process complete startup even when
+      the parent is receiving authentication requests.
+    * Return the full NTSTATUS code to ntlm_auth and pam_winbindd
+      when authentication fails.
+
+
+o   Jason Mader <jason at ncac.gwu.edu>
+    * Compile warning fixes.
+
+
+o   Uli Meis <a.sporto at gmail.com>
+    * Patches for pdb_*sql.c
+
+
+o   Luke Mewburn <lukem at NetBSD.org>
+    * Autoconf syntax fixes.
+
+
+o   James Peach <jpeach at sgi.com>
+    * Correct problem with creating a core file in Linux.
+
+
+o   Stefan Metzmacher <metze at samba.org>    
+    * Quota fixes in smbd.
+
+
+o   Peter Rindfuss <rindfuss at wz-berlin.de>
+    * Patches for pdb_*sql.c
+
+
+o   Jiri Sasek <Jiri.Sasek at Sun.COM>
+    * Solaris toolchain patches for autoconf scripts.
+
+
+o   Andrew Tridgell <tridge at samba.org>
+    * Fix for tdb clear-if-first race condition.
+
+
+o   Leo Weppelman <leo at wau.mis.ah.nl>
+    * BUG 3104: Don't allow time updates to files on read-only shares.
+
+
+o   Steve Williams <steve at celineandsteve.com>
+    * BUG 3052: Fix compile issues on OpenBSD.
+
+
+      --------------------------------------------------
+                   ==============================
+                   Release Notes for Samba 3.0.20
+                             Aug 19, 2005
+                   ==============================
+
+Additional features introduced in Samba 3.0.20 include:
+
+  o Support for several new Win32 rpc pipes.
+  o Improved support for OS/2 clients.
+  o New 'net rpc service' tool for managing Win32 services.
+  o Capability to set the owner on new files and directory
+    based on the parent's ownership.
+  o Experimental, asynchronous IO file serving support.
+  o Completed Support for Microsoft Print Migrator.
+  o New Winbind IDmap plugin (ad) for retrieving uid and gid
+    from AD servers which maintain the SFU user and group 
+    attributes.
+  o Rewritten support for POSIX pathnames when utilizing 
+    the Linux CIFS fs client.
+  o New asynchronous winbindd.
+  o Support for Microsoft Print Migrator.
+  o New Windows NT registry file I/O library.
+  o New user right (SeTakeOwnershipPrivilege) added.
+  o New "net share migrate" options.
+
+
+What happened to 3.0.15 - 3.0.19?
+==================================
+
+After some discussion it was deemed that the amount of changes 
+going into the next Samba 3.0 release needed something to catch
+people's attention.  Skipping several releases was chosen as 
+the best solution with the least overhead.  There will be no
+3.0.15 - 3.0.19 ever released.  The next production release
+following 3.0.20 should be 3.0.21.
+
+The original announcement about the version number change can 
+be found in the samba mailing list archives:
+
+http://marc.theaimsgroup.com/?l=samba&m=111721010206997&w=2
+
+
+Asynchronous Winbind Implementation
+===================================
+
+Winbindd has been completely rewritten in this release to support
+an almost completely non-blocking, asynchronous request/reply
+model.  This means that winbindd will scale much better in 
+large domain environments and on high latency networks.  Neither 
+the client interface nor the command line tools (i.e. wbinfo) have 
+changed in their calling conventions or syntax.  However, due to 
+internal structure changes, it is required (more so than normal) 
+that you install the nss_winbind.so library included in this release.
+
+
+Support for Microsoft Print Migrator
+====================================
+
+Samba 3.0.20 includes full support for migrating printers from 
+Windows servers or other Samba servers via the Microsoft Print 
+Migrator tool.  Restoring printers requires a working "add printer 
+command" defined in smb.conf.  Current support also allows
+administrators to create a master list of printer drivers which
+can be restored in bulk on new (or existing) Samba installations.
+
+
+Asynchronous IO Support
+=======================
+
+Experimental support for async IO has been added to smbd for 
+certain platforms.  To enable this new feature, Samba must be 
+compiled to include the --with-aio-support configure option.
+In addition, the "aio read size" and "aio write size" to non-zero
+values.  See the smb.conf(5) man page for more details on these 
+settings.
+
+
+######################################################################
+Changes
+#######
+
+smb.conf changes
+----------------
+
+    Parameter Name                      Action
+    --------------                      ------
+    acl check permissions		New
+    acl group control			New
+    acl map full control		New
+    aio read size			New
+    aio write size			New
+    enable asu support 			New
+    inherit owner			New
+    ldap filter				Removed
+    map to guest			Modified (new value added)
+    max stat cache size			New
+    min password length			Removed
+    printer admin			Deprecated
+    username map script			New
+    winbind enable local accounts	Removed
+    winbindd nss info			New
+
+
+Changes since 3.0.14a
+---------------------
+
+
+commits
+-------
+
+o   Jeremy Allison <jra at samba.org>
+    * BUG 2533: Fix incorrect directory listings for OS/2 clients.
+    * Ensure the old SMB search calls always ask mask_match() to 
+      translate patterns like ????????.???.
+    * Split out the check_path_syntax() into a findfirst, findnext,
+      & wildcard versions.
+    * Fix checks for matching groups in an file ACL against the
+      user's primary and supplementary group list.
+    * BUG 2541: Ensure we recognize LANMAN2.1 as OS/2 and select 
+      LANMAN2 protocol, ensure the EA size is always correctly 
+      set on a query for a file with no EA's.
+    * BUG 2551: Look at the incoming flags2 flag 
+      FLAGS2_LONG_PATH_COMPONENTS determines if a reply is 
+      uppercased on a SMBsearch request, not the protocol level.
+    * Added "volume" command to smbclient that prints out the 
+      volume name and serial number.
+    * Added "fix for broken SMB_INFO_VOLUME level used by OS/2.
+    * Add support for OS/2 Extended Attributes.
+    * Correctly check OpenX open modes.
+    * Ensure allocation size is correctly returned for OpenX. 
+    * Only set allocation on create/truncate for nttrans.
+    * Fix oplock bug in trans2open() code.
+    * Remove unix_ERR_XXX global nastiness.
+    * Only do the strange DOS error for openX, not trans2open.
+    * Ensure SMBopen replies includes the share modes as well as 
+      open modes.
+    * BUG 2581: Add size limit (in kb) to stat cache.
+    * Fix bug in the trans2 secondary processing.
+    * BUG 2601: Enforce DOS_OPEN_EXEC to mean read-only.
+    * Add an SMB counter per connection struct for gathering
+      profiling data.
+    * BUG 2605: Ensure smbclient doesn't perform commands if 
+      the "chdir" fails in a scripted set.
+    * Ensure a 'forced group' is added to the list of effective
+      gids when processing ACLs.
+    * Refactor rpc_bind structures for better future work.
+    * BUG 2942: Add missing value in debug message.
+    * BUG 2946: Fix regressions in str[n]cmp_w) functions found
+      by 'mangling method = hash'.
+    * Fix memory leaks in the msdfs trans2 server code.
+    * Convert msdfs server to be talloc'd based.
+    * Fix up stackable vfs interface.
+    * Fix rpc fault when encountering an unknown rpc_bind auth 
+      type.
+    * BUG 2954: More AIX 5.1 AIO compile fixes.
+    * Fix valgrind bug in interaction with new aio buffer (found
+      by Volker).
+    * BUG 2878: Fix Norton commander not running on OS/2 clients. 
+    * Cleanup SAMR user info structure naming.
+    * BUG 2889:  Fix directly listings from OS/2 clients.
+    * Added "acl group control" parameter.
+    * Add debug warning if AddPrinterEx() is called without having
+      an 'add printer command'  defined.
+    * Add better log messages when modifying ldap entries.
+    * BUG 2829: Fix strXX_w() functions on non-x86 platforms when 
+      when string is unaligned.
+    * BUG 2918: Fix SMB chaining by ensuring that deferred open 
+      message buffer is nor reused.
+    * Add support for client setting capabilities to select posix 
+      pathnames on the wire.
+    * Stop using C++ reserved words so that Samba can be compiled 
+      using g++.  Also allows VFS modules in C++.
+    * More fixes to allow better large directory scaling.
+    * BUG 2827: Ensure we call the vfs connection hook before 
+      doing a vfs stat.  Allows database vfs backends to initialize 
+      with a working connection.
+    * BUG 2826: Ensure the correct return value for symlink and 
+      readlink in the VFS.
+    * Merge handling of ASN.1 objects bigger than 64k from Samba 4.
+    * Added AIO support to smbd.
+    * Add "acl map full control", true by default, to allow people 
+      to change mapping of rwx to full control or not.
+    * Transition smbd to use NTcreate&X for internal file opens.
+    * Add checks against the current effective group id (e.g. force 
+      user) when testing write permissions one ACLs.
+    * Fix FindFirst/FindNext server code when parsing directories
+      on old IRIX XFS file systems (thanks to Cale Fairchild
+      for the debugging help).
+    * BUG 2644: Test for special files to be ignored was reversed.
+    * Ensure yield_connection() is called on all appropriate error
+      conditions.
+    * Fix EDEADLCK problem with deferred open calls.
+    * BUG 2622: Remove DPTR_MASK as it makes no sense.
+    * Fix the write cache based on some VERY good detective work
+      from Ingo Kilian.
+    * BUG 2346: Fix read-only excel file bugs.
+    * Don't wrap the setfsinfo call in HAVE_QUOTA as they'll just 
+      return ENOSYS if not implemented.
+    * Add new CAP for POSIX pathnames.
+    * BUG 2703: Add NULL guard for disp_fields[0].
+    * BUG 2681: With "strict allocate = yes" we now zero fill when 
+      a file is extended. Should catch disk full errors on write
+      from MS-Office.
+    * Add "acl check permissions" to turn on/off the new 
+      behavior of checking for write access in a directory 
+      before delete. 
+    * Refactor printing interface to take offset into job. 
+    * Allow mapping of POSIX ACLs to NT perms to differentiate 
+      between directories and files.
+    * Added encrypt/decrypt function for LSA secrets and trusted
+      domain passwords on the wire.
+    * BUG 2729: Resume keys are *mandatory* for a search when 
+      listing a W2K and above server from a FATxx filesystem only.
+    * BUG 2735: Ensure that smbd mangles control characters in file 
+      and directory names.
+    * Refactor small pieces of socket handling code (in conjunction 
+      with Derrell).
+    * BUG 2698: Fix infinite listing loop in smbclient caused by
+      an invalid character set conversion.
+    * Add client code that will abort a directory listing if we 
+      see the same name twice between packets.
+    * Performance improvements in trans2 qfilepathinfo code by 
+      removing unnecessary memset() calls.
+    * Rewrite the RPC bind parsing functions to follow the 
+      spec; fixes bug with 64-bit Windows XP and OS X 10.4.
+    * BUG 2774: Set sparse flag if needed when returning 
+      file attributes.
+    * Fix errors listing directories from Windows NT clients 
+      which caused "." and ".." to show up in explorer.exe.
+    * Merge of error code fixes from SAMBA_4_0 branch.
+    * BUG 2801: Fix regression in the "delete veto files" option.
+    * Fix based on work from  Shlomi Yaakobovich to catch loops 
+      in corrupted tdb files.
+    * Allow someone with SeTakeOwnershipPrivilege to chown the 
+      user of a file to herself.
+    * Fix minor compiler warnings in printing/printing.c.
+    * Merge new DOS error code from SAMBA_4.
+    * Fix issue when non-English characters in filenames and 
+      directories.
+    * Fix bogus error message in smbstatus about unknown share modes.
+
+
+o   Andrew Bartlett <abartlet at samba.org>
+    * Support raw NTLMSSP authentication for Windows Vista 
+      clients.
+    * Fix parallel NTLMSSP processing by removing global state.
+    * BUG 2684: Add per service hosts allow/deny checks for 
+      printers when  connecting via MS-RPC.
+    * BUG 2391: Fix segv caused by free a static pointer returned 
+      from getpwnam().
+    * Support Kerberos authentication in smbd when using a keytab
+      and participating in a non-Microsoft Kerberos realm.
+
+
+o   Timur Bakeyev <timur at com.bat.ru>
+    * BUG 2546: Add support for FreeBSD EA API
+    * Fix detection of FreeBSD 7.x platforms in autoconf checks.
+    * BUG 2908: Fix string length logic error in msdfs code.
+    * BUG 2909: Fix typo that caused smbd to call the wrong 
+      aio_fsync function.
+
+
+o   Ed Boraas <ed.boraas at concordia.ab.ca>.
+    * Added Linux per-socket TCP settings.
+
+
+o   Gerald (Jerry) Carter <jerry at samba.org>
+    * Added support for \svcctl pipe rpcs.
+    * Added 'net rpc service' subcommand for managing Win32 
+      services.
+    * Refactoring work on the rpc [un]marshalling layer and 
       structures.
-    * Fixes for pidl to correctly generate WERROR based client calls.
-    * Fixes for pidl to generate output that complies to coding
-      conventions.
-    * Various IDL fixes.
-    * Add ads_get_joinable_ous() to libads to get list of joinable ous.
-    * Add get_logon_hours_from_pdb() to comply with new IDL based
-      structures.
-    * Add debugging capabilities to dump AD connections to libads
-      (using ndr_print).
-    * Add "dump-domain-list" command for smbcontrol to retrieve better
-      debugging information out of winbindd.
-    * Migration of the entire client and server DCE/RPC code to IDL
-      based structures and autogenerated code for DSSETUP, LSA, SAMR
-      and NETLOGON.
-    * Started migration of client and server DCE/RPC code to IDL based
-      structures and autogenerated code for NTSSVC, SVCCTL and
-      EVENTLOG.
-    * Use IDL and autogenerated code for samlogoncache and Kerberos
-      PAC handling.
-    * Various fixes and cleanup of Kerberos PAC handling.
-    * Fix segfault in _srv_net_file_enum.
-    * Conversion of client join and unjoin code to libnet_join.
-    * Add remote join/unjoin server-side implementation.
-    * Removed a lot of code which has become obsolete.
+    * Verify privilege name in 'net rpc rights privileges' in 
+      order to provide better error messages.
+    * Cleanup rpc structures in rpc_spoolss.h.
+    * Cleanups and fixes for the \winreg server code.
+    * Cleanup of rpc structures used by LsaEnumerateTrustedDomains.
+    * Fix bugs in client spoolss code after refactoring work.
+    * Fix Valgrind warnings of invalid reads in the spoolss 
+      server code.
+    * Fixed a segv when enumerating services on a Samba host.
+    * Fix segv in the service control server code.
+    * Fix crashes in client spoolss calls caused by not checking 
+      for a valid pointer from the caller.
+    * Fix regression in DeleteDriver() server routines.
+    * Fix dup_a_regval() when size is 0.
+    * Fix usrmgr.exe crash when viewing user properties at 
+      debuglevel 10.
+    * Do not enumerate any privileges when 'enable privileges = no'
+      and log a message if a client tries.
+    * BUG 2872: Fix cut-n-paste error when checking pointer value 
+      in ntlmssp_set_workstation().
+    * Fix upgrade path from earlier nt*tdb files.
+    * Removed print handle object cache.
+    * BUG 2853: Don't strip out characters like '$' from printer 
+      names when substituting for the lpq command.
+    * BUG 2557: Gracefully fail on unsupported SetPrinter() levels.
+    * Fix build issues on x86_64-linux systems caused by valgrind 
+      headers.  Thanks to Bent Vangli to the suggestions.
+    * Refactor spoolss client calls.
+    * Adding 'username map script'.
+    * Disable schannel on the LSA and SAMR pipes in winbindd client 
+      code to deal with Windows 2003 SP1 and Windows 2000 SP4 SR1.
+    * Cleanup of winreg API functions.
+    * Add server stubs for RegSetKeySec() and RegGetKeySec().
+    * Map generic bits to specific bits in reg_open_entry() 
+      requests.
+    * Add write support to registry tdb and printing backends.
+    * Use tdb lookups rather than hard-coding certain registry 
+      value names and data.
+    * BUG 2808: don't try to install man pages if they are not 
+      present.
+    * Fix initialized variables reported by valgrind.
+    * Normalize key lookups in ntprinters.tdb.
+    * Mark "enumports command" as deprecated.
+    * Add missing class file for python share command example.
+    * Fix smbclient build issue on Solaris.
+    * BUG 2626: ensure that the calling_name is set to something 
+      after parsing smb.conf (if not set via -n).
+    * Use "add machine script" when creating a user (ACB_NORMAL)
+      who has a name ending in '$' (e.g. usrmgr.exe creating
+      domain trust accounts).
+    * Add 'rid' synonym for idmap_rid IDMap module.
+    * Ensure that we set full access on the handle returned 
+      from _samr_create_dom_{alias,group}() so that future 
+      set_{alias,group}() commands succeed.
+    * Fix bug when looking for internal domains in winbindd
+      (caused winbindd_getgrgid() for local groups to fail).
+    * Fix query and set alias info calls (level 1 from the MMC 
+      manage computer plug-in.
+    * Remove bogus log messages about unknown specversions.
+    * BUG 2680: copy files from an MS-DFS win2k root share
+    * BUG 2688: re-implement support for the -P (--port) option
+    * Support connecting to an 'msdfs proxy' share on a Samba
+      server.
+    * Strip the directory path from cups command line printing 
+      defaults.
+    * Fix bug that prevented smbclient from creating directories 
+      on non-dfs paths.
+    * Deprecate the "printer admin" parameter in favor of the 
+      SePrintOperatorPrivilege.
+    * Add the capability to read and write WinNT regf registry 
+      files.
+    * Implement access checks for RegOpenXXX() server calls.
+    * Extend registry client rpc calls.
+    * Add "net rpc registry" set of commands.
+    * Remove testprns tool.
+    * Ensure that printer ACLs use the specific bits as well as 
+      the generic bits.  Upgrade existing ntprinters.tdb SECDESC 
+      records.
+    * Add server support for RegSaveKey() for dumping registry 
+      trees to a regf file.
+    * Add "enable asu support" smb.conf parameter.
+    * Merge various small file changes from trunk.
+    * Remove "winbind enable local accounts" support.
+    * Remove "ldap filter" smb.conf option.
+    * Remove editreg utility (needs to be rewritten using regfio.c).
+    * Fix build failure when running 'make torture' without first 
+      running 'make all' first.
+    * BUG 1261: Remove unusable libbiconv from iconv detection 
+      in configure.
+    * Add new option for "map to guest".  "Bad Uid" re-enables the
+      Samba 2.2 behavior of mapping authenticated users to the
+      guest account if there does not exist a valid Unix account 
+      for the Windows domain user (based on patch from 
+      aruna.prabakar at hp.com).
+    * Fix a couple of regressions after introduction of new winbindd.
+    * Fix smbpasswd user password change (still worked by bad error
+      messages) due to trying to strdup a NULL pointer.
+    * Implement default security descriptors for the
+      OpenService[Manager]() calls and check requested access mask 
+      at connect time.
+    * Include access checks on handle mask for \svcctl operations
+      such as ControlService() and StartService().
+    * Implement simulated start and stop service control for 
+      the spooler service as a per smbd service state value.
+    * Add interface structure for controlling service via rc.init
+      scripts (incomplete).
+    * Convert move_driver_to_download_area() to use copy_file()
+      rather than moving the files.
+    * Add version number to registry.tdb file since it can be 
+      modified now.
+    * Remove over-paranoid assert() call when checking spoolss 
+      buffer pointers
+    * Fix error in EnumPrinterData() reported by valgrind.
+    * Fix broken help links in SWAT editor caused by new doc layout.
+    * Ensure that a domain structure in winbind is initialized prior
+      to assigning the methods for communicating to a DC.
+    * BUG 3000: Remove background updates of winbind cache and allow
+      child processes to immediately update and expired cache entry.
 
 
-o   Steve Langasek <vorlon at debian.org>
-    * Integrate 2 out of 3 --with-fhs patches from Debian packaging
-      for better adherence to the FHS standard.
+o   David.Collier-Brown  <David.Collier-Brown at sun.com>
+    * Added panic action script for Solaris.
 
 
+o   Jeremy Cooper <jeremy at ncircle.com>
+    * Added support for several new \winreg client rpcs.
+
+
+o   <core at road-star.jp>
+    * BUG 2792: Ensure the shadow copy module hooks seekdir, 
+      telldir, rewinddir to match updated large directory code.
+
+
+o   Guenther Deschner <gd at samba.org>
+    * Close handles on group creation in rpcclient to better 
+      support mass group account creation.
+    * Fix account policy key lookup for minimum and maximum
+      password lengths.
+    * Fix some compiler warnings and add missing exclude-block 
+      in 'net rpc share migrate'.
+    * Allow use of a non-default smb.conf by rpcclient.
+    * Fix querydispinfo search semantics in rpcclient test code.
+    * Fix querydispinfo server semantics to allow to list more 
+      then 511 users.
+    * Fix server crash bug in ancient OpenPrinter() call.
+    * Fix a crash bug when enumerating privileges via the LSA 
+      calls.
+    * Fix crash in EnumPrinterKey() client calls caused by previous 
+      refactoring work.
+    * Various compiler warning fixes.
+    * Fix segfault in the client AddPrinterEx-call of 'net 
+      rpc printer'.
+    * Fix build issues when --with-aio-support is enabled.
+    * BUG 2502: Removed the deprecated 'min passwd length parameter'.
+    * Honour the CC environment variable in python build.
+    * Fix searches in pdb_ldap for inter-domain trust accounts.
+    * Don't expand the %L in %LOGONSERVER% from user attributes.
+    * Fix bug in 'net rpc vampire' that caused accounts to be created 
+      with no assigned ACB flags.
+    * Fix enumeration of builtin-aliases.
+    * Avoid unset rids for builtin-aliases.
+    * Add 'recycle:touch_mtime = true' vfs option for the recycle bin.
+    * More "net rpc share migrate" fixes.
+    * Merge PADL's idmap_ad plugin (taken from the latest 
+      xad_oss_plugins-tarball).
+    * Add support for "idmap backend = ad" when "security = ads".
+    * Add home directory and shell support from AD via "winbindd nss 
+      support = sfu" and "security = ads".
+    * Provide better feedback when we fail share-manipulation 
+      due to missing scripts.
+    * Correctly substitute "\" as default winbind separator in 
+      generate_parm_table.py example share command script.
+    * Document pam_winbind.c to clarify the working status of
+      require-membership-of option.
+    * Added client-support for various lsa_query_trust_dom_info()
+      calls and a rpcclient-tester for some info-levels.
+    * Add "net rpc trustdom vampire" tool (in conjunction with 
+      Lars Mueller).
+    * Add missing cli_srvsvc_net_share_set_info-function and
+      rpcclient-testers (in preparation for net share acl migration).
+    * Print trusted domain passwords returned via rpcclient in 
+      display charset.
+    * Error code fixes when attempting to manipulating 
+      non-existent shares.
+    * Cleanup "net share migrate" code. 
+    * Allow to touch mtime in vfs-recycle with "recycle:touch_mtime 
+      = true".
+    * Allow admins to uncheck the "User must change Password at 
+      next Logon" checkbox in User manager (merge from trunk).
+
+
+o   Renaud Duhaut <rd at duhaut.com> 
+    * BUG 1040: Add directory_mode parameter when creating recycle
+      directories.
+
+
+o   Steven Edwards <steven_ed4153 at yahoo.com>.
+    * Use chsize() if we don't have ftruncate().
+
+
+o   Rodrigo Fernandez-Vizarra <Rodrigo.Fernandez-Vizarra at Sun.COM>
+    * BUG 1780: Add Kerberos (file based ticket cache) support 
+      to smbspool.
+
+
+o   Steve French <sfrench at us.ibm.com>
+    * Update list of mount options for mount.cifs.
+    * Add more defines for POSIX extensions to match the newly 
+      added client implementation.
+    * Add initial support for cifs umount utility.
+    * Fix cifs mounts to handle commas embedded in prompted 
+      password, and password and credential files.
+    * Fix cifs mounts to handle domain name and user name in 
+      username field (in form domain\user).
+    * Add missing error code mappings when a client unsuccessfully 
+      tries to create a hard-link.
+    * Add support so umount.cifs can update mtab.
+    * Add two newer mount options to syntax help for mount.cifs.
+    * Add missing remount flag handling.
+    * Allow domain= to be specified in credentials file. 
+    * Fix umount.cifs help, allow root to unmount someone else's
+      mount.
+    * Lock mtab when updating it during umount.cifs, also delete
+      only one matching entry at a time.
+    * Fix minor compiler warnings in the mount.cifs helper.
+
+
+o   Deryck Hodge <deryck at samba.org>
+    * BUG 2137: Encode quotes for display in HTML (original patch 
+      from Jay Fenlason).
+
+
+o   Olaf Imig <Olaf.Imig at bifab.de>
+    * BUG 1998: Correct byte ordering bug when storing 16-bit RAP 
+      print job ids.
+    * BUG 2653: Fix segv in rpcclient OpenPrinterEx() call.
+
+
+o   Björn Jacke <bj at sernet.de>
+    * Added ioctl constants reported by msbackup.exe and filemon.exe.
+
+
+o   Kevin Jamieson <bugzilla at kevinjamieson.com> 
+    * BUG 2819: Fix typo when checking for ".." in smbd's statcache.
+
+
+o   John Janosik <jpjanosi at us.ibm.com>
+    * BUG 2077: Correctly fill in the correct server name when 
+      processing trusted domain logins.
+    * BUG 2976: Mark logons for unknown domains with a 
+      non-authoritative response.
+
+
+o   William Jojo <jojowil at hvcc.edu>
+    * AIX AIO fixes.
+
+
+o   Guenter Kukkukk <guenter.kukkukk at kukkukk.com>
+    * BUG 2541: Fix copying of file(s) from samba share to an OS/2 
+      local drive.
+
+
+o   Tom Lackemann <cessnatomny at yahoo.com>
+    * BUG 2242: Patch to ensure that we only set the security 
+      descriptor on an NTtransact create if we created the file.
+
+
 o   Volker Lendecke <vl at samba.org>
-    * Add talloc_stackframe() and talloc_pool() features.
-    * Removal of pstring data type.
-    * Add generic a in-memory cache.
-    * Import the Linux red-black tree implementation.
-    * Remove large amount of global variables.
-    * Support for storing xattrs in tdb files.
-    * Support for storing alternate data streams in xattrs.
-    * Implement a generic in-memory cache based on rb-trees.
-    * Add implicit temporary talloc contexts via talloc_stack().
-    * Speed up the smbclient "get" command
-    * Add the aio_fork module
-    * Fix bug 4901
+    * Port some of the non-critical changes from HEAD to 3_0. 
+      The main one is the change in pdb_enum_alias_memberships 
+      to match samr.idl a bit closer.
+    * Close handles on user creation in rpcclient to better 
+      support mass user account creation.
+    * Implement client RAP calls for enumusers/enumgroups level 0.
+    * Implement a new caching API for enumerating the pdb elements.
+    * Convert the RAP user and group enumeration functions to the 
+      utilized the pdb_search API. 
+    * BUG 2438: Partial fix for 'net rpc trustdom establish' in 
+      RestrictAnonymous environments.
+    * Internal passdb API changes for better search capabilities
+      (based on original work by Guenther Deschner).
+    * Fix various compiler warnings.
+    * Add chain length statistics to tdbtool.
+    * Fix set afs ACL calls on files and directories in the root of 
+      a share.
+    * Refactoring work on internal open code
+    * Correctly initialize the version in a new set of nt*tdb files.
+    * Remove smb_run_idle_events() from main process loop in smbd 
+      and instead rely upon the timeout processing to handle 
+      dropping idle LDAP connections.
+    * Fix the bug where users show up as trusting domains.
+    * Fix an assertion failure in winbindd.
+    * Fix a memleak in vfs_afsacl.
+    * Various compiler warning fixes.
+    * Fix compile when --enable-socket-wrapper is defined.
+    * Fixes for top level acls in vfs_acl.c.
+    * Refactor passdb interface functions.
+    * Compile fixes when '#define PARANOID_MALLOC_CHECKER 1'.
+    * Correct 2 segv's in "net rpc printer migrate".
+    * Return correct group type from smbd for BUILTIN groups.
+    * Backport the talloc() layer from Samba 4.
+    * BUG 2701: Fix segv in ldap reconnection code.
+    * BUG 2705: Fix segv when connecting from usrmgr.exe.
+    * Use the SID in the user token for the %s expansion in 'afs 
+      username map'.
+    * Memory leak fixes in passdb code.
+    * BUG 2720: Fixes for "net usersidlist".
+    * BUG 2725: Fix segv in "net ads user".
+    * Only allow schannel connections if a successful Auth2 
+      has been previously performed.
+    * Don't look at gencache.tdb for the trusted domains if 
+      winbind is present.
+    * Rewrite winbindd using an asynchronous process model.
 
+
+o   Herb Lewis <herb at samba.org>
+    * Compiler warning cleanups.
+    * smbwrapper Makefile and compile time check cleanups.
+    * Adding robustness checks for tdbdump and tdbtool.
+    * Extend tdb command line parsing to arbitrary hex characters.
+    * Add LOCKING debug class.
+    * Fix more compiler warnings.
+
+
 o   Derrell Lipman <derrell at samba.org>
-    * Modified libsmbclient API for more easily maintaining ABI compatibility
-      while adding new features to libsmbclient.
+    * add support for opening a file for write with O_APPEND 
+      in libsmbclient.
+    * Added smbsh/smbwrapper for Linux to example/libsmbclient 
+      tree.
+    * Fix smbc_stat() from returning incorrect timestamps IFF 
+      it used cli_qpathinfo2() to retrieve the timestamps (Win2k) 
+      and not if it used cli-getatr() to retrieve the timestamps 
+      (Win98). 
+    * Fix handful of compiler warnings.
+    * BUG 2498, 2484: smbc_getxattr() fixes.
+    * BUG 1133: Added provision for overloading some global 
+      configuration options via the new, per-user file 
+      ~/.smb/smb.conf.append.
+    * BUG 2543: Properly cache anonymous username when reverting 
+      to anonymous login, in libsmbclient.
+    * BUG 2505: Fix large file support in libsmbclient.
+    * BUG 2564: Ensure correct errno when smbc_opendir() was called 
+      with a file rather than a directory.
+    * Correct deprecated lvalue casts in testsuite/libsmbclient.
+    * BUG 2663.  cli_getattrE() and cli_setattrE() were not 
+      formatting or parsing the timestamp values correctly.
+    * Correctly detect AF_LOCAL support in configure.
+    * Fix problem updating file times on Windows 98 hosts using 
+      libsmbclient.
+    * Fix compile breakage on Solaris by eliminating the use of 
+      ctime_r() in libsmbclient DEBUG statement.
 
-o   Stefan Metzmacher <metze at samba.org>
-    * Refactor Winbind internal parent-child interface tables
-      to achieve better unit testing support.
-    * Add nss_wrapper API for local Winbind unit tests.
-    * Networking fixes to the libreplace library.
-    * Pidl fixes.
-    * Remove unused Winbind pipe calls.
-    * Build fixes.
-    * Fix for a crash bug in pidl generated client code.
-      This could have happend with [in,out,unique] pointers
-      when the client sends a valid pointer, but the server
-      responds with a NULL pointer (as samba-3.0.26a does for some calls).
-    * Change NTSTATUS into enum ndr_err_code in librpc/ndr.
-    * Remove unused calls in the struct based winbindd protocol.
-    * Add --configfile option to wbinfo.
-    * Convert winbind_env_set(), winbind_on() and winbind_off() into macros.
-    * Return rids and other_sids arrays in WBFLAG_PAM_INFO3_TEXT mode.
-    * Implement wbcErrorString() and wbcAuthenticateUserEx().
-    * Convert auth_winbind to use wbcAuthenticateUserEx().
 
+o   Jason Mader <jason at ncac.gwu.edu>
+    * BUG 2483, 2468. 2469, 2478, 2093: Compiler warning fixes.
+    * Various compiler warning fixes about mistyped variables.
+    * BUG 2882, 2885, 2890, 2891, 2900: Various compiler warning fixes 
+      and code  cleanups.
+    * BUG 2527, 2538: Removed unused variables.
 
-o   James Peach <jpeach at samba.org>
-    * Add support for DNS Service Discovery.  Based on work from
-      Rishi Srivatsavai <rishisv at gmail.com>.
 
+o   Marcel <samba.10.maazl at spamgourmet.com>
+    * Fix regression in OS/2 trans2 open code.
 
-o   Andreas Schneider <anschneider at suse.de>
-    * Don't restart winbind if a corrupted tdb is found during
-      initialization.
-    * Fix Windows 2008 (Longhorn) join.
-    * Fix crashbug in winbindd.
-    * Add share parameter "administrative share".
 
+o   Jim McDonough <jmcd at us.ibm.com>
+    * Fixes for samr_lookup_rids() when using ldapsam:trusted=yes
+      (in conjunction with Volker).
+    * BUG 2953: Prevent the credentials chain on DC gets out 
+      of sync with client when NT_STATUS_NO_USER is returned.
+    * Added subcommands to "net rpc vampire" (mostly done by Don 
+      Watson <dwatson at us.ibm.com>) to allow data to be put into an 
+      ldif file instead of actually writing to the passdb.  
+    * BUG 2736: Add retries to workaround winbind race condition 
+      with detecting idle clients.
+    * BUG 2953: Additional fixes for domain trusts.  Also clears
+      up the "bad stub" error when attempting to logon to a Samba
+      domain with a bad username.
 
-o   Karolin Seeger <ks at sernet.de>
-    * Improve error messages of net subcommands.
-    * Add 'net rap file user'.
-    * Change LDAP search filter to find machine accounts which
-      are not located in the user suffix.
-    * Remove smbmount.
 
+o   Luke Mewburn <lukem at NetBSD.org>
+    * Compiler warning fixes.
 
-o   David Shaw <dshaw at jabberwocky.com>
-    * BUG 5073: Allow "delete readonly = yes" to correctly override
-      deletion of a file.
 
+o   Kalim Moghul <kalim at samba.org>
+    * Removed unused printmode command from smbclient.
 
-o   Rishi Srivatsavai <rishisv at gmail.com>
-    * Register the smb service with mDNS if mDNS is supported.
-    * Add smbclient support for basic mDNS browsing.
 
+o   Lars Müller <lmuelle at samba.org>
+    * Re-enable the VERSION_REVISION option in case of another 
+      letter release.
+    * Fix spoolss python bindings after C++ compiler changes and 
+      other python fixes.
+    * BUG 2659: Don't trump on memory in smbtorture.
+    * BUG 2060: Add -fPIC which is the case for all other Samba 
+      shared libs.
+    * Fix argv parsing in "net rpc".
+    * Add support to create position independent executable (PIE) 
+      code if the compiler supports it.
+    * BUG 2767: Add new options to testparm (--show-all-parameters,
+      --parameter-name, and --section-name).
+    * Fix net share migrate files to also migrate the ACLs of 
+      the top level dir of a share.
 
+
+o   Marcel Muller <mueller at maazl.de>
+    * Patch to fix the OS/2 EA_FROM_LIST info level call.
+    * Mangled names fix for OS/2 clients.
+    * Ensure we correctly set the return packet size to include the 
+      pad bytes in reply_readbmpx().
+    * Fix for bug in SMBwriteBraw that incorrectly returned the 
+      number of bytes written. 
+
+
+o   Ricky Nance <ricky.nance at gmail.com>
+    * Implemented mklogon script generator for domain logon scripts.
+
+
+o   James Peach <jpeach at sgi.com>
+    * BUG 1843: Fix quotas (with no soft limits) on IRIX.
+    * BUG 2285: Patch for hires timestamps and efficient notify code.
+    * MS-DFS tidyup patches.
+    * Build fixes on IRIX.
+    * IRIX compiler warning fixes.
+    * BUG 2596: Fix become_root link issues and one IRIX stack 
+      backtrace bug.
+    * Fix for null pointer ACL free.
+    * BUG 2314: Fix const compiler warnings in the quota code.
+
+
+o   Ed Plese <ed at edplese.com>
+    * Fix faulty logic which caused winbindd to return failure 
+      when a user possessed no supplementary groups.
+
+
+o   Marcin Porwit <mporwit at centeris.com>
+    * Initial support for the \eventlog pipe.
+    * Fix a memleak in the eventlog code.
+    * Miscellaneous fixes for Samba's experimental event log support.
+    * Add ServiceQueryConfig2() and ServiceQueryStatusEx() server 
+      calls.
+
+
+o   Tim Potter <tpot at samba.org>
+    * BUG 2940, 2943: Fixed various compiler warnings regarding 
+      mismatched types and unused variables.
+    * BUG 1888, 1894: Fix warnings when time_t is an unsigned type.
+    * BUG 2733: Fix incorrect SHLIBEXT is set when running 
+      configure script on HPUX IA.
+    * Remove unused autoconf #define's.
+    * BUG 2893: Fix inverted assignment in 'net rpc printer' code.
+    * Removed unused function declarations in tdb.h.
+    * BUG 2895: Don't wrap non-existent functions in the python 
+      tdb bindings.
+    * BUG 2623, 2630: $< and $* are not valid in explicit rules 
+      according to POSIX.
+    * BUG 2560: Fix compile error lurking where PATH_MAX is not 
+      defined.
+    * BUG 2625: Remove configure check for FTRUNCATE_NEEDS_ROOT.
+    * BUG 2611: Add fflush(stdout) after displaying username prompt 
+      in smbsh if username not specified on command line.
+    * BUG 2699: Fix for segfault in samba.winbind.auth_crap module 
+    * BUG 2808: Update install swat message to reflect the fact 
+      that swat/README no longer exists.
+
+
+o   Denis Sbragion <d.sbragion at infotecna.it>
+    * BUG 2196: Allow absolute path (system wide) recycle bin.
+
+
+o   Fernando Schapachnik <fernando at mecon.gov.ar>
+    * Add logon hours support for the Postgres backend.
+
+
+o   Richard Sharpe <rsharpe at samba.org>
+    * Fix bug in profiles tool caused by use of MAP_PRIVATE.
+
+o   Joerg Sonnenberger <joerg at leaf.dragonflybsd.org>
+    * BUG 2362: Quota support fix for DragonFly.
+    * Fix dragonfly detection in configure.
+
+
+o   Simo Sorce <idra at samba.org>
+    * Allow Domain Admins to force user sessions to close via the 
+      Windows Server Manager.
+    * Add support to 'net rpc right privileges <name>' to enumerate 
+      accounts which possess a specific privilege.
+    * Fix memory issues issues in vfstest (reported by Rainer Link).
+    * Randomize reloading as to not overload cupsd.
+
+
+o   Smitty <smitty at plainjoe.org>
+    * Compile fixes for smbget when using --enable-developer.
+    * Include LUID values to match Windows privileges since 
+      apparently this matters to printmig.exe
+
+
+o   John Terpstra <jht at samba.org>
+    * Solaris packaging fixes.
+    * Clean up usage help text in "net rpc user"
+
+
 o   Andrew Tridgell <tridge at samba.org>
-    * Fix padding between Winbind 32bit/64bit client library in
-      the request/response structures.
-    * Added a syncops VFS module for file systems which do not
-      guarantee meta-data operations are immediately committed to
-      disk in stable form.
+    * Merge socket wrapper library fixes from Samba 4.
 
 
+o   Brett Trotter <blt at iastate.edu>
+    * Fix definition of global_sid_* in vfs_acl.c.
+
+
+o   Mark Weaver <mark-clist at npsl.co.uk>
+    * Patch to fix sys_select so it can't drop signals if another 
+      fd is ready to read. 
+
+
 o   Jelmer Vernooij <jelmer at samba.org>
-    * Additional portability support for building shared libraries.
+    * Remove --with-manpage-languages configure option.
+    * Merge socket wrapper fixes for IRIX systems from the 
+      Samba 4 branch.
+    * Add socket_wrapper library to 3.0. Can be enabled by passing
+      --enable-socket-wrapper to configure.
+    * Fix build of the various sql pdb backends after new talloc.
 
 
-o   Corinna Vinschen <corinna at vinschen.de>
-    * Get Samba version or capability information from Windows user space.
+o   Qiao Yang <qyang at stbernard.com>
+    * Use our own DC when getting the SID for a domain.
 
 
-Original 3.2.0pre1 commits:
----------------------------
-o   Michael Adam <obnox at samba.org>
-    * Unified POSIX ACL detection including support for FreeBSD and
-      HP-UX.
-    * Performance improvements for Winbind's lookup functions (names,
-      SIDs, and group membership) when joined to an AD domain.
-    * Winbind cache validation support.
-    * Store domain trust passwords for Samba domain controller's in
-      the domain's passdb backend.
-    * Merged \winreg server code from the SAMBA_3_2 development branch.
-    * Fixes for libreplace.
-    * Implement new registry configuration backend.
 
+Release Notes for older release follow:
 
+      --------------------------------------------------
+                   ===============================
+                   Release Notes for Samba 3.0.14a
+                              Apr 14, 2005
+                   ===============================
+
+Common bugs fixed in 3.0.14a include:
+
+  o Compatibility issues between Winbind and Windows 2003 SP1
+    domain controllers (*2k3sp1*).
+  o MS-DFS errors with Windows XP SP2 clients.
+  o High CPU loads caused by infinite loops in the FindNext()
+    server code.
+  o Invalid SMB_ASSERT() which caused smbd to panic on ACL'd 
+    files.
+
+    
+######################################################################
+Changes
+#######
+
+Changes since 3.0.14
+--------------------
+
+commits
+-------
 o   Jeremy Allison <jra at samba.org>
-    * Add support for file system objectIDs.
-    * Winbind cache validation support.
-    * Add in the UNIX capability for 24-bit readX.
-    * Improve Delete-on-Close semantics.
-    * Removal of static file and path name buffers in SMB file serving
-      code.
+    * Fixed invalid SMB_ASSERT() triggered by checking access on
+       ACL'd files.
 
 
-o   Danilo Almeida <dalmeida at centeris.com>
-    * Move the machine account to the OU specified when running "net
-      ads join".
+Changes since 3.0.13
+--------------------
 
+smb.conf changes
+----------------
 
+    Parameter Name                      Action
+    --------------                      ------
+    dos filetimes			Enabled by default
+
+
+commits
+-------
+o   Jeremy Allison <jra at samba.org>
+    * Prevent nt_status code support when negotiating protocols
+      earlier than NT1.
+    * BUG 2533: Remove the UNICODE flags2 bit from SMBsearch calls
+      as this SMB is DOS codepage only.
+    * BUG 2585: Fix printf() issues in smbpasswd which caused
+      seg faults.
+    * BUG 2563: Fix infinite loop on non-existent file with 
+      FindNext().
+    * BUG 2581 (partial): Ensure if realloc fails on an internal 
+      tdb we fail gracefully.
+    * Ensure that 'dos filetimes' works with ACLs.
+    * Set 'dos filetimes = yes' as the default for smb.conf.
+
+      
+o   Gerald (Jerry) Carter <jerry at samba.org>
+    * Workaround autoconf issue to prevent debug symbols from 
+      being included in the default build.
+    * Disable schannel on the \lsarpc pipe in order to successfully 
+      enumerate users and groups (*2k3sp1*)
+    * Fix parsing error in rpc binds which broke NTLMSSP 
+      authentication.   And as a result broke CTL+ALT+DEL password 
+      changes from a Windows 2003 SP1 member of a Samba domain 
+      (*2k3sp1*).
+    * Revert change to FindFirst() server code that broke WinXP
+      SP2 clients from launching *.exe files from a dfs target 
+      share.
+    * BUG 2588: Force smbclient to send netbios messages to port 
+      139 unless otherwise instructed (based on patch from Thomas 
+      Bork).
+      
+
+o   Volker Lendecke <vl at samba.org>
+    * Fix build on FreeBSD 4 where Winbind is not supported.
+    * Fix 'wbinfo --user-sids' when using domain local groups.
+    * Restrict domain local groups reported by 'wbinfo -r' to
+      the Samba server domain and not the users domain.
+
+
+o   Lin Li <linl at xandros.com>
+    * Ensure that winbind initializes internal trusted domain 
+      structures when enumerating users and groups.
+      
+
+o   Tim Potter <tpot at samba.org>
+    * BUG 2565: Fix crash bug and compiler warnings in strchr_m() 
+      test.
+    * Fix compiler warnings.
+
+
+o   <psz at maths.usyd.edu.au>
+    * Fix for possible root squash NFS bugs.
+    
+    
+o   Simo Sorce <irda at samba.org>
+    * Debian packaging fixes.
+    
+
+      --------------------------------------------------
+                   ==============================
+                   Release Notes for Samba 3.0.13
+                            Mar 24, 2005
+                   ==============================
+
+Common bugs fixed in 3.0.13 include:
+
+  o Infinite FindNext() loop from Windows 9x client when
+    copying or deleting files on a Samba file share using 
+    explorer.exe.
+  o Numerous smbclient bugs when listing directories.
+  o Failures in smbclient when connecting to a Windows 9x 
+    file server.
+
+    
+######################################################################
+Changes
+#######
+
+Changes since 3.0.12
+--------------------
+
+o   Jeremy Allison <jra at samba.org>
+    * Fix typo bug in smbclient where flags overwrote info level
+      in the cli_list_new().
+    * Fix old smbclient bug where ff_searchcount was being compared 
+      to -1 resulting in processing a filename twice.
+    * Fix segv in smbclient caused by overwriting the last 2 bytes 
+      in cli_list_new().
+    * BUG 2530: Fix potential segv in smbclient when talking to a 
+      Windows 9x file server.
+    * Fix last entry offset in cli_list_new() when using a 
+      FindFirst/FindNext info level of 0x104.
+    * BUG 2501: Stop Win98 from looping doing FindNext on a 
+      singleton directory. 
+    * BUG 2521: Fix error in access checks when user group ACLs.
+      
+      
+o   Gerald (Jerry) Carter <jerry at samba.org>
+    * BUG 2497: Fix bug in rpcclient's deletedriverex when asking 
+      to delete all versions of a driver.
+    * BUG 2517: use the realm from smb.conf for 'net ads info' when 
+      'disable netbios = yes'.
+    * BUG 2530: Ensure that smbclient correctly detects MS-DFS root
+      shares.  
+    * Update RedHat packaging files to require cups support.  Also
+      remove requirement for 'idmap {uid,gid}' settings in smb.conf
+      from winbindd init script.
+    * BUG 2516: fix compile issue on True64.
+    
+      
+      
+o   Guenther Deschner <gd at samba.org>
+    * Check for the correct cli-struct when copying files in 'net 
+      rpc printer' routines.
+
+
+o   Herb Lewis <herb at samba.org>
+    * Fix incorrect test in 'net rpc user' when the user is not
+      a member of any groups.
+      
+      
+o   Jim McDonough <jmcd at us.ibm.com>
+    * Make sure that enum_group_members() searches the correct suffix.
+    
+
+      --------------------------------------------------
+                   ==============================
+                   Release Notes for Samba 3.0.12
+                            Mar 18, 2005
+                   ==============================
+
+Common bugs fixed in 3.0.12 include:
+
+  o Winbind failures when using 'disable netbios = yes'
+  o Failure to establish a trust relationship via 'net rpc trust 
+    establish'
+  o Various portability & compiler issues.
+  o Read only file deletion failure caused by new delete semantics 
+    in Windows XP SP2 and the MS 04-044 security hotfix.
+  o Error messages from shared Excel workbooks residing on Samba 
+    file shares.
+  o Missing files in the output of smbclient -c 'dir' when run 
+    against Windows file servers.
+  o Inability for Print Administrators to pause/resume/purge print 
+    queues.
+
+Additional features introduced in Samba 3.0.12:
+
+  o Performance enhancements when serving directories containing 
+    large number of files.
+  o MS-DFS support added to smbclient.
+  o More performance improvements when using Samba/OpenLDAP based 
+    DC's via the 'ldapsam:trusted=yes' option.
+  o Support for the Novell NDS universal password when using the
+    ldapsam passdb backend.
+  o New 'net rpc trustdom {add,del}' functionality to eventually 
+    replace 'smbpasswd {-a,-x} -i'.
+  o New libsmbclient functionality.
+
+
+
+=======================
+Large Directory Support
+=======================
+
+Samba 3.0.12pre1 introduces a specific mechanism for dealing
+with file services that frequently contain a large number of files
+per directory.  Historically Samba's performance has suffered 
+in such environments due to the translation from case 
+insensitive lookups by Windows client to the case sensitive
+storage mechanisms used by UNIX filesystems.
+
+Configuration details along with a short HOWTO can be found at:
+
+http://www.samba.org/samba/ftp/HOWTO/Samba-LargeDirectory-HOWTO
+
+
+==================================
+libsmbclient Binary Compatibility
+==================================
+
+Please note that a change has been made to the _SMBCCTX structure 
+in source/include/libsmbclient.h.  This change is not backwards
+compatible with applications linked against the libsmbclient.so
+library from Samba 3.0.11.  However, it is compatible with all 
+other Samba 3.0.x releases.  This means that it will be most likely
+be necessary to recompile any applications linked against the 
+3.0.11 version of the library.
+
+
+######################################################################
+Changes
+#######
+
+smb.conf changes
+----------------
+
+    Parameter Name                      Action
+    --------------                      ------
+    allocation roundup size		New
+    log nt token command		New
+    write cache				Deprecated
+
+
+
+Changes since 3.0.11
+--------------------
+
+commits
+-------
+o   Jeremy Allison <jra at samba.org>
+    * BUG 2146: Return correct allocation sizes so as not to crash 
+      the VC++ compiler.
+    * BUG 962: Ensure that parsing of service names in smb.conf is 
+      multibyte safe.
+    * BUG 2201, 2227: Support new delete semantics used by MS04-044
+      and XP SP2.
+    * BUG 1525: Correctly timestamps interpreted on 64-bit time_t 
+      values (patch submitted by Jay Fenlason <fenlason at redhat.com>).
+    * Add special hooks when serving directories containing large
+      numbers of files.
+    * Ensure that WINS negative name query responses and WACK 
+      packets use the correct RR type of 0xA instead of reflecting 
+      back what the query RR type was (0x20).
+    * BUG 2310: Only do 16-bit normalization on small dfree request.
+    * BUG 2323: Correct authentication failure when using plaintext 
+      passwords from Windows XP clients.
+    * BUG 2146: Add new smb.conf option 'allocation roundup size' to
+      work around issues building MS Visual Studio 6.0 project 
+      on a Samba file share while restoring the pre-3.0.21pre1 
+      behavior by default.
+    * BUG 2399 (partial): Ensure we use SMB_VFS_STAT instead of 
+      stat when checking for existence of a pathname.
+    * Check the sticky bit on the parent directory for supporting
+      the new WinXP SP2 file deletion semantics.
+    * Various oplock, share mode, and byte range locking fixes
+      found by Connectathon tests.
+    * BUG 2271: Fix resume key issues in trans2FindFirst() client 
+      code (inspired by patch from Satwik Hebbar).
+    * BUG 2382, 2045: More pending modtime and delayed write fixes
+      for MS Excel (incorporates partial patches from 
+      ke_miyata at itg.hitachi.co.jp).
+    * Debug log message cleanups.
+    * Add case insensitive search for a principal match on logon 
+      verification in the system keytab (based on patch by 
+      Michael Brown <mbrown at fensystems.co.uk>).
+    * Revert the previous SMB signing change from Nalin Dahyabhai
+      when using DES keys.
+    * Add missing RESOLVE_DFSPATH() calls for older SMB commands.
+    * Fix FindFirst() server code to deal with resume names of ".."
+      and "." (found by Jim McDonough).
+    * BUG 2451: Fix missing functions in full audit VFS module.
+    * Ensure that smbd logs failures reported by DISK_FREE()
+      (reported by Ying Li <ying.li2 at hp.com>).
+    * Ensure that smbclient obeys the max protocol argument again.
+    * BUG 2335: Return correct error code for OS/2 clients (based on
+      negotiated protocol level).
+    * BUG 2460, 2464: remove dead code and unused variables 
+      (reported by Jason Mader).
+
+
 o   Andrew Bartlett <abartlet at samba.org>
-    * Tighten authentication protocol defaults in client tools and
-      servers.
+    * Avoid length-limited intermediate copy of NT and LM responses 
+      in NETLOGON client.
+    * Debug message cleanups in the NTLMSSP implementation.
 
 
+o   Manuel Baena <mbaena at lcc.uma.es>
+    * Print actual error message in smbmnt.c:fullpath().
+
+
+o   Vince Brimhall <vbrimhall at novell.com>
+    * Add support for Novell NDS universal password.
+    * BUG 2424: Ensure that uidNumber and gidNumber use match 
+      the RFC2307 schema.
+    * BUG 2453: Change the way pdb_nds.c handles users with no 
+      Universal or Simple Password.
+    * NDS schema file corrections.
+
+
 o   Gerald (Jerry) Carter <jerry at samba.org>
-    * Implement support for one-way trusts and two-way cross-forest
-      transitive trust in winbindd.
-    * Fixes for Winbind's offline/disconnected logon support when
-      using remote idmap backends.
-    * Fix LookupNames and LookupSids to use the same resolution
-      heuristics as Windows XP.
-    * Fix lockups in Winbind when running nscd.
-    * UPN logon support in pam_winbind.
-    * Add support for GNU linker scripts when build shared libraries
-      (based on work by Julien Cristau <jcristau at debian.org> and James
-      Peach).
+    * Add trans2 client call for checking dfs referrals
+    * Convert smbclient to use TRANS_QPATHINFO(SMB_QUERY_FILE_BASIC_INFO) 
+      when checking directories on modern CIFS servers.
+    * Add MS-DFS support to smbclient.
+    * Code cleanup of adt_tree.[ch].
+    * Add missing checks to allow root to manage user rights.
+    * Allow domain admins to manage rights assignments on domain members
+      servers.
+    * BUG 2333: Use the lpq command to pass in the correct printer name 
+      for cups_queue_get().  CUPS backend now sets 'lpq command= %p' as 
+      the default.
+    * BUG 1439: make sure to initialize pointer to prevent invalid 
+      free()'s on exit.
+    * BUG 2329: fix to re-enable winbindd to locate DC's when 'disable 
+      netbios = yes'.
+    * Add cups-devel to BuidlRequires directive in Fedora spec file.
+    * BUG 858: Fix order of popt args evaluation so we don't crash 
+      when given no command line args.
+    * Remove dependency on bash for source/autogen.sh.
+    * Fix clitar.c compile issues caused by broken MIT 1.4 headers.
+    * Implement MS-DFS for recursive directory listings in smbclient.
+    * BUG 2394: Fix nmbd linking issue on IRIX.
+    * Only display the publish check box in the client's printer 
+      properties dialog if we are a member of an AD domain.
+    * BUG 2363: allow 'in use' driver to be removed as long as 
+      one 'Windows NT x86' driver remains.
+    * BUG 1881: Allow PRINT_SPOOL_PREFIX to be set in local.h for 
+      porting purposes.
+    * Enforce better printer.tdb cache consistency when removing 
+      jobs from a print queue via SMB.
+    * Ensure that pause/resume/purge print queue commands are run
+      with the appropriate level of privilege necessary to actually
+      work.
+    * BUG 2355: Use bsd style commands (lpq, lpr, etc...) for default
+      for 'printing = cups' installations that do not actually have 
+      libcups.
+    * BUG 2425: Remove incorrect checks for Win98 DFS clients.
+    * BUG 2215: Rewrite questionable code that was causing gcc to 
+      choke.
+    * Add server support for LsaLookupPrivValue().
+    * Various small compile fixes and cleanup warnings.
+    * BUG 2456: Fix compile failure on non-gcc platforms due to
+      non-standard pragma.
 
 
+o   Kevin Dalley <kevin at kelphead.org>
+    * BUG 2398: Don't force smbclient to assume a dry run if the 
+      target tarfile is /dev/null.
+
+
 o   Guenther Deschner <gd at samba.org>
-    * Additional support for decoding and downloading group policy
-      objects from Active Directory.
-    * Improvements to "net ads keytab" command.
-    * Fixes for linking against Heimdal Kerberos client libs.
-    * Support LDAP range retrieval searches.
-    * Fixes for failure to refresh user ticket caches in Winbind.
-    * UPN logon support in pam_winbind.
-    * Add KDC locator plugin for MIT kerberos 1.6 or later.
+    * Fix crash bug in the client-spoolss enumdataex-call.
+    * Expand the valid-workstation-scheme by expanding names 
+      beginning with a plus (+) as a unix group.
+    * Allow own netbios name to be set in smbclient's session setup.
+    * Better handling of LDAP over IPC connections that have expired 
+      on the LDAP-Server.
+    * Fix pipe-mismatch for NETDFS in cli_dfs.c.
+    * Add examples/misc/adssearch.pl.
+    * BUG 2343: Build fixes.
+    * Support get_user_info_7 in SAMR server RPC.
+    * Fix server_role in the samr_query_dom_info calls.
+    * Add example perl script to check for multiple LDAP entries
+      after running 'net rpc vampire'.
+    * Add more output when listing printer forms via rpcclient.
+    * Debug log message cleanup.
 
 
-o   Steve Langasek <vorlon at debian.org>
-    * Allow SIGTERM to cause nmbd to exit while awaiting a interface
-      to come up.
+o   Steve French <sfrench at us.ibm.com>
+    * On failed mount (ENXIO) retry share name in uppercase (fix
+      mount to FastConnect AIX SMB server).
+    * Add missing FILE_ATTRIBUTE_XXX defines to smb.h.
+    * Ignore user_xattr mount parm (mount.cifs) so as not to confuse
+      it with a user name.
+    * Update for new CIFS POSIX info levels.
+    * Ignore users mount parm in mount.cifs.
 
+o   SATOH Fumiyasu <fumiya at samba.gr.jp>
+    * BUG 1549: Don't truncate service names in smbstatus.
 
+
+o   William Jojo <jojowil at hvcc.edu>
+    * BUG 2445: Patch to avoid default ACLs on AIX.
+
+
+o   S Murthy Kambhampaty <smk_va at yahoo.com>
+    * Add idmap_rid module to Fedora and RedHat spec files.      
+
+
 o   Volker Lendecke <vl at samba.org>
-    * Merge experimental cluster support patches from the ctdb branch.
-    * Add tdb storage abstraction for ctdb.
-    * Use IDL for internal message passing system.
-    * Add client support for the SamLogonEx() authentication request.
-    * Implement RPC proxy stubs in the Samba server code to allow
-      replacing implementation functions one by one.
-    * Remove static incoming and outgoing buffers from core server SMB
-      packet processing code.
-    * Add "net sam rights" command.
+    * BUG 2401: Flush internal getpwnam() cache after deleting a 
+      user.
+    * BUG 1604: Make winbind work with more than 10 trusted domains.
+    * Cleanup various compiler warnings.
+    * Fix a memory leaks in privileges code and passdb backends.
+    * Fixes for samr_lookup_sids() client call.
+    * Optimize _samr_query_groupmem with LDAP backend for large 
+      domains.
+    * Support SIDs as %s replacements in the afs username map 
+      parameter.
+    * Add 'log nt token command' parameter. If set, %s is replaced 
+      with the user sid, and %t takes all the group sids.
+    * Do not use the "Local Unix Group"-default description for 
+      all kinds of group-mappings. 
+    * Fix uninitialized variable in Linux nss_winbind library.
+    * Move 'net afskey' into a subcommand of its own, 'net afs key'.
+    * Implement 'net afs impersonate'.
+    
 
+o   Herb Lewis <herb at samba.org>
+    * Fix build problem when HAVE_POSIX_ACL is not defined.
+    * BUG 2417: Add help lines for net rpc group addmem and 
+      delmem commands.
+    
 
-o   Steve French <sfrench at samba.org>
-    * Fixes for mount.cifs Linux utility.
+o   Derrell Lipman <derrell.lipman at unwireduniverse.com>
+    * Add support to libsmbclient for getting and setting DOS 
+      attributes using EA functions.
+    * Fix libsmbclient's URL encoding/decoding.
+    * Replace browse listing URI queries with an internal options 
+      structure (previous method violated the SMB URI syntax).
+    * Allow tree connects to be multiplexed over a single CIFS server 
+      connection context.
+    * Ensure that cli_tdis() sets the cnum field to -1 so that callers
+      can determine a dead tree connection.
+    * Implement better solution for backwards binary compatibility
+      in libsmbclient while adding new fields to struct _SMBCCTX.
 
 
+o   Mark Loeser <halcy0n at gentoo.org>
+    * BUG 2443: Compile fix for gcc4.
+
+
+o   Jim McDonough <jmcd at us.ibm.com>
+    * BUG 2338: Fix coredump when OS/2 checks for long file name 
+      support (with .+,;=[].) (thanks to Guenter Kukkukk).
+
+
+o   Jason Mader <jason at ncac.gwu.edu>
+    * Compiler warning fixes (BUGS BUG 2132, 2134, 2289, 2327, 2340,
+      2341, 2342)
+
+
+o   Jim McDonough <jmcd at us.ibm.com>
+    * Fixes for server schannel implementation when 'restrict 
+      anonymous = 1' is set in smb.conf.
+    * Fix bug in server side lookupsids reply that crashed lsass.exe 
+      on Windows clients.
+    * Fix 'net rpc trustdom establish'.
+    * BUG 2062: Turn off broadcast for all 390 NICs.
+    * Fix 'net rpc trustdom add' to correctly add new domain trust 
+      accounts.  This will eventually replace 'smbpasswd -a -i'.
+    * Implement 'net rpc trustdom del', including client side of 
+      samr_remove_sid_from_foreign_domain.
+    * Bring IBM Directory Server schema up to date with openldap 
+      schema.
+    * Allow for better protection of sensitive attributes in IBM
+      Directory Server.
+
+
+o   Stefan Metzmacher <metze at samba.org>    
+    * Fix memleaks in the nttrans code.
+
+
+o   Mike Nix <mnix at wanm.com.au>
+    * Add SMBsplopen and SMBsplclose client calls.
+
+
+o   Justin Ossevoort <justin at snt.utwente.nl>
+    * BUG 2316: Fix crashes in pdb_pgsql.
+
+
+o   James Peach <jpeach at sgi.com>
+    * Fixes in string handling code.
+    * Fix oplock2 test in client smbtorture.
+
+
+o   Tim Potter <tpot at samba.org>
+    * Fix up example pdb modules after prototype change for 
+      setsampwent.
+    * BUG 2058: Fix for shared object creation in examples.
+    * BUG 2315: Fix segv in LSA privileges server code.
+    * Build fixes for python wrapper libraries.
+
+
+o   Richard Sharpe <rsharpe at samba.org>
+    * BUG 2044: Fix segv in profiles tool.
+    * Fix bogus error messages when enumerating user group 
+      membership via 'net rpc'.
+
+
+o   Simo Sorce <idra at samba.org>
+    * Debian packaging fixes.
+
+
+o   John Terpstra <jht at samba.org>
+    * Add the capability to set account description using pdbedit.
+
+
+o   Doug VanLeuven <roamdad at sonic.net> 
+    * Add more case/realm/name permutations to the Kerberos keytab.
+    * AIX compile fixes.
+
+
+o   Jelmer Vernooij <jelmer at samba.org>
+    * BUG 892: Default unknown_6 field to 1260 in mySQL pdb module.
+    * BUG 1957: Implement minimal update of fields in mySQL pdb 
+      module.
+    
+
+o   Torsten Werner <torsten.werner at assyst-intl.com>
+    * BUG 2405: Define 'lpstat' printcap output on HPUX.
+    
+
+o   Shlomi Yaakobovich" <Shlomi at exanet.com>
+    * Detect infinite loops when traversing tdbs.
+
+
+      --------------------------------------------------
+      		   ==============================
+                   Release Notes for Samba 3.0.11
+                             Feb 5, 2005
+                   ==============================
+
+Common bugs fixed in 3.0.11 include:
+
+  o Crash in smbd when using CUPS printing.
+  o Parsing error of other SIDs included in the user_info_3
+    structure returned from domain controllers.
+  o Inefficiencies when searching non-AD LDAP directories.
+  o Failure to expand variables in user domain attributes
+    in tdbsam and ldapsam.
+  o Memory leaks.
+  o Failure to retrieve certain attribute when migrating from 
+    a Windows DC to a Samba DC via 'net rpc vampire'.
+  o Numerous printing bugs bugs including memory 
+    bloating on large/busy print servers.
+  o Compatibility issues with Exchange 5.5 SP4.
+  o sendfile fixes.
+
+Additional features introduced in Samba 3.0.11:
+
+  o Winbindd performance improvements.
+  o More 'net rpc vampire' functionality.
+  o Support for the Windows privilege model to assign rights
+    to specific SIDs.
+  o New administrative options to the 'net rpc' command.
+
+
+============
+LDAP Changes
+============
+
+If "ldap user suffix" or "ldap machine suffix" are defined in
+smb.conf, all user-accounts must reside below the user suffix,
+and all machine and inter-domain trust-accounts must be located 
+below the machine suffix.  Previous Samba releases would fall 
+back to searching the 'ldap suffix' in some cases.
+
+
+===============
+Privilege Model
+===============
+
+Samba 3.0.11 supports the following assignable rights
+
+SeMachineAccountPrivilege  Add machines to domain
+SePrintOperatorPrivilege   Manage printers
+SeAddUsersPrivilege        Add users and groups to the domain
+SeRemoteShutdownPrivilege  Force shutdown from a remote system
+SeDiskOperatorPrivilege    Manage disk shares
+
+These rights can be assigned to arbitrary users or groups
+via the 'net rpc rights grant/revoke' command.  More details
+of Samba's privilege implementation can be found in the 
+Samba-HOWTO-Collection.
+    
+
+######################################################################
+Changes
+#######
+
+Changes since 3.0.10
+--------------------
+
+smb.conf changes
+----------------
+
+    Parameter Name                      Action
+    --------------                      ------
+    afs token lifetime			New
+    enable privileges			New
+    ldap password sync			Alias
+    min password length			Deprecated
+    winbind enable local accounts	Deprecated
+
+
+commits
+-------
+o   Jeremy Allison <jra at samba.org>
+    * Extend vfs to add seekdir/telldir/rewinddir.
+    * Fix dirent return.
+    * Fix bugs when handling secondary trans2 requests.
+    * Implementation of get posix acls in UNIX extensions.
+    * Added set posix acl functionality into the UNIX extensions code.
+    * Updated config.guess/config.sub .
+    * Fix error reply when 'follow symlinks = no'.
+    * BUG 1061, 2045: Only set mtime from pending_modtime if it's 
+      not already zero.
+    * Fixes for LARGE_READX support.
+    * Fix the problem we get on Linux where sendfile fails, but we've
+      already sent the header using send().
+    * BUG 2081: Ensure SE_DESC_DACL_PROTECTED is set if 'map acl 
+      inherit = no'.
+    * BUG 2088: Ensure inherit permissions is only applied on a new 
+      file, not an existing one.
+    * Don't go fishing for the krb5 authorization data unless we know
+      it's there.
+    * Fixes for libsmbclient to ensure that interrupted system calls
+      are restarted minus the already expired portion of the timeout
+      (based on work by Derrell Lipman).
+    * More Unicode string parsing fixes.
+    * Convert the winreg pipe to use WERROR returns.
+    * Make all LDAP timeouts consistent (input from Joe Meadows 
+      <jameadows at webopolis.com>).
+    * BUG 2231: Remove double "\\" from client findfirst.
+    * BUG 2238: Fix memory leak in shadow copy vfs.
+    * Return correct DOS/NT error code on transact named pipe on 
+      closed pipe handle.
+    * BUG 2211: Fix security descriptor parsing bug (based on work by 
+      Mrinal Kalakrishnan <mail at mrinal.net>).
+    * BUG 2270: Fix memory leaks in cups printing backend support 
+      (based on work by Lars Mueller).
+    * BUG 2255: Fix debug level in Kerberos error messages.
+    * BUG 2110: Ensure we convert to ucs2 correctly after the 
+      CAN-2004-0930 patch.
+    * Make strict locking an enum. Auto means use oplock optimization.
+    * Fix client  & server to allow 127k READX calls.
+    * More *alloc fixes (includes additional fixes by Albert Chin.
+    * Catch sendfile errors correctly and return the correct values 
+      we want the caller to return.
+    * BUG 2092: Prevent auto-anonymous logins via libsmbclient 
+      for better use by desktop environments such as GNOME.
+    * Ensure we can't remove a level II oplock without having the
+      shared memory area locked.
+            
+
+o   Timur Bakeyev <timur at com.bat.ru>
+    * BUG 2100: change the way we check for errors after a dlopen().
+    * BUG 2263: Guard base64_encode_data_blob() against empty blobs.
+    
+    
+o   Andrew Bartlett <abartlet at samba.org>
+    * Clarify error message when 'lanman auth = no'.
+    * Remove the unnecessary UTF-8 conversion calls in the calls to
+      auth_winbind from smbd.
+    * Don't store the auth-user credentials with the cli_state* as 
+      this can cause the schannel setup to fail when the auth-user
+      domain is not our primary domain.
+
+
+o   Grigory Batalov <bga at altlinux.org>
+    * Fix encoding while receiving of a message which was actually 
+      sent using STR_ASCII.
+
+
+o   Daniel Beschorner <db at unit-netz.de>
+    * BUG 603: Correct access mask check for _samr_lookup_domain()
+      to work with Windows RAS server
+
+
+o   Jerome Borsboom <j.borsboom at erasmusmc.nl>
+    * Fix missing printer_tdb reference decrement.
+    
+
+o   Gerald (Jerry) Carter <jerry at samba.org>
+    * BUG 2073: fall back to smb_name if current_user_info is not
+      available in lp_file_list_changed().
+    * Fixes the spurious 'register_message_flags: tdb fetch failed' 
+      errors.
+    * Don't run the background LPQ daemon when we are running in
+      interactive mode.
+    * prevent the background LPQ daemon from updating the print queue
+      cache just because multiple smbd processes sent a message that
+      it was out of date.
+    * consolidate printer searches to use find_service rather than 
+      for(...) loops.
+    * BUG 2091: don't remove statically defined printers in 
+      remove_stale_printers().
+    * Fix logic error in add_a_form() that only compared N characters 
+      instead of the entire form name.
+    * BUG 2107: fix memory bloating caused by large numbers of 
+      print_queue_updates() requests sent via messages.tdb.
+    * Check the setprinter(3) based on the access permissions on 
+      the handle and avoid the call to print_access_check().
+    * Re-instantiate previous semantics for calling init_unistr2() 
+      with a NULL source buffer.
+    * Support Windows privilege model for assigning rights
+      to specific SIDs.  Based on work by Simo Sorce in the trunk 
+      svn branch.  This feature is controlled by the 'enable 
+      privileges = [yes|no]' smb.conf(5) option.
+    * Add some smb.conf scripts for add/delete/change shares and 
+      deleting cups printers.
+    * Expand variables in the profile path, logon home and logon script 
+      values when using either tdbsam or ldapsam.
+    * Add Domain Admins (Full Control) to the default printer security 
+      descriptor if we are a DC.
+    * RedHat and Fedora Packaging fixes for perl dependencies.
+    * Remove unused schema items from OpenLDAP schema file.
+    * Remove duplicate enumeration of "Windows x86" architecture
+      when listing printer drivers via rpcclient.
+    * Fail set_privileges() if 'enable privileges = no' to prevent 
+      confused admins.
+    * Fix segfault in cups_queue_get().
+    * Tighten restrictions on changing user passwords when 
+      the connected user possesses the SeMachineAccountPrivilege.
+    * Ensure we set NETBIOSNAME.domainname for the long machine name
+      when publishing printers in AD (based on input from Rob Foehl).
+    * Mark 'winbind enable local accounts' as deprecated.
+    * Mark testprns tool as deprecated.
+    * Allow root to grant/revoke privilege assignments.
+    * Correct interaction between user rights and se_access_check() on
+      SAMR objects.
+    * BUG 2286: Fix typo OpenLDAP schema file for sambaConfig object 
+      class.
+    * BUG 2262: Add support in configure.in for *freebsd6*.
+    * BUG 2266: Portability fixes for quota code on FreeBSD4.
+    * BUG 2264: Remove shutdown and abortshutdown commands from 
+      rpcclient in favor of using the same functions in 'net'.
+    * BUG 2295: Prevent smbd from returning an empty server name
+      in certain lanman api calls.
+    * BUG 2290: Fix autogen.sh script in examples (based on original
+      patch from Lars Mueller).
+    * Fix bug enumerating domain trusts in security = ads.
+    * Fix segv in rpcclient's dsenumdomtrusts.
+    * Fix bug in expansion of %U and %G in included filenames.
+    * BUG 2291: Restrict creation of server trust and domain trust
+      accounts to members of the "Domain Admins" group.
+ 
+o   Nadav Danieli <nadavd at exanet.com>
+    * Short circuit some is_locked() tests if we are oplocked.
+    
+    
+o   Guenther Deschner <gd at samba.org>
+    * Allow 'localhost' as a valid server name in the smbd for the
+      spoolss calls.
+    * Fix KRB5_SETPW-defines, no change in behavior (Thanks to Luke
+      Mewburn for the input).
+    * BUG 2059: Add additional checks needed after logic change to the
+      HAVE_WRFILE_KEYTAB detection test.
+    * BUG 1076: Fix interaction with Exchange 5.5. SP4 and a 
+      Samba DC.  Allow us to lookup at least our own SID.
+    * More fixes to have proper German in swat (Thanks to Reiner 
+      Klaproth and Björn Jacke.
+    * BUG 404, 2076: Allow to set OWNER- and GROUP-entries while 
+      setting security descriptors with smbcacls and using with 
+      the -S or -M switch. 
+    * Include the munged_dial, bad_password_count, logon_count, and 
+      logon_hours attributes when running 'net rpc vampire'.
+    * Fix segfault in idmap_rid.
+    * When winbindd is operating in the multi-mapping mode of 
+      idmap_rid, allow BUILTIN domain-mapping.
+    * Display infolevel 12 in query_dom_info in rpcclient.
+    * Fix bug in winbindd's lowercasing of usernames.
+    * Allow -v or -l for displaying verbose groupmap-listing 
+      as well as "verbose".
+    * Backport Samba4 SAM_DELTA_DOMAIN_INFO for use in 'net rpc 
+      vampire'.
+    * Close LDAP-Connection before retrying to open a new connection 
+      in the retry-loop.
+    * Marking "min password length" as depreciated.  
+    * Implement SAMR query_dom_info-call info-level 8 server- and 
+      client-side, based on samba4-idl.
+    * Allow rpcclient to define a port to use when connecting 
+      to a remote server.
+    * Allow Account Lockout with Lockout Duration "forever" (until 
+      admin unlocks) to be set and displayed in User Manager.
+    * Allow to set acb_mask in rpcclient's enumdomusers.
+    * Add more generic rootDSE inspection function to check 
+      for given controls or extensions and remember these on a 
+      per server basis.
+    * Improve LDAP search efficiency by passing the acb_mask to 
+      pdb_setsampwent().
+    * Fixes for ldapsam_enum_group_memberships().
+    * Add createdomgroup to rpcclient.
+    * Add "net rpc user RENAME"-command.
+    * Display sam_user_info_7 in rpcclient.
+    * Make multi-domain-mode in idmap_rid accessible from outside 
+      (can be compiled with -DIDMAP_RID_SUPPORT_TRUSTED_DOMAINS).
+    * When vampiring account policy AP_LOCK_ACCOUNT_DURATION honor 
+      "Lockout Duration: Forever".
+    * Fix configure.in tests using KRB5_CONFIG variable and krb5-
+      config utility.
+    * Require assignment of Administrator SID in the passdb 
+      backend.  Fall back to the default name of 'Administrator' if
+      the lookup fails rather than using the first name in the
+      default 'admin users' list.
+    * Enhance LDAP failure debug messages.
+    * BUG 2291: Call the 'add machine script' for server trust and 
+      domain trust accounts as well as workstation accounts.
+    
+    
+o   Levente Farkas <lfarkas at lfarkas.org>
+    * BUG 2299: Better logrotate scripts for RedHat and Fedora 
+      packages.
+
+
+o   Jay Fenlason <fenlason at redhat.com>
+    * Fix crash in 'net join' due to calling free on 
+      static buffers.
+    * Several patches from RedHat's Fedora Core RPMS.
+
+
+o   Rob Foehl <rwf at loonybin.net>.
+    * Compiler warnings.
+    * Try modifying printer published attributes before adding it a
+      new entry in AD.
+    * Solaris packaging fixes.
+    * Don't force the cups printer-make-and-model tag as the comment
+      for autoloaded printers.
+    * Implement caching of names from printcap to support a true
+      'printcap cache time'.
+
+
+o   Johann Hanne <jhml at gmx.net>
+    * BUG 2038: Only fail winbindd_getgroups() if all lookups fail.
+
+
+o   Jeff Hardy <hardyjm at potsdam.edu>
+    * Example script for 'add print command' when using CUPS.
+
+
+o   Deryck Hodge <deryck at samba.org>
+    * Add -P (--password-only-menu) to SWAT for displaying only the
+      password change page to non-root users.
+
+
+o   David Hu <david.hu at hp.com>
+    * Copy structure from print_queue_update() message rather than 
+      referencing it.  Fixes seg fault on HP-UX.
+      
+      
+o   Buck Huppmann <buckh at pobox.com>
+    * BUG 2186: Don't free uninitialized credentials.
+    * BUG 2189: Add the HOST/fqdn servicePrincipalName even when 
+      dnsDomainName != realm.
+   
+
+o   Björn Jacke <bjoern at j3e.de>
+    * BUG 2040: Ensure the locale is reset to C to get ASCII-
+      compatible toupper/lower functions.
+
+
+o   William Jojo <jojowil at hvcc.edu>
+    * Fix HPUX sendfile and add configure.in tests and code for
+      sendfile on AIX.
+    * AIX 5.3 compile fixes.
+
+
+o   Volker Lendecke <vl at samba.org>
+    * Optimize anonymous session setups by workstations in a 
+      Samba domain.
+    * Reimplment the QueryUserAliases() server RPC reply.
+    * Re-add the getpwnam-cache for performance.
+    * Cache the result of a pdb_getsampwnam for later SID lookup 
+      queries.
+    * Unify the means of localtaing a user's global groups on a 
+      Samba DC.
+    * Fix bug when serving the 'Start Menu' in a roaming user profile..
+    * Map more pre-defined NT security descriptors to AFS acls.
+    * Add timeout to AD search requests.
+    * If a connection to a DC is requested (in winbindd), open
+      connections simultaneously to all DCs found.
+    * Memleak fixes.
+    * Fix logic error in handling of 'printcap name' parameter.
+    * Prevent winbindd from SPAM'ing the log files with 'user root 
+      does not exist'.
+    * Backport samr_DomInfo2 IDL specification from Samba 4.
+    * Implement smbstatus -n, don't lookup users and groups.
+    * Implement simple mapping that maps the space to another character 
+      defined by afsacl:space.
+    * Add support for 'net idmap delete <idmap-file> <SID>'.
+    * Add new parameter 'afs token lifetime' tells the AFS client 
+      when to throw away a token (patch from kllin at it.su.se).
+    * Initial work to allow support for multiple pipe opens on a 
+      single cli_state*.
+    * Ensure that we still retrieve the netbios name of any DC 
+      listed as a 'password server' to work around cases where the 
+      DC was defined using an IP address or fqdn.
+    * Fix memleak in winbindd connection code.
+    * Fix cli_samr_queryuseraliases.
+    * Allow wbinfo --user-sids to expand expand domain local groups.
+    * Allow 'rpcclient -c enumtrust' to enumerate more than 10 trusts.
+    * Fix parsing of other_sids in net_user_info3.
+    * Correct bad failure logic when user was not a member of any 
+      domain local groups.
+    
+
+o   Jason Mader <jason at ncac.gwu.edu>
+    * BUG 2113, 2289: Remove dead code.
+
+
+o   Jim McDonough <jmcd at us.ibm.com>
+    * BUG 1952: Try INITSHUTDOWN pipe first, used by newer 
+      clients.  If it fails, fall back to WINREG.
+    * BUG 1770: Remove READ_ATTRIBUTES from GENERIC_EXECUTE.
+    * BUG 2198: Set password last change time when running 'net rpc 
+      vampire'.
+    * Add "refuse machine password change" policy field.
+
+
+o   Luke Mewburn <lukem at NetBSD.org>
+    * BUG 2150: shmget() - Use POSIX definitions instead of non-
+      standard SHM_.
+      
+
+o   Stefan Metzmacher <metze at samba.org>    
+    * autogen.sh fixes.
+
+
+o   Buchan Milne <bgmilne at mandrake.org>
+    * Mandrake packaging fixes.
+
+
+o   Lars Mueller <lmuelle at samba.org>
+    * Fix build of libsmbclient on x86_64.
+    * BUG 2013: Fix testsuite build issues when libsmbclient.so 
+      is installed in a non-default location.
+    * BUG 2050: Calculate max_fd for select correctly.
+    * Fix inverted logic heck for HAVE_WRFILE_KEYTAB in autoconf 
+      script.
+
+
+o   Jason Mader <jason at ncac.gwu.edu>
+    * BUG 2069: Remove unused variables.
+    * BUG 2075: Remove dead code paths.
+    * BUG 2083: Fix compiler warnings caused by bad type casts.
+
+
+o   James Peach <jpeach at sgi.com>
+    * Fix rewinddir -> rewind_dir when using VFS macros.
+    
+
+o   Gavrie Philipson <gavrie at disksites.com>
+    * BUG 1838: Remove stale printers imeeddiately when 
+      processing a SIGHUP and during smb.conf reload.
+
+      
+o   Tim Potter <tpot at samba.org>
+    * BUG 2080: Fix duplicate call to pdb_get_acct_desc().
+    * BUG 2168: Fix cast in SMB_XMALLOC_ARRAY.
+    * Change the license for the winbindd external interface 
+      more liberal.
+    * HP-UX compile fixes.
+    * Compile fixes after new setsampwent() API.
+
+
+o   Richard Renard <rrenard at idealx.com>
+    * Update Netscape DS 5.2 LDAP schema.
+
+
+o   Simo Sorce <idra at samba.org>
+    * Backport pdbedit changes from trunk.
+    * Allows the add/change share command to create the shared 
+      directory directory on disk.
+    * Log a warning in testparm if a print command is defined for
+      a print service using 'printing = cups'.
+     
+o   Jelmer Vernooij <jelmer at samba.org>
+    * Bug fixes for pdb_{xml,pqsql,xml}
+    * Fixes for pdb_mysql.
+
+
+o   Andrew Tridgell <tridge at samba.org>
+    * Bring Samba3 into line with the Samba4 password change code.
+    
+
+o   Shiro Yamada <shiro at miraclelinux.com>
+    * BUG 2190: Force SWAT to display parameters in unix charset and 
+      not UTF-8.
+
+
+      --------------------------------------------------
+                   ==============================
+                   Release Notes for Samba 3.0.10
+                             Dec 16, 2004
+                   ==============================
+
+Common bugs fixed in 3.0.10 include:
+
+  o Fix for security issues described in CAN-2004-1154.
+
+
+Changes since 3.0.9
+-------------------
+
+commits
+-------
+
+o   Jeremy Allison <jra at samba.org>
+    * Added checks surrounding all *alloc() calls to fix
+      CAN-2004-1154.
+    * Fix long standing memory size bug in bitmap_allocate().
+    * Remove bogus error check in deferred open file serving 
+      code.
+
+
+o   Thomas Bork <tombork at web.de>
+    * Fix autoconf script on platforms using a version of GNU ld
+      that does not include a date stamp in the output of --version.
+
+
+o   Luke Mewburn <lukem at NetBSD.org>
+    * Fix the swat install script to deal with the new image
+      destination directory used by the docs.
+     
+
+
+      --------------------------------------------------
+
+                   =============================
+                   Release Notes for Samba 3.0.9
+                             Nov 15, 2004
+                   =============================
+
+Common bugs fixed in 3.0.9 include:
+
+  o Problem updating roaming user profiles.
+  o Crash in smbd when printing from a Windows 9x client.
+  o Unresolved symbols in libsmbclient which caused
+    applications such as KDE's konqueror to fail when
+    accessing smb:// URLs.
+
+
+Changes since 3.0.8
+-------------------
+
+
+commits
+-------
+
+o   Jeremy Allison <jra at samba.org>
+    * Correctly detect errno for no acl/ea support.
+    * BUG 2036: Fix seg fault in 'net ads join'.
+
+    
+o   Gerald (Jerry) Carter <jerry at samba.org>
+    * Solaris packaging fixes.
+    * Fix seg fault in lanman printing code.
+    * BUG 2017: fix testparm reporting for the passwd program 
+      string.
+    * Fix output of smbstatus to match the man page.
+    * BUG 2027: fix conflict with declaration MD5_CTX in system 
+      headers.
+    * 2028: Avoid false error messages when copying a long 
+      printer name to the device mode.
+
+
+o   Guenther Deschner <gd at samba.org> 
+    * Allow deldriverex in rpcclient to delete drivers for a 
+      specific architecture and a specific version.
+    * Fix a couple of rpcclient spoolss commands (setprinter, 
+      setprintername, getdriver) w.r.t to printer-naming scheme.
+      Allow 'localhost' in the server string for certain server-side
+      spoolss functions.
+    * BUG 2015: Do not fail on setting file attributes with 
+      acl support enabled.
+
+
+o   Michel Gravey <michel.gravey at optogone.com>
+    * Fix build when using gcc 3.0.
+
+
+o   Volker Lendecke <vl at samba.org>
+    * Fix tdb open logic when checking our local_pid after 
+      the fork().
+
+
+o   Jim McDonough <jmcd at us.ibm.com>
+    * BUG 1932: Fix crash in 'net getlocalsid' when run as 
+      non-root user.
+
+
+o   Luke Mewburn <lukem at NetBSD.org>
+    BUG 1661: Fix KRB5_SETPW-defines
+
+
+o   Buchan Milne <bgmilne at mandrake.org> 
+    * BUG 2023: Mandrake packaging fixes for building 3.0.9.
+
+
+o   Lars Mueller <lmuelle at samba.org>
+    * BUG 2013: Fix unresolved symbols in libsmbclient.so.
+
+
+o   Martin Zielinski <mz at seh.de>
+    * Add DeletePrinterDriverEx() functionality to rpcclient.
+    
+
+      --------------------------------------------------
+
+                   =============================
+                   Release Notes for Samba 3.0.8
+                             Nov 7, 2004
+                   =============================
+
+Common bugs fixed in 3.0.8 include:
+
+  o Compile fixes for HP-UX
+  o Fixes for the printer publishing code used when joined to 
+    an AD domain.
+  o Incompatibilities with file system quotas.
+  o Several bugs in the spoolss printing code and print system 
+    backends.
+  o Inconsistencies in the username map functionality when 
+    configured on domain member servers.
+  o Various compile warnings and errors on various platforms.
+  o Fixes for Kerberos interoperability with Windows 200x 
+    domains when using DES keys.
+  o Fix for CAN-2004-0930 -- smbd remote DoS vulnerability.
+  o Fix for CAN-2004-0882 -- possible buffer overrun in smbd.
+
+    
+New features included in the 3.0.8 release are:
+
+  o New migration functionality added the the net tool
+    for files/directories, printers, and shares.
+  o New experimental idmap backend for assigning uids/gids
+    directly based on the user/group RID when acting as a
+    member of single domain without any trusts.
+  o Additional printer migration support for XP/2003 platforms.
+
+
+===========================
+Change in Winbindd Behavior
+===========================
+
+All usernames returned by winbindd are now converted to lower 
+case for better consistency.  This means any winbind installation
+relying on the winbind username will need to rename existing 
+directories and/or files based on the username (%u and %U) to lower 
+case (e.g. mv $name `echo $name | tr '[A-Z]' '[a-z]'`).  This may 
+include mail spool files, home directories, valid user lines in 
+smb.conf, etc....
+
+
+======================
+Change in Username Map
+======================
+
+Previous Samba releases would only support reading the fully qualified 
+username (e.g. DOMAIN\user) from the username map when performing a 
+Kerberos login from a client.  However, when looking up a map 
+entry for a user authenticated by NTLM[SSP], only the login name would be
+used for matches.  This resulted in inconsistent behavior sometimes
+even on the same server.
+
+Samba 3.0.8 obeys the following rules when applying the username
+map functionality:
+
+  * When performing local authentication, the username map is 
+    applied to the login name before attempting to authenticate 
+    the connection.
+  * When relying upon a external domain controller for validating
+    authentication requests, smbd will apply the username map 
+    to the fully qualified username (i.e. DOMAIN\user) only
+    after the user has been successfully authenticated.
+
+
+######################################################################
+Changes
+#######
+
+Changes since 3.0.7
+-------------------
+
+smb.conf changes
+----------------
+    Parameter Name              	Action
+    --------------              	------
+    force printername			New
+    sendfile				disabled by default
+
+
+commits
+-------
+
+o   Jeremy Allison <jra at samba.org>
+    * Ensure extended security bit is on only if we negotiated 
+      extended security.
+    * Simplify statcache to use an in-memory tdb. 
+    * If you're selecting a hash algorithm for tdb, you need 
+      to do it at open time.
+    * Removed old dir caching code - not being used now we 
+      have the statcache anyway.
+    * Simplify the mangle hash code to use an in-memory tdb.
+    * Merge iconv changes from Samba 4 branch.
+    * Fix parsing of names ending in dot and a few other error 
+      returns.
+    * BUG 1667: Smbpasswd file could be left locked on some 
+      error exits.
+    * Fixes for smbclient tar functionality.
+    * BUG 1743: Fix logic bug the deferred open code.
+    * Don't try to set security descriptors on shares where 
+      this has been turned off.
+    * Return correct error codes on old SEARCH call.
+    * Ensure we set errno = E2BIG when we overflow in the 
+      fast-path character conversion code.
+    * Fix the roundup problem (returning 1mb roundup) for 
+      non-Windows clients.
+    * Added 'stat' command to smbclient to exercise the 
+      UNIX_FILE_BASIC info level.
+    * Fix bug where we could incorrectly set sparse attribute.
+    * Fix incorrect locks/unlocks in tdb_lockkeys()/tdb_unlockkeys()
+      (reported by Taj Khattra <taj.khattra at gmail.com>).
+    * Remove locked keys tdb code.
+    * BUG 1886: Prevent delete on close being set for readonly files 
+      (and return the correct error code).
+    * Ensure we pass most of the new lock tests except for the cancel 
+      lock which is yet to be added (merged from Samba 4 branch).
+    * BUG 1947: Fix incorrect use of getpwnam() etc. interface.
+    * BUG 1956: Ensure errno is saved and restored consistently on a 
+      normal_close.
+    * BUG 1651: Adapted patch from Nalin Dahyabhai for ensuring 
+      that all of the appropriate service principal names are set 
+      upon joining an AD domain.
+    * Fix the correct use of resume name in the trans2 code.
+    * BUG 1717: Adapted patch from Nalin Dahyabhai to detect the
+      correct salt used when generated the DES key after joining an 
+      AD domain.
+    * Enhanced krb5 detection routines in the autoconf scripts.
+  
+
+o   Andrew Bartlett <abartlet at samba.org>
+    * Avoid changing the machine account password in the passdb 
+      backend, when it has 'already been changed'.  This occurs 
+      in situations where the secure channel between the workstation 
+      and the DC breaks down, such as occurred in the MS04-11 
+      security patch.
+    * Fix utility name in error message in ntlm_auth.
+    * Fix NTLMv2 for use with pam_winbind.
+    * Remove conversion to and from UTF8 on the winbind pipe.
+    * Allow 'require_membership_of' and 'require-membership-of'.
+    * Fix the error code for 'you didn't specify a domain' in 
+      ntlm_auth.
+    * Use sys_getgroups() rather than scanning all groups 
+      when generating SAMR replies.
+
+
+o   Igor Belyi <sambauser at katehok.ac93.org>
+    * Ensure pdb user is deleted first before deleting UNIX 
+      user (LDAP backend needs this ordering).
+
+
+o   Cornelio Bondad Jr <Corny.Bondad at hp.com>
+    * Fix core dump in 'net rpc vampire'.
+    
+
+o   Vince Brimhall <vbrimhall at novell.com>
+    * Make ldapsam_compat robust against NULL attributes.
+
+
+o   Gerald Carter <jerry at samba.org>
+    * Don't limit the number of groups returned by winbindd_getgroups()
+      by NGROUPS_MAX.
+    * BUG 1519: Match Windows 2000 behavior when opening a 
+      printer using a servername in the form of an IP address or 
+      DNS name.
+    * BUG 1907: remove extra slashes from the printer name in 
+      getprinterdriverdir_1().  
+    * Fix standard_sub_snum() to use the current user's gid.
+    * Fix background queue update bug (based on Volker's initial work 
+      in 3.1.0).
+    * Add 'force printername' service parameter for people that want 
+      to enforce printername == sharename for spoolss printing.
+    * Ensure consistent usage of the username map.  Use the fully 
+      qualified DOMAIN\user format for 'security = domain|ads' and 
+      apply after authentication has succeeded.
+    * Cosmetic fix for getent output -- lowercase the username only 
+      and not the complete domain\username string.
+    * Packaging fixes for Solaris, Redhat, & Fedora.
+
+    
+o   Sean Chandler <sean.chandler at verizon.net>
+    * Fix memlieak in cliconnect.c.
+
+
+o   Darren Chew <darrenc at vicscouts.asn.au>
+    * Solaris packaging fixes.
+    
+
+o   Nalin Dahyabhai <nalin at redhat.com>
+    * SMB signing fix for 56-bit DES session keys.
+
+
+o   Guenther Deschner <gd at samba.org> 
+    * add IA64 to the architecture table of printer-drivers.
+    * Add file/share/printer migration functionality to 
+      the net command.
+    * Show correct help for net groupmap commands.
+    * Fix deadlock loop in winbind's required_membership_sid
+      verification.
+    * Bring the same level of "required_membership"-functionality 
+      that ntlm_auth uses, to pam_winbindd as well.
+    * Prevent "net lookup kdc" from seg-faulting when
+      using our own implementation of krb5_lookup_kdc with 
+      heimdal.
+    * Adding getprinter level 7 to rpcclient.
+    * Support migrating printers|shares|files from Server A 
+      to Server B while running the net-command on client C.
+    * Fixed krb5_krbhost_get_addrinfo()-parameters and make 
+      failure of this call non-critical (Thanks to Love @ Heimdal
+      for the explanation and patch).
+    * Fix typos in net's usage-output.
+    * Fix the paranoia-check to ensure the ldap-attribute and the
+      smb.conf-parameter for samba's "algorithmic rid base" in ldapsam 
+      are identical.
+    * Fix several bugs in the _samr_query_useraliases() rpc reply.
+    * Check correct string length when verifying password-policies 
+      and using extended characters (Thanks to Uwe Morgenroth from CC 
+      Compunet and Volker).
+    * Make 'password history'-behavior in ldapsam more consistent. 
+    * Adding "Windows x64" as architecture string and driverdir "x64" 
+      for the 64bit AMD platform.
+    * BUG 1343: Readd WKGUID-binding to match the correct default-
+      locations of new User-, Group- and Machine-Accounts in Active 
+      Directory (this got lost during the last trunk-merge).
+    * Fix printer-migration w.r.t. to new naming-convention for
+      policy-handles.
+    * Allow to migrate win2k3/xp-drivers as well. 
+    * Add client-side support of triggering ads printer publishing 
+      over msrpc setprinter calls inside the net-tool. 
+    * Add the idmap_rid module (written in conjunction with 
+      Sumit Bose <sbose at suse.de>).
+    * BUG 1661: Fix build with recent heimdal releases.
+    * Prevent idmap_rid from making unnecessary calls to domain 
+      controllers for trusted domains.
+
+
+o   Arthur van Dongen <avdongen at xs4all.nl>
+    * Fix typos in pam_winbind log messages and SuSE 
+      packaging files.
+
+
+o   Rob Foehl <rwf at loonybin.net>
+    * Typo fixes for log messages in printer publishing code.
+    * Fix memory leak in printer publishing code.
+    * Ensure print_backend_init() only gets called once.
+    * Have smbd check the published status of all printers 
+      at startup.
+    * Cleanup up the XXX_a_printer() API for consistency.
+    * Refactored the printer publishing code and include better 
+      error handling.
+
+
+o   Steve French <sfrench at us.ibm.com>
+    * Fix IP address override in mount.cifs mount helper and clean 
+      up warning messages from the sparse tool and expand syntax help.
+    * Strip guest mount option off before sending to kernel mount 
+      routine to avoid logging spurious message.
+
+
+o   Satoh Fumiyasu <fumiya at samba.gr.jp>
+    * BUG 1732: Limit share names returned by RAP based on windows 
+      character width, not unix character width.
+    * BUG 1498: Ensure that acl entries are stored in the correct 
+      order.
+
+
+o   Brett Funderburg <brett at deepfile.com>
+    * Pass create options parameter to nt_create_andx() function
+      from the python bindings.
+    * BUG 1864: Add sd->type field to security descriptor Python 
+      representation.
+    * Return an error if a Netapp filer returns NT_STATUS_ACCESS_DENIED
+      when trying to return the security descriptor for a file.
+    * BUG 1884: Fixes for the Python bindings to use the value
+      of the desired_access filed passed into the lsa_open_policy()
+      routines.
+
+ 
+o   Michael Gravey <michel.gravey at optogone.com>
+    * BUG 1776: Fix warnings when building modules caused by 
+      certain versions of GNU ld not using the the default 
+      --allow-shlib-undefined flag.
+
+
+o   Chris Hertel <crh at samba.org>
+    * Fix logic bug in splay tree data structure when finding 
+      a leaf node.
+    * Fix bug where an invalid MAC address would be printed by 
+      a node status lookup from nmblookup.
+
+      
+o   Uli Iske <iske at elkb.de>
+    * Update the DNS/eDirectory LDAP schema file.
+
+
+o   Björn Jacke <bjacke at sernet.de>
+    * BUG 1766: Unify charset-handling in Content-Type:-headers to 
+      UTF-8.  Reformat msgstr in msg-files to UTF-8.
+    * Do not use display charset for swat output.
+    * Convert the share names correctly from unix encoding to web 
+      encoding and vice versa. 
+    * Convert files from status page from unix charset to UTF-8.
+
+
+o   Guenter Kukkukk <guenter.kukkukk at kukkukk.com>
+    * BUG 1590: Fix for talking to OS/2 clients (max_mux ignored).
+
+
+o   Tom Lackemann <cessnatomny at yahoo.com>
+    * BUG 1954: Fix memory leak in posix acl code.
+
+
+o   Volker Lendecke <vl at samba.org>
+    * Robustnss fix for winbindd when sending multiple requests 
+      at a high rate for a slow operation.  
+    * Solve the problem of user sids ending up with gid's 
+      and vice versa.
+    * Use sys_fork instead of fork for the dual daemon so that 
+      we get the correct debug pid in the logfiles.
+    * Based on patch from jmcd, implement special lists for the LDAP 
+      user attributes to delete.
+    * Fix creation of aliases via usrmgr. Winbind was too strict 
+      checking the type of sids.
+    * Lowercase all usernames returned by winbind.
+    * BUG 1545, 1823: Only issue the ldap extended password change 
+      operation if the ldap server supports it.  Also ignore object 
+      class violation errors from the extended operation.
+    * Optimization for 'idmap backend = ldap': When asking sid2id 
+      for the wrong type, don't ask ldap when we have the opposite mapping 
+      in the local tdb.
+    * Fix ldapsam_compat homeDrive.
+    * Add usersidlist and allowedusers subcommands to the net tool
+      in order to support scanning a file server's share and list 
+      all users who have permission to connect there.
+    * Allow for multiple DC's to be named as #1c names in lmhosts.
+    * Memory leak fixes.
+    * Fix checks for the local pid of an smbd process after 
+      reopening tdbs.
+
+
+o   Herb Lewis <herb at samba.org>
+    * Added tdbtool to be built by default.
+
+
+o   Love <lha at stacken.kth.se>
+    * BUG 1955: Inconsistent error return.
+
+
+o   Sorin Manolache <sorinm at gmail.com>
+    * Memory leak fix.
+
+
+o   Jim McDonough <jmcd at us.ibm.com>
+    * Allow 'net ads lookup' to rely on command line arguments 
+      if contacting an ADS server fails; utilize cldap for lookups.
+    * Fixup formatting errors in TDB_LOG calls; add printf attribute
+      support to tdb log functions.
+
+
+o   Bill McGonigle <bill+samba at bfccomputing.com>
+    * BUG 1926: Type in debug message.
+
+
+o   Sean McGrath
+    * BUG 1822: Add -D_REENTRANT to CPPFLAGS and -lthread to LDFLAGS
+      for libsmbclient.
+
+
+o   Luke Mewburn <lukem at NetBSD.org>
+    * BUG 1782: Prevent testparm from displaying parameter synonyms.
+
+
+o   Stefan Metzmacher <metze at samba.org>    
+    * Fix crash in smbcquotas and smbcacls caused by setup_logging().
+    * Fix client quota support.
+    * Fix opening of system quota file.
+
+
+o   Lars Mueller <lmuelle at samba.org>
+    * Small fixes for autogen.sh to deal with version detection 
+      of autoconf and autoheader; fixes for examples using 
+      libtool to adhere to stricter syntax of newer version.
+
+
+o   Henrik Nordstrom <hno at squid-cache.org>
+    * Allow winbindd to return the correct number of groups 
+      when the groups array must be enlarged.
+
+
+o   Narayana Pattipati <narayana.pattipati at wipro.com>
+    * Solaris autoconf detection fixes.
+
+
+o   Tim Potter <tpot at samba.org>
+    * BUG 1360: (correct fix) Use -Wl when passing flags to 
+      the linker.
+    * HP-UX compile fixes (from JBravo on #samba-technical).
+    * BUG 1731: More HP-UX compiles fixes.
+    * BUG 1778: Include yp_prot.h before ypclnt.h as AIX 5.2 
+      spits the dummy otherwise.
+    * Fix bug in Python printerdata wrapper.
+    * BUG 1762: nss_winbind fixes on AIX 5.x (patch from 
+      <bugzilla-samba at thewrittenword.com>).
+    * Fix parameter confusion in priming of name-to-sid cache
+      (Found by Qiao Yang).
+    * BUG 1888: Remove '..' from all pre-processor commands.
+    * BUG 1903: Change some #if DEBUG_PASSWORD's to #ifdef 
+      DEBUG_PASSWORD.
+
+
+o   Matt Selsky <selsky at columbia.edu>
+    * BUG 350: use autoconf 2.57 feature for checking header file
+      preprocessing (fixes configure warnings on Solaris).
+
+
+o   Richard Renard <rrenard at idealx.com>
+    * Fix usermgr.exe and trust relationships.
+
+
+o   Paul Szabo <psz at maths.usyd.edu.au>
+    * Fix to make find_workgroup use the same 
+      truncation as create_workgroup.
+
+
+o   Richard Sharpe <rsharpe at samba.org>
+    * Ensure cli_write() can support writes >= 65536 bytes.
+
+
+o   Simo Sorce <idra at samba.org>
+    * Added check password script code in examples/auth/crackcheck/
+    * Fix memory corruption bug caused in freeing static memory.
+
+
+o   Andrew Tridgell <tridge at samba.org>
+    * Remove lp_use_mmap() from map_file() since the latter 
+      is for read only and does not require coherence.
+    * Ensure that the uuid pack/unpack routines do not go past 
+      the end of the structure.
+    * Converted Samba 3 tree to use the new utf-16 aware iconv 
+      code. 
+    * Changed iconv to recognise UCS-2LE and UTF-16LE as synonyms.
+    * Ensure configure only uses '=' instead of the bashism '=='.
+    * Reduces the number of tdb locking calls made on file IO.
+    
+
+o   Jelmer Vernooij <jelmer at samba.org>
+    * Convert internal data to UTF-8 before calling libxml2.
+    * Complain if 'password chat' doesn't contain the %u variable
+      (based on a patch by Ronan Waide).
+    
+
+o   Josef Zlomek
+    * BUG 1541:  Fix recursive ls in smbclient. 
+
+    
+o   Igor Zhbanov <bsg at uniyar.ac.ru>
+    * BUG 1797: Prevent winbind and nmbd from ignoring the "-l" 
+      option.
+
+      --------------------------------------------------
+
+                  =============================
+                  Release Notes for Samba 3.0.7
+                           Sept 13, 2004
+                  =============================
+
+Common bugs fixed in 3.0.7 include:
+
+  o Fixes for two Denial of Service vulnerabilities
+    (CVE ID# CAN-2004-0807 & CAN-2004-0808).
+  o Winbind failure to return user entries under certain
+    conditions.
+  o Syntax errors in the OpenLDAP schema file (samba.schema).
+  o Printing errors caused by not setting default values
+    for the various printing commands.
+
+
+Changes since 3.0.6
+-------------------
+
+smb.conf changes
+----------------
+
+    Parameter Name              	Action
+    --------------              	------
+    winbind enable local accounts	disabled by default
+
+    
+commits
+-------
+o   Jeremy Allison <jra at samba.org>
+    * Fix parsing of names ending in dot and a few other error 
+      returns.
+    * BUG 1674: Move the symlinks checks into reduce_name().
+    * Fix memleak when checking the valid names smb.conf option.
+    * Fix memleak on error return path in the file open code.
+    * More paranoia checks in the hash2 mangling code.
+    * Fix syntax error in configure.in.
+    * Match Win2k3's behavior for pathname parsing error returns.
+    * Make nmbd more robust against bad netbios packets 
+      (CAN-2004-0808).
+    * Add more checks for invalid ASN.1 packets for SPNEGO packets
+      (CAN-2004-0807).
+
+  
+o   Andrew Bartlett <abartlet at samba.org>  
+    * Janitor work in loadparm.c -- remove unused parameters.
+
+
+o   Gerald Carter <jerry at samba.org>
+    * BUG 1464: Ensure that printing commands are initialized even
+      if the 'printing' parameter is not explicitly set.
+    * Resolve name conflict on DEC OSF-5.1 (inspired by patch from 
+      Adharsh Praveen <rprav at india.hp.com>)
+    * Work around parsing error in the print change notify code.
+    * remove duplicate declaration of getprintprocdir from 
+      rpcclient.
+    * Only use sAMAccountName and not userPrincipalName when looking
+      up a username in AD since the breaks winbindd (lookup_name() 
+      only works with the sAMAccountName).
+    * Fix bug with winbindd_getpwnam() caused by Microsoft DC's not 
+      filling in the username in the user_info3.
+    * Fix logic bug in the check for creating a user's home directory 
+      in register_vuid(); caused home directory to be mismatched to 
+      the first share in smb.conf under certain conditions.
+    * BUG 1656: rename auto.a to auto.smb.
+    * Ensure that we assign our pid to print jobs (and not our 
+      parent's pid); ensures that spooling jobs from dead smbds 
+      are removed from the tdb.
+    * Disable 'winbind enable local accounts' by default.
+    * Adding some initial checks for DragonFly (same as 
+      FreeBSD 4.1).
+    
+
+o   Guenther Deschner <gd at samba.org> 
+    * Use SMB_ASSERT() to track down NULL printer names in 
+      the tdb open code.
+    * Revert fix for BUG 1474 to avoid unnecessary packaging 
+      dependencies.
+
+
+o   Olaf Flebbe <o.flebbe at science-computing.de>.  
+    * BUG 1627: fix for NIS compiles on HPUX 11.00, AIX 4.3 
+      and 5.1.
+    * BUG 1626: More compile fixes.
+
+
+o   Rob Foehl <rwf at loonybin.net>
+    * Don't clear the PRINT_ATTRIBUTE_PUBLISHED was getting reset 
+      by attempts to sanitize the defined attributes.
+
+
+o   SATOH Fumiyasu <fumiya at miraclelinux.com>
+    * BUG 1546: Preserve errno in MB strupper_m/strlower_m.
+
+
+o   Helmut Heinreichsberger <helmut.heinreichsberger at chello.at>.
+    * BUG 1657: Remove used initialized variable, 
+    * BUG 1658: Add a little bit of const.
+
+
+o   Volker Lendecke <vl at samba.org>
+    * If there's garbage in the pidfile, we should not panic 
+      but assume that no one else is around. We can't find the 
+      other guy anyway.
+
+
+o   Jim McDonough <jmcd at us.ibm.com>
+    * Fixup format string in the tdb error messages.
+
+
+o   Jonas Olsson <lexicon at lysator.liu.se>
+    * BUG 1416: Don't reuncture a users list to NGROUPS_MAX when 
+      reporting the list in usrmgr.exe.
+
+
+o   Tim Potter <tpot at samba.org>
+    * Fix out-of-tree builds (problem with the script to generate 
+      the svn version number).
+    * BUG 1360:  Need to use -Wl when passing flags to the linker.
+    * BUG 1741: Define a struct nss_groupsbymem for HPUX 11 which 
+      doesn't have one of its own.
+
+o   Simo Sorce <idra at samba.org>
+    * Fixup compile issues on AIX caused by broken strlen() and 
+      strdup().
+    * Update debian packaging files.
+
+
+o   Dimitri van der Spek <dwspek at aboveit.nl>
+    * Use the correct counter when copying group rids from the 
+      user_info3 struct in pam_winbind.
+      
+
+o   Qiao Yang <qyang at stbernard.com>
+    * BUG 1622: Only cache the user
+
+
+      --------------------------------------------------
+      
+                  =============================
+                  Release Notes for Samba 3.0.6
+                           Aug 19, 2004
+                  =============================
+
+Common bugs fixed in 3.0.6 include:
+
+  o Schannel failure in winbindd.
+  o Numerous memory leaks.
+  o Incompatibilities between the 'write list' and 'force user'
+    smb.conf options.
+  o Premature optimization of the open_directory() internal 
+    function that broke tools such as the ArcServe backup 
+    agent, Macromedia HomeSite, and Robocopy.
+  o Corrupt workgroup names in nmbd's browse.dat.
+  o Sharing violation errors commonly seen when opening
+    when serving Microsoft Office documents from a Samba 
+    file share.
+  o Browsing problems caused by an apostrophe (') in the 
+    computer's description field.
+  o Problems creating special file types from UNIX CIFS 
+    clients and enabling 'unix extensions'.
+  o Fix stalls in smbd caused by inaccessible LDAP servers.
+  o Remove various memory leaks.
+  o Fix issues in the password lockout feature.
+
+New features introduced in this release include:
+
+  O Support symlinks created by CIFS clients which 
+    can be followed on the server.
+  o Using a cups server other than localhost.
+  o Maintaining the service principal entry in the system 
+    keytab for integration with other kerberized services.
+    Please refer to the 'use Kerberos keytab' entry in 
+    smb.conf(5).  When using the heimdal Kerberos libraries,
+    you must also specify the following in /etc/krb5.conf:
+    [libdefaults]
+       default_keytab_name = FILE:/etc/krb5.keytab
+  o Support for maintaining individual printer names
+    stored separately from the printer's sharename.
+  o Support for maintaining user password history.
+  o Support for honoring the logon times for user in a 
+    Samba domain.
+
+
+============================================
+unix extensions = yes (default) and symlinks
+============================================
+
+Beginning with Samba 3.0.6pre1 (formerly known as 3.0.5pre1), 
+clients supporting the UNIX extensions to the CIFS protocol 
+can create symlinks to absolute paths which will be **followed** 
+by the server.  This functionality has been requested in order 
+to correctly support certain applications when the user's home 
+directory is mounted using some type of CIFS client (e.g. the 
+cifsvfs in the Linux 2.6 kernel).
+
+If this behavior is not acceptable for your production environment
+you can set 'wide links = no' in the specific share declaration in 
+the server's smb.conf.  Be aware that disabling wide link support 
+out of a share in Samba may impact the server's performance due 
+to the fact that smbd will now have to check each path additional 
+times before traversing it.
+  
+
+========================
+Password History Support 
+========================
+
+The new password history feature allows smbd to check the new 
+password in password change requests against a list of the user's
+previous passwords.  The number of previous passwords to save can 
+be set using pdbedit (4 in this example):
+
+   root# pdbedit -P "password history" -C 4
+
+When using the ldapsam passdb backend, it is vital to secure the 
+following attributes from access by non-administrative users:
+
+   * sambaNTPassword
+   * sambaLMPassword
+   * sambaPasswordHistory
+
+You should refer to your directory server's documentation on how 
+to implement this restriction.
+
+
+Changes since 3.0.5
+-------------------
+
+smb.conf changes
+----------------
+
+    Parameter Name              Action
+    --------------              ------
+    cups server                 New
+    defer sharing violations    New
+    force unknown acl user      New
+    ldap timeout                New
+    printcap cache time         New
+    use Kerberos keytab         New
+    
+commits
+-------
+o   Jeremy Allison <jra at samba.org> 
+    * Correct path parsing bug that broke DeletePrinterDriverEx().
+    * Fix bugs in check_path_syntax() caught by asserts.
+    * Internal change - rearrange internal global case setting 
+      variables to a per connection basis.
+    * BUG 1345: Fix premature optimization in unix_convert(). 
+    * Allow clients to truncate a locked file.
+    * BUG 1319: Always check to see if a user as write access
+      to a share, even when 'force user' is set.
+    * Fix specific case of open that doesn't cause oplock break, 
+      or share mode check.
+    * Correct sid type is WKN_GROUP, not alias. Added some 
+      more known types (inspired by patch from Jianliang Lu).
+    * Allow creation of absolute symlink paths via CIFS clients.
+    * Fix charset bug in when invoking send_mailslot().
+    * When using widelinks = no, use realpath to canonicalize 
+      the connection path on connection create for the user. 
+    * Enhance stat open code.
+    * Fix unix extensions mknod code path.
+    * Allow unix domain socket creation via unix extensions.
+    * Auto disable the 'store dos attribute' parameter if the 
+      underlying filesystem doesn't support EAs.
+    * Implement deferred open code to fix a bug with Excel files 
+      on Samba shares.
+    * BUG 1427: Catch bad path errors at the right point.  Ensure 
+      all our pathname parsing is consistent.
+    * Fix SMB signing error introduced by the new deferred open 
+      code.
+    * Change default setting for case sensitivity to "auto". (see 
+      commit message -- r1154 -- for details).
+    * Add new remote client arch -- CIFSFS.
+    * Allow smbd to maintain the service principal entry in the 
+      system keytab file (based on patch Dan Perry <dperry at pppl.gov>, 
+      Guenther Deschner, et. al.).
+    * Fix longstanding memleak bug with logfile name.
+    * Fix incorrect type in printer publishing (struct uuid, 
+      not UUID_FLAT).
+    * Heimdal compile fixes after introduction of the new ketyab 
+      feature.
+    * Ensure we check attributes correctly on rename request.
+    * Ensure we defer a sharing violation on rename correctly.
+    * BUG 607: Ensure we remove DNS and DNSFAIL records immediately 
+      on timeout.
+    * Fix bogus error message when using "mangling method = hash" 
+      rather than hash2.
+    * Turn on sendfile by default for non-Win9x clients.
+    * Handle non-io opens that cause oplock breaks correctly.
+    * Ensure ldap replication sleep time is not more than 5 seconds.
+    * Add support for storing a user's password history.
+      LDAP portion of the code was based on a patch from 
+      Jianliang Lu <j.lu at tiesse.com>.
+    * Correct memory leaks found in the password change code.
+    * Fix support for the mknod command with the Linux CIFS client.
+    * Remove support for passing the new password to smbpasswd 
+      on the command line without using the -s option.
+    * Ensure home directory service number is correctly reused
+      (inspired by patches from Michael Collin Nielsen 
+      <michael at hum.aau.dk>).
+    * Fix to stop printing accounts from resetting the bas 
+      password and account lockout flags.
+    * If a account was locked out by an admin (and has a bad 
+      password count of zero) leave it locked out until an admin 
+      unlocks it (but log a message).
+    * Ensure we return the same ACL revision on the wire that 
+      W2K3 does.
+    * BUG 1578: Hardcode replacement for invalid characters as '_'
+      (based on fix from Alexander E. Patrakov <patrakov at ums.usu.ru>).
+    * Fix hashed password history for LDAP backends.
+    * Enforce logon hours restrictions if confiogured (based on code 
+      from Richard Renard <rrenard at idealx.com>).
+    * BUG 1606: Force smbd to disable sendfile with DOS clients 
+      and ensure that the chained header is filled in for ...&X 
+      commands.
+    * BUG 1602: Fix access to shares when all symlink support 
+      has been disabled.
+
+
+
+o   Tom Alsberg <alsbergt at cs.huji.ac.il>
+    * Allow pdbedit to export a single user from a passdb backend.
+    
+
+o   Andrew Bartlett <abartlet at samba.org>  
+    * Fix parsing bug in GetDomPwInfo().
+    * Fix segfault in 'ntlm_auth --diagnostics'.
+    * Re-enable code to allow sid_to_gid() to perform a group 
+      mapping lookup before checking with winbindd.
+    * Fix memory leak in the trans2 signing code.
+    * Allow more flexible GSS-SPENGO client and server operation 
+      in ntlm_auth.
+    * Improve smbd's internal random number generation.
+    * Fix a few outstanding long password changes in smbd.
+    * Fix LANMAN2 session setup code.
+
+
+o   Eric Boehm <boehm at nortelnetworks.com>
+    BUG 703: Final touches on netgroup case lookups.
+    
+    
+o   Jerome Borsboom <j.borsboom at erasmusmc.nl>
+    * Ensure error status codes don't get overwritten in 
+      lsa_lookup_sids() server code.
+    * Correct bug that caused smbd to overwrite certain error 
+      codes when returning up the call stack.
+    * Ensure the correct sid type returned for builtin sids.
+
+
+o   Gerald Carter <jerry at samba.org>
+    * Fix a few bugs in the Fedora Packaging files.
+    * Fix for setting the called name to by our IP if the 
+      called name was *SMBSERVER and *SMBSERV.   Fixes issue 
+      with connecting to printers via \\ip.ad.dr.ess\printer 
+      UNC path.
+    * BUG 1315: fix for schannel client connections to servers
+      when we haven't specifically negotiated AUTH_PIPE_SEAL.
+    * Allow PrinterDriverData valuenames with embedded backslashes
+      (Fixes bug with one of the Konica Fiery drivers).
+    * Fixed string length miscalculation in netbios names that 
+      resulted in corrupt workgroup names in browse.dat.
+    * When running smbd as a daemon, launch child smbd to update 
+      the lpq cache listing in the background.
+    * Allow printers "Printers..." folder to be renamed to a string 
+      other than the share name.
+    * Allow winbindd to use domain trust account passwords when 
+      running on a Samba DC to establish an schannel to remote 
+      domains.
+    * Fix bad merge and ensure that we always use tdb_open_log() 
+      instead of tdb_open_ex() (the former call enforce the 'use 
+      mmap' parameter).
+    * BUG 1221: revert old change that used single and double 
+      quotes as delimeters in next_token(), and change 
+      print_parameter() to print out parm values surrounded by 
+      double quotes (instead of single quotes).
+    * Prevent home directories added during the SMBsesssetup&X from 
+      being removed as unused services.
+    * Invalidate the print object cache for open printer handles when
+      smbd receives a message that an attribute on a given printer 
+      has been changed.
+    * Cause the configure script to exit if --enable-cups[=yes] is 
+      defined and the system does not have the cups devel files 
+      installed.
+    * BUG 1297: Prevent map_username() from being called twice 
+      during logon.
+    * Ensure that we use the userPrincipalName AD attribute 
+      value for LDAP SASL binds.
+    * Ensure we remove the tdb entry when deleting a job that 
+      is being spooled.
+    * BUG 1520: Work around bug in Windows XP SP2 RC2 where the 
+      client sends a FindNextPrintChangeNotify() request without 
+      previously sending a FindFirstPrintChangeNotify().  Return 
+      the same error code as Windows 2000 SP4.
+    * BUG 1516: Manually declare ldap_open_with_timeout() to 
+      workaround compiler errors on IRIX (or other systems without 
+      LDAP headers).
+    * Merge security fixes for CAN-2004-0600, CAN-2004-0686 from 
+      3.0.5.
+    * Corrected syntax error in the OID for sambaUnixIdPool, 
+      sambaSidEntry, & sambaIdmapEntry object classes.
+    * Tighten the cache consistency with the ntprinters.tdb entry 
+      an the in memory cache associated with open printer handles.
+    * Make sure that register_messages_flags() doesn't overwrite 
+      the originally registered flags.
+
+
+o   Fabien Chevalier <fabien.chevalier at supelec.fr>
+    * Debian BUG 252591: Ensure that the return value from the 
+      number of available interfaces is initialized in case no 
+      interfaces are actually available.
+
+
+o   Guenther Deschner <gd at sernet.de> 
+    * Implement 'rpcclient setprintername'.
+    * Add local groups to the user's NT_TOKEN since they are 
+      actually supported now.
+    * Heimdal compile fixes after introduction of the new keytab 
+      feature.
+    * Correctly honor the info level parameter in 'rpcclient 
+      enumprinters'.
+    * Reintroduce 'force unknown acl user' parameter.  When getting a 
+      security descriptor for a file, if the owner sid is not known, 
+      the owner uid is set to the current uid. Same for group sid.
+    * Ensure that REG_SZ values in the SetPrinterData actually 
+      get written in UNICODE strings rather than ASCII.
+    * Ensure that the last Kerberos error return is not invalid.
+    * Display share ACL entries from rpcclient.
+    * Correct infinite loop in pam_winbind's verification of 
+      group membership in the 'other sids' field in the user_info3 
+      struct.
+
+
+o   Fabian Franz <FabianFranz at gmx.de>
+    * Support specifying a port in the device URL passed to smbspool.
+    
+    
+o   Steve French <sfrench at us.ibm.com>
+    * Handle -S and user mount parms in mount.cifs.
+    * Fix user unmount of shares mount with suid mount.cifs.
+    * prevent infinite recusion in reopen_logs() when expanding 
+      the smb.conf variable %I.
+
+
+o   Bjoern Jacke <bj at sernet.de>
+    * Install libsmbclient into $(LIBDIR), not into hard coded 
+      ${prefix}/lib. This helps amd64 systems with /lib and /lib64 
+      and an explicit configure --libdir setting.
+
+
+o   <kawasa_r at itg.hitachi.co.jp>
+    * Correct more memory leaks and initialization bugs.
+    * Fix bug that prevented core dumps from being generated 
+      even if you tried.
+    * Connect to the winbind pipe in non-blocking mode to 
+      prevent processes from hanging.
+    * Memory leak fixes.
+
+
+o   Stephan Kulow <coolo at suse.de>
+    * Fix crash bug in libsmbclient.
+
+
+o   Volker Lendecke <vl at samba.org>
+    * Added vfs_full_audit module.
+    * Add vfs_afsacl.c which can display & set AFS acls via 
+      the NT security editor.
+    * Fix crash bug caused by trying to Base64 encode a NULL string.
+    * Fix DOS error code bug in reply_chkpath().
+    * Correct misunderstanding of the max_size field in 
+      cli_samr_enum_als_groups;  it is more like an account_control 
+      field with individual bits what to retrieve.
+    * Implement 'net rpc group rename' -- rename domain groups.
+    * Implement the 'cups server' option. This makes it possible 
+      to have virtual smbd's connect to different cups daemons.
+    * Paranoia fixes when adding local aliases to a user's NT_TOKEN.
+    * Fix sid_to_gid() calls in winbindd to prevent loops.
+    * Ensure that local_sid_to_gid() sets the type of the group on 
+      return.
+    * Make sure that the clients are given back the IP address to 
+      which they connected in the case of a multi-homed host. Only 
+      affects strings the spoolss printing replies.
+    * Fix the bad password lockout. This has not worked as pdb_ldap.c 
+      did not ask for the modifyTimestamp attribute, so it could 
+      not find it.   Try not to regress by not putting that attrib 
+      in the main list but append it manually for the relevant searches.
+    * Fix two memleaks in login_cache.c.
+    * fixes memory bloat when unmarshalling strings.
+    * Fix compile errors using gcc 3.2 on SuSE 8.2.
+    * Fix the build for systems without Kerberos headers.
+    * Allow winbindd to handle authentication requests only when 
+      started without either an 'idmap uid' or 'idmap gid' range.
+    * Fix the build for systems without ldap headers.
+    * Fix interaction between share security descriptor and the 
+      'read only' smb.conf option.
+    * Fix bug that caused _samr_lookupsids() with more than 32 (
+      MAX_REF_DOMAINS) SIDs to fail.
+    * Allow the 'idmap backend' parameter to accept a list of 
+      LDAP servers for failover purposes.
+    * Revert code in smbd to remove a tdb when it has become 
+      corrupted.
+    * Add paranoid checks when mapping SIDs to a uid/gid to 
+      ensure that the type is correct.
+    * Initial work on getting client support for sending mailslot 
+      datagrams.
+    * Add 'ldap timeout' parameter.
+    * Dont always uppercase 'afs username map'.
+    * Expand aliases for getusersids as well.
+    * Improved NT->AFS ACL mapping VFS module.
+
+
+o   Herb Lewis <herb at samba.org>
+    * Add the acls debug class.
+    * Fix logic bug in netbios name truncate routine.
+    * Fix smbd crash caused by smbtorture IOCTL test.
+    * Fix errno tromping before calling iconv to reset the 
+      conversion state.
+    * need to leave empty dacl so we can remove last ACE.
+
+
+o   Jianliang Lu <Jianliang.Lu at getronics.com>
+    * Fix to stop smbd hanging on missing group member in 
+      get_memberuids().
+    * Make sure Samba returns the correct group types.
+     * Reset the bad password count password counts upon a successful login.
+     
+     
+o   Jason Mader <jason at ncac.gwu.edu>
+    * BUG 1385: Don't use non-consts in a structure initialization.
+    
+
+o   Jim McDonough <jmcd at us.ibm.com>
+    * BUG 1279: SMBjobid fix for Samba print servers running on 
+      Big-Endian platforms.
+
+
+o   Joe Meadows <jameadows at webopolis.com>
+    * Add optional timeout parameter to ldap open calls.
+    * Allow get_dc_list() to check the negative cache.
+
+
+o   Stefan Metzmacher <metze at samba.org>    
+    * fix a configure logic bug for linux/XFS quotas when 
+      using --with-sys-quotas.
+    * Use quota debug class in quota code.
+    * print out the SVN revision by configure,
+    
+
+o   Buchan Milne <bgmilne at mandrake.org>
+    * Mandrake packaging fixes.
+    
+    
+o   Lars Mueller <lmuelle at samba.org>
+    * BUG 1279: Added 'printcap cache time' parameter.
+    * Fix afs related build issues on SuSE.
+    * Fix compiler warnings in the Kerberos client code.
+
+
+o   James Peach <jpeach at sgi.com>
+    * More iconv detection fixes for IRIX.
+    * Compile fixed for systems that do not have C99/UNIX98 compliant 
+      vsnprintf by default.
+    * Prevent smbd from attempting to use sendfile at all if it is 
+      not supported by the server's OS.
+    * Allow SWAT to search for index.html when serving html files 
+      in a directory.
+
+
+o   Dan Peterson
+    * Implement NFS quota support on FreeBSD.
+
+
+o   Tim Potter <tpot at samba.org>
+    * BUG 1360: Use -Bsymbolic when creating shared libraries to 
+      avoid conflicts with identical symbols in the global namespace 
+      when loading libnss_wins.so.
+
+
+o   Richard Renard <rrenard at idealx.com>
+    * Save the current password as it is being changed into the 
+      password history list.
+
+
+o   Richard Sharpe <rsharpe at samba.org>
+    * Fix error return codes on some lock messages.
+    * BUG 1178: Make the libsmbclient routines callable 
+      by C++ programs.
+    * BUG 1333: Make sure we return an error code when 
+      things go wrong.
+    * BUG 1301: Return NT_STATUS_SHARING_VIOLATION when 
+      share mode locking requests fail.
+
+
+o   Simo Sorce <idra at samba.org>
+    * Update Debian stable & unstable packaging.
+    * Tidy up parametric options in testparm output.
+
+
+o   Richard Sharpe <rsharpe at samba.org>
+    * Add sigchild handling to winbindd to restart the child 
+      daemon if necessary.
+
+
+o   Tom Shaw <tomisfaraway at gmail.com>
+    * Use winbindd_fill_pwent() consistently.
+
+
+o   Nick Thompson <nickthompson at agere.com>
+    * Protect smbd against broken filesystems which return zero 
+      blocksize.
+
+
+o   Andrew Tridgell <tridge at samba.org>
+    * Fixed bug in handling of timeout in socket connections.
+     
+
+o   Nick Wellnhofer <wellnhofer at aevum.de>    
+    * Prevent lp_interfaces() list from being corrupted.  Fixes
+      bug where nmbd would lose the list of network interfaces 
+      on the system and consequently shutdown.
+
+      
+o   James Wilkinson <jwilk at alumni.cse.ucsc.edu>
+    * Fix ntlm_auth memory leaks.
+
+
+o   Jelmer Vernooij <jelmer at samba.org>
+    * Additional NT status to unix error mappings.
+    * BUG 478: Rename vsnprintf to smb_vsnprintf so we don't 
+      get duplicate symbol errors.
+    * Return an error when the last command read from stdin 
+      fails in smbclient.
+    * Prepare for better error checking in tar.
+    * BUG 1474: Fix build of --with-expsam stuff on Solaris.
+      
+
+      --------------------------------------------------
+      
+                 =============================
+                 Release Notes for Samba 3.0.5
+                         July 20, 2004
+                 =============================
+
+Please note that Samba 3.0.5 is identical to Samba 3.0.4 with 
+the exception of correcting the two security issues outlined 
+below.
+
+######################## SECURITY RELEASE ########################
+
+Summary:       Multiple Potential Buffer Overruns in Samba 3.0.x
+CVE ID:        CAN-2004-0600, CAN-2004-0686
+               (http://cve.mitre.org/)
+
+
+This is the latest stable release of Samba. This is the version
+that production Samba servers should be running for all current
+bug-fixes.
+
+It has been confirmed that versions of Samba 3 prior to v3.0.4
+are vulnerable to two potential buffer overruns.  The individual
+details are given below.
+
+=============
+CAN-2004-0600
+=============
+
+Affected Versions:      Samba 3.0.2 and later
+
+The internal routine used by the Samba Web Administration
+Tool (SWAT v3.0.2 and later) to decode the base64 data
+during HTTP basic authentication is subject to a buffer
+overrun caused by an invalid base64 character.  It is
+recommended that all Samba v3.0.2 or later installations
+running SWAT either (a) upgrade to v3.0.5, or (b) disable
+the swat administration service as a temporary workaround.
+
+This same code is used internally to decode the
+sambaMungedDial attribute value when using the ldapsam
+passdb backend. While we do not believe that the base64
+decoding routines used by the ldapsam passdb backend can
+be exploited, sites using an LDAP directory service with
+Samba are strongly encouraged to verify that the DIT only
+allows write access to sambaSamAccount attributes by a
+sufficiently authorized user.
+
+The Samba Team would like to heartily thank Evgeny Demidov
+for analyzing and reporting this bug.
+
+-------------
+CAN-2004-0686
+-------------
+
+Affected Versions:      Samba 3.0.0 and later
+
+A buffer overrun has been located in the code used to support
+the 'mangling method = hash' smb.conf option.  Please be aware
+that the default setting for this parameter is 'mangling method
+= hash2' and therefore not vulnerable.
+
+Affected Samba 3 installations can avoid this possible security
+bug by using the default hash2 mangling method.  Server
+installations requiring the hash mangling method are encouraged
+to upgrade to Samba 3.0.5.
+
+
+##################################################################
+
+    --------------------------------------------------
+                 
+                 =============================
+                 Release Notes for Samba 3.0.4
+                          May 8, 2004
+                 =============================
+
+Common bugs fixed in Samba 3.0.4 include:
+
+  o Password changing after applying the patch described in 
+    the Microsoft KB828741 article to Windows clients.
+  o Crashes in smbd.
+  o Managing print jobs via Windows on Big-Endian servers.
+  o Several memory leaks in winbindd and smbd.
+  o Compile issues on AIX and *BSD.
+
+Changes since 3.0.3
+--------------------
+
+commits
+-------
+
+o   Jeremy Allison <jra at samba.org>
+    * Fix path processing for DeletePrinterDriverEx().
+    * BUG 1303: Fix for Microsoft hotfix MS04-011 password change 
+      breakage.
+
+
+o   Andrew Bartlett <abartlet at samba.org>
+    * Fix alignment bug in GetDomPwInfo().
+
+
+o   Alexander Bokovoy <ab at samba.org>
+    * Fix utime[s]() issues in smbwrapper on systems 
+      that can boot both the 2.4 and 2.6 Linux kernels.
+
+
+o   Gerald Carter <jerry at samba.org>
+    * Fedora packaging fixes.
+    * BUG 1302: Fix seg fault by not trying to optimize a list of 
+      invalid gids using the wrong array size.
+    * BUG 1309: fix seg fault caused by trying to strdup(NULL)
+      seen when 'security = share'.
+    * Fix problems when using IBM's compiler on AIX.
+    * Link Developer's Guide, Example Guide, and multi-page HOWTO
+      into SWAT's welcome page.
+    * BUG 1293: fix double free in printer publishing code.
+
+    
+o   Wim Delvaux <wim.delvaux at adaptiveplanet.com>
+    * Fix for handling timeouts in socket connections.
+
+
+o   Michel Gravey <michel.gravey at optogone.com>
+    * BUG 483: patch from  to fix password hash creation in SWAT.
+    
+
+o   Volker Lendecke <vl at samba.org>
+    * Close the open NT pipes before the tdis.
+    * Fix AFS related build issues.
+    * Handle error conditions when base64 encoding a blob of 0 bytes.
+
+    
+o   Herb Lewis <herb at samba.org>
+    * Added 'acls' debug class.
+
+o   kawasa_r at itg.hitachi.co.jp
+    * Multiple variable initialization and memory leak fixes.
+    
+    
+o   Stephan Kulow <coolo at suse.de>
+    * Fix string length bug in libsmbclient that caused KDE's 
+      Konqueror to crash.
+    * BUG 429: More libsmbclient fixes.
+
+
+o   Jim McDonough <jmcd at us.ibm.com>
+    * BUG 1007, 1279: Store the print job using a little-endian key.
+
+
+o   Eric Mertens
+    o Compile fix for OpenBSD (ENOTSUP not supported).
+
+    
 o   Stefan Metzmacher <metze at samba.org>
-    * Fixes for libreplace.
-    * Add support for LDAP digital signing policy.
-    * Experimental clustered file system support.
+    * Correct bug in disks quota views from explorer.
 
+    
+o   Tim Potter <tpot at samba.org>
+    BUG 1305: Correct debug output.
 
-o   Lars Mueller <lars at samba.org>
-    * Makefile and build fixes.
-    * Add pam_pwd_expire for pam_winbind (original patch from Andreas
-      Schneider).
 
+o   Richard Sharpe <rsharpe at samba.org>
+    * Fix incorrect error code mapping.
 
-o   James Peach <jpeach at apple.com>
-    * Fixes for setgroups() and *BSD and Darwin.
-    * Support membership of >16 groups on Darwin.
 
+o   Jelmer Vernooij <jelmer at samba.org>
+    * Add additional NT_STATUS errorm mappings.
+    
 
-o   Jiri Sasek <Jiri.Sasek at Sun.COM>
-    * Added vfs_zfsacl module.
+    --------------------------------------------------
 
+                 =============================
+                 Release Notes for Samba 3.0.3
+                        April 29, 2004
+                 =============================
 
-o   Karolin Seeger <ks at sernet.de>
-    * Add deletelocalgroup and unmapunixgroup subcommand to "net sam".
-    * Cleanup internal passdb functions.
 
+Common bugs fixed in Samba 3.0.3 include:
 
+  o Crash bugs and change notify issues in Samba's printing code.
+  o Honoring secondary group membership on domain member servers.
+  o TDB scalability issue surrounding the TDB_CLEAR_IF_FIRST flag.
+  o Substitution errors for %[UuGg] in smb.conf.
+  o winbindd crashes when using ADS security mode.
+  o SMB signing errors.
+  o Delays in winbindd startup caused by unnecessary 
+    connections to trusted domain controllers.
+  o Various small memory leaks.
+  o Winbindd failing due to expired Kerberos tickets.
+
+New features introduced in Samba 3.0.3 include:
+
+  o Improved support for i18n character sets.
+  o Support for account lockout policy based on
+    bad password attempts.
+  o Improved support for long password changes (>14
+    characters) and strong password enforcement.
+  o Support for Windows aliases (i.e. nested groups).
+  o Experimental support for storing DOS attribute on files
+    and folders in Extended Attributes.
+  o Support for local nested groups via winbindd.
+  o Specifying options to be passed directly to the CUPS libraries.
+
+Please be aware that the Samba source code repository was 
+migrated from CVS to Subversion on April 4, 2004.  Details on 
+accessing the Samba source tree via anonymous svn can be found 
+at http://svn.samba.org/samba/subversion.html.
+
+
+Changes since 3.0.2a
+--------------------
+smb.conf changes
+----------------
+
+    Parameter Name              Action
+    --------------              ------
+    cups options                New
+    ea support                  New
+    only user                   Deprecated
+    store dos attributes        New
+    unicode                     Removed
+    winbind nested groups       New
+
+    
+commits
+-------
+
+o   Jeremy Allison <jra at samba.org>
+    * Ensure that Kerberos mutex is always properly unlocked.
+    * Removed Heimdal "in-memory keytab" support.
+    * Fixup the 'multiple-vuids' bugs in our server code.
+    * Correct return code from lsa_lookup_sids() on unmapped
+      sids (based on work by vl at samba.org).
+    * Fix the "too many fcntl locks" scalability problem 
+      raised by tridge.
+    * Fixup correct (as per W2K3) returns for lookupsids 
+      as well as lookupnames.
+    * Fixups for delete-on-close semantics as per Win2k3 behavior.
+    * Make SMB_FILE_ACCESS_INFORMATION call work correctly.
+    * Fix "unable to initialize" bug when smbd hasn't been run with 
+      new system and a user is being added via pdbedit/smbpasswd.
+    * Added NTrename SMB (0xA5).
+    * Fixup correct timeout values for blocking lock timeouts.
+    * Fix various bugs reported by 'gentest'.
+    * More locking fixes in the case where we own the lock.
+    * Fix up regression in IS_NAME_VALID and renames.
+    * Don't set allocation size on directories.
+    * Return correct error code on fail if file exists and target 
+      is a directory.
+    * Added client "hardlink" comment to test doing NT rename with 
+      hard links.  Added hardlink_internals() code - UNIX extensions 
+      now use this as well.
+    * Use a common function to parse all pathnames from the wire for 
+      much closer emulation of Win2k3 error return codes.
+    * Implement check_path_syntax() and rewrite string sub 
+      functions for better multibyte support.
+    * Ensure msdfs referrals are multibyte safe.
+    * Allow msdfs symlink syntax to be more forgiving.
+      eg. sym_link -> msdfs://server/share/path/in/share 
+      or  sym_link -> msdfs:\\server\share\path\in\share.
+    * Cleanup multibyte netbios name support in nmbd ( based on patch
+      by MORIYAMA Masayuki <moriyama at miraclelinux.com>).
+    * Fix check_path_syntax() for multibyte encodings which have 
+      no '\' as second byte (based on work by ab at samba.org.
+    * Fix the "dfs self-referrals as anonymous user" problem
+      (based on patch from vl at samba.org).
+    * BUG 1064: Ensure truncate attribute checking is done correctly 
+      on "hidden" dot files.
+    * Fix bug in anonymous dfs self-referrals again.
+    * Fix get/set of EA's in client library
+    * Added support for OS/2 EA's in smbd server.
+    * Added 'ea support' parameter to smb.conf.
+    * Added 'store dos attributes' parameter to smb.conf.
+    * Fix wildcard identical rename.
+    * Fix reply_ctemp - make compatible with w2k3.
+    * Fix wildcard unlink.
+    * Fix wildcard src with wildcard dest renames.      
+    * BUG 1139: Fix based on suggestion by jdev at panix.com.
+      swap lookups for user and group - group will do an
+      algorithmic lookup if it fails, user won't.
+    * Make EA's lookups case independent.
+    * Fix SETPATHINFO in 'unix extensions' support.
+    * Make 3.x pass the Samba 4.x RAW-SEARCH tests - except for 
+      the UNIX info levels, and the short case preserve names.
+
+
+o   Timur Bakeyev <timur at com.bat.ru>
+    * BUG 1144: only set --with-fhs when the argument is 'yes'
+    * BUG 1152: Allow python modules to build despite libraries added 
+      to LDFLAGS instead of LDPATH.
+    * BUG 1141: Fix nss*.so names on FreeBSD 5.x.
+
+
+o   Craig Barratt <cbarratt at users.sourceforge.net>
+    * BUG 389: Allow multiple exclude arguments with smbclient 
+      tar -Xr options (better support for Amanda backup client).
+
+
+o   Andrew Bartlett <abartlet at samba.org>
+    * Include support for linking with cracklib for enforcing strong 
+      password changes.
+    * Add support for >14 character password changes from Windows 
+      clients.
+    * Add 'admin set password' capability to 'net rpc'.
+    * Allow 'net rpc samdump' to work with any joined domain 
+      regardless of smb.conf settings.
+    * Use an allocated buffer for count_chars.
+    * Add sanity checks for changes in the domain SID in an 
+      LDAP DIT.
+    * Implement python unit tests for Samba's multibyte string 
+      support.
+    * Remove 'unicode' smb.conf option.
+    * BUG 1138: Fix support for 'optional' SMB signing and other 
+      signing bugs.
+    * BUG 169: Fix NTLMv2-only behavior.
+    * Ensure 'net' honors the 'netbios name' in the smb.conf by 
+      default.
+    * Support SMB signing on connections using only the LANMAN 
+      password and generate the correct the 'session key' for these 
+      connections.
+    * Implement --required-membership-of=, an ntlm_auth option 
+      that restricts all authentication to members of this particular 
+      group.
+    * Improve our fall back code for password changes.
+    * Only send the ntlm_auth 'ntlm-server-1' helper client a '.' 
+      after the server had said something (such as an error).
+    * Add 'ntlm-server-1' helper protocol to ntlm_auth.
+
+      
+o   Alexander Bokovoy <ab at samba.org>
+    * Fix incorrect size calculation of the directory name 
+      in recycle.so.
+    * Fix problems with very long filenames in both smbd and smbclient
+      caused by truncating paths during character conversions.
+    * Fix smbfs problem with Tree Disconnect issued before smbfs 
+      starts its work.
+
+
+o   Gerald Carter <jerry at samba.org>
+    * BUG 850: Fix 'make installmodules' bug on True64.
+    * BUG 66: mark 'only user' deprecated.
+    * Remove corrupt tdb and shutdown (only for printing tdbs, 
+      connections, sessionid & locking).
+    * decrement smbd counter in connections.tdb in smb_panic().
+    * RedHat specfile updates.
+    * Fix xattr.h build issue on Debian testing and SuSE 8.2.
+    * BUG 1147; bad pointer case in get_stored_queue_info() 
+      causing seg fault.
+    * BUG 761: read the config file before initialized default 
+      values for printing options; don't default to bsd printing 
+      Linux.
+    * Allow the 'printing' parameter to be set on a per share basis.
+    * BUG 503: RedHat/Fedora packaging fixes regarding logrotate.
+    * BUG 848: don't create winbind local users/groups that already 
+      exist in the tdb.
+    * BUG 1080: fix declaration of SMB_BIG_UINT (broke compile on 
+      LynxOS/ppc).
+    * BUG 488: fix the 'show client in col 1' button and correctly 
+      enumerate active connections.
+    * BUG 1007 (partial): Fix abort in smbd caused by byte ordering 
+      problem when storing the updating pid for the lpq cache.
+    * BUG 1007 (partial): Fix print change notify bugs.
+    * BUG 1165, 1126: Fix bug with secondary groups (security = ads) 
+      and winbind use default domain = yes.  Also ensures that 
+    * BUG 1151: Ensure that winbindd users are passed through 
+      the username map.
+    * Fix client rpc binds for ASU derived servers (pc netlink, 
+      etc...).
+    * BUG 417, 1128: Ensure that the current_user_info is set
+      consistently so that %[UuGg] is expanded correctly.
+    * BUG 1195: Fix crash in winbindd when the ADS server is 
+      unavailable.
+    * BUG 1185: Set reconnect time to be the same as the 
+      'winbind cache time'.
+    * Ensure that we return the sec_desc in smb_io_printer_info_2.
+    * Change Samba printers Win32 attribute to PRINTER_ATTRIBUTE_LOCAL.
+    * BUG 1095: Honor the '-l' option in smbclient.
+    * BUG 1023: surround get_group_from_gid() with become_unbecome_root() 
+      block.
+    * Ensure server schannel uses the auth level requested by the 
+      client.
+    * Removed --with-cracklib option due to potential crash issue.
+    * Fix -lcrypto linking problem with wbinfo.
+    * BUG 761: allow printing parameter to set defaults on a per 
+      share basis.
+    * Add 'cups options' parameter to allow raw printing without 
+      changing /etc/cups/cupsd.conf.
+    * BUG 1081, 1183: Added remove_duplicate_gids() to smbd and 
+      winbindd.
+    * BUG 1246: Fix typo in Fedora /etc/init.d/winbind.
+    * BUG 1288: resolve any machine netbios name (0x00) and not just 
+      servers (0x20).
+    * BUG 1199: Fix potential symlink issue in 
+      examples/printing/smbprint.
+
+
+o   Robert Dahlem <Robert.Dahlem at gmx.net>
+    * BUG 1048:  Don't return short names when when 'mangled names = no'
+
+
+o   Guenther Deschner <gd at suse.com>
+    * Remove hard coded attribute name in the ads ranged retrieval
+      code.
+    * Add --with-libdir and --with-mandir to autoconf script.
+
+
+o   Bostjan Golob <golob at gimb.org>
+    * BUG 1046: Fix  getpwent_list() so that the username is not 
+      overwritten by other fields.
+
+
+o   Landon Fuller <landonf at opendarwin.org>
+    * BUG 1232: patch from landonf at opendarwin.org (Landon Fuller) 
+      to fix user/group enumeration on systems whose libc does not 
+      call setgrent() before trying to enumerate users (i.e. 
+      FreeBSD 5.2).
+
+
+o   Steve French <sfrench at us.ibm.com>
+    * Update mount.cifs to version 1.1.
+    * Disable dev (MS_NODEV) on user mounts from cifs vfs.
+    * Fixes to minor security bug in the mount helper.
+    * Fix credential file mounting for cifs vfs.
+    * Fix free of incremented pointer in cifsvfs mount helper.
+    * Fix path canonicalization of the mount target path and help 
+      text display in the cifs mount helper.
+    * Add missing guest mount option for mount.cifs.
+
+
+o   SATOH Fumiyasu <fumiya at miraclelinux.com>
+    * BUG 1055; formatting fixes for 'net share'.
+    * BUG 692: correct truncation of share names and workgroup 
+      names in smbclient.
+    * BUG 1088: use strchr_m() for query_host (smbclient -L).
+    * Patch from to internally count characters correctly.
+
+
+o   Paul Green <paulg at samba.org>
+    * Update VOS _POSIX_C_SOURCE macro to 200112L.
+    * Fix bug in configure.ion by moving the first use of 
+      AC_CHECK_HEADERS so it is always executed.
+    * Fix configure.in to only use $BLDSHARED to select whether to 
+      build static or shared libraries.
+
+
+o   Pat Haywarrd <Pat.Hayward at propero.net>
+    * Make the session_users list dynamic (max of 128K).
+    
+    
+o   Cal Heldenbrand <calzplace at yahoo.com> 
+    * Fix for for 'pam_smbpass migrate' functionality.
+
+
+o   Chris Hertel <crh at samba.org>
+    * fix enumeration of shares 12 characters in length via 
+      smbclient.
+
+
+o   Ulrich Holeschak <ulrich at holeschak.de>
+    * BUG 932: fix local password change using pam_smbpass
+
+
+o   Krischan Jodies <kj at sernet.de>
+    * Implement 'net rpc group delete'
+
+
+o   John Klinger <john.klinger at lmco.com>
+    * Return NSS_SUCCESS once the max number of gids possible 
+       has been found in initgroups() on Solaris.
+    * BUG 1182: Re-enable the -n 'no cache' option for winbindd.
+
+
+o   Volker Lendecke <vl at samba.org>
+    * Fix success message for net groupmap modify.
+    * Fix errors when enumerating members of groups in 'net rpc'.
+    * Match Windows behavior in samr_lookup_names() by returning
+      ALIAS(4) when you search in BUILTIN. 
+    * Fix server SAMR code to be able to set alias info for 
+      builtin as well. 
+    * Fix duplication of logic when creating groups via smbd.
+    * Ensure that the HWM values are set correctly after running 
+      'net idmap'.
+    * Add 'net rpc group add'.
+    * Implement 'net groupmap set' and 'net groupmap cleanup'.
+    * Add 'net rpc group [add|del]mem' for domain groups and aliases.
+    * Fix wb_delgrpmem (wbinfo -o).
+    * As a DC we should not reply to lsalookupnames on DCNAME\\user.
+    * Fix sambaUserWorkstations on a Samba DC.
+    * Implement wbinfo -k: Have winbind generate an AFS token after
+      authenticating the user.
+    * Add expand_msdfs VFS module for providing referrals based on the
+      the client's IP address.
+    * Implement client side NETLOGON GetDCName function.
+    * Fix caching of name->sid lookups.
+    * Add support in winbindd for expanding nested local groups.
+    * Fix memleak in winbindd.
+    * Fix msdfs proxy.
+    * Don't list domain groups from BUILTIN.
+    * Fix memleak in policy handle utility functions.
+    * Decrease winbindd startup time by only contacting trusted 
+      domains as necessary.
+    * Allow winbindd to ask the DC for its domain for a trusted 
+      DC.
+    * Fix Netscape DS schema based on comments from 
+      <thomas.mueller at christ-wasser.de>.
+    * Correct case where adding a domain user to a XP local group 
+      did a lsalookupname on the user without domain prefix, and 
+      failed.
+    * Fix segfault in winbindd caused by 'wbinfo -a'.
+    
+
+o   Herb Lewis <herb at samba.org>
+    * Fix typo for tag in proto file.
+    * Add missing #ifdef HAVE_BICONV stuff.
+    * Truncate Samba's netbios name at the first '.' (not 
+      right to left).
+
+
+o   Derrell Lipman <Derrell.Lipman at UnwiredUniverse.com>
+    * Bug fixes and enhancements to libsmbclient library.
+
+    
+o   Jianliang Lu <j.lu at tiesse.com>
+    * Enforce the 'user must change password at next login' flag.
+    * Decode meaning of 'fields present' flags (improves support 
+      for usrmgr.exe).
+    * NTLMv2 fixes.
+    * Don't force an upper case domain name in the ntlmssp code.
+    
+
+o   L. Lucius <ib at digicron.com>.
+    * type fixes.
+
+
+o   Jim McDonough <jmcd at us.ibm.com>
+    * Add versioning support to tdbsam.
+    * Update the IBM Directory Server schema with the OpenLDAP 
+      file.
+    * Various decoding fixes to improve usrmgr.exe support.
+    * Fix statfs redeclaration of statfs struct on ppc
+    * Implement support for password lockout of Samba domain 
+      controllers and standalone servers.
+    * Get MungedDial attribute actually working with full TS 
+      strings in it for pdb_ldap.
+    * BUG 1208 (partial): Improvements for working with expired krb5 
+      tickets in winbindd.
+    * Use timegm, or our already existing replacement instead of 
+      timezone (spotted by Andrzej Tobola <san at iem.pw.edu.pl>).
+    * Remove modifyTimestamp from list of our attributes.  
+    * Fix lsalookupnames to check for domain users as well as local 
+      users. 
+    * Merge struct uuid replacement for GUID from trunk.
+    * BUG 1208: Finish support for handling expired tickets in 
+      winbindd (in conjunction with Guenther Deschner <gd at suse.de>).
+
+
+o   Stefan Metzmacher <metze at samba.org>
+    * Implement new VERSION schema based on subversion revision 
+      numbers.
+    * Add shadow_copy vfs module.
+    * Fix segault in login_cache support.
+
+
+o    Heinrich Mislik <Heinrich.Mislik at univie.ac.at>
+     o BUG 979 -- Fix quota display on AIX.
+
+
+o   James Peach <jpeach at sgi.com>
+    * Correct check for printf() format when using the SGI MIPSPro 
+      compiler.
+    * BUG 1038: support backtrace for 'panic action' on IRIX.
+    * BUG 768: Accept profileing arg to IRIX init script.
+    * BUG 748: Relax arg parsing to sambalp script (IRIX).
+    * BUG 758: Fix pdma build.
+    * Search IRIX ABI paths for libiconv.  Based on initial fix from 
+      Jason Mader.
+      
+
+o   Kurt Pfeifle <kpfeifle at danka.de>
+    * Add example shell script for migrating drivers and printers 
+      from a Windows print server to a Samba print server using 
+      smbclient/rpcclient (examples/printing/VamireDriversFunctions).
+
+
+o   Tim Potter <tpot at samba.org>
+    * Fix logic bug in tdb non-blocking lock routines when 
+      errno == EAGAIN.
+    * BUG 1025: Include sys/acl.h in check for broken nisplus 
+      include files.      
+    * BUG 1066: s/printf/d_printf/g in SWAT.
+    * BUG 1098: rename internal msleep() function to fix build 
+      problems on AIX.
+    * BUG 1112: Fix for writable printerdata problem in python bindings.
+    * BUG 1154: Remove reference to <sys/mman.h> in tdbdump.c.
+    * BUG 1155: enclose use of fchown() with guards.
+    * Relicense tdb python module as LGPL.
+
+
+o   Richard Sharpe <rsharpe at samba.org>
+    * Add support to smbclient for multiple logins on the same 
+      session (based on work by abartlet at samba.org).
+    * Correct blocking condition in smbd's use of accept() on IRIX.
+    * Add support for printing out the MAC address on nmblookup.
+
+
 o   Simo Sorce <idra at samba.org>
-    * Fixes for IDmap and Passdb backends.
+    * Replace unknown_3 with fields_present in SAMR code.
+    * More length checks in strlcat().
 
 
 o   Andrew Tridgell <tridge at samba.org>
-    * Port ldb from the Samba 4 tree and add ldb group mapping plugin.
-    * Move several file serving related tdb files to use the dbwrap
-      API internally.
-    * Cleanup the GPFS VFS plugin.
-    * Experimental clustered file system support.
+    * Rewrote the AIX UESS backend for winbindd.
+    * Fixed compilation with --enable-dmalloc.
+    * Change tdb license to LGPL (see source/tdb/tdb.c).
+    * Force winbindd to use schannel in clients connections to 
+      DC's if possible.
 
 
 o   Jelmer Vernooij <jelmer at samba.org>
-    * Implement NDR basic to support utilizing IDL files from Samba 4
-      tree for general DCE/RPC parsing stubs.
+   * Fix ETA Calculation when resuming downloads in smbget.
+   * Add -O (for writing downloaded files to standard out) 
+     based on patch by Bas van Sisseren <bas at dnd.utwente.nl>.
+    * Fix syntax error in example mysql table
 
+           
+o   TAKEDA yasuma <yasuma at miraclelinux.com>
+    * BUG 900: fix token processing in cmd_symlink, cmd_link, 
+      cmd_chown, cmd_chmod smbclient functions.
 
 
+o   Shiro Yamada <shiro at miraclelinux.com>
+    * BUG 1129: install image files for SWAT.
+
+      
+    --------------------------------------------------
+
+                  ==============================
+                  Release Notes for Samba 3.0.2a
+                        February 13, 2004
+                  ==============================
+
+Samba 3.0.2a is a minor patch release for the 3.0.2 code base
+to address, in particular, a problem when using pdbedit to 
+sanitize (--force-initialized-passwords) Samba's tdbsam 
+backend.   This is the latest stable release of Samba. This 
+is the version that all production Samba servers should be 
+running for all current bug-fixes.  
+
+******************* Attention! Achtung! Kree! *********************
+
+Beginning with Samba 3.0.2, passwords for accounts with a last 
+change time (LCT-XXX in smbpasswd, sambaPwdLastSet attribute in
+ldapsam, etc...) of zero (0) will be regarded as uninitialized 
+strings.  This will cause authentication to fail for such
+accounts.  If you have valid passwords that meet this criteria, 
+you must update the last change time to a non-zero value.  If you 
+do not, then  'pdbedit --force-initialized-passwords' will disable 
+these accounts and reset the password hashes to a string of X's.
+
+******************* Attention! Achtung! Kree! *********************
+
+
+Changes since 3.0.2
+-------------------
+
+commits
+-------
+
+Please refer to the CVS log for the SAMBA_3_0 branch for complete
+details.  The list of changes per contributor are as follows:
+
+
+o   Jeremy Allison <jra at samba.org>
+    * Added paranoia checks in parsing code.
+    
+
+o   Andrew Bartlett <abartlet at samba.org>
+    * Ensure that changes to uninitialized passwords in ldapsam 
+      are written to the DIT.
+
+
+o   Gerald (Jerry) Carter <jerry at samba.org>
+    * Fixed iterator in tdbsam.
+    * Fix bug that disabled accounts with a valid NT password 
+      hash, but no LanMan hash.
+    
+
+o   Steve French <sfrench at us.ibm.com>
+    * Added missing nosetuid and noexec options.
+
+    
+o   Bostjan Golob <golob at gimb.org>
+    * BUG 1046: Don't overwrite usernames of entries returned 
+      by getpwent_list().
+
+
+o   Sebastian Krahmer <krahmer at suse.de>
+    * Fixed potential crash bug in NTLMSSP parsing code.
+
+
+o   Tim Potter <tpot at samba.org>
+    * Fixed logic in tdb_brlock error checking.
+
+    
+o   Urban Widmark <urban at teststation.com>
+    * Set nosuid,nodev flags in smbmnt by default.
+    
+    
+        --------------------------------------------------
+                  
+                  =============================
+                  Release Notes for Samba 3.0.2
+                        February 9, 2004
+                  =============================
+
+It has been confirmed that previous versions of Samba 3.0 are
+susceptible to a password initialization bug that could grant an 
+attacker unauthorized access to a user account created by the
+mksmbpasswd.sh shell script.
+
+The Common Vulnerabilities and Exposures project (cve.mitre.org) 
+has assigned the name CAN-2004-0082 to this issue.
+
+Samba administrators not wishing to upgrade to the current 
+version should download the 3.0.2 release, build the pdbedit 
+tool, and run 
+
+   root# pdbedit-3.0.2 --force-initialized-passwords
+      
+This will disable all accounts not possessing a valid password
+(e.g. the password field has been set a string of X's).
+
+Samba servers running 3.0.2 are not vulnerable to this bug 
+regardless of whether or not pdbedit has been used to sanitize
+the passdb backend.
+
+Some of the more visible bugs in 3.0.1 addressed in the 3.0.2
+release include:
+
+  o Joining a Samba domain from Pre-SP2 Windows 2000 clients.
+  o Logging onto a Samba domain from Windows XP clients.
+  o Problems with the %U and %u smb.conf variables in relation to 
+    Windows 9x/ME clients.
+  o Kerberos failures due to an invalid in memory keytab detection
+    test.
+  o Updates to the ntlm_auth tool.
+  o Fixes for various SMB signing errors.
+  o Better separation of WINS and DNS queries for domain controllers.
+  o Issues with nss_winbind FreeBSD and Solaris.
+  o Several crash bugs in smbd and winbindd.
+  o Output formatting fixes for smbclient for better compatibility
+    with scripts based on the 2.2 version.
+
+
+Changes since 3.0.1
+-------------------
+
+smb.conf changes
+----------------
+
+    Parameter Name              Action
+    --------------              ------
+    ldap replication sleep      New
+    read size                   removed (unused)
+    source environment          removed (unused)
+
+
+commits
+-------
+
+Please refer to the CVS log for the SAMBA_3_0 branch for complete
+details.  The list of changes per contributor are as follows:
+
+o   Jeremy Allison <jra at samba.org>
+    * Revert change that broke Exchange clear text samlogons.
+    * Fix gcc 3.4 warning in MS-DFS code.
+    * Tidy up of NTLMSSP code.
+    * Fixes for SMB signing errors
+    * BUG 815: Workaround NT4 bug to support plaintext
+      password logins and UNICODE.
+    * Fix SMB signing bug when copying large files.
+    * Correct error logic in mkdir_internals() (caused a panic
+      when combined with --enable-developer).
+    * BUG 830: Protect against crashes due to bad character 
+      conversions.
+
+      
+o   Petri Asikainen <paca at sci.fi>
+    * BUG 330, 387:Fix single valued attribute updates when 
+      working with Novell NDS.
+
+
+o   Andrew Bartlett <abartlet at samba.org>
+    * Correctly handle per-pipe NTLMSSP inside a NULL session.
+    * Fix segfault in gencache 
+    * Fix early free() of encrypted_session_key.
+    * Change DC lookup routines to more carefully separate
+      DNS names (realms) from NetBIOS domain names.
+    * Add new sid_to_dn() function for internal winbindd use.
+    * Refactor cli_ds_enum_domain_trusts().
+    * BUG 707: Implement range retrieval of ADS attributes (based 
+      on work from Volker <vl at samba.org> and Guenther Deschner 
+      <gd at suse.com>).
+    * Automatically initialize the signing engine if a session key
+      is available.
+    * BUG 916: Do not perform a + -> ' ' substitution for squid URL 
+      encoded strings, only form input in SWAT.
+    * Resets the NTLMSSP state for new negotiate packets.
+    * Add 2-byte alignments in net_samlogon() queries to parse 
+      odd-length plain text passwords.
+    * Allow Windows groups with no members in winbindd.
+    * Allow normal authentication in the absence of a server 
+      generated session key.
+    * More optimizations for looking up UNIX group lists.
+    * Clean up error codes and return values for pam_winbindd
+      and winbindd PAM interface.
+    * Fix string return values in ntlm_auth tool.
+    * Fix segfault when 'security = ads' but no realm is defined.
+    * BUG 722: Allow winbindd to map machine accounts to uids.
+    * More cleanups for winbindd's find_our_domain().
+    * More clearly detect whether a domain controller is an NT4
+      or mixed-mode AD DC (additional bug fixes by jerry & jmcd).
+    * Increase separation between DNS queries for hosts and queries
+      for AD domain controllers.
+    * Include additional NT_STATUS to PAM error mappings.
+    * Password initialization fixes.
+
+    
+o   Justin Baugh <justin.baugh at request.com>
+    * BUG 948: Implement missing functions required for FreeBSD 
+      nss_winbind support. 
+
+
+o   Alexander Bokovoy <ab at samba.org>
+    * BUG 922: Make sure enable fast path for strlower_m() and 
+      strupper_m().
+
+
+o   Luca Bolcioni <Luca.Bolcioni at yacme.com>
+    * Fix crash when using 'security = server' and 'encrypt 
+      passwords = no' by always initializing the session key.
+
+      
+o   Dmitry Butskoj <buc at odusz.elektra.ru>
+    * Fix for special files being hidden from admins.
+
+
+o   Gerald (Jerry) Carter <jerry at samba.org>
+    * Fix bug in the lanman session key generation.  Caused 
+      "decode_pw: incorrect password length" error messages.
+    * Save the right case for the located user name in 
+      fill_sam_account().  Fixes %U/%u expansion for win9x clients.
+    * BUG 897: Add well known rid for pre win2k compatible access
+      group.
+    * BUG 887: Correct typo in delete user script example.
+    * Use short lived TALLOC_CTX* for allocating printer objects 
+      from the print handle cache.
+    * BUG 912: Fix check for HAVE_MEMORY_KEYTAB.
+    * Fix several warnings reported by the SUN Forte C compiler.
+    * Fully control DNS queries for AD DC's using 'name resolve order'.
+    * BUG 770: Send the SMBjobid for UNIX jobs back to the client.
+    * BUG 972: Fix segfault in cli_ds_getprimarydominfo().
+    * BUG 936: fix bind credentials for schannel binds in smbd.
+    * BUG 446: Fix output of smbclient for better compatibility 
+      with scripts based on the 2.2 version (including Amanda).
+    * BUG 891, 949: Fedora packaging fixes.
+    * Fix bug that caused rpcclient to incorrectly retrieve 
+      the SID for a server (this causing all calls that required 
+      this information to fail). 
+    * BUG 977: Don't create a homes share for a user if a static 
+      share already exists by the same name.
+    * Removed unused smb.conf options.
+    * Password initialization fixes.
+    * Set the disable flag for template accounts created by
+      mksmbpasswd.sh.
+    * Disable any account has no passwords and does not have the
+      ACB_PWNOTREQ bit set.
+
+
+o   Guenther Deschner <gd at suse.com>
+    * Install smbwrapper.so should be put into the $(libdir) 
+      and not $(bindir).
+    * Add the capability to specify the new user password 
+      for "net ads password" on the command line.
+    * Correctly detect AFS headers on SuSE.
+	
+
+o   James Flemer <jflemer at uvm.edu>
+    * Fix AIX compile bug by linking HAVE_ATTR_LIST to 
+      HAVE_SYS_ATTRIBUTES_H.
+
+
+o   Luke Howard <lukeh at PADL.COM>
+    * Fix segfault in session setup reply caused by a early free().
+
+
+o   Stoian Ivanov <sdr at bultra.com>
+    * Implement grepable output for smbclient -L.
+
+
+o   LaMont Jones <lamont at debian.org>
+    * BUG 225328 (Debian): Correct false failure LFS test that resulted 
+      in  _GNU_SOURCE not being defined (thus resulting in strndup() 
+      not being defined).
+
+      
+o   Volker Lendecke <vl at samba.org>
+    * BUG 583: Ensure that user names always contain the short 
+      version of the domain name.
+    * Fix our parsing of the LDAP uri.
+    * Don't show the 'afs username map' in the SWAT basic view.
+    * Fix SMB signing issues in relation to failed NTLMSSP logins.
+    * BUG 924: Fix return codes in smbtorture harness.
+    * Always lower-case usernames before handing it to AFS code.
+    * Add a German translation for SWAT.
+    * Fix a segfaults in winbindd.
+    * Fix the user's domain passed to register_vuid() from 
+      reply_spnego_Kerberos().
+    * Add NSS example code in nss_winbind to convert UNIX 
+      id's <-> Windows SIDs.
+    * Display more descriptive error messages for login via 'net'.
+    * Fix compiler warning in the net tool.
+    * Fix length bug when decoding base64 strings.
+    * Ensure we don't call getpwnam() inside a loop that is iterating 
+      over users with getpwent().  This broke on glibc 2.3.2.
+
+
+o   Herb Lewis <herb at samba.org>
+    * Fix bit rot in psec.
+
+
+o   Jianliang Lu <j.lu at tiesse.com>
+    * Ensure we delete the group mapping before calling the delete 
+      group script.
+    * Define well known RID for managing the  "Power Users" group.
+    * BUG 381: check builtin (not local) group SID when updating 
+      group membership.
+    * BUG 101: set the SV_TYPE_PRINTQ_SERVER flag in host announcement 
+      packet.
+
+
+o   John Klinger <john.klinger at lmco.com>
+    * Implement initgroups() call in nss_winbind on Solaris.
+
+
+o   Jim McDonough <jmcd at us.ibm.com>
+    * Fix regression in net rpc join caused by recent changes 
+      to cli_lsa_query_info_policy().
+    * BUG 964: Fix crash bug in 'net rpc join' using a preexisting
+      machine account.
+
+
+o   MORIYAMA Masayuki <moriyama at miraclelinux.com>
+    * BUG 570: Ensure that configure honors the LDFLAGS variable.
+
+
+o   Stefan Metzmacher <metze at samba.org>
+    * Implement LDAP rebind sleep patch.
+    * Revert to 2.2 quota code because of so many broken quota files 
+      out there.
+    * Fix XFS quotas: HAVE_XFS_QUOTA -> HAVE_XFS_QUOTAS
+                      XFS_USER_QUOTA -> USRQUOTA
+                      XFS_GROUP_QUOTA -> GRPQUOTA
+    * Fix disk_free calculation with group quotas.
+    * Add debug class 'quota' and a lot of DEBUG()'s 
+      to the quota code.
+    * Fix sys_chown() when no chown() is present.
+    * Add SIGABRT to fault handling in order to catch got a 
+      backtrace if an error occurs the OpenLDAP client libs.
+
+
+o   <ndb at theghet.to>
+    * Allow an existing LDAP machine account to be re-used when 
+      joining an AD domain.
+
+
+o   James Peach <jpeach at sgi.com>
+    * BUG 889: Change smbd to use pread/pwrite on platforms that 
+      support these calls. Can lead to a significant speed increase.
+
+
+o   Tim Potter <tpot at samba.org>
+    * BUG 905: Remove POBAD_CC to fix Solaris Forte compiles.
+    * BUG 924: Fix typo in RW2 torture test.
+    
+    
+o   Richard Sharpe <rsharpe at samba.org>
+    * Small fixes to torture.c to cleanup the error handling 
+      and prevent crashes.
+
+
+o   J. Tournier <jerome.tournier at IDEALX.com>
+    * Small fixes for the smbldap-tool scripts.
+
+
+o   Andrew Tridgell <tridge at samba.org>
+    * Fix src len check in pull_usc2().
+    
+    
+o   Jelmer Vernooij <jelmer at samba.org>
+    * Put functions for generating SQL queries in pdb_sql.c
+    * Add pgSQL backend (based on patch by Hamish Friedlander)
+    * BUG 908: Fix -s option to smbcontrol.    
+    * Add smbget utility - a wget-clone for the SMB/CIFS protocol.
+    * Fix for libnss_wins on IRIX platforms.
+    * Fix swatdir for --with-fhs.
+
+
+        --------------------------------------------------
+
+                  =============================
+                  Release Notes for Samba 3.0.1
+                        December 15, 2003
+                  =============================
+
+Some of the more common bugs in 3.0.0 addressed in the release 
+include:
+
+  o Substitution problems with smb.conf variables.
+  o Errors in return codes which caused some applications
+    to fail to open files.
+  o General Protection Faults on Windows 2000/XP clients
+    using Samba point-n-print features.
+  o Several miscellaneous crash bugs.
+  o Access problems when enumerating group mappings are
+    stored in an LDAP Directory.
+  o Several common SWAT bugs when writing changes to
+    smb.conf.
+  o Internal inconsistencies when 'winbind use default
+    domain = yes'
+
+
+
+Changes since 3.0.0
+----------------------
+
+    Parameter Name              Action
+    --------------              ------
+    hide local users            Removed
+    mangled map                 Deprecated
+    mangled stack               Removed
+    passwd chat timeout         New
+
+
+commits
+-------
+
+o   Change the interface for init_unistr2 to not take a length 
+    but a flags field.  We were assuming that 
+    2*strlen(mb_string) == length of ucs2-le string.  (bug 480).
+o   Allow d_printf() to handle strings with escaped quotation 
+    marks since the msg file includes the escape character (bug 489).
+o   Fix bad html table row termination in SWAT wizard code (bug 413).
+o   Fix to parse the level-2 strings.
+o   Fix for "valid users = %S" in [homes].  Fix read/write 
+    list as well. 
+o   Change AC_CHECK_LIB_EXT to prepend libraries instead of append.  
+    This is the same way AC_CHECK_LIB works (bug 508).
+o   Testparm output fixes for clarity.
+o   Fix broken wins hook functionality -- i18n bug (bug 528).
+o   Take care of condition where DOS and NT error codes must differ.
+o   Default to using only built-in charsets when a working iconv 
+    implementation cannot be located.
+o   Wrap internals of sys_setgroups() so the sys_XX() call can 
+    be done unconditionally (bug 550).
+o   Remove duplicate smbspool link on SWAT's front page (bug 541).
+o   Save and restore CFLAGS before/after AC_PROG_CC.  Ensures that
+    --enable-debug=[yes|no] works correctly.
+o   Allow ^C to interrupt smbpasswd if using our getpass 
+    (e.g. smbpasswd command).
+o   Support signing only on RPC's (bug 167).
+o   Correct bug that prevented  Excel 2000 clients from opening 
+    files marked as read-only.
+o   Portability fix bugs 546 - 549).
+o   Explicitly initialize the value of AR for vendor makes that don't
+    do this (e.g. HPUX 11).  (bug 552).
+o   More i18n fixes for SWAT (bug 413).
+o   Change the cwd before the postexec script to ensure that a
+    umount will succeed.
+o   Correct double free that caused winbindd to crash when a DC 
+    is rebooted (bug 437).
+o   Fix incorrect mode sum (bug 562).
+o   Canonicalize SMB_INFO_ALLOCATION in the same was as
+    SMB_FS_FULL_SIZE_INFORMATION (bug 564).
+o   Add script to generate *msg files.
+o   Add Dutch SWAT translation file.
+o   Make sure to call get_user_groups() with the full winbindd 
+    name for a user if he/she has one (bug 406).
+o   Fix up error code returns from Samba4 tester. Ensure invalid 
+    paths are validated the same way.  
+o   Allow Samba3 to pass the Samba4 RAW-READ tests.
+o   Refuse to configure if --with-expsam=$BACKEND was used but no 
+    libraries were found for $BACKEND.
+o   Move sysquotas autoconf tests to a separate file.
+o   Match W2K w.r.t. writelock and writeclose.  Samba4 torture 
+    tester
+o   Make sure that the files that contain the static_init_$subsystem; 
+    macro get recompiled after configure by removing the object 
+    files.
+o   Ensure canceling a blocking lock returns the correct error 
+    message.
+o   Match Samba 2.2 behavior; make ACB_NORMAL the default ACB value.
+o   Updated Japanese welcome file in SWAT.
+o   Fix to  nt-time <-> unix-time functions reversible.
+o   Ensure that winbindd uses the the escaped DN when querying
+    an AD ldap server.
+o   Fix portability issues when compiling (bug 505, 550)
+o   Compile fix for tdbbackup when Samba needs to override 
+    non-C99 compliant implementations of snprintf().
+o   Use @PICSUFFIX@ instead of .po in Makefile.in (bug 574).
+o   Make sure we break out of samsync loop on error.
+o   Ensure error code path doesn't free unmalloc()'d memory
+    (bug 628).
+o   Add configure test for krb5_keytab_entry keyblock vs key 
+    member (bug 636).
+o   Fixed spinlocks.
+o   Modified testparm so that all output so all debug output goes 
+    to stderr, and all file processing goes to stdout.
+o   Fix error return code for BUFFER_TOO_SMALL in smbcacls 
+    and smbcquotas.
+o   Fix "NULL dest in safe_strcpy()" log message by ensuring that 
+    we have a devmode before copying a string to the devicename.
+o   Support mapping REALM.COM\user to a local user account (without 
+    running winbindd)  for compatibility with 2.2.x release.
+o   Ensure we don't use mmap() on blacklisted systems.
+o   fixed a number of bugs and memory leaks in the AIX 
+    winbindd shim
+o   Call initgroups() in SWAT before becomming the user so that
+    secondary group permissions can be used when writing to 
+    smb.conf.
+o   Fix signing problems when reverse connecting back to a 
+    client for printer notify
+o   Fix signing problems caused by a miss-sequence bug.
+o   Missing map in errormap for ERROR_MORE_DATA -> ERRDOS, ERRmoredata.
+    Fixes NEXUS tools running on Win9x clients (bug 64).
+o   Don't leave the domain field uninitialized in cli_lsa.c if some 
+    SID could not be mapped.
+o   Fix segfault in mount.cifs helper when there is no options 
+    specified during mount.
+o   Change the \n after the password prompt to go to tty instead 
+    of stdout (bug 668).
+o   Stop net -P from prompting for machine account password (bug 451).
+o   Change in behavior to Not only change the effective uid but also
+    the real uid when becoming unprivileged.
+o   Cope with Exchange 5.5 cleartext pop password auth.
+o   New files for support of initshutdown pipe.  Win2k doesn't 
+    respond properly to all requests on the winreg pipe, so we need 
+    to handle this new pipe (bug 534).
+o   Added more va_copy() checks in configure.in.
+o   Include fixes for libsmbclient build problems.
+o   Missing UNIX -> DOS codepage conversion in lanman.c.
+o   Allow DFMS-S filenames can now have arbitrary case (bug 667).
+o   Parameterize the listen backlog in smbd and make it larger by
+    default. A backlog of 5 is way too small these days.
+o   Check for an invalid fid before dereferencing the fsp pointer
+    (bug 696).
+o   Remove invalid memory frees and return codes in pdb_ldap.c.
+o   Prompt for password when invoking --set-auth-user and no 
+    password is given.
+o   Bind the nmbd sending socket to the 'socket address'.
+o   Re-order link command for smbd, rpcclient and smbpasswd to ensure 
+    $LDFLAGS occurs before any library specification (bug 661).
+o   Fix large number of printf() calls for 64-bit size_t.
+o   Fix AC_CHECK_MEMBER so that SLES8 does correctly finds the 
+    keyblock in the krb5 structs.
+o   Remove #include <compat.h> in hopes to avoid problems with 
+    apache header files.
+o   Correct winbindd build problems on HP-UX 11.
+o   Lowercase netgroups lookups (bug 703).
+o   Use the actual size of the buffer in strftime instead of a made
+    up value which just happens to be less than sizeof(fstring).  
+    (bug 713).
+o   Add ldaplibs to pdbedit link line (bug 651).
+o   Fix crash bug in smbclient completion (bug 659).
+o   Fix packet length for browse list reply (bug 771).
+o   Fix coredump in cli_get_backup_list().
+o   Make sure that we expand %N (bug 612).
+o   Allow rpcclient adddriver command to specify printer driver 
+    version (bug 514).
+o   Compile tdbdump by default.
+o   Apply patches to fix iconv detection for FreeBSD.
+o   Do not allow the 'guest account' to be added to a passdb backend 
+    using smbpasswd or pdbedit (bug 624).
+o   Save LDFLAGS during iconv detection (bug 57).
+o   Run krb5 logins through the username map if the winbindd 
+    lookup fails (bug 698).
+o   Add const for lp_set_name_resolve_order() to avoid compiler 
+    warnings (bug 471).
+o   Add support for the %i macro in smb.conf to stand in for the for
+    the local IP address to which a client connected.
+o   Allow winbindd to match local accounts to domain SID when 
+    'winbind trusted domains only = yes' (bug 680).
+o   Remove code in idmap_ldap that searches the user suffix and group 
+    suffix.  It's not needed and provides inconsistent functionality 
+    from the tdb backend.
+o   Patch to handle munged dial string for Windows 2000 TSE.
+    Thanks to Gaz de France, Direction de la Recherche, Service 
+    Informatique Métier for their supporting this work by Aurelien 
+    Degrémont <adegremont at idealx.com>.
+o   Correct the "smbldap_open: cannot access when not root error"
+    messages when looking up group information (bug 281).
+o   Skip over the winbind separator when looking up a user.
+    This fixes the bug that prevented local users from
+    matching an AD user when not running winbindd (bug 698).
+o   Fix a problem with configure on *BSD systems. Make sure
+    we add -liconv etc to LDFLAGS.
+o   Fix core dump bug when "security = server" and the authentication
+    server goes away.
+o   Correct crash bug due to an empty munged dial string.
+o   Show files locked by a specific user (smbstatus -u 'user') 
+    (bug 590).
+o   Fix bug preventing print jobs from display in the queue
+    monitor used by Windows NT and later clients (bug 660).
+o   Fix several reported problems with point-n-print from
+    Windows 2000/XP clients due to a bug in the EnumPrinterDataEx()
+    reply (bug 338, 527 & 643).
+o   Fix a handful of potential memory leaks in the LDAP code used
+    by ldapsam[_compat] and the LDAP idmap backend.
+o   Fix for pdbedit error code returns (bug 763).
+o   Make sure we only enumerate group mapping entries  (not 
+    /etc/group) even when doing local aliases.
+o   Relax check on the pipe name in a dce/rpc bind response to work 
+    around issues with establishing trusts to a Windows 2003 domain.
+o   Ensure we mangle names ending in '.' in hash2 mangling method.
+o   Correct parsing issues with munged dial string.
+o   Fix bugs in quota support for XFS.
+o   Add a cleaner method for applications that need to provide 
+    name->SID mappings to do this via NSS rather than having to 
+    know the winbindd pipe protocol.
+o   Adds a variant of the winbindd_getgroups() call called 
+    winbindd_getusersids() that provides direct SID->SIDs listing of 
+    a users supplementary groups. This is enough to allow non-Samba 
+    applications to do ACL checking.
+o   Make sure we don't append the 'ldap suffix' when writing out the 
+    'ldap XXX suffix' values in SWAT (bug 328).
+o   Fix renames across file systems.
+o   Ensure that items in a list of strings containing whitespace are 
+    written out surrounded by single quotes.  This means that both 
+    double and single quotes are now used to surround strings in 
+    smb.conf (bug 481).
+o   Enable SWAT to correctly determine if winbindd is running (bug 
+    398).
+o   Include WWW-Authenticate field in 401 response for bad auth 
+    attempt (bug 629).
+o   Add support for NTLM2 (NTLMv2 session security).
+o   Add support for variable-length session keys.
+o   More privilege fixes for group enumeration in LDAP (bug 281).
+o   Use the dns name (or IP) as the originating client name when
+    using CUPS (bug 467).
+o   Fix various SMB signing bugs.
+o   Fix ACL propagation on a DFS root (bug 263).
+o   Disable NTLM2 for RPC pipes.
+o   Allow the client to specify the NTLM2 flags got NTLMSSP 
+    authentication.
+o   Change the name of the job passed off to cups from "Test Page" 
+    to "smbprn.00000033 Test Page" so that we can get the smb 
+    jobid back. This allow users to delete jobs with cups printing 
+    backend (partial work on bug 770).
+o   Fix build of winbindd with static pdb modules.
+o   Retrieve the correct ACL group bits if the file has an ACL 
+    (bug 802).
+o   Implement "net rpc group members": Get members of a domain group 
+    in human-readable format.
+o   Add MacOSX (Darwin) specific charset module code.
+o   Use samr_dispinfo(level == 1) for enumerating domain users so we 
+    can include the full name in gecos field (bug 587).
+o   Add support for winbind's NSS library on FeeeBSD 5.1 (bug 797).
+o   Implement 'net rpc group list [global|local|builtin]*' for a 
+    select listing of the respective user databases.
+o   Don't automatically set NT status code flag unless client tells 
+    us it can cope.
+o   Add 'net status [sessions|shares] [parseable]'.
+o   Don't mistake pre-existing UNIX jobs for smb jobs (remainder of  
+    bug 770).
+o   Add 'Replicator' and 'RAS Servers' to list of builtin SIDs 
+   (bug 608).
+o   Fix inverted logic in hosts allow/deny checks caused by 
+    s/strcmp/strequal/ (bug 846).
+o   Implement correct version SamrRemoveSidForeignDomain() (bug 252).
+o   Fix typo in 'hash' mangling algorithm.
+o   Support munged dial for ldapsam (bug 800).
+o   Fix process_incoming_data() to return the number of bytes handled 
+    this call whether we have a complete PDU or not; fixes bug 
+    with multiple PDU request rpc's broken over SMBwriteX calls 
+    each.
+o   Fix incorrect smb flags2 for connections to pre-NT servers 
+    (causes smbclient to fail to OS2 for example) (bug 821).
+o   Update version string in smbldap-tools Makefile to 0.8.2.
+o   Correct a problem with "net rpc vampire" mis-parsing the 
+    alias member info reply.
+o   Ensure the ${libdir} is created by the installclientlib script.
+o   Fix detection of Windows 2003 client architecture in the smb.conf
+    %a variable.
+o   Ensure that smbd calls the add user script for a missing UNIX 
+    user on Kerberos auth call (bug 445).
+o   Fix bugs in hosts allow/deny when using a mismatched 
+    network/netmask pair.
+o   Protect alloc_sub_basic() from crashing when the source string 
+    is NULL (partial work on bug 687).
+o   Fix spinlocks on IRIX.
+o   Corrected some bad destination paths when running "configure 
+    --with-fhs".
+o   Add packaging files for Fedora Core 1.
+o   Correct bug in SWAT install script for non-english languages.
+o   Support character set ISO-8859-1 internally (bug 558).
+o   Fixed more LDAP access errors when looking up group mappings 
+    (bug 281).
+o   Fix UNISTR2 length bug in LsaQueryInfo(3) that caused SID 
+    resolution to fail on local files on on domain members 
+    (bug 875).
+o   Fix uninitialized variable in passdb.c.
+o   Fix formal parameter type in get_static() in nsswitch/wins.c.
+o   Fix problem mounting directories when mount.cifs is installed 
+    with the setuid bit on.
+o   Fix bug that prevent --mandir from overriding the defaults
+    given in the --with-fhs macro.
+o   Fix bug in in-memory Kerberos keytab detection routines 
+    in configure.in
+
+
+
 ######################################################################
+
+              The original 3.0.0 release notes follow
+              =======================================
+                    WHATS NEW IN Samba 3.0.0
+                        September 24, 2003
+              =======================================
+
+
+Major new features:
+-------------------
+
+1)  Active Directory support.  Samba 3.0 is now able to  
+    join a ADS realm as a member server and authenticate 
+    users using LDAP/Kerberos.
+
+2)  Unicode support. Samba will now negotiate UNICODE on the wire 
+    and internally there is now a much better infrastructure for 
+    multi-byte and UNICODE character sets.
+
+3)  New authentication system. The internal authentication system 
+    has been almost completely rewritten. Most of the changes are 
+    internal, but the new auth system is also very configurable.
+
+4)  New default filename mangling system.
+
+5)  A new "net" command has been added. It is somewhat similar to 
+    the "net" command in windows. Eventually we plan to replace 
+    numerous other utilities (such as smbpasswd) with subcommands 
+    in "net".
+
+6)  Samba now negotiates NT-style status32 codes on the wire. This
+    improves error handling a lot.
+
+7)  Better Windows 2000/XP/2003 printing support including publishing
+    printer attributes in active directory.
+
+8)  New loadable module support for passdb backends and character 
+    sets.
+
+9)  New default dual-daemon winbindd support for better performance.
+
+10) Support for migrating from a Windows NT 4.0 domain to a Samba 
+    domain and maintaining user, group and domain SIDs.
+
+11) Support for establishing trust relationships with Windows NT 4.0
+    domain controllers.
+  
+12) Initial support for a distributed Winbind architecture using
+    an LDAP directory for storing SID to uid/gid mappings.
+  
+13) Major updates to the Samba documentation tree.
+
+14) Full support for client and server SMB signing to ensure
+    compatibility with default Windows 2003 security settings.
+
+15) Improvement of ACL mapping features based on code donated by
+    Andreas Grünbacher.
+
+
+Plus lots of other improvements!
+
+
+Additional Documentation
+------------------------
+
+Please refer to Samba documentation tree (included in the docs/ 
+subdirectory) for extensive explanations of installing, configuring
+and maintaining Samba 3.0 servers and clients.  It is advised to 
+begin with the Samba-HOWTO-Collection for overviews and specific 
+tasks (the current book is up to approximately 400 pages) and to 
+refer to the various man pages for information on individual options.
+
+We are very glad to be able to include the second edition of
+"Using Samba" by Jay Ts, Robert Eckstein, and David Collier-Brown
+(O'Reilly & Associates) in this release.  The book is available
+on-line at http://samba.org/samba/docs/ and is included with 
+the Samba Web Administration Tool (SWAT).  Thanks to the authors and
+publisher for making "Using Samba" under the GNU Free Documentation 
+License.
+
+
+######################################################################
+Upgrading from a previous Samba 3.0 beta
+########################################
+
+Beginning with Samba 3.0.0beta3, the RID allocation functions
+have been moved into winbindd.  Previously these were handled
+by each passdb backend.  This means that winbindd must be running
+to automatically allocate RIDs for users and/or groups.  Otherwise,
+smbd will use the 2.2 algorithm for generating new RIDs.
+
+If you are using 'passdb backend = tdbsam' with a previous Samba 
+3.0 beta release (or possibly alpha), it may be necessary to 
+move the RID_COUNTER entry from /usr/local/samba/private/passdb.tdb
+to winbindd_idmap.tdb.  To do this:
+
+1)  Ensure that winbindd_idmap.tdb exists (launch winbindd at least 
+    once)
+2)  build tdbtool by executing 'make tdbtool' in the source/tdb/ 
+    directory
+3)  run: (note that 'tdb>' is the tool's prompt for input)
+
+       root# ./tdbtool /usr/local/samba/private/passdb.tdb
+       tdb> show RID_COUNTER
+       key 12 bytes
+       RID_COUNTER
+       data 4 bytes
+       [000] 0A 52 00 00                                       .R.
+
+       tdb> move RID_COUNTER /usr/local/samba/var/locks/winbindd_idmap.tdb
+       ....
+       record moved
+
+If you are using 'passdb backend = ldapsam', it will be necessary to 
+store idmap entries in the LDAP directory as well (i.e. idmap backend 
+= ldap).  Refer to the 'net idmap' command for more information on 
+migrating SID<->UNIX id mappings from one backend to another.
+
+If the RID_COUNTER record does not exist, then these instructions are
+unneccessary and the new RID_COUNTER record will be correctly generated
+if needed.  
+
+
+
+########################
+Upgrading from Samba 2.2
+########################
+
+This section is provided to help administrators understand the details
+involved with upgrading a Samba 2.2 server to Samba 3.0.
+
+
+Building
+--------
+
+Many of the options to the GNU autoconf script have been modified 
+in the 3.0 release.  The most noticeable are:
+
+  * removal of --with-tdbsam (is now included by default; see section
+    on passdb backends and authentication for more details)
+    
+  * --with-ldapsam is now on used to provided backward compatible
+    parameters for LDAP enabled Samba 2.2 servers.  Refer to the passdb 
+    backend and authentication section for more details
+  
+  * inclusion of non-standard passdb modules may be enabled using
+    --with-expsam.  This includes an XML backend and a mysql backend.
+      
+  * removal of --with-msdfs (is now enabled by default)
+  
+  * removal of --with-ssl (no longer supported)
+  
+  * --with-utmp now defaults to 'yes' on supported systems
+  
+  * --with-sendfile-support is now enabled by default on supported 
+    systems
+  
+    
+Parameters
+----------
+
+This section contains a brief listing of changes to smb.conf options
+in the 3.0.0 release.  Please refer to the smb.conf(5) man page for
+complete descriptions of new or modified parameters.
+
+Removed Parameters (order alphabetically):
+
+  * admin log
+  * alternate permissions
+  * character set
+  * client codepage
+  * code page directory
+  * coding system
+  * domain admin group
+  * domain guest group
+  * force unknown acl user
+  * hide local users
+  * mangled stack
+  * nt smb support
+  * postscript
+  * printer driver
+  * printer driver file
+  * printer driver location
+  * read size
+  * source environment
+  * status
+  * strip dot
+  * total print jobs
+  * use rhosts
+  * valid chars
+  * vfs options
+
+New Parameters (new parameters have been grouped by function):
+
+  Remote management
+  -----------------
+  * abort shutdown script
+  * shutdown script
+
+  User and Group Account Management
+  ---------------------------------
+  * add group script
+  * add machine script
+  * add user to group script
+  * algorithmic rid base
+  * delete group script
+  * delete user from group script
+  * passdb backend
+  * set primary group script
+
+  Authentication
+  --------------
+  * auth methods
+  * realm
+  * passwd chat timeout
+
+  Protocol Options
+  ----------------
+  * client lanman auth
+  * client NTLMv2 auth
+  * client schannel
+  * client signing
+  * client use spnego
+  * disable netbios
+  * ntlm auth
+  * paranoid server security
+  * server schannel
+  * server signing
+  * smb ports
+  * use spnego
+
+  File Service
+  ------------
+  * get quota command
+  * hide special files
+  * hide unwriteable files
+  * hostname lookups
+  * kernel change notify
+  * mangle prefix
+  * map acl inherit
+  * msdfs proxy
+  * set quota command
+  * use sendfile
+  * vfs objects
+  
+  Printing
+  --------
+  * max reported print jobs
+
+  UNICODE and Character Sets
+  --------------------------
+  * display charset
+  * dos charset
+  * unicode
+  * unix charset
+  
+  SID to uid/gid Mappings
+  -----------------------
+  * idmap backend
+  * idmap gid
+  * idmap uid
+  * winbind enable local accounts
+  * winbind trusted domains only
+  * template primary group
+  * enable rid algorithm
+
+  LDAP
+  ----
+  * ldap delete dn
+  * ldap group suffix
+  * ldap idmap suffix
+  * ldap machine suffix
+  * ldap passwd sync
+  * ldap replication sleep
+  * ldap user suffix
+  
+  General Configuration
+  ---------------------
+  * preload modules
+  * private dir
+
+Modified Parameters (changes in behavior):
+
+  * encrypt passwords (enabled by default)
+  * mangling method (set to 'hash2' by default)
+  * passwd chat
+  * passwd program
+  * restrict anonymous (integer value)
+  * security (new 'ads' value)
+  * strict locking (enabled by default)
+  * unix extensions (enabled by default)
+  * winbind cache time (increased to 5 minutes)
+  * winbind uid (deprecated in favor of 'idmap uid')
+  * winbind gid (deprecated in favor of 'idmap gid')
+
+
+Databases
+---------
+
+This section contains brief descriptions of any new databases 
+introduced in Samba 3.0.  Please remember to backup your existing 
+${lock directory}/*tdb before upgrading to Samba 3.0.  Samba will 
+upgrade databases as they are opened (if necessary), but downgrading 
+from 3.0 to 2.2 is an unsupported path.
+
+Name                    Description                             Backup?
+----                    -----------                             -------
+account_policy          User policy settings                    yes
+gencache                Generic caching db                      no
+group_mapping           Mapping table from Windows              yes
+                        groups/SID to unix groups        
+winbindd_idmap          ID map table from SIDS to UNIX          yes
+                        uids/gids.
+namecache               Name resolution cache entries           no
+netsamlogon_cache       Cache of NET_USER_INFO_3 structure      no
+                        returned as part of a successful
+                        net_sam_logon request 
+printing/*.tdb          Cached output from 'lpq                 no
+                        command' created on a per print 
+                        service basis
+registry                Read-only samba registry skeleton       no
+                        that provides support for exporting
+                        various db tables via the winreg RPCs
+
+
+Changes in Behavior
+-------------------
+
+The following issues are known changes in behavior between Samba 2.2 and 
+Samba 3.0 that may affect certain installations of Samba.
+
+  1)  When operating as a member of a Windows domain, Samba 2.2 would 
+      map any users authenticated by the remote DC to the 'guest account'
+      if a uid could not be obtained via the getpwnam() call.  Samba 3.0
+      rejects the connection as NT_STATUS_LOGON_FAILURE.  There is no 
+      current work around to re-establish the 2.2 behavior.
+      
+  2)  When adding machines to a Samba 2.2 controlled domain, the 
+      'add user script' was used to create the UNIX identity of the 
+      machine trust account.  Samba 3.0 introduces a new 'add machine 
+      script' that must be specified for this purpose.  Samba 3.0 will
+      not fall back to using the 'add user script' in the absence of 
+      an 'add machine script'
+  
+
+######################################################################
+Passdb Backends and Authentication
+##################################
+
+There have been a few new changes that Samba administrators should be
+aware of when moving to Samba 3.0.
+
+  1) encrypted passwords have been enabled by default in order to 
+     inter-operate better with out-of-the-box Windows client 
+     installations.  This does mean that either (a) a samba account
+     must be created for each user, or (b) 'encrypt passwords = no'
+     must be explicitly defined in smb.conf.
+    
+  2) Inclusion of new 'security = ads' option for integration 
+     with an Active Directory domain using the native Windows
+     Kerberos 5 and LDAP protocols.
+
+     MIT Kerberos 1.3.1 supports the ARCFOUR-HMAC-MD5 encryption 
+     type which is neccessary for servers on which the 
+     administrator password has not been changed, or Kerberos-enabled 
+     SMB connections to servers that require Kerberos SMB signing.
+     Besides this one difference, either MIT or Heimdal Kerberos
+     distributions are usable by Samba 3.0.
+     
+
+Samba 3.0 also includes the possibility of setting up chains
+of authentication methods (auth methods) and account storage 
+backends (passdb backend).  Please refer to the smb.conf(5) 
+man page for details.  While both parameters assume sane default 
+values, it is likely that you will need to understand what the 
+values actually mean in order to ensure Samba operates correctly.
+
+The recommended passdb backends at this time are
+
+  * smbpasswd - 2.2 compatible flat file format
+  * tdbsam - attribute rich database intended as an smbpasswd
+    replacement for stand alone servers
+  * ldapsam - attribute rich account storage and retrieval 
+    backend utilizing an LDAP directory.  
+  * ldapsam_compat - a 2.2 backward compatible LDAP account 
+    backend
+    
+Certain functions of the smbpasswd(8) tool have been split between the 
+new smbpasswd(8) utility, the net(8) tool, and the new pdbedit(8) 
+utility.  See the respective man pages for details.
+    
+     
+######################################################################
+LDAP
+####
+
+This section outlines the new features affecting Samba / LDAP 
+integration.
+
+New Schema
+----------
+  
+A new object class (sambaSamAccount) has been introduced to replace 
+the old sambaAccount.  This change aids us in the renaming of 
+attributes to prevent clashes with attributes from other vendors.  
+There is a conversion script (examples/LDAP/convertSambaAccount) to 
+modify and LDIF file to the new schema.
+  
+Example:
+  
+  $ ldapsearch .... -b "ou=people,dc=..." > sambaAcct.ldif
+  $ convertSambaAccount --sid=<Domain SID> \
+    --input=sambaAcct.ldif --output=sambaSamAcct.ldif \
+    --changetype=[modify|add]
+	
+The <DOM SID> can be obtained by running 'net getlocalsid 
+<DOMAINNAME>' on the Samba PDC as root.  The changetype determines 
+the format of the generated LDIF output--either create new entries 
+or modify existing entries.
+    
+The old sambaAccount schema may still be used by specifying the 
+"ldapsam_compat" passdb backend.  However, the sambaAccount and
+associated attributes have been moved to the historical section of
+the schema file and must be uncommented before use if needed.
+The 2.2 object class declaration for a sambaAccount has not changed
+in the 3.0 samba.schema file. 
+  
+Other new object classes and their uses include:
+  
+  * sambaDomain - domain information used to allocate rids 
+    for users and groups as necessary.  The attributes are added
+    in 'ldap suffix' directory entry automatically if 
+    an idmap uid/gid range has been set and the 'ldapsam'
+    passdb backend has been selected.
+      
+  * sambaGroupMapping - an object representing the 
+    relationship between a posixGroup and a Windows
+    group/SID.  These entries are stored in the 'ldap 
+    group suffix' and managed by the 'net groupmap' command.
+    
+  * sambaUnixIdPool - created in the 'ldap idmap suffix' entry 
+    automatically and contains the next available 'idmap uid' and 
+    'idmap gid'
+    
+  * sambaIdmapEntry - object storing a mapping between a 
+    SID and a UNIX uid/gid.  These objects are created by the 
+    idmap_ldap module as needed.
+
+  * sambaSidEntry - object representing a SID alone, as a Structural
+    class on which to build the sambaIdmapEntry.
+
+    
+New Suffix for Searching
+------------------------
+  
+The following new smb.conf parameters have been added to aid in directing
+certain LDAP queries when 'passdb backend = ldapsam://...' has been
+specified.
+
+  * ldap suffix         - used to search for user and computer accounts
+  * ldap user suffix    - used to store user accounts
+  * ldap machine suffix - used to store machine trust accounts
+  * ldap group suffix   - location of posixGroup/sambaGroupMapping entries
+  * ldap idmap suffix   - location of sambaIdmapEntry objects
+
+If an 'ldap suffix' is defined, it will be appended to all of the 
+remaining sub-suffix parameters.  In this case, the order of the suffix
+listings in smb.conf is important.  Always place the 'ldap suffix' first
+in the list.  
+
+Due to a limitation in Samba's smb.conf parsing, you should not surround 
+the DN's with quotation marks.
+
+
+IdMap LDAP support
+------------------
+
+Samba 3.0 supports an ldap backend for the idmap subsystem.  The 
+following options would inform Samba that the idmap table should be
+stored on the directory server onterose in the "ou=idmap,dc=plainjoe,
+dc=org" partition.
+
+ [global]
+    ...
+    idmap backend     = ldap:ldap://onterose/
+    ldap idmap suffix = ou=idmap,dc=plainjoe,dc=org
+    idmap uid         = 40000-50000
+    idmap gid         = 40000-50000
+
+This configuration allows winbind installations on multiple servers to
+share a uid/gid number space, thus avoiding the interoperability problems
+with NFS that were present in Samba 2.2.
+    
+
+
+######################################################################
+Trust Relationships and a Samba Domain
+######################################
+
+Samba 3.0.0beta2 is able to utilize winbindd as the means of 
+allocating uids and gids to trusted users and groups.  More
+information regarding Samba's support for establishing trust 
+relationships can be found in the Samba-HOWTO-Collection included
+in the docs/ directory of this release.
+
+First create your Samba PDC and ensure that everything is 
+working correctly before moving on the trusts.
+
+To establish Samba as the trusting domain (named SAMBA) from a Windows NT
+4.0 domain named WINDOWS:
+
+  1) create the trust account for SAMBA in "User Manager for Domains"
+  2) connect the trust from the Samba domain using
+     'net rpc trustdom establish GLASS'
+
+To create a trustlationship with SAMBA as the trusted domain:
+
+  1) create the initial trust account for GLASS using
+     'smbpasswd -a -i GLASS'.  You may need to create a UNIX
+     account for GLASS$ prior to this step (depending on your
+     local configuration).
+  2) connect the trust from a WINDOWS DC using "User Manager
+     for Domains"
+
+Now join winbindd on the Samba PDC to the SAMBA domain using
+the normal steps for adding a Samba server to an NT4 domain:
+(note that smbd & nmbd must be running at this point)
+
+   root# net rpc join -U root
+   Password: <enter root password from smbpasswd file here>
+
+Start winbindd and test the join with 'wbinfo -t'.
+
+Now test the trust relationship by connecting to the SAMBA DC
+(e.g. POGO) as a user from the WINDOWS domain:
+
+   $ smbclient //pogo/netlogon -U Administrator -W WINDOWS
+   Password:
+
+Now connect to the WINDOWS DC (e.g. CRYSTAL) as a Samba user:
+
+   $ smbclient //crystal/netlogon -U root -W WINDOWS
+   Password:
+
+######################################################################
+Changes in Winbind
+##################
+
+Beginning with Samba3.0.0beta3, winbindd has been given new account
+manage functionality equivalent to the 'add user script' family of
+smb.conf parameters.  The idmap design has also been changed to 
+centralize control of foreign SID lookups and matching to UNIX 
+uids and gids.
+
+
+Brief Description of Changes
+----------------------------
+
+1) The sid_to_uid() family of functions (smbd/uid.c) have been 
+   reverted to the 2.2.x design.  This means that when resolving a 
+   SID to a UID or similar mapping:
+
+        a) First consult winbindd
+        b) perform a local lookup only if winbindd fails to
+           return a successful answer
+
+   There are some variations to this, but these two rules generally
+   apply.
+
+2) All idmap lookups have been moved into winbindd.  This means that
+   a server must run winbindd (and support NSS) in order to achieve
+   any mappings of SID to dynamically allocated UNIX ids.  This was
+   a conscious design choice.
+
+3) (OBSOLETE) New functions have been added to winbindd to emulate 
+   the 'add user script' family of smbd functions without requiring 
+   that external scripts be defined.  This functionality is controlled 
+   by the 'winbind  enable local accounts' smb.conf parameter (enabled 
+   by default).
+
+   However, this account management functionality is only supported 
+   in a local tdb (winbindd_idmap.tdb).  If these new UNIX accounts 
+   must be shared among multiple Samba servers (such as a PDC and BDCs), 
+   it will be necessary to define your own 'add user script', et. al.
+   programs that place the accounts/groups in some form of directory
+   such as NIS or LDAP.  This requirement was deemed beyond the scope
+   of winbind's account management functions.  Solutions for 
+   distributing UNIX system information have been deployed and tested 
+   for many years.  We saw no need to reinvent the wheel.
+
+4) A member of a Samba controlled domain running winbindd is now able 
+   to map domain users directly onto existing UNIX accounts while still
+   automatically creating accounts for trusted users and groups.  This
+   behavior is controlled by the 'winbind trusted domains only' smb.conf
+   parameter (disabled by default to provide 2.2.x winbind behavior).
+
+5) Group mapping support is wrapped in the local_XX_to_XX() functions
+   in smbd/uid.c.  The reason that group mappings are not included
+   in winbindd is because the purpose of Samba's group map is to
+   match any Windows SID with an existing UNIX group.  These UNIX
+   groups can be created by winbindd (see next section), but the
+   SID<->gid mapping is retreived by smbd, not winbindd.
+
+
+Examples
+--------
+
+* security = server running winbindd to allocate accounts on demand
+
+* Samba PDC running winbindd to handle the automatic creation of UNIX
+  identities for machine trust accounts
+
+* Automtically creating UNIX user and groups when migrating a Windows NT
+  4.0 PDC to a Samba PDC.  Winbindd must be running when executing
+  'net rpc vampire' for this to work.
+
+   
+######################################################################
+Known Issues
+############
+
+* There are several bugs currently logged against the 3.0 codebase
+  that affect the use of NT 4.0 GUI domain management tools when run
+  against a Samba 3.0 PDC.  This bugs should be released in an early 
+  3.0.x release.
+
+Please refer to https://bugzilla.samba.org/ for a current list of bugs 
+filed against the Samba 3.0 codebase.
+
+
+######################################################################
 Reporting bugs & Development Discussion
 #######################################
 
@@ -845,13 +9018,10 @@
 
 If you do report problems then please try to send high quality
 feedback. If you don't provide vital information to help us track down
-the problem then you will probably be ignored.  All bug reports should
-be filed under the Samba 3.2 product in the project's Bugzilla
-database (https://bugzilla.samba.org/).
+the problem then you will probably be ignored.  
 
+A new bugzilla installation has been established to help support the 
+Samba 3.0 community of users.  This server, located at 
+https://bugzilla.samba.org/, has replaced the older jitterbug server 
+previously located at http://bugs.samba.org/.
 
-======================================================================
-== Our Code, Our Bugs, Our Responsibility.
-== The Samba Team
-======================================================================
-

Modified: branches/samba/upstream/docs/Samba3-ByExample.pdf
===================================================================
--- branches/samba/upstream/docs/Samba3-ByExample.pdf	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/Samba3-ByExample.pdf	2008-06-15 01:55:18 UTC (rev 1953)
@@ -13,7 +13,7 @@
 (Acknowledgments)
 endobj
 13 0 obj
-<< /S /GoTo /D (id2422434) >>
+<< /S /GoTo /D (id208618) >>
 endobj
 16 0 obj
 (Contents)
@@ -1672,16 +1672,14 @@
 << /S /GoTo /D [1118 0 R  /Fit ] >>
 endobj
 1120 0 obj <<
-/Length 249       
+/Length 252       
 /Filter /FlateDecode
 >>
 stream
-xÚ…»nÃ0E÷|G	¨UR[^‹º-2ˆ¶¢ƒâ(­Û1ü Ò¿¯eëÐéï塾 áu‡ÿè“Û=¾È
-¨’ŒwªQT¥]*aw‚vðWÄŽ¾P¼P•aG®$ûÉusõÃÔþéö1Ì¡¨±¦V-J’PH#êö>ûvíZßG»U¬á±k˜Ûn	KnucÖÃÖ¶aYÎÛmTg1òós˜úË
-dcÒõÎP‘¨M¢!
-46²(¡MFØ_¾Ó
-Y²7‘´bŽ[ÉÂ<-ëìS
-Xa	â}my7mcÈ&‡쒈6MÿùØÆí~G1\˜
+xÚ…?kÃ0ÅwŠ%¨ÕÓ?KZKÝ–@¡m¥ƒâ(­ÁNŒí@òí+EÙ:tzÇéÞÓïá^+üGŸ|õø"pÃ×
+ü¸Cf
+ª‘Ìj~ŸdF*9Ù…ZÒZMvT
+r-u{	ã4Dúå7)ÌGæÐñVkÅ. šiT%ìcÝÚwaHv+IKkN.qîú%.¥Õ‹nÏ]—åp¾ª‚!Fy~ŽÓpºŒñ˜u½38àœ9éÓBˆµM,’)]6§Ÿü…hÈËjˆ§V8OË:‡œŽԐdh›âz4M^‹Q؇{h³ãÏq[_ý®k]#
 endstream
 endobj
 1118 0 obj <<
@@ -6881,15 +6879,23 @@
 /ProcSet [ /PDF /Text ]
 >> endobj
 2057 0 obj <<
-/Length 1009      
+/Length 1008      
 /Filter /FlateDecode
 >>
 stream
-xڝV[oÛ6~÷¯ °‡QÀÄðªKßÚ¤)R`Ù–xØ€¬ŒDÇB%Ë¥äºù÷;¼ÈPl7Cç‘çòñ;š¢'DчŻåâ⚈QRÒ’¡å
-1ÅHNÊŠ’¨R¢e0ãɧåGPå¨ e–I§É#’3päunûô:Û$e¸InÛ!I…Rø^wÚ‰ßûÕXØg’åør­·£±áˆ¹‹÷ËÅ—…óI›aQDTu‹‡OÕpöQ"Êí½f‡„*H¦È-º_ü± ñ‚g|e”p.åeþ]g¯±¤À›Ê×ÍÓθM!0#,PÆÔÜN•DÙDÜß6cÂüVBà·u×lša´zlúÛ“ø·(Ë*nWß'<ǽýü
-eR‘RÊÿÃÙñ:¹æîQr$eA”âÎõ—%…?žV¿9Yč‹›Ž¡«BœKL*K”Ë >x˜¥3h>iª|‘´Š7—H”%) Ÿ>¶ïÇŸ ©¢x7«ë:IW8íª;=8¢!VÊQ²<µÜêaØ×ÿa éÞ<5›§ æMzV½Y“sæ·fÿÒòMøü;þæ6*˜Ü™Ôl|‡9ÅÍ8˜‚þþeån`ês•
-vB‘<Án¿66ÖìÁ½/çf»:,ƒ©Ü¼°0/ŒÆ°íºJ‡ÐžŒCáxx0—Rяc4q¤ó*JñŸƒCPJ<®£ Ò¿’Bbmã÷ÍÕû ܽ½¹r’À—Ðww´}ÛúѧЁÒv‡ÆÓ­;ڍMÛŒb¤>¬U¿qF0¼ª#6ž“ëqqY@öAÑKPÊÞ±¶ÍWÓùvßzZÃ2@%µÑ>ÀwRk‚M>ÕÜUŽÍ/ð)¼oÆu8é7æ(Zôƒæ´žôÐÔîâ4óhÍ#·°±îÇ [à—$©0§èYy"áÈÓã"ƒ ûœˆ˜Љ© é$ ý«ö{;Ýž«VßE¢ UÁpõWºa8ÛŸ‡ °µ•…Zöj[È€ Êa
-è@™ z…_dx9ù³fص£obçfÆš;]ŸoüXë•ÞêÊÍû|š÷ý*6ÃÖ ?ßšN¦}½¢B1Ì5wƒ~lM8¢+óZwÄ×[žíŽKk Tðä*Üõ»ÀxØÝ%P!Í|/0,¦ž#WçŸÃó0šnÒÑѬқpüèiŽº0oë¨ÙÇ+½0µí÷ú¦Öc¤ÔoÍàªMªÙ•ó¥n¬©Àéó„J)ίãǁ•žæãÌœãð‰ƒÚ›s®à=b„3'"?}.ºÏ€+ŒÔC £V›«W뮏8WêÈî但ÿÿ×Ñn)
+xڝV[oÛ6~÷¯ °‡QÀÄðªKßÚ¤)R`Ù–xØ€¬ŒDÇB%Ë¥äºù÷;¼ÈPl7CçRäwÎùøñœCSô„(ú°x·\\\ó1JJZ2´\!¦É)CYQUJ´¬Ñf<ù´üPŽ
+Rf™tHΑœ#¹íÓëDPl“”á&a¸m‡$Já{Ý=j7•øÞدÆÂ:“,Ç—k½
+[Ì…X¼_.¾,œOŠØŒ‹"B ª[<|¢¨†½ˆQh ™R0oÑý⏍<ã+£„syì,/óï:{M%ÞT¸nžvÖÀi
+aA2¦ævª$¢È&Éàü¶^àg°¿­»fÓ£ÕcÓoܚĿýCYV™ ¸5¾OxŽ{ûùɤ"¥”ÿG³ãñàºò%GR2"w®¿,()üö4úÅÉ".\Üt]õâÜŤ2'¨“rÂ`ø³tFÍ_š*_\ZÉ›K$JIhV„;°}?þùHÅ»ÁX]×Iª¸ÂiFýØéÁ	
+±R&ˆ’å©åVþþ¸îÍS³y
+0oÒÛh´êíÌšœ3¿5û—–oÂçßñ7·QÁäΤfã+Ì7?à`
+úû–•;©Ïe6Ø		U*‚Ý~mlÌÙƒ{ŸÎÍVuS¹~a¡_7ògè2B{1‰ãéA_J9m£‰#ÌCª(ÅŽA)ñ¸Ž‘þ•k¿o®Þ‡ÉÝÛ›+7øê⎶o[ßš`*PÚîPx:²u[»±i›±1CŒÔ‡±ê7Îú‡:a#í¹¸ž—Ü> ýŒSúá]˜Ö¶ùêb:ßî[OcȤ6ÚúnÖš`Ó†O5w•có|g
+ï›qvú9Š½C£9Í'=4µ;8Í<Aó¨-,¬û1L†-èK’TŠ”Sôά¼°ååñFQA˜û;ñN ¯f'Wè_µ_Ûéö\¶ú*¬
+†»ˆ_éj„æl`k+¹ìa[Ì@ Ê'a
+ì L€=ƒÄ/2¼œüY3ìÚѱs3SÍí®Ï~ÌõJouåú}>õû~‹a뀟oM§GÓ>‡ZQ!æÈÝ [¶AèʼVñõ–g«ãÒ<y‚
+wý.(V· 	dH3_
+‹©¦ÀÈå¹{íãçð<Œ¦›0:šUz¶½Ìý¶ŽÈ>iìíÄ©m¿W7µ£¤.xk—mRÍŽtè/ucMNŸ'J±?œ¨üð4_øgú‡7H`oιñáŒÇŽÈOŸ‹î3ð
+-õè¨ÔæðjÝõ±çJٝ¼×ðà_Аn&
 endstream
 endobj
 2056 0 obj <<
@@ -6906,62 +6912,43 @@
 /PTEX.FileName (./Samba3-ByExample/images/Charity-Network.pdf)
 /PTEX.PageNumber 1
 /PTEX.InfoDict 2061 0 R
-/BBox [0 0 316 244]
+/BBox [0 0 320 253]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
 /R7 2062 0 R
->>/Font << /R9 2063 0 R>>
+>>/Font << /R8 2065 0 R >>
 >>
-/Length 2064 0 R
+/Length 2066 0 R
 /Filter /FlateDecode
 >>
 stream
 xœÝ\Ë’·
-Ý߯èe²šï‡wIÅ•xW,MU>`,Y±ç–m)‰? 	€`÷DwJÉT”.-4DƒÀ9Mâýº¿lÖ¸Íâ?úÿázùâUÙ¾ÿp±¦XçŠßŽ¼ÿþ⶿]R3!µ¸9Ÿ“	aóþkuËÐ̹nïß\Þ^¼3®µ¼ýzéi¶W|N¿×orl-A¿ZLq±n®ºh¸ûj\ÞJ66Å2¼Å§„jjý¸OÎÞÔ5Ž­;ŸT³)åãq’O¦úÍEoRÎ[L&•ê†“Ýð|‰
-ΙÚÐ;çîª,©¶ }‡í`r‚6^Úß²ñ%ˆÅ7gJöa¶Gì!–f<œ‰PÀ£©£ýp™(Ècâîö<`lÏËí¡;a&¹…¦/¦%EÓ£‚0Úšæ°L#ÂlšfhÆE3‚GU9F[Ó$‰»GØóX‡ðlÜx¡ÑÔ”¤fC4®œŸ&_Hªn;AH *äbŽ¨4×iñ­š˜·GôJÑÄæµ[”—šÍgå%í›É>i/¶h¯V@£šöb‹ò
-QèŒbQ^Ö$lÛ¶ãx.M¨¹ [
-˜®SЃ‡ƒbì%þQå9X¤Wôd–#?r=â0ýOó¿ëân‡2àpáÊÕš5ÖF<éÕÂ"…–lBp6´”=džærÌMD‹·akÕâj:¢>ÃëõU<%˜"À.Ä
-ķƉÖÂBK¸æ[ô·½Õ©É.ÁìÃYÀ,Œ®šìa-u0w{쏣˾õsÂ	¯—'+Nã|ECy at 0ʲ‹‚çî¥"ãäØEB}p͸¢ÜŒ½É*Ò!ÙÎÛŠ»¨dó8Ö8ÂVV˜šFœÿïc–AzbÅùð÷[°kjq‚ð
-»«›À¨0OL' pG™ŽM|Šƒu"Æc³;Ït»&çÒÓýsÃÖ‡ÊÃr‡“0Àn–¦§+ö¶“*T‡ëŽbtÞ¸ø)…êpõ-Aâj‡ûç&–Çiñ5%ÝÍ[k˜1/ºŸÍ](¤°0Tð>}ݐXÇtHo_0öR².Cíe‡5èàŠéVÉ>ÃýVɺu?O.ŽH†ål9ÝbIwRH
-+¥'-¸ê¦>H­™>åé%ُή‹øóGÛ‡³–Ú/%\¾–·ßvÒeÝB6}?#žü'•uÔ.KBØax¨+DO–ÇiÁ¸}ûèl°ú&jZÖ8}„^,6žÏ},ˆ"PÓÁ»D4ê˜îéíË…^¯WðZ¤ ÑK«»UÖÏp¿UÖÞ6o¢ ÄÝ$Ìæ˜5f±€ùN"ù®ªGƒÃÍZ,¬E.>iáNœyß漺ž?c˜}â%ïÆë#…ü'}‘J3þ?©cŸZè³cNÙšAJ¢ž³l™§1ãuEÕ–]œ^/»ŸÎ],¼¨Ý^Go¹áœW±Žù˜Þ¾`ìµ’k-CžWÉ·ÝoVr	©_§Í©ÑãM
-š-<›+äñ)ƒTD®°‡JOZ¸“¤>ž,æÏér¥_a b?ìqª`÷ý4 Æº­—ù7që‰w²ì®b)
-®âS¥Mäm/¼_ Ú”3E¸¾³ik°wL‰ïÜöŠÒhñ„õ;7 ïǺ£ñ¯›Ó4Å‚8BF1¼yóáîZ4qŸ[¶è«þ)š™áŒÃe§»Ê4cËœxÖ7d
-@¥ª
-k”1M^&òÐË5Òõ¬mý^æŒ
-sïÎP‡d<o_,òª•
-Æ»âýyj|úrC+o»ßÖJ@«*!¤Õ+
-™¹@.×iÂò
-‚ÿ„¶Ü ß]M`ƒ™ö„eöâÜG'_Åò³†Š™ñaÔ[Uð9÷;³ÐÁƒõ¢ßÅÀgx_#ö{ìUYpýe(á:`†yÔgKÂÛÕÓà Eͪ[f\ga_ÞTjga¢¤	ïñ øqy`y:8*ø„$€˜b/“« Š°"`!LDÚÒpÛɝúšµsº>òõáŒ<•NÕ<貁\° A¢Œèö»1¶-Áë™[§tI`)ÀçÜçñ¥ßä}¡È˾ ãC„,!¯2ö³ø0{ŽÓ´4ˆ>Óî¢tô/˜ÁsŸ¬	°ÉŒøà ßSîÏCÚ2žrXN£ÏÇãödÀ¾Óf0˜f nS
-è { \,,'’Ú˜0°‡ ¦ ;øXöt­5¬á“RÄqD™N­*nb!h 7P{†^¬Çi ¨A‘§ä&·–ûnJ¸q{rAãS7Á ŒzسÀá;+³>j9÷'ÕŠ[˜[Ž]•„¯ÅL„\I¥_IˆG‚	¯ÈI[2Oa㌝sLvŒB<7EØñèãvZn}{CUàz©ö«žiÁwW²hI€«MƒT:·EKā”BH{¤˜Zð‘q‹¬%®%‹U¨=µD<#رÀq;+3­’“Û´h\Ç
-]Q#%n¤ÂMڍ-#tN!܃8F
-°g¡UòlÌ´J*nb!nTͪ|’cÒ	‰ mÎ,ÆÆ;ç˜ì…xJŽ°ã¡Uò|Ü•„]?Þ QZ‚»m˜RÇ)÷ûbRéÔžZ¬€Û”BiIN¦¸$ZÄÁ«ÔVZ‚šìX,*y2f‹J
-7±4©c‚Î…>©±07V
-æÆíÉM,#tN!܃80ê`ÏbQÉ“1[Trrcsãfn\åBNt€=X'8·%ó´6ŽÀØ9ÇdÇ(ăqS„E%OÇmQIºã£´$$ãºvPߧŽT:µ§–°+öH¡´:âdâ Ù;•ÚJK؃1r€‹E%OÆlQIá6-šÔ1AçBŸÔX	˜+s“¶pcCãS7Á „‘ìY,*y2f‹JNnb!n\Ã̍«\ȉ°ëG6gc㌝sLvŒB<%GØñXTòtÜލÑsÿðæø>“…}é¸3!&rgKhÁÀSAçñ5ðP}^¾±[¤
-¸
-¾åáÄRbî¯ésnsèÁˆ…÷…)@ôx—½I
-n?\„x0ì`ÏGõ¬ÌúÓ>ŠiMqc#sÖŽ§„„_úr.(nÍÇþ¬JØïÏÎ!ó`äœbrclØ#ÀžŽÚY™½»ýNh€¾<¥~îŠoã
->‡¸ð…7H`]
-~BôôØÑyP
-¤ê‚)ýá°+Öm§-Õ6|=Fõ"‹
-\BÃ׫fêâ²Á5žÐ=ð®ÏýþÿÙЫâDx‹P¤±öRŒÍ´è$mißìà^ýYÝÎëúÌ×ûSòT:ýÞr¨Íôwb¤ëH…RðK˜+AŠiÆeÅ-(ÜSS¯ÇCœñÌü¥b/þ\€~Üÿ*£ñ;ªÑŸFJY2ÞJi:«2Àÿ÷£.ýú·FfKIãì°ÅAK õ†0ý
-ê`>–:‚Z¸¢úr{DïÈRû“d	à]?¹G£3¥–ƒ„Œû®Ø—G}ç"ÖK8ZÈà5#±ªh£I“QÄÌ4§Öß³N-á»m“·''¶0.
-@°)¾°âôr˜ÐQïþ¾HžŽÓ)|1}™{baVø„bÕ÷NŠVL¹«¥ãi#wç¶Ð£ Œ›L^€3>î¾2cu>V}´¨ÚBÏ`’RŠPkèÈåj‚èy37¦VÌÃC
-fwjS‚)¡Áö¬3Hðã«BZč)ê0!æî+ƒ‡±rœŽ•VAÅ‹-ŒJV€’ÖÌFÉOfC&3j+flah¡SŠÉ1LBMv,´ž™VD͍,Âm”îä6j[‘£âWa<¿äÔžäÄÂØ(‚`§Š¡ÆÍVZÏÇmQÇ\èµÇi‰ÆÆ2u„^ãeN
-¥#r˜TBºs{$P:Rl¿ê%ô'#5”ŽÌßt_,êx"V‹:N^b!`\¿œ
-\1#f¤ŒۓYE`è”brcÓa`ä ;‹:žŒÙ¢ŽŠ[˜Õ®p£êžä¸þ§ÇЉÀm!ÇÁF;åPì…xJ‰°òXÔñtÜu¤{6JG ºñ5\©ãPÆ/`ô2§†Ò9L*!Ý©M	”Žà
-ŠþòâÆ‘€JGæaBÌÝW‹:žˆÕ¢Ž“[×/§WÌH„)„0£¶bƆF:¥˜ÜÃt Ô`ÇbQÇ“1[ÔQq#‹p£ÚnTÝ“×ÿôú ¨=ɉ…±QÁN9;B!Œ›#¬<u<·Ûì\jv\Ü[ÓèW±†ç‘Ãß²é¿ú†×?e0I®ôO¼¨¸ð'WÊôÀ¯J¬Ÿ¨Í9°Y| ]ïˆ ëŠ	øÀƒrpzŠéA¸9ÂŽG×ÓrëYð×$¼fGÁV,PØsxó\±ËøópNñߟŸ}æ6Š Ø)‡bG(ăqs„>r§å¶<®øåâÆßôßÃuûýýå‹Wª•íÎÅðØðCÂj¡êû§Ái»¿^~óÝ›?ºßÞÿpÂ¯	.Yï,L½œð{©ûïÆqOÇ-~ùu‡¿›—[
-r8Ða‡û-8Ü|Á_@âÃãosöè®ZøsvNx´ã…ümà½óø&—«[ÿá<ÊôáÍû¾y/Þ“\ãwÊøhÀ/âÐù¯?½ÿñû÷?ýãç/·?ý‡¯~÷êþOØó.º„/?Üy½Æ_^}ýÍý·x¼â‡V¸IñstÞýüøÃIn"HØ›‹?w`=PéΦŸÊäŒÅ׬ñ
-½Ñ!;Îs6
-ÝÂiNóD¡úö£@¢XW
-,äs\@òñû›YéÚOñ8W\zÙÀaÇÇ;þ;‡_ªC쀿ÒòÑzÛ#WüÂ,!âœ| À¡»C­É±ÿFš!Dß¼ùû¯pŠ¿Ü0¦ƒÞÀøßa|uùþýä¬êy
+Ý߯èe²Šï‡wIÅ•xW,MU>`,YeÏ-ÛRÿ~  Áî±î”“©(]ZhˆsHâ4ûuÞ¬q›ÅôÿÃõòêuÙ¾ûx±¦XçŠßŽ|øî’š	©ÅÍù–Lˆ›¯ð_«[ÎÉä\·o/ï.Þ×ZÞ~¹ôÛë??§ß›‹79¶– _-¦¸X7Wc4-lÞWãòV²±)–á->%WSëâcëÎ'7oê8ÙeSʧ}RJ¦úÍEoRÎ[L&•ê†“Ýp,a‚s¦6ônÁÀ¸]•¥öàÁjÁv09AŽû*퇋oÙøéà›3%Í ³=R`±4¡8@¶àÐfj?\{LÔ=ÀžÅÌìY™½‡ésÇéËÁ$·LÅ´¤H¦`bT$G[‘†Ia˜í‘B“ÌÍØ"$S‡ª2Œ¶"Éu°g±Nß¹˜ñô9œ>’QS’Z
+ѸpešX f‡DÝv‚ÔÇÅQa®Ó@$bÞÑ+E›×^lQ^h6Ÿ•—X´Wl&û¤½Ø¢½ZmjÚ‹-Ê+Ä=.±(/k (²mÛñK˜ˆâ|€â„¢ã!Á1!öÊþ8Ó-Ò+zHêJ÷™qŽþwÉßw9·Cp¢,mg½Å±®ÎI›Ù„< fCg®›Î0}°~#(ŸðBƒ·°ª¬³Æ€7}ÞÜ:SC=Zd]*ÝRÀQ€3–µpB¥µÖWØ·½Õ€d—`µá*Åó_Û¢«&7·y8g:X«=ö§Ñe3—ƒ$¼^Tœ†Çip]//9†FYvQpä^*2.‰]$Ô׌+ÊÍYðÉ*Ò!ÙλŠ»¨bó8×8Ã&N¢°,aQÊÿ}Î2HM¬¸žá~k–bM-N^aU`³f±À~)Ü9ºc³ó)Î1›ÝYÒíš’K/÷Ï
+[Ÿ*`Íá",	¥â銽í¤
+Õáyg1Â~ÕÅßR¨϶%HB<»U<	ŠåQY`„áÄ–€r·Ö0c:^(tÍ](¤°0Tð>-ëXÇtHï^0öR²°}…‹#\&°Ö`!ê´ùP²Ïp¿U².¦ÎÏÁÅÉÖØe¸Ùâ+nÜ:U8†§ƒ',Éâÿ8I°õ.O¤ç>Z$·.áÏkŸÊ
+ZŒ—‹.Q˯„o;é’n!›¾÷aNþ7•tK¯´8!l.<ÔTG?,Ê;Þ¾Ut
+.ÕqÓ¤,kœ>?/Çs¢‡hqjfð.M…:¦;Bz÷r¡×k¼î(Ô'£N§¿RÒÏp¿UÒÞ6o¢ č$,æ˜5f¶x!ßIÀN¹o‡†¾QB‹…ó‹OZ¸eÞ·%¯®æÏf_xÉ»±¹úD!?ÃI_U¤ÒŒÿOêØ÷ÛE/ÙŠ·Â¢^³b‘a̶âŽNYvqz9¼Xì>œ»Xx[ƒ	^Goxµït¬c¾¦w/{­äZ˃çUòm÷›•\B×hR#¶u¶, É"«¹ŽËà'R¹â
+š'-܉SOógt¹¶¯0xºïÛ¯½‰{þê=Ì}ÝÖkû›Î¸íÄ;DY6W±TŸ*m o{á}¸¼Æ›MDE1B}á͸pHtëá^Xq B¥{Y°~gÂáæ³àmרvn{Ý\¦)ÄŠa½uãáîZ4q[¶˜ªÿ-š™½ÅK.Nw•eÆ–¹ð‚‡3Eîz‘Þ‰T–5ÎX(/{hæëz	Ö¶~ïrF‡uj’uLw€ôîåB¯ŠÙ`ÖkÛN8>gùôˆg¸ßVÌìðÜÊé$–ÊzXðJðw¦Pƒ5>eÉÙ€ŽwU¬¸',³e?ZföU5?w´8îAíePˆ×ïÊ–~?û~7#ùÒïoÄ~o½*žKCEID£ÃvÌ£ÁYPl˜ùipΚšU¶Ì¸ÎŒ¦Rƒæ¬&†÷x ü¸< <œ•YR ˆª˜ñD@áJV€´‡qŸ~öÚù\ŸÀøæ0OeSu
+m Õ†§KØw{†oŒmKød¨àP´„朶@ÙWéõxˆÓoö¾Xìe—ñBžA¯2
+ɇþüzNÕ´´aŠ¼J¼Ó)¼Xl¦0fvPÛ[Œ¸Á@uK€ÝBH°¢`TpòaÃ}Þ8 · öÐ1€Û”:ˆB& ™lU¨{j
+°c5aŸ×ZÃZ>)EœGÔëÔªâ&‚V`gÔ@öz±p-Œ¯(LnPî)¹I®å¾ÅrÜžäÄBØ8a—ÂNPˆãö<pÏË­Ïžt[ÒìØÂì2Ôr‹Ï»vaWRéWâÊë;iKæi!l±sŽÉŽQˆã¦;}æNË­ou¸á2ªö«¡iÁWWòÔc™ÕNí©'ìÀjÁ¤=R(=k Û¢è	\c«2P[é	{0F°cóvVf‹R
+·iФŽ	ºTúäÆZÀäX+˜œ´…[G ì’CØ	
+ñ ”aÏcQÊÓq[”r²±ã:fv\éÂN´€=X+8‚´9³XG`ìœc²câA(9ÂŽÇ¢”§ã¦•2à­ó–•ž„
+›ïRDOBÍ}ËÕÎmÑq µ ܦSOBK¦¸Äz\_ù83P{ê‰xj
+°c¡•òlÌ´RNnb!h\Ç+]q#-r¤BŽÛ“œXG ì’CØ	
+ñ`Ü#ž‡VÊóqÓJ©Ø±…ÙQ;ªôÉŽµ@<H+$·%ó´6ŽÀØ9ÇdÇ(ăqS„­”çã¶(%ÝRz’S¿Í&µœ}_;RíÔžz¬@Ú#…Ò“âúbâ 8•ÚJO؃1r€‹E)OÆlQJá6-šÔ1A—JŸÜX˜k““¶ccã„]r;A!„’"ìy,Jy:n‹RNvb!v\ÇÌŽ+]؉°kG6gc㌝sLvŒB<%GØñX”òtÜޏÓsÿ çø>·Uw	2ÄÄ¿bñÁÀSSï&{ӬߪÃz‹´VÁAœXJÌý=q mJ=ØÛØsLÚÌA퇃`ÆHö,pVÏʬ?´¡˜¦¹‰… 9kû3D†Ž/†9¹æcˆ%ô÷£sȼÇ&»är‚‚,‚’"ìy༝—ÛûÛïXýÚ'õ{vW|ó¸ïC¢Ç_øbdÍÖ„ñ‚ì0„â除ó (,1˜Ò»Š«PYªmøêE¸„†¯aÍÔ.Vûn` {<à]Ÿ	þÿ³¡×É+ñaÏkÿ¨€ E(î“‚¤-­à Ü«?ÉÛy]Ÿ€ùf?$O¥Óï6ãV¼¿;Óú`€{(}Ý%ê;ÓŒ§·X@§`oͽqÆ#õ—Š½<t0‘Òÿ*³ðÛ*šð1SÊ‚Ÿ¡–¦³ê ü?êò Žõ׍ñ۝’}ÏÁß;@K õ‹0ý
+ò´KA-\V}¹=¢÷d©ý=	\¹G£3¥–ƒ„Œû®Ø—Çç"ÖK8ZÈ°0¡Š6š4E×?M“jý…L!§Q“âö$ÅF7'^@Ž>ê¾cÐO”'d5f_b_y±…yá{Ší¡„WL¹+¦ïïÎÎîÜ^ba`€qó&Mx >Îø¸ûÊ`ÌÖùXõÙâŠóø±LÒjáj)%ëDÏTÐÔPz!‡I¤;µ)Ü£õo)‚/&ÒP’1bî¾2xgÓ±Z”pòbã’eà\ÓŠ½P#QjÔVÔØÂØ(cç“£˜„›"ìx,zx:n‹**vdvT¾ÂŽ¯o…Àô!¨=Ù‰…±QÁN9;B!Œ›#¬<m<7­®Æ«‘ÓûH®e~á·—:7¦–ÌÃC)fwnJK¬íW¢%?ª£ÜPZ2íî+­gb¥Rñ£úàTášÚЀImhĤÆíITD°‘Š0vV‘ÉŽUdzÕà;Z!ÏÇM+¤fÇf7êw²®Ø‘(®3·…«ˆ`#ì¤"Š©ˆxjH„•‡VÈóq[’îß(-É­?x-ÉeübF×j(-‘äҝڔ`jIÀO^l-Á}À§Ž#5¦–¨Ã„˜»¯…<«E!'/¶00VÎ*¢¨‘Š5R
+¡FmE-Œ"0vÎ1Ù1ŠéA¸)ÂŽÇ¢§ã¶(¤bGaG*"ìHE&;V‘é1TC"P{²c£‚r(v„B<7GXy,
+y:n·â¹Ôì¸Ð·¦Ñ/g‘ƒÏõ_«ãJ¨˜þMÉáçIÒF\ø3-ezàe¾õ3·)ö ÁØýR„M°mæ 6ô`âA(9ÂŽGŸ×ÓrëYðW(¼fÇÆVàTZöœÞLWì²ý±‚ðߏÏ>óG`ìœc²cìÁ(9ÂŽGŸ¹Ór[_ü|qãoúïáºýñþòê5þè¦I±•íÆbxløÕaÅ_ÓHÛýõò»oß~üÁýþþû~M°„î,,½ìŠkÛý·ã¸§ã¿»ë¿­×RÃ;|ð‡›/%D9ñ0þn'¦¼sÕŸ³s£/äoïÇ½\ÝúëQ¦o?üëíñžìp3WZÿ´4à×sèü÷?üð݇ÿùÓÛ_¿úÓ—x}ÿìyá¼;”;×О0þíõW_߃‡+~…ûDÐ>|m¾ÿéñû‰‘>óDŒ°=1%Áz˜ŸÒMÉäŒÅ7 ð$8f:dÇ0gÓðQ.Œ2€õ‰Ž1Æ/ÓÊ««	å•òX8Â>'FGû iKø#ƒw>›Š{l:Þáß¹þÛ©p²ÀÛ§uL®ñ¶G®øþf Ï°O¦À¡»C¥ÉµÿnŽ!D_¿ýÇ/0À_lÓAo üÊw_Þ_¾ÿX¥ó
 endstream
 endobj
 2061 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110924)
-/ModDate (D:20080610110924)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090456-05'00')
+/ModDate (D:20080528090456-05'00')
 >>
 endobj
 2062 0 obj
@@ -6970,83 +6957,25 @@
 /OPM 1
 >>
 endobj
-2063 0 obj
+2065 0 obj
 <<
-/BaseFont /FNJXCZ#2BAlbanyAMT
-/FontDescriptor 2065 0 R
 /Type /Font
 /FirstChar 32
 /LastChar 119
-/Widths [ 600 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 0 600 600 600 0 0 0 0 0 0 600 0 0 600 600 0 0 600 600 0 0 0 600 600 0 600 600 600 0 600 0 0 600 0 0 0 0 0 0 0 0 0 0 0 0 600 600 0 600 600 0 600 600 600 0 0 600 600 0 600 600 600 600 600 600]
-/Encoding /WinAnsiEncoding
+/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 278 278 556 556 556 556 556 556 556 0 556 556 278 0 0 0 0 0 0 667 0 0 722 667 0 0 722 278 0 0 0 833 722 0 667 778 722 0 611 0 0 944 0 0 0 0 0 0 0 0 0 0 0 0 556 556 0 556 556 0 222 500 222 0 0 556 556 0 333 500 278 556 500 722]
 /Subtype /Type1
+/FontDescriptor 2063 0 R
+/BaseFont 2067 0 R
+/Encoding 2064 0 R
 >>
 endobj
-2064 0 obj
-3800
-endobj
-2065 0 obj
-<<
-/Type /FontDescriptor
-/FontName /FNJXCZ#2BAlbanyAMT
-/FontBBox [ 0 -186 593 667]
-/Flags 5
-/Ascent 667
-/CapHeight 667
-/Descent -186
-/ItalicAngle 0
-/StemV 88
-/AvgWidth 600
-/MaxWidth 600
-/MissingWidth 600
-/CharSet (/A/M/eight/o/d/N/nine/p/e/period/D/colon/slash/P/E/r/g/zero/Q/s/one/h/R/two/t/H/three/u/j/T/I/four/v/k/five/w/l/six/W/space)
-/FontFile3 2066 0 R
->>
-endobj
 2066 0 obj
-<<
-/Subtype /Type1C
-/Filter /FlateDecode
-/Length 2067 0 R
->>
-stream
-xœuW	TWÖ®¦éªRp£,p‰Uè €Š(J!⢨ AQܐEˆl#6ÐlÒЀZH/€BƒQジ„"ŠÁmt¢Æ$Ñ®=NF“Inåýÿçݍ63grð€ïÕ»ï¾û½ï~÷>aoGÈd²ÁÉbRUÁáËÍ#oi´LzÇN#P„ôýïÞŠ1DÐŒÔAåŽ2ÁQ.8Ú7½3ì…ü6Ü¡„\&ËÞ¹{NZºjsÒÆÄ-®Q‘+='Mšl›™æçççºAõæ‹ëÜøŒ¤©®ð2ã“ÓÒSâS·ø»ÎÁ«“““b]7&«Ò3\câââãÌf+b’ã7¹†&%'¥§§eºzÌñtõ™:ušþå‘”²A™áž–šæºØ52~£29fó¿Máž‘?wé¼ÍßÏHŒÜ²@ùÑò°ÌMYÉ+]gùM™í=ušÏô¾ïÄ8b
-±”˜Gxï¡Äxb1XF, |ˆåD1ˆ"<‰Ä"—˜H¬$«ˆpb!#F£ˆ!Ähb(1Œp"b8Á΄á‰&ì‰âw™Ÿì¸Ý0»2»ûò ùûwìw(†)>')‚Ê£îÒëèÎü€ôíفF…Ã\‡ãŸ:Nplvüb9hÆ ã 'ƒ—îâ?äØPéå`é¥ ‚»í¢LÀäR,e/!wE ©*Òäë4
-<L%ÚêºÚâêl>DHFZOªŠ5ùZógGÍ7)ɤJ-ôæ©Idƒ[U«ø ²ÜP%²h+	´+v“Ï’R”Ý¥!­røÞcaüªÐ™”Aý{Ú¶I’”ûÍ£Ú:óȃDÞ蚯f·ùf·ûMÊ$2»[k5F‹µÞbÍKJ-	Óѯ
-ì:W”d×E9tJsXä4Þ
-AÃ^{€8½þ	Ãp÷ áüûÝŸý'™³ÝÜfö¼~õ°çgÞb¿Y„×"Ø765:i©5»0’JzÅzÙŽ©ÉoG
-hä0{à™4äåpèþ뱯ÏpL¾Ïêm€LÁr¥ÁköÕ½Ùnx¥»ÿlO÷÷°×{=?qoûY„¯D¹´ÝY2¶Poá@ždvA‡Ãî2Å’èŠT®KæX©ç/˜ék½á-0±$\1•›qAm0E„{bºè„ýH¢óÜ$_v²y'óÍšwªÂ£â‚}q=QøJ´µµEZï	ä™°‹)w†>ÿx¦¼ž¡¡A«ÒCWpz‘}ÝìéíäépçÅ‹ïº~²¢	!"LeÒˆf…öíy͉ü;&aÔ†»{£ÁÈù77ý϶è‹ôE%eÛK5|ì¦e¸€ÁÿVþ¯´hoüñ›Ë/…—B×Ò=Sé·hÁPžàK*²ýãO#ÁùØÃ8þ"ã&€=ræPšyÂ¾…MJVRŸ¨‰¼c‰â†}K„t5nºÇdëe@¤V÷±?Èe!€²·ëÇç3¿Ç£C6^bø£ú%G>iÔõÁ8rí¡©{7—͝9ƒ·l¿–<!^t2;pkûMÌjuaÎc7ûYp[Kª´Eu5Z].TC±nk~q‘Š[‹Ü žb: Ý“Ì©V×ÖUëë9àMÁÔœ„É—¢`ÙP¢+È+Á0ç‘ú’²Æ×+&cïs0	¾‚dLD›ï}«…wPï$ËÈÊ‚[˜OZC]¡6‡G¡ð’9ñ
-ìN|zô^¡±pß–jMÅö]]£Ó×èJ´9uü_š”úTa•°4mÊ,ú?ˆ÷…ßã|„¹'…Ö鹹z呐ÑÈÞËшz>	ìow¹y†G,5yÔ|
- sŠ0!uæ£Pd‡p¼þ؉Ã͵G‘Æ›x\ ˜o³Ì‹dzÐ{éì‹.ÌÄÀ )^Á˜‰]]Ïͨ#JÌk•zD§QšãΆ+øR¹Ê_`&
-~È\ìòC®Ñ0 7sÓjJËJÍH|}eEyy%÷YÍ—†ÃÂ~a϶OÔ4sZ}È°mÏ趿i¬Që·•m߶ß”•£É
-„â:šÉ6¤l©H)äíH.¡ÏI½,Ð? ¹¡1“…ˆô
-\Áõü‡îS!Þ0Ì’­Y§áØÆ Í•X6ñÈÚÝ‘Í„z†D/ÜԐzPÅÌ9¨éÒ\ÒÐÈ?W¿YØB3†ãf¼;ïD;WM1¡5Åú­³0_£ÎágáqvuqÇ쨭ÖyÕ–p.ç&ÎlÅÃKwfµ$ïå75Å–TOוìTÖâ½2këëGµ]jîêþ<e]ÇŒËÝY]\3º¶Z‰føšbÆ5htcØZ„=X9Ö'¢–,ÚoÎ", “mü¼`2®±ê¹™t0¦çkAKj/^ÿ¤þ’0²UØ«ù8{fíf!…FÂZÊ–é.¶T[‹õéþ‚+Þ1["Võåp‚9Öno5çp%‹t'žZÞ‹|é˶â“BúÁØ´ã‹OýÐ|æ¬pƒ~4뛉*ÿÃÿ³Í4ˆ„J{È/êö­¨%g¯òì½_°cï69|€s(c‰6/¯DÃ!‡`*Û s´—ºýã# OÒÔ¥Û¶—i¸
-ór–	thÌÑ!ÍVE¬q嚥ã
-ªR
-”Õ–±d½¾Ï`¤ÜgÉ\H°9ØTðŠGû!¾³ßׁ¶2³Ï¤\Kf¿‰˜·½rÉ7U²×*`Ÿ´Å¼va¶H‹œ»Éz뺞ÉN’±ªô¶ŽdN/Y¶$eÁèU±â9.N¦ldÀ_:WþýæÕƒ.qVՐêÅ‚L‹£+9²&jþ‡ÑaŽÃ°H>K>»~ãG^zµØ€5¾ìM±Š¤0Ók¹É:3Ó/S
-m>ׯAÿ6ðÃܼ#š+‚_•«+¬©Û¥5r@šV#’RUa©ÅZü-ø›”ãúÁ\Iþû½XJR3Þë[ÉÈZ!ëö¶­VcÁV"ÞVqᶍöxÞ¼Q€(;1ÀÂ9<u†Ù’£¢µ_U™d+v·HäŽzY$ò„^Å
-['בHB€ÉQñFøÁÉÜÙÀÈ6
-‹ÑˆpaL0°í'a>š§H'™ÿ±ÏÅz>5Žr-‰ba=îä\gHÆdóålóµ—DÁ¸¿”&ېê4WØV¼è¤$€Ÿ\
-w~€cl裝Íà<Š¾õ­bé‹´sà[Üÿ×…Fò!³ƒ|
-†gÈ`WÚaQ ëµ¼bÑt\M,ËqhMF4£_ãð¶¼A¾ÖSJcŠ²Ý
-A-‡!Î×H %7›Ü0Úýr£­mEãÍrfn›üc2Ò”Žð+IN"{Ó;ˤtŃ~”p³eb£Ùþ—×
-8¡¸2ãÄNÁÁSÉn²ÌÝÛ'·]õtv÷¤I³}"šc¾Nà˜§!Iq+ÃFM|ðóÏ¿{y3®3ä({ðúî«Ëç.ŒXñùͯ¯]¼Ã£öÌÓ×#ƒ‚Døû-ºv§ëúåû¼ÕçG˜µvmpö¤\Z
-&¶\µ3W(e‡§­‹
-ˆ²U¥ºª¸ª¬¼T Õ8ñTÇs?»qc{'ßõűÇ !dF'þù]DŒ¿;óÙíÎÖ‘+¹Èf¬+TåånÚ›™ Ðó"o~÷øò®[ëfà+‹„»¶˜„¼&œ…l\JZüÆÃ)Ÿòzò䑃'O&Œ·œF@ Œøã5jèÄó©		‡S­ó‡NœH>d±•2ÄVhwVU´^­Ui¶å—pèïÿ»¸L³£T(©ÆM§¾ªª¶š³ !Ã𛫅”¿°0=$Gò@D éœ;…|ºrwã—Ž‡¿`…ë
-·µïk9ÚÐ&´	-ª½I‡×ç‹h
-c8?e2))+Fˆ>jÌhImWÝ®[XÅåáŽ$±(binY©FPãèµÚ
-¡’ƒm
-S-âmiŠ7rƒûJkù‹“.&`¦T‹ÈVP—Ï~q¥÷	ͬ‡!0¨ñÐÕQO}ïO_–Àeg¤*ºH§ÖvU×Ur»¯^?uK ï|¹$tmvš—7
-Q†b)Å,•Æt“FkטÍ1U‰”•(­¢“ä'f[ZF=ly9n†pòèꁓ—G=	üÒ}å¹)±\Vn¾JPÓjÚ ­¨¨Ñq‡[Î/	ôÝ¿F/ZŸ£â3Õ¹;>èœÂ>½f¾zñ , 00Ì{ù²Æã«yMUYE‰™ljuAM~Kß‘~¶ànP¨ç÷ÿykõµ÷šûJáp›\rÆ5¿3Ñð©ý$:Œl°Š”Šÿ†Ÿ3jë,#‰›I¢lÓÅj
-öáÇk	qø…º´Æz¿Þk°p¸µAÖŽé*%d£u·,Ç¥»@Wd¨ªªØUõ52´
-ôÃ+á>ã„x¾µïT4_R]ºQXT¤.¨ËkÎäÏt>·áðè{üµê¿.¡8sU_vˆ²|
-g°3W(e·wÔ	záFýµƒ§Îݹ×~W0
-ÆíºRmiåŽ*6TëÆÄ=ë.ܼf%´8ÑW at 4æ<@ƒaàËîG@¼|8unT¬_,WÅî?ehؽ§ùxkÓqþærX€oä‚àù«Î<HçËtByÉÇôà¬FÉ·—†ÆFò³¢ÃgŽŽ¢ã ‚øq«
-endstream
+3799
 endobj
-2067 0 obj
-3593
-endobj
+2064 0 obj <<
+/Type /Encoding
+/Differences [32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]
+>> endobj
 2058 0 obj <<
 /D [2056 0 R /XYZ 151.701 685.529 null]
 >> endobj
@@ -7057,10 +6986,10 @@
 /D [2056 0 R /XYZ 151.701 643.753 null]
 >> endobj
 2059 0 obj <<
-/D [2056 0 R /XYZ 151.701 294.188 null]
+/D [2056 0 R /XYZ 151.701 289.868 null]
 >> endobj
 2060 0 obj <<
-/D [2056 0 R /XYZ 151.701 217.768 null]
+/D [2056 0 R /XYZ 151.701 214.888 null]
 >> endobj
 2055 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
@@ -7812,20 +7741,22 @@
 /ProcSet [ /PDF /Text ]
 >> endobj
 2227 0 obj <<
-/Length 2029      
+/Length 1920      
 /Filter /FlateDecode
 >>
 stream
-xÚ­šMsÛ6†ïúœé…š©|ƒ8¶JÓI¦jãNI´DÛL$Ò©:î¯ï‚ h’"«ÆÅ&ApßÝÅ> (-Žn#ý¸øþjñê
-¥‘BZa]ÝDc”hÉD#¡ytµ‹>Äï³m—Åò¯«wÍôi)¹™N5Â0ÛyQ´\,Yü]Uå·ÅaIâFâ¢^®˜àñÕ2ÑqZ}®Z[	"u£ÍˆB˜(g3iñÃÕâïA‘ž{1m‹áh×ÞE1DÍÌCÄD‚¤p¼Þ/~[à6ä	[#JùؘÒjÖ˜ÍÛÀùΚ kBÙÞä·§#$€%Ì$ÇMDÿ>¡K¤‹ù»í¶<KšÄu^܍ŒÅ¿~ÄDnM3;ðKV›æOyül›Ìò¸¼_®Ìྼ}ô$¤9ÿ?ÙÿïLS‰£ç%‚Ó/@M4×»ƒfØÝÓ¼z{ ÑëD¦iE‚µYQD4½Äãs\„Ü_°ÌÞªŸ§8IjKàj©eœ^ï»*0I&+¡júÅ•ð¶¸)‡Ô;]œpÄ¡LÔÀ”q‚°×6gqÉ&V‹`¸´BŒz—¦3$¸öA©•IÄÁ(KÚù£ÊŽç‰¡8A‹0º²+:Ôý©¼Í‹ÕÛ×ÚRÃŽJ[A­ò‘öfÉ(ì»Õƒù_wç>@9!)iÓPËzèÃû»Ôí…¿¤‡ìÜf©ba\àDC=xáIV'öF®Í<HŒI†â~®ês]i'BþÝsìŒ
-â·ñâ—&`¸•9î xÄ¡쎶O»mýœ¥ÍÎöèÁ0„Á©qcÁ º-‚#ÝÑ’xÈ!íÈ{FÈn!t[ܲ¯vizP¢Û¢6Þ¬‰‡´‹e'HD‰’%Ç©Dšbˆ›!ÿ;Ø^«>jÊ‹Z?:Ôú~|jü˜g-ˆ°cm œlÔ[í¶gÝÑBØÑÖ×mh{5§î˜¢î˜ëËoÖÔÃÜŲ́
-J_ú©Rĕļ»	ÎZæ ´"Ïžÿ€áIG]ß“O­'óÜ‘vÜ
-¥)p'<Ü…Ðî¸{VØy!¤y}å–¼Y}Ç^}Ç^߁͚yØ»Xv‚=°Aý6žÁ'H0ˆ=.Ð²}³8ýûØ‚—ï÷ù6³ïÍøB¸ÒÁ×w¥2®Ì“Dב7Öò”‡¼Úy_¹Ã.„®Ã®/k±›wÌwÌõÕ7kîaîbÙ	æÀc/}›£àzÂ1Ç’<i¿E9V§}j©{—ÁÎWÜzxáFÇ[ߍӧÌ÷6D×ñ6Ö%Zqo!´;ÞÚ6õóÄ…PvÄõ…-q³òŽ¹ òŽ¹¾þf-<Ì],;ÁØ0!¼Œ9‘,Ô{Q¨ûjYí×¼ÍéäWº~tÐ=ùach™/ˆ¶oB›èÄÇ^ùŽ½ç…ÞÑBÛÑ÷$mÙó:àøâ€ã¯Wké¡ïbÑ	úà:÷Ûø:}Tk(Ø$}˜!%ÚOÙ¯Ó}ûz÷{¹O‹Ý<yA|èÈëû°3>ÌRF×Q7Öää<rA´;ä¾³Ã-ˆ®Ã­/k›oQ#îPë«oÖj¶ËeÏa36xòÂW:šê·šÀÚ<MøßgÇúhkxû¡ÿÄ+÷Y]çøøäØø”󭇽²-zg²DkæA/€´#ïwämÁ¨Zðf´x!´[îâ›uâáîRÕ	ìÀ„àä…Ø)‚”ôVG•@‰kXùýTUÙ~o±û){È+h!¼èHë{q/<¤Ñu¨u)Æžßè‚hw¬µMæçq!íxë+[ÞæõrAôs}6kíaîbÙ	èÀ†ðÛC7ßÜbʐâ‹z‘šD= &ˆHÈ*…Õm+ ,ëoLûœÀñí±<ݧ;xþ	*ât»­-έq^W
-%µb¦×©ý!ÐàžèÃJ`¿-ª:uˆ×w™mEz'%â”»V¤êp¶eq3Õ´ÄM=u3?bÂ݇äê®4?<>´mƒ÷º¹B˜UH‹ö'[9e<A6¨UoZ^ŒCj>|I÷V—7Mˆb4+ebE "¨RÑŠ$u›/9™¯7Ë„ÅåѼxé8K·&¨;{v2D+ªqü Á60TÙ‹õ]^ٱ걪³ƒ=þ«[eÙXÈ\j:øl§˜9%ˆŒ£€›É·æ*¼~ÉšF°Ó’Äu{‡YÌæà¦Üï˦1l501Ù	FlmÔûT#^Ìä°œaù¬§’M5Cù1ÓÃ%ŒÑÁ’íOý¢˜&fEÜ®èU“&¦„äVQó6f¸+Q‰{†4o<|ªÐ{ÓÝ´›’„F³³
-Ëyaµš¶8/¯kµÇMK]º¤:~\&2†¬s¬â
-n!ñ¶õ±É·™ÜÝUÞ<]9÷™(ئž:üŒÇ»k3Â0âÄtâ§b¿N·Ÿ³b*&fÚ»èïR“*!cã\YÛãkS
-qfp;Rµ_ls“„lgG›$ñä²ê÷÷x^`¥§w‚aš¡š¸¦AÖ´pKb‡,-*§—¶ž>š,—'{b[Äàú.»·»ö«eHŽ–Ã&=ÈRià,Þ–ëÑ4xÙó]v“žöíɵ
-ý®YÑ8y3}Hüø?ðò††ÐJ
+xÚ­šÍrã6…÷z
+VeCUÐø'±LÔÉT»’Œ&íT,h‰¶Ù-‘Ž(ã<ý\J$ÚŠ°±$¼çÜ|A'	Nþ=ûîvöîJ“©“äö>!£\ÑDæ
+	Å“ÛMò)ýX®USÏÿ¸½éºçHIÉuwª†ÞØô#ˆ¢ù‚`ÉÒoÛ¶z¨ws’–Ð’Ö‡ù‚	žÞÎs•í—¶•ƒ RXuÚŒd“ÌF£Dwš};ûsF 'ij'cÉz7ûôN6ðÝM‚SyòÜõÜ%LäH
+ï·ÉÇÙg¸Oy$–ĈR~,SÙd0S·yM at 4‘™~¨Ž{( Ë™.ŽIšÿ:¡Ë¥ÍùÛõº9Ösš§‡ª~€Kÿó;&r­«Xš†ŸËƒîñ¬ÿ4û/º±«,O›§ùB7n›‡—@ñ¸@ŠóR½ÓWš
+Dsšp&ÀT‡þsj¢ûÞ½éší5}û;š¼o at dl”ƒ1xADÑKŸ‡ 9Ê°¸d˜]›ÞÂË/08–(gfDoçJ¦ÅÝÖÍ=dt&0¸ˆ]?>Ô÷Í~WXbÇç Ç	’ǘçÁ™RˆéäŒ".ÙÈhL.Ó„çÁ!‡î	®BPfˆÊ‚)Äyå¯m¹?/Å9Œ¬ˆ£K	G‚tlªzñáýˆ¶T°¢ÆÒÎ$"üD{5gÖÝöY¿6û͹˜NHJÇc
+æ²zøøXصðçbWž[à–f,ŽN at Z¼¯öðKÖìGÖF®hòHÚ*CB’¡øo_Úù®€²!ÿîvƒä×r—Ä¿´ Ã¥Ìq—	Ä•êW´mQ›e맲èV¶— †1l8}…¶1`]‹àPwG”$òbH;ò¾ž²Ã-†®ÅÍ—}·)E µ(º5_xµ$Ò.–!
+bP&®$MdˆÃ¿~qH“	ALþ7°¼¶>jYµ>j¾ÏiÖ¢[ÖÂÕNÃF°ÅÐv°½!iG[aK›¯ÛÑönJÝ2EÝ2ç˯–4ÀÜŲ#ÌAšgW2ÇAF,s<C÷{ä ­®Ê·ÿÀÅpâ¨ó|îLsEÚr7”ÞÀpCÛq÷¦´y1¤-y¾rOÞ¤¾e/Š¾eÏ7°Z² {ËŽ°1X8ÆØ£ú–‰ÄžžOÙYÿ~éÁ«¶Ûj]š}s ¾V|¾•V[™&/Š®%ïTÈËäÅÐvä}=g‡]]‹/k°›·ÌE·Ìùê«%0w±ìsƒ…ïy½9"ä,s0Îû»(ûö¸-u7%¬|õC€·6o¾ãç2´›‹¢ky;Õ%*ãÞbh;ÞÚ¦ôÓÄÅP¶Äù†¸IyË\yËœ¯¿ZŠ sËŽ01xøÎø˜ƒW©bíë°@™]rô¯Zy(÷æ>o÷qô^†¥.†GgÄ<eèœL£EÜ¢7&NTÂ/†¾ÃïÉ;cˆ[=m`Ё…0Š¡?	—2ÀàŪ#BŽñua£ˆ2žÇaBMsÒ?Ïy_lûMÞ/Ͷ¨7ÓøEñ`ñxØh“äÅÑíÉ;Óêä4uQ´-uoÈÙE·n kˆ›ïY‹#Þ³6P_-³iØ.—=‡MÇÐß_[ÆP,Ô²å0‡»ì¿+÷‡½F¬Ãí{ÿW¯Ù–‡C`ïzKŽ<ßR¹¯Öò"¨ZîNU‰R,ÀÝõÊŽº¯ç먻^Õ2ç‹æ&¤-s¤-q¾öj™ˆ»Pt„7ˆ 1¹’7#%"mê¨dH‘þå/Ƕ-·[܏åsÕ‹áÂAæ»Øƒ‹ dQt-f§ºãÀ#º(Ú´Sm]ùiÖbH[Ú|eCÛ´¾.Š¾EÎ7°Zª rËŽ@1¤¸è¹øôÙªCÈ‹Ž"u…j@Í‘¼ƒIÚ)Ð4‡oôñ9Ó‡}s|*6ðÓ'¨H‹õú`ˆ°¾N»€(}ȉeÝ!¢. @ƒk’Oqú¡n…eüðXš£HC{R"N¹=ŠÔîîк©ïÇ-q=¡\Ïß1áößãö±ÑŸûcƒ{§y†0¬ý#[9<GV¨…×­ªOSêþ5ø«Ø=]ÞB'½Òa%FODŒÓàÞŸp³d8®†€¼ôö††é³ \B¤ÓþõÜ$‡ÉMtf9î3»}¬ô#[ÅÒÒe£xzl˾Ù
+•Ä^ Å;‡¯#õ¤OùlÆ$¤ÉÎF
+"WµÑêŽgÀçæî ²æ}w´¬˜S•¾Ìs™þk¾à8K[¸„¤ëÞ£vÖuvW5÷¯ßœ{&™~"á¬hÇ›;Ý
+Â0âDŸ¸Ã¯ƒ~W¬¿”õXNVqæ²,t©„Lµ¹æ`ÞßÁfY¥¥>ˆZ›–¶ß?¯+]„rcZ»"ñj9óϹX8q¦Æ‰–f—Ã2#¨švˆAlWukõŠÞé‹®rs4ÌQ)ø~S>™êM‹Š£$°Z
+ªÔè8K×
+äº×ÌçMy_·ý‡;“úc7¢ÿÓ'	«®ûÓWàåÿÙ˜”M
 endstream
 endobj
 2226 0 obj <<
@@ -7834,7 +7765,7 @@
 /Resources 2225 0 R
 /MediaBox [0 0 612 792]
 /Parent 2169 0 R
-/Annots [ 2223 0 R 2224 0 R ]
+/Annots [ 2223 0 R ]
 >> endobj
 2210 0 obj <<
 /Type /XObject
@@ -7843,57 +7774,50 @@
 /PTEX.FileName (./Samba3-ByExample/images/AccountingNetwork.pdf)
 /PTEX.PageNumber 1
 /PTEX.InfoDict 2231 0 R
-/BBox [0 0 354 234]
+/BBox [0 0 356 245]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
 /R7 2232 0 R
->>/Font << /R9 2233 0 R>>
+>>/Font << /R8 2234 0 R >>
 >>
-/Length 2234 0 R
+/Length 2235 0 R
 /Filter /FlateDecode
 >>
 stream
-xœÝ\K$5¾×¯È#hÕÆïÒ^X¡}ˆeaª%.\†Þ^èf`†Õüý°v¸²+í•àRêC–#?G|áG8œéì_7)Ô&ñ¯^žOŸ¼
-ÛïOYº½úkýñî‡Ó¯'U~×ËÃóöÙ=ÀÓ¦¥!¤íþûSQ£¶(EÒ)lZE¢ÛîŸO}óöÝO?¼{ûß_>Ý>ûû_üó_¯>ÿøþÇÓç÷§¯ORD§œ×ÿ!­M«í?'¥EŠÖn^yá´ÙLLÂE¿a¡‚ÞÞ½9}ÒN¤ íöa~>iáþ¸S"Yg ¬2lF)á}l×
-pNa	ÞzÃx#¼´QD½=÷úUòdVPÌ/-¡Û Ô«ejšcÎ]¤¬ÖskU2p:@'‚jDè&m,3+t ^Äà®uÄuôKýp„nÝ@ã&ú$‚³àŒ• *4z¼ Ê*ÉÁ¢9F3(B÷å7•„ÒµëåxŸÃ‡ñ¾ï„fÚ{¡•[e¶ çÌ–àŒP™
-Ö
-eÌ*¥8§´¡±D€~†„µÞé-é(Tr_Dò2eÁûÁ9| ¸oc–x²Aø€AÚœ$|¡f^“Ž”ˆvsQXSˆ®W¦éuôKÓôý";¢ÒÈ.(aµ‚VRÒ§6´J]4pÎo	Þú„Ð)záa¨Ak[/‚‰M‚}²‚:w™B¹Üs:íºu­ ÎÝbC%ˆöпƒ®Ô¬7 „‰½F
-Â@_wsøïVà»ÞP2Z!
-ó‡$Üë#Ô¹Yî(¥¬iiе‚‚V:ÈF<CQhâºVP +!Â/¤Ä5ÉàÚkc“dUsй˜ƒÆ̨Z­
-²¦9¨s
-â—â檄s: 1NÉ
-k3W§ë Æ)(­fæHÂ8:§`Œ€ÙÍ‘€s: uNNCJ’¸¹*áœ@³4˃Š³ÅKˆ.ÎoÆâ
- 1LÂ
-Óåœ\€ó9¹°À›
-Ö5V˜ÀÚmV9áÜŽÂ|Òp*ÚYLÉqÂC5ð€%*LAç&²!çÏ½V• ¦kËŒ6Ì\œ®ƒ˜&#
-ú¿ƒª`ÐtÔ½ÓÞŠÈy÷í*d64[é‚€i¡ ö⺏«mLê길q\ÁÛ¸ œ"¥J€ƒ
-]‚.¯ öÛ€h’ÀB2N܆àÂᮘf]ú¹ ç~.Á¯l’L°–(^7×¹ÂlΙ-Á/·	ö´"Û*¥9| ´?Nˆ!+ãPUjÆ°Ç·ÂYC—Kz3ð@nÞÇ1È`Å̉Kim’Sý 5ó—t$¸º¨·œ´+»Qò~e–À_š¥‡ðÉ ûöÁJCº•Ò¦­ÆyeÀÌѽtï+Ûhl3ÂëD‚Ü#SÌ™‰´˜ÒDÈŠ,x]¨gŽ93[œ½eâzæ˜ió	ÍÕÃ&h\¯sôÐüè}ókÉ‘ã¾TÉàðêÜ
-wø`õ¨kK)vl°EQˆëZA/©`g7¯aàR^€ðÑ”n’Ìkuî2ÈilIN¨^•ä]ÍŠñ‚½{-VÉÀë ÅxÏ­?òyá.ã‘(õnøÔôTçŽ{Ǭ‘„ó9Bu^°æ`\cIÂy¡/넱‘[¬’×Šñò:Gf±J^(Æ+¤œ`1‹U2ð:@1^°É×Ép‹U2ð:@u^QA„4–Y$	çu„ê¼¢Q"Ï,’„ó:B1^Ró"ÉÀë 5K´>öSnó Ê„¾;£ÝÚî½Ë>¾wY€«!W" ØÀæ!bRãzO`¾x>·%BëˆÏh`ØJÊßkm’äÇj¨i“‡è„Ϥ0FÂâ¬q½Ä'ˆê‡§èÁãôîU„SÙ`	GŒT>m*µë%¡9|`´¿²¦3¸?êºxÙ>2[€_îATÊ~™Ò>PZçäÊã³bÛT@$0vtÝœÂG‚peðùÊ‹6øÒ!]/LсôäI4îs CøºtR,ºÖƒsøÀoÞß/FH`¯™pÇò*U%ØΆÖÅÔÔëZsÜ›;YJ›¼YØ…Ù)|´pj¥ÏÏa+{|7á õœ^ ñ):x­1oÁ•Y
-¼ £Î]ÖC;ÕcÀ
-ŠñªíÁ,VÉÀë Õy•E,1‹$ἎPWoÔV·k/éÒ-Q%C{ ÎmÖ0‹É‘FZsjÂí‚@1¿¡UÍQ˜˜+’ã¨*<\@u]8;Šf5×u„™y[ÙÿÈïï¥ÅO0%CÎ|µ‹ŒèPBåw1Úá¾ú@'òCk’x‹»@—%6ˆ\^Ñ#!Ì';H€¨Ö¬IºfðRÇ­§¶Á§å<ÿë©£·áÐ#ÆK§³"£09÷'JÁFòƒz¢Ä%øj9µZåMáˆz~æy×(/Ùƒ‘¹á_8`Óc™”p¾	Èí1Q’ÅSˆL ŠKÐ)Ój=íôäÞüÃt?+‹×Ù?RñÜz"$Ó[÷Î⟓ٽPS<øƒT“µLö/䙍@ç|Ê°Òú-ÈÒ§¤ÊhÁäèÓ¹¡»*g¹BÄ|È ) 17i&jkT
-A$IÃàÅž7 …ßnÕÅ<Á}Lø䜹F"ƒ°Œw,#ˆy‘
-_ë6DˆÁ4Tnž‘€xUw5Á<+: Rl
-¸yèß [¹¿†Cæ•+«`ñýJg¬Ê›ÿîW01gû
-!,0
-T&¿š Ò"D›Lt¿ˆDGŽ¤€»{ëöœ*s«L8?z7`«#¬iaÃCNƒjsšÊ=l0DŽ
-MA-V=là<LÕàù"ÉLÔrA¬IÃèE™^·éˆÜ·*!jyÚvâe^s×ÊÌïˆZýZd®‘„ˆUx5Á\+: rn
-xH¼-¿XLdŽUAåUgn£]ç6s¬ÎþŽ(Ñ¡)¨ÅîX“T^¤€x“‰î‘èˆÂ™.° xS^
-QÑãK Äc‡·ùef›·^—óî4³k™Ž(±¡i r±Á¢G€ð-]Á@ÏlÔ2‹
-QY6
-£C\¼9߆Èȼ#	q+Ó·Q¯ó›9W#@CÔÑP¹;W%ZÕШW̹B¢
-Ç®`ðbˆ7揎Ý5Tb4‡‰8Íò¨q¢i rs$ÄŒ4s²Ñ]#‘I6ƒ<>Þ–_C„¬OtX±ù<w"`ž‘Rd1¤Ý/¢U§r1ÀBÐÉÏþI…„:t¥ÈÝ'~T}ô`ˆ7äÕ™_$!beÚí:­»[uÞÓýZm*w·HB¼ª¢]
-t·Šýv»²kµþC<¼Ÿx$ìN‘ ²¢¹ZIÓdnNÑl§û5´êTnN5I¥E
-*k2Ðœ"í~¡Gµú<ÞŠGùÁ¢p^:¶ý|Úˆ_(æt@‰$>E¡"$Ñ„²±,1U¸‡úcâ.åDš ºd©µ~)’„Ä«±Qrmüú!?i(ÚkÐÕ<Ý'¾Tû‚îÅ›óé1?ðWùÉrsª
-§%‰q¡¸Kø¶‚;½k”K³;bUñ®&º_…B-áZù‚ÿCþŽéÆ\zœŸüÉ/d𣯠7‡§Y·YX“Û̘`/ÎØL°RÀjŒ§(÷?2/p<h<KÐS‹¯ŒÛ1­ýÇysøÈn>k¸”0fñe­uxì5ŸN*æ	§$ØQxè4ŸRQšK¸‚§o~_ݏÎÿþÚ;ŸÈâç&ŸöÓøÉÜŸ ›ÃwG|fpbUÞš÷»®Q˜Ã_j´c8;¢ÞC¨€©ˆ0<7‰Âoó9
-ïÑñ볝Äãù4ééóœú]~}ûxíù=d³˜ƒjY]¬ ÎíL4'Šð4EŒyB at VFçh@çƒÿÑ‘ÿLö?:v0Ü[•ÿEÇ—o~ûðöÝOŸn*ilYá'Úâ¿é¸ƒ”Ðû”6‹_ÊA›ßÿûô‘PxË;á¢T۝j&ÉzÏà=<J !˜àƒûRIf…¸ìáyˆ;% ì&M7åŸ~Æû™5j†!¬ïŒº€]f’Ð)ƒßÿöú»§7†¤E%gPY®R(|ûÑ—÷öۏ3G‰ß…ƒF/¶Þ~xýþñ—·oŸŠ‚ =h¸Tp~ýüÝ뢘Á8 0@ðL¾úKæzçÑsXÄ/jÿügu—jmì8ÈÝî`“qè!âñ—§s}<Zü®þß¾úâõû7ïþñæ·­ú‘ÿ[ÊקÿòÉm
+xœÝ\K·¾Ï¯è£Œ`i¾rq`äű5ä⋼YkaïXòJþ~ªHYœžéf {˜eõǪ¯ø(Ùœùc‘B-ÿêçÃéðõ›°¼ûxÈÒåÍ_ë?/ïTù¿~<œ–oï-E!-÷¿ŠµD)’‘jÑÚˆÝr:¼ú÷û—ßÞ½¼ÿï‡o–oÿþúõ?ÿõ滯î=|wøñ EtÊy½ð¤õ1¢i¥EŠÖ.Þ{á´YLLÂE¿€Q¡‚^^¿´)h»|žZ¸ÿî”HÖp>9!Ãb”ÞÇò¹¦0ç¦à­'Œ7Â+@EÔ˩ׯ’g 3ƒb~i] V­PÓ>æØE*ia=·V%§
+Ôqg0Pd’ÐÆ.ZY¡jð"w­'6à—zbÞz‚†NRIgÁ+AWhtz”U’EsŒ'PôJå€ÚàËg”+/'àПwB3
+ÓD«4ËlΙMÁ¡2!¬ʘ¡‚¯Pš€sJSð%ô3!$¨­ðÎ/)D¡’‚#€küvѽ	t°mx§Ë©58Iø„ßBí¹L:¢U"¿¸(¬	„ŸVÙkÓt~išnÂ/t!*ƒV»3Ûá`©
+ZÚˆ;#8ç§à­[Z/¼Á·^Ó%Ø-3¨#“© ”C”¢Ô+Ô5ƒ:2‹„Jð¡‹]3¨½ÞPJ
+{
+gzøZoLÀ‡x7_÷†2VHÃý©’Áë
+Ô±[n(¥“ˆ~Ô5ƒ‚5V:HH<CQhâºfP +!$=Ñ)qQ2¸þÚØ$Y×êØd,Û˜QµI²®	Tçý&’WÌ"I8¯-ãþCTà«dുb¼ ƒIZs‹U2ðÚ@1^€6)r‹U2ðÚ@u^RŠ³HÎkµ—wyН^`­É덱¸$8Œ=M¦ó:ç3t
+TÌ•¶0bU˜ÍÚ-V9áÜŠÂ|Ùp$*Ú%ÌÕqúCîŽû’” ±:2™Î‰á‰Õ+Ô5ƒbmË#d°Üb•¼6PLŽŸ9ªJ](棁Œ:Á^¯H7P{µÕP2©!ÈCp…š0”`$©«£ä:üâ(Ù‚·QBÞb℁]¨Ð%èõj½Eˆ°EÁBŠNl³ ¬dŸg~NÀ¹ŸSð+[„$¬3Ž×…xe¯1›€sfSðó-fÇØM“5(ÍÀ·óåä!{ JÈm€ (œõ©|®ùí¢zèu`SL§²jƒ“d˜ô¨=—IGòQ¸¨JêéóÊDÝ€_š¨›ð-‚îLÐn:$‘Ò¢­†IyuOÀ‚3ðÞ-„V	6ÐÞ׏œÕeAî”]Ì‘‰‚˜íÄ YNŒ$@=û˜#³U1Ö
+n0=û˜ÝRxŒ²¥$@ãê¬ÝGí?^7¿ö09îK•o ŽÝpGÅ óBº&P°¬ZèØŠb×5ƒ^RÁ²}èmé\^†ððJ7Iæ5:v%[’ªW%yß3ê¼‚„TÐ%f‘$œ×ªó
+Ú3kXâ|.=e< 5aˆpU2ðØ@1ǽãÖªdುb¼ aÅ]-³X%¯
+㉘±‘[¬’×ªó‚¹œ£G·HÎkÕyEÜ'Å,’„óÚB1^6·X%¯
+ãå!BË-VÉÀkÅxÅr¨Å,VÉÀkÅx%<Çæ=D’×j/ÝVx6;5ÄøÐvl´ƒ[½œÙ…/g&à*FÈdÜ”„aÄÔÆõ*ßߟ”ïÛ¡uÄS¶²žšRm’䃷	Ôn“È3}&…1®ÆõÏÕ‡wуÇèÕË
+§ ²©%AB™ßúYpÄÅò©Vûò	øÀh~e'Mgp—6ÔUé:³]øÈl~¾Qæœ	Ó”öá¥øvZ®ðlÏ»¦Â&ˆè0bó'ì"Vwá#Á	8lö䫸¥ÀIOƒ>Ïì¢蝳j¬bÀB ³Ä"uµ÷á¿x‰QCCã¦+äUªJ‚ñ°/®ëâj×kªñ!ÁþŽ¦¡ÒFx½öz>Ú	8µÒ™{|{á õœž ñœ¼5K4˜·àʬð±vMR^á]ÖC;ÕcÀªó¢öèIÂym¡:/ZĺE’p^[(Æ«5j«ÇÇÛŠñ‚‘.=o	’¼6PÇ>kºÅdŒH#­}j‚Ií ŠùÞ¨j…‰	D¹ä8Š$ÜÃ	T×E³£hVs][(œéçáÝ–õ?ù
+¿´Øâxlr櫤–&%&…ÚÁ2ƒ]’™ I|¢M ¤‘A@àòž^ï	Q_'1	ä>Z³Z$éšÁ
+—WŒf<%0Õè=¯çÙ_/%}¾wž0V:ˆ‰°°›5&¿”¯ŒBŠùÔ±3â|ñœZ­òqD.°<®Úä’=•þåA†05VV	罁ÒÊ*;• RzßJèŒièçUý܇_\çÓ°ŠxýÁê§ÖêÖ[p½wøÜpÕ«^Ø~AuD´¶­É~„<вr”#C(KÁa_ÁêYuQùµ›Q:"7d×@ål"W¨‚˜Ï›‚ òF ™¨e¬QI4‘$
+ƒxÑ€þÿ|«.æ‰ëcÂqæ	ˆXÂ2Þ1îÄ+Ìd"DáS@åæ	ˆWUÐxW̳¡*Ŧ€ûð‡û
+º•û+`˜c~Q¹²ÂkŽùlEݯ`bN3ÃT`¨L~5A¥E
+ˆ6™è~‰Ž(Iw!÷Öí9UæVpà£çqÃà•°6€LlN×2Qx‘‚Z¬XØ ¶x…ª)ÈÇ‚¡›¨e6‚X“†Ñ‹2½nÓ³!"2ߪ„¨•iÛˆ×yÍ\«3¿!jd úµÈ\#	«
+ñj‚¹V8t@åÜ>!ñ¦üâ1±;V•Í\¢Ms»;F³¿!jt µØk’Ê‹o2Ñ#Q8“‚ÁoÉ«!**|±“xìÈ—hBãçkî4³k™Ž(Ìš*,zÀ‡’ºG<ÂñÌF-³èÑ•eÓ0ú1ÄÅ›ómˆŒÌ;’·2}õ:¿™s54DM•»sUÒ¨U
+zµÁœ+$: pì
+/†ØxcžñèØ]#A%Fs˜ˆÓ,ï®Qhˆ'š*7×HBÌH1'Ý5bÑ™dS08ÁããmùÅ#$Ôœ˜$ßânQÄãWeú¯ÅCúóL«W§r1ÐCˆOÈeh!Ä'H¨{nU‹=€´çďªðØxK^ñ¨Èý"	ËÓ¶Ñ.Óš¹Uæ}{^ÂB¯MåîIˆWU@´«îV±ßWv­öÀŸÇÃÛñ‰EBæ	*«:W‰tÌÝ©:ÛÛózu*7§š¤Ò"•5hNö¼Ð£Ú}oÆ£|°(œ—Άeýž6F<–tìÒQ“Ø(T„¤3šP6–%¦j<vº•‘”K9‘&€.Yj­_‹Õ ‹ a56J©1 wí¥h2_Ÿ;ª}Æ?÷âÍùô”òñˆž9E┢Ä"1N8tw)I58½j”s³+b¤¡ò&ͯJ¡”‰_­|Æÿ!{éÆ\zÚ¿Í“_´à¥X-‡_IÚÖAüÓúêÌ&öìÞÌV
+XñfäúŸÌù~l at O­‡b»zuÚ.|d7ßk8yøFt_ÀZ‡WYsñù bžpJ&Èñ"i¾y¢—pÏgÞ|YÝOgÎyí„'²xÜ””¿ë×ݵ_]ÛÙƒ7VÒŒníêÊ
+ûð‹¶	g×n`Âû¸x˜ŠÒÔ7ôY¢ñ;‚)¿Ãwã¨b%ñïêzúâMýƍ9aªßQ;"èΫ,p€Î)—ç÷AGºe‡·Q„÷#"¾T]´Qífìè¸ñ³ùw`Ê°ŸåPx9R	ÈÀ½UùW9¾üôùýËoß,øÐ:r¯µÅ_渃„ÐCZ±äïÁ¢ÿ^	…O¼Ã۝f&A;ågŸáÝH¼j‘OíK%™õášg ²Þ)öI}(ÿô;>ϤQ3Œ+ }§`ȼó‰¿Å2ø㧷???"2•8qWª
+?½úþÞþôUæ(ñ+áþ¼0
+¸âㇷŸ>¼ÿ\ÀWwª]ßž~~[T 3 Fr‚ç?ü%S½óè8´É™õßÿ¬îR­m­ o»ƒ
+RÄa‡ˆ§Ï¿æú0à$¾F93þ·^¿ýøøòÇOKu#ÿ<ʏ‡ÿ©-È
 endstream
 endobj
 2231 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110924)
-/ModDate (D:20080610110924)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090457-05'00')
+/ModDate (D:20080528090457-05'00')
 >>
 endobj
 2232 0 obj
@@ -7902,98 +7826,32 @@
 /OPM 1
 >>
 endobj
-2233 0 obj
+2234 0 obj
 <<
-/BaseFont /DRISQF#2BAlbanyAMT
-/FontDescriptor 2235 0 R
 /Type /Font
 /FirstChar 32
 /LastChar 119
-/Widths [ 600 0 0 0 0 0 0 0 600 600 0 600 0 600 600 600 600 600 600 600 600 0 600 0 600 600 600 0 0 600 0 0 0 0 600 600 0 600 0 0 600 600 600 0 600 600 600 600 600 0 600 600 600 0 0 600 0 0 0 0 0 0 0 0 0 600 600 600 0 600 0 600 600 0 600 600 600 600 600 600 600 0 600 600 600 600 0 600]
-/Encoding 2236 0 R
+/Widths [ 278 0 0 0 0 0 0 0 333 333 0 584 0 584 278 278 556 556 556 556 556 0 556 0 556 556 278 0 0 584 0 0 0 0 667 722 0 667 0 0 722 278 500 0 556 833 722 778 667 0 722 667 611 0 0 944 0 0 0 0 0 0 0 0 0 556 556 500 0 556 0 556 556 0 222 500 222 833 556 556 556 0 333 500 278 556 0 722]
 /Subtype /Type1
+/FontDescriptor 2063 0 R
+/BaseFont 2067 0 R
+/Encoding 2233 0 R
 >>
 endobj
-2234 0 obj
-3290
-endobj
 2235 0 obj
-<<
-/Type /FontDescriptor
-/FontName /DRISQF#2BAlbanyAMT
-/FontBBox [ 0 -186 593 667]
-/Flags 5
-/Ascent 667
-/CapHeight 667
-/Descent -186
-/ItalicAngle 0
-/StemV 88
-/AvgWidth 600
-/MaxWidth 600
-/MissingWidth 600
-/CharSet (/L/n/c/M/B/eight/o/N/C/nine/p/e/period/O/colon/slash/P/E/r/g/zero/one/s/h/R/equal/t/two/S/H/u/three/j/T/I/four/minus/k/J/w/l/a/six/m/b/W/space/parenleft/parenright/plus)
-/FontFile3 2237 0 R
->>
+3284
 endobj
-2236 0 obj
-<<
+2233 0 obj <<
 /Type /Encoding
-/BaseEncoding /WinAnsiEncoding
-/Differences [ 45/minus]
->>
-endobj
-2237 0 obj
-<<
-/Subtype /Type1C
-/Filter /FlateDecode
-/Length 2238 0 R
->>
-stream
-xœuX	TÇÖ¥1¢Ý¨$‚.E€(ˆ
-â‚bP!"Ê°É0Yf†wEE14q' .‰k4&ú|/j–ÛùkÞþêdxïü9‡33Õ]u«êÞï~÷»È;B&“Ù$.Y­+¼E7™ØÇFìkË£0ñ§¿¼å}	ŸÕ]‹e¼£-ïh·½¢ÁEìÑŽ8Cf7ÂV&Kß¼509E¹&aùŠµîž³ç{
-<Äúd„¯¯¯ûRå‡7î“ãS–¯vÿÿXŸ˜œ’¿zíx÷@<;11!Ö}y¢2eEª{L\\|œ´l^Lbü*÷ „Ä„””äu^î#‡1ŒKHZš–êš¼:Ù}†ûìøåi‰1kþã!A#g¬Ž
-”˜?3|Êšå©+f¯35måܐUÓÖ'Æ$-ïîé5x¬ï°qÞÃG|6r”ÏÐO	b(1“˜L#á„7áAÌ"‚ˆáÄâb1•˜K„£ˆ‡ð"æÓ‰ÑÄ b1˜ˆ$B‰IDHŒ%dDžp$>"z΄эèN¸,Á=±—p%Fa÷vØô]Y¨¬Ù&ÀFeóÜv¡ím;O»,»äåWÉY”¥¥è•]útÙeogk/ØÿÛ¡ÀáÇIŽª®T×}NŒSŽ“Ê©Åù#çÅέÝ"»­ïÖÐíY÷éÝKº_wñuia>f¦0ߊoœÄ7¼ ¦	2×µ
-¶'wÉj¶¢R­Ur(‚Tæi²sôšjîž)ÍOådK#1‘Uùå9ÙU‹|P-e6Ï…Á\ØÝèÊ܇ñâh…?©Tãe:¼¬=&Ó-FŒ¸’F¶²B­M碡Œ<(”¶hæøνµåõn_ñFÍÎô=ë*ÖðI4â(¥
-/,ÇfÀ†¬Òã…yÚ.´äƒ)—F…._?c‹‘)À&øŸâ‰àÊÔ‹+EGEÌáy5a<z‚z¡¯¼Áµ¥¥æp·×¸­š¯ õ*}žºpSžšŒšžˆgÚøÝýl﵁ÍãÖ˜y%s3cs™¦Òm‹Voä˜ú—s³Z£ßÀ2õYš<%×áÈVAtÆ~ü>SÀøC®7¥ù[½^dµåÜJ.ALÛ-**¥‘'‰¼Ñ[4ÞÊ=I|Ïìéž»Mi	dºÅyFóêróêt. at LÓ‘0
-ý!·¸_:‡±› '„"ÁÿPDV]&_¶Ý|òÝ’Scp—ì©çÏЏ®b‘ÁºÙ9R@ñ
-ˆ‡±ÔѳBÃÊ¡h·2Á‹jæë4Óë×íXÎ/§Cç,˜lqµ(3ßÙoyVT —"gÔý'`¼û8AÿD=¸¥v¿?7ÀsÌ81ß½}òð½Õgï¸)ØŠ…=EcÕáä%Ež‘k3Å’è’X$ïGfXŽ[ŝ“|ÓÙ³U†ßÄ’pÉT$·œP+È®bókÄÅÂã3w…ðSù™_DGÅ,JžÂ‡Ñc)äÎÈú\kÞuò4»g×–*¾œ6äéTê‚Bu>1=ò‹ Œûï +w›‡ŸÞ€í‹‡óŠ٢Ì2uOWjË«8°£ª4íù€7Fa0L€R:àŠ‹oÀgÃé
-RX¤+TEà‘:'§\
-D`8è**òtJΊɓ!ç“îó4t{õ38pÌCpúuóL	šÇBÐyÅ»{^Þãý½<'Ü}ýúû¶qìO` ·A”‚?QX“upÅãñMƒñzôFN¨çŸàöOÕ•ç•çåo,,Ðp±«&¥…òˆàÇßÈþƒ쌿ܾø†÷…oNw8±I}Ìa¾£@²A®Èùþú‚¸‚ø#¨7Ð?#y ¾C…äˆ
-¸ƒûÏø‹¶„fPlÁì#l×20òyÛ/¯ÆÜîÏ¡ý°iJëçlÒ¨o6bIÈ´ƒb¥´Ì	
-œíc1¿f>•’ÂEÚÀ£ñOa}ƒ+soƒíM*uy•[túj\©jµ~C¶:OÉF#ˆ§˜&8áEfhUR`YàLÔßœ„É#À‡¬Î×çdåcÌ䀾ë ÂD¼{ ŽüMHÄ‘G´ì
-æÐßEÏ›G–ÐßÀèÕ*su
-‚/H¦þ-ØßyÜm_“»k­VS\XÆÓ[ôå[ôùºŒJî‹íiå«ùH><yØXú¿ÐvU€Ÿb¡+œ
-?*˜‡-ç˜ä†ì†E4¢^
-»Ö³ZNrHAύfQ2#£P/…"›ø#U‡ëkVàñ<G1¯;xk(É<DŸ¥(^·aøùù€á×ÖöÊ¿5
-ÞÐÝúõÇáðIWÆ NŠ¢·Îæi&ÈkRÔ´UÕ«÷)¹}û4mšš=š=Ù{²ªÖðkiÆ0oZœÏ§SêO°ZŠ	Ú¢.Ç;MÊ)n,§kÕ•,³©B«3rªqÙ錜 ò'îZ_—¸ƒ[µ=Þ0S;JŸ¿9­ÛZW‘[UÕ»ñÂÁ¶{ß$-.e™þ™›µê-nÚr:Ã-ŠéI<‡eò𖨽À®f{—»%\ŠoqÎvDüœÉ¸ÈBÉR¡—•’£AG*Î_Û[uÿ¨ßk×îµ+š²2•«¼Ñ8ÍM½ä³6,’µì¿L€Œv&o²¢D7¹·âØÜçh4}ÑZ?’H_è—|dƱŸž<Å_§ŸŽ½ù¼èosf¢u©?	%vC©Ö3§‹ôjçŽßðÆލ¶° £(c¾.++_ªïTGÕnC;Hÿæ¨_žyt¹Ú *ø²p£†]š:%cOÅjâ ’©Žíځ1òax²àò³ <—Ž¹2ýÅYb¥‚11ÑÕáný'ûÄTÇÕ­åjÓŽl¸µávNMþî¬}U«øtÀ”ˆaÃù€¦/[6mË×åðtŽ:g‹œJש·TbD°û)Æ%\N½éŽÏn¾iZ{,~—hLÖM¬-OÕ¦T¥VeÕòµôõæ34GÏ,1¢LSáVQ¦«æÞS’ž1ß÷¿k*Ɓ‚‰eFt
-d?²ª¼ýŠ‹Ä´]RX¥Ò…9ÉÁ*›Î¡x´âÏvzko-l»LiÑäzõ‡qVh̃LÒâ8‰HÌ$¶·1æ+³VœÞóžUþ0é	¢#f–Ná©$™ã3çÌLšê+œæàü«r:‡ßN8;ÿ‡–+ûÎ]h¯Sb•ð+ØÈÄ~ø–ý°Z2yRÁŸG…°¨¾†™ðÑäËk×áÄY¨Î
-PaxæhÔJn6…s³‚ÝIJ‘à.RÕ]6ÛIÁøFðÅÙtWPˆià;‰ÊÔçn©,ÃQÒ´‘”R›‡éóñoJëßÉÍ%dg$µëÕƒØÖ,V-.kwl«U`ÒNCœµÔB«5Qñó
-.8Õ]à£Fè3P_seLS'ŽB0š"O!™ÿ±ÚpµØPá“D“(–`‰ç*?I2¦‹zZ5É rÑaˆõ6gMÆyÖ¯-!óY³ '%”á;ý£“ ?-qMvŽYþB‘ŸM·`᎑,ô¤Œ݆,:E^TkHSêuž~ÿô‘YðÛY-æeàk+†ö|,:Ê«;•Më)ΐAèÎHÐÉ#ÉÑHwäßüÿä“£¼‰|†—È`Qžâ&3YZâñVFáRbžŽýeo2"ŸNí­	ƒFw {² ½‘˸f;¹2☞ÿèð¬¹PCÞþfزiÙʹlnA~>ŸK«ty†Í%EE%생û´GxúΙ•Ÿs“©ð­‰e‹°Úé>:܇cNû]ÿËíË{.6³Çí¦Î˜'iû èº¦k·¿þóØ©|Õ®S×ÒÚ bß‚H5Û³`€U~ãÞ¥CŒW™[C;ðáâу»»ÕHˆåÐÍ6+ý1'¥÷G/×îħ<|`e<Ç”¡ÖξJ€Ãäå…§g-]¹nA›vjÕÎ%|¿Z™EðR{Yrg ·VM0ÖR˜>x÷É䘌øéõ’iš|òJB«t}óºC·!osÀÜU“pô­â×ûãx÷ä9áÑÛ·ß?lÇØ¯æ‰ Û
-QàQ¶àܳ™Zô [“‡ü:ù­h”×XÛô±ŸÏÈÙ¦$ûÈCIdgê3GL‘?VR¬‘‚ÿ`G³­8ßCÅk4)“‘MêÂä=
-¸ìvÆ㾌§+ôzCɦͅ¥Üèžô–ÿ“ÿ³ö·[à´¹´h3_‚•º>—5ÛúÖ±­\U^îF¾°¸€»…ºï(éZ÷¤AÈé˾ßHçêóåZíÞ*ö6Ⱦ{þWþýªßƒÁníQ•^ÅKÇÔßiI”N´¦=š!dµEæ+Y‚&R½-LDÓ$ÕXY!©Fl%«j0s˱Ä$	ËÏ¢´(˜û­õµÍ½_Œ»7xð8¿‘acn-c™“âæ‡ôôdÂû÷O¾ÓwvÒ!Ö¶áù÷®Ì<-l¾¿Ø7-·šÏßåP½óâñµÙþSÃÆûNo¾Ûvíâ#βçJ|v›F8uÔV“¢H¹9“WóÓÓC“GùOˆòãÓye‰ªT]º±¨€§U˜á•G2¿¾~}÷‰³\ÛÕÃÏxèBä±à„ìMüßó²õlÃCÍ?¯H]œ«ÌÊ\µ<vÝ2žž2»åûg¯·ÝhZ<fW’Ço*[+¹/k»NAE\RrüòÚ¤¯¸ròè}G&î‹7ŸzÁèõ÷sTp?_½lYíjËóýõõ‰ûÍkÅuuUë6ó¥t¹J§ÊÓ|™Ï¢þ=c£fS¿ñ#nkÊKK+´–È°û%!%fÂo
-å²E¶~ˆ@£Øy7,¶¸ÑF²èÙk­úÆþ»êU7ò|rGBí"c0?Ia'-JKHXƒ³seMjÝêÊü5ÚÌ!28„•Ó]QT °ð̍^…£ÒëŠùz5ÊMˆëô?ŒVk]ÃMŒ„:á]£L4Ân++óÊ”œ)'X~v¶NmäÄp4@ѱÆü¦š,
-Ïo.b¨°ì\E1uñÔÕKϤ™%à]kö_éýbô£A¡s’£–±é©9I¼’ÎÓ«Ê
-eÚÊvë•kÇnðôÝïfE§'õæP.J•‡SL¸Ø÷i´ô7é,Sº‚² ¬Ap}…tssƒà¡¢¨¨¸¨ëû§WömºØûG¿ïÎ_™Ë®ÏÌVò*§–AW\¼EÏÖ֝6^àéû—£¦/IŽ‹QrëT™›>çéŒÜvUÁÜ|ý8d‚Ÿ_ˆ÷Ü95GršÒÅùRUªœ-Ùu\SÊ©œÓXøS¯ýzcaógÛY¼‡ Ϥj$öÄ•´'|¦@=†w!R]•Ê´’ûzœ¶VÙÏEv‰ÒM½ä)Ø%(P	qð‡|Ùοbí×!zďÿC`_4	²~%•oÜá(
-›*ùrþzUó¾c§ï>8qŸ7òÆB}® dS)O´zƒqŶ%Ó¦­Y4ŸóŸ±b4h>FN`ÿæÞS Þù=>9"Ö7–-‰Pì>f¨Þºíà‘†í¸zܾ2aôì©Á‘'§põ|QþNÚi}8º+™šòk{ÁákGGÁ±+AüívŒH
-endstream
-endobj
-2238 0 obj
-4355
-endobj
+/Differences [32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/minus/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]
+>> endobj
 2223 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [297.233 184.84 366.953 198.049]
+/Rect [297.233 167.72 366.953 180.929]
 /Subtype /Link
 /A << /S /GoTo /D (acctconf) >>
 >> endobj
-2224 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [316.117 162.54 361.573 175.442]
-/Subtype /Link
-/A << /S /GoTo /D (acctingnet) >>
->> endobj
 2228 0 obj <<
 /D [2226 0 R /XYZ 100.892 685.529 null]
 >> endobj
@@ -8004,119 +7862,135 @@
 /D [2226 0 R /XYZ 100.892 643.753 null]
 >> endobj
 1848 0 obj <<
-/D [2226 0 R /XYZ 100.892 429.136 null]
+/D [2226 0 R /XYZ 100.892 417.196 null]
 >> endobj
 2221 0 obj <<
-/D [2226 0 R /XYZ 100.892 412.266 null]
+/D [2226 0 R /XYZ 100.892 400.326 null]
 >> endobj
 2229 0 obj <<
-/D [2226 0 R /XYZ 100.892 209.651 null]
+/D [2226 0 R /XYZ 100.892 195.121 null]
 >> endobj
 2230 0 obj <<
-/D [2226 0 R /XYZ 100.892 185.836 null]
+/D [2226 0 R /XYZ 100.892 168.716 null]
 >> endobj
 2225 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F30 1928 0 R /F31 1929 0 R /F61 1976 0 R /F60 1917 0 R /F72 1931 0 R >>
 /XObject << /Im2 2210 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2242 0 obj <<
-/Length 927       
+2239 0 obj <<
+/Length 1029      
 /Filter /FlateDecode
 >>
 stream
-xÚ½VQ›8~ϯ°öú@ÔlÀV§J×í¶jÕVÛ&•*íõÁ^Â0µM²Û__ƒ
-‚,ÝäîáòâÁžÏ|óÍÄd ‚7‹—›…ûÚ‹ ‚Nc6· a䄁U;8À&×–ç-¿mÞ)UDN¼Z­¦‡xH9êt>2ûõÒ‡_ÚÈÊ—È*
-±´}Œ­5)oH+Öšòåj(´.¶¤–”ë#Ô^±¸Ü,~,ZŸ Q,Øñ}”‹ëo¤ê쀎G`ßi–ÀÇ‘³ÂXÉX/>-à8A„'	†*…0 « vºLÚàó*;×)âx¬íÎÊ[i5ΘüC1´A9IÓ¥=lÙ¥Yßè•$‰f+ÑëÙGRR-²[½~Q.ÎÌé{–åÕÛWgmíµÈwp?¾¶&BìÓŒ¸•:Í´jgƸ1¼e\mOø¦´t¯•®Œ—sýùµÿéÏ¿l[rKgoå¬<Pä¦ sѦò¡6JU}ý»ë`&Ê›1l69¾!çõ‡—Gnÿ’?ÇŒ§¿Ó”¦O–zh•Ã>iý¨þŸð?t&&àÚÆZœ©Âõý@'×
-iÎi"ПBò&‘
-7§'úÿ@F[©ÐòÍÒ‹,ã„ÞÓ¤‘§'¶·¬°»ìMÈc
-Ö:Øÿ‡/¿«cj½º)‘äÛ’-ÛWf¤ú–C[æf1Æwjr˜i"šŸ¦žwÔ×Tö¥MIaxCynÏ%U•›mÞ1Óá/Œ9›ñÅ@ÜgùSf#<žå'™éP*z錛@ìϏï#Èñœ‡’¥SMöœïïÅŸÌæÏï<öHÏãy£	é[¾á=ã$3Û“&ð­ÜP¼ÒÕ›5§µbª¿†>QÝ{Ð{}zȁa¨ˆæû“UmweÃÅCã\|¹Zë­+®È¦¢úóSC*f;ff,Œ-j’–=q{šlëâÎììú!ÆIQÐâÜMéÎ-jhŽ/O‚Y#ç[I7yÄdøjd&Tҏžš·¯•]Øg÷£ËNËû\n‡2t;j¼æYÕW cÆ”j·ŠÏã2ÍåA:Ÿ*D:w¨WóÈr©Lܤ©…[æ%uVíÄbE¬¤É¬©V–tÅ Z‘Wt¶Þv÷`ò£iÉI]yBdÎ*—%’J[‘›õç­Ú6ïªÔiC¶9i9ŽI Q³'õ«zþ2A¼Å
+xÚ½V[oÛ6~÷¯ Ò>Ph)“ºY
+†k–+¶ m\`@ÚFble’¨’”ì×—)Cv”8{™_xÄs¿|ÇÄ`0ø8û°œÍ/‚ìg8#`yHLü& I3?Î"°,À
+ïûò“
+@êgIÉ€?
+ˆ6ÔË\rtá…
+XzV•ôPÇðšÖ·Ô¼fbľ'YÀ³5m–EŒ‹Ùùröcflb at F±Ä~‚¼žÝ|ǠмO ûa–‚m/Yƒ0Ný$Ž5]ëÙçv	âq¢$ÞK4‰}F ‰2¿ÏÈ$‘ø}ƒ¸A1ÆðÂKCÈuœAšAFs/XÀµý꤉?È0Ü®¹%ô•´Lµ.¥½“R±ÚÒßpŒ%c‡Žk饤·³’Ä'RF™¼7Ü2Sè]èžÈ;ůNýŽW÷‚n‘1Hèë†"}ÄQfó-›Õ©mmœ‹ƒ
+#?	+&8Wo´yŸ1-
+ÅAQíΏö¤y®¤»ÊíyrIkfI~gϯÚĉãþÉWeóÇï'}„x?º±Û–J¹-^PŠ­Žž©F3WV²×âÂéÝ™Âví¨ÿK¶µRWÎÌ©ýü{øÙÏ_²D_ù	·‚תoò„Ë/L=¶N¨ܷϹ?R3YߎˆèÉùú¯G¼ÿ?ɏãéüV¬x±Õ;L®äPҏ¿3·˜Ü
+g‚Qƒ¹0Œln†(JÁrÅÅ£ý”Jt¹ê„ãö¸'ÿ
+“¨r´\SaV‡¡o
+nöÀ4ºû™ÞÓÕø~l±Ãý1xÇOg¦þG§à極缠ŠNTy¬–¯ù¶q; ¢Í3ŠSCºeé§|¯×†[%²û÷Ñuóž9vËÔÐØ‚Vnh˜(ÝÖ¹g´iJw-:)§ÂøÕéóg˜/dþ¶|ImT·å«Ôl(
+;Zé•pq /O¶î«Jž¯k^ì›èVïÄöA¾çH¼{80u‘ƒ?‡¥Çöònì¹ +w½‡–nÂ;¢ö²¬ÕÃ_دL4x 7À3 >^¸ ÒixòÆ€kµs¼ÃÍÙ׫k{u%ô´é(”ýüܱŽÉIÄŒ·ÂÄŸbÕÒ¢&w“u[Ý»›Í°Â­*VÎ¶™W-vìóW•ÙV.„y¿xäÞ6õÂÌ™”tØ<­0o°Æ<U\v?úì,½-Õz׆þF/×rÕhÇ…q[JãíÍÈ&›q^”ê ½Íþõ2Qî…N\?ïÜÓrÎT>Ï»VÎë²f~ˍœª!©OvZÊeÖ59¯k6.Å®hUÙ°É~#²Ð/Ý0Ýïm۪̩*y3ç¹b
+éáfÔ<ìƒÃ{Ó¾		jfœè!ÁNíUh8õË÷'Sµøe
 endstream
 endobj
-2241 0 obj <<
+2238 0 obj <<
 /Type /Page
-/Contents 2242 0 R
-/Resources 2240 0 R
+/Contents 2239 0 R
+/Resources 2237 0 R
 /MediaBox [0 0 612 792]
-/Parent 2247 0 R
+/Parent 2244 0 R
+/Annots [ 2224 0 R ]
 >> endobj
-2243 0 obj <<
-/D [2241 0 R /XYZ 151.701 685.529 null]
+2224 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [366.927 645.94 412.382 658.842]
+/Subtype /Link
+/A << /S /GoTo /D (acctingnet) >>
 >> endobj
-2244 0 obj <<
-/D [2241 0 R /XYZ 151.701 493.095 null]
+2240 0 obj <<
+/D [2238 0 R /XYZ 151.701 685.529 null]
 >> endobj
-2245 0 obj <<
-/D [2241 0 R /XYZ 151.701 278.703 null]
+2241 0 obj <<
+/D [2238 0 R /XYZ 151.701 479.546 null]
 >> endobj
-2246 0 obj <<
-/D [2241 0 R /XYZ 151.701 188.375 null]
+2242 0 obj <<
+/D [2238 0 R /XYZ 151.701 265.154 null]
 >> endobj
-2240 0 obj <<
+2243 0 obj <<
+/D [2238 0 R /XYZ 151.701 174.826 null]
+>> endobj
+2237 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2250 0 obj <<
-/Length 1679      
+2247 0 obj <<
+/Length 1667      
 /Filter /FlateDecode
 >>
 stream
-xÚ•WKsÛ6¾ëWp¦‡R3 	ææxœ¶™4Ik%=$9Ð$,q̇
-Rqüﻋ%‘¦œôBâ± öñ}‹÷6÷~[¼Z/.^—°4áÂ[ßy‚s¦ÒÀ‹UÊ¢TzëÂûìßè¼/ÛfùuýÆŠ+–ƱDñ e¤9É	°åJð8ô/»®Ü4õRøFü¦_®ÂHúë¥Jý¬»ïÜ^
-d)OíÙ¡HÉ°[¢Ðâz½øw!`{âD½ˆ…¡—׋Ï_¹WÀ܏³0UÞƒ•¬½0R,Ž"hWÞÍâ¯w&óSÓEtz¾àŠ%‰Ë”Yó¬IœY-†eÞçUĹ]”hQúýVcCú_¸•µ×š¥§[+ÎDtðÓ…îó‹|¿ë.ê²Ö¬Üi琉BB1¡Ä°¬oéÈ}“·u­›eøc-B¿*ýrNƒ•H laêAXÚ2Ûíª2Ï0ºmÞë~ÕõFgõÈæ©Z+‘‚«¥ÛÉùIÌúéc‡zE$(`»ë³¦ÈL=îw]¯k'Êo+š²£HŸ™ž$n at 7¸Íh6¢ñ«nÆ‹ò¶ÁlöÆFÄ”!XC·ö`ôŸs­±h΃lß·5ø'ϪêÑ
-¹)ý
-5Ñæ‘â°ÃnsK†À7ñÛX!eä¿^*é·†äõ÷¬ÞUúÅ\°øÈ·¦mû_WhÕö»+7ËUD~WßRƒØ‰Ñ>™þp%Âoniôt¥…«ÉYqQ6e¿Ã©F“«~pô“
-Ž‡ŸìðÿðÌâí}Sÿ™˜5¿vÔ}ÀHµæÎB¨¿€ÑHù{g*ÿŸ²)Zypò×ßwUk´¡i‹J­ËÉz·Æ2G-ïµ[xgÚú´AäEð.¨Ñió
-IŒaߢP„GÉF?’ˆKF¹ˆ¨0ñ×$)O%Ã¥ëoÛýp°ÝÂRgn²lŽRþI&0<
-é;Ý/CÎ >æ–Ç	L”›í-nåÆ·­ë¬@¾˜Omp¿ðCj{(!AŒói“Õ.§µw“)r`81ú_ ms|‘Nºº¼ùýÃû÷oç”’Sâ 	›M“W„½U0‘ˆƒ ÏPz‘oۍ³¢!å‡TsY>±ý€Am1¼DI6ë&é kæàêL‚ƒêì=g h
-ÍAjj\ á—ƒqÁѸ۳Æepa 0xpëgôë4dš‚Úeƒé>×Ô³¡Œƒ1ãpâÈ8»Ï°ºÉPè[¹±¼Ãpò+˜`óà¡n›ÌÙº˜6\…AM>ã0 ±¤°œ qŠ¿ó'¦1“*6ºY/ÓÀ¿|õöz†áÙEÀù}ù¹ ]ÁíŽ
-"QSE|Og  .Î÷4¾Ë]Av”Q(89º›³I¤œIq¨j®zS­.ç‚¼Ä£*Žîte%n£ÁC2µ£u%˜Ëc¦”G¼(
-¬oM©;H†q üçUŠI©Fz^Íê)™ŠÓ±¢E°Ù“ªS䦆ÌM=Ú[fO‡²ÛRË!v%‚A‰;ºòv‡‹\	An°y
-}£]–+¡®èž@?…AñS< C=>¶&:òðvÕP_É)#wYÁLYkØn _ô¦Ô}Ž~!“Q2¢_;í¡1¢ôŸ¡Ÿ‚çBò3w@€¤<Ðn|J#èZ%ÑQ‘SA×ш¢®$™G&“[)“¸T¿3Ã[iÃIxš@,†?Áp?y2Ѓ!wië,ø•ÍfЂJÖ™ºLQ'àJ”r|C€as˜û´TP#›òîkŽÔñ$H¹+Ôié£98J¥³¶:á(Y"p.o
-²Kqœ²å–Û]Óи–ƒ™wkù¤"âPgÄ
-x4AÒSt9ÛÿÖDÇ÷Æ*¤™#æ *Ŭìhjø;ºžºE;ìŽ >Ù]žì>WBã‰Q2[û) ÜêîIŒ6…ܽöeˆD€dG£xóÊHņüùè–­IbßgŠC}p|ÅYŸÍB0dqp€ê-%8K†‚ âdl¦þ®ó}ï xr¹ÞµUE‘<Ì!Œ;/Ÿ{3‰§ïÊ=6VÙßÔ8«úd“?³{k¬cáɤMŸYîsWÆ᠐>¤>¤hö6ݶÜÑ2b>Ìí,Ï´©KK´k>ø¹…
-ýéBàr`Š­ú#ÿ;š.aÅ컯h÷·ý÷Lµî2äÜ—#þÿëõâ?p”h
+xÚ•WQ“›6~÷¯`¦Å31'!"o—›KÛLš¤='}HòÀÎf΀+p.÷ﻫ6pøš¼€¤]I»«ï[­˜·ñ˜÷ÛâÕzqñ:½$HƽõÇTz±J™FÞºð>û7:ïʦ^~]¿±ê*Hã8Bõ0
+h3ÒãA,WœÅ¿lÛrSWKîkñën¹2ò×K•úY{ߺµl¤,µ{žŒ'ýj¡@¥Åõzñï‚à óøÀ<áåÕâóWæ {ã±@¤Ê{°š•'¤
+b)¡½ón-˜s™
+]çr¸?g*H/§„ó¤Öˆ~–÷y%ó¯‹Â﶑ÿ…ñhgݵžÉt¸²b—Ç0]è.¿Èûö¢*+t{íâ1±‡«€+ÞOëÚòPçMUéz&þØ
+áïÊZ¿œ³`Å85‘z ¨DÐ’Ù~¿+ó÷¢É;Ý­ÚÎè¬ù<5kÅ!> ÑJœÏêc‹†I°ÝvY]d¦ÀóÛǶӕÓCå7;YQ¥ËLG7`hÜf$…hüê㇛ñ¤¼©ñL6cÄë­æ"QêBºµ;c]p…k¿!d‡®© By¶Û=º!'ÒßÐm	GGì2·ä	|¿é€Q$ý×Kù!}ý=«ö;ýbî¸Ø8º¦iº_Yè×ö\»+7Ë•¥ßV·Ô ~âÌ¡‡ÏÌDÎM•OgZÄš<(.ʺìàwÜÕhŠÕÿlýdÓæƒ~rá,äÞ×s‘ú—ÈƬþµ¥îžUcîa3„û•Ê? >C¡üʺhPåÁé_ßï£
+‰-0a´*7&ëÜË:µÜ×nâiªç ‡Ï@¼ F«Í7d2î„}D.Nšµ~è5š¼rT"ñפ
+5ƒ¦ëo›C¿PÞ"SgNXÖ§
+)	%$x§»¥`MÁÜð1÷0=N at Pn¶·¸”ß6®³ýb>¿ÁÃŽùí¡„$1NªuV¹ÄÖÜMD@1qú_ os”âRõ;]]Þüþáýû·sFE2Pü¨	‹M8×Þ*„'ŒŽŠ,Cí9H¾m6΋šŒï³ÍåŽ Ší<ԏ·Ç(éfí$ÇfÍœƒ!\ŸIx4=ƒµçClöZSçÂ.ñhƹ۳Îep!áàáÁ͟ѯՐk
+j—5¦ü\SÏeŽ)‡‚åì:ýì:C¥oåÆG |H°Í‘!±ÍŒƒ	¦m]ÌîÃRÉñ ‰Âg<vŠt, Nñw~Ç4"%û…nÖË4ô/_½½ž…¡8{BX== üÜ]Á"QSE|Oç  .Ê;ßgµÞAzŒ £Ðà dévÎ'ž² âÇÒæª3»ÕåœCBa<*e`ëVï ´¤- l4x̦v´¶¡Dwã@©I:-JóSê’arÿÃ9C•
+¢Hì¼šµ3
+TœŽ
+
+-‚́L"7E0dNôh¯™uÊvK-‡ØE eîØ‹¼Ùã,WFPlbÃàh—æJ¨-Ú'X`OqPüQe`(ÊÇîÈ_`WõEV4e¢t·H:H[ýr=ûäs\˜r÷9þ‰ ’ɈI쬇ƈІ
+Þɏ\qšÑ‰vá! ky”È“!CA×ñˆŽ]E‡Ô<r™ÂJ©Äåú½éLó NÄ0ƒX:b?y8г!wyë˜-{ø•õ¦·‚ÊÖ©¶LQÇáNŒ&›Ãܧ¥‚:Ù”wXt¤Ž(aÊ\ñ¤†ÅŒZäà(•ÏÚÚ„0²D* ,oÒËqÙ‚Ë­®ih\́äÝ::[“U±žNõÝÎö¿µòôèX	’œ0ØP)Ö`eK¢þïh;êM¿:x°z4X}®ŠÆe2[ü) ÜêîI…\¾ö}ˆÏD€dK£xõFRÔúú覭IãPgªCpzËY—ÍBPqx„ê-%8K‡ âdôØÐßu~è—ë]³ÛÑAeˆb ÎËŸ|6íÜsc•ýM³–Où3»·Gu,<š´é2K}æÊ8´øÑÇìÀú¬ 
+²¾Ö¦Ý–{šFÄÙÞÒL›ª´<k±æƒŸ›XÓŸîõD±U¿ôÿ¸#q	3f_~Es¸í^¸—ª
+ï”ø£à¾Ñ·ÿ_¯ÿmÊ•H
 endstream
 endobj
-2249 0 obj <<
+2246 0 obj <<
 /Type /Page
-/Contents 2250 0 R
-/Resources 2248 0 R
+/Contents 2247 0 R
+/Resources 2245 0 R
 /MediaBox [0 0 612 792]
-/Parent 2247 0 R
+/Parent 2244 0 R
 >> endobj
+2248 0 obj <<
+/D [2246 0 R /XYZ 100.892 685.529 null]
+>> endobj
+2249 0 obj <<
+/D [2246 0 R /XYZ 100.892 649.664 null]
+>> endobj
+2250 0 obj <<
+/D [2246 0 R /XYZ 100.892 581.918 null]
+>> endobj
 2251 0 obj <<
-/D [2249 0 R /XYZ 100.892 685.529 null]
+/D [2246 0 R /XYZ 100.892 459.975 null]
 >> endobj
 2252 0 obj <<
-/D [2249 0 R /XYZ 100.892 660.623 null]
+/D [2246 0 R /XYZ 100.892 409.826 null]
 >> endobj
 2253 0 obj <<
-/D [2249 0 R /XYZ 100.892 600.394 null]
+/D [2246 0 R /XYZ 100.892 389.502 null]
 >> endobj
 2254 0 obj <<
-/D [2249 0 R /XYZ 100.892 474.756 null]
+/D [2246 0 R /XYZ 100.892 358.356 null]
 >> endobj
 2255 0 obj <<
-/D [2249 0 R /XYZ 100.892 422.759 null]
+/D [2246 0 R /XYZ 100.892 308.813 null]
 >> endobj
 2256 0 obj <<
-/D [2249 0 R /XYZ 100.892 400.587 null]
+/D [2246 0 R /XYZ 100.892 261.39 null]
 >> endobj
-2257 0 obj <<
-/D [2249 0 R /XYZ 100.892 367.594 null]
->> endobj
-2258 0 obj <<
-/D [2249 0 R /XYZ 100.892 316.203 null]
->> endobj
-2259 0 obj <<
-/D [2249 0 R /XYZ 100.892 266.933 null]
->> endobj
-2248 0 obj <<
+2245 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2262 0 obj <<
+2259 0 obj <<
 /Length 2799      
 /Filter /FlateDecode
 >>
@@ -8148,102 +8022,102 @@
 jù?6·l
 endstream
 endobj
-2261 0 obj <<
+2258 0 obj <<
 /Type /Page
-/Contents 2262 0 R
-/Resources 2260 0 R
+/Contents 2259 0 R
+/Resources 2257 0 R
 /MediaBox [0 0 612 792]
-/Parent 2247 0 R
+/Parent 2244 0 R
 >> endobj
-2263 0 obj <<
-/D [2261 0 R /XYZ 151.701 685.529 null]
+2260 0 obj <<
+/D [2258 0 R /XYZ 151.701 685.529 null]
 >> endobj
-2264 0 obj <<
-/D [2261 0 R /XYZ 151.701 541.27 null]
+2261 0 obj <<
+/D [2258 0 R /XYZ 151.701 541.27 null]
 >> endobj
 1491 0 obj <<
-/D [2261 0 R /XYZ 151.701 445.583 null]
+/D [2258 0 R /XYZ 151.701 445.583 null]
 >> endobj
-2239 0 obj <<
-/D [2261 0 R /XYZ 151.701 417.285 null]
+2236 0 obj <<
+/D [2258 0 R /XYZ 151.701 417.285 null]
 >> endobj
+2262 0 obj <<
+/D [2258 0 R /XYZ 151.701 411.307 null]
+>> endobj
+2263 0 obj <<
+/D [2258 0 R /XYZ 151.701 417.584 null]
+>> endobj
+2264 0 obj <<
+/D [2258 0 R /XYZ 151.701 405.629 null]
+>> endobj
 2265 0 obj <<
-/D [2261 0 R /XYZ 151.701 411.307 null]
+/D [2258 0 R /XYZ 151.701 393.673 null]
 >> endobj
 2266 0 obj <<
-/D [2261 0 R /XYZ 151.701 417.584 null]
+/D [2258 0 R /XYZ 151.701 381.718 null]
 >> endobj
 2267 0 obj <<
-/D [2261 0 R /XYZ 151.701 405.629 null]
+/D [2258 0 R /XYZ 151.701 369.763 null]
 >> endobj
 2268 0 obj <<
-/D [2261 0 R /XYZ 151.701 393.673 null]
+/D [2258 0 R /XYZ 151.701 357.808 null]
 >> endobj
 2269 0 obj <<
-/D [2261 0 R /XYZ 151.701 381.718 null]
+/D [2258 0 R /XYZ 151.701 345.853 null]
 >> endobj
 2270 0 obj <<
-/D [2261 0 R /XYZ 151.701 369.763 null]
+/D [2258 0 R /XYZ 151.701 333.898 null]
 >> endobj
 2271 0 obj <<
-/D [2261 0 R /XYZ 151.701 357.808 null]
+/D [2258 0 R /XYZ 151.701 321.942 null]
 >> endobj
 2272 0 obj <<
-/D [2261 0 R /XYZ 151.701 345.853 null]
+/D [2258 0 R /XYZ 151.701 309.987 null]
 >> endobj
 2273 0 obj <<
-/D [2261 0 R /XYZ 151.701 333.898 null]
+/D [2258 0 R /XYZ 151.701 298.032 null]
 >> endobj
 2274 0 obj <<
-/D [2261 0 R /XYZ 151.701 321.942 null]
+/D [2258 0 R /XYZ 151.701 286.077 null]
 >> endobj
 2275 0 obj <<
-/D [2261 0 R /XYZ 151.701 309.987 null]
+/D [2258 0 R /XYZ 151.701 274.122 null]
 >> endobj
 2276 0 obj <<
-/D [2261 0 R /XYZ 151.701 298.032 null]
+/D [2258 0 R /XYZ 151.701 262.167 null]
 >> endobj
 2277 0 obj <<
-/D [2261 0 R /XYZ 151.701 286.077 null]
+/D [2258 0 R /XYZ 151.701 250.211 null]
 >> endobj
 2278 0 obj <<
-/D [2261 0 R /XYZ 151.701 274.122 null]
+/D [2258 0 R /XYZ 151.701 238.256 null]
 >> endobj
 2279 0 obj <<
-/D [2261 0 R /XYZ 151.701 262.167 null]
+/D [2258 0 R /XYZ 151.701 226.301 null]
 >> endobj
 2280 0 obj <<
-/D [2261 0 R /XYZ 151.701 250.211 null]
+/D [2258 0 R /XYZ 151.701 214.346 null]
 >> endobj
 2281 0 obj <<
-/D [2261 0 R /XYZ 151.701 238.256 null]
+/D [2258 0 R /XYZ 151.701 202.391 null]
 >> endobj
 2282 0 obj <<
-/D [2261 0 R /XYZ 151.701 226.301 null]
+/D [2258 0 R /XYZ 151.701 190.436 null]
 >> endobj
 2283 0 obj <<
-/D [2261 0 R /XYZ 151.701 214.346 null]
+/D [2258 0 R /XYZ 151.701 178.48 null]
 >> endobj
 2284 0 obj <<
-/D [2261 0 R /XYZ 151.701 202.391 null]
+/D [2258 0 R /XYZ 151.701 166.525 null]
 >> endobj
 2285 0 obj <<
-/D [2261 0 R /XYZ 151.701 190.436 null]
+/D [2258 0 R /XYZ 151.701 154.57 null]
 >> endobj
-2286 0 obj <<
-/D [2261 0 R /XYZ 151.701 178.48 null]
->> endobj
-2287 0 obj <<
-/D [2261 0 R /XYZ 151.701 166.525 null]
->> endobj
-2288 0 obj <<
-/D [2261 0 R /XYZ 151.701 154.57 null]
->> endobj
-2260 0 obj <<
+2257 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2291 0 obj <<
+2288 0 obj <<
 /Length 1812      
 /Filter /FlateDecode
 >>
@@ -8265,30 +8139,30 @@
 àåîµDÁÇsbòÿ·ƒ”éò ͲOïü~¿›î¶VQÅ—eC¾´l¨ëeãµeâÕo].¥òö-t°†fFùÁŽØÃÚÜîÌ€?áځ逛ÇÄ_Sð€Öyã×ys»Î¿Kz?.5ë%QñŠÆj^ç OI•,-Àú\Æ÷@|²Ð‡C ‡nÓÌ@_³ê4¢Ë¸òdu5¿ý}¦(°;qºðœZëšüí€ÿ{¸LKêxôߣð?ˆ°7‡ÿ@Ѓ¡k¿»k§ïi5ú„«¹**Åå_Eá÷»ÇÍ2µý¡
 endstream
 endobj
-2290 0 obj <<
+2287 0 obj <<
 /Type /Page
-/Contents 2291 0 R
-/Resources 2289 0 R
+/Contents 2288 0 R
+/Resources 2286 0 R
 /MediaBox [0 0 612 792]
-/Parent 2247 0 R
+/Parent 2244 0 R
 >> endobj
-2292 0 obj <<
-/D [2290 0 R /XYZ 100.892 685.529 null]
+2289 0 obj <<
+/D [2287 0 R /XYZ 100.892 685.529 null]
 >> endobj
 102 0 obj <<
-/D [2290 0 R /XYZ 100.892 660.623 null]
+/D [2287 0 R /XYZ 100.892 660.623 null]
 >> endobj
-2293 0 obj <<
-/D [2290 0 R /XYZ 100.892 639.842 null]
+2290 0 obj <<
+/D [2287 0 R /XYZ 100.892 639.842 null]
 >> endobj
-2294 0 obj <<
-/D [2290 0 R /XYZ 100.892 544.305 null]
+2291 0 obj <<
+/D [2287 0 R /XYZ 100.892 544.305 null]
 >> endobj
-2289 0 obj <<
+2286 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R /F51 1134 0 R /F59 1905 0 R /F60 1917 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2297 0 obj <<
+2294 0 obj <<
 /Length 2272      
 /Filter /FlateDecode
 >>
@@ -8318,21 +8192,21 @@
 M«øUåÁ?µÇ£Çï—÷WÿøÔ+±
 endstream
 endobj
-2296 0 obj <<
+2293 0 obj <<
 /Type /Page
-/Contents 2297 0 R
-/Resources 2295 0 R
+/Contents 2294 0 R
+/Resources 2292 0 R
 /MediaBox [0 0 612 792]
-/Parent 2247 0 R
+/Parent 2244 0 R
 >> endobj
-2298 0 obj <<
-/D [2296 0 R /XYZ 151.701 685.529 null]
->> endobj
 2295 0 obj <<
+/D [2293 0 R /XYZ 151.701 685.529 null]
+>> endobj
+2292 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2301 0 obj <<
+2298 0 obj <<
 /Length 2425      
 /Filter /FlateDecode
 >>
@@ -8362,21 +8236,21 @@
 w­ŒVõ?ãsÀ~r”äðË°ü7ì%Á&Ê=³hsæ3s< ¸øQy·ô•ï’ƒ NeB\ÔݤÚã.Sÿmï,QÒ¿Çã³/uFXÇÁèë1^­Ýi¡"mžÐj.¹Ÿ\âtzçÇî›ßn·ÔB—Ä¿üþûj{ñ?5Ù“l
 endstream
 endobj
-2300 0 obj <<
+2297 0 obj <<
 /Type /Page
-/Contents 2301 0 R
-/Resources 2299 0 R
+/Contents 2298 0 R
+/Resources 2296 0 R
 /MediaBox [0 0 612 792]
-/Parent 2247 0 R
+/Parent 2244 0 R
 >> endobj
-2302 0 obj <<
-/D [2300 0 R /XYZ 100.892 685.529 null]
->> endobj
 2299 0 obj <<
+/D [2297 0 R /XYZ 100.892 685.529 null]
+>> endobj
+2296 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F51 1134 0 R /F60 1917 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2305 0 obj <<
+2302 0 obj <<
 /Length 1313      
 /Filter /FlateDecode
 >>
@@ -8392,21 +8266,21 @@
 o™Ü2â Å¸ìÈ'llKEL6ã!ÚL5Îv‰Ð+kñ¥agÕRkÐq~Z4ñ¶åiŒ§¥´ pc9ã<Ûgχi’$¼úËÙPSA÷E"¨g@’‡`·Š$Ñ·Ì}|äŠ *;Í°ÞóãÑqa”g*Ðäîÿnø0rã¼Y Ãkt92õ¨‘Ë ö-QóÏ™£—‰7¿2Vº{òÜ‘ðvÚuÒéý…Iè1Í%óEU‚ctA ²b€¤¼Öák¹kÍ0—IL+´ÞHó,|©ó‹>P³Ñ·¿ C¥dLVéó1‰G4lሠÅ룐°Å‘2¬¿€F/:““ëGJ¡ðá‹óWg>#o·ŽùNþ¤Ýnfb: (5ÒŽ[¶ÔHÈàÌ—©s‚¥ÞÀ}AÖ|Ž9J™ÀN‰yCO‚Êå=ÿáqþ/¼r.a
 endstream
 endobj
-2304 0 obj <<
+2301 0 obj <<
 /Type /Page
-/Contents 2305 0 R
-/Resources 2303 0 R
+/Contents 2302 0 R
+/Resources 2300 0 R
 /MediaBox [0 0 612 792]
-/Parent 2307 0 R
+/Parent 2304 0 R
 >> endobj
-2306 0 obj <<
-/D [2304 0 R /XYZ 151.701 685.529 null]
->> endobj
 2303 0 obj <<
+/D [2301 0 R /XYZ 151.701 685.529 null]
+>> endobj
+2300 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2311 0 obj <<
+2308 0 obj <<
 /Length 1808      
 /Filter /FlateDecode
 >>
@@ -8428,35 +8302,35 @@
 `a?/-»Z¶ö2{?·Xn?'ó©†óÁNøX]T#c˾hÌDIK%mqRŽÇdÜQ·׋Î(t:&’œ)Hž–|‹ûÔé¿P9fÿDqê~á@˜xP×X±°8¹s½¾ø"‚žB
 endstream
 endobj
-2310 0 obj <<
+2307 0 obj <<
 /Type /Page
-/Contents 2311 0 R
-/Resources 2309 0 R
+/Contents 2308 0 R
+/Resources 2306 0 R
 /MediaBox [0 0 612 792]
-/Parent 2307 0 R
-/Annots [ 2308 0 R ]
+/Parent 2304 0 R
+/Annots [ 2305 0 R ]
 >> endobj
-2308 0 obj <<
+2305 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 447.517 285.392 459.207]
 /Subtype /Link
 /A << /S /GoTo /D (simple) >>
 >> endobj
-2312 0 obj <<
-/D [2310 0 R /XYZ 100.892 685.529 null]
+2309 0 obj <<
+/D [2307 0 R /XYZ 100.892 685.529 null]
 >> endobj
 106 0 obj <<
-/D [2310 0 R /XYZ 100.892 660.623 null]
+/D [2307 0 R /XYZ 100.892 660.623 null]
 >> endobj
-2313 0 obj <<
-/D [2310 0 R /XYZ 100.892 473.063 null]
+2310 0 obj <<
+/D [2307 0 R /XYZ 100.892 473.063 null]
 >> endobj
-2309 0 obj <<
+2306 0 obj <<
 /Font << /F77 1973 0 R /F17 1131 0 R /F15 1133 0 R /F28 1124 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2316 0 obj <<
+2313 0 obj <<
 /Length 2241      
 /Filter /FlateDecode
 >>
@@ -8478,33 +8352,33 @@
 âߺ‹(<9ÿ’k	P"nFk:åãNHõ¯Ñå_¨¿}yø2@¿æ
 endstream
 endobj
-2315 0 obj <<
+2312 0 obj <<
 /Type /Page
-/Contents 2316 0 R
-/Resources 2314 0 R
+/Contents 2313 0 R
+/Resources 2311 0 R
 /MediaBox [0 0 612 792]
-/Parent 2307 0 R
+/Parent 2304 0 R
 >> endobj
-2317 0 obj <<
-/D [2315 0 R /XYZ 151.701 685.529 null]
+2314 0 obj <<
+/D [2312 0 R /XYZ 151.701 685.529 null]
 >> endobj
 110 0 obj <<
-/D [2315 0 R /XYZ 151.701 520.345 null]
+/D [2312 0 R /XYZ 151.701 520.345 null]
 >> endobj
-2318 0 obj <<
-/D [2315 0 R /XYZ 151.701 492.684 null]
+2315 0 obj <<
+/D [2312 0 R /XYZ 151.701 492.684 null]
 >> endobj
 114 0 obj <<
-/D [2315 0 R /XYZ 151.701 326.355 null]
+/D [2312 0 R /XYZ 151.701 326.355 null]
 >> endobj
-2319 0 obj <<
-/D [2315 0 R /XYZ 151.701 297.067 null]
+2316 0 obj <<
+/D [2312 0 R /XYZ 151.701 297.067 null]
 >> endobj
-2314 0 obj <<
+2311 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2324 0 obj <<
+2321 0 obj <<
 /Length 1851      
 /Filter /FlateDecode
 >>
@@ -8528,41 +8402,41 @@
  ï5ÿmÜüñ?L=o?¬°Ë–K~ì˜F„ɝ/ðaÑD¸á—Q³bç >_X®·s­Üù?)R¿—"ˆGH7ÔÕçü…i–…sÎëë÷ïo>~ºœs£Hƒ":Rt	¿Ç‚ µŽÀnTºÉéL ;Tn칞œr.ñS阑ø"‚äQvî¯ÕûËËõ՜؉°=÷(öi®»ÿåzñÊo®°
 endstream
 endobj
-2323 0 obj <<
+2320 0 obj <<
 /Type /Page
-/Contents 2324 0 R
-/Resources 2322 0 R
+/Contents 2321 0 R
+/Resources 2319 0 R
 /MediaBox [0 0 612 792]
-/Parent 2307 0 R
-/Annots [ 2320 0 R ]
+/Parent 2304 0 R
+/Annots [ 2317 0 R ]
 >> endobj
-2320 0 obj <<
+2317 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [229.38 240.786 291.979 253.687]
 /Subtype /Link
 /A << /S /GoTo /D (AccountingOffice) >>
 >> endobj
-2325 0 obj <<
-/D [2323 0 R /XYZ 100.892 685.529 null]
+2322 0 obj <<
+/D [2320 0 R /XYZ 100.892 685.529 null]
 >> endobj
 118 0 obj <<
-/D [2323 0 R /XYZ 100.892 436.058 null]
+/D [2320 0 R /XYZ 100.892 436.058 null]
 >> endobj
-2326 0 obj <<
-/D [2323 0 R /XYZ 100.892 407.137 null]
+2323 0 obj <<
+/D [2320 0 R /XYZ 100.892 407.137 null]
 >> endobj
 122 0 obj <<
-/D [2323 0 R /XYZ 100.892 223.527 null]
+/D [2320 0 R /XYZ 100.892 223.527 null]
 >> endobj
-2327 0 obj <<
-/D [2323 0 R /XYZ 100.892 198.03 null]
+2324 0 obj <<
+/D [2320 0 R /XYZ 100.892 198.03 null]
 >> endobj
-2322 0 obj <<
+2319 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R /F54 1912 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2331 0 obj <<
+2328 0 obj <<
 /Length 2074      
 /Filter /FlateDecode
 >>
@@ -8585,52 +8459,51 @@
 v^W­k‘…TÙŽ­Æ7âÄþ†5Áîê‘ÿÂâþTd”
 endstream
 endobj
-2330 0 obj <<
+2327 0 obj <<
 /Type /Page
-/Contents 2331 0 R
-/Resources 2329 0 R
+/Contents 2328 0 R
+/Resources 2326 0 R
 /MediaBox [0 0 612 792]
-/Parent 2307 0 R
-/Annots [ 2321 0 R ]
+/Parent 2304 0 R
+/Annots [ 2318 0 R ]
 >> endobj
-2328 0 obj <<
+2325 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./xslt/figures/note.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 2335 0 R
+/PTEX.InfoDict 2332 0 R
 /BBox [0 0 28 28]
 /Resources <<
 /ProcSet [ /PDF /ImageC ]
 /ExtGState <<
-/R7 2336 0 R
+/R7 2333 0 R
 >>/XObject <<
-/R8 2337 0 R
+/R8 2334 0 R
 >>>>
-/Length 2338 0 R
+/Length 2335 0 R
 /Filter /FlateDecode
 >>
 stream
 xœ+T0Ð3T0 A(œË¥d®^ÌU¨`dn¬gjb‡±
-õ̍
-LÌ!´¡1D½…‚K>W  *
+õ̍Œ, ´9D½…‚K>W  ¬2
 endstream
 endobj
-2335 0 obj
+2332 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110837)
-/ModDate (D:20080610110837)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090357-05'00')
+/ModDate (D:20080528090357-05'00')
 >>
 endobj
-2336 0 obj
+2333 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-2337 0 obj
+2334 0 obj
 <<
 /Subtype /Image
 /ColorSpace /DeviceRGB
@@ -8649,25 +8522,25 @@
 xœ½×Ëà PýÿN6=VaÒºjO®h q>Ï3þ;f–œsî_3öIaä2’S6o“\âK·Ûä*L¼øµ’¼Át“-•c…:ÈFü’ûÏ°0ºözj÷w EŠðCêi‰\‡Êû¦^?öˆÚÓ$œx*Q‡Ôw“Øû È=µÔ	ÂG‚/ ÉØUMRÿt#]ÖÍ×®é ÖFº0WI’àðäéd’eUÜŒ92“~™#ã°®4×eM•]”v+Yø7°þ'~2¦H7?>³:9PaÀa’­þ½mmíAÖÔàœ$©çÒKâwŸ_¨ÎÞè^ÞÐ{l£Êr¤¡×0+BçÉ+xë®ñƒcêˆÙyŠv±(éòÙ-§ùèÄ
 endstream
 endobj
-2338 0 obj
-61
+2335 0 obj
+60
 endobj
-2321 0 obj <<
+2318 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.281 619.448 283.001 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (dhcp01) >>
 >> endobj
-2332 0 obj <<
-/D [2330 0 R /XYZ 151.701 685.529 null]
->> endobj
 2329 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F89 2333 0 R /F73 2334 0 R /F59 1905 0 R >>
-/XObject << /Im3 2328 0 R >>
+/D [2327 0 R /XYZ 151.701 685.529 null]
+>> endobj
+2326 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F89 2330 0 R /F73 2331 0 R /F59 1905 0 R >>
+/XObject << /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2344 0 obj <<
+2341 0 obj <<
 /Length 2199      
 /Filter /FlateDecode
 >>
@@ -8694,469 +8567,404 @@
 ÷}¿{ø?8ø7
 endstream
 endobj
-2343 0 obj <<
+2340 0 obj <<
 /Type /Page
-/Contents 2344 0 R
-/Resources 2342 0 R
+/Contents 2341 0 R
+/Resources 2339 0 R
 /MediaBox [0 0 612 792]
-/Parent 2307 0 R
-/Annots [ 2340 0 R 2341 0 R 2348 0 R ]
+/Parent 2304 0 R
+/Annots [ 2337 0 R 2338 0 R 2345 0 R ]
 >> endobj
-2340 0 obj <<
+2337 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [328.968 221.658 400.478 233.347]
 /Subtype /Link
 /A << /S /GoTo /D (AcctgNet) >>
 >> endobj
-2341 0 obj <<
+2338 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [348.309 181.01 460.543 192.7]
 /Subtype /Link
 /A << /S /GoTo /D (ntmigration) >>
 >> endobj
-2348 0 obj <<
+2345 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 167.461 232.917 179.15]
 /Subtype /Link
 /A << /S /GoTo /D (ntmigration) >>
 >> endobj
-2345 0 obj <<
-/D [2343 0 R /XYZ 100.892 685.529 null]
+2342 0 obj <<
+/D [2340 0 R /XYZ 100.892 685.529 null]
 >> endobj
 126 0 obj <<
-/D [2343 0 R /XYZ 100.892 450.159 null]
+/D [2340 0 R /XYZ 100.892 450.159 null]
 >> endobj
-2346 0 obj <<
-/D [2343 0 R /XYZ 100.892 424.409 null]
+2343 0 obj <<
+/D [2340 0 R /XYZ 100.892 424.409 null]
 >> endobj
 130 0 obj <<
-/D [2343 0 R /XYZ 100.892 302.677 null]
+/D [2340 0 R /XYZ 100.892 302.677 null]
 >> endobj
-2347 0 obj <<
-/D [2343 0 R /XYZ 100.892 271.59 null]
+2344 0 obj <<
+/D [2340 0 R /XYZ 100.892 271.59 null]
 >> endobj
-2342 0 obj <<
+2339 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F51 1134 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2353 0 obj <<
-/Length 1309      
+2350 0 obj <<
+/Length 1248      
 /Filter /FlateDecode
 >>
 stream
-xڝWKsÛ6¾ëWðHÍ”0$Ñ[Z7gÚÔ­åig’`	Ùð’¶ã™þøîbAQÒ0nÚ‹¸\ì.öù-û Þ¬~ج.^‹<à1Ó±æÁæ>àŠ³,æAšk¦tlvÁûP&돛· *‚œé4MPR€–Pr27µ©ªu$Uþú!æéÖÒË;;®…ŸÖ2[¤úOe³_G<áiøcaºyØ“´À‹V?mVŸW,Ç?òH1)ƒm½zÿ1vpö6ˆ™Ôyðä$ë@ªœ¥J]7«ßVñq˜\-†™hæâÁÆ}Î’Ðl·íC³y8:_‘·³éÇÚÛË5;"š-PJ¦Âû5Ûþä\…™øi¶¥©èpÀømÿXÂÁÖÑÃñ•¦∸d*Ñäêä[GJkJrI†Ÿ¶ÿê¹
-ÛD>•®6@Ý­#‘…–^öå#j€-÷
-aÛÁkŒ­vðÒCazçZž€°òLôÒ
-yF{ïÍ÷íCw콚œ¯Q]Ëû¡(;6‰	(©$wûîêOÑ‰·äÈe:(zº\#ÑõemúçIm‹j…iÊ¡F¦‚\Æ㧢¤szý£lv­Ë¨7zÙFK˜S—éC®œrç:†•ÌîH®/÷…cx=ßLý~,+»§\Ç`p„Î(ÜUðê{IŸ:‰ê‰Çr±cú¶™›æ8Ù¾ù7Îl’ºPü¸Ÿ C¢XÎÕ4î¦2MMb§“%S–gTðÉ ³s2à¥6;OQ4‰BlȧÆM¾ÞÓ¹™ôqr*;@Ã'9o±ÜÈŸnPSK»ƒV…™rí½sñF¹`©§Y™z at J˜C;úq—ÒûÄ0Rg|òRwåHbƒ
-½Ü^]^¼¹º'±¶9³3¶]TÙGŒÒVÄÚ•½ÝŽm_bX_Å=% £9?¾Lg_¾p]ñ”iîkþºÜ?ô®?e(_*§ÒLæéTÎWwµÈùW#³pNÚßôP"º\!e² M ±YÍmç
-ÖVíþù…ð9”-æÿ÷ÏŸÓiÎr-)KœåùZü]b\\ÕIpÙ‚õÙþ,ñŒqì-áÿÁ×Ù‚w*š½zaoIäI_Æ›©Ñ}ʯÀ·UFš±¤~L›ÑvƒËöE ó 59EÎNeÞG*ŽÃÛáPjÄæ‹ŸK× pÅ?CÏà í;Þ×wøŽ©-‰ÍÓ5»îšOéãh…JX¦ò©û†ÊÚ±X„IØâ^îÌwpB3.Äi„b1ÂëÊlÝú@<åA“‰ïÝN‡!lKtmh{”]Šƒ§‚åò[âÈX*ô$‡ˆWb¶¬J ìô…·E;ŒÃâgLdbNP”àÞý"é©–þs°:a*“§hI;Nç¡q¨¡³°ÁéÎŽ§Oq_˜’,,쪟pI
-Ù’~%YŠö¡Ú{Fpò^Z)ež´‰Ó°%s·/¬½ÎÅ…k·÷Àeª¡ÅÀÆxåAÚ~1uW-—NÀd+ñmYN‘<”™6Ýà¶ÎGAÛ_Œiø~éÚˆç9‹SDX§þ{ …!Lp€êH¤BM©Í—’0)Š3Eñ’0܃4‡þ(ºê¯táûçH”‰&ÿâÃdös}ŠDçéD}ør’¹8¶WÍ0җ¼rë}*šHÒÉ]Ù¸B¤¿þ…¤îû¶>ÛÕ³¢[TÖÔ$úzsía«í©#ÓvØ?ÎF-
+xڝVKoÛF¾ëWðHåŠû"¹½¹u8(Ò–ÑN´´Ùð’²b ?¾3;K=ÆM{gggç=ß(vA¼]ü´^¬Þˆ,à13±áÁú1àš³4æA’¦
+ÖÛà>”jùiýDE1“$
+%¼:ENæ¶Î«jI­Âß>Æ<ÙX:¼·ãR˜ð°”qØ"Õ.›Ý2âŠ'áÏEލ ÈÞ¤Zü²^|YpÐüÌ#ͤ6õâþSláî]3i²àà$ë@êŒ%Z]·‹ßñy˜\φ©sñ`c>§*Ì7›vß,EŽÎWämm—÷cm‰íåš-Ç—-PJªÃÇ%Ûþâ^‡ü&o6e^Ñå€ñÛþ©„‹£‡s“¦∸dZruòƒ-#m%9ƒ$ÃOÛ†ç™÷ƒí"¥«
+PËH¤¡¥Ã®| Ë!l;øcë¿…¼ôPä½s-S ´<}@:GEžÑ>zõ}»ïνדó5J£+`¼Š²c“˜Œ§‚äîÞßü	2FyMŽœyLå@_—k$º¾¬óþyz¶ÁgEÞ”C,L¹Œ×‡¢¤{:þQ6ÛÖeÔ+½nçː—˜»Ô“
+ä”ìø<Ù1ĐSÍì–äúrW8†ç»É ãOeew”ìŽÐ…3GßLæÒKdPS<•³¾ömsêšólKº_;µ*q¡øy¿€¥YÆõ4ïy•75‰]Ž–LX–aÁ'Ôž’‡:ßzŠ¢QÁ!
+<>Ò}>½ÇÑ©ì ¯2Þb½‘?YÐSO»ƒ^…¡rý½uñF™`‰—Y™š@JD;úy—ÒûÄ0Rk|öRåHcÃ:ÜÝ\¯ÞÞ\“XÛ¼Ð3¶]TÙ'ŒÒVÄÚ–½ÝŒm_bXß>-b–(õùR“~ù^v
+¼êã¢Sîö½ëOB+Ì•S&³d*çÕCäü•É4<%íoúhÝ
+®RÍ`H¬—`±í\ÁÚªÝ=¿~œ0™¨ÿü/¿GÕIÊ2#)¤CP}²‹¿sŒÕM­‚ëÔŸœ„"ž0ŽÍi„ÄýgÏ4WÑ™[¯¬.aÀ¢NüöZÝ'ý¦Äp‹eÄâa>–Ô‘*¼m7¸|Oa0P•K<àìRæ>ÒqÞ
+Çb#<¯~-]ìÁÄW?EÏÃí{ÞWxøM^[;Í×Éu×~ÚœG+´b©Î¦þ*kÇbv”ë/÷ÂwpÂ0.Äå~³~¨òÛ ˆÈà"°<lÒ.1á£[ë1"1„m‰®sZ ecçâà‰`™üž8R–3É!æ£IÌÖŒV	0ƒ^Ùq³*Úaf9e"?&(R8‡…w¿ƒHzª¥ÿÇh­˜†n¸ÀKÚr&s‡&
+œïô|¾ñ7Öˆ)IÃÂn¡úŠKjÈ–žá%KÂCÑî«-±On²cÞKëRæé5qš#º¤ÎúÌâë\\¸x{]y5´˜ ØW¦í×¼îªùÒ‰M|_–$e¦EܾÂù(hg{؆çÌF<ËXœ h–
+ß² 1Œ'ã Ö‘H„ž:)ÒGšÏ%az(^<¯	ƒ•¤9ôGÑU%ÿ"ËÏdÕÌÿ¾3&µ_êK$š¾°	þV+
 endstream
 endobj
-2352 0 obj <<
+2349 0 obj <<
 /Type /Page
-/Contents 2353 0 R
-/Resources 2351 0 R
+/Contents 2350 0 R
+/Resources 2348 0 R
 /MediaBox [0 0 612 792]
-/Parent 2359 0 R
+/Parent 2355 0 R
 >> endobj
-2350 0 obj <<
+2347 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-ByExample/images/acct2net.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 2360 0 R
-/BBox [0 0 317 175]
+/PTEX.InfoDict 2356 0 R
+/BBox [0 0 319 181]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 2361 0 R
->>/Font << /R9 2362 0 R>>
+/R7 2357 0 R
+>>/Font << /R8 2359 0 R >>
 >>
-/Length 2363 0 R
+/Length 2360 0 R
 /Filter /FlateDecode
 >>
 stream
-xœÝ]Í’$¹m¾×SÔQ>tŠÉÝ,km)b–¶Æ°ÑžÙEõÈ»kK¯o @0«§²šŽeÌ¡‡(ø>’@’IfæOg·ø³Ãü÷ùåôëïÊù‡_Nn©9†
-â›ÿüüÃÉŸ?žêºïÚÙ¯KÎÉŸáÿe	åìS*KMçŸßŸ>¥”㲞_Ni]|ð^>,Á§
+xœÝ]Û’Ém}ï¯èGùaJy«¼èͲ֖"Öai›þ€1¹KEåݵ¥ß7€ÈêaW;ĉ *ø0L48§2Ê[Uýtv‹?;üÇŸ_N¿þ®œøåä–šc¨ ¾ùÏÏ?œêºïÚÙ¯KÎÉŸáÿe	åìS*KMçŸßŸ>¥”㲞_Ni]|ð^>,Á§
 Åè–<Š±¹Åùó3˜ðaÍ‹‘½‰T
-`ª¨I_ÃÒª»‰n¶¶Å¯9@”– 5£Vk‡ºUzQIªË
-ÏŠo[€\‰w–¡†'íÄèŪ”Å/Z¡>Á†¾i¿
-»+OÍŸÿÆÕ¾û·ª]núïåûÕvà­ËßßÍ—¿¿›/§­Ù—›>½š~¾§uÎlk_ëòEFÖå‹Œ¬Ë^\·5-™,&®œÏK¦6­Àq":©dxˆ£ù´¸ª_«_°zJq‰¶ìÂRzHF!YBd/FÒkEçýÒ’Z
-­ø%®Z¦hc˵.Í;lƒ!c`û¨9H•Fó³DJHCŽfÐÀV÷Úü
-%B@¬JùÕÀ¾mÅ-¿ë«m}«u9má¾Ü€lÝѺ|‘Þ½|‘Þ½œ¶–_nºòjº÷žÖ=DÖÖ#Z—/2 ._d@]N?|SüçùåüÛwpo綔Öà"÷š¨kàõP…s©@RÉ»—Ó¯ÿOïþ|zò¦åóS€ˆw«?¿û¯Ó¯þðÇó_?~þÝïÿ叨Tà¢éR9g0]|Wùñ¿¯Nøã7ïNÂì²4û—r­4æ´J‰ç°–¥¸xŽÁavi²am=XCZR«x1Û׆6\ÒÿCÆ^^j<Wàê¢?SzαB³BïÜ ØUŸ< >⟵½‡^(›ì%•ÐØ~@ë2dnmËQK걄l= 5Ú¨µÂ4"±¸îi[Ñ/PV‹%“­;Zƒ#´$\:›A/ËñžÖew”ö†;Å2$¤X%˜ÝÂûÌ(¹£þÚ(¹«nFIÕÙ»%•BmñÚ¬’Þ‚ûZdTXvÛ+ô:D
-ð_R¦¹GkÕ¿[žûêÏGÔ Y†±ü\×·Ï"ÛWŸ=¢n 1¤Z–ôp[íjÏ€öµ_i©¥@lÀ•”ÐÁ¥$À Hçƒ1,®ÅªoÐíiÏèöµo²Z	0U
-ËÜÚ"±Ok—2ÛXáÏ^#„²þýL”ÞQ-J謹
-p-Õ‡0Ó¢FœÛ¯ç `rúüÙWŸ> nº¥k˜…ôü¤Ã&‚Þ){:—!Šæ!•ÖŸ ²ô€ÖeøZ	æ%mcë­ýžh4m’Õ-°¶Jø7=±«>÷Äê7=Q=X‹á#ËúžÖE=­&°míkaÏ®pݶJ=)M–vu®Õó9X‡º ß iUÒ1ík]†¬âT¶·×cI¿äïk
-\ÑáÊÚz‰ÅuOkàŠÁÔُ"±¸îi\±,8\G–L¸îh\kÄûÆaL¨>«c0Á<¿¹l½±dÂtGË`ªyq%Y‡,™PÝѸd’ØëŒiäç8ŒU¶ÆƒH,Ž{ZG„5ž$,˜Ð|VÇ`ZÝ‚9ÛxcɄ鎖Á”3¬C“uÈ’	Õ-ƒ«XŸë‘%®;ZdÖšù\`åJé;Ôˆ¹S×9õîjã⻀y£c­ðZg_	r¸wño,À…9÷ã¾Î;	ÒcXïÛQ°“ ‹Qéå+	º]´Òââ“ÕÌã8i> –*¬¡!ç™Þè‚Vp-ÅÄö• Ï"Œ.ìWü¹»ä1¡‚Öç‘GçZ—Óš «;hƒ	+ah
-	,¥8Ï=¢u9¥ æS÷è)G§ÉS«]m=¢KZ	kËò(iëïý$—ûJ—S.t†°ã­Œ”ç­aÓö‘ùˆ¡‚g‡ä)‘–X»Z˜cȩ̂þÁû®à±4깞cöµpÆVœ÷WÞÛÿÀ,)à0˜ÿx3I¼E†‹eøÉGºœÇ~Mßöx@ÝLÁ‚Ã4…÷AÞG;ã°kÐ'À4â_2¾‡¦Ý¸ÕÅ1œaÐó.¹ª¤A€;¬ƒKИe’Ìv( ÞÌö”«f[hæšxËÜX_q™cmÝú»Áôá
-m#r÷/©ñ±[ñÖ$¬XÎ`®®0êå/u$H	ÇÆ®öþ`¬W¾iá¶ÈL‚%”%D’`~Ø3í¦`ßäDœo£‚x½•¨×9¾V”Øy1EZ×CÌU¦å€û‚3/ÁP2a3øYh§JÁÑù°®Œ›úHG †—(qˆÛ–¦E%W#q·À®§X\‡5$;´“ðf¶±=·¶À:L”Œxc:¢¦dlÝú»Åôá
-mOaœV‹xóo^žË²¶ˆ}ø[$ŏ0Þ×ÞãäŒËh¥Ðï™È,i­-!w
-.!á5‰^û#æ–üŠ`Ôaß·’áÛó׎;æ
-403N`zbϸ/ñOý·¯c:Ã\ÏS'H&íÜ78Ú™ò	nOït†%	îd‹¿—SqŽÇM—\Äˆë	ï=ææ­dc‡æ[ofk¬ãü	÷Þ‡õØ×{ÃÖ­¿[LÞÐöÐÅa–8÷	-Ìÿ–˜04ñ®7dG@ïkït† þW ¸…÷PLc³dæ?e˜¿&‘isN+¬Hë©%Þo%û
-é¯-vf®Kô¸+…? A)ÑÁXjRÞÕ¹¼r~Éá,ƒò8ôox_ý¡ FZt6¦û£Í-º«
-ZƒôQÒ˜÷ÁJf+Ø9od˜‚b¶“1˜Êâ=RÕ‚éù²¦bÝ:»Áóá­Oì¤yG“ˆ‡ìÅÿn"ùõ½Pö°îĶ Ä[Ë0«ÙbI­ÝÀñpaÀYÉ­@×™8ß…kÇk­$®oêÙ†ñ׍”Vx:7Rf]qoãÓñ®}»^Ƴmtùç%„0Q{<‚ÁÂJ+mtG·Õng\EÐZ^"j‚:0ëȳd²BKÎ7²L
-9[Ó+ŒÌaÃöŠÉ³ZS7Þ¶x>¼•áy‘œ èh‡óýúÚ'ÊŸ‰áÔw—É)V<‚ºr£Ÿ1wÉX’ÒÚ¢½&)…¶ÃQ‚&ëkS‹½ßJÔû´\þêÑÒ,°$.xÿÄ
-Á5ôå!Þœs²É½¯d£¹d·$7ÑÓI7˜Ž®«Ç#aUÏ@íôt…9Í»C¼ç›úÑT–\UÒpó‘ö ­Ó'Éd‡bãÍlS{nl¡õ².³ñâa]eMݺ»ôáíLÏa]̾h•íð”dY<GÀ¿xÑ߆õ¾únXW—pt	DÚ“Y—8ƒf	nÖõÛ|ÿtèF¢Û¡Ôö‰©ÅÞo%ê}
-ë¯-v'žk˳-\íéühÃAgó`Ìàd¼6<CwN	½×ðî(¬“uçÀû  ½àۏ*"V½‡u˜ËÃ1LÖ3=ÁØ®7hûYb¸0 at JûÛ?<ìÚÊRCê7—Æ®àñ¸³@[ÈÈJ`ͽ֢-’ÖË+0/7
-òš?ô
-2v©˜ÐW¸8 ö
-‰e:·	|ÂTÌ}#¤×¸nMÐêç
-¬þh¯4-yš[êqÓÑøð杻bœn¬ò·1,à{›Ã5µâ€;ýÄŐ¬t]o¨ñ¶†vÌ°hïö¤øÜ‚7¢U®ð”ë¹¾»Ðž4€«„VïKvµß‹h_ ˆ‚ 3|ü ²#Æí	Rr…AZñ@í ¦)r÷ÀqT-³œxM'xQ6Ô´¬ÜTÂØÔcWÊNQˆ† 3gŠÙ£r£žƒ´è“·ìTÂØdG3ñ66Þ]5ì`q“Q€«u
-À–•œJš`äêA¹)ÖPŒl`Âúí Ì¨×$
-1¿›GjˆLø&:ÔÏaÞK&‹ðÏœ$¤²ÉøÈ!ÀÅãl at +7:ݯÆ{ÑäUpb`BOu,BSNTJ*`T°ŒY"Z9IÈËº”…•
-•ÖgÔê@y)Ñ„ba¢0eñšò òR“@eÜÉÊ‹#]~æ< µµ,´TÀ ¤:cVóÊJý³†âc3)†Ó”ûøøƒÉ°‰ÅL¢ðÙ¹2&Q\4ÙB8H})v#_”Ú«iõ~ßXí÷¢Éª  ÅÀLaÊ€G¢5åÁAL%LVpKHfôªÁIA-HY¹©„±©Æ®>”¢
-A)fS6<·)'v*alÀ‚]B|°ã 
-œ"Ä€–•œJš`äêA¹)ÖPŒl`ÃbÊŒc6åÇ~ÓÆä1˜©›0ÒH/™,Â?s’ÊR$ã#‡äJÏßŽÊ 9Œ©MQ'&ôSf<¡)'*%0*	XÆ,­œ$äåwÎZ]ÊÂJŒJë3ju ¼hB±0Q˜²áXMyPy©€I 2n‰dåÅ‘.?sÚZZ*`PR1«ye¥þYCñ±™À”Én%.k¦M–Ûÿà‰|•=./*÷)áfttKéd·ÊI©UË«p¶î’†[ò9«-³dÞ%}?é œ–<|Hùù$(†FG)¶<è¥,‡åF{q î¯>Pv"Qv0^B0ìຜ²açÝZ`ŒD¯¸¬žE2°u{÷aÙuªÁ(Õ†GyÕQ¹ý¸»ÑÙ|¦30øæ—Ö—¨n¥#r±UÞ“§
-\×Îßî²z#	ðŸq	d“Õg}	ïT¥Y²ÒÓh£–H†e‡d«q¤
-îTÀë
-äÍÎÜÑön¹&|n¶ò£
-)<ÆÔ$+ÁcÄQkõí¹Yë嘗›FyÍŸÝž£Ç0Ï	†d¶ÁpÆs²æÊým7¢+‰0QÖZ×­Úèz#Ëó6]€Nô^-¼h/Dh@ÜV=e$¼Á6üní7³=oÖAÇ“.Ñõ'¹^Œú÷èñᐆq'l
-µ×‹pñÀú`î ¿¯4fFu)wXA$¦u0yP0yÀ©€zèe¬!XC!²…
-‰ÍvÝ1)Ò”v­tÐÑPS	c[­c:oTjk¢G:õ÷HÏ,ŽêRVj*a`j€«¥¦DC Š…™ÍkIŒú¬æeu5•06¸üG7¨áùB5|H<¤ñ;îÓS]ÊJM%L
-0põ Ô‚hD±0“ >;&±~ê¨G_ÀZìÏpüXÏÐóáRIdhô1,H¹ûY$@NÇgr‡…B#qøèå‘ETCQ²…
-ê¶Ãr³Ò°S	cã(Vìç†g‚¡Ñ3Å° ee§Ʀ»úPvŠB4¥X˜yØ$y<n6Ov*alËŠ£Ý°ã|04z¾¤¬ìTÂØÔcWÊNQˆ† 3›*ÇmÊ–5’–É(à_•¢±\ûs®í\6E58_¨)w&£ f|*S
-d˜ä[½lŠh(Èn`ÃbÊ•c6eÊÁM%ŒLâXK¤n’Tƒs…Z²rSI‡¦¹ºPn
-B4$˜YLyò`̦,9¸©„‘Ir‰òÁMò€jpžPRVn*éÐÔ #WÊMAˆ†€d3‹)GŒÙ”!ùžÉ#ÅÑ+`4„3Ÿ© ÏzêBÒ€jp–PRî>L)‘Þ
-«ð/Îøà²I$¢¡(Ù†ǔ#ÇmÊ’ƒJ›„±`—@ì$¨g
-µ ee§Æ&»øì…jJ±0ó˜òäá¸M™r°S	c“Pì생¤Õàl¡¤¬ìTÂØÄ‚`ƒ P
-A)fS®<·‡¶>÷7
-Jâ-3’„ã€׋&Ɖ^€¯Š¯Z~¦MS|ˆHð$K1 Eñ DâẒû.&ˆ>/Ž¶cº)Ó†Œš-lYðfà!™õ­@A-7–7zÉ_4Ü`t…f¸y‡ç²Ñ G!ÆéÅáW%Š¬È»ÍA¨† }#ð˜Ìö·=žXÏøŒxtô1	<EP’ÚFò-<Jß
-FÖ~ü
-%øº"h\é¡/¸Œ;|º•¤Š{—£–HÔp0Nq³D\CJ£· ºëî¼øÎ…b÷¼ ‹bw
-Nsž^À)p¬ßU¹½Êr£órð²mŒ×|ÙGq]H˜DR+ô¾ŠÃW|½½\!vŽx†g#ñxFDj]oìôw ¾•íië/8ç´þ‹¶?´33]d$pqKÑ:µ6:ö/ntÚìøšßoöÑŒ‡À÷Ù2¾Ã ¬úúg2&Hø8­†ºÄ÷ÇY´ú(“}ªÀüÈB=«ãKTº}.<ŸÔýø™áõêüó6ßáÈÑS÷.¦~mPR"R1,µRý©ÍÁ+à»:£¥
-K¡Œ)³ß!`l@³CA
-)&ÏýUG$Öû,ÓD5°L/ÀñK;a¢†ošÈFßF—Œ)+506 ÀÙ…¡Æ †ƒT–Eï³Cë}ÆÁWÚam³¾*¦‡gßÒŸàëÑ]äq>
-~–hràê£Ü˜ôQÑné£Fº7Åé©Lú?w|\}Ë wØñXMYÑð‰ðâÀU^ÚJMƒ_589¨)‹g•(6É?‚]2Ô`'9L5:Jµ0ó˜ãá¸M¹Ñ°‰`ãðUìà†§ Õࡤ<رD±Iì’§;ÉdªÑQ)=ŽÛ”!ñc`ë4¿õud<¼_$й`2	K4OPåQêÆMÉ­¿öT3‘£Cpœ¨zÁä‘ñ3cëÕ·è§ìxFSf4œDÒ9qÔ*'Žk¥¥‘¯œ¸¾”Äë.É=‚[²Ó`&ùK5¡X˜9LYñP¼¦Œh˜‰¤#ãhUÜφG¼jpFàúRÌD"¸$çnÉJƒ™ä-Õ`„jaâ0eÃCñš2!ß±1yc
-ý¸·ÄîJ:é‘ÝÿoòFhZຣ,O(I¦Gf†þ–<6ß&qŒŸ\¯¾…?¥Â£Pšr¡!%!Å+¤8¤…—ƼüÎ)A«KY܉ \<jA5¢X˜ILÉðXĦlh¨‰D°qÌ
-têA£^~礠ե<¨‰D€‰.5 Q-L$¦tx,bûÛs_µK·H¾þ‰‹DD!ø¶ÍÚç¸ø.ÞàZ¤í.#®‚ïÅ3¸G\‡)³âÎ’‚·GÅ@Ä.¤ü|ª¡°»
-êÒƒ2£8;øÄŸá&åFçrÑÖ,7ŸÚ¬>MÆ—7•0´ÄäÝ…åÖA¨†Âî6,¨×Êlڝøü—Íe‡Ë|Ù¼áƒ	ßF¶Vú²ùïþòòýÇO¿9ÿöß~ûïÿñÝ7ø•ò͇џpà0õ„›NøjTü¦9Âö¹.£~èãæ0`a€ÂúhñëV+¨Ö~²¢yÜPLyÅ„¡Þâþm³®øCß­ü}}½pîãùÉÓ^iµõžpã_T¸Žï²÷o¶c&ÄÓZøÉö&Þ6ŸlòøA7@ü„›uøÉùh{ÆŸ½«K÷è"~‰~þéåª4à[ ‘Vl…~»¼ÿù¯ïþM·¯†8}ê-ºÂ·ß|óî÷ÜmV0J*>
-¿þóóó_þ÷Óÿ|üô5kp˜Š¡Ã!ˆ
-ÿúñÓ÷Ÿž?~=£§Ïï;”`òT´>Îç"éwþÏ_ÞÿL¸W1‰¾FfÃРÔÿéô
-‚m×
+`ª¨I_ÃÒª»‰n¶¶Åg FJK€šÑ£µCÝ*½¨$U0ïâY±3ãí Wâeh…áÉubôbUÊâ­P{LY®ß†Ý•§æÏãjßýÛÕ.7í÷rƒýjðŽÖåïoæËßßÌ—ÓÖìËM›^M;ßÓºg¶µ¯uù"=ëòEzÖe'¦}[Ó’ÉbòàÊù¼dºÆ 8ND'•q4ŸWUâkõVO).Ñ–]XJÉè !KˆìÅHz­è¼_ZR«¡¿ÄUËml¹Ö0ÀðÐ2¶šƒTi\~–è…r!ÇeÐÀV÷zù K„€X•ò«}{·ü®¯^ë[­Ëi÷åìdëŽÖå‹´îå‹´îå´µürÓ”WÓ¼÷´î!²¶Ѻ|‘uù"êrúéä{Ÿâ?Ï/çß¾ƒx=·¥´7¹wp‰ºÞï U8—º4ðîåô«ÅÿÓ»?Ÿž¼ƒ€iùü âÝêÏïþëô«?üñü׏ߟ÷ûù#*¸iâOLWHåÇÿ¾þ9áß¼;ý	³Ëê×Îö?.åZ©Ï'¸*%žÃZ¬ƒÃìÒ2dC¹‡´¤Vñf¶¯
+×pIÿmè{y©ñ\«ƒ+Oé8Çš0ÞØUŸ< >⟵½‡^(›C/1¨„úöZ—!sk[ÖˆZR%dë­qZ[!L“ñ(‹ëž–±ý’\¶Z,™lÝÑk†A¦o½H,Ç{Z—Ý^Úkdèî†g	)Ö]	F·å³½äŽúk½ä®ºé%½WgïðFŽ—&â­YýúíéAaØí®ÐâQ€û’2;ZX«þÝrÜWŸ8>¢> ÍÈ2ôëà纾}Ù¾ú„ìuˆ!Õ²¤‡¯Õ®öh_û•+µ¸AÁ]”ÐÁm$@ó§€cÁ×bÕ¿7èö´gtûÚ7­¦Šc¾Ú"±Ñ~Ok—2ÛXáÏÞ„±þýL„ÞQ-B謹
+p-Õ‡0Óð¡F×·s 09Uín7 wÕg€¨›féÚF ˜`ð‚;È…M%½Yöµ.C+ŒC(׬
+>A%dë­Ëð8´ŒKÚÆÖZû­ÑhØ$5ª[`n•>Àûêsk< ~ÓÕ	©ÁG$–õ=­‹z6Z+ a:ÛÚ×–]á¾m•zbš,íê &œ«çs(0t.¾Á¥UIÇ´¯u²ŠCÙ~¸Kú-_kàŠfÖ!"±¸îi
+\1x2{ãQ$×=-ƒ+–¥úl=²dÂuGËàZãÒj²Y2ảepÁX¿¹É#K&\w´®šW&,™pÝѸRŸvq$SÁ;¿	ú+t]ãA$Ç=-ƒ#Â<¯%ë%ž;Z×ꖐƒõÈ’	×-ƒ+g˜NY2ảepÕ óÔÕzdÉ„ëŽÙÂ9ç¹À6‘ÇP#&Q•\ç$ü€>Nĸ°ZVÒäÞö€dtï<¢6Y‚ót××J÷,%È—aM;¦†ØJ”Å*uAƒéŒDá¾ÚiqñiR‰_¢óli_lU˜[Ã8öM—´‚“¬Þ/Ñ‚ŒÐß°!2g#‹Ÿ ™{äþú€Öå´¦FSÿ!%¼«	L²ZïG´.§À|ê}£íÉSûŠï×ë-àè|\ÒJX[¦»J@W…’p|@ërÊ…–g=.	½€¤P&i
+/n憐h.èþqöˆ®Î‰´¼àÚÕ¼Sà>µ­ÉBk7j»žwöµp4Wœ÷gåÛÿÀ*à"Œ¼ƒQ&.ŸáD~ò0ç±—Ó·DP7óà0uáI < 
+]¢A£ ÓØd=yËqŒb\C7¡Õô.¹ª¤A¤;º{—àb–I2Û¡˜z3Û?RÞšm¡u‡ârº±¾â4ÈÚºõwƒéÃÚFä×6éâc³â²&-á.®®Ðëñ/pîÍ©d¾±«½ß«Ç™± DZ¸e2“`	e	…$˜!6Åœ)$°qr"Ò·’QEüÞJÔï_/NlÀ˜ ÓŠ»Š]Õƒ¡pßr¢¬¹= dB9fð³6Іƒ	 #rb]è;õ‘PŽÀoTâ·5ŠJ®Fâ*n‘]O±¸kH6vh§áÍlãõÜÚë0ˆÆA…±
+QS2¶nýÝbúð†¶§PN+öF\œÆåÍsYÖq!€ÿnBy_{/”“kÐ/d •B_WYÒZƒw&
+n#á5‰Ž "æ—üŠ`Ôaß·’áÛ†ó׎rm0úÌÔ13ŽbzrϸoñOí·¯c:ÈÏS'H&íÜ7@Ú™ò	n_ït†©
+ît‹¿—SqŽûM—\Äˆë	×'sóV²±Cc®7³Wsk¬ã
+÷æ‡u»Ðâ±Úºõw‹éÃÚžº8Ìç>ª…1àSÉãï& ÷µ÷:Ã
+ ÿ+ aÜ-eš‹Í’Ñ™ü”a€üšD†Î9­0O
+¯J¤–x¿•ï6¤¿~´Ø˜¹.Ñã®¥DO<Uëm¸«syå|“Ñ65äñ5Ÿkĵ÷‡‚iÑÙ™îö¿h†W´é%¢¤%0ÌV°qÞÈ0Ål	†c0œÅ5TÕ‚貦bÝ:»Áóá­Oì¤yGƒˆ{ì;·æÔ÷BÙÃÜçÙ‚—žaW³Å,’ZZÒñpcÀQÉ­@çš8â…{Çk­$®oêÙ†ñ׍”fy7Rf]qoãÓñ¯};gƳotûÇIe¥ÆÙÔãVšm£;Úµ¸ÝTpAky‰tê	êÀ¨#Ï’É
+M;ßÈ2]ÈÙ˜^¡`¶WLžÕšºñ¶Åóá­ÏåíCG?œï÷W‹åü¹~@}wªœbÅÎ#©) 7ús—ŒI)Í-Úk’RhË%¸¡²¾&1µØû­D½Oæ¯-uÁSâ‚k(>P®¡OqÎÉFø¾’æ’Ý’°ßDåa8º®ŒÕš6ƒ‰´ÐX±;Ä•ßԏ®²äª’†›“´G µhž>I&;of›®çÆZ/ë2/æUÖÔ­»HÞÎôÖ5Áè‹fÙ8^‡øôtfAþnÃz_}7¬«KØ»"mÔ¬KœA³7òúR_…É?­ÝHts ”Ú>#1µØû­D½OaýÕ£ÅæÄso9b¶…»=mõ5ÌtvúÆkë‡e åÂBûˆ"Ëq
+—Ha¢<ö¼ ÛO¼i{SK$ò÷0sy8‡{¦Ç'ßõq?o7È ;l—ÚÊRCê‹L4QHwh›Y Y	̝£×Z´]²Ñzyæå梼æσÌ](e¯p“@íÌt¾ø„©˜û¦H¯qÝš YÐXýÑÞqZò4ÆÔc©ãâÃhj4А@ãtc…¿a߯9Ü[+öI°ÓOfÉJ÷÷	—§0Äc†É{·'Åg¨à\V¸ÓSÎçúRì@_ý4¨ާîj¿Ѿ (f
+ø˜d#(FŒÝ#¤$´âÁÛAL%räð;ãd¨Zf9ñÜN4ðæl¨iY¹©„±©Æ®>”¢
+A)fϳGåF-i÷ë;•0¶ÙÑôA\ÎÆUVÃ&É1¸k§0hYÉ©„¡‰F®”›b`
+ÅÈ6,¨ÝÊŒZM¢ók±y¤ö‡Í4Œk¢Ãÿæ½d²ÿÌIB*K‘Œ\<´r£§ Ôx/š¢
+NL話ŽEhʉJIŒJ–1KD+'	yù3‚V—²°R£ÒúŒZ(/E ‚P,L¦lx VST^*``¨Œ["Yyq¤ËÏœ¤¶–…–
+”TgÌj^Y©ÖP|l`&0eÀÃpšrƒ0¹¦ ¸€¦áŠÏØA=‰g.šl!
+œ¤¾»ƒ‘/JíÕ´z_?Vû½hò…*@10S˜2à‘hMypS	“€ÜÒƒ™½jpRPRVn*alj±«e§(DCPŠ…™Ç”
+ÇmʉƒJ›°`—ì8¨§1 e%§†&¹zPnŠ5#Ø°˜2ãÁ˜Mù‘WmL"~ƒKA¿	cŽÙK&ðÏœ%¤²»õ‘Er¥u¸Q@Gc½MQA'füSr<§)3V*a`·[[iIäËº”•˜J˜`àêA©)шba&1¥Åc›râ ¦Æ&QËÐ%¬•‡½üÌIAjkY™©„qI}†­ö•˜`
+È6¦„x$Z´¸¸¬ÙáÛÿàY|	=h/[*ÿ)á6utølzÝ*g¨V-#®Âù»KnÖó\-h™} õ.é;E¸"Ó- at 9-yøòóIPŽR,lyÐë\ˍvé@Ü_š ìD¢ì Ã„`ØÁ:eÃλµ@'3‰^42,pY=‹d`ëöîòë(TƒQª…
+þÚ«£rûqw´ùL§cð1­Ò.ÍJgçb«¼YO;»®#¾fõFà/> È&«ÏúÞºJ³d¥×F-‘ËOÏVã8ܺ`|×-àÍfÝ?<ÚªÃmØ„ÏÚV~àA Å€G›šd%x´8j­¾U7k½¼òrsI^óg·êVÚoOÐûs³
+:2ž0nî§Bhë½XI„A³ÖºnÍЦ×Yž·ìB¡ãábáE!ÂÄ-¶ÑNF›mÃïÖx3ÛóÆdp<ý]ÂëÅHx¥iøèwê‡ñÄ —áƁû…h4Vê6”»¬!’JÖÃp  >zk
+ÖP”laÃc³{wX–4°]+4ìTÂØVÜ/ldïÚ°[=ô94"=Ô8,HYÙ©„±©Æ®>”¢
+A)f4º=,7j¹š—ÕMìT"ûT+=p¬Øñ ¢–>^’ÑÀ-üb,HYÙ©„±©Æ®>”¢
+A)fÔr‡åÖÏ&õHx$¶V“QB‹ýÉŽå “zÊ€£]Ê#£ž/†)w#£Èò÷j¡P>zydÕP”laÃZî°Ül¶4ìTÂØ8–;G»aÇù`hô|1,HYÙ©„±©Æ®>”¢
+A)f6[›Í–†JDzbçh7ì8ž/†)+;•06µÀØÕ‡²S¢!(ÅÂÌÃfËãq›²%ØC-“QÀ#êi,WGË·ì½hò‰üÎÉB«K¹;0é {“M _ÌÅ8èe“MDCv
+S¢<­)Gb*adÁ\B\‰Iß9Ehu)+1•t\ZŸa«%¦DC²™Â”DkÊŒƒ˜J™Ä-—ÀVbùò;'­.e%¦’ŽKë3lu ÄhB60S˜’â‘hMùW|Lâ(Ž^
+£a›ù|…vÖúªÁ™A-H¹û0¹£Ä_¦ð]0Îøà²I¢¡(Ù†ǔÇmÊŒƒJ›°`—ì$	¨çµ ee§Æ&»øì…jJ±0ó˜Òãá¸M9r°S	c“Pì생¤Õàl¡¤¬ìTÂØÄ‚`ƒ P
+A)fS¢<·‡6>‚k%…¾YF’Р~Î!'z“ ¾_¾jù™vLñ%!"ÁcÐ/Õ‚”ÅÔ‰‡KîçÝÐBôòPPR¦Í2B147[ØòàÀƒrë9Zv,Qvô*ÀhØAÃWý*;ïðô@6à)ds}zyxV‰bëöîðcª!¸Å†Gß<*·ý@Ö3>?íâɪ€’´Ðv’o±à±PúîPßÎbIXû™,”໌àúÄŠ{rø”`Àï6Ì’TqûrÔÉ°ôVÜ6çÜè‚ïº<oþ㳡XÃý/ȨØΝDǽ§·	
+<V‚ï;\‡^y¹Ñyyáåæz¼æÍ>¬ëBÂt’Z¡S=ø²_ñlôú…ØYâ‘žÄãk4¤ÖõÆNSà[Ùž6ƒsNë¿hÀeÀ³g¦‘Œnu)Z§ÖFÇþōN[_DâûB_òàá è¾øšƒ²ê¤Éš wà“.49êߟtÑê£ÜP
+–ôl¢@ŒÌt\x>©ÿñ3ãëÕ·æM¿#ò£§ó]LýF1x‰DxÅ°ÔbxõÇ:µ€/öŒ–9̏Z0¤,ž‡D°±ÅÎ>;F14¥X˜y<÷7{”[o¹L_$±ìD"Ør¤á›bÇ÷„‰¾˜"
+|y]2¤<؉D°±ÅÎ>;F14¥Z˜xô–;*·Þr‰ÕÙ<‚¯–éqÚã¸ä>á¡0ç‚É#,Ñ,ÁÕµÆM©h³ŽR#½’œ“T/˜2~f¤½ºEÞÛéL¦LÈ\¸¤\8F•G±ÒÑ8W
+ÎjËäq”äÁ+™h0’\¥ŒW,üSö;Ÿ)ã1#.)ŽEÅËÑjq<«Ç»Zà23’’à‘|"x%ãF’“TƒñªÅ?e¹Cð™2~Œ^J2$벺4ržË/¶\09%õ\}”»“rÃE‘ToåœÓ&-ŒŸÕÞâŸrÜa8MÙΰ‰°âøTVÁJLc\58¨)‹ç!ah’b¹$¡ÁMÒ”j0H60³˜òÞÁ˜MÐp‰ ã˜UäÕ†ǽjp^PRÜDÂÐ$írILƒ›¤.Õ`b`b1åƒ1›²"/Ř²†e5¥•¾wÒã»ÿߤ.ÐÜЫŽ¢<8$ý…X£~7[ï“=ÆÏ­Wß‚ŸRâ1MùÐP	SâxJÐÂJ#^~ç| µ¥(N‡D`I}-1A P,̦dx$ZS&4ÄDÂÐ8R8‡ò Ʊ.¿s&ÚRÄD"°¤¾Àƒ˜ P
+¨&
+S<­ým·€¯Õ¥ò—LX‚G"ô|³fíc[|ïnp-Ò—WÁ÷ß
+Üû­Ã‚”ÙqgIÁ…N1ñ[ô@Ð]Hùù$ TCawÔ eF1vð>ÃM$ʍNäî›­Yn>µY?„šŒ.n*ah‰?&(Ȼ˭ƒP
+…Ý
+lXP«”Ù´Ïðù¯œË~•ùÊyÃg W|ku·…_9ÿÝ_^¾ÿøé7çßþáÛoÿý?¾û¿X¾ùHúv<üVøn yHAø}s„ís] Eý:ЇΡÃBó~H³LZAµžðó
+V|ß.ê-ÞápmÖ·.<v}'¿Ñ—Økç`ö	?†s¦ÞnáàÙ|üB<>"Ùß0âÙü~{Ã/½òýö'Ÿð½âùü„[oø±Rù‚{ÆŸ½«K$÷ð"~
+‰~þéåª)S$ÒŠ­³¾¼ÿù¯ïþM7½ÔŠb=õ+Úa_¾ýæ›w¿çˁ@ÃõNŸqÇ_ÿùùù/ÿûé>~ú.kp˜Š Ã.ˆ
+ÿúñÓ÷Ÿž?~=£§Ïï;’`ÐT\!|LÏEÒ
+îüŸ¿¼ÿ™4pk®"}L$†¡A«ÿÓéÿ z'p
 endstream
 endobj
-2360 0 obj
+2356 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110924)
-/ModDate (D:20080610110924)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090457-05'00')
+/ModDate (D:20080528090457-05'00')
 >>
 endobj
-2361 0 obj
+2357 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-2362 0 obj
+2359 0 obj
 <<
-/BaseFont /VDMTHC#2BAlbanyAMT
-/FontDescriptor 2364 0 R
 /Type /Font
 /FirstChar 32
 /LastChar 118
-/Widths [ 600 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 600 600 600 600 600 0 600 0 600 600 600 0 0 0 0 0 0 600 600 600 600 600 600 0 600 600 0 0 600 600 0 600 600 0 600 600 600 600 0 0 0 0 0 0 0 0 0 0 0 600 0 600 0 600 0 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600]
-/Encoding /WinAnsiEncoding
+/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 278 278 556 556 556 556 556 0 556 0 556 556 278 0 0 0 0 0 0 667 667 722 722 667 611 0 722 278 0 0 556 833 0 778 667 0 722 667 611 722 0 0 0 0 0 0 0 0 0 0 0 556 0 500 0 556 0 556 556 222 222 0 222 833 556 556 556 556 333 500 278 556 500]
 /Subtype /Type1
+/FontDescriptor 2063 0 R
+/BaseFont 2067 0 R
+/Encoding 2358 0 R
 >>
 endobj
-2363 0 obj
-5933
+2360 0 obj
+5923
 endobj
-2364 0 obj
-<<
-/Type /FontDescriptor
-/FontName /VDMTHC#2BAlbanyAMT
-/FontBBox [ 0 -186 593 667]
-/Flags 5
-/Ascent 667
-/CapHeight 667
-/Descent -186
-/ItalicAngle 0
-/StemV 88
-/AvgWidth 600
-/MaxWidth 600
-/MissingWidth 600
-/CharSet (/L/A/n/c/M/B/eight/o/C/nine/period/p/e/O/D/colon/slash/q/P/E/zero/r/g/F/one/s/h/R/two/t/i/S/H/u/j/three/T/I/v/four/U/l/a/six/m/space)
-/FontFile3 2365 0 R
->>
-endobj
-2365 0 obj
-<<
-/Subtype /Type1C
-/Filter /FlateDecode
-/Length 2366 0 R
->>
-stream
-xœ}X	TWÖ®ºª¸Q”Iªˆ1DE£(	‹
-n,¢ 	Š¢€ lŠ­4›64-¡¡iŒ"A1q
-Á%ʨÄ—ŒKƨãL4™äVÎcþó¿êFšÉ9™s8ÝýªÞ{÷¾ïûîòP6V„B¡°
-H^›ªY <%g…ô–•ô¶µ€B¥ÿðT¾Mø{§(²WöÖ‚½Íî·/9HôhÙƒ	k…"sûÎiiéêµI+×¹¸EF,t÷ðmy2ÞÇÇÇe¹úõ—éñI+S]ÞÇ?ÖÇ'§¥§Ä§®›ê2
-ÏNNNZá²2Yž˜á'/‹ŠMŽ_í””œ”žž¶ÞÅmš»Ë„qãƏÁB“R–«2\BÒRÓ\æºDįT%Ç®ý¯‡AŒº"$0mZz|Øô5á3Ö®ÊHŒX—4¦jÕ‚Yë#“cS\&ûŒâ9nü/ïb1‚#¦c‰w‰pb$1"ÆïÄxâ}b>1“p%³/"’˜MxîD1‡˜HŒ"!D J(ˆ7‰áÄ Â™L!†p$X‰ðĐ6xËKŠpÅ«@«“VÈzõs›r›_•k•×Ȳ
-¦ŽÑjú7To\³õ´}d—h÷7{7{µý™Ü€M¾8càŸZ<èÑ`b°ïàUƒo6¤ÐáM‡5¿I/J/QR‰
-˜Ò
-
--Ö'Ù[d®ÌPUP¦æQ$©Î×ææ•kkøÛ=*?y”—+¤`XBVVäåj5YòF
-”i3pḨÐÁr˜
-	Ö’?„³g‘«²ßRGueU†‚²L>DKF%ZFª°üÚžDÁ=*e2©Öàò#²¦¯ÈÇ.ù’í઄"‹6’@ÀqåNÒl¹[LÀA„úV'æL•&²þò¶y¹ò¶M¨;†Ì4û`äÁÉâC”’b…~—žfŽíý¬¡¢ÙùÁ¨Ý›¹o½a­B#!‰²¸bEV›]Éâ“ Œ¼;㯐•æÎã°Ù"lƒ÷±E'¦YZ%Ù³±‡¢jC
-÷†!ÇgžàÔÙY{¨ÿ̸«F0Ðåšòü‚­Ûò¸EÑs2¦á™V~·þ
-Ö·»ÀêÁØ¨ž¹šµ½T[å\YVnä™æ'sµF[¾‘cšs´ùj¾Â¢43ø|ÈÂxøMYÞ£òﺻÂ$IU/UòȍDžè%/•n2ä¹yò9ë{TId¦<£iu…iu& ©t$x¡ß”fØñ¡ã±€˼‰Öøُºóä“®«¿]vrÒAþüÁ}ÍÂWôƒ€‹£8¤·;MŠ(ž…x˜LÝ<3/$té<rEõ,dƒ;Õ!4i3›×ïY)¬¤Cæ<Ýµ¤0Ù›l—¦±Èá=W4
-yåX¯þÁÑõŸÈ‘_nóïûSÞu›4eäÈI÷^½|xïÞ¼¾LT\­¥µR	»øXXÝ,a¦¶&&:vIÚ!”žL!g„Á[—:êNœâöÕUV´>_§)ؼµ ‹œ³hMæËÖõà¯S`÷ã°~|/*´˜+Ê.-0tUYE56Tµ¶7N°aÚ
-cE¸+‹õ$¬”0ku4™e­š?ÝS‰GyyxƒHL–Î`Èשyw(&OÌ:“rG að³ŸÀŽgîÝ˜'h°ÿ¢ô (‚ΰ¯n¸{Nõwwó½õüùw]ÿ2E%*¤]Í
-Ç·Öæ4&>˜Úæàèꉢ¡¿ç'`²©"¿"¿pËÖÍZ~Åê@Uˆ€aê•ÜßhÑÆøôú¹Â¡+|×8ºÄ6Qò6‘p“E<²BNÈù þÞpoðG°èLÐ?!DoFR"rPà.?á/Ú"fYN?˜Å”ÔOÄi$}‰·ÁŸ¡`Äû`ƒ†r(Í’£šH±GÅJ*x—:-4çJ—×…	Qt 5ÂËmôŸáïáq9ÄHK¡›eî]ŽŽ<ø‘3ä1Ù!»xÂÀ»g:ó¨ØÊÊÇ|”›ù`žÍŒdòÌ‹(©ºÝô¤7@ƐÌ=œÎ¾¼kâÁÍõCÌÃÝ®ŸÍ§ƒŠÍ¼èÙ,ø’@vw=}6éúè=ªþ¡”KöÙ@	Ù6P!ÔÝÎùÁAÓ"¼ÍÛ/‡°ïå€t
-Œlý]ÜÐâÄ|…Íà`CªuùU•ºòœ¨š‚ò¹ùj.„xŠiƒãîdV™Æ Ë–¾'€úO˜\)¼ÉšÂò¼œB¼ó†ë[êuNÆÖ§a]_…d¬kDËRÞhö-Ôía™…}…¬ÖëôU›tY<
-‚5$Óü¬Ží=æ¼G¨ÝT·®L[¼µT +Ë+*ËuYUüšÝªŠTa‘ž6v2ý'2/ŠðcË
- “?`2;/<èŒlÆŒA4¢žy€Íöƒ'xÄRÁ"ƒ9ôiá”"Û„ÃÕ‡š
-‘Æ›¸¦˜ç}9ÓDê‡éìó.LªŸÿØ1˜Ô®®güŸ“àÈVpl±î¸Á`</¯pø֝Ê*ÕTU•šÑŽü+´ÿÄ»)îÖâÈò„!¦²á:áÄè¥éË&ŒÙ!ÐL{`ôìÕ5©ûÕüþ¬ýÚ.íYí>í¾Ü}9Õk…u4£šçýÁŒæã\ÅUTàz2[NQüd<Î,+¨â˜m†2‘×S­	§²:q¾Q><{çó
-MÉ{øÕ»ãõae^å…ÛU¼×zæêêá­g»n²tÇŒÈÞ^VPél(«ÀZÑ_£˜¸båqŒ~c>¶`Fì•6µ»kM˜Õˁ ½Ä)°ïЧ{ŒKÌõGÖ
-³ÔŸБzÙKŸUŸÞlöàB]ÿºPÇP–\ádA-gÍû3¿ñ]ºˆ3ÛO!«·l™è*a±‘Û‰Gt£‰ô9K±L!}à´ÃsþÔxâ¤p™þ~òu\¼Šþ2H?²,õ'¡Ä²`uãJdØì)‹Ü{Sñ¯Ø°g«5|ŒÃì(c¡.'§Pn£ì¨¾¥í!ý;¢Ÿ~ä‘zÍæO·nÑrË3fdÍè ØÏÛx¨…4ªÏÜëðû¬Ј!½)GŸW?ßlQ7òî—Nÿ¬®è]Œ&’1Òv£¶@ÍGPX •\=iÀ9ªF«Ëãze7
-a\šèð“¨>
-ßubFHó¤*–Ñ‹±15áÎ#|ƒ½ckâšÖñ
-ªÃ¯m¼žW[XŸ³?«zµḦ‹e6Nhû´sÛ®B]ž@ãxÀÁ¯¤2u•UØw€bôÑâùŒ«Î`ÿèꋶuGãëødcšî#CHEFYzuFuNƒÐ@_îøêþÝŽ˜°“ÜJµgC©®†ÿ…’›RšŽL¬2iK”ÙO&ïX0X"©êdÑÈ}5;K]9âQ=Ä·÷{k+7“ò[#_×£Š!7¼F™·/
-²{ãU&Æ”“?k}åĬ“æ½mé$™Ì$É'Ê~äW‘̱°ùa)3­Oñpf´¥	=ßú¶/ü{ç…ý§ÏöV5©ÚD¼ô>å;¸ñìq£‚?‰žÅ!G|S–î±ä“K—ŸòÒ<Ôdh°øóúˆ7p{ɪ>âs¹~
-&Lm,¬[¢\c}©ìòM•U¥˜5 {#’R—åãꁳÝM˜Ú£Ñæò¿uj*òf‘Y3d½Àސû 9´pØó=*Ä[ú"¸aIø¹¼Ñn QÑ ±ÀÂrkx<¦HöÊ–~	Óâ÷+$n*»•HäÝÊË–@ÿI"	¾=öJswS(*^ŠpCº»ÙdºíÔ–â£ðÍ¢0{¹µ'ä„3¼&]{ÌÁ“.ª¯µFîx_<ËÔšàYÈæ‘(Áº»lzqÝfʁf ^ÊÑševÖ¶Çø?¢õµ¬¦‹0LtÀÜœ7·2YÒ¤¡ÿ觬œPK^þzlÂì\õnÓæÂBa­Ñåë·—•pw÷î/;,Ð7¿Zõ	?
-ß™\º÷„C&†{óÌ)¿‹Ÿ^?¿ï\wÌfæÜ(ù~ÓÔvéú—¿=Y¨9Ì÷»yÝhZV¼þk¿
-Î>–+¾õ](ªM×(=vQ#_G°ƒŒxîHcý!禃I+xtµË’Õ˜òû#çöb/\Ï3¥èFÿ	_$Á!òüâSó–¯Zÿq§:¹zï2!VHU'EËMþËiZ}JÜ™à,‚;¢Ç’t²ÌÍ
-­ÃO¹íá1ÅoBhc쵎y˜·pÖðQ}ùåáw/:ãÚ?çüažû‚é³Cúû‡~Ýy­ãÌ-5Û0\Šð˜:ÕgNÇ­®Kçîóf›«°Ä­Záäk)zØ"õöl¡@˜“’¶4Úß7ÚOÈÔ%š;¶mh
-ŽRõáì//_®?ÞÎw]<ôH€7hœ‘í¨>@Ä{w&=¹ÑÞrOä
-Ï°K7©s²W¯\±>A gDt~÷èÜå®+mK'íãKò…m¥ëä³çìVÀIxƒKI‹_ِò_A9¸ÿÈ‘äýñ&aø°¿ž£vü<5!¡!Õüü@ssòÓZiýØbÝöba]¡ÑiòµŸærèïÿ™»E»m³°åM
-¾GTìØa(ãLh(0ür©•²áW¼ü€@ÖÈÚÈ‹s¥Ð„Ûø†`ï½øJ?Cž³Â¥š+Ž×5}^Ó*´
-Mê=I
-KŒÁÂz…1NY¢JJÚ‹‰^U›Ñ”z\}E¸D›ä¨€Ïqm½%I,
-
-ÏÞ²Y+h°3]±®X(á`X«²Ç€ø~Wú–Üdî¯pý«ƒ"&`¥ì '‘-¦Î¼øM÷4³Á€Ú†?žxTÈü´è.3#/EPÓùåš
-}iYU	·óÂ¥£WúÖ·aA1™ic<y´	e(Ã)&\zû6i4wÍ™³#‘2¥Et|ÄLSËŒà[TT\T„›¸ï/ì;Òvnø~ߺ.ü8;e·!;W-hhM¹F¯+.®,çšNÏ
-ôóÑs–¥ÅŪùõšìmŸtÖ¦ÞäÎ\}þ`–¯Ÿß,Ïók/æµ;¶ÊbÓhò*s›²ø¶ô“y§pwG=»ÿó•Å6öÆ´£äÜ$
-ÅÙo(|È"Çqýòù,9ÊÙSÍŽ§,ÿ2úDâ&‘(³g˜r1u"‹rHˆƒß”u¤ù¬m¢âŸ_À	œð\`3»Õ¸­J¨.Wwì?zêÖÝãw£`ÜZ¾Y·¹dہ֗•ë‰»–Íž½vÉBÞnâDÑ4šö 
-Û·¿â•ßÃqÓ#Wø¬àJ"Ùú£úš»·ìƹâú¹Y¾#f/:ñ ßR.î¥n¨•&Ö‚Cmm-ù¥­h÷¥½½h?€ þ€Ý–
-endstream
-endobj
-2366 0 obj
-4117
-endobj
-2354 0 obj <<
-/D [2352 0 R /XYZ 151.701 685.529 null]
+2358 0 obj <<
+/Type /Encoding
+/Differences [32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]
 >> endobj
+2351 0 obj <<
+/D [2349 0 R /XYZ 151.701 685.529 null]
+>> endobj
 1746 0 obj <<
-/D [2352 0 R /XYZ 151.701 527.28 null]
+/D [2349 0 R /XYZ 151.701 521.042 null]
 >> endobj
-2355 0 obj <<
-/D [2352 0 R /XYZ 151.701 510.41 null]
+2352 0 obj <<
+/D [2349 0 R /XYZ 151.701 504.172 null]
 >> endobj
-2356 0 obj <<
-/D [2352 0 R /XYZ 151.701 308.813 null]
+2353 0 obj <<
+/D [2349 0 R /XYZ 151.701 294.035 null]
 >> endobj
-2357 0 obj <<
-/D [2352 0 R /XYZ 151.701 287.883 null]
+2354 0 obj <<
+/D [2349 0 R /XYZ 151.701 271.256 null]
 >> endobj
-2358 0 obj <<
-/D [2352 0 R /XYZ 151.701 141.569 null]
->> endobj
-2351 0 obj <<
+2348 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
-/XObject << /Im4 2350 0 R >>
+/XObject << /Im4 2347 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2371 0 obj <<
-/Length 1590      
+2365 0 obj <<
+/Length 1625      
 /Filter /FlateDecode
 >>
 stream
-xÚ¥]oÛ6ðÝ¿B at _d ¦EQŸ}Ц]—b+ºÅÁ:dÅ@Kt-T"=INšýúÝñ(Gr”vÀü`’Ç;Þ÷‡ï³xo¯6‹õaè¥,Oîmv–å¡—d9‹óÈ۔ލ¥Š¾2zùió΢g,O’ÑÃœ€^È[®xÿ²9ÔªQº—@¹äþ@œ–¹e&xÊžä"F¤Å›Íâï`àñ‘<1Â+šÅͧÀ+áî0‘gޝÅl<g,‰cØ×ÞÕâ×EàtƺòxÌŸóˆ…aì%QάB(EĬ™w³ŠƒÀ¿Ô]/ëz¹
-#î÷{…€^]äõOhשövf¾jé|ì*ý™°÷¯ß_~\ÿ\iÄ;~ut÷]¯÷¾5óMÝ¡\†©»Œ_Võ
-Åó¸`¹È½¬q”“är[!„}@ˆÈ¿Gæx¦Ñj 9Ò”ˆãYµ_©B;x5æ¹%d+éxW¡=p·µâ:,s SžGÍ-ŒpfAH‡;h5€@âö ÃÀ'õªÝÉBu„(uù¤ŠºRDÒ‘! híªdà=ºªt†j$‚ïé`yK¢ÛQ<(ˆ‡s3¿… ÷'\ž¦ß¾…AP´VŸ`ª
-Êø|¹ŠxâW MΨð<÷«fdb²*!ô{ÙÊåZw¦µF–m	<­?Æ/Y¡5Ü N%än	ÿº;=§ÍÆ&¢6cIcô¬(lì›	íB¯%(ÙÅT…¢[$B¸ÒdM„¡Ì#™3”F¡rùG—V&ÜÈm§ôð1ýîè0cPˆZ‘åcqE–‘Olu…Í(-ñHi‰ŽÀóeITÖñŽÊÖµ8ŸÔ•<b–"Ëy­úbݬĿڲ&¢³b¤PáNµôÏ€Gµ“IÚêé­DÀY’¥S½\Œµ÷”òÒÛÎÔµ±Õ½˜“¬#"–„‰{¥Øc"†±Ïiù–õ¡5Ŭ°†]W‡ÛþþBaHͨ1¼ë¢c³·±–pß·'kÃflm8~¡¡UíðÐÎI0
-cˆÕ’îlˆÃz ¤#ÒÞ1èÌÀÈfì*·ÊbÀK=Žfé2Ú¡ê|³n:Ã%ßkÑSQ’D,ÊÄàï®Ù²ÂèÝœM£lŒ9D>-m‡€Àß“¯5+}."½ù*¡rpŸˆcÛ®ÅcÄh(±ç`K?&ŽÎ°|FqšÃTž…é…iPÂm¥­ë­UºaûPù	 ˆS箢 Á°^ ¶ÖzÖ¶a²8I&ØÉf+×ß²ój ›HNöþ/=4…—¶jغ¯(G!Ú¹y(ÍYšeƒÐ-ªB‡˜5LXœžôщƒmÕ™mÕ?È®sµ$„í8kt9["VyÈ"HäI¡héŸá³öå’jÅJÒŠ(sø½º#„«_^ÑÆRƒL/èø‘~s´¿©þþ MÿwHüoÔ­dR·rá«ë†Âÿ½Ò¥«¬xmYiÚ¿,›JW]­Ù´»Y(À§a1JU«^͉Û[1 ,¡næ8Ì&!¼±kMCW4WÂfêf„X7§'7»§v½Na;Ñ_tÁË·PÝœX{;6
-£¦¢›”¦#Ø ¯d]ýc§ŠX at wßэ›èàwõ€:…@UqØ $N@üú¯Hùh¦°Ùï&fËÏ•Š¢­«™²~ ñ&ŠRÿe&H HƒBjmzÚ·Xo°ç´ÃxBa_}°ÿsºÃ*9ž²ÛQê¥.õ¢É÷€åhçDMmæ¬[ý™ÐÏ'O\ªEm¾ß›²ÙztÑ*iÎ‡FÌC[’´l¸‘Úœ¦îš1 âð™‚>m©<|ª¿A8±<ÊÙ“•L§Yiæc®[âJ¡À¡³5+ð^”M-:ÍÊ!ÒŒñìTN)µDäR7Ó¤‡)Y3ÿÙg"ÓHv[µF7n<ÃàƒÞØà#¬Ò<ªî95N'Æ8r‹Á[ãòîÜ27Td,æOô=ôq7;zr(ôñiÀ¸«úýÇiÒ~CØÏã>ÎÜ7Î|á’|:>ƒßL’>£ê}ÝُDØA軪ž-‘Ãc>øßlÿ`E
+xڝXÝoÛ6÷_! /2PÓ¢¨Ï>hӏ¥X‹¬q±]1Ð]•HO’“fýîx”#¹J[,y¼#w¼/&ð>{÷jñl³X¿C/eypo³óx°,½$ËYœGÞ¦ô>úתè+£—Ÿ6¯-{Æò$‰=ÌY Üñ…L°åŠ‰ð/›C­¥{	’KîÂœÀò ·‡	ž²€§ƒ¸ˆ‘iñb³øgÁx|„'fBxE³øø)ðJX{íLä™wk9OÄKâƵw½ø}8ƒ±®<ŸÏyÄÂ0ö’(gV!‹‚Yƒ˜÷q©»^Öõr%„ðû½ÂAä_ËffþV®­l+-Û;¿»zC\»Ö4A1Ü,3á+é^n®H¦«zu$ðV!¨:œÑ÷q†§ã¨×Dyþëō:ÕÞ ÕÒüØUú3q;1î¿{ùaý[¥‘ïøÕÉÝu½jÜþ¾™oêŽå2Lý›eœø²ªWÏã‚å"÷Vð£œËmíÌ€ ¶wx‚9ži´„Çjdzj?S…<v°kÌs2n
+Æ¥ém…öÀÑÖÂu\æ@³<5·4RÀ™)=Nn‘lˆ Õ@Äí †O&êU»“…êˆQêòAu¥H¤#C at pÙ¯’’÷4ëªÒª‘HvŽeÏ–$?¶£¸W'çf~$îONyL¿'~K§h­>ÁTÄøx¹ŠxâW€&‚˨pŸ<÷«fdb²*1ô{ÙËå}w¦µF–m	gÚûïdAkXAJÈ1I$ü÷Ýi;ElÖ7‘µ#	èÉYl웁v®×•ìbªBÑ*
+!]i²&Ò3Òs†˜0‚Ê9Ä-ZL8ÛNéa;:4ö»£»€ƒ‚׊,ÃYFw‚d«+Fa‰S
+K¼ˆ n¾,IÊ^¼“²ù7Î'ù/˜°)Óž¼V}±nVâOm
+Y“ÐYÒRÈħœÿWÀ£Úa’6Ë{+p–déT/çc”#_:gÛ™º66¢º'sÁ:B°,n—bÆ>§Ï/ôYZS¬Á
+kÐuu¸‰àço¼"t©5ÎöÝì­¯%Ü·‰ÄÉÚ0[¦_(EhU;>´sŒÜ|µ¤5ëâð=PБhïèÌpUî+‹,õ€›`H›#¤ŸIœÉêEô›$‹21\x×lYaônΨQ6æ\·–¶D€çïé²5‘+}
+™^|•:¸O±í+Ä·ŒÑcÏÉV~,qùŒ5‡ö%<óÓC¥¹Òöî­UºaxŸú‰ è¤Î-;*¸Öshƒ$°¶Ö³¶
+ÐÅI2	ÁN6[¹þžWƒØ9Ùûg|!õ…§6mŒûˆ„v®qKs–fÙ ºEµC(sPÄÅéI¿¡}ÛAý »Î•Ö’¶ã°ÑålŽXå!‹ ›DtkLÿ»Ñ8@Ÿµ;—”,V’¾È2[oÕ-1\¿yF+
+˜žÐôýÍɾSýÝA›þûÄcô?·rá_W
+…ÿG¥K—Y‰ðÜ4²Ò4~Z6•®ºJ³i‰4¶=V³P€!NÍr”ªV½šÓº·0À+!oæ8ô&!ìAÝ/.Q_	ƒé-#ÅÞrzºe·Õ®·Ý)'ºà®ƒ.¸ø
+’àa6IîmÛ4´‰®CRš¦`ƒ¾’uõ¯í*bÕ}G+®/ ‰SÜ¥ªUÅf˜°9ø=Ô_‘òQOaƒßuÌö<—)Š¶:¬æ¨¿‰¢Ôÿ_„A!µ6=[Ì7XtÚ¡?‹TXXï/à1­a–·Ùí(ôRzÑäA`O´¢¦‰6s`k£?ûyëé¼Kµ¨ÍóQ6›.Z%­ÕùP‰yhS’–#7ò@ƒSÂ]5Vì>SЧ±5•‡Õ7ð'–gá}:{0“‰àÔ,Mü||ê–N¥	ôPp¡³9+°_”M-:
+ËiÆxvJ§îe¹ØÂÁ4ê¡MÖCÓönAfêÉnªÖèÆõgè|àÂöYjˆ«4ÃU÷˜
+§ƒ1ÎXÅp[ãôî®e®©ÈX̨{xÇÝlïÉ!Ñǧã¶ê÷gÞ·“öaß7ƽÎÜ#g¾„ð&I>Í®àoÎñQú~ßÙg"ŒÀôŠ„É®"•¿ùÄ‹Íâ?F£iý
 endstream
 endobj
-2370 0 obj <<
+2364 0 obj <<
 /Type /Page
-/Contents 2371 0 R
-/Resources 2369 0 R
+/Contents 2365 0 R
+/Resources 2363 0 R
 /MediaBox [0 0 612 792]
-/Parent 2359 0 R
-/Annots [ 2367 0 R 2368 0 R ]
+/Parent 2355 0 R
+/Annots [ 2361 0 R 2362 0 R ]
 >> endobj
-2367 0 obj <<
+2361 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [299.1 440.297 367.849 451.987]
+/Rect [299.1 422.985 367.849 434.674]
 /Subtype /Link
 /A << /S /GoTo /D (acct2conf) >>
 >> endobj
-2368 0 obj <<
+2362 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [388.763 440.297 457.513 451.987]
+/Rect [388.763 422.985 457.513 434.674]
 /Subtype /Link
 /A << /S /GoTo /D (acct3conf) >>
 >> endobj
-2372 0 obj <<
-/D [2370 0 R /XYZ 100.892 685.529 null]
+2366 0 obj <<
+/D [2364 0 R /XYZ 100.892 685.529 null]
 >> endobj
-2373 0 obj <<
-/D [2370 0 R /XYZ 100.892 660.623 null]
+2367 0 obj <<
+/D [2364 0 R /XYZ 100.892 660.623 null]
 >> endobj
-2374 0 obj <<
-/D [2370 0 R /XYZ 100.892 633.993 null]
+2368 0 obj <<
+/D [2364 0 R /XYZ 100.892 647.543 null]
 >> endobj
-2375 0 obj <<
-/D [2370 0 R /XYZ 100.892 464.491 null]
+2369 0 obj <<
+/D [2364 0 R /XYZ 100.892 613.67 null]
 >> endobj
-2376 0 obj <<
-/D [2370 0 R /XYZ 100.892 416.316 null]
+2370 0 obj <<
+/D [2364 0 R /XYZ 100.892 446.426 null]
 >> endobj
-2377 0 obj <<
-/D [2370 0 R /XYZ 100.892 229.023 null]
+2371 0 obj <<
+/D [2364 0 R /XYZ 100.892 399.004 null]
 >> endobj
-2369 0 obj <<
+2372 0 obj <<
+/D [2364 0 R /XYZ 100.892 213.968 null]
+>> endobj
+2363 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2383 0 obj <<
-/Length 1094      
+2378 0 obj <<
+/Length 1059      
 /Filter /FlateDecode
 >>
 stream
-xÚÍW[oÛ6~÷¯º‡ÈÀ$“”¨K€
-h›’‡ƒt at Z´DÇì$Q•¨:öãw(R¶•ÉZäayÑ!y.ß¹;Èyts={·š-®Hâ`ä§(ÅÎjã`Šýa'JRŸ¦¡³Ê7ˆæŸW·ÀJœÄO£(Ôœ¤AQϳ,YQ̽€†î‡OG7‡;®æ$uwó ¹RSÍŸ¢zœ{8Ä‘û~ËjŒØm7цf—«Ù×ÍÈÁGˆ¨NVÎ>#'‡·[ùAš8»ž³tšø¥@ÎröÛ»IÓ‘›18‡N¦~ïv᧹G	u¯DÁ-%›’)
-	ôx8ði˜ŽX½Ãß11ÝWâ鏛søÅ|>Š*—»V_Oj?mòò‰•uÁÛóx)ÕÈÜÛ¼•hUÔl^üÂ*ÞŽ$ßÜ•!—¥PÛ7§ýü"ʵ	ߊÒï¤ÖûžÞIÅÏ
-y³1_µµX*VZ*“•b¢²¨™ù´5Ëì»°‘(»ÖRkû’Ën=dúkÆrÿš ŠCõ7™°†×ò?	ò¬Í™9ì„n”c$%«kž[i9ª—u-o–lÎ èÖ«¬Î³>þgƒÑŒä3¬GÛ1«ªªh":Cê_çoÊË(⚆ÎÂ!7Gþ‚žý Y\az<=47ÌF/ü$ŒPêDœ"ä¾o8ÓŽÄ©I‡& ݆ès<'‰yî/.d	µlèëFvµ½×EAâĽ¿»ùÝÜ<ö¯þÜIì¾5¯­©Gí‘xìU›5¢†ˆJ\¡õÒÀ­›Þü7‘ëòë_ªçnèÛË¡ÔµñçØ
-|üŒÑÕ`prp䘑€}ö
-úU›Ô=Ûï}§¶ rªÒ>ΓÀåÚDäfzcÀºÑ õYvMk6ÔxÊÇ‘i4l¨WÙb´f°­®ˆ_»5rãübBý4MAp,JaþÁ&s±…«
-ŽéÛVš¯°\«±ÖÙqM^<‚`¢ãÔð'žuÐa?ƒ@ˆM¡„8ÕÝYÊrì¯
-1DË‹q—6EúAvªî4‚Üv+;HX‘›ã€¦?°Éù²‘EaËò|*¬h\ùºQ¡Å0¢ÈͶ¥´]Sj'ð8ØS}¾·²‡Tý—„¿8¡Þ–Í}C5æ‡9Û]?¾+Õüeȍ´stè¿ý¸™ŒÏë¼‡‰ýÊ*¯;ÞªIwv“4b˜{V¼.Úšgb#úÂëwéVÊvo™²•_ŠlŒkÂÖ²Ë2Þ¶›®(,X–çƒ?ý¬²AÍ2ÙUÊ.˜^«ñÖÛï£QòõDfÿîM$æ»Ü#±àí+ôEÅÕº~ãèS!†_AÛÉFM×æÉð|¨y¿s­3Ÿ@ÿÒÃõâÑ03¶?‡µ_<ïTîúöpÁ.Ó(AMÒ$…¹‰‚bY¦Úœ×£U4|Ὲ ÈwMI
+xÚÅÛnÛ6ôÝ_!´¦I)Q— Ð6$);h´h‰ŽÙI¢ªKûøŠ”-eŠ×b¦žûU®õ`¹ÖÕìíz¶¼$‘…]'vcl­·¦Ø	]lQìÐØ·Ö©u¼`ñy}¤ÄŠœ8|EI€‹Ðu4«œeÙÂö¨Þrqp}¹åÍ‚Äh¿ð\$Tý)Š‡…} w;V6@ˆQ¥©‰R4»XϾÎ0Hv-<°ˆ:žg%ùìþ³k¥ðvc¹ŽGÖ¾£Ì-FN@)À™µšý>s‡nÒxäfŽ„¾ø±Óù£\x
+ŸÒL6öêÇ¿°)¡èRdÜ@²ÊY3$¥#JûøwWˆÇ?®ÏõåW}|E*÷µBO2>/íâ‘åeÆë³4•”ÍHÝ›4…¨›Š5²zÞŸ/¬àõˆñÕ
+ 4¸ÊE³{uBë‘oäˆûFäx+•àŸôôV6üLƒ×[}6;cLÁr%²h˜(ŒÙLuÉó.L$ò¶6ÐƼ¤²Ýô™þÚ‚²ÔyÆ/Á†â‰
+\gÂ(ÞÈoüY#ç]læú²ª†–ä¬,yj¸å¨B¦“ÕÔÖ¼:*2˜C̍V‘ó.üó^g€󉩃€í™UôEt*8/óM‰þñ"sªsúxÈí Ñ'âkÄæÊòÓáPQÄ02mÏs¢ÐÓL±3b±îmêºè]Å™š{$Œu: ÙÖ@—≤¹CœËJYÃW•lKƒW5AÂÝÝ^Ô˜‡îÕYØ>	ÑýZërT‡A¨“J”PB	J.õPYu꿉TU_÷R<uCa/úJWLÄY`ä9ø	!RÆàèè2ð1ÍkÂÏ
+ÚU©T-Û­…kv½AÚÈÉJû°ˆ<Ä•Ž %j“ÀRV«»l«Zo®ñôÓ ß\KÞ$KÒ†-AysUA ëæ'êÄqÜ3‚gA6¨½Jqï™ÂÖRŸÂP%¬ÐÀF¥éÄØÄ%`ûÆyÒB‹ý>Ö•âãXµg¡!Cq at k —º­LŽÔƒl›²UvÕ;ÙBƲT_{kº›Ê[™e¦.ϦÂêŽK_5*´v©‹’].M—…”š	<öTŸØ
+ï1Uý9dp–ÿ"ý®L¡Óãœíª®ßES}×àVšAÚ7àaÜÔ/+óFö‹¼jyÝLʼ5›¤ýÜ3ìu¨Kžˆ­è
+¯Û¥;)ëƒf–=È
+v~.’±]ÿLɪM^×Û6ËŒ­,M{wºYebš$²-³`ÎyÙŒ—ÞaBnþ/÷z]?êßDb~Ê?:.üèþ÷¾(x30®Û8ê–‰þ'è/"Y5S›Di¢÷%ïv®qæ(XÙئ¶GlêGpÇæø7sŽ—CÂïþß~ƒ7œ
 endstream
 endobj
-2382 0 obj <<
+2377 0 obj <<
 /Type /Page
-/Contents 2383 0 R
-/Resources 2381 0 R
+/Contents 2378 0 R
+/Resources 2376 0 R
 /MediaBox [0 0 612 792]
-/Parent 2359 0 R
-/Annots [ 2380 0 R ]
+/Parent 2355 0 R
+/Annots [ 2375 0 R ]
 >> endobj
-2380 0 obj <<
+2375 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [273.412 382.337 342.248 394.026]
+/Rect [273.412 368.788 342.248 380.477]
 /Subtype /Link
 /A << /S /GoTo /D (initGrps) >>
 >> endobj
-2384 0 obj <<
-/D [2382 0 R /XYZ 151.701 685.529 null]
+2379 0 obj <<
+/D [2377 0 R /XYZ 151.701 685.529 null]
 >> endobj
-2385 0 obj <<
-/D [2382 0 R /XYZ 151.701 419.327 null]
+2380 0 obj <<
+/D [2377 0 R /XYZ 151.701 405.778 null]
 >> endobj
-2381 0 obj <<
+2376 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2389 0 obj <<
-/Length 1163      
+2384 0 obj <<
+/Length 1104      
 /Filter /FlateDecode
 >>
 stream
-xÚµWÝoÛ6÷_¡u/2P1ü%ñ¡Ò­	Z`]W;耴´Ä$B-Q“ä¸ùïw$%E¶åÆ鶃_w÷»ûÝ‘:cïÖÃÞåìõrvvA©#câ-o<‚1Jõ¢D .Bo™y×þB¥m®Ëù—å;+ž E¡§aÆNŽ"†æÁóßÕZªl%hΉß+'€€Œ‘a÷ê,6B³7ËÙß3›Ø##8bÌK‹ÙõìepöÎȉÄÛZÉÂc<Aç0_{‹ÙŸ3ÜÅ8a+ˆÒpßX,â£ÆQ;ÎÖ8Xã±áÍ7iŸ,a=>q±>VOøõ¡/Ò:¯ZPcÌoµCÿwY¹Oy™é9Mümã6Þ/Äe­7U3ÖbþÕû·íœ§4äH„ápjéàb’t`æÂúù§³U^ž­dsgü Ý€0ÄCÑOoœr?/óö²®ô„*…»ª¿ÖJ¶ÊÍfv;бoËžÈ,sr2MÛ&SÕÓ’7yÙÔ÷i³ãJ²ãŠÍ¡™Øšü™Åoºyéæ}ÍÜäð)§¹³_ªv$Qô0ƒoek^½cg¸üÂ\QŽýM™sBµÖµö¡R¯²©ÐðªQµÅã1ámÌöÿx¹QM;a©W:{˜‚œHÚyq±)íÃ'×Góö/2sž¦zS¶}M¨ª=ô{(ÆÿŠ¬‹¼”eš÷-T}Ÿ§Ê0f–ÀCmïOÀä“ÂDŒ¢˜?çI™zJh‚|_XDQwß [»yÓÖ²Õ}ñ|²	xÀhÀÃÖĝ¿t#™bëµL¿n:Šþ¨Ôq“œœjòðšíÛ£$ "d´¢Sx¥EÈpBqì¥<,¯ÃjÐGÝÝx"¨«Ç;{";„réHY>bÌ÷Ÿè1æ4{¶’¢SÓþAoUý‚¬µø)k]j?ÔyÙžR•øT÷>ªj§Ç
-ÑS
--šV'øŠSMç‹31<>ûÍT<2¡0èdÍ–€ó%ï:àûshÍ4$-Œ…¯dj«;·2åéf[Ó·ÝAß
-_ä0Á𾪬qGæ#mÆÕ< Må·ù½±£J·”Nk§q3ûý…²2öù7§íKËOؤB~;_–fÄfi:j£Z?¸­¼t"írÝæ~wƱ¯®5{¦Úô¬’M³Í¦zÓ(BšíNø3&áº÷ qpÛÎ+â¯çæ7:$/Øúb7²0ò+é–8°!$¦'ÉnÐÖ¸®áÓÅ-›"à!~3€ƒ¦:d‰) 'áp`ÒtUj7µÍ^»¥¾1#õŒ½©Ý®K¾†§æQÉîwäÈ:u]Ùá­@£pœÓæ%lÅ&g™;ÛXwaÒÑÂF´Lü7"	F$}šbΨ¿úNÎB$’á¯TUëÛZv^Ù¨¢!*K<…æŸÄÑ.ñÖ3
-…Ûש™»KafÉ¸ÞØÿsÀcÛ@*Îü坪;U9LÌЕéÆênLgÍdÄŒC¢·¾Ñõ>p!Ë`ç*š M™¶¾
+xÚµWKsÛ6¾ëW°é…œ	a<IàÎ8mìIfš¦‘<錓DÂ6'â£$eEÿ¾x4%Q‘œ¶€Åî~‹oË5ôî=è]Ï^/fW{11DÞâÎC.°q˜ Þ"õný¹JÚ¬,‚/‹wVEÔ¨c Ö†N‚Áˆøoój¥rU´R[ÈF 
+FP Š{s¥Ù›ÅìïÒBè¡Q<â%ùìöôR}ö΃€îm¬fîÆAĘ^¯¼ùìÏìî8á+‚ cºï,ñQgŽ¨àoL{c±»Â›oÒ\<	'=>rwGllΑŽ!ê¯>Oê¬jµ!~[š_êÿ.+'ø”i`îo'x¿p×u¹®š±ñoÞ¿ýkçô8¥”Aépjé`b’¢é€Ä]ëçŸ.–Yq±”̓‰CÛ†ˆ FEw<-f~Vdíu]5à„)Ö%$vM­•l•[;:Ìê~ cß—=‘iêôd’´MªªÓšwYÑԏI³
+ß	ÅæÐ,lMþÌæ·2—YáÖ}ÍÚäðTÐÌù/T;ÒÈ{˜!¶¢µ¯^Œ±.Ó\‡üÂ<Qýu‘}sJuYvÞÚm¥^¥SWÿ!À›FՏÅl„·6âÿðz­švâ†E¹,ÓíäDÒ.{ˆ«uaŸ\ÍÛ¿ÈÌe’”ë¢íkBUíaÜC1þWd]e…,’¬¿Ñ\ՏY¢cfû<ÔöðÐ&[
+1ˆböœ–2ÕJ0H_H„»oÐ![nõY6QÈBŒB$(a0Äš—ˆC¬Û  Œ‹CH´"r&á/§_º}*YÓÖ²-ûZ}‚"8d”zÑ”¯×2ùºî2òG¥Ž»dè”Ë®Æõ3È`ÂØ0ûáãzÒGÝS<uóÔ"΄šH°ë3HG^Áó*ŠîƘÓìÙJŠÎLû‡r£êïðcÅç–å‡:+Úsªžëñ£ªVYrÜ>×Ñ|Û´*?#6*Îuyœ0vÌÅÐëög7]º§Q/$zp6" ÏwŒ¼ÛAè_z,uÖh,|%3Ç=¸)O·Ú˜1ñAÉz  êv®ÒÆ™™Àü.ƒP[*·¹ÏU¸­tV;s¢‘÷ÊêØþiNÛ—–Ÿþc’rù5p($B¾,Ì/4[3ÀÓzëDYáTÚå†Ûýad›¼u{¡Ú䢒M³I§Fá(BÏöògˆèª qp›.*ä¯ó7:D],ÐÆbs™ý¥t[Ú+‡(Æ r¾ó¨¬ï²ÖJ‚ˆ6²Ò4ÄšÞT£éžnêÇi8½hº"µÂÒ¦§\¹myg~±¿5nÊuí¤.÷¥î4OFVÞÍ«#ïØÍ€u< FtœÓæ¥Å&g©;[Ûxõ¢£…Œh™øWq}š< Ø_~'g>üçVÕå}-»¨ìµ¢áZã71þ-¢Æ
 endstream
 endobj
-2388 0 obj <<
+2383 0 obj <<
 /Type /Page
-/Contents 2389 0 R
-/Resources 2387 0 R
+/Contents 2384 0 R
+/Resources 2382 0 R
 /MediaBox [0 0 612 792]
-/Parent 2359 0 R
+/Parent 2355 0 R
 >> endobj
-2390 0 obj <<
-/D [2388 0 R /XYZ 100.892 685.529 null]
+2385 0 obj <<
+/D [2383 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1492 0 obj <<
-/D [2388 0 R /XYZ 100.892 660.623 null]
+/D [2383 0 R /XYZ 100.892 660.623 null]
 >> endobj
+2381 0 obj <<
+/D [2383 0 R /XYZ 100.892 643.753 null]
+>> endobj
 2386 0 obj <<
-/D [2388 0 R /XYZ 100.892 643.753 null]
+/D [2383 0 R /XYZ 100.892 186.334 null]
 >> endobj
-2391 0 obj <<
-/D [2388 0 R /XYZ 100.892 199.884 null]
->> endobj
-2387 0 obj <<
+2382 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2395 0 obj <<
-/Length 1824      
+2390 0 obj <<
+/Length 1876      
 /Filter /FlateDecode
 >>
 stream
-xÚ¥Ënä6òÞ_! ‡U#nµHQ/wàYLÉ$ãÁ.0›ƒ,±ÝZëÑCJîAþ}«X¤ZêÈq\$²X¬÷‹¡÷è…Þ¿6ÿ¼ßìßóÌca‡9óî‹Y†ÌK²<ˆsáÝWÞ?ʶ?ߨÜË‚<Ibr¸ÅãœOmÑ4Û]ÿ‡ÿ†,)%m¾—Öçþy…~+õTwÛ,ñß‹Ó ˆÌW„Í‘Ñæî~óuÀrè±™DqE^Ùn¾üzœ}ç…A”gÞÙ`¶^gAÇ°n¼O›7á\M/ÔLA‘Tx‰È£ªP<ÊVv[žùÃv'"á]%-?ÿá?7´Ôc‰8GÚÚÚæʌ։3Ψ¥*ªŠ0—’ˆ4HÂØ!]µFŽó 
-ó	©ªà*5d)wˆ(pœ£ˆFÔ3Š-ÑKVpú#oÇ“8HrîíXÄ"'§FÇ^àûýÿ‰_Žzè[‚
-ývTûF@Npÿßõp´GGIøΒ̊ӏŠ `ÓlÊü¾.MDÜ <õK%‹ANA}+Ð!I“°U­d9ôê°¢È?ôH”…ó‚Ñr‰2@$‡8`$iFÔ»Âú²‹ÃÐÿ¬MôFqbõ‹Sÿ¤äA*%+Ÿ©[’#6ú¦V_Øa@ÑJ¿èA¶¨noÁѝ	hÆåŽœ h'þÌDçÜTýxÒ´&[V´9)àd,ý\÷#¬5®X¼l³È˜ô-ìÕN–RëB™3tuÄü÷u#ñÔ^}q4@ƒü°Å‹–ßíæŽsa6(c,ðι6E¼ö WR”Ïl
-m¬}Gk?84°Î`±ã ©ô±>ý)_óU_¿³¡Ç9'gãbeœÇ~tOOäúz3pEC?Ñu=>ûFa/ÕšþD|.«×|mâ-ÉÀ¡=r}®+d“ä~UA¾*¨n´!y`Qb3<e˜¼Ê·h¤IhñCGÐáhdÂ{à
-â@hnei†—#­(M|@x¯KŠKì¢{ÿ>Îç.gЗ¦R¨Û‡ ¢ê°Zó gÂa’RDºÖk”yˆd*Ù{c½²šL4¡‘âRÓ¢W-ºÏ	o´™³užF8µ
-Gh@À`a%¿ŽfÕ
-šqiÜÔÖž¦èH`H	=c…GSPÁúT¨Œ\5æBFSÄÖúLÊMÖ5Œ#N¼¶C,Og­Eµý˃ڑ3-ôj‹'Ó‚(oÉFµÅ	B÷¤jªó  ²WtR*ÄÄŠÃXœœMÝn/‡rÐCñ°&nœüÒ¯«m2(T¬¸ ú•”Ôê Êô§]#Ÿ©ÃÒÙäzœ\â+!5©PíÐ7Iâ³¾]ÕØf?H˹-^ªï‡o Ã8ôÛ' 
-	½rw¢¿‰ãý¯EY‚3}s¨;ý\êßÖ’rNª<öçÎ’ú‰þx|‹Ÿå¿@¦hŠ®½uÍ¥œ`•¨UnNӁ~?/,)¶}µ¤8>~«Î¿Üôߪ_vç+¯ƒ+\ºänjÜ0 û•Ä¼L–3¥þJj[+;]?˜ìS[¡c;ü˜Ã\ì-
-‘Î’Ÿ5$ØêAå0*¹fÄ3g¦¾
-AÔp¡X졆ܛxà|˜‚­²3
-–7Ñ'Ä¥F_•‘0	âËLk¼jêˆ^ÍÌÐž®¢)PÂÕ2åAš¦‹2½·#lž!Ë—*Ïcêw’že³R.¢Ôš€…ÀvnØ0öš	t“üÒM°@¢ÊUQ@«0½¶°yÕ¡KÌýšx*‹×j_OT$WµO¬×¾¾CUGeûÛÔè ~S€ÃØE3½æH>R'„D¾–zj†æ¯=Ž!g;PÕŸ‹€Hïëw°+Òn1&¹H í
-,vBæz)tÇÚ¤Y‡"vgWÈmaT…É4¥ÿ±„½iF³”ÙyHª¶ ž¼5Mv«#±IzÁ2CB°Ü€ÌWms†°IžCÀb5A`1u{ƃwŸ?~"+7D­qoï§ìâIºKÂ9‡ 1ÝŠ¼-eGe[4tû*ÍÓðfppñŸ¸yÇ%ôñ"0nåè‡B»Çàßk¬Í©¨Úº[¶Öã©ùŸ° gúë¾|’Ãí~ÏrˆÍ$XÀØ-:ËâݽÕÛ^唼Í)üûœ¾¶ú
->|Ï
-‘BÔŒvfxÒWàåuià”„ðuòiäê
-àu½Ÿ´®;÷B<ÍÃAÐ6¼ñèwA˜¬á]UWчTAÆfõ’…‹—si	ð}[·Ÿ+Ï«Uš1pâԍ«ÛØÁ3Í“1&³5u'o»ÿÝýæÿ½­	
+xÚ¥ËrãÆñί@UË"ˆyá¡£×ÚÔúଳÚJª6>@ÀP„…ˆV¥òï鞀 
+E[ö…˜ééé÷kz^èýmóýýfÿž'ƒ4L™wð˜bA2/JÒ@¥Ò»/¼/¾H¶¿Üÿ¨ÜK‚4Š$br¸ÅU„,Χ:«ªíN(éÿýß!‹rM›Ÿt¿å©ÞŠÐoqÕ=•ÍãvÇ$‹üwÇìÔ"ó;ÂæÈhsw¿ùºa at 9ôØL"áåõæË/¡WÀُ^ˆ4ñγö„J‚H)XWÞ§ÍÏ›p®&S5cP$–^$ÓÀêƒ*ôG…'¡ÿC[geCëÁèŽVYž·C³å±ß›`»K”ðsw²iæbâ5þ> ÄÉ´úö­·•¡ý¡í®9ÖY³Cƒ€;&%S4{Ôµ¶úíN
+éMwpùù§ÿº¡¥rÄ9Ò.3ΉWþæ°ŽF/"ï¬(si2Q¨FĬ)ÖÈqˆ0ŠÂ*³FIÌGDX¥(¢õŒbk''8}­)v<RA”r²ˆ¢û§J÷ǶÓ®¬…ü|0}[ìbmp”ÜÿgÙݺñ'œ%™”¦:‚æ Ç-óÛ2·‘{ƒðØÏ;õšp2ºxlk½æ¾¢ìtÞ·Ý 	AŽ  ÎF!-Øt㨤ðl Ï]Ô2v…õe§ÂÐÿllš	9UìŸ:}Ð]§Ÿé[’CY…c§0ì0 he^L¯kÔ7à[°AAtg‚Å/‘Á( Úan"ÏSî?víp2´&k´9uÀÊÚú¹lX\W°xÙ&Â: ÎÜÕFçÚ˜¬³gèlÁü÷e…Ù™º«/#
+P‡À  lñ¢ãß®g^ßYk{Î¥-wà6Lïå³›ÌXóFÛÐ×­†¬õ¢4˜cyú&góUg¿sÁÇ9wU³0ã8ÚâeKžžÈ÷åF%hIÃ<Ñu3<ÿGŒÌ]*
+}ë±8êâUgÛˆ‹ðh‹lŸËùD©_d}FG²Ô7ڐ@°È1
+®²\^FVÚæ4Èø¡!h´Bá=pq • 4·Š²´ÃŠÏ‘–ˆ#P âËœÓAà«ÆøÞ¿Wé¼Æ¥ZèTMý@XV«a¤LŽ˜¤‘.Íež2šŠöÞZo…,‡~(&40’Š!0/Ú®FÿÂ[mælGW#œÆ#ôJ`°0N§¿gÅ
+šqiÜØUÇèH`H=c…GSTÁú”u=¹ìKL„¶Œ­uš˜RLÖµŒ'^ÛA¨€¥ñ¬Ù ¨®ƒyP<bk¦yC©³'Ûƒ(oÉDµÙ	"÷Ô•Té@u/kµ!T‰1•œMín¯û|0}ö°&­Š~i×Uƒ2Iœ¸² \Yÿ·, ¤NP¦=í*ýL-–Î&ÏãÐ0æŒ%¤$õM9ˆvh«ÊæðÙÜ®jì²_ÖIÙµmÿHãPÁhó´! ¡[îNôµa¼ÿY½¹9”yÎÍç9©~O)?¶çÆQú}ñøf„×2û
+2Y•5õí(Ï\È	öG‰:Ýæ4GЛ$ë¶X’¿ëοݴßu¿íÎW*_W¸tÉÝÔ¹a”÷	x-f+)|;m\©lLù`“WÅ®@+7þ؉Ã^êÝ-
+‘Æ‘Ÿ5$Øš¾ò~èVg¤3Œg¶¼JIÔpaŽXë¡„ÜÛxà|š‚m熬nRÐ'å¥D_U‘0
+Ôe¨¥	ˈYÍÌÐNžcA?R6 „«UZ¤AÇ‹*½w3l!K1=©ßõÈy–Ì
+¹±³ €í܌ނ±×,À —¤—^‚¥ âm¯ŠJ…ñµ	€Í«&¥\š`è×ÄcH%_+}ž ±Œ®JŸ\/}mƒª<ënS›ƒòMñ
+SAÎô˜#}øH}^0øF›©Ú¯9¶8„œ]ÿ§¢?‘Þ—î<`W(¤ÝbJr@
+z,¯ØÙØH¡56˜6Ð#íÀÚ—øiÌxv…\gô
+=d6Ï:ó×%<«ÜM;—ÅÌ
+Cº«Ë~ÀÓ¼¤¹nu ¶)/YbIH–Z÷]OÛ”…!Äk”¦¯XK˜M½ÃÝEñàÝ珟4¢Vÿ\8%GÒ]šì	<­éVä­)9
+×ࠝ»WPnŸ†ß0«oˆ·y¿%ôñ"0nô0Ž
+™ß‚®­V§¬¨ËfÙX§êWé@Ïô5mþ¤ûÛýž¥šQ°€±[t–û{«½Ê)z›Søç9}­Í|øŸ7Ú!…¨ììèd®æ¿ËÛÒÂ!·öŸžxôé×ɧb,+€×´nz2¦|lÆ÷ái’†°þßüÑjÞe}Hd¬V(I0µœJsx‚ïë²ÖøVy^-ÒŒ§fÔ;݆Þhvt˜Œ1™­*}»xüÞÝoþ9Ÿ>™
 endstream
 endobj
-2394 0 obj <<
+2389 0 obj <<
 /Type /Page
-/Contents 2395 0 R
-/Resources 2393 0 R
+/Contents 2390 0 R
+/Resources 2388 0 R
 /MediaBox [0 0 612 792]
-/Parent 2359 0 R
-/Annots [ 2392 0 R ]
+/Parent 2355 0 R
+/Annots [ 2387 0 R ]
 >> endobj
-2392 0 obj <<
+2387 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [457.501 299.687 508.322 311.376]
+/Rect [457.501 294.267 508.322 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (acct2net) >>
 >> endobj
-2396 0 obj <<
-/D [2394 0 R /XYZ 151.701 685.529 null]
+2391 0 obj <<
+/D [2389 0 R /XYZ 151.701 685.529 null]
 >> endobj
-2397 0 obj <<
-/D [2394 0 R /XYZ 151.701 620.444 null]
+2392 0 obj <<
+/D [2389 0 R /XYZ 151.701 606.895 null]
 >> endobj
-2398 0 obj <<
-/D [2394 0 R /XYZ 151.701 571.667 null]
+2393 0 obj <<
+/D [2389 0 R /XYZ 151.701 559.473 null]
 >> endobj
-2399 0 obj <<
-/D [2394 0 R /XYZ 151.701 495.792 null]
+2394 0 obj <<
+/D [2389 0 R /XYZ 151.701 484.952 null]
 >> endobj
-2400 0 obj <<
-/D [2394 0 R /XYZ 151.701 322.362 null]
+2395 0 obj <<
+/D [2389 0 R /XYZ 151.701 315.587 null]
 >> endobj
-2401 0 obj <<
-/D [2394 0 R /XYZ 151.701 260.036 null]
+2396 0 obj <<
+/D [2389 0 R /XYZ 151.701 254.616 null]
 >> endobj
-2402 0 obj <<
-/D [2394 0 R /XYZ 151.701 140.803 null]
+2397 0 obj <<
+/D [2389 0 R /XYZ 151.701 139.448 null]
 >> endobj
-2393 0 obj <<
+2388 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2406 0 obj <<
+2401 0 obj <<
 /Length 1366      
 /Filter /FlateDecode
 >>
@@ -9174,50 +8982,50 @@
 o/Ï=}á—ì_ž7¦f
 endstream
 endobj
-2405 0 obj <<
+2400 0 obj <<
 /Type /Page
-/Contents 2406 0 R
-/Resources 2404 0 R
+/Contents 2401 0 R
+/Resources 2399 0 R
 /MediaBox [0 0 612 792]
-/Parent 2359 0 R
-/Annots [ 2403 0 R ]
+/Parent 2355 0 R
+/Annots [ 2398 0 R ]
 >> endobj
-2403 0 obj <<
+2398 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [248.259 515.754 317.979 527.444]
 /Subtype /Link
 /A << /S /GoTo /D (dhcp01) >>
 >> endobj
-2407 0 obj <<
-/D [2405 0 R /XYZ 100.892 685.529 null]
+2402 0 obj <<
+/D [2400 0 R /XYZ 100.892 685.529 null]
 >> endobj
-2408 0 obj <<
-/D [2405 0 R /XYZ 100.892 622.565 null]
+2403 0 obj <<
+/D [2400 0 R /XYZ 100.892 622.565 null]
 >> endobj
-2409 0 obj <<
-/D [2405 0 R /XYZ 100.892 553.436 null]
+2404 0 obj <<
+/D [2400 0 R /XYZ 100.892 553.436 null]
 >> endobj
-2410 0 obj <<
-/D [2405 0 R /XYZ 100.892 516.751 null]
+2405 0 obj <<
+/D [2400 0 R /XYZ 100.892 516.751 null]
 >> endobj
-2411 0 obj <<
-/D [2405 0 R /XYZ 100.892 368.448 null]
+2406 0 obj <<
+/D [2400 0 R /XYZ 100.892 368.448 null]
 >> endobj
 134 0 obj <<
-/D [2405 0 R /XYZ 100.892 244.124 null]
+/D [2400 0 R /XYZ 100.892 244.124 null]
 >> endobj
-2412 0 obj <<
-/D [2405 0 R /XYZ 100.892 217.473 null]
+2407 0 obj <<
+/D [2400 0 R /XYZ 100.892 217.473 null]
 >> endobj
-2413 0 obj <<
-/D [2405 0 R /XYZ 100.892 167.238 null]
+2408 0 obj <<
+/D [2400 0 R /XYZ 100.892 167.238 null]
 >> endobj
-2404 0 obj <<
+2399 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2416 0 obj <<
+2411 0 obj <<
 /Length 988       
 /Filter /FlateDecode
 >>
@@ -9234,21 +9042,21 @@
 Ñ	<¢\ší¦ÁÂ&m•›’\ ,Nº¼ða*ïÂHð)¡zŠ©ïšT‘¾tLZ<W¹7uG¹ø†Ÿ0éðѯ~î$ÎŹn8¤÷Âñ¾ÝZÇÝWt¤?’ÎúV
 endstream
 endobj
-2415 0 obj <<
+2410 0 obj <<
 /Type /Page
-/Contents 2416 0 R
-/Resources 2414 0 R
+/Contents 2411 0 R
+/Resources 2409 0 R
 /MediaBox [0 0 612 792]
-/Parent 2418 0 R
+/Parent 2413 0 R
 >> endobj
-2417 0 obj <<
-/D [2415 0 R /XYZ 151.701 685.529 null]
+2412 0 obj <<
+/D [2410 0 R /XYZ 151.701 685.529 null]
 >> endobj
-2414 0 obj <<
+2409 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2421 0 obj <<
+2416 0 obj <<
 /Length 1190      
 /Filter /FlateDecode
 >>
@@ -9259,27 +9067,27 @@
 Ü®^ ÅÎï×½x¬+ûÈᬰÿu–D;m¾m©WîRʼn@'EsÛ-ú¬Ú­6·ÞÛOÞÆŠ3HL‘«10™çzS·ÍS°#?³{휥}\CßåMGº„Ó¢†â.d¹ïÅ£]€I΀عå¤'–÷à°ÜòÞH~N.Î>¸«ö´Þµ›uù—o÷]Â3Ð]~* ñ£Ú–ªmÃK™ßÅu ¡ ÏUW<ÑsˆñÿEŒÇ¿Up1'ñ¾\Ìüª¹*r]j3€ôânü¿½g@Ö?ó͝µIR ©ìޏAi;oõ¼#•þù¬Â‹
 endstream
 endobj
-2420 0 obj <<
+2415 0 obj <<
 /Type /Page
-/Contents 2421 0 R
-/Resources 2419 0 R
+/Contents 2416 0 R
+/Resources 2414 0 R
 /MediaBox [0 0 612 792]
-/Parent 2418 0 R
+/Parent 2413 0 R
 >> endobj
-2422 0 obj <<
-/D [2420 0 R /XYZ 100.892 685.529 null]
+2417 0 obj <<
+/D [2415 0 R /XYZ 100.892 685.529 null]
 >> endobj
-2423 0 obj <<
-/D [2420 0 R /XYZ 100.892 600.12 null]
+2418 0 obj <<
+/D [2415 0 R /XYZ 100.892 600.12 null]
 >> endobj
-2424 0 obj <<
-/D [2420 0 R /XYZ 100.892 378.68 null]
->> endobj
 2419 0 obj <<
+/D [2415 0 R /XYZ 100.892 378.68 null]
+>> endobj
+2414 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2427 0 obj <<
+2422 0 obj <<
 /Length 1640      
 /Filter /FlateDecode
 >>
@@ -9301,27 +9109,27 @@
 {0z¶s¸OS7fË„/“t^ð¨q]€¤„ÀWïË7É¾WZ:it)²%“û²Ç¼õ#|Ëÿ$Þì
 endstream
 endobj
-2426 0 obj <<
+2421 0 obj <<
 /Type /Page
-/Contents 2427 0 R
-/Resources 2425 0 R
+/Contents 2422 0 R
+/Resources 2420 0 R
 /MediaBox [0 0 612 792]
-/Parent 2418 0 R
+/Parent 2413 0 R
 >> endobj
-2428 0 obj <<
-/D [2426 0 R /XYZ 151.701 685.529 null]
+2423 0 obj <<
+/D [2421 0 R /XYZ 151.701 685.529 null]
 >> endobj
-2429 0 obj <<
-/D [2426 0 R /XYZ 151.701 518.825 null]
+2424 0 obj <<
+/D [2421 0 R /XYZ 151.701 518.825 null]
 >> endobj
-2430 0 obj <<
-/D [2426 0 R /XYZ 151.701 254.313 null]
->> endobj
 2425 0 obj <<
+/D [2421 0 R /XYZ 151.701 254.313 null]
+>> endobj
+2420 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2436 0 obj <<
+2431 0 obj <<
 /Length 2157      
 /Filter /FlateDecode
 >>
@@ -9348,74 +9156,74 @@
 E—·naÞçÿéë߆ƒÜŸP>¥¥`jÛ‘^Õ^ŒÐ,#oBDûÂhuoôöÁkÌ‚ÝøS¢ÿžÝü¨_èB
 endstream
 endobj
-2435 0 obj <<
+2430 0 obj <<
 /Type /Page
-/Contents 2436 0 R
-/Resources 2434 0 R
+/Contents 2431 0 R
+/Resources 2429 0 R
 /MediaBox [0 0 612 792]
-/Parent 2418 0 R
-/Annots [ 2431 0 R 2432 0 R 2440 0 R 2433 0 R ]
+/Parent 2413 0 R
+/Annots [ 2426 0 R 2427 0 R 2435 0 R 2428 0 R ]
 >> endobj
-2431 0 obj <<
+2426 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.11 503.527 433.955 515.216]
 /Subtype /Link
 /A << /S /GoTo /D (acct2net) >>
 >> endobj
-2432 0 obj <<
+2427 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.459 397.538 460.543 410.44]
 /Subtype /Link
 /A << /S /GoTo /D (appendix) >>
 >> endobj
-2440 0 obj <<
+2435 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [127.168 384.595 326.669 396.285]
 /Subtype /Link
 /A << /S /GoTo /D (appendix) >>
 >> endobj
-2433 0 obj <<
+2428 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [332.997 384.595 393.888 396.285]
 /Subtype /Link
 /A << /S /GoTo /D (domjoin) >>
 >> endobj
-2437 0 obj <<
-/D [2435 0 R /XYZ 100.892 685.529 null]
+2432 0 obj <<
+/D [2430 0 R /XYZ 100.892 685.529 null]
 >> endobj
-2438 0 obj <<
-/D [2435 0 R /XYZ 100.892 528.611 null]
+2433 0 obj <<
+/D [2430 0 R /XYZ 100.892 528.611 null]
 >> endobj
-2439 0 obj <<
-/D [2435 0 R /XYZ 100.892 465.997 null]
+2434 0 obj <<
+/D [2430 0 R /XYZ 100.892 465.997 null]
 >> endobj
-2441 0 obj <<
-/D [2435 0 R /XYZ 100.892 372.042 null]
+2436 0 obj <<
+/D [2430 0 R /XYZ 100.892 372.042 null]
 >> endobj
-2442 0 obj <<
-/D [2435 0 R /XYZ 100.892 309.428 null]
+2437 0 obj <<
+/D [2430 0 R /XYZ 100.892 309.428 null]
 >> endobj
-2443 0 obj <<
-/D [2435 0 R /XYZ 100.892 269.671 null]
+2438 0 obj <<
+/D [2430 0 R /XYZ 100.892 269.671 null]
 >> endobj
-2444 0 obj <<
-/D [2435 0 R /XYZ 100.892 245.583 null]
+2439 0 obj <<
+/D [2430 0 R /XYZ 100.892 245.583 null]
 >> endobj
-2445 0 obj <<
-/D [2435 0 R /XYZ 100.892 207.946 null]
+2440 0 obj <<
+/D [2430 0 R /XYZ 100.892 207.946 null]
 >> endobj
-2446 0 obj <<
-/D [2435 0 R /XYZ 100.892 170.31 null]
+2441 0 obj <<
+/D [2430 0 R /XYZ 100.892 170.31 null]
 >> endobj
-2434 0 obj <<
+2429 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R /F17 1131 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2450 0 obj <<
+2445 0 obj <<
 /Length 2106      
 /Filter /FlateDecode
 >>
@@ -9437,42 +9245,42 @@
 O¡›7«È®]=Pfï¬ñG–.yñfÆÞD¦ÂOá¿úáþ©ñ%ˆFŒ2ÀÞîQñäÛºìŒ5»ž‡3·!ã‚!ŽÁ­y·Ø¿¨íü÷ð˶gÌÆŸq¨ 9Ã&§ƒ¸"Ÿ$}æP˜·x…¿èèË"®c¢ßj»ØŽ·þÖ7kgçÿ‹sdNP&„2À›gðGô€É=À; ˜ I:ÝU\ÌOKØàȧö8çEÌà¨Îò…êL¨½dÝ,'kÕ¥fÔ@îÙÕzA)pæv&þÜ×Nh^~€1ôùN¹îúãyœQz™Ù[ú%zÌÖ ÁÕ+yø¾ÞÜý‡Ù–-
 endstream
 endobj
-2449 0 obj <<
+2444 0 obj <<
 /Type /Page
-/Contents 2450 0 R
-/Resources 2448 0 R
+/Contents 2445 0 R
+/Resources 2443 0 R
 /MediaBox [0 0 612 792]
-/Parent 2418 0 R
+/Parent 2413 0 R
 >> endobj
-2451 0 obj <<
-/D [2449 0 R /XYZ 151.701 685.529 null]
+2446 0 obj <<
+/D [2444 0 R /XYZ 151.701 685.529 null]
 >> endobj
-2452 0 obj <<
-/D [2449 0 R /XYZ 151.701 660.623 null]
+2447 0 obj <<
+/D [2444 0 R /XYZ 151.701 660.623 null]
 >> endobj
-2453 0 obj <<
-/D [2449 0 R /XYZ 151.701 619.838 null]
+2448 0 obj <<
+/D [2444 0 R /XYZ 151.701 619.838 null]
 >> endobj
-2454 0 obj <<
-/D [2449 0 R /XYZ 151.701 572.27 null]
+2449 0 obj <<
+/D [2444 0 R /XYZ 151.701 572.27 null]
 >> endobj
 138 0 obj <<
-/D [2449 0 R /XYZ 151.701 522.955 null]
+/D [2444 0 R /XYZ 151.701 522.955 null]
 >> endobj
-2455 0 obj <<
-/D [2449 0 R /XYZ 151.701 496.039 null]
+2450 0 obj <<
+/D [2444 0 R /XYZ 151.701 496.039 null]
 >> endobj
 142 0 obj <<
-/D [2449 0 R /XYZ 151.701 317.458 null]
+/D [2444 0 R /XYZ 151.701 317.458 null]
 >> endobj
-2456 0 obj <<
-/D [2449 0 R /XYZ 151.701 290.542 null]
+2451 0 obj <<
+/D [2444 0 R /XYZ 151.701 290.542 null]
 >> endobj
-2448 0 obj <<
+2443 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F54 1912 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2459 0 obj <<
+2454 0 obj <<
 /Length 1910      
 /Filter /FlateDecode
 >>
@@ -9501,30 +9309,30 @@
 oØ2d®?佋œÕ˜k3Œ5‡Ä>8½M(þ¢¸]Iè§Ãpx¶ÐªÔÓ“ŽÇ¶¦%ý4€ÏÓeaÐYïCåœ3Úsláe£9FH)`qkcçÁAj˶h˜Cb…=©‹ƒñ9ÇÆ6@ ã'…Þ‹àæm¡öX‰¶Ÿ¼7Ý÷ýzñ7æñ.
 endstream
 endobj
-2458 0 obj <<
+2453 0 obj <<
 /Type /Page
-/Contents 2459 0 R
-/Resources 2457 0 R
+/Contents 2454 0 R
+/Resources 2452 0 R
 /MediaBox [0 0 612 792]
-/Parent 2418 0 R
+/Parent 2413 0 R
 >> endobj
-2460 0 obj <<
-/D [2458 0 R /XYZ 100.892 685.529 null]
+2455 0 obj <<
+/D [2453 0 R /XYZ 100.892 685.529 null]
 >> endobj
 146 0 obj <<
-/D [2458 0 R /XYZ 100.892 504.736 null]
+/D [2453 0 R /XYZ 100.892 504.736 null]
 >> endobj
-2461 0 obj <<
-/D [2458 0 R /XYZ 100.892 475.696 null]
+2456 0 obj <<
+/D [2453 0 R /XYZ 100.892 475.696 null]
 >> endobj
-2462 0 obj <<
-/D [2458 0 R /XYZ 100.892 398.627 null]
->> endobj
 2457 0 obj <<
+/D [2453 0 R /XYZ 100.892 398.627 null]
+>> endobj
+2452 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F54 1912 0 R /F15 1133 0 R /F17 1131 0 R /F51 1134 0 R /F60 1917 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2465 0 obj <<
+2460 0 obj <<
 /Length 2198      
 /Filter /FlateDecode
 >>
@@ -9556,21 +9364,21 @@
 hÔßãiãk¼GÕíâßR ÏKñ‹’û¸¨ n¨—•m¬BÊOa,óWiÿwðÔÄówÇ€7»9@ÔBË1úßÍ-æ(&¯2X;«ëŒR—‹<õg¥3õfN;t÷™ÏçÔ ÀD£'ÿJÆåÃøÃêæOPsí
 endstream
 endobj
-2464 0 obj <<
+2459 0 obj <<
 /Type /Page
-/Contents 2465 0 R
-/Resources 2463 0 R
+/Contents 2460 0 R
+/Resources 2458 0 R
 /MediaBox [0 0 612 792]
-/Parent 2467 0 R
+/Parent 2462 0 R
 >> endobj
-2466 0 obj <<
-/D [2464 0 R /XYZ 151.701 685.529 null]
+2461 0 obj <<
+/D [2459 0 R /XYZ 151.701 685.529 null]
 >> endobj
-2463 0 obj <<
+2458 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R /F60 1917 0 R /F59 1905 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2470 0 obj <<
+2465 0 obj <<
 /Length 2230      
 /Filter /FlateDecode
 >>
@@ -9598,33 +9406,33 @@
 &üÿp÷_êžêy
 endstream
 endobj
-2469 0 obj <<
+2464 0 obj <<
 /Type /Page
-/Contents 2470 0 R
-/Resources 2468 0 R
+/Contents 2465 0 R
+/Resources 2463 0 R
 /MediaBox [0 0 612 792]
-/Parent 2467 0 R
+/Parent 2462 0 R
 >> endobj
-2471 0 obj <<
-/D [2469 0 R /XYZ 100.892 685.529 null]
+2466 0 obj <<
+/D [2464 0 R /XYZ 100.892 685.529 null]
 >> endobj
-2472 0 obj <<
-/D [2469 0 R /XYZ 100.892 620.444 null]
+2467 0 obj <<
+/D [2464 0 R /XYZ 100.892 620.444 null]
 >> endobj
-2473 0 obj <<
-/D [2469 0 R /XYZ 100.892 588.406 null]
+2468 0 obj <<
+/D [2464 0 R /XYZ 100.892 588.406 null]
 >> endobj
-2474 0 obj <<
-/D [2469 0 R /XYZ 100.892 565.372 null]
+2469 0 obj <<
+/D [2464 0 R /XYZ 100.892 565.372 null]
 >> endobj
-2475 0 obj <<
-/D [2469 0 R /XYZ 100.892 545.064 null]
+2470 0 obj <<
+/D [2464 0 R /XYZ 100.892 545.064 null]
 >> endobj
-2468 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F51 1134 0 R /F60 1917 0 R /F59 1905 0 R /F90 2476 0 R /F17 1131 0 R >>
+2463 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F51 1134 0 R /F60 1917 0 R /F59 1905 0 R /F90 2471 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2479 0 obj <<
+2474 0 obj <<
 /Length 978       
 /Filter /FlateDecode
 >>
@@ -9639,21 +9447,21 @@
 ¢û[OªëÖ‘ì`›#­BÂ2äH† <C‚ò¿f/¥ï=|*ÒÊr =ߺ«r…ïÔüÁ¾<áÀ¿k¾,…
 endstream
 endobj
-2478 0 obj <<
+2473 0 obj <<
 /Type /Page
-/Contents 2479 0 R
-/Resources 2477 0 R
+/Contents 2474 0 R
+/Resources 2472 0 R
 /MediaBox [0 0 612 792]
-/Parent 2467 0 R
+/Parent 2462 0 R
 >> endobj
-2480 0 obj <<
-/D [2478 0 R /XYZ 151.701 685.529 null]
+2475 0 obj <<
+/D [2473 0 R /XYZ 151.701 685.529 null]
 >> endobj
-2477 0 obj <<
+2472 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F51 1134 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2483 0 obj <<
+2478 0 obj <<
 /Length 900       
 /Filter /FlateDecode
 >>
@@ -9665,27 +9473,27 @@
 ðçEi|¥½ølç=/p™J¸Í/Ûì<_eëy`ç ÓjyÇB{Ð †R>ÙCD!ØòÉåRte”R42h‹ÊTB1õYD ün¨îWP‰›#4Š1;¿_l´É‡^Ûîö(Õ®ƒÆŒAMÛL1`3™n×9ו(T Ä˜ó‰è§ÒâÏ'ÿÆù$ƒo÷Wð=8)Ù¦…nþ»¸:7]¾]]Þs¤ÖïììÌî¾úeqi­~i"ÃÙ‰àß3»QI¡ýF¶ÖÈÊBªÖ­¶Úž_ܦu‘[ûgåD2DcÉù´+yk­MQ–ÖêWدªÈD3¦ÔUÕõ_ú±)ÚÕ6Œ5~ûéÕ՝y‡iXìð`µÞ+¥–y—Ƀ˜¥ü(5½tÌž½¶FZk‘$ïHÚÖb¹,2çáêíÖûÝãð0=ÇíoïFbv¿éR5N勺àv¦æ^xo/0¥`ü»ýOCDóÎ@íS¯…ºvåç·FÇE¤Z·ë#cv¸„)ùG%[ÖÁ	rSzÞõ®u×Þûa!ÊRo\ËÕ{¥7*pꝄ¯ô(¸Õºüƒõ	ÀEoDíZ%fêí8 K LH”Ä"	i"§Û²,ndˆ<¯es\Òd/þ²¯žI>{ô£Gч	'Yš0”Hø úÓ#¹ƒÿîÚ+zJèøÿ:>:þÚBŸrŸT:~œÒé¡R>TÍ£t‚H’%yšH”dðÑ2ÿz:韔ýqB%;{§2¤Ú~sM~ÃbÜÈC>áÆóßO
 endstream
 endobj
-2482 0 obj <<
+2477 0 obj <<
 /Type /Page
-/Contents 2483 0 R
-/Resources 2481 0 R
+/Contents 2478 0 R
+/Resources 2476 0 R
 /MediaBox [0 0 612 792]
-/Parent 2467 0 R
+/Parent 2462 0 R
 >> endobj
-2484 0 obj <<
-/D [2482 0 R /XYZ 100.892 685.529 null]
+2479 0 obj <<
+/D [2477 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1493 0 obj <<
-/D [2482 0 R /XYZ 100.892 660.623 null]
+/D [2477 0 R /XYZ 100.892 660.623 null]
 >> endobj
-2339 0 obj <<
-/D [2482 0 R /XYZ 100.892 628.991 null]
+2336 0 obj <<
+/D [2477 0 R /XYZ 100.892 628.991 null]
 >> endobj
-2481 0 obj <<
+2476 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2487 0 obj <<
+2482 0 obj <<
 /Length 3146      
 /Filter /FlateDecode
 >>
@@ -9722,96 +9530,96 @@
 âѯnÖùˆ‘ù
 endstream
 endobj
-2486 0 obj <<
+2481 0 obj <<
 /Type /Page
-/Contents 2487 0 R
-/Resources 2485 0 R
+/Contents 2482 0 R
+/Resources 2480 0 R
 /MediaBox [0 0 612 792]
-/Parent 2467 0 R
+/Parent 2462 0 R
 >> endobj
-2488 0 obj <<
-/D [2486 0 R /XYZ 151.701 685.529 null]
+2483 0 obj <<
+/D [2481 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1494 0 obj <<
-/D [2486 0 R /XYZ 151.701 568.748 null]
+/D [2481 0 R /XYZ 151.701 568.748 null]
 >> endobj
-2378 0 obj <<
-/D [2486 0 R /XYZ 151.701 539.844 null]
+2373 0 obj <<
+/D [2481 0 R /XYZ 151.701 539.844 null]
 >> endobj
-2489 0 obj <<
-/D [2486 0 R /XYZ 151.701 533.867 null]
+2484 0 obj <<
+/D [2481 0 R /XYZ 151.701 533.867 null]
 >> endobj
+2485 0 obj <<
+/D [2481 0 R /XYZ 151.701 540.143 null]
+>> endobj
+2486 0 obj <<
+/D [2481 0 R /XYZ 151.701 528.188 null]
+>> endobj
+2487 0 obj <<
+/D [2481 0 R /XYZ 151.701 516.233 null]
+>> endobj
+2488 0 obj <<
+/D [2481 0 R /XYZ 151.701 504.278 null]
+>> endobj
 2490 0 obj <<
-/D [2486 0 R /XYZ 151.701 540.143 null]
+/D [2481 0 R /XYZ 151.701 480.367 null]
 >> endobj
 2491 0 obj <<
-/D [2486 0 R /XYZ 151.701 528.188 null]
+/D [2481 0 R /XYZ 151.701 468.412 null]
 >> endobj
 2492 0 obj <<
-/D [2486 0 R /XYZ 151.701 516.233 null]
+/D [2481 0 R /XYZ 151.701 456.457 null]
 >> endobj
 2493 0 obj <<
-/D [2486 0 R /XYZ 151.701 504.278 null]
+/D [2481 0 R /XYZ 151.701 444.502 null]
 >> endobj
+2494 0 obj <<
+/D [2481 0 R /XYZ 151.701 432.547 null]
+>> endobj
 2495 0 obj <<
-/D [2486 0 R /XYZ 151.701 480.367 null]
+/D [2481 0 R /XYZ 151.701 420.591 null]
 >> endobj
 2496 0 obj <<
-/D [2486 0 R /XYZ 151.701 468.412 null]
+/D [2481 0 R /XYZ 151.701 396.681 null]
 >> endobj
 2497 0 obj <<
-/D [2486 0 R /XYZ 151.701 456.457 null]
+/D [2481 0 R /XYZ 151.701 384.726 null]
 >> endobj
 2498 0 obj <<
-/D [2486 0 R /XYZ 151.701 444.502 null]
+/D [2481 0 R /XYZ 151.701 372.771 null]
 >> endobj
 2499 0 obj <<
-/D [2486 0 R /XYZ 151.701 432.547 null]
+/D [2481 0 R /XYZ 151.701 360.816 null]
 >> endobj
 2500 0 obj <<
-/D [2486 0 R /XYZ 151.701 420.591 null]
+/D [2481 0 R /XYZ 151.701 336.905 null]
 >> endobj
 2501 0 obj <<
-/D [2486 0 R /XYZ 151.701 396.681 null]
+/D [2481 0 R /XYZ 151.701 312.995 null]
 >> endobj
 2502 0 obj <<
-/D [2486 0 R /XYZ 151.701 384.726 null]
+/D [2481 0 R /XYZ 151.701 301.04 null]
 >> endobj
 2503 0 obj <<
-/D [2486 0 R /XYZ 151.701 372.771 null]
+/D [2481 0 R /XYZ 151.701 289.085 null]
 >> endobj
 2504 0 obj <<
-/D [2486 0 R /XYZ 151.701 360.816 null]
+/D [2481 0 R /XYZ 151.701 277.129 null]
 >> endobj
 2505 0 obj <<
-/D [2486 0 R /XYZ 151.701 336.905 null]
+/D [2481 0 R /XYZ 151.701 265.174 null]
 >> endobj
 2506 0 obj <<
-/D [2486 0 R /XYZ 151.701 312.995 null]
+/D [2481 0 R /XYZ 151.701 253.219 null]
 >> endobj
 2507 0 obj <<
-/D [2486 0 R /XYZ 151.701 301.04 null]
+/D [2481 0 R /XYZ 151.701 241.264 null]
 >> endobj
-2508 0 obj <<
-/D [2486 0 R /XYZ 151.701 289.085 null]
->> endobj
-2509 0 obj <<
-/D [2486 0 R /XYZ 151.701 277.129 null]
->> endobj
-2510 0 obj <<
-/D [2486 0 R /XYZ 151.701 265.174 null]
->> endobj
-2511 0 obj <<
-/D [2486 0 R /XYZ 151.701 253.219 null]
->> endobj
-2512 0 obj <<
-/D [2486 0 R /XYZ 151.701 241.264 null]
->> endobj
-2485 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R /F11 2494 0 R >>
+2480 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R /F11 2489 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2515 0 obj <<
+2510 0 obj <<
 /Length 2363      
 /Filter /FlateDecode
 >>
@@ -9838,111 +9646,111 @@
 %Õåé%eíU“µ±õL­ù>¿d×h!e™>^ª‡ÝVÍnGŠÇ.߯†·៮u¦ê2®*}ûªKK!m™Ô:^ªÏVgGŠ‡'߯©៮u¦êÒFxc¿fÙE?9¤•Òë"¿ˆ¤Œ¹ÌÑŒ_DBɨڟ&ò§)_‰2E~©ûgEs‡Ž=îŽì}­tòG¬vöI¼¬F
 endstream
 endobj
-2514 0 obj <<
+2509 0 obj <<
 /Type /Page
-/Contents 2515 0 R
-/Resources 2513 0 R
+/Contents 2510 0 R
+/Resources 2508 0 R
 /MediaBox [0 0 612 792]
-/Parent 2467 0 R
+/Parent 2462 0 R
 >> endobj
-2516 0 obj <<
-/D [2514 0 R /XYZ 100.892 685.529 null]
+2511 0 obj <<
+/D [2509 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1495 0 obj <<
-/D [2514 0 R /XYZ 100.892 574.423 null]
+/D [2509 0 R /XYZ 100.892 574.423 null]
 >> endobj
-2379 0 obj <<
-/D [2514 0 R /XYZ 100.892 546.125 null]
+2374 0 obj <<
+/D [2509 0 R /XYZ 100.892 546.125 null]
 >> endobj
+2512 0 obj <<
+/D [2509 0 R /XYZ 100.892 540.147 null]
+>> endobj
+2513 0 obj <<
+/D [2509 0 R /XYZ 100.892 546.424 null]
+>> endobj
+2514 0 obj <<
+/D [2509 0 R /XYZ 100.892 534.468 null]
+>> endobj
+2515 0 obj <<
+/D [2509 0 R /XYZ 100.892 522.513 null]
+>> endobj
+2516 0 obj <<
+/D [2509 0 R /XYZ 100.892 510.558 null]
+>> endobj
 2517 0 obj <<
-/D [2514 0 R /XYZ 100.892 540.147 null]
+/D [2509 0 R /XYZ 100.892 498.603 null]
 >> endobj
 2518 0 obj <<
-/D [2514 0 R /XYZ 100.892 546.424 null]
+/D [2509 0 R /XYZ 100.892 486.648 null]
 >> endobj
 2519 0 obj <<
-/D [2514 0 R /XYZ 100.892 534.468 null]
+/D [2509 0 R /XYZ 100.892 474.693 null]
 >> endobj
 2520 0 obj <<
-/D [2514 0 R /XYZ 100.892 522.513 null]
+/D [2509 0 R /XYZ 100.892 462.737 null]
 >> endobj
 2521 0 obj <<
-/D [2514 0 R /XYZ 100.892 510.558 null]
+/D [2509 0 R /XYZ 100.892 450.782 null]
 >> endobj
 2522 0 obj <<
-/D [2514 0 R /XYZ 100.892 498.603 null]
+/D [2509 0 R /XYZ 100.892 438.827 null]
 >> endobj
 2523 0 obj <<
-/D [2514 0 R /XYZ 100.892 486.648 null]
+/D [2509 0 R /XYZ 100.892 426.872 null]
 >> endobj
 2524 0 obj <<
-/D [2514 0 R /XYZ 100.892 474.693 null]
+/D [2509 0 R /XYZ 100.892 414.917 null]
 >> endobj
 2525 0 obj <<
-/D [2514 0 R /XYZ 100.892 462.737 null]
+/D [2509 0 R /XYZ 100.892 402.962 null]
 >> endobj
 2526 0 obj <<
-/D [2514 0 R /XYZ 100.892 450.782 null]
+/D [2509 0 R /XYZ 100.892 391.006 null]
 >> endobj
 2527 0 obj <<
-/D [2514 0 R /XYZ 100.892 438.827 null]
+/D [2509 0 R /XYZ 100.892 379.051 null]
 >> endobj
 2528 0 obj <<
-/D [2514 0 R /XYZ 100.892 426.872 null]
+/D [2509 0 R /XYZ 100.892 367.096 null]
 >> endobj
 2529 0 obj <<
-/D [2514 0 R /XYZ 100.892 414.917 null]
+/D [2509 0 R /XYZ 100.892 355.141 null]
 >> endobj
 2530 0 obj <<
-/D [2514 0 R /XYZ 100.892 402.962 null]
+/D [2509 0 R /XYZ 100.892 343.186 null]
 >> endobj
 2531 0 obj <<
-/D [2514 0 R /XYZ 100.892 391.006 null]
+/D [2509 0 R /XYZ 100.892 331.231 null]
 >> endobj
 2532 0 obj <<
-/D [2514 0 R /XYZ 100.892 379.051 null]
+/D [2509 0 R /XYZ 100.892 319.275 null]
 >> endobj
 2533 0 obj <<
-/D [2514 0 R /XYZ 100.892 367.096 null]
+/D [2509 0 R /XYZ 100.892 307.32 null]
 >> endobj
 2534 0 obj <<
-/D [2514 0 R /XYZ 100.892 355.141 null]
+/D [2509 0 R /XYZ 100.892 295.365 null]
 >> endobj
 2535 0 obj <<
-/D [2514 0 R /XYZ 100.892 343.186 null]
+/D [2509 0 R /XYZ 100.892 283.41 null]
 >> endobj
 2536 0 obj <<
-/D [2514 0 R /XYZ 100.892 331.231 null]
+/D [2509 0 R /XYZ 100.892 271.455 null]
 >> endobj
 2537 0 obj <<
-/D [2514 0 R /XYZ 100.892 319.275 null]
+/D [2509 0 R /XYZ 100.892 259.5 null]
 >> endobj
 2538 0 obj <<
-/D [2514 0 R /XYZ 100.892 307.32 null]
+/D [2509 0 R /XYZ 100.892 247.544 null]
 >> endobj
 2539 0 obj <<
-/D [2514 0 R /XYZ 100.892 295.365 null]
+/D [2509 0 R /XYZ 100.892 235.589 null]
 >> endobj
-2540 0 obj <<
-/D [2514 0 R /XYZ 100.892 283.41 null]
->> endobj
-2541 0 obj <<
-/D [2514 0 R /XYZ 100.892 271.455 null]
->> endobj
-2542 0 obj <<
-/D [2514 0 R /XYZ 100.892 259.5 null]
->> endobj
-2543 0 obj <<
-/D [2514 0 R /XYZ 100.892 247.544 null]
->> endobj
-2544 0 obj <<
-/D [2514 0 R /XYZ 100.892 235.589 null]
->> endobj
-2513 0 obj <<
+2508 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2547 0 obj <<
+2542 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -9950,20 +9758,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-2546 0 obj <<
+2541 0 obj <<
 /Type /Page
-/Contents 2547 0 R
-/Resources 2545 0 R
+/Contents 2542 0 R
+/Resources 2540 0 R
 /MediaBox [0 0 612 792]
-/Parent 2549 0 R
+/Parent 2544 0 R
 >> endobj
-2548 0 obj <<
-/D [2546 0 R /XYZ 151.701 685.529 null]
+2543 0 obj <<
+/D [2541 0 R /XYZ 151.701 685.529 null]
 >> endobj
-2545 0 obj <<
+2540 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-2554 0 obj <<
+2549 0 obj <<
 /Length 1686      
 /Filter /FlateDecode
 >>
@@ -9983,55 +9791,55 @@
 ¾Õ¬£¥zÇ@8F&æV¿w°zxr'Ørž†³ÿ×A¶ìõa”xÂÏal„^Ú±‡gwà/þ_I!
 endstream
 endobj
-2553 0 obj <<
+2548 0 obj <<
 /Type /Page
-/Contents 2554 0 R
-/Resources 2552 0 R
+/Contents 2549 0 R
+/Resources 2547 0 R
 /MediaBox [0 0 612 792]
-/Parent 2549 0 R
-/Annots [ 2550 0 R 2557 0 R 2551 0 R ]
+/Parent 2544 0 R
+/Annots [ 2545 0 R 2552 0 R 2546 0 R ]
 >> endobj
-2550 0 obj <<
+2545 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [315.499 433.281 460.543 444.97]
 /Subtype /Link
 /A << /S /GoTo /D (simple) >>
 >> endobj
-2557 0 obj <<
+2552 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 419.732 141.403 431.421]
 /Subtype /Link
 /A << /S /GoTo /D (simple) >>
 >> endobj
-2551 0 obj <<
+2546 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [207.902 419.732 394.205 431.421]
 /Subtype /Link
 /A << /S /GoTo /D (small) >>
 >> endobj
-2555 0 obj <<
-/D [2553 0 R /XYZ 100.892 685.529 null]
+2550 0 obj <<
+/D [2548 0 R /XYZ 100.892 685.529 null]
 >> endobj
 150 0 obj <<
-/D [2553 0 R /XYZ 100.892 660.623 null]
+/D [2548 0 R /XYZ 100.892 660.623 null]
 >> endobj
-2556 0 obj <<
-/D [2553 0 R /XYZ 100.892 472.605 null]
+2551 0 obj <<
+/D [2548 0 R /XYZ 100.892 472.605 null]
 >> endobj
 154 0 obj <<
-/D [2553 0 R /XYZ 100.892 267.737 null]
+/D [2548 0 R /XYZ 100.892 267.737 null]
 >> endobj
-2558 0 obj <<
-/D [2553 0 R /XYZ 100.892 238.747 null]
+2553 0 obj <<
+/D [2548 0 R /XYZ 100.892 238.747 null]
 >> endobj
-2552 0 obj <<
+2547 0 obj <<
 /Font << /F77 1973 0 R /F17 1131 0 R /F15 1133 0 R /F28 1124 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2561 0 obj <<
+2556 0 obj <<
 /Length 2390      
 /Filter /FlateDecode
 >>
@@ -10062,27 +9870,27 @@
 ÖØ0ìíYô¿%EøÏNùÿ0ÉJVk’Ǩ"V@LrmAôš•]@]»0Lgî=pœ.¤6‚æ~iæŽîXYÇŽIíýõ/{z¼û?†¶Bö
 endstream
 endobj
-2560 0 obj <<
+2555 0 obj <<
 /Type /Page
-/Contents 2561 0 R
-/Resources 2559 0 R
+/Contents 2556 0 R
+/Resources 2554 0 R
 /MediaBox [0 0 612 792]
-/Parent 2549 0 R
+/Parent 2544 0 R
 >> endobj
-2562 0 obj <<
-/D [2560 0 R /XYZ 151.701 685.529 null]
+2557 0 obj <<
+/D [2555 0 R /XYZ 151.701 685.529 null]
 >> endobj
 158 0 obj <<
-/D [2560 0 R /XYZ 151.701 332.088 null]
+/D [2555 0 R /XYZ 151.701 332.088 null]
 >> endobj
-2563 0 obj <<
-/D [2560 0 R /XYZ 151.701 304.902 null]
+2558 0 obj <<
+/D [2555 0 R /XYZ 151.701 304.902 null]
 >> endobj
-2559 0 obj <<
+2554 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2568 0 obj <<
+2563 0 obj <<
 /Length 2452      
 /Filter /FlateDecode
 >>
@@ -10107,263 +9915,220 @@
 ¼‚vK=ª¥‘oŽx¢ò¸'kŒAyÝJs2g‡w+»"D*î­ax9=Iï⛢ŒÇåìcÓá€P±­<õ™·fx¡ÓAåÃ3/·¯ëÒ:MN¯)XZ{§ì?2Àý‚.‰ë;·ôò÷Öíì{fèýKn¼'(æÜ1&kkç~ñ©Êmï8›‹Ì-UwjÈ%7T¶;kü8ܱ{þ‰Ê·]Qº¬1’¢³›@‚}Å¡´ðQ*gè8Ʀo{C	Áÿ!ZÜ|
 endstream
 endobj
-2567 0 obj <<
+2562 0 obj <<
 /Type /Page
-/Contents 2568 0 R
-/Resources 2566 0 R
+/Contents 2563 0 R
+/Resources 2561 0 R
 /MediaBox [0 0 612 792]
-/Parent 2549 0 R
-/Annots [ 2564 0 R ]
+/Parent 2544 0 R
+/Annots [ 2559 0 R ]
 >> endobj
-2564 0 obj <<
+2559 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [302.411 568.759 348.343 580.448]
 /Subtype /Link
 /A << /S /GoTo /D (chap4netid) >>
 >> endobj
-2569 0 obj <<
-/D [2567 0 R /XYZ 100.892 685.529 null]
+2564 0 obj <<
+/D [2562 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1849 0 obj <<
-/D [2567 0 R /XYZ 100.892 422.549 null]
+/D [2562 0 R /XYZ 100.892 422.549 null]
 >> endobj
-2570 0 obj <<
-/D [2567 0 R /XYZ 100.892 407.8 null]
+2565 0 obj <<
+/D [2562 0 R /XYZ 100.892 407.8 null]
 >> endobj
-2566 0 obj <<
+2561 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2573 0 obj <<
-/Length 1263      
+2568 0 obj <<
+/Length 1261      
 /Filter /FlateDecode
 >>
 stream
-xڝV_oÛ6÷§ÐÛh VIQ”­Ç­]†èÖ-öÐõ–›ˆ$:¤”4À>üîx”ã:Níżÿ>Þïî(ží2žý2ûi={{U¬2Áóš×"[ßfB‰|ÉEV­ê\Õe¶ÞfŸ™ªæ_ÖÀ´ÈVy]U%Z¼ÊyUC hscšÑ›ùBª’ýö7UÅ~5Ã\rö8/jæòw¶ßÍ¢Kön¯ƒñä&ñ_f?¯g÷3ay&NÒQ¹”YÓÍ>áÙt2žËz•=FË.“j•WJÝf7³ßg<ÝñB¬ŠçEQž[ÖËWƒ}¯P
-¢©%áÊî¨+Éd.¨jBú©:—«jªÚ›N°—2Ö©XbVÌù;®çÉæ¶n÷Dâè’#Q²?ƒñá;Õ+U^—åÿ)ßùyº”p^cèû‡Q$¢xòI‚·×ÊÞ;ø“K(ñl!T¾,ÅÉvr^Li-NòŠà}Âd&k‘K%í½}Àê›|þ%[ï-bÃvð&˜uƒÙ’(¸ÎLJ·iM—Lí°'jkÂÝ€Ø!Ó¸î0ˆ°‚éþævÀ¸ˆ½†Þc
-d®Êš³}tÛêÁºž€·”‹#ô‡½!qo‰±~ ís €\a6ËÖ„<5ç2E^+gþ¸ä¹ª*úc™0§‚söÞ†`š”@U¥ü«%*š1T\hvˆWÔy-R…?ê˜76±PÌÝÒIéѸ¾iGŒHðga$fë5*r{ã“—ž·Aýƒucˆ ®Ø
-a:oîGëM‡ .Ùž]Oê­(ËÞ
-à^
-ö€¶Æ?×´F{"]<ÖétÛÚ'Rl``Á•˜t‹äۍ×C EÓÍâZDE¬H4vaH¶ã\°áèw¡Knt‡Q6z!áú
-Àþ86xlÇJ²F÷D“CfëúDuÎ'jº	ÒÃ~r{˜GÛ¶)€é ¯Áë!y#2o.%¸!YWì.™9g{:;{
-(øÏh	@íáÖ†èÞLƒ2íGtBn)0ÔpÒ­Iq:©ÀÉRqNDœ¨W…ËçýBâ	2êÕL”ÓüƒìvìãdèÖ'íJ¦›¸¾§.M+àa4í®ã`[¡ýó@ŒÞ§µCXø¼#6C¼,<&Ÿë]ß%ÿ“q0îªHã)—9/Ëã¸Ã›E¿ž×3;·POõëF^sˆSKŠs
-ˆ–
-‹…û)ƒ¹~%,ó@4HØ`HAMôHB€ø¢\lì@t7Ø‘†‡óŽcáèSŒç•êHкˆA¼ògÍDÛð¼ŒØoÀ¯ªã¨
-×ø胉Âkmgq•JÒ|£Å‹6E-v"*5þj;ÌnìH0…[rƒÞ`£ðúSrÞná
-æµd
-­æ—s‚ûš|‰ñºß%ã­ö·ÈÛd’¶¬ÈplQo¦þú+dÞ‰Z¬H@ýÄßQp¸¸^_”~Qù×s(ViûðÝ;w¤­F#äIË–qx“è[ç„Ãéç
-S˜í“[ú /£¦j$Íþâ[1Ç<ê	<'¬dÍ¡ÎsÜç±ÔÐíØ>%‡÷:¹Äò©éØQWÒï6™lMÒÆõgŸqjÒ>?Q'ë÷º;~žÉÁ—â¿—8
+xڝVKsÛ6¾ëWðVh&b ‚àãØ&uÇ™I›Öêôæ Q°„1IÈiÇ3ýñÝÅ‚²"Ë™i/¾µØowAžìžü²øi½x{•U‰àiÍk‘¬o¡DZr‘Uª:OÖÛä3SÅòËú˜fI•ÖE‘£eÆ‹”5
+67¦™³\I•³ßþæ¢h£Ø¯f\JΗYÍRÝíwË•ÈEÉÞíõa4¹Iü—ÅÏëÅýB at Xžˆ“tT*eÒt‹Ï_x²݇„§²®’Ç`Ù%RUi¡Ðmr³ø}Áã/Ä*xšeùy°²._
+ö½B)ˆ¦J*•ÝQ*Éd*¨jBú©:•U1WíÇM§=ØKꔕX§Š¹áŽ„ë%Dr‡å
+…­Û=‘ø:„äHäìOoÿêå*­óüÿ”ïü<Ë<-U¡ïBý‘âÙ'
+Þ^w*yïàO.¡Ä“•Pi™‹ÿ’í켚ÓZäÀû„ÙLVešEìô0Ø,¾I—èÎÖ{‹ÐðŒãMºÑlIä]gf¥Û´¦‹¦vܵ5þnDèi\w˜F	XÁts;bÜG„^Cë †¡2UyM‰Ùޏºmõh]O¸[ÊÅøãސ¸7DLØ?ö9
+P@®0šyk|{³LD–ÖJ„‘†?–0àóØË4ƒ1œ³÷Ö{ÓÄŠ"æ_”¨h&ïQq¡×!^V§y.)ÞGòÆŠ¹[:)} ×7턱<	žÂ(LÄlM…
+ÜÞÑKÏ„Û þÁºÉ +vCn0÷“L‡ –lôÏ®êÝ»üsÁÐØOÄ5­Ñ‘.œët¼
+½íí)60°àJL¼FôíŒÆû¡+€¢ùja-¢"”$;?FÛi)Øxô;I[Åý«;²Ñ+	×W öÇ©Á`;’5º'â˜2[×GªsC¤æ‹ =îg·g0€y´m˜ð=FoDæÍ¥²n&H_Ö»CfÄÙžÎΆž
+þ3XP{¸´!º7ó Ì띐›|e˜tkbG§ŽjÀo¶Tœ&êUà®Åy¿xDŒz5ù<ÿ »ú0ºµãI{ǁé&lï¹KC“†
+0švׇ‚q°«Ðþy ¦aˆk‡4°ïWxGì…pYx9/$L>vp}ýOÆ]À¸«lw•æ¥8Ž;<Y4ðëe1Óì{õ¤Q¿ö~2þµ1/Ò"‹x
+ˆæ
+‹…û)ƒ¹~%,€h°Þ>€鉄 ñY¾ÚØ‘h?m°
+
+ïæ†ÂÑÆÏ+Õ‘ uƒpäÏš‰¶áy±Þ€_Q‡IÍ®ñið&+ÖÚÎâ*É”¤ñF‹mŠZìDTj::ýÕv˜ÝÔ‘`¶ä0y½Á6Fáõ§è¼ÝÂ3äÍkÉZÍ/ç÷5ù3è~´Ú;|Üo£IÜ
+°"ý±EA¼™ûè?®y'jQ‘€úˆ¾£àh.ì©—¥_å@þµÇ²*.¿>{BçN´Õh„R„reÞ(úÖ9âpú5…Âfgû者>À˨©Q³¿ø6ÌñûŽzÏ+Ys¨ó×y(5t;¶OÎ὎.¡¼pj:vÔ•ô»&[µa}ÁBÁgE˜š¸ÏOÔÑúÅ}ƒ.ÂŽ†çrð¡ø/2#
 endstream
 endobj
-2572 0 obj <<
+2567 0 obj <<
 /Type /Page
-/Contents 2573 0 R
-/Resources 2571 0 R
+/Contents 2568 0 R
+/Resources 2566 0 R
 /MediaBox [0 0 612 792]
-/Parent 2549 0 R
+/Parent 2544 0 R
 >> endobj
-2565 0 obj <<
+2560 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-ByExample/images/chap4-net.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 2578 0 R
-/BBox [0 0 561 313]
+/PTEX.InfoDict 2573 0 R
+/BBox [0 0 564 320]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 2579 0 R
->>/Font << /R9 2580 0 R>>
+/R7 2574 0 R
+>>/Font << /R8 2576 0 R >>
 >>
-/Length 2581 0 R
+/Length 2577 0 R
 /Filter /FlateDecode
 >>
 stream
-xœí]M³ä8•Ýç¯È%½(·õeYì `&˜`èW¬&fQñ¨G5“ÙÐ3üý¹ßº²“ʤ£^P8è^ÔÓÍë£slÝkI–ìoÏóÎ3þ/ÿ>_O_~UÏüþ4O-¶e]Ïû?¾ûã)œ¿>­uŠkç%¬S©ùZ^§ÏqqB·÷§sŠK
-S.çë)/ÓœœœK«õK[§9¸rY¦ºœŸ%† £Ù®ÎÂGŹ.Ó²jœS™r²2¢(òÒÒ8vnu*ñÖ%M…ùn}®ÝR"TÏÊ_eoOñ•ÚÕ|…ŸZ”¿¢ZYêEº0x¶÷'q+ïÂÔs^ãù¯ràWÿþЁO»yÝñ¿¸+ù1¯§Or½Ÿ>Éõ~:m‘¯»«{qWüc^cä±ñzú$mìé“´±§;ažâ¦ˆ1OµU<ëq¢È‰eJ‘CFâRþ
-–8O)™%A„Mkƒr ‚V.•$`c/yn”=Ävu–V@þÊaŠQ2V^œ–€õÆk{>•Tþ%Ç)ð(yšáÑ œòƒñÂz•ËÒÚ”Au„ÿ # ‰–EßÆãÚ-eb=¢WOÓö´‘>©[m OØ‘%•ü’ 1TS·@[(+†…ê_–Z:?KmÓµ[Yx)d‘¶'Ûï<ͱfu¾õ$”G`žvÍæºSqíæc^OŸ¤u=ýƒZ×ÓiËåºkM×Â>æõ1
-믧OÒ¦Ÿþ!mSVC¨ñ¼ÿzÌà
-wÔÑ°Q@Ÿ$AfÅ„Õ¤SÚÔB
-þNyÿ0ȸ@¡-‹%.t’œä„ÿB›)í\ñÞ“‚¸›Óœèê:§ÜâÆiNxûþ8RhpšZ»çÕÁ¹)A
-gh¬+ ³Ó|œbMp‡ªà^æ«·ä)@3®xÑ nÓ
-¹¿Æ:õâ3á¾²:‡P§5; +7Ž nÉy*åÜ çX[¯‚‹x€rPå¨ £
-ê{TÙì9ì/ÜÒ[DÎe‚Pè@„åµ3ࢩ*A´ÌUx‘hCu"!UäàÎ#½Hu0Ö0ª/ß±”éåtùÈ‹uµX0Ê_p«ÛMã,õ€F=´—*Z!§fêqªei36Vê½–uÅ!™÷‹÷‚ŒK=ôÁ«Âb¼Äâ½ð®Ñ{©eðZ༶ÁK,Îo
-ùÚyÿ%ü}5ÔW7bAsyÅn5öH6ÉýâjÙYúAkZ©MîeWõøÿµ „®<B]à4ºÄàÍ,p»¶“ÜÁp:áu-•L	ïêW²¬Ð[
-nA0pB$H¤pŸ÷N)s¤ e¨û^8|Za¸¾°Wá›X°ÂÒdXwß‹° ×3:¡!Î3¨ÊŠtÇpÖ–)ÞщN§Y
-d„$HxŒÏ6^p> tÚ
-9 (Ö]/
-°yZð,ÔóôÐ楡?X C1Ö#^Ðg̘"Ú"Ö|e6¢‚½4ˆG¼z—ëà±Ë‡³G0Ø-Šu×ëé”çe™yeÔEK¥.PVSx´ñˆaAG³Ž^+…$œinŠu×°*´³ˆA
-Dš K™fhß%Ñq„õ€a-t/ð^Ž[àLP¬»^þ.”rÅÓ›¡9/‘r@Ä™‡¸ROsn8ÞϘŒpØ_+&ú”^¸
-†9S×6Â
-šü»ð}[b‹Ôa‚ëØÝ›¥NVAExļ`6[áB¸ 1Cƒx¯+p³£;-PŠéüO
-Í#­kž`D aâèkÍ4^xã]pj$®@ŠY€ÁF>§Àaäò§%!f"Ô
-Ü`Pƒ•¤œœ¬xl(b)pÆ’ì¾Áh‰ç:¡!D8¯)h]	ÉÁP°AºQštÑñ<µâqìSgì!À©…“^ ‰Äe1k¼è9FÒQÆ^à\qÜY#Àˆ7°+€ ]Çe)@Žº1©ÒäØ’p´ìþu´ ä°Ü/øZƒ»Ú(ü«Yü«Yl›…ëi|{
-ü·üó|=ÿüíé˯ ‡eÀƒüónOìl`xgšŽXß^O?ùÕ7?¼ÿî›÷?|ñöO§_¾=ý{™
-;ÍKNX©G	£VèV=­¼îM`×xI8	…F8Sƒ³Ç WTÈ<úîî¼ì®ãfŒàß	ÛQÀÓe²ô¿"¯V˜ñ†Wa| ×¡–‹³”Ä=dìÊckò–‡&†^
-û¡[,@‡F‡‘çÐáô-­8¬}}{N/¯ˆ=Ê*v-pì6CÂÔ1Ù¿tý0+eœ9zÀû^kÄyyœhW† ²^ÅÄØ9›%AÊÀ6^aH†Se·,ÚIÆi«’ëM‹Õkß[´vŸ?[¼šò4u6ñfDS57"ü'×y¿†´pðqÖGâ:/pŒo¡BHÚÜ1+3øÄré–ˆsØ…Ìø §¥Ñ2àP§ïÕ°é|n° }…[Óˆ¾ÎxKõXûúvœ^^{ˆkøºxý ¼Þ	ëûÎ÷¢:/0üjÑøáõ€îOËcµà´Î8Ý°@ga­t…
->¼i±£¬ö½Ek÷Qýù³Åk™Z¬4t‡îÒ„yŸ¶Qý€“Ÿ/i…E%è¡jèéüAH½>8u8ӏ'A,—n‰<Z¿ÀQk,#|_
-›‚zƒ…èÐqžÛ€is¤aíëÛszyEì1¨Δáåë»r€¶hÿn¢ú¾÷Ý°ÆÇíK0†8æ‡áÐ’=g³À8!%Rxø†ÎÊBMç‘j¼i±£¬ö½EkÂú³gË7ë•Z ×1\ƒÞ¨?ê0ܤÌ}:ˆc¼;ÿ˜Î7@Àè®ñp¶¾‘.&–‹³à°m¥„}Ó:ˈ#7éW–›ô€…7R‹-Ñ£¯3tœ<Ô¾º¥—׃ÞÜ¢—ŸY at _®àÔìh¾ïýÀMšŸ’C¼9Ñ“ÇY-ЭÈ|… 	¦[]ËŒ¨'¹·ØAV÷Þ¢uonÑŸ5W¾AC¯cÎÐ}š×±Gôþ|Ïg¸=/‰›~‹x›îϏÅ3Ü
-iöXë£{h£SÀ†K7@Ï¡¾ƒVìþ
-–…ïίƒ,÷fD·OH¢aÀ^fΊ
-µ«mÇçåµ€·wå›4—ej÷†Ðxß¿+ç€3‹Jïs­à ÀQ6´¡Ê:cÚûÌ}Æxhå†Åbõî-Zïx?þ|yÒ%H~øèöÄØ}'Ápqe±ÊŒkh~Ì°9àtjì^OЬÍ@³åâ,yÆ„– ç—†:ˈC×æÕ°é|n°}-œ7;:d„=Ö¾¾§—WÄbFÓÞ]i²?Õñ.»‹å¼ïÅ24¥†“ãÊu…´9ÛfQMù†¿ÑCˆ½EŸÏBÜDN4{‹eµï-Z»èÏŸ-Çu.<5âÇÄ»¸¾ë4ÄuÍøpñÇœ!d=Šµ!"ü¹"¸ÁžYlÀ G5^?î,Ž„õ+aKXXˆ^×-:„“ÛÞ¨nGéåõ ·A=Sxú°Þrwí¼ê„ëû@À*Í3:ÎjÑábÀ…¥7
-:è1.8ctËbYÝ{Ë­AóçÎõ-®ôŒR¯½Ð8
-Ï­*OoóCÞqŸ.ø<ei\_hôh)M©³\º%®”ï.'~ü¸zˇ[½6?¶± }
-´âסC¾j_ÝžÒËëA­ðt¡)¿™çV?6r~ÀûþC«‹hñ1PƒZóœÍ²ä‰Vœ×Ta¸°Ü´àï3>óE*·zL¯{oѺÇGVŸ7W
-èÆ\‰–XÆݳ(9ß÷ñáŒÓz8WcÁþ9—Fêü`¦ÄThÆV,gn4Q_pÕ=Ž7ˇâùÕ°éln°½%Yèj踪añXûúvœ^^{ˆè±7–ð€¶}µèûÎw—D„e²ÑCQ1âVOX-¼6-ÐîñQË
-K\ùiO	0ÐÄÅ37,v”V¾3hÝÃrŒÏ›ê·ý~+´NñÖíù§¡¿-
-Åz"ö#âƼØW*Ä¥3¸è©™åâ,%kW×ìoÙàðåy-ì´Ø|ÄÂÝ_3­!ë~8ÈÂk_ßžÓË+bkýyí*´“´ëCï†Ñ÷ïv¸íHRz´}JKò„Í’VîkƺÐ
-õm‚‰ØÔñ&yâÇXÅ;ƒÖ;ôµ?_štõVŒEŒµ6­4ÅR±GI½ãµ­ vÚh×-¡µÂÌu!n_’ç0Ór_g‰´Ô±¥‡Üîøòµ·5áXB^¶”/Ã>·#è¡ëR—BÓÏ™õՁ%ãFgä-‘g"å(Z¿ñºÞ`ù´;'·êó£ëF~нŽW‘ûŠCœ™kuZ*7·Ê؝…æfõ¨Ë‡×û¿ö°$¬VS)ÄÕ®®Ÿ§Ÿ]*g©ü¦×»a¯­ä@“âç,+Ï´;ÜxÏÁž_FÞOcx\~Æ´xšéÇk‘* ±¤™Z¾//<°
-ô՝‚yC4ྸTZ\)–¨³n¦y&¯Ì,ÌºeÑO´Ú+K¸Ù{HH€MšZ”™(s­¢kSê¡aTA¯9¨2¾jíëñÚÌÂÔ–:5G|¡%ï^‘‡¤=^‹&M-JL”¸VÑ¥	s†0hàkvD]|Å4ú‚,êp–÷ã÷øÅýÁE8—]
-1É eªÂ縡ÓþQÍA4~rIŠÊ>‡˜‡rT€A_³c*³c×f¡¦ñ«Ô5»6Íæ!9B¬lâÌ"Ü,
-	wKT¦ÎR™xKAuŒùñhÚÆÙÕ™E¸I+uó.N3yH¦0 -›8³5KFBÝÒ•‰Ó|¦ÊQcŽ<–²1KÎÔõ¹dæšÇ3íÁí‘Îe—KÌA2…h™ªð¹d^qth4Ìê5PÙçóPŽ
-0¨³ä±”Y²k3‹PÓVêå]›æó<¡V6qfn† Ü­Sg,ÄÃX
-¨cÌ’GÓ6fÉ®Î,ÂMÂX©kœwqš	ÌC2…hÙÄ™E¨‚P·:Lœ’På¨ ƒŠ1KK™Ï’:ÝsõÞ"qåˆÏ;4Òµl¹Ä9𲃠eª¢ç°T‚2 šÔs5È»»õPŽ
-0¨ðYòhÊ|–ôÚÌ"Ô8†;uŽr¯ó€ó <ѬlâÌ"ÜA¸[¦ÎXˆ‡±„Q‡Ï’ÇÓ泤WgáFaÜ©sœ{qœ	œe
- eg¡fBÝê0qJB”£*|–<š²ü
-£eÆ­û?è™MÔ«¼ÉYfZ(ÔpsfæN2NÀË»^´Œ´jæŹêa+¡—©<B-)Ò[VZ2. ²:¸Gñ0–‚°ÑAWõ°Ú([Ó±½©k}´Oêh¯zçÞJ·²ºy %ç±=?Ûš÷ÜA¹k]²Pe©£¾rGÕöáîSÔ”3/y¿‚%®Ä8çÊo1J±-´@/AB —dtKT\µ…wg|Üè‰rÉôžMoÁÈÉeC.øª”Å×^àâ²=axÙqŸ Cí5—¨ÐŠ¸Fó$D)Uzùž§Ô-_Ý"ÇÐ+¨6>×$Ÿv§äVmî	`º˜ýK’70%|Ù
-¾%6Þ@•24G<ÞYVÞõ.]v0´éèµ Ç×È%|{L0ˆk¿©És»PίÎqopXÁkaO `Ð\x•9ôn[³zK”õÍR¡ù”2¾ù'¯8Cßøåa e®‚PK<ÛÑзˆÑÁs½•€zå¡ àþéßñÔqL×Æ{Ä»*µ()Ü?·8Ò~©ªð­Ù{$ÚsܤÜe™‰éáÊZ+躔‚y(é¡`W툪èje|‘jòºÌ"¬òœ§.ŠW`8Y™ßÍê<$î
-@Ê&«[â¹.¤­“¥ÌA)…~­§‰ãJ£
-×<¦![@ÏÑe|YsáÌe—-ÌArX™ªðÙ çÜF¡Åm.E~_œËXâaM F[ÇT6fîÍ,BMƒV©kXwmøæ!YÁ´lâ,³7Ë<ÂÝr“©³ì¥šÝaÐ1æÄ£i3£©ëæ¦1,Ô-ÈMœ¥óa ZVq=Ï0µž‡˜zÏT*ÎR™:h¦S€A؏¥lÌ’¼(Ôç|s¥Ï%‰fuz¤'™å±T`’)ÀÊ2ä,
-›bOF_nᲕ}.Qã( £Š1KKÙ˜%»6³5a¥®QÞµi0Ɇ egáf¹H¸[¶2u–ÏÔCY* cÌ’GÓ6fIS×-ÌMÃX¨[œ›8Ëæ!™Â ´¬âº…©õlÄÔ{¾Rq–ÐÔA9*À bÌ’ÇR6fIžÕñ¹$Ò۝zGZÝ#Ë.—˜ƒd
-°råOè8ËŠKú;@ÃvçjhüÀqã( £Š1KKÙ˜%»6³5a¥®QÞµi0Ɇ egáfÂÝê0uÆB=”¥":Æ,y4mc–4uÝÂÜ4Œ…ºÅ¹‰³L`’)@Ë*®[˜ZG`ê½g$ÔA9*À bÌ’ÇRvÿIļvXW$sõ–ˆ[aRÆÎ0åæŠoÿÐ/hi…0Ñ@ñHm¡McŠÐËT¶?µðÛ ;~µ ¸:¸Œu(õP–Š0êà«zTm%êØ^Õus+üµ®˜¥eP‡oåÉÎc{~¶5ï¹)‚r×:L±c)tå«íþ“¾PùN?¯Co×uÍ´Z?çyâ]o%ÊéŒwlo‰ê²Ð^,z=½U‹já{ÁW›–~P7n[é½û½êÆŸôTv—ßÍ>¿z5¼Ë®îÉLü~Œ«cÿ¶20ê–@ßKÑ£x›ßèu½AóiwJnÕ7lóÃ
-üpŒL…€…_Ÿc’mv­Ìà,9ÓÊ=9ê²ÃáMr¯…½Ùæ7óÇâÚ¯DâwL¸«å,ïcéopXÂkao6úÍü3üäd\x;¡Z"-µÂ÷’.2{Dßy@)ã2‘™Ïu4e EªüÅP(õëGç½?V9ý¦ÌôÀûvƒß‘”ñ¢5ËÆA‘Y„PâÏ _|åÙ:(âÏË8Ž‚Ž eÓdáfÕW »ë´~úMÉé}^­v0I²¸vq{QfJ˜"“£\½˜Å‰*´>®;H¤+€•M“Y„šT/ê´vÚM§Ô丑¼¬)<’ y5DXNøúVŸðÕž.9Àmw_.ûä`üz¼”ßå¼ÉD—ø…aŸÊ>C˜‡T„A_©Ês_f&¦qª´5Œ»0ró,  Z4iff Ì­
-Óf$ÔC9* bLÇR6f®Í,LM#W™k`wmöæ YAŽ·¢I3‹Óã…·U`ÊŒ‚xC5Œ	ñHºÆ¼HÊHšé=ñ¿‘ßQkÎeŸÃS„H‘jp)$ñº;;<ñŒ UÀeŸBÌC)* bÌŒ‡6æÆ.Í,ÂL£W‰k|wišÌC2„!hÙÄ™E¸)‚r×:º:eaÊRcv<š¶1?vufnÅÊ]㼫“D`’'ÀÊ&Î,BM ”¹Öе)õ0Ž0ª3ä±”9’&m|&	?Ä­ahM}t.ûLbœ)€‹TK$‘?ÕØóP¢oÏôLEeŸHÌC)+‚—0&È㨳£éRƒÒÒÐUÖÜ]—†¿yHz0)›231Ë@BÜr”I³,¦ÊZ¼Š15JؘMš”˜®×ÐîÒ$öÍARƒhÙ”™AxiòÚ–L˜å/ñ0Î0h“âd=²1/èh=ò‡¾»ú¦´w¦o‰Rïgi×u‘G\T–ý‚KvøáÊÖ¬ÌurµTd  8Z\Æ-PÊB<:oFØèàí]GÕÆóV³4ukÏ“:ÜÓ:÷Vtä¨ê$€´8íùÙÖ¼ç¦Ê]ëèê”…zoAuð•;ª¶Ç7æÅPðcÓnXäUºg+ÎuægÝ¢Ÿ±Ò]\ôÊ—XÜž1oáý`î(³²lcsµË&exÙq¾½1ïŸ[‘ߘç5áõ¾:NµM#%3о<=ÄoÌŸë
-ŽO»3r£®ÛòbÞ²œ’öÎÅÀ_Vé{ç¼…÷ÎéA—Œß–÷É¡onËSˆ«»³|T¢_¦ná­s®â
-Žß–÷é±onË‹óBo0¹zKœ’­±ƒâ°NX˶ÆÎ9Ð
-:;ÞŠòÒg)˜äúñôW¼ÐÄQc( £†Û[óŽ¥Ð/"ôÊÌÂÌx…['Îkà¼2^%ç<ïÈW -š4³3æV…i3ê¡aPá—M™_@è´uQãnF\VÀ9i²FÎyp°ãµ¨Òº…‰u &Þ«PiÆA”¡üòÁcéòK¬ãÌR|¸¥p¿?à"œË.…˜ƒd°rÔÕ©fÉ8[Õ†
-!Zö9D=Œ£ Œ*üë£)³c×f¡¦ñ«Ô5»6Íæ!9´lâÌ"ÜaØâÕõP–Š0èóãÑ´ÒÔusÓ0êç&Î2yH¦0 -G[V¬¦Ö†-!Nœ‘På¨ ƒŠ1GKÙ˜%3uF}.Áú\’èz=Ò¹ìr‰9H¦P +S>—dú0±äaCˆ–}.Qã( £Š1KKÙ˜%»6³5a¥®QÞµi0Ɇ egá¦yØâÕ)óP–Š0è³äÑ´YÒÔusÓ0êç&Î2yH¦0 -«¸naj†‡-!Nœ’0å¨ ƒŠ1KKÙ˜%y®Çç’¸âBûÇü)èé\v¹Ä$S(€–¹
-ŸKRÀI¤žŒÎºlEeŸKÔÃXÀ¨bÌ’ÇR6fÉ®M-JMcX©k”wmšÌCò„!H¹‹3‹p³\$Ü-[™:Ëg꡼aÐ1fÉ£i³¤©3‹pÓ0êç&Î2yH¦0 )›¸naj=1õž¯Tœ%4uPÖ
-0¨³ä±”=¾]æ	Ju[ڨǺ,¶¥:É´I·›i¹oi3Ù°fVæ:ú–6°T”ܪ¼ÔBë¨öÖe¡Æ[F~»Þñ´ùízNY„›l&ëêx»™WÇÒºÇöülkÞsSå®u˜:c!7#ltøízÇÓ6<óøöøoùçùzþùÛÓ—_µ³~FðíË)°Ç9B×'ã¦ì\¦–à§ëé'ïø0ñöO'è5Õ€£ÉuÊ¡Ào ß"þö¦´)èT½f˜s³_ý
-7õ¹ÎõŒO¤àÌЏþrùÓòe…LÏop|œ¸%Øï/tx(pJjð€ßð¦ßÿë'ß^¿÷Å›¶®
-Î'–^¾øï·ÿÁÊä± (‹¸M-á3tüJìJпøóõÝ×ßüôüŸ_ýö׿zúåVB‡áS¸ºâaØë,ðçÈ‚ÈXÏÓûïþïýw?%N\’°VàD1ç_üêg¿þío~Á¤ñ©lÁ߸Vúý7ïø럿ûFPÅŒUx„€¹8ÓüeÌ臫sñ;ÄPa‘S·…YK	·a¢Áüòíéwîkš¡%jSq]ù5–@–7ýábúšfľ¾é^|®ÎRÝDÖ	m5.…¾ù+
-QÊϧñÆ”ºGh´¹Ð¬Ìu<ŸÌ’àÆE!A†›S¯CÊp„²Pe©Ï^[ŽeZ½´h0` tìµrÑ	“ß•µneÂw²2†Oé²0-cðZY¾0Õˆ‡1„Q©‚Y[2~ õ€úèC¶S—\Ü˦‘RÃ)ÜÄ>ÚH—¡‘JpÂ&Xž{ø0‹Ï·v¡±9Ç2sc”qéiñ#^þë·¸W5‘ÌJÛð}¼Vù r
-óÂìtuè¬Ã¨+Í•n¿¦I%ͲDBÊ ¬­÷«…*^¢!ô2×ñ|2†vI*Ç%V‡”ᆦ,ÔCY
-ÂVdz׆g|–q½ÂÒ¥eú¦ÕÊE'Œ
-ÆZïeÂw²2œbl.v<Xƒ«€ËN–zCFØH8ª*ê6þM]rI/›¦™X)5¬6M:Â5ÍÔ¶1òÜ£†iŒaZ«xùŒ*xóß…’ù• x=ý]¬€º0…fH6‰ºXïþò—ïñ&¯Â¦^^$ÈFÝÌÿðî‡w|«‡!Xžõ) iài>ÿþû÷ßÑá‰ú=­§´Ïfç@” Ó‰
-)½É»1?ŠZ¸ò³çç?ÿï7?|ýÍ	²á¦q8
-zAkb>ÿöõ7ï¾yþúÝ匢¯ŸßoŒßþD¾è	
+xœí]K“äÆq¾÷¯è£xXõt“B²CŽlqÖ'‡£-ånJ|ØúûÎweÍí¦b'´Bˆ<ìTvVæ÷•YTßžç)œgü_þ}¾ž¾üªÿøýižÖ¸Öe9ïÿø¥MqMç–©´|k^¦ÏqqB÷§Õ‰5…)—óõ”ë4ç. Õ:—rŽe]¦9¸r©S«çg°C hÑdW'áZqnuª«Ys*SÎVF+j¹®iŠµ‚ÎÚ¦Ïa©i*Œv«sí’ÁQ=|å¼¹„V|«Ð
+:•(zµieñŠVè~¸‹Ü/à–Û…qç¼Äó_¥ÞWÿúH½§í¼îÀ_ú-ü˜ÒÓ'¸ÏOŸä>?¶–¯»»zqwúcZCäm=¢õô	ÚÖÓ'i[Ow¢:ŦcžÚÚðšN`7Ç2¥È¢J±2Iœ§”M’ ®¦5 \z¹4 ¨‘—<¯S(&»:ÉZ€ýÊaŠ­dt^\•€Vã‚ÞžO%µD¿æ8¥%Os`!¥<Å`¸Ð¯b©ë:e`á?j”àX%l•®]R–)& $”õJm¯Q÷*Š$é¬økŠt•a…ÖP¼az
+j¡½Ä³^£ÚÖ©¦ÖËtHûµ½ Ø‚çiŽ-¯ó­¿ ›<bæi×t®;ú×v>¦õôIZØÓß©…=¶X®»ætqMìcZãàm=¢õôIõÓߧQcÞjs-ž÷@KTq¥VC‘ÉsÖ*c‘°NkhÁ÷’÷*AÊ÷kÍP)–Xi|à
+C;ˆØ` Zî'Q7¥9Ñ­ý¨Òœ"u_S
++\¢õŽ¥°‚;¸ð Z¡#„–ºÄYi>N±%è h§uJØFœ$OÚpÃ;v ?˜Hþ-¶	œiùj`®\FhÓRœ+“¬¡’œ'ìrÍŒÛê|pk(
+ÕP”jaäAîÃrû€ƒ‡ý-„~}-͹`è ²‡ÀeOS5”„ZÐ2ûð4!Õ†æhB²ÈÁ_J*{šªa¸ÅÂÈc¼…G㦷0Ð-¬Ûb1Æ(‡AùRrÕJýÐffp´@^Í4ðTI]­WŽeYp>æµDâµ*¤¨w-•Z
+º‰:h‰Äká%\’×RÉ Uᮃ–HœÖdÀõ¼ÿƒ’~†2Ûq”`½Á𺠍!Ç_œ“±Øõ—W'›ÍËÎ
+úÿNž?PB×Ñ]ÅN]V¸¼n-(æ%[-C¤{Dÿé„w´Àld	;õ+I…}@	-AË WÚ5Ì&(>ÙÔ}-œ?-0Oo¬Uxþ$t¨Óº»Jd	†<£
+â<§¬†î耝eÍç¨DWÓ$2AKh‘-˜ -£\
+Ì2KÄ‘Øº«Eƒ*ôØfÌS0<›ëŠú ÌĶÑ‚cÆ̃·f‡z$Y=ŽÐ8Ñ"[0´\-èh+-5
+Š­»ZO§<×JÑ$<?4h3…§h‘-d¶Qk¡zh°/[wµÀVƒf1¨aHk )0¯‰ê‘­´ÈV¥>ÀkU¬W‚ZØº«å{Ÿ”)ëdhÎ0ÐÅqá¡‚îT€.rÎ8?gLF/{k˜áS
+x? ÿsžÀ|„ž)п•;Pl=0/Š+5†÷qM8tWŸ0§šfhÇ ¦ó7:àÜ+Cƒƒñv«ÐËQ›Iã
+^•+.Kƾ&#	¸qÉ4]ØåVœ¦ÅPeJ§S€Î-Íö`"Â8«®`š"Œ° LÕp’PÄ%@\	lX˜(‚˸	cÉ0WâNh	.lJšWFp0»	Rڌѱ^ÛLóž6ãÈ .-¤ñI$.È‚1ãMϱ‹²â],œt1¶ÓæAпÃE†YSd4ÞIVÆj’¥Œ„?…sY\|€æn÷Ò‚»Ú (ü³Qü³QŒÂ2¾=þ[þy¾žùöôåWsà–ƒ¯ó[èšXÀÀ´.´˜­æóÛëég¿ùæ‡÷ß}óþ‡/Þþéôë·§ßãК@.0º	
+#aÊšÃ8Äz@ëÞª Ž‡+ŽÑgh*8~n8²Ä•c2¤«þ²z~_Û]–‚#ô†+¬´PÿNÚiÀ‹dÜhÍ…Üe$Ø`F7X—.(	ƒár¡{.mŒVh5è•,ãèsc	LCkիᐢ⚅™ÚyÛáyy-ÃÃä«áPëfH;˜*"Øùþ»Êê6d™˜qèí{
+â+æ*¬ Ï5\©ëM’ G`³n0õ‚6~S¢Cb\¦*å¶Dkuï{‰z÷ðù£Å»	­4Óà{Z—qa
+ÝÄ”\0ç
+I~
+©räûhŽñ‘hÎêdrišbe¦žH.]q]¯BÆ'7'É`‡y¯f›®çÆX_ 3ÊÞø2cêMíÝí ½¼žé!ªáç•FпOÍÂSÃuêûÊ÷b:W˜lQƇw†;k«d¡$J iáÂÒ
+	Œ
+–F÷§TšܐX-ó¾—¨wÓŸ?Z¼—iæé0:¢ÉÞ­˜~@ɯŽ¬<	Æ$…C’ùOè Ó
+”¡3Qpép]/‚H.]qnŽ!­0Ú¬iŒvhžûj¶)¤7¶Ð:“7Ö!©.‹³µ÷·ÇôòŠ¶Ç ¸.Fqi‰Êw¾û¨¾¯}7¬ñéz
+†gø­<8Ì&YAJÄBæß7$pUj¡Z˜jÒM‰Õ2ï{‰zÂú³GË]õB-æ‹‹„ëºí§?®1tÒaÆÞ"{ç¿%¢ÁD›O_[á~´òö–\œ&hi¡ŒCSvÉ`FºèW±,ô`
+{Q\ÎŒ/3š¼¥½·¢—×3½é kÅç0Ž+8ÿ:ÝÝ°ûíºè•±2B¼9ÑÓ‡Y%0¨È|ƒ®>Ü”èZZ®×
+nJ¬–yßKÔû¦‹þÌÑr
+£úF“¯uš—ë¢ï*
+]tRk¤E“Ÿ>‰†‘††êúÑ•¯K.Nㇸm8$ƒî£_˶ôу-êGÎ3½õŠÛ2»©½»=¤—×3½í¡Z™qôxo2ý€öý:|@¦±Ï[Ëx­»ÚRc¢1m‹}Í>cd¬å†ÄU1¿{‰úûæÏ'ÝÁP¸a4YÒØíêªØ]Çpke“Ê\¨¡ûžù±ésÀuÔØý]O0.l­=³äâ$™y@à*ÒQ—Œvèμšmºš})œ?»uÈ	kô¶öþv˜^^ÑöÉ0¯®´Û—ùS»Ó?? }/’¡K€‘i5„È+$ÚÛë0«æ‘™ÂoKº)Ñç²5qjËM‰Õ2ï{‰z÷ñüù£å¨Î…I>2…~@iˆëƏªÝú§uÏ23CŸ,Â_3>JéÓ>“ØÔj­¸'dv$¬_ɶ„õ`­·…z.g©yS{w;H/¯gzÔ3…çCè´ê„ûû”ŒµÍµ6‰Nî&½)Ðégˆ±ÒÜþ†Ä*™ï½äÖôùsÇúvþâ²®iÞ'zkþü€ÒðÐ
+·Pàš>ß-KG]ðÁ
+í5‡a¥gK	RJ1É¥K"Œ\ɧgøè®K6vø¹ÕkÙæ'W£-°ÉY‡„–ìlíýí1½¼¢íñù>~¦Æ´Î´ïç£KÝhß~U /UCˆO„Ö‰ƒa6IÅ­f(IM–Š·|Ö}Ƈ?+>ÿ%Ð*Ýó^¢žÇgWŸ3RŠçf\‰vTÆ}nõ€’g\áÆÞbÙ=·zð)ô¼òÚ…0¢G4%¦BÎDrq Gkö÷{äè%;ϯf›®çÆZ_“ìl5븥¡z[{;L/¯h{ˆçq8†cëº}µwßW¾»"Tzø&ðTŒx\ÄV	oHGI^é©Ë
+I\øÁO	0ÏÄ]37$VKïê{Ø‹ñyCýÐ=ÂOŸÉÜÚ[rWelCkj¸‹2Ѓ±¿á4Lxƒ¯øÃ-3¸Ó7šäâ$%ë8‡6ëxÉÆߚײýv–¶ð¼¥Î®F¬Ùß»ÛCzy=Óã¶~Ú®JÍ3íÆÏ»P~@ûîh{…d€cFAH;Ч„[z;f“¤…Gš±Á`ŸÐސ@4ñˆµòN [­Õ½ï%ê}oöhén.˜z+NÔaVÐppIe:õ5iÿ N❴뒰®ô¼%¸·¹mÙq3mùu’HÛ{-•8Ëëšá’xï뒐¥"¼ì0_†£nÇ`D÷¦Õ‹љN¯\
+H2®itL^{Ú¿Q¹Þ ù´»$·œù©öÓ@èAbœi‰7æã03ýÚpû'µ¸Æ‡Ø$г©uÙÙáMÿ¯e{8K–@[¬ÔĵßÜE_†[å$ÈÖÊÆSx-ÛJAî´©…z×…—ݝ:âs°G›0Z^ñà”Úãò3VSõ
+t¡××"9 }‘¤w¤Z}yí9Ðt¦!ÍÀÀÆe€²Æ…¢ùˆ9óâÖÞu`fFƒ´èÃ°¨•$wÚ›nbÀŠFM%ŠL
+(ruѹ)ÕPŒjadA/9(3¾k0¡Ç
+›IZmÓê€Cp§u †sæÅkHÐúZ4j*Q`j@«‹NM0˜‚ 4¾gGäÅwL£/È~'©ØFzüâ9‹è"œË.…˜‚d3 erásHÀC=‡DšM¹$5ó1^—ÆTC1ªß³c2³cçf¦ñ«Ð5Â;7ͦ!9B-XÙÈ™D°Yì–¨Œ¥2Ñ0”baä1æÇ£q3dggÁ&a¬Ð5Î;9ͦ!™ÂhÙÈ™D Y2è–®Œœæ3UPŒj``1æÈc1³äLƒQŸKf>¨iq<ÓQÜé\v¹Ä$S˜-“ŸKæÏÞu+ͳº*û\bŠQ
+,Æ,y,fc–ìÜL"Ð4†ºFyç¦yÀ4$O¨+9“6³ Ø͇±3¢a(ÅÂÈcÌ’Gã6fÉÎÎ$‚MÂX¡kœwrš	LC2…в‘3‰@3Ý|9¡
+ŠQ
+,Æ,y,f>KêzÏÕK2nÔ8†rħéZ¶\âøô7 erÑs	H™2´²ç<,üþ‡A5£Xø,y4f>Kzn&hÃ:G¹çÆyÀiPžè¬läL"ØÌ‚`7ÆÎPˆ†¡#Ÿ%ÇÍgIÏÎ$‚Â¸Cç8÷ä88
+Ê΀–œIšYèæÃÈ)UPŒj``á³äј}à7Õ¹ävÞÿAOq¢Xå-HN‚Šø)yÙi |è+_´Œ°Zæ­ºªÛ[·ÐËäk¨$EJ9fZ2>r4\††B4¥XØð »zXnëªs{c·öÙ>±Ãì­c_KŸ·2»ò@ÊNc{}¶ž÷ØÔ‚bW¢P
+E©F|çŽÊíÃÝçª)A¶ÆÜœyü$q!Ä9Ó&êË)ŵÒ~½	!†A‚­qÇOÂ\Ø;ãÃå•j•\1}8Aå×¢õJ&1Ã_™28/pÀËòøð„è ¾J…6É.ô⽫ƒÔèÕ{R”F祽‰jTºÞ@ù´»$·¼¹G€	÷ëbò/IÞÔðµ+à__EǪR†ÖˆõdY¨‹‘J—:†ôZ¦Ç—Ɂ
+ÜB¦&®ý.¤UžšÛr~Žs¼±Ã^Ëöð 0
+Ú°›tÓP—zW”=¢N…–{Ì ”ñý?™Îx8
+~‡˜YÐr•&'‰ç^à¨;à2ª+Õ0Ðñ¼e0>þ;"?직–Skü.Å˜êÀ
+ßöQ¼ÇC· åÎÊ$K«+fuÐY)ÓÈñ¼ÿÌ!{(Ft—2¿CÕ‘2‰`Ês¦^*æ<'O	_úœÿ³D¼U—²Qê’xîÕ0[7>æÜ~V¸ñ¼ÅN÷èP|8Ž4ºpÓcò„í]~À·­.|¹ìóƒiHô«+“ŸÀö\\Š(ô~2—ƒ"¿,Îe)Ñ°,&FQGå6dÀNN‚LƒU‘k8wnð¦!ÙÀ,hÙ¸YFd–q¹å$ãfYK5$©©Obȃ‡â5fC£Ö%ŒÌXs|1ûYrƒUײëù…qõüð%=)«ž½ôgÍnZ}`0æÄã°3#o õÙßTé³G¢Å›ÙIsz웆äµ`eY/r’Oa»üð.CQÙgÕ0”baä1fÆ£q2c'§A¦±«È5º;7Ӑü`´lÜL"È,	rËRÆÍò˜jH5àI™ñP¼ÆÌhÔº„‘Yrq#fÀ~–aÕµ¬Äº„qõ,Ä°%I)«žÃôgŧÕcf<«13ò’Ï‘ÞèÔã6ÒÎçÙ\öÙÃ4$7¨+7þDŽ“,xtÙYXqõÞùXy}ß¡
+C)Fcf<·!3vr*d»Š\£»sÓø7
+ÉfAËÆÍ$‚Ì,róaÜ…jH5àI™ñP¼ÆÌhÔº„‘Yrq#fÀ~–aÕµ¬Äº„qu[(«î_V|Z}`0fÆã°ºÿà‚\
+è…éZŒøÀ"eìR¿Úpª_0Ð2"
+6éªFZ+mGS½L°½©„ß÷Ø-àWŠóÁeô¡(Tƒ juŸïâ‘øP´•¨ss%Õ%Œªy½‰òZuüc¼ðÝ:Ùi—eð¹Á£¬š6:æ\4œXØÀ§›t4J÷Ç…Æoa
+ø)œÄǾ–LýkÎóÄgÓ
+?òÇÅ°u$QUêÊmg–÷`Ñn*|§·“à–ÐÒ+uÙ]þf¹^[õè.;¼›ãxÿðlø(^¡wÞ‡Do´ Š¨âD]­ƒò2×âÓx£Öõ̧Ý%¹åo8‡¯	.ø‘YÄ 	¿À=Ç$§áÖ2Óæ9'É™¶×I­ËÎe{-Û›Óx3ØOL\ûHü^w·œ¤ò確㍦ðZ¶7§ñfþÊ~2V>ô§’Hû¡ð½¢•æøü½”2î倎»&¯‘èåáf@ŠäôEÀ‡U{õæ­ósN¿)2­8`ßžÂ;3ÞY†sÒ802‰ JüÉ"Ã˯)óŒø[0Nƒ£ [вq2‰`3Í;#pêŸ~SpZq€Ï[ÊFIv F~Ùw'e„)Ò·«²Ò»T©Òø­a¦!¡®¬l¤L"ØÌBóäÜ›ú§Ã
+N*Žðeëß±(É{$ÊrÂ3ë>Cà9]‚€®wa.ûaœ ´¾”ȾËØÑD—ø=_Î>•}–0
+¨
+|¯Hk̝˜I˜ÆªÂÖPîÄ4ÒMC2ТQ3‰ 3‚Ü\7¡ŠQ-,Æ4x,fc6ìÜLÂÐ4r¹vç¦qo’Ä€›I™äæ¸Ñ0Œbad1&Åc1s#}ÔvH"‰¾ÎÖc8òûe-ʹ쳈i$ý¨"ypi$ñ*ŸU‡f‡/ä3\öiÄ4¢ZHŒÙñPÄÆüØ©™Di+pñNM³€iH–0Z6r&ljA±«ÎNQ˜†¢T1CÛ˜#;;“6bÅ®qÞÙi&0
+ÉjÁÊÆÎ$‚M-(võÑÙ)
+Õ0”baä1fÉ£qó$-àølVþp¶†rX¨º;—}61
+Îf€‹äÀ%“È_Yì¹(ÑJlÏVTöÉÄ4²ZðÆ$yVc†4^*PX¾ŠZ¼óÒ`’"Ì‚”™	˜e!nyʨY&S
+E­<‹1=ŠØ˜š
+˜®×ÐîÔ4øMC’ƒZвQ3 ³ü#À-C5Ëa¢a¨ÅÂÀbLŒ‡"öÈiº 3÷Èéî’\ùô,¾[V6´àªí²Ð‡Žµ,‡üjv¸ˆÐ
+h‘=q4bcÕ=>S4\ÆCK
+A4:h¶°!Á²IŒÏÑ-ºziÔ–>«'j-L±ã^‹N•Ù
+ÑŸ÷ݵÙ:ÞCS
+]}trBµYðM;&³ÇÏÐÅPðÑîÈHä#Sz¾*Îmæ' ]¢¢ÒWôvú.µÝò>ºå*™ÄË‘3ç\)ÀËòí3tÿЄüº8/	ïöÕAjë4 ²2Ÿ Ó*îè\o@|Ú]®nœŸ‹`ˆH:ävöÍró>䦕.;3þüÜ'7}óüœš¸º;0Ë· ú]ê>ãæoìøósŸÞöÍósq®ô¦‘«—Ä)Ùv9(›|µÜ·Ë9
+Úg¬(o7q’‚ΠW8òêB4£XYÜ>Cw4ŽnG §¦Æ[Ö:nÞÔæ™ñ¶7§Áaa´hÌL"¸Ì€à6ÆÌ@¨†@Tž‚Ûx(V~7 #Ö%L¶­î<'OK6½¹Ÿ9Xm-*­.aTÝ ƒûÊ©»×ŸVðû½€Çáä÷HÇ™÷¡øœQïoÓx-ø†Ñ\öIÃ4$'¨+GÝajÁ9Ã)-û¬¡†R,Œ<üéãq2b'§A¦q«È5²;7}ӐÜ`´lÜL"ÈÌÂp’Ãs3ª! Õ€'1äÄCñ³¢QëFf1,È9č˜e ûY2„U×r´íÁ*a\ÝB?ÈáXuÿú³âÓêƒ1/‡Õ˜3
+:}öÀoúì‘\ê‘ÍeŸ=LCrƒZ°2ùðÙ¿‰\]öÈÃ)-û졆R,Œ<ÆÌx4nCfìäT È4v¹Fwç¦ño’Ì‚–›I™ZÈÃIÏMQ˜†€TžÄÅkÌŒF­K™Å° ç7b–ìgÉV]ËJ¬K—YÈý ‡ceþígŧÕcf<«13ò2ŽÏqÁ}ô=nùÛÌ=²¹ì³‡iHnPZf>{¤€D.ÿ$üœ ËPTöÙC5·XyŒ™ñh܆ÌØɉ@‘iì*rîÎMãß4$?˜)wn&d–ƒ¹e)ãfyL5µð$†Ìx(^cf4j&dÂœC܈Y°Ÿ%CXu)±.a\=1lIRʪç0ýYkõÁ˜ÃêÁsu4ý/Mϡј´V;‡Fƒà¥Ù1-÷sh¦!§ÌÌ‚•ÙA?‡’†T»üDÛâ|p¹ŸCëŒXª;øv®î0|ü¹:GÊ$‚J΁u^kŸ}
+/>KÖ5†Ë2øÜàÑŠ
+VMs..[ØÀ÷çêCix2ñí)ðßòÏóõüË·§/¿ZÎú}¾·/§À烘ŒïKÌeZS:¿½ž~öþ‡óoÿt‚ñOÉ2å ~ßþ~‹øÛ›y¹Àðè
+4·œKÒ_ý
+]óÜæv†.|)+ýøá/—?Õwøs(äx~ƒsÛ\çµÿþBÕCKÒ
+ølúý¿~öíõûw_¼Y—Œ_ÀÒËÿýöߘ™<ºfÏ“%úL\õ¯þ|}÷õ7??ÿÇWÿþÛß<ýú	P5|TÖ¬†£Ç¾Ü†é‰ê=½ÿîÿÞ÷sÂTá–¸Ño¸cþÕo~ñÛÿݯ4>8EÌ0Nlpûð÷ß½ÿá¯þîØB 3\þÁBÀW®Ç43êáöY<5	‹\º­™³§˜)ƒ™hf~ýöô{÷½Ê°&|ã²ð[!,~ƒ#á§ÕäcćTKWº:I+Ô3$t
+M3ÖBi&6þº ”ŸO1roca¥c€fÁÊìãùd’½6{µ •qMö!e¨¡(TCQª…
+gÏ-Ç2-žZ4®7£yŽø°P½rÑ“ßµV·2Ùw´2ÆOé´0ÿBSí²|°©#
+C(F
+Ä
+¿@
+éý¯‡äG_ŠýQ^rs/›FŠÍ¿/s§‘bNîT¢C,l¢å¹Çøø„1b+]áˆW0–™{¤”KuÑò˜ÅS¥‰ 4ÚÀèV¾ôÂ\Ù ë\Þ+ÑæF]DÄo•ÃÐ,áX°+±u)ø¸^%ä—.
+[èeöñ|2	F=Ô8§æêCÊС)
+ÕP”baËãÙsÃNg"º·ÔÎ
+¬sËEÇŒ[ª÷2;pÄ2\cl/f€gžÝ—1Õ0ˆlaKâÀÄh¨øãÔäÎ^6-41ÙïµPªáZh궑òÜcGpŒÑÚš¨ù:)¨ó¬_H’ùÿ#ZO?q¨fÒ9‡‡Zïþò—ï±³Æ7L—…FD’ÜEìÔÿðî‡wÜåëÀ‹Æ3µÒ|þÏïßGՍ X§jæ1C˜A‚ÁcÄáÂŒÏ
+g2~|¸°·_<?ÿù¿ùáëoþH&W<彞Áq]küË×ß¼ûæùëw—3Œ¾~~ÿ½
+4~úÁÌÃ<
 endstream
 endobj
-2578 0 obj
+2573 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110925)
-/ModDate (D:20080610110925)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090458-05'00')
+/ModDate (D:20080528090458-05'00')
 >>
 endobj
-2579 0 obj
+2574 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-2580 0 obj
+2576 0 obj
 <<
-/BaseFont /ENQOUL#2BAlbanyAMT
-/FontDescriptor 2582 0 R
 /Type /Font
 /FirstChar 32
 /LastChar 119
-/Widths [ 600 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 600 600 600 600 600 0 600 0 600 600 600 0 0 0 0 0 0 600 0 0 600 600 600 0 0 600 0 0 0 600 600 600 600 0 600 600 0 600 0 0 0 0 0 0 0 0 0 0 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600]
-/Encoding /WinAnsiEncoding
+/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 278 278 556 556 556 556 556 0 556 0 556 556 278 0 0 0 0 0 0 667 0 0 722 667 611 0 0 278 0 0 0 833 722 778 667 0 722 667 0 722 0 0 0 0 0 0 0 0 0 0 0 556 0 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722]
 /Subtype /Type1
+/FontDescriptor 2063 0 R
+/BaseFont 2067 0 R
+/Encoding 2575 0 R
 >>
 endobj
-2581 0 obj
-7882
+2577 0 obj
+7897
 endobj
-2582 0 obj
-<<
-/Type /FontDescriptor
-/FontName /ENQOUL#2BAlbanyAMT
-/FontBBox [ 0 -186 593 667]
-/Flags 5
-/Ascent 667
-/CapHeight 667
-/Descent -186
-/ItalicAngle 0
-/StemV 88
-/AvgWidth 600
-/MaxWidth 600
-/MissingWidth 600
-/CharSet (/A/n/c/M/eight/o/d/N/nine/p/e/period/O/D/colon/q/f/slash/P/E/r/zero/g/F/one/s/h/R/t/two/i/S/three/u/j/I/v/k/four/U/w/l/a/six/m/space)
-/FontFile3 2583 0 R
->>
-endobj
-2583 0 obj
-<<
-/Subtype /Type1C
-/Filter /FlateDecode
-/Length 2584 0 R
->>
-stream
-xœ}X	TS×Ö¾rsTä°ò¼­- "Xbpm©(£ LQÂ
-­^dH …à€UDË¥Šu.«J("­CŸ­>^«í³ûöÞ¿þ“	¯ëï¿+ɹ÷œ³÷ùö·¿½"ÂÂŒ‰D#SbcÒd!+ô#wÁA$üÍL˜`ΡPá︋'Þi£Š­Dœ•9ge±ÿo¶?ÛÔXh¹Ö„¹H”½{ïÜôÙÆäuI›#ÂWº¸ºN5=™îããã+{óÆq^Bfòº4ÇwñÍ	)é©	i›f9ÎųSR’ã×¥È2’2câãâõË"cR68%§$gd¤ovtžëâèéá1Ý
-x†&§Æfe:†¤§¥;.qOX—•³ñ¿1-0-.$=>4#aé¼OÃæo\”™¾)yyÖú…›7DlI‰Iu|ßgš¯»ÇtO/ï÷b±”˜GL#ˆù„;±Œ"<ˆwˆp"˜˜N¼K,'NÄ
-b!áED‹o"’XLL!VKˆ÷ˆUD1‡%DÄ[Äxbá@Xc	‚&l	)aO¸cÈ	B.2åˆ^›Í0k0e^hÞkáfQ,¶ç‹ï“«Éë’pÉeJ9ÂbĶ÷GúŽì·±<nùÚj™Õw£üFõdtÒjŒå˜­ÖÖo[¯±Þm
-cg=jãgSAúGýN<´ñ"5ÄÂ,H4 Lz9‰ýIYRž_¡¬aÁƒÔ©UUÚBU6›H¢­%e…Ê|¹ZÿÚŠDÁYâR¦À+*õ\Éš
-¼¢@%cýÈà$†2^Š¶’@@›x/i´ÜÇgð6`ÃC]«=}f	3¤úmåùúmQ_4™môAÇ‚½É‡h('øJÍ>
-EŸ>øY}e³ÃçœNy0ûðfíF.•B\²ÄäŠYmt%‡MÙ;ÿªWȺ-K–1؉\vÁ»Ø‹G¼=Ý,¬¬¤1M‘µ¡…Æ»NEãísw°ïì¬mjg?Óí«á´T…¢¢ p箂BfUÔâ̹x¦™ÿ݁yO7˜=슉,eé[9»Ë•U{T:–n~&¡oÕ(+¶2tsž²@ÆÎ.dñ¢.^ÓbßÁl)L‡×⊁¬€a »˜ L²êô#m•~äL"wôM‡—bg=äùrý9ë²’Él#x:ÃêJÃêl6PÈR“à…^‹
-'DÓ#ys¸ Ì•"›wœÐ4ö•3àX¼úFƒ­Ó?‘-kñ¯¾o;Ïô<yæýW/Ýÿ•5¬ßÈÃ+,j÷×Úœi¡%FÛÓrA&¼”º™Ü¿ˆäG]áÇý1@–S°–nGcúßËžkM·Ï0t¾çÉÐiù
-¥Ã+éË^ßÉx¦Ó,_§ÙØjïýŸ™!À~åáo.ì´t’!8‹ž%ùr=KºâHtU(O$sŒÀT³õÀ‡µZ3L	WŠõ¸ ÐV˜ÆC¯ž’ØŽ€ùГ1#§êwÒSI¿SuÊå•…Õ,Dà¨µÚµŒuòÌÂK©÷8
-¬Ÿÿ–,},Ýž!ë€UA‘]’¾ê	tqŸàâìw÷Å‹ïº6¢	sx˜Â‹„}%åÚvÖæ5$=œÕîŠQ³urG£‘Ýï“ÁáXm¬,¨,(Ú±s»’Û0'+„C7ëfþkŠ·ÐýtçJ?×Ïu‡íó Œ1Vñ¢v^ð6Äø[)b‘²G>Èð7°0,À¼!  Eq¬ú‘h2š0I‘n GpüQ&Ê‚5Oð¦Ö¼t8¦é$ؽÄ[Nb/I`Ò»`ì”®Ÿ Ne’È’
-Yð¶ä"להÄÇZÊERs$“¼œ§2‚¿ƒ‡?øX=«ú…5Ð'¥ï߈Š8öãê,‘å?ÜatïåúÎ6•8Kr
-p<*Œñ _èŒÉféþH¡ú‚áÉ`´ÝHú>
-ÎÀ3ÄÁÙi6ŽCo÷/ì1A">Z)Ö ˆ2åŠê ÏŸnêÜÏïØy˜9[Äq»9j6SQ¤–ïfSʃT	5}qä6Ô[2¤WOPŸË°tüž¬®T/6(á<”!}€íú@®üH ûºz>óÎ$5%7æpÄ0uÍ'‡N…r- B$½Ëƒƒæ†{Kà!,60¹õw~K‹=}›©“ÂähR¦.¨Ú£®¨aÀ^RSX±5¿°@ÆD£É ¡Û¡Í…ÌQ)´UªÊj؁@É_xBçàMÖUÈóŠðôy o$oMÁÖçâLº)8“¥Ož­†Tº‹ú\
-#c*ÝÄI©ÖTmSç°(>!éæ—`vúài‡\í¶C›TÊ’åzÔ+÷`ÔsªØOögU¦q«¸°ôiïS¢Ï×<ü‹Ò(=}Bà	¦OçÇ+Íq@nnˆB’ç®`ÑuáXçI%Á+"‚4‚4±HB¶s'ª›šë´Ç8žÂ›8_”Ð/†ø` Ñìé‹nL#ÿ€in˜FÝÝÏi”«Ç\dÄl[̇®Õš —ˇ ‡o\$9努ªr#Ú…öŸânTcœËî0Ö Z[NCÓ{Z#̤ҤcÑ{Ã9Šr™µhCMÚ{$爲[yYyXy8ÿp^õFnEk"Å{¿7¿¹QIè =…•¸N-ÊW*rØ÷ñ8[UXÅл´*µŽÕHZÏåtb…?º|ïø–Æ”ì†ý	š¥*¯Š¢ÝYZ¼×fí¶êêñ­—º{¾L]SÆГrw«
-÷8hU•˜+šÛz®„r†Öl-ÀŒˆ
-fuúDÀ…dªéÐt«‰¤ç
-Œ3ÕµhP“í¥ëŸU_æÞjáà îM-1©“½	µh¬Ó\uÙºÊXXpÒCŽ1bm†p•J±‘ž¤S+úÐêŠIRI˜˜~bÉ©ÎœånP?¼g
-ƒŠÿ2I?0-
- ¡ÔrÀMÒu3bé"ßU.ƒâÿ6ìÞjâô K‰®H—W¤Èae IJºÑ2 #꧀<y´²P£ØþéÎJ&6s~ÎrŽ
-Š9ÞÎB-¤›ªé›ôûÌDЀ!ýVŸ}^Ã|‰ú÷0ÿ£<ôn-<”nUÊØp	&À¦Ž4àŠ¤F©–3ƒ´ó…"ðHçm~äe§àê){z’°L¨’Ò>&º&Ìa’_°wLM|ã&¶>ëÄÖÛ[ïÈk‹êòŽäToà’¨ÀùÓ0Í<¸ÀöO;wíÃBÊQ8pò‹%ÙêÂ=UØsTBk¢øk™·Àêñ­þöM§±)ºtõڐÊLUFufu^=WOÝè8ÿ ·#zi©nåJ­ƒ¶\]Ãþ*©.ª”Ð|Ó¶ôÅð³Ö˜Wöô&a±]©5¤³“+¬PÃP¯"éÓK—/M]à°*Ž?ÇÂ¥©¦®ò"~ëwaå÷_¹xy°€	ÕÄ…‰¸G™ˆ«È€³$ø£¨…²ÅHä#-%Ÿ]¿ñ+,C¦ƒ³N>„¸–9HV
-!žoj€ƒ©“«ç´¾ÿÁJÐeêu°zd!ÖÔ±@—)]ðsýFûxQ=Ä€bÍá©ø
-Vâ–aÂâjâÅM9¡>ñ¹@Ÿø†©>‰'ÁoÀJü†t`£ïá­V°†%h„ÚÓ0HÛNB0š/Î é›ü³7ú§ÀÄ‹&Q¬Å°½øI˜lÙ™l Q ¾›–SMù}a@išñÂ(‹B/zilw`¼ÉµJ»WYŽ·›‚¯Ey®}¸
-=#=çÏ÷òºý”gÝÿÕTÊ
-ð,C÷‚g!‹Ç^ ó¾>°`†Áè‰àc.„Ø=Ä(ÖCÑÌäÒy2}ë	jñ*rRÏ…oÅ_þßuä#d;ù4ϐƈ¨°Ë ÆÀ¿ÔgqŽq:oä€îÿÉâ7¬ŸÇÃ8Þ¦‹‡kƦ*G˜i÷aÄÏ[µäà/§%.Ê—­`¶m/*â¶Q
-ufwiqq)Ó{ðˆêG}{~ýGì<IØÞ”òÕ¸;;#Ì›¥Ïù½ò§;×_é`N[,X©¿E7¶_¿óÅï§Î)N°Ãnz]-ðAKÜKá}O`U)ÐÔ#áûÞЦÚpmÓ2#;HóWN6Ô594KŽcÑ­îaw‡3ú÷'¯ÕÄ^6[ŸÀÒå¨kø„Ï“¡‰¼öñ¹e±ë7ÏdÝpp-åɒ£ôÍþËkZ,bܱà”Š;¥§‚%tJé{]Íõ­ãŸúö¸ºúú{†6ÄÜNdè§s’ãW.?å‘߯¿>ú®¿3þÂœãL ìÃó{¾Z1oQèÊ€€Ð/;ow\ºË¢fúéÃëáBgù,î¸Û}ýÊÖhs=Ni³V8{Ò\ƒi±lw.WÈ-ÎI_àåÏes²REYaÙŽâí¥À"";‘ûōumØs0‚‚9ïÃh4rÊï!â{3Ÿu]h¹Ï3E—¤™k¶Éòr7¬‹ÛœÈQóÃ;¿{|åF÷Íö53³¥Ü®òMú³çíÁY!OMOXWŸú9[Iž<vääÉ”#	aøÁ¸¿ž£€øyZbb}šñùÑæ攣†µÂæ?FIKÔ»K¸2ªR¡V(?Í/bÐ÷ÿY²C¹k;·ã-¾ÑT–•iUŒ
-†__‚…\øM
-^þ@ sdîäÅ8Ig¾«˜ã{6àÉ Ç/¤Üõš›GÛ5¯iåZ¹FفäúÕº`n1å)Á§®ÎJNÞƒ½¾6³1­Mv“»Nè(‚ã¸æÞ)
-
-Ëݱ]É)°3
-u‰º„+e`\«x@‹ØaÿBèv`ŒÝ{ìo6BŸˆ™Rö¼´Dråì×WûžPôZ£j~5þéŒSB–§G%2Ù™òTNFT(*5媪RfïW×OÝ䨻ß,
-ŠÎNwsgÑ6”)“Ða„Rg즳º,Ib$Jo#øðÙ†VÁ}iqqIq1nî~øêðÉö+ãŸøã´òÃÜÔ8fKn¾ŒSPŠ
-…F]R²§‚©o<§»ÌQ÷®E-^›#c7+rw}ÄQ9Ûk}ëÅÃ…~þþÝW,¯=ñ1«,ÛQR¤'›B!ߓߘögœ•ŸÃ]Ÿäùƒ_n~Ü1»a0§myx¬×&Á‹¬Ì–"[a]×B½äê\Æ~¶ç\e	ÌLeŒ,C¼å‘¯Å‡HãYÛyÑ??‡3Xða»t§nWWÉݨî8rêÜÝÞ¶{œŽÓí¬Ø®Þ^º«Œ£4ª
-.ißÚE‹6®^É,IšÁ!ŠBs¢Ñ0²¿ç ^ù?ò˜çÇ”FHëNijöîk8Ѳkŝ+ýf„/^uæa»£‚+.:HÞR+̨ÅE¬¶–üb$où…•o5Š þ…ð%û
-endstream
-endobj
-2584 0 obj
-4109
-endobj
-2574 0 obj <<
-/D [2572 0 R /XYZ 151.701 685.529 null]
+2575 0 obj <<
+/Type /Encoding
+/Differences [32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]
 >> endobj
+2569 0 obj <<
+/D [2567 0 R /XYZ 151.701 685.529 null]
+>> endobj
 1748 0 obj <<
-/D [2572 0 R /XYZ 151.701 660.623 null]
+/D [2567 0 R /XYZ 151.701 660.623 null]
 >> endobj
-2575 0 obj <<
-/D [2572 0 R /XYZ 151.701 643.753 null]
+2570 0 obj <<
+/D [2567 0 R /XYZ 151.701 643.753 null]
 >> endobj
 162 0 obj <<
-/D [2572 0 R /XYZ 151.701 356.571 null]
+/D [2567 0 R /XYZ 151.701 353.594 null]
 >> endobj
-2576 0 obj <<
-/D [2572 0 R /XYZ 151.701 328.781 null]
+2571 0 obj <<
+/D [2567 0 R /XYZ 151.701 326.272 null]
 >> endobj
 166 0 obj <<
-/D [2572 0 R /XYZ 151.701 223.992 null]
+/D [2567 0 R /XYZ 151.701 223.055 null]
 >> endobj
-2577 0 obj <<
-/D [2572 0 R /XYZ 151.701 196.899 null]
+2572 0 obj <<
+/D [2567 0 R /XYZ 151.701 196.43 null]
 >> endobj
-2571 0 obj <<
+2566 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R >>
-/XObject << /Im5 2565 0 R >>
+/XObject << /Im5 2560 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2587 0 obj <<
+2580 0 obj <<
 /Length 2592      
 /Filter /FlateDecode
 >>
@@ -10393,21 +10158,21 @@
 ­!ËÁ\Pènþc"|¿}~øÇ@
 endstream
 endobj
-2586 0 obj <<
+2579 0 obj <<
 /Type /Page
-/Contents 2587 0 R
-/Resources 2585 0 R
+/Contents 2580 0 R
+/Resources 2578 0 R
 /MediaBox [0 0 612 792]
-/Parent 2549 0 R
+/Parent 2544 0 R
 >> endobj
-2588 0 obj <<
-/D [2586 0 R /XYZ 100.892 685.529 null]
+2581 0 obj <<
+/D [2579 0 R /XYZ 100.892 685.529 null]
 >> endobj
-2585 0 obj <<
+2578 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2594 0 obj <<
+2587 0 obj <<
 /Length 2055      
 /Filter /FlateDecode
 >>
@@ -10434,43 +10199,43 @@
 ðŽˆªv™.‰}µÅô ÜÖ¿+Œ¿ÐE¼¥6®ð·“uã;Ä£péü驃ç\Ө˾M@„•® Tª°Y¯%dódª†QÉÀµUòOvjkéQœÔŸ^Ú#¹·àê}4ïwÿ.Ý„y
 endstream
 endobj
-2593 0 obj <<
+2586 0 obj <<
 /Type /Page
-/Contents 2594 0 R
-/Resources 2592 0 R
+/Contents 2587 0 R
+/Resources 2585 0 R
 /MediaBox [0 0 612 792]
-/Parent 2597 0 R
-/Annots [ 2589 0 R 2596 0 R 2590 0 R ]
+/Parent 2590 0 R
+/Annots [ 2582 0 R 2589 0 R 2583 0 R ]
 >> endobj
-2589 0 obj <<
+2582 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.112 470.407 511.352 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (small) >>
 >> endobj
-2596 0 obj <<
+2589 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 456.858 212.728 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (small) >>
 >> endobj
-2590 0 obj <<
+2583 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.406 456.858 290.729 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (dhcp01) >>
 >> endobj
-2595 0 obj <<
-/D [2593 0 R /XYZ 151.701 685.529 null]
+2588 0 obj <<
+/D [2586 0 R /XYZ 151.701 685.529 null]
 >> endobj
-2592 0 obj <<
+2585 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2600 0 obj <<
+2593 0 obj <<
 /Length 1805      
 /Filter /FlateDecode
 >>
@@ -10493,41 +10258,41 @@
 ä’Hý8>VFØ<ˆ1Ã	©¹UT®€1ÝâO!߇€ßÑñ×´üµw;ˆ7FñûÞ-‡XXPî»ø eµr6_r&]?‹Iï¹ÏT”•À‰¿|)XLçJ?Æ`Ä’‡ìU‰×2¥òûWήê¯MI¡ääá£Cx,é[²c)Iž¶…Gíá?wg¥•
 endstream
 endobj
-2599 0 obj <<
+2592 0 obj <<
 /Type /Page
-/Contents 2600 0 R
-/Resources 2598 0 R
+/Contents 2593 0 R
+/Resources 2591 0 R
 /MediaBox [0 0 612 792]
-/Parent 2597 0 R
-/Annots [ 2591 0 R ]
+/Parent 2590 0 R
+/Annots [ 2584 0 R ]
 >> endobj
-2591 0 obj <<
+2584 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.32 592.59 247.04 604.279]
 /Subtype /Link
 /A << /S /GoTo /D (ch4memoryest) >>
 >> endobj
-2601 0 obj <<
-/D [2599 0 R /XYZ 100.892 685.529 null]
+2594 0 obj <<
+/D [2592 0 R /XYZ 100.892 685.529 null]
 >> endobj
 170 0 obj <<
-/D [2599 0 R /XYZ 100.892 660.623 null]
+/D [2592 0 R /XYZ 100.892 660.623 null]
 >> endobj
-2602 0 obj <<
-/D [2599 0 R /XYZ 100.892 641.897 null]
+2595 0 obj <<
+/D [2592 0 R /XYZ 100.892 641.897 null]
 >> endobj
 1496 0 obj <<
-/D [2599 0 R /XYZ 100.892 580.733 null]
+/D [2592 0 R /XYZ 100.892 580.733 null]
 >> endobj
-2603 0 obj <<
-/D [2599 0 R /XYZ 100.892 563.862 null]
+2596 0 obj <<
+/D [2592 0 R /XYZ 100.892 563.862 null]
 >> endobj
-2598 0 obj <<
+2591 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2607 0 obj <<
+2600 0 obj <<
 /Length 1689      
 /Filter /FlateDecode
 >>
@@ -10548,35 +10313,35 @@
  -‘^°HÞ½`‘f§@¦þn!vG€C; ps1øN<zÇã5å&)C«CÉx±£ÝSWºk¹Oœƒúlg³
 endstream
 endobj
-2606 0 obj <<
+2599 0 obj <<
 /Type /Page
-/Contents 2607 0 R
-/Resources 2605 0 R
+/Contents 2600 0 R
+/Resources 2598 0 R
 /MediaBox [0 0 612 792]
-/Parent 2597 0 R
-/Annots [ 2604 0 R ]
+/Parent 2590 0 R
+/Annots [ 2597 0 R ]
 >> endobj
-2604 0 obj <<
+2597 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [427.614 450.714 497.334 462.403]
 /Subtype /Link
 /A << /S /GoTo /D (ch4diskest) >>
 >> endobj
-2608 0 obj <<
-/D [2606 0 R /XYZ 151.701 685.529 null]
+2601 0 obj <<
+/D [2599 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1497 0 obj <<
-/D [2606 0 R /XYZ 151.701 426.837 null]
+/D [2599 0 R /XYZ 151.701 426.837 null]
 >> endobj
-2609 0 obj <<
-/D [2606 0 R /XYZ 151.701 409.967 null]
+2602 0 obj <<
+/D [2599 0 R /XYZ 151.701 409.967 null]
 >> endobj
-2605 0 obj <<
+2598 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2613 0 obj <<
+2606 0 obj <<
 /Length 2061      
 /Filter /FlateDecode
 >>
@@ -10596,41 +10361,41 @@
 @\vö
 endstream
 endobj
-2612 0 obj <<
+2605 0 obj <<
 /Type /Page
-/Contents 2613 0 R
-/Resources 2611 0 R
+/Contents 2606 0 R
+/Resources 2604 0 R
 /MediaBox [0 0 612 792]
-/Parent 2597 0 R
-/Annots [ 2610 0 R ]
+/Parent 2590 0 R
+/Annots [ 2603 0 R ]
 >> endobj
-2610 0 obj <<
+2603 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 398.839 151.961 410.528]
 /Subtype /Link
 /A << /S /GoTo /D (ch04net) >>
 >> endobj
-2614 0 obj <<
-/D [2612 0 R /XYZ 100.892 685.529 null]
+2607 0 obj <<
+/D [2605 0 R /XYZ 100.892 685.529 null]
 >> endobj
 174 0 obj <<
-/D [2612 0 R /XYZ 100.892 660.623 null]
+/D [2605 0 R /XYZ 100.892 660.623 null]
 >> endobj
-2615 0 obj <<
-/D [2612 0 R /XYZ 100.892 644.027 null]
+2608 0 obj <<
+/D [2605 0 R /XYZ 100.892 644.027 null]
 >> endobj
 178 0 obj <<
-/D [2612 0 R /XYZ 100.892 454.568 null]
+/D [2605 0 R /XYZ 100.892 454.568 null]
 >> endobj
-2616 0 obj <<
-/D [2612 0 R /XYZ 100.892 422.577 null]
+2609 0 obj <<
+/D [2605 0 R /XYZ 100.892 422.577 null]
 >> endobj
-2611 0 obj <<
+2604 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R /F54 1912 0 R /F60 1917 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2620 0 obj <<
+2613 0 obj <<
 /Length 2559      
 /Filter /FlateDecode
 >>
@@ -10659,28 +10424,28 @@
 ÷¡\¸Ú~ÿí»5TSß-	5´43?Á9ùc*I…·-Mâ—/|ÈF€|²uäZÕÙéðì-RŠÐ¥J;ÅW3fp,ÌÑjœºRСŒ,%U}õá¢RSCàh(õÄ ðöÙS„×?"EB¸Y2L*à(’ÿÆ0zb\‰³ÆìûšétaaÈG„5ÇétQÁP¹9žáÚü&(%
 endstream
 endobj
-2619 0 obj <<
+2612 0 obj <<
 /Type /Page
-/Contents 2620 0 R
-/Resources 2618 0 R
+/Contents 2613 0 R
+/Resources 2611 0 R
 /MediaBox [0 0 612 792]
-/Parent 2597 0 R
-/Annots [ 2617 0 R ]
+/Parent 2590 0 R
+/Annots [ 2610 0 R ]
 >> endobj
-2617 0 obj <<
+2610 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 138.879 425.939 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTOOLS.EXE)>>
 >> endobj
-2621 0 obj <<
-/D [2619 0 R /XYZ 151.701 685.529 null]
+2614 0 obj <<
+/D [2612 0 R /XYZ 151.701 685.529 null]
 >> endobj
-2618 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F54 1912 0 R /F15 1133 0 R /F60 1917 0 R /F59 1905 0 R /F51 1134 0 R /F30 1928 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R /F61 1976 0 R /F92 2622 0 R >>
+2611 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F54 1912 0 R /F15 1133 0 R /F60 1917 0 R /F59 1905 0 R /F51 1134 0 R /F30 1928 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R /F61 1976 0 R /F92 2615 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2626 0 obj <<
+2619 0 obj <<
 /Length 1471      
 /Filter /FlateDecode
 >>
@@ -10700,62 +10465,62 @@
 ˆ<Oói2Ba븹9šsïOR^ÄÅãK9i®ý¿+/ãÓTm­«w÷ÓðAãˆÆœÊCN§¢ö<LPÙ9°šp¸·áìyb¢Û°{±äß&Ø„EG©œ,s]7ü€BÁFº3‰¶iç•Ì¹x°éBÿ…ÿå²
 endstream
 endobj
-2625 0 obj <<
+2618 0 obj <<
 /Type /Page
-/Contents 2626 0 R
-/Resources 2624 0 R
+/Contents 2619 0 R
+/Resources 2617 0 R
 /MediaBox [0 0 612 792]
-/Parent 2597 0 R
-/Annots [ 2623 0 R ]
+/Parent 2590 0 R
+/Annots [ 2616 0 R ]
 >> endobj
-2623 0 obj <<
+2616 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [188.168 213.903 238.524 225.593]
 /Subtype /Link
 /A << /S /GoTo /D (ch04net) >>
 >> endobj
-2627 0 obj <<
-/D [2625 0 R /XYZ 100.892 685.529 null]
+2620 0 obj <<
+/D [2618 0 R /XYZ 100.892 685.529 null]
 >> endobj
-2628 0 obj <<
-/D [2625 0 R /XYZ 100.892 503.879 null]
+2621 0 obj <<
+/D [2618 0 R /XYZ 100.892 503.879 null]
 >> endobj
-2629 0 obj <<
-/D [2625 0 R /XYZ 100.892 483.09 null]
+2622 0 obj <<
+/D [2618 0 R /XYZ 100.892 483.09 null]
 >> endobj
-2630 0 obj <<
-/D [2625 0 R /XYZ 100.892 462.301 null]
+2623 0 obj <<
+/D [2618 0 R /XYZ 100.892 462.301 null]
 >> endobj
-2631 0 obj <<
-/D [2625 0 R /XYZ 100.892 441.512 null]
+2624 0 obj <<
+/D [2618 0 R /XYZ 100.892 441.512 null]
 >> endobj
-2632 0 obj <<
-/D [2625 0 R /XYZ 100.892 420.722 null]
+2625 0 obj <<
+/D [2618 0 R /XYZ 100.892 420.722 null]
 >> endobj
-2633 0 obj <<
-/D [2625 0 R /XYZ 100.892 399.933 null]
+2626 0 obj <<
+/D [2618 0 R /XYZ 100.892 399.933 null]
 >> endobj
-2634 0 obj <<
-/D [2625 0 R /XYZ 100.892 381.265 null]
+2627 0 obj <<
+/D [2618 0 R /XYZ 100.892 381.265 null]
 >> endobj
-2635 0 obj <<
-/D [2625 0 R /XYZ 100.892 358.354 null]
+2628 0 obj <<
+/D [2618 0 R /XYZ 100.892 358.354 null]
 >> endobj
 182 0 obj <<
-/D [2625 0 R /XYZ 100.892 302.762 null]
+/D [2618 0 R /XYZ 100.892 302.762 null]
 >> endobj
-2636 0 obj <<
-/D [2625 0 R /XYZ 100.892 276.133 null]
+2629 0 obj <<
+/D [2618 0 R /XYZ 100.892 276.133 null]
 >> endobj
-2637 0 obj <<
-/D [2625 0 R /XYZ 100.892 214.899 null]
+2630 0 obj <<
+/D [2618 0 R /XYZ 100.892 214.899 null]
 >> endobj
-2624 0 obj <<
+2617 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F54 1912 0 R /F17 1131 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2640 0 obj <<
+2633 0 obj <<
 /Length 1410      
 /Filter /FlateDecode
 >>
@@ -10772,27 +10537,27 @@
 ¿Ë=2á’åé|F!|‡Ùm†ŠÕÛ{ø…ÁÜd±„\ü±—ž‹Nû9Ê/Ý]¡Ë?ÑR½¶YG5þŒÂŽãG’ïè³=¶ÚÂs¼…TnÛãçþý	€àÏÀ¾ðûð,?Ãù
 endstream
 endobj
-2639 0 obj <<
+2632 0 obj <<
 /Type /Page
-/Contents 2640 0 R
-/Resources 2638 0 R
+/Contents 2633 0 R
+/Resources 2631 0 R
 /MediaBox [0 0 612 792]
-/Parent 2644 0 R
+/Parent 2637 0 R
 >> endobj
-2641 0 obj <<
-/D [2639 0 R /XYZ 151.701 685.529 null]
+2634 0 obj <<
+/D [2632 0 R /XYZ 151.701 685.529 null]
 >> endobj
-2642 0 obj <<
-/D [2639 0 R /XYZ 151.701 585.305 null]
+2635 0 obj <<
+/D [2632 0 R /XYZ 151.701 585.305 null]
 >> endobj
-2643 0 obj <<
-/D [2639 0 R /XYZ 151.701 234.292 null]
+2636 0 obj <<
+/D [2632 0 R /XYZ 151.701 234.292 null]
 >> endobj
-2638 0 obj <<
+2631 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2648 0 obj <<
+2641 0 obj <<
 /Length 1640      
 /Filter /FlateDecode
 >>
@@ -10812,35 +10577,35 @@
 Ïø_J=HQnnèÑ7À/|(h¥SùÓóÊ’Лø×^7ÐÜ5ËàŸ“—2‡¶ .TYb¥"»Í!ãK+¶nõyßw9‚ÿçFO
 endstream
 endobj
-2647 0 obj <<
+2640 0 obj <<
 /Type /Page
-/Contents 2648 0 R
-/Resources 2646 0 R
+/Contents 2641 0 R
+/Resources 2639 0 R
 /MediaBox [0 0 612 792]
-/Parent 2644 0 R
-/Annots [ 2645 0 R ]
+/Parent 2637 0 R
+/Annots [ 2638 0 R ]
 >> endobj
-2645 0 obj <<
+2638 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [172.986 543.686 242.706 555.375]
 /Subtype /Link
 /A << /S /GoTo /D (ch4natfw) >>
 >> endobj
-2649 0 obj <<
-/D [2647 0 R /XYZ 100.892 685.529 null]
+2642 0 obj <<
+/D [2640 0 R /XYZ 100.892 685.529 null]
 >> endobj
-2650 0 obj <<
-/D [2647 0 R /XYZ 100.892 620.444 null]
+2643 0 obj <<
+/D [2640 0 R /XYZ 100.892 620.444 null]
 >> endobj
-2651 0 obj <<
-/D [2647 0 R /XYZ 100.892 544.682 null]
+2644 0 obj <<
+/D [2640 0 R /XYZ 100.892 544.682 null]
 >> endobj
-2646 0 obj <<
+2639 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F30 1928 0 R /F59 1905 0 R /F31 1929 0 R /F61 1976 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2658 0 obj <<
+2651 0 obj <<
 /Length 1736      
 /Filter /FlateDecode
 >>
@@ -10862,58 +10627,58 @@
 Œº±‡ÏcªÞTveržðéKEò¼®™è>–*§¾¥ë®,`ÚØ“­ÆY¾é7ÕÕH0<_®c‹h+
 endstream
 endobj
-2657 0 obj <<
+2650 0 obj <<
 /Type /Page
-/Contents 2658 0 R
-/Resources 2656 0 R
+/Contents 2651 0 R
+/Resources 2649 0 R
 /MediaBox [0 0 612 792]
-/Parent 2644 0 R
-/Annots [ 2653 0 R 2654 0 R 2655 0 R ]
+/Parent 2637 0 R
+/Annots [ 2646 0 R 2647 0 R 2648 0 R ]
 >> endobj
-2653 0 obj <<
+2646 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [343.114 345.736 412.801 357.426]
 /Subtype /Link
 /A << /S /GoTo /D (promisnet) >>
 >> endobj
-2654 0 obj <<
+2647 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.449 345.736 487.136 357.426]
 /Subtype /Link
 /A << /S /GoTo /D (promisnetsvca) >>
 >> endobj
-2655 0 obj <<
+2648 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.978 331.581 247.081 344.482]
 /Subtype /Link
 /A << /S /GoTo /D (promisnetsvcb) >>
 >> endobj
-2659 0 obj <<
-/D [2657 0 R /XYZ 151.701 685.529 null]
+2652 0 obj <<
+/D [2650 0 R /XYZ 151.701 685.529 null]
 >> endobj
 186 0 obj <<
-/D [2657 0 R /XYZ 151.701 617.897 null]
+/D [2650 0 R /XYZ 151.701 617.897 null]
 >> endobj
-2660 0 obj <<
-/D [2657 0 R /XYZ 151.701 590.385 null]
+2653 0 obj <<
+/D [2650 0 R /XYZ 151.701 590.385 null]
 >> endobj
-2661 0 obj <<
-/D [2657 0 R /XYZ 151.701 528.268 null]
+2654 0 obj <<
+/D [2650 0 R /XYZ 151.701 528.268 null]
 >> endobj
-2662 0 obj <<
-/D [2657 0 R /XYZ 151.701 368.405 null]
+2655 0 obj <<
+/D [2650 0 R /XYZ 151.701 368.405 null]
 >> endobj
-2663 0 obj <<
-/D [2657 0 R /XYZ 151.701 307.297 null]
->> endobj
 2656 0 obj <<
+/D [2650 0 R /XYZ 151.701 307.297 null]
+>> endobj
+2649 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2671 0 obj <<
+2664 0 obj <<
 /Length 1266      
 /Filter /FlateDecode
 >>
@@ -10926,49 +10691,49 @@
 çpS d³hµñ=m´&þ.m¾ï»·¦5↠DúÍйµªœ”w`ðû®æéÁ¥˜|"ðñ½Ã>qŒ/ٺVæ’GA`À8¹Smƪÿ|ýªiìì?lÜor(·|â	?Úæ5¢L·¶w|×Óº·µyo_mogòr(º~jݘiÕ–¶·íÎ2ºM‘•«’jçõZ©nç8­UÌÆ°&àßYVtÝj¨*ƒ5ÍsŽn‡&§úAo¦Øy±éÇ“u7ôF)È—£^bWøAö/;l––
 endstream
 endobj
-2670 0 obj <<
+2663 0 obj <<
 /Type /Page
-/Contents 2671 0 R
-/Resources 2669 0 R
+/Contents 2664 0 R
+/Resources 2662 0 R
 /MediaBox [0 0 612 792]
-/Parent 2644 0 R
-/Annots [ 2667 0 R 2668 0 R 2675 0 R ]
+/Parent 2637 0 R
+/Annots [ 2660 0 R 2661 0 R 2668 0 R ]
 >> endobj
-2667 0 obj <<
+2660 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [231.658 276.202 420.788 287.891]
 /Subtype /Link
 /A << /S /GoTo /D (small) >>
 >> endobj
-2668 0 obj <<
+2661 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [427.187 276.202 460.543 287.891]
 /Subtype /Link
 /A << /S /GoTo /D (initGrps) >>
 >> endobj
-2675 0 obj <<
+2668 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [127.168 262.652 169.871 274.342]
 /Subtype /Link
 /A << /S /GoTo /D (initGrps) >>
 >> endobj
-2672 0 obj <<
-/D [2670 0 R /XYZ 100.892 685.529 null]
+2665 0 obj <<
+/D [2663 0 R /XYZ 100.892 685.529 null]
 >> endobj
-2673 0 obj <<
-/D [2670 0 R /XYZ 100.892 660.623 null]
+2666 0 obj <<
+/D [2663 0 R /XYZ 100.892 660.623 null]
 >> endobj
-2674 0 obj <<
-/D [2670 0 R /XYZ 100.892 315.45 null]
+2667 0 obj <<
+/D [2663 0 R /XYZ 100.892 315.45 null]
 >> endobj
-2669 0 obj <<
+2662 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2678 0 obj <<
+2671 0 obj <<
 /Length 1445      
 /Filter /FlateDecode
 >>
@@ -10983,24 +10748,24 @@
 fmôºwÌþ/ÅÁösd’ÁoT]cuÎL“Ôãél~*½y”F³Ws“œöïão¡1‰ph“d›7rf¶8¾ëò£WF-á+·½™¾Ïì-[ í9~gŽÂ9Wrzù‚ŸÝo~@d;Œ3dû?8|<Ñ´0VÈòŸèf}ì– Þ=“q׿½~VÇiê×·«Å·X?H
 endstream
 endobj
-2677 0 obj <<
+2670 0 obj <<
 /Type /Page
-/Contents 2678 0 R
-/Resources 2676 0 R
+/Contents 2671 0 R
+/Resources 2669 0 R
 /MediaBox [0 0 612 792]
-/Parent 2644 0 R
+/Parent 2637 0 R
 >> endobj
-2679 0 obj <<
-/D [2677 0 R /XYZ 151.701 685.529 null]
+2672 0 obj <<
+/D [2670 0 R /XYZ 151.701 685.529 null]
 >> endobj
-2680 0 obj <<
-/D [2677 0 R /XYZ 151.701 405.778 null]
+2673 0 obj <<
+/D [2670 0 R /XYZ 151.701 405.778 null]
 >> endobj
-2676 0 obj <<
+2669 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2683 0 obj <<
+2676 0 obj <<
 /Length 1807      
 /Filter /FlateDecode
 >>
@@ -11023,33 +10788,33 @@
 €X«€x§¹ÅZiÄÉæÙˆ6Àèd—m©ï¨’€X¶çƒË´;hëPF™+LB©_ò¸UCÓä¡c WšÜÂø[‹=xÞ(-ÑÁphÉáâÅ`›’ÚȜݏšuÀ¶á¡yw  v;ÛÁFè'ŸŠÜs qRØZÂèîyE0êu6g׍Ý(¿è,FÞñÙ+U«úú,¸ï››Í_<U)Ý
 endstream
 endobj
-2682 0 obj <<
+2675 0 obj <<
 /Type /Page
-/Contents 2683 0 R
-/Resources 2681 0 R
+/Contents 2676 0 R
+/Resources 2674 0 R
 /MediaBox [0 0 612 792]
-/Parent 2644 0 R
+/Parent 2637 0 R
 >> endobj
-2684 0 obj <<
-/D [2682 0 R /XYZ 100.892 685.529 null]
+2677 0 obj <<
+/D [2675 0 R /XYZ 100.892 685.529 null]
 >> endobj
-2685 0 obj <<
-/D [2682 0 R /XYZ 100.892 599.153 null]
+2678 0 obj <<
+/D [2675 0 R /XYZ 100.892 599.153 null]
 >> endobj
-2686 0 obj <<
-/D [2682 0 R /XYZ 100.892 550.763 null]
+2679 0 obj <<
+/D [2675 0 R /XYZ 100.892 550.763 null]
 >> endobj
-2687 0 obj <<
-/D [2682 0 R /XYZ 100.892 475.274 null]
+2680 0 obj <<
+/D [2675 0 R /XYZ 100.892 475.274 null]
 >> endobj
-2688 0 obj <<
-/D [2682 0 R /XYZ 100.892 221.711 null]
->> endobj
 2681 0 obj <<
+/D [2675 0 R /XYZ 100.892 221.711 null]
+>> endobj
+2674 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R /F60 1917 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2691 0 obj <<
+2684 0 obj <<
 /Length 1077      
 /Filter /FlateDecode
 >>
@@ -11062,24 +10827,24 @@
 »˜b!èZ}‡f¿'Ÿ™Œ‡˜þ-ÕqLÓ± Dkqaœõin\jÓg§!ÛI-ß:ÕFOúÐ~?;Î1wÌŠí¬	øÏ&éÿ፰“)2¬ðüÒK&
 endstream
 endobj
-2690 0 obj <<
+2683 0 obj <<
 /Type /Page
-/Contents 2691 0 R
-/Resources 2689 0 R
+/Contents 2684 0 R
+/Resources 2682 0 R
 /MediaBox [0 0 612 792]
-/Parent 2694 0 R
+/Parent 2687 0 R
 >> endobj
-2692 0 obj <<
-/D [2690 0 R /XYZ 151.701 685.529 null]
+2685 0 obj <<
+/D [2683 0 R /XYZ 151.701 685.529 null]
 >> endobj
-2693 0 obj <<
-/D [2690 0 R /XYZ 151.701 414.811 null]
+2686 0 obj <<
+/D [2683 0 R /XYZ 151.701 414.811 null]
 >> endobj
-2689 0 obj <<
+2682 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2709 0 obj <<
+2702 0 obj <<
 /Length 1914      
 /Filter /FlateDecode
 >>
@@ -11103,137 +10868,137 @@
 kÔþUƒ§rYa*Ó¼7Þ=£Æ|úËË
 endstream
 endobj
-2708 0 obj <<
+2701 0 obj <<
 /Type /Page
-/Contents 2709 0 R
-/Resources 2707 0 R
+/Contents 2702 0 R
+/Resources 2700 0 R
 /MediaBox [0 0 612 792]
-/Parent 2694 0 R
-/Annots [ 2695 0 R 2696 0 R 2697 0 R 2698 0 R 2699 0 R 2715 0 R 2700 0 R 2701 0 R 2702 0 R 2703 0 R 2704 0 R 2705 0 R 2706 0 R ]
+/Parent 2687 0 R
+/Annots [ 2688 0 R 2689 0 R 2690 0 R 2691 0 R 2692 0 R 2708 0 R 2693 0 R 2694 0 R 2695 0 R 2696 0 R 2697 0 R 2698 0 R 2699 0 R ]
 >> endobj
-2695 0 obj <<
+2688 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [127.168 530.88 196.888 542.569]
 /Subtype /Link
 /A << /S /GoTo /D (prom-dhcp) >>
 >> endobj
-2696 0 obj <<
+2689 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [158.138 496.188 227.737 507.878]
 /Subtype /Link
 /A << /S /GoTo /D (ch4namedcfg) >>
 >> endobj
-2697 0 obj <<
+2690 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.314 496.188 301.912 507.878]
 /Subtype /Link
 /A << /S /GoTo /D (ch4namedvarfwd) >>
 >> endobj
-2698 0 obj <<
+2691 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [327.581 496.188 397.179 507.878]
 /Subtype /Link
 /A << /S /GoTo /D (ch4namedvarrev) >>
 >> endobj
-2699 0 obj <<
+2692 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.49 461.497 460.543 473.187]
 /Subtype /Link
 /A << /S /GoTo /D (namedrscfiles) >>
 >> endobj
-2715 0 obj <<
+2708 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [127.168 450.069 160.676 459.637]
 /Subtype /Link
 /A << /S /GoTo /D (namedrscfiles) >>
 >> endobj
-2700 0 obj <<
+2693 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [140.091 391.318 215.266 406.86]
 /Subtype /Link
 /A << /S /GoTo /D (loopback) >>
 >> endobj
-2701 0 obj <<
+2694 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [140.091 377.37 215.266 392.912]
 /Subtype /Link
 /A << /S /GoTo /D (dnsloopy) >>
 >> endobj
-2702 0 obj <<
+2695 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [140.091 363.423 215.266 378.964]
 /Subtype /Link
 /A << /S /GoTo /D (roothint) >>
 >> endobj
-2703 0 obj <<
+2696 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [140.091 349.475 215.266 365.017]
 /Subtype /Link
 /A << /S /GoTo /D (abmasbiz) >>
 >> endobj
-2704 0 obj <<
+2697 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [140.091 335.527 215.266 351.069]
 /Subtype /Link
 /A << /S /GoTo /D (abmasus) >>
 >> endobj
-2705 0 obj <<
+2698 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [140.091 321.58 215.266 337.121]
 /Subtype /Link
 /A << /S /GoTo /D (eth1zone) >>
 >> endobj
-2706 0 obj <<
+2699 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [140.091 307.632 215.266 323.174]
 /Subtype /Link
 /A << /S /GoTo /D (eth2zone) >>
 >> endobj
-2710 0 obj <<
-/D [2708 0 R /XYZ 100.892 685.529 null]
+2703 0 obj <<
+/D [2701 0 R /XYZ 100.892 685.529 null]
 >> endobj
 190 0 obj <<
-/D [2708 0 R /XYZ 100.892 660.623 null]
+/D [2701 0 R /XYZ 100.892 660.623 null]
 >> endobj
-2711 0 obj <<
-/D [2708 0 R /XYZ 100.892 641.703 null]
+2704 0 obj <<
+/D [2701 0 R /XYZ 100.892 641.703 null]
 >> endobj
-2712 0 obj <<
-/D [2708 0 R /XYZ 100.892 566.567 null]
+2705 0 obj <<
+/D [2701 0 R /XYZ 100.892 566.567 null]
 >> endobj
-2713 0 obj <<
-/D [2708 0 R /XYZ 100.892 531.876 null]
+2706 0 obj <<
+/D [2701 0 R /XYZ 100.892 531.876 null]
 >> endobj
-2714 0 obj <<
-/D [2708 0 R /XYZ 100.892 483.029 null]
+2707 0 obj <<
+/D [2701 0 R /XYZ 100.892 483.029 null]
 >> endobj
 1850 0 obj <<
-/D [2708 0 R /XYZ 100.892 438.292 null]
+/D [2701 0 R /XYZ 100.892 438.292 null]
 >> endobj
-2716 0 obj <<
-/D [2708 0 R /XYZ 100.892 420.21 null]
+2709 0 obj <<
+/D [2701 0 R /XYZ 100.892 420.21 null]
 >> endobj
-2717 0 obj <<
-/D [2708 0 R /XYZ 100.892 293.065 null]
+2710 0 obj <<
+/D [2701 0 R /XYZ 100.892 293.065 null]
 >> endobj
-2707 0 obj <<
+2700 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2731 0 obj <<
+2724 0 obj <<
 /Length 1981      
 /Filter /FlateDecode
 >>
@@ -11258,39 +11023,39 @@
 ^<ŒaEÊcy‹âÑÙ­DCáú¼¹²ô’ÉËjS²²¦"·€EÖ“b²×>JCÿž‚šÆ@"ñäb7~¤qoÔâQ.±Ä¸ƒ÷QQ€Ã…”ë|¸ñ jÙUh)øv­M¸w¤SÒo¡—0ýÁQgØëf¤ÁFîço‘lµ¡sU菑³óR$›àËUÏïüñý´nÝ $[ÃúÙò "Ö}ÙøIþmù—ÈUÅô•ñ¸zš¿ûê÷4ÃãóÿxÎä«·Ge:t³X+B›E=jæå†åÊ<HXUvzxl;»¬hÕ/vyB¨|>¾òxtϳPxŒgl¡|S¡Éâßæ€Æš½ð>ŸÁ+[ùnÀr{^öýžìv+‘‹¥²¤Þžo”qÜ+L²e2àrÌñ†ÌžWWw{Åõ ·Sÿý‘ó.í]^]«^3€y’Ð Ya^|u^Å0nhÓæö5ƒ$ùU`¹âI§G0E…»®+,¸ BûùE¢‡¶Š{x7—™	¹õzÑúV_ Âgë_Xe Dß+.Im vþ' ¼m¿ŸÅ÷¡€þœüOßséþZ¿_ýóPØÛ×áú3Ы³|¼­ÝßÀT)”žáLý!?wgþ~­ð”/üµºû$Ýë»;\JÄ:²ä þó#ßs¾]ý¡ò½£NçácýW‡ñâÿ8îbÓð}û¸ù/£ï!¢
 endstream
 endobj
-2730 0 obj <<
+2723 0 obj <<
 /Type /Page
-/Contents 2731 0 R
-/Resources 2729 0 R
+/Contents 2724 0 R
+/Resources 2722 0 R
 /MediaBox [0 0 612 792]
-/Parent 2694 0 R
+/Parent 2687 0 R
 >> endobj
-2732 0 obj <<
-/D [2730 0 R /XYZ 151.701 685.529 null]
+2725 0 obj <<
+/D [2723 0 R /XYZ 151.701 685.529 null]
 >> endobj
-2733 0 obj <<
-/D [2730 0 R /XYZ 151.701 633.993 null]
+2726 0 obj <<
+/D [2723 0 R /XYZ 151.701 633.993 null]
 >> endobj
 194 0 obj <<
-/D [2730 0 R /XYZ 151.701 450.876 null]
+/D [2723 0 R /XYZ 151.701 450.876 null]
 >> endobj
-2734 0 obj <<
-/D [2730 0 R /XYZ 151.701 424.557 null]
+2727 0 obj <<
+/D [2723 0 R /XYZ 151.701 424.557 null]
 >> endobj
-2735 0 obj <<
-/D [2730 0 R /XYZ 151.701 295.887 null]
+2728 0 obj <<
+/D [2723 0 R /XYZ 151.701 295.887 null]
 >> endobj
-2736 0 obj <<
-/D [2730 0 R /XYZ 151.701 261.858 null]
+2729 0 obj <<
+/D [2723 0 R /XYZ 151.701 261.858 null]
 >> endobj
-2737 0 obj <<
-/D [2730 0 R /XYZ 151.701 187.182 null]
+2730 0 obj <<
+/D [2723 0 R /XYZ 151.701 187.182 null]
 >> endobj
-2729 0 obj <<
+2722 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2740 0 obj <<
+2733 0 obj <<
 /Length 1133      
 /Filter /FlateDecode
 >>
@@ -11305,36 +11070,36 @@
 É3ƒyÀÀ§ÈDj•ž+ÓU¸«Ú²kPóJñg;Örœ’A‚"¥Q6†H[°R_ìæ|Âô#SÙµxoޏvRð"ÁïÁ}U‡þæœÜ¶j4AÇ.GFÕ\³·|‚ĦÉKÓئ‰JjKA»HÀ4öNbØp`î,}ê\¤bçŽÚ1%¶e‘þÒ²X“ãÕā…î2õ¡®VØ*“Çïjë¿I¾£¯×¬~Sc¯ý@g§ë}¨Üíë.Nû(#ðäZv³˜¦bžÏ©Ë {4U#) óY­½{aãU^=|`rD¬ÀHèiá'uÕÊÕúúa–/¢se.ú¾®Jón]©¥ö•†ç¤A`AÒ–ÇÏ큢ÏþPœñƒL3Çæ¿#­ÎpöߧU_zùKë»ó”¿=¾¹÷›“ÃPÙÇfpS¨8Ü,0÷Ôó(еn>(ìü4ªÃ>›+nxtƒE]ÉåØ9*í½¥gÓ~:þÊiF
 endstream
 endobj
-2739 0 obj <<
+2732 0 obj <<
 /Type /Page
-/Contents 2740 0 R
-/Resources 2738 0 R
+/Contents 2733 0 R
+/Resources 2731 0 R
 /MediaBox [0 0 612 792]
-/Parent 2694 0 R
+/Parent 2687 0 R
 >> endobj
-2741 0 obj <<
-/D [2739 0 R /XYZ 100.892 685.529 null]
+2734 0 obj <<
+/D [2732 0 R /XYZ 100.892 685.529 null]
 >> endobj
-2742 0 obj <<
-/D [2739 0 R /XYZ 100.892 597.411 null]
+2735 0 obj <<
+/D [2732 0 R /XYZ 100.892 597.411 null]
 >> endobj
-2743 0 obj <<
-/D [2739 0 R /XYZ 100.892 458.62 null]
+2736 0 obj <<
+/D [2732 0 R /XYZ 100.892 458.62 null]
 >> endobj
-2744 0 obj <<
-/D [2739 0 R /XYZ 100.892 290.61 null]
+2737 0 obj <<
+/D [2732 0 R /XYZ 100.892 290.61 null]
 >> endobj
-2745 0 obj <<
-/D [2739 0 R /XYZ 100.892 217.444 null]
+2738 0 obj <<
+/D [2732 0 R /XYZ 100.892 217.444 null]
 >> endobj
-2746 0 obj <<
-/D [2739 0 R /XYZ 100.892 144.279 null]
+2739 0 obj <<
+/D [2732 0 R /XYZ 100.892 144.279 null]
 >> endobj
-2738 0 obj <<
+2731 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2749 0 obj <<
+2742 0 obj <<
 /Length 1723      
 /Filter /FlateDecode
 >>
@@ -11353,33 +11118,33 @@
 {b "ô]ç~+ ÀY±»Å‡NuC­r·/ÊðkZ´9ÚÂ[oñ¨úþµ³×ߏ…§Úü䄈ožmÁsCˆEwÔ¾C´i6:U„fvëA€D |ÇÐo|‡Œ»@1 êF—ÎN<ÅLfoêq•`olqpö98Í„Â7ãõÑTBŠ©kR‡T”ç4ƒýz°mžÃŽèÛW?ˆ¤©¡;«ÚÊÁ§Üû ˆ18¾ãÚoXÌ0õY<Akƒþ&€ÍÎO¿o.Wÿ 9(´
 endstream
 endobj
-2748 0 obj <<
+2741 0 obj <<
 /Type /Page
-/Contents 2749 0 R
-/Resources 2747 0 R
+/Contents 2742 0 R
+/Resources 2740 0 R
 /MediaBox [0 0 612 792]
-/Parent 2694 0 R
+/Parent 2687 0 R
 >> endobj
-2750 0 obj <<
-/D [2748 0 R /XYZ 151.701 685.529 null]
+2743 0 obj <<
+/D [2741 0 R /XYZ 151.701 685.529 null]
 >> endobj
 198 0 obj <<
-/D [2748 0 R /XYZ 151.701 586.68 null]
+/D [2741 0 R /XYZ 151.701 586.68 null]
 >> endobj
-2751 0 obj <<
-/D [2748 0 R /XYZ 151.701 560.361 null]
+2744 0 obj <<
+/D [2741 0 R /XYZ 151.701 560.361 null]
 >> endobj
-2752 0 obj <<
-/D [2748 0 R /XYZ 151.701 363.633 null]
+2745 0 obj <<
+/D [2741 0 R /XYZ 151.701 363.633 null]
 >> endobj
-2753 0 obj <<
-/D [2748 0 R /XYZ 151.701 243.5 null]
+2746 0 obj <<
+/D [2741 0 R /XYZ 151.701 243.5 null]
 >> endobj
-2747 0 obj <<
+2740 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F60 1917 0 R /F59 1905 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2756 0 obj <<
+2749 0 obj <<
 /Length 1829      
 /Filter /FlateDecode
 >>
@@ -11396,30 +11161,30 @@
 ~ã¤X:ê­òäó~çKLÊmt~'ع¸HÇ7e¬3ËI )OZ^+ÑZ‰®«(KòßØh¬n»Ÿ}%\üs;ëÍ߯vwÿý7
 endstream
 endobj
-2755 0 obj <<
+2748 0 obj <<
 /Type /Page
-/Contents 2756 0 R
-/Resources 2754 0 R
+/Contents 2749 0 R
+/Resources 2747 0 R
 /MediaBox [0 0 612 792]
-/Parent 2694 0 R
+/Parent 2687 0 R
 >> endobj
-2757 0 obj <<
-/D [2755 0 R /XYZ 100.892 685.529 null]
+2750 0 obj <<
+/D [2748 0 R /XYZ 100.892 685.529 null]
 >> endobj
 202 0 obj <<
-/D [2755 0 R /XYZ 100.892 660.623 null]
+/D [2748 0 R /XYZ 100.892 660.623 null]
 >> endobj
-2758 0 obj <<
-/D [2755 0 R /XYZ 100.892 644.027 null]
+2751 0 obj <<
+/D [2748 0 R /XYZ 100.892 644.027 null]
 >> endobj
-2759 0 obj <<
-/D [2755 0 R /XYZ 100.892 471.222 null]
+2752 0 obj <<
+/D [2748 0 R /XYZ 100.892 471.222 null]
 >> endobj
-2754 0 obj <<
+2747 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2762 0 obj <<
+2755 0 obj <<
 /Length 1220      
 /Filter /FlateDecode
 >>
@@ -11431,27 +11196,27 @@
 $nLÇzØ¢ð£1<µÍ8Ç«}</Ç•‰›ú| Ðÿ¶†í\6„zuRËG9r<w_øô7~Âp¡
 endstream
 endobj
-2761 0 obj <<
+2754 0 obj <<
 /Type /Page
-/Contents 2762 0 R
-/Resources 2760 0 R
+/Contents 2755 0 R
+/Resources 2753 0 R
 /MediaBox [0 0 612 792]
-/Parent 2766 0 R
+/Parent 2759 0 R
 >> endobj
-2763 0 obj <<
-/D [2761 0 R /XYZ 151.701 685.529 null]
+2756 0 obj <<
+/D [2754 0 R /XYZ 151.701 685.529 null]
 >> endobj
-2764 0 obj <<
-/D [2761 0 R /XYZ 151.701 660.623 null]
+2757 0 obj <<
+/D [2754 0 R /XYZ 151.701 660.623 null]
 >> endobj
-2765 0 obj <<
-/D [2761 0 R /XYZ 151.701 558.691 null]
+2758 0 obj <<
+/D [2754 0 R /XYZ 151.701 558.691 null]
 >> endobj
-2760 0 obj <<
+2753 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2770 0 obj <<
+2763 0 obj <<
 /Length 1718      
 /Filter /FlateDecode
 >>
@@ -11475,35 +11240,35 @@
 }Z@rQU­Ö¶fþ¡	‚ë/NžOcÌ?Æ@˜R´H·ÁÉ÷iî3ÅÓÿ¿¸Yüç‘žO
 endstream
 endobj
-2769 0 obj <<
+2762 0 obj <<
 /Type /Page
-/Contents 2770 0 R
-/Resources 2768 0 R
+/Contents 2763 0 R
+/Resources 2761 0 R
 /MediaBox [0 0 612 792]
-/Parent 2766 0 R
-/Annots [ 2767 0 R ]
+/Parent 2759 0 R
+/Annots [ 2760 0 R ]
 >> endobj
-2767 0 obj <<
+2760 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [363.3 536.041 426.832 548.943]
 /Subtype /Link
 /A << /S /GoTo /D (procstart) >>
 >> endobj
-2771 0 obj <<
-/D [2769 0 R /XYZ 100.892 685.529 null]
+2764 0 obj <<
+/D [2762 0 R /XYZ 100.892 685.529 null]
 >> endobj
-2772 0 obj <<
-/D [2769 0 R /XYZ 100.892 585.818 null]
+2765 0 obj <<
+/D [2762 0 R /XYZ 100.892 585.818 null]
 >> endobj
-2773 0 obj <<
-/D [2769 0 R /XYZ 100.892 153.75 null]
+2766 0 obj <<
+/D [2762 0 R /XYZ 100.892 153.75 null]
 >> endobj
-2768 0 obj <<
+2761 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R /F54 1912 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2776 0 obj <<
+2769 0 obj <<
 /Length 1253      
 /Filter /FlateDecode
 >>
@@ -11523,24 +11288,24 @@
 u'Ü7õש軦œÊÀñ;iáÏÅßÓûcŽ
 endstream
 endobj
-2775 0 obj <<
+2768 0 obj <<
 /Type /Page
-/Contents 2776 0 R
-/Resources 2774 0 R
+/Contents 2769 0 R
+/Resources 2767 0 R
 /MediaBox [0 0 612 792]
-/Parent 2766 0 R
+/Parent 2759 0 R
 >> endobj
-2777 0 obj <<
-/D [2775 0 R /XYZ 151.701 685.529 null]
+2770 0 obj <<
+/D [2768 0 R /XYZ 151.701 685.529 null]
 >> endobj
-2778 0 obj <<
-/D [2775 0 R /XYZ 151.701 527.721 null]
+2771 0 obj <<
+/D [2768 0 R /XYZ 151.701 527.721 null]
 >> endobj
-2774 0 obj <<
+2767 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2781 0 obj <<
+2774 0 obj <<
 /Length 852       
 /Filter /FlateDecode
 >>
@@ -11552,21 +11317,21 @@
 »7WU8·K£6S£÷Ü]O‘ÿ UÔœ
 endstream
 endobj
-2780 0 obj <<
+2773 0 obj <<
 /Type /Page
-/Contents 2781 0 R
-/Resources 2779 0 R
+/Contents 2774 0 R
+/Resources 2772 0 R
 /MediaBox [0 0 612 792]
-/Parent 2766 0 R
+/Parent 2759 0 R
 >> endobj
-2782 0 obj <<
-/D [2780 0 R /XYZ 100.892 685.529 null]
+2775 0 obj <<
+/D [2773 0 R /XYZ 100.892 685.529 null]
 >> endobj
-2779 0 obj <<
+2772 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2785 0 obj <<
+2778 0 obj <<
 /Length 1294      
 /Filter /FlateDecode
 >>
@@ -11588,27 +11353,27 @@
 FÆ°Æh5f{½)ˆ)fY5¥ÞËó(Ã¬†Êe²»À‚5¸\ØV0öÄnµf¥Û…{Âvº…]¨8–Ülý‚b"àÅvÆ×½l¿5fЭJÁ‡J6¿œ½=þ=âqø†«(˜©a¼kŒ­n.üêl gžf¡-®Wœ¤\ÁÅÒ‡B2wb¦Âœ(ÝXîjî4Ko½Ø³',%{º*Â>þ/F¬çPÁ¤]×	ÀXuI4/k¯N/…µ²ú©ZF3’&ñÒ»‹ZWjûûKzŠxxçBã ظ¾~[›Å¾î+;ßÒ¾!Ehtn±×8›}89:½8·ý¢ä¡«Hv·Ç݇zX–!Eþ¯È]Ö
 endstream
 endobj
-2784 0 obj <<
+2777 0 obj <<
 /Type /Page
-/Contents 2785 0 R
-/Resources 2783 0 R
+/Contents 2778 0 R
+/Resources 2776 0 R
 /MediaBox [0 0 612 792]
-/Parent 2766 0 R
+/Parent 2759 0 R
 >> endobj
-2786 0 obj <<
-/D [2784 0 R /XYZ 151.701 685.529 null]
+2779 0 obj <<
+/D [2777 0 R /XYZ 151.701 685.529 null]
 >> endobj
-2787 0 obj <<
-/D [2784 0 R /XYZ 151.701 647.543 null]
+2780 0 obj <<
+/D [2777 0 R /XYZ 151.701 647.543 null]
 >> endobj
-2788 0 obj <<
-/D [2784 0 R /XYZ 151.701 449.827 null]
+2781 0 obj <<
+/D [2777 0 R /XYZ 151.701 449.827 null]
 >> endobj
-2783 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R /F30 1928 0 R /F31 1929 0 R /F61 1976 0 R /F92 2622 0 R /F93 2789 0 R >>
+2776 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R /F30 1928 0 R /F31 1929 0 R /F61 1976 0 R /F92 2615 0 R /F93 2782 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2792 0 obj <<
+2785 0 obj <<
 /Length 1645      
 /Filter /FlateDecode
 >>
@@ -11627,27 +11392,27 @@
 ©Ã±¿è7Æ	w:¦Ï\Èߨ–¬œ‡R©Lá'¹ˆAÙSüŠ 2§ü|¹¥Ã—õ7šD	\ÍX2c™£2&Æ	­dŽ_žG’¯{ÐÛIæʍÉL²™bCÉ»ëdzùä?é&
 endstream
 endobj
-2791 0 obj <<
+2784 0 obj <<
 /Type /Page
-/Contents 2792 0 R
-/Resources 2790 0 R
+/Contents 2785 0 R
+/Resources 2783 0 R
 /MediaBox [0 0 612 792]
-/Parent 2766 0 R
+/Parent 2759 0 R
 >> endobj
-2793 0 obj <<
-/D [2791 0 R /XYZ 100.892 685.529 null]
+2786 0 obj <<
+/D [2784 0 R /XYZ 100.892 685.529 null]
 >> endobj
-2794 0 obj <<
-/D [2791 0 R /XYZ 100.892 505.276 null]
+2787 0 obj <<
+/D [2784 0 R /XYZ 100.892 505.276 null]
 >> endobj
-2795 0 obj <<
-/D [2791 0 R /XYZ 100.892 240.764 null]
+2788 0 obj <<
+/D [2784 0 R /XYZ 100.892 240.764 null]
 >> endobj
-2790 0 obj <<
+2783 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2799 0 obj <<
+2792 0 obj <<
 /Length 1355      
 /Filter /FlateDecode
 >>
@@ -11666,31 +11431,31 @@
 4s© eGš4søò6-q¢¥Â'à—G—ßä=áÒ$û¶¿†ÍÅl†®ìk¸oA¬=¼oÖ3¼Þ=RsdÞ«<’ãüxrÄûøIúZ>ÚÇ
 endstream
 endobj
-2798 0 obj <<
+2791 0 obj <<
 /Type /Page
-/Contents 2799 0 R
-/Resources 2797 0 R
+/Contents 2792 0 R
+/Resources 2790 0 R
 /MediaBox [0 0 612 792]
-/Parent 2802 0 R
-/Annots [ 2796 0 R ]
+/Parent 2795 0 R
+/Annots [ 2789 0 R ]
 >> endobj
-2796 0 obj <<
+2789 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 317.671 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.dslreports.com/scan)>>
 >> endobj
-2800 0 obj <<
-/D [2798 0 R /XYZ 151.701 685.529 null]
+2793 0 obj <<
+/D [2791 0 R /XYZ 151.701 685.529 null]
 >> endobj
-2801 0 obj <<
-/D [2798 0 R /XYZ 151.701 527.721 null]
+2794 0 obj <<
+/D [2791 0 R /XYZ 151.701 527.721 null]
 >> endobj
-2797 0 obj <<
+2790 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R /F30 1928 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2805 0 obj <<
+2798 0 obj <<
 /Length 1020      
 /Filter /FlateDecode
 >>
@@ -11702,21 +11467,21 @@
 Vû/k|õ}ì+ny­^¼ö|)67"äé¥lQ Dgºúâè_¼Uê#$À·þÏ*{þ+²ùí/2’—ÿƒ7>É*ú<É]o½ú²õ-¿ŒðáOCÇRV
 endstream
 endobj
-2804 0 obj <<
+2797 0 obj <<
 /Type /Page
-/Contents 2805 0 R
-/Resources 2803 0 R
+/Contents 2798 0 R
+/Resources 2796 0 R
 /MediaBox [0 0 612 792]
-/Parent 2802 0 R
+/Parent 2795 0 R
 >> endobj
-2806 0 obj <<
-/D [2804 0 R /XYZ 100.892 685.529 null]
+2799 0 obj <<
+/D [2797 0 R /XYZ 100.892 685.529 null]
 >> endobj
-2803 0 obj <<
+2796 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2809 0 obj <<
+2802 0 obj <<
 /Length 1670      
 /Filter /FlateDecode
 >>
@@ -11735,27 +11500,27 @@
 ‘»w?¿c‚ΉOj)WLðÃ~s"UwÀlçÀ€1¨ûb¨m8µ'Lk¨8Tv!dúy(_n=7ü©òþnãOÞ(d.oÞá ³Ÿ³’ߎ¬]`éÞxÑËkéôV­h_vð'Ï©
 endstream
 endobj
-2808 0 obj <<
+2801 0 obj <<
 /Type /Page
-/Contents 2809 0 R
-/Resources 2807 0 R
+/Contents 2802 0 R
+/Resources 2800 0 R
 /MediaBox [0 0 612 792]
-/Parent 2802 0 R
+/Parent 2795 0 R
 >> endobj
-2810 0 obj <<
-/D [2808 0 R /XYZ 151.701 685.529 null]
+2803 0 obj <<
+/D [2801 0 R /XYZ 151.701 685.529 null]
 >> endobj
 206 0 obj <<
-/D [2808 0 R /XYZ 151.701 536.874 null]
+/D [2801 0 R /XYZ 151.701 536.874 null]
 >> endobj
-2811 0 obj <<
-/D [2808 0 R /XYZ 151.701 506.456 null]
+2804 0 obj <<
+/D [2801 0 R /XYZ 151.701 506.456 null]
 >> endobj
-2807 0 obj <<
+2800 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F17 1131 0 R /F15 1133 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2814 0 obj <<
+2807 0 obj <<
 /Length 2143      
 /Filter /FlateDecode
 >>
@@ -11782,27 +11547,27 @@
 ÆÈpW+ĉs}۝¹·羓Ú˜	®„ò¨ÆOÔø	—)ºvíãeE“/–Jr¹¾¬–‡\UVŽÃ'm\Œ¸úÁ¾jÇÁΫ=/¡^7ÎyùÃõ–Ò˜CŠ®«®LÖ6²P5Úgö£qñO¿YÝÿQ÷þq·ú/ÕAáß
 endstream
 endobj
-2813 0 obj <<
+2806 0 obj <<
 /Type /Page
-/Contents 2814 0 R
-/Resources 2812 0 R
+/Contents 2807 0 R
+/Resources 2805 0 R
 /MediaBox [0 0 612 792]
-/Parent 2802 0 R
+/Parent 2795 0 R
 >> endobj
-2815 0 obj <<
-/D [2813 0 R /XYZ 100.892 685.529 null]
+2808 0 obj <<
+/D [2806 0 R /XYZ 100.892 685.529 null]
 >> endobj
 210 0 obj <<
-/D [2813 0 R /XYZ 100.892 209.33 null]
+/D [2806 0 R /XYZ 100.892 209.33 null]
 >> endobj
-2816 0 obj <<
-/D [2813 0 R /XYZ 100.892 181.723 null]
+2809 0 obj <<
+/D [2806 0 R /XYZ 100.892 181.723 null]
 >> endobj
-2812 0 obj <<
+2805 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2821 0 obj <<
+2814 0 obj <<
 /Length 2267      
 /Filter /FlateDecode
 >>
@@ -11822,33 +11587,33 @@
 @]÷"âÏ×GIЪqç%±ÞûX¨oóF­I¦ ÏlÛwݸ&”9™7Ïâ>6"4¿ü‚Êþa ÛZ×—L¹¾A@FùVÌË;ÃFK–E71:ÜÄüß?mþœþ1
 endstream
 endobj
-2820 0 obj <<
+2813 0 obj <<
 /Type /Page
-/Contents 2821 0 R
-/Resources 2819 0 R
+/Contents 2814 0 R
+/Resources 2812 0 R
 /MediaBox [0 0 612 792]
-/Parent 2802 0 R
+/Parent 2795 0 R
 >> endobj
-2822 0 obj <<
-/D [2820 0 R /XYZ 151.701 685.529 null]
+2815 0 obj <<
+/D [2813 0 R /XYZ 151.701 685.529 null]
 >> endobj
 214 0 obj <<
-/D [2820 0 R /XYZ 151.701 369.403 null]
+/D [2813 0 R /XYZ 151.701 369.403 null]
 >> endobj
-2823 0 obj <<
-/D [2820 0 R /XYZ 151.701 343.05 null]
+2816 0 obj <<
+/D [2813 0 R /XYZ 151.701 343.05 null]
 >> endobj
-2824 0 obj <<
-/D [2820 0 R /XYZ 151.701 216.468 null]
+2817 0 obj <<
+/D [2813 0 R /XYZ 151.701 216.468 null]
 >> endobj
-2825 0 obj <<
-/D [2820 0 R /XYZ 151.701 155.307 null]
+2818 0 obj <<
+/D [2813 0 R /XYZ 151.701 155.307 null]
 >> endobj
-2819 0 obj <<
+2812 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2830 0 obj <<
+2823 0 obj <<
 /Length 2314      
 /Filter /FlateDecode
 >>
@@ -11868,67 +11633,67 @@
 ‰ÅÌ ²ø@FN…mðe³¦˜xç‡Õô›Õ²ËÃÍÔGÝ÷§ÕÕÿ ,Sº
 endstream
 endobj
-2829 0 obj <<
+2822 0 obj <<
 /Type /Page
-/Contents 2830 0 R
-/Resources 2828 0 R
+/Contents 2823 0 R
+/Resources 2821 0 R
 /MediaBox [0 0 612 792]
-/Parent 2802 0 R
-/Annots [ 2817 0 R 2832 0 R 2818 0 R ]
+/Parent 2795 0 R
+/Annots [ 2810 0 R 2825 0 R 2811 0 R ]
 >> endobj
-2817 0 obj <<
+2810 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.941 632.997 460.543 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (appendix) >>
 >> endobj
-2832 0 obj <<
+2825 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [127.168 619.448 269.824 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (appendix) >>
 >> endobj
-2818 0 obj <<
+2811 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [275.861 619.448 336.519 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (domjoin) >>
 >> endobj
-2831 0 obj <<
-/D [2829 0 R /XYZ 100.892 685.529 null]
+2824 0 obj <<
+/D [2822 0 R /XYZ 100.892 685.529 null]
 >> endobj
-2833 0 obj <<
-/D [2829 0 R /XYZ 100.892 592.74 null]
+2826 0 obj <<
+/D [2822 0 R /XYZ 100.892 592.74 null]
 >> endobj
-2834 0 obj <<
-/D [2829 0 R /XYZ 100.892 545.924 null]
+2827 0 obj <<
+/D [2822 0 R /XYZ 100.892 545.924 null]
 >> endobj
-2835 0 obj <<
-/D [2829 0 R /XYZ 100.892 525.297 null]
+2828 0 obj <<
+/D [2822 0 R /XYZ 100.892 525.297 null]
 >> endobj
-2836 0 obj <<
-/D [2829 0 R /XYZ 100.892 478.178 null]
+2829 0 obj <<
+/D [2822 0 R /XYZ 100.892 478.178 null]
 >> endobj
-2837 0 obj <<
-/D [2829 0 R /XYZ 100.892 405.778 null]
+2830 0 obj <<
+/D [2822 0 R /XYZ 100.892 405.778 null]
 >> endobj
-2838 0 obj <<
-/D [2829 0 R /XYZ 100.892 315.587 null]
+2831 0 obj <<
+/D [2822 0 R /XYZ 100.892 315.587 null]
 >> endobj
-2839 0 obj <<
-/D [2829 0 R /XYZ 100.892 227.517 null]
+2832 0 obj <<
+/D [2822 0 R /XYZ 100.892 227.517 null]
 >> endobj
-2840 0 obj <<
-/D [2829 0 R /XYZ 100.892 193.038 null]
+2833 0 obj <<
+/D [2822 0 R /XYZ 100.892 193.038 null]
 >> endobj
-2828 0 obj <<
+2821 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2843 0 obj <<
+2836 0 obj <<
 /Length 2337      
 /Filter /FlateDecode
 >>
@@ -11955,66 +11720,66 @@
 û¹4±ÿ`öÿ	‰m³À|y½¤Æqwҁî\ù]»æm]åzC‹7W?|÷êâüf¢âXÝï›ÍÉÿ V	}v
 endstream
 endobj
-2842 0 obj <<
+2835 0 obj <<
 /Type /Page
-/Contents 2843 0 R
-/Resources 2841 0 R
+/Contents 2836 0 R
+/Resources 2834 0 R
 /MediaBox [0 0 612 792]
-/Parent 2854 0 R
-/Annots [ 2826 0 R 2827 0 R ]
+/Parent 2847 0 R
+/Annots [ 2819 0 R 2820 0 R ]
 >> endobj
-2826 0 obj <<
+2819 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.749 619.448 414.962 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (appendix) >>
 >> endobj
-2827 0 obj <<
+2820 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.941 619.448 481.554 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (domjoin) >>
 >> endobj
-2844 0 obj <<
-/D [2842 0 R /XYZ 151.701 685.529 null]
+2837 0 obj <<
+/D [2835 0 R /XYZ 151.701 685.529 null]
 >> endobj
-2845 0 obj <<
-/D [2842 0 R /XYZ 151.701 660.623 null]
+2838 0 obj <<
+/D [2835 0 R /XYZ 151.701 660.623 null]
 >> endobj
-2846 0 obj <<
-/D [2842 0 R /XYZ 151.701 593.346 null]
+2839 0 obj <<
+/D [2835 0 R /XYZ 151.701 593.346 null]
 >> endobj
-2847 0 obj <<
-/D [2842 0 R /XYZ 151.701 536.071 null]
+2840 0 obj <<
+/D [2835 0 R /XYZ 151.701 536.071 null]
 >> endobj
-2848 0 obj <<
-/D [2842 0 R /XYZ 151.701 500.659 null]
+2841 0 obj <<
+/D [2835 0 R /XYZ 151.701 500.659 null]
 >> endobj
-2849 0 obj <<
-/D [2842 0 R /XYZ 151.701 465.247 null]
+2842 0 obj <<
+/D [2835 0 R /XYZ 151.701 465.247 null]
 >> endobj
-2850 0 obj <<
-/D [2842 0 R /XYZ 151.701 416.286 null]
+2843 0 obj <<
+/D [2835 0 R /XYZ 151.701 416.286 null]
 >> endobj
-2851 0 obj <<
-/D [2842 0 R /XYZ 151.701 366.719 null]
+2844 0 obj <<
+/D [2835 0 R /XYZ 151.701 366.719 null]
 >> endobj
-2852 0 obj <<
-/D [2842 0 R /XYZ 151.701 320.485 null]
+2845 0 obj <<
+/D [2835 0 R /XYZ 151.701 320.485 null]
 >> endobj
 218 0 obj <<
-/D [2842 0 R /XYZ 151.701 266.408 null]
+/D [2835 0 R /XYZ 151.701 266.408 null]
 >> endobj
-2853 0 obj <<
-/D [2842 0 R /XYZ 151.701 238.705 null]
+2846 0 obj <<
+/D [2835 0 R /XYZ 151.701 238.705 null]
 >> endobj
-2841 0 obj <<
+2834 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F54 1912 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2857 0 obj <<
+2850 0 obj <<
 /Length 2165      
 /Filter /FlateDecode
 >>
@@ -12044,30 +11809,30 @@
 ×þ‹i¸Ø¸¡™ä†ˆš;nißËÓl³Gã̶·™K8­5U¨9ÿwàyîr³]®yÐ^UåóeEæmº°dÇ‚aâ&Ø»‚<¥o»ÉßåŸöûíq÷»”¹$
 endstream
 endobj
-2856 0 obj <<
+2849 0 obj <<
 /Type /Page
-/Contents 2857 0 R
-/Resources 2855 0 R
+/Contents 2850 0 R
+/Resources 2848 0 R
 /MediaBox [0 0 612 792]
-/Parent 2854 0 R
+/Parent 2847 0 R
 >> endobj
-2858 0 obj <<
-/D [2856 0 R /XYZ 100.892 685.529 null]
+2851 0 obj <<
+/D [2849 0 R /XYZ 100.892 685.529 null]
 >> endobj
 222 0 obj <<
-/D [2856 0 R /XYZ 100.892 489.628 null]
+/D [2849 0 R /XYZ 100.892 489.628 null]
 >> endobj
-2859 0 obj <<
-/D [2856 0 R /XYZ 100.892 461.604 null]
+2852 0 obj <<
+/D [2849 0 R /XYZ 100.892 461.604 null]
 >> endobj
-2860 0 obj <<
-/D [2856 0 R /XYZ 100.892 435.749 null]
+2853 0 obj <<
+/D [2849 0 R /XYZ 100.892 435.749 null]
 >> endobj
-2855 0 obj <<
+2848 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F54 1912 0 R /F15 1133 0 R /F59 1905 0 R /F17 1131 0 R /F51 1134 0 R /F60 1917 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2863 0 obj <<
+2856 0 obj <<
 /Length 2278      
 /Filter /FlateDecode
 >>
@@ -12096,21 +11861,21 @@
 ¼x0	Á¶‡ó„§(ᜳƒñúGfú:œþüV¿€R–¥ÿíQ(QÍÃ_ˆôu(EFeÙJ˜¤"¯e!³(rña/”×ÏQƒÝJ¨È½¯áíŠ_ X)%øiè讁îQ{g•¬	^©©çÎËò}…½é“úŸ®¹áù<@Ai.J^dâÇÝ^;3iÀút¶µ ß=jÓùQë÷àäƒb°À§EüúOwˆz¢@MÐ6ãØòï’2¨Ò¯Ê®òW|k¹Tï”\(ÅOÕë;SqóýöE‹Ã~ÛÂáÿU*ȍ
 endstream
 endobj
-2862 0 obj <<
+2855 0 obj <<
 /Type /Page
-/Contents 2863 0 R
-/Resources 2861 0 R
+/Contents 2856 0 R
+/Resources 2854 0 R
 /MediaBox [0 0 612 792]
-/Parent 2854 0 R
+/Parent 2847 0 R
 >> endobj
-2864 0 obj <<
-/D [2862 0 R /XYZ 151.701 685.529 null]
+2857 0 obj <<
+/D [2855 0 R /XYZ 151.701 685.529 null]
 >> endobj
-2861 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F30 1928 0 R /F51 1134 0 R /F60 1917 0 R /F94 2865 0 R /F31 1929 0 R /F61 1976 0 R >>
+2854 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F30 1928 0 R /F51 1134 0 R /F60 1917 0 R /F94 2858 0 R /F31 1929 0 R /F61 1976 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2868 0 obj <<
+2861 0 obj <<
 /Length 2045      
 /Filter /FlateDecode
 >>
@@ -12139,21 +11904,21 @@
 jþ׫{f]C¶8à†MÑ›•‘“»'ùqKð£àev¤&žjÝü!Á³³vUÑCŽž	@±3@ð[4ȯ¦­é4¨ÇÊN?£(Òh)µl¢¢~÷oÏÇ7ïöÏ\D2˽øÁ„2·(LÑ?³$¸î„BíòóÍ}_?¬þõÎkf
 endstream
 endobj
-2867 0 obj <<
+2860 0 obj <<
 /Type /Page
-/Contents 2868 0 R
-/Resources 2866 0 R
+/Contents 2861 0 R
+/Resources 2859 0 R
 /MediaBox [0 0 612 792]
-/Parent 2854 0 R
+/Parent 2847 0 R
 >> endobj
-2869 0 obj <<
-/D [2867 0 R /XYZ 100.892 685.529 null]
+2862 0 obj <<
+/D [2860 0 R /XYZ 100.892 685.529 null]
 >> endobj
-2866 0 obj <<
+2859 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2872 0 obj <<
+2865 0 obj <<
 /Length 2300      
 /Filter /FlateDecode
 >>
@@ -12175,21 +11940,21 @@
 AE×ß´âzof·Œ"s»—Öî0±($åÉ]é€ò•œÇù<ª½]¨—WÐÍGUˆó(ϳ¿{U©Œè=Ué1UŠ ƒª€â‚IB|Á=<òìžï¹È C@Ù+ãʽÛ—³ÊV†Ä!—GåÛ7ÿ¾üß.ÉÃwÉÆžY»-á‰Þ˜Jû¤¼#åḲxî‘Ò$<ºà¦òUŸþB6è#	Il_ ïgý;$££ÿ%ðÿ£Öï…·Ïmh!2’ð™ïåÌù¯LÌ
 endstream
 endobj
-2871 0 obj <<
+2864 0 obj <<
 /Type /Page
-/Contents 2872 0 R
-/Resources 2870 0 R
+/Contents 2865 0 R
+/Resources 2863 0 R
 /MediaBox [0 0 612 792]
-/Parent 2854 0 R
+/Parent 2847 0 R
 >> endobj
-2873 0 obj <<
-/D [2871 0 R /XYZ 151.701 685.529 null]
+2866 0 obj <<
+/D [2864 0 R /XYZ 151.701 685.529 null]
 >> endobj
-2870 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R /F60 1917 0 R /F59 1905 0 R /F30 1928 0 R /F31 1929 0 R /F61 1976 0 R /F92 2622 0 R >>
+2863 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R /F60 1917 0 R /F59 1905 0 R /F30 1928 0 R /F31 1929 0 R /F61 1976 0 R /F92 2615 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2876 0 obj <<
+2869 0 obj <<
 /Length 997       
 /Filter /FlateDecode
 >>
@@ -12202,27 +11967,27 @@
 ÒÈŸºÔ•Q
 endstream
 endobj
-2875 0 obj <<
+2868 0 obj <<
 /Type /Page
-/Contents 2876 0 R
-/Resources 2874 0 R
+/Contents 2869 0 R
+/Resources 2867 0 R
 /MediaBox [0 0 612 792]
-/Parent 2854 0 R
+/Parent 2847 0 R
 >> endobj
-2877 0 obj <<
-/D [2875 0 R /XYZ 100.892 685.529 null]
+2870 0 obj <<
+/D [2868 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1498 0 obj <<
-/D [2875 0 R /XYZ 100.892 660.623 null]
+/D [2868 0 R /XYZ 100.892 660.623 null]
 >> endobj
-2652 0 obj <<
-/D [2875 0 R /XYZ 100.892 643.753 null]
+2645 0 obj <<
+/D [2868 0 R /XYZ 100.892 643.753 null]
 >> endobj
-2874 0 obj <<
+2867 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2880 0 obj <<
+2873 0 obj <<
 /Length 4922      
 /Filter /FlateDecode
 >>
@@ -12282,156 +12047,156 @@
 Ê~5Ôi%/VmÏëx¶¶ßIüÀ¿n9wϹל{cvÝQ×éÈD¶éȘIm26*íBuµš áp_ã¥ÐÎØlðcÜÄÓm	Ç5Ítüv£'ìÆ;|^mmüeZp4(7,‘Ö‚IÉË5'(ûù駸޺'V¯MzDRbØñÚ‹*œîOу²ˆôRǯqðð³ÎÿøÙŸ=3€ƒV¼?3pAöe0Š'eI8ïi—3†ý?œ
 endstream
 endobj
-2879 0 obj <<
+2872 0 obj <<
 /Type /Page
-/Contents 2880 0 R
-/Resources 2878 0 R
+/Contents 2873 0 R
+/Resources 2871 0 R
 /MediaBox [0 0 612 792]
-/Parent 2925 0 R
+/Parent 2918 0 R
 >> endobj
-2881 0 obj <<
-/D [2879 0 R /XYZ 151.701 685.529 null]
+2874 0 obj <<
+/D [2872 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1499 0 obj <<
-/D [2879 0 R /XYZ 151.701 660.623 null]
+/D [2872 0 R /XYZ 151.701 660.623 null]
 >> endobj
-2664 0 obj <<
-/D [2879 0 R /XYZ 151.701 642.541 null]
+2657 0 obj <<
+/D [2872 0 R /XYZ 151.701 642.541 null]
 >> endobj
+2875 0 obj <<
+/D [2872 0 R /XYZ 151.701 636.563 null]
+>> endobj
+2876 0 obj <<
+/D [2872 0 R /XYZ 151.701 642.839 null]
+>> endobj
+2877 0 obj <<
+/D [2872 0 R /XYZ 151.701 630.884 null]
+>> endobj
+2878 0 obj <<
+/D [2872 0 R /XYZ 151.701 618.929 null]
+>> endobj
+2879 0 obj <<
+/D [2872 0 R /XYZ 151.701 606.974 null]
+>> endobj
+2880 0 obj <<
+/D [2872 0 R /XYZ 151.701 595.019 null]
+>> endobj
+2881 0 obj <<
+/D [2872 0 R /XYZ 151.701 583.063 null]
+>> endobj
 2882 0 obj <<
-/D [2879 0 R /XYZ 151.701 636.563 null]
+/D [2872 0 R /XYZ 151.701 571.108 null]
 >> endobj
 2883 0 obj <<
-/D [2879 0 R /XYZ 151.701 642.839 null]
+/D [2872 0 R /XYZ 151.701 559.153 null]
 >> endobj
 2884 0 obj <<
-/D [2879 0 R /XYZ 151.701 630.884 null]
+/D [2872 0 R /XYZ 151.701 547.198 null]
 >> endobj
 2885 0 obj <<
-/D [2879 0 R /XYZ 151.701 618.929 null]
+/D [2872 0 R /XYZ 151.701 535.243 null]
 >> endobj
 2886 0 obj <<
-/D [2879 0 R /XYZ 151.701 606.974 null]
+/D [2872 0 R /XYZ 151.701 511.332 null]
 >> endobj
 2887 0 obj <<
-/D [2879 0 R /XYZ 151.701 595.019 null]
+/D [2872 0 R /XYZ 151.701 499.377 null]
 >> endobj
 2888 0 obj <<
-/D [2879 0 R /XYZ 151.701 583.063 null]
+/D [2872 0 R /XYZ 151.701 487.422 null]
 >> endobj
 2889 0 obj <<
-/D [2879 0 R /XYZ 151.701 571.108 null]
+/D [2872 0 R /XYZ 151.701 475.467 null]
 >> endobj
 2890 0 obj <<
-/D [2879 0 R /XYZ 151.701 559.153 null]
+/D [2872 0 R /XYZ 151.701 463.512 null]
 >> endobj
 2891 0 obj <<
-/D [2879 0 R /XYZ 151.701 547.198 null]
+/D [2872 0 R /XYZ 151.701 451.557 null]
 >> endobj
 2892 0 obj <<
-/D [2879 0 R /XYZ 151.701 535.243 null]
+/D [2872 0 R /XYZ 151.701 439.601 null]
 >> endobj
 2893 0 obj <<
-/D [2879 0 R /XYZ 151.701 511.332 null]
+/D [2872 0 R /XYZ 151.701 427.646 null]
 >> endobj
 2894 0 obj <<
-/D [2879 0 R /XYZ 151.701 499.377 null]
+/D [2872 0 R /XYZ 151.701 415.691 null]
 >> endobj
 2895 0 obj <<
-/D [2879 0 R /XYZ 151.701 487.422 null]
+/D [2872 0 R /XYZ 151.701 403.736 null]
 >> endobj
 2896 0 obj <<
-/D [2879 0 R /XYZ 151.701 475.467 null]
+/D [2872 0 R /XYZ 151.701 391.781 null]
 >> endobj
 2897 0 obj <<
-/D [2879 0 R /XYZ 151.701 463.512 null]
+/D [2872 0 R /XYZ 151.701 379.826 null]
 >> endobj
 2898 0 obj <<
-/D [2879 0 R /XYZ 151.701 451.557 null]
+/D [2872 0 R /XYZ 151.701 367.87 null]
 >> endobj
 2899 0 obj <<
-/D [2879 0 R /XYZ 151.701 439.601 null]
+/D [2872 0 R /XYZ 151.701 355.915 null]
 >> endobj
 2900 0 obj <<
-/D [2879 0 R /XYZ 151.701 427.646 null]
+/D [2872 0 R /XYZ 151.701 343.96 null]
 >> endobj
 2901 0 obj <<
-/D [2879 0 R /XYZ 151.701 415.691 null]
+/D [2872 0 R /XYZ 151.701 332.005 null]
 >> endobj
 2902 0 obj <<
-/D [2879 0 R /XYZ 151.701 403.736 null]
+/D [2872 0 R /XYZ 151.701 308.095 null]
 >> endobj
 2903 0 obj <<
-/D [2879 0 R /XYZ 151.701 391.781 null]
+/D [2872 0 R /XYZ 151.701 284.184 null]
 >> endobj
 2904 0 obj <<
-/D [2879 0 R /XYZ 151.701 379.826 null]
+/D [2872 0 R /XYZ 151.701 260.274 null]
 >> endobj
 2905 0 obj <<
-/D [2879 0 R /XYZ 151.701 367.87 null]
+/D [2872 0 R /XYZ 151.701 248.319 null]
 >> endobj
 2906 0 obj <<
-/D [2879 0 R /XYZ 151.701 355.915 null]
+/D [2872 0 R /XYZ 151.701 236.364 null]
 >> endobj
 2907 0 obj <<
-/D [2879 0 R /XYZ 151.701 343.96 null]
+/D [2872 0 R /XYZ 151.701 224.408 null]
 >> endobj
 2908 0 obj <<
-/D [2879 0 R /XYZ 151.701 332.005 null]
+/D [2872 0 R /XYZ 151.701 212.453 null]
 >> endobj
 2909 0 obj <<
-/D [2879 0 R /XYZ 151.701 308.095 null]
+/D [2872 0 R /XYZ 151.701 200.498 null]
 >> endobj
 2910 0 obj <<
-/D [2879 0 R /XYZ 151.701 284.184 null]
+/D [2872 0 R /XYZ 151.701 188.543 null]
 >> endobj
 2911 0 obj <<
-/D [2879 0 R /XYZ 151.701 260.274 null]
+/D [2872 0 R /XYZ 151.701 176.588 null]
 >> endobj
 2912 0 obj <<
-/D [2879 0 R /XYZ 151.701 248.319 null]
+/D [2872 0 R /XYZ 151.701 164.633 null]
 >> endobj
 2913 0 obj <<
-/D [2879 0 R /XYZ 151.701 236.364 null]
+/D [2872 0 R /XYZ 151.701 152.677 null]
 >> endobj
 2914 0 obj <<
-/D [2879 0 R /XYZ 151.701 224.408 null]
+/D [2872 0 R /XYZ 151.701 140.722 null]
 >> endobj
 2915 0 obj <<
-/D [2879 0 R /XYZ 151.701 212.453 null]
+/D [2872 0 R /XYZ 151.701 128.767 null]
 >> endobj
 2916 0 obj <<
-/D [2879 0 R /XYZ 151.701 200.498 null]
+/D [2872 0 R /XYZ 151.701 116.812 null]
 >> endobj
 2917 0 obj <<
-/D [2879 0 R /XYZ 151.701 188.543 null]
+/D [2872 0 R /XYZ 151.701 104.857 null]
 >> endobj
-2918 0 obj <<
-/D [2879 0 R /XYZ 151.701 176.588 null]
->> endobj
-2919 0 obj <<
-/D [2879 0 R /XYZ 151.701 164.633 null]
->> endobj
-2920 0 obj <<
-/D [2879 0 R /XYZ 151.701 152.677 null]
->> endobj
-2921 0 obj <<
-/D [2879 0 R /XYZ 151.701 140.722 null]
->> endobj
-2922 0 obj <<
-/D [2879 0 R /XYZ 151.701 128.767 null]
->> endobj
-2923 0 obj <<
-/D [2879 0 R /XYZ 151.701 116.812 null]
->> endobj
-2924 0 obj <<
-/D [2879 0 R /XYZ 151.701 104.857 null]
->> endobj
-2878 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R /F4 2008 0 R /F54 1912 0 R /F11 2494 0 R >>
+2871 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R /F4 2008 0 R /F54 1912 0 R /F11 2489 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2928 0 obj <<
+2921 0 obj <<
 /Length 2455      
 /Filter /FlateDecode
 >>
@@ -12459,111 +12224,111 @@
 „¹Ö+–NÂØø-,úÉ#­•ÁùE&ÔòîY at 4ã™PÒéüð/2å3y}Ì6ù™úK¿cÖÆ¡g_vG>Vü­Æþ jÊ.
 endstream
 endobj
-2927 0 obj <<
+2920 0 obj <<
 /Type /Page
-/Contents 2928 0 R
-/Resources 2926 0 R
+/Contents 2921 0 R
+/Resources 2919 0 R
 /MediaBox [0 0 612 792]
-/Parent 2925 0 R
+/Parent 2918 0 R
 >> endobj
-2929 0 obj <<
-/D [2927 0 R /XYZ 100.892 685.529 null]
+2922 0 obj <<
+/D [2920 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1500 0 obj <<
-/D [2927 0 R /XYZ 100.892 568.709 null]
+/D [2920 0 R /XYZ 100.892 568.709 null]
 >> endobj
-2665 0 obj <<
-/D [2927 0 R /XYZ 100.892 551.839 null]
+2658 0 obj <<
+/D [2920 0 R /XYZ 100.892 551.839 null]
 >> endobj
+2923 0 obj <<
+/D [2920 0 R /XYZ 100.892 545.861 null]
+>> endobj
+2924 0 obj <<
+/D [2920 0 R /XYZ 100.892 552.138 null]
+>> endobj
+2925 0 obj <<
+/D [2920 0 R /XYZ 100.892 540.182 null]
+>> endobj
+2926 0 obj <<
+/D [2920 0 R /XYZ 100.892 528.227 null]
+>> endobj
+2927 0 obj <<
+/D [2920 0 R /XYZ 100.892 516.272 null]
+>> endobj
+2928 0 obj <<
+/D [2920 0 R /XYZ 100.892 504.317 null]
+>> endobj
+2929 0 obj <<
+/D [2920 0 R /XYZ 100.892 492.362 null]
+>> endobj
 2930 0 obj <<
-/D [2927 0 R /XYZ 100.892 545.861 null]
+/D [2920 0 R /XYZ 100.892 480.407 null]
 >> endobj
 2931 0 obj <<
-/D [2927 0 R /XYZ 100.892 552.138 null]
+/D [2920 0 R /XYZ 100.892 468.451 null]
 >> endobj
 2932 0 obj <<
-/D [2927 0 R /XYZ 100.892 540.182 null]
+/D [2920 0 R /XYZ 100.892 456.496 null]
 >> endobj
 2933 0 obj <<
-/D [2927 0 R /XYZ 100.892 528.227 null]
+/D [2920 0 R /XYZ 100.892 444.541 null]
 >> endobj
 2934 0 obj <<
-/D [2927 0 R /XYZ 100.892 516.272 null]
+/D [2920 0 R /XYZ 100.892 432.586 null]
 >> endobj
 2935 0 obj <<
-/D [2927 0 R /XYZ 100.892 504.317 null]
+/D [2920 0 R /XYZ 100.892 420.631 null]
 >> endobj
 2936 0 obj <<
-/D [2927 0 R /XYZ 100.892 492.362 null]
+/D [2920 0 R /XYZ 100.892 408.676 null]
 >> endobj
 2937 0 obj <<
-/D [2927 0 R /XYZ 100.892 480.407 null]
+/D [2920 0 R /XYZ 100.892 396.72 null]
 >> endobj
 2938 0 obj <<
-/D [2927 0 R /XYZ 100.892 468.451 null]
+/D [2920 0 R /XYZ 100.892 384.765 null]
 >> endobj
 2939 0 obj <<
-/D [2927 0 R /XYZ 100.892 456.496 null]
+/D [2920 0 R /XYZ 100.892 372.81 null]
 >> endobj
 2940 0 obj <<
-/D [2927 0 R /XYZ 100.892 444.541 null]
+/D [2920 0 R /XYZ 100.892 360.855 null]
 >> endobj
 2941 0 obj <<
-/D [2927 0 R /XYZ 100.892 432.586 null]
+/D [2920 0 R /XYZ 100.892 348.9 null]
 >> endobj
 2942 0 obj <<
-/D [2927 0 R /XYZ 100.892 420.631 null]
+/D [2920 0 R /XYZ 100.892 336.945 null]
 >> endobj
 2943 0 obj <<
-/D [2927 0 R /XYZ 100.892 408.676 null]
+/D [2920 0 R /XYZ 100.892 324.989 null]
 >> endobj
 2944 0 obj <<
-/D [2927 0 R /XYZ 100.892 396.72 null]
+/D [2920 0 R /XYZ 100.892 313.034 null]
 >> endobj
 2945 0 obj <<
-/D [2927 0 R /XYZ 100.892 384.765 null]
+/D [2920 0 R /XYZ 100.892 301.079 null]
 >> endobj
 2946 0 obj <<
-/D [2927 0 R /XYZ 100.892 372.81 null]
+/D [2920 0 R /XYZ 100.892 289.124 null]
 >> endobj
 2947 0 obj <<
-/D [2927 0 R /XYZ 100.892 360.855 null]
+/D [2920 0 R /XYZ 100.892 277.169 null]
 >> endobj
 2948 0 obj <<
-/D [2927 0 R /XYZ 100.892 348.9 null]
+/D [2920 0 R /XYZ 100.892 265.214 null]
 >> endobj
 2949 0 obj <<
-/D [2927 0 R /XYZ 100.892 336.945 null]
+/D [2920 0 R /XYZ 100.892 253.258 null]
 >> endobj
 2950 0 obj <<
-/D [2927 0 R /XYZ 100.892 324.989 null]
+/D [2920 0 R /XYZ 100.892 241.303 null]
 >> endobj
-2951 0 obj <<
-/D [2927 0 R /XYZ 100.892 313.034 null]
->> endobj
-2952 0 obj <<
-/D [2927 0 R /XYZ 100.892 301.079 null]
->> endobj
-2953 0 obj <<
-/D [2927 0 R /XYZ 100.892 289.124 null]
->> endobj
-2954 0 obj <<
-/D [2927 0 R /XYZ 100.892 277.169 null]
->> endobj
-2955 0 obj <<
-/D [2927 0 R /XYZ 100.892 265.214 null]
->> endobj
-2956 0 obj <<
-/D [2927 0 R /XYZ 100.892 253.258 null]
->> endobj
-2957 0 obj <<
-/D [2927 0 R /XYZ 100.892 241.303 null]
->> endobj
-2926 0 obj <<
+2919 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F51 1134 0 R /F4 2008 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2960 0 obj <<
+2953 0 obj <<
 /Length 1938      
 /Filter /FlateDecode
 >>
@@ -12590,75 +12355,75 @@
 `¹‘dµòó’å²Ú­Òí€jDz|W~YîÎhâœhoœ­mçŸÅ&Érß8ÑÞ['^«sžV)›FN«\^¹—ϺÂ^­6 ó3—Îp¼Ï³o~RY5Zõ}›¾\Í&О3uò„y{ûø”@ ïí>ÝU/˜÷ÅêûÄ§½jD¼Ùçîpj²>é·C½Z.‹}^5¤H·ÕSÅ[2Îå7Yžäˬy¥æ0î3ß=nÉ=“—Þå»}	’ÓŽù@(•GR·Y±Ý]é¦áزÉѶ›dù˜åµ´u±l^øó@¼u†¯	½ƒü­;`n;ÅÃYIYÝæMœå)}—”5'“|Õ›ðpàÞiŠ²~“ÇF¸­JÖëÄ®EGìà@ Y‹qû{£þ÷×9
 endstream
 endobj
-2959 0 obj <<
+2952 0 obj <<
 /Type /Page
-/Contents 2960 0 R
-/Resources 2958 0 R
+/Contents 2953 0 R
+/Resources 2951 0 R
 /MediaBox [0 0 612 792]
-/Parent 2925 0 R
+/Parent 2918 0 R
 >> endobj
-2961 0 obj <<
-/D [2959 0 R /XYZ 151.701 685.529 null]
+2954 0 obj <<
+/D [2952 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1501 0 obj <<
-/D [2959 0 R /XYZ 151.701 657.538 null]
+/D [2952 0 R /XYZ 151.701 657.538 null]
 >> endobj
-2666 0 obj <<
-/D [2959 0 R /XYZ 151.701 640.668 null]
+2659 0 obj <<
+/D [2952 0 R /XYZ 151.701 640.668 null]
 >> endobj
+2955 0 obj <<
+/D [2952 0 R /XYZ 151.701 634.691 null]
+>> endobj
+2956 0 obj <<
+/D [2952 0 R /XYZ 151.701 640.967 null]
+>> endobj
+2957 0 obj <<
+/D [2952 0 R /XYZ 151.701 629.012 null]
+>> endobj
+2958 0 obj <<
+/D [2952 0 R /XYZ 151.701 617.057 null]
+>> endobj
+2959 0 obj <<
+/D [2952 0 R /XYZ 151.701 605.102 null]
+>> endobj
+2960 0 obj <<
+/D [2952 0 R /XYZ 151.701 593.146 null]
+>> endobj
+2961 0 obj <<
+/D [2952 0 R /XYZ 151.701 581.191 null]
+>> endobj
 2962 0 obj <<
-/D [2959 0 R /XYZ 151.701 634.691 null]
+/D [2952 0 R /XYZ 151.701 569.236 null]
 >> endobj
 2963 0 obj <<
-/D [2959 0 R /XYZ 151.701 640.967 null]
+/D [2952 0 R /XYZ 151.701 557.281 null]
 >> endobj
 2964 0 obj <<
-/D [2959 0 R /XYZ 151.701 629.012 null]
+/D [2952 0 R /XYZ 151.701 545.326 null]
 >> endobj
 2965 0 obj <<
-/D [2959 0 R /XYZ 151.701 617.057 null]
+/D [2952 0 R /XYZ 151.701 533.371 null]
 >> endobj
 2966 0 obj <<
-/D [2959 0 R /XYZ 151.701 605.102 null]
+/D [2952 0 R /XYZ 151.701 521.415 null]
 >> endobj
 2967 0 obj <<
-/D [2959 0 R /XYZ 151.701 593.146 null]
+/D [2952 0 R /XYZ 151.701 509.46 null]
 >> endobj
 2968 0 obj <<
-/D [2959 0 R /XYZ 151.701 581.191 null]
+/D [2952 0 R /XYZ 151.701 497.505 null]
 >> endobj
-2969 0 obj <<
-/D [2959 0 R /XYZ 151.701 569.236 null]
->> endobj
-2970 0 obj <<
-/D [2959 0 R /XYZ 151.701 557.281 null]
->> endobj
-2971 0 obj <<
-/D [2959 0 R /XYZ 151.701 545.326 null]
->> endobj
-2972 0 obj <<
-/D [2959 0 R /XYZ 151.701 533.371 null]
->> endobj
-2973 0 obj <<
-/D [2959 0 R /XYZ 151.701 521.415 null]
->> endobj
-2974 0 obj <<
-/D [2959 0 R /XYZ 151.701 509.46 null]
->> endobj
-2975 0 obj <<
-/D [2959 0 R /XYZ 151.701 497.505 null]
->> endobj
 1502 0 obj <<
-/D [2959 0 R /XYZ 151.701 455.222 null]
+/D [2952 0 R /XYZ 151.701 455.222 null]
 >> endobj
-2976 0 obj <<
-/D [2959 0 R /XYZ 151.701 438.352 null]
+2969 0 obj <<
+/D [2952 0 R /XYZ 151.701 438.352 null]
 >> endobj
-2958 0 obj <<
+2951 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R /F4 2008 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2979 0 obj <<
+2972 0 obj <<
 /Length 871       
 /Filter /FlateDecode
 >>
@@ -12670,27 +12435,27 @@
 á#ŸE¥.wÐ(Á|üø õÂQߣL·ˆZÛ#ÝŒu!Š9@ Ý0f»¶y]©ÂDF­C>P=? -¾=8øšñÞÞ\Á[)yëÑ]ZÔíßó[ç–ä«ÅšäGV°q““Q"o,À~£»ÏË«´)r7îñ¾f榍–‹\uzL»66„ þñìÊVWdãäÍ™h£ÒRûݳïQÛ]•cz…étST°½ÆìÙLÚejKßfnH±ýþì&˜1°þ÷¿)ÜÞŠ7êl”9£ç®š(­ën±Ó*Ì·—0£»å²Žö$wH×M½ìž‡uXU–õÊA—泩W&ÊÊB›®õÂ/êvdóKÕªšøZ5ùJ5#Sº»ÐͦK%e¢$aRûY™—:Tž7ºÝ©{©ø9¬EÞ|6Ù_,ÊOñýò‡I™¥’#©áñù¿§ Oi[Šô	ÿ+¡ã]¡ã?-tŸ¹Wéø~Jg¡Ïï%$!•É<•ÉÞ]è…öjóª…û{«Ú÷ÁŽû\r"5>¶|@ì	”Qï–}•"ŽnQ{ß÷{´~moWçG,l_ÚÄ	ˆé“…>t¶† ›§œ÷iH ˆ	»ËËpýý¤Öc
 endstream
 endobj
-2978 0 obj <<
+2971 0 obj <<
 /Type /Page
-/Contents 2979 0 R
-/Resources 2977 0 R
+/Contents 2972 0 R
+/Resources 2970 0 R
 /MediaBox [0 0 612 792]
-/Parent 2925 0 R
+/Parent 2918 0 R
 >> endobj
-2980 0 obj <<
-/D [2978 0 R /XYZ 100.892 685.529 null]
+2973 0 obj <<
+/D [2971 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1503 0 obj <<
-/D [2978 0 R /XYZ 100.892 660.623 null]
+/D [2971 0 R /XYZ 100.892 660.623 null]
 >> endobj
-2718 0 obj <<
-/D [2978 0 R /XYZ 100.892 642.541 null]
+2711 0 obj <<
+/D [2971 0 R /XYZ 100.892 642.541 null]
 >> endobj
-2977 0 obj <<
+2970 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2983 0 obj <<
+2976 0 obj <<
 /Length 689       
 /Filter /FlateDecode
 >>
@@ -12702,27 +12467,27 @@
 ©-L0V¥{±ô½È$›ü£+ÏÔM^]µ¡·o„pŘ½—»Q5oóì?X ‰$t{rVh“¼Ò+Œo¤—Å•[ÀÁAŸàTé[©³\?g'ÛHB™Yj (ë¥úãFƒÍÉ|KÅIL½hzÊÂl¬:hwãË^ªU7o6±þ&—Í,¨ï2UÉ¢“X勃žÀ«eÙæ˜iÝ¢»¦­USL»Ìkµ©O{½™é4lv»½WuÞ-\QÔ»–ºó׬æÝœYQ÷1µGÙÒj¥hƒ÷˜+U*Ë™Z4¯š\S>¹¬lÇèKzÃæ£ ´ªïòŠ›CQ2Ë4H=—ÿËv«ÓêígZ¦]§±[ú5kDPÓãLŸ<¦aŸ±5‚>G<dg˜ìov‘›Û Ëv·$¾Õ3xŒ¾ªöØä{ï" !{ÝÏëç_ã‚ý
 endstream
 endobj
-2982 0 obj <<
+2975 0 obj <<
 /Type /Page
-/Contents 2983 0 R
-/Resources 2981 0 R
+/Contents 2976 0 R
+/Resources 2974 0 R
 /MediaBox [0 0 612 792]
-/Parent 2925 0 R
+/Parent 2918 0 R
 >> endobj
-2984 0 obj <<
-/D [2982 0 R /XYZ 151.701 685.529 null]
+2977 0 obj <<
+/D [2975 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1504 0 obj <<
-/D [2982 0 R /XYZ 151.701 660.623 null]
+/D [2975 0 R /XYZ 151.701 660.623 null]
 >> endobj
-2719 0 obj <<
-/D [2982 0 R /XYZ 151.701 631.719 null]
+2712 0 obj <<
+/D [2975 0 R /XYZ 151.701 631.719 null]
 >> endobj
-2981 0 obj <<
+2974 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2987 0 obj <<
+2980 0 obj <<
 /Length 555       
 /Filter /FlateDecode
 >>
@@ -12734,27 +12499,27 @@
 «:î”AÜkŘBëÇ	n#"BUw9Q~®¢Ø~W?ڍ_¸p‰uêõÊËSš_ŽñX* ÎÎJÉ5˜ÉÑSS›½«ý±Ò¶<FX8QóR8_=NüÂogØ^),ðÀo³ÛôgJ×áwˆ<&•´t½uÄÉOU'ëÕÜw6ñ‡’ƒü^™ÆLFYÔz]mㇶ¨w'E‘!´Üé¢ñ$ñØþÓ@€ó7µÒfÙ]•·”zh7¹jŠsØ@ >åTœØ¿€½"ãù¶æÙx÷L/æËþ+ÞÖ¼QºJïÎlükáö†La_|žkóºÌí?¼¿Ñ÷LƒˆŸóœ÷ã_ZÍ™Ê
 endstream
 endobj
-2986 0 obj <<
+2979 0 obj <<
 /Type /Page
-/Contents 2987 0 R
-/Resources 2985 0 R
+/Contents 2980 0 R
+/Resources 2978 0 R
 /MediaBox [0 0 612 792]
-/Parent 2925 0 R
+/Parent 2918 0 R
 >> endobj
-2988 0 obj <<
-/D [2986 0 R /XYZ 100.892 685.529 null]
+2981 0 obj <<
+/D [2979 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1505 0 obj <<
-/D [2986 0 R /XYZ 100.892 577.007 null]
+/D [2979 0 R /XYZ 100.892 577.007 null]
 >> endobj
-2720 0 obj <<
-/D [2986 0 R /XYZ 100.892 545.982 null]
+2713 0 obj <<
+/D [2979 0 R /XYZ 100.892 545.982 null]
 >> endobj
-2985 0 obj <<
+2978 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2991 0 obj <<
+2984 0 obj <<
 /Length 542       
 /Filter /FlateDecode
 >>
@@ -12769,27 +12534,27 @@
 ø}F,ÁÕã¼öW¶—-s/Ê9ïsu“ƒÑH•‚è¼;#gkçÝ>[%ƒD*ßõªì=e_P Õò22YÖ€ijsá«?ÝÁi4e»çnWõš¡p.¿qH²;L¼0M<Í¿zwc¿)îe<hìâb/‹™N«eô4·ÍêEWtZ¬JÛz’h».}ù÷þ¶1ålÜ_—ó$6õcó:3­=¤ Oˆö¥òOœ%@ºó<mvZÚò5Âf¯öþ$äÿöi7öHØÿý½o	M$\ó–l¾ Š‹­Ý
 endstream
 endobj
-2990 0 obj <<
+2983 0 obj <<
 /Type /Page
-/Contents 2991 0 R
-/Resources 2989 0 R
+/Contents 2984 0 R
+/Resources 2982 0 R
 /MediaBox [0 0 612 792]
-/Parent 2993 0 R
+/Parent 2986 0 R
 >> endobj
-2992 0 obj <<
-/D [2990 0 R /XYZ 151.701 685.529 null]
+2985 0 obj <<
+/D [2983 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1506 0 obj <<
-/D [2990 0 R /XYZ 151.701 597.331 null]
+/D [2983 0 R /XYZ 151.701 597.331 null]
 >> endobj
-2721 0 obj <<
-/D [2990 0 R /XYZ 151.701 566.305 null]
+2714 0 obj <<
+/D [2983 0 R /XYZ 151.701 566.305 null]
 >> endobj
-2989 0 obj <<
+2982 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-2996 0 obj <<
+2989 0 obj <<
 /Length 681       
 /Filter /FlateDecode
 >>
@@ -12801,33 +12566,33 @@
 È6ÍdU×MåînžænæÖ¹¯[Kñ3lSÂA¥Ù2kÁ<:Ômè÷ö>D<hy;ª~Wã„ö誤֖¯½žÝkÓ¹´Ø	‰ã?Äç–h#ëZ_Í©	¼ÉŠä‘(±5žO¾èõ¸ûÛÙyÛ%h\YxÊmßZR+Íé"þ¨5ð+]„t‘?S…bTkóºˆy©åÑ?ÔEþ—u±ÙúßFõ_ÿ´.ò§ë"¾.òtq´£.Žž¤‹ e2Ú嶯ž?Qf¨
 endstream
 endobj
-2995 0 obj <<
+2988 0 obj <<
 /Type /Page
-/Contents 2996 0 R
-/Resources 2994 0 R
+/Contents 2989 0 R
+/Resources 2987 0 R
 /MediaBox [0 0 612 792]
-/Parent 2993 0 R
+/Parent 2986 0 R
 >> endobj
-2997 0 obj <<
-/D [2995 0 R /XYZ 100.892 685.529 null]
+2990 0 obj <<
+/D [2988 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1507 0 obj <<
-/D [2995 0 R /XYZ 100.892 639.02 null]
+/D [2988 0 R /XYZ 100.892 639.02 null]
 >> endobj
-2727 0 obj <<
-/D [2995 0 R /XYZ 100.892 622.15 null]
+2720 0 obj <<
+/D [2988 0 R /XYZ 100.892 622.15 null]
 >> endobj
 1508 0 obj <<
-/D [2995 0 R /XYZ 100.892 365.346 null]
+/D [2988 0 R /XYZ 100.892 365.346 null]
 >> endobj
-2728 0 obj <<
-/D [2995 0 R /XYZ 100.892 348.476 null]
+2721 0 obj <<
+/D [2988 0 R /XYZ 100.892 348.476 null]
 >> endobj
-2994 0 obj <<
+2987 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3000 0 obj <<
+2993 0 obj <<
 /Length 652       
 /Filter /FlateDecode
 >>
@@ -12838,27 +12603,27 @@
 è—j	¡z/Ö»,¯†²^J“Õnç}”QË#(ÚèO/ÇÎopôù2Ž·dûHVEdëõöÍâµC”2hã¾ã ¸ÛUtygI´ìËÁtËÌây狃œh•íæØæQÐ%KQßže›½8ðÀÑ¥hRÑ Ë\¸>$?o’â#íÐ<ÅñÃMOã\w’t—¶hÞíäû~}$3h^ï–ßE!<[åíν5ìâWÙ¤’Fɲq€€I%:g´}ŠûEšÐúdù#c]ì¸îZÎP†‡A| ÄûAiUÇzt8ôX°Ø,ÿh²Rõaè̇txG§Á”Bó!> ä:ètÜŸDÑ£ÉøâØM”ƒ5Žö!’(]¯fµoï€jŠ®7å ö·\ï­ÉgRãGnÍæýy¹ 
 endstream
 endobj
-2999 0 obj <<
+2992 0 obj <<
 /Type /Page
-/Contents 3000 0 R
-/Resources 2998 0 R
+/Contents 2993 0 R
+/Resources 2991 0 R
 /MediaBox [0 0 612 792]
-/Parent 2993 0 R
+/Parent 2986 0 R
 >> endobj
-3001 0 obj <<
-/D [2999 0 R /XYZ 151.701 685.529 null]
+2994 0 obj <<
+/D [2992 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1542 0 obj <<
-/D [2999 0 R /XYZ 151.701 549.606 null]
+/D [2992 0 R /XYZ 151.701 549.606 null]
 >> endobj
-2725 0 obj <<
-/D [2999 0 R /XYZ 151.701 532.736 null]
+2718 0 obj <<
+/D [2992 0 R /XYZ 151.701 532.736 null]
 >> endobj
-2998 0 obj <<
+2991 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3004 0 obj <<
+2997 0 obj <<
 /Length 631       
 /Filter /FlateDecode
 >>
@@ -12871,27 +12636,27 @@
 ýRɁ	ÜnM#{ž.úÆT7Àf¿À2»+³êa'½‚ñÕqCkµ£Y—Ï;¾#9Æ3Ù˜ñÎxöô˜—ÙMe¿ŽZ9<3<˜¼Ø=šâ1öm|$5\¿èfóA8Ýù²êÛ M)^‡žk¡é"Í{)˜€Ÿ¦‚½9îOú«~ú¢‘•¨3n’¼3ñÃÑ4ŽFÇ9÷Ã{¢$1¤s_cWÃ"j(£®›†|ºŸOðEiÕHpÝélý_ÆÜý^“Ø^1ƒW–1eœ¿åÊêž´. ÿ
 endstream
 endobj
-3003 0 obj <<
+2996 0 obj <<
 /Type /Page
-/Contents 3004 0 R
-/Resources 3002 0 R
+/Contents 2997 0 R
+/Resources 2995 0 R
 /MediaBox [0 0 612 792]
-/Parent 2993 0 R
+/Parent 2986 0 R
 >> endobj
-3005 0 obj <<
-/D [3003 0 R /XYZ 100.892 685.529 null]
+2998 0 obj <<
+/D [2996 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1543 0 obj <<
-/D [3003 0 R /XYZ 100.892 536.056 null]
+/D [2996 0 R /XYZ 100.892 536.056 null]
 >> endobj
-2726 0 obj <<
-/D [3003 0 R /XYZ 100.892 519.186 null]
+2719 0 obj <<
+/D [2996 0 R /XYZ 100.892 519.186 null]
 >> endobj
-3002 0 obj <<
+2995 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3008 0 obj <<
+3001 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -12899,20 +12664,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-3007 0 obj <<
+3000 0 obj <<
 /Type /Page
-/Contents 3008 0 R
-/Resources 3006 0 R
+/Contents 3001 0 R
+/Resources 2999 0 R
 /MediaBox [0 0 612 792]
-/Parent 2993 0 R
+/Parent 2986 0 R
 >> endobj
-3009 0 obj <<
-/D [3007 0 R /XYZ 151.701 685.529 null]
+3002 0 obj <<
+/D [3000 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3006 0 obj <<
+2999 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-3015 0 obj <<
+3008 0 obj <<
 /Length 1585      
 /Filter /FlateDecode
 >>
@@ -12927,63 +12692,63 @@
 nP¼cªHÃINÐÜ‚œ/˜ó¤+ÉOóžJ#)rp2gÒBHÆ6Ã\rœœ¤+ûˆ^”¼ÏKâ$‘5œ6ºæ¯7Q“.DÄ!Î&Ï>ƒ±ñ•š?§ž77L4Tõ”F0öp€š²4’c‡îéâóë›Èt8itl}¾ ˜›ÂU2ðìu×åkÖºfy$÷êœg–¥û¤ô²c`â"6† ““¸Èƒ_A¼`‚xL°xpg—éåòC&ª¸ÎIESI9£˜aÔ«‹ï3¨B„œ	mFoÜ®Dw£‰	büqt—ûa>Û½†é©Ð{8žcp®Sê‹¢è&–-ÞÛÏΜɷØ£`hµ„rã–@ï9ýŠÆ”šWѨ‚'9â[àOÍ<óãj\½¸ç~*Ú¦²y® båž)¡B ¼©^…ƒx«ë­9é¤&/j21РøgPň€«“®A¬žÙ2akÃÚYAž¦aLö‹jC°ÙcÁ9g—ŸLªG¥N¢blp%ÿd=7œÁ¿ùJ-Ã
 endstream
 endobj
-3014 0 obj <<
+3007 0 obj <<
 /Type /Page
-/Contents 3015 0 R
-/Resources 3013 0 R
+/Contents 3008 0 R
+/Resources 3006 0 R
 /MediaBox [0 0 612 792]
-/Parent 2993 0 R
-/Annots [ 3010 0 R 3018 0 R 3011 0 R 3019 0 R 3012 0 R ]
+/Parent 2986 0 R
+/Annots [ 3003 0 R 3011 0 R 3004 0 R 3012 0 R 3005 0 R ]
 >> endobj
-3010 0 obj <<
+3003 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [307.206 474.765 460.543 486.454]
 /Subtype /Link
 /A << /S /GoTo /D (secure) >>
 >> endobj
-3018 0 obj <<
+3011 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 461.215 144.949 472.905]
 /Subtype /Link
 /A << /S /GoTo /D (secure) >>
 >> endobj
-3011 0 obj <<
+3004 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.433 286.687 460.543 298.376]
 /Subtype /Link
 /A << /S /GoTo /D (happy) >>
 >> endobj
-3019 0 obj <<
+3012 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 273.138 211.449 284.827]
 /Subtype /Link
 /A << /S /GoTo /D (happy) >>
 >> endobj
-3012 0 obj <<
+3005 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 236.28 287.665 247.97]
 /Subtype /Link
 /A << /S /GoTo /D (secure) >>
 >> endobj
-3016 0 obj <<
-/D [3014 0 R /XYZ 100.892 685.529 null]
+3009 0 obj <<
+/D [3007 0 R /XYZ 100.892 685.529 null]
 >> endobj
 226 0 obj <<
-/D [3014 0 R /XYZ 100.892 660.623 null]
+/D [3007 0 R /XYZ 100.892 660.623 null]
 >> endobj
-3017 0 obj <<
-/D [3014 0 R /XYZ 100.892 501.19 null]
+3010 0 obj <<
+/D [3007 0 R /XYZ 100.892 501.19 null]
 >> endobj
-3013 0 obj <<
+3006 0 obj <<
 /Font << /F77 1973 0 R /F17 1131 0 R /F15 1133 0 R /F54 1912 0 R /F60 1917 0 R /F28 1124 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3023 0 obj <<
+3016 0 obj <<
 /Length 2257      
 /Filter /FlateDecode
 >>
@@ -13015,27 +12780,27 @@
 ™èËÀµ—-K~¡ÝÆJ^422×ïúPΖсmKkþ}¨Çi0äÉ&uQ9^þ®Êa\ÙRÓT‰å×®ûþôúô'úë
 endstream
 endobj
-3022 0 obj <<
+3015 0 obj <<
 /Type /Page
-/Contents 3023 0 R
-/Resources 3021 0 R
+/Contents 3016 0 R
+/Resources 3014 0 R
 /MediaBox [0 0 612 792]
-/Parent 3026 0 R
+/Parent 3019 0 R
 >> endobj
-3024 0 obj <<
-/D [3022 0 R /XYZ 151.701 685.529 null]
+3017 0 obj <<
+/D [3015 0 R /XYZ 151.701 685.529 null]
 >> endobj
 230 0 obj <<
-/D [3022 0 R /XYZ 151.701 492.106 null]
+/D [3015 0 R /XYZ 151.701 492.106 null]
 >> endobj
-3025 0 obj <<
-/D [3022 0 R /XYZ 151.701 462.387 null]
+3018 0 obj <<
+/D [3015 0 R /XYZ 151.701 462.387 null]
 >> endobj
-3021 0 obj <<
+3014 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3029 0 obj <<
+3022 0 obj <<
 /Length 2239      
 /Filter /FlateDecode
 >>
@@ -13068,27 +12833,27 @@
 ÿùÔÏvÎ\þ%û¨ œÿü\¾ŸïoþßEÕ†
 endstream
 endobj
-3028 0 obj <<
+3021 0 obj <<
 /Type /Page
-/Contents 3029 0 R
-/Resources 3027 0 R
+/Contents 3022 0 R
+/Resources 3020 0 R
 /MediaBox [0 0 612 792]
-/Parent 3026 0 R
+/Parent 3019 0 R
 >> endobj
-3030 0 obj <<
-/D [3028 0 R /XYZ 100.892 685.529 null]
+3023 0 obj <<
+/D [3021 0 R /XYZ 100.892 685.529 null]
 >> endobj
 234 0 obj <<
-/D [3028 0 R /XYZ 100.892 620.631 null]
+/D [3021 0 R /XYZ 100.892 620.631 null]
 >> endobj
-3031 0 obj <<
-/D [3028 0 R /XYZ 100.892 594.278 null]
+3024 0 obj <<
+/D [3021 0 R /XYZ 100.892 594.278 null]
 >> endobj
-3027 0 obj <<
+3020 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3035 0 obj <<
+3028 0 obj <<
 /Length 2104      
 /Filter /FlateDecode
 >>
@@ -13109,48 +12874,48 @@
 ΫMe±À“Ê¿Õµ´V&ÈÒl®lx´j&?•M‘bÞ4sfUþyáqoÞåÙE;QDi‘]6«€‹ÛW‹^ýGA¤ï/Þ ÁCú^iè5™ \ƒ¯˜,Cr,N[ß*¢/¨X)„0¡±­%ÿ¿l”úîEËÿG0Œg*”ÿ	À¶¢àc1ÁèÒø$áÏw¨ÍÛψ.‹>êN‚˜–^µì Ôuk;ëF(Vzì,P¶7zð›o–”$; –à™[<“8±R¥'.@7y]ø>ÿ×SóÀÆüé3ÖÅâcÏ5UBô¹ ~ôažŽà,ÿw¨,$è Þ›jã›AuÞZbr«yÁí?ÈbŠ,•2ÔÉ\ºÌqÎH©h°h¸3µÀÕ	ÀÀ÷)œÿ/ÆK	³RüK*¦ì:½ÒŸ8Ueže]5˜Y-Ýp7‡‚ÿþô°ú?¶BiÌ
 endstream
 endobj
-3034 0 obj <<
+3027 0 obj <<
 /Type /Page
-/Contents 3035 0 R
-/Resources 3033 0 R
+/Contents 3028 0 R
+/Resources 3026 0 R
 /MediaBox [0 0 612 792]
-/Parent 3026 0 R
-/Annots [ 3032 0 R 3038 0 R ]
+/Parent 3019 0 R
+/Annots [ 3025 0 R 3031 0 R ]
 >> endobj
-3032 0 obj <<
+3025 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.381 317.589 511.352 330.491]
 /Subtype /Link
 /A << /S /GoTo /D (happy) >>
 >> endobj
-3038 0 obj <<
+3031 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 304.04 218.91 316.941]
 /Subtype /Link
 /A << /S /GoTo /D (happy) >>
 >> endobj
-3036 0 obj <<
-/D [3034 0 R /XYZ 151.701 685.529 null]
+3029 0 obj <<
+/D [3027 0 R /XYZ 151.701 685.529 null]
 >> endobj
 238 0 obj <<
-/D [3034 0 R /XYZ 151.701 505.476 null]
+/D [3027 0 R /XYZ 151.701 505.476 null]
 >> endobj
-3037 0 obj <<
-/D [3034 0 R /XYZ 151.701 477.974 null]
+3030 0 obj <<
+/D [3027 0 R /XYZ 151.701 477.974 null]
 >> endobj
 242 0 obj <<
-/D [3034 0 R /XYZ 151.701 290.126 null]
+/D [3027 0 R /XYZ 151.701 290.126 null]
 >> endobj
-3039 0 obj <<
-/D [3034 0 R /XYZ 151.701 266.048 null]
+3032 0 obj <<
+/D [3027 0 R /XYZ 151.701 266.048 null]
 >> endobj
-3033 0 obj <<
+3026 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F60 1917 0 R /F17 1131 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3042 0 obj <<
+3035 0 obj <<
 /Length 2323      
 /Filter /FlateDecode
 >>
@@ -13192,21 +12957,21 @@
 F©hŸ‡^ªyeÿ~ 2ôrùS5þ]ýªÜµßûíâ¿Øe*
 endstream
 endobj
-3041 0 obj <<
+3034 0 obj <<
 /Type /Page
-/Contents 3042 0 R
-/Resources 3040 0 R
+/Contents 3035 0 R
+/Resources 3033 0 R
 /MediaBox [0 0 612 792]
-/Parent 3026 0 R
+/Parent 3019 0 R
 >> endobj
-3043 0 obj <<
-/D [3041 0 R /XYZ 100.892 685.529 null]
+3036 0 obj <<
+/D [3034 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3040 0 obj <<
+3033 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F54 1912 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3070 0 obj <<
+3063 0 obj <<
 /Length 1858      
 /Filter /FlateDecode
 >>
@@ -13233,84 +12998,84 @@
 6­?–~"TÜç篨[9aèŽtD”;©ÂA$ÞYie4PYÆ6o.µ†ât¤‡0±Ï¾\aq°/?Iñ3¢LB©¨ü¾ZVÊ É©&÷Ö÷Eð.ù„î³™mð²>’¸lu¸ž%4¬²ðÖлۺi)¸OËêz“-öUÏÃÍã“‘æ`«ë«Aluß7‹É=sÄ0
 endstream
 endobj
-3069 0 obj <<
+3062 0 obj <<
 /Type /Page
-/Contents 3070 0 R
-/Resources 3068 0 R
+/Contents 3063 0 R
+/Resources 3061 0 R
 /MediaBox [0 0 612 792]
-/Parent 3026 0 R
-/Annots [ 3044 0 R 3073 0 R 3045 0 R 3047 0 R 3067 0 R ]
+/Parent 3019 0 R
+/Annots [ 3037 0 R 3066 0 R 3038 0 R 3040 0 R 3060 0 R ]
 >> endobj
-3044 0 obj <<
+3037 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [456.986 489.296 511.352 500.986]
 /Subtype /Link
 /A << /S /GoTo /D (happy) >>
 >> endobj
-3073 0 obj <<
+3066 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 475.747 263.758 487.437]
 /Subtype /Link
 /A << /S /GoTo /D (happy) >>
 >> endobj
-3045 0 obj <<
+3038 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [163.432 379.902 213.788 391.592]
 /Subtype /Link
 /A << /S /GoTo /D (chap05net) >>
 >> endobj
-3047 0 obj <<
+3040 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [163.309 303.947 209.117 315.637]
 /Subtype /Link
 /A << /S /GoTo /D (ch5-filelocations) >>
 >> endobj
-3067 0 obj <<
+3060 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [396.792 158.775 448.952 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (chap05net) >>
 >> endobj
-3071 0 obj <<
-/D [3069 0 R /XYZ 151.701 685.529 null]
+3064 0 obj <<
+/D [3062 0 R /XYZ 151.701 685.529 null]
 >> endobj
 246 0 obj <<
-/D [3069 0 R /XYZ 151.701 592.244 null]
+/D [3062 0 R /XYZ 151.701 592.244 null]
 >> endobj
-3072 0 obj <<
-/D [3069 0 R /XYZ 151.701 567.67 null]
+3065 0 obj <<
+/D [3062 0 R /XYZ 151.701 567.67 null]
 >> endobj
 250 0 obj <<
-/D [3069 0 R /XYZ 151.701 458.57 null]
+/D [3062 0 R /XYZ 151.701 458.57 null]
 >> endobj
-3074 0 obj <<
-/D [3069 0 R /XYZ 151.701 428.659 null]
+3067 0 obj <<
+/D [3062 0 R /XYZ 151.701 428.659 null]
 >> endobj
 254 0 obj <<
-/D [3069 0 R /XYZ 151.701 366.248 null]
+/D [3062 0 R /XYZ 151.701 366.248 null]
 >> endobj
-3075 0 obj <<
-/D [3069 0 R /XYZ 151.701 340.411 null]
+3068 0 obj <<
+/D [3062 0 R /XYZ 151.701 340.411 null]
 >> endobj
 258 0 obj <<
-/D [3069 0 R /XYZ 151.701 255.684 null]
+/D [3062 0 R /XYZ 151.701 255.684 null]
 >> endobj
-3076 0 obj <<
-/D [3069 0 R /XYZ 151.701 228.785 null]
+3069 0 obj <<
+/D [3062 0 R /XYZ 151.701 228.785 null]
 >> endobj
-3077 0 obj <<
-/D [3069 0 R /XYZ 151.701 194.38 null]
+3070 0 obj <<
+/D [3062 0 R /XYZ 151.701 194.38 null]
 >> endobj
-3068 0 obj <<
+3061 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F54 1912 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3082 0 obj <<
+3075 0 obj <<
 /Length 974       
 /Filter /FlateDecode
 >>
@@ -13322,230 +13087,168 @@
 r¤¾	j>pxzöµ@>:wåR€[ÿQqûÎwX@Ր–‡9/pÐý3ÿÒç[]\FËW.M#n€$~™F£~AÃù„¹Ÿ`FE훸~N¡ËdÑÒéœUT€tÂD&ð¿%×”³¹®	¬¼z®h%Va½¢ÈÂαð§ rþ·;ÇÊ|¾sæën:áCúw”Sç
 endstream
 endobj
-3081 0 obj <<
+3074 0 obj <<
 /Type /Page
-/Contents 3082 0 R
-/Resources 3080 0 R
+/Contents 3075 0 R
+/Resources 3073 0 R
 /MediaBox [0 0 612 792]
-/Parent 3026 0 R
+/Parent 3019 0 R
 >> endobj
-3046 0 obj <<
+3039 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-ByExample/images/chap5-net.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 3086 0 R
+/PTEX.InfoDict 3079 0 R
 /BBox [0 0 719 510]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 3087 0 R
->>/Font << /R9 3088 0 R>>
+/R7 3080 0 R
+>>/Font << /R8 3082 0 R >>
 >>
-/Length 3089 0 R
+/Length 3083 0 R
 /Filter /FlateDecode
 >>
 stream
-xœí}K“$¹qæ½~E¥C¥ÏðF-¹4š-e’r´÷ÙR7gv3g¨æpÇö߯wùˆ²Ê¬•&ëC5<îŸ ÇÛñ‡éèþÉß·ËË?üë|øãŸ_¦cñn™Óáú?_þøâß¿„9¦cò·ãäÃ!¸\Žn>xçéo8|ùôòÙ˜¼‹ó1ÅÃå%äRŽK6JÈÙ—Hi7ÓÒSŽà{#)”e>†l´K£H®\òtѤæââ1/–†•ì&wœæåBˆl@ÉáHé
-xÅt1JJÇè(—à7³WŸ¡â­Ú•¼ŸR¿Õ¤j….|ìëo¸¶îLìŽl˜ËágÉ÷¯¿Û•ïtUŒ—+ôç®qÞ¥´OïRÚ§—µäËUÑž»â~ÄõQ/k×é=*Øé=*Øi£‰T²;¸ù¸$—©µLå8;|ãpŒ¹¶eò.»cp„#‘)!£¸t\üàâ1´$8fi—±LGÚ¥Qj¦S8v2Cœæc	–†ì&Ԑ™xætœÈàBB«p×L£$”Øì
-_­^…Š·ªWðV€ö­¿JÕ´êš÷õ7\Ûw¾ù¥¯¹NW…v¹ÛËzÄuz²=½GÙž^Ö‚/Wyî
-÷×#@½¬=\§w©N§w©N[ÙÍ‹?NdO(äKÒ!’8úê¹P·Q¤uSš–r	æÌ!ãJqpMädÒD†ÁÙXzÊpGÜ÷ù<“‹1Ú¥£Ô\Ù‡	MS¥f·Äc´$·fì#}òf1‘ˆ™Ê6yú‚Ið®˜.%øcšŠ_Í^Æ[µ+	p+<¥(|ÚÒUíИ¯¿áʺóÍ}Åtº*²Ëi/éÓé]ÊõôåzzY¾\â¹+ØG\ õ²öpÞ¥*Þ£*”þQUJsä®;æ@㠏4NH„!æ菙Z
-Üä©u,ùXHuy42 ÖMb‹'qŒöQB\ŽËLœTR4 ýž„áabH¹¿Lk(äôߣ#¹ÔÏä“}ÆèÂ|ôPA#ŠŒaœÈxt
-ô3F3‘§äÄàçÉEOÓ‚¥æXÈ}‘RO2ɝ¹° %$ð×p‰8ɉFò¤³PŽ<»#‰®°§ôíÉÞéóRAÿÁŠÑ¡ UÈãv!*³;.…~õÓÑ£rS.ÈD*.À@‚JÃƸ¸
-`"=_ž&‰FY
-8oI9\tläLß ,d0>;9g”âL^~ŽT,KXŽ(Ô<-pçq¡ÔT‰*ÃD›F(ÎŸ<—dývUô¨ÈžF¶„åçÿªÿU/Z½8µ®ç?èòÿåÏÛåðßÐtž¾C¦êA¸¿!×Z9K8–eB•ˆ¡¾¹¼üÝïøéÓ—>ýô÷ßüï—ß~óò/ÂŒ^m¡/Çs †t@EH`¿uÇÊThÎ0fòY”½QÎ/Þ$éÃG$É_:žv”Q×ü•˜ËZLMFšR!œ¿ =ß ÒwÙªr¡)UÌ·P¸Ob·L³ê=ì'EÜüm‰›,Ô,T±|ì,7Jm×MY…S¹ÿ7e]qÚ7˜‡6Þ¡ʹ¯¸ôK¡…ù{‚6YHÊ„¶‡RJ/hWg]Æ<~é5
-e°î—Z7Ó¬Û§;‚6Yº²³/i”Ñ6Wg]‚ëϽF¡Ö=àRë9ørOÐ&KWvÝ—J/hWg°B¬{À¥ÖEê¶J¼#h“¥+;û’Fmsu_ªÃ-óuŸwqv¹ë[«Š{ò®|ðmé{¸NW´+ÿ¿£‹¸eïuïóKû•u¿x«ÿÂÔœfñ‰2öÿ™¨Ò,è~|Jä×h"±P§J~ÂX}6‘³¬[ÙØo›™>ªö3gç‘ ‘S9fhVC£5Œp¦8¯Õos÷ú÷p[7¬Üƒ8Ï\SŠX|Q
-ô®S£yr—¡Ù*—x6yÚ׉XŒò½²JÝåéäLiªõܘ„2HzÀÕl%ÒÈ{é€+¥·î×fÍÔ§Òð:а»d¬ ¤{uã>÷­ºñˆ»Õ
-©É!ÒÚ¡—«ÑÉ(üývp±Pµ±Ê^h.4¡/p	ƒûjP¶¿++·¹{+÷p78#®‚aû¼×6wkw§nCMôó´ì´ƒ»´‹ûƇ¢ùÔäÉÍò÷¢YÕœ°xÊ»)Îa	Vþ®¿×&÷ð½vp_y²€	f†²ï-”¾µ?âÚ´Yeš!SkÇô7‘‡ÅßX®lÞæ¾ÕBqß„—hüé+<¸L•–„ù3æó9ºZª7:—MîÞî®H„{Žìê—Sñš¬…ñè÷SGpåÈkô~!ïŽÝ:¡°”\§N—qe¬nûQÖ®íïeG‘A#òFþžÙæ¾ÿîë￐‹N®·F(ƒÍ¸NMsãš}Àß(k›‹dêë©cm\æ‰zY;¸HVZxy‰šñ‚¿àÄµÚd:5RLâ,W¥Ô~“©Ç4,)uê*aÄt—É0…iêuq²CsûçSGðK’X†Jèq<`êp¤|t~ÐU)šûL=&,†¥^]%Œ˜î25LÎ9©jšK(=¦L&
-¼ZS'„Ó}¦SÎXîÕUÊ€é>S©Dlüwê*aÄt—©aòž&C±¥Çô€©ÃäcÁJlS'„Ó}¦Ó<]ÔUÊ€é>Ó©9Ò…,˜ï8?a1ýb”—R+›±u›2gŸ{H(ÅqA¦|Áêîn_)DúŽËì.ÂbûÓ²¨ò,2hà9¶„éÒ(«Kä÷Ã|,”J¼‹Ocö:çáäÛKÀBXìwÕ)™WÞ:Pqfäšß“*®)4å Ê`€EÀÊ€·Þ¨Dyxù¯Qê¤H…²öÒ´Jº³K9·
-°tUÑY–±çÒËÁcÂTHº¦
-Qò¯lx^»¾CëÕ—µe H¹žukÂèC‘ùqÕŒ·«&²ß¯›¢#Á!Ç„áÏT×¢i4SØO±F4Õ¥saº4J&þ…>Æ$g¾/†ìø+hšÑʹq at qM‚¦EÇÛK£D‡k“0“O÷¥é4JFP(‡á	+;Þ:ÛâD£:h0
-éãqªH-äâæN¯¤;Û”C›KWÍ6òYìêTBĹ6vxNœTM7ÛŒÃPŠ„•Ïm[mS÷¬Óò=õtÎÕ^,¤lÔÓ±š¢}¨€U{y³¤0†½L,œðV-o…8l#+…»å\',ñFt(ð?<€ê²¥ÊÚæêdyšú´è<9^PÊ ë×é%aQŸÆ¸Œ‚ó]2ÜÃuz‰d8¶Ý—Q°ÔaÌ.–•¸öô\Lñe™té~Ùèòijó†^)	Gyë {ËòØ ¸˜ÒãÚÃõèÛû’üQôîáÂÇ|â|¸þ¶0R,—ߊ³4A·¿µ£Øf:ídÂDªh?·
-ë€Ã|
-Ä¥z¶É(‰F¯‘·Ôhì>cH‹Ss¬	H¨;æ8œ,ÿE¶vžSÀD“!šœˆeï`$¹"é¿•ç¼Î4Žyì&Sr°ÍÃÕ•ª»…µRO*î8Ï=Er±;x'IßÝ)_X¶ >ù©™ÇHØnÅIX¡·v|Æ6çÄý¹¦¾[¾[Êï"8dš× ºfq4æ¹ô¿)‹t7Æ“øXêù*תßGdý … “‘)Mè}Qc¨¡áë¦9ÕþŸòœ¯rÕb~IŒJøšç±œ3MÓéÿvpÁ?ͯR_ÿ‡Z`ô4v€þ…Ú Ï·i Ì+ª~‰G»ÎD	™/IÌÔrâ@AÁó“w»àrä Q0"ÀIîŽøèW—K)M2z5âî´Ç™FLð|™ë†Uߧ0u :>›E¢pÿ#²!	3œzH%`×Q3q‡¾bºÜ@yºú&·Ôu«‘×P’õªP½_°"Ìv^úé>Ó,©ë‰×RxdñA’¿ë;šÝÍ(Š„K+ƒyöÕ%k1u„´ð
-Ó:
-©à?B®B—/ïù|w¾‰U!`0GÙ{ᙼ1&*NÒoPØ7ŽÀC·&AÓPÁ”ÀŽ¿P게©(õêGB8¤H¬À´‹þ:Ïþü¬r£¦îœ{þfšXâã°
-xâ+m½iäí}î9‘w¾L‚¦Õ4#0 ÀM…™f „Ã@Š„ÁŠ7®øOi—Y &\\gZ#T`aªÇü
-84xdÞLÃnTÏxj–YZ-3‚àÒüÛ¨a
-Båh«€Ñ.±g4«¶1ix®{÷‘KF}±–›KD¿bm[ҝûhÕ;4	š†ŠÞ}à²tîc°Î}Ôtï>”CÝ…J¬¨mì)
-üb3ÍLZ®—¶Ý™&­¿qTïÐ$hZMS÷¡ÀÔ}(puÍ4uÊ¡îB%V~ñ¹ü¢™Ö˜¶^.í»3­:€Ædj.–YZ-S¢¸Ä(lu f˜9á0‡!F¿øLf~qqrqÈ(3¹×Î}Ìs½š£î£¦{÷aâ.T€$«†Î}ä%b±²	X²lωŠšî܇qj‘0Z1:Æç²lôŒÍ6¥4u Š\H³MˆqˆÃP’l¶E© E®*šm
-B9µH­]ãsY6úF³Í(š9E®N¤Ù&NÄÄiˆišl¦E€I~Å­
+xœí}M“$¹å=Egãüt§nš•V&³±‰Þ½÷äT©{7²¥)µ¶mÿý⁠HºG„{K™f½acuÈ"œ$ø
+þÇi:»Ó„ò÷õíåþu>ýáÏ/Ó¹x·Ìé´ýÏ×?¼„9¦sò'·œãäÃ)¸\În>yçéo8}ýüòŘ¼‹ó9…ÓÛKÈ¥œ—l”³?/‘Òn§¥§Á÷JR(Ë|Ùho"¹rÉÓ9D“š‹‹ç\,
+)*ÙMî<ÍË)„Ù€’ÙÒðŠéÍ()££\‚ßÌ^}†Š·jWðV|JQü"T“ªB¸LúݾáÚº+±;²a.§Ÿ$ß¿þîP¾Ë¦ß6è¯]9>⺼Ki_Þ¥´//kÉo›¢½vÅýˆë¢^Ö®Ë{T°Ë{T°ËNó.$¨dwróyI.Sk™ÊyvøÆásm-Êä]vçàG"SB*Fqé¼ø)À+ÄshIqα¶ËX¦3„í­Qj¦S8w2Cœæs	–†ì&Ԑ™xætžÈàBB«p×LoFI(±ÙŸ¾Z½þ
+oU¯4à­ í[	~•ªiÕ;4ïí7\Ûw½ù¥·\—M¡½mÀö²q]Þ£l/ïQ¶——µà·MA^»Â}ÄõP/ë×å]ªÓå]ªÓ^cvóâÏÙ
+ù’tŠä#΁¾z.Ômi”¦¥œC‚9sÈøŸR\9™4‘a!té)Ÿsí¶²Ï3¹£½u”š+û0¡iªÔì–xŽ–äÖ,‚}¤ïOÞ,&1S:yú‚Ið®˜Þ:Jðç4Ÿ¿š½þŒ·jWàVxJQø*´¥«Ú¡1o¿áʺëͽaºlŠìm´—ô€éò.åzyr½¼¬¿m
+ñÚì#®G€zYG¸.ïR•.ïQ•Ê	ÿ¨*¥™„yŠ9Ðx È#aˆ9ús&OG7GZò¹êòhd@­›ÄøÎ@Fû…(!.SD”T¤¤÷4,8%4ÒÈ"†”ëàËt†BÞ÷D#‡³£9ÒÏä‘9 èÂ|&¶×Oä3/âD¦£K vrZÄÉ ¹0xyòA$”Œ¨9r^Å“L’åÂŒ0s‡ˆ“\h$?Šåȳ;“ˆà
+ûÉ@_¾Ìd%}ÜB*è?ø>1:ƒ£êxžÀŽDUvçB?úéìix”kTV@~Bšè›,ŽË‚,*çHâ2Í
+Òr2¼¹x¸JÊá¢Ãx-Îô	ÊBöRGžE8“‹Ÿ#)X)Øó´3‡@MË)Q]˜ÑL\>y† )æ×MÁ£{טŸþ³Vüg­ÐZqiÝÎÐäÿ˟׷Ó?~CÓxš©rðoÈ­VŽÓÎeÁ·ˆ£“Ó7o/÷û~üüõ‡Ï?þý7ÿëå·ß¼ü‹0£G#Ö3ÿç:Ç¢ŠŒàXW¬L…æã%?‘AÙåúâ]@’>|D’|¥Ãî)£®÷+1ok15i^H¥pmü‚özHß]«Ê…¦GT1;ÜBáþˆ]2ͨ°_apñ·%î²P?°PÍò±³Ü(=´\7eHåþCÞ”µáº´o0/Ë=z¡\û
+ñ€K¿š˜¿'h—…¤LhKq(¡ô‚puÖeÌá—^£Pëp©u3͸}º#h—¥+;û’FísuÖ¥êø;B¬{À¥Ö%rðåž ]–®ìº/)”^ЮÎ:]
+…2X÷€K­‹Ôm•xGÐ.KWvö%2 Úçê¾T‡[(æë¾âºr×·Vä»l|ðméG¸.ÚÆÿè"nÙ»í}~n¿²îoõ_˜–Ó>QÆþ?UšݏO‰GL~¡N•:ýTGr.9Ëš•üö™ésѨê8sv	9•sÆЉf44ZÃgŠóZý>w¯ÿ·uÃÊ1ˆó¼¸5¥ˆ…¥pAàº4š§ñ!wš­xyg—§}ˆ…(ß+«„Ñ]žNΔ¦ZύI(ƒ¤\ͶPâ„ñu®”ÞºG\»5Ss`œJÃë@Ãî’¹Q3H÷êÆ}î[uãw«R“C¤1´C/V¢“Qøûàb¡jc•½ÐLhÂb±KÝWƒ²ý]Y¹ÏÝ[y„»ÁqÛãÚçîqáîàÔ-¨‰~¦YÊ1@¸;@‡¸o|(šPMžÜ,/šÕQÍ		§¼“â0#å¿!l¾×.÷ð½po<YÀ3ÃGÙ÷JßÚqíÚ¬2͐©µcú‹·¿wZè}î[-ô÷Mx‰ÆŸ¾Âƒ«!ƒ–…÷a0ŸÏa¾W…÷¹x¸»"î9²«_ÌÅk²Æ£ß/Á•3¯Ïû…¼;vê„ÂRp]:]Æ•±²FY¸ö¿?–sÍA#úTw]È>÷ðýpo¿ÿB.:¹Þ¡6?àº4͍köáìüJÖ>É*Ô×SÇÚ¸Ìõ²p‘¬´ðò5ãÁ…!‰jµËti¤˜Ä3X®J©=ü.SiXRêÔUˆé.“a
+ÓÔëâd‡æöÏ—Žà—:%±•ÐãxÀÔáH…Ù몔Í}¦ÃR¯®FLw™&çœT5Í%”Ó¦“‡¦N¦ûL¦¿8¨«”Ó}¦S‰ØôïÔUˆé.SÃä=M†bJéS‡ÉÇ‚¥Ø¦N¦ûL¦y>»8¨«”Ó}¦Ks¤Y0ßq~ÂZú›QB^J­4nÆ
+ÔmÊœu|î!¡,Fƒâ¸°ËTý&]„Øçêö”B¤ïè±Ìî"NE`ëÓ²°-ƒž³aA˜ÞÅau‰ü~à°ñ>
+Ú뤇“¯/;a±ßU©ä^axíPÅ™¡k~O>¨¸¦@Ò”C(‡A	+^{³åáÀF©Ó"“ÊúKÓ+éÎ2åPä*ÁÒUGg[ƦK3-m
+S!éÎ4åP"`eÅ3[öÚ(¨¾¬mEÊöÚ(¨`Æ`,ëg¼]?‘ý~õ 	Ž9&‚¦º"Mc!WvU¬)Mu]˜Þ%ÿB#“ŒLXÈ„ìx£KÓŒ–P΍Šch4-:^_%:ìY›„™<»/M‡¤Q4‚B9·HXÙñÚÙ'sÔ¡ƒQHΩ¨ÔBŽnîôJº³M9¹I°tÕÑl#ÏÅO%Dœlc·WuhºÙf†R$¬ìxnÛj›ºg–ïu¬§s®öb9e§žŽÕíC¬ÚË«µ …1ìhÒȈ»/Þ°åM²§‚Íd¥pç|€ë‚¥ ÌÝkâÁ T£ÛJ•µÏÕÉò)Á™½½äÉñ€RY¸./	Kø4Æeœð’Ùà®ËK$Ãy̸Œ’€¥fŽp±¬Äµ§çbŠ/ˤøG¸ÈF—'^kè•’p˜·µp±,mÀ‹)=®#\¾½/ÉŸåHï.ÌÄqÐ'Χíx̵ðÖ¾K„oÅyŒDc-þkÇÎ÷™.™p‘*ÚOmÛ:àÈ@ÁúˆKõt“Qa#o¬ñÁiŸ1°ÅY¶CG’0öŽ9gËÿF‘­ç0Ý䃈&'Â(ï`$¹"é¿•çºÎ4yì&Sr°ÍÃÕî¼Su·0£VJãIŝ繧H.vï$é»;åËP2ù©™ÇHØtÅYX¡·v|Ê6çÄý¹¦¾[¾[Êï"8dšÝ ºfqBæ
+r#Α”EºãI|0õºÉµ*ä÷Y?hI8¾HM|Bï‹C}
+üÈ_·Î©ÆxŒµ”çºÉU‹ù}$1*ákžÇrÎ4Y[¤ÿ;Àÿ4O¼f½ýµÀèiì ýµžuÓ@8ñ±Ä%fðº%d¾&1SˉÏë¼çï”c¬ÓÚˆA‰%ð°.—Ršdôj8·Ö´Ç™FLðºÌuêïS„:ŸÐ"Q¸Ù„N	=¤Ž°÷¨™¸C_1½Ý@yÙ|“[꺵„È+)ÉzÕ7P½_°.ÌvÒd(Î=ÁgÞ㱞x-…G$ù»¾ã¡ÙÝŒ¢Hxke0Ͼºd-¦ŽÝ›ÖQHÿrº|yrË4`æÎ7±
+#æ({a/<“7ÆBÅIú
+ûñÆxèÖ$h*8ƒØñwJ]›1¥^þè@‡	ƒ˜vÑ_GãÙŸžÕBnÔԝsÏßL3‚ ƒçîcŸ!
+¦‘·÷sÏ°ØØIдšff¸©0Ó„pH‘0XñÊÿ)
+ã2Ô„‹ëLk„
+,Lõ ¿§‘Ƽ¦aOªg<5Ë,­–Api~m
+Ô°¡r4ˆUÀh—Ø3šUÛ˜4¼\–zš¦£dTkº¹Dt,Ö¸%ÝùÆQÝC“ iÖÑ;‚\æ΁L¸Ö9šîˆr¨ÃP	£µ™=«mƒwì¬3Š`“lØ¥‰wÖ‰hÕI4	š6ëԍ(6u#Š]ÝH³N݈r¨ÛP	£ƒƒ|:ÛÙ¬k”ŠM›²a—ÆÞYW½Ac2Oã,mÆ©;QhâN¹º³Í܉p˜û++7ùd–žrqrÈ(39ÜΙÌs½²£Î¤¦{gbâ<T€$«†Î—ä%bù²	X²lÚ‰Ššî|‰qj‘0Z1úÉç²lô’Í6¥4u$Š\I³M‰qˆãP’l¶E© E®*šm
+B9µH­}äsY6zH³Í(š¹E®n¤Ù&nÄÄmˆišl¦E€I~Å­
 Ì2ƒ 
-s°²atŽÏd×èëZNïC²—)¡´ß<á¾Gká5Ý;ãa4Í:z/’9>G'¡à,s§ƒÓ½QC)F;Fÿøl¶²YgÁ¦mX±k+oÖ©0ñ&AÓfQ›Iì¦Ã¬3Âa(EÂhÇè#ŸÍ¶ÑKšuâe‚'mY±kkoÖ‰;0ñjœ¥Í8£4 ÈMƒÚÖ0TŽ†±
-XY1úÉ粌W"iL;%Þç\ÿË“aá4%÷Ǻ/¬„©ž
-$Œ÷jh4ÌJq^ÇY°Üd“R¾Ì8¯g,Í*`¸È?°Ç³_Ž|i]TH*„q(H•0XQ‹ô)
-ãv—"‹bšXÌÙ <bŸ­·ŒoÉåÎvRƒ`pöm4­–Ap© Å-ša
-Á¢
-là{F³¾ÛÞÒsNNÐð
-Ö&ˆ§òF”=˜f·:·X‡Ͼ"dÄu8ø8ñ©Q— ;V¹[[dbUï'ÓÇH|ZH(çŽÎ`3$äãHÅÔm—]{©QêQr˜vwÂj"
-²®Õ]Aúü²¿vëÕßg|qn…ˆ‘Ìôú‡Ë.ÓP¸$Ô‰-ÞÍú‡Hq|ð°¢CaÌÓqà
-ÁÇzé!Fl“•›=šý¼ðqœËeº¯)ª¼¯ÿ_9Tbš&9MÓ¾*Ù7S¹Å³ƒ©kËi©^>¤;áê7f?ÿ’ÆL"lÁ’Âê[“Ç]Ç¢„sGˆ¾’(¸}1‡2HáCW#˜¿ä(	¢g‡Ó÷è\Ïu6A×ÊÖx>”à¡	'ïx>à–«ó›ð&ïVNˆá\œ¢+릃k¿Ô	Ó3t$7(zŽ/MeásË7(–Ë´_ST{׈¿~°\ù–È÷(ÉC'tÈ-Ô­šñ6Sߌ—…#Q—pêé¯è“®,␫(ÄQUB{ŸB9w¥Cß’?…£U4Ê(‡[ŇÉÆ÷\ËBè;"Ź—î¦ÈwTÔµºkHŸ?NôРiÆÄ“¬€“_>pëDL®›-z›y³I—y2p(ŠPo¦vp•‚f03%{¾qƒBãßÌ•½ ¿»IÑ\¢z•T½}KþZ1ò0°ÐìgêZpMûÖÈzÓÐû\7ê–ÌÇöþŠ<…úX²óóuG¶RÎÅáþníq{ ŒrjWüQ²Ù!®d¡×L2y2é8ÅUé×ú®0}þ@Ù«>y
-uÎÓ}h”ø»î”·˜·{e—Ž³ÁCq̵Þt€…‚­G>äJjçzøúšB¼|!MK⃪7(–K”_L÷Ð%ÕHûþX'ÚcWëÇþøӍþ˜O߆¿©?V…­ÏTJëW|†å}ŸÙSF9}üþ²ûþ¸“.f'½všMÔµºkHŸ?NôÍþ˜#”¸¯?¾Ï¼«?Vp­¯ëá*á#—®g»E!_úžíEs‰êURõ®ûã¯ãw›÷nœ[8vÃAh'·eø„KwïÆnìà>ícºqAÃñ"mB(z	G`ŽŠÀ¥™C6¸‹·åà<![¼¥ï\ÐxÁ-&Ms8´qAì¨PÅ͸â
-ÍHùû€‹€ÞxÎW¹†›ï%’*Ÿè&àe=[ˬÉ>Ôx’¯#½u.®ßï$éÎ…Ž–øíݱtØêŒâ°Î“ñ6OXç±ô¼Èªðíâ~¹¡¨Ã+R½!å¢Çí'Rj
-c)8ÆYzŠdZ•ñ»H¬E\B}ÖJku¡@dB½EÕÅq¸^á9_åªEü>’jã’$VÉŠ«ñŒBL*‡ÈºA™üTõá}”‰ƒÒøˆ[r|oI–-Eú°ÎÝ¢à©ñ|ë·úî.Ôoà¸8#FÃò¥†úýöOú3Âü¾Ò …f”3õ\¯	ï-Pá|óï/÷ïßþô-ÿŽ Í™Æk†s%3ðëçï¿|úùÛóŽÀ*ÀW‚;ÑÈ–¾üø—Ÿ>}៚º –s&M‘ý§O?ýüã—ÿó+*
-ª¾D?Nÿà=¸a€V|²à/DÐd
-—Β缿ùñòí÷?üêð‡ßþî×ÿôÛo4SáøÕèSÕ›m¹þù7ÿípúôåÿ~úò+äÀe©txµLÄñ‡_ŸN¿ÿŸ¿5yö_á0—e>¼bU|rUয়¾›À[0]$³^qû1ýÍYåǝTò_Wv3G„:Ä±ÍsÚÅsÃQ%DF(î‚í_4£,Ô¯#uD,Dô'dU"髉;>êoÙÆÒ‘X½Bä) âÝmêíR¾%ÄùvÑxÎW¹ÆÀéï$’g!ñ­u·Ì¡ú—PS¸Ã(2f1/°XçâQù;IºÓ¥ä3F_äŒyqâ©7ðÉ(	1÷øfı$‚ûûåübÉñpà#²a©×8GxG¯@Ón¾Æi<e’ÀMë\c¿“ÈZÄ…o¹…f±VÄ8¡ª0שkóÍÊs¾ÊU‹ø}$Õè
-K}ù)	€ªwÒ•Â7CwpÉÆf.—Q°ëhip^þn\FédíáÂJÛÄW;Jéqíà:µïÚ¾„Rª³äÚfbIñXF&t˜¶y{ [µcÙÅceH$íàÚ
-àš¨ãx.èºf<Ú@•nFÇÌÔþe›©û·‹›úœ	ãv‚Äû aâwêß²šzm3÷êw0[’]âQœ›Ðð%·xia“çÔ‘°«Æ­Y®J©«+Û\'£af³øØ)TJê×fáK‚¥I×3¿€gä°ÛìÖ±Awpß(†‡Ü­+—:ƒCd1×GŠ
-Oª”rîêá#®ë轩dÞ[ÉSà)€+ÍõÏÊÆ-ÞÞÂmÞ;q{3íÐL÷ Úäííà]GìÍ.ð¦ç.([¼=”mÞÇqk3â2S{I}d/Bµç~o#Ûb m3wëµµcqßE٠䏬”¾a?âÚ2Xe`g.ÔphD5…bo7ÆÜ7ãCîǁb"á“sáÀhˁg÷Šc“w€¶ÉÛóÎK
-¤†¯¯âRËb“éÔhxphª—xü+¥.*osL¡1%Dô-ó jÓv	PéÑ[s8œ/ıÀÛE°Å<”Á6óº0V^|gˆ:cﳜLeã)P:JÙ`A1.¼‹b,êv:1Û<èrgM›y–ÍÔ±—l”Úßn°œ-à9ÑÚ½ÏÞ’µÛ`Q,÷°¸^‘P–,¬;åœI’–{,‚%MB˜wŠ”bX±4,	«\KREšì±ÜeQ,¡W$”†åËæ†Ü¦¬¨3üÄJBìP¬–#–¯çMIO#šs•\ßÊè(“?º:Sóx¢å€
-Ì!_y¹ë˜;,}¥4±	‹Î½jbâI•À;_ãÜ<9õL^à–Ší€\­`<X‘™{<Á-Ø·—\	GžË
-„§«q­ªßÙÇ6ND⎯ù¦€0£01å#ÀÂ:a
-¦£¸(“Ù¹Æð]Ë©Ë%{q“ÂÄ‹Z*âÒ• Ι–¡”%òéßNñJN5á£d¡n60ðl.?0ÊjŒ2q¸ù„U}*x*HOÓu•§é7dðX¶ë8&,®u$]Up¡D~ŠÄ$àU>ª'¦CÒœƒA4Áh+†X7Ïjb]A‹\ò½mJQhõÁö=òE³Þ8œ&ZzŽuÚIt3N)ŠM$vÑÑ'(‡ 4	ƒ\€Ok[-9jÍÙÖ)E±-¼Û°/	gåzëиžÃa·¿“ éfR›H0좣³NP4Ai;jÉ=«mµä¤%†ÄoÂvþ$ kŽæOî,,­­Kºó'£z‹&@ÒUEçO¨CZHU“Px’ÑtÔtó'A0š€ÁŠZnÏiÙà);Û”¢Ð¤tiéqâGõM‚¤›qJQl*A±«Žfœ¢0Ai;Oùt¶
-ž²³N)ŠMÚ±a—–ÞY'¾ qT_Ñ$HºY§Ŧ»êhÖ)
-ã”&a°cð”OgÛà)ùl[KaˆZ̗Р{É݈Hҝ/iÕS4’.½Á¡Å5?‚7‰Bhò%ÝüHc¨øš C?xÇ'°fðˆb¦Ž´Uƒ+­¹3HÚ{ã¨þ Ité½…á‘܆Wäw	‚ÆQ6	†ð‚OaÏàùÄ"M)i“†WZmg‘´ëÆQÛ}“ éÒ{Ã#¹
-¯Èï,£"lÿàížÂžÁÃÉÊMó8™W¦¬~{ðSJÖn5ÝüBÇÁ-¿P=¨è|N-Ì¡ù†)ƒÍ7Hºù†Æ ¨MÀ`ÅàížÌ²Áóu¶UJƒVÛjƒ^[so\mïûƒNBõqJQlâ1»xŒÎ8ñCp›„ÁŽÁ>mƒG쬫”†­¶á†½¶òÞºê:ö„ê7:딢ØÄ“vñ$uâI‡à6	ƒƒw|:Û¶CÚПÌí4"÷FÁ9`jÄð3jÙ²èùX³¦«Ì:Õ¬¶ãRh Éªü•(””ì™]ŒÉ¯É· ¿>;²€Kô	­âVˆ¼@jvE`¥qNÌPã0c*½]x0zNåë/³Ö|M$tUa¦)ý] jö•\`ÏiØŽ€6¸O‡
-ŸxÄÓ²7`´›Ì}P›¹xwUó_Õf™øá(\øŠK,‰ SʹQÄè3r!0ë@Äð	Ǐ]¯3¢.¸xÍøÒäöØ:Y×ê® }þ@ÙcT›‚3
-¨[…w’ÞØÛfÞ¬†uF±w˜±Ð@"‡±Pp/Ž7B#ÑM7¸
-ÃÆ%Mx¬å¥eRÝ×ÓÝ7‚¯j
-Ûùež‚ð6ÚÍûôÛLCŒª9ñéj\»_×&ú…o£©BdŠu"”s£ð³;üŒ§K(£œ¥ê£d× n£,<óBÓïé伩9t²®õ]aúü²Ç“‡ïÆãÃ|VÝÂÖ\_§ßäÝS•cÝô¬èPžßQêñ
-…ÃìU
-B
-•[?]}ϯ€òêÖ¥åRí×Ó>ªúÚÁòå„©…Ç=õ¦þ…8„ÆKfDaï;£€-3ßõ*J0ÿÄU=e%…o3|dþ”£$*ï	Äç¾ëÇÁŠ¥—t¥l
-çóÉZqÀ	v;ºåmæ­vL¾Ä#PëëB	¹îß6ÀB±>‰ôÎcïgëÛÂÓU²ñ«ÞkÊ­.ùk†9ÆA ŸnNxŽ–_üà¶gêˆ'9ªœŽeã¹4
-ù àÈ‹ÇÍÏÝ‹!òŒàf³¥ß^rZø~“q¨^•°Âñ֐á–n¦"aá¨ÐÉthšr
-ãP”*aeÇ[g›sÁÕà%F™
-ÊT©nÊü®¥êÕt³Í8¹Iдèh¶9—ùî¶Ip…_Þ5’n¶‡á	+;Þ†CõOk$Ç"¹kôy¬°¸Ì M\%WØÛõîÖW…1<qœÝ¼ Rõlrƒ2'¬I5ŠœzÝäúe×Ás&,¸[„«ßÔ“×ÁĨD$‰€»õeîW¼˜Žˆ±¯8xˆnøÖuîe¸ÎÝÝÌÆë…怸Då*ù>]þק/ýål¼vŠž}¸žýÿã7¿óv©š¯òϺBã`Ç·}ñBá×4«çÝæ:Õkú¸º.vËL™qgºA	v°‡ë®,1 at C*’´ÍuzñSŒ)3WÁˆ›)¸¬Œãž„aÉŠyªw?©ÃæÃàeªX>ïâ"YTÿD£rB5Q^ÌcY;¸hŒƒ˜¨%[y „fÑû=\[—áÈ%yŒ9õÌyD€¦‚^ŠDGéÔv0u÷*vq;Džrج{tqÕã2Þðï¢Ðlr÷ öp·à.ÂM°c½*AßSŽW
-×Í\§Ž6ñóK—¯RXÖ®Írää‡fT'\ZAHbt"³¬ïMíà¾ßîöý¤¸ñfH½Páð@sHF9wUè×õ%F‡[´‰º"òº	µh†0'ý³²q‹··p›÷Î%F‡ÚL2†œ•ä&¤-æÓ6óú£KS:îü<¬=’MÖÇwú´~ký‰xl&´¿ë´É=|¥Ü]Û®5ÏÅzkÉ+¥¶ím®m›kéi,©Œ«åïíŠñ€ûFÍxÈýøCÛåãÐä
-ñð<õ«yòwªÊ&óà,¶™»ò ñ"lù\ƒr!öp1J-Œ
-–MS=–8ýaÁúè‚!3FlËS7™{Sw07S¥
-,¥Ì•ª£RjW°ÍÕ:Kgs<58OÄT^ŒÒwQ¸N9õÐu>JaY;¸:\6§^£P\¸®C½î¤Ù„УºÏÓ0¥œåΩåJéW‡	;ãK¯¯LwyN­´R—3Ô…\§Ú>:„F_V•j‹E¤h=n,Ji
-ñ†õçH{.m®½ \[KYÍaÂ8q\"’ÁÑ7딚g	.ïî͹Î`4íðüGV[f^P[
-ށ‹Gx,‹t”ď’·\FQ¹ÞO|/¯iöná ò
-î|w¼ øŸÞ^[RÆ:CÁ˝µÓH‹qî õ”È\Íŧ×åæiõAn)ëê\¡vƒÉº®ÆÚrïvÁÎyR;ót àš–é|%†+óG‰n(ºâKÝ}¯".­d¹¿+¨Ž‚9R§x-§ZðQ²‡Š)ïBaqõҁ%—ôß¡,ˆ†U¥iú
-òs=c	÷(M€&«Î rÈ{¬ŸO
-I#‡€0¨†Û‰Ïh7kÞØŽƒaJ`3¿W×pçrŒƒa™ŸÖè.ãZ~M6Ô¢¸D€Á®:»‚1(B0ÚðƵþíúŽ×Ãx)³³¬Q%ï~
-p]¬Ü›æñF6ŸžÇ³ü’R­F¨°,·À6ùf˜!0¨FxAþͪ-¬6;œ“­¡‰•0×
-\mµˆ¥Ü5ëšì‡ý^Ý‚e×t•ß9Ä.±9ô[X†R
-’î‡qT„&`° 6¯§3jð†]JQdÒfxmÓÍ.ióösu	–[ÓÍ.¡,`¨«‚Î,`ÐŒ&Îð™Ì|¡Ö(šµÙŠÜµZf­Þ~gŸ`¹%©J• ¨,· 6ñf—é7ÁgFWøDVõž0xúmîœF˜Ž±äæ4h†û6-éÎm4ŽêL‚¦«ŠÎoúƒíS•2o¨Ššì¼†þ.5÷`Aï	ŸÈ¨Ávv)EaI‹5صIwvI›oÕ'˜ M7»”¢ÈD‚⮚Y‚@V€š{4að„ÏdÖà	Í°F©¸¬Í
-nkÕf™µûÆÁnÁHRõ¡³ì·ÉW»€þ®ø4ûhÁà	ŸÈªÞÊBMsx¾ŽçÒ`ã“€Ö¢%Ý9ÆQ]‚IÐtUÑ9
-W£S›×©§›_ªéÎk‡`”üƒ	½+|&«_ئÅ%MÖp×&Ý&M¾1T—`4ÝSŠ S¯£°Å-5»Ôo)ƒB”ü£
-ƒ3|*»oh–5JfÍV€[»6Ó¬á7Ž$W r7¹4½F`\ÍëTØÍ/©aÍs)‡"£	ƒ;|&³¶oz7M¼på9ˆÅÅ4ú,*ðÔ3be¾
-á'vbDÒ Å«ñFqˆ£I°´¨@µ
-jÞcR	ŒwæU‡¤¡CP(‡€T£\œOi·?*æºüi¦)EmÃq>œõVÛ\šøÆc³Í²Ò1Œßf­ö
-VÍm E|3K(‡T+¸ÀžÑ¬í[‡oÌ%Ô€™ƒËß¼ŸÔŽwos÷·\Ä!­ÞÿUGoI¬°ð³K0`V)çF‰82Š}¨€yph¬£ŒrøÈ݇Éæ«
-+Y>ãìÚ =—zÐd]ë»ÂôùeW‚çs^¸{¯8l2oVE"_²||”5ócC¬8­<ÎoPär<ráÙÄå¥åRí×ÓÞ·„¯,ûêDB|u1Óâo_UÚÁÔ5jç‚ƒÅ;/îiÒ>!êÄlêÈÑâ}0o„³hž…µx"¤”ø>QG¥ð®üIæ/9J‚hüwdÃïö’®”­á|þ ¹C3ö3Æc‰»¥iŠý%«V¼É»Õˆ}¦©x*g¢—¢³f«7ó¹? \Q5#r
-÷‰Ã¡ÉŽ_õ^SLo×|¿f˜£Î…ïðÌ¢ ¾§”Ã̕ЗrñÍÅ
-”éÒ(Ô5M12y"$Ñki™àø5ùös¤!}1Šéko†·ŽÒAó/1žgU É·E EX³¯-xë¬r‡Î;£h’ðÚ–Šä/AUJª™$Å«¹[šÅ7ƒøN
-f
-Ëðh É—d3I)
-_°2`¸šô|Æ¡ÚÎüT`­AËõÜ(T±0‡ÄE£‰†”kæ²Ü¬™p¿f
-ŠáBž"+¯Ûõ¼>Â“à&v0ý²ëH‘ßí€+!·€GÝu¤ §°ßBn?­_–Ä‹SÎ^ÉIÌ1ܼŠï]Ez&¯µ—è^Fº¾‹Ä<zhžpSÉyÞyǯi:üÛŸ?}©ø©»tü‡ÁyÒõ¯…JÐÑ@QðÝœ™#LÇÃHSfà‘ÌT;_¡=¦úU~ýööã_~øéûþÈj>VöJî0y7ó¿ÿ÷?¼}ÿí™­ûþíSˆYÇRŸÍUù?ùñOŸ¾üôÿ¿ÿáÏùBy>~GýOvùê_^þ?8¦@
+s°²aôÏd×èëêNïC²—I¢´ß<a…¥µðšîˆqˆ0	šf½É³£“PpʽÓÁéÞ‹(‡¡	££|6ÛFÙ¬3Š`Ó6¬Øµ•7ëÔ‡ø	“ i³Î(‚Í$vÓaÖ
+á0”"a´cô‘ÏfÛè%ͺFñ2哶¬Øµµ7ëăx5ÎÒfœQš
+ä¦Amk*GÃX¬¬ýäsYÆk“4ªï|®ÿƒË°,²æùžL#LõÐP a‹LaY)NðxK–›lŠÊÀ—çøL‚¥YWùöø"`ößMW’†
+a
+R%VÔ"}JøÆ¥Èò§˜fsÆF¯Øyë-ãÛs¹³Ô¸¹û6šVËŒ ¸T€â
+Í0…`
+Q6p‰=£Yßíoò¹g)hx… kÄSy#úB» vÛsuØCñõFF¼‡“Ÿ&u	°c•»·ùH&†XõÍun½$ì–)åÚQ¢ÃLÛ#!ŸGÂ(¦nÄ|èÚK¢P’Co×	GŠ4ÈÚªÛ@úò²¿öïÕßgq’…ˆñDÿrée—„Z±Ï½[A.4„(y:/nÀ¬땈©¿‰·z`)úyÁ‰‰[Ëdº·ÕÝ·_8Tdš&9-MS¾Fy£U`êÚsšpØ—ÏîN¸–ðW4h±àÌ?)¬þ5y܃,J¸v„˜á/‰‚›8:ÛQ)|ëcó—%Aôìøcßj‚¶ÊÖx¾|”à¡'ïx×>à,•ôãf|€{¯'Äw‹ÄùºÂÁp:ÈFñK½’0MC‡rƒ¢'üÒT>Írƒb¹Lû–¢Ú»†üËËp‰|Ï’<uâ ˆC+•³ä˜ú¦¼,ûëLß"û¿ª)ãJ#Ž¿ŠBb%Ô¸*”kGÁ!;ô1	ñUø¾l£Œr¸e|˜l|ϵ,„Å£¡Rœ{énŠ¾5Y[}[L_>PöЬiî4WŸŸ&D
+^ÿŒz—w·I—y2h(ŠPo®v`•‚f03%{¾,qƒBãàÌ•½ ¿»IÑ\¢z•T½}Kþ¥bäá`¡Y6¢ÎÔ½à÷­|€iè‹}®ûv
+º6`?ÿ¼¾8ĺqW²óóu›¶R®Åá~oí"=ú¨ž2Ê©ÝñGÉf‡¸’…ž“íî¥ã|W¤oõm0}ù@Ù«~y
+u?ÎÓH½o“·zåÞý>Ù¥ólàPs­5\¡`’¿’V^m¿E!ÞÂã“iI|€õÅr‰ò
+Átò/ißëtûaoü€éFo̧rÃßÔ«ÂÖc*¥õ)>Ãò¾Çì)£œ¾7~Ù}oÜI—³“.=f“µÕ·Åôåeßì9²@‰[ó>ó¡þXÁµ¾®‡«Ä—\ºží%òì±õl·(šKT¯’ªwÝÿ1~·{#ǹ…c8‘vr†St7rì®ÁîË1¦W7/Ö&„©—pFA¨PÄbÆâ-‚}/XÄ-'ç	Ùâ-}çêÆûn2išÃabK…*Žw\¡Y)ßYwW½ñ\7¹†;ï%’*ŸõÆ{ßf#Y1 ï!ÔµÔkÇ“|é­sqý~'Iw®ê¸ˆpµÄ‡HðŽ¥ÃVg‡µžLüâÖz,=/²:|»¸ßC®C˜jš”:ÄÕá»S.Ò÷÷,¥Ô8ÆSp³ôɵ*ä÷Y¹ð)·à°i­Ò4
+ y5ê)ª0Ž#ú
+Ïu“«òûHª…Œ”X++®F`0
+ù0©"ëeòSÕ‡×S&[ã#nÐñ&!X¶éË:w‹‚û¥æóA4àê½»`À#â¸
+Ì—øÛ?ýéÏü‰)4¥œ©Óú”ðñ}óï/÷ïßþø-ÿŽ°Î™\Ƨ÷:×_¿|ÿõóOß^¯àp.ýÁhpË_ÿø—?基º Ús&M‘ýçÏ?þôǯÿûWTT‰~žþÁ{pà ­údÁ'¼¨‹À´ä9óoþøöí÷?üêôO¿ýݯÿù·ßh®.ò'Wx3†êÞ„ˆÌÈõßó_N—Ï_ÿÏ篿Bj4ªùd™ˆãŸ~}¹üþþÖäÙgüŸ¹,óé–ǧ©²þñ»	¼3F…›‘ää'gA–wSÉ/<Xt¸}Æ.Ecuìó\ñÜpU	ñ¡¬»`#M×(Kà(™)"Z"z2Ž*ÂøÕÄ/õ·ŠlãéHC¬ˆ~!ò»,ˆ÷¹©¿Ku —	ÜEã¹nrÕßI$Ï žÝð9 «%YqQdÐb,4``°ÎÄó÷t§3JÉçÚ³^Ü„tê
+|2JBL>,W£”ka†ýýr~Áäz88Ù±ÔKž‰£ÀÏ'ŽË—<§LÜik,äwY¹ðý2·Ðô"Ö
+ãøƒ»¹N`›wVžë&W-å÷‘Tc;,õe¨XdËA.¬oîòÈgÏcì ä*è ^ü6&#t’0a•m⋉MzLûL—ö5í(¡úH.•]–Ïe`át‡g—±°Q»ôå!ïù)†Š`—i/¨k¢N:ÐUÍ#Bulv§…+ºÂÚ¡ìòt 0S3a Nxxã#Lü°þçZû̽öÌÖcd—ø¦›Ðjðù$·x1a—çÒ‘°‘Æ/¯Y®J©*û\£a*³øØ)TJê×nÉKœ~Å(S½ ߁-f·z€ûF1<än=w­28<s}°Žw6ʵUÂGLÛ`¾©dÞHÉSà*€jÆT›{ëIý>soáæ;‘|3åëªÏŠÕî[˜vy;Hx×1|³¼ÍyÊoeŸ÷q$ÛŒHÍdËLê#»ªîéNÁí3Ðö™»5ÚZ±œï¢lIòGVJß²qí¬2°Ÿ?<œužð(#ÿ
+åNk|À}£5>ä~:6!6>y’¶œxöp¯8vyh»¼]a0ï¼ ¨ÚÌ_nÅ¥–Å.Ó¥ÑðÑT—*ñX2J]GÞ纘BcJˆñ[æAÔ¦ý Ò£!µæpSÝ8¼];¼C	ìò®K ÃâÅwV¡³ô>ËÅ46žn³ÇƒR¬sXãQ¯ÓÉÙçA—ËU!BGsš©c/Ù(µ¿Ýa¹4ZÀÛ¢µ{Ÿ½%k¶Ã¢Xùa	¥ayÀÒaAüÁº5Ι$9`¹Ç"XÒ4!¶y§H)†åKÃ’°¨µ$U¤ÉË]Åq«#ôŠ„Ò°<`ÙÝa÷Áu†ß\I%Š—ÆÜ××=FÁÐ@¦ðk¥§LXŸ®g³ðfË	5˜£¿$r$8g×0iXú,Jib^]zÕÄÄó(wÝ CÞ<9õ ^à–Šõÿœª+0s¨#¸;õš…«áÈôvãeó9¶ºúÍ|ìLàð®'ñ"o
+ˆ9Š‡áRV#ñ|^(.Êv®ûk9uöÿQ²‡x7)L¼Š¥"Þº2ÀñÒ2”S£D>öÛ)^É©&|”ì!îMž^Ñå÷
+YQpg…\–ñ©à© =ÍÔUž¦_‘Ác®ã˜°ÙÕ	tUÁ9„ùu“€‡ú¨ž˜IsÑ£	¬ß<«‰uÁ,rÉ÷¶)E¡áýözLˆ»Û‡DKÏÁO;	’nÆ)E±‰Ã.::ãEã”&a°ƒðim«%G­™šuJQloÝ6ìKÂñ¸Þº…÷ý:‡
+þN‚¤›uJQl"Á°‹ŽÎ:AÑ8Š.”ˆ„ÁŽZrÏj[-9i‰\L}ÄÝ(á\›*·ä@p¨æXS—tçNGu–_’UAçM¨;ZHQPxšÑTÔtó&Aš€Á†ZjÏh×à%;Ë”"Ȥ	piäiâGu&@’Í4¥(2 ÈUE3MA‡`4	ƒƒ|2ËÙÙ¦&ÍאKïlÐ8ª‹0’l¶)E‘© E®*šm
+Â8£I¬üã“Y6xG>ÂÖR–6Bí+jÚ¾%ݹÆQ=D éÒûœüX\óxš(tò%ÝüGc¨øš C?øÄ'°fð„b¦Ž´Sƒ+-¹3HÚz㨾 Ité=…á‘܆Wäw	‚ÆQ6	†ðOaÏàõÄ"M)i“†WZmg‘´ëÆQÛ}“ éÒ{Ã#¹
+¯Èï,£"lÿàëžÂžÁÃÉzMó8~W¦¬~ÛíSJÖn5ÝüBÇÁ-¿P=¨è|&äÒ|Ô±>k®¡&›g°Ÿ²åL\Ý3™5ø¼Î°Ji¸j+m¸k;î-«-½ã`OÐI¨ž¡³L)ŠM|…BWÑ,Oa¿hË>18¿ç2lð‚i•Ò€ÕvÛ€×–Ý›VÛ~ÇÁ¾¡“P}EgšR›x….Σ™&¾Ã~Ж}0bp‡ÏeØ~¼ú“¹mFÄÙà“ FÁÑ^2#â5Ø™‡°lVô|RYÓ€UfOVÃqϳ	ÐdÕ þJH”‹Ï>JöÌNÅä×äë‹Ðߟf_YÀÅù„VqûC|^5»Œ"°RŠ8f¨q>1•Þ.¼=§Îòõ—YkÞb	]U˜iŠAˆš}eØsv Z
+®ÉaO'žñžìN¼š]æ>bÍ\<Ž»	C¨ù¯¹UÄÈ
+¾·åžf£\EŒ¾"}Å‘0ˆá³‹%ºÞQE½áŠqà}2ãK“KØ1ïdmÕm }ù@ÙcÈš‚ƒ¨[…w‹^ÃÛgÞ­†õD±w˜±D>ªÐ#
+.»ùJ™q‰wKÀí~¯0.iÂÛ,7(-“êÞRLwß~áPkLÆÈñ”ÂGüo¶ê}ž!üÔ\ºO¡†¬nÕ?µðƒO¢‘–b|TµðÀŽÇþrôô[)eRƒO}ˆà˜m„·\hžá}/š<6µNÐVÙÏ—<¶à˜øZZÁÃóf×bŸy?äTŽÜw	<”î¿…°Pp=’Ïû“ÞŒ€Y7(~:»úbÞùäå«
+¥åRí[Ši‚NýÒÁòƒO¥…ǝó¦þ
+8„¸KŸfÄUïûŸ€}0ßu$J0—JïäZ
+_Lø Éü)GITÞ“[÷ö8-±ô’6ÊÖp¾|Ü¡›aOp 'ÞgÞkÇ4ÅK<è´î-”€K`¡X7Dzç±Ã3Šuga‰i“lüªwK¹Õÿ’aŽñh,€u#ELW¼œL½ï$'sqü*¹2½5
+9! É‹§Å	ÏêÅOyF ²ÙÒ¯/9-|GÉ8T¯
+XáxmÈp×–>JXå9:Ó¡iÊQAƒbT++^;ËœÒÕe*÷R„º)󻕪UÓÍ2ãÜ&@Ó¢¢Yæ\æØ&Á~Y×tHÚ,3C-VV¼çäŸÔD(r×6-äëXUq;Åݺz»ªBÀݪª0†÷‹³›9l(ujr2'¬@5ŠœcÝåúy÷¹s&,+˜4Ý«ûÜÍ3¢TLÜ­ocÂsèþú		á5nÝÇ^†ûØÝÍj¼ž^hh‚[ð‰†|oúóÛ¿}þÚ_®ÆS¦46nWÿãûÍï¼]Šæ«ø3¦Ðà×ñ›–¾x¡$»Â€ëR¯Ù'_¹ø'SfÜ¿£P¢áº+‹C„Øís]^ü#ÉÌUpèˆ)¸lŒÓ›Eá ÉŠ™C8¼
+̧»;ÊTc¨|9ÄE²¨ú‰Få¥8´P^¹cY¸htƒÈ¦%[y „fùÐû#\{·ÛÈ!yŒ6õyD¥‚î‰DGéÍ0u7%q;DÂüÄÕí·€équC¿‹#³ËÝ8Âݳ7ÁŽõî}O91\)\7p]:‚’Á»¶|•Â²pí–ž%74£:!Þ5B£{à00ë{P¸‡ïw€»}?)n¼þQoH8<¾L.P)×®
+=âÚÞKt¸›òi&§›
+‡°XfŽáQÿ®¬Üçî­<Â}çj¢C&)CÞtÖó€jŸy};Ñ¥‰£üJûÜ=ž#܏¯ìiu×êiðàhJƒ¿Ì²úZ»ÜÃç:ÀÝ5õZ±ñ2¬çQ¹V¥Ô¦¾Ïµos-F́åÔ“ý½]Cpߨ"¹_’shÊ|Ø™<#Þ˜§n6ã݃Û5fŸ{ð¸»"¡É>¢fù\c	!žp1J-–]k=Ö8ýiÁú肱/†pÖ¶VÆî2÷¶`n¦J-*X>â:Z’J©Ã>Wë>ià}NqÅqœäÅ(}§õˆëÒh!‘›]w¤–u€«Ãåð<sê5
+eÀõ€«áJ‘£Ë6…BèQÝçi˜RÎr«Ôr	¥Çôˆ«Ã„ñ¥×W	¦»<—ÖHZ)‹×ê®KmBž/«JµÇ"R´7¥´†ø€ý́ð:.m®½ \{ËZñяp7sÝ昚uŠÍµ—7÷æ,AÈ$íð´ÇJ[f^\[
+Þx‹G,‘t”ÄËZ.£¨\ï'¾z×4{·p¨xwÝÀï þo¯-)cá¡à]ÎÚo
+¤‚Ձ8wzJäË–š‹§R+®·-ÌËêƒÜRÖ-Ú¹Bí¡ü|p5zGŸšæIí¬qL{
+^—i¹®9\›?Löp	Ñ_êTñÖŠAÿ»¢ê(xi#wŠ×rª	%{¸„èp’"ðžÍÂY‹KÆ,gq~APÃ*MÓ¯ŸëãH¸*i4Yp¡KÆíH@ø|êTH9„qD0˜0\@|Fó¸aóÎvSŠ ›¼wÝ9ìloYæ73:~Ïh²Y¦&·¨è,Æ¡UÂhÅ+×ûç´ì;^'ãÎζFah”tˆö­È=öµ°sb¶y¼€ƒýèƁÊÞhRõ6JEf¹©0Û„q(F•0ZÁõOjYmkµâ°l
+=¬„¹žÏÐö‹XÉ]¯ÉÎ…ØïÕAXvMWùAlà›A†õnÕ éÎ…GEhj3{:£¿ØÙ¥E&-WKÓn†IÛ·ß«k°ìšn†	Åp‰ ƒ-:ÂqD“01¸Åç2lðŠfZ£TlÖn+tkØjšµ|û½:Ë®iUkf¸i0Ó‚qD“018Åç2¬÷‰ÁÓosç>ÂtŽØÿжKóîÜ·nIw¤qTÿ`4]Ut$ÐD'W	!ófª¨ÉÎèï‚Psô>ñ‰Œ|bg—R–´[ƒ--»3LÚ~㨾Á$hº¦…&¸¨h†	ý]!jöшÁ'>—aƒO4Ó¥³v+À­e›iÖöGõ
+&AÓª¹Q*6“P¡›
+5Í0èï
+Q³F>ñ¹ë}¢,ä4÷'ëúɦsü¦ŽµmIwî£qTç`4]UtîÃÕxÔæêÉÈæ¡jºóÆ!%ÿ`BïŸÉªÁ+v†)EqIÃ5ÜÒ²;ˤé7ŽêL‚¦›eJdê}·ú§f™z0åP"`´bp‹OfÙàͶF©È¬é
+rkÛf›5þÆQƒIдjn†ÖüOEÞ<”ÚÖ|˜r(H0Z18Æ'³lÿz¢wÓÄ\žc[¼F¤¥@|Æ(7‹U4ÅV‰¤ª¾i£‡ ð2s„K‹
+T>¡ â5&•€ø“k:$
+‚B9¤
+à}J»¸R1×eR3M)jNℸÚæÒT£¸™mŽ•Žaü6kµX5·ñÍ, 
+P¬Là{F³ö¯'<1@#Î?¼Ÿx€»¿á"xÕ8ñþ¯zö38úxKb……ß\
+„»¹J¹6JÄiSìX<Æë2Êáãz&›/D¬dAúŒsoƒô\ê¥A“µÕ·Áôåe#‚ç3b¸=ÛÞíÝåÝ­ˆ>D¾‹'èø,žRêñ*ÅÇ3öÀσô”Iv&ƒÇ“‰Ë
+BË£º·ÓÝ·‚_8TöÒ‰døê\¦eý¦§´ëL]söx&8XÐÓŸCÑ'D¤˜M¹X¼
+æp5͵°FO„”ß?ê(£Þ¹ÿ Éü%GIÿ΃lxÜ^ÒFÙΗ’;4`?c$–¸Cš¦øø†â>ó^ö™æä©<œ¥^ŠÎ°RÜÌab¶ÇÄÕˆ\Ç}âP)C²ãW½[Šéíšï/æèsák?óÂÁq±)‡™/6áFß\Ü9ÐX at xށ:¥)†S&?´¤dw?Ò2‘ˏ–~}‰9rw¥˜Z‘°‚ñj¸pM	G;kö%"Ðól
+4ýú¢”¢kþ•¯QÎá¨zg
+?žØR‰|(&˜JI6“„ €5{K³üfßÝIÁl¢Þ
+l
+$ÝlRJCX%¬Lî3=£y¨¸3¿¸Œv E{mT­²ð¥i¿r.ËíÊY–û•S@™ðÆ9¡PúÓ<~â ÓÏ»Æùøò¸©Ô]c
+ðÛˆÜN7§õ“’x{Š†šŸÈKÌ1ܼÂï]aúÌ>aÈ^ÂòðSÜÞbâ§=TOøÕyޘǯi:ý?þZ
+ˆ¸šFZpOb)•ÁõŸ
+*
+…¬àSÇÁÈÉ5 †cT2O…ìÆÁÍTsüúõõùáÇïø«]øøÙ'òˆ)ȃ™ÿõû¾ýáõûo¯lÞ÷¯Ÿ+@ŒR–ú(hή>’ùõúüõÇÿ{úýþËWÊôùô;úì²{[ÿòòÿ à{B‹
 endstream
 endobj
-3086 0 obj
+3079 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110925)
-/ModDate (D:20080610110925)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090459-05'00')
+/ModDate (D:20080528090459-05'00')
 >>
 endobj
-3087 0 obj
+3080 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-3088 0 obj
+3082 0 obj
 <<
-/BaseFont /UBZVCS#2BAlbanyAMT
-/FontDescriptor 3090 0 R
 /Type /Font
 /FirstChar 32
 /LastChar 121
-/Widths [ 600 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 600 600 0 600 0 0 0 0 0 0 600 600 600 600 600 600 600 0 600 0 0 600 600 600 0 600 0 0 600 600 600 600 0 0 0 0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 0 600 600 600 600 600 600 0 600]
-/Encoding /WinAnsiEncoding
+/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 278 278 556 556 556 556 556 556 556 556 556 0 278 0 0 0 0 0 0 667 667 722 722 667 611 778 0 278 0 0 556 833 722 0 667 0 0 667 611 722 667 0 0 0 0 0 0 0 0 0 0 556 556 500 556 556 278 556 556 222 0 500 222 833 556 556 556 0 333 500 278 556 500 722 0 500]
 /Subtype /Type1
+/FontDescriptor 2063 0 R
+/BaseFont 2067 0 R
+/Encoding 3081 0 R
 >>
 endobj
-3089 0 obj
-10204
+3083 0 obj
+10175
 endobj
-3090 0 obj
-<<
-/Type /FontDescriptor
-/FontName /UBZVCS#2BAlbanyAMT
-/FontBBox [ 0 -186 593 667]
-/Flags 5
-/Ascent 667
-/CapHeight 667
-/Descent -186
-/ItalicAngle 0
-/StemV 88
-/AvgWidth 600
-/MaxWidth 600
-/MissingWidth 600
-/CharSet (/L/A/seven/y/n/c/M/B/eight/o/d/N/C/p/e/period/D/colon/slash/f/P/E/r/zero/g/F/s/one/h/G/t/i/two/S/u/three/T/I/v/k/four/U/w/l/a/V/five/six/m/b/space)
-/FontFile3 3091 0 R
->>
-endobj
-3091 0 obj
-<<
-/Subtype /Type1C
-/Filter /FlateDecode
-/Length 3092 0 R
->>
-stream
-xœ}X	TW—®¶éªŠ (eƒ‘¤Š1$ˆ*ÅågÜ@\ÀÈª([D”fÓ¦"tÓÍbÓ¸FQQEÜqW&KŒâoÌvëŸÇÌ™WÝhwr&s‡CU½÷î»ßýîwïEF8ô"d2Yïà´„øUpä\éÉGt—‰ïôß•ó(Jüîß>Šw‰ ¿Œ>¥N2ÞIÎ;9lÇõKÑ­?49C~?B.“ån©
-ÍÌR­J]¶|µÇ˜Ùó¼‡
-n{3:  À#Aõú‹GXrvê²ðk’Ó2³Ò“3VOðÅ«ÓÒR=–¥©²–g{Ä'%%'IÛbãÓ’Wz„§¦¥fee®ñêí1fÔ¨Ñ#ð¯1Q©é	9Ù‘™™3<f'/ËI‹_õ§—AøÎVe$F†d&E…f%‡¥DO^µ,<{yÄêÔ99s§®Y³6->6=Ác츑ã}Fãëçÿ!AŒ ‰™D1’xˆ&&>„'1‹'Þ'"ˆÑÄÄb
-áEÌ%¦CˆbáGÄþÄPb1ƒø˜OD!ÄX"Š%dÄ@âm™p'úý	‚!J•p#üp|ìUÙ?dzïÕ")ϐ?sw8£ðWðŠäbò$5‘ÚO¦w¾•øVgï¬Þׇ:>ršäTæÔÑÇ·Ï©¾lß’¾§9ïêÚïp¿ÏúuõOê¯é¦ÿ.ó\¶14cb~°lÀ¿Ä—}Å—¼ æ2ß
-ÍrHÍÊûd^W]£Ñ©8CªŠµ…E•Ú:®£;'Pz**”žÄXBšJE…Zu‹üPe9¼8.Èô  E.A´òòRØm…Q¤Y¯«©Öèr¹-Í
-´”Ti°½ôÙ‰DÝ9Š4R¥Æ;Ò«ad]%ÞQŒ¯4‘<^
-(”h	WÔ’Ø2ŠjM‚¬&A Œ“Ã!×0ä©@6«)*ªÔàC
-±_úêj^ÅM#¡R4)jlÇ"9™g½ ‰;O"ôƒ§Š3v+(2WƒWèµfÎb;Û)d	.à"Àî7æLý•A’'Òª:®uÆ‘¹ÖS͸ÙÜŽƒ
-ò€`0n3Ò̱Ÿ6šÜ?ãÍڝ¹{ÖT¯âÓiħR6ï{‘&ë%ò¸TБ'_ò\¶vÆ,_"_€Íð¾ÅSÁiWˆNÊøC±õQ<
-Ž¢?ø€Ûõëõ‡Z¹OÍÛêøjºR]Y¬Ù´¹XÃÎ_4=;¯ìxÿ7w´C¯'wãc·rÌ­¼-Ú÷*]¥™cšžSÌ­:må:–i*Ы¸7¬¹+ˆÎ˜4_Â$%Œ†ß•Ý9Avqö¶—*æì–žªk¤§!$òA]h4t)†HQ.,’üÜݝ“jƒXÚm°ìÎå‚Å=	¾èw…vìt2æl?‰j¥‚ÿ¡Œ±cËeòyû­§7–ž»Ÿ»¼Oš~üÅPmÆΑJVB2Œ£î]ˆ›õчòB»•ÞTߨ=Û´fÇ2~9gA˜jQfñ¹76yVU"—÷½3êÿj`¼ú	ú ¯Ñ .Áá·Çãß2v¼§çØG¯ºž>ú…³ì_%À+ê·×»œh±9úº1E¢JìRŽ°áv©É…wgÄ‘qŠ-pL+r~ù8v\>tûËŽyA½A–)šK¢Lx¥ìz8Þ¯ôš0ÞÛk¶úðÑOì›Hý"À-A.nr͍ԛ8 o‰žRz›¹öîD]KÿAæYA2q礈ØÇÓd|‘D.u—*¬¸èÙøøUâVåâc3wMå§ð3?Ž[¿$s2E£;8#gxçjÛ®§Ø=»ªL¼6ëÕš
-›4%lÌôù‡co{{½‚>Ü
-¿{	ògb£ÊØÒü
-M5O×è&(“¶Gr¬9#x(%!vPÄð<q—\È ¹`ŠÁOX|@&!Ö€b¬ÞPFž˜z>ýOC¿þ	ŽóG<Gý‚æg…Dz~^ùª#ØÛgB÷‰÷_¼ø²ý'k!D€¡‚LÜ‹”üñMõ–?™Ð:;0ÀËõE®x‚ûsp:Ùh(6—lÜ´AË%®ɉäÁO¸Yø;-8˜¿¿sñ%ÿ’oÞ6Š¶É0¦ô·VBÛŸI‚k8À`î<ƒ? äÊ¢L›47’BwŽŔ÷¨s|SÁ¡åB®™|,B
-ö2œ}­U2HÁgoÅ‹ìtmQyúØ¡ëÛ…›ö°'Kx~OWa”*KôE[¸´Šp]2OžÂEùQoäì[Ôém—­_‘&C¸¡èuœ-@™Õ§ÇØn ä+a"	dgû÷?Œ½3˜CûìÒ±;Ç>ƒIseÓKB¾”A$õðúœˆðÐÙ~VJ€™_K:à"ðlùCXÛìÆœÆfp{Æ‘*}qM•¾²Ž7ªNS¹®PS¬bã'$SL+÷&ótêj‰U,pÝÁÔßÜ„)cÀ¬+©,*(Á0§‘#ºA½F4
-[Å´»i˜vˆ–˜¶Î»û¨s˜åÉÊ»›8uôÆšõú<…ÃÇ$ÓÔ½Ží<澃¯_¿kµN[¶©BBÝP…QÏ«á>ÞžcÈàçóÑ™#ÇÑ¡ú|‡¥£f»	ß*™G×ÏÛâŽFŒ@4¢~wÏî¿~‚CJ*bnL‹ÞÂÅÍRñU(²•?l:ÔÔp z?/Ðø!ç(æÅ>Œ ™GhR–òE;æ~`ÐÈÁ˜ûíí?pÕ^ÏÐ,·¼ºÚxQÑÀá†7•W¡®©©°¢ówhÿ%îVÍ„wÁú[R|í18t1Ša¢R¹|\ílžf½CM[Y—±WÅíÍÛ«m×^ÐîÑî)ÜS`Zů¦cì´$¿'7gu^¥1à26MRn~ÎÕijXfsµNoæŒTKÊ©¼ëXO/<8¸¶1m·r{²q¦Î·²dKN5>kMõz“iPË…ígÒ?*g™Áù[tš*÷jsÅx›bãBYÄ2ÆuÅØ‚±É·`¶[J,÷ÃmNŸë6/±&’Äh+{q 'Õç¯~jºÀ¿ÝÌïÀýÁî×ýAe“7jqXÔO¹ä¿:j~O0C€#’>‹ŽÍr¬YÉÊZi}m•åXIEÖXÎáÐPrîÇË4ó°’yú>w¸{yïµ£ÍGšŽš.ñüÝ„òùt^t…¡Ž}N™7ê
-J°Rq‡çÖMå§ñÑ«ãâç/NæCé`
-ùý}×v£®ñRÏe~ÅÜñi‘Ãœ/àH™Kz@ŽÁ6miG;È ¶Eß
-ä‘}Q½á“MµlBöä¼9<°•ƒzÈ´Á×ùø3ô’ÁŒñ=)}í˜Õu"?;Iý«^YПŒŸ(×i5*n6…QÅî&-Œ¸HÕiõElÇC	ŒÊ\þ)¨ŽÂ¥£nÌ`q–X£dŒB|\]´ûà‰~ñuI«¹†œÃën¯»ST_²»`oži%¿œž3ónÜúÉõÍÛ°²ò4N¬
-*W¯©ªÁæØ}c\$\ξåNßÜzÙºúhò..Íœ©ÿGu¤![—eÊ64ð
-ôµ¶Ó¶ÅÍÜjá_…¶Ú½ºB_ÇýBIý¸Í×ÝF§U?m‰åƬ§»vØZI&7UtÂ’e‡z
-É›9gfú÷ù‰Â)ηu¡çð׉gç}uýÊÞsX»&´@ †ü¾ U €*¿r}UMöÈîň¤Tºb,´XîÁ„îœÁvÄÝJþ9‚–h
-ŸY	œDS©QÁ4½kkJ°€ä ÎVáá®-cð{é í ‚¬âA		rxæ
-ãE'E³¶³1á&‰Û¾NÅZyC§âš­G·_$0±ÛIñšfà"µpðvôƒè]ˆrcº!¦(4Y‘E2ÿe»Ÿ›õ~jìe‰a)î•Ý'H¦ÛfËÕfk‰‚ñÀ$:·!u¶Ûk[ñªŒb‰ ë²öu1^–±­V[‘+å±JSR€áÚ†ÑsrÌäɾcÂo?cáyûŸº?U1^eé ð*äð/(@ÞÙ	¬Œr1Òõ	F±ÎÅ^¶+&Ãѽ1 WÌ'ý‘>îáÉéÿ\h&Ÿb [Ég`|ŽŒVDÅÍy´¾KÊÛ7£ôî6ÿ?yûšça\0/㶠÷ÔyâX×ÙQ½`.Ô“w"ÎŒL™V¨šË®ßPR¯§Õúbã–­¥¥[Ù‡;÷êóô½Ó+raTtmZŬýý£ý8æTàó¾¿syÏÅ6ö˜Ã”±ÒÄ×ØzõÎç=Y¢>láîvq“uê
-†¥r¨w½HB2l÷K|ª®ÕXƒ²VÛÓ°=$Qq?!Q”˜£x`™Œj‹+TÒ©-‘«ãöÛ™w›á͉] ÿ¤~Ã\°­ÿ£æ›ÙÉd™=”KÅž3ÂÅ#vroÜŸšÈ¡[ívÓÃ	éû‘Ë
-;±û‡ö¯Hæ˜
-t×~Ág©pˆ¼¼øÔ¬„k$±9'Wî\ÊÇóªÔEô_‡p ð$Ü
-ã¬5îÍHC2EÝæ¡_<#™Ö°WRïºCŸ—]Ðú
-‰œƒç®[ÀAø*~0þ=ï	C‡L|ÜÕõå#KçÄfU\1çÄ%òë6lÞ¸¹„ÿäíõ•ÅFCyym9âÑþZ7H­Õi°òèëÙCpTêÙ
-š¡+¢÷m¸§ã~ñ™èו̃»M
--mƒžï6l|à˜¨ñ·SXæYHjÒ¼©ƒ†>øË/O¿|y=élÈA6¶áõWæ†M‹šuæúí¶ó÷9ÔäÀ<{ruvPð”¨	ÓÛî·_½øXºtÁvœ„·”Ié™ÉËÒ?ãä‘ý{IÛ›lùa"üû5j8‹ßg¤¤4dXßïkjJÛgÙ+®ùwe™~K_NÔzu±ö“Â}õß36j7oà7¾­ÆóƤZÇZœ—aÏá8nòáW%øäHˆäËzáZ݁ƒ¼âo^(ù«u7÷ßÕx°®…oáU;R–˜#øéôŠŸž‘¾$'5um<fÊúìƌ㪛üUë,#ƒƒ¸ÆßE%ŠŠÎ߸AË«ñeÔú2}¿•…-ŠîjÄÙý‹ã®Ý<ÂZyŸð«‹)¤à •ƒ› ,£.žüâRç·4³œ¡Oý¾+ƒžù?9'sQ
-››]”ΫèâJµÁX¡«ÙÊÖ^¹zô&Oß¿13<.7s„‡Ö£lE4ÅD‹ïvfk;ŸË2åË{xÑ,¸ˆB®¥—GðHYZZVZŠ»Ë¯¯ì9Òzqз7¼æ-ÈOOd×æªx5­®TõeeU•lCã)óž~pyÑô¥™Iñ*n:óBžÎ[ßSW™[/žL8ÕgîœúË9mùƲžV«ÕEU…y\kÖÉ¢S¸í¤~xüóÍÅm“ôô3øF¢»(ÑÝ&)Ñ€QvÕsª$øRýPqaÀ)ÛíŠìXåvT,¦`— D$$ÁïŠ]¤Õ×ÇÍ0i;ÓwðÛ±èF‰W”PBÖ[O[ˡøÿ*ÂùT^^VQŶl?jlæ駗"Çžâ=+f×ÑE\‰nÃìÄúâbuQMÁ5Üé§óÏb'¿þ\À!èÑû¥hÖÌç¬&[ُŸÁ	lÌ6(7™7×ðþš©mïÑS÷À›yó¦Ê
-ú
-[7—ó´QWi4/߶tÚ´UKæqA3–ûóˆ¦QèÔz¿ìøˆWOG…Å$$²[c”»ëj·8ܼk؝‹S'úÏž1ÿÄ“,nc%_Z²“^ô¯ÇU»¾žü¼·àø¹““àÔ‡ þv?
-endstream
-endobj
-3092 0 obj
-4487
-endobj
-3083 0 obj <<
-/D [3081 0 R /XYZ 100.892 685.529 null]
+3081 0 obj <<
+/Type /Encoding
+/Differences [32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]
 >> endobj
+3076 0 obj <<
+/D [3074 0 R /XYZ 100.892 685.529 null]
+>> endobj
 1750 0 obj <<
-/D [3081 0 R /XYZ 100.892 660.623 null]
+/D [3074 0 R /XYZ 100.892 660.623 null]
 >> endobj
-3078 0 obj <<
-/D [3081 0 R /XYZ 100.892 632.325 null]
+3071 0 obj <<
+/D [3074 0 R /XYZ 100.892 632.325 null]
 >> endobj
-3084 0 obj <<
-/D [3081 0 R /XYZ 100.892 227.404 null]
+3077 0 obj <<
+/D [3074 0 R /XYZ 100.892 227.404 null]
 >> endobj
-3085 0 obj <<
-/D [3081 0 R /XYZ 100.892 121.245 null]
+3078 0 obj <<
+/D [3074 0 R /XYZ 100.892 121.245 null]
 >> endobj
-3080 0 obj <<
+3073 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
-/XObject << /Im6 3046 0 R >>
+/XObject << /Im6 3039 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3095 0 obj <<
+3086 0 obj <<
 /Length 2446      
 /Filter /FlateDecode
 >>
@@ -13567,164 +13270,164 @@
 h\‚˜yÃÇz»ýéB")ûž­Æ'Ÿ}Òï„QAkÝûÎúX6ÍWUÅú¼Õÿz(7jÿ¶Þ§íx'•¢öååoЄÐØis|h#ouÇ[—úÓØ}ñ¢8×ÿ1eV7
 endstream
 endobj
-3094 0 obj <<
+3085 0 obj <<
 /Type /Page
-/Contents 3095 0 R
-/Resources 3093 0 R
+/Contents 3086 0 R
+/Resources 3084 0 R
 /MediaBox [0 0 612 792]
-/Parent 3098 0 R
-/Annots [ 3048 0 R 3049 0 R 3050 0 R 3051 0 R 3052 0 R 3053 0 R 3054 0 R 3055 0 R 3056 0 R 3057 0 R 3058 0 R 3059 0 R 3060 0 R 3061 0 R 3062 0 R 3063 0 R 3064 0 R 3065 0 R 3066 0 R ]
+/Parent 3089 0 R
+/Annots [ 3041 0 R 3042 0 R 3043 0 R 3044 0 R 3045 0 R 3046 0 R 3047 0 R 3048 0 R 3049 0 R 3050 0 R 3051 0 R 3052 0 R 3053 0 R 3054 0 R 3055 0 R 3056 0 R 3057 0 R 3058 0 R 3059 0 R ]
 >> endobj
-3048 0 obj <<
+3041 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.081 599.917 226.801 615.459]
 /Subtype /Link
 /A << /S /GoTo /D (ch5-massivesmb) >>
 >> endobj
-3049 0 obj <<
+3042 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.081 585.969 226.801 601.511]
 /Subtype /Link
 /A << /S /GoTo /D (ch5-dc-common) >>
 >> endobj
-3050 0 obj <<
+3043 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.081 572.022 226.801 587.563]
 /Subtype /Link
 /A << /S /GoTo /D (ch5-commonsmb) >>
 >> endobj
-3051 0 obj <<
+3044 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.081 558.074 226.801 573.616]
 /Subtype /Link
 /A << /S /GoTo /D (ch5-bldg1-smb) >>
 >> endobj
-3052 0 obj <<
+3045 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.081 544.126 226.801 559.668]
 /Subtype /Link
 /A << /S /GoTo /D (ch5-bldg2-smb) >>
 >> endobj
-3053 0 obj <<
+3046 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.081 530.179 226.801 545.72]
 /Subtype /Link
 /A << /S /GoTo /D (ch5-dommem-smb) >>
 >> endobj
-3054 0 obj <<
+3047 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.081 516.231 226.801 531.773]
 /Subtype /Link
 /A << /S /GoTo /D (massive-dhcp) >>
 >> endobj
-3055 0 obj <<
+3048 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.081 502.283 226.801 517.825]
 /Subtype /Link
 /A << /S /GoTo /D (bldg1dhcp) >>
 >> endobj
-3056 0 obj <<
+3049 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.081 488.336 226.801 503.877]
 /Subtype /Link
 /A << /S /GoTo /D (bldg2dhcp) >>
 >> endobj
-3057 0 obj <<
+3050 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.081 474.388 232.255 489.93]
 /Subtype /Link
 /A << /S /GoTo /D (massive-nameda) >>
 >> endobj
-3058 0 obj <<
+3051 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.081 460.44 232.255 475.982]
 /Subtype /Link
 /A << /S /GoTo /D (massive-namedb) >>
 >> endobj
-3059 0 obj <<
+3052 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.081 446.493 232.255 462.034]
 /Subtype /Link
 /A << /S /GoTo /D (massive-namedc) >>
 >> endobj
-3060 0 obj <<
+3053 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.081 432.545 232.255 448.087]
 /Subtype /Link
 /A << /S /GoTo /D (abmasbizdns) >>
 >> endobj
-3061 0 obj <<
+3054 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.081 418.597 232.255 434.139]
 /Subtype /Link
 /A << /S /GoTo /D (abmasusdns) >>
 >> endobj
-3062 0 obj <<
+3055 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.081 404.65 232.255 420.191]
 /Subtype /Link
 /A << /S /GoTo /D (bldg12nameda) >>
 >> endobj
-3063 0 obj <<
+3056 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.081 390.702 232.255 406.244]
 /Subtype /Link
 /A << /S /GoTo /D (bldg12namedb) >>
 >> endobj
-3064 0 obj <<
+3057 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.081 376.754 232.255 392.296]
 /Subtype /Link
 /A << /S /GoTo /D (loopback) >>
 >> endobj
-3065 0 obj <<
+3058 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.081 362.806 232.255 378.348]
 /Subtype /Link
 /A << /S /GoTo /D (dnsloopy) >>
 >> endobj
-3066 0 obj <<
+3059 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.081 348.859 232.255 364.4]
 /Subtype /Link
 /A << /S /GoTo /D (roothint) >>
 >> endobj
-3096 0 obj <<
-/D [3094 0 R /XYZ 151.701 685.529 null]
+3087 0 obj <<
+/D [3085 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1851 0 obj <<
-/D [3094 0 R /XYZ 151.701 660.623 null]
+/D [3085 0 R /XYZ 151.701 660.623 null]
 >> endobj
-3079 0 obj <<
-/D [3094 0 R /XYZ 151.701 643.753 null]
+3072 0 obj <<
+/D [3085 0 R /XYZ 151.701 643.753 null]
 >> endobj
-3097 0 obj <<
-/D [3094 0 R /XYZ 151.701 177.541 null]
+3088 0 obj <<
+/D [3085 0 R /XYZ 151.701 177.541 null]
 >> endobj
-3093 0 obj <<
+3084 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3120 0 obj <<
+3111 0 obj <<
 /Length 1325      
 /Filter /FlateDecode
 >>
@@ -13744,30 +13447,30 @@
 p™Šd±V}_ÆØ0š“mAPðySŸ÷;ZxpÅòã$yÐð®Ú¤>üâ%CÅy-://¿z7ªÓ“56ƒŸºä¡Ïi,"jþ‡êGøÙûXl¤
 endstream
 endobj
-3119 0 obj <<
+3110 0 obj <<
 /Type /Page
-/Contents 3120 0 R
-/Resources 3118 0 R
+/Contents 3111 0 R
+/Resources 3109 0 R
 /MediaBox [0 0 612 792]
-/Parent 3098 0 R
+/Parent 3089 0 R
 >> endobj
-3121 0 obj <<
-/D [3119 0 R /XYZ 100.892 685.529 null]
+3112 0 obj <<
+/D [3110 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3122 0 obj <<
-/D [3119 0 R /XYZ 100.892 533.141 null]
+3113 0 obj <<
+/D [3110 0 R /XYZ 100.892 533.141 null]
 >> endobj
-3123 0 obj <<
-/D [3119 0 R /XYZ 100.892 178.152 null]
+3114 0 obj <<
+/D [3110 0 R /XYZ 100.892 178.152 null]
 >> endobj
-3124 0 obj <<
-/D [3119 0 R /XYZ 100.892 154.352 null]
+3115 0 obj <<
+/D [3110 0 R /XYZ 100.892 154.352 null]
 >> endobj
-3118 0 obj <<
+3109 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3127 0 obj <<
+3118 0 obj <<
 /Length 1811      
 /Filter /FlateDecode
 >>
@@ -13786,58 +13489,58 @@
 ç<Êü<ŒÓ½Ôå¾Ojß"ÈŒ_Õš(!O²ØG>êü4O–^1yÍþ;™×ê¦îäÕþî{}³ù)Ü+
 endstream
 endobj
-3126 0 obj <<
+3117 0 obj <<
 /Type /Page
-/Contents 3127 0 R
-/Resources 3125 0 R
+/Contents 3118 0 R
+/Resources 3116 0 R
 /MediaBox [0 0 612 792]
-/Parent 3098 0 R
-/Annots [ 3115 0 R 3116 0 R 3117 0 R ]
+/Parent 3089 0 R
+/Annots [ 3106 0 R 3107 0 R 3108 0 R ]
 >> endobj
-3115 0 obj <<
+3106 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.019 619.448 410.828 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (secure) >>
 >> endobj
-3116 0 obj <<
+3107 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.349 619.448 490.332 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (abmasbiz) >>
 >> endobj
-3117 0 obj <<
+3108 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.978 605.899 253.152 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (eth2zone) >>
 >> endobj
-3128 0 obj <<
-/D [3126 0 R /XYZ 151.701 685.529 null]
+3119 0 obj <<
+/D [3117 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3129 0 obj <<
-/D [3126 0 R /XYZ 151.701 606.895 null]
+3120 0 obj <<
+/D [3117 0 R /XYZ 151.701 606.895 null]
 >> endobj
-3130 0 obj <<
-/D [3126 0 R /XYZ 151.701 545.171 null]
+3121 0 obj <<
+/D [3117 0 R /XYZ 151.701 545.171 null]
 >> endobj
-3131 0 obj <<
-/D [3126 0 R /XYZ 151.701 400.646 null]
+3122 0 obj <<
+/D [3117 0 R /XYZ 151.701 400.646 null]
 >> endobj
-3132 0 obj <<
-/D [3126 0 R /XYZ 151.701 319.967 null]
+3123 0 obj <<
+/D [3117 0 R /XYZ 151.701 319.967 null]
 >> endobj
-3133 0 obj <<
-/D [3126 0 R /XYZ 151.701 210.068 null]
+3124 0 obj <<
+/D [3117 0 R /XYZ 151.701 210.068 null]
 >> endobj
-3125 0 obj <<
+3116 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R /F60 1917 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3137 0 obj <<
+3128 0 obj <<
 /Length 1716      
 /Filter /FlateDecode
 >>
@@ -13854,45 +13557,45 @@
  •	Õ;QÜÝ9Û£…-nü^ÿŸ¾ö†AX#
 endstream
 endobj
-3136 0 obj <<
+3127 0 obj <<
 /Type /Page
-/Contents 3137 0 R
-/Resources 3135 0 R
+/Contents 3128 0 R
+/Resources 3126 0 R
 /MediaBox [0 0 612 792]
-/Parent 3098 0 R
-/Annots [ 3134 0 R ]
+/Parent 3089 0 R
+/Annots [ 3125 0 R ]
 >> endobj
-3134 0 obj <<
+3125 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [372.633 394.077 436.069 405.766]
 /Subtype /Link
 /A << /S /GoTo /D (ch4appscfg) >>
 >> endobj
-3138 0 obj <<
-/D [3136 0 R /XYZ 100.892 685.529 null]
+3129 0 obj <<
+/D [3127 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3139 0 obj <<
-/D [3136 0 R /XYZ 100.892 622.565 null]
+3130 0 obj <<
+/D [3127 0 R /XYZ 100.892 622.565 null]
 >> endobj
-3140 0 obj <<
-/D [3136 0 R /XYZ 100.892 550.527 null]
+3131 0 obj <<
+/D [3127 0 R /XYZ 100.892 550.527 null]
 >> endobj
-3141 0 obj <<
-/D [3136 0 R /XYZ 100.892 458.19 null]
+3132 0 obj <<
+/D [3127 0 R /XYZ 100.892 458.19 null]
 >> endobj
 262 0 obj <<
-/D [3136 0 R /XYZ 100.892 181.119 null]
+/D [3127 0 R /XYZ 100.892 181.119 null]
 >> endobj
-3142 0 obj <<
-/D [3136 0 R /XYZ 100.892 154.939 null]
+3133 0 obj <<
+/D [3127 0 R /XYZ 100.892 154.939 null]
 >> endobj
-3135 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R /F89 2333 0 R /F73 2334 0 R /F17 1131 0 R >>
-/XObject << /Im3 2328 0 R >>
+3126 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R /F89 2330 0 R /F73 2331 0 R /F17 1131 0 R >>
+/XObject << /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3145 0 obj <<
+3136 0 obj <<
 /Length 1893      
 /Filter /FlateDecode
 >>
@@ -13906,33 +13609,33 @@
 §P>›×÷5·Á-²æž_ Ñ»`eýÑOIɝK«7Ì£³Œ¦B-}	`}Ã;ßP¥ÀNãþèfÒ‰BÔ(Á©#¡?(ü}È_].›–‡6ׯÝ4@ÌjüXýÖÂqØ5$v>b¤'ÿv4ŒÏ‡Â†ÒOÀ•àÔ8Â4Ì5Gš‹$y$£øt0(sËL’eÿ%þüpwö]‰¤¼P ÿõþòÿÞküúj¿ùÔÈÏ%
 endstream
 endobj
-3144 0 obj <<
+3135 0 obj <<
 /Type /Page
-/Contents 3145 0 R
-/Resources 3143 0 R
+/Contents 3136 0 R
+/Resources 3134 0 R
 /MediaBox [0 0 612 792]
-/Parent 3098 0 R
+/Parent 3089 0 R
 >> endobj
-3146 0 obj <<
-/D [3144 0 R /XYZ 151.701 685.529 null]
+3137 0 obj <<
+/D [3135 0 R /XYZ 151.701 685.529 null]
 >> endobj
 266 0 obj <<
-/D [3144 0 R /XYZ 151.701 615.925 null]
+/D [3135 0 R /XYZ 151.701 615.925 null]
 >> endobj
-3147 0 obj <<
-/D [3144 0 R /XYZ 151.701 584.749 null]
+3138 0 obj <<
+/D [3135 0 R /XYZ 151.701 584.749 null]
 >> endobj
-3148 0 obj <<
-/D [3144 0 R /XYZ 151.701 520.702 null]
+3139 0 obj <<
+/D [3135 0 R /XYZ 151.701 520.702 null]
 >> endobj
-3149 0 obj <<
-/D [3144 0 R /XYZ 151.701 355.631 null]
+3140 0 obj <<
+/D [3135 0 R /XYZ 151.701 355.631 null]
 >> endobj
-3143 0 obj <<
+3134 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3153 0 obj <<
+3144 0 obj <<
 /Length 2137      
 /Filter /FlateDecode
 >>
@@ -13949,47 +13652,47 @@
 ¢$¤Дp ƒ¡þqÓp!QØvûZ ôy`ðx¡Ý9§Uzs|V7·ZÚ£¯imö @:$J†ó)ÔÖ'åE¹ÿF2ú2ù·ß¢yæýA¢?lÚš{Ø–E“O at OXF&$.ÿUÌs_jq„À?r‘8ZÄÀÝÌ5:ŠùU?ý}›LßÇç»ÿˆoÂ
 endstream
 endobj
-3152 0 obj <<
+3143 0 obj <<
 /Type /Page
-/Contents 3153 0 R
-/Resources 3151 0 R
+/Contents 3144 0 R
+/Resources 3142 0 R
 /MediaBox [0 0 612 792]
-/Parent 3098 0 R
-/Annots [ 3150 0 R ]
+/Parent 3089 0 R
+/Annots [ 3141 0 R ]
 >> endobj
-3150 0 obj <<
+3141 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.417 447.18 309.161 458.869]
 /Subtype /Link
 /A << /S /GoTo /D (ch5-initgrps) >>
 >> endobj
-3154 0 obj <<
-/D [3152 0 R /XYZ 100.892 685.529 null]
+3145 0 obj <<
+/D [3143 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3155 0 obj <<
-/D [3152 0 R /XYZ 100.892 595.467 null]
+3146 0 obj <<
+/D [3143 0 R /XYZ 100.892 595.467 null]
 >> endobj
-3156 0 obj <<
-/D [3152 0 R /XYZ 100.892 485.138 null]
+3147 0 obj <<
+/D [3143 0 R /XYZ 100.892 485.138 null]
 >> endobj
-3157 0 obj <<
-/D [3152 0 R /XYZ 100.892 393.979 null]
+3148 0 obj <<
+/D [3143 0 R /XYZ 100.892 393.979 null]
 >> endobj
-3158 0 obj <<
-/D [3152 0 R /XYZ 100.892 279.964 null]
+3149 0 obj <<
+/D [3143 0 R /XYZ 100.892 279.964 null]
 >> endobj
-3159 0 obj <<
-/D [3152 0 R /XYZ 100.892 229.453 null]
+3150 0 obj <<
+/D [3143 0 R /XYZ 100.892 229.453 null]
 >> endobj
-3160 0 obj <<
-/D [3152 0 R /XYZ 100.892 153.965 null]
->> endobj
 3151 0 obj <<
+/D [3143 0 R /XYZ 100.892 153.965 null]
+>> endobj
+3142 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3164 0 obj <<
+3155 0 obj <<
 /Length 1340      
 /Filter /FlateDecode
 >>
@@ -14003,24 +13706,24 @@
 «Ô)óÃRº	Ëïž`!îD9ߨÆüÉZ:ª¡©b6¯‹Ž·âÕ3Núþ£sœé—¸`Ož=ü{¸Uôïálþûð]öç7À4Âÿïÿ öOç
 endstream
 endobj
-3163 0 obj <<
+3154 0 obj <<
 /Type /Page
-/Contents 3164 0 R
-/Resources 3162 0 R
+/Contents 3155 0 R
+/Resources 3153 0 R
 /MediaBox [0 0 612 792]
-/Parent 3167 0 R
+/Parent 3158 0 R
 >> endobj
-3165 0 obj <<
-/D [3163 0 R /XYZ 151.701 685.529 null]
+3156 0 obj <<
+/D [3154 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3166 0 obj <<
-/D [3163 0 R /XYZ 151.701 436.175 null]
+3157 0 obj <<
+/D [3154 0 R /XYZ 151.701 436.175 null]
 >> endobj
-3162 0 obj <<
+3153 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3174 0 obj <<
+3165 0 obj <<
 /Length 1383      
 /Filter /FlateDecode
 >>
@@ -14039,48 +13742,48 @@
 L?-F‰™ËõÐÜOv¿^½-2ËS-Ç/üüÑiˆ
 endstream
 endobj
-3173 0 obj <<
+3164 0 obj <<
 /Type /Page
-/Contents 3174 0 R
-/Resources 3172 0 R
+/Contents 3165 0 R
+/Resources 3163 0 R
 /MediaBox [0 0 612 792]
-/Parent 3167 0 R
-/Annots [ 3168 0 R 3169 0 R ]
+/Parent 3158 0 R
+/Annots [ 3159 0 R 3160 0 R ]
 >> endobj
-3168 0 obj <<
+3159 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.35 153.694 335.949 165.384]
 /Subtype /Link
 /A << /S /GoTo /D (ch5-procstart) >>
 >> endobj
-3169 0 obj <<
+3160 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [166.449 118.128 237.112 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (ch5-domsvrspec) >>
 >> endobj
-3175 0 obj <<
-/D [3173 0 R /XYZ 100.892 685.529 null]
+3166 0 obj <<
+/D [3164 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3176 0 obj <<
-/D [3173 0 R /XYZ 100.892 660.623 null]
+3167 0 obj <<
+/D [3164 0 R /XYZ 100.892 660.623 null]
 >> endobj
-3177 0 obj <<
-/D [3173 0 R /XYZ 100.892 434.57 null]
+3168 0 obj <<
+/D [3164 0 R /XYZ 100.892 434.57 null]
 >> endobj
-3178 0 obj <<
-/D [3173 0 R /XYZ 100.892 176.708 null]
+3169 0 obj <<
+/D [3164 0 R /XYZ 100.892 176.708 null]
 >> endobj
-3179 0 obj <<
-/D [3173 0 R /XYZ 100.892 154.691 null]
+3170 0 obj <<
+/D [3164 0 R /XYZ 100.892 154.691 null]
 >> endobj
-3172 0 obj <<
+3163 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F60 1917 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3187 0 obj <<
+3178 0 obj <<
 /Length 1556      
 /Filter /FlateDecode
 >>
@@ -14097,85 +13800,85 @@
 Ç–uõðž×DûN™úåšÉÚg`ÏCòü}±Â7ùº%eê@ßR Ò— îmÏßv‡;\1-ÄçZyó|'è~åU¹údü—N;}2"×üɘ»OF¤)ÿ¿x€oåAøñO·3bþ‡ë § ý
 endstream
 endobj
-3186 0 obj <<
+3177 0 obj <<
 /Type /Page
-/Contents 3187 0 R
-/Resources 3185 0 R
+/Contents 3178 0 R
+/Resources 3176 0 R
 /MediaBox [0 0 612 792]
-/Parent 3167 0 R
-/Annots [ 3170 0 R 3189 0 R 3171 0 R 3182 0 R 3183 0 R 3184 0 R ]
+/Parent 3158 0 R
+/Annots [ 3161 0 R 3180 0 R 3162 0 R 3173 0 R 3174 0 R 3175 0 R ]
 >> endobj
-3170 0 obj <<
+3161 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.463 646.546 511.352 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (secure) >>
 >> endobj
-3189 0 obj <<
+3180 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.978 632.997 270.91 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (secure) >>
 >> endobj
-3171 0 obj <<
+3162 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [275.584 632.997 338.182 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (ch4valid) >>
 >> endobj
-3182 0 obj <<
+3173 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [313.486 346.41 376.041 358.099]
 /Subtype /Link
 /A << /S /GoTo /D (ch5-procstart) >>
 >> endobj
-3183 0 obj <<
+3174 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.258 133.798 287.922 145.488]
 /Subtype /Link
 /A << /S /GoTo /D (ch5-domsvrspec) >>
 >> endobj
-3184 0 obj <<
+3175 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.675 120.249 492.274 131.938]
 /Subtype /Link
 /A << /S /GoTo /D (ch4valid) >>
 >> endobj
-3188 0 obj <<
-/D [3186 0 R /XYZ 151.701 685.529 null]
+3179 0 obj <<
+/D [3177 0 R /XYZ 151.701 685.529 null]
 >> endobj
 270 0 obj <<
-/D [3186 0 R /XYZ 151.701 619.851 null]
+/D [3177 0 R /XYZ 151.701 619.851 null]
 >> endobj
+3172 0 obj <<
+/D [3177 0 R /XYZ 151.701 581.943 null]
+>> endobj
 3181 0 obj <<
-/D [3186 0 R /XYZ 151.701 581.943 null]
+/D [3177 0 R /XYZ 151.701 504.782 null]
 >> endobj
-3190 0 obj <<
-/D [3186 0 R /XYZ 151.701 504.782 null]
+3182 0 obj <<
+/D [3177 0 R /XYZ 151.701 370.371 null]
 >> endobj
-3191 0 obj <<
-/D [3186 0 R /XYZ 151.701 370.371 null]
+3183 0 obj <<
+/D [3177 0 R /XYZ 151.701 322.429 null]
 >> endobj
-3192 0 obj <<
-/D [3186 0 R /XYZ 151.701 322.429 null]
+3184 0 obj <<
+/D [3177 0 R /XYZ 151.701 240.094 null]
 >> endobj
-3193 0 obj <<
-/D [3186 0 R /XYZ 151.701 240.094 null]
->> endobj
-3194 0 obj <<
-/D [3186 0 R /XYZ 151.701 171.308 null]
->> endobj
 3185 0 obj <<
+/D [3177 0 R /XYZ 151.701 171.308 null]
+>> endobj
+3176 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3197 0 obj <<
+3188 0 obj <<
 /Length 3822      
 /Filter /FlateDecode
 >>
@@ -14197,123 +13900,123 @@
 .óÕ¿¿:~%ì_¤^iQoþËYý­Ñ2Ù:ß¼i¢öjÓ*£}˜ÆÃØÙ>L~îà4ɾ,î)%-cͯ÷à"šººiôžÛŠË›§‡›eÍl^r2Ûϱò~öð©¾û]E‡ª‡½ÁµE€hž\\oŽºkpÓÿݦg
 endstream
 endobj
-3196 0 obj <<
+3187 0 obj <<
 /Type /Page
-/Contents 3197 0 R
-/Resources 3195 0 R
+/Contents 3188 0 R
+/Resources 3186 0 R
 /MediaBox [0 0 612 792]
-/Parent 3167 0 R
+/Parent 3158 0 R
 >> endobj
-3198 0 obj <<
-/D [3196 0 R /XYZ 100.892 685.529 null]
+3189 0 obj <<
+/D [3187 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1544 0 obj <<
-/D [3196 0 R /XYZ 100.892 660.623 null]
+/D [3187 0 R /XYZ 100.892 660.623 null]
 >> endobj
-3099 0 obj <<
-/D [3196 0 R /XYZ 100.892 642.541 null]
+3090 0 obj <<
+/D [3187 0 R /XYZ 100.892 642.541 null]
 >> endobj
+3190 0 obj <<
+/D [3187 0 R /XYZ 100.892 636.563 null]
+>> endobj
+3191 0 obj <<
+/D [3187 0 R /XYZ 100.892 642.839 null]
+>> endobj
+3192 0 obj <<
+/D [3187 0 R /XYZ 100.892 630.884 null]
+>> endobj
+3193 0 obj <<
+/D [3187 0 R /XYZ 100.892 618.929 null]
+>> endobj
+3194 0 obj <<
+/D [3187 0 R /XYZ 100.892 606.974 null]
+>> endobj
+3195 0 obj <<
+/D [3187 0 R /XYZ 100.892 595.019 null]
+>> endobj
+3196 0 obj <<
+/D [3187 0 R /XYZ 100.892 583.063 null]
+>> endobj
+3197 0 obj <<
+/D [3187 0 R /XYZ 100.892 571.108 null]
+>> endobj
+3198 0 obj <<
+/D [3187 0 R /XYZ 100.892 559.153 null]
+>> endobj
 3199 0 obj <<
-/D [3196 0 R /XYZ 100.892 636.563 null]
+/D [3187 0 R /XYZ 100.892 547.198 null]
 >> endobj
 3200 0 obj <<
-/D [3196 0 R /XYZ 100.892 642.839 null]
+/D [3187 0 R /XYZ 100.892 535.243 null]
 >> endobj
 3201 0 obj <<
-/D [3196 0 R /XYZ 100.892 630.884 null]
+/D [3187 0 R /XYZ 100.892 523.288 null]
 >> endobj
 3202 0 obj <<
-/D [3196 0 R /XYZ 100.892 618.929 null]
+/D [3187 0 R /XYZ 100.892 511.332 null]
 >> endobj
 3203 0 obj <<
-/D [3196 0 R /XYZ 100.892 606.974 null]
+/D [3187 0 R /XYZ 100.892 499.377 null]
 >> endobj
 3204 0 obj <<
-/D [3196 0 R /XYZ 100.892 595.019 null]
+/D [3187 0 R /XYZ 100.892 475.467 null]
 >> endobj
 3205 0 obj <<
-/D [3196 0 R /XYZ 100.892 583.063 null]
+/D [3187 0 R /XYZ 100.892 451.557 null]
 >> endobj
 3206 0 obj <<
-/D [3196 0 R /XYZ 100.892 571.108 null]
+/D [3187 0 R /XYZ 100.892 439.601 null]
 >> endobj
 3207 0 obj <<
-/D [3196 0 R /XYZ 100.892 559.153 null]
+/D [3187 0 R /XYZ 100.892 427.646 null]
 >> endobj
 3208 0 obj <<
-/D [3196 0 R /XYZ 100.892 547.198 null]
+/D [3187 0 R /XYZ 100.892 415.691 null]
 >> endobj
 3209 0 obj <<
-/D [3196 0 R /XYZ 100.892 535.243 null]
+/D [3187 0 R /XYZ 100.892 403.736 null]
 >> endobj
 3210 0 obj <<
-/D [3196 0 R /XYZ 100.892 523.288 null]
+/D [3187 0 R /XYZ 100.892 391.781 null]
 >> endobj
 3211 0 obj <<
-/D [3196 0 R /XYZ 100.892 511.332 null]
+/D [3187 0 R /XYZ 100.892 379.826 null]
 >> endobj
 3212 0 obj <<
-/D [3196 0 R /XYZ 100.892 499.377 null]
+/D [3187 0 R /XYZ 100.892 367.87 null]
 >> endobj
 3213 0 obj <<
-/D [3196 0 R /XYZ 100.892 475.467 null]
+/D [3187 0 R /XYZ 100.892 355.915 null]
 >> endobj
 3214 0 obj <<
-/D [3196 0 R /XYZ 100.892 451.557 null]
+/D [3187 0 R /XYZ 100.892 343.96 null]
 >> endobj
 3215 0 obj <<
-/D [3196 0 R /XYZ 100.892 439.601 null]
+/D [3187 0 R /XYZ 100.892 332.005 null]
 >> endobj
 3216 0 obj <<
-/D [3196 0 R /XYZ 100.892 427.646 null]
+/D [3187 0 R /XYZ 100.892 320.05 null]
 >> endobj
 3217 0 obj <<
-/D [3196 0 R /XYZ 100.892 415.691 null]
+/D [3187 0 R /XYZ 100.892 308.095 null]
 >> endobj
 3218 0 obj <<
-/D [3196 0 R /XYZ 100.892 403.736 null]
+/D [3187 0 R /XYZ 100.892 296.139 null]
 >> endobj
 3219 0 obj <<
-/D [3196 0 R /XYZ 100.892 391.781 null]
+/D [3187 0 R /XYZ 100.892 284.184 null]
 >> endobj
-3220 0 obj <<
-/D [3196 0 R /XYZ 100.892 379.826 null]
->> endobj
-3221 0 obj <<
-/D [3196 0 R /XYZ 100.892 367.87 null]
->> endobj
-3222 0 obj <<
-/D [3196 0 R /XYZ 100.892 355.915 null]
->> endobj
-3223 0 obj <<
-/D [3196 0 R /XYZ 100.892 343.96 null]
->> endobj
-3224 0 obj <<
-/D [3196 0 R /XYZ 100.892 332.005 null]
->> endobj
-3225 0 obj <<
-/D [3196 0 R /XYZ 100.892 320.05 null]
->> endobj
-3226 0 obj <<
-/D [3196 0 R /XYZ 100.892 308.095 null]
->> endobj
-3227 0 obj <<
-/D [3196 0 R /XYZ 100.892 296.139 null]
->> endobj
-3228 0 obj <<
-/D [3196 0 R /XYZ 100.892 284.184 null]
->> endobj
 274 0 obj <<
-/D [3196 0 R /XYZ 100.892 231.012 null]
+/D [3187 0 R /XYZ 100.892 231.012 null]
 >> endobj
-3180 0 obj <<
-/D [3196 0 R /XYZ 100.892 212.093 null]
+3171 0 obj <<
+/D [3187 0 R /XYZ 100.892 212.093 null]
 >> endobj
-3195 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R /F11 2494 0 R /F17 1131 0 R /F59 1905 0 R >>
+3186 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R /F11 2489 0 R /F17 1131 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3231 0 obj <<
+3222 0 obj <<
 /Length 3444      
 /Filter /FlateDecode
 >>
@@ -14362,108 +14065,108 @@
 c²§eYlK*]Ì‹§ºt窎mŽ™“í3Ö^k¢/EŠê¡¬oþtGáӲ؁Œ+Jaƒh˜}|\4½·?ÓôL‰P5Œ,ÖÐúËe¨>¦ïê³W†ëü6{S5M¹Ý“ðû¹ˆý«Z㟫¦_àæ]hÐcÃGÿÃc(­
 endstream
 endobj
-3230 0 obj <<
+3221 0 obj <<
 /Type /Page
-/Contents 3231 0 R
-/Resources 3229 0 R
+/Contents 3222 0 R
+/Resources 3220 0 R
 /MediaBox [0 0 612 792]
-/Parent 3167 0 R
+/Parent 3158 0 R
 >> endobj
-3232 0 obj <<
-/D [3230 0 R /XYZ 151.701 685.529 null]
+3223 0 obj <<
+/D [3221 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1545 0 obj <<
-/D [3230 0 R /XYZ 151.701 660.623 null]
+/D [3221 0 R /XYZ 151.701 660.623 null]
 >> endobj
-3100 0 obj <<
-/D [3230 0 R /XYZ 151.701 631.719 null]
+3091 0 obj <<
+/D [3221 0 R /XYZ 151.701 631.719 null]
 >> endobj
+3224 0 obj <<
+/D [3221 0 R /XYZ 151.701 625.741 null]
+>> endobj
+3225 0 obj <<
+/D [3221 0 R /XYZ 151.701 632.017 null]
+>> endobj
+3226 0 obj <<
+/D [3221 0 R /XYZ 151.701 620.062 null]
+>> endobj
+3227 0 obj <<
+/D [3221 0 R /XYZ 151.701 608.107 null]
+>> endobj
+3228 0 obj <<
+/D [3221 0 R /XYZ 151.701 584.197 null]
+>> endobj
+3229 0 obj <<
+/D [3221 0 R /XYZ 151.701 572.242 null]
+>> endobj
+3230 0 obj <<
+/D [3221 0 R /XYZ 151.701 560.286 null]
+>> endobj
+3231 0 obj <<
+/D [3221 0 R /XYZ 151.701 548.331 null]
+>> endobj
+3232 0 obj <<
+/D [3221 0 R /XYZ 151.701 536.376 null]
+>> endobj
 3233 0 obj <<
-/D [3230 0 R /XYZ 151.701 625.741 null]
+/D [3221 0 R /XYZ 151.701 524.421 null]
 >> endobj
 3234 0 obj <<
-/D [3230 0 R /XYZ 151.701 632.017 null]
+/D [3221 0 R /XYZ 151.701 512.466 null]
 >> endobj
 3235 0 obj <<
-/D [3230 0 R /XYZ 151.701 620.062 null]
+/D [3221 0 R /XYZ 151.701 500.511 null]
 >> endobj
 3236 0 obj <<
-/D [3230 0 R /XYZ 151.701 608.107 null]
+/D [3221 0 R /XYZ 151.701 488.555 null]
 >> endobj
 3237 0 obj <<
-/D [3230 0 R /XYZ 151.701 584.197 null]
+/D [3221 0 R /XYZ 151.701 476.6 null]
 >> endobj
 3238 0 obj <<
-/D [3230 0 R /XYZ 151.701 572.242 null]
+/D [3221 0 R /XYZ 151.701 464.645 null]
 >> endobj
 3239 0 obj <<
-/D [3230 0 R /XYZ 151.701 560.286 null]
+/D [3221 0 R /XYZ 151.701 452.69 null]
 >> endobj
 3240 0 obj <<
-/D [3230 0 R /XYZ 151.701 548.331 null]
+/D [3221 0 R /XYZ 151.701 440.735 null]
 >> endobj
 3241 0 obj <<
-/D [3230 0 R /XYZ 151.701 536.376 null]
+/D [3221 0 R /XYZ 151.701 428.78 null]
 >> endobj
 3242 0 obj <<
-/D [3230 0 R /XYZ 151.701 524.421 null]
+/D [3221 0 R /XYZ 151.701 416.824 null]
 >> endobj
 3243 0 obj <<
-/D [3230 0 R /XYZ 151.701 512.466 null]
+/D [3221 0 R /XYZ 151.701 404.869 null]
 >> endobj
 3244 0 obj <<
-/D [3230 0 R /XYZ 151.701 500.511 null]
+/D [3221 0 R /XYZ 151.701 392.914 null]
 >> endobj
 3245 0 obj <<
-/D [3230 0 R /XYZ 151.701 488.555 null]
+/D [3221 0 R /XYZ 151.701 380.959 null]
 >> endobj
 3246 0 obj <<
-/D [3230 0 R /XYZ 151.701 476.6 null]
+/D [3221 0 R /XYZ 151.701 369.004 null]
 >> endobj
 3247 0 obj <<
-/D [3230 0 R /XYZ 151.701 464.645 null]
+/D [3221 0 R /XYZ 151.701 357.049 null]
 >> endobj
 3248 0 obj <<
-/D [3230 0 R /XYZ 151.701 452.69 null]
+/D [3221 0 R /XYZ 151.701 345.093 null]
 >> endobj
 3249 0 obj <<
-/D [3230 0 R /XYZ 151.701 440.735 null]
+/D [3221 0 R /XYZ 151.701 333.138 null]
 >> endobj
 3250 0 obj <<
-/D [3230 0 R /XYZ 151.701 428.78 null]
+/D [3221 0 R /XYZ 151.701 321.183 null]
 >> endobj
-3251 0 obj <<
-/D [3230 0 R /XYZ 151.701 416.824 null]
->> endobj
-3252 0 obj <<
-/D [3230 0 R /XYZ 151.701 404.869 null]
->> endobj
-3253 0 obj <<
-/D [3230 0 R /XYZ 151.701 392.914 null]
->> endobj
-3254 0 obj <<
-/D [3230 0 R /XYZ 151.701 380.959 null]
->> endobj
-3255 0 obj <<
-/D [3230 0 R /XYZ 151.701 369.004 null]
->> endobj
-3256 0 obj <<
-/D [3230 0 R /XYZ 151.701 357.049 null]
->> endobj
-3257 0 obj <<
-/D [3230 0 R /XYZ 151.701 345.093 null]
->> endobj
-3258 0 obj <<
-/D [3230 0 R /XYZ 151.701 333.138 null]
->> endobj
-3259 0 obj <<
-/D [3230 0 R /XYZ 151.701 321.183 null]
->> endobj
-3229 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R /F11 2494 0 R /F59 1905 0 R >>
+3220 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R /F11 2489 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3262 0 obj <<
+3253 0 obj <<
 /Length 3816      
 /Filter /FlateDecode
 >>
@@ -14508,132 +14211,132 @@
 ºš±:î»*–Ûö`v|Ín³]kú`!à_Àìž>߯iÎñxsùÓîøtâÊæeÝ­€ßÉ$þw˜zÅáéx؜ýøÊTmðL[üŒ/³{ª·c*ã?BóW(øIà‡žÐs¶:>Õ—ó¿âüîâKƒ—õ?†Q
 endstream
 endobj
-3261 0 obj <<
+3252 0 obj <<
 /Type /Page
-/Contents 3262 0 R
-/Resources 3260 0 R
+/Contents 3253 0 R
+/Resources 3251 0 R
 /MediaBox [0 0 612 792]
-/Parent 3167 0 R
+/Parent 3158 0 R
 >> endobj
-3263 0 obj <<
-/D [3261 0 R /XYZ 100.892 685.529 null]
+3254 0 obj <<
+/D [3252 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1546 0 obj <<
-/D [3261 0 R /XYZ 100.892 660.623 null]
+/D [3252 0 R /XYZ 100.892 660.623 null]
 >> endobj
-3101 0 obj <<
-/D [3261 0 R /XYZ 100.892 631.719 null]
+3092 0 obj <<
+/D [3252 0 R /XYZ 100.892 631.719 null]
 >> endobj
+3255 0 obj <<
+/D [3252 0 R /XYZ 100.892 625.741 null]
+>> endobj
+3256 0 obj <<
+/D [3252 0 R /XYZ 100.892 632.017 null]
+>> endobj
+3257 0 obj <<
+/D [3252 0 R /XYZ 100.892 620.062 null]
+>> endobj
+3258 0 obj <<
+/D [3252 0 R /XYZ 100.892 608.107 null]
+>> endobj
+3259 0 obj <<
+/D [3252 0 R /XYZ 100.892 596.152 null]
+>> endobj
+3260 0 obj <<
+/D [3252 0 R /XYZ 100.892 584.197 null]
+>> endobj
+3261 0 obj <<
+/D [3252 0 R /XYZ 100.892 572.242 null]
+>> endobj
+3262 0 obj <<
+/D [3252 0 R /XYZ 100.892 560.286 null]
+>> endobj
+3263 0 obj <<
+/D [3252 0 R /XYZ 100.892 548.331 null]
+>> endobj
 3264 0 obj <<
-/D [3261 0 R /XYZ 100.892 625.741 null]
+/D [3252 0 R /XYZ 100.892 536.376 null]
 >> endobj
 3265 0 obj <<
-/D [3261 0 R /XYZ 100.892 632.017 null]
+/D [3252 0 R /XYZ 100.892 524.421 null]
 >> endobj
 3266 0 obj <<
-/D [3261 0 R /XYZ 100.892 620.062 null]
+/D [3252 0 R /XYZ 100.892 512.466 null]
 >> endobj
 3267 0 obj <<
-/D [3261 0 R /XYZ 100.892 608.107 null]
+/D [3252 0 R /XYZ 100.892 500.511 null]
 >> endobj
 3268 0 obj <<
-/D [3261 0 R /XYZ 100.892 596.152 null]
+/D [3252 0 R /XYZ 100.892 476.6 null]
 >> endobj
 3269 0 obj <<
-/D [3261 0 R /XYZ 100.892 584.197 null]
+/D [3252 0 R /XYZ 100.892 464.645 null]
 >> endobj
 3270 0 obj <<
-/D [3261 0 R /XYZ 100.892 572.242 null]
+/D [3252 0 R /XYZ 100.892 452.69 null]
 >> endobj
 3271 0 obj <<
-/D [3261 0 R /XYZ 100.892 560.286 null]
+/D [3252 0 R /XYZ 100.892 440.735 null]
 >> endobj
 3272 0 obj <<
-/D [3261 0 R /XYZ 100.892 548.331 null]
+/D [3252 0 R /XYZ 100.892 428.78 null]
 >> endobj
 3273 0 obj <<
-/D [3261 0 R /XYZ 100.892 536.376 null]
+/D [3252 0 R /XYZ 100.892 416.824 null]
 >> endobj
 3274 0 obj <<
-/D [3261 0 R /XYZ 100.892 524.421 null]
+/D [3252 0 R /XYZ 100.892 404.869 null]
 >> endobj
 3275 0 obj <<
-/D [3261 0 R /XYZ 100.892 512.466 null]
+/D [3252 0 R /XYZ 100.892 392.914 null]
 >> endobj
 3276 0 obj <<
-/D [3261 0 R /XYZ 100.892 500.511 null]
+/D [3252 0 R /XYZ 100.892 369.004 null]
 >> endobj
 3277 0 obj <<
-/D [3261 0 R /XYZ 100.892 476.6 null]
+/D [3252 0 R /XYZ 100.892 357.049 null]
 >> endobj
 3278 0 obj <<
-/D [3261 0 R /XYZ 100.892 464.645 null]
+/D [3252 0 R /XYZ 100.892 345.093 null]
 >> endobj
 3279 0 obj <<
-/D [3261 0 R /XYZ 100.892 452.69 null]
+/D [3252 0 R /XYZ 100.892 333.138 null]
 >> endobj
 3280 0 obj <<
-/D [3261 0 R /XYZ 100.892 440.735 null]
+/D [3252 0 R /XYZ 100.892 321.183 null]
 >> endobj
 3281 0 obj <<
-/D [3261 0 R /XYZ 100.892 428.78 null]
+/D [3252 0 R /XYZ 100.892 309.228 null]
 >> endobj
 3282 0 obj <<
-/D [3261 0 R /XYZ 100.892 416.824 null]
+/D [3252 0 R /XYZ 100.892 297.273 null]
 >> endobj
 3283 0 obj <<
-/D [3261 0 R /XYZ 100.892 404.869 null]
+/D [3252 0 R /XYZ 100.892 285.317 null]
 >> endobj
 3284 0 obj <<
-/D [3261 0 R /XYZ 100.892 392.914 null]
+/D [3252 0 R /XYZ 100.892 273.362 null]
 >> endobj
 3285 0 obj <<
-/D [3261 0 R /XYZ 100.892 369.004 null]
+/D [3252 0 R /XYZ 100.892 261.407 null]
 >> endobj
 3286 0 obj <<
-/D [3261 0 R /XYZ 100.892 357.049 null]
+/D [3252 0 R /XYZ 100.892 249.452 null]
 >> endobj
 3287 0 obj <<
-/D [3261 0 R /XYZ 100.892 345.093 null]
+/D [3252 0 R /XYZ 100.892 237.497 null]
 >> endobj
 3288 0 obj <<
-/D [3261 0 R /XYZ 100.892 333.138 null]
+/D [3252 0 R /XYZ 100.892 225.542 null]
 >> endobj
 3289 0 obj <<
-/D [3261 0 R /XYZ 100.892 321.183 null]
+/D [3252 0 R /XYZ 100.892 171.774 null]
 >> endobj
-3290 0 obj <<
-/D [3261 0 R /XYZ 100.892 309.228 null]
->> endobj
-3291 0 obj <<
-/D [3261 0 R /XYZ 100.892 297.273 null]
->> endobj
-3292 0 obj <<
-/D [3261 0 R /XYZ 100.892 285.317 null]
->> endobj
-3293 0 obj <<
-/D [3261 0 R /XYZ 100.892 273.362 null]
->> endobj
-3294 0 obj <<
-/D [3261 0 R /XYZ 100.892 261.407 null]
->> endobj
-3295 0 obj <<
-/D [3261 0 R /XYZ 100.892 249.452 null]
->> endobj
-3296 0 obj <<
-/D [3261 0 R /XYZ 100.892 237.497 null]
->> endobj
-3297 0 obj <<
-/D [3261 0 R /XYZ 100.892 225.542 null]
->> endobj
-3298 0 obj <<
-/D [3261 0 R /XYZ 100.892 171.774 null]
->> endobj
-3260 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R /F54 1912 0 R /F11 2494 0 R /F51 1134 0 R >>
+3251 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R /F54 1912 0 R /F11 2489 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3301 0 obj <<
+3292 0 obj <<
 /Length 2518      
 /Filter /FlateDecode
 >>
@@ -14656,108 +14359,108 @@
 ï2(`8Öqk @šæ»sàèžáº¤+îL9g¡U$môûP<·„‰F’Z+K??¢”±Åb«¾g~ä­.}y-¨]åáõùX]¼Þ!&óº•Æët¹.fPÀp¬#š u¯¥ÛžoBC¨:£+xZMßæ þ€ß¢}ìãqWÂã~CDg;$AûCWN»^׏|´“2ÞwìA œtMÈ)à#ð½ø/s:ÏqÌX]üß!&ó¿•Æÿt¹ÎfPÀp¬7øá¦R¦Û €m˜¹Ž@P7+}4 óÊ v<ýJ€æB¦à|¬.Ø!&@*Í ÒåjH›AñNŸõP<0åÿçG=4 ø;@[}ü¶%hƒUïxÚç4üÙç4ÌsŸå{5bY¯³žÓ@LcBŸsØÕ™<¬ÛpNC†®ožG¥‡îŸ°pžþ$XZØt×>y½Zm¾¡¯“ ü»ßð¨Ãü6ž›Ý=LcmE¹€æ1£CçÐådQÍŽí~êôéáqàS×CG¾L6ûCe´O™ŒI¥ÅX‡Øîë$;R|ÎË_VxÐäOYþf²Þ`L{2Åwõjý<Ç„Í*–õé”Å|S߸«{` Tþù¸©‡#êó,±ñ<2`ù÷óÙdSÍe‘å‡?ªéÓ¦¢i©_aO{2A”µº‰'aâS¡r³º¿o3_ÞÆ>óe«ÏcõûSµ¤7Á@í.ö_~W¯Ï<ä‡ó·¯—f>"§±¶®â³°—ÿ •2þ
 endstream
 endobj
-3300 0 obj <<
+3291 0 obj <<
 /Type /Page
-/Contents 3301 0 R
-/Resources 3299 0 R
+/Contents 3292 0 R
+/Resources 3290 0 R
 /MediaBox [0 0 612 792]
-/Parent 3326 0 R
+/Parent 3317 0 R
 >> endobj
-3302 0 obj <<
-/D [3300 0 R /XYZ 151.701 685.529 null]
+3293 0 obj <<
+/D [3291 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1547 0 obj <<
-/D [3300 0 R /XYZ 151.701 660.623 null]
+/D [3291 0 R /XYZ 151.701 660.623 null]
 >> endobj
-3102 0 obj <<
-/D [3300 0 R /XYZ 151.701 642.541 null]
+3093 0 obj <<
+/D [3291 0 R /XYZ 151.701 642.541 null]
 >> endobj
-3303 0 obj <<
-/D [3300 0 R /XYZ 151.701 636.563 null]
+3294 0 obj <<
+/D [3291 0 R /XYZ 151.701 636.563 null]
 >> endobj
-3304 0 obj <<
-/D [3300 0 R /XYZ 151.701 642.839 null]
+3295 0 obj <<
+/D [3291 0 R /XYZ 151.701 642.839 null]
 >> endobj
-3305 0 obj <<
-/D [3300 0 R /XYZ 151.701 630.884 null]
+3296 0 obj <<
+/D [3291 0 R /XYZ 151.701 630.884 null]
 >> endobj
-3306 0 obj <<
-/D [3300 0 R /XYZ 151.701 618.929 null]
+3297 0 obj <<
+/D [3291 0 R /XYZ 151.701 618.929 null]
 >> endobj
-3307 0 obj <<
-/D [3300 0 R /XYZ 151.701 606.974 null]
+3298 0 obj <<
+/D [3291 0 R /XYZ 151.701 606.974 null]
 >> endobj
-3308 0 obj <<
-/D [3300 0 R /XYZ 151.701 595.019 null]
+3299 0 obj <<
+/D [3291 0 R /XYZ 151.701 595.019 null]
 >> endobj
 1548 0 obj <<
-/D [3300 0 R /XYZ 151.701 553.063 null]
+/D [3291 0 R /XYZ 151.701 553.063 null]
 >> endobj
-3103 0 obj <<
-/D [3300 0 R /XYZ 151.701 534.98 null]
+3094 0 obj <<
+/D [3291 0 R /XYZ 151.701 534.98 null]
 >> endobj
-3309 0 obj <<
-/D [3300 0 R /XYZ 151.701 529.003 null]
+3300 0 obj <<
+/D [3291 0 R /XYZ 151.701 529.003 null]
 >> endobj
-3310 0 obj <<
-/D [3300 0 R /XYZ 151.701 535.279 null]
+3301 0 obj <<
+/D [3291 0 R /XYZ 151.701 535.279 null]
 >> endobj
-3311 0 obj <<
-/D [3300 0 R /XYZ 151.701 523.324 null]
+3302 0 obj <<
+/D [3291 0 R /XYZ 151.701 523.324 null]
 >> endobj
-3312 0 obj <<
-/D [3300 0 R /XYZ 151.701 511.369 null]
+3303 0 obj <<
+/D [3291 0 R /XYZ 151.701 511.369 null]
 >> endobj
-3313 0 obj <<
-/D [3300 0 R /XYZ 151.701 499.414 null]
+3304 0 obj <<
+/D [3291 0 R /XYZ 151.701 499.414 null]
 >> endobj
-3314 0 obj <<
-/D [3300 0 R /XYZ 151.701 487.459 null]
+3305 0 obj <<
+/D [3291 0 R /XYZ 151.701 487.459 null]
 >> endobj
 1549 0 obj <<
-/D [3300 0 R /XYZ 151.701 445.503 null]
+/D [3291 0 R /XYZ 151.701 445.503 null]
 >> endobj
-3104 0 obj <<
-/D [3300 0 R /XYZ 151.701 428.633 null]
+3095 0 obj <<
+/D [3291 0 R /XYZ 151.701 428.633 null]
 >> endobj
-3315 0 obj <<
-/D [3300 0 R /XYZ 151.701 422.655 null]
+3306 0 obj <<
+/D [3291 0 R /XYZ 151.701 422.655 null]
 >> endobj
-3316 0 obj <<
-/D [3300 0 R /XYZ 151.701 428.931 null]
+3307 0 obj <<
+/D [3291 0 R /XYZ 151.701 428.931 null]
 >> endobj
-3317 0 obj <<
-/D [3300 0 R /XYZ 151.701 416.976 null]
+3308 0 obj <<
+/D [3291 0 R /XYZ 151.701 416.976 null]
 >> endobj
-3318 0 obj <<
-/D [3300 0 R /XYZ 151.701 405.021 null]
+3309 0 obj <<
+/D [3291 0 R /XYZ 151.701 405.021 null]
 >> endobj
-3319 0 obj <<
-/D [3300 0 R /XYZ 151.701 381.111 null]
+3310 0 obj <<
+/D [3291 0 R /XYZ 151.701 381.111 null]
 >> endobj
-3320 0 obj <<
-/D [3300 0 R /XYZ 151.701 369.156 null]
+3311 0 obj <<
+/D [3291 0 R /XYZ 151.701 369.156 null]
 >> endobj
-3321 0 obj <<
-/D [3300 0 R /XYZ 151.701 357.2 null]
+3312 0 obj <<
+/D [3291 0 R /XYZ 151.701 357.2 null]
 >> endobj
-3322 0 obj <<
-/D [3300 0 R /XYZ 151.701 345.245 null]
+3313 0 obj <<
+/D [3291 0 R /XYZ 151.701 345.245 null]
 >> endobj
-3323 0 obj <<
-/D [3300 0 R /XYZ 151.701 333.29 null]
+3314 0 obj <<
+/D [3291 0 R /XYZ 151.701 333.29 null]
 >> endobj
-3324 0 obj <<
-/D [3300 0 R /XYZ 151.701 321.335 null]
+3315 0 obj <<
+/D [3291 0 R /XYZ 151.701 321.335 null]
 >> endobj
-3325 0 obj <<
-/D [3300 0 R /XYZ 151.701 192.704 null]
+3316 0 obj <<
+/D [3291 0 R /XYZ 151.701 192.704 null]
 >> endobj
-3299 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R /F11 2494 0 R /F59 1905 0 R >>
+3290 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R /F11 2489 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3331 0 obj <<
+3322 0 obj <<
 /Length 1979      
 /Filter /FlateDecode
 >>
@@ -14780,64 +14483,64 @@
 úË?^ÃË|ÀøvŒËÅ¿%GAãPà™ÄB _1m Î!ë³w¤ãÄ»âŠÑ!œœi0 ›K°pOé&	—ONþXk|½ÊÃýG4ÎåX]“^P““§Úîý¶Ž¾p¾Gdÿü@[¡NõRLÔ|7ÝÂ÷sÖÌõ§ðwÝ×ã °£\$Ì^xp¸òíúnüÂ÷õvõ?•O
 endstream
 endobj
-3330 0 obj <<
+3321 0 obj <<
 /Type /Page
-/Contents 3331 0 R
-/Resources 3329 0 R
+/Contents 3322 0 R
+/Resources 3320 0 R
 /MediaBox [0 0 612 792]
-/Parent 3326 0 R
-/Annots [ 3327 0 R 3336 0 R 3328 0 R ]
+/Parent 3317 0 R
+/Annots [ 3318 0 R 3327 0 R 3319 0 R ]
 >> endobj
-3327 0 obj <<
+3318 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.486 364.494 460.543 376.184]
 /Subtype /Link
 /A << /S /GoTo /D (appendix) >>
 >> endobj
-3336 0 obj <<
+3327 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [127.168 350.945 269.824 362.635]
 /Subtype /Link
 /A << /S /GoTo /D (appendix) >>
 >> endobj
-3328 0 obj <<
+3319 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [275.861 350.945 336.519 362.635]
 /Subtype /Link
 /A << /S /GoTo /D (domjoin) >>
 >> endobj
-3332 0 obj <<
-/D [3330 0 R /XYZ 100.892 685.529 null]
+3323 0 obj <<
+/D [3321 0 R /XYZ 100.892 685.529 null]
 >> endobj
 278 0 obj <<
-/D [3330 0 R /XYZ 100.892 575.278 null]
+/D [3321 0 R /XYZ 100.892 575.278 null]
 >> endobj
-3333 0 obj <<
-/D [3330 0 R /XYZ 100.892 543.908 null]
+3324 0 obj <<
+/D [3321 0 R /XYZ 100.892 543.908 null]
 >> endobj
-3334 0 obj <<
-/D [3330 0 R /XYZ 100.892 493.604 null]
+3325 0 obj <<
+/D [3321 0 R /XYZ 100.892 493.604 null]
 >> endobj
-3335 0 obj <<
-/D [3330 0 R /XYZ 100.892 431.668 null]
+3326 0 obj <<
+/D [3321 0 R /XYZ 100.892 431.668 null]
 >> endobj
-3337 0 obj <<
-/D [3330 0 R /XYZ 100.892 324.237 null]
+3328 0 obj <<
+/D [3321 0 R /XYZ 100.892 324.237 null]
 >> endobj
-3338 0 obj <<
-/D [3330 0 R /XYZ 100.892 262.907 null]
+3329 0 obj <<
+/D [3321 0 R /XYZ 100.892 262.907 null]
 >> endobj
-3339 0 obj <<
-/D [3330 0 R /XYZ 100.892 169.631 null]
+3330 0 obj <<
+/D [3321 0 R /XYZ 100.892 169.631 null]
 >> endobj
-3329 0 obj <<
+3320 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F17 1131 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3342 0 obj <<
+3333 0 obj <<
 /Length 2589      
 /Filter /FlateDecode
 >>
@@ -14867,48 +14570,48 @@
 þ·Åi*ks™—¦ÑŸKÐ?ýÑN.¸ââüóƒØíkÆ¿õ¹Ü@k8we6Ø×Þ!øÙ÷±R ãÎìx|:Ç›õ^QxÕØܬ¢ÙeTš¦H©!RÚ@oÃî Ý÷ÕíÅÿÿ>u
 endstream
 endobj
-3341 0 obj <<
+3332 0 obj <<
 /Type /Page
-/Contents 3342 0 R
-/Resources 3340 0 R
+/Contents 3333 0 R
+/Resources 3331 0 R
 /MediaBox [0 0 612 792]
-/Parent 3326 0 R
+/Parent 3317 0 R
 >> endobj
-3343 0 obj <<
-/D [3341 0 R /XYZ 151.701 685.529 null]
+3334 0 obj <<
+/D [3332 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3344 0 obj <<
-/D [3341 0 R /XYZ 151.701 660.623 null]
+3335 0 obj <<
+/D [3332 0 R /XYZ 151.701 660.623 null]
 >> endobj
-3345 0 obj <<
-/D [3341 0 R /XYZ 151.701 595.467 null]
+3336 0 obj <<
+/D [3332 0 R /XYZ 151.701 595.467 null]
 >> endobj
-3346 0 obj <<
-/D [3341 0 R /XYZ 151.701 507.397 null]
+3337 0 obj <<
+/D [3332 0 R /XYZ 151.701 507.397 null]
 >> endobj
-3347 0 obj <<
-/D [3341 0 R /XYZ 151.701 471.403 null]
+3338 0 obj <<
+/D [3332 0 R /XYZ 151.701 471.403 null]
 >> endobj
-3348 0 obj <<
-/D [3341 0 R /XYZ 151.701 437.53 null]
+3339 0 obj <<
+/D [3332 0 R /XYZ 151.701 437.53 null]
 >> endobj
-3349 0 obj <<
-/D [3341 0 R /XYZ 151.701 390.108 null]
+3340 0 obj <<
+/D [3332 0 R /XYZ 151.701 390.108 null]
 >> endobj
-3350 0 obj <<
-/D [3341 0 R /XYZ 151.701 356.235 null]
+3341 0 obj <<
+/D [3332 0 R /XYZ 151.701 356.235 null]
 >> endobj
-3351 0 obj <<
-/D [3341 0 R /XYZ 151.701 308.813 null]
+3342 0 obj <<
+/D [3332 0 R /XYZ 151.701 308.813 null]
 >> endobj
-3352 0 obj <<
-/D [3341 0 R /XYZ 151.701 155.118 null]
+3343 0 obj <<
+/D [3332 0 R /XYZ 151.701 155.118 null]
 >> endobj
-3340 0 obj <<
+3331 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F54 1912 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3358 0 obj <<
+3349 0 obj <<
 /Length 1943      
 /Filter /FlateDecode
 >>
@@ -14939,61 +14642,61 @@
 ýMQƘ|!žƒ§î&”L–â[f6Ê(-ÕoÖ"µsTÿ¾ä“Ï“øjÈN½(®³h>»9t3™ÓÒþØÙ9B'¾šQ‘@8Uø(’¼E Éçüò„R”ð3í³1´_ÊqîÅÉDYwe3VÊNZ<cÿ/i7A’xY’ý-y¿7j.WÌ£ŒQ ]#¨w¯eغDº¾Ô44TJ½K€Cpâ¤öò'Rð{þŽoÁ‡&¯’'=Ô=›ˆá¶yÄu]<ïY:,§©q>ŒN¹a[†ÿ´pØSñaÔv¶‡„IÖÊ(ÎX ü§b½¾4Àáb’<ÛÚ²àÂ8€ùNäI\à\,þ*Ke«ÁÎì0íA«Q*‰cÌãË`þèßüãJÂœõ7 ŸJ®ËË_º/ÚKÚÒýRxÚïg»ÕïD^è
 endstream
 endobj
-3357 0 obj <<
+3348 0 obj <<
 /Type /Page
-/Contents 3358 0 R
-/Resources 3356 0 R
+/Contents 3349 0 R
+/Resources 3347 0 R
 /MediaBox [0 0 612 792]
-/Parent 3326 0 R
-/Annots [ 3353 0 R 3354 0 R 3355 0 R ]
+/Parent 3317 0 R
+/Annots [ 3344 0 R 3345 0 R 3346 0 R ]
 >> endobj
-3353 0 obj <<
+3344 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [127.168 447.119 343.043 458.808]
 /Subtype /Link
 /A << /S /GoTo /D (appendix) >>
 >> endobj
-3354 0 obj <<
+3345 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [347.605 447.119 407.033 458.808]
 /Subtype /Link
 /A << /S /GoTo /D (domjoin) >>
 >> endobj
-3355 0 obj <<
+3346 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.059 253.907 354.641 265.596]
 /Subtype /Link
 /A << /S /GoTo /D (happy) >>
 >> endobj
-3359 0 obj <<
-/D [3357 0 R /XYZ 100.892 685.529 null]
+3350 0 obj <<
+/D [3348 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3360 0 obj <<
-/D [3357 0 R /XYZ 100.892 606.895 null]
+3351 0 obj <<
+/D [3348 0 R /XYZ 100.892 606.895 null]
 >> endobj
-3361 0 obj <<
-/D [3357 0 R /XYZ 100.892 571.428 null]
+3352 0 obj <<
+/D [3348 0 R /XYZ 100.892 571.428 null]
 >> endobj
-3362 0 obj <<
-/D [3357 0 R /XYZ 100.892 498.646 null]
+3353 0 obj <<
+/D [3348 0 R /XYZ 100.892 498.646 null]
 >> endobj
-3363 0 obj <<
-/D [3357 0 R /XYZ 100.892 396.039 null]
+3354 0 obj <<
+/D [3348 0 R /XYZ 100.892 396.039 null]
 >> endobj
 282 0 obj <<
-/D [3357 0 R /XYZ 100.892 343.811 null]
+/D [3348 0 R /XYZ 100.892 343.811 null]
 >> endobj
-3364 0 obj <<
-/D [3357 0 R /XYZ 100.892 316.659 null]
+3355 0 obj <<
+/D [3348 0 R /XYZ 100.892 316.659 null]
 >> endobj
-3356 0 obj <<
+3347 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R /F54 1912 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3367 0 obj <<
+3358 0 obj <<
 /Length 1885      
 /Filter /FlateDecode
 >>
@@ -15009,30 +14712,30 @@
 í´ömSøòék5T³¦2D¼eÌ›ksßñ¸2™çøþ¤ŽÒœÌÿ¿ ïÁ+ÄÕÃé¬q|õ°úåö~
 endstream
 endobj
-3366 0 obj <<
+3357 0 obj <<
 /Type /Page
-/Contents 3367 0 R
-/Resources 3365 0 R
+/Contents 3358 0 R
+/Resources 3356 0 R
 /MediaBox [0 0 612 792]
-/Parent 3326 0 R
+/Parent 3317 0 R
 >> endobj
-3368 0 obj <<
-/D [3366 0 R /XYZ 151.701 685.529 null]
+3359 0 obj <<
+/D [3357 0 R /XYZ 151.701 685.529 null]
 >> endobj
 286 0 obj <<
-/D [3366 0 R /XYZ 151.701 660.623 null]
+/D [3357 0 R /XYZ 151.701 660.623 null]
 >> endobj
-3369 0 obj <<
-/D [3366 0 R /XYZ 151.701 639.842 null]
+3360 0 obj <<
+/D [3357 0 R /XYZ 151.701 639.842 null]
 >> endobj
-3370 0 obj <<
-/D [3366 0 R /XYZ 151.701 611.211 null]
+3361 0 obj <<
+/D [3357 0 R /XYZ 151.701 611.211 null]
 >> endobj
-3365 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F17 1131 0 R /F15 1133 0 R /F51 1134 0 R /F60 1917 0 R /F59 1905 0 R /F90 2476 0 R >>
+3356 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F17 1131 0 R /F15 1133 0 R /F51 1134 0 R /F60 1917 0 R /F59 1905 0 R /F90 2471 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3373 0 obj <<
+3364 0 obj <<
 /Length 2174      
 /Filter /FlateDecode
 >>
@@ -15063,21 +14766,21 @@
 UÀÛþîÀºÏ‰÷9cÿQî5†‚êðmú'·;q…,³’þ!žþauß×›ÿÊ—Àß
 endstream
 endobj
-3372 0 obj <<
+3363 0 obj <<
 /Type /Page
-/Contents 3373 0 R
-/Resources 3371 0 R
+/Contents 3364 0 R
+/Resources 3362 0 R
 /MediaBox [0 0 612 792]
-/Parent 3326 0 R
+/Parent 3317 0 R
 >> endobj
-3374 0 obj <<
-/D [3372 0 R /XYZ 100.892 685.529 null]
+3365 0 obj <<
+/D [3363 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3371 0 obj <<
+3362 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F51 1134 0 R /F60 1917 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3377 0 obj <<
+3368 0 obj <<
 /Length 1361      
 /Filter /FlateDecode
 >>
@@ -15093,21 +14796,21 @@
 _~Qy¶iG³µTª¸ß“;x9ôí²óŒß‚³­'ã¬îÏÖèv yÎ@v.î9HûÅEWÄåÿ.º<.Óôü¥WÂXp;G¸ÆMâìDÅõи’40‘æÚsëyrë±›§Æ<j¬³ÇY‘—×£$ì°¯'&úö…@6Ú®¹xRçUqÿ-o47qKe_ZR¾rñõ“×´¤•Ú8Ûâ$’ây!!~ÜS³¸‰ç€‡TØü>¦2ÜpȶÛqdºñ«Üø;¸¶ƒÝôüR´¼ˆoô¿:Ö@ßeÁ;æy´ü.õ=ÅöŸ…Ňûl6(©)X€î¹ÌÞ,/77o;ª˜ÓÛz9áÉþ/k/U
 endstream
 endobj
-3376 0 obj <<
+3367 0 obj <<
 /Type /Page
-/Contents 3377 0 R
-/Resources 3375 0 R
+/Contents 3368 0 R
+/Resources 3366 0 R
 /MediaBox [0 0 612 792]
-/Parent 3379 0 R
+/Parent 3370 0 R
 >> endobj
-3378 0 obj <<
-/D [3376 0 R /XYZ 151.701 685.529 null]
+3369 0 obj <<
+/D [3367 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3375 0 obj <<
+3366 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R /F59 1905 0 R /F60 1917 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3382 0 obj <<
+3373 0 obj <<
 /Length 692       
 /Filter /FlateDecode
 >>
@@ -15117,27 +14820,27 @@
 6¸ž¤Šò¼ÜZlcîM¹58γÔÔ•…Ã=Bàž'ý°!¦Ùȧ	óåëÍêä~ðÄý ¸å¿p_þ³Õ¬×Ý„Ùú/™Íž>ë°ñ_ÙÝÞ8ígÆí½Ø¼Ó}­©Ð¸– €ñâËg·sñ ¢»ÿñÉ÷&`”ü5ïÃø4ý
 endstream
 endobj
-3381 0 obj <<
+3372 0 obj <<
 /Type /Page
-/Contents 3382 0 R
-/Resources 3380 0 R
+/Contents 3373 0 R
+/Resources 3371 0 R
 /MediaBox [0 0 612 792]
-/Parent 3379 0 R
+/Parent 3370 0 R
 >> endobj
-3383 0 obj <<
-/D [3381 0 R /XYZ 100.892 685.529 null]
+3374 0 obj <<
+/D [3372 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1550 0 obj <<
-/D [3381 0 R /XYZ 100.892 651.225 null]
+/D [3372 0 R /XYZ 100.892 651.225 null]
 >> endobj
-3105 0 obj <<
-/D [3381 0 R /XYZ 100.892 634.355 null]
+3096 0 obj <<
+/D [3372 0 R /XYZ 100.892 634.355 null]
 >> endobj
-3380 0 obj <<
+3371 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3386 0 obj <<
+3377 0 obj <<
 /Length 637       
 /Filter /FlateDecode
 >>
@@ -15152,27 +14855,27 @@
 ÷&ø‹ŽÄ€˜´že¦z•toc“Ø…z*»…´²ZÍ,¾Wƒ ¼!²nܹ¹›vñßkB."ªßÎ2Ò·mÙäÉŠÉb83¦.{uXdz[þ}¹~áH_{½YšU½w¡ìUƒTQž›‡]é;m4Œó,Õuåàö/‚$“ý¤?.DDí‡Ü燻/Þ`¾xa¾Ü1Ⱦà>ÿ?f7{ ¹F¼ÞŠú¼.µùŞĞ°˜…‡Ýó/ÉQ
 endstream
 endobj
-3385 0 obj <<
+3376 0 obj <<
 /Type /Page
-/Contents 3386 0 R
-/Resources 3384 0 R
+/Contents 3377 0 R
+/Resources 3375 0 R
 /MediaBox [0 0 612 792]
-/Parent 3379 0 R
+/Parent 3370 0 R
 >> endobj
-3387 0 obj <<
-/D [3385 0 R /XYZ 151.701 685.529 null]
+3378 0 obj <<
+/D [3376 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1551 0 obj <<
-/D [3385 0 R /XYZ 151.701 597.028 null]
+/D [3376 0 R /XYZ 151.701 597.028 null]
 >> endobj
-3106 0 obj <<
-/D [3385 0 R /XYZ 151.701 580.158 null]
+3097 0 obj <<
+/D [3376 0 R /XYZ 151.701 580.158 null]
 >> endobj
-3384 0 obj <<
+3375 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3390 0 obj <<
+3381 0 obj <<
 /Length 631       
 /Filter /FlateDecode
 >>
@@ -15183,27 +14886,27 @@
 öµÅùu3RJ›)¬†˜G\L¤„±å].½Ÿ±«½2b$…wwAj÷n FLI°`B¢Pôl9Xx·¥¿äB %és²HEGÉœ³êwl<D˜§áò1.ªÜjf’Y—Xï’¯œx‹Ù—QNÚºþPéëúK 9þÅ÷¯×ôÔò0æ_e¹–¹ŸþHª Z`Š’Ò¬û%8A¦1lÐ*ÔA­Ô:Wó§ Ú¹¾*âf&IÙ™637ÿfÔ—hi!ì$]dª×q—·0×q£a›ÚáeÈ1>›"Cb´µˆ_€IDå34WïåßE¤¦]•Æ­µ”æ5 lÚ§|dÎL«ë¬8›©CÊj¸SδlìYëºÙ©@Äþ@ˆL·›–EœhâIÎIÜ[VÙï“÷+àt¶ÀßP‘Ñí*+›ÿ²¾¤LíY=UÓYô²éV?Ë!ÞY;Ü„Ú;î^:íÿ¹@’DórêØlÆ´é““%pU–m5Ë£&žqn¯‡Mðª<W1<RÙ«áuÙµÏ]•ˆPyèšÄy^n´3¦Ü˜ä™6mãжq …ól݉‘d¾5s»?†þ9böÞÞq£‡\»Fs°qQÛbB}¤qMߘö·¾
 endstream
 endobj
-3389 0 obj <<
+3380 0 obj <<
 /Type /Page
-/Contents 3390 0 R
-/Resources 3388 0 R
+/Contents 3381 0 R
+/Resources 3379 0 R
 /MediaBox [0 0 612 792]
-/Parent 3379 0 R
+/Parent 3370 0 R
 >> endobj
-3391 0 obj <<
-/D [3389 0 R /XYZ 100.892 685.529 null]
+3382 0 obj <<
+/D [3380 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1552 0 obj <<
-/D [3389 0 R /XYZ 100.892 556.38 null]
+/D [3380 0 R /XYZ 100.892 556.38 null]
 >> endobj
-3107 0 obj <<
-/D [3389 0 R /XYZ 100.892 539.51 null]
+3098 0 obj <<
+/D [3380 0 R /XYZ 100.892 539.51 null]
 >> endobj
-3388 0 obj <<
+3379 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3394 0 obj <<
+3385 0 obj <<
 /Length 684       
 /Filter /FlateDecode
 >>
@@ -15217,27 +14920,27 @@
 ý
 endstream
 endobj
-3393 0 obj <<
+3384 0 obj <<
 /Type /Page
-/Contents 3394 0 R
-/Resources 3392 0 R
+/Contents 3385 0 R
+/Resources 3383 0 R
 /MediaBox [0 0 612 792]
-/Parent 3379 0 R
+/Parent 3370 0 R
 >> endobj
-3395 0 obj <<
-/D [3393 0 R /XYZ 151.701 685.529 null]
+3386 0 obj <<
+/D [3384 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1553 0 obj <<
-/D [3393 0 R /XYZ 151.701 660.623 null]
+/D [3384 0 R /XYZ 151.701 660.623 null]
 >> endobj
-3108 0 obj <<
-/D [3393 0 R /XYZ 151.701 643.753 null]
+3099 0 obj <<
+/D [3384 0 R /XYZ 151.701 643.753 null]
 >> endobj
-3392 0 obj <<
+3383 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3398 0 obj <<
+3389 0 obj <<
 /Length 529       
 /Filter /FlateDecode
 >>
@@ -15249,27 +14952,27 @@
 À_eÓefÉtñzå~4}!–¦Š˜  µ/ªwë®ÈUÔ¦úÐ"é1h¾(zæø%«âb1[+b_ïõÈ·•­íÕ KV«mô¼1Õî¤+î¡à‘Ë]ijϦ{¦Ÿ௫¬´sS“èѧ‡›užÕæ	DC[ù-ÎS÷Ðg¼±Gû•@Kÿß~7ö‚õ¶M©h7üa.[5îFó¼´2oýrÍçö8xÐœq„ºä ûï/DQ{
 endstream
 endobj
-3397 0 obj <<
+3388 0 obj <<
 /Type /Page
-/Contents 3398 0 R
-/Resources 3396 0 R
+/Contents 3389 0 R
+/Resources 3387 0 R
 /MediaBox [0 0 612 792]
-/Parent 3379 0 R
+/Parent 3370 0 R
 >> endobj
-3399 0 obj <<
-/D [3397 0 R /XYZ 100.892 685.529 null]
+3390 0 obj <<
+/D [3388 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1554 0 obj <<
-/D [3397 0 R /XYZ 100.892 569.929 null]
+/D [3388 0 R /XYZ 100.892 569.929 null]
 >> endobj
-3109 0 obj <<
-/D [3397 0 R /XYZ 100.892 553.059 null]
+3100 0 obj <<
+/D [3388 0 R /XYZ 100.892 553.059 null]
 >> endobj
-3396 0 obj <<
+3387 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3402 0 obj <<
+3393 0 obj <<
 /Length 515       
 /Filter /FlateDecode
 >>
@@ -15278,27 +14981,27 @@
 C
 endstream
 endobj
-3401 0 obj <<
+3392 0 obj <<
 /Type /Page
-/Contents 3402 0 R
-/Resources 3400 0 R
+/Contents 3393 0 R
+/Resources 3391 0 R
 /MediaBox [0 0 612 792]
-/Parent 3404 0 R
+/Parent 3395 0 R
 >> endobj
-3403 0 obj <<
-/D [3401 0 R /XYZ 151.701 685.529 null]
+3394 0 obj <<
+/D [3392 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1555 0 obj <<
-/D [3401 0 R /XYZ 151.701 660.623 null]
+/D [3392 0 R /XYZ 151.701 660.623 null]
 >> endobj
-3110 0 obj <<
-/D [3401 0 R /XYZ 151.701 643.753 null]
+3101 0 obj <<
+/D [3392 0 R /XYZ 151.701 643.753 null]
 >> endobj
-3400 0 obj <<
+3391 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3407 0 obj <<
+3398 0 obj <<
 /Length 633       
 /Filter /FlateDecode
 >>
@@ -15311,27 +15014,27 @@
 £Ý«JßÛÊëòS69íÀô9ÜŒeµýIRkõ^Ž€±eÄxñR>^ƼdÇŒ×1›:ÛGjôÑãh£zÍ£·ùþ€³
 endstream
 endobj
-3406 0 obj <<
+3397 0 obj <<
 /Type /Page
-/Contents 3407 0 R
-/Resources 3405 0 R
+/Contents 3398 0 R
+/Resources 3396 0 R
 /MediaBox [0 0 612 792]
-/Parent 3404 0 R
+/Parent 3395 0 R
 >> endobj
-3408 0 obj <<
-/D [3406 0 R /XYZ 100.892 685.529 null]
+3399 0 obj <<
+/D [3397 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1556 0 obj <<
-/D [3406 0 R /XYZ 100.892 542.831 null]
+/D [3397 0 R /XYZ 100.892 542.831 null]
 >> endobj
-3111 0 obj <<
-/D [3406 0 R /XYZ 100.892 525.961 null]
+3102 0 obj <<
+/D [3397 0 R /XYZ 100.892 525.961 null]
 >> endobj
-3405 0 obj <<
+3396 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3411 0 obj <<
+3402 0 obj <<
 /Length 611       
 /Filter /FlateDecode
 >>
@@ -15345,27 +15048,27 @@
 9jÜáîï­à'®©%䰝uŠkº3–Ó36nÊ iÛÎ@Í•ì+s_·óÑSûêºnEœÏ_¹ÛoÓJú/<YØGÿòªô¾RR. ÞòJ­¾Ðᔐ
 endstream
 endobj
-3410 0 obj <<
+3401 0 obj <<
 /Type /Page
-/Contents 3411 0 R
-/Resources 3409 0 R
+/Contents 3402 0 R
+/Resources 3400 0 R
 /MediaBox [0 0 612 792]
-/Parent 3404 0 R
+/Parent 3395 0 R
 >> endobj
-3412 0 obj <<
-/D [3410 0 R /XYZ 151.701 685.529 null]
+3403 0 obj <<
+/D [3401 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1557 0 obj <<
-/D [3410 0 R /XYZ 151.701 536.056 null]
+/D [3401 0 R /XYZ 151.701 536.056 null]
 >> endobj
-3112 0 obj <<
-/D [3410 0 R /XYZ 151.701 519.186 null]
+3103 0 obj <<
+/D [3401 0 R /XYZ 151.701 519.186 null]
 >> endobj
-3409 0 obj <<
+3400 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3415 0 obj <<
+3406 0 obj <<
 /Length 702       
 /Filter /FlateDecode
 >>
@@ -15378,27 +15081,27 @@
 Á\¹õ0ø¦PÊ?ò¤¬þÿ ’ÇŠ
 endstream
 endobj
-3414 0 obj <<
+3405 0 obj <<
 /Type /Page
-/Contents 3415 0 R
-/Resources 3413 0 R
+/Contents 3406 0 R
+/Resources 3404 0 R
 /MediaBox [0 0 612 792]
-/Parent 3404 0 R
+/Parent 3395 0 R
 >> endobj
-3416 0 obj <<
-/D [3414 0 R /XYZ 100.892 685.529 null]
+3407 0 obj <<
+/D [3405 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1558 0 obj <<
-/D [3414 0 R /XYZ 100.892 660.623 null]
+/D [3405 0 R /XYZ 100.892 660.623 null]
 >> endobj
-3113 0 obj <<
-/D [3414 0 R /XYZ 100.892 642.541 null]
+3104 0 obj <<
+/D [3405 0 R /XYZ 100.892 642.541 null]
 >> endobj
-3413 0 obj <<
+3404 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3419 0 obj <<
+3410 0 obj <<
 /Length 526       
 /Filter /FlateDecode
 >>
@@ -15407,27 +15110,27 @@
 ›—³z_Wb‹ßíb¼sõy̘=õ™ÛyuCÂ"÷ítZ€-VöŸ9ÑzàpíÔU]qæŽ"Yí„ú#•^Ü	Õk„Þ3B¾¨»-Ñù û|P­!^‹úû _¿ê¹?¦‡¹Ñ;‡ÜB-CÛë=ýX&
 endstream
 endobj
-3418 0 obj <<
+3409 0 obj <<
 /Type /Page
-/Contents 3419 0 R
-/Resources 3417 0 R
+/Contents 3410 0 R
+/Resources 3408 0 R
 /MediaBox [0 0 612 792]
-/Parent 3404 0 R
+/Parent 3395 0 R
 >> endobj
-3420 0 obj <<
-/D [3418 0 R /XYZ 151.701 685.529 null]
+3411 0 obj <<
+/D [3409 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1559 0 obj <<
-/D [3418 0 R /XYZ 151.701 660.623 null]
+/D [3409 0 R /XYZ 151.701 660.623 null]
 >> endobj
-3114 0 obj <<
-/D [3418 0 R /XYZ 151.701 642.541 null]
+3105 0 obj <<
+/D [3409 0 R /XYZ 151.701 642.541 null]
 >> endobj
-3417 0 obj <<
+3408 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3423 0 obj <<
+3414 0 obj <<
 /Length 605       
 /Filter /FlateDecode
 >>
@@ -15437,27 +15140,27 @@
 #†xøªéÔ(¡Øc
 endstream
 endobj
-3422 0 obj <<
+3413 0 obj <<
 /Type /Page
-/Contents 3423 0 R
-/Resources 3421 0 R
+/Contents 3414 0 R
+/Resources 3412 0 R
 /MediaBox [0 0 612 792]
-/Parent 3404 0 R
+/Parent 3395 0 R
 >> endobj
-3424 0 obj <<
-/D [3422 0 R /XYZ 100.892 685.529 null]
+3415 0 obj <<
+/D [3413 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1560 0 obj <<
-/D [3422 0 R /XYZ 100.892 516.339 null]
+/D [3413 0 R /XYZ 100.892 516.339 null]
 >> endobj
-3161 0 obj <<
-/D [3422 0 R /XYZ 100.892 498.256 null]
+3152 0 obj <<
+/D [3413 0 R /XYZ 100.892 498.256 null]
 >> endobj
-3421 0 obj <<
+3412 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3427 0 obj <<
+3418 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -15465,20 +15168,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-3426 0 obj <<
+3417 0 obj <<
 /Type /Page
-/Contents 3427 0 R
-/Resources 3425 0 R
+/Contents 3418 0 R
+/Resources 3416 0 R
 /MediaBox [0 0 612 792]
-/Parent 3429 0 R
+/Parent 3420 0 R
 >> endobj
-3428 0 obj <<
-/D [3426 0 R /XYZ 151.701 685.529 null]
+3419 0 obj <<
+/D [3417 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3425 0 obj <<
+3416 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-3434 0 obj <<
+3425 0 obj <<
 /Length 680       
 /Filter /FlateDecode
 >>
@@ -15492,35 +15195,35 @@
 ïÇy˸ÄY©>«ÕÍ÷’£y¸°}?Fkíjºsöš„Ñ´ ïÞîŒ0'øìœ8O RÛj„G…)î·Í8vÕ•‡$Îí4„LŸz¨@ˆ2‡U–»áãÚÓ‹X.¿ÎóHrABøkr™Y¾,á ønÿð nû
 endstream
 endobj
-3433 0 obj <<
+3424 0 obj <<
 /Type /Page
-/Contents 3434 0 R
-/Resources 3432 0 R
+/Contents 3425 0 R
+/Resources 3423 0 R
 /MediaBox [0 0 612 792]
-/Parent 3429 0 R
-/Annots [ 3430 0 R ]
+/Parent 3420 0 R
+/Annots [ 3421 0 R ]
 >> endobj
-3430 0 obj <<
+3421 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [112.38 145.226 273.876 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (Big500users) >>
 >> endobj
-3435 0 obj <<
-/D [3433 0 R /XYZ 100.892 685.529 null]
+3426 0 obj <<
+/D [3424 0 R /XYZ 100.892 685.529 null]
 >> endobj
 290 0 obj <<
-/D [3433 0 R /XYZ 100.892 660.623 null]
+/D [3424 0 R /XYZ 100.892 660.623 null]
 >> endobj
-3020 0 obj <<
-/D [3433 0 R /XYZ 100.892 375.174 null]
+3013 0 obj <<
+/D [3424 0 R /XYZ 100.892 375.174 null]
 >> endobj
-3432 0 obj <<
+3423 0 obj <<
 /Font << /F77 1973 0 R /F17 1131 0 R /F15 1133 0 R /F28 1124 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3438 0 obj <<
+3429 0 obj <<
 /Length 2203      
 /Filter /FlateDecode
 >>
@@ -15544,49 +15247,49 @@
 µÅo–KþºOPˆ„ü]æ“2µY†wò'„нc¿·1J,ß>·c û‡Qþ?D¬íy
 endstream
 endobj
-3437 0 obj <<
+3428 0 obj <<
 /Type /Page
-/Contents 3438 0 R
-/Resources 3436 0 R
+/Contents 3429 0 R
+/Resources 3427 0 R
 /MediaBox [0 0 612 792]
-/Parent 3429 0 R
+/Parent 3420 0 R
 >> endobj
-3431 0 obj <<
+3422 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./xslt/figures/caution.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 3441 0 R
+/PTEX.InfoDict 3432 0 R
 /BBox [0 0 29 29]
 /Resources <<
 /ProcSet [ /PDF /ImageC ]
 /ExtGState <<
-/R7 3442 0 R
+/R7 3433 0 R
 >>/XObject <<
-/R8 3443 0 R
+/R8 3434 0 R
 >>>>
-/Length 3444 0 R
+/Length 3435 0 R
 /Filter /FlateDecode
 >>
 stream
-xœ+T0Ð3T0 A(œË¥d®^ÌU¨`daцzæÆ&æ ÚÈÌÔ¢ÎBÁ%Ÿ+L®
+xœ+T0Ð3T0 A(œË¥d®^ÌU¨`daцzæÆFFPÚ¢ÌBÁ%Ÿ+t
 endstream
 endobj
-3441 0 obj
+3432 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110837)
-/ModDate (D:20080610110837)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090356-05'00')
+/ModDate (D:20080528090356-05'00')
 >>
 endobj
-3442 0 obj
+3433 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-3443 0 obj
+3434 0 obj
 <<
 /Subtype /Image
 /ColorSpace /DeviceRGB
@@ -15606,18 +15309,18 @@
 ¬Õ+(Í-Xè ì»¾›|ßëPÕÀ+í‰Rõìô¿>È*øƒ{°lK,XsYÙ’ÌQáw®ÝìY¯¦ØT§ÅÆ{5tƒì-7sç‚dX¼e‚âáWN;mv¢ì’§EÐtË|l¬Gwe+È7ž18+áH`'‰4pJ¼ ÀN‘À
 endstream
 endobj
-3444 0 obj
-58
+3435 0 obj
+54
 endobj
-3439 0 obj <<
-/D [3437 0 R /XYZ 151.701 685.529 null]
+3430 0 obj <<
+/D [3428 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3436 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F89 2333 0 R /F73 2334 0 R /F91 3440 0 R /F15 1133 0 R >>
-/XObject << /Im7 3431 0 R >>
+3427 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F89 2330 0 R /F73 2331 0 R /F91 3431 0 R /F15 1133 0 R >>
+/XObject << /Im7 3422 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3447 0 obj <<
+3438 0 obj <<
 /Length 2040      
 /Filter /FlateDecode
 >>
@@ -15643,21 +15346,21 @@
 ðc¶¨ ã ';|NÀXõ؁ …y~½_{ÃÿZ`rà`ѳrìaëÏ(òCJ÷	A,¾µ)wBËå	IH¯î0‹½,Ž·L&W¼s†¢q¯éEÔ¡“ö%qYž©FŽØ—ÿUÃ,]ÿå¢2Ò%¶ÃÁêq—r®X–ùÇAžñÛ*½)ãfLíÛ§Ý m­t
 endstream
 endobj
-3446 0 obj <<
+3437 0 obj <<
 /Type /Page
-/Contents 3447 0 R
-/Resources 3445 0 R
+/Contents 3438 0 R
+/Resources 3436 0 R
 /MediaBox [0 0 612 792]
-/Parent 3429 0 R
+/Parent 3420 0 R
 >> endobj
-3448 0 obj <<
-/D [3446 0 R /XYZ 100.892 685.529 null]
+3439 0 obj <<
+/D [3437 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3445 0 obj <<
+3436 0 obj <<
 /Font << /F28 1124 0 R /F15 1133 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3451 0 obj <<
+3442 0 obj <<
 /Length 1773      
 /Filter /FlateDecode
 >>
@@ -15680,21 +15383,21 @@
 $Ì;çwþêádÍMþOC7˜bÂèµÜë^O‹ÃÀÏcÝCi¹Ñ{Þz‚÷Y[3†R|¹/lªe¼q¤ÚÑ\ú;X‘\ÿ Jï‡Ñ?zá¤NŽ7r…êwS(4¼­ZþSD ‡S}m^nû½ð}³[ý9ôÎD
 endstream
 endobj
-3450 0 obj <<
+3441 0 obj <<
 /Type /Page
-/Contents 3451 0 R
-/Resources 3449 0 R
+/Contents 3442 0 R
+/Resources 3440 0 R
 /MediaBox [0 0 612 792]
-/Parent 3429 0 R
+/Parent 3420 0 R
 >> endobj
-3452 0 obj <<
-/D [3450 0 R /XYZ 151.701 685.529 null]
+3443 0 obj <<
+/D [3441 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3449 0 obj <<
+3440 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3455 0 obj <<
+3446 0 obj <<
 /Length 2237      
 /Filter /FlateDecode
 >>
@@ -15724,33 +15427,33 @@
 åòBý´Hή"ó¼dÉ~㆘~ `¹e*¸%…ÆW«?ñ„…2|¢Ö©®ÔZþ+±ÆS„e!7i©ûËÜZÀœÊÿÂõ'8Ú†8¸Õc!x’TAärRÄòLø¾ƒ‚ ûRèGÐضðúøº>çáúïwJlçÁ¿&W9«;—@]âÄÖ¦e’´0úæ4лƒf™kQ“A«Æþ‹r—{u_Èeÿ¯ßÔÝ
 endstream
 endobj
-3454 0 obj <<
+3445 0 obj <<
 /Type /Page
-/Contents 3455 0 R
-/Resources 3453 0 R
+/Contents 3446 0 R
+/Resources 3444 0 R
 /MediaBox [0 0 612 792]
-/Parent 3429 0 R
+/Parent 3420 0 R
 >> endobj
-3456 0 obj <<
-/D [3454 0 R /XYZ 100.892 685.529 null]
+3447 0 obj <<
+/D [3445 0 R /XYZ 100.892 685.529 null]
 >> endobj
 294 0 obj <<
-/D [3454 0 R /XYZ 100.892 660.623 null]
+/D [3445 0 R /XYZ 100.892 660.623 null]
 >> endobj
-3457 0 obj <<
-/D [3454 0 R /XYZ 100.892 627.66 null]
+3448 0 obj <<
+/D [3445 0 R /XYZ 100.892 627.66 null]
 >> endobj
 298 0 obj <<
-/D [3454 0 R /XYZ 100.892 169.635 null]
+/D [3445 0 R /XYZ 100.892 169.635 null]
 >> endobj
-3458 0 obj <<
-/D [3454 0 R /XYZ 100.892 142.274 null]
+3449 0 obj <<
+/D [3445 0 R /XYZ 100.892 142.274 null]
 >> endobj
-3453 0 obj <<
+3444 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3461 0 obj <<
+3452 0 obj <<
 /Length 2196      
 /Filter /FlateDecode
 >>
@@ -15776,21 +15479,21 @@
  /‚lð·æãªMßÝ^ýo£L
 endstream
 endobj
-3460 0 obj <<
+3451 0 obj <<
 /Type /Page
-/Contents 3461 0 R
-/Resources 3459 0 R
+/Contents 3452 0 R
+/Resources 3450 0 R
 /MediaBox [0 0 612 792]
-/Parent 3463 0 R
+/Parent 3454 0 R
 >> endobj
-3462 0 obj <<
-/D [3460 0 R /XYZ 151.701 685.529 null]
+3453 0 obj <<
+/D [3451 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3459 0 obj <<
+3450 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3468 0 obj <<
+3459 0 obj <<
 /Length 2094      
 /Filter /FlateDecode
 >>
@@ -15813,46 +15516,46 @@
 W*/,PuÉî:¥¸½q`¿žã+–
 endstream
 endobj
-3467 0 obj <<
+3458 0 obj <<
 /Type /Page
-/Contents 3468 0 R
-/Resources 3466 0 R
+/Contents 3459 0 R
+/Resources 3457 0 R
 /MediaBox [0 0 612 792]
-/Parent 3463 0 R
-/Annots [ 3464 0 R ]
+/Parent 3454 0 R
+/Annots [ 3455 0 R ]
 >> endobj
-3464 0 obj <<
+3455 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 323.349 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.novell.com/products/edirectory/)>>
 >> endobj
-3469 0 obj <<
-/D [3467 0 R /XYZ 100.892 685.529 null]
+3460 0 obj <<
+/D [3458 0 R /XYZ 100.892 685.529 null]
 >> endobj
 302 0 obj <<
-/D [3467 0 R /XYZ 100.892 562.253 null]
+/D [3458 0 R /XYZ 100.892 562.253 null]
 >> endobj
-3470 0 obj <<
-/D [3467 0 R /XYZ 100.892 533.968 null]
+3461 0 obj <<
+/D [3458 0 R /XYZ 100.892 533.968 null]
 >> endobj
-3471 0 obj <<
-/D [3467 0 R /XYZ 100.892 513.848 null]
+3462 0 obj <<
+/D [3458 0 R /XYZ 100.892 513.848 null]
 >> endobj
-3472 0 obj <<
-/D [3467 0 R /XYZ 100.892 446.102 null]
+3463 0 obj <<
+/D [3458 0 R /XYZ 100.892 446.102 null]
 >> endobj
 306 0 obj <<
-/D [3467 0 R /XYZ 100.892 273.873 null]
+/D [3458 0 R /XYZ 100.892 273.873 null]
 >> endobj
-3473 0 obj <<
-/D [3467 0 R /XYZ 100.892 247.216 null]
+3464 0 obj <<
+/D [3458 0 R /XYZ 100.892 247.216 null]
 >> endobj
-3466 0 obj <<
+3457 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R /F51 1134 0 R /F54 1912 0 R /F30 1928 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3478 0 obj <<
+3469 0 obj <<
 /Length 2457      
 /Filter /FlateDecode
 >>
@@ -15878,40 +15581,40 @@
 PÔ·p©­™&kW¯—ѰŽu:ø½]ó€xûžÖ\èç¶Í§ä(A'_{KŽ$Ùü”LOÇ"òÒ ÌóŒ_Žñ±» ÁxñêÉ6[¾ŠƒXáÛY:×ýõÙ`¾σ(˧÷žó0\þr8\¯×=ÜÜ2_„œH m gyÀ¸Bs|€“è}¸˜ßüìaŽ!þa	Ò³mWZÂÊ`F4mü7÷X¸´x/¢"ˆ‹ÒÛƒŽéê¹ðÿ`p`Çnmä<˜ÍÔÐDCýô›5ŸÌáèþÍ=‰‰ ‡LµÇw¯éÅr>·Í×<‘fAR+G|ñŸ„ºþÎø¥†
 endstream
 endobj
-3477 0 obj <<
+3468 0 obj <<
 /Type /Page
-/Contents 3478 0 R
-/Resources 3476 0 R
+/Contents 3469 0 R
+/Resources 3467 0 R
 /MediaBox [0 0 612 792]
-/Parent 3463 0 R
-/Annots [ 3465 0 R 3474 0 R 3480 0 R ]
+/Parent 3454 0 R
+/Annots [ 3456 0 R 3465 0 R 3471 0 R ]
 >> endobj
-3465 0 obj <<
+3456 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 138.879 483.423 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www-306.ibm.com/software/tivoli/products/directory-server/)>>
 >> endobj
-3474 0 obj <<
+3465 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 129.215 511.352 140.871]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.sun.com/software/software/products/identity_srvr/home_identity.xml)>>
 >> endobj
-3480 0 obj <<
+3471 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [150.705 116.961 209.185 127.721]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.sun.com/software/software/products/identity_srvr/home_identity.xml)>>
 >> endobj
-3479 0 obj <<
-/D [3477 0 R /XYZ 151.701 685.529 null]
+3470 0 obj <<
+/D [3468 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3476 0 obj <<
+3467 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F54 1912 0 R /F15 1133 0 R /F30 1928 0 R /F59 1905 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3490 0 obj <<
+3481 0 obj <<
 /Length 2066      
 /Filter /FlateDecode
 >>
@@ -15939,70 +15642,70 @@
 Û÷uuÖþ)(’þý¡<ð|fÿìiÙê–rb÷îè?‹9OXOçO1Z÷L•ƒs®6‘ÈÀh ÑU’?í`2o²¼“Çö7ÙmªRÎæHÂÁüÑy¥Pòø,ÖÆ‘ÌUÈ‚è¿küÛõ*kgˇ 2>J@¥3ìüi°CÇBkÛNõïÊTnM™'ڿЧþZ»Ý…
 endstream
 endobj
-3489 0 obj <<
+3480 0 obj <<
 /Type /Page
-/Contents 3490 0 R
-/Resources 3488 0 R
+/Contents 3481 0 R
+/Resources 3479 0 R
 /MediaBox [0 0 612 792]
-/Parent 3463 0 R
-/Annots [ 3475 0 R 3481 0 R 3482 0 R 3483 0 R 3484 0 R 3485 0 R 3486 0 R 3487 0 R ]
+/Parent 3454 0 R
+/Annots [ 3466 0 R 3472 0 R 3473 0 R 3474 0 R 3475 0 R 3476 0 R 3477 0 R 3478 0 R ]
 >> endobj
-3475 0 obj <<
+3466 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 193.674 408.081 206.625]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.microsoft.com/windowsserver2003/adam/default.mspx)>>
 >> endobj
-3481 0 obj <<
+3472 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 182.715 252.74 195.666]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://lam.sourceforge.net/)>>
 >> endobj
-3482 0 obj <<
+3473 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 171.756 224.496 184.707]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.webmin.com)>>
 >> endobj
-3483 0 obj <<
+3474 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 160.797 304.52 173.748]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://webmin.idealx.org/index.en.html)>>
 >> endobj
-3484 0 obj <<
+3475 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 149.838 210.374 162.789]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://biot.com/gq)>>
 >> endobj
-3485 0 obj <<
+3476 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 138.879 280.984 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.iit.edu/~gawojar/ldap/)>>
 >> endobj
-3486 0 obj <<
+3477 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 127.92 238.618 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.jxplorer.org/)>>
 >> endobj
-3487 0 obj <<
+3478 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 295.106 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://phpldapadmin.sourceforge.net/)>>
 >> endobj
-3491 0 obj <<
-/D [3489 0 R /XYZ 100.892 685.529 null]
+3482 0 obj <<
+/D [3480 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3488 0 obj <<
+3479 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F30 1928 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3496 0 obj <<
+3487 0 obj <<
 /Length 2303      
 /Filter /FlateDecode
 >>
@@ -16023,207 +15726,154 @@
 CD{ÛýñFÄÇâ]ÀŒæg—‹sãw‡ÃããcdF=t#3ã|<¼ rÃS¤Øe™?ùh­À^È<Âõ8f·cÐÿEþI·‹£Úô‡ZA„šóõ±êЍþ]\ß½¦S’€ð·*]Q_~áÙÿ:Á&
 endstream
 endobj
-3495 0 obj <<
+3486 0 obj <<
 /Type /Page
-/Contents 3496 0 R
-/Resources 3494 0 R
+/Contents 3487 0 R
+/Resources 3485 0 R
 /MediaBox [0 0 612 792]
-/Parent 3463 0 R
-/Annots [ 3492 0 R 3493 0 R ]
+/Parent 3454 0 R
+/Annots [ 3483 0 R 3484 0 R ]
 >> endobj
-3492 0 obj <<
+3483 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 127.92 308.257 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.openldap.org/pub/)>>
 >> endobj
-3493 0 obj <<
+3484 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 402.403 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.oreilly.com/catalog/ldapsa/index.html)>>
 >> endobj
-3497 0 obj <<
-/D [3495 0 R /XYZ 151.701 685.529 null]
+3488 0 obj <<
+/D [3486 0 R /XYZ 151.701 685.529 null]
 >> endobj
 310 0 obj <<
-/D [3495 0 R /XYZ 151.701 214.132 null]
+/D [3486 0 R /XYZ 151.701 214.132 null]
 >> endobj
-3498 0 obj <<
-/D [3495 0 R /XYZ 151.701 189.178 null]
+3489 0 obj <<
+/D [3486 0 R /XYZ 151.701 189.178 null]
 >> endobj
-3494 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F89 2333 0 R /F73 2334 0 R /F15 1133 0 R /F30 1928 0 R /F51 1134 0 R /F17 1131 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
-/XObject << /Im3 2328 0 R >>
+3485 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F89 2330 0 R /F73 2331 0 R /F15 1133 0 R /F30 1928 0 R /F51 1134 0 R /F17 1131 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
+/XObject << /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3504 0 obj <<
-/Length 1713      
+3495 0 obj <<
+/Length 1720      
 /Filter /FlateDecode
 >>
 stream
-xÚ½]Û6ì=¿ÂÐ(¶%[v1h—]qÅÖvHŠmèúàKt‰Q¤–Óôþýø!'v.×aö—ˆ_¦HŠ¤¨ÞÖ¼W“—«Éü&Š<-2„ÞêÞƒ@¤Yä%i&âLy«÷Á_šuW4õôãê5‰§"K…âQ&X.RLgaHQLCßZ¨VOg2Žý¼Þ  @Į֞§°»È‚Œ‘ k÷ªÃX¢ÔäÇÕäó$jà…cag魫ɇ·Þk/2K½#IVžŒS‘Ĩ­ô–“_&Á0 a<Üø¤Te‚¼ÄíÓ(õMYNg‘T~ny½oZ–à^^M#íßå†þÍ4•~ÛT( ýngXòíVPUÿ´@•/Þ1©Ú7­Åx9ÂöUšg€ÇÒÿæö7–¶¶3•³e½n5êê,FÜš…RÄ*cËóÖ AÚ'ÕXút*&¿{»Dµ$±Æív¦Ê7_;SãùXð)É´¿DSðù©¿oD¿c™‚‡Þ9˜xÇšTžTƒ­ÍÐÖ˜Mu¡i«¢)%}ææ[ÃHsÏkï°öTÞumqwèÈÀ‡VZ³A´VgÖL"Sùë¼f©ƒuÛàI]	ãù¸$ç]N¡úDYAùŒgÜàªÈj󜲵O³ùM¬F9–™HP¡ÛᏠÔ]&&‚}AüZÔ±åmߘŽPüiÚOE½e³Þ[Ӳċ‹TyÒ¼™ÛêßµoÅö¼j›ÃžÁÿÕ Ÿóýž‚E‘[CíV9u5"ÜqîChqNe2d¹e˜º#?‘€~âwNú¿vëvÁ±tî¹`SgBòòva‡é	þ8Š‚â /­£Ÿ>ÀÛšeM•õY|R}@‹‘ŽÆ¶¯°ÍÉ ærB «VŠêGsý v,ºóG‰„*窲Œb+Àµ6kcmÞ>0Jή֘Äç„Ð_¶DjßÙ¨©§'êø@p­°>Ú†((Tåº}æ›|Æ]#=u
-º($Ĭ°üYQíËÂ\5™4ª4£n†µP¢pçÀɤþ;¼z^,~bìùþ+ô£´|éÊ`xùgZ(¸H¥Èb·q¨Xnœ‚8 ho6g²0à@cZc›òÀõ…8uï4=;BÇʼn$BÝÝrP‰öë¼Â/ç0¬Ý0Àz…¹J¡ƒís¥Ì2¦ÎïJ
-pîé>&2$ ¶EÒËŠ3ú¥	ÜLª¯³¹éÖs¶ëJ@’HH-{Y¨$òL*T¤G—Ûe‰Ë YØ•,‘QŸ%ÀoÍçCÑ{¡„Ò ŒôˆsJ‡«Nâ ö†×Ö>ž²T EÃ*3ðF}sÌ‚ôINC
-Wãý`2Qš’.¹áªÜäWƒ%"”º·í”¹3\	çÉ:Jµ
-	fƒ]NPŠE‰%j¶mN#r8 Ak	ýq°€óf¹LZõ$Kˆ$}?@Uæ\ü§¥Âº-y.Ú 
-®5õÆ~s©³¾…iLfÓræ#ºÝHðv!˜Ä—l+é:³»ï(”¢ÑyS£Ã l˜UÔ£+æÒ²›b{ ¡ëÇ"Ëb±?9ŠË4„óÓ—I¢3ýä,ΏôÚ.5hSc›T¦z›Ua(™ö	ý(ÊಧiÑ´ùÚ5¤È5¤hТ¡Hž1‰AÉ J3Î_™1šWH€Æ d‡NJNgÉ(¨¦ëŒ!ë³ìŸ<f.דêXÃóHzQ‹8HQõçI bb÷+û/a~[¥Þ¢-Λœ…f`©R°F`pôw>iè-›
-LûÆ“,Lµ ¬ÎßñÄš^¢‰¿nj˜›”Ë \yg!‡|Úp{@Jѯ–9{}a…c©SQå%½€”ÿÒÜ7ý³/iPx ‘€Õ^}<<6†“MÆ¡ÿ@)v`¤5yY>0ܶ;÷ÊA”z ¬¥ÉÛšÁ]ƒüã˜?Š¬Y;8fÅwe]¬óÙÕA[
-'ü€ãhË”Á#(æXʸ%QŠÎ8ˆþŒ Dt<0£pÊë¦ã¯ûoÛÂ~‚ ǧ‰è,­{i<çQÔÌPª~rdây¶äs:º7‘ò·‡b“×k#Fíj=†2:H¾•Þ¡‚{ïâÚ“¡Ã\¥ÎßL$R:ŠE«ñd•ÿO›6P8X¥s㻋·€‹‡É©ßíºnÿ|>?bŸoJ‡=ÿ¡©á
-ßÙùÛ½©—Í¡]›esßáj»®*/”l‰”ZŸߏd/WˆÝŸ'.q
+xÚµXݏÛ6Ï_áGhÛ’-»´Ë®¸bk;$Å6t}ð%ºÄ¨?RËizÿýø!'v.×aÅöI$M‘ù•ÀÛz÷jòr5™ßD‘§E¦ƒÐ[Ý{aˆ4‹¼$ÍDœ)oµñ>øK³îŠ¦ž~\½&ñTdI¢P<ÊD ÒËÅBŠé,é/Šiè[k`éãÇ°ª§3Ç~^op¢@Į֞§°»È‚Œ‘0×*îU‡±D©ÉÏ«ÉçIÔÀÆÂÎÒ[W“o¼×^ d–zG’¬<§"‰Q[é-'¿M‚a Âx¸ñI©Êy‰Û§Q꛲œÎ"©üÜòxß´<Y‚{y5´—CTú7ÓTúmS¡€ô»aÉ·{AUýËU¾xÇd¤jß´ãå¶/¨Ò<ƒu,ý÷onÿ`iû`;S9[ÖëæP£®Îb„À­Y(E¬2¶<o
+¤}R݁šO§²aò»·KTKkÜngªœ×ækgj<>%™ö—èc
+>"?õ÷mƒË/ÅÆX¦à¡wnN¼cÍTžTƒ­ÍÐÖ˜Mu¡i«¢)%}ææ[ËæžÇÞaí;©¼ëÚâîБ°Z	ËÚ˜
+: µ:³f™Ê_ç5K¬ÛOêJÏÇ%á8ïr
+Õ'Ê
+Êg<ãGEV›ç”­}šÍob5ʱDÈDz³(*Hy‡¿‚P_|t™˜8íâ÷¢Þpˆ-oûÆt´ÄŸ¦ýTÔ[6ë½5-K¼¸H•'Í›¹­þ[ûVlÏ«¶9ìyúéï2è×|¿§ DQäßÖP»UN¨F„;νs!Ωì@†,·<'ÃÉÈO$ Ÿø“þ¿ã|»àX:÷\°	™¼¼]Øaz‚?Ž¢`§8ÈKëè§O`bŠmÍ2‹¦Ê‹ú¬¾	©> ¢D¤£±í+„9Ä\N8Áª•¢úÑ\?°:ÝŽù£ŠDB•sUY^"àX›µ±6oxIή֘Ä焳„D‚ïlêé‰:>P \+,¤¶!
+
+U9´Ïü!ÈgŒé	5袐³ÂògEµ/c¯ #)TiF`†3BP¢0pÁÄɤþ;¼y^,~áÕ9ðýWèFiùΕÁðîÏ´PpJ‘Å.T¡b¹qâý¯½Ù@|ɀύimÊ—®	¼ÓôìçQ5> -C„J´_ç~‘8‡a,è‚Ö+L}¤PlÇ+WÉ,cêü®¤çž®c"Cþ!*’^|¨Ílèc”&~Õ—ÙÜtë9Ûu% I$¤–½,y&*Òcß؈(K\–Àd%°º’%2ê³ø­ù|(Zc/”PàC=âœò᪗ØÀ…½åµµ», \‘Æ0ªR%ûf›ù“œš,j®ÆûAg$¢4%]ځF¹É¯5JD(uoÚ)sg.¸Î’u\¥
+À­Á.§YŠ5‰j¶mNrØÿ ²„þŽ…8VÀy³\
+&­z’¥DG¾ïŸ*s®}ÍRaÝ–ÜmPW`ˆ ±ß\ê¬G0ÉlZÎ|¤؍o‚I¸d[I·™ÝxE¡u~ÈÛ˜
+`ì¢Ý0hsSlô-`~,±(Öú“¸„F<֏:qé';q~‚¤×:p©c‘ô·}o”ÊToÔ£*E"Ó>a‹¢îzjM›¯ E¢BC<cƒ’Tfœ-¾2cÔ® uÈ:÷œ”œÎ’aPõ:×g"M’ïyÊ\Ž'Õq"R(”ŒI´BÕŸ'ˆ‰ÝDì¿p„ùm•z‹¶8oršÅ±ÈŒ‘ÁðaðICoÙl`Ú7d!$W&Î?ñÀš^¡‰¿njèš”K \ye![|Ø0: ¥èG˜ƽ½°À±Ò©¦ò’Þ?Êiî›~‹Ù—Ô&<PCÀj¯>ù&ãР;ð¢5yY>ð¼9lwK‚ K“·5Ow
+òcþ(H°fíæ0+¾*ëbÏ®™J‚Â	?ßøýÙ2eðŠ9–2îcI”¢3nÆÏþF":˜Q8åuÓñ×ý·ma?AãS?t–Ö½4žóÀ(Â2”ªŸj˜¸™-ù˜ŽîA¤üí¡ØäõÚˆ°]-ÇP†Bß,ÇPÁ¥wqçÉЃâÐ:áôÍ ¹!££X±÷UÉðϸf…mU¸óøáâ! ÇâarB»]×íŸÏçÇãQìóM)à¬ç?55<à;;»7õ²9´k³lî»#\b×Uå…ò‘-‘RBëÓ+ãÇ‘ìå±ûÒ=€ê
 endstream
 endobj
-3503 0 obj <<
+3494 0 obj <<
 /Type /Page
-/Contents 3504 0 R
-/Resources 3502 0 R
+/Contents 3495 0 R
+/Resources 3493 0 R
 /MediaBox [0 0 612 792]
-/Parent 3463 0 R
-/Annots [ 3500 0 R 3499 0 R ]
+/Parent 3454 0 R
+/Annots [ 3491 0 R 3490 0 R ]
 >> endobj
-3501 0 obj <<
+3492 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-ByExample/images/UNIX-Samba-and-LDAP.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 3507 0 R
-/BBox [0 0 477 277]
+/PTEX.InfoDict 3498 0 R
+/BBox [0 0 479 288]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 3508 0 R
->>/Font << /R9 3509 0 R>>
+/R7 3499 0 R
+>>/Font << /R8 3501 0 R >>
 >>
-/Length 3510 0 R
+/Length 3502 0 R
 /Filter /FlateDecode
 >>
 stream
-xœVÛnÛF}çW죃B“Ý™½>:Ph'TÐqQèfWE(%’
-÷ó{–¤(Ú²M9ÐÃRÜ3³3çÌÌò§Òd”οvWÅÛ/AÝì
-ÖdmP÷…Q«¢†¨/
-c½xŁI;£Œs‰tTÌÑRrj»,ʽ½)˜-6ªêþµ¦ß‹ë!@y8OâI ‰f&ëº7ÙÍ)¨Ú—!ae¬3me,övïk•}9O¬¢rVj	$‚7–œ÷­«APYü,LÃW»Ì+õn’j˜ÀQPÆŠ1(FˆQ¬šTÅÙåf·úïÍäß"xŠhbm9ÁpQœ•Ój6ͻ١‰d5Kö8
-‰¬ñj$ˆ0eW _.7?¾/;´'qÁgtôr¼@4Çüu·Üfè(aO«QcÐìžÏç›»õíîÉ£%¯]6pdtª
-îV‹·7«Åî‰Ósb’¢‚Æ1ùþÇj½ØÜ×h¡àÙ˜ýùM*¶›»OžM..¯Š,>@9'£r‘BDV/ò“(Š,MâãM5]­k_†£˜öqYÍZâ„4„ö§óVëåS¡;a’Œ×†ØH#ðŸƾŸŸM!±V? !Ï(cœS1¢PÖ"Lì9·îõ	˜^{wm×´oBX™
-P‚J¬;àÛ¾ˆÛå/.PðÄ,.Ï–e÷ª
-¨ÊM	!öíÐKýÄpêw:>¦ —>aÏԝö©,ÿþ}|~Ù§£€2;h‰¢$Y<àÔz¸5Lú†ío-!‡Y;dÓcÿuù`:GLµ<Óêrªêš¡ÔUÎìêM—Ö^”ȉ8-£1äU=¥ä_¥ìNÊî]›nut½ÔStVÈ×…®Ž@•8Íùv2Ô`´ë ˜dÊ:°bÝ3Zýª‚2ÕHÀøHÑ7ŵ«fõ›ºo4é´èAº˜0ɸ“”tQ>Nõpåaîb‘úœ@'èà1ô®ô·?p*è[~^‡£_Ö!‚‡Yøuôµ=FùþÏÍ2êl1p¯Î.ÆÏ/{ý²0À@Ö3¨•Ói2à¥<"#£$`[qħ¾
-Z©Q¯ˆ˜°°:!›¹úúéâOu±¾]n¯§óú~49`~HØíFí§¦H“›q`Ö»ÃÊ#/._«ñY7?ŽFŒÛsZØjÒ¶¹‡3V§·ÓÙt·ì¤ú\üÜN6
+xœVÛn9}Ÿ¯ÐcŠÂ¬(êú˜…E€¦H;.vf±ð-©‹ŽÝÚ	²Ÿ¿G{âÄIÆ)ü0ãÑ!EžCRú¥4±Òù·}N›êÝç ®7•ÑdmPwUYVŸßWl½x%bHc‰K¤£2&ZJN­çU½E¯¯+c¬!,zªÙýÛ™þ¨®ú u·ŸÑ	±$€DCÖu_²›cPÅ“ÄÌLÑî¡ØiCÞî|õ¢²/çÉ°JZÈY)($_,9ï·¾úQuõ«â–±ícÚ¨?F ¼´üà©(öbÌŒá	?£¦:¹Xmÿ½}¯‚§È	P2ÚúÃYuR›É8¯f‡Éj#Ùã $²ìÕ@bÊ® ¾˜¯~þ˜whOâ‚Ïèè)äxYob*à/›ù:C	k¢­Aëêt:]Ý.o6Oní(yí²#Ö­»ÛÅìÝõb¶yb÷œ˜¤¨ rL¾…ÿµXÎVw-¼aÞíËúûõêöç“»G&í 0ª,Zû< å&™”‹¢/ó“/l)¢zx¸jÆ‹eqÆÄõô™óy3Ù2'¤Kí?ˆü|<ý¶XΟŠÝ¡“d¼f–´
+Ÿ
+öÏQõ©ÒB¤uø‚†DIùØ‹CEªQ–Kˤö½:´×ã]ïµ=œ˜Æ\H¹@¹tÁ×]oÿÀp†š'cÄa¸ôy¨»OÛ€šÜX‘Œ{ÐlG€^ê5((lÒ~³¡í#ªŽQ®‚òʽö±®ÿý0<½Øç
+£„_29h‰¢¬³xÁ¦Ý€ëØþºå£›µ½6{ä¿.LèžxÕ&”|ÐE4’ºÌ™]¾éÒÚi’µ7yp±Æ ­“ %ÿ*a_pRw߶é6GL¤ý °B¾Tº:|U’§wÊS<XB÷ë Ãì1Y÷ŒýF¿+† ¨4`8ŽÞ16Íd¦Þª»V“N‹î,kûc“Ñ&»£”èuQ?NõþØ‹	íï¤ìsè<¦ž²˜¿‘÷8Ím‹*yVˆ>«ßV"FŠ‡†k>Š Äžƒ|	ÈÓwЙbä^žœ
+ÏO/öf NèzOM‚aˆé8ŽðR‘Q°¬Äâv;­zQ¯ˆ˜°ðD7zç
+W_>žý­Î–7óõÕxZŽHÎ?fìf¥vsS¤MŽ¨õîþ–òÈ
+.	Ñ>çæái`t ÆÝ``¬ÆHhÒŒUÃñÍx2ÞÌ;­>UÿUTN‹
 endstream
 endobj
-3507 0 obj
+3498 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110926)
-/ModDate (D:20080610110926)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090500-05'00')
+/ModDate (D:20080528090500-05'00')
 >>
 endobj
-3508 0 obj
+3499 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-3509 0 obj
+3501 0 obj
 <<
-/BaseFont /ETWAQU#2BAlbanyAMT
-/FontDescriptor 3511 0 R
 /Type /Font
 /FirstChar 32
 /LastChar 120
-/Widths [ 600 0 0 0 0 0 0 0 600 600 0 600 0 0 0 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 0 0 600 0 0 600 0 600 0 0 600 600 600 0 600 0 0 600 0 600 0 600 600 0 0 0 0 0 0 600 0 600 600 600 600 600 600 600 600 600 0 0 600 600 600 600 600 0 600 600 600 600 0 600 600]
-/Encoding /WinAnsiEncoding
+/Widths [ 278 0 0 0 0 0 0 0 333 333 0 584 0 0 0 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 0 0 722 0 0 778 0 278 0 0 556 833 722 0 667 0 0 667 0 722 0 944 667 0 0 0 0 0 0 556 0 556 556 500 556 556 278 556 556 222 0 0 222 833 556 556 556 0 333 500 278 556 0 722 500]
 /Subtype /Type1
+/FontDescriptor 2063 0 R
+/BaseFont 2067 0 R
+/Encoding 3500 0 R
 >>
 endobj
-3510 0 obj
-923
+3502 0 obj
+919
 endobj
-3511 0 obj
-<<
-/Type /FontDescriptor
-/FontName /ETWAQU#2BAlbanyAMT
-/FontBBox [ -12 -186 612 667]
-/Flags 5
-/Ascent 667
-/CapHeight 667
-/Descent -186
-/ItalicAngle 0
-/StemV 91
-/AvgWidth 600
-/MaxWidth 600
-/MissingWidth 600
-/CharSet (/L/A/n/c/X/M/o/d/N/p/e/D/underscore/slash/f/P/r/g/s/h/G/t/i/S/u/I/U/w/l/a/x/m/b/W/space/parenleft/parenright/plus)
-/FontFile3 3512 0 R
->>
-endobj
-3512 0 obj
-<<
-/Subtype /Type1C
-/Filter /FlateDecode
-/Length 3513 0 R
->>
-stream
-xœ}WTSW}!ÉKá5PKÍc
-¨ˆVQ« ¿j)b±tø©(¿
-Q‚|Câ•„Ä€!A‹Z´ Ögý´ÒªÕÚS©Úú™ÇQ‡i±¿óº.3kîK€¤³fÍZYIî{÷ž{îÙûìs®€9À1"/3£@—ď‚8/÷¼7EX…â9î÷ ñ"<´`âNgã,dœEíÏ»%ºÃ°¼í
-Û&B ´±5²°H¹9wý†oÿäÄÕ3fÌ´=™杩{ã•Sœ»¾À{þ³%'¯°(?§ d¡w$ž——›å½>OY´¡Ø;#;;'›_–’‘—³É;&7/·¨¨p‹·d€wðìÙsñWp|n~¦¢Ø;®° Ð{…wbÎzE^Ææ?<$bÚŠˆ‚¬Ô¸Âìø¢œ¨u	›×oˆ-É]¥X–¼5/£4?sµ·ÀŒ7‚"ð!VQD1‹H ¢‰ âU"†xˆ%櫈—‰$báO$ˉP"…˜N¼H¤qÄRb
-ODó	1p$œ‰pbá‡CKˆ°/	‚O
-ž§ÛE¢RÑ_āb³øßdù³„•†JÏO˜2a›c ã.Ç›NaNíN÷s&NœØå2ÙEíRïÒïJ»æ¸nqíà†\¸!†å¬ œ„ÎBÈæL²¯É6­ÆÐR«QÒ(™TªÔ•Íê6úæˆb	?ª¬àG\,¼Nët•êš29
-E‹1ðcá+ÐB&,„uB.d‘ŸØn)Ì&MZM‹¡VSJ¯#ÑÎ$F&•µx-ÿÚ™D±#
-q©¬Á+tü£d[3^¡Â.-"??1ìae¨ŠΈ[Ië΃lëî,tœô¤nÁBn®,œ7[YÁ›íBƒéd©Õ
-ž6Ò¡‰<ÊêôûôRêôCº¯÷“ú@éÁ-†ÍL¾1¹›+¤ÑêJòvô¥¸õ[W¼*ÇNlcaLÃ^Üg=©n#ç,ËèN1Ç3RôÜŒ™èYôÌã ðìë3w÷Ò‡LûÚƒ´¹¦YUÛ°CU+OM{¥8ÏtXòõ/ ¼9 ÷ú3RvÓÔÕ²Æ&u‹×^M³‰¦zJ¨«mêæ*9ÕS®V)é1ÝO@Z
-ó!ÿÆ@˜'õn+ƒX¨Ä!¢nuCkMS„6PO“(­E³a­øcCcä@–Zá0Ñ­$Ä¢J”€qI=²¡èiÃd9	`#„¡âWÈ2ë#
-“y"ñ1VÒeä8ÕúYÎ3íxIsàWqóˆ"ÜŽ6³¹œ¢Ãæ”?‰‚Ð0šÃbž•<#Š\ÞYd“eµÎ²º”ŽàZBЯb2œÀ²µ#+„¹HrÁ¹"·§þ€9óôpgüþ‰ž¡3E¿Ü]0ÕÞ_ßywžß¿ómY¿™…§,ˆÌíf÷³';‘.žT%§ä†e6÷Ï£òµþÄw—` ¦ãhª¹M§›—»¯•SÁO$ã¤*“HTOe÷øâ™~ø½„w½}çùxÀ~bá*+ä<8S—ĆQ ÏfE=0’E¢KÜNñŸÈ2k`Œôy>0öa5êÇ“EÂ¥‘|\PüI˜ÅÂm>uð>æíøâÌ™É[â)Ï[2&ãQme¥®£šŒ!Ñ*­’€]äÙeòo1R˜ôøïàDSwÀ)ð!šžZ“"‡˜²§7#‚†ø/úúÉ“o~°F–²0pû MÆœi0—Ýpoaïµgü‚òøͼ‚ó]:•NUWß°]MgmZªˆcÁ,üªâW)+2=ºþÉ3Ä$ì›-µ)Ù$¾Ç Obeöç/$ÁcDàC_€Ï4!9*´%BÉŽ(dœ¦JÎ3=åÝØÌ·W2)Ò¥Ÿÿ™ò1…À:l{7NlH³¥]!ϝîîkgëÊ?¨c˜FFºG©¹N[ÙHç5ÅhréœWR–Òñ¡’qú
-Øq÷[Ò¨•$”0ªi‰,첞é.Þ7¶É`	äàÀ£Çó®ûÐè[&`À“í$³‚45Žä$lÁ.ˆ“Üî[™J(Kf$Fý*äaÔ‘”ºÊû×hp†ed…ý+L ­¾¥Z‹$Þ$©žap8}à´×~Æ\ýv‰F½«¡‰?´n/>tYýf»BWÀ¤2	…³æKÿ‹iŸ³ð7œ@1Ù¸8ø^FÝé[»úÈR/$
-DR$y<Dýé;K#™$6)9VŽ&`]Álæ]‘½Ì1cwOçQÆ•b#þç%Ô“q8Iêz©Höd SoIø¬ÀL½Ç£‰S Ü,„ßzºÏzRz.Š“É6IoMd¤TLÀÒ´å›Ú
-+éÃe‡Õê‹êƒêƒˍ›™)¥OYžúbtϹFBÅì­Õa)^ÎWAz>—jj[äÔƒFk¢õ’“ë>,ëÃÉ!¾ñÖ»[»òöÓ›Úsô+5!Íu
-¶µÅPm4>wòâс›忱GNùlkÔÔîõ2htm4¥¿&¡|°ØWÊ)}•
-ï`EmT‡,´èài5h¦
-úó#¦×­´âa„gm’˜ZRo¸ðÅ!ãEfò	f?®qc5.]b/íãÜIÇ)~÷åKAñ%ñ©£5nÇYÁç,çtBˆ38GÖÊÏoÝkáZ
-ŸSUå;4šN&½¹¾v5Îkߐ{ð<}CÂ\>üå©Ç{N/1ƒLæžTiY“Ê`hÒµÉJLõÚòò:ÜQTHҏ%µ-c–3	%é©kó#˜Hi„ÿúÌ¿ò—¶®K£ÎüŒÓ#è¤Ö`ú‚“ÄT7j 9EØ2m í'ï¤=ú+ÇßÑÕêk¶¿ÕP¯–gG—­b¤1ïöÒ`†B›2¥Çà €£8Æ7øì±Ë/G4ˆBíæßÖìµÈÁ\2»'«R×*éD	fÄ^yiaÄ'’6µ¶R>ÊÃP³Y÷¿³ÊSpé”'åýʵÈ(=›‘Þ–àå³(64£-»«„îT«ºVu½Ò\×Q~¸Ì¸‰Ù ˆNž…y7›‰è}«oÇ>¬3Œ´²V…“S,)ÕÖîmÁÛÉß‘Pú4örñU/pþîêPoÉ©œ·é<S¡v±!NW¬)2Ë;™Né—WÎݽ}%}ånÿšÔ/C“¶þIÂ7x–hŽ•ÀA,˜u‡Nf<õ¤J¸W<nÚÚ!ª4—sÆ
-bõ’:½rÕÊü—½R³Øi¸0ÓÖIÇo}¼úÛ¾OŸ¿h«v£Ñ6É€æYÅ;̪~[azDh[y‚~Áñsk±¯cÃÖ²YMuY:ÚVuS)ÏHem]9¶´+ÜC28::$8æÚ9<øCqUªð,KeÀ³è»ƒppDWÛXA'äu&äâ<îqÎâ6;Åu°1ãƒnƒVœJÎEÚH¸!þèO4‘÷GœÅ½äÐ?Dz±5";,‰nÉ0Ï@[{å8bú?C,Š…gY÷~.³™|ËRÆÍóø‡håI`&¯Ç~4kÝò
-e’¼z{]S-­Ñªô»wîÜ-¿}à°æ#½qnãkt”$¡5¯éuœÍnsBiêÃ%Ÿ¯~týòÁO®ÈO‹^^‘Â÷¯1é]½_\ÿ·SÔÕÏ#÷^X‰æãx¹Â<ô"Ä{Rà.È`‹5$uk¼SDÎ’h
-ò@ρ‡øŒ¥_o©å!Ú­!±½`´E‹U$õÀVL'Ûªs,‰ûÌ鄦‹—ÛÑæYÛ•ý
-¢ÿ,>‘5üÅ×EÎü[™Æ÷ˆñ†Óh¹ð}U
-ß®â@Rì'Ǐvt{uÉÍ¢ÑÕ»^ï,ÿþøåÎ8šÝG6æÐTê·Ÿð^.t“—×~øjæÆ-k²åŠ6ø3“Á(sÓ¤ÿÝ‚‚+€¯9½0ß*þã
-(IUŽ˜’mbþäIõFý4·ß&
-ƒLš9„\#’6E­¡!æ3ُ·L
-X6ÝÑÝááoîX4¦û“ù>+h…4‡4!¸z\!AÊù‚pÄWü%ù¾³™íî/Øîß‘‰#E_øÅq8mFž_ʼnïÙe²¯­ç2óaÇØEÈÍÁç¨aÔê²¢(䐍&0~Œï»S¿B¢9øŽÄH
-ÍÍúÝ;öÐÑà–?ÌüÆüÖùó5piܳ³‘Ù-Õ«š«å[Ÿ	!Ûª®QU×3
-»¶ÓאÛ;~|ßè?5¹¼µi`ê¥ÕÍ*½N£9d”_Á{àÈüÈü´é—X•¯i®aøˆÃ¶19âû®ÅV™á‘F‹aÙ¦¶\~•r´-–Œß3a1Â,ÓÔ´ànä=Bnç.û—hÍï"þÄÜ–ß'Êviw1{¤ºmJýVE}û¯õêÛ™úÉ5¸çÕíÙcÐÈ]¶š¹¹fp7›ÍäûŽ¬ÓûÎάóD‚øz \Ø
-endstream
-endobj
-3513 0 obj
-3387
-endobj
 3500 0 obj <<
+/Type /Encoding
+/Differences [32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]
+>> endobj
+3491 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [99.895 395.959 150.252 407.528]
+/Rect [99.895 399.015 150.252 410.583]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-LDAPdiag) >>
 >> endobj
-3499 0 obj <<
+3490 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 370.422 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.padl.com/Contents/OpenSourceSoftware.html)>>
 >> endobj
-3505 0 obj <<
-/D [3503 0 R /XYZ 100.892 685.529 null]
+3496 0 obj <<
+/D [3494 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1752 0 obj <<
-/D [3503 0 R /XYZ 100.892 382.305 null]
+/D [3494 0 R /XYZ 100.892 385.972 null]
 >> endobj
-3506 0 obj <<
-/D [3503 0 R /XYZ 100.892 354.007 null]
+3497 0 obj <<
+/D [3494 0 R /XYZ 100.892 357.674 null]
 >> endobj
-3502 0 obj <<
+3493 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F54 1912 0 R /F30 1928 0 R /F59 1905 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
-/XObject << /Im8 3501 0 R >>
+/XObject << /Im8 3492 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3516 0 obj <<
+3505 0 obj <<
 /Length 2322      
 /Filter /FlateDecode
 >>
@@ -16251,33 +15901,33 @@
 ÷â¹k=!Tt-ÞýKUî:લ…òyd¶'{ý²N‘ÇŸh8Y¹ç˜ö€i¼[ádB•‘t±&ŒíŸQæ‡é±/ß2p¼3¶3[ÑLѧÅÿBG°Bàâô=îé--è¿ ‚ÜõR;êS¡ìǁÚÂUT7ðaöéuoºOß• xþ3/?g
 endstream
 endobj
-3515 0 obj <<
+3504 0 obj <<
 /Type /Page
-/Contents 3516 0 R
-/Resources 3514 0 R
+/Contents 3505 0 R
+/Resources 3503 0 R
 /MediaBox [0 0 612 792]
-/Parent 3520 0 R
+/Parent 3509 0 R
 >> endobj
-3517 0 obj <<
-/D [3515 0 R /XYZ 151.701 685.529 null]
+3506 0 obj <<
+/D [3504 0 R /XYZ 151.701 685.529 null]
 >> endobj
 314 0 obj <<
-/D [3515 0 R /XYZ 151.701 407.456 null]
+/D [3504 0 R /XYZ 151.701 407.456 null]
 >> endobj
-3518 0 obj <<
-/D [3515 0 R /XYZ 151.701 380.427 null]
+3507 0 obj <<
+/D [3504 0 R /XYZ 151.701 380.427 null]
 >> endobj
 1852 0 obj <<
-/D [3515 0 R /XYZ 151.701 289.085 null]
+/D [3504 0 R /XYZ 151.701 289.085 null]
 >> endobj
-3519 0 obj <<
-/D [3515 0 R /XYZ 151.701 272.215 null]
+3508 0 obj <<
+/D [3504 0 R /XYZ 151.701 272.215 null]
 >> endobj
-3514 0 obj <<
+3503 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3523 0 obj <<
+3512 0 obj <<
 /Length 2602      
 /Filter /FlateDecode
 >>
@@ -16312,27 +15962,27 @@
 ³EÍ\¿P­ƒ<6¸ˆVŒ't{ö&IF…Ï÷I²x8¸ß$¡Lº›Õ8¸Ñ?â7§–Ê]´‹RJŠ°0²‡dêRì£9ÃR¥2‰f@x8› j3BFë%Úô8¦õӁ^`“ù,Œv•XÓˆŽEɏB.ܐÎÎqè9胢Ðø·Õðìý?×ø7
 endstream
 endobj
-3522 0 obj <<
+3511 0 obj <<
 /Type /Page
-/Contents 3523 0 R
-/Resources 3521 0 R
+/Contents 3512 0 R
+/Resources 3510 0 R
 /MediaBox [0 0 612 792]
-/Parent 3520 0 R
+/Parent 3509 0 R
 >> endobj
-3524 0 obj <<
-/D [3522 0 R /XYZ 100.892 685.529 null]
+3513 0 obj <<
+/D [3511 0 R /XYZ 100.892 685.529 null]
 >> endobj
 318 0 obj <<
-/D [3522 0 R /XYZ 100.892 660.623 null]
+/D [3511 0 R /XYZ 100.892 660.623 null]
 >> endobj
-3525 0 obj <<
-/D [3522 0 R /XYZ 100.892 641.897 null]
+3514 0 obj <<
+/D [3511 0 R /XYZ 100.892 641.897 null]
 >> endobj
-3521 0 obj <<
+3510 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3530 0 obj <<
+3519 0 obj <<
 /Length 2292      
 /Filter /FlateDecode
 >>
@@ -16357,53 +16007,53 @@
 1 Æ•2²ê[ÚMšéwmj ½ÓÍRãqÞ6?¹—ÚYUºFÞš,¼˜¥ø	;å…€ƒéðqw¹0³i=aüþÁ¯I~_Íf@»ø—‡øýÝg\.CfyúŠk¿ÞBYV nYU°Þ% P,Pr®u4ý"³tN§ó?g*ž¾Œçì<s~gÌþçÓÓ²¿aZ3¨LÿeùîÔ´mÕŸUНڜö·ºbºa;SW„ÏtR²x,èÿš±>üÓý²‚ô
 endstream
 endobj
-3529 0 obj <<
+3518 0 obj <<
 /Type /Page
-/Contents 3530 0 R
-/Resources 3528 0 R
+/Contents 3519 0 R
+/Resources 3517 0 R
 /MediaBox [0 0 612 792]
-/Parent 3520 0 R
-/Annots [ 3526 0 R 3527 0 R ]
+/Parent 3509 0 R
+/Annots [ 3515 0 R 3516 0 R ]
 >> endobj
-3526 0 obj <<
+3515 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.099 277.6 476.697 289.289]
 /Subtype /Link
 /A << /S /GoTo /D (redirfold) >>
 >> endobj
-3527 0 obj <<
+3516 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 421.232 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://isg.ee.ethz.ch/tools/realmen/det/skel.en.html)>>
 >> endobj
-3531 0 obj <<
-/D [3529 0 R /XYZ 151.701 685.529 null]
+3520 0 obj <<
+/D [3518 0 R /XYZ 151.701 685.529 null]
 >> endobj
 322 0 obj <<
-/D [3529 0 R /XYZ 151.701 660.623 null]
+/D [3518 0 R /XYZ 151.701 660.623 null]
 >> endobj
-3532 0 obj <<
-/D [3529 0 R /XYZ 151.701 641.897 null]
+3521 0 obj <<
+/D [3518 0 R /XYZ 151.701 641.897 null]
 >> endobj
 326 0 obj <<
-/D [3529 0 R /XYZ 151.701 460.625 null]
+/D [3518 0 R /XYZ 151.701 460.625 null]
 >> endobj
-3533 0 obj <<
-/D [3529 0 R /XYZ 151.701 432.312 null]
+3522 0 obj <<
+/D [3518 0 R /XYZ 151.701 432.312 null]
 >> endobj
 330 0 obj <<
-/D [3529 0 R /XYZ 151.701 260.157 null]
+/D [3518 0 R /XYZ 151.701 260.157 null]
 >> endobj
-3534 0 obj <<
-/D [3529 0 R /XYZ 151.701 231.845 null]
+3523 0 obj <<
+/D [3518 0 R /XYZ 151.701 231.845 null]
 >> endobj
-3528 0 obj <<
+3517 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F17 1131 0 R /F15 1133 0 R /F51 1134 0 R /F54 1912 0 R /F59 1905 0 R /F30 1928 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3539 0 obj <<
+3528 0 obj <<
 /Length 2546      
 /Filter /FlateDecode
 >>
@@ -16441,34 +16091,34 @@
 ñ99wùËÛ·×ë5„<øj¯!Tõw³W‹•EX¤ÚOÿûŠõþ¶ù?õ®å¹
 endstream
 endobj
-3538 0 obj <<
+3527 0 obj <<
 /Type /Page
-/Contents 3539 0 R
-/Resources 3537 0 R
+/Contents 3528 0 R
+/Resources 3526 0 R
 /MediaBox [0 0 612 792]
-/Parent 3520 0 R
-/Annots [ 3536 0 R ]
+/Parent 3509 0 R
+/Annots [ 3525 0 R ]
 >> endobj
-3536 0 obj <<
+3525 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 224.496 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.easysw.com)>>
 >> endobj
-3540 0 obj <<
-/D [3538 0 R /XYZ 100.892 685.529 null]
+3529 0 obj <<
+/D [3527 0 R /XYZ 100.892 685.529 null]
 >> endobj
 334 0 obj <<
-/D [3538 0 R /XYZ 100.892 660.623 null]
+/D [3527 0 R /XYZ 100.892 660.623 null]
 >> endobj
-3541 0 obj <<
-/D [3538 0 R /XYZ 100.892 644.027 null]
+3530 0 obj <<
+/D [3527 0 R /XYZ 100.892 644.027 null]
 >> endobj
-3537 0 obj <<
+3526 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R /F30 1928 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3545 0 obj <<
+3534 0 obj <<
 /Length 1682      
 /Filter /FlateDecode
 >>
@@ -16490,33 +16140,33 @@
 Р¯óïtx#60 $¬}ì^Ýã31|žÊ¢šBÑ뺁O©U´ÏøÒF&'Å¡ŒáÚ%€M•ôPp¬¼Nk¦ïDñÕŒ*SÜœ£ÓL Äb€w7•Ôôe~áƒù_ÆbŽ
 endstream
 endobj
-3544 0 obj <<
+3533 0 obj <<
 /Type /Page
-/Contents 3545 0 R
-/Resources 3543 0 R
+/Contents 3534 0 R
+/Resources 3532 0 R
 /MediaBox [0 0 612 792]
-/Parent 3520 0 R
+/Parent 3509 0 R
 >> endobj
-3546 0 obj <<
-/D [3544 0 R /XYZ 151.701 685.529 null]
+3535 0 obj <<
+/D [3533 0 R /XYZ 151.701 685.529 null]
 >> endobj
 338 0 obj <<
-/D [3544 0 R /XYZ 151.701 605.118 null]
+/D [3533 0 R /XYZ 151.701 605.118 null]
 >> endobj
-3547 0 obj <<
-/D [3544 0 R /XYZ 151.701 569.357 null]
+3536 0 obj <<
+/D [3533 0 R /XYZ 151.701 569.357 null]
 >> endobj
-3548 0 obj <<
-/D [3544 0 R /XYZ 151.701 408.133 null]
+3537 0 obj <<
+/D [3533 0 R /XYZ 151.701 408.133 null]
 >> endobj
-3549 0 obj <<
-/D [3544 0 R /XYZ 151.701 408.133 null]
+3538 0 obj <<
+/D [3533 0 R /XYZ 151.701 408.133 null]
 >> endobj
-3543 0 obj <<
+3532 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3552 0 obj <<
+3541 0 obj <<
 /Length 1589      
 /Filter /FlateDecode
 >>
@@ -16535,65 +16185,65 @@
 \q1$FþMÇ¿„ß3^õEÀI%@ÚH°…Mh‘ï€JŠC`Ò›¢ú®ô˜5wÑ•ÿú¼›ž³Öô'Àœ·[uì¡þ8[ñ¶ôUÏFoÈà›ñyh/cvÃ3Z¬àÔÖÓke¬ùæ¹xõÀõ°è¢ âÛ§]íþ¦„?ðá[þ¢p]v
 endstream
 endobj
-3551 0 obj <<
+3540 0 obj <<
 /Type /Page
-/Contents 3552 0 R
-/Resources 3550 0 R
+/Contents 3541 0 R
+/Resources 3539 0 R
 /MediaBox [0 0 612 792]
-/Parent 3520 0 R
+/Parent 3509 0 R
 >> endobj
-3542 0 obj <<
+3531 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./xslt/figures/warning.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 3556 0 R
+/PTEX.InfoDict 3545 0 R
 /BBox [0 0 33 33]
 /Resources <<
 /ProcSet [ /PDF /ImageC ]
 /ExtGState <<
-/R7 3557 0 R
+/R7 3546 0 R
 >>>>
-/Length 3558 0 R
+/Length 3547 0 R
 /Filter /FlateDecode
 >>
 stream
-xœ+T0Ð3T0 A(œË¥d®^ÌU¨`l–Ó†zæÆ&æp¨ÎÉ“Kß9X?È݉K?¨ˆKßL:8+Xpé»é»åpé»ØØ襦d&—ä)šõäç”ææƒÕÙùE@¦—§‹BÅœ·—¹8\.²¼¯OZx(VPtQ«A½®ygŸcè‘zÓϺ¬¬T—Ïf``øÀ‘gx½’áOãÙ’IîÌ
-æ	Ù¸Ø¥Vœ[¤Èåê©ÈÈ Ùû>Ä
+xœ+T0Ð3T0 A(œË¥d®^ÌU¨`l–Ó†zæÆFFÚ¤ÌÉ“Kß9X?È݉K?¨†KßL:8+Xpé»é»åpé»ØØ襦d&—ä)šõäç”ææƒÕÙùE@¦—§‹BÅœ·—¹8\.²¼¯OZx(VPtQ«A½®ygŸcè‘zÓϺ¬¬T—Ïf``øÀ‘gx½’áOãÙ’IîÌ
+æ	Ù¸Ø¥Vœ[¤Èåê©ÈÈ «X>
 endstream
 endobj
-3556 0 obj
+3545 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110838)
-/ModDate (D:20080610110838)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090358-05'00')
+/ModDate (D:20080528090358-05'00')
 >>
 endobj
-3557 0 obj
+3546 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-3558 0 obj
-205
+3547 0 obj
+206
 endobj
-3553 0 obj <<
-/D [3551 0 R /XYZ 100.892 685.529 null]
+3542 0 obj <<
+/D [3540 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3554 0 obj <<
-/D [3551 0 R /XYZ 100.892 532.81 null]
+3543 0 obj <<
+/D [3540 0 R /XYZ 100.892 532.81 null]
 >> endobj
-3555 0 obj <<
-/D [3551 0 R /XYZ 100.892 532.81 null]
+3544 0 obj <<
+/D [3540 0 R /XYZ 100.892 532.81 null]
 >> endobj
-3550 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F89 2333 0 R /F73 2334 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R >>
-/XObject << /Im9 3542 0 R >>
+3539 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F89 2330 0 R /F73 2331 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R >>
+/XObject << /Im9 3531 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3562 0 obj <<
+3551 0 obj <<
 /Length 1012      
 /Filter /FlateDecode
 >>
@@ -16607,27 +16257,27 @@
 ?1â5ˆµPpð>ïkól£Ûš’ÞW:Ãg —Ò‹çW²¢‡F@ÔÒC.Ú²Ú_~(DY.”Ä”ÚåÿCŸ§Üq…áù_•©!5
 endstream
 endobj
-3561 0 obj <<
+3550 0 obj <<
 /Type /Page
-/Contents 3562 0 R
-/Resources 3560 0 R
+/Contents 3551 0 R
+/Resources 3549 0 R
 /MediaBox [0 0 612 792]
-/Parent 3566 0 R
+/Parent 3555 0 R
 >> endobj
-3563 0 obj <<
-/D [3561 0 R /XYZ 151.701 685.529 null]
+3552 0 obj <<
+/D [3550 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3564 0 obj <<
-/D [3561 0 R /XYZ 151.701 121.245 null]
+3553 0 obj <<
+/D [3550 0 R /XYZ 151.701 121.245 null]
 >> endobj
-3565 0 obj <<
-/D [3561 0 R /XYZ 151.701 121.245 null]
+3554 0 obj <<
+/D [3550 0 R /XYZ 151.701 121.245 null]
 >> endobj
-3560 0 obj <<
+3549 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3569 0 obj <<
+3558 0 obj <<
 /Length 1516      
 /Filter /FlateDecode
 >>
@@ -16643,35 +16293,35 @@
 K (©ð§o¦f†_LUÑ’ÒÂ$¡9½´¤þ?7ÛÊ|quBpùlAI“§öàbZ02Z0Â"7ŠÛŽ7o­_µnT˜¨7ýóy€¥‘P¶•Íö+Çâσ¥=Q©°¿CiQ' -¢½ß˱ö}¿lQ_¥þ ûÐ+ü£«¡ø?¾ çüi:!Ýþ¤ùë
 endstream
 endobj
-3568 0 obj <<
+3557 0 obj <<
 /Type /Page
-/Contents 3569 0 R
-/Resources 3567 0 R
+/Contents 3558 0 R
+/Resources 3556 0 R
 /MediaBox [0 0 612 792]
-/Parent 3566 0 R
-/Annots [ 3559 0 R ]
+/Parent 3555 0 R
+/Annots [ 3548 0 R ]
 >> endobj
-3559 0 obj <<
+3548 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [121.881 632.391 191.707 645.293]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-dbconf) >>
 >> endobj
-3570 0 obj <<
-/D [3568 0 R /XYZ 100.892 685.529 null]
+3559 0 obj <<
+/D [3557 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3571 0 obj <<
-/D [3568 0 R /XYZ 100.892 336.814 null]
+3560 0 obj <<
+/D [3557 0 R /XYZ 100.892 336.814 null]
 >> endobj
-3572 0 obj <<
-/D [3568 0 R /XYZ 100.892 336.814 null]
+3561 0 obj <<
+/D [3557 0 R /XYZ 100.892 336.814 null]
 >> endobj
-3567 0 obj <<
+3556 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3576 0 obj <<
+3565 0 obj <<
 /Length 1756      
 /Filter /FlateDecode
 >>
@@ -16697,21 +16347,21 @@
 œùdßPpX[-†¸ä®R¾õ{¦pÿ™àÎÙnê¡êêéØdšvøņޓÔ(@N뾝 Niíx¥úð‹-9aZG¬„Ðål_l ÁTnÑ$Iõá>z´±‘NC#j¤)œþ–Fš‰tëßo[õk/óªBˆàháþŠ3~bþžI at M½ÁöÓkeÍçMÕ*¯¡ÍÎ8øÔ¿sà†ÿ Õïx
 endstream
 endobj
-3575 0 obj <<
+3564 0 obj <<
 /Type /Page
-/Contents 3576 0 R
-/Resources 3574 0 R
+/Contents 3565 0 R
+/Resources 3563 0 R
 /MediaBox [0 0 612 792]
-/Parent 3566 0 R
+/Parent 3555 0 R
 >> endobj
-3577 0 obj <<
-/D [3575 0 R /XYZ 151.701 685.529 null]
+3566 0 obj <<
+/D [3564 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3574 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F33 3578 0 R /F11 2494 0 R /F59 1905 0 R >>
+3563 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F33 3567 0 R /F11 2489 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3581 0 obj <<
+3570 0 obj <<
 /Length 1426      
 /Filter /FlateDecode
 >>
@@ -16726,21 +16376,21 @@
 D,Ò'Ù~{qýîµCÚ©õ"Kˆ†êU:ý¥[ü;'œ¨ë·g/‰Â]y€`òf§{mz̈ŸUYÁ*]œ`j››ß`¸U°–?bfOžÙųClSÁ>ÌÅÈò‡-Ù–ÚôÆž(AÔ»7ö®Ç†<ÿÔ
 endstream
 endobj
-3580 0 obj <<
+3569 0 obj <<
 /Type /Page
-/Contents 3581 0 R
-/Resources 3579 0 R
+/Contents 3570 0 R
+/Resources 3568 0 R
 /MediaBox [0 0 612 792]
-/Parent 3566 0 R
+/Parent 3555 0 R
 >> endobj
-3582 0 obj <<
-/D [3580 0 R /XYZ 100.892 685.529 null]
+3571 0 obj <<
+/D [3569 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3579 0 obj <<
+3568 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F54 1912 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3585 0 obj <<
+3574 0 obj <<
 /Length 1242      
 /Filter /FlateDecode
 >>
@@ -16759,27 +16409,27 @@
 ÛgÅ¡1·Ô²†Í1 ÕÀ/'hÃÓÉyÿdüÄ7Z
 endstream
 endobj
-3584 0 obj <<
+3573 0 obj <<
 /Type /Page
-/Contents 3585 0 R
-/Resources 3583 0 R
+/Contents 3574 0 R
+/Resources 3572 0 R
 /MediaBox [0 0 612 792]
-/Parent 3566 0 R
+/Parent 3555 0 R
 >> endobj
-3586 0 obj <<
-/D [3584 0 R /XYZ 151.701 685.529 null]
+3575 0 obj <<
+/D [3573 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3587 0 obj <<
-/D [3584 0 R /XYZ 151.701 338.851 null]
+3576 0 obj <<
+/D [3573 0 R /XYZ 151.701 338.851 null]
 >> endobj
-3588 0 obj <<
-/D [3584 0 R /XYZ 151.701 338.851 null]
+3577 0 obj <<
+/D [3573 0 R /XYZ 151.701 338.851 null]
 >> endobj
-3583 0 obj <<
+3572 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3592 0 obj <<
+3581 0 obj <<
 /Length 1539      
 /Filter /FlateDecode
 >>
@@ -16798,54 +16448,54 @@
 ƒMMzüõ¤e¯–bk¬:ºGNì‡}_{xºÁlƒVÒµ;xZì°{ñ<¼ATË»õ$ƒšYËt<¸tz碮J‘pÕ€û’îFK´Sß±ß)mý5ÏgÉŸ¾ð_ð?éÎà
 endstream
 endobj
-3591 0 obj <<
+3580 0 obj <<
 /Type /Page
-/Contents 3592 0 R
-/Resources 3590 0 R
+/Contents 3581 0 R
+/Resources 3579 0 R
 /MediaBox [0 0 612 792]
-/Parent 3566 0 R
-/Annots [ 3589 0 R 3598 0 R ]
+/Parent 3555 0 R
+/Annots [ 3578 0 R 3587 0 R ]
 >> endobj
-3589 0 obj <<
+3578 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [330.372 158.775 460.543 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (Big500users) >>
 >> endobj
-3598 0 obj <<
+3587 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [127.168 145.226 161.888 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (Big500users) >>
 >> endobj
-3593 0 obj <<
-/D [3591 0 R /XYZ 100.892 685.529 null]
+3582 0 obj <<
+/D [3580 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3594 0 obj <<
-/D [3591 0 R /XYZ 100.892 429.792 null]
+3583 0 obj <<
+/D [3580 0 R /XYZ 100.892 429.792 null]
 >> endobj
-3595 0 obj <<
-/D [3591 0 R /XYZ 100.892 429.792 null]
+3584 0 obj <<
+/D [3580 0 R /XYZ 100.892 429.792 null]
 >> endobj
 342 0 obj <<
-/D [3591 0 R /XYZ 100.892 337.734 null]
+/D [3580 0 R /XYZ 100.892 337.734 null]
 >> endobj
-3596 0 obj <<
-/D [3591 0 R /XYZ 100.892 313.151 null]
+3585 0 obj <<
+/D [3580 0 R /XYZ 100.892 313.151 null]
 >> endobj
 346 0 obj <<
-/D [3591 0 R /XYZ 100.892 223.215 null]
+/D [3580 0 R /XYZ 100.892 223.215 null]
 >> endobj
-3597 0 obj <<
-/D [3591 0 R /XYZ 100.892 196.51 null]
+3586 0 obj <<
+/D [3580 0 R /XYZ 100.892 196.51 null]
 >> endobj
-3590 0 obj <<
+3579 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R /F51 1134 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3601 0 obj <<
+3590 0 obj <<
 /Length 979       
 /Filter /FlateDecode
 >>
@@ -16860,85 +16510,85 @@
 äöM
 endstream
 endobj
-3600 0 obj <<
+3589 0 obj <<
 /Type /Page
-/Contents 3601 0 R
-/Resources 3599 0 R
+/Contents 3590 0 R
+/Resources 3588 0 R
 /MediaBox [0 0 612 792]
-/Parent 3624 0 R
+/Parent 3613 0 R
 >> endobj
+3591 0 obj <<
+/D [3589 0 R /XYZ 151.701 685.529 null]
+>> endobj
+3592 0 obj <<
+/D [3589 0 R /XYZ 151.701 586.571 null]
+>> endobj
+3593 0 obj <<
+/D [3589 0 R /XYZ 151.701 568.369 null]
+>> endobj
+3594 0 obj <<
+/D [3589 0 R /XYZ 151.701 545.924 null]
+>> endobj
+3595 0 obj <<
+/D [3589 0 R /XYZ 151.701 527.721 null]
+>> endobj
+3596 0 obj <<
+/D [3589 0 R /XYZ 151.701 507.397 null]
+>> endobj
+3597 0 obj <<
+/D [3589 0 R /XYZ 151.701 484.952 null]
+>> endobj
+3598 0 obj <<
+/D [3589 0 R /XYZ 151.701 466.75 null]
+>> endobj
+3599 0 obj <<
+/D [3589 0 R /XYZ 151.701 444.305 null]
+>> endobj
+3600 0 obj <<
+/D [3589 0 R /XYZ 151.701 426.102 null]
+>> endobj
+3601 0 obj <<
+/D [3589 0 R /XYZ 151.701 403.657 null]
+>> endobj
 3602 0 obj <<
-/D [3600 0 R /XYZ 151.701 685.529 null]
+/D [3589 0 R /XYZ 151.701 385.454 null]
 >> endobj
 3603 0 obj <<
-/D [3600 0 R /XYZ 151.701 586.571 null]
+/D [3589 0 R /XYZ 151.701 363.009 null]
 >> endobj
 3604 0 obj <<
-/D [3600 0 R /XYZ 151.701 568.369 null]
+/D [3589 0 R /XYZ 151.701 322.362 null]
 >> endobj
 3605 0 obj <<
-/D [3600 0 R /XYZ 151.701 545.924 null]
+/D [3589 0 R /XYZ 151.701 304.159 null]
 >> endobj
 3606 0 obj <<
-/D [3600 0 R /XYZ 151.701 527.721 null]
+/D [3589 0 R /XYZ 151.701 283.835 null]
 >> endobj
 3607 0 obj <<
-/D [3600 0 R /XYZ 151.701 507.397 null]
+/D [3589 0 R /XYZ 151.701 263.512 null]
 >> endobj
 3608 0 obj <<
-/D [3600 0 R /XYZ 151.701 484.952 null]
+/D [3589 0 R /XYZ 151.701 241.067 null]
 >> endobj
 3609 0 obj <<
-/D [3600 0 R /XYZ 151.701 466.75 null]
+/D [3589 0 R /XYZ 151.701 200.419 null]
 >> endobj
 3610 0 obj <<
-/D [3600 0 R /XYZ 151.701 444.305 null]
+/D [3589 0 R /XYZ 151.701 180.095 null]
 >> endobj
 3611 0 obj <<
-/D [3600 0 R /XYZ 151.701 426.102 null]
+/D [3589 0 R /XYZ 151.701 161.893 null]
 >> endobj
 3612 0 obj <<
-/D [3600 0 R /XYZ 151.701 403.657 null]
+/D [3589 0 R /XYZ 151.701 139.448 null]
 >> endobj
-3613 0 obj <<
-/D [3600 0 R /XYZ 151.701 385.454 null]
->> endobj
-3614 0 obj <<
-/D [3600 0 R /XYZ 151.701 363.009 null]
->> endobj
-3615 0 obj <<
-/D [3600 0 R /XYZ 151.701 322.362 null]
->> endobj
-3616 0 obj <<
-/D [3600 0 R /XYZ 151.701 304.159 null]
->> endobj
-3617 0 obj <<
-/D [3600 0 R /XYZ 151.701 283.835 null]
->> endobj
-3618 0 obj <<
-/D [3600 0 R /XYZ 151.701 263.512 null]
->> endobj
-3619 0 obj <<
-/D [3600 0 R /XYZ 151.701 241.067 null]
->> endobj
-3620 0 obj <<
-/D [3600 0 R /XYZ 151.701 200.419 null]
->> endobj
-3621 0 obj <<
-/D [3600 0 R /XYZ 151.701 180.095 null]
->> endobj
-3622 0 obj <<
-/D [3600 0 R /XYZ 151.701 161.893 null]
->> endobj
-3623 0 obj <<
-/D [3600 0 R /XYZ 151.701 139.448 null]
->> endobj
-3599 0 obj <<
+3588 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3629 0 obj <<
-/Length 938       
+3618 0 obj <<
+/Length 937       
 /Filter /FlateDecode
 >>
 stream
@@ -16946,278 +16596,179 @@
 e]ChRF®Û±(¢—XäQٛˌ$"¥E&^vïcoB^<`·ÅSE}WÇ<ªÈlԁ‚Ü6åθCž.¨N¹¯J"sÈ‹"I
 ùI‹sq Rw®M–¿Ö&Ë®Öæ25„TT‚1¸Ú›8QšG­™"/¢®ÂÊ8»k‘f‘Ûw˜•—‘µíÛèñÁg»;ö&h¤T\S±n4Ø
 AoÓ5‡ÞìMëì3Z0КC,>G‡¹¤©ÒÁaÿ"-;6¦
-Ì°/‡@¼ÿÇÀ¼X,,Rvª²ZUÓSŽüwÆUmí ™aúÉN;Ú8Ä	B;g×õéšgsX¬ý‡O}¿ñL'—ùÛÎÏuþnç‡Q¿µ3ZhcM§"ȬÀ¦‡–×:!…¹/ä4¤¿›×ÎïzèPh)x´Šhcäu·;ñßx@ü½ó-¢K Ç ¼w¶Ý²®Êƒ+›ðì e¬Ö>›ÉèÏEN×åÁ}I ïg3“T	ýöÈtž¡aXMæ%—B?-MýõtzáôbÜÜ5œ‘OØxµòªLµ‚SPžÿgÁµdæÛµ5(
-Êaý	Æ©dãüÇ@ä
-æ®Å·^–ÈÓq\Ðð½DÝùæßxE4Klh¿
-¿ÝÂ
-ô§—÷ËÛ ò¬P:þ.4¬‡³•kã„-,$Øx:Â螐ÑsœÂLÖ¶
-w[oä£ÍÍ {ë¹Áô‡Þ:3*Ÿ‡<èhÅyX†(˜6Òob¿â©wBª"úg
-w2¿âJ’JÏB¹åÎ6¶.{¶à·¸P~qáUSâ‹S`Z3A]”ÕÏ£FÙ~„ó~æÿî'l¦qIöá:”ý`7Gp%ÜÎýÅ?ñäÓÕʺ¡·ë#š¸±ã_ãóë­^~ˆÓ	óúÝ!
+Ì°/‡@¼ÿÇÀ¼X,,Rvª²ZUÓSŽüwÆUmí ™aúÉN;Ú8Ä	B;g×õéšgsX¬ý‡O}¿ñL'—ùÛÎÏuþnç‡Q¿µ3ZhcM§"ȬÀ¦‡–×:!…¹/ä4¤¿›×ÎïzèPh)x´Šhcäu·;ñßx@ü½ó-¢K Ç ¼w¶Ý²®Êƒ+›ðì e¬Ö>›ÉèÏEN×åÁ}I ïg3“T	ýöÈtž¡aÑ!ó’Ë¡ŸŒ¦þz:½pz1
+nîÎȧl¼ZyÕ‚¦J8Äñx†\Kf¾][ƒ¢ ÖŸ`œJ6®Á_pD®`îZì|è•qa‰<gÁ
+ßûHԝoþWtA³Ä&1ö»¡ð»Ù-Ü@yzy¿¼
+ ¿ÁÊ ¥ã_áBÃz8[¹6NØÂB‚§#Œî	=Ç)Ìdm«p·õf@>šÑÜ°·žLè­3£òyȃŽ†!Qœ‡eˆ‚i# ý&ö+žz'¤*¢?qÖp'!ó+®$©ôÜ!”û¸Pîlc벧a~‹å^5%¾8¦5äÐIYý<ºa”íG8ïgþï~Âf—dþ CÙvsWÂíÜ_üOn0MP­¬z»>¢‰;þ5>¿Þêå‡80¯ÿ ÂM!x
 endstream
 endobj
-3628 0 obj <<
+3617 0 obj <<
 /Type /Page
-/Contents 3629 0 R
-/Resources 3627 0 R
+/Contents 3618 0 R
+/Resources 3616 0 R
 /MediaBox [0 0 612 792]
-/Parent 3624 0 R
-/Annots [ 3625 0 R ]
+/Parent 3613 0 R
+/Annots [ 3614 0 R ]
 >> endobj
-3626 0 obj <<
+3615 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-ByExample/images/chap6-net.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 3635 0 R
-/BBox [0 0 655 453]
+/PTEX.InfoDict 3624 0 R
+/BBox [0 0 658 453]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 3636 0 R
->>/Font << /R9 3637 0 R>>
+/R7 3625 0 R
+>>/Font << /R8 3627 0 R >>
 >>
-/Length 3638 0 R
+/Length 3628 0 R
 /Filter /FlateDecode
 >>
 stream
-xœí}Ë®$¹‘åþ~E,»r¾Ií¤–F0Ý)rf_¸ÊTUwÜ’”*0?vŒf|¸G„{I7B Q@ݤšñƧ“9-gsZðŸü}}{ùÙïÓé}YÎÅšœÂiû/|1§ï^Œ/ö¼˜“5Ɲ?yããÙÇ“õf9;{úòéåsù`Ý9ÆÓIÂr^l“o¹¤“÷¹œ£Â>£;½’–Œ?‡&zë‚'ļ iÕ¢ËgŸZø•™T½dC9»|ò¶äsp'kC>Û tgÐÛ ¡´]9)}µzLW’Wñ‚*þª´kªÐÁ¥ÂY½ÉÁµuW·ç˜l<ý]"þþ7‡"^6¥ø¶aŠñêò.…}y‡Â¾¼¬õ¾mJö:”ö#Ô}>£¦}Ìå]êÖåêÖe§m;—ãy	'CÿwØO¬ˆM)ÄÖÕ†¢ »s.(jç¼%Α ò¦¤DÚ‡°c5¨äÑ/öll“½
-’+º˜ÏKjZ£³”nnáWæR5#³’§”ú—¡”²wç•ðzkäyÊ椨Ýë|`Â’¼Êˆ°T‰ Z5¬éNm{›‹kû®7óz‹ºlŠímCvÔõuy—Ò½¼Ké^^Öšß6EyŠ÷ê£Q×Ôå]*Ôå]*Ô^ƒ.æl²#aÏŽ$6­BÞ¦G¥6†i%îËÙ㛄\•!ÛÊ®‡{{võCv*…&©±lIùlz:¶¸x6ijϪ™úgJ NIœoÙ¥sЁÅ
-ôÖ$F!äYOÍ€jö*PK¼ŠÞ^»*PòªQÚæÔ–·9¸¶íz3Ÿ·¨ËºÄÞÖL'Mw1—w)ÕË»”êåe­ùmS„סX¡1uA]Þ¡"]Þ¡"þãNj»£dJÚœ§_ 	gëOFŠæJdIY.¤6êêA©ÐˆÀšrrɇóþœÅLv9'ôfƒq³Ä€"h¢.eR	ç@c	$J7òä”hLï¹!Ž¨ou’ŐêSÎîœl¢p*grSè{M¢ß#e~H#“ߊd´‹”ƒäwÌ‚(PàÏdœ¡˹dú™êŒÅ`Ç8šP0KCùaÁ Ïe2
-åz$
-y	ç\ÐW¤’v‰’@G”€ ÏLYiÜBc~¢PÈ<Ã1,å€Åä%…şDI’‘”Õ£&åì—h¨$aÍr¦YrFDp³TY¼µæœOÁË\ˆÆJœ ¼¹'û½Aµ ¿NeI\kÇ™¨ðB+í×Mù£*Û@Z‰øßÿ»vüwíXÕŽKïƒþòbê¿åÏëÛé—iF_à×íBðäb+âDT¡úá(£#õñíå_~ûýŸ¾|ÿé‡ýøŸ/¿þøò;c–³/ruéœéoLgC6ʉÅ:í”+ÈùDæbrbáRl’ë‹ÉT%,W€êIÖ‘'ɬ‡{†•¦·[šDBî—kðµÅRÚ׌ÆÉvK˜
-Ž¬
-¨¦Â®SìðKçI-î(=€Bo•¹®¹Ð$ƒ®¨›º"µ2“†½©kƒºôœpÔ>ëÔ_Ù‹ä:֏¨!¿0~Îwu@‘®˜{^B*u@
-6ZòIìz[Š"™l|€l´Ž
-wt@
-åØsU%¯}Ô`ãRò˜‚“u7ì2Î`„sKÅd(µž‡*iZö —Áe‘¿_JF‹¡»ÏGÕ>h(-ÉA	Δv =‡ÖM¢žîó!Ôå×¾½Âx âeã‚ï¨?€ºêŽu7ÍÞvDÿX³ê+ouh˜´ç`	Ç,4”Êè‰,+4ð±XXTÈ<b¢™‰G˜ûÛ>,< §iÊ9ü(¸¥á
-Fy•Xj") åBc¸%l(ìÃ'
-Gà­cnèLc6Â²‘æe<z«&@]º,ÑÐ
-¬E«Ö´‹ò'ÒðϤ15‘Lœ ]!”s˜˜‹dÒõ 5ØG#Ës¹WÁdß]ÌnÕÔj°bidhIUˆç÷jÇ}øÍÚñÞk‡Tg·Sûo›^W	Û| ÅJÕʪ›¦J<•/4 !:›ärýK9¸¶s>ÙyÞ	ÍÌ‚¥)@™ãRœ{Ìöá³#ðP¥Éxw˜Ò>|¢t~#³ÎÉÓÅ×<+4C£‰–¡¹›ãµÚˆµý»É³]øœgà[ŸfmA½|ky®’©Í?@íZ-:lA«w§ë’€þ½ÓVÀoµÕ‡ð›CÊÆV‚4ÿ
-Ôóú%aLHîŒæð¾5‡
-Á]øLð |(A[vY,R/Iñš –Ê.èÒEÁŸ#{kîþC“°¦}ÐeH®¡hpÁ‹£ª¨Ý’p¦`[œcd,¼ÄsÑ6v£$öáSIoKÂeÊ‘4Ú#’Éê¨KO¹£xâ˜f]P¤+$wöSŠâ™&]P(Y“6à/oDònT*©6î£.ƒ
-’3B£± vü{˜‘ålžcÁÌèfäSüÙø)±*™ÝG
-œ"•/c‚"™X=@
-¼"Ê֍)Šdâõ 5òJÊvL±Jf^÷Q#¯Î)O)VÉÌë>jà•0À°cŠ"™x=@
-¼R=á3¤(’‰×ÔÈ+asJ±Jf^÷Q#/r¡ÞL)VÉÌë>jà•Ñ¹†1E‘L¼ ^ÙÓ´jL°
-&Vw1—ÁÍF,•Ð3Ôx›X$Ö&ä¯8}ã0‘º%Á––L ±UDÉš,=•·ÔÖ a¿Êšzð̈=ðwpÇKT9µã *(yÞ-IL˜PÑ >pßÉ|’òFAC¯/nñ†Ç<UÐÒ¬‘'
-	»]â,Vî[üD³Mì#ˆ~	Rš¾aQ°2àu0ŠÆY©.©5¶¬±¿¡ZúÛ’•à`—HoQ aM¢[暨Åf˜_¨O)š€„ºYúsc\#¯xR£¾åãwÍ’½®ª¤«†ºü°NR×{³Nº•R9pW”¡¦ïø8át⢧3œ-±Î+*è­Kt‘¡¶L”É’jŽÙŒ3[WÇ«ä"h©Jô5‹¡‘9µØ†bÛÐÕKE"é+¢1Fôý×Ñ$Oý2™kWxs¼©t±ð‘#MTƒQ"iœECKƒU8¨‡½/ÕàI685
-	†)¢ñ
-+;žÛ6nIÇqÊl]•Hù^»õËVsÝãʉŨ•Ó>ª›Â`ÚµiáVšó"½=VÇ"áÞw„nœŒÀ>uÉuˆ[°5Çõ™ÿÖ~|M™Ï`fôÞe‡töŽ7–«¦]Ð…dd:\ªÈÞªÄðVÔuÐ#¨Ë¹¡Z•€âA©J•á¨¡ëJt%»F%žД*v];(ÒÅC£“çñ`âkâu˜	U%P2>‚BÎGÞpóT$«‡Fr~…)x´Ô{¤Óö8 ´P·ù@oæÓUzQ_ÚßÚ%ìƒ.Aö\<ÍFÿÞ÷µÉƒZç˜ò[`³- n‡+P.9r)J˜ÏD-4ôŒfÜ/zµýì¬]i3¦®…“6ôÿ¤>Ö†G7%…\7‘VgkÞG%;I³DL7ymÌ°­¬ «¥r®õ³cŒØ×±øÛ;iúöNQÛè0Ʊ6.ðØ°gB“8ƒ­,›Òªƒ†oîó?©’†]1±˜	eî`b¬Çé(>/vt
-1ƒ›$5ÖºhßGg-[tž8§R'ÎwE7Á×Þƒê‰eß-˜ë&V-Û÷ÑTY	.Sïj®‹Äáo’÷QðOi1ØÜþ-/S«EŸƒ¥3µ
-4\ã]\#3¦MZ©½˜IBßp[ÊpCðØÂ'7Ñœã$ÈË–=N—¨^o¨ŒhXÐÓöXUDJÂïºaÌu£UÜg°‡k at v…?
-ÁÑqÙ6FäHÃL©K¨#
-¡Åâ~s…z»Áó²É“[éçZ‹«ß©UÖó_ìPóòÔÍò§~ÁѼI€AQtݨáZýµT;õ8…&r!7oC9˜POÐô²êcáæzÂk=Õ‚¯¥[M2 nÁ ÈÈù-ÜÃuI=ûPУ iØ‚¹›*”ð+bÔÓ
-ŠÈ8껆æ4(F—p??à0' ¡óimow^"iAS~Bû¸ioЍv5‰ØE?¬qöµ{°CÒàùã²®@ÃjV—ðÏ[87õͪF@`>­ùó,ùélª%•ê'LƒUM"¤Ð¹”4u¼CD²©v
-3Ö$»†nf5	' Ñ…uK ÙÕ((B)æÓÚ‚ZVÏgU--mm˜œÍþÂó÷’½±Ò +Í¹†G!ˆæ
-DC×4FÃ-epØÍC5<ºŒ†PÞªa²£–Ù³Ú6{ÄnJÔ:m¼j6ïn´ÿßÐH¸×%BM(sM¡Û¦ÑX‹‚ÙŠÙ/>—e³w충D©i#VêÚÌ»mê¡^B5h¸×$ÂM5(wM£[§,By«†ÉŽÙG>›m³§¬K!£7Á‚¥¼‰ã¯\zKwN¹ª/D󢡇cýdgd^Üëþˆ—>ÅáÑ›4„²T
-“³§|6ÛfOÙ­k±NÛ²Z§­½['î Ä[4VãºD¨©CæÍc5ÛšODã(
-f+fOù\–Íž²ÛÖ$BMÛ±R×–ÞmS_ õª¡…›qM"Üš?îÍc5ëšOS„²T
-“³§|6ÛfOYyFobùl`oÇ&cQ¥·ô½‰ š¯
-=låKÂ.©ÂMƒ
-Ø}îiÔðèMBYª†ÉŽÙS>›m³§ìÖ5‰X§mY­ÓÖÞ­wÐ â-š
-«q]"ÔD2׺mÊA£(˜­˜=åsY6{Ên[“5mÇJ][z·M}"ÔW¨†nÆ5‰pS
-Ê]ÓèÖ)‹†P–ªa²cö”Ïf/KRñ/w?×ÿøòÇÏeðrò6H/YûÅÞ,áÑ1Î-	_/i¼²ã\‘e|G”jèášÛ.²¹ÀՐ˜÷4jøõ¥³P„²¬Öv¼òFø³Úö-o SØ†¯ÛMl+|ª±Ûæ—„Cé"èlRrGÚn—(3Õ Ì5f[c!%)
-f#¸ÔžÒ®oløžjÍ(m_w|¬àì’Hè߇€O»*†«ï|fܲ²ðeƇ³ÏòEοbô„“Ǹ ­)úF!ÖÝ‘`(òyÁÇf’ÌzêÆÌ×ÒÍ-e¥UÊÊQ»¦Ìä#uM×6½-§Ï_Q÷·ã¶UÈz€Yª°ÁÍ%µ¿\~ñLCd›©r€ïVGÜÏ‘m£ÈÎsáIÀ@Z%)ÈNë’2O¾!ÑsLä i„RnJ4VO}+ÑÔ§Öð“gËË
-ÎEãÊ"¿j³ò­ïÐа} zƒÊê0ïÇ·khœa[r”s‰ªë@àÚ%®7ä|â+ffÁ¨…›Æ×Q̹ÒÝ©ž*t“+6~TµMmÃèóWÔ=·èd®¢Rp²i¯EïÃ÷Z´>Ö*EFSº2“V	åz=)‘µ{K¢g }4õã°’«¥¾•hêc‹þé³Eqkê¡õ¡­ú¹=ïB†Öpª˜UsÎ?¦9[Ï$ôê<u¾±Iš-ÁFÜo5If=|îò«éæ¼\é‚öÈŸ!Úqb+Žº¶ém8}þŠº§F<Š5mÔà{:à˜çâ†f\Ng7rVV倣-1ß”h“Më– Åi)o%·ôO›iížÉÇfŒòqrÝóížwAS÷Œ{¯yšÀ£Î
-úX÷L£[z܍.ìBDr$‹ÃÈ„{MWO©uɬ§öÐ_K·tÒ“.îHM=¹ÖµÓ)›Q×6½
-§Ï_Q÷º“^øl´£&ŽtÒ{ðôÂÇz…"ŽÉ—ZÑ:i•ØÌ_ÚÃPŸoI0“•NÎò%7$-–¦¾•´ÔWôOœíÐIór nW{à2uÒ÷!7:iër]þþÑmZû?] èý¨J®ƒÄDÌï{?:Jf=cýþºÇ>zÔ^ûÑQ{íG]Ûô6œ>EÝ7ûh‹K¡íjnò½>úüh­[Ï7p¥@.C?wK’]=´.Ý
-A‹£)o%-é[}ôO“é·»õøŒ•Tw2¸?
-w®Þú¨§¯p ~9ºñ͇/u
-Æà/ߝ×$Ù'L[|)¼c2u¨ÎH_9£á;_~¼â>D)9ò;·—äªÎaÑ”¼ ȯ–Èœ*溉5ò^:y‘q{Z$ò9Ê‚pŽìïÙœÀ1&.2][ÅâAÃ;iºó‘OXÈßàÆÛBßVãKýîN%ž¢ð­óÅò|³…qÝ]Ž÷
-ü}‡Åòþ¹ÉÅàajÛK½x—´ð¸YÅĺfµŽ2ò»(ä.ÎÕ§$È*>©@üWXÜ×
-HûØ0×M,.áwÒ´ïi²§Ê`¨L•
-F7·<ÍÐåèFu+9Ÿ#y_¸IðY$u|f1¾VäOc$¸1	ß©kï µßó»,üa—)Þbz[u9rP¤=UŸŽ/‚=溉5Wº÷Ò‰.¸¨
-]9Z?ßM‰=•âËÐú;†Zßl³ŽÅϼ“¦;žÅ,‘o¡fƒ½[+«—.AiaG—šZ at r-œh‚kò½Ò~ÅW48¶#ó5‡¤7NÕfj¤z†UŒuÿÓê¸t©/Äýc{®)T¨È)‡ú½1vØ‹7
-rÝDâÂ}E\¶K᱌Å'EõÃ@‘p~×[L±oKRԏ&!¸¥ÏPÆYþœN$=^¹ÜP£Iõ34“ óàòÍP	ý0&4Ô›H<‚"]X@OßÅÝ>ÞAÁ'½raîÔm]’Ëâ)ïéZ£p‘¯ãçÇUïv˜í|ngôrêÇ4ŸzØ¿%î,ŽjtÁ™/Ïï r^|å¿A{”Žö ŠtQ¡ðµúR
-(ÊCk§?‚¢:½wØSÂüßÉ6ïÔîb°ßŠ“c©cšÀÔoªëÆé.Œh@Pš€ˆ“'×óœ
-FNû K?4
-d‚P"» h¢FåË’+F4í‚0-'wƒL/àÉ/ϧíƒö®£ùü)àˆXÆó~&¾•QÏÐx[á!xÂó	Ɲp&ÑÙÜ/ðÁ )¸õÄî |¢pÞ†5Š¦n©ÔëÜ.MAኹ}ui²’=?ÝñÖ¹ˆ„ÓÔ^Ñe‹çyò	ύ8^éÁ³#ž/‡„†U€9xÞsPŠœ¨ñ 	y“Ù
-©ä:Ô£G¨íMÂûôæ„u]‹e¬!`±Nþ®ÌÜGVAß¹Fؘ…o œâbyí¯}øDì|}°¡Þ ÛÚ‡)íÂgJà/ÔÕj¯•ÊãVêlÚß
-Á]øLð ¼UY­àK[‰v¨•A¨±@û6×’Ô¸äƒ<aû{§ž<€ßª'Ꮿ®%ªò	3©øÊ,¦V¾k?²ŸüÈx/_/¶Í_pX‘È¡öw~ݵû‚œ#ïaE3ßµr>Yy>L£¹ÜîUßO•RT	wû Þ‹Fš)¾–‡’4zSÉØs=B]ºŒr9ó­*-žHjϵxQŽ†úÊŒÆÉÄëªó
-x‘‹Ë4žJF^PW ¿ÁŒ)ªdäõ5ä¾™àá|³G$S~=@]z+i¥­žg¬GP—ÖJžÆä·/]P]—ÖëŽRÉÔ. °¨Àos¨Ö‚]GP{#£`Câç“ñ<Žiæ+‰†Ùx†lÕÔ÷ÑcK?‚pr4àÍ4VÂûn®c6íï&ý=ôœþ>ºolâ¡9bG¾Ä×+Ú4ºJxq ՍŽ¯­Ñx*©›•û¨K—µÊ×â
-Uôj¿*Ô¸å[ÍK9ãu Ëœ—[Ua}«(¡‡=æZobÀkƒ¼¶±2ײջڎ– hÒ‡GxÙ™h,)·¿k÷á“‘Gàw†È!p­<Ìl>1;_‘C¨íõ0¥]øLé üñp1„úºM2¼®íàG±Wußz¦·*l­Ý8miSâ–\3\%c{„Ú5Ytà °]Ò‰Û@rõ¯Û<.r ~«•>„?;ÇMšŸãtXEÀx6Ü-”}øD𼋠SÄ#&ìq›™qMRïÓÜG]º,,ü\&ŸÏà›;URW™öQ—žbGáã%κ öK#ðÁÅëîÆz.‹}ô¦(ðFV=*¶ˆ`4ø>æÒ0‰/’ŸôìaЫz^ÛîqG£ž]éÁái|eë[¥èwßþ£Öt ué2"Ï®ñDR½È>jàù¥é1E‘L¼ ^Ù×"[´*˜XÝÅtNa©/óöÔT2rz„êœðNßµÙ¢UÁÈé>fà$ë¯Cj"™8=@흃2xE%b9¥º‡dÂÂ'r
-î¤æõu*=ø°Æmø¤
-0™qõ½<A|ÂiŒZmL^">%õÞÍ!’Jº^L¬0þêIWg×è]7„ç-ŸÀ>‡Š^xÀ¹1	#죹¥ŒF	eCé‘äñÎ	õvƒåe!7RŽêŒ@
-
-9Lñ8·„ÆÑ ˜àc=@bðt„Í“ÄòåëºÑSŸÿüZº§ë,M ®ix
-¡ÝªKðˆø”ðu4OWYÒ¯ãùB=\’÷lEâ©è±5†ÏÕ<²–Uõiðl€v jÅ¿%àE`Ï™&m-:ˆc\ôKðõ¥è ¡ÜL&ÌwY>¥Ü¬qJe˜H±zb¾ó®Œ–Õãq"`+ºkð`›J”›hhÜ%Á:aÑÊ[5Ìv¼rÕVÛ¸ä¢Y0^¬S‰r‹Kž¬‹äzgë°\h'„¬Óp·®I„›jPîšF·NY4„òV
-³\rOk[msÒqR®¾Ý$Ž§“­-Ót›ÜÚØ%88“¨Î¢Å—`M ;—Î4CîÎÄ•³Yº³’ààL:@6“	µ¹=¡Y“S‰“ÜxK,/ÐÕK4
-D¹©å®itë”…"”¥j˜í˜|äÓÙ6ùÈn]“7mÁÊ]Ûx·N½@GØɺnÖ5‰pk„{K£Y×X(BYª†ÙŽÉG>m“´¯ÎÄƒ-ëÑXièITGaú@Kw'·!…îD¬;ç’›n	N¤„jS0QŸ|ã3˜3ùÄÁ ‘˜a\ÕøJ{,’ßÕ#˜aL5ؤå$±gÑ?X%Bùª†™ÿäŸÆ¦Év«Tb†q”rÖöÛ­ÒÞ¶Y¥ÿîV5‰pÒØÊYõw«”AC(_Õ0óŸ|ßÓØ4ù<YÀœ¸Ò¾Sp}(ÁÁQ4 at u-¾kÝYÉùî,@ßug!ÁÁYt€l
-&&ß÷LfM>p0L%JLZlã-mz°LZ}GT¯Ð4h¸Û¦å¦”»¦Ñ­SŠP–ªa¶cò…OgÛä»uM"Ü´+wmãÝ:õa'ëZ¸Y×$­iî-f]c¡e©f;&ßøt¶í_Sib.çtÂW5‰k©€ÆžŸDÄÈoïa|»XÌϽÃr¦†Á
-¯¶™ŽÀóCÅw
-–$PE¾Îj
-𰾜Ð$$Œ$„DCTŽ2¡–èóYÅ­0eËçÕ»a*Q^	o_åÎ;9¾ºt°‡ý€XgÍ*Ý-­¤U7K4„0T³	\\ÏhÖþÅ”üјç_Y>?Î4¼J,±g#¢YœểyD%§Ùz×JñЃo®
-H
-“x{¹K<óë±TÒ5‡¥$|ÔÜSKvУ¯ÎóÎÝsXTïØÁë„TÜ¡HŸ œJp|Ƹs%õÑbÅÛÀ+ÔÛ
-ž—M®ÜJo¼?'§ZíðüoRù\¿52x»^遝'œ~$|yªFºnÔԏù¿’êiûÎã°ªé:ßZ9àËËw=jY’X?öjé®õT¾–îi~.ØÆRPâ£ðMb²÷ø"Ù"œÎTŒ'U¨áWÄà×£„=»IC
-KC$4Q»ªÁá
-ÞÒӐ0Ǩ,:Bx7
-“ó>ÞóZYïÀÈqmH7ò/“u¨8³uÙàëÑŽHe¶Nƒu*Qn¢¡q—4ë„EGÄٺپïùim«w[XÇ'%ºu*QnX;°w¬˜2ZWLž¬Ãê†5H¸[×$ÂM5(wM£[§,:Bx«†Ù.¹§µ­¶9i‰²”4xãy±§µe¼J#äÖÚ%<x”Ž¨þ¢k°.`u	οE”º×Ò¦î×BX6
-“µÍ=«m“·¬S‰r“¶Ü¸Kk¬Ðâ/š
-wëT¢ÜÔ')wõZÝ:õk
-gëf;&oùt¶MÞ²[×$ÂMÛ²r×ÖÞ­SÐâ/š
-7ëšD¸5Ÿ$Ü›×jÖ5¿ÖÂR5ÌvLÞòél›¼åbêkô*ȯœäæP2MupVZ»†»Cì.
-Õ}Ô$‚S±PýÉB³›bº?‘ðàO:BX7
-£“«|.Ã&?ÙM«‚N¬6âN¼6óÑ´ê:¢:Š®AG7MJL<I#.žd0M<IGÄÙ´ÉŠÉI>—a“‡l¦‰ “æÛˆKLÐÕEt
-â2šiM ÄÔ‡(qõ!Ý4õ!!¬UÃdÅäŸË°Ñ7êÐàCð°3݇àÞYÛGB|HGTÒ5H¸¦Ñ®hÃ]CÁGš=	vÒŠ-údÄèŸÌ°Ñ7Ž¦©D‰‰iÄŇ¦‰iñ!Mƒ†»i*QnªA¨kÍ4å ¿ÇٴوÑ7>™a£oLk!¦>D‰«馩iñ!Mƒ†›iM"Üš†J½%¡¦5ú»PÔè³£o|2Ãö·ý>\¸v Ÿ“á/½šd9G|X_²=שËb°\R2×0Xá\¸ñÝ
-4\“`»«ïrN‰ïøN£–†„£’Aã(
-ÖVðÊå“ZÆ—„ó†~²M%•ZÀCI¸]R¨ó
-·%Æ…Ïš…1çÎ6å-7ÑиK͸Ƣ!„eÓ0ÛQËíYm;°èÐÑâ{®¼÷:ÝtÜaqÉã|~£ô¼ápI£á´Þêû’òµ‡\8/|{
-¡KÝ1$->ï˼«¾ö°ˆè€Fòˆ16¸;Žñ·iL>¿³¾ùň*Øàó|UÌÎíø໵ʇˆï”2|óHX$x¥!U3½©«\ÉB¹¿ðÞ.£ðå–¤ÇÒÔ·’–úT±òlùžYl…f*–„oãÍ'/ö1ãû‘xº~IXø‘ÚÝJù1hdŠ$'±bZ$×.Áu¾Ytä'oGɬ§>ùµt×ç#g]xâëo~Ôn0!ôƒ®mz[NŸ¿¢îÕó‘[§L½®{ïùÈ]øþó‘Y>À«Q$.á~ב´HðMm=t›žá¼¶9L†B
-÷‘ܐ´X-õ­¤¥>?ùSgË­Ú›¡G]7çû?ŽíØã)¦·u¾^:TûÃëÜ“´PsFÎG?»§1>·ÝwÕÇÙ4è€ÆhëEæUcð<Pêñ·iL>¿³¾©]ºH¥”óÑÞö |·]ùÝÐ9òÈW­¡deïo#i}•ÃծܒôXšöVr³¯ý©sEQÚˆA;ªŸ¡1˜¿Ù4÷1Cµ‘œ..-+èŠÂ?ÐBI?A¯É½½ØŒç°:k—ÈðŸ$1òó&£dÖÃg辚nÎÌ•.hÇ»TeÒŽw©Ê¨k›Þ†Ó篨{jÑT¶Ž?\ÅÍy¯£ÝGïµgêžë±6µ©®¿”U‚‹¼øZ8J7ñBÀF’qájŒk	p¬[ÉKSßJZêc‹þé³åjˆW1–zDzIwށ< [õRp•8µê… Ìï4jÕxÊ{	œî(§¬³>²"¹v	'åç(Væ¹á(™ôÔ§¾–nÎΕ.Òîhœ'å|h¨éÙ¦µáóù+é[³
-õÕÜC~¯9ïÃwÛ3ΡòÚO¥ˆ¢p¨Yi‘P/ÜY¼æ°•Èb,ÊÆ'¾úy-âhÚ[IK{jÍ?q®SQâÈs°¸)–š:ÞÜ¥°
-ü„7uú¸kv|Ý´‚ÞºÄðÛñ4ÏâçoÞ=Êxd¶ð%a~%–ûk•´t«‚5×NGÆñ€©(À£-oAK~}Q*iEÃÚŠ×Á2c<þñ6H0Ä香¥°OÒt5ÜMS‰2W
-=\Óè¶ÕÓÕ¾ÙfLÁa’ž†„»m*é,«†µ¯Óõ}ÏkeÝ“¼g–ôu®¯Á²½>®ŽÁ»©ÂÞ¶[\ž­’©Â‚õÝ«<®Ózn²¼½ÓOµ§„‹Èý|öý j|³³mªé‰²Ëãþbê6Ñh\q]ý0¼¯© X0¸h¼!KÝ{4)áví„×ñpï’-rÒð+%”ùj4•´„EÃHi¼6j¸aWê«ì*»ìZ~}Q
-!,UÃÚŽ×Á6chôÉÇ#šýôWµò7$Ý4	vËD ´5zKÝ0cðgj†>9i)H¸ÖtÕ°6â‰
-Cs­R»1Ͷ’½vI¶§­ÆÒÀ6áû¬0TPª±M0VOD¿_=•ÄÔVCD¤.“úYËÏ%†\ðJU¡øz­å.æòò—Suʟ׷Ó/?¾üì÷”c2XøHㆊÀCíD¤ðUèÁ¸ÓÇ·—ùæÏþë¿~üÏ[ü¹{ú`¦æôãú®-tá„KÆCӏ{.…_>ÇúÓ¾ùáŽgnè+§ž†"8&‰_?÷åÓß¿¹^+b¡ž”üð¾Á•_þô·>}Áï¸!1â(jàb×ù×–ŸQ
-d¶ÚÖ‘MÄó×x
-'óyIüúŸ~øûŸ¾ü×ÏOŸSÑô¼üÌÚª,â9-¢‚û•ìïžFFä-ó‰/¥u·µg =Ð(ýE’Î6-ž…-Õ®_ýéí›ï¾ÿùéßý›_üǯ?Zf.ŽáhðOÄ~1y|•„xÿëWÿvº|úò?}ùy-,ÔâÂä5"cþý—Ëoÿϯ?¶f;.}´†Š;ªæ–A£šKyÜ
-9*ùåÿüÕȯ_V/4e¼ýEC?Jí–Ì·Ö
-¬*XUÒY†^0áѵáÓß.Àâ,˜ûÁa`à¬þhðã¯?¾ünXØsÈRŒ2q)æ‰æü&Ã‘‰EWlùãÍaÑ_5‰KÃ]^]¤ÎÜá:_.8ÜPIÖhø«ŸÔlG ]c»
-K¯/]+ºhÀ;nˆ¡iHøõ¥±PDã-Vv¼Ž¶%kÿÞ$xž|iÓJY	BKWƒmŠPæªAÃ’Æ`[Â×®®ÛÆ_I–ž†„ÛÑx‹†•Ïm¯žß·NÊ÷:×Srĺ
-εæ±S=M¶Ù›;BÛ‡jèíe¬§©ã²iá\5õqišg`H’Ï‹>y¸ù±Ýz\bÞèÑÃP·uýÃ7–þƒ¼0eÀGƒdªÛËéÿõÓîžœ+ØóÁ½5~7#àÞñŒàǏžãw·¿3+bàMõSä©/CŠa¡«žï¯¯úÛ÷?|÷ý9MêîðbÌrŽ”í¥BþÇwßóýëwß\ÙY÷úIèÝB=«Ãû©‹8ô/úó§/?ü¿Óo¿ÿëß¾P¤O§ßP¯öçæì~÷òÿûá‹
+xœí]]¯$·}¿¿¢“‡é”¾Jª¼%o`lÒ³ûnÜÌÄÎöµ‰³Æþûå¡HJêêî*;÷ƒF`$wĦ¨Ã’H}S;LGw˜ðŸü}~yúÅŸòá/šŽ‹w%§ÃúŸþòäâ⏓;xçÂ1ÄCtq>ÆùࣛŽÁ>}xúhL1ùpœçÃQÒtœ¼Q\t鸔CŒe9ξKÇ|œÃᙤ¤ìâ19£½t”š+ÍeBá*5Í¡c¶ô3c©’Iƒå¨¿”c
+ïS9ú¤€G¦—ŽB…‡å 
+¨Þ—߁KñJ#ÀP)ª€JméZ.¤p­ôŸº}ÅKý΀îsöóáÉø§ßîÊxZÕäË
+ÿ¹«Ê{\§W©ðÓ«TøééRò˪vÏ]ß㺇¨—µ‡ëô*mìô*mì´aã!”ù8¥ƒ£ÿ‰ð,‘pže!¼¡šŒ2ùɹã‚*!Æã4%Çê¸%g’Þ¥‹AcŸã䏮Ñ^:JÍ5‡¹§bRçà©ÜÅÒÏŒ¥JÆçÊS8„‰þåÜÁ•ŽeVÀ#Ó‹QðÕsqU@õ¾üXŠW€JQTª¦µÜÁÆ×_ñR¿óÕo½æ:­ªíe¶—uëô*µ{z•Ú==]J~YU幫Þ{\÷õ²öp^¥A^¥AmôâŽüOï!“]øB¸*s!—–jÆdU—£[ÐU
+…¼•#Gk•×ÒÍ ÃD’w}5¥æòK.G—Mª_ÂL%­’©«ŽÓŒ<KæYB>&e\0½%ѐ„œëÁ½/¿Š²â…öòd …¢
+¨TMk¹ƒA¯¿â¥~ç«ßzÍuZUÛË
+ì ë×éUj÷ô*µ{zº”ü²ªÊsW½÷¸î!êeíá:½Jƒ:½Jƒ",üÇ=D†8D0eâÑ… J:úx at r&¯–9¢›žIéJ¢~?‘´…Æ4Ú=„»p9QÆì§c&mŠ#¯E9rò„ˆrh¡!—ÈÎi¡¡…'	iYÈé"y(ì‡D>‰3dêhƒ£^!MŽdJ	R^Žä²Ð»L?ÏôýS¦…|ØLÃï0Ó7$lnB䏄þàhôfj6Ch¢-³£Ï”a/R‚|~f	SzJDz ‡#¹@M*9}ŸLJòÒô%]˜
+Fa!íçðôTt9çrÈT$©L_š¾1)%˜©’Õ$´ 9DY¨]L…&á lÞÓ÷ñÞË!á«DL’hàÄ%ÀµÇ™28ý‚¤T¤º$°µÍG_«íçUý£9ûDb	ùÿjÿj­ãÔú¢¿=¹úoùóürøõ{šæøv?û{r³•ã@X£Êô¥ç4Þ¿<ýìwß|ÿáÓ7¾ÿùû¿>}ñþéÂŒ¹iš&Lu¨)åc!·?gjuùèSLÖ?Wž3©‹©
+Ur>æl”ó“+Ô"<4¥z™˜Â"–2ÊáÎáBÒË5IB!÷‹ŠäRÔç+ˆú	¸LæAJa(ì©1íÞÁ~j8É€á†Ð\è°¨•gߣt²vp]•5“•¹Ò}Ñ«²V\§ö%Ùç<|	¡œûöq‡«û^K—›²vp‘¬¹dXnWCJéeíàêtôä“r_`%Þäéôó4±wó
+AÛL]
+¶ï©”Ò&S§Û´”¾,$½®þÞéäý½*aƒ£«+ûvJ0§ÎK‘Ÿz¤”^›{\N“‡·¿!j›©«'ùz’!m°´ïÓ¡6Šz·»¸N»<õõ•ÆO+·{Cü®Ó.Ç¿¯{¸ªöºóùiÝÊE÷x­ä½$—hÀßÿc¢ÑSAïã1@!X¤qHš0‡À´Ìórw±m ¸ÍM3“cú1ÜžÆ'@b‚QË4Sþt˜'´Mk Ûì‚=ìÖw¡AZDMù™æb<\«ïà:5Z¦¡0¬Ë²UKÚäé¾ÏLã=—ûÒ„2`ºÃÕÉJi9¦¹PYw¸:ýb¢y½ýnòl¶NÍ@&ƒA±§¡|¢ù5!¹Æ›­ã6ûÕÖq½µŽÚšÃ”xàMÚd2¶˜Â*o3±HÕ±JŽ4RwXÅ !?MªX¡Pì稜Û샖{Ø YòhˆCV¸ À6¹\;¸;4ÏL®#†Ý€¶ÙD{د|©cŽ4uõƒ-4£àhžàóŽ4¹ŒöwõÅ6ÙÇO¶ƒ}íμ_0Ÿ}ÑO®„ÁÚo3mê,"üs§	èŒé£«uum¤wدé]ö« S.ÎW€4Ñ¥)tˆSÆ
+ù1JF«ßÀMöàö®R„ÛÓ`ËcºGÊg„Z)›L§FJ±nzîôg£°¤m¦SWœqѐ+˜ƒ¨\›5Ü‚mqÎQ°Ä2µ°+5±Í>ÔÄöuM„B_$÷úeÐúש•Ü¸xŠXFY;¸HVÊá‡Å/
+²vp¡f]Æ—ð	s‘o£ÊPJÕq›ëÔÑ`ü!4j¿ÅÓc¢/[†Â˜0"ºÅÓãYâÑÅ¡°JÝæê0ÍTCq(P(ª;\®uú…2àºÃÕãÊê¶/±RF\·¹z\KÂ<¢/±RF\·¹:\cß—(”×®W®g|º…2àºÃÕãÊ«Ì}‰•2âºÍÕã"ÝPb¥Œ¸nsu¸
+õ­y°0¡¸îpu¸J¤ùT_`%¨nòœ:7;cu
+óÒ%ñæ°P¼ÏµÎ]$¯çËU
+ö¯dÚŒù¿‘¨XW¤‡ ú–Öºƒ©Û˜òÍ9xJDCžˆùÖ˹ÿÂz œ¹ ¦¹òäºE.”9×±LLÜ5Ϥ}¢á9£¤©ç§0EwÌ‹¬Èšy@±CÙ(Áו ÉŸ:“/I*@ËW,.xaV®KhÆ…mj^J©ºoÅJ²ÓK(†[hZ‹hšÅ‰&h³)'êR- at RM-ýÙ×Ì
+<¨R_ñ›jIž/šd¨Š†ån›¤^üj›w¥b`W.G–•2ïì8àpâ¤'2‚_f¬)ÓK£Lè!S5LÔÉ„±#>™/X¥Ò4Ð^WŠ,.t6äH?l²©G°'§eH#(”Ãp‹„=ž{Ý"õÏ<f5JXx7ܤ†yï³r%Ýé&C.,-etºá¤Þ”šn‘$×ʐt§›rn‘p¡ÇcëÆ&åqgµ«©ßs£ •ùªnØl¦¼ü¥™ú{­TPŸ>O÷nK™¤ëÇÂü»P¸+ÞÁ…NTqØh)Î	\©jáþ[»õm.È*Øð½9F])dv5Dá-å*j“éD4R>Vh/•âx9kÖ}×é‰üRmRàâAªRˆ«è™ƒ=\"+ûK®Ìó¬á5Y\$‹‡JC‰sŽ˜ôô:îábYX9¹*%—‹÷páÛÏ
+½|U¡¤Äí¼~ûm.LÊgOJ>¬ÿ³?õD3ö-|¸*QÇ—ú7éAÜm¦ÓN&ˆ ží‡¶§\)üuC`Ì/‚]7^tpAi¿ðXq*3‘4‰šŽ>Ï®ß9zÁí­ŸP‰s®.“8Hþ\͏z§ˆ|Êr^eº8Zó:"Ùe:ìnxÁŒO„aÐûRU×}	cq2ˆ¿ÈçØ^CÌW7*ÚϧýŸ'xnh‹#3³Q‚ÃAL_Jª	W
+ÿVÿ“"i6ñُ™QáŽfžëAºyª‹‡Æœ|vù2×e¥¾ŽÌZ«µ›¤o½ÔIapä]3kµ:à>c9¯2Õz}A“ðêa맔€¿Y
+Üæ‚oʓöàú°¸B抑ª¯Ž¬Y6âX¬fQ°؉(äïÛPIu¶äøAt³;ή'Ê“º<¢r££"MZÙkŒs4|çbnÖlAn%ð‚—Ç@1°Õ"r i 5
+õ¢)Y.î3/¸^®à<­¾Éµòúã¬K¨·U-#†7TbÀÝšuÍÕÜâ„#yn `LÔrWr¸Y¿™ì¯†¾f¡™]ZLÄKW.Õ‘P«­Fqn®|)§ªðV²U©ê*mžë±Žq†“ҘǠ«;*PÒÏÈ1ñ·UŽ‚ÓŸ±Ihi.ƒr4Jæya“° ±wepšËPÊ¡(U ßÂ;N3	‚I?¬–lèKtuÕ´3ŠhG® uØq-½ÓƒÓž!ò…³&@Óª\£4 È­ÓÍ0‡a£<~PÍj­åzÁ©ÓÍ(-óüϐSÜ5Qœkß`3/³4–6ÝŒ"ÐL‚@·2L9¡ŠQZÔZ{LÍj­©bê6z’È·*›
+Ó°ŒAÕÊkº÷$Âa~B$Xº–Ñ{œ‚é=Iª{“VFM÷žÄ8·Jô¨õö¨º^²i§ÕNíXµSKoÚ‰+0ñ&@Ò¦\£4 Èµ„¦›bPC-F-F/ùXš^²é¦…&f¬ÈÕΛjê	”C=…
+ÐtÓÍ(M%(t-£)' ŒAQ«€A‹ÑK>–f£—¬$½'	¼PÒl8ð]õfå!(TõÂa~B$´ô,KǍRxÙ¯ù"^鼧{ObŠR%zŒ^òÑt½dÓÎ(¢Ú±j§–Þ´W`â)L€¦U¹Fhꌹy+ÓÍü™pF0j1zÉÇÒlô’M7£41cE®vÞTSO ê)T€¥M7£4óFÝü•)§M£
+´½äci6zɺüÓ{Ïg›
+»‚‰~³òšî=‰p˜Ÿ	-íåja£ðÙª&Á'¾‹ieÔtïIŒCQª„AÑK>šn£—lÚE´S;VíÔÒ›vâ
+ŒA<…	д*×(M(r-¡é¦”Ã0Š€Q‹ÑK>–f£—lºE ‰+rµó¦šzåPO¡,mºE ©…®e4å„1(F0h1zÉÇÒŒ—*©ê§Äû¡—ÿøô—§Èw6x5†ï‡¼t”ÄÙq
+ŽwPxPŒCCS–VO?,·ÒBŠÞ"	-]Ë`Õ…B*ãê¸IÈÈ[5ýüÔP(‡¢¬.õxæÍñGÕí+ÞT@ßØ+§Ñ
+WÝÝÜé¶ðÉǦ[œ2®wIgòu4­å6Š"S	Š\Ë0Ý…p(H0*Áµöz}µgÐáZ•#cFeã„{à`dǐå[»8ºÍ=ì³9ãàRZpÉ#EBX´„ÅA½nqzô)b'¦4s	¥œCu_mÁí?PF9u§æ­d³™\ÈB{òrϤ“šG?w²Öå­1}|CÙ_õ;}Ô#5r“Cûuò±dûËõ7ilì5ì›m¡:J0ˆì9§#"•t •’“l¾N¹ðbóŠl"ùAó´²×”¥…h–ð™cåFˆSçŽ+Øó­»kƽƒ©³é˜¨Í ¡¥:¶ûÑ&
+/¼•FŸ-SKEü	¡œeÒà‹QÍ”^›ÅIæ/y!
+ÂÉç4''Œ3½MÔº¸¤o({4çì95‘'œ¶Ìy›}ËœãçAfFœ©^FÐJ¡¯^ONäÀ×y¯Qô<`œ]½:v…b¹¬ô5¥#jýù£Eu&ïê™ö;½ÍÓt‘(thƒE—aÑÉ×#
+­ý¦ˆ. kˆJ0U’'7âü@¥ðÌ7’Ìr”ѳç=ÊN6oå^Ôª´K<ßJð`Ë)¢.Ë^[ÞÁ¾eË	Ç<ùÄ·ZG
+%ó}|ƒ¬mÁ	ç[æå*E-!XÔ5‚å±’×”kvüy#­Ý²ç«Ÿ¼¬8‹ÆË^y‹gè”
+›g|ùÇÛ0uë	wb´8î<'.Q(çŽ2…zŒ=òMÙ<PF9µ_~+ÙÒ3²¸÷tõøZ“Nó¡âzYëòV˜>¾¡ìËž¹êdiOϼž£gžød¯@Ä9ùe®'
+´R|áË÷PÃskL\cíÙ8ÆÞ5ŠåÒÒ×+ý¢gþÌÑv=3Ïþq¬wèuÓÐ3ßá¹Ò3ûPêZ÷Oî™uEÂúO%œÁÍ5œöŸ=e”Ò÷̯-¹ë™{ѵíe×´µ*íÏÇ·|µgöˆ
+íãÞžùûÞžYZ×A‚§î¿”®w»F)¡Þœ’îí
+ÁòhÉkŠ}­gþ<‘~µy›',˜R%!†­^»ÍÓ®*ì`?ícºrÝ#bMž&{9n¬QJÌü0²ðf‹+Ñ]$ w®5yãÎÇ«Èm“¥Ìü‚0&¥Jãej·”éÈqØã2ó¥Så9¯r7@^K&
+â§QÎB¿ÖUß2g‡cuç4žy’™ÙE.*¼’¤·{ÒDÞAnêr8lM\<_OVJ¤,ðen©WB,hw%ݪïל&Ïä®,€,{B¬ÝX¥,X¢2žÅÍu‰ê2×Xϯ%“ëy	ß@°>Ž@Z$œ½‚—­÷¼â’¼×xΫ\\ϯ$iÛÛšþ{¹TC¸-pÍÛì`:ícºÒè–R8’°[à›Ð6Œ‚;‘Ôù¹ÉÅÚœg…¦öž³¥o´¸WÚüNßërKô˜ØVY‘_‘ ëc¿Ž+ÁQ¤<çU®±Ý½–LÔð2Q†ÉUÀ¡h°‚ ôÍ4²«¸”š‹	x%I7ü‹›fBf3Õ«Bؼ÷læ•‚ÚJ	øñækéLS[WnÕöëvÙ¸“)îÄr¸6óT+ at XÌ9\dº¬åאÈuLÝbZ at tŽ4¤
+á‡rIõÎ1¶ÔxYá9¯rq¿’$®ãiáqÇÍ¢zCP(üÝ‹cu¨'ŸóUJžõaÀ4¡û}=îÙ”ÒòÙ(æ
+…Œ'×ûhÐ&Ãjbì"„#ze<œD}‹Xâ.’•«c®ˆ
+¯©8Üé-ò´Æ®ë²ä+‹Ç¼%ë’Q}¿JF\5¢qà ô§Þ`!yQCÜ‚‚Þæ9!ffâèùÆC>숲`•Ea“‡äd|6g5€:¡ï‡Âº¯½‡‹ÚS
+ËÅl$a†«²Fà­Ù-ì¯âˆXn<FpõJuÝ(ÝdžTÇ`Êd„NÒ&ÂÉ-Ì¥+N	=¦m¦SA“dšP‡"›LDæ—žI(NšÀ&LËÉÑ`ÓjExì@â¸í`Ú
+Lð)ãu¼Í‚÷þ(w/Bàçxܳƒ©_¸‹=ãá—8|ȯahH.]Lïv°ö°ÛÀF¹©WZj|7‡È)¨\¡àkïá:mAd6KÃ"öJ;¸¶ª®Ð×YhŽ‡F¯ôàÁ‘ÈÑ"³_Mw°÷_p{û‚RårqOã"‚”rîÚÑ=®uTa‡­yâpÄÏÿÑ8vqõï:*ë6w¯åî!…›8$áËk7pm³Àö°_FvÔ`'{ï§Úf!í`¿aW›½6ªˆh1ÔSñßxà&ûp»5Ymà\™Í¹6% Åî`ÚÖ¹Ö¤æ@”ò„ö÷F;¹Ã~­Üe¿Ë–H4ÕóÌ¥f~¿2ñðF«ÙÁ>ø‘=ì­Rbt[xí&¼×SSg™ßúuSKì	N4Ã
+$cÆ“Gˆ3Tnj¹Í>h¹‡½›HsZæ«>¦*µ¨î"¶™Z/:ã:®c&ªy¼	¡ï·n󜉾pá˜*–K(µ×Úæê0Ñ×LõqÍ'”Õ®†+á.^0Ó|JéqÝãj¸RA3ß•¨”×=®î{ábDrý—Êð½îpš…XM«×é›Ã®“YHÇ…×1i¢3ÈÚÁÕdi›n\Jlò–øyΎˬ·“µ‡kkT”|Â_{IC²„'Ìøµ´<ãpàÊÎw°÷v¾‹=ÁÇÁÐP	Ï’M8¸ïìï
+Á÷`›»íiâ…9,EN)Ö mš])<‹ØÁÕ”Â㌁݈æSJÝ©Üæ:5šµ?Ë×µÒ=\Û­¡æ@Œ;5ÓrÄ#A4–!rºUwدUÆ]ön‡¹¶9%?ñÛàj¯ÙêÝbZ– œ;àUï°½pœ¦\ì稜Û샖{Øo’S↹Ù6û€lûå 9áu(WöCÚd!í`¿?`L©¾t“q6‚e$wº¤Û 7ÙG€;Ø»6[[8NYzŽH­ß\)½ÕßãÚÔZdà„°'€ §þ½a©wدYê]öûÈتù5΀¥Âó·«e›} ¸‡½U‹pçyáðæXùÁšu0J©¹Íuj´4á!’zPƒ£w*¥.5msZ‰÷‰§y”µƒk»6&©9h”øéO|.çVïolsu±Í½ª
+<™ä˜EUF)½Ê÷¸NVpÏ•9Æü(k›}läîŽK\Ó kÉÂj̧3¿•‹Ž8s¸¥°¨m¦S£Ñ¨ÑqaÍ&„êN6™¦™ßœî‹JéS‡©ÄúX¤æªéÑ-Ó¦@”Ò¥”Ï=¦†Ïali¥)¡Gt‡©a’uØ®8¡ô˜î0mŠrx]eÆVrÎõXƒKÊuPÍËì.Òt–&¯4P®U¨ÌkB}‡»NgÔöâÊ4ãÊTOñ|”¿Ë¥”&“¬eéË®þÎðWˆÇà– Ÿ“C3Ç&/ö<"ϧ6Ó°^Ñ0õúËb¹ä9ρëå
+ÎÓå7¹V\wxÏa$²Ì4Z^b=»ïRŠU¼]uosôÏ)4×y%§¾úV²‡Ø–._ÏPT/]EÔó<}e5JâÍ]Árª
+o%{ˆmI?ÏÝ/ÔÙå™×;”©þçxàW>±Î€™>Šš~FŽ	‡u‡çMÖ&AÒRr(ÅÍäLÐÓ¨Ôʐôó“¡h‚Û$zŒ±-WK¶sœÞ§qQ¯P[v£võ
+ƒ^»9Ú‘ï´“t§R›H0ìRF§ 0Å­F=žÙU7®¹ÙMÚ)E±ÍSÁÃ>O¼òÓi‡ÅD?pøc$ÔtÓÎ(‚M%(v-£i§(ŒCq«„Q®¹‡Õ­ÚœX"NÑM®÷(4°ÇÓl9à»Ù:§:o"¿Š§°¼š®Ò;_r=gù—£›zù5Ýù’Æ!øL Aµ¶ÇÓjð^JQlb¿‚\ìÛôû×_Ó¨—¦›^JQTš_Q«ü¦—–¯ŠO%Œ¾ñ´¼bÓË(‚Mm¶"W›V½Ôæõ×êZ^I›^FT–_P›|ÓËÊWŧF
+ø@Z
+žÐO¼úÝù‡ Ásónæe'³jIw~Ã8Ä/˜IKçà0H©yŽkðZ†¤;ÏÑ8·IôüáÃé6xÅN;¡6±_Ã.Þi'> q¤Q;IwÚ)E±‰Ã.etÚ	
+ãPÜ*aÔcð§Ûà!›vJQljËŠ]­½i§þ qTÑ$ÔtÓÎ(‚M%(v-£i§(ŒCq«„QÁO>œnƒ·”ŸÎ£ @HÍ£àŽCðÍÚ%Ýyãa4]Ëè<Ê„G¡bó(P!tEҝGi‚Ò$zÞòát¼e§R›Ø²akï´Ð8Ò¨¦›vJQl*A±kM;E¡ŠR%ŒzÞòát¼eÓÎ(‚MmY±«µ7íÔ4Žê/šI›vFl&A°[¦¡PE©F=oùpºmǵtsYŽù€;9¹.ӁƯó´Lß<FæákuÀËI`rüÔ®þŽŒ–زkZä£ù	%%%`ð ‡ïJ4ŠÆQš€AƒZ¡§Û`.žO¼7½”¢È2ÐZxè´)†ƒÇ±4Å/>ËE¡— 4·bVñM+-ß8ŸI5àÊz@­¶£Xòu³ˆDÂákÌ…Z™ÏyœûàjûÈdX£ª1¥àý5¾~ó!w·S’£ÁïG7Jô¸h×r)¥INÓ’‰§•ž¦‚
+UCx^awüC£¡Ê„‡~kŠiáÇ(r‡©§Ô׏5ï_p½\ÁyZ}•kåõÑwJNÎãð‚ß38/ŠÛOxï»êŽmþ¹' Ϊ³<ç•”àm$~Ç]ž¡Jx±JÀµï–®¢zÊ\oŠi±R*ú7<lõѯbJ`)ó­Fñß	¸Ëì‘Î|ÛYåiú9";˜ÆáqI·“PÓRç
+M“Ÿ™¨âô¦V†¤9GEÑ8·Iô·úWËC£Ì¼9ßi'ÃF~Å÷ØÑl–A»âFíÈe„^‚¤;픢ØD‚a—2:íEãÜ&aЃƒB?¬n5*†Ú)E±aå ×+£v‹+ƒvXßèµÓtÓÎ(‚M%(v-£i§(G´»Ðƒkîau«6'–(‹IGq‘—zÌ–ñ°è⛵Kºó(£ú‹&AÒº„Õ(õà|óIXNŠ×ªéΣ4Ai=ªÍ=ªnƒ·ì´SŠb[6ìbívâŒCü…IÐtÓN)ŠM}’bW¯Õ´S¿f‚Ò$zÞòát¼eÓÎ(‚MmY±«µ7íÔ‡ø“ iÓÎ(‚Í|’`7¯eÚ™_3Ž0hw¡Çà-N·Á[N8“<w¥,…þó(…æ88í­Ö®éæQ:ö„ê?¤ŒÎ£à m‰Í£Lx‘/7"éΣ4Ám=oùpº
+Þ²Ó®R¶jË
+{µö^»êGõM‚øN;¥(6ñ(†]<J§x”Æ!¸M Çà-N·Á[6í„bØÄ–
+»X{§øƒÆQýE“ þ£igÁ¦E±«GiÚ©GiaÐîBÁ[>œn½·ÔŠΣັÏÍ£ |­oc#Mw¥qTÒ$Hº–Ñ<
+½åÊ!Ü÷lEp²ù“ö»@´ìƒ½«|0Åz?Ù«¦&¾Ä€‹/éT_bâKL‚¦›jJQl*A k¦šbÐߢe”èäƒ)Ö{ÈN5£0õ"
+\½HSM½ˆqˆ1	š6ÕŒ"ØLB…nE¨j†AƒjJôîñÁÛÞüK¸ó0#ÄÃ=|‹Ð(Çè‹KA¬\‰'„ƒY.Rk p’néG•lù5]K`µ+/”zpˆ„88’!Id¨„`%ÿ¥¼’ùzq¨qŽ‰Í”R‘%<±„(•‚œãå.s§[šê[hcü6ë’×ØD‚a—2L9Ca‚Ò$ŒzÔZ{TÝvlêdÝñZq¶jãQ»mî~¿%à1Ìvåé'¼µ豕÷Rûà=ÒJ97JÀ%q¨°ÍêGÊ ‡7mÞL¶=\ÒÉ‚tò—ó<HGî¹—µ.o…éãÊßÚÀAª†¸W·Ÿûf[Œ‰ýPˆPÌqè´Pð<D}‡w]}¹F™¨f&ÞDŒt…ÐòhÙkŠ•=XÂgŽ•#Ûb•fHK‚¿úzÎ6OÿL%^Ÿ®W—Ÿö¿6O"ÅÉ‹¯4åRʹQ8„0ö ¼j£˜úJ剮TŽ¢ð$Vïb/Üaö;Yëâ֐>¾¡ì‹G*glŒ–äö<j·É½ýDe‘«} ê#dÄoí!wwåÑ™ýÖŠ GÏPA8›P®Q4“½"XÉã•Ÿ3R¶äè–±×½4ãû½
+G<cðÏôÊ!rä•®ÿ	óäxyÄz£˜C
+Ïaú2Êa#~3Ùü/dA:‡5¤§Èî&k]Þ
+ÓÇ7”=Xq˜©Vá¯ûnÕwÝŒw°oÚqÂ|¢ï醥Ç,돨عîy¬(Ö­Ä͈W-–¼¦\í“?o¤¨F?“µ¡ŸžùíÙk–¼ÉÒÙ²Ÿ?ÍC턺,÷l™$àE	-íåɼÔå•pn™Težù	–ž2Háãyo#˜?â(	¢ñ:s/e-½œuY—p>¾‘ÜÁz©6C½„YêK÷­wû–õúêÁ3›Ûú\×q:ÌJAX1àÌk
++JAØú5ò”8àãŠÒåÒÒ×+½·àÏ-7@¼Ô1ÕC×xíšo±ôV<-x]†¬xâƒ-?ÁŠñ8b+&œ{ä‡ |ähœJ97
+žIåh¯”«ð¬±§rê£o%›?å…,’hü°3t>‹d‚Ö…­ }|+Á£5ûTCô 
+ÙüƐzû¦5ãd+†•¸iõ …BÍ{áîÊûyª<.)²¤‹Ú‰3Ž¡Ë£e¯)Vö`ËŸ9Ö¡*q„«å…<mÆû¿4Hö‰Ÿ£å#õ¥ÙŽ¹8czi7qÀ5š‚qhà\ê^e y²£‰²¦Ÿ	‡ç@J±‚EÂ%ç
+‡Ð‚oW	x@!¾´M??)
+¥J‘p©Çs§›sˆÖ:ݜà&šnnZØ/i¹šnº)E‘«„–®e4Ýê‰íhº9·à˜J+CÒM7¥4”UÂ¥ÏC,ÁÇÕ²îmÞÒNkú<¶Xœš¤’"°ÐS‡EÓU_ô(ah°xÜðfƒUçaQ8“ƒðK;+ŸóTï”uçé7yúgDB¼A-u’M5M»pTåY»Ï®×U¦™CÏÙ:w˜]θ2’ñdÞ;™
+_’Óô3“F±‚EBe<4Ä{F|•€é€‡3¤M??)
+ã”*áRçN7çhä9-nûn|!¥©&ɦ™¶f·´ÐsOƒfS̹„ÖÕJtSÌ8t•p©Ä+K½­šÖìyh¡‰K*h‘s­rR•5Bß<‘ývóTƒ¦MOÚPGȯ7¦²à±¬…òkdÍMžÓÓßž\•)ž_¿~ÿô‹?‘1ËHá=
+*^Œ' GfO.Þ¿<ýìËï¾ûûÏßÿõÉ/ñ¸Úw~©Óð÷n?¾K:1òcèþG
+š+]sIüôç/¿ÿ’ó9š@ÓÐë]¤aúyüøñëO~øò|®õ¡äöÞq Ùè˜ãÓ·ÿøþÃ'üŽ 3âNÑ0ñeÇ_ßy<éä0À†ÝefGÓÝ9âYžÂ—­ðë>|ÿ÷Ÿþç—‡«Y4ú<N¿ð¾
+›ñ´AA<CúßUþhü4*:W7\—^ÀÁÑ+u¨‘|œpšÀã©Zšy"óo¾}ùòëo~yøý¿ýÕ¾xï5›Kx¥³½Ã“@36Kô©æûÏßüÛáôáÓÿ~øôËZW4 EÜæw5cÕã÷¿:~÷ß_¼#æúÝuÒ;ªî쨙×êî¥ÐT*",å å×ÿñ›ßºw¿®2Þ‹*x‰Œ~!^•fÃa¼
+¸h¥ï>ZÄ5Lê
+¥²?|ÿÕ^ÜëÂÅ®wƒ‚àõG‡¿xÿôÇn	/࣢§B\ÎÍø)ˆ€c“®çò]ÐÁòS‚J	yÆ°—×3҉‘iÉg,ò Æêõz i)âù©Q Ä|0	xTŽôÖ"$ùüd”ÁP‹€-ž{Ͳ—ИFÁÃôäJMêŒç’ƒ+ÉN3ePÜ*@ÓRD§Y曳M3¾p¹X’ì4SC-.´xdÍxåü¶nR·ç±…bî$«ÝÜ ³Zhö¦mij* JßBAC—åñZ%âê[×4›*à!J9Nòfòˏí°Ð×ÒXÓEŒ¢ÑaÿüåwÒuFçhhRõi:ü×ß?|âŽ)„{k0ãÖ~w=Ã;<$:; Ä[D̦Ža„誇"HýØ/4Ñ«>ïWÏÏßþã›ï¿þæ/\(uu˜Z`‘9$éEþýëo¾üæùë/Ï쨿~þ øŽaÂçÁ®µóúÏOß~÷áÓ÷ÿwøÝ7ÿÇ'Êóáð[êо3/÷ǧÿ€8V
 endstream
 endobj
-3635 0 obj
+3624 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110926)
-/ModDate (D:20080610110926)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090501-05'00')
+/ModDate (D:20080528090501-05'00')
 >>
 endobj
-3636 0 obj
+3625 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-3637 0 obj
+3627 0 obj
 <<
-/BaseFont /WWWUNR#2BAlbanyAMT
-/FontDescriptor 3639 0 R
 /Type /Font
 /FirstChar 32
 /LastChar 121
-/Widths [ 600 0 0 0 0 0 0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 600 600 600 0 600 0 0 0 0 0 0 600 600 600 600 600 600 600 0 600 0 0 600 600 600 0 600 0 0 600 600 600 600 0 0 0 0 0 0 0 0 0 0 600 0 600 600 600 600 600 600 600 0 600 600 600 600 600 600 0 600 600 600 600 600 600 0 600]
-/Encoding 3640 0 R
+/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 584 278 278 556 556 556 556 556 556 556 556 556 0 278 0 0 0 0 0 0 667 667 722 722 667 611 778 0 278 0 0 556 833 722 0 667 0 0 667 611 722 667 0 0 0 0 0 0 0 0 0 0 556 0 500 556 556 278 556 556 222 0 500 222 833 556 556 556 0 333 500 278 556 500 722 0 500]
 /Subtype /Type1
+/FontDescriptor 2063 0 R
+/BaseFont 2067 0 R
+/Encoding 3626 0 R
 >>
 endobj
-3638 0 obj
+3628 0 obj
 10409
 endobj
-3639 0 obj
-<<
-/Type /FontDescriptor
-/FontName /WWWUNR#2BAlbanyAMT
-/FontBBox [ 0 -186 593 667]
-/Flags 5
-/Ascent 667
-/CapHeight 667
-/Descent -186
-/ItalicAngle 0
-/StemV 88
-/AvgWidth 600
-/MaxWidth 600
-/MissingWidth 600
-/CharSet (/L/A/seven/y/n/c/M/B/eight/o/d/N/C/p/e/period/D/colon/slash/f/P/E/r/zero/g/F/s/one/h/G/t/i/two/S/u/three/T/I/four/v/minus/k/U/w/l/a/V/five/six/m/space)
-/FontFile3 3641 0 R
->>
-endobj
-3640 0 obj
-<<
+3626 0 obj <<
 /Type /Encoding
-/BaseEncoding /WinAnsiEncoding
-/Differences [ 45/minus]
->>
-endobj
-3641 0 obj
-<<
-/Subtype /Type1C
-/Filter /FlateDecode
-/Length 3642 0 R
->>
-stream
-xœ}X	T׶­¶éªŽàDÙ`$©âÄ	eˆâð˜œ@@"JdT”)*B3iÓÝN…Ýt3
-NQPC‰³¬(Έ&I0¾ÄçK4yÉ©÷/ÿ¯«íNÖË_‹Å¢ªî½çž}öÙç$„Ý B"‘LKW†-Ÿ<‰ðÎ á])‡Â…ïÿí){—ðITì ᤜƒ]ý;N%Ž‚ó0hyC	©D’³³:8#S¹.eÕê
-®£#-õ;vœõÍ$???×xåë/®3“Ö§¬Jwý ÿ±1)5#3-)}Ã4×`¼:55%ÁuUª2sõz׸ÄĤDq[T\jÒZא”Ô”ÌÌŒ®£ƒ=\½&Nœ4ÿò
-OI‹ÏZï–‘žá:ßuQÒª¬Ô¸uxI„÷ü@ezBXPFbxpfÒÌäˆYëV…¬_º!eqÖ’9×Ff§ÆE¥¹Nž2aªçÄI^Þ>ã}?$ˆñÄ(b±€˜IL Þ#"ˆY„'áF,$Bˆ÷‰Pbñ±˜˜M¸Kˆ9Äh"’˜KøQ„/1†XJÌ'>$¢‰0"ˆ˜L„bñ61„p!†ÃG‚&†
-âS‰p&|p;|ìUÉß$LÐ& M—>µ±ûBæ+ãdÏÉåä)j:Õ(Ÿ$ßûVÂ[½3^³cÿÐa†C‰CÏ ïA§3ƒµƒ/™;dßÐà¡!C5C…aÎÃS
-û‡£§c
-=‘ÞFî2¼Nx1XxÁñB/©mÐÐ*…DÁ¤¸GÖêu•Uj’E‘¤²HSPX®©e{ú²üŧÂñI…dÖPX Qå2È5PæÃÀ‡¼Dñ0
-’¥B D(. w™ÍV˜HšôºªJµ.‡M&ÑG‚I†V’J5¶£?;(´/K–J*Ux‡A|5–¬-Ç;Šð•¦“gÁ]¥¼m"€²j[FámB
-/é€àS¤Ðì4¹ÉÍªËÕøì—¾²R­W²sI(jdUÖc‘”̵\°†=O"_ôM'²/lVPdŽ¯ÐkL¬Ù$v¶—ÏäÁ‘‡ýmÎô}˜&ø*DOÄUµlê%s,§šXp¶ºeäaÞ`Üm”ÓÇ÷~Ú`hqùŒ3iöæØX¹ŽK“#.…²z?€¬±\"—Mù`Ö%ï°UÙó2øy<ì€ð-žðÎt‹°FpPÄ5GÕ…sr4rì84
-ÿÑœ»ºêš;ØOM»k¹Jy¹ª¼H½}G‘š‰Ž™·>¯àï_ í醏ïÄEíb雹;Ë4U.ºrK·<£è›µšòMÝ’¯)R²oXs‡†`Ò|30	~“•÷eØÄÙÃ
-^Šµ_|ª¬ŸF“ȽD“à¥l´å‚BÑÏý}Y)VˆÅÝóî6PÈÒ“à~“Y`ÇN'aΩVÌKñŠH¶\&Ÿuß|r}å©ÉìåÆ-ÜùãÀ/Ç0Èh5vŽäQ’’`
-u÷Bì°ð?d‘;Ú¯€<ð :¹&Í᜖{Vq«äa‹?šiZ˜}ˆMž‚Èñ}w4
-{50	^ýƒa¸û?Ñp6Þî_¦¾7zòT7·É_½|òðÖ¼¯x°««¯s<ÙBkv¦¥ðR1ÞŠÛ9¤"—ÝYtÄGÆ~¶ÀÒhÈ‹À¾çró­“]àõœzƒ,]¸„DðJñòÁT7¼Ò}ÚT÷Øꃇ?1o"õ7y©°ÝI05Qoâ€<DzŠémb»ûHtI(–ý™k©†='FÄ6ž5Æ7I áR_±Ì‚‹Ž—|‰_'ìR,?¾`ßn6·à“ؘ¸³¸pù
-¹À4Þ¹Ú¹ïäiæÀ¾ŠÎ 7éUê-ÛÕZ&r^ô'!Øہî¯`{›ûï_€ôéèð¦8¯L]ÉÉ«t†ì¨M¿äXr&ðð@LBì €3à¸á'º ’At¡&?a
-0¨ñ‘˜„XŠ°x@	yrÎù´ûœ†þøw°gé‡`?þÅ@ÈyÅ«ž@Ïi£§ß{þü«îŸ,a„ Æða7Ä(¸Ûëò¯~<­c,v`¸»'Œœ~w—gàpªÉPd(ÒnݾEÃ&¬
-Ê
-ãÁM»Q𛜷3ýpûâî×±{¢Ü*ØÒßYm|	N/ÁF±ç)õØ!'eX¥¹‰äû²B¼GãZò›WóñûpQò j”÷èqÌk­’@2>{–ˆ±Ñµ˜NòÌñæ®z~ëöÌ)-Çíää¥r­¾p'›Z¢Kâä“æE±á>Ô9ûõzØdë×d¡_ÜPD¿:.â¡ÄâÓ#l×ò0²·û‡'ßÅ¢C6éØ—e›Á¤©¼Ÿiˆ!!ÏJ Œzе84$x‘E€âaÁ7¢8ŠÜÚ~ç³[é3ØÎa·XR©/ªªÐ—×2àLÕªË7¨‹”L,rƒ$Šî€d®NU)²Š¶/ú‹›ÐB$øµÚòÂ|->€>ƒìÑuê5¢©Øz0¦ÝMHÅ´Cr‘i›Ì¼»‡zÇšŸ,¼»SGo¬Ú¬ÏeQ|BÒ-/aÀñ½Ç]öpu›÷mÐiJ¶—‰¨*0ê¹Uì'õY†t.š‹È˜0Eþ'ªÉÃ÷X:a¶að‚~ص|ic²?ÉõãX°»s¶±ë$‹Tè’ÈP½…‹›¹â«Pdw´¦¹¥ápe#ÇËñ!£ÏQôó7|OÒÑŒLÅónÌ}ÿ€	ã1÷»»dÿ¬½nm0¼Ujxe¥ðÂÂ7€Ãu*·LUUUfA;ò¯ÐþSÜ-š	ï‚'3§xöqh>éL…™‚B±º1¶z'§C<‚bæ®­M?¨dæÔtk.hhȯYÇmÓƨ¹‰>Îj9Áè(:¤BmÀel®¨ ìüœ£SW1ôŽJÞÄ©¶äÓ¹]XdO.Ü?’Ý”º‡][Ÿd\ ó.×î̪Ägm¬Ü\S3²íÂáîž/Ò>.eèQy;uê
-—JsÅx‹¢GáBYÈÐÆMEØ‚±~É7c¶_L,÷ã¬NŸë3­°$’Èa-{± '•ç¯~Zs{»•Ûƒûƒý¯ûƒXÊ*ÎVÔb±¨=š}É3<nCxt0Ÿ‡c¢>ö­R¬YIŠjq}u…å(QE6å›ÏaÑrÉ'«ÔK±’¹y?†wØ»wùàµöÖc-í5—¸^îN|i´<·ºÌPË<£L[õùùZ¬ÆTìÑ%µs¸¹\Ćظèåi\°<B^¿½S:¯×6]ê¿Ì¯˜;žmRøçØS&mÿÈ>Ъ-ÝhÐóÃ7@;dPU[¶mߪaâ×ÏÊ]ÌÉCâŽt°PÖ"ø:†8Œ1¾+¦£·
-³¢^äc#©ÿkÑ+³ ú’±ÂcÅ&ZÉ.¢0#*˜ý¤™©Z¾éçáTÐÂÄÞñï¼².µ;Ó£„…B•‚6òq±µ.£¦‡úÄÕ&6m`²ŽnºµévavþÁÜšµÜjyà¬È	˜w¹ÀŽm];vceåä8A°Ȩ½º¢
-›cQ´1†¿¼þ¦8|{óEdžö¤}lª)Cÿ·Ê0Ãz]fÍúšü®A~­óÌ£±v™ùW¦©t©,Óײ¿Pb?nFóu·ÑkQÇOÛâ^9Ó„yN=ÖV’ÎI°dÙ ^EÒÇ,^6Û%:?ÍÂùqÖ.ôþ:ýìÒ¯»®<w±iaZøaÈïñbò¢òÊ7WT•a€ì[ŽHJ©+ÂB‹…á.LëËeCÜ]ä#h.–ð™ÀŠ4LÓ;Ö¦Hb­îX3¿ªà%
-
-ˆ—ÂS'˜*8ÈZm´e¬•	7HÜöõʲIä½²kÖÝvOÂô>Ùkš£ØÂÁÛm0æ£w!Ü™îƒ`˜­8qBÑ,Y&Iÿ·õ~Ζû©°—±$J€•¸Wv–$é>«-'«­=$
-Ä“`?ΊÔÙ>S”uÅs‹2
-Z^òÒÒ×mÅx5™Ç¶jMYŽ˜ÇJµ6õ¢g¤×¬YÞ^!·ž2ð¬ûÝŸ²¯2wx²ûÖd íí;ÆF?H?©æô£Xkƒâ ë•Î!è®èeѤ/ÒÃ]<9ýÇ…&ò	²ƒ|
-ÆgÈhATØa–GKà_Šyûfƒ}¦ÿ'o_ó|&#xGÌÅ˸-À=u®0Ùé6TÏ_uäíÐ/&$Ï-P.a6oÑj¹Ír•¾È¸sWqñ.æÁÞƒº£œüî™5ËØ™TDujÙ
-¬Ã|#|Xú´ÿ—K¸}ùÀÅNæ¸ÝìùQâÄÛÔqõöç¿·ŸÒªŽš¹[/l·L½°R
-uNIHƒm£È§Êjµ%(Ùšþ†í‰"ñˆ»DáB–ì¾y2ª.*SšI§2G®–m´2ï´ÂßZ^‚ÿû
-;,pÖþšof§óÄhì§\
-öœæ/;¼¿Ù¥©1%E7»m¦‡“â÷c—öb÷›×$±tºc»à³h&//?½0~ÍƏ™¬Sk÷®äâ¸teJŒØ˜à¡Õ>'ÌÃx¡M|ú;¶îÐrÛÞÞ\^d4”–V—2ð!·¯õÉý©l«¾Ži†v±Êo…:¬R2ÜKáꘆ{¸§‚=t)èûwZÚ:G>Ú3vìT¯ðÃq·’úiPJâÒ9#Ç<™þË/O¾zÑ•x6è »ñúž+KfÎ
-_þE×­Îó÷XÔbG?}|uQ@àìði~ó:ïu_½øHŒV~½NÁ[ŠÄ´Œ¤U
-iŸ±òXãÁcÇR&™?Ø#þz
-Îâ÷éÉÉ
-é–÷‡ZZR™÷
-ÿ=HQ¢ßY•Ê
-*½ªH³­@Ë ¯ÿgþVÍŽ-ÜÖ·Ux&À˜Tê³óì9œÀ…9~U€·?HŠ¤þˆ@ÞŒ;®Ÿ=ˆ )žÍ /}û\Á]­½qèľ¦#µm\פܓҰÂÊÍ“{QܼœÐ´Y))Ùq8BkêÖ7¥ŸPÞà®Zæ	Áu÷ž (PxDÞÖ-N…/£Ò—èK¸]Œh“õU"ÖæßwlfÆÂÅø_…0>©œyE	uñÔ——z¿“Ó+aª;teäSßGcÂgÄ$39ëÓ8¥¼¨\e0–éªv1ÕW®¶ßàä÷®/‰ÍÉïÉ¢Íh½,‚¢#„w{H“¥ÅÎaèÒÕý¼hå?>ÇÜ_#x¨(..).Æß7Wë¸8ò;ÿëîK?ÊKK`²ó
-”œJ®*Wõ%%åLCÓiÓN~ÿr̼•‰qJv£*oÇ2Nž»¹¿ÖÑ7Ÿ?ž3Ýߎç’ÅuG—³šÒ­%ZN®*R©
-+
-šrÙŽÌS…§q+HýøèçË;gîï1†óð­HwA¤»ÌP ám*ÚQ„EMW²Ë`øiëÒ–	Ìdåô-§`¯@ù$$Âo²}"°¸©–üŒÛè7¥Xxÿ•cñ¨fÔs8Íp×]…2\¸¢ -Yg±–Í¢£¸g*ÄùVZZRVÁ´Õ·[9ù“Ka^£fy,ŒÜ×Ãju[vb'7©
-«òodϬ9“w;iÿÍ÷àvßÿ8Y½1ºßd/ùçgps…-Ší¦Uœ»VÓy°ýô½'îs&δ½|‹~Ë®¥œÜ¨+7šVï^9wîºKÙ€ù«}9$—£àÇh0|Ñó
-¯üŸLœ™à—ÀìŠTìo7ÖVï>|´µëÎí‹s¦û.š}òq&»µœ+Öî•ή|ëp¥­«#?ÈÛîàÀ;"ˆÿóÞòÅ
-endstream
-endobj
-3642 0 obj
-4428
-endobj
-3625 0 obj <<
+/Differences [32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/minus/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]
+>> endobj
+3614 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [278.931 531.01 331.003 542.699]
 /Subtype /Link
 /A << /S /GoTo /D (chap6net) >>
 >> endobj
-3630 0 obj <<
-/D [3628 0 R /XYZ 100.892 685.529 null]
+3619 0 obj <<
+/D [3617 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3631 0 obj <<
-/D [3628 0 R /XYZ 100.892 660.623 null]
+3620 0 obj <<
+/D [3617 0 R /XYZ 100.892 660.623 null]
 >> endobj
-3632 0 obj <<
-/D [3628 0 R /XYZ 100.892 649.664 null]
+3621 0 obj <<
+/D [3617 0 R /XYZ 100.892 649.664 null]
 >> endobj
 350 0 obj <<
-/D [3628 0 R /XYZ 100.892 592.185 null]
+/D [3617 0 R /XYZ 100.892 592.185 null]
 >> endobj
-3633 0 obj <<
-/D [3628 0 R /XYZ 100.892 557.471 null]
+3622 0 obj <<
+/D [3617 0 R /XYZ 100.892 557.471 null]
 >> endobj
 1753 0 obj <<
-/D [3628 0 R /XYZ 100.892 489.535 null]
+/D [3617 0 R /XYZ 100.892 489.535 null]
 >> endobj
-3634 0 obj <<
-/D [3628 0 R /XYZ 100.892 461.237 null]
+3623 0 obj <<
+/D [3617 0 R /XYZ 100.892 461.237 null]
 >> endobj
-3627 0 obj <<
+3616 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R >>
-/XObject << /Im10 3626 0 R >>
+/XObject << /Im10 3615 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3649 0 obj <<
+3635 0 obj <<
 /Length 2099      
 /Filter /FlateDecode
 >>
@@ -17237,63 +16788,63 @@
 <ú0K|™™×„yàaÔ½º¤`Zë·¼ºþ¡¢	;
 endstream
 endobj
-3648 0 obj <<
+3634 0 obj <<
 /Type /Page
-/Contents 3649 0 R
-/Resources 3647 0 R
+/Contents 3635 0 R
+/Resources 3633 0 R
 /MediaBox [0 0 612 792]
-/Parent 3624 0 R
-/Annots [ 3643 0 R 3644 0 R 3645 0 R 3646 0 R ]
+/Parent 3613 0 R
+/Annots [ 3629 0 R 3630 0 R 3631 0 R 3632 0 R ]
 >> endobj
-3643 0 obj <<
+3629 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.807 359.765 405.435 371.455]
 /Subtype /Link
 /A << /S /GoTo /D (Big500users) >>
 >> endobj
-3644 0 obj <<
+3630 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [447.286 319.118 511.352 330.807]
 /Subtype /Link
 /A << /S /GoTo /D (ch5-dnshcp-setup) >>
 >> endobj
-3645 0 obj <<
+3631 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [286.493 305.568 349.092 317.258]
 /Subtype /Link
 /A << /S /GoTo /D (ldapsetup) >>
 >> endobj
-3646 0 obj <<
+3632 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [358.982 237.245 405.814 248.934]
 /Subtype /Link
 /A << /S /GoTo /D (oldapreq) >>
 >> endobj
-3650 0 obj <<
-/D [3648 0 R /XYZ 151.701 685.529 null]
+3636 0 obj <<
+/D [3634 0 R /XYZ 151.701 685.529 null]
 >> endobj
 354 0 obj <<
-/D [3648 0 R /XYZ 151.701 288.713 null]
+/D [3634 0 R /XYZ 151.701 288.713 null]
 >> endobj
-3651 0 obj <<
-/D [3648 0 R /XYZ 151.701 260.455 null]
+3637 0 obj <<
+/D [3634 0 R /XYZ 151.701 260.455 null]
 >> endobj
 1853 0 obj <<
-/D [3648 0 R /XYZ 151.701 210.643 null]
+/D [3634 0 R /XYZ 151.701 210.643 null]
 >> endobj
-3652 0 obj <<
-/D [3648 0 R /XYZ 151.701 193.773 null]
+3638 0 obj <<
+/D [3634 0 R /XYZ 151.701 193.773 null]
 >> endobj
-3647 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F89 2333 0 R /F73 2334 0 R /F59 1905 0 R /F15 1133 0 R /F17 1131 0 R >>
-/XObject << /Im3 2328 0 R >>
+3633 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F89 2330 0 R /F73 2331 0 R /F59 1905 0 R /F15 1133 0 R /F17 1131 0 R >>
+/XObject << /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3657 0 obj <<
+3643 0 obj <<
 /Length 1815      
 /Filter /FlateDecode
 >>
@@ -17317,48 +16868,48 @@
 ÿE–û9@÷¨/9Ôª©w+ÿž ÷bZPL5ÕR¸¦W\ž(-‘è ^ø׊&Ž‡$é÷út0sW¢!æ0=ŒP”ÿ|sÆÒ
 endstream
 endobj
-3656 0 obj <<
+3642 0 obj <<
 /Type /Page
-/Contents 3657 0 R
-/Resources 3655 0 R
+/Contents 3643 0 R
+/Resources 3641 0 R
 /MediaBox [0 0 612 792]
-/Parent 3624 0 R
-/Annots [ 3653 0 R 3654 0 R ]
+/Parent 3613 0 R
+/Annots [ 3639 0 R 3640 0 R ]
 >> endobj
-3653 0 obj <<
+3639 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [275.39 565.516 346.124 577.206]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-slapdconf) >>
 >> endobj
-3654 0 obj <<
+3640 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [272.526 376.888 342.687 388.578]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-dbconf) >>
 >> endobj
-3658 0 obj <<
-/D [3656 0 R /XYZ 100.892 685.529 null]
+3644 0 obj <<
+/D [3642 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3659 0 obj <<
-/D [3656 0 R /XYZ 100.892 593.346 null]
+3645 0 obj <<
+/D [3642 0 R /XYZ 100.892 593.346 null]
 >> endobj
-3660 0 obj <<
-/D [3656 0 R /XYZ 100.892 552.66 null]
+3646 0 obj <<
+/D [3642 0 R /XYZ 100.892 552.66 null]
 >> endobj
-3661 0 obj <<
-/D [3656 0 R /XYZ 100.892 404.718 null]
+3647 0 obj <<
+/D [3642 0 R /XYZ 100.892 404.718 null]
 >> endobj
-3662 0 obj <<
-/D [3656 0 R /XYZ 100.892 312.26 null]
+3648 0 obj <<
+/D [3642 0 R /XYZ 100.892 312.26 null]
 >> endobj
-3655 0 obj <<
+3641 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3668 0 obj <<
+3654 0 obj <<
 /Length 2095      
 /Filter /FlateDecode
 >>
@@ -17377,47 +16928,47 @@
 NŶ܃êbüýC˜€ƒšóãè|îïÔÐt[bo ‘r,ª×}µ4¨Wö'£Ñº©w''؝(³Â¢ºvå¼ß€ÌQ@%ô°çPÔƒþRHlð
 endstream
 endobj
-3667 0 obj <<
+3653 0 obj <<
 /Type /Page
-/Contents 3668 0 R
-/Resources 3666 0 R
+/Contents 3654 0 R
+/Resources 3652 0 R
 /MediaBox [0 0 612 792]
-/Parent 3624 0 R
-/Annots [ 3664 0 R ]
+/Parent 3613 0 R
+/Annots [ 3650 0 R ]
 >> endobj
-3664 0 obj <<
+3650 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.028 131.677 511.352 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-nss01) >>
 >> endobj
-3669 0 obj <<
-/D [3667 0 R /XYZ 151.701 685.529 null]
+3655 0 obj <<
+/D [3653 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1561 0 obj <<
-/D [3667 0 R /XYZ 151.701 660.623 null]
+/D [3653 0 R /XYZ 151.701 660.623 null]
 >> endobj
-3573 0 obj <<
-/D [3667 0 R /XYZ 151.701 643.753 null]
+3562 0 obj <<
+/D [3653 0 R /XYZ 151.701 643.753 null]
 >> endobj
 358 0 obj <<
-/D [3667 0 R /XYZ 151.701 539.816 null]
+/D [3653 0 R /XYZ 151.701 539.816 null]
 >> endobj
-3670 0 obj <<
-/D [3667 0 R /XYZ 151.701 520.896 null]
+3656 0 obj <<
+/D [3653 0 R /XYZ 151.701 520.896 null]
 >> endobj
-3671 0 obj <<
-/D [3667 0 R /XYZ 151.701 255.916 null]
+3657 0 obj <<
+/D [3653 0 R /XYZ 151.701 255.916 null]
 >> endobj
-3672 0 obj <<
-/D [3667 0 R /XYZ 151.701 153.019 null]
+3658 0 obj <<
+/D [3653 0 R /XYZ 151.701 153.019 null]
 >> endobj
-3666 0 obj <<
+3652 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R /F17 1131 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3676 0 obj <<
+3662 0 obj <<
 /Length 2007      
 /Filter /FlateDecode
 >>
@@ -17442,43 +16993,43 @@
 ¤[äúžgßM®/÷Hì®\”V3)Å7iM}¿«^qs5ñÄp´é5úBu¹EïßÑŠŒzm£ jó³>Mœfh\*À[â´ó„K“ÆΚ–ãÏ„Âxˆ“ÌE:O°ÏŠÞ/ôДlÖñǘÖo_¬’¸Ï~0*ìøU %u›cë¾JÃÑ‚?ùü?áLNY‹ØÉý,OŒ_çÿ¿NÙ
 endstream
 endobj
-3675 0 obj <<
+3661 0 obj <<
 /Type /Page
-/Contents 3676 0 R
-/Resources 3674 0 R
+/Contents 3662 0 R
+/Resources 3660 0 R
 /MediaBox [0 0 612 792]
-/Parent 3624 0 R
-/Annots [ 3665 0 R 3678 0 R ]
+/Parent 3613 0 R
+/Annots [ 3651 0 R 3664 0 R ]
 >> endobj
-3665 0 obj <<
+3651 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [427.187 646.546 460.543 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-nss02) >>
 >> endobj
-3678 0 obj <<
+3664 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.441 632.997 196.434 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-nss02) >>
 >> endobj
-3677 0 obj <<
-/D [3675 0 R /XYZ 100.892 685.529 null]
+3663 0 obj <<
+/D [3661 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3679 0 obj <<
-/D [3675 0 R /XYZ 100.892 633.993 null]
+3665 0 obj <<
+/D [3661 0 R /XYZ 100.892 633.993 null]
 >> endobj
-3680 0 obj <<
-/D [3675 0 R /XYZ 100.892 182.972 null]
+3666 0 obj <<
+/D [3661 0 R /XYZ 100.892 182.972 null]
 >> endobj
-3674 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F89 2333 0 R /F73 2334 0 R >>
-/XObject << /Im3 2328 0 R >>
+3660 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F89 2330 0 R /F73 2331 0 R >>
+/XObject << /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3684 0 obj <<
+3670 0 obj <<
 /Length 1106      
 /Filter /FlateDecode
 >>
@@ -17490,21 +17041,21 @@
 a˜Û¶ÅB¼"{/ã](&äy9b˜DÑ„a{GaÞ'_q+߶æá/uxBÿŽè­
 endstream
 endobj
-3683 0 obj <<
+3669 0 obj <<
 /Type /Page
-/Contents 3684 0 R
-/Resources 3682 0 R
+/Contents 3670 0 R
+/Resources 3668 0 R
 /MediaBox [0 0 612 792]
-/Parent 3686 0 R
+/Parent 3672 0 R
 >> endobj
-3685 0 obj <<
-/D [3683 0 R /XYZ 151.701 685.529 null]
+3671 0 obj <<
+/D [3669 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3682 0 obj <<
+3668 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3693 0 obj <<
+3679 0 obj <<
 /Length 1713      
 /Filter /FlateDecode
 >>
@@ -17527,62 +17078,62 @@
 :§Úð~]QG¡-	ƒ»IK›:óx†ùк•í:úö üÿtøé¶X­Ü¾é»/?ýâÆ=(õL;¦ë°Â—ÿ¿†pÞ
 endstream
 endobj
-3692 0 obj <<
+3678 0 obj <<
 /Type /Page
-/Contents 3693 0 R
-/Resources 3691 0 R
+/Contents 3679 0 R
+/Resources 3677 0 R
 /MediaBox [0 0 612 792]
-/Parent 3686 0 R
-/Annots [ 3687 0 R 3688 0 R 3689 0 R 3690 0 R ]
+/Parent 3672 0 R
+/Annots [ 3673 0 R 3674 0 R 3675 0 R 3676 0 R ]
 >> endobj
-3687 0 obj <<
+3673 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [240.356 444.244 309.782 455.933]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-massive-smbconfa) >>
 >> endobj
-3688 0 obj <<
+3674 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [314.222 444.244 383.648 455.933]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-massive-smbconfb) >>
 >> endobj
-3689 0 obj <<
+3675 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.087 444.244 457.513 455.933]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-shareconfa) >>
 >> endobj
-3690 0 obj <<
+3676 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [176.407 430.695 246.88 442.384]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-shareconfb) >>
 >> endobj
-3694 0 obj <<
-/D [3692 0 R /XYZ 100.892 685.529 null]
+3680 0 obj <<
+/D [3678 0 R /XYZ 100.892 685.529 null]
 >> endobj
 362 0 obj <<
-/D [3692 0 R /XYZ 100.892 609.281 null]
+/D [3678 0 R /XYZ 100.892 609.281 null]
 >> endobj
-3695 0 obj <<
-/D [3692 0 R /XYZ 100.892 580.841 null]
+3681 0 obj <<
+/D [3678 0 R /XYZ 100.892 580.841 null]
 >> endobj
-3696 0 obj <<
-/D [3692 0 R /XYZ 100.892 465.72 null]
+3682 0 obj <<
+/D [3678 0 R /XYZ 100.892 465.72 null]
 >> endobj
-3697 0 obj <<
-/D [3692 0 R /XYZ 100.892 363.945 null]
+3683 0 obj <<
+/D [3678 0 R /XYZ 100.892 363.945 null]
 >> endobj
-3691 0 obj <<
+3677 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3704 0 obj <<
+3690 0 obj <<
 /Length 1140      
 /Filter /FlateDecode
 >>
@@ -17597,30 +17148,30 @@
  zX¤úDWùˆç1‰Ú‘Ìw¼0'âŠ5lÃåk@[¯´þ~Ø{Z¡üpÃÕ”»î¸‰jxc#â÷;‚O®p¸AhŠüU»NÑ–Ú$òªmÙ…U¦£„eûû\©§±Af™öDGQÏ2ÑÏ‹£¼yׇç¸Èß±UÍZ$Vå?GÄQ63ô0ѯê*Ñÿw•üÝðG€¸à1£Ó?˦ (·t° ÀKhpô@œïG"LÏOàá°¸8ÃÞO¢©ž7—ë{ìô£:ú©õ¿ÞS‘ÖVàc'€o1•ÿÀ‡š~¬Ó-ØeCï v Ž·ŠIÀpV}°R@ƒ¤+J>Ê@•¶¢9ÆãüÄèĉé1„ôCbÇ®“ÀŸöý§kúiU¬Ç¶ÞCNESôh+xÅhæ‚=ÇÄIƒ—ŸŒÒ7¬ðóý/­&G
 endstream
 endobj
-3703 0 obj <<
+3689 0 obj <<
 /Type /Page
-/Contents 3704 0 R
-/Resources 3702 0 R
+/Contents 3690 0 R
+/Resources 3688 0 R
 /MediaBox [0 0 612 792]
-/Parent 3686 0 R
+/Parent 3672 0 R
 >> endobj
-3705 0 obj <<
-/D [3703 0 R /XYZ 151.701 685.529 null]
+3691 0 obj <<
+/D [3689 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3706 0 obj <<
-/D [3703 0 R /XYZ 151.701 500.623 null]
+3692 0 obj <<
+/D [3689 0 R /XYZ 151.701 500.623 null]
 >> endobj
-3707 0 obj <<
-/D [3703 0 R /XYZ 151.701 372.873 null]
+3693 0 obj <<
+/D [3689 0 R /XYZ 151.701 372.873 null]
 >> endobj
-3708 0 obj <<
-/D [3703 0 R /XYZ 151.701 171.571 null]
+3694 0 obj <<
+/D [3689 0 R /XYZ 151.701 171.571 null]
 >> endobj
-3702 0 obj <<
+3688 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3711 0 obj <<
+3697 0 obj <<
 /Length 1716      
 /Filter /FlateDecode
 >>
@@ -17641,27 +17192,27 @@
 sÌ¢;»Á›BqXŽ>I/ð?<vÉ‘A>Î-9謷f<£2 ¼Òjžh@‰]ëfgr[ehl³´¦W$~–_ãWz(®ô×-ÜLÅpÂÛ=9F;Ósgð¼—£ù“|ü„i²ÔЮÏ\2®ð`ÿ‘Ê8ã
 endstream
 endobj
-3710 0 obj <<
+3696 0 obj <<
 /Type /Page
-/Contents 3711 0 R
-/Resources 3709 0 R
+/Contents 3697 0 R
+/Resources 3695 0 R
 /MediaBox [0 0 612 792]
-/Parent 3686 0 R
+/Parent 3672 0 R
 >> endobj
-3712 0 obj <<
-/D [3710 0 R /XYZ 100.892 685.529 null]
+3698 0 obj <<
+/D [3696 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3713 0 obj <<
-/D [3710 0 R /XYZ 100.892 194.798 null]
+3699 0 obj <<
+/D [3696 0 R /XYZ 100.892 194.798 null]
 >> endobj
-3714 0 obj <<
-/D [3710 0 R /XYZ 100.892 169.449 null]
+3700 0 obj <<
+/D [3696 0 R /XYZ 100.892 169.449 null]
 >> endobj
-3709 0 obj <<
+3695 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3720 0 obj <<
+3706 0 obj <<
 /Length 1738      
 /Filter /FlateDecode
 >>
@@ -17680,46 +17231,46 @@
 Mý·Ùå"…çêÝÏ.fNY	xôÂ#Õ[ÁÍñ<iþs=ð=s95vœC!n0ÔL˜w>lÿyLÁ Š9jò˜†ø*…‡ð©†ùÿFCÂÎÒú»Ê‚7c‘Í”=Ð~½Bèÿ_ZS
 endstream
 endobj
-3719 0 obj <<
+3705 0 obj <<
 /Type /Page
-/Contents 3720 0 R
-/Resources 3718 0 R
+/Contents 3706 0 R
+/Resources 3704 0 R
 /MediaBox [0 0 612 792]
-/Parent 3686 0 R
-/Annots [ 3715 0 R 3716 0 R 3717 0 R ]
+/Parent 3672 0 R
+/Annots [ 3701 0 R 3702 0 R 3703 0 R ]
 >> endobj
-3715 0 obj <<
+3701 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 138.879 350.622 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://samba.idealx.org/index.en.html)>>
 >> endobj
-3716 0 obj <<
+3702 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 127.92 422.228 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://samba.idealx.org/dist/smbldap-tools-0.9.1.tgz)>>
 >> endobj
-3717 0 obj <<
+3703 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 450.97 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://samba.idealx.org/dist/smbldap-tools-0.9.1-1.src.rpm)>>
 >> endobj
-3721 0 obj <<
-/D [3719 0 R /XYZ 151.701 685.529 null]
+3707 0 obj <<
+/D [3705 0 R /XYZ 151.701 685.529 null]
 >> endobj
 366 0 obj <<
-/D [3719 0 R /XYZ 151.701 371.036 null]
+/D [3705 0 R /XYZ 151.701 371.036 null]
 >> endobj
-3722 0 obj <<
-/D [3719 0 R /XYZ 151.701 337.4 null]
+3708 0 obj <<
+/D [3705 0 R /XYZ 151.701 337.4 null]
 >> endobj
-3718 0 obj <<
+3704 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R /F17 1131 0 R /F30 1928 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3725 0 obj <<
+3711 0 obj <<
 /Length 1559      
 /Filter /FlateDecode
 >>
@@ -17735,37 +17286,37 @@
 ÍÍW¥9lÖþÑ·k)ãLàÖ-ÍOu¹è;Òx¢²SßíúŠó®hó¢ô9»Uý£QdØ×”fɺSê,«@½!‹:v¹Ç×9¸=Žµ?‘®¯Häct'î¬O7>{¶fµ”ø¤œ˜Û²åãŠ%”M–îðË[Ar\-÷øKY´ìô{«ÿ!•ž¸-B?t€®aKÑ`'l‘hßQoô7ûÃWÇWõF÷NgÄoK…=JþSûh	È=-)€Bwßd·ãòì3;]xÝHžëuBß-RiüÇ7Ï¿Ÿ >ó
 endstream
 endobj
-3724 0 obj <<
+3710 0 obj <<
 /Type /Page
-/Contents 3725 0 R
-/Resources 3723 0 R
+/Contents 3711 0 R
+/Resources 3709 0 R
 /MediaBox [0 0 612 792]
-/Parent 3686 0 R
+/Parent 3672 0 R
 >> endobj
-3726 0 obj <<
-/D [3724 0 R /XYZ 100.892 685.529 null]
+3712 0 obj <<
+/D [3710 0 R /XYZ 100.892 685.529 null]
 >> endobj
 370 0 obj <<
-/D [3724 0 R /XYZ 100.892 492.221 null]
+/D [3710 0 R /XYZ 100.892 492.221 null]
 >> endobj
-3727 0 obj <<
-/D [3724 0 R /XYZ 100.892 465.05 null]
+3713 0 obj <<
+/D [3710 0 R /XYZ 100.892 465.05 null]
 >> endobj
-3728 0 obj <<
-/D [3724 0 R /XYZ 100.892 416.436 null]
+3714 0 obj <<
+/D [3710 0 R /XYZ 100.892 416.436 null]
 >> endobj
-3729 0 obj <<
-/D [3724 0 R /XYZ 100.892 267.114 null]
+3715 0 obj <<
+/D [3710 0 R /XYZ 100.892 267.114 null]
 >> endobj
-3730 0 obj <<
-/D [3724 0 R /XYZ 100.892 202.518 null]
+3716 0 obj <<
+/D [3710 0 R /XYZ 100.892 202.518 null]
 >> endobj
-3723 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F89 2333 0 R /F73 2334 0 R /F59 1905 0 R /F15 1133 0 R /F17 1131 0 R >>
-/XObject << /Im3 2328 0 R >>
+3709 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F89 2330 0 R /F73 2331 0 R /F59 1905 0 R /F15 1133 0 R /F17 1131 0 R >>
+/XObject << /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3734 0 obj <<
+3720 0 obj <<
 /Length 1262      
 /Filter /FlateDecode
 >>
@@ -17782,44 +17333,44 @@
 Šì¸å!=_ö§˜)àp²$¶jb–îmP'첎µ'Px›÷#ÓÒV¶¿JKÆXOjK jûip \"Ø)ñ¾þùó~;
 endstream
 endobj
-3733 0 obj <<
+3719 0 obj <<
 /Type /Page
-/Contents 3734 0 R
-/Resources 3732 0 R
+/Contents 3720 0 R
+/Resources 3718 0 R
 /MediaBox [0 0 612 792]
-/Parent 3740 0 R
-/Annots [ 3731 0 R ]
+/Parent 3726 0 R
+/Annots [ 3717 0 R ]
 >> endobj
-3731 0 obj <<
+3717 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [283.493 256.736 354.576 268.426]
 /Subtype /Link
 /A << /S /GoTo /D (smbldap-init) >>
 >> endobj
-3735 0 obj <<
-/D [3733 0 R /XYZ 151.701 685.529 null]
+3721 0 obj <<
+/D [3719 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3736 0 obj <<
-/D [3733 0 R /XYZ 151.701 581.918 null]
+3722 0 obj <<
+/D [3719 0 R /XYZ 151.701 581.918 null]
 >> endobj
-3737 0 obj <<
-/D [3733 0 R /XYZ 151.701 412.445 null]
+3723 0 obj <<
+/D [3719 0 R /XYZ 151.701 412.445 null]
 >> endobj
 374 0 obj <<
-/D [3733 0 R /XYZ 151.701 236.703 null]
+/D [3719 0 R /XYZ 151.701 236.703 null]
 >> endobj
-3738 0 obj <<
-/D [3733 0 R /XYZ 151.701 207.292 null]
+3724 0 obj <<
+/D [3719 0 R /XYZ 151.701 207.292 null]
 >> endobj
-3739 0 obj <<
-/D [3733 0 R /XYZ 151.701 145.01 null]
+3725 0 obj <<
+/D [3719 0 R /XYZ 151.701 145.01 null]
 >> endobj
-3732 0 obj <<
+3718 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3745 0 obj <<
+3731 0 obj <<
 /Length 1019      
 /Filter /FlateDecode
 >>
@@ -17835,41 +17386,41 @@
 ™ž
 endstream
 endobj
-3744 0 obj <<
+3730 0 obj <<
 /Type /Page
-/Contents 3745 0 R
-/Resources 3743 0 R
+/Contents 3731 0 R
+/Resources 3729 0 R
 /MediaBox [0 0 612 792]
-/Parent 3740 0 R
-/Annots [ 3742 0 R ]
+/Parent 3726 0 R
+/Annots [ 3728 0 R ]
 >> endobj
-3742 0 obj <<
+3728 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [209.714 118.128 280.797 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (smbldap-init) >>
 >> endobj
-3746 0 obj <<
-/D [3744 0 R /XYZ 100.892 685.529 null]
+3732 0 obj <<
+/D [3730 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3747 0 obj <<
-/D [3744 0 R /XYZ 100.892 622.565 null]
+3733 0 obj <<
+/D [3730 0 R /XYZ 100.892 622.565 null]
 >> endobj
-3748 0 obj <<
-/D [3744 0 R /XYZ 100.892 463.102 null]
+3734 0 obj <<
+/D [3730 0 R /XYZ 100.892 463.102 null]
 >> endobj
-3749 0 obj <<
-/D [3744 0 R /XYZ 100.892 337.996 null]
+3735 0 obj <<
+/D [3730 0 R /XYZ 100.892 337.996 null]
 >> endobj
-3750 0 obj <<
-/D [3744 0 R /XYZ 100.892 228.56 null]
+3736 0 obj <<
+/D [3730 0 R /XYZ 100.892 228.56 null]
 >> endobj
-3743 0 obj <<
+3729 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3753 0 obj <<
+3739 0 obj <<
 /Length 1302      
 /Filter /FlateDecode
 >>
@@ -17881,33 +17432,33 @@
 ì07×û‚½0’–þPÕÎÕϐ佪ó•kª|é¿níÕO“Á¯ð/ë_om–V
 endstream
 endobj
-3752 0 obj <<
+3738 0 obj <<
 /Type /Page
-/Contents 3753 0 R
-/Resources 3751 0 R
+/Contents 3739 0 R
+/Resources 3737 0 R
 /MediaBox [0 0 612 792]
-/Parent 3740 0 R
+/Parent 3726 0 R
 >> endobj
-3754 0 obj <<
-/D [3752 0 R /XYZ 151.701 685.529 null]
+3740 0 obj <<
+/D [3738 0 R /XYZ 151.701 685.529 null]
 >> endobj
 378 0 obj <<
-/D [3752 0 R /XYZ 151.701 660.623 null]
+/D [3738 0 R /XYZ 151.701 660.623 null]
 >> endobj
+3727 0 obj <<
+/D [3738 0 R /XYZ 151.701 641.897 null]
+>> endobj
 3741 0 obj <<
-/D [3752 0 R /XYZ 151.701 641.897 null]
+/D [3738 0 R /XYZ 151.701 517.985 null]
 >> endobj
-3755 0 obj <<
-/D [3752 0 R /XYZ 151.701 517.985 null]
+3742 0 obj <<
+/D [3738 0 R /XYZ 151.701 450.382 null]
 >> endobj
-3756 0 obj <<
-/D [3752 0 R /XYZ 151.701 450.382 null]
->> endobj
-3751 0 obj <<
+3737 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3759 0 obj <<
+3745 0 obj <<
 /Length 1239      
 /Filter /FlateDecode
 >>
@@ -17925,21 +17476,21 @@
 T@µ© Iv7ü}Z%fì.&lêÿÈV÷<›Þ„š¢ågq7ðI·;>š¾{¥èkñ¨¢)…cî3ü4‰îØHeªÍ’ðXhµ[vŸªåè9C´ÖVËâ']8šîÒð;3ÒSúºÜ*ëãá…z¾/å,Þ×ÊZí-1„æ]‘; |È—§}'¬$ôà¡9þðó¿U‘ò¯Fßo)7r-æÞ)+é‹îéTžö‹YCË#šŠÏO%ÑäN‘Žª“Eçz:{q‚UÀ‚;q8j$Â>Ç}UîµÒ•ŸÂªåØLP³u~‡‚ÊSö€² Qö Uóå®þeßÍÿ ICh
 endstream
 endobj
-3758 0 obj <<
+3744 0 obj <<
 /Type /Page
-/Contents 3759 0 R
-/Resources 3757 0 R
+/Contents 3745 0 R
+/Resources 3743 0 R
 /MediaBox [0 0 612 792]
-/Parent 3740 0 R
+/Parent 3726 0 R
 >> endobj
-3760 0 obj <<
-/D [3758 0 R /XYZ 100.892 685.529 null]
+3746 0 obj <<
+/D [3744 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3757 0 obj <<
+3743 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3763 0 obj <<
+3749 0 obj <<
 /Length 1223      
 /Filter /FlateDecode
 >>
@@ -17959,24 +17510,24 @@
 ’qGQDªÂ™½»Íž™ÿÝï†
 endstream
 endobj
-3762 0 obj <<
+3748 0 obj <<
 /Type /Page
-/Contents 3763 0 R
-/Resources 3761 0 R
+/Contents 3749 0 R
+/Resources 3747 0 R
 /MediaBox [0 0 612 792]
-/Parent 3740 0 R
+/Parent 3726 0 R
 >> endobj
-3764 0 obj <<
-/D [3762 0 R /XYZ 151.701 685.529 null]
+3750 0 obj <<
+/D [3748 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3765 0 obj <<
-/D [3762 0 R /XYZ 151.701 186.87 null]
+3751 0 obj <<
+/D [3748 0 R /XYZ 151.701 186.87 null]
 >> endobj
-3761 0 obj <<
+3747 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3771 0 obj <<
+3757 0 obj <<
 /Length 2160      
 /Filter /FlateDecode
 >>
@@ -18001,42 +17552,42 @@
 !0eEG•íeogóÆ?9¤ÛF„óÜgŒúG@ÿ÷–2ÍüÁæÙ—&óËØŸMc?¼M¾±“;¿AÜYžêiœÙnC  c"¼„èô¸˜_ÖÚs]-?˜÷º›Š¸[{½Ïäiôß0n‰[ð¿D2¾ãP¸oëÚþæ>±ç/Œ‰ûsÍ{¶¦‚xÙ™¡ÿÇÕþ»¥K]†Q$קæÍeü~»½ùbÏ®
 endstream
 endobj
-3770 0 obj <<
+3756 0 obj <<
 /Type /Page
-/Contents 3771 0 R
-/Resources 3769 0 R
+/Contents 3757 0 R
+/Resources 3755 0 R
 /MediaBox [0 0 612 792]
-/Parent 3740 0 R
-/Annots [ 3766 0 R 3767 0 R ]
+/Parent 3726 0 R
+/Annots [ 3752 0 R 3753 0 R ]
 >> endobj
-3766 0 obj <<
+3752 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [165.714 118.128 382.403 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (appendix) >>
 >> endobj
-3767 0 obj <<
+3753 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.078 118.128 446.646 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (altldapcfg) >>
 >> endobj
-3772 0 obj <<
-/D [3770 0 R /XYZ 100.892 685.529 null]
+3758 0 obj <<
+/D [3756 0 R /XYZ 100.892 685.529 null]
 >> endobj
 382 0 obj <<
-/D [3770 0 R /XYZ 100.892 660.623 null]
+/D [3756 0 R /XYZ 100.892 660.623 null]
 >> endobj
-3773 0 obj <<
-/D [3770 0 R /XYZ 100.892 630.478 null]
+3759 0 obj <<
+/D [3756 0 R /XYZ 100.892 630.478 null]
 >> endobj
-3769 0 obj <<
+3755 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R /F54 1912 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3777 0 obj <<
+3763 0 obj <<
 /Length 2032      
 /Filter /FlateDecode
 >>
@@ -18062,30 +17613,30 @@
 ƒh€Bg¡Þouî!!1ºªæR~ÞqѨ5ØôP‡çS;ðbh,‹ë¶_ç¶ÿù=cçnT¶>Â8’ÑøqÀ¯{x‘ë`fÆ:°ø)9·‚RÖcUÛx uB‰@]Û<D+”ñ¹]yêæ×™Ùé˜?TAB0¿U3NÔŸ#S»n»Ö"ÄXÍƉ¿áÂ?fÎQf¯°.CÿÉ|) ÁÕ"ËË×dÈÄJë¾bs)rÐ÷/	‰·ùBžÝæ•?±ïÖ6Xòâ? cÒw˜èÃeŒh,¼¬Ã«?tuÈyK4^þ_¿àŽ? –ñhæ
 endstream
 endobj
-3776 0 obj <<
+3762 0 obj <<
 /Type /Page
-/Contents 3777 0 R
-/Resources 3775 0 R
+/Contents 3763 0 R
+/Resources 3761 0 R
 /MediaBox [0 0 612 792]
-/Parent 3779 0 R
-/Annots [ 3768 0 R ]
+/Parent 3765 0 R
+/Annots [ 3754 0 R ]
 >> endobj
-3768 0 obj <<
+3754 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [269.381 608.02 315.64 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-bigacct) >>
 >> endobj
-3778 0 obj <<
-/D [3776 0 R /XYZ 151.701 685.529 null]
+3764 0 obj <<
+/D [3762 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3775 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F89 2333 0 R /F73 2334 0 R /F59 1905 0 R >>
-/XObject << /Im3 2328 0 R >>
+3761 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F89 2330 0 R /F73 2331 0 R /F59 1905 0 R >>
+/XObject << /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3783 0 obj <<
+3769 0 obj <<
 /Length 1595      
 /Filter /FlateDecode
 >>
@@ -18104,36 +17655,36 @@
 f6[ø9ÔÓa±^VëBõِQÔIÕÆÞ¨´*îëÔítéE6²õñ¥Êò•z=`M<ߘýöú®™†O9a^ËU¡dT×Õ§zi_Ï£Dæ}Þ=øÒ‹’ÿc»
 endstream
 endobj
-3782 0 obj <<
+3768 0 obj <<
 /Type /Page
-/Contents 3783 0 R
-/Resources 3781 0 R
+/Contents 3769 0 R
+/Resources 3767 0 R
 /MediaBox [0 0 612 792]
-/Parent 3779 0 R
+/Parent 3765 0 R
 >> endobj
-3784 0 obj <<
-/D [3782 0 R /XYZ 100.892 685.529 null]
+3770 0 obj <<
+/D [3768 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1854 0 obj <<
-/D [3782 0 R /XYZ 100.892 660.623 null]
+/D [3768 0 R /XYZ 100.892 660.623 null]
 >> endobj
-3780 0 obj <<
-/D [3782 0 R /XYZ 100.892 643.753 null]
+3766 0 obj <<
+/D [3768 0 R /XYZ 100.892 643.753 null]
 >> endobj
-3785 0 obj <<
-/D [3782 0 R /XYZ 100.892 507.824 null]
+3771 0 obj <<
+/D [3768 0 R /XYZ 100.892 507.824 null]
 >> endobj
-3786 0 obj <<
-/D [3782 0 R /XYZ 100.892 434.262 null]
+3772 0 obj <<
+/D [3768 0 R /XYZ 100.892 434.262 null]
 >> endobj
-3787 0 obj <<
-/D [3782 0 R /XYZ 100.892 409.882 null]
+3773 0 obj <<
+/D [3768 0 R /XYZ 100.892 409.882 null]
 >> endobj
-3781 0 obj <<
+3767 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3790 0 obj <<
+3776 0 obj <<
 /Length 1059      
 /Filter /FlateDecode
 >>
@@ -18144,30 +17695,30 @@
 7cýëLÍ@ØÍŸ.LCŸß;µ¾o^ŒÜ—wžåÒÍwjSªÁÒ¤nnx]â0@×f¤]tV:#5íòUjCgD¬º{IJƒIѤ©†€>Xáã{ãb÷Åil½ºßT†d°¶ïQG7‘¦›•ÅÐi̝²•;ù©9.êæâÖ”À,ZÛ1’éö_ÓØÓ£eÈÕ̘|¯™‘kh1± t)oa}Lâ)ò*óR+•“–ºð8šz/]®F‰ÍzšrÍŽÂLqÛzSäÌÄûÊ™i†t;]öfIŒ[…}cšys7ÓÖu3HQ´k7„i4‹6?ë®õÖFmǾ¸£cGÃÔ>žû–ÆÝ<t¯4N¿Ûá]‚9–t›Ø5‘åz§ì”ztšJãLÙ/mÖ|÷ÂЇ‡zŸy7bb±7s’Uú£TîMo?®ô•úkéêÜž-YâºÀIþÕq¢m&³š0÷d¤Ò¸ÝÄýSÿùg˜Õ
 endstream
 endobj
-3789 0 obj <<
+3775 0 obj <<
 /Type /Page
-/Contents 3790 0 R
-/Resources 3788 0 R
+/Contents 3776 0 R
+/Resources 3774 0 R
 /MediaBox [0 0 612 792]
-/Parent 3779 0 R
+/Parent 3765 0 R
 >> endobj
-3791 0 obj <<
-/D [3789 0 R /XYZ 151.701 685.529 null]
+3777 0 obj <<
+/D [3775 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3792 0 obj <<
-/D [3789 0 R /XYZ 151.701 500.623 null]
+3778 0 obj <<
+/D [3775 0 R /XYZ 151.701 500.623 null]
 >> endobj
-3793 0 obj <<
-/D [3789 0 R /XYZ 151.701 310.934 null]
+3779 0 obj <<
+/D [3775 0 R /XYZ 151.701 310.934 null]
 >> endobj
-3794 0 obj <<
-/D [3789 0 R /XYZ 151.701 216.089 null]
+3780 0 obj <<
+/D [3775 0 R /XYZ 151.701 216.089 null]
 >> endobj
-3788 0 obj <<
+3774 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3798 0 obj <<
+3784 0 obj <<
 /Length 1195      
 /Filter /FlateDecode
 >>
@@ -18183,32 +17734,32 @@
 „œïbl0²ËÛr vª×Rg¥ê^²c&ÏUßèîÑcµ[áï÷_¶R¥
 endstream
 endobj
-3797 0 obj <<
+3783 0 obj <<
 /Type /Page
-/Contents 3798 0 R
-/Resources 3796 0 R
+/Contents 3784 0 R
+/Resources 3782 0 R
 /MediaBox [0 0 612 792]
-/Parent 3779 0 R
-/Annots [ 3795 0 R ]
+/Parent 3765 0 R
+/Annots [ 3781 0 R ]
 >> endobj
-3795 0 obj <<
+3781 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.785 583.614 453.27 596.516]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-ldifadd) >>
 >> endobj
-3799 0 obj <<
-/D [3797 0 R /XYZ 100.892 685.529 null]
+3785 0 obj <<
+/D [3783 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3800 0 obj <<
-/D [3797 0 R /XYZ 100.892 476.234 null]
+3786 0 obj <<
+/D [3783 0 R /XYZ 100.892 476.234 null]
 >> endobj
-3796 0 obj <<
+3782 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3804 0 obj <<
+3790 0 obj <<
 /Length 932       
 /Filter /FlateDecode
 >>
@@ -18219,24 +17770,24 @@
 -L‚|ß¡N¤¢›«Ž©Ü»eÎ-ygÒÍßÛ15ãÅIâ^Øíû¨K\þ68¿˜Jë¹¹¡2ƒ×9ÏÍjµ|{3müs„Õòêö+™ˆ£=O™äföû	é?ÌöcÑY•2µ•}zÆç¦(U·´¥8©ùÌe›:*',ÀÕjuV4Ž Tß 1†–N:ƱÕ×÷ÍEüÐÑóÌhyžµh·¬.¾±®õԍ<[ŒObNhÅßGí–‹¦ä/ÎÈòyÔ/úK{ë—"1ÖÆÊûº˜ŽI¿œx À™l˜ü[™úÃ*§4?µÚã¨þÏü̲q=
 endstream
 endobj
-3803 0 obj <<
+3789 0 obj <<
 /Type /Page
-/Contents 3804 0 R
-/Resources 3802 0 R
+/Contents 3790 0 R
+/Resources 3788 0 R
 /MediaBox [0 0 612 792]
-/Parent 3779 0 R
+/Parent 3765 0 R
 >> endobj
-3805 0 obj <<
-/D [3803 0 R /XYZ 151.701 685.529 null]
+3791 0 obj <<
+/D [3789 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3806 0 obj <<
-/D [3803 0 R /XYZ 151.701 489.469 null]
+3792 0 obj <<
+/D [3789 0 R /XYZ 151.701 489.469 null]
 >> endobj
-3802 0 obj <<
+3788 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3810 0 obj <<
+3796 0 obj <<
 /Length 1289      
 /Filter /FlateDecode
 >>
@@ -18254,35 +17805,35 @@
 	ƒQG¨½¬<DØõÓÆâÔ–žUí^÷}£<w”^í—#h{€U1¥§l¼ŠâˆFÙXYÚEYÉC«Sn?9W¨rìmU ÑW¨´Ð„¤åRK¯mBcå\Ñbô	Ká&t@f7|åÈqð4½¿w–¢K;x»Aú3FÏ'ÁŽcÔ”µêÖ8ÞÃìs¨­ïüÜ8ªötŸŽÔõêºÒãàvgWy”Þµy<ôYp*€F'ÀMãs?Ö“	 Vx{U>Az!¹?‚ œçfÐo#ÜW¡e¥‘;is¯Z,¤âÊpá¦W²¼sçöš‘ærY–•«<·¹Fy5•p†CÔGĬÈMïéyßÚ±ˆ#K0Ì…·*9"ÅI»³½cÂ\ëÆ­ì€Ã¿}¡”q„³ñ*âoE†›â‚$b[Hñ4ÖðÈcÕ)iÓP鲌B»
 endstream
 endobj
-3809 0 obj <<
+3795 0 obj <<
 /Type /Page
-/Contents 3810 0 R
-/Resources 3808 0 R
+/Contents 3796 0 R
+/Resources 3794 0 R
 /MediaBox [0 0 612 792]
-/Parent 3779 0 R
-/Annots [ 3807 0 R ]
+/Parent 3765 0 R
+/Annots [ 3793 0 R ]
 >> endobj
-3807 0 obj <<
+3793 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [167.534 180.454 238.377 192.143]
 /Subtype /Link
 /A << /S /GoTo /D (sbeavoid) >>
 >> endobj
-3811 0 obj <<
-/D [3809 0 R /XYZ 100.892 685.529 null]
+3797 0 obj <<
+/D [3795 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3812 0 obj <<
-/D [3809 0 R /XYZ 100.892 409.077 null]
+3798 0 obj <<
+/D [3795 0 R /XYZ 100.892 409.077 null]
 >> endobj
-3813 0 obj <<
-/D [3809 0 R /XYZ 100.892 154.352 null]
+3799 0 obj <<
+/D [3795 0 R /XYZ 100.892 154.352 null]
 >> endobj
-3808 0 obj <<
+3794 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3816 0 obj <<
+3802 0 obj <<
 /Length 1052      
 /Filter /FlateDecode
 >>
@@ -18300,27 +17851,27 @@
 í Z|7íd%ÿ¸1R¯?à6œ2â×Áˆ(m¾çßL׎gƒ$$èCÌ9äOn‘:Tum¨ü‚[ ¤tŒRBÇj|QnmUDUHt®ê]ǛݡÒ9361ÁT˜3?WZ˼¯Á"ò	ƒ/ Yg5ÄVÃ(沐¸cç2¬}y¢Ð7CmDUw¯€^0ÒU¤‘fähd¢,n‹±pã(…a˜È(’jƒ«ã%}§%˜Óbë>"··ÒòõFVc•ÙJŸdrÕ4¢-ð°F¸èš—̺îÌ»œL¯Ðž} uU at aZ§àz—,–žûv´ßiœÅ¹jMw›63¸;åµÐ¯ã”8¸Ý‡Ï|dôžV¹+¶óY™žV¸~þè2ðŽ
 endstream
 endobj
-3815 0 obj <<
+3801 0 obj <<
 /Type /Page
-/Contents 3816 0 R
-/Resources 3814 0 R
+/Contents 3802 0 R
+/Resources 3800 0 R
 /MediaBox [0 0 612 792]
-/Parent 3820 0 R
+/Parent 3806 0 R
 >> endobj
-3817 0 obj <<
-/D [3815 0 R /XYZ 151.701 685.529 null]
+3803 0 obj <<
+/D [3801 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3818 0 obj <<
-/D [3815 0 R /XYZ 151.701 465.596 null]
+3804 0 obj <<
+/D [3801 0 R /XYZ 151.701 465.596 null]
 >> endobj
-3819 0 obj <<
-/D [3815 0 R /XYZ 151.701 219.775 null]
+3805 0 obj <<
+/D [3801 0 R /XYZ 151.701 219.775 null]
 >> endobj
-3814 0 obj <<
+3800 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3823 0 obj <<
+3809 0 obj <<
 /Length 1434      
 /Filter /FlateDecode
 >>
@@ -18331,30 +17882,30 @@
 jm-ÀÔ³çx/¡én·slâ^¦ëæL%”Ý\°'")†*õÖ̃58¾”&•‰v‰Àâã™Q¶êë¦,å¾›D²Ç“؏Òøi@—Kž*í€"x48Ûû/­‡ÿa«Œ¥›ŒN"aöJ—Ç‘©Îˆà±ý&Ki眿ø_GcÀ¿æIFìÜ“¤o,yj==íÊ3ÿ¬]ãªY}²’G}@RdÜ&O$Èø’Gv¾Ë1ýyòøx»çtlè»|Wª=ÜÙ’ÿï`lh11ÊžòÜõæ}üãžC12´8'Ãþöü*=ä„
 endstream
 endobj
-3822 0 obj <<
+3808 0 obj <<
 /Type /Page
-/Contents 3823 0 R
-/Resources 3821 0 R
+/Contents 3809 0 R
+/Resources 3807 0 R
 /MediaBox [0 0 612 792]
-/Parent 3820 0 R
+/Parent 3806 0 R
 >> endobj
-3824 0 obj <<
-/D [3822 0 R /XYZ 100.892 685.529 null]
+3810 0 obj <<
+/D [3808 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3825 0 obj <<
-/D [3822 0 R /XYZ 100.892 585.965 null]
+3811 0 obj <<
+/D [3808 0 R /XYZ 100.892 585.965 null]
 >> endobj
-3826 0 obj <<
-/D [3822 0 R /XYZ 100.892 412.553 null]
+3812 0 obj <<
+/D [3808 0 R /XYZ 100.892 412.553 null]
 >> endobj
-3827 0 obj <<
-/D [3822 0 R /XYZ 100.892 281.714 null]
+3813 0 obj <<
+/D [3808 0 R /XYZ 100.892 281.714 null]
 >> endobj
-3821 0 obj <<
+3807 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3830 0 obj <<
+3816 0 obj <<
 /Length 1154      
 /Filter /FlateDecode
 >>
@@ -18372,27 +17923,27 @@
 Ïsl+BÝÞKf2{ÞºtÕ™¹ÆÚÃmlCÈúE¨ãYÅÕ›MT-ZD……´}O<k»Öô§Ûÿ“ªfºïòLý†ÓÉp|ÛO}ï•÷‘8gEÍë¯Îý*uohüÿmž-:
 endstream
 endobj
-3829 0 obj <<
+3815 0 obj <<
 /Type /Page
-/Contents 3830 0 R
-/Resources 3828 0 R
+/Contents 3816 0 R
+/Resources 3814 0 R
 /MediaBox [0 0 612 792]
-/Parent 3820 0 R
+/Parent 3806 0 R
 >> endobj
-3831 0 obj <<
-/D [3829 0 R /XYZ 151.701 685.529 null]
+3817 0 obj <<
+/D [3815 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3832 0 obj <<
-/D [3829 0 R /XYZ 151.701 647.543 null]
+3818 0 obj <<
+/D [3815 0 R /XYZ 151.701 647.543 null]
 >> endobj
-3833 0 obj <<
-/D [3829 0 R /XYZ 151.701 203.129 null]
+3819 0 obj <<
+/D [3815 0 R /XYZ 151.701 203.129 null]
 >> endobj
-3828 0 obj <<
+3814 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3836 0 obj <<
+3822 0 obj <<
 /Length 1257      
 /Filter /FlateDecode
 >>
@@ -18408,27 +17959,27 @@
 O/’q„˜ÿ|ih
 endstream
 endobj
-3835 0 obj <<
+3821 0 obj <<
 /Type /Page
-/Contents 3836 0 R
-/Resources 3834 0 R
+/Contents 3822 0 R
+/Resources 3820 0 R
 /MediaBox [0 0 612 792]
-/Parent 3820 0 R
+/Parent 3806 0 R
 >> endobj
-3837 0 obj <<
-/D [3835 0 R /XYZ 100.892 685.529 null]
+3823 0 obj <<
+/D [3821 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3838 0 obj <<
-/D [3835 0 R /XYZ 100.892 599.153 null]
+3824 0 obj <<
+/D [3821 0 R /XYZ 100.892 599.153 null]
 >> endobj
-3839 0 obj <<
-/D [3835 0 R /XYZ 100.892 359.138 null]
+3825 0 obj <<
+/D [3821 0 R /XYZ 100.892 359.138 null]
 >> endobj
-3834 0 obj <<
+3820 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3842 0 obj <<
+3828 0 obj <<
 /Length 1465      
 /Filter /FlateDecode
 >>
@@ -18449,30 +18000,30 @@
 ž2!ß9c¦äœóC7YhÆÙ ÊvhÈ"á'¡£¢ê$h°\h”'ÚÅí@ÀÃ0¢¶ë½Å=Ú-Œd†ú{eé‡À0µ3>=y‚é?¤ÿ|r
 endstream
 endobj
-3841 0 obj <<
+3827 0 obj <<
 /Type /Page
-/Contents 3842 0 R
-/Resources 3840 0 R
+/Contents 3828 0 R
+/Resources 3826 0 R
 /MediaBox [0 0 612 792]
-/Parent 3820 0 R
+/Parent 3806 0 R
 >> endobj
-3843 0 obj <<
-/D [3841 0 R /XYZ 151.701 685.529 null]
+3829 0 obj <<
+/D [3827 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3844 0 obj <<
-/D [3841 0 R /XYZ 151.701 646.937 null]
+3830 0 obj <<
+/D [3827 0 R /XYZ 151.701 646.937 null]
 >> endobj
-3845 0 obj <<
-/D [3841 0 R /XYZ 151.701 419.327 null]
+3831 0 obj <<
+/D [3827 0 R /XYZ 151.701 419.327 null]
 >> endobj
-3846 0 obj <<
-/D [3841 0 R /XYZ 151.701 166.546 null]
+3832 0 obj <<
+/D [3827 0 R /XYZ 151.701 166.546 null]
 >> endobj
-3840 0 obj <<
+3826 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3849 0 obj <<
+3835 0 obj <<
 /Length 965       
 /Filter /FlateDecode
 >>
@@ -18489,27 +18040,27 @@
 G,ŸO‰}Að„u˜/¡sêÏidfÃǘ`@Ž"}‘˜FsâÍ=vÞv@öÄKÊ›¶×˜¤´&‹°„ÌE0Žluc¡âVßèÚÞ–søukEðV=Û;J,|0gᜑËÄËvºü÷¾ÉÍ“ñú¾µyÿ…ÿ_ÿÊj„Ÿ
 endstream
 endobj
-3848 0 obj <<
+3834 0 obj <<
 /Type /Page
-/Contents 3849 0 R
-/Resources 3847 0 R
+/Contents 3835 0 R
+/Resources 3833 0 R
 /MediaBox [0 0 612 792]
-/Parent 3820 0 R
+/Parent 3806 0 R
 >> endobj
-3850 0 obj <<
-/D [3848 0 R /XYZ 100.892 685.529 null]
+3836 0 obj <<
+/D [3834 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3851 0 obj <<
-/D [3848 0 R /XYZ 100.892 622.565 null]
+3837 0 obj <<
+/D [3834 0 R /XYZ 100.892 622.565 null]
 >> endobj
-3852 0 obj <<
-/D [3848 0 R /XYZ 100.892 257.326 null]
+3838 0 obj <<
+/D [3834 0 R /XYZ 100.892 257.326 null]
 >> endobj
-3847 0 obj <<
+3833 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3858 0 obj <<
+3844 0 obj <<
 /Length 1682      
 /Filter /FlateDecode
 >>
@@ -18524,68 +18075,68 @@
 !»š«*ÃMœ®mûßýï´>˜¢Á¸Â^t Íê¿IO)ñž‰¢‘ÿÈZøS–ýêéÓý6¢½iJv*Z+ŒóÅä%†ñâjñ¨³5=
 endstream
 endobj
-3857 0 obj <<
+3843 0 obj <<
 /Type /Page
-/Contents 3858 0 R
-/Resources 3856 0 R
+/Contents 3844 0 R
+/Resources 3842 0 R
 /MediaBox [0 0 612 792]
-/Parent 3866 0 R
-/Annots [ 3853 0 R 3863 0 R 3854 0 R 3855 0 R ]
+/Parent 3852 0 R
+/Annots [ 3839 0 R 3849 0 R 3840 0 R 3841 0 R ]
 >> endobj
-3853 0 obj <<
+3839 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [360.226 291.539 511.352 303.229]
 /Subtype /Link
 /A << /S /GoTo /D (secure) >>
 >> endobj
-3863 0 obj <<
+3849 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.25 277.99 250.304 289.68]
 /Subtype /Link
 /A << /S /GoTo /D (secure) >>
 >> endobj
-3854 0 obj <<
+3840 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.978 277.99 330.152 289.68]
 /Subtype /Link
 /A << /S /GoTo /D (abmasbiz) >>
 >> endobj
-3855 0 obj <<
+3841 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [365.735 277.99 440.91 289.68]
 /Subtype /Link
 /A << /S /GoTo /D (eth2zone) >>
 >> endobj
-3859 0 obj <<
-/D [3857 0 R /XYZ 151.701 685.529 null]
+3845 0 obj <<
+/D [3843 0 R /XYZ 151.701 685.529 null]
 >> endobj
 386 0 obj <<
-/D [3857 0 R /XYZ 151.701 508.927 null]
+/D [3843 0 R /XYZ 151.701 508.927 null]
 >> endobj
-3860 0 obj <<
-/D [3857 0 R /XYZ 151.701 479.293 null]
+3846 0 obj <<
+/D [3843 0 R /XYZ 151.701 479.293 null]
 >> endobj
-3861 0 obj <<
-/D [3857 0 R /XYZ 151.701 403.627 null]
+3847 0 obj <<
+/D [3843 0 R /XYZ 151.701 403.627 null]
 >> endobj
-3862 0 obj <<
-/D [3857 0 R /XYZ 151.701 370.526 null]
+3848 0 obj <<
+/D [3843 0 R /XYZ 151.701 370.526 null]
 >> endobj
-3864 0 obj <<
-/D [3857 0 R /XYZ 151.701 278.986 null]
+3850 0 obj <<
+/D [3843 0 R /XYZ 151.701 278.986 null]
 >> endobj
-3865 0 obj <<
-/D [3857 0 R /XYZ 151.701 216.666 null]
+3851 0 obj <<
+/D [3843 0 R /XYZ 151.701 216.666 null]
 >> endobj
-3856 0 obj <<
+3842 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3869 0 obj <<
+3855 0 obj <<
 /Length 1485      
 /Filter /FlateDecode
 >>
@@ -18601,39 +18152,39 @@
 Y}R}ÔŽ–FÇ·pB½læTn§Cà“/´Xm€vŒA;''Ú5û™nÝà:½]Lí'1uÔ‡í, Œõ¡›1£›$nˆÃ‘"E‚~S´cª5÷Ý*|ÄdÆr¹Vð×±ÕÍxߦ1*ïOt±gÅ´‚í(žÅ"ª‰:<ùK×Þ´HªÞ.)8	®²Ï!DNP¹˜¶¢kŸ>@Æ×€ÝüÁ±Û*ï$¤h'´i1["Þs×­¥ŸíÊ5¼è²Ç]*x­D)`Þ[ ‘=a-<¿àxVP]H‚9¿ÞïØ*xùŽÕÓAßàØÇTœN±¥ÓÞl1ïïÃÕ54íú*>"µ£ŽŸ½Z?‚/Ò?Gp¡{õ`¨ÿÂsø/Æ6
 endstream
 endobj
-3868 0 obj <<
+3854 0 obj <<
 /Type /Page
-/Contents 3869 0 R
-/Resources 3867 0 R
+/Contents 3855 0 R
+/Resources 3853 0 R
 /MediaBox [0 0 612 792]
-/Parent 3866 0 R
+/Parent 3852 0 R
 >> endobj
-3870 0 obj <<
-/D [3868 0 R /XYZ 100.892 685.529 null]
+3856 0 obj <<
+/D [3854 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3871 0 obj <<
-/D [3868 0 R /XYZ 100.892 606.895 null]
+3857 0 obj <<
+/D [3854 0 R /XYZ 100.892 606.895 null]
 >> endobj
-3872 0 obj <<
-/D [3868 0 R /XYZ 100.892 511.462 null]
+3858 0 obj <<
+/D [3854 0 R /XYZ 100.892 511.462 null]
 >> endobj
-3873 0 obj <<
-/D [3868 0 R /XYZ 100.892 386.809 null]
+3859 0 obj <<
+/D [3854 0 R /XYZ 100.892 386.809 null]
 >> endobj
-3874 0 obj <<
-/D [3868 0 R /XYZ 100.892 316.354 null]
+3860 0 obj <<
+/D [3854 0 R /XYZ 100.892 316.354 null]
 >> endobj
-3875 0 obj <<
-/D [3868 0 R /XYZ 100.892 245.898 null]
+3861 0 obj <<
+/D [3854 0 R /XYZ 100.892 245.898 null]
 >> endobj
-3876 0 obj <<
-/D [3868 0 R /XYZ 100.892 154.352 null]
+3862 0 obj <<
+/D [3854 0 R /XYZ 100.892 154.352 null]
 >> endobj
-3867 0 obj <<
+3853 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F60 1917 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3884 0 obj <<
+3870 0 obj <<
 /Length 1288      
 /Filter /FlateDecode
 >>
@@ -18652,82 +18203,82 @@
 ›%³kU6½9\t&Κ¹_w­”UPµÅ¾¥íV=¼á?ÏÄHm
 endstream
 endobj
-3883 0 obj <<
+3869 0 obj <<
 /Type /Page
-/Contents 3884 0 R
-/Resources 3882 0 R
+/Contents 3870 0 R
+/Resources 3868 0 R
 /MediaBox [0 0 612 792]
-/Parent 3866 0 R
-/Annots [ 3877 0 R 3878 0 R 3879 0 R 3888 0 R 3880 0 R 3881 0 R ]
+/Parent 3852 0 R
+/Annots [ 3863 0 R 3864 0 R 3865 0 R 3874 0 R 3866 0 R 3867 0 R ]
 >> endobj
-3877 0 obj <<
+3863 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [298.933 502.883 370.301 514.572]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-bldg1-smbconf) >>
 >> endobj
-3878 0 obj <<
+3864 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [377.035 502.883 448.402 514.572]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-shareconfa) >>
 >> endobj
-3879 0 obj <<
+3865 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [477.996 502.883 511.352 514.572]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-shareconfb) >>
 >> endobj
-3888 0 obj <<
+3874 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.25 489.334 247.242 501.023]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-shareconfb) >>
 >> endobj
-3880 0 obj <<
+3866 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [393.947 454.789 456.546 466.478]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-massive) >>
 >> endobj
-3881 0 obj <<
+3867 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.753 433.792 450.743 445.482]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-PAM-NSS) >>
 >> endobj
-3885 0 obj <<
-/D [3883 0 R /XYZ 151.701 685.529 null]
+3871 0 obj <<
+/D [3869 0 R /XYZ 151.701 685.529 null]
 >> endobj
 390 0 obj <<
-/D [3883 0 R /XYZ 151.701 577.443 null]
+/D [3869 0 R /XYZ 151.701 577.443 null]
 >> endobj
-3886 0 obj <<
-/D [3883 0 R /XYZ 151.701 545.474 null]
+3872 0 obj <<
+/D [3869 0 R /XYZ 151.701 545.474 null]
 >> endobj
-3887 0 obj <<
-/D [3883 0 R /XYZ 151.701 524.875 null]
+3873 0 obj <<
+/D [3869 0 R /XYZ 151.701 524.875 null]
 >> endobj
-3889 0 obj <<
-/D [3883 0 R /XYZ 151.701 476.781 null]
+3875 0 obj <<
+/D [3869 0 R /XYZ 151.701 476.781 null]
 >> endobj
-3890 0 obj <<
-/D [3883 0 R /XYZ 151.701 455.785 null]
+3876 0 obj <<
+/D [3869 0 R /XYZ 151.701 455.785 null]
 >> endobj
-3891 0 obj <<
-/D [3883 0 R /XYZ 151.701 420.937 null]
+3877 0 obj <<
+/D [3869 0 R /XYZ 151.701 420.937 null]
 >> endobj
-3882 0 obj <<
+3868 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F17 1131 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3895 0 obj <<
+3881 0 obj <<
 /Length 955       
 /Filter /FlateDecode
 >>
@@ -18745,24 +18296,24 @@
 +üÃô/=°°|
 endstream
 endobj
-3894 0 obj <<
+3880 0 obj <<
 /Type /Page
-/Contents 3895 0 R
-/Resources 3893 0 R
+/Contents 3881 0 R
+/Resources 3879 0 R
 /MediaBox [0 0 612 792]
-/Parent 3866 0 R
+/Parent 3852 0 R
 >> endobj
-3896 0 obj <<
-/D [3894 0 R /XYZ 100.892 685.529 null]
+3882 0 obj <<
+/D [3880 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3897 0 obj <<
-/D [3894 0 R /XYZ 100.892 475.919 null]
+3883 0 obj <<
+/D [3880 0 R /XYZ 100.892 475.919 null]
 >> endobj
-3893 0 obj <<
+3879 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3900 0 obj <<
+3886 0 obj <<
 /Length 1558      
 /Filter /FlateDecode
 >>
@@ -18786,30 +18337,30 @@
 OøÑýfÈñb
 endstream
 endobj
-3899 0 obj <<
+3885 0 obj <<
 /Type /Page
-/Contents 3900 0 R
-/Resources 3898 0 R
+/Contents 3886 0 R
+/Resources 3884 0 R
 /MediaBox [0 0 612 792]
-/Parent 3866 0 R
+/Parent 3852 0 R
 >> endobj
-3901 0 obj <<
-/D [3899 0 R /XYZ 151.701 685.529 null]
+3887 0 obj <<
+/D [3885 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3902 0 obj <<
-/D [3899 0 R /XYZ 151.701 582.578 null]
+3888 0 obj <<
+/D [3885 0 R /XYZ 151.701 582.578 null]
 >> endobj
-3903 0 obj <<
-/D [3899 0 R /XYZ 151.701 483.686 null]
+3889 0 obj <<
+/D [3885 0 R /XYZ 151.701 483.686 null]
 >> endobj
-3904 0 obj <<
-/D [3899 0 R /XYZ 151.701 209.315 null]
+3890 0 obj <<
+/D [3885 0 R /XYZ 151.701 209.315 null]
 >> endobj
-3898 0 obj <<
+3884 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3907 0 obj <<
+3893 0 obj <<
 /Length 1112      
 /Filter /FlateDecode
 >>
@@ -18826,27 +18377,27 @@
 Â
 endstream
 endobj
-3906 0 obj <<
+3892 0 obj <<
 /Type /Page
-/Contents 3907 0 R
-/Resources 3905 0 R
+/Contents 3893 0 R
+/Resources 3891 0 R
 /MediaBox [0 0 612 792]
-/Parent 3866 0 R
+/Parent 3852 0 R
 >> endobj
-3908 0 obj <<
-/D [3906 0 R /XYZ 100.892 685.529 null]
+3894 0 obj <<
+/D [3892 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3909 0 obj <<
-/D [3906 0 R /XYZ 100.892 633.993 null]
+3895 0 obj <<
+/D [3892 0 R /XYZ 100.892 633.993 null]
 >> endobj
-3910 0 obj <<
-/D [3906 0 R /XYZ 100.892 257.326 null]
+3896 0 obj <<
+/D [3892 0 R /XYZ 100.892 257.326 null]
 >> endobj
-3905 0 obj <<
+3891 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3913 0 obj <<
+3899 0 obj <<
 /Length 1377      
 /Filter /FlateDecode
 >>
@@ -18864,27 +18415,27 @@
 ‹ÙGÉóêPšÊŒP’N0LN°¤âa¦[®Ÿã´©Ñ"x•7;Ú°á"![¼hÏ–*Üfë(OÝöò¯|ô;,א¬ºÃú Tèÿfla‡W‘(Þ·ÍW£9óZ†·oVf$ëz½-ó[¾Þ6Û¿}_ãüA-?ÊV”ÉL­W$ûŽKõM d>ÒîYÐÝÌ¿F¯ÀȘ?{T_ƒ¿í„Ç.½ù®xJ+øF^uá_ϳégœ
 endstream
 endobj
-3912 0 obj <<
+3898 0 obj <<
 /Type /Page
-/Contents 3913 0 R
-/Resources 3911 0 R
+/Contents 3899 0 R
+/Resources 3897 0 R
 /MediaBox [0 0 612 792]
-/Parent 3917 0 R
+/Parent 3903 0 R
 >> endobj
-3914 0 obj <<
-/D [3912 0 R /XYZ 151.701 685.529 null]
+3900 0 obj <<
+/D [3898 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3915 0 obj <<
-/D [3912 0 R /XYZ 151.701 545.171 null]
+3901 0 obj <<
+/D [3898 0 R /XYZ 151.701 545.171 null]
 >> endobj
-3916 0 obj <<
-/D [3912 0 R /XYZ 151.701 217.595 null]
+3902 0 obj <<
+/D [3898 0 R /XYZ 151.701 217.595 null]
 >> endobj
-3911 0 obj <<
+3897 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3924 0 obj <<
+3910 0 obj <<
 /Length 1841      
 /Filter /FlateDecode
 >>
@@ -18904,75 +18455,75 @@
 Ð]@òOuŽ'ï~D™ÀC[ÅCkK뜹Vr΂ÐðšÊ9è“!TÄãóFµ;Uçë…júÞïV.ã‡Z
 endstream
 endobj
-3923 0 obj <<
+3909 0 obj <<
 /Type /Page
-/Contents 3924 0 R
-/Resources 3922 0 R
+/Contents 3910 0 R
+/Resources 3908 0 R
 /MediaBox [0 0 612 792]
-/Parent 3917 0 R
-/Annots [ 3918 0 R 3919 0 R 3920 0 R 3927 0 R 3921 0 R ]
+/Parent 3903 0 R
+/Annots [ 3904 0 R 3905 0 R 3906 0 R 3913 0 R 3907 0 R ]
 >> endobj
-3918 0 obj <<
+3904 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [248.123 453.866 319.491 465.555]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-bldg2-smbconf) >>
 >> endobj
-3919 0 obj <<
+3905 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [326.225 453.866 397.593 465.555]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-shareconfa) >>
 >> endobj
-3920 0 obj <<
+3906 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [427.187 453.866 460.543 465.555]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-shareconfb) >>
 >> endobj
-3927 0 obj <<
+3913 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.441 440.316 196.432 452.006]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-shareconfb) >>
 >> endobj
-3921 0 obj <<
+3907 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [325.793 404.947 380.02 416.637]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-bldg1) >>
 >> endobj
-3925 0 obj <<
-/D [3923 0 R /XYZ 100.892 685.529 null]
+3911 0 obj <<
+/D [3909 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3926 0 obj <<
-/D [3923 0 R /XYZ 100.892 478.803 null]
+3912 0 obj <<
+/D [3909 0 R /XYZ 100.892 478.803 null]
 >> endobj
-3928 0 obj <<
-/D [3923 0 R /XYZ 100.892 427.763 null]
+3914 0 obj <<
+/D [3909 0 R /XYZ 100.892 427.763 null]
 >> endobj
 394 0 obj <<
-/D [3923 0 R /XYZ 100.892 374.55 null]
+/D [3909 0 R /XYZ 100.892 374.55 null]
 >> endobj
-3929 0 obj <<
-/D [3923 0 R /XYZ 100.892 341.757 null]
+3915 0 obj <<
+/D [3909 0 R /XYZ 100.892 341.757 null]
 >> endobj
 398 0 obj <<
-/D [3923 0 R /XYZ 100.892 224.718 null]
+/D [3909 0 R /XYZ 100.892 224.718 null]
 >> endobj
-3930 0 obj <<
-/D [3923 0 R /XYZ 100.892 194.937 null]
+3916 0 obj <<
+/D [3909 0 R /XYZ 100.892 194.937 null]
 >> endobj
-3922 0 obj <<
+3908 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R /F17 1131 0 R /F60 1917 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3934 0 obj <<
+3920 0 obj <<
 /Length 1146      
 /Filter /FlateDecode
 >>
@@ -18987,27 +18538,27 @@
 ¼.!Á.«õ8}ϵ^U#qUu”·H¼iÛÔÒ_xlŸ¹ ò|÷îŸ4´Oªïa8¨÷וuÒ#}¡‹*n|I|TsztÛ hˆÏ„^:ý®:ââzÛ^ãgº–Uc}cÜ[~?T¯ïq…Gýß¡âQû
 endstream
 endobj
-3933 0 obj <<
+3919 0 obj <<
 /Type /Page
-/Contents 3934 0 R
-/Resources 3932 0 R
+/Contents 3920 0 R
+/Resources 3918 0 R
 /MediaBox [0 0 612 792]
-/Parent 3917 0 R
+/Parent 3903 0 R
 >> endobj
-3935 0 obj <<
-/D [3933 0 R /XYZ 151.701 685.529 null]
+3921 0 obj <<
+/D [3919 0 R /XYZ 151.701 685.529 null]
 >> endobj
 402 0 obj <<
-/D [3933 0 R /XYZ 151.701 460.391 null]
+/D [3919 0 R /XYZ 151.701 460.391 null]
 >> endobj
-3936 0 obj <<
-/D [3933 0 R /XYZ 151.701 430.024 null]
+3922 0 obj <<
+/D [3919 0 R /XYZ 151.701 430.024 null]
 >> endobj
-3932 0 obj <<
+3918 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3940 0 obj <<
+3926 0 obj <<
 /Length 1790      
 /Filter /FlateDecode
 >>
@@ -19033,34 +18584,34 @@
 oú>ªô~µ ëåíúæÍÛ›ëõjýñ·Íû÷7ëèúëîgÂ$0›Šbœ˜ÿyF{¹‚ñþÙ¬À
 endstream
 endobj
-3939 0 obj <<
+3925 0 obj <<
 /Type /Page
-/Contents 3940 0 R
-/Resources 3938 0 R
+/Contents 3926 0 R
+/Resources 3924 0 R
 /MediaBox [0 0 612 792]
-/Parent 3917 0 R
-/Annots [ 3937 0 R ]
+/Parent 3903 0 R
+/Annots [ 3923 0 R ]
 >> endobj
-3937 0 obj <<
+3923 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 375.13 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTOOLS.EXE)>>
 >> endobj
-3941 0 obj <<
-/D [3939 0 R /XYZ 100.892 685.529 null]
+3927 0 obj <<
+/D [3925 0 R /XYZ 100.892 685.529 null]
 >> endobj
 406 0 obj <<
-/D [3939 0 R /XYZ 100.892 256.119 null]
+/D [3925 0 R /XYZ 100.892 256.119 null]
 >> endobj
-3942 0 obj <<
-/D [3939 0 R /XYZ 100.892 227.714 null]
+3928 0 obj <<
+/D [3925 0 R /XYZ 100.892 227.714 null]
 >> endobj
-3938 0 obj <<
+3924 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R /F54 1912 0 R /F30 1928 0 R /F17 1131 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3946 0 obj <<
+3932 0 obj <<
 /Length 2211      
 /Filter /FlateDecode
 >>
@@ -19081,34 +18632,34 @@
 ýûþHӐŽ†—ƒçÒGèÜœ‹gbi-}ÔrQÊBø)7êÞï{2íröí\½»ˆþ+LY[‡ƒNâ×=±ÈjE\ٝ§Ð+)BY|ù}‰·!q´pk¡`îl´§o[þk֍›C‚58Š+ׁ}… &§¶¡;[ëÙ”U6tR ÷.¨„Šz{êˆKí.(ݺ:/›9TZː‰Áuߍ5DŸ®}h™fãácßì·C×Çsýß>ŠT²TßÝ7C)"ÕI¦©íã,…vL$Šq•Në=þš±œcÑþZ™¨¸ú)›Š:·Cߟ¾]­.—{*?c¡Äšv³|rš€–Ké¡ÓÿÛDööÐù?تã
 endstream
 endobj
-3945 0 obj <<
+3931 0 obj <<
 /Type /Page
-/Contents 3946 0 R
-/Resources 3944 0 R
+/Contents 3932 0 R
+/Resources 3930 0 R
 /MediaBox [0 0 612 792]
-/Parent 3917 0 R
-/Annots [ 3943 0 R ]
+/Parent 3903 0 R
+/Annots [ 3929 0 R ]
 >> endobj
-3943 0 obj <<
+3929 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 280.013 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.kixtart.org)>>
 >> endobj
-3947 0 obj <<
-/D [3945 0 R /XYZ 151.701 685.529 null]
+3933 0 obj <<
+/D [3931 0 R /XYZ 151.701 685.529 null]
 >> endobj
 410 0 obj <<
-/D [3945 0 R /XYZ 151.701 355.468 null]
+/D [3931 0 R /XYZ 151.701 355.468 null]
 >> endobj
-3948 0 obj <<
-/D [3945 0 R /XYZ 151.701 328.019 null]
+3934 0 obj <<
+/D [3931 0 R /XYZ 151.701 328.019 null]
 >> endobj
-3944 0 obj <<
+3930 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R /F51 1134 0 R /F30 1928 0 R /F17 1131 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3951 0 obj <<
+3937 0 obj <<
 /Length 1185      
 /Filter /FlateDecode
 >>
@@ -19125,33 +18676,33 @@
 ü®w¬±”ÎœÞ_^Ï.oœýЉþ7o×{nyõÁ†û¿¥)FÖ
 endstream
 endobj
-3950 0 obj <<
+3936 0 obj <<
 /Type /Page
-/Contents 3951 0 R
-/Resources 3949 0 R
+/Contents 3937 0 R
+/Resources 3935 0 R
 /MediaBox [0 0 612 792]
-/Parent 3917 0 R
+/Parent 3903 0 R
 >> endobj
-3952 0 obj <<
-/D [3950 0 R /XYZ 100.892 685.529 null]
+3938 0 obj <<
+/D [3936 0 R /XYZ 100.892 685.529 null]
 >> endobj
-3953 0 obj <<
-/D [3950 0 R /XYZ 100.892 660.623 null]
+3939 0 obj <<
+/D [3936 0 R /XYZ 100.892 660.623 null]
 >> endobj
-3954 0 obj <<
-/D [3950 0 R /XYZ 100.892 647.543 null]
+3940 0 obj <<
+/D [3936 0 R /XYZ 100.892 647.543 null]
 >> endobj
-3955 0 obj <<
-/D [3950 0 R /XYZ 100.892 463.846 null]
+3941 0 obj <<
+/D [3936 0 R /XYZ 100.892 463.846 null]
 >> endobj
-3956 0 obj <<
-/D [3950 0 R /XYZ 100.892 312.869 null]
+3942 0 obj <<
+/D [3936 0 R /XYZ 100.892 312.869 null]
 >> endobj
-3949 0 obj <<
+3935 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3960 0 obj <<
+3946 0 obj <<
 /Length 1239      
 /Filter /FlateDecode
 >>
@@ -19172,34 +18723,34 @@
 ¨pIÇh¿Ù~;”ÿ9L#
 endstream
 endobj
-3959 0 obj <<
+3945 0 obj <<
 /Type /Page
-/Contents 3960 0 R
-/Resources 3958 0 R
+/Contents 3946 0 R
+/Resources 3944 0 R
 /MediaBox [0 0 612 792]
-/Parent 3963 0 R
-/Annots [ 3957 0 R ]
+/Parent 3949 0 R
+/Annots [ 3943 0 R ]
 >> endobj
-3957 0 obj <<
+3943 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 468.803 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://support.microsoft.com/default.aspx?scid=kb;EN-US;168475)>>
 >> endobj
-3961 0 obj <<
-/D [3959 0 R /XYZ 151.701 685.529 null]
+3947 0 obj <<
+/D [3945 0 R /XYZ 151.701 685.529 null]
 >> endobj
 414 0 obj <<
-/D [3959 0 R /XYZ 151.701 338.441 null]
+/D [3945 0 R /XYZ 151.701 338.441 null]
 >> endobj
-3962 0 obj <<
-/D [3959 0 R /XYZ 151.701 302.796 null]
+3948 0 obj <<
+/D [3945 0 R /XYZ 151.701 302.796 null]
 >> endobj
-3958 0 obj <<
+3944 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F17 1131 0 R /F15 1133 0 R /F30 1928 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3968 0 obj <<
+3954 0 obj <<
 /Length 2032      
 /Filter /FlateDecode
 >>
@@ -19222,60 +18773,60 @@
 @9öKî9qE‡V¾¸¾yuóòîãìöÅè@.ÁŸòIË1?¸<hiX<àõ—ޝ²H(:™9å(ŽA†ÿ“¨ÿ·‹ª6ñ­…0÷–úg{ñõ!öâî!Ò¡¾‚©áwªÕbiå™mw¹†ÑAY‹Èƒß§ÝOZêz’Úýuuµ#Á„ª÷ÛÝ‘ÎǬöµms+h=ý¡MŠ,:Äš)@Ð@/ëª Ã_ZHŸû™Ê~h è÷ÍjŸ0ÃüË›º›
 endstream
 endobj
-3967 0 obj <<
+3953 0 obj <<
 /Type /Page
-/Contents 3968 0 R
-/Resources 3966 0 R
+/Contents 3954 0 R
+/Resources 3952 0 R
 /MediaBox [0 0 612 792]
-/Parent 3963 0 R
-/Annots [ 3964 0 R 3965 0 R ]
+/Parent 3949 0 R
+/Annots [ 3950 0 R 3951 0 R ]
 >> endobj
-3964 0 obj <<
+3950 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [389.29 289.916 439.646 301.606]
 /Subtype /Link
 /A << /S /GoTo /D (XP-screen001) >>
 >> endobj
-3965 0 obj <<
+3951 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [323.967 131.677 371.173 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (proffold) >>
 >> endobj
-3969 0 obj <<
-/D [3967 0 R /XYZ 100.892 685.529 null]
+3955 0 obj <<
+/D [3953 0 R /XYZ 100.892 685.529 null]
 >> endobj
 418 0 obj <<
-/D [3967 0 R /XYZ 100.892 660.623 null]
+/D [3953 0 R /XYZ 100.892 660.623 null]
 >> endobj
-3535 0 obj <<
-/D [3967 0 R /XYZ 100.892 630.478 null]
+3524 0 obj <<
+/D [3953 0 R /XYZ 100.892 630.478 null]
 >> endobj
-3970 0 obj <<
-/D [3967 0 R /XYZ 100.892 567.974 null]
+3956 0 obj <<
+/D [3953 0 R /XYZ 100.892 567.974 null]
 >> endobj
-3971 0 obj <<
-/D [3967 0 R /XYZ 100.892 516.897 null]
+3957 0 obj <<
+/D [3953 0 R /XYZ 100.892 516.897 null]
 >> endobj
-3972 0 obj <<
-/D [3967 0 R /XYZ 100.892 459.635 null]
+3958 0 obj <<
+/D [3953 0 R /XYZ 100.892 459.635 null]
 >> endobj
-3973 0 obj <<
-/D [3967 0 R /XYZ 100.892 397.13 null]
+3959 0 obj <<
+/D [3953 0 R /XYZ 100.892 397.13 null]
 >> endobj
-3974 0 obj <<
-/D [3967 0 R /XYZ 100.892 290.912 null]
+3960 0 obj <<
+/D [3953 0 R /XYZ 100.892 290.912 null]
 >> endobj
-3975 0 obj <<
-/D [3967 0 R /XYZ 100.892 153.924 null]
+3961 0 obj <<
+/D [3953 0 R /XYZ 100.892 153.924 null]
 >> endobj
-3966 0 obj <<
+3952 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3982 0 obj <<
+3968 0 obj <<
 /Length 2571      
 /Filter /FlateDecode
 >>
@@ -19302,50 +18853,50 @@
 bOM¹×¤ÍTAú¬¥ÄÕ­F=(Φn'©ÇÎR/ÿI¤E"£ËÆ’žFÎ=äB—8+œ®¿L_~HþƽÆ
 endstream
 endobj
-3981 0 obj <<
+3967 0 obj <<
 /Type /Page
-/Contents 3982 0 R
-/Resources 3980 0 R
+/Contents 3968 0 R
+/Resources 3966 0 R
 /MediaBox [0 0 612 792]
-/Parent 3963 0 R
-/Annots [ 3978 0 R ]
+/Parent 3949 0 R
+/Annots [ 3964 0 R ]
 >> endobj
-3978 0 obj <<
+3964 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.407 542.473 450.511 554.162]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-locgrppol) >>
 >> endobj
-3983 0 obj <<
-/D [3981 0 R /XYZ 151.701 685.529 null]
+3969 0 obj <<
+/D [3967 0 R /XYZ 151.701 685.529 null]
 >> endobj
-3984 0 obj <<
-/D [3981 0 R /XYZ 151.701 620.444 null]
+3970 0 obj <<
+/D [3967 0 R /XYZ 151.701 620.444 null]
 >> endobj
-3985 0 obj <<
-/D [3981 0 R /XYZ 151.701 587.874 null]
+3971 0 obj <<
+/D [3967 0 R /XYZ 151.701 587.874 null]
 >> endobj
-3986 0 obj <<
-/D [3981 0 R /XYZ 151.701 564.611 null]
+3972 0 obj <<
+/D [3967 0 R /XYZ 151.701 564.611 null]
 >> endobj
-3987 0 obj <<
-/D [3981 0 R /XYZ 151.701 529.92 null]
+3973 0 obj <<
+/D [3967 0 R /XYZ 151.701 529.92 null]
 >> endobj
-3988 0 obj <<
-/D [3981 0 R /XYZ 151.701 352.144 null]
+3974 0 obj <<
+/D [3967 0 R /XYZ 151.701 352.144 null]
 >> endobj
 422 0 obj <<
-/D [3981 0 R /XYZ 151.701 289.058 null]
+/D [3967 0 R /XYZ 151.701 289.058 null]
 >> endobj
-3989 0 obj <<
-/D [3981 0 R /XYZ 151.701 262.077 null]
+3975 0 obj <<
+/D [3967 0 R /XYZ 151.701 262.077 null]
 >> endobj
-3980 0 obj <<
+3966 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R /F17 1131 0 R /F54 1912 0 R /F30 1928 0 R /F31 1929 0 R /F61 1976 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-3992 0 obj <<
+3978 0 obj <<
 /Length 1350      
 /Filter /FlateDecode
 >>
@@ -19362,14 +18913,14 @@
 ûÂ’¤ØÛQʪ"7˜	ñ£,N]…)arפ}ï•õ‘FëÌî?ÛáÔ24—QÒüª$‹|k0íÊùSŠÖ
 endstream
 endobj
-3991 0 obj <<
+3977 0 obj <<
 /Type /Page
-/Contents 3992 0 R
-/Resources 3990 0 R
+/Contents 3978 0 R
+/Resources 3976 0 R
 /MediaBox [0 0 612 792]
-/Parent 3963 0 R
+/Parent 3949 0 R
 >> endobj
-3979 0 obj <<
+3965 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 508
@@ -19509,33 +19060,33 @@
 úyáùô¹çsV|ú)ý±™_ÿ›5v    ‡² }×sÿÿ¸<   ºãÿ(Eñ
 endstream
 endobj
-3993 0 obj <<
-/D [3991 0 R /XYZ 100.892 685.529 null]
+3979 0 obj <<
+/D [3977 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1754 0 obj <<
-/D [3991 0 R /XYZ 100.892 660.623 null]
+/D [3977 0 R /XYZ 100.892 660.623 null]
 >> endobj
-3976 0 obj <<
-/D [3991 0 R /XYZ 100.892 643.753 null]
+3962 0 obj <<
+/D [3977 0 R /XYZ 100.892 643.753 null]
 >> endobj
 1855 0 obj <<
-/D [3991 0 R /XYZ 100.892 375.842 null]
+/D [3977 0 R /XYZ 100.892 375.842 null]
 >> endobj
-3977 0 obj <<
-/D [3991 0 R /XYZ 100.892 361.093 null]
+3963 0 obj <<
+/D [3977 0 R /XYZ 100.892 361.093 null]
 >> endobj
-3994 0 obj <<
-/D [3991 0 R /XYZ 100.892 169.828 null]
+3980 0 obj <<
+/D [3977 0 R /XYZ 100.892 169.828 null]
 >> endobj
-3995 0 obj <<
-/D [3991 0 R /XYZ 100.892 143.415 null]
+3981 0 obj <<
+/D [3977 0 R /XYZ 100.892 143.415 null]
 >> endobj
-3990 0 obj <<
+3976 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F54 1912 0 R /F17 1131 0 R >>
-/XObject << /Im11 3979 0 R >>
+/XObject << /Im11 3965 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-3998 0 obj <<
+3984 0 obj <<
 /Length 1750      
 /Filter /FlateDecode
 >>
@@ -19557,43 +19108,43 @@
 c$án‹Bn$¼ÂrK|Óø×àþ-˜kÏDx¶qf@ƒðPd\H-Id4&¦_é	ÏÞlUôª…Çá‡=+	Z“‘Z÷V„ó_ÿR±”‘p”HB+ÿv-àŠeA=Tæ^0Ù”·Ø’Þ5ðÅ«9Ð\u@±Î½cðmÑàÃðC÷–À•/Õ{ªõ“:ØôwPˆiò☇=ó˶ÊåÐSŒTÛ]eñÖ0Џ¶ØÞUýdãG¶H×u8ÊF¯  Þ=Ò=HIdáZK“rQ{¾‰Äf÷¿õü¥·ojû;ÿ«¸$/ýM¨]ÈÌ£›qråÚ²‰2HœLGÒÀÃ?ý­ @j¾ÿWa¬£`1°Õ›‡t€8Ϙäê+%:ƒêçù¿”o¾Cɉ7§ÿ‘ü˜ÊyÜ
 endstream
 endobj
-3997 0 obj <<
+3983 0 obj <<
 /Type /Page
-/Contents 3998 0 R
-/Resources 3996 0 R
+/Contents 3984 0 R
+/Resources 3982 0 R
 /MediaBox [0 0 612 792]
-/Parent 3963 0 R
+/Parent 3949 0 R
 >> endobj
-3999 0 obj <<
-/D [3997 0 R /XYZ 151.701 685.529 null]
+3985 0 obj <<
+/D [3983 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4000 0 obj <<
-/D [3997 0 R /XYZ 151.701 660.623 null]
+3986 0 obj <<
+/D [3983 0 R /XYZ 151.701 660.623 null]
 >> endobj
-4001 0 obj <<
-/D [3997 0 R /XYZ 151.701 649.664 null]
+3987 0 obj <<
+/D [3983 0 R /XYZ 151.701 649.664 null]
 >> endobj
-4002 0 obj <<
-/D [3997 0 R /XYZ 151.701 582.322 null]
+3988 0 obj <<
+/D [3983 0 R /XYZ 151.701 582.322 null]
 >> endobj
-4003 0 obj <<
-/D [3997 0 R /XYZ 151.701 424.378 null]
+3989 0 obj <<
+/D [3983 0 R /XYZ 151.701 424.378 null]
 >> endobj
-4004 0 obj <<
-/D [3997 0 R /XYZ 151.701 397.684 null]
+3990 0 obj <<
+/D [3983 0 R /XYZ 151.701 397.684 null]
 >> endobj
-4005 0 obj <<
-/D [3997 0 R /XYZ 151.701 373.111 null]
+3991 0 obj <<
+/D [3983 0 R /XYZ 151.701 373.111 null]
 >> endobj
-4006 0 obj <<
-/D [3997 0 R /XYZ 151.701 334.989 null]
+3992 0 obj <<
+/D [3983 0 R /XYZ 151.701 334.989 null]
 >> endobj
-3996 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R /F89 2333 0 R /F73 2334 0 R >>
-/XObject << /Im3 2328 0 R >>
+3982 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R /F89 2330 0 R /F73 2331 0 R >>
+/XObject << /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4011 0 obj <<
+3997 0 obj <<
 /Length 2046      
 /Filter /FlateDecode
 >>
@@ -19615,41 +19166,41 @@
 ¿¹$•cSÙ^òÉ_¯Po¿ˆ˜ÿ ¡å>+
 endstream
 endobj
-4010 0 obj <<
+3996 0 obj <<
 /Type /Page
-/Contents 4011 0 R
-/Resources 4009 0 R
+/Contents 3997 0 R
+/Resources 3995 0 R
 /MediaBox [0 0 612 792]
-/Parent 3963 0 R
-/Annots [ 4007 0 R 4008 0 R 4013 0 R ]
+/Parent 3949 0 R
+/Annots [ 3993 0 R 3994 0 R 3999 0 R ]
 >> endobj
-4007 0 obj <<
+3993 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 138.879 309.228 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://support.microsoft.com/kb/297019/)>>
 >> endobj
-4008 0 obj <<
+3994 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 129.215 460.543 140.871]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.windowsitpro.com/Windows/Article/ArticleID/48228/48228.html)>>
 >> endobj
-4013 0 obj <<
+3999 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [99.895 116.961 120.717 127.721]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.windowsitpro.com/Windows/Article/ArticleID/48228/48228.html)>>
 >> endobj
-4012 0 obj <<
-/D [4010 0 R /XYZ 100.892 685.529 null]
+3998 0 obj <<
+/D [3996 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4009 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F89 2333 0 R /F73 2334 0 R /F15 1133 0 R /F30 1928 0 R /F59 1905 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
-/XObject << /Im3 2328 0 R >>
+3995 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F89 2330 0 R /F73 2331 0 R /F15 1133 0 R /F30 1928 0 R /F59 1905 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
+/XObject << /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4018 0 obj <<
+4004 0 obj <<
 /Length 1922      
 /Filter /FlateDecode
 >>
@@ -19662,33 +19213,33 @@
 ʽlfÀÔÖ\Pý)Ê좱7íõÈ”AðÎã	9j©KDXyÙwn8ZTüß¡…îzžæ	‹di/¶ÇJ‹miÿê˜O$ð¿9ÕêÒ¬§£ÛC€„ž©`ŒžÉm âr§Q-5<­ÉDV—góÐԑٍòÚÿ’k ‚	¬™–eZ\9Ìol²ŒÝíì[ÑŸ:€Óe<|!Ûr>a-pÜËáS¡nÆ©fT=ý³ðFž³˜ÐP_A‘àWzú#*Ž|çb‰·—Ê#፿;h¤]¦[µ±ûƒÅâqCÙ"öî".+²û¾ÝmþY9Gr
 endstream
 endobj
-4017 0 obj <<
+4003 0 obj <<
 /Type /Page
-/Contents 4018 0 R
-/Resources 4016 0 R
+/Contents 4004 0 R
+/Resources 4002 0 R
 /MediaBox [0 0 612 792]
-/Parent 4022 0 R
+/Parent 4008 0 R
 >> endobj
-4019 0 obj <<
-/D [4017 0 R /XYZ 151.701 685.529 null]
+4005 0 obj <<
+/D [4003 0 R /XYZ 151.701 685.529 null]
 >> endobj
 426 0 obj <<
-/D [4017 0 R /XYZ 151.701 606.911 null]
+/D [4003 0 R /XYZ 151.701 606.911 null]
 >> endobj
-4020 0 obj <<
-/D [4017 0 R /XYZ 151.701 577.465 null]
+4006 0 obj <<
+/D [4003 0 R /XYZ 151.701 577.465 null]
 >> endobj
 430 0 obj <<
-/D [4017 0 R /XYZ 151.701 262.575 null]
+/D [4003 0 R /XYZ 151.701 262.575 null]
 >> endobj
-4021 0 obj <<
-/D [4017 0 R /XYZ 151.701 235.25 null]
+4007 0 obj <<
+/D [4003 0 R /XYZ 151.701 235.25 null]
 >> endobj
-4016 0 obj <<
+4002 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F17 1131 0 R /F15 1133 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4025 0 obj <<
+4011 0 obj <<
 /Length 2607      
 /Filter /FlateDecode
 >>
@@ -19707,64 +19258,64 @@
 +2}0®Î5M RÓsE¹`÷—Ù</g“ƒõ¡'Æÿ!ÞBü$Sò~øqx»1”púèÉ×ͯ8VS$!áêI/RÜ!ÿçž5sü—a<DîÐÓ¸±ßË»³ÿ+QOn
 endstream
 endobj
-4024 0 obj <<
+4010 0 obj <<
 /Type /Page
-/Contents 4025 0 R
-/Resources 4023 0 R
+/Contents 4011 0 R
+/Resources 4009 0 R
 /MediaBox [0 0 612 792]
-/Parent 4022 0 R
-/Annots [ 4014 0 R 4028 0 R 4015 0 R ]
+/Parent 4008 0 R
+/Annots [ 4000 0 R 4014 0 R 4001 0 R ]
 >> endobj
-4014 0 obj <<
+4000 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [347.353 619.448 460.543 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (appendix) >>
 >> endobj
-4028 0 obj <<
+4014 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.441 605.899 264.737 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (appendix) >>
 >> endobj
-4015 0 obj <<
+4001 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [269.411 605.899 328.979 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (domjoin) >>
 >> endobj
-4026 0 obj <<
-/D [4024 0 R /XYZ 100.892 685.529 null]
+4012 0 obj <<
+/D [4010 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4027 0 obj <<
-/D [4024 0 R /XYZ 100.892 660.623 null]
+4013 0 obj <<
+/D [4010 0 R /XYZ 100.892 660.623 null]
 >> endobj
-4029 0 obj <<
-/D [4024 0 R /XYZ 100.892 606.895 null]
+4015 0 obj <<
+/D [4010 0 R /XYZ 100.892 606.895 null]
 >> endobj
-4030 0 obj <<
-/D [4024 0 R /XYZ 100.892 548.045 null]
+4016 0 obj <<
+/D [4010 0 R /XYZ 100.892 548.045 null]
 >> endobj
-4031 0 obj <<
-/D [4024 0 R /XYZ 100.892 487.073 null]
+4017 0 obj <<
+/D [4010 0 R /XYZ 100.892 487.073 null]
 >> endobj
-4032 0 obj <<
-/D [4024 0 R /XYZ 100.892 383.333 null]
+4018 0 obj <<
+/D [4010 0 R /XYZ 100.892 383.333 null]
 >> endobj
-4033 0 obj <<
-/D [4024 0 R /XYZ 100.892 310.934 null]
+4019 0 obj <<
+/D [4010 0 R /XYZ 100.892 310.934 null]
 >> endobj
-4034 0 obj <<
-/D [4024 0 R /XYZ 100.892 193.038 null]
+4020 0 obj <<
+/D [4010 0 R /XYZ 100.892 193.038 null]
 >> endobj
-4023 0 obj <<
+4009 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F17 1131 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4037 0 obj <<
+4023 0 obj <<
 /Length 2317      
 /Filter /FlateDecode
 >>
@@ -19789,39 +19340,39 @@
 iÒk̬*r0¹·¥HŒìíø‡iP2­*­[¥»ƒM ™#˜ýŸd:^y©Ð´´Üy´žßôj§#ðªS?Ø=¼uÄàÄØñÔ(™òàKÙH»â3º´VŠÖ"oæÚs|Ü,éöhŠáØÑ[„†”s÷•ýÑVBLü&½;PQ‘•ÕsYó“$õõ”YaT¹íî‹£ÛBåÛ% 6/Z£‹æ{ôYå:7W°ãÛfèwLqü-¹sÇéì“0a³#˜øN‘“æ4Zˆ‚JÎÑŸ¹6W¹ÚhyfÊ=ôý€÷ˈVŸzÂWù¾?SY>Å.&œq¸gÂqåüp…{øS“G€D[jÒ!\³9î·¦qSº›+Ÿ[È?ýgÃð*ºp¼ †Äáqº1MAD<b>k÷<1NîÙL÷׎=ÇPG›¼bâV|L˜æfÿ½Ù^ýùЛ
 endstream
 endobj
-4036 0 obj <<
+4022 0 obj <<
 /Type /Page
-/Contents 4037 0 R
-/Resources 4035 0 R
+/Contents 4023 0 R
+/Resources 4021 0 R
 /MediaBox [0 0 612 792]
-/Parent 4022 0 R
+/Parent 4008 0 R
 >> endobj
-4038 0 obj <<
-/D [4036 0 R /XYZ 151.701 685.529 null]
+4024 0 obj <<
+/D [4022 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4039 0 obj <<
-/D [4036 0 R /XYZ 151.701 606.289 null]
+4025 0 obj <<
+/D [4022 0 R /XYZ 151.701 606.289 null]
 >> endobj
-4040 0 obj <<
-/D [4036 0 R /XYZ 151.701 505.087 null]
+4026 0 obj <<
+/D [4022 0 R /XYZ 151.701 505.087 null]
 >> endobj
-4041 0 obj <<
-/D [4036 0 R /XYZ 151.701 430.377 null]
+4027 0 obj <<
+/D [4022 0 R /XYZ 151.701 430.377 null]
 >> endobj
-4042 0 obj <<
-/D [4036 0 R /XYZ 151.701 342.118 null]
+4028 0 obj <<
+/D [4022 0 R /XYZ 151.701 342.118 null]
 >> endobj
 434 0 obj <<
-/D [4036 0 R /XYZ 151.701 267.595 null]
+/D [4022 0 R /XYZ 151.701 267.595 null]
 >> endobj
-4043 0 obj <<
-/D [4036 0 R /XYZ 151.701 243.566 null]
+4029 0 obj <<
+/D [4022 0 R /XYZ 151.701 243.566 null]
 >> endobj
-4035 0 obj <<
+4021 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4047 0 obj <<
+4033 0 obj <<
 /Length 1884      
 /Filter /FlateDecode
 >>
@@ -19843,33 +19394,33 @@
 •9­ø–Š¤ž”•ë}Ë›ÇÍ¿H7¹ž
 endstream
 endobj
-4046 0 obj <<
+4032 0 obj <<
 /Type /Page
-/Contents 4047 0 R
-/Resources 4045 0 R
+/Contents 4033 0 R
+/Resources 4031 0 R
 /MediaBox [0 0 612 792]
-/Parent 4022 0 R
+/Parent 4008 0 R
 >> endobj
-4048 0 obj <<
-/D [4046 0 R /XYZ 100.892 685.529 null]
+4034 0 obj <<
+/D [4032 0 R /XYZ 100.892 685.529 null]
 >> endobj
 438 0 obj <<
-/D [4046 0 R /XYZ 100.892 510.552 null]
+/D [4032 0 R /XYZ 100.892 510.552 null]
 >> endobj
-4049 0 obj <<
-/D [4046 0 R /XYZ 100.892 481.736 null]
+4035 0 obj <<
+/D [4032 0 R /XYZ 100.892 481.736 null]
 >> endobj
 442 0 obj <<
-/D [4046 0 R /XYZ 100.892 295.474 null]
+/D [4032 0 R /XYZ 100.892 295.474 null]
 >> endobj
-4050 0 obj <<
-/D [4046 0 R /XYZ 100.892 263.646 null]
+4036 0 obj <<
+/D [4032 0 R /XYZ 100.892 263.646 null]
 >> endobj
-4045 0 obj <<
+4031 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4053 0 obj <<
+4039 0 obj <<
 /Length 1971      
 /Filter /FlateDecode
 >>
@@ -19883,34 +19434,34 @@
 E©«áZ·&úÝv_h»kÿÁD&Ê}ö솅@IVDœeÓÿ\ð>ÿ‚ÿ ÁûG
 endstream
 endobj
-4052 0 obj <<
+4038 0 obj <<
 /Type /Page
-/Contents 4053 0 R
-/Resources 4051 0 R
+/Contents 4039 0 R
+/Resources 4037 0 R
 /MediaBox [0 0 612 792]
-/Parent 4022 0 R
-/Annots [ 4044 0 R ]
+/Parent 4008 0 R
+/Annots [ 4030 0 R ]
 >> endobj
-4044 0 obj <<
+4030 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 444.768 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.booksense.com/product/info.jsp&isbn=1565924916)>>
 >> endobj
-4054 0 obj <<
-/D [4052 0 R /XYZ 151.701 685.529 null]
+4040 0 obj <<
+/D [4038 0 R /XYZ 151.701 685.529 null]
 >> endobj
 446 0 obj <<
-/D [4052 0 R /XYZ 151.701 219.967 null]
+/D [4038 0 R /XYZ 151.701 219.967 null]
 >> endobj
-4055 0 obj <<
-/D [4052 0 R /XYZ 151.701 190.721 null]
+4041 0 obj <<
+/D [4038 0 R /XYZ 151.701 190.721 null]
 >> endobj
-4051 0 obj <<
+4037 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R /F30 1928 0 R /F54 1912 0 R /F17 1131 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4058 0 obj <<
+4044 0 obj <<
 /Length 2196      
 /Filter /FlateDecode
 >>
@@ -19942,24 +19493,24 @@
 ±°¢îµF×ÚxÃzÄ÷ã¥â¿™¦zƒ.ƒEÇHÓ|Ãj‘ WìGô>ùËé-*|ði‡Þ]—#LÁ¼ù2xIo/£9ýå´ß÷› Œ¾™
 endstream
 endobj
-4057 0 obj <<
+4043 0 obj <<
 /Type /Page
-/Contents 4058 0 R
-/Resources 4056 0 R
+/Contents 4044 0 R
+/Resources 4042 0 R
 /MediaBox [0 0 612 792]
-/Parent 4022 0 R
+/Parent 4008 0 R
 >> endobj
-4059 0 obj <<
-/D [4057 0 R /XYZ 100.892 685.529 null]
+4045 0 obj <<
+/D [4043 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4060 0 obj <<
-/D [4057 0 R /XYZ 100.892 642.766 null]
+4046 0 obj <<
+/D [4043 0 R /XYZ 100.892 642.766 null]
 >> endobj
-4056 0 obj <<
+4042 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4063 0 obj <<
+4049 0 obj <<
 /Length 2167      
 /Filter /FlateDecode
 >>
@@ -19980,21 +19531,21 @@
 Úa(;I²(çÃØ——׆.¨<”ªfÉ2_"±ÙyÞÿ¿øŒ‚ìoãs‡¾F™ ùÇšª¾Êlª*Ôi³²ùïˆsK9Iµ·Sñ*<K¯hkþÂú!›ÃI†Šù-~€Ç¡éGÓ‰cûf·øÙÐs!
 endstream
 endobj
-4062 0 obj <<
+4048 0 obj <<
 /Type /Page
-/Contents 4063 0 R
-/Resources 4061 0 R
+/Contents 4049 0 R
+/Resources 4047 0 R
 /MediaBox [0 0 612 792]
-/Parent 4065 0 R
+/Parent 4051 0 R
 >> endobj
-4064 0 obj <<
-/D [4062 0 R /XYZ 151.701 685.529 null]
+4050 0 obj <<
+/D [4048 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4061 0 obj <<
+4047 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4068 0 obj <<
+4054 0 obj <<
 /Length 2160      
 /Filter /FlateDecode
 >>
@@ -20013,21 +19564,21 @@
 ÄÂ{¼Û²=¶šÒùÙwÚ@•)¬ôÖÙ±=ŠõØ׬ªþ0ž«"î†ûúDM\(@üùÉ_uÔi3òn>,%aB¤ÛÐvôèÇ‚”‹6º/±âr-p ßV¾žÙ³ÈÆß#݉nüîáê?àêyV
 endstream
 endobj
-4067 0 obj <<
+4053 0 obj <<
 /Type /Page
-/Contents 4068 0 R
-/Resources 4066 0 R
+/Contents 4054 0 R
+/Resources 4052 0 R
 /MediaBox [0 0 612 792]
-/Parent 4065 0 R
+/Parent 4051 0 R
 >> endobj
-4069 0 obj <<
-/D [4067 0 R /XYZ 100.892 685.529 null]
+4055 0 obj <<
+/D [4053 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4066 0 obj <<
+4052 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F51 1134 0 R /F15 1133 0 R /F59 1905 0 R /F60 1917 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4072 0 obj <<
+4058 0 obj <<
 /Length 1149      
 /Filter /FlateDecode
 >>
@@ -20049,21 +19600,21 @@
 ”ÚÕ‹nÈ<[eüoéÿú/ü×ü$Ç
 endstream
 endobj
-4071 0 obj <<
+4057 0 obj <<
 /Type /Page
-/Contents 4072 0 R
-/Resources 4070 0 R
+/Contents 4058 0 R
+/Resources 4056 0 R
 /MediaBox [0 0 612 792]
-/Parent 4065 0 R
+/Parent 4051 0 R
 >> endobj
-4073 0 obj <<
-/D [4071 0 R /XYZ 151.701 685.529 null]
+4059 0 obj <<
+/D [4057 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4070 0 obj <<
+4056 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4076 0 obj <<
+4062 0 obj <<
 /Length 825       
 /Filter /FlateDecode
 >>
@@ -20077,27 +19628,27 @@
 3t"Ÿ½ÿÐçUäÆý9Ñæªí°®|XÍ]Õ]2ýw‚	}НՍ¿ ±(mŽ
 endstream
 endobj
-4075 0 obj <<
+4061 0 obj <<
 /Type /Page
-/Contents 4076 0 R
-/Resources 4074 0 R
+/Contents 4062 0 R
+/Resources 4060 0 R
 /MediaBox [0 0 612 792]
-/Parent 4065 0 R
+/Parent 4051 0 R
 >> endobj
-4077 0 obj <<
-/D [4075 0 R /XYZ 100.892 685.529 null]
+4063 0 obj <<
+/D [4061 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1562 0 obj <<
-/D [4075 0 R /XYZ 100.892 660.623 null]
+/D [4061 0 R /XYZ 100.892 660.623 null]
 >> endobj
-3663 0 obj <<
-/D [4075 0 R /XYZ 100.892 631.719 null]
+3649 0 obj <<
+/D [4061 0 R /XYZ 100.892 631.719 null]
 >> endobj
-4074 0 obj <<
+4060 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4080 0 obj <<
+4066 0 obj <<
 /Length 533       
 /Filter /FlateDecode
 >>
@@ -20107,27 +19658,27 @@
 Ólnšª¯Gîà;~OýHUãqæñè”·Ú•és˜lÇa÷ŒŽES	vÎXìÖß\×`ç
 endstream
 endobj
-4079 0 obj <<
+4065 0 obj <<
 /Type /Page
-/Contents 4080 0 R
-/Resources 4078 0 R
+/Contents 4066 0 R
+/Resources 4064 0 R
 /MediaBox [0 0 612 792]
-/Parent 4065 0 R
+/Parent 4051 0 R
 >> endobj
-4081 0 obj <<
-/D [4079 0 R /XYZ 151.701 685.529 null]
+4067 0 obj <<
+/D [4065 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1563 0 obj <<
-/D [4079 0 R /XYZ 151.701 501.426 null]
+/D [4065 0 R /XYZ 151.701 501.426 null]
 >> endobj
-4082 0 obj <<
-/D [4079 0 R /XYZ 151.701 472.522 null]
+4068 0 obj <<
+/D [4065 0 R /XYZ 151.701 472.522 null]
 >> endobj
-4078 0 obj <<
+4064 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4085 0 obj <<
+4071 0 obj <<
 /Length 550       
 /Filter /FlateDecode
 >>
@@ -20137,27 +19688,27 @@
 û»”ö¤Lî`Y:WO•2öðTüx#¸¨³¬vð´žVµÚäíÅ™Î>Hþîlö®³Ö6y7%§+ª¼,ªb”ÎáÙêß‘.‹ô»ƒmU›M9+²2?¥d1À”ÆFU«F³×–k@æϺ™b­Yõ;øÖ»ù]®í6ŸæöN×ù”‰³U™Þÿ'?!Ù´z×ôÿ=ÉM5#96dL9Ž_»í>låä–SÆ0%ò-[~xÿ.0_v
 endstream
 endobj
-4084 0 obj <<
+4070 0 obj <<
 /Type /Page
-/Contents 4085 0 R
-/Resources 4083 0 R
+/Contents 4071 0 R
+/Resources 4069 0 R
 /MediaBox [0 0 612 792]
-/Parent 4065 0 R
+/Parent 4051 0 R
 >> endobj
-4086 0 obj <<
-/D [4084 0 R /XYZ 100.892 685.529 null]
+4072 0 obj <<
+/D [4070 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1564 0 obj <<
-/D [4084 0 R /XYZ 100.892 548.848 null]
+/D [4070 0 R /XYZ 100.892 548.848 null]
 >> endobj
-3673 0 obj <<
-/D [4084 0 R /XYZ 100.892 519.944 null]
+3659 0 obj <<
+/D [4070 0 R /XYZ 100.892 519.944 null]
 >> endobj
-4083 0 obj <<
+4069 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4089 0 obj <<
+4075 0 obj <<
 /Length 546       
 /Filter /FlateDecode
 >>
@@ -20169,27 +19720,27 @@
 ̤؜ÿJ0D1}Ï?ôÒtÔCd>wH×V*=4%ÔÅ18‚â~d´ˆôS=nÍ·¸<›²uÍÔ•.Öåë_àAÚºy.,<Ó;&XÁÛ«37M17›½½)dG‚wcãteÍ«².‡Ù):G¶ºˆ¤GÀFVeöbQ[ÖæcÏ–yÅOƒ¡1lÃêUÔÚKÍÕ#ù³lÆìJ­Œ¿>€ånzÏ¥Ž÷©m¤àcjßXÔ–årÿ¿,E+w:ÖQdXnÌV]b9V¤T5¼¿±ñ>Är4æ$ÐÉ£É{b~Xÿ 0[•
 endstream
 endobj
-4088 0 obj <<
+4074 0 obj <<
 /Type /Page
-/Contents 4089 0 R
-/Resources 4087 0 R
+/Contents 4075 0 R
+/Resources 4073 0 R
 /MediaBox [0 0 612 792]
-/Parent 4091 0 R
+/Parent 4077 0 R
 >> endobj
-4090 0 obj <<
-/D [4088 0 R /XYZ 151.701 685.529 null]
+4076 0 obj <<
+/D [4074 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1565 0 obj <<
-/D [4088 0 R /XYZ 151.701 549.909 null]
+/D [4074 0 R /XYZ 151.701 549.909 null]
 >> endobj
-3681 0 obj <<
-/D [4088 0 R /XYZ 151.701 518.883 null]
+3667 0 obj <<
+/D [4074 0 R /XYZ 151.701 518.883 null]
 >> endobj
-4087 0 obj <<
+4073 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4094 0 obj <<
+4080 0 obj <<
 /Length 3687      
 /Filter /FlateDecode
 >>
@@ -20219,111 +19770,111 @@
 üZ07jÄ.;Àb»@•Ùe¹\Ù–*¨>ÖáeÜ*8•ùÝ–q{úG)™?1ïM5üKÊG¡{oÆ–üb)õŽNuÁ?@)°ë´ý¨Ãþ(ºúã}‡£ÿjxYÇÚÜêaPïǍ®d8ø§]mý?ÂØw÷
 endstream
 endobj
-4093 0 obj <<
+4079 0 obj <<
 /Type /Page
-/Contents 4094 0 R
-/Resources 4092 0 R
+/Contents 4080 0 R
+/Resources 4078 0 R
 /MediaBox [0 0 612 792]
-/Parent 4091 0 R
+/Parent 4077 0 R
 >> endobj
-4095 0 obj <<
-/D [4093 0 R /XYZ 100.892 685.529 null]
+4081 0 obj <<
+/D [4079 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1566 0 obj <<
-/D [4093 0 R /XYZ 100.892 622.244 null]
+/D [4079 0 R /XYZ 100.892 622.244 null]
 >> endobj
-3698 0 obj <<
-/D [4093 0 R /XYZ 100.892 593.946 null]
+3684 0 obj <<
+/D [4079 0 R /XYZ 100.892 593.946 null]
 >> endobj
+4082 0 obj <<
+/D [4079 0 R /XYZ 100.892 587.968 null]
+>> endobj
+4083 0 obj <<
+/D [4079 0 R /XYZ 100.892 594.244 null]
+>> endobj
+4084 0 obj <<
+/D [4079 0 R /XYZ 100.892 582.289 null]
+>> endobj
+4085 0 obj <<
+/D [4079 0 R /XYZ 100.892 570.334 null]
+>> endobj
+4086 0 obj <<
+/D [4079 0 R /XYZ 100.892 558.379 null]
+>> endobj
+4087 0 obj <<
+/D [4079 0 R /XYZ 100.892 546.424 null]
+>> endobj
+4088 0 obj <<
+/D [4079 0 R /XYZ 100.892 534.468 null]
+>> endobj
+4089 0 obj <<
+/D [4079 0 R /XYZ 100.892 522.513 null]
+>> endobj
+4090 0 obj <<
+/D [4079 0 R /XYZ 100.892 510.558 null]
+>> endobj
+4091 0 obj <<
+/D [4079 0 R /XYZ 100.892 498.603 null]
+>> endobj
+4092 0 obj <<
+/D [4079 0 R /XYZ 100.892 486.648 null]
+>> endobj
+4093 0 obj <<
+/D [4079 0 R /XYZ 100.892 474.693 null]
+>> endobj
+4094 0 obj <<
+/D [4079 0 R /XYZ 100.892 462.737 null]
+>> endobj
+4095 0 obj <<
+/D [4079 0 R /XYZ 100.892 450.782 null]
+>> endobj
 4096 0 obj <<
-/D [4093 0 R /XYZ 100.892 587.968 null]
+/D [4079 0 R /XYZ 100.892 438.827 null]
 >> endobj
 4097 0 obj <<
-/D [4093 0 R /XYZ 100.892 594.244 null]
+/D [4079 0 R /XYZ 100.892 426.872 null]
 >> endobj
 4098 0 obj <<
-/D [4093 0 R /XYZ 100.892 582.289 null]
+/D [4079 0 R /XYZ 100.892 414.917 null]
 >> endobj
 4099 0 obj <<
-/D [4093 0 R /XYZ 100.892 570.334 null]
+/D [4079 0 R /XYZ 100.892 402.962 null]
 >> endobj
 4100 0 obj <<
-/D [4093 0 R /XYZ 100.892 558.379 null]
+/D [4079 0 R /XYZ 100.892 391.006 null]
 >> endobj
 4101 0 obj <<
-/D [4093 0 R /XYZ 100.892 546.424 null]
+/D [4079 0 R /XYZ 100.892 379.051 null]
 >> endobj
 4102 0 obj <<
-/D [4093 0 R /XYZ 100.892 534.468 null]
+/D [4079 0 R /XYZ 100.892 367.096 null]
 >> endobj
 4103 0 obj <<
-/D [4093 0 R /XYZ 100.892 522.513 null]
+/D [4079 0 R /XYZ 100.892 343.186 null]
 >> endobj
 4104 0 obj <<
-/D [4093 0 R /XYZ 100.892 510.558 null]
+/D [4079 0 R /XYZ 100.892 319.275 null]
 >> endobj
 4105 0 obj <<
-/D [4093 0 R /XYZ 100.892 498.603 null]
+/D [4079 0 R /XYZ 100.892 295.365 null]
 >> endobj
 4106 0 obj <<
-/D [4093 0 R /XYZ 100.892 486.648 null]
+/D [4079 0 R /XYZ 100.892 271.455 null]
 >> endobj
 4107 0 obj <<
-/D [4093 0 R /XYZ 100.892 474.693 null]
+/D [4079 0 R /XYZ 100.892 247.544 null]
 >> endobj
 4108 0 obj <<
-/D [4093 0 R /XYZ 100.892 462.737 null]
+/D [4079 0 R /XYZ 100.892 223.634 null]
 >> endobj
 4109 0 obj <<
-/D [4093 0 R /XYZ 100.892 450.782 null]
+/D [4079 0 R /XYZ 100.892 199.724 null]
 >> endobj
-4110 0 obj <<
-/D [4093 0 R /XYZ 100.892 438.827 null]
->> endobj
-4111 0 obj <<
-/D [4093 0 R /XYZ 100.892 426.872 null]
->> endobj
-4112 0 obj <<
-/D [4093 0 R /XYZ 100.892 414.917 null]
->> endobj
-4113 0 obj <<
-/D [4093 0 R /XYZ 100.892 402.962 null]
->> endobj
-4114 0 obj <<
-/D [4093 0 R /XYZ 100.892 391.006 null]
->> endobj
-4115 0 obj <<
-/D [4093 0 R /XYZ 100.892 379.051 null]
->> endobj
-4116 0 obj <<
-/D [4093 0 R /XYZ 100.892 367.096 null]
->> endobj
-4117 0 obj <<
-/D [4093 0 R /XYZ 100.892 343.186 null]
->> endobj
-4118 0 obj <<
-/D [4093 0 R /XYZ 100.892 319.275 null]
->> endobj
-4119 0 obj <<
-/D [4093 0 R /XYZ 100.892 295.365 null]
->> endobj
-4120 0 obj <<
-/D [4093 0 R /XYZ 100.892 271.455 null]
->> endobj
-4121 0 obj <<
-/D [4093 0 R /XYZ 100.892 247.544 null]
->> endobj
-4122 0 obj <<
-/D [4093 0 R /XYZ 100.892 223.634 null]
->> endobj
-4123 0 obj <<
-/D [4093 0 R /XYZ 100.892 199.724 null]
->> endobj
-4092 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R /F11 2494 0 R >>
+4078 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R /F11 2489 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4126 0 obj <<
+4112 0 obj <<
 /Length 2242      
 /Filter /FlateDecode
 >>
@@ -20346,84 +19897,84 @@
 Ñɏ˜3øuôèoëüoííà
 endstream
 endobj
-4125 0 obj <<
+4111 0 obj <<
 /Type /Page
-/Contents 4126 0 R
-/Resources 4124 0 R
+/Contents 4112 0 R
+/Resources 4110 0 R
 /MediaBox [0 0 612 792]
-/Parent 4091 0 R
+/Parent 4077 0 R
 >> endobj
-4127 0 obj <<
-/D [4125 0 R /XYZ 151.701 685.529 null]
+4113 0 obj <<
+/D [4111 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1567 0 obj <<
-/D [4125 0 R /XYZ 151.701 520.625 null]
+/D [4111 0 R /XYZ 151.701 520.625 null]
 >> endobj
-3699 0 obj <<
-/D [4125 0 R /XYZ 151.701 492.327 null]
+3685 0 obj <<
+/D [4111 0 R /XYZ 151.701 492.327 null]
 >> endobj
-4128 0 obj <<
-/D [4125 0 R /XYZ 151.701 486.349 null]
+4114 0 obj <<
+/D [4111 0 R /XYZ 151.701 486.349 null]
 >> endobj
-4129 0 obj <<
-/D [4125 0 R /XYZ 151.701 492.625 null]
+4115 0 obj <<
+/D [4111 0 R /XYZ 151.701 492.625 null]
 >> endobj
-4130 0 obj <<
-/D [4125 0 R /XYZ 151.701 480.67 null]
+4116 0 obj <<
+/D [4111 0 R /XYZ 151.701 480.67 null]
 >> endobj
-4131 0 obj <<
-/D [4125 0 R /XYZ 151.701 468.715 null]
+4117 0 obj <<
+/D [4111 0 R /XYZ 151.701 468.715 null]
 >> endobj
-4132 0 obj <<
-/D [4125 0 R /XYZ 151.701 456.76 null]
+4118 0 obj <<
+/D [4111 0 R /XYZ 151.701 456.76 null]
 >> endobj
-4133 0 obj <<
-/D [4125 0 R /XYZ 151.701 444.805 null]
+4119 0 obj <<
+/D [4111 0 R /XYZ 151.701 444.805 null]
 >> endobj
-4134 0 obj <<
-/D [4125 0 R /XYZ 151.701 432.85 null]
+4120 0 obj <<
+/D [4111 0 R /XYZ 151.701 432.85 null]
 >> endobj
-4135 0 obj <<
-/D [4125 0 R /XYZ 151.701 420.894 null]
+4121 0 obj <<
+/D [4111 0 R /XYZ 151.701 420.894 null]
 >> endobj
-4136 0 obj <<
-/D [4125 0 R /XYZ 151.701 408.939 null]
+4122 0 obj <<
+/D [4111 0 R /XYZ 151.701 408.939 null]
 >> endobj
-4137 0 obj <<
-/D [4125 0 R /XYZ 151.701 396.984 null]
+4123 0 obj <<
+/D [4111 0 R /XYZ 151.701 396.984 null]
 >> endobj
-4138 0 obj <<
-/D [4125 0 R /XYZ 151.701 385.029 null]
+4124 0 obj <<
+/D [4111 0 R /XYZ 151.701 385.029 null]
 >> endobj
-4139 0 obj <<
-/D [4125 0 R /XYZ 151.701 373.074 null]
+4125 0 obj <<
+/D [4111 0 R /XYZ 151.701 373.074 null]
 >> endobj
-4140 0 obj <<
-/D [4125 0 R /XYZ 151.701 361.119 null]
+4126 0 obj <<
+/D [4111 0 R /XYZ 151.701 361.119 null]
 >> endobj
-4141 0 obj <<
-/D [4125 0 R /XYZ 151.701 349.163 null]
+4127 0 obj <<
+/D [4111 0 R /XYZ 151.701 349.163 null]
 >> endobj
-4142 0 obj <<
-/D [4125 0 R /XYZ 151.701 337.208 null]
+4128 0 obj <<
+/D [4111 0 R /XYZ 151.701 337.208 null]
 >> endobj
-4143 0 obj <<
-/D [4125 0 R /XYZ 151.701 325.253 null]
+4129 0 obj <<
+/D [4111 0 R /XYZ 151.701 325.253 null]
 >> endobj
-4144 0 obj <<
-/D [4125 0 R /XYZ 151.701 313.298 null]
+4130 0 obj <<
+/D [4111 0 R /XYZ 151.701 313.298 null]
 >> endobj
-4145 0 obj <<
-/D [4125 0 R /XYZ 151.701 301.343 null]
+4131 0 obj <<
+/D [4111 0 R /XYZ 151.701 301.343 null]
 >> endobj
-4146 0 obj <<
-/D [4125 0 R /XYZ 151.701 289.388 null]
+4132 0 obj <<
+/D [4111 0 R /XYZ 151.701 289.388 null]
 >> endobj
-4124 0 obj <<
+4110 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F4 2008 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4149 0 obj <<
+4135 0 obj <<
 /Length 3575      
 /Filter /FlateDecode
 >>
@@ -20460,129 +20011,129 @@
 ç©ópî	–Â9”*‚³B½: j4ÿr­ãpBk%#l4{hòrw'÷ßý°iÿÝ~=$$ÚˆßáE4m×™âçBù·;pßq8Óf0ì¦îpÒye>¾ÂçÍÁ}Ó-ÞÅœ·ÊWщ¤T•üQ+<Þ©Oì䏒¾Ûw	žIþôNþxi<¿õúäü‡Öqkví0ȏW'ŒNŸžüçmþ?îüA•
 endstream
 endobj
-4148 0 obj <<
+4134 0 obj <<
 /Type /Page
-/Contents 4149 0 R
-/Resources 4147 0 R
+/Contents 4135 0 R
+/Resources 4133 0 R
 /MediaBox [0 0 612 792]
-/Parent 4091 0 R
+/Parent 4077 0 R
 >> endobj
-4150 0 obj <<
-/D [4148 0 R /XYZ 100.892 685.529 null]
+4136 0 obj <<
+/D [4134 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1568 0 obj <<
-/D [4148 0 R /XYZ 100.892 604.574 null]
+/D [4134 0 R /XYZ 100.892 604.574 null]
 >> endobj
-3892 0 obj <<
-/D [4148 0 R /XYZ 100.892 587.704 null]
+3878 0 obj <<
+/D [4134 0 R /XYZ 100.892 587.704 null]
 >> endobj
+4137 0 obj <<
+/D [4134 0 R /XYZ 100.892 581.727 null]
+>> endobj
+4138 0 obj <<
+/D [4134 0 R /XYZ 100.892 588.003 null]
+>> endobj
+4139 0 obj <<
+/D [4134 0 R /XYZ 100.892 576.048 null]
+>> endobj
+4140 0 obj <<
+/D [4134 0 R /XYZ 100.892 564.093 null]
+>> endobj
+4141 0 obj <<
+/D [4134 0 R /XYZ 100.892 552.138 null]
+>> endobj
+4142 0 obj <<
+/D [4134 0 R /XYZ 100.892 540.182 null]
+>> endobj
+4143 0 obj <<
+/D [4134 0 R /XYZ 100.892 528.227 null]
+>> endobj
+4144 0 obj <<
+/D [4134 0 R /XYZ 100.892 516.272 null]
+>> endobj
+4145 0 obj <<
+/D [4134 0 R /XYZ 100.892 504.317 null]
+>> endobj
+4146 0 obj <<
+/D [4134 0 R /XYZ 100.892 492.362 null]
+>> endobj
+4147 0 obj <<
+/D [4134 0 R /XYZ 100.892 480.407 null]
+>> endobj
+4148 0 obj <<
+/D [4134 0 R /XYZ 100.892 468.451 null]
+>> endobj
+4149 0 obj <<
+/D [4134 0 R /XYZ 100.892 456.496 null]
+>> endobj
+4150 0 obj <<
+/D [4134 0 R /XYZ 100.892 444.541 null]
+>> endobj
 4151 0 obj <<
-/D [4148 0 R /XYZ 100.892 581.727 null]
+/D [4134 0 R /XYZ 100.892 432.586 null]
 >> endobj
 4152 0 obj <<
-/D [4148 0 R /XYZ 100.892 588.003 null]
+/D [4134 0 R /XYZ 100.892 420.631 null]
 >> endobj
 4153 0 obj <<
-/D [4148 0 R /XYZ 100.892 576.048 null]
+/D [4134 0 R /XYZ 100.892 408.676 null]
 >> endobj
 4154 0 obj <<
-/D [4148 0 R /XYZ 100.892 564.093 null]
+/D [4134 0 R /XYZ 100.892 396.72 null]
 >> endobj
 4155 0 obj <<
-/D [4148 0 R /XYZ 100.892 552.138 null]
+/D [4134 0 R /XYZ 100.892 384.765 null]
 >> endobj
 4156 0 obj <<
-/D [4148 0 R /XYZ 100.892 540.182 null]
+/D [4134 0 R /XYZ 100.892 372.81 null]
 >> endobj
 4157 0 obj <<
-/D [4148 0 R /XYZ 100.892 528.227 null]
+/D [4134 0 R /XYZ 100.892 360.855 null]
 >> endobj
 4158 0 obj <<
-/D [4148 0 R /XYZ 100.892 516.272 null]
+/D [4134 0 R /XYZ 100.892 348.9 null]
 >> endobj
 4159 0 obj <<
-/D [4148 0 R /XYZ 100.892 504.317 null]
+/D [4134 0 R /XYZ 100.892 336.945 null]
 >> endobj
 4160 0 obj <<
-/D [4148 0 R /XYZ 100.892 492.362 null]
+/D [4134 0 R /XYZ 100.892 324.989 null]
 >> endobj
 4161 0 obj <<
-/D [4148 0 R /XYZ 100.892 480.407 null]
+/D [4134 0 R /XYZ 100.892 313.034 null]
 >> endobj
 4162 0 obj <<
-/D [4148 0 R /XYZ 100.892 468.451 null]
+/D [4134 0 R /XYZ 100.892 301.079 null]
 >> endobj
 4163 0 obj <<
-/D [4148 0 R /XYZ 100.892 456.496 null]
+/D [4134 0 R /XYZ 100.892 289.124 null]
 >> endobj
 4164 0 obj <<
-/D [4148 0 R /XYZ 100.892 444.541 null]
+/D [4134 0 R /XYZ 100.892 277.169 null]
 >> endobj
 4165 0 obj <<
-/D [4148 0 R /XYZ 100.892 432.586 null]
+/D [4134 0 R /XYZ 100.892 265.214 null]
 >> endobj
 4166 0 obj <<
-/D [4148 0 R /XYZ 100.892 420.631 null]
+/D [4134 0 R /XYZ 100.892 253.258 null]
 >> endobj
 4167 0 obj <<
-/D [4148 0 R /XYZ 100.892 408.676 null]
+/D [4134 0 R /XYZ 100.892 241.303 null]
 >> endobj
 4168 0 obj <<
-/D [4148 0 R /XYZ 100.892 396.72 null]
+/D [4134 0 R /XYZ 100.892 229.348 null]
 >> endobj
 4169 0 obj <<
-/D [4148 0 R /XYZ 100.892 384.765 null]
+/D [4134 0 R /XYZ 100.892 217.393 null]
 >> endobj
 4170 0 obj <<
-/D [4148 0 R /XYZ 100.892 372.81 null]
+/D [4134 0 R /XYZ 100.892 205.438 null]
 >> endobj
-4171 0 obj <<
-/D [4148 0 R /XYZ 100.892 360.855 null]
->> endobj
-4172 0 obj <<
-/D [4148 0 R /XYZ 100.892 348.9 null]
->> endobj
-4173 0 obj <<
-/D [4148 0 R /XYZ 100.892 336.945 null]
->> endobj
-4174 0 obj <<
-/D [4148 0 R /XYZ 100.892 324.989 null]
->> endobj
-4175 0 obj <<
-/D [4148 0 R /XYZ 100.892 313.034 null]
->> endobj
-4176 0 obj <<
-/D [4148 0 R /XYZ 100.892 301.079 null]
->> endobj
-4177 0 obj <<
-/D [4148 0 R /XYZ 100.892 289.124 null]
->> endobj
-4178 0 obj <<
-/D [4148 0 R /XYZ 100.892 277.169 null]
->> endobj
-4179 0 obj <<
-/D [4148 0 R /XYZ 100.892 265.214 null]
->> endobj
-4180 0 obj <<
-/D [4148 0 R /XYZ 100.892 253.258 null]
->> endobj
-4181 0 obj <<
-/D [4148 0 R /XYZ 100.892 241.303 null]
->> endobj
-4182 0 obj <<
-/D [4148 0 R /XYZ 100.892 229.348 null]
->> endobj
-4183 0 obj <<
-/D [4148 0 R /XYZ 100.892 217.393 null]
->> endobj
-4184 0 obj <<
-/D [4148 0 R /XYZ 100.892 205.438 null]
->> endobj
-4147 0 obj <<
+4133 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4187 0 obj <<
+4173 0 obj <<
 /Length 3568      
 /Filter /FlateDecode
 >>
@@ -20624,129 +20175,129 @@
 O·þÓ%€˜~·‡|œüé¿À[ãùÍÝÿ]@÷gùO1rEtäñâ„ÞÙÕ“ÿñ°•ÿ0SHj
 endstream
 endobj
-4186 0 obj <<
+4172 0 obj <<
 /Type /Page
-/Contents 4187 0 R
-/Resources 4185 0 R
+/Contents 4173 0 R
+/Resources 4171 0 R
 /MediaBox [0 0 612 792]
-/Parent 4091 0 R
+/Parent 4077 0 R
 >> endobj
-4188 0 obj <<
-/D [4186 0 R /XYZ 151.701 685.529 null]
+4174 0 obj <<
+/D [4172 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1569 0 obj <<
-/D [4186 0 R /XYZ 151.701 604.574 null]
+/D [4172 0 R /XYZ 151.701 604.574 null]
 >> endobj
-3931 0 obj <<
-/D [4186 0 R /XYZ 151.701 587.704 null]
+3917 0 obj <<
+/D [4172 0 R /XYZ 151.701 587.704 null]
 >> endobj
+4175 0 obj <<
+/D [4172 0 R /XYZ 151.701 581.727 null]
+>> endobj
+4176 0 obj <<
+/D [4172 0 R /XYZ 151.701 588.003 null]
+>> endobj
+4177 0 obj <<
+/D [4172 0 R /XYZ 151.701 576.048 null]
+>> endobj
+4178 0 obj <<
+/D [4172 0 R /XYZ 151.701 564.093 null]
+>> endobj
+4179 0 obj <<
+/D [4172 0 R /XYZ 151.701 552.138 null]
+>> endobj
+4180 0 obj <<
+/D [4172 0 R /XYZ 151.701 540.182 null]
+>> endobj
+4181 0 obj <<
+/D [4172 0 R /XYZ 151.701 528.227 null]
+>> endobj
+4182 0 obj <<
+/D [4172 0 R /XYZ 151.701 516.272 null]
+>> endobj
+4183 0 obj <<
+/D [4172 0 R /XYZ 151.701 504.317 null]
+>> endobj
+4184 0 obj <<
+/D [4172 0 R /XYZ 151.701 492.362 null]
+>> endobj
+4185 0 obj <<
+/D [4172 0 R /XYZ 151.701 480.407 null]
+>> endobj
+4186 0 obj <<
+/D [4172 0 R /XYZ 151.701 468.451 null]
+>> endobj
+4187 0 obj <<
+/D [4172 0 R /XYZ 151.701 456.496 null]
+>> endobj
+4188 0 obj <<
+/D [4172 0 R /XYZ 151.701 444.541 null]
+>> endobj
 4189 0 obj <<
-/D [4186 0 R /XYZ 151.701 581.727 null]
+/D [4172 0 R /XYZ 151.701 432.586 null]
 >> endobj
 4190 0 obj <<
-/D [4186 0 R /XYZ 151.701 588.003 null]
+/D [4172 0 R /XYZ 151.701 420.631 null]
 >> endobj
 4191 0 obj <<
-/D [4186 0 R /XYZ 151.701 576.048 null]
+/D [4172 0 R /XYZ 151.701 408.676 null]
 >> endobj
 4192 0 obj <<
-/D [4186 0 R /XYZ 151.701 564.093 null]
+/D [4172 0 R /XYZ 151.701 396.72 null]
 >> endobj
 4193 0 obj <<
-/D [4186 0 R /XYZ 151.701 552.138 null]
+/D [4172 0 R /XYZ 151.701 384.765 null]
 >> endobj
 4194 0 obj <<
-/D [4186 0 R /XYZ 151.701 540.182 null]
+/D [4172 0 R /XYZ 151.701 372.81 null]
 >> endobj
 4195 0 obj <<
-/D [4186 0 R /XYZ 151.701 528.227 null]
+/D [4172 0 R /XYZ 151.701 360.855 null]
 >> endobj
 4196 0 obj <<
-/D [4186 0 R /XYZ 151.701 516.272 null]
+/D [4172 0 R /XYZ 151.701 348.9 null]
 >> endobj
 4197 0 obj <<
-/D [4186 0 R /XYZ 151.701 504.317 null]
+/D [4172 0 R /XYZ 151.701 336.945 null]
 >> endobj
 4198 0 obj <<
-/D [4186 0 R /XYZ 151.701 492.362 null]
+/D [4172 0 R /XYZ 151.701 324.989 null]
 >> endobj
 4199 0 obj <<
-/D [4186 0 R /XYZ 151.701 480.407 null]
+/D [4172 0 R /XYZ 151.701 313.034 null]
 >> endobj
 4200 0 obj <<
-/D [4186 0 R /XYZ 151.701 468.451 null]
+/D [4172 0 R /XYZ 151.701 301.079 null]
 >> endobj
 4201 0 obj <<
-/D [4186 0 R /XYZ 151.701 456.496 null]
+/D [4172 0 R /XYZ 151.701 289.124 null]
 >> endobj
 4202 0 obj <<
-/D [4186 0 R /XYZ 151.701 444.541 null]
+/D [4172 0 R /XYZ 151.701 277.169 null]
 >> endobj
 4203 0 obj <<
-/D [4186 0 R /XYZ 151.701 432.586 null]
+/D [4172 0 R /XYZ 151.701 265.214 null]
 >> endobj
 4204 0 obj <<
-/D [4186 0 R /XYZ 151.701 420.631 null]
+/D [4172 0 R /XYZ 151.701 253.258 null]
 >> endobj
 4205 0 obj <<
-/D [4186 0 R /XYZ 151.701 408.676 null]
+/D [4172 0 R /XYZ 151.701 241.303 null]
 >> endobj
 4206 0 obj <<
-/D [4186 0 R /XYZ 151.701 396.72 null]
+/D [4172 0 R /XYZ 151.701 229.348 null]
 >> endobj
 4207 0 obj <<
-/D [4186 0 R /XYZ 151.701 384.765 null]
+/D [4172 0 R /XYZ 151.701 217.393 null]
 >> endobj
 4208 0 obj <<
-/D [4186 0 R /XYZ 151.701 372.81 null]
+/D [4172 0 R /XYZ 151.701 205.438 null]
 >> endobj
-4209 0 obj <<
-/D [4186 0 R /XYZ 151.701 360.855 null]
->> endobj
-4210 0 obj <<
-/D [4186 0 R /XYZ 151.701 348.9 null]
->> endobj
-4211 0 obj <<
-/D [4186 0 R /XYZ 151.701 336.945 null]
->> endobj
-4212 0 obj <<
-/D [4186 0 R /XYZ 151.701 324.989 null]
->> endobj
-4213 0 obj <<
-/D [4186 0 R /XYZ 151.701 313.034 null]
->> endobj
-4214 0 obj <<
-/D [4186 0 R /XYZ 151.701 301.079 null]
->> endobj
-4215 0 obj <<
-/D [4186 0 R /XYZ 151.701 289.124 null]
->> endobj
-4216 0 obj <<
-/D [4186 0 R /XYZ 151.701 277.169 null]
->> endobj
-4217 0 obj <<
-/D [4186 0 R /XYZ 151.701 265.214 null]
->> endobj
-4218 0 obj <<
-/D [4186 0 R /XYZ 151.701 253.258 null]
->> endobj
-4219 0 obj <<
-/D [4186 0 R /XYZ 151.701 241.303 null]
->> endobj
-4220 0 obj <<
-/D [4186 0 R /XYZ 151.701 229.348 null]
->> endobj
-4221 0 obj <<
-/D [4186 0 R /XYZ 151.701 217.393 null]
->> endobj
-4222 0 obj <<
-/D [4186 0 R /XYZ 151.701 205.438 null]
->> endobj
-4185 0 obj <<
+4171 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4225 0 obj <<
+4211 0 obj <<
 /Length 2115      
 /Filter /FlateDecode
 >>
@@ -20772,99 +20323,99 @@
 á/×:1ý„§Ò	­úÜŠ‰rCoœÞQkMæ‰Ì’¶½£Ö=J£N“á4sᄋÇ:¹r¾Ôœ½ ΁N¾_PÂ_®uz¼¯ÚÅo7Þ§Ÿk넏¡Ê¯ÔQËù¯Â£¿RGIkb÷sqúWêùHÎWe“¥>üZGÑÜÇa`ŸwÇŒ>!:ùÇ;ûøc….
 endstream
 endobj
-4224 0 obj <<
+4210 0 obj <<
 /Type /Page
-/Contents 4225 0 R
-/Resources 4223 0 R
+/Contents 4211 0 R
+/Resources 4209 0 R
 /MediaBox [0 0 612 792]
-/Parent 4091 0 R
+/Parent 4077 0 R
 >> endobj
-4226 0 obj <<
-/D [4224 0 R /XYZ 100.892 685.529 null]
+4212 0 obj <<
+/D [4210 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1570 0 obj <<
-/D [4224 0 R /XYZ 100.892 544.799 null]
+/D [4210 0 R /XYZ 100.892 544.799 null]
 >> endobj
-3700 0 obj <<
-/D [4224 0 R /XYZ 100.892 527.929 null]
+3686 0 obj <<
+/D [4210 0 R /XYZ 100.892 527.929 null]
 >> endobj
-4227 0 obj <<
-/D [4224 0 R /XYZ 100.892 521.951 null]
+4213 0 obj <<
+/D [4210 0 R /XYZ 100.892 521.951 null]
 >> endobj
-4228 0 obj <<
-/D [4224 0 R /XYZ 100.892 528.227 null]
+4214 0 obj <<
+/D [4210 0 R /XYZ 100.892 528.227 null]
 >> endobj
-4229 0 obj <<
-/D [4224 0 R /XYZ 100.892 516.272 null]
+4215 0 obj <<
+/D [4210 0 R /XYZ 100.892 516.272 null]
 >> endobj
-4230 0 obj <<
-/D [4224 0 R /XYZ 100.892 504.317 null]
+4216 0 obj <<
+/D [4210 0 R /XYZ 100.892 504.317 null]
 >> endobj
-4231 0 obj <<
-/D [4224 0 R /XYZ 100.892 492.362 null]
+4217 0 obj <<
+/D [4210 0 R /XYZ 100.892 492.362 null]
 >> endobj
-4232 0 obj <<
-/D [4224 0 R /XYZ 100.892 480.407 null]
+4218 0 obj <<
+/D [4210 0 R /XYZ 100.892 480.407 null]
 >> endobj
-4233 0 obj <<
-/D [4224 0 R /XYZ 100.892 468.451 null]
+4219 0 obj <<
+/D [4210 0 R /XYZ 100.892 468.451 null]
 >> endobj
-4234 0 obj <<
-/D [4224 0 R /XYZ 100.892 456.496 null]
+4220 0 obj <<
+/D [4210 0 R /XYZ 100.892 456.496 null]
 >> endobj
-4235 0 obj <<
-/D [4224 0 R /XYZ 100.892 444.541 null]
+4221 0 obj <<
+/D [4210 0 R /XYZ 100.892 444.541 null]
 >> endobj
-4236 0 obj <<
-/D [4224 0 R /XYZ 100.892 432.586 null]
+4222 0 obj <<
+/D [4210 0 R /XYZ 100.892 432.586 null]
 >> endobj
-4237 0 obj <<
-/D [4224 0 R /XYZ 100.892 420.631 null]
+4223 0 obj <<
+/D [4210 0 R /XYZ 100.892 420.631 null]
 >> endobj
-4238 0 obj <<
-/D [4224 0 R /XYZ 100.892 408.676 null]
+4224 0 obj <<
+/D [4210 0 R /XYZ 100.892 408.676 null]
 >> endobj
-4239 0 obj <<
-/D [4224 0 R /XYZ 100.892 396.72 null]
+4225 0 obj <<
+/D [4210 0 R /XYZ 100.892 396.72 null]
 >> endobj
-4240 0 obj <<
-/D [4224 0 R /XYZ 100.892 384.765 null]
+4226 0 obj <<
+/D [4210 0 R /XYZ 100.892 384.765 null]
 >> endobj
-4241 0 obj <<
-/D [4224 0 R /XYZ 100.892 372.81 null]
+4227 0 obj <<
+/D [4210 0 R /XYZ 100.892 372.81 null]
 >> endobj
-4242 0 obj <<
-/D [4224 0 R /XYZ 100.892 360.855 null]
+4228 0 obj <<
+/D [4210 0 R /XYZ 100.892 360.855 null]
 >> endobj
-4243 0 obj <<
-/D [4224 0 R /XYZ 100.892 348.9 null]
+4229 0 obj <<
+/D [4210 0 R /XYZ 100.892 348.9 null]
 >> endobj
-4244 0 obj <<
-/D [4224 0 R /XYZ 100.892 336.945 null]
+4230 0 obj <<
+/D [4210 0 R /XYZ 100.892 336.945 null]
 >> endobj
-4245 0 obj <<
-/D [4224 0 R /XYZ 100.892 324.989 null]
+4231 0 obj <<
+/D [4210 0 R /XYZ 100.892 324.989 null]
 >> endobj
-4246 0 obj <<
-/D [4224 0 R /XYZ 100.892 313.034 null]
+4232 0 obj <<
+/D [4210 0 R /XYZ 100.892 313.034 null]
 >> endobj
-4247 0 obj <<
-/D [4224 0 R /XYZ 100.892 301.079 null]
+4233 0 obj <<
+/D [4210 0 R /XYZ 100.892 301.079 null]
 >> endobj
-4248 0 obj <<
-/D [4224 0 R /XYZ 100.892 289.124 null]
+4234 0 obj <<
+/D [4210 0 R /XYZ 100.892 289.124 null]
 >> endobj
-4249 0 obj <<
-/D [4224 0 R /XYZ 100.892 277.169 null]
+4235 0 obj <<
+/D [4210 0 R /XYZ 100.892 277.169 null]
 >> endobj
-4250 0 obj <<
-/D [4224 0 R /XYZ 100.892 265.214 null]
+4236 0 obj <<
+/D [4210 0 R /XYZ 100.892 265.214 null]
 >> endobj
-4223 0 obj <<
+4209 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4253 0 obj <<
+4239 0 obj <<
 /Length 2580      
 /Filter /FlateDecode
 >>
@@ -20890,117 +20441,117 @@
 †ü,‹&%ÊatP„Í­6©lö¥HlðkÏS‰È×:Î& W).Ù~Ú˜O8{Á‹”ráo`dú-XÐé™–i¬*…JÓÉ€C(Y¡»_ãg¹\í‹8	•õõ£ø^L§‡`VÇq²°ø4¬9Z´Öçgp’Á0a}‘¦¢×_4¬¤Ì0%ƒ†«¦›êÉžža*Š(3ÃTÿßâkmCôÊãîø¡×Y}oŽhh£ÊšpMª˜véÞ„k&Ä	×àïèdk†ép0ÙÚógp€0õó§?Å9×âê·Óéäçe\·õ‹U3Å­q¢5\û«â†obœöõãÙöúñê6~ÈPÏ–‹IüÇÕd÷¯&q&&½kùisûx>½inYúק»^Hƃ͙‚-µ—	ÇÚKqlwã™.¿‰Ï—M½º{ò<ºôhzý¤¹ºi6qåjþG:~ßÿÕÕ¯³ëí÷‹f³Ù½~ß,ç4qº¹fñËr¾=zÜÝn÷tòÇöØl×w×Û»u³øùÌÿñ0­BÅ‹ÀeMb·+ÿöº‚¤
 endstream
 endobj
-4252 0 obj <<
+4238 0 obj <<
 /Type /Page
-/Contents 4253 0 R
-/Resources 4251 0 R
+/Contents 4239 0 R
+/Resources 4237 0 R
 /MediaBox [0 0 612 792]
-/Parent 4283 0 R
+/Parent 4269 0 R
 >> endobj
-4254 0 obj <<
-/D [4252 0 R /XYZ 151.701 685.529 null]
+4240 0 obj <<
+/D [4238 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1597 0 obj <<
-/D [4252 0 R /XYZ 151.701 642.1 null]
+/D [4238 0 R /XYZ 151.701 642.1 null]
 >> endobj
-3701 0 obj <<
-/D [4252 0 R /XYZ 151.701 625.23 null]
+3687 0 obj <<
+/D [4238 0 R /XYZ 151.701 625.23 null]
 >> endobj
+4241 0 obj <<
+/D [4238 0 R /XYZ 151.701 619.253 null]
+>> endobj
+4242 0 obj <<
+/D [4238 0 R /XYZ 151.701 625.529 null]
+>> endobj
+4243 0 obj <<
+/D [4238 0 R /XYZ 151.701 613.574 null]
+>> endobj
+4244 0 obj <<
+/D [4238 0 R /XYZ 151.701 601.619 null]
+>> endobj
+4245 0 obj <<
+/D [4238 0 R /XYZ 151.701 589.664 null]
+>> endobj
+4246 0 obj <<
+/D [4238 0 R /XYZ 151.701 577.708 null]
+>> endobj
+4247 0 obj <<
+/D [4238 0 R /XYZ 151.701 565.753 null]
+>> endobj
+4248 0 obj <<
+/D [4238 0 R /XYZ 151.701 553.798 null]
+>> endobj
+4249 0 obj <<
+/D [4238 0 R /XYZ 151.701 541.843 null]
+>> endobj
+4250 0 obj <<
+/D [4238 0 R /XYZ 151.701 529.888 null]
+>> endobj
+4251 0 obj <<
+/D [4238 0 R /XYZ 151.701 517.933 null]
+>> endobj
+4252 0 obj <<
+/D [4238 0 R /XYZ 151.701 505.977 null]
+>> endobj
+4253 0 obj <<
+/D [4238 0 R /XYZ 151.701 494.022 null]
+>> endobj
+4254 0 obj <<
+/D [4238 0 R /XYZ 151.701 482.067 null]
+>> endobj
 4255 0 obj <<
-/D [4252 0 R /XYZ 151.701 619.253 null]
+/D [4238 0 R /XYZ 151.701 470.112 null]
 >> endobj
 4256 0 obj <<
-/D [4252 0 R /XYZ 151.701 625.529 null]
+/D [4238 0 R /XYZ 151.701 458.157 null]
 >> endobj
 4257 0 obj <<
-/D [4252 0 R /XYZ 151.701 613.574 null]
+/D [4238 0 R /XYZ 151.701 446.202 null]
 >> endobj
 4258 0 obj <<
-/D [4252 0 R /XYZ 151.701 601.619 null]
+/D [4238 0 R /XYZ 151.701 434.246 null]
 >> endobj
 4259 0 obj <<
-/D [4252 0 R /XYZ 151.701 589.664 null]
+/D [4238 0 R /XYZ 151.701 422.291 null]
 >> endobj
 4260 0 obj <<
-/D [4252 0 R /XYZ 151.701 577.708 null]
+/D [4238 0 R /XYZ 151.701 410.336 null]
 >> endobj
 4261 0 obj <<
-/D [4252 0 R /XYZ 151.701 565.753 null]
+/D [4238 0 R /XYZ 151.701 398.381 null]
 >> endobj
 4262 0 obj <<
-/D [4252 0 R /XYZ 151.701 553.798 null]
+/D [4238 0 R /XYZ 151.701 386.426 null]
 >> endobj
 4263 0 obj <<
-/D [4252 0 R /XYZ 151.701 541.843 null]
+/D [4238 0 R /XYZ 151.701 374.471 null]
 >> endobj
 4264 0 obj <<
-/D [4252 0 R /XYZ 151.701 529.888 null]
+/D [4238 0 R /XYZ 151.701 362.515 null]
 >> endobj
 4265 0 obj <<
-/D [4252 0 R /XYZ 151.701 517.933 null]
+/D [4238 0 R /XYZ 151.701 350.56 null]
 >> endobj
 4266 0 obj <<
-/D [4252 0 R /XYZ 151.701 505.977 null]
+/D [4238 0 R /XYZ 151.701 338.605 null]
 >> endobj
 4267 0 obj <<
-/D [4252 0 R /XYZ 151.701 494.022 null]
+/D [4238 0 R /XYZ 151.701 326.65 null]
 >> endobj
 4268 0 obj <<
-/D [4252 0 R /XYZ 151.701 482.067 null]
+/D [4238 0 R /XYZ 151.701 314.695 null]
 >> endobj
-4269 0 obj <<
-/D [4252 0 R /XYZ 151.701 470.112 null]
->> endobj
-4270 0 obj <<
-/D [4252 0 R /XYZ 151.701 458.157 null]
->> endobj
-4271 0 obj <<
-/D [4252 0 R /XYZ 151.701 446.202 null]
->> endobj
-4272 0 obj <<
-/D [4252 0 R /XYZ 151.701 434.246 null]
->> endobj
-4273 0 obj <<
-/D [4252 0 R /XYZ 151.701 422.291 null]
->> endobj
-4274 0 obj <<
-/D [4252 0 R /XYZ 151.701 410.336 null]
->> endobj
-4275 0 obj <<
-/D [4252 0 R /XYZ 151.701 398.381 null]
->> endobj
-4276 0 obj <<
-/D [4252 0 R /XYZ 151.701 386.426 null]
->> endobj
-4277 0 obj <<
-/D [4252 0 R /XYZ 151.701 374.471 null]
->> endobj
-4278 0 obj <<
-/D [4252 0 R /XYZ 151.701 362.515 null]
->> endobj
-4279 0 obj <<
-/D [4252 0 R /XYZ 151.701 350.56 null]
->> endobj
-4280 0 obj <<
-/D [4252 0 R /XYZ 151.701 338.605 null]
->> endobj
-4281 0 obj <<
-/D [4252 0 R /XYZ 151.701 326.65 null]
->> endobj
-4282 0 obj <<
-/D [4252 0 R /XYZ 151.701 314.695 null]
->> endobj
 1598 0 obj <<
-/D [4252 0 R /XYZ 151.701 241.536 null]
+/D [4238 0 R /XYZ 151.701 241.536 null]
 >> endobj
-3801 0 obj <<
-/D [4252 0 R /XYZ 151.701 209.904 null]
+3787 0 obj <<
+/D [4238 0 R /XYZ 151.701 209.904 null]
 >> endobj
-4251 0 obj <<
+4237 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F4 2008 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4286 0 obj <<
+4272 0 obj <<
 /Length 1723      
 /Filter /FlateDecode
 >>
@@ -21028,27 +20579,27 @@
 È›„7š?P j$|tóNi`šê× ÚãÜs‘š»;$¯QŸ–N,RPªÖt¢±4Kç”é°¢ážÆKX)4ç0¤€G,»'ϬnB½ðC!Ì]A#>'>²h|^2ÕP‚®Ømûi\/½n²|Ñß Ó¢™Bغ‘÷(.*4‹BQjÜxINAœ¡îZOdRAôe”Æº›8›¯Ö܆_–.Š1â*u_j!çÙ‹»jLáäº*n¸PÌ<0€¹ƒkmhê;ág|D›âʿÏRµt²„¥¯I ·‹ùüç«wq¹üRN¢8Èò̃Ž¤‰û^Ž“äÓÍnó/â‚Ws
 endstream
 endobj
-4285 0 obj <<
+4271 0 obj <<
 /Type /Page
-/Contents 4286 0 R
-/Resources 4284 0 R
+/Contents 4272 0 R
+/Resources 4270 0 R
 /MediaBox [0 0 612 792]
-/Parent 4283 0 R
+/Parent 4269 0 R
 >> endobj
-4287 0 obj <<
-/D [4285 0 R /XYZ 100.892 685.529 null]
+4273 0 obj <<
+/D [4271 0 R /XYZ 100.892 685.529 null]
 >> endobj
 450 0 obj <<
-/D [4285 0 R /XYZ 100.892 660.623 null]
+/D [4271 0 R /XYZ 100.892 660.623 null]
 >> endobj
-4288 0 obj <<
-/D [4285 0 R /XYZ 100.892 476.022 null]
+4274 0 obj <<
+/D [4271 0 R /XYZ 100.892 476.022 null]
 >> endobj
-4284 0 obj <<
+4270 0 obj <<
 /Font << /F77 1973 0 R /F17 1131 0 R /F15 1133 0 R /F28 1124 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4292 0 obj <<
+4278 0 obj <<
 /Length 1998      
 /Filter /FlateDecode
 >>
@@ -21072,41 +20623,41 @@
 Ýä3F~/‘ŒdU‚Ç@Þ|ŽÁûÚsmT¤™k²Ú8C¤ùóS.ê®>3q™UzÔÌ2)K#ÚÜC9YòĘ4ã)²Õ¸ŠÛÿ ª&î~NócÇ„H»5/Šh˜2&À\5²ªYR=&-ÝZùÓÔyÀågR€çAjŸæW …Áµ]û~*œkÉÂý‹B¤À6 Ú#·K<ï;£k166špŽö®æ4¾¹ßü¥H
 endstream
 endobj
-4291 0 obj <<
+4277 0 obj <<
 /Type /Page
-/Contents 4292 0 R
-/Resources 4290 0 R
+/Contents 4278 0 R
+/Resources 4276 0 R
 /MediaBox [0 0 612 792]
-/Parent 4283 0 R
-/Annots [ 4289 0 R ]
+/Parent 4269 0 R
+/Annots [ 4275 0 R ]
 >> endobj
-4289 0 obj <<
+4275 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.978 297.259 345.103 308.949]
 /Subtype /Link
 /A << /S /GoTo /D (happy) >>
 >> endobj
-4293 0 obj <<
-/D [4291 0 R /XYZ 151.701 685.529 null]
+4279 0 obj <<
+/D [4277 0 R /XYZ 151.701 685.529 null]
 >> endobj
 454 0 obj <<
-/D [4291 0 R /XYZ 151.701 586.929 null]
+/D [4277 0 R /XYZ 151.701 586.929 null]
 >> endobj
-4294 0 obj <<
-/D [4291 0 R /XYZ 151.701 558.776 null]
+4280 0 obj <<
+/D [4277 0 R /XYZ 151.701 558.776 null]
 >> endobj
 458 0 obj <<
-/D [4291 0 R /XYZ 151.701 361.08 null]
+/D [4277 0 R /XYZ 151.701 361.08 null]
 >> endobj
-4295 0 obj <<
-/D [4291 0 R /XYZ 151.701 333.421 null]
+4281 0 obj <<
+/D [4277 0 R /XYZ 151.701 333.421 null]
 >> endobj
-4290 0 obj <<
+4276 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4299 0 obj <<
+4285 0 obj <<
 /Length 2313      
 /Filter /FlateDecode
 >>
@@ -21123,35 +20674,35 @@
 ²…$r®–¤Ôà:JÄ©¹¼N;Å”v”/K)÷~+Ý áÝ„úÓ’úÓ<,*õ®^„E9Wþ"Sm”¨+=9!íÆŽ‹7}Éyò¾Æ¥ÑšVûlA°¤IÝ-‰».Ó0+ŠïÎ]ªÓB] 1-à(#TÂÖT“5“ ½ÀˆòM.Ó‹šng5hãv­_êPδO²°Å]Xi2EW”£"Åu•·ž„`†-¹ÖJUÈrFÇU.*ªÐì{¿o<‹Õ3¾/7áZYw’B¤Ï£qüîü¢¤ü°ƒ,`áä¯ÐM¢òà4ÿáz>Q…<5‰D!‡Úßy;U'4d?+æðu'YÆu ­ÞI'÷ ÞA(™/Ç+£„fØ©Cg~ýœÖþ£àý¯³ 4|&À¸-ÞoœÌzŒ–ÓÇCæÜ’C†3Ó'ˆ‹~ÕÆö~?¿Ý]çN¾èýV!©ÄÎ?}fõËŒ5ŸÇÆš«7Ö¦ñ/¨©ÎœbÖƒED©Ão”pÿAüªðy­–¦nìm– g}XõöéÇ%OÁ‹+Ìϱýk³ŠÖ^ƒaÉÎ kn©lñ4³×`NB…°Ÿ Ášõ”µå”+=h[KvBíé‘Ða_'õ$Õ¡†:?,1 ‡‚w/­ÕǦ&¯T\RÅ©¼åh|Ä‚-¹–ÄËþÇtÆÀ'G”ÿ˜fz—Jƒxh¶#G²‹çjNo	‡8r.(sB~ׇÎàÐwB»P6©ráÄÆÿ;‹`ÛÙþ@º`“Ps.¨iÔÈç$u½Óqj´’è–tEÃCoy5\`G23Ñm¥>`_Ç$U©Öèš*Ôù„nÁUGñ¹šjz$–x÷:o9jJÖ\Âàù@µB6Õ㘺B[ÏÉDot×ü×x£ŠÕË)1Ñ£qñOFO?„Rëä’GÚÉq§ïqåôù%(’¿ÓÓß}ŒY	E`9¼ú!˜ÚŸîoþ}"êµ
 endstream
 endobj
-4298 0 obj <<
+4284 0 obj <<
 /Type /Page
-/Contents 4299 0 R
-/Resources 4297 0 R
+/Contents 4285 0 R
+/Resources 4283 0 R
 /MediaBox [0 0 612 792]
-/Parent 4283 0 R
-/Annots [ 4296 0 R ]
+/Parent 4269 0 R
+/Annots [ 4282 0 R ]
 >> endobj
-4296 0 obj <<
+4282 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [142.35 474.151 316.549 485.84]
 /Subtype /Link
 /A << /S /GoTo /D (happy) >>
 >> endobj
-4300 0 obj <<
-/D [4298 0 R /XYZ 100.892 685.529 null]
+4286 0 obj <<
+/D [4284 0 R /XYZ 100.892 685.529 null]
 >> endobj
 462 0 obj <<
-/D [4298 0 R /XYZ 100.892 531.262 null]
+/D [4284 0 R /XYZ 100.892 531.262 null]
 >> endobj
-4301 0 obj <<
-/D [4298 0 R /XYZ 100.892 501.098 null]
+4287 0 obj <<
+/D [4284 0 R /XYZ 100.892 501.098 null]
 >> endobj
-4297 0 obj <<
+4283 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F51 1134 0 R /F17 1131 0 R /F60 1917 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4305 0 obj <<
+4291 0 obj <<
 /Length 1997      
 /Filter /FlateDecode
 >>
@@ -21176,35 +20727,35 @@
 x«Ró³çÇž7z„ᥠ€âù7„Loû‰#GÜ]^9ê—å@9¨Rî#Àb€¹»éC¾ú¶*oþZ¨€‚Ûf’»¹[t÷‘ó*ò·	‰þøõ—ꁀ.ÜÁî®è83ŠºôÜ$!Iàÿ¥õƒhpSþ Úü6@­±Óœq]’â?f”üò³ië ß”<—){. ü¥ÿœ¯?tóÃéâÄòíË×$Žã÷Ðõý`ä`òå Ã.uø«˜+½¦}–[’:©Õõ­š¹èNnLnŒ˜¿ß<­þ÷M3
 endstream
 endobj
-4304 0 obj <<
+4290 0 obj <<
 /Type /Page
-/Contents 4305 0 R
-/Resources 4303 0 R
+/Contents 4291 0 R
+/Resources 4289 0 R
 /MediaBox [0 0 612 792]
-/Parent 4283 0 R
-/Annots [ 4302 0 R ]
+/Parent 4269 0 R
+/Annots [ 4288 0 R ]
 >> endobj
-4302 0 obj <<
+4288 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.807 454.16 360.256 465.849]
 /Subtype /Link
 /A << /S /GoTo /D (happy) >>
 >> endobj
-4306 0 obj <<
-/D [4304 0 R /XYZ 151.701 685.529 null]
+4292 0 obj <<
+/D [4290 0 R /XYZ 151.701 685.529 null]
 >> endobj
 466 0 obj <<
-/D [4304 0 R /XYZ 151.701 281.895 null]
+/D [4290 0 R /XYZ 151.701 281.895 null]
 >> endobj
-4307 0 obj <<
-/D [4304 0 R /XYZ 151.701 256.707 null]
+4293 0 obj <<
+/D [4290 0 R /XYZ 151.701 256.707 null]
 >> endobj
-4303 0 obj <<
+4289 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4310 0 obj <<
+4296 0 obj <<
 /Length 2074      
 /Filter /FlateDecode
 >>
@@ -21230,27 +20781,27 @@
 })u¶+[áý£®H›q­Þÿ¥«ðØñËÿeó÷ãóÝ T¶Zä
 endstream
 endobj
-4309 0 obj <<
+4295 0 obj <<
 /Type /Page
-/Contents 4310 0 R
-/Resources 4308 0 R
+/Contents 4296 0 R
+/Resources 4294 0 R
 /MediaBox [0 0 612 792]
-/Parent 4283 0 R
+/Parent 4269 0 R
 >> endobj
-4311 0 obj <<
-/D [4309 0 R /XYZ 100.892 685.529 null]
+4297 0 obj <<
+/D [4295 0 R /XYZ 100.892 685.529 null]
 >> endobj
 470 0 obj <<
-/D [4309 0 R /XYZ 100.892 660.623 null]
+/D [4295 0 R /XYZ 100.892 660.623 null]
 >> endobj
-4312 0 obj <<
-/D [4309 0 R /XYZ 100.892 644.027 null]
+4298 0 obj <<
+/D [4295 0 R /XYZ 100.892 644.027 null]
 >> endobj
-4308 0 obj <<
+4294 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4316 0 obj <<
+4302 0 obj <<
 /Length 2049      
 /Filter /FlateDecode
 >>
@@ -21276,35 +20827,35 @@
 qkt~4<É3ŸR}t1ÏÜ~›g¯ø]”Âcö4À·¸:tÙÌ™œ† zÂ%e<TN ™Ã u¼){þ¾ñ0˦W¤ßü¬½{^÷õ;v&ñ1§ˆE›ÚKC¯‚“ÆùµÚo®§fœA}S¤øäåݽ.ã­R^†+¼„0-ÿÄÈßG1-/QÄ7ÉìXܵê¨͵¸‚”£8mïyÍ©aºîý›»Ÿ™‚4¾5þàë‰Éç±.úçhô,ÍÿKÉ‹„Âõe/Âðó9µÉ‹5¦“Ô)@¢6œ5mû×,ù>KE~i	¬–šöØ…^=ÃlÉŸÙ ¸4À‹a­D‚Ó‰éŸ À£è—j¥ÈhŽæDÙEmGÎô$Ù³ÀÞ|ˤ”GÿpóUü„ƪ%ðu'Þуgù¡re¼` ®†~Xû¹ö…7±÷lpµ<´ÚxÉCHž¿I‘¹œlQxºäl}kYÿ‡Ëõ<Àôýf¿ù>¡ˆR
 endstream
 endobj
-4315 0 obj <<
+4301 0 obj <<
 /Type /Page
-/Contents 4316 0 R
-/Resources 4314 0 R
+/Contents 4302 0 R
+/Resources 4300 0 R
 /MediaBox [0 0 612 792]
-/Parent 4319 0 R
-/Annots [ 4313 0 R ]
+/Parent 4305 0 R
+/Annots [ 4299 0 R ]
 >> endobj
-4313 0 obj <<
+4299 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [337.904 502.154 508.322 513.844]
 /Subtype /Link
 /A << /S /GoTo /D (happy) >>
 >> endobj
-4317 0 obj <<
-/D [4315 0 R /XYZ 151.701 685.529 null]
+4303 0 obj <<
+/D [4301 0 R /XYZ 151.701 685.529 null]
 >> endobj
 474 0 obj <<
-/D [4315 0 R /XYZ 151.701 660.623 null]
+/D [4301 0 R /XYZ 151.701 660.623 null]
 >> endobj
-4318 0 obj <<
-/D [4315 0 R /XYZ 151.701 641.897 null]
+4304 0 obj <<
+/D [4301 0 R /XYZ 151.701 641.897 null]
 >> endobj
-4314 0 obj <<
+4300 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F17 1131 0 R /F15 1133 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4322 0 obj <<
+4308 0 obj <<
 /Length 2220      
 /Filter /FlateDecode
 >>
@@ -21325,21 +20876,21 @@
 »82Mæ‡,̵Zu¢ŠMÿac•êæ×PÚAÿqxþ®’ŒK„ûã‚nq™z韚šé“º@MW"ÕhéfRo¥”s‚–é|ích\­û價Ùy7“¾øë¾?Þïþš+“
 endstream
 endobj
-4321 0 obj <<
+4307 0 obj <<
 /Type /Page
-/Contents 4322 0 R
-/Resources 4320 0 R
+/Contents 4308 0 R
+/Resources 4306 0 R
 /MediaBox [0 0 612 792]
-/Parent 4319 0 R
+/Parent 4305 0 R
 >> endobj
-4323 0 obj <<
-/D [4321 0 R /XYZ 100.892 685.529 null]
+4309 0 obj <<
+/D [4307 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4320 0 obj <<
+4306 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F54 1912 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4326 0 obj <<
+4312 0 obj <<
 /Length 2245      
 /Filter /FlateDecode
 >>
@@ -21359,27 +20910,27 @@
 	dNPËõÌ<ÁAs*å–d8“3òH{Y¨è-\Ü£ÒŠ–_5êßï*Uï/΍(Â`¤çY*4zNà!ðKµ=\ø*Þ¿l\\LæQy0®BH¤œü¯þ×þ¤ß·÷7ÿÄÂ/
 endstream
 endobj
-4325 0 obj <<
+4311 0 obj <<
 /Type /Page
-/Contents 4326 0 R
-/Resources 4324 0 R
+/Contents 4312 0 R
+/Resources 4310 0 R
 /MediaBox [0 0 612 792]
-/Parent 4319 0 R
+/Parent 4305 0 R
 >> endobj
-4327 0 obj <<
-/D [4325 0 R /XYZ 151.701 685.529 null]
+4313 0 obj <<
+/D [4311 0 R /XYZ 151.701 685.529 null]
 >> endobj
 478 0 obj <<
-/D [4325 0 R /XYZ 151.701 539.802 null]
+/D [4311 0 R /XYZ 151.701 539.802 null]
 >> endobj
-4328 0 obj <<
-/D [4325 0 R /XYZ 151.701 509.067 null]
+4314 0 obj <<
+/D [4311 0 R /XYZ 151.701 509.067 null]
 >> endobj
-4324 0 obj <<
+4310 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4334 0 obj <<
+4320 0 obj <<
 /Length 2253      
 /Filter /FlateDecode
 >>
@@ -21399,50 +20950,50 @@
 Š52m…ÚÆÄüpIï·MãÀäáZf(iT.ʈâÜtüpuòÆÄ[Ðh…+í€'|š»@åÙ=Q2gRÄè#¼e at G{ã;_€kª6O™¼µÞË“xsz()Ø,´u`AãÜ®é@#ÛÖõ<?ÒMØ/µ=è‘œËE¨Ø4L‚1°9öç¾1¸fù]ÿȳ4§§¢5°S/.ƒ×>ˆÈœd,~òvg0Hm=gFý%#ún©4¯)ÒQ°"o.Lsijü\Ëè;4ý«F<–âÝ3ÎXiûU¬”½~>¥é‰£¥/ö°çÿ¼¿©i¿ÓD<û¨ÜkETGýÛ"Ü,IMš}£5Í—R§òéBdÚÈü)nM[z™Ã3Eqóß)ó4ÎùÇÉM"†ó“Tà ;?b`Ú3ßúf’S:F fǍ¢¼èR+± ¿YŸ’´úhŸÂÿ?þ‹Lê—®=îö§×b¢/ÃøbZÐf§7ôZòBUD%›ÆRï×rf— xÓН¤™ü/•Qºü&`!ŠµÙbåÑŒˉšL„ùïŽ*~FY¼íwVzE5?þ˜Ý7î«ìö/¿ñtÛÍ"Û£Ôwuzc“-å2‰æïïîþ,„æ
 endstream
 endobj
-4333 0 obj <<
+4319 0 obj <<
 /Type /Page
-/Contents 4334 0 R
-/Resources 4332 0 R
+/Contents 4320 0 R
+/Resources 4318 0 R
 /MediaBox [0 0 612 792]
-/Parent 4319 0 R
-/Annots [ 4329 0 R 4330 0 R 4336 0 R 4331 0 R ]
+/Parent 4305 0 R
+/Annots [ 4315 0 R 4316 0 R 4322 0 R 4317 0 R ]
 >> endobj
-4329 0 obj <<
+4315 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.803 385.24 303.625 396.93]
 /Subtype /Link
 /A << /S /GoTo /D (happy) >>
 >> endobj
-4330 0 obj <<
+4316 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.308 247.207 460.543 260.108]
 /Subtype /Link
 /A << /S /GoTo /D (chap7net) >>
 >> endobj
-4336 0 obj <<
+4322 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [127.168 233.658 162.55 246.559]
 /Subtype /Link
 /A << /S /GoTo /D (chap7net) >>
 >> endobj
-4331 0 obj <<
+4317 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [233.909 158.775 283.428 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (chap7net2) >>
 >> endobj
-4335 0 obj <<
-/D [4333 0 R /XYZ 100.892 685.529 null]
+4321 0 obj <<
+/D [4319 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4332 0 obj <<
+4318 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4341 0 obj <<
+4327 0 obj <<
 /Length 2312      
 /Filter /FlateDecode
 >>
@@ -21474,22 +21025,22 @@
 ÔK3Ô%@{øsÕmg±„~ó˜€è	€Ì8¬_‹’¡£ø–QCè%]YÚ3I ù£çÝKúÛ†ˆäE &(ú¥Ã÷Ëöá¿™˜)+
 endstream
 endobj
-4340 0 obj <<
+4326 0 obj <<
 /Type /Page
-/Contents 4341 0 R
-/Resources 4339 0 R
+/Contents 4327 0 R
+/Resources 4325 0 R
 /MediaBox [0 0 612 792]
-/Parent 4319 0 R
+/Parent 4305 0 R
 >> endobj
-4342 0 obj <<
-/D [4340 0 R /XYZ 151.701 685.529 null]
+4328 0 obj <<
+/D [4326 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4339 0 obj <<
+4325 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4347 0 obj <<
-/Length 1775      
+4333 0 obj <<
+/Length 1776      
 /Filter /FlateDecode
 >>
 stream
@@ -21503,166 +21054,127 @@
 lª|•&‹8ø°½½zVÕ þVµoAá)‡dÎ#‹•læ"™aÆÐ;H§ŒPíL‡ =›™ú®?ú>L!YÚAø†Ö„À¯mk‰æ
 4réi³	j†¡”¿»*–¡ÔÄ…hëw£†ÖÄ¥Eå’?®|ú°ýŸ¶7×o·7B
 1½YN4G
-Ì1Äž|óŠ^Ç`†ò›îýE¯eô~?tìå†TaEù¼a/Êâņ^#/„³°B1%$)ð,•x~ž²’I•‡‡Åž¨=å~¸Ó«ég§ ÃësÌsD¼5z §Óü#®BF=7µ!¾l‘"eÿ?O˜çÿ Y°hSøžQ(úû*aN|aàÈa'\o[.¢›Ny:ç‰2oÉTžCbetÿJŸEí63õþæ1Æsf’?¹LÈÜUg1öÔ(`Èhq²@òöõ›¬¼8B–pDð`Û¦Ž‡j:Bäü&½Z—1Åeà«ôñK’ 9•¹üGIççó¶ù—’6"ËBiy.RdPQÏÐoí÷†ÂJdÁ^^d¥Dç—çõBœl\p¹ÕÕ	W›òP›T|ûþ51žÑÕR³%x¸Âû¶»ái°Æ±õ%å½F˯;|KXx}Pc(]…´ð蘽äaµ©ôÉRÉ—õ•ÞÍ<®|•ïBøûâ$ᝆTªpå¨Ú->C¡$äˆ|Ö³Ëù‹¹ð/fl¶BHÍ-»¨æáéç/<!
+Ì1Äž|óŠ^Ç`†ò›îýE¯eô~?tìå†TaEù¼a/Êâņ^#/„³°B1%$)ð,•x~ž²’I•‡‡Åž¨=å~¸Ó«ég§ ÃësÌsD¼5z §Óü#®BF=7µ!¾l‘"eÿ?O˜çÿ Yˆ„‰,¦ð=£Pô÷UÂœøÂÀ‘ÃO¸Þ¶\D7=œòtÎd^0!Ï!±2ºÿ¥Ï"‚v›™zóã93ÉŸ\&d€{j0d´8Y
+ ùFûúMV^!K8¢x°íSÇCµ!r~“^-‰Ë˜â2pŒÕúø%IÐœÊ\þ£¤óóùGÛüKI‘e¡´<)2¨¨g跏ö{Cá%²`	//²Ò‚óÑ^ˆ^ˆ­ƒ«.·º:ájSj“Šoß¿&Æ2ººbCj¶ÄïWrßöa7<
+Öx"¶¾¤¼×hùu‡o	¯j¥ë¡³—<¬6•>Y*™â²¾Ò»™Ç•¯²ó}‚@_œ$¼Óð‘êO®U»Ågèâ!”„|ِÏzv91þÅŒÍVh ©¹eÕ<ü!ýü¬D
 endstream
 endobj
-4346 0 obj <<
+4332 0 obj <<
 /Type /Page
-/Contents 4347 0 R
-/Resources 4345 0 R
+/Contents 4333 0 R
+/Resources 4331 0 R
 /MediaBox [0 0 612 792]
-/Parent 4319 0 R
-/Annots [ 4343 0 R ]
+/Parent 4305 0 R
+/Annots [ 4329 0 R ]
 >> endobj
-4344 0 obj <<
+4330 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-ByExample/images/chap7-idresol.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 4352 0 R
-/BBox [0 0 203 153]
+/PTEX.InfoDict 4338 0 R
+/BBox [0 0 205 153]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 4353 0 R
->>/Font << /R9 4354 0 R>>
+/R7 4339 0 R
+>>/Font << /R8 4341 0 R >>
 >>
-/Length 4355 0 R
+/Length 4342 0 R
 /Filter /FlateDecode
 >>
 stream
-xœXËŽ\EÝ߯¨%M¥\Wy2!
-ôH,‹¼ˆu'…Ïç×íÉôE7hÝS׏²}|ìÛ†%$þ­Ÿ¯Ë“Ÿzx{·àÿh­§Â/£Yé-|x‹ãÛE[Ž=—`2¢¥r¶˜¬®ŸáÛå·E$ÖV[ø¸¸ùðÓ×¨í¸ª]›†Ç_àÜ4¥†b%JéG͇~ÏŠ¸ÑšÜôæ|¨æXU(%jÏÓÉyz”àôA$Ýt¬i„©*Y,”Üb°Øˆ½Œ5‡ç…<š.Lãã/ô“pÕœƒˆŽ˜–\bcÎ¥EËk8íPxþѤV‹¹ÉV]:Aº"	%Å|õóB0©½ñ¡¤œ(œµ 4Å…Æ=Îƒ”Ú€¼P†E\(äÖ‘?X at x¨âtsVf·"ÿDÊüûúñê¾¼AãXPä>Cïæ·e6ª¥VCvSÕÂÍaùìçÛw¯ß¼ûüæ÷¥Ä$¹…+WT
-7¯—Ïžíoß¼û‹O›Å&# …iØð‡w‡—¯ù¨¢™ŽÌüôñöÝKXöÇWUbk½†+¤o?ìvî°­¦áJðÙÐá|öüé÷þ¬E•ìMÏæŸzß]?}¾*jê#h‹Ù¦ÚÏùÛøHP×.rÉÓk÷w•FSÄYj,ŠŽñËÜTp;ÌO4¯ß^ܾãó¯n–—š’s‡¤‚¸5–†B­'%–ö(â%R;—R¶QR‰Å U*0Umêi…eA‡¢I^*э…:ÌhÕhH«;÷í]â^kO>éÐJ§«’ÃhÀBi´cÀ2¯”Mv±Ôné ¢ª©ìg聈Ál&ɹc¿€¡¢XsK¥ód«EÚS¬½µæþZþ£Všë¡Gš_ jsÓ§J4d ÂXw®< wPƒöZ“‹¥v‹¤“±dÜ\ 4FÅ(Á	š·Ñß0à0õ0†Ä>x²ÑÙ;߁;GQ¬Og44ƒXÛ€ åèD‚`ÝòVÉo
-B®
-,']4„áBzrK—I!6‚H•Æîôàй™XAPF)ÀzZ`
-Å“Öž1sèb`¶Í\$'0$œ
-y6<÷¤	ç­–ß	J÷䉪…$ y\*„è0LÙíãÁ)" +r"ðâ&=VŒëÕq½ß*ylÀrt¥º3þgí²±.+Ð.A¸YýäTkZj'ŠÒØš°Ô [Aû–я-~‰Y­B=éT1pêR%+~¤ˆt!çÙþ‘–ûSô¹POÙJ´¤ 'ćØÔk)ÁÔÈZnuæ½k#øsŠ› @
-°W.–btèDÞ ƒDftÂdàQf‚Aìh™«‰Ÿœ*­Áašz#IîÔ»'=zßiÖH	`?¯Áè¸«׊€eÈÙ£À
-ÆÒ\2êý&rFæÿvéì½  ŸÍûîÅáåjœ?©mûóëgO¾¼~v?Õ„›Ö`Ú ð1&º»pØëîR;.0XâpÔ‚¬©Ü¼áµô©ì¡Î$£¡ý#%w׺òéàœPw§ á| gu“æèvúØhÔI«o²Š•,‡ZQÈŒáÔl]/zP©wÈj!)û¼àAF§‘⺬Có¼Ðn©9qLAÎJ¡¤\ZQÚJèv\%a÷¤¡¢ì°­’{«=6¸£qP—"i`™D§V_ø(¦Hõ
-l•æ0TŸÙ™88ò]BASÍÙ{™¢CCŽ1#滘ßиTñ|ïÁ­ðE+°o)[­9V\Igeús1ß™ÛÐ9D”Ý^|h·9HO´ÜRèŒ{<q:øbè'Gr>#±s	nf
-}чReÔ‰"‰T1ÊǤ©S¥ÕS&-SˆSŒäV“[qØk|p–ÞªÐÌ"¢‚ Á;²asqæxòæ¯WOþxqw÷ñõܦ{ÅØ›ô®uúp™·ÞÿýÇ'¹§B%Ã?vOFˆÄÀI‹] ô¿É0‹¿(!Õ•EcL?|³ûå‹_?Ý*ÌÛ¸¯:^±†b»ÂKJ¦ÇÊŸbñ›prfÐÙ²˜@*"BS`õ*	sVœ*MoX:Pæ¢HBw 9åïœÖ^nò<QÈdQg͍–[Â
-IPdl¢Åé×@©
-…³],µc_eŽåŒœ2d¿•ri`Ϧy)¼÷u¾
-µ­¶JNÈ"W²Øû²4°•`h{Çš¯XXá‡b]û|£2çOÊœ ÜîeöÆ4Ø*t+nθª£ÃºÍ†L<iŸõŠ¯&ëÂÇ×ëÅÙ%ë@!övÒN™ï
-ܱ{e‰¶ZkËú°ÒÖفoHàq[gµ²¯ïl£ý#¥Y
-­\£Nê¬ÄÏCð{»T²ƒ=x[raxðJüMˆ%Ãe°€(ØÊãh£5ƒ«Õ ´¤µ#¯ñ—æÜK„娓v!ƒMÒIöTÉKÏWa¾®àÚix
-5áËCe9/•ÂAp‘g8Î8C0)*b)u]ñ-Ïô(Úw‘­™ÌŸ–xS/ýñU'ºr2Z$û> ‚uuÞhÑҏ˿âÅ&‚
+xœXËn\7Ý߯Ð2EaE¤$JZ¦qQmƒ4c ‹¢‹¼¤ðäåéç÷êŽã¹^Ì´ÈÂÎ"yxHùcHQBâ¿õçËýòðYonü?ŽÚRæ/½ŽÜjøôf±ª±iCzì£ÕÓ(·??½^þ\Db©¥†/‹ÛÏ~8Go·ÀQiV-Üÿ®GïqH	yä(¹mLLϧeÜ‹XIn|ó4Ådc!hÎÑšN/§eèR‚¯wbiÃúL£À€	**#d­1CXF-ÒxZÈ£iÂïÿB?	WU
+"ÖcB^4ÇÊ|HEžúêç´Ðxà?š´2¢¶ :ŠK'H$!§¨ù`ò´LZ«<”¤‰Âj¸É.Ô=Cèp$—
+ð…ÜGÄ…‚Ö†üÁÂC§›“2»Ì0ø)óß×/÷á»+4N†Ü+ô®þ\fC¡zQp_$/•XF¸Ú/~{ûîÕû/7ß\ýµä˜Dk¸pE³põjyðøúíëwŸyZG¬Ò, ‡i m<½Ù¿xų‚†":”	Î~ôåí»0íÇEb­-\ }½Ûx²Û¹SÀ¶»5?zúè?ªÑD½ç[B÷ûÙÏ—ž®z–Z	V£ñ£ßô§x$(k™äTýðÑ¥»»Hˆ¢*›KÌ–§Ã'WŁíeàòýþùÛw<þþjùu))9yHÊÚÂ~©(Óú%ÇœÃ5JxŽÔÎ¥ŒM”LbÊe"Êõ¬@Š2CÉD×w•èŽÆB
+f¬XHª;ù]»Ä­V?|ùªC+®²†^„\ig 1’ƒQ6³¥vK
+Rÿ¶‡˜¼6$9s\/à§(£º¥Üøe«EÖR,­	þ†ûëh`øCŽj®®‡©~bÕM+ÑÐ …”‹æL¹GçT€@ƒµR“³¥vËÈH'cQÜ\ Ô{‰ƒÑ¡u+ýõ¦z—Ø:¿lt®íÀ‚‹£(£Mg4LA«µCHRëhD‚`ÝòVÉo
+:f÷ Ž.Âtƒ!9¹¥ó¤A¤Jeozpè[%VÔ Ô ÀØ}Sh(~Ùh­á
+fMÌ֙ˎ$âK	ç<œyÒ„óVËoŽ“(
+. ¥¢è,$hÔ~®¢Ã0ÆFP´gˆ@ƒ§Uyñ!-0Ühh9GáFÉc–£ƒ¨Èŝð?k§ƒuXp	ºUó/ÇZÓRõ8Q”ÊŽ„¥
+Ø
+Ú7÷vhñs¤0ÆJê™1F' ò  .YP²ìw@:€(Arš]ßÓr†>ê[‰–ä„øzµ#eø %²–[yïR&Â>u;¸	ª¤ {ùl)F‡Nä
+ü 2£Þ@G™	¯£9d.&þåXi
+³ÔAÖdšywâK‹Þw¦)ìëÜ‘ŽÛ¹³ˆp©
+'{dXÁTš+F¹ÝCNÈüß±.½'8H\Î8×wÏ÷/žûPã Ju3ן^>~øÝåãÛ±&\´:ó„÷>áUÙ†}Ì¡îñž!µãþ‚G1HːÒ6H^Lk 
+MF4t}OÉÝÕf<í6Ën@p–×À@8ïê¨<Ö:*”_dZÔ;V)(&¤b:Y:ìÔ§…ÁÁO&-ûÄàE¯‘䚬có©ÝÒSuîÈ„'”BQ¹µ¢¸…èm¸LÂòICÙØd[%wWZ¬¨5ƒ½ÜPåÛ	›tñ`¨WdŠ¯ÁViÎCó±­ÌÁÃ‘ñ2újŽßó¤z²÷1s _üÆ)ŠX|jÄGæ+	;°/*[­9Y\I'fús1_šk·9GŒ
+Ÿ}n×9K´Ü’v	ŒÆµ‹Hí|ú—?ŸØ¹—³
+‡¾ë€Æ2Ù‡2æ\‘D*˜æ}2Õ±ÒêIÉÌâ #¿•äVærØ«|
+LøoThæ?qQAÐà<°¼8w<|ýùåÃÏon¾¼šûtó·ß¸Ì›Oïÿþð•CnÙ\Éðý£‘8j²3„þ7ªøK	©.,czòãî÷oÿøzW¨DoåÊêxÅ&ŠÏ‚Æ90ËqJ†¥¯ÂÑ©˜ ³a1€Să–Àë59ä¬ýüp¬4aë@‘³!
+æDFµ<8®}Ÿ Ñó/
+JuÖÜh¹%쐄„bËé ¥üeÔq¶ÔŽ]¥œËŠŒšÍK—6lšw£¯ñ-ÜמÚè8= …ÜÈ2 ï»RÇR‚™íÝ:ˆÚ
+¾r&–µÇ7*sú$å år/kA°°ŒÔ‘ÝÜ঎îj¨ÓÀÔî(EÅܱ6éé%_&ë¾ÇW{ˆÌˆ‚a‰5 k;)'ÏgWìVÃVkmWUVá-élWðƒô–uÖJ}{Çò8öHiÖÂ
+·hƒ“2Ç*ÑãÓÜ^ÏB½„Ì0î<–Eh^^‰bÅpìæàCþúžÖ®ßÐŽ£8FaνD؍)2X$`•¼ô|	óµ‚kOœáj·Ca9Ï•Âü ü¹Ç³eœÕd¹¬þЙCïöîãq£5“™ùw%ÞÔF|©ó‹­|ŒQÿkx`Ýœ7Z´ôëò/‡ç%Ÿ
 endstream
 endobj
-4352 0 obj
+4338 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110927)
-/ModDate (D:20080610110927)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090501-05'00')
+/ModDate (D:20080528090501-05'00')
 >>
 endobj
-4353 0 obj
+4339 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-4354 0 obj
+4341 0 obj
 <<
-/BaseFont /BHOFUU#2BAlbanyAMT
-/FontDescriptor 4356 0 R
 /Type /Font
 /FirstChar 43
 /LastChar 120
-/Widths [ 600 0 0 0 600 0 0 600 0 600 0 0 0 0 0 0 0 0 0 0 0 0 600 600 600 600 0 0 0 0 600 0 600 600 600 600 0 600 0 0 600 600 0 0 600 0 0 0 600 0 600 0 0 0 600 600 600 600 600 0 600 0 600 0 0 600 600 600 600 600 0 600 600 600 600 0 600 600]
-/Encoding /WinAnsiEncoding
+/Widths [ 584 0 0 0 278 0 0 556 0 556 0 0 0 0 0 0 0 0 0 0 0 0 667 667 722 722 0 0 0 0 278 0 667 556 833 722 0 667 0 0 667 611 0 0 944 0 0 0 278 0 278 0 0 0 556 556 500 556 556 0 556 0 222 0 0 222 833 556 556 556 0 333 500 278 556 0 722 500]
 /Subtype /Type1
+/FontDescriptor 2063 0 R
+/BaseFont 2067 0 R
+/Encoding 4340 0 R
 >>
 endobj
-4355 0 obj
-1975
+4342 0 obj
+1973
 endobj
-4356 0 obj
-<<
-/Type /FontDescriptor
-/FontName /BHOFUU#2BAlbanyAMT
-/FontBBox [ 0 -186 593 667]
-/Flags 5
-/Ascent 667
-/CapHeight 667
-/Descent -186
-/ItalicAngle 0
-/StemV 88
-/AvgWidth 600
-/MaxWidth 600
-/MissingWidth 600
-/CharSet (/L/A/n/c/M/B/bracketright/o/d/N/C/p/e/D/slash/P/r/g/s/t/i/two/S/u/T/I/four/w/l/a/K/bracketleft/x/m/b/W/plus)
-/FontFile3 4357 0 R
->>
-endobj
-4357 0 obj
-<<
-/Subtype /Type1C
-/Filter /FlateDecode
-/Length 4358 0 R
->>
-stream
-xœ}WiXSW¾rnʪ\Vj.C©,‚¸`]°Ê&V+‹²¸`iY•Å(A@	ÁV¯		A!±.µ€P:^ª¢¥uwtœZÔê´ZG¦ƒít¾Ûç0ó̹DI:ÏÌüÉ“sï=ç;ç}ßïûÞ#¡œ(‰Dâ¥ÌÊ,PGŧˆ£0ÁG"¼â Œuäp‚ðý/aÒ±TdxÛW	çêȹ:íe¤‡'üu$ð€M#(G‰¤dçÞ˜Â"õºü•«Öû¦.^4~|ˆíɤ3føf©_¼ñÍ-Î_Yà;Žüِ«,,Z“[°>Â7†|­Tægû®Tª‹VûfæääæˆÓÒ2•¹«}ãò•ùEE…|c‚|'Oœ8)”üLNÈ_“¥*ö/,(ô]è»8w¥J™¹îW)ŠzmaTAv|taNBLQnlÒº•Åëó“U)ó7*3ß*Y“µdüÛa“ÃÓ)*”ò£©Xjõ*•DÍ¥Â(jG½FM¢’©7©*•Z@…SiÔT*˜ZJÅSÑTµŒJ b¨é”+5›A1”œšE#¸RNdòUI’ä’C´Ã)ì¸Ö±Ûi¡ÓYéhéFi/ŠEWéôcYœLxiÙKÍ/ýä¼Ü¹Þ…uiqMvýÉí·+î#Ü£ÜÝû<Â=ò„~w¡Ÿã/™ÐtÌr³¼5êu¦ú*šÅ©H­Ñ–WÔjÙ[ƒª9⨢\	óàmÔPm¨(×V–*p8n¢‡ƒ Nò=dAä9
-‘$?‡¤vSa"2ëuõ¦*]	›‡ð2Á,Åï"u‰£_»"<oP%U"u%™aGµd††liú¤°‡—ãÍ(8)Ý‹¬‘ðE¼'xòp¨Ã›¹
-ÂTy¤¸lE¹¸l+~J¬{0³àmÛCÔ Þ`Üg”1'|Ôdh÷ù-gÖ(9¼Á´Ž[#Ã\>mÛŠj°n¥”ͺ3÷”ø•.RMlâa;Œ#»¸Ï{3íÂ{‚«<³-Í’ÀÉð˜ñ!x4õ$¼¯]³´u±™÷5r&Yme­¦jÛvM•biú[Å1äK‡9½Ç[=àp¯;3m7Ë\/ÝY£­÷©ÓÕšY¦ýÍ\oÔÖnV0íeZš¦°›<ƒßÀr˜?KkU‘v Ù ÌT‡Ä‘©^"†ð$Š—Wˆç<4¨ÊG%VðÌC³
-C³KØ(A¥G0ÿ,µÂNK4Bä}ïHþÈSí¨»ˆõ\¿ÿ‡wOMkf/6nç>—Ý‹º¬ÀF[°3ˆÇ¹rÈ…éôÍs‹âÞyÅø6A}™kÕ¶”´oøp%·RŸ¼,Ö
-µ :³3	ù¥#Çž¯`<òY <ûÜaTÀ_ñ(6Ëéïwg¾8m¦¿ÿ´¾g÷û~d‡æ¯ãáN–ýÏÎŽeƒ»7S!¨…y¨
-·3¸-ï^|taÆ%˜D`™.ìÑ?\n]lûºSÁ”O~J#ËT¤ \Ïäwfú“/"f¼A¢ÞéûA1Ìԏ<\ç…m^‚¹•æ‰òsÍÌöf#|AØ!ý
-*µ‚ÔÀž±ç³Á8ÌH6‚ƒ;¤V\t¼ä
-Y~°[¾âDâÁùÜ›\âÚŒôÌ·çr	²é4öì¯\½|°ó´âðÁºÎ 3jô•U[·UU+RßZº6ŽœÖ9ั7hpù¾ö¥%ìRìØTSeâdõ:CNtƒöyþ“À8¡&ðpGLBr@d@?ø“ ŠA<BC*UUTªÈ©D„z“I£W³A°uÎ?»æ6'ƒOþ.,Ó.¡ðˆÈ¥Eqi
-ˆ;+v+*(,"2(pVïÓ§ßôü`¥¢yæ%Â>H—s'·YÊZVÝ‹èO0* »c¯øƒÏ#p=ÕjÐ4ÕïoÛªe³WG«â9Lq_•ÿ,ãÌoœïçú¹ž¤}e¶šH$ýUÐöÀ"ð 'ðcÏÒà7œ°—Úêd+âUrA¯Òg¸ö²¶U|ÖÁD.MMûM	±ª ó°Ëá.‰06Éaô çñ“i7üXü±]rªìó©™kŸóŽ69Á.ˆ§ï\Kž³8œ}Q
-•¤Æ®ƒ’p€e"웇HèÅƍ¬$|Et¤7ÖoÑ—²8Ö"¦} N8áó!gÙrp½N»k[
-'««5ÔÕVëKëÙµûU†n)—T8aºì?x¿ÂÃ÷$ÜõB<|'gú®­XÒ택BC±ÓOƃS÷—Í×:Y,§ç¥¤ÎSà—P©†è¡VÜ
-º¸OÚÚ›ZLÍ/#‹ž¡™§ÃÙŠ˜>üF‘üiÂœÈ	¡QD==Ožç3Œ…09$¿' ­Ó›1
-±‚\¾ª9cïbNÆÄE§/XÝXpDÍ)=¢íÑžÓÖ.?\Ö°Ž[/cŒirÂ_ŸÛ~R¡£™¸º*)±Du³ÓɸDWU¯`¶›tz3k¤;òN—^#R•Þ?wûèÆVå‡ìêý¹ÆDÝ”Úê*YkƒiKCØŽs-=·¾XóÎã·i§®ªÎǤ34²Œñkšñ#E¼BÁ7kH«’"Šëp„e„1p¡ÍÕú²²j±»ºDÑÝ«ˆ"/§?þ O?6T+·~°í}­"«xni2'‹Ë<ÚÅ‚
-m5é…"þh!j»)
-bŠ¤œñn§ð¡ÃóÉx*ÊîÉ7k«Ôìbš€P§8„†@8O7jõŠçÐÏ„j˜XÈ{þ™W‡ǽ?a‘P/gŒ|fFc’ß¬yᙍ9­ëÙ&Õ'›¿Þ|£ÂR}¨ìHiÃjn•,jnêõD.ªëƒkÛ÷Uë+8YE•†èQJ—è«êêI8ÅÇ4cLç/_÷×o¯÷w­?ž{Ušõ³Mñ†b]QCqCY×$ûýåÏïÞ¹œ‘¸{ò­ÉÇT£od¤E¯2„æ‹âÿ€dÉ¿:2Ÿy3ë…·¼nÙ:;S’/¸’¤±C½1'“×¼é³4›?ÍÂÙ›)8CÞÎúrɯ]:ræœÂ®#CDÌ ÷òbA˜MoªÝRW_CÎhpF´Z§1Õëj7!bPåGÛH؍~ÍàPE²Òg–+V±o*ÐmëÀª0k+¸ÐmëÛ乸Ð~ ^ÒDJNÌpâ½î	®ÒF»šâ`Âç(ßœzéR4ëcà¦ô‹ÿþ¡Ýt•v¡‡`|„V_ l'õÅŽDÁ•Z?'»r4ÿÁ½ (–‡Ñ¼'ñ"Ÿ%öæRaš×_ì8*Kº1ï‹	yÊÕ)Š-[««¹-²J½Æ¸s÷Ž»wÑ}ÂÉn~þÞr6–NÚ«¬y›t…‘S“ÂYæôœ+K߸xøüeÅ	§7¦‰Î+.£µëêÏþqüTuå'ì¯Ú@D‰Uz­¼ïæSåñÄ›ø—¿³ñ“Œ"!%¯+ø¬ƒå£÷‰›ê+ÅÃ8‹J´µföÂGñN)ììµkù³ÿg™Ÿm[>rØßzvA"žN6âÓðëàÍ<„»P ‡i0YªCÌíF«§%+KlÚíDx,öÂcÀKzrÈõÖWÕþmèYo2^ˆçJ5ˆyh³}/Ûv1Wa8XºÀN`£m_hì}x÷1˜},{ $äGìBN¤èDÙ%qãÃö²aÈT‹fFÄ,ŸÊðç?m9ÔæÓÚœŸÍâë=v«S|ÿéŦ„Ù¶æ÷rY¦wÛðÛ|hCWœ^”õÞ†e9
-Õ©ÕÞå2¹u~ºì?}xð ä²ÐÓ‰DCì\b*Í©¶t|ú1]±—ò»}À­ Fˆ~앲:vq¿“ÿíöÌWƒ"fκ;0ðMߐ9áö¿±Üç%{!"!Ý<¼.#	þà8è/ý=ú¹ùXlF¿fSË·hñ`&7fi<ÂNƒ¯$EÒ{v9ïoóvâŸçšh%f[³~H‚³a>j´ú4µÏdzéá+ÌÆ„J]e=éJ
-CnÿNÛ–éò`[Pü¢$†cxÜ/†6üâ&ߥ߹‹Û#3Tê+5ÚÊ«øÿ\ø¾vûVîý—+‰é2ìÙcÒY«bÖOžB<ŸwÌ›ÙÞ¼|}þÔ•¾“1ïI»Y>¾4æáÔ»ÁñÉ…éyŠ’âŠ5œZ¦©­4ktõ»{/]=þ'ëýCb\FIah‹·àbiÍ$	co!su-©ïš³gÕó«è(¾O#x;ìEîExÔD»
-;
-§ËruÚvë].(¦!\28Zº‚†ƒä¢Y†HøYz=ÇhÌ~Ž`t”´ê^á’ü©]QûO%ŒµCûF‹0Õž‹}æÌ»|æêÊ»ºQÔ¿`b6$
-endstream
-endobj
-4358 0 obj
-3333
-endobj
-4343 0 obj <<
+4340 0 obj <<
+/Type /Encoding
+/Differences [32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]
+>> endobj
+4329 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [345.281 354.239 394.681 367.141]
 /Subtype /Link
 /A << /S /GoTo /D (chap7idres) >>
 >> endobj
-4348 0 obj <<
-/D [4346 0 R /XYZ 100.892 685.529 null]
+4334 0 obj <<
+/D [4332 0 R /XYZ 100.892 685.529 null]
 >> endobj
 482 0 obj <<
-/D [4346 0 R /XYZ 100.892 554.27 null]
+/D [4332 0 R /XYZ 100.892 554.27 null]
 >> endobj
-4349 0 obj <<
-/D [4346 0 R /XYZ 100.892 527.809 null]
+4335 0 obj <<
+/D [4332 0 R /XYZ 100.892 527.809 null]
 >> endobj
 486 0 obj <<
-/D [4346 0 R /XYZ 100.892 418.89 null]
+/D [4332 0 R /XYZ 100.892 418.89 null]
 >> endobj
-4350 0 obj <<
-/D [4346 0 R /XYZ 100.892 389.819 null]
+4336 0 obj <<
+/D [4332 0 R /XYZ 100.892 389.819 null]
 >> endobj
 1756 0 obj <<
-/D [4346 0 R /XYZ 100.892 289.188 null]
+/D [4332 0 R /XYZ 100.892 289.188 null]
 >> endobj
-4351 0 obj <<
-/D [4346 0 R /XYZ 100.892 272.318 null]
+4337 0 obj <<
+/D [4332 0 R /XYZ 100.892 272.318 null]
 >> endobj
-4345 0 obj <<
+4331 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R >>
-/XObject << /Im12 4344 0 R >>
+/XObject << /Im12 4330 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4365 0 obj <<
-/Length 1315      
+4349 0 obj <<
+/Length 1313      
 /Filter /FlateDecode
 >>
 stream
@@ -21670,542 +21182,342 @@
 	$ç|ñÉæ
 -ËÛ¹ÌÂç¹âa³æi¾Z$ᇭٷ½ZŒÎ~ZξÌÜÀ1€1¥‚õnv÷™Øûp¦²4xvš»@E)‹£æep;ûcƇïÑè½	<(ÑA¬3æÞåž²ÙmQW¦,óT‡ïçgaѨeXXE¸Ÿ/dÖÖ«2§­¶¦­ÎzÁn*]Ùû^eo¬Ý¬HmeÖs™„O¨”Wow]Wë®Y  öB(錐5y…º-à7‰ÐX9¸ÌäeI+’ŠpkPù«³N’1”üz¢«ßéä9 ˆ²8¼ò
 i5¹ïq…Ô­;RX›j;"Ô–<•¯‹ĝÆÎPš„¦(kð7´9€:RŠ„4!€Šy.·9iØ9Åüé­ÖÞÐðÞ¢z¤]µ-*0õn˜pó RçN!aQQIDÙ0RÈ&•õ%aw+Á| ÍqâA¾éH÷š…½œ2 RÈl€sA“2clÂÉ}^E2BÄO).~ ¡Ü˜½5»K//.vÆB±1³‚	[M¹Á_tá,·XJºÄ½çB?vÁòA!”¤¥ß¿5.ÿVÆïÔ$vÅ‚/‡Ð<–^4ˆîä
-esƒÉ'5e:¨Ùm!z®¦žA¡:²@pçxS N¼EÛ0y¦²—	H§œqœ3P’%/2Ð+L«°–Ò#¦Tõ˜ÎeR»Ï›¡GájLê³€ÜyÞüÉy&^ÿ¶÷4ˆÆ9ë<íjòe?ÄKâäß0ñùØ›–i­
-WH£é/3&ÜþqâÄý/¸øe'Tp]Ã-§{NZ1DMÉD&ßúh¢G·À{¥§h¡Y,ú"A7ð¼ï-¸Òaýà¥4ùÐq¶ÚDVö·FÚ¥b·w½l 
--6uå¬ÐÐáxq¢f%¡Í¡¦74÷­§9ÐÒ³¬
-Û­ÏØ3ôMo¢­].ùrw¹ó¡#¥ÆE}²{›dSÍ$d¢W<!óÈY„LÏ\È‚
-_-£þ´u°Ÿ}µl¡†¼ïÝe÷<âUÝúZ!ì Þƒ†iÚbÝ•¦!Q×ט‹íPySw«¾Ú¾t`Ì‚U1IüüUÆïƒô­”ÿî%ÎwZ÷B¹Ï»@HÎd"Æwø£¶4_óÓÉwäÌщèíMäŸM…¾iàÔQ\â(ÎíÔ4ÒLœ<ém$:®FMCgðíY´Û)wNäï€;
-
-à„sü¨Rg'
-ø*_çÖšS¢K:£”SßÔ¢ÔZ|±³,Sß©EI¥0çD‹Rÿ{‹ºîLI,Át%„i1ŒVÑ©‡%g=,}µ‡I	ÿ90~Ϧ¡KÄàÈD0-ÞÚÂô+-,:–û/Ìc[œÀ½ÒÀ€ eüOÑm½ÃŠ‹2`þòÉÒt;*”ÀÏþù¹©+UbOÊwž”ý•DÅXwGqNG¨ºA‚$Š£çΉª%&Å­ûoQ,B;b_˜ ÒÃþØ•>2ô°³a*Àö×MnàörT€ýiõ7ëî¶i
+esƒÉ'5e:¨Ùm!z®¦žA¡:²@pçxS N¼EÛ0y¦²—	H§œqœ3P’%/2Ð+L«°–Ò#¦Tõ˜ÎeR»Ï›¡GájLê³€ÜyÞüÉy&^ÿ¶÷4ˆÆ9ë<íjòe?ÄKâäß0ñùØ›–P@<N
+WH£é/3&ÜþqâÄý/¸øe'Tp]Ã-§{NZ1S€v!™Èä[@Môèx¯ô-4‹E_$èfž÷½W:¬¼”†!:ÎaC;ƒèÀÊž¢ãÖH»´Qìö®7€màT¡Å¦®<€:œÀ /NÔŒ¡$´9Ôô†æ¾õ4Zz–Ua»õ{†¾éM4£µËÅá1_î.×c>t¤Ô1ZÔ'»g°I6ÕLBl½â	)˜G¦È"d
+|æBfløjõ§­ƒýì«e5ä}ï&(»ç¯êÖ×
+añ4LÓë®4
+‰º¾Æ\l‡Ê›º[õÕö¥c¬ŠIâç¯2~¤o¥üw/q¾ÓºÊ}ÞBr&1¾Ãµ¥ùšŸN¾#gŽNDooÀ ÿl(ôM§ŽâGqn§¦‘¾°`âäqHo#Ñ©Xp5j:ƒoÏ¢ÝN¹s"Üih G œãG•:Ëp8QøÀWù:·ÖœÒ­XÒ¥œú¦¥ÞÐ¢à‹e™úN-J*Í´œjQêoQם)I€%xƒ®„0-†qÂ*:õ°ä¬‡¥¯ö0)á?ÆïÙÃtm™¦Å[[˜~¥…e@‡ÿ±ƒyl‹¸W¤Œÿ)º­wXqQÌ_>YšnGÅ€øùÃ??7u¥ÊCìIùΓ²ß¢ò¨ëî(ÎéU7HDqôÜ9QµÄ¤ø£¢uÿ-ŠEhGìDzØ›¢ÒG†v6LÅc8ÐþºÉ
+üÏ^Ž
+°!­þP	¶u
 endstream
 endobj
-4364 0 obj <<
+4348 0 obj <<
 /Type /Page
-/Contents 4365 0 R
-/Resources 4363 0 R
+/Contents 4349 0 R
+/Resources 4347 0 R
 /MediaBox [0 0 612 792]
-/Parent 4369 0 R
-/Annots [ 4359 0 R 4361 0 R ]
+/Parent 4353 0 R
+/Annots [ 4343 0 R 4345 0 R ]
 >> endobj
-4360 0 obj <<
+4344 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-ByExample/images/ch7-singleLDAP.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 4370 0 R
-/BBox [0 0 122 19]
+/PTEX.InfoDict 4354 0 R
+/BBox [0 0 121 19]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 4371 0 R
->>/Font << /R9 4372 0 R>>
+/R7 4355 0 R
+>>/Font << /R8 4357 0 R >>
 >>
-/Length 4373 0 R
+/Length 4358 0 R
 /Filter /FlateDecode
 >>
 stream
-xœ‘=R1…{B%–乄¡¡ Ù½@I&[dÃÀõ‘w·€
-Æ…=Ö÷Þ“ì3bm-ûn€›MÁã*…XCÆ/`|ƒ‰ÁÍ#$2• (TŒQMü‘s"Ž	Ç=t®hk<Böª$d¥c6«È…©jCÝífgàù¼l»ïzo·b!Ñê.ýæ1<žIsMhd\“b?ÀU·^¶×ý;”è+(T8ZÄþ®†íåc?¶ê*Q搮&_ªÕŸîoŸñ²?g衇5D-T%{CB¹d ‹’ÏÁÁû÷Ô“Oø¨sÈ(°C’HjqÈ¢l“ʼ—ÓäcšÑ…Ëtó[ÔÒš·F,uþó'm±-­4¦I\)•¸\ü4—5|@n¶
+xœQ±N1ÝýËP“Äv⌠íÝ”ÒVBÜÐ+‚ßǹ»¦"Žì÷žýœ3ŠZ,y?Àí¶àé[Œ'P2Ö*˜1'dKä)f¥(ŠãŽP)H
+¿aÒÂíÓuVÙkI12©0J6JV1–H•e¾
+é–‰¾çâü^Ò~ÀûÞÝJ\]¦?ÂìҝEâ\+Y¬5a?ÀªÛ
+¯»›þŠ8Á
+&*Q|Ûþ
+VÃîòy[w­”cPÅõ¤ë¶[ÿùáî/‡ñk=ö°áB5e_(Q.ȉI|ó܁2~¸Çÿ :G?`RâäŽ(›L4Óê &dœÑ•2UþÚ´¦Í"Xªÿ‡5¡ìWÍ6
++¥
+kMì4!-²T~“šÐ~ v"u­
 endstream
 endobj
-4370 0 obj
+4354 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110927)
-/ModDate (D:20080610110927)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090502-05'00')
+/ModDate (D:20080528090502-05'00')
 >>
 endobj
-4371 0 obj
+4355 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-4372 0 obj
+4357 0 obj
 <<
-/BaseFont /EBQLBR#2BAlbanyAMT
-/FontDescriptor 4374 0 R
 /Type /Font
 /FirstChar 32
 /LastChar 118
-/Widths [ 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 0 0 600 0 0 0 0 0 0 0 600 0 0 0 600 0 0 600 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 0 0 600 0 0 0 0 0 0 0 600 0 0 0 0 600 600 600 0 600]
-/Encoding /WinAnsiEncoding
+/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 0 0 722 0 0 0 0 0 0 0 556 0 0 0 667 0 0 667 0 0 0 0 0 0 0 0 0 0 0 0 0 556 556 0 0 556 0 0 0 0 0 0 0 833 0 0 0 0 333 500 278 0 500]
 /Subtype /Type1
+/FontDescriptor 2063 0 R
+/BaseFont 2067 0 R
+/Encoding 4356 0 R
 >>
 endobj
-4373 0 obj
-298
+4358 0 obj
+300
 endobj
-4374 0 obj
-<<
-/Type /FontDescriptor
-/FontName /EBQLBR#2BAlbanyAMT
-/FontBBox [ 0 -16 593 604]
-/Flags 5
-/Ascent 604
-/CapHeight 604
-/Descent -16
-/ItalicAngle 0
-/StemV 88
-/AvgWidth 600
-/MaxWidth 600
-/MissingWidth 600
-/CharSet (/L/A/e/D/P/r/s/t/S/v/a/m/b/space)
-/FontFile3 4375 0 R
->>
-endobj
-4375 0 obj
-<<
-/Subtype /Type1C
-/Filter /FlateDecode
-/Length 4376 0 R
->>
-stream
-xœU“{PSWÇï%ɹw4¢rØÙhnšn‹«ØâV„iå!ì8RA×ek›H”H$”$Â#‰­^%!!h¨u-¨ëÁwi­–u·u´¸´ugÝî–>l—ÙeÛiwæ2;{«°ÿœ{çœßã|¾¿MÉã(š¦ge›
-ú*{vaIÌZ"ªiqAœ¸P&4ˆ_‰ãŠ…Ôªôª9û”´ ”	Jy÷&'zæÃÞ¹à˜GÉhº~ÿ¡\Kµ½Æ´½¢V»¨´xSJjêâéeZƒýá‰6Ïh5m¯Ò>E~êŒfKõNcUm¦6—Ü6›M[µÛÍöê
-«V_^n,¹mÔ›•Ú|“ÙT]m©Ó.ÊMÑ>›–¶ì²<û’i§ÁfÕZª,ÚµÚbãv›Y_ó›EůÍ6æÕXk7Ôéw´õ¥£ò©'©eÔª„*¥Ò©MTõ•KÑÔ\B„’Së©éÇéúó¸BY¼l‡|¼^þEÍBsıxqLÀ¢
-Ó°r zÏÉ \Œ¨>AaŸ7ØåòÚy©ÙÛÜMÎw˜ÿtÂöbÌr6Å,± ^F!ßÙänuh¤t©—™É.aÚÈ„m2q©®KÉŠ®†">oWÐå­ç·!i³QH¯"»‹äñÅŽ•H*˜°)ÌÈÞJ<ü±­Tî m¤¤,ô$+àM¬’šPpIq‘Ì
-r0<iñ0”©„K{¢§*þš9˜*°ÒcÉK¥x)ñ§_€úkP^éó·ùÛ<¯ïÙíæ·VæØ
-‰2o7ýÈbyäÁð1aL):œÆNÙ‡á,#•iÆ3,ÇA:þ}tO\JÔH–i`}OØT¢
-ž`®	gû+°áØ:a#›Ãèž[´X3…«Á©÷I†hPA4:òàÛç‡u¼t"F¡É£pmÂV:ƒIŠL1©ç%
-‚9€BæÞ­
-ù¹ÅéüTøQlÆ	‹“¸;`—«$9Z]Í$BˆÿDM´œ~Wˆ‡Û(ðºZ|^ʇ×wfâ.½¨>"D[ŽÕzÝö´lg‡¿³Ããstñ¯uÛüU¯…"Ë’ì¤5°–Âüjœð=Þuú/'q1OT©*Nn9T,°\~JNÙšÊpUïqô¸GÜ×ÝÇÝÇ›Ž7†j„Z–l\SžþËÕg.i¼—ßéò7k¸5±þâW»ÞëêÒp{ƒ^_„0Û®:n	,(>¿þÙÛ»úÌGøÊnc`÷¹Ï~[Äª¶„B?¸~jäÓww¾ò¦†Ó5ì÷º:ÕA¯?ÌsNvw85\ ¹d˜j¡ˆKd°™ ‚ÙLÄãklôÄú{v6S?%|„‘Ž U7Ëü
-ÐÙ~W u÷{^wkÖÕŽ
-›¯{‡(X˜G-û?8+Áiœð
-¶_€.$q:q½Ø¥âX¿%\¤Öe¤ëÃå}µ|¯ítóÇÍÃΨç­ÆG¨R¨`³W—.!0Ò„ìÁ7ní=ìñ9Öéj#R)˜zŸ«³‹PÑœ`¸@²ÞQƒòïwÆk/ñæˆÅ÷B°ÐoõV‡¬¡Æ^¡—ýèæ;÷ïÝܲîà$”vwPl÷…ùï™Ø<O¾7Ö<Ý ˜î=¨À ƒ/a¥¨Tœ›Ñt©Ó³pIÉÒ¨b’R`TñÑô|ϼ„dM(S40äaøN¸‹a >‰sˆÏ'þ…¦Â;x®±¢h¸àÝ%ÛÖ4ÙK4-»=¡…mõµöÜ·ï æÞÑïiýÓ;;~Ãç1E‡Ìí/“YŸ¿¼(ç®¾øÇM†‡Žß¸©¹(ÿÕڍÖ\"Ì–¾Á‡Ïÿtኧõô£ñ Íz÷¼pnë8Ðd‰Í‰œˆŸê]¤l‘»O5=´È˜Ä‘1!%¶]M¤@ß8{ê­~ußIÓV^º32­:w9v~v¨÷(©²ÿä#ϵKwg^ø	úÑÐo¯®7ì¨Û\®±]©<úª ªì¦2ö!¥cG»£	0$qƒ°BW-ž¦z
-qΉH)óhã»/7˜wù÷¦»j˜36óaÞâ1invIeÞfòÿ ú×g+ŸHÉÌxzQÖýññ?ÿåŸ1ñ»¢âò($D£Qt~ž}^©ÄÊ9õ_Ä`
-endstream
-endobj
-4376 0 obj
-1615
-endobj
-4362 0 obj <<
+4356 0 obj <<
+/Type /Encoding
+/Differences [32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]
+>> endobj
+4346 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-ByExample/images/ch7-fail-overLDAP.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 4377 0 R
+/PTEX.InfoDict 4359 0 R
 /BBox [0 0 245 86]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 4378 0 R
->>/Font << /R9 4379 0 R>>
+/R7 4360 0 R
+>>/Font << /R8 4362 0 R >>
 >>
-/Length 4380 0 R
+/Length 4363 0 R
 /Filter /FlateDecode
 >>
 stream
-xœSÁn1½ç+|,‡5qìÄΑ
-Ä…íÌ
-qÚmÕjF¨»¨ü>NfWЕª®P9~Ïö{ž'ˆHÛ9Ü7Kx­p¿¤hQ~‚‡Ðsàús³fHY0gÍ	¹0p¬&°Û†ÁíìîI$¬)¡fƒš30rϽ{;e8Ôvº§@ë÷áºYàrô~+`’\atÂ5RÂZÄ™b‚q	ôü˜ÞrÄXÍÛFim·áb™ö¿¶»öº!Â(±ÀfåÕþþå㇯°ßîž×¤Oc¸
-VErôvc†%SÁ¨Pª¢¤³ÏxNÖLš´.…To|	j.®18+›g™ª¢HÚp§¨V˜©@É¥¬õªµˆ²‹í‘9PòˆyÀÜÇ8u¢¿FRĤ@Ù…áWŒ|#å$UÌVÀ	côÍÈý<=oW«ŒÎ±ÊçòNØ=W§i¢ÄˆÒùS)}àop\ûãýÝ{¸=<ts¸úÈ*¾Ëÿ²Ã%¡u³2aª
-©F47m>ÅtÑ“eçb¿$õZ&¾®.ÎÑuߟìÿkR‘ˆ»Ÿ/Qéu™
-kd}¡²ïfÛ1Ž¨µÔ®òÝô0o~þ+âUøP×Ý7
+xœR±nAíç+\&Å{ì{J"
+Ém‡(–än…r‡Âïã™» $R”ÚÂ+Ïó³ýžïúwŒ×Kzwep·OýÛÝ%6ó¹(5°’QJÉŠÍv›tÛAN¦ð'
+6¸útJÝ:±cƒÂ­8´ÌX„AÄQôHýd}ì³Þ'>üÃõSläÀŠY£û„䌭j09:SiIgëyù>ŸO?BjÓ¢6W˜nÒÙ2ïovýuÅŒ¤”a5x+÷Ïށýf÷p }œÒeòª¨fP(ƍ&KbáŠdP›¡²Ã6v<µN®]ҐBªx ÌCSPlÒQî2VC®#ñ¢¨·cAòR±ßÛ50	­k	çÈx$K‰Eƒèß‘(f.HÒø#ßÂü¯“l†Å+!Q0v'÷Ûùasð*
+²ó)^Åf1‰„é–eÈB„:øs­cå¯ðxëñ[ÌpsJñz¸ÓWÓîÒÁÀR3HÍq„ä…17ƒÜÝÊÑÒ'EC÷ìeH)Æ%°¸ÆÁ†:a¼åáW-]”†Ì2,}^Õ™^×Ù±‘Ø3™ã:û•	¡5“!óíüc»úõTÅËôP#ä°
 endstream
 endobj
-4377 0 obj
+4359 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110928)
-/ModDate (D:20080610110928)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090503-05'00')
+/ModDate (D:20080528090503-05'00')
 >>
 endobj
-4378 0 obj
+4360 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-4379 0 obj
+4362 0 obj
 <<
-/BaseFont /MKGBNW#2BAlbanyAMT
-/FontDescriptor 4381 0 R
 /Type /Font
 /FirstChar 32
 /LastChar 118
-/Widths [ 600 0 0 0 0 0 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 0 0 600 0 0 0 0 0 0 0 600 0 0 0 600 0 0 600 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 0 0 600 600 0 0 600 0 0 600 600 0 600 0 0 600 600 600 0 600]
-/Encoding 4382 0 R
+/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 584 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 0 0 722 0 0 0 0 0 0 0 556 0 0 0 667 0 0 667 0 0 0 0 0 0 0 0 0 0 0 0 0 556 556 0 0 556 278 0 0 222 0 0 222 833 0 556 0 0 333 500 278 0 500]
 /Subtype /Type1
+/FontDescriptor 2063 0 R
+/BaseFont 2067 0 R
+/Encoding 4361 0 R
 >>
 endobj
-4380 0 obj
-465
+4363 0 obj
+466
 endobj
-4381 0 obj
-<<
-/Type /FontDescriptor
-/FontName /MKGBNW#2BAlbanyAMT
-/FontBBox [ 0 -16 593 627]
-/Flags 5
-/Ascent 627
-/CapHeight 627
-/Descent -16
-/ItalicAngle 0
-/StemV 88
-/AvgWidth 600
-/MaxWidth 600
-/MissingWidth 600
-/CharSet (/L/A/o/e/D/f/P/r/s/t/i/S/v/minus/l/a/m/b/space)
-/FontFile3 4383 0 R
->>
-endobj
-4382 0 obj
-<<
+4361 0 obj <<
 /Type /Encoding
-/BaseEncoding /WinAnsiEncoding
-/Differences [ 45/minus]
->>
-endobj
-4383 0 obj
-<<
-/Subtype /Type1C
-/Filter /FlateDecode
-/Length 4384 0 R
->>
-stream
-xœ}”}TS÷Çï…äÞŒ(\;CssPTTœòrZyv˜("à-k"A"‘P H!‰ŠW¤$$€†_¢u^ߨNGY[J[7m·Òmn£ÝÖçî\ζ_H1쟝“sOžßËó<¿Ïó}ø`8Žû%ªòR]bF¶ÛZÍ…àÜRn™/SÃýñ_¤p¶9¦táQ1Έ}± {©èƒ@¸ -‹@¿óÅñêæãÉš2]¹jOq¥,<'kWDdd”wemll¬L¡›Û‘¥(+T{Je¯ ?UJµ¦lŸ²´2^–ŒN«ÕªÝ²=j]Yq…L^X¨,t_Ë•«•%²T•ZUV¦©’…'GÈÖEG¯]…>붩ö)´²M©F¶U–¥Ü£UËËÿgÃ0jk¢F™R”Y^Q©ÚY¥–ïSÈVaØ*,ËÄR±•X¶Û‰ec9X:ƒíÂ2°$l–ŒáØ/°%&Àv`âp9~ÛgO«Ï|o–
-ôÂ(áaáûDñ
-™G¾AÖrSþÜÃrZ‡¸Aè»ì…œSò)Ñeµtt-:šÏ!t¦:C›©‹þlFûºÛ2Ô¹-.
-Þ$f›¡ÎÔ —ò1|9ëÂX¸ÆâVP@<ùr›!Sr—λ
-Ñ„Ójéì0Zªé"‚ÏãœBþ-BgDq¬îm1Á§Íh…jB×€nØÜK‘DWºÑˆRJ nC˜Þa%|=\'Pä–ÃY|œåüX_¸Í%KøÀ•aü">ày8BàóoÁ–„}Ã/¡‚<‰[¾1nÅŠŸOùø={’Xx•Å¹/a®5¹jÏ?Ɉø%akx>è»ò'ßè·5Ú͇ššèÝ%IÚ†Ç˜øuÿ±çÓ±{SÌ3‘y"Zä…»˜…¯PZ‹Y‰j
-AÓ €PúW$„¾>HÊk¼Àû	vF+á´°œ¼Ã\¬(f§·3¹¢$2t}x”Ôƒ{¹/B¾[8±ò½˜øüQâÖÐÀýnöPSô†™ašQ{›µ£Íl54ÓêÖT‹’­ýIn½-†¬ö$夿â'#ˆj#²¬È‚ßÛ÷•â3	OÄ,ŽyÞôō…	$@LN<ýËƱPš?ë®[Á]·;3ÚœyU¬#œžô7)58ä£û;ÓR“³b蹩Ù@Hfƒ©‡ æ6Hx¡o0Ö#úS~2rÖ2ØŒ»ÕÞyÀª§ùTx› .NƒÏЩ¡“ŒëÀéJ‹éXS«ûѶvôh}'ýv·ÖVÊü”ÉÔ¬Þ$š­y9,ƒ5Pƾ`÷ÁÀõ`ÊÎ¥pIñ¹‚ãYŒˆJHÊO/é*íÕѽú^ӄ鮩ÇÔS×Së(g*E”=7½0æG[.^“ZH*µÝh«—Ré7!»Úbì”RG:,V'm'‹nêï3"~y÷ów÷÷«OÒ%ÝJûvËú6s³¶ùªê8àpüpðîù‰ÏÞÛ÷ów¤ThM³ÅØÒa±uÑ”ýc’
-í2µ¤”½¾Eðˆöï¨k}!¡‚¤Ól­­5»;rA¢·ªüIbóhþÓßqé¬Ího8x¸éIª¨Ø¢ßɈRåïÓà
-ùR=s¥x>8œGeþÄ]‰õójéÇOò1óÄüoRf¥·(ྐԛŒ::‹DÚ¥gˆY÷È.“Õ ý}˜!ZÃþ™Õ]…__
-¦B¹\§„²³ò‚®ÌÐ„´yWa%ݧ½Pÿqý˜Áe>SÛ«w”0Å¢Ä-9«êh&qøðý#'¦‘Á؈„ $«­ÆöNNz–¤ìùìHÅÃÿááÔpåUåiZíÔX_ëÈ°UXÊŽÚ>¦OôÑè­'F¶·Ì"o5u„t´Z»è¤{¾ÍÒtóè`ñ>ƒ¾ðuÄqbáåy’Žôâx@ðaü¤p?ÁGÀ¤ð#ï¼›ˆ% aF,ôŒ‰#®n×êi7j½ç’¹ßŒóÿ öÀd!……°ã,Œ°
-ð¦ôÜÆ ¿OvzšªÍ1–öÞê¢ô:]¶ôÀA³™9 j°6Ú›[Žm‘>:Õk¹Àˆ>¹µ÷gt
-™y\Ýú&}2chêæëìz:6ÒsoT:$øñÖÜŠd¤š‚þáÇ®|wõ†¹áÂKÁ N¿¯]Þ=
-8ú¸›X€¤“è)ýü¤jÎBóA=ŒRl@Q¡)öÞ¥ógBúÏ©vÓüÃ	¯$©ëîýK#}§P–çö*iª•Ÿà—* FÞ¸¹C±·*¯Pª½Qrê-FΔêTù¢9JÏY ҁ°ˆ¦†aÂå¥{‡ 3ÎòåÂ_¿&¨á”ëï«ÆC`áÔ4Àâ¨)~QbvIJ
-©¿‘<û<nyD|ì«á	O¦§ûø[7ôƒg$/›[éÎþû]ܺ\.⊻àŠXÌŠbØŒg$à
-endstream
-endobj
-4384 0 obj
-1863
-endobj
-4359 0 obj <<
+/Differences [32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/minus/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]
+>> endobj
+4343 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.705 493.438 241.061 505.006]
 /Subtype /Link
 /A << /S /GoTo /D (ch7singleLDAP) >>
 >> endobj
-4361 0 obj <<
+4345 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.341 258.384 466.698 270.074]
 /Subtype /Link
 /A << /S /GoTo /D (ch7dualLDAP) >>
 >> endobj
-4366 0 obj <<
-/D [4364 0 R /XYZ 151.701 685.529 null]
+4350 0 obj <<
+/D [4348 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1757 0 obj <<
-/D [4364 0 R /XYZ 151.701 480.446 null]
+/D [4348 0 R /XYZ 151.701 480.446 null]
 >> endobj
-4367 0 obj <<
-/D [4364 0 R /XYZ 151.701 463.576 null]
+4351 0 obj <<
+/D [4348 0 R /XYZ 151.701 463.576 null]
 >> endobj
 1758 0 obj <<
-/D [4364 0 R /XYZ 151.701 245.392 null]
+/D [4348 0 R /XYZ 151.701 245.392 null]
 >> endobj
-4368 0 obj <<
-/D [4364 0 R /XYZ 151.701 227.309 null]
+4352 0 obj <<
+/D [4348 0 R /XYZ 151.701 227.309 null]
 >> endobj
-4363 0 obj <<
+4347 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R /F60 1917 0 R >>
-/XObject << /Im13 4360 0 R /Im14 4362 0 R >>
+/XObject << /Im13 4344 0 R /Im14 4346 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4391 0 obj <<
+4370 0 obj <<
 /Length 1158      
 /Filter /FlateDecode
 >>
 stream
-xÚ­VKoÛ8¾ûWho2°fÄ—$ØC»Ù,R,ö¸§´Ú¢c¡z$’œ4ûëw†CÙ²ãtÑ¢0`r†óø8~TÝEIôûìÝrvq%D”1“%<Zn"ž$,7"JsôQѲˆnã·ʶ™Z¾÷æ93iªÐ\–€uBv)“l¾àI*ãëú¾rµkžsÎ9d`&1>™„y¦ôè.”F«ÙoËÙÃŒƒ6‰øfRFëzvû)‰
-X{%Lš<zò–u$uÎRÑªèföÏ,™nR›ib.rÆa©LçšÒ3Æ0=ø,¸d:hïmß«ùB¯ìú³k
-~¡¡*ì}oë78¾¹¸¨m?¸ŽÙLتü—Œ>r©|l“1™JJ e8‰ÐWöÑM Ûâœ_À{q˜ì
-àKÍ”ø—[7…ŒÝÇ„K8H’Ú
-Ã¶ìiÖs‘ÇÏ•;6p
-ª‡î™ÄÑzØÚéÆÖh±²$Ve?ìm|,ïz˜ð¸ƒ>xán;7­ú¸¹²™/”„°óo‡-Š&þãs½ý›;Ø•í]]—¥I|½9ë´nivêá
-”Ý‘ªl6mWc³6?ƒ&Õq9œÃÕ¹~Wù
-æƃÄÑÙ5&Ø’Ô¹uÛ4G$YìÊæŽä~Û¢åSpô%*×6r‡UŽ¡{„‘„sÈóxlwPÂŽªé×EÜ´Cˆµ=[Ⱦ­vþò‚Q®/;W°`mGsT¶¬<ÂGüsa±—™ªˆÑ/$§æ‹Æ
-4™tH^S—'öên×Ù€Q†“ê¨V¨ö²¿ÕÑ­×^•àìÈ!eêÈä,( ¶œ›S"ÉLö*‘K1×>ZÑ´ Ýì±dÙˆåôrjÄNG›^}Q
-¬w‹cÀSGÅåÎV4;\¯/‰Þuíg”ͨö|pÆeK…þÓwÔRþô:!«TwòïaäÓqÎÆè<’™`"õgô0K˜ ¿qâÕ£OP\\×Pé˲ò¬9IaÂqÀþ
-˜÷Fp‹	:ßÇ'<>-R)f”¤Ò^o<©˜8´ôI!\±°â9$CQJLy¤‘çHšÐYOš]S>ìÂê)‘™W/_m=áÕd	À ¯TjÒ@¢Ž–mÆâq®5ŠÁkwý$À4"6.Ž##”‡@<Á
-n5ìzpwÐó!—¿@²%Î9Ü“ÚðìðX²–¤¶q4靫„«gÇÂ…õðJ|Ÿ<¾õÐÂ{—«iÎèø¯ft|…dñÚvð€ÂS¢¦§ÒS‰ÅÙ¾ (ì®À×KeñÛ†–Ü‹|KB»¡‘Þi%õ3ñ)Dúó‡|D¢êITq铘½N"S,?ˆL0J¦å	™r3bzA¦9K²sd*²3d*2êI?ôxÌŽ„¥oÝ–ÜÍ…KNÅÅ
-þÕÃeúŒJ`Ž?bzª©-Šrìÿ¯SIqñCÕpøj–OøÄ·júB5	SŠ¡žBý£nÓ
+xÚ­VKoÛ8¾ûWho2°fH‘¢Ä{h7›EŠÅ>÷”ö@[t,TD’“fýÎp([vœ.ZLÎp‡ÃâÑ]Ä£ßgï–³‹«$‰2f2.¢å&œ³Ü$‘Î
+KŠ–Et߸õP¶ÍüÓò½7Ï™ÑZ¡ybkNvšI6_®e|]ßW®vÍ`Ás.âÑ9‡Ìpã“I˜g*Ý•¢Õì·åìa&@Ë#1”2)£u=»ýÄ£ÖÞGœI“GOÞ²Ždš3b´*º™ý3ãÓM¦fšX$9°-5"¥ôŒ1L>!Y´÷¶ï‹Õ|‘&i¼²ëÏ®)Hø…†ª°÷½­ßàøæ⢶ýà:fW0a«ò_2ú(¤ò±MƤ–”@Êp¡¯ì£›@·Å9¿€÷â
+60ÙÀ—PªqWË­›ƒBÆî#’¤vCã°-{šõÃ<ÉãçʸÕC÷Lâh=lmˆtck´XY«²ö6>Vïz˜ˆ¸ƒ>xán;7­ú¸¹²™/”„°óo‡-Š&þãs½ý›;Ø•í]]—i_oÎ:­[Úƒƒz`¸ew¤*›MÛÕجÍÏ Ñi\çpu®ßU~ƒ¹ñ qtv	¶$unÝvÍI»²¹#¹ß¶hù}ɟʵƒ
+h!à°Ê1t0x8‡<×XÁv%쨚~=‰›v±¶gÙ·ÕÎ_^0Òqáú²s	Öv4·AeËÊ#|Ä?Ëp™©Š
+ñBrj.°hÜ@“I—DàSê²3ààdÀ^Ýí:0ÊÐbRÕ
+ÕžBö·:ºõÚ«œ9h¦ŽLÎòˆ2œqiN‰$3Ù«DB,yÄ\ûh9DËÚÍK–XN/gjX’ê‘ð¦WÆ__TëÝâ˜ÅðÔQq¹³Í—ÁëÇË@₆w]ûÙe3ª=ŸG‡qÙR¡ÿôõ„”?½NÈJ+ dñ=Œ|:îCãcÒ<’™`†ÎèaÆ™ ¿qâÕ£OP\\×Pé˲ò¬™kØpÂ`ÿÌû#¸ÅïŒãŸ©ËI¥½ÞxR1qhé9’B¸baÅsH†¢T2å9Fž#iBg=ivMù°«§Df^½|µõ„/Ï€A^©*Ôè@¢Ž–mÆâqž¦(zw®Ýõ“ ӈظ8ŽŒP>R ñ+¸Õ°ëÁÝAχ\þN É–@:çpOj#²Ã@bIÈZ’ÚÆѤw®®žIKÖoÀ*ñ}òøÖCï]®b¤9“Æ5£ã+$‹×¶ƒž5=-žJ,(ÎöEawï%°u¾^*‹ß6´ä¾Xä[Ú
+ôN+™8Ÿ‚@¨?ÈG$ªþ—D%Wzb³×I ÉÓâ‘iŒ¢•<!SaFL/È4î=G¦Iv†L“ŒzÇ=³#aé[·%·CsáÒ„SqqAƒõp™>£˜ã˜žjj‹¢ûÿkÅTðaÍ“ʨF IËHè„qñ­„ª¿B¨ðŒ*%¾ƒPO¡þáì¼
 endstream
 endobj
-4390 0 obj <<
+4369 0 obj <<
 /Type /Page
-/Contents 4391 0 R
-/Resources 4389 0 R
+/Contents 4370 0 R
+/Resources 4368 0 R
 /MediaBox [0 0 612 792]
-/Parent 4369 0 R
-/Annots [ 4385 0 R 4387 0 R ]
+/Parent 4353 0 R
+/Annots [ 4364 0 R 4366 0 R ]
 >> endobj
-4386 0 obj <<
+4365 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-ByExample/images/ch7-dual-additive-LDAP.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 4395 0 R
-/BBox [0 0 315 163]
+/PTEX.InfoDict 4374 0 R
+/BBox [0 0 315 164]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 4396 0 R
->>/Font << /R9 4397 0 R>>
+/R7 4375 0 R
+>>/Font << /R8 4377 0 R >>
 >>
-/Length 4398 0 R
+/Length 4378 0 R
 /Filter /FlateDecode
 >>
 stream
-xœTËnÛ0¼ó+ö˜¼åòµä±E‹^zhbý -+©ZÉN,%ùý.E»NP 1
- ÍìÎÎ,ý 	t¹Ž÷vToî&e4ròÏŠ Wn¾)Š˜Ø0$c09‘#C`9¡7Z£\‡;EÁzŒÈ‡.iHlòHÄ}{	h} %Õçã­ás#¢PÀ`C€FJVy½/%1&‚fTWë<nò‡æ—"öh"‹tLEz³UWcžæîP¾®ÈÅ:XÕº¼|ÿþåÓ˜ºÃS}mÔµè!S€ˆD?èÈI?-ŠH\ô0”!ß­+ˆÄ	
-]PLJ¦ÐD	J0ò$SÌþ!-Ý^à,M¼y#€·Aÿ€Žh’¬‰EçƒY˜†üÔU‹…@>\`±7Tf#G²fþ¥{N¸²<ËÔ ÖeÅiˆ¾˜LÁÈü²%NøJ08á˜ÐÚúækéç$
-s®^ú—T822Û‹Qëª]{àŠà³tNrÐN¥ÞçŒsHÚœÆÓV@	µ®ãƒDQGsïL*ÍÞÈY£Mœ^æL©TrËA³\ZÞnû¹¯Q/4YXfWh+ÒVþ.V²³Ú”Ő䛟,éorû»Ûm¡Ýï¦~š'ØßB®ã‘
-%XÕbüâÐBF†e»àv€YÊMyì`›ç¼ÉS‡õÔc4rڏì±s?ü2l{i
-ýx?tc·›óÜïw…'zKæ5o¹m÷;‘øÜl¤Ùãýзyî¶øw}¯Õ0$
+xœTËrÛ0¼ó+pLF	¾@Ûi§—šX?@Ûr¢V²KI~¿ hç1$žŽ4#
+µ`€î@#.×ñ¹Ôç+†ëQ”ëp­(bbЬÁä<DŽˆÁrBo,ZµUF#'Ïð¨æhpõãÞRQ°£2Ö¡‹@šR›<’€çàg€–ǼRú~|¬øÚˆ*á6h$dE€‘£è½`#ÆDÐêb™‡UþÔüVÄM,còšºò8µ‡òqAFÖÁ¢†µó÷Ÿß¾ü‚±=<TÐ÷F]J9Db)ŸaPä4£Nrb5zè‹ÆAË
+"1‚Ä ”“b,4)‡%y+™âUÿiÎöÔÜb­³DãÛþ¿úoÿÅw“d8D´/ŠÿcŸÚj±(œæ·ö†Š4rFfË¿4ÏI‡etfÑg –eÅËŒ¾xLÁˆ|1ÐYª(Áh4‚q‘ÐÚzòŠ5çsÒ	ó½ä#.MáÄÈlÏF-kíZ|Ò¡ü\zÔ²]§PƒŽú<°wHÚœäi+ „ZWy$	ÍGÔÑœä=“J²wÚ¬Ñ&N/ÛL©DróšY®k–7›nêj§gšÌ+³+´i+ÿ‚E%¦ŒŒt¾¹iaîþ*¯ÿ´»
+¬÷»±§ö[Èu`<²!‹̾ØYÈÂÈ0l÷˜$ܘ‡6yÊ«<¶Xw£¡ô:BsӍ w†Õa/©¡nûvhwSžºý®ðÄBoe7Ž¼:«Èëõþ~'%>v}+IvÛwë<µ|ßKõ106†
 endstream
 endobj
-4395 0 obj
+4374 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110928)
-/ModDate (D:20080610110928)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090503-05'00')
+/ModDate (D:20080528090503-05'00')
 >>
 endobj
-4396 0 obj
+4375 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-4397 0 obj
+4377 0 obj
 <<
-/BaseFont /VUCYCI#2BAlbanyAMT
-/FontDescriptor 4399 0 R
 /Type /Font
 /FirstChar 32
 /LastChar 119
-/Widths [ 600 0 0 0 0 0 0 0 0 0 0 0 0 600 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 0 0 600 0 0 0 0 0 0 0 600 0 0 0 600 0 0 600 600 0 0 0 0 0 0 0 0 0 0 0 0 600 600 600 600 600 600 0 600 600 0 600 600 600 600 600 600 0 600 600 600 600 600 600]
-/Encoding 4400 0 R
+/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 584 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 0 0 722 0 0 0 0 0 0 0 556 0 0 0 667 0 0 667 611 0 0 0 0 0 0 0 0 0 0 0 0 556 556 500 556 556 278 0 556 222 0 500 222 833 556 556 556 0 333 500 278 556 500 722]
 /Subtype /Type1
+/FontDescriptor 2063 0 R
+/BaseFont 2067 0 R
+/Encoding 4376 0 R
 >>
 endobj
-4398 0 obj
-594
+4378 0 obj
+600
 endobj
-4399 0 obj
-<<
-/Type /FontDescriptor
-/FontName /VUCYCI#2BAlbanyAMT
-/FontBBox [ 0 -186 593 627]
-/Flags 5
-/Ascent 627
-/CapHeight 627
-/Descent -186
-/ItalicAngle 0
-/StemV 88
-/AvgWidth 600
-/MaxWidth 600
-/MissingWidth 600
-/CharSet (/L/A/n/c/o/d/period/p/e/D/f/P/r/s/h/t/i/S/u/T/v/minus/k/w/l/a/m/b/space)
-/FontFile3 4401 0 R
->>
-endobj
-4400 0 obj
-<<
+4376 0 obj <<
 /Type /Encoding
-/BaseEncoding /WinAnsiEncoding
-/Differences [ 45/minus]
->>
-endobj
-4401 0 obj
-<<
-/Subtype /Type1C
-/Filter /FlateDecode
-/Length 4402 0 R
->>
-stream
-xœ}VPSW¾r¹ÚRsj
-Š\ËcWy¬DÄÒ²
-/‰B…(áB[½EKBBА‚ˆ
-õR•ŠZënËTETZ»¥k­Ë¶Ð×w/³³'Lº³³3™;9÷žsþÇ÷}ÿÿó'‚Çã9GÈÓ¥ùªˆØDË*ˆõâ±Ï:°‹i.ŽýÛ?üEĺàü¹ï¸òhWGÚÕ©ùÙ¹KÜadž¥n„#W\s8JQ Ú%Û‘Säí—”°Í?  ÐöfEHHˆwºjö‹wtV¡lG¾÷ügw–\Q—•_æ…wËå²ïrUAN¡·433+Ór,Y*ÏÊõ–È䲂Åno¿(ï•Ë—¯XŠ+ãdyéÊBïXE¾Â{“wBÖ¥\ºë7/	‚X´)"?C‘Y¿«0§H¶U™¸;w\š—î½l)A,%|ˆÍD4O¬'¶ây"†XAl%‰—ˆ$b#L$«‰mÄ&"…ˆ%"‰8"Šàó‰c„çp‡>ãÅó>u8”;üäø’ãq§gœTNßò#?¤A_ê¿%–9s´s®;os——l—j—6v|;N3¬’áAh/tœr„LÖ,º…uZcC•VEqIHU©)W×i©ÛSʵ–•ºÜ²bcà5dªÖ«Ë5%b.˜ëL_¾œax:H‡0Èvd×A¼èçË·;
-Ë‘Y§m0Vi‹©lÄmgÍ|îu¤ªÂvt–Ï®ˆ‹™RòåHUOè-¯Pc>Q‰]
-GÀ—ï2"n/Îð#«å1¦€qwZ{=É;Æ®­³\«.·\Ûɍ¥¡b«f
-<m>¤A-:Éè
-GB²¯åX‡¾ÛëCÚ¬i)nÛmÜEç	9Z&°¹â€LVWJ(hÑèúOVÅîسi‹;QÊÀX‚½xÀx’ÝìNÖU$íJnŠ£…Ü3ÜSÜÂï‚Àsh¨©k€:f>ÒH…uu•UûTV‰SR_.ŒÂ;ÖÞúo€Ãýaiò!Š¼VRS«iðª×Ö™)²û¡€¼Ö¨©Û+&»Ë4•*jÚ,ËcxÃëÌ8Â6JĹ?ïËÍçLúNÈä÷0úþƒ[H¥;ý|/ô9¿5¡‹¯¹;9ñàîÖó»˜dÀ©©¹É½¿ØS0Ï“T³*vB´ÔÜ W^Nx-öÒål"¸ùãKÀåö•®ëýb²|åcÁ Hu"â0)š
-]Œwú†…úûþ[½û½%Y\\/,c`Ԃڏ°8eã°ƒˆJ¬Ù6QƒS¦$¼ªR«õU&
-’0
-tFc¥NEùÃAÔÿÒż;´ܾû\(ò.¸,}ȹ­K)$‹ArQ4y;Â?(l¿_ø­Ç¿ùÞ+D2ðÃc@ªˆ>³¿©ìdÎý° ÓBß nçñëbðz®g;õ•úÊê·ö¿©¡2r#•±4GÐa_”ÿ"dœÌn\§Çé‘ø#Ë…6¹1ð5†ÀÉìè®@à1NàC]€Ïpâ<ÄœÂ&¬NÄL)E¬žÒÝe]9Lú{›éda¤Àg•_ x–Ü<ÈÆwÂœ‚T›¸Ô«è|_×P3óÖþ6ñÙjš®¡…õ8KuÕ:u
-%¯•h³hኗ“#©¸`Áþ͍ù£b«6°¾B&ýŒ¸ø9%0pÐÓ=l7JEŽ <únÍ
-Š;nÑg¹Ú"ŠÁ)e’ZË‘Ùê¾MŒ Ô	B¬`thkŒ$*!˜š
-HŽÕ…Q¿rŒ:'´ ½wö[ÜXÀôÊ
-ûÈdÐöéJ(No ²{úZú¼ŽÒMûÞ+Òj­¯ÇA—4Po4+õùt
-¯Xö¢ÐÊoXA°`ši{ú «ß“4°Ñ¬H”s"íp-$%þ‘©sóÛUT{I»fDsIÓ¦i+o+3í¢‹„¤!ycfðïÖwŸk¤¤¾Jå·ÑRù¨ñºX[Õ &µ:3eôfŸ+¬ä?¸tçý=ò£Tns–a³vU]uÒˆïÚmÜg2=Ó{éäÈíóþø®˜ô)­ÑVÕ{µúFŠ4\>Xàj1iØ[‰-XÓ5#Ïi<Z-x`iÚr>8e~ÍŠ§%ðjÔÏ :d0^üì˜éýô)ú(®k­³u-M`c©§
-´4¬­{>	Š“Å¥ÌÔµŸ0‚za;†
-\æj]YYµ¥ò»DØX5ÂE뮦>ú žãú*CÅ›oïK#N/\_²•J¤ïPÐ
-[˜¥ÂàÀƒ“8¬›&¬²ã’37ÆÛ‰éßV¦NS5Jcï‹öjªTT‚ ƒP/nEÓ \4jtjñô¡P
-ËŒû·Œê4|rÚ“ôa·°
-"ÒÀHÓã½|Âc‚¥™ET‡òƒ½×÷ÞP7U·–µ—˜réaÄú¤eêåtÄÀÛCŽ`MÑBuU%&"_P¬«ªoÀæÄǤ!•¹RxÍ\ÿzm| ètÖ{”ܬÐýÁ«/Ô˜
-Met‡ðó«çï^MÛ|hòZÑËX«k¤~Xúèt6g‹ñ–úX¯tÒ“,b_ö¸më:d±ŒuÅj±Ëz"û6oÝœ·Á+%ƒ9GÁÅ@[ÃÄ_Ã/lûjèÓöÁKâ'µj˜°^Á)¿ÅXjOH¤ ´n_}C-ŽÐÔ«¨´•Æm]£ø&„M)}ì¸rýÁf †×RAº#|㡬+ÿ”]°øâ|¹1þÄùÃÿs[¶ßÄ ŸråϲÜ-	žî7ØÄ-‚8Or
-¢`ƒèLÄpëùˆüד–‰<Íý
-ì\â2àuXžü~DNÙlyØlE\žOX—@[€¦Ìɶ‘]!
-!Žl¬Ç}c£]Œ¶ç‘„»¹tü´šÓEÁMþÇÿ{£=Àa oÀð3XãeLËÜ*†	‹J¬ÛqhÎSæÿ#†YòD3ð㎾¤[úx	»Æãïvü)K„&t#æãeÙËU‰â}oVWÓû„ºJCÍ¡wÞ9$mi×~@ožßù
--ˆ?,¯}
-7Ç«ãƒ)òÜÚ?o{tãJÛå«â>§
-›’-‹$­sà³ýzúluÅ”Ý,6|
-þp*cxøa)óNXܶ®ƒ'2ÙìÊ4=Xfp“aIærÏÉÖ.¯Î²Š»6b7Xô[¾÷\éhÁ^vØ™E‘µÜ°ý†eÐ…®¼znKúÎÝÛ3Åʳ¹-¯ÓR:_%Kþ÷¼ó <0À‹Ö’údÚA¤zÊœdcÅão9Ýÿ©lØæŽOÀpçæG$æFo§@ò'ÑwBŸóyÁ/üÞÄÄ—w§ç
-ü+kæÁY˜#ÊÌSdíèÈûÒ£ží==òö,Ë(ex?@«è‰žÙçí䵧‰]Ý„ÐÔ„>rf\>rue\çÄ 0Ký
-endstream
-endobj
-4402 0 obj
-2616
-endobj
-4388 0 obj <<
+/Differences [32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/minus/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]
+>> endobj
+4367 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-ByExample/images/ch7-dual-additive-LDAP-Ok.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 4403 0 R
+/PTEX.InfoDict 4379 0 R
 /BBox [0 0 310 154]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 4404 0 R
->>/Font << /R9 4405 0 R>>
+/R7 4380 0 R
+>>/Font << /R8 4382 0 R >>
 >>
-/Length 4406 0 R
+/Length 4383 0 R
 /Filter /FlateDecode
 >>
 stream
-xœ”¿n1Æw=Çt+R)	RtéÐÄ~«}	\äPäl¤èÛ—’Îp=´6ŠÎàý>þû$¿G_Ÿå½™ÜÇ'…—½cB-á§#عÆÀÓgÇ#S		Sf(PEQYaÝÊõ™_i”…Ƙ€BL¨„šÈàç+˜ÕRÞ¾9ê¿—×f‚ûµµ\€cˆkËØ	àŒžJ͘)XOîf5L߆ëïŽJÀä’ ‘šnën¦açúõÖšIÄ·=onß¿<Ü}…ý8¿wȍÌG&6æa7›ÃùÜUæÓÚ=ZÏBèd›”‹Âä(jBbÈ‘QHáµ.â
-jU)3+C.¶øLF•ÄèÍŠ"¦”Œj™
-Ûàd“Kœ©Z½“K–ßÛ
-‹‰ÌÛ£IÌSJG›.Bÿí+ŠYarŠÝ§ýëð>v'L@\.9QÄ—¿9qrBHl@lçÖç¶ãìÍG‹Pƶ½ç«¨U¥j5 »¥Rʶ“Xu„ͯ–É$V3GzäLÕêÅ,è+Åí
-œêq½V9]MÕ®˜‘o×)…N5]pˆË„—©%—U☱HŸ0Ød¥Q¢Üæ1Æ„¤XB>FþPÕzÿ8½ÚÎ΃õ–#¨·ÿ/í<Ûíî°ëG¢9ùè~" üD
+xœ”½n1Çw=Çt+R")	RtéÐÄ~7v99)úö¥$´6Štàýøù§î"ÄöÎÇ)||0xÞ‚öÌρ#f¦
+š¥0T7˜*¤jhl0oÂS`B«‰ágèÑàáó%~‹@–5C¥„9PÊ‚–@IPEGð Å!¯×ûh¼ŽÇ	n—ÞU2Ì)+,=ä €FªV°PJ°œÂÕb5}[}X~TJdE"s¿u¸šV»ýfn_¯½q;\¸¹ÿrwóv›ùm@ŽXf>2¥3wÛyó¸ÿ1ÿ‚›Æ|Z†{¯Y	£@ñV¹L²	CÉŒêi^Ú$. r=”ê·FUaŒ®AIEÈ©©²7NÞ9ˉWÏw\ò.0V êN.êQQ“ä¨ÓYè¿ubCu)<A‘<tÚ½¬Þ6C	w ®ç”¨bâö]%Eó"Ø÷5Ž—è2º…ŠOoæjѨ–
+ˆÔï@m”±$7?BÒ6öÉ 6×æ`9ñêùrQŒâŠ~Þóq»NE.¦ZUÌÈ	Rôë$iPݯY8åC‡ç©C,8ç‚UG‡É;«R-½g"AÃÚýþôjùþ±É'ìs8Y¯ÍÛ±èÿêÛ°Z¯·ûíXˆ.ä}ø
+p9
 endstream
 endobj
-4403 0 obj
+4379 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110928)
-/ModDate (D:20080610110928)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090504-05'00')
+/ModDate (D:20080528090504-05'00')
 >>
 endobj
-4404 0 obj
+4380 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-4405 0 obj
+4382 0 obj
 <<
-/BaseFont /OWJOKU#2BAlbanyAMT
-/FontDescriptor 4407 0 R
 /Type /Font
 /FirstChar 32
 /LastChar 121
-/Widths [ 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 0 600 0 0 0 0 0 0 0 600 0 0 0 600 0 0 600 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 600 600 600 0 0 0 600 0 0 600 600 0 600 0 0 600 600 600 0 600 0 0 600]
-/Encoding /WinAnsiEncoding
+/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 667 0 722 0 0 0 0 0 0 0 556 0 0 0 667 0 0 667 0 0 0 0 0 0 0 0 0 0 0 0 0 556 556 500 556 556 0 0 0 222 0 0 222 833 0 556 0 0 333 500 278 0 500 0 0 500]
 /Subtype /Type1
+/FontDescriptor 2063 0 R
+/BaseFont 2067 0 R
+/Encoding 4381 0 R
 >>
 endobj
-4406 0 obj
-499
+4383 0 obj
+498
 endobj
-4407 0 obj
-<<
-/Type /FontDescriptor
-/FontName /OWJOKU#2BAlbanyAMT
-/FontBBox [ 0 -186 593 627]
-/Flags 5
-/Ascent 627
-/CapHeight 627
-/Descent -186
-/ItalicAngle 0
-/StemV 88
-/AvgWidth 600
-/MaxWidth 600
-/MissingWidth 600
-/CharSet (/L/A/y/c/B/o/d/e/D/P/r/s/t/i/S/v/l/a/m/b/space)
-/FontFile3 4408 0 R
->>
-endobj
-4408 0 obj
-<<
-/Subtype /Type1C
-/Filter /FlateDecode
-/Length 4409 0 R
->>
-stream
-xœ}UkTSW¾!äÞ,Ä×@WÑÜ,´â+«å!Îb«L©"D"¡BB‚­^%!!hH|Ž¢‚8^|‹ZÆiëˆ Zg©LDZFÑétßY‡5kNH•Ìü˜?wÝ}Î>{ïó}{G at x{À'V•#/ÒÆ&§»¬y| €ŸêÅO²(…ÿË¿(Ñ4âÈ¢ñ»|¬¯õõ>0Õgª\¦‰P1‰
-å»÷Å«‹µ[”ù¥²Œ´µ¡aa³ÇVæGEEÉr´ovd	Še~‘l&þ)S¨ÔÅ›E¥1²xì­R)seù*mqA‰Lž—§ÈsË”«…²D¥JY\¬.“…ćÊ„‡ÏŸƒ?R”›s4%²du‘Z¶R–¦Èרä[þk‘ ÉÊXmnœ:O‘º¥¤T¹¦L%ßœ##ˆ9D±žH ¦©Är"‘x˜O¬!Ò‰"‰ˆ ÖÉD‘BÄÂãDx«‰¯K^s½Š¼ž
-£…MBÞ{£(Xd}GšÉ—Ô\Š§‹¯‹»ø¡	üËñN ÑÐrVy¼CrŸl6›lM“–A¤¶ÖX¥o063F4Ë\–¾Êeñ+àcÒ^gÑWktRZ¨Ñ`ÌÁEN`†ˆBþCH•t¡`‘ÇQ'fS“Í`*g6’hï¡
-¤Ö€ó˜]Û¾$Z1¢©Hm
->aq-…‘Í
-øD-.i	y‚Eð'AÕ$pQ´Ä™QJoçðDA¤ÚüÐ¢qZƒ^ß`ÀAªð½Ì6›Á¬e’Hhàí¢¦±°HHêÜÚ™/I´
- H]óð Èrö0ÌhÊ
-vÂÌbÎo€ ÛùM¼¯DÞ–éLaÅèÝ°Ùè4åûypû¶³­“ùµc3k7Ô4Ôvì¬5H?ÊúeI<öôZvÿG>è¯'}ò̽Ý£Û]ol
-l458ºýE÷4ª¥t{¥±V˸1Æ™˜³I.¨wqBü#Éð@«›|Öß3ð‡
-—Ÿ`ºOmg¯ŠŸÄ~5KŠ¬.§*½ËéÉ!…IÝëÊ^œòÉû
-FG$P¡Ô-¶Õx²¼½ì`>›/N^³.A:z_^À	ú8Þ§¼ÎÇKß{Áh"šü*üÀïÕ˜ S‚ÿŽ¦09Þ?>Žž²8zƌŏ^
-<zÍŒžßÂÁ+¼œ~—:€?›h=¯å‡%sÆúãª!×÷¥Z†á7g`èN4qh&Œ{ÐÝv÷’”®Zðõ–ZŸN"5¼’?Œž=ƒc¢Cƒ?ÀY>zá®â8˜Å	øý%a/îpVž,xÓ†£O	ž‡& ÿŸf@à3ð½Üj©µÔÖ}¶c»‘É-ŒÓ$³ˆ`cîTýSÌy;ž÷Þb‡ØþÔýáⱩÁüٍ¿Ò£¿Õ$øƒ71_R4¼‘¿©Ç&©•äF4^Ó©l{e[—sx›)Ž£‚†Ì–º9Nã`;Ãcœ!
-*$°„r°ÿù÷‹{ƒt܃ˍ'ýU¤Ã
-N9ƒ¤$TxÃH¦Þ^³"1>-âçäTœÄãÎí¿H‚Ĥ®ÆP#Ø™ûh0lÔÒ[vîv«ÙڴͬcP"|JÒíÃàuáÐ…Àƒ¬sÛáR“qÏŽzVÜØ`il¨3뚘Oh,EìGlªzn¤ØÍ;Lƒy0Êknëh»@[ù^")8‘½/Ó‰¡qYI…ÍEÇ´Ì1Ý1c¿±ËxÔx´êh¥}[*¦­™Iyï/o¿(5Qtb£Á‚ç!É%<L$¶ËM†&)½Óf2;+Õ±ñŠî6+Ñ@×·§¶¶ª2…ÖU¦…
-u»56«Ì¶Ín·£ëdÿƒk›?ùBJUì6m&K3C[ïRtž8½”¶V×âîú¦b^‡Öa¨`å¨3WVÖ¹„o\,Uî&ÞÁô£ƒä‡·²žÿ	È3Ç-kÍöÏw|f”æ”,×­aʼnòS8A=Ö»o¨x	^8‰i¾çbb¡—>hEx´Ö¿I»å-"³ù'’j£AˤQ„Fér„›T³Ñ¬—þ}4ÔA¸šóû+§=¿=@ñ«ù&	måäÙÍ©AKVDÈ›óZK™Íéê»Õ½zgÝ‘Êc:{![ Ž]ž1CÎÆv~~{çþ:³žë
-µ¸DT¹ÙÐØ„ÓIS´5‹ë.é	ßïz†:KÏ+3*‡Ú¼Ô–l)1ÛKì•-l‹ø›[W?¼•½jï(äõF[ ­ÞÜ̼¦\ÏÈ(š.< p‚ƒr„ðÔ¢y_ÑY–ƒã‰%kP´•D¡0(úfìYñtâHX2â+ríN¬=o vAýVôÁgÄñ ~£_	¼ÃùõqÐÍå¸ÔKÇ/öÿiwW§cèÊtp’½+®ÍݘT¥M—nÛ^WÇnטk­»÷îÚµWúðÐ1ÓiV|ïê¦õL•ºOUÿ1¢É‹R#úʲ¯Ö>ïí>zó–ô‚÷/VfºˆÄìÖί{Ïýtþr]Íé·
-ƒ'©ï,,=›;üq
-±7nØ±ª
-*ßXør^x†q‰5ø2J\ ÍÝ<sòH[`ë	e.ƒzú=äô’kÿLwË!\eÛ‰M
-†®G}ž¿QBÙý«+«s6•­Ë“j.ÚÀÊÙ"­2Kü¿*9€Ž º"1ܳ=4ž¤õ#ŽêíÂOIº3áÒï”}0~h&äÙChblzaÂ:/yùmôôИ¨Y!KÿñѶ:ùENðs:ä9nÜ9__Îw<Aüô¼Ì¸
-endstream
-endobj
-4409 0 obj
-2130
-endobj
-4385 0 obj <<
+4381 0 obj <<
+/Type /Encoding
+/Differences [32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]
+>> endobj
+4364 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [250.047 502.728 300.403 514.418]
+/Rect [250.047 502.838 300.403 514.528]
 /Subtype /Link
 /A << /S /GoTo /D (ch7dualadd) >>
 >> endobj
-4387 0 obj <<
+4366 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [172.986 287.629 223.343 299.319]
+/Rect [172.986 287.409 223.343 299.099]
 /Subtype /Link
 /A << /S /GoTo /D (ch7dualok) >>
 >> endobj
-4392 0 obj <<
-/D [4390 0 R /XYZ 100.892 685.529 null]
+4371 0 obj <<
+/D [4369 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1759 0 obj <<
-/D [4390 0 R /XYZ 100.892 490.217 null]
+/D [4369 0 R /XYZ 100.892 490.437 null]
 >> endobj
-4393 0 obj <<
-/D [4390 0 R /XYZ 100.892 461.919 null]
+4372 0 obj <<
+/D [4369 0 R /XYZ 100.892 462.139 null]
 >> endobj
 1760 0 obj <<
-/D [4390 0 R /XYZ 100.892 275.118 null]
+/D [4369 0 R /XYZ 100.892 275.008 null]
 >> endobj
-4394 0 obj <<
-/D [4390 0 R /XYZ 100.892 246.82 null]
+4373 0 obj <<
+/D [4369 0 R /XYZ 100.892 246.71 null]
 >> endobj
-4389 0 obj <<
+4368 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
-/XObject << /Im15 4386 0 R /Im16 4388 0 R >>
+/XObject << /Im15 4365 0 R /Im16 4367 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4414 0 obj <<
+4388 0 obj <<
 /Length 1587      
 /Filter /FlateDecode
 >>
@@ -22219,46 +21531,46 @@
 shV•ÕàÛúŸ¥z7ÛOðO䢁qÅ‹8@û5ÝÂÐPNJN–$ËlÇçš¾0jþóØéä
 endstream
 endobj
-4413 0 obj <<
+4387 0 obj <<
 /Type /Page
-/Contents 4414 0 R
-/Resources 4412 0 R
+/Contents 4388 0 R
+/Resources 4386 0 R
 /MediaBox [0 0 612 792]
-/Parent 4369 0 R
-/Annots [ 4410 0 R 4411 0 R ]
+/Parent 4353 0 R
+/Annots [ 4384 0 R 4385 0 R ]
 >> endobj
-4410 0 obj <<
+4384 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [344.077 469.425 508.322 481.114]
 /Subtype /Link
 /A << /S /GoTo /D (happy) >>
 >> endobj
-4411 0 obj <<
+4385 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [240.402 228.176 310.122 239.866]
 /Subtype /Link
 /A << /S /GoTo /D (ch7-LDAP-master) >>
 >> endobj
-4415 0 obj <<
-/D [4413 0 R /XYZ 151.701 685.529 null]
+4389 0 obj <<
+/D [4387 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4416 0 obj <<
-/D [4413 0 R /XYZ 151.701 443.323 null]
+4390 0 obj <<
+/D [4387 0 R /XYZ 151.701 443.323 null]
 >> endobj
-4417 0 obj <<
-/D [4413 0 R /XYZ 151.701 265.994 null]
+4391 0 obj <<
+/D [4387 0 R /XYZ 151.701 265.994 null]
 >> endobj
-4418 0 obj <<
-/D [4413 0 R /XYZ 151.701 229.173 null]
+4392 0 obj <<
+/D [4387 0 R /XYZ 151.701 229.173 null]
 >> endobj
-4412 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F89 2333 0 R /F73 2334 0 R /F15 1133 0 R /F59 1905 0 R >>
-/XObject << /Im3 2328 0 R >>
+4386 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F89 2330 0 R /F73 2331 0 R /F15 1133 0 R /F59 1905 0 R >>
+/XObject << /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4423 0 obj <<
+4397 0 obj <<
 /Length 1288      
 /Filter /FlateDecode
 >>
@@ -22272,44 +21584,44 @@
 è;uõ²Þ@ýY¨”ÖndΚmPϧÅw*˜Ê"=S¤9ä{Sì÷m5ªôOÉH(ÍR-&ï*ŸÇÜS P^FÜÿûÂúá÷~óY…ðøÄ=¶_Ìy¤}w‡>>À%õ8Öu¸nkH"`9ÂȦíaØ:ö•ss‡2¼Ðak†ñËÂ÷‘ª~þà¬rZDŒõ3˜ž±j2™^Ojc\á?Ô?GË€Õ
 endstream
 endobj
-4422 0 obj <<
+4396 0 obj <<
 /Type /Page
-/Contents 4423 0 R
-/Resources 4421 0 R
+/Contents 4397 0 R
+/Resources 4395 0 R
 /MediaBox [0 0 612 792]
-/Parent 4369 0 R
-/Annots [ 4420 0 R ]
+/Parent 4353 0 R
+/Annots [ 4394 0 R ]
 >> endobj
-4420 0 obj <<
+4394 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.653 246.845 275.373 258.534]
 /Subtype /Link
 /A << /S /GoTo /D (ch7-LDAP-slave) >>
 >> endobj
-4424 0 obj <<
-/D [4422 0 R /XYZ 100.892 685.529 null]
+4398 0 obj <<
+/D [4396 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4425 0 obj <<
-/D [4422 0 R /XYZ 100.892 554.819 null]
+4399 0 obj <<
+/D [4396 0 R /XYZ 100.892 554.819 null]
 >> endobj
-4426 0 obj <<
-/D [4422 0 R /XYZ 100.892 473.524 null]
+4400 0 obj <<
+/D [4396 0 R /XYZ 100.892 473.524 null]
 >> endobj
-4427 0 obj <<
-/D [4422 0 R /XYZ 100.892 344.807 null]
+4401 0 obj <<
+/D [4396 0 R /XYZ 100.892 344.807 null]
 >> endobj
-4428 0 obj <<
-/D [4422 0 R /XYZ 100.892 294.96 null]
+4402 0 obj <<
+/D [4396 0 R /XYZ 100.892 294.96 null]
 >> endobj
-4429 0 obj <<
-/D [4422 0 R /XYZ 100.892 247.841 null]
+4403 0 obj <<
+/D [4396 0 R /XYZ 100.892 247.841 null]
 >> endobj
-4421 0 obj <<
+4395 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4433 0 obj <<
+4407 0 obj <<
 /Length 905       
 /Filter /FlateDecode
 >>
@@ -22324,27 +21636,27 @@
 v¨|ÿ…‡þ¿¯õP
 endstream
 endobj
-4432 0 obj <<
+4406 0 obj <<
 /Type /Page
-/Contents 4433 0 R
-/Resources 4431 0 R
+/Contents 4407 0 R
+/Resources 4405 0 R
 /MediaBox [0 0 612 792]
-/Parent 4369 0 R
+/Parent 4353 0 R
 >> endobj
-4434 0 obj <<
-/D [4432 0 R /XYZ 151.701 685.529 null]
+4408 0 obj <<
+/D [4406 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4435 0 obj <<
-/D [4432 0 R /XYZ 151.701 378.68 null]
+4409 0 obj <<
+/D [4406 0 R /XYZ 151.701 378.68 null]
 >> endobj
-4436 0 obj <<
-/D [4432 0 R /XYZ 151.701 202.54 null]
+4410 0 obj <<
+/D [4406 0 R /XYZ 151.701 202.54 null]
 >> endobj
-4431 0 obj <<
+4405 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4442 0 obj <<
+4416 0 obj <<
 /Length 1213      
 /Filter /FlateDecode
 >>
@@ -22363,38 +21675,38 @@
 ÜHtøyÕfCvk¥&! Ãc¥’ãH÷+ÌóÿÆÒ2–
 endstream
 endobj
-4441 0 obj <<
+4415 0 obj <<
 /Type /Page
-/Contents 4442 0 R
-/Resources 4440 0 R
+/Contents 4416 0 R
+/Resources 4414 0 R
 /MediaBox [0 0 612 792]
-/Parent 4369 0 R
-/Annots [ 4437 0 R ]
+/Parent 4353 0 R
+/Annots [ 4411 0 R ]
 >> endobj
-4437 0 obj <<
+4411 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.259 538.153 367.888 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (happy) >>
 >> endobj
-4443 0 obj <<
-/D [4441 0 R /XYZ 100.892 685.529 null]
+4417 0 obj <<
+/D [4415 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4444 0 obj <<
-/D [4441 0 R /XYZ 100.892 586.571 null]
+4418 0 obj <<
+/D [4415 0 R /XYZ 100.892 586.571 null]
 >> endobj
-4445 0 obj <<
-/D [4441 0 R /XYZ 100.892 493.848 null]
+4419 0 obj <<
+/D [4415 0 R /XYZ 100.892 493.848 null]
 >> endobj
-4446 0 obj <<
-/D [4441 0 R /XYZ 100.892 168.667 null]
+4420 0 obj <<
+/D [4415 0 R /XYZ 100.892 168.667 null]
 >> endobj
-4440 0 obj <<
+4414 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4451 0 obj <<
+4425 0 obj <<
 /Length 1687      
 /Filter /FlateDecode
 >>
@@ -22413,54 +21725,54 @@
 ÄEо}νwuW±ƒ‰å©Gic¢'ÁÀ²o<â¾kpªñ0ÿeïš@g\ÿƒ€LC<°´;èU€ ^÷þ,+-‘´›‡Eÿd«³/yôìz%.čøÖ;‡Uá ”N¾Á‰PÉãÇèf|ú«£ÏP@ú˜Õ?#.²yL  Ám-0%£tõÓå5K!ÏzM?„•D¥ÐÞM‹‚‹h†ÀŸGHŸaýÃ9Sg:Yq콋çg{©Haíh0%ù5 ­áÆ·š(*;ÖÌ’è)I–Õ(³ ÝNýW˜o)2áªÐÒϙடÂîˆJÇöåíäoc5»
 endstream
 endobj
-4450 0 obj <<
+4424 0 obj <<
 /Type /Page
-/Contents 4451 0 R
-/Resources 4449 0 R
+/Contents 4425 0 R
+/Resources 4423 0 R
 /MediaBox [0 0 612 792]
-/Parent 4457 0 R
-/Annots [ 4438 0 R 4439 0 R ]
+/Parent 4431 0 R
+/Annots [ 4412 0 R 4413 0 R ]
 >> endobj
-4438 0 obj <<
+4412 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.379 632.997 474.396 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (ch7-massmbconfA) >>
 >> endobj
-4439 0 obj <<
+4413 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.917 619.448 325.637 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (ch7-slvsmbocnfA) >>
 >> endobj
-4452 0 obj <<
-/D [4450 0 R /XYZ 151.701 685.529 null]
+4426 0 obj <<
+/D [4424 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4453 0 obj <<
-/D [4450 0 R /XYZ 151.701 660.623 null]
+4427 0 obj <<
+/D [4424 0 R /XYZ 151.701 660.623 null]
 >> endobj
 490 0 obj <<
-/D [4450 0 R /XYZ 151.701 512.295 null]
+/D [4424 0 R /XYZ 151.701 512.295 null]
 >> endobj
-4454 0 obj <<
-/D [4450 0 R /XYZ 151.701 486.042 null]
+4428 0 obj <<
+/D [4424 0 R /XYZ 151.701 486.042 null]
 >> endobj
 494 0 obj <<
-/D [4450 0 R /XYZ 151.701 279.55 null]
+/D [4424 0 R /XYZ 151.701 279.55 null]
 >> endobj
-4455 0 obj <<
-/D [4450 0 R /XYZ 151.701 251.437 null]
+4429 0 obj <<
+/D [4424 0 R /XYZ 151.701 251.437 null]
 >> endobj
-4456 0 obj <<
-/D [4450 0 R /XYZ 151.701 164.854 null]
+4430 0 obj <<
+/D [4424 0 R /XYZ 151.701 164.854 null]
 >> endobj
-4449 0 obj <<
+4423 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R /F17 1131 0 R /F54 1912 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4462 0 obj <<
+4436 0 obj <<
 /Length 1957      
 /Filter /FlateDecode
 >>
@@ -22486,21 +21798,21 @@
 ȶKœ?ÍÃÿɤL}è —öL«ëŽ"4ó:mËÓ—bY‹ÕîóT»~‚8ßCnÓQwŒyQŽp[ðt*æHóeaèŸô+Ð0§áÕØõ$hœNy:«<qžÉ·1:OgG!æÙ“Ô—ˆ¸çõR֜ՄŠwÛràVõþå¶2™ÍW	qù—‰Šå/š¼Ê²ŸÎp‡Ÿ¡õ`¤g62¿a¡ÇÑJ:h¼ýAZ¥èHeìôç[_?¬þÒ/êœ
 endstream
 endobj
-4461 0 obj <<
+4435 0 obj <<
 /Type /Page
-/Contents 4462 0 R
-/Resources 4460 0 R
+/Contents 4436 0 R
+/Resources 4434 0 R
 /MediaBox [0 0 612 792]
-/Parent 4457 0 R
+/Parent 4431 0 R
 >> endobj
-4463 0 obj <<
-/D [4461 0 R /XYZ 100.892 685.529 null]
+4437 0 obj <<
+/D [4435 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4460 0 obj <<
+4434 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4469 0 obj <<
+4443 0 obj <<
 /Length 2291      
 /Filter /FlateDecode
 >>
@@ -22517,43 +21829,43 @@
 rœjw.®çþÿAà¿ –vÉ
 endstream
 endobj
-4468 0 obj <<
+4442 0 obj <<
 /Type /Page
-/Contents 4469 0 R
-/Resources 4467 0 R
+/Contents 4443 0 R
+/Resources 4441 0 R
 /MediaBox [0 0 612 792]
-/Parent 4457 0 R
-/Annots [ 4464 0 R 4465 0 R 4466 0 R ]
+/Parent 4431 0 R
+/Annots [ 4438 0 R 4439 0 R 4440 0 R ]
 >> endobj
-4464 0 obj <<
+4438 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [351.694 251.822 514.717 263.815]
 /Subtype /Link
 /A << /S /GoTo /D (happy) >>
 >> endobj
-4465 0 obj <<
+4439 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.25 238.576 255.607 250.144]
 /Subtype /Link
 /A << /S /GoTo /D (XP-screen001) >>
 >> endobj
-4466 0 obj <<
+4440 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [345.213 191.515 407.917 201.083]
 /Subtype /Link
 /A << /S /GoTo /D (redirfold) >>
 >> endobj
-4470 0 obj <<
-/D [4468 0 R /XYZ 151.701 685.529 null]
+4444 0 obj <<
+/D [4442 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4467 0 obj <<
+4441 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R /F59 1905 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4474 0 obj <<
+4448 0 obj <<
 /Length 2218      
 /Filter /FlateDecode
 >>
@@ -22571,29 +21883,29 @@
 ž‘2H ñz^!qEÛ­%ôâžIMm˜FdÊù-ä¯fp$vf_ÙaáÒþ?Â".”)0ðsêµ2NlšÆ	íÆì±'ŒDÛç1’°>!rz³ó÷ۏ¡«¬(DÕ>¾ªÙ¨ýÞ`+¹«dÍâ©(¢g³ŠÆôŒ¢7Ãl’N¼‘kÎ%©ÏüN°q	OA‘#Ìì¼Uéxj0Å5¾hjF¨åÀ׎uÔE§ÅƤõHzã{ü«ÀX›3VôôwTÛŠÐóPo[À°ncÿºÑÛš2þ&¦ Aó¨gòuLX8ðɹ S JAÖºdO© œhSoÁ®­=¥Ç]X‚Q;R“‘°WD‚cÙÿE€	Ÿ¿‹q™F…PúTȧuÛÙPj»Òï¨ëù )cò4N&üM$ÏÓ%îÓ‹'äø}·»øl³
 endstream
 endobj
-4473 0 obj <<
+4447 0 obj <<
 /Type /Page
-/Contents 4474 0 R
-/Resources 4472 0 R
+/Contents 4448 0 R
+/Resources 4446 0 R
 /MediaBox [0 0 612 792]
-/Parent 4457 0 R
-/Annots [ 4471 0 R ]
+/Parent 4431 0 R
+/Annots [ 4445 0 R ]
 >> endobj
-4471 0 obj <<
+4445 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [296.047 501.28 358.646 510.848]
 /Subtype /Link
 /A << /S /GoTo /D (redirfold) >>
 >> endobj
-4475 0 obj <<
-/D [4473 0 R /XYZ 100.892 685.529 null]
+4449 0 obj <<
+/D [4447 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4472 0 obj <<
+4446 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F54 1912 0 R /F51 1134 0 R /F60 1917 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4478 0 obj <<
+4452 0 obj <<
 /Length 1372      
 /Filter /FlateDecode
 >>
@@ -22615,21 +21927,21 @@
 Ï]'½˜ï\K5Êmn¼AœôwJY²=r…ðÜPÖ„{jB÷zœ`åìJ—$xõ³ Õx‘;^¼;่'’N¬$*Ý(Cš\•r–ò9€’ü°“¤âûE[Ÿ Ð(;ixh 2/Ì}ˆÓ=ÝQê,M˜í]UPüðt$£GgXꆿ§NÓ0â)u7ÉÎC¡ rYæÛù–_dïKÎ1n\8ŠFc§j^®DºúgTRÖýù=?ð7á_#+Jˆ
 endstream
 endobj
-4477 0 obj <<
+4451 0 obj <<
 /Type /Page
-/Contents 4478 0 R
-/Resources 4476 0 R
+/Contents 4452 0 R
+/Resources 4450 0 R
 /MediaBox [0 0 612 792]
-/Parent 4457 0 R
+/Parent 4431 0 R
 >> endobj
-4479 0 obj <<
-/D [4477 0 R /XYZ 151.701 685.529 null]
+4453 0 obj <<
+/D [4451 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4476 0 obj <<
+4450 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4482 0 obj <<
+4456 0 obj <<
 /Length 939       
 /Filter /FlateDecode
 >>
@@ -22648,27 +21960,27 @@
 Ì\Ùl>†øèA©¦§|ÇêæÝ
 endstream
 endobj
-4481 0 obj <<
+4455 0 obj <<
 /Type /Page
-/Contents 4482 0 R
-/Resources 4480 0 R
+/Contents 4456 0 R
+/Resources 4454 0 R
 /MediaBox [0 0 612 792]
-/Parent 4457 0 R
+/Parent 4431 0 R
 >> endobj
-4483 0 obj <<
-/D [4481 0 R /XYZ 100.892 685.529 null]
+4457 0 obj <<
+/D [4455 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1599 0 obj <<
-/D [4481 0 R /XYZ 100.892 660.623 null]
+/D [4455 0 R /XYZ 100.892 660.623 null]
 >> endobj
-4419 0 obj <<
-/D [4481 0 R /XYZ 100.892 629.597 null]
+4393 0 obj <<
+/D [4455 0 R /XYZ 100.892 629.597 null]
 >> endobj
-4480 0 obj <<
+4454 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4486 0 obj <<
+4460 0 obj <<
 /Length 854       
 /Filter /FlateDecode
 >>
@@ -22682,27 +21994,27 @@
 ®”•ë;>5À8…Iì‹æ7Áêc]dßj;y¯¾¯Ó¢6Rt|*÷m˜§cåœÚ…ö¶š»Z•Á]³d÷ëNˆY´ä+}ž“„8C“þâûš¤Ä‡†w¸{í"$/ô–º¹¦×J‘ûC{ÖòEÍ„öußÖŠŠºÓ¿‰Ž5ã×ÕäÿiÉÓ’šUI´(¿œÞ‚_)…ö#¢Íi%WGªÏ~ÈQàôz?zY¦S:œÃ„jKzsN+>–s—Lɝ÷U>\½qàÃúÿ*> /^Ì%˜Cm1à“Po»Ã糨¨¼y.›¾5ÜÁwçGÕ꼚ƚƇôã+Ú—N0Õpm³¹8·7Þ䊆¥¹A·ãI!žÏ
 endstream
 endobj
-4485 0 obj <<
+4459 0 obj <<
 /Type /Page
-/Contents 4486 0 R
-/Resources 4484 0 R
+/Contents 4460 0 R
+/Resources 4458 0 R
 /MediaBox [0 0 612 792]
-/Parent 4488 0 R
+/Parent 4462 0 R
 >> endobj
-4487 0 obj <<
-/D [4485 0 R /XYZ 151.701 685.529 null]
+4461 0 obj <<
+/D [4459 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1600 0 obj <<
-/D [4485 0 R /XYZ 151.701 660.623 null]
+/D [4459 0 R /XYZ 151.701 660.623 null]
 >> endobj
-4430 0 obj <<
-/D [4485 0 R /XYZ 151.701 631.719 null]
+4404 0 obj <<
+/D [4459 0 R /XYZ 151.701 631.719 null]
 >> endobj
-4484 0 obj <<
+4458 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4491 0 obj <<
+4465 0 obj <<
 /Length 4919      
 /Filter /FlateDecode
 >>
@@ -22760,153 +22072,153 @@
 Œ“œÃ&²7´u7¦dO‹7®¡Í2Îë‘涭èðø»V 17­àJÕï3ÁÖ|5Ô‘•[lH¡»õ›ï›<Ò|@KKwYK|u£‹yeçº}NÏqÊÁGLï÷ÓæH™·'È‹ÔŠ û¯—q·ÉSý+ð.=s_ùóÀN5äHͨ£¡/é…³ÝznàO<¾ÓÁ[žíOŒãg?{fþ‡®Ñ}ðPGŠìt0ʧ…™Í<¦ˆ.ÿ'Û"›Î
 endstream
 endobj
-4490 0 obj <<
+4464 0 obj <<
 /Type /Page
-/Contents 4491 0 R
-/Resources 4489 0 R
+/Contents 4465 0 R
+/Resources 4463 0 R
 /MediaBox [0 0 612 792]
-/Parent 4488 0 R
+/Parent 4462 0 R
 >> endobj
-4492 0 obj <<
-/D [4490 0 R /XYZ 100.892 685.529 null]
+4466 0 obj <<
+/D [4464 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1601 0 obj <<
-/D [4490 0 R /XYZ 100.892 660.623 null]
+/D [4464 0 R /XYZ 100.892 660.623 null]
 >> endobj
-4458 0 obj <<
-/D [4490 0 R /XYZ 100.892 643.753 null]
+4432 0 obj <<
+/D [4464 0 R /XYZ 100.892 643.753 null]
 >> endobj
-4493 0 obj <<
-/D [4490 0 R /XYZ 100.892 637.775 null]
+4467 0 obj <<
+/D [4464 0 R /XYZ 100.892 637.775 null]
 >> endobj
-4494 0 obj <<
-/D [4490 0 R /XYZ 100.892 644.051 null]
+4468 0 obj <<
+/D [4464 0 R /XYZ 100.892 644.051 null]
 >> endobj
-4495 0 obj <<
-/D [4490 0 R /XYZ 100.892 632.096 null]
+4469 0 obj <<
+/D [4464 0 R /XYZ 100.892 632.096 null]
 >> endobj
-4496 0 obj <<
-/D [4490 0 R /XYZ 100.892 620.141 null]
+4470 0 obj <<
+/D [4464 0 R /XYZ 100.892 620.141 null]
 >> endobj
-4497 0 obj <<
-/D [4490 0 R /XYZ 100.892 608.186 null]
+4471 0 obj <<
+/D [4464 0 R /XYZ 100.892 608.186 null]
 >> endobj
-4498 0 obj <<
-/D [4490 0 R /XYZ 100.892 596.231 null]
+4472 0 obj <<
+/D [4464 0 R /XYZ 100.892 596.231 null]
 >> endobj
-4499 0 obj <<
-/D [4490 0 R /XYZ 100.892 584.276 null]
+4473 0 obj <<
+/D [4464 0 R /XYZ 100.892 584.276 null]
 >> endobj
-4500 0 obj <<
-/D [4490 0 R /XYZ 100.892 572.32 null]
+4474 0 obj <<
+/D [4464 0 R /XYZ 100.892 572.32 null]
 >> endobj
-4501 0 obj <<
-/D [4490 0 R /XYZ 100.892 560.365 null]
+4475 0 obj <<
+/D [4464 0 R /XYZ 100.892 560.365 null]
 >> endobj
-4502 0 obj <<
-/D [4490 0 R /XYZ 100.892 548.41 null]
+4476 0 obj <<
+/D [4464 0 R /XYZ 100.892 548.41 null]
 >> endobj
-4503 0 obj <<
-/D [4490 0 R /XYZ 100.892 536.455 null]
+4477 0 obj <<
+/D [4464 0 R /XYZ 100.892 536.455 null]
 >> endobj
-4504 0 obj <<
-/D [4490 0 R /XYZ 100.892 524.5 null]
+4478 0 obj <<
+/D [4464 0 R /XYZ 100.892 524.5 null]
 >> endobj
-4505 0 obj <<
-/D [4490 0 R /XYZ 100.892 512.545 null]
+4479 0 obj <<
+/D [4464 0 R /XYZ 100.892 512.545 null]
 >> endobj
-4506 0 obj <<
-/D [4490 0 R /XYZ 100.892 500.589 null]
+4480 0 obj <<
+/D [4464 0 R /XYZ 100.892 500.589 null]
 >> endobj
-4507 0 obj <<
-/D [4490 0 R /XYZ 100.892 488.634 null]
+4481 0 obj <<
+/D [4464 0 R /XYZ 100.892 488.634 null]
 >> endobj
-4508 0 obj <<
-/D [4490 0 R /XYZ 100.892 476.679 null]
+4482 0 obj <<
+/D [4464 0 R /XYZ 100.892 476.679 null]
 >> endobj
-4509 0 obj <<
-/D [4490 0 R /XYZ 100.892 452.769 null]
+4483 0 obj <<
+/D [4464 0 R /XYZ 100.892 452.769 null]
 >> endobj
-4510 0 obj <<
-/D [4490 0 R /XYZ 100.892 428.858 null]
+4484 0 obj <<
+/D [4464 0 R /XYZ 100.892 428.858 null]
 >> endobj
-4511 0 obj <<
-/D [4490 0 R /XYZ 100.892 404.948 null]
+4485 0 obj <<
+/D [4464 0 R /XYZ 100.892 404.948 null]
 >> endobj
-4512 0 obj <<
-/D [4490 0 R /XYZ 100.892 381.038 null]
+4486 0 obj <<
+/D [4464 0 R /XYZ 100.892 381.038 null]
 >> endobj
-4513 0 obj <<
-/D [4490 0 R /XYZ 100.892 357.127 null]
+4487 0 obj <<
+/D [4464 0 R /XYZ 100.892 357.127 null]
 >> endobj
-4514 0 obj <<
-/D [4490 0 R /XYZ 100.892 333.217 null]
+4488 0 obj <<
+/D [4464 0 R /XYZ 100.892 333.217 null]
 >> endobj
-4515 0 obj <<
-/D [4490 0 R /XYZ 100.892 309.307 null]
+4489 0 obj <<
+/D [4464 0 R /XYZ 100.892 309.307 null]
 >> endobj
-4516 0 obj <<
-/D [4490 0 R /XYZ 100.892 285.396 null]
+4490 0 obj <<
+/D [4464 0 R /XYZ 100.892 285.396 null]
 >> endobj
-4517 0 obj <<
-/D [4490 0 R /XYZ 100.892 261.486 null]
+4491 0 obj <<
+/D [4464 0 R /XYZ 100.892 261.486 null]
 >> endobj
-4518 0 obj <<
-/D [4490 0 R /XYZ 100.892 249.531 null]
+4492 0 obj <<
+/D [4464 0 R /XYZ 100.892 249.531 null]
 >> endobj
-4519 0 obj <<
-/D [4490 0 R /XYZ 100.892 237.576 null]
+4493 0 obj <<
+/D [4464 0 R /XYZ 100.892 237.576 null]
 >> endobj
-4520 0 obj <<
-/D [4490 0 R /XYZ 100.892 225.621 null]
+4494 0 obj <<
+/D [4464 0 R /XYZ 100.892 225.621 null]
 >> endobj
-4521 0 obj <<
-/D [4490 0 R /XYZ 100.892 213.665 null]
+4495 0 obj <<
+/D [4464 0 R /XYZ 100.892 213.665 null]
 >> endobj
-4522 0 obj <<
-/D [4490 0 R /XYZ 100.892 201.71 null]
+4496 0 obj <<
+/D [4464 0 R /XYZ 100.892 201.71 null]
 >> endobj
-4523 0 obj <<
-/D [4490 0 R /XYZ 100.892 189.755 null]
+4497 0 obj <<
+/D [4464 0 R /XYZ 100.892 189.755 null]
 >> endobj
-4524 0 obj <<
-/D [4490 0 R /XYZ 100.892 177.8 null]
+4498 0 obj <<
+/D [4464 0 R /XYZ 100.892 177.8 null]
 >> endobj
-4525 0 obj <<
-/D [4490 0 R /XYZ 100.892 165.845 null]
+4499 0 obj <<
+/D [4464 0 R /XYZ 100.892 165.845 null]
 >> endobj
-4526 0 obj <<
-/D [4490 0 R /XYZ 100.892 153.89 null]
+4500 0 obj <<
+/D [4464 0 R /XYZ 100.892 153.89 null]
 >> endobj
-4527 0 obj <<
-/D [4490 0 R /XYZ 100.892 141.934 null]
+4501 0 obj <<
+/D [4464 0 R /XYZ 100.892 141.934 null]
 >> endobj
-4528 0 obj <<
-/D [4490 0 R /XYZ 100.892 129.979 null]
+4502 0 obj <<
+/D [4464 0 R /XYZ 100.892 129.979 null]
 >> endobj
-4529 0 obj <<
-/D [4490 0 R /XYZ 100.892 118.024 null]
+4503 0 obj <<
+/D [4464 0 R /XYZ 100.892 118.024 null]
 >> endobj
-4530 0 obj <<
-/D [4490 0 R /XYZ 100.892 106.069 null]
+4504 0 obj <<
+/D [4464 0 R /XYZ 100.892 106.069 null]
 >> endobj
-4531 0 obj <<
-/D [4490 0 R /XYZ 100.892 94.114 null]
+4505 0 obj <<
+/D [4464 0 R /XYZ 100.892 94.114 null]
 >> endobj
-4532 0 obj <<
-/D [4490 0 R /XYZ 100.892 82.159 null]
+4506 0 obj <<
+/D [4464 0 R /XYZ 100.892 82.159 null]
 >> endobj
-4533 0 obj <<
-/D [4490 0 R /XYZ 100.892 70.203 null]
+4507 0 obj <<
+/D [4464 0 R /XYZ 100.892 70.203 null]
 >> endobj
-4534 0 obj <<
-/D [4490 0 R /XYZ 100.892 58.248 null]
+4508 0 obj <<
+/D [4464 0 R /XYZ 100.892 58.248 null]
 >> endobj
-4489 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R /F11 2494 0 R >>
+4463 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R /F11 2489 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4537 0 obj <<
+4511 0 obj <<
 /Length 2199      
 /Filter /FlateDecode
 >>
@@ -22927,105 +22239,105 @@
 ѳ»#Ÿý&Kcÿ-\‹n
 endstream
 endobj
-4536 0 obj <<
+4510 0 obj <<
 /Type /Page
-/Contents 4537 0 R
-/Resources 4535 0 R
+/Contents 4511 0 R
+/Resources 4509 0 R
 /MediaBox [0 0 612 792]
-/Parent 4488 0 R
+/Parent 4462 0 R
 >> endobj
-4538 0 obj <<
-/D [4536 0 R /XYZ 151.701 685.529 null]
+4512 0 obj <<
+/D [4510 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1602 0 obj <<
-/D [4536 0 R /XYZ 151.701 556.754 null]
+/D [4510 0 R /XYZ 151.701 556.754 null]
 >> endobj
-4539 0 obj <<
-/D [4536 0 R /XYZ 151.701 539.884 null]
+4513 0 obj <<
+/D [4510 0 R /XYZ 151.701 539.884 null]
 >> endobj
-4540 0 obj <<
-/D [4536 0 R /XYZ 151.701 533.906 null]
+4514 0 obj <<
+/D [4510 0 R /XYZ 151.701 533.906 null]
 >> endobj
-4541 0 obj <<
-/D [4536 0 R /XYZ 151.701 540.182 null]
+4515 0 obj <<
+/D [4510 0 R /XYZ 151.701 540.182 null]
 >> endobj
-4542 0 obj <<
-/D [4536 0 R /XYZ 151.701 528.227 null]
+4516 0 obj <<
+/D [4510 0 R /XYZ 151.701 528.227 null]
 >> endobj
-4543 0 obj <<
-/D [4536 0 R /XYZ 151.701 516.272 null]
+4517 0 obj <<
+/D [4510 0 R /XYZ 151.701 516.272 null]
 >> endobj
-4544 0 obj <<
-/D [4536 0 R /XYZ 151.701 504.317 null]
+4518 0 obj <<
+/D [4510 0 R /XYZ 151.701 504.317 null]
 >> endobj
-4545 0 obj <<
-/D [4536 0 R /XYZ 151.701 492.362 null]
+4519 0 obj <<
+/D [4510 0 R /XYZ 151.701 492.362 null]
 >> endobj
-4546 0 obj <<
-/D [4536 0 R /XYZ 151.701 480.407 null]
+4520 0 obj <<
+/D [4510 0 R /XYZ 151.701 480.407 null]
 >> endobj
-4547 0 obj <<
-/D [4536 0 R /XYZ 151.701 468.451 null]
+4521 0 obj <<
+/D [4510 0 R /XYZ 151.701 468.451 null]
 >> endobj
-4548 0 obj <<
-/D [4536 0 R /XYZ 151.701 456.496 null]
+4522 0 obj <<
+/D [4510 0 R /XYZ 151.701 456.496 null]
 >> endobj
-4549 0 obj <<
-/D [4536 0 R /XYZ 151.701 444.541 null]
+4523 0 obj <<
+/D [4510 0 R /XYZ 151.701 444.541 null]
 >> endobj
-4550 0 obj <<
-/D [4536 0 R /XYZ 151.701 432.586 null]
+4524 0 obj <<
+/D [4510 0 R /XYZ 151.701 432.586 null]
 >> endobj
-4551 0 obj <<
-/D [4536 0 R /XYZ 151.701 420.631 null]
+4525 0 obj <<
+/D [4510 0 R /XYZ 151.701 420.631 null]
 >> endobj
-4552 0 obj <<
-/D [4536 0 R /XYZ 151.701 408.676 null]
+4526 0 obj <<
+/D [4510 0 R /XYZ 151.701 408.676 null]
 >> endobj
-4553 0 obj <<
-/D [4536 0 R /XYZ 151.701 396.72 null]
+4527 0 obj <<
+/D [4510 0 R /XYZ 151.701 396.72 null]
 >> endobj
-4554 0 obj <<
-/D [4536 0 R /XYZ 151.701 384.765 null]
+4528 0 obj <<
+/D [4510 0 R /XYZ 151.701 384.765 null]
 >> endobj
-4555 0 obj <<
-/D [4536 0 R /XYZ 151.701 372.81 null]
+4529 0 obj <<
+/D [4510 0 R /XYZ 151.701 372.81 null]
 >> endobj
-4556 0 obj <<
-/D [4536 0 R /XYZ 151.701 360.855 null]
+4530 0 obj <<
+/D [4510 0 R /XYZ 151.701 360.855 null]
 >> endobj
-4557 0 obj <<
-/D [4536 0 R /XYZ 151.701 348.9 null]
+4531 0 obj <<
+/D [4510 0 R /XYZ 151.701 348.9 null]
 >> endobj
-4558 0 obj <<
-/D [4536 0 R /XYZ 151.701 336.945 null]
+4532 0 obj <<
+/D [4510 0 R /XYZ 151.701 336.945 null]
 >> endobj
-4559 0 obj <<
-/D [4536 0 R /XYZ 151.701 324.989 null]
+4533 0 obj <<
+/D [4510 0 R /XYZ 151.701 324.989 null]
 >> endobj
-4560 0 obj <<
-/D [4536 0 R /XYZ 151.701 313.034 null]
+4534 0 obj <<
+/D [4510 0 R /XYZ 151.701 313.034 null]
 >> endobj
-4561 0 obj <<
-/D [4536 0 R /XYZ 151.701 301.079 null]
+4535 0 obj <<
+/D [4510 0 R /XYZ 151.701 301.079 null]
 >> endobj
-4562 0 obj <<
-/D [4536 0 R /XYZ 151.701 289.124 null]
+4536 0 obj <<
+/D [4510 0 R /XYZ 151.701 289.124 null]
 >> endobj
-4563 0 obj <<
-/D [4536 0 R /XYZ 151.701 277.169 null]
+4537 0 obj <<
+/D [4510 0 R /XYZ 151.701 277.169 null]
 >> endobj
-4564 0 obj <<
-/D [4536 0 R /XYZ 151.701 265.214 null]
+4538 0 obj <<
+/D [4510 0 R /XYZ 151.701 265.214 null]
 >> endobj
-4565 0 obj <<
-/D [4536 0 R /XYZ 151.701 253.258 null]
+4539 0 obj <<
+/D [4510 0 R /XYZ 151.701 253.258 null]
 >> endobj
-4535 0 obj <<
+4509 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F4 2008 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4568 0 obj <<
+4542 0 obj <<
 /Length 2295      
 /Filter /FlateDecode
 >>
@@ -23058,108 +22370,108 @@
 Íé»*?snû?”„ë"êþ¬Á`žÂб×݃Åz?çt´ÿÞ²s!
 endstream
 endobj
-4567 0 obj <<
+4541 0 obj <<
 /Type /Page
-/Contents 4568 0 R
-/Resources 4566 0 R
+/Contents 4542 0 R
+/Resources 4540 0 R
 /MediaBox [0 0 612 792]
-/Parent 4488 0 R
+/Parent 4462 0 R
 >> endobj
-4569 0 obj <<
-/D [4567 0 R /XYZ 100.892 685.529 null]
+4543 0 obj <<
+/D [4541 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1603 0 obj <<
-/D [4567 0 R /XYZ 100.892 562.731 null]
+/D [4541 0 R /XYZ 100.892 562.731 null]
 >> endobj
-4570 0 obj <<
-/D [4567 0 R /XYZ 100.892 545.861 null]
+4544 0 obj <<
+/D [4541 0 R /XYZ 100.892 545.861 null]
 >> endobj
-4571 0 obj <<
-/D [4567 0 R /XYZ 100.892 539.884 null]
+4545 0 obj <<
+/D [4541 0 R /XYZ 100.892 539.884 null]
 >> endobj
-4572 0 obj <<
-/D [4567 0 R /XYZ 100.892 546.16 null]
+4546 0 obj <<
+/D [4541 0 R /XYZ 100.892 546.16 null]
 >> endobj
-4573 0 obj <<
-/D [4567 0 R /XYZ 100.892 534.205 null]
+4547 0 obj <<
+/D [4541 0 R /XYZ 100.892 534.205 null]
 >> endobj
-4574 0 obj <<
-/D [4567 0 R /XYZ 100.892 522.25 null]
+4548 0 obj <<
+/D [4541 0 R /XYZ 100.892 522.25 null]
 >> endobj
-4575 0 obj <<
-/D [4567 0 R /XYZ 100.892 510.295 null]
+4549 0 obj <<
+/D [4541 0 R /XYZ 100.892 510.295 null]
 >> endobj
-4576 0 obj <<
-/D [4567 0 R /XYZ 100.892 498.339 null]
+4550 0 obj <<
+/D [4541 0 R /XYZ 100.892 498.339 null]
 >> endobj
-4577 0 obj <<
-/D [4567 0 R /XYZ 100.892 486.384 null]
+4551 0 obj <<
+/D [4541 0 R /XYZ 100.892 486.384 null]
 >> endobj
-4578 0 obj <<
-/D [4567 0 R /XYZ 100.892 474.429 null]
+4552 0 obj <<
+/D [4541 0 R /XYZ 100.892 474.429 null]
 >> endobj
-4579 0 obj <<
-/D [4567 0 R /XYZ 100.892 462.474 null]
+4553 0 obj <<
+/D [4541 0 R /XYZ 100.892 462.474 null]
 >> endobj
-4580 0 obj <<
-/D [4567 0 R /XYZ 100.892 450.519 null]
+4554 0 obj <<
+/D [4541 0 R /XYZ 100.892 450.519 null]
 >> endobj
-4581 0 obj <<
-/D [4567 0 R /XYZ 100.892 438.564 null]
+4555 0 obj <<
+/D [4541 0 R /XYZ 100.892 438.564 null]
 >> endobj
-4582 0 obj <<
-/D [4567 0 R /XYZ 100.892 426.608 null]
+4556 0 obj <<
+/D [4541 0 R /XYZ 100.892 426.608 null]
 >> endobj
-4583 0 obj <<
-/D [4567 0 R /XYZ 100.892 414.653 null]
+4557 0 obj <<
+/D [4541 0 R /XYZ 100.892 414.653 null]
 >> endobj
-4584 0 obj <<
-/D [4567 0 R /XYZ 100.892 402.698 null]
+4558 0 obj <<
+/D [4541 0 R /XYZ 100.892 402.698 null]
 >> endobj
-4585 0 obj <<
-/D [4567 0 R /XYZ 100.892 390.743 null]
+4559 0 obj <<
+/D [4541 0 R /XYZ 100.892 390.743 null]
 >> endobj
-4586 0 obj <<
-/D [4567 0 R /XYZ 100.892 378.788 null]
+4560 0 obj <<
+/D [4541 0 R /XYZ 100.892 378.788 null]
 >> endobj
-4587 0 obj <<
-/D [4567 0 R /XYZ 100.892 366.833 null]
+4561 0 obj <<
+/D [4541 0 R /XYZ 100.892 366.833 null]
 >> endobj
-4588 0 obj <<
-/D [4567 0 R /XYZ 100.892 354.877 null]
+4562 0 obj <<
+/D [4541 0 R /XYZ 100.892 354.877 null]
 >> endobj
-4589 0 obj <<
-/D [4567 0 R /XYZ 100.892 342.922 null]
+4563 0 obj <<
+/D [4541 0 R /XYZ 100.892 342.922 null]
 >> endobj
-4590 0 obj <<
-/D [4567 0 R /XYZ 100.892 330.967 null]
+4564 0 obj <<
+/D [4541 0 R /XYZ 100.892 330.967 null]
 >> endobj
-4591 0 obj <<
-/D [4567 0 R /XYZ 100.892 319.012 null]
+4565 0 obj <<
+/D [4541 0 R /XYZ 100.892 319.012 null]
 >> endobj
-4592 0 obj <<
-/D [4567 0 R /XYZ 100.892 307.057 null]
+4566 0 obj <<
+/D [4541 0 R /XYZ 100.892 307.057 null]
 >> endobj
-4593 0 obj <<
-/D [4567 0 R /XYZ 100.892 295.102 null]
+4567 0 obj <<
+/D [4541 0 R /XYZ 100.892 295.102 null]
 >> endobj
-4594 0 obj <<
-/D [4567 0 R /XYZ 100.892 283.146 null]
+4568 0 obj <<
+/D [4541 0 R /XYZ 100.892 283.146 null]
 >> endobj
-4595 0 obj <<
-/D [4567 0 R /XYZ 100.892 271.191 null]
+4569 0 obj <<
+/D [4541 0 R /XYZ 100.892 271.191 null]
 >> endobj
-4596 0 obj <<
-/D [4567 0 R /XYZ 100.892 259.236 null]
+4570 0 obj <<
+/D [4541 0 R /XYZ 100.892 259.236 null]
 >> endobj
-4597 0 obj <<
-/D [4567 0 R /XYZ 100.892 247.281 null]
+4571 0 obj <<
+/D [4541 0 R /XYZ 100.892 247.281 null]
 >> endobj
-4566 0 obj <<
+4540 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4600 0 obj <<
+4574 0 obj <<
 /Length 4062      
 /Filter /FlateDecode
 >>
@@ -23208,153 +22520,153 @@
 ™ªü§ª2ÿØ·ß ºä?U3¶›ý$å‰ÿô¥_rÚÕýŸªýÇ:nζ!zòpuôàâÖÑ?ÂÝÊÿH–
 endstream
 endobj
-4599 0 obj <<
+4573 0 obj <<
 /Type /Page
-/Contents 4600 0 R
-/Resources 4598 0 R
+/Contents 4574 0 R
+/Resources 4572 0 R
 /MediaBox [0 0 612 792]
-/Parent 4488 0 R
+/Parent 4462 0 R
 >> endobj
-4601 0 obj <<
-/D [4599 0 R /XYZ 151.701 685.529 null]
+4575 0 obj <<
+/D [4573 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1604 0 obj <<
-/D [4599 0 R /XYZ 151.701 652.395 null]
+/D [4573 0 R /XYZ 151.701 652.395 null]
 >> endobj
-4459 0 obj <<
-/D [4599 0 R /XYZ 151.701 635.525 null]
+4433 0 obj <<
+/D [4573 0 R /XYZ 151.701 635.525 null]
 >> endobj
-4602 0 obj <<
-/D [4599 0 R /XYZ 151.701 629.547 null]
+4576 0 obj <<
+/D [4573 0 R /XYZ 151.701 629.547 null]
 >> endobj
-4603 0 obj <<
-/D [4599 0 R /XYZ 151.701 635.824 null]
+4577 0 obj <<
+/D [4573 0 R /XYZ 151.701 635.824 null]
 >> endobj
-4604 0 obj <<
-/D [4599 0 R /XYZ 151.701 623.869 null]
+4578 0 obj <<
+/D [4573 0 R /XYZ 151.701 623.869 null]
 >> endobj
-4605 0 obj <<
-/D [4599 0 R /XYZ 151.701 611.913 null]
+4579 0 obj <<
+/D [4573 0 R /XYZ 151.701 611.913 null]
 >> endobj
-4606 0 obj <<
-/D [4599 0 R /XYZ 151.701 599.958 null]
+4580 0 obj <<
+/D [4573 0 R /XYZ 151.701 599.958 null]
 >> endobj
-4607 0 obj <<
-/D [4599 0 R /XYZ 151.701 588.003 null]
+4581 0 obj <<
+/D [4573 0 R /XYZ 151.701 588.003 null]
 >> endobj
-4608 0 obj <<
-/D [4599 0 R /XYZ 151.701 576.048 null]
+4582 0 obj <<
+/D [4573 0 R /XYZ 151.701 576.048 null]
 >> endobj
-4609 0 obj <<
-/D [4599 0 R /XYZ 151.701 564.093 null]
+4583 0 obj <<
+/D [4573 0 R /XYZ 151.701 564.093 null]
 >> endobj
-4610 0 obj <<
-/D [4599 0 R /XYZ 151.701 552.138 null]
+4584 0 obj <<
+/D [4573 0 R /XYZ 151.701 552.138 null]
 >> endobj
-4611 0 obj <<
-/D [4599 0 R /XYZ 151.701 540.182 null]
+4585 0 obj <<
+/D [4573 0 R /XYZ 151.701 540.182 null]
 >> endobj
-4612 0 obj <<
-/D [4599 0 R /XYZ 151.701 528.227 null]
+4586 0 obj <<
+/D [4573 0 R /XYZ 151.701 528.227 null]
 >> endobj
-4613 0 obj <<
-/D [4599 0 R /XYZ 151.701 516.272 null]
+4587 0 obj <<
+/D [4573 0 R /XYZ 151.701 516.272 null]
 >> endobj
-4614 0 obj <<
-/D [4599 0 R /XYZ 151.701 504.317 null]
+4588 0 obj <<
+/D [4573 0 R /XYZ 151.701 504.317 null]
 >> endobj
-4615 0 obj <<
-/D [4599 0 R /XYZ 151.701 492.362 null]
+4589 0 obj <<
+/D [4573 0 R /XYZ 151.701 492.362 null]
 >> endobj
-4616 0 obj <<
-/D [4599 0 R /XYZ 151.701 480.407 null]
+4590 0 obj <<
+/D [4573 0 R /XYZ 151.701 480.407 null]
 >> endobj
-4617 0 obj <<
-/D [4599 0 R /XYZ 151.701 468.451 null]
+4591 0 obj <<
+/D [4573 0 R /XYZ 151.701 468.451 null]
 >> endobj
-4618 0 obj <<
-/D [4599 0 R /XYZ 151.701 456.496 null]
+4592 0 obj <<
+/D [4573 0 R /XYZ 151.701 456.496 null]
 >> endobj
-4619 0 obj <<
-/D [4599 0 R /XYZ 151.701 444.541 null]
+4593 0 obj <<
+/D [4573 0 R /XYZ 151.701 444.541 null]
 >> endobj
-4620 0 obj <<
-/D [4599 0 R /XYZ 151.701 432.586 null]
+4594 0 obj <<
+/D [4573 0 R /XYZ 151.701 432.586 null]
 >> endobj
-4621 0 obj <<
-/D [4599 0 R /XYZ 151.701 420.631 null]
+4595 0 obj <<
+/D [4573 0 R /XYZ 151.701 420.631 null]
 >> endobj
-4622 0 obj <<
-/D [4599 0 R /XYZ 151.701 408.676 null]
+4596 0 obj <<
+/D [4573 0 R /XYZ 151.701 408.676 null]
 >> endobj
-4623 0 obj <<
-/D [4599 0 R /XYZ 151.701 396.72 null]
+4597 0 obj <<
+/D [4573 0 R /XYZ 151.701 396.72 null]
 >> endobj
-4624 0 obj <<
-/D [4599 0 R /XYZ 151.701 384.765 null]
+4598 0 obj <<
+/D [4573 0 R /XYZ 151.701 384.765 null]
 >> endobj
-4625 0 obj <<
-/D [4599 0 R /XYZ 151.701 372.81 null]
+4599 0 obj <<
+/D [4573 0 R /XYZ 151.701 372.81 null]
 >> endobj
-4626 0 obj <<
-/D [4599 0 R /XYZ 151.701 360.855 null]
+4600 0 obj <<
+/D [4573 0 R /XYZ 151.701 360.855 null]
 >> endobj
-4627 0 obj <<
-/D [4599 0 R /XYZ 151.701 348.9 null]
+4601 0 obj <<
+/D [4573 0 R /XYZ 151.701 348.9 null]
 >> endobj
-4628 0 obj <<
-/D [4599 0 R /XYZ 151.701 336.945 null]
+4602 0 obj <<
+/D [4573 0 R /XYZ 151.701 336.945 null]
 >> endobj
-4629 0 obj <<
-/D [4599 0 R /XYZ 151.701 324.989 null]
+4603 0 obj <<
+/D [4573 0 R /XYZ 151.701 324.989 null]
 >> endobj
-4630 0 obj <<
-/D [4599 0 R /XYZ 151.701 313.034 null]
+4604 0 obj <<
+/D [4573 0 R /XYZ 151.701 313.034 null]
 >> endobj
-4631 0 obj <<
-/D [4599 0 R /XYZ 151.701 301.079 null]
+4605 0 obj <<
+/D [4573 0 R /XYZ 151.701 301.079 null]
 >> endobj
-4632 0 obj <<
-/D [4599 0 R /XYZ 151.701 289.124 null]
+4606 0 obj <<
+/D [4573 0 R /XYZ 151.701 289.124 null]
 >> endobj
-4633 0 obj <<
-/D [4599 0 R /XYZ 151.701 277.169 null]
+4607 0 obj <<
+/D [4573 0 R /XYZ 151.701 277.169 null]
 >> endobj
-4634 0 obj <<
-/D [4599 0 R /XYZ 151.701 265.214 null]
+4608 0 obj <<
+/D [4573 0 R /XYZ 151.701 265.214 null]
 >> endobj
-4635 0 obj <<
-/D [4599 0 R /XYZ 151.701 253.258 null]
+4609 0 obj <<
+/D [4573 0 R /XYZ 151.701 253.258 null]
 >> endobj
-4636 0 obj <<
-/D [4599 0 R /XYZ 151.701 241.303 null]
+4610 0 obj <<
+/D [4573 0 R /XYZ 151.701 241.303 null]
 >> endobj
-4637 0 obj <<
-/D [4599 0 R /XYZ 151.701 229.348 null]
+4611 0 obj <<
+/D [4573 0 R /XYZ 151.701 229.348 null]
 >> endobj
-4638 0 obj <<
-/D [4599 0 R /XYZ 151.701 217.393 null]
+4612 0 obj <<
+/D [4573 0 R /XYZ 151.701 217.393 null]
 >> endobj
-4639 0 obj <<
-/D [4599 0 R /XYZ 151.701 205.438 null]
+4613 0 obj <<
+/D [4573 0 R /XYZ 151.701 205.438 null]
 >> endobj
-4640 0 obj <<
-/D [4599 0 R /XYZ 151.701 193.483 null]
+4614 0 obj <<
+/D [4573 0 R /XYZ 151.701 193.483 null]
 >> endobj
-4641 0 obj <<
-/D [4599 0 R /XYZ 151.701 181.527 null]
+4615 0 obj <<
+/D [4573 0 R /XYZ 151.701 181.527 null]
 >> endobj
-4642 0 obj <<
-/D [4599 0 R /XYZ 151.701 169.572 null]
+4616 0 obj <<
+/D [4573 0 R /XYZ 151.701 169.572 null]
 >> endobj
-4643 0 obj <<
-/D [4599 0 R /XYZ 151.701 157.617 null]
+4617 0 obj <<
+/D [4573 0 R /XYZ 151.701 157.617 null]
 >> endobj
-4598 0 obj <<
+4572 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4646 0 obj <<
+4620 0 obj <<
 /Length 2822      
 /Filter /FlateDecode
 >>
@@ -23392,135 +22704,135 @@
 ?(Œ·U¾wµüçÿ¤@¾w%Ýác"?sn‡¿wŸŽär^8ù{÷ýŸ5è̓zíysìèàÕà¿(Ø·ÿnM	m
 endstream
 endobj
-4645 0 obj <<
+4619 0 obj <<
 /Type /Page
-/Contents 4646 0 R
-/Resources 4644 0 R
+/Contents 4620 0 R
+/Resources 4618 0 R
 /MediaBox [0 0 612 792]
-/Parent 4488 0 R
+/Parent 4462 0 R
 >> endobj
-4647 0 obj <<
-/D [4645 0 R /XYZ 100.892 685.529 null]
+4621 0 obj <<
+/D [4619 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1605 0 obj <<
-/D [4645 0 R /XYZ 100.892 616.53 null]
+/D [4619 0 R /XYZ 100.892 616.53 null]
 >> endobj
-4648 0 obj <<
-/D [4645 0 R /XYZ 100.892 599.66 null]
+4622 0 obj <<
+/D [4619 0 R /XYZ 100.892 599.66 null]
 >> endobj
-4649 0 obj <<
-/D [4645 0 R /XYZ 100.892 593.682 null]
+4623 0 obj <<
+/D [4619 0 R /XYZ 100.892 593.682 null]
 >> endobj
-4650 0 obj <<
-/D [4645 0 R /XYZ 100.892 599.958 null]
+4624 0 obj <<
+/D [4619 0 R /XYZ 100.892 599.958 null]
 >> endobj
-4651 0 obj <<
-/D [4645 0 R /XYZ 100.892 588.003 null]
+4625 0 obj <<
+/D [4619 0 R /XYZ 100.892 588.003 null]
 >> endobj
-4652 0 obj <<
-/D [4645 0 R /XYZ 100.892 576.048 null]
+4626 0 obj <<
+/D [4619 0 R /XYZ 100.892 576.048 null]
 >> endobj
-4653 0 obj <<
-/D [4645 0 R /XYZ 100.892 564.093 null]
+4627 0 obj <<
+/D [4619 0 R /XYZ 100.892 564.093 null]
 >> endobj
-4654 0 obj <<
-/D [4645 0 R /XYZ 100.892 552.138 null]
+4628 0 obj <<
+/D [4619 0 R /XYZ 100.892 552.138 null]
 >> endobj
-4655 0 obj <<
-/D [4645 0 R /XYZ 100.892 540.182 null]
+4629 0 obj <<
+/D [4619 0 R /XYZ 100.892 540.182 null]
 >> endobj
-4656 0 obj <<
-/D [4645 0 R /XYZ 100.892 528.227 null]
+4630 0 obj <<
+/D [4619 0 R /XYZ 100.892 528.227 null]
 >> endobj
-4657 0 obj <<
-/D [4645 0 R /XYZ 100.892 516.272 null]
+4631 0 obj <<
+/D [4619 0 R /XYZ 100.892 516.272 null]
 >> endobj
-4658 0 obj <<
-/D [4645 0 R /XYZ 100.892 504.317 null]
+4632 0 obj <<
+/D [4619 0 R /XYZ 100.892 504.317 null]
 >> endobj
-4659 0 obj <<
-/D [4645 0 R /XYZ 100.892 492.362 null]
+4633 0 obj <<
+/D [4619 0 R /XYZ 100.892 492.362 null]
 >> endobj
-4660 0 obj <<
-/D [4645 0 R /XYZ 100.892 480.407 null]
+4634 0 obj <<
+/D [4619 0 R /XYZ 100.892 480.407 null]
 >> endobj
-4661 0 obj <<
-/D [4645 0 R /XYZ 100.892 468.451 null]
+4635 0 obj <<
+/D [4619 0 R /XYZ 100.892 468.451 null]
 >> endobj
-4662 0 obj <<
-/D [4645 0 R /XYZ 100.892 456.496 null]
+4636 0 obj <<
+/D [4619 0 R /XYZ 100.892 456.496 null]
 >> endobj
-4663 0 obj <<
-/D [4645 0 R /XYZ 100.892 444.541 null]
+4637 0 obj <<
+/D [4619 0 R /XYZ 100.892 444.541 null]
 >> endobj
-4664 0 obj <<
-/D [4645 0 R /XYZ 100.892 432.586 null]
+4638 0 obj <<
+/D [4619 0 R /XYZ 100.892 432.586 null]
 >> endobj
-4665 0 obj <<
-/D [4645 0 R /XYZ 100.892 420.631 null]
+4639 0 obj <<
+/D [4619 0 R /XYZ 100.892 420.631 null]
 >> endobj
-4666 0 obj <<
-/D [4645 0 R /XYZ 100.892 408.676 null]
+4640 0 obj <<
+/D [4619 0 R /XYZ 100.892 408.676 null]
 >> endobj
-4667 0 obj <<
-/D [4645 0 R /XYZ 100.892 396.72 null]
+4641 0 obj <<
+/D [4619 0 R /XYZ 100.892 396.72 null]
 >> endobj
-4668 0 obj <<
-/D [4645 0 R /XYZ 100.892 384.765 null]
+4642 0 obj <<
+/D [4619 0 R /XYZ 100.892 384.765 null]
 >> endobj
-4669 0 obj <<
-/D [4645 0 R /XYZ 100.892 372.81 null]
+4643 0 obj <<
+/D [4619 0 R /XYZ 100.892 372.81 null]
 >> endobj
-4670 0 obj <<
-/D [4645 0 R /XYZ 100.892 360.855 null]
+4644 0 obj <<
+/D [4619 0 R /XYZ 100.892 360.855 null]
 >> endobj
-4671 0 obj <<
-/D [4645 0 R /XYZ 100.892 348.9 null]
+4645 0 obj <<
+/D [4619 0 R /XYZ 100.892 348.9 null]
 >> endobj
-4672 0 obj <<
-/D [4645 0 R /XYZ 100.892 336.945 null]
+4646 0 obj <<
+/D [4619 0 R /XYZ 100.892 336.945 null]
 >> endobj
-4673 0 obj <<
-/D [4645 0 R /XYZ 100.892 324.989 null]
+4647 0 obj <<
+/D [4619 0 R /XYZ 100.892 324.989 null]
 >> endobj
-4674 0 obj <<
-/D [4645 0 R /XYZ 100.892 313.034 null]
+4648 0 obj <<
+/D [4619 0 R /XYZ 100.892 313.034 null]
 >> endobj
-4675 0 obj <<
-/D [4645 0 R /XYZ 100.892 301.079 null]
+4649 0 obj <<
+/D [4619 0 R /XYZ 100.892 301.079 null]
 >> endobj
-4676 0 obj <<
-/D [4645 0 R /XYZ 100.892 289.124 null]
+4650 0 obj <<
+/D [4619 0 R /XYZ 100.892 289.124 null]
 >> endobj
-4677 0 obj <<
-/D [4645 0 R /XYZ 100.892 277.169 null]
+4651 0 obj <<
+/D [4619 0 R /XYZ 100.892 277.169 null]
 >> endobj
-4678 0 obj <<
-/D [4645 0 R /XYZ 100.892 265.214 null]
+4652 0 obj <<
+/D [4619 0 R /XYZ 100.892 265.214 null]
 >> endobj
-4679 0 obj <<
-/D [4645 0 R /XYZ 100.892 253.258 null]
+4653 0 obj <<
+/D [4619 0 R /XYZ 100.892 253.258 null]
 >> endobj
-4680 0 obj <<
-/D [4645 0 R /XYZ 100.892 241.303 null]
+4654 0 obj <<
+/D [4619 0 R /XYZ 100.892 241.303 null]
 >> endobj
-4681 0 obj <<
-/D [4645 0 R /XYZ 100.892 229.348 null]
+4655 0 obj <<
+/D [4619 0 R /XYZ 100.892 229.348 null]
 >> endobj
-4682 0 obj <<
-/D [4645 0 R /XYZ 100.892 217.393 null]
+4656 0 obj <<
+/D [4619 0 R /XYZ 100.892 217.393 null]
 >> endobj
-4683 0 obj <<
-/D [4645 0 R /XYZ 100.892 205.438 null]
+4657 0 obj <<
+/D [4619 0 R /XYZ 100.892 205.438 null]
 >> endobj
-4684 0 obj <<
-/D [4645 0 R /XYZ 100.892 193.483 null]
+4658 0 obj <<
+/D [4619 0 R /XYZ 100.892 193.483 null]
 >> endobj
-4644 0 obj <<
+4618 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4687 0 obj <<
+4661 0 obj <<
 /Length 346       
 /Filter /FlateDecode
 >>
@@ -23530,14 +22842,14 @@
 ³Þþv	šiÚF“²Ø6yx“Ô0r}üöL:Óìȸ@FXZ7	§Œ”Šf‰S´^%iÖ˺øŠò÷¾ÈoìŒÃhTW«eþåq¾)‹Ø/PUšy¥þ‚õ´žFû T›}òš sÝ´¯¨¬ìÆc/n+na\‡5çþBÊ5³Šÿç¾?y_¨÷
 endstream
 endobj
-4686 0 obj <<
+4660 0 obj <<
 /Type /Page
-/Contents 4687 0 R
-/Resources 4685 0 R
+/Contents 4661 0 R
+/Resources 4659 0 R
 /MediaBox [0 0 612 792]
-/Parent 4689 0 R
+/Parent 4663 0 R
 >> endobj
-4447 0 obj <<
+4421 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 473
@@ -24288,21 +23600,21 @@
 Ÿ„;wî´µµÙÚÚæççã×1~”aäÇEEEK—.­¬¬,**Bˆ!644¬¨¨Àux£päÑ£Gl|õFçÅÿh4Ú¹sç’’’ž={¦®®\äGùw ¢¢ÒÐÐ```°råJnUÄÅÅýúë¯ùùù£Y¬á¢§§ÇÐদ†Uƒ®ÑXü/„F£}øðA ô£"‘(--Ís¯ ¦­­mllù­÷üþy÷‡Ç¢E‹èT HFcñ(£ü'èììôöö®©©Ù²e‹Á”)SFçÈx=ztìØ1//¯ÐÐP6Ò—ÑX<Ê(ÿ!®\¹’––öäÉ			̶ŽB‡¹¹yww÷Œ36oÞÌQþÿP¸£`
 endstream
 endobj
-4688 0 obj <<
-/D [4686 0 R /XYZ 151.701 685.529 null]
+4662 0 obj <<
+/D [4660 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1761 0 obj <<
-/D [4686 0 R /XYZ 151.701 660.623 null]
+/D [4660 0 R /XYZ 151.701 660.623 null]
 >> endobj
-4337 0 obj <<
-/D [4686 0 R /XYZ 151.701 643.753 null]
+4323 0 obj <<
+/D [4660 0 R /XYZ 151.701 643.753 null]
 >> endobj
-4685 0 obj <<
+4659 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R >>
-/XObject << /Im17 4447 0 R >>
+/XObject << /Im17 4421 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-4692 0 obj <<
+4666 0 obj <<
 /Length 354       
 /Filter /FlateDecode
 >>
@@ -24311,14 +23623,14 @@
 … ˼EÙpDæ¼ ã<Ó^A¶€)äóݲ®’Y6êèŽycTKža`cä¦X’r4’Ž÷yÓÖ4I*µ¢ÏÕ"7UsH$Ò<ðè¶9Jºð.óè»dˆ­Ò'QadË"wÙP~Ö¦fR¼$ÓÂ"äF€Lz‡ŽY‚ÔŽݪ­`BƏ֯hdB¨K1ëíbq~ߺÿRÓAMÛèa¸,öÛ`Y:†d£k®Ïë´gÒ™“éÇ|—Gí§Þ¾†J©h–8Eëu’¶àª.Þ[Xҏ˜ˆ§&ßFì¶.׫ü-ƒ¼YUŒû¿ŒTiæ•úËL/ÏKé°S\›VyCÒeOg*+»‹évª{%w0¨Ã3×~BÊuXþŸ~?/«)
 endstream
 endobj
-4691 0 obj <<
+4665 0 obj <<
 /Type /Page
-/Contents 4692 0 R
-/Resources 4690 0 R
+/Contents 4666 0 R
+/Resources 4664 0 R
 /MediaBox [0 0 612 792]
-/Parent 4689 0 R
+/Parent 4663 0 R
 >> endobj
-4448 0 obj <<
+4422 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 473
@@ -25066,21 +24378,21 @@
 l’†ó.zdÀ/þÐÑÑÙ½{woŸÅOH_În=~ü˜x	݉'”””æÍ›G?Õt ~öýûw8i»Gü⟝ÖÖÖË—/÷ö‰À'òóóKJJˆ_>|øùóçÍÍ͏;ÖÇS©?---»víJNN>þ<B*hÀ/þ8s挑‘ш#455{ûtà-Ož<Ù¼ysbb"[ñ_èJ‡„„¨«««ªª¶µµñî$  ˆŠŠ>|ø°´´týúõ%%%èÆÊ@Îç§áÚµk›7o600022š6mñ`â ý‚ÖÖÖ§OŸÞ¼y3--íðáëV­âlÆÆÆǏ766~þÌÍZì˜9rä¨Q£¦OŸ...ÎòlñOEsssHHH~~þçÏŸŸ>}ÚÛ§3 7™5k–¨¨èìÙ³=<<FŒÑÛ§3 —ù?'ÇYù
 endstream
 endobj
-4693 0 obj <<
-/D [4691 0 R /XYZ 100.892 685.529 null]
+4667 0 obj <<
+/D [4665 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1794 0 obj <<
-/D [4691 0 R /XYZ 100.892 660.623 null]
+/D [4665 0 R /XYZ 100.892 660.623 null]
 >> endobj
-4338 0 obj <<
-/D [4691 0 R /XYZ 100.892 643.753 null]
+4324 0 obj <<
+/D [4665 0 R /XYZ 100.892 643.753 null]
 >> endobj
-4690 0 obj <<
+4664 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R >>
-/XObject << /Im18 4448 0 R >>
+/XObject << /Im18 4422 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-4696 0 obj <<
+4670 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -25088,20 +24400,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-4695 0 obj <<
+4669 0 obj <<
 /Type /Page
-/Contents 4696 0 R
-/Resources 4694 0 R
+/Contents 4670 0 R
+/Resources 4668 0 R
 /MediaBox [0 0 612 792]
-/Parent 4689 0 R
+/Parent 4663 0 R
 >> endobj
-4697 0 obj <<
-/D [4695 0 R /XYZ 151.701 685.529 null]
+4671 0 obj <<
+/D [4669 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4694 0 obj <<
+4668 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-4700 0 obj <<
+4674 0 obj <<
 /Length 179       
 /Filter /FlateDecode
 >>
@@ -25112,21 +24424,21 @@
 &(M•1Io†Þu>ÙªéãÖ}žhÆ×"® a¡Î5¾¢æË.ϹT»©ómÒg—´KWçë™kC5Ê]uíäàcã÷áonmöß°>÷
 endstream
 endobj
-4699 0 obj <<
+4673 0 obj <<
 /Type /Page
-/Contents 4700 0 R
-/Resources 4698 0 R
+/Contents 4674 0 R
+/Resources 4672 0 R
 /MediaBox [0 0 612 792]
-/Parent 4689 0 R
+/Parent 4663 0 R
 >> endobj
 498 0 obj <<
-/D [4699 0 R /XYZ 100.892 515.446 null]
+/D [4673 0 R /XYZ 100.892 515.446 null]
 >> endobj
-4698 0 obj <<
+4672 0 obj <<
 /Font << /F27 1123 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4703 0 obj <<
+4677 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -25134,17 +24446,17 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-4702 0 obj <<
+4676 0 obj <<
 /Type /Page
-/Contents 4703 0 R
-/Resources 4701 0 R
+/Contents 4677 0 R
+/Resources 4675 0 R
 /MediaBox [0 0 612 792]
-/Parent 4689 0 R
+/Parent 4663 0 R
 >> endobj
-4701 0 obj <<
+4675 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-4706 0 obj <<
+4680 0 obj <<
 /Length 839       
 /Filter /FlateDecode
 >>
@@ -25160,33 +24472,33 @@
 ´Ã?ðÃ'5Jë,ƒsY‘˜ñÇ =ɺNgÿ±¥Ì÷
 endstream
 endobj
-4705 0 obj <<
+4679 0 obj <<
 /Type /Page
-/Contents 4706 0 R
-/Resources 4704 0 R
+/Contents 4680 0 R
+/Resources 4678 0 R
 /MediaBox [0 0 612 792]
-/Parent 4689 0 R
+/Parent 4663 0 R
 >> endobj
-4707 0 obj <<
-/D [4705 0 R /XYZ 100.892 685.529 null]
+4681 0 obj <<
+/D [4679 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4708 0 obj <<
-/D [4705 0 R /XYZ 100.892 660.623 null]
+4682 0 obj <<
+/D [4679 0 R /XYZ 100.892 660.623 null]
 >> endobj
 502 0 obj <<
-/D [4705 0 R /XYZ 100.892 529.238 null]
+/D [4679 0 R /XYZ 100.892 529.238 null]
 >> endobj
-4709 0 obj <<
-/D [4705 0 R /XYZ 100.892 529.238 null]
+4683 0 obj <<
+/D [4679 0 R /XYZ 100.892 529.238 null]
 >> endobj
-4710 0 obj <<
-/D [4705 0 R /XYZ 100.892 529.238 null]
+4684 0 obj <<
+/D [4679 0 R /XYZ 100.892 529.238 null]
 >> endobj
-4704 0 obj <<
+4678 0 obj <<
 /Font << /F17 1131 0 R /F15 1133 0 R /F51 1134 0 R /F28 1124 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4713 0 obj <<
+4687 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -25194,20 +24506,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-4712 0 obj <<
+4686 0 obj <<
 /Type /Page
-/Contents 4713 0 R
-/Resources 4711 0 R
+/Contents 4687 0 R
+/Resources 4685 0 R
 /MediaBox [0 0 612 792]
-/Parent 4715 0 R
+/Parent 4689 0 R
 >> endobj
-4714 0 obj <<
-/D [4712 0 R /XYZ 151.701 685.529 null]
+4688 0 obj <<
+/D [4686 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4711 0 obj <<
+4685 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-4721 0 obj <<
+4695 0 obj <<
 /Length 1572      
 /Filter /FlateDecode
 >>
@@ -25225,53 +24537,53 @@
 ïk0Ç⇠*Ìÿ0	ÂDª”wÏ»!))ÔØ Ü5§ñ«%Š/-<D>ÈBkèxÀzç/.ž±Ó؇«ƒOuœÜ<ó ûo¨)‡j«íúp)®þUßœ¨ÒàoÀó -]wÀE«A™–øº¾Õv¹rC2¸7u[ãÞ¼êVuãåJ	|6ºö`ÁÌÇÑY¹øD$1˲ôßþMˆD²$;ÿ3!EB¯W™û3qÀ ò¬ÝÃlŸ³"ËL&`æƒnŸsï¯ïÎ4„ÿZcv€Q–Cܪï·ß^_ï÷{Ölaì€@@QÔKV6›ëri#×Ã涾Æc \cÃ7‡Î~¤åoÔócÉTŠC%?MµÞ˜ï;½Úq®Ø¹Šqøæ5ûáŒõt=rBx\ÄLÁõ½)}¢Ä™z¢¿ V®€
 endstream
 endobj
-4720 0 obj <<
+4694 0 obj <<
 /Type /Page
-/Contents 4721 0 R
-/Resources 4719 0 R
+/Contents 4695 0 R
+/Resources 4693 0 R
 /MediaBox [0 0 612 792]
-/Parent 4715 0 R
-/Annots [ 4717 0 R 4716 0 R 4725 0 R ]
+/Parent 4689 0 R
+/Annots [ 4691 0 R 4690 0 R 4699 0 R ]
 >> endobj
-4717 0 obj <<
+4691 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [338.411 342.647 388.767 354.336]
 /Subtype /Link
 /A << /S /GoTo /D (ch09openmag) >>
 >> endobj
-4716 0 obj <<
+4690 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 129.215 460.543 140.871]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.open-mag.com/cgi-bin/opencgi/surveys/survey.cgi?survey_name=samba)>>
 >> endobj
-4725 0 obj <<
+4699 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [99.895 116.961 148.961 127.721]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.open-mag.com/cgi-bin/opencgi/surveys/survey.cgi?survey_name=samba)>>
 >> endobj
-4722 0 obj <<
-/D [4720 0 R /XYZ 100.892 685.529 null]
+4696 0 obj <<
+/D [4694 0 R /XYZ 100.892 685.529 null]
 >> endobj
 506 0 obj <<
-/D [4720 0 R /XYZ 100.892 660.623 null]
+/D [4694 0 R /XYZ 100.892 660.623 null]
 >> endobj
-4723 0 obj <<
-/D [4720 0 R /XYZ 100.892 447.383 null]
+4697 0 obj <<
+/D [4694 0 R /XYZ 100.892 447.383 null]
 >> endobj
 510 0 obj <<
-/D [4720 0 R /XYZ 100.892 214.302 null]
+/D [4694 0 R /XYZ 100.892 214.302 null]
 >> endobj
-4724 0 obj <<
-/D [4720 0 R /XYZ 100.892 185.524 null]
+4698 0 obj <<
+/D [4694 0 R /XYZ 100.892 185.524 null]
 >> endobj
-4719 0 obj <<
+4693 0 obj <<
 /Font << /F77 1973 0 R /F17 1131 0 R /F15 1133 0 R /F51 1134 0 R /F30 1928 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R /F28 1124 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4729 0 obj <<
+4703 0 obj <<
 /Length 1250      
 /Filter /FlateDecode
 >>
@@ -25289,14 +24601,14 @@
 PkUÄõ4[Àgp<gü_P+ᬃ&FwÈ¢¡C•]`p>˜N/$7fíì`7~¢h]Û°ÉÖ<><+ð¬q‚…µ°ޟññ­`¤`’Q·¦©ñ)Ñ£ÒÇ‚² ³Ø†á‡.¤™	ØÒvw‡ýôi’±þŒ?‘ Œ¦/þçàñ­h¤
 endstream
 endobj
-4728 0 obj <<
+4702 0 obj <<
 /Type /Page
-/Contents 4729 0 R
-/Resources 4727 0 R
+/Contents 4703 0 R
+/Resources 4701 0 R
 /MediaBox [0 0 612 792]
-/Parent 4715 0 R
+/Parent 4689 0 R
 >> endobj
-4718 0 obj <<
+4692 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 662
@@ -25423,27 +24735,27 @@
 ѽjº|÷Ââ—øs£Å¨bŒÊeTÎ]^<©¡¶zÌzT1¦Þ„ÓŸ4ÍQÛ;je~*6¤Ó²Î}Û‹.[o|ìºþ¤ý“–§Hƒù,åémi¿>ã7•C8]}=ÊÅCæɈñùZféÛ¢1íùÁ>*ý•”§ïx`P§R`C:] ¼(OgÝn_ŠtöOš`¯)ŠD´á´!úÆCM½ÎPƒ=âS'5ꃽ˦9uƤ3Ënœ¨<Ó?7Íuî!Z46¤Ó&89Þýµw9ΪYÝuNzFŒÏ˜ÝãÝF•spyÁ2üÈDéŒé{žË&ŒJŠòOœhÃ0„SùŒé=fyñaσÇšÔ˜Š—ÿÜ@5õÂsGΏÏ}ê¬gÉwêï}¾%ZlH'""*%†p""¢Rb'¢	°‘™h}0„•C8Q)1„•C8Q)1„•C8Q)1„•C8Q)1„ÿÿí×±	À@A.Õý· Wàà›…™T‰²å  I I I I I I I I I I éz;Ü3_þ ±Â I iv÷ï €cV8 $I8 $=ç]N
 endstream
 endobj
-4730 0 obj <<
-/D [4728 0 R /XYZ 151.701 685.529 null]
+4704 0 obj <<
+/D [4702 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1796 0 obj <<
-/D [4728 0 R /XYZ 151.701 660.623 null]
+/D [4702 0 R /XYZ 151.701 660.623 null]
 >> endobj
-4726 0 obj <<
-/D [4728 0 R /XYZ 151.701 643.753 null]
+4700 0 obj <<
+/D [4702 0 R /XYZ 151.701 643.753 null]
 >> endobj
 514 0 obj <<
-/D [4728 0 R /XYZ 151.701 234.324 null]
+/D [4702 0 R /XYZ 151.701 234.324 null]
 >> endobj
-4731 0 obj <<
-/D [4728 0 R /XYZ 151.701 207.575 null]
+4705 0 obj <<
+/D [4702 0 R /XYZ 151.701 207.575 null]
 >> endobj
-4727 0 obj <<
+4701 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R >>
-/XObject << /Im19 4718 0 R >>
+/XObject << /Im19 4692 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-4734 0 obj <<
+4708 0 obj <<
 /Length 1981      
 /Filter /FlateDecode
 >>
@@ -25467,33 +24779,33 @@
 N¹Š3¸ÖÕåYùùqàšTär^OQéÆ—»Õß°_C
 endstream
 endobj
-4733 0 obj <<
+4707 0 obj <<
 /Type /Page
-/Contents 4734 0 R
-/Resources 4732 0 R
+/Contents 4708 0 R
+/Resources 4706 0 R
 /MediaBox [0 0 612 792]
-/Parent 4715 0 R
+/Parent 4689 0 R
 >> endobj
-4735 0 obj <<
-/D [4733 0 R /XYZ 100.892 685.529 null]
+4709 0 obj <<
+/D [4707 0 R /XYZ 100.892 685.529 null]
 >> endobj
 518 0 obj <<
-/D [4733 0 R /XYZ 100.892 561.364 null]
+/D [4707 0 R /XYZ 100.892 561.364 null]
 >> endobj
-4736 0 obj <<
-/D [4733 0 R /XYZ 100.892 533.862 null]
+4710 0 obj <<
+/D [4707 0 R /XYZ 100.892 533.862 null]
 >> endobj
 522 0 obj <<
-/D [4733 0 R /XYZ 100.892 381.769 null]
+/D [4707 0 R /XYZ 100.892 381.769 null]
 >> endobj
-4737 0 obj <<
-/D [4733 0 R /XYZ 100.892 354.963 null]
+4711 0 obj <<
+/D [4707 0 R /XYZ 100.892 354.963 null]
 >> endobj
-4732 0 obj <<
+4706 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4740 0 obj <<
+4714 0 obj <<
 /Length 2406      
 /Filter /FlateDecode
 >>
@@ -25517,21 +24829,21 @@
 iE;!V´ý¿è€aŠô®‡Ap0¥f\å¥@MPxÚ7Æi Íó8ETºçŽ4œ0Jîιš<ØcÀPuµåGcšÅ®†Þ”Ú40}Þ“â¶soZR†™Ð´ù’‰GêyòÎ5ü")ý	uˆ°l
 endstream
 endobj
-4739 0 obj <<
+4713 0 obj <<
 /Type /Page
-/Contents 4740 0 R
-/Resources 4738 0 R
+/Contents 4714 0 R
+/Resources 4712 0 R
 /MediaBox [0 0 612 792]
-/Parent 4715 0 R
+/Parent 4689 0 R
 >> endobj
-4741 0 obj <<
-/D [4739 0 R /XYZ 151.701 685.529 null]
+4715 0 obj <<
+/D [4713 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4738 0 obj <<
+4712 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F54 1912 0 R /F59 1905 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4744 0 obj <<
+4718 0 obj <<
 /Length 2334      
 /Filter /FlateDecode
 >>
@@ -25555,21 +24867,21 @@
 þÅ”P‡
 endstream
 endobj
-4743 0 obj <<
+4717 0 obj <<
 /Type /Page
-/Contents 4744 0 R
-/Resources 4742 0 R
+/Contents 4718 0 R
+/Resources 4716 0 R
 /MediaBox [0 0 612 792]
-/Parent 4715 0 R
+/Parent 4689 0 R
 >> endobj
-4745 0 obj <<
-/D [4743 0 R /XYZ 100.892 685.529 null]
+4719 0 obj <<
+/D [4717 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4742 0 obj <<
+4716 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4748 0 obj <<
+4722 0 obj <<
 /Length 2140      
 /Filter /FlateDecode
 >>
@@ -25592,33 +24904,33 @@
 ƒa‡Vz	yJ%©xp­jiºn×ߘsg¸×¬ªõ~üåÉÛ[yÿŸ¹¥kü›…‰€Š)[½jÓGî Óà¡ËÉÌÿàRñuÄPã($à…·¿Y/£O3Í5]ð)`:é´`¥ÿÀ}'"tR%öPø÷äü¿âüýú~ósש¤
 endstream
 endobj
-4747 0 obj <<
+4721 0 obj <<
 /Type /Page
-/Contents 4748 0 R
-/Resources 4746 0 R
+/Contents 4722 0 R
+/Resources 4720 0 R
 /MediaBox [0 0 612 792]
-/Parent 4752 0 R
+/Parent 4726 0 R
 >> endobj
-4749 0 obj <<
-/D [4747 0 R /XYZ 151.701 685.529 null]
+4723 0 obj <<
+/D [4721 0 R /XYZ 151.701 685.529 null]
 >> endobj
 526 0 obj <<
-/D [4747 0 R /XYZ 151.701 660.623 null]
+/D [4721 0 R /XYZ 151.701 660.623 null]
 >> endobj
-4750 0 obj <<
-/D [4747 0 R /XYZ 151.701 644.027 null]
+4724 0 obj <<
+/D [4721 0 R /XYZ 151.701 644.027 null]
 >> endobj
 530 0 obj <<
-/D [4747 0 R /XYZ 151.701 314.124 null]
+/D [4721 0 R /XYZ 151.701 314.124 null]
 >> endobj
-4751 0 obj <<
-/D [4747 0 R /XYZ 151.701 283.738 null]
+4725 0 obj <<
+/D [4721 0 R /XYZ 151.701 283.738 null]
 >> endobj
-4746 0 obj <<
+4720 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F17 1131 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4755 0 obj <<
+4729 0 obj <<
 /Length 2317      
 /Filter /FlateDecode
 >>
@@ -25646,27 +24958,27 @@
 j²ÌVfPšÁ—Þ§Äàß4<h¸*f at pûL}æç!š' ÷ÚÈ.pq&ZÒz·È¬·ùÇ%™<— (Ü°ª!ü¤WÉŠl¨2ï¡¬ð€Ÿšõ„ÏÅPŠÿû°ÔÍQóš›ÿ7΄pwÒHO¨Ä’Ɓ¼–‘€º€¨Ó «wóÀõäç…‘ÜK*‡Hï?&ÅU¼ªÀ¢¹øÍÞ×Vá$Ãøßø7I´t¿Läù±ûþøt÷˜Ör
 endstream
 endobj
-4754 0 obj <<
+4728 0 obj <<
 /Type /Page
-/Contents 4755 0 R
-/Resources 4753 0 R
+/Contents 4729 0 R
+/Resources 4727 0 R
 /MediaBox [0 0 612 792]
-/Parent 4752 0 R
+/Parent 4726 0 R
 >> endobj
-4756 0 obj <<
-/D [4754 0 R /XYZ 100.892 685.529 null]
+4730 0 obj <<
+/D [4728 0 R /XYZ 100.892 685.529 null]
 >> endobj
 534 0 obj <<
-/D [4754 0 R /XYZ 100.892 371.248 null]
+/D [4728 0 R /XYZ 100.892 371.248 null]
 >> endobj
-4757 0 obj <<
-/D [4754 0 R /XYZ 100.892 329.174 null]
+4731 0 obj <<
+/D [4728 0 R /XYZ 100.892 329.174 null]
 >> endobj
-4753 0 obj <<
+4727 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F51 1134 0 R /F17 1131 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4762 0 obj <<
+4736 0 obj <<
 /Length 2175      
 /Filter /FlateDecode
 >>
@@ -25690,241 +25002,207 @@
 Ýö;~\ZÊ D/½ÁÚ²š;q_ÇÀôàòžÞöLĽ!LL|»í§ŠM:²¡ï¾|R ¤Ýàemøs+Íp~¤G#²†bêÁ?qà°ŽšÍ¦@ã\À˜4½xðï?8uwû#=›®©<bàÿôæiÒŒ-7M½å¦‹ÇÏ¥KNˆÖœâö
 endstream
 endobj
-4761 0 obj <<
+4735 0 obj <<
 /Type /Page
-/Contents 4762 0 R
-/Resources 4760 0 R
+/Contents 4736 0 R
+/Resources 4734 0 R
 /MediaBox [0 0 612 792]
-/Parent 4752 0 R
-/Annots [ 4758 0 R ]
+/Parent 4726 0 R
+/Annots [ 4732 0 R ]
 >> endobj
-4758 0 obj <<
+4732 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.731 206.403 311.47 218.093]
 /Subtype /Link
 /A << /S /GoTo /D (ch9-sambadc) >>
 >> endobj
-4763 0 obj <<
-/D [4761 0 R /XYZ 151.701 685.529 null]
+4737 0 obj <<
+/D [4735 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4760 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F60 1917 0 R /F15 1133 0 R /F54 1912 0 R /F59 1905 0 R /F89 2333 0 R /F73 2334 0 R >>
-/XObject << /Im3 2328 0 R >>
+4734 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F60 1917 0 R /F15 1133 0 R /F54 1912 0 R /F59 1905 0 R /F89 2330 0 R /F73 2331 0 R >>
+/XObject << /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4772 0 obj <<
-/Length 1568      
+4746 0 obj <<
+/Length 1566      
 /Filter /FlateDecode
 >>
 stream
-xڝWKsÛ6¾ëWpz¢f" ÀWoIœ¤ÎÄ™¶vf:ç K”ĉH:$m7ÿ¾ßbAš’™fÚ‹,‹}|û vÞ-^]/ÎÞFQŠ<•*¸ÞJJ‘åQd¹ˆs\o‚ÏáU±î˦^~¹~ïØ3‘'‰!ö(Ü’ùR¡År¥d¢Ã‹êîPTEÝ[Ü\ªp¸œá‘ËÜ=¦±NM<\Ò˜¸o®ß
-T¨‰B±Ð:XW‹Ï_d°ÁÙû@
-gÁ£ã¬g"‰IÚ!¸Zü±ÞÈY‰QdN…¥yúCaì©#íGi1¤Å)Ûð¶ÜÝ·År¥3
-wDlµŠ§÷â\è,Œ¾²Õ2ÊÂ[‹;Z‡çMeËú×åʘøôì²À6
-o—+ü-
-bÓ>ö?ö‰EnÌÿqÞéÿ(:Ê`Eè¢cE¢¿-¤HÜñðïˆÃ
-O8»¨"œ7xc.D0M˜BAñÿ ð(`Ðl5QÍEï8
-Ħ b( =á`ÜÚ5ùò«s(تpƒ`Ä2ì
-Jö{Û3¥ì™²¶5|d<ÿ޶ņ9nIàw¦ÛÁ‰j&VG\(C7†¶U@ŒaæJi۝άO”%añ°tÀøÎÛûŽÑ걤7£,
-÷–>xûèÌòÁº©»²ë‹šŽ¼¼Oç|hë
-SÞ1·ÖmÓuþ”…'a³åÿ~_Tbª)êT½ÞSfäixq~ùòw^níº<À“ì DØkKgÞ¼9¥iyaFPŠrWóæFƲ…x§)ÖMÏr½íe½c>¨9§dg+z1ÎÂ+²VÇx§cB¿÷'CèèP@´Ò3Y&WÏ’gä¡4#
-s± U3V™÷ø©À‡jbWsjº‚¼Š€
-çöX…¯®˜àÍUQw®ѱÇÉ€@Z|úxñÞµSt]PTUXt§¢šÛÞ™LÜ–I'˜™Q:fF0DJi&`0
-iDí¡ëÛ{×d:&îJ)å‡ÌÃ}Ñzn{wwøÎľa’&õ’è¬ØCÙ6u5›º}C»ÇzNçÒQÇÒ|^iäâë½½ë9Œ2Œ_пo”6—ö+#
-L¿A¹Èä^$`÷Ëœ4J¨¹GÈõ{¸còV2yë%?s^ºõ`lËÛû¾ØÌÙI)WŸ:.&iø±è	¤_Ó~=U+„Ì$¼Ø2;û‹ºp¹9Ücâ¦áÌì<OÓó‚R,ËQ\iÄÿ‡s"RÒÓ®;LŸ×´§ÊGM.š¤ô©×´š„œ.4 …{MêBƒíBƒŸz”wGJÕ,Úµ†½­w³eƒ£úÙvWô¼&«S¶»©U´ß¶MÅBœµ&“…ÂO{·YÏ
-Z‹D遭oæe‰$5Oe»®|(ÄìXÎ,8_»F¥!Ë‘ühÏÆŽ@åljÅÁÓ<¡kKâtÂãÿºš¾ž`„ÂtõÄå
-¹Ž2Sf´nªÞ ès"i©¦W¨°(è! :š/FÓ²'4$០ Ë
-U:Þ£î³ÙçÔcò0‚¤Çeíu[ØÞõÖxè0§1÷°4ëª[Ðmçbb0iGæÉPe^´uÍ×p)K©”¹íóâEÌoþ¶4ŽóMÒÕLö¸ûçõÚ[``j‹¹’Jd§14¢éÔõCm|“aS¶ønh0ŽÌø ³Y’Œ?+úõ/*÷21H§ãG†˜
-ô"·êü$#Œ]‹PC¯P£êLt#VÜ&³È<{0ÙÕ÷¹LË•ÐOéXwÝó\'H2œ#°±ù÷¯atrüùqüžN2!Q0I–†,®{7çBLÕˆý¤T8³ÓpÁ÷%øPç¸{íuS¹þz_—þ
-!¯¤>´ç
-{7J¦å>š>ê2‘Fï§FGcp{ ­1 pO;µ_ˆÂ<•3²Vx…ýɉÂói% ap¥Îå\¨ÒÜSs%B–þSÖ
-¾½ÙΠUY=¡u}¦øTò]öSèHd¨$+2ñO`à›g„ù›y6û»!¼ßó©/bÏ2ýðµ
+xڝWKoÛF¾ëW=Q@´Þ_½%q’:ˆƒ¶v€q´DIDDÒ!i»ù÷ýfgIS2Ó ½H»³³³óøæAì¼[¼º^œ½Õ:HD–H\o%¥H3Äi&¢Ì×›àsxU¬û²©—_®ß;öTdql‰]gB‚[2_"ŒX®”ŒMxQÝŠª¨û7—*.§xAd2s¬
+×u×âÍõâÛB*5Q(Æëjñù‹68{Ha²4xtœU`¢TÄI;W‹?Ò9#+–Bk{*,É’
+cOi?J‹ -J؆·åî¾-–+“¸C³Õ*šÞ‹2aÒx0ú*¯–:
+osÜ1&<oª¼¬]®¬NÏ.l“ðv¹ÂoÑÑ"6í1aÿcßÙHdÖþçþ¢u*dª“ia"E¢¿-¤ˆÝñðïˆÃ
+O8»¨´μ1"˜&T†?üêÿ¢ð(`Ðl5QÍEï8
+Ħ b’“f1ã6_“/¿:‡É€­
+7F$î¡ da¿Ï{¦”=SÖyÍÏ¿ÏÛb÷$ð;ÓóÁ‰j&VG\(C7†¶U@ŒaæJ۝܏Nã°xX:`|çí}G‚hõXÒ›:MÂ}N¼}t–óÁº©»²ë‹šŽ¼¼Oç|˜×¦¼c
+n­Û¦ëü)ÃfËÿý¾¨ÄTS›±ª×{ÊŒ,	/Î/_þÎËm¾.ð$;öÚÒ™wo`ÎÆ_iZ^ä#(E¹«ys##YŠB¼€Ó”	ë¦g¹Þö²Þ1ÔœS²Ë+z1JÃ+²ÖDx§cB¿÷'CèèP@´Ò3åL®ž%+ÎÈCIJ*æbAªf¤Rïð!7RY€Õ$_Í©é
+òJÎí‘
+?^]1Á‡«¢î\5¢c“´øôñâ/>¼k§èº ¨ª°èNE5·½3™¸s&`fFI è˜Á ¥ˆ¤€Á*¤µ‡®oï]“阸+¤”2÷Eë¹ó»»Ãw&ö
+“\Xˆ0©—DgÅʶ©«ØtÐíÚ=Ös:—Ž:–¦àóÊ _ïó»žÃ(Ãèý›ðF{™eDé7(7 ™Ü‹ì~™“F	5÷¹~wLÞŠ'o½ägÎK£Œmy{ß›9;´”rõ©ãb’„‹žðøHú5í×SµBAȌË-³³O±¨—›Ã=&nÎÌÎó4=/(Å’±¼Å•Fü8'"%=íºÃ”ñyM{ª|Ôäô$¥O½fÔ$4àt¡ñ(4ØshlœøÔ£¼#8Rª¾`Ñ®5ìóz7[6Øaª_Þ×duÂVc7µŠöÛ¶©x@ˆ²£Öd3¡0Pø	áßmÖsƒ„1"Vf`ë›yY"NìÀSå]W>bv,gš
+œ¯ÝÀ
+£ÒåH~´gcG òãÄâàižDÆIœN¸cüà_WÓ×cŒP˜®ž¸\£!×±QvÊŒÖm£QÕ }N$-ÕÀô
+Å=ä@GóÅhZö„†8ü`¹¡J'ÃûaÔ}6ûœzCFä¸¬½n‹¼w½5:ÌiLà=,ͺêV tÛ¹˜XLÚÚ>ªìÁ‹Î]óµ\Ê*enû¼xó›¿sÇù&
+éj&û-Üýózí-°° µÆÅ\I%ÒÓ˜Ñtêú¡±¾I‚°)[|74Gf|E"ŽGˆŸýú•{™¤“ñ#CÌÆz‘[Mæ£aNaìZ„z…Ug¢é°â~g¥žÌr óìÁdWßç2-SÂ<¥cÝuÏr#ÉpŽÀFöß¿f„5ññçÇñ{&Æœ‹‚I²Œõö6ùÝœ1U#ö“RáÌ:LÃMß—àC“áîI´×Måúë}]ú+„¼’úО7ì]O˽ž>ê2Ú ÷S££1¸=ÐÖP¸§ÚŒ/DaŸÊY+¼ÂþäDáù´ÒG	HØ\©ó錂Uš{j®DÈÂÒʺÂWC¢7ÛY *«'´ÎÃ@Ó'`‚o%ìO¾Ë~
+£EŠA²´~ƒß<#ÈßdȳÙß
+áýžO}{–q°èXð¢
 endstream
 endobj
-4771 0 obj <<
+4745 0 obj <<
 /Type /Page
-/Contents 4772 0 R
-/Resources 4770 0 R
+/Contents 4746 0 R
+/Resources 4744 0 R
 /MediaBox [0 0 612 792]
-/Parent 4752 0 R
-/Annots [ 4765 0 R 4766 0 R 4774 0 R 4767 0 R 4768 0 R ]
+/Parent 4726 0 R
+/Annots [ 4739 0 R 4740 0 R 4748 0 R 4741 0 R 4742 0 R ]
 >> endobj
-4759 0 obj <<
+4733 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-ByExample/images/chap9-SambaDC.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 4775 0 R
-/BBox [0 0 494 413]
+/PTEX.InfoDict 4749 0 R
+/BBox [0 0 495 419]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 4776 0 R
->>/Font << /R9 4777 0 R>>
+/R7 4750 0 R
+>>/Font << /R8 4752 0 R >>
 >>
-/Length 4778 0 R
+/Length 4753 0 R
 /Filter /FlateDecode
 >>
 stream
-xœÝ[Ë®·ÝÏWôÒY¨Í÷c[a 	l‚,Œ ®®-%3R,Éöïçœ"ÙÍî¾3Ӑ/`@Ðb.K‡Å*>êEöσõ ø¯þޝ_>‹ÃOjÌ&‡”†íï:èáÍÁh3êGµŒÏqta°>ÅÑvøqÙ Üãp>hP"a•bpΣ›q£NsÛ¡ýpG.9å1Ì´óL©½LVyT~âjÚÁNmriœ5ä4Ú£‡ ÐàÇyטóD!f;4ñ'­W³ âÖÁâñ¦^UüÊ´5Û¨d"˹ÞNáZ¹Ç}ÔÑ
-¿ÕŽÏ¾ÙÕñ¸YÆóFüS·Ž×PÇGYí㣬öñ°æ|Þ¬í©[ïk¨kõ¼ö Ž±ÃŽ±ÃŽ7Ž¸5ÉŽÖ
-Z1è8hg̘Ýòx7õ9ñÊèäFe
-?ZY¢­‡`ÁÍm§ÑÁÈNw)…Ñê‰vž)ì…™tIù1êiUMžÚrº+g!pâD$Ì£]ïè<Q²†íR`Yå‡ÚY(°š¸ßh¸Ø(MpµÁÚ©ÝÆ]ðí$®õ;=8Õ[Ôq³j獰=¯k¨ãc,îñQ÷xXs>oVòÔ­î5Ô5‰z^{PÇGÙOÇGÙO<ÎQ¥œÜ°ýƒ^ÄD?fŒÜè=Ž‡‰ytCÃ08[½uYoÇœhV,jŽÅh'Þ9ŒNÏMãÇzCÕ·Î¡t±Áà×O-¤¡ ­-´°5ÙÂ2BKoȹ˰”fŽ,˜óD€™ÒÞ½I^^O€ÛÆ®4J[¥«”&}ã:µë°KO½™¾µr§'y‹:nÖë¼vÁë
-êøû—õøËz<,Ùž×KxšWõ2äŠ(=Ÿ ã#l¡ã£l¡ãAçѤÌYLz„»î¬d¥ˆR	A^Јñöà‹EÐ:šaûvk¦?Ïq;-ƒ«H™,‚—”ë!SÑfŒx}ìbÐìS	ût†Æþ‚pV/c®4tøRJl\‚01+‚^á:'A¾þ*'`¤;Œ¯ÐŠÀ…Rƒ.gY›iÇMŠ<0]SŠÔZN3Fòe¿9G¥y<¦Ž‹Üþ_»ÑöݧvtkbkdçÖö=tÜ¥I|½þ®uïd§…úŒ”yÍÓ²]$üf·P
-¾£ÌÌÚ^·Òî•kˆ&~ã0µeŒ^AFìý™ƒ7Ü}ó¥Ý«ØMÊÆa©ÇrÍ>7ÝÚjYBMû™Ê©tfpL2<Âö4"\òÅí á|#Þ8ÞÑ;îÊóDðÎ#狨ºªØ&JÒ°50nªQ¨ é,:P!ôcpDz¡&Ê•Ôj¼FéP0Å0À)·`“×£G_ã°´àî,6¼–b$°¶á§nœ-¥õÒ6†QÏœO›±è›þØñ_ßôv:ÂXiŽ­-×Ûº$‰pbvíÃÚÝí€÷þN3^GÞŒhzà¸À·àλ>ô„Q´sé*Æd¸Ään`0=W<-R8p£Æ.ÁJÊÅ•£3
-‰ ƒ#œ&£ ™¢¸(h[†æŸ¡B”¹©í;ô8—¹C`,•:S[Æ`FÁ„åaf€lQÌ<Di³C¢!š•ÁRÉ">SÍ.pþïæ&:ŠM씄H¾“ ´{%¢©Ð8LíjÂg
-Œ|Н–ptÓ¥ÝkÙMÊÆa©Çr?7Ý–.‡ÝÅr^áI†Ûb•%ŽÊzS]àmO¾ab at G"ŸgŠGæJ:¨SŠ²—;T¥ô¨L×{T£t(£`¸µíPe‚gät¨JéQiíGœ(êºÔ°ø¼„0ÎA
-–mfKŽp@üÉlÚa5é[ça¶”ÚÉ°
-GÜøž6#Ñ	þ‘£×è=ßü‡r­¢àH·'Ø&FQA#¶”XU/.u'ñi;à½Ü·šIÁ
-a[ÇbY ,´ÐnÃ"ìÏe׊¶ ¤ÿN‹\p¢Hνuœi˜túãóܯR¤¦¸5Ï‘Up1Áô#VÊB®+¨n¾3’©h;T£ô¼®¡f‘§%DôÒëx
-us£¶VŽfÉd¦†`àÜÅ]rþà.¹ŸwIÛÖ¬óÖwœVa´¡T›n‚„eÓ±pN!KEÃ!D¢‹¼ 6•ß7ZÞ†/´ÜŸZJ–*úe_ÎØÉnÃ’íw‰HNa±¢ß;Y;à½H»àL֝bIDò —à°v¹d¨ÙL¿ùn¡—âÝFoÌš‰ÈBæl^)‹#uK則ÃVƒ¿n4°ºõçÒ!½~ðˆ^?(š°üE4,¨”}͹`mœv#ÜMøR¼ðnA*:"‡R‹Î֍^O”² ·QÇŽ†hV}ÝL^;PÇnÄ	ƒá­Ó‚×ÔíÕ`Å;”rÏ…g.Ú“Ûðåjì€oWƒ•k¿Ð§RZ_Aç‘gSïV¼n£¸²ôŽh²I=«Û ޏ $ú+Ç_¢èÅ'BñX7AÇ™dÓšs׫PŠÃ¿	êerRêï†+„¥LAL!ñj¦®P2]õ2ÁèÛÅÂR¦‹ Y&Äíc^LA¥ô2]u2±¨jB7\%,dºêdònL‹)¨”…L—A½LrŒî‡+„¥LAL,néÅp…²é2¨“ÉÂQè~
-*a!ÓeÐ,“u¼j”^¦+ ^&X
-ÝOA%,eºêdJ–&§®P2]A¦”C¨~”ËÉF°Aªó§UŒy.Õñ8–»GÃ,|kËð×Z;=WÙƒ’"CU7 ÎH„5Z©LͪoƒºjŠñª^ó…Èipè/àQ¨êk",“×3æÜQ¶"àÐ,Ô0âû©À÷H©òÔ¾;ðþÓ²C¥ÌÃ
-ƒµw³\¼£´f˜dé¦!jûî0	Q)“Œ•ÃZ‹»N3kR,v}¦8úŽÆÔ-õ¤6lkÏš5J¼2˜›e„Y3,¾4³òG7DmÏš5Ê$cå°ÖâsÖŒu›Ëºµµ=­v¨/æ¨ÄÕ-*ï\Ü¢îÊmrHUÎJ!‡(Ç`÷¡ód¯"*àÜš˜ÕB1K¬f'÷„žåS=µ1ª³žÓß ÐØ™ÁÔ.üï%óÖhhýõ¦n€Ú¾‰Ð"_íÜ‹~×tÁ žÊMl/·ž•‘å-ipÓP­=é2ª¤ƒ©]øϺ`ƒÀw7]°}$ž›¨íY—	!òÕν蟗.¯Ë£×6måNݦ³E7sÏe¿Üt²ËƒÕ¦¿›ŽAÿÔ'ÑšrêUŒÈKxùÉ|Y4(Rd¢ÛƒbܹñÁ’Z•PÒLôK¦¾“º:~>è"cý¹;_=?|ùŒ·òÈõà=‡{-^¦ç)ÃÏχ/þúôÏßýéùO4¢A>–yR:†áù«Ã{ñáãý{þ¿Q}üÐÿoë‹09(Þ™.úO/~½çÿåùáûÃR}£@íSðRû_ùy;O·ýƒà
-bºZËZ˜<G—¼Îñµšçôñv˜†NŽ#Z™Íµö¼p(ï*/Ž!¯ó£“÷oÖH†Ý-„…±AÊ÷.”z4
-¯‘
-ÿ²×izF±§muyùÚEu·|˜?•,k‰‚«w|q~ù‚s¥˜ŒOJ¿$+ðÝÓ¯ËÒÁÊòðé‘ÙQYœ¹cPøEǯJG>t
-!Úó!i×qxúîüâÍ[Ù7jÔI©Ø8p[qãÜŸ_Þ¿Ž÷ï-ûG6Áô2>9¹A⣶(÷>:a·—”eÞ)í·ì„¯ž>âS®ŸP ÀÂîéÀ‡uZfsö%ÔÉßÜÝ]C
-Vêg'
-þýþãoïÞÿwøúÝÛßüôËûß¼{;)
-'k\¹¹ZÿÁ+,§ôÈKøs¹y)îpä“?q¸?T­oc¹•²ÛŠ=ø'·Ü-ÌÕÝøÐä!BÇé‚Â1ËeòþùæíË7o_MÓ0_€bk–ï*ý¨è.Õ¨o€¦ã±}Üs†’:Âñ7𣉸0D6|âyHž­Ð²ÊkíÕe3ð)ãÀçÓ†ÕÈ—O‹Ý°ôé3‚üÏ&9lrþ1#Î/_§Àìá⋃†°@¶þÛú¿|;Û1DÚÄ¥ü¿¯Ooîß~\œžå´Ú€™²ƒ‡uF¶ØMX¦/ŸpÜ‚|ªª|fDÇ:_N×w,„€¹¬ï”1Ã.ÿPY~)oÿ(ÕJZç!E>?Ò²²QKµ¾ZÚúô9a:×ã|hˏ¨0g†eõÓbõ×Ó¥”|l€Ð$Ùœ—;øà÷,©ák,üO(Çùí‡ÿ>½zñ¿­ž§†;^.S>6Ë%½ùTQa)Êw[éÙÊêœa¹W3´GvZËüFùD‚w¿05™~Þ<ãÜòa˜ÏåîD›;$†šÁš×¥k­åã1‹P®4ó;Å…®ù׽ʣ?Eô#w†ßŒhù™™\`žÁONZ–Ñg¬Vžï-{IÇi>þµˆ#“¼¢×Îj褄ZjÞ¢vš\Ë%»æò(ìøç ¹fyj…LÆËUùºWÎʵ@V”Ã4)¦æV¾žÂJÂÃ÷?ÙJßG
-u–™yäzBî†]’ò?"2ØV;8ó͐X)C6€¶|ʇӅµc^î<æœV˜ÅyÈí¦.ðë•P:›³|˜`‚Tä£"‡<*Èš†rqãøƒ\,KsÎ9þ%o²õ8mz˜¦ù!òƒ'¡?„À,…¬`qrá”(A@¬åäöpÝK81 –ï6ƒ˜p
-Æå‚ìûÁEÌœ£SÏR‹N±RçqÊ°À⢕§À˜
-°G?å«N\JÌ¯V(??K1m&äJC³tQj®ü@À’b}YIô£ÝE?–‚\™‰E¯*¿‘ºlŸ‘
-†ü¾a¼Qe±TAž·‹Ä§u'©óÕçAÞùHÒÀÿ•ÏÅ
-e/ª+|6¸áóµX¾+‚âg±|b™¬˜‡Ó¦W?ðïå$I{¹âøí¶¿×¯†™{®{IÊûHœ^÷6ÚÐð%¼ŽõåR;Ë?ÒðµÏ¬v ú4Í‚æñ´òmHš™Êëo¹§3[0ñk_8kEÒe¯2ðãp¢ÎVL$Ëð1—Uµ¼ê§eŠ!È2rGf9ë^e<§×Ÿì-y©”±ò°ÆÄ—üãÛ§_~óíÓ’’!C°OJ_/±É³ûïN¿,2±ïÿtxâU
+xœÝ[K·¾Ï¯ècrP›ïÇ1¶Ã@Ø9A ­Ö–’)–dûïçûŠd79³3=0 졧k?«ø¨Ù?OjÖ“â_}Þw_<‹ÓOvjÎ&‡”¦óïÚmfҤ㬳·“ñ9Î.LÖ§8{@îw?. ”›cœŽ;
+J$¬R, .943nÖi}wx~º#—œòüB;®”ÚÊd•gå®&á=Øå\g
+9öhã!(:4x¸"ï)æ¸P@ˆÙNMüEë“QqkçFq‹xK«*~eÚ^[¯d"Sҏó:„§ÊØç죎nú­6|öõM
+÷gÓx<ÿÐÍã5ÔþQf{ÿ(³½ßr>žÍí¡›ïk¨kõ¼nAíc…íc…í7¶·5ÉÎrª9qœ1söãön ësâÊèäfe
+­,ÑÖC°àÖw§ÑÀÈJw)…Ùê…v\)l…‘tIù9ê¥U˜M^ÞewWÎ:Cà”1	ãhO¶÷	è¸P²†ír¬Êµ³
+PàdDàÚ}£Qà"`£4ÀÕk—÷Öï°ÁÏñT¿ÃƒC}ŽÚŸÍÚñLØž×5Ôþ1&wÿ(“»ßr>žÍä¡›Ýk¨kõ¼nAíe=íe=q;G•2ìÈùzýœÑGp³÷0&æÙA
+ÃàlõÖ
+d½s¢Y1°¨øÕ(F;8yt;Áçúnü\7b¨Ò±#”66<ýÂÓBŠÐÞÅ…V¾&[Gð÷6Ì ciÖàbW
+l•6pñMüªõé(ˆ¼­ûJ£ÀUÀJi
+4®Ë{íwt×gcxªßáÁ‘>GíÏ&íx&ìÀë
+jÿs»Œ¹ÝïNøÏæñÐÍíÐqzN7€ö²”ö²”ö;g“2Ç2é9ÛÞdVŠ¨•ñaGüv¾˜­£™Î`Õfà ž¦‹vÙÄ)Y„1É×½¦ÐÍènºïBÑìS‰þt†/Æ
+ƒXÆ/c”4´øRˆMlÜ)hFÆm !
+”î*'Øad<³ð4G
+¤&]v³66Óœ›¹eºW=+XOc-=qma‰ÙIåõxŒ§·ý_»ÙöÍ—÷$èöŠE%×Ö0ó¡ã.¯Ä·Þëÿ›p­y';mÔg¤Ìkî“óIÂ3»A5ønÚ…9‚AÛëVÞ{墉ß8,ïÒG¯ 3Î…ƒ78×>Ê{¯bC4)‡QqÎ>7ÝÚj™BM˙ʮtfrÌ!•CÔTmÐ
+ ìo„ýÁ(̳ã²<®ï<’±†Z¡±Šj¡ô(
+kƒ¢C5Ê€
+öP!ôc°IBj”•ÔIÒ¡`‰s*Oç?0’ÉëÙ£­q˜\Å`²lx+ÅH 7߇Žÿ9¥µÐ68§…ãá¬ú£?¦ß×›žMG˜'ÍqÖ–ókR­§Ä´Ú‡Sïv¼÷pšz’0z`ƒÀ›àw‡už
+zÁ(Z¶tc2œ`rÏU ÷‡TܬÅ®I*º6£0°I1ÂM2äY)Jü§ŠV„¡ÁçD¨g—÷;´؉¹C /•:Ë»ôÁ‚ËÓÊ iÒ¬µ‹òÎMˆ†hBV£’<|¦š
+NoýwsÅÎÊVþ0ûÉw”÷^Ɇh*4Ë{5Ú+ÅI>¶r€ÙW½–å½×²!š”Ã¨Ç8Ÿ›n£Óãfw±ìWüÛiø)–W⬬6Õémƒ¸ó
+“ :éø¸R</WR@R”µÜ¡*¥GeºšØ£¥Cím‡Z(
+žС*¥Gi¤0¶ïq¡t¨ënOÃâóôÁ8)X¯Y-9ü¿§ëìl;Ì&)k?ç”ÖÊ° ×Û8Îú¢ûûcû/nîÑz¿õ‡r­œàL—(ø&ÆN™¡¼nšu®^5'qkÛèÞ	Þ‚¶zI©Ú N´Že²0AR¨ Ï؆Ü_®m
+B>Iö
+éßB‘ûÔ~¥aÄ鐏k»J‘jâ
+¨uŒ¬‚	¦ï±R¹® ºñÎÈŸ¢íPÒóº†ZuDj–ntÒ7J¯ã5Ôæ*m-Ìí’
+3#,%ØYwq•\†?¸J®Á×UÒV5‹:†Å§U˜íB(Å¥M°l:Î)d)b8„#¦‘•1ÛªÏS-·áƒ–·ÀWFÉ2cE?¶åˆ]l>Hv¼HDr
+“ý­ƒu¼é&øƒ5G§XZ‘=Ð…Ê™ˆä¤yÍMÏÄÛ Âm‚Ïlš‰È‚œD´Ñ®”a¿_Amé»ðpXgðÖÁÍ&£e{^Ú£—áîÑkðô1iSÄœJ!Ñ×¼VÑ^^ÄÛðQÀàÝ´TtD¤úœ­£co”2-Û¨}GCD«
+Šîn¥¯Pû®Çƒá‘ÓÀëÔöl°ÂJ;iÅdæ²­ÛDs±>Ÿ
+«ý L¥*_Aí׎WsïNxm£8­ôŽh±I=«mC rpFZ9>‰¢_Åcm‚ö+Éæ5Ç®U¡‡¿	êerRÝïº+„Q¦‹ N¦æ‡î
+eé2¨—	FßCP£LA«LˆÚç<A¥ô2]u2™’ž®ÝU ÓeP'“ws† R™.ƒz™äÝwW£LAL¬nCP(ƒL—AL~B‡®»JdºZe²Ž‡ì}w•ÒËtÔËK¡û!¨„Q¦‹ N¦dirúî
+eé22¥˜|!@õ³œD6‚
+R?œÄ˜›p)‡Ç¹4Þ`¥[[ÎŒµv¹¨rJªiV]‡:#âM,©LI)n uåãU=Ù‘ÃàБ„c@¡bñ4–‰§|
+sì(ÈZohVjñæ”ܼ˜y㢽ßíxæiÙ RÖn…Á©w«\<–´fZdé–.êûÝn¢R+‡S-î:ͬI±Øõ•‚QL«jÖh©(µ~ÛûªZ£4ɇõ½ô±ê†		Œò£ë£¾¯º5Ê"eåpªÇç­7—µkó{8Y¥n
+<£W—©Ür}p™º+ë´É!¥9[j9 at 9F»eOÙ²©t+Û$åı½BbÖÅ6‰`NÎ=‹¨zyG·Îz†6
+À],ï…ÿÝn¡džM­=ã^Öb[õø&BCˆ|µq/ú]Ó#€ *7]°D¼œvVF–§£aíª½/º,€*éÂ`y/üW]°Bl)òÖKT·ôPßWe„ØZ÷ÂnÚ¼.÷^Ïôi³wèžÕE=¿¹ð²Wž¬õÊádíß-»¡Ipèó‹hMÙü*Fd(< eÞ…œ©7ѥ݂bEÜÂÏñº:’²"—PÒ͸L· ö»ŸwºÈXwÇéËç»/ž±@‹Ì±ÞsxÚ‚àQzN‘âq>Ìôü¸ûÓßžþå»??ÿÏî‰F`È«2O¤ažž¿ÚýéÛ>޿翍Êh¦îŸ­%âeŸ#Yßrxñë=ÿû×ç»ïw?HŽÒ´‹MMºKïÿ‚À¯ÈÚyÚ¹ó¼o‹ÐåZÖÄäBºäwŽÕ<ÇŽÇÄ4vru<›ÎdkÏ“‡r³òbr??:¹úf¤ÙÝ,XØÉ^Œq¡Ô¥i|ÔùÇV‡å!Ä^ÖÔå¹k'ÖÝÜaüT²rà€Õ eîö/Ž/_py!
+)ùôDrf1ß=ýªÌ,-wŸÆ¶‹å_]à2’é¡á—¥!ﺆ'íy—4­
+§§ïŽ/Þ¼•U£f”Šƒ-°oï/ïßOûû÷¿–å#«`¹Ÿœœ%ñ*[” 
+Íæ’»¬K¥=ËR¸¡ñÕÝÀ«{pÒ݈‚Ýlaùt A(#Š1ûê‹äoîî?ˆŽ.ρëšG5Ù‰‚¿ÿøÛ»÷ÿ¾z÷öÇ7?ýòþÅÇ7ïÞ.ŠÂÓbIÈÖéf9¥gž^À©C¡€Á9ÜœyÑOœîUëm,°R6c½B±rÍma®.LJ¡:¶ßöÌ,ïŸoÞ¾|óöÕ2ëQ(Æly›ÒóÖEÑÂŽ/Ûc¼¿e=$s„;âAnàWi06¼'â–ø\_¡U•ëÚ'?ÊRà%Ɖ×´ÕÌêïØÏ6èÓGi ¨Àk’eD>_¾*IíôÄb›Á)ÊÂ[ÿËû²°d±-6ÿ«Ã›û·‡½3«
+);yg$Ý€É
+‰ò
+ÇäSUåu#º7–ûxkþê‚…°–®Ü*Æ?¸Go •ù—råùRµÄÔ†)Å$á<§–Ù,?#À¬×~¶AŸ>(Lixmœ í0ÿ3&¸Î¾fÿt´”’¯
+– EÈùt ®ýÿ÷L¨á,ü^Š¢¿ýðá߇W/þw.¢çžÑA#/`ðHg7H¹	ùTAa%tæwmÙ9—Ô9ʯfT¡ÊÇuÁòŒÏÈsßÌã_˜™LÒ”±gy9Ìgž”/Ç´C^¨ùý‡×õž‚Z¾³Èÿä¨A3»SœsÄ(å*ÞI«ráې·ËÀ=©,‘,¿1C2
+qäè3'-Cã3ãT+7øÆFRåqš7~-âÇ$a½vV˧füÈ­›o Q9Í'Ê­å˜]sv–s$¶2Kt$ƇPÔZ•î¬½dE7Œ’b:aai£œ‹b%Ùá \Fih$µ:ËÄ<M< 0¥pï’ ƒa“CÌ̃öÄj3kïäC>ì,LPç1è4Á,ÐCrç0x4¨ÄÉp6gùÁ LQeš±V¬|ïg}('7Ž·1,¿ö`yŽâ:Ç_r;•bÚi«¢S4?E~Áà$ªâ—§¬M.œ%³œ"ž¶N~å«MÄÂòÑ¢Æå‚,üÉEüIàÙ_à«b©†÷ã”e‰$7€1`vÊW8™¯P~~bÚH8ù&ƒ¥‹RwåwpšùŸ|‹v´¹hÇZ+#1´ªò©ûÀî•â;bB~ÖÀÞ¨2€˜ª ·Úa-ë¡‘T‚ym‡ã 7}$mãY笔[Q]ñ³ÁÜa“깇™’¯ò|a™¬Ø‡ÃY«¾ãßËIòõ&rÅñ£#,¯;^
+³¶<m%¹î#qzÝiC[Àð:ÖÛHë,3û(–¯VÉo@õehÚÍíiåc ‘43”+ßrVg,–`â·¾ðÖŠ¤c«Òñãp¢ÎVl6$Kñ1—Yµ<ñ§iŠb­cä&ސÌeRÇFey<
+£×Ÿì,y¬”1ï°ˆ¥Š[ÿÇ7O¿øú›§%CnÎ<êIië%,yvÿáÝá—!û~÷vëàô
 endstream
 endobj
-4775 0 obj
+4749 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110929)
-/ModDate (D:20080610110929)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090505-05'00')
+/ModDate (D:20080528090505-05'00')
 >>
 endobj
-4776 0 obj
+4750 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-4777 0 obj
+4752 0 obj
 <<
-/BaseFont /AWUQXT#2BAlbanyAMT
-/FontDescriptor 4779 0 R
 /Type /Font
 /FirstChar 32
 /LastChar 119
-/Widths [ 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 600 600 0 0 600 0 600 0 0 600 600 600 0 600 0 600 600 0 600 0 600 0 0 0 0 0 0 0 600 0 600 600 600 600 600 600 600 0 600 0 600 600 600 600 600 600 0 600 600 600 600 600 600]
-/Encoding /WinAnsiEncoding
+/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 667 722 722 0 0 778 0 278 0 0 556 833 722 0 667 0 722 667 0 722 0 944 0 0 0 0 0 0 0 556 0 556 556 500 556 556 278 556 0 222 0 500 222 833 556 556 556 0 333 500 278 556 500 722]
 /Subtype /Type1
+/FontDescriptor 2063 0 R
+/BaseFont 2067 0 R
+/Encoding 4751 0 R
 >>
 endobj
-4778 0 obj
-3979
+4753 0 obj
+3982
 endobj
-4779 0 obj
-<<
-/Type /FontDescriptor
-/FontName /AWUQXT#2BAlbanyAMT
-/FontBBox [ -12 -186 612 667]
-/Flags 5
-/Ascent 667
-/CapHeight 667
-/Descent -186
-/ItalicAngle 0
-/StemV 91
-/AvgWidth 600
-/MaxWidth 600
-/MissingWidth 600
-/CharSet (/L/A/n/c/M/B/o/d/N/C/p/e/D/underscore/slash/f/P/r/g/s/R/G/t/i/S/u/I/v/k/U/w/l/a/m/b/W/space)
-/FontFile3 4780 0 R
->>
-endobj
-4780 0 obj
-<<
-/Subtype /Type1C
-/Filter /FlateDecode
-/Length 4781 0 R
->>
-stream
-xœ}W{\Wžd&uè.š¡TD«¢­¼QËKÄÒÒò©¼¢y	Z_$$
-Ág-Zס**õI郭©µµº-®­.ÛÅîvÏtov{'“îowÿÉ/÷ν÷œóï;÷\!q"D"‘sXAVf‘*,.Yòž"~²?E\ƒâyþ—@é"4¸hÜNWë*f]%&Oøiüy"rƒÍ±HT¾k_Dq‰jC~ÞÚ2/¿”¤Uþ3fÌ´ÏÌY¸p¡W–jì‹Wdni~^‘×4ügcnAqIanQÙ"¯¼º  ?Û+¯@U²¶Ô+3''7GØ–šY»Î+:¿ ¿¤¤x£—_„¿×ÜÙ³çàŸ¹ñù…YÊR¯¸â¢b¯X¯¤Ü<eAæ†_M156¬(;.¼8'>¢$7rM↼Ҥ˜²ü•Êe×¥l*È,ÌZåõF AÞDIÌ"^ ‰("ð!VÑÄT"†˜C¬$–ÉDáG¤ˉ`"•˜N¬"b‰‰4"Ž'â‰b!"B‰	Ä4Œ+!Á›?%Š>t
-w:ï„ÄëÅ’XÉésÒMÒGäRò}ê%ê_²Šg¨g²Ÿ¹ì\ê|ËeŠ‹ÊÕÉ5Çõ“qÎãöŽŸ=ÞäF¹9»yº-ã‡ÇóÃ,Ç+9„tAÛi1äðfùd‹NklVkUJ!UušªêFMsÛ¢\"Œª«„¯“¦z}u•¦¶B‚Qe=|98ljt‹`˜…DùUä+uØ
-³I³NÛlTkË™5$ZÍ›¥èMR¥ÆvtÂgWÅX”ÒRU‹wè…©dK#ÞQ‡]ZL^_)ìå䨆ÎI÷‘6ËC\	7	&qp¤Ëƒþñóä¡Â±ÕU±íh(ƒ,·ù`fÀÃîC4'8½a¿AFŸ=ôN›¾Óów¬Ys¨üèFã¶P†Ø|ÊîŠi²¹RÁ䃖¼u=(.oSì
-vb3;`öâ>çAwòoñ®òÌŽÔÖxV†~;c&z=û(<úû[;z˜wÌû[X£¬±¶±N½}GZ‘–þJi^é´ä‹¿øö 8ÝÈLÝÃÐ7*v5hš=›´f†î|HÑ7Z45
-º³RS§bž¦p€ãÝp¿‚—ä0~–6Z”¡ ûÛ!Ìç•G„‘±Yù‘( 90"õ ¯ªâ<bQæ“å6ðÌÖÝzëîr&ŒWêHB?Km°ã s1&yßɉñyŠCêzɇƒ7îÿþÍóó3½Çv²e÷Â>ž®@»±Ë$‡r吨[W3VÄÅ¿ñ"ƒ|Ñ9lªmל(ïÜx0Í“Å­\iƒšYcvÆ&/ñr4iª/rCŸø&Á“a<<ëûgô,“%ùÛ7!/øÍññ™÷ÉÈý»?1Öý8x¤õ@ë¤î.àOgÃxºšWñ#ò ;n—Q-ùê@Ò{Kpf\¦c݃܆§ËíÞŽÏ»tÕÜÇÔSdéêdÃùȝ¼ÒwQˆ¿ïKØꝻ?*žfê'npb~»;on§žæùô´ff-Ù$ºÎï”>OVØ@21—…Œ8æÓdxš‘l®[vJm¸h9ÑÇøø
-üùkg/c—²	ë3Ò3_/Žbãe(ä	nÈ
-&Òw¸û‚âèá&«—êtµê­ÛÕõŠ”WÒÖGãh}ŸÀ8æ&.ñƒ»©ñ»;77¨¬¬Y«71 ¡LšQýcÃ(¾fqpG!Ç
-¬Á™B„L)x¤®®Ö«ñ)˜„:£±N§büa7Ù½ìJá—¬&<ú\ú.¸<DBÓJ¢S}Eþäv˜à¢P¿Å_<~üÕà¶4B8Ó9¿Òåì¹í­•'ÖÞ[Ô3ð¬o ÜÿîžÁõ|»¾N_W¿mûV
-“½.\Ç"‚]ôYÕÏ2Nbþáæµav˜LÜ?[f¯‰˜ÒßÙí|1	î# oæ
-ÞÓ@‚ܨØ^'ÛI΢”óJxºÌvVv¬å²'°©²pÊ;Èo¦b¬V‰`
->{.n—&Jï#/žíè?ÀmÛ~Tq¾žew±²&ŒRc½®zSЭÍees^I
-g⃩§åì;4äï Ö¯I“~´¸¡ÄÑê˜ÄÁn[Lß`»a³“@
-þðhþMo½ë G‹ÒQÁU¤¹q”iHAÂf	ì†8êNÿʘ舤`f, \|#pÖo@Î:’	‰®±¦ý44Ã:²¥ý3Ì\¡y‹®‚AÑ°ž¤;GÀé졳žÙÖ-‡Ë´šÝÛ„ õM8èŠffý¥¾ˆMc‹g-ýÓ>æàX¹ã0Ùø8øNNßímÕñpO$	@2D=š’KÇû»$§b’Sbè²¢3°Qp…"{Ø“¦ŽÎ¶Æã,'Çø]¦èÇOÓ@ÒwÑK%òǃ˜zKBg„aê
->­ 0a¢•ð›ÎBG·mà#y¹|íñŒ}I¬ŒŽöO_¾®¥è˜Š9VqL3¨¹ª9ª9Zu´Ò´-“цÔå9Á/FužSh):ºI­ÇE}¹ 'f—kÕÍ
-z‡Q«33ªkÍ…Š~,éý«_¾·©½à ³î@®!AÔX¿KiÄgm4n1™~ÛuõÄàí
-ßØ« ½7ïÒª›<Z}C>§ho|mT+hCM¶`ËÚ*Fk÷i{äðy{í™ä!4OvÍNËBr!<_|2öÌ÷'ºÏ³ŸÊþ°à&®à;ÿ'e^¶o
-%a* €ø,%ayHšÿ¨nc98%T*Þå´«7W¾OàÙ¾&+ÏR=ÕTZÇ édòú<õ*¬iŸ {0™¹E±½Ç>=súTçÓuvˆÈÚ›&«h¨3ô-Š‡”y›®²²×¥**ãdrË2v9›X–‘™öZa!£ÐÜŸ§Â‚¾ß·´_½¶ÿŠQìÃjL]p¡Ìõ£ —0»ÊÑA2´/ý‡? yê]½ÚP»õííÛ4Š¬Ò¨Š•¬,:ó½Z¡Ø~ŒIã/à$‚Xv·e9 匆P°Cqù—M¹ÖR0ÌàïÉk4j“Da64)ŽV6\£Z4ºjÅ(C fs“¾çTgàúÚ›_Á7Ëi—™Ñ’èé½8&8³%§½ŒiSž¬ù¼æfuký‘Êc¦uìZYXTÊ,̹ÙlXÏÛý;öãÃʪÕuX˜Rª\§njÆæïR´!ë-½á	®ßÞî);“{˜)0ë^6ÆéKµ%¦RSeÛ&û´ïâ7wú2öX¹× 1zt-ÌO”Ð&ZÑ»w‡p©Àœ{§+ó‰]Æ¿â~ÛÞTÑåù¼+®¨7“ôÙ„•	…K=Ó²¹\™iïÇ.㯋/­úºÿÃc—¯Ú¯ØQ´Ír`V	7,fÕ€ý6Æ¢DŒýj‚{‡ƒç…ƒ p¢6È9d‰á;„ð®ÒÓÅp†=qŸ‘¸_’n"‘?I?µ7—Ž‹8[\¥c¬€IBï¿é‚	‹¦@¼mX*?w
-bP”´„¤ÿa÷ÏÃæ_-fF‰²áMÜäyH»IÚb·ån·uDa¸íæ]0Vcs—,æTûŠÇ¤­]¨çD#¶†dÆ«ÝÚüïÓ4”²S©ë+1\ûq	H΍Š
-šýù<üUÛ¢ªÃ«¬W^…$߁ÄCC Q8À¸ÖÀB1ç~£Ø•“Ý¥‹d4º5tÒ4rÒEÀ-éÿ}¡™¼ì!€á!2Øåw`8Ç?"Ȭ¶ƒçl1ÿ™Ñ2’ƒç¸IôrYB3XÁÏwÿ“3+“¡•¼óÁ¬5Ë«TÉŠ-[ëëÙ-²Z]aמ;÷(î:¦=ÉÊn]|ëU&’JÜWÐð:.Yç%3ô…%¯úáfïÑk}Š³’¥±©B«ÑÞóÉÍ÷ÿ~æ|}íIÆá3p^>="ü#\¨\6Âì÷;~Ê<íÍMÖ‰a”ùØAš»vêÄ‘ÏöãùÙº1èНvßOõ¶Â^v+—¡Ѐã‚ßåCÙûÚ…Yom\£Pž_wèM6“-Rå§Ëþ³i7 ¿´z`†{¦CËLÒÕsŠwtOd÷‡ùž0nx&„™ÃÈ-,y]äj¢?’ÿåːü-œî·ø›‘‘¯îZ;;ö ÿ|ë}N´Ò!ÒÅàæÞG‚Œ÷±Å+ì#üllµ¿bÐTáif¾%“,%HÄO–Æa:Z&¯äK¤÷Ê€½Yk’/ô/Šx>TþOÉê_$¿ñ—qòݺ]»Ù½2}­®¶NóvU½}ýÏØmš[Ùm¿©Åí¤~ï^£V1~S+?¯«¹µ•|ß™syßÕ•sGÿ;Î);
-endstream
-endobj
-4781 0 obj
-3333
-endobj
-4765 0 obj <<
+4751 0 obj <<
+/Type /Encoding
+/Differences [32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]
+>> endobj
+4739 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [140.07 255.779 308.443 267.469]
+/Rect [140.07 253.979 308.443 265.669]
 /Subtype /Link
 /A << /S /GoTo /D (happy) >>
 >> endobj
-4766 0 obj <<
+4740 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [331.649 255.779 460.543 267.469]
+/Rect [331.649 253.979 460.543 265.669]
 /Subtype /Link
 /A << /S /GoTo /D (2000users) >>
 >> endobj
-4774 0 obj <<
+4748 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [127.168 244.351 226.584 253.92]
+/Rect [127.168 242.551 226.584 252.12]
 /Subtype /Link
 /A << /S /GoTo /D (2000users) >>
 >> endobj
-4767 0 obj <<
+4741 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [183.613 228.075 351.158 240.976]
+/Rect [183.613 226.275 351.158 239.176]
 /Subtype /Link
 /A << /S /GoTo /D (happy) >>
 >> endobj
-4768 0 obj <<
+4742 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [330.94 180.179 400.129 191.868]
+/Rect [330.94 179.279 400.129 190.968]
 /Subtype /Link
 /A << /S /GoTo /D (ch9-sdmsdc) >>
 >> endobj
-4773 0 obj <<
-/D [4771 0 R /XYZ 100.892 685.529 null]
+4747 0 obj <<
+/D [4745 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1797 0 obj <<
-/D [4771 0 R /XYZ 100.892 660.623 null]
+/D [4745 0 R /XYZ 100.892 660.623 null]
 >> endobj
-4764 0 obj <<
-/D [4771 0 R /XYZ 100.892 643.753 null]
+4738 0 obj <<
+/D [4745 0 R /XYZ 100.892 643.753 null]
 >> endobj
-4770 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F33 3578 0 R /F11 2494 0 R /F54 1912 0 R >>
-/XObject << /Im20 4759 0 R >>
+4744 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F33 3567 0 R /F11 2489 0 R /F54 1912 0 R >>
+/XObject << /Im20 4733 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4786 0 obj <<
+4758 0 obj <<
 /Length 1625      
 /Filter /FlateDecode
 >>
@@ -25938,36 +25216,36 @@
 LW«h¹*¦›!*mX§‰+²\s ZþHds©äæÈHõY¶E£„VD[º+D nœ­¥Zöö9ýg9×ÐwD™XÊ·¶9"ÛRþ ´c#ÍA2çøύ!¦Ô2ÝÈÆ…ðZî¸Ú`!ª?k[ÕÖ«è{¢ÌgY–Ìò­‘„±wcly9–Ò²ÃßJµc²HkG”Y¢ø­4KÅz[¦–‚€ÿÚÞ;†œMã’³pNFÈ%'Ì}´zÕ?ÕßÝÜ÷§½Íñr…—~ªE¦ZÑÏpœ jÕ™›KŠý¥Ž^ê':8[éP†ˆð^Þ3ÁW@ßÌðc æë`à诅ÒÆ%äì—qEÕÅénÿl¡÷w	@ýB¨ÿÞ°#<˜Ý†´¬í‡m ,/†ëÅ~#Ã@°æÔê]GæV;ÐâWËOÀ\„ê^hþâ¤ý§Î,”ŸADÑ0åÞØO0Xñ«bèÞ‚Ï‚É„I
 endstream
 endobj
-4785 0 obj <<
+4757 0 obj <<
 /Type /Page
-/Contents 4786 0 R
-/Resources 4784 0 R
+/Contents 4758 0 R
+/Resources 4756 0 R
 /MediaBox [0 0 612 792]
-/Parent 4752 0 R
-/Annots [ 4769 0 R 4783 0 R ]
+/Parent 4726 0 R
+/Annots [ 4743 0 R 4755 0 R ]
 >> endobj
-4769 0 obj <<
+4743 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [270.966 551.702 340.43 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (ch9-sdmlcnf) >>
 >> endobj
-4783 0 obj <<
+4755 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.25 427.049 274.97 438.739]
 /Subtype /Link
 /A << /S /GoTo /D (ch9-sdmnss) >>
 >> endobj
-4787 0 obj <<
-/D [4785 0 R /XYZ 151.701 685.529 null]
+4759 0 obj <<
+/D [4757 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4784 0 obj <<
+4756 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4793 0 obj <<
+4765 0 obj <<
 /Length 1551      
 /Filter /FlateDecode
 >>
@@ -25982,29 +25260,29 @@
 ´ûá1Ú¥™h´HL"GøâÕÍÑääõíl+‚ŸË¿ÃÇòÕ
 endstream
 endobj
-4792 0 obj <<
+4764 0 obj <<
 /Type /Page
-/Contents 4793 0 R
-/Resources 4791 0 R
+/Contents 4765 0 R
+/Resources 4763 0 R
 /MediaBox [0 0 612 792]
-/Parent 4752 0 R
-/Annots [ 4790 0 R ]
+/Parent 4726 0 R
+/Annots [ 4762 0 R ]
 >> endobj
-4790 0 obj <<
+4762 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.785 131.071 453.27 143.972]
 /Subtype /Link
 /A << /S /GoTo /D (ch9-ldifadd) >>
 >> endobj
-4794 0 obj <<
-/D [4792 0 R /XYZ 100.892 685.529 null]
+4766 0 obj <<
+/D [4764 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4791 0 obj <<
+4763 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4798 0 obj <<
+4770 0 obj <<
 /Length 1616      
 /Filter /FlateDecode
 >>
@@ -26022,21 +25300,21 @@
 Q}ï)ÜTxv~9??ÃðWͬ¿Óàü ÿ ”Z˜Xœ¿0F¯…þBVe’÷%žb‰£7#ÜV at d_r»Ét+ÚŠîd­Î‡Þ¡m?ôRe¡ÑÃ'ÄÚØ“Áwna¿GÌ|`lGÊ°yBŽ@[¶z릵ãã߸ճ÷9ˆ
 endstream
 endobj
-4797 0 obj <<
+4769 0 obj <<
 /Type /Page
-/Contents 4798 0 R
-/Resources 4796 0 R
+/Contents 4770 0 R
+/Resources 4768 0 R
 /MediaBox [0 0 612 792]
-/Parent 4800 0 R
+/Parent 4772 0 R
 >> endobj
-4799 0 obj <<
-/D [4797 0 R /XYZ 151.701 685.529 null]
+4771 0 obj <<
+/D [4769 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4796 0 obj <<
+4768 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R /F54 1912 0 R /F60 1917 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4803 0 obj <<
+4775 0 obj <<
 /Length 1281      
 /Filter /FlateDecode
 >>
@@ -26052,21 +25330,21 @@
 ¹®;ÍS‹—üT“‘ß)ÛÉ{úàùÁ*T²‘‹9ñÈ¢”ÛÏ<,æ‚ϸ<Y×$5%Œ¢å£‘`œtÌçð¾ÔÿÕ0/
 endstream
 endobj
-4802 0 obj <<
+4774 0 obj <<
 /Type /Page
-/Contents 4803 0 R
-/Resources 4801 0 R
+/Contents 4775 0 R
+/Resources 4773 0 R
 /MediaBox [0 0 612 792]
-/Parent 4800 0 R
+/Parent 4772 0 R
 >> endobj
-4804 0 obj <<
-/D [4802 0 R /XYZ 100.892 685.529 null]
+4776 0 obj <<
+/D [4774 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4801 0 obj <<
+4773 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4807 0 obj <<
+4779 0 obj <<
 /Length 915       
 /Filter /FlateDecode
 >>
@@ -26081,27 +25359,27 @@
 ®GÜÎxÏèÆËŸ¡ž[êƒâq˜Ú4ga½ÂOËRkà.ç`üüàçt òŒÆ³–žOù÷!›W–䫧Ùýþ_KrpÔ•hqæ¥56Dݧ™nñ7t3¤C›j¤âC#ýXÊÅ#Öß<â§~ï°ü#0
 endstream
 endobj
-4806 0 obj <<
+4778 0 obj <<
 /Type /Page
-/Contents 4807 0 R
-/Resources 4805 0 R
+/Contents 4779 0 R
+/Resources 4777 0 R
 /MediaBox [0 0 612 792]
-/Parent 4800 0 R
+/Parent 4772 0 R
 >> endobj
-4808 0 obj <<
-/D [4806 0 R /XYZ 151.701 685.529 null]
+4780 0 obj <<
+/D [4778 0 R /XYZ 151.701 685.529 null]
 >> endobj
 538 0 obj <<
-/D [4806 0 R /XYZ 151.701 660.623 null]
+/D [4778 0 R /XYZ 151.701 660.623 null]
 >> endobj
-4809 0 obj <<
-/D [4806 0 R /XYZ 151.701 628.154 null]
+4781 0 obj <<
+/D [4778 0 R /XYZ 151.701 628.154 null]
 >> endobj
-4805 0 obj <<
+4777 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F17 1131 0 R /F15 1133 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4814 0 obj <<
+4786 0 obj <<
 /Length 2002      
 /Filter /FlateDecode
 >>
@@ -26125,46 +25403,46 @@
 ÿ±5ž
 endstream
 endobj
-4813 0 obj <<
+4785 0 obj <<
 /Type /Page
-/Contents 4814 0 R
-/Resources 4812 0 R
+/Contents 4786 0 R
+/Resources 4784 0 R
 /MediaBox [0 0 612 792]
-/Parent 4800 0 R
-/Annots [ 4810 0 R 4811 0 R ]
+/Parent 4772 0 R
+/Annots [ 4782 0 R 4783 0 R ]
 >> endobj
-4810 0 obj <<
+4782 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [319.774 177.355 389.494 189.045]
 /Subtype /Link
 /A << /S /GoTo /D (ch0-NT4DSDM) >>
 >> endobj
-4811 0 obj <<
+4783 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [194.441 140.967 264.161 152.656]
 /Subtype /Link
 /A << /S /GoTo /D (ch9-sdmnss) >>
 >> endobj
-4815 0 obj <<
-/D [4813 0 R /XYZ 100.892 685.529 null]
+4787 0 obj <<
+/D [4785 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4816 0 obj <<
-/D [4813 0 R /XYZ 100.892 214.74 null]
+4788 0 obj <<
+/D [4785 0 R /XYZ 100.892 214.74 null]
 >> endobj
-4817 0 obj <<
-/D [4813 0 R /XYZ 100.892 178.351 null]
+4789 0 obj <<
+/D [4785 0 R /XYZ 100.892 178.351 null]
 >> endobj
-4818 0 obj <<
-/D [4813 0 R /XYZ 100.892 141.963 null]
+4790 0 obj <<
+/D [4785 0 R /XYZ 100.892 141.963 null]
 >> endobj
-4812 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F89 2333 0 R /F73 2334 0 R /F17 1131 0 R /F59 1905 0 R /F15 1133 0 R >>
-/XObject << /Im3 2328 0 R >>
+4784 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F89 2330 0 R /F73 2331 0 R /F17 1131 0 R /F59 1905 0 R /F15 1133 0 R >>
+/XObject << /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4822 0 obj <<
+4794 0 obj <<
 /Length 817       
 /Filter /FlateDecode
 >>
@@ -26175,27 +25453,27 @@
 Ç'|ü£¨:
 endstream
 endobj
-4821 0 obj <<
+4793 0 obj <<
 /Type /Page
-/Contents 4822 0 R
-/Resources 4820 0 R
+/Contents 4794 0 R
+/Resources 4792 0 R
 /MediaBox [0 0 612 792]
-/Parent 4800 0 R
+/Parent 4772 0 R
 >> endobj
-4823 0 obj <<
-/D [4821 0 R /XYZ 151.701 685.529 null]
+4795 0 obj <<
+/D [4793 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4824 0 obj <<
-/D [4821 0 R /XYZ 151.701 559.473 null]
+4796 0 obj <<
+/D [4793 0 R /XYZ 151.701 559.473 null]
 >> endobj
-4825 0 obj <<
-/D [4821 0 R /XYZ 151.701 158.505 null]
+4797 0 obj <<
+/D [4793 0 R /XYZ 151.701 158.505 null]
 >> endobj
-4820 0 obj <<
+4792 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4828 0 obj <<
+4800 0 obj <<
 /Length 837       
 /Filter /FlateDecode
 >>
@@ -26209,21 +25487,21 @@
 Öª(BöTHC¢˜„¸CØ[okMI<'·ŠP/õ^‹	ôý ëmM¹‚‰¨ÆvÅ‹ G½ÎSÑŽaÎ]AìâÝí³K;Û׺ÛÍØÊÿ¯}½jOMßÌvZÜlXëFü&ZÓ·£!Äl·jÏî0ñ4¬GaˆÃñk¬káìU›í•š¿`ÿÒ¨.ñl÷‚š›<d3³Ë-oÚ¦oz{øMò}ëú`²|Óû"¯X•ð¦o*#'»wþ|õiÓôe_ÿfuÿGÝ(»þ Z¥d
 endstream
 endobj
-4827 0 obj <<
+4799 0 obj <<
 /Type /Page
-/Contents 4828 0 R
-/Resources 4826 0 R
+/Contents 4800 0 R
+/Resources 4798 0 R
 /MediaBox [0 0 612 792]
-/Parent 4800 0 R
+/Parent 4772 0 R
 >> endobj
-4829 0 obj <<
-/D [4827 0 R /XYZ 100.892 685.529 null]
+4801 0 obj <<
+/D [4799 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4826 0 obj <<
+4798 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4833 0 obj <<
+4805 0 obj <<
 /Length 1540      
 /Filter /FlateDecode
 >>
@@ -26239,50 +25517,50 @@
 î—ÿóßAúŠq–Oçf-í¸„g¹”&LáRE“ú³%“ÈbxúildPŠ@Æê»Ñ‘)ؼèë­5ú,Öa Oq]– VŠ/J þ×€úÇ?€ßüúâú?x÷´
 endstream
 endobj
-4832 0 obj <<
+4804 0 obj <<
 /Type /Page
-/Contents 4833 0 R
-/Resources 4831 0 R
+/Contents 4805 0 R
+/Resources 4803 0 R
 /MediaBox [0 0 612 792]
-/Parent 4841 0 R
-/Annots [ 4830 0 R ]
+/Parent 4813 0 R
+/Annots [ 4802 0 R ]
 >> endobj
-4830 0 obj <<
+4802 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [370.584 320.904 440.304 332.593]
 /Subtype /Link
 /A << /S /GoTo /D (ch0-NT4DSCM) >>
 >> endobj
-4834 0 obj <<
-/D [4832 0 R /XYZ 151.701 685.529 null]
+4806 0 obj <<
+/D [4804 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4835 0 obj <<
-/D [4832 0 R /XYZ 151.701 660.623 null]
+4807 0 obj <<
+/D [4804 0 R /XYZ 151.701 660.623 null]
 >> endobj
 542 0 obj <<
-/D [4832 0 R /XYZ 151.701 612.713 null]
+/D [4804 0 R /XYZ 151.701 612.713 null]
 >> endobj
-4836 0 obj <<
-/D [4832 0 R /XYZ 151.701 569.452 null]
+4808 0 obj <<
+/D [4804 0 R /XYZ 151.701 569.452 null]
 >> endobj
-4837 0 obj <<
-/D [4832 0 R /XYZ 151.701 359.321 null]
+4809 0 obj <<
+/D [4804 0 R /XYZ 151.701 359.321 null]
 >> endobj
-4838 0 obj <<
-/D [4832 0 R /XYZ 151.701 321.9 null]
+4810 0 obj <<
+/D [4804 0 R /XYZ 151.701 321.9 null]
 >> endobj
-4839 0 obj <<
-/D [4832 0 R /XYZ 151.701 196.087 null]
+4811 0 obj <<
+/D [4804 0 R /XYZ 151.701 196.087 null]
 >> endobj
-4840 0 obj <<
-/D [4832 0 R /XYZ 151.701 160.787 null]
+4812 0 obj <<
+/D [4804 0 R /XYZ 151.701 160.787 null]
 >> endobj
-4831 0 obj <<
+4803 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4846 0 obj <<
+4818 0 obj <<
 /Length 2221      
 /Filter /FlateDecode
 >>
@@ -26313,213 +25591,159 @@
 ½Ö3Ÿ‚:‹C??Pq"ÇMη€QB`»Š5±»üVÀG%ÏgC½®¶W«÷½ÛÑÂëÈ8G;5Ð%èúîÛ•¨“”áÁ&Ôßå%‰…X•Op'±9î5‡ µ¨7nàÓJ_¹ø-„Sn!=íùµÅ6|èk½„yÒèÙØÜ6øa‘¼+¹ø ??4™J°¼Ä¹8Éâéš°ùé™Nu¢Bo]eÅÉ9{ÚèêÉ9ÐjþÎ}°
 endstream
 endobj
-4845 0 obj <<
+4817 0 obj <<
 /Type /Page
-/Contents 4846 0 R
-/Resources 4844 0 R
+/Contents 4818 0 R
+/Resources 4816 0 R
 /MediaBox [0 0 612 792]
-/Parent 4841 0 R
-/Annots [ 4843 0 R ]
+/Parent 4813 0 R
+/Annots [ 4815 0 R ]
 >> endobj
-4843 0 obj <<
+4815 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.349 460.814 280.14 472.503]
 /Subtype /Link
 /A << /S /GoTo /D (ch9-adsdc) >>
 >> endobj
-4847 0 obj <<
-/D [4845 0 R /XYZ 100.892 685.529 null]
+4819 0 obj <<
+/D [4817 0 R /XYZ 100.892 685.529 null]
 >> endobj
 546 0 obj <<
-/D [4845 0 R /XYZ 100.892 660.623 null]
+/D [4817 0 R /XYZ 100.892 660.623 null]
 >> endobj
-4848 0 obj <<
-/D [4845 0 R /XYZ 100.892 630.478 null]
+4820 0 obj <<
+/D [4817 0 R /XYZ 100.892 630.478 null]
 >> endobj
-4844 0 obj <<
+4816 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4853 0 obj <<
-/Length 1066      
+4825 0 obj <<
+/Length 1068      
 /Filter /FlateDecode
 >>
 stream
-xڝVÛnÛ8}÷Wب^D]úæÄN“8ë´•º‹"(ÙVb¡–äJr³YìÇwÈ¡\+P
-tŸ8$‡3gÎ\$F	#ïFçÉèìR„„3±ˆ“äpÅiÀ8ñȪÈ#ɆÜ;"ôÇ_’Ð$¤‘ï{FUD”GX2J“Í&/Ç®Tž3­Š4/Qþ3+V 1'«ñ ÎêïYÝà&-7ZPÎÅ.ÏÊN¹Ç}çb›î[| œ@;Í’Ñ·oŒð˜ŠJIÖÅèþ#¸»!ŒÊ($OF³ R…ÔW
-ä‰GFì4vÆ.˜O…ß‹¨‰Q‡•®Š´¡«ü_d€«ÓJQåw`(~è´Û…2-¬T=¼¸j€„±Øç
-Úï#âžvàuþsá£<¡hòºÄu2Q¨³tWèçĐ»À'.—Ty>¾‹æÍØ‘8E8›I(g]•c1ÔÕn§që{ÀmÖ¯e¥ïž¬j:N¤¨ˆD‡óI|•
-ÝUå¦*)òŒè:=O¡ò+àå!?‰ÜÂD. àEÖž_ßÅz8eUdåz—¶‡:ÓQ†ÌF	ŠÇ(µžIš–†s"¤ ,8æäön1½[A“AxZH}èS5ÛçÞÔ…”ýº€½-!†ÑDŒz¡úíyµ¡ çi_tT }þZGýbŠ¨Ð£ÑëeþÔC0¡t*û)¢2<Âœ¬Ûü»®*à L•¼ÎÖmU?#!8dÞBÊ=*i¡5W)ªÂÐ1[ç#—±áÖì_?dÔgêÿL”—ëÑt ç$'R‚i.´éo#Íu·šÃî…=8».'Ó
-|üôòSË…úqX¿øh Cæž@3Ù|Q<v.JgÒVìM•—8ïÙÔ¬“Ø$ôø6II«]⊃é˜ÉáÌéLu±h©[G@̐,„Ӿν«sγ‡Ê›'œgm°:à¦5壅
-×CcÕŽ%äÊ7úÄë?|Ò›'`ßB7ûp~QXgµkZPkÚú
-o¿`e›¶(=kòªC»ìŸl}hÓÕ.kð`›j/8ð¤9ì÷†§ª¶&Ð9ó¬î(¬ìûn±>óDø¾s;Õö'ïÇПfƒ‡í˜;[+?À' ƒ65 u5zÍ7’”?<£òÓ6ƒùf½tÞʪBÓns[%«C¾Û`Mäà¹Aqoƒ‚ÿ«×rÃî  ­o‡&ø“
-ÚÁVO]UíðÓÁsÖàN	圚ú¬YA‚ ž>hŠ•}â®pý—Ç:Û£4ÿxŽ5 ¿S¢oêjò×l	
-jy5äÉ\O¦ÓËäóûÙòzºúdǯ¾ÐJ§—ꥳɧäjyq·XƳd>ûüKCËw³d9]N>Ý&A2O–3
-'î5]·ÂHýø9„x
+xڝVmÚ8þί°t_‚T¼~‰óÒoìÂvwÙcÛ’Þ©ZU(@X¢’„&¡ÜžîÇwìq(A¡RïÛã™gžy	Œ¼FÞõ®£ÞÕ­g4d!'ÑšpÅ©Ï8ñ‚ªÐ%ÑŠ<;"ðú_¢Ð$ ¡ç¹FU„”‡>X2JÃÕ*Í_ú©\gTdqš£üg’- at bNRâÁ,)¿'e…›8_iA97Û4Ék8å.÷œ›M¼«ñr|í¼7Žzßz¼1ÂO`**%Yf½ç/Œ¬àî0*ÀŒfF¤
+¨§È[2ë}è±ÓØUx»`®O<7¤&FV¼ÈâŠ.Ò‘®N_(E•×€¡xSoò8³R±>»ª€„¾ð‘اÚo#â®và6þ9ëÂ! FyBÑä}Žëp4C¡Lâm¦Ÿ“€ÜùpI•â3à;«Þô"ô§|ge3	%à,‹¼/ †²Øn5n}¸Íú5/ôÝÁªÆÝá„ŠŠP48⫬è¶ÈWEN‘gD×èx
+•/d€û”ü$rW¹€€§I}}ÿ4ÓßÉ‹,É—Û¸Þ—‰Ž2`6JP<F©õLҴԝ!eþ1'OÓÑÓ´šô©ðƒÓê@ê*¨Ù6÷¦.¤l×ìm	Ô&dÔ
+ÔoÈņR@½Ï:ʇ>¿ÔQ¿˜"
+Ú3àz½M_€z&ŽOeg?…TG˜Ãe~×Ue€©’–ɲ.ÊW$‡Ì[H¹C%δæ"FU:f«ó|ärf¸5ûËñœ*¦þÏD9_¦ý€Ÿ>
+¹Ð¦¿õõÌu³šÃæ…=¸ºÏ'£|üôòSk öxüŠß|4Ð œ@3Ù<+;E_ÚŠ}(Òç=0[‚u|›„ß&)qeµs\q03ٝ9©&v-#uëN$Ë á´­ó<PŒ9×ɺ0Åæ
+çU,ö¸©Mùh¡Àu_Yµc	
+ä}â¶ô&Æ	ضÐÌ>܁_–I90-¨C ­ÝðöûV6qÒ«&¯Ø—¸KþI–û:^l“
+6±ö‚ÓOªýngx*Jkƒ0Iʆ¾o&k#1O„ç9#mø¾ýIñhl0ØqX÷¹³±ò>´©­«ÙÐkºJ¤týŠÊ‡MóÍzi¼åEÝ…¦Þ¤¶Jût»ÂšHÁs…âÎÿ¬^µO
+K¸C@€´¾í˜àOºÔW¶zÊ¢¨ÿ€?L1g	î”PÎÕ¾*¯ª$¨àéƒ*[Ø'ƒ®ÿáòR&;”&¯±ôwJ´MÝ
+ÿÏAAÍïº<™ëáhôq}~?žßOQWŸŒg³‹/´Òé¥:w6üÝÍož¦óÙ8šŒ?ÿÒÐüÝ8šÆ·ÃO‘FM¢ùXÙµš®Ya¤þ ™Å„œ
 endstream
 endobj
-4852 0 obj <<
+4824 0 obj <<
 /Type /Page
-/Contents 4853 0 R
-/Resources 4851 0 R
+/Contents 4825 0 R
+/Resources 4823 0 R
 /MediaBox [0 0 612 792]
-/Parent 4841 0 R
+/Parent 4813 0 R
 >> endobj
-4850 0 obj <<
+4822 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-ByExample/images/chap9-ADSDC.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 4856 0 R
-/BBox [0 0 494 413]
+/PTEX.InfoDict 4828 0 R
+/BBox [0 0 495 419]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 4857 0 R
->>/Font << /R9 4858 0 R>>
+/R7 4829 0 R
+>>/Font << /R8 4831 0 R >>
 >>
-/Length 4859 0 R
+/Length 4832 0 R
 /Filter /FlateDecode
 >>
 stream
-xœÝ[[oÝÆ~?¿‚Îƒè½_]»	Œ¶Ac*h¤(lY±ÕJ¤ÄÈ¿ï7³»ä’Ô!Yç ?ðpôíì\vç²\ÿ܈V6‚þåçUxþÆ7¢*ºšåûÙÜ”T­t¡‘¾•QšFÙè[ãmƒo-`ׇŸv´Þ7ýA‚â	–) c,†)ÓÊ0¾¼{Û\—bëFZ?Rò(El…¸ª€w§‡wâR8KÈ©¤ÅA1¡ÂÃ$yç˜~ €à£nŠøƒÖ3+°¸yòB#q“xè,~fZ^ˬĄÝB¶^šp®Ü‘æl­—Þ4ŸòÀ7ßìØ-ÜØ/Ä?V~\Cugñvwow‡9ç~áÛcåï5ÔšD5¯=¨î+¬;Ç
-ë6¶¸VA·Ú4R´ÞIßH£TÍt{¶1ÐÊÈ`Z¡)4¡µ…`ÎŒïFb€â•nBp­–­)4
-–4AØÖËaã…kUÞywgÎ2Bà@†°£žmï¨(Q"v	°ÌòCí(˜™ÎÓ	œ,”¢ ¸j§õð^ælð¥çúŸ4õÕ-¼Ö/„­y­¡ºs8·;‹s»Ãœs¿ðä±òîjM¢š×Tw–õԝe=ÑvöÎ:e›åÊ"ÂD„‘F*Ñ’Òz‹HÑx€ s²Î˜€£4¾£NEF·¾ñ.¶^ï®òB§è-ŠBëJ¥]´­öWí0õ8/q)œ•	XZ°p@˜Äc!¿µIà9¨(ÒcEj0)PÔž›ÎÓÎJQ p-ïeÞi¾^Xq®­/Ѫ’°÷èìr+®¡º³8º;‹£»Ãœs¿ðê±òôjM¢š×Tw–µÕemmom‹«ìh놭í‚l­Teo' ®u\šEmxâL‘`•„_­ykãOX³…֏”4H;OÅBæ‰bAB¦áwva,¤æ¡eg“¥ržžcú
-²ºÂ_²ôEé¹XÜ<{¡‘ñ“|…RÄ/\uò¼³=7á\½ã“†^¢º…Ïú…°5¯5Tw×vçpmw˜3îŽ<ÖÎ]A­
-TñÚƒêβœº³,'Š+­
-‘ì	n{‡R#SX¯€Hã$²Ã<G!¥WÍòµëNÊòŠjw‰ƒÆ¥q€Î>Ä 0£Ž4ã&º«ÚMé,Ewé„SØLjrF™àHÔAv
-j0'*öUŠ(}ÜV§S‘ìν 4
-Ñý!ƒD#Ó¾–Ѹ6H ¤Ò­¯(Ö´T,E#)²«ˆ CZ-JïW”Òl…P²u5‡òžæà…HÛ‘ƒçwœ#½Óˆ"EArgS=Rõ¥êö‘ü¼t¡Bõ­&jJ×RR& J\U"¤÷ZÍ‚(Jå=ÍQ«‰
-c|¥¦v´6Ç9Ò{­fA)‡©S~iºJvapŠZE§†J ÈIAÝWŠ‚uíû[„(ôX¾åjk 8Ú\Øy”iºÆdB	"Pô¯0…Rƒ°4©ì«@™R"~ª‰D…Rƒh§ÓÊBxŽ‘:Ê岞µâ³¥¥V¼£¸Ã_e‰y\?ŽÓ,)Ã(%¨aõçãb.Îéÿ×ù?²}Þ%¾ñ‡0å4Ë!;ªÑƒ¢§Q±5j÷(Þ¤H=7'µð:î‚kT·•RQÚÖ†
-\CZH%"lÃ'"쁏GN­ö²&Š
-á`f;PRqµêFŒžâÓ0.Sø<ej´‘^¤0ŒË”‰\+¨ÊÞ1Z.#ªPj^k¨QGTb؏º’¾Pj×P›µŒpMQ!˜Š@
-$sr•œ†?¹JÖàã*)ËÚZK±¶‘ÂQ¨Ì6à6ˆYçà"osS=(Q˜¡@ãg*Ð&ZnÃ'ZM%‹:ØéX²Ø	ɶáÉöÀ+X$#à,o÷k¼iü	c¡ŸTx³€hø` s‡’šËs!ßz*Þ6zÖ”G÷æ"mÀbðL™lùԖʃ¥†2É>ÐʏS›ôøÉ-zü¤hÖ©’hp(%Ì@JÄD„DíÇ.„Û„OÅÛ¯’ÑžO³ØÔ¨­(É!Û¨®¢¡	E¹n¤0¯¨®šq@ù\\Ö¼v ¶½Açÿ.à3~<Œ:O¶áSoì€/½A­¼è“)­WPÝ8óˆ¢oÎÍxm£È³”+ГjVÛ :nˆõ†ž„¢,>RÆÚu#I9ú|ÓW£%%üMP-“á#§jºD˜ÊtTÉ„6#úÉt‰2‘é4¨–	A_OLS™N‚F™””ÔXVÓeJ-Ó
-¨’IiÝ*WM—	™Nƒ*™¬iÃÄ™2‘é4¨–	EŽ’õt‰0•é$¨’)zj‚ëée"ÓiP%“–ü¹aœ.&22iCŸêé2¥–iTË„H!kdÂT¦“ J&t}~b‚L™Èt™BtT2 @µ-š-í	g5æ&œz~Åg¡Ú¡Ñ3é ±Vð¥a¹ïAU'=KÐ|”éIx<†*DNÒÇç1ÔWŇú䁲ÛÓ•þâ„.Y
-ïW$OM[¡Œó2ƒ¹W£`‘
-zú†D:§¨¦ÈQEÆÂa¦ÅU¥™Vhý9C!¿0ÕJz>HÊÓ–÷Q³B)‚gãkšaÔLkŠÓzÐLÓY·®¦Èï£f¢ÈX8Ì´ø’5ãs»“ºßg+Ô$uåæÕ'V¨YY¢EŒc]ïHc5Uiš¸ZŸ¥4ïCá¹ÿåݺÕ~†lÌ7?®úæ—‡çoPs)´È—`•|…+*b@•‰j.û󯺯.ÿÅ#ʧŒ¸ JMÆØ\xÕ:‹À|ùþðìo7·ïï>=4Ýõý¯×÷ô1JÓXºÈäPÉ^0âûžùfA.$Å*W0(È	óê®{sÛ¼¼»}¼¿;”W]
-CÍ( ,»·ý»·M‚3;ø+áÃtο\÷ï ×8í/ߍ7Û‚ÑäfúRåuËíÚ”và³²Wyþ&{¿gðªlk`í©P#ä8úX&ÙÙ$÷ÍÕõC2}_@á@×ì¢aõ¾½~ütwÿo²×O7~¹ûxsw;¨9Äm¸ûÅ6VÓ‘%dÀµDÆQ¿‘j~Èúí w¸£¥›~´îÝþ‰‘µÆ¥[@ÌpSí€ÿÑ`°]:¢“gÙb/_]//eè4Ý5ƶ*ÍÖzy¼¹¾}œuj'í¤Æ¦¶ÈµžuÐXÑ1pˆ”Ò½¼-Èçê„Ö™Ø4ÔÀÄÀ*as½ÃþzRN‰î	úCl³Q
-ìðhI·@ü5Ös7¼üÁm˜TÆ11(³ÈÁ;@Ÿo“H‡'X‚ˆûŒòпc‹`	(º/zýèCLáã6ÿqn.´þ&]\‰Ø@.Æ™
-ë€ßãREIqž¥¿}xøçñýÛÿBÂҁv‰O­LLà¶ÓÓ'|º@g‘šzUhØŽxçë³»KGÊ,ÆZ„fl4j
-5ª2Ó×NJZèí
-Ò6Røwœ&ù"ŸQšoÙjëҁ¡/ Ĺ„N׎ÀþèkÈq1Š+\M­m¼£ÂáPQ]ª`Ež"&N$pˆ†O­æ£˜}Œà»ÒŽ½Nt'	(
-ùÚxlgÿЁ“£Wþ^°ù„¢
-Áx
- ›ì1-|ÒÉÒÇCÈa“ü(˜*–àVZR1›j}úRÏ% ¶éî9ÆѶ ²€NŸ“%&£²üéz4XšÄÑk“.ö¶J$ÂU.p¸ ‰óAÜ}“’ºŒåúƒ¢ôìã@Ié	¬ž9=í]•ô®¬m){ÒŊ׺‚,Ѳ8*Ju¬òǹ8Rí6ˆžqPF¦NuäU0ãÈù(nŸÎÄéc
-Ð6S-„Í«óÍ»¢†G²öέzjÏèÊSdž÷ôÝÑð¥}Ô!tfåy-RIÉÔk!Y[[(Õ¨ÚSçâH6è”¸€3¼ÅG¯£kÅÞWÅÇ R2&ÂdP^ýç`ôñ³£¶B1çµCýŽàEaûûׯžóú—at÷¾e_¤±©}sýpwüe½ú¢ûÕdBiô¡#|D㜬·1Ÿ]+	
-þº	¨Š±âS…õxóëuóêæþúêñîþ7֋⺙©^?>ûÓõ=*軇æyóçW/þúãW©mM¤KL1^¦š<VÍ×w÷Í÷ß¾þû`…F¥”È#j^éH(*±Þ†ÿtrŸl®·‰ttÓÄ“º=D^Ã=²e:é„S,Ò+W¦Çù É&9¿´E`,IzÀüiå)éiGÑ:o.2
-—“1i‡œƒÏ<Ñ1UD½eu2±á.5_^Ûˆc[ƒ'a‘ÄÓ lY¾ÓŒ C—°›hÒ)…ú?@ Húv‘(ÓQÓ0vŽÉG¨’é?=Ð?J· ­ç’8p][ª–Šdn—¬=”œtF¿#ŒQˆ¤ËMÈ.Á§êóÅ/ÑÝ\MûÄïÿ’æs]
+xœÝ[ÛŽ·}Ÿ¯èGûAï—GGŠ
+!‰«e$€Òjmm2½ï®møïsŠ·&»wº'ò =ôtíañT‘,V‘­ŸÎÄÀé_~^M‡ç¯ÝðãÁ³ ƒõ~Xÿ¸ÿñ …dÂúA8&‚Qƒ4Á1me¼cëä,×̹a:HÁ²D ½F3©™ðó»Æ»3Ãi	>0kªlš%¹•<0nªVéñnU}'-E³ O)ÚE‡ø.1S•@à‚
+ýjõ‘nî¼Èˆn¢W[eúYiy-½’’8$­Ÿg.;RŸÌ8áôðknøú«³Ž«aœVôÍ8n¡Æ‹Œöx‘ÑKÍÓjlÍxo¡¶µºÎA—˜aã%fظ³¼•ôŠ)ðäÌY:ZJL¿¼H™àé	c„׌Ë$ÁCpEhe@Ìêù]4q¦kï-S¢Ê¦YB­àIí¹aNÔn´ã–ÉPßãêΚE aà?ªÅò^€¦*	±KƒXæ³·0`á†H8w_dD8,’b ´*«T}/ýv|íÄ¥}Ç']½F«Q›Vd[][¨ñƒ;^dpÇÃRó´Éc3º[¨-F­®sPãEæÓx‘ùDË™ Òë´‹pF!9#Â8ƒH18Ž€ òf1+FŠ*ž!\‰hëœ
+ÌÉùÝb¨ )-Dg(t•MURZ)S®jUSÍý’–¢Yj¸¾amÀߘDx	šªD8ÌHE“Åì¥"áÜ}‘p&X$Å€¢µ¼—~ûýzåÅ¥}4¿8“eÃ>§Á¸ÀiÅûØáj¼È@èñ°Ô<­FõØŒôj‹Q«ëÔx‘¹5^dní/m‹ ¯z¬hÚ©iiËÁzÁŒei'þn™MþS:ö›%ƒ ñ2H$Äüª•gÜ畍?aÊÙ4KR#ÂL¸ª¹‚ˆÊïqaÅ\(
+ÿia»’&O¥…½ MU4vu‰¿dúÅè¥"ßÜ}‘‘óÁ")ü‹ÖjOîw±°—>\Úw|ÒÓkÔ¸³iE¶Õµ…/1¶ã%Æv<,O«<¶ƒ»Ú$Ôè:5^d:™NW˜ôü	m1öÖT#K¢]õœØÎÁÇÁ…prXÿÀÌVqÚå%åî‚2:G©±‡ÍΛ!У
+Ôã.zlÊMa-<E•³é$ÈI…È0-¸Lð
+žSс´X€8܉Œ}S“H}„Úåƒ@í ‚!È:mñA¤u-‚¶Ì ­ ø>5£%KAŠì2 (Ÿf‹õýŠöli¦AHÁl«¡¼§>b‹"ñdí¬ÁÅwî#½S‹Â¢ *ﬡ·#¥QŸªmhœ×C(‘}ËÎLamŠµÊÄeC!½·fD1¢h(祐ÖL,í3•e¢í#½·fDaY4ôvôCø©ÙV†PÄ!ôVRÉJ¨)O
+ê1ËIIÁ6‚Ö½åj,Çb¶U%VzæÓfà¦©“
+ÄsOÑ¿ÁIÂÔ´¢"i@?eǨHZmß]‘Ì „ç,ÃúyÏ
+qˆÙÂP)>ÍQÜšH긊ëǹ›µ¤¶’œ
+VW5W}Å=ýÿÚÿ‡èwKßüƒërše±;yÊѽ¤§–!ÎIé=UÁi¤’;îiûèv<­öñxR)$íÙJÓ)È!ÅŠÀ>¼cp|>oÊh%±ˆ°ù"£à>6U’2«}Ô8Ëàñœj»,‰‡)g f)îxZµ]–t¼6P¿ƒ×4WfT‘´º¶P³HðUþHZ·P»³´´°J‘!’rOÕ#h}r–œ†?9K¶àó,)³ÚC¾ÜRœÌ‚èÀ}PTYlLš½
+që’AÁ0a}}.­Ü‡wVžŸ	õÌX#ÅíÚ’ÇN0Û‡wÌ΁7„"%Í1XÎœë¬3à-¥³àO8E
+—J'‚¨4ÝþÑ‘pÙ–ãÓ¨5½pOn¼ŠiÒ¡n³ñ ¶x;Kºõ¾Ú³·êИgH,Ò €–åyjž†?¹F·àO4ΙbLiÃôdšGXDTT§'ñ>¼'x¼–Œvtš¯(o4¢JÒ°ì£ÆF†L”'mw³$ê:56=V”ËÉe«ëÔþhÐù¿M-Ô âqûéX·‹îÇb½
+ªãMgL–t&o Æ¹ãEÖ.tí£hXiwl at 5&µªöAtÖ
+Æf$¸¦'¡h¯‚´cí‚ÆY$-ÝÝLM«$Iþ.¨å¤ãySÓ]ôœN‚N¨1‚ëºK’ŽÓiPË	A_u.H‚žÓIÐÌI
+AUeÓ]–´œ6@
+'©“­² ãtÔp2šùÎYÒq:
+j9!É‘¢í.	zN'A
+§à([j»K’ŽÓiPÃI‰x×0w—§Ó ™“Òt—Ðv—%-§
+PË	‘B´.È‚žÓIPÃ	%Ÿ]wIÒq:
+',_HP
+‹Y²–å;Þ6ÇÜ…SÁ0¸²¨ót¬q=b-_|Ôé~ª9ö¨Y<–“ôÖy
+…‡¦<€»|ò¡µ‡145Oôi88ÒnGß{Äë&”Ȳ¾_°98*ÚŠdî7*XÒ¸š‰Jèé;+tHÑt‘ßÑE!Q…cÑ°°âª±LIÔý1Ïlý~6MI„«ý–÷Ù´")Ì‹†ù=õ1Û¦Ej]mStÔ­š>òûl[E–EÃÂŽOÛ¶xpwÒº2¾ÇÅ,ÕÉ^±;MÕ‰Yª7¦i¡qlsB,P¤Õ¸t*¥âZäN¤§ÎB‡ŸÀ-ê͏«iøÛÃó×tЃ
+{ƨJˆø
+W¤€²9¼™Ÿ}ñrüüÍ¿b‹rׂÏ([(½ž9ï{ß¼?|ö·›Û÷w¿>ãõý/×÷t¥¨)}Èd‘É>Kí}ÄBmÆä™ peMyy7½½¹^ÜÝ>Þߏ	g}†´‘ƒ+Ç·Ó»·C‚Gu.Ϲ󽾿\OïÀkîöoßÌ_¶y­h”é¦Ê)¦ã¯eiçý.7»ÊóðØûsoŽaÎîÇ é0¢Ž¥Ë2‡ ûxß\]?$‡Ñý‚ŒY] ’y__?þzwÿoò×7?þ|ÿöñæYC7FËÅá. d¼PI¤-Õù´æ»lßàñ€á`ô¥M;K_ÿ„@sZa~Z‘‹é}L³ þG‡ÁSôѝü#~“Ç^¼ú²^RÓi:}…ä÷*zëÅñæúö±sjï'^XÓÛ­ C‹%û@»Bú.oò±6¡za…;Õ0Ó‹lÂêz‡ö$QÁ$æ ²@ª
+*†°Âƒ¨T÷@ñ:ÖÅlý#–b&PÊS®-biôýìƒ>Þ)ÎR0÷áfrÊÃô.zs@ÒeÏ° ñLaá6ÿqé.Ôþ:}¹‚8bCXzjëï¿gDi¹"Ú#[‹Üoþy|ÿö?•"üìi‘¸xgëEícåéè
+Ÿ¾61ÚÆKmJÒ(Ý2:~>°ºT ›zm"3œDu¡Bb¦Cºí¤=µ½FMÊ`Š=K»güOK¿²UƦM— u¸ÚÑÛo80<݆W­b’«(§5ƒ³´Äp()5•p#GY’&O,⣎gWËVQ]GÄo¥-KŸ
+kú&	(
+	}¬–³Æ£#'K¯œR
+ÅÇí±p‰7j´CŸl2ty&ñGάeñú@˜£|6¥ûtS³@eÒ·çhG«‚²:€NžèZeþéû ¡s͇hŽ©Iö2É“1TÖÇpÁeRÝ5ŠˆÖiO)OI»³¯‚´;A“ŸúÌ»Ó~ã&§/hiã©”3­u¯Q³XëIiulvKi¤Ä­0Ï0˜"R¥:«Ê¹Ý¢M,ž.¡æCE)ªUù‹»b€Ã&í¬Ý¢sZ7cáˆDŽîuQd«t\åhÊH—0‘X™P$M«vŒ.¥‘|ê´a§cxšÇ+Ö¼,£«ÐŒIÐ5ʳþŠ>|t¸–H✲È{ Ñ¥½æÛW/ŸõêeL¿[ãwÒÏRÛ´ß¼¾~¸;þ¼uÑwÕäB¡9ì¡ü­âγùè‰SÐǾló=%öW7¿\/oïî‹vQürfa×÷Ÿýéú™óÝÃð|øóË/þúýç)e:`A¡]¤T<çS×w÷÷_¿ú{u…DyÂ8mß!f 4Ó± ™Ä|«ÿ!èä:9£u»N„¥OÌñG<iU!äêX»© Ò)' qoJÅ”ô¸lÔ­’‹èKkîd#Om4D‚!L£™å*}ÂÈmtÒ¹ˆ¢e,ÓT ¤ZF…bŠ|Sþ°Ëv[w±áÄÑÿÀºi"}=N‘(ÎÐ ‚DÐÅE’ô­úXviœ!Óÿx ÿ{dóÞ? ¤!¤½é&eضmòwß(ÓEýŽXFq’¾lÂã]Ê=¿øùñÊŸ›«¾Hüæð_gšrP
 endstream
 endobj
-4856 0 obj
+4828 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110929)
-/ModDate (D:20080610110929)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090505-05'00')
+/ModDate (D:20080528090505-05'00')
 >>
 endobj
-4857 0 obj
+4829 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-4858 0 obj
+4831 0 obj
 <<
-/BaseFont /KUZIMA#2BAlbanyAMT
-/FontDescriptor 4860 0 R
 /Type /Font
 /FirstChar 32
 /LastChar 121
-/Widths [ 600 0 0 0 0 0 0 0 600 600 0 0 0 0 0 600 600 0 600 600 0 0 0 0 0 0 0 0 0 0 0 0 0 600 0 600 600 0 600 600 0 600 0 600 600 600 600 0 600 0 600 600 0 600 0 600 600 0 0 0 0 0 0 600 0 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 0 600 600 600 600 600 600 0 600]
-/Encoding /WinAnsiEncoding
+/Widths [ 278 0 0 0 0 0 0 0 333 333 0 0 0 0 0 278 556 0 556 556 0 0 0 0 0 0 0 0 0 0 0 0 0 667 0 722 722 0 611 778 0 278 0 667 556 833 722 0 667 0 722 667 0 722 0 944 667 0 0 0 0 0 0 556 0 556 556 500 556 556 278 556 556 222 0 500 222 833 556 556 556 0 333 500 278 556 500 722 0 500]
 /Subtype /Type1
+/FontDescriptor 2063 0 R
+/BaseFont 2067 0 R
+/Encoding 4830 0 R
 >>
 endobj
-4859 0 obj
-3454
+4832 0 obj
+3439
 endobj
-4860 0 obj
-<<
-/Type /FontDescriptor
-/FontName /KUZIMA#2BAlbanyAMT
-/FontBBox [ -12 -186 612 667]
-/Flags 5
-/Ascent 667
-/CapHeight 667
-/Descent -186
-/ItalicAngle 0
-/StemV 91
-/AvgWidth 600
-/MaxWidth 600
-/MissingWidth 600
-/CharSet (/L/A/y/n/c/X/M/o/d/N/C/p/e/D/underscore/slash/f/P/r/zero/g/F/s/h/R/G/two/t/i/S/three/u/I/v/k/U/w/l/a/K/m/b/W/space/parenleft/parenright)
-/FontFile3 4861 0 R
->>
-endobj
-4861 0 obj
-<<
-/Subtype /Type1C
-/Filter /FlateDecode
-/Length 4862 0 R
->>
-stream
-xœW	T׶­¦»«;"”
-1˜.¢$€Š¨è‹ ‰ 
-NQ@J¨(
-(€4Ýh°{¢Á¦qŒ¢‚Šàǘã€HLñåùÌt*ÿòþú·´;oýÿ×[‹TÕ½çÞ³Ï>ûœ# Dv„@ °ÉLNZ§‰ˆáŸü97ÆŽ{U¸ErÜŸþâW‰àiëœ*Œ£qí#qå¤.pÈ6$„AAUchvŽbCƪÕyž>±K–ùN˜0ÑúfJ`` g²âùϹi¹«Öy¾ÿÙ˜–™“•¶.o¦g(^™™‘â¹*S‘³:×3)55-•ß—”™¶Ö3,#3#''{£§O¨¯çÔÉ“§øá_S#3²’ós=#²×e{.ö\’¶*?3iÃ_^1iqˆb]J|DvjdhNÚÜôè
-«ÂrW/	ÏËXš¿`ãÚØM™I‹²’—yúø¾ç?yj Aøc‰w‰(b.HL"¢‰y„?áE¼C„¯áÄb)1Ÿð&bˆD áCĉiD1žXF,&þFÄÄb"I„3ñaO#	‚"FþrB„]¼-8gd÷@¸RØ$¢Dù¢ŸÄ©â“äh’!û%ñ’ûÒè—\^ª³w²o´ÿÃ!Æ‘t\åxÔÉÑIï#G49s>22jä)—7\|]ò]θÜp%\׸öRk¹§#¸§Ëå³ꀖv!¤rfÙ-²I«16¨4
-Å’Š2uq‰NÝD÷æÏæŸJŠù'.V’¦r}I±ZY(GÓP‹Äb¼Y8Á
-´3!]ÈC´ìòÛl…ɤY«i0ª4t:‰–sf1zŸT¨ð9Zþ³#‰ÂóÅ™¤B‰wèùWÈ&ÞQ†¯4‹ü¼ÅPËÊÐ8!n$ñÉ(²ƒ3±‚.xa†ÚÜæ"/1¢ð±ª’
-)Æ~iF•VA/$AÇ™Ä
-V³HH]ÐDŸ%ÑttÍ€ûâOmVHÈ^¡U›iË‘ØÙ>6‡uWöv¸SßÀLnº,˜÷„_ÕD·¢¾D²`Ȫ™w«Û‰PGbõ†)u|÷‡-ú£1fõî‚}˜,)b2$VïíHÓÐ%
-éА·ç]ˆXµiñ;r|‰Í,l‡7ð-î³îÔQn
-ç(Kj‹kŽd¤è•	ÑËhÔp¿r¥¹­‹þм£‰1JuJ]™ªb{™JŸ°(7¯´›}ë7öö€Ý½î¤¸šºVXU§nð¨×èÌ4uô‘„ºÖ¤Öm‘SG‹Ôe
-ú9k\Û!́€ÿ†A ;õn+ƒp(ÁQ¡nšôc£²®G÷Ž“È­@“a…¸“G×Ø`A׎G—g .„£q!I=¶ÇÝ
-Á Xhx‘5r0šç.±‚.$_°»›åœ1¹¿…·d0~ëóƒmøèk5›Áåïµ^ʇDþh M±ÏÆâ>{ó3¬Tàwë-»è._KB ú]l‰'°mÏ
-á3.T†\_÷FÎÈå™`Î<û	FÀ(ï¢Qt²è·»Aã|Þòòzóγûw~¡-û7°ðŒQóÎfדÀµ§Àwª„Sp2?ëõÏ %ùn÷’óq Æãhª9?}z/¶]?)§Š§öK^8H•Ä(žÉnyá•Þ3ƒ|½ß§޾ó“ü`¿°prnœ¹Ub‘/Ïf>Šfºg0…D¸Jñkdá0&úŒ-¬&Ã`RH¸0X9Œ‹†|‰Íoàjd+ŽGíYÀÌg¢Ö'&$­ÌžÇDJgH8#gsùÒž“§åûöÔ›½ÔP¦Uª¶V¨Ê屋âׇaoí½Ÿ}C
-‡wâ"«å•›ëTFFÚ Ñc6ˆ$&õ°B
-ILbá6Ÿ³ØA'ÌSðÂ);‘wÏ5ÞS,~Â’¡Wa±˜X2Ê°døB5yrÁÙ¬o)Œ|ò#8ÐÔpð{„FÇç„ÅÉ!ì¬ìYoˆ¯ÿÌ`_ŸY·úû¿íùi(Œ0‡…ñ¬€Û	2æDEsÑ¡Õ÷fvMÀŒòöG#Û^àñOµêËôeåÛ*¶ªé”µsò#D03¯ÿ.eEæÇ7Î?ež2=Ñ;&K­ª=’…˜]#Y™-ðÙ$¸
-€ÆÒg%0ö
-!79ʶf`+Éæ˸|'9Ã-j[Í&ï‰bâ¤s$c|&ÊŸK› Ò±í¬(`#ƒ	—ÈOŽ·]ÙÉn«Ø'?UÎ0UŒ´£¤+×–TÑ™uaš4F:eQÜ:ršä…ú=@}¾6IóiÒk!ŠÓ%,TùtŸ›e0‹²¯çñ“7oŒ¥Ñk
-b¦ÅÚ”‡bÒ¬f’“°YÕ!¹}eixXè’iôs‡2±V‡â¨_ƒLu$å½Åö[¨o‚åi(ìW1sµ††R-V®0XORGÀîøî㻘æÒ=yuuEï´¾;]Ø@¯ß™¯_ÇÄ3ÑÙ“fHÿi_²ðwœ¹N˜l\<Qw®¬XvpŽùù!)’<™ ¢îÏ^9I#™$<&6\Ž^‚f)Zø*²‹9bj;ÚrÈxa¥ØˆÏ	Õÿ"~$u½•#ëïÁÔ›<É/S¯§çÉ°Ó˜}iC˜zuÀ¨vÖ½2ðJ$Ú2£Q«k’ƒ»¤I¥+)Q•)ä‰ÈÒàk_Ia²¡¡No’=+ùÏ`’,xüÁÅ’a›ŽCÛIwÊÀÍåd²Õ—0R*ÌwNµMëö+èý…ûÕ=êsê}ê}ÅûŠL˜<)eˆ[˜:ío󎞐k$TX½J‹ÎB>éø¹@£jSۍ­™6H:ÒO^ÁÙ(¾î›Ã›Z3wÑkw¦¢4ºòª|#¶µÑXj2½ÒqîPOï§YïÕÊ©±›«4ªz£FßDS†ëj,.k%rÊ°¥Ÿ0„Ø°âZ0ÛËó«íD«ÓgÍ+‡xÌó^¶Š"hIƒñìåMç˜ÑíÌ.\Í÷>¯æ‰Û"öµD¬)wç_ðLÊ‹Œλt
-‡"v®>¤wugLš.=oÍÃ,2^Ë>²¸óÇC'O1_I¿Ÿqc¼UþŸ9ò¶uk0	5"(?I÷Õب…Añ¾ÃBµ˜…c¼4síB,Wi²Fþ®õ–Çñ²¥ÈâÆ“1ëW©–aó
-¸cè›æâþ¯:ۏí4]`ú˜îäÚxia&Y¾IþHbÞ¦-**ÇB\,I<Ó´€YÈDç%&ůÈ
-aB¥!4õ÷×aÆ¥¯›Z/·5¿bü;„°ç*8HÌåÐCˆUVzÐ.2øRÂãï<v@¯2(·~P±M-OΝW¸”‘†%²­õï¹üv8„ã{“—‚  ìQšf£¦ÿ=$Uí›N&r÷d[Ô*½D‚ÙX/ßKZØx^Ҥ֖ȇs Êar6ëú#«è„îÔXî®AFؤĦh±³Â§%5¥¶æÑ-ùG¶\ßr£¤¹|oÑþBÓZfµ4d^ì$ÌùÉLH×W¶ïÀ¢ÊHqrb%K
-´ªú|œü€„2$°s¯y€ãמvåu¦í¡3ÍÙÚ·ú\MŽ)×TÔ´H¿ºôÉÝÛ—£j,ܯS=ŒuÚ&ú	ß¹[Ð|ÞhôamÄœû°#é™;•Ç-rëµ6TAçˆåÒõ’:µ4*k¾G|
-{š†³­ýêüuÖg˾»òùþ3ç¬=Å0ÚfÐ<«ø–³ªÛÚ>`­ÉG´µC·5¹ð{ÞÐN VÐI ƒd!<tƒ ÎQÜn#C¬»J"oÔ'ÞD"_èem¾m±$Ìt?g¸ò͌°½
-‘îÔ „Â|Ù‰c¸%'Î!©ÿ²ÞÏ}è~JÌŒD¥Àû¸¹tǃ5h=ËÍzÖ.…àIˆs˜hUƒÏÍqÖýC"Ê•³‚¡lÆ«Õ25ªë
-ø´S¨Ê‹0\;pÍzDN7/`jØõ‡rxÔó—>MQ†WYj=^…D?€„}} ’ÛÀé(ä"Üîa›lP´³^é2Ýœ
-Zq<9iCá&‰þ×…fò>²‹|†GÈ0„(·Ý¢¤CàÓÌÚ©ÛšÿŸ4{N˹,¼Ìºv³p‘Mæ»ßBîM·Ø0³(šÉáŸNJ_X¬ˆ‘—n-/gJ¥Jm™¡ª¦²²F~{÷~ÍFzó“5ïÒs%э™u+±d¹LžFS§g¹ìñ‹ûÎ_’Í_ǏBa‰­]—o|üGç©råú/V*„ðz¼^vçffgÔMôÞèVM]JCLz×øvØ ï¾¼ƒg†±g²·6xô9ŒªÄPuË&Xoÿg’m3pv·ÃÛí) À¿ønF„%,ÄÚ\á±óÅ|b²L†a–f`°(öü±C{Û<Zf¤ÐèZÍhp’ÿ~ìbËnŒXÛÁ5i4U‡ºm|”mäŧßI^³qyª<ÿÔÚÝï3IÌ:EF‚ôß'pfðTÜ3†*è‹y…¤JͱÖèHR]sO~žÑíNOÀFN|ŠœCbÖÎ]NCزŸ¿	ç;3p¼Ï¬»ßÞ±´ÕÌNîµæû¬  „àìv‰)çÂA/œí_pfq³Íxùº5
-?Ks€#ŽÀ©18f)—#¾g#I^ÖN¹™‡ÿÀ®KBn
-öCɨՅ9s‘]*z‰ñf¼»ŠD»ÓðHÍH:¡f{UE-=\²˜?˜?Z~½#ªj+«˜<¿èJå[_!Û*U–•nc*ª·ÒבËo¾Û÷̆F|°•©`¶IKue½Fó¡I~=ó3óËÚßÂA”wL©S2–FÓåÇËþ%Zþ§ˆ¿+·ñO'Yµ¶ªš©•ê•Ze™úƒâr9úî_‹·©·oe¶VâC_[kÔðW)j€ØÒhp›áWÌ	‘p6"P€Üå^D€„½@ÀT9ú¡_Æ\nºzàÄžÖÃMLӪؕѲÒÎ,’N•0‹
-³VægdlJ¤XӜۺî„â*syh^IþÕ•‹`ÓÛÝ©ZpgeՒ󧾼Ð÷@J½ÎàÔ|àóWN¿;>bivBº¼ ·$‹QHËtJ½¡NÓP#oüürçUFzë먰Ăl?•¢\q´„Šæ^í%Íå:\ÌÊ
-äTíj‰Å-hg]¹@¶ÀÒì#¸#«¬¬®¬Äíç÷Ÿï;Öuþ•³¿ö^¶|sVŠ|Óæb£”b@
-Úêêz¼¥õ´ù#ýæb¢÷³S“ôFåæíï2ÒÂÒáâG]ë¿·`ÖìÙüc–6YA«k·U—3Re™RYR_ÜZHwåœ*9ûRÉ“»?_]qé­CôˆMÍÜôf\\š›ÉíY‡YG'‚ømeG`
-endstream
-endobj
-4862 0 obj
-4112
-endobj
-4854 0 obj <<
-/D [4852 0 R /XYZ 151.701 685.529 null]
+4830 0 obj <<
+/Type /Encoding
+/Differences [32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]
 >> endobj
+4826 0 obj <<
+/D [4824 0 R /XYZ 151.701 685.529 null]
+>> endobj
 1798 0 obj <<
-/D [4852 0 R /XYZ 151.701 595.284 null]
+/D [4824 0 R /XYZ 151.701 596.184 null]
 >> endobj
-4849 0 obj <<
-/D [4852 0 R /XYZ 151.701 578.414 null]
+4821 0 obj <<
+/D [4824 0 R /XYZ 151.701 579.314 null]
 >> endobj
-4855 0 obj <<
-/D [4852 0 R /XYZ 151.701 298.818 null]
+4827 0 obj <<
+/D [4824 0 R /XYZ 151.701 297.018 null]
 >> endobj
-4851 0 obj <<
+4823 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R >>
-/XObject << /Im21 4850 0 R >>
+/XObject << /Im21 4822 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4865 0 obj <<
+4835 0 obj <<
 /Length 868       
 /Filter /FlateDecode
 >>
@@ -26533,21 +25757,21 @@
 Äpµ
 endstream
 endobj
-4864 0 obj <<
+4834 0 obj <<
 /Type /Page
-/Contents 4865 0 R
-/Resources 4863 0 R
+/Contents 4835 0 R
+/Resources 4833 0 R
 /MediaBox [0 0 612 792]
-/Parent 4841 0 R
+/Parent 4813 0 R
 >> endobj
-4866 0 obj <<
-/D [4864 0 R /XYZ 100.892 685.529 null]
+4836 0 obj <<
+/D [4834 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4863 0 obj <<
+4833 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4870 0 obj <<
+4840 0 obj <<
 /Length 1313      
 /Filter /FlateDecode
 >>
@@ -26572,24 +25796,24 @@
 ©ÕK	j¢ø~G­lw²€ ¼iýöM‹Ã8„×ù´ÿJµÓ`ŸBu  Âö"Ù[ˆH¹là×€ªÏîáiA ”P½Ÿ}?¿=Ø{í~þ|/;©
 endstream
 endobj
-4869 0 obj <<
+4839 0 obj <<
 /Type /Page
-/Contents 4870 0 R
-/Resources 4868 0 R
+/Contents 4840 0 R
+/Resources 4838 0 R
 /MediaBox [0 0 612 792]
-/Parent 4841 0 R
+/Parent 4813 0 R
 >> endobj
-4871 0 obj <<
-/D [4869 0 R /XYZ 151.701 685.529 null]
+4841 0 obj <<
+/D [4839 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4872 0 obj <<
-/D [4869 0 R /XYZ 151.701 396.882 null]
+4842 0 obj <<
+/D [4839 0 R /XYZ 151.701 396.882 null]
 >> endobj
-4868 0 obj <<
+4838 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4877 0 obj <<
+4847 0 obj <<
 /Length 1683      
 /Filter /FlateDecode
 >>
@@ -26609,60 +25833,60 @@
 Ec¾†Ê¨==;/õv/ÜݝqB	LD×^£•» ïËW×O_]Ÿácò¹.¤`1>ö^J¢yýsÝ>Ó¥ðBxC‚Ã^”•˜aƒ’¶:{Gã!Ó’%Ü™öíEq‰Çì1§×Å®;<Y.á—µö}Îr}±÷ì¨$eJ›¿;c½ü‚cþDZl
 endstream
 endobj
-4876 0 obj <<
+4846 0 obj <<
 /Type /Page
-/Contents 4877 0 R
-/Resources 4875 0 R
+/Contents 4847 0 R
+/Resources 4845 0 R
 /MediaBox [0 0 612 792]
-/Parent 4841 0 R
-/Annots [ 4873 0 R 4874 0 R 4867 0 R ]
+/Parent 4813 0 R
+/Annots [ 4843 0 R 4844 0 R 4837 0 R ]
 >> endobj
-4873 0 obj <<
+4843 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [270.623 557.89 340.343 569.579]
 /Subtype /Link
 /A << /S /GoTo /D (ch9-adssdm) >>
 >> endobj
-4874 0 obj <<
+4844 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.532 523.43 297.252 535.12]
 /Subtype /Link
 /A << /S /GoTo /D (ch9-sdmnss) >>
 >> endobj
-4867 0 obj <<
+4837 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 215.082 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(ftp://ftp.sernet.de)>>
 >> endobj
-4878 0 obj <<
-/D [4876 0 R /XYZ 100.892 685.529 null]
+4848 0 obj <<
+/D [4846 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4879 0 obj <<
-/D [4876 0 R /XYZ 100.892 606.895 null]
+4849 0 obj <<
+/D [4846 0 R /XYZ 100.892 606.895 null]
 >> endobj
-4880 0 obj <<
-/D [4876 0 R /XYZ 100.892 558.886 null]
+4850 0 obj <<
+/D [4846 0 R /XYZ 100.892 558.886 null]
 >> endobj
-4881 0 obj <<
-/D [4876 0 R /XYZ 100.892 524.426 null]
+4851 0 obj <<
+/D [4846 0 R /XYZ 100.892 524.426 null]
 >> endobj
-4882 0 obj <<
-/D [4876 0 R /XYZ 100.892 489.967 null]
+4852 0 obj <<
+/D [4846 0 R /XYZ 100.892 489.967 null]
 >> endobj
-4883 0 obj <<
-/D [4876 0 R /XYZ 100.892 368.972 null]
+4853 0 obj <<
+/D [4846 0 R /XYZ 100.892 368.972 null]
 >> endobj
-4884 0 obj <<
-/D [4876 0 R /XYZ 100.892 236.373 null]
+4854 0 obj <<
+/D [4846 0 R /XYZ 100.892 236.373 null]
 >> endobj
-4875 0 obj <<
+4845 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F30 1928 0 R /F59 1905 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4888 0 obj <<
+4858 0 obj <<
 /Length 1710      
 /Filter /FlateDecode
 >>
@@ -26679,24 +25903,24 @@
 }ã"&#PpáAW鞉ƒ¹Mv¡wÎx™ðÞ&aÌ숽É-²IïɘþÿˆuUµ?€é 0>¦yGóÇy`ÍAÆþ4æ¯ïôíý‘†Gó‹³ë‹Åüx~y~L?°F{!ÕªáÆ7\7ßÀ|½/~%~¹—^œÞâ‡ø}j½8Çï©ù… Asøùhõ4ü„ryf6^ÈW_¡È7ÇàùÞw~.òÿ«BO=ƒöŸAÞéÇ‹Åä_õ•Ã
 endstream
 endobj
-4887 0 obj <<
+4857 0 obj <<
 /Type /Page
-/Contents 4888 0 R
-/Resources 4886 0 R
+/Contents 4858 0 R
+/Resources 4856 0 R
 /MediaBox [0 0 612 792]
-/Parent 4891 0 R
+/Parent 4861 0 R
 >> endobj
-4889 0 obj <<
-/D [4887 0 R /XYZ 151.701 685.529 null]
+4859 0 obj <<
+/D [4857 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4890 0 obj <<
-/D [4887 0 R /XYZ 151.701 295.263 null]
+4860 0 obj <<
+/D [4857 0 R /XYZ 151.701 295.263 null]
 >> endobj
-4886 0 obj <<
+4856 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4894 0 obj <<
+4864 0 obj <<
 /Length 989       
 /Filter /FlateDecode
 >>
@@ -26709,27 +25933,27 @@
 S)vý¦ÒÎb×ø$°ñôá¡úºgnVÈÃH5%üQwI•¯O†¯›DQ܈NÐ-åÑ­«¶ð pžÊÖ4¯jùBµµ3…ßr}ì€E¿v#ÙGH’*d^®P¤ó¶ÜsÈKÉtJµŽÌ}^Kd‰5rššWu×2í§ö¦ÍA¹ñ]{]‰¹hX㫉”MI©ÍrýuÑÜLèˆe%ö{^Á§ÈFvü‰g4”¥ÿkPÀ‡Ìý„;áñão;¡Bþ >u±¡µÀ3hºÌãÖúq¼*ò2×BTÏà®™{Zžü6Ÿßݧ/#?`¤cQä®ZÊÍs¦þØÊoØ€×µ,l9Õ;#bŠƒjê”®3œXgMêŽdúâ·m¢w!Õ5„0y³v»(µÌÐîNoÙc^Oëî´é¦Á¹fY&l‚ú?ÕqóLÒ®D¡»]'¢8 at wu·u'¾4íY?]¶$ÛòÂ|ÌtÓ<g=.Áý¡ÒIz¬ðu%µ'ü±úâø‚~
 endstream
 endobj
-4893 0 obj <<
+4863 0 obj <<
 /Type /Page
-/Contents 4894 0 R
-/Resources 4892 0 R
+/Contents 4864 0 R
+/Resources 4862 0 R
 /MediaBox [0 0 612 792]
-/Parent 4891 0 R
+/Parent 4861 0 R
 >> endobj
-4895 0 obj <<
-/D [4893 0 R /XYZ 100.892 685.529 null]
+4865 0 obj <<
+/D [4863 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4896 0 obj <<
-/D [4893 0 R /XYZ 100.892 451.079 null]
+4866 0 obj <<
+/D [4863 0 R /XYZ 100.892 451.079 null]
 >> endobj
-4897 0 obj <<
-/D [4893 0 R /XYZ 100.892 416.6 null]
+4867 0 obj <<
+/D [4863 0 R /XYZ 100.892 416.6 null]
 >> endobj
-4892 0 obj <<
+4862 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4900 0 obj <<
+4870 0 obj <<
 /Length 890       
 /Filter /FlateDecode
 >>
@@ -26741,24 +25965,24 @@
 ÑÚ5BCInŸväصšS¢~±“ªë² ›'I7Oà}×ͲÖ~h¹;Õ9K;ƒmÃ*×êg›4=ߤðß{ôÌŽ™ˆõF…TûŠ½láLD£¥€Ù¾—ŒÆgTΊ_ç‡;p_+§&Ǥë¬ÝÈJñhìGÑÞïf‡¿—õ§ÿ Úíðý ü‘e¾Ÿ^ÿËVwhɇÚoËþ„šþ5Ë£
 endstream
 endobj
-4899 0 obj <<
+4869 0 obj <<
 /Type /Page
-/Contents 4900 0 R
-/Resources 4898 0 R
+/Contents 4870 0 R
+/Resources 4868 0 R
 /MediaBox [0 0 612 792]
-/Parent 4891 0 R
+/Parent 4861 0 R
 >> endobj
-4901 0 obj <<
-/D [4899 0 R /XYZ 151.701 685.529 null]
+4871 0 obj <<
+/D [4869 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4902 0 obj <<
-/D [4899 0 R /XYZ 151.701 555.408 null]
+4872 0 obj <<
+/D [4869 0 R /XYZ 151.701 555.408 null]
 >> endobj
-4898 0 obj <<
+4868 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4905 0 obj <<
+4875 0 obj <<
 /Length 1216      
 /Filter /FlateDecode
 >>
@@ -26776,27 +26000,27 @@
 %ÚÕjË««§ûl~õʈœÀwîô«“ÅüU#E%…Øªeµª¿Ži®”F”|¹ï¥ÉHä÷[.æ=‡ÇeuútŐˆÄðˆ&d’ÑKΊm™Ø|_ìq4‡/¼£ÿZÈ
 endstream
 endobj
-4904 0 obj <<
+4874 0 obj <<
 /Type /Page
-/Contents 4905 0 R
-/Resources 4903 0 R
+/Contents 4875 0 R
+/Resources 4873 0 R
 /MediaBox [0 0 612 792]
-/Parent 4891 0 R
+/Parent 4861 0 R
 >> endobj
-4906 0 obj <<
-/D [4904 0 R /XYZ 100.892 685.529 null]
+4876 0 obj <<
+/D [4874 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4907 0 obj <<
-/D [4904 0 R /XYZ 100.892 613.67 null]
+4877 0 obj <<
+/D [4874 0 R /XYZ 100.892 613.67 null]
 >> endobj
-4908 0 obj <<
-/D [4904 0 R /XYZ 100.892 338.032 null]
+4878 0 obj <<
+/D [4874 0 R /XYZ 100.892 338.032 null]
 >> endobj
-4903 0 obj <<
+4873 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4911 0 obj <<
+4881 0 obj <<
 /Length 990       
 /Filter /FlateDecode
 >>
@@ -26812,21 +26036,21 @@
 ¯˜ýWxµ½¦Õ¥DÝ)†ñT÷ý}žÕ7}¯‹`Ÿ…›::5ÎyQô·	*éõ>A\ø œ=z)Ngwac®®ïç~¨Ù½5—©(ªQúª¿¬NŽ7äú]u;oI“¤1ֲåàÅs}‰ën_ÝS]êþ̦
 endstream
 endobj
-4910 0 obj <<
+4880 0 obj <<
 /Type /Page
-/Contents 4911 0 R
-/Resources 4909 0 R
+/Contents 4881 0 R
+/Resources 4879 0 R
 /MediaBox [0 0 612 792]
-/Parent 4891 0 R
+/Parent 4861 0 R
 >> endobj
-4912 0 obj <<
-/D [4910 0 R /XYZ 151.701 685.529 null]
+4882 0 obj <<
+/D [4880 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4909 0 obj <<
+4879 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4915 0 obj <<
+4885 0 obj <<
 /Length 1196      
 /Filter /FlateDecode
 >>
@@ -26837,21 +26061,21 @@
 <Jâ,\·ôˆl½Â„§º2µÁ©;OòÈ$Òf&TQõhx¡Ã#xX0uŸyh…ÏÐ3MU[¢îF˝mÛ"íÊóݘÂ(š=Ké/0k=è2hCh$;ã ÆŠ£]_•EQÿÒ]zÜdk›‡ýû°ÜO“å~fËp¿OËŸ”·Ã?cÌ;ÝÍì_íçÍ+ž>˜\Æ1~3¦8ëp¨ùãiw“Á'Eÿ}Ö{ñç&Ä«¼{yÜþvToõ_è‹ÿ pnB
 endstream
 endobj
-4914 0 obj <<
+4884 0 obj <<
 /Type /Page
-/Contents 4915 0 R
-/Resources 4913 0 R
+/Contents 4885 0 R
+/Resources 4883 0 R
 /MediaBox [0 0 612 792]
-/Parent 4891 0 R
+/Parent 4861 0 R
 >> endobj
-4916 0 obj <<
-/D [4914 0 R /XYZ 100.892 685.529 null]
+4886 0 obj <<
+/D [4884 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4913 0 obj <<
+4883 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4919 0 obj <<
+4889 0 obj <<
 /Length 631       
 /Filter /FlateDecode
 >>
@@ -26867,21 +26091,21 @@
 ëÅ9½VN»ïîâ­5ßp43«§/S§{αœãÎü¿gÖb4¯·?~ºb 
 endstream
 endobj
-4918 0 obj <<
+4888 0 obj <<
 /Type /Page
-/Contents 4919 0 R
-/Resources 4917 0 R
+/Contents 4889 0 R
+/Resources 4887 0 R
 /MediaBox [0 0 612 792]
-/Parent 4921 0 R
+/Parent 4891 0 R
 >> endobj
-4920 0 obj <<
-/D [4918 0 R /XYZ 151.701 685.529 null]
+4890 0 obj <<
+/D [4888 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4917 0 obj <<
+4887 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4924 0 obj <<
+4894 0 obj <<
 /Length 691       
 /Filter /FlateDecode
 >>
@@ -26891,21 +26115,21 @@
 LUäÍúUȸ'1ÌF#/”3ß×ù/;g£|hneÁ%ü&VóÚ\Í벚•ÚZÝÙ™]£§fK€…so`½6‚ºÈ´×T×¾¿³v¨:ÏÆ»1€*x"‹›Oüp:×^p°Œ³Üòež››×E¹D˜åµ	-†yÝL?\¸9ÇÛÂ6¢¨¼PdÓ©ç0éÚعŸ¬,?Îa©ÝV<¼·šÞ<ãþ g'c
 endstream
 endobj
-4923 0 obj <<
+4893 0 obj <<
 /Type /Page
-/Contents 4924 0 R
-/Resources 4922 0 R
+/Contents 4894 0 R
+/Resources 4892 0 R
 /MediaBox [0 0 612 792]
-/Parent 4921 0 R
+/Parent 4891 0 R
 >> endobj
-4925 0 obj <<
-/D [4923 0 R /XYZ 100.892 685.529 null]
+4895 0 obj <<
+/D [4893 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4922 0 obj <<
+4892 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4929 0 obj <<
+4899 0 obj <<
 /Length 2258      
 /Filter /FlateDecode
 >>
@@ -26933,35 +26157,35 @@
 Ù³<vê´ïôɈ"Îq”8Ë8ì\¨‡3ù…Ôã¬(䘹Aãùx‚óÉ1_7fa÷˜6ÂÙ»Å1ýf\ª´T†Æ2Ÿ-¼¬µ&þTR3uÙË2ÅQéãÆÛ›¦ï!ùmwÖJBaªN˜Ö·|]â`þ`/‚ZZK½ôçǘt3]~2j¡çëÿº$,ØÃ$BšPó!fù~¡7øydëz
 endstream
 endobj
-4928 0 obj <<
+4898 0 obj <<
 /Type /Page
-/Contents 4929 0 R
-/Resources 4927 0 R
+/Contents 4899 0 R
+/Resources 4897 0 R
 /MediaBox [0 0 612 792]
-/Parent 4921 0 R
-/Annots [ 4926 0 R ]
+/Parent 4891 0 R
+/Annots [ 4896 0 R ]
 >> endobj
-4926 0 obj <<
+4896 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [251.069 342.177 320.789 353.867]
 /Subtype /Link
 /A << /S /GoTo /D (sbe-idmapridex) >>
 >> endobj
-4930 0 obj <<
-/D [4928 0 R /XYZ 151.701 685.529 null]
+4900 0 obj <<
+/D [4898 0 R /XYZ 151.701 685.529 null]
 >> endobj
 550 0 obj <<
-/D [4928 0 R /XYZ 151.701 660.623 null]
+/D [4898 0 R /XYZ 151.701 660.623 null]
 >> endobj
-4931 0 obj <<
-/D [4928 0 R /XYZ 151.701 644.027 null]
+4901 0 obj <<
+/D [4898 0 R /XYZ 151.701 644.027 null]
 >> endobj
-4927 0 obj <<
+4897 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F17 1131 0 R /F15 1133 0 R /F60 1917 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4935 0 obj <<
+4905 0 obj <<
 /Length 1326      
 /Filter /FlateDecode
 >>
@@ -26975,36 +26199,36 @@
 hbÌd©í’˜¦úicA`êbÑÃÝ80íÉí¦íçðþ¸Â¨û6F_U
 endstream
 endobj
-4934 0 obj <<
+4904 0 obj <<
 /Type /Page
-/Contents 4935 0 R
-/Resources 4933 0 R
+/Contents 4905 0 R
+/Resources 4903 0 R
 /MediaBox [0 0 612 792]
-/Parent 4921 0 R
+/Parent 4891 0 R
 >> endobj
-4936 0 obj <<
-/D [4934 0 R /XYZ 100.892 685.529 null]
+4906 0 obj <<
+/D [4904 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4937 0 obj <<
-/D [4934 0 R /XYZ 100.892 531.019 null]
+4907 0 obj <<
+/D [4904 0 R /XYZ 100.892 531.019 null]
 >> endobj
-4938 0 obj <<
-/D [4934 0 R /XYZ 100.892 497.913 null]
+4908 0 obj <<
+/D [4904 0 R /XYZ 100.892 497.913 null]
 >> endobj
-4939 0 obj <<
-/D [4934 0 R /XYZ 100.892 475.325 null]
+4909 0 obj <<
+/D [4904 0 R /XYZ 100.892 475.325 null]
 >> endobj
-4940 0 obj <<
-/D [4934 0 R /XYZ 100.892 178.152 null]
+4910 0 obj <<
+/D [4904 0 R /XYZ 100.892 178.152 null]
 >> endobj
-4941 0 obj <<
-/D [4934 0 R /XYZ 100.892 142.924 null]
+4911 0 obj <<
+/D [4904 0 R /XYZ 100.892 142.924 null]
 >> endobj
-4933 0 obj <<
+4903 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R /F60 1917 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4945 0 obj <<
+4915 0 obj <<
 /Length 1463      
 /Filter /FlateDecode
 >>
@@ -27022,35 +26246,35 @@
 —y3ïí¾Â³e1›8ÿ‚ö^Àž¶æ-a5õ¯¯¸Èü{šrn¨Ãä"~Ñϐѕ›‹º(Ãñ!B|<c$•Ø½­Æö­a‰ˆ°e2Pè${hÝÓÚ³°§º]MïëeÄ üõP§’¥üðBÅ;¡ŸR4Ba²µ´ß*7âh6gmJºlé-<pCÅTa6ÛæläÄ9…‚fiæÒl6`ç›Í= ‘œÜ…¹^«®tOË?éóîêÓåÙôAÕSP¶q–Ųa°ªû|õ‚6HüNÙ¾7¿7öaþV¬\~°2qÀ4€‰ê"-–.šæ…h¿Óì=ö7¿™ÝÎ?ÌnÙÛÙõмj¾—ÆÜwûå5Ìý‚Öó4µu§‹Úï_Še¯NAücå8ga>C¡—Ýfðá¾í¿ðgç_õro
 endstream
 endobj
-4944 0 obj <<
+4914 0 obj <<
 /Type /Page
-/Contents 4945 0 R
-/Resources 4943 0 R
+/Contents 4915 0 R
+/Resources 4913 0 R
 /MediaBox [0 0 612 792]
-/Parent 4921 0 R
-/Annots [ 4942 0 R ]
+/Parent 4891 0 R
+/Annots [ 4912 0 R ]
 >> endobj
-4942 0 obj <<
+4912 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [283.129 439.601 352.849 451.291]
 /Subtype /Link
 /A << /S /GoTo /D (sbeunxa) >>
 >> endobj
-4946 0 obj <<
-/D [4944 0 R /XYZ 151.701 685.529 null]
+4916 0 obj <<
+/D [4914 0 R /XYZ 151.701 685.529 null]
 >> endobj
 554 0 obj <<
-/D [4944 0 R /XYZ 151.701 593.689 null]
+/D [4914 0 R /XYZ 151.701 593.689 null]
 >> endobj
-4947 0 obj <<
-/D [4944 0 R /XYZ 151.701 564.576 null]
+4917 0 obj <<
+/D [4914 0 R /XYZ 151.701 564.576 null]
 >> endobj
-4943 0 obj <<
+4913 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F17 1131 0 R /F15 1133 0 R /F60 1917 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4951 0 obj <<
+4921 0 obj <<
 /Length 1119      
 /Filter /FlateDecode
 >>
@@ -27066,22 +26290,22 @@
 ×C04ßãGqBÿnš»M
 endstream
 endobj
-4950 0 obj <<
+4920 0 obj <<
 /Type /Page
-/Contents 4951 0 R
-/Resources 4949 0 R
+/Contents 4921 0 R
+/Resources 4919 0 R
 /MediaBox [0 0 612 792]
-/Parent 4921 0 R
+/Parent 4891 0 R
 >> endobj
-4952 0 obj <<
-/D [4950 0 R /XYZ 100.892 685.529 null]
+4922 0 obj <<
+/D [4920 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4949 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R /F89 2333 0 R /F73 2334 0 R >>
-/XObject << /Im3 2328 0 R >>
+4919 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R /F89 2330 0 R /F73 2331 0 R >>
+/XObject << /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4956 0 obj <<
+4926 0 obj <<
 /Length 1178      
 /Filter /FlateDecode
 >>
@@ -27097,40 +26321,40 @@
 Ñ3î¤ày¡†þäIûRÕSO		\Lb"Å`ðS§. &©Ÿû4‰Îûe áü6=…§ÐΏØ´íîr>ïºﲼı힜\ÌüX~@ÏŸà˜ÿ õNÆ
 endstream
 endobj
-4955 0 obj <<
+4925 0 obj <<
 /Type /Page
-/Contents 4956 0 R
-/Resources 4954 0 R
+/Contents 4926 0 R
+/Resources 4924 0 R
 /MediaBox [0 0 612 792]
-/Parent 4962 0 R
-/Annots [ 4953 0 R ]
+/Parent 4932 0 R
+/Annots [ 4923 0 R ]
 >> endobj
-4953 0 obj <<
+4923 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 265.891 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.padl.com)>>
 >> endobj
-4957 0 obj <<
-/D [4955 0 R /XYZ 151.701 685.529 null]
+4927 0 obj <<
+/D [4925 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4958 0 obj <<
-/D [4955 0 R /XYZ 151.701 265.818 null]
+4928 0 obj <<
+/D [4925 0 R /XYZ 151.701 265.818 null]
 >> endobj
-4959 0 obj <<
-/D [4955 0 R /XYZ 151.701 242.454 null]
+4929 0 obj <<
+/D [4925 0 R /XYZ 151.701 242.454 null]
 >> endobj
-4960 0 obj <<
-/D [4955 0 R /XYZ 151.701 207.662 null]
+4930 0 obj <<
+/D [4925 0 R /XYZ 151.701 207.662 null]
 >> endobj
-4961 0 obj <<
-/D [4955 0 R /XYZ 151.701 182.176 null]
+4931 0 obj <<
+/D [4925 0 R /XYZ 151.701 182.176 null]
 >> endobj
-4954 0 obj <<
+4924 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R /F30 1928 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4965 0 obj <<
+4935 0 obj <<
 /Length 1170      
 /Filter /FlateDecode
 >>
@@ -27146,33 +26370,33 @@
 2
 endstream
 endobj
-4964 0 obj <<
+4934 0 obj <<
 /Type /Page
-/Contents 4965 0 R
-/Resources 4963 0 R
+/Contents 4935 0 R
+/Resources 4933 0 R
 /MediaBox [0 0 612 792]
-/Parent 4962 0 R
+/Parent 4932 0 R
 >> endobj
-4966 0 obj <<
-/D [4964 0 R /XYZ 100.892 685.529 null]
+4936 0 obj <<
+/D [4934 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4967 0 obj <<
-/D [4964 0 R /XYZ 100.892 660.623 null]
+4937 0 obj <<
+/D [4934 0 R /XYZ 100.892 660.623 null]
 >> endobj
-4968 0 obj <<
-/D [4964 0 R /XYZ 100.892 384.487 null]
+4938 0 obj <<
+/D [4934 0 R /XYZ 100.892 384.487 null]
 >> endobj
-4969 0 obj <<
-/D [4964 0 R /XYZ 100.892 274.157 null]
+4939 0 obj <<
+/D [4934 0 R /XYZ 100.892 274.157 null]
 >> endobj
-4970 0 obj <<
-/D [4964 0 R /XYZ 100.892 190.927 null]
+4940 0 obj <<
+/D [4934 0 R /XYZ 100.892 190.927 null]
 >> endobj
-4963 0 obj <<
+4933 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4975 0 obj <<
+4945 0 obj <<
 /Length 1536      
 /Filter /FlateDecode
 >>
@@ -27188,41 +26412,41 @@
 ð»*ÀËÓ„môõ4¦BxLèÍ4RÃØ]/×àÓ{Kôp¤„,ƒº^àÉB¦¤‰dØΑ¢êÒWžDƒïß¼ú›˜Áþ¹‘øÓ$ÅT#›)™§ýÇÝÔåл~‡öÃþ‚ÿ‚^4_ä  <-êCL”³@*H…ÙÕQxáêæO¼Ž>3௨AZF» î|ô™¾P	ÿð Å»
 endstream
 endobj
-4974 0 obj <<
+4944 0 obj <<
 /Type /Page
-/Contents 4975 0 R
-/Resources 4973 0 R
+/Contents 4945 0 R
+/Resources 4943 0 R
 /MediaBox [0 0 612 792]
-/Parent 4962 0 R
-/Annots [ 4971 0 R ]
+/Parent 4932 0 R
+/Annots [ 4941 0 R ]
 >> endobj
-4971 0 obj <<
+4941 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [389.674 493.369 464.849 505.059]
 /Subtype /Link
 /A << /S /GoTo /D (sbewinbindex) >>
 >> endobj
-4976 0 obj <<
-/D [4974 0 R /XYZ 151.701 685.529 null]
+4946 0 obj <<
+/D [4944 0 R /XYZ 151.701 685.529 null]
 >> endobj
 558 0 obj <<
-/D [4974 0 R /XYZ 151.701 620.599 null]
+/D [4944 0 R /XYZ 151.701 620.599 null]
 >> endobj
-4977 0 obj <<
-/D [4974 0 R /XYZ 151.701 579.987 null]
+4947 0 obj <<
+/D [4944 0 R /XYZ 151.701 579.987 null]
 >> endobj
-4978 0 obj <<
-/D [4974 0 R /XYZ 151.701 154.099 null]
+4948 0 obj <<
+/D [4944 0 R /XYZ 151.701 154.099 null]
 >> endobj
-4979 0 obj <<
-/D [4974 0 R /XYZ 151.701 154.099 null]
+4949 0 obj <<
+/D [4944 0 R /XYZ 151.701 154.099 null]
 >> endobj
-4973 0 obj <<
+4943 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4986 0 obj <<
+4956 0 obj <<
 /Length 1868      
 /Filter /FlateDecode
 >>
@@ -27247,58 +26471,58 @@
 šüîk!ÉÀ“§›Ž†$•"	&‰Ÿ/"STŒ¯Ùœf"RéÄæ‘õðˆÿZ¾°
 endstream
 endobj
-4985 0 obj <<
+4955 0 obj <<
 /Type /Page
-/Contents 4986 0 R
-/Resources 4984 0 R
+/Contents 4956 0 R
+/Resources 4954 0 R
 /MediaBox [0 0 612 792]
-/Parent 4962 0 R
-/Annots [ 4972 0 R 4981 0 R 4991 0 R 4982 0 R ]
+/Parent 4932 0 R
+/Annots [ 4942 0 R 4951 0 R 4961 0 R 4952 0 R ]
 >> endobj
-4972 0 obj <<
+4942 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 149.838 299.813 162.789]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.microsoft.com/windows/sfu/)>>
 >> endobj
-4981 0 obj <<
+4951 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 140.174 460.543 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.geekcomix.com/cgi-bin/classnotes/wiki.pl?LDAP01/An_Alternative_Approach)>>
 >> endobj
-4991 0 obj <<
+4961 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [99.895 127.92 196.034 138.68]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.geekcomix.com/cgi-bin/classnotes/wiki.pl?LDAP01/An_Alternative_Approach)>>
 >> endobj
-4982 0 obj <<
+4952 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 215.082 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.padl.com)>>
 >> endobj
-4987 0 obj <<
-/D [4985 0 R /XYZ 100.892 685.529 null]
+4957 0 obj <<
+/D [4955 0 R /XYZ 100.892 685.529 null]
 >> endobj
-4988 0 obj <<
-/D [4985 0 R /XYZ 100.892 624.934 null]
+4958 0 obj <<
+/D [4955 0 R /XYZ 100.892 624.934 null]
 >> endobj
-4989 0 obj <<
-/D [4985 0 R /XYZ 100.892 624.934 null]
+4959 0 obj <<
+/D [4955 0 R /XYZ 100.892 624.934 null]
 >> endobj
 562 0 obj <<
-/D [4985 0 R /XYZ 100.892 562.176 null]
+/D [4955 0 R /XYZ 100.892 562.176 null]
 >> endobj
-4990 0 obj <<
-/D [4985 0 R /XYZ 100.892 531.875 null]
+4960 0 obj <<
+/D [4955 0 R /XYZ 100.892 531.875 null]
 >> endobj
-4984 0 obj <<
+4954 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F30 1928 0 R /F17 1131 0 R /F54 1912 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-4995 0 obj <<
+4965 0 obj <<
 /Length 1988      
 /Filter /FlateDecode
 >>
@@ -27326,34 +26550,34 @@
 Ýœy°ß‚åëׇÍw¡’(ËÒÿô#”ŒTvyÇ¡w)‚4*ó<£‰LEBY¹zXÉ–W –Ò+C{³ÿðæ¥#_Šç‘È.¯\'çο¿¿yy‰žMï;€p÷fùê4¾ÙÅ'ô¯#KÍwB¨¨ÈË`g¥«÷‘ÿ‡âµîé}ä¿k’+Í¿x?[¸õßàåQ
 endstream
 endobj
-4994 0 obj <<
+4964 0 obj <<
 /Type /Page
-/Contents 4995 0 R
-/Resources 4993 0 R
+/Contents 4965 0 R
+/Resources 4963 0 R
 /MediaBox [0 0 612 792]
-/Parent 4962 0 R
-/Annots [ 4983 0 R 4992 0 R ]
+/Parent 4932 0 R
+/Annots [ 4953 0 R 4962 0 R ]
 >> endobj
-4983 0 obj <<
+4953 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 127.92 280.013 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.vintela.com)>>
 >> endobj
-4992 0 obj <<
+4962 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 284.72 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.centrify.com)>>
 >> endobj
-4996 0 obj <<
-/D [4994 0 R /XYZ 151.701 685.529 null]
+4966 0 obj <<
+/D [4964 0 R /XYZ 151.701 685.529 null]
 >> endobj
-4993 0 obj <<
+4963 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F54 1912 0 R /F15 1133 0 R /F30 1928 0 R /F59 1905 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5003 0 obj <<
+4973 0 obj <<
 /Length 1768      
 /Filter /FlateDecode
 >>
@@ -27379,79 +26603,79 @@
 ¸î[Ån¬8ÑH[œCÁÑØYTøoêÅY±ìÍ`v#ûÁs•׬Ä_¸˜ØÜCåêÚ@í	8 <ÁÄüÁÄYüg§üÇçÅó/œÅÿ{ätòÍgÎ$Êhæ”YA[æ!uô½˜9qÅþ¿’[#À…7<. {ë•£ªÜ\¨Ç}o·«ßµ^ð·
 endstream
 endobj
-5002 0 obj <<
+4972 0 obj <<
 /Type /Page
-/Contents 5003 0 R
-/Resources 5001 0 R
+/Contents 4973 0 R
+/Resources 4971 0 R
 /MediaBox [0 0 612 792]
-/Parent 4962 0 R
-/Annots [ 4997 0 R 4998 0 R 4999 0 R ]
+/Parent 4932 0 R
+/Annots [ 4967 0 R 4968 0 R 4969 0 R ]
 >> endobj
-4997 0 obj <<
+4967 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [318.344 571.714 381.123 583.404]
 /Subtype /Link
 /A << /S /GoTo /D (wdcsdm) >>
 >> endobj
-4998 0 obj <<
+4968 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [314.834 359.224 390.009 371.216]
 /Subtype /Link
 /A << /S /GoTo /D (ch9-pamwnbdlogin) >>
 >> endobj
-4999 0 obj <<
+4969 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [318.344 166.275 381.123 177.964]
 /Subtype /Link
 /A << /S /GoTo /D (adssdm) >>
 >> endobj
-5004 0 obj <<
-/D [5002 0 R /XYZ 100.892 685.529 null]
+4974 0 obj <<
+/D [4972 0 R /XYZ 100.892 685.529 null]
 >> endobj
 566 0 obj <<
-/D [5002 0 R /XYZ 100.892 660.623 null]
+/D [4972 0 R /XYZ 100.892 660.623 null]
 >> endobj
-5005 0 obj <<
-/D [5002 0 R /XYZ 100.892 644.027 null]
+4975 0 obj <<
+/D [4972 0 R /XYZ 100.892 644.027 null]
 >> endobj
-5006 0 obj <<
-/D [5002 0 R /XYZ 100.892 595.88 null]
+4976 0 obj <<
+/D [4972 0 R /XYZ 100.892 595.88 null]
 >> endobj
-5007 0 obj <<
-/D [5002 0 R /XYZ 100.892 561.282 null]
+4977 0 obj <<
+/D [4972 0 R /XYZ 100.892 561.282 null]
 >> endobj
-5008 0 obj <<
-/D [5002 0 R /XYZ 100.892 497.162 null]
+4978 0 obj <<
+/D [4972 0 R /XYZ 100.892 497.162 null]
 >> endobj
-5009 0 obj <<
-/D [5002 0 R /XYZ 100.892 394.818 null]
+4979 0 obj <<
+/D [4972 0 R /XYZ 100.892 394.818 null]
 >> endobj
-5010 0 obj <<
-/D [5002 0 R /XYZ 100.892 360.22 null]
+4980 0 obj <<
+/D [4972 0 R /XYZ 100.892 360.22 null]
 >> endobj
-5011 0 obj <<
-/D [5002 0 R /XYZ 100.892 312.073 null]
+4981 0 obj <<
+/D [4972 0 R /XYZ 100.892 312.073 null]
 >> endobj
 570 0 obj <<
-/D [5002 0 R /XYZ 100.892 263.152 null]
+/D [4972 0 R /XYZ 100.892 263.152 null]
 >> endobj
-5012 0 obj <<
-/D [5002 0 R /XYZ 100.892 238.588 null]
+4982 0 obj <<
+/D [4972 0 R /XYZ 100.892 238.588 null]
 >> endobj
-5013 0 obj <<
-/D [5002 0 R /XYZ 100.892 188.32 null]
+4983 0 obj <<
+/D [4972 0 R /XYZ 100.892 188.32 null]
 >> endobj
-5014 0 obj <<
-/D [5002 0 R /XYZ 100.892 155.843 null]
+4984 0 obj <<
+/D [4972 0 R /XYZ 100.892 155.843 null]
 >> endobj
-5001 0 obj <<
+4971 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5019 0 obj <<
+4989 0 obj <<
 /Length 1931      
 /Filter /FlateDecode
 >>
@@ -27475,54 +26699,54 @@
 +ðîÕ|ùÇbm©õ s’Øȱ¤M‹±ý‚Œƒg_±Å`á¿[.4CB<Œ˜°¸»}:0š‰àÓšþuBö3zë5ú³HL³H7/¨á÷õvõ7èjN
 endstream
 endobj
-5018 0 obj <<
+4988 0 obj <<
 /Type /Page
-/Contents 5019 0 R
-/Resources 5017 0 R
+/Contents 4989 0 R
+/Resources 4987 0 R
 /MediaBox [0 0 612 792]
-/Parent 5026 0 R
-/Annots [ 5000 0 R 5016 0 R ]
+/Parent 4996 0 R
+/Annots [ 4970 0 R 4986 0 R ]
 >> endobj
-5000 0 obj <<
+4970 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.523 619.448 307.698 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (ch9-rhsysauth) >>
 >> endobj
-5016 0 obj <<
+4986 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [365.644 480.955 440.818 492.948]
 /Subtype /Link
 /A << /S /GoTo /D (ch9-pamwnbdlogin) >>
 >> endobj
-5020 0 obj <<
-/D [5018 0 R /XYZ 151.701 685.529 null]
+4990 0 obj <<
+/D [4988 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5021 0 obj <<
-/D [5018 0 R /XYZ 151.701 620.444 null]
+4991 0 obj <<
+/D [4988 0 R /XYZ 151.701 620.444 null]
 >> endobj
-5022 0 obj <<
-/D [5018 0 R /XYZ 151.701 517.173 null]
+4992 0 obj <<
+/D [4988 0 R /XYZ 151.701 517.173 null]
 >> endobj
-5023 0 obj <<
-/D [5018 0 R /XYZ 151.701 481.951 null]
+4993 0 obj <<
+/D [4988 0 R /XYZ 151.701 481.951 null]
 >> endobj
-5024 0 obj <<
-/D [5018 0 R /XYZ 151.701 433.18 null]
+4994 0 obj <<
+/D [4988 0 R /XYZ 151.701 433.18 null]
 >> endobj
 574 0 obj <<
-/D [5018 0 R /XYZ 151.701 382.165 null]
+/D [4988 0 R /XYZ 151.701 382.165 null]
 >> endobj
-5025 0 obj <<
-/D [5018 0 R /XYZ 151.701 354.653 null]
+4995 0 obj <<
+/D [4988 0 R /XYZ 151.701 354.653 null]
 >> endobj
-5017 0 obj <<
+4987 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R /F17 1131 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5030 0 obj <<
+5000 0 obj <<
 /Length 1755      
 /Filter /FlateDecode
 >>
@@ -27538,30 +26762,30 @@
 —’¢ô¿ Rò„>ÚFܹ…7÷Lºÿºxt #ùhJðÐJH „Â+öèŽèo\bÿÆÑn;:-EOœÚ:»Çë¿4PÙÅ»À O©TX¥€ïz{ÑtŽ{mQæ©{€oªþdîÈà…Þ­0÷Pí,bóMo´Ý¿›ýù›ÖïWÿèÙLS
 endstream
 endobj
-5029 0 obj <<
+4999 0 obj <<
 /Type /Page
-/Contents 5030 0 R
-/Resources 5028 0 R
+/Contents 5000 0 R
+/Resources 4998 0 R
 /MediaBox [0 0 612 792]
-/Parent 5026 0 R
+/Parent 4996 0 R
 >> endobj
-5031 0 obj <<
-/D [5029 0 R /XYZ 100.892 685.529 null]
+5001 0 obj <<
+/D [4999 0 R /XYZ 100.892 685.529 null]
 >> endobj
 578 0 obj <<
-/D [5029 0 R /XYZ 100.892 541.075 null]
+/D [4999 0 R /XYZ 100.892 541.075 null]
 >> endobj
-5032 0 obj <<
-/D [5029 0 R /XYZ 100.892 513.254 null]
+5002 0 obj <<
+/D [4999 0 R /XYZ 100.892 513.254 null]
 >> endobj
-5033 0 obj <<
-/D [5029 0 R /XYZ 100.892 425.306 null]
+5003 0 obj <<
+/D [4999 0 R /XYZ 100.892 425.306 null]
 >> endobj
-5028 0 obj <<
+4998 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F54 1912 0 R /F15 1133 0 R /F17 1131 0 R /F51 1134 0 R /F60 1917 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5036 0 obj <<
+5006 0 obj <<
 /Length 2093      
 /Filter /FlateDecode
 >>
@@ -27580,21 +26804,21 @@
 yzZþ8Ó:ݳ¬Rl.YäááÈ0§ìæõ›ÇÕÿ ŠLhÜ
 endstream
 endobj
-5035 0 obj <<
+5005 0 obj <<
 /Type /Page
-/Contents 5036 0 R
-/Resources 5034 0 R
+/Contents 5006 0 R
+/Resources 5004 0 R
 /MediaBox [0 0 612 792]
-/Parent 5026 0 R
+/Parent 4996 0 R
 >> endobj
-5037 0 obj <<
-/D [5035 0 R /XYZ 151.701 685.529 null]
+5007 0 obj <<
+/D [5005 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5034 0 obj <<
+5004 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5040 0 obj <<
+5010 0 obj <<
 /Length 2241      
 /Filter /FlateDecode
 >>
@@ -27625,21 +26849,21 @@
 –ÀÓ‘ÀâùÏ×ùûÝÓÝÿ ”î‰
 endstream
 endobj
-5039 0 obj <<
+5009 0 obj <<
 /Type /Page
-/Contents 5040 0 R
-/Resources 5038 0 R
+/Contents 5010 0 R
+/Resources 5008 0 R
 /MediaBox [0 0 612 792]
-/Parent 5026 0 R
+/Parent 4996 0 R
 >> endobj
-5041 0 obj <<
-/D [5039 0 R /XYZ 100.892 685.529 null]
+5011 0 obj <<
+/D [5009 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5038 0 obj <<
+5008 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F51 1134 0 R /F60 1917 0 R /F59 1905 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5044 0 obj <<
+5014 0 obj <<
 /Length 1933      
 /Filter /FlateDecode
 >>
@@ -27659,21 +26883,21 @@
 §XßšáÝ»wKh³Ž@ ȠϢ™Ûzq­ÑYlº$™2q-µ¢"ë"LŸ$£Ò/a¬Èá[jjÏÑÓ³¯j%%&°wuœ@H¥Œãj|HªÌu?÷14\Ä—[›¡X·ÖB“Wì¾ñ"„gýôªgh‡ëK÷_Ð-ÆÎwü‚å	i„Ä¡-M_Ó³Ÿæê.¤ÝÑçY7%AôÞa÷wè*+|L7ΦÄ.:Œ™ú¢Á3@¯ÿž…éœÁ3.õø#r»CÏ\gu0³H‚ðúawÖì0̏FÄÂe55°ü¬ŸþÇ‹ †Véº
 endstream
 endobj
-5043 0 obj <<
+5013 0 obj <<
 /Type /Page
-/Contents 5044 0 R
-/Resources 5042 0 R
+/Contents 5014 0 R
+/Resources 5012 0 R
 /MediaBox [0 0 612 792]
-/Parent 5026 0 R
+/Parent 4996 0 R
 >> endobj
-5045 0 obj <<
-/D [5043 0 R /XYZ 151.701 685.529 null]
+5015 0 obj <<
+/D [5013 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5042 0 obj <<
+5012 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F60 1917 0 R /F59 1905 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5048 0 obj <<
+5018 0 obj <<
 /Length 1383      
 /Filter /FlateDecode
 >>
@@ -27694,21 +26918,21 @@
 ã‡}[Õ/¤ð§mÂã qíð¾BŒ]8¼Úøfá¯ðø¸¾ðÏðÒÞG
 endstream
 endobj
-5047 0 obj <<
+5017 0 obj <<
 /Type /Page
-/Contents 5048 0 R
-/Resources 5046 0 R
+/Contents 5018 0 R
+/Resources 5016 0 R
 /MediaBox [0 0 612 792]
-/Parent 5026 0 R
+/Parent 4996 0 R
 >> endobj
-5049 0 obj <<
-/D [5047 0 R /XYZ 100.892 685.529 null]
+5019 0 obj <<
+/D [5017 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5046 0 obj <<
+5016 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5052 0 obj <<
+5022 0 obj <<
 /Length 4079      
 /Filter /FlateDecode
 >>
@@ -27757,156 +26981,156 @@
 w]•?ŠE­øYǍ.ùŸX”ô›Mt~‘ÒþŸXúöãµÏÑÿÛÿZÇɹI‡žÝ5ÿÏ}[û?zÇ­
 endstream
 endobj
-5051 0 obj <<
+5021 0 obj <<
 /Type /Page
-/Contents 5052 0 R
-/Resources 5050 0 R
+/Contents 5022 0 R
+/Resources 5020 0 R
 /MediaBox [0 0 612 792]
-/Parent 5097 0 R
+/Parent 5067 0 R
 >> endobj
-5053 0 obj <<
-/D [5051 0 R /XYZ 151.701 685.529 null]
+5023 0 obj <<
+/D [5021 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1606 0 obj <<
-/D [5051 0 R /XYZ 151.701 660.623 null]
+/D [5021 0 R /XYZ 151.701 660.623 null]
 >> endobj
-4782 0 obj <<
-/D [5051 0 R /XYZ 151.701 632.325 null]
+4754 0 obj <<
+/D [5021 0 R /XYZ 151.701 632.325 null]
 >> endobj
-5054 0 obj <<
-/D [5051 0 R /XYZ 151.701 626.347 null]
+5024 0 obj <<
+/D [5021 0 R /XYZ 151.701 626.347 null]
 >> endobj
-5055 0 obj <<
-/D [5051 0 R /XYZ 151.701 632.623 null]
+5025 0 obj <<
+/D [5021 0 R /XYZ 151.701 632.623 null]
 >> endobj
-5056 0 obj <<
-/D [5051 0 R /XYZ 151.701 620.668 null]
+5026 0 obj <<
+/D [5021 0 R /XYZ 151.701 620.668 null]
 >> endobj
-5057 0 obj <<
-/D [5051 0 R /XYZ 151.701 608.713 null]
+5027 0 obj <<
+/D [5021 0 R /XYZ 151.701 608.713 null]
 >> endobj
-5058 0 obj <<
-/D [5051 0 R /XYZ 151.701 596.758 null]
+5028 0 obj <<
+/D [5021 0 R /XYZ 151.701 596.758 null]
 >> endobj
-5059 0 obj <<
-/D [5051 0 R /XYZ 151.701 584.803 null]
+5029 0 obj <<
+/D [5021 0 R /XYZ 151.701 584.803 null]
 >> endobj
-5060 0 obj <<
-/D [5051 0 R /XYZ 151.701 572.848 null]
+5030 0 obj <<
+/D [5021 0 R /XYZ 151.701 572.848 null]
 >> endobj
-5061 0 obj <<
-/D [5051 0 R /XYZ 151.701 560.892 null]
+5031 0 obj <<
+/D [5021 0 R /XYZ 151.701 560.892 null]
 >> endobj
-5062 0 obj <<
-/D [5051 0 R /XYZ 151.701 548.937 null]
+5032 0 obj <<
+/D [5021 0 R /XYZ 151.701 548.937 null]
 >> endobj
-5063 0 obj <<
-/D [5051 0 R /XYZ 151.701 536.982 null]
+5033 0 obj <<
+/D [5021 0 R /XYZ 151.701 536.982 null]
 >> endobj
-5064 0 obj <<
-/D [5051 0 R /XYZ 151.701 525.027 null]
+5034 0 obj <<
+/D [5021 0 R /XYZ 151.701 525.027 null]
 >> endobj
-5065 0 obj <<
-/D [5051 0 R /XYZ 151.701 513.072 null]
+5035 0 obj <<
+/D [5021 0 R /XYZ 151.701 513.072 null]
 >> endobj
-5066 0 obj <<
-/D [5051 0 R /XYZ 151.701 501.117 null]
+5036 0 obj <<
+/D [5021 0 R /XYZ 151.701 501.117 null]
 >> endobj
-5067 0 obj <<
-/D [5051 0 R /XYZ 151.701 489.161 null]
+5037 0 obj <<
+/D [5021 0 R /XYZ 151.701 489.161 null]
 >> endobj
-5068 0 obj <<
-/D [5051 0 R /XYZ 151.701 477.206 null]
+5038 0 obj <<
+/D [5021 0 R /XYZ 151.701 477.206 null]
 >> endobj
-5069 0 obj <<
-/D [5051 0 R /XYZ 151.701 465.251 null]
+5039 0 obj <<
+/D [5021 0 R /XYZ 151.701 465.251 null]
 >> endobj
-5070 0 obj <<
-/D [5051 0 R /XYZ 151.701 453.296 null]
+5040 0 obj <<
+/D [5021 0 R /XYZ 151.701 453.296 null]
 >> endobj
-5071 0 obj <<
-/D [5051 0 R /XYZ 151.701 441.341 null]
+5041 0 obj <<
+/D [5021 0 R /XYZ 151.701 441.341 null]
 >> endobj
-5072 0 obj <<
-/D [5051 0 R /XYZ 151.701 429.386 null]
+5042 0 obj <<
+/D [5021 0 R /XYZ 151.701 429.386 null]
 >> endobj
-5073 0 obj <<
-/D [5051 0 R /XYZ 151.701 417.43 null]
+5043 0 obj <<
+/D [5021 0 R /XYZ 151.701 417.43 null]
 >> endobj
-5074 0 obj <<
-/D [5051 0 R /XYZ 151.701 405.475 null]
+5044 0 obj <<
+/D [5021 0 R /XYZ 151.701 405.475 null]
 >> endobj
-5075 0 obj <<
-/D [5051 0 R /XYZ 151.701 393.52 null]
+5045 0 obj <<
+/D [5021 0 R /XYZ 151.701 393.52 null]
 >> endobj
-5076 0 obj <<
-/D [5051 0 R /XYZ 151.701 381.565 null]
+5046 0 obj <<
+/D [5021 0 R /XYZ 151.701 381.565 null]
 >> endobj
-5077 0 obj <<
-/D [5051 0 R /XYZ 151.701 369.61 null]
+5047 0 obj <<
+/D [5021 0 R /XYZ 151.701 369.61 null]
 >> endobj
-5078 0 obj <<
-/D [5051 0 R /XYZ 151.701 357.655 null]
+5048 0 obj <<
+/D [5021 0 R /XYZ 151.701 357.655 null]
 >> endobj
-5079 0 obj <<
-/D [5051 0 R /XYZ 151.701 345.699 null]
+5049 0 obj <<
+/D [5021 0 R /XYZ 151.701 345.699 null]
 >> endobj
-5080 0 obj <<
-/D [5051 0 R /XYZ 151.701 333.744 null]
+5050 0 obj <<
+/D [5021 0 R /XYZ 151.701 333.744 null]
 >> endobj
-5081 0 obj <<
-/D [5051 0 R /XYZ 151.701 321.789 null]
+5051 0 obj <<
+/D [5021 0 R /XYZ 151.701 321.789 null]
 >> endobj
-5082 0 obj <<
-/D [5051 0 R /XYZ 151.701 309.834 null]
+5052 0 obj <<
+/D [5021 0 R /XYZ 151.701 309.834 null]
 >> endobj
-5083 0 obj <<
-/D [5051 0 R /XYZ 151.701 297.879 null]
+5053 0 obj <<
+/D [5021 0 R /XYZ 151.701 297.879 null]
 >> endobj
-5084 0 obj <<
-/D [5051 0 R /XYZ 151.701 285.924 null]
+5054 0 obj <<
+/D [5021 0 R /XYZ 151.701 285.924 null]
 >> endobj
-5085 0 obj <<
-/D [5051 0 R /XYZ 151.701 273.968 null]
+5055 0 obj <<
+/D [5021 0 R /XYZ 151.701 273.968 null]
 >> endobj
-5086 0 obj <<
-/D [5051 0 R /XYZ 151.701 262.013 null]
+5056 0 obj <<
+/D [5021 0 R /XYZ 151.701 262.013 null]
 >> endobj
-5087 0 obj <<
-/D [5051 0 R /XYZ 151.701 250.058 null]
+5057 0 obj <<
+/D [5021 0 R /XYZ 151.701 250.058 null]
 >> endobj
-5088 0 obj <<
-/D [5051 0 R /XYZ 151.701 238.103 null]
+5058 0 obj <<
+/D [5021 0 R /XYZ 151.701 238.103 null]
 >> endobj
-5089 0 obj <<
-/D [5051 0 R /XYZ 151.701 226.148 null]
+5059 0 obj <<
+/D [5021 0 R /XYZ 151.701 226.148 null]
 >> endobj
-5090 0 obj <<
-/D [5051 0 R /XYZ 151.701 214.193 null]
+5060 0 obj <<
+/D [5021 0 R /XYZ 151.701 214.193 null]
 >> endobj
-5091 0 obj <<
-/D [5051 0 R /XYZ 151.701 202.237 null]
+5061 0 obj <<
+/D [5021 0 R /XYZ 151.701 202.237 null]
 >> endobj
-5092 0 obj <<
-/D [5051 0 R /XYZ 151.701 190.282 null]
+5062 0 obj <<
+/D [5021 0 R /XYZ 151.701 190.282 null]
 >> endobj
-5093 0 obj <<
-/D [5051 0 R /XYZ 151.701 178.327 null]
+5063 0 obj <<
+/D [5021 0 R /XYZ 151.701 178.327 null]
 >> endobj
-5094 0 obj <<
-/D [5051 0 R /XYZ 151.701 166.372 null]
+5064 0 obj <<
+/D [5021 0 R /XYZ 151.701 166.372 null]
 >> endobj
-5095 0 obj <<
-/D [5051 0 R /XYZ 151.701 154.417 null]
+5065 0 obj <<
+/D [5021 0 R /XYZ 151.701 154.417 null]
 >> endobj
-5096 0 obj <<
-/D [5051 0 R /XYZ 151.701 142.462 null]
+5066 0 obj <<
+/D [5021 0 R /XYZ 151.701 142.462 null]
 >> endobj
-5050 0 obj <<
+5020 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5100 0 obj <<
+5070 0 obj <<
 /Length 722       
 /Filter /FlateDecode
 >>
@@ -27921,33 +27145,33 @@
 ¾.ê‹VEWakó s½üW—I­UÛ&¸œØ[óžËê¼0eKƒÒïŸ4M°ü3x®® ¼ÈõÝ
 endstream
 endobj
-5099 0 obj <<
+5069 0 obj <<
 /Type /Page
-/Contents 5100 0 R
-/Resources 5098 0 R
+/Contents 5070 0 R
+/Resources 5068 0 R
 /MediaBox [0 0 612 792]
-/Parent 5097 0 R
+/Parent 5067 0 R
 >> endobj
-5101 0 obj <<
-/D [5099 0 R /XYZ 100.892 685.529 null]
+5071 0 obj <<
+/D [5069 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1607 0 obj <<
-/D [5099 0 R /XYZ 100.892 605.072 null]
+/D [5069 0 R /XYZ 100.892 605.072 null]
 >> endobj
-4795 0 obj <<
-/D [5099 0 R /XYZ 100.892 573.44 null]
+4767 0 obj <<
+/D [5069 0 R /XYZ 100.892 573.44 null]
 >> endobj
 1608 0 obj <<
-/D [5099 0 R /XYZ 100.892 384.231 null]
+/D [5069 0 R /XYZ 100.892 384.231 null]
 >> endobj
-4788 0 obj <<
-/D [5099 0 R /XYZ 100.892 355.327 null]
+4760 0 obj <<
+/D [5069 0 R /XYZ 100.892 355.327 null]
 >> endobj
-5098 0 obj <<
+5068 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5104 0 obj <<
+5074 0 obj <<
 /Length 553       
 /Filter /FlateDecode
 >>
@@ -27962,27 +27186,27 @@
 Ó~†¥ê­©L_ۋΨ²PÝè5MÝy}±“? ¡¦\¼çì׿ÝeR
 endstream
 endobj
-5103 0 obj <<
+5073 0 obj <<
 /Type /Page
-/Contents 5104 0 R
-/Resources 5102 0 R
+/Contents 5074 0 R
+/Resources 5072 0 R
 /MediaBox [0 0 612 792]
-/Parent 5097 0 R
+/Parent 5067 0 R
 >> endobj
-5105 0 obj <<
-/D [5103 0 R /XYZ 151.701 685.529 null]
+5075 0 obj <<
+/D [5073 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1609 0 obj <<
-/D [5103 0 R /XYZ 151.701 535.299 null]
+/D [5073 0 R /XYZ 151.701 535.299 null]
 >> endobj
-4789 0 obj <<
-/D [5103 0 R /XYZ 151.701 506.395 null]
+4761 0 obj <<
+/D [5073 0 R /XYZ 151.701 506.395 null]
 >> endobj
-5102 0 obj <<
+5072 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5108 0 obj <<
+5078 0 obj <<
 /Length 3758      
 /Filter /FlateDecode
 >>
@@ -28019,144 +27243,144 @@
 ~ä~Øz«ûn+þµ­d¯)¨y…Ašz¦´ÉœÒÀ?z„#F–ùM&êd‰Ÿ4:tÆo2ÑRŒ¾ZíÏÿ$M!¹¼ôèŸdêýWÇyÙäBÏžNÖ:ûZµý/Y.<÷
 endstream
 endobj
-5107 0 obj <<
+5077 0 obj <<
 /Type /Page
-/Contents 5108 0 R
-/Resources 5106 0 R
+/Contents 5078 0 R
+/Resources 5076 0 R
 /MediaBox [0 0 612 792]
-/Parent 5097 0 R
+/Parent 5067 0 R
 >> endobj
-5109 0 obj <<
-/D [5107 0 R /XYZ 100.892 685.529 null]
+5079 0 obj <<
+/D [5077 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1610 0 obj <<
-/D [5107 0 R /XYZ 100.892 640.176 null]
+/D [5077 0 R /XYZ 100.892 640.176 null]
 >> endobj
-4819 0 obj <<
-/D [5107 0 R /XYZ 100.892 611.878 null]
+4791 0 obj <<
+/D [5077 0 R /XYZ 100.892 611.878 null]
 >> endobj
-5110 0 obj <<
-/D [5107 0 R /XYZ 100.892 605.901 null]
+5080 0 obj <<
+/D [5077 0 R /XYZ 100.892 605.901 null]
 >> endobj
-5111 0 obj <<
-/D [5107 0 R /XYZ 100.892 612.177 null]
+5081 0 obj <<
+/D [5077 0 R /XYZ 100.892 612.177 null]
 >> endobj
-5112 0 obj <<
-/D [5107 0 R /XYZ 100.892 600.222 null]
+5082 0 obj <<
+/D [5077 0 R /XYZ 100.892 600.222 null]
 >> endobj
-5113 0 obj <<
-/D [5107 0 R /XYZ 100.892 588.267 null]
+5083 0 obj <<
+/D [5077 0 R /XYZ 100.892 588.267 null]
 >> endobj
-5114 0 obj <<
-/D [5107 0 R /XYZ 100.892 576.312 null]
+5084 0 obj <<
+/D [5077 0 R /XYZ 100.892 576.312 null]
 >> endobj
-5115 0 obj <<
-/D [5107 0 R /XYZ 100.892 564.356 null]
+5085 0 obj <<
+/D [5077 0 R /XYZ 100.892 564.356 null]
 >> endobj
-5116 0 obj <<
-/D [5107 0 R /XYZ 100.892 552.401 null]
+5086 0 obj <<
+/D [5077 0 R /XYZ 100.892 552.401 null]
 >> endobj
-5117 0 obj <<
-/D [5107 0 R /XYZ 100.892 540.446 null]
+5087 0 obj <<
+/D [5077 0 R /XYZ 100.892 540.446 null]
 >> endobj
-5118 0 obj <<
-/D [5107 0 R /XYZ 100.892 528.491 null]
+5088 0 obj <<
+/D [5077 0 R /XYZ 100.892 528.491 null]
 >> endobj
-5119 0 obj <<
-/D [5107 0 R /XYZ 100.892 516.536 null]
+5089 0 obj <<
+/D [5077 0 R /XYZ 100.892 516.536 null]
 >> endobj
-5120 0 obj <<
-/D [5107 0 R /XYZ 100.892 504.581 null]
+5090 0 obj <<
+/D [5077 0 R /XYZ 100.892 504.581 null]
 >> endobj
-5121 0 obj <<
-/D [5107 0 R /XYZ 100.892 492.625 null]
+5091 0 obj <<
+/D [5077 0 R /XYZ 100.892 492.625 null]
 >> endobj
-5122 0 obj <<
-/D [5107 0 R /XYZ 100.892 480.67 null]
+5092 0 obj <<
+/D [5077 0 R /XYZ 100.892 480.67 null]
 >> endobj
-5123 0 obj <<
-/D [5107 0 R /XYZ 100.892 468.715 null]
+5093 0 obj <<
+/D [5077 0 R /XYZ 100.892 468.715 null]
 >> endobj
-5124 0 obj <<
-/D [5107 0 R /XYZ 100.892 456.76 null]
+5094 0 obj <<
+/D [5077 0 R /XYZ 100.892 456.76 null]
 >> endobj
-5125 0 obj <<
-/D [5107 0 R /XYZ 100.892 444.805 null]
+5095 0 obj <<
+/D [5077 0 R /XYZ 100.892 444.805 null]
 >> endobj
-5126 0 obj <<
-/D [5107 0 R /XYZ 100.892 432.85 null]
+5096 0 obj <<
+/D [5077 0 R /XYZ 100.892 432.85 null]
 >> endobj
-5127 0 obj <<
-/D [5107 0 R /XYZ 100.892 420.894 null]
+5097 0 obj <<
+/D [5077 0 R /XYZ 100.892 420.894 null]
 >> endobj
-5128 0 obj <<
-/D [5107 0 R /XYZ 100.892 408.939 null]
+5098 0 obj <<
+/D [5077 0 R /XYZ 100.892 408.939 null]
 >> endobj
-5129 0 obj <<
-/D [5107 0 R /XYZ 100.892 396.984 null]
+5099 0 obj <<
+/D [5077 0 R /XYZ 100.892 396.984 null]
 >> endobj
-5130 0 obj <<
-/D [5107 0 R /XYZ 100.892 385.029 null]
+5100 0 obj <<
+/D [5077 0 R /XYZ 100.892 385.029 null]
 >> endobj
-5131 0 obj <<
-/D [5107 0 R /XYZ 100.892 373.074 null]
+5101 0 obj <<
+/D [5077 0 R /XYZ 100.892 373.074 null]
 >> endobj
-5132 0 obj <<
-/D [5107 0 R /XYZ 100.892 361.119 null]
+5102 0 obj <<
+/D [5077 0 R /XYZ 100.892 361.119 null]
 >> endobj
-5133 0 obj <<
-/D [5107 0 R /XYZ 100.892 349.163 null]
+5103 0 obj <<
+/D [5077 0 R /XYZ 100.892 349.163 null]
 >> endobj
-5134 0 obj <<
-/D [5107 0 R /XYZ 100.892 337.208 null]
+5104 0 obj <<
+/D [5077 0 R /XYZ 100.892 337.208 null]
 >> endobj
-5135 0 obj <<
-/D [5107 0 R /XYZ 100.892 325.253 null]
+5105 0 obj <<
+/D [5077 0 R /XYZ 100.892 325.253 null]
 >> endobj
-5136 0 obj <<
-/D [5107 0 R /XYZ 100.892 313.298 null]
+5106 0 obj <<
+/D [5077 0 R /XYZ 100.892 313.298 null]
 >> endobj
-5137 0 obj <<
-/D [5107 0 R /XYZ 100.892 301.343 null]
+5107 0 obj <<
+/D [5077 0 R /XYZ 100.892 301.343 null]
 >> endobj
-5138 0 obj <<
-/D [5107 0 R /XYZ 100.892 289.388 null]
+5108 0 obj <<
+/D [5077 0 R /XYZ 100.892 289.388 null]
 >> endobj
-5139 0 obj <<
-/D [5107 0 R /XYZ 100.892 277.432 null]
+5109 0 obj <<
+/D [5077 0 R /XYZ 100.892 277.432 null]
 >> endobj
-5140 0 obj <<
-/D [5107 0 R /XYZ 100.892 265.477 null]
+5110 0 obj <<
+/D [5077 0 R /XYZ 100.892 265.477 null]
 >> endobj
-5141 0 obj <<
-/D [5107 0 R /XYZ 100.892 253.522 null]
+5111 0 obj <<
+/D [5077 0 R /XYZ 100.892 253.522 null]
 >> endobj
-5142 0 obj <<
-/D [5107 0 R /XYZ 100.892 241.567 null]
+5112 0 obj <<
+/D [5077 0 R /XYZ 100.892 241.567 null]
 >> endobj
-5143 0 obj <<
-/D [5107 0 R /XYZ 100.892 229.612 null]
+5113 0 obj <<
+/D [5077 0 R /XYZ 100.892 229.612 null]
 >> endobj
-5144 0 obj <<
-/D [5107 0 R /XYZ 100.892 217.657 null]
+5114 0 obj <<
+/D [5077 0 R /XYZ 100.892 217.657 null]
 >> endobj
-5145 0 obj <<
-/D [5107 0 R /XYZ 100.892 205.701 null]
+5115 0 obj <<
+/D [5077 0 R /XYZ 100.892 205.701 null]
 >> endobj
-5146 0 obj <<
-/D [5107 0 R /XYZ 100.892 193.746 null]
+5116 0 obj <<
+/D [5077 0 R /XYZ 100.892 193.746 null]
 >> endobj
-5147 0 obj <<
-/D [5107 0 R /XYZ 100.892 181.791 null]
+5117 0 obj <<
+/D [5077 0 R /XYZ 100.892 181.791 null]
 >> endobj
-5148 0 obj <<
-/D [5107 0 R /XYZ 100.892 169.836 null]
+5118 0 obj <<
+/D [5077 0 R /XYZ 100.892 169.836 null]
 >> endobj
-5106 0 obj <<
+5076 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5151 0 obj <<
+5121 0 obj <<
 /Length 3695      
 /Filter /FlateDecode
 >>
@@ -28199,141 +27423,141 @@
 ¿Öqyv1ÇÕ±£Óa'ÿª•ÿóø/
 endstream
 endobj
-5150 0 obj <<
+5120 0 obj <<
 /Type /Page
-/Contents 5151 0 R
-/Resources 5149 0 R
+/Contents 5121 0 R
+/Resources 5119 0 R
 /MediaBox [0 0 612 792]
-/Parent 5097 0 R
+/Parent 5067 0 R
 >> endobj
-5152 0 obj <<
-/D [5150 0 R /XYZ 151.701 685.529 null]
+5122 0 obj <<
+/D [5120 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1611 0 obj <<
-/D [5150 0 R /XYZ 151.701 634.199 null]
+/D [5120 0 R /XYZ 151.701 634.199 null]
 >> endobj
-4842 0 obj <<
-/D [5150 0 R /XYZ 151.701 605.901 null]
+4814 0 obj <<
+/D [5120 0 R /XYZ 151.701 605.901 null]
 >> endobj
-5153 0 obj <<
-/D [5150 0 R /XYZ 151.701 599.923 null]
+5123 0 obj <<
+/D [5120 0 R /XYZ 151.701 599.923 null]
 >> endobj
-5154 0 obj <<
-/D [5150 0 R /XYZ 151.701 606.199 null]
+5124 0 obj <<
+/D [5120 0 R /XYZ 151.701 606.199 null]
 >> endobj
-5155 0 obj <<
-/D [5150 0 R /XYZ 151.701 594.244 null]
+5125 0 obj <<
+/D [5120 0 R /XYZ 151.701 594.244 null]
 >> endobj
-5156 0 obj <<
-/D [5150 0 R /XYZ 151.701 582.289 null]
+5126 0 obj <<
+/D [5120 0 R /XYZ 151.701 582.289 null]
 >> endobj
-5157 0 obj <<
-/D [5150 0 R /XYZ 151.701 570.334 null]
+5127 0 obj <<
+/D [5120 0 R /XYZ 151.701 570.334 null]
 >> endobj
-5158 0 obj <<
-/D [5150 0 R /XYZ 151.701 558.379 null]
+5128 0 obj <<
+/D [5120 0 R /XYZ 151.701 558.379 null]
 >> endobj
-5159 0 obj <<
-/D [5150 0 R /XYZ 151.701 546.424 null]
+5129 0 obj <<
+/D [5120 0 R /XYZ 151.701 546.424 null]
 >> endobj
-5160 0 obj <<
-/D [5150 0 R /XYZ 151.701 534.468 null]
+5130 0 obj <<
+/D [5120 0 R /XYZ 151.701 534.468 null]
 >> endobj
-5161 0 obj <<
-/D [5150 0 R /XYZ 151.701 522.513 null]
+5131 0 obj <<
+/D [5120 0 R /XYZ 151.701 522.513 null]
 >> endobj
-5162 0 obj <<
-/D [5150 0 R /XYZ 151.701 510.558 null]
+5132 0 obj <<
+/D [5120 0 R /XYZ 151.701 510.558 null]
 >> endobj
-5163 0 obj <<
-/D [5150 0 R /XYZ 151.701 498.603 null]
+5133 0 obj <<
+/D [5120 0 R /XYZ 151.701 498.603 null]
 >> endobj
-5164 0 obj <<
-/D [5150 0 R /XYZ 151.701 486.648 null]
+5134 0 obj <<
+/D [5120 0 R /XYZ 151.701 486.648 null]
 >> endobj
-5165 0 obj <<
-/D [5150 0 R /XYZ 151.701 474.693 null]
+5135 0 obj <<
+/D [5120 0 R /XYZ 151.701 474.693 null]
 >> endobj
-5166 0 obj <<
-/D [5150 0 R /XYZ 151.701 462.737 null]
+5136 0 obj <<
+/D [5120 0 R /XYZ 151.701 462.737 null]
 >> endobj
-5167 0 obj <<
-/D [5150 0 R /XYZ 151.701 450.782 null]
+5137 0 obj <<
+/D [5120 0 R /XYZ 151.701 450.782 null]
 >> endobj
-5168 0 obj <<
-/D [5150 0 R /XYZ 151.701 438.827 null]
+5138 0 obj <<
+/D [5120 0 R /XYZ 151.701 438.827 null]
 >> endobj
-5169 0 obj <<
-/D [5150 0 R /XYZ 151.701 426.872 null]
+5139 0 obj <<
+/D [5120 0 R /XYZ 151.701 426.872 null]
 >> endobj
-5170 0 obj <<
-/D [5150 0 R /XYZ 151.701 414.917 null]
+5140 0 obj <<
+/D [5120 0 R /XYZ 151.701 414.917 null]
 >> endobj
-5171 0 obj <<
-/D [5150 0 R /XYZ 151.701 402.962 null]
+5141 0 obj <<
+/D [5120 0 R /XYZ 151.701 402.962 null]
 >> endobj
-5172 0 obj <<
-/D [5150 0 R /XYZ 151.701 391.006 null]
+5142 0 obj <<
+/D [5120 0 R /XYZ 151.701 391.006 null]
 >> endobj
-5173 0 obj <<
-/D [5150 0 R /XYZ 151.701 379.051 null]
+5143 0 obj <<
+/D [5120 0 R /XYZ 151.701 379.051 null]
 >> endobj
-5174 0 obj <<
-/D [5150 0 R /XYZ 151.701 367.096 null]
+5144 0 obj <<
+/D [5120 0 R /XYZ 151.701 367.096 null]
 >> endobj
-5175 0 obj <<
-/D [5150 0 R /XYZ 151.701 355.141 null]
+5145 0 obj <<
+/D [5120 0 R /XYZ 151.701 355.141 null]
 >> endobj
-5176 0 obj <<
-/D [5150 0 R /XYZ 151.701 343.186 null]
+5146 0 obj <<
+/D [5120 0 R /XYZ 151.701 343.186 null]
 >> endobj
-5177 0 obj <<
-/D [5150 0 R /XYZ 151.701 331.231 null]
+5147 0 obj <<
+/D [5120 0 R /XYZ 151.701 331.231 null]
 >> endobj
-5178 0 obj <<
-/D [5150 0 R /XYZ 151.701 319.275 null]
+5148 0 obj <<
+/D [5120 0 R /XYZ 151.701 319.275 null]
 >> endobj
-5179 0 obj <<
-/D [5150 0 R /XYZ 151.701 307.32 null]
+5149 0 obj <<
+/D [5120 0 R /XYZ 151.701 307.32 null]
 >> endobj
-5180 0 obj <<
-/D [5150 0 R /XYZ 151.701 295.365 null]
+5150 0 obj <<
+/D [5120 0 R /XYZ 151.701 295.365 null]
 >> endobj
-5181 0 obj <<
-/D [5150 0 R /XYZ 151.701 283.41 null]
+5151 0 obj <<
+/D [5120 0 R /XYZ 151.701 283.41 null]
 >> endobj
-5182 0 obj <<
-/D [5150 0 R /XYZ 151.701 271.455 null]
+5152 0 obj <<
+/D [5120 0 R /XYZ 151.701 271.455 null]
 >> endobj
-5183 0 obj <<
-/D [5150 0 R /XYZ 151.701 259.5 null]
+5153 0 obj <<
+/D [5120 0 R /XYZ 151.701 259.5 null]
 >> endobj
-5184 0 obj <<
-/D [5150 0 R /XYZ 151.701 247.544 null]
+5154 0 obj <<
+/D [5120 0 R /XYZ 151.701 247.544 null]
 >> endobj
-5185 0 obj <<
-/D [5150 0 R /XYZ 151.701 235.589 null]
+5155 0 obj <<
+/D [5120 0 R /XYZ 151.701 235.589 null]
 >> endobj
-5186 0 obj <<
-/D [5150 0 R /XYZ 151.701 223.634 null]
+5156 0 obj <<
+/D [5120 0 R /XYZ 151.701 223.634 null]
 >> endobj
-5187 0 obj <<
-/D [5150 0 R /XYZ 151.701 211.679 null]
+5157 0 obj <<
+/D [5120 0 R /XYZ 151.701 211.679 null]
 >> endobj
-5188 0 obj <<
-/D [5150 0 R /XYZ 151.701 199.724 null]
+5158 0 obj <<
+/D [5120 0 R /XYZ 151.701 199.724 null]
 >> endobj
-5189 0 obj <<
-/D [5150 0 R /XYZ 151.701 187.769 null]
+5159 0 obj <<
+/D [5120 0 R /XYZ 151.701 187.769 null]
 >> endobj
-5190 0 obj <<
-/D [5150 0 R /XYZ 151.701 175.813 null]
+5160 0 obj <<
+/D [5120 0 R /XYZ 151.701 175.813 null]
 >> endobj
-5149 0 obj <<
+5119 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5193 0 obj <<
+5163 0 obj <<
 /Length 3540      
 /Filter /FlateDecode
 >>
@@ -28371,138 +27595,138 @@
 Ãw{YÅ/Ñüºš{ ñ=õ˜izÝ’¯ßͳkÌã ¢ü¿Ê+‘V‘¿Í@->«#ñ·ÊKªÒfr?ÿ·øíjÚ_‹œýߌþ×:®Í¦zötqÜàðÖÙ:©íE‹ó¸
 endstream
 endobj
-5192 0 obj <<
+5162 0 obj <<
 /Type /Page
-/Contents 5193 0 R
-/Resources 5191 0 R
+/Contents 5163 0 R
+/Resources 5161 0 R
 /MediaBox [0 0 612 792]
-/Parent 5097 0 R
+/Parent 5067 0 R
 >> endobj
-5194 0 obj <<
-/D [5192 0 R /XYZ 100.892 685.529 null]
+5164 0 obj <<
+/D [5162 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1612 0 obj <<
-/D [5192 0 R /XYZ 100.892 629.282 null]
+/D [5162 0 R /XYZ 100.892 629.282 null]
 >> endobj
-4885 0 obj <<
-/D [5192 0 R /XYZ 100.892 598.862 null]
+4855 0 obj <<
+/D [5162 0 R /XYZ 100.892 598.862 null]
 >> endobj
-5195 0 obj <<
-/D [5192 0 R /XYZ 100.892 592.885 null]
+5165 0 obj <<
+/D [5162 0 R /XYZ 100.892 592.885 null]
 >> endobj
-5196 0 obj <<
-/D [5192 0 R /XYZ 100.892 599.161 null]
+5166 0 obj <<
+/D [5162 0 R /XYZ 100.892 599.161 null]
 >> endobj
-5197 0 obj <<
-/D [5192 0 R /XYZ 100.892 587.206 null]
+5167 0 obj <<
+/D [5162 0 R /XYZ 100.892 587.206 null]
 >> endobj
-5198 0 obj <<
-/D [5192 0 R /XYZ 100.892 575.251 null]
+5168 0 obj <<
+/D [5162 0 R /XYZ 100.892 575.251 null]
 >> endobj
-5199 0 obj <<
-/D [5192 0 R /XYZ 100.892 563.296 null]
+5169 0 obj <<
+/D [5162 0 R /XYZ 100.892 563.296 null]
 >> endobj
-5200 0 obj <<
-/D [5192 0 R /XYZ 100.892 551.341 null]
+5170 0 obj <<
+/D [5162 0 R /XYZ 100.892 551.341 null]
 >> endobj
-5201 0 obj <<
-/D [5192 0 R /XYZ 100.892 539.385 null]
+5171 0 obj <<
+/D [5162 0 R /XYZ 100.892 539.385 null]
 >> endobj
-5202 0 obj <<
-/D [5192 0 R /XYZ 100.892 527.43 null]
+5172 0 obj <<
+/D [5162 0 R /XYZ 100.892 527.43 null]
 >> endobj
-5203 0 obj <<
-/D [5192 0 R /XYZ 100.892 515.475 null]
+5173 0 obj <<
+/D [5162 0 R /XYZ 100.892 515.475 null]
 >> endobj
-5204 0 obj <<
-/D [5192 0 R /XYZ 100.892 503.52 null]
+5174 0 obj <<
+/D [5162 0 R /XYZ 100.892 503.52 null]
 >> endobj
-5205 0 obj <<
-/D [5192 0 R /XYZ 100.892 491.565 null]
+5175 0 obj <<
+/D [5162 0 R /XYZ 100.892 491.565 null]
 >> endobj
-5206 0 obj <<
-/D [5192 0 R /XYZ 100.892 479.61 null]
+5176 0 obj <<
+/D [5162 0 R /XYZ 100.892 479.61 null]
 >> endobj
-5207 0 obj <<
-/D [5192 0 R /XYZ 100.892 467.654 null]
+5177 0 obj <<
+/D [5162 0 R /XYZ 100.892 467.654 null]
 >> endobj
-5208 0 obj <<
-/D [5192 0 R /XYZ 100.892 455.699 null]
+5178 0 obj <<
+/D [5162 0 R /XYZ 100.892 455.699 null]
 >> endobj
-5209 0 obj <<
-/D [5192 0 R /XYZ 100.892 443.744 null]
+5179 0 obj <<
+/D [5162 0 R /XYZ 100.892 443.744 null]
 >> endobj
-5210 0 obj <<
-/D [5192 0 R /XYZ 100.892 431.789 null]
+5180 0 obj <<
+/D [5162 0 R /XYZ 100.892 431.789 null]
 >> endobj
-5211 0 obj <<
-/D [5192 0 R /XYZ 100.892 419.834 null]
+5181 0 obj <<
+/D [5162 0 R /XYZ 100.892 419.834 null]
 >> endobj
-5212 0 obj <<
-/D [5192 0 R /XYZ 100.892 407.879 null]
+5182 0 obj <<
+/D [5162 0 R /XYZ 100.892 407.879 null]
 >> endobj
-5213 0 obj <<
-/D [5192 0 R /XYZ 100.892 395.923 null]
+5183 0 obj <<
+/D [5162 0 R /XYZ 100.892 395.923 null]
 >> endobj
-5214 0 obj <<
-/D [5192 0 R /XYZ 100.892 383.968 null]
+5184 0 obj <<
+/D [5162 0 R /XYZ 100.892 383.968 null]
 >> endobj
-5215 0 obj <<
-/D [5192 0 R /XYZ 100.892 372.013 null]
+5185 0 obj <<
+/D [5162 0 R /XYZ 100.892 372.013 null]
 >> endobj
-5216 0 obj <<
-/D [5192 0 R /XYZ 100.892 360.058 null]
+5186 0 obj <<
+/D [5162 0 R /XYZ 100.892 360.058 null]
 >> endobj
-5217 0 obj <<
-/D [5192 0 R /XYZ 100.892 348.103 null]
+5187 0 obj <<
+/D [5162 0 R /XYZ 100.892 348.103 null]
 >> endobj
-5218 0 obj <<
-/D [5192 0 R /XYZ 100.892 336.148 null]
+5188 0 obj <<
+/D [5162 0 R /XYZ 100.892 336.148 null]
 >> endobj
-5219 0 obj <<
-/D [5192 0 R /XYZ 100.892 324.192 null]
+5189 0 obj <<
+/D [5162 0 R /XYZ 100.892 324.192 null]
 >> endobj
-5220 0 obj <<
-/D [5192 0 R /XYZ 100.892 312.237 null]
+5190 0 obj <<
+/D [5162 0 R /XYZ 100.892 312.237 null]
 >> endobj
-5221 0 obj <<
-/D [5192 0 R /XYZ 100.892 300.282 null]
+5191 0 obj <<
+/D [5162 0 R /XYZ 100.892 300.282 null]
 >> endobj
-5222 0 obj <<
-/D [5192 0 R /XYZ 100.892 288.327 null]
+5192 0 obj <<
+/D [5162 0 R /XYZ 100.892 288.327 null]
 >> endobj
-5223 0 obj <<
-/D [5192 0 R /XYZ 100.892 276.372 null]
+5193 0 obj <<
+/D [5162 0 R /XYZ 100.892 276.372 null]
 >> endobj
-5224 0 obj <<
-/D [5192 0 R /XYZ 100.892 264.417 null]
+5194 0 obj <<
+/D [5162 0 R /XYZ 100.892 264.417 null]
 >> endobj
-5225 0 obj <<
-/D [5192 0 R /XYZ 100.892 252.461 null]
+5195 0 obj <<
+/D [5162 0 R /XYZ 100.892 252.461 null]
 >> endobj
-5226 0 obj <<
-/D [5192 0 R /XYZ 100.892 240.506 null]
+5196 0 obj <<
+/D [5162 0 R /XYZ 100.892 240.506 null]
 >> endobj
-5227 0 obj <<
-/D [5192 0 R /XYZ 100.892 228.551 null]
+5197 0 obj <<
+/D [5162 0 R /XYZ 100.892 228.551 null]
 >> endobj
-5228 0 obj <<
-/D [5192 0 R /XYZ 100.892 216.596 null]
+5198 0 obj <<
+/D [5162 0 R /XYZ 100.892 216.596 null]
 >> endobj
-5229 0 obj <<
-/D [5192 0 R /XYZ 100.892 204.641 null]
+5199 0 obj <<
+/D [5162 0 R /XYZ 100.892 204.641 null]
 >> endobj
-5230 0 obj <<
-/D [5192 0 R /XYZ 100.892 192.686 null]
+5200 0 obj <<
+/D [5162 0 R /XYZ 100.892 192.686 null]
 >> endobj
-5231 0 obj <<
-/D [5192 0 R /XYZ 100.892 180.73 null]
+5201 0 obj <<
+/D [5162 0 R /XYZ 100.892 180.73 null]
 >> endobj
-5191 0 obj <<
+5161 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5234 0 obj <<
+5204 0 obj <<
 /Length 3409      
 /Filter /FlateDecode
 >>
@@ -28543,138 +27767,138 @@
 ü®¸ðœz"¦À	Åg9öÓhvé/Tò@×?Òu[Ž?À³IÞ“/‡ðëÇjT¹:CJ֐NuˆÅJÕƒ*Óªr¹Z]¨ÐùXçKa ¯UÅè"ëÎÊž8*½p“ÂpÝÉw¤©A·*8Qg-u2ҐìðŠµà ¨LJejY[Üì¹H؏!»Ñ‡œ+â¡»þ»a¿7Â[[‡ÿÓ±†4 C,ցT™”ËÕ²·Bäc9WØkÔ#äIàcªÃòéXC,ï‹YÞƒ*cy¹\-3+t@>Öù¨/å84ãrŽæ)—u¢Xëøo©±`nwÿârVõÎV9ÏßmF‹2ƒ»¶gƒ0¶ù-âqŸ
 endstream
 endobj
-5233 0 obj <<
+5203 0 obj <<
 /Type /Page
-/Contents 5234 0 R
-/Resources 5232 0 R
+/Contents 5204 0 R
+/Resources 5202 0 R
 /MediaBox [0 0 612 792]
-/Parent 5271 0 R
+/Parent 5241 0 R
 >> endobj
-5235 0 obj <<
-/D [5233 0 R /XYZ 151.701 685.529 null]
+5205 0 obj <<
+/D [5203 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1613 0 obj <<
-/D [5233 0 R /XYZ 151.701 642.781 null]
+/D [5203 0 R /XYZ 151.701 642.781 null]
 >> endobj
-4932 0 obj <<
-/D [5233 0 R /XYZ 151.701 625.911 null]
+4902 0 obj <<
+/D [5203 0 R /XYZ 151.701 625.911 null]
 >> endobj
-5236 0 obj <<
-/D [5233 0 R /XYZ 151.701 619.934 null]
+5206 0 obj <<
+/D [5203 0 R /XYZ 151.701 619.934 null]
 >> endobj
-5237 0 obj <<
-/D [5233 0 R /XYZ 151.701 626.21 null]
+5207 0 obj <<
+/D [5203 0 R /XYZ 151.701 626.21 null]
 >> endobj
-5238 0 obj <<
-/D [5233 0 R /XYZ 151.701 614.255 null]
+5208 0 obj <<
+/D [5203 0 R /XYZ 151.701 614.255 null]
 >> endobj
-5239 0 obj <<
-/D [5233 0 R /XYZ 151.701 602.3 null]
+5209 0 obj <<
+/D [5203 0 R /XYZ 151.701 602.3 null]
 >> endobj
-5240 0 obj <<
-/D [5233 0 R /XYZ 151.701 590.344 null]
+5210 0 obj <<
+/D [5203 0 R /XYZ 151.701 590.344 null]
 >> endobj
-5241 0 obj <<
-/D [5233 0 R /XYZ 151.701 578.389 null]
+5211 0 obj <<
+/D [5203 0 R /XYZ 151.701 578.389 null]
 >> endobj
-5242 0 obj <<
-/D [5233 0 R /XYZ 151.701 566.434 null]
+5212 0 obj <<
+/D [5203 0 R /XYZ 151.701 566.434 null]
 >> endobj
-5243 0 obj <<
-/D [5233 0 R /XYZ 151.701 554.479 null]
+5213 0 obj <<
+/D [5203 0 R /XYZ 151.701 554.479 null]
 >> endobj
-5244 0 obj <<
-/D [5233 0 R /XYZ 151.701 542.524 null]
+5214 0 obj <<
+/D [5203 0 R /XYZ 151.701 542.524 null]
 >> endobj
-5245 0 obj <<
-/D [5233 0 R /XYZ 151.701 530.569 null]
+5215 0 obj <<
+/D [5203 0 R /XYZ 151.701 530.569 null]
 >> endobj
-5246 0 obj <<
-/D [5233 0 R /XYZ 151.701 518.613 null]
+5216 0 obj <<
+/D [5203 0 R /XYZ 151.701 518.613 null]
 >> endobj
-5247 0 obj <<
-/D [5233 0 R /XYZ 151.701 506.658 null]
+5217 0 obj <<
+/D [5203 0 R /XYZ 151.701 506.658 null]
 >> endobj
-5248 0 obj <<
-/D [5233 0 R /XYZ 151.701 494.703 null]
+5218 0 obj <<
+/D [5203 0 R /XYZ 151.701 494.703 null]
 >> endobj
-5249 0 obj <<
-/D [5233 0 R /XYZ 151.701 482.748 null]
+5219 0 obj <<
+/D [5203 0 R /XYZ 151.701 482.748 null]
 >> endobj
-5250 0 obj <<
-/D [5233 0 R /XYZ 151.701 470.793 null]
+5220 0 obj <<
+/D [5203 0 R /XYZ 151.701 470.793 null]
 >> endobj
-5251 0 obj <<
-/D [5233 0 R /XYZ 151.701 458.838 null]
+5221 0 obj <<
+/D [5203 0 R /XYZ 151.701 458.838 null]
 >> endobj
-5252 0 obj <<
-/D [5233 0 R /XYZ 151.701 446.882 null]
+5222 0 obj <<
+/D [5203 0 R /XYZ 151.701 446.882 null]
 >> endobj
-5253 0 obj <<
-/D [5233 0 R /XYZ 151.701 434.927 null]
+5223 0 obj <<
+/D [5203 0 R /XYZ 151.701 434.927 null]
 >> endobj
 1614 0 obj <<
-/D [5233 0 R /XYZ 151.701 363.13 null]
+/D [5203 0 R /XYZ 151.701 363.13 null]
 >> endobj
-4948 0 obj <<
-/D [5233 0 R /XYZ 151.701 346.26 null]
+4918 0 obj <<
+/D [5203 0 R /XYZ 151.701 346.26 null]
 >> endobj
-5254 0 obj <<
-/D [5233 0 R /XYZ 151.701 340.282 null]
+5224 0 obj <<
+/D [5203 0 R /XYZ 151.701 340.282 null]
 >> endobj
-5255 0 obj <<
-/D [5233 0 R /XYZ 151.701 346.559 null]
+5225 0 obj <<
+/D [5203 0 R /XYZ 151.701 346.559 null]
 >> endobj
-5256 0 obj <<
-/D [5233 0 R /XYZ 151.701 334.603 null]
+5226 0 obj <<
+/D [5203 0 R /XYZ 151.701 334.603 null]
 >> endobj
-5257 0 obj <<
-/D [5233 0 R /XYZ 151.701 322.648 null]
+5227 0 obj <<
+/D [5203 0 R /XYZ 151.701 322.648 null]
 >> endobj
-5258 0 obj <<
-/D [5233 0 R /XYZ 151.701 310.693 null]
+5228 0 obj <<
+/D [5203 0 R /XYZ 151.701 310.693 null]
 >> endobj
-5259 0 obj <<
-/D [5233 0 R /XYZ 151.701 298.738 null]
+5229 0 obj <<
+/D [5203 0 R /XYZ 151.701 298.738 null]
 >> endobj
-5260 0 obj <<
-/D [5233 0 R /XYZ 151.701 286.783 null]
+5230 0 obj <<
+/D [5203 0 R /XYZ 151.701 286.783 null]
 >> endobj
-5261 0 obj <<
-/D [5233 0 R /XYZ 151.701 274.828 null]
+5231 0 obj <<
+/D [5203 0 R /XYZ 151.701 274.828 null]
 >> endobj
-5262 0 obj <<
-/D [5233 0 R /XYZ 151.701 262.872 null]
+5232 0 obj <<
+/D [5203 0 R /XYZ 151.701 262.872 null]
 >> endobj
-5263 0 obj <<
-/D [5233 0 R /XYZ 151.701 250.917 null]
+5233 0 obj <<
+/D [5203 0 R /XYZ 151.701 250.917 null]
 >> endobj
-5264 0 obj <<
-/D [5233 0 R /XYZ 151.701 238.962 null]
+5234 0 obj <<
+/D [5203 0 R /XYZ 151.701 238.962 null]
 >> endobj
-5265 0 obj <<
-/D [5233 0 R /XYZ 151.701 227.007 null]
+5235 0 obj <<
+/D [5203 0 R /XYZ 151.701 227.007 null]
 >> endobj
-5266 0 obj <<
-/D [5233 0 R /XYZ 151.701 215.052 null]
+5236 0 obj <<
+/D [5203 0 R /XYZ 151.701 215.052 null]
 >> endobj
-5267 0 obj <<
-/D [5233 0 R /XYZ 151.701 203.096 null]
+5237 0 obj <<
+/D [5203 0 R /XYZ 151.701 203.096 null]
 >> endobj
-5268 0 obj <<
-/D [5233 0 R /XYZ 151.701 191.141 null]
+5238 0 obj <<
+/D [5203 0 R /XYZ 151.701 191.141 null]
 >> endobj
-5269 0 obj <<
-/D [5233 0 R /XYZ 151.701 179.186 null]
+5239 0 obj <<
+/D [5203 0 R /XYZ 151.701 179.186 null]
 >> endobj
-5270 0 obj <<
-/D [5233 0 R /XYZ 151.701 167.231 null]
+5240 0 obj <<
+/D [5203 0 R /XYZ 151.701 167.231 null]
 >> endobj
-5232 0 obj <<
+5202 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5274 0 obj <<
+5244 0 obj <<
 /Length 2102      
 /Filter /FlateDecode
 >>
@@ -28702,75 +27926,75 @@
 «‰=½?I$Ø ê>ÌY0ëÔw«üwÓël=½~ž,Èì:tÀ_äɘB·ÓÛ7ßþrs;f„nÿô·3·÷\&›õÇ UnóižëÔ›"ÿ‡“ÒÛûk±™Ï—ŸvaÔ%(/yáí…8þݦÌ><æ«rýáyR–Í;²ÞÇÿZÍUö÷&_e~¡©LÀ/³éf•­×_|]+K4\ŸªYñ¹OµÅ$Ÿ«7.7[ÓíšR0E÷GäÀ œ­|` V]GÂ|Y®fíî	]uïùeú1›~ÂFU‡XskWe®O2°/.hp×F¨~fʬ,ýè†±êֲȌèyœÁµmTrÚ˜ç‹|]Vœ;=i0Q­ÛÅäödô/£ÄQŸ
 endstream
 endobj
-5273 0 obj <<
+5243 0 obj <<
 /Type /Page
-/Contents 5274 0 R
-/Resources 5272 0 R
+/Contents 5244 0 R
+/Resources 5242 0 R
 /MediaBox [0 0 612 792]
-/Parent 5271 0 R
+/Parent 5241 0 R
 >> endobj
-5275 0 obj <<
-/D [5273 0 R /XYZ 100.892 685.529 null]
+5245 0 obj <<
+/D [5243 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1615 0 obj <<
-/D [5273 0 R /XYZ 100.892 643.459 null]
+/D [5243 0 R /XYZ 100.892 643.459 null]
 >> endobj
-4980 0 obj <<
-/D [5273 0 R /XYZ 100.892 615.161 null]
+4950 0 obj <<
+/D [5243 0 R /XYZ 100.892 615.161 null]
 >> endobj
-5276 0 obj <<
-/D [5273 0 R /XYZ 100.892 609.183 null]
+5246 0 obj <<
+/D [5243 0 R /XYZ 100.892 609.183 null]
 >> endobj
-5277 0 obj <<
-/D [5273 0 R /XYZ 100.892 615.46 null]
+5247 0 obj <<
+/D [5243 0 R /XYZ 100.892 615.46 null]
 >> endobj
-5278 0 obj <<
-/D [5273 0 R /XYZ 100.892 603.504 null]
+5248 0 obj <<
+/D [5243 0 R /XYZ 100.892 603.504 null]
 >> endobj
-5279 0 obj <<
-/D [5273 0 R /XYZ 100.892 591.549 null]
+5249 0 obj <<
+/D [5243 0 R /XYZ 100.892 591.549 null]
 >> endobj
-5280 0 obj <<
-/D [5273 0 R /XYZ 100.892 579.594 null]
+5250 0 obj <<
+/D [5243 0 R /XYZ 100.892 579.594 null]
 >> endobj
-5281 0 obj <<
-/D [5273 0 R /XYZ 100.892 567.639 null]
+5251 0 obj <<
+/D [5243 0 R /XYZ 100.892 567.639 null]
 >> endobj
-5282 0 obj <<
-/D [5273 0 R /XYZ 100.892 555.684 null]
+5252 0 obj <<
+/D [5243 0 R /XYZ 100.892 555.684 null]
 >> endobj
-5283 0 obj <<
-/D [5273 0 R /XYZ 100.892 543.729 null]
+5253 0 obj <<
+/D [5243 0 R /XYZ 100.892 543.729 null]
 >> endobj
-5284 0 obj <<
-/D [5273 0 R /XYZ 100.892 531.773 null]
+5254 0 obj <<
+/D [5243 0 R /XYZ 100.892 531.773 null]
 >> endobj
-5285 0 obj <<
-/D [5273 0 R /XYZ 100.892 519.818 null]
+5255 0 obj <<
+/D [5243 0 R /XYZ 100.892 519.818 null]
 >> endobj
-5286 0 obj <<
-/D [5273 0 R /XYZ 100.892 507.863 null]
+5256 0 obj <<
+/D [5243 0 R /XYZ 100.892 507.863 null]
 >> endobj
-5287 0 obj <<
-/D [5273 0 R /XYZ 100.892 495.908 null]
+5257 0 obj <<
+/D [5243 0 R /XYZ 100.892 495.908 null]
 >> endobj
-5288 0 obj <<
-/D [5273 0 R /XYZ 100.892 483.953 null]
+5258 0 obj <<
+/D [5243 0 R /XYZ 100.892 483.953 null]
 >> endobj
-5289 0 obj <<
-/D [5273 0 R /XYZ 100.892 471.998 null]
+5259 0 obj <<
+/D [5243 0 R /XYZ 100.892 471.998 null]
 >> endobj
 1616 0 obj <<
-/D [5273 0 R /XYZ 100.892 401.556 null]
+/D [5243 0 R /XYZ 100.892 401.556 null]
 >> endobj
-5015 0 obj <<
-/D [5273 0 R /XYZ 100.892 384.685 null]
+4985 0 obj <<
+/D [5243 0 R /XYZ 100.892 384.685 null]
 >> endobj
-5272 0 obj <<
+5242 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5292 0 obj <<
+5262 0 obj <<
 /Length 910       
 /Filter /FlateDecode
 >>
@@ -28784,33 +28008,33 @@
 áw›ZÜÎeU«Ûe\׶(mÓ@jOŒ$)J øÿÉ·ãΏö¾D’úબR{øè$Op¿D–µ¨kY§Ry‚ûK²ä}Q*ñ½‘•Ðšç6F*-ÎRTùQ©ö€T¢Îï«Ö{Û¢½-Ï(ŽNiùŠ‘Güi%#ò}®•Üÿ©•´W+}E­Zþk!Ø}+»ˆ@<õ:â	ÆéºV"·ë	\›02©d+C±¶¿•™h}·údîeԆܹt\̑Տ‹3Ñ€_X˜)ŒKFÙMå]%dÞymß8“wãZ$M%ÕzüÛûéD³s+ŠÇ=o·µÓcïÓ]kzN·E&„ÅàGˆ÷Iqºí½éäNwr/©(ÖbÌLŸi¹‘›ãà6̘¿Ž¯3ÐÍú§¶ÜãÒNª8y€­mœJ¨j}Eí‡Z/ÅUÛí_‡¥Òݨ—³…°‹ø®|›R´+Ù*rRjQmªg'ŠR-LCêy	ojµýT›¯¯^žn†³õWB™Áöx€ï\eûÆ.Ɛ§¼«‹8-WV•vP^˜çéMqÖ“8ÐÛiwBcd2—ªîo]¼SïëÐ8¾p¯ÜDÿ«ÆÁ9#aóûDRØØ
 endstream
 endobj
-5291 0 obj <<
+5261 0 obj <<
 /Type /Page
-/Contents 5292 0 R
-/Resources 5290 0 R
+/Contents 5262 0 R
+/Resources 5260 0 R
 /MediaBox [0 0 612 792]
-/Parent 5271 0 R
+/Parent 5241 0 R
 >> endobj
-5293 0 obj <<
-/D [5291 0 R /XYZ 151.701 685.529 null]
+5263 0 obj <<
+/D [5261 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1617 0 obj <<
-/D [5291 0 R /XYZ 151.701 656.26 null]
+/D [5261 0 R /XYZ 151.701 656.26 null]
 >> endobj
-5294 0 obj <<
-/D [5291 0 R /XYZ 151.701 639.39 null]
+5264 0 obj <<
+/D [5261 0 R /XYZ 151.701 639.39 null]
 >> endobj
 1618 0 obj <<
-/D [5291 0 R /XYZ 151.701 430.614 null]
+/D [5261 0 R /XYZ 151.701 430.614 null]
 >> endobj
-5027 0 obj <<
-/D [5291 0 R /XYZ 151.701 398.983 null]
+4997 0 obj <<
+/D [5261 0 R /XYZ 151.701 398.983 null]
 >> endobj
-5290 0 obj <<
+5260 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5297 0 obj <<
+5267 0 obj <<
 /Length 1399      
 /Filter /FlateDecode
 >>
@@ -28829,27 +28053,27 @@
 Ë›–¡sQtÕ1^¾MÊËyRf¬SEÏ{ú°JÔÕ%øiò›“U\
 endstream
 endobj
-5296 0 obj <<
+5266 0 obj <<
 /Type /Page
-/Contents 5297 0 R
-/Resources 5295 0 R
+/Contents 5267 0 R
+/Resources 5265 0 R
 /MediaBox [0 0 612 792]
-/Parent 5271 0 R
+/Parent 5241 0 R
 >> endobj
-5298 0 obj <<
-/D [5296 0 R /XYZ 100.892 685.529 null]
+5268 0 obj <<
+/D [5266 0 R /XYZ 100.892 685.529 null]
 >> endobj
 582 0 obj <<
-/D [5296 0 R /XYZ 100.892 660.623 null]
+/D [5266 0 R /XYZ 100.892 660.623 null]
 >> endobj
-5299 0 obj <<
-/D [5296 0 R /XYZ 100.892 487.871 null]
+5269 0 obj <<
+/D [5266 0 R /XYZ 100.892 487.871 null]
 >> endobj
-5295 0 obj <<
+5265 0 obj <<
 /Font << /F77 1973 0 R /F17 1131 0 R /F15 1133 0 R /F28 1124 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5302 0 obj <<
+5272 0 obj <<
 /Length 1739      
 /Filter /FlateDecode
 >>
@@ -28868,28 +28092,28 @@
 _	0fߝãá8´R3ÿs!:‹£¬ÿ¿„øçü!ÏŸÃ_ߌÿ³´X‚ƒØ?×4;enä‚ÚÜO4,Bn2Â4ƒå#<aS¼4MÄS "Ó0ÊÇ!¡©C"?u-¬ÎÔŽ1À˜°›Wkõ8Víyäá©`=ð«ÂG)ðµL1¼@íàíoþ:™«¶B•,&rbY6Õ¾õlFWùÊX¬•ž¢| !i`|€‚]Œ2Î[&^úbç>¶6XύkJ–¤ÁYjþª"ˆü(“YÎ<˜…7î@â`»kÏMõ˹>2Òy­hÀÝN‚ÝJ7ÍJúJáu®â²Èid$ÕW.ÚHàʔډ:x~*ÉòòÅ›>Î 2Ê+®AÏêLòÂ4x,e«f4ñà–?¹þá\æ̓µbߏç)Â3Žð™Û|Æ5üL®JTkÅNÜup†Ÿ9iL§@Jàcºnt›+Æ;ÍW8<’û C]ºÏ žñ¤˜IlÏ5ÑÿàW¨‘ÿâlj
 endstream
 endobj
-5301 0 obj <<
+5271 0 obj <<
 /Type /Page
-/Contents 5302 0 R
-/Resources 5300 0 R
+/Contents 5272 0 R
+/Resources 5270 0 R
 /MediaBox [0 0 612 792]
-/Parent 5271 0 R
+/Parent 5241 0 R
 >> endobj
-5303 0 obj <<
-/D [5301 0 R /XYZ 151.701 685.529 null]
+5273 0 obj <<
+/D [5271 0 R /XYZ 151.701 685.529 null]
 >> endobj
 586 0 obj <<
-/D [5301 0 R /XYZ 151.701 660.623 null]
+/D [5271 0 R /XYZ 151.701 660.623 null]
 >> endobj
-5304 0 obj <<
-/D [5301 0 R /XYZ 151.701 641.209 null]
+5274 0 obj <<
+/D [5271 0 R /XYZ 151.701 641.209 null]
 >> endobj
-5300 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F17 1131 0 R /F15 1133 0 R /F89 2333 0 R /F73 2334 0 R >>
-/XObject << /Im9 3542 0 R >>
+5270 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F17 1131 0 R /F15 1133 0 R /F89 2330 0 R /F73 2331 0 R >>
+/XObject << /Im9 3531 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5307 0 obj <<
+5277 0 obj <<
 /Length 1925      
 /Filter /FlateDecode
 >>
@@ -28907,33 +28131,33 @@
 v~Oüµ\»è§Æu’½ë$ï[À¹4…kåšL¶‚ôMøØÁþ—aüÿP1Ù™ª^™CvRBßw7؁GåG·†ÂË‘€/ã*LöY‡ô \ì¼\^©•òì¦ÿ|©z­Çz]×ØMØݳxÎ=›_Qã:/NšaºðR?OVwzŒ\TP”••{Ë$ÊŠ|ñÀ¾=±š8¸<|ë~'=LœÖ½¼?ÅY|xü~„1ùŠw÷}¢F]—"…\2ŒÌ!ÜBC͐2²ä¯Gf¸63	;¼Oß1Ï¿ _6÷&þ-öÖ'ßÿv@~ÎÞÀh ×­qàµË˜ÍÜ;Ÿr09üò'P>&ŽæzhG¦=á©O+׬ÄPo7ËðXOJ‚“!Åà£ôC7Ì#“<,¯B³€Ðó˜2tå6`jð)_ëëÄDjv$µºÈÃIåÿëµp`³ê2bzùãºsUÓôš	oøðÑa˜§Ñ4^êÄã²#³=ÔQ꟒{¯¤Õi¢$s[ ~]%õÏ{˜xßží€	èåñ™±ÇžIªžfÕòü§Ž;BüûËÿoåÇŽ»ÿ κ²
 endstream
 endobj
-5306 0 obj <<
+5276 0 obj <<
 /Type /Page
-/Contents 5307 0 R
-/Resources 5305 0 R
+/Contents 5277 0 R
+/Resources 5275 0 R
 /MediaBox [0 0 612 792]
-/Parent 5271 0 R
+/Parent 5241 0 R
 >> endobj
-5308 0 obj <<
-/D [5306 0 R /XYZ 100.892 685.529 null]
+5278 0 obj <<
+/D [5276 0 R /XYZ 100.892 685.529 null]
 >> endobj
 590 0 obj <<
-/D [5306 0 R /XYZ 100.892 660.623 null]
+/D [5276 0 R /XYZ 100.892 660.623 null]
 >> endobj
-5309 0 obj <<
-/D [5306 0 R /XYZ 100.892 644.027 null]
+5279 0 obj <<
+/D [5276 0 R /XYZ 100.892 644.027 null]
 >> endobj
 594 0 obj <<
-/D [5306 0 R /XYZ 100.892 224.57 null]
+/D [5276 0 R /XYZ 100.892 224.57 null]
 >> endobj
-5310 0 obj <<
-/D [5306 0 R /XYZ 100.892 195.509 null]
+5280 0 obj <<
+/D [5276 0 R /XYZ 100.892 195.509 null]
 >> endobj
-5305 0 obj <<
+5275 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5313 0 obj <<
+5283 0 obj <<
 /Length 2069      
 /Filter /FlateDecode
 >>
@@ -28959,21 +28183,21 @@
 ñìÇâfíFÝì¿„i´œÞOdäh »„¸°zK!C ‹€®”GÓËønCÁÃ?Oð?H¨ÌõÝ=Ò{NdŠ.A<óangº#—CþûCÜ“¦áŸÐ4­ÛpñŒ+í°83=g£}yßàîÛïÝøô4á>…IJûÛîB¥îbõ=æ8þ)êÿÍôßׇÍß'é›1
 endstream
 endobj
-5312 0 obj <<
+5282 0 obj <<
 /Type /Page
-/Contents 5313 0 R
-/Resources 5311 0 R
+/Contents 5283 0 R
+/Resources 5281 0 R
 /MediaBox [0 0 612 792]
-/Parent 5315 0 R
+/Parent 5285 0 R
 >> endobj
-5314 0 obj <<
-/D [5312 0 R /XYZ 151.701 685.529 null]
+5284 0 obj <<
+/D [5282 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5311 0 obj <<
+5281 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5318 0 obj <<
+5288 0 obj <<
 /Length 1541      
 /Filter /FlateDecode
 >>
@@ -28995,22 +28219,22 @@
 +Vá~;•ÿK˜~‹§þþš÷ø
 endstream
 endobj
-5317 0 obj <<
+5287 0 obj <<
 /Type /Page
-/Contents 5318 0 R
-/Resources 5316 0 R
+/Contents 5288 0 R
+/Resources 5286 0 R
 /MediaBox [0 0 612 792]
-/Parent 5315 0 R
+/Parent 5285 0 R
 >> endobj
-5319 0 obj <<
-/D [5317 0 R /XYZ 100.892 685.529 null]
+5289 0 obj <<
+/D [5287 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5316 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F89 2333 0 R /F73 2334 0 R /F15 1133 0 R /F59 1905 0 R >>
-/XObject << /Im3 2328 0 R >>
+5286 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F89 2330 0 R /F73 2331 0 R /F15 1133 0 R /F59 1905 0 R >>
+/XObject << /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5322 0 obj <<
+5292 0 obj <<
 /Length 1061      
 /Filter /FlateDecode
 >>
@@ -29027,21 +28251,21 @@
 \]b§2} ì8Õä“&È|‘)Ä^ôüÍÂéar¿qÝtŽ½œ±GÎÈÒ;㮪ÚÆöŽ0ß“ëMgéÔNæãÞŽ¡ðâË&PãCö0@·Ópzèýîи-™>‚!ÿÃaÑ[Ÿ*dN¤ÿ³žó*	ÍßP×´ýáöæõ×?¯¿ÿ»+P&×/¯îs+´ô•g©ßw;z·œs™qUr}éâÛ}Gf{˜í“¿’	™Ÿ«3Ûú$þûqØïÂÅâ¯ßh‡Ê´®±gTÎ-ŸêëþpÌÓŽ,çÐî‡¹„è·&Ùn4•k<ÍîO0öƒhK>?¶ñ‘ÇþZ¿mîlûp)×ßçxvŽjç#´ak¯èüÛ~rT¹MÚ`²¤k‚Æ7ÈÜà>=’ôÖÖá3iü†Ž­qÁª†íü×æøg4¬ð÷OÐÝè6
 endstream
 endobj
-5321 0 obj <<
+5291 0 obj <<
 /Type /Page
-/Contents 5322 0 R
-/Resources 5320 0 R
+/Contents 5292 0 R
+/Resources 5290 0 R
 /MediaBox [0 0 612 792]
-/Parent 5315 0 R
+/Parent 5285 0 R
 >> endobj
-5323 0 obj <<
-/D [5321 0 R /XYZ 151.701 685.529 null]
+5293 0 obj <<
+/D [5291 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5320 0 obj <<
+5290 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5326 0 obj <<
+5296 0 obj <<
 /Length 2018      
 /Filter /FlateDecode
 >>
@@ -29063,27 +28287,27 @@
 w Ë_©8U}üõMc‡wø$TôðÃu6ˆ6#¨½„7lçÀMÓå$òO¤B¹uv!:&–XÓ(!ÒU*âä¾Å]ˆ¯·ÞŸ^±o¡"7­÷ét¸6”¶šO맱¹=ô®ƒ}©ûÉñ;˜ògù5¿?îþ·e©
 endstream
 endobj
-5325 0 obj <<
+5295 0 obj <<
 /Type /Page
-/Contents 5326 0 R
-/Resources 5324 0 R
+/Contents 5296 0 R
+/Resources 5294 0 R
 /MediaBox [0 0 612 792]
-/Parent 5315 0 R
+/Parent 5285 0 R
 >> endobj
-5327 0 obj <<
-/D [5325 0 R /XYZ 100.892 685.529 null]
+5297 0 obj <<
+/D [5295 0 R /XYZ 100.892 685.529 null]
 >> endobj
 598 0 obj <<
-/D [5325 0 R /XYZ 100.892 321.567 null]
+/D [5295 0 R /XYZ 100.892 321.567 null]
 >> endobj
-5328 0 obj <<
-/D [5325 0 R /XYZ 100.892 289.552 null]
+5298 0 obj <<
+/D [5295 0 R /XYZ 100.892 289.552 null]
 >> endobj
-5324 0 obj <<
+5294 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F60 1917 0 R /F59 1905 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5331 0 obj <<
+5301 0 obj <<
 /Length 1740      
 /Filter /FlateDecode
 >>
@@ -29103,34 +28327,34 @@
 õôdh‡ðª3g8„¬’Rdðƒà½m	XÖ»sŽ+Jrr‘h&|™#$|ñ9(…¼Iõ¾¯ÇAŒÕjµf¹°ð!ú*Ï,0dÁÀ+;Œ>³"”nU‘C›øôSû/šh ±ì7çÑjý6‘0_±ÜÍ=ìåÓY8‘Ió¿63ôm/Y÷U®;®cþXœþ2­ðñøžŠá
 endstream
 endobj
-5330 0 obj <<
+5300 0 obj <<
 /Type /Page
-/Contents 5331 0 R
-/Resources 5329 0 R
+/Contents 5301 0 R
+/Resources 5299 0 R
 /MediaBox [0 0 612 792]
-/Parent 5315 0 R
+/Parent 5285 0 R
 >> endobj
-5332 0 obj <<
-/D [5330 0 R /XYZ 151.701 685.529 null]
+5302 0 obj <<
+/D [5300 0 R /XYZ 151.701 685.529 null]
 >> endobj
 602 0 obj <<
-/D [5330 0 R /XYZ 151.701 500.21 null]
+/D [5300 0 R /XYZ 151.701 500.21 null]
 >> endobj
-5333 0 obj <<
-/D [5330 0 R /XYZ 151.701 475.185 null]
+5303 0 obj <<
+/D [5300 0 R /XYZ 151.701 475.185 null]
 >> endobj
 606 0 obj <<
-/D [5330 0 R /XYZ 151.701 351.619 null]
+/D [5300 0 R /XYZ 151.701 351.619 null]
 >> endobj
-5334 0 obj <<
-/D [5330 0 R /XYZ 151.701 324.99 null]
+5304 0 obj <<
+/D [5300 0 R /XYZ 151.701 324.99 null]
 >> endobj
-5329 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F89 2333 0 R /F73 2334 0 R /F60 1917 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R >>
-/XObject << /Im3 2328 0 R >>
+5299 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F89 2330 0 R /F73 2331 0 R /F60 1917 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R >>
+/XObject << /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5337 0 obj <<
+5307 0 obj <<
 /Length 1230      
 /Filter /FlateDecode
 >>
@@ -29151,21 +28375,21 @@
 ÁèÓùêÔæ&nDÔûxôkyqw{½xw½X^õš¢K{2!§_oÝ÷åÒ™ŸG½§¸™õuÇ\-oÞßE«hÜWQʉÝ‘åb~’X‘'o»‰ÞƒÂÕo+­ÐŽ.ÅòîâçQû˜QîýâòDºÙUÂÍüëýy}ºüúfe_~eþ1è)ü¿ñ½c‚
 endstream
 endobj
-5336 0 obj <<
+5306 0 obj <<
 /Type /Page
-/Contents 5337 0 R
-/Resources 5335 0 R
+/Contents 5307 0 R
+/Resources 5305 0 R
 /MediaBox [0 0 612 792]
-/Parent 5315 0 R
+/Parent 5285 0 R
 >> endobj
-5338 0 obj <<
-/D [5336 0 R /XYZ 100.892 685.529 null]
+5308 0 obj <<
+/D [5306 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5335 0 obj <<
+5305 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5342 0 obj <<
+5312 0 obj <<
 /Length 1928      
 /Filter /FlateDecode
 >>
@@ -29191,40 +28415,40 @@
 ƒ‡‡Iìÿl+±9=E³b a$€ BÓXJ+Øjºf•Ä[5¹¦X\ÄŽ«+óÿ#›·pkòOÿ·ðX°8™ÿn±³îÅÓ4±J$1ã"ó8x!”ñªÈ$Ë¿Ž€Lr¬1YèÌñÅJÂý«tIž2ž¤Ó—üy.Ÿí÷ï„f¥Þ×U;~ØC2<4ûg<VOò(ea>sùrEû|ýN|ìš
 endstream
 endobj
-5341 0 obj <<
+5311 0 obj <<
 /Type /Page
-/Contents 5342 0 R
-/Resources 5340 0 R
+/Contents 5312 0 R
+/Resources 5310 0 R
 /MediaBox [0 0 612 792]
-/Parent 5346 0 R
-/Annots [ 5339 0 R ]
+/Parent 5316 0 R
+/Annots [ 5309 0 R ]
 >> endobj
-5339 0 obj <<
+5309 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 303.55 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://j3e.de/linux/convmv/)>>
 >> endobj
-5343 0 obj <<
-/D [5341 0 R /XYZ 151.701 685.529 null]
+5313 0 obj <<
+/D [5311 0 R /XYZ 151.701 685.529 null]
 >> endobj
 610 0 obj <<
-/D [5341 0 R /XYZ 151.701 533.653 null]
+/D [5311 0 R /XYZ 151.701 533.653 null]
 >> endobj
-5344 0 obj <<
-/D [5341 0 R /XYZ 151.701 507.684 null]
+5314 0 obj <<
+/D [5311 0 R /XYZ 151.701 507.684 null]
 >> endobj
 614 0 obj <<
-/D [5341 0 R /XYZ 151.701 197.341 null]
+/D [5311 0 R /XYZ 151.701 197.341 null]
 >> endobj
-5345 0 obj <<
-/D [5341 0 R /XYZ 151.701 171.371 null]
+5315 0 obj <<
+/D [5311 0 R /XYZ 151.701 171.371 null]
 >> endobj
-5340 0 obj <<
+5310 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R /F17 1131 0 R /F30 1928 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5349 0 obj <<
+5319 0 obj <<
 /Length 2064      
 /Filter /FlateDecode
 >>
@@ -29245,36 +28469,36 @@
 ]Ü}ŠIÎþ0TûÕ}‚s?#Ò]¿…+üG” ¿Sh³® R¬e>í-†{ƒ`wwH=pã3dÖgð,©Äy~EÉù³ù	‹×PC{ãráud4ƒn™¾jž¡.b×g.¯-7ä÷P¤üC›j¸óÇü¢Ê¹åæÑ\7!ê¤ð@ƒù¿ê/®Ï³¬z©Š³[›ÚËw£õ7±8ñ¥óúÞ@x‡NJ%òòá¦m9`ßùsßz[»üx5¶;M‚ßÍ®Z"mÔåݲ±c–ùkL÷Oj	âzùÊ[^ïŒý˜žu…üØû¯ Z at +¹~#Õ]ù_¸ªÿ¸ùIñr
 endstream
 endobj
-5348 0 obj <<
+5318 0 obj <<
 /Type /Page
-/Contents 5349 0 R
-/Resources 5347 0 R
+/Contents 5319 0 R
+/Resources 5317 0 R
 /MediaBox [0 0 612 792]
-/Parent 5346 0 R
+/Parent 5316 0 R
 >> endobj
-5350 0 obj <<
-/D [5348 0 R /XYZ 100.892 685.529 null]
+5320 0 obj <<
+/D [5318 0 R /XYZ 100.892 685.529 null]
 >> endobj
 618 0 obj <<
-/D [5348 0 R /XYZ 100.892 460.599 null]
+/D [5318 0 R /XYZ 100.892 460.599 null]
 >> endobj
-5351 0 obj <<
-/D [5348 0 R /XYZ 100.892 420.053 null]
+5321 0 obj <<
+/D [5318 0 R /XYZ 100.892 420.053 null]
 >> endobj
 622 0 obj <<
-/D [5348 0 R /XYZ 100.892 254.496 null]
+/D [5318 0 R /XYZ 100.892 254.496 null]
 >> endobj
-5352 0 obj <<
-/D [5348 0 R /XYZ 100.892 230.317 null]
+5322 0 obj <<
+/D [5318 0 R /XYZ 100.892 230.317 null]
 >> endobj
-5353 0 obj <<
-/D [5348 0 R /XYZ 100.892 182.556 null]
+5323 0 obj <<
+/D [5318 0 R /XYZ 100.892 182.556 null]
 >> endobj
-5347 0 obj <<
+5317 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5357 0 obj <<
+5327 0 obj <<
 /Length 1898      
 /Filter /FlateDecode
 >>
@@ -29295,56 +28519,56 @@
 sèµWd~qU{²*…bÀòŒkëÁçÁ"ó; „;P¾ÂÎYÓ"÷¯1Ònýêµ5~áÆ->ÜßD~·£Éž5ïÿÇ@öïúWJÅP[!ð‚Ry[sÐp<3gaÒóÿ)ðÿ.[ýÈL/MñL„§@‘>¼ÑÊèj\ÏuË›ÿ;²(Ó›‰ÿãàHÐpŒ°tsÙ´eˆ8Méæ~»ºócûáy÷oȺfC
 endstream
 endobj
-5356 0 obj <<
+5326 0 obj <<
 /Type /Page
-/Contents 5357 0 R
-/Resources 5355 0 R
+/Contents 5327 0 R
+/Resources 5325 0 R
 /MediaBox [0 0 612 792]
-/Parent 5346 0 R
-/Annots [ 5354 0 R ]
+/Parent 5316 0 R
+/Annots [ 5324 0 R ]
 >> endobj
-5354 0 obj <<
+5324 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.523 267.596 304.855 277.165]
 /Subtype /Link
 /A << /S /GoTo /D (sbeug1) >>
 >> endobj
-5358 0 obj <<
-/D [5356 0 R /XYZ 151.701 685.529 null]
+5328 0 obj <<
+/D [5326 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5359 0 obj <<
-/D [5356 0 R /XYZ 151.701 660.623 null]
+5329 0 obj <<
+/D [5326 0 R /XYZ 151.701 660.623 null]
 >> endobj
-5360 0 obj <<
-/D [5356 0 R /XYZ 151.701 633.993 null]
+5330 0 obj <<
+/D [5326 0 R /XYZ 151.701 633.993 null]
 >> endobj
-5361 0 obj <<
-/D [5356 0 R /XYZ 151.701 600.548 null]
+5331 0 obj <<
+/D [5326 0 R /XYZ 151.701 600.548 null]
 >> endobj
-5362 0 obj <<
-/D [5356 0 R /XYZ 151.701 564.981 null]
+5332 0 obj <<
+/D [5326 0 R /XYZ 151.701 564.981 null]
 >> endobj
-5363 0 obj <<
-/D [5356 0 R /XYZ 151.701 448.119 null]
+5333 0 obj <<
+/D [5326 0 R /XYZ 151.701 448.119 null]
 >> endobj
-5364 0 obj <<
-/D [5356 0 R /XYZ 151.701 329.136 null]
+5334 0 obj <<
+/D [5326 0 R /XYZ 151.701 329.136 null]
 >> endobj
-5365 0 obj <<
-/D [5356 0 R /XYZ 151.701 255.043 null]
+5335 0 obj <<
+/D [5326 0 R /XYZ 151.701 255.043 null]
 >> endobj
-5366 0 obj <<
-/D [5356 0 R /XYZ 151.701 230.905 null]
+5336 0 obj <<
+/D [5326 0 R /XYZ 151.701 230.905 null]
 >> endobj
-5367 0 obj <<
-/D [5356 0 R /XYZ 151.701 208.887 null]
+5337 0 obj <<
+/D [5326 0 R /XYZ 151.701 208.887 null]
 >> endobj
-5355 0 obj <<
+5325 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5372 0 obj <<
+5342 0 obj <<
 /Length 1757      
 /Filter /FlateDecode
 >>
@@ -29368,59 +28592,59 @@
 %2O%Þ\Š9k£|Zîÿ®ì<࣢Îe®äÄj½?`¥Ê]úÕ~^øJf‹Ðåz¯Ï™<S7ï“kåšÿ?Ýmþcp
 endstream
 endobj
-5371 0 obj <<
+5341 0 obj <<
 /Type /Page
-/Contents 5372 0 R
-/Resources 5370 0 R
+/Contents 5342 0 R
+/Resources 5340 0 R
 /MediaBox [0 0 612 792]
-/Parent 5346 0 R
-/Annots [ 5368 0 R 5376 0 R 5369 0 R 5377 0 R ]
+/Parent 5316 0 R
+/Annots [ 5338 0 R 5346 0 R 5339 0 R 5347 0 R ]
 >> endobj
-5368 0 obj <<
+5338 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [334.158 354.886 460.543 366.575]
 /Subtype /Link
 /A << /S /GoTo /D (secure) >>
 >> endobj
-5376 0 obj <<
+5346 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.441 341.337 216.464 353.026]
 /Subtype /Link
 /A << /S /GoTo /D (secure) >>
 >> endobj
-5369 0 obj <<
+5339 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [258.652 341.337 460.543 353.026]
 /Subtype /Link
 /A << /S /GoTo /D (2000users) >>
 >> endobj
-5377 0 obj <<
+5347 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.441 327.787 184.949 339.477]
 /Subtype /Link
 /A << /S /GoTo /D (2000users) >>
 >> endobj
-5373 0 obj <<
-/D [5371 0 R /XYZ 100.892 685.529 null]
+5343 0 obj <<
+/D [5341 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5374 0 obj <<
-/D [5371 0 R /XYZ 100.892 571.813 null]
+5344 0 obj <<
+/D [5341 0 R /XYZ 100.892 571.813 null]
 >> endobj
 626 0 obj <<
-/D [5371 0 R /XYZ 100.892 495.985 null]
+/D [5341 0 R /XYZ 100.892 495.985 null]
 >> endobj
-5375 0 obj <<
-/D [5371 0 R /XYZ 100.892 452.942 null]
+5345 0 obj <<
+/D [5341 0 R /XYZ 100.892 452.942 null]
 >> endobj
-5370 0 obj <<
+5340 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R /F17 1131 0 R /F60 1917 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5381 0 obj <<
+5351 0 obj <<
 /Length 1771      
 /Filter /FlateDecode
 >>
@@ -29444,35 +28668,35 @@
 äÜbJÏbýlª¶ªq ûÊZµP¶vU`ÁYaŠœ·•<³½Qzwheƒ/&ʃÑ™d6%g…ñ¸rzõ'”Äp¦ž­»¶Oøqùýjy±ü|õýý§7Ÿ>~}ñöýç?.µ%ñÓ)i´Ýäi×o«]û×4 _9ºWÀW®êjØžyy¬×Clô²pßËåì/4 ^
 endstream
 endobj
-5380 0 obj <<
+5350 0 obj <<
 /Type /Page
-/Contents 5381 0 R
-/Resources 5379 0 R
+/Contents 5351 0 R
+/Resources 5349 0 R
 /MediaBox [0 0 612 792]
-/Parent 5346 0 R
-/Annots [ 5378 0 R ]
+/Parent 5316 0 R
+/Annots [ 5348 0 R ]
 >> endobj
-5378 0 obj <<
+5348 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [363.305 418.255 425.715 429.944]
 /Subtype /Link
 /A << /S /GoTo /D (sbeug2) >>
 >> endobj
-5382 0 obj <<
-/D [5380 0 R /XYZ 151.701 685.529 null]
+5352 0 obj <<
+/D [5350 0 R /XYZ 151.701 685.529 null]
 >> endobj
 630 0 obj <<
-/D [5380 0 R /XYZ 151.701 556.672 null]
+/D [5350 0 R /XYZ 151.701 556.672 null]
 >> endobj
-5383 0 obj <<
-/D [5380 0 R /XYZ 151.701 529.486 null]
+5353 0 obj <<
+/D [5350 0 R /XYZ 151.701 529.486 null]
 >> endobj
-5379 0 obj <<
+5349 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F60 1917 0 R /F59 1905 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5386 0 obj <<
+5356 0 obj <<
 /Length 1342      
 /Filter /FlateDecode
 >>
@@ -29492,21 +28716,21 @@
 Û
 endstream
 endobj
-5385 0 obj <<
+5355 0 obj <<
 /Type /Page
-/Contents 5386 0 R
-/Resources 5384 0 R
+/Contents 5356 0 R
+/Resources 5354 0 R
 /MediaBox [0 0 612 792]
-/Parent 5346 0 R
+/Parent 5316 0 R
 >> endobj
-5387 0 obj <<
-/D [5385 0 R /XYZ 100.892 685.529 null]
+5357 0 obj <<
+/D [5355 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5384 0 obj <<
+5354 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5390 0 obj <<
+5360 0 obj <<
 /Length 1110      
 /Filter /FlateDecode
 >>
@@ -29522,21 +28746,21 @@
 M4xSU}™¼Y¢V€£`). B#‘mí]ßÝß_º}÷Fk Õó>¯oNWœ1«Â‰]à­ûý¸ ¼ìzî·Ú‡~Žî=©tSrFr•#Ç!ôX­)‡>d:ôx5uú§¶ù…ü?ðLí
 endstream
 endobj
-5389 0 obj <<
+5359 0 obj <<
 /Type /Page
-/Contents 5390 0 R
-/Resources 5388 0 R
+/Contents 5360 0 R
+/Resources 5358 0 R
 /MediaBox [0 0 612 792]
-/Parent 5392 0 R
+/Parent 5362 0 R
 >> endobj
-5391 0 obj <<
-/D [5389 0 R /XYZ 151.701 685.529 null]
+5361 0 obj <<
+/D [5359 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5388 0 obj <<
+5358 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5395 0 obj <<
+5365 0 obj <<
 /Length 1147      
 /Filter /FlateDecode
 >>
@@ -29550,21 +28774,21 @@
 ˜\öË8m›!ܾñ™›ôÝKLÎsGX7öËüˆ zs”8§U70çîvj荧2›T½šoüZ®1•U7ò¿ûI­~Ô´o“çÔx[Þœ8?«/=­Þ¬×¡åÜ0š¡Pݵ™–d÷7Â|ÿ“¼wª-
 endstream
 endobj
-5394 0 obj <<
+5364 0 obj <<
 /Type /Page
-/Contents 5395 0 R
-/Resources 5393 0 R
+/Contents 5365 0 R
+/Resources 5363 0 R
 /MediaBox [0 0 612 792]
-/Parent 5392 0 R
+/Parent 5362 0 R
 >> endobj
-5396 0 obj <<
-/D [5394 0 R /XYZ 100.892 685.529 null]
+5366 0 obj <<
+/D [5364 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5393 0 obj <<
+5363 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5400 0 obj <<
+5370 0 obj <<
 /Length 1770      
 /Filter /FlateDecode
 >>
@@ -29587,35 +28811,35 @@
 ‰Áµ%02õº%7¦ sSœ™¦ƒz2Ê©S,Ÿ;öûf·ù½.Û¡
 endstream
 endobj
-5399 0 obj <<
+5369 0 obj <<
 /Type /Page
-/Contents 5400 0 R
-/Resources 5398 0 R
+/Contents 5370 0 R
+/Resources 5368 0 R
 /MediaBox [0 0 612 792]
-/Parent 5392 0 R
-/Annots [ 5397 0 R ]
+/Parent 5362 0 R
+/Annots [ 5367 0 R ]
 >> endobj
-5397 0 obj <<
+5367 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [304.974 314.938 377.874 326.627]
 /Subtype /Link
 /A << /S /GoTo /D (sbeug1) >>
 >> endobj
-5401 0 obj <<
-/D [5399 0 R /XYZ 151.701 685.529 null]
+5371 0 obj <<
+/D [5369 0 R /XYZ 151.701 685.529 null]
 >> endobj
 634 0 obj <<
-/D [5399 0 R /XYZ 151.701 442.718 null]
+/D [5369 0 R /XYZ 151.701 442.718 null]
 >> endobj
-5402 0 obj <<
-/D [5399 0 R /XYZ 151.701 411.075 null]
+5372 0 obj <<
+/D [5369 0 R /XYZ 151.701 411.075 null]
 >> endobj
-5398 0 obj <<
+5368 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F17 1131 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5405 0 obj <<
+5375 0 obj <<
 /Length 1827      
 /Filter /FlateDecode
 >>
@@ -29640,39 +28864,39 @@
 œ˜ŠÒcÿdüí÷Ï2*’ñÐAï11j7¾ÿ©øß×ÛÕïçÁ
 endstream
 endobj
-5404 0 obj <<
+5374 0 obj <<
 /Type /Page
-/Contents 5405 0 R
-/Resources 5403 0 R
+/Contents 5375 0 R
+/Resources 5373 0 R
 /MediaBox [0 0 612 792]
-/Parent 5392 0 R
+/Parent 5362 0 R
 >> endobj
-5406 0 obj <<
-/D [5404 0 R /XYZ 100.892 685.529 null]
+5376 0 obj <<
+/D [5374 0 R /XYZ 100.892 685.529 null]
 >> endobj
 638 0 obj <<
-/D [5404 0 R /XYZ 100.892 470.595 null]
+/D [5374 0 R /XYZ 100.892 470.595 null]
 >> endobj
-5407 0 obj <<
-/D [5404 0 R /XYZ 100.892 444.101 null]
+5377 0 obj <<
+/D [5374 0 R /XYZ 100.892 444.101 null]
 >> endobj
 642 0 obj <<
-/D [5404 0 R /XYZ 100.892 398.526 null]
+/D [5374 0 R /XYZ 100.892 398.526 null]
 >> endobj
-5408 0 obj <<
-/D [5404 0 R /XYZ 100.892 370.105 null]
+5378 0 obj <<
+/D [5374 0 R /XYZ 100.892 370.105 null]
 >> endobj
 646 0 obj <<
-/D [5404 0 R /XYZ 100.892 268.018 null]
+/D [5374 0 R /XYZ 100.892 268.018 null]
 >> endobj
-5409 0 obj <<
-/D [5404 0 R /XYZ 100.892 230.3 null]
+5379 0 obj <<
+/D [5374 0 R /XYZ 100.892 230.3 null]
 >> endobj
-5403 0 obj <<
+5373 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R /F51 1134 0 R /F60 1917 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5414 0 obj <<
+5384 0 obj <<
 /Length 1564      
 /Filter /FlateDecode
 >>
@@ -29687,41 +28911,41 @@
 |%é>᳏ó[eî”ùMöÖþŽÉª, íj´Ú’<Œšú›íIššî[¡žæôåøDxþÚK?ZûxÀWҲͽUNlÔBÔ§B£ZEÑœ!!c%÷&Él+‹û¹Ð4Êòb¼øNÒ›Ak:¥Jwµ.O.&Nú(ûþâ;×Ô{û {6ËH-TSGb A6kt¦/ü²ýYþ®
 endstream
 endobj
-5413 0 obj <<
+5383 0 obj <<
 /Type /Page
-/Contents 5414 0 R
-/Resources 5412 0 R
+/Contents 5384 0 R
+/Resources 5382 0 R
 /MediaBox [0 0 612 792]
-/Parent 5392 0 R
-/Annots [ 5410 0 R ]
+/Parent 5362 0 R
+/Annots [ 5380 0 R ]
 >> endobj
-5410 0 obj <<
+5380 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [275.63 474.813 346.143 486.502]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-ppc) >>
 >> endobj
-5415 0 obj <<
-/D [5413 0 R /XYZ 151.701 685.529 null]
+5385 0 obj <<
+/D [5383 0 R /XYZ 151.701 685.529 null]
 >> endobj
 650 0 obj <<
-/D [5413 0 R /XYZ 151.701 618.396 null]
+/D [5383 0 R /XYZ 151.701 618.396 null]
 >> endobj
-5416 0 obj <<
-/D [5413 0 R /XYZ 151.701 576.849 null]
+5386 0 obj <<
+/D [5383 0 R /XYZ 151.701 576.849 null]
 >> endobj
 654 0 obj <<
-/D [5413 0 R /XYZ 151.701 198.702 null]
+/D [5383 0 R /XYZ 151.701 198.702 null]
 >> endobj
-5417 0 obj <<
-/D [5413 0 R /XYZ 151.701 168.38 null]
+5387 0 obj <<
+/D [5383 0 R /XYZ 151.701 168.38 null]
 >> endobj
-5412 0 obj <<
+5382 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F60 1917 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5420 0 obj <<
+5390 0 obj <<
 /Length 2095      
 /Filter /FlateDecode
 >>
@@ -29744,48 +28968,48 @@
 ý4ÂÓö›þ »íW	¤°ÇR)e˜Ì†c˜ÀŸ÷~ùoµ†FþÏ.~w:ƸÏxg™Á 	ñ»9‘©cNTdŽ‹S©‰ÒŸœ¡gnÙlÒ<»øçï¡ÑÊSƒKãÁùó½ß₹úû*|!5þ®‘¥[
 endstream
 endobj
-5419 0 obj <<
+5389 0 obj <<
 /Type /Page
-/Contents 5420 0 R
-/Resources 5418 0 R
+/Contents 5390 0 R
+/Resources 5388 0 R
 /MediaBox [0 0 612 792]
-/Parent 5392 0 R
-/Annots [ 5411 0 R 5423 0 R ]
+/Parent 5362 0 R
+/Annots [ 5381 0 R 5393 0 R ]
 >> endobj
-5411 0 obj <<
+5381 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [321.614 606.002 460.543 617.692]
 /Subtype /Link
 /A << /S /GoTo /D (unixclients) >>
 >> endobj
-5423 0 obj <<
+5393 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.441 594.574 296.646 604.142]
 /Subtype /Link
 /A << /S /GoTo /D (unixclients) >>
 >> endobj
-5421 0 obj <<
-/D [5419 0 R /XYZ 100.892 685.529 null]
+5391 0 obj <<
+/D [5389 0 R /XYZ 100.892 685.529 null]
 >> endobj
 658 0 obj <<
-/D [5419 0 R /XYZ 100.892 660.623 null]
+/D [5389 0 R /XYZ 100.892 660.623 null]
 >> endobj
-5422 0 obj <<
-/D [5419 0 R /XYZ 100.892 641.897 null]
+5392 0 obj <<
+/D [5389 0 R /XYZ 100.892 641.897 null]
 >> endobj
 662 0 obj <<
-/D [5419 0 R /XYZ 100.892 181.027 null]
+/D [5389 0 R /XYZ 100.892 181.027 null]
 >> endobj
-5424 0 obj <<
-/D [5419 0 R /XYZ 100.892 154.022 null]
+5394 0 obj <<
+/D [5389 0 R /XYZ 100.892 154.022 null]
 >> endobj
-5418 0 obj <<
+5388 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R /F60 1917 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5428 0 obj <<
+5398 0 obj <<
 /Length 2165      
 /Filter /FlateDecode
 >>
@@ -29808,29 +29032,29 @@
 ³¡úyeøÙ-}Ô²«;/2ÈÜö3‡ð_!úÝ÷ŽÊæò°Õ3=»øeÄegNôaÌBÈR6	oÈå"|x5àÇî“ñ#T½ÿgø
 endstream
 endobj
-5427 0 obj <<
+5397 0 obj <<
 /Type /Page
-/Contents 5428 0 R
-/Resources 5426 0 R
+/Contents 5398 0 R
+/Resources 5396 0 R
 /MediaBox [0 0 612 792]
-/Parent 5430 0 R
-/Annots [ 5425 0 R ]
+/Parent 5400 0 R
+/Annots [ 5395 0 R ]
 >> endobj
-5425 0 obj <<
+5395 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.523 351.729 400.152 364.631]
 /Subtype /Link
 /A << /S /GoTo /D (happy) >>
 >> endobj
-5429 0 obj <<
-/D [5427 0 R /XYZ 151.701 685.529 null]
+5399 0 obj <<
+/D [5397 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5426 0 obj <<
+5396 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F54 1912 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5433 0 obj <<
+5403 0 obj <<
 /Length 2044      
 /Filter /FlateDecode
 >>
@@ -29859,39 +29083,39 @@
 ¿Oä7enn“öÍðÍ´¥Æ„»¨Æ!ž~½ÖÜ÷Ã~õ7{©<<
 endstream
 endobj
-5432 0 obj <<
+5402 0 obj <<
 /Type /Page
-/Contents 5433 0 R
-/Resources 5431 0 R
+/Contents 5403 0 R
+/Resources 5401 0 R
 /MediaBox [0 0 612 792]
-/Parent 5430 0 R
+/Parent 5400 0 R
 >> endobj
-5434 0 obj <<
-/D [5432 0 R /XYZ 100.892 685.529 null]
+5404 0 obj <<
+/D [5402 0 R /XYZ 100.892 685.529 null]
 >> endobj
 666 0 obj <<
-/D [5432 0 R /XYZ 100.892 473.314 null]
+/D [5402 0 R /XYZ 100.892 473.314 null]
 >> endobj
-5435 0 obj <<
-/D [5432 0 R /XYZ 100.892 431.964 null]
+5405 0 obj <<
+/D [5402 0 R /XYZ 100.892 431.964 null]
 >> endobj
-5436 0 obj <<
-/D [5432 0 R /XYZ 100.892 383.108 null]
+5406 0 obj <<
+/D [5402 0 R /XYZ 100.892 383.108 null]
 >> endobj
-5437 0 obj <<
-/D [5432 0 R /XYZ 100.892 295.522 null]
+5407 0 obj <<
+/D [5402 0 R /XYZ 100.892 295.522 null]
 >> endobj
-5438 0 obj <<
-/D [5432 0 R /XYZ 100.892 244.038 null]
+5408 0 obj <<
+/D [5402 0 R /XYZ 100.892 244.038 null]
 >> endobj
-5439 0 obj <<
-/D [5432 0 R /XYZ 100.892 154.634 null]
+5409 0 obj <<
+/D [5402 0 R /XYZ 100.892 154.634 null]
 >> endobj
-5431 0 obj <<
+5401 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F60 1917 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5442 0 obj <<
+5412 0 obj <<
 /Length 1544      
 /Filter /FlateDecode
 >>
@@ -29908,24 +29132,24 @@
 òú½åõþ¥ö9A.{D×Ì"ÃäFQ1>»ºm!ë<ñуMì´¬ŠÐ ÒŒVÅEòéLßK@>öRA½4cÍØYÿâßs±oøÁNe,¬ƒé'™øÔ#o¾­¶,ezæÏaVÂÑF±©>fœ¤G·’S˜o¸5à¡·š‹Ì·¤„ù¦34ãï•a²nìpœ`Dz#H1Í‚zÀ֐º£væéeÖªƒ²Ö;UcFËb‚Êâ"¥°hÁ¤t3_8`ªQ‡æ\¤F(äíº„³_A6¢=Ï€$†À]Íé•a¼Õô¼¯]MAA ²¼÷êöîŸOò¯Š‡q0—þ­Ž³J´4J <àêLØ}ä…ŸÙsɳ3Æ?Wô€øWs4iL3%ž4j­fB:X²1xù“	¾F2 )ufð#ñ/öÅ°3;=?‚!BRàA¬ÇQ8<*f>op”r<nkªQš{*ñÑR½ìÈÎ߱Ī­f¯.­Ê|è‘Ms ü›~£y?ž`Ö£%lô†ÿù³Lõ;m½æà%:U{UÓ?ÿœ•0JÍ®éUË+Fuü¾ÂqF¦â­ãÆòÿ ñ³I÷Œ˜Ð5ôB”ÓÚ·³#Žéõu¸`VŸÏp6Íßêú3+».FÊÀÅGÏôð1ðc%*|9.›iü‡ïòïSS0ï
 endstream
 endobj
-5441 0 obj <<
+5411 0 obj <<
 /Type /Page
-/Contents 5442 0 R
-/Resources 5440 0 R
+/Contents 5412 0 R
+/Resources 5410 0 R
 /MediaBox [0 0 612 792]
-/Parent 5430 0 R
+/Parent 5400 0 R
 >> endobj
-5443 0 obj <<
-/D [5441 0 R /XYZ 151.701 685.529 null]
+5413 0 obj <<
+/D [5411 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5444 0 obj <<
-/D [5441 0 R /XYZ 151.701 660.623 null]
+5414 0 obj <<
+/D [5411 0 R /XYZ 151.701 660.623 null]
 >> endobj
-5440 0 obj <<
+5410 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5447 0 obj <<
+5417 0 obj <<
 /Length 1324      
 /Filter /FlateDecode
 >>
@@ -29943,33 +29167,33 @@
 c+2à
 endstream
 endobj
-5446 0 obj <<
+5416 0 obj <<
 /Type /Page
-/Contents 5447 0 R
-/Resources 5445 0 R
+/Contents 5417 0 R
+/Resources 5415 0 R
 /MediaBox [0 0 612 792]
-/Parent 5430 0 R
+/Parent 5400 0 R
 >> endobj
-5448 0 obj <<
-/D [5446 0 R /XYZ 100.892 685.529 null]
+5418 0 obj <<
+/D [5416 0 R /XYZ 100.892 685.529 null]
 >> endobj
 670 0 obj <<
-/D [5446 0 R /XYZ 100.892 660.623 null]
+/D [5416 0 R /XYZ 100.892 660.623 null]
 >> endobj
-2349 0 obj <<
-/D [5446 0 R /XYZ 100.892 476.122 null]
+2346 0 obj <<
+/D [5416 0 R /XYZ 100.892 476.122 null]
 >> endobj
 674 0 obj <<
-/D [5446 0 R /XYZ 100.892 346.664 null]
+/D [5416 0 R /XYZ 100.892 346.664 null]
 >> endobj
-5449 0 obj <<
-/D [5446 0 R /XYZ 100.892 319.432 null]
+5419 0 obj <<
+/D [5416 0 R /XYZ 100.892 319.432 null]
 >> endobj
-5445 0 obj <<
+5415 0 obj <<
 /Font << /F77 1973 0 R /F17 1131 0 R /F15 1133 0 R /F28 1124 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5452 0 obj <<
+5422 0 obj <<
 /Length 1682      
 /Filter /FlateDecode
 >>
@@ -29990,34 +29214,34 @@
 ­™€9åÿ¶B%ðœþmçJ’DÁs« m~¨ÄgÉ¿T$ÌIîÿ¡btå?¨¸teüM× Ïç9%
 endstream
 endobj
-5451 0 obj <<
+5421 0 obj <<
 /Type /Page
-/Contents 5452 0 R
-/Resources 5450 0 R
+/Contents 5422 0 R
+/Resources 5420 0 R
 /MediaBox [0 0 612 792]
-/Parent 5430 0 R
+/Parent 5400 0 R
 >> endobj
-5453 0 obj <<
-/D [5451 0 R /XYZ 151.701 685.529 null]
+5423 0 obj <<
+/D [5421 0 R /XYZ 151.701 685.529 null]
 >> endobj
 678 0 obj <<
-/D [5451 0 R /XYZ 151.701 579.309 null]
+/D [5421 0 R /XYZ 151.701 579.309 null]
 >> endobj
-5454 0 obj <<
-/D [5451 0 R /XYZ 151.701 552.67 null]
+5424 0 obj <<
+/D [5421 0 R /XYZ 151.701 552.67 null]
 >> endobj
 682 0 obj <<
-/D [5451 0 R /XYZ 151.701 414.542 null]
+/D [5421 0 R /XYZ 151.701 414.542 null]
 >> endobj
-5455 0 obj <<
-/D [5451 0 R /XYZ 151.701 385.289 null]
+5425 0 obj <<
+/D [5421 0 R /XYZ 151.701 385.289 null]
 >> endobj
-5450 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F60 1917 0 R /F59 1905 0 R /F89 2333 0 R /F73 2334 0 R >>
-/XObject << /Im9 3542 0 R >>
+5420 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F60 1917 0 R /F59 1905 0 R /F89 2330 0 R /F73 2331 0 R >>
+/XObject << /Im9 3531 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5460 0 obj <<
+5430 0 obj <<
 /Length 2147      
 /Filter /FlateDecode
 >>
@@ -30039,199 +29263,147 @@
 Z%ô}Ä€äÉ“0ü¼-1¢Ä‘K!íúD5†x¾Õ×ò‰>»V/¢îÓ›Tï«^xf„ôwNx¸f¦éQžò“ƒ"+CE{R®‘âØN»Ó°G!äkoGsáF(ó•ñ­_ËlÖÏîW“å¾!Í£à÷÷àú$\ãýTiðqñ %­‰ôÐÆ7ùÂÿåÝbà•—ã2ªÍiõ{8¯ÕR8Å"ˆ‡†"Î?'“¶¶;2˜Î•T<—ʘÝÒƒÛ«kë‚Q~PiðZÓ|ÿŒÌùÛÊ	í§¾©øˆO¢è›Pþ?"ø©¾Ùø÷\aX÷Š§ƒ|š Î~°1Š¬è„1lÊòÇÄ[ÿ|0Tp‘TQÇ÷º_võ[¦m'¹4Oq ý60‹‚aV£ÉÀ,xÒ»*ont3é‹¡wëUhFælçæÆŠLÉçö©Q^mV>®¨¼þ?’E…ô=KŒ@"°^râhOÞ¥”¤q ¡Ù8·ˆõµ†pÿa={çüʨ:”v"+–c)ae¼%Tu\­ÏÊ›R\?·`éSwFn*ó=%zÂkw”q¿¾´2'	FNöˆï.•Æ¤î&9U¾£ˆŒ×äÒ *ª¬.ÎPìP¸tÿ^í$ü¤n£—vZíPþŽòÈéÎÞdiLõÍq@ðƒæŠªðmI¹Ú:äIÊ«»?ëŠ$¬ÊåÈ‹†æÒÒkïW^„I±è^M"¬æún1mÄÛ,›¿¿þl™L
 endstream
 endobj
-5459 0 obj <<
+5429 0 obj <<
 /Type /Page
-/Contents 5460 0 R
-/Resources 5458 0 R
+/Contents 5430 0 R
+/Resources 5428 0 R
 /MediaBox [0 0 612 792]
-/Parent 5430 0 R
-/Annots [ 5456 0 R ]
+/Parent 5400 0 R
+/Annots [ 5426 0 R ]
 >> endobj
-5456 0 obj <<
+5426 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.441 196.124 206.281 207.813]
 /Subtype /Link
 /A << /S /GoTo /D (ch8-migration) >>
 >> endobj
-5461 0 obj <<
-/D [5459 0 R /XYZ 100.892 685.529 null]
+5431 0 obj <<
+/D [5429 0 R /XYZ 100.892 685.529 null]
 >> endobj
 686 0 obj <<
-/D [5459 0 R /XYZ 100.892 331.65 null]
+/D [5429 0 R /XYZ 100.892 331.65 null]
 >> endobj
-5462 0 obj <<
-/D [5459 0 R /XYZ 100.892 304.336 null]
+5432 0 obj <<
+/D [5429 0 R /XYZ 100.892 304.336 null]
 >> endobj
-5458 0 obj <<
+5428 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5467 0 obj <<
-/Length 1624      
+5437 0 obj <<
+/Length 1621      
 /Filter /FlateDecode
 >>
 stream
-xڝ]oÛ6ðÝ¿B2P+I}ð±[Ú!Å6tˆ_†¶´ÄÄB-Éåºù÷»J–¥Ø† ÑÝñxÇû>ÇÁc¿­~Ù®nÞ‹"HâHÇ:	¶A’&Q'AVè(Õ*ØVÁ§P¦ñúËöðŠ ˆt–)bÍd$2D<ԏ½êöq½‘©
-ÿÜ*n»ÆÔ-ÃCÇß{ÓìÌF®7‰Jòð×½9¶ç#ŠVﶫo«DÇA2{RI”ÍêÓ—8¨àìCGRÁ™8›@¦E”¥)À‡à~õ×*öv.ÈÊâHõ\X®óW…ýÌY)HKsvÄûúñÔ[°¦¡Žv\’Îï¥:’Åä¹ûr-Špop_	÷¤
-ßý8ÖIŽc‡iØ£L)ÃÖôÇõ.–Œ}_§ihšcÝ{¾}ÇçÖ¹Ÿ8U¥‘Vêÿxõùw-„Œ´Aç‘LŠþ¶Š#’ #@äñŽ'ÜÜ5b·hYŠÞ&‘ nD”hñ_Þ<I·™½Ž"{!g‘Py 2Å…ä@Uf0;ãÀ¿Bˆðsœ¨ƒuÑz£â"ü{]¨°;ñQ³yxrcn0½­áX#&ÆK¦kùð\{†Z{f`Ra36‰ŒR¥ùQP[ ‘*‚~ÞC
-ò=£Ox†¯B¤‡'aÿh¯ÎzƸ^!Ï*ªW0Ëë’"’‰Oí·¤
-N0kǦavþ!o€b&ÍÈa0'è­©žü}Èïî" mÿÐõÍ(œ.ÈÐÙ²k+&Nîz3÷CÊO{è‡už¹b2í+ gšìÑ1hü”^±ØÞ
-Ø4á]ËÔÎ=ç™lë+¶Ê¼«Ss\
-
-KLâ)~Ȇتø <É ‘H;-C—ØÒÄž<b9ˆÌ@¬ù
-DbƒüÙ«¼yvÖñM‰2:úY, R]rªçS½ð©ØŽ#ÉH	a8°@DÞ=0u2‹X¨¸OuÎßÃ\9Ç›à`g:¾™¿¿ßâí·½jC‰ÿu³d³m+t´Vó¬/Äèµb¬f†[JMvf<C©uÁv{‘„`߁I¦,»Së	u‹ùü2a/…[Ng«Ê½H ªq`|w1´}嘎9 ÖLåX÷ðLö@B.Xz5Qc@Ò½ÆYt`dGÅn©jp›´½e»)Òz– iÖ
-‹b!Þ@ìZP2¢\f3í£}µ¬„Ž'W Ì=¤ë±­pG"ڏßéÆU t¹nä5þÌ`h	èí39ØQk³\æ³ö'9Ës¶:g«¥Ïfüž˜ ±é½Út&}ŽÇÅ+Õ×{¸cڎƹjÁÅÅ]# <F^˜°ž¢¯øÏR呪 <H“â
-ï0SÅ ¹¢Ø®"âËžšJ’öÖ¥eÌ69ÉÉd^'¯¶)]D1Ø9Z¼P ;úPÇ\0NeQ¢&ãFùö‡Iýàs#ΧJö	ëßEeïœØÀ•ÜF`AU‘ˆÅµ¹Ÿ,¹4LÌç0œ˜–¿ŽúãCtFŸVLƁ0³ø¶4Séþièh„$|bnèë£[*ˆî„vê„3VN•±q~²–X§ªd¦«¾»KºÓ¸•Ç2Ý#Ö’ö~ç™™ür 7~µ©[Ks1•“ƒ·„Çž~ì»Éspv4ÃÞŸnå'¬%k”ž¨¾éYÔÜ"œÂ
-SÆ°s¸ÓÁÿ0tÒpIaú2·j«ÉéҏڊaÞÏwd¸ìp(È‹óg°ÍqðëõeD
-æ~yy›È—ÑŠ˜ß"q)¢Lª¡LÏiøS,ÄJÐJ¬vH­¬ÈÂ;×áÝ=¸Ó¡Zzª9P'TÙ¬ÕÒvúAß!â©R¬èÞ1í¼÷ש© p:2µjåËÑ¹xèhPp¡T¯­-·<›yFæ9Ycðö÷µ"°Pdñ{5–»n;ª‚—Nrc‡òæò–çm~h=u*,^hÖœp ržp€zËà‘¾§ˆX‚.qU=^T›¾X
-ðeïÓ³Ù‹79yÖ_¤%@aݼ8šu'¼[ûØð?v¿<„ 1‚ÿ~‰g3Mz°T,9ßè7:?¡¨Ê_ü脵ÿ +$9©
+xڝ]oÛ6ðÝ¿B2+I}ð±[Ú!Å6tˆ_†¶´ÄÄB-Éåºù÷»J–S¥Ø† ÑÝñx¼ï;ÇÁS¿­~Ù®n߉"HâHÇ:	¶A’&Q'AVè(Õ*ØVÁÇP¦ñúóö=ðŠ ˆt–)bÍd$2D<ÔO½êöi½‘©
+ÿÜ*îºÆÔ-ÃCÇßÓìÌF®7‰Jòð×½9¶ç#­ÞnW_W	ˆŽƒd¦RI”Íêãç8¨àì}GRÁ™8›@¦E”¥)À‡àaõ×*öv.ÈÊâHõRX®óW…ýÌY)HKsvÄ»úéÔ[°¦¡Žv\’Îï¥:’Å乇r-Špop_	÷¤
+ß~?ÖIŽc‡iØ£L)ÃÖôÇõ.–Œ}[§ihšcÝ{¾}ÇçÖ¹Ÿ8U¥‘Vêÿxõåw-„Œ’,ÒXD:(úë*ŽHü ‘Ç;žp{ß@ŠÝuðÊRô6y©,6"J´ø/:OFå63í(²×q	•
+ää…ä@Uf0;ãÀ¿BˆðSœ¨ƒuÑz£â"ü{]¨°;ñQ³yxrcn0½­áX#&ÆK¦kùð\{†Z{f`zÂfl¥J³RP[ ‘*‚~ÞC
+Áã{FŸñµB¤Å“°²Wg=c\¯gÕ+˜åß’I$’‚ßzCOÁ	æcíÂ4ÌÃÎ+rD3½ŒsÞšêÙ߇üî.ŠÐö]ߌÂé‚-»¶bâä®›%?<v‡C‡ž¹d2íK gšìÑ1hü^½b/(²½ ²i*Âû–©œ{Î3×WŒ•yV§æ¸¤KLâ)€È–تø <É •H;-C—àÒÄž=b9ŠÌ@¬Y"±AþlA+oǝ߅€ž¦L=½œë’s=—˜ë…ÏuÀvJFJˆûãé€"Òðþ‘©“YÄBåÀªsþ&³È9àØË8ÓQgþþ~‡·ß|ðOÊü/›%›m[¡£µš§}!F¯c93ÜRn‚°3ãàÊm,¦°Û‹$ûL2eٝZ_!H¨[Lè×3¶nËéâlU¹	@5NL€îï"†¶¯3À1Àš©þë_ȨBÈK*QE1vD ÝkFFvTí–‘ª·IÛ[¶›"­gù’f½°(â
+Ä®õ %#Êe6Ó>ÙWËJèxrÂÜDºû
+·T ¢ýøn\		àAǐëF^ãÏ†–€Þ¾ƒe±60Ëe>ë’³<g«s¶ZúlÆï‰	»>Ñ«HgÒ§xܼR}½x€;¦âhœ«v\\\6òÊcä‰	¿³ãYôÿYª| R€iTÜð3Uš» º€5ì*"¾ì©©$Ùho]ZÆqRHØôÈä$'“yŸ¼Z§tÅ`çhðBîèCsÁ8•E‰šŒåÛï~&õƒ˜q>U²OX¯•	è9±+¹À†ª"‹ks9>Yri™˜b81-õdžèŒ>­˜Œa.g
+ðmi¨ÒýÓÐÑBIø̸¡¯n^)«ÓÐLpÂÊ©06ÎOÖËT•ÌtÕ–`wICw·âXÆ¡{Â2BÒ¢ï<3“ª²ñ»MÝZš‹©œD(¼%(?xú±ï&ÏÁÙÑ{B+?a-™£ôDõmLÏz æ¹ 7LÃÒáNÿËÐée€K
+“З¹…Tk\MN—~ÔVó‚†Ð¸ Ãe‰CAfXœ?ƒmŽƒß—°¨/‹ R0ÿðËÛÛD¾ŒVÄü‰[eR
+e:xNßò`Ñ ~­Äj‡ÔÊŠ,¼÷wÞÝã€;ª%Ú:¡Êf­¶Ðú	wH•bE÷Ži罿NMÓ‘™¨U+_fŒÎÅCGƒ‚¥zmm¡¸åÙÌ32ÏɃ·¿­}…"‹ß«±Üu»ØQüú»t’[;”·]^¶~;è©SañB³æ„ƒ'ç	¨·”ô=EÄÞW5ìß‚rÓK¾ì}z6{á&G#Ïú‹´è"¬›ŽfÝ	ïÖ>6|ǏEÇ/!hŒ`Ä¿ŸAâÅ‚E“–Šƒ%çbãFç'Uù¿:áWí?+9á
 endstream
 endobj
-5466 0 obj <<
+5436 0 obj <<
 /Type /Page
-/Contents 5467 0 R
-/Resources 5465 0 R
+/Contents 5437 0 R
+/Resources 5435 0 R
 /MediaBox [0 0 612 792]
-/Parent 5469 0 R
+/Parent 5439 0 R
 >> endobj
-5457 0 obj <<
+5427 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-ByExample/images/ch8-migration.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 5470 0 R
-/BBox [0 0 376 248]
+/PTEX.InfoDict 5440 0 R
+/BBox [0 0 379 256]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 5471 0 R
->>/Font << /R9 5472 0 R>>
+/R7 5441 0 R
+>>/Font << /R8 5443 0 R >>
 >>
-/Length 5473 0 R
+/Length 5444 0 R
 /Filter /FlateDecode
 >>
 stream
-xœÝY¹rGõû+ʤ–ê>ÖÓ®6dicŁ,q
-h‘ØÀ Ô ’B¯—uteÏ`ºÇSF£²_e¾¬#ž_…’Z(úkÏýaúú]Ÿ'£et6‹?&-ï¾›¬UÒf-’uÒh/³Ä%•±â¥
-¯H’öÒë ÉnR2*­£çÿ?NYËàœÙ8©0ù(³1B+ç%tï¦_&
-¥Ùkp¼¾›ŒÔÝ%¤³I蘢TVXŸ¤uBë,mô=cBˆ2„uŒwIª¸Žq&ɐ×1ÖZ,™0ÆÊ´ˆØƤíÖÆ%³èld2؃!IN
-—4©Ñ6FI«
-låy¼Ÿ\°2ƒ
-჌X§YÁ<®&0£KœÒÒaF×àT’.mŒDtŽ]Á‰{lè—êÙ'ÚãóísNæ´pç gcvÒàŒæds'bvª)˜ÇÕsÒz+ƒNZ\Ò`™:NvÀ̱)8ñb¹}_–g}û4mŸMFÆl绊IQ«;2YŸkdº•!Hc¢ÐÆFé–«KrÄSÙ'S2aê@u	GYDÖ <CuÉ•èSâ¨&á(œŒœVp¢ÞêŽRÒç@õü¬¤‘Ê',ÆÈ%=Œk¥­Ä>°Àn᳆d¶s&³blv#K=œÙzÀ&ý½ö?•õI^û@©oü£\À†ÐIÓASæéYY¶dZäÈÊÊIyú
-8ρWÁ­Q`„È–ðHÂÂA­qeBÆÔtÆ`½ pºÖ´
-œp›qApp=ðD·IhC¯ í†÷SæL¨6­	Š¦mÐXœˆŒš›kÎi44\&g9¨I¸¦óÎûLéoo‚…w—A›g³M°(¸¦q¤¥¡+€’Ìé‹ã2úµƒ±†£cm\Ê•eA´-¡°JŠÇW ŠÒîbÕm±°”:p~J͆{ÚúóÔËmøÂÍkàƒÐ’™Ó
-N>7w‘Ù6|Áì8#Ô(eWÛëk¾¤tü•Å‚9´ ®Œ-¯%œ‡€'Q±…ò´á<œnׯ€Ÿ…3›,õ‡±äMÂ/ü
-hÓç¦B£‡9¤¥¨æÇ…Kz	ûÚ½Œ}•—I›ÊË k„'Þ¨ÒðD¤xù°l×쮀³½hhgHEiis~Ô½Øí†HY¢ªE-”m=[3Õ1‡(»…šMÌö Ô£wn2
-SGÇ·]õ³
-ØB/×}¾üGÊyîK“,^Aí†a†ŠYªt¢k]Î#ïpPA\Õ6ˆjs4èPPùÃHÙ-¶À¥YRSÔ6j7dÞÉàM©óÛ¼&©	~Åx!rc¹Å&YðZA1^(¨ña›dÁk5xe*§·Ø%œ×jðÊÖàš9f±K8¯5ãåôÜ^/8]@0>(HU䆪`Áæ"†q)
-Šæ¶šdÁg58¡Z3ƒ]ÂY­¡vLfm³Ø%œ×Šóò¸û~a±J–¼.£8/´Ù,,VÉ’×e畲tya±J–¼.£Øg…ˆ4BS£8—&Ÿui=‚p°ýƒ'5IÁW¹:Ê’J]LP‚–Ý—­IRûy¼ŸVùºÑ$ÃnÕ°àá1ar‰š³gS;ÕD慄DGÌ$«†/öÜ1jÔÊÂ	º€Ò–6¥õUöÃl3Ïšd&Þ4ŒqµÁ\ËH.Ù×2DÊÃF3×:¢³lNýØ/²è—ëeùBFÒO½#IÝè& Ãæ«»Îo×xá´ú•ÓÚH”/h6ú_[—èûl½Z¹]­^gT¯ÚÍ “ÔTn’AÃ^Èi:ÖèIaËÍãýdp3(üæqµ±Ÿ†e¡‹bÖàóÑÒÏ6Ú3:‹Ž˜Y6
-'~ì¹o)¢ÎÜ·„õBá3kè,P ÎvÛ˜ù֝y×0«
-æ[¦M®eiKgmÌ\ëˆN²)8ñâKöŒîÓŠomoNÎhu6»­#j?¢ínT'We?.OcñÀkwïlý4¨Ñ¢º)êXÒV—P&¼UÜ
-è S¹uX«•ižv­ï¹´›~=äöçÿ@÷ªü’a¾TÚøÒPg«±lt^£Y
-"¢)!2© ѼGÐDçDË¡ÑÒPšDÉ=´`™BaÊô󐾕{ŠlèëÍ >Õ>Ö>JúLœ}÷¡ùôÛµÑØ”H«¡ŸŒ,}ëRØ׺ڿNº.x{ìâŸ7Ó×ï(.cñPèÞ V„H`—h_)B#äܦ7ÿ¹qâÝÝÇûç—ãŸ_ÝüÂBù”“x[çôaz³ûæûò΢}¡^ÍIúÉ¥¾º=ü|+àm³˜ýþÍÇÛÏÏ·ñt/~Æï¿"x¡Ù~¦Í·¸0Êê «zЫŠ±¡6Y(.x[^þ÷ÛÑK:t‡‘}>fRô*ÓoÌó4l
-½­³Šqôg[LÆ
-åMyw/âøy/~¿=|¾?Þ&¤Èä\Ÿà÷÷·/÷OâPþ»{þGY°œ WZá„êяÏwGñÍ~ÿôÛãËsшM5Ùz¡ñÛ§Ãíý£øîøôÛç
-ó8C©øÂ
-ßî?Ý?Þ-þûfúaÒÇ—”Ž³÷t tôCüûte®AíH†x€ÕÂ
-ITYº¢O;FYúŸ2‹‚[’J5ŸB¶~˜þ>gl
+xœÝYKs#5¾Ï¯Ðq9¬ÔzrãUœ `N,‡à
+»¡ìdqÿž¯õ{|£j+‡‰z>uÝ’ZÝã?…’Z(þ«Ïí~úüMïŸ&£e°”Ä?S~/Þ|7)II‹¬4Ú‰}—x¥¤2$v¸ É¿ ‰ÎI§
+$›IÉ ´Fœþsx?%-½µN$o¥Ò^Xd2Fhe„ÎÃÝôû¤¡49
+~WÀ7“‘ºº£ÉKKQèh‚T$ÈEIVh$]ÐTÞ/1îãb”jc}”>]¶E2aÉäµX b)ÁëƒØX6FÉȨ±³ÄX8)lÔ9òÚ"DŽ``,õñv²ždȬ*ÂyòŒª¡‹
+Ìè«%B=k°QÚ0Ø(cÌè,*¢³¬ŽüØbI?]ß>ð:Ÿ,!E+Sݤàytä±QÌL¡Ž7¢9Ñ4ôq±1¸I‰¤7ƒ›8©ž7Ëxt³":˪áȏÅ~r¾µ%Ô¼„‰ú™u°§U‚!)Å’¡® A¥÷Ò˜ ´	A:€u	r™,éÒX%#fΠ.™A¤ôÊ
+ .@	™>ÆÔ$3È"‘†‘RÌG	¯ü€é’¤¤KɃåé?ˆ¡‘ÊE—†Û¤%r­*,ßnHíˆ]
+43§’y–G–Mv¾§v'¶vXžÿ×þ‡Ÿè´ó|ùÍÿ(\1ï1í5ß=íÞÄ=›ïZÜ’9“å=6ßÒWÀÇ[ð*8œ¾áQ&©5Î¥÷ñ„Á*zAà
+t©<8œ´‘8صx¦[%¼ W€6³,ž‰QuZdMë 98z4W%#§ Y“ÇY²4‚ªdÔt4x‡c&K…ÖÂ\ï΃V÷f@HÈÐØÒÒðÀkõٍqýÒƸ„ž7FÝÆÚD/•ÍaÁ1Ìi°H²ÇW ²ÒæbÑM$ßÈÆ’Çq΃šŸÇ^®Ãn^Ÿ	-™YäXs½·g™­ÃÌ®„*¥dsi{e°ÖáKJWÀ_Ìá–·…`(—‡	Oâò÷ýyBp¾$xü$Y”ú*Ÿåò*üЪÏU…Ar¸–ÐÏ´Ç™CzûÒ=}‘ºm
+/$}‚'ΫÜò @JáüfY‡/Ù]Ö¢¢­g¹©M^º.(k±
+ÚÌ"kd®¬¸^MÔYÏd3˜jƒM”ìBÍ*f}¢¡Û„„’Ôòö=· kèeü×ѧáw¨h­}©’…ÃP›Ùð€
+Iªx¤k]÷³A-ªÖA\—£×@«ƒƒ“/T6vI¹¢ÖQ›Y3ÞeT›W%å‚_Gͼ’FMjh°Ø$#¯K¨™W"Ê-Ïl±IF^—P/.§]-VÉ‚×ÔÀ
+àÒ`,XÅœ’‘n´•Ç>g34H†Óøl¨IF6—P›AFÜ¡öšdät	5òr@ë…Å"Yò:yd›¸°X$K^çQ#/t¨ä‹dÉë<jà¡Lãéj’¯¨—6‰ŸƒÅ*Yðº€>(còÁÔ܇™(?PŠ;$aOõ²ÖÜ$yW@ìê,°0†Z2›à*DYÉÚ”Ž\зñvâv¯|×(’ÙnÑ°àá0¡,å¬ÙØë>-&êx;u
+ÑHV
+G^lGǸQˁ. ·¥UiD}Åi¿™­ãÁ³*éÄ«†>®6×êô®!¡
+Ši¶Qǃk
+Ñy
+Ç~l·è§ëeþ6ÆÒŽ½cIYèÝ àÍ抻֭m×pf·º»µ’ÈÏÈ{þ_SÄ~ôõh¥z´Z­“P½jÛAûAR®rÙœæmžÔp
+mãíd,â•ÙTù°ÐÐÇÅÆvêË¿xÑ5XÜùh黍:ƌƢ!˦áȏíè[Ò¨‡Óè[„~>]kDg±Û­ãÁ·†hÌ›†6®6ß²­Ùµ„zKÚMÔñàZCtÚEÁ‘Ÿ²g|ž.øV×vw´G‹³É®mQ²ã­g£(8:*ÛùðT»±vw8…ùÓŒçF‹ë‹ C¾¶š„oÂkPÙ]>2›øw›üõ:ÈÄóœ­}Ï Íô‹h)·=ÝwHk¨òó—v—»V$(ãrC‚FØÀÇÁÉèE@R’¬òÒ@“‰C8´2ùšDÉ}°Ä©0QþeÂð‡rÇ_•Ð©{žÀtŠy„>HÏ9­LÈë™–à6càBÿþ©Tk‹u-ÑþsÒ%àõ±Ý‹¯n¦ÏßðÅŠày7¸@BD°‹¼®ˆ°‡G7ûéÕ7V¼¹{ÿô|ø÷³›?&”í.¡-~]ækqónzµùòûüŽÐ¾p¯f¥&2åÕíþ·[Q¯Ë¿œýöÕîÝíǧ۽x<ˆçw¿á¿·Ÿ1<Ó¬?Ô‚ækìxéa¾D{ž'ƒ_ÑÌ
+¤a^<Aæ—?~ó5¿$¥¸mÆRîÎŠ_%þ'Ræ(¿-³²u4hkÌÖ
+ô`ZÆX,<Ü=‹ÃÇ­øûvÿñþp—©°&ã"€m6€ßß¿?Ü>ß?>ˆ}þïî鋲¡™Wa#øâÒÏOwñåvûø×ÃóSÖˆe5x½ÔøÍãþöþA|wxüëc9좘
+ßn?Ü?Ü-~{3ý4iO*'}lh—{ \ÑüS$”ןÍ5¨
+ː8E¡üäÚÒäR[ÜÞÚ»2+RQ*Uã¶õÓô-©l
 endstream
 endobj
-5470 0 obj
+5440 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110929)
-/ModDate (D:20080610110929)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090506-05'00')
+/ModDate (D:20080528090506-05'00')
 >>
 endobj
-5471 0 obj
+5441 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-5472 0 obj
+5443 0 obj
 <<
-/BaseFont /GFUUDH#2BAlbanyAMT
-/FontDescriptor 5474 0 R
 /Type /Font
 /FirstChar 32
 /LastChar 121
-/Widths [ 600 0 0 0 0 0 0 0 600 600 0 0 0 0 0 0 0 0 0 0 600 0 0 0 0 0 600 0 0 0 0 0 0 600 0 600 600 0 0 600 0 0 0 0 0 600 600 0 600 0 600 600 600 600 0 0 0 0 0 0 0 0 0 0 0 600 600 600 600 600 0 600 600 600 0 0 600 600 600 600 600 0 600 600 600 600 600 0 0 600]
-/Encoding /WinAnsiEncoding
+/Widths [ 278 0 0 0 0 0 0 0 333 333 0 0 0 0 0 0 0 0 0 0 556 0 0 0 0 0 278 0 0 0 0 0 0 667 0 722 722 0 0 778 0 0 0 0 0 833 722 0 667 0 722 667 611 722 0 0 0 0 0 0 0 0 0 0 0 556 556 500 556 556 0 556 556 222 0 0 222 833 556 556 556 0 333 500 278 556 500 0 0 500]
 /Subtype /Type1
+/FontDescriptor 2063 0 R
+/BaseFont 2067 0 R
+/Encoding 5442 0 R
 >>
 endobj
-5473 0 obj
-2039
+5444 0 obj
+2033
 endobj
-5474 0 obj
-<<
-/Type /FontDescriptor
-/FontName /GFUUDH#2BAlbanyAMT
-/FontBBox [ 0 -186 593 627]
-/Flags 5
-/Ascent 627
-/CapHeight 627
-/Descent -186
-/ItalicAngle 0
-/StemV 88
-/AvgWidth 600
-/MaxWidth 600
-/MissingWidth 600
-/CharSet (/A/y/n/c/M/o/d/N/C/p/e/D/colon/P/r/g/s/h/R/G/t/i/S/u/T/four/v/U/l/a/m/b/space/parenleft/parenright)
-/FontFile3 5475 0 R
->>
-endobj
-5475 0 obj
-<<
-/Subtype /Type1C
-/Filter /FlateDecode
-/Length 5476 0 R
->>
-stream
-xœ}W	TWº®¦»«Z6—²Á7$U’ n¨è(‹dq‰,Q@
-3l
-hP¡ºÑ`©Ho4Ú4PFE‡¸“ħBˆ1Oc2$&ú˜2Iþšs9ï¼[
-ÒdΙ9‡Ó‡[uïïÿÿß÷ݯ$„̉H$ιéiùêˆØDq(xI„—œ„—¥Š¾ý'%™_ï¶×U¹J9WÙá—&-™ßM†ÃaÇ$B*‘”ì;©*PoÍÙ”]äퟴf]ÀÌ™³Oæ{§«_¼ñŽÊ*ÌÙ”ïý*þg[V®ª /+¿(Ô;ÏÎÍÍÉðÞ”«.È.ôNËÌÌÊ—%§åfmöŽÉÉÍ)(Pmóöðž?wî¼Ùøg~\N^zq¡w¬*_å½Ú{MÖ¦âÜ´­¿yHÄôu~F¬*3.² +*aë¦Âì5Ë‹rÖ'nKÊMËK÷öY@>Ä[D<EÌ!ˆh"ð%Þ bˆWˆyÄZb‘H¬$‚"‰XE, ’‰…Ä:âD,±Œˆ#"		1p&¼%á‹+JÈ
-1$Ù&ù»S¶Ó))#­þS¦’Ý”ûʵò!²„
-¦.**®M`&”9Ïq®uþÊ%ÌÅæòØ5ÃMê¦rÛêÖíîìãnÜ…Ž?.ò¤C(l”
-ᐠ¼ŽüäKIu•NSnÔ5²0—´ô
-­¾„ÝH¢7›ý‰TkuåƒøÚ•Dˇ‹å¹¤º¯0‰f’F¼¢J¯fÃÈ+à'‡¼í$€‹òƒ$Þŝ¬¼¤–@0,–B›Gò•#o«ÕhŒZ¤œl4,­AÍ®"Á(Xå
-Ž°HJ–ŽÐÊ^#ÑBô-†'òÇÍ È-žaÐÙXû–8Ù~¾€ŸSx8~ΓþB……Êp1qV#ÛŠúSÉ’‘¨6<i§By†7™™ô…£'[Lí^ïs6ÝÑ’Û,[¹<âr(GöN¤uä¥lèɇÑ7ƒb7m_ýƒ±ƒ‡=ð*>ÅÞ“nÞ\•imÉMqœýnæ,4
-M}žwî4µu³'m‡9‹ÂXi¬ÒÖì©Ò2)ë_/ŒÄ3–~ö3HôÓ—½iɵ,}¯t_®Á«^o´±tûSŠ¾×¨3îdèö2]•šµç.ó’^^˜Ø)…/`‰æÁ/rãpqø¸>8Š—#G–qäO¢@4ˆæÁ Ü_ìr¹FÌóøpqŽ£Äâj“}u	!HB¿ÈíûÖμ®‘J4å?4MòÜ‹¡À¦úýMeÓe??™î¿(Ä×wÑ£¡Á'~bíë·ò0ă¬épÓ”®s tf€»'­Ô r¶ãøWQ%ùVïš÷–â¹ÌÀ;°t7š8ð*¸<¸Õv¿‹¡Ëç?§Æ¤5‰$RÁrðaˆ/žéà·ïúðÑÌXÁ~âá/j<[+5V ¢¤\#¢¤o8ƒD7…½òß“¥#…±²WÅÂŒ/«Õ<V˜nï­‹ž—|„Ãoj•.Ä[É­àâ·¤®O{[ÍÅ)SÈ&¢‰ðÒÇ·u]fN«·r&…¹ÊP©ÝU£­f’^OÙƒ³uö7¶‡—o@úÍ£ä¸ýÌÞuZ§hЛ¬,È(«Î¤)×U–2#Ôƒ9<<¹€0ÀSa–˜‚ˆa1ka*š´8@Ʀb¦b ì'»V^ËûœSÀ¤g߁K?—ÙOѤ𔂘db®)‡D††ø‡}öüù}?Œ´–ñ0ƒ—‡`½’»XÓTv&ûËÐî™8©~Èyüê^OÁõR«©ÊTU½»f—ŽÍؼ¬8–Cz·ü/³}ßsc€àúÍUŒµ	&ñð7Œ®I¼r|áU$x‚|Økø¼
-2äÁ •8Aìæ;É+…b˜N]åÚËÚ²ùôcñ\²båä?k°†‡ý#;<Æ;Ã%„‘@ö÷}ÿlQ‹N9ûž4NËI›q´ïˆ!a‡öC,õðÎÚå1‘k°/)+R$îÁ=ÈÅ=@
-±ì;íMøõÏ´FšpãÈ`n¨0”²(¶tû 8]8zÁë×Tq¬H¯Û_SÇ)ꍦzcµ¡´Ýr¸Ø”Ï¥p	ª9‹ÿÒ÷xøóÈ
-·^ˆ…¿)éGw6¬;½ÌÉfÏF
-D=›	²Þ+§ït±HI-OLZΠ	XpíÒŒB‘ÝÜYk[{ËËiŽWà þW)úù»f“ô#´¤@ù¼aiøœÙ}}ÏFù/C L¶Ãoûhëò¤ÍB” TfŸN=¸†SÐ1ËÖ¯Úܘ߬f›K›u}ºëººå'ʬ[¹"mN^•¹àÑí=EÇÔkMXéV‰èfãq‰^ÛÀÐ{,zƒ5Sç6^.½ƒ¡*rýó÷¶·æa7Î2Ç냌ÕûŠ-8Ö6K…Õú»s×Ïô=ø0ïÚgÇ>½¶ÞË¢75²´ù>Eû`-Õ0´ygÞa¤k£rd‡ÅqXŠf9ZuØööˆ2Šm„ieLi¶\ûø¤õ:÷_Ü|…q…¤Rèz:°“Š	÷xÅÍÀ¸´¢¸”QPnä¡t”;EPÖ*ñ&²Ï'ö£…ŠÏ#ƒá÷ª³«Ïw¦ë÷‰â«Å=3´÷ßBö5ÇÒpjeP
-³©Þ»Iñ«BRFY¼š‡Q·—N)ær–ò xÖƒõvœ'‹ìÚYfρE3ÈÄ-›´ë0Ã}ƒ¾„—ØO)îVó'ç;;ÚÏ[orý\oúEi]•ÅRgjdžR¶Ý†²²j¬RåTêÙÄÆ•Ü*.¡(5-eC^©ˆ Ðü_^Å·ÿ»±õæè]ú\…ÀsRxS\([õh äAÝä}è~{ý÷_Ùqʤ5Wîz·f·ŽI/Œ.]Ë)bÒÞëf¡	TŽËá5'	œÁýýTdfиB9£~´`œÔüi5½ðÉTáKåNVÍ®¡0ë™ã¤7¨FAÃŒr ªa®ŠŸò¯>7Ï{Ò>ÂBƒ’6ói©	^>aˤ5f¶±-ÅgwÞßÙ£iª>^Ö\jÝÌe+"¢“æ`ÌÏå"ºß½³çPµAÃ)4Ú*,rªÄ ­oÀÛ1§(Ú¼ž¿UxÏ\¿¾7Ð]t>ë›kS^³Äš
-õÖBkY×¢øäöŸ?¼_kÇ~Îâe©34²?QÖj“Æ^Í·p?–*Œ¹“çÒ†<é"áu§C—ä®X½ÆU½¤/įÏ[á•’Á_fáÚ,‡IºŠß†]Y÷?wþÒ|õ:3Ρ@è9Æ%ÿŒ•9xµÃXQßP‡órx")µ¾ÊÒ 762ŸBèp±Ï8ÒÔ’¿éàa ^Òi „t)|ã!‚«¼sœ(Ït4ð.‰üP¿|;‰ _þ‰ÃùŸÄ“6ì:zwWó’Áw°[°)[±WÕ[êêJDÔ«µÕe˜^‡°‚?%çGG͏¹ÿ
-Oû~ã!ÔUx–ý³ìë ƒ´¿d£åØcW˜ø
-Šð3¼à<lûð{Ñ®(¦ñSpIoñé¢e*yü︎•%BÙ³üÃ9W•«™Š]ÕÕ\…¢ÒPeÞW»wo-óðh³þ,§øôÏï¼ÅFQ	sëÞÆTž¼0aK_^úѺï{n¸q›¹ [±:Yô¥1©­Ý÷|ðëùKÕ•gÙqŽ»·^ëÌ	þ/:¦S„Ã:bß=f$­vû,ú¥JцâÒüŽ3ÇÛ¼ZOçd°è^ß8×%¾ï¸ÕrŸ²íô;Y,]‡zÇOx?ÚÈ[.¿‘þζ73™âK›þ‰KãòÕ9ëÿj-a"€?ºañˆšK’ÖÛ’@{þ
-IwGuý%§×Üa2Lš5€&F$nŽz“…˜¿*ü<dz at hðÿ°Çƒƒ_<²ûüGnK…y8x%§Ó•D!§L4óã|ß›~ÉŽfa£Ï),F£¹vϾšl4LÎä~å~mùÇ}pßw`ï>®»?ccõW)$àX•U»¹šý»Øûhò)?Ñ+yçMAîïîâj¸ÝŠ
-c•Ù¤×Ÿ´2= yœ¹¹Ÿ6ÿ¼dE•ÆJN,CLƒ0˜&K0A™™§ÊÚÔ’÷>k";N7wtä6g±•p?Ï߸±%äù©ööÜSY£-žÊÃ×"TLüm¦ÎÇÊ•"5D2©Ù·`êe;Qì#YD¢’áiò
-Ã߇e$d⯒c¤ûö&aaLijj"?pæ]>puå]ÝâÿLfÓü
-endstream
-endobj
-5476 0 obj
-3269
-endobj
-5468 0 obj <<
-/D [5466 0 R /XYZ 151.701 685.529 null]
+5442 0 obj <<
+/Type /Encoding
+/Differences [32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]
 >> endobj
+5438 0 obj <<
+/D [5436 0 R /XYZ 151.701 685.529 null]
+>> endobj
 1800 0 obj <<
-/D [5466 0 R /XYZ 151.701 660.623 null]
+/D [5436 0 R /XYZ 151.701 660.623 null]
 >> endobj
-5463 0 obj <<
-/D [5466 0 R /XYZ 151.701 643.753 null]
+5433 0 obj <<
+/D [5436 0 R /XYZ 151.701 643.753 null]
 >> endobj
-5465 0 obj <<
+5435 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
-/XObject << /Im22 5457 0 R >>
+/XObject << /Im22 5427 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5479 0 obj <<
+5447 0 obj <<
 /Length 860       
 /Filter /FlateDecode
 >>
@@ -30255,14 +29427,14 @@
 #ü¥Zâå
 endstream
 endobj
-5478 0 obj <<
+5446 0 obj <<
 /Type /Page
-/Contents 5479 0 R
-/Resources 5477 0 R
+/Contents 5447 0 R
+/Resources 5445 0 R
 /MediaBox [0 0 612 792]
-/Parent 5469 0 R
+/Parent 5439 0 R
 >> endobj
-5464 0 obj <<
+5434 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 688
@@ -30553,27 +29725,27 @@
 z2ÙÑQZ±—¡”ÊÍ[ê±èGØ}oÆþ“æ~€ÈÐk‡Öe—¹}K#ãye˜­WÆ>êßא>µo,÷ TôÔhY2LcÜóY¾[ÙŠÃg»©Ûwý;â>|ÒUp¿@I»†`šæðã<O"bå!ê•)­M!_»e9£Í±ÙmhÇÝW=YKvù+mYà~p[Áóù,}eÅŠ+V)¥­ÕZWÊáÇìW~}eûúŽø¥žd’$¥:ËiàÅÍ4„R¸ß  R,4ŸŠüVs¨WÂéï·µI6Ô™ÜQ°´PYö‡½yˆ¡•Üo .¯VC0Ïså[`_ÔäÀ†j‚J{°£ìØD €Oä¶8,nN ØÜúɍ  ÀeP    ¹&†^ ànâ­³  ÜÐ[€÷ ¸'ú   ùODþþþöŽ     ØÕÿÛ‚º
 endstream
 endobj
-5480 0 obj <<
-/D [5478 0 R /XYZ 100.892 685.529 null]
+5448 0 obj <<
+/D [5446 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1801 0 obj <<
-/D [5478 0 R /XYZ 100.892 660.623 null]
+/D [5446 0 R /XYZ 100.892 660.623 null]
 >> endobj
-5481 0 obj <<
-/D [5478 0 R /XYZ 100.892 643.753 null]
+5449 0 obj <<
+/D [5446 0 R /XYZ 100.892 643.753 null]
 >> endobj
 690 0 obj <<
-/D [5478 0 R /XYZ 100.892 247.948 null]
+/D [5446 0 R /XYZ 100.892 247.948 null]
 >> endobj
-5482 0 obj <<
-/D [5478 0 R /XYZ 100.892 231.353 null]
+5450 0 obj <<
+/D [5446 0 R /XYZ 100.892 231.353 null]
 >> endobj
-5477 0 obj <<
+5445 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R >>
-/XObject << /Im23 5464 0 R >>
+/XObject << /Im23 5434 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-5489 0 obj <<
+5457 0 obj <<
 /Length 2038      
 /Filter /FlateDecode
 >>
@@ -30601,70 +29773,70 @@
 <)_‡Í¼~½ßü…²3ð
 endstream
 endobj
-5488 0 obj <<
+5456 0 obj <<
 /Type /Page
-/Contents 5489 0 R
-/Resources 5487 0 R
+/Contents 5457 0 R
+/Resources 5455 0 R
 /MediaBox [0 0 612 792]
-/Parent 5469 0 R
-/Annots [ 5483 0 R 5492 0 R 5484 0 R 5485 0 R 5493 0 R 5486 0 R ]
+/Parent 5439 0 R
+/Annots [ 5451 0 R 5460 0 R 5452 0 R 5453 0 R 5461 0 R 5454 0 R ]
 >> endobj
-5483 0 obj <<
+5451 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.262 454.881 511.352 466.57]
 /Subtype /Link
 /A << /S /GoTo /D (secure) >>
 >> endobj
-5492 0 obj <<
+5460 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.25 441.332 267.273 453.021]
 /Subtype /Link
 /A << /S /GoTo /D (secure) >>
 >> endobj
-5484 0 obj <<
+5452 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [272.124 441.332 435.141 453.021]
 /Subtype /Link
 /A << /S /GoTo /D (Big500users) >>
 >> endobj
-5485 0 obj <<
+5453 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [458.279 441.332 511.352 453.021]
 /Subtype /Link
 /A << /S /GoTo /D (happy) >>
 >> endobj
-5493 0 obj <<
+5461 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.25 427.782 318.304 439.472]
 /Subtype /Link
 /A << /S /GoTo /D (happy) >>
 >> endobj
-5486 0 obj <<
+5454 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [449.909 303.921 511.352 315.61]
 /Subtype /Link
 /A << /S /GoTo /D (ch5-dnshcp-setup) >>
 >> endobj
-5490 0 obj <<
-/D [5488 0 R /XYZ 151.701 685.529 null]
+5458 0 obj <<
+/D [5456 0 R /XYZ 151.701 685.529 null]
 >> endobj
 694 0 obj <<
-/D [5488 0 R /XYZ 151.701 588.194 null]
+/D [5456 0 R /XYZ 151.701 588.194 null]
 >> endobj
-5491 0 obj <<
-/D [5488 0 R /XYZ 151.701 558.059 null]
+5459 0 obj <<
+/D [5456 0 R /XYZ 151.701 558.059 null]
 >> endobj
-5487 0 obj <<
+5455 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R /F60 1917 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5498 0 obj <<
+5466 0 obj <<
 /Length 1476      
 /Filter /FlateDecode
 >>
@@ -30682,42 +29854,42 @@
 ›¹¿¸‰»¡uÿ6è&$Ù¹FÜïæ–÷˦[7Ò2?Aåâz7}$âÕÐ)ãêiù|ÏÒþÿòþ\üºë
 endstream
 endobj
-5497 0 obj <<
+5465 0 obj <<
 /Type /Page
-/Contents 5498 0 R
-/Resources 5496 0 R
+/Contents 5466 0 R
+/Resources 5464 0 R
 /MediaBox [0 0 612 792]
-/Parent 5469 0 R
-/Annots [ 5494 0 R 5495 0 R ]
+/Parent 5439 0 R
+/Annots [ 5462 0 R 5463 0 R ]
 >> endobj
-5494 0 obj <<
+5462 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [253.736 357.496 304.416 369.185]
 /Subtype /Link
 /A << /S /GoTo /D (NT4DUM) >>
 >> endobj
-5495 0 obj <<
+5463 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.277 276.201 241.976 287.89]
 /Subtype /Link
 /A << /S /GoTo /D (ch8-vampire) >>
 >> endobj
-5499 0 obj <<
-/D [5497 0 R /XYZ 100.892 685.529 null]
+5467 0 obj <<
+/D [5465 0 R /XYZ 100.892 685.529 null]
 >> endobj
 698 0 obj <<
-/D [5497 0 R /XYZ 100.892 454.455 null]
+/D [5465 0 R /XYZ 100.892 454.455 null]
 >> endobj
-5500 0 obj <<
-/D [5497 0 R /XYZ 100.892 417.001 null]
+5468 0 obj <<
+/D [5465 0 R /XYZ 100.892 417.001 null]
 >> endobj
-5496 0 obj <<
+5464 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F54 1912 0 R /F17 1131 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5504 0 obj <<
+5472 0 obj <<
 /Length 1898      
 /Filter /FlateDecode
 >>
@@ -30733,28 +29905,28 @@
 .!}<ýÒ¡ý;ßMƒÖ}!µ¯pë¨w6qwÈT#Ôsbë†fdà٦%âH»MZl™Sb54BþÅY›®J‘çI9Y?ñ;xÀ mÖß„ñj!«DÖ½j±p”tv2òelzZ6Ôñ¿Šû®í#b…{ƒ5ãß-þ”æ(&¤¿o“ŒÈF/öIú_/ô!§G3·^Œ`~ñ¦;lÀŽIšcÉ&M‚ôRœôacCžØa•ûøÿ!©²†z£¨ö#C cû˜LϵdEC+/üo£á¸õù‰Òx¤Q¤ÐãWþKHÇîX½í¿WŽnæúž,¸aqä.þ—x“a9¯r¾œóÚùß&Í
 endstream
 endobj
-5503 0 obj <<
+5471 0 obj <<
 /Type /Page
-/Contents 5504 0 R
-/Resources 5502 0 R
+/Contents 5472 0 R
+/Resources 5470 0 R
 /MediaBox [0 0 612 792]
-/Parent 5469 0 R
+/Parent 5439 0 R
 >> endobj
-5505 0 obj <<
-/D [5503 0 R /XYZ 151.701 685.529 null]
+5473 0 obj <<
+/D [5471 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1856 0 obj <<
-/D [5503 0 R /XYZ 151.701 513.531 null]
+/D [5471 0 R /XYZ 151.701 513.531 null]
 >> endobj
-5501 0 obj <<
-/D [5503 0 R /XYZ 151.701 496.661 null]
+5469 0 obj <<
+/D [5471 0 R /XYZ 151.701 496.661 null]
 >> endobj
-5502 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F89 2333 0 R /F73 2334 0 R /F59 1905 0 R /F15 1133 0 R /F17 1131 0 R >>
-/XObject << /Im9 3542 0 R /Im3 2328 0 R >>
+5470 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F89 2330 0 R /F73 2331 0 R /F59 1905 0 R /F15 1133 0 R /F17 1131 0 R >>
+/XObject << /Im9 3531 0 R /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5512 0 obj <<
+5480 0 obj <<
 /Length 2117      
 /Filter /FlateDecode
 >>
@@ -30776,66 +29948,66 @@
 c=;EÅ]Îit7Íc˜yQ‹'耍Æ‚5õij<ÓU½]¬àq‘t\á¬u7†ÇÜ[µízúéÔ<còWúx³YëþÇ‹¦®ÜßBš/Åp´­º74?ß} AW´þ¤‹3 øœNÁó²[N ê[}=Ú7á1ïzÇéúÍýgÿâÁ·Z5Xç‡1ô o4š¡s?~š†Ê#¬ý}åŠð…¾í¿-þ
 endstream
 endobj
-5511 0 obj <<
+5479 0 obj <<
 /Type /Page
-/Contents 5512 0 R
-/Resources 5510 0 R
+/Contents 5480 0 R
+/Resources 5478 0 R
 /MediaBox [0 0 612 792]
-/Parent 5469 0 R
-/Annots [ 5506 0 R 5507 0 R 5508 0 R 5509 0 R ]
+/Parent 5439 0 R
+/Annots [ 5474 0 R 5475 0 R 5476 0 R 5477 0 R ]
 >> endobj
-5506 0 obj <<
+5474 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [332.375 437.275 402.148 448.964]
 /Subtype /Link
 /A << /S /GoTo /D (sbent4smb) >>
 >> endobj
-5507 0 obj <<
+5475 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [386.518 374.122 457.513 386.114]
 /Subtype /Link
 /A << /S /GoTo /D (sbentslapd) >>
 >> endobj
-5508 0 obj <<
+5476 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [319.016 311.271 388.736 323.264]
 /Subtype /Link
 /A << /S /GoTo /D (sbrntldapconf) >>
 >> endobj
-5509 0 obj <<
+5477 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.591 275.822 295.84 287.512]
 /Subtype /Link
 /A << /S /GoTo /D (sbentnss) >>
 >> endobj
-5513 0 obj <<
-/D [5511 0 R /XYZ 100.892 685.529 null]
+5481 0 obj <<
+/D [5479 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5514 0 obj <<
-/D [5511 0 R /XYZ 100.892 474.023 null]
+5482 0 obj <<
+/D [5479 0 R /XYZ 100.892 474.023 null]
 >> endobj
-5515 0 obj <<
-/D [5511 0 R /XYZ 100.892 411.173 null]
+5483 0 obj <<
+/D [5479 0 R /XYZ 100.892 411.173 null]
 >> endobj
-5516 0 obj <<
-/D [5511 0 R /XYZ 100.892 348.322 null]
+5484 0 obj <<
+/D [5479 0 R /XYZ 100.892 348.322 null]
 >> endobj
-5517 0 obj <<
-/D [5511 0 R /XYZ 100.892 312.268 null]
+5485 0 obj <<
+/D [5479 0 R /XYZ 100.892 312.268 null]
 >> endobj
-5518 0 obj <<
-/D [5511 0 R /XYZ 100.892 154.876 null]
+5486 0 obj <<
+/D [5479 0 R /XYZ 100.892 154.876 null]
 >> endobj
-5510 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F89 2333 0 R /F73 2334 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R >>
-/XObject << /Im3 2328 0 R >>
+5478 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F89 2330 0 R /F73 2331 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R >>
+/XObject << /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5526 0 obj <<
+5494 0 obj <<
 /Length 1299      
 /Filter /FlateDecode
 >>
@@ -30854,35 +30026,35 @@
 ¯„Û)@¾Õ A.³pׁŔ„‘¿EᏀ8ê’®³dÏ3V.!½înmàIÖãÌÖ÷sא•ßÑ©X£…vKÐD’˜ÄGV!ÀIA/o¼#èÇw•ñÍjo8Œð7æã¹fY
 endstream
 endobj
-5525 0 obj <<
+5493 0 obj <<
 /Type /Page
-/Contents 5526 0 R
-/Resources 5524 0 R
+/Contents 5494 0 R
+/Resources 5492 0 R
 /MediaBox [0 0 612 792]
-/Parent 5530 0 R
-/Annots [ 5523 0 R ]
+/Parent 5498 0 R
+/Annots [ 5491 0 R ]
 >> endobj
-5523 0 obj <<
+5491 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [373.699 118.128 436.987 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (sbeidealx) >>
 >> endobj
-5527 0 obj <<
-/D [5525 0 R /XYZ 151.701 685.529 null]
+5495 0 obj <<
+/D [5493 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5528 0 obj <<
-/D [5525 0 R /XYZ 151.701 462.935 null]
+5496 0 obj <<
+/D [5493 0 R /XYZ 151.701 462.935 null]
 >> endobj
-5529 0 obj <<
-/D [5525 0 R /XYZ 151.701 156.812 null]
+5497 0 obj <<
+/D [5493 0 R /XYZ 151.701 156.812 null]
 >> endobj
-5524 0 obj <<
+5492 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5533 0 obj <<
+5501 0 obj <<
 /Length 1309      
 /Filter /FlateDecode
 >>
@@ -30899,21 +30071,21 @@
 Srø<ÿÆDÒóãù7LvûE“Ù·¢LÃYšh9Ï·é&:÷µŽýöº{àA%´!ºÆ·®ˆ%1èÅøöz<ÔÀ{)Ri½»——÷/¾ˆÌ}-Çæ=ŠK~ðtj¸26?Í¿Dÿ§Â÷Q
 endstream
 endobj
-5532 0 obj <<
+5500 0 obj <<
 /Type /Page
-/Contents 5533 0 R
-/Resources 5531 0 R
+/Contents 5501 0 R
+/Resources 5499 0 R
 /MediaBox [0 0 612 792]
-/Parent 5530 0 R
+/Parent 5498 0 R
 >> endobj
-5534 0 obj <<
-/D [5532 0 R /XYZ 100.892 685.529 null]
+5502 0 obj <<
+/D [5500 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5531 0 obj <<
+5499 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5537 0 obj <<
+5505 0 obj <<
 /Length 1203      
 /Filter /FlateDecode
 >>
@@ -30930,21 +30102,21 @@
 Ø|øª'ûžþ{¦/
 endstream
 endobj
-5536 0 obj <<
+5504 0 obj <<
 /Type /Page
-/Contents 5537 0 R
-/Resources 5535 0 R
+/Contents 5505 0 R
+/Resources 5503 0 R
 /MediaBox [0 0 612 792]
-/Parent 5530 0 R
+/Parent 5498 0 R
 >> endobj
-5538 0 obj <<
-/D [5536 0 R /XYZ 151.701 685.529 null]
+5506 0 obj <<
+/D [5504 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5535 0 obj <<
+5503 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5542 0 obj <<
+5510 0 obj <<
 /Length 1453      
 /Filter /FlateDecode
 >>
@@ -30966,38 +30138,38 @@
 [k'êšÂª&[ʁߓQ=ßX°áê0˜_-ŽY½ÑÑžÛ¬ÿÂ/׿ <>«
 endstream
 endobj
-5541 0 obj <<
+5509 0 obj <<
 /Type /Page
-/Contents 5542 0 R
-/Resources 5540 0 R
+/Contents 5510 0 R
+/Resources 5508 0 R
 /MediaBox [0 0 612 792]
-/Parent 5530 0 R
-/Annots [ 5539 0 R ]
+/Parent 5498 0 R
+/Annots [ 5507 0 R ]
 >> endobj
-5539 0 obj <<
+5507 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.591 199.423 295.84 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (sbentnss2) >>
 >> endobj
-5543 0 obj <<
-/D [5541 0 R /XYZ 100.892 685.529 null]
+5511 0 obj <<
+/D [5509 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5544 0 obj <<
-/D [5541 0 R /XYZ 100.892 317.708 null]
+5512 0 obj <<
+/D [5509 0 R /XYZ 100.892 317.708 null]
 >> endobj
-5545 0 obj <<
-/D [5541 0 R /XYZ 100.892 236.413 null]
+5513 0 obj <<
+/D [5509 0 R /XYZ 100.892 236.413 null]
 >> endobj
-5546 0 obj <<
-/D [5541 0 R /XYZ 100.892 188.991 null]
+5514 0 obj <<
+/D [5509 0 R /XYZ 100.892 188.991 null]
 >> endobj
-5540 0 obj <<
+5508 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5550 0 obj <<
+5518 0 obj <<
 /Length 1058      
 /Filter /FlateDecode
 >>
@@ -31017,27 +30189,27 @@
 éÄž¨A9º"c]‘éÍÃœŒ‚éªÈ­T´¡íˆé)/@°ë´Q¬wuåŽåPÎÀá–öagkr䍀D°m‰`ˆŒî³ÔH«Õ¶i]-¡e md'Ò¯·bfýÝõÁ ;Eßül£ç×ó)LÁüb:‡]z™>ú.)™ay-ãl»ý+Š®E¶¹5œµWõÉð?ŽÐnÕ_þµÇÒº
 endstream
 endobj
-5549 0 obj <<
+5517 0 obj <<
 /Type /Page
-/Contents 5550 0 R
-/Resources 5548 0 R
+/Contents 5518 0 R
+/Resources 5516 0 R
 /MediaBox [0 0 612 792]
-/Parent 5530 0 R
+/Parent 5498 0 R
 >> endobj
-5551 0 obj <<
-/D [5549 0 R /XYZ 151.701 685.529 null]
+5519 0 obj <<
+/D [5517 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5552 0 obj <<
-/D [5549 0 R /XYZ 151.701 622.565 null]
+5520 0 obj <<
+/D [5517 0 R /XYZ 151.701 622.565 null]
 >> endobj
-5553 0 obj <<
-/D [5549 0 R /XYZ 151.701 249.196 null]
+5521 0 obj <<
+/D [5517 0 R /XYZ 151.701 249.196 null]
 >> endobj
-5548 0 obj <<
+5516 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5556 0 obj <<
+5524 0 obj <<
 /Length 1033      
 /Filter /FlateDecode
 >>
@@ -31054,27 +30226,27 @@
 ®Î/N>þ´«á¤wvøŸÎhâ=#Î0Âß» cV”
 endstream
 endobj
-5555 0 obj <<
+5523 0 obj <<
 /Type /Page
-/Contents 5556 0 R
-/Resources 5554 0 R
+/Contents 5524 0 R
+/Resources 5522 0 R
 /MediaBox [0 0 612 792]
-/Parent 5530 0 R
+/Parent 5498 0 R
 >> endobj
-5557 0 obj <<
-/D [5555 0 R /XYZ 100.892 685.529 null]
+5525 0 obj <<
+/D [5523 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5558 0 obj <<
-/D [5555 0 R /XYZ 100.892 660.623 null]
+5526 0 obj <<
+/D [5523 0 R /XYZ 100.892 660.623 null]
 >> endobj
-5559 0 obj <<
-/D [5555 0 R /XYZ 100.892 213.968 null]
+5527 0 obj <<
+/D [5523 0 R /XYZ 100.892 213.968 null]
 >> endobj
-5554 0 obj <<
+5522 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5562 0 obj <<
+5530 0 obj <<
 /Length 1135      
 /Filter /FlateDecode
 >>
@@ -31089,27 +30261,27 @@
 õãÕ%}»zol÷ºkßðãüèóþb
 endstream
 endobj
-5561 0 obj <<
+5529 0 obj <<
 /Type /Page
-/Contents 5562 0 R
-/Resources 5560 0 R
+/Contents 5530 0 R
+/Resources 5528 0 R
 /MediaBox [0 0 612 792]
-/Parent 5566 0 R
+/Parent 5534 0 R
 >> endobj
-5563 0 obj <<
-/D [5561 0 R /XYZ 151.701 685.529 null]
+5531 0 obj <<
+/D [5529 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5564 0 obj <<
-/D [5561 0 R /XYZ 151.701 622.565 null]
+5532 0 obj <<
+/D [5529 0 R /XYZ 151.701 622.565 null]
 >> endobj
-5565 0 obj <<
-/D [5561 0 R /XYZ 151.701 461.725 null]
+5533 0 obj <<
+/D [5529 0 R /XYZ 151.701 461.725 null]
 >> endobj
-5560 0 obj <<
+5528 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5570 0 obj <<
+5538 0 obj <<
 /Length 1282      
 /Filter /FlateDecode
 >>
@@ -31124,35 +30296,35 @@
 ÇxÊ3ŒX7IÇÊX7ÅnWÔ‹G#ˆµ´‰KœÊ´""ù^ÕÝ­òmSí2Le"VVÅ!epœÂ’ -Ô’ŽFØÔy¹¨à~+6’R”j#-Ü}/¢ŸëM~h:ýcdb›Ä2%H:’Ä”§:IŽ¡)„üâQæõã½ÁØM33œ	cˆ¦£(Q”‘DŽò>7*ƒ‰QNˆ©‚\ˆJKK`¦c®•C2-`QoWw…ÁÔ ”Ø®‡Ä	™9‚¡ Gc*¥ÕBQ*Æ"4›¼>Kƒ™QpNcÉml±N‰â<UPz‚3–B+ãÿ¼:æF8•¤V#–#–[,i'rIbÍN’± «M± },LŠ…f1¢–Âw KÒoñ9 ¹ªjpUjGR¬è°£)ÿ^9,vG€QG9w	œl®µÔÙ¨œþ~õœFøØý»$Þb
 endstream
 endobj
-5569 0 obj <<
+5537 0 obj <<
 /Type /Page
-/Contents 5570 0 R
-/Resources 5568 0 R
+/Contents 5538 0 R
+/Resources 5536 0 R
 /MediaBox [0 0 612 792]
-/Parent 5566 0 R
-/Annots [ 5567 0 R ]
+/Parent 5534 0 R
+/Annots [ 5535 0 R ]
 >> endobj
-5567 0 obj <<
+5535 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [300.259 470.407 371.343 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (sbevam1) >>
 >> endobj
-5571 0 obj <<
-/D [5569 0 R /XYZ 100.892 685.529 null]
+5539 0 obj <<
+/D [5537 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5572 0 obj <<
-/D [5569 0 R /XYZ 100.892 586.571 null]
+5540 0 obj <<
+/D [5537 0 R /XYZ 100.892 586.571 null]
 >> endobj
-5573 0 obj <<
-/D [5569 0 R /XYZ 100.892 471.403 null]
+5541 0 obj <<
+/D [5537 0 R /XYZ 100.892 471.403 null]
 >> endobj
-5568 0 obj <<
+5536 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5577 0 obj <<
+5545 0 obj <<
 /Length 1025      
 /Filter /FlateDecode
 >>
@@ -31169,24 +30341,24 @@
 U³'N÷üéãðøTÿ“þçtRk
 endstream
 endobj
-5576 0 obj <<
+5544 0 obj <<
 /Type /Page
-/Contents 5577 0 R
-/Resources 5575 0 R
+/Contents 5545 0 R
+/Resources 5543 0 R
 /MediaBox [0 0 612 792]
-/Parent 5566 0 R
+/Parent 5534 0 R
 >> endobj
-5578 0 obj <<
-/D [5576 0 R /XYZ 151.701 685.529 null]
+5546 0 obj <<
+/D [5544 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5579 0 obj <<
-/D [5576 0 R /XYZ 151.701 527.721 null]
+5547 0 obj <<
+/D [5544 0 R /XYZ 151.701 527.721 null]
 >> endobj
-5575 0 obj <<
+5543 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5583 0 obj <<
+5551 0 obj <<
 /Length 1500      
 /Filter /FlateDecode
 >>
@@ -31199,33 +30371,33 @@
 Ý_|gÊôIb at TÂý7WZÛÎà+ÕñÚ¶»Ä¹>eó gOƒ¶ËÂÉ…7=ÌÄà¦=~óA„ç²Ø“¡Yrö¨1;Ѷî}íc6k‚ÙáT„x'^°£¸ÂQuÏ<­ðþJÀ
 endstream
 endobj
-5582 0 obj <<
+5550 0 obj <<
 /Type /Page
-/Contents 5583 0 R
-/Resources 5581 0 R
+/Contents 5551 0 R
+/Resources 5549 0 R
 /MediaBox [0 0 612 792]
-/Parent 5566 0 R
+/Parent 5534 0 R
 >> endobj
-5584 0 obj <<
-/D [5582 0 R /XYZ 100.892 685.529 null]
+5552 0 obj <<
+/D [5550 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5585 0 obj <<
-/D [5582 0 R /XYZ 100.892 611.411 null]
+5553 0 obj <<
+/D [5550 0 R /XYZ 100.892 611.411 null]
 >> endobj
-5586 0 obj <<
-/D [5582 0 R /XYZ 100.892 547.576 null]
+5554 0 obj <<
+/D [5550 0 R /XYZ 100.892 547.576 null]
 >> endobj
-5587 0 obj <<
-/D [5582 0 R /XYZ 100.892 234.155 null]
+5555 0 obj <<
+/D [5550 0 R /XYZ 100.892 234.155 null]
 >> endobj
-5588 0 obj <<
-/D [5582 0 R /XYZ 100.892 184.475 null]
+5556 0 obj <<
+/D [5550 0 R /XYZ 100.892 184.475 null]
 >> endobj
-5581 0 obj <<
+5549 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F51 1134 0 R /F60 1917 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5591 0 obj <<
+5559 0 obj <<
 /Length 939       
 /Filter /FlateDecode
 >>
@@ -31240,38 +30412,38 @@
 ûŸ7ÌDvU'”‚ô]LnWs³ÅÅÒqöºº†GÜÐö“,ý½[æ8&{ý)¾¯åf3‰âÙS|îè‹zxûÛÝõ/Ç»®¦üųr7ëƈñŸÂÑhå—ƒEöõ«ý÷ðêÕÿ}ü®ŽlíAøOÀë)ìn諯^£»~ˆþßù¶§
 endstream
 endobj
-5590 0 obj <<
+5558 0 obj <<
 /Type /Page
-/Contents 5591 0 R
-/Resources 5589 0 R
+/Contents 5559 0 R
+/Resources 5557 0 R
 /MediaBox [0 0 612 792]
-/Parent 5566 0 R
-/Annots [ 5580 0 R ]
+/Parent 5534 0 R
+/Annots [ 5548 0 R ]
 >> endobj
-5580 0 obj <<
+5548 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [271.917 608.02 326.031 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-bldg1) >>
 >> endobj
-5592 0 obj <<
-/D [5590 0 R /XYZ 151.701 685.529 null]
+5560 0 obj <<
+/D [5558 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5593 0 obj <<
-/D [5590 0 R /XYZ 151.701 660.623 null]
+5561 0 obj <<
+/D [5558 0 R /XYZ 151.701 660.623 null]
 >> endobj
 702 0 obj <<
-/D [5590 0 R /XYZ 151.701 595.32 null]
+/D [5558 0 R /XYZ 151.701 595.32 null]
 >> endobj
-5574 0 obj <<
-/D [5590 0 R /XYZ 151.701 566.899 null]
+5542 0 obj <<
+/D [5558 0 R /XYZ 151.701 566.899 null]
 >> endobj
-5589 0 obj <<
+5557 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5596 0 obj <<
+5564 0 obj <<
 /Length 643       
 /Filter /FlateDecode
 >>
@@ -31282,21 +30454,21 @@
 í`®À­xš>CI"¬J2I¥–ã,|ð7ê»öÜÿf¹ö°%7×…Í-÷Lúd}¾Z8`šwi}µçŽí‚™)ϏµÄifÈ”É9Xu7EÜ]¯ŠŒò|gRTÇÆÆ›cA¤o+¹}Lù;ÑI)xcr©M´?PúŒÃqŠævHôÁ»C ¿×™ü)ò[gïƒ×ÎÝÿqæ¿©¯ŸéÖŒûØÖlûÁÖMNÒºå)'Y;äjã€ýàÆáâÒÁŽåÚþ2n®òOô71:*
 endstream
 endobj
-5595 0 obj <<
+5563 0 obj <<
 /Type /Page
-/Contents 5596 0 R
-/Resources 5594 0 R
+/Contents 5564 0 R
+/Resources 5562 0 R
 /MediaBox [0 0 612 792]
-/Parent 5566 0 R
+/Parent 5534 0 R
 >> endobj
-5597 0 obj <<
-/D [5595 0 R /XYZ 100.892 685.529 null]
+5565 0 obj <<
+/D [5563 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5594 0 obj <<
+5562 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5601 0 obj <<
+5569 0 obj <<
 /Length 1630      
 /Filter /FlateDecode
 >>
@@ -31316,41 +30488,41 @@
 WUí²Ij…o¥4ž×»B¥¨8FÍWÖ²”t’W7×2ÄJ,AŽ[/w\֫ԍÜyìcë8`󝄽¿è|¨è
 endstream
 endobj
-5600 0 obj <<
+5568 0 obj <<
 /Type /Page
-/Contents 5601 0 R
-/Resources 5599 0 R
+/Contents 5569 0 R
+/Resources 5567 0 R
 /MediaBox [0 0 612 792]
-/Parent 5606 0 R
-/Annots [ 5598 0 R ]
+/Parent 5574 0 R
+/Annots [ 5566 0 R ]
 >> endobj
-5598 0 obj <<
+5566 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [277.958 180.443 439.648 192.133]
 /Subtype /Link
 /A << /S /GoTo /D (Big500users) >>
 >> endobj
-5602 0 obj <<
-/D [5600 0 R /XYZ 151.701 685.529 null]
+5570 0 obj <<
+/D [5568 0 R /XYZ 151.701 685.529 null]
 >> endobj
 706 0 obj <<
-/D [5600 0 R /XYZ 151.701 362.595 null]
+/D [5568 0 R /XYZ 151.701 362.595 null]
 >> endobj
-5603 0 obj <<
-/D [5600 0 R /XYZ 151.701 332.966 null]
+5571 0 obj <<
+/D [5568 0 R /XYZ 151.701 332.966 null]
 >> endobj
-5604 0 obj <<
-/D [5600 0 R /XYZ 151.701 216.657 null]
+5572 0 obj <<
+/D [5568 0 R /XYZ 151.701 216.657 null]
 >> endobj
-5605 0 obj <<
-/D [5600 0 R /XYZ 151.701 167.89 null]
+5573 0 obj <<
+/D [5568 0 R /XYZ 151.701 167.89 null]
 >> endobj
-5599 0 obj <<
+5567 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F17 1131 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5609 0 obj <<
+5577 0 obj <<
 /Length 797       
 /Filter /FlateDecode
 >>
@@ -31365,30 +30537,30 @@
 ÇlYÔ®¢î´ƒõG.eg¹Ú¼ù)Õ¤q3<SÆÌp‚Ÿ¾˜Má×Íêi¼i171ËsR$[*»Jåàc•aW]áÓøV­‹ŠTÊs*âESV6¼.'­ÂD©è®I˜ÆÃÑ·hð ".'ç×*LæRÆB¶%“ã²#üŒS"Þ’.‹ôEYsΖ割‡Ö”S붢ü@PKZ‰m,ÔjTÌåµ›1áÏT°4Ùcм:­j×%mff¼ÍÙÛç”ÄÏËò`´ö놧ìÑZfi\ƒü?Æ”òå£ô¯ï…úÒŠ“š{»Û(Ò7áÛï¨oä“œ'Ö7('üõ¹oÐŒ§ÉœöìFµ ¼¤qïªÒ|Ö»ªdA‹u÷.,a¼3²eßVÌÒ,[÷WªªÒ=Úú£èVù£û^j­
 endstream
 endobj
-5608 0 obj <<
+5576 0 obj <<
 /Type /Page
-/Contents 5609 0 R
-/Resources 5607 0 R
+/Contents 5577 0 R
+/Resources 5575 0 R
 /MediaBox [0 0 612 792]
-/Parent 5606 0 R
+/Parent 5574 0 R
 >> endobj
-5610 0 obj <<
-/D [5608 0 R /XYZ 100.892 685.529 null]
+5578 0 obj <<
+/D [5576 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5611 0 obj <<
-/D [5608 0 R /XYZ 100.892 660.623 null]
+5579 0 obj <<
+/D [5576 0 R /XYZ 100.892 660.623 null]
 >> endobj
-5612 0 obj <<
-/D [5608 0 R /XYZ 100.892 647.543 null]
+5580 0 obj <<
+/D [5576 0 R /XYZ 100.892 647.543 null]
 >> endobj
-5613 0 obj <<
-/D [5608 0 R /XYZ 100.892 568.369 null]
+5581 0 obj <<
+/D [5576 0 R /XYZ 100.892 568.369 null]
 >> endobj
-5607 0 obj <<
+5575 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5616 0 obj <<
+5584 0 obj <<
 /Length 1400      
 /Filter /FlateDecode
 >>
@@ -31407,24 +30579,24 @@
 +„MÁR¥ð=«²BPu–êòçìéŠ+þiv6ç
 endstream
 endobj
-5615 0 obj <<
+5583 0 obj <<
 /Type /Page
-/Contents 5616 0 R
-/Resources 5614 0 R
+/Contents 5584 0 R
+/Resources 5582 0 R
 /MediaBox [0 0 612 792]
-/Parent 5606 0 R
+/Parent 5574 0 R
 >> endobj
-5617 0 obj <<
-/D [5615 0 R /XYZ 151.701 685.529 null]
+5585 0 obj <<
+/D [5583 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5618 0 obj <<
-/D [5615 0 R /XYZ 151.701 554.819 null]
+5586 0 obj <<
+/D [5583 0 R /XYZ 151.701 554.819 null]
 >> endobj
-5614 0 obj <<
+5582 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5621 0 obj <<
+5589 0 obj <<
 /Length 1136      
 /Filter /FlateDecode
 >>
@@ -31441,27 +30613,27 @@
 á¬iˆËj"kê>8…ç7ÿOÚ5¬"Е¥Ëm×eõ;€t at 6ÆÁ§óV÷Õ}”ì–öyÞ“5O 5œ:áz(Åkr«Š*‡ÑG.P·ÕT¾}ô÷ìñ	oÚ¢Bïg
 endstream
 endobj
-5620 0 obj <<
+5588 0 obj <<
 /Type /Page
-/Contents 5621 0 R
-/Resources 5619 0 R
+/Contents 5589 0 R
+/Resources 5587 0 R
 /MediaBox [0 0 612 792]
-/Parent 5606 0 R
+/Parent 5574 0 R
 >> endobj
-5622 0 obj <<
-/D [5620 0 R /XYZ 100.892 685.529 null]
+5590 0 obj <<
+/D [5588 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5623 0 obj <<
-/D [5620 0 R /XYZ 100.892 649.664 null]
+5591 0 obj <<
+/D [5588 0 R /XYZ 100.892 649.664 null]
 >> endobj
-5624 0 obj <<
-/D [5620 0 R /XYZ 100.892 297.385 null]
+5592 0 obj <<
+/D [5588 0 R /XYZ 100.892 297.385 null]
 >> endobj
-5619 0 obj <<
+5587 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5627 0 obj <<
+5595 0 obj <<
 /Length 1577      
 /Filter /FlateDecode
 >>
@@ -31480,39 +30652,39 @@
 ˆ<ÿë¿Kˁ_,ü·‰¹iï@ø `ØÑÅr~þ*?QC?n‡±·óGŽwé	¿Úª!©
 endstream
 endobj
-5626 0 obj <<
+5594 0 obj <<
 /Type /Page
-/Contents 5627 0 R
-/Resources 5625 0 R
+/Contents 5595 0 R
+/Resources 5593 0 R
 /MediaBox [0 0 612 792]
-/Parent 5606 0 R
+/Parent 5574 0 R
 >> endobj
-5628 0 obj <<
-/D [5626 0 R /XYZ 151.701 685.529 null]
+5596 0 obj <<
+/D [5594 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5629 0 obj <<
-/D [5626 0 R /XYZ 151.701 600.12 null]
+5597 0 obj <<
+/D [5594 0 R /XYZ 151.701 600.12 null]
 >> endobj
 710 0 obj <<
-/D [5626 0 R /XYZ 151.701 540.039 null]
+/D [5594 0 R /XYZ 151.701 540.039 null]
 >> endobj
-5630 0 obj <<
-/D [5626 0 R /XYZ 151.701 513.876 null]
+5598 0 obj <<
+/D [5594 0 R /XYZ 151.701 513.876 null]
 >> endobj
 714 0 obj <<
-/D [5626 0 R /XYZ 151.701 355.631 null]
+/D [5594 0 R /XYZ 151.701 355.631 null]
 >> endobj
-5631 0 obj <<
-/D [5626 0 R /XYZ 151.701 327.607 null]
+5599 0 obj <<
+/D [5594 0 R /XYZ 151.701 327.607 null]
 >> endobj
-5632 0 obj <<
-/D [5626 0 R /XYZ 151.701 301.752 null]
+5600 0 obj <<
+/D [5594 0 R /XYZ 151.701 301.752 null]
 >> endobj
-5625 0 obj <<
+5593 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R /F51 1134 0 R /F17 1131 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5635 0 obj <<
+5603 0 obj <<
 /Length 1888      
 /Filter /FlateDecode
 >>
@@ -31534,21 +30706,21 @@
 À“ªÊ‚ó0žË˜öqHë˧²·_Òô¨÷ÐÞãеܪïu}²Ó2àu¹±C£€2™Î-å9"xq`òÿϨd^ø\¬ßå¹6T_1,ièA[(ufÛ8(­™0U8LíÔtÎ-ÍÄÏÛˆ©v°å¦Ç¿Vˆ0áýÐ=êêdAz5Âz*›‡V9>*‘lÃÍÖëGj¢w-Lõ „Þ:¤æ%=¯‘LÏÝÍBº]JzweÙôþÁRfe at -k>Wš7æãpŒU†^—>¾H\mù«êÁEÂ0ZpI=p®˜ŠÖkïKì;7£ûߌ}}íyOÇß7 úÞWÔ[ûƒ/:ýd‡¡hÁg÷ôš$g·e$®\_«ÆN`ãO:Ãúa»úÁrÐh
 endstream
 endobj
-5634 0 obj <<
+5602 0 obj <<
 /Type /Page
-/Contents 5635 0 R
-/Resources 5633 0 R
+/Contents 5603 0 R
+/Resources 5601 0 R
 /MediaBox [0 0 612 792]
-/Parent 5606 0 R
+/Parent 5574 0 R
 >> endobj
-5636 0 obj <<
-/D [5634 0 R /XYZ 100.892 685.529 null]
+5604 0 obj <<
+/D [5602 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5633 0 obj <<
+5601 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F51 1134 0 R /F60 1917 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5639 0 obj <<
+5607 0 obj <<
 /Length 2149      
 /Filter /FlateDecode
 >>
@@ -31573,21 +30745,21 @@
 £Ù"Ð/ãÊ0PV|[9ÝÀuW=«}÷Ý$ªš?ø@Qø·«z¡÷"z^•ü—$`úpÆ>]ixÅáʧo¨Ài3Ð?f@ƒ(†¯¦ãçÎñùv»úFëž
 endstream
 endobj
-5638 0 obj <<
+5606 0 obj <<
 /Type /Page
-/Contents 5639 0 R
-/Resources 5637 0 R
+/Contents 5607 0 R
+/Resources 5605 0 R
 /MediaBox [0 0 612 792]
-/Parent 5641 0 R
+/Parent 5609 0 R
 >> endobj
-5640 0 obj <<
-/D [5638 0 R /XYZ 151.701 685.529 null]
+5608 0 obj <<
+/D [5606 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5637 0 obj <<
+5605 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5644 0 obj <<
+5612 0 obj <<
 /Length 2069      
 /Filter /FlateDecode
 >>
@@ -31612,21 +30784,21 @@
 ¯ j™ãôS‡¡Q“Ç®o@±Õ÷E `[AÁob¶‹ŠÁmKýo@ÿ}µßüÎt_¤
 endstream
 endobj
-5643 0 obj <<
+5611 0 obj <<
 /Type /Page
-/Contents 5644 0 R
-/Resources 5642 0 R
+/Contents 5612 0 R
+/Resources 5610 0 R
 /MediaBox [0 0 612 792]
-/Parent 5641 0 R
+/Parent 5609 0 R
 >> endobj
-5645 0 obj <<
-/D [5643 0 R /XYZ 100.892 685.529 null]
+5613 0 obj <<
+/D [5611 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5642 0 obj <<
+5610 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5648 0 obj <<
+5616 0 obj <<
 /Length 834       
 /Filter /FlateDecode
 >>
@@ -31643,21 +30815,21 @@
 …ïÊuгÓcø€#ªÛ‘ÅÚ$3¥.½Æü©‹ÆgØOn€TOCSlñAËfrÿûëç"äyýì_,ü›ü!MÅ"
 endstream
 endobj
-5647 0 obj <<
+5615 0 obj <<
 /Type /Page
-/Contents 5648 0 R
-/Resources 5646 0 R
+/Contents 5616 0 R
+/Resources 5614 0 R
 /MediaBox [0 0 612 792]
-/Parent 5641 0 R
+/Parent 5609 0 R
 >> endobj
-5649 0 obj <<
-/D [5647 0 R /XYZ 151.701 685.529 null]
+5617 0 obj <<
+/D [5615 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5646 0 obj <<
+5614 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5652 0 obj <<
+5620 0 obj <<
 /Length 5073      
 /Filter /FlateDecode
 >>
@@ -31699,153 +30871,153 @@
 tèÌ¡/8®pð{.]OE?Œ°äVnLÃàõÍX%;ìVEcÃWäWDYV¡¼0OÖ—^fQôHþ$¼ÃÒP9ßE«‚^R¤w:z‹ƒgÇóÂñ³_<ÿzC”ºÿV|'ƒQ>]™ÙÃS‚èòÿÌrG
 endstream
 endobj
-5651 0 obj <<
+5619 0 obj <<
 /Type /Page
-/Contents 5652 0 R
-/Resources 5650 0 R
+/Contents 5620 0 R
+/Resources 5618 0 R
 /MediaBox [0 0 612 792]
-/Parent 5641 0 R
+/Parent 5609 0 R
 >> endobj
-5653 0 obj <<
-/D [5651 0 R /XYZ 100.892 685.529 null]
+5621 0 obj <<
+/D [5619 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1652 0 obj <<
-/D [5651 0 R /XYZ 100.892 660.623 null]
+/D [5619 0 R /XYZ 100.892 660.623 null]
 >> endobj
-5519 0 obj <<
-/D [5651 0 R /XYZ 100.892 643.753 null]
+5487 0 obj <<
+/D [5619 0 R /XYZ 100.892 643.753 null]
 >> endobj
-5654 0 obj <<
-/D [5651 0 R /XYZ 100.892 637.775 null]
+5622 0 obj <<
+/D [5619 0 R /XYZ 100.892 637.775 null]
 >> endobj
-5655 0 obj <<
-/D [5651 0 R /XYZ 100.892 644.051 null]
+5623 0 obj <<
+/D [5619 0 R /XYZ 100.892 644.051 null]
 >> endobj
-5656 0 obj <<
-/D [5651 0 R /XYZ 100.892 632.096 null]
+5624 0 obj <<
+/D [5619 0 R /XYZ 100.892 632.096 null]
 >> endobj
-5657 0 obj <<
-/D [5651 0 R /XYZ 100.892 620.141 null]
+5625 0 obj <<
+/D [5619 0 R /XYZ 100.892 620.141 null]
 >> endobj
-5658 0 obj <<
-/D [5651 0 R /XYZ 100.892 608.186 null]
+5626 0 obj <<
+/D [5619 0 R /XYZ 100.892 608.186 null]
 >> endobj
-5659 0 obj <<
-/D [5651 0 R /XYZ 100.892 596.231 null]
+5627 0 obj <<
+/D [5619 0 R /XYZ 100.892 596.231 null]
 >> endobj
-5660 0 obj <<
-/D [5651 0 R /XYZ 100.892 584.276 null]
+5628 0 obj <<
+/D [5619 0 R /XYZ 100.892 584.276 null]
 >> endobj
-5661 0 obj <<
-/D [5651 0 R /XYZ 100.892 572.32 null]
+5629 0 obj <<
+/D [5619 0 R /XYZ 100.892 572.32 null]
 >> endobj
-5662 0 obj <<
-/D [5651 0 R /XYZ 100.892 560.365 null]
+5630 0 obj <<
+/D [5619 0 R /XYZ 100.892 560.365 null]
 >> endobj
-5663 0 obj <<
-/D [5651 0 R /XYZ 100.892 548.41 null]
+5631 0 obj <<
+/D [5619 0 R /XYZ 100.892 548.41 null]
 >> endobj
-5664 0 obj <<
-/D [5651 0 R /XYZ 100.892 536.455 null]
+5632 0 obj <<
+/D [5619 0 R /XYZ 100.892 536.455 null]
 >> endobj
-5665 0 obj <<
-/D [5651 0 R /XYZ 100.892 524.5 null]
+5633 0 obj <<
+/D [5619 0 R /XYZ 100.892 524.5 null]
 >> endobj
-5666 0 obj <<
-/D [5651 0 R /XYZ 100.892 500.589 null]
+5634 0 obj <<
+/D [5619 0 R /XYZ 100.892 500.589 null]
 >> endobj
-5667 0 obj <<
-/D [5651 0 R /XYZ 100.892 476.679 null]
+5635 0 obj <<
+/D [5619 0 R /XYZ 100.892 476.679 null]
 >> endobj
-5668 0 obj <<
-/D [5651 0 R /XYZ 100.892 452.769 null]
+5636 0 obj <<
+/D [5619 0 R /XYZ 100.892 452.769 null]
 >> endobj
-5669 0 obj <<
-/D [5651 0 R /XYZ 100.892 428.858 null]
+5637 0 obj <<
+/D [5619 0 R /XYZ 100.892 428.858 null]
 >> endobj
-5670 0 obj <<
-/D [5651 0 R /XYZ 100.892 404.948 null]
+5638 0 obj <<
+/D [5619 0 R /XYZ 100.892 404.948 null]
 >> endobj
-5671 0 obj <<
-/D [5651 0 R /XYZ 100.892 381.038 null]
+5639 0 obj <<
+/D [5619 0 R /XYZ 100.892 381.038 null]
 >> endobj
-5672 0 obj <<
-/D [5651 0 R /XYZ 100.892 357.127 null]
+5640 0 obj <<
+/D [5619 0 R /XYZ 100.892 357.127 null]
 >> endobj
-5673 0 obj <<
-/D [5651 0 R /XYZ 100.892 333.217 null]
+5641 0 obj <<
+/D [5619 0 R /XYZ 100.892 333.217 null]
 >> endobj
-5674 0 obj <<
-/D [5651 0 R /XYZ 100.892 321.262 null]
+5642 0 obj <<
+/D [5619 0 R /XYZ 100.892 321.262 null]
 >> endobj
-5675 0 obj <<
-/D [5651 0 R /XYZ 100.892 309.307 null]
+5643 0 obj <<
+/D [5619 0 R /XYZ 100.892 309.307 null]
 >> endobj
-5676 0 obj <<
-/D [5651 0 R /XYZ 100.892 297.352 null]
+5644 0 obj <<
+/D [5619 0 R /XYZ 100.892 297.352 null]
 >> endobj
-5677 0 obj <<
-/D [5651 0 R /XYZ 100.892 285.396 null]
+5645 0 obj <<
+/D [5619 0 R /XYZ 100.892 285.396 null]
 >> endobj
-5678 0 obj <<
-/D [5651 0 R /XYZ 100.892 273.441 null]
+5646 0 obj <<
+/D [5619 0 R /XYZ 100.892 273.441 null]
 >> endobj
-5679 0 obj <<
-/D [5651 0 R /XYZ 100.892 261.486 null]
+5647 0 obj <<
+/D [5619 0 R /XYZ 100.892 261.486 null]
 >> endobj
-5680 0 obj <<
-/D [5651 0 R /XYZ 100.892 249.531 null]
+5648 0 obj <<
+/D [5619 0 R /XYZ 100.892 249.531 null]
 >> endobj
-5681 0 obj <<
-/D [5651 0 R /XYZ 100.892 237.576 null]
+5649 0 obj <<
+/D [5619 0 R /XYZ 100.892 237.576 null]
 >> endobj
-5682 0 obj <<
-/D [5651 0 R /XYZ 100.892 213.665 null]
+5650 0 obj <<
+/D [5619 0 R /XYZ 100.892 213.665 null]
 >> endobj
-5683 0 obj <<
-/D [5651 0 R /XYZ 100.892 201.71 null]
+5651 0 obj <<
+/D [5619 0 R /XYZ 100.892 201.71 null]
 >> endobj
-5684 0 obj <<
-/D [5651 0 R /XYZ 100.892 189.755 null]
+5652 0 obj <<
+/D [5619 0 R /XYZ 100.892 189.755 null]
 >> endobj
-5685 0 obj <<
-/D [5651 0 R /XYZ 100.892 177.8 null]
+5653 0 obj <<
+/D [5619 0 R /XYZ 100.892 177.8 null]
 >> endobj
-5686 0 obj <<
-/D [5651 0 R /XYZ 100.892 165.845 null]
+5654 0 obj <<
+/D [5619 0 R /XYZ 100.892 165.845 null]
 >> endobj
-5687 0 obj <<
-/D [5651 0 R /XYZ 100.892 153.89 null]
+5655 0 obj <<
+/D [5619 0 R /XYZ 100.892 153.89 null]
 >> endobj
-5688 0 obj <<
-/D [5651 0 R /XYZ 100.892 141.934 null]
+5656 0 obj <<
+/D [5619 0 R /XYZ 100.892 141.934 null]
 >> endobj
-5689 0 obj <<
-/D [5651 0 R /XYZ 100.892 129.979 null]
+5657 0 obj <<
+/D [5619 0 R /XYZ 100.892 129.979 null]
 >> endobj
-5690 0 obj <<
-/D [5651 0 R /XYZ 100.892 118.024 null]
+5658 0 obj <<
+/D [5619 0 R /XYZ 100.892 118.024 null]
 >> endobj
-5691 0 obj <<
-/D [5651 0 R /XYZ 100.892 106.069 null]
+5659 0 obj <<
+/D [5619 0 R /XYZ 100.892 106.069 null]
 >> endobj
-5692 0 obj <<
-/D [5651 0 R /XYZ 100.892 94.114 null]
+5660 0 obj <<
+/D [5619 0 R /XYZ 100.892 94.114 null]
 >> endobj
-5693 0 obj <<
-/D [5651 0 R /XYZ 100.892 82.159 null]
+5661 0 obj <<
+/D [5619 0 R /XYZ 100.892 82.159 null]
 >> endobj
-5694 0 obj <<
-/D [5651 0 R /XYZ 100.892 70.203 null]
+5662 0 obj <<
+/D [5619 0 R /XYZ 100.892 70.203 null]
 >> endobj
-5695 0 obj <<
-/D [5651 0 R /XYZ 100.892 58.248 null]
+5663 0 obj <<
+/D [5619 0 R /XYZ 100.892 58.248 null]
 >> endobj
-5650 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R /F54 1912 0 R /F11 2494 0 R /F51 1134 0 R >>
+5618 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R /F54 1912 0 R /F11 2489 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5698 0 obj <<
+5666 0 obj <<
 /Length 2891      
 /Filter /FlateDecode
 >>
@@ -31875,135 +31047,135 @@
 ÕïðÈÉYšðùJ¯+ÐáïH‘Ê__ŠÄ_»ÌÔ€r­á,MÅ´WEY„®1KSúU¨êªë|ˆ·<½èKbä{x=­MÏ1â»ÀŽöMö­ÂA]éMuZclwŠd¶{R4¶éve+@¹Öpz×ufoª{Ù[j	ƒé™Á©­/X­öM|“W|á>d}жÊ?ˆZþér”5ÝáU)?sn‡ÿ!@ú)çCÀÉÿ ÿµûóнúysì荭Áÿâ°¯ÿ˜ÿ;#
 endstream
 endobj
-5697 0 obj <<
+5665 0 obj <<
 /Type /Page
-/Contents 5698 0 R
-/Resources 5696 0 R
+/Contents 5666 0 R
+/Resources 5664 0 R
 /MediaBox [0 0 612 792]
-/Parent 5641 0 R
+/Parent 5609 0 R
 >> endobj
-5699 0 obj <<
-/D [5697 0 R /XYZ 151.701 685.529 null]
+5667 0 obj <<
+/D [5665 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1653 0 obj <<
-/D [5697 0 R /XYZ 151.701 616.53 null]
+/D [5665 0 R /XYZ 151.701 616.53 null]
 >> endobj
-5700 0 obj <<
-/D [5697 0 R /XYZ 151.701 599.66 null]
+5668 0 obj <<
+/D [5665 0 R /XYZ 151.701 599.66 null]
 >> endobj
-5701 0 obj <<
-/D [5697 0 R /XYZ 151.701 593.682 null]
+5669 0 obj <<
+/D [5665 0 R /XYZ 151.701 593.682 null]
 >> endobj
-5702 0 obj <<
-/D [5697 0 R /XYZ 151.701 599.958 null]
+5670 0 obj <<
+/D [5665 0 R /XYZ 151.701 599.958 null]
 >> endobj
-5703 0 obj <<
-/D [5697 0 R /XYZ 151.701 588.003 null]
+5671 0 obj <<
+/D [5665 0 R /XYZ 151.701 588.003 null]
 >> endobj
-5704 0 obj <<
-/D [5697 0 R /XYZ 151.701 576.048 null]
+5672 0 obj <<
+/D [5665 0 R /XYZ 151.701 576.048 null]
 >> endobj
-5705 0 obj <<
-/D [5697 0 R /XYZ 151.701 564.093 null]
+5673 0 obj <<
+/D [5665 0 R /XYZ 151.701 564.093 null]
 >> endobj
-5706 0 obj <<
-/D [5697 0 R /XYZ 151.701 552.138 null]
+5674 0 obj <<
+/D [5665 0 R /XYZ 151.701 552.138 null]
 >> endobj
-5707 0 obj <<
-/D [5697 0 R /XYZ 151.701 540.182 null]
+5675 0 obj <<
+/D [5665 0 R /XYZ 151.701 540.182 null]
 >> endobj
-5708 0 obj <<
-/D [5697 0 R /XYZ 151.701 528.227 null]
+5676 0 obj <<
+/D [5665 0 R /XYZ 151.701 528.227 null]
 >> endobj
-5709 0 obj <<
-/D [5697 0 R /XYZ 151.701 516.272 null]
+5677 0 obj <<
+/D [5665 0 R /XYZ 151.701 516.272 null]
 >> endobj
-5710 0 obj <<
-/D [5697 0 R /XYZ 151.701 504.317 null]
+5678 0 obj <<
+/D [5665 0 R /XYZ 151.701 504.317 null]
 >> endobj
-5711 0 obj <<
-/D [5697 0 R /XYZ 151.701 492.362 null]
+5679 0 obj <<
+/D [5665 0 R /XYZ 151.701 492.362 null]
 >> endobj
-5712 0 obj <<
-/D [5697 0 R /XYZ 151.701 480.407 null]
+5680 0 obj <<
+/D [5665 0 R /XYZ 151.701 480.407 null]
 >> endobj
-5713 0 obj <<
-/D [5697 0 R /XYZ 151.701 468.451 null]
+5681 0 obj <<
+/D [5665 0 R /XYZ 151.701 468.451 null]
 >> endobj
-5714 0 obj <<
-/D [5697 0 R /XYZ 151.701 456.496 null]
+5682 0 obj <<
+/D [5665 0 R /XYZ 151.701 456.496 null]
 >> endobj
-5715 0 obj <<
-/D [5697 0 R /XYZ 151.701 444.541 null]
+5683 0 obj <<
+/D [5665 0 R /XYZ 151.701 444.541 null]
 >> endobj
-5716 0 obj <<
-/D [5697 0 R /XYZ 151.701 432.586 null]
+5684 0 obj <<
+/D [5665 0 R /XYZ 151.701 432.586 null]
 >> endobj
-5717 0 obj <<
-/D [5697 0 R /XYZ 151.701 420.631 null]
+5685 0 obj <<
+/D [5665 0 R /XYZ 151.701 420.631 null]
 >> endobj
-5718 0 obj <<
-/D [5697 0 R /XYZ 151.701 408.676 null]
+5686 0 obj <<
+/D [5665 0 R /XYZ 151.701 408.676 null]
 >> endobj
-5719 0 obj <<
-/D [5697 0 R /XYZ 151.701 396.72 null]
+5687 0 obj <<
+/D [5665 0 R /XYZ 151.701 396.72 null]
 >> endobj
-5720 0 obj <<
-/D [5697 0 R /XYZ 151.701 384.765 null]
+5688 0 obj <<
+/D [5665 0 R /XYZ 151.701 384.765 null]
 >> endobj
-5721 0 obj <<
-/D [5697 0 R /XYZ 151.701 372.81 null]
+5689 0 obj <<
+/D [5665 0 R /XYZ 151.701 372.81 null]
 >> endobj
-5722 0 obj <<
-/D [5697 0 R /XYZ 151.701 360.855 null]
+5690 0 obj <<
+/D [5665 0 R /XYZ 151.701 360.855 null]
 >> endobj
-5723 0 obj <<
-/D [5697 0 R /XYZ 151.701 348.9 null]
+5691 0 obj <<
+/D [5665 0 R /XYZ 151.701 348.9 null]
 >> endobj
-5724 0 obj <<
-/D [5697 0 R /XYZ 151.701 336.945 null]
+5692 0 obj <<
+/D [5665 0 R /XYZ 151.701 336.945 null]
 >> endobj
-5725 0 obj <<
-/D [5697 0 R /XYZ 151.701 324.989 null]
+5693 0 obj <<
+/D [5665 0 R /XYZ 151.701 324.989 null]
 >> endobj
-5726 0 obj <<
-/D [5697 0 R /XYZ 151.701 313.034 null]
+5694 0 obj <<
+/D [5665 0 R /XYZ 151.701 313.034 null]
 >> endobj
-5727 0 obj <<
-/D [5697 0 R /XYZ 151.701 301.079 null]
+5695 0 obj <<
+/D [5665 0 R /XYZ 151.701 301.079 null]
 >> endobj
-5728 0 obj <<
-/D [5697 0 R /XYZ 151.701 289.124 null]
+5696 0 obj <<
+/D [5665 0 R /XYZ 151.701 289.124 null]
 >> endobj
-5729 0 obj <<
-/D [5697 0 R /XYZ 151.701 277.169 null]
+5697 0 obj <<
+/D [5665 0 R /XYZ 151.701 277.169 null]
 >> endobj
-5730 0 obj <<
-/D [5697 0 R /XYZ 151.701 265.214 null]
+5698 0 obj <<
+/D [5665 0 R /XYZ 151.701 265.214 null]
 >> endobj
-5731 0 obj <<
-/D [5697 0 R /XYZ 151.701 253.258 null]
+5699 0 obj <<
+/D [5665 0 R /XYZ 151.701 253.258 null]
 >> endobj
-5732 0 obj <<
-/D [5697 0 R /XYZ 151.701 241.303 null]
+5700 0 obj <<
+/D [5665 0 R /XYZ 151.701 241.303 null]
 >> endobj
-5733 0 obj <<
-/D [5697 0 R /XYZ 151.701 229.348 null]
+5701 0 obj <<
+/D [5665 0 R /XYZ 151.701 229.348 null]
 >> endobj
-5734 0 obj <<
-/D [5697 0 R /XYZ 151.701 217.393 null]
+5702 0 obj <<
+/D [5665 0 R /XYZ 151.701 217.393 null]
 >> endobj
-5735 0 obj <<
-/D [5697 0 R /XYZ 151.701 205.438 null]
+5703 0 obj <<
+/D [5665 0 R /XYZ 151.701 205.438 null]
 >> endobj
-5736 0 obj <<
-/D [5697 0 R /XYZ 151.701 193.483 null]
+5704 0 obj <<
+/D [5665 0 R /XYZ 151.701 193.483 null]
 >> endobj
-5696 0 obj <<
+5664 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F4 2008 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5739 0 obj <<
+5707 0 obj <<
 /Length 610       
 /Filter /FlateDecode
 >>
@@ -32012,27 +31184,27 @@
 “tèo¥Šº-e5¥> ^®#s¹£B	ý¼ÏŽ|jò[©9A£Íl)Õê4*UÙÓ¬X<¼Ã‘2÷C˪œVõÇ‹0#Óªþ›(ý:È>uafv(MÚ_Úa¶Tó¡¶(¤u×ušöc©à³°òâ쬯à	Ì0Ý–|~õP+ë©Ÿ­LÕÈMwtyîÑ6sÿ7¬i¹Mc.Z+ÍXX»Ò¦<ÅÔ.ôß®øWv.J½º¶¹š5“ÿÁ™‘¢|Ÿ³ó£.v©8J«×…nívÞ®‹½·OŠdôC×ÏzüréÛÐ
 endstream
 endobj
-5738 0 obj <<
+5706 0 obj <<
 /Type /Page
-/Contents 5739 0 R
-/Resources 5737 0 R
+/Contents 5707 0 R
+/Resources 5705 0 R
 /MediaBox [0 0 612 792]
-/Parent 5641 0 R
+/Parent 5609 0 R
 >> endobj
-5740 0 obj <<
-/D [5738 0 R /XYZ 100.892 685.529 null]
+5708 0 obj <<
+/D [5706 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1654 0 obj <<
-/D [5738 0 R /XYZ 100.892 577.31 null]
+/D [5706 0 R /XYZ 100.892 577.31 null]
 >> endobj
-5520 0 obj <<
-/D [5738 0 R /XYZ 100.892 545.679 null]
+5488 0 obj <<
+/D [5706 0 R /XYZ 100.892 545.679 null]
 >> endobj
-5737 0 obj <<
+5705 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5743 0 obj <<
+5711 0 obj <<
 /Length 797       
 /Filter /FlateDecode
 >>
@@ -32042,27 +31214,27 @@
 ¬½ôû=¿4ºãBõwqpÿ].ÿÜÿÁ“³•¸éáet´œ_X™ƒw}\äøTýñþŸ©êeiTÞks5Ê´¸fQ•ÙÂõ÷=Ù¾nd™«ÎnJ¹ÕÍ­ÞÍ®‰|ËF*¯2ÔÙ7ËyP‰Îù3˪Χºì—GnE&˜Úîhêv»M¶{Ûe‚¥{‚Ϧ´½š¦6£ÇûȲk+qu,j5Vó[|Ç›:sã)ááÃ:÷â'jåÐï_>Ö¡sš¥Ã³È6Öãð'¦¬…¹zeô¦|îôõ_;¯ÞЁi ÕZl*;·h+ó0Y·qrÂ’$F§O™°Ûõ'øÊ
 endstream
 endobj
-5742 0 obj <<
+5710 0 obj <<
 /Type /Page
-/Contents 5743 0 R
-/Resources 5741 0 R
+/Contents 5711 0 R
+/Resources 5709 0 R
 /MediaBox [0 0 612 792]
-/Parent 5746 0 R
+/Parent 5714 0 R
 >> endobj
-5744 0 obj <<
-/D [5742 0 R /XYZ 151.701 685.529 null]
+5712 0 obj <<
+/D [5710 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1655 0 obj <<
-/D [5742 0 R /XYZ 151.701 617.958 null]
+/D [5710 0 R /XYZ 151.701 617.958 null]
 >> endobj
-5745 0 obj <<
-/D [5742 0 R /XYZ 151.701 586.326 null]
+5713 0 obj <<
+/D [5710 0 R /XYZ 151.701 586.326 null]
 >> endobj
-5741 0 obj <<
+5709 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5749 0 obj <<
+5717 0 obj <<
 /Length 510       
 /Filter /FlateDecode
 >>
@@ -32075,27 +31247,27 @@
 ßø  ‰†®ußsg&]Y,{Óµ®ïòè`»º¼€ÛUsiƒÉõOÓ¹±;c:§Ó~Û”%($“¸h–wy“W¦»øÛU1'Rœ ÚƒG4¶g¢2ý\Im¾[·¹sÀ+½Ú¼Úv®¨Æ¹õàÛËA,RPÛýòÁX˜³Õ}¶™«ðç^òÒþ¯êì¾½Ðw3„îŸp§v«}?ìÆÏäq–fg“%’¤ìC³y\ÃCG
 endstream
 endobj
-5748 0 obj <<
+5716 0 obj <<
 /Type /Page
-/Contents 5749 0 R
-/Resources 5747 0 R
+/Contents 5717 0 R
+/Resources 5715 0 R
 /MediaBox [0 0 612 792]
-/Parent 5746 0 R
+/Parent 5714 0 R
 >> endobj
-5750 0 obj <<
-/D [5748 0 R /XYZ 100.892 685.529 null]
+5718 0 obj <<
+/D [5716 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1656 0 obj <<
-/D [5748 0 R /XYZ 100.892 516.339 null]
+/D [5716 0 R /XYZ 100.892 516.339 null]
 >> endobj
-5521 0 obj <<
-/D [5748 0 R /XYZ 100.892 498.256 null]
+5489 0 obj <<
+/D [5716 0 R /XYZ 100.892 498.256 null]
 >> endobj
-5747 0 obj <<
+5715 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5753 0 obj <<
+5721 0 obj <<
 /Length 564       
 /Filter /FlateDecode
 >>
@@ -32108,27 +31280,27 @@
 [Mtª•9èv×s)Ùkîy«dt£Ú_E¦^1&¤›Vér@âÓ\gHæ€m“Y§]Sf«Úî2Ãi;•ìvïgÇßq±_•E¶S&]œŸÁJkÓÈVV}wÂo)÷FWz_›KÑ!öº˜¦”…ì†Ô#r+¨™»Ÿ?2]5Ò¸+á×Ɲ=i36R*W9œ8ÙÍ?	lŸßQ£ŸvRãô&&¡&Vÿóøý/ƒ
 endstream
 endobj
-5752 0 obj <<
+5720 0 obj <<
 /Type /Page
-/Contents 5753 0 R
-/Resources 5751 0 R
+/Contents 5721 0 R
+/Resources 5719 0 R
 /MediaBox [0 0 612 792]
-/Parent 5746 0 R
+/Parent 5714 0 R
 >> endobj
-5754 0 obj <<
-/D [5752 0 R /XYZ 151.701 685.529 null]
+5722 0 obj <<
+/D [5720 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1657 0 obj <<
-/D [5752 0 R /XYZ 151.701 550.212 null]
+/D [5720 0 R /XYZ 151.701 550.212 null]
 >> endobj
-5522 0 obj <<
-/D [5752 0 R /XYZ 151.701 518.58 null]
+5490 0 obj <<
+/D [5720 0 R /XYZ 151.701 518.58 null]
 >> endobj
-5751 0 obj <<
+5719 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5757 0 obj <<
+5725 0 obj <<
 /Length 575       
 /Filter /FlateDecode
 >>
@@ -32137,27 +31309,27 @@
 ã~ØwÄÐÚʝZWâëy3âIÈG÷Y11™bQÜk©¥Ó9#QBX¸u¦Üb®,2Y{èR¼ÙËL·ÿÑ°kô±^zº†'‰»Ø~¯5ø¬Š6¯ÌÔ JÙV7‡®—Æ	{Ù;Å/ªù•§êEÇuÝh«S]x$>ë!YlêÔAbŠÐu2e÷ª1—	NÛ)¥9¼/ÎO¿ãâø\äéAý™t1þÏZÛZ6²ì¦“ø-™òhu©•½$õ±WùtK‘KãSÈ[AÝô—óGªËZÚåèÚôFoVÚƒ”ÊT'~ȍæv»wâèÔNrœ·hr+	Ő;þlåéùÏR†ä
 endstream
 endobj
-5756 0 obj <<
+5724 0 obj <<
 /Type /Page
-/Contents 5757 0 R
-/Resources 5755 0 R
+/Contents 5725 0 R
+/Resources 5723 0 R
 /MediaBox [0 0 612 792]
-/Parent 5746 0 R
+/Parent 5714 0 R
 >> endobj
-5758 0 obj <<
-/D [5756 0 R /XYZ 100.892 685.529 null]
+5726 0 obj <<
+/D [5724 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1658 0 obj <<
-/D [5756 0 R /XYZ 100.892 550.212 null]
+/D [5724 0 R /XYZ 100.892 550.212 null]
 >> endobj
-5547 0 obj <<
-/D [5756 0 R /XYZ 100.892 518.58 null]
+5515 0 obj <<
+/D [5724 0 R /XYZ 100.892 518.58 null]
 >> endobj
-5755 0 obj <<
+5723 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5761 0 obj <<
+5729 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -32165,20 +31337,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-5760 0 obj <<
+5728 0 obj <<
 /Type /Page
-/Contents 5761 0 R
-/Resources 5759 0 R
+/Contents 5729 0 R
+/Resources 5727 0 R
 /MediaBox [0 0 612 792]
-/Parent 5746 0 R
+/Parent 5714 0 R
 >> endobj
-5762 0 obj <<
-/D [5760 0 R /XYZ 151.701 685.529 null]
+5730 0 obj <<
+/D [5728 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5759 0 obj <<
+5727 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-5765 0 obj <<
+5733 0 obj <<
 /Length 1572      
 /Filter /FlateDecode
 >>
@@ -32200,27 +31372,27 @@
 v]f;;ŠçŸÇ?®ãŸß—oe:ÿ·&ÓÈ•ð÷Æ>úçH¶itq	þõþÊùL
 endstream
 endobj
-5764 0 obj <<
+5732 0 obj <<
 /Type /Page
-/Contents 5765 0 R
-/Resources 5763 0 R
+/Contents 5733 0 R
+/Resources 5731 0 R
 /MediaBox [0 0 612 792]
-/Parent 5746 0 R
+/Parent 5714 0 R
 >> endobj
-5766 0 obj <<
-/D [5764 0 R /XYZ 100.892 685.529 null]
+5734 0 obj <<
+/D [5732 0 R /XYZ 100.892 685.529 null]
 >> endobj
 718 0 obj <<
-/D [5764 0 R /XYZ 100.892 660.623 null]
+/D [5732 0 R /XYZ 100.892 660.623 null]
 >> endobj
-5767 0 obj <<
-/D [5764 0 R /XYZ 100.892 476.022 null]
+5735 0 obj <<
+/D [5732 0 R /XYZ 100.892 476.022 null]
 >> endobj
-5763 0 obj <<
+5731 0 obj <<
 /Font << /F77 1973 0 R /F17 1131 0 R /F15 1133 0 R /F28 1124 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5770 0 obj <<
+5738 0 obj <<
 /Length 1913      
 /Filter /FlateDecode
 >>
@@ -32245,27 +31417,27 @@
 d¼ZoPZ¿Xµê\nóNŠïæXëô¢^]Z¯ÿ´t-Øõ_¬è¡#ÃHÿýIW›s»8o€Ÿœ#õg‚ŽN÷Ÿ§£íÑ+ã@¸½c~Ú–ç$õqDæÊà0eºýäùù§ô‚o..ü†È’>67IŠ®ÊÓ8f·?þÍVo·¿3û/­z—¿°d’þļoo¶KiÆä¾eٍ?0f<(ß“Œ[DÞÞÜ~—,Iù,S€Ù­Á¨¦š8š”v¶Á=ÖÿȹùÒ©Xz&¿d*în‹%[̦oqî(hj®‚¸,ÇNÐùÏÿûúaõ/÷ŒÖž
 endstream
 endobj
-5769 0 obj <<
+5737 0 obj <<
 /Type /Page
-/Contents 5770 0 R
-/Resources 5768 0 R
+/Contents 5738 0 R
+/Resources 5736 0 R
 /MediaBox [0 0 612 792]
-/Parent 5773 0 R
+/Parent 5741 0 R
 >> endobj
-5771 0 obj <<
-/D [5769 0 R /XYZ 151.701 685.529 null]
+5739 0 obj <<
+/D [5737 0 R /XYZ 151.701 685.529 null]
 >> endobj
 722 0 obj <<
-/D [5769 0 R /XYZ 151.701 339.882 null]
+/D [5737 0 R /XYZ 151.701 339.882 null]
 >> endobj
-5772 0 obj <<
-/D [5769 0 R /XYZ 151.701 313.225 null]
+5740 0 obj <<
+/D [5737 0 R /XYZ 151.701 313.225 null]
 >> endobj
-5768 0 obj <<
+5736 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5777 0 obj <<
+5745 0 obj <<
 /Length 1977      
 /Filter /FlateDecode
 >>
@@ -32288,42 +31460,42 @@
 ÈÚ>vF„m\ëQ\+,â¤ÄÈRÂZ9Ìv×p'î ©½|õ õÀYyàDæmbábþ“à„VÀaÏ\ˆ«Ä{pðö¡¦I@•ÞÊ›ë7?„Ohoq·Þñ¤àuídìÉEÿ(Ñ ëb×íjË’Ôì5.I%]·1nv·ÚKcÕàûj¸’äÉN'^½oÉ*Iˆéý ÕªôŸ@Ï‹×ÿl²òÖ³0籧•þ(_YWDõßww‡ÿ Ú)F
 endstream
 endobj
-5776 0 obj <<
+5744 0 obj <<
 /Type /Page
-/Contents 5777 0 R
-/Resources 5775 0 R
+/Contents 5745 0 R
+/Resources 5743 0 R
 /MediaBox [0 0 612 792]
-/Parent 5773 0 R
-/Annots [ 5774 0 R 5780 0 R ]
+/Parent 5741 0 R
+/Annots [ 5742 0 R 5748 0 R ]
 >> endobj
-5774 0 obj <<
+5742 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.459 267.481 460.543 279.17]
 /Subtype /Link
 /A << /S /GoTo /D (happy) >>
 >> endobj
-5780 0 obj <<
+5748 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.441 253.931 296.615 265.621]
 /Subtype /Link
 /A << /S /GoTo /D (happy) >>
 >> endobj
-5778 0 obj <<
-/D [5776 0 R /XYZ 100.892 685.529 null]
+5746 0 obj <<
+/D [5744 0 R /XYZ 100.892 685.529 null]
 >> endobj
 726 0 obj <<
-/D [5776 0 R /XYZ 100.892 423.466 null]
+/D [5744 0 R /XYZ 100.892 423.466 null]
 >> endobj
-5779 0 obj <<
-/D [5776 0 R /XYZ 100.892 397.147 null]
+5747 0 obj <<
+/D [5744 0 R /XYZ 100.892 397.147 null]
 >> endobj
-5775 0 obj <<
+5743 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F54 1912 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5783 0 obj <<
+5751 0 obj <<
 /Length 1749      
 /Filter /FlateDecode
 >>
@@ -32343,33 +31515,33 @@
 ªHx2JΟá«Òµªq•žýÄ"‡°ç@."íöúæQÈ&­°XÊj>‘AöUs±ÍÖãùø…ÿý¿\tJF
 endstream
 endobj
-5782 0 obj <<
+5750 0 obj <<
 /Type /Page
-/Contents 5783 0 R
-/Resources 5781 0 R
+/Contents 5751 0 R
+/Resources 5749 0 R
 /MediaBox [0 0 612 792]
-/Parent 5773 0 R
+/Parent 5741 0 R
 >> endobj
-5784 0 obj <<
-/D [5782 0 R /XYZ 151.701 685.529 null]
+5752 0 obj <<
+/D [5750 0 R /XYZ 151.701 685.529 null]
 >> endobj
 730 0 obj <<
-/D [5782 0 R /XYZ 151.701 449.613 null]
+/D [5750 0 R /XYZ 151.701 449.613 null]
 >> endobj
-5785 0 obj <<
-/D [5782 0 R /XYZ 151.701 421.302 null]
+5753 0 obj <<
+/D [5750 0 R /XYZ 151.701 421.302 null]
 >> endobj
 734 0 obj <<
-/D [5782 0 R /XYZ 151.701 238.584 null]
+/D [5750 0 R /XYZ 151.701 238.584 null]
 >> endobj
-5786 0 obj <<
-/D [5782 0 R /XYZ 151.701 210.97 null]
+5754 0 obj <<
+/D [5750 0 R /XYZ 151.701 210.97 null]
 >> endobj
-5781 0 obj <<
+5749 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5791 0 obj <<
+5759 0 obj <<
 /Length 1945      
 /Filter /FlateDecode
 >>
@@ -32394,36 +31566,36 @@
 Yž^c ~£ºy`ÂÕ£“Šlùg„‚ÎÏŠ@ ù;üïƒs@­`½ÐŠÎÐí쟃	/„ÒQCÙ7þ:È€Nÿø€Xƒ}YJØ#ˆ{YD"KÏ,L—“¨HÄ-Ìcoáwg‚CKõ,€d~Ôۍãþ_××Çã1Ú›ª‰J.¼ÅÞ³«r˜¢ä¼ùû¿Äôo‡„æ™úV ’TEYœÍ‘8?$•i ’4Ê‹â[‡€zžBèô_‘ *”þÿ™ÜùyíΞéû_\ÓÉé
 endstream
 endobj
-5790 0 obj <<
+5758 0 obj <<
 /Type /Page
-/Contents 5791 0 R
-/Resources 5789 0 R
+/Contents 5759 0 R
+/Resources 5757 0 R
 /MediaBox [0 0 612 792]
-/Parent 5773 0 R
-/Annots [ 5787 0 R 5788 0 R ]
+/Parent 5741 0 R
+/Annots [ 5755 0 R 5756 0 R ]
 >> endobj
-5787 0 obj <<
+5755 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [340.714 354.953 415.888 366.642]
 /Subtype /Link
 /A << /S /GoTo /D (sbeamg) >>
 >> endobj
-5788 0 obj <<
+5756 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [222.832 131.083 314.263 144.035]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.padl.com)>>
 >> endobj
-5792 0 obj <<
-/D [5790 0 R /XYZ 100.892 685.529 null]
+5760 0 obj <<
+/D [5758 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5789 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F89 2333 0 R /F73 2334 0 R /F97 5793 0 R /F98 5794 0 R /F62 1930 0 R /F72 1931 0 R >>
-/XObject << /Im3 2328 0 R >>
+5757 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F89 2330 0 R /F73 2331 0 R /F97 5761 0 R /F98 5762 0 R /F62 1930 0 R /F72 1931 0 R >>
+/XObject << /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5798 0 obj <<
+5766 0 obj <<
 /Length 926       
 /Filter /FlateDecode
 >>
@@ -32434,39 +31606,39 @@
 ]IžõBÞ?=œE¯EQµë’×õÿ=t\~TLHxÓÇוi.'…ä{ëîþIþ½ÛÉs·þOéœå­µÈÚ‹úš^ŠábÏÔ¡—yvÑÜg¢Ù§í½ÚÀçÙ\>#<±ýî㪆ì,pª‹Bÿtý誻Ëï³ÎŽi˜SÏOŒžÍüSeó[ŒLŒà17ÅCËâ{-'Oûh=>†pz¾Gó“äQzFïóŸ¤G2c¿<K[.Z®ý±@Ï|J3ƒõ	_z!ê‘Dõ(ôž/ˆÇè¾Æ?ô5 P×ÅoT+mxÛì!ZÛG#U¥Æ< „‚l¡ák=•øt4•„~ÍÌ/¢5’O™cBÕC•þåG³{•f¨=oó¹®!AÛ°7ªÃ1Å;Q×B5ЃÆU¢Nìz-q ™§Ò*6J4t½Ùm¡ÓÇØUmקuÍs³U¡ªµ?úXZ_›¯w•nÖÃÝÜ{¸6œË½¬:E Ì$j,SaèÑöz¦€uoü˝=)«ÎÌ Í‘±óÉÃ=¿䵝I
 endstream
 endobj
-5797 0 obj <<
+5765 0 obj <<
 /Type /Page
-/Contents 5798 0 R
-/Resources 5796 0 R
+/Contents 5766 0 R
+/Resources 5764 0 R
 /MediaBox [0 0 612 792]
-/Parent 5773 0 R
+/Parent 5741 0 R
 >> endobj
-5799 0 obj <<
-/D [5797 0 R /XYZ 151.701 685.529 null]
+5767 0 obj <<
+/D [5765 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1659 0 obj <<
-/D [5797 0 R /XYZ 151.701 660.623 null]
+/D [5765 0 R /XYZ 151.701 660.623 null]
 >> endobj
-5795 0 obj <<
-/D [5797 0 R /XYZ 151.701 632.325 null]
+5763 0 obj <<
+/D [5765 0 R /XYZ 151.701 632.325 null]
 >> endobj
 738 0 obj <<
-/D [5797 0 R /XYZ 151.701 265.748 null]
+/D [5765 0 R /XYZ 151.701 265.748 null]
 >> endobj
-5800 0 obj <<
-/D [5797 0 R /XYZ 151.701 243.817 null]
+5768 0 obj <<
+/D [5765 0 R /XYZ 151.701 243.817 null]
 >> endobj
 742 0 obj <<
-/D [5797 0 R /XYZ 151.701 243.817 null]
+/D [5765 0 R /XYZ 151.701 243.817 null]
 >> endobj
-5801 0 obj <<
-/D [5797 0 R /XYZ 151.701 185.422 null]
+5769 0 obj <<
+/D [5765 0 R /XYZ 151.701 185.422 null]
 >> endobj
-5796 0 obj <<
+5764 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5804 0 obj <<
+5772 0 obj <<
 /Length 981       
 /Filter /FlateDecode
 >>
@@ -32479,27 +31651,27 @@
 ;ÿÃçÐû,
 endstream
 endobj
-5803 0 obj <<
+5771 0 obj <<
 /Type /Page
-/Contents 5804 0 R
-/Resources 5802 0 R
+/Contents 5772 0 R
+/Resources 5770 0 R
 /MediaBox [0 0 612 792]
-/Parent 5773 0 R
+/Parent 5741 0 R
 >> endobj
-5805 0 obj <<
-/D [5803 0 R /XYZ 100.892 685.529 null]
+5773 0 obj <<
+/D [5771 0 R /XYZ 100.892 685.529 null]
 >> endobj
 746 0 obj <<
-/D [5803 0 R /XYZ 100.892 434.776 null]
+/D [5771 0 R /XYZ 100.892 434.776 null]
 >> endobj
-5806 0 obj <<
-/D [5803 0 R /XYZ 100.892 407.087 null]
+5774 0 obj <<
+/D [5771 0 R /XYZ 100.892 407.087 null]
 >> endobj
-5802 0 obj <<
+5770 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5809 0 obj <<
+5777 0 obj <<
 /Length 862       
 /Filter /FlateDecode
 >>
@@ -32511,21 +31683,21 @@
 y´hÙµßó]3S=ïÇÖ‡1„ßج6m+ªJ<=Ïi¦Æei„‹Ë#tƒþJ»ÊÚÁ¶Úwm–ÔKg|#L팤DZNç47¤™÷‚‚“ÁãHí†æÛI¨oyIó]#oÿæÍ_Fy=ÆÑï þ\–îJgœÐϳ´õ<$‚WǁïŸFã›fü×O¥¿ eÿu~
 endstream
 endobj
-5808 0 obj <<
+5776 0 obj <<
 /Type /Page
-/Contents 5809 0 R
-/Resources 5807 0 R
+/Contents 5777 0 R
+/Resources 5775 0 R
 /MediaBox [0 0 612 792]
-/Parent 5811 0 R
+/Parent 5779 0 R
 >> endobj
-5810 0 obj <<
-/D [5808 0 R /XYZ 151.701 685.529 null]
+5778 0 obj <<
+/D [5776 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5807 0 obj <<
+5775 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5814 0 obj <<
+5782 0 obj <<
 /Length 811       
 /Filter /FlateDecode
 >>
@@ -32536,21 +31708,21 @@
 W禐™Â-ü¨ m%‡›ZE%8¾¶Dýzú_ÆûûéÅþþz“M©Ò3¦ûõ·IóQѬð­òãézª
 endstream
 endobj
-5813 0 obj <<
+5781 0 obj <<
 /Type /Page
-/Contents 5814 0 R
-/Resources 5812 0 R
+/Contents 5782 0 R
+/Resources 5780 0 R
 /MediaBox [0 0 612 792]
-/Parent 5811 0 R
+/Parent 5779 0 R
 >> endobj
-5815 0 obj <<
-/D [5813 0 R /XYZ 100.892 685.529 null]
+5783 0 obj <<
+/D [5781 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5812 0 obj <<
+5780 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5818 0 obj <<
+5786 0 obj <<
 /Length 800       
 /Filter /FlateDecode
 >>
@@ -32565,21 +31737,21 @@
 %-ÏrJdÚySϖ쐋2ò¬w3g^kîÚnôÇ*¦°‘¶ûÝÁs•j²áœnR§äWv†ocìj¦Eôš‹fu!ò@Pé®ðåš’öm§„ê-ÃÞÜ«½m‚X¹Ù–e\nèÿÚÙýK“÷öûQ§µ[eš=ÜvD¨Az7*Ü©Õ&:Ç<§xïʼû=»×–ùhºy¡Þ&B{wÿmúî„vêÐ~—5Oý¹÷cì
 endstream
 endobj
-5817 0 obj <<
+5785 0 obj <<
 /Type /Page
-/Contents 5818 0 R
-/Resources 5816 0 R
+/Contents 5786 0 R
+/Resources 5784 0 R
 /MediaBox [0 0 612 792]
-/Parent 5811 0 R
+/Parent 5779 0 R
 >> endobj
-5819 0 obj <<
-/D [5817 0 R /XYZ 151.701 685.529 null]
+5787 0 obj <<
+/D [5785 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5816 0 obj <<
+5784 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5824 0 obj <<
+5792 0 obj <<
 /Length 1148      
 /Filter /FlateDecode
 >>
@@ -32596,29 +31768,29 @@
 Át–Dœm×bõƒ®-PJZ§Ú°*ºõaZòpÉK†=…ö‚¢]á7ü?u:9
 endstream
 endobj
-5823 0 obj <<
+5791 0 obj <<
 /Type /Page
-/Contents 5824 0 R
-/Resources 5822 0 R
+/Contents 5792 0 R
+/Resources 5790 0 R
 /MediaBox [0 0 612 792]
-/Parent 5811 0 R
-/Annots [ 5820 0 R ]
+/Parent 5779 0 R
+/Annots [ 5788 0 R ]
 >> endobj
-5820 0 obj <<
+5788 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [356.016 327.837 431.19 339.83]
 /Subtype /Link
 /A << /S /GoTo /D (ch8ldap) >>
 >> endobj
-5825 0 obj <<
-/D [5823 0 R /XYZ 100.892 685.529 null]
+5793 0 obj <<
+/D [5791 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5822 0 obj <<
+5790 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5833 0 obj <<
+5801 0 obj <<
 /Length 2301      
 /Filter /FlateDecode
 >>
@@ -32646,84 +31818,84 @@
 “«×ƒÈ&—kb­\ÇÍ£y±SB%éÜp©º‚•:º×-šé®ªØSÿ”Êîy&ÒÆA@>UK…D¦k1üGW—2)Ÿ&Æ­^˜r‚.h0Æ<ƒô¯DD؊쟗vº¨%àü‡”à°_R¥FŠÜû%÷> ÝÑýõùÆ²04Åþ³³²r/³Ú§¥„¤£PÅ1»þ­)–BU灆tNIbrý¹™ bÄZ]8z¯æKwu°pGó‘Cš}ü´ç6b„ýÑÝ5ºMJwäAnµH¤š™"p-Dëý±æ¦˜àǺä	ÇR®Zºiœ®)xË#XŽ@ ÄT‰i™ÒTà"=^Ý e“µ5[;ÍÜ@âßòovÁ̏ð>îœF×Ö|zÆ]{Ô`Ù%qô9,|1Ùyéµ&Ät|iŠIåeXÌÃP”:3n—p,š,[Ã[]^Yrg1óç˜]ã™/•ÿ3ù'i`ÂdbæÊsî¯Jâ@%éüü’F dœé_Ò8œô‹,ô¾‚ƒüs&?ƒ6…16æa‘•¦Q0€Õv]‹[÷'ù²¶M±œ±áIKw³Ô(©›@ë‹Îa^ˆX¿?”Ü¢ØG&Ú5£]ÝŸ2“^pð¬â!ù}Åê©â…¥.‚{:•ºì}©[gY(â×)E¥ro}5Э¼WŠcßÏèñ)ÍýÚaYDîþÉéR9 Pΐ. ˜Ž8,¾*ƒÿä[/*2A”ÌŸòb Ji(Q  à(aÍ°Rrþl±B¨”…¢Í¿\<$¤çì)ù®x÷n®¯¡5ˆˆýÅÌÙFY„:š¦þuÆzùµüÑRÅ1
 endstream
 endobj
-5832 0 obj <<
+5800 0 obj <<
 /Type /Page
-/Contents 5833 0 R
-/Resources 5831 0 R
+/Contents 5801 0 R
+/Resources 5799 0 R
 /MediaBox [0 0 612 792]
-/Parent 5811 0 R
-/Annots [ 5821 0 R 5828 0 R 5835 0 R 5829 0 R 5836 0 R 5830 0 R 5837 0 R 5827 0 R 5838 0 R ]
+/Parent 5779 0 R
+/Annots [ 5789 0 R 5796 0 R 5803 0 R 5797 0 R 5804 0 R 5798 0 R 5805 0 R 5795 0 R 5806 0 R ]
 >> endobj
-5821 0 obj <<
+5789 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.87 646.546 491.395 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (sbepu2) >>
 >> endobj
-5828 0 obj <<
+5796 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [477.996 315.677 511.352 327.366]
 /Subtype /Link
 /A << /S /GoTo /D (ch8smbconf) >>
 >> endobj
-5835 0 obj <<
+5803 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.25 302.127 252.698 313.817]
 /Subtype /Link
 /A << /S /GoTo /D (ch8smbconf) >>
 >> endobj
-5829 0 obj <<
+5797 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [477.996 152.259 511.352 163.949]
 /Subtype /Link
 /A << /S /GoTo /D (sbersync) >>
 >> endobj
-5836 0 obj <<
+5804 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.25 138.71 254.279 150.399]
 /Subtype /Link
 /A << /S /GoTo /D (sbersync) >>
 >> endobj
-5830 0 obj <<
+5798 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [477.996 138.71 511.352 150.399]
 /Subtype /Link
 /A << /S /GoTo /D (sbexcld) >>
 >> endobj
-5837 0 obj <<
+5805 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 116.961 511.352 129.913]
 /Subtype /Link
 /A << /S /GoTo /D (sbexcld) >>
 >> endobj
-5827 0 obj <<
+5795 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 256.477 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://idealx.com)>>
 >> endobj
-5838 0 obj <<
+5806 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 86.296 511.352 101.838]
 /Subtype /Link
 /A << /S /GoTo /D (sbexcld) >>
 >> endobj
-5834 0 obj <<
-/D [5832 0 R /XYZ 151.701 685.529 null]
+5802 0 obj <<
+/D [5800 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5831 0 obj <<
+5799 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F54 1912 0 R /F30 1928 0 R /F59 1905 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5847 0 obj <<
+5815 0 obj <<
 /Length 2009      
 /Filter /FlateDecode
 >>
@@ -32749,51 +31921,51 @@
 pP±Žâ¥gP•°q?_ØQ›EË뵋„–ОÍ[sÓÕ¸g¿vsQ˜éÀK¶úñç^@Jÿ¶®ãêû/RªqBÿTüõÏÂërËNF ò=òŒ€ošÊ;ˆënjÈã:`üZ©ä4³õ=kÙGÔìq™_Ìéüb†˜úp'ìí²m#¦þºpaÇG#¦÷ÿù©õ:ã#6¬=üÝ͏n"‘<Ògqìì#/5“\ó®õ¶Ù\1g}n䂶X‰T²LŸ[&Vl™ìÒ2@ÄÝT`.tðèwãoíëC‡IÖÐ8qö|ò–?ð¤ë—Ï_¨à^êõ
 endstream
 endobj
-5846 0 obj <<
+5814 0 obj <<
 /Type /Page
-/Contents 5847 0 R
-/Resources 5845 0 R
+/Contents 5815 0 R
+/Resources 5813 0 R
 /MediaBox [0 0 612 792]
-/Parent 5811 0 R
-/Annots [ 5848 0 R 5850 0 R 5843 0 R 5844 0 R ]
+/Parent 5779 0 R
+/Annots [ 5816 0 R 5818 0 R 5811 0 R 5812 0 R ]
 >> endobj
-5848 0 obj <<
+5816 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 684.533 460.543 700.075]
 /Subtype /Link
 /A << /S /GoTo /D (sbexcld) >>
 >> endobj
-5850 0 obj <<
+5818 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.441 646.546 201.669 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (sbexcld) >>
 >> endobj
-5843 0 obj <<
+5811 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.076 318.45 356.759 330.139]
 /Subtype /Link
 /A << /S /GoTo /D (happy) >>
 >> endobj
-5844 0 obj <<
+5812 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [283.592 166.262 364.221 178.255]
 /Subtype /Link
 /A << /S /GoTo /D (ch8ideal) >>
 >> endobj
-5849 0 obj <<
-/D [5846 0 R /XYZ 100.892 685.529 null]
+5817 0 obj <<
+/D [5814 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5845 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F89 2333 0 R /F73 2334 0 R /F17 1131 0 R >>
-/XObject << /Im3 2328 0 R >>
+5813 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F89 2330 0 R /F73 2331 0 R /F17 1131 0 R >>
+/XObject << /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5854 0 obj <<
+5822 0 obj <<
 /Length 1494      
 /Filter /FlateDecode
 >>
@@ -32815,21 +31987,21 @@
 Þw"Z|ÕqÍŽâW-G+e Ù2èãvÊ°ŠÝºúäÖïnÝÐzsÝ¿°8±öDÞ3õóêÎ}õX¥a©9ÿVWøIô?<»ô¦
 endstream
 endobj
-5853 0 obj <<
+5821 0 obj <<
 /Type /Page
-/Contents 5854 0 R
-/Resources 5852 0 R
+/Contents 5822 0 R
+/Resources 5820 0 R
 /MediaBox [0 0 612 792]
-/Parent 5856 0 R
+/Parent 5824 0 R
 >> endobj
-5855 0 obj <<
-/D [5853 0 R /XYZ 151.701 685.529 null]
+5823 0 obj <<
+/D [5821 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5852 0 obj <<
+5820 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5859 0 obj <<
+5827 0 obj <<
 /Length 870       
 /Filter /FlateDecode
 >>
@@ -32839,21 +32011,21 @@
 .6f6Րº³8–žb,xÄje‘m‹YCQh_½»^~@Ó½Bïß.?øÇ<<¸u:Ä…ík—¥³ãÖ9uYbÈèuÕ'HÁoàÝP̲঱•³òCŽÎ¥Ã`˜:¹ntü0ÖZè—IÊ‚•Óê¼Z¶F·®YNžµç*ÝBE˜FåÚêàº3-Zˆö¾Cö­žê¾aM%c÷m«9ĬK%7ÏT*5u‡ ÙÓ0Ú…¶ªd­@Uó`‰<Ê ³óƒOϸña³Áؘ3±'¬º•,°­ùzñ€ƒrkeåô®¥_üjje×5fÝCu¸ª<ÉaC\ÀÎÔúÚËs·(ÆüÂß:ûÎVðM²,¿¡Kiè…•©õ ýsyݿŽq„?3ßú€
 endstream
 endobj
-5858 0 obj <<
+5826 0 obj <<
 /Type /Page
-/Contents 5859 0 R
-/Resources 5857 0 R
+/Contents 5827 0 R
+/Resources 5825 0 R
 /MediaBox [0 0 612 792]
-/Parent 5856 0 R
+/Parent 5824 0 R
 >> endobj
-5860 0 obj <<
-/D [5858 0 R /XYZ 100.892 685.529 null]
+5828 0 obj <<
+/D [5826 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5857 0 obj <<
+5825 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5863 0 obj <<
+5831 0 obj <<
 /Length 1443      
 /Filter /FlateDecode
 >>
@@ -32873,21 +32045,21 @@
 ÐÈ>ü•wdâ2æw\9ȧYµrß‚?ŒאâÖ6L4߆¿)ýZ­~€µî„ÔÓ_¥e…`ÿ'>©…
 endstream
 endobj
-5862 0 obj <<
+5830 0 obj <<
 /Type /Page
-/Contents 5863 0 R
-/Resources 5861 0 R
+/Contents 5831 0 R
+/Resources 5829 0 R
 /MediaBox [0 0 612 792]
-/Parent 5856 0 R
+/Parent 5824 0 R
 >> endobj
-5864 0 obj <<
-/D [5862 0 R /XYZ 151.701 685.529 null]
+5832 0 obj <<
+/D [5830 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5861 0 obj <<
+5829 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5867 0 obj <<
+5835 0 obj <<
 /Length 876       
 /Filter /FlateDecode
 >>
@@ -32903,21 +32075,21 @@
 G4"$š²óó1L‡@&“÷ôÒ³§¦9_µ3y7¿7èMü&èDÑ„±£ŽÃ ÄpˆéDÛǿⵚ½$ZŽ0`ä˜ÏuS«W]ÒnAô73­o2þg6ûõüÇüûô/ôç·?.Òí¼We|¡êx¨Êúñú3”_¢±r¹ÊÊÙZäí‡i°ÈÊÁ’çõîûöü{ß®úoÄO©|^
 endstream
 endobj
-5866 0 obj <<
+5834 0 obj <<
 /Type /Page
-/Contents 5867 0 R
-/Resources 5865 0 R
+/Contents 5835 0 R
+/Resources 5833 0 R
 /MediaBox [0 0 612 792]
-/Parent 5856 0 R
+/Parent 5824 0 R
 >> endobj
-5868 0 obj <<
-/D [5866 0 R /XYZ 100.892 685.529 null]
+5836 0 obj <<
+/D [5834 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5865 0 obj <<
+5833 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5872 0 obj <<
+5840 0 obj <<
 /Length 1469      
 /Filter /FlateDecode
 >>
@@ -32937,28 +32109,28 @@
 ykyØ~:)¥l§—𼗁š§Q©¬zÃÚ Çêgún›CåAc?&½<*à *¤qó}»÷ävÝÍ»›þ˜‡‰ó”ù<d¡Ø¶Õ‚Û7®K”¥ràsùeð€ØîN{wfᝮk<|•Àœ½ãµêp¾jpÜØU~ôøPáXCÞtÍèã;bðYB¹Ó—Þ%4áq’>>KÜs„Ó@ÀÎRwÓ$¦^fLÄD$GW8=|„Üs¸Á9ñ09B8¹Èų˜¦Yÿd[³};™ì÷ûø}ëvõLýh5(’±Hioà×#Ùç#8ç_Ì©»
 endstream
 endobj
-5871 0 obj <<
+5839 0 obj <<
 /Type /Page
-/Contents 5872 0 R
-/Resources 5870 0 R
+/Contents 5840 0 R
+/Resources 5838 0 R
 /MediaBox [0 0 612 792]
-/Parent 5856 0 R
-/Annots [ 5869 0 R ]
+/Parent 5824 0 R
+/Annots [ 5837 0 R ]
 >> endobj
-5869 0 obj <<
+5837 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 280.013 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.kixtart.org)>>
 >> endobj
-5873 0 obj <<
-/D [5871 0 R /XYZ 151.701 685.529 null]
+5841 0 obj <<
+/D [5839 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5870 0 obj <<
+5838 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R /F30 1928 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5877 0 obj <<
+5845 0 obj <<
 /Length 1863      
 /Filter /FlateDecode
 >>
@@ -32985,29 +32157,29 @@
 kçȶÓ<¢ºq+™žå$Æ+ˆ[‡ax¬Ä!÷¼ a’¤ä|ä´ÀÁùþ<,ÈìJ,À?žmO4¹™˜Us¹€†žœénì™D?¹›q5vwJ ËÑmdî_/2Ê@¨ØKñ°£qPê 	™…‘d§¿‰î{¾Zü9 ÜA
 endstream
 endobj
-5876 0 obj <<
+5844 0 obj <<
 /Type /Page
-/Contents 5877 0 R
-/Resources 5875 0 R
+/Contents 5845 0 R
+/Resources 5843 0 R
 /MediaBox [0 0 612 792]
-/Parent 5856 0 R
-/Annots [ 5874 0 R ]
+/Parent 5824 0 R
+/Annots [ 5842 0 R ]
 >> endobj
-5874 0 obj <<
+5842 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378 516.558 457.513 528.551]
 /Subtype /Link
 /A << /S /GoTo /D (ch8kix) >>
 >> endobj
-5878 0 obj <<
-/D [5876 0 R /XYZ 100.892 685.529 null]
+5846 0 obj <<
+/D [5844 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5875 0 obj <<
+5843 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5882 0 obj <<
+5850 0 obj <<
 /Length 2200      
 /Filter /FlateDecode
 >>
@@ -33035,42 +32207,42 @@
 p×v^/ûöýæê¿âèì5
 endstream
 endobj
-5881 0 obj <<
+5849 0 obj <<
 /Type /Page
-/Contents 5882 0 R
-/Resources 5880 0 R
+/Contents 5850 0 R
+/Resources 5848 0 R
 /MediaBox [0 0 612 792]
-/Parent 5891 0 R
+/Parent 5859 0 R
 >> endobj
-5883 0 obj <<
-/D [5881 0 R /XYZ 151.701 685.529 null]
+5851 0 obj <<
+/D [5849 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5884 0 obj <<
-/D [5881 0 R /XYZ 151.701 490.974 null]
+5852 0 obj <<
+/D [5849 0 R /XYZ 151.701 490.974 null]
 >> endobj
-5885 0 obj <<
-/D [5881 0 R /XYZ 151.701 442.799 null]
+5853 0 obj <<
+/D [5849 0 R /XYZ 151.701 442.799 null]
 >> endobj
-5886 0 obj <<
-/D [5881 0 R /XYZ 151.701 410.295 null]
+5854 0 obj <<
+/D [5849 0 R /XYZ 151.701 410.295 null]
 >> endobj
-5887 0 obj <<
-/D [5881 0 R /XYZ 151.701 372.942 null]
+5855 0 obj <<
+/D [5849 0 R /XYZ 151.701 372.942 null]
 >> endobj
-5888 0 obj <<
-/D [5881 0 R /XYZ 151.701 338.922 null]
+5856 0 obj <<
+/D [5849 0 R /XYZ 151.701 338.922 null]
 >> endobj
-5889 0 obj <<
-/D [5881 0 R /XYZ 151.701 276.592 null]
+5857 0 obj <<
+/D [5849 0 R /XYZ 151.701 276.592 null]
 >> endobj
-5890 0 obj <<
-/D [5881 0 R /XYZ 151.701 215.474 null]
+5858 0 obj <<
+/D [5849 0 R /XYZ 151.701 215.474 null]
 >> endobj
-5880 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R /F54 1912 0 R /F11 2494 0 R >>
+5848 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R /F54 1912 0 R /F11 2489 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5894 0 obj <<
+5862 0 obj <<
 /Length 2069      
 /Filter /FlateDecode
 >>
@@ -33088,21 +32260,21 @@
 ä/4ò¼»iß|ÂÞØ®u9+qWJÜ•òR7ÉF•Ë»B«ÔŽÜRŒÊN”ˆ‘ZzT	ÞÍü…Æ9‰nOLðn™[ó‡ÿn¥*x„ã±ÚÄ‘t>Ãºå?“¨ôvE¹ž%°‘¼lÓJáù&Ï&ÿÖ.é²ìRç^=u	ã·OUÿýîqóòmˆc
 endstream
 endobj
-5893 0 obj <<
+5861 0 obj <<
 /Type /Page
-/Contents 5894 0 R
-/Resources 5892 0 R
+/Contents 5862 0 R
+/Resources 5860 0 R
 /MediaBox [0 0 612 792]
-/Parent 5891 0 R
+/Parent 5859 0 R
 >> endobj
-5895 0 obj <<
-/D [5893 0 R /XYZ 100.892 685.529 null]
+5863 0 obj <<
+/D [5861 0 R /XYZ 100.892 685.529 null]
 >> endobj
-5892 0 obj <<
+5860 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F54 1912 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5899 0 obj <<
+5867 0 obj <<
 /Length 2082      
 /Filter /FlateDecode
 >>
@@ -33120,28 +32292,28 @@
 .Íõj@ ¸@‰¼~cd'ù‚Ûz¬íž’yŠÀœäÇ‘äþÅ©èÙ4§Ÿ?«ÿ’’¿Åÿû™”ˆ,Åé_ýCÊ’ ‡L/ú!Vˆ(ɪ Ió(ÎÅU²—΀-O0׫ثÿ¯«¾ù®¼d/£¤(—ÿlí4oß¼9Q¸#_"|£^ï¾:¬®¢*Ï–íß\±¾þ‚iþI7ô
 endstream
 endobj
-5898 0 obj <<
+5866 0 obj <<
 /Type /Page
-/Contents 5899 0 R
-/Resources 5897 0 R
+/Contents 5867 0 R
+/Resources 5865 0 R
 /MediaBox [0 0 612 792]
-/Parent 5891 0 R
-/Annots [ 5896 0 R ]
+/Parent 5859 0 R
+/Annots [ 5864 0 R ]
 >> endobj
-5896 0 obj <<
+5864 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 275.306 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.clamav.net)>>
 >> endobj
-5900 0 obj <<
-/D [5898 0 R /XYZ 151.701 685.529 null]
+5868 0 obj <<
+/D [5866 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5897 0 obj <<
+5865 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F30 1928 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5903 0 obj <<
+5871 0 obj <<
 /Length 1040      
 /Filter /FlateDecode
 >>
@@ -33155,27 +32327,27 @@
 aÊö4ßö²Ážý÷ž³²Ðï–,jï¡6ÇH©&¸_«ñÞ¯qî^Ýf$?rÑi¬ø€óý©f%’ä‰î9Vþò%¤u+,ûeu!4rÞ] ä‘'Xu9¬××ZŠ Ù	Bb.·2ý-º[DxÎx†ÓþX][gGçZmz*àƒ#MÕ=æ;þ!Ò>––÷6Æ1áòøqT7lŸWn1/8½¥çõXžW>TAòÕº·_tƒ_ˆ–e¡ð‡>±õó;t>@é
 endstream
 endobj
-5902 0 obj <<
+5870 0 obj <<
 /Type /Page
-/Contents 5903 0 R
-/Resources 5901 0 R
+/Contents 5871 0 R
+/Resources 5869 0 R
 /MediaBox [0 0 612 792]
-/Parent 5891 0 R
+/Parent 5859 0 R
 >> endobj
-5904 0 obj <<
-/D [5902 0 R /XYZ 100.892 685.529 null]
+5872 0 obj <<
+/D [5870 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1660 0 obj <<
-/D [5902 0 R /XYZ 100.892 660.623 null]
+/D [5870 0 R /XYZ 100.892 660.623 null]
 >> endobj
-5826 0 obj <<
-/D [5902 0 R /XYZ 100.892 642.541 null]
+5794 0 obj <<
+/D [5870 0 R /XYZ 100.892 642.541 null]
 >> endobj
-5901 0 obj <<
+5869 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5907 0 obj <<
+5875 0 obj <<
 /Length 878       
 /Filter /FlateDecode
 >>
@@ -33188,27 +32360,27 @@
 ±ˆW†žõ}ß÷¦Oµ57%C;´ÇŠašsîZ¤ì0f™]Œ4<Ïø=Tó69C}{k½a¢¯Mu	²Ïß÷O
 endstream
 endobj
-5906 0 obj <<
+5874 0 obj <<
 /Type /Page
-/Contents 5907 0 R
-/Resources 5905 0 R
+/Contents 5875 0 R
+/Resources 5873 0 R
 /MediaBox [0 0 612 792]
-/Parent 5891 0 R
+/Parent 5859 0 R
 >> endobj
-5908 0 obj <<
-/D [5906 0 R /XYZ 151.701 685.529 null]
+5876 0 obj <<
+/D [5874 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1661 0 obj <<
-/D [5906 0 R /XYZ 151.701 631.507 null]
+/D [5874 0 R /XYZ 151.701 631.507 null]
 >> endobj
-5839 0 obj <<
-/D [5906 0 R /XYZ 151.701 613.425 null]
+5807 0 obj <<
+/D [5874 0 R /XYZ 151.701 613.425 null]
 >> endobj
-5905 0 obj <<
+5873 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5911 0 obj <<
+5879 0 obj <<
 /Length 4616      
 /Filter /FlateDecode
 >>
@@ -33246,144 +32418,144 @@
 G_`ñG<}‰G¯ðHŒ9çªra †*okx8xpí@Uy-t›ý“ te ¬Ö•	T®Ô·+ó»ø˱NèŠw"Ú##çâDβŒ´i²O¶tÞQw|털ˆÂ´Ù¸¸ j‰`5'PuL¬oWfOñ—c`¢3¢ß·ø(5gk=³OBJÕ}ê–I…i³ùqÔËÀj–O êX^ß®ÌÌâ/Ç:’n,Ôp_¿ùñ‰pyàH êÒêç?É	œfÂ+P,Íõx•ÿÏúž¥«žðo(Ja°ø1ýWµÿÍs06ŽìHP²€7z0g†þ„ÍД©¡L/CxC¶?šÕ¹¿J{Q3¿jAÀj˜@Õ)@}»2iˆ¿k~é$J®ô»(¿ËÛãF£‘ŸíÐmž’-Oñ#}¡ÿÄÿÎìV•üøLWVØ6[*@-0} ¬fúªŽéõíÊìl þr¬#LG¨(d¿£ò›g9ÒýÉÅð—#Ž7U–¼üIòNø’SP$ï„/ù¿’‡[ºÏιÂÜ.I^«™d½"¨‚[®á …uÃ"ï…×n‡³É”Ùé<§¶)‹³§‘œü6$×q>Ù¨yºßî[)=}­g_düv{ºw:}ûGoEb("Æó×:–f/‡I=ß¹8¿xL}ýogžåª
 endstream
 endobj
-5910 0 obj <<
+5878 0 obj <<
 /Type /Page
-/Contents 5911 0 R
-/Resources 5909 0 R
+/Contents 5879 0 R
+/Resources 5877 0 R
 /MediaBox [0 0 612 792]
-/Parent 5891 0 R
+/Parent 5859 0 R
 >> endobj
-5912 0 obj <<
-/D [5910 0 R /XYZ 100.892 685.529 null]
+5880 0 obj <<
+/D [5878 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1662 0 obj <<
-/D [5910 0 R /XYZ 100.892 660.623 null]
+/D [5878 0 R /XYZ 100.892 660.623 null]
 >> endobj
-5840 0 obj <<
-/D [5910 0 R /XYZ 100.892 643.753 null]
+5808 0 obj <<
+/D [5878 0 R /XYZ 100.892 643.753 null]
 >> endobj
-5913 0 obj <<
-/D [5910 0 R /XYZ 100.892 637.775 null]
+5881 0 obj <<
+/D [5878 0 R /XYZ 100.892 637.775 null]
 >> endobj
-5914 0 obj <<
-/D [5910 0 R /XYZ 100.892 644.051 null]
+5882 0 obj <<
+/D [5878 0 R /XYZ 100.892 644.051 null]
 >> endobj
-5915 0 obj <<
-/D [5910 0 R /XYZ 100.892 632.096 null]
+5883 0 obj <<
+/D [5878 0 R /XYZ 100.892 632.096 null]
 >> endobj
-5916 0 obj <<
-/D [5910 0 R /XYZ 100.892 620.141 null]
+5884 0 obj <<
+/D [5878 0 R /XYZ 100.892 620.141 null]
 >> endobj
-5917 0 obj <<
-/D [5910 0 R /XYZ 100.892 608.186 null]
+5885 0 obj <<
+/D [5878 0 R /XYZ 100.892 608.186 null]
 >> endobj
-5918 0 obj <<
-/D [5910 0 R /XYZ 100.892 596.231 null]
+5886 0 obj <<
+/D [5878 0 R /XYZ 100.892 596.231 null]
 >> endobj
-5919 0 obj <<
-/D [5910 0 R /XYZ 100.892 584.276 null]
+5887 0 obj <<
+/D [5878 0 R /XYZ 100.892 584.276 null]
 >> endobj
-5920 0 obj <<
-/D [5910 0 R /XYZ 100.892 572.32 null]
+5888 0 obj <<
+/D [5878 0 R /XYZ 100.892 572.32 null]
 >> endobj
-5921 0 obj <<
-/D [5910 0 R /XYZ 100.892 560.365 null]
+5889 0 obj <<
+/D [5878 0 R /XYZ 100.892 560.365 null]
 >> endobj
-5922 0 obj <<
-/D [5910 0 R /XYZ 100.892 548.41 null]
+5890 0 obj <<
+/D [5878 0 R /XYZ 100.892 548.41 null]
 >> endobj
-5923 0 obj <<
-/D [5910 0 R /XYZ 100.892 536.455 null]
+5891 0 obj <<
+/D [5878 0 R /XYZ 100.892 536.455 null]
 >> endobj
-5924 0 obj <<
-/D [5910 0 R /XYZ 100.892 524.5 null]
+5892 0 obj <<
+/D [5878 0 R /XYZ 100.892 524.5 null]
 >> endobj
-5925 0 obj <<
-/D [5910 0 R /XYZ 100.892 512.545 null]
+5893 0 obj <<
+/D [5878 0 R /XYZ 100.892 512.545 null]
 >> endobj
-5926 0 obj <<
-/D [5910 0 R /XYZ 100.892 500.589 null]
+5894 0 obj <<
+/D [5878 0 R /XYZ 100.892 500.589 null]
 >> endobj
-5927 0 obj <<
-/D [5910 0 R /XYZ 100.892 488.634 null]
+5895 0 obj <<
+/D [5878 0 R /XYZ 100.892 488.634 null]
 >> endobj
-5928 0 obj <<
-/D [5910 0 R /XYZ 100.892 476.679 null]
+5896 0 obj <<
+/D [5878 0 R /XYZ 100.892 476.679 null]
 >> endobj
-5929 0 obj <<
-/D [5910 0 R /XYZ 100.892 464.724 null]
+5897 0 obj <<
+/D [5878 0 R /XYZ 100.892 464.724 null]
 >> endobj
-5930 0 obj <<
-/D [5910 0 R /XYZ 100.892 440.814 null]
+5898 0 obj <<
+/D [5878 0 R /XYZ 100.892 440.814 null]
 >> endobj
-5931 0 obj <<
-/D [5910 0 R /XYZ 100.892 416.903 null]
+5899 0 obj <<
+/D [5878 0 R /XYZ 100.892 416.903 null]
 >> endobj
-5932 0 obj <<
-/D [5910 0 R /XYZ 100.892 392.993 null]
+5900 0 obj <<
+/D [5878 0 R /XYZ 100.892 392.993 null]
 >> endobj
-5933 0 obj <<
-/D [5910 0 R /XYZ 100.892 369.083 null]
+5901 0 obj <<
+/D [5878 0 R /XYZ 100.892 369.083 null]
 >> endobj
-5934 0 obj <<
-/D [5910 0 R /XYZ 100.892 345.172 null]
+5902 0 obj <<
+/D [5878 0 R /XYZ 100.892 345.172 null]
 >> endobj
-5935 0 obj <<
-/D [5910 0 R /XYZ 100.892 321.262 null]
+5903 0 obj <<
+/D [5878 0 R /XYZ 100.892 321.262 null]
 >> endobj
-5936 0 obj <<
-/D [5910 0 R /XYZ 100.892 309.307 null]
+5904 0 obj <<
+/D [5878 0 R /XYZ 100.892 309.307 null]
 >> endobj
-5937 0 obj <<
-/D [5910 0 R /XYZ 100.892 297.352 null]
+5905 0 obj <<
+/D [5878 0 R /XYZ 100.892 297.352 null]
 >> endobj
-5938 0 obj <<
-/D [5910 0 R /XYZ 100.892 285.396 null]
+5906 0 obj <<
+/D [5878 0 R /XYZ 100.892 285.396 null]
 >> endobj
-5939 0 obj <<
-/D [5910 0 R /XYZ 100.892 273.441 null]
+5907 0 obj <<
+/D [5878 0 R /XYZ 100.892 273.441 null]
 >> endobj
-5940 0 obj <<
-/D [5910 0 R /XYZ 100.892 261.486 null]
+5908 0 obj <<
+/D [5878 0 R /XYZ 100.892 261.486 null]
 >> endobj
-5941 0 obj <<
-/D [5910 0 R /XYZ 100.892 249.531 null]
+5909 0 obj <<
+/D [5878 0 R /XYZ 100.892 249.531 null]
 >> endobj
-5942 0 obj <<
-/D [5910 0 R /XYZ 100.892 237.576 null]
+5910 0 obj <<
+/D [5878 0 R /XYZ 100.892 237.576 null]
 >> endobj
-5943 0 obj <<
-/D [5910 0 R /XYZ 100.892 225.621 null]
+5911 0 obj <<
+/D [5878 0 R /XYZ 100.892 225.621 null]
 >> endobj
-5944 0 obj <<
-/D [5910 0 R /XYZ 100.892 213.665 null]
+5912 0 obj <<
+/D [5878 0 R /XYZ 100.892 213.665 null]
 >> endobj
-5945 0 obj <<
-/D [5910 0 R /XYZ 100.892 201.71 null]
+5913 0 obj <<
+/D [5878 0 R /XYZ 100.892 201.71 null]
 >> endobj
-5946 0 obj <<
-/D [5910 0 R /XYZ 100.892 189.755 null]
+5914 0 obj <<
+/D [5878 0 R /XYZ 100.892 189.755 null]
 >> endobj
-5947 0 obj <<
-/D [5910 0 R /XYZ 100.892 177.8 null]
+5915 0 obj <<
+/D [5878 0 R /XYZ 100.892 177.8 null]
 >> endobj
-5948 0 obj <<
-/D [5910 0 R /XYZ 100.892 165.845 null]
+5916 0 obj <<
+/D [5878 0 R /XYZ 100.892 165.845 null]
 >> endobj
-5949 0 obj <<
-/D [5910 0 R /XYZ 100.892 153.89 null]
+5917 0 obj <<
+/D [5878 0 R /XYZ 100.892 153.89 null]
 >> endobj
-5950 0 obj <<
-/D [5910 0 R /XYZ 100.892 141.934 null]
+5918 0 obj <<
+/D [5878 0 R /XYZ 100.892 141.934 null]
 >> endobj
-5951 0 obj <<
-/D [5910 0 R /XYZ 100.892 129.979 null]
+5919 0 obj <<
+/D [5878 0 R /XYZ 100.892 129.979 null]
 >> endobj
-5909 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R /F11 2494 0 R >>
+5877 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R /F11 2489 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5954 0 obj <<
+5922 0 obj <<
 /Length 3032      
 /Filter /FlateDecode
 >>
@@ -33417,129 +32589,129 @@
 ®•ÿ©åÃ%âMcœ«²„=jáò™ƒb%KØ£f<¬ÓòRë8¾†=]>û*kØ/ø~nÄ 1gòýØèÿ;°ÏÿÓt )
 endstream
 endobj
-5953 0 obj <<
+5921 0 obj <<
 /Type /Page
-/Contents 5954 0 R
-/Resources 5952 0 R
+/Contents 5922 0 R
+/Resources 5920 0 R
 /MediaBox [0 0 612 792]
-/Parent 5991 0 R
+/Parent 5959 0 R
 >> endobj
-5955 0 obj <<
-/D [5953 0 R /XYZ 151.701 685.529 null]
+5923 0 obj <<
+/D [5921 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1663 0 obj <<
-/D [5953 0 R /XYZ 151.701 610.552 null]
+/D [5921 0 R /XYZ 151.701 610.552 null]
 >> endobj
-5956 0 obj <<
-/D [5953 0 R /XYZ 151.701 593.682 null]
+5924 0 obj <<
+/D [5921 0 R /XYZ 151.701 593.682 null]
 >> endobj
-5957 0 obj <<
-/D [5953 0 R /XYZ 151.701 587.704 null]
+5925 0 obj <<
+/D [5921 0 R /XYZ 151.701 587.704 null]
 >> endobj
-5958 0 obj <<
-/D [5953 0 R /XYZ 151.701 593.981 null]
+5926 0 obj <<
+/D [5921 0 R /XYZ 151.701 593.981 null]
 >> endobj
-5959 0 obj <<
-/D [5953 0 R /XYZ 151.701 582.026 null]
+5927 0 obj <<
+/D [5921 0 R /XYZ 151.701 582.026 null]
 >> endobj
-5960 0 obj <<
-/D [5953 0 R /XYZ 151.701 570.07 null]
+5928 0 obj <<
+/D [5921 0 R /XYZ 151.701 570.07 null]
 >> endobj
-5961 0 obj <<
-/D [5953 0 R /XYZ 151.701 558.115 null]
+5929 0 obj <<
+/D [5921 0 R /XYZ 151.701 558.115 null]
 >> endobj
-5962 0 obj <<
-/D [5953 0 R /XYZ 151.701 546.16 null]
+5930 0 obj <<
+/D [5921 0 R /XYZ 151.701 546.16 null]
 >> endobj
-5963 0 obj <<
-/D [5953 0 R /XYZ 151.701 534.205 null]
+5931 0 obj <<
+/D [5921 0 R /XYZ 151.701 534.205 null]
 >> endobj
-5964 0 obj <<
-/D [5953 0 R /XYZ 151.701 522.25 null]
+5932 0 obj <<
+/D [5921 0 R /XYZ 151.701 522.25 null]
 >> endobj
-5965 0 obj <<
-/D [5953 0 R /XYZ 151.701 510.295 null]
+5933 0 obj <<
+/D [5921 0 R /XYZ 151.701 510.295 null]
 >> endobj
-5966 0 obj <<
-/D [5953 0 R /XYZ 151.701 498.339 null]
+5934 0 obj <<
+/D [5921 0 R /XYZ 151.701 498.339 null]
 >> endobj
-5967 0 obj <<
-/D [5953 0 R /XYZ 151.701 486.384 null]
+5935 0 obj <<
+/D [5921 0 R /XYZ 151.701 486.384 null]
 >> endobj
-5968 0 obj <<
-/D [5953 0 R /XYZ 151.701 474.429 null]
+5936 0 obj <<
+/D [5921 0 R /XYZ 151.701 474.429 null]
 >> endobj
-5969 0 obj <<
-/D [5953 0 R /XYZ 151.701 462.474 null]
+5937 0 obj <<
+/D [5921 0 R /XYZ 151.701 462.474 null]
 >> endobj
-5970 0 obj <<
-/D [5953 0 R /XYZ 151.701 450.519 null]
+5938 0 obj <<
+/D [5921 0 R /XYZ 151.701 450.519 null]
 >> endobj
-5971 0 obj <<
-/D [5953 0 R /XYZ 151.701 438.564 null]
+5939 0 obj <<
+/D [5921 0 R /XYZ 151.701 438.564 null]
 >> endobj
-5972 0 obj <<
-/D [5953 0 R /XYZ 151.701 426.608 null]
+5940 0 obj <<
+/D [5921 0 R /XYZ 151.701 426.608 null]
 >> endobj
-5973 0 obj <<
-/D [5953 0 R /XYZ 151.701 414.653 null]
+5941 0 obj <<
+/D [5921 0 R /XYZ 151.701 414.653 null]
 >> endobj
-5974 0 obj <<
-/D [5953 0 R /XYZ 151.701 402.698 null]
+5942 0 obj <<
+/D [5921 0 R /XYZ 151.701 402.698 null]
 >> endobj
-5975 0 obj <<
-/D [5953 0 R /XYZ 151.701 390.743 null]
+5943 0 obj <<
+/D [5921 0 R /XYZ 151.701 390.743 null]
 >> endobj
-5976 0 obj <<
-/D [5953 0 R /XYZ 151.701 378.788 null]
+5944 0 obj <<
+/D [5921 0 R /XYZ 151.701 378.788 null]
 >> endobj
-5977 0 obj <<
-/D [5953 0 R /XYZ 151.701 366.833 null]
+5945 0 obj <<
+/D [5921 0 R /XYZ 151.701 366.833 null]
 >> endobj
-5978 0 obj <<
-/D [5953 0 R /XYZ 151.701 354.877 null]
+5946 0 obj <<
+/D [5921 0 R /XYZ 151.701 354.877 null]
 >> endobj
-5979 0 obj <<
-/D [5953 0 R /XYZ 151.701 342.922 null]
+5947 0 obj <<
+/D [5921 0 R /XYZ 151.701 342.922 null]
 >> endobj
-5980 0 obj <<
-/D [5953 0 R /XYZ 151.701 330.967 null]
+5948 0 obj <<
+/D [5921 0 R /XYZ 151.701 330.967 null]
 >> endobj
-5981 0 obj <<
-/D [5953 0 R /XYZ 151.701 319.012 null]
+5949 0 obj <<
+/D [5921 0 R /XYZ 151.701 319.012 null]
 >> endobj
-5982 0 obj <<
-/D [5953 0 R /XYZ 151.701 307.057 null]
+5950 0 obj <<
+/D [5921 0 R /XYZ 151.701 307.057 null]
 >> endobj
-5983 0 obj <<
-/D [5953 0 R /XYZ 151.701 295.102 null]
+5951 0 obj <<
+/D [5921 0 R /XYZ 151.701 295.102 null]
 >> endobj
-5984 0 obj <<
-/D [5953 0 R /XYZ 151.701 283.146 null]
+5952 0 obj <<
+/D [5921 0 R /XYZ 151.701 283.146 null]
 >> endobj
-5985 0 obj <<
-/D [5953 0 R /XYZ 151.701 271.191 null]
+5953 0 obj <<
+/D [5921 0 R /XYZ 151.701 271.191 null]
 >> endobj
-5986 0 obj <<
-/D [5953 0 R /XYZ 151.701 259.236 null]
+5954 0 obj <<
+/D [5921 0 R /XYZ 151.701 259.236 null]
 >> endobj
-5987 0 obj <<
-/D [5953 0 R /XYZ 151.701 247.281 null]
+5955 0 obj <<
+/D [5921 0 R /XYZ 151.701 247.281 null]
 >> endobj
-5988 0 obj <<
-/D [5953 0 R /XYZ 151.701 235.326 null]
+5956 0 obj <<
+/D [5921 0 R /XYZ 151.701 235.326 null]
 >> endobj
-5989 0 obj <<
-/D [5953 0 R /XYZ 151.701 211.415 null]
+5957 0 obj <<
+/D [5921 0 R /XYZ 151.701 211.415 null]
 >> endobj
-5990 0 obj <<
-/D [5953 0 R /XYZ 151.701 199.46 null]
+5958 0 obj <<
+/D [5921 0 R /XYZ 151.701 199.46 null]
 >> endobj
-5952 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F4 2008 0 R /F54 1912 0 R /F11 2494 0 R >>
+5920 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F4 2008 0 R /F54 1912 0 R /F11 2489 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-5994 0 obj <<
+5962 0 obj <<
 /Length 3212      
 /Filter /FlateDecode
 >>
@@ -33561,132 +32733,132 @@
 †.ú §rzG ‡ÈºÖJåu1\…¿%d×Ôz_ Þ¼çgqàÀÚ<±Bj„ã^Íñ@ŠÇ1ß®Â^÷×kŸóRÁ	ç>Ú”ýSåñŸâÄ&ÿ³µ¢ûà¤ÿ³%Ãöñ</¤ôÇÿgI>›üÏ’á×:òæÖƒú°9nl…éè™ÙÔÿ€¶3+
 endstream
 endobj
-5993 0 obj <<
+5961 0 obj <<
 /Type /Page
-/Contents 5994 0 R
-/Resources 5992 0 R
+/Contents 5962 0 R
+/Resources 5960 0 R
 /MediaBox [0 0 612 792]
-/Parent 5991 0 R
+/Parent 5959 0 R
 >> endobj
-5995 0 obj <<
-/D [5993 0 R /XYZ 100.892 685.529 null]
+5963 0 obj <<
+/D [5961 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1664 0 obj <<
-/D [5993 0 R /XYZ 100.892 622.507 null]
+/D [5961 0 R /XYZ 100.892 622.507 null]
 >> endobj
-5996 0 obj <<
-/D [5993 0 R /XYZ 100.892 605.637 null]
+5964 0 obj <<
+/D [5961 0 R /XYZ 100.892 605.637 null]
 >> endobj
-5997 0 obj <<
-/D [5993 0 R /XYZ 100.892 599.66 null]
+5965 0 obj <<
+/D [5961 0 R /XYZ 100.892 599.66 null]
 >> endobj
-5998 0 obj <<
-/D [5993 0 R /XYZ 100.892 605.936 null]
+5966 0 obj <<
+/D [5961 0 R /XYZ 100.892 605.936 null]
 >> endobj
-5999 0 obj <<
-/D [5993 0 R /XYZ 100.892 593.981 null]
+5967 0 obj <<
+/D [5961 0 R /XYZ 100.892 593.981 null]
 >> endobj
-6000 0 obj <<
-/D [5993 0 R /XYZ 100.892 582.026 null]
+5968 0 obj <<
+/D [5961 0 R /XYZ 100.892 582.026 null]
 >> endobj
-6001 0 obj <<
-/D [5993 0 R /XYZ 100.892 570.07 null]
+5969 0 obj <<
+/D [5961 0 R /XYZ 100.892 570.07 null]
 >> endobj
-6002 0 obj <<
-/D [5993 0 R /XYZ 100.892 558.115 null]
+5970 0 obj <<
+/D [5961 0 R /XYZ 100.892 558.115 null]
 >> endobj
-6003 0 obj <<
-/D [5993 0 R /XYZ 100.892 546.16 null]
+5971 0 obj <<
+/D [5961 0 R /XYZ 100.892 546.16 null]
 >> endobj
-6004 0 obj <<
-/D [5993 0 R /XYZ 100.892 534.205 null]
+5972 0 obj <<
+/D [5961 0 R /XYZ 100.892 534.205 null]
 >> endobj
-6005 0 obj <<
-/D [5993 0 R /XYZ 100.892 522.25 null]
+5973 0 obj <<
+/D [5961 0 R /XYZ 100.892 522.25 null]
 >> endobj
-6006 0 obj <<
-/D [5993 0 R /XYZ 100.892 510.295 null]
+5974 0 obj <<
+/D [5961 0 R /XYZ 100.892 510.295 null]
 >> endobj
-6007 0 obj <<
-/D [5993 0 R /XYZ 100.892 498.339 null]
+5975 0 obj <<
+/D [5961 0 R /XYZ 100.892 498.339 null]
 >> endobj
-6008 0 obj <<
-/D [5993 0 R /XYZ 100.892 486.384 null]
+5976 0 obj <<
+/D [5961 0 R /XYZ 100.892 486.384 null]
 >> endobj
-6009 0 obj <<
-/D [5993 0 R /XYZ 100.892 474.429 null]
+5977 0 obj <<
+/D [5961 0 R /XYZ 100.892 474.429 null]
 >> endobj
-6010 0 obj <<
-/D [5993 0 R /XYZ 100.892 462.474 null]
+5978 0 obj <<
+/D [5961 0 R /XYZ 100.892 462.474 null]
 >> endobj
-6011 0 obj <<
-/D [5993 0 R /XYZ 100.892 450.519 null]
+5979 0 obj <<
+/D [5961 0 R /XYZ 100.892 450.519 null]
 >> endobj
-6012 0 obj <<
-/D [5993 0 R /XYZ 100.892 438.564 null]
+5980 0 obj <<
+/D [5961 0 R /XYZ 100.892 438.564 null]
 >> endobj
-6013 0 obj <<
-/D [5993 0 R /XYZ 100.892 426.608 null]
+5981 0 obj <<
+/D [5961 0 R /XYZ 100.892 426.608 null]
 >> endobj
-6014 0 obj <<
-/D [5993 0 R /XYZ 100.892 414.653 null]
+5982 0 obj <<
+/D [5961 0 R /XYZ 100.892 414.653 null]
 >> endobj
-6015 0 obj <<
-/D [5993 0 R /XYZ 100.892 402.698 null]
+5983 0 obj <<
+/D [5961 0 R /XYZ 100.892 402.698 null]
 >> endobj
-6016 0 obj <<
-/D [5993 0 R /XYZ 100.892 390.743 null]
+5984 0 obj <<
+/D [5961 0 R /XYZ 100.892 390.743 null]
 >> endobj
-6017 0 obj <<
-/D [5993 0 R /XYZ 100.892 378.788 null]
+5985 0 obj <<
+/D [5961 0 R /XYZ 100.892 378.788 null]
 >> endobj
-6018 0 obj <<
-/D [5993 0 R /XYZ 100.892 366.833 null]
+5986 0 obj <<
+/D [5961 0 R /XYZ 100.892 366.833 null]
 >> endobj
-6019 0 obj <<
-/D [5993 0 R /XYZ 100.892 354.877 null]
+5987 0 obj <<
+/D [5961 0 R /XYZ 100.892 354.877 null]
 >> endobj
-6020 0 obj <<
-/D [5993 0 R /XYZ 100.892 342.922 null]
+5988 0 obj <<
+/D [5961 0 R /XYZ 100.892 342.922 null]
 >> endobj
-6021 0 obj <<
-/D [5993 0 R /XYZ 100.892 330.967 null]
+5989 0 obj <<
+/D [5961 0 R /XYZ 100.892 330.967 null]
 >> endobj
-6022 0 obj <<
-/D [5993 0 R /XYZ 100.892 295.102 null]
+5990 0 obj <<
+/D [5961 0 R /XYZ 100.892 295.102 null]
 >> endobj
-6023 0 obj <<
-/D [5993 0 R /XYZ 100.892 283.146 null]
+5991 0 obj <<
+/D [5961 0 R /XYZ 100.892 283.146 null]
 >> endobj
-6024 0 obj <<
-/D [5993 0 R /XYZ 100.892 271.191 null]
+5992 0 obj <<
+/D [5961 0 R /XYZ 100.892 271.191 null]
 >> endobj
-6025 0 obj <<
-/D [5993 0 R /XYZ 100.892 259.236 null]
+5993 0 obj <<
+/D [5961 0 R /XYZ 100.892 259.236 null]
 >> endobj
-6026 0 obj <<
-/D [5993 0 R /XYZ 100.892 247.281 null]
+5994 0 obj <<
+/D [5961 0 R /XYZ 100.892 247.281 null]
 >> endobj
-6027 0 obj <<
-/D [5993 0 R /XYZ 100.892 235.326 null]
+5995 0 obj <<
+/D [5961 0 R /XYZ 100.892 235.326 null]
 >> endobj
-6028 0 obj <<
-/D [5993 0 R /XYZ 100.892 223.371 null]
+5996 0 obj <<
+/D [5961 0 R /XYZ 100.892 223.371 null]
 >> endobj
-6029 0 obj <<
-/D [5993 0 R /XYZ 100.892 211.415 null]
+5997 0 obj <<
+/D [5961 0 R /XYZ 100.892 211.415 null]
 >> endobj
-6030 0 obj <<
-/D [5993 0 R /XYZ 100.892 199.46 null]
+5998 0 obj <<
+/D [5961 0 R /XYZ 100.892 199.46 null]
 >> endobj
-6031 0 obj <<
-/D [5993 0 R /XYZ 100.892 187.505 null]
+5999 0 obj <<
+/D [5961 0 R /XYZ 100.892 187.505 null]
 >> endobj
-5992 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R /F54 1912 0 R /F11 2494 0 R >>
+5960 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R /F54 1912 0 R /F11 2489 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6034 0 obj <<
+6002 0 obj <<
 /Length 2928      
 /Filter /FlateDecode
 >>
@@ -33720,126 +32892,126 @@
 €yåXcLíÙLíAñ˜Ê·«eW”cgªv±¼°»‰ž¥ï.c3é-uݸý…^zvüœþXBy¼<@•?¾ ,lÒûU 9|A˜n÷=¨×Rºá¾H—¦Ê?_ô/ks}î*¢—˜3ú°kðßJ¶ù IÞ
 endstream
 endobj
-6033 0 obj <<
+6001 0 obj <<
 /Type /Page
-/Contents 6034 0 R
-/Resources 6032 0 R
+/Contents 6002 0 R
+/Resources 6000 0 R
 /MediaBox [0 0 612 792]
-/Parent 5991 0 R
+/Parent 5959 0 R
 >> endobj
-6035 0 obj <<
-/D [6033 0 R /XYZ 151.701 685.529 null]
+6003 0 obj <<
+/D [6001 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1665 0 obj <<
-/D [6033 0 R /XYZ 151.701 610.552 null]
+/D [6001 0 R /XYZ 151.701 610.552 null]
 >> endobj
-6036 0 obj <<
-/D [6033 0 R /XYZ 151.701 593.682 null]
+6004 0 obj <<
+/D [6001 0 R /XYZ 151.701 593.682 null]
 >> endobj
-6037 0 obj <<
-/D [6033 0 R /XYZ 151.701 587.704 null]
+6005 0 obj <<
+/D [6001 0 R /XYZ 151.701 587.704 null]
 >> endobj
-6038 0 obj <<
-/D [6033 0 R /XYZ 151.701 593.981 null]
+6006 0 obj <<
+/D [6001 0 R /XYZ 151.701 593.981 null]
 >> endobj
-6039 0 obj <<
-/D [6033 0 R /XYZ 151.701 582.026 null]
+6007 0 obj <<
+/D [6001 0 R /XYZ 151.701 582.026 null]
 >> endobj
-6040 0 obj <<
-/D [6033 0 R /XYZ 151.701 570.07 null]
+6008 0 obj <<
+/D [6001 0 R /XYZ 151.701 570.07 null]
 >> endobj
-6041 0 obj <<
-/D [6033 0 R /XYZ 151.701 558.115 null]
+6009 0 obj <<
+/D [6001 0 R /XYZ 151.701 558.115 null]
 >> endobj
-6042 0 obj <<
-/D [6033 0 R /XYZ 151.701 546.16 null]
+6010 0 obj <<
+/D [6001 0 R /XYZ 151.701 546.16 null]
 >> endobj
-6043 0 obj <<
-/D [6033 0 R /XYZ 151.701 534.205 null]
+6011 0 obj <<
+/D [6001 0 R /XYZ 151.701 534.205 null]
 >> endobj
-6044 0 obj <<
-/D [6033 0 R /XYZ 151.701 522.25 null]
+6012 0 obj <<
+/D [6001 0 R /XYZ 151.701 522.25 null]
 >> endobj
-6045 0 obj <<
-/D [6033 0 R /XYZ 151.701 510.295 null]
+6013 0 obj <<
+/D [6001 0 R /XYZ 151.701 510.295 null]
 >> endobj
-6046 0 obj <<
-/D [6033 0 R /XYZ 151.701 498.339 null]
+6014 0 obj <<
+/D [6001 0 R /XYZ 151.701 498.339 null]
 >> endobj
-6047 0 obj <<
-/D [6033 0 R /XYZ 151.701 486.384 null]
+6015 0 obj <<
+/D [6001 0 R /XYZ 151.701 486.384 null]
 >> endobj
-6048 0 obj <<
-/D [6033 0 R /XYZ 151.701 474.429 null]
+6016 0 obj <<
+/D [6001 0 R /XYZ 151.701 474.429 null]
 >> endobj
-6049 0 obj <<
-/D [6033 0 R /XYZ 151.701 462.474 null]
+6017 0 obj <<
+/D [6001 0 R /XYZ 151.701 462.474 null]
 >> endobj
-6050 0 obj <<
-/D [6033 0 R /XYZ 151.701 450.519 null]
+6018 0 obj <<
+/D [6001 0 R /XYZ 151.701 450.519 null]
 >> endobj
-6051 0 obj <<
-/D [6033 0 R /XYZ 151.701 438.564 null]
+6019 0 obj <<
+/D [6001 0 R /XYZ 151.701 438.564 null]
 >> endobj
-6052 0 obj <<
-/D [6033 0 R /XYZ 151.701 426.608 null]
+6020 0 obj <<
+/D [6001 0 R /XYZ 151.701 426.608 null]
 >> endobj
-6053 0 obj <<
-/D [6033 0 R /XYZ 151.701 414.653 null]
+6021 0 obj <<
+/D [6001 0 R /XYZ 151.701 414.653 null]
 >> endobj
-6054 0 obj <<
-/D [6033 0 R /XYZ 151.701 402.698 null]
+6022 0 obj <<
+/D [6001 0 R /XYZ 151.701 402.698 null]
 >> endobj
-6055 0 obj <<
-/D [6033 0 R /XYZ 151.701 390.743 null]
+6023 0 obj <<
+/D [6001 0 R /XYZ 151.701 390.743 null]
 >> endobj
-6056 0 obj <<
-/D [6033 0 R /XYZ 151.701 378.788 null]
+6024 0 obj <<
+/D [6001 0 R /XYZ 151.701 378.788 null]
 >> endobj
-6057 0 obj <<
-/D [6033 0 R /XYZ 151.701 366.833 null]
+6025 0 obj <<
+/D [6001 0 R /XYZ 151.701 366.833 null]
 >> endobj
-6058 0 obj <<
-/D [6033 0 R /XYZ 151.701 354.877 null]
+6026 0 obj <<
+/D [6001 0 R /XYZ 151.701 354.877 null]
 >> endobj
-6059 0 obj <<
-/D [6033 0 R /XYZ 151.701 342.922 null]
+6027 0 obj <<
+/D [6001 0 R /XYZ 151.701 342.922 null]
 >> endobj
-6060 0 obj <<
-/D [6033 0 R /XYZ 151.701 319.012 null]
+6028 0 obj <<
+/D [6001 0 R /XYZ 151.701 319.012 null]
 >> endobj
-6061 0 obj <<
-/D [6033 0 R /XYZ 151.701 307.057 null]
+6029 0 obj <<
+/D [6001 0 R /XYZ 151.701 307.057 null]
 >> endobj
-6062 0 obj <<
-/D [6033 0 R /XYZ 151.701 295.102 null]
+6030 0 obj <<
+/D [6001 0 R /XYZ 151.701 295.102 null]
 >> endobj
-6063 0 obj <<
-/D [6033 0 R /XYZ 151.701 283.146 null]
+6031 0 obj <<
+/D [6001 0 R /XYZ 151.701 283.146 null]
 >> endobj
-6064 0 obj <<
-/D [6033 0 R /XYZ 151.701 271.191 null]
+6032 0 obj <<
+/D [6001 0 R /XYZ 151.701 271.191 null]
 >> endobj
-6065 0 obj <<
-/D [6033 0 R /XYZ 151.701 259.236 null]
+6033 0 obj <<
+/D [6001 0 R /XYZ 151.701 259.236 null]
 >> endobj
-6066 0 obj <<
-/D [6033 0 R /XYZ 151.701 235.326 null]
+6034 0 obj <<
+/D [6001 0 R /XYZ 151.701 235.326 null]
 >> endobj
-6067 0 obj <<
-/D [6033 0 R /XYZ 151.701 223.371 null]
+6035 0 obj <<
+/D [6001 0 R /XYZ 151.701 223.371 null]
 >> endobj
-6068 0 obj <<
-/D [6033 0 R /XYZ 151.701 211.415 null]
+6036 0 obj <<
+/D [6001 0 R /XYZ 151.701 211.415 null]
 >> endobj
-6069 0 obj <<
-/D [6033 0 R /XYZ 151.701 199.46 null]
+6037 0 obj <<
+/D [6001 0 R /XYZ 151.701 199.46 null]
 >> endobj
-6032 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F4 2008 0 R /F59 1905 0 R /F54 1912 0 R /F11 2494 0 R >>
+6000 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F4 2008 0 R /F59 1905 0 R /F54 1912 0 R /F11 2489 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6072 0 obj <<
+6040 0 obj <<
 /Length 1927      
 /Filter /FlateDecode
 >>
@@ -33871,93 +33043,93 @@
 §¸¢Ê#–BD¡u—ªÛÔyžZËÔÚîp™*Øf¥Ü£ÓŽ 3½©(cVË"/R¢–¹G^¤DI‡Û½Ñhû_¤ŒG²È‹”ÝÚä͝:õasôà#£Þw_·õÿXNfÝ
 endstream
 endobj
-6071 0 obj <<
+6039 0 obj <<
 /Type /Page
-/Contents 6072 0 R
-/Resources 6070 0 R
+/Contents 6040 0 R
+/Resources 6038 0 R
 /MediaBox [0 0 612 792]
-/Parent 5991 0 R
+/Parent 5959 0 R
 >> endobj
-6073 0 obj <<
-/D [6071 0 R /XYZ 100.892 685.529 null]
+6041 0 obj <<
+/D [6039 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1666 0 obj <<
-/D [6071 0 R /XYZ 100.892 532.843 null]
+/D [6039 0 R /XYZ 100.892 532.843 null]
 >> endobj
-6074 0 obj <<
-/D [6071 0 R /XYZ 100.892 515.973 null]
+6042 0 obj <<
+/D [6039 0 R /XYZ 100.892 515.973 null]
 >> endobj
-6075 0 obj <<
-/D [6071 0 R /XYZ 100.892 509.996 null]
+6043 0 obj <<
+/D [6039 0 R /XYZ 100.892 509.996 null]
 >> endobj
-6076 0 obj <<
-/D [6071 0 R /XYZ 100.892 516.272 null]
+6044 0 obj <<
+/D [6039 0 R /XYZ 100.892 516.272 null]
 >> endobj
-6077 0 obj <<
-/D [6071 0 R /XYZ 100.892 504.317 null]
+6045 0 obj <<
+/D [6039 0 R /XYZ 100.892 504.317 null]
 >> endobj
-6078 0 obj <<
-/D [6071 0 R /XYZ 100.892 492.362 null]
+6046 0 obj <<
+/D [6039 0 R /XYZ 100.892 492.362 null]
 >> endobj
-6079 0 obj <<
-/D [6071 0 R /XYZ 100.892 480.407 null]
+6047 0 obj <<
+/D [6039 0 R /XYZ 100.892 480.407 null]
 >> endobj
-6080 0 obj <<
-/D [6071 0 R /XYZ 100.892 468.451 null]
+6048 0 obj <<
+/D [6039 0 R /XYZ 100.892 468.451 null]
 >> endobj
-6081 0 obj <<
-/D [6071 0 R /XYZ 100.892 456.496 null]
+6049 0 obj <<
+/D [6039 0 R /XYZ 100.892 456.496 null]
 >> endobj
-6082 0 obj <<
-/D [6071 0 R /XYZ 100.892 444.541 null]
+6050 0 obj <<
+/D [6039 0 R /XYZ 100.892 444.541 null]
 >> endobj
-6083 0 obj <<
-/D [6071 0 R /XYZ 100.892 432.586 null]
+6051 0 obj <<
+/D [6039 0 R /XYZ 100.892 432.586 null]
 >> endobj
-6084 0 obj <<
-/D [6071 0 R /XYZ 100.892 420.631 null]
+6052 0 obj <<
+/D [6039 0 R /XYZ 100.892 420.631 null]
 >> endobj
-6085 0 obj <<
-/D [6071 0 R /XYZ 100.892 408.676 null]
+6053 0 obj <<
+/D [6039 0 R /XYZ 100.892 408.676 null]
 >> endobj
-6086 0 obj <<
-/D [6071 0 R /XYZ 100.892 396.72 null]
+6054 0 obj <<
+/D [6039 0 R /XYZ 100.892 396.72 null]
 >> endobj
-6087 0 obj <<
-/D [6071 0 R /XYZ 100.892 384.765 null]
+6055 0 obj <<
+/D [6039 0 R /XYZ 100.892 384.765 null]
 >> endobj
-6088 0 obj <<
-/D [6071 0 R /XYZ 100.892 372.81 null]
+6056 0 obj <<
+/D [6039 0 R /XYZ 100.892 372.81 null]
 >> endobj
-6089 0 obj <<
-/D [6071 0 R /XYZ 100.892 360.855 null]
+6057 0 obj <<
+/D [6039 0 R /XYZ 100.892 360.855 null]
 >> endobj
-6090 0 obj <<
-/D [6071 0 R /XYZ 100.892 348.9 null]
+6058 0 obj <<
+/D [6039 0 R /XYZ 100.892 348.9 null]
 >> endobj
-6091 0 obj <<
-/D [6071 0 R /XYZ 100.892 336.945 null]
+6059 0 obj <<
+/D [6039 0 R /XYZ 100.892 336.945 null]
 >> endobj
-6092 0 obj <<
-/D [6071 0 R /XYZ 100.892 324.989 null]
+6060 0 obj <<
+/D [6039 0 R /XYZ 100.892 324.989 null]
 >> endobj
-6093 0 obj <<
-/D [6071 0 R /XYZ 100.892 313.034 null]
+6061 0 obj <<
+/D [6039 0 R /XYZ 100.892 313.034 null]
 >> endobj
-6094 0 obj <<
-/D [6071 0 R /XYZ 100.892 301.079 null]
+6062 0 obj <<
+/D [6039 0 R /XYZ 100.892 301.079 null]
 >> endobj
-6095 0 obj <<
-/D [6071 0 R /XYZ 100.892 289.124 null]
+6063 0 obj <<
+/D [6039 0 R /XYZ 100.892 289.124 null]
 >> endobj
-6096 0 obj <<
-/D [6071 0 R /XYZ 100.892 277.169 null]
+6064 0 obj <<
+/D [6039 0 R /XYZ 100.892 277.169 null]
 >> endobj
-6070 0 obj <<
+6038 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6099 0 obj <<
+6067 0 obj <<
 /Length 1040      
 /Filter /FlateDecode
 >>
@@ -33970,27 +33142,27 @@
 Rž°¹¶ø2·Dwãe7êtK¾dÛÖîôíÀÚ˜#Ê¥ÌÅÃâÙ·¯¶¡Ì6'¦"ÎJÊh-UÅpa3EÓÜ\˜ÕîŠGõßñØoTGm)³Ýo%.jnñòòeaYgÅÆfÌî¯#nÛÖ3’âeM/ÃpfÓ¬*l‘ï_ýhyc'Ȫi¦j°Ç朲ìè@¸baÆ…×Ô¹^~=›žVƒ‰˜°Ò¼ä¨;þlA3¥_üãæ!ðÚÒ7%¥N{œXˆƒóC/¼¾·¡09é›}&1ÛÒØ}±97#/ìûŒmXÛ-ÏëŸ1TÚ‡[>|(ÔÛ³Ó<æ_š fKùx1B2²7ËlAZ3•PøL>tƼ{f“Y]*kRÌÁ#ƒ÷}n‹öùч‚àlÓûÊö%àýx™ÓöKÑ~ãõ~1Â$(þ¢oF+ÿÍ7
 endstream
 endobj
-6098 0 obj <<
+6066 0 obj <<
 /Type /Page
-/Contents 6099 0 R
-/Resources 6097 0 R
+/Contents 6067 0 R
+/Resources 6065 0 R
 /MediaBox [0 0 612 792]
-/Parent 5991 0 R
+/Parent 5959 0 R
 >> endobj
-6100 0 obj <<
-/D [6098 0 R /XYZ 151.701 685.529 null]
+6068 0 obj <<
+/D [6066 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1667 0 obj <<
-/D [6098 0 R /XYZ 151.701 583.479 null]
+/D [6066 0 R /XYZ 151.701 583.479 null]
 >> endobj
-5841 0 obj <<
-/D [6098 0 R /XYZ 151.701 566.609 null]
+5809 0 obj <<
+/D [6066 0 R /XYZ 151.701 566.609 null]
 >> endobj
-6097 0 obj <<
+6065 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6103 0 obj <<
+6071 0 obj <<
 /Length 420       
 /Filter /FlateDecode
 >>
@@ -34002,27 +33174,27 @@
 _²hwf_›Œ«][öðx–É+SMAQù3Ÿ¾D‘ýc
 endstream
 endobj
-6102 0 obj <<
+6070 0 obj <<
 /Type /Page
-/Contents 6103 0 R
-/Resources 6101 0 R
+/Contents 6071 0 R
+/Resources 6069 0 R
 /MediaBox [0 0 612 792]
-/Parent 5991 0 R
+/Parent 5959 0 R
 >> endobj
-6104 0 obj <<
-/D [6102 0 R /XYZ 100.892 685.529 null]
+6072 0 obj <<
+/D [6070 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1668 0 obj <<
-/D [6102 0 R /XYZ 100.892 489.24 null]
+/D [6070 0 R /XYZ 100.892 489.24 null]
 >> endobj
-5842 0 obj <<
-/D [6102 0 R /XYZ 100.892 471.158 null]
+5810 0 obj <<
+/D [6070 0 R /XYZ 100.892 471.158 null]
 >> endobj
-6101 0 obj <<
+6069 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6107 0 obj <<
+6075 0 obj <<
 /Length 1052      
 /Filter /FlateDecode
 >>
@@ -34036,27 +33208,27 @@
 ÖD‘AŸ]´	Óg‘æ#gŸöÐA§à¾Ðž”Íqªç"üy™ÍÊtŽ»7Ìñ…"»›…”ë1¸í$ƒ5-cž+¢ê{óà=¶ýþ×pýû7³md+
 endstream
 endobj
-6106 0 obj <<
+6074 0 obj <<
 /Type /Page
-/Contents 6107 0 R
-/Resources 6105 0 R
+/Contents 6075 0 R
+/Resources 6073 0 R
 /MediaBox [0 0 612 792]
-/Parent 6109 0 R
+/Parent 6077 0 R
 >> endobj
-6108 0 obj <<
-/D [6106 0 R /XYZ 151.701 685.529 null]
+6076 0 obj <<
+/D [6074 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1669 0 obj <<
-/D [6106 0 R /XYZ 151.701 660.623 null]
+/D [6074 0 R /XYZ 151.701 660.623 null]
 >> endobj
-5851 0 obj <<
-/D [6106 0 R /XYZ 151.701 643.753 null]
+5819 0 obj <<
+/D [6074 0 R /XYZ 151.701 643.753 null]
 >> endobj
-6105 0 obj <<
+6073 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6112 0 obj <<
+6080 0 obj <<
 /Length 803       
 /Filter /FlateDecode
 >>
@@ -34070,27 +33242,27 @@
 ”/÷a\q`”	""èh›|«)ÍzØ„æ0/^þ”=ýÞäÄû4OÛ“{Xƒ‘Uð~=l‡?ggE^-v7!×[TdÔ~웡~ا3ŠÒúùÂ3)bZ>þ~?aç "ã¹ÊFÒQ.õ\Õ6ÊSR?蔦3Z¬Ï	Èf*™`»Ÿb1‡n„ªW=é„\ÒÌèRÁ*ŽÆÕCK$SªÜnùïa.‘YB›†î*‹—£h’ç	ç*\!Û˜¤ôaXìÅ}@ç¤JÁ2Ìt5¢&‰ŠV3‘uõ£ÐøãaZÂ]ÿ)?õúÊA×v
 endstream
 endobj
-6111 0 obj <<
+6079 0 obj <<
 /Type /Page
-/Contents 6112 0 R
-/Resources 6110 0 R
+/Contents 6080 0 R
+/Resources 6078 0 R
 /MediaBox [0 0 612 792]
-/Parent 6109 0 R
+/Parent 6077 0 R
 >> endobj
-6113 0 obj <<
-/D [6111 0 R /XYZ 100.892 685.529 null]
+6081 0 obj <<
+/D [6079 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1670 0 obj <<
-/D [6111 0 R /XYZ 100.892 657.999 null]
+/D [6079 0 R /XYZ 100.892 657.999 null]
 >> endobj
-6114 0 obj <<
-/D [6111 0 R /XYZ 100.892 641.129 null]
+6082 0 obj <<
+/D [6079 0 R /XYZ 100.892 641.129 null]
 >> endobj
-6110 0 obj <<
+6078 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6117 0 obj <<
+6085 0 obj <<
 /Length 939       
 /Filter /FlateDecode
 >>
@@ -34106,27 +33278,27 @@
 ”çÙM\ˆÃ¡|5’+ßå¼Ù|!I‘S³áq]SäiÖ\rd'ÔWJ³º	lµnF¼ÿj%qF{ÞÐ(Ï^ig{’uæ[wš%­›%Y&´é"_ï ä0Ó¯7ôêºv½"]—ÉyÜ$“ç?ÛG%ãâ÷-¾úc΋X´(úŠ5´—´¯Kwf:1=U6ÍïFçïK0ðûþ^êñ?0	Ê
 endstream
 endobj
-6116 0 obj <<
+6084 0 obj <<
 /Type /Page
-/Contents 6117 0 R
-/Resources 6115 0 R
+/Contents 6085 0 R
+/Resources 6083 0 R
 /MediaBox [0 0 612 792]
-/Parent 6109 0 R
+/Parent 6077 0 R
 >> endobj
-6118 0 obj <<
-/D [6116 0 R /XYZ 151.701 685.529 null]
+6086 0 obj <<
+/D [6084 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1671 0 obj <<
-/D [6116 0 R /XYZ 151.701 660.623 null]
+/D [6084 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6119 0 obj <<
-/D [6116 0 R /XYZ 151.701 643.753 null]
+6087 0 obj <<
+/D [6084 0 R /XYZ 151.701 643.753 null]
 >> endobj
-6115 0 obj <<
+6083 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6122 0 obj <<
+6090 0 obj <<
 /Length 1025      
 /Filter /FlateDecode
 >>
@@ -34139,27 +33311,27 @@
 *Ú¦”¥ü'ÌÀT9±nºAŠéGø“P§C˜äÚ%Y÷Çõï\±ºQÎoήg§wÖâöözÞwÓjOUçPBùòë^Pï„ßQz	´’7¿«õ”÷i–•[ºw´¿{ñlWÒmúƒÖ¬›Ä³Í—§MÍÜt*G j¤[H_Äήò†ÙJjv8EA+}fÎÉcÅNNĽRuÇÈpB ïà=p»Ø¦C0ìÓÚQ×”Œ\ŒÛ¹fGû¹Ðûùá9vä‡/ùúÐãßæš¹ô
 endstream
 endobj
-6121 0 obj <<
+6089 0 obj <<
 /Type /Page
-/Contents 6122 0 R
-/Resources 6120 0 R
+/Contents 6090 0 R
+/Resources 6088 0 R
 /MediaBox [0 0 612 792]
-/Parent 6109 0 R
+/Parent 6077 0 R
 >> endobj
-6123 0 obj <<
-/D [6121 0 R /XYZ 100.892 685.529 null]
+6091 0 obj <<
+/D [6089 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1672 0 obj <<
-/D [6121 0 R /XYZ 100.892 660.623 null]
+/D [6089 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6124 0 obj <<
-/D [6121 0 R /XYZ 100.892 643.753 null]
+6092 0 obj <<
+/D [6089 0 R /XYZ 100.892 643.753 null]
 >> endobj
-6120 0 obj <<
+6088 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6127 0 obj <<
+6095 0 obj <<
 /Length 738       
 /Filter /FlateDecode
 >>
@@ -34170,27 +33342,27 @@
 B«ê>é÷ÞÌâºchK1û¦Ü`âXü&5w5£/’ýMÌ÷ÞwRã \†Ã‹Ñp²!÷¸Çò„ï5ïè	WãÑÁ®.v¶âùŸšNSŽ¯&“ÿ YðUYªùåŽØyçXHÞØÎQWv»þýà=í
 endstream
 endobj
-6126 0 obj <<
+6094 0 obj <<
 /Type /Page
-/Contents 6127 0 R
-/Resources 6125 0 R
+/Contents 6095 0 R
+/Resources 6093 0 R
 /MediaBox [0 0 612 792]
-/Parent 6109 0 R
+/Parent 6077 0 R
 >> endobj
-6128 0 obj <<
-/D [6126 0 R /XYZ 151.701 685.529 null]
+6096 0 obj <<
+/D [6094 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1673 0 obj <<
-/D [6126 0 R /XYZ 151.701 576.704 null]
+/D [6094 0 R /XYZ 151.701 576.704 null]
 >> endobj
-5879 0 obj <<
-/D [6126 0 R /XYZ 151.701 559.834 null]
+5847 0 obj <<
+/D [6094 0 R /XYZ 151.701 559.834 null]
 >> endobj
-6125 0 obj <<
+6093 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6131 0 obj <<
+6099 0 obj <<
 /Length 807       
 /Filter /FlateDecode
 >>
@@ -34203,27 +33375,27 @@
 !Œ3Ö’½¶ÕÚ7äFÁÍlâx7sþvQkoÝé¦ïcÞ¬V¶¾Å‘êÌœù|6¯™¢ÖÎѱ:Fª…óptDuä6¨FAºüKùˆ×mzãQ©ß NqǐT .1ÍM»2ÌXëÿٍéé‹,Å´Ø{å/¥ú´þZ É$¼ëÏR ð}#¨
 endstream
 endobj
-6130 0 obj <<
+6098 0 obj <<
 /Type /Page
-/Contents 6131 0 R
-/Resources 6129 0 R
+/Contents 6099 0 R
+/Resources 6097 0 R
 /MediaBox [0 0 612 792]
-/Parent 6109 0 R
+/Parent 6077 0 R
 >> endobj
-6132 0 obj <<
-/D [6130 0 R /XYZ 100.892 685.529 null]
+6100 0 obj <<
+/D [6098 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1674 0 obj <<
-/D [6130 0 R /XYZ 100.892 610.577 null]
+/D [6098 0 R /XYZ 100.892 610.577 null]
 >> endobj
-6133 0 obj <<
-/D [6130 0 R /XYZ 100.892 593.707 null]
+6101 0 obj <<
+/D [6098 0 R /XYZ 100.892 593.707 null]
 >> endobj
-6129 0 obj <<
+6097 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6136 0 obj <<
+6104 0 obj <<
 /Length 1297      
 /Filter /FlateDecode
 >>
@@ -34239,27 +33411,27 @@
 AÒp+óÔJጤØ1Y¤òAñÆܿפz{)šËå'oWa4KNö'„µOUž6æ.Ÿ$œ#ʐlÄËI¦íïœ:uI¹²rYÉø˜ŽRô ü%‹pÔφ·(ùtÝ~Reóû?×n6x¢…lò'.ý òL¯ê®ÎIÉ0?i;ºÝµ+y«<,þEz¬‹ïCuñßÐSûðª¹p^HÏ8ø>ôŒƒÿ‰žâ7wíoxÓÓ-Öq_ð^~ÿ=À·
 endstream
 endobj
-6135 0 obj <<
+6103 0 obj <<
 /Type /Page
-/Contents 6136 0 R
-/Resources 6134 0 R
+/Contents 6104 0 R
+/Resources 6102 0 R
 /MediaBox [0 0 612 792]
-/Parent 6139 0 R
+/Parent 6107 0 R
 >> endobj
-6137 0 obj <<
-/D [6135 0 R /XYZ 151.701 685.529 null]
+6105 0 obj <<
+/D [6103 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1675 0 obj <<
-/D [6135 0 R /XYZ 151.701 660.623 null]
+/D [6103 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6138 0 obj <<
-/D [6135 0 R /XYZ 151.701 643.753 null]
+6106 0 obj <<
+/D [6103 0 R /XYZ 151.701 643.753 null]
 >> endobj
-6134 0 obj <<
+6102 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6142 0 obj <<
+6110 0 obj <<
 /Length 915       
 /Filter /FlateDecode
 >>
@@ -34273,27 +33445,27 @@
 š>ç±zLòàEýY°8}:žˆ…4¿êݐ»Ê-ÌváVa,­+²éµ#/ô„UÇõöš„|]áSùK#N7ò¬ð:¤ÒáŽåú’píÂ5{y6˜×Oú‘$%ßnÕ§\ˏnžu÷úŒzï*Œn„E׍üò½`îOʃp|&ïíx<®¹w1Ú¼û°<•AM¥6ôÎÿFÇ«·îE{[Ãÿ8–þ-½m5þ«zã
 endstream
 endobj
-6141 0 obj <<
+6109 0 obj <<
 /Type /Page
-/Contents 6142 0 R
-/Resources 6140 0 R
+/Contents 6110 0 R
+/Resources 6108 0 R
 /MediaBox [0 0 612 792]
-/Parent 6139 0 R
+/Parent 6107 0 R
 >> endobj
-6143 0 obj <<
-/D [6141 0 R /XYZ 100.892 685.529 null]
+6111 0 obj <<
+/D [6109 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1676 0 obj <<
-/D [6141 0 R /XYZ 100.892 624.126 null]
+/D [6109 0 R /XYZ 100.892 624.126 null]
 >> endobj
-6144 0 obj <<
-/D [6141 0 R /XYZ 100.892 607.256 null]
+6112 0 obj <<
+/D [6109 0 R /XYZ 100.892 607.256 null]
 >> endobj
-6140 0 obj <<
+6108 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6147 0 obj <<
+6115 0 obj <<
 /Length 719       
 /Filter /FlateDecode
 >>
@@ -34307,27 +33479,27 @@
 ®EG=8ì^×Ø&¾¸;ö§‹tyԨǿEG¢—ŒC"•ºˆ§hGàâ­DÈKòë§~0K‘ŒQIa¾Æ„m¡®®Ù{6õ0©F}ÈÔ™ñTÌë>m¹>EEá¥1ª„}UG²Ióâ.y*ÿvü·FQ„l,Fˆ¤ÊbÍ%n4qž§ICš:žg.EèŸ{M·Þ†}¦ÀAè ‘~»=ˆº!¢V?ƒëöÃRëÖÐJ„oiªf°vÐñG¬bý/®÷S=qè7M¹è¡à"Î2ñªæïïQoojRýV‹½eÿ³Õ®­Ÿù{[Lž™µkÎöšü!ÏùcéÓ-kސÞìž—WŸ+‹ZÐqéGž«íù,²¬
 endstream
 endobj
-6146 0 obj <<
+6114 0 obj <<
 /Type /Page
-/Contents 6147 0 R
-/Resources 6145 0 R
+/Contents 6115 0 R
+/Resources 6113 0 R
 /MediaBox [0 0 612 792]
-/Parent 6139 0 R
+/Parent 6107 0 R
 >> endobj
-6148 0 obj <<
-/D [6146 0 R /XYZ 151.701 685.529 null]
+6116 0 obj <<
+/D [6114 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1677 0 obj <<
-/D [6146 0 R /XYZ 151.701 529.282 null]
+/D [6114 0 R /XYZ 151.701 529.282 null]
 >> endobj
-6149 0 obj <<
-/D [6146 0 R /XYZ 151.701 512.412 null]
+6117 0 obj <<
+/D [6114 0 R /XYZ 151.701 512.412 null]
 >> endobj
-6145 0 obj <<
+6113 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6152 0 obj <<
+6120 0 obj <<
 /Length 132       
 /Filter /FlateDecode
 >>
@@ -34335,21 +33507,21 @@
 xÚ=Î1Â0†á=¿âÆtHL.É]\D³‰ƒ´Wq©Púÿ±%ÚåÞé>/ppTî×]Q›2 ³D˜ ô€Ä6&„Hh1(Üõ¥	^?Ç©1“>Íñë}”s5¢åÌ~1åÙÛ‚IdSÎÕ¸J/£­Tä&íôþËû:çß}Q_M€&–
 endstream
 endobj
-6151 0 obj <<
+6119 0 obj <<
 /Type /Page
-/Contents 6152 0 R
-/Resources 6150 0 R
+/Contents 6120 0 R
+/Resources 6118 0 R
 /MediaBox [0 0 612 792]
-/Parent 6139 0 R
+/Parent 6107 0 R
 >> endobj
 750 0 obj <<
-/D [6151 0 R /XYZ 100.892 493.914 null]
+/D [6119 0 R /XYZ 100.892 493.914 null]
 >> endobj
-6150 0 obj <<
+6118 0 obj <<
 /Font << /F27 1123 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6155 0 obj <<
+6123 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -34357,17 +33529,17 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-6154 0 obj <<
+6122 0 obj <<
 /Type /Page
-/Contents 6155 0 R
-/Resources 6153 0 R
+/Contents 6123 0 R
+/Resources 6121 0 R
 /MediaBox [0 0 612 792]
-/Parent 6139 0 R
+/Parent 6107 0 R
 >> endobj
-6153 0 obj <<
+6121 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-6158 0 obj <<
+6126 0 obj <<
 /Length 542       
 /Filter /FlateDecode
 >>
@@ -34378,33 +33550,33 @@
 ÎD´u£n£{Zã&¸Ö2BA2ØÃ7@P¢@I„ü;íã—kº‚!‚‘á';´pìÑ¿è<ÅÔß3þòA”/§éZâ¹?~êÛ5WŸ¿I®$áðW¦™ÈI®–/&ãòŸ®ª^ýȆ°
 endstream
 endobj
-6157 0 obj <<
+6125 0 obj <<
 /Type /Page
-/Contents 6158 0 R
-/Resources 6156 0 R
+/Contents 6126 0 R
+/Resources 6124 0 R
 /MediaBox [0 0 612 792]
-/Parent 6139 0 R
+/Parent 6107 0 R
 >> endobj
-6159 0 obj <<
-/D [6157 0 R /XYZ 100.892 685.529 null]
+6127 0 obj <<
+/D [6125 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6160 0 obj <<
-/D [6157 0 R /XYZ 100.892 660.623 null]
+6128 0 obj <<
+/D [6125 0 R /XYZ 100.892 660.623 null]
 >> endobj
 754 0 obj <<
-/D [6157 0 R /XYZ 100.892 589.013 null]
+/D [6125 0 R /XYZ 100.892 589.013 null]
 >> endobj
-6161 0 obj <<
-/D [6157 0 R /XYZ 100.892 589.013 null]
+6129 0 obj <<
+/D [6125 0 R /XYZ 100.892 589.013 null]
 >> endobj
-6162 0 obj <<
-/D [6157 0 R /XYZ 100.892 589.013 null]
+6130 0 obj <<
+/D [6125 0 R /XYZ 100.892 589.013 null]
 >> endobj
-6156 0 obj <<
+6124 0 obj <<
 /Font << /F17 1131 0 R /F15 1133 0 R /F51 1134 0 R /F28 1124 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6165 0 obj <<
+6133 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -34412,20 +33584,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-6164 0 obj <<
+6132 0 obj <<
 /Type /Page
-/Contents 6165 0 R
-/Resources 6163 0 R
+/Contents 6133 0 R
+/Resources 6131 0 R
 /MediaBox [0 0 612 792]
-/Parent 6167 0 R
+/Parent 6135 0 R
 >> endobj
-6166 0 obj <<
-/D [6164 0 R /XYZ 151.701 685.529 null]
+6134 0 obj <<
+/D [6132 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6163 0 obj <<
+6131 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-6170 0 obj <<
+6138 0 obj <<
 /Length 1501      
 /Filter /FlateDecode
 >>
@@ -34439,27 +33611,27 @@
 	\û*¦g1v8xˆ˜‹Ò+¨ã,AÃA€¾aˆ¯%Äép çáíõ÷à Æ–±óÂÈ\l‘ƒ"JRp$£!æ‚'Ö/²ÿÁ’ÂJg‘†{º|‰¡k/cS¿‚&Ô#üf2VŸ:ÑÂ-ãf—È"q-)+>xŒÐ…:p}‘c”¸ÆW›VÌ#ÅWkž|S­€áñ¾„h½‰ ÁîE+áÙdÉÎÊf»ãV# ÉÄUè®:ûLÈÔAWPvp<ÿ‚­#ªI8Ö1Ò¾0¼y‡o$CÓŒ&ÔïVTÃ8Bíˆʸ«7ÅOßxü#µqýæèÞ.cY µ2^å–$­¨%Qw›}y™ÝÅx{*ék§sh@1×­X	E©l5XK	b%Ï(|¦H§wš»GcáÑ<‘PÔðÚT¶‡Ç†6ø¤ã«Òþ¹/ߦååOJZò(…?0È ûyr;ËÒâjüöý)6´|
 endstream
 endobj
-6169 0 obj <<
+6137 0 obj <<
 /Type /Page
-/Contents 6170 0 R
-/Resources 6168 0 R
+/Contents 6138 0 R
+/Resources 6136 0 R
 /MediaBox [0 0 612 792]
-/Parent 6167 0 R
+/Parent 6135 0 R
 >> endobj
-6171 0 obj <<
-/D [6169 0 R /XYZ 100.892 685.529 null]
+6139 0 obj <<
+/D [6137 0 R /XYZ 100.892 685.529 null]
 >> endobj
 758 0 obj <<
-/D [6169 0 R /XYZ 100.892 660.623 null]
+/D [6137 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6172 0 obj <<
-/D [6169 0 R /XYZ 100.892 447.064 null]
+6140 0 obj <<
+/D [6137 0 R /XYZ 100.892 447.064 null]
 >> endobj
-6168 0 obj <<
+6136 0 obj <<
 /Font << /F77 1973 0 R /F17 1131 0 R /F15 1133 0 R /F28 1124 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6175 0 obj <<
+6143 0 obj <<
 /Length 2145      
 /Filter /FlateDecode
 >>
@@ -34489,27 +33661,27 @@
 Œé݆	$„Ã?Y[½9‚þô	r¯
 endstream
 endobj
-6174 0 obj <<
+6142 0 obj <<
 /Type /Page
-/Contents 6175 0 R
-/Resources 6173 0 R
+/Contents 6143 0 R
+/Resources 6141 0 R
 /MediaBox [0 0 612 792]
-/Parent 6167 0 R
+/Parent 6135 0 R
 >> endobj
-6176 0 obj <<
-/D [6174 0 R /XYZ 151.701 685.529 null]
+6144 0 obj <<
+/D [6142 0 R /XYZ 151.701 685.529 null]
 >> endobj
 762 0 obj <<
-/D [6174 0 R /XYZ 151.701 589.153 null]
+/D [6142 0 R /XYZ 151.701 589.153 null]
 >> endobj
-6177 0 obj <<
-/D [6174 0 R /XYZ 151.701 558.922 null]
+6145 0 obj <<
+/D [6142 0 R /XYZ 151.701 558.922 null]
 >> endobj
-6173 0 obj <<
+6141 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F30 1928 0 R /F31 1929 0 R /F61 1976 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6180 0 obj <<
+6148 0 obj <<
 /Length 1850      
 /Filter /FlateDecode
 >>
@@ -34530,21 +33702,21 @@
 6Z¼g`N½Ož-e7ÜÒÚQšG™pªn˜±–ÊÐÇ­µ‰Hž=		v²½_¬‰ŽHÿ/ýÿì´|‡´müaéÉζ‰?îEÈ-2DŒÎú$Ô=È™ ]ðgÙñÝ7ÌúœAH½£䳑RíV/íê(3I™¶¸³jÍÅN›–Z™!¨0ù ÃyÖËê½>l7÷'iæµÊ£Ñ7~áÇ!-Db Ò	e5>–ø¦.µÌLõ”þDSò§Àwù‚hŽò—ööw]lº¢‚»X(PƒxäÒK3¾°Ê‚¹$Y¿iœ|A‚m>õ4zÙóï4HGH³ð¹Î(2ò8 H¹§žõ=õóeswܧ«“àö‡ÍõŸvÿs­Ù
 endstream
 endobj
-6179 0 obj <<
+6147 0 obj <<
 /Type /Page
-/Contents 6180 0 R
-/Resources 6178 0 R
+/Contents 6148 0 R
+/Resources 6146 0 R
 /MediaBox [0 0 612 792]
-/Parent 6167 0 R
+/Parent 6135 0 R
 >> endobj
-6181 0 obj <<
-/D [6179 0 R /XYZ 100.892 685.529 null]
+6149 0 obj <<
+/D [6147 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6178 0 obj <<
+6146 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6184 0 obj <<
+6152 0 obj <<
 /Length 1853      
 /Filter /FlateDecode
 >>
@@ -34566,21 +33738,21 @@
 Â'þ?dþ#c8lþÈ´¶
 endstream
 endobj
-6183 0 obj <<
+6151 0 obj <<
 /Type /Page
-/Contents 6184 0 R
-/Resources 6182 0 R
+/Contents 6152 0 R
+/Resources 6150 0 R
 /MediaBox [0 0 612 792]
-/Parent 6167 0 R
+/Parent 6135 0 R
 >> endobj
-6185 0 obj <<
-/D [6183 0 R /XYZ 151.701 685.529 null]
+6153 0 obj <<
+/D [6151 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6182 0 obj <<
+6150 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6188 0 obj <<
+6156 0 obj <<
 /Length 1828      
 /Filter /FlateDecode
 >>
@@ -34601,27 +33773,27 @@
 î%›G÷¥ý±1‡ßL@KqF6ýü„ãÊGYP$ù}ýÿ÷Ñ…žÊQîÁƒºLÓ_¨›Xˆ Š¼M’Y.nÜP†"x$û/á1wè ËijÜß®ËBôѺíî¼;YP1oôr1XKÂÓ‹  ϧ÷pQ±ï,s¡R_\ÏÙ LFD at vË%sžàæóp¦"ÃS5'¦jp"Æ8Ò\ÏâëÓKQ¸†L¢&^XøÛIöþLÒ·ƒ0¥'Ž;zxa.F„Ã#+Ä8:·KÓ=JNÝÚšfÐJál;*žÌ.–Ð<í9F’E£=û'ãõvõ÷²Ú
 endstream
 endobj
-6187 0 obj <<
+6155 0 obj <<
 /Type /Page
-/Contents 6188 0 R
-/Resources 6186 0 R
+/Contents 6156 0 R
+/Resources 6154 0 R
 /MediaBox [0 0 612 792]
-/Parent 6167 0 R
+/Parent 6135 0 R
 >> endobj
-6189 0 obj <<
-/D [6187 0 R /XYZ 100.892 685.529 null]
+6157 0 obj <<
+/D [6155 0 R /XYZ 100.892 685.529 null]
 >> endobj
 766 0 obj <<
-/D [6187 0 R /XYZ 100.892 196.672 null]
+/D [6155 0 R /XYZ 100.892 196.672 null]
 >> endobj
-6190 0 obj <<
-/D [6187 0 R /XYZ 100.892 167.365 null]
+6158 0 obj <<
+/D [6155 0 R /XYZ 100.892 167.365 null]
 >> endobj
-6186 0 obj <<
+6154 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6193 0 obj <<
+6161 0 obj <<
 /Length 2156      
 /Filter /FlateDecode
 >>
@@ -34648,27 +33820,27 @@
 œ—SQ²Úr¶-܇²"ÒÞ_" òü.­gMF^!ˆ€¿ ÙèÙÜn)·øqm çÃvêÏ¨åçá<>7ÿAZ É
 endstream
 endobj
-6192 0 obj <<
+6160 0 obj <<
 /Type /Page
-/Contents 6193 0 R
-/Resources 6191 0 R
+/Contents 6161 0 R
+/Resources 6159 0 R
 /MediaBox [0 0 612 792]
-/Parent 6196 0 R
+/Parent 6164 0 R
 >> endobj
-6194 0 obj <<
-/D [6192 0 R /XYZ 151.701 685.529 null]
+6162 0 obj <<
+/D [6160 0 R /XYZ 151.701 685.529 null]
 >> endobj
 770 0 obj <<
-/D [6192 0 R /XYZ 151.701 614.677 null]
+/D [6160 0 R /XYZ 151.701 614.677 null]
 >> endobj
-6195 0 obj <<
-/D [6192 0 R /XYZ 151.701 586.8 null]
+6163 0 obj <<
+/D [6160 0 R /XYZ 151.701 586.8 null]
 >> endobj
-6191 0 obj <<
+6159 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6199 0 obj <<
+6167 0 obj <<
 /Length 1818      
 /Filter /FlateDecode
 >>
@@ -34690,27 +33862,27 @@
 æ?T<x!Xoðeó}4ÿ¸¸¶†z,œ)þÀólh„½6Ü­Še°)F~D Ã3™³S-<óš çÜGТ^:ÉýØQ”b7–Ð#¬êï:ó-‚L=‡íV>+{ìî¥è_ygÚ¤ý?•E$^–Ef䎂Ÿª)=U:b6=Wà.4üU¢AžæS¢ŸÞ U)Âl¦€˜w¢ö§·%f`rfÅ	ðz¥™í©Ž"|ÕNc)Ñ5+iYÀ í5ø$ço º*0ÙO[ÕÁ¯=fÒð LŠËd:õÊGåKù©–NhBC²ÌÿSÍ/Ž\ø¸–Ncç¼›¾×ÛÕÿ'[µÿ
 endstream
 endobj
-6198 0 obj <<
+6166 0 obj <<
 /Type /Page
-/Contents 6199 0 R
-/Resources 6197 0 R
+/Contents 6167 0 R
+/Resources 6165 0 R
 /MediaBox [0 0 612 792]
-/Parent 6196 0 R
+/Parent 6164 0 R
 >> endobj
-6200 0 obj <<
-/D [6198 0 R /XYZ 100.892 685.529 null]
+6168 0 obj <<
+/D [6166 0 R /XYZ 100.892 685.529 null]
 >> endobj
 774 0 obj <<
-/D [6198 0 R /XYZ 100.892 464.902 null]
+/D [6166 0 R /XYZ 100.892 464.902 null]
 >> endobj
-6201 0 obj <<
-/D [6198 0 R /XYZ 100.892 439.426 null]
+6169 0 obj <<
+/D [6166 0 R /XYZ 100.892 439.426 null]
 >> endobj
-6197 0 obj <<
+6165 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6205 0 obj <<
+6173 0 obj <<
 /Length 1896      
 /Filter /FlateDecode
 >>
@@ -34734,29 +33906,29 @@
 *¬ûÕüýEF¡˜H²tûH3Öpè.Ê*¢Ü×d‰/m~þÁsœlã—áLC”g¥&jm½š¦Ø=&ñ­¾ÎŽæLùyÒàñ	%Òf>Æðïþ9+R8t}=ŠçÄä¶À<Å)za¦Ê!­˜­k÷Z• 0õªÙ²´ƒÌ0K%”¦—v™€ç6ÜxÃÔÕ;4Ä”ô¹aÁ?GàãÉl¼ëå¿é^R(0ä£îˆ¼œa¨¶ðñç€ìÁ½Êˆo~’¨þå©/<¼’9)†9Ìm‘†PÍG¿¨öÕ>uííW¤Â_C£ËäN(]¶´þ÷ÅÝâoSˆîÝ
 endstream
 endobj
-6204 0 obj <<
+6172 0 obj <<
 /Type /Page
-/Contents 6205 0 R
-/Resources 6203 0 R
+/Contents 6173 0 R
+/Resources 6171 0 R
 /MediaBox [0 0 612 792]
-/Parent 6196 0 R
-/Annots [ 6202 0 R ]
+/Parent 6164 0 R
+/Annots [ 6170 0 R ]
 >> endobj
-6202 0 obj <<
+6170 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.523 435.566 438.092 447.255]
 /Subtype /Link
 /A << /S /GoTo /D (ch10expl) >>
 >> endobj
-6206 0 obj <<
-/D [6204 0 R /XYZ 151.701 685.529 null]
+6174 0 obj <<
+/D [6172 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6203 0 obj <<
+6171 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F54 1912 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6210 0 obj <<
+6178 0 obj <<
 /Length 2017      
 /Filter /FlateDecode
 >>
@@ -34775,21 +33947,21 @@
  QKkÿ§VâÖî*¼ª}šôªnVúÇ	mAÁEµ{“;€Î‘ÄÌM§“q£“•ž÷à)´Ö•S³‘(‘$ÀXû:ôaÑ]OüNŒòfÔ?Öe·PCÐ7ÃKöë`æð5憏jÅÜ„¸³ñI=ô(÷úây€¹}–¿I“êV³ý¿ø`;©M#«Å¹´”ÿÒù„„ºj¿Ï·¨å]íó"üFí· èµ;w	@Ôÿy²÷…*Å»^Z‡ù·è-çÅ6fèäù,Gxó+Tê“¿ýøá;à;£O©-÷øò>öxTÙw(ÆbyªÑk !©©d^æÜO|œ,enYÁÙòŠyüþqó'Ý7Ø
 endstream
 endobj
-6209 0 obj <<
+6177 0 obj <<
 /Type /Page
-/Contents 6210 0 R
-/Resources 6208 0 R
+/Contents 6178 0 R
+/Resources 6176 0 R
 /MediaBox [0 0 612 792]
-/Parent 6196 0 R
+/Parent 6164 0 R
 >> endobj
-6211 0 obj <<
-/D [6209 0 R /XYZ 100.892 685.529 null]
+6179 0 obj <<
+/D [6177 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6208 0 obj <<
+6176 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6216 0 obj <<
+6184 0 obj <<
 /Length 2265      
 /Filter /FlateDecode
 >>
@@ -34818,34 +33990,34 @@
 ý¯Ú‡Q‰oí»È¾}Bnü-#ÃP
 endstream
 endobj
-6215 0 obj <<
+6183 0 obj <<
 /Type /Page
-/Contents 6216 0 R
-/Resources 6214 0 R
+/Contents 6184 0 R
+/Resources 6182 0 R
 /MediaBox [0 0 612 792]
-/Parent 6196 0 R
-/Annots [ 6212 0 R 6213 0 R ]
+/Parent 6164 0 R
+/Annots [ 6180 0 R 6181 0 R ]
 >> endobj
-6212 0 obj <<
+6180 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 127.92 425.939 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://support.microsoft.com/default.aspx?kbid=321733)>>
 >> endobj
-6213 0 obj <<
+6181 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 440.559 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.tangent-systems.com/support/delayedwrite.html)>>
 >> endobj
-6217 0 obj <<
-/D [6215 0 R /XYZ 151.701 685.529 null]
+6185 0 obj <<
+/D [6183 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6214 0 obj <<
+6182 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R /F30 1928 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6220 0 obj <<
+6188 0 obj <<
 /Length 1980      
 /Filter /FlateDecode
 >>
@@ -34868,21 +34040,21 @@
 ¨6aùãRÇV¿ Ø‘>zê|cõˆ£‹_Š5l¡*	ã+\±|-½‡+UgÒfV˜_÷˜Ëøýq÷?Ê)
 endstream
 endobj
-6219 0 obj <<
+6187 0 obj <<
 /Type /Page
-/Contents 6220 0 R
-/Resources 6218 0 R
+/Contents 6188 0 R
+/Resources 6186 0 R
 /MediaBox [0 0 612 792]
-/Parent 6196 0 R
+/Parent 6164 0 R
 >> endobj
-6221 0 obj <<
-/D [6219 0 R /XYZ 100.892 685.529 null]
+6189 0 obj <<
+/D [6187 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6218 0 obj <<
+6186 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6225 0 obj <<
+6193 0 obj <<
 /Length 1960      
 /Filter /FlateDecode
 >>
@@ -34903,27 +34075,27 @@
 b–—ð鞆‘›P ~{}¤Òs`{Ï‹jùºŠÆí÷Ó2¾ßoþ¾</
 endstream
 endobj
-6224 0 obj <<
+6192 0 obj <<
 /Type /Page
-/Contents 6225 0 R
-/Resources 6223 0 R
+/Contents 6193 0 R
+/Resources 6191 0 R
 /MediaBox [0 0 612 792]
-/Parent 6228 0 R
+/Parent 6196 0 R
 >> endobj
-6226 0 obj <<
-/D [6224 0 R /XYZ 151.701 685.529 null]
+6194 0 obj <<
+/D [6192 0 R /XYZ 151.701 685.529 null]
 >> endobj
 778 0 obj <<
-/D [6224 0 R /XYZ 151.701 548.422 null]
+/D [6192 0 R /XYZ 151.701 548.422 null]
 >> endobj
-6227 0 obj <<
-/D [6224 0 R /XYZ 151.701 520.37 null]
+6195 0 obj <<
+/D [6192 0 R /XYZ 151.701 520.37 null]
 >> endobj
-6223 0 obj <<
+6191 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6233 0 obj <<
+6201 0 obj <<
 /Length 2304      
 /Filter /FlateDecode
 >>
@@ -34951,46 +34123,46 @@
 ÌÒÉg"“ç³üŸ§ž¿8uU–BI-T	±gëûª_ÇYY®e,ÓDî]cÿjÃ}U¨X½8¸«íÄ餀o‘ïüº•„a:ñZ¯ñyrñ^<ƒ‰ÿ@œìV
 endstream
 endobj
-6232 0 obj <<
+6200 0 obj <<
 /Type /Page
-/Contents 6233 0 R
-/Resources 6231 0 R
+/Contents 6201 0 R
+/Resources 6199 0 R
 /MediaBox [0 0 612 792]
-/Parent 6228 0 R
-/Annots [ 6222 0 R 6229 0 R 6235 0 R 6230 0 R ]
+/Parent 6196 0 R
+/Annots [ 6190 0 R 6197 0 R 6203 0 R 6198 0 R ]
 >> endobj
-6222 0 obj <<
+6190 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 160.797 266.862 173.748]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.pdc.kth.se/heimdal/)>>
 >> endobj
-6229 0 obj <<
+6197 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 151.133 460.543 162.789]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.idg.com.sg/idgwww.nsf/0/5DDA8D153A7505A748256BAB000D992A?OpenDocument)>>
 >> endobj
-6235 0 obj <<
+6203 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [99.895 138.879 158.375 149.639]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.idg.com.sg/idgwww.nsf/0/5DDA8D153A7505A748256BAB000D992A?OpenDocument)>>
 >> endobj
-6230 0 obj <<
+6198 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [153.671 116.961 362.785 128.966]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://199.105.191.226/Man/2699/020430msdoj/)>>
 >> endobj
-6234 0 obj <<
-/D [6232 0 R /XYZ 100.892 685.529 null]
+6202 0 obj <<
+/D [6200 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6231 0 obj <<
+6199 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F30 1928 0 R /F51 1134 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R /F61 1976 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6239 0 obj <<
+6207 0 obj <<
 /Length 1844      
 /Filter /FlateDecode
 >>
@@ -35009,46 +34181,46 @@
 žŠ ƒ°È©Ìe$Ò2iÅ"½éóåI­"4eìÁù׍†»OÅrz‰¼˜ÿZÇñôínw>Ÿ£îÒ?CÇ»ƒžõ­éü5´=öw¦§ä²ëݸûÒf8n~ Bk™âE/êNoÉo D"¹ü?ùnµc] ü?çh›’
 endstream
 endobj
-6238 0 obj <<
+6206 0 obj <<
 /Type /Page
-/Contents 6239 0 R
-/Resources 6237 0 R
+/Contents 6207 0 R
+/Resources 6205 0 R
 /MediaBox [0 0 612 792]
-/Parent 6228 0 R
-/Annots [ 6236 0 R 6242 0 R ]
+/Parent 6196 0 R
+/Annots [ 6204 0 R 6210 0 R ]
 >> endobj
-6236 0 obj <<
+6204 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 129.215 511.352 140.871]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.microsoft.com/technet/itsolutions/interop/mgmt/kerberos.asp)>>
 >> endobj
-6242 0 obj <<
+6210 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [150.705 116.961 166.819 127.182]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.microsoft.com/technet/itsolutions/interop/mgmt/kerberos.asp)>>
 >> endobj
-6240 0 obj <<
-/D [6238 0 R /XYZ 151.701 685.529 null]
+6208 0 obj <<
+/D [6206 0 R /XYZ 151.701 685.529 null]
 >> endobj
 782 0 obj <<
-/D [6238 0 R /XYZ 151.701 292.257 null]
+/D [6206 0 R /XYZ 151.701 292.257 null]
 >> endobj
-6207 0 obj <<
-/D [6238 0 R /XYZ 151.701 260.447 null]
+6175 0 obj <<
+/D [6206 0 R /XYZ 151.701 260.447 null]
 >> endobj
 786 0 obj <<
-/D [6238 0 R /XYZ 151.701 212.331 null]
+/D [6206 0 R /XYZ 151.701 212.331 null]
 >> endobj
-6241 0 obj <<
-/D [6238 0 R /XYZ 151.701 187.978 null]
+6209 0 obj <<
+/D [6206 0 R /XYZ 151.701 187.978 null]
 >> endobj
-6237 0 obj <<
+6205 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F30 1928 0 R /F17 1131 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6245 0 obj <<
+6213 0 obj <<
 /Length 2160      
 /Filter /FlateDecode
 >>
@@ -35078,48 +34250,48 @@
 †à
 endstream
 endobj
-6244 0 obj <<
+6212 0 obj <<
 /Type /Page
-/Contents 6245 0 R
-/Resources 6243 0 R
+/Contents 6213 0 R
+/Resources 6211 0 R
 /MediaBox [0 0 612 792]
-/Parent 6228 0 R
+/Parent 6196 0 R
 >> endobj
-6246 0 obj <<
-/D [6244 0 R /XYZ 100.892 685.529 null]
+6214 0 obj <<
+/D [6212 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6247 0 obj <<
-/D [6244 0 R /XYZ 100.892 633.387 null]
+6215 0 obj <<
+/D [6212 0 R /XYZ 100.892 633.387 null]
 >> endobj
-6248 0 obj <<
-/D [6244 0 R /XYZ 100.892 572.26 null]
+6216 0 obj <<
+/D [6212 0 R /XYZ 100.892 572.26 null]
 >> endobj
-6249 0 obj <<
-/D [6244 0 R /XYZ 100.892 538.837 null]
+6217 0 obj <<
+/D [6212 0 R /XYZ 100.892 538.837 null]
 >> endobj
-6250 0 obj <<
-/D [6244 0 R /XYZ 100.892 409.358 null]
+6218 0 obj <<
+/D [6212 0 R /XYZ 100.892 409.358 null]
 >> endobj
-6251 0 obj <<
-/D [6244 0 R /XYZ 100.892 375.329 null]
+6219 0 obj <<
+/D [6212 0 R /XYZ 100.892 375.329 null]
 >> endobj
-6252 0 obj <<
-/D [6244 0 R /XYZ 100.892 328.357 null]
+6220 0 obj <<
+/D [6212 0 R /XYZ 100.892 328.357 null]
 >> endobj
-6253 0 obj <<
-/D [6244 0 R /XYZ 100.892 226.582 null]
+6221 0 obj <<
+/D [6212 0 R /XYZ 100.892 226.582 null]
 >> endobj
 790 0 obj <<
-/D [6244 0 R /XYZ 100.892 179.269 null]
+/D [6212 0 R /XYZ 100.892 179.269 null]
 >> endobj
-6254 0 obj <<
-/D [6244 0 R /XYZ 100.892 155.274 null]
+6222 0 obj <<
+/D [6212 0 R /XYZ 100.892 155.274 null]
 >> endobj
-6243 0 obj <<
+6211 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F17 1131 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6257 0 obj <<
+6225 0 obj <<
 /Length 1483      
 /Filter /FlateDecode
 >>
@@ -35134,39 +34306,39 @@
 Xº¥GéÚ‹­/öÒÉ2øp­n”Ü“žqò˜müKÙ…gæAö]؁S”½ØòÝèRúI©Åxm&oçÁض8Ƨ…¸~L€3õСsA‡@"åZm‘þÏ	ô.1(êƒÓ[6ßO[½ZFý…¨|¹22ON9ÿª»Bxoƒªÿ…‡ßÿS¡5]%œÒ0£—ÍbúÂßÁÿ zF×~
 endstream
 endobj
-6256 0 obj <<
+6224 0 obj <<
 /Type /Page
-/Contents 6257 0 R
-/Resources 6255 0 R
+/Contents 6225 0 R
+/Resources 6223 0 R
 /MediaBox [0 0 612 792]
-/Parent 6228 0 R
+/Parent 6196 0 R
 >> endobj
-6258 0 obj <<
-/D [6256 0 R /XYZ 151.701 685.529 null]
+6226 0 obj <<
+/D [6224 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6259 0 obj <<
-/D [6256 0 R /XYZ 151.701 449.466 null]
+6227 0 obj <<
+/D [6224 0 R /XYZ 151.701 449.466 null]
 >> endobj
-6260 0 obj <<
-/D [6256 0 R /XYZ 151.701 425.407 null]
+6228 0 obj <<
+/D [6224 0 R /XYZ 151.701 425.407 null]
 >> endobj
-6261 0 obj <<
-/D [6256 0 R /XYZ 151.701 401.348 null]
+6229 0 obj <<
+/D [6224 0 R /XYZ 151.701 401.348 null]
 >> endobj
-6262 0 obj <<
-/D [6256 0 R /XYZ 151.701 375.168 null]
+6230 0 obj <<
+/D [6224 0 R /XYZ 151.701 375.168 null]
 >> endobj
 794 0 obj <<
-/D [6256 0 R /XYZ 151.701 329.389 null]
+/D [6224 0 R /XYZ 151.701 329.389 null]
 >> endobj
-6263 0 obj <<
-/D [6256 0 R /XYZ 151.701 299.684 null]
+6231 0 obj <<
+/D [6224 0 R /XYZ 151.701 299.684 null]
 >> endobj
-6255 0 obj <<
+6223 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6266 0 obj <<
+6234 0 obj <<
 /Length 1873      
 /Filter /FlateDecode
 >>
@@ -35191,22 +34363,22 @@
 ™ã›
 endstream
 endobj
-6265 0 obj <<
+6233 0 obj <<
 /Type /Page
-/Contents 6266 0 R
-/Resources 6264 0 R
+/Contents 6234 0 R
+/Resources 6232 0 R
 /MediaBox [0 0 612 792]
-/Parent 6228 0 R
+/Parent 6196 0 R
 >> endobj
-6267 0 obj <<
-/D [6265 0 R /XYZ 100.892 685.529 null]
+6235 0 obj <<
+/D [6233 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6264 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F89 2333 0 R /F73 2334 0 R /F60 1917 0 R /F91 3440 0 R /F54 1912 0 R /F15 1133 0 R /F59 1905 0 R >>
-/XObject << /Im3 2328 0 R >>
+6232 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F89 2330 0 R /F73 2331 0 R /F60 1917 0 R /F91 3431 0 R /F54 1912 0 R /F15 1133 0 R /F59 1905 0 R >>
+/XObject << /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6270 0 obj <<
+6238 0 obj <<
 /Length 1525      
 /Filter /FlateDecode
 >>
@@ -35225,21 +34397,21 @@
 LêkqÏ&ÿâ>»­ñ/‡"¥oŠk+ÊŽ¦<6Ê¢a€Vð@ßü“‘ã…ÙuÇ‚tä2§í鍧÷}ioºEǺ†B}é¶ïÜB‚Ù–N5 7^Ì0W·Fã6“@“{ïZÚ‘¨†º?6ÁVï\GO}·Ÿsƒ€›N/ÔBK}êˆÍ™pP{M¸Nˆ¨‘ÊûÉ#Áåbj8C{AßÞ-î¢y$âËN0•4²ö2²°í­G™í´Óp\M÷ʺu™f¼c–ýK±þÍly21…œÿ­jñîNù?°˜PÓ.‰ÿ·§?ÊÓþÿˆÞ7:
 endstream
 endobj
-6269 0 obj <<
+6237 0 obj <<
 /Type /Page
-/Contents 6270 0 R
-/Resources 6268 0 R
+/Contents 6238 0 R
+/Resources 6236 0 R
 /MediaBox [0 0 612 792]
-/Parent 6272 0 R
+/Parent 6240 0 R
 >> endobj
-6271 0 obj <<
-/D [6269 0 R /XYZ 151.701 685.529 null]
+6239 0 obj <<
+/D [6237 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6268 0 obj <<
+6236 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6275 0 obj <<
+6243 0 obj <<
 /Length 2031      
 /Filter /FlateDecode
 >>
@@ -35265,27 +34437,27 @@
 æ½/W«sÛÛx€~Ðù?kþû~÷_lqJŽ
 endstream
 endobj
-6274 0 obj <<
+6242 0 obj <<
 /Type /Page
-/Contents 6275 0 R
-/Resources 6273 0 R
+/Contents 6243 0 R
+/Resources 6241 0 R
 /MediaBox [0 0 612 792]
-/Parent 6272 0 R
+/Parent 6240 0 R
 >> endobj
-6276 0 obj <<
-/D [6274 0 R /XYZ 100.892 685.529 null]
+6244 0 obj <<
+/D [6242 0 R /XYZ 100.892 685.529 null]
 >> endobj
 798 0 obj <<
-/D [6274 0 R /XYZ 100.892 660.623 null]
+/D [6242 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6277 0 obj <<
-/D [6274 0 R /XYZ 100.892 644.027 null]
+6245 0 obj <<
+/D [6242 0 R /XYZ 100.892 644.027 null]
 >> endobj
-6273 0 obj <<
+6241 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R /F60 1917 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6280 0 obj <<
+6248 0 obj <<
 /Length 2098      
 /Filter /FlateDecode
 >>
@@ -35303,42 +34475,42 @@
 }¦ €J÷ÌrQæ—þ^‚í*rxdXH³_PLúîW«ÊWÅ`Lbá;0šxr…,œdáxB¾±Z&i³3]×®L&UVÝ ¥¡õ×ÄY’ց}o[®ƒ[	ôžü·%ÀN«í¾”8¼z²ä¢ö N¹aÀ/â—¯På¹7Ãڝe“Ôß¼²„×zV¾9Ùځ^†_=£’IQgß°@ñà*r„ |Ë‹ãF΋’oDfV&u^ß"±ø± ˜£(“ãÌÃnâ)tNܘyxVž¨ E±Çî)솬ûéUÀõÎos­·Ûo"Ë_Ülp$§—ïøæË H¼½!©Áínn	÷™ü/z(¡®—n¦¹y@"O¯†QMøõ í¶üÌpýÈa¼(2¾V“tê3›Ú7Xc<a>­>ӜŸ2¯B“)ó24wXDØÔ9ÈòJ­5µ0ùMóŽSª¼ŸÀ¥…ÀôtI,ÄwÒÃJ;Ÿ8»ä=>¾c¢‰G¯vôÓ ´uH¹<’ù×GN¾çArpá»}̸^ðrô{¦µ#{c”tÝ·›ˆî7]Ê폙ó)ˆƒÊU×A† ì’ú•{táûþñî_Æk
 endstream
 endobj
-6279 0 obj <<
+6247 0 obj <<
 /Type /Page
-/Contents 6280 0 R
-/Resources 6278 0 R
+/Contents 6248 0 R
+/Resources 6246 0 R
 /MediaBox [0 0 612 792]
-/Parent 6272 0 R
+/Parent 6240 0 R
 >> endobj
-6281 0 obj <<
-/D [6279 0 R /XYZ 151.701 685.529 null]
+6249 0 obj <<
+/D [6247 0 R /XYZ 151.701 685.529 null]
 >> endobj
 802 0 obj <<
-/D [6279 0 R /XYZ 151.701 590.496 null]
+/D [6247 0 R /XYZ 151.701 590.496 null]
 >> endobj
-6282 0 obj <<
-/D [6279 0 R /XYZ 151.701 563.286 null]
+6250 0 obj <<
+/D [6247 0 R /XYZ 151.701 563.286 null]
 >> endobj
-6283 0 obj <<
-/D [6279 0 R /XYZ 151.701 356.948 null]
+6251 0 obj <<
+/D [6247 0 R /XYZ 151.701 356.948 null]
 >> endobj
-6284 0 obj <<
-/D [6279 0 R /XYZ 151.701 308.177 null]
+6252 0 obj <<
+/D [6247 0 R /XYZ 151.701 308.177 null]
 >> endobj
-6285 0 obj <<
-/D [6279 0 R /XYZ 151.701 287.11 null]
+6253 0 obj <<
+/D [6247 0 R /XYZ 151.701 287.11 null]
 >> endobj
-6286 0 obj <<
-/D [6279 0 R /XYZ 151.701 265.437 null]
+6254 0 obj <<
+/D [6247 0 R /XYZ 151.701 265.437 null]
 >> endobj
-6287 0 obj <<
-/D [6279 0 R /XYZ 151.701 216.666 null]
+6255 0 obj <<
+/D [6247 0 R /XYZ 151.701 216.666 null]
 >> endobj
-6278 0 obj <<
+6246 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6290 0 obj <<
+6258 0 obj <<
 /Length 1692      
 /Filter /FlateDecode
 >>
@@ -35354,30 +34526,30 @@
 ÏDYw¸ã¸ù“¾ÿÈVõ‡ýµ_Èçó|šÞɾðÂÿcH‹ø܆Ò"ñî$È_6(a£tlNÈDÜ\àŸEÂ[ªŸ«ˆqÇ~±=ª@»LããÆs߸ðC=²,韊ÕÎÈ£®p׌¥Sð/Š"0ªýV។³Øß—»Õùw·
 endstream
 endobj
-6289 0 obj <<
+6257 0 obj <<
 /Type /Page
-/Contents 6290 0 R
-/Resources 6288 0 R
+/Contents 6258 0 R
+/Resources 6256 0 R
 /MediaBox [0 0 612 792]
-/Parent 6272 0 R
+/Parent 6240 0 R
 >> endobj
-6291 0 obj <<
-/D [6289 0 R /XYZ 100.892 685.529 null]
+6259 0 obj <<
+/D [6257 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6292 0 obj <<
-/D [6289 0 R /XYZ 100.892 356.235 null]
+6260 0 obj <<
+/D [6257 0 R /XYZ 100.892 356.235 null]
 >> endobj
-6293 0 obj <<
-/D [6289 0 R /XYZ 100.892 236.413 null]
+6261 0 obj <<
+/D [6257 0 R /XYZ 100.892 236.413 null]
 >> endobj
-6294 0 obj <<
-/D [6289 0 R /XYZ 100.892 155.118 null]
+6262 0 obj <<
+/D [6257 0 R /XYZ 100.892 155.118 null]
 >> endobj
-6288 0 obj <<
+6256 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6297 0 obj <<
+6265 0 obj <<
 /Length 1706      
 /Filter /FlateDecode
 >>
@@ -35400,42 +34572,42 @@
  °‡Í>¼¥Í[paß­¨VàŸìuM´çA ¡$@’œÈö+ü ÿŽ8
 endstream
 endobj
-6296 0 obj <<
+6264 0 obj <<
 /Type /Page
-/Contents 6297 0 R
-/Resources 6295 0 R
+/Contents 6265 0 R
+/Resources 6263 0 R
 /MediaBox [0 0 612 792]
-/Parent 6272 0 R
+/Parent 6240 0 R
 >> endobj
-6298 0 obj <<
-/D [6296 0 R /XYZ 151.701 685.529 null]
+6266 0 obj <<
+/D [6264 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6299 0 obj <<
-/D [6296 0 R /XYZ 151.701 601.489 null]
+6267 0 obj <<
+/D [6264 0 R /XYZ 151.701 601.489 null]
 >> endobj
-6300 0 obj <<
-/D [6296 0 R /XYZ 151.701 450.944 null]
+6268 0 obj <<
+/D [6264 0 R /XYZ 151.701 450.944 null]
 >> endobj
 806 0 obj <<
-/D [6296 0 R /XYZ 151.701 372.106 null]
+/D [6264 0 R /XYZ 151.701 372.106 null]
 >> endobj
-6301 0 obj <<
-/D [6296 0 R /XYZ 151.701 345.493 null]
+6269 0 obj <<
+/D [6264 0 R /XYZ 151.701 345.493 null]
 >> endobj
 810 0 obj <<
-/D [6296 0 R /XYZ 151.701 166.912 null]
+/D [6264 0 R /XYZ 151.701 166.912 null]
 >> endobj
-6302 0 obj <<
-/D [6296 0 R /XYZ 151.701 140.19 null]
+6270 0 obj <<
+/D [6264 0 R /XYZ 151.701 140.19 null]
 >> endobj
-6303 0 obj <<
-/D [6296 0 R /XYZ 151.701 140.19 null]
+6271 0 obj <<
+/D [6264 0 R /XYZ 151.701 140.19 null]
 >> endobj
-6295 0 obj <<
+6263 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6306 0 obj <<
+6274 0 obj <<
 /Length 2104      
 /Filter /FlateDecode
 >>
@@ -35464,39 +34636,39 @@
 Aˆí±²Á̶ä†! Žp£ûãùê+©M³˜Éï?áå©åHÿ”ÊZ~Àå¢2+m;-ÊhÖ_¯Ûnø~¸¹øöµÓö
 endstream
 endobj
-6305 0 obj <<
+6273 0 obj <<
 /Type /Page
-/Contents 6306 0 R
-/Resources 6304 0 R
+/Contents 6274 0 R
+/Resources 6272 0 R
 /MediaBox [0 0 612 792]
-/Parent 6272 0 R
+/Parent 6240 0 R
 >> endobj
-6307 0 obj <<
-/D [6305 0 R /XYZ 100.892 685.529 null]
+6275 0 obj <<
+/D [6273 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6308 0 obj <<
-/D [6305 0 R /XYZ 100.892 619.838 null]
+6276 0 obj <<
+/D [6273 0 R /XYZ 100.892 619.838 null]
 >> endobj
-6309 0 obj <<
-/D [6305 0 R /XYZ 100.892 575.634 null]
+6277 0 obj <<
+/D [6273 0 R /XYZ 100.892 575.634 null]
 >> endobj
-6310 0 obj <<
-/D [6305 0 R /XYZ 100.892 435.373 null]
+6278 0 obj <<
+/D [6273 0 R /XYZ 100.892 435.373 null]
 >> endobj
-6311 0 obj <<
-/D [6305 0 R /XYZ 100.892 390.562 null]
+6279 0 obj <<
+/D [6273 0 R /XYZ 100.892 390.562 null]
 >> endobj
-6312 0 obj <<
-/D [6305 0 R /XYZ 100.892 278.612 null]
+6280 0 obj <<
+/D [6273 0 R /XYZ 100.892 278.612 null]
 >> endobj
-6313 0 obj <<
-/D [6305 0 R /XYZ 100.892 166.056 null]
+6281 0 obj <<
+/D [6273 0 R /XYZ 100.892 166.056 null]
 >> endobj
-6304 0 obj <<
+6272 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F17 1131 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6316 0 obj <<
+6284 0 obj <<
 /Length 2150      
 /Filter /FlateDecode
 >>
@@ -35529,48 +34701,48 @@
 Ír6yÇ™µ|1Fÿ¨âQŸ=H­ž Ó:uæøÉ‹ç4ûïêöâ/KMÃ
 endstream
 endobj
-6315 0 obj <<
+6283 0 obj <<
 /Type /Page
-/Contents 6316 0 R
-/Resources 6314 0 R
+/Contents 6284 0 R
+/Resources 6282 0 R
 /MediaBox [0 0 612 792]
-/Parent 6325 0 R
+/Parent 6293 0 R
 >> endobj
-6317 0 obj <<
-/D [6315 0 R /XYZ 151.701 685.529 null]
+6285 0 obj <<
+/D [6283 0 R /XYZ 151.701 685.529 null]
 >> endobj
 814 0 obj <<
-/D [6315 0 R /XYZ 151.701 660.623 null]
+/D [6283 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6318 0 obj <<
-/D [6315 0 R /XYZ 151.701 641.288 null]
+6286 0 obj <<
+/D [6283 0 R /XYZ 151.701 641.288 null]
 >> endobj
-6319 0 obj <<
-/D [6315 0 R /XYZ 151.701 565.494 null]
+6287 0 obj <<
+/D [6283 0 R /XYZ 151.701 565.494 null]
 >> endobj
-6320 0 obj <<
-/D [6315 0 R /XYZ 151.701 464.71 null]
+6288 0 obj <<
+/D [6283 0 R /XYZ 151.701 464.71 null]
 >> endobj
-6321 0 obj <<
-/D [6315 0 R /XYZ 151.701 359.381 null]
+6289 0 obj <<
+/D [6283 0 R /XYZ 151.701 359.381 null]
 >> endobj
 818 0 obj <<
-/D [6315 0 R /XYZ 151.701 307.256 null]
+/D [6283 0 R /XYZ 151.701 307.256 null]
 >> endobj
-6322 0 obj <<
-/D [6315 0 R /XYZ 151.701 279.088 null]
+6290 0 obj <<
+/D [6283 0 R /XYZ 151.701 279.088 null]
 >> endobj
-6323 0 obj <<
-/D [6315 0 R /XYZ 151.701 190.048 null]
+6291 0 obj <<
+/D [6283 0 R /XYZ 151.701 190.048 null]
 >> endobj
-6324 0 obj <<
-/D [6315 0 R /XYZ 151.701 168.135 null]
+6292 0 obj <<
+/D [6283 0 R /XYZ 151.701 168.135 null]
 >> endobj
-6314 0 obj <<
+6282 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6328 0 obj <<
+6296 0 obj <<
 /Length 899       
 /Filter /FlateDecode
 >>
@@ -35584,24 +34756,24 @@
 ‰´#îÎ_‡MXñ£ûOOÈËÒþ’(ÍhõÚýþÊ…zó)š¾ð?ó'(1mU
 endstream
 endobj
-6327 0 obj <<
+6295 0 obj <<
 /Type /Page
-/Contents 6328 0 R
-/Resources 6326 0 R
+/Contents 6296 0 R
+/Resources 6294 0 R
 /MediaBox [0 0 612 792]
-/Parent 6325 0 R
+/Parent 6293 0 R
 >> endobj
-6329 0 obj <<
-/D [6327 0 R /XYZ 100.892 685.529 null]
+6297 0 obj <<
+/D [6295 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6330 0 obj <<
-/D [6327 0 R /XYZ 100.892 464.491 null]
+6298 0 obj <<
+/D [6295 0 R /XYZ 100.892 464.491 null]
 >> endobj
-6326 0 obj <<
+6294 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6333 0 obj <<
+6301 0 obj <<
 /Length 2036      
 /Filter /FlateDecode
 >>
@@ -35621,30 +34793,30 @@
 B€/ý§V7ÇuI$ƒ2ûßf/$wÀȬ+‚e$Ÿ÷’Xߐ¾P—ñIò…²×&ÙÜë‹Åx­^\UI, U­6‰ÃÈ’ÎOïX,–㈺Ò×2¥ŽâÿETé’$Áö›\g,Å3uÑI®óÓŠ„˜”c‚CÈpÐ!åéØìý´Ïëwˆõ/yíÊõ Q‚­Âø¢–²;"Û·jO¯žréT\[–œ/JLFð”RÊ%â ÔŠ+³C$i¡oÚ*PO%T5Ó(Q9JäU „x8òd´–_tÔÓÐWnÐÎM}i£qåáš'Lèj:u¿Y<ˆ¹`ð½Ör¤(Óá b©á»x31Ça‚M½4ž0‡¼î…Îp94€cŒ]-$Ðó]zsµ3dF~åÄ%UOüJ‡Ñoÿ¹{ÿêžkÞôE¸ž‡QãÛ'×WR\.^Iqb·íóz“A€tì՚ѣܢ8ά›ðH³Ex0L»N;|OŽeÿcŽQU„-Å•AB¯?FH–¬ð	÷ô\…ÍÐÉÖà ÏÓÉ0ºótÑ] 'KéæVÑèjì(_&éáry6h[|]o‚O¼Ä ^€‹¹¶àø Eür)tðؑ׆ÃNE¯ÊÄ5bà^èÖ&Hy2#Þ\nv{ƒH½Ÿ7 ÇG%ñÐÛÈú‹ÂâÅÄ`„âý9X	§îšø3€˜ßšO“þ*>æïÛÇÍ_Nœ$
 endstream
 endobj
-6332 0 obj <<
+6300 0 obj <<
 /Type /Page
-/Contents 6333 0 R
-/Resources 6331 0 R
+/Contents 6301 0 R
+/Resources 6299 0 R
 /MediaBox [0 0 612 792]
-/Parent 6325 0 R
+/Parent 6293 0 R
 >> endobj
-6334 0 obj <<
-/D [6332 0 R /XYZ 151.701 685.529 null]
+6302 0 obj <<
+/D [6300 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6335 0 obj <<
-/D [6332 0 R /XYZ 151.701 636.115 null]
+6303 0 obj <<
+/D [6300 0 R /XYZ 151.701 636.115 null]
 >> endobj
 822 0 obj <<
-/D [6332 0 R /XYZ 151.701 528.271 null]
+/D [6300 0 R /XYZ 151.701 528.271 null]
 >> endobj
-6336 0 obj <<
-/D [6332 0 R /XYZ 151.701 500.697 null]
+6304 0 obj <<
+/D [6300 0 R /XYZ 151.701 500.697 null]
 >> endobj
-6331 0 obj <<
+6299 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R /F17 1131 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6339 0 obj <<
+6307 0 obj <<
 /Length 1698      
 /Filter /FlateDecode
 >>
@@ -35662,30 +34834,30 @@
 È9²X P’ªÅ8²(¯.nÈ„JÊlµˆ~R‹qéHd#\E«ïÿz®¶ÆµíNS=Jó =±1“­TWµ®Ë–,‹ê›6æw"ð»EO;•ÁûX-NêvaçúŽ<'Œ0¶]\b»8§Ùé3Iãrë)Šãöܾɨ+ªÜ8Žœñ…ÝØ'’=µ[÷k4õ~Å(Ï„í	$´Å¶!…¹¢¬v¾öº;6†Æ¡n¹ªËzû¸L#ß9yÝÄ1LU·HöªEÑao‰Ã½¾wJ–8@Œøí,"QO‰lW4ö¥/q¢ªú¶(±¨w8kÔ„_戴e3:žeí¤úLŸLbFí¾®¶ƒÅ=šXŽ÷q¶IWóâaœþ@œÉ	=†R`$«v]¨-‹@M,ÅÀ"Ò¯–"ö_ÿÖ’DÖÌßçM»EôÄÇ+‰GÂ>I˜¤òi·iË´áý÷Ízñtá
 endstream
 endobj
-6338 0 obj <<
+6306 0 obj <<
 /Type /Page
-/Contents 6339 0 R
-/Resources 6337 0 R
+/Contents 6307 0 R
+/Resources 6305 0 R
 /MediaBox [0 0 612 792]
-/Parent 6325 0 R
+/Parent 6293 0 R
 >> endobj
-6340 0 obj <<
-/D [6338 0 R /XYZ 100.892 685.529 null]
+6308 0 obj <<
+/D [6306 0 R /XYZ 100.892 685.529 null]
 >> endobj
 826 0 obj <<
-/D [6338 0 R /XYZ 100.892 660.623 null]
+/D [6306 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6341 0 obj <<
-/D [6338 0 R /XYZ 100.892 639.842 null]
+6309 0 obj <<
+/D [6306 0 R /XYZ 100.892 639.842 null]
 >> endobj
-6342 0 obj <<
-/D [6338 0 R /XYZ 100.892 612.376 null]
+6310 0 obj <<
+/D [6306 0 R /XYZ 100.892 612.376 null]
 >> endobj
-6337 0 obj <<
+6305 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R /F51 1134 0 R /F60 1917 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6345 0 obj <<
+6313 0 obj <<
 /Length 2045      
 /Filter /FlateDecode
 >>
@@ -35703,21 +34875,21 @@
 Úlîé>-ÿԍÞ#¦'ðŠù y㠁9¸?~_è!‹"ÌÄøXýðÓúîîÍ*|ýóëÙþ1‡®&»üÓ bÞü<TøªÃ*íÈ»Ã3²±šâÿg(@†Aì@–ÿªrß×ëÅ LÖø]
 endstream
 endobj
-6344 0 obj <<
+6312 0 obj <<
 /Type /Page
-/Contents 6345 0 R
-/Resources 6343 0 R
+/Contents 6313 0 R
+/Resources 6311 0 R
 /MediaBox [0 0 612 792]
-/Parent 6325 0 R
+/Parent 6293 0 R
 >> endobj
-6346 0 obj <<
-/D [6344 0 R /XYZ 151.701 685.529 null]
+6314 0 obj <<
+/D [6312 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6343 0 obj <<
+6311 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R /F51 1134 0 R /F60 1917 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6349 0 obj <<
+6317 0 obj <<
 /Length 1174      
 /Filter /FlateDecode
 >>
@@ -35737,21 +34909,21 @@
 ?rÿÿ«§Y
 endstream
 endobj
-6348 0 obj <<
+6316 0 obj <<
 /Type /Page
-/Contents 6349 0 R
-/Resources 6347 0 R
+/Contents 6317 0 R
+/Resources 6315 0 R
 /MediaBox [0 0 612 792]
-/Parent 6325 0 R
+/Parent 6293 0 R
 >> endobj
-6350 0 obj <<
-/D [6348 0 R /XYZ 100.892 685.529 null]
+6318 0 obj <<
+/D [6316 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6347 0 obj <<
+6315 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F51 1134 0 R /F15 1133 0 R /F59 1905 0 R /F60 1917 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6353 0 obj <<
+6321 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -35759,20 +34931,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-6352 0 obj <<
+6320 0 obj <<
 /Type /Page
-/Contents 6353 0 R
-/Resources 6351 0 R
+/Contents 6321 0 R
+/Resources 6319 0 R
 /MediaBox [0 0 612 792]
-/Parent 6355 0 R
+/Parent 6323 0 R
 >> endobj
-6354 0 obj <<
-/D [6352 0 R /XYZ 151.701 685.529 null]
+6322 0 obj <<
+/D [6320 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6351 0 obj <<
+6319 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-6358 0 obj <<
+6326 0 obj <<
 /Length 1474      
 /Filter /FlateDecode
 >>
@@ -35790,33 +34962,33 @@
 ÊÝO›@_h»÷Ì“±òÉÆÑ[EÑŒ‘Ç0þ>Áºðâ;ý+zùZTç¼)ª"ð¿^#þ/…w5/Êg‹àïÐß*’uÜ
 endstream
 endobj
-6357 0 obj <<
+6325 0 obj <<
 /Type /Page
-/Contents 6358 0 R
-/Resources 6356 0 R
+/Contents 6326 0 R
+/Resources 6324 0 R
 /MediaBox [0 0 612 792]
-/Parent 6355 0 R
+/Parent 6323 0 R
 >> endobj
-6359 0 obj <<
-/D [6357 0 R /XYZ 100.892 685.529 null]
+6327 0 obj <<
+/D [6325 0 R /XYZ 100.892 685.529 null]
 >> endobj
 830 0 obj <<
-/D [6357 0 R /XYZ 100.892 660.623 null]
+/D [6325 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6360 0 obj <<
-/D [6357 0 R /XYZ 100.892 472.605 null]
+6328 0 obj <<
+/D [6325 0 R /XYZ 100.892 472.605 null]
 >> endobj
 834 0 obj <<
-/D [6357 0 R /XYZ 100.892 290.394 null]
+/D [6325 0 R /XYZ 100.892 290.394 null]
 >> endobj
-6361 0 obj <<
-/D [6357 0 R /XYZ 100.892 261.404 null]
+6329 0 obj <<
+/D [6325 0 R /XYZ 100.892 261.404 null]
 >> endobj
-6356 0 obj <<
+6324 0 obj <<
 /Font << /F77 1973 0 R /F17 1131 0 R /F15 1133 0 R /F28 1124 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6364 0 obj <<
+6332 0 obj <<
 /Length 1976      
 /Filter /FlateDecode
 >>
@@ -35845,27 +35017,27 @@
 ª9ŽBiÿ«ââÿ@@­où§Ð#”Avþzóÿ7¸K[þãÌã/‡§ÿ6—úÁ
 endstream
 endobj
-6363 0 obj <<
+6331 0 obj <<
 /Type /Page
-/Contents 6364 0 R
-/Resources 6362 0 R
+/Contents 6332 0 R
+/Resources 6330 0 R
 /MediaBox [0 0 612 792]
-/Parent 6355 0 R
+/Parent 6323 0 R
 >> endobj
-6365 0 obj <<
-/D [6363 0 R /XYZ 151.701 685.529 null]
+6333 0 obj <<
+/D [6331 0 R /XYZ 151.701 685.529 null]
 >> endobj
 838 0 obj <<
-/D [6363 0 R /XYZ 151.701 545.787 null]
+/D [6331 0 R /XYZ 151.701 545.787 null]
 >> endobj
-6366 0 obj <<
-/D [6363 0 R /XYZ 151.701 515.358 null]
+6334 0 obj <<
+/D [6331 0 R /XYZ 151.701 515.358 null]
 >> endobj
-6362 0 obj <<
+6330 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6369 0 obj <<
+6337 0 obj <<
 /Length 1637      
 /Filter /FlateDecode
 >>
@@ -35881,33 +35053,33 @@
 C±ÝÝ“w·?Ãß *l¡ÆA«ÐceO®	¬³îußµÍÙ=xn4绀ҿsiñ€ÿ«;õôŠÃpþiö©$àñRvšž×=„㥨˜_솫ÎæßçÙE›ø¤Öwø€˜¾  5]?Ìù‡- ÆÀÔÅ"Ý„­ÕpÄŒ.»]ÿíñEñDãs|¥µTÿôA_CŸ“L»ß¶º¶Y×íØÔ_ˆt_èˆþ	̝H
 endstream
 endobj
-6368 0 obj <<
+6336 0 obj <<
 /Type /Page
-/Contents 6369 0 R
-/Resources 6367 0 R
+/Contents 6337 0 R
+/Resources 6335 0 R
 /MediaBox [0 0 612 792]
-/Parent 6355 0 R
+/Parent 6323 0 R
 >> endobj
-6370 0 obj <<
-/D [6368 0 R /XYZ 100.892 685.529 null]
+6338 0 obj <<
+/D [6336 0 R /XYZ 100.892 685.529 null]
 >> endobj
 842 0 obj <<
-/D [6368 0 R /XYZ 100.892 660.623 null]
+/D [6336 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6371 0 obj <<
-/D [6368 0 R /XYZ 100.892 641.209 null]
+6339 0 obj <<
+/D [6336 0 R /XYZ 100.892 641.209 null]
 >> endobj
 846 0 obj <<
-/D [6368 0 R /XYZ 100.892 474.872 null]
+/D [6336 0 R /XYZ 100.892 474.872 null]
 >> endobj
-6372 0 obj <<
-/D [6368 0 R /XYZ 100.892 450.678 null]
+6340 0 obj <<
+/D [6336 0 R /XYZ 100.892 450.678 null]
 >> endobj
-6367 0 obj <<
+6335 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6375 0 obj <<
+6343 0 obj <<
 /Length 1427      
 /Filter /FlateDecode
 >>
@@ -35926,33 +35098,33 @@
 ü¦Jr9>™¼qÏyošéÛ	Ç€û¬{󍽹ËM0­ªuï¼Ì#üÚƒâlžFoâ:®¹¿Íó’
 endstream
 endobj
-6374 0 obj <<
+6342 0 obj <<
 /Type /Page
-/Contents 6375 0 R
-/Resources 6373 0 R
+/Contents 6343 0 R
+/Resources 6341 0 R
 /MediaBox [0 0 612 792]
-/Parent 6355 0 R
+/Parent 6323 0 R
 >> endobj
-6376 0 obj <<
-/D [6374 0 R /XYZ 151.701 685.529 null]
+6344 0 obj <<
+/D [6342 0 R /XYZ 151.701 685.529 null]
 >> endobj
 850 0 obj <<
-/D [6374 0 R /XYZ 151.701 660.623 null]
+/D [6342 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6377 0 obj <<
-/D [6374 0 R /XYZ 151.701 644.027 null]
+6345 0 obj <<
+/D [6342 0 R /XYZ 151.701 644.027 null]
 >> endobj
 854 0 obj <<
-/D [6374 0 R /XYZ 151.701 534.13 null]
+/D [6342 0 R /XYZ 151.701 534.13 null]
 >> endobj
-6378 0 obj <<
-/D [6374 0 R /XYZ 151.701 503.981 null]
+6346 0 obj <<
+/D [6342 0 R /XYZ 151.701 503.981 null]
 >> endobj
-6373 0 obj <<
+6341 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F17 1131 0 R /F15 1133 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6381 0 obj <<
+6349 0 obj <<
 /Length 1172      
 /Filter /FlateDecode
 >>
@@ -35963,28 +35135,28 @@
 a¨ ´jz–³Ž}þÂQ¬öëî8o~xòÀÒ÷Ó›žfÁˆß‡ß\@7+S¼iëšÞ«§'äô…A÷/HÉz
 endstream
 endobj
-6380 0 obj <<
+6348 0 obj <<
 /Type /Page
-/Contents 6381 0 R
-/Resources 6379 0 R
+/Contents 6349 0 R
+/Resources 6347 0 R
 /MediaBox [0 0 612 792]
-/Parent 6355 0 R
+/Parent 6323 0 R
 >> endobj
-6382 0 obj <<
-/D [6380 0 R /XYZ 100.892 685.529 null]
+6350 0 obj <<
+/D [6348 0 R /XYZ 100.892 685.529 null]
 >> endobj
 858 0 obj <<
-/D [6380 0 R /XYZ 100.892 370.058 null]
+/D [6348 0 R /XYZ 100.892 370.058 null]
 >> endobj
-6383 0 obj <<
-/D [6380 0 R /XYZ 100.892 340.917 null]
+6351 0 obj <<
+/D [6348 0 R /XYZ 100.892 340.917 null]
 >> endobj
-6379 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F89 2333 0 R /F73 2334 0 R /F17 1131 0 R /F59 1905 0 R >>
-/XObject << /Im3 2328 0 R >>
+6347 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F89 2330 0 R /F73 2331 0 R /F17 1131 0 R /F59 1905 0 R >>
+/XObject << /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6387 0 obj <<
+6355 0 obj <<
 /Length 2237      
 /Filter /FlateDecode
 >>
@@ -36004,48 +35176,48 @@
 ysDu>vÞ;®Òx¸å•%w–U>o¢Æõæáâ¿nÌ®Å
 endstream
 endobj
-6386 0 obj <<
+6354 0 obj <<
 /Type /Page
-/Contents 6387 0 R
-/Resources 6385 0 R
+/Contents 6355 0 R
+/Resources 6353 0 R
 /MediaBox [0 0 612 792]
-/Parent 6393 0 R
-/Annots [ 6384 0 R 6391 0 R ]
+/Parent 6361 0 R
+/Annots [ 6352 0 R 6359 0 R ]
 >> endobj
-6384 0 obj <<
+6352 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [477.996 382.565 511.352 394.254]
 /Subtype /Link
 /A << /S /GoTo /D (ch10-krb5conf) >>
 >> endobj
-6391 0 obj <<
+6359 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.523 369.015 279.55 380.705]
 /Subtype /Link
 /A << /S /GoTo /D (ch10-krb5conf) >>
 >> endobj
-6388 0 obj <<
-/D [6386 0 R /XYZ 151.701 685.529 null]
+6356 0 obj <<
+/D [6354 0 R /XYZ 151.701 685.529 null]
 >> endobj
 862 0 obj <<
-/D [6386 0 R /XYZ 151.701 660.623 null]
+/D [6354 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6389 0 obj <<
-/D [6386 0 R /XYZ 151.701 641.703 null]
+6357 0 obj <<
+/D [6354 0 R /XYZ 151.701 641.703 null]
 >> endobj
-6390 0 obj <<
-/D [6386 0 R /XYZ 151.701 417.662 null]
+6358 0 obj <<
+/D [6354 0 R /XYZ 151.701 417.662 null]
 >> endobj
-6392 0 obj <<
-/D [6386 0 R /XYZ 151.701 357.675 null]
+6360 0 obj <<
+/D [6354 0 R /XYZ 151.701 357.675 null]
 >> endobj
-6385 0 obj <<
+6353 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6397 0 obj <<
+6365 0 obj <<
 /Length 1126      
 /Filter /FlateDecode
 >>
@@ -36056,36 +35228,36 @@
 e+éàøH™]2}еėʉl9!–ãѸëÞÞ02è°&sQ,‡Ñ'—g¸5/€´ö×M¦³>pcbÅƍHÛN¥ÇÔ¦3mgœ©Œåt7º]ÑÓ.;ñQ­@%è©ŽÕL8ÜrÏïÕcFKûO#q Û˜GÏ7[z3ÊÉFht ’‚QÊTj-ŒVš  Îÿ´Êö-Ô'Œî1ûoÖ®Àâ
 endstream
 endobj
-6396 0 obj <<
+6364 0 obj <<
 /Type /Page
-/Contents 6397 0 R
-/Resources 6395 0 R
+/Contents 6365 0 R
+/Resources 6363 0 R
 /MediaBox [0 0 612 792]
-/Parent 6393 0 R
+/Parent 6361 0 R
 >> endobj
-6398 0 obj <<
-/D [6396 0 R /XYZ 100.892 685.529 null]
+6366 0 obj <<
+/D [6364 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6399 0 obj <<
-/D [6396 0 R /XYZ 100.892 633.993 null]
+6367 0 obj <<
+/D [6364 0 R /XYZ 100.892 633.993 null]
 >> endobj
 1678 0 obj <<
-/D [6396 0 R /XYZ 100.892 412.821 null]
+/D [6364 0 R /XYZ 100.892 412.821 null]
 >> endobj
-6394 0 obj <<
-/D [6396 0 R /XYZ 100.892 394.739 null]
+6362 0 obj <<
+/D [6364 0 R /XYZ 100.892 394.739 null]
 >> endobj
 866 0 obj <<
-/D [6396 0 R /XYZ 100.892 178.957 null]
+/D [6364 0 R /XYZ 100.892 178.957 null]
 >> endobj
-6400 0 obj <<
-/D [6396 0 R /XYZ 100.892 152.987 null]
+6368 0 obj <<
+/D [6364 0 R /XYZ 100.892 152.987 null]
 >> endobj
-6395 0 obj <<
+6363 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6406 0 obj <<
+6374 0 obj <<
 /Length 1823      
 /Filter /FlateDecode
 >>
@@ -36099,53 +35271,53 @@
 ÆÿýŠ9ù\j]v©¸‡q<}u{»OÌ×qÖ»û«g•pØãÃë¡ež›.ƒ‹Á“Ò‹¦ùO³zÿh4ÀRjmoOçµ"O™¾Ô\,ì¿è^ÿBdÿhË
 endstream
 endobj
-6405 0 obj <<
+6373 0 obj <<
 /Type /Page
-/Contents 6406 0 R
-/Resources 6404 0 R
+/Contents 6374 0 R
+/Resources 6372 0 R
 /MediaBox [0 0 612 792]
-/Parent 6393 0 R
-/Annots [ 6403 0 R 6401 0 R 6402 0 R ]
+/Parent 6361 0 R
+/Annots [ 6371 0 R 6369 0 R 6370 0 R ]
 >> endobj
-6403 0 obj <<
+6371 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [245.25 436.907 320.425 448.597]
 /Subtype /Link
 /A << /S /GoTo /D (ch10-smbconf) >>
 >> endobj
-6401 0 obj <<
+6369 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 127.92 270.598 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://ftp.samba.org)>>
 >> endobj
-6402 0 obj <<
+6370 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 312.964 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(ftp://ftp.sernet.de/pub/samba)>>
 >> endobj
-6407 0 obj <<
-/D [6405 0 R /XYZ 151.701 685.529 null]
+6375 0 obj <<
+/D [6373 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6408 0 obj <<
-/D [6405 0 R /XYZ 151.701 633.993 null]
+6376 0 obj <<
+/D [6373 0 R /XYZ 151.701 633.993 null]
 >> endobj
-6409 0 obj <<
-/D [6405 0 R /XYZ 151.701 490.648 null]
+6377 0 obj <<
+/D [6373 0 R /XYZ 151.701 490.648 null]
 >> endobj
-6410 0 obj <<
-/D [6405 0 R /XYZ 151.701 437.904 null]
+6378 0 obj <<
+/D [6373 0 R /XYZ 151.701 437.904 null]
 >> endobj
-6411 0 obj <<
-/D [6405 0 R /XYZ 151.701 298.132 null]
+6379 0 obj <<
+/D [6373 0 R /XYZ 151.701 298.132 null]
 >> endobj
-6404 0 obj <<
+6372 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F30 1928 0 R /F59 1905 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6415 0 obj <<
+6383 0 obj <<
 /Length 1028      
 /Filter /FlateDecode
 >>
@@ -36155,27 +35327,27 @@
 ¾¾ÇR%L;Ø·rk,ÌÄ:øwÛåëEpз^yßJL°÷RPÜ?añ®ÂÃ:Q̬xÔ3ÀE‚%»P%Ûþñ|l¸R(ž,-™A!WJýd°4D Ñ~/x²ž‰–«yŸÍ‘ƒúßû´þàÃÿÆÃÒ
 endstream
 endobj
-6414 0 obj <<
+6382 0 obj <<
 /Type /Page
-/Contents 6415 0 R
-/Resources 6413 0 R
+/Contents 6383 0 R
+/Resources 6381 0 R
 /MediaBox [0 0 612 792]
-/Parent 6393 0 R
+/Parent 6361 0 R
 >> endobj
-6416 0 obj <<
-/D [6414 0 R /XYZ 100.892 685.529 null]
+6384 0 obj <<
+/D [6382 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6417 0 obj <<
-/D [6414 0 R /XYZ 100.892 660.623 null]
+6385 0 obj <<
+/D [6382 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6418 0 obj <<
-/D [6414 0 R /XYZ 100.892 156.086 null]
+6386 0 obj <<
+/D [6382 0 R /XYZ 100.892 156.086 null]
 >> endobj
-6413 0 obj <<
+6381 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6422 0 obj <<
+6390 0 obj <<
 /Length 1369      
 /Filter /FlateDecode
 >>
@@ -36193,38 +35365,38 @@
 ¢¹+@†Ô(oÎx®$L,75—ÆÁ·ÙýJwðÚ<ÄÖ!ëëË3G at z?Ûò—´,d1ê/:ý?ôZ­nÿŸ}Õ*x,5àã,7}@˜úPpê<gö(úÜýNcÐ ¼_¯Á	ô]{°h7b¯Úµÿ°ÈƒüI"è®ÖPœÉ8Ãr‡£Í†V¢iMk¶ðà?‚RFxßÍ4#4¨2ŠqÐ34éµ(áYýç´ŸŠcl)Ö“âfš·ÁŽ¤¿_ÆPfkeµPûµe	^—웏¿LŸwpשW™Ÿ¤œ\B£ñƒôôÖÏP,æ~gÇnf%u±j¡yUº¨ü¢k·s‘`töìôz‹5t4ÒÑ	TށëQØ‹Úuhpm£ÃÄœL½±q^K>Pøö>m Qqù š}mËp‹?ÙæNÏãäß¿~£
 endstream
 endobj
-6421 0 obj <<
+6389 0 obj <<
 /Type /Page
-/Contents 6422 0 R
-/Resources 6420 0 R
+/Contents 6390 0 R
+/Resources 6388 0 R
 /MediaBox [0 0 612 792]
-/Parent 6393 0 R
-/Annots [ 6419 0 R ]
+/Parent 6361 0 R
+/Annots [ 6387 0 R ]
 >> endobj
-6419 0 obj <<
+6387 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [251.069 118.128 326.243 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (ch10-etcnsscfg) >>
 >> endobj
-6423 0 obj <<
-/D [6421 0 R /XYZ 151.701 685.529 null]
+6391 0 obj <<
+/D [6389 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6424 0 obj <<
-/D [6421 0 R /XYZ 151.701 525.023 null]
+6392 0 obj <<
+/D [6389 0 R /XYZ 151.701 525.023 null]
 >> endobj
 870 0 obj <<
-/D [6421 0 R /XYZ 151.701 218.998 null]
+/D [6389 0 R /XYZ 151.701 218.998 null]
 >> endobj
-6425 0 obj <<
-/D [6421 0 R /XYZ 151.701 189.558 null]
+6393 0 obj <<
+/D [6389 0 R /XYZ 151.701 189.558 null]
 >> endobj
-6420 0 obj <<
+6388 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6429 0 obj <<
+6397 0 obj <<
 /Length 2867      
 /Filter /FlateDecode
 >>
@@ -36261,102 +35433,102 @@
 ïvß­Ö¯…ZpÝÛ_nßqÉο|™¾æbê-L°`«E1#ÇÖ&“v»nÍ&›ÊÅj>ŸŒGu_«,ûØkÕ¨?üÂùÑ´7YW"áîÍbTc Ú3·‘4ž<Ž&Ì‘QµM¡Ú(ôêî ´Æ•ÿêEbB1堏ßá-¢W£ûY5âòÙÓxÙ<àÄ‚úˆžÖÜó¸B‚Ô\M†üàn5ž43µ Í6àúkVΫÙCÕZˆƒ#Ø”ÿa½\6
 endstream
 endobj
-6428 0 obj <<
+6396 0 obj <<
 /Type /Page
-/Contents 6429 0 R
-/Resources 6427 0 R
+/Contents 6397 0 R
+/Resources 6395 0 R
 /MediaBox [0 0 612 792]
-/Parent 6393 0 R
+/Parent 6361 0 R
 >> endobj
-6430 0 obj <<
-/D [6428 0 R /XYZ 100.892 685.529 null]
+6398 0 obj <<
+/D [6396 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1679 0 obj <<
-/D [6428 0 R /XYZ 100.892 660.623 null]
+/D [6396 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6412 0 obj <<
-/D [6428 0 R /XYZ 100.892 642.541 null]
+6380 0 obj <<
+/D [6396 0 R /XYZ 100.892 642.541 null]
 >> endobj
-6431 0 obj <<
-/D [6428 0 R /XYZ 100.892 636.563 null]
+6399 0 obj <<
+/D [6396 0 R /XYZ 100.892 636.563 null]
 >> endobj
-6432 0 obj <<
-/D [6428 0 R /XYZ 100.892 642.839 null]
+6400 0 obj <<
+/D [6396 0 R /XYZ 100.892 642.839 null]
 >> endobj
-6433 0 obj <<
-/D [6428 0 R /XYZ 100.892 630.884 null]
+6401 0 obj <<
+/D [6396 0 R /XYZ 100.892 630.884 null]
 >> endobj
-6434 0 obj <<
-/D [6428 0 R /XYZ 100.892 618.929 null]
+6402 0 obj <<
+/D [6396 0 R /XYZ 100.892 618.929 null]
 >> endobj
-6435 0 obj <<
-/D [6428 0 R /XYZ 100.892 606.974 null]
+6403 0 obj <<
+/D [6396 0 R /XYZ 100.892 606.974 null]
 >> endobj
-6436 0 obj <<
-/D [6428 0 R /XYZ 100.892 595.019 null]
+6404 0 obj <<
+/D [6396 0 R /XYZ 100.892 595.019 null]
 >> endobj
-6437 0 obj <<
-/D [6428 0 R /XYZ 100.892 583.063 null]
+6405 0 obj <<
+/D [6396 0 R /XYZ 100.892 583.063 null]
 >> endobj
-6438 0 obj <<
-/D [6428 0 R /XYZ 100.892 571.108 null]
+6406 0 obj <<
+/D [6396 0 R /XYZ 100.892 571.108 null]
 >> endobj
-6439 0 obj <<
-/D [6428 0 R /XYZ 100.892 559.153 null]
+6407 0 obj <<
+/D [6396 0 R /XYZ 100.892 559.153 null]
 >> endobj
-6440 0 obj <<
-/D [6428 0 R /XYZ 100.892 535.243 null]
+6408 0 obj <<
+/D [6396 0 R /XYZ 100.892 535.243 null]
 >> endobj
-6441 0 obj <<
-/D [6428 0 R /XYZ 100.892 523.288 null]
+6409 0 obj <<
+/D [6396 0 R /XYZ 100.892 523.288 null]
 >> endobj
-6442 0 obj <<
-/D [6428 0 R /XYZ 100.892 511.332 null]
+6410 0 obj <<
+/D [6396 0 R /XYZ 100.892 511.332 null]
 >> endobj
-6443 0 obj <<
-/D [6428 0 R /XYZ 100.892 499.377 null]
+6411 0 obj <<
+/D [6396 0 R /XYZ 100.892 499.377 null]
 >> endobj
-6444 0 obj <<
-/D [6428 0 R /XYZ 100.892 487.422 null]
+6412 0 obj <<
+/D [6396 0 R /XYZ 100.892 487.422 null]
 >> endobj
-6445 0 obj <<
-/D [6428 0 R /XYZ 100.892 475.467 null]
+6413 0 obj <<
+/D [6396 0 R /XYZ 100.892 475.467 null]
 >> endobj
-6446 0 obj <<
-/D [6428 0 R /XYZ 100.892 463.512 null]
+6414 0 obj <<
+/D [6396 0 R /XYZ 100.892 463.512 null]
 >> endobj
-6447 0 obj <<
-/D [6428 0 R /XYZ 100.892 451.557 null]
+6415 0 obj <<
+/D [6396 0 R /XYZ 100.892 451.557 null]
 >> endobj
-6448 0 obj <<
-/D [6428 0 R /XYZ 100.892 439.601 null]
+6416 0 obj <<
+/D [6396 0 R /XYZ 100.892 439.601 null]
 >> endobj
 1680 0 obj <<
-/D [6428 0 R /XYZ 100.892 399.239 null]
+/D [6396 0 R /XYZ 100.892 399.239 null]
 >> endobj
-6426 0 obj <<
-/D [6428 0 R /XYZ 100.892 370.335 null]
+6394 0 obj <<
+/D [6396 0 R /XYZ 100.892 370.335 null]
 >> endobj
 874 0 obj <<
-/D [6428 0 R /XYZ 100.892 293.558 null]
+/D [6396 0 R /XYZ 100.892 293.558 null]
 >> endobj
-6449 0 obj <<
-/D [6428 0 R /XYZ 100.892 274.832 null]
+6417 0 obj <<
+/D [6396 0 R /XYZ 100.892 274.832 null]
 >> endobj
 878 0 obj <<
-/D [6428 0 R /XYZ 100.892 227.169 null]
+/D [6396 0 R /XYZ 100.892 227.169 null]
 >> endobj
-6450 0 obj <<
-/D [6428 0 R /XYZ 100.892 200.742 null]
+6418 0 obj <<
+/D [6396 0 R /XYZ 100.892 200.742 null]
 >> endobj
-6451 0 obj <<
-/D [6428 0 R /XYZ 100.892 180.358 null]
+6419 0 obj <<
+/D [6396 0 R /XYZ 100.892 180.358 null]
 >> endobj
-6427 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R /F11 2494 0 R /F59 1905 0 R /F17 1131 0 R >>
+6395 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F4 2008 0 R /F51 1134 0 R /F54 1912 0 R /F11 2489 0 R /F59 1905 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6456 0 obj <<
+6424 0 obj <<
 /Length 1287      
 /Filter /FlateDecode
 >>
@@ -36378,57 +35550,57 @@
 U} èHS™kü?hA–þÆþPÛ^…ñ£ÿwð·ñaR¸Î
 endstream
 endobj
-6455 0 obj <<
+6423 0 obj <<
 /Type /Page
-/Contents 6456 0 R
-/Resources 6454 0 R
+/Contents 6424 0 R
+/Resources 6422 0 R
 /MediaBox [0 0 612 792]
-/Parent 6465 0 R
-/Annots [ 6452 0 R 6453 0 R ]
+/Parent 6433 0 R
+/Annots [ 6420 0 R 6421 0 R ]
 >> endobj
-6452 0 obj <<
+6420 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [330.493 245.49 405.667 257.18]
 /Subtype /Link
 /A << /S /GoTo /D (etcsquidcfg) >>
 >> endobj
-6453 0 obj <<
+6421 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.523 245.49 503.698 257.18]
 /Subtype /Link
 /A << /S /GoTo /D (etcsquid2) >>
 >> endobj
-6457 0 obj <<
-/D [6455 0 R /XYZ 151.701 685.529 null]
+6425 0 obj <<
+/D [6423 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6458 0 obj <<
-/D [6455 0 R /XYZ 151.701 660.623 null]
+6426 0 obj <<
+/D [6423 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6459 0 obj <<
-/D [6455 0 R /XYZ 151.701 579.797 null]
+6427 0 obj <<
+/D [6423 0 R /XYZ 151.701 579.797 null]
 >> endobj
-6460 0 obj <<
-/D [6455 0 R /XYZ 151.701 492.493 null]
+6428 0 obj <<
+/D [6423 0 R /XYZ 151.701 492.493 null]
 >> endobj
-6461 0 obj <<
-/D [6455 0 R /XYZ 151.701 389.519 null]
+6429 0 obj <<
+/D [6423 0 R /XYZ 151.701 389.519 null]
 >> endobj
-6462 0 obj <<
-/D [6455 0 R /XYZ 151.701 286.545 null]
+6430 0 obj <<
+/D [6423 0 R /XYZ 151.701 286.545 null]
 >> endobj
-6463 0 obj <<
-/D [6455 0 R /XYZ 151.701 246.486 null]
+6431 0 obj <<
+/D [6423 0 R /XYZ 151.701 246.486 null]
 >> endobj
-6464 0 obj <<
-/D [6455 0 R /XYZ 151.701 159.183 null]
+6432 0 obj <<
+/D [6423 0 R /XYZ 151.701 159.183 null]
 >> endobj
-6454 0 obj <<
+6422 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6470 0 obj <<
+6438 0 obj <<
 /Length 1422      
 /Filter /FlateDecode
 >>
@@ -36447,39 +35619,39 @@
 kbÓÐŽk~N&˺jÁ»ÆˆâÓOUö££¯#ØBOv@~rt!\ÿ éö™
 endstream
 endobj
-6469 0 obj <<
+6437 0 obj <<
 /Type /Page
-/Contents 6470 0 R
-/Resources 6468 0 R
+/Contents 6438 0 R
+/Resources 6436 0 R
 /MediaBox [0 0 612 792]
-/Parent 6465 0 R
+/Parent 6433 0 R
 >> endobj
-6471 0 obj <<
-/D [6469 0 R /XYZ 100.892 685.529 null]
+6439 0 obj <<
+/D [6437 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1698 0 obj <<
-/D [6469 0 R /XYZ 100.892 610.441 null]
+/D [6437 0 R /XYZ 100.892 610.441 null]
 >> endobj
-6466 0 obj <<
-/D [6469 0 R /XYZ 100.892 578.81 null]
+6434 0 obj <<
+/D [6437 0 R /XYZ 100.892 578.81 null]
 >> endobj
 1699 0 obj <<
-/D [6469 0 R /XYZ 100.892 518.467 null]
+/D [6437 0 R /XYZ 100.892 518.467 null]
 >> endobj
-6467 0 obj <<
-/D [6469 0 R /XYZ 100.892 486.835 null]
+6435 0 obj <<
+/D [6437 0 R /XYZ 100.892 486.835 null]
 >> endobj
 882 0 obj <<
-/D [6469 0 R /XYZ 100.892 289.81 null]
+/D [6437 0 R /XYZ 100.892 289.81 null]
 >> endobj
-6472 0 obj <<
-/D [6469 0 R /XYZ 100.892 261.356 null]
+6440 0 obj <<
+/D [6437 0 R /XYZ 100.892 261.356 null]
 >> endobj
-6468 0 obj <<
+6436 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6475 0 obj <<
+6443 0 obj <<
 /Length 2163      
 /Filter /FlateDecode
 >>
@@ -36505,30 +35677,30 @@
 ý¯ÉçîäoÍ<#ÿŸ.wK
 endstream
 endobj
-6474 0 obj <<
+6442 0 obj <<
 /Type /Page
-/Contents 6475 0 R
-/Resources 6473 0 R
+/Contents 6443 0 R
+/Resources 6441 0 R
 /MediaBox [0 0 612 792]
-/Parent 6465 0 R
+/Parent 6433 0 R
 >> endobj
-6476 0 obj <<
-/D [6474 0 R /XYZ 151.701 685.529 null]
+6444 0 obj <<
+/D [6442 0 R /XYZ 151.701 685.529 null]
 >> endobj
 886 0 obj <<
-/D [6474 0 R /XYZ 151.701 660.623 null]
+/D [6442 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6477 0 obj <<
-/D [6474 0 R /XYZ 151.701 639.842 null]
+6445 0 obj <<
+/D [6442 0 R /XYZ 151.701 639.842 null]
 >> endobj
-6478 0 obj <<
-/D [6474 0 R /XYZ 151.701 192.19 null]
+6446 0 obj <<
+/D [6442 0 R /XYZ 151.701 192.19 null]
 >> endobj
-6473 0 obj <<
+6441 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F17 1131 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6481 0 obj <<
+6449 0 obj <<
 /Length 2079      
 /Filter /FlateDecode
 >>
@@ -36555,21 +35727,21 @@
 É@WÅŽé¨k]i?ÿúöJä/ÄC—ïšþ	qødè—r
 endstream
 endobj
-6480 0 obj <<
+6448 0 obj <<
 /Type /Page
-/Contents 6481 0 R
-/Resources 6479 0 R
+/Contents 6449 0 R
+/Resources 6447 0 R
 /MediaBox [0 0 612 792]
-/Parent 6465 0 R
+/Parent 6433 0 R
 >> endobj
-6482 0 obj <<
-/D [6480 0 R /XYZ 100.892 685.529 null]
+6450 0 obj <<
+/D [6448 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6479 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F51 1134 0 R /F90 2476 0 R >>
+6447 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F51 1134 0 R /F90 2471 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6485 0 obj <<
+6453 0 obj <<
 /Length 796       
 /Filter /FlateDecode
 >>
@@ -36583,21 +35755,21 @@
 Ÿ¯‹OVcmò4Il;sÛÁe¼Ûv†©ü@žk¼;5²\†æ//L®4Ñ5CJ)BYó#SJ±$©YóÂÈJÒ0½Œ#ôøËÙN@ú/(Ò
 endstream
 endobj
-6484 0 obj <<
+6452 0 obj <<
 /Type /Page
-/Contents 6485 0 R
-/Resources 6483 0 R
+/Contents 6453 0 R
+/Resources 6451 0 R
 /MediaBox [0 0 612 792]
-/Parent 6465 0 R
+/Parent 6433 0 R
 >> endobj
-6486 0 obj <<
-/D [6484 0 R /XYZ 151.701 685.529 null]
+6454 0 obj <<
+/D [6452 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6483 0 obj <<
+6451 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6489 0 obj <<
+6457 0 obj <<
 /Length 1290      
 /Filter /FlateDecode
 >>
@@ -36613,33 +35785,33 @@
 é£"gA€zÛxÜcÝÌSçˆAÙvQâ¤ã3û(#Xû~—€þb[Nm HãìavO…X•¸†|ƒuž ñ5¼dwýcÈÃ#ÅYŠìåÁÐçúñ0€ó.†Ñyµ—EìÁ¸™‘—â9þDWôΏ†VN.9U’7Tý€Ñó¨þI­]•Pþý8ý»~>+©‰Ãò\\t|SZ‘ㆳÅáÛŠBXÅ"BˆL1„aO>,£]Ð)ÇgI—tëzó;$`ƒ¨Øì‚l8ï,Ø܇äÂã¹òpÄa=´0<wÚõ»0Û*h_q¶Þ»£q2!pç3¶I=…Ñ›Çÿ\Ý#ÄE¶S¤å«gƒ Gë‹Ä‘º°±^‘ð+œ™§!«1¿Z5_nü-Ì5fØÒ×`”Ìž’çÿSt4"t¤m®)>8±™N[¢…a‰<ρxÕ[?ÜB‡9ky-á§:‡æ#Â/mP¸¨Ä«Kð;þYÄ
 endstream
 endobj
-6488 0 obj <<
+6456 0 obj <<
 /Type /Page
-/Contents 6489 0 R
-/Resources 6487 0 R
+/Contents 6457 0 R
+/Resources 6455 0 R
 /MediaBox [0 0 612 792]
-/Parent 6465 0 R
+/Parent 6433 0 R
 >> endobj
-6490 0 obj <<
-/D [6488 0 R /XYZ 100.892 685.529 null]
+6458 0 obj <<
+/D [6456 0 R /XYZ 100.892 685.529 null]
 >> endobj
 890 0 obj <<
-/D [6488 0 R /XYZ 100.892 660.623 null]
+/D [6456 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6491 0 obj <<
-/D [6488 0 R /XYZ 100.892 445.26 null]
+6459 0 obj <<
+/D [6456 0 R /XYZ 100.892 445.26 null]
 >> endobj
 894 0 obj <<
-/D [6488 0 R /XYZ 100.892 251.645 null]
+/D [6456 0 R /XYZ 100.892 251.645 null]
 >> endobj
-6492 0 obj <<
-/D [6488 0 R /XYZ 100.892 223.926 null]
+6460 0 obj <<
+/D [6456 0 R /XYZ 100.892 223.926 null]
 >> endobj
-6487 0 obj <<
+6455 0 obj <<
 /Font << /F77 1973 0 R /F17 1131 0 R /F15 1133 0 R /F28 1124 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6496 0 obj <<
+6464 0 obj <<
 /Length 2140      
 /Filter /FlateDecode
 >>
@@ -36663,40 +35835,40 @@
 %0âô—£™<†>š:Ô/sˆš¸2%`9éQ’4öǐ­v‰¥À -úÇ=Ï¿ý|j=S¹1Öý&«Ô9€X U¡=knîÂ7ÛÓã¥ZÞE0â·üÔ‡×z5?ˆpÄ g1M*H=ÛÍÀiÜ*¨r˜Ï1Ýê;åy†&¶(5u‡ã•å[½e¨¸È²=ÿOóG×/ßx at ./—SIX¾ë¬~&*KŠ"ÿ£ïDBÉDËg"ú<$E”'uYt*²Š„,’TÈ«OÅå÷1ƒlÙʤJƒMþt¥áíwå¥x™ˆ¢œ3é8Ž§ono_^^’ƒsÈM ©[úÂpü˱½3ý»Öß½³æîÓý[üºWU^㨈ŻßîÝ=ê¯pʤ„ÐÝbæåsAåï ïÇþãÝG:âë{ÚþŽWWYÆš•üó•èÛpÀ_XZ^
 endstream
 endobj
-6495 0 obj <<
+6463 0 obj <<
 /Type /Page
-/Contents 6496 0 R
-/Resources 6494 0 R
+/Contents 6464 0 R
+/Resources 6462 0 R
 /MediaBox [0 0 612 792]
-/Parent 6500 0 R
-/Annots [ 6493 0 R 6499 0 R ]
+/Parent 6468 0 R
+/Annots [ 6461 0 R 6467 0 R ]
 >> endobj
-6493 0 obj <<
+6461 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 129.215 511.352 140.871]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.google.com/search?hl=en&lr=&ie=ISO-8859-1&q=samba+cluster&btnG=Google+Search)>>
 >> endobj
-6499 0 obj <<
+6467 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [150.705 116.961 275.087 127.721]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.google.com/search?hl=en&lr=&ie=ISO-8859-1&q=samba+cluster&btnG=Google+Search)>>
 >> endobj
-6497 0 obj <<
-/D [6495 0 R /XYZ 151.701 685.529 null]
+6465 0 obj <<
+/D [6463 0 R /XYZ 151.701 685.529 null]
 >> endobj
 898 0 obj <<
-/D [6495 0 R /XYZ 151.701 463.406 null]
+/D [6463 0 R /XYZ 151.701 463.406 null]
 >> endobj
-6498 0 obj <<
-/D [6495 0 R /XYZ 151.701 435.577 null]
+6466 0 obj <<
+/D [6463 0 R /XYZ 151.701 435.577 null]
 >> endobj
-6494 0 obj <<
+6462 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F30 1928 0 R /F17 1131 0 R /F51 1134 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6503 0 obj <<
+6471 0 obj <<
 /Length 2308      
 /Filter /FlateDecode
 >>
@@ -36722,27 +35894,27 @@
 ½C´,‚‚ìï´ÜYûÚy'“mVìh&{²Í÷Ã3©uÅ>Éý‡¢ðÖt ÄîrSÙ`;Ô§ðýqSI
 endstream
 endobj
-6502 0 obj <<
+6470 0 obj <<
 /Type /Page
-/Contents 6503 0 R
-/Resources 6501 0 R
+/Contents 6471 0 R
+/Resources 6469 0 R
 /MediaBox [0 0 612 792]
-/Parent 6500 0 R
+/Parent 6468 0 R
 >> endobj
-6504 0 obj <<
-/D [6502 0 R /XYZ 100.892 685.529 null]
+6472 0 obj <<
+/D [6470 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1858 0 obj <<
-/D [6502 0 R /XYZ 100.892 347.776 null]
+/D [6470 0 R /XYZ 100.892 347.776 null]
 >> endobj
-6505 0 obj <<
-/D [6502 0 R /XYZ 100.892 333.027 null]
+6473 0 obj <<
+/D [6470 0 R /XYZ 100.892 333.027 null]
 >> endobj
-6501 0 obj <<
+6469 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6508 0 obj <<
+6476 0 obj <<
 /Length 2132      
 /Filter /FlateDecode
 >>
@@ -36769,39 +35941,39 @@
 ƒ/sc]ƒ*¬õ-ÞB÷BaàâÌ'óæËpꘂ‰õˆ©ó_f{x‹‰º€Ö6)æÅw©ŽF†é9;ëUQR¨ìE£²|£Ì ˜Ëyã¯ÏŸ?0â‹Ã‚–>YŸ]àÅg¾¬|½A¶†Gäü!OFßãüÏ(‰ÆÄö Oúä’¢k/Ü<5~«òkŠAÆP™œ@C’p5aNbGõpÆ™Ñ/¡2fÏ#aæo&Œ9p=^ñm*¤ àlò/h*_æô̵ÈuþNþQÑ4:Uó§ƒã&‚%8úÞôOè8~Ø\ýÊ©
 endstream
 endobj
-6507 0 obj <<
+6475 0 obj <<
 /Type /Page
-/Contents 6508 0 R
-/Resources 6506 0 R
+/Contents 6476 0 R
+/Resources 6474 0 R
 /MediaBox [0 0 612 792]
-/Parent 6500 0 R
+/Parent 6468 0 R
 >> endobj
-6509 0 obj <<
-/D [6507 0 R /XYZ 151.701 685.529 null]
+6477 0 obj <<
+/D [6475 0 R /XYZ 151.701 685.529 null]
 >> endobj
 902 0 obj <<
-/D [6507 0 R /XYZ 151.701 660.623 null]
+/D [6475 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6510 0 obj <<
-/D [6507 0 R /XYZ 151.701 638.691 null]
+6478 0 obj <<
+/D [6475 0 R /XYZ 151.701 638.691 null]
 >> endobj
 906 0 obj <<
-/D [6507 0 R /XYZ 151.701 564.666 null]
+/D [6475 0 R /XYZ 151.701 564.666 null]
 >> endobj
-6511 0 obj <<
-/D [6507 0 R /XYZ 151.701 540.669 null]
+6479 0 obj <<
+/D [6475 0 R /XYZ 151.701 540.669 null]
 >> endobj
 910 0 obj <<
-/D [6507 0 R /XYZ 151.701 477.675 null]
+/D [6475 0 R /XYZ 151.701 477.675 null]
 >> endobj
-6512 0 obj <<
-/D [6507 0 R /XYZ 151.701 453.677 null]
+6480 0 obj <<
+/D [6475 0 R /XYZ 151.701 453.677 null]
 >> endobj
-6506 0 obj <<
+6474 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R /F60 1917 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6516 0 obj <<
+6484 0 obj <<
 /Length 1638      
 /Filter /FlateDecode
 >>
@@ -36820,43 +35992,43 @@
 r$ð©•Ž£A:LÑ^D—Aj’_žÇ¢Cº¦DÃd²p§ûzÜ̝?~aÞýûbè
 endstream
 endobj
-6515 0 obj <<
+6483 0 obj <<
 /Type /Page
-/Contents 6516 0 R
-/Resources 6514 0 R
+/Contents 6484 0 R
+/Resources 6482 0 R
 /MediaBox [0 0 612 792]
-/Parent 6500 0 R
-/Annots [ 6513 0 R 6519 0 R ]
+/Parent 6468 0 R
+/Annots [ 6481 0 R 6487 0 R ]
 >> endobj
-6513 0 obj <<
+6481 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [350.407 363.371 460.543 375.06]
 /Subtype /Link
 /A << /S /GoTo /D (primer) >>
 >> endobj
-6519 0 obj <<
+6487 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.441 349.822 213.009 361.511]
 /Subtype /Link
 /A << /S /GoTo /D (primer) >>
 >> endobj
-6517 0 obj <<
-/D [6515 0 R /XYZ 100.892 685.529 null]
+6485 0 obj <<
+/D [6483 0 R /XYZ 100.892 685.529 null]
 >> endobj
 914 0 obj <<
-/D [6515 0 R /XYZ 100.892 435.607 null]
+/D [6483 0 R /XYZ 100.892 435.607 null]
 >> endobj
-6518 0 obj <<
-/D [6515 0 R /XYZ 100.892 414.25 null]
+6486 0 obj <<
+/D [6483 0 R /XYZ 100.892 414.25 null]
 >> endobj
-6514 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F89 2333 0 R /F73 2334 0 R /F59 1905 0 R /F17 1131 0 R /F54 1912 0 R /F60 1917 0 R >>
-/XObject << /Im3 2328 0 R >>
+6482 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F89 2330 0 R /F73 2331 0 R /F59 1905 0 R /F17 1131 0 R /F54 1912 0 R /F60 1917 0 R >>
+/XObject << /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6524 0 obj <<
+6492 0 obj <<
 /Length 1875      
 /Filter /FlateDecode
 >>
@@ -36875,42 +36047,42 @@
 -NÆFÍÈáP9Vœq¯]éš·æÈéæ`´îžÕÿyÄWî_+ö’í
 endstream
 endobj
-6523 0 obj <<
+6491 0 obj <<
 /Type /Page
-/Contents 6524 0 R
-/Resources 6522 0 R
+/Contents 6492 0 R
+/Resources 6490 0 R
 /MediaBox [0 0 612 792]
-/Parent 6500 0 R
-/Annots [ 6521 0 R ]
+/Parent 6468 0 R
+/Annots [ 6489 0 R ]
 >> endobj
-6521 0 obj <<
+6489 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [352.342 354.084 513.031 365.773]
 /Subtype /Link
 /A << /S /GoTo /D (primer) >>
 >> endobj
-6525 0 obj <<
-/D [6523 0 R /XYZ 151.701 685.529 null]
+6493 0 obj <<
+/D [6491 0 R /XYZ 151.701 685.529 null]
 >> endobj
 918 0 obj <<
-/D [6523 0 R /XYZ 151.701 504.3 null]
+/D [6491 0 R /XYZ 151.701 504.3 null]
 >> endobj
-6526 0 obj <<
-/D [6523 0 R /XYZ 151.701 481.903 null]
+6494 0 obj <<
+/D [6491 0 R /XYZ 151.701 481.903 null]
 >> endobj
 922 0 obj <<
-/D [6523 0 R /XYZ 151.701 194.659 null]
+/D [6491 0 R /XYZ 151.701 194.659 null]
 >> endobj
-6527 0 obj <<
-/D [6523 0 R /XYZ 151.701 167.722 null]
+6495 0 obj <<
+/D [6491 0 R /XYZ 151.701 167.722 null]
 >> endobj
-6522 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F89 2333 0 R /F73 2334 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R >>
-/XObject << /Im3 2328 0 R >>
+6490 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F89 2330 0 R /F73 2331 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R >>
+/XObject << /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6530 0 obj <<
+6498 0 obj <<
 /Length 1465      
 /Filter /FlateDecode
 >>
@@ -36930,21 +36102,21 @@
 »[[ë³ûK`?|؇˜OŽW&wZØ뺾?]yÇ3;94j£º{-†i›á{-¶NK}¿Å­¬jq¯••Ä}r\Vú^牾ÿFˆˆ]9¢è	8Âœëê—I =~XíAi$\üDŸ?ÒðÃCÛz³u8vÿ$P„nþ:¶î@z£Q‚Æk×»…²]A}¶u?éÃ5¸<2·V|Lâû«×Ï??»zóäòíçwÏžN&;pk,»=ù#µQ0ÎCACµk?HY8Þª>Éš3”pMkL½íž÷ÿBÇþÜþ!F
 endstream
 endobj
-6529 0 obj <<
+6497 0 obj <<
 /Type /Page
-/Contents 6530 0 R
-/Resources 6528 0 R
+/Contents 6498 0 R
+/Resources 6496 0 R
 /MediaBox [0 0 612 792]
-/Parent 6500 0 R
+/Parent 6468 0 R
 >> endobj
-6531 0 obj <<
-/D [6529 0 R /XYZ 100.892 685.529 null]
+6499 0 obj <<
+/D [6497 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6528 0 obj <<
+6496 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6535 0 obj <<
+6503 0 obj <<
 /Length 1954      
 /Filter /FlateDecode
 >>
@@ -36964,29 +36136,29 @@
 @Vʏҷ羪€×÷°[(l=¹´¡!©0ñ*Â_$†ªÊ¶¾}aG÷w/鏍ÕN†ÿ4ÏQýND®~è(2’Æd– ÌsúW9–’fZƆqùç(ú@üÓøÿð?ª<©×„}züO`Åšv `_yÙ |ßî7l%*˜
 endstream
 endobj
-6534 0 obj <<
+6502 0 obj <<
 /Type /Page
-/Contents 6535 0 R
-/Resources 6533 0 R
+/Contents 6503 0 R
+/Resources 6501 0 R
 /MediaBox [0 0 612 792]
-/Parent 6537 0 R
-/Annots [ 6532 0 R ]
+/Parent 6505 0 R
+/Annots [ 6500 0 R ]
 >> endobj
-6532 0 obj <<
+6500 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.101 131.677 466.897 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (ch12dblck) >>
 >> endobj
-6536 0 obj <<
-/D [6534 0 R /XYZ 151.701 685.529 null]
+6504 0 obj <<
+/D [6502 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6533 0 obj <<
+6501 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R /F60 1917 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6541 0 obj <<
+6509 0 obj <<
 /Length 1771      
 /Filter /FlateDecode
 >>
@@ -37013,39 +36185,39 @@
 nk´®µt/7uS‚N£M¥vG<uìð„­S‚dŒÚÇ®BñÍï;ýïò%WÄ.ÇNão‚èüOÂ4¾¹Þü\–Ž°
 endstream
 endobj
-6540 0 obj <<
+6508 0 obj <<
 /Type /Page
-/Contents 6541 0 R
-/Resources 6539 0 R
+/Contents 6509 0 R
+/Resources 6507 0 R
 /MediaBox [0 0 612 792]
-/Parent 6537 0 R
+/Parent 6505 0 R
 >> endobj
-6542 0 obj <<
-/D [6540 0 R /XYZ 100.892 685.529 null]
+6510 0 obj <<
+/D [6508 0 R /XYZ 100.892 685.529 null]
 >> endobj
 926 0 obj <<
-/D [6540 0 R /XYZ 100.892 660.623 null]
+/D [6508 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6543 0 obj <<
-/D [6540 0 R /XYZ 100.892 644.027 null]
+6511 0 obj <<
+/D [6508 0 R /XYZ 100.892 644.027 null]
 >> endobj
 930 0 obj <<
-/D [6540 0 R /XYZ 100.892 413.932 null]
+/D [6508 0 R /XYZ 100.892 413.932 null]
 >> endobj
-6544 0 obj <<
-/D [6540 0 R /XYZ 100.892 373.831 null]
+6512 0 obj <<
+/D [6508 0 R /XYZ 100.892 373.831 null]
 >> endobj
 934 0 obj <<
-/D [6540 0 R /XYZ 100.892 225.03 null]
+/D [6508 0 R /XYZ 100.892 225.03 null]
 >> endobj
-6545 0 obj <<
-/D [6540 0 R /XYZ 100.892 184.929 null]
+6513 0 obj <<
+/D [6508 0 R /XYZ 100.892 184.929 null]
 >> endobj
-6539 0 obj <<
+6507 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6548 0 obj <<
+6516 0 obj <<
 /Length 1922      
 /Filter /FlateDecode
 >>
@@ -37071,39 +36243,39 @@
 |Ø€ÔÌ‹ÆH;èK>“˜!l…ÈýéÂ>‚66ýC‚ò€ÿ)!+*KŠ?ÿKAÖ7xÊ©Qz­ù IúÄ<™2=ß%^ßœÿ»Y¼ÖXà¸KŠGÓøýÍôûýnõ?aÞíè
 endstream
 endobj
-6547 0 obj <<
+6515 0 obj <<
 /Type /Page
-/Contents 6548 0 R
-/Resources 6546 0 R
+/Contents 6516 0 R
+/Resources 6514 0 R
 /MediaBox [0 0 612 792]
-/Parent 6537 0 R
+/Parent 6505 0 R
 >> endobj
-6549 0 obj <<
-/D [6547 0 R /XYZ 151.701 685.529 null]
+6517 0 obj <<
+/D [6515 0 R /XYZ 151.701 685.529 null]
 >> endobj
 938 0 obj <<
-/D [6547 0 R /XYZ 151.701 594.466 null]
+/D [6515 0 R /XYZ 151.701 594.466 null]
 >> endobj
-6550 0 obj <<
-/D [6547 0 R /XYZ 151.701 570.627 null]
+6518 0 obj <<
+/D [6515 0 R /XYZ 151.701 570.627 null]
 >> endobj
 942 0 obj <<
-/D [6547 0 R /XYZ 151.701 434.134 null]
+/D [6515 0 R /XYZ 151.701 434.134 null]
 >> endobj
-6551 0 obj <<
-/D [6547 0 R /XYZ 151.701 396.745 null]
+6519 0 obj <<
+/D [6515 0 R /XYZ 151.701 396.745 null]
 >> endobj
 946 0 obj <<
-/D [6547 0 R /XYZ 151.701 267.027 null]
+/D [6515 0 R /XYZ 151.701 267.027 null]
 >> endobj
-6552 0 obj <<
-/D [6547 0 R /XYZ 151.701 243.188 null]
+6520 0 obj <<
+/D [6515 0 R /XYZ 151.701 243.188 null]
 >> endobj
-6546 0 obj <<
+6514 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6555 0 obj <<
+6523 0 obj <<
 /Length 2178      
 /Filter /FlateDecode
 >>
@@ -37121,27 +36293,27 @@
 œþO¿ïî¯þ0²«0
 endstream
 endobj
-6554 0 obj <<
+6522 0 obj <<
 /Type /Page
-/Contents 6555 0 R
-/Resources 6553 0 R
+/Contents 6523 0 R
+/Resources 6521 0 R
 /MediaBox [0 0 612 792]
-/Parent 6537 0 R
+/Parent 6505 0 R
 >> endobj
-6556 0 obj <<
-/D [6554 0 R /XYZ 100.892 685.529 null]
+6524 0 obj <<
+/D [6522 0 R /XYZ 100.892 685.529 null]
 >> endobj
 950 0 obj <<
-/D [6554 0 R /XYZ 100.892 361.987 null]
+/D [6522 0 R /XYZ 100.892 361.987 null]
 >> endobj
-6557 0 obj <<
-/D [6554 0 R /XYZ 100.892 336.189 null]
+6525 0 obj <<
+/D [6522 0 R /XYZ 100.892 336.189 null]
 >> endobj
-6553 0 obj <<
+6521 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6560 0 obj <<
+6528 0 obj <<
 /Length 1817      
 /Filter /FlateDecode
 >>
@@ -37162,27 +36334,27 @@
 ?s›'¾Å‘qT<ã§3M†GX[p—È<)f9²µ>ñš‰E}B!;ˆ¤»ÐåÆCB„ë©1X²¼›Ê\Ä–8/©	AÖ5&€ëÕ‡P¬,'’¸;ÏúË-žQt:ÆÏ4uÛ,Ãßô1†¦ù1ÁXø"þXˆßWÛÕ?Õ°ˆa
 endstream
 endobj
-6559 0 obj <<
+6527 0 obj <<
 /Type /Page
-/Contents 6560 0 R
-/Resources 6558 0 R
+/Contents 6528 0 R
+/Resources 6526 0 R
 /MediaBox [0 0 612 792]
-/Parent 6537 0 R
+/Parent 6505 0 R
 >> endobj
-6561 0 obj <<
-/D [6559 0 R /XYZ 151.701 685.529 null]
+6529 0 obj <<
+/D [6527 0 R /XYZ 151.701 685.529 null]
 >> endobj
 954 0 obj <<
-/D [6559 0 R /XYZ 151.701 183.694 null]
+/D [6527 0 R /XYZ 151.701 183.694 null]
 >> endobj
-6562 0 obj <<
-/D [6559 0 R /XYZ 151.701 153.559 null]
+6530 0 obj <<
+/D [6527 0 R /XYZ 151.701 153.559 null]
 >> endobj
-6558 0 obj <<
+6526 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R /F59 1905 0 R /F60 1917 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6565 0 obj <<
+6533 0 obj <<
 /Length 762       
 /Filter /FlateDecode
 >>
@@ -37197,21 +36369,21 @@
 ê¿ÜñVã/s#Šš{3^šGíéÕpÈ÷¤'˜ÀT4 ´$²²Y|/{Rò:ž¿ña7î™\_Ý J¯Ë(sXaÔ<Ôv)€Æý-âV©î8ÙfîôˆýBÑ“B•ƒòÀâým|Ö‹ËËMíW·ˆø¹?a ¸–­%ùŒ·}¸!¬!ÜNav/;uùêþù¢™
 endstream
 endobj
-6564 0 obj <<
+6532 0 obj <<
 /Type /Page
-/Contents 6565 0 R
-/Resources 6563 0 R
+/Contents 6533 0 R
+/Resources 6531 0 R
 /MediaBox [0 0 612 792]
-/Parent 6537 0 R
+/Parent 6505 0 R
 >> endobj
-6566 0 obj <<
-/D [6564 0 R /XYZ 100.892 685.529 null]
+6534 0 obj <<
+/D [6532 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6563 0 obj <<
+6531 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6569 0 obj <<
+6537 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -37219,20 +36391,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-6568 0 obj <<
+6536 0 obj <<
 /Type /Page
-/Contents 6569 0 R
-/Resources 6567 0 R
+/Contents 6537 0 R
+/Resources 6535 0 R
 /MediaBox [0 0 612 792]
-/Parent 6571 0 R
+/Parent 6539 0 R
 >> endobj
-6570 0 obj <<
-/D [6568 0 R /XYZ 151.701 685.529 null]
+6538 0 obj <<
+/D [6536 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6567 0 obj <<
+6535 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-6574 0 obj <<
+6542 0 obj <<
 /Length 1498      
 /Filter /FlateDecode
 >>
@@ -37256,27 +36428,27 @@
 Ôýˆ )? EzõÁðóßÿPÂg&Säh!°OÝ̽H‡¥N_~Ÿ½ŠŠË_¦¨Hƒ~Ý g诋LŠüjü1þÏÔÐE
 endstream
 endobj
-6573 0 obj <<
+6541 0 obj <<
 /Type /Page
-/Contents 6574 0 R
-/Resources 6572 0 R
+/Contents 6542 0 R
+/Resources 6540 0 R
 /MediaBox [0 0 612 792]
-/Parent 6571 0 R
+/Parent 6539 0 R
 >> endobj
-6575 0 obj <<
-/D [6573 0 R /XYZ 100.892 685.529 null]
+6543 0 obj <<
+/D [6541 0 R /XYZ 100.892 685.529 null]
 >> endobj
 958 0 obj <<
-/D [6573 0 R /XYZ 100.892 660.623 null]
+/D [6541 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6576 0 obj <<
-/D [6573 0 R /XYZ 100.892 499.485 null]
+6544 0 obj <<
+/D [6541 0 R /XYZ 100.892 499.485 null]
 >> endobj
-6572 0 obj <<
+6540 0 obj <<
 /Font << /F77 1973 0 R /F17 1131 0 R /F15 1133 0 R /F28 1124 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6582 0 obj <<
+6550 0 obj <<
 /Length 2209      
 /Filter /FlateDecode
 >>
@@ -37298,46 +36470,46 @@
 ÊF17¡ÂUâ‹ñ4'µ·žFéôµÅs@€ò-}¡Y9bÛažMá}:^ :G€®—I^/B#¨â˜X€‘ä¹Ù8Ž&âÃ4¼©ÒtöNÁo>yü>5jX¯[™øc8#Þ>’­~sZ&&S_ûè&”L”¹}s£omRD"*7TÖ•¨Ä„2 ˯3ÿtjZ`HipÞ?'|úÏÕóD˜ÛwÆÓ0\ü»§'ú4‘ÜÊì'Œ£sÕ>½Zh±¯Ðibä­îþ&°Â܆­0"vÕ‹:õo5,¸^¯³ósËõurÎÍW­ 7çÚ|ÝŠÜÀ[BÍ­ÿ§‹ ÿ¢¶šÙòÕÓgy’–ùâô7Ý×ÿ ÕÿïåÝì
 endstream
 endobj
-6581 0 obj <<
+6549 0 obj <<
 /Type /Page
-/Contents 6582 0 R
-/Resources 6580 0 R
+/Contents 6550 0 R
+/Resources 6548 0 R
 /MediaBox [0 0 612 792]
-/Parent 6571 0 R
-/Annots [ 6577 0 R 6578 0 R 6579 0 R ]
+/Parent 6539 0 R
+/Annots [ 6545 0 R 6546 0 R 6547 0 R ]
 >> endobj
-6577 0 obj <<
+6545 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 138.879 327.086 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(https://lists.samba.org/mailman/)>>
 >> endobj
-6578 0 obj <<
+6546 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 127.92 341.208 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.samba.org/samba.irc.html)>>
 >> endobj
-6579 0 obj <<
+6547 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 303.55 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(https://bugzilla.samba.org/)>>
 >> endobj
-6583 0 obj <<
-/D [6581 0 R /XYZ 151.701 685.529 null]
+6551 0 obj <<
+/D [6549 0 R /XYZ 151.701 685.529 null]
 >> endobj
 962 0 obj <<
-/D [6581 0 R /XYZ 151.701 582.693 null]
+/D [6549 0 R /XYZ 151.701 582.693 null]
 >> endobj
-6584 0 obj <<
-/D [6581 0 R /XYZ 151.701 554.01 null]
+6552 0 obj <<
+/D [6549 0 R /XYZ 151.701 554.01 null]
 >> endobj
-6580 0 obj <<
+6548 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F30 1928 0 R /F59 1905 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6588 0 obj <<
+6556 0 obj <<
 /Length 1801      
 /Filter /FlateDecode
 >>
@@ -37357,34 +36529,34 @@
 _GõzÒ4!! OÈóÊ+ô1rõò!‡^ k²ES‘Ïq©NÒ¤‡xK\\IΞƒ&稃ô³Ö?§Ð˜—ðÕCgQˆù¿CXÊ£4¿ýâþá,È Ö‹ÜÁ:œ˜ã2IÅYº ö|þP±Œ!®—±¿²_ž5Å\¼ˆX^N-ÆiÎ/.—KdE·‘6Ç7zÀ£ã³ì4tí3}‹íY	7S¦“Æ_²Ï¿à­ÿ kÞd
 endstream
 endobj
-6587 0 obj <<
+6555 0 obj <<
 /Type /Page
-/Contents 6588 0 R
-/Resources 6586 0 R
+/Contents 6556 0 R
+/Resources 6554 0 R
 /MediaBox [0 0 612 792]
-/Parent 6571 0 R
-/Annots [ 6585 0 R ]
+/Parent 6539 0 R
+/Annots [ 6553 0 R ]
 >> endobj
-6585 0 obj <<
+6553 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 309.228 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.samba.org/samba/support.html)>>
 >> endobj
-6589 0 obj <<
-/D [6587 0 R /XYZ 100.892 685.529 null]
+6557 0 obj <<
+/D [6555 0 R /XYZ 100.892 685.529 null]
 >> endobj
 966 0 obj <<
-/D [6587 0 R /XYZ 100.892 528.878 null]
+/D [6555 0 R /XYZ 100.892 528.878 null]
 >> endobj
-6590 0 obj <<
-/D [6587 0 R /XYZ 100.892 499.522 null]
+6558 0 obj <<
+/D [6555 0 R /XYZ 100.892 499.522 null]
 >> endobj
-6586 0 obj <<
+6554 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R /F54 1912 0 R /F30 1928 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6593 0 obj <<
+6561 0 obj <<
 /Length 713       
 /Filter /FlateDecode
 >>
@@ -37395,21 +36567,21 @@
 ®¸¿Œa“æâÒ9­÷*<b7ÚAc>!ùì½ EŸ#µñ#5v>¸{èOò±¥](—sÄÍëªûn! ìõ	Тàz¡¿œ©7&1¹ÎŸ’HÕÒ‚üF+ñ¸™z}&žö3œf¨ÄwÇB¥Å›^ñûp+–• ù±ïÞ:$gW”¤jé­ïGÞ®ø„#µ¨ç­k^$á«‚ÛëIÃ\rxZ šd4 ÆÑR4›u¾yÍöo‡È à“™qÝø‚ Í$€¡›ýÇÛ}$dGé;³?sñp0åå–Àþ–BÎk‚¸Ž×ÚáRߺüï«ÂkãþGÎí–ƒ£?–ó^¾<ç/븖€w
 endstream
 endobj
-6592 0 obj <<
+6560 0 obj <<
 /Type /Page
-/Contents 6593 0 R
-/Resources 6591 0 R
+/Contents 6561 0 R
+/Resources 6559 0 R
 /MediaBox [0 0 612 792]
-/Parent 6571 0 R
+/Parent 6539 0 R
 >> endobj
-6594 0 obj <<
-/D [6592 0 R /XYZ 151.701 685.529 null]
+6562 0 obj <<
+/D [6560 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6591 0 obj <<
+6559 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6601 0 obj <<
+6569 0 obj <<
 /Length 1388      
 /Filter /FlateDecode
 >>
@@ -37423,50 +36595,50 @@
 *°ËË|´ó!%|HÖõùÃ+8Å«K~ß.«ê%phvë]ø¼Ò×ñÒæEN®nuñ<(•² ¼èobKÊK/ð§ó8Vq
 endstream
 endobj
-6600 0 obj <<
+6568 0 obj <<
 /Type /Page
-/Contents 6601 0 R
-/Resources 6599 0 R
+/Contents 6569 0 R
+/Resources 6567 0 R
 /MediaBox [0 0 612 792]
-/Parent 6571 0 R
-/Annots [ 6595 0 R ]
+/Parent 6539 0 R
+/Annots [ 6563 0 R ]
 >> endobj
-6595 0 obj <<
+6563 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.359 118.128 444.17 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (swxpp001) >>
 >> endobj
-6602 0 obj <<
-/D [6600 0 R /XYZ 100.892 685.529 null]
+6570 0 obj <<
+/D [6568 0 R /XYZ 100.892 685.529 null]
 >> endobj
 970 0 obj <<
-/D [6600 0 R /XYZ 100.892 660.623 null]
+/D [6568 0 R /XYZ 100.892 660.623 null]
 >> endobj
 2043 0 obj <<
-/D [6600 0 R /XYZ 100.892 476.122 null]
+/D [6568 0 R /XYZ 100.892 476.122 null]
 >> endobj
 974 0 obj <<
-/D [6600 0 R /XYZ 100.892 340.464 null]
+/D [6568 0 R /XYZ 100.892 340.464 null]
 >> endobj
-2447 0 obj <<
-/D [6600 0 R /XYZ 100.892 299.683 null]
+2442 0 obj <<
+/D [6568 0 R /XYZ 100.892 299.683 null]
 >> endobj
-6603 0 obj <<
-/D [6600 0 R /XYZ 100.892 197.49 null]
+6571 0 obj <<
+/D [6568 0 R /XYZ 100.892 197.49 null]
 >> endobj
-6604 0 obj <<
-/D [6600 0 R /XYZ 100.892 176.591 null]
+6572 0 obj <<
+/D [6568 0 R /XYZ 100.892 176.591 null]
 >> endobj
-6605 0 obj <<
-/D [6600 0 R /XYZ 100.892 153.572 null]
+6573 0 obj <<
+/D [6568 0 R /XYZ 100.892 153.572 null]
 >> endobj
-6599 0 obj <<
+6567 0 obj <<
 /Font << /F77 1973 0 R /F17 1131 0 R /F15 1133 0 R /F28 1124 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6615 0 obj <<
+6583 0 obj <<
 /Length 1318      
 /Filter /FlateDecode
 >>
@@ -37484,15 +36656,15 @@
 5tµ„eˆT8A5ËÄ+#Cõ#óà[œ›ÿ§ˆÇ|NçTR|æ«È·y !«žâ[øÏfÿD¹x;†%$Oó3ÕZ!éÇD±ª.›ö–dDÜFÉwÒ@«wˆ5m5+×kB[ÙŸÚHCÀû&ÖŠ½ÏÈɃkÎŶrÝ…%ßêÊljpûÀÌ¢ó•§ámH‰;·',¬§Z*7›tPÖ~„ÿ‚ÿ f”Q%
 endstream
 endobj
-6614 0 obj <<
+6582 0 obj <<
 /Type /Page
-/Contents 6615 0 R
-/Resources 6613 0 R
+/Contents 6583 0 R
+/Resources 6581 0 R
 /MediaBox [0 0 612 792]
-/Parent 6622 0 R
-/Annots [ 6597 0 R 6607 0 R 6619 0 R 6609 0 R ]
+/Parent 6590 0 R
+/Annots [ 6565 0 R 6575 0 R 6587 0 R 6577 0 R ]
 >> endobj
-6596 0 obj <<
+6564 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 419
@@ -37707,61 +36879,61 @@
 û{ßø?üW;I7¿þz‹>‡E=W¿#ñè»øÒÿÂømt*  J’ÎQ·Ûït‰Úð8OÒ9ÞœqSÝx?D`æbüNUÞ´N{‹üÊG:í½ª y&£œÎ]ûPõùy–þ²µJ¥:|i¤S©T‡/t*•êð¥‘N¥R¾4Ò©TªÃ—F:•Juø"¼òû/§éû†Ý—OÞºà›“;ΞN{[Ë™J¥R=“ò·pùG¸ü#Œßî¢úƒÉ;O&ï X˲Úw?|ùlöŸ1wKŸ½ÛþÒ—"ï^-gù;•w&_úã„´$÷˼ߩg­ù¥¿[sgöžõÞÝÞ7Ïh§oïö®{V1ÐÌ-€.Ì[È×ù‹¼*•JµoúÿAN!
 endstream
 endobj
-6597 0 obj <<
+6565 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.523 280.785 288.334 292.353]
 /Subtype /Link
 /A << /S /GoTo /D (swxpp004) >>
 >> endobj
-6607 0 obj <<
+6575 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [490.117 231.082 511.352 242.772]
 /Subtype /Link
 /A << /S /GoTo /D (swxpp006) >>
 >> endobj
-6619 0 obj <<
+6587 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.523 219.654 272.728 228.677]
 /Subtype /Link
 /A << /S /GoTo /D (swxpp006) >>
 >> endobj
-6609 0 obj <<
+6577 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [319.644 154.281 375.455 165.849]
 /Subtype /Link
 /A << /S /GoTo /D (swxpp007) >>
 >> endobj
-6616 0 obj <<
-/D [6614 0 R /XYZ 151.701 685.529 null]
+6584 0 obj <<
+/D [6582 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1803 0 obj <<
-/D [6614 0 R /XYZ 151.701 660.623 null]
+/D [6582 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6606 0 obj <<
-/D [6614 0 R /XYZ 151.701 643.753 null]
+6574 0 obj <<
+/D [6582 0 R /XYZ 151.701 643.753 null]
 >> endobj
-6617 0 obj <<
-/D [6614 0 R /XYZ 151.701 376.156 null]
+6585 0 obj <<
+/D [6582 0 R /XYZ 151.701 376.156 null]
 >> endobj
-6618 0 obj <<
-/D [6614 0 R /XYZ 151.701 281.781 null]
+6586 0 obj <<
+/D [6582 0 R /XYZ 151.701 281.781 null]
 >> endobj
-6620 0 obj <<
-/D [6614 0 R /XYZ 151.701 220.65 null]
+6588 0 obj <<
+/D [6582 0 R /XYZ 151.701 220.65 null]
 >> endobj
-6621 0 obj <<
-/D [6614 0 R /XYZ 151.701 155.277 null]
+6589 0 obj <<
+/D [6582 0 R /XYZ 151.701 155.277 null]
 >> endobj
-6613 0 obj <<
+6581 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R >>
-/XObject << /Im24 6596 0 R >>
+/XObject << /Im24 6564 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6629 0 obj <<
+6597 0 obj <<
 /Length 1342      
 /Filter /FlateDecode
 >>
@@ -37776,15 +36948,15 @@
 üLÚˆË'pZ„ËY:~2Áuþºqâ=à{Õú* ?	Tæ²—ýІŠ`ýº3XgRN“-Z‡tüzöŸÿ¡n T
 endstream
 endobj
-6628 0 obj <<
+6596 0 obj <<
 /Type /Page
-/Contents 6629 0 R
-/Resources 6627 0 R
+/Contents 6597 0 R
+/Resources 6595 0 R
 /MediaBox [0 0 612 792]
-/Parent 6622 0 R
-/Annots [ 6611 0 R 6626 0 R ]
+/Parent 6590 0 R
+/Annots [ 6579 0 R 6594 0 R ]
 >> endobj
-6598 0 obj <<
+6566 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 419
@@ -38033,38 +37205,38 @@
 öÓÙ+ê#ØdÃ#õ;O~jßý}dw˜é ˆ{×ö÷ßÛLd [>Ï3Ø{l{…ç˾¨êivw¹xPÙìlò#ˆÏtœ½ÀÜ“±¸ßø>î¾ò6ùQ†¿lMé?Ìt„þÃLGé?Ìt„þÃLGé?Ìt„þ#øÿëñw$ÉÓ£ýwœÜ~KŒ[¶¾ÿú¥yF!"½ÉŸcòçÈîìcùïÝ=¹wÀF^«Ý~óåÅÊ¿ wkïm/íC‘íoËYÿLe«ùÚ'”5Þ¯«½•‹F~íïÖ´ºwÑzw»ß\°ü>}¼Û½î¢(°äÈÏ ì#¿t“¿ÈK!Wÿ´h<à
 endstream
 endobj
-6611 0 obj <<
+6579 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.108 321.432 256.918 333.001]
 /Subtype /Link
 /A << /S /GoTo /D (swxpp008) >>
 >> endobj
-6626 0 obj <<
+6594 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [299.041 249.125 355.675 260.815]
 /Subtype /Link
 /A << /S /GoTo /D (swxpp007) >>
 >> endobj
-6630 0 obj <<
-/D [6628 0 R /XYZ 100.892 685.529 null]
+6598 0 obj <<
+/D [6596 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1804 0 obj <<
-/D [6628 0 R /XYZ 100.892 660.623 null]
+/D [6596 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6623 0 obj <<
-/D [6628 0 R /XYZ 100.892 643.753 null]
+6591 0 obj <<
+/D [6596 0 R /XYZ 100.892 643.753 null]
 >> endobj
-6631 0 obj <<
-/D [6628 0 R /XYZ 100.892 322.429 null]
+6599 0 obj <<
+/D [6596 0 R /XYZ 100.892 322.429 null]
 >> endobj
-6627 0 obj <<
+6595 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R >>
-/XObject << /Im25 6598 0 R >>
+/XObject << /Im25 6566 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6635 0 obj <<
+6603 0 obj <<
 /Length 770       
 /Filter /FlateDecode
 >>
@@ -38078,14 +37250,14 @@
 ÑÐéÔ\ÍÚ	rkžõqJÁý_eá6žtÒnÔJäÛ¶éçg7m“Ô²ö2µÕA>Ø	£Ô5ð„€ÀÚvƒ¸ŸA0‡?çäåÀ‚܍¾0ðË„/]VwA(àýߌ.¸rayæbnú"»u'ƒéÌ«—“áà—áh
 endstream
 endobj
-6634 0 obj <<
+6602 0 obj <<
 /Type /Page
-/Contents 6635 0 R
-/Resources 6633 0 R
+/Contents 6603 0 R
+/Resources 6601 0 R
 /MediaBox [0 0 612 792]
-/Parent 6622 0 R
+/Parent 6590 0 R
 >> endobj
-6608 0 obj <<
+6576 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 327
@@ -38191,7 +37363,7 @@
 'ʤN•(û¸â3[ŒyÒåÔ)Eð~ÍÂׁ³Ñʱm!‚|/)×±­˜cÛ ‚ÿùZNµæb±h$R6Ü­(¤X,šé%Q7®â­»m¨T¤Dðß9• "RÊul{Ëž¶ºqÒ0ašS­³Ê1ûš›tºq‚w/”Ê1i_•†qÞ	3ôÈ+Ÿ_<cÁÌ47KY¢­M÷üió…KfI¾kP__ÛÒÒº}Û£ä¾ef(tóïx|Ýw^«Ó}Ë.>ùð[®<C»i Q6Sõ¢‰û[wݬwg¬T	!¥2Í2Ã!E»¢ùF¸x•+×JÌGQoÏ×±²LR{¡‰m«ÑÓÂ}5Ó‘rXÀÛ iŒ¯-cL7œjÆtéfL7œjÆtéfL7œjÆtéfL7œjÆtéfL7œjÆt#0imYCEÅŒJ³¡¼c+YUiËÅb‘!nc,ÝûѶm;ÐÓbÂý0z #z €Èë™.ŸÏ½ª\§ÈuΙ~j›éö1Ù~š›aÊ0IÆ»®çøボWQæ	265ÇYýmšªrQìw9€‚²˜PûÑ]È?Æ^ÿ„7
 endstream
 endobj
-6610 0 obj <<
+6578 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 327
@@ -38318,27 +37490,27 @@
 À„Ú‹ÞbþDÃ0£Ëÿ*¦?_
 endstream
 endobj
-6636 0 obj <<
-/D [6634 0 R /XYZ 151.701 685.529 null]
+6604 0 obj <<
+/D [6602 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1805 0 obj <<
-/D [6634 0 R /XYZ 151.701 660.623 null]
+/D [6602 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6624 0 obj <<
-/D [6634 0 R /XYZ 151.701 643.753 null]
+6592 0 obj <<
+/D [6602 0 R /XYZ 151.701 643.753 null]
 >> endobj
 1806 0 obj <<
-/D [6634 0 R /XYZ 151.701 431.892 null]
+/D [6602 0 R /XYZ 151.701 431.892 null]
 >> endobj
-6625 0 obj <<
-/D [6634 0 R /XYZ 151.701 415.022 null]
+6593 0 obj <<
+/D [6602 0 R /XYZ 151.701 415.022 null]
 >> endobj
-6633 0 obj <<
+6601 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R >>
-/XObject << /Im26 6608 0 R /Im27 6610 0 R >>
+/XObject << /Im26 6576 0 R /Im27 6578 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6639 0 obj <<
+6607 0 obj <<
 /Length 1648      
 /Filter /FlateDecode
 >>
@@ -38357,14 +37529,14 @@
 hϯ®<Í£Ý!_þÀ $ù¢²&Ã&ÌMl»Ç1øèýeËê
 endstream
 endobj
-6638 0 obj <<
+6606 0 obj <<
 /Type /Page
-/Contents 6639 0 R
-/Resources 6637 0 R
+/Contents 6607 0 R
+/Resources 6605 0 R
 /MediaBox [0 0 612 792]
-/Parent 6622 0 R
+/Parent 6590 0 R
 >> endobj
-6612 0 obj <<
+6580 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 326
@@ -38535,27 +37707,27 @@
 鍊üÃ0;Ⱦík
 endstream
 endobj
-6640 0 obj <<
-/D [6638 0 R /XYZ 100.892 685.529 null]
+6608 0 obj <<
+/D [6606 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1807 0 obj <<
-/D [6638 0 R /XYZ 100.892 660.623 null]
+/D [6606 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6632 0 obj <<
-/D [6638 0 R /XYZ 100.892 643.753 null]
+6600 0 obj <<
+/D [6606 0 R /XYZ 100.892 643.753 null]
 >> endobj
 978 0 obj <<
-/D [6638 0 R /XYZ 100.892 286.601 null]
+/D [6606 0 R /XYZ 100.892 286.601 null]
 >> endobj
-6641 0 obj <<
-/D [6638 0 R /XYZ 100.892 256.356 null]
+6609 0 obj <<
+/D [6606 0 R /XYZ 100.892 256.356 null]
 >> endobj
-6637 0 obj <<
+6605 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F17 1131 0 R >>
-/XObject << /Im28 6612 0 R >>
+/XObject << /Im28 6580 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6644 0 obj <<
+6612 0 obj <<
 /Length 1733      
 /Filter /FlateDecode
 >>
@@ -38579,21 +37751,21 @@
 ·ÿåæPÕ£ÚÖßr„S¼ü¶nY«ÃøRÿøá_?}ןÃåSãz§¯%o®>Ý­¯÷œ¸ _áóñÃÃ㻇ǧ·Ã‡§Ç)úB@¥ÞMi{úHÝß­NŽJýÕ2üG2´o׳ÿO¤Ü
 endstream
 endobj
-6643 0 obj <<
+6611 0 obj <<
 /Type /Page
-/Contents 6644 0 R
-/Resources 6642 0 R
+/Contents 6612 0 R
+/Resources 6610 0 R
 /MediaBox [0 0 612 792]
-/Parent 6622 0 R
+/Parent 6590 0 R
 >> endobj
-6645 0 obj <<
-/D [6643 0 R /XYZ 151.701 685.529 null]
+6613 0 obj <<
+/D [6611 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6642 0 obj <<
+6610 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6648 0 obj <<
+6616 0 obj <<
 /Length 944       
 /Filter /FlateDecode
 >>
@@ -38607,21 +37779,21 @@
 ÞN³¬ís¹ÔU²TZˆi|;h%´'ƒw1WTÛëõ^èuë”Oó£“U€±¬rÖëÞ	ÞÑ^1¼Ôê͏ §Sü®øŽGY“
 endstream
 endobj
-6647 0 obj <<
+6615 0 obj <<
 /Type /Page
-/Contents 6648 0 R
-/Resources 6646 0 R
+/Contents 6616 0 R
+/Resources 6614 0 R
 /MediaBox [0 0 612 792]
-/Parent 6622 0 R
+/Parent 6590 0 R
 >> endobj
-6649 0 obj <<
-/D [6647 0 R /XYZ 100.892 685.529 null]
+6617 0 obj <<
+/D [6615 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6646 0 obj <<
+6614 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6653 0 obj <<
+6621 0 obj <<
 /Length 2002      
 /Filter /FlateDecode
 >>
@@ -38646,35 +37818,35 @@
 -Bª…·Øfñ‹EÏÅïmbýÿѪ)h—å\BÜ9î0^ýY±>*‘Besê_ûcú¦8\þE­–{àµ8kÝ-2›pú~8îþ’nD#
 endstream
 endobj
-6652 0 obj <<
+6620 0 obj <<
 /Type /Page
-/Contents 6653 0 R
-/Resources 6651 0 R
+/Contents 6621 0 R
+/Resources 6619 0 R
 /MediaBox [0 0 612 792]
-/Parent 6656 0 R
-/Annots [ 6650 0 R ]
+/Parent 6624 0 R
+/Annots [ 6618 0 R ]
 >> endobj
-6650 0 obj <<
+6618 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [373.707 131.677 448.423 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (ch12SL) >>
 >> endobj
-6654 0 obj <<
-/D [6652 0 R /XYZ 151.701 685.529 null]
+6622 0 obj <<
+/D [6620 0 R /XYZ 151.701 685.529 null]
 >> endobj
 982 0 obj <<
-/D [6652 0 R /XYZ 151.701 660.623 null]
+/D [6620 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6655 0 obj <<
-/D [6652 0 R /XYZ 151.701 638.691 null]
+6623 0 obj <<
+/D [6620 0 R /XYZ 151.701 638.691 null]
 >> endobj
-6651 0 obj <<
+6619 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R /F60 1917 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6664 0 obj <<
+6632 0 obj <<
 /Length 1752      
 /Filter /FlateDecode
 >>
@@ -38695,81 +37867,81 @@
 ˆ·8÷úªŽ§à·¶¤·!Aݳ|öt|yüÚ™õ‘^N¦ï!;æ›°4¤ÃX©Âhú¶UY sº\D$B¶ëxhÈœLR¦¯¬ó÷l@…®ùŽ%båî…¢eçðƒBl7¹Iå¨Çr¤	i†RËÉ,½Èe}=ý|¢q“¿a{ÃM¢°~W·ÃyúÏýŽA4gk$¢±Ê¤¹aö-ŒÛ=~e3†ôÌ9õFÅ©‡¿³ÔÃíËÔËS?B±û‚íªÔf=T‚&ÚË,‡ßѸ§Ï1§#eåäš«e’Æn2Þ¯õ¹·’tù×çï7ØÐUæWôÍ9Wxü½{Xý•ò‹¨
 endstream
 endobj
-6663 0 obj <<
+6631 0 obj <<
 /Type /Page
-/Contents 6664 0 R
-/Resources 6662 0 R
+/Contents 6632 0 R
+/Resources 6630 0 R
 /MediaBox [0 0 612 792]
-/Parent 6656 0 R
-/Annots [ 6658 0 R 6659 0 R 6660 0 R 6669 0 R 6661 0 R ]
+/Parent 6624 0 R
+/Annots [ 6626 0 R 6627 0 R 6628 0 R 6637 0 R 6629 0 R ]
 >> endobj
-6658 0 obj <<
+6626 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [167.337 598.716 242.681 610.406]
 /Subtype /Link
 /A << /S /GoTo /D (ch12RHscript) >>
 >> endobj
-6659 0 obj <<
+6627 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [288.897 348.477 363.985 360.166]
 /Subtype /Link
 /A << /S /GoTo /D (loopback) >>
 >> endobj
-6660 0 obj <<
+6628 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.732 219.753 460.543 231.443]
 /Subtype /Link
 /A << /S /GoTo /D (dnsloopy) >>
 >> endobj
-6669 0 obj <<
+6637 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.441 206.204 216.438 217.893]
 /Subtype /Link
 /A << /S /GoTo /D (dnsloopy) >>
 >> endobj
-6661 0 obj <<
+6629 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [384.339 131.677 460.543 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (roothint) >>
 >> endobj
-6665 0 obj <<
-/D [6663 0 R /XYZ 100.892 685.529 null]
+6633 0 obj <<
+/D [6631 0 R /XYZ 100.892 685.529 null]
 >> endobj
 986 0 obj <<
-/D [6663 0 R /XYZ 100.892 514.566 null]
+/D [6631 0 R /XYZ 100.892 514.566 null]
 >> endobj
-6666 0 obj <<
-/D [6663 0 R /XYZ 100.892 484.982 null]
+6634 0 obj <<
+/D [6631 0 R /XYZ 100.892 484.982 null]
 >> endobj
 990 0 obj <<
-/D [6663 0 R /XYZ 100.892 423.671 null]
+/D [6631 0 R /XYZ 100.892 423.671 null]
 >> endobj
-6667 0 obj <<
-/D [6663 0 R /XYZ 100.892 385.875 null]
+6635 0 obj <<
+/D [6631 0 R /XYZ 100.892 385.875 null]
 >> endobj
 994 0 obj <<
-/D [6663 0 R /XYZ 100.892 281.398 null]
+/D [6631 0 R /XYZ 100.892 281.398 null]
 >> endobj
-6668 0 obj <<
-/D [6663 0 R /XYZ 100.892 243.602 null]
+6636 0 obj <<
+/D [6631 0 R /XYZ 100.892 243.602 null]
 >> endobj
 998 0 obj <<
-/D [6663 0 R /XYZ 100.892 181.894 null]
+/D [6631 0 R /XYZ 100.892 181.894 null]
 >> endobj
-6670 0 obj <<
-/D [6663 0 R /XYZ 100.892 155.526 null]
+6638 0 obj <<
+/D [6631 0 R /XYZ 100.892 155.526 null]
 >> endobj
-6662 0 obj <<
+6630 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6679 0 obj <<
+6647 0 obj <<
 /Length 1539      
 /Filter /FlateDecode
 >>
@@ -38791,78 +37963,78 @@
 å´·¯áÄóľ/Üß‹ËâX?ýAäÂÓ±n·Ïï?<Þ}òë²Zû{qͺÚÝ6˜{fD@'Q<œÏì͏ý¶Õ–cµìñƒÆ´p+Ýг¾Õv\ˆ-ì[oŽÓ2‹™Ûß«–þ"$ì÷îk/@$ècOœ^¤3™ŠÂ(ÙøGì"lç©“¸¾ãÆŒÌ%$d´J‘_ÛÏ’@„Ñå|?G?eÔ¥vD?&w‚~Ü{~䎈ÅE\üZLÌáu^[¾º0^aÿü´‘"sèâ§èÍ〧é<xϝ"—qFüˆS'‡/ü;þmŒí
 endstream
 endobj
-6678 0 obj <<
+6646 0 obj <<
 /Type /Page
-/Contents 6679 0 R
-/Resources 6677 0 R
+/Contents 6647 0 R
+/Resources 6645 0 R
 /MediaBox [0 0 612 792]
-/Parent 6656 0 R
-/Annots [ 6672 0 R 6673 0 R 6674 0 R 6675 0 R 6676 0 R ]
+/Parent 6624 0 R
+/Annots [ 6640 0 R 6641 0 R 6642 0 R 6643 0 R 6644 0 R ]
 >> endobj
-6672 0 obj <<
+6640 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [353.065 208.109 428.312 219.798]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-ldapreconfa) >>
 >> endobj
-6673 0 obj <<
+6641 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.076 208.109 508.322 219.798]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-ldapreconfb) >>
 >> endobj
-6674 0 obj <<
+6642 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.592 194.256 332.623 206.249]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-ldapreconfc) >>
 >> endobj
-6675 0 obj <<
+6643 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [346.645 131.677 420.607 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-ldifpata) >>
 >> endobj
-6676 0 obj <<
+6644 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.039 131.677 515.001 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (sbehap-ldifpatb) >>
 >> endobj
-6680 0 obj <<
-/D [6678 0 R /XYZ 151.701 685.529 null]
+6648 0 obj <<
+/D [6646 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1002 0 obj <<
-/D [6678 0 R /XYZ 151.701 613.049 null]
+/D [6646 0 R /XYZ 151.701 613.049 null]
 >> endobj
-3774 0 obj <<
-/D [6678 0 R /XYZ 151.701 584.481 null]
+3760 0 obj <<
+/D [6646 0 R /XYZ 151.701 584.481 null]
 >> endobj
 1006 0 obj <<
-/D [6678 0 R /XYZ 151.701 504.176 null]
+/D [6646 0 R /XYZ 151.701 504.176 null]
 >> endobj
-6681 0 obj <<
-/D [6678 0 R /XYZ 151.701 476.305 null]
+6649 0 obj <<
+/D [6646 0 R /XYZ 151.701 476.305 null]
 >> endobj
-6682 0 obj <<
-/D [6678 0 R /XYZ 151.701 357.105 null]
+6650 0 obj <<
+/D [6646 0 R /XYZ 151.701 357.105 null]
 >> endobj
-6683 0 obj <<
-/D [6678 0 R /XYZ 151.701 233.461 null]
+6651 0 obj <<
+/D [6646 0 R /XYZ 151.701 233.461 null]
 >> endobj
-6684 0 obj <<
-/D [6678 0 R /XYZ 151.701 154.605 null]
+6652 0 obj <<
+/D [6646 0 R /XYZ 151.701 154.605 null]
 >> endobj
-6677 0 obj <<
+6645 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6692 0 obj <<
+6660 0 obj <<
 /Length 1141      
 /Filter /FlateDecode
 >>
@@ -38878,24 +38050,24 @@
 l«®²Oðڗ߉èÿAÂͧ°}ÊÿQþa¡
 endstream
 endobj
-6691 0 obj <<
+6659 0 obj <<
 /Type /Page
-/Contents 6692 0 R
-/Resources 6690 0 R
+/Contents 6660 0 R
+/Resources 6658 0 R
 /MediaBox [0 0 612 792]
-/Parent 6656 0 R
+/Parent 6624 0 R
 >> endobj
-6693 0 obj <<
-/D [6691 0 R /XYZ 100.892 685.529 null]
+6661 0 obj <<
+/D [6659 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6694 0 obj <<
-/D [6691 0 R /XYZ 100.892 633.69 null]
+6662 0 obj <<
+/D [6659 0 R /XYZ 100.892 633.69 null]
 >> endobj
-6690 0 obj <<
+6658 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6697 0 obj <<
+6665 0 obj <<
 /Length 911       
 /Filter /FlateDecode
 >>
@@ -38909,24 +38081,24 @@
 IàÉn¬6G ÍŸ4$B„<üû?]oÁ°¯ÝüáîÅ…/À挼Ø×ñŒœÙN0R5Œþ'ٍðë÷fÏ“
 endstream
 endobj
-6696 0 obj <<
+6664 0 obj <<
 /Type /Page
-/Contents 6697 0 R
-/Resources 6695 0 R
+/Contents 6665 0 R
+/Resources 6663 0 R
 /MediaBox [0 0 612 792]
-/Parent 6656 0 R
+/Parent 6624 0 R
 >> endobj
-6698 0 obj <<
-/D [6696 0 R /XYZ 151.701 685.529 null]
+6666 0 obj <<
+/D [6664 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6699 0 obj <<
-/D [6696 0 R /XYZ 151.701 614.436 null]
+6667 0 obj <<
+/D [6664 0 R /XYZ 151.701 614.436 null]
 >> endobj
-6695 0 obj <<
+6663 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6702 0 obj <<
+6670 0 obj <<
 /Length 1040      
 /Filter /FlateDecode
 >>
@@ -38939,27 +38111,27 @@
 ¿bÿÞô±#
 endstream
 endobj
-6701 0 obj <<
+6669 0 obj <<
 /Type /Page
-/Contents 6702 0 R
-/Resources 6700 0 R
+/Contents 6670 0 R
+/Resources 6668 0 R
 /MediaBox [0 0 612 792]
-/Parent 6656 0 R
+/Parent 6624 0 R
 >> endobj
-6703 0 obj <<
-/D [6701 0 R /XYZ 100.892 685.529 null]
+6671 0 obj <<
+/D [6669 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6704 0 obj <<
-/D [6701 0 R /XYZ 100.892 432.877 null]
+6672 0 obj <<
+/D [6669 0 R /XYZ 100.892 432.877 null]
 >> endobj
-6705 0 obj <<
-/D [6701 0 R /XYZ 100.892 324.483 null]
+6673 0 obj <<
+/D [6669 0 R /XYZ 100.892 324.483 null]
 >> endobj
-6700 0 obj <<
+6668 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F59 1905 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6709 0 obj <<
+6677 0 obj <<
 /Length 1207      
 /Filter /FlateDecode
 >>
@@ -38974,34 +38146,34 @@
 US>ôz“„ÚŸ·¿Ýâ¯$±8q!›3Žû]z[zØ;™´Éóm©­cNú`"J=ôTââEb‰eÆ®³ŽÛ~€Ð`„W]´MãÌ«­?í¿éIõ­“VD^AØÓáŒÇà"Nh86ª)ú¼Ë¥x—ðŒØî…ó^Ãó‹<\¯¯—›ë5qb[E«ˆUDâXÅIÇ膧Ìågm;ÄÑ·½{ڐ•¾›R»AX‰?lšUu.…å0|W7'85£í•äœ‡ÇWó8ÜÙ7……¸®„¯Üwû¼"ñY7e‹öŒCײ@v¯eû{ßšÁ`‡?¾¦#q’8·®ã²Ìu>œMÜÏL]É-8¯”ûr×·µ£ìßFµíÕä4HIŽ‹’_ç„H£àxí§npJ²”Ã\{‚íÛÚ[îì/°a¾çþõàƒ­uß·¶Ÿ×­Éíq<“­o,æP•ÇíÍnmœ²J›UÆao`‹ø,¯ätE˜`˜VF}Z?ŸE¸|—žÂSÂ’ô¸Ï{½\í…‚–Ø)Ò¨aÙõ-îfYÉzùÌØ™o–äÅãzüËöù	¥úGTúÿ
 endstream
 endobj
-6708 0 obj <<
+6676 0 obj <<
 /Type /Page
-/Contents 6709 0 R
-/Resources 6707 0 R
+/Contents 6677 0 R
+/Resources 6675 0 R
 /MediaBox [0 0 612 792]
-/Parent 6712 0 R
-/Annots [ 6706 0 R ]
+/Parent 6680 0 R
+/Annots [ 6674 0 R ]
 >> endobj
-6706 0 obj <<
+6674 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 345.915 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://sourceforge.net/projects/lam/)>>
 >> endobj
-6710 0 obj <<
-/D [6708 0 R /XYZ 151.701 685.529 null]
+6678 0 obj <<
+/D [6676 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1010 0 obj <<
-/D [6708 0 R /XYZ 151.701 283.884 null]
+/D [6676 0 R /XYZ 151.701 283.884 null]
 >> endobj
-6711 0 obj <<
-/D [6708 0 R /XYZ 151.701 251.445 null]
+6679 0 obj <<
+/D [6676 0 R /XYZ 151.701 251.445 null]
 >> endobj
-6707 0 obj <<
+6675 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F59 1905 0 R /F15 1133 0 R /F17 1131 0 R /F30 1928 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6716 0 obj <<
+6684 0 obj <<
 /Length 1473      
 /Filter /FlateDecode
 >>
@@ -39023,28 +38195,28 @@
 JüHJÆetÐÅûŸG"È {¢”;ýz4’}ö„A4†ŒMß7ÏæóívËšMÃjÝϏö\•f,»Í¿°ÿƒaþå	X­
 endstream
 endobj
-6715 0 obj <<
+6683 0 obj <<
 /Type /Page
-/Contents 6716 0 R
-/Resources 6714 0 R
+/Contents 6684 0 R
+/Resources 6682 0 R
 /MediaBox [0 0 612 792]
-/Parent 6712 0 R
-/Annots [ 6713 0 R ]
+/Parent 6680 0 R
+/Annots [ 6681 0 R ]
 >> endobj
-6713 0 obj <<
+6681 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 215.082 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.php.net/)>>
 >> endobj
-6717 0 obj <<
-/D [6715 0 R /XYZ 100.892 685.529 null]
+6685 0 obj <<
+/D [6683 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6714 0 obj <<
+6682 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F54 1912 0 R /F30 1928 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6722 0 obj <<
+6690 0 obj <<
 /Length 1181      
 /Filter /FlateDecode
 >>
@@ -39064,41 +38236,41 @@
 ^û‡`<ŸOÚNøú;ñ^ÐhÌ˶¾ðáDQ?
 endstream
 endobj
-6721 0 obj <<
+6689 0 obj <<
 /Type /Page
-/Contents 6722 0 R
-/Resources 6720 0 R
+/Contents 6690 0 R
+/Resources 6688 0 R
 /MediaBox [0 0 612 792]
-/Parent 6712 0 R
-/Annots [ 6718 0 R ]
+/Parent 6680 0 R
+/Annots [ 6686 0 R ]
 >> endobj
-6718 0 obj <<
+6686 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [372.381 158.775 448.37 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (lamcfg) >>
 >> endobj
-6723 0 obj <<
-/D [6721 0 R /XYZ 151.701 685.529 null]
+6691 0 obj <<
+/D [6689 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6724 0 obj <<
-/D [6721 0 R /XYZ 151.701 633.993 null]
+6692 0 obj <<
+/D [6689 0 R /XYZ 151.701 633.993 null]
 >> endobj
-6725 0 obj <<
-/D [6721 0 R /XYZ 151.701 476.234 null]
+6693 0 obj <<
+/D [6689 0 R /XYZ 151.701 476.234 null]
 >> endobj
-6726 0 obj <<
-/D [6721 0 R /XYZ 151.701 423.981 null]
+6694 0 obj <<
+/D [6689 0 R /XYZ 151.701 423.981 null]
 >> endobj
-6727 0 obj <<
-/D [6721 0 R /XYZ 151.701 298.74 null]
+6695 0 obj <<
+/D [6689 0 R /XYZ 151.701 298.74 null]
 >> endobj
-6720 0 obj <<
+6688 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6737 0 obj <<
+6705 0 obj <<
 /Length 2309      
 /Filter /FlateDecode
 >>
@@ -39132,59 +38304,59 @@
 Òù¥@¡±c®ã‚ê˜âðÎ(a×àу[Zœ÷«QøñêëÁÇW;©xh‚Ë·®kÙ]©ðŽ¦$å$³:ÿrJù¦×í†[ÂÀ½t…{b£×ÐZ…+F5^{Å$v©{†ŒeÙ櫬T2ÉÅß¾æH­ýâ9GÉÈ$ežgôšNQø0œšD}õ<™­Ÿ¤u"Ä×ÉBxþóÊ»7ùZ<OdV„×—Ó4¿»»këPp×VÝ‹ÅW{•°YM«ÿu%úò<ó³
 endstream
 endobj
-6736 0 obj <<
+6704 0 obj <<
 /Type /Page
-/Contents 6737 0 R
-/Resources 6735 0 R
+/Contents 6705 0 R
+/Resources 6703 0 R
 /MediaBox [0 0 612 792]
-/Parent 6712 0 R
-/Annots [ 6729 0 R 6730 0 R 6732 0 R 6734 0 R 6719 0 R ]
+/Parent 6680 0 R
+/Annots [ 6697 0 R 6698 0 R 6700 0 R 6702 0 R 6687 0 R ]
 >> endobj
-6729 0 obj <<
+6697 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [381.747 542.91 457.513 554.6]
 /Subtype /Link
 /A << /S /GoTo /D (lamconf) >>
 >> endobj
-6730 0 obj <<
+6698 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.441 412.176 210.252 423.745]
 /Subtype /Link
 /A << /S /GoTo /D (lam-login) >>
 >> endobj
-6732 0 obj <<
+6700 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [277.614 362.737 333.962 374.427]
 /Subtype /Link
 /A << /S /GoTo /D (lam-config) >>
 >> endobj
-6734 0 obj <<
+6702 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [321.724 141.916 377.502 153.606]
 /Subtype /Link
 /A << /S /GoTo /D (lam-user) >>
 >> endobj
-6719 0 obj <<
+6687 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 219.789 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://localhost/lam)>>
 >> endobj
-6738 0 obj <<
-/D [6736 0 R /XYZ 100.892 685.529 null]
+6706 0 obj <<
+/D [6704 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6739 0 obj <<
-/D [6736 0 R /XYZ 100.892 660.623 null]
+6707 0 obj <<
+/D [6704 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6735 0 obj <<
+6703 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F30 1928 0 R /F60 1917 0 R /F59 1905 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6752 0 obj <<
+6720 0 obj <<
 /Length 1203      
 /Filter /FlateDecode
 >>
@@ -39202,22 +38374,22 @@
 A¢‹~Å&O£<ÈnÑî%½ôk/?¯OÔLò¨¨ÖJd’"W.øø„*ÍÏ €€°oÅ§!;Iþ¾„3¤ü9r)¨öÓØåÐA‚Ò[‰Ë;úŸ×w/Ð!x†”n™‚èüŽ€P£5tû§‡FN¾ñë鑸^õÑÊ&÷î&Óê£ù~O¦9§ù‘1K­‘Æyñ«Õ…¢VMþ–{à/ðùuÂj»yE‡­‹¶ó†Ñ.Ä´ºÌ{Ù¹­R²`¢Ü‚†s¦•O‰ßõ¿ÀCMªË.$É“î:¢ÎM††³aùëÚ¨¨ÂÞ=L8‡?2zµ/;g9áwì_ˆäàK
 endstream
 endobj
-6751 0 obj <<
+6719 0 obj <<
 /Type /Page
-/Contents 6752 0 R
-/Resources 6750 0 R
+/Contents 6720 0 R
+/Resources 6718 0 R
 /MediaBox [0 0 612 792]
-/Parent 6712 0 R
-/Annots [ 6745 0 R 6746 0 R ]
+/Parent 6680 0 R
+/Annots [ 6713 0 R 6714 0 R ]
 >> endobj
-6731 0 obj <<
+6699 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 660
 /Height 569
 /BitsPerComponent 8
 /ColorSpace /DeviceRGB
-/SMask 6754 0 R
+/SMask 6722 0 R
 /Length 76502     
 /Filter /FlateDecode
 >>
@@ -39803,7 +38975,7 @@
                              ÿ“ß±(
 endstream
 endobj
-6754 0 obj <<
+6722 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 660
@@ -39817,35 +38989,35 @@
 xÚíÁ!    ÿŸÖ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       ¸4Ž:Ž¨
 endstream
 endobj
-6745 0 obj <<
+6713 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.91 206.696 460.205 218.385]
 /Subtype /Link
 /A << /S /GoTo /D (lam-group) >>
 >> endobj
-6746 0 obj <<
+6714 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [268.761 179.597 331.813 191.287]
 /Subtype /Link
 /A << /S /GoTo /D (lam-group-mem) >>
 >> endobj
-6753 0 obj <<
-/D [6751 0 R /XYZ 151.701 685.529 null]
+6721 0 obj <<
+/D [6719 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1808 0 obj <<
-/D [6751 0 R /XYZ 151.701 660.623 null]
+/D [6719 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6741 0 obj <<
-/D [6751 0 R /XYZ 151.701 643.753 null]
+6709 0 obj <<
+/D [6719 0 R /XYZ 151.701 643.753 null]
 >> endobj
-6750 0 obj <<
+6718 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R >>
-/XObject << /Im29 6731 0 R >>
+/XObject << /Im29 6699 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6760 0 obj <<
+6728 0 obj <<
 /Length 1367      
 /Filter /FlateDecode
 >>
@@ -39865,15 +39037,15 @@
 ;±ÁÙMQãËaÀ»²Ó¼¤aëY%Dœàþ¥[W®Ø*¶4ŽÒø.‚Uè™~®°8*¾£X&`°tÿá©e¸Áˆ€·Sߌ¾0u9™­žxù,ƒ°Þ¹°ä7jP@è½¹øf­éÍŠ+»ãž‚*ñÏ^$óž¥ÿ iu3ê
 endstream
 endobj
-6759 0 obj <<
+6727 0 obj <<
 /Type /Page
-/Contents 6760 0 R
-/Resources 6758 0 R
+/Contents 6728 0 R
+/Resources 6726 0 R
 /MediaBox [0 0 612 792]
-/Parent 6712 0 R
-/Annots [ 6749 0 R 6762 0 R ]
+/Parent 6680 0 R
+/Annots [ 6717 0 R 6730 0 R ]
 >> endobj
-6733 0 obj <<
+6701 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 633
@@ -40381,35 +39553,35 @@
 EÆCîïÂ5r‹ÕEu~xçglsmsSÕNVWÇ2µ¯Ýòýµâ7ªLîoÑ`•$ÿ‰ã<ómÍ|Á¤^´hÀ[ëÞ_ëÉs£˜É½2õ®±©ßý8§ÍŸbS…3S”­W€|¤ìkQÎ&®‘ùXË¢:?¼+ïj³6}È;Žù˜²ZL9sì ÷·Û `{à7õ ¡óñWOُ|Ú¢é6=³*e]¢ Ø6ÈZ ò h·ø¸c €ÝYDÝîÞÊø õ	 »²ömµå_™m£ùçß Þf]¾çÞÈB €í„ví['v6¶¹{l  `sЮ  ð²  À[ÈZ   o!k  ¼…¬  ð²  À[ÈZ   o!k  ¼…¬  ð²  À[ÈZ   o!k  ¼…¬  ð²  À[ý¦^æzÆëz   ìVe-~Z  `ÓöÔëõ®  Àn†ñZ   o!k  ¼…¬  ð²  À[ÈZ   oý?Ö7
 endstream
 endobj
-6749 0 obj <<
+6717 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.308 353.062 460.543 364.751]
 /Subtype /Link
 /A << /S /GoTo /D (lam-host) >>
 >> endobj
-6762 0 obj <<
+6730 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.441 339.513 200.1 351.202]
 /Subtype /Link
 /A << /S /GoTo /D (lam-host) >>
 >> endobj
-6761 0 obj <<
-/D [6759 0 R /XYZ 100.892 685.529 null]
+6729 0 obj <<
+/D [6727 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1809 0 obj <<
-/D [6759 0 R /XYZ 100.892 660.623 null]
+/D [6727 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6742 0 obj <<
-/D [6759 0 R /XYZ 100.892 643.753 null]
+6710 0 obj <<
+/D [6727 0 R /XYZ 100.892 643.753 null]
 >> endobj
-6758 0 obj <<
+6726 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R >>
-/XObject << /Im30 6733 0 R >>
+/XObject << /Im30 6701 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6767 0 obj <<
+6735 0 obj <<
 /Length 849       
 /Filter /FlateDecode
 >>
@@ -40432,21 +39604,21 @@
 ê¿À¡×
 endstream
 endobj
-6766 0 obj <<
+6734 0 obj <<
 /Type /Page
-/Contents 6767 0 R
-/Resources 6765 0 R
+/Contents 6735 0 R
+/Resources 6733 0 R
 /MediaBox [0 0 612 792]
-/Parent 6770 0 R
+/Parent 6738 0 R
 >> endobj
-6744 0 obj <<
+6712 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 628
 /Height 659
 /BitsPerComponent 8
 /ColorSpace /DeviceRGB
-/SMask 6771 0 R
+/SMask 6739 0 R
 /Length 90916     
 /Filter /FlateDecode
 >>
@@ -41048,7 +40220,7 @@
 cÂCñV €ÊõÖÄ„ôFó+óÄNúÇ©#×켶ÿågc±Ñ…Åeot0.ÎÜrźþ;Ýô¥OÖæÄ|ò’µEn_»NÈ‘»5ߢK¼µtc쎞Aú¹L¯—wèÙ{e|äzï[¾µH¼˜³ceœË4ôÚ¹LU1—	 ÀIÞ*ha°×l¶Ìé‘}z×ñt·šGTZG)“ʼWìÐwšvï8è!“J•õmÕ¿|üënÖ“‘Lß|ñ­ßþ叏‹oÑÞ*‘ÊÔµƒïî;Îì;8Žì½2_{ÂG£4›Ëd/˜ÎUüÖÍúï༘,R•ñ;8ßlã;8  •ã­¼;¢ÚkΠ»*|wD³A›xw  ÞŠ·òÎC  ¼oÅ[ ðV¼á­  ÖÎQà ./ @ÍôÖ~ñÇXñV                           pÿ»ZÝ2
 endstream
 endobj
-6771 0 obj <<
+6739 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 628
@@ -41062,27 +40234,27 @@
 xÚíÁ   þŸ¶:H                                                                                                                                                                                                                                                                                                                                                                                                                 Ú                                                                                                                                                                                                                                                                                                                                                                                                                ƒê©»
 endstream
 endobj
-6768 0 obj <<
-/D [6766 0 R /XYZ 151.701 685.529 null]
+6736 0 obj <<
+/D [6734 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1810 0 obj <<
-/D [6766 0 R /XYZ 151.701 660.623 null]
+/D [6734 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6743 0 obj <<
-/D [6766 0 R /XYZ 151.701 643.753 null]
+6711 0 obj <<
+/D [6734 0 R /XYZ 151.701 643.753 null]
 >> endobj
 1014 0 obj <<
-/D [6766 0 R /XYZ 151.701 259.185 null]
+/D [6734 0 R /XYZ 151.701 259.185 null]
 >> endobj
-6769 0 obj <<
-/D [6766 0 R /XYZ 151.701 229.046 null]
+6737 0 obj <<
+/D [6734 0 R /XYZ 151.701 229.046 null]
 >> endobj
-6765 0 obj <<
+6733 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R >>
-/XObject << /Im31 6744 0 R >>
+/XObject << /Im31 6712 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6777 0 obj <<
+6745 0 obj <<
 /Length 1007      
 /Filter /FlateDecode
 >>
@@ -41095,22 +40267,22 @@
 ¤§?’0Wª õ™1\=†SxH˜¾¼q§¾ýyµ*ª”tÍЦ94$Sçýê*ÆlKÆCøñÇ(|ݦôAµ‘L£%l¨&•ûØg͹.›$#§¾*ßM%Šû‡ú0Ã^Ðì ÕfSL
 endstream
 endobj
-6776 0 obj <<
+6744 0 obj <<
 /Type /Page
-/Contents 6777 0 R
-/Resources 6775 0 R
+/Contents 6745 0 R
+/Resources 6743 0 R
 /MediaBox [0 0 612 792]
-/Parent 6770 0 R
-/Annots [ 6764 0 R 6773 0 R 6774 0 R ]
+/Parent 6738 0 R
+/Annots [ 6732 0 R 6741 0 R 6742 0 R ]
 >> endobj
-6747 0 obj <<
+6715 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 626
 /Height 536
 /BitsPerComponent 8
 /ColorSpace /DeviceRGB
-/SMask 6779 0 R
+/SMask 6747 0 R
 /Length 83309     
 /Filter /FlateDecode
 >>
@@ -41724,7 +40896,7 @@
 U}k/ƒ‚ª  ªxc!.¨*  @5 ªPU  ˆ’ªVˆÏ;|  ªŠLn®ªT                         æ<¥PϨ
 endstream
 endobj
-6779 0 obj <<
+6747 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 626
@@ -41738,40 +40910,40 @@
 xÚíÁ!    ÿŸÖ                                                                                                                                                                                                                                                                                                                                     ø                                                                                                                                                                                                                                                                                                                                    €/ÝÈ
 endstream
 endobj
-6764 0 obj <<
+6732 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [339.199 309.386 400.464 321.076]
 /Subtype /Link
 /A << /S /GoTo /D (imcidealx) >>
 >> endobj
-6773 0 obj <<
+6741 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 127.92 252.74 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://imc.sourceforge.net/)>>
 >> endobj
-6774 0 obj <<
+6742 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 313.935 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://imc.sourceforge.net/download.html)>>
 >> endobj
-6778 0 obj <<
-/D [6776 0 R /XYZ 100.892 685.529 null]
+6746 0 obj <<
+/D [6744 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1811 0 obj <<
-/D [6776 0 R /XYZ 100.892 660.623 null]
+/D [6744 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6755 0 obj <<
-/D [6776 0 R /XYZ 100.892 643.753 null]
+6723 0 obj <<
+/D [6744 0 R /XYZ 100.892 643.753 null]
 >> endobj
-6775 0 obj <<
+6743 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F30 1928 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
-/XObject << /Im32 6747 0 R >>
+/XObject << /Im32 6715 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6783 0 obj <<
+6751 0 obj <<
 /Length 1367      
 /Filter /FlateDecode
 >>
@@ -41790,21 +40962,21 @@
 ΧáE±†møŒŒÿ5$ "Z¯GÓrþÒÀ¼ÄPe0†êš	‚~zpcSÀÎ=‘ÂÛð+×®3 1Â…ôYvôº¸ªC»‡‚«àiŠŸþù×ÿrø÷ÿ‚»‚,
 endstream
 endobj
-6782 0 obj <<
+6750 0 obj <<
 /Type /Page
-/Contents 6783 0 R
-/Resources 6781 0 R
+/Contents 6751 0 R
+/Resources 6749 0 R
 /MediaBox [0 0 612 792]
-/Parent 6770 0 R
+/Parent 6738 0 R
 >> endobj
-6748 0 obj <<
+6716 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 624
 /Height 448
 /BitsPerComponent 8
 /ColorSpace /DeviceRGB
-/SMask 6785 0 R
+/SMask 6753 0 R
 /Length 74547     
 /Filter /FlateDecode
 >>
@@ -42299,7 +41471,7 @@
   ¶à                                                     pMþò×°
 endstream
 endobj
-6785 0 obj <<
+6753 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 624
@@ -42310,30 +41482,30 @@
 /Filter /FlateDecode
 >>
 stream
-xÚíÁ!    ÿŸÖ                                                                                                                                                                                                                                                                               ^                                                                                                                                                                                                                                                                              ¸1n[û²
+xÚíÁ!    ÿŸÖ                                                                                                                                                                                                                                                                                                                                     ø                                                                                                                                                                                                                        82gÝÈ
 endstream
 endobj
-6784 0 obj <<
-/D [6782 0 R /XYZ 151.701 685.529 null]
+6752 0 obj <<
+/D [6750 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1812 0 obj <<
-/D [6782 0 R /XYZ 151.701 660.623 null]
+/D [6750 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6756 0 obj <<
-/D [6782 0 R /XYZ 151.701 643.753 null]
+6724 0 obj <<
+/D [6750 0 R /XYZ 151.701 643.753 null]
 >> endobj
 1018 0 obj <<
-/D [6782 0 R /XYZ 151.701 395.907 null]
+/D [6750 0 R /XYZ 151.701 395.907 null]
 >> endobj
 2044 0 obj <<
-/D [6782 0 R /XYZ 151.701 360.426 null]
+/D [6750 0 R /XYZ 151.701 360.426 null]
 >> endobj
-6781 0 obj <<
+6749 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R >>
-/XObject << /Im33 6748 0 R >>
+/XObject << /Im33 6716 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6788 0 obj <<
+6756 0 obj <<
 /Length 957       
 /Filter /FlateDecode
 >>
@@ -42351,21 +41523,21 @@
 ý¢Ä€8¨3<ŽšqP„ÿÄ<pEðlÏ/Çç6B_]:e6ÆÃÄh¶Šÿ<EðÔý±ñF
 endstream
 endobj
-6787 0 obj <<
+6755 0 obj <<
 /Type /Page
-/Contents 6788 0 R
-/Resources 6786 0 R
+/Contents 6756 0 R
+/Resources 6754 0 R
 /MediaBox [0 0 612 792]
-/Parent 6770 0 R
+/Parent 6738 0 R
 >> endobj
-6757 0 obj <<
+6725 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 629
 /Height 429
 /BitsPerComponent 8
 /ColorSpace /DeviceRGB
-/SMask 6790 0 R
+/SMask 6758 0 R
 /Length 77814     
 /Filter /FlateDecode
 >>
@@ -42941,35 +42113,36 @@
   °WØ+{  Cöênz Õa  0A{Eão…½                                               ¨jþ…3Û8
 endstream
 endobj
-6790 0 obj <<
+6758 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 629
 /Height 429
 /BitsPerComponent 8
 /ColorSpace /DeviceGray
-/Length 546       
+/Length 549       
 /Filter /FlateDecode
 >>
 stream
-xÚíÁ    ÿO3DÕ                                                                                                                                                                                                                                                                    p!                                                                                                                                                                                                                                                                     |C³0v
+xÚíÁ1   õ/íJxx 	                                                                                                                                                                                                                                                                                                                                    À†                                                                                                                                                                                                     
+¡~ÝÈ
 endstream
 endobj
-6789 0 obj <<
-/D [6787 0 R /XYZ 100.892 685.529 null]
+6757 0 obj <<
+/D [6755 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1813 0 obj <<
-/D [6787 0 R /XYZ 100.892 660.623 null]
+/D [6755 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6763 0 obj <<
-/D [6787 0 R /XYZ 100.892 643.753 null]
+6731 0 obj <<
+/D [6755 0 R /XYZ 100.892 643.753 null]
 >> endobj
-6786 0 obj <<
+6754 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
-/XObject << /Im34 6757 0 R >>
+/XObject << /Im34 6725 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6793 0 obj <<
+6761 0 obj <<
 /Length 740       
 /Filter /FlateDecode
 >>
@@ -42981,14 +42154,14 @@
 A{ôÒ.ŽDsÛäÐm§^°n,°LþœÝ¾Ú³CnõBÝï5õÛ5T`Ïv¡ðxŒƒS:Þ¬mן¬€°téôჇõ7h¸™
 endstream
 endobj
-6792 0 obj <<
+6760 0 obj <<
 /Type /Page
-/Contents 6793 0 R
-/Resources 6791 0 R
+/Contents 6761 0 R
+/Resources 6759 0 R
 /MediaBox [0 0 612 792]
-/Parent 6770 0 R
+/Parent 6738 0 R
 >> endobj
-6772 0 obj <<
+6740 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 1024
@@ -43636,21 +42809,21 @@
 ¥6 KØBé€-•Ô!^J""""¢¦¯ ô}šá5"""""Úù€èÉhv2»¡´¢'£›Þ—ˆˆˆˆhØ>EâÚ™¬·PgŸßs<""""¢ÝVØVž« Ä{b#_¤ƒG¼[DDDDD;@ña)ÞäÊ §¹5Ê+EDDDD´Ä{b/,y¡ Ä{ºx¥ˆˆˆˆˆv„gìý/^""""¢ÝCp{2ë?äãµ """"ÚÁŒg& ×üü¼¯mˆ—ƒˆˆˆˆhÇ3\þ˜mBç
 endstream
 endobj
-6794 0 obj <<
-/D [6792 0 R /XYZ 151.701 685.529 null]
+6762 0 obj <<
+/D [6760 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1814 0 obj <<
-/D [6792 0 R /XYZ 151.701 660.623 null]
+/D [6760 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6780 0 obj <<
-/D [6792 0 R /XYZ 151.701 643.753 null]
+6748 0 obj <<
+/D [6760 0 R /XYZ 151.701 643.753 null]
 >> endobj
-6791 0 obj <<
+6759 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
-/XObject << /Im35 6772 0 R >>
+/XObject << /Im35 6740 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6797 0 obj <<
+6765 0 obj <<
 /Length 1424      
 /Filter /FlateDecode
 >>
@@ -43672,27 +42845,27 @@
 ý6æ6¶½m‰y¬êCXM‡½°×Nâmá“w†Ñ%yëJíéé´ÂïÜÿ â’
 endstream
 endobj
-6796 0 obj <<
+6764 0 obj <<
 /Type /Page
-/Contents 6797 0 R
-/Resources 6795 0 R
+/Contents 6765 0 R
+/Resources 6763 0 R
 /MediaBox [0 0 612 792]
-/Parent 6770 0 R
+/Parent 6738 0 R
 >> endobj
-6798 0 obj <<
-/D [6796 0 R /XYZ 100.892 685.529 null]
+6766 0 obj <<
+/D [6764 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1022 0 obj <<
-/D [6796 0 R /XYZ 100.892 259.056 null]
+/D [6764 0 R /XYZ 100.892 259.056 null]
 >> endobj
-6538 0 obj <<
-/D [6796 0 R /XYZ 100.892 227.546 null]
+6506 0 obj <<
+/D [6764 0 R /XYZ 100.892 227.546 null]
 >> endobj
-6795 0 obj <<
+6763 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6803 0 obj <<
+6771 0 obj <<
 /Length 1748      
 /Filter /FlateDecode
 >>
@@ -43715,27 +42888,27 @@
 q”Å	´‚gDo‰3¼ÎågBcî!::ŽÅP³ýb˜'ßÕ‡ØÒ#ïÙ¿š Ãÿ#Îð
 endstream
 endobj
-6802 0 obj <<
+6770 0 obj <<
 /Type /Page
-/Contents 6803 0 R
-/Resources 6801 0 R
+/Contents 6771 0 R
+/Resources 6769 0 R
 /MediaBox [0 0 612 792]
-/Parent 6806 0 R
+/Parent 6774 0 R
 >> endobj
-6804 0 obj <<
-/D [6802 0 R /XYZ 151.701 685.529 null]
+6772 0 obj <<
+/D [6770 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1026 0 obj <<
-/D [6802 0 R /XYZ 151.701 468.714 null]
+/D [6770 0 R /XYZ 151.701 468.714 null]
 >> endobj
-6805 0 obj <<
-/D [6802 0 R /XYZ 151.701 444.353 null]
+6773 0 obj <<
+/D [6770 0 R /XYZ 151.701 444.353 null]
 >> endobj
-6801 0 obj <<
+6769 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F54 1912 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6810 0 obj <<
+6778 0 obj <<
 /Length 2258      
 /Filter /FlateDecode
 >>
@@ -43761,52 +42934,52 @@
 ©…×BÖ-k!{]›ú$-\ç䀴îU at Z~GÃà®ýØ‹Ìp½#¬!ùÖ$¯/%	=ŽÐ;DÇõå×	hÜû‚ô¨åçWWú}q®ï¹Ëôú)é?£¶
 endstream
 endobj
-6809 0 obj <<
+6777 0 obj <<
 /Type /Page
-/Contents 6810 0 R
-/Resources 6808 0 R
+/Contents 6778 0 R
+/Resources 6776 0 R
 /MediaBox [0 0 612 792]
-/Parent 6806 0 R
-/Annots [ 6799 0 R 6800 0 R 6807 0 R ]
+/Parent 6774 0 R
+/Annots [ 6767 0 R 6768 0 R 6775 0 R ]
 >> endobj
-6799 0 obj <<
+6767 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 193.674 398.666 206.625]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://itdomino.saleslogix.com/act.nsf/docid/1998223162925)>>
 >> endobj
-6800 0 obj <<
+6768 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 182.715 393.959 195.666]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://itdomino.saleslogix.com/act.nsf/docid/200110485036)>>
 >> endobj
-6807 0 obj <<
+6775 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 171.756 332.764 184.707]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.act.com/support/updates/index.cfm)>>
 >> endobj
-6811 0 obj <<
-/D [6809 0 R /XYZ 100.892 685.529 null]
+6779 0 obj <<
+/D [6777 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1030 0 obj <<
-/D [6809 0 R /XYZ 100.892 660.623 null]
+/D [6777 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6812 0 obj <<
-/D [6809 0 R /XYZ 100.892 641.703 null]
+6780 0 obj <<
+/D [6777 0 R /XYZ 100.892 641.703 null]
 >> endobj
 1034 0 obj <<
-/D [6809 0 R /XYZ 100.892 417.81 null]
+/D [6777 0 R /XYZ 100.892 417.81 null]
 >> endobj
-6813 0 obj <<
-/D [6809 0 R /XYZ 100.892 387.216 null]
+6781 0 obj <<
+/D [6777 0 R /XYZ 100.892 387.216 null]
 >> endobj
-6808 0 obj <<
+6776 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R /F30 1928 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R /F61 1976 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6816 0 obj <<
+6784 0 obj <<
 /Length 1119      
 /Filter /FlateDecode
 >>
@@ -43821,21 +42994,21 @@
 9ûÚ½æº/<ÿ?`Õ‡
 endstream
 endobj
-6815 0 obj <<
+6783 0 obj <<
 /Type /Page
-/Contents 6816 0 R
-/Resources 6814 0 R
+/Contents 6784 0 R
+/Resources 6782 0 R
 /MediaBox [0 0 612 792]
-/Parent 6806 0 R
+/Parent 6774 0 R
 >> endobj
-6817 0 obj <<
-/D [6815 0 R /XYZ 151.701 685.529 null]
+6785 0 obj <<
+/D [6783 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6814 0 obj <<
+6782 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6820 0 obj <<
+6788 0 obj <<
 /Length 651       
 /Filter /FlateDecode
 >>
@@ -43845,27 +43018,27 @@
 rÄ»ù¨ÆIÄúŽsÃò.&Þë,x AJAVz7·ÌôÚ%@òÜuÌP–˜™j{ß<ä|ÙQ‹"Èy\,áÉÞbÖÜ­é7Õˆ®F™Õpq/ÊU¡M )5Rc¡­z̆ûÓFœ÷â?è-”ú×­œ¯ƒ#,Ê€¤þTØ¥3}húS5u¿ž5ùJÙÅyÝX0¾_Xt•wüõý¦âr«!Œï4DÇ(%V×Ñ»pšWáT´K3‡Þ;Â2g×Ñ0ñ>9b„mä¬j[%¶ª^¹oQj{ö׸ª3¡¤«±Ì[‹´1]Ûi…[6ÌóÂíÊDQ˜ûnðI×î¤ïGý¿¤¶ß÷³óÓPª,l28Û"¸ò¹­qcÃÃ1¶àôÔÕ~8±àö}?®ì~R1˜âd[žÌ–ΑcdãȆ¯.-šÅº”•r²ùOY¹Âåºu®NåÀUÍ5²©zw+ïsÕåG»æšç/ÐþŸô®ÿkäÿÖ~ÿ	«r:°cZGl_J¼Ë+}%fÉ­CUÿ´=¯µ^ u @ßýØæ²}î9Ú3Gú™<ôPßD飒m!¥{QØ-ßþ¾í?6ø»Ý¨{æûçyçs†8ŽyîûøÅIt
 endstream
 endobj
-6819 0 obj <<
+6787 0 obj <<
 /Type /Page
-/Contents 6820 0 R
-/Resources 6818 0 R
+/Contents 6788 0 R
+/Resources 6786 0 R
 /MediaBox [0 0 612 792]
-/Parent 6806 0 R
+/Parent 6774 0 R
 >> endobj
-6821 0 obj <<
-/D [6819 0 R /XYZ 100.892 685.529 null]
+6789 0 obj <<
+/D [6787 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1700 0 obj <<
-/D [6819 0 R /XYZ 100.892 630.901 null]
+/D [6787 0 R /XYZ 100.892 630.901 null]
 >> endobj
-6657 0 obj <<
-/D [6819 0 R /XYZ 100.892 614.031 null]
+6625 0 obj <<
+/D [6787 0 R /XYZ 100.892 614.031 null]
 >> endobj
-6818 0 obj <<
+6786 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6824 0 obj <<
+6792 0 obj <<
 /Length 992       
 /Filter /FlateDecode
 >>
@@ -43879,27 +43052,27 @@
 ‹Ì'ËCø~ºêÞž•xe˜þêaÉinèØò_}·ÀZ}Óª'’¦&i‹:Óºo¬2—_±†û5Íi–™¬FçWŸŒ½òXáo3IYNlð(WòµN~â‡rl2á‹ýü]>l[ÚlZ 8M—¸(ÅIÂh•mßõWo{œWÇOd*'ÇåꕶzÞ·¼íÛ”±=’^¿@W54ŸZèëß+±ùEÄSòf´ªÄÖ*ãµAl­¡´&²}¨áq’'Õ]ý#fý±C„Aÿ9ÿuõú?~eu
 endstream
 endobj
-6823 0 obj <<
+6791 0 obj <<
 /Type /Page
-/Contents 6824 0 R
-/Resources 6822 0 R
+/Contents 6792 0 R
+/Resources 6790 0 R
 /MediaBox [0 0 612 792]
-/Parent 6806 0 R
+/Parent 6774 0 R
 >> endobj
-6825 0 obj <<
-/D [6823 0 R /XYZ 151.701 685.529 null]
+6793 0 obj <<
+/D [6791 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1701 0 obj <<
-/D [6823 0 R /XYZ 151.701 660.623 null]
+/D [6791 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6671 0 obj <<
-/D [6823 0 R /XYZ 151.701 643.753 null]
+6639 0 obj <<
+/D [6791 0 R /XYZ 151.701 643.753 null]
 >> endobj
-6822 0 obj <<
+6790 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6828 0 obj <<
+6796 0 obj <<
 /Length 685       
 /Filter /FlateDecode
 >>
@@ -43912,33 +43085,33 @@
 ê­iþ9=}®ù_íÊ4üm¶¸<ý÷7ìùëk
 endstream
 endobj
-6827 0 obj <<
+6795 0 obj <<
 /Type /Page
-/Contents 6828 0 R
-/Resources 6826 0 R
+/Contents 6796 0 R
+/Resources 6794 0 R
 /MediaBox [0 0 612 792]
-/Parent 6806 0 R
+/Parent 6774 0 R
 >> endobj
-6829 0 obj <<
-/D [6827 0 R /XYZ 100.892 685.529 null]
+6797 0 obj <<
+/D [6795 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1702 0 obj <<
-/D [6827 0 R /XYZ 100.892 617.939 null]
+/D [6795 0 R /XYZ 100.892 617.939 null]
 >> endobj
-2722 0 obj <<
-/D [6827 0 R /XYZ 100.892 589.035 null]
+2715 0 obj <<
+/D [6795 0 R /XYZ 100.892 589.035 null]
 >> endobj
 1703 0 obj <<
-/D [6827 0 R /XYZ 100.892 344.265 null]
+/D [6795 0 R /XYZ 100.892 344.265 null]
 >> endobj
-2723 0 obj <<
-/D [6827 0 R /XYZ 100.892 315.361 null]
+2716 0 obj <<
+/D [6795 0 R /XYZ 100.892 315.361 null]
 >> endobj
-6826 0 obj <<
+6794 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6832 0 obj <<
+6800 0 obj <<
 /Length 958       
 /Filter /FlateDecode
 >>
@@ -43955,27 +43128,27 @@
 ô+ at QpœùC[Ÿÿ#*ü䶐Ûk0¬¼ˆƒ³…æV 3¸G¦×Ï`ÌúÁ˜]†Å‹!e½‚ì6ó¡™wC©)œHÖ,YÊ®Y/Þ4˜Ârû8ˆÓ/'΀œ0q9½®ZüÁ¶þr–E¯¤,@øeúUELÖ¯ù܃»‚eÙ//Ë`(Åõb\Q½¦Û ¦þ›?~Ä#úÁ¹ëçnÀ‚1p–àýs#7–­?ZÆÜ~XÜ!eÌ ªcè¨ÇÅ!9þ·7G“Çä˜é—ü¦9©<Ãh«~ÐVC–ÂÂlñ®bð‚G¨YZŸ/Ö®÷ûMtß½wêÌÎfC@èU6>\™Ë­UîJvävLîÔ›²î—¿õ€g`üd‹mKß*:Dygþ~sç΀Š²éus%T†G^¬¯1]%ÅÉãò–TÞoš‹Ië=‡Ú`ÑA÷̦ýUE—Õ
 endstream
 endobj
-6831 0 obj <<
+6799 0 obj <<
 /Type /Page
-/Contents 6832 0 R
-/Resources 6830 0 R
+/Contents 6800 0 R
+/Resources 6798 0 R
 /MediaBox [0 0 612 792]
-/Parent 6834 0 R
+/Parent 6802 0 R
 >> endobj
-6833 0 obj <<
-/D [6831 0 R /XYZ 151.701 685.529 null]
+6801 0 obj <<
+/D [6799 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1704 0 obj <<
-/D [6831 0 R /XYZ 151.701 660.623 null]
+/D [6799 0 R /XYZ 151.701 660.623 null]
 >> endobj
-2724 0 obj <<
-/D [6831 0 R /XYZ 151.701 631.719 null]
+2717 0 obj <<
+/D [6799 0 R /XYZ 151.701 631.719 null]
 >> endobj
-6830 0 obj <<
+6798 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6837 0 obj <<
+6805 0 obj <<
 /Length 866       
 /Filter /FlateDecode
 >>
@@ -43988,27 +43161,27 @@
 ÁñKfPˇãFùœ@lчóõ«Ã1ËÇDp”Í Í.^7;m,´=±™²fµJÊ}—„S©ž¨2¤\ʺîJÕk_ARe=²©Î+òér/7wf“È€Tå¹ú8[AÝ’Œ6AÉbG,gU=CX’j;ÚjR£åMQԍdKýÍ'$g?‰¹ä¦V@ý»óÛã›ÞQûFç÷×òÛ{J›üË\vGµ¾i‘–CõÁè[mlqRY:6ÓIãyòL«„4ômoÔíß_Þµu´Ý$Ùz^¶´z{ÏH.ó­ù“qñ]›	™Q]?Kÿ‹îèº+Ô<jO#ͦxãLÍÁeÛÇtH²1Qf·ætx_ðç	/æåþC%ÔÑS~¸ïß}8¿ëìh÷º \ó¸×ëy¡Váßo…î2!ú¨¼{×ëŸ5q¸(Fwµ.‹¹2L¾Uµ$:Äé#å›.‘Íÿ<úç“	É°˜ªŒ;!t"g³‹“)Ižõh˜Qà´ÈJ’/ÍAÍØp·NM«÷¬Ò¼/ŒëºJ¡~ŸuÍub+	Å|šn©0eÏt_«Û/‚†”%%¼Qˆ“ É“ÞÛ~ø§R«ÛñF¿+¡†ÝåWåzòUÑ´uºøã©ã«W}¦ïÊÚFÓ÷i‘W,ŸS¸—ÌêßÔø¯]è¿ìWgÖß*ºdN
 endstream
 endobj
-6836 0 obj <<
+6804 0 obj <<
 /Type /Page
-/Contents 6837 0 R
-/Resources 6835 0 R
+/Contents 6805 0 R
+/Resources 6803 0 R
 /MediaBox [0 0 612 792]
-/Parent 6834 0 R
+/Parent 6802 0 R
 >> endobj
-6838 0 obj <<
-/D [6836 0 R /XYZ 100.892 685.529 null]
+6806 0 obj <<
+/D [6804 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1705 0 obj <<
-/D [6836 0 R /XYZ 100.892 660.623 null]
+/D [6804 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6685 0 obj <<
-/D [6836 0 R /XYZ 100.892 630.203 null]
+6653 0 obj <<
+/D [6804 0 R /XYZ 100.892 630.203 null]
 >> endobj
-6835 0 obj <<
+6803 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6841 0 obj <<
+6809 0 obj <<
 /Length 859       
 /Filter /FlateDecode
 >>
@@ -44021,27 +43194,27 @@
 ´Ô]M]-ð§ÚçyBËÒ{7×gÝý`;IæÁ®äx6¤¤ÄªÕ Ðì*q®|s˜I½'ü…ÔÏ6}¼µËi ßAžÃö#8ð&U‚Âbþæ:Äù=t~R‹Ýl)µlÅ@IS©VÊ;#ˆÈüpÍñVVìФ6þ?0òÒ±Pµû_caë·êc²C'Bõò•|”OT„¯&;EDkhR?Z¹~¨}‰’o‹$ZÇuû7WÅ›,CÙ¾”÷?9TòªžäâEePÁSÛL'0™­3€õtPæÝÉ®ÛRÉ[êù× ÚÜ‚\_Â[5Ap“´úI*çfí8ÕëÆ© ~èw'!‡B<+fWêÏKæÊ€Ï2s| ½“ýoªÊžH¬BžXÀ‘°’	e7CúžÎæo öï¶01Í×ü\”ò7®ª
 endstream
 endobj
-6840 0 obj <<
+6808 0 obj <<
 /Type /Page
-/Contents 6841 0 R
-/Resources 6839 0 R
+/Contents 6809 0 R
+/Resources 6807 0 R
 /MediaBox [0 0 612 792]
-/Parent 6834 0 R
+/Parent 6802 0 R
 >> endobj
-6842 0 obj <<
-/D [6840 0 R /XYZ 151.701 685.529 null]
+6810 0 obj <<
+/D [6808 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1706 0 obj <<
-/D [6840 0 R /XYZ 151.701 660.623 null]
+/D [6808 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6686 0 obj <<
-/D [6840 0 R /XYZ 151.701 630.203 null]
+6654 0 obj <<
+/D [6808 0 R /XYZ 151.701 630.203 null]
 >> endobj
-6839 0 obj <<
+6807 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6845 0 obj <<
+6813 0 obj <<
 /Length 993       
 /Filter /FlateDecode
 >>
@@ -44056,27 +43229,27 @@
 S:Ž
 endstream
 endobj
-6844 0 obj <<
+6812 0 obj <<
 /Type /Page
-/Contents 6845 0 R
-/Resources 6843 0 R
+/Contents 6813 0 R
+/Resources 6811 0 R
 /MediaBox [0 0 612 792]
-/Parent 6834 0 R
+/Parent 6802 0 R
 >> endobj
-6846 0 obj <<
-/D [6844 0 R /XYZ 100.892 685.529 null]
+6814 0 obj <<
+/D [6812 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1707 0 obj <<
-/D [6844 0 R /XYZ 100.892 657.999 null]
+/D [6812 0 R /XYZ 100.892 657.999 null]
 >> endobj
-6687 0 obj <<
-/D [6844 0 R /XYZ 100.892 627.58 null]
+6655 0 obj <<
+/D [6812 0 R /XYZ 100.892 627.58 null]
 >> endobj
-6843 0 obj <<
+6811 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6849 0 obj <<
+6817 0 obj <<
 /Length 673       
 /Filter /FlateDecode
 >>
@@ -44090,27 +43263,27 @@
 &<Íkñi—Ç)â‰Þ!ç¯ó#!¹R0‹Rš§€–Ú!þ>O)ËŽt	:roj(›ÓN4GBAszžü/m;õ‡^µï‰K{®fþ3RöÇÉ–¬ºOY¸fÑ©8²»<Œ8"˪¨Ãª.h²<¤äéj¼ªMSü«¹¹©ûç_9·¼
 endstream
 endobj
-6848 0 obj <<
+6816 0 obj <<
 /Type /Page
-/Contents 6849 0 R
-/Resources 6847 0 R
+/Contents 6817 0 R
+/Resources 6815 0 R
 /MediaBox [0 0 612 792]
-/Parent 6834 0 R
+/Parent 6802 0 R
 >> endobj
-6850 0 obj <<
-/D [6848 0 R /XYZ 151.701 685.529 null]
+6818 0 obj <<
+/D [6816 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1708 0 obj <<
-/D [6848 0 R /XYZ 151.701 660.623 null]
+/D [6816 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6688 0 obj <<
-/D [6848 0 R /XYZ 151.701 632.325 null]
+6656 0 obj <<
+/D [6816 0 R /XYZ 151.701 632.325 null]
 >> endobj
-6847 0 obj <<
+6815 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6853 0 obj <<
+6821 0 obj <<
 /Length 613       
 /Filter /FlateDecode
 >>
@@ -44124,27 +43297,27 @@
 õ5æªÏÚî½…éÿ#L+êÂôß2ÌÙÁqþæØ7ÔúyyQž½Á½³8Ùl?Ï~_ü^æ‡Òdo™æíóa^æ®m÷üN¾æ$¤ZÞ«žóí÷×€6c
 endstream
 endobj
-6852 0 obj <<
+6820 0 obj <<
 /Type /Page
-/Contents 6853 0 R
-/Resources 6851 0 R
+/Contents 6821 0 R
+/Resources 6819 0 R
 /MediaBox [0 0 612 792]
-/Parent 6834 0 R
+/Parent 6802 0 R
 >> endobj
-6854 0 obj <<
-/D [6852 0 R /XYZ 100.892 685.529 null]
+6822 0 obj <<
+/D [6820 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1709 0 obj <<
-/D [6852 0 R /XYZ 100.892 609.516 null]
+/D [6820 0 R /XYZ 100.892 609.516 null]
 >> endobj
-6689 0 obj <<
-/D [6852 0 R /XYZ 100.892 581.218 null]
+6657 0 obj <<
+/D [6820 0 R /XYZ 100.892 581.218 null]
 >> endobj
-6851 0 obj <<
+6819 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6857 0 obj <<
+6825 0 obj <<
 /Length 856       
 /Filter /FlateDecode
 >>
@@ -44160,33 +43333,33 @@
 çé†Óö^_û¿XXB”2ð¥i‘½>Û݇[^l[Èjõbþç¯±)¶û/í² CŸ$
 endstream
 endobj
-6856 0 obj <<
+6824 0 obj <<
 /Type /Page
-/Contents 6857 0 R
-/Resources 6855 0 R
+/Contents 6825 0 R
+/Resources 6823 0 R
 /MediaBox [0 0 612 792]
-/Parent 6859 0 R
+/Parent 6827 0 R
 >> endobj
-6858 0 obj <<
-/D [6856 0 R /XYZ 151.701 685.529 null]
+6826 0 obj <<
+/D [6824 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1710 0 obj <<
-/D [6856 0 R /XYZ 151.701 639.02 null]
+/D [6824 0 R /XYZ 151.701 639.02 null]
 >> endobj
-6728 0 obj <<
-/D [6856 0 R /XYZ 151.701 622.15 null]
+6696 0 obj <<
+/D [6824 0 R /XYZ 151.701 622.15 null]
 >> endobj
 1711 0 obj <<
-/D [6856 0 R /XYZ 151.701 487.289 null]
+/D [6824 0 R /XYZ 151.701 487.289 null]
 >> endobj
-6740 0 obj <<
-/D [6856 0 R /XYZ 151.701 470.419 null]
+6708 0 obj <<
+/D [6824 0 R /XYZ 151.701 470.419 null]
 >> endobj
-6855 0 obj <<
+6823 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6863 0 obj <<
+6831 0 obj <<
 /Length 1595      
 /Filter /FlateDecode
 >>
@@ -44199,33 +43372,33 @@
 %Œ“É5£q' S½ëå¸{6ˆTN#ƒ56Õz类‡‰	Oø‹9ý¦ž¾óyóÄGzIô“G2'añâüŸþœã
 endstream
 endobj
-6862 0 obj <<
+6830 0 obj <<
 /Type /Page
-/Contents 6863 0 R
-/Resources 6861 0 R
+/Contents 6831 0 R
+/Resources 6829 0 R
 /MediaBox [0 0 612 792]
-/Parent 6859 0 R
+/Parent 6827 0 R
 >> endobj
-6864 0 obj <<
-/D [6862 0 R /XYZ 100.892 685.529 null]
+6832 0 obj <<
+/D [6830 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1038 0 obj <<
-/D [6862 0 R /XYZ 100.892 660.623 null]
+/D [6830 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6520 0 obj <<
-/D [6862 0 R /XYZ 100.892 506.739 null]
+6488 0 obj <<
+/D [6830 0 R /XYZ 100.892 506.739 null]
 >> endobj
 1042 0 obj <<
-/D [6862 0 R /XYZ 100.892 324.672 null]
+/D [6830 0 R /XYZ 100.892 324.672 null]
 >> endobj
-6865 0 obj <<
-/D [6862 0 R /XYZ 100.892 295.287 null]
+6833 0 obj <<
+/D [6830 0 R /XYZ 100.892 295.287 null]
 >> endobj
-6861 0 obj <<
+6829 0 obj <<
 /Font << /F77 1973 0 R /F17 1131 0 R /F15 1133 0 R /F28 1124 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6869 0 obj <<
+6837 0 obj <<
 /Length 2036      
 /Filter /FlateDecode
 >>
@@ -44254,35 +43427,35 @@
 Q˜Ù4´PK´'å	 ð…Î@ÿáRÜŒIÐb>ì> ~½kaAðíþ×$iš¼–I¥Ú‘n©–Aýv–ÒŠž†‘B§ÐâêÍÿ8éú3 ƒá:îÜ7Òßl8„ömMž	yXOó|þÓýýõz×eæ±ãÓ‹6ïI	¡˜%þŠ?»YaÍ{-¹ ¼–l¦…ÿ;ë÷µåiFœæ¾{U,y–mYh_®`çÿ ÄaL€
 endstream
 endobj
-6868 0 obj <<
+6836 0 obj <<
 /Type /Page
-/Contents 6869 0 R
-/Resources 6867 0 R
+/Contents 6837 0 R
+/Resources 6835 0 R
 /MediaBox [0 0 612 792]
-/Parent 6859 0 R
-/Annots [ 6860 0 R 6866 0 R ]
+/Parent 6827 0 R
+/Annots [ 6828 0 R 6834 0 R ]
 >> endobj
-6860 0 obj <<
+6828 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 127.92 289.428 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.wireshark.org)>>
 >> endobj
-6866 0 obj <<
+6834 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 355.33 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.wireshark.org/download.html)>>
 >> endobj
-6870 0 obj <<
-/D [6868 0 R /XYZ 151.701 685.529 null]
+6838 0 obj <<
+/D [6836 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6867 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F30 1928 0 R /F89 2333 0 R /F73 2334 0 R /F17 1131 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
-/XObject << /Im3 2328 0 R >>
+6835 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F30 1928 0 R /F89 2330 0 R /F73 2331 0 R /F17 1131 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
+/XObject << /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6875 0 obj <<
+6843 0 obj <<
 /Length 1873      
 /Filter /FlateDecode
 >>
@@ -44299,42 +43472,42 @@
 $²|Ä»½ÄK˜©(ËÐâDH·,|Á/P)8Fj7HÑVÌ¢À¶¤oA’%ôƒ…³7àÆò»0ÐZÜþå9nñóîP©†3°êºÒÂéœÍ?PËéù9a«rŸ…‘pÈ	BÜ +3¨ó²	UC#ÆBçû$æºâøJìî_x`Ë¢«oíƵ²pù;NÿÜ¿£þvJ<]z¿ÎÀU›	™ÿînÔ´»#«6NÓõ°EŸ öO¸U< ²â³¯×P)‚YoGpÂX–°ŽüÞû·¼üEñ쟂mÃæÖYÿ5ÌÂÝÝý»_?aÞÆð1<þææJ|)o¬Åv÷<¿FIúç„€D1„$óß(ÛWpúz…NH-$ s:_’梶ûySÞŽ¾NœÜši“–ûù߉ð‘Q>L‚WWß1îy»[ýÇ˺
 endstream
 endobj
-6874 0 obj <<
+6842 0 obj <<
 /Type /Page
-/Contents 6875 0 R
-/Resources 6873 0 R
+/Contents 6843 0 R
+/Resources 6841 0 R
 /MediaBox [0 0 612 792]
-/Parent 6859 0 R
-/Annots [ 6871 0 R 6872 0 R ]
+/Parent 6827 0 R
+/Annots [ 6839 0 R 6840 0 R ]
 >> endobj
-6871 0 obj <<
+6839 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [357.987 554.621 417.555 566.31]
 /Subtype /Link
 /A << /S /GoTo /D (chap01conc) >>
 >> endobj
-6872 0 obj <<
+6840 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.441 530.442 213.968 542.131]
 /Subtype /Link
 /A << /S /GoTo /D (chap01qa) >>
 >> endobj
-6876 0 obj <<
-/D [6874 0 R /XYZ 100.892 685.529 null]
+6844 0 obj <<
+/D [6842 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1046 0 obj <<
-/D [6874 0 R /XYZ 100.892 492.361 null]
+/D [6842 0 R /XYZ 100.892 492.361 null]
 >> endobj
-6877 0 obj <<
-/D [6874 0 R /XYZ 100.892 461.848 null]
+6845 0 obj <<
+/D [6842 0 R /XYZ 100.892 461.848 null]
 >> endobj
-6873 0 obj <<
+6841 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6882 0 obj <<
+6850 0 obj <<
 /Length 1840      
 /Filter /FlateDecode
 >>
@@ -44361,45 +43534,45 @@
 ™	«¬cMGXÝ8 ¤¢Û]­3&p¢¯<æćã¾N[úÐ7í~]oÿñªÏ³
 endstream
 endobj
-6881 0 obj <<
+6849 0 obj <<
 /Type /Page
-/Contents 6882 0 R
-/Resources 6880 0 R
+/Contents 6850 0 R
+/Resources 6848 0 R
 /MediaBox [0 0 612 792]
-/Parent 6859 0 R
+/Parent 6827 0 R
 >> endobj
-6883 0 obj <<
-/D [6881 0 R /XYZ 151.701 685.529 null]
+6851 0 obj <<
+/D [6849 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1050 0 obj <<
-/D [6881 0 R /XYZ 151.701 660.623 null]
+/D [6849 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6884 0 obj <<
-/D [6881 0 R /XYZ 151.701 641.703 null]
+6852 0 obj <<
+/D [6849 0 R /XYZ 151.701 641.703 null]
 >> endobj
-6885 0 obj <<
-/D [6881 0 R /XYZ 151.701 447.041 null]
+6853 0 obj <<
+/D [6849 0 R /XYZ 151.701 447.041 null]
 >> endobj
-6886 0 obj <<
-/D [6881 0 R /XYZ 151.701 411.489 null]
+6854 0 obj <<
+/D [6849 0 R /XYZ 151.701 411.489 null]
 >> endobj
-6887 0 obj <<
-/D [6881 0 R /XYZ 151.701 375.331 null]
+6855 0 obj <<
+/D [6849 0 R /XYZ 151.701 375.331 null]
 >> endobj
-6888 0 obj <<
-/D [6881 0 R /XYZ 151.701 339.173 null]
+6856 0 obj <<
+/D [6849 0 R /XYZ 151.701 339.173 null]
 >> endobj
 1054 0 obj <<
-/D [6881 0 R /XYZ 151.701 269.762 null]
+/D [6849 0 R /XYZ 151.701 269.762 null]
 >> endobj
-6889 0 obj <<
-/D [6881 0 R /XYZ 151.701 238.698 null]
+6857 0 obj <<
+/D [6849 0 R /XYZ 151.701 238.698 null]
 >> endobj
-6880 0 obj <<
+6848 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F17 1131 0 R /F15 1133 0 R /F59 1905 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6892 0 obj <<
+6860 0 obj <<
 /Length 1905      
 /Filter /FlateDecode
 >>
@@ -44419,39 +43592,39 @@
 ‡ÂZ6­	Áî¬Â	{¾zö/²Ë©·MRdÉâ úMÙq}%ê~¥¦[ÀHHÜq Ç¬GßLö©ìŠ•jI?¬—Ke`6]½•¤ÿð=en‡¾ÁI+w¿Gò®:=ŠL=jxù¿MCÖ2ëxˆCíµàü{‚wµ¢‘ßµ·ÈýÎýª™Þ?nM9ŒSàÄ`\wÇ›ºÿ›
 endstream
 endobj
-6891 0 obj <<
+6859 0 obj <<
 /Type /Page
-/Contents 6892 0 R
-/Resources 6890 0 R
+/Contents 6860 0 R
+/Resources 6858 0 R
 /MediaBox [0 0 612 792]
-/Parent 6859 0 R
+/Parent 6827 0 R
 >> endobj
-6893 0 obj <<
-/D [6891 0 R /XYZ 100.892 685.529 null]
+6861 0 obj <<
+/D [6859 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1058 0 obj <<
-/D [6891 0 R /XYZ 100.892 303.713 null]
+/D [6859 0 R /XYZ 100.892 303.713 null]
 >> endobj
-6894 0 obj <<
-/D [6891 0 R /XYZ 100.892 275.313 null]
+6862 0 obj <<
+/D [6859 0 R /XYZ 100.892 275.313 null]
 >> endobj
-6895 0 obj <<
-/D [6891 0 R /XYZ 100.892 227.979 null]
+6863 0 obj <<
+/D [6859 0 R /XYZ 100.892 227.979 null]
 >> endobj
-6896 0 obj <<
-/D [6891 0 R /XYZ 100.892 180.441 null]
+6864 0 obj <<
+/D [6859 0 R /XYZ 100.892 180.441 null]
 >> endobj
-6897 0 obj <<
-/D [6891 0 R /XYZ 100.892 159.396 null]
+6865 0 obj <<
+/D [6859 0 R /XYZ 100.892 159.396 null]
 >> endobj
-6898 0 obj <<
-/D [6891 0 R /XYZ 100.892 138.957 null]
+6866 0 obj <<
+/D [6859 0 R /XYZ 100.892 138.957 null]
 >> endobj
-6890 0 obj <<
+6858 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F54 1912 0 R /F59 1905 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6907 0 obj <<
+6875 0 obj <<
 /Length 1828      
 /Filter /FlateDecode
 >>
@@ -44476,78 +43649,78 @@
 ƒ[\û*ƒð¢eÄë¼ξ?«|Ãx½Yü⟩
 endstream
 endobj
-6906 0 obj <<
+6874 0 obj <<
 /Type /Page
-/Contents 6907 0 R
-/Resources 6905 0 R
+/Contents 6875 0 R
+/Resources 6873 0 R
 /MediaBox [0 0 612 792]
-/Parent 6916 0 R
-/Annots [ 6899 0 R 6913 0 R 6900 0 R 6901 0 R 6904 0 R ]
+/Parent 6884 0 R
+/Annots [ 6867 0 R 6881 0 R 6868 0 R 6869 0 R 6872 0 R ]
 >> endobj
-6899 0 obj <<
+6867 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 490.353 511.352 502.043]
 /Subtype /Link
 /A << /S /GoTo /D (secondmachine) >>
 >> endobj
-6913 0 obj <<
+6881 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.523 478.925 284.819 488.203]
 /Subtype /Link
 /A << /S /GoTo /D (secondmachine) >>
 >> endobj
-6900 0 obj <<
+6868 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.491 347.053 305.604 358.743]
 /Subtype /Link
 /A << /S /GoTo /D (pktcap01) >>
 >> endobj
-6901 0 obj <<
+6869 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [301.463 333.504 357.273 345.194]
 /Subtype /Link
 /A << /S /GoTo /D (pktcap02) >>
 >> endobj
-6904 0 obj <<
+6872 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.928 311.392 469.15 323.082]
 /Subtype /Link
 /A << /S /GoTo /D (capsstats01) >>
 >> endobj
-6908 0 obj <<
-/D [6906 0 R /XYZ 151.701 685.529 null]
+6876 0 obj <<
+/D [6874 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6909 0 obj <<
-/D [6906 0 R /XYZ 151.701 660.623 null]
+6877 0 obj <<
+/D [6874 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6910 0 obj <<
-/D [6906 0 R /XYZ 151.701 646.937 null]
+6878 0 obj <<
+/D [6874 0 R /XYZ 151.701 646.937 null]
 >> endobj
-6911 0 obj <<
-/D [6906 0 R /XYZ 151.701 605.44 null]
+6879 0 obj <<
+/D [6874 0 R /XYZ 151.701 605.44 null]
 >> endobj
-6912 0 obj <<
-/D [6906 0 R /XYZ 151.701 540.56 null]
+6880 0 obj <<
+/D [6874 0 R /XYZ 151.701 540.56 null]
 >> endobj
-6914 0 obj <<
-/D [6906 0 R /XYZ 151.701 479.921 null]
+6882 0 obj <<
+/D [6874 0 R /XYZ 151.701 479.921 null]
 >> endobj
 1062 0 obj <<
-/D [6906 0 R /XYZ 151.701 411.459 null]
+/D [6874 0 R /XYZ 151.701 411.459 null]
 >> endobj
-6915 0 obj <<
-/D [6906 0 R /XYZ 151.701 383.701 null]
+6883 0 obj <<
+/D [6874 0 R /XYZ 151.701 383.701 null]
 >> endobj
-6905 0 obj <<
+6873 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6923 0 obj <<
+6891 0 obj <<
 /Length 492       
 /Filter /FlateDecode
 >>
@@ -44560,14 +43733,14 @@
 !p	*åÜ|EfÎÆçp:>| Y[éE
 endstream
 endobj
-6922 0 obj <<
+6890 0 obj <<
 /Type /Page
-/Contents 6923 0 R
-/Resources 6921 0 R
+/Contents 6891 0 R
+/Resources 6889 0 R
 /MediaBox [0 0 612 792]
-/Parent 6916 0 R
+/Parent 6884 0 R
 >> endobj
-6902 0 obj <<
+6870 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 710
@@ -44777,21 +43950,21 @@
 ¿«™³µtÃs¤`½%«Ž¬¢BT(ŠSüÃ/þáɏžüæŸ󗶫6î¯ûîãÔRýËïþåÉyrþRžVK¬SÏ35|¶–n{Žt\oÑڝ›Bˆ:Eqw5ôãŸüøÝÿíÝwþö¾qúÍ÷þÛ…ë¾»m V©˜­á™Zºí9²èz3kWm T´´B!„ñÿù¬ãÓ
 endstream
 endobj
-6924 0 obj <<
-/D [6922 0 R /XYZ 100.892 685.529 null]
+6892 0 obj <<
+/D [6890 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1816 0 obj <<
-/D [6922 0 R /XYZ 100.892 660.623 null]
+/D [6890 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6918 0 obj <<
-/D [6922 0 R /XYZ 100.892 643.753 null]
+6886 0 obj <<
+/D [6890 0 R /XYZ 100.892 643.753 null]
 >> endobj
-6921 0 obj <<
+6889 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R >>
-/XObject << /Im36 6902 0 R >>
+/XObject << /Im36 6870 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6927 0 obj <<
+6895 0 obj <<
 /Length 956       
 /Filter /FlateDecode
 >>
@@ -44809,14 +43982,14 @@
 Þµq…/äE†ù¾„C³"†
 endstream
 endobj
-6926 0 obj <<
+6894 0 obj <<
 /Type /Page
-/Contents 6927 0 R
-/Resources 6925 0 R
+/Contents 6895 0 R
+/Resources 6893 0 R
 /MediaBox [0 0 612 792]
-/Parent 6916 0 R
+/Parent 6884 0 R
 >> endobj
-6903 0 obj <<
+6871 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 683
@@ -45006,33 +44179,33 @@
 @Gv6 ?ù?yݾ-Í_5J«Þ~ù«×>¶r߶BOÇb h–x]uŸþ}l –«_kå_ªöo¿ùÕµü¦~}ô7)Û|=ôãëñW—ÞãÏ 45øÇ€÷ƒ¬úSŽAQ1K™2ußÑ•´ÎÛŒœœø}¥)µ¢ž†£@0;€ÏþýgÏmÑÏÿŸŸ?¥áËÃß.&ö²¤Øó­Ìʇ×zùòyó§½=ïù¹z:@³À›ª»¤¥êW©üϸRÃ_¾óß×wžö¶tô×Ç}6 K‡xÿ¹þåË¥÷üøÁû£O¼0rs|ºXêy›28˜ß¾Ìκw¿Ý­„Á“Üÿ¦3 s'”:@¶§_Àï‡ðº=¬xøû7àéX Í2 ¯«îûnôãý÷åêW¯üõùÙðúèõ‹îá>[¿\ÊûÏ lj šù¹½>ø®bGfƒw7 ƒ'gð~b'§ÈÿÀþÏüF[ô×_üÆ2e/MÊ·ÿ­|øøù7ÿ´·Ïÿêó—VèéX Í2 ¯«îS5{úü¦÷¯W¿zå_™ëõÿ×]ð¯¾|NÏã×/º×‡~x ÈÑŸŸ |ô-ÞX½3ÞÝѬ¾9JGòúnsw€à3 ­ëôu ON%1ï‹u©Ð—jEðYú¦'ó;@¤–>Ìã±oüÎÿñ;¯oƒ¾5 ËÍÝ›ÏÛÉç6ðåFäÓ± še ^WÝgð¦6¾¾Ïþ¾úÕ+ÿ›úü¦†¿¹þìŐ¼?zý¢{s¹=¼¸–®¸—ÿ.åÝJ€âbqÞWøLù‹øÞ¿ùÞó+ÉÞú¶­xo ºãc+ôWŸ?¿Œüt,€f€¥ªûº®T¿+ð¸oºõÊ—ï³tt@0 Rþb >ýíOŸ¹!OÍÅü6ðyµ“oßD~úüt,€f€Õª[¯~VþàqûÀÇُ…£3 ‚ò_Ï üÛï}h%~³¹mý^žhúv½ÓP’o÷ÿé¿f hÞ@½ê®U¿+ð¸àõà Î !~ýÀÿõÿø¯ñ<yj(^ĺ[¿—×”^xgOû:Ê÷ÿ÷ï3 4í-€jÕ]­~VþÉÇm9: „(¯X ßû7ß{¾Qø‘!þm£ñ‡6kñÜ}ýõ×_}õÕÇW¢þúÃ]È?üÈ Ð,°TuŸ«Üjõ;°ò7·åБ£3 BˆðøGøéoú³ÿò³_·H½ñ2øz‰§öç/þò/>ýן¾	K[$+p¥ê®V¿c+ÿÄã6ÝE'„xm ž‡$¿óï~ç»ÿëw¿ó/¾37žöù½û`ðõœ¢‘y€Õª[©~ÇVþM[9ºjCDo€B!îÿ?eÇL½
 endstream
 endobj
-6928 0 obj <<
-/D [6926 0 R /XYZ 151.701 685.529 null]
+6896 0 obj <<
+/D [6894 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1817 0 obj <<
-/D [6926 0 R /XYZ 151.701 660.623 null]
+/D [6894 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6919 0 obj <<
-/D [6926 0 R /XYZ 151.701 643.753 null]
+6887 0 obj <<
+/D [6894 0 R /XYZ 151.701 643.753 null]
 >> endobj
 1066 0 obj <<
-/D [6926 0 R /XYZ 151.701 278.513 null]
+/D [6894 0 R /XYZ 151.701 278.513 null]
 >> endobj
-6917 0 obj <<
-/D [6926 0 R /XYZ 151.701 259.594 null]
+6885 0 obj <<
+/D [6894 0 R /XYZ 151.701 259.594 null]
 >> endobj
-6929 0 obj <<
-/D [6926 0 R /XYZ 151.701 194.84 null]
+6897 0 obj <<
+/D [6894 0 R /XYZ 151.701 194.84 null]
 >> endobj
-6930 0 obj <<
-/D [6926 0 R /XYZ 151.701 143.433 null]
+6898 0 obj <<
+/D [6894 0 R /XYZ 151.701 143.433 null]
 >> endobj
-6925 0 obj <<
+6893 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F54 1912 0 R >>
-/XObject << /Im37 6903 0 R >>
+/XObject << /Im37 6871 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6933 0 obj <<
+6901 0 obj <<
 /Length 2191      
 /Filter /FlateDecode
 >>
@@ -45059,42 +44232,42 @@
 æ5…©àMa²oÝVeÑTà4kR¿sW—Uc/¿ƒ[PÛsYkèÞ×¹jpÿÁÞÇìІMºÓµ©9m›Ó­qóeÛß»ögÐþ¨Ê.ÏÛÈñ¢€dÖ=º	îÌ{\ÊJ·8¼s›/¥Y8r³aàÜçÖ77‘ÎÚqËõš»"ÛW×ö»‹È´ýb8¼÷ݺÒÿB+J
 endstream
 endobj
-6932 0 obj <<
+6900 0 obj <<
 /Type /Page
-/Contents 6933 0 R
-/Resources 6931 0 R
+/Contents 6901 0 R
+/Resources 6899 0 R
 /MediaBox [0 0 612 792]
-/Parent 6916 0 R
+/Parent 6884 0 R
 >> endobj
-6934 0 obj <<
-/D [6932 0 R /XYZ 100.892 685.529 null]
+6902 0 obj <<
+/D [6900 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1859 0 obj <<
-/D [6932 0 R /XYZ 100.892 660.623 null]
+/D [6900 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6920 0 obj <<
-/D [6932 0 R /XYZ 100.892 643.753 null]
+6888 0 obj <<
+/D [6900 0 R /XYZ 100.892 643.753 null]
 >> endobj
-6935 0 obj <<
-/D [6932 0 R /XYZ 100.892 275.689 null]
+6903 0 obj <<
+/D [6900 0 R /XYZ 100.892 275.689 null]
 >> endobj
-6936 0 obj <<
-/D [6932 0 R /XYZ 100.892 262.002 null]
+6904 0 obj <<
+/D [6900 0 R /XYZ 100.892 262.002 null]
 >> endobj
-6937 0 obj <<
-/D [6932 0 R /XYZ 100.892 241.435 null]
+6905 0 obj <<
+/D [6900 0 R /XYZ 100.892 241.435 null]
 >> endobj
-6938 0 obj <<
-/D [6932 0 R /XYZ 100.892 220.868 null]
+6906 0 obj <<
+/D [6900 0 R /XYZ 100.892 220.868 null]
 >> endobj
-6939 0 obj <<
-/D [6932 0 R /XYZ 100.892 182.46 null]
+6907 0 obj <<
+/D [6900 0 R /XYZ 100.892 182.46 null]
 >> endobj
-6931 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F11 2494 0 R /F17 1131 0 R >>
+6899 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F11 2489 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6945 0 obj <<
+6913 0 obj <<
 /Length 1720      
 /Filter /FlateDecode
 >>
@@ -45113,61 +44286,61 @@
 »MòP†å|ÜShLkv'¢Òtë$˜–Y:‘8ú[íwΛ¡>þÿþi"º›ç˜õx~aOCm>ºf´4u=û,KÊ€óǽ1UY<“5þ³¡upF–b’MŽ€6QðiØÆ#þšbËu	.Ïþ`,zïš‚çÓP°kTÇ`’B|\D‹(µ3öÆuãÐ8€ývT‡ó™8|áÏý¿7+P²
 endstream
 endobj
-6944 0 obj <<
+6912 0 obj <<
 /Type /Page
-/Contents 6945 0 R
-/Resources 6943 0 R
+/Contents 6913 0 R
+/Resources 6911 0 R
 /MediaBox [0 0 612 792]
-/Parent 6916 0 R
-/Annots [ 6940 0 R 6941 0 R 6950 0 R ]
+/Parent 6884 0 R
+/Annots [ 6908 0 R 6909 0 R 6918 0 R ]
 >> endobj
-6940 0 obj <<
+6908 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.25 463.632 255.61 475.322]
 /Subtype /Link
 /A << /S /GoTo /D (capsstats02) >>
 >> endobj
-6941 0 obj <<
+6909 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [490.117 276.594 511.352 288.283]
 /Subtype /Link
 /A << /S /GoTo /D (hostannounce) >>
 >> endobj
-6950 0 obj <<
+6918 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.25 265.166 245.455 274.189]
 /Subtype /Link
 /A << /S /GoTo /D (hostannounce) >>
 >> endobj
-6946 0 obj <<
-/D [6944 0 R /XYZ 151.701 685.529 null]
+6914 0 obj <<
+/D [6912 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6947 0 obj <<
-/D [6944 0 R /XYZ 151.701 660.623 null]
+6915 0 obj <<
+/D [6912 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6948 0 obj <<
-/D [6944 0 R /XYZ 151.701 606.895 null]
+6916 0 obj <<
+/D [6912 0 R /XYZ 151.701 606.895 null]
 >> endobj
 1070 0 obj <<
-/D [6944 0 R /XYZ 151.701 519.161 null]
+/D [6912 0 R /XYZ 151.701 519.161 null]
 >> endobj
-6949 0 obj <<
-/D [6944 0 R /XYZ 151.701 489.067 null]
+6917 0 obj <<
+/D [6912 0 R /XYZ 151.701 489.067 null]
 >> endobj
 1074 0 obj <<
-/D [6944 0 R /XYZ 151.701 243.523 null]
+/D [6912 0 R /XYZ 151.701 243.523 null]
 >> endobj
-6951 0 obj <<
-/D [6944 0 R /XYZ 151.701 199.89 null]
+6919 0 obj <<
+/D [6912 0 R /XYZ 151.701 199.89 null]
 >> endobj
-6943 0 obj <<
+6911 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6956 0 obj <<
+6924 0 obj <<
 /Length 2344      
 /Filter /FlateDecode
 >>
@@ -45204,42 +44377,42 @@
 jé(7&-{©Z\زš¼µ7]ØíGŠ¢ ¨@Á ‰·+]P¬!övÓ²î+ØjxsÄ•ªWý·E£°­Ì¨%ú+ÔÈÿn†Ô
 endstream
 endobj
-6955 0 obj <<
+6923 0 obj <<
 /Type /Page
-/Contents 6956 0 R
-/Resources 6954 0 R
+/Contents 6924 0 R
+/Resources 6922 0 R
 /MediaBox [0 0 612 792]
-/Parent 6916 0 R
+/Parent 6884 0 R
 >> endobj
-6957 0 obj <<
-/D [6955 0 R /XYZ 100.892 685.529 null]
+6925 0 obj <<
+/D [6923 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1860 0 obj <<
-/D [6955 0 R /XYZ 100.892 660.623 null]
+/D [6923 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6952 0 obj <<
-/D [6955 0 R /XYZ 100.892 642.541 null]
+6920 0 obj <<
+/D [6923 0 R /XYZ 100.892 642.541 null]
 >> endobj
-6958 0 obj <<
-/D [6955 0 R /XYZ 100.892 366.725 null]
+6926 0 obj <<
+/D [6923 0 R /XYZ 100.892 366.725 null]
 >> endobj
-6959 0 obj <<
-/D [6955 0 R /XYZ 100.892 328.668 null]
+6927 0 obj <<
+/D [6923 0 R /XYZ 100.892 328.668 null]
 >> endobj
-6960 0 obj <<
-/D [6955 0 R /XYZ 100.892 288.24 null]
+6928 0 obj <<
+/D [6923 0 R /XYZ 100.892 288.24 null]
 >> endobj
-6961 0 obj <<
-/D [6955 0 R /XYZ 100.892 222.835 null]
+6929 0 obj <<
+/D [6923 0 R /XYZ 100.892 222.835 null]
 >> endobj
-6962 0 obj <<
-/D [6955 0 R /XYZ 100.892 197.472 null]
+6930 0 obj <<
+/D [6923 0 R /XYZ 100.892 197.472 null]
 >> endobj
-6954 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F11 2494 0 R /F59 1905 0 R /F60 1917 0 R /F17 1131 0 R /F54 1912 0 R >>
+6922 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F11 2489 0 R /F59 1905 0 R /F60 1917 0 R /F17 1131 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6965 0 obj <<
+6933 0 obj <<
 /Length 784       
 /Filter /FlateDecode
 >>
@@ -45251,14 +44424,14 @@
 •ß[Ûœ€&TQ°¦®¶Ëzݾ¹IcmˆÎꪲS{§or7?éÉÉr0Œ"e¹ª”.j®¯¾\žN΍ÃNIµƒCSDª]ÅÕÍÙ»±™ãB=T¶×ðOë_ž%°¿
 endstream
 endobj
-6964 0 obj <<
+6932 0 obj <<
 /Type /Page
-/Contents 6965 0 R
-/Resources 6963 0 R
+/Contents 6933 0 R
+/Resources 6931 0 R
 /MediaBox [0 0 612 792]
-/Parent 6970 0 R
+/Parent 6938 0 R
 >> endobj
-6942 0 obj <<
+6910 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 685
@@ -45645,30 +44818,30 @@
 ˆ¼Øù÷¨O€	G*Pî8o@¹él/5DJ6‚'¡wm-l«U"ó$Æ|êKm†Ô—Š¼ÏP©üøß j@ÏCu À…|`mÞ€5e¥  Ü^Ê—‡Xë (Š¢(Êü%¢¢…  xìh@\Ô$  ×Õ€O~þI¼¼j€¢(Š¢(Ï)ßiÀ‡(Š¢(Šò´Â…EQåÉåÿ—ü­
 endstream
 endobj
-6966 0 obj <<
-/D [6964 0 R /XYZ 151.701 685.529 null]
+6934 0 obj <<
+/D [6932 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1818 0 obj <<
-/D [6964 0 R /XYZ 151.701 660.623 null]
+/D [6932 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6953 0 obj <<
-/D [6964 0 R /XYZ 151.701 642.541 null]
+6921 0 obj <<
+/D [6932 0 R /XYZ 151.701 642.541 null]
 >> endobj
-6967 0 obj <<
-/D [6964 0 R /XYZ 151.701 209.837 null]
+6935 0 obj <<
+/D [6932 0 R /XYZ 151.701 209.837 null]
 >> endobj
-6968 0 obj <<
-/D [6964 0 R /XYZ 151.701 169.658 null]
+6936 0 obj <<
+/D [6932 0 R /XYZ 151.701 169.658 null]
 >> endobj
-6969 0 obj <<
-/D [6964 0 R /XYZ 151.701 121.245 null]
+6937 0 obj <<
+/D [6932 0 R /XYZ 151.701 121.245 null]
 >> endobj
-6963 0 obj <<
+6931 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R /F54 1912 0 R >>
-/XObject << /Im38 6942 0 R >>
+/XObject << /Im38 6910 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6976 0 obj <<
+6944 0 obj <<
 /Length 2274      
 /Filter /FlateDecode
 >>
@@ -45695,41 +44868,41 @@
 7B¦TÕçIPÉæ×Û_\A‘ðN½àXqK=¾6*6"rv„Ë?éoZ÷¡
 endstream
 endobj
-6975 0 obj <<
+6943 0 obj <<
 /Type /Page
-/Contents 6976 0 R
-/Resources 6974 0 R
+/Contents 6944 0 R
+/Resources 6942 0 R
 /MediaBox [0 0 612 792]
-/Parent 6970 0 R
-/Annots [ 6971 0 R ]
+/Parent 6938 0 R
+/Annots [ 6939 0 R ]
 >> endobj
-6971 0 obj <<
+6939 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [295.29 138.334 351.1 150.024]
 /Subtype /Link
 /A << /S /GoTo /D (nullconnect) >>
 >> endobj
-6977 0 obj <<
-/D [6975 0 R /XYZ 100.892 685.529 null]
+6945 0 obj <<
+/D [6943 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6978 0 obj <<
-/D [6975 0 R /XYZ 100.892 593.346 null]
+6946 0 obj <<
+/D [6943 0 R /XYZ 100.892 593.346 null]
 >> endobj
-6979 0 obj <<
-/D [6975 0 R /XYZ 100.892 531.542 null]
+6947 0 obj <<
+/D [6943 0 R /XYZ 100.892 531.542 null]
 >> endobj
 1078 0 obj <<
-/D [6975 0 R /XYZ 100.892 443.953 null]
+/D [6943 0 R /XYZ 100.892 443.953 null]
 >> endobj
-6980 0 obj <<
-/D [6975 0 R /XYZ 100.892 417.757 null]
+6948 0 obj <<
+/D [6943 0 R /XYZ 100.892 417.757 null]
 >> endobj
-6974 0 obj <<
+6942 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F54 1912 0 R /F17 1131 0 R /F30 1928 0 R /F51 1134 0 R /F31 1929 0 R /F61 1976 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6985 0 obj <<
+6953 0 obj <<
 /Length 1038      
 /Filter /FlateDecode
 >>
@@ -45744,15 +44917,15 @@
 ®‹ÜŒD]=v¾}€9$娋m¦ã#-©ÜhR†¾±–[×»þŐ¡M3š¬™Mt ‰Ñg‚2.)ø^Öeß…î~ £§Ç§¤ Áý±‚8Uà¯3}áÇùo|µU“
 endstream
 endobj
-6984 0 obj <<
+6952 0 obj <<
 /Type /Page
-/Contents 6985 0 R
-/Resources 6983 0 R
+/Contents 6953 0 R
+/Resources 6951 0 R
 /MediaBox [0 0 612 792]
-/Parent 6970 0 R
-/Annots [ 6973 0 R ]
+/Parent 6938 0 R
+/Annots [ 6941 0 R ]
 >> endobj
-6972 0 obj <<
+6940 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 587
@@ -45829,28 +45002,28 @@
 NÓ4MӮўîñ?4MÓ4íJÍ¦iÚUÛÿòC6
 endstream
 endobj
-6973 0 obj <<
+6941 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [389.554 216.889 445.364 228.579]
 /Subtype /Link
 /A << /S /GoTo /D (userconnect) >>
 >> endobj
-6986 0 obj <<
-/D [6984 0 R /XYZ 151.701 685.529 null]
+6954 0 obj <<
+/D [6952 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1819 0 obj <<
-/D [6984 0 R /XYZ 151.701 660.623 null]
+/D [6952 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6981 0 obj <<
-/D [6984 0 R /XYZ 151.701 642.541 null]
+6949 0 obj <<
+/D [6952 0 R /XYZ 151.701 642.541 null]
 >> endobj
-6983 0 obj <<
+6951 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
-/XObject << /Im39 6972 0 R >>
+/XObject << /Im39 6940 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6990 0 obj <<
+6958 0 obj <<
 /Length 1110      
 /Filter /FlateDecode
 >>
@@ -45867,14 +45040,14 @@
 ©G™3®ÔJ&ë†þj1ß7¤;§§[Ä5Mý÷Âùá‡?¶>„<
 endstream
 endobj
-6989 0 obj <<
+6957 0 obj <<
 /Type /Page
-/Contents 6990 0 R
-/Resources 6988 0 R
+/Contents 6958 0 R
+/Resources 6956 0 R
 /MediaBox [0 0 612 792]
-/Parent 6970 0 R
+/Parent 6938 0 R
 >> endobj
-6982 0 obj <<
+6950 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 587
@@ -45965,27 +45138,27 @@
 gÜ£	8kÄ¢,ÝÙÎR!Á@pGp¤CpÀy—EKpg)‚Ž/¸D(Z‚#8KÐ#¸'óEYºsÏcðîãHï|å¨[;[Þ}±R®b7óàš–ŠÇH?×qýÙševö+8wÛä“3î!ŽÙEéÜЂӂ;•yp“v#8 ÀÙ÷úw×:Ñ[QEQö-Á	¶ ¸d..8g pLÁ½ðG/·‚SEQ”k”7÷ðEQE¹RñSQE¹jùÖÖ‚
 endstream
 endobj
-6991 0 obj <<
-/D [6989 0 R /XYZ 100.892 685.529 null]
+6959 0 obj <<
+/D [6957 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1820 0 obj <<
-/D [6989 0 R /XYZ 100.892 660.623 null]
+/D [6957 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6987 0 obj <<
-/D [6989 0 R /XYZ 100.892 642.541 null]
+6955 0 obj <<
+/D [6957 0 R /XYZ 100.892 642.541 null]
 >> endobj
 1082 0 obj <<
-/D [6989 0 R /XYZ 100.892 339.335 null]
+/D [6957 0 R /XYZ 100.892 339.335 null]
 >> endobj
-6992 0 obj <<
-/D [6989 0 R /XYZ 100.892 309.191 null]
+6960 0 obj <<
+/D [6957 0 R /XYZ 100.892 309.191 null]
 >> endobj
-6988 0 obj <<
+6956 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R >>
-/XObject << /Im40 6982 0 R >>
+/XObject << /Im40 6950 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6995 0 obj <<
+6963 0 obj <<
 /Length 2003      
 /Filter /FlateDecode
 >>
@@ -46011,54 +45184,54 @@
 ünŠ«Ñ‡Z¤X-=ÆîúÆ­ÿ0VøÀÜÝ]	Ã`3uHÿs·ú\ Ç­
 endstream
 endobj
-6994 0 obj <<
+6962 0 obj <<
 /Type /Page
-/Contents 6995 0 R
-/Resources 6993 0 R
+/Contents 6963 0 R
+/Resources 6961 0 R
 /MediaBox [0 0 612 792]
-/Parent 6970 0 R
+/Parent 6938 0 R
 >> endobj
-6996 0 obj <<
-/D [6994 0 R /XYZ 151.701 685.529 null]
+6964 0 obj <<
+/D [6962 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6997 0 obj <<
-/D [6994 0 R /XYZ 151.701 579.797 null]
+6965 0 obj <<
+/D [6962 0 R /XYZ 151.701 579.797 null]
 >> endobj
-6998 0 obj <<
-/D [6994 0 R /XYZ 151.701 532.374 null]
+6966 0 obj <<
+/D [6962 0 R /XYZ 151.701 532.374 null]
 >> endobj
-6999 0 obj <<
-/D [6994 0 R /XYZ 151.701 498.501 null]
+6967 0 obj <<
+/D [6962 0 R /XYZ 151.701 498.501 null]
 >> endobj
-7000 0 obj <<
-/D [6994 0 R /XYZ 151.701 451.079 null]
+6968 0 obj <<
+/D [6962 0 R /XYZ 151.701 451.079 null]
 >> endobj
-7001 0 obj <<
-/D [6994 0 R /XYZ 151.701 430.149 null]
+6969 0 obj <<
+/D [6962 0 R /XYZ 151.701 430.149 null]
 >> endobj
-7002 0 obj <<
-/D [6994 0 R /XYZ 151.701 409.826 null]
+6970 0 obj <<
+/D [6962 0 R /XYZ 151.701 409.826 null]
 >> endobj
-7003 0 obj <<
-/D [6994 0 R /XYZ 151.701 389.502 null]
+6971 0 obj <<
+/D [6962 0 R /XYZ 151.701 389.502 null]
 >> endobj
-7004 0 obj <<
-/D [6994 0 R /XYZ 151.701 369.178 null]
+6972 0 obj <<
+/D [6962 0 R /XYZ 151.701 369.178 null]
 >> endobj
-7005 0 obj <<
-/D [6994 0 R /XYZ 151.701 331.258 null]
+6973 0 obj <<
+/D [6962 0 R /XYZ 151.701 331.258 null]
 >> endobj
-7006 0 obj <<
-/D [6994 0 R /XYZ 151.701 283.835 null]
+6974 0 obj <<
+/D [6962 0 R /XYZ 151.701 283.835 null]
 >> endobj
-7007 0 obj <<
-/D [6994 0 R /XYZ 151.701 168.667 null]
+6975 0 obj <<
+/D [6962 0 R /XYZ 151.701 168.667 null]
 >> endobj
-6993 0 obj <<
+6961 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F54 1912 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7014 0 obj <<
+6982 0 obj <<
 /Length 1872      
 /Filter /FlateDecode
 >>
@@ -46083,61 +45256,61 @@
 ûàS”^œ Ÿ¥^‡§Ö6ßöþ¤÷pƒø/wÙ8~á>â¯~<`þ¹{Ìñ-ÊðŸ“ýkçÎ#’n-<	`2úO ù}7à*GtŸ Zòãø­_1ùۘߙ§æþdÿ^q
 endstream
 endobj
-7013 0 obj <<
+6981 0 obj <<
 /Type /Page
-/Contents 7014 0 R
-/Resources 7012 0 R
+/Contents 6982 0 R
+/Resources 6980 0 R
 /MediaBox [0 0 612 792]
-/Parent 6970 0 R
-/Annots [ 7008 0 R 7009 0 R 7021 0 R ]
+/Parent 6938 0 R
+/Annots [ 6976 0 R 6977 0 R 6989 0 R ]
 >> endobj
-7008 0 obj <<
+6976 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [398.32 452.286 454.131 463.976]
 /Subtype /Link
 /A << /S /GoTo /D (XPCap01) >>
 >> endobj
-7009 0 obj <<
+6977 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.308 257.723 460.543 269.716]
 /Subtype /Link
 /A << /S /GoTo /D (XPCap02) >>
 >> endobj
-7021 0 obj <<
+6989 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [181.714 244.174 221.932 256.167]
 /Subtype /Link
 /A << /S /GoTo /D (XPCap02) >>
 >> endobj
-7015 0 obj <<
-/D [7013 0 R /XYZ 100.892 685.529 null]
+6983 0 obj <<
+/D [6981 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7016 0 obj <<
-/D [7013 0 R /XYZ 100.892 660.623 null]
+6984 0 obj <<
+/D [6981 0 R /XYZ 100.892 660.623 null]
 >> endobj
-7017 0 obj <<
-/D [7013 0 R /XYZ 100.892 620.444 null]
+6985 0 obj <<
+/D [6981 0 R /XYZ 100.892 620.444 null]
 >> endobj
-7018 0 obj <<
-/D [7013 0 R /XYZ 100.892 563.659 null]
+6986 0 obj <<
+/D [6981 0 R /XYZ 100.892 563.659 null]
 >> endobj
-7019 0 obj <<
-/D [7013 0 R /XYZ 100.892 453.283 null]
+6987 0 obj <<
+/D [6981 0 R /XYZ 100.892 453.283 null]
 >> endobj
-7020 0 obj <<
-/D [7013 0 R /XYZ 100.892 371.823 null]
+6988 0 obj <<
+/D [6981 0 R /XYZ 100.892 371.823 null]
 >> endobj
-7022 0 obj <<
-/D [7013 0 R /XYZ 100.892 179.849 null]
+6990 0 obj <<
+/D [6981 0 R /XYZ 100.892 179.849 null]
 >> endobj
-7012 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F11 2494 0 R >>
+6980 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F11 2489 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7027 0 obj <<
+6995 0 obj <<
 /Length 939       
 /Filter /FlateDecode
 >>
@@ -46149,14 +45322,14 @@
 ø
 endstream
 endobj
-7026 0 obj <<
+6994 0 obj <<
 /Type /Page
-/Contents 7027 0 R
-/Resources 7025 0 R
+/Contents 6995 0 R
+/Resources 6993 0 R
 /MediaBox [0 0 612 792]
-/Parent 7030 0 R
+/Parent 6998 0 R
 >> endobj
-7010 0 obj <<
+6978 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 539
@@ -46321,27 +45494,27 @@
 %q4:V×ÛØ„Pž…ò´LD(ӆᐹ陦!Š£×5íz¹ÁS^{ÕkŸ-Ç|Ê+q{v{ï	Z W{S8ä‹JÁ&SïpȖˆÇPzª»Ïn6bbãuíxTou¶mJähDÎÃô{VτĈ’àr„C¶tyM Ð|ý?ú=gÜÂS˜eiÊ’F	 P%”éOó-EQE¹[‰E8$  K%.G å]yõé«xyŠ¢(Š¢äÊ{¡<ÿ¡(Š¢(-…UEQ”^åÿ5Œsm
 endstream
 endobj
-7028 0 obj <<
-/D [7026 0 R /XYZ 151.701 685.529 null]
+6996 0 obj <<
+/D [6994 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1821 0 obj <<
-/D [7026 0 R /XYZ 151.701 660.623 null]
+/D [6994 0 R /XYZ 151.701 660.623 null]
 >> endobj
-7023 0 obj <<
-/D [7026 0 R /XYZ 151.701 643.753 null]
+6991 0 obj <<
+/D [6994 0 R /XYZ 151.701 643.753 null]
 >> endobj
 1086 0 obj <<
-/D [7026 0 R /XYZ 151.701 270.997 null]
+/D [6994 0 R /XYZ 151.701 270.997 null]
 >> endobj
-7029 0 obj <<
-/D [7026 0 R /XYZ 151.701 254.402 null]
+6997 0 obj <<
+/D [6994 0 R /XYZ 151.701 254.402 null]
 >> endobj
-7025 0 obj <<
+6993 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R >>
-/XObject << /Im41 7010 0 R >>
+/XObject << /Im41 6978 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-7033 0 obj <<
+7001 0 obj <<
 /Length 846       
 /Filter /FlateDecode
 >>
@@ -46354,14 +45527,14 @@
 JÃÈ8XFÐmNßÒ"laÖNi`ªõ®õ[Û ¡í7nÛXm(O@‹ºÄúêp[íG;¼ŠC4KrucôÙE fà9H¥brnîo.ò‹Î¹Àí|	>mC™ZdôÎŽonÿ\âÁM=AZVoï¯nïq¿\ ¼µÛy´Uáò…í¡[ÛFUFÿXžvh¦¤mßÄñ–½ã1ü¸áÛ‘pÛíwø<׃«šºòcê†Ö¢H« \Ìj“¾Ä(„KzYy°Å	‚k¾ØuÛXt|ë±HèfcãÐuQ0:á‰øÞÖÖ³ŸŠ–N jú—T»»L¯¡¦õ0q»ÕJþW'°ÁÓ#·mÿà†®Šÿ0ÑàG76Ãÿu.‰<æ >$ŒrRØÁãaÜVãlî«Í9Ë'<7hYG‰q­½(!Φ’šÞU]PC*xh7­‡Û£³êÜÌ1î)\ÎêÄeë7g[ovtW}z&ƼÂcþ/( ä„
 endstream
 endobj
-7032 0 obj <<
+7000 0 obj <<
 /Type /Page
-/Contents 7033 0 R
-/Resources 7031 0 R
+/Contents 7001 0 R
+/Resources 6999 0 R
 /MediaBox [0 0 612 792]
-/Parent 7030 0 R
+/Parent 6998 0 R
 >> endobj
-7011 0 obj <<
+6979 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 546
@@ -46445,27 +45618,27 @@
 Au
 endstream
 endobj
-7034 0 obj <<
-/D [7032 0 R /XYZ 100.892 685.529 null]
+7002 0 obj <<
+/D [7000 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1822 0 obj <<
-/D [7032 0 R /XYZ 100.892 660.623 null]
+/D [7000 0 R /XYZ 100.892 660.623 null]
 >> endobj
-7024 0 obj <<
-/D [7032 0 R /XYZ 100.892 643.753 null]
+6992 0 obj <<
+/D [7000 0 R /XYZ 100.892 643.753 null]
 >> endobj
 1090 0 obj <<
-/D [7032 0 R /XYZ 100.892 275.467 null]
+/D [7000 0 R /XYZ 100.892 275.467 null]
 >> endobj
-7035 0 obj <<
-/D [7032 0 R /XYZ 100.892 258.872 null]
+7003 0 obj <<
+/D [7000 0 R /XYZ 100.892 258.872 null]
 >> endobj
-7031 0 obj <<
+6999 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R /F54 1912 0 R >>
-/XObject << /Im42 7011 0 R >>
+/XObject << /Im42 6979 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-7039 0 obj <<
+7007 0 obj <<
 /Length 1854      
 /Filter /FlateDecode
 >>
@@ -46486,40 +45659,40 @@
 Ü×þ§ž©LC.ÇߣʍÖàÊï”Ë}o@ùúfbŸ(¡g{‘±p>Âb^Ã^CIÝ'½Ï²ð>ÃÕù­¥âO÷o/ßU7Ÿû\â7ûï}®$SÙé¹ïŸùÐiÀ¼É|f ZhÚ9fA­.PŸ-ÿ» 6h@hñÓ`§]½áÌ’± ‚yöÓtøv½vÇÃa'ÖÍY‹A±™W×ÏÛuHTnIjmòuÎJw¸ºæB*Qp–ëS}ý÷ïõŒøh艜
 endstream
 endobj
-7038 0 obj <<
+7006 0 obj <<
 /Type /Page
-/Contents 7039 0 R
-/Resources 7037 0 R
+/Contents 7007 0 R
+/Resources 7005 0 R
 /MediaBox [0 0 612 792]
-/Parent 7030 0 R
-/Annots [ 7036 0 R ]
+/Parent 6998 0 R
+/Annots [ 7004 0 R ]
 >> endobj
-7036 0 obj <<
+7004 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 468.305 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://support.microsoft.com/support/kb/articles/Q102/78/8.asp)>>
 >> endobj
-7040 0 obj <<
-/D [7038 0 R /XYZ 151.701 685.529 null]
+7008 0 obj <<
+/D [7006 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1094 0 obj <<
-/D [7038 0 R /XYZ 151.701 422.817 null]
+/D [7006 0 R /XYZ 151.701 422.817 null]
 >> endobj
-6878 0 obj <<
-/D [7038 0 R /XYZ 151.701 389.284 null]
+6846 0 obj <<
+/D [7006 0 R /XYZ 151.701 389.284 null]
 >> endobj
 1098 0 obj <<
-/D [7038 0 R /XYZ 151.701 258.683 null]
+/D [7006 0 R /XYZ 151.701 258.683 null]
 >> endobj
-7041 0 obj <<
-/D [7038 0 R /XYZ 151.701 230.089 null]
+7009 0 obj <<
+/D [7006 0 R /XYZ 151.701 230.089 null]
 >> endobj
-7037 0 obj <<
+7005 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F54 1912 0 R /F59 1905 0 R /F60 1917 0 R /F51 1134 0 R /F17 1131 0 R /F30 1928 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7044 0 obj <<
+7012 0 obj <<
 /Length 1515      
 /Filter /FlateDecode
 >>
@@ -46542,30 +45715,30 @@
 Ð3Ï=ÚáF’‡_y'þÏ3‚¯,ŸÀ°)¹o(`”~ÌBæP¹ð”ÖT< 0	OîûøèûLUy}?ÆO€ ç'þrù	ìâ‰ÿ7c¦¦ԍ4ÈqÕäw­ñ»nÔì~`±|·Ý¯»­¹³ãføÔCª{GöÇ_cs†ï“õâ›ÏNS
 endstream
 endobj
-7043 0 obj <<
+7011 0 obj <<
 /Type /Page
-/Contents 7044 0 R
-/Resources 7042 0 R
+/Contents 7012 0 R
+/Resources 7010 0 R
 /MediaBox [0 0 612 792]
-/Parent 7030 0 R
+/Parent 6998 0 R
 >> endobj
-7045 0 obj <<
-/D [7043 0 R /XYZ 100.892 685.529 null]
+7013 0 obj <<
+/D [7011 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1102 0 obj <<
-/D [7043 0 R /XYZ 100.892 660.623 null]
+/D [7011 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6879 0 obj <<
-/D [7043 0 R /XYZ 100.892 639.842 null]
+6847 0 obj <<
+/D [7011 0 R /XYZ 100.892 639.842 null]
 >> endobj
-7046 0 obj <<
-/D [7043 0 R /XYZ 100.892 554.818 null]
+7014 0 obj <<
+/D [7011 0 R /XYZ 100.892 554.818 null]
 >> endobj
-7042 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R /F51 1134 0 R /F11 2494 0 R /F54 1912 0 R >>
+7010 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R /F51 1134 0 R /F11 2489 0 R /F54 1912 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7049 0 obj <<
+7017 0 obj <<
 /Length 2225      
 /Filter /FlateDecode
 >>
@@ -46588,21 +45761,21 @@
 Ö…¸É®[ž^õöåòm¬nˆ°ãbjü+`x^­/~=â5
 endstream
 endobj
-7048 0 obj <<
+7016 0 obj <<
 /Type /Page
-/Contents 7049 0 R
-/Resources 7047 0 R
+/Contents 7017 0 R
+/Resources 7015 0 R
 /MediaBox [0 0 612 792]
-/Parent 7030 0 R
+/Parent 6998 0 R
 >> endobj
-7050 0 obj <<
-/D [7048 0 R /XYZ 151.701 685.529 null]
+7018 0 obj <<
+/D [7016 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7047 0 obj <<
-/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R /F11 2494 0 R /F60 1917 0 R /F59 1905 0 R >>
+7015 0 obj <<
+/Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R /F11 2489 0 R /F60 1917 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7053 0 obj <<
+7021 0 obj <<
 /Length 1978      
 /Filter /FlateDecode
 >>
@@ -46619,22 +45792,22 @@
 {5·Qjcöx:—²eS¿¶½í&³«xj¾QBxP\¹s`Ö¬¸µ{ßÔýãid yÖŽ©N@¾2¼W5_[Bš¥’¡ÜÕ÷{úöÆ#D?ý‡gWÖÅõœãÖWi@¨¡š…%°ö½›•h÷wšj§v¦/¦ÜÿÈfÚÒ
 endstream
 endobj
-7052 0 obj <<
+7020 0 obj <<
 /Type /Page
-/Contents 7053 0 R
-/Resources 7051 0 R
+/Contents 7021 0 R
+/Resources 7019 0 R
 /MediaBox [0 0 612 792]
-/Parent 7030 0 R
+/Parent 6998 0 R
 >> endobj
-7054 0 obj <<
-/D [7052 0 R /XYZ 100.892 685.529 null]
+7022 0 obj <<
+/D [7020 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7051 0 obj <<
-/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F51 1134 0 R /F60 1917 0 R /F89 2333 0 R /F73 2334 0 R /F59 1905 0 R >>
-/XObject << /Im3 2328 0 R >>
+7019 0 obj <<
+/Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F51 1134 0 R /F60 1917 0 R /F89 2330 0 R /F73 2331 0 R /F59 1905 0 R >>
+/XObject << /Im3 2325 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7057 0 obj <<
+7025 0 obj <<
 /Length 1661      
 /Filter /FlateDecode
 >>
@@ -46654,21 +45827,21 @@
 G±ê³’b‰º3Ï.¥Æ®3Z.ÿTô-Àñ’‡WI
 endstream
 endobj
-7056 0 obj <<
+7024 0 obj <<
 /Type /Page
-/Contents 7057 0 R
-/Resources 7055 0 R
+/Contents 7025 0 R
+/Resources 7023 0 R
 /MediaBox [0 0 612 792]
-/Parent 7059 0 R
+/Parent 7027 0 R
 >> endobj
-7058 0 obj <<
-/D [7056 0 R /XYZ 151.701 685.529 null]
+7026 0 obj <<
+/D [7024 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7055 0 obj <<
+7023 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F60 1917 0 R /F59 1905 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7063 0 obj <<
+7031 0 obj <<
 /Length 1302      
 /Filter /FlateDecode
 >>
@@ -46688,43 +45861,43 @@
 >Ìg:¦ojr;Iâ£Cð;ð/r &e
 endstream
 endobj
-7062 0 obj <<
+7030 0 obj <<
 /Type /Page
-/Contents 7063 0 R
-/Resources 7061 0 R
+/Contents 7031 0 R
+/Resources 7029 0 R
 /MediaBox [0 0 612 792]
-/Parent 7059 0 R
-/Annots [ 7060 0 R 7066 0 R ]
+/Parent 7027 0 R
+/Annots [ 7028 0 R 7034 0 R ]
 >> endobj
-7060 0 obj <<
+7028 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [418.46 428.721 460.543 440.714]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://fsf.org/)>>
 >> endobj
-7066 0 obj <<
+7034 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [154.441 415.172 202.251 427.164]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://fsf.org/)>>
 >> endobj
-7064 0 obj <<
-/D [7062 0 R /XYZ 100.892 685.529 null]
+7032 0 obj <<
+/D [7030 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1106 0 obj <<
-/D [7062 0 R /XYZ 100.892 660.623 null]
+/D [7030 0 R /XYZ 100.892 660.623 null]
 >> endobj
-7065 0 obj <<
-/D [7062 0 R /XYZ 100.892 475.03 null]
+7033 0 obj <<
+/D [7030 0 R /XYZ 100.892 475.03 null]
 >> endobj
-7067 0 obj <<
-/D [7062 0 R /XYZ 100.892 334.619 null]
+7035 0 obj <<
+/D [7030 0 R /XYZ 100.892 334.619 null]
 >> endobj
-7061 0 obj <<
-/Font << /F77 1973 0 R /F17 1131 0 R /F15 1133 0 R /F54 1912 0 R /F11 2494 0 R /F59 1905 0 R /F28 1124 0 R >>
+7029 0 obj <<
+/Font << /F77 1973 0 R /F17 1131 0 R /F15 1133 0 R /F54 1912 0 R /F11 2489 0 R /F59 1905 0 R /F28 1124 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7070 0 obj <<
+7038 0 obj <<
 /Length 2104      
 /Filter /FlateDecode
 >>
@@ -46739,21 +45912,21 @@
 ƒT0,AH‘OɃÈ	ÚÇvº°‹_øêè÷ÿáðÖØBCÛ›?õ4ÏIEaDø|aû¥d2“ÿ€Áp¶0ÄQ1^ºT@ÅSɼ#kÿ¤¾{…ü°•âÌx¡´€Ë¯>úžäËÍu°þç%€ïTÄ-ÿMCçáÅËŒpœ¨ˆ%lotÈzy}Mÿ6Žß«¿fé¶{
 endstream
 endobj
-7069 0 obj <<
+7037 0 obj <<
 /Type /Page
-/Contents 7070 0 R
-/Resources 7068 0 R
+/Contents 7038 0 R
+/Resources 7036 0 R
 /MediaBox [0 0 612 792]
-/Parent 7059 0 R
+/Parent 7027 0 R
 >> endobj
-7071 0 obj <<
-/D [7069 0 R /XYZ 151.701 685.529 null]
+7039 0 obj <<
+/D [7037 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7068 0 obj <<
+7036 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7074 0 obj <<
+7042 0 obj <<
 /Length 1584      
 /Filter /FlateDecode
 >>
@@ -46772,27 +45945,27 @@
 à
 endstream
 endobj
-7073 0 obj <<
+7041 0 obj <<
 /Type /Page
-/Contents 7074 0 R
-/Resources 7072 0 R
+/Contents 7042 0 R
+/Resources 7040 0 R
 /MediaBox [0 0 612 792]
-/Parent 7059 0 R
+/Parent 7027 0 R
 >> endobj
-7075 0 obj <<
-/D [7073 0 R /XYZ 100.892 685.529 null]
+7043 0 obj <<
+/D [7041 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7076 0 obj <<
-/D [7073 0 R /XYZ 100.892 563.926 null]
+7044 0 obj <<
+/D [7041 0 R /XYZ 100.892 563.926 null]
 >> endobj
-7077 0 obj <<
-/D [7073 0 R /XYZ 100.892 491.446 null]
+7045 0 obj <<
+/D [7041 0 R /XYZ 100.892 491.446 null]
 >> endobj
-7072 0 obj <<
+7040 0 obj <<
 /Font << /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7080 0 obj <<
+7048 0 obj <<
 /Length 1969      
 /Filter /FlateDecode
 >>
@@ -46812,24 +45985,24 @@
 Œ„’ãDMJ|útp2ô­û¨ìGùö¤d~ü"„Å©ÿkú?IšŸA>9éPÛ°±Z¾K±.âŸeî_.7¾»Þý˜.C
 endstream
 endobj
-7079 0 obj <<
+7047 0 obj <<
 /Type /Page
-/Contents 7080 0 R
-/Resources 7078 0 R
+/Contents 7048 0 R
+/Resources 7046 0 R
 /MediaBox [0 0 612 792]
-/Parent 7059 0 R
+/Parent 7027 0 R
 >> endobj
-7081 0 obj <<
-/D [7079 0 R /XYZ 151.701 685.529 null]
+7049 0 obj <<
+/D [7047 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7082 0 obj <<
-/D [7079 0 R /XYZ 151.701 461.03 null]
+7050 0 obj <<
+/D [7047 0 R /XYZ 151.701 461.03 null]
 >> endobj
-7078 0 obj <<
+7046 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7085 0 obj <<
+7053 0 obj <<
 /Length 1845      
 /Filter /FlateDecode
 >>
@@ -46853,24 +46026,24 @@
 >JTéÃLQt1Ïfò|Ê@UùÒ<ïe¤¹¯»ñ€x#UN%ѧÊW––뺰tËõ·bõCzZœm†½“æÉq¶òcɈ;mÛ12\Ì•%%Qò³ü[òß÷O»ÿnÙí
 endstream
 endobj
-7084 0 obj <<
+7052 0 obj <<
 /Type /Page
-/Contents 7085 0 R
-/Resources 7083 0 R
+/Contents 7053 0 R
+/Resources 7051 0 R
 /MediaBox [0 0 612 792]
-/Parent 7059 0 R
+/Parent 7027 0 R
 >> endobj
-7086 0 obj <<
-/D [7084 0 R /XYZ 100.892 685.529 null]
+7054 0 obj <<
+/D [7052 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7087 0 obj <<
-/D [7084 0 R /XYZ 100.892 398.353 null]
+7055 0 obj <<
+/D [7052 0 R /XYZ 100.892 398.353 null]
 >> endobj
-7083 0 obj <<
+7051 0 obj <<
 /Font << /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7090 0 obj <<
+7058 0 obj <<
 /Length 1644      
 /Filter /FlateDecode
 >>
@@ -46890,27 +46063,27 @@
 Ka¢Mþ\@(JÈ*ñQÄÕEVhhl„¥÷r•øä…Ågîæd³V,ãªAW"Á5NÚ£bzõ €îÆó©"Ãw0O¶n—=ʵHóú4¤¢¸Z’÷i¦~7hÉ4O¾y|‘ø œõ4rÒô`yÇÍ##Ùàu"ÍãG1-}Lygôÿøot̯Ber+Ò·J‘£×ÁËþ\ÿÀO>X
 endstream
 endobj
-7089 0 obj <<
+7057 0 obj <<
 /Type /Page
-/Contents 7090 0 R
-/Resources 7088 0 R
+/Contents 7058 0 R
+/Resources 7056 0 R
 /MediaBox [0 0 612 792]
-/Parent 7094 0 R
+/Parent 7062 0 R
 >> endobj
-7091 0 obj <<
-/D [7089 0 R /XYZ 151.701 685.529 null]
+7059 0 obj <<
+/D [7057 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7092 0 obj <<
-/D [7089 0 R /XYZ 151.701 541.19 null]
+7060 0 obj <<
+/D [7057 0 R /XYZ 151.701 541.19 null]
 >> endobj
-7093 0 obj <<
-/D [7089 0 R /XYZ 151.701 281.237 null]
+7061 0 obj <<
+/D [7057 0 R /XYZ 151.701 281.237 null]
 >> endobj
-7088 0 obj <<
+7056 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7097 0 obj <<
+7065 0 obj <<
 /Length 1812      
 /Filter /FlateDecode
 >>
@@ -46931,36 +46104,36 @@
 ׇ$…^àÞEH¦2!¤®9¦	eÇ;YKµ,ïi>6\Jh†€“Oü÷`y™…±þV®†i&•ÊEæñöÚù -í2ô›®jf×Ü%‹à«ù³Ì.‹;ygå¤v_åX_›øNÅR…qQiŠˆŠ•µH¼Ž+1OõÈæpA’öˆ)^(F–P÷W±5P9uoÛ´û¾¾ÛüÑßÎ
 endstream
 endobj
-7096 0 obj <<
+7064 0 obj <<
 /Type /Page
-/Contents 7097 0 R
-/Resources 7095 0 R
+/Contents 7065 0 R
+/Resources 7063 0 R
 /MediaBox [0 0 612 792]
-/Parent 7094 0 R
+/Parent 7062 0 R
 >> endobj
-7098 0 obj <<
-/D [7096 0 R /XYZ 100.892 685.529 null]
+7066 0 obj <<
+/D [7064 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7099 0 obj <<
-/D [7096 0 R /XYZ 100.892 638.691 null]
+7067 0 obj <<
+/D [7064 0 R /XYZ 100.892 638.691 null]
 >> endobj
-7100 0 obj <<
-/D [7096 0 R /XYZ 100.892 572.614 null]
+7068 0 obj <<
+/D [7064 0 R /XYZ 100.892 572.614 null]
 >> endobj
-7101 0 obj <<
-/D [7096 0 R /XYZ 100.892 528.996 null]
+7069 0 obj <<
+/D [7064 0 R /XYZ 100.892 528.996 null]
 >> endobj
-7102 0 obj <<
-/D [7096 0 R /XYZ 100.892 460.401 null]
+7070 0 obj <<
+/D [7064 0 R /XYZ 100.892 460.401 null]
 >> endobj
-7103 0 obj <<
-/D [7096 0 R /XYZ 100.892 339.73 null]
+7071 0 obj <<
+/D [7064 0 R /XYZ 100.892 339.73 null]
 >> endobj
-7095 0 obj <<
+7063 0 obj <<
 /Font << /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7106 0 obj <<
+7074 0 obj <<
 /Length 2011      
 /Filter /FlateDecode
 >>
@@ -46982,36 +46155,36 @@
 8ÙÕ–j½­³n[ y:¹—‹pÒÓ÷ôSõ÷@6*ôìlµí§ÀY&Lç´Ì²‚#µ=ɹ-äHŸÚÍÁÔ6M׶ätHÇ!<Y‚Íà2½úy”B¯à?Žà¹ÍNB÷šÓ+ c…ùm"ç&x¯É×"Trà‰æ˜S@|ԏGñ~?ú=AQæ§ÑÜ¢ÜÊ‹[>¿ ¸V‹Œí§§ç½{ELLéXò™Ž¸r`~ž,÷<Yg6®ßËÃKœäº~”…y¬{CR 4”²ÄJƒlÍâòË*¥«xŽ–ž¯j•ÄI¸äŽp<«ÞÄ[䳓f(âNQîÿéüñË©g[i’H‹¾L%7§‰Üòô¤)P¨ʘ.å&“râRn¸g/æݹù:î)úÞDY²˜ˆÆ«ÿW÷\qÎY"®¤ÔÍ	Ðï¸oSÿH!ÕKcj,Ç¡Û—±¸£ßÒ’§òvŠÒˆOLù/ÎQÄASÎzºêŸÞ{í4žr؉D$‡é:AŸ}ãþ¬"@”Φ¥a³kÄ‘*+Ò)ºÍ¥‚AµP­nj²¦kÓJObWôÒ±2¬	ûóÿBîÌ·Q8\C°Ör/"Vu¡ 8^݉毡ÌÊec"áñ.ª˜ñ_¬"([EP±Ô\té3O¥­wÍÒr:Ó®kÓÔ}½²O at Yógj ÌíƒX_æöO'z±08®#Vbêu噿?>>üô¶6
 endstream
 endobj
-7105 0 obj <<
+7073 0 obj <<
 /Type /Page
-/Contents 7106 0 R
-/Resources 7104 0 R
+/Contents 7074 0 R
+/Resources 7072 0 R
 /MediaBox [0 0 612 792]
-/Parent 7094 0 R
+/Parent 7062 0 R
 >> endobj
-7107 0 obj <<
-/D [7105 0 R /XYZ 151.701 685.529 null]
+7075 0 obj <<
+/D [7073 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7108 0 obj <<
-/D [7105 0 R /XYZ 151.701 638.691 null]
+7076 0 obj <<
+/D [7073 0 R /XYZ 151.701 638.691 null]
 >> endobj
-7109 0 obj <<
-/D [7105 0 R /XYZ 151.701 575.743 null]
+7077 0 obj <<
+/D [7073 0 R /XYZ 151.701 575.743 null]
 >> endobj
-7110 0 obj <<
-/D [7105 0 R /XYZ 151.701 512.398 null]
+7078 0 obj <<
+/D [7073 0 R /XYZ 151.701 512.398 null]
 >> endobj
-7111 0 obj <<
-/D [7105 0 R /XYZ 151.701 354.208 null]
+7079 0 obj <<
+/D [7073 0 R /XYZ 151.701 354.208 null]
 >> endobj
-7112 0 obj <<
-/D [7105 0 R /XYZ 151.701 279.435 null]
+7080 0 obj <<
+/D [7073 0 R /XYZ 151.701 279.435 null]
 >> endobj
-7104 0 obj <<
+7072 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F17 1131 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7115 0 obj <<
+7083 0 obj <<
 /Length 2054      
 /Filter /FlateDecode
 >>
@@ -47031,24 +46204,24 @@
 œ\
 endstream
 endobj
-7114 0 obj <<
+7082 0 obj <<
 /Type /Page
-/Contents 7115 0 R
-/Resources 7113 0 R
+/Contents 7083 0 R
+/Resources 7081 0 R
 /MediaBox [0 0 612 792]
-/Parent 7094 0 R
+/Parent 7062 0 R
 >> endobj
-7116 0 obj <<
-/D [7114 0 R /XYZ 100.892 685.529 null]
+7084 0 obj <<
+/D [7082 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7117 0 obj <<
-/D [7114 0 R /XYZ 100.892 633.993 null]
+7085 0 obj <<
+/D [7082 0 R /XYZ 100.892 633.993 null]
 >> endobj
-7113 0 obj <<
+7081 0 obj <<
 /Font << /F28 1124 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7120 0 obj <<
+7088 0 obj <<
 /Length 1927      
 /Filter /FlateDecode
 >>
@@ -47072,24 +46245,24 @@
 #Ó¥Dz‚äFªõýžþ_Xã;)äá_½¬]pãójÙHþ~U•‘ÿ!ÝzÒ­ï.`Ê`·{zÆ«wP°¤j(ý5à)ÌÿcMß7÷»ÿ rÎJ
 endstream
 endobj
-7119 0 obj <<
+7087 0 obj <<
 /Type /Page
-/Contents 7120 0 R
-/Resources 7118 0 R
+/Contents 7088 0 R
+/Resources 7086 0 R
 /MediaBox [0 0 612 792]
-/Parent 7094 0 R
+/Parent 7062 0 R
 >> endobj
-7121 0 obj <<
-/D [7119 0 R /XYZ 151.701 685.529 null]
+7089 0 obj <<
+/D [7087 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7122 0 obj <<
-/D [7119 0 R /XYZ 151.701 357.706 null]
+7090 0 obj <<
+/D [7087 0 R /XYZ 151.701 357.706 null]
 >> endobj
-7118 0 obj <<
+7086 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7125 0 obj <<
+7093 0 obj <<
 /Length 1846      
 /Filter /FlateDecode
 >>
@@ -47108,39 +46281,39 @@
 ;g=ÚdEÞ$¥•ûæ¦îFc`™£{X‹Å‘\•‘îûöa÷HD·
 endstream
 endobj
-7124 0 obj <<
+7092 0 obj <<
 /Type /Page
-/Contents 7125 0 R
-/Resources 7123 0 R
+/Contents 7093 0 R
+/Resources 7091 0 R
 /MediaBox [0 0 612 792]
-/Parent 7094 0 R
+/Parent 7062 0 R
 >> endobj
-7126 0 obj <<
-/D [7124 0 R /XYZ 100.892 685.529 null]
+7094 0 obj <<
+/D [7092 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7127 0 obj <<
-/D [7124 0 R /XYZ 100.892 609.016 null]
+7095 0 obj <<
+/D [7092 0 R /XYZ 100.892 609.016 null]
 >> endobj
-7128 0 obj <<
-/D [7124 0 R /XYZ 100.892 571.328 null]
+7096 0 obj <<
+/D [7092 0 R /XYZ 100.892 571.328 null]
 >> endobj
-7129 0 obj <<
-/D [7124 0 R /XYZ 100.892 522.212 null]
+7097 0 obj <<
+/D [7092 0 R /XYZ 100.892 522.212 null]
 >> endobj
-7130 0 obj <<
-/D [7124 0 R /XYZ 100.892 473.097 null]
+7098 0 obj <<
+/D [7092 0 R /XYZ 100.892 473.097 null]
 >> endobj
-7131 0 obj <<
-/D [7124 0 R /XYZ 100.892 437.53 null]
+7099 0 obj <<
+/D [7092 0 R /XYZ 100.892 437.53 null]
 >> endobj
-7132 0 obj <<
-/D [7124 0 R /XYZ 100.892 401.963 null]
+7100 0 obj <<
+/D [7092 0 R /XYZ 100.892 401.963 null]
 >> endobj
-7123 0 obj <<
+7091 0 obj <<
 /Font << /F28 1124 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7135 0 obj <<
+7103 0 obj <<
 /Length 1842      
 /Filter /FlateDecode
 >>
@@ -47167,27 +46340,27 @@
 „k³ìäþ€˜cÉæ~ýÌß×ÇÝ_ˆØª
 endstream
 endobj
-7134 0 obj <<
+7102 0 obj <<
 /Type /Page
-/Contents 7135 0 R
-/Resources 7133 0 R
+/Contents 7103 0 R
+/Resources 7101 0 R
 /MediaBox [0 0 612 792]
-/Parent 7139 0 R
+/Parent 7107 0 R
 >> endobj
-7136 0 obj <<
-/D [7134 0 R /XYZ 151.701 685.529 null]
+7104 0 obj <<
+/D [7102 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7137 0 obj <<
-/D [7134 0 R /XYZ 151.701 574.143 null]
+7105 0 obj <<
+/D [7102 0 R /XYZ 151.701 574.143 null]
 >> endobj
-7138 0 obj <<
-/D [7134 0 R /XYZ 151.701 194.202 null]
+7106 0 obj <<
+/D [7102 0 R /XYZ 151.701 194.202 null]
 >> endobj
-7133 0 obj <<
+7101 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7142 0 obj <<
+7110 0 obj <<
 /Length 1729      
 /Filter /FlateDecode
 >>
@@ -47211,27 +46384,27 @@
 x_íh»bñDƒù	ÁWp'¤`a±¬)(‚QðBƒh9ÉšŠ¥&ß6ËáÉ+:`ú‚Géž2ªXnR¡]HNŽdœ|$ÓÌÅ÷ñÂîVùÈ_ò\¾ÕwV˜K¾Á­Öåþ¶ç?>Â÷Í~óH¢³º
 endstream
 endobj
-7141 0 obj <<
+7109 0 obj <<
 /Type /Page
-/Contents 7142 0 R
-/Resources 7140 0 R
+/Contents 7110 0 R
+/Resources 7108 0 R
 /MediaBox [0 0 612 792]
-/Parent 7139 0 R
+/Parent 7107 0 R
 >> endobj
-7143 0 obj <<
-/D [7141 0 R /XYZ 100.892 685.529 null]
+7111 0 obj <<
+/D [7109 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7144 0 obj <<
-/D [7141 0 R /XYZ 100.892 559.899 null]
+7112 0 obj <<
+/D [7109 0 R /XYZ 100.892 559.899 null]
 >> endobj
-7145 0 obj <<
-/D [7141 0 R /XYZ 100.892 182.628 null]
+7113 0 obj <<
+/D [7109 0 R /XYZ 100.892 182.628 null]
 >> endobj
-7140 0 obj <<
+7108 0 obj <<
 /Font << /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7148 0 obj <<
+7116 0 obj <<
 /Length 2184      
 /Filter /FlateDecode
 >>
@@ -47257,21 +46430,21 @@
 uH_ÿÞ(ù¯EYlÈK2+ù}Bü{)”8K÷	T”ݯŸµÒßÝ«Ð÷aùNP!qÕœa72·Áèÿ®wn4ð£Ð=Ћhñ6yjþ÷ë¿Ÿÿ`å H
 endstream
 endobj
-7147 0 obj <<
+7115 0 obj <<
 /Type /Page
-/Contents 7148 0 R
-/Resources 7146 0 R
+/Contents 7116 0 R
+/Resources 7114 0 R
 /MediaBox [0 0 612 792]
-/Parent 7139 0 R
+/Parent 7107 0 R
 >> endobj
-7149 0 obj <<
-/D [7147 0 R /XYZ 151.701 685.529 null]
+7117 0 obj <<
+/D [7115 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7146 0 obj <<
+7114 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7152 0 obj <<
+7120 0 obj <<
 /Length 1903      
 /Filter /FlateDecode
 >>
@@ -47302,24 +46475,24 @@
 ÿr=´Ù3M•3ºïÚ'^qöŽ‹Ô2‡±:^qüÅåñpÃèq4BPD§%ÙûeøËôï“Ws/€ÓŽnK”Zt$%怯3Ç3 R­3ô<Vñ4R«gÓ¨¼Lâïý•$6¢œþ<óß׏›Wî<j
 endstream
 endobj
-7151 0 obj <<
+7119 0 obj <<
 /Type /Page
-/Contents 7152 0 R
-/Resources 7150 0 R
+/Contents 7120 0 R
+/Resources 7118 0 R
 /MediaBox [0 0 612 792]
-/Parent 7139 0 R
+/Parent 7107 0 R
 >> endobj
-7153 0 obj <<
-/D [7151 0 R /XYZ 100.892 685.529 null]
+7121 0 obj <<
+/D [7119 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7154 0 obj <<
-/D [7151 0 R /XYZ 100.892 283.801 null]
+7122 0 obj <<
+/D [7119 0 R /XYZ 100.892 283.801 null]
 >> endobj
-7150 0 obj <<
+7118 0 obj <<
 /Font << /F28 1124 0 R /F15 1133 0 R /F17 1131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7157 0 obj <<
+7125 0 obj <<
 /Length 1768      
 /Filter /FlateDecode
 >>
@@ -47353,27 +46526,27 @@
 óh¥Õ Ìœ5˜Î‰/É	 ®‹)Þ[ÊáÍ0Û˜‘ÆV›…AÞªƒƒ×ïïíœ#&ç8»é‘Ô´ÈòõÕ>µªû\*»>À¹Å”êÜ“– iïÅ$ûóª‘Üü¬’µh;}¼¯h|µ}jk¼aùéÄö£÷R:árÄ*ö3</\Ž&ï.^—î¶Tð¸i'—ñ¡`þÓŬ¯»ÿ ŽOÞR
 endstream
 endobj
-7156 0 obj <<
+7124 0 obj <<
 /Type /Page
-/Contents 7157 0 R
-/Resources 7155 0 R
+/Contents 7125 0 R
+/Resources 7123 0 R
 /MediaBox [0 0 612 792]
-/Parent 7139 0 R
+/Parent 7107 0 R
 >> endobj
-7158 0 obj <<
-/D [7156 0 R /XYZ 151.701 685.529 null]
+7126 0 obj <<
+/D [7124 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7159 0 obj <<
-/D [7156 0 R /XYZ 151.701 627.66 null]
+7127 0 obj <<
+/D [7124 0 R /XYZ 151.701 627.66 null]
 >> endobj
-7160 0 obj <<
-/D [7156 0 R /XYZ 151.701 435.791 null]
+7128 0 obj <<
+/D [7124 0 R /XYZ 151.701 435.791 null]
 >> endobj
-7155 0 obj <<
+7123 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F17 1131 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7163 0 obj <<
+7131 0 obj <<
 /Length 1458      
 /Filter /FlateDecode
 >>
@@ -47389,30 +46562,30 @@
 n?Ú·‘Ÿ¾ï¿.ìf3›a!—Ýù;Ž„óîehŒ¯C£Ú= ð™F	Iº9n‰Á¡ó†æìòmG̶ûWÖ'cðŸ°Á¿	È\ðçièF`ÝéÖÙzh§ÛËžïç®~ì·»m_7_ðK†‘þì°C„ìas<ž.ÈŒLŒâqOfGZNX^`~0ëÝcËî>¹Ü‡ÐÑ!›‡‡Óy»?>’òr2ôd‡õºæl„»óÓ³þ0½þk)üÁûtG(
 endstream
 endobj
-7162 0 obj <<
+7130 0 obj <<
 /Type /Page
-/Contents 7163 0 R
-/Resources 7161 0 R
+/Contents 7131 0 R
+/Resources 7129 0 R
 /MediaBox [0 0 612 792]
-/Parent 7139 0 R
+/Parent 7107 0 R
 >> endobj
-7164 0 obj <<
-/D [7162 0 R /XYZ 100.892 685.529 null]
+7132 0 obj <<
+/D [7130 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7165 0 obj <<
-/D [7162 0 R /XYZ 100.892 638.691 null]
+7133 0 obj <<
+/D [7130 0 R /XYZ 100.892 638.691 null]
 >> endobj
-7166 0 obj <<
-/D [7162 0 R /XYZ 100.892 403.258 null]
+7134 0 obj <<
+/D [7130 0 R /XYZ 100.892 403.258 null]
 >> endobj
-7167 0 obj <<
-/D [7162 0 R /XYZ 100.892 154.275 null]
+7135 0 obj <<
+/D [7130 0 R /XYZ 100.892 154.275 null]
 >> endobj
-7161 0 obj <<
+7129 0 obj <<
 /Font << /F28 1124 0 R /F17 1131 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7170 0 obj <<
+7138 0 obj <<
 /Length 1639      
 /Filter /FlateDecode
 >>
@@ -47437,27 +46610,27 @@
 VøþOÙ™‹Rãån«gUŸôŸMÛŒmÃbç±hm"‹®«ß\]ív;oSõžn6W%™m¯¼WµÇ~Z¶x§¤pk®ðJhkHìVðŸ RÄ(èYBHÇŸÁ?&sM‰¼#Âáe‹ÈÒ>áYš«,ïwfÉØ=ÿ«½\éÑÂûP•& ÃßY{¿ä -§.]
 endstream
 endobj
-7169 0 obj <<
+7137 0 obj <<
 /Type /Page
-/Contents 7170 0 R
-/Resources 7168 0 R
+/Contents 7138 0 R
+/Resources 7136 0 R
 /MediaBox [0 0 612 792]
-/Parent 7173 0 R
+/Parent 7141 0 R
 >> endobj
-7171 0 obj <<
-/D [7169 0 R /XYZ 151.701 685.529 null]
+7139 0 obj <<
+/D [7137 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7172 0 obj <<
-/D [7169 0 R /XYZ 151.701 598.85 null]
+7140 0 obj <<
+/D [7137 0 R /XYZ 151.701 598.85 null]
 >> endobj
 1110 0 obj <<
-/D [7169 0 R /XYZ 151.701 528.892 null]
+/D [7137 0 R /XYZ 151.701 528.892 null]
 >> endobj
-7168 0 obj <<
+7136 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F17 1131 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7178 0 obj <<
+7146 0 obj <<
 /Length 1450      
 /Filter /FlateDecode
 >>
@@ -47472,40 +46645,40 @@
 J†Iþ ÌÇ®êa¨ºñN*ôB`E€]„9B‰<‚²WÊN Ð)äœ!–el,q\,°®Z|ä°œàY朜@‘«8Ü\&¸!s¬>$ÆêÃc×ø„u3ÌáÈ4ƒÕj…ñdnZÊ4÷ñ ç4s˜—q" æ”ì‹^Æ,ìj­œ£ éÑØDËsÁ£”'ÿ¯åÇ× ¼dî<F0è*S·CÛU‡Ë}uX OØf¸IÂzÓÕQe·õO‘‚ÇYIJô?"ÅÑܸ¯¿ æ-Ž8
 endstream
 endobj
-7177 0 obj <<
+7145 0 obj <<
 /Type /Page
-/Contents 7178 0 R
-/Resources 7176 0 R
+/Contents 7146 0 R
+/Resources 7144 0 R
 /MediaBox [0 0 612 792]
-/Parent 7173 0 R
-/Annots [ 7174 0 R 7175 0 R 7180 0 R ]
+/Parent 7141 0 R
+/Annots [ 7142 0 R 7143 0 R 7148 0 R ]
 >> endobj
-7174 0 obj <<
+7142 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [286.673 422.682 449.028 434.674]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.gnu.org/licenses/)>>
 >> endobj
-7175 0 obj <<
+7143 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [395.551 334.612 460.543 346.604]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.gnu.org/philosophy/why-not-lgpl.html)>>
 >> endobj
-7180 0 obj <<
+7148 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [154.441 321.063 363.609 333.055]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.gnu.org/philosophy/why-not-lgpl.html)>>
 >> endobj
-7179 0 obj <<
-/D [7177 0 R /XYZ 100.892 685.529 null]
+7147 0 obj <<
+/D [7145 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7176 0 obj <<
-/Font << /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F11 2494 0 R >>
+7144 0 obj <<
+/Font << /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F11 2489 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7183 0 obj <<
+7151 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -47513,20 +46686,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-7182 0 obj <<
+7150 0 obj <<
 /Type /Page
-/Contents 7183 0 R
-/Resources 7181 0 R
+/Contents 7151 0 R
+/Resources 7149 0 R
 /MediaBox [0 0 612 792]
-/Parent 7173 0 R
+/Parent 7141 0 R
 >> endobj
-7184 0 obj <<
-/D [7182 0 R /XYZ 151.701 685.529 null]
+7152 0 obj <<
+/D [7150 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7181 0 obj <<
+7149 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-7188 0 obj <<
+7156 0 obj <<
 /Length 1700      
 /Filter /FlateDecode
 >>
@@ -47546,34 +46719,34 @@
 ®›tÊm›¾ÎÂ!rJFݍÏÄcéî^^Ïü`2JûÀb@€ôø€`^U!SúòÃ€|<	£$>*Œ”{Y˜§iLuÁ†u‘EÎØŸà›œŠË¥‡o¶õ0l~\.w»]¨¡xû]ÍþòÁö£ÓX^9üøùHôß›3øÄrÄ;ˆHñБÿ ÒÊn9
 endstream
 endobj
-7187 0 obj <<
+7155 0 obj <<
 /Type /Page
-/Contents 7188 0 R
-/Resources 7186 0 R
+/Contents 7156 0 R
+/Resources 7154 0 R
 /MediaBox [0 0 612 792]
-/Parent 7173 0 R
-/Annots [ 7185 0 R ]
+/Parent 7141 0 R
+/Annots [ 7153 0 R ]
 >> endobj
-7185 0 obj <<
+7153 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 229.204 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.easysw.com/)>>
 >> endobj
-7189 0 obj <<
-/D [7187 0 R /XYZ 100.892 685.529 null]
+7157 0 obj <<
+/D [7155 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1114 0 obj <<
-/D [7187 0 R /XYZ 100.892 587.701 null]
+/D [7155 0 R /XYZ 100.892 587.701 null]
 >> endobj
-7190 0 obj <<
-/D [7187 0 R /XYZ 100.892 587.701 null]
+7158 0 obj <<
+/D [7155 0 R /XYZ 100.892 587.701 null]
 >> endobj
-7186 0 obj <<
+7154 0 obj <<
 /Font << /F17 1131 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F30 1928 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7193 0 obj <<
+7161 0 obj <<
 /Length 1807      
 /Filter /FlateDecode
 >>
@@ -47593,21 +46766,21 @@
 º@ü¦4ò¶ÿZ¡%zªÝXÆ׋ÉŽýñ
 endstream
 endobj
-7192 0 obj <<
+7160 0 obj <<
 /Type /Page
-/Contents 7193 0 R
-/Resources 7191 0 R
+/Contents 7161 0 R
+/Resources 7159 0 R
 /MediaBox [0 0 612 792]
-/Parent 7173 0 R
+/Parent 7141 0 R
 >> endobj
-7194 0 obj <<
-/D [7192 0 R /XYZ 151.701 685.529 null]
+7162 0 obj <<
+/D [7160 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7191 0 obj <<
+7159 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7197 0 obj <<
+7165 0 obj <<
 /Length 1930      
 /Filter /FlateDecode
 >>
@@ -47623,21 +46796,21 @@
 S9³‹+Çîö^û¦çחȿ徿5“ÝMeû¡ß8ì?À¡Tq3©0îr}Æý Rj?o	˜½W-çgP®ð©Õi¿/ó½yÈÞ©{´Ïn¡o£& =ÜÅ	ØεÚÂn	)Û᳌)Ð÷mࣲŒ?̘^Ǥ„\-à•‰}wÃýÔ±—eaYįÃÞÅêU96+Â$J_Zqž’òü˜Z©]1C±ß¹oÒ~2åÁá5ˆ4~AäÁõÇqOàÕ'	hÐÂM"íó^[UÌ	Tô¯)/Cfê†=퀋1]Çïc‹†”…ªvš	èÏ_~ôù)â2.È1ÀŒ0´þ½'§ˆ¢BÇÃ’ßÛ¢€ Tô àö×y6t5Ünƒ€/JÅËüOûZϵúÑ7õÐrØ}$1ä|µÇãÃ)«·ß ‹q¾ãòtT‰GÑFŸ×…Ø.ÚøÐVñú4˜¢&ÿدᵀ­kŽeªÓãSx»1hÝñŒ»z¸ÖóúŽÿ[Ƚ?ù? Ï<´Ý'¿,¥\t¸Jý?Á|©2BùºÛíÝ›{·£4€y÷ÝmûŘ0Odòêz‚Éò«ëÉáôq¼ZÍþdN*¤
 endstream
 endobj
-7196 0 obj <<
+7164 0 obj <<
 /Type /Page
-/Contents 7197 0 R
-/Resources 7195 0 R
+/Contents 7165 0 R
+/Resources 7163 0 R
 /MediaBox [0 0 612 792]
-/Parent 7173 0 R
+/Parent 7141 0 R
 >> endobj
-7198 0 obj <<
-/D [7196 0 R /XYZ 100.892 685.529 null]
+7166 0 obj <<
+/D [7164 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7195 0 obj <<
+7163 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7201 0 obj <<
+7169 0 obj <<
 /Length 1808      
 /Filter /FlateDecode
 >>
@@ -47665,21 +46838,21 @@
 ïí:žþWÀ
 endstream
 endobj
-7200 0 obj <<
+7168 0 obj <<
 /Type /Page
-/Contents 7201 0 R
-/Resources 7199 0 R
+/Contents 7169 0 R
+/Resources 7167 0 R
 /MediaBox [0 0 612 792]
-/Parent 7203 0 R
+/Parent 7171 0 R
 >> endobj
-7202 0 obj <<
-/D [7200 0 R /XYZ 151.701 685.529 null]
+7170 0 obj <<
+/D [7168 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7199 0 obj <<
+7167 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F59 1905 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7207 0 obj <<
+7175 0 obj <<
 /Length 1328      
 /Filter /FlateDecode
 >>
@@ -47702,28 +46875,28 @@
 tÅÓØŸ4<Äšˆk“lŸï[hèL¸Éc=´Œ’»ÚµÎJ18¨ç „@a.…1q´çb2ü3AO"ÑC#¼‡¿ÝK+=„k.“»B½îº›§GG»ÝŽß寛Õ={ûI‚“qoâ÷=ìý/„ç_‘$+Â
 endstream
 endobj
-7206 0 obj <<
+7174 0 obj <<
 /Type /Page
-/Contents 7207 0 R
-/Resources 7205 0 R
+/Contents 7175 0 R
+/Resources 7173 0 R
 /MediaBox [0 0 612 792]
-/Parent 7203 0 R
-/Annots [ 7204 0 R ]
+/Parent 7171 0 R
+/Annots [ 7172 0 R ]
 >> endobj
-7204 0 obj <<
+7172 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 238.618 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.wireshark.org)>>
 >> endobj
-7208 0 obj <<
-/D [7206 0 R /XYZ 100.892 685.529 null]
+7176 0 obj <<
+/D [7174 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7205 0 obj <<
+7173 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F59 1905 0 R /F30 1928 0 R /F31 1929 0 R /F62 1930 0 R /F72 1931 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7211 0 obj <<
+7179 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -47731,20 +46904,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-7210 0 obj <<
+7178 0 obj <<
 /Type /Page
-/Contents 7211 0 R
-/Resources 7209 0 R
+/Contents 7179 0 R
+/Resources 7177 0 R
 /MediaBox [0 0 612 792]
-/Parent 7203 0 R
+/Parent 7171 0 R
 >> endobj
-7212 0 obj <<
-/D [7210 0 R /XYZ 151.701 685.529 null]
+7180 0 obj <<
+/D [7178 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7209 0 obj <<
+7177 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-7363 0 obj <<
+7331 0 obj <<
 /Length 1488      
 /Filter /FlateDecode
 >>
@@ -47764,1037 +46937,1037 @@
 †LœÄ€¡ƒ5±©‰¼^»®›yUQøƒÚØ¢r8J9Ý˾¶SÀ×qÃÁ×ý¢‘wôÅ §Ã‹]$m×ÜTµŽR*áY&÷ýöxxªíUü·Öpù`WWAoj³J?•¯JÎ/ÿÖ@£Ý|EH0/àq¶¥j_HSÿTˆå
 endstream
 endobj
-7362 0 obj <<
+7330 0 obj <<
 /Type /Page
-/Contents 7363 0 R
-/Resources 7361 0 R
+/Contents 7331 0 R
+/Resources 7329 0 R
 /MediaBox [0 0 612 792]
-/Parent 7203 0 R
-/Annots [ 7213 0 R 7214 0 R 7215 0 R 7216 0 R 7217 0 R 7218 0 R 7219 0 R 7220 0 R 7221 0 R 7222 0 R 7223 0 R 7224 0 R 7225 0 R 7226 0 R 7227 0 R 7228 0 R 7229 0 R 7230 0 R 7231 0 R 7232 0 R 7233 0 R 7234 0 R 7235 0 R 7236 0 R 7237 0 R 7238 0 R 7239 0 R 7240 0 R 7241 0 R 7242 0 R 7243 0 R 7244 0 R 7245 0 R 7246 0 R 7247 0 R 7248 0 R 7249 0 R 7250 0 R 7251 0 R 7252 0 R 7253 0 R 7254 0 R 7255 0 R 7256 0 R 7257 0 R 7258 0 R 7259 0 R 7260 0 R 7261 0 R 7262 0 R 7263 0 R 7264 0 R 7265 0 R 7266 0 R 7267 0 R 7268 0 R 7269 0 R 7270 0 R 7271 0 R 7272 0 R 7273 0 R 7274 0 R 7275 0 R 7276 0 R 7277 0 R 7278 0 R 7279 0 R 7280 0 R 7281 0 R 7282 0 R 7283 0 R 7284 0 R 7285 0 R 7286 0 R 7287 0 R 7288 0 R 7289 0 R 7290 0 R 7291 0 R 7292 0 R 7293 0 R 7294 0 R 7295 0 R 7296 0 R 7297 0 R 7298 0 R 7299 0 R 7300 0 R 7301 0 R 7302 0 R 7303 0 R 7304 0 R 7305 0 R 7306 0 R 7307 0 R 7308 0 R 7309 0 R 7310 0 R 7311 0 R 7312 0 R 7313 0 R 7314 0 R 7315 0 R 7316 0 R 7317 0 R 7318 0 R 7319 0 R 7320 0 R 7321 0 R 7322 0 R 7323 0 R 7324 0 R 7325 0 R 7326 0 R 7327 0 R 7328 0 R 7329 0 R 7330 0 R 7331 0 R 7332 0 R 7333 0 R 7334 0 R 7335 0 R 7336 0 R 7337 0 R 7338 0 R 7339 0 R 7340 0 R 7341 0 R 7342 0 R 7343 0 R 7344 0 R 7345 0 R 7346 0 R 7347 0 R 7348 0 R 7349 0 R 7350 0 R 7351 0 R 7352 0 R 7353 0 R 7354 0 R 7355 0 R 7356 0 R 7357 0 R ]
+/Parent 7171 0 R
+/Annots [ 7181 0 R 7182 0 R 7183 0 R 7184 0 R 7185 0 R 7186 0 R 7187 0 R 7188 0 R 7189 0 R 7190 0 R 7191 0 R 7192 0 R 7193 0 R 7194 0 R 7195 0 R 7196 0 R 7197 0 R 7198 0 R 7199 0 R 7200 0 R 7201 0 R 7202 0 R 7203 0 R 7204 0 R 7205 0 R 7206 0 R 7207 0 R 7208 0 R 7209 0 R 7210 0 R 7211 0 R 7212 0 R 7213 0 R 7214 0 R 7215 0 R 7216 0 R 7217 0 R 7218 0 R 7219 0 R 7220 0 R 7221 0 R 7222 0 R 7223 0 R 7224 0 R 7225 0 R 7226 0 R 7227 0 R 7228 0 R 7229 0 R 7230 0 R 7231 0 R 7232 0 R 7233 0 R 7234 0 R 7235 0 R 7236 0 R 7237 0 R 7238 0 R 7239 0 R 7240 0 R 7241 0 R 7242 0 R 7243 0 R 7244 0 R 7245 0 R 7246 0 R 7247 0 R 7248 0 R 7249 0 R 7250 0 R 7251 0 R 7252 0 R 7253 0 R 7254 0 R 7255 0 R 7256 0 R 7257 0 R 7258 0 R 7259 0 R 7260 0 R 7261 0 R 7262 0 R 7263 0 R 7264 0 R 7265 0 R 7266 0 R 7267 0 R 7268 0 R 7269 0 R 7270 0 R 7271 0 R 7272 0 R 7273 0 R 7274 0 R 7275 0 R 7276 0 R 7277 0 R 7278 0 R 7279 0 R 7280 0 R 7281 0 R 7282 0 R 7283 0 R 7284 0 R 7285 0 R 7286 0 R 7287 0 R 7288 0 R 7289 0 R 7290 0 R 7291 0 R 7292 0 R 7293 0 R 7294 0 R 7295 0 R 7296 0 R 7297 0 R 7298 0 R 7299 0 R 7300 0 R 7301 0 R 7302 0 R 7303 0 R 7304 0 R 7305 0 R 7306 0 R 7307 0 R 7308 0 R 7309 0 R 7310 0 R 7311 0 R 7312 0 R 7313 0 R 7314 0 R 7315 0 R 7316 0 R 7317 0 R 7318 0 R 7319 0 R 7320 0 R 7321 0 R 7322 0 R 7323 0 R 7324 0 R 7325 0 R ]
 >> endobj
-7213 0 obj <<
+7181 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.835 592.065 232.191 604.966]
 /Subtype /Link
 /A << /S /GoTo /D (page.169) >>
 >> endobj
-7214 0 obj <<
+7182 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [267.896 578.506 280.797 591.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.14) >>
 >> endobj
-7215 0 obj <<
+7183 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [285.471 578.506 298.373 591.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.23) >>
 >> endobj
-7216 0 obj <<
+7184 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [266.987 564.947 279.888 577.848]
 /Subtype /Link
 /A << /S /GoTo /D (page.14) >>
 >> endobj
-7217 0 obj <<
+7185 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [284.562 564.947 297.464 577.848]
 /Subtype /Link
 /A << /S /GoTo /D (page.23) >>
 >> endobj
-7218 0 obj <<
+7186 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [238.077 551.388 250.979 564.289]
 /Subtype /Link
 /A << /S /GoTo /D (page.42) >>
 >> endobj
-7219 0 obj <<
+7187 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.653 551.388 268.555 564.289]
 /Subtype /Link
 /A << /S /GoTo /D (page.49) >>
 >> endobj
-7220 0 obj <<
+7188 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.229 551.388 286.131 564.289]
 /Subtype /Link
 /A << /S /GoTo /D (page.71) >>
 >> endobj
-7221 0 obj <<
+7189 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [290.805 551.388 303.706 564.289]
 /Subtype /Link
 /A << /S /GoTo /D (page.81) >>
 >> endobj
-7222 0 obj <<
+7190 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.199 537.829 239.555 550.73]
 /Subtype /Link
 /A << /S /GoTo /D (page.175) >>
 >> endobj
-7223 0 obj <<
+7191 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.259 524.27 231.615 537.171]
 /Subtype /Link
 /A << /S /GoTo /D (page.153) >>
 >> endobj
-7224 0 obj <<
+7192 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.29 524.27 254.646 537.171]
 /Subtype /Link
 /A << /S /GoTo /D (page.274) >>
 >> endobj
-7225 0 obj <<
+7193 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.32 524.27 277.676 537.171]
 /Subtype /Link
 /A << /S /GoTo /D (page.343) >>
 >> endobj
-7226 0 obj <<
+7194 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [282.35 524.27 300.706 537.171]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-7227 0 obj <<
+7195 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [305.38 524.27 323.737 537.171]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-7228 0 obj <<
+7196 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [328.411 524.27 346.767 537.171]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-7229 0 obj <<
+7197 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.32 510.711 217.767 523.613]
 /Subtype /Link
 /A << /S /GoTo /D (page.6) >>
 >> endobj
-7230 0 obj <<
+7198 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [222.441 510.711 235.343 523.613]
 /Subtype /Link
 /A << /S /GoTo /D (page.34) >>
 >> endobj
-7231 0 obj <<
+7199 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [240.017 510.711 252.918 523.613]
 /Subtype /Link
 /A << /S /GoTo /D (page.64) >>
 >> endobj
-7232 0 obj <<
+7200 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [257.593 510.711 270.494 523.613]
 /Subtype /Link
 /A << /S /GoTo /D (page.65) >>
 >> endobj
-7233 0 obj <<
+7201 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [275.168 510.711 288.07 523.613]
 /Subtype /Link
 /A << /S /GoTo /D (page.77) >>
 >> endobj
-7234 0 obj <<
+7202 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [292.744 510.711 311.1 523.613]
 /Subtype /Link
 /A << /S /GoTo /D (page.111) >>
 >> endobj
-7235 0 obj <<
+7203 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [315.774 510.711 334.131 523.613]
 /Subtype /Link
 /A << /S /GoTo /D (page.312) >>
 >> endobj
-7236 0 obj <<
+7204 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [338.805 510.711 357.161 523.613]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-7237 0 obj <<
+7205 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [361.835 510.711 380.191 523.613]
 /Subtype /Link
 /A << /S /GoTo /D (page.476) >>
 >> endobj
-7238 0 obj <<
+7206 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.229 497.152 248.585 510.054]
 /Subtype /Link
 /A << /S /GoTo /D (page.300) >>
 >> endobj
-7239 0 obj <<
+7207 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [253.259 497.152 271.615 510.054]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-7240 0 obj <<
+7208 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [229.29 483.593 247.646 496.495]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-7241 0 obj <<
+7209 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [252.32 483.593 270.676 496.495]
 /Subtype /Link
 /A << /S /GoTo /D (page.302) >>
 >> endobj
-7242 0 obj <<
+7210 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [275.35 483.593 293.706 496.495]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-7243 0 obj <<
+7211 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [298.38 483.593 316.737 496.495]
 /Subtype /Link
 /A << /S /GoTo /D (page.355) >>
 >> endobj
-7244 0 obj <<
+7212 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [321.411 483.593 339.767 496.495]
 /Subtype /Link
 /A << /S /GoTo /D (page.395) >>
 >> endobj
-7245 0 obj <<
+7213 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.168 470.034 254.07 482.936]
 /Subtype /Link
 /A << /S /GoTo /D (page.39) >>
 >> endobj
-7246 0 obj <<
+7214 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [258.744 470.034 271.646 482.936]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-7247 0 obj <<
+7215 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [276.32 470.034 294.676 482.936]
 /Subtype /Link
 /A << /S /GoTo /D (page.114) >>
 >> endobj
-7248 0 obj <<
+7216 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [299.35 470.034 317.706 482.936]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-7249 0 obj <<
+7217 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [240.259 456.475 253.161 469.377]
 /Subtype /Link
 /A << /S /GoTo /D (page.39) >>
 >> endobj
-7250 0 obj <<
+7218 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [257.835 456.475 270.737 469.377]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-7251 0 obj <<
+7219 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [275.411 456.475 293.767 469.377]
 /Subtype /Link
 /A << /S /GoTo /D (page.115) >>
 >> endobj
-7252 0 obj <<
+7220 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [298.441 456.475 316.797 469.377]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-7253 0 obj <<
+7221 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [240.199 442.916 253.1 455.818]
 /Subtype /Link
 /A << /S /GoTo /D (page.71) >>
 >> endobj
-7254 0 obj <<
+7222 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [257.774 442.916 270.676 455.818]
 /Subtype /Link
 /A << /S /GoTo /D (page.98) >>
 >> endobj
-7255 0 obj <<
+7223 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.753 429.357 262.654 442.259]
 /Subtype /Link
 /A << /S /GoTo /D (page.39) >>
 >> endobj
-7256 0 obj <<
+7224 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [267.974 429.357 280.875 442.259]
 /Subtype /Link
 /A << /S /GoTo /D (page.72) >>
 >> endobj
-7257 0 obj <<
+7225 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [286.195 429.357 299.096 442.259]
 /Subtype /Link
 /A << /S /GoTo /D (page.75) >>
 >> endobj
-7258 0 obj <<
+7226 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [302.558 429.357 315.46 442.259]
 /Subtype /Link
 /A << /S /GoTo /D (page.77) >>
 >> endobj
-7259 0 obj <<
+7227 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [320.779 429.357 339.135 442.259]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-7260 0 obj <<
+7228 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [344.455 429.357 362.811 442.259]
 /Subtype /Link
 /A << /S /GoTo /D (page.120) >>
 >> endobj
-7261 0 obj <<
+7229 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [368.13 429.357 386.486 442.259]
 /Subtype /Link
 /A << /S /GoTo /D (page.171) >>
 >> endobj
-7262 0 obj <<
+7230 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.806 429.357 410.162 442.259]
 /Subtype /Link
 /A << /S /GoTo /D (page.281) >>
 >> endobj
-7263 0 obj <<
+7231 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.481 429.357 433.837 442.259]
 /Subtype /Link
 /A << /S /GoTo /D (page.298) >>
 >> endobj
-7264 0 obj <<
+7232 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 429.357 457.513 442.259]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-7265 0 obj <<
+7233 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.441 416.414 172.797 427.558]
 /Subtype /Link
 /A << /S /GoTo /D (page.312) >>
 >> endobj
-7266 0 obj <<
+7234 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.471 416.414 195.827 427.558]
 /Subtype /Link
 /A << /S /GoTo /D (page.355) >>
 >> endobj
-7267 0 obj <<
+7235 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [282.684 402.249 301.04 415.151]
 /Subtype /Link
 /A << /S /GoTo /D (page.161) >>
 >> endobj
-7268 0 obj <<
+7236 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [305.714 402.249 324.07 415.151]
 /Subtype /Link
 /A << /S /GoTo /D (page.169) >>
 >> endobj
-7269 0 obj <<
+7237 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [328.744 402.249 347.1 415.151]
 /Subtype /Link
 /A << /S /GoTo /D (page.247) >>
 >> endobj
-7270 0 obj <<
+7238 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.994 388.69 232.895 401.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.37) >>
 >> endobj
-7271 0 obj <<
+7239 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [237.546 388.69 250.448 401.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.68) >>
 >> endobj
-7272 0 obj <<
+7240 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.099 388.69 273.455 401.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-7273 0 obj <<
+7241 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [278.106 388.69 296.462 401.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.183) >>
 >> endobj
-7274 0 obj <<
+7242 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [301.113 388.69 319.47 401.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.274) >>
 >> endobj
-7275 0 obj <<
+7243 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [324.121 388.69 342.477 401.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.281) >>
 >> endobj
-7276 0 obj <<
+7244 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [347.128 388.69 365.484 401.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-7277 0 obj <<
+7245 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [370.135 388.69 388.491 401.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.343) >>
 >> endobj
-7278 0 obj <<
+7246 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [393.142 388.69 411.498 401.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.350) >>
 >> endobj
-7279 0 obj <<
+7247 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.149 388.69 434.505 401.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-7280 0 obj <<
+7248 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 388.69 457.513 401.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-7281 0 obj <<
+7249 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.441 375.747 172.797 386.891]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-7282 0 obj <<
+7250 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.471 375.747 195.827 386.891]
 /Subtype /Link
 /A << /S /GoTo /D (page.448) >>
 >> endobj
-7283 0 obj <<
+7251 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.502 375.747 218.858 386.891]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-7284 0 obj <<
+7252 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.532 375.747 241.888 386.891]
 /Subtype /Link
 /A << /S /GoTo /D (page.541) >>
 >> endobj
-7285 0 obj <<
+7253 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [256.593 361.582 269.494 374.484]
 /Subtype /Link
 /A << /S /GoTo /D (page.64) >>
 >> endobj
-7286 0 obj <<
+7254 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [274.168 361.582 292.525 374.484]
 /Subtype /Link
 /A << /S /GoTo /D (page.116) >>
 >> endobj
-7287 0 obj <<
+7255 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [243.896 348.023 256.797 360.925]
 /Subtype /Link
 /A << /S /GoTo /D (page.35) >>
 >> endobj
-7288 0 obj <<
+7256 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.35 334.464 249.252 347.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.71) >>
 >> endobj
-7289 0 obj <<
+7257 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [253.926 334.464 272.282 347.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.112) >>
 >> endobj
-7290 0 obj <<
+7258 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.017 320.905 234.373 333.807]
 /Subtype /Link
 /A << /S /GoTo /D (page.496) >>
 >> endobj
-7291 0 obj <<
+7259 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [272.532 307.347 290.888 320.248]
 /Subtype /Link
 /A << /S /GoTo /D (page.289) >>
 >> endobj
-7292 0 obj <<
+7260 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [295.562 307.347 313.918 320.248]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-7293 0 obj <<
+7261 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [264.411 293.788 282.767 306.689]
 /Subtype /Link
 /A << /S /GoTo /D (page.113) >>
 >> endobj
-7294 0 obj <<
+7262 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.865 280.229 239.221 293.13]
 /Subtype /Link
 /A << /S /GoTo /D (page.343) >>
 >> endobj
-7295 0 obj <<
+7263 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [243.896 280.229 262.252 293.13]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-7296 0 obj <<
+7264 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [264.562 266.67 282.918 279.571]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-7297 0 obj <<
+7265 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.987 253.111 255.343 266.012]
 /Subtype /Link
 /A << /S /GoTo /D (page.161) >>
 >> endobj
-7298 0 obj <<
+7266 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [225.047 239.552 237.949 252.454]
 /Subtype /Link
 /A << /S /GoTo /D (page.74) >>
 >> endobj
-7299 0 obj <<
+7267 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.623 239.552 260.979 252.454]
 /Subtype /Link
 /A << /S /GoTo /D (page.122) >>
 >> endobj
-7300 0 obj <<
+7268 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [256.732 225.993 275.088 238.895]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-7301 0 obj <<
+7269 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.562 212.434 273.918 225.336]
 /Subtype /Link
 /A << /S /GoTo /D (page.356) >>
 >> endobj
-7302 0 obj <<
+7270 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [308.278 198.875 321.179 211.777]
 /Subtype /Link
 /A << /S /GoTo /D (page.35) >>
 >> endobj
-7303 0 obj <<
+7271 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [325.853 198.875 338.755 211.777]
 /Subtype /Link
 /A << /S /GoTo /D (page.64) >>
 >> endobj
-7304 0 obj <<
+7272 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.805 185.316 220.161 198.218]
 /Subtype /Link
 /A << /S /GoTo /D (page.496) >>
 >> endobj
-7305 0 obj <<
+7273 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.29 171.757 252.646 184.659]
 /Subtype /Link
 /A << /S /GoTo /D (page.496) >>
 >> endobj
-7306 0 obj <<
+7274 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.774 158.198 227.131 171.1]
 /Subtype /Link
 /A << /S /GoTo /D (page.495) >>
 >> endobj
-7307 0 obj <<
+7275 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.29 144.639 262.646 157.541]
 /Subtype /Link
 /A << /S /GoTo /D (page.495) >>
 >> endobj
-7308 0 obj <<
+7276 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.471 131.081 311.828 143.982]
 /Subtype /Link
 /A << /S /GoTo /D (page.334) >>
 >> endobj
-7309 0 obj <<
+7277 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.108 117.522 224.464 130.423]
 /Subtype /Link
 /A << /S /GoTo /D (page.496) >>
 >> endobj
-7310 0 obj <<
+7278 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [408.355 592.065 426.711 604.966]
 /Subtype /Link
 /A << /S /GoTo /D (page.496) >>
 >> endobj
-7311 0 obj <<
+7279 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [470.9 578.438 489.256 591.34]
 /Subtype /Link
 /A << /S /GoTo /D (page.496) >>
 >> endobj
-7312 0 obj <<
+7280 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [435.385 564.812 453.741 577.713]
 /Subtype /Link
 /A << /S /GoTo /D (page.496) >>
 >> endobj
-7313 0 obj <<
+7281 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.93 551.186 463.287 564.087]
 /Subtype /Link
 /A << /S /GoTo /D (page.334) >>
 >> endobj
-7314 0 obj <<
+7282 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.294 537.559 449.65 550.461]
 /Subtype /Link
 /A << /S /GoTo /D (page.334) >>
 >> endobj
-7315 0 obj <<
+7283 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [454.324 537.559 472.681 550.461]
 /Subtype /Link
 /A << /S /GoTo /D (page.496) >>
 >> endobj
-7316 0 obj <<
+7284 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.9 523.933 460.256 536.835]
 /Subtype /Link
 /A << /S /GoTo /D (page.161) >>
 >> endobj
-7317 0 obj <<
+7285 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.112 510.307 451.468 523.208]
 /Subtype /Link
 /A << /S /GoTo /D (page.496) >>
 >> endobj
-7318 0 obj <<
+7286 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [460.521 497.286 478.878 509.582]
 /Subtype /Link
 /A << /S /GoTo /D (page.209) >>
 >> endobj
-7319 0 obj <<
+7287 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.537 483.66 457.893 495.956]
 /Subtype /Link
 /A << /S /GoTo /D (page.155) >>
 >> endobj
-7320 0 obj <<
+7288 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [462.567 483.66 480.923 495.956]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-7321 0 obj <<
+7289 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [454.688 470.034 473.044 482.329]
 /Subtype /Link
 /A << /S /GoTo /D (page.209) >>
 >> endobj
-7322 0 obj <<
+7290 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [380.294 456.407 398.65 468.097]
 /Subtype /Link
 /A << /S /GoTo /D (page.332) >>
 >> endobj
-7323 0 obj <<
+7291 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.627 431.533 444.529 443.222]
 /Subtype /Link
 /A << /S /GoTo /D (page.65) >>
 >> endobj
-7324 0 obj <<
+7292 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.173 417.907 401.074 429.051]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-7325 0 obj <<
+7293 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.567 404.28 449.923 415.97]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-7326 0 obj <<
+7294 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [386.476 390.654 404.832 401.798]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-7327 0 obj <<
+7295 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [409.506 390.654 427.862 401.798]
 /Subtype /Link
 /A << /S /GoTo /D (page.443) >>
 >> endobj
-7328 0 obj <<
+7296 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.173 377.028 441.529 388.717]
 /Subtype /Link
 /A << /S /GoTo /D (page.440) >>
 >> endobj
-7329 0 obj <<
+7297 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.203 377.028 464.559 388.717]
 /Subtype /Link
 /A << /S /GoTo /D (page.449) >>
 >> endobj
-7330 0 obj <<
+7298 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [463.294 349.775 481.65 361.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.441) >>
 >> endobj
-7331 0 obj <<
+7299 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [427.476 336.149 445.832 347.838]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-7332 0 obj <<
+7300 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [450.506 336.149 468.862 347.838]
 /Subtype /Link
 /A << /S /GoTo /D (page.434) >>
 >> endobj
-7333 0 obj <<
+7301 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [473.537 336.149 491.893 347.838]
 /Subtype /Link
 /A << /S /GoTo /D (page.442) >>
 >> endobj
-7334 0 obj <<
+7302 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.446 322.522 421.802 334.212]
 /Subtype /Link
 /A << /S /GoTo /D (page.447) >>
 >> endobj
-7335 0 obj <<
+7303 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.536 308.896 412.893 320.04]
 /Subtype /Link
 /A << /S /GoTo /D (page.147) >>
 >> endobj
-7336 0 obj <<
+7304 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.567 308.896 435.923 320.04]
 /Subtype /Link
 /A << /S /GoTo /D (page.441) >>
 >> endobj
-7337 0 obj <<
+7305 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.431 295.27 459.788 306.838]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-7338 0 obj <<
+7306 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [448.87 281.643 467.226 293.333]
 /Subtype /Link
 /A << /S /GoTo /D (page.541) >>
 >> endobj
-7339 0 obj <<
+7307 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.658 268.017 472.014 279.707]
 /Subtype /Link
 /A << /S /GoTo /D (page.312) >>
 >> endobj
-7340 0 obj <<
+7308 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [427.93 254.391 446.287 265.535]
 /Subtype /Link
 /A << /S /GoTo /D (page.375) >>
 >> endobj
-7341 0 obj <<
+7309 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.082 240.765 451.438 252.454]
 /Subtype /Link
 /A << /S /GoTo /D (page.505) >>
 >> endobj
-7342 0 obj <<
+7310 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.93 227.138 432.287 238.828]
 /Subtype /Link
 /A << /S /GoTo /D (page.430) >>
 >> endobj
-7343 0 obj <<
+7311 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [436.961 227.138 455.317 238.828]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-7344 0 obj <<
+7312 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.644 199.886 458 211.575]
 /Subtype /Link
 /A << /S /GoTo /D (page.269) >>
 >> endobj
-7345 0 obj <<
+7313 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.219 186.259 433.576 197.827]
 /Subtype /Link
 /A << /S /GoTo /D (page.347) >>
 >> endobj
-7346 0 obj <<
+7314 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.25 186.259 456.606 197.827]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-7347 0 obj <<
+7315 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.098 172.633 423.454 183.777]
 /Subtype /Link
 /A << /S /GoTo /D (page.347) >>
 >> endobj
-7348 0 obj <<
+7316 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.128 172.633 446.485 183.777]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-7349 0 obj <<
+7317 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [451.159 172.633 469.515 183.777]
 /Subtype /Link
 /A << /S /GoTo /D (page.429) >>
 >> endobj
-7350 0 obj <<
+7318 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.886 159.007 435.242 170.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.347) >>
 >> endobj
-7351 0 obj <<
+7319 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.916 159.007 458.272 170.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-7352 0 obj <<
+7320 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.159 145.38 432.515 156.524]
 /Subtype /Link
 /A << /S /GoTo /D (page.504) >>
 >> endobj
-7353 0 obj <<
+7321 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.28 131.754 415.636 142.898]
 /Subtype /Link
 /A << /S /GoTo /D (page.347) >>
 >> endobj
-7354 0 obj <<
+7322 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.31 131.754 438.666 142.898]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-7355 0 obj <<
+7323 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.341 131.754 461.697 142.898]
 /Subtype /Link
 /A << /S /GoTo /D (page.429) >>
 >> endobj
-7356 0 obj <<
+7324 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [380.446 118.128 398.802 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.326) >>
 >> endobj
-7357 0 obj <<
+7325 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.476 118.128 421.832 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.443) >>
 >> endobj
-7364 0 obj <<
-/D [7362 0 R /XYZ 100.892 685.529 null]
+7332 0 obj <<
+/D [7330 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7361 0 obj <<
+7329 0 obj <<
 /Font << /F17 1131 0 R /F15 1133 0 R /F51 1134 0 R /F28 1124 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7498 0 obj <<
+7466 0 obj <<
 /Length 1546      
 /Filter /FlateDecode
 >>
@@ -48815,946 +47988,946 @@
 UÆø09Û/A0<‚ƒ×=®àÌ‹Îô"Û–4-ëîÏ2ÀCÀIÁ¥ªz¨uzÈ­J¨¥ÓšN€m"-õ‘ÑÅ\–}шdÝ>sšYŒ£}—Æ•e^Ç9åB¡}|-^4û‘óW©¼ÜQt‘§öj6ÚñøïÛÍâ‰U at 8
 endstream
 endobj
-7497 0 obj <<
+7465 0 obj <<
 /Type /Page
-/Contents 7498 0 R
-/Resources 7496 0 R
+/Contents 7466 0 R
+/Resources 7464 0 R
 /MediaBox [0 0 612 792]
-/Parent 7203 0 R
-/Annots [ 7358 0 R 7359 0 R 7360 0 R 7365 0 R 7366 0 R 7367 0 R 7368 0 R 7369 0 R 7370 0 R 7371 0 R 7372 0 R 7373 0 R 7374 0 R 7375 0 R 7376 0 R 7377 0 R 7378 0 R 7379 0 R 7380 0 R 7381 0 R 7382 0 R 7383 0 R 7384 0 R 7385 0 R 7386 0 R 7387 0 R 7388 0 R 7389 0 R 7390 0 R 7391 0 R 7392 0 R 7393 0 R 7394 0 R 7395 0 R 7396 0 R 7397 0 R 7398 0 R 7399 0 R 7400 0 R 7401 0 R 7402 0 R 7403 0 R 7404 0 R 7405 0 R 7406 0 R 7407 0 R 7408 0 R 7409 0 R 7410 0 R 7411 0 R 7412 0 R 7413 0 R 7414 0 R 7415 0 R 7416 0 R 7417 0 R 7418 0 R 7419 0 R 7420 0 R 7421 0 R 7422 0 R 7423 0 R 7424 0 R 7425 0 R 7426 0 R 7427 0 R 7428 0 R 7429 0 R 7430 0 R 7431 0 R 7432 0 R 7433 0 R 7434 0 R 7435 0 R 7436 0 R 7437 0 R 7438 0 R 7439 0 R 7440 0 R 7441 0 R 7442 0 R 7443 0 R 7444 0 R 7445 0 R 7446 0 R 7447 0 R 7448 0 R 7449 0 R 7450 0 R 7451 0 R 7452 0 R 7453 0 R 7454 0 R 7455 0 R 7456 0 R 7457 0 R 7458 0 R 7459 0 R 7460 0 R 7461 0 R 7462 0 R 7463 0 R 7464 0 R 7465 0 R 7466 0 R 7467 0 R 7468 0 R 7469 0 R 7470 0 R 7471 0 R 7472 0 R 7473 0 R 7474 0 R 7475 0 R 7476 0 R 7477 0 R 7478 0 R 7479 0 R 7480 0 R 7481 0 R 7482 0 R 7483 0 R 7484 0 R 7485 0 R 7486 0 R 7487 0 R 7488 0 R 7489 0 R 7490 0 R 7491 0 R 7492 0 R 7493 0 R ]
+/Parent 7171 0 R
+/Annots [ 7326 0 R 7327 0 R 7328 0 R 7333 0 R 7334 0 R 7335 0 R 7336 0 R 7337 0 R 7338 0 R 7339 0 R 7340 0 R 7341 0 R 7342 0 R 7343 0 R 7344 0 R 7345 0 R 7346 0 R 7347 0 R 7348 0 R 7349 0 R 7350 0 R 7351 0 R 7352 0 R 7353 0 R 7354 0 R 7355 0 R 7356 0 R 7357 0 R 7358 0 R 7359 0 R 7360 0 R 7361 0 R 7362 0 R 7363 0 R 7364 0 R 7365 0 R 7366 0 R 7367 0 R 7368 0 R 7369 0 R 7370 0 R 7371 0 R 7372 0 R 7373 0 R 7374 0 R 7375 0 R 7376 0 R 7377 0 R 7378 0 R 7379 0 R 7380 0 R 7381 0 R 7382 0 R 7383 0 R 7384 0 R 7385 0 R 7386 0 R 7387 0 R 7388 0 R 7389 0 R 7390 0 R 7391 0 R 7392 0 R 7393 0 R 7394 0 R 7395 0 R 7396 0 R 7397 0 R 7398 0 R 7399 0 R 7400 0 R 7401 0 R 7402 0 R 7403 0 R 7404 0 R 7405 0 R 7406 0 R 7407 0 R 7408 0 R 7409 0 R 7410 0 R 7411 0 R 7412 0 R 7413 0 R 7414 0 R 7415 0 R 7416 0 R 7417 0 R 7418 0 R 7419 0 R 7420 0 R 7421 0 R 7422 0 R 7423 0 R 7424 0 R 7425 0 R 7426 0 R 7427 0 R 7428 0 R 7429 0 R 7430 0 R 7431 0 R 7432 0 R 7433 0 R 7434 0 R 7435 0 R 7436 0 R 7437 0 R 7438 0 R 7439 0 R 7440 0 R 7441 0 R 7442 0 R 7443 0 R 7444 0 R 7445 0 R 7446 0 R 7447 0 R 7448 0 R 7449 0 R 7450 0 R 7451 0 R 7452 0 R 7453 0 R 7454 0 R 7455 0 R 7456 0 R 7457 0 R 7458 0 R 7459 0 R 7460 0 R 7461 0 R ]
 >> endobj
-7358 0 obj <<
+7326 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [238.796 646.546 257.152 658.115]
 /Subtype /Link
 /A << /S /GoTo /D (page.217) >>
 >> endobj
-7359 0 obj <<
+7327 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [261.826 646.546 280.182 658.115]
 /Subtype /Link
 /A << /S /GoTo /D (page.441) >>
 >> endobj
-7360 0 obj <<
+7328 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [284.857 646.546 303.213 658.115]
 /Subtype /Link
 /A << /S /GoTo /D (page.442) >>
 >> endobj
-7365 0 obj <<
+7333 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [267.493 632.997 285.849 644.397]
 /Subtype /Link
 /A << /S /GoTo /D (page.428) >>
 >> endobj
-7366 0 obj <<
+7334 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.22 619.448 250.576 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.516) >>
 >> endobj
-7367 0 obj <<
+7335 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [284.099 605.899 302.455 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.517) >>
 >> endobj
-7368 0 obj <<
+7336 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.493 592.35 272.849 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.517) >>
 >> endobj
-7369 0 obj <<
+7337 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [288.905 578.8 307.261 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-7370 0 obj <<
+7338 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [311.31 578.8 329.666 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-7371 0 obj <<
+7339 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [333.716 578.8 352.072 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-7372 0 obj <<
+7340 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [356.121 578.8 374.477 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.268) >>
 >> endobj
-7373 0 obj <<
+7341 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.526 578.8 396.883 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.285) >>
 >> endobj
-7374 0 obj <<
+7342 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.932 578.8 419.288 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.298) >>
 >> endobj
-7375 0 obj <<
+7343 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.337 578.8 441.693 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.309) >>
 >> endobj
-7376 0 obj <<
+7344 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [445.742 578.8 464.099 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.428) >>
 >> endobj
-7377 0 obj <<
+7345 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [467.561 578.8 485.917 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.431) >>
 >> endobj
-7378 0 obj <<
+7346 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 578.8 508.322 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.452) >>
 >> endobj
-7379 0 obj <<
+7347 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.25 565.251 223.607 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.453) >>
 >> endobj
-7380 0 obj <<
+7348 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.281 565.251 246.637 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.455) >>
 >> endobj
-7381 0 obj <<
+7349 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [251.311 565.251 269.667 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.457) >>
 >> endobj
-7382 0 obj <<
+7350 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.129 565.251 291.485 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.459) >>
 >> endobj
-7383 0 obj <<
+7351 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [296.16 565.251 314.516 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.463) >>
 >> endobj
-7384 0 obj <<
+7352 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [319.19 565.251 337.546 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-7385 0 obj <<
+7353 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [342.22 565.251 360.576 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.493) >>
 >> endobj
-7386 0 obj <<
+7354 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [300.63 551.702 318.987 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.467) >>
 >> endobj
-7387 0 obj <<
+7355 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [266.994 538.153 285.35 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.465) >>
 >> endobj
-7388 0 obj <<
+7356 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.721 524.604 268.077 536.003]
 /Subtype /Link
 /A << /S /GoTo /D (page.285) >>
 >> endobj
-7389 0 obj <<
+7357 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [318.57 511.054 336.926 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-7390 0 obj <<
+7358 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [258.539 497.505 276.896 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.477) >>
 >> endobj
-7391 0 obj <<
+7359 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [261.6 483.956 279.956 495.524]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-7392 0 obj <<
+7360 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.842 470.407 278.199 481.551]
 /Subtype /Link
 /A << /S /GoTo /D (page.293) >>
 >> endobj
-7393 0 obj <<
+7361 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [282.873 470.407 301.229 481.551]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-7394 0 obj <<
+7362 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [250.055 456.858 268.411 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.465) >>
 >> endobj
-7395 0 obj <<
+7363 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [285.311 443.308 303.667 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.349) >>
 >> endobj
-7396 0 obj <<
+7364 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [317.341 429.759 335.698 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-7397 0 obj <<
+7365 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.311 416.21 264.667 427.778]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-7398 0 obj <<
+7366 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [269.341 416.21 287.698 427.778]
 /Subtype /Link
 /A << /S /GoTo /D (page.300) >>
 >> endobj
-7399 0 obj <<
+7367 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [290.826 402.661 309.182 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.335) >>
 >> endobj
-7400 0 obj <<
+7368 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [302.614 389.112 320.97 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.335) >>
 >> endobj
-7401 0 obj <<
+7369 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [258.661 362.013 277.017 373.581]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-7402 0 obj <<
+7370 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [283.008 348.464 301.364 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.335) >>
 >> endobj
-7403 0 obj <<
+7371 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [327.281 334.915 345.637 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.335) >>
 >> endobj
-7404 0 obj <<
+7372 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [248.978 321.366 261.879 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.38) >>
 >> endobj
-7405 0 obj <<
+7373 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [266.554 321.366 279.455 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.68) >>
 >> endobj
-7406 0 obj <<
+7374 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [284.129 321.366 302.485 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-7407 0 obj <<
+7375 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [312.917 307.816 331.273 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.324) >>
 >> endobj
-7408 0 obj <<
+7376 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [337.523 294.267 350.425 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.84) >>
 >> endobj
-7409 0 obj <<
+7377 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [311.19 280.718 329.546 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.444) >>
 >> endobj
-7410 0 obj <<
+7378 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [276.887 267.169 289.789 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.35) >>
 >> endobj
-7411 0 obj <<
+7379 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [294.463 267.169 307.364 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.66) >>
 >> endobj
-7412 0 obj <<
+7380 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [312.038 267.169 330.395 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.112) >>
 >> endobj
-7413 0 obj <<
+7381 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.311 253.62 264.667 265.188]
 /Subtype /Link
 /A << /S /GoTo /D (page.346) >>
 >> endobj
-7414 0 obj <<
+7382 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.493 240.07 252.849 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.300) >>
 >> endobj
-7415 0 obj <<
+7383 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [257.523 240.07 275.879 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.434) >>
 >> endobj
-7416 0 obj <<
+7384 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [280.554 240.07 298.91 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-7417 0 obj <<
+7385 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [303.584 240.07 321.94 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.477) >>
 >> endobj
-7418 0 obj <<
+7386 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.842 226.521 278.199 237.665]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-7419 0 obj <<
+7387 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [275.554 212.972 293.91 224.54]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-7420 0 obj <<
+7388 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [268.917 199.423 287.273 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.238) >>
 >> endobj
-7421 0 obj <<
+7389 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [239.22 185.874 257.576 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.430) >>
 >> endobj
-7422 0 obj <<
+7390 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [258.008 172.324 276.364 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.436) >>
 >> endobj
-7423 0 obj <<
+7391 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [317.22 158.775 335.576 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.298) >>
 >> endobj
-7424 0 obj <<
+7392 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [262.857 145.226 281.213 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-7425 0 obj <<
+7393 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.311 131.677 267.667 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.434) >>
 >> endobj
-7426 0 obj <<
+7394 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [319.857 118.128 332.758 129.527]
 /Subtype /Link
 /A << /S /GoTo /D (page.41) >>
 >> endobj
-7427 0 obj <<
+7395 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [337.432 118.128 350.334 129.527]
 /Subtype /Link
 /A << /S /GoTo /D (page.80) >>
 >> endobj
-7428 0 obj <<
+7396 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [500.316 646.546 518.672 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-7429 0 obj <<
+7397 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [482.922 632.93 501.278 644.62]
 /Subtype /Link
 /A << /S /GoTo /D (page.271) >>
 >> endobj
-7430 0 obj <<
+7398 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [493.043 619.314 505.945 631.004]
 /Subtype /Link
 /A << /S /GoTo /D (page.57) >>
 >> endobj
-7431 0 obj <<
+7399 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [510.619 619.314 523.52 631.004]
 /Subtype /Link
 /A << /S /GoTo /D (page.84) >>
 >> endobj
-7432 0 obj <<
+7400 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [497.346 605.698 515.702 617.388]
 /Subtype /Link
 /A << /S /GoTo /D (page.238) >>
 >> endobj
-7433 0 obj <<
+7401 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [526.649 591.476 539.551 604.378]
 /Subtype /Link
 /A << /S /GoTo /D (page.14) >>
 >> endobj
-7434 0 obj <<
+7402 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [544.225 591.476 557.126 604.378]
 /Subtype /Link
 /A << /S /GoTo /D (page.23) >>
 >> endobj
-7435 0 obj <<
+7403 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [561.801 591.476 574.702 604.378]
 /Subtype /Link
 /A << /S /GoTo /D (page.39) >>
 >> endobj
-7436 0 obj <<
+7404 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [579.376 591.476 592.278 604.378]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-7437 0 obj <<
+7405 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [596.952 591.476 615.308 604.378]
 /Subtype /Link
 /A << /S /GoTo /D (page.114) >>
 >> endobj
-7438 0 obj <<
+7406 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [619.982 591.476 638.339 604.378]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-7439 0 obj <<
+7407 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [435.497 578.466 453.854 590.034]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-7440 0 obj <<
+7408 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.467 564.85 437.369 575.994]
 /Subtype /Link
 /A << /S /GoTo /D (page.81) >>
 >> endobj
-7441 0 obj <<
+7409 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [460.134 551.234 478.49 562.378]
 /Subtype /Link
 /A << /S /GoTo /D (page.428) >>
 >> endobj
-7442 0 obj <<
+7410 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [455.528 537.618 473.884 549.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.488) >>
 >> endobj
-7443 0 obj <<
+7411 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [467.043 524.002 485.399 535.402]
 /Subtype /Link
 /A << /S /GoTo /D (page.485) >>
 >> endobj
-7444 0 obj <<
+7412 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [458.376 510.386 476.732 522.076]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-7445 0 obj <<
+7413 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [467.77 496.77 486.126 508.459]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-7446 0 obj <<
+7414 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [490.801 496.77 509.157 508.459]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-7447 0 obj <<
+7415 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [473.831 483.154 492.187 494.843]
 /Subtype /Link
 /A << /S /GoTo /D (page.458) >>
 >> endobj
-7448 0 obj <<
+7416 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [528.376 469.538 541.278 481.227]
 /Subtype /Link
 /A << /S /GoTo /D (page.42) >>
 >> endobj
-7449 0 obj <<
+7417 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [545.952 469.538 558.854 481.227]
 /Subtype /Link
 /A << /S /GoTo /D (page.81) >>
 >> endobj
-7450 0 obj <<
+7418 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [477.467 455.922 495.823 467.611]
 /Subtype /Link
 /A << /S /GoTo /D (page.240) >>
 >> endobj
-7451 0 obj <<
+7419 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [500.498 455.922 518.854 467.611]
 /Subtype /Link
 /A << /S /GoTo /D (page.313) >>
 >> endobj
-7452 0 obj <<
+7420 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [523.528 455.922 541.884 467.611]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-7453 0 obj <<
+7421 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [546.558 455.922 564.914 467.611]
 /Subtype /Link
 /A << /S /GoTo /D (page.457) >>
 >> endobj
-7454 0 obj <<
+7422 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [569.588 455.922 587.945 467.611]
 /Subtype /Link
 /A << /S /GoTo /D (page.459) >>
 >> endobj
-7455 0 obj <<
+7423 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [592.619 455.922 610.975 467.611]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-7456 0 obj <<
+7424 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [615.649 455.922 634.005 467.611]
 /Subtype /Link
 /A << /S /GoTo /D (page.470) >>
 >> endobj
-7457 0 obj <<
+7425 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [638.679 455.922 657.036 467.611]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-7458 0 obj <<
+7426 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [474.968 442.306 493.324 453.995]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-7459 0 obj <<
+7427 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [515.498 428.69 533.854 440.379]
 /Subtype /Link
 /A << /S /GoTo /D (page.273) >>
 >> endobj
-7460 0 obj <<
+7428 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [524.528 415.074 542.884 426.763]
 /Subtype /Link
 /A << /S /GoTo /D (page.469) >>
 >> endobj
-7461 0 obj <<
+7429 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [470.528 401.458 488.884 413.147]
 /Subtype /Link
 /A << /S /GoTo /D (page.269) >>
 >> endobj
-7462 0 obj <<
+7430 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [500.528 387.842 518.884 399.531]
 /Subtype /Link
 /A << /S /GoTo /D (page.438) >>
 >> endobj
-7463 0 obj <<
+7431 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [501.588 374.226 519.945 385.915]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-7464 0 obj <<
+7432 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [514.134 360.61 532.49 372.299]
 /Subtype /Link
 /A << /S /GoTo /D (page.271) >>
 >> endobj
-7465 0 obj <<
+7433 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [459.891 346.994 478.248 358.683]
 /Subtype /Link
 /A << /S /GoTo /D (page.473) >>
 >> endobj
-7466 0 obj <<
+7434 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [451.467 322.301 469.823 333.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.457) >>
 >> endobj
-7467 0 obj <<
+7435 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [539.922 308.685 558.278 320.375]
 /Subtype /Link
 /A << /S /GoTo /D (page.252) >>
 >> endobj
-7468 0 obj <<
+7436 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.285 295.069 462.642 306.759]
 /Subtype /Link
 /A << /S /GoTo /D (page.429) >>
 >> endobj
-7469 0 obj <<
+7437 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [459.588 267.837 477.945 279.527]
 /Subtype /Link
 /A << /S /GoTo /D (page.458) >>
 >> endobj
-7470 0 obj <<
+7438 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.938 254.221 508.294 265.621]
 /Subtype /Link
 /A << /S /GoTo /D (page.237) >>
 >> endobj
-7471 0 obj <<
+7439 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [519.043 240.605 531.945 252.295]
 /Subtype /Link
 /A << /S /GoTo /D (page.59) >>
 >> endobj
-7472 0 obj <<
+7440 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [432.671 226.989 451.027 238.557]
 /Subtype /Link
 /A << /S /GoTo /D (page.109) >>
 >> endobj
-7473 0 obj <<
+7441 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [455.767 226.989 474.124 238.557]
 /Subtype /Link
 /A << /S /GoTo /D (page.143) >>
 >> endobj
-7474 0 obj <<
+7442 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [478.863 226.989 497.22 238.557]
 /Subtype /Link
 /A << /S /GoTo /D (page.144) >>
 >> endobj
-7475 0 obj <<
+7443 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [501.959 226.989 520.316 238.557]
 /Subtype /Link
 /A << /S /GoTo /D (page.149) >>
 >> endobj
-7476 0 obj <<
+7444 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [525.056 226.989 543.412 238.557]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-7477 0 obj <<
+7445 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [548.152 226.989 566.508 238.557]
 /Subtype /Link
 /A << /S /GoTo /D (page.167) >>
 >> endobj
-7478 0 obj <<
+7446 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [571.248 226.989 589.604 238.557]
 /Subtype /Link
 /A << /S /GoTo /D (page.175) >>
 >> endobj
-7479 0 obj <<
+7447 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [594.344 226.989 612.7 238.557]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-7480 0 obj <<
+7448 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [617.44 226.989 635.796 238.557]
 /Subtype /Link
 /A << /S /GoTo /D (page.250) >>
 >> endobj
-7481 0 obj <<
+7449 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [640.536 226.989 658.892 238.557]
 /Subtype /Link
 /A << /S /GoTo /D (page.269) >>
 >> endobj
-7482 0 obj <<
+7450 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [663.632 226.989 681.988 238.557]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-7483 0 obj <<
+7451 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [686.728 226.989 705.084 238.557]
 /Subtype /Link
 /A << /S /GoTo /D (page.327) >>
 >> endobj
-7484 0 obj <<
+7452 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.013 213.44 420.369 224.584]
 /Subtype /Link
 /A << /S /GoTo /D (page.368) >>
 >> endobj
-7485 0 obj <<
+7453 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [425.043 213.44 443.399 224.584]
 /Subtype /Link
 /A << /S /GoTo /D (page.481) >>
 >> endobj
-7486 0 obj <<
+7454 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.104 199.824 459.46 211.513]
 /Subtype /Link
 /A << /S /GoTo /D (page.312) >>
 >> endobj
-7487 0 obj <<
+7455 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.134 199.824 482.49 211.513]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-7488 0 obj <<
+7456 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [473.982 186.208 492.339 197.897]
 /Subtype /Link
 /A << /S /GoTo /D (page.429) >>
 >> endobj
-7489 0 obj <<
+7457 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [427.528 172.592 445.884 184.281]
 /Subtype /Link
 /A << /S /GoTo /D (page.454) >>
 >> endobj
-7490 0 obj <<
+7458 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [484.831 158.976 497.732 170.665]
 /Subtype /Link
 /A << /S /GoTo /D (page.61) >>
 >> endobj
-7491 0 obj <<
+7459 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [461.194 145.36 479.551 157.049]
 /Subtype /Link
 /A << /S /GoTo /D (page.341) >>
 >> endobj
-7492 0 obj <<
+7460 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [479.922 131.744 498.278 143.433]
 /Subtype /Link
 /A << /S /GoTo /D (page.341) >>
 >> endobj
-7493 0 obj <<
+7461 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [501.497 118.128 514.399 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.61) >>
 >> endobj
-7499 0 obj <<
-/D [7497 0 R /XYZ 151.701 685.529 null]
+7467 0 obj <<
+/D [7465 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7496 0 obj <<
+7464 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7603 0 obj <<
+7571 0 obj <<
 /Length 1412      
 /Filter /FlateDecode
 >>
@@ -49771,729 +48944,729 @@
 „`'“ž.44É–séúς׏aܘ—쎩Ø:ž}ˆ¯4'“'ÃO$óœ}êßq—O>67	ÎÄæòjÖÀÒ”‚ÕÿÁÓ[^žc{¤ÁÞj	…Oµ¾—,¦v”5Y¼2ß¬þìê@’
 endstream
 endobj
-7602 0 obj <<
+7570 0 obj <<
 /Type /Page
-/Contents 7603 0 R
-/Resources 7601 0 R
+/Contents 7571 0 R
+/Resources 7569 0 R
 /MediaBox [0 0 612 792]
-/Parent 7203 0 R
-/Annots [ 7494 0 R 7495 0 R 7500 0 R 7501 0 R 7502 0 R 7503 0 R 7504 0 R 7505 0 R 7506 0 R 7507 0 R 7508 0 R 7509 0 R 7510 0 R 7511 0 R 7512 0 R 7513 0 R 7514 0 R 7515 0 R 7516 0 R 7517 0 R 7518 0 R 7519 0 R 7520 0 R 7521 0 R 7522 0 R 7523 0 R 7524 0 R 7525 0 R 7526 0 R 7527 0 R 7528 0 R 7529 0 R 7530 0 R 7531 0 R 7532 0 R 7533 0 R 7534 0 R 7535 0 R 7536 0 R 7537 0 R 7538 0 R 7539 0 R 7540 0 R 7541 0 R 7542 0 R 7543 0 R 7544 0 R 7545 0 R 7546 0 R 7547 0 R 7548 0 R 7549 0 R 7550 0 R 7551 0 R 7552 0 R 7553 0 R 7554 0 R 7555 0 R 7556 0 R 7557 0 R 7558 0 R 7559 0 R 7560 0 R 7561 0 R 7562 0 R 7563 0 R 7564 0 R 7565 0 R 7566 0 R 7567 0 R 7568 0 R 7569 0 R 7570 0 R 7571 0 R 7572 0 R 7573 0 R 7574 0 R 7575 0 R 7576 0 R 7577 0 R 7578 0 R 7579 0 R 7580 0 R 7581 0 R 7582 0 R 7583 0 R 7584 0 R 7585 0 R 7586 0 R 7587 0 R 7588 0 R 7589 0 R 7590 0 R 7591 0 R 7592 0 R 7593 0 R 7594 0 R 7595 0 R 7596 0 R 7597 0 R 7598 0 R ]
+/Parent 7171 0 R
+/Annots [ 7462 0 R 7463 0 R 7468 0 R 7469 0 R 7470 0 R 7471 0 R 7472 0 R 7473 0 R 7474 0 R 7475 0 R 7476 0 R 7477 0 R 7478 0 R 7479 0 R 7480 0 R 7481 0 R 7482 0 R 7483 0 R 7484 0 R 7485 0 R 7486 0 R 7487 0 R 7488 0 R 7489 0 R 7490 0 R 7491 0 R 7492 0 R 7493 0 R 7494 0 R 7495 0 R 7496 0 R 7497 0 R 7498 0 R 7499 0 R 7500 0 R 7501 0 R 7502 0 R 7503 0 R 7504 0 R 7505 0 R 7506 0 R 7507 0 R 7508 0 R 7509 0 R 7510 0 R 7511 0 R 7512 0 R 7513 0 R 7514 0 R 7515 0 R 7516 0 R 7517 0 R 7518 0 R 7519 0 R 7520 0 R 7521 0 R 7522 0 R 7523 0 R 7524 0 R 7525 0 R 7526 0 R 7527 0 R 7528 0 R 7529 0 R 7530 0 R 7531 0 R 7532 0 R 7533 0 R 7534 0 R 7535 0 R 7536 0 R 7537 0 R 7538 0 R 7539 0 R 7540 0 R 7541 0 R 7542 0 R 7543 0 R 7544 0 R 7545 0 R 7546 0 R 7547 0 R 7548 0 R 7549 0 R 7550 0 R 7551 0 R 7552 0 R 7553 0 R 7554 0 R 7555 0 R 7556 0 R 7557 0 R 7558 0 R 7559 0 R 7560 0 R 7561 0 R 7562 0 R 7563 0 R 7564 0 R 7565 0 R 7566 0 R ]
 >> endobj
-7494 0 obj <<
+7462 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [207.259 646.546 225.615 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.477) >>
 >> endobj
-7495 0 obj <<
+7463 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.29 646.546 248.646 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.550) >>
 >> endobj
-7500 0 obj <<
+7468 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.245 632.931 237.601 644.621]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-7501 0 obj <<
+7469 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.669 619.317 237.026 631.006]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-7502 0 obj <<
+7470 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [253.502 605.702 266.403 617.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.61) >>
 >> endobj
-7503 0 obj <<
+7471 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.562 592.087 260.918 603.777]
 /Subtype /Link
 /A << /S /GoTo /D (page.478) >>
 >> endobj
-7504 0 obj <<
+7472 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.259 578.472 211.615 590.162]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-7505 0 obj <<
+7473 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [237.835 564.857 256.191 576.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.474) >>
 >> endobj
-7506 0 obj <<
+7474 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.623 551.243 211.979 562.932]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-7507 0 obj <<
+7475 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.047 537.628 250.403 549.196]
 /Subtype /Link
 /A << /S /GoTo /D (page.549) >>
 >> endobj
-7508 0 obj <<
+7476 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [229.471 524.013 247.827 535.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.534) >>
 >> endobj
-7509 0 obj <<
+7477 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.411 510.398 230.767 522.088]
 /Subtype /Link
 /A << /S /GoTo /D (page.343) >>
 >> endobj
-7510 0 obj <<
+7478 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [279.441 496.783 297.797 508.473]
 /Subtype /Link
 /A << /S /GoTo /D (page.550) >>
 >> endobj
-7511 0 obj <<
+7479 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [203.32 483.169 221.676 494.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-7512 0 obj <<
+7480 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.35 483.169 244.706 494.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.459) >>
 >> endobj
-7513 0 obj <<
+7481 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.38 483.169 267.737 494.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.532) >>
 >> endobj
-7514 0 obj <<
+7482 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.986 469.554 227.343 481.243]
 /Subtype /Link
 /A << /S /GoTo /D (page.431) >>
 >> endobj
-7515 0 obj <<
+7483 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [203.289 455.939 221.646 467.629]
 /Subtype /Link
 /A << /S /GoTo /D (page.430) >>
 >> endobj
-7516 0 obj <<
+7484 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [211.774 442.324 230.131 454.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.488) >>
 >> endobj
-7517 0 obj <<
+7485 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [186.865 417.653 205.221 429.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.517) >>
 >> endobj
-7518 0 obj <<
+7486 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [239.714 404.039 258.07 415.728]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-7519 0 obj <<
+7487 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.562 390.424 214.918 402.113]
 /Subtype /Link
 /A << /S /GoTo /D (page.480) >>
 >> endobj
-7520 0 obj <<
+7488 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.32 376.809 242.676 388.208]
 /Subtype /Link
 /A << /S /GoTo /D (page.484) >>
 >> endobj
-7521 0 obj <<
+7489 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.32 363.194 242.676 374.594]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-7522 0 obj <<
+7490 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [250.017 349.579 268.373 361.269]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-7523 0 obj <<
+7491 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [222.138 335.964 240.494 347.654]
 /Subtype /Link
 /A << /S /GoTo /D (page.332) >>
 >> endobj
-7524 0 obj <<
+7492 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [265.471 322.35 278.373 334.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.41) >>
 >> endobj
-7525 0 obj <<
+7493 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [283.047 322.35 295.949 334.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.80) >>
 >> endobj
-7526 0 obj <<
+7494 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.35 308.735 233.706 320.424]
 /Subtype /Link
 /A << /S /GoTo /D (page.441) >>
 >> endobj
-7527 0 obj <<
+7495 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [256.35 295.12 274.706 306.81]
 /Subtype /Link
 /A << /S /GoTo /D (page.444) >>
 >> endobj
-7528 0 obj <<
+7496 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.077 281.505 277.434 293.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.442) >>
 >> endobj
-7529 0 obj <<
+7497 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [187.502 267.89 205.858 279.58]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-7530 0 obj <<
+7498 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.047 254.276 212.494 265.965]
 /Subtype /Link
 /A << /S /GoTo /D (page.7) >>
 >> endobj
-7531 0 obj <<
+7499 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.168 254.276 230.07 265.965]
 /Subtype /Link
 /A << /S /GoTo /D (page.15) >>
 >> endobj
-7532 0 obj <<
+7500 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.744 254.276 247.646 265.965]
 /Subtype /Link
 /A << /S /GoTo /D (page.23) >>
 >> endobj
-7533 0 obj <<
+7501 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [252.32 254.276 265.221 265.965]
 /Subtype /Link
 /A << /S /GoTo /D (page.39) >>
 >> endobj
-7534 0 obj <<
+7502 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [269.896 254.276 282.797 265.965]
 /Subtype /Link
 /A << /S /GoTo /D (page.74) >>
 >> endobj
-7535 0 obj <<
+7503 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [287.471 254.276 305.828 265.965]
 /Subtype /Link
 /A << /S /GoTo /D (page.121) >>
 >> endobj
-7536 0 obj <<
+7504 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [310.502 254.276 328.858 265.965]
 /Subtype /Link
 /A << /S /GoTo /D (page.124) >>
 >> endobj
-7537 0 obj <<
+7505 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [333.532 254.276 351.888 265.965]
 /Subtype /Link
 /A << /S /GoTo /D (page.249) >>
 >> endobj
-7538 0 obj <<
+7506 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.623 240.661 210.979 252.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-7539 0 obj <<
+7507 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [189.896 227.046 208.252 238.736]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-7540 0 obj <<
+7508 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.926 227.046 231.282 238.736]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-7541 0 obj <<
+7509 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.805 213.431 209.161 225.121]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-7542 0 obj <<
+7510 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [186.108 199.816 204.464 211.385]
 /Subtype /Link
 /A << /S /GoTo /D (page.326) >>
 >> endobj
-7543 0 obj <<
+7511 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [209.138 199.816 227.494 211.385]
 /Subtype /Link
 /A << /S /GoTo /D (page.534) >>
 >> endobj
-7544 0 obj <<
+7512 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.259 186.202 202.615 197.891]
 /Subtype /Link
 /A << /S /GoTo /D (page.475) >>
 >> endobj
-7545 0 obj <<
+7513 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.865 172.587 249.221 184.276]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-7546 0 obj <<
+7514 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.138 158.972 248.494 170.662]
 /Subtype /Link
 /A << /S /GoTo /D (page.144) >>
 >> endobj
-7547 0 obj <<
+7515 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [214.199 145.357 232.555 157.047]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-7548 0 obj <<
+7516 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.714 131.742 211.07 143.432]
 /Subtype /Link
 /A << /S /GoTo /D (page.474) >>
 >> endobj
-7549 0 obj <<
+7517 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [207.259 118.128 225.615 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.473) >>
 >> endobj
-7550 0 obj <<
+7518 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.29 118.128 248.646 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.481) >>
 >> endobj
-7551 0 obj <<
+7519 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [434.264 646.546 452.62 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.488) >>
 >> endobj
-7552 0 obj <<
+7520 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.203 632.997 419.559 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.332) >>
 >> endobj
-7553 0 obj <<
+7521 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.87 619.448 441.226 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.478) >>
 >> endobj
-7554 0 obj <<
+7522 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.84 605.899 430.196 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-7555 0 obj <<
+7523 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [454.658 592.35 473.014 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-7556 0 obj <<
+7524 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [477.688 592.35 496.044 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-7557 0 obj <<
+7525 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [452.234 578.8 470.59 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.488) >>
 >> endobj
-7558 0 obj <<
+7526 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [475.264 578.8 493.62 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.489) >>
 >> endobj
-7559 0 obj <<
+7527 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [528.159 538.153 546.515 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-7560 0 obj <<
+7528 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [393.021 524.604 411.378 535.748]
 /Subtype /Link
 /A << /S /GoTo /D (page.274) >>
 >> endobj
-7561 0 obj <<
+7529 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [409.991 511.054 428.347 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.436) >>
 >> endobj
-7562 0 obj <<
+7530 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.082 497.505 437.438 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.331) >>
 >> endobj
-7563 0 obj <<
+7531 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.415 483.956 434.771 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.474) >>
 >> endobj
-7564 0 obj <<
+7532 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.324 470.407 432.681 481.806]
 /Subtype /Link
 /A << /S /GoTo /D (page.148) >>
 >> endobj
-7565 0 obj <<
+7533 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [437.355 470.407 455.711 481.806]
 /Subtype /Link
 /A << /S /GoTo /D (page.429) >>
 >> endobj
-7566 0 obj <<
+7534 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [460.385 470.407 478.741 481.806]
 /Subtype /Link
 /A << /S /GoTo /D (page.435) >>
 >> endobj
-7567 0 obj <<
+7535 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.052 456.858 461.408 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-7568 0 obj <<
+7536 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [470.627 443.308 488.984 454.877]
 /Subtype /Link
 /A << /S /GoTo /D (page.441) >>
 >> endobj
-7569 0 obj <<
+7537 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [493.658 443.308 512.014 454.877]
 /Subtype /Link
 /A << /S /GoTo /D (page.454) >>
 >> endobj
-7570 0 obj <<
+7538 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.84 429.759 450.196 440.903]
 /Subtype /Link
 /A << /S /GoTo /D (page.327) >>
 >> endobj
-7571 0 obj <<
+7539 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.597 416.21 422.953 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.435) >>
 >> endobj
-7572 0 obj <<
+7540 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.597 402.661 429.953 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.435) >>
 >> endobj
-7573 0 obj <<
+7541 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.203 389.112 460.559 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.324) >>
 >> endobj
-7574 0 obj <<
+7542 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.052 375.562 431.408 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.356) >>
 >> endobj
-7575 0 obj <<
+7543 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [408.779 362.013 427.135 373.413]
 /Subtype /Link
 /A << /S /GoTo /D (page.440) >>
 >> endobj
-7576 0 obj <<
+7544 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.84 348.464 433.196 359.863]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-7577 0 obj <<
+7545 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.567 334.915 460.923 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.435) >>
 >> endobj
-7578 0 obj <<
+7546 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.324 321.366 414.771 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.5) >>
 >> endobj
-7579 0 obj <<
+7547 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.446 321.366 437.802 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.428) >>
 >> endobj
-7580 0 obj <<
+7548 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.476 321.366 460.832 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.431) >>
 >> endobj
-7581 0 obj <<
+7549 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [465.506 321.366 483.862 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-7582 0 obj <<
+7550 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.809 307.816 421.165 318.96]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-7583 0 obj <<
+7551 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [425.84 307.816 444.196 318.96]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-7584 0 obj <<
+7552 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.658 294.267 460.014 305.411]
 /Subtype /Link
 /A << /S /GoTo /D (page.487) >>
 >> endobj
-7585 0 obj <<
+7553 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [454.052 280.718 472.408 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.245) >>
 >> endobj
-7586 0 obj <<
+7554 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.688 267.169 439.044 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.323) >>
 >> endobj
-7587 0 obj <<
+7555 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.809 253.62 431.165 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.340) >>
 >> endobj
-7588 0 obj <<
+7556 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.233 240.07 412.59 251.214]
 /Subtype /Link
 /A << /S /GoTo /D (page.332) >>
 >> endobj
-7589 0 obj <<
+7557 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.779 226.521 397.135 237.665]
 /Subtype /Link
 /A << /S /GoTo /D (page.312) >>
 >> endobj
-7590 0 obj <<
+7558 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [436.718 212.972 455.075 224.371]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-7591 0 obj <<
+7559 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [376.718 199.423 395.074 210.567]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-7592 0 obj <<
+7560 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.779 185.874 431.135 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.387) >>
 >> endobj
-7593 0 obj <<
+7561 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [437.627 172.324 455.984 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.489) >>
 >> endobj
-7594 0 obj <<
+7562 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [425.961 158.775 444.317 170.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-7595 0 obj <<
+7563 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.264 145.226 422.62 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.441) >>
 >> endobj
-7596 0 obj <<
+7564 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [408.567 131.677 426.923 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.281) >>
 >> endobj
-7597 0 obj <<
+7565 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.597 131.677 449.953 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-7598 0 obj <<
+7566 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [396.082 118.128 414.438 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.348) >>
 >> endobj
-7604 0 obj <<
-/D [7602 0 R /XYZ 100.892 685.529 null]
+7572 0 obj <<
+/D [7570 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7601 0 obj <<
+7569 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7729 0 obj <<
+7697 0 obj <<
 /Length 1437      
 /Filter /FlateDecode
 >>
@@ -50510,883 +49683,883 @@
 Îï¸b‡½#‚ïºÌØÁstI¾+^/$‹³ç¬öceV`èú}D3®Ú4a»xÁ®Pä¦æ‘aw‹Sr!´|<ôÍsp„uYæU£6½<~‡ˆya¨:@çýÌãB]qg7˜ìÓ©Š«®‡Êªçr¸EÏEÆ·¿¡ê/ ’¹Íc;Lqaþ§3pþøSÑãeÁÿ{†·úÁº¯×îP-˜þÝ/ J¹lo$†žñçNƲŸ+œ²­Í!D3„FKˆ¾7ØÜôsrC<ÕÑ=[õ`ôÓ%µà÷þñUµ9¶¤;–äK®H¡-î>Ši™«Î´óá8ÁÛúͶýí‡ë_xéU¡ÀóËo|¢9‹mŸ.xÓ»!ýôX‹Ëçk»Pphù«R„–׌áí{Ì®湄À|ámû—.;Î?™$3GOðO̪Ëg{›-¿6•lSœ&¿«Mÿ¾ºYýŠ»ˆ
 endstream
 endobj
-7728 0 obj <<
+7696 0 obj <<
 /Type /Page
-/Contents 7729 0 R
-/Resources 7727 0 R
+/Contents 7697 0 R
+/Resources 7695 0 R
 /MediaBox [0 0 612 792]
-/Parent 7731 0 R
-/Annots [ 7599 0 R 7600 0 R 7605 0 R 7606 0 R 7607 0 R 7608 0 R 7609 0 R 7610 0 R 7611 0 R 7612 0 R 7613 0 R 7614 0 R 7615 0 R 7616 0 R 7617 0 R 7618 0 R 7619 0 R 7620 0 R 7621 0 R 7622 0 R 7623 0 R 7624 0 R 7625 0 R 7626 0 R 7627 0 R 7628 0 R 7629 0 R 7630 0 R 7631 0 R 7632 0 R 7633 0 R 7634 0 R 7635 0 R 7636 0 R 7637 0 R 7638 0 R 7639 0 R 7640 0 R 7641 0 R 7642 0 R 7643 0 R 7644 0 R 7645 0 R 7646 0 R 7647 0 R 7648 0 R 7649 0 R 7650 0 R 7651 0 R 7652 0 R 7653 0 R 7654 0 R 7655 0 R 7656 0 R 7657 0 R 7658 0 R 7659 0 R 7660 0 R 7661 0 R 7662 0 R 7663 0 R 7664 0 R 7665 0 R 7666 0 R 7667 0 R 7668 0 R 7669 0 R 7670 0 R 7671 0 R 7672 0 R 7673 0 R 7674 0 R 7675 0 R 7676 0 R 7677 0 R 7678 0 R 7679 0 R 7680 0 R 7681 0 R 7682 0 R 7683 0 R 7684 0 R 7685 0 R 7686 0 R 7687 0 R 7688 0 R 7689 0 R 7690 0 R 7691 0 R 7692 0 R 7693 0 R 7694 0 R 7695 0 R 7696 0 R 7697 0 R 7698 0 R 7699 0 R 7700 0 R 7701 0 R 7702 0 R 7703 0 R 7704 0 R 7705 0 R 7706 0 R 7707 0 R 7708 0 R 7709 0 R 7710 0 R 7711 0 R 7712 0 R 7713 0 R 7714 0 R 7715 0 R 7716 0 R 7717 0 R 7718 0 R 7719 0 R 7720 0 R 7721 0 R 7722 0 R 7723 0 R 7724 0 R 7725 0 R ]
+/Parent 7699 0 R
+/Annots [ 7567 0 R 7568 0 R 7573 0 R 7574 0 R 7575 0 R 7576 0 R 7577 0 R 7578 0 R 7579 0 R 7580 0 R 7581 0 R 7582 0 R 7583 0 R 7584 0 R 7585 0 R 7586 0 R 7587 0 R 7588 0 R 7589 0 R 7590 0 R 7591 0 R 7592 0 R 7593 0 R 7594 0 R 7595 0 R 7596 0 R 7597 0 R 7598 0 R 7599 0 R 7600 0 R 7601 0 R 7602 0 R 7603 0 R 7604 0 R 7605 0 R 7606 0 R 7607 0 R 7608 0 R 7609 0 R 7610 0 R 7611 0 R 7612 0 R 7613 0 R 7614 0 R 7615 0 R 7616 0 R 7617 0 R 7618 0 R 7619 0 R 7620 0 R 7621 0 R 7622 0 R 7623 0 R 7624 0 R 7625 0 R 7626 0 R 7627 0 R 7628 0 R 7629 0 R 7630 0 R 7631 0 R 7632 0 R 7633 0 R 7634 0 R 7635 0 R 7636 0 R 7637 0 R 7638 0 R 7639 0 R 7640 0 R 7641 0 R 7642 0 R 7643 0 R 7644 0 R 7645 0 R 7646 0 R 7647 0 R 7648 0 R 7649 0 R 7650 0 R 7651 0 R 7652 0 R 7653 0 R 7654 0 R 7655 0 R 7656 0 R 7657 0 R 7658 0 R 7659 0 R 7660 0 R 7661 0 R 7662 0 R 7663 0 R 7664 0 R 7665 0 R 7666 0 R 7667 0 R 7668 0 R 7669 0 R 7670 0 R 7671 0 R 7672 0 R 7673 0 R 7674 0 R 7675 0 R 7676 0 R 7677 0 R 7678 0 R 7679 0 R 7680 0 R 7681 0 R 7682 0 R 7683 0 R 7684 0 R 7685 0 R 7686 0 R 7687 0 R 7688 0 R 7689 0 R 7690 0 R 7691 0 R 7692 0 R 7693 0 R ]
 >> endobj
-7599 0 obj <<
+7567 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [252.614 646.546 270.97 657.946]
 /Subtype /Link
 /A << /S /GoTo /D (page.427) >>
 >> endobj
-7600 0 obj <<
+7568 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [275.644 646.546 294.001 657.946]
 /Subtype /Link
 /A << /S /GoTo /D (page.431) >>
 >> endobj
-7605 0 obj <<
+7573 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [243.523 632.931 261.879 644.5]
 /Subtype /Link
 /A << /S /GoTo /D (page.436) >>
 >> endobj
-7606 0 obj <<
+7574 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [280.766 619.317 299.122 631.006]
 /Subtype /Link
 /A << /S /GoTo /D (page.436) >>
 >> endobj
-7607 0 obj <<
+7575 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.463 605.702 254.364 617.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.10) >>
 >> endobj
-7608 0 obj <<
+7576 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.038 605.702 271.94 617.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.33) >>
 >> endobj
-7609 0 obj <<
+7577 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [276.614 605.702 289.516 617.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.38) >>
 >> endobj
-7610 0 obj <<
+7578 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [294.19 605.702 307.092 617.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.45) >>
 >> endobj
-7611 0 obj <<
+7579 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [311.766 605.702 324.667 617.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-7612 0 obj <<
+7580 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [329.341 605.702 342.243 617.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.72) >>
 >> endobj
-7613 0 obj <<
+7581 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [346.917 605.702 365.273 617.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.114) >>
 >> endobj
-7614 0 obj <<
+7582 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [369.948 605.702 388.304 617.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.149) >>
 >> endobj
-7615 0 obj <<
+7583 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.978 605.702 411.334 617.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-7616 0 obj <<
+7584 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.008 605.702 434.364 617.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-7617 0 obj <<
+7585 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.418 592.087 272.32 603.231]
 /Subtype /Link
 /A << /S /GoTo /D (page.38) >>
 >> endobj
-7618 0 obj <<
+7586 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [276.994 592.087 289.896 603.231]
 /Subtype /Link
 /A << /S /GoTo /D (page.72) >>
 >> endobj
-7619 0 obj <<
+7587 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [294.57 592.087 312.926 603.231]
 /Subtype /Link
 /A << /S /GoTo /D (page.114) >>
 >> endobj
-7620 0 obj <<
+7588 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [317.6 592.087 335.956 603.231]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-7621 0 obj <<
+7589 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [239.25 578.472 252.152 590.162]
 /Subtype /Link
 /A << /S /GoTo /D (page.64) >>
 >> endobj
-7622 0 obj <<
+7590 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [300.493 564.857 318.849 576.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.487) >>
 >> endobj
-7623 0 obj <<
+7591 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.341 551.243 277.698 562.387]
 /Subtype /Link
 /A << /S /GoTo /D (page.487) >>
 >> endobj
-7624 0 obj <<
+7592 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [248.887 526.572 256.334 538.261]
 /Subtype /Link
 /A << /S /GoTo /D (page.8) >>
 >> endobj
-7625 0 obj <<
+7593 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [261.008 526.572 273.91 538.261]
 /Subtype /Link
 /A << /S /GoTo /D (page.64) >>
 >> endobj
-7626 0 obj <<
+7594 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [278.584 526.572 296.94 538.261]
 /Subtype /Link
 /A << /S /GoTo /D (page.326) >>
 >> endobj
-7627 0 obj <<
+7595 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [301.614 526.572 319.97 538.261]
 /Subtype /Link
 /A << /S /GoTo /D (page.459) >>
 >> endobj
-7628 0 obj <<
+7596 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [324.644 526.572 343.001 538.261]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-7629 0 obj <<
+7597 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [347.675 526.572 366.031 538.261]
 /Subtype /Link
 /A << /S /GoTo /D (page.498) >>
 >> endobj
-7630 0 obj <<
+7598 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [285.584 512.957 303.94 524.646]
 /Subtype /Link
 /A << /S /GoTo /D (page.121) >>
 >> endobj
-7631 0 obj <<
+7599 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [281.6 485.727 299.956 497.127]
 /Subtype /Link
 /A << /S /GoTo /D (page.146) >>
 >> endobj
-7632 0 obj <<
+7600 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [271.267 472.113 289.623 483.512]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-7633 0 obj <<
+7601 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [286.523 458.498 304.879 470.187]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-7634 0 obj <<
+7602 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [309.554 458.498 327.91 470.187]
 /Subtype /Link
 /A << /S /GoTo /D (page.517) >>
 >> endobj
-7635 0 obj <<
+7603 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [276.19 444.883 294.546 456.572]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-7636 0 obj <<
+7604 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [299.22 444.883 317.576 456.572]
 /Subtype /Link
 /A << /S /GoTo /D (page.515) >>
 >> endobj
-7637 0 obj <<
+7605 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [270.796 431.268 283.698 442.958]
 /Subtype /Link
 /A << /S /GoTo /D (page.22) >>
 >> endobj
-7638 0 obj <<
+7606 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [253.796 417.653 272.152 429.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.235) >>
 >> endobj
-7639 0 obj <<
+7607 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [276.826 417.653 295.182 429.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.252) >>
 >> endobj
-7640 0 obj <<
+7608 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [299.857 417.653 318.213 429.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-7641 0 obj <<
+7609 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [314.463 404.039 332.819 415.728]
 /Subtype /Link
 /A << /S /GoTo /D (page.516) >>
 >> endobj
-7642 0 obj <<
+7610 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [276.072 390.424 294.428 401.992]
 /Subtype /Link
 /A << /S /GoTo /D (page.169) >>
 >> endobj
-7643 0 obj <<
+7611 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [235.553 376.809 253.91 388.377]
 /Subtype /Link
 /A << /S /GoTo /D (page.439) >>
 >> endobj
-7644 0 obj <<
+7612 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [245.705 349.579 264.061 361.269]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-7645 0 obj <<
+7613 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [301.978 335.964 320.334 347.654]
 /Subtype /Link
 /A << /S /GoTo /D (page.495) >>
 >> endobj
-7646 0 obj <<
+7614 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [292.069 322.35 310.425 334.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.505) >>
 >> endobj
-7647 0 obj <<
+7615 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [278.311 308.735 296.667 320.424]
 /Subtype /Link
 /A << /S /GoTo /D (page.149) >>
 >> endobj
-7648 0 obj <<
+7616 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [301.341 308.735 319.698 320.424]
 /Subtype /Link
 /A << /S /GoTo /D (page.154) >>
 >> endobj
-7649 0 obj <<
+7617 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [272.463 295.12 290.819 306.81]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-7650 0 obj <<
+7618 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [295.493 295.12 313.849 306.81]
 /Subtype /Link
 /A << /S /GoTo /D (page.209) >>
 >> endobj
-7651 0 obj <<
+7619 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [260.388 267.89 278.744 279.58]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-7652 0 obj <<
+7620 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [260.236 254.276 278.593 265.844]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-7653 0 obj <<
+7621 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [271.055 240.661 289.411 252.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-7654 0 obj <<
+7622 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.402 227.046 262.758 238.736]
 /Subtype /Link
 /A << /S /GoTo /D (page.435) >>
 >> endobj
-7655 0 obj <<
+7623 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [308.19 213.431 326.546 225.121]
 /Subtype /Link
 /A << /S /GoTo /D (page.436) >>
 >> endobj
-7656 0 obj <<
+7624 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [289.523 199.816 302.425 211.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.87) >>
 >> endobj
-7657 0 obj <<
+7625 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [301.129 186.202 319.485 197.891]
 /Subtype /Link
 /A << /S /GoTo /D (page.335) >>
 >> endobj
-7658 0 obj <<
+7626 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [350.038 172.587 368.395 184.276]
 /Subtype /Link
 /A << /S /GoTo /D (page.335) >>
 >> endobj
-7659 0 obj <<
+7627 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.372 158.972 272.728 170.662]
 /Subtype /Link
 /A << /S /GoTo /D (page.443) >>
 >> endobj
-7660 0 obj <<
+7628 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [275.554 145.357 293.91 157.047]
 /Subtype /Link
 /A << /S /GoTo /D (page.435) >>
 >> endobj
-7661 0 obj <<
+7629 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [266.766 131.742 285.122 143.432]
 /Subtype /Link
 /A << /S /GoTo /D (page.488) >>
 >> endobj
-7662 0 obj <<
+7630 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [321.857 118.128 340.213 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.450) >>
 >> endobj
-7663 0 obj <<
+7631 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [468.376 646.546 486.732 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.435) >>
 >> endobj
-7664 0 obj <<
+7632 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.588 632.997 452.49 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.31) >>
 >> endobj
-7665 0 obj <<
+7633 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [457.164 632.997 470.066 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.43) >>
 >> endobj
-7666 0 obj <<
+7634 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [474.74 632.997 487.641 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.44) >>
 >> endobj
-7667 0 obj <<
+7635 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [492.316 632.997 505.217 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.86) >>
 >> endobj
-7668 0 obj <<
+7636 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [509.891 632.997 528.248 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.125) >>
 >> endobj
-7669 0 obj <<
+7637 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [532.922 632.997 551.278 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.238) >>
 >> endobj
-7670 0 obj <<
+7638 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [555.952 632.997 574.308 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.251) >>
 >> endobj
-7671 0 obj <<
+7639 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [578.982 632.997 597.339 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.252) >>
 >> endobj
-7672 0 obj <<
+7640 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [454.362 619.448 472.718 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.476) >>
 >> endobj
-7673 0 obj <<
+7641 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [450.756 605.899 469.112 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.109) >>
 >> endobj
-7674 0 obj <<
+7642 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [487.544 592.35 505.9 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.251) >>
 >> endobj
-7675 0 obj <<
+7643 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [462.938 578.8 481.294 589.944]
 /Subtype /Link
 /A << /S /GoTo /D (page.251) >>
 >> endobj
-7676 0 obj <<
+7644 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [467.241 565.251 485.597 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.109) >>
 >> endobj
-7677 0 obj <<
+7645 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [460.908 551.702 479.264 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.251) >>
 >> endobj
-7678 0 obj <<
+7646 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [456.514 538.153 474.87 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.251) >>
 >> endobj
-7679 0 obj <<
+7647 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [511.71 524.604 524.611 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.42) >>
 >> endobj
-7680 0 obj <<
+7648 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [529.285 524.604 542.187 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.81) >>
 >> endobj
-7681 0 obj <<
+7649 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [473.891 511.054 486.793 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.39) >>
 >> endobj
-7682 0 obj <<
+7650 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [472.134 497.505 485.035 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.58) >>
 >> endobj
-7683 0 obj <<
+7651 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [456.619 483.956 474.975 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.303) >>
 >> endobj
-7684 0 obj <<
+7652 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [449.043 470.407 467.399 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-7685 0 obj <<
+7653 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [469.679 456.858 488.035 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-7686 0 obj <<
+7654 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [491.225 443.308 509.581 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.436) >>
 >> endobj
-7687 0 obj <<
+7655 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [434.8 429.759 453.157 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.476) >>
 >> endobj
-7688 0 obj <<
+7656 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [449.891 416.21 468.248 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.434) >>
 >> endobj
-7689 0 obj <<
+7657 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [450.558 402.661 468.914 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.235) >>
 >> endobj
-7690 0 obj <<
+7658 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [473.588 402.661 491.945 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.272) >>
 >> endobj
-7691 0 obj <<
+7659 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [496.619 402.661 514.975 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.330) >>
 >> endobj
-7692 0 obj <<
+7660 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [528.423 389.112 546.779 400.68]
 /Subtype /Link
 /A << /S /GoTo /D (page.184) >>
 >> endobj
-7693 0 obj <<
+7661 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [488.908 375.562 507.264 386.706]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-7694 0 obj <<
+7662 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [507.574 362.013 525.93 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.184) >>
 >> endobj
-7695 0 obj <<
+7663 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [478.938 348.464 497.294 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-7696 0 obj <<
+7664 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [462.908 334.915 481.264 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-7697 0 obj <<
+7665 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [485.938 334.915 504.294 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.151) >>
 >> endobj
-7698 0 obj <<
+7666 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [456.605 321.366 474.961 332.51]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-7699 0 obj <<
+7667 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [503.241 307.816 521.597 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-7700 0 obj <<
+7668 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [473.316 294.267 491.672 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.452) >>
 >> endobj
-7701 0 obj <<
+7669 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.467 280.718 459.823 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.430) >>
 >> endobj
-7702 0 obj <<
+7670 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [487.376 267.169 505.732 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.429) >>
 >> endobj
-7703 0 obj <<
+7671 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [459.346 253.62 477.702 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.149) >>
 >> endobj
-7704 0 obj <<
+7672 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [456.043 240.07 474.399 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.348) >>
 >> endobj
-7705 0 obj <<
+7673 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [460.891 226.521 479.248 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.241) >>
 >> endobj
-7706 0 obj <<
+7674 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [483.922 226.521 502.278 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.243) >>
 >> endobj
-7707 0 obj <<
+7675 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [506.952 226.521 525.308 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-7708 0 obj <<
+7676 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [529.982 226.521 548.339 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-7709 0 obj <<
+7677 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [499.679 212.972 518.036 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.241) >>
 >> endobj
-7710 0 obj <<
+7678 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [434.74 199.423 453.096 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.549) >>
 >> endobj
-7711 0 obj <<
+7679 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.073 185.874 451.429 197.442]
 /Subtype /Link
 /A << /S /GoTo /D (page.326) >>
 >> endobj
-7712 0 obj <<
+7680 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [456.104 185.874 474.46 197.442]
 /Subtype /Link
 /A << /S /GoTo /D (page.343) >>
 >> endobj
-7713 0 obj <<
+7681 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.255 172.324 444.157 183.893]
 /Subtype /Link
 /A << /S /GoTo /D (page.31) >>
 >> endobj
-7714 0 obj <<
+7682 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [448.831 172.324 461.732 183.893]
 /Subtype /Link
 /A << /S /GoTo /D (page.39) >>
 >> endobj
-7715 0 obj <<
+7683 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [466.407 172.324 479.308 183.893]
 /Subtype /Link
 /A << /S /GoTo /D (page.58) >>
 >> endobj
-7716 0 obj <<
+7684 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [483.982 172.324 502.339 183.893]
 /Subtype /Link
 /A << /S /GoTo /D (page.238) >>
 >> endobj
-7717 0 obj <<
+7685 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [507.013 172.324 525.369 183.893]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-7718 0 obj <<
+7686 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [530.043 172.324 548.399 183.893]
 /Subtype /Link
 /A << /S /GoTo /D (page.477) >>
 >> endobj
-7719 0 obj <<
+7687 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [553.073 172.324 571.429 183.893]
 /Subtype /Link
 /A << /S /GoTo /D (page.478) >>
 >> endobj
-7720 0 obj <<
+7688 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [576.104 172.324 594.46 183.893]
 /Subtype /Link
 /A << /S /GoTo /D (page.493) >>
 >> endobj
-7721 0 obj <<
+7689 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [491.059 158.775 509.415 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.312) >>
 >> endobj
-7722 0 obj <<
+7690 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [471.18 145.226 489.537 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.252) >>
 >> endobj
-7723 0 obj <<
+7691 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [468.908 131.677 487.264 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.493) >>
 >> endobj
-7724 0 obj <<
+7692 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [460.726 118.128 479.082 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.312) >>
 >> endobj
-7725 0 obj <<
+7693 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [483.756 118.128 502.112 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-7730 0 obj <<
-/D [7728 0 R /XYZ 151.701 685.529 null]
+7698 0 obj <<
+/D [7696 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7727 0 obj <<
+7695 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7826 0 obj <<
+7794 0 obj <<
 /Length 1359      
 /Filter /FlateDecode
 >>
@@ -51406,666 +50579,666 @@
 žÜ¾VÇ€GÜ´q5n/öš«óéXüXd´æcÍÝÄÌ­ÎW«U?@àÕ»ÜöËÇ›ÕyÎÅBäã‘›ž¹FÊî+ÊÒÎøZθ—óÑ„"-Ýò{ðî‘2ª½,ËÌžº[y¹¦cîòç¢Ëdp=§¦¼̤Œ¡Ÿ^YøqØ~jCïÄö¹³}Éhiعì4€¾deÏ/¨@Ó*"ox¨s€í0Z(+*Ûžaä„ӰΉL?·ûÅÿeDš
 endstream
 endobj
-7825 0 obj <<
+7793 0 obj <<
 /Type /Page
-/Contents 7826 0 R
-/Resources 7824 0 R
+/Contents 7794 0 R
+/Resources 7792 0 R
 /MediaBox [0 0 612 792]
-/Parent 7731 0 R
-/Annots [ 7726 0 R 7732 0 R 7733 0 R 7734 0 R 7735 0 R 7736 0 R 7737 0 R 7738 0 R 7739 0 R 7740 0 R 7741 0 R 7742 0 R 7743 0 R 7744 0 R 7745 0 R 7746 0 R 7747 0 R 7748 0 R 7749 0 R 7750 0 R 7751 0 R 7752 0 R 7753 0 R 7754 0 R 7755 0 R 7756 0 R 7757 0 R 7758 0 R 7759 0 R 7760 0 R 7761 0 R 7762 0 R 7763 0 R 7764 0 R 7765 0 R 7766 0 R 7767 0 R 7768 0 R 7769 0 R 7770 0 R 7771 0 R 7772 0 R 7773 0 R 7774 0 R 7775 0 R 7776 0 R 7777 0 R 7778 0 R 7779 0 R 7780 0 R 7781 0 R 7782 0 R 7783 0 R 7784 0 R 7785 0 R 7786 0 R 7787 0 R 7788 0 R 7789 0 R 7790 0 R 7791 0 R 7792 0 R 7793 0 R 7794 0 R 7795 0 R 7796 0 R 7797 0 R 7798 0 R 7799 0 R 7800 0 R 7801 0 R 7802 0 R 7803 0 R 7804 0 R 7805 0 R 7806 0 R 7807 0 R 7808 0 R 7809 0 R 7810 0 R 7811 0 R 7812 0 R 7813 0 R 7814 0 R 7815 0 R 7816 0 R 7817 0 R 7818 0 R 7819 0 R 7820 0 R 7821 0 R 7822 0 R ]
+/Parent 7699 0 R
+/Annots [ 7694 0 R 7700 0 R 7701 0 R 7702 0 R 7703 0 R 7704 0 R 7705 0 R 7706 0 R 7707 0 R 7708 0 R 7709 0 R 7710 0 R 7711 0 R 7712 0 R 7713 0 R 7714 0 R 7715 0 R 7716 0 R 7717 0 R 7718 0 R 7719 0 R 7720 0 R 7721 0 R 7722 0 R 7723 0 R 7724 0 R 7725 0 R 7726 0 R 7727 0 R 7728 0 R 7729 0 R 7730 0 R 7731 0 R 7732 0 R 7733 0 R 7734 0 R 7735 0 R 7736 0 R 7737 0 R 7738 0 R 7739 0 R 7740 0 R 7741 0 R 7742 0 R 7743 0 R 7744 0 R 7745 0 R 7746 0 R 7747 0 R 7748 0 R 7749 0 R 7750 0 R 7751 0 R 7752 0 R 7753 0 R 7754 0 R 7755 0 R 7756 0 R 7757 0 R 7758 0 R 7759 0 R 7760 0 R 7761 0 R 7762 0 R 7763 0 R 7764 0 R 7765 0 R 7766 0 R 7767 0 R 7768 0 R 7769 0 R 7770 0 R 7771 0 R 7772 0 R 7773 0 R 7774 0 R 7775 0 R 7776 0 R 7777 0 R 7778 0 R 7779 0 R 7780 0 R 7781 0 R 7782 0 R 7783 0 R 7784 0 R 7785 0 R 7786 0 R 7787 0 R 7788 0 R 7789 0 R 7790 0 R ]
 >> endobj
-7726 0 obj <<
+7694 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.245 646.546 260.601 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.476) >>
 >> endobj
-7732 0 obj <<
+7700 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [239.791 632.997 258.147 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-7733 0 obj <<
+7701 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.245 619.448 224.601 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.494) >>
 >> endobj
-7734 0 obj <<
+7702 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.32 605.899 228.221 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.39) >>
 >> endobj
-7735 0 obj <<
+7703 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.896 605.899 245.797 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.71) >>
 >> endobj
-7736 0 obj <<
+7704 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [266.684 592.35 285.04 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.478) >>
 >> endobj
-7737 0 obj <<
+7705 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.017 578.8 250.373 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-7738 0 obj <<
+7706 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.047 578.8 273.403 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.435) >>
 >> endobj
-7739 0 obj <<
+7707 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.683 565.251 237.04 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.478) >>
 >> endobj
-7740 0 obj <<
+7708 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [198.532 551.702 211.434 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.31) >>
 >> endobj
-7741 0 obj <<
+7709 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.639 538.153 225.541 549.297]
 /Subtype /Link
 /A << /S /GoTo /D (page.32) >>
 >> endobj
-7742 0 obj <<
+7710 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.427 511.054 277.783 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.459) >>
 >> endobj
-7743 0 obj <<
+7711 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.245 497.505 244.601 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.343) >>
 >> endobj
-7744 0 obj <<
+7712 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.457 483.956 231.813 495.355]
 /Subtype /Link
 /A << /S /GoTo /D (page.491) >>
 >> endobj
-7745 0 obj <<
+7713 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.063 470.407 233.419 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-7746 0 obj <<
+7714 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [243.138 456.858 261.494 468.426]
 /Subtype /Link
 /A << /S /GoTo /D (page.269) >>
 >> endobj
-7747 0 obj <<
+7715 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [269.865 443.308 288.222 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.441) >>
 >> endobj
-7748 0 obj <<
+7716 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [250.411 429.759 263.312 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.45) >>
 >> endobj
-7749 0 obj <<
+7717 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [267.987 429.759 286.343 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-7750 0 obj <<
+7718 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [291.017 429.759 309.373 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.269) >>
 >> endobj
-7751 0 obj <<
+7719 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [314.047 429.759 332.403 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.272) >>
 >> endobj
-7752 0 obj <<
+7720 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [337.077 429.759 355.434 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.481) >>
 >> endobj
-7753 0 obj <<
+7721 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.063 416.21 230.419 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.238) >>
 >> endobj
-7754 0 obj <<
+7722 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [245.108 402.661 263.464 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.327) >>
 >> endobj
-7755 0 obj <<
+7723 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [268.138 402.661 286.494 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.335) >>
 >> endobj
-7756 0 obj <<
+7724 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.714 389.112 273.07 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.312) >>
 >> endobj
-7757 0 obj <<
+7725 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.411 375.562 267.767 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-7758 0 obj <<
+7726 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.063 348.464 252.419 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.500) >>
 >> endobj
-7759 0 obj <<
+7727 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.047 334.915 238.403 346.483]
 /Subtype /Link
 /A << /S /GoTo /D (page.278) >>
 >> endobj
-7760 0 obj <<
+7728 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.108 321.366 250.464 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.365) >>
 >> endobj
-7761 0 obj <<
+7729 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.138 321.366 273.494 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.368) >>
 >> endobj
-7762 0 obj <<
+7730 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [278.168 321.366 296.525 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-7763 0 obj <<
+7731 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.29 294.267 259.646 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.481) >>
 >> endobj
-7764 0 obj <<
+7732 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [257.723 267.169 276.079 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.269) >>
 >> endobj
-7765 0 obj <<
+7733 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.79 253.62 225.147 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.272) >>
 >> endobj
-7766 0 obj <<
+7734 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.76 240.07 236.116 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.268) >>
 >> endobj
-7767 0 obj <<
+7735 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [209.033 226.521 227.389 237.665]
 /Subtype /Link
 /A << /S /GoTo /D (page.267) >>
 >> endobj
-7768 0 obj <<
+7736 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.063 226.521 250.419 237.665]
 /Subtype /Link
 /A << /S /GoTo /D (page.271) >>
 >> endobj
-7769 0 obj <<
+7737 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.094 226.521 273.45 237.665]
 /Subtype /Link
 /A << /S /GoTo /D (page.272) >>
 >> endobj
-7770 0 obj <<
+7738 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [278.124 226.521 296.48 237.665]
 /Subtype /Link
 /A << /S /GoTo /D (page.285) >>
 >> endobj
-7771 0 obj <<
+7739 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.336 212.972 231.692 224.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.312) >>
 >> endobj
-7772 0 obj <<
+7740 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.366 212.972 254.722 224.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.443) >>
 >> endobj
-7773 0 obj <<
+7741 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.185 199.423 259.541 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.272) >>
 >> endobj
-7774 0 obj <<
+7742 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.336 172.324 231.692 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-7775 0 obj <<
+7743 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [272.926 158.775 291.282 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-7776 0 obj <<
+7744 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [295.956 158.775 314.312 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.455) >>
 >> endobj
-7777 0 obj <<
+7745 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [277.229 145.226 295.585 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.312) >>
 >> endobj
-7778 0 obj <<
+7746 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.411 131.677 260.767 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-7779 0 obj <<
+7747 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.502 118.128 272.858 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.241) >>
 >> endobj
-7780 0 obj <<
+7748 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.991 646.546 465.347 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.253) >>
 >> endobj
-7781 0 obj <<
+7749 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.264 632.931 435.62 644.5]
 /Subtype /Link
 /A << /S /GoTo /D (page.350) >>
 >> endobj
-7782 0 obj <<
+7750 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [440.294 632.931 458.65 644.5]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-7783 0 obj <<
+7751 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.991 619.317 433.347 631.006]
 /Subtype /Link
 /A << /S /GoTo /D (page.327) >>
 >> endobj
-7784 0 obj <<
+7752 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.87 605.702 433.226 617.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.242) >>
 >> endobj
-7785 0 obj <<
+7753 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [465.718 592.087 484.075 603.655]
 /Subtype /Link
 /A << /S /GoTo /D (page.205) >>
 >> endobj
-7786 0 obj <<
+7754 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.718 578.472 441.075 590.041]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-7787 0 obj <<
+7755 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [380.749 564.857 399.105 576.426]
 /Subtype /Link
 /A << /S /GoTo /D (page.325) >>
 >> endobj
-7788 0 obj <<
+7756 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.052 551.243 412.953 562.932]
 /Subtype /Link
 /A << /S /GoTo /D (page.70) >>
 >> endobj
-7789 0 obj <<
+7757 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.627 551.243 435.984 562.932]
 /Subtype /Link
 /A << /S /GoTo /D (page.119) >>
 >> endobj
-7790 0 obj <<
+7758 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.749 537.628 431.105 549.317]
 /Subtype /Link
 /A << /S /GoTo /D (page.324) >>
 >> endobj
-7791 0 obj <<
+7759 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.961 524.013 433.317 535.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-7792 0 obj <<
+7760 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.385 510.398 444.741 522.088]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-7793 0 obj <<
+7761 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.385 496.783 444.741 508.473]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-7794 0 obj <<
+7762 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.143 483.169 403.499 494.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.350) >>
 >> endobj
-7795 0 obj <<
+7763 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [408.173 483.169 426.529 494.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-7796 0 obj <<
+7764 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.112 469.554 464.468 481.243]
 /Subtype /Link
 /A << /S /GoTo /D (page.281) >>
 >> endobj
-7797 0 obj <<
+7765 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.385 455.939 437.287 467.629]
 /Subtype /Link
 /A << /S /GoTo /D (page.58) >>
 >> endobj
-7798 0 obj <<
+7766 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.506 431.268 428.862 442.836]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-7799 0 obj <<
+7767 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [471.991 417.653 490.347 429.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-7800 0 obj <<
+7768 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [475.264 404.039 493.62 415.728]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-7801 0 obj <<
+7769 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.87 390.424 425.226 401.992]
 /Subtype /Link
 /A << /S /GoTo /D (page.149) >>
 >> endobj
-7802 0 obj <<
+7770 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.93 376.809 422.287 388.498]
 /Subtype /Link
 /A << /S /GoTo /D (page.240) >>
 >> endobj
-7803 0 obj <<
+7771 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.233 363.194 412.59 374.884]
 /Subtype /Link
 /A << /S /GoTo /D (page.534) >>
 >> endobj
-7804 0 obj <<
+7772 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.749 349.579 434.105 361.269]
 /Subtype /Link
 /A << /S /GoTo /D (page.430) >>
 >> endobj
-7805 0 obj <<
+7773 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.779 349.579 457.135 361.269]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-7806 0 obj <<
+7774 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.173 335.964 401.074 347.654]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-7807 0 obj <<
+7775 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [445.385 322.35 463.741 334.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.552) >>
 >> endobj
-7808 0 obj <<
+7776 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.87 308.735 423.226 320.424]
 /Subtype /Link
 /A << /S /GoTo /D (page.542) >>
 >> endobj
-7809 0 obj <<
+7777 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [451.991 295.12 470.347 306.81]
 /Subtype /Link
 /A << /S /GoTo /D (page.545) >>
 >> endobj
-7810 0 obj <<
+7778 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [456.294 281.505 474.65 293.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.309) >>
 >> endobj
-7811 0 obj <<
+7779 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [479.324 281.505 497.681 293.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-7812 0 obj <<
+7780 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.991 254.276 435.347 265.675]
 /Subtype /Link
 /A << /S /GoTo /D (page.465) >>
 >> endobj
-7813 0 obj <<
+7781 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.688 240.661 416.044 252.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.430) >>
 >> endobj
-7814 0 obj <<
+7782 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [395.476 227.046 413.832 238.736]
 /Subtype /Link
 /A << /S /GoTo /D (page.533) >>
 >> endobj
-7815 0 obj <<
+7783 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.567 213.431 446.468 225.121]
 /Subtype /Link
 /A << /S /GoTo /D (page.32) >>
 >> endobj
-7816 0 obj <<
+7784 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.991 199.816 449.347 211.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.145) >>
 >> endobj
-7817 0 obj <<
+7785 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.476 186.202 406.832 197.77]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-7818 0 obj <<
+7786 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.688 172.587 420.044 184.155]
 /Subtype /Link
 /A << /S /GoTo /D (page.441) >>
 >> endobj
-7819 0 obj <<
+7787 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.779 158.972 402.135 170.662]
 /Subtype /Link
 /A << /S /GoTo /D (page.446) >>
 >> endobj
-7820 0 obj <<
+7788 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.415 145.357 444.771 157.047]
 /Subtype /Link
 /A << /S /GoTo /D (page.516) >>
 >> endobj
-7821 0 obj <<
+7789 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.93 131.742 429.287 143.142]
 /Subtype /Link
 /A << /S /GoTo /D (page.427) >>
 >> endobj
-7822 0 obj <<
+7790 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.809 118.128 407.165 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.350) >>
 >> endobj
-7827 0 obj <<
-/D [7825 0 R /XYZ 100.892 685.529 null]
+7795 0 obj <<
+/D [7793 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7824 0 obj <<
+7792 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7938 0 obj <<
+7906 0 obj <<
 /Length 1343      
 /Filter /FlateDecode
 >>
@@ -52082,771 +51255,771 @@
 ³oc½,i7ošÎ÷&š4.ìþ÷˜×Õ´;mE°ûš9¶ó8òŒrÃBŠVÑA£Qç{Ç^´Â™i÷°Ú.¯?ú¾Ð™1˜c/œoH’ÈÀ§ÈQà9¶VÏ_”lk•>ýpøôÂ|a½Ï‹ÚR²È'»—mÞXö‡û-D	fâf ïl‘È`à9âóæÅ €õÍÍÜW¥­m£ž·­%e†• Îpà9·ã[Ý–šˆÖ25ÝÓkú¦Ù6B?ÀXÂà.Œí÷¿Œr̽f’¹<…¢öY[Ûs%>ÑØäm¾k@¥(ìpP™0ç€`˜‰Ne3š_#*3ÇaUxIGYH³™{<¼:¢úѶ¶2…vÕUQ	ó+&nºº}û¾^°4ƒÓÐf¯ÔEnè¤å—^Šú·*Jãé¯Bæ`Z±O3’—¥åm&¬:–Æ4p²å_¢æ÷¿jj,Àž«âÕnõ…IP>
 endstream
 endobj
-7937 0 obj <<
+7905 0 obj <<
 /Type /Page
-/Contents 7938 0 R
-/Resources 7936 0 R
+/Contents 7906 0 R
+/Resources 7904 0 R
 /MediaBox [0 0 612 792]
-/Parent 7731 0 R
-/Annots [ 7823 0 R 7828 0 R 7829 0 R 7830 0 R 7831 0 R 7832 0 R 7833 0 R 7834 0 R 7835 0 R 7836 0 R 7837 0 R 7838 0 R 7839 0 R 7840 0 R 7841 0 R 7842 0 R 7843 0 R 7844 0 R 7845 0 R 7846 0 R 7847 0 R 7848 0 R 7849 0 R 7850 0 R 7851 0 R 7852 0 R 7853 0 R 7854 0 R 7855 0 R 7856 0 R 7857 0 R 7858 0 R 7859 0 R 7860 0 R 7861 0 R 7862 0 R 7863 0 R 7864 0 R 7865 0 R 7866 0 R 7867 0 R 7868 0 R 7869 0 R 7870 0 R 7871 0 R 7872 0 R 7873 0 R 7874 0 R 7875 0 R 7876 0 R 7877 0 R 7878 0 R 7879 0 R 7880 0 R 7881 0 R 7882 0 R 7883 0 R 7884 0 R 7885 0 R 7886 0 R 7887 0 R 7888 0 R 7889 0 R 7890 0 R 7891 0 R 7892 0 R 7893 0 R 7894 0 R 7895 0 R 7896 0 R 7897 0 R 7898 0 R 7899 0 R 7900 0 R 7901 0 R 7902 0 R 7903 0 R 7904 0 R 7905 0 R 7906 0 R 7907 0 R 7908 0 R 7909 0 R 7910 0 R 7911 0 R 7912 0 R 7913 0 R 7914 0 R 7915 0 R 7916 0 R 7917 0 R 7918 0 R 7919 0 R 7920 0 R 7921 0 R 7922 0 R 7923 0 R 7924 0 R 7925 0 R 7926 0 R 7927 0 R 7928 0 R 7929 0 R 7930 0 R 7931 0 R 7932 0 R 7933 0 R ]
+/Parent 7699 0 R
+/Annots [ 7791 0 R 7796 0 R 7797 0 R 7798 0 R 7799 0 R 7800 0 R 7801 0 R 7802 0 R 7803 0 R 7804 0 R 7805 0 R 7806 0 R 7807 0 R 7808 0 R 7809 0 R 7810 0 R 7811 0 R 7812 0 R 7813 0 R 7814 0 R 7815 0 R 7816 0 R 7817 0 R 7818 0 R 7819 0 R 7820 0 R 7821 0 R 7822 0 R 7823 0 R 7824 0 R 7825 0 R 7826 0 R 7827 0 R 7828 0 R 7829 0 R 7830 0 R 7831 0 R 7832 0 R 7833 0 R 7834 0 R 7835 0 R 7836 0 R 7837 0 R 7838 0 R 7839 0 R 7840 0 R 7841 0 R 7842 0 R 7843 0 R 7844 0 R 7845 0 R 7846 0 R 7847 0 R 7848 0 R 7849 0 R 7850 0 R 7851 0 R 7852 0 R 7853 0 R 7854 0 R 7855 0 R 7856 0 R 7857 0 R 7858 0 R 7859 0 R 7860 0 R 7861 0 R 7862 0 R 7863 0 R 7864 0 R 7865 0 R 7866 0 R 7867 0 R 7868 0 R 7869 0 R 7870 0 R 7871 0 R 7872 0 R 7873 0 R 7874 0 R 7875 0 R 7876 0 R 7877 0 R 7878 0 R 7879 0 R 7880 0 R 7881 0 R 7882 0 R 7883 0 R 7884 0 R 7885 0 R 7886 0 R 7887 0 R 7888 0 R 7889 0 R 7890 0 R 7891 0 R 7892 0 R 7893 0 R 7894 0 R 7895 0 R 7896 0 R 7897 0 R 7898 0 R 7899 0 R 7900 0 R 7901 0 R ]
 >> endobj
-7823 0 obj <<
+7791 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.614 646.546 259.97 657.69]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-7828 0 obj <<
+7796 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [298.372 632.931 316.728 644.621]
 /Subtype /Link
 /A << /S /GoTo /D (page.271) >>
 >> endobj
-7829 0 obj <<
+7797 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [291.038 619.317 309.395 631.006]
 /Subtype /Link
 /A << /S /GoTo /D (page.476) >>
 >> endobj
-7830 0 obj <<
+7798 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.766 594.646 245.122 606.335]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-7831 0 obj <<
+7799 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [250.129 581.031 268.485 592.72]
 /Subtype /Link
 /A << /S /GoTo /D (page.242) >>
 >> endobj
-7832 0 obj <<
+7800 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.16 581.031 291.516 592.72]
 /Subtype /Link
 /A << /S /GoTo /D (page.244) >>
 >> endobj
-7833 0 obj <<
+7801 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [237.675 567.416 256.031 579.106]
 /Subtype /Link
 /A << /S /GoTo /D (page.278) >>
 >> endobj
-7834 0 obj <<
+7802 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.19 553.801 277.546 565.491]
 /Subtype /Link
 /A << /S /GoTo /D (page.278) >>
 >> endobj
-7835 0 obj <<
+7803 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [282.22 553.801 300.576 565.491]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-7836 0 obj <<
+7804 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [305.251 553.801 323.607 565.491]
 /Subtype /Link
 /A << /S /GoTo /D (page.299) >>
 >> endobj
-7837 0 obj <<
+7805 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.947 540.187 260.304 551.876]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-7838 0 obj <<
+7806 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [248.614 526.572 266.97 538.261]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-7839 0 obj <<
+7807 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [275.887 512.957 294.243 524.646]
 /Subtype /Link
 /A << /S /GoTo /D (page.480) >>
 >> endobj
-7840 0 obj <<
+7808 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [229.826 499.342 248.182 511.032]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-7841 0 obj <<
+7809 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.129 485.727 252.485 497.417]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-7842 0 obj <<
+7810 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.22 472.113 251.667 483.802]
 /Subtype /Link
 /A << /S /GoTo /D (page.4) >>
 >> endobj
-7843 0 obj <<
+7811 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [233.281 458.498 251.637 470.066]
 /Subtype /Link
 /A << /S /GoTo /D (page.496) >>
 >> endobj
-7844 0 obj <<
+7812 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [305.705 444.883 324.061 456.572]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-7845 0 obj <<
+7813 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [309.614 431.268 327.97 442.958]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-7846 0 obj <<
+7814 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [264.947 417.653 283.304 429.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.480) >>
 >> endobj
-7847 0 obj <<
+7815 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [287.978 417.653 306.334 429.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.517) >>
 >> endobj
-7848 0 obj <<
+7816 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [271.675 390.424 290.031 402.113]
 /Subtype /Link
 /A << /S /GoTo /D (page.496) >>
 >> endobj
-7849 0 obj <<
+7817 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [284.554 376.809 302.91 388.498]
 /Subtype /Link
 /A << /S /GoTo /D (page.506) >>
 >> endobj
-7850 0 obj <<
+7818 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [275.509 349.579 282.956 361.269]
 /Subtype /Link
 /A << /S /GoTo /D (page.5) >>
 >> endobj
-7851 0 obj <<
+7819 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [261.796 335.964 280.152 347.654]
 /Subtype /Link
 /A << /S /GoTo /D (page.167) >>
 >> endobj
-7852 0 obj <<
+7820 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [262.038 322.35 280.395 334.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.434) >>
 >> endobj
-7853 0 obj <<
+7821 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [297.145 308.735 310.047 320.424]
 /Subtype /Link
 /A << /S /GoTo /D (page.69) >>
 >> endobj
-7854 0 obj <<
+7822 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.721 295.12 262.168 306.688]
 /Subtype /Link
 /A << /S /GoTo /D (page.6) >>
 >> endobj
-7855 0 obj <<
+7823 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [286.903 281.505 299.805 292.905]
 /Subtype /Link
 /A << /S /GoTo /D (page.69) >>
 >> endobj
-7856 0 obj <<
+7824 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [304.479 281.505 322.835 292.905]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-7857 0 obj <<
+7825 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [301.826 267.89 320.182 279.58]
 /Subtype /Link
 /A << /S /GoTo /D (page.454) >>
 >> endobj
-7858 0 obj <<
+7826 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.372 254.276 252.728 265.965]
 /Subtype /Link
 /A << /S /GoTo /D (page.440) >>
 >> endobj
-7859 0 obj <<
+7827 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [318.129 240.661 336.486 252.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.431) >>
 >> endobj
-7860 0 obj <<
+7828 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.19 227.046 259.091 238.736]
 /Subtype /Link
 /A << /S /GoTo /D (page.57) >>
 >> endobj
-7861 0 obj <<
+7829 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [263.766 227.046 276.667 238.736]
 /Subtype /Link
 /A << /S /GoTo /D (page.65) >>
 >> endobj
-7862 0 obj <<
+7830 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [281.341 227.046 299.698 238.736]
 /Subtype /Link
 /A << /S /GoTo /D (page.429) >>
 >> endobj
-7863 0 obj <<
+7831 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.735 213.431 242.091 225.121]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-7864 0 obj <<
+7832 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.766 213.431 265.122 225.121]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-7865 0 obj <<
+7833 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [235.311 199.816 253.667 211.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.430) >>
 >> endobj
-7866 0 obj <<
+7834 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.554 186.202 273.91 197.891]
 /Subtype /Link
 /A << /S /GoTo /D (page.434) >>
 >> endobj
-7867 0 obj <<
+7835 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [298.842 158.972 317.199 170.662]
 /Subtype /Link
 /A << /S /GoTo /D (page.517) >>
 >> endobj
-7868 0 obj <<
+7836 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.523 145.357 311.879 157.047]
 /Subtype /Link
 /A << /S /GoTo /D (page.154) >>
 >> endobj
-7869 0 obj <<
+7837 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [316.554 145.357 334.91 157.047]
 /Subtype /Link
 /A << /S /GoTo /D (page.208) >>
 >> endobj
-7870 0 obj <<
+7838 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [339.584 145.357 357.94 157.047]
 /Subtype /Link
 /A << /S /GoTo /D (page.253) >>
 >> endobj
-7871 0 obj <<
+7839 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [265.614 131.742 283.97 143.432]
 /Subtype /Link
 /A << /S /GoTo /D (page.445) >>
 >> endobj
-7872 0 obj <<
+7840 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [288.644 131.742 307.001 143.432]
 /Subtype /Link
 /A << /S /GoTo /D (page.454) >>
 >> endobj
-7873 0 obj <<
+7841 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [257.796 118.128 270.698 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.10) >>
 >> endobj
-7874 0 obj <<
+7842 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [275.372 118.128 293.728 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.445) >>
 >> endobj
-7875 0 obj <<
+7843 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [298.402 118.128 316.758 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.454) >>
 >> endobj
-7876 0 obj <<
+7844 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [477.619 646.546 495.975 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.445) >>
 >> endobj
-7877 0 obj <<
+7845 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.134 632.931 459.49 644.621]
 /Subtype /Link
 /A << /S /GoTo /D (page.274) >>
 >> endobj
-7878 0 obj <<
+7846 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [463.104 619.317 481.46 631.006]
 /Subtype /Link
 /A << /S /GoTo /D (page.273) >>
 >> endobj
-7879 0 obj <<
+7847 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [456.013 605.702 474.369 617.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.477) >>
 >> endobj
-7880 0 obj <<
+7848 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [506.043 592.087 524.399 603.777]
 /Subtype /Link
 /A << /S /GoTo /D (page.435) >>
 >> endobj
-7881 0 obj <<
+7849 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [466.376 564.857 484.732 576.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.488) >>
 >> endobj
-7882 0 obj <<
+7850 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [452.346 551.243 470.702 562.932]
 /Subtype /Link
 /A << /S /GoTo /D (page.474) >>
 >> endobj
-7883 0 obj <<
+7851 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [456.605 537.628 474.961 548.772]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-7884 0 obj <<
+7852 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [459.407 524.013 477.763 535.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.324) >>
 >> endobj
-7885 0 obj <<
+7853 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.422 510.398 448.778 521.967]
 /Subtype /Link
 /A << /S /GoTo /D (page.496) >>
 >> endobj
-7886 0 obj <<
+7854 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [454.695 483.169 473.052 494.313]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-7887 0 obj <<
+7855 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [460.831 469.554 479.187 481.243]
 /Subtype /Link
 /A << /S /GoTo /D (page.441) >>
 >> endobj
-7888 0 obj <<
+7856 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [483.861 469.554 502.217 481.243]
 /Subtype /Link
 /A << /S /GoTo /D (page.450) >>
 >> endobj
-7889 0 obj <<
+7857 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [473.831 455.939 492.187 467.629]
 /Subtype /Link
 /A << /S /GoTo /D (page.443) >>
 >> endobj
-7890 0 obj <<
+7858 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [509.376 442.324 527.733 454.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.325) >>
 >> endobj
-7891 0 obj <<
+7859 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [458.407 417.653 476.763 429.053]
 /Subtype /Link
 /A << /S /GoTo /D (page.325) >>
 >> endobj
-7892 0 obj <<
+7860 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.3 404.039 461.657 415.607]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-7893 0 obj <<
+7861 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.073 390.424 456.429 401.568]
 /Subtype /Link
 /A << /S /GoTo /D (page.189) >>
 >> endobj
-7894 0 obj <<
+7862 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [461.104 390.424 479.46 401.568]
 /Subtype /Link
 /A << /S /GoTo /D (page.190) >>
 >> endobj
-7895 0 obj <<
+7863 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [484.134 390.424 502.49 401.568]
 /Subtype /Link
 /A << /S /GoTo /D (page.192) >>
 >> endobj
-7896 0 obj <<
+7864 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [507.164 390.424 525.52 401.568]
 /Subtype /Link
 /A << /S /GoTo /D (page.199) >>
 >> endobj
-7897 0 obj <<
+7865 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [530.194 390.424 548.551 401.568]
 /Subtype /Link
 /A << /S /GoTo /D (page.276) >>
 >> endobj
-7898 0 obj <<
+7866 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [553.225 390.424 571.581 401.568]
 /Subtype /Link
 /A << /S /GoTo /D (page.282) >>
 >> endobj
-7899 0 obj <<
+7867 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [576.255 390.424 594.611 401.568]
 /Subtype /Link
 /A << /S /GoTo /D (page.292) >>
 >> endobj
-7900 0 obj <<
+7868 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [599.285 390.424 617.642 401.568]
 /Subtype /Link
 /A << /S /GoTo /D (page.298) >>
 >> endobj
-7901 0 obj <<
+7869 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.891 376.809 458.248 388.498]
 /Subtype /Link
 /A << /S /GoTo /D (page.452) >>
 >> endobj
-7902 0 obj <<
+7870 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.558 363.194 471.914 374.338]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-7903 0 obj <<
+7871 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [457.467 349.579 475.823 360.723]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-7904 0 obj <<
+7872 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [480.497 349.579 498.854 360.723]
 /Subtype /Link
 /A << /S /GoTo /D (page.271) >>
 >> endobj
-7905 0 obj <<
+7873 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [503.528 349.579 521.884 360.723]
 /Subtype /Link
 /A << /S /GoTo /D (page.274) >>
 >> endobj
-7906 0 obj <<
+7874 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [465.952 335.358 484.308 348.26]
 /Subtype /Link
 /A << /S /GoTo /D (page.309) >>
 >> endobj
-7907 0 obj <<
+7875 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.513 322.35 447.869 333.918]
 /Subtype /Link
 /A << /S /GoTo /D (page.243) >>
 >> endobj
-7908 0 obj <<
+7876 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [452.543 322.35 470.899 333.918]
 /Subtype /Link
 /A << /S /GoTo /D (page.312) >>
 >> endobj
-7909 0 obj <<
+7877 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [475.573 322.35 493.929 333.918]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-7910 0 obj <<
+7878 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [498.604 322.35 516.96 333.918]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-7911 0 obj <<
+7879 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [461.785 308.735 480.142 320.303]
 /Subtype /Link
 /A << /S /GoTo /D (page.470) >>
 >> endobj
-7912 0 obj <<
+7880 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [463.861 295.12 482.217 306.264]
 /Subtype /Link
 /A << /S /GoTo /D (page.240) >>
 >> endobj
-7913 0 obj <<
+7881 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.482 281.505 444.384 293.074]
 /Subtype /Link
 /A << /S /GoTo /D (page.86) >>
 >> endobj
-7914 0 obj <<
+7882 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [476.285 267.89 489.187 279.035]
 /Subtype /Link
 /A << /S /GoTo /D (page.22) >>
 >> endobj
-7915 0 obj <<
+7883 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [493.861 267.89 512.217 279.035]
 /Subtype /Link
 /A << /S /GoTo /D (page.169) >>
 >> endobj
-7916 0 obj <<
+7884 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [499.922 254.276 512.823 265.42]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-7917 0 obj <<
+7885 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [480.831 240.661 499.187 252.06]
 /Subtype /Link
 /A << /S /GoTo /D (page.400) >>
 >> endobj
-7918 0 obj <<
+7886 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [497.285 227.046 510.187 238.736]
 /Subtype /Link
 /A << /S /GoTo /D (page.33) >>
 >> endobj
-7919 0 obj <<
+7887 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [514.861 227.046 527.763 238.736]
 /Subtype /Link
 /A << /S /GoTo /D (page.69) >>
 >> endobj
-7920 0 obj <<
+7888 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [532.437 227.046 550.793 238.736]
 /Subtype /Link
 /A << /S /GoTo /D (page.277) >>
 >> endobj
-7921 0 obj <<
+7889 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [555.467 227.046 573.823 238.736]
 /Subtype /Link
 /A << /S /GoTo /D (page.448) >>
 >> endobj
-7922 0 obj <<
+7890 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [469.376 213.431 487.732 224.575]
 /Subtype /Link
 /A << /S /GoTo /D (page.375) >>
 >> endobj
-7923 0 obj <<
+7891 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [474.528 199.816 492.884 211.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.347) >>
 >> endobj
-7924 0 obj <<
+7892 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [471.058 186.202 489.414 197.891]
 /Subtype /Link
 /A << /S /GoTo /D (page.495) >>
 >> endobj
-7925 0 obj <<
+7893 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [503.513 172.587 521.869 184.276]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-7926 0 obj <<
+7894 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [512.331 158.972 530.687 170.662]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-7927 0 obj <<
+7895 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.558 145.357 466.46 157.047]
 /Subtype /Link
 /A << /S /GoTo /D (page.11) >>
 >> endobj
-7928 0 obj <<
+7896 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [471.134 145.357 484.035 157.047]
 /Subtype /Link
 /A << /S /GoTo /D (page.22) >>
 >> endobj
-7929 0 obj <<
+7897 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [488.71 145.357 507.066 157.047]
 /Subtype /Link
 /A << /S /GoTo /D (page.335) >>
 >> endobj
-7930 0 obj <<
+7898 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [511.74 145.357 530.096 157.047]
 /Subtype /Link
 /A << /S /GoTo /D (page.375) >>
 >> endobj
-7931 0 obj <<
+7899 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [450.225 131.742 468.581 143.432]
 /Subtype /Link
 /A << /S /GoTo /D (page.335) >>
 >> endobj
-7932 0 obj <<
+7900 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [473.255 131.742 491.611 143.432]
 /Subtype /Link
 /A << /S /GoTo /D (page.375) >>
 >> endobj
-7933 0 obj <<
+7901 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [459.013 118.128 477.369 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.354) >>
 >> endobj
-7939 0 obj <<
-/D [7937 0 R /XYZ 151.701 685.529 null]
+7907 0 obj <<
+/D [7905 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7936 0 obj <<
+7904 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8059 0 obj <<
+8027 0 obj <<
 /Length 1481      
 /Filter /FlateDecode
 >>
@@ -52868,848 +52041,848 @@
 Ûÿ‰!C
 endstream
 endobj
-8058 0 obj <<
+8026 0 obj <<
 /Type /Page
-/Contents 8059 0 R
-/Resources 8057 0 R
+/Contents 8027 0 R
+/Resources 8025 0 R
 /MediaBox [0 0 612 792]
-/Parent 7731 0 R
-/Annots [ 7934 0 R 7935 0 R 7940 0 R 7941 0 R 7942 0 R 7943 0 R 7944 0 R 7945 0 R 7946 0 R 7947 0 R 7948 0 R 7949 0 R 7950 0 R 7951 0 R 7952 0 R 7953 0 R 7954 0 R 7955 0 R 7956 0 R 7957 0 R 7958 0 R 7959 0 R 7960 0 R 7961 0 R 7962 0 R 7963 0 R 7964 0 R 7965 0 R 7966 0 R 7967 0 R 7968 0 R 7969 0 R 7970 0 R 7971 0 R 7972 0 R 7973 0 R 7974 0 R 7975 0 R 7976 0 R 7977 0 R 7978 0 R 7979 0 R 7980 0 R 7981 0 R 7982 0 R 7983 0 R 7984 0 R 7985 0 R 7986 0 R 7987 0 R 7988 0 R 7989 0 R 7990 0 R 7991 0 R 7992 0 R 7993 0 R 7994 0 R 7995 0 R 7996 0 R 7997 0 R 7998 0 R 7999 0 R 8000 0 R 8001 0 R 8002 0 R 8003 0 R 8004 0 R 8005 0 R 8006 0 R 8007 0 R 8008 0 R 8009 0 R 8010 0 R 8011 0 R 8012 0 R 8013 0 R 8014 0 R 8015 0 R 8016 0 R 8017 0 R 8018 0 R 8019 0 R 8020 0 R 8021 0 R 8022 0 R 8023 0 R 8024 0 R 8025 0 R 8026 0 R 8027 0 R 8028 0 R 8029 0 R 8030 0 R 8031 0 R 8032 0 R 8033 0 R 8034 0 R 8035 0 R 8036 0 R 8037 0 R 8038 0 R 8039 0 R 8040 0 R 8041 0 R 8042 0 R 8043 0 R 8044 0 R 8045 0 R 8046 0 R 8047 0 R 8048 0 R 8049 0 R 8050 0 R 8051 0 R 8052 0 R 8053 0 R 8054 0 R 8055 0 R ]
+/Parent 7699 0 R
+/Annots [ 7902 0 R 7903 0 R 7908 0 R 7909 0 R 7910 0 R 7911 0 R 7912 0 R 7913 0 R 7914 0 R 7915 0 R 7916 0 R 7917 0 R 7918 0 R 7919 0 R 7920 0 R 7921 0 R 7922 0 R 7923 0 R 7924 0 R 7925 0 R 7926 0 R 7927 0 R 7928 0 R 7929 0 R 7930 0 R 7931 0 R 7932 0 R 7933 0 R 7934 0 R 7935 0 R 7936 0 R 7937 0 R 7938 0 R 7939 0 R 7940 0 R 7941 0 R 7942 0 R 7943 0 R 7944 0 R 7945 0 R 7946 0 R 7947 0 R 7948 0 R 7949 0 R 7950 0 R 7951 0 R 7952 0 R 7953 0 R 7954 0 R 7955 0 R 7956 0 R 7957 0 R 7958 0 R 7959 0 R 7960 0 R 7961 0 R 7962 0 R 7963 0 R 7964 0 R 7965 0 R 7966 0 R 7967 0 R 7968 0 R 7969 0 R 7970 0 R 7971 0 R 7972 0 R 7973 0 R 7974 0 R 7975 0 R 7976 0 R 7977 0 R 7978 0 R 7979 0 R 7980 0 R 7981 0 R 7982 0 R 7983 0 R 7984 0 R 7985 0 R 7986 0 R 7987 0 R 7988 0 R 7989 0 R 7990 0 R 7991 0 R 7992 0 R 7993 0 R 7994 0 R 7995 0 R 7996 0 R 7997 0 R 7998 0 R 7999 0 R 8000 0 R 8001 0 R 8002 0 R 8003 0 R 8004 0 R 8005 0 R 8006 0 R 8007 0 R 8008 0 R 8009 0 R 8010 0 R 8011 0 R 8012 0 R 8013 0 R 8014 0 R 8015 0 R 8016 0 R 8017 0 R 8018 0 R 8019 0 R 8020 0 R 8021 0 R 8022 0 R 8023 0 R ]
 >> endobj
-7934 0 obj <<
+7902 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [209.32 646.546 227.676 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.335) >>
 >> endobj
-7935 0 obj <<
+7903 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.35 646.546 250.706 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.375) >>
 >> endobj
-7940 0 obj <<
+7908 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.971 632.895 223.327 644.463]
 /Subtype /Link
 /A << /S /GoTo /D (page.545) >>
 >> endobj
-7941 0 obj <<
+7909 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.32 619.244 244.676 630.388]
 /Subtype /Link
 /A << /S /GoTo /D (page.541) >>
 >> endobj
-7942 0 obj <<
+7910 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.35 619.244 267.706 630.388]
 /Subtype /Link
 /A << /S /GoTo /D (page.548) >>
 >> endobj
-7943 0 obj <<
+7911 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [272.38 619.244 290.737 630.388]
 /Subtype /Link
 /A << /S /GoTo /D (page.550) >>
 >> endobj
-7944 0 obj <<
+7912 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [295.411 619.244 313.767 630.388]
 /Subtype /Link
 /A << /S /GoTo /D (page.552) >>
 >> endobj
-7945 0 obj <<
+7913 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.047 593.93 214.403 605.62]
 /Subtype /Link
 /A << /S /GoTo /D (page.430) >>
 >> endobj
-7946 0 obj <<
+7914 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.108 580.279 254.464 591.969]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-7947 0 obj <<
+7915 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [251.865 566.628 270.221 578.317]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-7948 0 obj <<
+7916 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.805 552.977 219.161 564.666]
 /Subtype /Link
 /A << /S /GoTo /D (page.460) >>
 >> endobj
-7949 0 obj <<
+7917 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [222.623 552.977 240.979 564.666]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-7950 0 obj <<
+7918 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [247.29 539.326 265.646 551.015]
 /Subtype /Link
 /A << /S /GoTo /D (page.288) >>
 >> endobj
-7951 0 obj <<
+7919 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [270.32 539.326 288.676 551.015]
 /Subtype /Link
 /A << /S /GoTo /D (page.438) >>
 >> endobj
-7952 0 obj <<
+7920 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.259 525.674 262.615 537.364]
 /Subtype /Link
 /A << /S /GoTo /D (page.300) >>
 >> endobj
-7953 0 obj <<
+7921 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [181.108 512.023 199.464 523.713]
 /Subtype /Link
 /A << /S /GoTo /D (page.488) >>
 >> endobj
-7954 0 obj <<
+7922 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.926 498.372 238.282 510.062]
 /Subtype /Link
 /A << /S /GoTo /D (page.467) >>
 >> endobj
-7955 0 obj <<
+7923 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.168 484.721 209.524 496.41]
 /Subtype /Link
 /A << /S /GoTo /D (page.274) >>
 >> endobj
-7956 0 obj <<
+7924 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.229 471.07 272.585 482.759]
 /Subtype /Link
 /A << /S /GoTo /D (page.442) >>
 >> endobj
-7957 0 obj <<
+7925 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.562 457.418 254.918 469.108]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-7958 0 obj <<
+7926 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [179.32 443.767 197.676 455.457]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-7959 0 obj <<
+7927 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [286.538 430.116 304.894 441.684]
 /Subtype /Link
 /A << /S /GoTo /D (page.155) >>
 >> endobj
-7960 0 obj <<
+7928 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [292.902 416.465 311.258 428.033]
 /Subtype /Link
 /A << /S /GoTo /D (page.209) >>
 >> endobj
-7961 0 obj <<
+7929 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [269.114 402.814 287.47 414.382]
 /Subtype /Link
 /A << /S /GoTo /D (page.253) >>
 >> endobj
-7962 0 obj <<
+7930 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [253.593 389.163 271.949 400.852]
 /Subtype /Link
 /A << /S /GoTo /D (page.532) >>
 >> endobj
-7963 0 obj <<
+7931 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [276.623 389.163 294.979 400.852]
 /Subtype /Link
 /A << /S /GoTo /D (page.538) >>
 >> endobj
-7964 0 obj <<
+7932 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.623 375.511 219.524 387.201]
 /Subtype /Link
 /A << /S /GoTo /D (page.63) >>
 >> endobj
-7965 0 obj <<
+7933 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.199 375.511 242.555 387.201]
 /Subtype /Link
 /A << /S /GoTo /D (page.326) >>
 >> endobj
-7966 0 obj <<
+7934 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [247.229 375.511 265.585 387.201]
 /Subtype /Link
 /A << /S /GoTo /D (page.327) >>
 >> endobj
-7967 0 obj <<
+7935 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.471 361.86 203.827 373.55]
 /Subtype /Link
 /A << /S /GoTo /D (page.312) >>
 >> endobj
-7968 0 obj <<
+7936 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.199 348.209 203.555 359.777]
 /Subtype /Link
 /A << /S /GoTo /D (page.145) >>
 >> endobj
-7969 0 obj <<
+7937 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [194.471 334.558 212.828 346.247]
 /Subtype /Link
 /A << /S /GoTo /D (page.550) >>
 >> endobj
-7970 0 obj <<
+7938 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.199 320.907 238.555 332.596]
 /Subtype /Link
 /A << /S /GoTo /D (page.428) >>
 >> endobj
-7971 0 obj <<
+7939 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.199 295.593 208.555 307.283]
 /Subtype /Link
 /A << /S /GoTo /D (page.336) >>
 >> endobj
-7972 0 obj <<
+7940 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.229 295.593 231.585 307.283]
 /Subtype /Link
 /A << /S /GoTo /D (page.356) >>
 >> endobj
-7973 0 obj <<
+7941 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [247.215 281.942 265.571 293.631]
 /Subtype /Link
 /A << /S /GoTo /D (page.176) >>
 >> endobj
-7974 0 obj <<
+7942 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [270.245 281.942 288.601 293.631]
 /Subtype /Link
 /A << /S /GoTo /D (page.183) >>
 >> endobj
-7975 0 obj <<
+7943 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [207.562 268.291 225.918 279.98]
 /Subtype /Link
 /A << /S /GoTo /D (page.271) >>
 >> endobj
-7976 0 obj <<
+7944 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.865 254.639 215.221 266.329]
 /Subtype /Link
 /A << /S /GoTo /D (page.312) >>
 >> endobj
-7977 0 obj <<
+7945 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.896 254.639 238.252 266.329]
 /Subtype /Link
 /A << /S /GoTo /D (page.438) >>
 >> endobj
-7978 0 obj <<
+7946 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.336 240.988 259.692 252.132]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-7979 0 obj <<
+7947 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [263.532 227.337 281.888 239.027]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-7980 0 obj <<
+7948 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [286.562 227.337 304.918 239.027]
 /Subtype /Link
 /A << /S /GoTo /D (page.240) >>
 >> endobj
-7981 0 obj <<
+7949 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [262.623 213.686 280.979 225.375]
 /Subtype /Link
 /A << /S /GoTo /D (page.305) >>
 >> endobj
-7982 0 obj <<
+7950 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [261.714 200.035 280.07 211.724]
 /Subtype /Link
 /A << /S /GoTo /D (page.108) >>
 >> endobj
-7983 0 obj <<
+7951 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [284.744 200.035 303.1 211.724]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-7984 0 obj <<
+7952 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [307.774 200.035 326.131 211.724]
 /Subtype /Link
 /A << /S /GoTo /D (page.272) >>
 >> endobj
-7985 0 obj <<
+7953 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [330.805 200.035 349.161 211.724]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-7986 0 obj <<
+7954 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.077 186.384 267.434 198.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.274) >>
 >> endobj
-7987 0 obj <<
+7955 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [272.108 186.384 290.464 198.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.276) >>
 >> endobj
-7988 0 obj <<
+7956 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [295.138 186.384 313.494 198.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.285) >>
 >> endobj
-7989 0 obj <<
+7957 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [318.168 186.384 336.525 198.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.306) >>
 >> endobj
-7990 0 obj <<
+7958 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [341.199 186.384 359.555 198.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.312) >>
 >> endobj
-7991 0 obj <<
+7959 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [238.805 172.732 257.161 184.422]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-7992 0 obj <<
+7960 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [198.077 159.081 216.434 170.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.273) >>
 >> endobj
-7993 0 obj <<
+7961 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.108 159.081 239.464 170.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.274) >>
 >> endobj
-7994 0 obj <<
+7962 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.138 159.081 262.494 170.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.298) >>
 >> endobj
-7995 0 obj <<
+7963 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.108 145.43 259.464 157.119]
 /Subtype /Link
 /A << /S /GoTo /D (page.312) >>
 >> endobj
-7996 0 obj <<
+7964 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.926 131.779 251.282 143.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-7997 0 obj <<
+7965 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.986 118.128 227.343 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.298) >>
 >> endobj
-7998 0 obj <<
+7966 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.355 646.546 424.711 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.298) >>
 >> endobj
-7999 0 obj <<
+7967 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.858 632.895 423.214 644.585]
 /Subtype /Link
 /A << /S /GoTo /D (page.298) >>
 >> endobj
-8000 0 obj <<
+7968 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [386.506 619.244 404.862 630.812]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-8001 0 obj <<
+7969 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [390.324 605.593 408.681 616.992]
 /Subtype /Link
 /A << /S /GoTo /D (page.350) >>
 >> endobj
-8002 0 obj <<
+7970 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.203 591.942 409.559 603.341]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-8003 0 obj <<
+7971 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [450.021 578.29 468.378 589.98]
 /Subtype /Link
 /A << /S /GoTo /D (page.430) >>
 >> endobj
-8004 0 obj <<
+7972 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.112 564.639 395.014 576.329]
 /Subtype /Link
 /A << /S /GoTo /D (page.74) >>
 >> endobj
-8005 0 obj <<
+7973 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.324 550.988 444.681 562.556]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-8006 0 obj <<
+7974 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.627 537.337 428.984 549.026]
 /Subtype /Link
 /A << /S /GoTo /D (page.452) >>
 >> endobj
-8007 0 obj <<
+7975 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.824 523.686 423.726 535.375]
 /Subtype /Link
 /A << /S /GoTo /D (page.36) >>
 >> endobj
-8008 0 obj <<
+7976 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.4 523.686 441.302 535.375]
 /Subtype /Link
 /A << /S /GoTo /D (page.37) >>
 >> endobj
-8009 0 obj <<
+7977 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [445.976 523.686 458.878 535.375]
 /Subtype /Link
 /A << /S /GoTo /D (page.67) >>
 >> endobj
-8010 0 obj <<
+7978 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [463.552 523.686 476.453 535.375]
 /Subtype /Link
 /A << /S /GoTo /D (page.96) >>
 >> endobj
-8011 0 obj <<
+7979 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [481.127 523.686 499.484 535.375]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-8012 0 obj <<
+7980 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [440.082 510.034 458.438 521.724]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-8013 0 obj <<
+7981 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.93 496.383 429.287 507.783]
 /Subtype /Link
 /A << /S /GoTo /D (page.348) >>
 >> endobj
-8014 0 obj <<
+7982 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.021 482.732 405.378 494.422]
 /Subtype /Link
 /A << /S /GoTo /D (page.323) >>
 >> endobj
-8015 0 obj <<
+7983 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.264 469.081 429.62 480.77]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-8016 0 obj <<
+7984 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.021 455.43 418.378 466.829]
 /Subtype /Link
 /A << /S /GoTo /D (page.269) >>
 >> endobj
-8017 0 obj <<
+7985 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.294 441.779 415.65 453.178]
 /Subtype /Link
 /A << /S /GoTo /D (page.429) >>
 >> endobj
-8018 0 obj <<
+7986 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.324 441.779 438.681 453.178]
 /Subtype /Link
 /A << /S /GoTo /D (page.430) >>
 >> endobj
-8019 0 obj <<
+7987 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.355 441.779 461.711 453.178]
 /Subtype /Link
 /A << /S /GoTo /D (page.438) >>
 >> endobj
-8020 0 obj <<
+7988 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.809 428.127 437.165 439.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.335) >>
 >> endobj
-8021 0 obj <<
+7989 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.991 414.476 452.347 426.166]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-8022 0 obj <<
+7990 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [457.021 414.476 475.378 426.166]
 /Subtype /Link
 /A << /S /GoTo /D (page.435) >>
 >> endobj
-8023 0 obj <<
+7991 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [480.052 414.476 498.408 426.166]
 /Subtype /Link
 /A << /S /GoTo /D (page.452) >>
 >> endobj
-8024 0 obj <<
+7992 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [503.082 414.476 521.438 426.166]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-8025 0 obj <<
+7993 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.537 400.825 449.893 412.514]
 /Subtype /Link
 /A << /S /GoTo /D (page.488) >>
 >> endobj
-8026 0 obj <<
+7994 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.234 387.174 464.59 398.863]
 /Subtype /Link
 /A << /S /GoTo /D (page.242) >>
 >> endobj
-8027 0 obj <<
+7995 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.809 373.523 415.711 385.212]
 /Subtype /Link
 /A << /S /GoTo /D (page.61) >>
 >> endobj
-8028 0 obj <<
+7996 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.476 359.871 433.832 371.271]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-8029 0 obj <<
+7997 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [450.931 346.22 469.287 357.91]
 /Subtype /Link
 /A << /S /GoTo /D (page.332) >>
 >> endobj
-8030 0 obj <<
+7998 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [440.84 332.569 459.196 344.259]
 /Subtype /Link
 /A << /S /GoTo /D (page.459) >>
 >> endobj
-8031 0 obj <<
+7999 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.506 318.918 507.862 330.607]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-8032 0 obj <<
+8000 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.355 305.267 448.711 316.956]
 /Subtype /Link
 /A << /S /GoTo /D (page.151) >>
 >> endobj
-8033 0 obj <<
+8001 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.84 291.616 436.741 303.305]
 /Subtype /Link
 /A << /S /GoTo /D (page.35) >>
 >> endobj
-8034 0 obj <<
+8002 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.415 291.616 454.317 303.305]
 /Subtype /Link
 /A << /S /GoTo /D (page.64) >>
 >> endobj
-8035 0 obj <<
+8003 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [458.991 291.616 477.347 303.305]
 /Subtype /Link
 /A << /S /GoTo /D (page.116) >>
 >> endobj
-8036 0 obj <<
+8004 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.567 277.964 400.923 290.26]
 /Subtype /Link
 /A << /S /GoTo /D (page.541) >>
 >> endobj
-8037 0 obj <<
+8005 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.9 264.313 407.802 276.003]
 /Subtype /Link
 /A << /S /GoTo /D (page.57) >>
 >> endobj
-8038 0 obj <<
+8006 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [377.415 250.662 395.771 262.23]
 /Subtype /Link
 /A << /S /GoTo /D (page.488) >>
 >> endobj
-8039 0 obj <<
+8007 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.294 237.011 412.65 248.7]
 /Subtype /Link
 /A << /S /GoTo /D (page.429) >>
 >> endobj
-8040 0 obj <<
+8008 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [389.082 223.36 407.438 235.049]
 /Subtype /Link
 /A << /S /GoTo /D (page.470) >>
 >> endobj
-8041 0 obj <<
+8009 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [377.021 198.046 395.377 209.735]
 /Subtype /Link
 /A << /S /GoTo /D (page.430) >>
 >> endobj
-8042 0 obj <<
+8010 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.173 184.395 456.529 196.084]
 /Subtype /Link
 /A << /S /GoTo /D (page.491) >>
 >> endobj
-8043 0 obj <<
+8011 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.567 159.081 400.923 170.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-8044 0 obj <<
+8012 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.718 145.43 419.074 157.119]
 /Subtype /Link
 /A << /S /GoTo /D (page.285) >>
 >> endobj
-8045 0 obj <<
+8013 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.749 145.43 442.105 157.119]
 /Subtype /Link
 /A << /S /GoTo /D (page.289) >>
 >> endobj
-8046 0 obj <<
+8014 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.779 145.43 465.135 157.119]
 /Subtype /Link
 /A << /S /GoTo /D (page.293) >>
 >> endobj
-8047 0 obj <<
+8015 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [469.809 145.43 488.165 157.119]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-8048 0 obj <<
+8016 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [492.84 145.43 511.196 157.119]
 /Subtype /Link
 /A << /S /GoTo /D (page.313) >>
 >> endobj
-8049 0 obj <<
+8017 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [515.87 145.43 534.226 157.119]
 /Subtype /Link
 /A << /S /GoTo /D (page.431) >>
 >> endobj
-8050 0 obj <<
+8018 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [538.9 145.43 557.256 157.119]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-8051 0 obj <<
+8019 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [561.931 145.43 580.287 157.119]
 /Subtype /Link
 /A << /S /GoTo /D (page.452) >>
 >> endobj
-8052 0 obj <<
+8020 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [584.961 145.43 603.317 157.119]
 /Subtype /Link
 /A << /S /GoTo /D (page.459) >>
 >> endobj
-8053 0 obj <<
+8021 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [606.779 145.43 625.135 157.119]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-8054 0 obj <<
+8022 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.492 131.779 435.848 143.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.288) >>
 >> endobj
-8055 0 obj <<
+8023 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [450.28 118.128 468.636 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.439) >>
 >> endobj
-8060 0 obj <<
-/D [8058 0 R /XYZ 100.892 685.529 null]
+8028 0 obj <<
+/D [8026 0 R /XYZ 100.892 685.529 null]
 >> endobj
-8057 0 obj <<
+8025 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8180 0 obj <<
+8148 0 obj <<
 /Length 1533      
 /Filter /FlateDecode
 >>
@@ -53729,841 +52902,841 @@
 ù=šùÉP ×=‘8ß\Væqr	’LEå•çáÖrcŸÏûóèÿü´œü‚ŽY
 endstream
 endobj
-8179 0 obj <<
+8147 0 obj <<
 /Type /Page
-/Contents 8180 0 R
-/Resources 8178 0 R
+/Contents 8148 0 R
+/Resources 8146 0 R
 /MediaBox [0 0 612 792]
-/Parent 7731 0 R
-/Annots [ 8056 0 R 8061 0 R 8062 0 R 8063 0 R 8064 0 R 8065 0 R 8066 0 R 8067 0 R 8068 0 R 8069 0 R 8070 0 R 8071 0 R 8072 0 R 8073 0 R 8074 0 R 8075 0 R 8076 0 R 8077 0 R 8078 0 R 8079 0 R 8080 0 R 8081 0 R 8082 0 R 8083 0 R 8084 0 R 8085 0 R 8086 0 R 8087 0 R 8088 0 R 8089 0 R 8090 0 R 8091 0 R 8092 0 R 8093 0 R 8094 0 R 8095 0 R 8096 0 R 8097 0 R 8098 0 R 8099 0 R 8100 0 R 8101 0 R 8102 0 R 8103 0 R 8104 0 R 8105 0 R 8106 0 R 8107 0 R 8108 0 R 8109 0 R 8110 0 R 8111 0 R 8112 0 R 8113 0 R 8114 0 R 8115 0 R 8116 0 R 8117 0 R 8118 0 R 8119 0 R 8120 0 R 8121 0 R 8122 0 R 8123 0 R 8124 0 R 8125 0 R 8126 0 R 8127 0 R 8128 0 R 8129 0 R 8130 0 R 8131 0 R 8132 0 R 8133 0 R 8134 0 R 8135 0 R 8136 0 R 8137 0 R 8138 0 R 8139 0 R 8140 0 R 8141 0 R 8142 0 R 8143 0 R 8144 0 R 8145 0 R 8146 0 R 8147 0 R 8148 0 R 8149 0 R 8150 0 R 8151 0 R 8152 0 R 8153 0 R 8154 0 R 8155 0 R 8156 0 R 8157 0 R 8158 0 R 8159 0 R 8160 0 R 8161 0 R 8162 0 R 8163 0 R 8164 0 R 8165 0 R 8166 0 R 8167 0 R 8168 0 R 8169 0 R 8170 0 R 8171 0 R 8172 0 R 8173 0 R 8174 0 R 8175 0 R 8176 0 R ]
+/Parent 7699 0 R
+/Annots [ 8024 0 R 8029 0 R 8030 0 R 8031 0 R 8032 0 R 8033 0 R 8034 0 R 8035 0 R 8036 0 R 8037 0 R 8038 0 R 8039 0 R 8040 0 R 8041 0 R 8042 0 R 8043 0 R 8044 0 R 8045 0 R 8046 0 R 8047 0 R 8048 0 R 8049 0 R 8050 0 R 8051 0 R 8052 0 R 8053 0 R 8054 0 R 8055 0 R 8056 0 R 8057 0 R 8058 0 R 8059 0 R 8060 0 R 8061 0 R 8062 0 R 8063 0 R 8064 0 R 8065 0 R 8066 0 R 8067 0 R 8068 0 R 8069 0 R 8070 0 R 8071 0 R 8072 0 R 8073 0 R 8074 0 R 8075 0 R 8076 0 R 8077 0 R 8078 0 R 8079 0 R 8080 0 R 8081 0 R 8082 0 R 8083 0 R 8084 0 R 8085 0 R 8086 0 R 8087 0 R 8088 0 R 8089 0 R 8090 0 R 8091 0 R 8092 0 R 8093 0 R 8094 0 R 8095 0 R 8096 0 R 8097 0 R 8098 0 R 8099 0 R 8100 0 R 8101 0 R 8102 0 R 8103 0 R 8104 0 R 8105 0 R 8106 0 R 8107 0 R 8108 0 R 8109 0 R 8110 0 R 8111 0 R 8112 0 R 8113 0 R 8114 0 R 8115 0 R 8116 0 R 8117 0 R 8118 0 R 8119 0 R 8120 0 R 8121 0 R 8122 0 R 8123 0 R 8124 0 R 8125 0 R 8126 0 R 8127 0 R 8128 0 R 8129 0 R 8130 0 R 8131 0 R 8132 0 R 8133 0 R 8134 0 R 8135 0 R 8136 0 R 8137 0 R 8138 0 R 8139 0 R 8140 0 R 8141 0 R 8142 0 R 8143 0 R 8144 0 R ]
 >> endobj
-8056 0 obj <<
+8024 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [270.145 646.546 288.502 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.288) >>
 >> endobj
-8061 0 obj <<
+8029 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [253.661 632.93 272.017 644.499]
 /Subtype /Link
 /A << /S /GoTo /D (page.288) >>
 >> endobj
-8062 0 obj <<
+8030 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [312.267 619.314 330.623 631.004]
 /Subtype /Link
 /A << /S /GoTo /D (page.439) >>
 >> endobj
-8063 0 obj <<
+8031 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [251.735 605.698 270.091 617.388]
 /Subtype /Link
 /A << /S /GoTo /D (page.438) >>
 >> endobj
-8064 0 obj <<
+8032 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.842 592.082 278.199 603.226]
 /Subtype /Link
 /A << /S /GoTo /D (page.438) >>
 >> endobj
-8065 0 obj <<
+8033 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [284.766 578.466 303.122 590.156]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-8066 0 obj <<
+8034 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.038 564.85 252.395 576.54]
 /Subtype /Link
 /A << /S /GoTo /D (page.463) >>
 >> endobj
-8067 0 obj <<
+8035 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [247.402 551.234 265.758 562.802]
 /Subtype /Link
 /A << /S /GoTo /D (page.402) >>
 >> endobj
-8068 0 obj <<
+8036 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.281 537.618 250.637 549.308]
 /Subtype /Link
 /A << /S /GoTo /D (page.463) >>
 >> endobj
-8069 0 obj <<
+8037 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [233.463 524.002 251.819 535.692]
 /Subtype /Link
 /A << /S /GoTo /D (page.460) >>
 >> endobj
-8070 0 obj <<
+8038 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [256.19 510.386 274.546 522.076]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-8071 0 obj <<
+8039 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.917 485.694 255.273 497.262]
 /Subtype /Link
 /A << /S /GoTo /D (page.504) >>
 >> endobj
-8072 0 obj <<
+8040 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.947 485.694 278.304 497.262]
 /Subtype /Link
 /A << /S /GoTo /D (page.505) >>
 >> endobj
-8073 0 obj <<
+8041 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [325.842 472.078 344.199 483.767]
 /Subtype /Link
 /A << /S /GoTo /D (page.507) >>
 >> endobj
-8074 0 obj <<
+8042 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [311.873 458.461 330.229 470.151]
 /Subtype /Link
 /A << /S /GoTo /D (page.506) >>
 >> endobj
-8075 0 obj <<
+8043 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [287.691 444.845 306.047 456.535]
 /Subtype /Link
 /A << /S /GoTo /D (page.507) >>
 >> endobj
-8076 0 obj <<
+8044 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [301.933 431.229 320.29 442.629]
 /Subtype /Link
 /A << /S /GoTo /D (page.507) >>
 >> endobj
-8077 0 obj <<
+8045 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [261.57 417.613 279.926 429.303]
 /Subtype /Link
 /A << /S /GoTo /D (page.506) >>
 >> endobj
-8078 0 obj <<
+8046 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [263.388 403.997 281.744 415.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.506) >>
 >> endobj
-8079 0 obj <<
+8047 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.766 390.381 292.122 402.071]
 /Subtype /Link
 /A << /S /GoTo /D (page.298) >>
 >> endobj
-8080 0 obj <<
+8048 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [240.97 376.765 259.326 388.334]
 /Subtype /Link
 /A << /S /GoTo /D (page.108) >>
 >> endobj
-8081 0 obj <<
+8049 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [263.606 376.765 281.962 388.334]
 /Subtype /Link
 /A << /S /GoTo /D (page.149) >>
 >> endobj
-8082 0 obj <<
+8050 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [286.242 376.765 304.598 388.334]
 /Subtype /Link
 /A << /S /GoTo /D (page.153) >>
 >> endobj
-8083 0 obj <<
+8051 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [308.878 376.765 327.234 388.334]
 /Subtype /Link
 /A << /S /GoTo /D (page.158) >>
 >> endobj
-8084 0 obj <<
+8052 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [331.514 376.765 349.87 388.334]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-8085 0 obj <<
+8053 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [354.15 376.765 372.506 388.334]
 /Subtype /Link
 /A << /S /GoTo /D (page.234) >>
 >> endobj
-8086 0 obj <<
+8054 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [376.786 376.765 395.142 388.334]
 /Subtype /Link
 /A << /S /GoTo /D (page.235) >>
 >> endobj
-8087 0 obj <<
+8055 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.422 376.765 417.778 388.334]
 /Subtype /Link
 /A << /S /GoTo /D (page.242) >>
 >> endobj
-8088 0 obj <<
+8056 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.058 376.765 440.414 388.334]
 /Subtype /Link
 /A << /S /GoTo /D (page.243) >>
 >> endobj
-8089 0 obj <<
+8057 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.694 376.765 463.05 388.334]
 /Subtype /Link
 /A << /S /GoTo /D (page.250) >>
 >> endobj
-8090 0 obj <<
+8058 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [467.33 376.765 485.686 388.334]
 /Subtype /Link
 /A << /S /GoTo /D (page.254) >>
 >> endobj
-8091 0 obj <<
+8059 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 376.765 508.322 388.334]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-8092 0 obj <<
+8060 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.25 363.216 223.607 374.36]
 /Subtype /Link
 /A << /S /GoTo /D (page.271) >>
 >> endobj
-8093 0 obj <<
+8061 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.281 363.216 246.637 374.36]
 /Subtype /Link
 /A << /S /GoTo /D (page.280) >>
 >> endobj
-8094 0 obj <<
+8062 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [251.311 363.216 269.667 374.36]
 /Subtype /Link
 /A << /S /GoTo /D (page.285) >>
 >> endobj
-8095 0 obj <<
+8063 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [274.341 363.216 292.698 374.36]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-8096 0 obj <<
+8064 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [296.16 363.216 314.516 374.36]
 /Subtype /Link
 /A << /S /GoTo /D (page.312) >>
 >> endobj
-8097 0 obj <<
+8065 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [319.19 363.216 337.546 374.36]
 /Subtype /Link
 /A << /S /GoTo /D (page.328) >>
 >> endobj
-8098 0 obj <<
+8066 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [342.22 363.216 360.576 374.36]
 /Subtype /Link
 /A << /S /GoTo /D (page.336) >>
 >> endobj
-8099 0 obj <<
+8067 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [365.251 363.216 383.607 374.36]
 /Subtype /Link
 /A << /S /GoTo /D (page.348) >>
 >> endobj
-8100 0 obj <<
+8068 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.281 363.216 406.637 374.36]
 /Subtype /Link
 /A << /S /GoTo /D (page.350) >>
 >> endobj
-8101 0 obj <<
+8069 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.311 363.216 429.667 374.36]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-8102 0 obj <<
+8070 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [434.342 363.216 452.698 374.36]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-8103 0 obj <<
+8071 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [457.372 363.216 475.728 374.36]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-8104 0 obj <<
+8072 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [480.402 363.216 498.758 374.36]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-8105 0 obj <<
+8073 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [270.327 349.6 288.683 361.29]
 /Subtype /Link
 /A << /S /GoTo /D (page.242) >>
 >> endobj
-8106 0 obj <<
+8074 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.721 335.984 292.077 347.674]
 /Subtype /Link
 /A << /S /GoTo /D (page.184) >>
 >> endobj
-8107 0 obj <<
+8075 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [296.752 335.984 315.108 347.674]
 /Subtype /Link
 /A << /S /GoTo /D (page.242) >>
 >> endobj
-8108 0 obj <<
+8076 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [319.782 335.984 338.138 347.674]
 /Subtype /Link
 /A << /S /GoTo /D (page.252) >>
 >> endobj
-8109 0 obj <<
+8077 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [342.812 335.984 361.168 347.674]
 /Subtype /Link
 /A << /S /GoTo /D (page.500) >>
 >> endobj
-8110 0 obj <<
+8078 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.721 322.368 292.077 334.058]
 /Subtype /Link
 /A << /S /GoTo /D (page.147) >>
 >> endobj
-8111 0 obj <<
+8079 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [296.752 322.368 315.108 334.058]
 /Subtype /Link
 /A << /S /GoTo /D (page.242) >>
 >> endobj
-8112 0 obj <<
+8080 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [270.055 308.752 288.411 320.441]
 /Subtype /Link
 /A << /S /GoTo /D (page.244) >>
 >> endobj
-8113 0 obj <<
+8081 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [325.812 295.136 344.168 306.825]
 /Subtype /Link
 /A << /S /GoTo /D (page.500) >>
 >> endobj
-8114 0 obj <<
+8082 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [264.055 281.52 282.411 292.664]
 /Subtype /Link
 /A << /S /GoTo /D (page.241) >>
 >> endobj
-8115 0 obj <<
+8083 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [373.048 254.288 391.404 265.977]
 /Subtype /Link
 /A << /S /GoTo /D (page.252) >>
 >> endobj
-8116 0 obj <<
+8084 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [267.024 240.672 285.38 252.361]
 /Subtype /Link
 /A << /S /GoTo /D (page.247) >>
 >> endobj
-8117 0 obj <<
+8085 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [266.145 227.056 284.502 238.745]
 /Subtype /Link
 /A << /S /GoTo /D (page.341) >>
 >> endobj
-8118 0 obj <<
+8086 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [261.024 213.44 279.38 224.584]
 /Subtype /Link
 /A << /S /GoTo /D (page.153) >>
 >> endobj
-8119 0 obj <<
+8087 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.842 199.824 278.199 210.968]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-8120 0 obj <<
+8088 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.63 186.208 272.986 197.897]
 /Subtype /Link
 /A << /S /GoTo /D (page.241) >>
 >> endobj
-8121 0 obj <<
+8089 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [269.176 172.592 287.532 184.281]
 /Subtype /Link
 /A << /S /GoTo /D (page.242) >>
 >> endobj
-8122 0 obj <<
+8090 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.523 158.976 250.879 170.665]
 /Subtype /Link
 /A << /S /GoTo /D (page.274) >>
 >> endobj
-8123 0 obj <<
+8091 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [284.493 131.744 302.849 143.433]
 /Subtype /Link
 /A << /S /GoTo /D (page.350) >>
 >> endobj
-8124 0 obj <<
+8092 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [287.887 118.128 306.243 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-8125 0 obj <<
+8093 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [470.77 632.997 489.126 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.241) >>
 >> endobj
-8126 0 obj <<
+8094 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [526.679 619.448 545.036 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.248) >>
 >> endobj
-8127 0 obj <<
+8095 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [452.013 605.899 470.369 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.275) >>
 >> endobj
-8128 0 obj <<
+8096 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.861 592.35 465.217 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.186) >>
 >> endobj
-8129 0 obj <<
+8097 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [469.891 592.35 488.248 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.277) >>
 >> endobj
-8130 0 obj <<
+8098 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [448.134 578.8 466.49 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-8131 0 obj <<
+8099 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [471.164 578.8 489.52 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.235) >>
 >> endobj
-8132 0 obj <<
+8100 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [494.194 578.8 512.551 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.273) >>
 >> endobj
-8133 0 obj <<
+8101 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [517.225 578.8 535.581 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.281) >>
 >> endobj
-8134 0 obj <<
+8102 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [540.255 578.8 558.611 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.341) >>
 >> endobj
-8135 0 obj <<
+8103 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [563.285 578.8 581.642 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.348) >>
 >> endobj
-8136 0 obj <<
+8104 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [586.316 578.8 604.672 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.457) >>
 >> endobj
-8137 0 obj <<
+8105 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [490.255 565.251 508.611 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.273) >>
 >> endobj
-8138 0 obj <<
+8106 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [458.77 551.702 477.126 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.188) >>
 >> endobj
-8139 0 obj <<
+8107 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [434.891 538.153 453.248 549.721]
 /Subtype /Link
 /A << /S /GoTo /D (page.154) >>
 >> endobj
-8140 0 obj <<
+8108 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [457.922 538.153 476.278 549.721]
 /Subtype /Link
 /A << /S /GoTo /D (page.247) >>
 >> endobj
-8141 0 obj <<
+8109 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [480.952 538.153 499.308 549.721]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-8142 0 obj <<
+8110 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [503.982 538.153 522.339 549.721]
 /Subtype /Link
 /A << /S /GoTo /D (page.400) >>
 >> endobj
-8143 0 obj <<
+8111 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [527.013 538.153 545.369 549.721]
 /Subtype /Link
 /A << /S /GoTo /D (page.500) >>
 >> endobj
-8144 0 obj <<
+8112 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [456.649 524.604 475.005 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.435) >>
 >> endobj
-8145 0 obj <<
+8113 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.104 497.505 449.46 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.375) >>
 >> endobj
-8146 0 obj <<
+8114 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [476.467 483.956 494.823 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.267) >>
 >> endobj
-8147 0 obj <<
+8115 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.225 456.858 451.581 468.426]
 /Subtype /Link
 /A << /S /GoTo /D (page.534) >>
 >> endobj
-8148 0 obj <<
+8116 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [456.255 456.858 474.611 468.426]
 /Subtype /Link
 /A << /S /GoTo /D (page.549) >>
 >> endobj
-8149 0 obj <<
+8117 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [462.164 443.308 480.52 454.877]
 /Subtype /Link
 /A << /S /GoTo /D (page.477) >>
 >> endobj
-8150 0 obj <<
+8118 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [488.164 429.759 506.52 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.481) >>
 >> endobj
-8151 0 obj <<
+8119 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [475.407 416.21 493.763 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.269) >>
 >> endobj
-8152 0 obj <<
+8120 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [500.604 402.661 518.96 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.155) >>
 >> endobj
-8153 0 obj <<
+8121 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [546.498 389.112 564.854 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.538) >>
 >> endobj
-8154 0 obj <<
+8122 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [450.861 362.013 463.763 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.64) >>
 >> endobj
-8155 0 obj <<
+8123 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [468.437 362.013 486.793 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.476) >>
 >> endobj
-8156 0 obj <<
+8124 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [473.285 348.464 491.642 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.334) >>
 >> endobj
-8157 0 obj <<
+8125 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [508.908 321.366 527.264 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.515) >>
 >> endobj
-8158 0 obj <<
+8126 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [479.271 307.816 497.627 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.515) >>
 >> endobj
-8159 0 obj <<
+8127 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [480.241 294.267 498.597 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.515) >>
 >> endobj
-8160 0 obj <<
+8128 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.619 280.718 460.975 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-8161 0 obj <<
+8129 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.71 267.169 444.611 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.57) >>
 >> endobj
-8162 0 obj <<
+8130 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.831 253.62 462.187 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.161) >>
 >> endobj
-8163 0 obj <<
+8131 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [488.467 240.07 506.823 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-8164 0 obj <<
+8132 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [463.922 226.521 482.278 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.350) >>
 >> endobj
-8165 0 obj <<
+8133 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [486.952 226.521 505.308 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.452) >>
 >> endobj
-8166 0 obj <<
+8134 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [481.164 212.972 499.52 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.350) >>
 >> endobj
-8167 0 obj <<
+8135 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [459.588 199.423 472.49 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-8168 0 obj <<
+8136 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [472.164 185.874 490.52 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.273) >>
 >> endobj
-8169 0 obj <<
+8137 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [460.285 172.324 473.187 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.70) >>
 >> endobj
-8170 0 obj <<
+8138 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.528 158.775 477.429 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-8171 0 obj <<
+8139 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [482.104 158.775 500.46 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.154) >>
 >> endobj
-8172 0 obj <<
+8140 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [505.134 158.775 523.49 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.205) >>
 >> endobj
-8173 0 obj <<
+8141 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [528.164 158.775 546.52 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.350) >>
 >> endobj
-8174 0 obj <<
+8142 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [465.77 145.226 484.126 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-8175 0 obj <<
+8143 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [473.982 131.677 486.884 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-8176 0 obj <<
+8144 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [458.982 118.128 477.339 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.149) >>
 >> endobj
-8181 0 obj <<
-/D [8179 0 R /XYZ 151.701 685.529 null]
+8149 0 obj <<
+/D [8147 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8178 0 obj <<
+8146 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8285 0 obj <<
+8253 0 obj <<
 /Length 1445      
 /Filter /FlateDecode
 >>
@@ -54579,722 +53752,722 @@
 )Ì
 endstream
 endobj
-8284 0 obj <<
+8252 0 obj <<
 /Type /Page
-/Contents 8285 0 R
-/Resources 8283 0 R
+/Contents 8253 0 R
+/Resources 8251 0 R
 /MediaBox [0 0 612 792]
-/Parent 7731 0 R
-/Annots [ 8177 0 R 8182 0 R 8183 0 R 8184 0 R 8185 0 R 8186 0 R 8187 0 R 8188 0 R 8189 0 R 8190 0 R 8191 0 R 8192 0 R 8193 0 R 8194 0 R 8195 0 R 8196 0 R 8197 0 R 8198 0 R 8199 0 R 8200 0 R 8201 0 R 8202 0 R 8203 0 R 8204 0 R 8205 0 R 8206 0 R 8207 0 R 8208 0 R 8209 0 R 8210 0 R 8211 0 R 8212 0 R 8213 0 R 8214 0 R 8215 0 R 8216 0 R 8217 0 R 8218 0 R 8219 0 R 8220 0 R 8221 0 R 8222 0 R 8223 0 R 8224 0 R 8225 0 R 8226 0 R 8227 0 R 8228 0 R 8229 0 R 8230 0 R 8231 0 R 8232 0 R 8233 0 R 8234 0 R 8235 0 R 8236 0 R 8237 0 R 8238 0 R 8239 0 R 8240 0 R 8241 0 R 8242 0 R 8243 0 R 8244 0 R 8245 0 R 8246 0 R 8247 0 R 8248 0 R 8249 0 R 8250 0 R 8251 0 R 8252 0 R 8253 0 R 8254 0 R 8255 0 R 8256 0 R 8257 0 R 8258 0 R 8259 0 R 8260 0 R 8261 0 R 8262 0 R 8263 0 R 8264 0 R 8265 0 R 8266 0 R 8267 0 R 8268 0 R 8269 0 R 8270 0 R 8271 0 R 8272 0 R 8273 0 R 8274 0 R 8275 0 R 8276 0 R 8277 0 R 8278 0 R 8279 0 R 8280 0 R ]
+/Parent 7699 0 R
+/Annots [ 8145 0 R 8150 0 R 8151 0 R 8152 0 R 8153 0 R 8154 0 R 8155 0 R 8156 0 R 8157 0 R 8158 0 R 8159 0 R 8160 0 R 8161 0 R 8162 0 R 8163 0 R 8164 0 R 8165 0 R 8166 0 R 8167 0 R 8168 0 R 8169 0 R 8170 0 R 8171 0 R 8172 0 R 8173 0 R 8174 0 R 8175 0 R 8176 0 R 8177 0 R 8178 0 R 8179 0 R 8180 0 R 8181 0 R 8182 0 R 8183 0 R 8184 0 R 8185 0 R 8186 0 R 8187 0 R 8188 0 R 8189 0 R 8190 0 R 8191 0 R 8192 0 R 8193 0 R 8194 0 R 8195 0 R 8196 0 R 8197 0 R 8198 0 R 8199 0 R 8200 0 R 8201 0 R 8202 0 R 8203 0 R 8204 0 R 8205 0 R 8206 0 R 8207 0 R 8208 0 R 8209 0 R 8210 0 R 8211 0 R 8212 0 R 8213 0 R 8214 0 R 8215 0 R 8216 0 R 8217 0 R 8218 0 R 8219 0 R 8220 0 R 8221 0 R 8222 0 R 8223 0 R 8224 0 R 8225 0 R 8226 0 R 8227 0 R 8228 0 R 8229 0 R 8230 0 R 8231 0 R 8232 0 R 8233 0 R 8234 0 R 8235 0 R 8236 0 R 8237 0 R 8238 0 R 8239 0 R 8240 0 R 8241 0 R 8242 0 R 8243 0 R 8244 0 R 8245 0 R 8246 0 R 8247 0 R 8248 0 R ]
 >> endobj
-8177 0 obj <<
+8145 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.108 646.546 236.464 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.238) >>
 >> endobj
-8182 0 obj <<
+8150 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.138 632.931 222.494 644.621]
 /Subtype /Link
 /A << /S /GoTo /D (page.403) >>
 >> endobj
-8183 0 obj <<
+8151 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [203.229 619.317 210.676 631.006]
 /Subtype /Link
 /A << /S /GoTo /D (page.8) >>
 >> endobj
-8184 0 obj <<
+8152 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [239.653 605.702 258.009 617.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-8185 0 obj <<
+8153 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [209.077 592.087 227.434 603.777]
 /Subtype /Link
 /A << /S /GoTo /D (page.352) >>
 >> endobj
-8186 0 obj <<
+8154 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.896 578.472 212.797 590.162]
 /Subtype /Link
 /A << /S /GoTo /D (page.14) >>
 >> endobj
-8187 0 obj <<
+8155 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.471 578.472 230.373 590.162]
 /Subtype /Link
 /A << /S /GoTo /D (page.23) >>
 >> endobj
-8188 0 obj <<
+8156 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [235.047 578.472 247.949 590.162]
 /Subtype /Link
 /A << /S /GoTo /D (page.38) >>
 >> endobj
-8189 0 obj <<
+8157 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [252.623 578.472 265.525 590.162]
 /Subtype /Link
 /A << /S /GoTo /D (page.72) >>
 >> endobj
-8190 0 obj <<
+8158 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [270.199 578.472 288.555 590.162]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-8191 0 obj <<
+8159 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [181.714 564.857 200.07 576.426]
 /Subtype /Link
 /A << /S /GoTo /D (page.496) >>
 >> endobj
-8192 0 obj <<
+8160 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.199 540.187 218.555 551.876]
 /Subtype /Link
 /A << /S /GoTo /D (page.326) >>
 >> endobj
-8193 0 obj <<
+8161 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [240.502 526.572 258.858 538.261]
 /Subtype /Link
 /A << /S /GoTo /D (page.147) >>
 >> endobj
-8194 0 obj <<
+8162 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.805 512.957 263.161 524.646]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-8195 0 obj <<
+8163 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [278.32 499.342 296.676 511.032]
 /Subtype /Link
 /A << /S /GoTo /D (page.109) >>
 >> endobj
-8196 0 obj <<
+8164 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [235.956 485.727 254.312 497.296]
 /Subtype /Link
 /A << /S /GoTo /D (page.326) >>
 >> endobj
-8197 0 obj <<
+8165 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [214.502 472.113 232.858 483.802]
 /Subtype /Link
 /A << /S /GoTo /D (page.488) >>
 >> endobj
-8198 0 obj <<
+8166 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.805 458.498 237.161 470.187]
 /Subtype /Link
 /A << /S /GoTo /D (page.488) >>
 >> endobj
-8199 0 obj <<
+8167 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [203.532 444.883 221.888 456.572]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-8200 0 obj <<
+8168 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.411 431.268 239.767 442.412]
 /Subtype /Link
 /A << /S /GoTo /D (page.272) >>
 >> endobj
-8201 0 obj <<
+8169 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.441 431.268 262.797 442.412]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-8202 0 obj <<
+8170 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.336 417.653 226.692 428.797]
 /Subtype /Link
 /A << /S /GoTo /D (page.434) >>
 >> endobj
-8203 0 obj <<
+8171 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [202.639 404.039 220.995 415.607]
 /Subtype /Link
 /A << /S /GoTo /D (page.434) >>
 >> endobj
-8204 0 obj <<
+8172 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.32 390.424 264.676 402.113]
 /Subtype /Link
 /A << /S /GoTo /D (page.154) >>
 >> endobj
-8205 0 obj <<
+8173 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [269.35 390.424 287.706 402.113]
 /Subtype /Link
 /A << /S /GoTo /D (page.204) >>
 >> endobj
-8206 0 obj <<
+8174 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.714 376.809 227.07 388.498]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-8207 0 obj <<
+8175 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.593 363.194 248.949 374.884]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-8208 0 obj <<
+8176 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [202.32 349.579 220.676 360.979]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-8209 0 obj <<
+8177 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [225.35 349.579 243.706 360.979]
 /Subtype /Link
 /A << /S /GoTo /D (page.271) >>
 >> endobj
-8210 0 obj <<
+8178 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [248.38 349.579 266.737 360.979]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-8211 0 obj <<
+8179 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.124 335.964 246.48 347.364]
 /Subtype /Link
 /A << /S /GoTo /D (page.273) >>
 >> endobj
-8212 0 obj <<
+8180 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.883 322.35 234.24 333.918]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-8213 0 obj <<
+8181 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.32 308.735 211.676 319.879]
 /Subtype /Link
 /A << /S /GoTo /D (page.235) >>
 >> endobj
-8214 0 obj <<
+8182 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.532 295.12 218.888 306.81]
 /Subtype /Link
 /A << /S /GoTo /D (page.491) >>
 >> endobj
-8215 0 obj <<
+8183 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.774 281.505 238.131 293.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.400) >>
 >> endobj
-8216 0 obj <<
+8184 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [264.593 267.89 277.494 279.29]
 /Subtype /Link
 /A << /S /GoTo /D (page.59) >>
 >> endobj
-8217 0 obj <<
+8185 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [189.623 254.276 207.979 265.42]
 /Subtype /Link
 /A << /S /GoTo /D (page.349) >>
 >> endobj
-8218 0 obj <<
+8186 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.653 254.276 231.009 265.42]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-8219 0 obj <<
+8187 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.683 240.661 214.04 252.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.350) >>
 >> endobj
-8220 0 obj <<
+8188 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.259 227.046 248.615 238.736]
 /Subtype /Link
 /A << /S /GoTo /D (page.253) >>
 >> endobj
-8221 0 obj <<
+8189 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.29 213.431 238.646 224.831]
 /Subtype /Link
 /A << /S /GoTo /D (page.454) >>
 >> endobj
-8222 0 obj <<
+8190 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.017 199.816 259.373 211.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.516) >>
 >> endobj
-8223 0 obj <<
+8191 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [235.593 186.202 253.949 197.891]
 /Subtype /Link
 /A << /S /GoTo /D (page.516) >>
 >> endobj
-8224 0 obj <<
+8192 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.865 172.587 246.221 184.276]
 /Subtype /Link
 /A << /S /GoTo /D (page.458) >>
 >> endobj
-8225 0 obj <<
+8193 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.956 145.357 249.858 157.047]
 /Subtype /Link
 /A << /S /GoTo /D (page.85) >>
 >> endobj
-8226 0 obj <<
+8194 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.532 145.357 272.888 157.047]
 /Subtype /Link
 /A << /S /GoTo /D (page.446) >>
 >> endobj
-8227 0 obj <<
+8195 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.275 118.128 242.632 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.253) >>
 >> endobj
-8228 0 obj <<
+8196 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.264 646.546 412.62 657.946]
 /Subtype /Link
 /A << /S /GoTo /D (page.323) >>
 >> endobj
-8229 0 obj <<
+8197 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.294 646.546 435.65 657.946]
 /Subtype /Link
 /A << /S /GoTo /D (page.350) >>
 >> endobj
-8230 0 obj <<
+8198 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.961 632.931 416.862 644.331]
 /Subtype /Link
 /A << /S /GoTo /D (page.20) >>
 >> endobj
-8231 0 obj <<
+8199 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [421.537 632.931 434.438 644.331]
 /Subtype /Link
 /A << /S /GoTo /D (page.33) >>
 >> endobj
-8232 0 obj <<
+8200 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.112 632.931 457.468 644.331]
 /Subtype /Link
 /A << /S /GoTo /D (page.149) >>
 >> endobj
-8233 0 obj <<
+8201 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [462.143 632.931 480.499 644.331]
 /Subtype /Link
 /A << /S /GoTo /D (page.347) >>
 >> endobj
-8234 0 obj <<
+8202 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [485.173 632.931 503.529 644.331]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-8235 0 obj <<
+8203 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [508.203 632.931 526.559 644.331]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-8236 0 obj <<
+8204 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.825 619.317 443.182 631.006]
 /Subtype /Link
 /A << /S /GoTo /D (page.348) >>
 >> endobj
-8237 0 obj <<
+8205 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [434.93 605.702 453.287 617.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.376) >>
 >> endobj
-8238 0 obj <<
+8206 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [408.476 592.087 421.378 603.487]
 /Subtype /Link
 /A << /S /GoTo /D (page.14) >>
 >> endobj
-8239 0 obj <<
+8207 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.052 592.087 438.953 603.487]
 /Subtype /Link
 /A << /S /GoTo /D (page.39) >>
 >> endobj
-8240 0 obj <<
+8208 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.627 592.087 456.529 603.487]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-8241 0 obj <<
+8209 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [461.203 592.087 479.559 603.487]
 /Subtype /Link
 /A << /S /GoTo /D (page.114) >>
 >> endobj
-8242 0 obj <<
+8210 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [484.234 592.087 502.59 603.487]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-8243 0 obj <<
+8211 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.779 578.472 425.681 589.872]
 /Subtype /Link
 /A << /S /GoTo /D (page.23) >>
 >> endobj
-8244 0 obj <<
+8212 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [427.446 564.857 445.802 576.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-8245 0 obj <<
+8213 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [379.688 551.243 398.044 562.811]
 /Subtype /Link
 /A << /S /GoTo /D (page.461) >>
 >> endobj
-8246 0 obj <<
+8214 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.718 551.243 421.074 562.811]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-8247 0 obj <<
+8215 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.173 537.628 444.529 549.317]
 /Subtype /Link
 /A << /S /GoTo /D (page.288) >>
 >> endobj
-8248 0 obj <<
+8216 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [449.203 537.628 467.559 549.317]
 /Subtype /Link
 /A << /S /GoTo /D (page.438) >>
 >> endobj
-8249 0 obj <<
+8217 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.143 524.013 441.499 535.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.300) >>
 >> endobj
-8250 0 obj <<
+8218 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.021 510.398 431.378 521.967]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-8251 0 obj <<
+8219 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.052 496.783 434.408 508.473]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-8252 0 obj <<
+8220 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.052 483.169 434.408 494.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.453) >>
 >> endobj
-8253 0 obj <<
+8221 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.749 469.554 404.105 481.122]
 /Subtype /Link
 /A << /S /GoTo /D (page.214) >>
 >> endobj
-8254 0 obj <<
+8222 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [408.779 469.554 427.135 481.122]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-8255 0 obj <<
+8223 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.809 469.554 450.165 481.122]
 /Subtype /Link
 /A << /S /GoTo /D (page.455) >>
 >> endobj
-8256 0 obj <<
+8224 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.324 455.939 456.226 467.629]
 /Subtype /Link
 /A << /S /GoTo /D (page.31) >>
 >> endobj
-8257 0 obj <<
+8225 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [396.355 442.324 414.711 454.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-8258 0 obj <<
+8226 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.718 428.709 448.075 440.399]
 /Subtype /Link
 /A << /S /GoTo /D (page.435) >>
 >> endobj
-8259 0 obj <<
+8227 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.021 415.095 415.378 426.784]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-8260 0 obj <<
+8228 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.068 387.865 433.424 399.554]
 /Subtype /Link
 /A << /S /GoTo /D (page.516) >>
 >> endobj
-8261 0 obj <<
+8229 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.355 374.25 434.711 385.94]
 /Subtype /Link
 /A << /S /GoTo /D (page.213) >>
 >> endobj
-8262 0 obj <<
+8230 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.159 360.635 417.515 372.204]
 /Subtype /Link
 /A << /S /GoTo /D (page.210) >>
 >> endobj
-8263 0 obj <<
+8231 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.734 347.021 435.091 358.71]
 /Subtype /Link
 /A << /S /GoTo /D (page.145) >>
 >> endobj
-8264 0 obj <<
+8232 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [480.112 333.406 498.468 345.095]
 /Subtype /Link
 /A << /S /GoTo /D (page.461) >>
 >> endobj
-8265 0 obj <<
+8233 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.658 319.791 422.014 331.48]
 /Subtype /Link
 /A << /S /GoTo /D (page.446) >>
 >> endobj
-8266 0 obj <<
+8234 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [395.446 306.176 413.802 317.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-8267 0 obj <<
+8235 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.233 292.561 436.59 304.251]
 /Subtype /Link
 /A << /S /GoTo /D (page.477) >>
 >> endobj
-8268 0 obj <<
+8236 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.401 265.332 424.757 276.476]
 /Subtype /Link
 /A << /S /GoTo /D (page.516) >>
 >> endobj
-8269 0 obj <<
+8237 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.25 251.717 449.606 263.406]
 /Subtype /Link
 /A << /S /GoTo /D (page.515) >>
 >> endobj
-8270 0 obj <<
+8238 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [449.809 238.102 468.165 249.792]
 /Subtype /Link
 /A << /S /GoTo /D (page.241) >>
 >> endobj
-8271 0 obj <<
+8239 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [488.9 224.487 507.256 236.177]
 /Subtype /Link
 /A << /S /GoTo /D (page.144) >>
 >> endobj
-8272 0 obj <<
+8240 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [477.052 210.873 495.408 222.562]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-8273 0 obj <<
+8241 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.991 197.258 460.347 208.947]
 /Subtype /Link
 /A << /S /GoTo /D (page.488) >>
 >> endobj
-8274 0 obj <<
+8242 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.506 183.643 448.862 195.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.155) >>
 >> endobj
-8275 0 obj <<
+8243 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [450.84 170.028 463.741 181.718]
 /Subtype /Link
 /A << /S /GoTo /D (page.15) >>
 >> endobj
-8276 0 obj <<
+8244 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.355 156.413 422.711 168.103]
 /Subtype /Link
 /A << /S /GoTo /D (page.243) >>
 >> endobj
-8277 0 obj <<
+8245 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.718 131.742 446.62 143.432]
 /Subtype /Link
 /A << /S /GoTo /D (page.71) >>
 >> endobj
-8278 0 obj <<
+8246 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [451.294 131.742 469.65 143.432]
 /Subtype /Link
 /A << /S /GoTo /D (page.313) >>
 >> endobj
-8279 0 obj <<
+8247 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [474.324 131.742 492.681 143.432]
 /Subtype /Link
 /A << /S /GoTo /D (page.532) >>
 >> endobj
-8280 0 obj <<
+8248 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [421.583 118.128 439.939 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-8286 0 obj <<
-/D [8284 0 R /XYZ 100.892 685.529 null]
+8254 0 obj <<
+/D [8252 0 R /XYZ 100.892 685.529 null]
 >> endobj
-8283 0 obj <<
+8251 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8381 0 obj <<
+8349 0 obj <<
 /Length 1314      
 /Filter /FlateDecode
 >>
@@ -55311,680 +54484,680 @@
 ñ#Hœ{ÁÝjö ¡¿
 endstream
 endobj
-8380 0 obj <<
+8348 0 obj <<
 /Type /Page
-/Contents 8381 0 R
-/Resources 8379 0 R
+/Contents 8349 0 R
+/Resources 8347 0 R
 /MediaBox [0 0 612 792]
-/Parent 8383 0 R
-/Annots [ 8281 0 R 8282 0 R 8287 0 R 8288 0 R 8289 0 R 8290 0 R 8291 0 R 8292 0 R 8293 0 R 8294 0 R 8295 0 R 8296 0 R 8297 0 R 8298 0 R 8299 0 R 8300 0 R 8301 0 R 8302 0 R 8303 0 R 8304 0 R 8305 0 R 8306 0 R 8307 0 R 8308 0 R 8309 0 R 8310 0 R 8311 0 R 8312 0 R 8313 0 R 8314 0 R 8315 0 R 8316 0 R 8317 0 R 8318 0 R 8319 0 R 8320 0 R 8321 0 R 8322 0 R 8323 0 R 8324 0 R 8325 0 R 8326 0 R 8327 0 R 8328 0 R 8329 0 R 8330 0 R 8331 0 R 8332 0 R 8333 0 R 8334 0 R 8335 0 R 8336 0 R 8337 0 R 8338 0 R 8339 0 R 8340 0 R 8341 0 R 8342 0 R 8343 0 R 8344 0 R 8345 0 R 8346 0 R 8347 0 R 8348 0 R 8349 0 R 8350 0 R 8351 0 R 8352 0 R 8353 0 R 8354 0 R 8355 0 R 8356 0 R 8357 0 R 8358 0 R 8359 0 R 8360 0 R 8361 0 R 8362 0 R 8363 0 R 8364 0 R 8365 0 R 8366 0 R 8367 0 R 8368 0 R 8369 0 R 8370 0 R 8371 0 R 8372 0 R 8373 0 R 8374 0 R 8375 0 R 8376 0 R 8377 0 R 8378 0 R ]
+/Parent 8351 0 R
+/Annots [ 8249 0 R 8250 0 R 8255 0 R 8256 0 R 8257 0 R 8258 0 R 8259 0 R 8260 0 R 8261 0 R 8262 0 R 8263 0 R 8264 0 R 8265 0 R 8266 0 R 8267 0 R 8268 0 R 8269 0 R 8270 0 R 8271 0 R 8272 0 R 8273 0 R 8274 0 R 8275 0 R 8276 0 R 8277 0 R 8278 0 R 8279 0 R 8280 0 R 8281 0 R 8282 0 R 8283 0 R 8284 0 R 8285 0 R 8286 0 R 8287 0 R 8288 0 R 8289 0 R 8290 0 R 8291 0 R 8292 0 R 8293 0 R 8294 0 R 8295 0 R 8296 0 R 8297 0 R 8298 0 R 8299 0 R 8300 0 R 8301 0 R 8302 0 R 8303 0 R 8304 0 R 8305 0 R 8306 0 R 8307 0 R 8308 0 R 8309 0 R 8310 0 R 8311 0 R 8312 0 R 8313 0 R 8314 0 R 8315 0 R 8316 0 R 8317 0 R 8318 0 R 8319 0 R 8320 0 R 8321 0 R 8322 0 R 8323 0 R 8324 0 R 8325 0 R 8326 0 R 8327 0 R 8328 0 R 8329 0 R 8330 0 R 8331 0 R 8332 0 R 8333 0 R 8334 0 R 8335 0 R 8336 0 R 8337 0 R 8338 0 R 8339 0 R 8340 0 R 8341 0 R 8342 0 R 8343 0 R 8344 0 R 8345 0 R 8346 0 R ]
 >> endobj
-8281 0 obj <<
+8249 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [301.766 646.546 314.667 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-8282 0 obj <<
+8250 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [319.341 646.546 337.698 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.551) >>
 >> endobj
-8287 0 obj <<
+8255 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [306.614 632.997 319.516 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.39) >>
 >> endobj
-8288 0 obj <<
+8256 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [243.432 619.448 256.334 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.64) >>
 >> endobj
-8289 0 obj <<
+8257 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [261.008 619.448 273.91 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.76) >>
 >> endobj
-8290 0 obj <<
+8258 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [278.584 619.448 296.94 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.111) >>
 >> endobj
-8291 0 obj <<
+8259 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [235.25 605.899 248.152 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.57) >>
 >> endobj
-8292 0 obj <<
+8260 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.008 592.35 259.364 603.749]
 /Subtype /Link
 /A << /S /GoTo /D (page.453) >>
 >> endobj
-8293 0 obj <<
+8261 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.684 551.702 278.04 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.293) >>
 >> endobj
-8294 0 obj <<
+8262 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.684 538.153 278.04 549.552]
 /Subtype /Link
 /A << /S /GoTo /D (page.289) >>
 >> endobj
-8295 0 obj <<
+8263 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [282.714 538.153 301.07 549.552]
 /Subtype /Link
 /A << /S /GoTo /D (page.313) >>
 >> endobj
-8296 0 obj <<
+8264 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [305.744 538.153 324.101 549.552]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-8297 0 obj <<
+8265 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [270.411 524.604 288.767 535.748]
 /Subtype /Link
 /A << /S /GoTo /D (page.293) >>
 >> endobj
-8298 0 obj <<
+8266 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [281.903 511.054 300.259 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.174) >>
 >> endobj
-8299 0 obj <<
+8267 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [304.933 511.054 323.29 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.327) >>
 >> endobj
-8300 0 obj <<
+8268 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.145 497.505 277.502 508.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.371) >>
 >> endobj
-8301 0 obj <<
+8269 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.381 470.407 272.282 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.67) >>
 >> endobj
-8302 0 obj <<
+8270 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [256.411 456.858 269.313 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.67) >>
 >> endobj
-8303 0 obj <<
+8271 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.987 456.858 292.343 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.193) >>
 >> endobj
-8304 0 obj <<
+8272 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.926 443.308 286.828 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.67) >>
 >> endobj
-8305 0 obj <<
+8273 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.684 416.21 278.04 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.328) >>
 >> endobj
-8306 0 obj <<
+8274 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.684 402.661 278.04 414.06]
 /Subtype /Link
 /A << /S /GoTo /D (page.120) >>
 >> endobj
-8307 0 obj <<
+8275 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [282.714 402.661 301.07 414.06]
 /Subtype /Link
 /A << /S /GoTo /D (page.278) >>
 >> endobj
-8308 0 obj <<
+8276 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [305.744 402.661 324.101 414.06]
 /Subtype /Link
 /A << /S /GoTo /D (page.281) >>
 >> endobj
-8309 0 obj <<
+8277 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [328.775 402.661 347.131 414.06]
 /Subtype /Link
 /A << /S /GoTo /D (page.284) >>
 >> endobj
-8310 0 obj <<
+8278 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [351.805 402.661 370.161 414.06]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-8311 0 obj <<
+8279 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [374.835 402.661 393.192 414.06]
 /Subtype /Link
 /A << /S /GoTo /D (page.313) >>
 >> endobj
-8312 0 obj <<
+8280 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.866 402.661 416.222 414.06]
 /Subtype /Link
 /A << /S /GoTo /D (page.369) >>
 >> endobj
-8313 0 obj <<
+8281 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [279.714 389.112 298.07 400.511]
 /Subtype /Link
 /A << /S /GoTo /D (page.323) >>
 >> endobj
-8314 0 obj <<
+8282 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [302.744 389.112 321.101 400.511]
 /Subtype /Link
 /A << /S /GoTo /D (page.369) >>
 >> endobj
-8315 0 obj <<
+8283 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [280.752 375.562 299.108 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.327) >>
 >> endobj
-8316 0 obj <<
+8284 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.402 362.013 273.758 373.581]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-8317 0 obj <<
+8285 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [278.432 362.013 296.789 373.581]
 /Subtype /Link
 /A << /S /GoTo /D (page.313) >>
 >> endobj
-8318 0 obj <<
+8286 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [301.463 362.013 319.819 373.581]
 /Subtype /Link
 /A << /S /GoTo /D (page.476) >>
 >> endobj
-8319 0 obj <<
+8287 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [324.493 362.013 342.849 373.581]
 /Subtype /Link
 /A << /S /GoTo /D (page.477) >>
 >> endobj
-8320 0 obj <<
+8288 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [347.523 362.013 365.879 373.581]
 /Subtype /Link
 /A << /S /GoTo /D (page.550) >>
 >> endobj
-8321 0 obj <<
+8289 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [286.691 348.464 305.047 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.253) >>
 >> endobj
-8322 0 obj <<
+8290 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [270.957 321.366 289.313 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.145) >>
 >> endobj
-8323 0 obj <<
+8291 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [284.873 307.816 303.229 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.550) >>
 >> endobj
-8324 0 obj <<
+8292 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [300.024 280.718 318.38 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.329) >>
 >> endobj
-8325 0 obj <<
+8293 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [300.523 267.169 318.879 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.478) >>
 >> endobj
-8326 0 obj <<
+8294 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [284.493 253.62 302.849 265.188]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-8327 0 obj <<
+8295 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [262.267 240.07 280.623 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.242) >>
 >> endobj
-8328 0 obj <<
+8296 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [275.008 226.521 293.364 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.327) >>
 >> endobj
-8329 0 obj <<
+8297 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [298.038 226.521 316.395 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.329) >>
 >> endobj
-8330 0 obj <<
+8298 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [321.069 226.521 339.425 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.476) >>
 >> endobj
-8331 0 obj <<
+8299 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [275.932 212.972 294.289 224.54]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-8332 0 obj <<
+8300 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [298.963 212.972 317.319 224.54]
 /Subtype /Link
 /A << /S /GoTo /D (page.208) >>
 >> endobj
-8333 0 obj <<
+8301 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.644 199.423 273.001 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.493) >>
 >> endobj
-8334 0 obj <<
+8302 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [252.523 185.874 270.879 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-8335 0 obj <<
+8303 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [275.554 185.874 293.91 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.402) >>
 >> endobj
-8336 0 obj <<
+8304 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [251.675 172.324 259.122 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.7) >>
 >> endobj
-8337 0 obj <<
+8305 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.069 158.775 272.425 170.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-8338 0 obj <<
+8306 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [277.099 158.775 295.455 170.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.400) >>
 >> endobj
-8339 0 obj <<
+8307 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [251.038 145.226 263.94 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.29) >>
 >> endobj
-8340 0 obj <<
+8308 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [301.115 118.128 319.471 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-8341 0 obj <<
+8309 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [468.332 646.546 486.688 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.532) >>
 >> endobj
-8342 0 obj <<
+8310 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [479.514 632.997 497.87 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.241) >>
 >> endobj
-8343 0 obj <<
+8311 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [502.544 632.997 520.9 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.251) >>
 >> endobj
-8344 0 obj <<
+8312 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [525.574 632.997 543.931 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.253) >>
 >> endobj
-8345 0 obj <<
+8313 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [474.756 619.448 493.112 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.531) >>
 >> endobj
-8346 0 obj <<
+8314 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [468.695 605.899 487.052 617.043]
 /Subtype /Link
 /A << /S /GoTo /D (page.530) >>
 >> endobj
-8347 0 obj <<
+8315 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [471.15 592.35 489.506 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.478) >>
 >> endobj
-8348 0 obj <<
+8316 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [448.605 578.8 466.961 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.478) >>
 >> endobj
-8349 0 obj <<
+8317 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [454.059 565.251 472.415 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.144) >>
 >> endobj
-8350 0 obj <<
+8318 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [488.756 551.702 507.112 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.349) >>
 >> endobj
-8351 0 obj <<
+8319 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [488.908 538.153 507.264 549.297]
 /Subtype /Link
 /A << /S /GoTo /D (page.429) >>
 >> endobj
-8352 0 obj <<
+8320 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [495.938 524.604 514.294 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.148) >>
 >> endobj
-8353 0 obj <<
+8321 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [468.332 511.054 486.688 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.146) >>
 >> endobj
-8354 0 obj <<
+8322 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [487.453 497.505 505.809 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.480) >>
 >> endobj
-8355 0 obj <<
+8323 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [459.544 483.956 477.9 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-8356 0 obj <<
+8324 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [457.786 470.407 476.143 481.551]
 /Subtype /Link
 /A << /S /GoTo /D (page.429) >>
 >> endobj
-8357 0 obj <<
+8325 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [467.15 456.858 485.506 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-8358 0 obj <<
+8326 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.817 443.308 483.173 454.708]
 /Subtype /Link
 /A << /S /GoTo /D (page.470) >>
 >> endobj
-8359 0 obj <<
+8327 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [457.483 429.759 475.84 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.530) >>
 >> endobj
-8360 0 obj <<
+8328 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [465.574 416.21 483.93 427.609]
 /Subtype /Link
 /A << /S /GoTo /D (page.146) >>
 >> endobj
-8361 0 obj <<
+8329 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [469.877 402.661 488.233 414.06]
 /Subtype /Link
 /A << /S /GoTo /D (page.478) >>
 >> endobj
-8362 0 obj <<
+8330 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [452.271 389.112 470.627 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.532) >>
 >> endobj
-8363 0 obj <<
+8331 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [492.901 362.013 511.257 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.436) >>
 >> endobj
-8364 0 obj <<
+8332 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [474.089 348.464 492.446 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-8365 0 obj <<
+8333 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [497.12 348.464 515.476 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.281) >>
 >> endobj
-8366 0 obj <<
+8334 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [519.498 321.366 537.854 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-8367 0 obj <<
+8335 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [477.089 280.718 495.446 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.143) >>
 >> endobj
-8368 0 obj <<
+8336 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [522.376 267.169 540.732 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.155) >>
 >> endobj
-8369 0 obj <<
+8337 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [470.12 240.07 488.476 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.146) >>
 >> endobj
-8370 0 obj <<
+8338 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [485.982 226.521 504.339 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.475) >>
 >> endobj
-8371 0 obj <<
+8339 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [494.528 212.972 512.884 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-8372 0 obj <<
+8340 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [505.77 199.423 524.126 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.108) >>
 >> endobj
-8373 0 obj <<
+8341 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [519.346 185.874 526.793 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.8) >>
 >> endobj
-8374 0 obj <<
+8342 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [531.467 185.874 549.823 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-8375 0 obj <<
+8343 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [488.77 172.324 507.126 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.481) >>
 >> endobj
-8376 0 obj <<
+8344 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [493.073 158.775 505.975 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.59) >>
 >> endobj
-8377 0 obj <<
+8345 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [475.164 145.226 493.52 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.149) >>
 >> endobj
-8378 0 obj <<
+8346 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [454.362 118.128 472.718 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.325) >>
 >> endobj
-8382 0 obj <<
-/D [8380 0 R /XYZ 151.701 685.529 null]
+8350 0 obj <<
+/D [8348 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8379 0 obj <<
+8347 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8529 0 obj <<
+8497 0 obj <<
 /Length 1711      
 /Filter /FlateDecode
 >>
@@ -55998,1023 +55171,1023 @@
 \x‡Ô¶-:y{þ‚ncEALºÿhÈÚOÍ.¸/ÁÈHÓ=/¯^·%UX¸ð½æéìڶŰÝ× á‡í’À+A#F®æÙ!0Å·Ó*³£)–/šV™²c-Árlƒ×oÜ\¼	ÆŸ 3‘6@ŽÈj¿©u£º˜Œ¾ThÌVüçH)Òj·«±Õýž†åî—R›Û°>{[g±µBƲ%Ú .ôËä6QÉ[,j±F¤¿©™1ƒ°}]W6‡66µ^jÅD]§vÊf\ÆWû”ÚΞ¾K`P‰ç&&XÀè2…¬k$õX:ÏKg¯Z…ñeTÃèFï‹_¯0àØÍ€ïLVÅ!<Å þ…šô* Ž®×ñ(›;ÿ¤@€M)lÍÐKÚý¿6uü—þï’
 endstream
 endobj
-8528 0 obj <<
+8496 0 obj <<
 /Type /Page
-/Contents 8529 0 R
-/Resources 8527 0 R
+/Contents 8497 0 R
+/Resources 8495 0 R
 /MediaBox [0 0 612 792]
-/Parent 8383 0 R
-/Annots [ 8384 0 R 8385 0 R 8386 0 R 8387 0 R 8388 0 R 8389 0 R 8390 0 R 8391 0 R 8392 0 R 8393 0 R 8394 0 R 8395 0 R 8396 0 R 8397 0 R 8398 0 R 8399 0 R 8400 0 R 8401 0 R 8402 0 R 8403 0 R 8404 0 R 8405 0 R 8406 0 R 8407 0 R 8408 0 R 8409 0 R 8410 0 R 8411 0 R 8412 0 R 8413 0 R 8414 0 R 8415 0 R 8416 0 R 8417 0 R 8418 0 R 8419 0 R 8420 0 R 8421 0 R 8422 0 R 8423 0 R 8424 0 R 8425 0 R 8426 0 R 8427 0 R 8428 0 R 8429 0 R 8430 0 R 8431 0 R 8432 0 R 8433 0 R 8434 0 R 8435 0 R 8436 0 R 8437 0 R 8438 0 R 8439 0 R 8440 0 R 8441 0 R 8442 0 R 8443 0 R 8444 0 R 8445 0 R 8446 0 R 8447 0 R 8448 0 R 8449 0 R 8450 0 R 8451 0 R 8452 0 R 8453 0 R 8454 0 R 8455 0 R 8456 0 R 8457 0 R 8458 0 R 8459 0 R 8460 0 R 8461 0 R 8462 0 R 8463 0 R 8464 0 R 8465 0 R 8466 0 R 8467 0 R 8468 0 R 8469 0 R 8470 0 R 8471 0 R 8472 0 R 8473 0 R 8474 0 R 8475 0 R 8476 0 R 8477 0 R 8478 0 R 8479 0 R 8480 0 R 8481 0 R 8482 0 R 8483 0 R 8484 0 R 8485 0 R 8486 0 R 8487 0 R 8488 0 R 8489 0 R 8490 0 R 8491 0 R 8492 0 R 8493 0 R 8494 0 R 8495 0 R 8496 0 R 8497 0 R 8498 0 R 8499 0 R 8500 0 R 8501 0 R 8502 0 R 8503 0 R 8504 0 R 8505 0 R 8506 0 R 8507 0 R 8508 0 R 8509 0 R 8510 0 R 8511 0 R 8512 0 R 8513 0 R 8514 0 R 8515 0 R 8516 0 R 8517 0 R 8518 0 R 8519 0 R 8520 0 R 8521 0 R 8522 0 R 8523 0 R 8524 0 R 8525 0 R 8526 0 R ]
+/Parent 8351 0 R
+/Annots [ 8352 0 R 8353 0 R 8354 0 R 8355 0 R 8356 0 R 8357 0 R 8358 0 R 8359 0 R 8360 0 R 8361 0 R 8362 0 R 8363 0 R 8364 0 R 8365 0 R 8366 0 R 8367 0 R 8368 0 R 8369 0 R 8370 0 R 8371 0 R 8372 0 R 8373 0 R 8374 0 R 8375 0 R 8376 0 R 8377 0 R 8378 0 R 8379 0 R 8380 0 R 8381 0 R 8382 0 R 8383 0 R 8384 0 R 8385 0 R 8386 0 R 8387 0 R 8388 0 R 8389 0 R 8390 0 R 8391 0 R 8392 0 R 8393 0 R 8394 0 R 8395 0 R 8396 0 R 8397 0 R 8398 0 R 8399 0 R 8400 0 R 8401 0 R 8402 0 R 8403 0 R 8404 0 R 8405 0 R 8406 0 R 8407 0 R 8408 0 R 8409 0 R 8410 0 R 8411 0 R 8412 0 R 8413 0 R 8414 0 R 8415 0 R 8416 0 R 8417 0 R 8418 0 R 8419 0 R 8420 0 R 8421 0 R 8422 0 R 8423 0 R 8424 0 R 8425 0 R 8426 0 R 8427 0 R 8428 0 R 8429 0 R 8430 0 R 8431 0 R 8432 0 R 8433 0 R 8434 0 R 8435 0 R 8436 0 R 8437 0 R 8438 0 R 8439 0 R 8440 0 R 8441 0 R 8442 0 R 8443 0 R 8444 0 R 8445 0 R 8446 0 R 8447 0 R 8448 0 R 8449 0 R 8450 0 R 8451 0 R 8452 0 R 8453 0 R 8454 0 R 8455 0 R 8456 0 R 8457 0 R 8458 0 R 8459 0 R 8460 0 R 8461 0 R 8462 0 R 8463 0 R 8464 0 R 8465 0 R 8466 0 R 8467 0 R 8468 0 R 8469 0 R 8470 0 R 8471 0 R 8472 0 R 8473 0 R 8474 0 R 8475 0 R 8476 0 R 8477 0 R 8478 0 R 8479 0 R 8480 0 R 8481 0 R 8482 0 R 8483 0 R 8484 0 R 8485 0 R 8486 0 R 8487 0 R 8488 0 R 8489 0 R 8490 0 R 8491 0 R 8492 0 R 8493 0 R 8494 0 R ]
 >> endobj
-8384 0 obj <<
+8352 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [222.548 632.93 240.904 644.62]
 /Subtype /Link
 /A << /S /GoTo /D (page.145) >>
 >> endobj
-8385 0 obj <<
+8353 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [260.623 619.314 278.979 631.004]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-8386 0 obj <<
+8354 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [235.38 605.698 253.737 617.098]
 /Subtype /Link
 /A << /S /GoTo /D (page.435) >>
 >> endobj
-8387 0 obj <<
+8355 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [237.35 592.082 255.706 603.772]
 /Subtype /Link
 /A << /S /GoTo /D (page.359) >>
 >> endobj
-8388 0 obj <<
+8356 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [214.108 578.466 232.464 590.034]
 /Subtype /Link
 /A << /S /GoTo /D (page.175) >>
 >> endobj
-8389 0 obj <<
+8357 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.411 564.85 203.767 576.418]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-8390 0 obj <<
+8358 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [179.289 551.234 197.646 562.802]
 /Subtype /Link
 /A << /S /GoTo /D (page.183) >>
 >> endobj
-8391 0 obj <<
+8359 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [202.32 551.234 220.676 562.802]
 /Subtype /Link
 /A << /S /GoTo /D (page.240) >>
 >> endobj
-8392 0 obj <<
+8360 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [225.35 551.234 243.706 562.802]
 /Subtype /Link
 /A << /S /GoTo /D (page.255) >>
 >> endobj
-8393 0 obj <<
+8361 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [248.38 551.234 266.737 562.802]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-8394 0 obj <<
+8362 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [271.411 551.234 289.767 562.802]
 /Subtype /Link
 /A << /S /GoTo /D (page.272) >>
 >> endobj
-8395 0 obj <<
+8363 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [294.441 551.234 312.797 562.802]
 /Subtype /Link
 /A << /S /GoTo /D (page.309) >>
 >> endobj
-8396 0 obj <<
+8364 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [316.259 551.234 334.615 562.802]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-8397 0 obj <<
+8365 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [174.502 537.618 192.858 549.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.274) >>
 >> endobj
-8398 0 obj <<
+8366 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.229 524.002 235.585 535.692]
 /Subtype /Link
 /A << /S /GoTo /D (page.255) >>
 >> endobj
-8399 0 obj <<
+8367 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.926 510.386 229.282 521.954]
 /Subtype /Link
 /A << /S /GoTo /D (page.254) >>
 >> endobj
-8400 0 obj <<
+8368 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [187.774 496.77 206.131 508.338]
 /Subtype /Link
 /A << /S /GoTo /D (page.240) >>
 >> endobj
-8401 0 obj <<
+8369 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.956 483.154 212.312 494.843]
 /Subtype /Link
 /A << /S /GoTo /D (page.274) >>
 >> endobj
-8402 0 obj <<
+8370 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [186.108 469.538 204.464 481.106]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-8403 0 obj <<
+8371 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [187.774 455.922 200.676 467.066]
 /Subtype /Link
 /A << /S /GoTo /D (page.82) >>
 >> endobj
-8404 0 obj <<
+8372 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [188.38 442.306 201.282 453.995]
 /Subtype /Link
 /A << /S /GoTo /D (page.41) >>
 >> endobj
-8405 0 obj <<
+8373 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.956 442.306 218.858 453.995]
 /Subtype /Link
 /A << /S /GoTo /D (page.80) >>
 >> endobj
-8406 0 obj <<
+8374 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.532 442.306 241.888 453.995]
 /Subtype /Link
 /A << /S /GoTo /D (page.333) >>
 >> endobj
-8407 0 obj <<
+8375 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.562 442.306 264.918 453.995]
 /Subtype /Link
 /A << /S /GoTo /D (page.343) >>
 >> endobj
-8408 0 obj <<
+8376 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [269.593 442.306 287.949 453.995]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-8409 0 obj <<
+8377 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [292.623 442.306 310.979 453.995]
 /Subtype /Link
 /A << /S /GoTo /D (page.498) >>
 >> endobj
-8410 0 obj <<
+8378 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.653 428.69 214.009 440.379]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-8411 0 obj <<
+8379 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.683 428.69 237.04 440.379]
 /Subtype /Link
 /A << /S /GoTo /D (page.541) >>
 >> endobj
-8412 0 obj <<
+8380 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.805 415.074 209.161 426.763]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-8413 0 obj <<
+8381 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.835 415.074 232.191 426.763]
 /Subtype /Link
 /A << /S /GoTo /D (page.386) >>
 >> endobj
-8414 0 obj <<
+8382 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [261.259 401.458 279.615 413.147]
 /Subtype /Link
 /A << /S /GoTo /D (page.360) >>
 >> endobj
-8415 0 obj <<
+8383 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [318.981 387.842 337.337 399.531]
 /Subtype /Link
 /A << /S /GoTo /D (page.147) >>
 >> endobj
-8416 0 obj <<
+8384 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [343.016 387.842 361.372 399.531]
 /Subtype /Link
 /A << /S /GoTo /D (page.153) >>
 >> endobj
-8417 0 obj <<
+8385 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [367.051 387.842 385.408 399.531]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-8418 0 obj <<
+8386 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.086 387.842 409.443 399.531]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-8419 0 obj <<
+8387 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.121 387.842 433.478 399.531]
 /Subtype /Link
 /A << /S /GoTo /D (page.274) >>
 >> endobj
-8420 0 obj <<
+8388 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 387.842 457.513 399.531]
 /Subtype /Link
 /A << /S /GoTo /D (page.282) >>
 >> endobj
-8421 0 obj <<
+8389 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.441 374.293 172.797 385.437]
 /Subtype /Link
 /A << /S /GoTo /D (page.298) >>
 >> endobj
-8422 0 obj <<
+8390 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.471 374.293 195.827 385.437]
 /Subtype /Link
 /A << /S /GoTo /D (page.306) >>
 >> endobj
-8423 0 obj <<
+8391 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.502 374.293 218.858 385.437]
 /Subtype /Link
 /A << /S /GoTo /D (page.312) >>
 >> endobj
-8424 0 obj <<
+8392 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.532 374.293 241.888 385.437]
 /Subtype /Link
 /A << /S /GoTo /D (page.395) >>
 >> endobj
-8425 0 obj <<
+8393 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.562 374.293 264.918 385.437]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-8426 0 obj <<
+8394 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.308 360.677 218.664 372.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.147) >>
 >> endobj
-8427 0 obj <<
+8395 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.338 360.677 241.694 372.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.153) >>
 >> endobj
-8428 0 obj <<
+8396 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.368 360.677 264.724 372.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.168) >>
 >> endobj
-8429 0 obj <<
+8397 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [269.399 360.677 287.755 372.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-8430 0 obj <<
+8398 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [292.429 360.677 310.785 372.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.189) >>
 >> endobj
-8431 0 obj <<
+8399 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [315.459 360.677 333.815 372.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-8432 0 obj <<
+8400 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [338.49 360.677 356.846 372.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.271) >>
 >> endobj
-8433 0 obj <<
+8401 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [361.52 360.677 379.876 372.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.274) >>
 >> endobj
-8434 0 obj <<
+8402 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [384.55 360.677 402.906 372.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-8435 0 obj <<
+8403 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.581 360.677 425.937 372.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.343) >>
 >> endobj
-8436 0 obj <<
+8404 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.611 360.677 448.967 372.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.355) >>
 >> endobj
-8437 0 obj <<
+8405 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.471 347.061 241.373 358.75]
 /Subtype /Link
 /A << /S /GoTo /D (page.10) >>
 >> endobj
-8438 0 obj <<
+8406 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.532 333.444 239.888 345.013]
 /Subtype /Link
 /A << /S /GoTo /D (page.348) >>
 >> endobj
-8439 0 obj <<
+8407 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.986 319.828 212.343 331.397]
 /Subtype /Link
 /A << /S /GoTo /D (page.459) >>
 >> endobj
-8440 0 obj <<
+8408 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [307.017 306.212 325.373 317.902]
 /Subtype /Link
 /A << /S /GoTo /D (page.459) >>
 >> endobj
-8441 0 obj <<
+8409 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.974 292.596 227.331 304.286]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-8442 0 obj <<
+8410 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.793 292.596 249.149 304.286]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-8443 0 obj <<
+8411 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [253.823 292.596 272.179 304.286]
 /Subtype /Link
 /A << /S /GoTo /D (page.470) >>
 >> endobj
-8444 0 obj <<
+8412 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.623 278.98 230.979 290.549]
 /Subtype /Link
 /A << /S /GoTo /D (page.469) >>
 >> endobj
-8445 0 obj <<
+8413 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [235.653 278.98 254.009 290.549]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-8446 0 obj <<
+8414 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [258.683 278.98 277.04 290.549]
 /Subtype /Link
 /A << /S /GoTo /D (page.545) >>
 >> endobj
-8447 0 obj <<
+8415 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.58 265.364 267.937 276.933]
 /Subtype /Link
 /A << /S /GoTo /D (page.544) >>
 >> endobj
-8448 0 obj <<
+8416 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.683 251.748 202.04 263.317]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-8449 0 obj <<
+8417 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [233.077 238.132 251.434 249.701]
 /Subtype /Link
 /A << /S /GoTo /D (page.155) >>
 >> endobj
-8450 0 obj <<
+8418 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [256.108 238.132 274.464 249.701]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-8451 0 obj <<
+8419 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [279.138 238.132 297.494 249.701]
 /Subtype /Link
 /A << /S /GoTo /D (page.253) >>
 >> endobj
-8452 0 obj <<
+8420 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [245.653 224.516 253.1 236.085]
 /Subtype /Link
 /A << /S /GoTo /D (page.8) >>
 >> endobj
-8453 0 obj <<
+8421 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.047 210.9 245.403 222.469]
 /Subtype /Link
 /A << /S /GoTo /D (page.541) >>
 >> endobj
-8454 0 obj <<
+8422 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.805 197.284 247.161 208.852]
 /Subtype /Link
 /A << /S /GoTo /D (page.545) >>
 >> endobj
-8455 0 obj <<
+8423 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.471 172.592 233.827 184.281]
 /Subtype /Link
 /A << /S /GoTo /D (page.400) >>
 >> endobj
-8456 0 obj <<
+8424 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.653 158.976 249.009 170.665]
 /Subtype /Link
 /A << /S /GoTo /D (page.429) >>
 >> endobj
-8457 0 obj <<
+8425 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [235.653 145.36 254.009 156.928]
 /Subtype /Link
 /A << /S /GoTo /D (page.267) >>
 >> endobj
-8458 0 obj <<
+8426 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [222.047 131.744 240.403 143.312]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-8459 0 obj <<
+8427 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.411 118.128 234.767 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.149) >>
 >> endobj
-8460 0 obj <<
+8428 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [239.441 118.128 257.797 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-8461 0 obj <<
+8429 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [262.471 118.128 280.828 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-8462 0 obj <<
+8430 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [285.502 118.128 303.858 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.253) >>
 >> endobj
-8463 0 obj <<
+8431 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [308.532 118.128 326.888 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.272) >>
 >> endobj
-8464 0 obj <<
+8432 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [331.562 118.128 349.918 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-8465 0 obj <<
+8433 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [354.593 118.128 372.949 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.431) >>
 >> endobj
-8466 0 obj <<
+8434 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [377.623 118.128 395.979 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-8467 0 obj <<
+8435 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.653 118.128 419.009 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.452) >>
 >> endobj
-8468 0 obj <<
+8436 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.684 118.128 442.04 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.505) >>
 >> endobj
-8469 0 obj <<
+8437 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.203 646.546 419.559 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.168) >>
 >> endobj
-8470 0 obj <<
+8438 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.9 632.93 423.802 644.62]
 /Subtype /Link
 /A << /S /GoTo /D (page.85) >>
 >> endobj
-8471 0 obj <<
+8439 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [440.718 619.314 459.075 631.004]
 /Subtype /Link
 /A << /S /GoTo /D (page.505) >>
 >> endobj
-8472 0 obj <<
+8440 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.506 605.698 436.862 617.388]
 /Subtype /Link
 /A << /S /GoTo /D (page.445) >>
 >> endobj
-8473 0 obj <<
+8441 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.644 578.466 435 590.156]
 /Subtype /Link
 /A << /S /GoTo /D (page.517) >>
 >> endobj
-8474 0 obj <<
+8442 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.779 564.85 411.135 576.54]
 /Subtype /Link
 /A << /S /GoTo /D (page.480) >>
 >> endobj
-8475 0 obj <<
+8443 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.431 537.618 429.788 549.308]
 /Subtype /Link
 /A << /S /GoTo /D (page.445) >>
 >> endobj
-8476 0 obj <<
+8444 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [458.567 524.002 471.469 535.692]
 /Subtype /Link
 /A << /S /GoTo /D (page.63) >>
 >> endobj
-8477 0 obj <<
+8445 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [476.143 524.002 494.499 535.692]
 /Subtype /Link
 /A << /S /GoTo /D (page.480) >>
 >> endobj
-8478 0 obj <<
+8446 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [499.173 524.002 517.529 535.692]
 /Subtype /Link
 /A << /S /GoTo /D (page.517) >>
 >> endobj
-8479 0 obj <<
+8447 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.537 510.386 422.893 522.076]
 /Subtype /Link
 /A << /S /GoTo /D (page.478) >>
 >> endobj
-8480 0 obj <<
+8448 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [452.506 496.77 470.862 508.459]
 /Subtype /Link
 /A << /S /GoTo /D (page.505) >>
 >> endobj
-8481 0 obj <<
+8449 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.324 482.548 401.681 495.45]
 /Subtype /Link
 /A << /S /GoTo /D (page.325) >>
 >> endobj
-8482 0 obj <<
+8450 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.159 455.922 417.515 467.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.210) >>
 >> endobj
-8483 0 obj <<
+8451 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [466.658 442.306 485.014 453.995]
 /Subtype /Link
 /A << /S /GoTo /D (page.212) >>
 >> endobj
-8484 0 obj <<
+8452 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [437.264 428.69 450.165 440.379]
 /Subtype /Link
 /A << /S /GoTo /D (page.61) >>
 >> endobj
-8485 0 obj <<
+8453 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [454.84 428.69 473.196 440.379]
 /Subtype /Link
 /A << /S /GoTo /D (page.213) >>
 >> endobj
-8486 0 obj <<
+8454 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.446 415.074 417.802 426.763]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-8487 0 obj <<
+8455 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [440.446 401.458 458.802 413.147]
 /Subtype /Link
 /A << /S /GoTo /D (page.445) >>
 >> endobj
-8488 0 obj <<
+8456 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.446 387.842 417.802 399.531]
 /Subtype /Link
 /A << /S /GoTo /D (page.441) >>
 >> endobj
-8489 0 obj <<
+8457 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.476 387.842 440.832 399.531]
 /Subtype /Link
 /A << /S /GoTo /D (page.450) >>
 >> endobj
-8490 0 obj <<
+8458 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.324 374.226 422.681 385.915]
 /Subtype /Link
 /A << /S /GoTo /D (page.445) >>
 >> endobj
-8491 0 obj <<
+8459 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.536 360.61 423.893 372.299]
 /Subtype /Link
 /A << /S /GoTo /D (page.446) >>
 >> endobj
-8492 0 obj <<
+8460 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.839 335.917 402.287 347.607]
 /Subtype /Link
 /A << /S /GoTo /D (page.6) >>
 >> endobj
-8493 0 obj <<
+8461 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.233 322.301 446.59 333.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.497) >>
 >> endobj
-8494 0 obj <<
+8462 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.143 308.685 417.499 320.375]
 /Subtype /Link
 /A << /S /GoTo /D (page.341) >>
 >> endobj
-8495 0 obj <<
+8463 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.718 295.069 406.074 306.637]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-8496 0 obj <<
+8464 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.749 295.069 429.105 306.637]
 /Subtype /Link
 /A << /S /GoTo /D (page.302) >>
 >> endobj
-8497 0 obj <<
+8465 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [448.233 281.453 466.59 293.143]
 /Subtype /Link
 /A << /S /GoTo /D (page.153) >>
 >> endobj
-8498 0 obj <<
+8466 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [432.294 267.837 450.65 279.527]
 /Subtype /Link
 /A << /S /GoTo /D (page.274) >>
 >> endobj
-8499 0 obj <<
+8467 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [435.567 254.221 453.923 265.911]
 /Subtype /Link
 /A << /S /GoTo /D (page.488) >>
 >> endobj
-8500 0 obj <<
+8468 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.567 240.605 400.923 252.173]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-8501 0 obj <<
+8469 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.597 240.605 423.953 252.173]
 /Subtype /Link
 /A << /S /GoTo /D (page.306) >>
 >> endobj
-8502 0 obj <<
+8470 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.627 240.605 446.984 252.173]
 /Subtype /Link
 /A << /S /GoTo /D (page.395) >>
 >> endobj
-8503 0 obj <<
+8471 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.009 226.989 421.365 238.679]
 /Subtype /Link
 /A << /S /GoTo /D (page.168) >>
 >> endobj
-8504 0 obj <<
+8472 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.797 213.373 434.153 225.062]
 /Subtype /Link
 /A << /S /GoTo /D (page.172) >>
 >> endobj
-8505 0 obj <<
+8473 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [421.555 199.757 439.911 211.156]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-8506 0 obj <<
+8474 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.541 186.141 435.897 197.83]
 /Subtype /Link
 /A << /S /GoTo /D (page.171) >>
 >> endobj
-8507 0 obj <<
+8475 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.718 172.525 429.075 183.669]
 /Subtype /Link
 /A << /S /GoTo /D (page.335) >>
 >> endobj
-8508 0 obj <<
+8476 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [432.545 158.909 445.446 170.598]
 /Subtype /Link
 /A << /S /GoTo /D (page.61) >>
 >> endobj
-8509 0 obj <<
+8477 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [450.293 158.909 468.649 170.598]
 /Subtype /Link
 /A << /S /GoTo /D (page.105) >>
 >> endobj
-8510 0 obj <<
+8478 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [473.496 158.909 491.853 170.598]
 /Subtype /Link
 /A << /S /GoTo /D (page.151) >>
 >> endobj
-8511 0 obj <<
+8479 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [496.7 158.909 515.056 170.598]
 /Subtype /Link
 /A << /S /GoTo /D (page.235) >>
 >> endobj
-8512 0 obj <<
+8480 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [519.903 158.909 538.259 170.598]
 /Subtype /Link
 /A << /S /GoTo /D (page.243) >>
 >> endobj
-8513 0 obj <<
+8481 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [543.106 158.909 561.462 170.598]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-8514 0 obj <<
+8482 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [566.309 158.909 584.665 170.598]
 /Subtype /Link
 /A << /S /GoTo /D (page.309) >>
 >> endobj
-8515 0 obj <<
+8483 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [589.512 158.909 607.868 170.598]
 /Subtype /Link
 /A << /S /GoTo /D (page.323) >>
 >> endobj
-8516 0 obj <<
+8484 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [612.715 158.909 631.072 170.598]
 /Subtype /Link
 /A << /S /GoTo /D (page.328) >>
 >> endobj
-8517 0 obj <<
+8485 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [635.919 158.909 654.275 170.598]
 /Subtype /Link
 /A << /S /GoTo /D (page.335) >>
 >> endobj
-8518 0 obj <<
+8486 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [351.203 145.36 369.559 156.504]
 /Subtype /Link
 /A << /S /GoTo /D (page.336) >>
 >> endobj
-8519 0 obj <<
+8487 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [374.233 145.36 392.59 156.504]
 /Subtype /Link
 /A << /S /GoTo /D (page.341) >>
 >> endobj
-8520 0 obj <<
+8488 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.264 145.36 415.62 156.504]
 /Subtype /Link
 /A << /S /GoTo /D (page.348) >>
 >> endobj
-8521 0 obj <<
+8489 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.294 145.36 438.65 156.504]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-8522 0 obj <<
+8490 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [409.506 131.744 427.862 143.433]
 /Subtype /Link
 /A << /S /GoTo /D (page.349) >>
 >> endobj
-8523 0 obj <<
+8491 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [432.537 131.744 450.893 143.433]
 /Subtype /Link
 /A << /S /GoTo /D (page.350) >>
 >> endobj
-8524 0 obj <<
+8492 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.93 118.128 404.832 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.11) >>
 >> endobj
-8525 0 obj <<
+8493 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [409.506 118.128 422.408 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.22) >>
 >> endobj
-8526 0 obj <<
+8494 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [427.082 118.128 439.984 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.68) >>
 >> endobj
-8530 0 obj <<
-/D [8528 0 R /XYZ 100.892 685.529 null]
+8498 0 obj <<
+/D [8496 0 R /XYZ 100.892 685.529 null]
 >> endobj
-8527 0 obj <<
+8495 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8660 0 obj <<
+8628 0 obj <<
 /Length 1465      
 /Filter /FlateDecode
 >>
@@ -57033,904 +56206,904 @@
 7çcSßý(3i³6mŽÏ¢[™:_|¦†Zµ•ýß(†qÞ~ÍØS¼«ž@Iç¨Ê̤qìµãDA/âzÜVj¤°'ÈžªÄÞù5$ƒuö£…In{,‚9Êø]O/¹üü¸žýŤõd
 endstream
 endobj
-8659 0 obj <<
+8627 0 obj <<
 /Type /Page
-/Contents 8660 0 R
-/Resources 8658 0 R
+/Contents 8628 0 R
+/Resources 8626 0 R
 /MediaBox [0 0 612 792]
-/Parent 8383 0 R
-/Annots [ 8531 0 R 8532 0 R 8533 0 R 8534 0 R 8535 0 R 8536 0 R 8537 0 R 8538 0 R 8539 0 R 8540 0 R 8541 0 R 8542 0 R 8543 0 R 8544 0 R 8545 0 R 8546 0 R 8547 0 R 8548 0 R 8549 0 R 8550 0 R 8551 0 R 8552 0 R 8553 0 R 8554 0 R 8555 0 R 8556 0 R 8557 0 R 8558 0 R 8559 0 R 8560 0 R 8561 0 R 8562 0 R 8563 0 R 8564 0 R 8565 0 R 8566 0 R 8567 0 R 8568 0 R 8569 0 R 8570 0 R 8571 0 R 8572 0 R 8573 0 R 8574 0 R 8575 0 R 8576 0 R 8577 0 R 8578 0 R 8579 0 R 8580 0 R 8581 0 R 8582 0 R 8583 0 R 8584 0 R 8585 0 R 8586 0 R 8587 0 R 8588 0 R 8589 0 R 8590 0 R 8591 0 R 8592 0 R 8593 0 R 8594 0 R 8595 0 R 8596 0 R 8597 0 R 8598 0 R 8599 0 R 8600 0 R 8601 0 R 8602 0 R 8603 0 R 8604 0 R 8605 0 R 8606 0 R 8607 0 R 8608 0 R 8609 0 R 8610 0 R 8611 0 R 8612 0 R 8613 0 R 8614 0 R 8615 0 R 8616 0 R 8617 0 R 8618 0 R 8619 0 R 8620 0 R 8621 0 R 8622 0 R 8623 0 R 8624 0 R 8625 0 R 8626 0 R 8627 0 R 8628 0 R 8629 0 R 8630 0 R 8631 0 R 8632 0 R 8633 0 R 8634 0 R 8635 0 R 8636 0 R 8637 0 R 8638 0 R 8639 0 R 8640 0 R 8641 0 R 8642 0 R 8643 0 R 8644 0 R 8645 0 R 8646 0 R 8647 0 R 8648 0 R 8649 0 R 8650 0 R 8651 0 R 8652 0 R 8653 0 R 8654 0 R 8655 0 R 8656 0 R ]
+/Parent 8351 0 R
+/Annots [ 8499 0 R 8500 0 R 8501 0 R 8502 0 R 8503 0 R 8504 0 R 8505 0 R 8506 0 R 8507 0 R 8508 0 R 8509 0 R 8510 0 R 8511 0 R 8512 0 R 8513 0 R 8514 0 R 8515 0 R 8516 0 R 8517 0 R 8518 0 R 8519 0 R 8520 0 R 8521 0 R 8522 0 R 8523 0 R 8524 0 R 8525 0 R 8526 0 R 8527 0 R 8528 0 R 8529 0 R 8530 0 R 8531 0 R 8532 0 R 8533 0 R 8534 0 R 8535 0 R 8536 0 R 8537 0 R 8538 0 R 8539 0 R 8540 0 R 8541 0 R 8542 0 R 8543 0 R 8544 0 R 8545 0 R 8546 0 R 8547 0 R 8548 0 R 8549 0 R 8550 0 R 8551 0 R 8552 0 R 8553 0 R 8554 0 R 8555 0 R 8556 0 R 8557 0 R 8558 0 R 8559 0 R 8560 0 R 8561 0 R 8562 0 R 8563 0 R 8564 0 R 8565 0 R 8566 0 R 8567 0 R 8568 0 R 8569 0 R 8570 0 R 8571 0 R 8572 0 R 8573 0 R 8574 0 R 8575 0 R 8576 0 R 8577 0 R 8578 0 R 8579 0 R 8580 0 R 8581 0 R 8582 0 R 8583 0 R 8584 0 R 8585 0 R 8586 0 R 8587 0 R 8588 0 R 8589 0 R 8590 0 R 8591 0 R 8592 0 R 8593 0 R 8594 0 R 8595 0 R 8596 0 R 8597 0 R 8598 0 R 8599 0 R 8600 0 R 8601 0 R 8602 0 R 8603 0 R 8604 0 R 8605 0 R 8606 0 R 8607 0 R 8608 0 R 8609 0 R 8610 0 R 8611 0 R 8612 0 R 8613 0 R 8614 0 R 8615 0 R 8616 0 R 8617 0 R 8618 0 R 8619 0 R 8620 0 R 8621 0 R 8622 0 R 8623 0 R 8624 0 R ]
 >> endobj
-8531 0 obj <<
+8499 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [270.327 632.997 283.229 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.37) >>
 >> endobj
-8532 0 obj <<
+8500 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [287.903 632.997 300.805 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.68) >>
 >> endobj
-8533 0 obj <<
+8501 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [305.479 632.997 323.835 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-8534 0 obj <<
+8502 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [294.493 619.448 307.395 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.15) >>
 >> endobj
-8535 0 obj <<
+8503 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [291.463 605.899 309.819 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.452) >>
 >> endobj
-8536 0 obj <<
+8504 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [288.735 592.35 307.092 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.541) >>
 >> endobj
-8537 0 obj <<
+8505 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [311.766 592.35 330.122 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.545) >>
 >> endobj
-8538 0 obj <<
+8506 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.675 578.8 263.031 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.387) >>
 >> endobj
-8539 0 obj <<
+8507 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [248.887 565.251 267.243 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.183) >>
 >> endobj
-8540 0 obj <<
+8508 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [271.917 565.251 290.273 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-8541 0 obj <<
+8509 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [294.947 565.251 313.304 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.200) >>
 >> endobj
-8542 0 obj <<
+8510 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [317.978 565.251 336.334 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.370) >>
 >> endobj
-8543 0 obj <<
+8511 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [341.008 565.251 359.364 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.371) >>
 >> endobj
-8544 0 obj <<
+8512 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [364.038 565.251 382.395 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-8545 0 obj <<
+8513 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [235.627 551.702 253.983 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.108) >>
 >> endobj
-8546 0 obj <<
+8514 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [258.748 551.702 277.105 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.143) >>
 >> endobj
-8547 0 obj <<
+8515 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [281.87 551.702 300.226 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.144) >>
 >> endobj
-8548 0 obj <<
+8516 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [304.992 551.702 323.348 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.154) >>
 >> endobj
-8549 0 obj <<
+8517 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [328.114 551.702 346.47 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-8550 0 obj <<
+8518 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [351.235 551.702 369.592 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-8551 0 obj <<
+8519 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [374.357 551.702 392.713 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.269) >>
 >> endobj
-8552 0 obj <<
+8520 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.479 551.702 415.835 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-8553 0 obj <<
+8521 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.601 551.702 438.957 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.327) >>
 >> endobj
-8554 0 obj <<
+8522 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.722 551.702 462.079 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.335) >>
 >> endobj
-8555 0 obj <<
+8523 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [466.844 551.702 485.2 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.353) >>
 >> endobj
-8556 0 obj <<
+8524 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 551.702 508.322 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.365) >>
 >> endobj
-8557 0 obj <<
+8525 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.25 538.153 223.607 549.297]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-8558 0 obj <<
+8526 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.281 538.153 246.637 549.297]
 /Subtype /Link
 /A << /S /GoTo /D (page.481) >>
 >> endobj
-8559 0 obj <<
+8527 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [291.038 523.997 309.395 536.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.143) >>
 >> endobj
-8560 0 obj <<
+8528 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.796 511.054 253.152 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.507) >>
 >> endobj
-8561 0 obj <<
+8529 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [270.766 497.505 289.122 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-8562 0 obj <<
+8530 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.796 497.505 312.152 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-8563 0 obj <<
+8531 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [316.826 497.505 335.182 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.454) >>
 >> endobj
-8564 0 obj <<
+8532 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [339.857 497.505 358.213 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.473) >>
 >> endobj
-8565 0 obj <<
+8533 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.887 497.505 381.243 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.474) >>
 >> endobj
-8566 0 obj <<
+8534 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.917 497.505 404.273 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.478) >>
 >> endobj
-8567 0 obj <<
+8535 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [330.796 483.956 349.152 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.445) >>
 >> endobj
-8568 0 obj <<
+8536 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [353.826 483.956 372.183 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.480) >>
 >> endobj
-8569 0 obj <<
+8537 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [231.19 470.407 249.546 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.400) >>
 >> endobj
-8570 0 obj <<
+8538 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.22 470.407 272.576 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.505) >>
 >> endobj
-8571 0 obj <<
+8539 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [262.675 456.858 281.031 468.257]
 /Subtype /Link
 /A << /S /GoTo /D (page.446) >>
 >> endobj
-8572 0 obj <<
+8540 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [267.735 443.308 286.091 454.877]
 /Subtype /Link
 /A << /S /GoTo /D (page.449) >>
 >> endobj
-8573 0 obj <<
+8541 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [266.978 429.759 279.879 441.159]
 /Subtype /Link
 /A << /S /GoTo /D (page.12) >>
 >> endobj
-8574 0 obj <<
+8542 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [284.554 429.759 302.91 441.159]
 /Subtype /Link
 /A << /S /GoTo /D (page.434) >>
 >> endobj
-8575 0 obj <<
+8543 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [307.584 429.759 325.94 441.159]
 /Subtype /Link
 /A << /S /GoTo /D (page.441) >>
 >> endobj
-8576 0 obj <<
+8544 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [330.614 429.759 348.97 441.159]
 /Subtype /Link
 /A << /S /GoTo /D (page.443) >>
 >> endobj
-8577 0 obj <<
+8545 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [353.644 429.759 372.001 441.159]
 /Subtype /Link
 /A << /S /GoTo /D (page.446) >>
 >> endobj
-8578 0 obj <<
+8546 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [376.675 429.759 395.031 441.159]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-8579 0 obj <<
+8547 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [274.085 416.21 292.441 427.609]
 /Subtype /Link
 /A << /S /GoTo /D (page.434) >>
 >> endobj
-8580 0 obj <<
+8548 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.145 402.661 277.502 413.805]
 /Subtype /Link
 /A << /S /GoTo /D (page.447) >>
 >> endobj
-8581 0 obj <<
+8549 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [251.327 389.112 269.683 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.447) >>
 >> endobj
-8582 0 obj <<
+8550 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [248.069 375.562 266.425 386.962]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-8583 0 obj <<
+8551 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [289.857 362.013 308.213 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.449) >>
 >> endobj
-8584 0 obj <<
+8552 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.038 348.464 252.394 360.032]
 /Subtype /Link
 /A << /S /GoTo /D (page.504) >>
 >> endobj
-8585 0 obj <<
+8553 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [240.402 334.915 258.758 346.483]
 /Subtype /Link
 /A << /S /GoTo /D (page.505) >>
 >> endobj
-8586 0 obj <<
+8554 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [260.463 321.366 278.819 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.441) >>
 >> endobj
-8587 0 obj <<
+8555 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.523 307.816 245.425 319.216]
 /Subtype /Link
 /A << /S /GoTo /D (page.76) >>
 >> endobj
-8588 0 obj <<
+8556 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [250.099 307.816 263.001 319.216]
 /Subtype /Link
 /A << /S /GoTo /D (page.77) >>
 >> endobj
-8589 0 obj <<
+8557 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.402 294.267 262.758 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.507) >>
 >> endobj
-8590 0 obj <<
+8558 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [258.281 280.718 276.637 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-8591 0 obj <<
+8559 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [239.493 253.62 257.849 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-8592 0 obj <<
+8560 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [262.523 253.62 280.879 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.431) >>
 >> endobj
-8593 0 obj <<
+8561 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [296.251 240.07 314.607 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.474) >>
 >> endobj
-8594 0 obj <<
+8562 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [240.705 226.521 259.061 238.089]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-8595 0 obj <<
+8563 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.008 212.972 264.364 224.54]
 /Subtype /Link
 /A << /S /GoTo /D (page.147) >>
 >> endobj
-8596 0 obj <<
+8564 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [269.038 212.972 287.395 224.54]
 /Subtype /Link
 /A << /S /GoTo /D (page.399) >>
 >> endobj
-8597 0 obj <<
+8565 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [237.584 199.423 250.485 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.10) >>
 >> endobj
-8598 0 obj <<
+8566 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.16 199.423 273.516 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-8599 0 obj <<
+8567 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [278.19 199.423 296.546 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.312) >>
 >> endobj
-8600 0 obj <<
+8568 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [301.22 199.423 319.576 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.352) >>
 >> endobj
-8601 0 obj <<
+8569 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [324.251 199.423 342.607 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-8602 0 obj <<
+8570 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [347.281 199.423 365.637 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.504) >>
 >> endobj
-8603 0 obj <<
+8571 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [282.19 185.874 300.546 197.442]
 /Subtype /Link
 /A << /S /GoTo /D (page.183) >>
 >> endobj
-8604 0 obj <<
+8572 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [305.22 185.874 323.576 197.442]
 /Subtype /Link
 /A << /S /GoTo /D (page.271) >>
 >> endobj
-8605 0 obj <<
+8573 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [268.099 172.324 286.455 183.893]
 /Subtype /Link
 /A << /S /GoTo /D (page.448) >>
 >> endobj
-8606 0 obj <<
+8574 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [276.978 158.775 295.334 170.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.183) >>
 >> endobj
-8607 0 obj <<
+8575 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [276.22 145.226 294.576 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.400) >>
 >> endobj
-8608 0 obj <<
+8576 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.857 131.677 263.213 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-8609 0 obj <<
+8577 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.796 118.128 278.152 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-8610 0 obj <<
+8578 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.194 646.546 459.551 657.69]
 /Subtype /Link
 /A << /S /GoTo /D (page.441) >>
 >> endobj
-8611 0 obj <<
+8579 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [450.588 632.997 468.945 644.397]
 /Subtype /Link
 /A << /S /GoTo /D (page.429) >>
 >> endobj
-8612 0 obj <<
+8580 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [459.013 619.448 477.369 630.847]
 /Subtype /Link
 /A << /S /GoTo /D (page.324) >>
 >> endobj
-8613 0 obj <<
+8581 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [521.588 605.899 539.945 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.435) >>
 >> endobj
-8614 0 obj <<
+8582 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [455.982 592.35 474.338 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-8615 0 obj <<
+8583 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [477.558 578.8 495.914 590.2]
 /Subtype /Link
 /A << /S /GoTo /D (page.277) >>
 >> endobj
-8616 0 obj <<
+8584 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [500.588 578.8 518.945 590.2]
 /Subtype /Link
 /A << /S /GoTo /D (page.448) >>
 >> endobj
-8617 0 obj <<
+8585 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [454.831 565.251 473.187 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.438) >>
 >> endobj
-8618 0 obj <<
+8586 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [458.134 551.702 471.035 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.39) >>
 >> endobj
-8619 0 obj <<
+8587 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [475.71 551.702 488.611 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-8620 0 obj <<
+8588 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [493.285 551.702 511.642 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.114) >>
 >> endobj
-8621 0 obj <<
+8589 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [516.316 551.702 534.672 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-8622 0 obj <<
+8590 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [463.255 538.153 470.702 549.552]
 /Subtype /Link
 /A << /S /GoTo /D (page.9) >>
 >> endobj
-8623 0 obj <<
+8591 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [475.376 538.153 488.278 549.552]
 /Subtype /Link
 /A << /S /GoTo /D (page.11) >>
 >> endobj
-8624 0 obj <<
+8592 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [469.71 524.604 477.157 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.9) >>
 >> endobj
-8625 0 obj <<
+8593 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [483.922 511.054 502.278 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.216) >>
 >> endobj
-8626 0 obj <<
+8594 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [477.497 497.505 490.399 508.905]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-8627 0 obj <<
+8595 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [491.77 483.956 504.672 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.42) >>
 >> endobj
-8628 0 obj <<
+8596 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [509.346 483.956 522.248 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.81) >>
 >> endobj
-8629 0 obj <<
+8597 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [475.271 456.858 493.627 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-8630 0 obj <<
+8598 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [505.786 443.308 524.143 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.216) >>
 >> endobj
-8631 0 obj <<
+8599 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [465.68 429.759 484.037 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-8632 0 obj <<
+8600 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [477.665 416.21 496.021 427.778]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-8633 0 obj <<
+8601 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [466.514 402.661 484.87 414.229]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-8634 0 obj <<
+8602 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.999 389.112 483.355 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-8635 0 obj <<
+8603 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.588 375.562 459.49 386.962]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-8636 0 obj <<
+8604 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [496.544 362.013 514.9 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-8637 0 obj <<
+8605 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [519.574 362.013 537.93 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.214) >>
 >> endobj
-8638 0 obj <<
+8606 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [455.574 348.464 473.93 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-8639 0 obj <<
+8607 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [487.998 334.915 506.355 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-8640 0 obj <<
+8608 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [445.908 321.366 458.809 332.51]
 /Subtype /Link
 /A << /S /GoTo /D (page.10) >>
 >> endobj
-8641 0 obj <<
+8609 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.346 307.816 460.702 319.216]
 /Subtype /Link
 /A << /S /GoTo /D (page.240) >>
 >> endobj
-8642 0 obj <<
+8610 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [490.013 280.718 508.369 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.446) >>
 >> endobj
-8643 0 obj <<
+8611 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [479.013 267.169 497.369 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-8644 0 obj <<
+8612 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.316 253.62 471.672 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.240) >>
 >> endobj
-8645 0 obj <<
+8613 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [476.346 253.62 494.702 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.342) >>
 >> endobj
-8646 0 obj <<
+8614 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [499.376 253.62 517.732 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.434) >>
 >> endobj
-8647 0 obj <<
+8615 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [522.407 253.62 540.763 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.441) >>
 >> endobj
-8648 0 obj <<
+8616 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [480.588 240.07 498.945 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.488) >>
 >> endobj
-8649 0 obj <<
+8617 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [497.891 226.521 516.248 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.487) >>
 >> endobj
-8650 0 obj <<
+8618 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [482.104 212.972 500.46 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-8651 0 obj <<
+8619 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [504.679 199.423 523.036 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.488) >>
 >> endobj
-8652 0 obj <<
+8620 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [461.635 172.324 479.991 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.149) >>
 >> endobj
-8653 0 obj <<
+8621 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [479.544 158.775 497.9 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.238) >>
 >> endobj
-8654 0 obj <<
+8622 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [467.423 145.226 485.779 156.625]
 /Subtype /Link
 /A << /S /GoTo /D (page.145) >>
 >> endobj
-8655 0 obj <<
+8623 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [463.861 131.677 482.217 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.350) >>
 >> endobj
-8656 0 obj <<
+8624 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [466.982 118.128 479.884 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-8661 0 obj <<
-/D [8659 0 R /XYZ 151.701 685.529 null]
+8629 0 obj <<
+/D [8627 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8658 0 obj <<
+8626 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8775 0 obj <<
+8743 0 obj <<
 /Length 1356      
 /Filter /FlateDecode
 >>
@@ -57947,799 +57120,799 @@
 ã¥áÖ…xÌsÃÞì¼%–È›~1Ýð[µS¶AÇî„,î«Ó|V–ѳñ±»~‹Nº;žfm¼$º+¼èŒEùV[Ò†1Úq{w·Cì8–»9ÚæíQõã»ãM^¯³È»JVï^ËMÅÚþŠ¦»RÛúšeîQxú_lͶ“4Ì„¸Å½eê˜ß}t+wƼ²Ô‹¾^®áxCd³±±@¡XjþÝW·„L%¹^uÐÑìf1ùac8Û
 endstream
 endobj
-8774 0 obj <<
+8742 0 obj <<
 /Type /Page
-/Contents 8775 0 R
-/Resources 8773 0 R
+/Contents 8743 0 R
+/Resources 8741 0 R
 /MediaBox [0 0 612 792]
-/Parent 8383 0 R
-/Annots [ 8657 0 R 8662 0 R 8663 0 R 8664 0 R 8665 0 R 8666 0 R 8667 0 R 8668 0 R 8669 0 R 8670 0 R 8671 0 R 8672 0 R 8673 0 R 8674 0 R 8675 0 R 8676 0 R 8677 0 R 8678 0 R 8679 0 R 8680 0 R 8681 0 R 8682 0 R 8683 0 R 8684 0 R 8685 0 R 8686 0 R 8687 0 R 8688 0 R 8689 0 R 8690 0 R 8691 0 R 8692 0 R 8693 0 R 8694 0 R 8695 0 R 8696 0 R 8697 0 R 8698 0 R 8699 0 R 8700 0 R 8701 0 R 8702 0 R 8703 0 R 8704 0 R 8705 0 R 8706 0 R 8707 0 R 8708 0 R 8709 0 R 8710 0 R 8711 0 R 8712 0 R 8713 0 R 8714 0 R 8715 0 R 8716 0 R 8717 0 R 8718 0 R 8719 0 R 8720 0 R 8721 0 R 8722 0 R 8723 0 R 8724 0 R 8725 0 R 8726 0 R 8727 0 R 8728 0 R 8729 0 R 8730 0 R 8731 0 R 8732 0 R 8733 0 R 8734 0 R 8735 0 R 8736 0 R 8737 0 R 8738 0 R 8739 0 R 8740 0 R 8741 0 R 8742 0 R 8743 0 R 8744 0 R 8745 0 R 8746 0 R 8747 0 R 8748 0 R 8749 0 R 8750 0 R 8751 0 R 8752 0 R 8753 0 R 8754 0 R 8755 0 R 8756 0 R 8757 0 R 8758 0 R 8759 0 R 8760 0 R 8761 0 R 8762 0 R 8763 0 R 8764 0 R 8765 0 R 8766 0 R 8767 0 R 8768 0 R 8769 0 R 8770 0 R 8771 0 R ]
+/Parent 8351 0 R
+/Annots [ 8625 0 R 8630 0 R 8631 0 R 8632 0 R 8633 0 R 8634 0 R 8635 0 R 8636 0 R 8637 0 R 8638 0 R 8639 0 R 8640 0 R 8641 0 R 8642 0 R 8643 0 R 8644 0 R 8645 0 R 8646 0 R 8647 0 R 8648 0 R 8649 0 R 8650 0 R 8651 0 R 8652 0 R 8653 0 R 8654 0 R 8655 0 R 8656 0 R 8657 0 R 8658 0 R 8659 0 R 8660 0 R 8661 0 R 8662 0 R 8663 0 R 8664 0 R 8665 0 R 8666 0 R 8667 0 R 8668 0 R 8669 0 R 8670 0 R 8671 0 R 8672 0 R 8673 0 R 8674 0 R 8675 0 R 8676 0 R 8677 0 R 8678 0 R 8679 0 R 8680 0 R 8681 0 R 8682 0 R 8683 0 R 8684 0 R 8685 0 R 8686 0 R 8687 0 R 8688 0 R 8689 0 R 8690 0 R 8691 0 R 8692 0 R 8693 0 R 8694 0 R 8695 0 R 8696 0 R 8697 0 R 8698 0 R 8699 0 R 8700 0 R 8701 0 R 8702 0 R 8703 0 R 8704 0 R 8705 0 R 8706 0 R 8707 0 R 8708 0 R 8709 0 R 8710 0 R 8711 0 R 8712 0 R 8713 0 R 8714 0 R 8715 0 R 8716 0 R 8717 0 R 8718 0 R 8719 0 R 8720 0 R 8721 0 R 8722 0 R 8723 0 R 8724 0 R 8725 0 R 8726 0 R 8727 0 R 8728 0 R 8729 0 R 8730 0 R 8731 0 R 8732 0 R 8733 0 R 8734 0 R 8735 0 R 8736 0 R 8737 0 R 8738 0 R 8739 0 R ]
 >> endobj
-8657 0 obj <<
+8625 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.138 646.546 213.494 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.329) >>
 >> endobj
-8662 0 obj <<
+8630 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.714 632.895 242.07 644.585]
 /Subtype /Link
 /A << /S /GoTo /D (page.349) >>
 >> endobj
-8663 0 obj <<
+8631 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.38 619.244 237.737 630.388]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-8664 0 obj <<
+8632 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [194.774 605.593 213.131 616.992]
 /Subtype /Link
 /A << /S /GoTo /D (page.488) >>
 >> endobj
-8665 0 obj <<
+8633 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [253.956 591.942 272.312 603.341]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-8666 0 obj <<
+8634 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.168 578.29 228.524 589.859]
 /Subtype /Link
 /A << /S /GoTo /D (page.449) >>
 >> endobj
-8667 0 obj <<
+8635 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.926 564.639 232.282 576.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-8668 0 obj <<
+8636 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.986 550.988 224.343 562.677]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-8669 0 obj <<
+8637 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [209.623 537.337 227.979 548.736]
 /Subtype /Link
 /A << /S /GoTo /D (page.435) >>
 >> endobj
-8670 0 obj <<
+8638 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.653 537.337 251.009 548.736]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-8671 0 obj <<
+8639 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.366 510.034 252.723 521.434]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-8672 0 obj <<
+8640 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.259 496.383 259.615 508.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.530) >>
 >> endobj
-8673 0 obj <<
+8641 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.532 482.732 222.888 494.422]
 /Subtype /Link
 /A << /S /GoTo /D (page.436) >>
 >> endobj
-8674 0 obj <<
+8642 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.199 469.081 260.555 480.77]
 /Subtype /Link
 /A << /S /GoTo /D (page.487) >>
 >> endobj
-8675 0 obj <<
+8643 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [187.199 455.43 205.555 466.574]
 /Subtype /Link
 /A << /S /GoTo /D (page.458) >>
 >> endobj
-8676 0 obj <<
+8644 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.229 455.43 228.585 466.574]
 /Subtype /Link
 /A << /S /GoTo /D (page.459) >>
 >> endobj
-8677 0 obj <<
+8645 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.047 441.779 218.403 453.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.213) >>
 >> endobj
-8678 0 obj <<
+8646 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [256.683 428.127 275.04 439.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.436) >>
 >> endobj
-8679 0 obj <<
+8647 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [243.108 414.476 261.464 426.166]
 /Subtype /Link
 /A << /S /GoTo /D (page.489) >>
 >> endobj
-8680 0 obj <<
+8648 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.289 389.163 211.646 400.852]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-8681 0 obj <<
+8649 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [243.865 375.511 262.221 387.201]
 /Subtype /Link
 /A << /S /GoTo /D (page.488) >>
 >> endobj
-8682 0 obj <<
+8650 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [189.592 350.198 202.494 361.766]
 /Subtype /Link
 /A << /S /GoTo /D (page.59) >>
 >> endobj
-8683 0 obj <<
+8651 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.744 336.547 261.1 348.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.483) >>
 >> endobj
-8684 0 obj <<
+8652 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.411 322.895 273.767 334.585]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-8685 0 obj <<
+8653 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.956 309.244 232.858 320.644]
 /Subtype /Link
 /A << /S /GoTo /D (page.38) >>
 >> endobj
-8686 0 obj <<
+8654 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [237.532 309.244 250.434 320.644]
 /Subtype /Link
 /A << /S /GoTo /D (page.72) >>
 >> endobj
-8687 0 obj <<
+8655 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.108 309.244 273.464 320.644]
 /Subtype /Link
 /A << /S /GoTo /D (page.114) >>
 >> endobj
-8688 0 obj <<
+8656 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [278.138 309.244 296.494 320.644]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-8689 0 obj <<
+8657 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [189.805 295.593 208.161 307.283]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-8690 0 obj <<
+8658 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.835 281.942 209.191 293.631]
 /Subtype /Link
 /A << /S /GoTo /D (page.249) >>
 >> endobj
-8691 0 obj <<
+8659 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [187.805 268.291 206.161 279.98]
 /Subtype /Link
 /A << /S /GoTo /D (page.298) >>
 >> endobj
-8692 0 obj <<
+8660 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.835 268.291 229.191 279.98]
 /Subtype /Link
 /A << /S /GoTo /D (page.300) >>
 >> endobj
-8693 0 obj <<
+8661 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [233.865 268.291 252.221 279.98]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-8694 0 obj <<
+8662 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.774 254.639 223.131 266.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-8695 0 obj <<
+8663 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.138 240.988 246.494 252.678]
 /Subtype /Link
 /A << /S /GoTo /D (page.516) >>
 >> endobj
-8696 0 obj <<
+8664 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.926 227.337 229.282 239.027]
 /Subtype /Link
 /A << /S /GoTo /D (page.451) >>
 >> endobj
-8697 0 obj <<
+8665 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.562 213.686 209.009 225.375]
 /Subtype /Link
 /A << /S /GoTo /D (page.4) >>
 >> endobj
-8698 0 obj <<
+8666 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.683 213.686 232.04 225.375]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-8699 0 obj <<
+8667 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [268.562 200.035 286.918 211.724]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-8700 0 obj <<
+8668 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.623 186.384 245.524 198.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.10) >>
 >> endobj
-8701 0 obj <<
+8669 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [250.199 186.384 263.1 198.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.19) >>
 >> endobj
-8702 0 obj <<
+8670 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [267.774 186.384 286.131 198.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.167) >>
 >> endobj
-8703 0 obj <<
+8671 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [290.805 186.384 309.161 198.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-8704 0 obj <<
+8672 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [313.835 186.384 332.191 198.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-8705 0 obj <<
+8673 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.865 186.384 355.222 198.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.288) >>
 >> endobj
-8706 0 obj <<
+8674 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.896 186.384 378.252 198.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.460) >>
 >> endobj
-8707 0 obj <<
+8675 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.926 186.384 401.282 198.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-8708 0 obj <<
+8676 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [243.38 172.732 261.737 184.422]
 /Subtype /Link
 /A << /S /GoTo /D (page.155) >>
 >> endobj
-8709 0 obj <<
+8677 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [266.411 172.732 284.767 184.422]
 /Subtype /Link
 /A << /S /GoTo /D (page.238) >>
 >> endobj
-8710 0 obj <<
+8678 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [248.29 159.081 266.646 170.771]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-8711 0 obj <<
+8679 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.865 145.43 206.767 157.119]
 /Subtype /Link
 /A << /S /GoTo /D (page.15) >>
 >> endobj
-8712 0 obj <<
+8680 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.744 131.779 220.1 143.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-8713 0 obj <<
+8681 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.774 131.779 243.131 143.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.209) >>
 >> endobj
-8714 0 obj <<
+8682 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.38 118.128 214.737 129.527]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-8715 0 obj <<
+8683 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412 632.997 430.356 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.348) >>
 >> endobj
-8716 0 obj <<
+8684 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [445.333 619.448 463.69 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.348) >>
 >> endobj
-8717 0 obj <<
+8685 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.112 605.899 448.468 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.453) >>
 >> endobj
-8718 0 obj <<
+8686 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.93 592.35 450.287 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.209) >>
 >> endobj
-8719 0 obj <<
+8687 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.809 578.8 442.165 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.453) >>
 >> endobj
-8720 0 obj <<
+8688 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.052 565.251 436.408 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.209) >>
 >> endobj
-8721 0 obj <<
+8689 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.355 551.702 422.711 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-8722 0 obj <<
+8690 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [395.173 538.153 413.529 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.278) >>
 >> endobj
-8723 0 obj <<
+8691 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.203 538.153 436.559 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.441) >>
 >> endobj
-8724 0 obj <<
+8692 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [384.87 524.604 403.226 536.003]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-8725 0 obj <<
+8693 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.446 511.054 420.802 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.473) >>
 >> endobj
-8726 0 obj <<
+8694 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.112 497.505 457.468 508.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.477) >>
 >> endobj
-8727 0 obj <<
+8695 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [451.385 483.956 469.741 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.477) >>
 >> endobj
-8728 0 obj <<
+8696 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [398.506 470.407 416.862 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.312) >>
 >> endobj
-8729 0 obj <<
+8697 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [421.537 470.407 439.893 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-8730 0 obj <<
+8698 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.567 456.858 422.923 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.235) >>
 >> endobj
-8731 0 obj <<
+8699 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [451.294 443.308 469.65 454.708]
 /Subtype /Link
 /A << /S /GoTo /D (page.488) >>
 >> endobj
-8732 0 obj <<
+8700 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [395.233 429.759 413.59 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.476) >>
 >> endobj
-8733 0 obj <<
+8701 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.627 416.21 422.984 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.343) >>
 >> endobj
-8734 0 obj <<
+8702 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [390.082 402.661 408.438 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.271) >>
 >> endobj
-8735 0 obj <<
+8703 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.112 402.661 431.468 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.476) >>
 >> endobj
-8736 0 obj <<
+8704 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [398.324 389.112 416.681 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.298) >>
 >> endobj
-8737 0 obj <<
+8705 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.446 375.562 438.802 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-8738 0 obj <<
+8706 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.446 362.013 428.802 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.435) >>
 >> endobj
-8739 0 obj <<
+8707 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [448.961 348.464 467.317 359.863]
 /Subtype /Link
 /A << /S /GoTo /D (page.278) >>
 >> endobj
-8740 0 obj <<
+8708 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [437.415 334.915 455.772 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.438) >>
 >> endobj
-8741 0 obj <<
+8709 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [448.809 321.366 467.165 332.934]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-8742 0 obj <<
+8710 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.93 307.816 435.287 319.385]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-8743 0 obj <<
+8711 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.536 294.267 423.893 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-8744 0 obj <<
+8712 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.173 280.718 396.529 292.286]
 /Subtype /Link
 /A << /S /GoTo /D (page.298) >>
 >> endobj
-8745 0 obj <<
+8713 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.203 280.718 419.559 292.286]
 /Subtype /Link
 /A << /S /GoTo /D (page.399) >>
 >> endobj
-8746 0 obj <<
+8714 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [375.233 267.169 388.135 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.57) >>
 >> endobj
-8747 0 obj <<
+8715 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.809 267.169 411.165 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-8748 0 obj <<
+8716 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.84 267.169 434.196 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-8749 0 obj <<
+8717 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.87 267.169 457.226 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.428) >>
 >> endobj
-8750 0 obj <<
+8718 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [461.9 267.169 480.256 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.430) >>
 >> endobj
-8751 0 obj <<
+8719 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.355 253.62 421.711 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-8752 0 obj <<
+8720 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.31 240.07 441.666 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.435) >>
 >> endobj
-8753 0 obj <<
+8721 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.052 226.521 448.408 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.154) >>
 >> endobj
-8754 0 obj <<
+8722 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.082 226.521 471.438 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.155) >>
 >> endobj
-8755 0 obj <<
+8723 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [476.112 226.521 494.468 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.204) >>
 >> endobj
-8756 0 obj <<
+8724 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [499.143 226.521 517.499 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.237) >>
 >> endobj
-8757 0 obj <<
+8725 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [522.173 226.521 540.529 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.253) >>
 >> endobj
-8758 0 obj <<
+8726 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [434.355 212.972 447.256 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.58) >>
 >> endobj
-8759 0 obj <<
+8727 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [451.93 212.972 464.832 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-8760 0 obj <<
+8728 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [469.506 212.972 487.862 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.155) >>
 >> endobj
-8761 0 obj <<
+8729 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.355 199.423 448.711 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.481) >>
 >> endobj
-8762 0 obj <<
+8730 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.021 185.874 399.923 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.35) >>
 >> endobj
-8763 0 obj <<
+8731 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.324 172.324 409.681 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.251) >>
 >> endobj
-8764 0 obj <<
+8732 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.355 172.324 432.711 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.477) >>
 >> endobj
-8765 0 obj <<
+8733 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [381.203 158.775 399.559 170.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-8766 0 obj <<
+8734 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.233 158.775 422.59 170.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.439) >>
 >> endobj
-8767 0 obj <<
+8735 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [373.355 145.226 391.711 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.326) >>
 >> endobj
-8768 0 obj <<
+8736 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.112 131.677 417.468 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.328) >>
 >> endobj
-8769 0 obj <<
+8737 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.324 118.128 401.681 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.329) >>
 >> endobj
-8770 0 obj <<
+8738 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.355 118.128 424.711 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.334) >>
 >> endobj
-8771 0 obj <<
+8739 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.385 118.128 447.741 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-8776 0 obj <<
-/D [8774 0 R /XYZ 100.892 685.529 null]
+8744 0 obj <<
+/D [8742 0 R /XYZ 100.892 685.529 null]
 >> endobj
-8773 0 obj <<
+8741 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8884 0 obj <<
+8852 0 obj <<
 /Length 1383      
 /Filter /FlateDecode
 >>
@@ -58758,757 +57931,757 @@
 4¸X¾_Nþ{Îm–
 endstream
 endobj
-8883 0 obj <<
+8851 0 obj <<
 /Type /Page
-/Contents 8884 0 R
-/Resources 8882 0 R
+/Contents 8852 0 R
+/Resources 8850 0 R
 /MediaBox [0 0 612 792]
-/Parent 8383 0 R
-/Annots [ 8772 0 R 8777 0 R 8778 0 R 8779 0 R 8780 0 R 8781 0 R 8782 0 R 8783 0 R 8784 0 R 8785 0 R 8786 0 R 8787 0 R 8788 0 R 8789 0 R 8790 0 R 8791 0 R 8792 0 R 8793 0 R 8794 0 R 8795 0 R 8796 0 R 8797 0 R 8798 0 R 8799 0 R 8800 0 R 8801 0 R 8802 0 R 8803 0 R 8804 0 R 8805 0 R 8806 0 R 8807 0 R 8808 0 R 8809 0 R 8810 0 R 8811 0 R 8812 0 R 8813 0 R 8814 0 R 8815 0 R 8816 0 R 8817 0 R 8818 0 R 8819 0 R 8820 0 R 8821 0 R 8822 0 R 8823 0 R 8824 0 R 8825 0 R 8826 0 R 8827 0 R 8828 0 R 8829 0 R 8830 0 R 8831 0 R 8832 0 R 8833 0 R 8834 0 R 8835 0 R 8836 0 R 8837 0 R 8838 0 R 8839 0 R 8840 0 R 8841 0 R 8842 0 R 8843 0 R 8844 0 R 8845 0 R 8846 0 R 8847 0 R 8848 0 R 8849 0 R 8850 0 R 8851 0 R 8852 0 R 8853 0 R 8854 0 R 8855 0 R 8856 0 R 8857 0 R 8858 0 R 8859 0 R 8860 0 R 8861 0 R 8862 0 R 8863 0 R 8864 0 R 8865 0 R 8866 0 R 8867 0 R 8868 0 R 8869 0 R 8870 0 R 8871 0 R 8872 0 R 8873 0 R 8874 0 R 8875 0 R 8876 0 R 8877 0 R 8878 0 R 8879 0 R 8880 0 R ]
+/Parent 8351 0 R
+/Annots [ 8740 0 R 8745 0 R 8746 0 R 8747 0 R 8748 0 R 8749 0 R 8750 0 R 8751 0 R 8752 0 R 8753 0 R 8754 0 R 8755 0 R 8756 0 R 8757 0 R 8758 0 R 8759 0 R 8760 0 R 8761 0 R 8762 0 R 8763 0 R 8764 0 R 8765 0 R 8766 0 R 8767 0 R 8768 0 R 8769 0 R 8770 0 R 8771 0 R 8772 0 R 8773 0 R 8774 0 R 8775 0 R 8776 0 R 8777 0 R 8778 0 R 8779 0 R 8780 0 R 8781 0 R 8782 0 R 8783 0 R 8784 0 R 8785 0 R 8786 0 R 8787 0 R 8788 0 R 8789 0 R 8790 0 R 8791 0 R 8792 0 R 8793 0 R 8794 0 R 8795 0 R 8796 0 R 8797 0 R 8798 0 R 8799 0 R 8800 0 R 8801 0 R 8802 0 R 8803 0 R 8804 0 R 8805 0 R 8806 0 R 8807 0 R 8808 0 R 8809 0 R 8810 0 R 8811 0 R 8812 0 R 8813 0 R 8814 0 R 8815 0 R 8816 0 R 8817 0 R 8818 0 R 8819 0 R 8820 0 R 8821 0 R 8822 0 R 8823 0 R 8824 0 R 8825 0 R 8826 0 R 8827 0 R 8828 0 R 8829 0 R 8830 0 R 8831 0 R 8832 0 R 8833 0 R 8834 0 R 8835 0 R 8836 0 R 8837 0 R 8838 0 R 8839 0 R 8840 0 R 8841 0 R 8842 0 R 8843 0 R 8844 0 R 8845 0 R 8846 0 R 8847 0 R 8848 0 R ]
 >> endobj
-8772 0 obj <<
+8740 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [260.994 646.546 268.441 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.6) >>
 >> endobj
-8777 0 obj <<
+8745 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [231.341 632.931 249.698 644.076]
 /Subtype /Link
 /A << /S /GoTo /D (page.461) >>
 >> endobj
-8778 0 obj <<
+8746 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.372 632.931 272.728 644.076]
 /Subtype /Link
 /A << /S /GoTo /D (page.497) >>
 >> endobj
-8779 0 obj <<
+8747 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.675 619.317 260.031 630.885]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-8780 0 obj <<
+8748 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [235.644 605.702 254.001 616.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-8781 0 obj <<
+8749 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [237.16 592.087 255.516 603.231]
 /Subtype /Link
 /A << /S /GoTo /D (page.175) >>
 >> endobj
-8782 0 obj <<
+8750 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [260.19 592.087 278.546 603.231]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-8783 0 obj <<
+8751 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [283.22 592.087 301.576 603.231]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-8784 0 obj <<
+8752 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [306.251 592.087 324.607 603.231]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-8785 0 obj <<
+8753 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [265.947 578.472 284.304 590.162]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-8786 0 obj <<
+8754 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [311.735 564.857 330.092 576.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.496) >>
 >> endobj
-8787 0 obj <<
+8755 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [265.099 540.187 283.455 551.876]
 /Subtype /Link
 /A << /S /GoTo /D (page.434) >>
 >> endobj
-8788 0 obj <<
+8756 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.16 526.572 254.516 538.14]
 /Subtype /Link
 /A << /S /GoTo /D (page.348) >>
 >> endobj
-8789 0 obj <<
+8757 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [243.735 512.957 262.091 524.646]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-8790 0 obj <<
+8758 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.978 499.342 260.334 511.032]
 /Subtype /Link
 /A << /S /GoTo /D (page.461) >>
 >> endobj
-8791 0 obj <<
+8759 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [302.6 485.727 310.047 497.417]
 /Subtype /Link
 /A << /S /GoTo /D (page.7) >>
 >> endobj
-8792 0 obj <<
+8760 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [288.341 472.113 306.698 483.802]
 /Subtype /Link
 /A << /S /GoTo /D (page.271) >>
 >> endobj
-8793 0 obj <<
+8761 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [277.22 458.498 295.576 470.187]
 /Subtype /Link
 /A << /S /GoTo /D (page.474) >>
 >> endobj
-8794 0 obj <<
+8762 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [309.069 444.883 327.425 456.572]
 /Subtype /Link
 /A << /S /GoTo /D (page.498) >>
 >> endobj
-8795 0 obj <<
+8763 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [284.796 431.268 303.152 442.958]
 /Subtype /Link
 /A << /S /GoTo /D (page.280) >>
 >> endobj
-8796 0 obj <<
+8764 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [307.826 431.268 326.182 442.958]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-8797 0 obj <<
+8765 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [316.432 417.653 334.789 429.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.449) >>
 >> endobj
-8798 0 obj <<
+8766 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [318.796 404.039 337.152 415.728]
 /Subtype /Link
 /A << /S /GoTo /D (page.173) >>
 >> endobj
-8799 0 obj <<
+8767 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [264.644 390.424 283.001 402.113]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-8800 0 obj <<
+8768 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [306.978 376.809 325.334 388.498]
 /Subtype /Link
 /A << /S /GoTo /D (page.359) >>
 >> endobj
-8801 0 obj <<
+8769 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [314.508 363.194 332.864 374.884]
 /Subtype /Link
 /A << /S /GoTo /D (page.399) >>
 >> endobj
-8802 0 obj <<
+8770 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [307.372 349.579 325.728 361.269]
 /Subtype /Link
 /A << /S /GoTo /D (page.147) >>
 >> endobj
-8803 0 obj <<
+8771 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [303.735 335.964 322.092 347.654]
 /Subtype /Link
 /A << /S /GoTo /D (page.183) >>
 >> endobj
-8804 0 obj <<
+8772 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [301.978 322.35 320.334 334.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.400) >>
 >> endobj
-8805 0 obj <<
+8773 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [312.402 308.735 330.758 320.424]
 /Subtype /Link
 /A << /S /GoTo /D (page.470) >>
 >> endobj
-8806 0 obj <<
+8774 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.341 295.12 252.698 306.688]
 /Subtype /Link
 /A << /S /GoTo /D (page.481) >>
 >> endobj
-8807 0 obj <<
+8775 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.22 281.505 250.576 293.074]
 /Subtype /Link
 /A << /S /GoTo /D (page.326) >>
 >> endobj
-8808 0 obj <<
+8776 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.25 281.505 273.607 293.074]
 /Subtype /Link
 /A << /S /GoTo /D (page.327) >>
 >> endobj
-8809 0 obj <<
+8777 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [258.947 267.89 277.304 279.58]
 /Subtype /Link
 /A << /S /GoTo /D (page.474) >>
 >> endobj
-8810 0 obj <<
+8778 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [248.947 254.276 267.304 265.965]
 /Subtype /Link
 /A << /S /GoTo /D (page.241) >>
 >> endobj
-8811 0 obj <<
+8779 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [252.281 240.661 270.637 252.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.436) >>
 >> endobj
-8812 0 obj <<
+8780 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [275.311 240.661 293.667 252.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.452) >>
 >> endobj
-8813 0 obj <<
+8781 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [298.341 240.661 316.698 252.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.453) >>
 >> endobj
-8814 0 obj <<
+8782 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.22 227.046 264.576 238.736]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-8815 0 obj <<
+8783 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [269.25 227.046 287.607 238.736]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-8816 0 obj <<
+8784 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [292.281 227.046 310.637 238.736]
 /Subtype /Link
 /A << /S /GoTo /D (page.336) >>
 >> endobj
-8817 0 obj <<
+8785 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [315.311 227.046 333.667 238.736]
 /Subtype /Link
 /A << /S /GoTo /D (page.341) >>
 >> endobj
-8818 0 obj <<
+8786 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.978 213.431 261.334 224.831]
 /Subtype /Link
 /A << /S /GoTo /D (page.508) >>
 >> endobj
-8819 0 obj <<
+8787 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [289.917 199.816 308.273 211.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.277) >>
 >> endobj
-8820 0 obj <<
+8788 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [239.281 186.202 257.637 197.346]
 /Subtype /Link
 /A << /S /GoTo /D (page.438) >>
 >> endobj
-8821 0 obj <<
+8789 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [262.978 172.587 281.334 184.276]
 /Subtype /Link
 /A << /S /GoTo /D (page.154) >>
 >> endobj
-8822 0 obj <<
+8790 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [286.008 172.587 304.364 184.276]
 /Subtype /Link
 /A << /S /GoTo /D (page.174) >>
 >> endobj
-8823 0 obj <<
+8791 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [309.038 172.587 327.395 184.276]
 /Subtype /Link
 /A << /S /GoTo /D (page.326) >>
 >> endobj
-8824 0 obj <<
+8792 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [332.069 172.587 350.425 184.276]
 /Subtype /Link
 /A << /S /GoTo /D (page.330) >>
 >> endobj
-8825 0 obj <<
+8793 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.099 158.972 259.455 170.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.429) >>
 >> endobj
-8826 0 obj <<
+8794 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [328.523 145.357 346.879 157.047]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-8827 0 obj <<
+8795 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [299.947 131.742 318.304 143.142]
 /Subtype /Link
 /A << /S /GoTo /D (page.505) >>
 >> endobj
-8828 0 obj <<
+8796 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [297.19 118.128 315.546 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.436) >>
 >> endobj
-8829 0 obj <<
+8797 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [541.013 646.546 559.369 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-8830 0 obj <<
+8798 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.588 632.997 464.945 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-8831 0 obj <<
+8799 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [469.619 632.997 487.975 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.449) >>
 >> endobj
-8832 0 obj <<
+8800 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.831 619.448 463.187 630.847]
 /Subtype /Link
 /A << /S /GoTo /D (page.153) >>
 >> endobj
-8833 0 obj <<
+8801 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [467.861 619.448 486.217 630.847]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-8834 0 obj <<
+8802 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [490.891 619.448 509.248 630.847]
 /Subtype /Link
 /A << /S /GoTo /D (page.326) >>
 >> endobj
-8835 0 obj <<
+8803 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [513.922 619.448 532.278 630.847]
 /Subtype /Link
 /A << /S /GoTo /D (page.429) >>
 >> endobj
-8836 0 obj <<
+8804 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [536.952 619.448 555.308 630.847]
 /Subtype /Link
 /A << /S /GoTo /D (page.430) >>
 >> endobj
-8837 0 obj <<
+8805 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [559.982 619.448 578.339 630.847]
 /Subtype /Link
 /A << /S /GoTo /D (page.435) >>
 >> endobj
-8838 0 obj <<
+8806 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [583.013 619.448 601.369 630.847]
 /Subtype /Link
 /A << /S /GoTo /D (page.446) >>
 >> endobj
-8839 0 obj <<
+8807 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [606.043 619.448 624.399 630.847]
 /Subtype /Link
 /A << /S /GoTo /D (page.454) >>
 >> endobj
-8840 0 obj <<
+8808 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [470.756 605.899 489.112 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.325) >>
 >> endobj
-8841 0 obj <<
+8809 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [482.938 592.35 495.84 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.10) >>
 >> endobj
-8842 0 obj <<
+8810 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [477.483 578.8 490.385 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.20) >>
 >> endobj
-8843 0 obj <<
+8811 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [486.74 551.702 505.096 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-8844 0 obj <<
+8812 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [501.073 538.153 519.429 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.349) >>
 >> endobj
-8845 0 obj <<
+8813 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [470.346 524.604 488.702 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.435) >>
 >> endobj
-8846 0 obj <<
+8814 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [486.71 511.054 505.066 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.435) >>
 >> endobj
-8847 0 obj <<
+8815 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.134 497.505 459.49 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.288) >>
 >> endobj
-8848 0 obj <<
+8816 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.164 497.505 482.52 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-8849 0 obj <<
+8817 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [505.605 470.407 523.961 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.326) >>
 >> endobj
-8850 0 obj <<
+8818 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [483.211 456.858 501.567 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.326) >>
 >> endobj
-8851 0 obj <<
+8819 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [440.588 443.308 458.945 454.708]
 /Subtype /Link
 /A << /S /GoTo /D (page.249) >>
 >> endobj
-8852 0 obj <<
+8820 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [461.082 416.21 479.439 427.354]
 /Subtype /Link
 /A << /S /GoTo /D (page.120) >>
 >> endobj
-8853 0 obj <<
+8821 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [473.164 402.661 486.066 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.85) >>
 >> endobj
-8854 0 obj <<
+8822 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.891 389.112 463.248 400.511]
 /Subtype /Link
 /A << /S /GoTo /D (page.469) >>
 >> endobj
-8855 0 obj <<
+8823 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.77 375.562 508.126 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.487) >>
 >> endobj
-8856 0 obj <<
+8824 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [473.649 362.013 492.005 373.581]
 /Subtype /Link
 /A << /S /GoTo /D (page.540) >>
 >> endobj
-8857 0 obj <<
+8825 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [470.134 348.464 488.49 359.863]
 /Subtype /Link
 /A << /S /GoTo /D (page.540) >>
 >> endobj
-8858 0 obj <<
+8826 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [493.164 348.464 511.52 359.863]
 /Subtype /Link
 /A << /S /GoTo /D (page.544) >>
 >> endobj
-8859 0 obj <<
+8827 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [500.619 334.915 518.975 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.326) >>
 >> endobj
-8860 0 obj <<
+8828 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [524.982 321.366 543.339 332.765]
 /Subtype /Link
 /A << /S /GoTo /D (page.335) >>
 >> endobj
-8861 0 obj <<
+8829 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.74 307.816 457.096 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.452) >>
 >> endobj
-8862 0 obj <<
+8830 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [486.679 294.267 505.035 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.480) >>
 >> endobj
-8863 0 obj <<
+8831 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.043 280.718 448.399 292.286]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-8864 0 obj <<
+8832 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [435.573 267.169 448.475 278.737]
 /Subtype /Link
 /A << /S /GoTo /D (page.10) >>
 >> endobj
-8865 0 obj <<
+8833 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.149 267.169 471.505 278.737]
 /Subtype /Link
 /A << /S /GoTo /D (page.448) >>
 >> endobj
-8866 0 obj <<
+8834 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [476.179 267.169 494.535 278.737]
 /Subtype /Link
 /A << /S /GoTo /D (page.511) >>
 >> endobj
-8867 0 obj <<
+8835 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [467.891 253.62 486.248 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.375) >>
 >> endobj
-8868 0 obj <<
+8836 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [514.376 240.07 532.732 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.440) >>
 >> endobj
-8869 0 obj <<
+8837 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.134 226.521 482.49 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.453) >>
 >> endobj
-8870 0 obj <<
+8838 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [468.998 199.423 487.355 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.441) >>
 >> endobj
-8871 0 obj <<
+8839 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [482.104 185.874 500.46 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.434) >>
 >> endobj
-8872 0 obj <<
+8840 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [523.104 172.324 541.46 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.442) >>
 >> endobj
-8873 0 obj <<
+8841 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [546.134 172.324 564.49 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.443) >>
 >> endobj
-8874 0 obj <<
+8842 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [569.164 172.324 587.52 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.446) >>
 >> endobj
-8875 0 obj <<
+8843 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [592.195 172.324 610.551 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.454) >>
 >> endobj
-8876 0 obj <<
+8844 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [531.71 158.775 550.066 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.453) >>
 >> endobj
-8877 0 obj <<
+8845 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [484.679 145.226 503.035 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.454) >>
 >> endobj
-8878 0 obj <<
+8846 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [494.831 131.677 513.187 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.441) >>
 >> endobj
-8879 0 obj <<
+8847 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [482.225 118.128 500.581 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.434) >>
 >> endobj
-8880 0 obj <<
+8848 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [505.255 118.128 523.611 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.450) >>
 >> endobj
-8885 0 obj <<
-/D [8883 0 R /XYZ 151.701 685.529 null]
+8853 0 obj <<
+/D [8851 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8882 0 obj <<
+8850 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9054 0 obj <<
+9022 0 obj <<
 /Length 1558      
 /Filter /FlateDecode
 >>
@@ -59529,1177 +58702,1177 @@
 Ãëb!ìñ[ÃËiœtPXI¡/ÇÃ4ú¼z½UÑ‘­‘z5½{é•¥Ô{ɱI2}“”íÍâÌiN•·S¯IòƒÁ€¶+×0EÝö°/˜x[îëä°9T‚0²¸:Þ.uÔºQÙi«\‘·M[t¹òÓ¥*ÂÐg`}*ď£ñFÁÿR.ÀwH@– _° 0²040gmò×Èו‘¶3ôÕp1XE‘UvOÊñ­åXÀïa—êùçv·ú¤Ù÷<
 endstream
 endobj
-9053 0 obj <<
+9021 0 obj <<
 /Type /Page
-/Contents 9054 0 R
-/Resources 9052 0 R
+/Contents 9022 0 R
+/Resources 9020 0 R
 /MediaBox [0 0 612 792]
-/Parent 8383 0 R
-/Annots [ 8881 0 R 8886 0 R 8887 0 R 8888 0 R 8889 0 R 8890 0 R 8891 0 R 8892 0 R 8893 0 R 8894 0 R 8895 0 R 8896 0 R 8897 0 R 8898 0 R 8899 0 R 8900 0 R 8901 0 R 8902 0 R 8903 0 R 8904 0 R 8905 0 R 8906 0 R 8907 0 R 8908 0 R 8909 0 R 8910 0 R 8911 0 R 8912 0 R 8913 0 R 8914 0 R 8915 0 R 8916 0 R 8917 0 R 8918 0 R 8919 0 R 8920 0 R 8921 0 R 8922 0 R 8923 0 R 8924 0 R 8925 0 R 8926 0 R 8927 0 R 8928 0 R 8929 0 R 8930 0 R 8931 0 R 8932 0 R 8933 0 R 8934 0 R 8935 0 R 8936 0 R 8937 0 R 8938 0 R 8939 0 R 8940 0 R 8941 0 R 8942 0 R 8943 0 R 8944 0 R 8945 0 R 8946 0 R 8947 0 R 8948 0 R 8949 0 R 8950 0 R 8951 0 R 8952 0 R 8953 0 R 8954 0 R 8955 0 R 8956 0 R 8957 0 R 8958 0 R 8959 0 R 8960 0 R 8961 0 R 8962 0 R 8963 0 R 8964 0 R 8965 0 R 8966 0 R 8967 0 R 8968 0 R 8969 0 R 8970 0 R 8971 0 R 8972 0 R 8973 0 R 8974 0 R 8975 0 R 8976 0 R 8977 0 R 8978 0 R 8979 0 R 8980 0 R 8981 0 R 8982 0 R 8983 0 R 8984 0 R 8985 0 R 8986 0 R 8987 0 R 8988 0 R 8989 0 R 8990 0 R 8991 0 R 8992 0 R 8993 0 R 8994 0 R 8995 0 R 8996 0 R 8997 0 R 8998 0 R 8999 0 R 9000 0 R 9001 0 R 9002 0 R 9003 0 R 9004 0 R 9005 0 R 9006 0 R 9007 0 R 9008 0 R 9009 0 R 9010 0 R 9011 0 R 9012 0 R 9013 0 R 9014 0 R 9015 0 R 9016 0 R 9017 0 R 9018 0 R 9019 0 R 9020 0 R 9021 0 R 9022 0 R 9023 0 R 9024 0 R 9025 0 R 9026 0 R 9027 0 R 9028 0 R 9029 0 R 9030 0 R 9031 0 R 9032 0 R 9033 0 R 9034 0 R 9035 0 R 9036 0 R 9037 0 R 9038 0 R 9039 0 R 9040 0 R 9041 0 R 9042 0 R 9043 0 R 9044 0 R 9045 0 R 9046 0 R 9047 0 R 9048 0 R 9049 0 R ]
+/Parent 8351 0 R
+/Annots [ 8849 0 R 8854 0 R 8855 0 R 8856 0 R 8857 0 R 8858 0 R 8859 0 R 8860 0 R 8861 0 R 8862 0 R 8863 0 R 8864 0 R 8865 0 R 8866 0 R 8867 0 R 8868 0 R 8869 0 R 8870 0 R 8871 0 R 8872 0 R 8873 0 R 8874 0 R 8875 0 R 8876 0 R 8877 0 R 8878 0 R 8879 0 R 8880 0 R 8881 0 R 8882 0 R 8883 0 R 8884 0 R 8885 0 R 8886 0 R 8887 0 R 8888 0 R 8889 0 R 8890 0 R 8891 0 R 8892 0 R 8893 0 R 8894 0 R 8895 0 R 8896 0 R 8897 0 R 8898 0 R 8899 0 R 8900 0 R 8901 0 R 8902 0 R 8903 0 R 8904 0 R 8905 0 R 8906 0 R 8907 0 R 8908 0 R 8909 0 R 8910 0 R 8911 0 R 8912 0 R 8913 0 R 8914 0 R 8915 0 R 8916 0 R 8917 0 R 8918 0 R 8919 0 R 8920 0 R 8921 0 R 8922 0 R 8923 0 R 8924 0 R 8925 0 R 8926 0 R 8927 0 R 8928 0 R 8929 0 R 8930 0 R 8931 0 R 8932 0 R 8933 0 R 8934 0 R 8935 0 R 8936 0 R 8937 0 R 8938 0 R 8939 0 R 8940 0 R 8941 0 R 8942 0 R 8943 0 R 8944 0 R 8945 0 R 8946 0 R 8947 0 R 8948 0 R 8949 0 R 8950 0 R 8951 0 R 8952 0 R 8953 0 R 8954 0 R 8955 0 R 8956 0 R 8957 0 R 8958 0 R 8959 0 R 8960 0 R 8961 0 R 8962 0 R 8963 0 R 8964 0 R 8965 0 R 8966 0 R 8967 0 R 8968 0 R 8969 0 R 8970 0 R 8971 0 R 8972 0 R 8973 0 R 8974 0 R 8975 0 R 8976 0 R 8977 0 R 8978 0 R 8979 0 R 8980 0 R 8981 0 R 8982 0 R 8983 0 R 8984 0 R 8985 0 R 8986 0 R 8987 0 R 8988 0 R 8989 0 R 8990 0 R 8991 0 R 8992 0 R 8993 0 R 8994 0 R 8995 0 R 8996 0 R 8997 0 R 8998 0 R 8999 0 R 9000 0 R 9001 0 R 9002 0 R 9003 0 R 9004 0 R 9005 0 R 9006 0 R 9007 0 R 9008 0 R 9009 0 R 9010 0 R 9011 0 R 9012 0 R 9013 0 R 9014 0 R 9015 0 R 9016 0 R 9017 0 R ]
 >> endobj
-8881 0 obj <<
+8849 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.35 646.546 208.706 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-8886 0 obj <<
+8854 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [179.441 632.997 192.343 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.87) >>
 >> endobj
-8887 0 obj <<
+8855 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.017 632.997 215.373 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.147) >>
 >> endobj
-8888 0 obj <<
+8856 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.047 632.997 238.403 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.242) >>
 >> endobj
-8889 0 obj <<
+8857 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [243.077 632.997 261.434 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-8890 0 obj <<
+8858 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [266.108 632.997 284.464 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.298) >>
 >> endobj
-8891 0 obj <<
+8859 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [289.138 632.997 307.494 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.325) >>
 >> endobj
-8892 0 obj <<
+8860 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [310.956 632.997 329.312 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.330) >>
 >> endobj
-8893 0 obj <<
+8861 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [333.987 632.997 352.343 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-8894 0 obj <<
+8862 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [357.017 632.997 375.373 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.500) >>
 >> endobj
-8895 0 obj <<
+8863 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.441 619.448 230.797 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.448) >>
 >> endobj
-8896 0 obj <<
+8864 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [211.471 605.899 229.828 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.452) >>
 >> endobj
-8897 0 obj <<
+8865 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.502 605.899 252.858 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.453) >>
 >> endobj
-8898 0 obj <<
+8866 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.714 592.35 238.07 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-8899 0 obj <<
+8867 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.471 578.8 209.827 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.474) >>
 >> endobj
-8900 0 obj <<
+8868 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [194.805 551.702 213.161 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.186) >>
 >> endobj
-8901 0 obj <<
+8869 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.835 551.702 236.191 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.187) >>
 >> endobj
-8902 0 obj <<
+8870 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [240.865 551.702 259.221 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.277) >>
 >> endobj
-8903 0 obj <<
+8871 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [263.896 551.702 282.252 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.400) >>
 >> endobj
-8904 0 obj <<
+8872 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [186.32 538.153 204.676 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.161) >>
 >> endobj
-8905 0 obj <<
+8873 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [209.047 524.604 227.403 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.355) >>
 >> endobj
-8906 0 obj <<
+8874 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.896 511.054 202.252 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.235) >>
 >> endobj
-8907 0 obj <<
+8875 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.562 497.505 228.918 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.145) >>
 >> endobj
-8908 0 obj <<
+8876 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.017 483.956 241.373 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-8909 0 obj <<
+8877 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.199 470.407 209.555 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.249) >>
 >> endobj
-8910 0 obj <<
+8878 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [214.229 470.407 232.585 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.252) >>
 >> endobj
-8911 0 obj <<
+8879 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.017 456.858 248.373 468.257]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-8912 0 obj <<
+8880 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.896 443.308 203.252 454.877]
 /Subtype /Link
 /A << /S /GoTo /D (page.326) >>
 >> endobj
-8913 0 obj <<
+8881 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.32 429.759 254.676 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.243) >>
 >> endobj
-8914 0 obj <<
+8882 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.532 416.21 221.434 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.90) >>
 >> endobj
-8915 0 obj <<
+8883 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.35 402.055 233.706 414.956]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-8916 0 obj <<
+8884 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.32 389.112 213.767 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.8) >>
 >> endobj
-8917 0 obj <<
+8885 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.441 389.112 231.343 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.80) >>
 >> endobj
-8918 0 obj <<
+8886 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.017 389.112 254.373 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.194) >>
 >> endobj
-8919 0 obj <<
+8887 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.047 389.112 277.403 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-8920 0 obj <<
+8888 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [186.888 375.562 194.335 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.8) >>
 >> endobj
-8921 0 obj <<
+8889 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.274 375.562 212.175 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.14) >>
 >> endobj
-8922 0 obj <<
+8890 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.114 375.562 230.016 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.41) >>
 >> endobj
-8923 0 obj <<
+8891 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.955 375.562 247.856 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.80) >>
 >> endobj
-8924 0 obj <<
+8892 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [252.795 375.562 271.152 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.174) >>
 >> endobj
-8925 0 obj <<
+8893 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [276.091 375.562 294.447 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.271) >>
 >> endobj
-8926 0 obj <<
+8894 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [299.386 375.562 317.742 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.286) >>
 >> endobj
-8927 0 obj <<
+8895 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [322.681 375.562 341.037 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.326) >>
 >> endobj
-8928 0 obj <<
+8896 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [345.976 375.562 364.332 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.330) >>
 >> endobj
-8929 0 obj <<
+8897 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [369.271 375.562 387.627 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.333) >>
 >> endobj
-8930 0 obj <<
+8898 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.566 375.562 410.922 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.343) >>
 >> endobj
-8931 0 obj <<
+8899 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.861 375.562 434.218 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-8932 0 obj <<
+8900 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 375.562 457.513 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-8933 0 obj <<
+8901 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.441 364.134 172.797 373.157]
 /Subtype /Link
 /A << /S /GoTo /D (page.498) >>
 >> endobj
-8934 0 obj <<
+8902 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [253.215 348.464 271.571 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.496) >>
 >> endobj
-8935 0 obj <<
+8903 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [187.896 334.915 206.252 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.474) >>
 >> endobj
-8936 0 obj <<
+8904 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.38 321.366 267.737 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.192) >>
 >> endobj
-8937 0 obj <<
+8905 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [272.411 321.366 290.767 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.399) >>
 >> endobj
-8938 0 obj <<
+8906 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [252.714 307.816 271.07 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.400) >>
 >> endobj
-8939 0 obj <<
+8907 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [238.562 294.267 256.918 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.189) >>
 >> endobj
-8940 0 obj <<
+8908 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.017 280.718 264.373 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.183) >>
 >> endobj
-8941 0 obj <<
+8909 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.29 267.169 245.646 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.354) >>
 >> endobj
-8942 0 obj <<
+8910 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [250.32 267.169 268.676 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.356) >>
 >> endobj
-8943 0 obj <<
+8911 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.35 267.169 291.706 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-8944 0 obj <<
+8912 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [296.38 267.169 314.737 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.508) >>
 >> endobj
-8945 0 obj <<
+8913 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.653 253.62 292.009 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.359) >>
 >> endobj
-8946 0 obj <<
+8914 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.562 240.07 259.918 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.189) >>
 >> endobj
-8947 0 obj <<
+8915 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [264.593 240.07 282.949 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.249) >>
 >> endobj
-8948 0 obj <<
+8916 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.896 226.521 263.252 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.190) >>
 >> endobj
-8949 0 obj <<
+8917 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [267.926 226.521 286.282 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.400) >>
 >> endobj
-8950 0 obj <<
+8918 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.35 212.972 217.706 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.474) >>
 >> endobj
-8951 0 obj <<
+8919 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.865 199.423 229.221 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.474) >>
 >> endobj
-8952 0 obj <<
+8920 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.127 185.874 228.028 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.22) >>
 >> endobj
-8953 0 obj <<
+8921 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [233.51 185.874 246.411 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.31) >>
 >> endobj
-8954 0 obj <<
+8922 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [251.893 185.874 264.794 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.35) >>
 >> endobj
-8955 0 obj <<
+8923 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [270.275 185.874 283.177 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.37) >>
 >> endobj
-8956 0 obj <<
+8924 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [288.658 185.874 301.56 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.57) >>
 >> endobj
-8957 0 obj <<
+8925 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [307.041 185.874 319.943 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.66) >>
 >> endobj
-8958 0 obj <<
+8926 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [325.424 185.874 338.326 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.68) >>
 >> endobj
-8959 0 obj <<
+8927 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [343.807 185.874 362.163 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.112) >>
 >> endobj
-8960 0 obj <<
+8928 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [367.644 185.874 386 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-8961 0 obj <<
+8929 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.482 185.874 409.838 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.174) >>
 >> endobj
-8962 0 obj <<
+8930 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.319 185.874 433.675 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.189) >>
 >> endobj
-8963 0 obj <<
+8931 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 185.874 457.513 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.199) >>
 >> endobj
-8964 0 obj <<
+8932 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.441 172.324 172.797 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.235) >>
 >> endobj
-8965 0 obj <<
+8933 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.471 172.324 195.827 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.243) >>
 >> endobj
-8966 0 obj <<
+8934 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.502 172.324 218.858 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.309) >>
 >> endobj
-8967 0 obj <<
+8935 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.532 172.324 241.888 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.323) >>
 >> endobj
-8968 0 obj <<
+8936 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.562 172.324 264.918 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.327) >>
 >> endobj
-8969 0 obj <<
+8937 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [269.593 172.324 287.949 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.335) >>
 >> endobj
-8970 0 obj <<
+8938 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [292.623 172.324 310.979 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.350) >>
 >> endobj
-8971 0 obj <<
+8939 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [315.653 172.324 334.009 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-8972 0 obj <<
+8940 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [338.684 172.324 357.04 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-8973 0 obj <<
+8941 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [361.714 172.324 380.07 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.457) >>
 >> endobj
-8974 0 obj <<
+8942 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.411 158.775 223.767 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.474) >>
 >> endobj
-8975 0 obj <<
+8943 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.926 145.226 235.282 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.474) >>
 >> endobj
-8976 0 obj <<
+8944 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.562 131.677 209.918 143.245]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-8977 0 obj <<
+8945 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.683 118.128 225.04 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.348) >>
 >> endobj
-8978 0 obj <<
+8946 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [425.961 646.546 444.317 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.480) >>
 >> endobj
-8979 0 obj <<
+8947 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [425.264 632.997 443.62 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.480) >>
 >> endobj
-8980 0 obj <<
+8948 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.052 619.448 415.408 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-8981 0 obj <<
+8949 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [380.961 605.899 399.317 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-8982 0 obj <<
+8950 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.809 592.35 431.165 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-8983 0 obj <<
+8951 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.006 578.8 422.362 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.545) >>
 >> endobj
-8984 0 obj <<
+8952 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [379.233 565.251 397.59 576.819]
 /Subtype /Link
 /A << /S /GoTo /D (page.235) >>
 >> endobj
-8985 0 obj <<
+8953 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.264 565.251 420.62 576.819]
 /Subtype /Link
 /A << /S /GoTo /D (page.252) >>
 >> endobj
-8986 0 obj <<
+8954 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [384.839 551.702 403.196 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.460) >>
 >> endobj
-8987 0 obj <<
+8955 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.87 551.702 426.226 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.461) >>
 >> endobj
-8988 0 obj <<
+8956 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.9 551.702 449.256 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.465) >>
 >> endobj
-8989 0 obj <<
+8957 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.93 551.702 472.287 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.467) >>
 >> endobj
-8990 0 obj <<
+8958 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [476.961 551.702 495.317 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-8991 0 obj <<
+8959 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.082 538.153 401.438 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.461) >>
 >> endobj
-8992 0 obj <<
+8960 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.112 538.153 424.468 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-8993 0 obj <<
+8961 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.143 538.153 447.499 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-8994 0 obj <<
+8962 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.567 524.604 432.923 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.459) >>
 >> endobj
-8995 0 obj <<
+8963 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.718 511.054 455.62 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-8996 0 obj <<
+8964 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [460.294 511.054 478.65 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.205) >>
 >> endobj
-8997 0 obj <<
+8965 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [483.324 511.054 501.681 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.375) >>
 >> endobj
-8998 0 obj <<
+8966 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [506.355 511.054 524.711 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.455) >>
 >> endobj
-8999 0 obj <<
+8967 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [376.809 497.505 395.165 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.504) >>
 >> endobj
-9000 0 obj <<
+8968 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.84 497.505 418.196 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.505) >>
 >> endobj
-9001 0 obj <<
+8969 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.112 483.956 462.468 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.327) >>
 >> endobj
-9002 0 obj <<
+8970 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.112 470.407 441.014 481.975]
 /Subtype /Link
 /A << /S /GoTo /D (page.15) >>
 >> endobj
-9003 0 obj <<
+8971 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [445.688 470.407 458.59 481.975]
 /Subtype /Link
 /A << /S /GoTo /D (page.39) >>
 >> endobj
-9004 0 obj <<
+8972 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [463.264 470.407 476.165 481.975]
 /Subtype /Link
 /A << /S /GoTo /D (page.74) >>
 >> endobj
-9005 0 obj <<
+8973 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [480.84 470.407 499.196 481.975]
 /Subtype /Link
 /A << /S /GoTo /D (page.124) >>
 >> endobj
-9006 0 obj <<
+8974 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [427.961 456.858 440.862 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.39) >>
 >> endobj
-9007 0 obj <<
+8975 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [445.537 456.858 458.438 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.74) >>
 >> endobj
-9008 0 obj <<
+8976 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [463.112 456.858 481.468 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.124) >>
 >> endobj
-9009 0 obj <<
+8977 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.627 443.308 436.074 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.7) >>
 >> endobj
-9010 0 obj <<
+8978 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [440.749 443.308 453.65 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.15) >>
 >> endobj
-9011 0 obj <<
+8979 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [458.324 443.308 471.226 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.23) >>
 >> endobj
-9012 0 obj <<
+8980 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [475.9 443.308 488.802 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.39) >>
 >> endobj
-9013 0 obj <<
+8981 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [493.476 443.308 506.378 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.74) >>
 >> endobj
-9014 0 obj <<
+8982 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [511.052 443.308 529.408 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.124) >>
 >> endobj
-9015 0 obj <<
+8983 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.068 429.759 423.424 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.498) >>
 >> endobj
-9016 0 obj <<
+8984 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.31 416.21 421.666 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.498) >>
 >> endobj
-9017 0 obj <<
+8985 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [421.734 402.661 440.091 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.498) >>
 >> endobj
-9018 0 obj <<
+8986 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.476 389.112 437.378 400.68]
 /Subtype /Link
 /A << /S /GoTo /D (page.23) >>
 >> endobj
-9019 0 obj <<
+8987 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.9 375.562 441.256 386.962]
 /Subtype /Link
 /A << /S /GoTo /D (page.499) >>
 >> endobj
-9020 0 obj <<
+8988 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.476 362.013 415.378 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.34) >>
 >> endobj
-9021 0 obj <<
+8989 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [434.021 348.464 446.923 359.863]
 /Subtype /Link
 /A << /S /GoTo /D (page.60) >>
 >> endobj
-9022 0 obj <<
+8990 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [398.567 334.915 416.923 346.314]
 /Subtype /Link
 /A << /S /GoTo /D (page.349) >>
 >> endobj
-9023 0 obj <<
+8991 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [395.536 321.366 413.893 332.51]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-9024 0 obj <<
+8992 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.961 307.816 426.317 318.96]
 /Subtype /Link
 /A << /S /GoTo /D (page.427) >>
 >> endobj
-9025 0 obj <<
+8993 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.415 294.267 425.771 305.667]
 /Subtype /Link
 /A << /S /GoTo /D (page.480) >>
 >> endobj
-9026 0 obj <<
+8994 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.052 280.718 415.408 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.335) >>
 >> endobj
-9027 0 obj <<
+8995 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.779 267.169 472.135 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.438) >>
 >> endobj
-9028 0 obj <<
+8996 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.597 253.62 433.953 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.488) >>
 >> endobj
-9029 0 obj <<
+8997 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [384.385 240.07 397.287 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.10) >>
 >> endobj
-9030 0 obj <<
+8998 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.961 240.07 420.317 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.454) >>
 >> endobj
-9031 0 obj <<
+8999 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.991 240.07 443.347 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.511) >>
 >> endobj
-9032 0 obj <<
+9000 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [478.385 226.521 496.741 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-9033 0 obj <<
+9001 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.324 212.972 437.226 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.74) >>
 >> endobj
-9034 0 obj <<
+9002 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.627 199.423 412.984 210.567]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-9035 0 obj <<
+9003 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.658 199.423 436.014 210.567]
 /Subtype /Link
 /A << /S /GoTo /D (page.487) >>
 >> endobj
-9036 0 obj <<
+9004 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.658 185.874 406.014 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.267) >>
 >> endobj
-9037 0 obj <<
+9005 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.597 172.324 403.953 183.893]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-9038 0 obj <<
+9006 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [502.749 158.775 510.196 170.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.9) >>
 >> endobj
-9039 0 obj <<
+9007 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [514.87 158.775 527.772 170.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.63) >>
 >> endobj
-9040 0 obj <<
+9008 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [532.446 158.775 550.802 170.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.461) >>
 >> endobj
-9041 0 obj <<
+9009 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.658 145.226 429.559 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.10) >>
 >> endobj
-9042 0 obj <<
+9010 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [434.233 145.226 452.59 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.167) >>
 >> endobj
-9043 0 obj <<
+9011 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [457.264 145.226 475.62 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-9044 0 obj <<
+9012 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [480.294 145.226 498.65 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-9045 0 obj <<
+9013 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [503.324 145.226 521.681 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.288) >>
 >> endobj
-9046 0 obj <<
+9014 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [526.355 145.226 544.711 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.460) >>
 >> endobj
-9047 0 obj <<
+9015 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [549.385 145.226 567.741 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.467) >>
 >> endobj
-9048 0 obj <<
+9016 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [389.082 131.677 407.438 143.245]
 /Subtype /Link
 /A << /S /GoTo /D (page.496) >>
 >> endobj
-9049 0 obj <<
+9017 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.749 118.128 432.105 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.480) >>
 >> endobj
-9055 0 obj <<
-/D [9053 0 R /XYZ 100.892 685.529 null]
+9023 0 obj <<
+/D [9021 0 R /XYZ 100.892 685.529 null]
 >> endobj
-9052 0 obj <<
+9020 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9182 0 obj <<
+9150 0 obj <<
 /Length 1460      
 /Filter /FlateDecode
 >>
@@ -60714,890 +59887,890 @@
 ðl9l&ÀÙ¾_Ö‡Ç7)\<å£15ÇáàH_Øî /xÁn_mâï2ý­*ö37&Kÿ° ŒpÿôÚ‡¾ØC0¡þvåò3ÀÛ+ãÀöæDE¦ï/·«½¯]
 endstream
 endobj
-9181 0 obj <<
+9149 0 obj <<
 /Type /Page
-/Contents 9182 0 R
-/Resources 9180 0 R
+/Contents 9150 0 R
+/Resources 9148 0 R
 /MediaBox [0 0 612 792]
-/Parent 9184 0 R
-/Annots [ 9050 0 R 9051 0 R 9056 0 R 9057 0 R 9058 0 R 9059 0 R 9060 0 R 9061 0 R 9062 0 R 9063 0 R 9064 0 R 9065 0 R 9066 0 R 9067 0 R 9068 0 R 9069 0 R 9070 0 R 9071 0 R 9072 0 R 9073 0 R 9074 0 R 9075 0 R 9076 0 R 9077 0 R 9078 0 R 9079 0 R 9080 0 R 9081 0 R 9082 0 R 9083 0 R 9084 0 R 9085 0 R 9086 0 R 9087 0 R 9088 0 R 9089 0 R 9090 0 R 9091 0 R 9092 0 R 9093 0 R 9094 0 R 9095 0 R 9096 0 R 9097 0 R 9098 0 R 9099 0 R 9100 0 R 9101 0 R 9102 0 R 9103 0 R 9104 0 R 9105 0 R 9106 0 R 9107 0 R 9108 0 R 9109 0 R 9110 0 R 9111 0 R 9112 0 R 9113 0 R 9114 0 R 9115 0 R 9116 0 R 9117 0 R 9118 0 R 9119 0 R 9120 0 R 9121 0 R 9122 0 R 9123 0 R 9124 0 R 9125 0 R 9126 0 R 9127 0 R 9128 0 R 9129 0 R 9130 0 R 9131 0 R 9132 0 R 9133 0 R 9134 0 R 9135 0 R 9136 0 R 9137 0 R 9138 0 R 9139 0 R 9140 0 R 9141 0 R 9142 0 R 9143 0 R 9144 0 R 9145 0 R 9146 0 R 9147 0 R 9148 0 R 9149 0 R 9150 0 R 9151 0 R 9152 0 R 9153 0 R 9154 0 R 9155 0 R 9156 0 R 9157 0 R 9158 0 R 9159 0 R 9160 0 R 9161 0 R 9162 0 R 9163 0 R 9164 0 R 9165 0 R 9166 0 R 9167 0 R 9168 0 R 9169 0 R 9170 0 R 9171 0 R 9172 0 R 9173 0 R 9174 0 R 9175 0 R 9176 0 R 9177 0 R ]
+/Parent 9152 0 R
+/Annots [ 9018 0 R 9019 0 R 9024 0 R 9025 0 R 9026 0 R 9027 0 R 9028 0 R 9029 0 R 9030 0 R 9031 0 R 9032 0 R 9033 0 R 9034 0 R 9035 0 R 9036 0 R 9037 0 R 9038 0 R 9039 0 R 9040 0 R 9041 0 R 9042 0 R 9043 0 R 9044 0 R 9045 0 R 9046 0 R 9047 0 R 9048 0 R 9049 0 R 9050 0 R 9051 0 R 9052 0 R 9053 0 R 9054 0 R 9055 0 R 9056 0 R 9057 0 R 9058 0 R 9059 0 R 9060 0 R 9061 0 R 9062 0 R 9063 0 R 9064 0 R 9065 0 R 9066 0 R 9067 0 R 9068 0 R 9069 0 R 9070 0 R 9071 0 R 9072 0 R 9073 0 R 9074 0 R 9075 0 R 9076 0 R 9077 0 R 9078 0 R 9079 0 R 9080 0 R 9081 0 R 9082 0 R 9083 0 R 9084 0 R 9085 0 R 9086 0 R 9087 0 R 9088 0 R 9089 0 R 9090 0 R 9091 0 R 9092 0 R 9093 0 R 9094 0 R 9095 0 R 9096 0 R 9097 0 R 9098 0 R 9099 0 R 9100 0 R 9101 0 R 9102 0 R 9103 0 R 9104 0 R 9105 0 R 9106 0 R 9107 0 R 9108 0 R 9109 0 R 9110 0 R 9111 0 R 9112 0 R 9113 0 R 9114 0 R 9115 0 R 9116 0 R 9117 0 R 9118 0 R 9119 0 R 9120 0 R 9121 0 R 9122 0 R 9123 0 R 9124 0 R 9125 0 R 9126 0 R 9127 0 R 9128 0 R 9129 0 R 9130 0 R 9131 0 R 9132 0 R 9133 0 R 9134 0 R 9135 0 R 9136 0 R 9137 0 R 9138 0 R 9139 0 R 9140 0 R 9141 0 R 9142 0 R 9143 0 R 9144 0 R 9145 0 R ]
 >> endobj
-9050 0 obj <<
+9018 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [286.554 646.546 304.91 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-9051 0 obj <<
+9019 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [309.584 646.546 327.94 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.481) >>
 >> endobj
-9056 0 obj <<
+9024 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [267.16 632.894 285.516 644.583]
 /Subtype /Link
 /A << /S /GoTo /D (page.237) >>
 >> endobj
-9057 0 obj <<
+9025 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [290.19 632.894 308.546 644.583]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-9058 0 obj <<
+9026 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.22 619.241 291.576 630.93]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-9059 0 obj <<
+9027 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [240.22 605.588 258.576 617.278]
 /Subtype /Link
 /A << /S /GoTo /D (page.169) >>
 >> endobj
-9060 0 obj <<
+9028 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [300.281 591.936 318.637 603.625]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-9061 0 obj <<
+9029 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [284.25 578.283 302.607 589.682]
 /Subtype /Link
 /A << /S /GoTo /D (page.434) >>
 >> endobj
-9062 0 obj <<
+9030 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.857 552.943 274.213 564.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-9063 0 obj <<
+9031 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [251.008 538.685 269.364 551.586]
 /Subtype /Link
 /A << /S /GoTo /D (page.313) >>
 >> endobj
-9064 0 obj <<
+9032 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.857 525.638 274.213 537.328]
 /Subtype /Link
 /A << /S /GoTo /D (page.281) >>
 >> endobj
-9065 0 obj <<
+9033 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [278.887 525.638 297.243 537.328]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-9066 0 obj <<
+9034 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [301.917 525.638 320.273 537.328]
 /Subtype /Link
 /A << /S /GoTo /D (page.355) >>
 >> endobj
-9067 0 obj <<
+9035 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [247.164 511.985 260.065 523.675]
 /Subtype /Link
 /A << /S /GoTo /D (page.57) >>
 >> endobj
-9068 0 obj <<
+9036 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [264.774 511.985 277.675 523.675]
 /Subtype /Link
 /A << /S /GoTo /D (page.61) >>
 >> endobj
-9069 0 obj <<
+9037 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [282.384 511.985 300.74 523.675]
 /Subtype /Link
 /A << /S /GoTo /D (page.105) >>
 >> endobj
-9070 0 obj <<
+9038 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [305.449 511.985 323.805 523.675]
 /Subtype /Link
 /A << /S /GoTo /D (page.149) >>
 >> endobj
-9071 0 obj <<
+9039 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [328.513 511.985 346.869 523.675]
 /Subtype /Link
 /A << /S /GoTo /D (page.235) >>
 >> endobj
-9072 0 obj <<
+9040 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [351.578 511.985 369.934 523.675]
 /Subtype /Link
 /A << /S /GoTo /D (page.243) >>
 >> endobj
-9073 0 obj <<
+9041 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [374.643 511.985 392.999 523.675]
 /Subtype /Link
 /A << /S /GoTo /D (page.281) >>
 >> endobj
-9074 0 obj <<
+9042 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.707 511.985 416.063 523.675]
 /Subtype /Link
 /A << /S /GoTo /D (page.309) >>
 >> endobj
-9075 0 obj <<
+9043 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.772 511.985 439.128 523.675]
 /Subtype /Link
 /A << /S /GoTo /D (page.335) >>
 >> endobj
-9076 0 obj <<
+9044 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.837 511.985 462.193 523.675]
 /Subtype /Link
 /A << /S /GoTo /D (page.341) >>
 >> endobj
-9077 0 obj <<
+9045 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [466.901 511.985 485.257 523.675]
 /Subtype /Link
 /A << /S /GoTo /D (page.350) >>
 >> endobj
-9078 0 obj <<
+9046 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 511.985 508.322 523.675]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-9079 0 obj <<
+9047 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.25 500.557 223.607 509.58]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-9080 0 obj <<
+9048 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.432 484.784 267.334 495.928]
 /Subtype /Link
 /A << /S /GoTo /D (page.40) >>
 >> endobj
-9081 0 obj <<
+9049 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [272.008 484.784 284.91 495.928]
 /Subtype /Link
 /A << /S /GoTo /D (page.78) >>
 >> endobj
-9082 0 obj <<
+9050 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [289.584 484.784 307.94 495.928]
 /Subtype /Link
 /A << /S /GoTo /D (page.173) >>
 >> endobj
-9083 0 obj <<
+9051 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [312.614 484.784 330.97 495.928]
 /Subtype /Link
 /A << /S /GoTo /D (page.289) >>
 >> endobj
-9084 0 obj <<
+9052 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [335.644 484.784 354.001 495.928]
 /Subtype /Link
 /A << /S /GoTo /D (page.334) >>
 >> endobj
-9085 0 obj <<
+9053 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [358.675 484.784 377.031 495.928]
 /Subtype /Link
 /A << /S /GoTo /D (page.479) >>
 >> endobj
-9086 0 obj <<
+9054 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [238.281 471.131 256.637 482.82]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-9087 0 obj <<
+9055 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [264.766 457.478 277.667 468.878]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-9088 0 obj <<
+9056 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [321.887 443.826 340.243 455.515]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-9089 0 obj <<
+9057 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.675 430.173 251.031 441.741]
 /Subtype /Link
 /A << /S /GoTo /D (page.397) >>
 >> endobj
-9090 0 obj <<
+9058 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [237.978 416.52 256.334 428.21]
 /Subtype /Link
 /A << /S /GoTo /D (page.459) >>
 >> endobj
-9091 0 obj <<
+9059 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.402 402.868 248.758 414.557]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-9092 0 obj <<
+9060 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [253.432 402.868 271.788 414.557]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-9093 0 obj <<
+9061 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [272.447 389.215 285.349 400.783]
 /Subtype /Link
 /A << /S /GoTo /D (page.13) >>
 >> endobj
-9094 0 obj <<
+9062 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [269.584 375.562 287.94 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-9095 0 obj <<
+9063 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [286.008 361.91 304.364 373.599]
 /Subtype /Link
 /A << /S /GoTo /D (page.145) >>
 >> endobj
-9096 0 obj <<
+9064 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [317.917 348.257 336.273 359.657]
 /Subtype /Link
 /A << /S /GoTo /D (page.235) >>
 >> endobj
-9097 0 obj <<
+9065 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.826 334.604 292.182 346.294]
 /Subtype /Link
 /A << /S /GoTo /D (page.252) >>
 >> endobj
-9098 0 obj <<
+9066 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [248.705 320.952 267.061 332.641]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-9099 0 obj <<
+9067 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [253.826 307.299 272.182 318.989]
 /Subtype /Link
 /A << /S /GoTo /D (page.448) >>
 >> endobj
-9100 0 obj <<
+9068 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.311 293.646 267.667 304.79]
 /Subtype /Link
 /A << /S /GoTo /D (page.281) >>
 >> endobj
-9101 0 obj <<
+9069 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.129 279.994 248.485 291.138]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-9102 0 obj <<
+9070 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [275.887 266.341 294.243 277.909]
 /Subtype /Link
 /A << /S /GoTo /D (page.540) >>
 >> endobj
-9103 0 obj <<
+9071 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [275.341 252.688 293.698 263.832]
 /Subtype /Link
 /A << /S /GoTo /D (page.147) >>
 >> endobj
-9104 0 obj <<
+9072 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [299.887 239.036 318.243 250.725]
 /Subtype /Link
 /A << /S /GoTo /D (page.430) >>
 >> endobj
-9105 0 obj <<
+9073 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [294.038 225.383 312.395 237.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.271) >>
 >> endobj
-9106 0 obj <<
+9074 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [289.038 211.731 307.395 223.42]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-9107 0 obj <<
+9075 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [301.463 198.078 319.819 209.767]
 /Subtype /Link
 /A << /S /GoTo /D (page.438) >>
 >> endobj
-9108 0 obj <<
+9076 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.584 184.425 267.94 195.825]
 /Subtype /Link
 /A << /S /GoTo /D (page.438) >>
 >> endobj
-9109 0 obj <<
+9077 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [294.402 170.773 312.758 182.462]
 /Subtype /Link
 /A << /S /GoTo /D (page.435) >>
 >> endobj
-9110 0 obj <<
+9078 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [277.994 131.78 296.35 143.47]
 /Subtype /Link
 /A << /S /GoTo /D (page.477) >>
 >> endobj
-9111 0 obj <<
+9079 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.372 118.128 245.273 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.10) >>
 >> endobj
-9112 0 obj <<
+9080 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.947 118.128 268.304 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.147) >>
 >> endobj
-9113 0 obj <<
+9081 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [272.978 118.128 291.334 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.153) >>
 >> endobj
-9114 0 obj <<
+9082 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [296.008 118.128 314.364 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.243) >>
 >> endobj
-9115 0 obj <<
+9083 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [319.038 118.128 337.395 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.312) >>
 >> endobj
-9116 0 obj <<
+9084 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [342.069 118.128 360.425 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-9117 0 obj <<
+9085 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [365.099 118.128 383.455 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-9118 0 obj <<
+9086 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.316 646.546 460.672 657.946]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-9119 0 obj <<
+9087 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [517.558 632.931 535.914 644.621]
 /Subtype /Link
 /A << /S /GoTo /D (page.438) >>
 >> endobj
-9120 0 obj <<
+9088 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [462.013 619.317 480.369 630.885]
 /Subtype /Link
 /A << /S /GoTo /D (page.253) >>
 >> endobj
-9121 0 obj <<
+9089 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [467.801 605.702 486.157 617.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.504) >>
 >> endobj
-9122 0 obj <<
+9090 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.8 592.087 463.157 603.655]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-9123 0 obj <<
+9091 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [445.346 578.472 463.702 590.162]
 /Subtype /Link
 /A << /S /GoTo /D (page.332) >>
 >> endobj
-9124 0 obj <<
+9092 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [437.164 551.243 455.52 562.811]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-9125 0 obj <<
+9093 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [460.211 537.628 473.112 548.772]
 /Subtype /Link
 /A << /S /GoTo /D (page.32) >>
 >> endobj
-9126 0 obj <<
+9094 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [477.786 537.628 490.688 548.772]
 /Subtype /Link
 /A << /S /GoTo /D (page.34) >>
 >> endobj
-9127 0 obj <<
+9095 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [481.77 524.013 500.126 535.581]
 /Subtype /Link
 /A << /S /GoTo /D (page.153) >>
 >> endobj
-9128 0 obj <<
+9096 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [501.679 509.792 520.036 522.694]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-9129 0 obj <<
+9097 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [450.861 496.783 463.763 508.473]
 /Subtype /Link
 /A << /S /GoTo /D (page.70) >>
 >> endobj
-9130 0 obj <<
+9098 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [468.437 496.783 486.793 508.473]
 /Subtype /Link
 /A << /S /GoTo /D (page.119) >>
 >> endobj
-9131 0 obj <<
+9099 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [451.71 483.169 470.066 494.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-9132 0 obj <<
+9100 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [511.285 469.554 529.642 481.243]
 /Subtype /Link
 /A << /S /GoTo /D (page.490) >>
 >> endobj
-9133 0 obj <<
+9101 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.71 455.939 460.066 467.629]
 /Subtype /Link
 /A << /S /GoTo /D (page.324) >>
 >> endobj
-9134 0 obj <<
+9102 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.74 455.939 483.096 467.629]
 /Subtype /Link
 /A << /S /GoTo /D (page.325) >>
 >> endobj
-9135 0 obj <<
+9103 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.013 442.324 464.369 454.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.430) >>
 >> endobj
-9136 0 obj <<
+9104 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [469.043 442.324 487.399 454.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.435) >>
 >> endobj
-9137 0 obj <<
+9105 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [521.225 428.709 539.581 440.399]
 /Subtype /Link
 /A << /S /GoTo /D (page.359) >>
 >> endobj
-9138 0 obj <<
+9106 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.891 415.095 465.248 426.784]
 /Subtype /Link
 /A << /S /GoTo /D (page.324) >>
 >> endobj
-9139 0 obj <<
+9107 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [469.922 415.095 488.278 426.784]
 /Subtype /Link
 /A << /S /GoTo /D (page.325) >>
 >> endobj
-9140 0 obj <<
+9108 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [492.952 415.095 511.308 426.784]
 /Subtype /Link
 /A << /S /GoTo /D (page.403) >>
 >> endobj
-9141 0 obj <<
+9109 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [455.74 401.48 474.096 412.624]
 /Subtype /Link
 /A << /S /GoTo /D (page.352) >>
 >> endobj
-9142 0 obj <<
+9110 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [488.908 374.25 501.809 385.394]
 /Subtype /Link
 /A << /S /GoTo /D (page.38) >>
 >> endobj
-9143 0 obj <<
+9111 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [506.483 374.25 519.385 385.394]
 /Subtype /Link
 /A << /S /GoTo /D (page.68) >>
 >> endobj
-9144 0 obj <<
+9112 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [524.059 374.25 542.415 385.394]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-9145 0 obj <<
+9113 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [468.467 360.635 486.823 371.779]
 /Subtype /Link
 /A << /S /GoTo /D (page.143) >>
 >> endobj
-9146 0 obj <<
+9114 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [491.497 360.635 509.854 371.779]
 /Subtype /Link
 /A << /S /GoTo /D (page.169) >>
 >> endobj
-9147 0 obj <<
+9115 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [529.573 347.021 547.929 358.71]
 /Subtype /Link
 /A << /S /GoTo /D (page.434) >>
 >> endobj
-9148 0 obj <<
+9116 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [482.497 333.406 500.854 345.095]
 /Subtype /Link
 /A << /S /GoTo /D (page.240) >>
 >> endobj
-9149 0 obj <<
+9117 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [505.528 333.406 523.884 345.095]
 /Subtype /Link
 /A << /S /GoTo /D (page.305) >>
 >> endobj
-9150 0 obj <<
+9118 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [459.225 319.791 477.581 330.935]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-9151 0 obj <<
+9119 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [463.407 306.176 481.763 317.32]
 /Subtype /Link
 /A << /S /GoTo /D (page.488) >>
 >> endobj
-9152 0 obj <<
+9120 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [475.194 292.561 493.551 304.251]
 /Subtype /Link
 /A << /S /GoTo /D (page.273) >>
 >> endobj
-9153 0 obj <<
+9121 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [459.134 278.947 477.49 290.636]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-9154 0 obj <<
+9122 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [492.104 265.332 505.005 276.476]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-9155 0 obj <<
+9123 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [475.467 251.717 493.823 263.285]
 /Subtype /Link
 /A << /S /GoTo /D (page.355) >>
 >> endobj
-9156 0 obj <<
+9124 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [460.588 238.102 473.49 249.792]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-9157 0 obj <<
+9125 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [478.164 238.102 496.52 249.792]
 /Subtype /Link
 /A << /S /GoTo /D (page.541) >>
 >> endobj
-9158 0 obj <<
+9126 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [501.194 238.102 519.551 249.792]
 /Subtype /Link
 /A << /S /GoTo /D (page.545) >>
 >> endobj
-9159 0 obj <<
+9127 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [445.74 224.487 458.642 236.177]
 /Subtype /Link
 /A << /S /GoTo /D (page.11) >>
 >> endobj
-9160 0 obj <<
+9128 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [463.316 224.487 476.217 236.177]
 /Subtype /Link
 /A << /S /GoTo /D (page.22) >>
 >> endobj
-9161 0 obj <<
+9129 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [480.891 224.487 493.793 236.177]
 /Subtype /Link
 /A << /S /GoTo /D (page.38) >>
 >> endobj
-9162 0 obj <<
+9130 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [498.467 224.487 511.369 236.177]
 /Subtype /Link
 /A << /S /GoTo /D (page.68) >>
 >> endobj
-9163 0 obj <<
+9131 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [516.043 224.487 534.399 236.177]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-9164 0 obj <<
+9132 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [539.073 224.487 557.429 236.177]
 /Subtype /Link
 /A << /S /GoTo /D (page.335) >>
 >> endobj
-9165 0 obj <<
+9133 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.104 210.873 460.46 222.562]
 /Subtype /Link
 /A << /S /GoTo /D (page.335) >>
 >> endobj
-9166 0 obj <<
+9134 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [449.073 197.258 467.429 208.947]
 /Subtype /Link
 /A << /S /GoTo /D (page.335) >>
 >> endobj
-9167 0 obj <<
+9135 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [472.104 197.258 490.46 208.947]
 /Subtype /Link
 /A << /S /GoTo /D (page.354) >>
 >> endobj
-9168 0 obj <<
+9136 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.619 183.643 471.975 194.787]
 /Subtype /Link
 /A << /S /GoTo /D (page.326) >>
 >> endobj
-9169 0 obj <<
+9137 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [477.861 170.028 490.763 181.172]
 /Subtype /Link
 /A << /S /GoTo /D (page.35) >>
 >> endobj
-9170 0 obj <<
+9138 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [495.437 170.028 508.339 181.172]
 /Subtype /Link
 /A << /S /GoTo /D (page.67) >>
 >> endobj
-9171 0 obj <<
+9139 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [513.013 170.028 531.369 181.172]
 /Subtype /Link
 /A << /S /GoTo /D (page.113) >>
 >> endobj
-9172 0 obj <<
+9140 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [440.952 156.413 459.308 167.982]
 /Subtype /Link
 /A << /S /GoTo /D (page.332) >>
 >> endobj
-9173 0 obj <<
+9141 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.497 142.799 462.854 154.488]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-9174 0 obj <<
+9142 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [458.831 118.128 477.187 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-9175 0 obj <<
+9143 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [481.861 118.128 500.217 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.443) >>
 >> endobj
-9176 0 obj <<
+9144 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [504.891 118.128 523.248 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.454) >>
 >> endobj
-9177 0 obj <<
+9145 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [527.922 118.128 546.278 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.455) >>
 >> endobj
-9183 0 obj <<
-/D [9181 0 R /XYZ 151.701 685.529 null]
+9151 0 obj <<
+/D [9149 0 R /XYZ 151.701 685.529 null]
 >> endobj
-9180 0 obj <<
+9148 0 obj <<
 /Font << /F28 1124 0 R /F22 1211 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9309 0 obj <<
+9277 0 obj <<
 /Length 1467      
 /Filter /FlateDecode
 >>
@@ -61618,886 +60791,886 @@
 z9DØ9U 7וï÷*ÚŸ¹»eÜÖ«çš1àFæmÙŠÒ¶£¶¯5Ãߣ»=â~õ†‰Û¥¹®Üµ!Ù ׿ö¼0øà¹Ý2[ÇKØn±cìŸuúã™{ºÂHisXg™å6~—õçzw^IƒùÔtó× lücßeH‚#…ç‰çm[%’8ç3¥ÿWòìÖ
 endstream
 endobj
-9308 0 obj <<
+9276 0 obj <<
 /Type /Page
-/Contents 9309 0 R
-/Resources 9307 0 R
+/Contents 9277 0 R
+/Resources 9275 0 R
 /MediaBox [0 0 612 792]
-/Parent 9184 0 R
-/Annots [ 9178 0 R 9179 0 R 9185 0 R 9186 0 R 9187 0 R 9188 0 R 9189 0 R 9190 0 R 9191 0 R 9192 0 R 9193 0 R 9194 0 R 9195 0 R 9196 0 R 9197 0 R 9198 0 R 9199 0 R 9200 0 R 9201 0 R 9202 0 R 9203 0 R 9204 0 R 9205 0 R 9206 0 R 9207 0 R 9208 0 R 9209 0 R 9210 0 R 9211 0 R 9212 0 R 9213 0 R 9214 0 R 9215 0 R 9216 0 R 9217 0 R 9218 0 R 9219 0 R 9220 0 R 9221 0 R 9222 0 R 9223 0 R 9224 0 R 9225 0 R 9226 0 R 9227 0 R 9228 0 R 9229 0 R 9230 0 R 9231 0 R 9232 0 R 9233 0 R 9234 0 R 9235 0 R 9236 0 R 9237 0 R 9238 0 R 9239 0 R 9240 0 R 9241 0 R 9242 0 R 9243 0 R 9244 0 R 9245 0 R 9246 0 R 9247 0 R 9248 0 R 9249 0 R 9250 0 R 9251 0 R 9252 0 R 9253 0 R 9254 0 R 9255 0 R 9256 0 R 9257 0 R 9258 0 R 9259 0 R 9260 0 R 9261 0 R 9262 0 R 9263 0 R 9264 0 R 9265 0 R 9266 0 R 9267 0 R 9268 0 R 9269 0 R 9270 0 R 9271 0 R 9272 0 R 9273 0 R 9274 0 R 9275 0 R 9276 0 R 9277 0 R 9278 0 R 9279 0 R 9280 0 R 9281 0 R 9282 0 R 9283 0 R 9284 0 R 9285 0 R 9286 0 R 9287 0 R 9288 0 R 9289 0 R 9290 0 R 9291 0 R 9292 0 R 9293 0 R 9294 0 R 9295 0 R 9296 0 R 9297 0 R 9298 0 R 9299 0 R 9300 0 R 9301 0 R 9302 0 R 9303 0 R 9304 0 R 9305 0 R 9306 0 R ]
+/Parent 9152 0 R
+/Annots [ 9146 0 R 9147 0 R 9153 0 R 9154 0 R 9155 0 R 9156 0 R 9157 0 R 9158 0 R 9159 0 R 9160 0 R 9161 0 R 9162 0 R 9163 0 R 9164 0 R 9165 0 R 9166 0 R 9167 0 R 9168 0 R 9169 0 R 9170 0 R 9171 0 R 9172 0 R 9173 0 R 9174 0 R 9175 0 R 9176 0 R 9177 0 R 9178 0 R 9179 0 R 9180 0 R 9181 0 R 9182 0 R 9183 0 R 9184 0 R 9185 0 R 9186 0 R 9187 0 R 9188 0 R 9189 0 R 9190 0 R 9191 0 R 9192 0 R 9193 0 R 9194 0 R 9195 0 R 9196 0 R 9197 0 R 9198 0 R 9199 0 R 9200 0 R 9201 0 R 9202 0 R 9203 0 R 9204 0 R 9205 0 R 9206 0 R 9207 0 R 9208 0 R 9209 0 R 9210 0 R 9211 0 R 9212 0 R 9213 0 R 9214 0 R 9215 0 R 9216 0 R 9217 0 R 9218 0 R 9219 0 R 9220 0 R 9221 0 R 9222 0 R 9223 0 R 9224 0 R 9225 0 R 9226 0 R 9227 0 R 9228 0 R 9229 0 R 9230 0 R 9231 0 R 9232 0 R 9233 0 R 9234 0 R 9235 0 R 9236 0 R 9237 0 R 9238 0 R 9239 0 R 9240 0 R 9241 0 R 9242 0 R 9243 0 R 9244 0 R 9245 0 R 9246 0 R 9247 0 R 9248 0 R 9249 0 R 9250 0 R 9251 0 R 9252 0 R 9253 0 R 9254 0 R 9255 0 R 9256 0 R 9257 0 R 9258 0 R 9259 0 R 9260 0 R 9261 0 R 9262 0 R 9263 0 R 9264 0 R 9265 0 R 9266 0 R 9267 0 R 9268 0 R 9269 0 R 9270 0 R 9271 0 R 9272 0 R 9273 0 R 9274 0 R ]
 >> endobj
-9178 0 obj <<
+9146 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [198.38 646.546 216.737 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-9179 0 obj <<
+9147 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.411 646.546 239.767 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.443) >>
 >> endobj
-9185 0 obj <<
+9153 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.441 632.93 222.797 644.62]
 /Subtype /Link
 /A << /S /GoTo /D (page.240) >>
 >> endobj
-9186 0 obj <<
+9154 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.471 632.93 245.828 644.62]
 /Subtype /Link
 /A << /S /GoTo /D (page.288) >>
 >> endobj
-9187 0 obj <<
+9155 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [250.502 632.93 268.858 644.62]
 /Subtype /Link
 /A << /S /GoTo /D (page.429) >>
 >> endobj
-9188 0 obj <<
+9156 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.077 619.314 215.524 631.004]
 /Subtype /Link
 /A << /S /GoTo /D (page.7) >>
 >> endobj
-9189 0 obj <<
+9157 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.199 619.314 233.1 631.004]
 /Subtype /Link
 /A << /S /GoTo /D (page.75) >>
 >> endobj
-9190 0 obj <<
+9158 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [237.774 619.314 256.131 631.004]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-9191 0 obj <<
+9159 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.017 605.698 217.373 617.098]
 /Subtype /Link
 /A << /S /GoTo /D (page.375) >>
 >> endobj
-9192 0 obj <<
+9160 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.259 592.082 211.615 603.772]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-9193 0 obj <<
+9161 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.562 578.466 215.918 590.156]
 /Subtype /Link
 /A << /S /GoTo /D (page.340) >>
 >> endobj
-9194 0 obj <<
+9162 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [225.259 564.85 243.615 576.54]
 /Subtype /Link
 /A << /S /GoTo /D (page.496) >>
 >> endobj
-9195 0 obj <<
+9163 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.532 551.234 197.434 562.634]
 /Subtype /Link
 /A << /S /GoTo /D (page.63) >>
 >> endobj
-9196 0 obj <<
+9164 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.896 537.618 203.252 549.186]
 /Subtype /Link
 /A << /S /GoTo /D (page.234) >>
 >> endobj
-9197 0 obj <<
+9165 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.168 524.002 246.525 535.692]
 /Subtype /Link
 /A << /S /GoTo /D (page.429) >>
 >> endobj
-9198 0 obj <<
+9166 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.926 499.31 211.282 510.999]
 /Subtype /Link
 /A << /S /GoTo /D (page.279) >>
 >> endobj
-9199 0 obj <<
+9167 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.956 499.31 234.312 510.999]
 /Subtype /Link
 /A << /S /GoTo /D (page.282) >>
 >> endobj
-9200 0 obj <<
+9168 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [238.986 499.31 257.343 510.999]
 /Subtype /Link
 /A << /S /GoTo /D (page.291) >>
 >> endobj
-9201 0 obj <<
+9169 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [262.017 499.31 280.373 510.999]
 /Subtype /Link
 /A << /S /GoTo /D (page.465) >>
 >> endobj
-9202 0 obj <<
+9170 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.259 485.694 222.615 497.383]
 /Subtype /Link
 /A << /S /GoTo /D (page.434) >>
 >> endobj
-9203 0 obj <<
+9171 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [207.124 458.461 225.48 469.605]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-9204 0 obj <<
+9172 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.602 444.845 237.958 455.989]
 /Subtype /Link
 /A << /S /GoTo /D (page.469) >>
 >> endobj
-9205 0 obj <<
+9173 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.487 417.613 234.844 429.303]
 /Subtype /Link
 /A << /S /GoTo /D (page.458) >>
 >> endobj
-9206 0 obj <<
+9174 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [222.578 403.997 240.935 415.397]
 /Subtype /Link
 /A << /S /GoTo /D (page.458) >>
 >> endobj
-9207 0 obj <<
+9175 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.047 390.381 245.403 402.071]
 /Subtype /Link
 /A << /S /GoTo /D (page.469) >>
 >> endobj
-9208 0 obj <<
+9176 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [211.108 376.765 229.464 388.455]
 /Subtype /Link
 /A << /S /GoTo /D (page.145) >>
 >> endobj
-9209 0 obj <<
+9177 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [245.805 363.149 264.161 374.718]
 /Subtype /Link
 /A << /S /GoTo /D (page.336) >>
 >> endobj
-9210 0 obj <<
+9178 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.926 349.533 235.282 361.223]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-9211 0 obj <<
+9179 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [239.956 349.533 258.312 361.223]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-9212 0 obj <<
+9180 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.593 335.917 224.949 347.607]
 /Subtype /Link
 /A << /S /GoTo /D (page.237) >>
 >> endobj
-9213 0 obj <<
+9181 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [229.623 335.917 247.979 347.607]
 /Subtype /Link
 /A << /S /GoTo /D (page.241) >>
 >> endobj
-9214 0 obj <<
+9182 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [252.653 335.917 271.009 347.607]
 /Subtype /Link
 /A << /S /GoTo /D (page.251) >>
 >> endobj
-9215 0 obj <<
+9183 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [275.683 335.917 294.04 347.607]
 /Subtype /Link
 /A << /S /GoTo /D (page.253) >>
 >> endobj
-9216 0 obj <<
+9184 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [298.714 335.917 317.07 347.607]
 /Subtype /Link
 /A << /S /GoTo /D (page.281) >>
 >> endobj
-9217 0 obj <<
+9185 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [248.138 322.301 266.494 333.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.481) >>
 >> endobj
-9218 0 obj <<
+9186 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [271.168 322.301 289.524 333.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-9219 0 obj <<
+9187 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [202.32 308.685 220.676 320.375]
 /Subtype /Link
 /A << /S /GoTo /D (page.309) >>
 >> endobj
-9220 0 obj <<
+9188 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [225.35 308.685 243.706 320.375]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-9221 0 obj <<
+9189 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [248.38 308.685 266.737 320.375]
 /Subtype /Link
 /A << /S /GoTo /D (page.452) >>
 >> endobj
-9222 0 obj <<
+9190 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [198.986 295.069 217.343 306.759]
 /Subtype /Link
 /A << /S /GoTo /D (page.243) >>
 >> endobj
-9223 0 obj <<
+9191 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [222.017 295.069 240.373 306.759]
 /Subtype /Link
 /A << /S /GoTo /D (page.269) >>
 >> endobj
-9224 0 obj <<
+9192 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [245.047 295.069 263.403 306.759]
 /Subtype /Link
 /A << /S /GoTo /D (page.282) >>
 >> endobj
-9225 0 obj <<
+9193 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [268.077 295.069 286.434 306.759]
 /Subtype /Link
 /A << /S /GoTo /D (page.312) >>
 >> endobj
-9226 0 obj <<
+9194 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [291.108 295.069 309.464 306.759]
 /Subtype /Link
 /A << /S /GoTo /D (page.429) >>
 >> endobj
-9227 0 obj <<
+9195 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [314.138 295.069 332.494 306.759]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-9228 0 obj <<
+9196 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [337.168 295.069 355.525 306.759]
 /Subtype /Link
 /A << /S /GoTo /D (page.459) >>
 >> endobj
-9229 0 obj <<
+9197 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [360.199 295.069 378.555 306.759]
 /Subtype /Link
 /A << /S /GoTo /D (page.465) >>
 >> endobj
-9230 0 obj <<
+9198 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.229 295.069 401.585 306.759]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-9231 0 obj <<
+9199 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [302.774 281.453 321.131 293.143]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-9232 0 obj <<
+9200 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [325.805 281.453 344.161 293.143]
 /Subtype /Link
 /A << /S /GoTo /D (page.271) >>
 >> endobj
-9233 0 obj <<
+9201 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [348.835 281.453 367.191 293.143]
 /Subtype /Link
 /A << /S /GoTo /D (page.309) >>
 >> endobj
-9234 0 obj <<
+9202 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [371.865 281.453 390.222 293.143]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-9235 0 obj <<
+9203 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.29 267.837 311.646 279.527]
 /Subtype /Link
 /A << /S /GoTo /D (page.443) >>
 >> endobj
-9236 0 obj <<
+9204 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.401 254.221 217.303 265.911]
 /Subtype /Link
 /A << /S /GoTo /D (page.41) >>
 >> endobj
-9237 0 obj <<
+9205 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.331 254.221 234.233 265.911]
 /Subtype /Link
 /A << /S /GoTo /D (page.80) >>
 >> endobj
-9238 0 obj <<
+9206 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [238.261 254.221 256.618 265.911]
 /Subtype /Link
 /A << /S /GoTo /D (page.109) >>
 >> endobj
-9239 0 obj <<
+9207 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [260.646 254.221 279.002 265.911]
 /Subtype /Link
 /A << /S /GoTo /D (page.269) >>
 >> endobj
-9240 0 obj <<
+9208 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [282.464 254.221 300.82 265.911]
 /Subtype /Link
 /A << /S /GoTo /D (page.271) >>
 >> endobj
-9241 0 obj <<
+9209 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [304.849 254.221 323.205 265.911]
 /Subtype /Link
 /A << /S /GoTo /D (page.273) >>
 >> endobj
-9242 0 obj <<
+9210 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [327.233 254.221 345.59 265.911]
 /Subtype /Link
 /A << /S /GoTo /D (page.274) >>
 >> endobj
-9243 0 obj <<
+9211 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [349.618 254.221 367.974 265.911]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-9244 0 obj <<
+9212 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [372.003 254.221 390.359 265.911]
 /Subtype /Link
 /A << /S /GoTo /D (page.333) >>
 >> endobj
-9245 0 obj <<
+9213 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.387 254.221 412.743 265.911]
 /Subtype /Link
 /A << /S /GoTo /D (page.335) >>
 >> endobj
-9246 0 obj <<
+9214 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.772 254.221 435.128 265.911]
 /Subtype /Link
 /A << /S /GoTo /D (page.342) >>
 >> endobj
-9247 0 obj <<
+9215 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 254.221 457.513 265.911]
 /Subtype /Link
 /A << /S /GoTo /D (page.343) >>
 >> endobj
-9248 0 obj <<
+9216 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.441 240.672 172.797 251.816]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-9249 0 obj <<
+9217 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.471 240.672 195.827 251.816]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-9250 0 obj <<
+9218 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.502 240.672 218.858 251.816]
 /Subtype /Link
 /A << /S /GoTo /D (page.498) >>
 >> endobj
-9251 0 obj <<
+9219 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.126 227.056 272.482 238.745]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-9252 0 obj <<
+9220 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [258.065 213.44 276.422 225.129]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-9253 0 obj <<
+9221 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.805 199.824 223.161 211.513]
 /Subtype /Link
 /A << /S /GoTo /D (page.399) >>
 >> endobj
-9254 0 obj <<
+9222 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.79 186.208 225.147 197.897]
 /Subtype /Link
 /A << /S /GoTo /D (page.326) >>
 >> endobj
-9255 0 obj <<
+9223 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.094 172.592 215.45 184.16]
 /Subtype /Link
 /A << /S /GoTo /D (page.325) >>
 >> endobj
-9256 0 obj <<
+9224 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [260.774 158.976 279.131 170.665]
 /Subtype /Link
 /A << /S /GoTo /D (page.448) >>
 >> endobj
-9257 0 obj <<
+9225 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.38 145.36 277.737 157.049]
 /Subtype /Link
 /A << /S /GoTo /D (page.428) >>
 >> endobj
-9258 0 obj <<
+9226 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [261.077 131.744 279.434 143.433]
 /Subtype /Link
 /A << /S /GoTo /D (page.454) >>
 >> endobj
-9259 0 obj <<
+9227 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.411 118.128 267.767 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.153) >>
 >> endobj
-9260 0 obj <<
+9228 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [432.082 646.546 450.438 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.452) >>
 >> endobj
-9261 0 obj <<
+9229 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [471.567 632.997 489.923 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-9262 0 obj <<
+9230 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [468.84 619.448 487.196 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.280) >>
 >> endobj
-9263 0 obj <<
+9231 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [435.264 605.899 453.62 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.470) >>
 >> endobj
-9264 0 obj <<
+9232 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.324 592.35 453.771 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.8) >>
 >> endobj
-9265 0 obj <<
+9233 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.749 578.8 462.105 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-9266 0 obj <<
+9234 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.264 551.702 457.62 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.431) >>
 >> endobj
-9267 0 obj <<
+9235 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.9 524.604 432.802 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.30) >>
 >> endobj
-9268 0 obj <<
+9236 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.264 511.054 400.165 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.15) >>
 >> endobj
-9269 0 obj <<
+9237 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.84 511.054 417.741 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.31) >>
 >> endobj
-9270 0 obj <<
+9238 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.415 511.054 435.317 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.39) >>
 >> endobj
-9271 0 obj <<
+9239 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.991 511.054 452.893 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.43) >>
 >> endobj
-9272 0 obj <<
+9240 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [457.567 511.054 470.468 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.86) >>
 >> endobj
-9273 0 obj <<
+9241 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [475.143 511.054 493.499 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.109) >>
 >> endobj
-9274 0 obj <<
+9242 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [498.173 511.054 516.529 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.125) >>
 >> endobj
-9275 0 obj <<
+9243 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [521.203 511.054 539.559 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.238) >>
 >> endobj
-9276 0 obj <<
+9244 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [544.234 511.054 562.59 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-9277 0 obj <<
+9245 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [567.264 511.054 585.62 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.242) >>
 >> endobj
-9278 0 obj <<
+9246 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [590.294 511.054 608.65 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.253) >>
 >> endobj
-9279 0 obj <<
+9247 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [613.324 511.054 631.681 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.550) >>
 >> endobj
-9280 0 obj <<
+9248 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [409.916 497.505 428.273 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.312) >>
 >> endobj
-9281 0 obj <<
+9249 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.644 483.956 472 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.478) >>
 >> endobj
-9282 0 obj <<
+9250 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.795 470.407 424.151 481.551]
 /Subtype /Link
 /A << /S /GoTo /D (page.145) >>
 >> endobj
-9283 0 obj <<
+9251 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.825 470.407 447.182 481.551]
 /Subtype /Link
 /A << /S /GoTo /D (page.477) >>
 >> endobj
-9284 0 obj <<
+9252 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.9 456.858 437.256 468.426]
 /Subtype /Link
 /A << /S /GoTo /D (page.105) >>
 >> endobj
-9285 0 obj <<
+9253 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.93 456.858 460.287 468.426]
 /Subtype /Link
 /A << /S /GoTo /D (page.253) >>
 >> endobj
-9286 0 obj <<
+9254 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.627 443.308 437.529 454.877]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-9287 0 obj <<
+9255 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.537 429.759 432.438 441.159]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-9288 0 obj <<
+9256 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [437.112 429.759 450.014 441.159]
 /Subtype /Link
 /A << /S /GoTo /D (page.77) >>
 >> endobj
-9289 0 obj <<
+9257 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.93 416.21 416.287 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.242) >>
 >> endobj
-9290 0 obj <<
+9258 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.961 416.21 439.317 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.343) >>
 >> endobj
-9291 0 obj <<
+9259 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.082 402.661 425.438 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.529) >>
 >> endobj
-9292 0 obj <<
+9260 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.749 389.112 422.105 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.532) >>
 >> endobj
-9293 0 obj <<
+9261 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.961 375.562 402.317 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.446) >>
 >> endobj
-9294 0 obj <<
+9262 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [408.233 362.013 415.681 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.7) >>
 >> endobj
-9295 0 obj <<
+9263 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.355 362.013 438.711 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.326) >>
 >> endobj
-9296 0 obj <<
+9264 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.385 362.013 461.741 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.330) >>
 >> endobj
-9297 0 obj <<
+9265 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [486.112 348.464 504.469 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.538) >>
 >> endobj
-9298 0 obj <<
+9266 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.718 334.915 432.075 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.273) >>
 >> endobj
-9299 0 obj <<
+9267 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.021 321.366 415.378 332.51]
 /Subtype /Link
 /A << /S /GoTo /D (page.470) >>
 >> endobj
-9300 0 obj <<
+9268 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.052 321.366 438.408 332.51]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-9301 0 obj <<
+9269 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.87 307.816 423.226 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.517) >>
 >> endobj
-9302 0 obj <<
+9270 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.87 284.305 400.771 295.994]
 /Subtype /Link
 /A << /S /GoTo /D (page.74) >>
 >> endobj
-9303 0 obj <<
+9271 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.87 270.755 401.226 282.324]
 /Subtype /Link
 /A << /S /GoTo /D (page.235) >>
 >> endobj
-9304 0 obj <<
+9272 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.597 257.206 412.953 268.896]
 /Subtype /Link
 /A << /S /GoTo /D (page.243) >>
 >> endobj
-9305 0 obj <<
+9273 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [384.536 233.694 402.893 245.263]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-9306 0 obj <<
+9274 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.9 220.145 438.256 231.835]
 /Subtype /Link
 /A << /S /GoTo /D (page.240) >>
 >> endobj
-9310 0 obj <<
-/D [9308 0 R /XYZ 100.892 685.529 null]
+9278 0 obj <<
+/D [9276 0 R /XYZ 100.892 685.529 null]
 >> endobj
-9307 0 obj <<
+9275 0 obj <<
 /Font << /F22 1211 0 R /F28 1124 0 R /F15 1133 0 R /F51 1134 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
@@ -62537,91 +61710,91 @@
 14 0 obj
 [1118 0 R /Fit]
 endobj
-9311 0 obj
+9279 0 obj
 [603.2]
 endobj
-9312 0 obj
+9280 0 obj
 [548.6]
 endobj
-9313 0 obj
+9281 0 obj
 [722.6]
 endobj
-9314 0 obj
+9282 0 obj
 [333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 319.4 777.8 472.2 472.2 666.7 666.7 666.7 638.9 722.2 597.2 569.4 666.7 708.3 277.8 472.2 694.4 541.7 875 708.3 736.1 638.9 736.1 645.8 555.6 680.6 687.5 666.7 944.4 666.7 666.7 611.1 288.9 500 288.9 500 277.8 277.8 480.6 516.7 444.4 516.7 444.4 305.6 500 516.7 238.9 266.7 488.9 238.9 794.4 516.7 500 516.7 516.7 341.7 383.3 361.1 516.7 461.1]
 endobj
-9315 0 obj
+9283 0 obj
 [525]
 endobj
-9316 0 obj
+9284 0 obj
 [657.4 525.9 657.4 543 361.6 591.7 657.4 328.7 361.6 624.5 328.7 986.1 657.4 591.7 657.4 624.5 488.1 466.8]
 endobj
-9317 0 obj
+9285 0 obj
 [524.7 524.7 524.7 524.7 524.7 524.7 524.7 524.7 314.8 314.8 314.8 787 524.7 524.7 787 763 722.5 734.6 775 696.3 670.1 794.1 763 395.7 538.9 789.2 643.8 920.4 763 787 696.3 787 748.8 577.2 734.6]
 endobj
-9318 0 obj
+9286 0 obj
 [277.8 500 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8 500 530.9 750 758.5 714.7 827.9 738.2 643.1 786.3 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 298.4 878 600.2 484.7 503.1 446.4 451.2 468.8 361.1 572.5 484.7 715.9 571.5 490.3]
 endobj
-9319 0 obj
+9287 0 obj
 [591.1 532.2 532.2 591.1 532.2 400 532.2 591.1 355.6 355.6 532.2 296.7 944.4 650 591.1 591.1 532.2 501.7 486.9 385 620.5 532.2 767.8 560.6 561.7]
 endobj
-9320 0 obj
+9288 0 obj
 [583.3 536.1 536.1 813.9 813.9 238.9 266.7 500 500 500 500 500 666.7 444.4 480.6 722.2 777.8 500 861.1 972.2 777.8 238.9 319.4 500 833.3 500 833.3 758.3 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 319.4 777.8 472.2 472.2 666.7 666.7 666.7 638.9 722.2 597.2 569.4 666.7 708.3 277.8 472.2 694.4 541.7 875 708.3 736.1 638.9 736.1 645.8 555.6 680.6 687.5 666.7 944.4 666.7 666.7 611.1 288.9 500 288.9 500 277.8 277.8 480.6 516.7 444.4 516.7 444.4 305.6 500 516.7 238.9 266.7 488.9 238.9 794.4 516.7 500 516.7 516.7 341.7 383.3 361.1 516.7 461.1 683.3 461.1 461.1 434.7 500 1000]
 endobj
-9321 0 obj
+9289 0 obj
 [786.1 829.2 741.7 712.5 851.4 813.9 405.5 566.7 843 683.3 988.9 813.9 844.4 741.7 844.4 800 611.1 786.1 813.9 813.9 1105.5 813.9 813.9 669.4 319.4 552.8 319.4 552.8 319.4 319.4 613.3 580 591.1 624.4 557.8 535.6 641.1 613.3 302.2 424.4 635.6 513.3 746.7 613.3 635.6 557.8 635.6 602.2 457.8 591.1 613.3]
 endobj
-9322 0 obj
+9290 0 obj
 [800 800 800 800]
 endobj
-9323 0 obj
+9291 0 obj
 [599.5 571 571 856.5 856.5 285.5 314 513.9 513.9 513.9 513.9 513.9 770.7 456.8 513.9 742.3 799.4 513.9 927.8 1042 799.4 285.5 285.5 513.9 856.5 513.9 856.5 799.4 285.5 399.7 399.7 513.9 799.4 285.5 342.6 285.5 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 285.5 285.5 285.5 799.4 485.3 485.3 799.4 770.7 727.9 742.3 785 699.4 670.8 806.5 770.7 371 528.1 799.2 642.3 942 770.7 799.4 699.4 799.4 756.5 571 742.3 770.7 770.7 1056.2 770.7 770.7 628.1 285.5 513.9 285.5 513.9 285.5 285.5 513.9 571 456.8 571 457.2 314 513.9 571 285.5 314 542.4 285.5 856.5 571 513.9 571 542.4 402 405.4 399.7 571 542.4 742.3 542.4 542.4]
 endobj
-9324 0 obj
+9292 0 obj
 [470.2 470.2 470.2 470.2 470.2 470.2 470.2 470.2 470.2 470.2 261.2 261.2 299.8 731.4 444.1 444.1 626.9 624.5 625.7 600.8 678 561 534.9 626.9 663.1 258.8 442.9 650.6 508.8 819.8 663.1 692.8 599.6 692.8 606.4 522.4 640.6 643.8 624.5 885.7 624.5 624.5 574.7 272.9 470.2 272.9 470.2 261.2 261.2 450.9 483.9 418 483.9 418 287.3 470.2 483.9 222.6 248.8 457.7 222.6 745.1 483.9 470.2 483.9 483.9 320.3 360.5 339.6 483.9 431.6 640.6 431.6]
 endobj
-9325 0 obj
+9293 0 obj
 [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]
 endobj
-9326 0 obj
+9294 0 obj
 [799.4 513.9 799.4]
 endobj
-9327 0 obj
+9295 0 obj
 [611.1 611.1 611.1 611.1 611.1 611.1 611.1 611.1 611.1 611.1]
 endobj
-9328 0 obj
+9296 0 obj
 [531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1 295.1 826.4 501.7 501.7 826.4 795.8 752.1 767.4 811.1 722.6 693.1 833.5 795.8 382.6 545.5 825.4 663.6 972.9 795.8 826.4 722.6 826.4 781.6 590.3 767.4 795.8 795.8 1091 795.8 795.8 649.3 295.1 531.3 295.1 531.3 295.1 295.1 531.3 590.3 472.2 590.3 472.2 324.7 531.3 590.3 295.1 324.7 560.8 295.1 885.4 590.3 531.3 590.3 560.8 414.1 419.1 413.2]
 endobj
-9329 0 obj
+9297 0 obj
 [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]
 endobj
-9330 0 obj
+9298 0 obj
 [777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500]
 endobj
-9331 0 obj
+9299 0 obj
 [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]
 endobj
-9332 0 obj
+9300 0 obj
 [619.8 569.5 569.5 864.6 864.6 253.5 283 531.3 531.3 531.3 531.3 531.3 708.3 472.2 510.4 767.4 826.4 531.3 914.9 1033 826.4 253.5 336.8 531.3 885.4 531.3 885.4 805.6 295.1 413.2 413.2 531.3 826.4 295.1 354.2 295.1 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1 336.8 826.4 501.7 501.7 708.3 708.3 708.3 678.8 767.4 637.2 607.6 708.3 750 295.1 501.7 737.9 578.1 927.1 750 784.7 678.8 784.7 687.5 590.3 725.7 729.2 708.3 1003.5 708.3 708.3 649.3 309 531.3 309 531.3 295.1 295.1 510.4 548.6 472.2 548.6 472.2 324.7 531.3 548.6 253.5 283 519.1 253.5 843.8 548.6 531.3 548.6 548.6 362.8 407.3 383.7 548.6 489.6 725.7 489.6 489.6 461.8]
 endobj
-9333 0 obj
+9301 0 obj
 [613.3 562.2 587.8 881.7 894.4 306.7 332.2 511.1 511.1 511.1 511.1 511.1 831.3 460 536.7 715.6 715.6 511.1 882.8 985 766.7 255.6 306.7 514.4 817.8 769.1 817.8 766.7 306.7 408.9 408.9 511.1 766.7 306.7 357.8 306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6 525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9 743.3 743.3 613.3 306.7 514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 306.7 460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7 460 664.4 463.9 485.6 408.9]
 endobj
-9334 0 obj
+9302 0 obj
 [583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000]
 endobj
-9335 0 obj
+9303 0 obj
 [641.7 586.1 586.1 891.7 891.7 255.6 286.1 550 550 550 550 550 733.3 488.9 565.3 794.4 855.6 550 947.2 1069.5 855.6 255.6 366.7 558.3 916.7 550 1029.1 830.6 305.6 427.8 427.8 550 855.6 305.6 366.7 305.6 550 550 550 550 550 550 550 550 550 550 550 305.6 305.6 366.7 855.6 519.4 519.4 733.3 733.3 733.3 702.8 794.4 641.7 611.1 733.3 794.4 330.6 519.4 763.9 580.6 977.8 794.4 794.4 702.8 794.4 702.8 611.1 733.3 763.9 733.3 1038.9 733.3 733.3 672.2 343.1 558.3 343.1 550 305.6 305.6 525 561.1 488.9 561.1 511.1 336.1 550 561.1 255.6 286.1 530.6 255.6 866.7 561.1 550 561.1 561.1 372.2 421.7 404.2 561.1 500 744.4 500 500 476.4 550 1100]
 endobj
-9336 0 obj
-[272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2 380.8 544]
+9304 0 obj
+[272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2 380.8 544 516.8 707.2 516.8 516.8]
 endobj
-9337 0 obj
+9305 0 obj
 [670.8 638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.5 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6 606.9 606.9 511.1 575 1150]
 endobj
-9338 0 obj
+9306 0 obj
 [625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.3 531.3 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.8 312.5 937.5 625 562.5 625 593.8 459.5 443.8 437.5 625 593.8 812.5 593.8 593.8]
 endobj
-9339 0 obj <<
+9307 0 obj <<
 /Length1 1870
 /Length2 13431
 /Length3 0
@@ -62739,7 +61912,7 @@
 þêhµs×kîi_sùÐ}¹›Ÿe.z¨‚|‹Ž0놽Ÿ§(וì:íÞ–ø ŽU¿ûü.ö[AjRÇÌAîKLÝ®ªv¥eX.Ö`Ÿ²3ë.Ò¬ýX잎ˆÀÎòÎ!î§OÆÛÃÛÜ Áò±êÄ·ªQ¶ý)ëÛÒKè^˜e·xöŒ[3†¤âÈ×¥³Ã´öÏßP¼xN™ê¿²5†76ZÖbŠJͮψ쓛ÞrI~TzÀß‹x1  AªL‹úaíÞlœª¸iîÉú䝂Õ)rI¡³Ú/ö½¾2—-†H`ºc¤îÎ4WÁÙ¼~ÊqŠ”¶6ïâÌ‘÷¬o;•¬Múü°È9¨µÝ¬"wMOú"F=§ jáÿÒk?
 endstream
 endobj
-9340 0 obj <<
+9308 0 obj <<
 /Type /FontDescriptor
 /FontName /KEFMBC+CMBX10
 /Flags 4
@@ -62751,9 +61924,9 @@
 /StemV 114
 /XHeight 444
 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/a/b/c/colon/comma/d/e/eight/emdash/endash/exclam/f/ff/ffi/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/zero)
-/FontFile 9339 0 R
+/FontFile 9307 0 R
 >> endobj
-9341 0 obj <<
+9309 0 obj <<
 /Length1 1294
 /Length2 6770
 /Length3 0
@@ -62826,7 +61999,7 @@
 ËΙTÍXvµPc”µ‡\³‹â…—2͘M²¤¡âçG ¿g{Gm|àÁCÛJ&ñ>¯ÐSò4kßÖÿ ÄsÆ=
 endstream
 endobj
-9342 0 obj <<
+9310 0 obj <<
 /Type /FontDescriptor
 /FontName /ZMBLFL+CMBX12
 /Flags 4
@@ -62838,9 +62011,9 @@
 /StemV 109
 /XHeight 444
 /CharSet (/C/D/E/I/M/N/P/R/S/U/a/b/c/comma/d/e/f/fi/four/g/hyphen/i/k/l/m/n/o/p/r/s/six/t/three/two/u/w/x/y)
-/FontFile 9341 0 R
+/FontFile 9309 0 R
 >> endobj
-9343 0 obj <<
+9311 0 obj <<
 /Length1 779
 /Length2 1632
 /Length3 0
@@ -62872,7 +62045,7 @@
 Ûê1Ìã2ÒˆqÊ#Jâ“Ín®«e:â*]›lj⿈O‘_Õï‹å!^mga®&Lëlûb`µP·;¥Œ?äÔÿ$É
 endstream
 endobj
-9344 0 obj <<
+9312 0 obj <<
 /Type /FontDescriptor
 /FontName /JTHECE+CMBX9
 /Flags 4
@@ -62884,9 +62057,9 @@
 /StemV 117
 /XHeight 444
 /CharSet (/b/d/m/s)
-/FontFile 9343 0 R
+/FontFile 9311 0 R
 >> endobj
-9345 0 obj <<
+9313 0 obj <<
 /Length1 972
 /Length2 3907
 /Length3 0
@@ -62926,7 +62099,7 @@
 YXKˆeÿC:»tkéƏT¸Ší-¤çåïÌÚJ±ªZ0IOwÞÙô­*EšÛÝ<	Ň™LV·úŸÁê×l!-c«s ͦ^ê†ÏX–Áè˜G&Eý\O¬‚‘Ç«Ž‡eps\ì`íIßßíµ»CÇ_A·n{!X/˲µ½ÕÔ# ÁUùR;l#^§-pHû¾’ïKBf>Ñ ×™ö…÷þŸªÒ×ÒËÉž2hÏD¶Ôª‚‰p–÷ëåUՍF8)ìuÿÝ#†µ]¦µ'û¯þÌ8á‘
 endstream
 endobj
-9346 0 obj <<
+9314 0 obj <<
 /Type /FontDescriptor
 /FontName /JXWONA+CMBXTI10
 /Flags 4
@@ -62938,9 +62111,9 @@
 /StemV 107
 /XHeight 444
 /CharSet (/a/c/e/g/h/i/l/m/n/o/p/r/s/t/u/y)
-/FontFile 9345 0 R
+/FontFile 9313 0 R
 >> endobj
-9347 0 obj <<
+9315 0 obj <<
 /Length1 903
 /Length2 2896
 /Length3 0
@@ -62979,7 +62152,7 @@
 ñÆÜŒŒÖÀÒۍØ,„!‰ÖÓôð.¼•›ÒUàŒ8hz÷JëX,Ôj¼>Ö:¢×¾¬vNî9*-­ÑÆÄN‹uÄ| p¨Ú¼À1¯øsÊ®‚Oåù€ÔÞÛôYÌ‘†)îðž4‰Õ¡’/"¾a…1³pýÕÞ	ü—z¾‰mIç÷Í—EAG;‰ä»ñ«œÁŠ’ƒHŸ&­Ú—Å&/Zí5yö¦ŸOàsíåzbú#H›L­Æ왐Ãͧí=þp{iiÇ^ Dî‹Ë;2{¨¤ÏÎ1Õ¥QâQ¤¿xUYò‘ºDó02|Xîj'-O z³çé@í}¾ãô£!N1‹“q§$«z70ϳýò–Uç¿fùìŸ µ¨§ÚÒ'¯Í/ÍÜç2údÔèÈaG‚ë:G%*e:Á´”ÝqòqNНª^‡jö¯çð™ýºz»ší6¦¾w•LiM”=ƒQz{VfG)q…çÀñãéXbªböIãÛSû,•!¼ç&µ˜ú:Ô·¯†?”ïßQ.Ú½3©øJÖ”OÐÝ2£eÃýÔÿ p¹¸Â
 endstream
 endobj
-9348 0 obj <<
+9316 0 obj <<
 /Type /FontDescriptor
 /FontName /UPBAQJ+CMCSC10
 /Flags 4
@@ -62991,9 +62164,9 @@
 /StemV 72
 /XHeight 431
 /CharSet (/C/N/W/a/e/g/i/n/o/r/t/u)
-/FontFile 9347 0 R
+/FontFile 9315 0 R
 >> endobj
-9349 0 obj <<
+9317 0 obj <<
 /Length1 1585
 /Length2 9620
 /Length3 0
@@ -63072,7 +62245,7 @@
 ©I:H÷ð7nÚwÏß*êr÷a¢#/6\¬@í´]®ðǺ&C1œN~z§%²IcVݵ™§©g•¡ÔðØXdôKÉêžßìkµ»ò›LhlWEåAõküÒýÿÂËpÒ
 endstream
 endobj
-9350 0 obj <<
+9318 0 obj <<
 /Type /FontDescriptor
 /FontName /QVBPMD+CMITT10
 /Flags 4
@@ -63084,9 +62257,9 @@
 /StemV 69
 /XHeight 431
 /CharSet (/A/C/D/E/F/G/H/I/L/M/N/O/P/R/S/T/U/V/X/a/at/b/c/comma/d/e/equal/f/g/h/hyphen/i/k/l/m/n/o/p/parenleft/parenright/percent/period/q/quotedbl/quoteright/r/s/slash/t/two/u/v/w/x/y)
-/FontFile 9349 0 R
+/FontFile 9317 0 R
 >> endobj
-9351 0 obj <<
+9319 0 obj <<
 /Length1 1104
 /Length2 5415
 /Length3 0
@@ -63137,7 +62310,7 @@
 +‡½\¯ÆuÄ«Ç×fîôþ$ë
 endstream
 endobj
-9352 0 obj <<
+9320 0 obj <<
 /Type /FontDescriptor
 /FontName /SPHTML+CMMI10
 /Flags 4
@@ -63149,9 +62322,9 @@
 /StemV 72
 /XHeight 431
 /CharSet (/A/B/D/I/P/R/S/a/arrowhookright/c/d/e/g/greater/i/l/less/n/o/p/s/t/u/y)
-/FontFile 9351 0 R
+/FontFile 9319 0 R
 >> endobj
-9353 0 obj <<
+9321 0 obj <<
 /Length1 745
 /Length2 1093
 /Length3 0
@@ -63172,7 +62345,7 @@
 ¬´ã¯ú3»ß»g‡Ù¾áµeUû*|g}aUc at 2öG4ÁmÍò[ƺÞûÛ3
 endstream
 endobj
-9354 0 obj <<
+9322 0 obj <<
 /Type /FontDescriptor
 /FontName /EGJBAW+CMMI8
 /Flags 4
@@ -63184,9 +62357,9 @@
 /StemV 78
 /XHeight 431
 /CharSet (/L)
-/FontFile 9353 0 R
+/FontFile 9321 0 R
 >> endobj
-9355 0 obj <<
+9323 0 obj <<
 /Length1 768
 /Length2 1151
 /Length3 0
@@ -63207,7 +62380,7 @@
 ¨þ½ùÍö%þH‡ƒðë‹o‡cz¾{dt´õôx5ÐÊ̍£V²ˆè½¼’¦ŸJ-Ÿ´Ky9ܲZW÷xŸÌ^Ì55˜f…5WWÇz%ût+ÑÒš¬®½\¾þT¥ÄcO«yTå¤D“Þ;î|pøf¶fgóí¨{°cÔdÒIÓ–ÔÊ8–/7³zG?Vån>uäÍ0ç@r÷íH{¯‰uâ3š‚øŒjƒ¼ܝÂWÝ-’îËçð¦:{[C»«êŽ¼g~±~—µUu¿ÉT1ƒ£gÈSÒcÆ´Ç-ù®Ý©–Ü°a¨vy~ß÷cfNfÑt]/æÜIKº9øÚKúsɺö!Ö3êÕ ý²Ì€w†x¥1Ÿ5š›>ðl¼Ödi®Ì «´ Z:
 endstream
 endobj
-9356 0 obj <<
+9324 0 obj <<
 /Type /FontDescriptor
 /FontName /YJCLWH+CMMI9
 /Flags 4
@@ -63219,9 +62392,9 @@
 /StemV 74
 /XHeight 431
 /CharSet (/greater/less)
-/FontFile 9355 0 R
+/FontFile 9323 0 R
 >> endobj
-9357 0 obj <<
+9325 0 obj <<
 /Length1 2282
 /Length2 17335
 /Length3 0
@@ -63364,7 +62537,7 @@
 ¶‘]JrŠîBg‚û>-O6Z˜ÝlÜ tš’H‘¾Ç<j\ô”nOæ=ý'wÍûW+ãZÕß-¯oOÌ#Ÿ§ä —IJåÙ]ø3ÒI8º(@ºÐ»Á!¥¸Õs¹® Vîï“šÕö1f!OPÝ¥0BИ¸N¿ sp
 endstream
 endobj
-9358 0 obj <<
+9326 0 obj <<
 /Type /FontDescriptor
 /FontName /EXYYDG+CMR10
 /Flags 4
@@ -63376,57 +62549,45 @@
 /StemV 69
 /XHeight 431
 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/acute/ampersand/asterisk/at/b/bracketleft/bracketright/c/circumflex/colon/comma/d/dollar/e/eight/emdash/endash/equal/exclam/f/ff/ffi/ffl/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedblleft/quotedblright/quoteleft/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
-/FontFile 9357 0 R
+/FontFile 9325 0 R
 >> endobj
-9359 0 obj <<
-/Length1 1016
-/Length2 3721
+9327 0 obj <<
+/Length1 1014
+/Length2 3862
 /Length3 0
-/Length 4375      
+/Length 4518      
 /Filter /FlateDecode
 >>
 stream
-xÚ­Uy<”ýÛµd-KŠ,áVÈ>ƾ‹dQ¶Èdc™aŒ5[¶A²…¬eÍš%kÖ‡ì{
-cOöÈÞàžÞßSïóû÷ýÜÿ̹ιÎ÷Ìõ½îÏÍÇ5Uƒ£"´Ð(¬(X¬ Ü€ÜK `1qZ>¾‹D£4`X„ –—jn¶€„8 –Q”S—¦ån ½0H[;, pCð§HPsB`Ö0 aíNDk˜#`ˆ¶F"°^b€š£#pçg‡+páŠÀ¸#àb´`0 GZc‡[$Šô3Ð-”
-ýU†»9ÿ‡rG`\‰¡ bHA€ŽF9zp„
--HM<ALòÿêßæZnŽŽz0§Ÿö?‡ô_4Ì	éèõ¿´“³ h8ƒú·Ôñ+Gº9ý›½……9"­ÕP¶Ž@üW	骅ôDÀ¡H¬µ`stEü]G àÿAœÛß@jÆú7Mu…Ýç߆Da¼œÿqý)þƒcât0HOÀ\\L\LŸÿü²ø×Yš(k4‰".„´ Ã``^´ÄÍ "ià@¢àO áIC¡±Ä€8_À¡ýy² Hûgé’@:ÿ 9"2úoûI9k´“Óï
-˜˜„øÓ€~
-ø·€Øc÷‚ÅêHlGÿö—'"âšÔù7Mtw&®þ‡‚hùJ ×? ±ãwiâÙXô4ñß¹ý¶—@ÞÌ/þ¿ïV]íùHTR
-•òrr€¬´¸ïÿÑY»a0öï׆¸ ÿÁ6Hâ:!žkÚOchkÅ`ûçU¡~šÙ…B¤ê¶Õ1zo›†ÎÇ’:¾êºí"„/79*J¹@ÿ…ⷁÃ5¢ÞÇ Wkó±KLÒèÉw«/)Þ5&Û)¯Eç+ûA«uU#;kÒ¤úCøî‚xÓœöôo­fB4Œ–¨&yHšÍÝ+šSƒedM´RïâBÊù%yî0&¹„Iá¦<ããÎLõùÙã¨ß	Ol¡ëݘŽ²©3žÜßYºnÎ’6*cêýh7æäh{©-,Å™•ZSK8zR¬âIB(§=ƒÉh¾»7Ú5ËîS‘î'89ҝ¡ë!!Vþ%/Ýu’MÏ´Èú\—º/&²}o
-U©·Vkò˜´è“d¥Ï×ìŒAƒ·ô]iœv'mê+qÓ‰7À¾`ç>QG'ÝbB_šß/÷˜J¦¸ÿä|ZIZ2sDÛ,´— b³·ZÑC#TH9ûðf¦¤Ù°ÄçèyBžœ®ä)f%›Ý<Üeý@³­ÉîµßW[ùhòÇ¥>5ÁS_ÓÓdØ`Böü¸8+.!׉g®–íÍ’iâmíàлq·NvûîX¹l_ⶑí>Cæ†Ï;1vñi=^Û%Æ£û©5íý–ëIÆ5‰¾©‰½ý®£cöÍŽêl\¯³ÖÎÁM1@çËAW/~wgdž«ô‚—"qÑcŒTYSel%aí~ý›·].ÒJ%pNJÛåë~¸ê’NÆΨÀ.å=~µ¶£j;tóœÏMÃPTZØK¤D-.O&t¥”ôYø„9‰¦-‰Ë[|=^¬ü|)ÝûÝú`gνU2\µRWêyƒÞž¦NÖW–u–«—øÎÊo­¯¹’oÓE6mº»>ì)®@%YCï)ÝTø]8CŸÙfœ…+?md2‘ ú$ö,!Ÿ
-ìZø¯¿~yo¯?Z¬
-Æà÷§Ãß½Ôˬ¬ÙYwsP­ò:ÅW¦Vµ›íS?Êyâ¶z‹-KíQgOTa>¡X+<ÜèÝ)w2fŒbèÈ®lõ£ó†ü.½Onúä]MÅ.¼øœÂ ŠÖÅ
-RMɵˆf®dÊQÐyÌ(cgἋeJ$ç¶ýy…H]./¾â
-Ê¿|uÒÒóHýCÉ‹ðhêˆk½}dÚìÁ’ïo~§”^™›HËÀor_/¡°šèH?
-&¯3ûöûx¹ÞqbJ×%Ä:_vNuÌœ&5uÙ±¨èäB´ç`ß 'Ñw¤z5f-< -CPø.€A­ÝCßÞ¸¨hßÝîžÃ¹‘ÈÚgä[•˜ÃMýærÐ3› dúý¯Ú­«
-	G”%¦Ĺ÷:‚_½Ï;?wïBË\öá›õJÄ ·4™æô¦—…qP׫]Mðr]ó% ö¯oé¦BTœ«j¾|§]r扇Îüámºäïvì.èwrð$¾,Ó/àÀLH_½viqˆ÷wº9£:äÔ
-ÿÙ°¾’ž‰yrŸ;à¥ëg¹¾QŸ(
-!ýh2ÆÙ^4Å–[brËÖÂæ5±·²˜.-6~Þ+MÊ
-èœÅð±(=?{)¶-tRÀžTdïåá†%uóçÁ%’žqp˜ußÓBä+´6ú“ªœñ†«’}œ]úù2¨$Ó8©©gI.âûßÍZC»’GAw+#éÌJ¿ ¹f(˜pÑôZêò‚FüpÀ)ƒ¹Õ©\E
-u RÌâv×^ÀÐA3aõR±B¥ZKÆÆs^5ý¾iÑ=IäAY™‰l=R*ó«dÔ‘št ÄQ»ª­•å wƒ¼r2fÔèZj!ƒcôžïìªçYY‚àÜ­žçŸœ^ùœj">³«}¬šAwÑ€ ûÙ~+vŸÜ(Àà¼KÀ“ØWHÖ»æ_tÔØaâ[ܧ…É?Ϭ|[|cZèoà¿lÇz0át€MÏv¬nÜ¿;¢áçÏâ'i|ü¾&¼Î§{\ì°˜š];쁶ºN֍üj‡Ð—?ÎxÈlÀ“CH¸¡¯öU šœf²Ýjjæa¶sƒ;Øñ±á£ÖGO=¦ešd	úyµk%>Ë6}•“·Açu|Žx€÷ßPgû2´vŒ@“W±zxmë›'Ê"ù×f9¡Ø~j‡ÐP§1ÛAü}¼ÆË3GÒëC}Ò®Â;Ý3ó¨ôþk’…¡L8
-DÆs½1Øz¼lE]ß™ÚPdÔ*|ш¦KÌx<Wi®Æ™oláÔÈd¦EaÏ|¢]¾èB§ŠdóOÙAŒ²iA"'ËÜŽ»¡Uë`á
-Ez·P=”^å</h•Û—y*>dY8°*–YË5·-~ßq4ÜÄÉÇ)I¡ŸLªüƒ~X€†´ûµqc7Úî!žœ„Fz®Ä›œÜ§a*ê9c~‡Æêú]F2[O	x¶JÌ|ŸGðf¦|œò±—ûá¼TÎÜŸtñøí?‚OOj•3àÐÔ¡‚Å~Œ}‚Ô¦á%¡M°ª“¾ÚJÅXÎr7R¥ÏYÉøœ–ê8¨ì—o­{»Õwû*ìšù*|‹­MÑØüؽ¡ˆ‡Û°†SôBdª}¢rN·?ŠšÁ°^I'C¶—õù,hl+RRèÎ;ó¡qþúªÂLIëk%aI›}.‘Wü<stÖ1Mß;øn®92O×ÄÛzT¨->éòݝ\jÔãßÊ«?š«åÚø ÷š$Ìrúdz,wÀŽºòAÜ>7û‘u´%¤®ê¾ûñKYÜjl³Ê¥ùç+:^×nÀ^_y &²eã%–'Á(Óöl‡‹VÌEeÌv-A±ÈÉñÔÂÛ¡2
--_Ÿš1.YÂ6,®øAððc?ëÅyË‚J­\ÕË­¥“n¶|×O‹Ê¹C…ªžÒ­¸jj¾ú‹·f.i$*HV?<^Üš²<²H’ρYíÄy_]Ð@&f‚ ®ú‘§/ÚT¢¡[? —„Ý_•u¯àé´Ã@ã‹sáÊÆ9‡ýo/§×?½\í
-±›Yf¸ÕÜJ"eý²<tðÃÊ	­ƒþµdÑòKpj¦71
-ôá1Š€FY¬‚ÝÜËS½Ìd}ž<¥uñ³yusšíÌ¿mOïùÚPN%ëøô”(6¹¢uz5ã.Œétð6sÉE­?Ó¶?<s‘ÑѤ1){ðù¾|€îýâÉIñ:èúÖ^ƨíGÖŒI±¡{{­mÂú…f)Ûb_Z”<–u¡0]bŸ¼Ä?°b-TÔU8þ:ÓÜêÀL\_Í?`$±ôíº×…€Té¯.Å‚õi$¦óéjŽ Ïwœç¤ØÅz£õ…ùi6çÔ®e&p‚}Û
-ؚۚwu6EŸÅˆå<O‹ä(®må
-öXùZQ°6âüãþ½ªÖòBQ·Ò©ÎÚZþp2GEj.|TûÎZýAòùeC*+iËÃ…J×àN³ãQxªB›ñk™x©š·(lM±hÃy‹ÕƒŒd»?•)̲ÈC©‚²*Õΰml
-–ôý'»bO**Nr]7ºÆ¬#x¯èúãKçpWå(,Äd„Ç„sÒ	ö‚,™UáRmR8”
-y©R"iø鰏:vùpJ5¸®ÚZ“‰Þ3¬ÝgE+\ÆèÔGÖydÞDšGT|п¥£Ð»ÓÕWNGÏ줰q¼-G=(ê¾	i÷y
-ò®'£PPÙ Öd2±}7ß‘—×M@¼-fùT’[ðôCOJw7¤º³Çs"‹OCùH9òöJ­Á‡ó(¦g
-*‚Ö±K™½†§ç'£Ç5mǶ‘û5úΆ¸zßúHP€,Y‘AL#Ú`•M@Ã!Ð9|èlnsGrUØ-¸Œ21^ˆ(fÈH’Úô¥“ÃÈS–7B!Wøjl“o“%·‘–'D…¶d¾“]¿B³¡Wîè½æÅÊÇl6•¿nTì“ïõ o7ʪt©!ôSE7¤m)E"{†RDΦ_–Ú¢Œx:÷™A)ífTÏÈsÕ!£ÆÔñ5ýZš(öÛs{üæ-âìon¾1Kîú^yÞñš½N/f•˜Å2.¥;Z—z"ï ¢¥>¢õâ+]ÚþŽºÂ –VÍrÿ‰¤iðZá0©}Ìïµ™Ä2
-dX°
-‘ÎçZ<^mªq­4ƒmêA+î=õ_óË4Ì3úþÁI˜^õÈJqât"ӏ;ÁR’U%ìåN at C4–íÏÚD~ßuÎz¢ü€\Mw¥Hý,…{½¬À¾ß™°Eð¦9û‘ùáfÜüEuªlѺ³i(º¿œiq¬ÎçQ¶iKšc–äÇfê3•éÅt‡žã÷—EIFÈÅî;ÃÂ^$é
-wâP]òÝÉ£INƒ´´¹šKµjÃ'À™ÙT‡q†Wq7o’Ç¡\Ÿ×9dyÄy†wã
-Ð.ë‰H®dFÖûrùŠõ%d1bœ¥NQË:Yêªî”„‡Ä!¼×G»E¡?ý>ŠŠ²ÉTC)ß”.Ž}¢å1佉õ_^_«rŠmÏTÆfÑ+¯¼TY~«IX
-/ïPßí\µðPÎý6“ÏÞI% W±g{›Y2*s&Þ9Dm†°GÇÁðÍv‘˜‡«._¡wµÙë
-"cSË]oM-c*5Þ,h»’*kžDß–]=3 ;nRà=e-ö궸“¯“sFAtä›û™XJiˆobÌ{£Ýã79©Ñ-*´Fœ±•ÝÛÁ¥öãŽÑéâ(Õíï
-Ý{É÷nëO†a,x¤Cµ¦ƒLxS-sÍÍ¢®öG*‡'˜zµv?	úÎXÏ7÷áXw¿…4½V9“” ø…»&ÂÁ¯p'é	}–;¦oY·óÝêc-õçü^§²:KYÃ#—ó8CpnZ“ú`ÿ*Q¢H
+xÚ­WWXS³•¦š R7‡*-Þ¤EŠ”@%¡]iA)‘^A@*E at P:¤KAéE4ˆˆ7ïôžÿõ~û%kfÍš•™Ù[DÐÌRZ‰sF]ÀañÒP¨2 ml…PHDDÛ…ÀcpX¥@•” €–¿+ ƒ Pye¸¢2D$h㼃|1®nx@\ûÜO’ å…òŸ °€1ï†ò¢h¸ <Kœ…’´<=‹Ÿ~€Êå€BÊ€ P ‰qÁÎ(Wþiè"~…‘þÞÿI |ý(¦ qŠÉs Å"‡õ(4l‚£ôBQœü˜ú·øOO„×OùŸCú¯4Âãô¿œ—·?åã(_ì¿©WP¿¼£¯g/âž-¬«'
+۟
+aü.`(¤ïâ ž~¨¿ã(,òß&(sûÛØØâ²¾þEÉ_ûü;g†À`ñ—‚¼ÿQýIþCcÊt|1À"@)DÊóŸ_öÿꥋuÁ!1XÊAÈÉ__Dˆr$„@‰" (Å0X‹ÃSJ ÊL 4Îôs
+0 ¬ÿ3ôÉ`ƒßHòþAŠ”Ü¥e—`Ä?H–’sÁyyýŽ@)nÁ¨ Åø׸(5n¿!€±@J9îH±éý»EÍ›rH8äŠœïP ûý)¿{ËQzáÿ‡Qºý–WÀÁ(ß_ùÿÞìùó8Bˆ4\†ÉA%EE at Aöx.þ¾¾(,þï—†rÿÁhå˜P(Ê4õç¢ížÑs?\·h¨œN‚ê¼kS²Éç£mŒQ“)Tž%Ï
+}$ÞÔYTdŸbY¦[<äñKxj>paëºOræøÑr€Órvp3õn¶qÐ’÷_ä¨5ÖÖƱ½u9*Ó‘7/î߶)îÉÛî]+4×¹ôáĬà±»€úŽœhyëÙž—coÔ‰Â-Nfú܏“<y;•vn0*Ü=–þ‘äÌî±?ûA}éèêÞʈ¦G=öÕø„Ûk/O71Q_RV ±èVNsËáAe.XcÞ(šœ‰SË%!äu	¥Ž?ÇZŸ.9;vãEQ L¦n¹4Ïoö¬‰Mpwº5‡,#µk5‡m0Yo±¾NU1oýXT0ì!n>qÑԏÁë³Ê,ºu?½!v>]æˆ`š¢OʼȎš{!×ÎeÑ]%²åVåfIè~g6p(…ÞH]«É Q~"ñ³^!Üv6}ßl„&­TÑþÃwµˆÛ.> ëâ¨ÛýÔ­2ü£«RÍõšÐfãs?Âl~d!†Óîë/N†B#ùSÓîy	ÆÚie&sZ{›uõñ˜h_nUؽüºNáUúî%W2ka>ë
+‚ã^²ÛíÜ—A»ûUWÆÉ9Í=ƒö™WšÓÃrÒýÆ_;’mZÑ~š\-H_ ÿΰ_h€‰zˆP¿ÆrŽ316éõÉ›wçjÏVÅõ„nú¼?
+’M㛕s+3z&äSOÍ}R™[ÖÛì{É:9YÃuäS¨žA²e67nÙk‰-•Y­¡"ÅïŸÉdèÎä†lÜ–©c«a~òùq°·Ðρ6®¶Ö´YÜZ ˆ»Œüͱ鏜Â×cnë®–¡»nQÏÛ|Þ%@”OÀ›YrOË?I˜žAOrð—åŽ
+ϤiS"hÌ€Ïû‡¢š••…V_“d¬ác
+D_|8£ƒiÞÛˆóÐhúñ¦!§±Ç–LRLôß?Ä×æ¼<ϝ®~æˆn½üëæÀ^ÙÉ"à¤.ñyÑù6KQŸ¢^h©Pþ}þt6«.Ú(vøÄœb§táj¡"sà[5ü;O¤ðRíŒjÁ1¦¯ÂT>âm¼K%ÂQe¼B“ƃG/CÎ?«ÊO¢OxE­Ï
+¢÷é¸ÜêÂLnÑЛ-Í*:§y€™j"ò\ÖÆ™°ÁÐ ?/ö<£Ão^ïœwž…o‘‘™—ž»qh]3¸g¬¿€Ø¼Ô¥Q™5Ûv
+‚÷v,Áñ3±×Dßkõšº_©¨ ¸Yy0%¶hv|¿n™vԁIè¨,òPPËæŽP[ÚÁñªyVˆ y¿/ºäI)Û‚Õ©Î…¢™Ãm—Õ„a9jÝù­ û+QÏK>3è2 at WZÛHÐ@KïvžÄ	¾5­0‘ÏíÒ¿z‹¶ÇwÑ<Ús;eÚÏwøæØû0Žù|$ðö¾„Ô«Çú5n„Ÿ
+°g^8iÅÌ­Š2Æ%‹T½œY¤	µ€~Ðdäߦ?RÁ„3Lž½±ëpK}<I~RòÊÍÀî)yÕœ–ŝb¦SJ‡ˆtv\/u²„I™†´á6é“}hãC[7󐩅ëOA—Ë-`êõJQÍí!ßÆ2í6½{ÝT¿‚9_ðpÆ¿ÙÜŽ‘G9žzB• cbR÷P¸ðB·’6À®‚/SXÑŽE:å:™:첸šÌ«MØÉâ´î´×Ó6ê‘>4«òÛ«EëÑÍ©crköÍÞõŸ>ÔÀŽÊ"-‰^!F‡&÷ ª7.[zyÕ…å‹-¶Ä¸MÛÛll±\gO,tø¥;ú©À<ã¨YÈ[¡10zG†Öå­˜¤'“£Î· tuIJ…×Z3R—z–ódt¸³§Ž›ÞìoòÕÕ!>"jÜôûã#þp|-Và“Ëde?{ü[0ÿÙZ5|ÓáèðçÒÓ“gélú7CtRÈWOo™X ¸{ñ”¢lc·K‚Û…¦`=ÈÄ:LG`øõùW×O	Ü@HAh+×uõ¹îvÖPñý5O¼%Ú™MÚQVŒ`F‡õè“'ìÇÙ¹pŸ*]$o$‹nv_,É™oÞ¼¹7±Èc¹±ÃŸDҏÐ3bîï¡ÿšÈÑé¬"z¶açNÊòåú·%ÎÊ\ú±Åñú`ƒ@”ƒÄ»‡Ú|¶‡ÑãðwYß‹­IsOsh¹ÔñÙ«?˜ÝÖ“óWRtm)=RÕæo+J6"­ö{m,)rôß@䄝Ò
+R-jÜË»çX4çcfOújö<çÕzÍæ+í½¦Ò{qZήr%r=¤ù¦§:7{m×3>œíŠòRN®76ò¸ã{!…+Sž‹ä8´(®M3®õÄãÛçzSÑÄƆ³›CtAL3f÷Q¥ óýgØÅn¥³(8mó'¿cz"¹¡\J“K瓹ªðÁÖnºñj‹#puI]œD¸fÄXY@ÌPtßw0°í.ÀkÕmçšÚƒ¯·"ix*…¹påIÇdnêvnŸú‹<&ˆ«]R®» ªªöò1íÕ‰†- |ðD¿5z°3{]¾âÖ[‰ÓÆøÀ:T¼Ÿcr¥sÎʾUNHúÔTC½+$¹V5^ÜP64c G—¶_e|¢Y1ÖŒârߐ:–Ë Éfê¼bÞ­µÜ1ý¦Õ\]“%ôhp,¨š(ÜàNoZ4$ÑETë’×·9u—Ïz:öX^>‰ 	Õ€M^4Í œÞ‡qŒþ4:Û8@œÉMºü¸®‡÷Y»3ì0gÒwœ|ÓêñqüGOZÍü˜ñŸ —˜÷/WòwÆ$ºÃ¤˜›	 QÛ“ê/ËCS{„_ñØoCðç»îd¶F:b®°ñø9³u8VH¦UÏ›=­lõz¢jÉ\qüá©&¯ÐÒÑÒUòKÁ¡÷3´#OiûäåÀÚ\
+TTEŽ¸ï8ìÇ_ñ¿€FÎ:}£írÈ(³*L*Û;YüíÜd_»aÅÇ»Oó}š^÷ÿ8TŠ,m	u_wvÏ¢5ÒxnÕ$Ìsf9žz„=iא¼çût:5ˆFNÔÔ©wIŠwκéIqÅp½šùÃZ'~Ø`捜
+õÊ(ÙòýÞ¶#Ñ•]i§k±aƒ5ŸÜÍb–Oïr!~Ü¢‹[aLK,?J^ƒ‹ù3ë8Ñ®²7.	¾“¥Ñ¾%PéýU¶ž®Q½¼Õ'ÞOÏŠ³áVŸÜ”¸ë_3R—˜-d3'Ö­ª m´­+ÓØË»ú¢
+
+6_ö”^;dx´ôh³eЉ®i½gŽVñHæN°Ô®¨\øâà`í/×Öª¿–3úí¹ž›M݈çd„–M¹t<h׊Ì.k½)C(g\VA1Ýd	¯"T¯pŠšvMŸ¶åö±ì$–YÊg
+Ó^ýá[ƒLÖ“x&Ö}çAéÅP„ŠýƒýµJÝÇl²›±—üqí¾Ñ#msþÊë;׍|úÕéö¨ …¿ïj¹Ö£¹ÊÒx$à¡ú¬è«X»IyJoÒ·EáúQxX{ûí{Õ‰K\Féà{‰]Š[žI˜
+‰¯´S¹Ag"<xø½»øÛÌœ¿	ì[Ê	ã-sødHÚ˜€ä*º³(µ‘ñ˜Dí¥|×Q+ŽÞ!õ¸¹>º~gbnûH«ËJ4nÎgì¥`(êóy–GôpKæk[ÇËÊD§ÌãX°><©J,DuD
+¦öÇ1{Źò"ÈÄîz{“aéÛp™ÃÑÒ‚"'¡4$mN04¡wŠ=C£
+¡“T¯€´
+T›~@Rvµj›SÆtcaT\b³û§¬Ú•?JN4ª1Êqö÷¹spi$?>оW”ä)]Yd¯.cgTßY:Úu…>IU©Y\ÏL°-)z¡¯ò®°}ZÌti‹##CAˆ¹:Ä¡ …6SQxq%íópåÓ½†Ä·¶h杣¶Ø5øƒzÌ6í×nU¢fnø›LIA¯ñ–Ÿ¶4]Ð.qeú‡|JËU8é!=ÿòÀÖÆÛ8´„g¨Î…sœÃرlÆ=“ío×Q%lQoï@32›èd‘Þbô¤,KÆ«¦;V1w(R_­|QxáÉ1êF¯ô¢¿¢©þkéù§
+x#ö5­Èª·Ašz;ªÐóJ|rÉð‡ {pÔT“ ¯¨ù Íllþ…ŽÚï,õÄ&æàqq¬5¯G°„íÔnölxôÉLGjŸ¾KfÍjq,øÑ•µK{¿Å²«˜ç{×€“±sp׊çßD 0±Ñiªuîi}›U±ÎˆXê «š6§ÅÍŽ=]†O±Ú=ˆ¬øæjuÜñZ51®s_]ÞÕÒ-úžTðzŠ|PLÇéàZ,ø|±Æé%ï5é²³êiYïãš”Œ	ªÄLg÷îÄâÓÚæQr85ðö²-õiW1‹¯Úزü¼P‚흷P^1YÐcBŒI]—,´öH³ñVØéWG\B¬k,@:In¶åsÄÔ±Uíý£#·®ÂþÈ‘-™w±¼ö»"®©¥&¸Í˜-ç:Žý	y ùÕ³saŠûŽEC­‹—xi3â<ÄŽœå›š$µxlÒ™A‰æoXG8ÌÕKä[RÕé
+¹G°	hÕ†‹õÊÊ)Ö\òjßF vPjó¹Y;¨9A67Wª}îêíÊ~µß™ ®4‘^î©ÈÅçúròÕ7BÑ{ÕçÅKwï²Ã¼•Ó%=„荬Vœš–L{Ç„Ú4²ÙàïÝžñŒÏ:°Ùé$Ôzæë±»Aëý•r3È‹ùÝad™k%_œ²Ï\’Io¤½ÆPW/lÆé,g)&·V&U÷Õ(Oô杽©qÑÜV½ìëÖò#“"5	èw©ìë$½/©w,Ž²+mØ8–iœd"]Õü+ª¾o×õ¶žŸVQ²©v8– Tzåôäh‘¸ÞhNãIõáÜ‹Ö¡ædiÉKkEÓcÊ1םCÖ¥Lžò2…¢80Þ¼3¦ï+GÝ<5HAùBRJ¢h§-‘¼Õx3çż(Øø©?ç|¯âÎîµÂÎ6[šUh£Œn@ͽà‘ì­æGÿ[°¶´
 endstream
 endobj
-9360 0 obj <<
+9328 0 obj <<
 /Type /FontDescriptor
-/FontName /AWOGYL+CMR12
+/FontName /MRUHHI+CMR12
 /Flags 4
 /FontBBox [-34 -251 988 750]
 /Ascent 694
@@ -63435,10 +62596,10 @@
 /ItalicAngle 0
 /StemV 65
 /XHeight 431
-/CharSet (/H/J/T/a/comma/e/eight/h/n/o/one/p/period/r/s/t/two/u/zero)
-/FontFile 9359 0 R
+/CharSet (/H/J/M/T/a/comma/e/eight/h/n/o/p/period/r/s/t/two/y/zero)
+/FontFile 9327 0 R
 >> endobj
-9361 0 obj <<
+9329 0 obj <<
 /Length1 889
 /Length2 2612
 /Length3 0
@@ -63484,7 +62645,7 @@
 47iRO^ÜIV;ÈæuìpyÜ[%Š·‚4;ýԦ߶Ý*“|saJeêÅnUOeÐööVjJæes:µwí_¾ÁKâ
 endstream
 endobj
-9362 0 obj <<
+9330 0 obj <<
 /Type /FontDescriptor
 /FontName /FKGUSP+CMR6
 /Flags 4
@@ -63496,9 +62657,9 @@
 /StemV 83
 /XHeight 431
 /CharSet (/eight/five/four/nine/one/seven/six/three/two/zero)
-/FontFile 9361 0 R
+/FontFile 9329 0 R
 >> endobj
-9363 0 obj <<
+9331 0 obj <<
 /Length1 947
 /Length2 3215
 /Length3 0
@@ -63534,7 +62695,7 @@
 ‚ÑûHr®¹ÃéܳÌãÜN9~]ÁõkŽÆµQðÕW(ž—ú½ï®©÷NÌ&bjßûuøÇ•ºÍŇ«/„œ¥½¦vg,”|ûh Æ~ÀÆȍ"M5pîqÖ 3“á/íp–'‰*oŽ§\ӐUÒz™j4*á+W)©Í/òçëµäÈoYç«|oL—O¹'&DUK,,Ðô®äçê¹v—G¢ãCÅ÷®ãTsôiÉ!‘Z…(˜;&_¥X2B‹úv®½î`VÍœææKi)Ò«(Rgp÷¾Û»=øj b~›åõÿ³dù
 endstream
 endobj
-9364 0 obj <<
+9332 0 obj <<
 /Type /FontDescriptor
 /FontName /DMYVZC+CMR8
 /Flags 4
@@ -63546,9 +62707,9 @@
 /StemV 76
 /XHeight 431
 /CharSet (/M/T/eight/five/four/h/nine/one/seven/six/t/three/two/zero)
-/FontFile 9363 0 R
+/FontFile 9331 0 R
 >> endobj
-9365 0 obj <<
+9333 0 obj <<
 /Length1 1699
 /Length2 10967
 /Length3 0
@@ -63646,7 +62807,7 @@
 #Çg~9®ÞkP éèûQ¤5 BçSÔúbFˆÅrW$!ªvØÃa1×5¿lôÍ)$¯y¥„ÀF³$Кù`P½‰i9ø…x™§Àн”®ÿØžÞÞx]Ä-=‘ à ªÀmÃ_Và´æýÊÑ»0Ýô¤‚h0Û¾Wù……d¼P€ÎôÞ¼ö¥™ÿ,­	,ÎCûåªÈËå„Œwˆ(\”ûŒýxZX3b¶ž–¥:¡åkg=rIÉ]'ýRñÔš7Ó•Å‚e´ž‚ö—:+q	Æޝ.úBÌ€IÓî» _0Ü?éÿ?ÿÜ[Q
 endstream
 endobj
-9366 0 obj <<
+9334 0 obj <<
 /Type /FontDescriptor
 /FontName /OBAAPB+CMR9
 /Flags 4
@@ -63658,9 +62819,9 @@
 /StemV 74
 /XHeight 431
 /CharSet (/A/B/C/D/E/F/G/H/I/J/M/N/O/P/R/S/T/W/Y/a/b/c/colon/comma/d/e/f/ff/ffi/fi/five/four/g/h/hyphen/i/k/l/m/n/nine/o/one/p/parenleft/parenright/period/quotedblright/quoteright/r/s/semicolon/slash/t/three/two/u/v/w/x/y/zero)
-/FontFile 9365 0 R
+/FontFile 9333 0 R
 >> endobj
-9367 0 obj <<
+9335 0 obj <<
 /Length1 752
 /Length2 1145
 /Length3 0
@@ -63686,7 +62847,7 @@
 2úȨ²=È1soôZ)²®P%k¶ƒ4ÛÝ~ 0.x
 endstream
 endobj
-9368 0 obj <<
+9336 0 obj <<
 /Type /FontDescriptor
 /FontName /IUVPNN+CMSLTT10
 /Flags 4
@@ -63698,9 +62859,9 @@
 /StemV 69
 /XHeight 431
 /CharSet (/dollar)
-/FontFile 9367 0 R
+/FontFile 9335 0 R
 >> endobj
-9369 0 obj <<
+9337 0 obj <<
 /Length1 1903
 /Length2 8831
 /Length3 0
@@ -63782,7 +62943,7 @@
 R1šŽ7Ž•¸°1ÇÒ.CäŽÒZ£åkŽ‹nô8×6·­]ªd¹{Ôd€õØÆnykäeÞØ™ŸÔK¯«žfÖþ³”êB՞ã6Òr²]!ºt´•ä“	ÁaüïD#XLoa„RÑ’†—’¨‡Ï„‘ð[FÆï8k˜uNø¸&¡Ô-aƒGmQh‚äl‘+žÈxtmnUPgX;%®TþÆ+mû
 endstream
 endobj
-9370 0 obj <<
+9338 0 obj <<
 /Type /FontDescriptor
 /FontName /NXHEDD+CMSS10
 /Flags 4
@@ -63794,9 +62955,9 @@
 /StemV 78
 /XHeight 444
 /CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/W/X/Y/a/at/b/c/comma/d/e/eight/emdash/equal/f/ff/ffi/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/quotedblleft/quotedblright/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
-/FontFile 9369 0 R
+/FontFile 9337 0 R
 >> endobj
-9371 0 obj <<
+9339 0 obj <<
 /Length1 1071
 /Length2 3524
 /Length3 0
@@ -63834,7 +62995,7 @@
 ½ë‚µ¢ÙuqMÊŸ{Ä.WNxùññ­H{ß[ìÕK¬gŒeðÉñÄ›ä‡x÷f§öG8ì…Ñ6L<Ke>ëíúñP;ÿå{Z6¹¡à¸ÚfjꋾÓ#@…ðü^%MÔ1š@wNÝš2r’›–ß;—ž¡²Ýìs¶¢<æÃÁZœþÆרüÁh\G¬Í¤÷#ÈR6±Èl’—ið)ëŒ“Hn3§,¿ì3¸¿jÃY·Oß¾ï(±+º®ïøòeë„	oNìÕ[±äß¼ò­,åKËå`º[³ïÕjŽÝ7sœã5¹þ¡ÎŠc¼!$“Œ”ÀÉl­vÑ'¢o‚ªþé² É
 endstream
 endobj
-9372 0 obj <<
+9340 0 obj <<
 /Type /FontDescriptor
 /FontName /TFKSKK+CMSS17
 /Flags 4
@@ -63846,9 +63007,9 @@
 /StemV 76
 /XHeight 430
 /CharSet (/A/C/a/d/e/eight/five/four/h/i/n/nine/one/p/r/seven/six/t/three/two/x/zero)
-/FontFile 9371 0 R
+/FontFile 9339 0 R
 >> endobj
-9373 0 obj <<
+9341 0 obj <<
 /Length1 1738
 /Length2 8148
 /Length3 0
@@ -63920,7 +63081,7 @@
 ¶Ý•«lö0Û™(˜Ž¥b…KÍèê;0>ŒMݾœñîÖíÛ–¹_L®÷T!QïCâȬkŠÈLzÓVP/óg÷f…>/»™Ü¼Œ,œ÷¸/±9ýýÌô\
 endstream
 endobj
-9374 0 obj <<
+9342 0 obj <<
 /Type /FontDescriptor
 /FontName /TIWENN+CMSS8
 /Flags 4
@@ -63932,9 +63093,9 @@
 /StemV 87
 /XHeight 444
 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/W/X/Y/a/b/c/colon/comma/d/e/eight/f/ff/ffi/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/period/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
-/FontFile 9373 0 R
+/FontFile 9341 0 R
 >> endobj
-9375 0 obj <<
+9343 0 obj <<
 /Length1 1982
 /Length2 12081
 /Length3 0
@@ -64029,7 +63190,7 @@
 ͸¢•ŒÊe!Qm­„S"#m“rÇËNär¤Ë%± ­~ä·üXäï	Ôoòã`¥ž)ó(†„"GúhÏGp ˆüZ·ÿÂœ
 endstream
 endobj
-9376 0 obj <<
+9344 0 obj <<
 /Type /FontDescriptor
 /FontName /WQYPAM+CMSSBX10
 /Flags 4
@@ -64041,9 +63202,9 @@
 /StemV 136
 /XHeight 458
 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/b/bracketleft/bracketright/c/colon/comma/d/e/eight/emdash/exclam/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/k/l/m/n/nine/o/one/p/parenleft/parenright/period/plus/q/question/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
-/FontFile 9375 0 R
+/FontFile 9343 0 R
 >> endobj
-9377 0 obj <<
+9345 0 obj <<
 /Length1 941
 /Length2 2412
 /Length3 0
@@ -64079,7 +63240,7 @@
 Ž!½‹‹•Ë[+ª?îcrÛõÖ萈… ût¸EndNþéfHBÛÁ3¦I«h…Ôž’\X£×Èá“Íšè­ÑgŠQНîÛüÛxþ!á+
 endstream
 endobj
-9378 0 obj <<
+9346 0 obj <<
 /Type /FontDescriptor
 /FontName /OLHIJD+CMSSI10
 /Flags 4
@@ -64091,9 +63252,9 @@
 /StemV 80
 /XHeight 444
 /CharSet (/a/b/c/d/e/hyphen/i/l/p/r/s/t/u/v)
-/FontFile 9377 0 R
+/FontFile 9345 0 R
 >> endobj
-9379 0 obj <<
+9347 0 obj <<
 /Length1 948
 /Length2 1780
 /Length3 0
@@ -64119,7 +63280,7 @@
 Ó^Ò+suŒ»½“;; ÖŒ©DËNë㾇Ô]¬}•Qg¼]¦jx¶`‰—’LsÖQ³ÂeÄR\øµ:jn÷„{ç£Þ6üÑñÖ_†ul€3Š`Iãeõ¡íÓ¦U<õd¯“aY=Ô;Sáö»Mc³‰6î.?G“1š6j¯<IWÊ鮍W0ï?ÝŸ=©øÖ§Râ«ù&.]|èbQwc¿ïjda;e_'_ocꯐ’ø)‰ió´0bEï`vàyßâ-?п¾×ÜÐôìnÏ$ÛH^ðìGú%•ÿG!™ù
 endstream
 endobj
-9380 0 obj <<
+9348 0 obj <<
 /Type /FontDescriptor
 /FontName /DISJDX+CMSY10
 /Flags 4
@@ -64131,9 +63292,9 @@
 /StemV 85
 /XHeight 431
 /CharSet (/arrowleft/arrowright/asteriskmath/backslash/bar/braceleft/braceright/bullet/circlecopyrt/minus)
-/FontFile 9379 0 R
+/FontFile 9347 0 R
 >> endobj
-9381 0 obj <<
+9349 0 obj <<
 /Length1 1956
 /Length2 16463
 /Length3 0
@@ -64288,7 +63449,7 @@
 bCë#[?Õتd¶ª˜\Å¢¥¤¬¬8øÚ1Vِaí/‘ks}’ÐApŠãÊ¡uÓsǯ­šÖ†*B| GØ‹u4
 endstream
 endobj
-9382 0 obj <<
+9350 0 obj <<
 /Type /FontDescriptor
 /FontName /KJFIBM+CMTI10
 /Flags 4
@@ -64300,9 +63461,9 @@
 /StemV 68
 /XHeight 431
 /CharSet (/A/B/C/D/E/G/H/I/L/M/N/O/P/R/S/T/U/V/W/X/Y/a/b/bracketleft/bracketright/c/colon/comma/d/e/equal/exclam/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/q/question/quotedblleft/quotedblright/quoteright/r/s/slash/t/three/two/u/v/w/x/y/z/zero)
-/FontFile 9381 0 R
+/FontFile 9349 0 R
 >> endobj
-9383 0 obj <<
+9351 0 obj <<
 /Length1 741
 /Length2 1115
 /Length3 0
@@ -64329,7 +63490,7 @@
 9ùŸÙãÅ”0â-5óT÷™/&ž'Óý»{~r¤RŸØ?äñãúm>Þ0yåê„®èEµÍ†_¿°Jm“L±˜Ç:µÉñ7bëÉØÒ!÷EK÷|‚UÖÕÒÈVÄôÅ®ùõc·Jrúö¸¸(JÊ"7ö>¨êxi3ëmqÞ09u½ò#~–îçxf;fìmnµ=ò ãîÃy›HMZ<ZiÍþÄîQG芘i1Ùµ¢ÅÝ<ÃR;ê÷æ–oÄ졨 ¶§;t%+ùäáz?vÇ·×Ó/¤c”? [hk
 endstream
 endobj
-9384 0 obj <<
+9352 0 obj <<
 /Type /FontDescriptor
 /FontName /IVMWBL+CMTI7
 /Flags 4
@@ -64341,9 +63502,9 @@
 /StemV 76
 /XHeight 431
 /CharSet (/a)
-/FontFile 9383 0 R
+/FontFile 9351 0 R
 >> endobj
-9385 0 obj <<
+9353 0 obj <<
 /Length1 741
 /Length2 1104
 /Length3 0
@@ -64366,7 +63527,7 @@
 žþf¡²–óIÄîò²dr™6ùr—pkåÒã«gÚ¢ÄÚ°ûÂëN9Ž3=¤è'/êë$dwÜóN¼Q÷[Žj
 endstream
 endobj
-9386 0 obj <<
+9354 0 obj <<
 /Type /FontDescriptor
 /FontName /ROIAGP+CMTI8
 /Flags 4
@@ -64378,9 +63539,9 @@
 /StemV 73
 /XHeight 431
 /CharSet (/a)
-/FontFile 9385 0 R
+/FontFile 9353 0 R
 >> endobj
-9387 0 obj <<
+9355 0 obj <<
 /Length1 841
 /Length2 2827
 /Length3 0
@@ -64412,7 +63573,7 @@
 åYJMé3ú¸ìÿ¡årýãûð`Áò[%²³WšS/ç<ÉÏ~bßšt½.€tqL{`''­ Õ`a¶ý/è2I#¹CPçBÍRZ;V€#qoEÑH]†²ùtàð•°AbÜ]WǧUþh—oŠ	ãÞK¥“úÄ£‰—_>-Á<z˜ÝjCr³g6_‘¥ÒpÒ|ù앧 W0Ýsò]œ}qË™tÅ›öèuæÉS/O7–_=`\©ä½ÑG@BÖŽ>jå5¬‹OéŸÊFcFâøx'MÕX´¶ÅÚ)e³ÚÀ•ww›¤°Ý«Žçü“Wׇü=¼Bc>;¤n‰jö–ëö—n_°³ Ð!ShuˆuÅÈÓ]‘«0ÕœçÞ‘9xg]5Ã(|u¥lf¼È…b°ÌO,îß–9É
 endstream
 endobj
-9388 0 obj <<
+9356 0 obj <<
 /Type /FontDescriptor
 /FontName /TOETKN+CMTI9
 /Flags 4
@@ -64424,9 +63585,9 @@
 /StemV 70
 /XHeight 431
 /CharSet (/A/G/H/O/R/S/T/two)
-/FontFile 9387 0 R
+/FontFile 9355 0 R
 >> endobj
-9389 0 obj <<
+9357 0 obj <<
 /Length1 2310
 /Length2 15237
 /Length3 0
@@ -64547,7 +63708,7 @@
 fôuˆ–‘Ú!˜Ÿ¥ú %%ûÉb‹tªi¡‰Y–ï^Rsy9­FÅçQÀ˹2„RiFÛv7?újŒýuR´g*À¨ö%:k¨€p9@Ðw'ÖÚ¿ˆ	­›Ôñ%áîôã¡e›îbøÖÑsÅJ;÷0Ýžý“ÍW‚o%K‡6ê­Æº¼‚c®hëÝœv—Ë5à…¾HcŒ`J#|ìg•3ÖHƒºF.v*®øØfwZvPì4Ϥ6Cp~YÚäòbBËC§óp‘ˆìI£÷¼_ë{WÓx¼6?åëDö¥‹—³ÐÎÁA`KNÿ°Úf¡9ÐJVùNô³N ²-Û/âÕp³ý²ÿy·fe
 endstream
 endobj
-9390 0 obj <<
+9358 0 obj <<
 /Type /FontDescriptor
 /FontName /YPVIBW+CMTT10
 /Flags 4
@@ -64559,9 +63720,9 @@
 /StemV 69
 /XHeight 431
 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/ampersand/asciicircum/asciitilde/asterisk/at/b/backslash/bar/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/dollar/e/eight/equal/exclam/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedbl/quoteleft/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero)
-/FontFile 9389 0 R
+/FontFile 9357 0 R
 >> endobj
-9391 0 obj <<
+9359 0 obj <<
 /Length1 1806
 /Length2 10866
 /Length3 0
@@ -64655,7 +63816,7 @@
 “ a_C _AÕ®gä³’U6 P¬~–»ãJPc½`­ÒÒa¢Ý7—ºm†¹ƒ-%£lp”sŠ [ž¹¯ë…ÑЭ—Ô>ð]FÖ]¹û“½XýGƒãQã½G™¯¼ìmoACDÕ´LÊ·1õOó¾ï牻LÒ<ÐC±ZÜ@Ç“ÄúUÎO.åUç{B«ÍD7•ìG,}µšn³â͏8î…¤ÕŠ²ªžW‰(¡Èrd-N¾Š0o=쇬‹ñ¯¯m¿ü¡Æ–çàKVƒæ»$ %_‚#éEU¢	$}ê1®LV¯§¾þ6yÜšuû ¸ŠJ
 endstream
 endobj
-9392 0 obj <<
+9360 0 obj <<
 /Type /FontDescriptor
 /FontName /KJXYJU+CMTT9
 /Flags 4
@@ -64667,9 +63828,9 @@
 /StemV 74
 /XHeight 431
 /CharSet (/A/B/C/D/E/F/G/I/L/M/N/O/P/Q/R/S/T/U/V/W/X/a/ampersand/asciitilde/at/b/c/colon/d/e/eight/equal/f/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/period/plus/q/question/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero)
-/FontFile 9391 0 R
+/FontFile 9359 0 R
 >> endobj
-9393 0 obj <<
+9361 0 obj <<
 /Length1 837
 /Length2 1182
 /Length3 0
@@ -64691,7 +63852,7 @@
 _¸©'-ÂUfPæaá‹Æ÷÷¼g|Ý,¯aÖ|qëÁ ³“RY
 endstream
 endobj
-9394 0 obj <<
+9362 0 obj <<
 /Type /FontDescriptor
 /FontName /ZUTHPM+LCIRCLE10
 /Flags 4
@@ -64703,1034 +63864,1131 @@
 /StemV 40
 /XHeight 0
 /CharSet (/a4/a5/a6/a7)
-/FontFile 9393 0 R
+/FontFile 9361 0 R
 >> endobj
+9363 0 obj <<
+/Length1 1166
+/Length2 9042
+/Length3 0
+/Length 9815      
+/Filter /FlateDecode
+>>
+stream
+xÚuweX[Ú-Ü-Á› ÁiÜ‚»»&8
+4Ò¸[pîÜÝ‚»;ww	Np»œ3wfî7óݧÔÞk½õÊÚ«žª¦"WRe6±1IØ@Y˜€¼ °µ‘“ƒª!DŽQdæx9‘©¨ÔÀŽV ÿ¢ßQ{¡#Ø"fèøÆ«™;ä
+í¬@ ÈÍËÁò¶²ý3ÐÆž d¶¶q(AöV`È%fcìd
+‚8ª:ÙÚZA&* '{c/Àô­³ÿ®
+µ±u³›™;hÔU4iééþ°ððð ŒÜþÉ Ä@`3€úmá²²±ý«Ò[
+IdÿÖ´É_±J¦†â&`Ç¿ÆИ;:Úò23Ûš‚Þ0&S&È‘™ö­Qqˆ‰¨õ_	ÿÒLl2~ʍù?u³„ظ@<þ6CLþÉÄÉ–Y¶sI‹ýßà7ùߘÈÀdò Y ; ÈÕØœù¯’jn¶ ¿I–¿`Cˆ‰—‡­-ÀÔÐÊä6½]=A G{'—ÇÿKüÏ2Àlì0™½ÿ³¿Á Óìå
+íÁ®€/@&  üë÷¯•îہšØ@¬Üþ®`h
+0+IËÊ)KÐÿçìÿŠ±yKÉÈÂÅ`dåæxsÊ[F¶ÿÌø/-þ©Ãߨ’!øÿö	üwJiˆ©
+€çã¼éøÏ‘œAöoÞÐümcZÀÿ̯`ã6hþm¯@à›kÞ.,ÿ«¥þÿ¿ë?kH8YYý­
+Í?ä ¼éá ü¥ˆ•¡ý…Zƒ­Üþ—þ3Pô÷ÿòH;Z…!fVÿ’	ì v™(Íÿa—ªlò÷sR²q ÿõ$Y8XþƒS3@ogñ7‚˜üGIqˆ±	bPu|s¥¡½É¿€¿hc'{û7yþ> ·{ÿ¹7¿5¹‚Œ‘çlŒù,~´ÞU	¹0îþbëáT¿yu"cGŽ°‚Þf‚éVø`YLÄž}͝.¦4b.PñV:(šH<‚ËÅ’G¤	'F*”ð˜©æ³/ê9"ÍÄ°‡0&üCR桨[¿Ôyé6•€è¶j
+žɝÎþ"<iin9’âÁ-þƒß©¢”•·2/üÌP»ÐÂ/8	E¦£~òþ“ŒJýñ-Ny¶Áì\¯‡ÏL$²ãÏs#"íb.Þö±Öó’Ó‡ª!Û\6]Ûe†¾\@Xý¼ù~]øb+½¥7|\_Q„9Š}ô26AâvÃ`Åg
+\ûowý(Âê*¶ç;r5kÍÊgg•nH{dœqÙâ6jäÕ;ÃLj#õÉ&!øMfÊ„›jì
+·êm—šÂ1Û=+*aàºf¯å¶Ï®®àò}%¬œÎsfM„›ÖIêXßénP
+ß®’Š„³dåfXº³`ÅN³ýH·ºùé—-µn׋íQɯFìÓlâÔa»ÌH,uQ@¦%4MeöHoÕ™æú8Ѷ’o©› åÂ1YYK.ȉaÌYN:	ÁñÈ^û³j#S¬Gò:=g/ìäif ÏU¢üÐÝÔR­!`¼ÁyRIpÈin@`™^¨oÏ…Ç{R4¡—-Þº¿êF¥ŠãÙ£‘iŠsâ¶JªrW#ö«;Mr­‘m­PŒ€$îs(ØC@ûºm6§dÜHå¦YºYÀ“‹Hº«ÊdPD%[ËY<–º£é@RJ5VÈærÓz•%©~Àò¢j01W3!]!ÝjDÃqJð.2R˜_‰»AOas6«Ü*pŽËÆS¥-眑–Çå4‰‡Z"L¡jï7e„?=gø„\+|éÒ\ Ôoµ'úˆú?Í;}!øŠRîGUpu´‘_àxPi‰ÕÚŸ>®ß˜¶±µûâMr/¨% À™÷Žn‚©bVž•ÍDɉÙþS˜ƒ8¬ÿ5“/AD’…ié³*#ÿØóˆÆëç²—Zºl¿W‘³Þš™.+vwÄ€úöž…‹Ç5.]ËÝHÒ¼¿Îf Fô¯]ÑÚÎÔÍC.‘£äÆáQ¤§Þ)m½ã‰!‘Ó¬¯V¬_Aéê¨Þý%ŽÞ?+jFÛ‡8‡ÔP·6übXù8oÔÒ–“ZîÏ—DÒŠëi…ÕÐ
+z”,{¢•‡âFÔ<Æ4ùM¤V:|.'«Ké*vàÑ>еÕ`"÷Úô?øÃ=—2!L!ÉLNÕâ(ïÍßO}» ìÞ,›²Ü¹¬`ÁþïkÆéç…©(WŠïKa…¯¶ÍräƒXŽîвÙNPXn]À»1pkÏW£b>ýÕI|q6SùÓyy¢Lõ9à†ÇŸ¹2aدÐlNDå@ã½
+2…t	kÙG¢ä¬~7N£Ù(<
+ë0ˆš_w¨[=z7Ø3÷dûÞ‹0£¸ü
+ê6aGóío6Çov–4Ãj »D¢C§ýÁOµ¢MLxìÔHqځvý¼›6#žãx±dÜÏõ—b°¿çæZLK¥éf]ù(ô¿Õ>KÜd“L\²d¦ÞÓøê²È}'¹¤\ØÅBýÐ&Lv?«^Rß93&–Úþ)Jt¯]`m‡
+°ü¾{Ò›z¶<\,8†ÀNZjDç¤mh„Ç?—•!A·¼ç²w­tÏCN›ñ=¥ª)™$À›ó’ŽüÁgÚò!=ph÷Áïæ 3ü»¢ÝG‹e“½ïbì²½{¾å©Ï¬Åùxeº–úa:¸0ݽ+ÐDp@Ó˜J(à	ø5;{ÈÖ¹ã^I4¢Çã=syn*Ôïâ\­êÐ;ÔR^uvR™š˜ÛNAIiÊè––v:=²¶*¯/¿¶Ñ{^T^S,´u«éŽ2ßMYìýÌ.qgj°wÅïÖº“›,ž}‡ÿ£*9áiÕYŒ§'…Ý0
+ÎXd^Ém5Ë\ü‚]?½˜óSC§ÈèШ%¢>ƒuÂNç æèŸøc5AÑ–,E¨Ëû™rtAA^1ÄÓi!žd¦Ù]Siiò/žàØ{ÞsÒ"Wo7ƒñák˜†\xcÌvw¬¯ÓŒ\̦SÜ} Œó˜tØéþSD´×ÂÎtç#æ¥Ð<ø™³úë#·š)ÎZ5õ½<ä0!›üÃZëI²\Ò»§ûò·¨ïç9ò¸s&\h(SNMµ)$ªv½
+ñ®jm¼h’j»®ŽKÉ9ÿDêðÄp_øÖs÷UëÉlº~—EàôW`&çdi
+¬\tð^=܉B*ÙŽÆŽÍe}H ¶‡mû­Ð;Ùm-rYf”8ëGFò”þ‹Í8Gµ¾Ö…ÞǪDœíó¨‰7ya¼z¯;çr$Ò_¯¦Š«'ß­boҝu‚/¾!D)ãÀ’ÌcŽJKŒß¡R@Ž$Dö)Âlɾ+HJ
+KDG‰ƒ¥Ïà=ø(Y£Ñ¡Zc:vL·PŸïâê0/©±ù¡4$:F¨Û˜Ã¥ÆªÎ6H±ÜUâÃèQoÐh&«h¨’x§w@=Npym¾Â­Gf˜Œò7*VrŒ…J½BpÛ,/ìíîÏ;"1‘Z²Óc¥aùï'²HgV}©±E&w‹¿‡¡	šÿu=±Õ™èòK7}›o &tŸ˜V÷°sM#>©y3í]§âh—‹[¤!ܦ`å›–üÞxE<o5æ°ψªeK³’zD¯»ºæÑõìØx"òöuàÜ™”}×2,¯•Ÿœ²o·‚Fç`wÈŠºüü90ŽÊCíç*EÇæóHÃEÇ—‹®þDX‹
+Š€Á¶dUìnç…bZ7“jHú$ÞXˆ”™G¥ö7›cëÄÕT”X§Á-¥A_TÊü·¾ªÖŠ ¤T˜­Ž	ü^
+©%Wž1Z~œžÝçk¨\¢°=¬*¹@°aÒô
+
+T6Å#êŒ$щMÂ!¾~×ß9qÊ!éwªÂCùDSž[x‘V*BµûÚÜˁ
+‰ÎÉ¥‚Ç ßlF&‹ÃB3®vµ|_P^äoßkaÈ­kð¬BÝت‰¼éƒg„/#ŽÙ¾Ï
+E
+Ç>øíýˆÔ¤AÑARwY‚ò\IŽà4l‰·EÙ0¡Ÿ,KÅo~Êdǐÿ8–Méú'|¿({—_xH»·y>(œn¬¨Joƒ•';%‹Õdÿù¸§]ã %ÀÿZö·4Í ã$b»GòÏlSÄ›sëUo4—ä@/^¿˜Hud&¨)oâ»#W´Wv‰vÂÂwiÈ~=ö÷M£ÕúœHÃà˜…m&¬ƒ‚À×ÀF8Élù¼£ÖS9¬(°‰ã¥G÷Dµß¶]åõ~©sv¢.´FCf6
+/ yS‡ÒcT oˆdù
+‰ðŽ<  ×v-¦ç£gܵ¡8ÚWÐw½ਣ0‰jã9eµRîÇ*=)ë?Ê°F…ôA0ˆ
+ùþfÙ”ÙH´ÔâbG…)z]¢£8ÁÁD½Gïü‰÷‹¥(Âñͨ¿D”Êìùä•×>-jtþ:—[bÞ¢ã:›0P}2¦%%TÌËò
+6Að7AÝx'yÅ»ÔÊhÖÝ„üghr%e“o¬´¼¥üqé6ó±o¯9¤GR;÷ÖFŸJ!׸fm3üÌ ™×“VÜ0ºçSÎÜî¯Zz·øì}$X‚
+¦µ
+?ïc´çm"iÞż^è°qºŒÜÿ¸Y¢ýœ$쀩}©·0ŒéN#ùytXh"š|ÍÈ=¬%P:ØÜåwI$W“UdÅÑ®<'ú¹¾¹¨ïòy‚D&Ħ tî96p½©ÖŸ¦»º?ëg½¯@]S°†r
+éµGK…Ù;¹G╝Ÿ.
+/O:^Li§:5iU‡c…²ëðÉ>驍ԗ#ÖMÖg²Š¤§bã?T;3´ûBÇ´º7ºñåã’5d|¾_ßá ºØ`x×äi^ÐU¤¯ŸîëÅ~—›PŠdR»cÊeϤDÀRˉá"½m·r
+_Ïá‰{Ì7м–©7át‘ =ùÄ«ÝÇâ««	‡ô!$Ù–Y¼öÏä〳®PúK¼­[-cJF³Ÿ!^zâ½~ò\pèÉ‚-1h‰´’Vóü’]ë4"q&ãÃ…Ë1*cj¹¾ÆÚðý7¶¯ í€Š/c*8ôÃôUvpW@ô·/É™uª÷…Ê•”ܽ•ÊùGˆ¸ˆJ-I(jú#ïîðß‹*‹•2ïtì(<å½Øu¬»¢ârrã‡9üoY¹¯ õ(X×Ö~ÆNg7«*ð|M‰[ãtáΚiaõÝmƒ1åk]-´ÇÔOPP]7ô¤´ëW@€‰ü½Îƒ>}jv‚(MŠŸYþQR˜±ÂZ”é!œ–/Åu-[–ÿeÕ6ö¬ÜáZà‘Á]˜º™ÈHu&‡`’¢*ÿ@¯7su&ÓzMT6ëCHöíÁ¥§XæuDš$áM\óþõ Íâ·Ÿ&`nì9Ä,ô[Aú¥ô´Ä	Ýdý(–ç¸yâN*I¢ê«nýé1J€Lyh—æ÷:x‚æäxŽ÷§óÞ˜>ÇB+'-iö‚õægß›æEõaä“Ðçý£óo¬¨aóª‹äfAÄ$ƒŽÆ°:~€^$B1l•{c›µN˜kåY<)	uæVEžXVê¬`Ê#’->ôfø¯ÎQÑ%n˜ë_^ô¢]q„é%áˆÄ É ,åƺÊtøŠèfˆLG(´©»·†®Ÿ/µ„¯õmÉ!vÙmã:mƒ÷µì¹`®b±~BÝÇ+;‚vW*› k§G©NmñÙ_îÂŽ—õ¹Þ¿³<$äò~D÷P¢8tØôU=Ú£!®Ö6«¬|
+-÷x*
+ЭðôZÿq‰Õð^œÐï»pEÝó¨_ÁëçcD>Öð/SÎ"ýy9²†êz¹"G=Å{¢Mw€SD·øäõlo…ácô—+w²ˆ{þ^ÉÍ@]wã·Þ-ݡƪš—Ô­Öƒ¥‹¼FžanmMj£È=7]؏҂cv¡½)EÙ=*<ÄÄÜïôÜ(¬h>PÌ›?›r–Ù	éãV½Œ°èŒiqºÏQGÛ´ó>£1x›»{@Ü8{ò
+[¦áÃx­î$õɱȾ|ØËÚ¤T˜±…
+ÄÖ‰”ήÍb¶2MsÕéíÕ–ú]ÚÇ„öÚŒ0¤jdbŠdI(|H Rõ
+øHêmÔ­.2F°Pëˆ
+c€;Gªy‚úr6­m2♯>¤î£ŠSùÊ
+˜Ïš¾·1¿5|(éßíxþ¤)u4Ò¥ñKEy·o-KŒYí}*ë~PN,ÕP?<5æÙeý³;ö	ÜTU¼S¶ší7Yëd´	¶bøö%ºè±Ž´MXÌEQrs?~t~îð;]ÊôP‚èÐ'aó3²"Au®°F¦]Z¨Ì÷žsè=+W«“OçK7ã$QdI[T1x}Dˆ|X2Á¦i"v{þF†a|ÖÔµ}ñ¥LÀMÏ߁½1yÆÏÒÕmvŽØy€CÓáùՏ£„g:ôø·y²YÀ¾vq‚•R×ðýק™Ò^Ÿ=  cw–¤èÚ½ÜÛ¯­¡WwÉŠd«°íûÎ/e¬gæúéÑŸö-cniÛ*¾îAÉTÓ..bŽ¼ˆ¬#t¿uƒÞbÝe×Ð
+1òÂN¦ý.(Õ¥ùuÔë„Ùµ­ì\8Ë#Ü֍h|
+Ýo>+¼Ü›zóUb4²úÍhb¢¬É=CÛ‚ï.È\éÁ„ÔŽê ɳ÷´°Ï‘‘ßT|¥U/ó¨}.P=²ñʵýî•[!¶Ì‘Fyñùò’šÚ´°LJ"ú<®3¥”¿?ñÅg>ÆA¦ffó*$j}[=3jê¬Åã M]¾Ç~øã%ˆ`lõhF«•H¤èLúáŁÕQÚ'|͍Ä^0Øs‚“$Ý Æë`¹?f†’vsÜöø_:j»hR€^ËA$öFÒ³‘œ’í¤¸
+ryÈ—»jHYöÕ¯¸&Q­ 
+°jŸgqì‡qKJÍQlkS;TT¬ÔGuõÎNKéÖø*Û0غ;ú
+*›èTx±Bðèº+Æw¾b›ˆUVœŸ™\éi­Êtådc—M5]+æ2³¤}FýfD¦2,Ùg=Ü…é½>T•°;!‹r€»¹—×òZ¦>r˜!êÞõAvû*\…Õ„'~RçÒ(
+…Ä]ð/8„H2†(§Øòw²²‰&…᚟ûó³
+êäi–dƒ\ÏO§(¢«´Hð(k"v¸º.]06õ]¨Uš ¶ÙZ9êÞz—?Ý„[p`OÄc¨ê¥uê•àϤ•¬çkjŽêQUxü\®<uÂaZ6ƒ6æ÷èÔt‹÷Ÿ·SF­×÷XX Αd¯vPÁY­`:˜ßöÔ’Ë©!ÅÄ?½Ó!
+çºõÊ5Úª5µ*yosQÌy°Eâ°,ʹTÍ{õ*Ö$ý1rvTWL¤•^_ÐsYDÄ[‚oÅ œW8жÌéÅõ^CLÈl:¾è=fù_ªÃ¨taMÅHì]ùÌ7$“üæµS6ð@UC‚»O`“žMÁÂnñÑçWcÄø¹°–æ—½,YÄæ=IKrÏçç³¢ÌM“žSx݈oÔoÙÓÿê} Ú·7«,{y~æc{©m\eFñV[NféÖI–¿½ê^Ã1*ꂹ<•†X ଇ‰#ûŒ ›šQ“  Î£JtSˆ‰ÒbÏÕÍ,íFÒoØå­%è1Q„eÎ%| Výµö™ô+ìõé%¼D%bøì£Üí2(õo_ÙðFÇ{ Á7üÕÓ\ñ‚«¶ÃAäßИX]S†%!âesédÔóM~¿ˆbÝó[¢üù;ï­ø‹éfD£µÄ%~+<)QÙZ]Χ<öçf_›ÑFÿÐçAÑ8l'õ Â–Œ+h³…ߊ5Ãa"›ÆIÙG+'6Ã@»ÝdP³HùàZBw3¬µ+Oäüôz	*QÂ/·öTã‰Â•þÝ@ÝÒpÕ[3]´}yo45±ìÝèˆÞ('ýeF|:Y÷þSÕ¢¹V^“„… Tø@AþI§–n2ßnõðÞ0—ñÖê¦õÓ@O
+aEQ_îž®>N¯¯Y°c®ó0Üôç+)Ò_ŽáZâ^.Ž¿·cto‚oÖecÿtèf:ݾrC—î¾ n¯`}L[ÍÆŒì}‚~&W¾‰™aÜf7Df¸îú!f_ žgÉ”Ÿ„̆KÑ€c6¸9ƏŽó ‘PWÏr¬‡OOcîÅ‘ßúå. ð8óÂgÅ;­A•ò¥Íh+´Ãï·oßPˆ-¼ÿü‚Ý0"œÙ¿>»ÁãkˆÆÑ?®H€ýñ¡t{oc´Ïû³£¶Ž‡ýü¹¾ë…š3ù*èÓPnC9™Os$ËÁCt¸,b]…Õûߘ̪£ÓPàÁ*ÕÊmd>˜€\A‰W™ß»ˆ€Âä<t¦døXžänTAó*ÑÆÍÍÚh1,ȸž~¬³c™’hy5ÝËЃ®bZ\ô¡D“Ã5ðÕYUù²VbºÄOüŽÒ[ƒôšffnIÛc¦Áþh¥2 l6FN´Ã*:‡2l+Ã:€½ê©²#ôû.ë‹ÍÒ=­—˜<óôჍ?Ê°,PQÌ؏*ð3açðÈcÌúXÛË*‡+OÅ<í?ý‰M«3Oa~t1‹K5˜DÇr>֏ª&–ËH at MìJ¹î1I[-8\¢³ëª©ØmÜ:HáYÚU\ÉåÜRyå$U·s˜XU<ò´Ø~Þ=ìÆŸf•$ î´‘Yد^Fjm3òp|:üÞ“çÍϼù§@Ö¦®rÂ|dcò«1|™_IéFFÔn÷BåšyW\J=Ÿõ±ÒªÃî˜@bÌþ*uߢ™Í\m¢úìN¢”ucßÉ<!X°µucVùüJG6Àø;é’-o#±Þ'¯þŠ¤+i¨C§õ'¹|ÜÀ]wÊyÞª6&íµÚ°Ö-¹ŽZ<¤îÎt.ô­2›UY…pvßöë×úE¥@‚ë†þF°­èžˆÌÆ´Ö“-%^pü;k‰À”ГÄñ®ðo™¢@×øÇ
+s·¶‹Ð?~ðàfD‚u|–sfÉØ×Bb=¯Cy0Đm–ÏÒ@A™xû|3‰ú¥•˜²õÅR‚1*Ž¤XVx¹U#Ô¹eÅ*p3Z)e î{q*Ò8ÿýb¸©<Ù’V§á	øäsUYž"‡” TSs(WR'žê­Ý ¸ˆ#w®æ„	J¿Ÿ¹ßãŽ$ú|ЩgW‘‡õ_·QiÈÊsIWAøDö:¨±v‡,XU óPpS.—?Ö†@©©<Ä÷ãœcaÓüÚ‘„­¿1«½âગÝÍ­"§$ò W²•›©ÚG¡Y\~–á$Vd	8ŠÖ$¢æϨ՟U@~Ñ»{·EÅOá˹£ú_ ý«Uež{üogOΙÒ_5xßÙ5ûMímož©ZÌôÞCÇï„RŽu®}õ¸ÑÅâšÏ΄¿o
+–ø2ú<ÿlo(«ûb¤9c•oÝe¿SÎ5Veèy¨b”™vÇþÎDØ°tŠÛ°wŸêöªFä†}ó•Ö˜ºá¤ýgÛU[L¯:­wç°1hO¥–yWU›¡ÊnËNQ£Ciö«ý<ÒÚ~Fý|•Gïgðo å„	0®n—›ør©w3zx	†TsÁ@‰ëâ%|o9=fžÙÒk*<Q¼&mSˆj¼3×´¢äô<Aaê“Wô9Œ ëð¡]€×w¶S=‰SÉ\+s„8"VêèP|ÔQïÒªGK=ÜÙ??ÇMYÍšÑ,^}øÛÈ¥¹0iñ­R“Xg÷V²Ñ„ÓÓQø
+Ž”„’bÄœžb㔌àÍæ”ÌôˆL~%­õÂÃ@påbÈ´7£‰
+èÏaVWáŠjAÀGE|‚ýü¹³"¹ê0·æ„ERü÷¹‚¢¹Ì˜ænª	õ9­ûñ¬>a€Œ$Orå֊Ň›YǾ%6¤ÍÌ Í;YSQÈgõkjÐb4÷jµ‚„v •áÆûî\©FHá'"ºÄ“9aga³yÏJ«&m8I$Œ]>(Mp*8“_6…Ïtò…j:h·í'bÌòšéÈ”zQ¨1WSêü\´¨Üiþ"?Öè!-³ÂÙŽN 
+í»,2VÝ—ÉO9•„%‰lð¢[m6™Ù?>4£í2‹àrix(và*s3¡ùäØf
+•QXI*ídÅBaŽ·»ÒxUúǐþ¢*ößæ±é“y- &ýÂnR\4ûÅ,;ô™ðäÜÁRÑ. at asØêL«èv×›.(ÊF8|¶ŽÄÚØü<Ö‡2…mÚVdº.ÀìÅ×ùjôbã÷õ š;EÑOø|‰„Á‰q0.GëþNÛéO@¤P
+y¾çìÿÒdè‹bR·²ä‡	,åôÁ‚òc¯Ÿ_¬e1OöI›jb(‹wx3å©82æ
+ýPª°…Ig†Í³.¿tý
+Iß*²†ÌF½îõóæ†÷Øñ&$úZpãg”k0QLíñiv
+§ÅÊ*U Å¾ßÉ1â}¨DÒ^ÿ( ¤Ù±ym‰Š~ûó\UâsÅEcÇvïRËn‰ß}cÅÛ^tSŽ÷Óí‡òä«ô³Zåø0b¾vI×ü¨P)•2$.<JýÜÊÐÇ
+„âŠïY83oš+Bžàn_ÌbU­AnmÁyÇÝb3Òöï΢vaœ6Q”‚yßúæ&<ŸóX>ìp;0ˆ—,|¸¢xÊìÈCÊU:@F8ïE…ÞѢк7T*Bâ0ÉèäS¸X&°nH‹UNãwK›€2yxÝ¢®õ\+ò8åGÕš‡Aò4è!Á=i÷°¢­Û$¿^>»®ESŒÏW}ˆ*àÂa“ ]Û?ZUÝ=:3ÚèÖîÅØÝ_bõ_¢kk¢x@×{ýd 0øæèœg·np¯¼Rï³Äec¸—@KÑ|ÞÖßh,@Â(ë
+¹5ryñd(kÚ:™›ÿȉ
+­ÔC#YZŠ+ÕDžëmÛ“èaðZƒh&ª—å0{i{ö_Çðic7…aQLÇzW:ÄçSÖYž¥öÅŒaVùs\ágÛ%hCQÚZðk›"Vü"óÈtH&Këï:ÉH/tŸ©hOSæbR1PL5þ‘2=‰U÷ú4ý í,’"Ì1n¹¨™*phºü‰,æ»]2Çvƒt\!º…d–_D¡[ÙIãžšMÿKß~t0+L²iù;`¿«m¹ò•8fD»Šöö›Ó|\ÑÐîÊàk$¹Vy6ÎXòg™Äµ–imÅòâ㟪Ó'oáhËC—R6œœÎþ[ó9øeªT¡/ú¨8OÎzO6±¼„ìB‘Vñ©ï‡¨cg 
+«õ:­åMz¬ ”g{ùñ»{ŽÞ‡ˆÙdâ7DŸ­ë eŒ{Ô¨¦Dß¡êX¼Ð#Îƨ¾å”påuWšÞóàÞZ¼ú“07ptÖ¥ýÑiÛ#AM»ÁlTVi[°ȧ+âÈ &Ä«7%LÙö|†>íƍ“ÈصékmsZº Å˜ü!ùèšG*²ÈF±”wFŽ’wïû›°ј«5®r‰sØF[&}±€Þþ%k1õó9
+¹ã‹×“6¡Z’ƒ•9ŸvDrôj’Y&/•Ú¬ôwN‚õ*[´+ãÔäx¤®IžÚÍêÁMJMÂy›¤Ëƒ\9©ú[ÿl>›Ýð2YBEymƒÈ£ó£âZGj׉Ogù”Mpá¦E¨ÈŸY<(Ö‚)gøŒƒ{K·×ÆŒ½3¾v1…ª‹þü’ƒKõ¶@;-¬÷)´¥¹ƒ3P2åD*µH;vëR¼óꝯ்äMI-®ž&ñ
+ßž½axUØ™,„[ºÁ©Qñ;ÝN8CM¼{4ïJhÚ
+v„¤¤ü³H§íBZ±'¯µòçÂDÙW6Åå…W/îؤ£òaC]øpär
+á×°"Ãy¶Ã*'æÒNÙMbîõd\5ŠÞäÛ«ö¤PÂBÒ‰r«&y~g°Qlˆ3GÅ[QÅja0lÕZ£#RhO‘\dU]$¹Ž;Dž»2´fJ£k[,—IæOßàRйో££¥*_ÄóžÖ~eiæRïéWòâÂbK·˜øil’jaþRu^¹SçŒå2ôó£[÷ô/ëž·7h™iJÙÞM¡½­á)û>£ºÃ¿¿œd¾×½€“îÂĈç%î-‡ ? …œx9z >Ör+æ ‡åR¶ëh+7N®q0c7*ü€Zƒû’ÁƒÉ­µý²€Ø»±DÐ0™™ðrÉ*!²4• —VªõQ¬™ºDš&}k9¿K¹ï™
+Óð+&)”KåEÈÝTŽË„ó'YAC OŠ’(OŽ ‡b±©«Øló’/‚‰@G£F!ÜnÓr'^QD__/‘ @à&Ô)ÇËóõæÐÅ£½†×RÎŽ¤ÍSYS¢®k¢ƒEW=ïÃ3÷ô–œ¿´Aî"7*ª?õõ]¾õX=)W┇¥ö,eVgè÷Öã­?D¦121Gè¶cô·x•Öþ´úº
+endstream
+endobj
+2067 0 obj
+/PIKLQF+NimbusSanL-Regu
+endobj
+2063 0 obj <<
+/Type /FontDescriptor
+/FontName /PIKLQF+NimbusSanL-Regu
+/Flags 4
+/FontBBox [-174 -285 1001 953]
+/ItalicAngle 0
+/StemV 85
+/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/a/b/bracketleft/bracketright/c/colon/d/e/eight/equal/f/five/four/g/h/i/j/k/l/m/minus/n/nine/o/one/p/parenleft/parenright/period/plus/q/r/s/seven/six/slash/space/t/three/two/u/underscore/v/w/x/y/zero)
+/FontFile 9363 0 R
+>> endobj
 1124 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /KEFMBC+CMBX10
-/FontDescriptor 9340 0 R
+/FontDescriptor 9308 0 R
 /FirstChar 11
 /LastChar 124
-/Widths 9337 0 R
+/Widths 9305 0 R
 >> endobj
 1123 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /ZMBLFL+CMBX12
-/FontDescriptor 9342 0 R
+/FontDescriptor 9310 0 R
 /FirstChar 12
 /LastChar 121
-/Widths 9338 0 R
+/Widths 9306 0 R
 >> endobj
-2789 0 obj <<
+2782 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /JTHECE+CMBX9
-/FontDescriptor 9344 0 R
+/FontDescriptor 9312 0 R
 /FirstChar 98
 /LastChar 115
-/Widths 9316 0 R
+/Widths 9284 0 R
 >> endobj
-2476 0 obj <<
+2471 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /JXWONA+CMBXTI10
-/FontDescriptor 9346 0 R
+/FontDescriptor 9314 0 R
 /FirstChar 97
 /LastChar 121
-/Widths 9319 0 R
+/Widths 9287 0 R
 >> endobj
-2333 0 obj <<
+2330 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /UPBAQJ+CMCSC10
-/FontDescriptor 9348 0 R
+/FontDescriptor 9316 0 R
 /FirstChar 67
 /LastChar 117
-/Widths 9321 0 R
+/Widths 9289 0 R
 >> endobj
 1917 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /QVBPMD+CMITT10
-/FontDescriptor 9350 0 R
+/FontDescriptor 9318 0 R
 /FirstChar 34
 /LastChar 121
-/Widths 9329 0 R
+/Widths 9297 0 R
 >> endobj
-2494 0 obj <<
+2489 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /SPHTML+CMMI10
-/FontDescriptor 9352 0 R
+/FontDescriptor 9320 0 R
 /FirstChar 45
 /LastChar 121
-/Widths 9318 0 R
+/Widths 9286 0 R
 >> endobj
-3578 0 obj <<
+3567 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /EGJBAW+CMMI8
-/FontDescriptor 9354 0 R
+/FontDescriptor 9322 0 R
 /FirstChar 76
 /LastChar 76
-/Widths 9313 0 R
+/Widths 9281 0 R
 >> endobj
 1930 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /YJCLWH+CMMI9
-/FontDescriptor 9356 0 R
+/FontDescriptor 9324 0 R
 /FirstChar 60
 /LastChar 62
-/Widths 9326 0 R
+/Widths 9294 0 R
 >> endobj
 1133 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /EXYYDG+CMR10
-/FontDescriptor 9358 0 R
+/FontDescriptor 9326 0 R
 /FirstChar 11
 /LastChar 124
-/Widths 9334 0 R
+/Widths 9302 0 R
 >> endobj
 1125 0 obj <<
 /Type /Font
 /Subtype /Type1
-/BaseFont /AWOGYL+CMR12
-/FontDescriptor 9360 0 R
+/BaseFont /MRUHHI+CMR12
+/FontDescriptor 9328 0 R
 /FirstChar 44
-/LastChar 117
-/Widths 9336 0 R
+/LastChar 121
+/Widths 9304 0 R
 >> endobj
 1929 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /FKGUSP+CMR6
-/FontDescriptor 9362 0 R
+/FontDescriptor 9330 0 R
 /FirstChar 48
 /LastChar 57
-/Widths 9327 0 R
+/Widths 9295 0 R
 >> endobj
 1928 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /DMYVZC+CMR8
-/FontDescriptor 9364 0 R
+/FontDescriptor 9332 0 R
 /FirstChar 48
 /LastChar 116
-/Widths 9328 0 R
+/Widths 9296 0 R
 >> endobj
 1976 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /OBAAPB+CMR9
-/FontDescriptor 9366 0 R
+/FontDescriptor 9334 0 R
 /FirstChar 11
 /LastChar 121
-/Widths 9323 0 R
+/Widths 9291 0 R
 >> endobj
-2865 0 obj <<
+2858 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /IUVPNN+CMSLTT10
-/FontDescriptor 9368 0 R
+/FontDescriptor 9336 0 R
 /FirstChar 36
 /LastChar 36
-/Widths 9315 0 R
+/Widths 9283 0 R
 >> endobj
-2334 0 obj <<
+2331 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /NXHEDD+CMSS10
-/FontDescriptor 9370 0 R
+/FontDescriptor 9338 0 R
 /FirstChar 11
 /LastChar 124
-/Widths 9320 0 R
+/Widths 9288 0 R
 >> endobj
 1973 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /TFKSKK+CMSS17
-/FontDescriptor 9372 0 R
+/FontDescriptor 9340 0 R
 /FirstChar 48
 /LastChar 120
-/Widths 9324 0 R
+/Widths 9292 0 R
 >> endobj
 1211 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /TIWENN+CMSS8
-/FontDescriptor 9374 0 R
+/FontDescriptor 9342 0 R
 /FirstChar 11
 /LastChar 122
-/Widths 9332 0 R
+/Widths 9300 0 R
 >> endobj
 1131 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /WQYPAM+CMSSBX10
-/FontDescriptor 9376 0 R
+/FontDescriptor 9344 0 R
 /FirstChar 11
 /LastChar 124
-/Widths 9335 0 R
+/Widths 9303 0 R
 >> endobj
-3440 0 obj <<
+3431 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /OLHIJD+CMSSI10
-/FontDescriptor 9378 0 R
+/FontDescriptor 9346 0 R
 /FirstChar 45
 /LastChar 118
-/Widths 9314 0 R
+/Widths 9282 0 R
 >> endobj
 1912 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /DISJDX+CMSY10
-/FontDescriptor 9380 0 R
+/FontDescriptor 9348 0 R
 /FirstChar 0
 /LastChar 110
-/Widths 9330 0 R
+/Widths 9298 0 R
 >> endobj
 1134 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /KJFIBM+CMTI10
-/FontDescriptor 9382 0 R
+/FontDescriptor 9350 0 R
 /FirstChar 11
 /LastChar 122
-/Widths 9333 0 R
+/Widths 9301 0 R
 >> endobj
-5794 0 obj <<
+5762 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /IVMWBL+CMTI7
-/FontDescriptor 9384 0 R
+/FontDescriptor 9352 0 R
 /FirstChar 97
 /LastChar 97
-/Widths 9311 0 R
+/Widths 9279 0 R
 >> endobj
-5793 0 obj <<
+5761 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /ROIAGP+CMTI8
-/FontDescriptor 9386 0 R
+/FontDescriptor 9354 0 R
 /FirstChar 97
 /LastChar 97
-/Widths 9312 0 R
+/Widths 9280 0 R
 >> endobj
-2622 0 obj <<
+2615 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /TOETKN+CMTI9
-/FontDescriptor 9388 0 R
+/FontDescriptor 9356 0 R
 /FirstChar 50
 /LastChar 84
-/Widths 9317 0 R
+/Widths 9285 0 R
 >> endobj
 1905 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /YPVIBW+CMTT10
-/FontDescriptor 9390 0 R
+/FontDescriptor 9358 0 R
 /FirstChar 33
 /LastChar 126
-/Widths 9331 0 R
+/Widths 9299 0 R
 >> endobj
 1931 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /KJXYJU+CMTT9
-/FontDescriptor 9392 0 R
+/FontDescriptor 9360 0 R
 /FirstChar 38
 /LastChar 126
-/Widths 9325 0 R
+/Widths 9293 0 R
 >> endobj
 2008 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /ZUTHPM+LCIRCLE10
-/FontDescriptor 9394 0 R
+/FontDescriptor 9362 0 R
 /FirstChar 4
 /LastChar 7
-/Widths 9322 0 R
+/Widths 9290 0 R
 >> endobj
 1126 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9395 0 R
+/Parent 9364 0 R
 /Kids [1118 0 R 1128 0 R 1136 0 R 1166 0 R 1208 0 R 1248 0 R]
 >> endobj
 1287 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9395 0 R
+/Parent 9364 0 R
 /Kids [1284 0 R 1320 0 R 1355 0 R 1395 0 R 1433 0 R 1452 0 R]
 >> endobj
 1459 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9395 0 R
+/Parent 9364 0 R
 /Kids [1456 0 R 1484 0 R 1539 0 R 1594 0 R 1649 0 R 1695 0 R]
 >> endobj
 1716 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9395 0 R
+/Parent 9364 0 R
 /Kids [1713 0 R 1739 0 R 1791 0 R 1844 0 R 1862 0 R 1866 0 R]
 >> endobj
 1876 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9395 0 R
+/Parent 9364 0 R
 /Kids [1873 0 R 1878 0 R 1882 0 R 1889 0 R 1898 0 R 1907 0 R]
 >> endobj
 1918 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9395 0 R
+/Parent 9364 0 R
 /Kids [1914 0 R 1920 0 R 1925 0 R 1933 0 R 1937 0 R 1941 0 R]
 >> endobj
 1950 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9396 0 R
+/Parent 9365 0 R
 /Kids [1947 0 R 1952 0 R 1955 0 R 1959 0 R 1966 0 R 1970 0 R]
 >> endobj
 1984 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9396 0 R
+/Parent 9365 0 R
 /Kids [1979 0 R 1986 0 R 1993 0 R 2004 0 R 2024 0 R 2031 0 R]
 >> endobj
 2042 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9396 0 R
+/Parent 9365 0 R
 /Kids [2038 0 R 2048 0 R 2056 0 R 2069 0 R 2078 0 R 2092 0 R]
 >> endobj
 2169 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9396 0 R
+/Parent 9365 0 R
 /Kids [2129 0 R 2172 0 R 2186 0 R 2203 0 R 2212 0 R 2226 0 R]
 >> endobj
-2247 0 obj <<
+2244 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9396 0 R
-/Kids [2241 0 R 2249 0 R 2261 0 R 2290 0 R 2296 0 R 2300 0 R]
+/Parent 9365 0 R
+/Kids [2238 0 R 2246 0 R 2258 0 R 2287 0 R 2293 0 R 2297 0 R]
 >> endobj
-2307 0 obj <<
+2304 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9396 0 R
-/Kids [2304 0 R 2310 0 R 2315 0 R 2323 0 R 2330 0 R 2343 0 R]
+/Parent 9365 0 R
+/Kids [2301 0 R 2307 0 R 2312 0 R 2320 0 R 2327 0 R 2340 0 R]
 >> endobj
-2359 0 obj <<
+2355 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9397 0 R
-/Kids [2352 0 R 2370 0 R 2382 0 R 2388 0 R 2394 0 R 2405 0 R]
+/Parent 9366 0 R
+/Kids [2349 0 R 2364 0 R 2377 0 R 2383 0 R 2389 0 R 2400 0 R]
 >> endobj
-2418 0 obj <<
+2413 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9397 0 R
-/Kids [2415 0 R 2420 0 R 2426 0 R 2435 0 R 2449 0 R 2458 0 R]
+/Parent 9366 0 R
+/Kids [2410 0 R 2415 0 R 2421 0 R 2430 0 R 2444 0 R 2453 0 R]
 >> endobj
-2467 0 obj <<
+2462 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9397 0 R
-/Kids [2464 0 R 2469 0 R 2478 0 R 2482 0 R 2486 0 R 2514 0 R]
+/Parent 9366 0 R
+/Kids [2459 0 R 2464 0 R 2473 0 R 2477 0 R 2481 0 R 2509 0 R]
 >> endobj
-2549 0 obj <<
+2544 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9397 0 R
-/Kids [2546 0 R 2553 0 R 2560 0 R 2567 0 R 2572 0 R 2586 0 R]
+/Parent 9366 0 R
+/Kids [2541 0 R 2548 0 R 2555 0 R 2562 0 R 2567 0 R 2579 0 R]
 >> endobj
-2597 0 obj <<
+2590 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9397 0 R
-/Kids [2593 0 R 2599 0 R 2606 0 R 2612 0 R 2619 0 R 2625 0 R]
+/Parent 9366 0 R
+/Kids [2586 0 R 2592 0 R 2599 0 R 2605 0 R 2612 0 R 2618 0 R]
 >> endobj
-2644 0 obj <<
+2637 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9397 0 R
-/Kids [2639 0 R 2647 0 R 2657 0 R 2670 0 R 2677 0 R 2682 0 R]
+/Parent 9366 0 R
+/Kids [2632 0 R 2640 0 R 2650 0 R 2663 0 R 2670 0 R 2675 0 R]
 >> endobj
-2694 0 obj <<
+2687 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9398 0 R
-/Kids [2690 0 R 2708 0 R 2730 0 R 2739 0 R 2748 0 R 2755 0 R]
+/Parent 9367 0 R
+/Kids [2683 0 R 2701 0 R 2723 0 R 2732 0 R 2741 0 R 2748 0 R]
 >> endobj
-2766 0 obj <<
+2759 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9398 0 R
-/Kids [2761 0 R 2769 0 R 2775 0 R 2780 0 R 2784 0 R 2791 0 R]
+/Parent 9367 0 R
+/Kids [2754 0 R 2762 0 R 2768 0 R 2773 0 R 2777 0 R 2784 0 R]
 >> endobj
-2802 0 obj <<
+2795 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9398 0 R
-/Kids [2798 0 R 2804 0 R 2808 0 R 2813 0 R 2820 0 R 2829 0 R]
+/Parent 9367 0 R
+/Kids [2791 0 R 2797 0 R 2801 0 R 2806 0 R 2813 0 R 2822 0 R]
 >> endobj
-2854 0 obj <<
+2847 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9398 0 R
-/Kids [2842 0 R 2856 0 R 2862 0 R 2867 0 R 2871 0 R 2875 0 R]
+/Parent 9367 0 R
+/Kids [2835 0 R 2849 0 R 2855 0 R 2860 0 R 2864 0 R 2868 0 R]
 >> endobj
-2925 0 obj <<
+2918 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9398 0 R
-/Kids [2879 0 R 2927 0 R 2959 0 R 2978 0 R 2982 0 R 2986 0 R]
+/Parent 9367 0 R
+/Kids [2872 0 R 2920 0 R 2952 0 R 2971 0 R 2975 0 R 2979 0 R]
 >> endobj
-2993 0 obj <<
+2986 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9398 0 R
-/Kids [2990 0 R 2995 0 R 2999 0 R 3003 0 R 3007 0 R 3014 0 R]
+/Parent 9367 0 R
+/Kids [2983 0 R 2988 0 R 2992 0 R 2996 0 R 3000 0 R 3007 0 R]
 >> endobj
-3026 0 obj <<
+3019 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9399 0 R
-/Kids [3022 0 R 3028 0 R 3034 0 R 3041 0 R 3069 0 R 3081 0 R]
+/Parent 9368 0 R
+/Kids [3015 0 R 3021 0 R 3027 0 R 3034 0 R 3062 0 R 3074 0 R]
 >> endobj
-3098 0 obj <<
+3089 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9399 0 R
-/Kids [3094 0 R 3119 0 R 3126 0 R 3136 0 R 3144 0 R 3152 0 R]
+/Parent 9368 0 R
+/Kids [3085 0 R 3110 0 R 3117 0 R 3127 0 R 3135 0 R 3143 0 R]
 >> endobj
-3167 0 obj <<
+3158 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9399 0 R
-/Kids [3163 0 R 3173 0 R 3186 0 R 3196 0 R 3230 0 R 3261 0 R]
+/Parent 9368 0 R
+/Kids [3154 0 R 3164 0 R 3177 0 R 3187 0 R 3221 0 R 3252 0 R]
 >> endobj
-3326 0 obj <<
+3317 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9399 0 R
-/Kids [3300 0 R 3330 0 R 3341 0 R 3357 0 R 3366 0 R 3372 0 R]
+/Parent 9368 0 R
+/Kids [3291 0 R 3321 0 R 3332 0 R 3348 0 R 3357 0 R 3363 0 R]
 >> endobj
-3379 0 obj <<
+3370 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9399 0 R
-/Kids [3376 0 R 3381 0 R 3385 0 R 3389 0 R 3393 0 R 3397 0 R]
+/Parent 9368 0 R
+/Kids [3367 0 R 3372 0 R 3376 0 R 3380 0 R 3384 0 R 3388 0 R]
 >> endobj
-3404 0 obj <<
+3395 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9399 0 R
-/Kids [3401 0 R 3406 0 R 3410 0 R 3414 0 R 3418 0 R 3422 0 R]
+/Parent 9368 0 R
+/Kids [3392 0 R 3397 0 R 3401 0 R 3405 0 R 3409 0 R 3413 0 R]
 >> endobj
-3429 0 obj <<
+3420 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9400 0 R
-/Kids [3426 0 R 3433 0 R 3437 0 R 3446 0 R 3450 0 R 3454 0 R]
+/Parent 9369 0 R
+/Kids [3417 0 R 3424 0 R 3428 0 R 3437 0 R 3441 0 R 3445 0 R]
 >> endobj
-3463 0 obj <<
+3454 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9400 0 R
-/Kids [3460 0 R 3467 0 R 3477 0 R 3489 0 R 3495 0 R 3503 0 R]
+/Parent 9369 0 R
+/Kids [3451 0 R 3458 0 R 3468 0 R 3480 0 R 3486 0 R 3494 0 R]
 >> endobj
-3520 0 obj <<
+3509 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9400 0 R
-/Kids [3515 0 R 3522 0 R 3529 0 R 3538 0 R 3544 0 R 3551 0 R]
+/Parent 9369 0 R
+/Kids [3504 0 R 3511 0 R 3518 0 R 3527 0 R 3533 0 R 3540 0 R]
 >> endobj
-3566 0 obj <<
+3555 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9400 0 R
-/Kids [3561 0 R 3568 0 R 3575 0 R 3580 0 R 3584 0 R 3591 0 R]
+/Parent 9369 0 R
+/Kids [3550 0 R 3557 0 R 3564 0 R 3569 0 R 3573 0 R 3580 0 R]
 >> endobj
-3624 0 obj <<
+3613 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9400 0 R
-/Kids [3600 0 R 3628 0 R 3648 0 R 3656 0 R 3667 0 R 3675 0 R]
+/Parent 9369 0 R
+/Kids [3589 0 R 3617 0 R 3634 0 R 3642 0 R 3653 0 R 3661 0 R]
 >> endobj
-3686 0 obj <<
+3672 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9400 0 R
-/Kids [3683 0 R 3692 0 R 3703 0 R 3710 0 R 3719 0 R 3724 0 R]
+/Parent 9369 0 R
+/Kids [3669 0 R 3678 0 R 3689 0 R 3696 0 R 3705 0 R 3710 0 R]
 >> endobj
-3740 0 obj <<
+3726 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9401 0 R
-/Kids [3733 0 R 3744 0 R 3752 0 R 3758 0 R 3762 0 R 3770 0 R]
+/Parent 9370 0 R
+/Kids [3719 0 R 3730 0 R 3738 0 R 3744 0 R 3748 0 R 3756 0 R]
 >> endobj
-3779 0 obj <<
+3765 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9401 0 R
-/Kids [3776 0 R 3782 0 R 3789 0 R 3797 0 R 3803 0 R 3809 0 R]
+/Parent 9370 0 R
+/Kids [3762 0 R 3768 0 R 3775 0 R 3783 0 R 3789 0 R 3795 0 R]
 >> endobj
-3820 0 obj <<
+3806 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9401 0 R
-/Kids [3815 0 R 3822 0 R 3829 0 R 3835 0 R 3841 0 R 3848 0 R]
+/Parent 9370 0 R
+/Kids [3801 0 R 3808 0 R 3815 0 R 3821 0 R 3827 0 R 3834 0 R]
 >> endobj
-3866 0 obj <<
+3852 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9401 0 R
-/Kids [3857 0 R 3868 0 R 3883 0 R 3894 0 R 3899 0 R 3906 0 R]
+/Parent 9370 0 R
+/Kids [3843 0 R 3854 0 R 3869 0 R 3880 0 R 3885 0 R 3892 0 R]
 >> endobj
-3917 0 obj <<
+3903 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9401 0 R
-/Kids [3912 0 R 3923 0 R 3933 0 R 3939 0 R 3945 0 R 3950 0 R]
+/Parent 9370 0 R
+/Kids [3898 0 R 3909 0 R 3919 0 R 3925 0 R 3931 0 R 3936 0 R]
 >> endobj
-3963 0 obj <<
+3949 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9401 0 R
-/Kids [3959 0 R 3967 0 R 3981 0 R 3991 0 R 3997 0 R 4010 0 R]
+/Parent 9370 0 R
+/Kids [3945 0 R 3953 0 R 3967 0 R 3977 0 R 3983 0 R 3996 0 R]
 >> endobj
-4022 0 obj <<
+4008 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9402 0 R
-/Kids [4017 0 R 4024 0 R 4036 0 R 4046 0 R 4052 0 R 4057 0 R]
+/Parent 9371 0 R
+/Kids [4003 0 R 4010 0 R 4022 0 R 4032 0 R 4038 0 R 4043 0 R]
 >> endobj
-4065 0 obj <<
+4051 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9402 0 R
-/Kids [4062 0 R 4067 0 R 4071 0 R 4075 0 R 4079 0 R 4084 0 R]
+/Parent 9371 0 R
+/Kids [4048 0 R 4053 0 R 4057 0 R 4061 0 R 4065 0 R 4070 0 R]
 >> endobj
-4091 0 obj <<
+4077 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9402 0 R
-/Kids [4088 0 R 4093 0 R 4125 0 R 4148 0 R 4186 0 R 4224 0 R]
+/Parent 9371 0 R
+/Kids [4074 0 R 4079 0 R 4111 0 R 4134 0 R 4172 0 R 4210 0 R]
 >> endobj
-4283 0 obj <<
+4269 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9402 0 R
-/Kids [4252 0 R 4285 0 R 4291 0 R 4298 0 R 4304 0 R 4309 0 R]
+/Parent 9371 0 R
+/Kids [4238 0 R 4271 0 R 4277 0 R 4284 0 R 4290 0 R 4295 0 R]
 >> endobj
-4319 0 obj <<
+4305 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9402 0 R
-/Kids [4315 0 R 4321 0 R 4325 0 R 4333 0 R 4340 0 R 4346 0 R]
+/Parent 9371 0 R
+/Kids [4301 0 R 4307 0 R 4311 0 R 4319 0 R 4326 0 R 4332 0 R]
 >> endobj
-4369 0 obj <<
+4353 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9402 0 R
-/Kids [4364 0 R 4390 0 R 4413 0 R 4422 0 R 4432 0 R 4441 0 R]
+/Parent 9371 0 R
+/Kids [4348 0 R 4369 0 R 4387 0 R 4396 0 R 4406 0 R 4415 0 R]
 >> endobj
-4457 0 obj <<
+4431 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9403 0 R
-/Kids [4450 0 R 4461 0 R 4468 0 R 4473 0 R 4477 0 R 4481 0 R]
+/Parent 9372 0 R
+/Kids [4424 0 R 4435 0 R 4442 0 R 4447 0 R 4451 0 R 4455 0 R]
 >> endobj
-4488 0 obj <<
+4462 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9403 0 R
-/Kids [4485 0 R 4490 0 R 4536 0 R 4567 0 R 4599 0 R 4645 0 R]
+/Parent 9372 0 R
+/Kids [4459 0 R 4464 0 R 4510 0 R 4541 0 R 4573 0 R 4619 0 R]
 >> endobj
+4663 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 9372 0 R
+/Kids [4660 0 R 4665 0 R 4669 0 R 4673 0 R 4676 0 R 4679 0 R]
+>> endobj
 4689 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9403 0 R
-/Kids [4686 0 R 4691 0 R 4695 0 R 4699 0 R 4702 0 R 4705 0 R]
+/Parent 9372 0 R
+/Kids [4686 0 R 4694 0 R 4702 0 R 4707 0 R 4713 0 R 4717 0 R]
 >> endobj
-4715 0 obj <<
+4726 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9403 0 R
-/Kids [4712 0 R 4720 0 R 4728 0 R 4733 0 R 4739 0 R 4743 0 R]
+/Parent 9372 0 R
+/Kids [4721 0 R 4728 0 R 4735 0 R 4745 0 R 4757 0 R 4764 0 R]
 >> endobj
-4752 0 obj <<
+4772 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9403 0 R
-/Kids [4747 0 R 4754 0 R 4761 0 R 4771 0 R 4785 0 R 4792 0 R]
+/Parent 9372 0 R
+/Kids [4769 0 R 4774 0 R 4778 0 R 4785 0 R 4793 0 R 4799 0 R]
 >> endobj
-4800 0 obj <<
+4813 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9403 0 R
-/Kids [4797 0 R 4802 0 R 4806 0 R 4813 0 R 4821 0 R 4827 0 R]
+/Parent 9373 0 R
+/Kids [4804 0 R 4817 0 R 4824 0 R 4834 0 R 4839 0 R 4846 0 R]
 >> endobj
-4841 0 obj <<
+4861 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9404 0 R
-/Kids [4832 0 R 4845 0 R 4852 0 R 4864 0 R 4869 0 R 4876 0 R]
+/Parent 9373 0 R
+/Kids [4857 0 R 4863 0 R 4869 0 R 4874 0 R 4880 0 R 4884 0 R]
 >> endobj
 4891 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9404 0 R
-/Kids [4887 0 R 4893 0 R 4899 0 R 4904 0 R 4910 0 R 4914 0 R]
+/Parent 9373 0 R
+/Kids [4888 0 R 4893 0 R 4898 0 R 4904 0 R 4914 0 R 4920 0 R]
 >> endobj
-4921 0 obj <<
+4932 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9404 0 R
-/Kids [4918 0 R 4923 0 R 4928 0 R 4934 0 R 4944 0 R 4950 0 R]
+/Parent 9373 0 R
+/Kids [4925 0 R 4934 0 R 4944 0 R 4955 0 R 4964 0 R 4972 0 R]
 >> endobj
-4962 0 obj <<
+4996 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9404 0 R
-/Kids [4955 0 R 4964 0 R 4974 0 R 4985 0 R 4994 0 R 5002 0 R]
+/Parent 9373 0 R
+/Kids [4988 0 R 4999 0 R 5005 0 R 5009 0 R 5013 0 R 5017 0 R]
 >> endobj
-5026 0 obj <<
+5067 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9404 0 R
-/Kids [5018 0 R 5029 0 R 5035 0 R 5039 0 R 5043 0 R 5047 0 R]
+/Parent 9373 0 R
+/Kids [5021 0 R 5069 0 R 5073 0 R 5077 0 R 5120 0 R 5162 0 R]
 >> endobj
-5097 0 obj <<
+5241 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9404 0 R
-/Kids [5051 0 R 5099 0 R 5103 0 R 5107 0 R 5150 0 R 5192 0 R]
+/Parent 9374 0 R
+/Kids [5203 0 R 5243 0 R 5261 0 R 5266 0 R 5271 0 R 5276 0 R]
 >> endobj
-5271 0 obj <<
+5285 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9405 0 R
-/Kids [5233 0 R 5273 0 R 5291 0 R 5296 0 R 5301 0 R 5306 0 R]
+/Parent 9374 0 R
+/Kids [5282 0 R 5287 0 R 5291 0 R 5295 0 R 5300 0 R 5306 0 R]
 >> endobj
-5315 0 obj <<
+5316 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9405 0 R
-/Kids [5312 0 R 5317 0 R 5321 0 R 5325 0 R 5330 0 R 5336 0 R]
+/Parent 9374 0 R
+/Kids [5311 0 R 5318 0 R 5326 0 R 5341 0 R 5350 0 R 5355 0 R]
 >> endobj
-5346 0 obj <<
+5362 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9405 0 R
-/Kids [5341 0 R 5348 0 R 5356 0 R 5371 0 R 5380 0 R 5385 0 R]
+/Parent 9374 0 R
+/Kids [5359 0 R 5364 0 R 5369 0 R 5374 0 R 5383 0 R 5389 0 R]
 >> endobj
-5392 0 obj <<
+5400 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9405 0 R
-/Kids [5389 0 R 5394 0 R 5399 0 R 5404 0 R 5413 0 R 5419 0 R]
+/Parent 9374 0 R
+/Kids [5397 0 R 5402 0 R 5411 0 R 5416 0 R 5421 0 R 5429 0 R]
 >> endobj
-5430 0 obj <<
+5439 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9405 0 R
-/Kids [5427 0 R 5432 0 R 5441 0 R 5446 0 R 5451 0 R 5459 0 R]
+/Parent 9374 0 R
+/Kids [5436 0 R 5446 0 R 5456 0 R 5465 0 R 5471 0 R 5479 0 R]
 >> endobj
-5469 0 obj <<
+5498 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9405 0 R
-/Kids [5466 0 R 5478 0 R 5488 0 R 5497 0 R 5503 0 R 5511 0 R]
+/Parent 9375 0 R
+/Kids [5493 0 R 5500 0 R 5504 0 R 5509 0 R 5517 0 R 5523 0 R]
 >> endobj
-5530 0 obj <<
+5534 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9406 0 R
-/Kids [5525 0 R 5532 0 R 5536 0 R 5541 0 R 5549 0 R 5555 0 R]
+/Parent 9375 0 R
+/Kids [5529 0 R 5537 0 R 5544 0 R 5550 0 R 5558 0 R 5563 0 R]
 >> endobj
-5566 0 obj <<
+5574 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9406 0 R
-/Kids [5561 0 R 5569 0 R 5576 0 R 5582 0 R 5590 0 R 5595 0 R]
+/Parent 9375 0 R
+/Kids [5568 0 R 5576 0 R 5583 0 R 5588 0 R 5594 0 R 5602 0 R]
 >> endobj
-5606 0 obj <<
+5609 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9406 0 R
-/Kids [5600 0 R 5608 0 R 5615 0 R 5620 0 R 5626 0 R 5634 0 R]
+/Parent 9375 0 R
+/Kids [5606 0 R 5611 0 R 5615 0 R 5619 0 R 5665 0 R 5706 0 R]
 >> endobj
-5641 0 obj <<
+5714 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9406 0 R
-/Kids [5638 0 R 5643 0 R 5647 0 R 5651 0 R 5697 0 R 5738 0 R]
+/Parent 9375 0 R
+/Kids [5710 0 R 5716 0 R 5720 0 R 5724 0 R 5728 0 R 5732 0 R]
 >> endobj
-5746 0 obj <<
+5741 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9406 0 R
-/Kids [5742 0 R 5748 0 R 5752 0 R 5756 0 R 5760 0 R 5764 0 R]
+/Parent 9375 0 R
+/Kids [5737 0 R 5744 0 R 5750 0 R 5758 0 R 5765 0 R 5771 0 R]
 >> endobj
-5773 0 obj <<
+5779 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9406 0 R
-/Kids [5769 0 R 5776 0 R 5782 0 R 5790 0 R 5797 0 R 5803 0 R]
+/Parent 9376 0 R
+/Kids [5776 0 R 5781 0 R 5785 0 R 5791 0 R 5800 0 R 5814 0 R]
 >> endobj
-5811 0 obj <<
+5824 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9407 0 R
-/Kids [5808 0 R 5813 0 R 5817 0 R 5823 0 R 5832 0 R 5846 0 R]
+/Parent 9376 0 R
+/Kids [5821 0 R 5826 0 R 5830 0 R 5834 0 R 5839 0 R 5844 0 R]
 >> endobj
-5856 0 obj <<
+5859 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9407 0 R
-/Kids [5853 0 R 5858 0 R 5862 0 R 5866 0 R 5871 0 R 5876 0 R]
+/Parent 9376 0 R
+/Kids [5849 0 R 5861 0 R 5866 0 R 5870 0 R 5874 0 R 5878 0 R]
 >> endobj
-5891 0 obj <<
+5959 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9407 0 R
-/Kids [5881 0 R 5893 0 R 5898 0 R 5902 0 R 5906 0 R 5910 0 R]
+/Parent 9376 0 R
+/Kids [5921 0 R 5961 0 R 6001 0 R 6039 0 R 6066 0 R 6070 0 R]
 >> endobj
-5991 0 obj <<
+6077 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9407 0 R
-/Kids [5953 0 R 5993 0 R 6033 0 R 6071 0 R 6098 0 R 6102 0 R]
+/Parent 9376 0 R
+/Kids [6074 0 R 6079 0 R 6084 0 R 6089 0 R 6094 0 R 6098 0 R]
 >> endobj
-6109 0 obj <<
+6107 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9407 0 R
-/Kids [6106 0 R 6111 0 R 6116 0 R 6121 0 R 6126 0 R 6130 0 R]
+/Parent 9376 0 R
+/Kids [6103 0 R 6109 0 R 6114 0 R 6119 0 R 6122 0 R 6125 0 R]
 >> endobj
-6139 0 obj <<
+6135 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9407 0 R
-/Kids [6135 0 R 6141 0 R 6146 0 R 6151 0 R 6154 0 R 6157 0 R]
+/Parent 9377 0 R
+/Kids [6132 0 R 6137 0 R 6142 0 R 6147 0 R 6151 0 R 6155 0 R]
 >> endobj
-6167 0 obj <<
+6164 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9408 0 R
-/Kids [6164 0 R 6169 0 R 6174 0 R 6179 0 R 6183 0 R 6187 0 R]
+/Parent 9377 0 R
+/Kids [6160 0 R 6166 0 R 6172 0 R 6177 0 R 6183 0 R 6187 0 R]
 >> endobj
 6196 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9408 0 R
-/Kids [6192 0 R 6198 0 R 6204 0 R 6209 0 R 6215 0 R 6219 0 R]
+/Parent 9377 0 R
+/Kids [6192 0 R 6200 0 R 6206 0 R 6212 0 R 6224 0 R 6233 0 R]
 >> endobj
-6228 0 obj <<
+6240 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9408 0 R
-/Kids [6224 0 R 6232 0 R 6238 0 R 6244 0 R 6256 0 R 6265 0 R]
+/Parent 9377 0 R
+/Kids [6237 0 R 6242 0 R 6247 0 R 6257 0 R 6264 0 R 6273 0 R]
 >> endobj
-6272 0 obj <<
+6293 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9408 0 R
-/Kids [6269 0 R 6274 0 R 6279 0 R 6289 0 R 6296 0 R 6305 0 R]
+/Parent 9377 0 R
+/Kids [6283 0 R 6295 0 R 6300 0 R 6306 0 R 6312 0 R 6316 0 R]
 >> endobj
-6325 0 obj <<
+6323 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9408 0 R
-/Kids [6315 0 R 6327 0 R 6332 0 R 6338 0 R 6344 0 R 6348 0 R]
+/Parent 9377 0 R
+/Kids [6320 0 R 6325 0 R 6331 0 R 6336 0 R 6342 0 R 6348 0 R]
 >> endobj
-6355 0 obj <<
+6361 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9408 0 R
-/Kids [6352 0 R 6357 0 R 6363 0 R 6368 0 R 6374 0 R 6380 0 R]
+/Parent 9378 0 R
+/Kids [6354 0 R 6364 0 R 6373 0 R 6382 0 R 6389 0 R 6396 0 R]
 >> endobj
-6393 0 obj <<
+6433 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9409 0 R
-/Kids [6386 0 R 6396 0 R 6405 0 R 6414 0 R 6421 0 R 6428 0 R]
+/Parent 9378 0 R
+/Kids [6423 0 R 6437 0 R 6442 0 R 6448 0 R 6452 0 R 6456 0 R]
 >> endobj
-6465 0 obj <<
+6468 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9409 0 R
-/Kids [6455 0 R 6469 0 R 6474 0 R 6480 0 R 6484 0 R 6488 0 R]
+/Parent 9378 0 R
+/Kids [6463 0 R 6470 0 R 6475 0 R 6483 0 R 6491 0 R 6497 0 R]
 >> endobj
-6500 0 obj <<
+6505 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9409 0 R
-/Kids [6495 0 R 6502 0 R 6507 0 R 6515 0 R 6523 0 R 6529 0 R]
+/Parent 9378 0 R
+/Kids [6502 0 R 6508 0 R 6515 0 R 6522 0 R 6527 0 R 6532 0 R]
 >> endobj
-6537 0 obj <<
+6539 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9409 0 R
-/Kids [6534 0 R 6540 0 R 6547 0 R 6554 0 R 6559 0 R 6564 0 R]
+/Parent 9378 0 R
+/Kids [6536 0 R 6541 0 R 6549 0 R 6555 0 R 6560 0 R 6568 0 R]
 >> endobj
-6571 0 obj <<
+6590 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9409 0 R
-/Kids [6568 0 R 6573 0 R 6581 0 R 6587 0 R 6592 0 R 6600 0 R]
+/Parent 9378 0 R
+/Kids [6582 0 R 6596 0 R 6602 0 R 6606 0 R 6611 0 R 6615 0 R]
 >> endobj
-6622 0 obj <<
+6624 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9409 0 R
-/Kids [6614 0 R 6628 0 R 6634 0 R 6638 0 R 6643 0 R 6647 0 R]
+/Parent 9379 0 R
+/Kids [6620 0 R 6631 0 R 6646 0 R 6659 0 R 6664 0 R 6669 0 R]
 >> endobj
-6656 0 obj <<
+6680 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9410 0 R
-/Kids [6652 0 R 6663 0 R 6678 0 R 6691 0 R 6696 0 R 6701 0 R]
+/Parent 9379 0 R
+/Kids [6676 0 R 6683 0 R 6689 0 R 6704 0 R 6719 0 R 6727 0 R]
 >> endobj
-6712 0 obj <<
+6738 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9410 0 R
-/Kids [6708 0 R 6715 0 R 6721 0 R 6736 0 R 6751 0 R 6759 0 R]
+/Parent 9379 0 R
+/Kids [6734 0 R 6744 0 R 6750 0 R 6755 0 R 6760 0 R 6764 0 R]
 >> endobj
-6770 0 obj <<
+6774 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9410 0 R
-/Kids [6766 0 R 6776 0 R 6782 0 R 6787 0 R 6792 0 R 6796 0 R]
+/Parent 9379 0 R
+/Kids [6770 0 R 6777 0 R 6783 0 R 6787 0 R 6791 0 R 6795 0 R]
 >> endobj
-6806 0 obj <<
+6802 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9410 0 R
-/Kids [6802 0 R 6809 0 R 6815 0 R 6819 0 R 6823 0 R 6827 0 R]
+/Parent 9379 0 R
+/Kids [6799 0 R 6804 0 R 6808 0 R 6812 0 R 6816 0 R 6820 0 R]
 >> endobj
-6834 0 obj <<
+6827 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9410 0 R
-/Kids [6831 0 R 6836 0 R 6840 0 R 6844 0 R 6848 0 R 6852 0 R]
+/Parent 9379 0 R
+/Kids [6824 0 R 6830 0 R 6836 0 R 6842 0 R 6849 0 R 6859 0 R]
 >> endobj
-6859 0 obj <<
+6884 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9410 0 R
-/Kids [6856 0 R 6862 0 R 6868 0 R 6874 0 R 6881 0 R 6891 0 R]
+/Parent 9380 0 R
+/Kids [6874 0 R 6890 0 R 6894 0 R 6900 0 R 6912 0 R 6923 0 R]
 >> endobj
-6916 0 obj <<
+6938 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9411 0 R
-/Kids [6906 0 R 6922 0 R 6926 0 R 6932 0 R 6944 0 R 6955 0 R]
+/Parent 9380 0 R
+/Kids [6932 0 R 6943 0 R 6952 0 R 6957 0 R 6962 0 R 6981 0 R]
 >> endobj
-6970 0 obj <<
+6998 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9411 0 R
-/Kids [6964 0 R 6975 0 R 6984 0 R 6989 0 R 6994 0 R 7013 0 R]
+/Parent 9380 0 R
+/Kids [6994 0 R 7000 0 R 7006 0 R 7011 0 R 7016 0 R 7020 0 R]
 >> endobj
-7030 0 obj <<
+7027 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9411 0 R
-/Kids [7026 0 R 7032 0 R 7038 0 R 7043 0 R 7048 0 R 7052 0 R]
+/Parent 9380 0 R
+/Kids [7024 0 R 7030 0 R 7037 0 R 7041 0 R 7047 0 R 7052 0 R]
 >> endobj
-7059 0 obj <<
+7062 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9411 0 R
-/Kids [7056 0 R 7062 0 R 7069 0 R 7073 0 R 7079 0 R 7084 0 R]
+/Parent 9380 0 R
+/Kids [7057 0 R 7064 0 R 7073 0 R 7082 0 R 7087 0 R 7092 0 R]
 >> endobj
-7094 0 obj <<
+7107 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9411 0 R
-/Kids [7089 0 R 7096 0 R 7105 0 R 7114 0 R 7119 0 R 7124 0 R]
+/Parent 9380 0 R
+/Kids [7102 0 R 7109 0 R 7115 0 R 7119 0 R 7124 0 R 7130 0 R]
 >> endobj
-7139 0 obj <<
+7141 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9411 0 R
-/Kids [7134 0 R 7141 0 R 7147 0 R 7151 0 R 7156 0 R 7162 0 R]
+/Parent 9381 0 R
+/Kids [7137 0 R 7145 0 R 7150 0 R 7155 0 R 7160 0 R 7164 0 R]
 >> endobj
-7173 0 obj <<
+7171 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9412 0 R
-/Kids [7169 0 R 7177 0 R 7182 0 R 7187 0 R 7192 0 R 7196 0 R]
+/Parent 9381 0 R
+/Kids [7168 0 R 7174 0 R 7178 0 R 7330 0 R 7465 0 R 7570 0 R]
 >> endobj
-7203 0 obj <<
+7699 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9412 0 R
-/Kids [7200 0 R 7206 0 R 7210 0 R 7362 0 R 7497 0 R 7602 0 R]
+/Parent 9381 0 R
+/Kids [7696 0 R 7793 0 R 7905 0 R 8026 0 R 8147 0 R 8252 0 R]
 >> endobj
-7731 0 obj <<
+8351 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 9412 0 R
-/Kids [7728 0 R 7825 0 R 7937 0 R 8058 0 R 8179 0 R 8284 0 R]
+/Parent 9381 0 R
+/Kids [8348 0 R 8496 0 R 8627 0 R 8742 0 R 8851 0 R 9021 0 R]
 >> endobj
-8383 0 obj <<
+9152 0 obj <<
 /Type /Pages
-/Count 6
-/Parent 9412 0 R
-/Kids [8380 0 R 8528 0 R 8659 0 R 8774 0 R 8883 0 R 9053 0 R]
->> endobj
-9184 0 obj <<
-/Type /Pages
 /Count 2
-/Parent 9412 0 R
-/Kids [9181 0 R 9308 0 R]
+/Parent 9381 0 R
+/Kids [9149 0 R 9276 0 R]
 >> endobj
-9395 0 obj <<
+9364 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 9413 0 R
+/Parent 9382 0 R
 /Kids [1126 0 R 1287 0 R 1459 0 R 1716 0 R 1876 0 R 1918 0 R]
 >> endobj
-9396 0 obj <<
+9365 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 9413 0 R
-/Kids [1950 0 R 1984 0 R 2042 0 R 2169 0 R 2247 0 R 2307 0 R]
+/Parent 9382 0 R
+/Kids [1950 0 R 1984 0 R 2042 0 R 2169 0 R 2244 0 R 2304 0 R]
 >> endobj
-9397 0 obj <<
+9366 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 9413 0 R
-/Kids [2359 0 R 2418 0 R 2467 0 R 2549 0 R 2597 0 R 2644 0 R]
+/Parent 9382 0 R
+/Kids [2355 0 R 2413 0 R 2462 0 R 2544 0 R 2590 0 R 2637 0 R]
 >> endobj
-9398 0 obj <<
+9367 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 9413 0 R
-/Kids [2694 0 R 2766 0 R 2802 0 R 2854 0 R 2925 0 R 2993 0 R]
+/Parent 9382 0 R
+/Kids [2687 0 R 2759 0 R 2795 0 R 2847 0 R 2918 0 R 2986 0 R]
 >> endobj
-9399 0 obj <<
+9368 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 9413 0 R
-/Kids [3026 0 R 3098 0 R 3167 0 R 3326 0 R 3379 0 R 3404 0 R]
+/Parent 9382 0 R
+/Kids [3019 0 R 3089 0 R 3158 0 R 3317 0 R 3370 0 R 3395 0 R]
 >> endobj
-9400 0 obj <<
+9369 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 9413 0 R
-/Kids [3429 0 R 3463 0 R 3520 0 R 3566 0 R 3624 0 R 3686 0 R]
+/Parent 9382 0 R
+/Kids [3420 0 R 3454 0 R 3509 0 R 3555 0 R 3613 0 R 3672 0 R]
 >> endobj
-9401 0 obj <<
+9370 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 9414 0 R
-/Kids [3740 0 R 3779 0 R 3820 0 R 3866 0 R 3917 0 R 3963 0 R]
+/Parent 9383 0 R
+/Kids [3726 0 R 3765 0 R 3806 0 R 3852 0 R 3903 0 R 3949 0 R]
 >> endobj
-9402 0 obj <<
+9371 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 9414 0 R
-/Kids [4022 0 R 4065 0 R 4091 0 R 4283 0 R 4319 0 R 4369 0 R]
+/Parent 9383 0 R
+/Kids [4008 0 R 4051 0 R 4077 0 R 4269 0 R 4305 0 R 4353 0 R]
 >> endobj
-9403 0 obj <<
+9372 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 9414 0 R
-/Kids [4457 0 R 4488 0 R 4689 0 R 4715 0 R 4752 0 R 4800 0 R]
+/Parent 9383 0 R
+/Kids [4431 0 R 4462 0 R 4663 0 R 4689 0 R 4726 0 R 4772 0 R]
 >> endobj
-9404 0 obj <<
+9373 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 9414 0 R
-/Kids [4841 0 R 4891 0 R 4921 0 R 4962 0 R 5026 0 R 5097 0 R]
+/Parent 9383 0 R
+/Kids [4813 0 R 4861 0 R 4891 0 R 4932 0 R 4996 0 R 5067 0 R]
 >> endobj
-9405 0 obj <<
+9374 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 9414 0 R
-/Kids [5271 0 R 5315 0 R 5346 0 R 5392 0 R 5430 0 R 5469 0 R]
+/Parent 9383 0 R
+/Kids [5241 0 R 5285 0 R 5316 0 R 5362 0 R 5400 0 R 5439 0 R]
 >> endobj
-9406 0 obj <<
+9375 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 9414 0 R
-/Kids [5530 0 R 5566 0 R 5606 0 R 5641 0 R 5746 0 R 5773 0 R]
+/Parent 9383 0 R
+/Kids [5498 0 R 5534 0 R 5574 0 R 5609 0 R 5714 0 R 5741 0 R]
 >> endobj
-9407 0 obj <<
+9376 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 9415 0 R
-/Kids [5811 0 R 5856 0 R 5891 0 R 5991 0 R 6109 0 R 6139 0 R]
+/Parent 9384 0 R
+/Kids [5779 0 R 5824 0 R 5859 0 R 5959 0 R 6077 0 R 6107 0 R]
 >> endobj
-9408 0 obj <<
+9377 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 9415 0 R
-/Kids [6167 0 R 6196 0 R 6228 0 R 6272 0 R 6325 0 R 6355 0 R]
+/Parent 9384 0 R
+/Kids [6135 0 R 6164 0 R 6196 0 R 6240 0 R 6293 0 R 6323 0 R]
 >> endobj
-9409 0 obj <<
+9378 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 9415 0 R
-/Kids [6393 0 R 6465 0 R 6500 0 R 6537 0 R 6571 0 R 6622 0 R]
+/Parent 9384 0 R
+/Kids [6361 0 R 6433 0 R 6468 0 R 6505 0 R 6539 0 R 6590 0 R]
 >> endobj
-9410 0 obj <<
+9379 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 9415 0 R
-/Kids [6656 0 R 6712 0 R 6770 0 R 6806 0 R 6834 0 R 6859 0 R]
+/Parent 9384 0 R
+/Kids [6624 0 R 6680 0 R 6738 0 R 6774 0 R 6802 0 R 6827 0 R]
 >> endobj
-9411 0 obj <<
+9380 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 9415 0 R
-/Kids [6916 0 R 6970 0 R 7030 0 R 7059 0 R 7094 0 R 7139 0 R]
+/Parent 9384 0 R
+/Kids [6884 0 R 6938 0 R 6998 0 R 7027 0 R 7062 0 R 7107 0 R]
 >> endobj
-9412 0 obj <<
+9381 0 obj <<
 /Type /Pages
 /Count 26
-/Parent 9415 0 R
-/Kids [7173 0 R 7203 0 R 7731 0 R 8383 0 R 9184 0 R]
+/Parent 9384 0 R
+/Kids [7141 0 R 7171 0 R 7699 0 R 8351 0 R 9152 0 R]
 >> endobj
-9413 0 obj <<
+9382 0 obj <<
 /Type /Pages
 /Count 216
-/Parent 9416 0 R
-/Kids [9395 0 R 9396 0 R 9397 0 R 9398 0 R 9399 0 R 9400 0 R]
+/Parent 9385 0 R
+/Kids [9364 0 R 9365 0 R 9366 0 R 9367 0 R 9368 0 R 9369 0 R]
 >> endobj
-9414 0 obj <<
+9383 0 obj <<
 /Type /Pages
 /Count 216
-/Parent 9416 0 R
-/Kids [9401 0 R 9402 0 R 9403 0 R 9404 0 R 9405 0 R 9406 0 R]
+/Parent 9385 0 R
+/Kids [9370 0 R 9371 0 R 9372 0 R 9373 0 R 9374 0 R 9375 0 R]
 >> endobj
-9415 0 obj <<
+9384 0 obj <<
 /Type /Pages
 /Count 206
-/Parent 9416 0 R
-/Kids [9407 0 R 9408 0 R 9409 0 R 9410 0 R 9411 0 R 9412 0 R]
+/Parent 9385 0 R
+/Kids [9376 0 R 9377 0 R 9378 0 R 9379 0 R 9380 0 R 9381 0 R]
 >> endobj
-9416 0 obj <<
+9385 0 obj <<
 /Type /Pages
 /Count 638
-/Kids [9413 0 R 9414 0 R 9415 0 R]
+/Kids [9382 0 R 9383 0 R 9384 0 R]
 >> endobj
-9417 0 obj <<
+9386 0 obj <<
 /Type /Outlines
 /First 7 0 R
 /Last 751 0 R
@@ -66402,7 +65660,7 @@
 751 0 obj <<
 /Title 752 0 R
 /A 749 0 R
-/Parent 9417 0 R
+/Parent 9386 0 R
 /Prev 499 0 R
 /First 755 0 R
 /Last 1115 0 R
@@ -66866,7 +66124,7 @@
 499 0 obj <<
 /Title 500 0 R
 /A 497 0 R
-/Parent 9417 0 R
+/Parent 9386 0 R
 /Prev 39 0 R
 /Next 751 0 R
 /First 503 0 R
@@ -67705,7 +66963,7 @@
 39 0 obj <<
 /Title 40 0 R
 /A 37 0 R
-/Parent 9417 0 R
+/Parent 9386 0 R
 /Prev 35 0 R
 /Next 499 0 R
 /First 43 0 R
@@ -67715,12884 +66973,12853 @@
 35 0 obj <<
 /Title 36 0 R
 /A 33 0 R
-/Parent 9417 0 R
+/Parent 9386 0 R
 /Prev 31 0 R
 /Next 39 0 R
 >> endobj
 31 0 obj <<
 /Title 32 0 R
 /A 29 0 R
-/Parent 9417 0 R
+/Parent 9386 0 R
 /Prev 27 0 R
 /Next 35 0 R
 >> endobj
 27 0 obj <<
 /Title 28 0 R
 /A 25 0 R
-/Parent 9417 0 R
+/Parent 9386 0 R
 /Prev 23 0 R
 /Next 31 0 R
 >> endobj
 23 0 obj <<
 /Title 24 0 R
 /A 21 0 R
-/Parent 9417 0 R
+/Parent 9386 0 R
 /Prev 19 0 R
 /Next 27 0 R
 >> endobj
 19 0 obj <<
 /Title 20 0 R
 /A 17 0 R
-/Parent 9417 0 R
+/Parent 9386 0 R
 /Prev 15 0 R
 /Next 23 0 R
 >> endobj
 15 0 obj <<
 /Title 16 0 R
 /A 13 0 R
-/Parent 9417 0 R
+/Parent 9386 0 R
 /Prev 11 0 R
 /Next 19 0 R
 >> endobj
 11 0 obj <<
 /Title 12 0 R
 /A 9 0 R
-/Parent 9417 0 R
+/Parent 9386 0 R
 /Prev 7 0 R
 /Next 15 0 R
 >> endobj
 7 0 obj <<
 /Title 8 0 R
 /A 5 0 R
-/Parent 9417 0 R
+/Parent 9386 0 R
 /Next 11 0 R
 >> endobj
-9418 0 obj <<
-/Names [(105) 1749 0 R (143) 1751 0 R (2000users) 4288 0 R (233) 1755 0 R (267) 1795 0 R (29) 1745 0 R]
+9387 0 obj <<
+/Names [(105) 1749 0 R (143) 1751 0 R (2000users) 4274 0 R (233) 1755 0 R (267) 1795 0 R (29) 1745 0 R]
 /Limits [(105) (29)]
 >> endobj
-9419 0 obj <<
+9388 0 obj <<
 /Names [(3) 1742 0 R (347) 1799 0 R (473) 1857 0 R (491) 1802 0 R (529) 1815 0 R (53) 1747 0 R]
 /Limits [(3) (53)]
 >> endobj
-9420 0 obj <<
-/Names [(AccountingOffice) 2207 0 R (AcctgNet) 2216 0 R (Big500users) 3017 0 R (DMSMig) 4708 0 R (Doc-Start) 1122 0 R (DomApps) 6360 0 R]
+9389 0 obj <<
+/Names [(AccountingOffice) 2207 0 R (AcctgNet) 2216 0 R (Big500users) 3010 0 R (DMSMig) 4682 0 R (Doc-Start) 1122 0 R (DomApps) 6328 0 R]
 /Limits [(AccountingOffice) (DomApps)]
 >> endobj
-9421 0 obj <<
-/Names [(ExNetworks) 1962 0 R (HA) 6491 0 R (Item.1) 1997 0 R (Item.10) 2014 0 R (Item.100) 2423 0 R (Item.101) 2424 0 R]
+9390 0 obj <<
+/Names [(ExNetworks) 1962 0 R (HA) 6459 0 R (Item.1) 1997 0 R (Item.10) 2014 0 R (Item.100) 2418 0 R (Item.101) 2419 0 R]
 /Limits [(ExNetworks) (Item.101)]
 >> endobj
-9422 0 obj <<
-/Names [(Item.102) 2429 0 R (Item.103) 2430 0 R (Item.104) 2438 0 R (Item.105) 2439 0 R (Item.106) 2441 0 R (Item.107) 2442 0 R]
+9391 0 obj <<
+/Names [(Item.102) 2424 0 R (Item.103) 2425 0 R (Item.104) 2433 0 R (Item.105) 2434 0 R (Item.106) 2436 0 R (Item.107) 2437 0 R]
 /Limits [(Item.102) (Item.107)]
 >> endobj
-9423 0 obj <<
-/Names [(Item.108) 2443 0 R (Item.109) 2444 0 R (Item.11) 2015 0 R (Item.110) 2445 0 R (Item.111) 2446 0 R (Item.112) 2452 0 R]
+9392 0 obj <<
+/Names [(Item.108) 2438 0 R (Item.109) 2439 0 R (Item.11) 2015 0 R (Item.110) 2440 0 R (Item.111) 2441 0 R (Item.112) 2447 0 R]
 /Limits [(Item.108) (Item.112)]
 >> endobj
-9424 0 obj <<
-/Names [(Item.113) 2453 0 R (Item.114) 2454 0 R (Item.115) 2472 0 R (Item.116) 2473 0 R (Item.117) 2474 0 R (Item.118) 2475 0 R]
+9393 0 obj <<
+/Names [(Item.113) 2448 0 R (Item.114) 2449 0 R (Item.115) 2467 0 R (Item.116) 2468 0 R (Item.117) 2469 0 R (Item.118) 2470 0 R]
 /Limits [(Item.113) (Item.118)]
 >> endobj
-9425 0 obj <<
-/Names [(Item.119) 2628 0 R (Item.12) 2016 0 R (Item.120) 2629 0 R (Item.121) 2630 0 R (Item.122) 2631 0 R (Item.123) 2632 0 R]
+9394 0 obj <<
+/Names [(Item.119) 2621 0 R (Item.12) 2016 0 R (Item.120) 2622 0 R (Item.121) 2623 0 R (Item.122) 2624 0 R (Item.123) 2625 0 R]
 /Limits [(Item.119) (Item.123)]
 >> endobj
-9426 0 obj <<
-/Names [(Item.124) 2633 0 R (Item.125) 2634 0 R (Item.126) 2635 0 R (Item.127) 2637 0 R (Item.128) 2642 0 R (Item.129) 2643 0 R]
+9395 0 obj <<
+/Names [(Item.124) 2626 0 R (Item.125) 2627 0 R (Item.126) 2628 0 R (Item.127) 2630 0 R (Item.128) 2635 0 R (Item.129) 2636 0 R]
 /Limits [(Item.124) (Item.129)]
 >> endobj
-9427 0 obj <<
-/Names [(Item.13) 2001 0 R (Item.130) 2650 0 R (Item.131) 2651 0 R (Item.132) 2661 0 R (Item.133) 2662 0 R (Item.134) 2883 0 R]
+9396 0 obj <<
+/Names [(Item.13) 2001 0 R (Item.130) 2643 0 R (Item.131) 2644 0 R (Item.132) 2654 0 R (Item.133) 2655 0 R (Item.134) 2876 0 R]
 /Limits [(Item.13) (Item.134)]
 >> endobj
-9428 0 obj <<
-/Names [(Item.135) 2884 0 R (Item.136) 2885 0 R (Item.137) 2886 0 R (Item.138) 2887 0 R (Item.139) 2888 0 R (Item.14) 2017 0 R]
+9397 0 obj <<
+/Names [(Item.135) 2877 0 R (Item.136) 2878 0 R (Item.137) 2879 0 R (Item.138) 2880 0 R (Item.139) 2881 0 R (Item.14) 2017 0 R]
 /Limits [(Item.135) (Item.14)]
 >> endobj
-9429 0 obj <<
-/Names [(Item.140) 2889 0 R (Item.141) 2890 0 R (Item.142) 2891 0 R (Item.143) 2892 0 R (Item.144) 2893 0 R (Item.145) 2894 0 R]
+9398 0 obj <<
+/Names [(Item.140) 2882 0 R (Item.141) 2883 0 R (Item.142) 2884 0 R (Item.143) 2885 0 R (Item.144) 2886 0 R (Item.145) 2887 0 R]
 /Limits [(Item.140) (Item.145)]
 >> endobj
-9430 0 obj <<
-/Names [(Item.146) 2895 0 R (Item.147) 2896 0 R (Item.148) 2897 0 R (Item.149) 2898 0 R (Item.15) 2018 0 R (Item.150) 2899 0 R]
+9399 0 obj <<
+/Names [(Item.146) 2888 0 R (Item.147) 2889 0 R (Item.148) 2890 0 R (Item.149) 2891 0 R (Item.15) 2018 0 R (Item.150) 2892 0 R]
 /Limits [(Item.146) (Item.150)]
 >> endobj
-9431 0 obj <<
-/Names [(Item.151) 2900 0 R (Item.152) 2901 0 R (Item.153) 2902 0 R (Item.154) 2903 0 R (Item.155) 2904 0 R (Item.156) 2905 0 R]
+9400 0 obj <<
+/Names [(Item.151) 2893 0 R (Item.152) 2894 0 R (Item.153) 2895 0 R (Item.154) 2896 0 R (Item.155) 2897 0 R (Item.156) 2898 0 R]
 /Limits [(Item.151) (Item.156)]
 >> endobj
-9432 0 obj <<
-/Names [(Item.157) 2906 0 R (Item.158) 2907 0 R (Item.159) 2908 0 R (Item.16) 2019 0 R (Item.160) 2909 0 R (Item.161) 2910 0 R]
+9401 0 obj <<
+/Names [(Item.157) 2899 0 R (Item.158) 2900 0 R (Item.159) 2901 0 R (Item.16) 2019 0 R (Item.160) 2902 0 R (Item.161) 2903 0 R]
 /Limits [(Item.157) (Item.161)]
 >> endobj
-9433 0 obj <<
-/Names [(Item.162) 2911 0 R (Item.163) 2912 0 R (Item.164) 2913 0 R (Item.165) 2914 0 R (Item.166) 2915 0 R (Item.167) 2916 0 R]
+9402 0 obj <<
+/Names [(Item.162) 2904 0 R (Item.163) 2905 0 R (Item.164) 2906 0 R (Item.165) 2907 0 R (Item.166) 2908 0 R (Item.167) 2909 0 R]
 /Limits [(Item.162) (Item.167)]
 >> endobj
-9434 0 obj <<
-/Names [(Item.168) 2917 0 R (Item.169) 2918 0 R (Item.17) 2020 0 R (Item.170) 2919 0 R (Item.171) 2920 0 R (Item.172) 2921 0 R]
+9403 0 obj <<
+/Names [(Item.168) 2910 0 R (Item.169) 2911 0 R (Item.17) 2020 0 R (Item.170) 2912 0 R (Item.171) 2913 0 R (Item.172) 2914 0 R]
 /Limits [(Item.168) (Item.172)]
 >> endobj
-9435 0 obj <<
-/Names [(Item.173) 2922 0 R (Item.174) 2923 0 R (Item.175) 2924 0 R (Item.176) 2931 0 R (Item.177) 2932 0 R (Item.178) 2933 0 R]
+9404 0 obj <<
+/Names [(Item.173) 2915 0 R (Item.174) 2916 0 R (Item.175) 2917 0 R (Item.176) 2924 0 R (Item.177) 2925 0 R (Item.178) 2926 0 R]
 /Limits [(Item.173) (Item.178)]
 >> endobj
-9436 0 obj <<
-/Names [(Item.179) 2934 0 R (Item.18) 2021 0 R (Item.180) 2935 0 R (Item.181) 2936 0 R (Item.182) 2937 0 R (Item.183) 2938 0 R]
+9405 0 obj <<
+/Names [(Item.179) 2927 0 R (Item.18) 2021 0 R (Item.180) 2928 0 R (Item.181) 2929 0 R (Item.182) 2930 0 R (Item.183) 2931 0 R]
 /Limits [(Item.179) (Item.183)]
 >> endobj
-9437 0 obj <<
-/Names [(Item.184) 2939 0 R (Item.185) 2940 0 R (Item.186) 2941 0 R (Item.187) 2942 0 R (Item.188) 2943 0 R (Item.189) 2944 0 R]
+9406 0 obj <<
+/Names [(Item.184) 2932 0 R (Item.185) 2933 0 R (Item.186) 2934 0 R (Item.187) 2935 0 R (Item.188) 2936 0 R (Item.189) 2937 0 R]
 /Limits [(Item.184) (Item.189)]
 >> endobj
-9438 0 obj <<
-/Names [(Item.19) 2027 0 R (Item.190) 2945 0 R (Item.191) 2946 0 R (Item.192) 2947 0 R (Item.193) 2948 0 R (Item.194) 2949 0 R]
+9407 0 obj <<
+/Names [(Item.19) 2027 0 R (Item.190) 2938 0 R (Item.191) 2939 0 R (Item.192) 2940 0 R (Item.193) 2941 0 R (Item.194) 2942 0 R]
 /Limits [(Item.19) (Item.194)]
 >> endobj
-9439 0 obj <<
-/Names [(Item.195) 2950 0 R (Item.196) 2951 0 R (Item.197) 2952 0 R (Item.198) 2953 0 R (Item.199) 2954 0 R (Item.2) 1998 0 R]
+9408 0 obj <<
+/Names [(Item.195) 2943 0 R (Item.196) 2944 0 R (Item.197) 2945 0 R (Item.198) 2946 0 R (Item.199) 2947 0 R (Item.2) 1998 0 R]
 /Limits [(Item.195) (Item.2)]
 >> endobj
-9440 0 obj <<
-/Names [(Item.20) 2028 0 R (Item.200) 2955 0 R (Item.201) 2956 0 R (Item.202) 2957 0 R (Item.203) 2963 0 R (Item.204) 2964 0 R]
+9409 0 obj <<
+/Names [(Item.20) 2028 0 R (Item.200) 2948 0 R (Item.201) 2949 0 R (Item.202) 2950 0 R (Item.203) 2956 0 R (Item.204) 2957 0 R]
 /Limits [(Item.20) (Item.204)]
 >> endobj
-9441 0 obj <<
-/Names [(Item.205) 2965 0 R (Item.206) 2966 0 R (Item.207) 2967 0 R (Item.208) 2968 0 R (Item.209) 2969 0 R (Item.21) 2029 0 R]
+9410 0 obj <<
+/Names [(Item.205) 2958 0 R (Item.206) 2959 0 R (Item.207) 2960 0 R (Item.208) 2961 0 R (Item.209) 2962 0 R (Item.21) 2029 0 R]
 /Limits [(Item.205) (Item.21)]
 >> endobj
-9442 0 obj <<
-/Names [(Item.210) 2970 0 R (Item.211) 2971 0 R (Item.212) 2972 0 R (Item.213) 2973 0 R (Item.214) 2974 0 R (Item.215) 2975 0 R]
+9411 0 obj <<
+/Names [(Item.210) 2963 0 R (Item.211) 2964 0 R (Item.212) 2965 0 R (Item.213) 2966 0 R (Item.214) 2967 0 R (Item.215) 2968 0 R]
 /Limits [(Item.210) (Item.215)]
 >> endobj
-9443 0 obj <<
-/Names [(Item.216) 2663 0 R (Item.217) 2673 0 R (Item.218) 2674 0 R (Item.219) 2680 0 R (Item.22) 2052 0 R (Item.220) 2685 0 R]
+9412 0 obj <<
+/Names [(Item.216) 2656 0 R (Item.217) 2666 0 R (Item.218) 2667 0 R (Item.219) 2673 0 R (Item.22) 2052 0 R (Item.220) 2678 0 R]
 /Limits [(Item.216) (Item.220)]
 >> endobj
-9444 0 obj <<
-/Names [(Item.221) 2686 0 R (Item.222) 2687 0 R (Item.223) 2688 0 R (Item.224) 2693 0 R (Item.225) 2712 0 R (Item.226) 2713 0 R]
+9413 0 obj <<
+/Names [(Item.221) 2679 0 R (Item.222) 2680 0 R (Item.223) 2681 0 R (Item.224) 2686 0 R (Item.225) 2705 0 R (Item.226) 2706 0 R]
 /Limits [(Item.221) (Item.226)]
 >> endobj
-9445 0 obj <<
-/Names [(Item.227) 2714 0 R (Item.228) 2717 0 R (Item.229) 2733 0 R (Item.23) 2053 0 R (Item.230) 2735 0 R (Item.231) 2736 0 R]
+9414 0 obj <<
+/Names [(Item.227) 2707 0 R (Item.228) 2710 0 R (Item.229) 2726 0 R (Item.23) 2053 0 R (Item.230) 2728 0 R (Item.231) 2729 0 R]
 /Limits [(Item.227) (Item.231)]
 >> endobj
-9446 0 obj <<
-/Names [(Item.232) 2737 0 R (Item.233) 2742 0 R (Item.234) 2743 0 R (Item.235) 2744 0 R (Item.236) 2745 0 R (Item.237) 2746 0 R]
+9415 0 obj <<
+/Names [(Item.232) 2730 0 R (Item.233) 2735 0 R (Item.234) 2736 0 R (Item.235) 2737 0 R (Item.236) 2738 0 R (Item.237) 2739 0 R]
 /Limits [(Item.232) (Item.237)]
 >> endobj
-9447 0 obj <<
-/Names [(Item.238) 2752 0 R (Item.239) 2753 0 R (Item.24) 2059 0 R (Item.240) 2759 0 R (Item.241) 2764 0 R (Item.242) 2765 0 R]
+9416 0 obj <<
+/Names [(Item.238) 2745 0 R (Item.239) 2746 0 R (Item.24) 2059 0 R (Item.240) 2752 0 R (Item.241) 2757 0 R (Item.242) 2758 0 R]
 /Limits [(Item.238) (Item.242)]
 >> endobj
-9448 0 obj <<
-/Names [(Item.243) 2772 0 R (Item.244) 2773 0 R (Item.245) 2778 0 R (Item.246) 2787 0 R (Item.247) 2788 0 R (Item.248) 2794 0 R]
+9417 0 obj <<
+/Names [(Item.243) 2765 0 R (Item.244) 2766 0 R (Item.245) 2771 0 R (Item.246) 2780 0 R (Item.247) 2781 0 R (Item.248) 2787 0 R]
 /Limits [(Item.243) (Item.248)]
 >> endobj
-9449 0 obj <<
-/Names [(Item.249) 2795 0 R (Item.25) 2060 0 R (Item.250) 2801 0 R (Item.251) 2824 0 R (Item.252) 2825 0 R (Item.253) 2833 0 R]
+9418 0 obj <<
+/Names [(Item.249) 2788 0 R (Item.25) 2060 0 R (Item.250) 2794 0 R (Item.251) 2817 0 R (Item.252) 2818 0 R (Item.253) 2826 0 R]
 /Limits [(Item.249) (Item.253)]
 >> endobj
-9450 0 obj <<
-/Names [(Item.254) 2834 0 R (Item.255) 2835 0 R (Item.256) 2836 0 R (Item.257) 2837 0 R (Item.258) 2838 0 R (Item.259) 2839 0 R]
+9419 0 obj <<
+/Names [(Item.254) 2827 0 R (Item.255) 2828 0 R (Item.256) 2829 0 R (Item.257) 2830 0 R (Item.258) 2831 0 R (Item.259) 2832 0 R]
 /Limits [(Item.254) (Item.259)]
 >> endobj
-9451 0 obj <<
-/Names [(Item.26) 2072 0 R (Item.260) 2840 0 R (Item.261) 2845 0 R (Item.262) 2846 0 R (Item.263) 2847 0 R (Item.264) 2848 0 R]
+9420 0 obj <<
+/Names [(Item.26) 2072 0 R (Item.260) 2833 0 R (Item.261) 2838 0 R (Item.262) 2839 0 R (Item.263) 2840 0 R (Item.264) 2841 0 R]
 /Limits [(Item.26) (Item.264)]
 >> endobj
-9452 0 obj <<
-/Names [(Item.265) 2849 0 R (Item.266) 2850 0 R (Item.267) 2851 0 R (Item.268) 2852 0 R (Item.269) 3077 0 R (Item.27) 2073 0 R]
+9421 0 obj <<
+/Names [(Item.265) 2842 0 R (Item.266) 2843 0 R (Item.267) 2844 0 R (Item.268) 2845 0 R (Item.269) 3070 0 R (Item.27) 2073 0 R]
 /Limits [(Item.265) (Item.27)]
 >> endobj
-9453 0 obj <<
-/Names [(Item.270) 3084 0 R (Item.271) 3085 0 R (Item.272) 3097 0 R (Item.273) 3122 0 R (Item.274) 3123 0 R (Item.275) 3124 0 R]
+9422 0 obj <<
+/Names [(Item.270) 3077 0 R (Item.271) 3078 0 R (Item.272) 3088 0 R (Item.273) 3113 0 R (Item.274) 3114 0 R (Item.275) 3115 0 R]
 /Limits [(Item.270) (Item.275)]
 >> endobj
-9454 0 obj <<
-/Names [(Item.276) 3129 0 R (Item.277) 3130 0 R (Item.278) 3131 0 R (Item.279) 3132 0 R (Item.28) 2081 0 R (Item.280) 3133 0 R]
+9423 0 obj <<
+/Names [(Item.276) 3120 0 R (Item.277) 3121 0 R (Item.278) 3122 0 R (Item.279) 3123 0 R (Item.28) 2081 0 R (Item.280) 3124 0 R]
 /Limits [(Item.276) (Item.280)]
 >> endobj
-9455 0 obj <<
-/Names [(Item.281) 3139 0 R (Item.282) 3140 0 R (Item.283) 3141 0 R (Item.284) 3148 0 R (Item.285) 3149 0 R (Item.286) 3155 0 R]
+9424 0 obj <<
+/Names [(Item.281) 3130 0 R (Item.282) 3131 0 R (Item.283) 3132 0 R (Item.284) 3139 0 R (Item.285) 3140 0 R (Item.286) 3146 0 R]
 /Limits [(Item.281) (Item.286)]
 >> endobj
-9456 0 obj <<
-/Names [(Item.287) 3156 0 R (Item.288) 3157 0 R (Item.289) 3158 0 R (Item.29) 2082 0 R (Item.290) 3159 0 R (Item.291) 3160 0 R]
+9425 0 obj <<
+/Names [(Item.287) 3147 0 R (Item.288) 3148 0 R (Item.289) 3149 0 R (Item.29) 2082 0 R (Item.290) 3150 0 R (Item.291) 3151 0 R]
 /Limits [(Item.287) (Item.291)]
 >> endobj
-9457 0 obj <<
-/Names [(Item.292) 3166 0 R (Item.293) 3176 0 R (Item.294) 3177 0 R (Item.295) 3178 0 R (Item.296) 3179 0 R (Item.297) 3190 0 R]
+9426 0 obj <<
+/Names [(Item.292) 3157 0 R (Item.293) 3167 0 R (Item.294) 3168 0 R (Item.295) 3169 0 R (Item.296) 3170 0 R (Item.297) 3181 0 R]
 /Limits [(Item.292) (Item.297)]
 >> endobj
-9458 0 obj <<
-/Names [(Item.298) 3191 0 R (Item.299) 3192 0 R (Item.3) 1999 0 R (Item.30) 2083 0 R (Item.300) 3193 0 R (Item.301) 3194 0 R]
+9427 0 obj <<
+/Names [(Item.298) 3182 0 R (Item.299) 3183 0 R (Item.3) 1999 0 R (Item.30) 2083 0 R (Item.300) 3184 0 R (Item.301) 3185 0 R]
 /Limits [(Item.298) (Item.301)]
 >> endobj
-9459 0 obj <<
-/Names [(Item.302) 3298 0 R (Item.303) 3325 0 R (Item.304) 3334 0 R (Item.305) 3335 0 R (Item.306) 3337 0 R (Item.307) 3338 0 R]
+9428 0 obj <<
+/Names [(Item.302) 3289 0 R (Item.303) 3316 0 R (Item.304) 3325 0 R (Item.305) 3326 0 R (Item.306) 3328 0 R (Item.307) 3329 0 R]
 /Limits [(Item.302) (Item.307)]
 >> endobj
-9460 0 obj <<
-/Names [(Item.308) 3339 0 R (Item.309) 3344 0 R (Item.31) 2084 0 R (Item.310) 3345 0 R (Item.311) 3346 0 R (Item.312) 3347 0 R]
+9429 0 obj <<
+/Names [(Item.308) 3330 0 R (Item.309) 3335 0 R (Item.31) 2084 0 R (Item.310) 3336 0 R (Item.311) 3337 0 R (Item.312) 3338 0 R]
 /Limits [(Item.308) (Item.312)]
 >> endobj
-9461 0 obj <<
-/Names [(Item.313) 3348 0 R (Item.314) 3349 0 R (Item.315) 3350 0 R (Item.316) 3351 0 R (Item.317) 3352 0 R (Item.318) 3360 0 R]
+9430 0 obj <<
+/Names [(Item.313) 3339 0 R (Item.314) 3340 0 R (Item.315) 3341 0 R (Item.316) 3342 0 R (Item.317) 3343 0 R (Item.318) 3351 0 R]
 /Limits [(Item.313) (Item.318)]
 >> endobj
-9462 0 obj <<
-/Names [(Item.319) 3361 0 R (Item.32) 2085 0 R (Item.320) 3362 0 R (Item.321) 3363 0 R (Item.322) 3471 0 R (Item.323) 3472 0 R]
+9431 0 obj <<
+/Names [(Item.319) 3352 0 R (Item.32) 2085 0 R (Item.320) 3353 0 R (Item.321) 3354 0 R (Item.322) 3462 0 R (Item.323) 3463 0 R]
 /Limits [(Item.319) (Item.323)]
 >> endobj
-9463 0 obj <<
-/Names [(Item.324) 3603 0 R (Item.325) 3604 0 R (Item.326) 3605 0 R (Item.327) 3606 0 R (Item.328) 3607 0 R (Item.329) 3608 0 R]
+9432 0 obj <<
+/Names [(Item.324) 3592 0 R (Item.325) 3593 0 R (Item.326) 3594 0 R (Item.327) 3595 0 R (Item.328) 3596 0 R (Item.329) 3597 0 R]
 /Limits [(Item.324) (Item.329)]
 >> endobj
-9464 0 obj <<
-/Names [(Item.33) 2086 0 R (Item.330) 3609 0 R (Item.331) 3610 0 R (Item.332) 3611 0 R (Item.333) 3612 0 R (Item.334) 3613 0 R]
+9433 0 obj <<
+/Names [(Item.33) 2086 0 R (Item.330) 3598 0 R (Item.331) 3599 0 R (Item.332) 3600 0 R (Item.333) 3601 0 R (Item.334) 3602 0 R]
 /Limits [(Item.33) (Item.334)]
 >> endobj
-9465 0 obj <<
-/Names [(Item.335) 3614 0 R (Item.336) 3615 0 R (Item.337) 3616 0 R (Item.338) 3617 0 R (Item.339) 3618 0 R (Item.34) 2087 0 R]
+9434 0 obj <<
+/Names [(Item.335) 3603 0 R (Item.336) 3604 0 R (Item.337) 3605 0 R (Item.338) 3606 0 R (Item.339) 3607 0 R (Item.34) 2087 0 R]
 /Limits [(Item.335) (Item.34)]
 >> endobj
-9466 0 obj <<
-/Names [(Item.340) 3619 0 R (Item.341) 3620 0 R (Item.342) 3621 0 R (Item.343) 3622 0 R (Item.344) 3623 0 R (Item.345) 3631 0 R]
+9435 0 obj <<
+/Names [(Item.340) 3608 0 R (Item.341) 3609 0 R (Item.342) 3610 0 R (Item.343) 3611 0 R (Item.344) 3612 0 R (Item.345) 3620 0 R]
 /Limits [(Item.340) (Item.345)]
 >> endobj
-9467 0 obj <<
-/Names [(Item.346) 3632 0 R (Item.347) 3659 0 R (Item.348) 3660 0 R (Item.349) 3661 0 R (Item.35) 2127 0 R (Item.350) 3662 0 R]
+9436 0 obj <<
+/Names [(Item.346) 3621 0 R (Item.347) 3645 0 R (Item.348) 3646 0 R (Item.349) 3647 0 R (Item.35) 2127 0 R (Item.350) 3648 0 R]
 /Limits [(Item.346) (Item.350)]
 >> endobj
-9468 0 obj <<
-/Names [(Item.351) 3671 0 R (Item.352) 3672 0 R (Item.353) 3679 0 R (Item.354) 3680 0 R (Item.355) 3696 0 R (Item.356) 3697 0 R]
+9437 0 obj <<
+/Names [(Item.351) 3657 0 R (Item.352) 3658 0 R (Item.353) 3665 0 R (Item.354) 3666 0 R (Item.355) 3682 0 R (Item.356) 3683 0 R]
 /Limits [(Item.351) (Item.356)]
 >> endobj
-9469 0 obj <<
-/Names [(Item.357) 3706 0 R (Item.358) 3707 0 R (Item.359) 3708 0 R (Item.36) 2165 0 R (Item.360) 3713 0 R (Item.361) 3714 0 R]
+9438 0 obj <<
+/Names [(Item.357) 3692 0 R (Item.358) 3693 0 R (Item.359) 3694 0 R (Item.36) 2165 0 R (Item.360) 3699 0 R (Item.361) 3700 0 R]
 /Limits [(Item.357) (Item.361)]
 >> endobj
-9470 0 obj <<
-/Names [(Item.362) 3728 0 R (Item.363) 3729 0 R (Item.364) 3730 0 R (Item.365) 3736 0 R (Item.366) 3737 0 R (Item.367) 3739 0 R]
+9439 0 obj <<
+/Names [(Item.362) 3714 0 R (Item.363) 3715 0 R (Item.364) 3716 0 R (Item.365) 3722 0 R (Item.366) 3723 0 R (Item.367) 3725 0 R]
 /Limits [(Item.362) (Item.367)]
 >> endobj
-9471 0 obj <<
-/Names [(Item.368) 3747 0 R (Item.369) 3748 0 R (Item.37) 2166 0 R (Item.370) 3749 0 R (Item.371) 3750 0 R (Item.372) 3755 0 R]
+9440 0 obj <<
+/Names [(Item.368) 3733 0 R (Item.369) 3734 0 R (Item.37) 2166 0 R (Item.370) 3735 0 R (Item.371) 3736 0 R (Item.372) 3741 0 R]
 /Limits [(Item.368) (Item.372)]
 >> endobj
-9472 0 obj <<
-/Names [(Item.373) 3756 0 R (Item.374) 3765 0 R (Item.375) 3785 0 R (Item.376) 3786 0 R (Item.377) 3787 0 R (Item.378) 3792 0 R]
+9441 0 obj <<
+/Names [(Item.373) 3742 0 R (Item.374) 3751 0 R (Item.375) 3771 0 R (Item.376) 3772 0 R (Item.377) 3773 0 R (Item.378) 3778 0 R]
 /Limits [(Item.373) (Item.378)]
 >> endobj
-9473 0 obj <<
-/Names [(Item.379) 3793 0 R (Item.38) 2167 0 R (Item.380) 3794 0 R (Item.381) 3800 0 R (Item.382) 3806 0 R (Item.383) 3812 0 R]
+9442 0 obj <<
+/Names [(Item.379) 3779 0 R (Item.38) 2167 0 R (Item.380) 3780 0 R (Item.381) 3786 0 R (Item.382) 3792 0 R (Item.383) 3798 0 R]
 /Limits [(Item.379) (Item.383)]
 >> endobj
-9474 0 obj <<
-/Names [(Item.384) 3813 0 R (Item.385) 3818 0 R (Item.386) 3819 0 R (Item.387) 3825 0 R (Item.388) 3826 0 R (Item.389) 3827 0 R]
+9443 0 obj <<
+/Names [(Item.384) 3799 0 R (Item.385) 3804 0 R (Item.386) 3805 0 R (Item.387) 3811 0 R (Item.388) 3812 0 R (Item.389) 3813 0 R]
 /Limits [(Item.384) (Item.389)]
 >> endobj
-9475 0 obj <<
-/Names [(Item.39) 2168 0 R (Item.390) 3832 0 R (Item.391) 3833 0 R (Item.392) 3838 0 R (Item.393) 3839 0 R (Item.394) 3844 0 R]
+9444 0 obj <<
+/Names [(Item.39) 2168 0 R (Item.390) 3818 0 R (Item.391) 3819 0 R (Item.392) 3824 0 R (Item.393) 3825 0 R (Item.394) 3830 0 R]
 /Limits [(Item.39) (Item.394)]
 >> endobj
-9476 0 obj <<
-/Names [(Item.395) 3845 0 R (Item.396) 3846 0 R (Item.397) 3851 0 R (Item.398) 3852 0 R (Item.399) 3861 0 R (Item.4) 2000 0 R]
+9445 0 obj <<
+/Names [(Item.395) 3831 0 R (Item.396) 3832 0 R (Item.397) 3837 0 R (Item.398) 3838 0 R (Item.399) 3847 0 R (Item.4) 2000 0 R]
 /Limits [(Item.395) (Item.4)]
 >> endobj
-9477 0 obj <<
-/Names [(Item.40) 2175 0 R (Item.400) 3862 0 R (Item.401) 3864 0 R (Item.402) 3865 0 R (Item.403) 3871 0 R (Item.404) 3872 0 R]
+9446 0 obj <<
+/Names [(Item.40) 2175 0 R (Item.400) 3848 0 R (Item.401) 3850 0 R (Item.402) 3851 0 R (Item.403) 3857 0 R (Item.404) 3858 0 R]
 /Limits [(Item.40) (Item.404)]
 >> endobj
-9478 0 obj <<
-/Names [(Item.405) 3873 0 R (Item.406) 3874 0 R (Item.407) 3875 0 R (Item.408) 3876 0 R (Item.409) 3887 0 R (Item.41) 2176 0 R]
+9447 0 obj <<
+/Names [(Item.405) 3859 0 R (Item.406) 3860 0 R (Item.407) 3861 0 R (Item.408) 3862 0 R (Item.409) 3873 0 R (Item.41) 2176 0 R]
 /Limits [(Item.405) (Item.41)]
 >> endobj
-9479 0 obj <<
-/Names [(Item.410) 3889 0 R (Item.411) 3890 0 R (Item.412) 3891 0 R (Item.413) 3897 0 R (Item.414) 3902 0 R (Item.415) 3903 0 R]
+9448 0 obj <<
+/Names [(Item.410) 3875 0 R (Item.411) 3876 0 R (Item.412) 3877 0 R (Item.413) 3883 0 R (Item.414) 3888 0 R (Item.415) 3889 0 R]
 /Limits [(Item.410) (Item.415)]
 >> endobj
-9480 0 obj <<
-/Names [(Item.416) 3904 0 R (Item.417) 3909 0 R (Item.418) 3910 0 R (Item.419) 3915 0 R (Item.42) 2177 0 R (Item.420) 3916 0 R]
+9449 0 obj <<
+/Names [(Item.416) 3890 0 R (Item.417) 3895 0 R (Item.418) 3896 0 R (Item.419) 3901 0 R (Item.42) 2177 0 R (Item.420) 3902 0 R]
 /Limits [(Item.416) (Item.420)]
 >> endobj
-9481 0 obj <<
-/Names [(Item.421) 3926 0 R (Item.422) 3928 0 R (Item.423) 3953 0 R (Item.424) 3954 0 R (Item.425) 3955 0 R (Item.426) 3956 0 R]
+9450 0 obj <<
+/Names [(Item.421) 3912 0 R (Item.422) 3914 0 R (Item.423) 3939 0 R (Item.424) 3940 0 R (Item.425) 3941 0 R (Item.426) 3942 0 R]
 /Limits [(Item.421) (Item.426)]
 >> endobj
-9482 0 obj <<
-/Names [(Item.427) 3970 0 R (Item.428) 3971 0 R (Item.429) 3972 0 R (Item.43) 2179 0 R (Item.430) 3973 0 R (Item.431) 3974 0 R]
+9451 0 obj <<
+/Names [(Item.427) 3956 0 R (Item.428) 3957 0 R (Item.429) 3958 0 R (Item.43) 2179 0 R (Item.430) 3959 0 R (Item.431) 3960 0 R]
 /Limits [(Item.427) (Item.431)]
 >> endobj
-9483 0 obj <<
-/Names [(Item.432) 3975 0 R (Item.433) 3984 0 R (Item.434) 3985 0 R (Item.435) 3986 0 R (Item.436) 3987 0 R (Item.437) 3988 0 R]
+9452 0 obj <<
+/Names [(Item.432) 3961 0 R (Item.433) 3970 0 R (Item.434) 3971 0 R (Item.435) 3972 0 R (Item.436) 3973 0 R (Item.437) 3974 0 R]
 /Limits [(Item.432) (Item.437)]
 >> endobj
-9484 0 obj <<
-/Names [(Item.438) 3994 0 R (Item.439) 3995 0 R (Item.44) 2180 0 R (Item.440) 4000 0 R (Item.441) 4001 0 R (Item.442) 4002 0 R]
+9453 0 obj <<
+/Names [(Item.438) 3980 0 R (Item.439) 3981 0 R (Item.44) 2180 0 R (Item.440) 3986 0 R (Item.441) 3987 0 R (Item.442) 3988 0 R]
 /Limits [(Item.438) (Item.442)]
 >> endobj
-9485 0 obj <<
-/Names [(Item.443) 4003 0 R (Item.444) 4004 0 R (Item.445) 4005 0 R (Item.446) 4006 0 R (Item.447) 4027 0 R (Item.448) 4029 0 R]
+9454 0 obj <<
+/Names [(Item.443) 3989 0 R (Item.444) 3990 0 R (Item.445) 3991 0 R (Item.446) 3992 0 R (Item.447) 4013 0 R (Item.448) 4015 0 R]
 /Limits [(Item.443) (Item.448)]
 >> endobj
-9486 0 obj <<
-/Names [(Item.449) 4030 0 R (Item.45) 2181 0 R (Item.450) 4031 0 R (Item.451) 4032 0 R (Item.452) 4033 0 R (Item.453) 4034 0 R]
+9455 0 obj <<
+/Names [(Item.449) 4016 0 R (Item.45) 2181 0 R (Item.450) 4017 0 R (Item.451) 4018 0 R (Item.452) 4019 0 R (Item.453) 4020 0 R]
 /Limits [(Item.449) (Item.453)]
 >> endobj
-9487 0 obj <<
-/Names [(Item.454) 4039 0 R (Item.455) 4040 0 R (Item.456) 4041 0 R (Item.457) 4042 0 R (Item.458) 4416 0 R (Item.459) 4417 0 R]
+9456 0 obj <<
+/Names [(Item.454) 4025 0 R (Item.455) 4026 0 R (Item.456) 4027 0 R (Item.457) 4028 0 R (Item.458) 4390 0 R (Item.459) 4391 0 R]
 /Limits [(Item.454) (Item.459)]
 >> endobj
-9488 0 obj <<
-/Names [(Item.46) 2182 0 R (Item.460) 4418 0 R (Item.461) 4425 0 R (Item.462) 4426 0 R (Item.463) 4427 0 R (Item.464) 4428 0 R]
+9457 0 obj <<
+/Names [(Item.46) 2182 0 R (Item.460) 4392 0 R (Item.461) 4399 0 R (Item.462) 4400 0 R (Item.463) 4401 0 R (Item.464) 4402 0 R]
 /Limits [(Item.46) (Item.464)]
 >> endobj
-9489 0 obj <<
-/Names [(Item.465) 4429 0 R (Item.466) 4435 0 R (Item.467) 4436 0 R (Item.468) 4444 0 R (Item.469) 4445 0 R (Item.47) 2183 0 R]
+9458 0 obj <<
+/Names [(Item.465) 4403 0 R (Item.466) 4409 0 R (Item.467) 4410 0 R (Item.468) 4418 0 R (Item.469) 4419 0 R (Item.47) 2183 0 R]
 /Limits [(Item.465) (Item.47)]
 >> endobj
-9490 0 obj <<
-/Names [(Item.470) 4446 0 R (Item.471) 4453 0 R (Item.472) 4816 0 R (Item.473) 4817 0 R (Item.474) 4818 0 R (Item.475) 4824 0 R]
+9459 0 obj <<
+/Names [(Item.470) 4420 0 R (Item.471) 4427 0 R (Item.472) 4788 0 R (Item.473) 4789 0 R (Item.474) 4790 0 R (Item.475) 4796 0 R]
 /Limits [(Item.470) (Item.475)]
 >> endobj
-9491 0 obj <<
-/Names [(Item.476) 4825 0 R (Item.477) 4835 0 R (Item.478) 4837 0 R (Item.479) 4838 0 R (Item.48) 2189 0 R (Item.480) 4839 0 R]
+9460 0 obj <<
+/Names [(Item.476) 4797 0 R (Item.477) 4807 0 R (Item.478) 4809 0 R (Item.479) 4810 0 R (Item.48) 2189 0 R (Item.480) 4811 0 R]
 /Limits [(Item.476) (Item.480)]
 >> endobj
-9492 0 obj <<
-/Names [(Item.481) 4840 0 R (Item.482) 4855 0 R (Item.483) 4872 0 R (Item.484) 4879 0 R (Item.485) 4880 0 R (Item.486) 4881 0 R]
+9461 0 obj <<
+/Names [(Item.481) 4812 0 R (Item.482) 4827 0 R (Item.483) 4842 0 R (Item.484) 4849 0 R (Item.485) 4850 0 R (Item.486) 4851 0 R]
 /Limits [(Item.481) (Item.486)]
 >> endobj
-9493 0 obj <<
-/Names [(Item.487) 4882 0 R (Item.488) 4883 0 R (Item.489) 4884 0 R (Item.49) 2190 0 R (Item.490) 4890 0 R (Item.491) 4896 0 R]
+9462 0 obj <<
+/Names [(Item.487) 4852 0 R (Item.488) 4853 0 R (Item.489) 4854 0 R (Item.49) 2190 0 R (Item.490) 4860 0 R (Item.491) 4866 0 R]
 /Limits [(Item.487) (Item.491)]
 >> endobj
-9494 0 obj <<
-/Names [(Item.492) 4897 0 R (Item.493) 4902 0 R (Item.494) 4907 0 R (Item.495) 4908 0 R (Item.496) 4937 0 R (Item.497) 4938 0 R]
+9463 0 obj <<
+/Names [(Item.492) 4867 0 R (Item.493) 4872 0 R (Item.494) 4877 0 R (Item.495) 4878 0 R (Item.496) 4907 0 R (Item.497) 4908 0 R]
 /Limits [(Item.492) (Item.497)]
 >> endobj
-9495 0 obj <<
-/Names [(Item.498) 4939 0 R (Item.499) 4940 0 R (Item.5) 2009 0 R (Item.50) 2191 0 R (Item.500) 4941 0 R (Item.501) 4958 0 R]
+9464 0 obj <<
+/Names [(Item.498) 4909 0 R (Item.499) 4910 0 R (Item.5) 2009 0 R (Item.50) 2191 0 R (Item.500) 4911 0 R (Item.501) 4928 0 R]
 /Limits [(Item.498) (Item.501)]
 >> endobj
-9496 0 obj <<
-/Names [(Item.502) 4959 0 R (Item.503) 4960 0 R (Item.504) 4961 0 R (Item.505) 4967 0 R (Item.506) 4968 0 R (Item.507) 4969 0 R]
+9465 0 obj <<
+/Names [(Item.502) 4929 0 R (Item.503) 4930 0 R (Item.504) 4931 0 R (Item.505) 4937 0 R (Item.506) 4938 0 R (Item.507) 4939 0 R]
 /Limits [(Item.502) (Item.507)]
 >> endobj
-9497 0 obj <<
-/Names [(Item.508) 4970 0 R (Item.509) 5006 0 R (Item.51) 2192 0 R (Item.510) 5007 0 R (Item.511) 5008 0 R (Item.512) 5009 0 R]
+9466 0 obj <<
+/Names [(Item.508) 4940 0 R (Item.509) 4976 0 R (Item.51) 2192 0 R (Item.510) 4977 0 R (Item.511) 4978 0 R (Item.512) 4979 0 R]
 /Limits [(Item.508) (Item.512)]
 >> endobj
-9498 0 obj <<
-/Names [(Item.513) 5010 0 R (Item.514) 5011 0 R (Item.515) 5013 0 R (Item.516) 5014 0 R (Item.517) 5021 0 R (Item.518) 5022 0 R]
+9467 0 obj <<
+/Names [(Item.513) 4980 0 R (Item.514) 4981 0 R (Item.515) 4983 0 R (Item.516) 4984 0 R (Item.517) 4991 0 R (Item.518) 4992 0 R]
 /Limits [(Item.513) (Item.518)]
 >> endobj
-9499 0 obj <<
-/Names [(Item.519) 5023 0 R (Item.52) 2193 0 R (Item.520) 5024 0 R (Item.521) 5353 0 R (Item.522) 5359 0 R (Item.523) 5360 0 R]
+9468 0 obj <<
+/Names [(Item.519) 4993 0 R (Item.52) 2193 0 R (Item.520) 4994 0 R (Item.521) 5323 0 R (Item.522) 5329 0 R (Item.523) 5330 0 R]
 /Limits [(Item.519) (Item.523)]
 >> endobj
-9500 0 obj <<
-/Names [(Item.524) 5361 0 R (Item.525) 5362 0 R (Item.526) 5363 0 R (Item.527) 5364 0 R (Item.528) 5365 0 R (Item.529) 5366 0 R]
+9469 0 obj <<
+/Names [(Item.524) 5331 0 R (Item.525) 5332 0 R (Item.526) 5333 0 R (Item.527) 5334 0 R (Item.528) 5335 0 R (Item.529) 5336 0 R]
 /Limits [(Item.524) (Item.529)]
 >> endobj
-9501 0 obj <<
-/Names [(Item.53) 2194 0 R (Item.530) 5367 0 R (Item.531) 5374 0 R (Item.532) 5436 0 R (Item.533) 5437 0 R (Item.534) 5438 0 R]
+9470 0 obj <<
+/Names [(Item.53) 2194 0 R (Item.530) 5337 0 R (Item.531) 5344 0 R (Item.532) 5406 0 R (Item.533) 5407 0 R (Item.534) 5408 0 R]
 /Limits [(Item.53) (Item.534)]
 >> endobj
-9502 0 obj <<
-/Names [(Item.535) 5439 0 R (Item.536) 5444 0 R (Item.537) 5514 0 R (Item.538) 5515 0 R (Item.539) 5516 0 R (Item.54) 2195 0 R]
+9471 0 obj <<
+/Names [(Item.535) 5409 0 R (Item.536) 5414 0 R (Item.537) 5482 0 R (Item.538) 5483 0 R (Item.539) 5484 0 R (Item.54) 2195 0 R]
 /Limits [(Item.535) (Item.54)]
 >> endobj
-9503 0 obj <<
-/Names [(Item.540) 5517 0 R (Item.541) 5518 0 R (Item.542) 5528 0 R (Item.543) 5529 0 R (Item.544) 5544 0 R (Item.545) 5545 0 R]
+9472 0 obj <<
+/Names [(Item.540) 5485 0 R (Item.541) 5486 0 R (Item.542) 5496 0 R (Item.543) 5497 0 R (Item.544) 5512 0 R (Item.545) 5513 0 R]
 /Limits [(Item.540) (Item.545)]
 >> endobj
-9504 0 obj <<
-/Names [(Item.546) 5546 0 R (Item.547) 5552 0 R (Item.548) 5553 0 R (Item.549) 5558 0 R (Item.55) 2196 0 R (Item.550) 5559 0 R]
+9473 0 obj <<
+/Names [(Item.546) 5514 0 R (Item.547) 5520 0 R (Item.548) 5521 0 R (Item.549) 5526 0 R (Item.55) 2196 0 R (Item.550) 5527 0 R]
 /Limits [(Item.546) (Item.550)]
 >> endobj
-9505 0 obj <<
-/Names [(Item.551) 5564 0 R (Item.552) 5565 0 R (Item.553) 5572 0 R (Item.554) 5573 0 R (Item.555) 5579 0 R (Item.556) 5585 0 R]
+9474 0 obj <<
+/Names [(Item.551) 5532 0 R (Item.552) 5533 0 R (Item.553) 5540 0 R (Item.554) 5541 0 R (Item.555) 5547 0 R (Item.556) 5553 0 R]
 /Limits [(Item.551) (Item.556)]
 >> endobj
-9506 0 obj <<
-/Names [(Item.557) 5586 0 R (Item.558) 5587 0 R (Item.559) 5588 0 R (Item.56) 2197 0 R (Item.560) 5593 0 R (Item.561) 5604 0 R]
+9475 0 obj <<
+/Names [(Item.557) 5554 0 R (Item.558) 5555 0 R (Item.559) 5556 0 R (Item.56) 2197 0 R (Item.560) 5561 0 R (Item.561) 5572 0 R]
 /Limits [(Item.557) (Item.561)]
 >> endobj
-9507 0 obj <<
-/Names [(Item.562) 5605 0 R (Item.563) 5611 0 R (Item.564) 5612 0 R (Item.565) 5613 0 R (Item.566) 5618 0 R (Item.567) 5623 0 R]
+9476 0 obj <<
+/Names [(Item.562) 5573 0 R (Item.563) 5579 0 R (Item.564) 5580 0 R (Item.565) 5581 0 R (Item.566) 5586 0 R (Item.567) 5591 0 R]
 /Limits [(Item.562) (Item.567)]
 >> endobj
-9508 0 obj <<
-/Names [(Item.568) 5624 0 R (Item.569) 5629 0 R (Item.57) 2198 0 R (Item.570) 5884 0 R (Item.571) 5885 0 R (Item.572) 5886 0 R]
+9477 0 obj <<
+/Names [(Item.568) 5592 0 R (Item.569) 5597 0 R (Item.57) 2198 0 R (Item.570) 5852 0 R (Item.571) 5853 0 R (Item.572) 5854 0 R]
 /Limits [(Item.568) (Item.572)]
 >> endobj
-9509 0 obj <<
-/Names [(Item.573) 5887 0 R (Item.574) 5888 0 R (Item.575) 5889 0 R (Item.576) 5890 0 R (Item.577) 6247 0 R (Item.578) 6248 0 R]
+9478 0 obj <<
+/Names [(Item.573) 5855 0 R (Item.574) 5856 0 R (Item.575) 5857 0 R (Item.576) 5858 0 R (Item.577) 6215 0 R (Item.578) 6216 0 R]
 /Limits [(Item.573) (Item.578)]
 >> endobj
-9510 0 obj <<
-/Names [(Item.579) 6249 0 R (Item.58) 2199 0 R (Item.580) 6250 0 R (Item.581) 6251 0 R (Item.582) 6252 0 R (Item.583) 6253 0 R]
+9479 0 obj <<
+/Names [(Item.579) 6217 0 R (Item.58) 2199 0 R (Item.580) 6218 0 R (Item.581) 6219 0 R (Item.582) 6220 0 R (Item.583) 6221 0 R]
 /Limits [(Item.579) (Item.583)]
 >> endobj
-9511 0 obj <<
-/Names [(Item.584) 6259 0 R (Item.585) 6260 0 R (Item.586) 6261 0 R (Item.587) 6262 0 R (Item.588) 6283 0 R (Item.589) 6284 0 R]
+9480 0 obj <<
+/Names [(Item.584) 6227 0 R (Item.585) 6228 0 R (Item.586) 6229 0 R (Item.587) 6230 0 R (Item.588) 6251 0 R (Item.589) 6252 0 R]
 /Limits [(Item.584) (Item.589)]
 >> endobj
-9512 0 obj <<
-/Names [(Item.59) 2200 0 R (Item.590) 6285 0 R (Item.591) 6286 0 R (Item.592) 6287 0 R (Item.593) 6292 0 R (Item.594) 6293 0 R]
+9481 0 obj <<
+/Names [(Item.59) 2200 0 R (Item.590) 6253 0 R (Item.591) 6254 0 R (Item.592) 6255 0 R (Item.593) 6260 0 R (Item.594) 6261 0 R]
 /Limits [(Item.59) (Item.594)]
 >> endobj
-9513 0 obj <<
-/Names [(Item.595) 6294 0 R (Item.596) 6299 0 R (Item.597) 6300 0 R (Item.598) 6303 0 R (Item.599) 6308 0 R (Item.6) 2010 0 R]
+9482 0 obj <<
+/Names [(Item.595) 6262 0 R (Item.596) 6267 0 R (Item.597) 6268 0 R (Item.598) 6271 0 R (Item.599) 6276 0 R (Item.6) 2010 0 R]
 /Limits [(Item.595) (Item.6)]
 >> endobj
-9514 0 obj <<
-/Names [(Item.60) 2201 0 R (Item.600) 6309 0 R (Item.601) 6310 0 R (Item.602) 6311 0 R (Item.603) 6312 0 R (Item.604) 6313 0 R]
+9483 0 obj <<
+/Names [(Item.60) 2201 0 R (Item.600) 6277 0 R (Item.601) 6278 0 R (Item.602) 6279 0 R (Item.603) 6280 0 R (Item.604) 6281 0 R]
 /Limits [(Item.60) (Item.604)]
 >> endobj
-9515 0 obj <<
-/Names [(Item.605) 6319 0 R (Item.606) 6320 0 R (Item.607) 6321 0 R (Item.608) 6323 0 R (Item.609) 6324 0 R (Item.61) 2217 0 R]
+9484 0 obj <<
+/Names [(Item.605) 6287 0 R (Item.606) 6288 0 R (Item.607) 6289 0 R (Item.608) 6291 0 R (Item.609) 6292 0 R (Item.61) 2217 0 R]
 /Limits [(Item.605) (Item.61)]
 >> endobj
-9516 0 obj <<
-/Names [(Item.610) 6330 0 R (Item.611) 6335 0 R (Item.612) 6390 0 R (Item.613) 6392 0 R (Item.614) 6399 0 R (Item.615) 6408 0 R]
+9485 0 obj <<
+/Names [(Item.610) 6298 0 R (Item.611) 6303 0 R (Item.612) 6358 0 R (Item.613) 6360 0 R (Item.614) 6367 0 R (Item.615) 6376 0 R]
 /Limits [(Item.610) (Item.615)]
 >> endobj
-9517 0 obj <<
-/Names [(Item.616) 6409 0 R (Item.617) 6410 0 R (Item.618) 6411 0 R (Item.619) 6417 0 R (Item.62) 2218 0 R (Item.620) 6418 0 R]
+9486 0 obj <<
+/Names [(Item.616) 6377 0 R (Item.617) 6378 0 R (Item.618) 6379 0 R (Item.619) 6385 0 R (Item.62) 2218 0 R (Item.620) 6386 0 R]
 /Limits [(Item.616) (Item.620)]
 >> endobj
-9518 0 obj <<
-/Names [(Item.621) 6424 0 R (Item.622) 6451 0 R (Item.623) 6458 0 R (Item.624) 6459 0 R (Item.625) 6460 0 R (Item.626) 6461 0 R]
+9487 0 obj <<
+/Names [(Item.621) 6392 0 R (Item.622) 6419 0 R (Item.623) 6426 0 R (Item.624) 6427 0 R (Item.625) 6428 0 R (Item.626) 6429 0 R]
 /Limits [(Item.621) (Item.626)]
 >> endobj
-9519 0 obj <<
-/Names [(Item.627) 6462 0 R (Item.628) 6463 0 R (Item.629) 6464 0 R (Item.63) 2219 0 R (Item.630) 6603 0 R (Item.631) 6604 0 R]
+9488 0 obj <<
+/Names [(Item.627) 6430 0 R (Item.628) 6431 0 R (Item.629) 6432 0 R (Item.63) 2219 0 R (Item.630) 6571 0 R (Item.631) 6572 0 R]
 /Limits [(Item.627) (Item.631)]
 >> endobj
-9520 0 obj <<
-/Names [(Item.632) 6605 0 R (Item.633) 6617 0 R (Item.634) 6618 0 R (Item.635) 6620 0 R (Item.636) 6621 0 R (Item.637) 6631 0 R]
+9489 0 obj <<
+/Names [(Item.632) 6573 0 R (Item.633) 6585 0 R (Item.634) 6586 0 R (Item.635) 6588 0 R (Item.636) 6589 0 R (Item.637) 6599 0 R]
 /Limits [(Item.632) (Item.637)]
 >> endobj
-9521 0 obj <<
-/Names [(Item.638) 6682 0 R (Item.639) 6683 0 R (Item.64) 2220 0 R (Item.640) 6684 0 R (Item.641) 6694 0 R (Item.642) 6699 0 R]
+9490 0 obj <<
+/Names [(Item.638) 6650 0 R (Item.639) 6651 0 R (Item.64) 2220 0 R (Item.640) 6652 0 R (Item.641) 6662 0 R (Item.642) 6667 0 R]
 /Limits [(Item.638) (Item.642)]
 >> endobj
-9522 0 obj <<
-/Names [(Item.643) 6704 0 R (Item.644) 6705 0 R (Item.645) 6724 0 R (Item.646) 6725 0 R (Item.647) 6726 0 R (Item.648) 6727 0 R]
+9491 0 obj <<
+/Names [(Item.643) 6672 0 R (Item.644) 6673 0 R (Item.645) 6692 0 R (Item.646) 6693 0 R (Item.647) 6694 0 R (Item.648) 6695 0 R]
 /Limits [(Item.643) (Item.648)]
 >> endobj
-9523 0 obj <<
-/Names [(Item.649) 6739 0 R (Item.65) 2229 0 R (Item.650) 6885 0 R (Item.651) 6886 0 R (Item.652) 6887 0 R (Item.653) 6888 0 R]
+9492 0 obj <<
+/Names [(Item.649) 6707 0 R (Item.65) 2229 0 R (Item.650) 6853 0 R (Item.651) 6854 0 R (Item.652) 6855 0 R (Item.653) 6856 0 R]
 /Limits [(Item.649) (Item.653)]
 >> endobj
-9524 0 obj <<
-/Names [(Item.654) 6895 0 R (Item.655) 6896 0 R (Item.656) 6897 0 R (Item.657) 6898 0 R (Item.658) 6909 0 R (Item.659) 6910 0 R]
+9493 0 obj <<
+/Names [(Item.654) 6863 0 R (Item.655) 6864 0 R (Item.656) 6865 0 R (Item.657) 6866 0 R (Item.658) 6877 0 R (Item.659) 6878 0 R]
 /Limits [(Item.654) (Item.659)]
 >> endobj
-9525 0 obj <<
-/Names [(Item.66) 2230 0 R (Item.660) 6911 0 R (Item.661) 6912 0 R (Item.662) 6914 0 R (Item.663) 6929 0 R (Item.664) 6930 0 R]
+9494 0 obj <<
+/Names [(Item.66) 2230 0 R (Item.660) 6879 0 R (Item.661) 6880 0 R (Item.662) 6882 0 R (Item.663) 6897 0 R (Item.664) 6898 0 R]
 /Limits [(Item.66) (Item.664)]
 >> endobj
-9526 0 obj <<
-/Names [(Item.665) 6935 0 R (Item.666) 6936 0 R (Item.667) 6937 0 R (Item.668) 6938 0 R (Item.669) 6939 0 R (Item.67) 2244 0 R]
+9495 0 obj <<
+/Names [(Item.665) 6903 0 R (Item.666) 6904 0 R (Item.667) 6905 0 R (Item.668) 6906 0 R (Item.669) 6907 0 R (Item.67) 2241 0 R]
 /Limits [(Item.665) (Item.67)]
 >> endobj
-9527 0 obj <<
-/Names [(Item.670) 6947 0 R (Item.671) 6948 0 R (Item.672) 6958 0 R (Item.673) 6959 0 R (Item.674) 6960 0 R (Item.675) 6961 0 R]
+9496 0 obj <<
+/Names [(Item.670) 6915 0 R (Item.671) 6916 0 R (Item.672) 6926 0 R (Item.673) 6927 0 R (Item.674) 6928 0 R (Item.675) 6929 0 R]
 /Limits [(Item.670) (Item.675)]
 >> endobj
-9528 0 obj <<
-/Names [(Item.676) 6962 0 R (Item.677) 6967 0 R (Item.678) 6968 0 R (Item.679) 6969 0 R (Item.68) 2245 0 R (Item.680) 6978 0 R]
+9497 0 obj <<
+/Names [(Item.676) 6930 0 R (Item.677) 6935 0 R (Item.678) 6936 0 R (Item.679) 6937 0 R (Item.68) 2242 0 R (Item.680) 6946 0 R]
 /Limits [(Item.676) (Item.680)]
 >> endobj
-9529 0 obj <<
-/Names [(Item.681) 6979 0 R (Item.682) 6997 0 R (Item.683) 6998 0 R (Item.684) 6999 0 R (Item.685) 7000 0 R (Item.686) 7001 0 R]
+9498 0 obj <<
+/Names [(Item.681) 6947 0 R (Item.682) 6965 0 R (Item.683) 6966 0 R (Item.684) 6967 0 R (Item.685) 6968 0 R (Item.686) 6969 0 R]
 /Limits [(Item.681) (Item.686)]
 >> endobj
-9530 0 obj <<
-/Names [(Item.687) 7002 0 R (Item.688) 7003 0 R (Item.689) 7004 0 R (Item.69) 2246 0 R (Item.690) 7005 0 R (Item.691) 7006 0 R]
+9499 0 obj <<
+/Names [(Item.687) 6970 0 R (Item.688) 6971 0 R (Item.689) 6972 0 R (Item.69) 2243 0 R (Item.690) 6973 0 R (Item.691) 6974 0 R]
 /Limits [(Item.687) (Item.691)]
 >> endobj
-9531 0 obj <<
-/Names [(Item.692) 7007 0 R (Item.693) 7016 0 R (Item.694) 7017 0 R (Item.695) 7018 0 R (Item.696) 7019 0 R (Item.697) 7020 0 R]
+9500 0 obj <<
+/Names [(Item.692) 6975 0 R (Item.693) 6984 0 R (Item.694) 6985 0 R (Item.695) 6986 0 R (Item.696) 6987 0 R (Item.697) 6988 0 R]
 /Limits [(Item.692) (Item.697)]
 >> endobj
-9532 0 obj <<
-/Names [(Item.698) 7022 0 R (Item.699) 7100 0 R (Item.7) 2011 0 R (Item.70) 2252 0 R (Item.700) 7101 0 R (Item.701) 7102 0 R]
+9501 0 obj <<
+/Names [(Item.698) 6990 0 R (Item.699) 7068 0 R (Item.7) 2011 0 R (Item.70) 2249 0 R (Item.700) 7069 0 R (Item.701) 7070 0 R]
 /Limits [(Item.698) (Item.701)]
 >> endobj
-9533 0 obj <<
-/Names [(Item.702) 7103 0 R (Item.703) 7109 0 R (Item.704) 7110 0 R (Item.705) 7111 0 R (Item.706) 7112 0 R (Item.707) 7117 0 R]
+9502 0 obj <<
+/Names [(Item.702) 7071 0 R (Item.703) 7077 0 R (Item.704) 7078 0 R (Item.705) 7079 0 R (Item.706) 7080 0 R (Item.707) 7085 0 R]
 /Limits [(Item.702) (Item.707)]
 >> endobj
-9534 0 obj <<
-/Names [(Item.708) 7127 0 R (Item.709) 7128 0 R (Item.71) 2253 0 R (Item.710) 7129 0 R (Item.711) 7130 0 R (Item.712) 7131 0 R]
+9503 0 obj <<
+/Names [(Item.708) 7095 0 R (Item.709) 7096 0 R (Item.71) 2250 0 R (Item.710) 7097 0 R (Item.711) 7098 0 R (Item.712) 7099 0 R]
 /Limits [(Item.708) (Item.712)]
 >> endobj
-9535 0 obj <<
-/Names [(Item.713) 7132 0 R (Item.72) 2254 0 R (Item.73) 2255 0 R (Item.74) 2256 0 R (Item.75) 2257 0 R (Item.76) 2258 0 R]
+9504 0 obj <<
+/Names [(Item.713) 7100 0 R (Item.72) 2251 0 R (Item.73) 2252 0 R (Item.74) 2253 0 R (Item.75) 2254 0 R (Item.76) 2255 0 R]
 /Limits [(Item.713) (Item.76)]
 >> endobj
-9536 0 obj <<
-/Names [(Item.77) 2259 0 R (Item.78) 2264 0 R (Item.79) 2356 0 R (Item.8) 2012 0 R (Item.80) 2357 0 R (Item.81) 2358 0 R]
+9505 0 obj <<
+/Names [(Item.77) 2256 0 R (Item.78) 2261 0 R (Item.79) 2353 0 R (Item.8) 2012 0 R (Item.80) 2354 0 R (Item.81) 2367 0 R]
 /Limits [(Item.77) (Item.81)]
 >> endobj
-9537 0 obj <<
-/Names [(Item.82) 2373 0 R (Item.83) 2374 0 R (Item.84) 2375 0 R (Item.85) 2376 0 R (Item.86) 2377 0 R (Item.87) 2385 0 R]
+9506 0 obj <<
+/Names [(Item.82) 2368 0 R (Item.83) 2369 0 R (Item.84) 2370 0 R (Item.85) 2371 0 R (Item.86) 2372 0 R (Item.87) 2380 0 R]
 /Limits [(Item.82) (Item.87)]
 >> endobj
-9538 0 obj <<
-/Names [(Item.88) 2391 0 R (Item.89) 2397 0 R (Item.9) 2013 0 R (Item.90) 2398 0 R (Item.91) 2399 0 R (Item.92) 2400 0 R]
+9507 0 obj <<
+/Names [(Item.88) 2386 0 R (Item.89) 2392 0 R (Item.9) 2013 0 R (Item.90) 2393 0 R (Item.91) 2394 0 R (Item.92) 2395 0 R]
 /Limits [(Item.88) (Item.92)]
 >> endobj
-9539 0 obj <<
-/Names [(Item.93) 2401 0 R (Item.94) 2402 0 R (Item.95) 2408 0 R (Item.96) 2409 0 R (Item.97) 2410 0 R (Item.98) 2411 0 R]
+9508 0 obj <<
+/Names [(Item.93) 2396 0 R (Item.94) 2397 0 R (Item.95) 2403 0 R (Item.96) 2404 0 R (Item.97) 2405 0 R (Item.98) 2406 0 R]
 /Limits [(Item.93) (Item.98)]
 >> endobj
-9540 0 obj <<
-/Names [(Item.99) 2413 0 R (MEreg) 2178 0 R (NT4DUM) 5481 0 R (ProbList) 6505 0 R (RefSection) 6160 0 R (XP-screen001) 3976 0 R]
+9509 0 obj <<
+/Names [(Item.99) 2408 0 R (MEreg) 2178 0 R (NT4DUM) 5449 0 R (ProbList) 6473 0 R (RefSection) 6128 0 R (XP-screen001) 3962 0 R]
 /Limits [(Item.99) (XP-screen001)]
 >> endobj
-9541 0 obj <<
-/Names [(XPCap01) 7023 0 R (XPCap02) 7024 0 R (abmasbiz) 2725 0 R (abmasbizdns) 3111 0 R (abmasus) 2726 0 R (abmasusdns) 3112 0 R]
+9510 0 obj <<
+/Names [(XPCap01) 6991 0 R (XPCap02) 6992 0 R (abmasbiz) 2718 0 R (abmasbizdns) 3102 0 R (abmasus) 2719 0 R (abmasusdns) 3103 0 R]
 /Limits [(XPCap01) (abmasusdns)]
 >> endobj
-9542 0 obj <<
-/Names [(acct2conf) 2378 0 R (acct2net) 2355 0 R (acct3conf) 2379 0 R (acctconf) 2239 0 R (acctingnet) 2221 0 R (acctingnet2) 2222 0 R]
+9511 0 obj <<
+/Names [(acct2conf) 2373 0 R (acct2net) 2352 0 R (acct3conf) 2374 0 R (acctconf) 2236 0 R (acctingnet) 2221 0 R (acctingnet2) 2222 0 R]
 /Limits [(acct2conf) (acctingnet2)]
 >> endobj
-9543 0 obj <<
-/Names [(adssdm) 4848 0 R (altldapcfg) 3774 0 R (appendix) 2043 0 R (appendix*.63) 1114 0 R (appendix.A) 1106 0 R (bldg12nameda) 3113 0 R]
+9512 0 obj <<
+/Names [(adssdm) 4820 0 R (altldapcfg) 3760 0 R (appendix) 2043 0 R (appendix*.63) 1114 0 R (appendix.A) 1106 0 R (bldg12nameda) 3104 0 R]
 /Limits [(adssdm) (bldg12nameda)]
 >> endobj
-9544 0 obj <<
-/Names [(bldg12namedb) 3114 0 R (bldg1dhcp) 3106 0 R (bldg2dhcp) 3107 0 R (capsstats01) 6920 0 R (capsstats02) 6952 0 R (ch0-NT4DSCM) 4842 0 R]
+9513 0 obj <<
+/Names [(bldg12namedb) 3105 0 R (bldg1dhcp) 3097 0 R (bldg2dhcp) 3098 0 R (capsstats01) 6888 0 R (capsstats02) 6920 0 R (ch0-NT4DSCM) 4814 0 R]
 /Limits [(bldg12namedb) (ch0-NT4DSCM)]
 >> endobj
-9545 0 obj <<
-/Names [(ch0-NT4DSDM) 4819 0 R (ch04net) 2575 0 R (ch09openmag) 4726 0 R (ch10-etcnsscfg) 6426 0 R (ch10-krb5conf) 6394 0 R (ch10-one) 6383 0 R]
+9514 0 obj <<
+/Names [(ch0-NT4DSDM) 4791 0 R (ch04net) 2570 0 R (ch09openmag) 4700 0 R (ch10-etcnsscfg) 6394 0 R (ch10-krb5conf) 6362 0 R (ch10-one) 6351 0 R]
 /Limits [(ch0-NT4DSDM) (ch10-one)]
 >> endobj
-9546 0 obj <<
-/Names [(ch10-smbconf) 6412 0 R (ch10expl) 6207 0 R (ch12-SUIDSGID) 2044 0 R (ch12RHscript) 6671 0 R (ch12SL) 6657 0 R (ch12dblck) 6538 0 R]
+9515 0 obj <<
+/Names [(ch10-smbconf) 6380 0 R (ch10expl) 6175 0 R (ch12-SUIDSGID) 2044 0 R (ch12RHscript) 6639 0 R (ch12SL) 6625 0 R (ch12dblck) 6506 0 R]
 /Limits [(ch10-smbconf) (ch12dblck)]
 >> endobj
-9547 0 obj <<
-/Names [(ch4appscfg) 2811 0 R (ch4bsc) 2636 0 R (ch4dhcpdns) 2711 0 R (ch4diskest) 2609 0 R (ch4initGrps) 2976 0 R (ch4memoryest) 2603 0 R]
+9516 0 obj <<
+/Names [(ch4appscfg) 2804 0 R (ch4bsc) 2629 0 R (ch4dhcpdns) 2704 0 R (ch4diskest) 2602 0 R (ch4initGrps) 2969 0 R (ch4memoryest) 2596 0 R]
 /Limits [(ch4appscfg) (ch4memoryest)]
 >> endobj
-9548 0 obj <<
-/Names [(ch4namedcfg) 2719 0 R (ch4namedvarfwd) 2720 0 R (ch4namedvarrev) 2721 0 R (ch4natfw) 2652 0 R (ch4ptrcfg) 2734 0 R (ch4valid) 2758 0 R]
+9517 0 obj <<
+/Names [(ch4namedcfg) 2712 0 R (ch4namedvarfwd) 2713 0 R (ch4namedvarrev) 2714 0 R (ch4natfw) 2645 0 R (ch4ptrcfg) 2727 0 R (ch4valid) 2751 0 R]
 /Limits [(ch4namedcfg) (ch4valid)]
 >> endobj
-9549 0 obj <<
-/Names [(ch4wincfg) 2823 0 R (ch5-bldg1-smb) 3102 0 R (ch5-bldg2-smb) 3103 0 R (ch5-commonsmb) 3101 0 R (ch5-dc-common) 3100 0 R (ch5-dnshcp-setup) 3075 0 R]
+9518 0 obj <<
+/Names [(ch4wincfg) 2816 0 R (ch5-bldg1-smb) 3093 0 R (ch5-bldg2-smb) 3094 0 R (ch5-commonsmb) 3092 0 R (ch5-dc-common) 3091 0 R (ch5-dnshcp-setup) 3068 0 R]
 /Limits [(ch4wincfg) (ch5-dnshcp-setup)]
 >> endobj
-9550 0 obj <<
-/Names [(ch5-dommem-smb) 3104 0 R (ch5-domsvrspec) 3181 0 R (ch5-filelocations) 3079 0 R (ch5-initgrps) 3161 0 R (ch5-massivesmb) 3099 0 R (ch5-procstart) 3180 0 R]
+9519 0 obj <<
+/Names [(ch5-dommem-smb) 3095 0 R (ch5-domsvrspec) 3172 0 R (ch5-filelocations) 3072 0 R (ch5-initgrps) 3152 0 R (ch5-massivesmb) 3090 0 R (ch5-procstart) 3171 0 R]
 /Limits [(ch5-dommem-smb) (ch5-procstart)]
 >> endobj
-9551 0 obj <<
-/Names [(ch5wincfg) 3333 0 R (ch7-LDAP-master) 4419 0 R (ch7-LDAP-slave) 4430 0 R (ch7-massmbconfA) 4458 0 R (ch7-massmbconfB) 4539 0 R (ch7-massmbconfC) 4570 0 R]
+9520 0 obj <<
+/Names [(ch5wincfg) 3324 0 R (ch7-LDAP-master) 4393 0 R (ch7-LDAP-slave) 4404 0 R (ch7-massmbconfA) 4432 0 R (ch7-massmbconfB) 4513 0 R (ch7-massmbconfC) 4544 0 R]
 /Limits [(ch5wincfg) (ch7-massmbconfC)]
 >> endobj
-9552 0 obj <<
-/Names [(ch7-slvsmbocnfA) 4459 0 R (ch7-slvsmbocnfB) 4648 0 R (ch7dualLDAP) 4368 0 R (ch7dualadd) 4393 0 R (ch7dualok) 4394 0 R (ch7singleLDAP) 4367 0 R]
+9521 0 obj <<
+/Names [(ch7-slvsmbocnfA) 4433 0 R (ch7-slvsmbocnfB) 4622 0 R (ch7dualLDAP) 4352 0 R (ch7dualadd) 4372 0 R (ch7dualok) 4373 0 R (ch7singleLDAP) 4351 0 R]
 /Limits [(ch7-slvsmbocnfA) (ch7singleLDAP)]
 >> endobj
-9553 0 obj <<
-/Names [(ch8-migration) 5463 0 R (ch8-vampire) 5501 0 R (ch8ideal) 5851 0 R (ch8ideal2) 6114 0 R (ch8ideal3) 6119 0 R (ch8ideal4) 6124 0 R]
+9522 0 obj <<
+/Names [(ch8-migration) 5433 0 R (ch8-vampire) 5469 0 R (ch8ideal) 5819 0 R (ch8ideal2) 6082 0 R (ch8ideal3) 6087 0 R (ch8ideal4) 6092 0 R]
 /Limits [(ch8-migration) (ch8ideal4)]
 >> endobj
-9554 0 obj <<
-/Names [(ch8kix) 5879 0 R (ch8kix2) 6133 0 R (ch8kix3) 6138 0 R (ch8kix3b) 6144 0 R (ch8kix4) 6149 0 R (ch8ldap) 5826 0 R]
+9523 0 obj <<
+/Names [(ch8kix) 5847 0 R (ch8kix2) 6101 0 R (ch8kix3) 6106 0 R (ch8kix3b) 6112 0 R (ch8kix4) 6117 0 R (ch8ldap) 5794 0 R]
 /Limits [(ch8kix) (ch8ldap)]
 >> endobj
-9555 0 obj <<
-/Names [(ch8smbconf) 5840 0 R (ch8smbconf2) 5956 0 R (ch8smbconf3) 5996 0 R (ch8smbconf4) 6036 0 R (ch8smbconf5) 6074 0 R (ch9-adsdc) 4849 0 R]
+9524 0 obj <<
+/Names [(ch8smbconf) 5808 0 R (ch8smbconf2) 5924 0 R (ch8smbconf3) 5964 0 R (ch8smbconf4) 6004 0 R (ch8smbconf5) 6042 0 R (ch9-adsdc) 4821 0 R]
 /Limits [(ch8smbconf) (ch9-adsdc)]
 >> endobj
-9556 0 obj <<
-/Names [(ch9-adssdm) 4885 0 R (ch9-ldifadd) 4795 0 R (ch9-pamwbndxdm) 5294 0 R (ch9-pamwnbdlogin) 5015 0 R (ch9-rhsysauth) 5027 0 R (ch9-sambadc) 4764 0 R]
+9525 0 obj <<
+/Names [(ch9-adssdm) 4855 0 R (ch9-ldifadd) 4767 0 R (ch9-pamwbndxdm) 5264 0 R (ch9-pamwnbdlogin) 4985 0 R (ch9-rhsysauth) 4997 0 R (ch9-sambadc) 4738 0 R]
 /Limits [(ch9-adssdm) (ch9-sambadc)]
 >> endobj
-9557 0 obj <<
-/Names [(ch9-sdmlcnf) 4788 0 R (ch9-sdmnss) 4789 0 R (ch9-sdmsdc) 4782 0 R (chap01conc) 6878 0 R (chap01qa) 6879 0 R (chap05net) 3078 0 R]
+9526 0 obj <<
+/Names [(ch9-sdmlcnf) 4760 0 R (ch9-sdmnss) 4761 0 R (ch9-sdmsdc) 4754 0 R (chap01conc) 6846 0 R (chap01qa) 6847 0 R (chap05net) 3071 0 R]
 /Limits [(ch9-sdmlcnf) (chap05net)]
 >> endobj
-9558 0 obj <<
-/Names [(chap4netid) 2570 0 R (chap6net) 3634 0 R (chap7idres) 4351 0 R (chap7net) 4337 0 R (chap7net2) 4338 0 R (chapter*.17) 1963 0 R]
+9527 0 obj <<
+/Names [(chap4netid) 2565 0 R (chap6net) 3623 0 R (chap7idres) 4337 0 R (chap7net) 4323 0 R (chap7net2) 4324 0 R (chapter*.17) 1963 0 R]
 /Limits [(chap4netid) (chapter*.17)]
 >> endobj
-9559 0 obj <<
-/Names [(chapter*.2) 10 0 R (chapter*.3) 18 0 R (chapter*.31) 4709 0 R (chapter*.37) 6161 0 R (chapter*.4) 22 0 R (chapter*.5) 26 0 R]
+9528 0 obj <<
+/Names [(chapter*.2) 10 0 R (chapter*.3) 18 0 R (chapter*.31) 4683 0 R (chapter*.37) 6129 0 R (chapter*.4) 22 0 R (chapter*.5) 26 0 R]
 /Limits [(chapter*.2) (chapter*.5)]
 >> endobj
-9560 0 obj <<
+9529 0 obj <<
 /Names [(chapter*.6) 30 0 R (chapter*.7) 1869 0 R (chapter*.9) 1885 0 R (chapter.1) 46 0 R (chapter.10) 718 0 R (chapter.11) 758 0 R]
 /Limits [(chapter*.6) (chapter.11)]
 >> endobj
-9561 0 obj <<
+9530 0 obj <<
 /Names [(chapter.12) 830 0 R (chapter.13) 890 0 R (chapter.14) 958 0 R (chapter.15) 970 0 R (chapter.16) 1038 0 R (chapter.2) 106 0 R]
 /Limits [(chapter.12) (chapter.2)]
 >> endobj
-9562 0 obj <<
+9531 0 obj <<
 /Names [(chapter.3) 150 0 R (chapter.4) 226 0 R (chapter.5) 290 0 R (chapter.6) 450 0 R (chapter.7) 506 0 R (chapter.8) 582 0 R]
 /Limits [(chapter.3) (chapter.8)]
 >> endobj
-9563 0 obj <<
-/Names [(chapter.9) 670 0 R (charity-smbconf) 2089 0 R (charity-smbconfnew) 2088 0 R (charitynet) 2054 0 R (dcwonss) 4836 0 R (dhcp01) 2339 0 R]
+9532 0 obj <<
+/Names [(chapter.9) 670 0 R (charity-smbconf) 2089 0 R (charity-smbconfnew) 2088 0 R (charitynet) 2054 0 R (dcwonss) 4808 0 R (dhcp01) 2336 0 R]
 /Limits [(chapter.9) (dhcp01)]
 >> endobj
-9564 0 obj <<
-/Names [(dnsloopy) 2723 0 R (domjoin) 2447 0 R (draft-smbconf) 2002 0 R (etcsquid2) 6467 0 R (etcsquidcfg) 6466 0 R (eth1zone) 2727 0 R]
+9533 0 obj <<
+/Names [(dnsloopy) 2716 0 R (domjoin) 2442 0 R (draft-smbconf) 2002 0 R (etcsquid2) 6435 0 R (etcsquidcfg) 6434 0 R (eth1zone) 2720 0 R]
 /Limits [(dnsloopy) (eth1zone)]
 >> endobj
-9565 0 obj <<
-/Names [(eth2zone) 2728 0 R (example.1.2.1) 1487 0 R (example.1.2.2) 1488 0 R (example.1.2.3) 1489 0 R (example.1.2.4) 1490 0 R (example.1.2.5) 1491 0 R]
+9534 0 obj <<
+/Names [(eth2zone) 2721 0 R (example.1.2.1) 1487 0 R (example.1.2.2) 1488 0 R (example.1.2.3) 1489 0 R (example.1.2.4) 1490 0 R (example.1.2.5) 1491 0 R]
 /Limits [(eth2zone) (example.1.2.5)]
 >> endobj
-9566 0 obj <<
+9535 0 obj <<
 /Names [(example.10.2.1) 1659 0 R (example.10.3.1) 1660 0 R (example.10.3.10) 1669 0 R (example.10.3.11) 1670 0 R (example.10.3.12) 1671 0 R (example.10.3.13) 1672 0 R]
 /Limits [(example.10.2.1) (example.10.3.13)]
 >> endobj
-9567 0 obj <<
+9536 0 obj <<
 /Names [(example.10.3.14) 1673 0 R (example.10.3.15) 1674 0 R (example.10.3.16) 1675 0 R (example.10.3.17) 1676 0 R (example.10.3.18) 1677 0 R (example.10.3.2) 1661 0 R]
 /Limits [(example.10.3.14) (example.10.3.2)]
 >> endobj
-9568 0 obj <<
+9537 0 obj <<
 /Names [(example.10.3.3) 1662 0 R (example.10.3.4) 1663 0 R (example.10.3.5) 1664 0 R (example.10.3.6) 1665 0 R (example.10.3.7) 1666 0 R (example.10.3.8) 1667 0 R]
 /Limits [(example.10.3.3) (example.10.3.8)]
 >> endobj
-9569 0 obj <<
+9538 0 obj <<
 /Names [(example.10.3.9) 1668 0 R (example.12.3.1) 1678 0 R (example.12.3.2) 1679 0 R (example.12.3.3) 1680 0 R (example.12.3.4) 1698 0 R (example.12.3.5) 1699 0 R]
 /Limits [(example.10.3.9) (example.12.3.5)]
 >> endobj
-9570 0 obj <<
+9539 0 obj <<
 /Names [(example.15.3.1) 1700 0 R (example.15.3.2) 1701 0 R (example.15.4.1) 1702 0 R (example.15.4.2) 1703 0 R (example.15.4.3) 1704 0 R (example.15.5.1) 1705 0 R]
 /Limits [(example.15.3.1) (example.15.5.1)]
 >> endobj
-9571 0 obj <<
+9540 0 obj <<
 /Names [(example.15.5.2) 1706 0 R (example.15.5.3) 1707 0 R (example.15.5.4) 1708 0 R (example.15.5.5) 1709 0 R (example.15.6.1) 1710 0 R (example.15.6.2) 1711 0 R]
 /Limits [(example.15.5.2) (example.15.6.2)]
 >> endobj
-9572 0 obj <<
+9541 0 obj <<
 /Names [(example.2.3.1) 1492 0 R (example.2.3.2) 1493 0 R (example.2.3.3) 1494 0 R (example.2.3.4) 1495 0 R (example.3.2.1) 1496 0 R (example.3.2.2) 1497 0 R]
 /Limits [(example.2.3.1) (example.3.2.2)]
 >> endobj
-9573 0 obj <<
+9542 0 obj <<
 /Names [(example.3.3.1) 1498 0 R (example.3.3.10) 1507 0 R (example.3.3.11) 1508 0 R (example.3.3.12) 1542 0 R (example.3.3.13) 1543 0 R (example.3.3.2) 1499 0 R]
 /Limits [(example.3.3.1) (example.3.3.2)]
 >> endobj
-9574 0 obj <<
+9543 0 obj <<
 /Names [(example.3.3.3) 1500 0 R (example.3.3.4) 1501 0 R (example.3.3.5) 1502 0 R (example.3.3.6) 1503 0 R (example.3.3.7) 1504 0 R (example.3.3.8) 1505 0 R]
 /Limits [(example.3.3.3) (example.3.3.8)]
 >> endobj
-9575 0 obj <<
+9544 0 obj <<
 /Names [(example.3.3.9) 1506 0 R (example.4.3.1) 1544 0 R (example.4.3.10) 1553 0 R (example.4.3.11) 1554 0 R (example.4.3.12) 1555 0 R (example.4.3.13) 1556 0 R]
 /Limits [(example.3.3.9) (example.4.3.13)]
 >> endobj
-9576 0 obj <<
+9545 0 obj <<
 /Names [(example.4.3.14) 1557 0 R (example.4.3.15) 1558 0 R (example.4.3.16) 1559 0 R (example.4.3.17) 1560 0 R (example.4.3.2) 1545 0 R (example.4.3.3) 1546 0 R]
 /Limits [(example.4.3.14) (example.4.3.3)]
 >> endobj
-9577 0 obj <<
+9546 0 obj <<
 /Names [(example.4.3.4) 1547 0 R (example.4.3.5) 1548 0 R (example.4.3.6) 1549 0 R (example.4.3.7) 1550 0 R (example.4.3.8) 1551 0 R (example.4.3.9) 1552 0 R]
 /Limits [(example.4.3.4) (example.4.3.9)]
 >> endobj
-9578 0 obj <<
+9547 0 obj <<
 /Names [(example.5.4.1) 1561 0 R (example.5.4.2) 1562 0 R (example.5.4.3) 1563 0 R (example.5.4.4) 1564 0 R (example.5.4.5) 1565 0 R (example.5.4.6) 1566 0 R]
 /Limits [(example.5.4.1) (example.5.4.6)]
 >> endobj
-9579 0 obj <<
+9548 0 obj <<
 /Names [(example.5.4.7) 1567 0 R (example.5.5.1) 1568 0 R (example.5.5.2) 1569 0 R (example.5.5.3) 1570 0 R (example.5.5.4) 1597 0 R (example.5.5.5) 1598 0 R]
 /Limits [(example.5.4.7) (example.5.5.5)]
 >> endobj
-9580 0 obj <<
+9549 0 obj <<
 /Names [(example.6.3.1) 1599 0 R (example.6.3.2) 1600 0 R (example.6.3.3) 1601 0 R (example.6.3.4) 1602 0 R (example.6.3.5) 1603 0 R (example.6.3.6) 1604 0 R]
 /Limits [(example.6.3.1) (example.6.3.6)]
 >> endobj
-9581 0 obj <<
+9550 0 obj <<
 /Names [(example.6.3.7) 1605 0 R (example.7.3.1) 1606 0 R (example.7.3.10) 1615 0 R (example.7.3.11) 1616 0 R (example.7.3.12) 1617 0 R (example.7.3.13) 1618 0 R]
 /Limits [(example.6.3.7) (example.7.3.13)]
 >> endobj
-9582 0 obj <<
+9551 0 obj <<
 /Names [(example.7.3.2) 1607 0 R (example.7.3.3) 1608 0 R (example.7.3.4) 1609 0 R (example.7.3.5) 1610 0 R (example.7.3.6) 1611 0 R (example.7.3.7) 1612 0 R]
 /Limits [(example.7.3.2) (example.7.3.7)]
 >> endobj
-9583 0 obj <<
+9552 0 obj <<
 /Names [(example.7.3.8) 1613 0 R (example.7.3.9) 1614 0 R (example.9.3.1) 1652 0 R (example.9.3.2) 1653 0 R (example.9.3.3) 1654 0 R (example.9.3.4) 1655 0 R]
 /Limits [(example.7.3.8) (example.9.3.4)]
 >> endobj
-9584 0 obj <<
+9553 0 obj <<
 /Names [(example.9.3.5) 1656 0 R (example.9.3.6) 1657 0 R (example.9.3.7) 1658 0 R (figure.1.1) 1743 0 R (figure.1.2) 1744 0 R (figure.15.1) 1803 0 R]
 /Limits [(example.9.3.5) (figure.15.1)]
 >> endobj
-9585 0 obj <<
+9554 0 obj <<
 /Names [(figure.15.10) 1812 0 R (figure.15.11) 1813 0 R (figure.15.12) 1814 0 R (figure.15.2) 1804 0 R (figure.15.3) 1805 0 R (figure.15.4) 1806 0 R]
 /Limits [(figure.15.10) (figure.15.4)]
 >> endobj
-9586 0 obj <<
+9555 0 obj <<
 /Names [(figure.15.5) 1807 0 R (figure.15.6) 1808 0 R (figure.15.7) 1809 0 R (figure.15.8) 1810 0 R (figure.15.9) 1811 0 R (figure.16.1) 1816 0 R]
 /Limits [(figure.15.5) (figure.16.1)]
 >> endobj
-9587 0 obj <<
+9556 0 obj <<
 /Names [(figure.16.2) 1817 0 R (figure.16.3) 1818 0 R (figure.16.4) 1819 0 R (figure.16.5) 1820 0 R (figure.16.6) 1821 0 R (figure.16.7) 1822 0 R]
 /Limits [(figure.16.2) (figure.16.7)]
 >> endobj
-9588 0 obj <<
+9557 0 obj <<
 /Names [(figure.2.1) 1746 0 R (figure.3.1) 1748 0 R (figure.4.1) 1750 0 R (figure.5.1) 1752 0 R (figure.5.2) 1753 0 R (figure.5.3) 1754 0 R]
 /Limits [(figure.2.1) (figure.5.3)]
 >> endobj
-9589 0 obj <<
+9558 0 obj <<
 /Names [(figure.6.1) 1756 0 R (figure.6.2) 1757 0 R (figure.6.3) 1758 0 R (figure.6.4) 1759 0 R (figure.6.5) 1760 0 R (figure.6.6) 1761 0 R]
 /Limits [(figure.6.1) (figure.6.6)]
 >> endobj
-9590 0 obj <<
+9559 0 obj <<
 /Names [(figure.6.7) 1794 0 R (figure.7.1) 1796 0 R (figure.7.2) 1797 0 R (figure.7.3) 1798 0 R (figure.9.1) 1800 0 R (figure.9.2) 1801 0 R]
 /Limits [(figure.6.7) (figure.9.2)]
 >> endobj
-9591 0 obj <<
-/Names [(happy) 3020 0 R (hostannounce) 6953 0 R (id2418524) 1139 0 R (id2422434) 14 0 R (id2422718) 1964 0 R (id2422839) 4710 0 R]
-/Limits [(happy) (id2422839)]
+9560 0 obj <<
+/Names [(happy) 3013 0 R (hostannounce) 6921 0 R (id204795) 1132 0 R (id207723) 6460 0 R (id208618) 14 0 R (id208651) 1964 0 R]
+/Limits [(happy) (id208651)]
 >> endobj
-9592 0 obj <<
-/Names [(id2422921) 6162 0 R (id2445070) 1132 0 R (id2453084) 1870 0 R (id2471266) 4724 0 R (id2471322) 4731 0 R (id2471358) 4736 0 R]
-/Limits [(id2422921) (id2471358)]
+9561 0 obj <<
+/Names [(id249668) 4684 0 R (id249736) 6130 0 R (id252222) 5274 0 R (id254037) 2595 0 R (id254528) 4280 0 R (id255189) 1982 0 R]
+/Limits [(id249668) (id255189)]
 >> endobj
-9593 0 obj <<
-/Names [(id2471388) 4737 0 R (id2471450) 1982 0 R (id2471598) 3039 0 R (id2471857) 6894 0 R (id2472790) 2576 0 R (id2472806) 2577 0 R]
-/Limits [(id2471388) (id2472806)]
+9562 0 obj <<
+/Names [(id255259) 4281 0 R (id256011) 6340 0 R (id256133) 5432 0 R (id257537) 1893 0 R (id258488) 5747 0 R (id258514) 7033 0 R]
+/Limits [(id255259) (id258514)]
 >> endobj
-9594 0 obj <<
-/Names [(id2472930) 2318 0 R (id2474264) 6361 0 R (id2474458) 2558 0 R (id2474686) 4294 0 R (id2475060) 6576 0 R (id2475496) 6366 0 R]
-/Limits [(id2472930) (id2475496)]
+9563 0 obj <<
+/Names [(id259964) 5279 0 R (id260096) 1989 0 R (id260237) 6339 0 R (id260934) 3065 0 R (id260955) 3067 0 R (id263046) 5425 0 R]
+/Limits [(id259964) (id263046)]
 >> endobj
-9595 0 obj <<
-/Names [(id2476990) 6492 0 R (id2477386) 2051 0 R (id2478864) 2346 0 R (id2478886) 2347 0 R (id2481671) 3076 0 R (id2481912) 3037 0 R]
-/Limits [(id2476990) (id2481912)]
+9564 0 obj <<
+/Names [(id264963) 5280 0 R (id265131) 6845 0 R (id266658) 3449 0 R (id267082) 2323 0 R (id267143) 2324 0 R (id268482) 2407 0 R]
+/Limits [(id264963) (id268482)]
 >> endobj
-9596 0 obj <<
-/Names [(id2483393) 1996 0 R (id2484343) 2602 0 R (id2485349) 6195 0 R (id2485546) 6590 0 R (id2486508) 1989 0 R (id2487094) 5328 0 R]
-/Limits [(id2483393) (id2487094)]
+9565 0 obj <<
+/Names [(id269107) 2450 0 R (id269128) 2451 0 R (id269198) 2456 0 R (id269457) 2034 0 R (id269550) 2041 0 R (id269735) 2051 0 R]
+/Limits [(id269107) (id269735)]
 >> endobj
-9597 0 obj <<
-/Names [(id2487161) 5333 0 R (id2488364) 5500 0 R (id2490192) 7065 0 R (id2490258) 3470 0 R (id2490401) 3473 0 R (id2491049) 1975 0 R]
-/Limits [(id2487161) (id2491049)]
+9566 0 obj <<
+/Names [(id271248) 2206 0 R (id271464) 6357 0 R (id272243) 2553 0 R (id272626) 5419 0 R (id272639) 1870 0 R (id275836) 4698 0 R]
+/Limits [(id271248) (id275836)]
 >> endobj
-9598 0 obj <<
-/Names [(id2491344) 2034 0 R (id2491453) 2041 0 R (id2494260) 5785 0 R (id2494705) 1871 0 R (id2498765) 5310 0 R (id2499206) 4751 0 R]
-/Limits [(id2491344) (id2499206)]
+9567 0 obj <<
+/Names [(id276405) 6552 0 R (id276598) 6558 0 R (id277037) 4705 0 R (id277067) 4710 0 R (id277092) 4711 0 R (id277191) 3030 0 R]
+/Limits [(id276405) (id277191)]
 >> endobj
-9599 0 obj <<
-/Names [(id2500443) 5454 0 R (id2500497) 5455 0 R (id2500933) 2326 0 R (id2501719) 6865 0 R (id2503653) 1983 0 R (id2503986) 5772 0 R]
-/Limits [(id2500443) (id2503986)]
+9568 0 obj <<
+/Names [(id277217) 3032 0 R (id277428) 1996 0 R (id277759) 2571 0 R (id277771) 2572 0 R (id279222) 6544 0 R (id279678) 7158 0 R]
+/Limits [(id277217) (id279678)]
 >> endobj
-9600 0 obj <<
-/Names [(id2505628) 2563 0 R (id2506095) 3457 0 R (id2506243) 3458 0 R (id2508029) 2206 0 R (id2508123) 2215 0 R (id2508783) 3031 0 R]
-/Limits [(id2505628) (id2508783)]
+9569 0 obj <<
+/Names [(id279720) 2558 0 R (id279762) 1139 0 R (id279820) 1871 0 R (id280342) 3448 0 R (id281620) 5424 0 R (id281801) 6145 0 R]
+/Limits [(id279720) (id281801)]
 >> endobj
-9601 0 obj <<
-/Names [(id2510270) 3025 0 R (id2510760) 3072 0 R (id2510783) 3074 0 R (id2513578) 4295 0 R (id2513646) 4301 0 R (id2514096) 5449 0 R]
-/Limits [(id2510270) (id2514096)]
+9570 0 obj <<
+/Names [(id281959) 2343 0 R (id281978) 2344 0 R (id282014) 6466 0 R (id282729) 5754 0 R (id284560) 4293 0 R (id286325) 3018 0 R]
+/Limits [(id281959) (id286325)]
 >> endobj
-9602 0 obj <<
-/Names [(id2515779) 1902 0 R (id2515812) 1904 0 R (id2516196) 2615 0 R (id2516239) 2616 0 R (id2516373) 1895 0 R (id2516468) 1893 0 R]
-/Limits [(id2515779) (id2516468)]
+9571 0 obj <<
+/Names [(id287335) 6833 0 R (id290271) 4314 0 R (id290687) 4335 0 R (id290703) 4336 0 R (id291209) 6329 0 R (id291665) 1975 0 R]
+/Limits [(id287335) (id291665)]
 >> endobj
-9603 0 obj <<
-/Names [(id2517401) 3364 0 R (id2517462) 3369 0 R (id2518219) 6377 0 R (id2518238) 6378 0 R (id2518365) 6371 0 R (id2518398) 6372 0 R]
-/Limits [(id2517401) (id2518398)]
+9572 0 obj <<
+/Names [(id292114) 6334 0 R (id293978) 4287 0 R (id295644) 3024 0 R (id297829) 2809 0 R (id298338) 2846 0 R (id298394) 2852 0 R]
+/Limits [(id292114) (id298394)]
 >> endobj
-9604 0 obj <<
-/Names [(id2518620) 4328 0 R (id2519152) 4454 0 R (id2519256) 4455 0 R (id2520846) 5779 0 R (id2520989) 5375 0 R (id2521329) 5383 0 R]
-/Limits [(id2518620) (id2521329)]
+9573 0 obj <<
+/Names [(id298782) 3069 0 R (id299296) 3133 0 R (id299309) 3138 0 R (id300118) 1895 0 R (id301742) 2315 0 R (id301759) 2316 0 R]
+/Limits [(id298782) (id301759)]
 >> endobj
-9605 0 obj <<
-/Names [(id2521494) 5402 0 R (id2521606) 5407 0 R (id2521618) 5408 0 R (id2521641) 5409 0 R (id2521723) 5416 0 R (id2521824) 4318 0 R]
-/Limits [(id2521494) (id2521824)]
+9574 0 obj <<
+/Names [(id302045) 6852 0 R (id302857) 2215 0 R (id303976) 2290 0 R (id304799) 2608 0 R (id304835) 2609 0 R (id305647) 2653 0 R]
+/Limits [(id302045) (id305647)]
 >> endobj
-9606 0 obj <<
-/Names [(id2522948) 5344 0 R (id2523044) 5345 0 R (id2523115) 5351 0 R (id2524115) 4750 0 R (id2525908) 6584 0 R (id2526211) 6177 0 R]
-/Limits [(id2522948) (id2526211)]
+9575 0 obj <<
+/Names [(id307930) 1983 0 R (id308464) 1945 0 R (id310174) 3355 0 R (id310228) 3360 0 R (id310633) 3461 0 R (id310766) 3464 0 R]
+/Limits [(id307930) (id310766)]
 >> endobj
-9607 0 obj <<
-/Names [(id2526361) 3498 0 R (id2527419) 2293 0 R (id2528535) 2412 0 R (id2529216) 2455 0 R (id2529244) 2456 0 R (id2529324) 2461 0 R]
-/Limits [(id2526361) (id2529324)]
+9576 0 obj <<
+/Names [(id311180) 3489 0 R (id311650) 3514 0 R (id311925) 3522 0 R (id312013) 3523 0 R (id312067) 3530 0 R (id312233) 3538 0 R]
+/Limits [(id311180) (id312233)]
 >> endobj
-9608 0 obj <<
-/Names [(id2530170) 4349 0 R (id2530190) 4350 0 R (id2532313) 6498 0 R (id2532878) 4307 0 R (id2532918) 4312 0 R (id2534034) 5304 0 R]
-/Limits [(id2530170) (id2534034)]
+9577 0 obj <<
+/Names [(id312286) 3544 0 R (id312375) 3554 0 R (id312471) 3561 0 R (id314584) 5740 0 R (id314817) 4429 0 R (id316115) 4298 0 R]
+/Limits [(id312286) (id316115)]
 >> endobj
-9609 0 obj <<
-/Names [(id2534132) 5309 0 R (id2534204) 7190 0 R (id2534800) 5462 0 R (id2534945) 2319 0 R (id2535572) 1945 0 R (id2537632) 2660 0 R]
-/Limits [(id2534132) (id2537632)]
+9578 0 obj <<
+/Names [(id316194) 4304 0 R (id317027) 4428 0 R (id317965) 1902 0 R (id318109) 1904 0 R (id318393) 5321 0 R (id318736) 5345 0 R]
+/Limits [(id316194) (id318736)]
 >> endobj
-9610 0 obj <<
-/Names [(id2541204) 2816 0 R (id2541764) 2853 0 R (id2541829) 2859 0 R (id2542646) 3142 0 R (id2542660) 3147 0 R (id2544755) 1911 0 R]
-/Limits [(id2541204) (id2544755)]
+9579 0 obj <<
+/Names [(id319067) 5353 0 R (id319258) 1911 0 R (id320373) 5450 0 R (id320394) 5459 0 R (id320518) 5468 0 R (id321149) 5298 0 R]
+/Limits [(id319067) (id321149)]
 >> endobj
-9611 0 obj <<
-/Names [(id2545799) 2327 0 R (id2547400) 3525 0 R (id2547672) 3533 0 R (id2547757) 3534 0 R (id2547812) 3541 0 R (id2547990) 3549 0 R]
-/Limits [(id2545799) (id2547990)]
+9580 0 obj <<
+/Names [(id321209) 5303 0 R (id321455) 5314 0 R (id321541) 5315 0 R (id321632) 3577 0 R (id321691) 3584 0 R (id321706) 3585 0 R]
+/Limits [(id321209) (id321706)]
 >> endobj
-9612 0 obj <<
-/Names [(id2548048) 3555 0 R (id2548159) 3565 0 R (id2548254) 3572 0 R (id2548527) 3588 0 R (id2548594) 3595 0 R (id2548611) 3596 0 R]
-/Limits [(id2548048) (id2548611)]
+9581 0 obj <<
+/Names [(id321718) 3586 0 R (id321876) 3622 0 R (id323461) 3713 0 R (id323666) 3724 0 R (id323962) 3759 0 R (id326626) 3915 0 R]
+/Limits [(id321718) (id326626)]
 >> endobj
-9613 0 obj <<
-/Names [(id2548626) 3597 0 R (id2548796) 3633 0 R (id2550535) 3727 0 R (id2550762) 3738 0 R (id2551118) 3773 0 R (id2554360) 3929 0 R]
-/Limits [(id2548626) (id2554360)]
+9582 0 obj <<
+/Names [(id326641) 3916 0 R (id326719) 3922 0 R (id326926) 3928 0 R (id327016) 3934 0 R (id327122) 3948 0 R (id327748) 3975 0 R]
+/Limits [(id326641) (id327748)]
 >> endobj
-9614 0 obj <<
-/Names [(id2554382) 3930 0 R (id2554478) 3936 0 R (id2554730) 3942 0 R (id2554845) 3948 0 R (id2554983) 3962 0 R (id2555746) 3989 0 R]
-/Limits [(id2554382) (id2555746)]
+9583 0 obj <<
+/Names [(id328010) 4006 0 R (id328170) 4007 0 R (id328593) 4029 0 R (id328619) 4035 0 R (id328646) 4036 0 R (id328733) 4041 0 R]
+/Limits [(id328010) (id328733)]
 >> endobj
-9615 0 obj <<
-/Names [(id2556072) 4020 0 R (id2556262) 4021 0 R (id2556775) 4043 0 R (id2556812) 4049 0 R (id2556847) 4050 0 R (id2556959) 4055 0 R]
-/Limits [(id2556072) (id2556959)]
+9584 0 obj <<
+/Names [(id329224) 4724 0 R (id329308) 4725 0 R (id331416) 5768 0 R (id331425) 5769 0 R (id331500) 5774 0 R (id331882) 5372 0 R]
+/Limits [(id329224) (id331882)]
 >> endobj
-9616 0 obj <<
-/Names [(id2557667) 5801 0 R (id2557743) 5806 0 R (id2558198) 5417 0 R (id2558211) 5422 0 R (id2558418) 5424 0 R (id2558621) 5435 0 R]
-/Limits [(id2557667) (id2558621)]
+9585 0 obj <<
+/Names [(id331978) 5377 0 R (id331988) 5378 0 R (id332007) 5379 0 R (id332083) 5386 0 R (id332165) 5387 0 R (id332176) 5392 0 R]
+/Limits [(id331978) (id332176)]
 >> endobj
-9617 0 obj <<
-/Names [(id2558968) 5482 0 R (id2558996) 5491 0 R (id2562264) 4931 0 R (id2562728) 4947 0 R (id2563241) 4977 0 R (id2563462) 4979 0 R]
-/Limits [(id2558968) (id2563462)]
+9586 0 obj <<
+/Names [(id332370) 5394 0 R (id332551) 5405 0 R (id332777) 5753 0 R (id334467) 4901 0 R (id334901) 4917 0 R (id335322) 4947 0 R]
+/Limits [(id332370) (id335322)]
 >> endobj
-9618 0 obj <<
-/Names [(id2563492) 4989 0 R (id2563516) 4990 0 R (id2563728) 5005 0 R (id2563849) 5012 0 R (id2564086) 5025 0 R (id2564143) 5032 0 R]
-/Limits [(id2563492) (id2564143)]
+9587 0 obj <<
+/Names [(id335505) 4949 0 R (id335529) 4959 0 R (id335548) 4960 0 R (id335712) 4975 0 R (id335812) 4982 0 R (id335993) 4995 0 R]
+/Limits [(id335505) (id335993)]
 >> endobj
-9619 0 obj <<
-/Names [(id2565328) 6527 0 R (id2565716) 6877 0 R (id2566151) 6510 0 R (id2566179) 6511 0 R (id2566191) 6512 0 R (id2566608) 6190 0 R]
-/Limits [(id2565328) (id2566608)]
+9588 0 obj <<
+/Names [(id336037) 5002 0 R (id338431) 5571 0 R (id338764) 5598 0 R (id338801) 5599 0 R (id339073) 6393 0 R (id339255) 6417 0 R]
+/Limits [(id336037) (id339255)]
 >> endobj
-9620 0 obj <<
-/Names [(id2566853) 6389 0 R (id2568217) 5603 0 R (id2568568) 5630 0 R (id2568606) 5631 0 R (id2569413) 5786 0 R (id2569606) 5800 0 R]
-/Limits [(id2566853) (id2569606)]
+9589 0 obj <<
+/Names [(id339285) 6418 0 R (id339637) 6440 0 R (id339695) 6445 0 R (id339975) 6345 0 R (id339991) 6346 0 R (id343039) 6158 0 R]
+/Limits [(id339285) (id343039)]
 >> endobj
-9621 0 obj <<
-/Names [(id2569837) 6201 0 R (id2570036) 6400 0 R (id2570344) 6518 0 R (id2570520) 6526 0 R (id2572723) 6543 0 R (id2572801) 6544 0 R]
-/Limits [(id2569837) (id2572801)]
+9590 0 obj <<
+/Names [(id343054) 6163 0 R (id343444) 6169 0 R (id344690) 6195 0 R (id344981) 6519 0 R (id345024) 6520 0 R (id345162) 6525 0 R]
+/Limits [(id343054) (id345162)]
 >> endobj
-9622 0 obj <<
-/Names [(id2572825) 6545 0 R (id2572876) 6550 0 R (id2572933) 6551 0 R (id2572980) 6552 0 R (id2573134) 6557 0 R (id2573233) 6562 0 R]
-/Limits [(id2572825) (id2573233)]
+9591 0 obj <<
+/Names [(id345241) 6530 0 R (id345433) 6609 0 R (id346153) 6862 0 R (id346475) 6857 0 R (id348119) 6478 0 R (id348145) 6479 0 R]
+/Limits [(id345241) (id348145)]
 >> endobj
-9623 0 obj <<
-/Names [(id2573514) 6655 0 R (id2573790) 6666 0 R (id2573802) 6667 0 R (id2573851) 6668 0 R (id2574326) 6949 0 R (id2574799) 6915 0 R]
-/Limits [(id2573514) (id2574799)]
+9592 0 obj <<
+/Names [(id348156) 6480 0 R (id348267) 6209 0 R (id348575) 6222 0 R (id348696) 6231 0 R (id348951) 6245 0 R (id349084) 6250 0 R]
+/Limits [(id348156) (id349084)]
 >> endobj
-9624 0 obj <<
-/Names [(id2575442) 6425 0 R (id2575632) 6449 0 R (id2575664) 6450 0 R (id2577095) 6227 0 R (id2577411) 6241 0 R (id2577731) 6254 0 R]
-/Limits [(id2575442) (id2577731)]
+9593 0 obj <<
+/Names [(id349427) 6269 0 R (id349474) 6270 0 R (id349728) 6286 0 R (id349876) 6290 0 R (id350057) 6304 0 R (id350174) 6309 0 R]
+/Limits [(id349427) (id350174)]
 >> endobj
-9625 0 obj <<
-/Names [(id2577860) 6263 0 R (id2578142) 6277 0 R (id2578292) 6282 0 R (id2578674) 6301 0 R (id2578726) 6302 0 R (id2578996) 6318 0 R]
-/Limits [(id2577860) (id2578996)]
+9594 0 obj <<
+/Names [(id350749) 6486 0 R (id350915) 6494 0 R (id351008) 6495 0 R (id351301) 6511 0 R (id351372) 6512 0 R (id351390) 6513 0 R]
+/Limits [(id350749) (id351390)]
 >> endobj
-9626 0 obj <<
-/Names [(id2579155) 6322 0 R (id2579351) 6336 0 R (id2579479) 6341 0 R (id2580049) 6472 0 R (id2580106) 6477 0 R (id2582111) 6884 0 R]
-/Limits [(id2579155) (id2582111)]
+9595 0 obj <<
+/Names [(id351437) 6518 0 R (id351561) 6368 0 R (id352291) 6623 0 R (id352574) 6634 0 R (id352585) 6635 0 R (id352629) 6636 0 R]
+/Limits [(id351437) (id352629)]
 >> endobj
-9627 0 obj <<
-/Names [(id2582234) 6889 0 R (id2582677) 6641 0 R (id2585413) 6670 0 R (id2585467) 6681 0 R (id2585941) 6711 0 R (id2586716) 6769 0 R]
-/Limits [(id2582234) (id2586716)]
+9596 0 obj <<
+/Names [(id352708) 6638 0 R (id352765) 6649 0 R (id353196) 6679 0 R (id353980) 6737 0 R (id354721) 6883 0 R (id357100) 6773 0 R]
+/Limits [(id352708) (id357100)]
 >> endobj
-9628 0 obj <<
-/Names [(id2587135) 6805 0 R (id2587273) 6812 0 R (id2587352) 6813 0 R (id2589072) 6951 0 R (id2589293) 6980 0 R (id2589483) 6992 0 R]
-/Limits [(id2587135) (id2589483)]
+9597 0 obj <<
+/Names [(id357230) 6780 0 R (id357301) 6781 0 R (id357663) 6917 0 R (id357994) 6919 0 R (id358217) 6948 0 R (id358410) 6960 0 R]
+/Limits [(id357230) (id358410)]
 >> endobj
-9629 0 obj <<
-/Names [(id2589937) 7029 0 R (id2589967) 7035 0 R (id2590076) 7041 0 R (imcidealx) 6780 0 R (initGrps) 2386 0 R (kerberos) 6172 0 R]
-/Limits [(id2589937) (kerberos)]
+9598 0 obj <<
+/Names [(id358862) 6997 0 R (id358891) 7003 0 R (id358994) 7009 0 R (imcidealx) 6748 0 R (initGrps) 2381 0 R (kerberos) 6140 0 R]
+/Limits [(id358862) (kerberos)]
 >> endobj
-9630 0 obj <<
-/Names [(lam-config) 6742 0 R (lam-group) 6755 0 R (lam-group-mem) 6756 0 R (lam-host) 6763 0 R (lam-login) 6741 0 R (lam-user) 6743 0 R]
+9599 0 obj <<
+/Names [(lam-config) 6710 0 R (lam-group) 6723 0 R (lam-group-mem) 6724 0 R (lam-host) 6731 0 R (lam-login) 6709 0 R (lam-user) 6711 0 R]
 /Limits [(lam-config) (lam-user)]
 >> endobj
-9631 0 obj <<
-/Names [(lamcfg) 6728 0 R (lamconf) 6740 0 R (ldapsetup) 3651 0 R (loopback) 2722 0 R (lstlisting.1.-1) 2007 0 R (lstlisting.1.-2) 2095 0 R]
+9600 0 obj <<
+/Names [(lamcfg) 6696 0 R (lamconf) 6708 0 R (ldapsetup) 3637 0 R (loopback) 2715 0 R (lstlisting.1.-1) 2007 0 R (lstlisting.1.-2) 2095 0 R]
 /Limits [(lamcfg) (lstlisting.1.-2)]
 >> endobj
-9632 0 obj <<
-/Names [(lstlisting.1.-3) 2132 0 R (lstlisting.1.-4) 2265 0 R (lstlisting.10.-36) 5913 0 R (lstlisting.10.-37) 5957 0 R (lstlisting.10.-38) 5997 0 R (lstlisting.10.-39) 6037 0 R]
+9601 0 obj <<
+/Names [(lstlisting.1.-3) 2132 0 R (lstlisting.1.-4) 2262 0 R (lstlisting.10.-36) 5881 0 R (lstlisting.10.-37) 5925 0 R (lstlisting.10.-38) 5965 0 R (lstlisting.10.-39) 6005 0 R]
 /Limits [(lstlisting.1.-3) (lstlisting.10.-39)]
 >> endobj
-9633 0 obj <<
-/Names [(lstlisting.10.-40) 6075 0 R (lstlisting.12.-41) 6431 0 R (lstlisting.2.-5) 2489 0 R (lstlisting.2.-6) 2517 0 R (lstlisting.3.-7) 2882 0 R (lstlisting.3.-8) 2930 0 R]
+9602 0 obj <<
+/Names [(lstlisting.10.-40) 6043 0 R (lstlisting.12.-41) 6399 0 R (lstlisting.2.-5) 2484 0 R (lstlisting.2.-6) 2512 0 R (lstlisting.3.-7) 2875 0 R (lstlisting.3.-8) 2923 0 R]
 /Limits [(lstlisting.10.-40) (lstlisting.3.-8)]
 >> endobj
-9634 0 obj <<
-/Names [(lstlisting.3.-9) 2962 0 R (lstlisting.4.-10) 3199 0 R (lstlisting.4.-11) 3233 0 R (lstlisting.4.-12) 3264 0 R (lstlisting.4.-13) 3303 0 R (lstlisting.4.-14) 3309 0 R]
+9603 0 obj <<
+/Names [(lstlisting.3.-9) 2955 0 R (lstlisting.4.-10) 3190 0 R (lstlisting.4.-11) 3224 0 R (lstlisting.4.-12) 3255 0 R (lstlisting.4.-13) 3294 0 R (lstlisting.4.-14) 3300 0 R]
 /Limits [(lstlisting.3.-9) (lstlisting.4.-14)]
 >> endobj
-9635 0 obj <<
-/Names [(lstlisting.4.-15) 3315 0 R (lstlisting.5.-16) 4096 0 R (lstlisting.5.-17) 4128 0 R (lstlisting.5.-18) 4151 0 R (lstlisting.5.-19) 4189 0 R (lstlisting.5.-20) 4227 0 R]
+9604 0 obj <<
+/Names [(lstlisting.4.-15) 3306 0 R (lstlisting.5.-16) 4082 0 R (lstlisting.5.-17) 4114 0 R (lstlisting.5.-18) 4137 0 R (lstlisting.5.-19) 4175 0 R (lstlisting.5.-20) 4213 0 R]
 /Limits [(lstlisting.4.-15) (lstlisting.5.-20)]
 >> endobj
-9636 0 obj <<
-/Names [(lstlisting.5.-21) 4255 0 R (lstlisting.6.-22) 4493 0 R (lstlisting.6.-23) 4540 0 R (lstlisting.6.-24) 4571 0 R (lstlisting.6.-25) 4602 0 R (lstlisting.6.-26) 4649 0 R]
+9605 0 obj <<
+/Names [(lstlisting.5.-21) 4241 0 R (lstlisting.6.-22) 4467 0 R (lstlisting.6.-23) 4514 0 R (lstlisting.6.-24) 4545 0 R (lstlisting.6.-25) 4576 0 R (lstlisting.6.-26) 4623 0 R]
 /Limits [(lstlisting.5.-21) (lstlisting.6.-26)]
 >> endobj
-9637 0 obj <<
-/Names [(lstlisting.7.-27) 5054 0 R (lstlisting.7.-28) 5110 0 R (lstlisting.7.-29) 5153 0 R (lstlisting.7.-30) 5195 0 R (lstlisting.7.-31) 5236 0 R (lstlisting.7.-32) 5254 0 R]
+9606 0 obj <<
+/Names [(lstlisting.7.-27) 5024 0 R (lstlisting.7.-28) 5080 0 R (lstlisting.7.-29) 5123 0 R (lstlisting.7.-30) 5165 0 R (lstlisting.7.-31) 5206 0 R (lstlisting.7.-32) 5224 0 R]
 /Limits [(lstlisting.7.-27) (lstlisting.7.-32)]
 >> endobj
-9638 0 obj <<
-/Names [(lstlisting.7.-33) 5276 0 R (lstlisting.9.-34) 5654 0 R (lstlisting.9.-35) 5701 0 R (lstnumber.-10.1) 3200 0 R (lstnumber.-10.10) 3209 0 R (lstnumber.-10.11) 3210 0 R]
+9607 0 obj <<
+/Names [(lstlisting.7.-33) 5246 0 R (lstlisting.9.-34) 5622 0 R (lstlisting.9.-35) 5669 0 R (lstnumber.-10.1) 3191 0 R (lstnumber.-10.10) 3200 0 R (lstnumber.-10.11) 3201 0 R]
 /Limits [(lstlisting.7.-33) (lstnumber.-10.11)]
 >> endobj
-9639 0 obj <<
-/Names [(lstnumber.-10.12) 3211 0 R (lstnumber.-10.13) 3212 0 R (lstnumber.-10.14) 3213 0 R (lstnumber.-10.15) 3214 0 R (lstnumber.-10.16) 3215 0 R (lstnumber.-10.17) 3216 0 R]
+9608 0 obj <<
+/Names [(lstnumber.-10.12) 3202 0 R (lstnumber.-10.13) 3203 0 R (lstnumber.-10.14) 3204 0 R (lstnumber.-10.15) 3205 0 R (lstnumber.-10.16) 3206 0 R (lstnumber.-10.17) 3207 0 R]
 /Limits [(lstnumber.-10.12) (lstnumber.-10.17)]
 >> endobj
-9640 0 obj <<
-/Names [(lstnumber.-10.18) 3217 0 R (lstnumber.-10.19) 3218 0 R (lstnumber.-10.2) 3201 0 R (lstnumber.-10.20) 3219 0 R (lstnumber.-10.21) 3220 0 R (lstnumber.-10.22) 3221 0 R]
+9609 0 obj <<
+/Names [(lstnumber.-10.18) 3208 0 R (lstnumber.-10.19) 3209 0 R (lstnumber.-10.2) 3192 0 R (lstnumber.-10.20) 3210 0 R (lstnumber.-10.21) 3211 0 R (lstnumber.-10.22) 3212 0 R]
 /Limits [(lstnumber.-10.18) (lstnumber.-10.22)]
 >> endobj
-9641 0 obj <<
-/Names [(lstnumber.-10.23) 3222 0 R (lstnumber.-10.24) 3223 0 R (lstnumber.-10.25) 3224 0 R (lstnumber.-10.26) 3225 0 R (lstnumber.-10.27) 3226 0 R (lstnumber.-10.28) 3227 0 R]
+9610 0 obj <<
+/Names [(lstnumber.-10.23) 3213 0 R (lstnumber.-10.24) 3214 0 R (lstnumber.-10.25) 3215 0 R (lstnumber.-10.26) 3216 0 R (lstnumber.-10.27) 3217 0 R (lstnumber.-10.28) 3218 0 R]
 /Limits [(lstnumber.-10.23) (lstnumber.-10.28)]
 >> endobj
-9642 0 obj <<
-/Names [(lstnumber.-10.29) 3228 0 R (lstnumber.-10.3) 3202 0 R (lstnumber.-10.4) 3203 0 R (lstnumber.-10.5) 3204 0 R (lstnumber.-10.6) 3205 0 R (lstnumber.-10.7) 3206 0 R]
+9611 0 obj <<
+/Names [(lstnumber.-10.29) 3219 0 R (lstnumber.-10.3) 3193 0 R (lstnumber.-10.4) 3194 0 R (lstnumber.-10.5) 3195 0 R (lstnumber.-10.6) 3196 0 R (lstnumber.-10.7) 3197 0 R]
 /Limits [(lstnumber.-10.29) (lstnumber.-10.7)]
 >> endobj
-9643 0 obj <<
-/Names [(lstnumber.-10.8) 3207 0 R (lstnumber.-10.9) 3208 0 R (lstnumber.-11.1) 3234 0 R (lstnumber.-11.10) 3243 0 R (lstnumber.-11.11) 3244 0 R (lstnumber.-11.12) 3245 0 R]
+9612 0 obj <<
+/Names [(lstnumber.-10.8) 3198 0 R (lstnumber.-10.9) 3199 0 R (lstnumber.-11.1) 3225 0 R (lstnumber.-11.10) 3234 0 R (lstnumber.-11.11) 3235 0 R (lstnumber.-11.12) 3236 0 R]
 /Limits [(lstnumber.-10.8) (lstnumber.-11.12)]
 >> endobj
-9644 0 obj <<
-/Names [(lstnumber.-11.13) 3246 0 R (lstnumber.-11.14) 3247 0 R (lstnumber.-11.15) 3248 0 R (lstnumber.-11.16) 3249 0 R (lstnumber.-11.17) 3250 0 R (lstnumber.-11.18) 3251 0 R]
+9613 0 obj <<
+/Names [(lstnumber.-11.13) 3237 0 R (lstnumber.-11.14) 3238 0 R (lstnumber.-11.15) 3239 0 R (lstnumber.-11.16) 3240 0 R (lstnumber.-11.17) 3241 0 R (lstnumber.-11.18) 3242 0 R]
 /Limits [(lstnumber.-11.13) (lstnumber.-11.18)]
 >> endobj
-9645 0 obj <<
-/Names [(lstnumber.-11.19) 3252 0 R (lstnumber.-11.2) 3235 0 R (lstnumber.-11.20) 3253 0 R (lstnumber.-11.21) 3254 0 R (lstnumber.-11.22) 3255 0 R (lstnumber.-11.23) 3256 0 R]
+9614 0 obj <<
+/Names [(lstnumber.-11.19) 3243 0 R (lstnumber.-11.2) 3226 0 R (lstnumber.-11.20) 3244 0 R (lstnumber.-11.21) 3245 0 R (lstnumber.-11.22) 3246 0 R (lstnumber.-11.23) 3247 0 R]
 /Limits [(lstnumber.-11.19) (lstnumber.-11.23)]
 >> endobj
-9646 0 obj <<
-/Names [(lstnumber.-11.24) 3257 0 R (lstnumber.-11.25) 3258 0 R (lstnumber.-11.26) 3259 0 R (lstnumber.-11.3) 3236 0 R (lstnumber.-11.4) 3237 0 R (lstnumber.-11.5) 3238 0 R]
+9615 0 obj <<
+/Names [(lstnumber.-11.24) 3248 0 R (lstnumber.-11.25) 3249 0 R (lstnumber.-11.26) 3250 0 R (lstnumber.-11.3) 3227 0 R (lstnumber.-11.4) 3228 0 R (lstnumber.-11.5) 3229 0 R]
 /Limits [(lstnumber.-11.24) (lstnumber.-11.5)]
 >> endobj
-9647 0 obj <<
-/Names [(lstnumber.-11.6) 3239 0 R (lstnumber.-11.7) 3240 0 R (lstnumber.-11.8) 3241 0 R (lstnumber.-11.9) 3242 0 R (lstnumber.-12.1) 3265 0 R (lstnumber.-12.10) 3274 0 R]
+9616 0 obj <<
+/Names [(lstnumber.-11.6) 3230 0 R (lstnumber.-11.7) 3231 0 R (lstnumber.-11.8) 3232 0 R (lstnumber.-11.9) 3233 0 R (lstnumber.-12.1) 3256 0 R (lstnumber.-12.10) 3265 0 R]
 /Limits [(lstnumber.-11.6) (lstnumber.-12.10)]
 >> endobj
-9648 0 obj <<
-/Names [(lstnumber.-12.11) 3275 0 R (lstnumber.-12.12) 3276 0 R (lstnumber.-12.13) 3277 0 R (lstnumber.-12.14) 3278 0 R (lstnumber.-12.15) 3279 0 R (lstnumber.-12.16) 3280 0 R]
+9617 0 obj <<
+/Names [(lstnumber.-12.11) 3266 0 R (lstnumber.-12.12) 3267 0 R (lstnumber.-12.13) 3268 0 R (lstnumber.-12.14) 3269 0 R (lstnumber.-12.15) 3270 0 R (lstnumber.-12.16) 3271 0 R]
 /Limits [(lstnumber.-12.11) (lstnumber.-12.16)]
 >> endobj
-9649 0 obj <<
-/Names [(lstnumber.-12.17) 3281 0 R (lstnumber.-12.18) 3282 0 R (lstnumber.-12.19) 3283 0 R (lstnumber.-12.2) 3266 0 R (lstnumber.-12.20) 3284 0 R (lstnumber.-12.21) 3285 0 R]
+9618 0 obj <<
+/Names [(lstnumber.-12.17) 3272 0 R (lstnumber.-12.18) 3273 0 R (lstnumber.-12.19) 3274 0 R (lstnumber.-12.2) 3257 0 R (lstnumber.-12.20) 3275 0 R (lstnumber.-12.21) 3276 0 R]
 /Limits [(lstnumber.-12.17) (lstnumber.-12.21)]
 >> endobj
-9650 0 obj <<
-/Names [(lstnumber.-12.22) 3286 0 R (lstnumber.-12.23) 3287 0 R (lstnumber.-12.24) 3288 0 R (lstnumber.-12.25) 3289 0 R (lstnumber.-12.26) 3290 0 R (lstnumber.-12.27) 3291 0 R]
+9619 0 obj <<
+/Names [(lstnumber.-12.22) 3277 0 R (lstnumber.-12.23) 3278 0 R (lstnumber.-12.24) 3279 0 R (lstnumber.-12.25) 3280 0 R (lstnumber.-12.26) 3281 0 R (lstnumber.-12.27) 3282 0 R]
 /Limits [(lstnumber.-12.22) (lstnumber.-12.27)]
 >> endobj
-9651 0 obj <<
-/Names [(lstnumber.-12.28) 3292 0 R (lstnumber.-12.29) 3293 0 R (lstnumber.-12.3) 3267 0 R (lstnumber.-12.30) 3294 0 R (lstnumber.-12.31) 3295 0 R (lstnumber.-12.32) 3296 0 R]
+9620 0 obj <<
+/Names [(lstnumber.-12.28) 3283 0 R (lstnumber.-12.29) 3284 0 R (lstnumber.-12.3) 3258 0 R (lstnumber.-12.30) 3285 0 R (lstnumber.-12.31) 3286 0 R (lstnumber.-12.32) 3287 0 R]
 /Limits [(lstnumber.-12.28) (lstnumber.-12.32)]
 >> endobj
-9652 0 obj <<
-/Names [(lstnumber.-12.33) 3297 0 R (lstnumber.-12.4) 3268 0 R (lstnumber.-12.5) 3269 0 R (lstnumber.-12.6) 3270 0 R (lstnumber.-12.7) 3271 0 R (lstnumber.-12.8) 3272 0 R]
+9621 0 obj <<
+/Names [(lstnumber.-12.33) 3288 0 R (lstnumber.-12.4) 3259 0 R (lstnumber.-12.5) 3260 0 R (lstnumber.-12.6) 3261 0 R (lstnumber.-12.7) 3262 0 R (lstnumber.-12.8) 3263 0 R]
 /Limits [(lstnumber.-12.33) (lstnumber.-12.8)]
 >> endobj
-9653 0 obj <<
-/Names [(lstnumber.-12.9) 3273 0 R (lstnumber.-13.1) 3304 0 R (lstnumber.-13.2) 3305 0 R (lstnumber.-13.3) 3306 0 R (lstnumber.-13.4) 3307 0 R (lstnumber.-13.5) 3308 0 R]
+9622 0 obj <<
+/Names [(lstnumber.-12.9) 3264 0 R (lstnumber.-13.1) 3295 0 R (lstnumber.-13.2) 3296 0 R (lstnumber.-13.3) 3297 0 R (lstnumber.-13.4) 3298 0 R (lstnumber.-13.5) 3299 0 R]
 /Limits [(lstnumber.-12.9) (lstnumber.-13.5)]
 >> endobj
-9654 0 obj <<
-/Names [(lstnumber.-14.1) 3310 0 R (lstnumber.-14.2) 3311 0 R (lstnumber.-14.3) 3312 0 R (lstnumber.-14.4) 3313 0 R (lstnumber.-14.5) 3314 0 R (lstnumber.-15.1) 3316 0 R]
+9623 0 obj <<
+/Names [(lstnumber.-14.1) 3301 0 R (lstnumber.-14.2) 3302 0 R (lstnumber.-14.3) 3303 0 R (lstnumber.-14.4) 3304 0 R (lstnumber.-14.5) 3305 0 R (lstnumber.-15.1) 3307 0 R]
 /Limits [(lstnumber.-14.1) (lstnumber.-15.1)]
 >> endobj
-9655 0 obj <<
-/Names [(lstnumber.-15.2) 3317 0 R (lstnumber.-15.3) 3318 0 R (lstnumber.-15.4) 3319 0 R (lstnumber.-15.5) 3320 0 R (lstnumber.-15.6) 3321 0 R (lstnumber.-15.7) 3322 0 R]
+9624 0 obj <<
+/Names [(lstnumber.-15.2) 3308 0 R (lstnumber.-15.3) 3309 0 R (lstnumber.-15.4) 3310 0 R (lstnumber.-15.5) 3311 0 R (lstnumber.-15.6) 3312 0 R (lstnumber.-15.7) 3313 0 R]
 /Limits [(lstnumber.-15.2) (lstnumber.-15.7)]
 >> endobj
-9656 0 obj <<
-/Names [(lstnumber.-15.8) 3323 0 R (lstnumber.-15.9) 3324 0 R (lstnumber.-16.1) 4097 0 R (lstnumber.-16.10) 4106 0 R (lstnumber.-16.11) 4107 0 R (lstnumber.-16.12) 4108 0 R]
+9625 0 obj <<
+/Names [(lstnumber.-15.8) 3314 0 R (lstnumber.-15.9) 3315 0 R (lstnumber.-16.1) 4083 0 R (lstnumber.-16.10) 4092 0 R (lstnumber.-16.11) 4093 0 R (lstnumber.-16.12) 4094 0 R]
 /Limits [(lstnumber.-15.8) (lstnumber.-16.12)]
 >> endobj
-9657 0 obj <<
-/Names [(lstnumber.-16.13) 4109 0 R (lstnumber.-16.14) 4110 0 R (lstnumber.-16.15) 4111 0 R (lstnumber.-16.16) 4112 0 R (lstnumber.-16.17) 4113 0 R (lstnumber.-16.18) 4114 0 R]
+9626 0 obj <<
+/Names [(lstnumber.-16.13) 4095 0 R (lstnumber.-16.14) 4096 0 R (lstnumber.-16.15) 4097 0 R (lstnumber.-16.16) 4098 0 R (lstnumber.-16.17) 4099 0 R (lstnumber.-16.18) 4100 0 R]
 /Limits [(lstnumber.-16.13) (lstnumber.-16.18)]
 >> endobj
-9658 0 obj <<
-/Names [(lstnumber.-16.19) 4115 0 R (lstnumber.-16.2) 4098 0 R (lstnumber.-16.20) 4116 0 R (lstnumber.-16.21) 4117 0 R (lstnumber.-16.22) 4118 0 R (lstnumber.-16.23) 4119 0 R]
+9627 0 obj <<
+/Names [(lstnumber.-16.19) 4101 0 R (lstnumber.-16.2) 4084 0 R (lstnumber.-16.20) 4102 0 R (lstnumber.-16.21) 4103 0 R (lstnumber.-16.22) 4104 0 R (lstnumber.-16.23) 4105 0 R]
 /Limits [(lstnumber.-16.19) (lstnumber.-16.23)]
 >> endobj
-9659 0 obj <<
-/Names [(lstnumber.-16.24) 4120 0 R (lstnumber.-16.25) 4121 0 R (lstnumber.-16.26) 4122 0 R (lstnumber.-16.27) 4123 0 R (lstnumber.-16.3) 4099 0 R (lstnumber.-16.4) 4100 0 R]
+9628 0 obj <<
+/Names [(lstnumber.-16.24) 4106 0 R (lstnumber.-16.25) 4107 0 R (lstnumber.-16.26) 4108 0 R (lstnumber.-16.27) 4109 0 R (lstnumber.-16.3) 4085 0 R (lstnumber.-16.4) 4086 0 R]
 /Limits [(lstnumber.-16.24) (lstnumber.-16.4)]
 >> endobj
-9660 0 obj <<
-/Names [(lstnumber.-16.5) 4101 0 R (lstnumber.-16.6) 4102 0 R (lstnumber.-16.7) 4103 0 R (lstnumber.-16.8) 4104 0 R (lstnumber.-16.9) 4105 0 R (lstnumber.-17.1) 4129 0 R]
+9629 0 obj <<
+/Names [(lstnumber.-16.5) 4087 0 R (lstnumber.-16.6) 4088 0 R (lstnumber.-16.7) 4089 0 R (lstnumber.-16.8) 4090 0 R (lstnumber.-16.9) 4091 0 R (lstnumber.-17.1) 4115 0 R]
 /Limits [(lstnumber.-16.5) (lstnumber.-17.1)]
 >> endobj
-9661 0 obj <<
-/Names [(lstnumber.-17.10) 4138 0 R (lstnumber.-17.11) 4139 0 R (lstnumber.-17.12) 4140 0 R (lstnumber.-17.13) 4141 0 R (lstnumber.-17.14) 4142 0 R (lstnumber.-17.15) 4143 0 R]
+9630 0 obj <<
+/Names [(lstnumber.-17.10) 4124 0 R (lstnumber.-17.11) 4125 0 R (lstnumber.-17.12) 4126 0 R (lstnumber.-17.13) 4127 0 R (lstnumber.-17.14) 4128 0 R (lstnumber.-17.15) 4129 0 R]
 /Limits [(lstnumber.-17.10) (lstnumber.-17.15)]
 >> endobj
-9662 0 obj <<
-/Names [(lstnumber.-17.16) 4144 0 R (lstnumber.-17.17) 4145 0 R (lstnumber.-17.18) 4146 0 R (lstnumber.-17.2) 4130 0 R (lstnumber.-17.3) 4131 0 R (lstnumber.-17.4) 4132 0 R]
+9631 0 obj <<
+/Names [(lstnumber.-17.16) 4130 0 R (lstnumber.-17.17) 4131 0 R (lstnumber.-17.18) 4132 0 R (lstnumber.-17.2) 4116 0 R (lstnumber.-17.3) 4117 0 R (lstnumber.-17.4) 4118 0 R]
 /Limits [(lstnumber.-17.16) (lstnumber.-17.4)]
 >> endobj
-9663 0 obj <<
-/Names [(lstnumber.-17.5) 4133 0 R (lstnumber.-17.6) 4134 0 R (lstnumber.-17.7) 4135 0 R (lstnumber.-17.8) 4136 0 R (lstnumber.-17.9) 4137 0 R (lstnumber.-18.1) 4152 0 R]
+9632 0 obj <<
+/Names [(lstnumber.-17.5) 4119 0 R (lstnumber.-17.6) 4120 0 R (lstnumber.-17.7) 4121 0 R (lstnumber.-17.8) 4122 0 R (lstnumber.-17.9) 4123 0 R (lstnumber.-18.1) 4138 0 R]
 /Limits [(lstnumber.-17.5) (lstnumber.-18.1)]
 >> endobj
-9664 0 obj <<
-/Names [(lstnumber.-18.10) 4161 0 R (lstnumber.-18.11) 4162 0 R (lstnumber.-18.12) 4163 0 R (lstnumber.-18.13) 4164 0 R (lstnumber.-18.14) 4165 0 R (lstnumber.-18.15) 4166 0 R]
+9633 0 obj <<
+/Names [(lstnumber.-18.10) 4147 0 R (lstnumber.-18.11) 4148 0 R (lstnumber.-18.12) 4149 0 R (lstnumber.-18.13) 4150 0 R (lstnumber.-18.14) 4151 0 R (lstnumber.-18.15) 4152 0 R]
 /Limits [(lstnumber.-18.10) (lstnumber.-18.15)]
 >> endobj
-9665 0 obj <<
-/Names [(lstnumber.-18.16) 4167 0 R (lstnumber.-18.17) 4168 0 R (lstnumber.-18.18) 4169 0 R (lstnumber.-18.19) 4170 0 R (lstnumber.-18.2) 4153 0 R (lstnumber.-18.20) 4171 0 R]
+9634 0 obj <<
+/Names [(lstnumber.-18.16) 4153 0 R (lstnumber.-18.17) 4154 0 R (lstnumber.-18.18) 4155 0 R (lstnumber.-18.19) 4156 0 R (lstnumber.-18.2) 4139 0 R (lstnumber.-18.20) 4157 0 R]
 /Limits [(lstnumber.-18.16) (lstnumber.-18.20)]
 >> endobj
-9666 0 obj <<
-/Names [(lstnumber.-18.21) 4172 0 R (lstnumber.-18.22) 4173 0 R (lstnumber.-18.23) 4174 0 R (lstnumber.-18.24) 4175 0 R (lstnumber.-18.25) 4176 0 R (lstnumber.-18.26) 4177 0 R]
+9635 0 obj <<
+/Names [(lstnumber.-18.21) 4158 0 R (lstnumber.-18.22) 4159 0 R (lstnumber.-18.23) 4160 0 R (lstnumber.-18.24) 4161 0 R (lstnumber.-18.25) 4162 0 R (lstnumber.-18.26) 4163 0 R]
 /Limits [(lstnumber.-18.21) (lstnumber.-18.26)]
 >> endobj
-9667 0 obj <<
-/Names [(lstnumber.-18.27) 4178 0 R (lstnumber.-18.28) 4179 0 R (lstnumber.-18.29) 4180 0 R (lstnumber.-18.3) 4154 0 R (lstnumber.-18.30) 4181 0 R (lstnumber.-18.31) 4182 0 R]
+9636 0 obj <<
+/Names [(lstnumber.-18.27) 4164 0 R (lstnumber.-18.28) 4165 0 R (lstnumber.-18.29) 4166 0 R (lstnumber.-18.3) 4140 0 R (lstnumber.-18.30) 4167 0 R (lstnumber.-18.31) 4168 0 R]
 /Limits [(lstnumber.-18.27) (lstnumber.-18.31)]
 >> endobj
-9668 0 obj <<
-/Names [(lstnumber.-18.32) 4183 0 R (lstnumber.-18.33) 4184 0 R (lstnumber.-18.4) 4155 0 R (lstnumber.-18.5) 4156 0 R (lstnumber.-18.6) 4157 0 R (lstnumber.-18.7) 4158 0 R]
+9637 0 obj <<
+/Names [(lstnumber.-18.32) 4169 0 R (lstnumber.-18.33) 4170 0 R (lstnumber.-18.4) 4141 0 R (lstnumber.-18.5) 4142 0 R (lstnumber.-18.6) 4143 0 R (lstnumber.-18.7) 4144 0 R]
 /Limits [(lstnumber.-18.32) (lstnumber.-18.7)]
 >> endobj
-9669 0 obj <<
-/Names [(lstnumber.-18.8) 4159 0 R (lstnumber.-18.9) 4160 0 R (lstnumber.-19.1) 4190 0 R (lstnumber.-19.10) 4199 0 R (lstnumber.-19.11) 4200 0 R (lstnumber.-19.12) 4201 0 R]
+9638 0 obj <<
+/Names [(lstnumber.-18.8) 4145 0 R (lstnumber.-18.9) 4146 0 R (lstnumber.-19.1) 4176 0 R (lstnumber.-19.10) 4185 0 R (lstnumber.-19.11) 4186 0 R (lstnumber.-19.12) 4187 0 R]
 /Limits [(lstnumber.-18.8) (lstnumber.-19.12)]
 >> endobj
-9670 0 obj <<
-/Names [(lstnumber.-19.13) 4202 0 R (lstnumber.-19.14) 4203 0 R (lstnumber.-19.15) 4204 0 R (lstnumber.-19.16) 4205 0 R (lstnumber.-19.17) 4206 0 R (lstnumber.-19.18) 4207 0 R]
+9639 0 obj <<
+/Names [(lstnumber.-19.13) 4188 0 R (lstnumber.-19.14) 4189 0 R (lstnumber.-19.15) 4190 0 R (lstnumber.-19.16) 4191 0 R (lstnumber.-19.17) 4192 0 R (lstnumber.-19.18) 4193 0 R]
 /Limits [(lstnumber.-19.13) (lstnumber.-19.18)]
 >> endobj
-9671 0 obj <<
-/Names [(lstnumber.-19.19) 4208 0 R (lstnumber.-19.2) 4191 0 R (lstnumber.-19.20) 4209 0 R (lstnumber.-19.21) 4210 0 R (lstnumber.-19.22) 4211 0 R (lstnumber.-19.23) 4212 0 R]
+9640 0 obj <<
+/Names [(lstnumber.-19.19) 4194 0 R (lstnumber.-19.2) 4177 0 R (lstnumber.-19.20) 4195 0 R (lstnumber.-19.21) 4196 0 R (lstnumber.-19.22) 4197 0 R (lstnumber.-19.23) 4198 0 R]
 /Limits [(lstnumber.-19.19) (lstnumber.-19.23)]
 >> endobj
-9672 0 obj <<
-/Names [(lstnumber.-19.24) 4213 0 R (lstnumber.-19.25) 4214 0 R (lstnumber.-19.26) 4215 0 R (lstnumber.-19.27) 4216 0 R (lstnumber.-19.28) 4217 0 R (lstnumber.-19.29) 4218 0 R]
+9641 0 obj <<
+/Names [(lstnumber.-19.24) 4199 0 R (lstnumber.-19.25) 4200 0 R (lstnumber.-19.26) 4201 0 R (lstnumber.-19.27) 4202 0 R (lstnumber.-19.28) 4203 0 R (lstnumber.-19.29) 4204 0 R]
 /Limits [(lstnumber.-19.24) (lstnumber.-19.29)]
 >> endobj
-9673 0 obj <<
-/Names [(lstnumber.-19.3) 4192 0 R (lstnumber.-19.30) 4219 0 R (lstnumber.-19.31) 4220 0 R (lstnumber.-19.32) 4221 0 R (lstnumber.-19.33) 4222 0 R (lstnumber.-19.4) 4193 0 R]
+9642 0 obj <<
+/Names [(lstnumber.-19.3) 4178 0 R (lstnumber.-19.30) 4205 0 R (lstnumber.-19.31) 4206 0 R (lstnumber.-19.32) 4207 0 R (lstnumber.-19.33) 4208 0 R (lstnumber.-19.4) 4179 0 R]
 /Limits [(lstnumber.-19.3) (lstnumber.-19.4)]
 >> endobj
-9674 0 obj <<
-/Names [(lstnumber.-19.5) 4194 0 R (lstnumber.-19.6) 4195 0 R (lstnumber.-19.7) 4196 0 R (lstnumber.-19.8) 4197 0 R (lstnumber.-19.9) 4198 0 R (lstnumber.-2.1) 2096 0 R]
+9643 0 obj <<
+/Names [(lstnumber.-19.5) 4180 0 R (lstnumber.-19.6) 4181 0 R (lstnumber.-19.7) 4182 0 R (lstnumber.-19.8) 4183 0 R (lstnumber.-19.9) 4184 0 R (lstnumber.-2.1) 2096 0 R]
 /Limits [(lstnumber.-19.5) (lstnumber.-2.1)]
 >> endobj
-9675 0 obj <<
+9644 0 obj <<
 /Names [(lstnumber.-2.10) 2105 0 R (lstnumber.-2.11) 2106 0 R (lstnumber.-2.12) 2107 0 R (lstnumber.-2.13) 2108 0 R (lstnumber.-2.14) 2109 0 R (lstnumber.-2.15) 2110 0 R]
 /Limits [(lstnumber.-2.10) (lstnumber.-2.15)]
 >> endobj
-9676 0 obj <<
+9645 0 obj <<
 /Names [(lstnumber.-2.16) 2111 0 R (lstnumber.-2.17) 2112 0 R (lstnumber.-2.18) 2113 0 R (lstnumber.-2.19) 2114 0 R (lstnumber.-2.2) 2097 0 R (lstnumber.-2.20) 2115 0 R]
 /Limits [(lstnumber.-2.16) (lstnumber.-2.20)]
 >> endobj
-9677 0 obj <<
+9646 0 obj <<
 /Names [(lstnumber.-2.21) 2116 0 R (lstnumber.-2.22) 2117 0 R (lstnumber.-2.23) 2118 0 R (lstnumber.-2.24) 2119 0 R (lstnumber.-2.25) 2120 0 R (lstnumber.-2.26) 2121 0 R]
 /Limits [(lstnumber.-2.21) (lstnumber.-2.26)]
 >> endobj
-9678 0 obj <<
+9647 0 obj <<
 /Names [(lstnumber.-2.27) 2122 0 R (lstnumber.-2.28) 2123 0 R (lstnumber.-2.29) 2124 0 R (lstnumber.-2.3) 2098 0 R (lstnumber.-2.30) 2125 0 R (lstnumber.-2.31) 2126 0 R]
 /Limits [(lstnumber.-2.27) (lstnumber.-2.31)]
 >> endobj
-9679 0 obj <<
+9648 0 obj <<
 /Names [(lstnumber.-2.4) 2099 0 R (lstnumber.-2.5) 2100 0 R (lstnumber.-2.6) 2101 0 R (lstnumber.-2.7) 2102 0 R (lstnumber.-2.8) 2103 0 R (lstnumber.-2.9) 2104 0 R]
 /Limits [(lstnumber.-2.4) (lstnumber.-2.9)]
 >> endobj
-9680 0 obj <<
-/Names [(lstnumber.-20.1) 4228 0 R (lstnumber.-20.10) 4237 0 R (lstnumber.-20.11) 4238 0 R (lstnumber.-20.12) 4239 0 R (lstnumber.-20.13) 4240 0 R (lstnumber.-20.14) 4241 0 R]
+9649 0 obj <<
+/Names [(lstnumber.-20.1) 4214 0 R (lstnumber.-20.10) 4223 0 R (lstnumber.-20.11) 4224 0 R (lstnumber.-20.12) 4225 0 R (lstnumber.-20.13) 4226 0 R (lstnumber.-20.14) 4227 0 R]
 /Limits [(lstnumber.-20.1) (lstnumber.-20.14)]
 >> endobj
-9681 0 obj <<
-/Names [(lstnumber.-20.15) 4242 0 R (lstnumber.-20.16) 4243 0 R (lstnumber.-20.17) 4244 0 R (lstnumber.-20.18) 4245 0 R (lstnumber.-20.19) 4246 0 R (lstnumber.-20.2) 4229 0 R]
+9650 0 obj <<
+/Names [(lstnumber.-20.15) 4228 0 R (lstnumber.-20.16) 4229 0 R (lstnumber.-20.17) 4230 0 R (lstnumber.-20.18) 4231 0 R (lstnumber.-20.19) 4232 0 R (lstnumber.-20.2) 4215 0 R]
 /Limits [(lstnumber.-20.15) (lstnumber.-20.2)]
 >> endobj
-9682 0 obj <<
-/Names [(lstnumber.-20.20) 4247 0 R (lstnumber.-20.21) 4248 0 R (lstnumber.-20.22) 4249 0 R (lstnumber.-20.23) 4250 0 R (lstnumber.-20.3) 4230 0 R (lstnumber.-20.4) 4231 0 R]
+9651 0 obj <<
+/Names [(lstnumber.-20.20) 4233 0 R (lstnumber.-20.21) 4234 0 R (lstnumber.-20.22) 4235 0 R (lstnumber.-20.23) 4236 0 R (lstnumber.-20.3) 4216 0 R (lstnumber.-20.4) 4217 0 R]
 /Limits [(lstnumber.-20.20) (lstnumber.-20.4)]
 >> endobj
-9683 0 obj <<
-/Names [(lstnumber.-20.5) 4232 0 R (lstnumber.-20.6) 4233 0 R (lstnumber.-20.7) 4234 0 R (lstnumber.-20.8) 4235 0 R (lstnumber.-20.9) 4236 0 R (lstnumber.-21.1) 4256 0 R]
+9652 0 obj <<
+/Names [(lstnumber.-20.5) 4218 0 R (lstnumber.-20.6) 4219 0 R (lstnumber.-20.7) 4220 0 R (lstnumber.-20.8) 4221 0 R (lstnumber.-20.9) 4222 0 R (lstnumber.-21.1) 4242 0 R]
 /Limits [(lstnumber.-20.5) (lstnumber.-21.1)]
 >> endobj
-9684 0 obj <<
-/Names [(lstnumber.-21.10) 4265 0 R (lstnumber.-21.11) 4266 0 R (lstnumber.-21.12) 4267 0 R (lstnumber.-21.13) 4268 0 R (lstnumber.-21.14) 4269 0 R (lstnumber.-21.15) 4270 0 R]
+9653 0 obj <<
+/Names [(lstnumber.-21.10) 4251 0 R (lstnumber.-21.11) 4252 0 R (lstnumber.-21.12) 4253 0 R (lstnumber.-21.13) 4254 0 R (lstnumber.-21.14) 4255 0 R (lstnumber.-21.15) 4256 0 R]
 /Limits [(lstnumber.-21.10) (lstnumber.-21.15)]
 >> endobj
-9685 0 obj <<
-/Names [(lstnumber.-21.16) 4271 0 R (lstnumber.-21.17) 4272 0 R (lstnumber.-21.18) 4273 0 R (lstnumber.-21.19) 4274 0 R (lstnumber.-21.2) 4257 0 R (lstnumber.-21.20) 4275 0 R]
+9654 0 obj <<
+/Names [(lstnumber.-21.16) 4257 0 R (lstnumber.-21.17) 4258 0 R (lstnumber.-21.18) 4259 0 R (lstnumber.-21.19) 4260 0 R (lstnumber.-21.2) 4243 0 R (lstnumber.-21.20) 4261 0 R]
 /Limits [(lstnumber.-21.16) (lstnumber.-21.20)]
 >> endobj
-9686 0 obj <<
-/Names [(lstnumber.-21.21) 4276 0 R (lstnumber.-21.22) 4277 0 R (lstnumber.-21.23) 4278 0 R (lstnumber.-21.24) 4279 0 R (lstnumber.-21.25) 4280 0 R (lstnumber.-21.26) 4281 0 R]
+9655 0 obj <<
+/Names [(lstnumber.-21.21) 4262 0 R (lstnumber.-21.22) 4263 0 R (lstnumber.-21.23) 4264 0 R (lstnumber.-21.24) 4265 0 R (lstnumber.-21.25) 4266 0 R (lstnumber.-21.26) 4267 0 R]
 /Limits [(lstnumber.-21.21) (lstnumber.-21.26)]
 >> endobj
-9687 0 obj <<
-/Names [(lstnumber.-21.27) 4282 0 R (lstnumber.-21.3) 4258 0 R (lstnumber.-21.4) 4259 0 R (lstnumber.-21.5) 4260 0 R (lstnumber.-21.6) 4261 0 R (lstnumber.-21.7) 4262 0 R]
+9656 0 obj <<
+/Names [(lstnumber.-21.27) 4268 0 R (lstnumber.-21.3) 4244 0 R (lstnumber.-21.4) 4245 0 R (lstnumber.-21.5) 4246 0 R (lstnumber.-21.6) 4247 0 R (lstnumber.-21.7) 4248 0 R]
 /Limits [(lstnumber.-21.27) (lstnumber.-21.7)]
 >> endobj
-9688 0 obj <<
-/Names [(lstnumber.-21.8) 4263 0 R (lstnumber.-21.9) 4264 0 R (lstnumber.-22.1) 4494 0 R (lstnumber.-22.10) 4503 0 R (lstnumber.-22.11) 4504 0 R (lstnumber.-22.12) 4505 0 R]
+9657 0 obj <<
+/Names [(lstnumber.-21.8) 4249 0 R (lstnumber.-21.9) 4250 0 R (lstnumber.-22.1) 4468 0 R (lstnumber.-22.10) 4477 0 R (lstnumber.-22.11) 4478 0 R (lstnumber.-22.12) 4479 0 R]
 /Limits [(lstnumber.-21.8) (lstnumber.-22.12)]
 >> endobj
-9689 0 obj <<
-/Names [(lstnumber.-22.13) 4506 0 R (lstnumber.-22.14) 4507 0 R (lstnumber.-22.15) 4508 0 R (lstnumber.-22.16) 4509 0 R (lstnumber.-22.17) 4510 0 R (lstnumber.-22.18) 4511 0 R]
+9658 0 obj <<
+/Names [(lstnumber.-22.13) 4480 0 R (lstnumber.-22.14) 4481 0 R (lstnumber.-22.15) 4482 0 R (lstnumber.-22.16) 4483 0 R (lstnumber.-22.17) 4484 0 R (lstnumber.-22.18) 4485 0 R]
 /Limits [(lstnumber.-22.13) (lstnumber.-22.18)]
 >> endobj
-9690 0 obj <<
-/Names [(lstnumber.-22.19) 4512 0 R (lstnumber.-22.2) 4495 0 R (lstnumber.-22.20) 4513 0 R (lstnumber.-22.21) 4514 0 R (lstnumber.-22.22) 4515 0 R (lstnumber.-22.23) 4516 0 R]
+9659 0 obj <<
+/Names [(lstnumber.-22.19) 4486 0 R (lstnumber.-22.2) 4469 0 R (lstnumber.-22.20) 4487 0 R (lstnumber.-22.21) 4488 0 R (lstnumber.-22.22) 4489 0 R (lstnumber.-22.23) 4490 0 R]
 /Limits [(lstnumber.-22.19) (lstnumber.-22.23)]
 >> endobj
-9691 0 obj <<
-/Names [(lstnumber.-22.24) 4517 0 R (lstnumber.-22.25) 4518 0 R (lstnumber.-22.26) 4519 0 R (lstnumber.-22.27) 4520 0 R (lstnumber.-22.28) 4521 0 R (lstnumber.-22.29) 4522 0 R]
+9660 0 obj <<
+/Names [(lstnumber.-22.24) 4491 0 R (lstnumber.-22.25) 4492 0 R (lstnumber.-22.26) 4493 0 R (lstnumber.-22.27) 4494 0 R (lstnumber.-22.28) 4495 0 R (lstnumber.-22.29) 4496 0 R]
 /Limits [(lstnumber.-22.24) (lstnumber.-22.29)]
 >> endobj
-9692 0 obj <<
-/Names [(lstnumber.-22.3) 4496 0 R (lstnumber.-22.30) 4523 0 R (lstnumber.-22.31) 4524 0 R (lstnumber.-22.32) 4525 0 R (lstnumber.-22.33) 4526 0 R (lstnumber.-22.34) 4527 0 R]
+9661 0 obj <<
+/Names [(lstnumber.-22.3) 4470 0 R (lstnumber.-22.30) 4497 0 R (lstnumber.-22.31) 4498 0 R (lstnumber.-22.32) 4499 0 R (lstnumber.-22.33) 4500 0 R (lstnumber.-22.34) 4501 0 R]
 /Limits [(lstnumber.-22.3) (lstnumber.-22.34)]
 >> endobj
-9693 0 obj <<
-/Names [(lstnumber.-22.35) 4528 0 R (lstnumber.-22.36) 4529 0 R (lstnumber.-22.37) 4530 0 R (lstnumber.-22.38) 4531 0 R (lstnumber.-22.39) 4532 0 R (lstnumber.-22.4) 4497 0 R]
+9662 0 obj <<
+/Names [(lstnumber.-22.35) 4502 0 R (lstnumber.-22.36) 4503 0 R (lstnumber.-22.37) 4504 0 R (lstnumber.-22.38) 4505 0 R (lstnumber.-22.39) 4506 0 R (lstnumber.-22.4) 4471 0 R]
 /Limits [(lstnumber.-22.35) (lstnumber.-22.4)]
 >> endobj
-9694 0 obj <<
-/Names [(lstnumber.-22.40) 4533 0 R (lstnumber.-22.41) 4534 0 R (lstnumber.-22.5) 4498 0 R (lstnumber.-22.6) 4499 0 R (lstnumber.-22.7) 4500 0 R (lstnumber.-22.8) 4501 0 R]
+9663 0 obj <<
+/Names [(lstnumber.-22.40) 4507 0 R (lstnumber.-22.41) 4508 0 R (lstnumber.-22.5) 4472 0 R (lstnumber.-22.6) 4473 0 R (lstnumber.-22.7) 4474 0 R (lstnumber.-22.8) 4475 0 R]
 /Limits [(lstnumber.-22.40) (lstnumber.-22.8)]
 >> endobj
-9695 0 obj <<
-/Names [(lstnumber.-22.9) 4502 0 R (lstnumber.-23.1) 4541 0 R (lstnumber.-23.10) 4550 0 R (lstnumber.-23.11) 4551 0 R (lstnumber.-23.12) 4552 0 R (lstnumber.-23.13) 4553 0 R]
+9664 0 obj <<
+/Names [(lstnumber.-22.9) 4476 0 R (lstnumber.-23.1) 4515 0 R (lstnumber.-23.10) 4524 0 R (lstnumber.-23.11) 4525 0 R (lstnumber.-23.12) 4526 0 R (lstnumber.-23.13) 4527 0 R]
 /Limits [(lstnumber.-22.9) (lstnumber.-23.13)]
 >> endobj
-9696 0 obj <<
-/Names [(lstnumber.-23.14) 4554 0 R (lstnumber.-23.15) 4555 0 R (lstnumber.-23.16) 4556 0 R (lstnumber.-23.17) 4557 0 R (lstnumber.-23.18) 4558 0 R (lstnumber.-23.19) 4559 0 R]
+9665 0 obj <<
+/Names [(lstnumber.-23.14) 4528 0 R (lstnumber.-23.15) 4529 0 R (lstnumber.-23.16) 4530 0 R (lstnumber.-23.17) 4531 0 R (lstnumber.-23.18) 4532 0 R (lstnumber.-23.19) 4533 0 R]
 /Limits [(lstnumber.-23.14) (lstnumber.-23.19)]
 >> endobj
-9697 0 obj <<
-/Names [(lstnumber.-23.2) 4542 0 R (lstnumber.-23.20) 4560 0 R (lstnumber.-23.21) 4561 0 R (lstnumber.-23.22) 4562 0 R (lstnumber.-23.23) 4563 0 R (lstnumber.-23.24) 4564 0 R]
+9666 0 obj <<
+/Names [(lstnumber.-23.2) 4516 0 R (lstnumber.-23.20) 4534 0 R (lstnumber.-23.21) 4535 0 R (lstnumber.-23.22) 4536 0 R (lstnumber.-23.23) 4537 0 R (lstnumber.-23.24) 4538 0 R]
 /Limits [(lstnumber.-23.2) (lstnumber.-23.24)]
 >> endobj
-9698 0 obj <<
-/Names [(lstnumber.-23.25) 4565 0 R (lstnumber.-23.3) 4543 0 R (lstnumber.-23.4) 4544 0 R (lstnumber.-23.5) 4545 0 R (lstnumber.-23.6) 4546 0 R (lstnumber.-23.7) 4547 0 R]
+9667 0 obj <<
+/Names [(lstnumber.-23.25) 4539 0 R (lstnumber.-23.3) 4517 0 R (lstnumber.-23.4) 4518 0 R (lstnumber.-23.5) 4519 0 R (lstnumber.-23.6) 4520 0 R (lstnumber.-23.7) 4521 0 R]
 /Limits [(lstnumber.-23.25) (lstnumber.-23.7)]
 >> endobj
-9699 0 obj <<
-/Names [(lstnumber.-23.8) 4548 0 R (lstnumber.-23.9) 4549 0 R (lstnumber.-24.1) 4572 0 R (lstnumber.-24.10) 4581 0 R (lstnumber.-24.11) 4582 0 R (lstnumber.-24.12) 4583 0 R]
+9668 0 obj <<
+/Names [(lstnumber.-23.8) 4522 0 R (lstnumber.-23.9) 4523 0 R (lstnumber.-24.1) 4546 0 R (lstnumber.-24.10) 4555 0 R (lstnumber.-24.11) 4556 0 R (lstnumber.-24.12) 4557 0 R]
 /Limits [(lstnumber.-23.8) (lstnumber.-24.12)]
 >> endobj
-9700 0 obj <<
-/Names [(lstnumber.-24.13) 4584 0 R (lstnumber.-24.14) 4585 0 R (lstnumber.-24.15) 4586 0 R (lstnumber.-24.16) 4587 0 R (lstnumber.-24.17) 4588 0 R (lstnumber.-24.18) 4589 0 R]
+9669 0 obj <<
+/Names [(lstnumber.-24.13) 4558 0 R (lstnumber.-24.14) 4559 0 R (lstnumber.-24.15) 4560 0 R (lstnumber.-24.16) 4561 0 R (lstnumber.-24.17) 4562 0 R (lstnumber.-24.18) 4563 0 R]
 /Limits [(lstnumber.-24.13) (lstnumber.-24.18)]
 >> endobj
-9701 0 obj <<
-/Names [(lstnumber.-24.19) 4590 0 R (lstnumber.-24.2) 4573 0 R (lstnumber.-24.20) 4591 0 R (lstnumber.-24.21) 4592 0 R (lstnumber.-24.22) 4593 0 R (lstnumber.-24.23) 4594 0 R]
+9670 0 obj <<
+/Names [(lstnumber.-24.19) 4564 0 R (lstnumber.-24.2) 4547 0 R (lstnumber.-24.20) 4565 0 R (lstnumber.-24.21) 4566 0 R (lstnumber.-24.22) 4567 0 R (lstnumber.-24.23) 4568 0 R]
 /Limits [(lstnumber.-24.19) (lstnumber.-24.23)]
 >> endobj
-9702 0 obj <<
-/Names [(lstnumber.-24.24) 4595 0 R (lstnumber.-24.25) 4596 0 R (lstnumber.-24.26) 4597 0 R (lstnumber.-24.3) 4574 0 R (lstnumber.-24.4) 4575 0 R (lstnumber.-24.5) 4576 0 R]
+9671 0 obj <<
+/Names [(lstnumber.-24.24) 4569 0 R (lstnumber.-24.25) 4570 0 R (lstnumber.-24.26) 4571 0 R (lstnumber.-24.3) 4548 0 R (lstnumber.-24.4) 4549 0 R (lstnumber.-24.5) 4550 0 R]
 /Limits [(lstnumber.-24.24) (lstnumber.-24.5)]
 >> endobj
-9703 0 obj <<
-/Names [(lstnumber.-24.6) 4577 0 R (lstnumber.-24.7) 4578 0 R (lstnumber.-24.8) 4579 0 R (lstnumber.-24.9) 4580 0 R (lstnumber.-25.1) 4603 0 R (lstnumber.-25.10) 4612 0 R]
+9672 0 obj <<
+/Names [(lstnumber.-24.6) 4551 0 R (lstnumber.-24.7) 4552 0 R (lstnumber.-24.8) 4553 0 R (lstnumber.-24.9) 4554 0 R (lstnumber.-25.1) 4577 0 R (lstnumber.-25.10) 4586 0 R]
 /Limits [(lstnumber.-24.6) (lstnumber.-25.10)]
 >> endobj
-9704 0 obj <<
-/Names [(lstnumber.-25.11) 4613 0 R (lstnumber.-25.12) 4614 0 R (lstnumber.-25.13) 4615 0 R (lstnumber.-25.14) 4616 0 R (lstnumber.-25.15) 4617 0 R (lstnumber.-25.16) 4618 0 R]
+9673 0 obj <<
+/Names [(lstnumber.-25.11) 4587 0 R (lstnumber.-25.12) 4588 0 R (lstnumber.-25.13) 4589 0 R (lstnumber.-25.14) 4590 0 R (lstnumber.-25.15) 4591 0 R (lstnumber.-25.16) 4592 0 R]
 /Limits [(lstnumber.-25.11) (lstnumber.-25.16)]
 >> endobj
-9705 0 obj <<
-/Names [(lstnumber.-25.17) 4619 0 R (lstnumber.-25.18) 4620 0 R (lstnumber.-25.19) 4621 0 R (lstnumber.-25.2) 4604 0 R (lstnumber.-25.20) 4622 0 R (lstnumber.-25.21) 4623 0 R]
+9674 0 obj <<
+/Names [(lstnumber.-25.17) 4593 0 R (lstnumber.-25.18) 4594 0 R (lstnumber.-25.19) 4595 0 R (lstnumber.-25.2) 4578 0 R (lstnumber.-25.20) 4596 0 R (lstnumber.-25.21) 4597 0 R]
 /Limits [(lstnumber.-25.17) (lstnumber.-25.21)]
 >> endobj
-9706 0 obj <<
-/Names [(lstnumber.-25.22) 4624 0 R (lstnumber.-25.23) 4625 0 R (lstnumber.-25.24) 4626 0 R (lstnumber.-25.25) 4627 0 R (lstnumber.-25.26) 4628 0 R (lstnumber.-25.27) 4629 0 R]
+9675 0 obj <<
+/Names [(lstnumber.-25.22) 4598 0 R (lstnumber.-25.23) 4599 0 R (lstnumber.-25.24) 4600 0 R (lstnumber.-25.25) 4601 0 R (lstnumber.-25.26) 4602 0 R (lstnumber.-25.27) 4603 0 R]
 /Limits [(lstnumber.-25.22) (lstnumber.-25.27)]
 >> endobj
-9707 0 obj <<
-/Names [(lstnumber.-25.28) 4630 0 R (lstnumber.-25.29) 4631 0 R (lstnumber.-25.3) 4605 0 R (lstnumber.-25.30) 4632 0 R (lstnumber.-25.31) 4633 0 R (lstnumber.-25.32) 4634 0 R]
+9676 0 obj <<
+/Names [(lstnumber.-25.28) 4604 0 R (lstnumber.-25.29) 4605 0 R (lstnumber.-25.3) 4579 0 R (lstnumber.-25.30) 4606 0 R (lstnumber.-25.31) 4607 0 R (lstnumber.-25.32) 4608 0 R]
 /Limits [(lstnumber.-25.28) (lstnumber.-25.32)]
 >> endobj
-9708 0 obj <<
-/Names [(lstnumber.-25.33) 4635 0 R (lstnumber.-25.34) 4636 0 R (lstnumber.-25.35) 4637 0 R (lstnumber.-25.36) 4638 0 R (lstnumber.-25.37) 4639 0 R (lstnumber.-25.38) 4640 0 R]
+9677 0 obj <<
+/Names [(lstnumber.-25.33) 4609 0 R (lstnumber.-25.34) 4610 0 R (lstnumber.-25.35) 4611 0 R (lstnumber.-25.36) 4612 0 R (lstnumber.-25.37) 4613 0 R (lstnumber.-25.38) 4614 0 R]
 /Limits [(lstnumber.-25.33) (lstnumber.-25.38)]
 >> endobj
-9709 0 obj <<
-/Names [(lstnumber.-25.39) 4641 0 R (lstnumber.-25.4) 4606 0 R (lstnumber.-25.40) 4642 0 R (lstnumber.-25.41) 4643 0 R (lstnumber.-25.5) 4607 0 R (lstnumber.-25.6) 4608 0 R]
+9678 0 obj <<
+/Names [(lstnumber.-25.39) 4615 0 R (lstnumber.-25.4) 4580 0 R (lstnumber.-25.40) 4616 0 R (lstnumber.-25.41) 4617 0 R (lstnumber.-25.5) 4581 0 R (lstnumber.-25.6) 4582 0 R]
 /Limits [(lstnumber.-25.39) (lstnumber.-25.6)]
 >> endobj
-9710 0 obj <<
-/Names [(lstnumber.-25.7) 4609 0 R (lstnumber.-25.8) 4610 0 R (lstnumber.-25.9) 4611 0 R (lstnumber.-26.1) 4650 0 R (lstnumber.-26.10) 4659 0 R (lstnumber.-26.11) 4660 0 R]
+9679 0 obj <<
+/Names [(lstnumber.-25.7) 4583 0 R (lstnumber.-25.8) 4584 0 R (lstnumber.-25.9) 4585 0 R (lstnumber.-26.1) 4624 0 R (lstnumber.-26.10) 4633 0 R (lstnumber.-26.11) 4634 0 R]
 /Limits [(lstnumber.-25.7) (lstnumber.-26.11)]
 >> endobj
-9711 0 obj <<
-/Names [(lstnumber.-26.12) 4661 0 R (lstnumber.-26.13) 4662 0 R (lstnumber.-26.14) 4663 0 R (lstnumber.-26.15) 4664 0 R (lstnumber.-26.16) 4665 0 R (lstnumber.-26.17) 4666 0 R]
+9680 0 obj <<
+/Names [(lstnumber.-26.12) 4635 0 R (lstnumber.-26.13) 4636 0 R (lstnumber.-26.14) 4637 0 R (lstnumber.-26.15) 4638 0 R (lstnumber.-26.16) 4639 0 R (lstnumber.-26.17) 4640 0 R]
 /Limits [(lstnumber.-26.12) (lstnumber.-26.17)]
 >> endobj
-9712 0 obj <<
-/Names [(lstnumber.-26.18) 4667 0 R (lstnumber.-26.19) 4668 0 R (lstnumber.-26.2) 4651 0 R (lstnumber.-26.20) 4669 0 R (lstnumber.-26.21) 4670 0 R (lstnumber.-26.22) 4671 0 R]
+9681 0 obj <<
+/Names [(lstnumber.-26.18) 4641 0 R (lstnumber.-26.19) 4642 0 R (lstnumber.-26.2) 4625 0 R (lstnumber.-26.20) 4643 0 R (lstnumber.-26.21) 4644 0 R (lstnumber.-26.22) 4645 0 R]
 /Limits [(lstnumber.-26.18) (lstnumber.-26.22)]
 >> endobj
-9713 0 obj <<
-/Names [(lstnumber.-26.23) 4672 0 R (lstnumber.-26.24) 4673 0 R (lstnumber.-26.25) 4674 0 R (lstnumber.-26.26) 4675 0 R (lstnumber.-26.27) 4676 0 R (lstnumber.-26.28) 4677 0 R]
+9682 0 obj <<
+/Names [(lstnumber.-26.23) 4646 0 R (lstnumber.-26.24) 4647 0 R (lstnumber.-26.25) 4648 0 R (lstnumber.-26.26) 4649 0 R (lstnumber.-26.27) 4650 0 R (lstnumber.-26.28) 4651 0 R]
 /Limits [(lstnumber.-26.23) (lstnumber.-26.28)]
 >> endobj
-9714 0 obj <<
-/Names [(lstnumber.-26.29) 4678 0 R (lstnumber.-26.3) 4652 0 R (lstnumber.-26.30) 4679 0 R (lstnumber.-26.31) 4680 0 R (lstnumber.-26.32) 4681 0 R (lstnumber.-26.33) 4682 0 R]
+9683 0 obj <<
+/Names [(lstnumber.-26.29) 4652 0 R (lstnumber.-26.3) 4626 0 R (lstnumber.-26.30) 4653 0 R (lstnumber.-26.31) 4654 0 R (lstnumber.-26.32) 4655 0 R (lstnumber.-26.33) 4656 0 R]
 /Limits [(lstnumber.-26.29) (lstnumber.-26.33)]
 >> endobj
-9715 0 obj <<
-/Names [(lstnumber.-26.34) 4683 0 R (lstnumber.-26.35) 4684 0 R (lstnumber.-26.4) 4653 0 R (lstnumber.-26.5) 4654 0 R (lstnumber.-26.6) 4655 0 R (lstnumber.-26.7) 4656 0 R]
+9684 0 obj <<
+/Names [(lstnumber.-26.34) 4657 0 R (lstnumber.-26.35) 4658 0 R (lstnumber.-26.4) 4627 0 R (lstnumber.-26.5) 4628 0 R (lstnumber.-26.6) 4629 0 R (lstnumber.-26.7) 4630 0 R]
 /Limits [(lstnumber.-26.34) (lstnumber.-26.7)]
 >> endobj
-9716 0 obj <<
-/Names [(lstnumber.-26.8) 4657 0 R (lstnumber.-26.9) 4658 0 R (lstnumber.-27.1) 5055 0 R (lstnumber.-27.10) 5064 0 R (lstnumber.-27.11) 5065 0 R (lstnumber.-27.12) 5066 0 R]
+9685 0 obj <<
+/Names [(lstnumber.-26.8) 4631 0 R (lstnumber.-26.9) 4632 0 R (lstnumber.-27.1) 5025 0 R (lstnumber.-27.10) 5034 0 R (lstnumber.-27.11) 5035 0 R (lstnumber.-27.12) 5036 0 R]
 /Limits [(lstnumber.-26.8) (lstnumber.-27.12)]
 >> endobj
-9717 0 obj <<
-/Names [(lstnumber.-27.13) 5067 0 R (lstnumber.-27.14) 5068 0 R (lstnumber.-27.15) 5069 0 R (lstnumber.-27.16) 5070 0 R (lstnumber.-27.17) 5071 0 R (lstnumber.-27.18) 5072 0 R]
+9686 0 obj <<
+/Names [(lstnumber.-27.13) 5037 0 R (lstnumber.-27.14) 5038 0 R (lstnumber.-27.15) 5039 0 R (lstnumber.-27.16) 5040 0 R (lstnumber.-27.17) 5041 0 R (lstnumber.-27.18) 5042 0 R]
 /Limits [(lstnumber.-27.13) (lstnumber.-27.18)]
 >> endobj
-9718 0 obj <<
-/Names [(lstnumber.-27.19) 5073 0 R (lstnumber.-27.2) 5056 0 R (lstnumber.-27.20) 5074 0 R (lstnumber.-27.21) 5075 0 R (lstnumber.-27.22) 5076 0 R (lstnumber.-27.23) 5077 0 R]
+9687 0 obj <<
+/Names [(lstnumber.-27.19) 5043 0 R (lstnumber.-27.2) 5026 0 R (lstnumber.-27.20) 5044 0 R (lstnumber.-27.21) 5045 0 R (lstnumber.-27.22) 5046 0 R (lstnumber.-27.23) 5047 0 R]
 /Limits [(lstnumber.-27.19) (lstnumber.-27.23)]
 >> endobj
-9719 0 obj <<
-/Names [(lstnumber.-27.24) 5078 0 R (lstnumber.-27.25) 5079 0 R (lstnumber.-27.26) 5080 0 R (lstnumber.-27.27) 5081 0 R (lstnumber.-27.28) 5082 0 R (lstnumber.-27.29) 5083 0 R]
+9688 0 obj <<
+/Names [(lstnumber.-27.24) 5048 0 R (lstnumber.-27.25) 5049 0 R (lstnumber.-27.26) 5050 0 R (lstnumber.-27.27) 5051 0 R (lstnumber.-27.28) 5052 0 R (lstnumber.-27.29) 5053 0 R]
 /Limits [(lstnumber.-27.24) (lstnumber.-27.29)]
 >> endobj
-9720 0 obj <<
-/Names [(lstnumber.-27.3) 5057 0 R (lstnumber.-27.30) 5084 0 R (lstnumber.-27.31) 5085 0 R (lstnumber.-27.32) 5086 0 R (lstnumber.-27.33) 5087 0 R (lstnumber.-27.34) 5088 0 R]
+9689 0 obj <<
+/Names [(lstnumber.-27.3) 5027 0 R (lstnumber.-27.30) 5054 0 R (lstnumber.-27.31) 5055 0 R (lstnumber.-27.32) 5056 0 R (lstnumber.-27.33) 5057 0 R (lstnumber.-27.34) 5058 0 R]
 /Limits [(lstnumber.-27.3) (lstnumber.-27.34)]
 >> endobj
-9721 0 obj <<
-/Names [(lstnumber.-27.35) 5089 0 R (lstnumber.-27.36) 5090 0 R (lstnumber.-27.37) 5091 0 R (lstnumber.-27.38) 5092 0 R (lstnumber.-27.39) 5093 0 R (lstnumber.-27.4) 5058 0 R]
+9690 0 obj <<
+/Names [(lstnumber.-27.35) 5059 0 R (lstnumber.-27.36) 5060 0 R (lstnumber.-27.37) 5061 0 R (lstnumber.-27.38) 5062 0 R (lstnumber.-27.39) 5063 0 R (lstnumber.-27.4) 5028 0 R]
 /Limits [(lstnumber.-27.35) (lstnumber.-27.4)]
 >> endobj
-9722 0 obj <<
-/Names [(lstnumber.-27.40) 5094 0 R (lstnumber.-27.41) 5095 0 R (lstnumber.-27.42) 5096 0 R (lstnumber.-27.5) 5059 0 R (lstnumber.-27.6) 5060 0 R (lstnumber.-27.7) 5061 0 R]
+9691 0 obj <<
+/Names [(lstnumber.-27.40) 5064 0 R (lstnumber.-27.41) 5065 0 R (lstnumber.-27.42) 5066 0 R (lstnumber.-27.5) 5029 0 R (lstnumber.-27.6) 5030 0 R (lstnumber.-27.7) 5031 0 R]
 /Limits [(lstnumber.-27.40) (lstnumber.-27.7)]
 >> endobj
-9723 0 obj <<
-/Names [(lstnumber.-27.8) 5062 0 R (lstnumber.-27.9) 5063 0 R (lstnumber.-28.1) 5111 0 R (lstnumber.-28.10) 5120 0 R (lstnumber.-28.11) 5121 0 R (lstnumber.-28.12) 5122 0 R]
+9692 0 obj <<
+/Names [(lstnumber.-27.8) 5032 0 R (lstnumber.-27.9) 5033 0 R (lstnumber.-28.1) 5081 0 R (lstnumber.-28.10) 5090 0 R (lstnumber.-28.11) 5091 0 R (lstnumber.-28.12) 5092 0 R]
 /Limits [(lstnumber.-27.8) (lstnumber.-28.12)]
 >> endobj
-9724 0 obj <<
-/Names [(lstnumber.-28.13) 5123 0 R (lstnumber.-28.14) 5124 0 R (lstnumber.-28.15) 5125 0 R (lstnumber.-28.16) 5126 0 R (lstnumber.-28.17) 5127 0 R (lstnumber.-28.18) 5128 0 R]
+9693 0 obj <<
+/Names [(lstnumber.-28.13) 5093 0 R (lstnumber.-28.14) 5094 0 R (lstnumber.-28.15) 5095 0 R (lstnumber.-28.16) 5096 0 R (lstnumber.-28.17) 5097 0 R (lstnumber.-28.18) 5098 0 R]
 /Limits [(lstnumber.-28.13) (lstnumber.-28.18)]
 >> endobj
-9725 0 obj <<
-/Names [(lstnumber.-28.19) 5129 0 R (lstnumber.-28.2) 5112 0 R (lstnumber.-28.20) 5130 0 R (lstnumber.-28.21) 5131 0 R (lstnumber.-28.22) 5132 0 R (lstnumber.-28.23) 5133 0 R]
+9694 0 obj <<
+/Names [(lstnumber.-28.19) 5099 0 R (lstnumber.-28.2) 5082 0 R (lstnumber.-28.20) 5100 0 R (lstnumber.-28.21) 5101 0 R (lstnumber.-28.22) 5102 0 R (lstnumber.-28.23) 5103 0 R]
 /Limits [(lstnumber.-28.19) (lstnumber.-28.23)]
 >> endobj
-9726 0 obj <<
-/Names [(lstnumber.-28.24) 5134 0 R (lstnumber.-28.25) 5135 0 R (lstnumber.-28.26) 5136 0 R (lstnumber.-28.27) 5137 0 R (lstnumber.-28.28) 5138 0 R (lstnumber.-28.29) 5139 0 R]
+9695 0 obj <<
+/Names [(lstnumber.-28.24) 5104 0 R (lstnumber.-28.25) 5105 0 R (lstnumber.-28.26) 5106 0 R (lstnumber.-28.27) 5107 0 R (lstnumber.-28.28) 5108 0 R (lstnumber.-28.29) 5109 0 R]
 /Limits [(lstnumber.-28.24) (lstnumber.-28.29)]
 >> endobj
-9727 0 obj <<
-/Names [(lstnumber.-28.3) 5113 0 R (lstnumber.-28.30) 5140 0 R (lstnumber.-28.31) 5141 0 R (lstnumber.-28.32) 5142 0 R (lstnumber.-28.33) 5143 0 R (lstnumber.-28.34) 5144 0 R]
+9696 0 obj <<
+/Names [(lstnumber.-28.3) 5083 0 R (lstnumber.-28.30) 5110 0 R (lstnumber.-28.31) 5111 0 R (lstnumber.-28.32) 5112 0 R (lstnumber.-28.33) 5113 0 R (lstnumber.-28.34) 5114 0 R]
 /Limits [(lstnumber.-28.3) (lstnumber.-28.34)]
 >> endobj
-9728 0 obj <<
-/Names [(lstnumber.-28.35) 5145 0 R (lstnumber.-28.36) 5146 0 R (lstnumber.-28.37) 5147 0 R (lstnumber.-28.38) 5148 0 R (lstnumber.-28.4) 5114 0 R (lstnumber.-28.5) 5115 0 R]
+9697 0 obj <<
+/Names [(lstnumber.-28.35) 5115 0 R (lstnumber.-28.36) 5116 0 R (lstnumber.-28.37) 5117 0 R (lstnumber.-28.38) 5118 0 R (lstnumber.-28.4) 5084 0 R (lstnumber.-28.5) 5085 0 R]
 /Limits [(lstnumber.-28.35) (lstnumber.-28.5)]
 >> endobj
-9729 0 obj <<
-/Names [(lstnumber.-28.6) 5116 0 R (lstnumber.-28.7) 5117 0 R (lstnumber.-28.8) 5118 0 R (lstnumber.-28.9) 5119 0 R (lstnumber.-29.1) 5154 0 R (lstnumber.-29.10) 5163 0 R]
+9698 0 obj <<
+/Names [(lstnumber.-28.6) 5086 0 R (lstnumber.-28.7) 5087 0 R (lstnumber.-28.8) 5088 0 R (lstnumber.-28.9) 5089 0 R (lstnumber.-29.1) 5124 0 R (lstnumber.-29.10) 5133 0 R]
 /Limits [(lstnumber.-28.6) (lstnumber.-29.10)]
 >> endobj
-9730 0 obj <<
-/Names [(lstnumber.-29.11) 5164 0 R (lstnumber.-29.12) 5165 0 R (lstnumber.-29.13) 5166 0 R (lstnumber.-29.14) 5167 0 R (lstnumber.-29.15) 5168 0 R (lstnumber.-29.16) 5169 0 R]
+9699 0 obj <<
+/Names [(lstnumber.-29.11) 5134 0 R (lstnumber.-29.12) 5135 0 R (lstnumber.-29.13) 5136 0 R (lstnumber.-29.14) 5137 0 R (lstnumber.-29.15) 5138 0 R (lstnumber.-29.16) 5139 0 R]
 /Limits [(lstnumber.-29.11) (lstnumber.-29.16)]
 >> endobj
-9731 0 obj <<
-/Names [(lstnumber.-29.17) 5170 0 R (lstnumber.-29.18) 5171 0 R (lstnumber.-29.19) 5172 0 R (lstnumber.-29.2) 5155 0 R (lstnumber.-29.20) 5173 0 R (lstnumber.-29.21) 5174 0 R]
+9700 0 obj <<
+/Names [(lstnumber.-29.17) 5140 0 R (lstnumber.-29.18) 5141 0 R (lstnumber.-29.19) 5142 0 R (lstnumber.-29.2) 5125 0 R (lstnumber.-29.20) 5143 0 R (lstnumber.-29.21) 5144 0 R]
 /Limits [(lstnumber.-29.17) (lstnumber.-29.21)]
 >> endobj
-9732 0 obj <<
-/Names [(lstnumber.-29.22) 5175 0 R (lstnumber.-29.23) 5176 0 R (lstnumber.-29.24) 5177 0 R (lstnumber.-29.25) 5178 0 R (lstnumber.-29.26) 5179 0 R (lstnumber.-29.27) 5180 0 R]
+9701 0 obj <<
+/Names [(lstnumber.-29.22) 5145 0 R (lstnumber.-29.23) 5146 0 R (lstnumber.-29.24) 5147 0 R (lstnumber.-29.25) 5148 0 R (lstnumber.-29.26) 5149 0 R (lstnumber.-29.27) 5150 0 R]
 /Limits [(lstnumber.-29.22) (lstnumber.-29.27)]
 >> endobj
-9733 0 obj <<
-/Names [(lstnumber.-29.28) 5181 0 R (lstnumber.-29.29) 5182 0 R (lstnumber.-29.3) 5156 0 R (lstnumber.-29.30) 5183 0 R (lstnumber.-29.31) 5184 0 R (lstnumber.-29.32) 5185 0 R]
+9702 0 obj <<
+/Names [(lstnumber.-29.28) 5151 0 R (lstnumber.-29.29) 5152 0 R (lstnumber.-29.3) 5126 0 R (lstnumber.-29.30) 5153 0 R (lstnumber.-29.31) 5154 0 R (lstnumber.-29.32) 5155 0 R]
 /Limits [(lstnumber.-29.28) (lstnumber.-29.32)]
 >> endobj
-9734 0 obj <<
-/Names [(lstnumber.-29.33) 5186 0 R (lstnumber.-29.34) 5187 0 R (lstnumber.-29.35) 5188 0 R (lstnumber.-29.36) 5189 0 R (lstnumber.-29.37) 5190 0 R (lstnumber.-29.4) 5157 0 R]
+9703 0 obj <<
+/Names [(lstnumber.-29.33) 5156 0 R (lstnumber.-29.34) 5157 0 R (lstnumber.-29.35) 5158 0 R (lstnumber.-29.36) 5159 0 R (lstnumber.-29.37) 5160 0 R (lstnumber.-29.4) 5127 0 R]
 /Limits [(lstnumber.-29.33) (lstnumber.-29.4)]
 >> endobj
-9735 0 obj <<
-/Names [(lstnumber.-29.5) 5158 0 R (lstnumber.-29.6) 5159 0 R (lstnumber.-29.7) 5160 0 R (lstnumber.-29.8) 5161 0 R (lstnumber.-29.9) 5162 0 R (lstnumber.-3.1) 2133 0 R]
+9704 0 obj <<
+/Names [(lstnumber.-29.5) 5128 0 R (lstnumber.-29.6) 5129 0 R (lstnumber.-29.7) 5130 0 R (lstnumber.-29.8) 5131 0 R (lstnumber.-29.9) 5132 0 R (lstnumber.-3.1) 2133 0 R]
 /Limits [(lstnumber.-29.5) (lstnumber.-3.1)]
 >> endobj
-9736 0 obj <<
+9705 0 obj <<
 /Names [(lstnumber.-3.10) 2142 0 R (lstnumber.-3.11) 2143 0 R (lstnumber.-3.12) 2144 0 R (lstnumber.-3.13) 2145 0 R (lstnumber.-3.14) 2146 0 R (lstnumber.-3.15) 2147 0 R]
 /Limits [(lstnumber.-3.10) (lstnumber.-3.15)]
 >> endobj
-9737 0 obj <<
+9706 0 obj <<
 /Names [(lstnumber.-3.16) 2148 0 R (lstnumber.-3.17) 2149 0 R (lstnumber.-3.18) 2150 0 R (lstnumber.-3.19) 2151 0 R (lstnumber.-3.2) 2134 0 R (lstnumber.-3.20) 2152 0 R]
 /Limits [(lstnumber.-3.16) (lstnumber.-3.20)]
 >> endobj
-9738 0 obj <<
+9707 0 obj <<
 /Names [(lstnumber.-3.21) 2153 0 R (lstnumber.-3.22) 2154 0 R (lstnumber.-3.23) 2155 0 R (lstnumber.-3.24) 2156 0 R (lstnumber.-3.25) 2157 0 R (lstnumber.-3.26) 2158 0 R]
 /Limits [(lstnumber.-3.21) (lstnumber.-3.26)]
 >> endobj
-9739 0 obj <<
+9708 0 obj <<
 /Names [(lstnumber.-3.27) 2159 0 R (lstnumber.-3.28) 2160 0 R (lstnumber.-3.29) 2161 0 R (lstnumber.-3.3) 2135 0 R (lstnumber.-3.30) 2162 0 R (lstnumber.-3.31) 2163 0 R]
 /Limits [(lstnumber.-3.27) (lstnumber.-3.31)]
 >> endobj
-9740 0 obj <<
+9709 0 obj <<
 /Names [(lstnumber.-3.32) 2164 0 R (lstnumber.-3.4) 2136 0 R (lstnumber.-3.5) 2137 0 R (lstnumber.-3.6) 2138 0 R (lstnumber.-3.7) 2139 0 R (lstnumber.-3.8) 2140 0 R]
 /Limits [(lstnumber.-3.32) (lstnumber.-3.8)]
 >> endobj
-9741 0 obj <<
-/Names [(lstnumber.-3.9) 2141 0 R (lstnumber.-30.1) 5196 0 R (lstnumber.-30.10) 5205 0 R (lstnumber.-30.11) 5206 0 R (lstnumber.-30.12) 5207 0 R (lstnumber.-30.13) 5208 0 R]
+9710 0 obj <<
+/Names [(lstnumber.-3.9) 2141 0 R (lstnumber.-30.1) 5166 0 R (lstnumber.-30.10) 5175 0 R (lstnumber.-30.11) 5176 0 R (lstnumber.-30.12) 5177 0 R (lstnumber.-30.13) 5178 0 R]
 /Limits [(lstnumber.-3.9) (lstnumber.-30.13)]
 >> endobj
-9742 0 obj <<
-/Names [(lstnumber.-30.14) 5209 0 R (lstnumber.-30.15) 5210 0 R (lstnumber.-30.16) 5211 0 R (lstnumber.-30.17) 5212 0 R (lstnumber.-30.18) 5213 0 R (lstnumber.-30.19) 5214 0 R]
+9711 0 obj <<
+/Names [(lstnumber.-30.14) 5179 0 R (lstnumber.-30.15) 5180 0 R (lstnumber.-30.16) 5181 0 R (lstnumber.-30.17) 5182 0 R (lstnumber.-30.18) 5183 0 R (lstnumber.-30.19) 5184 0 R]
 /Limits [(lstnumber.-30.14) (lstnumber.-30.19)]
 >> endobj
-9743 0 obj <<
-/Names [(lstnumber.-30.2) 5197 0 R (lstnumber.-30.20) 5215 0 R (lstnumber.-30.21) 5216 0 R (lstnumber.-30.22) 5217 0 R (lstnumber.-30.23) 5218 0 R (lstnumber.-30.24) 5219 0 R]
+9712 0 obj <<
+/Names [(lstnumber.-30.2) 5167 0 R (lstnumber.-30.20) 5185 0 R (lstnumber.-30.21) 5186 0 R (lstnumber.-30.22) 5187 0 R (lstnumber.-30.23) 5188 0 R (lstnumber.-30.24) 5189 0 R]
 /Limits [(lstnumber.-30.2) (lstnumber.-30.24)]
 >> endobj
-9744 0 obj <<
-/Names [(lstnumber.-30.25) 5220 0 R (lstnumber.-30.26) 5221 0 R (lstnumber.-30.27) 5222 0 R (lstnumber.-30.28) 5223 0 R (lstnumber.-30.29) 5224 0 R (lstnumber.-30.3) 5198 0 R]
+9713 0 obj <<
+/Names [(lstnumber.-30.25) 5190 0 R (lstnumber.-30.26) 5191 0 R (lstnumber.-30.27) 5192 0 R (lstnumber.-30.28) 5193 0 R (lstnumber.-30.29) 5194 0 R (lstnumber.-30.3) 5168 0 R]
 /Limits [(lstnumber.-30.25) (lstnumber.-30.3)]
 >> endobj
-9745 0 obj <<
-/Names [(lstnumber.-30.30) 5225 0 R (lstnumber.-30.31) 5226 0 R (lstnumber.-30.32) 5227 0 R (lstnumber.-30.33) 5228 0 R (lstnumber.-30.34) 5229 0 R (lstnumber.-30.35) 5230 0 R]
+9714 0 obj <<
+/Names [(lstnumber.-30.30) 5195 0 R (lstnumber.-30.31) 5196 0 R (lstnumber.-30.32) 5197 0 R (lstnumber.-30.33) 5198 0 R (lstnumber.-30.34) 5199 0 R (lstnumber.-30.35) 5200 0 R]
 /Limits [(lstnumber.-30.30) (lstnumber.-30.35)]
 >> endobj
-9746 0 obj <<
-/Names [(lstnumber.-30.36) 5231 0 R (lstnumber.-30.4) 5199 0 R (lstnumber.-30.5) 5200 0 R (lstnumber.-30.6) 5201 0 R (lstnumber.-30.7) 5202 0 R (lstnumber.-30.8) 5203 0 R]
+9715 0 obj <<
+/Names [(lstnumber.-30.36) 5201 0 R (lstnumber.-30.4) 5169 0 R (lstnumber.-30.5) 5170 0 R (lstnumber.-30.6) 5171 0 R (lstnumber.-30.7) 5172 0 R (lstnumber.-30.8) 5173 0 R]
 /Limits [(lstnumber.-30.36) (lstnumber.-30.8)]
 >> endobj
-9747 0 obj <<
-/Names [(lstnumber.-30.9) 5204 0 R (lstnumber.-31.1) 5237 0 R (lstnumber.-31.10) 5246 0 R (lstnumber.-31.11) 5247 0 R (lstnumber.-31.12) 5248 0 R (lstnumber.-31.13) 5249 0 R]
+9716 0 obj <<
+/Names [(lstnumber.-30.9) 5174 0 R (lstnumber.-31.1) 5207 0 R (lstnumber.-31.10) 5216 0 R (lstnumber.-31.11) 5217 0 R (lstnumber.-31.12) 5218 0 R (lstnumber.-31.13) 5219 0 R]
 /Limits [(lstnumber.-30.9) (lstnumber.-31.13)]
 >> endobj
-9748 0 obj <<
-/Names [(lstnumber.-31.14) 5250 0 R (lstnumber.-31.15) 5251 0 R (lstnumber.-31.16) 5252 0 R (lstnumber.-31.17) 5253 0 R (lstnumber.-31.2) 5238 0 R (lstnumber.-31.3) 5239 0 R]
+9717 0 obj <<
+/Names [(lstnumber.-31.14) 5220 0 R (lstnumber.-31.15) 5221 0 R (lstnumber.-31.16) 5222 0 R (lstnumber.-31.17) 5223 0 R (lstnumber.-31.2) 5208 0 R (lstnumber.-31.3) 5209 0 R]
 /Limits [(lstnumber.-31.14) (lstnumber.-31.3)]
 >> endobj
-9749 0 obj <<
-/Names [(lstnumber.-31.4) 5240 0 R (lstnumber.-31.5) 5241 0 R (lstnumber.-31.6) 5242 0 R (lstnumber.-31.7) 5243 0 R (lstnumber.-31.8) 5244 0 R (lstnumber.-31.9) 5245 0 R]
+9718 0 obj <<
+/Names [(lstnumber.-31.4) 5210 0 R (lstnumber.-31.5) 5211 0 R (lstnumber.-31.6) 5212 0 R (lstnumber.-31.7) 5213 0 R (lstnumber.-31.8) 5214 0 R (lstnumber.-31.9) 5215 0 R]
 /Limits [(lstnumber.-31.4) (lstnumber.-31.9)]
 >> endobj
-9750 0 obj <<
-/Names [(lstnumber.-32.1) 5255 0 R (lstnumber.-32.10) 5264 0 R (lstnumber.-32.11) 5265 0 R (lstnumber.-32.12) 5266 0 R (lstnumber.-32.13) 5267 0 R (lstnumber.-32.14) 5268 0 R]
+9719 0 obj <<
+/Names [(lstnumber.-32.1) 5225 0 R (lstnumber.-32.10) 5234 0 R (lstnumber.-32.11) 5235 0 R (lstnumber.-32.12) 5236 0 R (lstnumber.-32.13) 5237 0 R (lstnumber.-32.14) 5238 0 R]
 /Limits [(lstnumber.-32.1) (lstnumber.-32.14)]
 >> endobj
-9751 0 obj <<
-/Names [(lstnumber.-32.15) 5269 0 R (lstnumber.-32.16) 5270 0 R (lstnumber.-32.2) 5256 0 R (lstnumber.-32.3) 5257 0 R (lstnumber.-32.4) 5258 0 R (lstnumber.-32.5) 5259 0 R]
+9720 0 obj <<
+/Names [(lstnumber.-32.15) 5239 0 R (lstnumber.-32.16) 5240 0 R (lstnumber.-32.2) 5226 0 R (lstnumber.-32.3) 5227 0 R (lstnumber.-32.4) 5228 0 R (lstnumber.-32.5) 5229 0 R]
 /Limits [(lstnumber.-32.15) (lstnumber.-32.5)]
 >> endobj
-9752 0 obj <<
-/Names [(lstnumber.-32.6) 5260 0 R (lstnumber.-32.7) 5261 0 R (lstnumber.-32.8) 5262 0 R (lstnumber.-32.9) 5263 0 R (lstnumber.-33.1) 5277 0 R (lstnumber.-33.10) 5286 0 R]
+9721 0 obj <<
+/Names [(lstnumber.-32.6) 5230 0 R (lstnumber.-32.7) 5231 0 R (lstnumber.-32.8) 5232 0 R (lstnumber.-32.9) 5233 0 R (lstnumber.-33.1) 5247 0 R (lstnumber.-33.10) 5256 0 R]
 /Limits [(lstnumber.-32.6) (lstnumber.-33.10)]
 >> endobj
-9753 0 obj <<
-/Names [(lstnumber.-33.11) 5287 0 R (lstnumber.-33.12) 5288 0 R (lstnumber.-33.13) 5289 0 R (lstnumber.-33.2) 5278 0 R (lstnumber.-33.3) 5279 0 R (lstnumber.-33.4) 5280 0 R]
+9722 0 obj <<
+/Names [(lstnumber.-33.11) 5257 0 R (lstnumber.-33.12) 5258 0 R (lstnumber.-33.13) 5259 0 R (lstnumber.-33.2) 5248 0 R (lstnumber.-33.3) 5249 0 R (lstnumber.-33.4) 5250 0 R]
 /Limits [(lstnumber.-33.11) (lstnumber.-33.4)]
 >> endobj
-9754 0 obj <<
-/Names [(lstnumber.-33.5) 5281 0 R (lstnumber.-33.6) 5282 0 R (lstnumber.-33.7) 5283 0 R (lstnumber.-33.8) 5284 0 R (lstnumber.-33.9) 5285 0 R (lstnumber.-34.1) 5655 0 R]
+9723 0 obj <<
+/Names [(lstnumber.-33.5) 5251 0 R (lstnumber.-33.6) 5252 0 R (lstnumber.-33.7) 5253 0 R (lstnumber.-33.8) 5254 0 R (lstnumber.-33.9) 5255 0 R (lstnumber.-34.1) 5623 0 R]
 /Limits [(lstnumber.-33.5) (lstnumber.-34.1)]
 >> endobj
-9755 0 obj <<
-/Names [(lstnumber.-34.10) 5664 0 R (lstnumber.-34.11) 5665 0 R (lstnumber.-34.12) 5666 0 R (lstnumber.-34.13) 5667 0 R (lstnumber.-34.14) 5668 0 R (lstnumber.-34.15) 5669 0 R]
+9724 0 obj <<
+/Names [(lstnumber.-34.10) 5632 0 R (lstnumber.-34.11) 5633 0 R (lstnumber.-34.12) 5634 0 R (lstnumber.-34.13) 5635 0 R (lstnumber.-34.14) 5636 0 R (lstnumber.-34.15) 5637 0 R]
 /Limits [(lstnumber.-34.10) (lstnumber.-34.15)]
 >> endobj
-9756 0 obj <<
-/Names [(lstnumber.-34.16) 5670 0 R (lstnumber.-34.17) 5671 0 R (lstnumber.-34.18) 5672 0 R (lstnumber.-34.19) 5673 0 R (lstnumber.-34.2) 5656 0 R (lstnumber.-34.20) 5674 0 R]
+9725 0 obj <<
+/Names [(lstnumber.-34.16) 5638 0 R (lstnumber.-34.17) 5639 0 R (lstnumber.-34.18) 5640 0 R (lstnumber.-34.19) 5641 0 R (lstnumber.-34.2) 5624 0 R (lstnumber.-34.20) 5642 0 R]
 /Limits [(lstnumber.-34.16) (lstnumber.-34.20)]
 >> endobj
-9757 0 obj <<
-/Names [(lstnumber.-34.21) 5675 0 R (lstnumber.-34.22) 5676 0 R (lstnumber.-34.23) 5677 0 R (lstnumber.-34.24) 5678 0 R (lstnumber.-34.25) 5679 0 R (lstnumber.-34.26) 5680 0 R]
+9726 0 obj <<
+/Names [(lstnumber.-34.21) 5643 0 R (lstnumber.-34.22) 5644 0 R (lstnumber.-34.23) 5645 0 R (lstnumber.-34.24) 5646 0 R (lstnumber.-34.25) 5647 0 R (lstnumber.-34.26) 5648 0 R]
 /Limits [(lstnumber.-34.21) (lstnumber.-34.26)]
 >> endobj
-9758 0 obj <<
-/Names [(lstnumber.-34.27) 5681 0 R (lstnumber.-34.28) 5682 0 R (lstnumber.-34.29) 5683 0 R (lstnumber.-34.3) 5657 0 R (lstnumber.-34.30) 5684 0 R (lstnumber.-34.31) 5685 0 R]
+9727 0 obj <<
+/Names [(lstnumber.-34.27) 5649 0 R (lstnumber.-34.28) 5650 0 R (lstnumber.-34.29) 5651 0 R (lstnumber.-34.3) 5625 0 R (lstnumber.-34.30) 5652 0 R (lstnumber.-34.31) 5653 0 R]
 /Limits [(lstnumber.-34.27) (lstnumber.-34.31)]
 >> endobj
-9759 0 obj <<
-/Names [(lstnumber.-34.32) 5686 0 R (lstnumber.-34.33) 5687 0 R (lstnumber.-34.34) 5688 0 R (lstnumber.-34.35) 5689 0 R (lstnumber.-34.36) 5690 0 R (lstnumber.-34.37) 5691 0 R]
+9728 0 obj <<
+/Names [(lstnumber.-34.32) 5654 0 R (lstnumber.-34.33) 5655 0 R (lstnumber.-34.34) 5656 0 R (lstnumber.-34.35) 5657 0 R (lstnumber.-34.36) 5658 0 R (lstnumber.-34.37) 5659 0 R]
 /Limits [(lstnumber.-34.32) (lstnumber.-34.37)]
 >> endobj
-9760 0 obj <<
-/Names [(lstnumber.-34.38) 5692 0 R (lstnumber.-34.39) 5693 0 R (lstnumber.-34.4) 5658 0 R (lstnumber.-34.40) 5694 0 R (lstnumber.-34.41) 5695 0 R (lstnumber.-34.5) 5659 0 R]
+9729 0 obj <<
+/Names [(lstnumber.-34.38) 5660 0 R (lstnumber.-34.39) 5661 0 R (lstnumber.-34.4) 5626 0 R (lstnumber.-34.40) 5662 0 R (lstnumber.-34.41) 5663 0 R (lstnumber.-34.5) 5627 0 R]
 /Limits [(lstnumber.-34.38) (lstnumber.-34.5)]
 >> endobj
-9761 0 obj <<
-/Names [(lstnumber.-34.6) 5660 0 R (lstnumber.-34.7) 5661 0 R (lstnumber.-34.8) 5662 0 R (lstnumber.-34.9) 5663 0 R (lstnumber.-35.1) 5702 0 R (lstnumber.-35.10) 5711 0 R]
+9730 0 obj <<
+/Names [(lstnumber.-34.6) 5628 0 R (lstnumber.-34.7) 5629 0 R (lstnumber.-34.8) 5630 0 R (lstnumber.-34.9) 5631 0 R (lstnumber.-35.1) 5670 0 R (lstnumber.-35.10) 5679 0 R]
 /Limits [(lstnumber.-34.6) (lstnumber.-35.10)]
 >> endobj
-9762 0 obj <<
-/Names [(lstnumber.-35.11) 5712 0 R (lstnumber.-35.12) 5713 0 R (lstnumber.-35.13) 5714 0 R (lstnumber.-35.14) 5715 0 R (lstnumber.-35.15) 5716 0 R (lstnumber.-35.16) 5717 0 R]
+9731 0 obj <<
+/Names [(lstnumber.-35.11) 5680 0 R (lstnumber.-35.12) 5681 0 R (lstnumber.-35.13) 5682 0 R (lstnumber.-35.14) 5683 0 R (lstnumber.-35.15) 5684 0 R (lstnumber.-35.16) 5685 0 R]
 /Limits [(lstnumber.-35.11) (lstnumber.-35.16)]
 >> endobj
-9763 0 obj <<
-/Names [(lstnumber.-35.17) 5718 0 R (lstnumber.-35.18) 5719 0 R (lstnumber.-35.19) 5720 0 R (lstnumber.-35.2) 5703 0 R (lstnumber.-35.20) 5721 0 R (lstnumber.-35.21) 5722 0 R]
+9732 0 obj <<
+/Names [(lstnumber.-35.17) 5686 0 R (lstnumber.-35.18) 5687 0 R (lstnumber.-35.19) 5688 0 R (lstnumber.-35.2) 5671 0 R (lstnumber.-35.20) 5689 0 R (lstnumber.-35.21) 5690 0 R]
 /Limits [(lstnumber.-35.17) (lstnumber.-35.21)]
 >> endobj
-9764 0 obj <<
-/Names [(lstnumber.-35.22) 5723 0 R (lstnumber.-35.23) 5724 0 R (lstnumber.-35.24) 5725 0 R (lstnumber.-35.25) 5726 0 R (lstnumber.-35.26) 5727 0 R (lstnumber.-35.27) 5728 0 R]
+9733 0 obj <<
+/Names [(lstnumber.-35.22) 5691 0 R (lstnumber.-35.23) 5692 0 R (lstnumber.-35.24) 5693 0 R (lstnumber.-35.25) 5694 0 R (lstnumber.-35.26) 5695 0 R (lstnumber.-35.27) 5696 0 R]
 /Limits [(lstnumber.-35.22) (lstnumber.-35.27)]
 >> endobj
-9765 0 obj <<
-/Names [(lstnumber.-35.28) 5729 0 R (lstnumber.-35.29) 5730 0 R (lstnumber.-35.3) 5704 0 R (lstnumber.-35.30) 5731 0 R (lstnumber.-35.31) 5732 0 R (lstnumber.-35.32) 5733 0 R]
+9734 0 obj <<
+/Names [(lstnumber.-35.28) 5697 0 R (lstnumber.-35.29) 5698 0 R (lstnumber.-35.3) 5672 0 R (lstnumber.-35.30) 5699 0 R (lstnumber.-35.31) 5700 0 R (lstnumber.-35.32) 5701 0 R]
 /Limits [(lstnumber.-35.28) (lstnumber.-35.32)]
 >> endobj
-9766 0 obj <<
-/Names [(lstnumber.-35.33) 5734 0 R (lstnumber.-35.34) 5735 0 R (lstnumber.-35.35) 5736 0 R (lstnumber.-35.4) 5705 0 R (lstnumber.-35.5) 5706 0 R (lstnumber.-35.6) 5707 0 R]
+9735 0 obj <<
+/Names [(lstnumber.-35.33) 5702 0 R (lstnumber.-35.34) 5703 0 R (lstnumber.-35.35) 5704 0 R (lstnumber.-35.4) 5673 0 R (lstnumber.-35.5) 5674 0 R (lstnumber.-35.6) 5675 0 R]
 /Limits [(lstnumber.-35.33) (lstnumber.-35.6)]
 >> endobj
-9767 0 obj <<
-/Names [(lstnumber.-35.7) 5708 0 R (lstnumber.-35.8) 5709 0 R (lstnumber.-35.9) 5710 0 R (lstnumber.-36.1) 5914 0 R (lstnumber.-36.10) 5923 0 R (lstnumber.-36.11) 5924 0 R]
+9736 0 obj <<
+/Names [(lstnumber.-35.7) 5676 0 R (lstnumber.-35.8) 5677 0 R (lstnumber.-35.9) 5678 0 R (lstnumber.-36.1) 5882 0 R (lstnumber.-36.10) 5891 0 R (lstnumber.-36.11) 5892 0 R]
 /Limits [(lstnumber.-35.7) (lstnumber.-36.11)]
 >> endobj
-9768 0 obj <<
-/Names [(lstnumber.-36.12) 5925 0 R (lstnumber.-36.13) 5926 0 R (lstnumber.-36.14) 5927 0 R (lstnumber.-36.15) 5928 0 R (lstnumber.-36.16) 5929 0 R (lstnumber.-36.17) 5930 0 R]
+9737 0 obj <<
+/Names [(lstnumber.-36.12) 5893 0 R (lstnumber.-36.13) 5894 0 R (lstnumber.-36.14) 5895 0 R (lstnumber.-36.15) 5896 0 R (lstnumber.-36.16) 5897 0 R (lstnumber.-36.17) 5898 0 R]
 /Limits [(lstnumber.-36.12) (lstnumber.-36.17)]
 >> endobj
-9769 0 obj <<
-/Names [(lstnumber.-36.18) 5931 0 R (lstnumber.-36.19) 5932 0 R (lstnumber.-36.2) 5915 0 R (lstnumber.-36.20) 5933 0 R (lstnumber.-36.21) 5934 0 R (lstnumber.-36.22) 5935 0 R]
+9738 0 obj <<
+/Names [(lstnumber.-36.18) 5899 0 R (lstnumber.-36.19) 5900 0 R (lstnumber.-36.2) 5883 0 R (lstnumber.-36.20) 5901 0 R (lstnumber.-36.21) 5902 0 R (lstnumber.-36.22) 5903 0 R]
 /Limits [(lstnumber.-36.18) (lstnumber.-36.22)]
 >> endobj
-9770 0 obj <<
-/Names [(lstnumber.-36.23) 5936 0 R (lstnumber.-36.24) 5937 0 R (lstnumber.-36.25) 5938 0 R (lstnumber.-36.26) 5939 0 R (lstnumber.-36.27) 5940 0 R (lstnumber.-36.28) 5941 0 R]
+9739 0 obj <<
+/Names [(lstnumber.-36.23) 5904 0 R (lstnumber.-36.24) 5905 0 R (lstnumber.-36.25) 5906 0 R (lstnumber.-36.26) 5907 0 R (lstnumber.-36.27) 5908 0 R (lstnumber.-36.28) 5909 0 R]
 /Limits [(lstnumber.-36.23) (lstnumber.-36.28)]
 >> endobj
-9771 0 obj <<
-/Names [(lstnumber.-36.29) 5942 0 R (lstnumber.-36.3) 5916 0 R (lstnumber.-36.30) 5943 0 R (lstnumber.-36.31) 5944 0 R (lstnumber.-36.32) 5945 0 R (lstnumber.-36.33) 5946 0 R]
+9740 0 obj <<
+/Names [(lstnumber.-36.29) 5910 0 R (lstnumber.-36.3) 5884 0 R (lstnumber.-36.30) 5911 0 R (lstnumber.-36.31) 5912 0 R (lstnumber.-36.32) 5913 0 R (lstnumber.-36.33) 5914 0 R]
 /Limits [(lstnumber.-36.29) (lstnumber.-36.33)]
 >> endobj
-9772 0 obj <<
-/Names [(lstnumber.-36.34) 5947 0 R (lstnumber.-36.35) 5948 0 R (lstnumber.-36.36) 5949 0 R (lstnumber.-36.37) 5950 0 R (lstnumber.-36.38) 5951 0 R (lstnumber.-36.4) 5917 0 R]
+9741 0 obj <<
+/Names [(lstnumber.-36.34) 5915 0 R (lstnumber.-36.35) 5916 0 R (lstnumber.-36.36) 5917 0 R (lstnumber.-36.37) 5918 0 R (lstnumber.-36.38) 5919 0 R (lstnumber.-36.4) 5885 0 R]
 /Limits [(lstnumber.-36.34) (lstnumber.-36.4)]
 >> endobj
-9773 0 obj <<
-/Names [(lstnumber.-36.5) 5918 0 R (lstnumber.-36.6) 5919 0 R (lstnumber.-36.7) 5920 0 R (lstnumber.-36.8) 5921 0 R (lstnumber.-36.9) 5922 0 R (lstnumber.-37.1) 5958 0 R]
+9742 0 obj <<
+/Names [(lstnumber.-36.5) 5886 0 R (lstnumber.-36.6) 5887 0 R (lstnumber.-36.7) 5888 0 R (lstnumber.-36.8) 5889 0 R (lstnumber.-36.9) 5890 0 R (lstnumber.-37.1) 5926 0 R]
 /Limits [(lstnumber.-36.5) (lstnumber.-37.1)]
 >> endobj
-9774 0 obj <<
-/Names [(lstnumber.-37.10) 5967 0 R (lstnumber.-37.11) 5968 0 R (lstnumber.-37.12) 5969 0 R (lstnumber.-37.13) 5970 0 R (lstnumber.-37.14) 5971 0 R (lstnumber.-37.15) 5972 0 R]
+9743 0 obj <<
+/Names [(lstnumber.-37.10) 5935 0 R (lstnumber.-37.11) 5936 0 R (lstnumber.-37.12) 5937 0 R (lstnumber.-37.13) 5938 0 R (lstnumber.-37.14) 5939 0 R (lstnumber.-37.15) 5940 0 R]
 /Limits [(lstnumber.-37.10) (lstnumber.-37.15)]
 >> endobj
-9775 0 obj <<
-/Names [(lstnumber.-37.16) 5973 0 R (lstnumber.-37.17) 5974 0 R (lstnumber.-37.18) 5975 0 R (lstnumber.-37.19) 5976 0 R (lstnumber.-37.2) 5959 0 R (lstnumber.-37.20) 5977 0 R]
+9744 0 obj <<
+/Names [(lstnumber.-37.16) 5941 0 R (lstnumber.-37.17) 5942 0 R (lstnumber.-37.18) 5943 0 R (lstnumber.-37.19) 5944 0 R (lstnumber.-37.2) 5927 0 R (lstnumber.-37.20) 5945 0 R]
 /Limits [(lstnumber.-37.16) (lstnumber.-37.20)]
 >> endobj
-9776 0 obj <<
-/Names [(lstnumber.-37.21) 5978 0 R (lstnumber.-37.22) 5979 0 R (lstnumber.-37.23) 5980 0 R (lstnumber.-37.24) 5981 0 R (lstnumber.-37.25) 5982 0 R (lstnumber.-37.26) 5983 0 R]
+9745 0 obj <<
+/Names [(lstnumber.-37.21) 5946 0 R (lstnumber.-37.22) 5947 0 R (lstnumber.-37.23) 5948 0 R (lstnumber.-37.24) 5949 0 R (lstnumber.-37.25) 5950 0 R (lstnumber.-37.26) 5951 0 R]
 /Limits [(lstnumber.-37.21) (lstnumber.-37.26)]
 >> endobj
-9777 0 obj <<
-/Names [(lstnumber.-37.27) 5984 0 R (lstnumber.-37.28) 5985 0 R (lstnumber.-37.29) 5986 0 R (lstnumber.-37.3) 5960 0 R (lstnumber.-37.30) 5987 0 R (lstnumber.-37.31) 5988 0 R]
+9746 0 obj <<
+/Names [(lstnumber.-37.27) 5952 0 R (lstnumber.-37.28) 5953 0 R (lstnumber.-37.29) 5954 0 R (lstnumber.-37.3) 5928 0 R (lstnumber.-37.30) 5955 0 R (lstnumber.-37.31) 5956 0 R]
 /Limits [(lstnumber.-37.27) (lstnumber.-37.31)]
 >> endobj
-9778 0 obj <<
-/Names [(lstnumber.-37.32) 5989 0 R (lstnumber.-37.33) 5990 0 R (lstnumber.-37.4) 5961 0 R (lstnumber.-37.5) 5962 0 R (lstnumber.-37.6) 5963 0 R (lstnumber.-37.7) 5964 0 R]
+9747 0 obj <<
+/Names [(lstnumber.-37.32) 5957 0 R (lstnumber.-37.33) 5958 0 R (lstnumber.-37.4) 5929 0 R (lstnumber.-37.5) 5930 0 R (lstnumber.-37.6) 5931 0 R (lstnumber.-37.7) 5932 0 R]
 /Limits [(lstnumber.-37.32) (lstnumber.-37.7)]
 >> endobj
-9779 0 obj <<
-/Names [(lstnumber.-37.8) 5965 0 R (lstnumber.-37.9) 5966 0 R (lstnumber.-38.1) 5998 0 R (lstnumber.-38.10) 6007 0 R (lstnumber.-38.11) 6008 0 R (lstnumber.-38.12) 6009 0 R]
+9748 0 obj <<
+/Names [(lstnumber.-37.8) 5933 0 R (lstnumber.-37.9) 5934 0 R (lstnumber.-38.1) 5966 0 R (lstnumber.-38.10) 5975 0 R (lstnumber.-38.11) 5976 0 R (lstnumber.-38.12) 5977 0 R]
 /Limits [(lstnumber.-37.8) (lstnumber.-38.12)]
 >> endobj
-9780 0 obj <<
-/Names [(lstnumber.-38.13) 6010 0 R (lstnumber.-38.14) 6011 0 R (lstnumber.-38.15) 6012 0 R (lstnumber.-38.16) 6013 0 R (lstnumber.-38.17) 6014 0 R (lstnumber.-38.18) 6015 0 R]
+9749 0 obj <<
+/Names [(lstnumber.-38.13) 5978 0 R (lstnumber.-38.14) 5979 0 R (lstnumber.-38.15) 5980 0 R (lstnumber.-38.16) 5981 0 R (lstnumber.-38.17) 5982 0 R (lstnumber.-38.18) 5983 0 R]
 /Limits [(lstnumber.-38.13) (lstnumber.-38.18)]
 >> endobj
-9781 0 obj <<
-/Names [(lstnumber.-38.19) 6016 0 R (lstnumber.-38.2) 5999 0 R (lstnumber.-38.20) 6017 0 R (lstnumber.-38.21) 6018 0 R (lstnumber.-38.22) 6019 0 R (lstnumber.-38.23) 6020 0 R]
+9750 0 obj <<
+/Names [(lstnumber.-38.19) 5984 0 R (lstnumber.-38.2) 5967 0 R (lstnumber.-38.20) 5985 0 R (lstnumber.-38.21) 5986 0 R (lstnumber.-38.22) 5987 0 R (lstnumber.-38.23) 5988 0 R]
 /Limits [(lstnumber.-38.19) (lstnumber.-38.23)]
 >> endobj
-9782 0 obj <<
-/Names [(lstnumber.-38.24) 6021 0 R (lstnumber.-38.25) 6022 0 R (lstnumber.-38.26) 6023 0 R (lstnumber.-38.27) 6024 0 R (lstnumber.-38.28) 6025 0 R (lstnumber.-38.29) 6026 0 R]
+9751 0 obj <<
+/Names [(lstnumber.-38.24) 5989 0 R (lstnumber.-38.25) 5990 0 R (lstnumber.-38.26) 5991 0 R (lstnumber.-38.27) 5992 0 R (lstnumber.-38.28) 5993 0 R (lstnumber.-38.29) 5994 0 R]
 /Limits [(lstnumber.-38.24) (lstnumber.-38.29)]
 >> endobj
-9783 0 obj <<
-/Names [(lstnumber.-38.3) 6000 0 R (lstnumber.-38.30) 6027 0 R (lstnumber.-38.31) 6028 0 R (lstnumber.-38.32) 6029 0 R (lstnumber.-38.33) 6030 0 R (lstnumber.-38.34) 6031 0 R]
+9752 0 obj <<
+/Names [(lstnumber.-38.3) 5968 0 R (lstnumber.-38.30) 5995 0 R (lstnumber.-38.31) 5996 0 R (lstnumber.-38.32) 5997 0 R (lstnumber.-38.33) 5998 0 R (lstnumber.-38.34) 5999 0 R]
 /Limits [(lstnumber.-38.3) (lstnumber.-38.34)]
 >> endobj
-9784 0 obj <<
-/Names [(lstnumber.-38.4) 6001 0 R (lstnumber.-38.5) 6002 0 R (lstnumber.-38.6) 6003 0 R (lstnumber.-38.7) 6004 0 R (lstnumber.-38.8) 6005 0 R (lstnumber.-38.9) 6006 0 R]
+9753 0 obj <<
+/Names [(lstnumber.-38.4) 5969 0 R (lstnumber.-38.5) 5970 0 R (lstnumber.-38.6) 5971 0 R (lstnumber.-38.7) 5972 0 R (lstnumber.-38.8) 5973 0 R (lstnumber.-38.9) 5974 0 R]
 /Limits [(lstnumber.-38.4) (lstnumber.-38.9)]
 >> endobj
-9785 0 obj <<
-/Names [(lstnumber.-39.1) 6038 0 R (lstnumber.-39.10) 6047 0 R (lstnumber.-39.11) 6048 0 R (lstnumber.-39.12) 6049 0 R (lstnumber.-39.13) 6050 0 R (lstnumber.-39.14) 6051 0 R]
+9754 0 obj <<
+/Names [(lstnumber.-39.1) 6006 0 R (lstnumber.-39.10) 6015 0 R (lstnumber.-39.11) 6016 0 R (lstnumber.-39.12) 6017 0 R (lstnumber.-39.13) 6018 0 R (lstnumber.-39.14) 6019 0 R]
 /Limits [(lstnumber.-39.1) (lstnumber.-39.14)]
 >> endobj
-9786 0 obj <<
-/Names [(lstnumber.-39.15) 6052 0 R (lstnumber.-39.16) 6053 0 R (lstnumber.-39.17) 6054 0 R (lstnumber.-39.18) 6055 0 R (lstnumber.-39.19) 6056 0 R (lstnumber.-39.2) 6039 0 R]
+9755 0 obj <<
+/Names [(lstnumber.-39.15) 6020 0 R (lstnumber.-39.16) 6021 0 R (lstnumber.-39.17) 6022 0 R (lstnumber.-39.18) 6023 0 R (lstnumber.-39.19) 6024 0 R (lstnumber.-39.2) 6007 0 R]
 /Limits [(lstnumber.-39.15) (lstnumber.-39.2)]
 >> endobj
-9787 0 obj <<
-/Names [(lstnumber.-39.20) 6057 0 R (lstnumber.-39.21) 6058 0 R (lstnumber.-39.22) 6059 0 R (lstnumber.-39.23) 6060 0 R (lstnumber.-39.24) 6061 0 R (lstnumber.-39.25) 6062 0 R]
+9756 0 obj <<
+/Names [(lstnumber.-39.20) 6025 0 R (lstnumber.-39.21) 6026 0 R (lstnumber.-39.22) 6027 0 R (lstnumber.-39.23) 6028 0 R (lstnumber.-39.24) 6029 0 R (lstnumber.-39.25) 6030 0 R]
 /Limits [(lstnumber.-39.20) (lstnumber.-39.25)]
 >> endobj
-9788 0 obj <<
-/Names [(lstnumber.-39.26) 6063 0 R (lstnumber.-39.27) 6064 0 R (lstnumber.-39.28) 6065 0 R (lstnumber.-39.29) 6066 0 R (lstnumber.-39.3) 6040 0 R (lstnumber.-39.30) 6067 0 R]
+9757 0 obj <<
+/Names [(lstnumber.-39.26) 6031 0 R (lstnumber.-39.27) 6032 0 R (lstnumber.-39.28) 6033 0 R (lstnumber.-39.29) 6034 0 R (lstnumber.-39.3) 6008 0 R (lstnumber.-39.30) 6035 0 R]
 /Limits [(lstnumber.-39.26) (lstnumber.-39.30)]
 >> endobj
-9789 0 obj <<
-/Names [(lstnumber.-39.31) 6068 0 R (lstnumber.-39.32) 6069 0 R (lstnumber.-39.4) 6041 0 R (lstnumber.-39.5) 6042 0 R (lstnumber.-39.6) 6043 0 R (lstnumber.-39.7) 6044 0 R]
+9758 0 obj <<
+/Names [(lstnumber.-39.31) 6036 0 R (lstnumber.-39.32) 6037 0 R (lstnumber.-39.4) 6009 0 R (lstnumber.-39.5) 6010 0 R (lstnumber.-39.6) 6011 0 R (lstnumber.-39.7) 6012 0 R]
 /Limits [(lstnumber.-39.31) (lstnumber.-39.7)]
 >> endobj
-9790 0 obj <<
-/Names [(lstnumber.-39.8) 6045 0 R (lstnumber.-39.9) 6046 0 R (lstnumber.-4.1) 2266 0 R (lstnumber.-4.10) 2275 0 R (lstnumber.-4.11) 2276 0 R (lstnumber.-4.12) 2277 0 R]
+9759 0 obj <<
+/Names [(lstnumber.-39.8) 6013 0 R (lstnumber.-39.9) 6014 0 R (lstnumber.-4.1) 2263 0 R (lstnumber.-4.10) 2272 0 R (lstnumber.-4.11) 2273 0 R (lstnumber.-4.12) 2274 0 R]
 /Limits [(lstnumber.-39.8) (lstnumber.-4.12)]
 >> endobj
-9791 0 obj <<
-/Names [(lstnumber.-4.13) 2278 0 R (lstnumber.-4.14) 2279 0 R (lstnumber.-4.15) 2280 0 R (lstnumber.-4.16) 2281 0 R (lstnumber.-4.17) 2282 0 R (lstnumber.-4.18) 2283 0 R]
+9760 0 obj <<
+/Names [(lstnumber.-4.13) 2275 0 R (lstnumber.-4.14) 2276 0 R (lstnumber.-4.15) 2277 0 R (lstnumber.-4.16) 2278 0 R (lstnumber.-4.17) 2279 0 R (lstnumber.-4.18) 2280 0 R]
 /Limits [(lstnumber.-4.13) (lstnumber.-4.18)]
 >> endobj
-9792 0 obj <<
-/Names [(lstnumber.-4.19) 2284 0 R (lstnumber.-4.2) 2267 0 R (lstnumber.-4.20) 2285 0 R (lstnumber.-4.21) 2286 0 R (lstnumber.-4.22) 2287 0 R (lstnumber.-4.23) 2288 0 R]
+9761 0 obj <<
+/Names [(lstnumber.-4.19) 2281 0 R (lstnumber.-4.2) 2264 0 R (lstnumber.-4.20) 2282 0 R (lstnumber.-4.21) 2283 0 R (lstnumber.-4.22) 2284 0 R (lstnumber.-4.23) 2285 0 R]
 /Limits [(lstnumber.-4.19) (lstnumber.-4.23)]
 >> endobj
-9793 0 obj <<
-/Names [(lstnumber.-4.3) 2268 0 R (lstnumber.-4.4) 2269 0 R (lstnumber.-4.5) 2270 0 R (lstnumber.-4.6) 2271 0 R (lstnumber.-4.7) 2272 0 R (lstnumber.-4.8) 2273 0 R]
+9762 0 obj <<
+/Names [(lstnumber.-4.3) 2265 0 R (lstnumber.-4.4) 2266 0 R (lstnumber.-4.5) 2267 0 R (lstnumber.-4.6) 2268 0 R (lstnumber.-4.7) 2269 0 R (lstnumber.-4.8) 2270 0 R]
 /Limits [(lstnumber.-4.3) (lstnumber.-4.8)]
 >> endobj
-9794 0 obj <<
-/Names [(lstnumber.-4.9) 2274 0 R (lstnumber.-40.1) 6076 0 R (lstnumber.-40.10) 6085 0 R (lstnumber.-40.11) 6086 0 R (lstnumber.-40.12) 6087 0 R (lstnumber.-40.13) 6088 0 R]
+9763 0 obj <<
+/Names [(lstnumber.-4.9) 2271 0 R (lstnumber.-40.1) 6044 0 R (lstnumber.-40.10) 6053 0 R (lstnumber.-40.11) 6054 0 R (lstnumber.-40.12) 6055 0 R (lstnumber.-40.13) 6056 0 R]
 /Limits [(lstnumber.-4.9) (lstnumber.-40.13)]
 >> endobj
-9795 0 obj <<
-/Names [(lstnumber.-40.14) 6089 0 R (lstnumber.-40.15) 6090 0 R (lstnumber.-40.16) 6091 0 R (lstnumber.-40.17) 6092 0 R (lstnumber.-40.18) 6093 0 R (lstnumber.-40.19) 6094 0 R]
+9764 0 obj <<
+/Names [(lstnumber.-40.14) 6057 0 R (lstnumber.-40.15) 6058 0 R (lstnumber.-40.16) 6059 0 R (lstnumber.-40.17) 6060 0 R (lstnumber.-40.18) 6061 0 R (lstnumber.-40.19) 6062 0 R]
 /Limits [(lstnumber.-40.14) (lstnumber.-40.19)]
 >> endobj
-9796 0 obj <<
-/Names [(lstnumber.-40.2) 6077 0 R (lstnumber.-40.20) 6095 0 R (lstnumber.-40.21) 6096 0 R (lstnumber.-40.3) 6078 0 R (lstnumber.-40.4) 6079 0 R (lstnumber.-40.5) 6080 0 R]
+9765 0 obj <<
+/Names [(lstnumber.-40.2) 6045 0 R (lstnumber.-40.20) 6063 0 R (lstnumber.-40.21) 6064 0 R (lstnumber.-40.3) 6046 0 R (lstnumber.-40.4) 6047 0 R (lstnumber.-40.5) 6048 0 R]
 /Limits [(lstnumber.-40.2) (lstnumber.-40.5)]
 >> endobj
-9797 0 obj <<
-/Names [(lstnumber.-40.6) 6081 0 R (lstnumber.-40.7) 6082 0 R (lstnumber.-40.8) 6083 0 R (lstnumber.-40.9) 6084 0 R (lstnumber.-41.1) 6432 0 R (lstnumber.-41.10) 6441 0 R]
+9766 0 obj <<
+/Names [(lstnumber.-40.6) 6049 0 R (lstnumber.-40.7) 6050 0 R (lstnumber.-40.8) 6051 0 R (lstnumber.-40.9) 6052 0 R (lstnumber.-41.1) 6400 0 R (lstnumber.-41.10) 6409 0 R]
 /Limits [(lstnumber.-40.6) (lstnumber.-41.10)]
 >> endobj
-9798 0 obj <<
-/Names [(lstnumber.-41.11) 6442 0 R (lstnumber.-41.12) 6443 0 R (lstnumber.-41.13) 6444 0 R (lstnumber.-41.14) 6445 0 R (lstnumber.-41.15) 6446 0 R (lstnumber.-41.16) 6447 0 R]
+9767 0 obj <<
+/Names [(lstnumber.-41.11) 6410 0 R (lstnumber.-41.12) 6411 0 R (lstnumber.-41.13) 6412 0 R (lstnumber.-41.14) 6413 0 R (lstnumber.-41.15) 6414 0 R (lstnumber.-41.16) 6415 0 R]
 /Limits [(lstnumber.-41.11) (lstnumber.-41.16)]
 >> endobj
-9799 0 obj <<
-/Names [(lstnumber.-41.17) 6448 0 R (lstnumber.-41.2) 6433 0 R (lstnumber.-41.3) 6434 0 R (lstnumber.-41.4) 6435 0 R (lstnumber.-41.5) 6436 0 R (lstnumber.-41.6) 6437 0 R]
+9768 0 obj <<
+/Names [(lstnumber.-41.17) 6416 0 R (lstnumber.-41.2) 6401 0 R (lstnumber.-41.3) 6402 0 R (lstnumber.-41.4) 6403 0 R (lstnumber.-41.5) 6404 0 R (lstnumber.-41.6) 6405 0 R]
 /Limits [(lstnumber.-41.17) (lstnumber.-41.6)]
 >> endobj
-9800 0 obj <<
-/Names [(lstnumber.-41.7) 6438 0 R (lstnumber.-41.8) 6439 0 R (lstnumber.-41.9) 6440 0 R (lstnumber.-5.1) 2490 0 R (lstnumber.-5.10) 2500 0 R (lstnumber.-5.11) 2501 0 R]
+9769 0 obj <<
+/Names [(lstnumber.-41.7) 6406 0 R (lstnumber.-41.8) 6407 0 R (lstnumber.-41.9) 6408 0 R (lstnumber.-5.1) 2485 0 R (lstnumber.-5.10) 2495 0 R (lstnumber.-5.11) 2496 0 R]
 /Limits [(lstnumber.-41.7) (lstnumber.-5.11)]
 >> endobj
-9801 0 obj <<
-/Names [(lstnumber.-5.12) 2502 0 R (lstnumber.-5.13) 2503 0 R (lstnumber.-5.14) 2504 0 R (lstnumber.-5.15) 2505 0 R (lstnumber.-5.16) 2506 0 R (lstnumber.-5.17) 2507 0 R]
+9770 0 obj <<
+/Names [(lstnumber.-5.12) 2497 0 R (lstnumber.-5.13) 2498 0 R (lstnumber.-5.14) 2499 0 R (lstnumber.-5.15) 2500 0 R (lstnumber.-5.16) 2501 0 R (lstnumber.-5.17) 2502 0 R]
 /Limits [(lstnumber.-5.12) (lstnumber.-5.17)]
 >> endobj
-9802 0 obj <<
-/Names [(lstnumber.-5.18) 2508 0 R (lstnumber.-5.19) 2509 0 R (lstnumber.-5.2) 2491 0 R (lstnumber.-5.20) 2510 0 R (lstnumber.-5.21) 2511 0 R (lstnumber.-5.22) 2512 0 R]
+9771 0 obj <<
+/Names [(lstnumber.-5.18) 2503 0 R (lstnumber.-5.19) 2504 0 R (lstnumber.-5.2) 2486 0 R (lstnumber.-5.20) 2505 0 R (lstnumber.-5.21) 2506 0 R (lstnumber.-5.22) 2507 0 R]
 /Limits [(lstnumber.-5.18) (lstnumber.-5.22)]
 >> endobj
-9803 0 obj <<
-/Names [(lstnumber.-5.3) 2492 0 R (lstnumber.-5.4) 2493 0 R (lstnumber.-5.5) 2495 0 R (lstnumber.-5.6) 2496 0 R (lstnumber.-5.7) 2497 0 R (lstnumber.-5.8) 2498 0 R]
+9772 0 obj <<
+/Names [(lstnumber.-5.3) 2487 0 R (lstnumber.-5.4) 2488 0 R (lstnumber.-5.5) 2490 0 R (lstnumber.-5.6) 2491 0 R (lstnumber.-5.7) 2492 0 R (lstnumber.-5.8) 2493 0 R]
 /Limits [(lstnumber.-5.3) (lstnumber.-5.8)]
 >> endobj
-9804 0 obj <<
-/Names [(lstnumber.-5.9) 2499 0 R (lstnumber.-6.1) 2518 0 R (lstnumber.-6.10) 2527 0 R (lstnumber.-6.11) 2528 0 R (lstnumber.-6.12) 2529 0 R (lstnumber.-6.13) 2530 0 R]
+9773 0 obj <<
+/Names [(lstnumber.-5.9) 2494 0 R (lstnumber.-6.1) 2513 0 R (lstnumber.-6.10) 2522 0 R (lstnumber.-6.11) 2523 0 R (lstnumber.-6.12) 2524 0 R (lstnumber.-6.13) 2525 0 R]
 /Limits [(lstnumber.-5.9) (lstnumber.-6.13)]
 >> endobj
-9805 0 obj <<
-/Names [(lstnumber.-6.14) 2531 0 R (lstnumber.-6.15) 2532 0 R (lstnumber.-6.16) 2533 0 R (lstnumber.-6.17) 2534 0 R (lstnumber.-6.18) 2535 0 R (lstnumber.-6.19) 2536 0 R]
+9774 0 obj <<
+/Names [(lstnumber.-6.14) 2526 0 R (lstnumber.-6.15) 2527 0 R (lstnumber.-6.16) 2528 0 R (lstnumber.-6.17) 2529 0 R (lstnumber.-6.18) 2530 0 R (lstnumber.-6.19) 2531 0 R]
 /Limits [(lstnumber.-6.14) (lstnumber.-6.19)]
 >> endobj
-9806 0 obj <<
-/Names [(lstnumber.-6.2) 2519 0 R (lstnumber.-6.20) 2537 0 R (lstnumber.-6.21) 2538 0 R (lstnumber.-6.22) 2539 0 R (lstnumber.-6.23) 2540 0 R (lstnumber.-6.24) 2541 0 R]
+9775 0 obj <<
+/Names [(lstnumber.-6.2) 2514 0 R (lstnumber.-6.20) 2532 0 R (lstnumber.-6.21) 2533 0 R (lstnumber.-6.22) 2534 0 R (lstnumber.-6.23) 2535 0 R (lstnumber.-6.24) 2536 0 R]
 /Limits [(lstnumber.-6.2) (lstnumber.-6.24)]
 >> endobj
-9807 0 obj <<
-/Names [(lstnumber.-6.25) 2542 0 R (lstnumber.-6.26) 2543 0 R (lstnumber.-6.27) 2544 0 R (lstnumber.-6.3) 2520 0 R (lstnumber.-6.4) 2521 0 R (lstnumber.-6.5) 2522 0 R]
+9776 0 obj <<
+/Names [(lstnumber.-6.25) 2537 0 R (lstnumber.-6.26) 2538 0 R (lstnumber.-6.27) 2539 0 R (lstnumber.-6.3) 2515 0 R (lstnumber.-6.4) 2516 0 R (lstnumber.-6.5) 2517 0 R]
 /Limits [(lstnumber.-6.25) (lstnumber.-6.5)]
 >> endobj
-9808 0 obj <<
-/Names [(lstnumber.-6.6) 2523 0 R (lstnumber.-6.7) 2524 0 R (lstnumber.-6.8) 2525 0 R (lstnumber.-6.9) 2526 0 R (massive-dhcp) 3105 0 R (massive-nameda) 3108 0 R]
+9777 0 obj <<
+/Names [(lstnumber.-6.6) 2518 0 R (lstnumber.-6.7) 2519 0 R (lstnumber.-6.8) 2520 0 R (lstnumber.-6.9) 2521 0 R (massive-dhcp) 3096 0 R (massive-nameda) 3099 0 R]
 /Limits [(lstnumber.-6.6) (massive-nameda)]
 >> endobj
-9809 0 obj <<
-/Names [(massive-namedb) 3109 0 R (massive-namedc) 3110 0 R (namedrscfiles) 2716 0 R (ntmigration) 2349 0 R (nullconnect) 6981 0 R (nw4migration) 5767 0 R]
+9778 0 obj <<
+/Names [(massive-namedb) 3100 0 R (massive-namedc) 3101 0 R (namedrscfiles) 2709 0 R (ntmigration) 2346 0 R (nullconnect) 6949 0 R (nw4migration) 5735 0 R]
 /Limits [(massive-namedb) (nw4migration)]
 >> endobj
-9810 0 obj <<
-/Names [(oldapreq) 3652 0 R (page.1) 1961 0 R (page.10) 2040 0 R (page.100) 2992 0 R (page.101) 2997 0 R (page.102) 3001 0 R]
+9779 0 obj <<
+/Names [(oldapreq) 3638 0 R (page.1) 1961 0 R (page.10) 2040 0 R (page.100) 2985 0 R (page.101) 2990 0 R (page.102) 2994 0 R]
 /Limits [(oldapreq) (page.102)]
 >> endobj
-9811 0 obj <<
-/Names [(page.103) 3005 0 R (page.104) 3009 0 R (page.105) 3016 0 R (page.106) 3024 0 R (page.107) 3030 0 R (page.108) 3036 0 R]
+9780 0 obj <<
+/Names [(page.103) 2998 0 R (page.104) 3002 0 R (page.105) 3009 0 R (page.106) 3017 0 R (page.107) 3023 0 R (page.108) 3029 0 R]
 /Limits [(page.103) (page.108)]
 >> endobj
-9812 0 obj <<
-/Names [(page.109) 3043 0 R (page.11) 2050 0 R (page.110) 3071 0 R (page.111) 3083 0 R (page.112) 3096 0 R (page.113) 3121 0 R]
+9781 0 obj <<
+/Names [(page.109) 3036 0 R (page.11) 2050 0 R (page.110) 3064 0 R (page.111) 3076 0 R (page.112) 3087 0 R (page.113) 3112 0 R]
 /Limits [(page.109) (page.113)]
 >> endobj
-9813 0 obj <<
-/Names [(page.114) 3128 0 R (page.115) 3138 0 R (page.116) 3146 0 R (page.117) 3154 0 R (page.118) 3165 0 R (page.119) 3175 0 R]
+9782 0 obj <<
+/Names [(page.114) 3119 0 R (page.115) 3129 0 R (page.116) 3137 0 R (page.117) 3145 0 R (page.118) 3156 0 R (page.119) 3166 0 R]
 /Limits [(page.114) (page.119)]
 >> endobj
-9814 0 obj <<
-/Names [(page.12) 2058 0 R (page.120) 3188 0 R (page.121) 3198 0 R (page.122) 3232 0 R (page.123) 3263 0 R (page.124) 3302 0 R]
+9783 0 obj <<
+/Names [(page.12) 2058 0 R (page.120) 3179 0 R (page.121) 3189 0 R (page.122) 3223 0 R (page.123) 3254 0 R (page.124) 3293 0 R]
 /Limits [(page.12) (page.124)]
 >> endobj
-9815 0 obj <<
-/Names [(page.125) 3332 0 R (page.126) 3343 0 R (page.127) 3359 0 R (page.128) 3368 0 R (page.129) 3374 0 R (page.13) 2071 0 R]
+9784 0 obj <<
+/Names [(page.125) 3323 0 R (page.126) 3334 0 R (page.127) 3350 0 R (page.128) 3359 0 R (page.129) 3365 0 R (page.13) 2071 0 R]
 /Limits [(page.125) (page.13)]
 >> endobj
-9816 0 obj <<
-/Names [(page.130) 3378 0 R (page.131) 3383 0 R (page.132) 3387 0 R (page.133) 3391 0 R (page.134) 3395 0 R (page.135) 3399 0 R]
+9785 0 obj <<
+/Names [(page.130) 3369 0 R (page.131) 3374 0 R (page.132) 3378 0 R (page.133) 3382 0 R (page.134) 3386 0 R (page.135) 3390 0 R]
 /Limits [(page.130) (page.135)]
 >> endobj
-9817 0 obj <<
-/Names [(page.136) 3403 0 R (page.137) 3408 0 R (page.138) 3412 0 R (page.139) 3416 0 R (page.14) 2080 0 R (page.140) 3420 0 R]
+9786 0 obj <<
+/Names [(page.136) 3394 0 R (page.137) 3399 0 R (page.138) 3403 0 R (page.139) 3407 0 R (page.14) 2080 0 R (page.140) 3411 0 R]
 /Limits [(page.136) (page.140)]
 >> endobj
-9818 0 obj <<
-/Names [(page.141) 3424 0 R (page.142) 3428 0 R (page.143) 3435 0 R (page.144) 3439 0 R (page.145) 3448 0 R (page.146) 3452 0 R]
+9787 0 obj <<
+/Names [(page.141) 3415 0 R (page.142) 3419 0 R (page.143) 3426 0 R (page.144) 3430 0 R (page.145) 3439 0 R (page.146) 3443 0 R]
 /Limits [(page.141) (page.146)]
 >> endobj
-9819 0 obj <<
-/Names [(page.147) 3456 0 R (page.148) 3462 0 R (page.149) 3469 0 R (page.15) 2094 0 R (page.150) 3479 0 R (page.151) 3491 0 R]
+9788 0 obj <<
+/Names [(page.147) 3447 0 R (page.148) 3453 0 R (page.149) 3460 0 R (page.15) 2094 0 R (page.150) 3470 0 R (page.151) 3482 0 R]
 /Limits [(page.147) (page.151)]
 >> endobj
-9820 0 obj <<
-/Names [(page.152) 3497 0 R (page.153) 3505 0 R (page.154) 3517 0 R (page.155) 3524 0 R (page.156) 3531 0 R (page.157) 3540 0 R]
+9789 0 obj <<
+/Names [(page.152) 3488 0 R (page.153) 3496 0 R (page.154) 3506 0 R (page.155) 3513 0 R (page.156) 3520 0 R (page.157) 3529 0 R]
 /Limits [(page.152) (page.157)]
 >> endobj
-9821 0 obj <<
-/Names [(page.158) 3546 0 R (page.159) 3553 0 R (page.16) 2131 0 R (page.160) 3563 0 R (page.161) 3570 0 R (page.162) 3577 0 R]
+9790 0 obj <<
+/Names [(page.158) 3535 0 R (page.159) 3542 0 R (page.16) 2131 0 R (page.160) 3552 0 R (page.161) 3559 0 R (page.162) 3566 0 R]
 /Limits [(page.158) (page.162)]
 >> endobj
-9822 0 obj <<
-/Names [(page.163) 3582 0 R (page.164) 3586 0 R (page.165) 3593 0 R (page.166) 3602 0 R (page.167) 3630 0 R (page.168) 3650 0 R]
+9791 0 obj <<
+/Names [(page.163) 3571 0 R (page.164) 3575 0 R (page.165) 3582 0 R (page.166) 3591 0 R (page.167) 3619 0 R (page.168) 3636 0 R]
 /Limits [(page.163) (page.168)]
 >> endobj
-9823 0 obj <<
-/Names [(page.169) 3658 0 R (page.17) 2174 0 R (page.170) 3669 0 R (page.171) 3677 0 R (page.172) 3685 0 R (page.173) 3694 0 R]
+9792 0 obj <<
+/Names [(page.169) 3644 0 R (page.17) 2174 0 R (page.170) 3655 0 R (page.171) 3663 0 R (page.172) 3671 0 R (page.173) 3680 0 R]
 /Limits [(page.169) (page.173)]
 >> endobj
-9824 0 obj <<
-/Names [(page.174) 3705 0 R (page.175) 3712 0 R (page.176) 3721 0 R (page.177) 3726 0 R (page.178) 3735 0 R (page.179) 3746 0 R]
+9793 0 obj <<
+/Names [(page.174) 3691 0 R (page.175) 3698 0 R (page.176) 3707 0 R (page.177) 3712 0 R (page.178) 3721 0 R (page.179) 3732 0 R]
 /Limits [(page.174) (page.179)]
 >> endobj
-9825 0 obj <<
-/Names [(page.18) 2188 0 R (page.180) 3754 0 R (page.181) 3760 0 R (page.182) 3764 0 R (page.183) 3772 0 R (page.184) 3778 0 R]
+9794 0 obj <<
+/Names [(page.18) 2188 0 R (page.180) 3740 0 R (page.181) 3746 0 R (page.182) 3750 0 R (page.183) 3758 0 R (page.184) 3764 0 R]
 /Limits [(page.18) (page.184)]
 >> endobj
-9826 0 obj <<
-/Names [(page.185) 3784 0 R (page.186) 3791 0 R (page.187) 3799 0 R (page.188) 3805 0 R (page.189) 3811 0 R (page.19) 2205 0 R]
+9795 0 obj <<
+/Names [(page.185) 3770 0 R (page.186) 3777 0 R (page.187) 3785 0 R (page.188) 3791 0 R (page.189) 3797 0 R (page.19) 2205 0 R]
 /Limits [(page.185) (page.19)]
 >> endobj
-9827 0 obj <<
-/Names [(page.190) 3817 0 R (page.191) 3824 0 R (page.192) 3831 0 R (page.193) 3837 0 R (page.194) 3843 0 R (page.195) 3850 0 R]
+9796 0 obj <<
+/Names [(page.190) 3803 0 R (page.191) 3810 0 R (page.192) 3817 0 R (page.193) 3823 0 R (page.194) 3829 0 R (page.195) 3836 0 R]
 /Limits [(page.190) (page.195)]
 >> endobj
-9828 0 obj <<
-/Names [(page.196) 3859 0 R (page.197) 3870 0 R (page.198) 3885 0 R (page.199) 3896 0 R (page.2) 1968 0 R (page.20) 2214 0 R]
+9797 0 obj <<
+/Names [(page.196) 3845 0 R (page.197) 3856 0 R (page.198) 3871 0 R (page.199) 3882 0 R (page.2) 1968 0 R (page.20) 2214 0 R]
 /Limits [(page.196) (page.20)]
 >> endobj
-9829 0 obj <<
-/Names [(page.200) 3901 0 R (page.201) 3908 0 R (page.202) 3914 0 R (page.203) 3925 0 R (page.204) 3935 0 R (page.205) 3941 0 R]
+9798 0 obj <<
+/Names [(page.200) 3887 0 R (page.201) 3894 0 R (page.202) 3900 0 R (page.203) 3911 0 R (page.204) 3921 0 R (page.205) 3927 0 R]
 /Limits [(page.200) (page.205)]
 >> endobj
-9830 0 obj <<
-/Names [(page.206) 3947 0 R (page.207) 3952 0 R (page.208) 3961 0 R (page.209) 3969 0 R (page.21) 2228 0 R (page.210) 3983 0 R]
+9799 0 obj <<
+/Names [(page.206) 3933 0 R (page.207) 3938 0 R (page.208) 3947 0 R (page.209) 3955 0 R (page.21) 2228 0 R (page.210) 3969 0 R]
 /Limits [(page.206) (page.210)]
 >> endobj
-9831 0 obj <<
-/Names [(page.211) 3993 0 R (page.212) 3999 0 R (page.213) 4012 0 R (page.214) 4019 0 R (page.215) 4026 0 R (page.216) 4038 0 R]
+9800 0 obj <<
+/Names [(page.211) 3979 0 R (page.212) 3985 0 R (page.213) 3998 0 R (page.214) 4005 0 R (page.215) 4012 0 R (page.216) 4024 0 R]
 /Limits [(page.211) (page.216)]
 >> endobj
-9832 0 obj <<
-/Names [(page.217) 4048 0 R (page.218) 4054 0 R (page.219) 4059 0 R (page.22) 2243 0 R (page.220) 4064 0 R (page.221) 4069 0 R]
+9801 0 obj <<
+/Names [(page.217) 4034 0 R (page.218) 4040 0 R (page.219) 4045 0 R (page.22) 2240 0 R (page.220) 4050 0 R (page.221) 4055 0 R]
 /Limits [(page.217) (page.221)]
 >> endobj
-9833 0 obj <<
-/Names [(page.222) 4073 0 R (page.223) 4077 0 R (page.224) 4081 0 R (page.225) 4086 0 R (page.226) 4090 0 R (page.227) 4095 0 R]
+9802 0 obj <<
+/Names [(page.222) 4059 0 R (page.223) 4063 0 R (page.224) 4067 0 R (page.225) 4072 0 R (page.226) 4076 0 R (page.227) 4081 0 R]
 /Limits [(page.222) (page.227)]
 >> endobj
-9834 0 obj <<
-/Names [(page.228) 4127 0 R (page.229) 4150 0 R (page.23) 2251 0 R (page.230) 4188 0 R (page.231) 4226 0 R (page.232) 4254 0 R]
+9803 0 obj <<
+/Names [(page.228) 4113 0 R (page.229) 4136 0 R (page.23) 2248 0 R (page.230) 4174 0 R (page.231) 4212 0 R (page.232) 4240 0 R]
 /Limits [(page.228) (page.232)]
 >> endobj
-9835 0 obj <<
-/Names [(page.233) 4287 0 R (page.234) 4293 0 R (page.235) 4300 0 R (page.236) 4306 0 R (page.237) 4311 0 R (page.238) 4317 0 R]
+9804 0 obj <<
+/Names [(page.233) 4273 0 R (page.234) 4279 0 R (page.235) 4286 0 R (page.236) 4292 0 R (page.237) 4297 0 R (page.238) 4303 0 R]
 /Limits [(page.233) (page.238)]
 >> endobj
-9836 0 obj <<
-/Names [(page.239) 4323 0 R (page.24) 2263 0 R (page.240) 4327 0 R (page.241) 4335 0 R (page.242) 4342 0 R (page.243) 4348 0 R]
+9805 0 obj <<
+/Names [(page.239) 4309 0 R (page.24) 2260 0 R (page.240) 4313 0 R (page.241) 4321 0 R (page.242) 4328 0 R (page.243) 4334 0 R]
 /Limits [(page.239) (page.243)]
 >> endobj
-9837 0 obj <<
-/Names [(page.244) 4366 0 R (page.245) 4392 0 R (page.246) 4415 0 R (page.247) 4424 0 R (page.248) 4434 0 R (page.249) 4443 0 R]
+9806 0 obj <<
+/Names [(page.244) 4350 0 R (page.245) 4371 0 R (page.246) 4389 0 R (page.247) 4398 0 R (page.248) 4408 0 R (page.249) 4417 0 R]
 /Limits [(page.244) (page.249)]
 >> endobj
-9838 0 obj <<
-/Names [(page.25) 2292 0 R (page.250) 4452 0 R (page.251) 4463 0 R (page.252) 4470 0 R (page.253) 4475 0 R (page.254) 4479 0 R]
+9807 0 obj <<
+/Names [(page.25) 2289 0 R (page.250) 4426 0 R (page.251) 4437 0 R (page.252) 4444 0 R (page.253) 4449 0 R (page.254) 4453 0 R]
 /Limits [(page.25) (page.254)]
 >> endobj
-9839 0 obj <<
-/Names [(page.255) 4483 0 R (page.256) 4487 0 R (page.257) 4492 0 R (page.258) 4538 0 R (page.259) 4569 0 R (page.26) 2298 0 R]
+9808 0 obj <<
+/Names [(page.255) 4457 0 R (page.256) 4461 0 R (page.257) 4466 0 R (page.258) 4512 0 R (page.259) 4543 0 R (page.26) 2295 0 R]
 /Limits [(page.255) (page.26)]
 >> endobj
-9840 0 obj <<
-/Names [(page.260) 4601 0 R (page.261) 4647 0 R (page.262) 4688 0 R (page.263) 4693 0 R (page.264) 4697 0 R (page.265) 4707 0 R]
+9809 0 obj <<
+/Names [(page.260) 4575 0 R (page.261) 4621 0 R (page.262) 4662 0 R (page.263) 4667 0 R (page.264) 4671 0 R (page.265) 4681 0 R]
 /Limits [(page.260) (page.265)]
 >> endobj
-9841 0 obj <<
-/Names [(page.266) 4714 0 R (page.267) 4722 0 R (page.268) 4730 0 R (page.269) 4735 0 R (page.27) 2302 0 R (page.270) 4741 0 R]
+9810 0 obj <<
+/Names [(page.266) 4688 0 R (page.267) 4696 0 R (page.268) 4704 0 R (page.269) 4709 0 R (page.27) 2299 0 R (page.270) 4715 0 R]
 /Limits [(page.266) (page.270)]
 >> endobj
-9842 0 obj <<
-/Names [(page.271) 4745 0 R (page.272) 4749 0 R (page.273) 4756 0 R (page.274) 4763 0 R (page.275) 4773 0 R (page.276) 4787 0 R]
+9811 0 obj <<
+/Names [(page.271) 4719 0 R (page.272) 4723 0 R (page.273) 4730 0 R (page.274) 4737 0 R (page.275) 4747 0 R (page.276) 4759 0 R]
 /Limits [(page.271) (page.276)]
 >> endobj
-9843 0 obj <<
-/Names [(page.277) 4794 0 R (page.278) 4799 0 R (page.279) 4804 0 R (page.28) 2306 0 R (page.280) 4808 0 R (page.281) 4815 0 R]
+9812 0 obj <<
+/Names [(page.277) 4766 0 R (page.278) 4771 0 R (page.279) 4776 0 R (page.28) 2303 0 R (page.280) 4780 0 R (page.281) 4787 0 R]
 /Limits [(page.277) (page.281)]
 >> endobj
-9844 0 obj <<
-/Names [(page.282) 4823 0 R (page.283) 4829 0 R (page.284) 4834 0 R (page.285) 4847 0 R (page.286) 4854 0 R (page.287) 4866 0 R]
+9813 0 obj <<
+/Names [(page.282) 4795 0 R (page.283) 4801 0 R (page.284) 4806 0 R (page.285) 4819 0 R (page.286) 4826 0 R (page.287) 4836 0 R]
 /Limits [(page.282) (page.287)]
 >> endobj
-9845 0 obj <<
-/Names [(page.288) 4871 0 R (page.289) 4878 0 R (page.29) 2312 0 R (page.290) 4889 0 R (page.291) 4895 0 R (page.292) 4901 0 R]
+9814 0 obj <<
+/Names [(page.288) 4841 0 R (page.289) 4848 0 R (page.29) 2309 0 R (page.290) 4859 0 R (page.291) 4865 0 R (page.292) 4871 0 R]
 /Limits [(page.288) (page.292)]
 >> endobj
-9846 0 obj <<
-/Names [(page.293) 4906 0 R (page.294) 4912 0 R (page.295) 4916 0 R (page.296) 4920 0 R (page.297) 4925 0 R (page.298) 4930 0 R]
+9815 0 obj <<
+/Names [(page.293) 4876 0 R (page.294) 4882 0 R (page.295) 4886 0 R (page.296) 4890 0 R (page.297) 4895 0 R (page.298) 4900 0 R]
 /Limits [(page.293) (page.298)]
 >> endobj
-9847 0 obj <<
-/Names [(page.299) 4936 0 R (page.3) 1972 0 R (page.30) 2317 0 R (page.300) 4946 0 R (page.301) 4952 0 R (page.302) 4957 0 R]
+9816 0 obj <<
+/Names [(page.299) 4906 0 R (page.3) 1972 0 R (page.30) 2314 0 R (page.300) 4916 0 R (page.301) 4922 0 R (page.302) 4927 0 R]
 /Limits [(page.299) (page.302)]
 >> endobj
-9848 0 obj <<
-/Names [(page.303) 4966 0 R (page.304) 4976 0 R (page.305) 4987 0 R (page.306) 4996 0 R (page.307) 5004 0 R (page.308) 5020 0 R]
+9817 0 obj <<
+/Names [(page.303) 4936 0 R (page.304) 4946 0 R (page.305) 4957 0 R (page.306) 4966 0 R (page.307) 4974 0 R (page.308) 4990 0 R]
 /Limits [(page.303) (page.308)]
 >> endobj
-9849 0 obj <<
-/Names [(page.309) 5031 0 R (page.31) 2325 0 R (page.310) 5037 0 R (page.311) 5041 0 R (page.312) 5045 0 R (page.313) 5049 0 R]
+9818 0 obj <<
+/Names [(page.309) 5001 0 R (page.31) 2322 0 R (page.310) 5007 0 R (page.311) 5011 0 R (page.312) 5015 0 R (page.313) 5019 0 R]
 /Limits [(page.309) (page.313)]
 >> endobj
-9850 0 obj <<
-/Names [(page.314) 5053 0 R (page.315) 5101 0 R (page.316) 5105 0 R (page.317) 5109 0 R (page.318) 5152 0 R (page.319) 5194 0 R]
+9819 0 obj <<
+/Names [(page.314) 5023 0 R (page.315) 5071 0 R (page.316) 5075 0 R (page.317) 5079 0 R (page.318) 5122 0 R (page.319) 5164 0 R]
 /Limits [(page.314) (page.319)]
 >> endobj
-9851 0 obj <<
-/Names [(page.32) 2332 0 R (page.320) 5235 0 R (page.321) 5275 0 R (page.322) 5293 0 R (page.323) 5298 0 R (page.324) 5303 0 R]
+9820 0 obj <<
+/Names [(page.32) 2329 0 R (page.320) 5205 0 R (page.321) 5245 0 R (page.322) 5263 0 R (page.323) 5268 0 R (page.324) 5273 0 R]
 /Limits [(page.32) (page.324)]
 >> endobj
-9852 0 obj <<
-/Names [(page.325) 5308 0 R (page.326) 5314 0 R (page.327) 5319 0 R (page.328) 5323 0 R (page.329) 5327 0 R (page.33) 2345 0 R]
+9821 0 obj <<
+/Names [(page.325) 5278 0 R (page.326) 5284 0 R (page.327) 5289 0 R (page.328) 5293 0 R (page.329) 5297 0 R (page.33) 2342 0 R]
 /Limits [(page.325) (page.33)]
 >> endobj
-9853 0 obj <<
-/Names [(page.330) 5332 0 R (page.331) 5338 0 R (page.332) 5343 0 R (page.333) 5350 0 R (page.334) 5358 0 R (page.335) 5373 0 R]
+9822 0 obj <<
+/Names [(page.330) 5302 0 R (page.331) 5308 0 R (page.332) 5313 0 R (page.333) 5320 0 R (page.334) 5328 0 R (page.335) 5343 0 R]
 /Limits [(page.330) (page.335)]
 >> endobj
-9854 0 obj <<
-/Names [(page.336) 5382 0 R (page.337) 5387 0 R (page.338) 5391 0 R (page.339) 5396 0 R (page.34) 2354 0 R (page.340) 5401 0 R]
+9823 0 obj <<
+/Names [(page.336) 5352 0 R (page.337) 5357 0 R (page.338) 5361 0 R (page.339) 5366 0 R (page.34) 2351 0 R (page.340) 5371 0 R]
 /Limits [(page.336) (page.340)]
 >> endobj
-9855 0 obj <<
-/Names [(page.341) 5406 0 R (page.342) 5415 0 R (page.343) 5421 0 R (page.344) 5429 0 R (page.345) 5434 0 R (page.346) 5443 0 R]
+9824 0 obj <<
+/Names [(page.341) 5376 0 R (page.342) 5385 0 R (page.343) 5391 0 R (page.344) 5399 0 R (page.345) 5404 0 R (page.346) 5413 0 R]
 /Limits [(page.341) (page.346)]
 >> endobj
-9856 0 obj <<
-/Names [(page.347) 5448 0 R (page.348) 5453 0 R (page.349) 5461 0 R (page.35) 2372 0 R (page.350) 5468 0 R (page.351) 5480 0 R]
+9825 0 obj <<
+/Names [(page.347) 5418 0 R (page.348) 5423 0 R (page.349) 5431 0 R (page.35) 2366 0 R (page.350) 5438 0 R (page.351) 5448 0 R]
 /Limits [(page.347) (page.351)]
 >> endobj
-9857 0 obj <<
-/Names [(page.352) 5490 0 R (page.353) 5499 0 R (page.354) 5505 0 R (page.355) 5513 0 R (page.356) 5527 0 R (page.357) 5534 0 R]
+9826 0 obj <<
+/Names [(page.352) 5458 0 R (page.353) 5467 0 R (page.354) 5473 0 R (page.355) 5481 0 R (page.356) 5495 0 R (page.357) 5502 0 R]
 /Limits [(page.352) (page.357)]
 >> endobj
-9858 0 obj <<
-/Names [(page.358) 5538 0 R (page.359) 5543 0 R (page.36) 2384 0 R (page.360) 5551 0 R (page.361) 5557 0 R (page.362) 5563 0 R]
+9827 0 obj <<
+/Names [(page.358) 5506 0 R (page.359) 5511 0 R (page.36) 2379 0 R (page.360) 5519 0 R (page.361) 5525 0 R (page.362) 5531 0 R]
 /Limits [(page.358) (page.362)]
 >> endobj
-9859 0 obj <<
-/Names [(page.363) 5571 0 R (page.364) 5578 0 R (page.365) 5584 0 R (page.366) 5592 0 R (page.367) 5597 0 R (page.368) 5602 0 R]
+9828 0 obj <<
+/Names [(page.363) 5539 0 R (page.364) 5546 0 R (page.365) 5552 0 R (page.366) 5560 0 R (page.367) 5565 0 R (page.368) 5570 0 R]
 /Limits [(page.363) (page.368)]
 >> endobj
-9860 0 obj <<
-/Names [(page.369) 5610 0 R (page.37) 2390 0 R (page.370) 5617 0 R (page.371) 5622 0 R (page.372) 5628 0 R (page.373) 5636 0 R]
+9829 0 obj <<
+/Names [(page.369) 5578 0 R (page.37) 2385 0 R (page.370) 5585 0 R (page.371) 5590 0 R (page.372) 5596 0 R (page.373) 5604 0 R]
 /Limits [(page.369) (page.373)]
 >> endobj
-9861 0 obj <<
-/Names [(page.374) 5640 0 R (page.375) 5645 0 R (page.376) 5649 0 R (page.377) 5653 0 R (page.378) 5699 0 R (page.379) 5740 0 R]
+9830 0 obj <<
+/Names [(page.374) 5608 0 R (page.375) 5613 0 R (page.376) 5617 0 R (page.377) 5621 0 R (page.378) 5667 0 R (page.379) 5708 0 R]
 /Limits [(page.374) (page.379)]
 >> endobj
-9862 0 obj <<
-/Names [(page.38) 2396 0 R (page.380) 5744 0 R (page.381) 5750 0 R (page.382) 5754 0 R (page.383) 5758 0 R (page.384) 5762 0 R]
+9831 0 obj <<
+/Names [(page.38) 2391 0 R (page.380) 5712 0 R (page.381) 5718 0 R (page.382) 5722 0 R (page.383) 5726 0 R (page.384) 5730 0 R]
 /Limits [(page.38) (page.384)]
 >> endobj
-9863 0 obj <<
-/Names [(page.385) 5766 0 R (page.386) 5771 0 R (page.387) 5778 0 R (page.388) 5784 0 R (page.389) 5792 0 R (page.39) 2407 0 R]
+9832 0 obj <<
+/Names [(page.385) 5734 0 R (page.386) 5739 0 R (page.387) 5746 0 R (page.388) 5752 0 R (page.389) 5760 0 R (page.39) 2402 0 R]
 /Limits [(page.385) (page.39)]
 >> endobj
-9864 0 obj <<
-/Names [(page.390) 5799 0 R (page.391) 5805 0 R (page.392) 5810 0 R (page.393) 5815 0 R (page.394) 5819 0 R (page.395) 5825 0 R]
+9833 0 obj <<
+/Names [(page.390) 5767 0 R (page.391) 5773 0 R (page.392) 5778 0 R (page.393) 5783 0 R (page.394) 5787 0 R (page.395) 5793 0 R]
 /Limits [(page.390) (page.395)]
 >> endobj
-9865 0 obj <<
-/Names [(page.396) 5834 0 R (page.397) 5849 0 R (page.398) 5855 0 R (page.399) 5860 0 R (page.4) 1981 0 R (page.40) 2417 0 R]
+9834 0 obj <<
+/Names [(page.396) 5802 0 R (page.397) 5817 0 R (page.398) 5823 0 R (page.399) 5828 0 R (page.4) 1981 0 R (page.40) 2412 0 R]
 /Limits [(page.396) (page.40)]
 >> endobj
-9866 0 obj <<
-/Names [(page.400) 5864 0 R (page.401) 5868 0 R (page.402) 5873 0 R (page.403) 5878 0 R (page.404) 5883 0 R (page.405) 5895 0 R]
+9835 0 obj <<
+/Names [(page.400) 5832 0 R (page.401) 5836 0 R (page.402) 5841 0 R (page.403) 5846 0 R (page.404) 5851 0 R (page.405) 5863 0 R]
 /Limits [(page.400) (page.405)]
 >> endobj
-9867 0 obj <<
-/Names [(page.406) 5900 0 R (page.407) 5904 0 R (page.408) 5908 0 R (page.409) 5912 0 R (page.41) 2422 0 R (page.410) 5955 0 R]
+9836 0 obj <<
+/Names [(page.406) 5868 0 R (page.407) 5872 0 R (page.408) 5876 0 R (page.409) 5880 0 R (page.41) 2417 0 R (page.410) 5923 0 R]
 /Limits [(page.406) (page.410)]
 >> endobj
-9868 0 obj <<
-/Names [(page.411) 5995 0 R (page.412) 6035 0 R (page.413) 6073 0 R (page.414) 6100 0 R (page.415) 6104 0 R (page.416) 6108 0 R]
+9837 0 obj <<
+/Names [(page.411) 5963 0 R (page.412) 6003 0 R (page.413) 6041 0 R (page.414) 6068 0 R (page.415) 6072 0 R (page.416) 6076 0 R]
 /Limits [(page.411) (page.416)]
 >> endobj
-9869 0 obj <<
-/Names [(page.417) 6113 0 R (page.418) 6118 0 R (page.419) 6123 0 R (page.42) 2428 0 R (page.420) 6128 0 R (page.421) 6132 0 R]
+9838 0 obj <<
+/Names [(page.417) 6081 0 R (page.418) 6086 0 R (page.419) 6091 0 R (page.42) 2423 0 R (page.420) 6096 0 R (page.421) 6100 0 R]
 /Limits [(page.417) (page.421)]
 >> endobj
-9870 0 obj <<
-/Names [(page.422) 6137 0 R (page.423) 6143 0 R (page.424) 6148 0 R (page.425) 6159 0 R (page.426) 6166 0 R (page.427) 6171 0 R]
+9839 0 obj <<
+/Names [(page.422) 6105 0 R (page.423) 6111 0 R (page.424) 6116 0 R (page.425) 6127 0 R (page.426) 6134 0 R (page.427) 6139 0 R]
 /Limits [(page.422) (page.427)]
 >> endobj
-9871 0 obj <<
-/Names [(page.428) 6176 0 R (page.429) 6181 0 R (page.43) 2437 0 R (page.430) 6185 0 R (page.431) 6189 0 R (page.432) 6194 0 R]
+9840 0 obj <<
+/Names [(page.428) 6144 0 R (page.429) 6149 0 R (page.43) 2432 0 R (page.430) 6153 0 R (page.431) 6157 0 R (page.432) 6162 0 R]
 /Limits [(page.428) (page.432)]
 >> endobj
-9872 0 obj <<
-/Names [(page.433) 6200 0 R (page.434) 6206 0 R (page.435) 6211 0 R (page.436) 6217 0 R (page.437) 6221 0 R (page.438) 6226 0 R]
+9841 0 obj <<
+/Names [(page.433) 6168 0 R (page.434) 6174 0 R (page.435) 6179 0 R (page.436) 6185 0 R (page.437) 6189 0 R (page.438) 6194 0 R]
 /Limits [(page.433) (page.438)]
 >> endobj
-9873 0 obj <<
-/Names [(page.439) 6234 0 R (page.44) 2451 0 R (page.440) 6240 0 R (page.441) 6246 0 R (page.442) 6258 0 R (page.443) 6267 0 R]
+9842 0 obj <<
+/Names [(page.439) 6202 0 R (page.44) 2446 0 R (page.440) 6208 0 R (page.441) 6214 0 R (page.442) 6226 0 R (page.443) 6235 0 R]
 /Limits [(page.439) (page.443)]
 >> endobj
-9874 0 obj <<
-/Names [(page.444) 6271 0 R (page.445) 6276 0 R (page.446) 6281 0 R (page.447) 6291 0 R (page.448) 6298 0 R (page.449) 6307 0 R]
+9843 0 obj <<
+/Names [(page.444) 6239 0 R (page.445) 6244 0 R (page.446) 6249 0 R (page.447) 6259 0 R (page.448) 6266 0 R (page.449) 6275 0 R]
 /Limits [(page.444) (page.449)]
 >> endobj
-9875 0 obj <<
-/Names [(page.45) 2460 0 R (page.450) 6317 0 R (page.451) 6329 0 R (page.452) 6334 0 R (page.453) 6340 0 R (page.454) 6346 0 R]
+9844 0 obj <<
+/Names [(page.45) 2455 0 R (page.450) 6285 0 R (page.451) 6297 0 R (page.452) 6302 0 R (page.453) 6308 0 R (page.454) 6314 0 R]
 /Limits [(page.45) (page.454)]
 >> endobj
-9876 0 obj <<
-/Names [(page.455) 6350 0 R (page.456) 6354 0 R (page.457) 6359 0 R (page.458) 6365 0 R (page.459) 6370 0 R (page.46) 2466 0 R]
+9845 0 obj <<
+/Names [(page.455) 6318 0 R (page.456) 6322 0 R (page.457) 6327 0 R (page.458) 6333 0 R (page.459) 6338 0 R (page.46) 2461 0 R]
 /Limits [(page.455) (page.46)]
 >> endobj
-9877 0 obj <<
-/Names [(page.460) 6376 0 R (page.461) 6382 0 R (page.462) 6388 0 R (page.463) 6398 0 R (page.464) 6407 0 R (page.465) 6416 0 R]
+9846 0 obj <<
+/Names [(page.460) 6344 0 R (page.461) 6350 0 R (page.462) 6356 0 R (page.463) 6366 0 R (page.464) 6375 0 R (page.465) 6384 0 R]
 /Limits [(page.460) (page.465)]
 >> endobj
-9878 0 obj <<
-/Names [(page.466) 6423 0 R (page.467) 6430 0 R (page.468) 6457 0 R (page.469) 6471 0 R (page.47) 2471 0 R (page.470) 6476 0 R]
+9847 0 obj <<
+/Names [(page.466) 6391 0 R (page.467) 6398 0 R (page.468) 6425 0 R (page.469) 6439 0 R (page.47) 2466 0 R (page.470) 6444 0 R]
 /Limits [(page.466) (page.470)]
 >> endobj
-9879 0 obj <<
-/Names [(page.471) 6482 0 R (page.472) 6486 0 R (page.473) 6490 0 R (page.474) 6497 0 R (page.475) 6504 0 R (page.476) 6509 0 R]
+9848 0 obj <<
+/Names [(page.471) 6450 0 R (page.472) 6454 0 R (page.473) 6458 0 R (page.474) 6465 0 R (page.475) 6472 0 R (page.476) 6477 0 R]
 /Limits [(page.471) (page.476)]
 >> endobj
-9880 0 obj <<
-/Names [(page.477) 6517 0 R (page.478) 6525 0 R (page.479) 6531 0 R (page.48) 2480 0 R (page.480) 6536 0 R (page.481) 6542 0 R]
+9849 0 obj <<
+/Names [(page.477) 6485 0 R (page.478) 6493 0 R (page.479) 6499 0 R (page.48) 2475 0 R (page.480) 6504 0 R (page.481) 6510 0 R]
 /Limits [(page.477) (page.481)]
 >> endobj
-9881 0 obj <<
-/Names [(page.482) 6549 0 R (page.483) 6556 0 R (page.484) 6561 0 R (page.485) 6566 0 R (page.486) 6570 0 R (page.487) 6575 0 R]
+9850 0 obj <<
+/Names [(page.482) 6517 0 R (page.483) 6524 0 R (page.484) 6529 0 R (page.485) 6534 0 R (page.486) 6538 0 R (page.487) 6543 0 R]
 /Limits [(page.482) (page.487)]
 >> endobj
-9882 0 obj <<
-/Names [(page.488) 6583 0 R (page.489) 6589 0 R (page.49) 2484 0 R (page.490) 6594 0 R (page.491) 6602 0 R (page.492) 6616 0 R]
+9851 0 obj <<
+/Names [(page.488) 6551 0 R (page.489) 6557 0 R (page.49) 2479 0 R (page.490) 6562 0 R (page.491) 6570 0 R (page.492) 6584 0 R]
 /Limits [(page.488) (page.492)]
 >> endobj
-9883 0 obj <<
-/Names [(page.493) 6630 0 R (page.494) 6636 0 R (page.495) 6640 0 R (page.496) 6645 0 R (page.497) 6649 0 R (page.498) 6654 0 R]
+9852 0 obj <<
+/Names [(page.493) 6598 0 R (page.494) 6604 0 R (page.495) 6608 0 R (page.496) 6613 0 R (page.497) 6617 0 R (page.498) 6622 0 R]
 /Limits [(page.493) (page.498)]
 >> endobj
-9884 0 obj <<
-/Names [(page.499) 6665 0 R (page.5) 1988 0 R (page.50) 2488 0 R (page.500) 6680 0 R (page.501) 6693 0 R (page.502) 6698 0 R]
+9853 0 obj <<
+/Names [(page.499) 6633 0 R (page.5) 1988 0 R (page.50) 2483 0 R (page.500) 6648 0 R (page.501) 6661 0 R (page.502) 6666 0 R]
 /Limits [(page.499) (page.502)]
 >> endobj
-9885 0 obj <<
-/Names [(page.503) 6703 0 R (page.504) 6710 0 R (page.505) 6717 0 R (page.506) 6723 0 R (page.507) 6738 0 R (page.508) 6753 0 R]
+9854 0 obj <<
+/Names [(page.503) 6671 0 R (page.504) 6678 0 R (page.505) 6685 0 R (page.506) 6691 0 R (page.507) 6706 0 R (page.508) 6721 0 R]
 /Limits [(page.503) (page.508)]
 >> endobj
-9886 0 obj <<
-/Names [(page.509) 6761 0 R (page.51) 2516 0 R (page.510) 6768 0 R (page.511) 6778 0 R (page.512) 6784 0 R (page.513) 6789 0 R]
+9855 0 obj <<
+/Names [(page.509) 6729 0 R (page.51) 2511 0 R (page.510) 6736 0 R (page.511) 6746 0 R (page.512) 6752 0 R (page.513) 6757 0 R]
 /Limits [(page.509) (page.513)]
 >> endobj
-9887 0 obj <<
-/Names [(page.514) 6794 0 R (page.515) 6798 0 R (page.516) 6804 0 R (page.517) 6811 0 R (page.518) 6817 0 R (page.519) 6821 0 R]
+9856 0 obj <<
+/Names [(page.514) 6762 0 R (page.515) 6766 0 R (page.516) 6772 0 R (page.517) 6779 0 R (page.518) 6785 0 R (page.519) 6789 0 R]
 /Limits [(page.514) (page.519)]
 >> endobj
-9888 0 obj <<
-/Names [(page.52) 2548 0 R (page.520) 6825 0 R (page.521) 6829 0 R (page.522) 6833 0 R (page.523) 6838 0 R (page.524) 6842 0 R]
+9857 0 obj <<
+/Names [(page.52) 2543 0 R (page.520) 6793 0 R (page.521) 6797 0 R (page.522) 6801 0 R (page.523) 6806 0 R (page.524) 6810 0 R]
 /Limits [(page.52) (page.524)]
 >> endobj
-9889 0 obj <<
-/Names [(page.525) 6846 0 R (page.526) 6850 0 R (page.527) 6854 0 R (page.528) 6858 0 R (page.529) 6864 0 R (page.53) 2555 0 R]
+9858 0 obj <<
+/Names [(page.525) 6814 0 R (page.526) 6818 0 R (page.527) 6822 0 R (page.528) 6826 0 R (page.529) 6832 0 R (page.53) 2550 0 R]
 /Limits [(page.525) (page.53)]
 >> endobj
-9890 0 obj <<
-/Names [(page.530) 6870 0 R (page.531) 6876 0 R (page.532) 6883 0 R (page.533) 6893 0 R (page.534) 6908 0 R (page.535) 6924 0 R]
+9859 0 obj <<
+/Names [(page.530) 6838 0 R (page.531) 6844 0 R (page.532) 6851 0 R (page.533) 6861 0 R (page.534) 6876 0 R (page.535) 6892 0 R]
 /Limits [(page.530) (page.535)]
 >> endobj
-9891 0 obj <<
-/Names [(page.536) 6928 0 R (page.537) 6934 0 R (page.538) 6946 0 R (page.539) 6957 0 R (page.54) 2562 0 R (page.540) 6966 0 R]
+9860 0 obj <<
+/Names [(page.536) 6896 0 R (page.537) 6902 0 R (page.538) 6914 0 R (page.539) 6925 0 R (page.54) 2557 0 R (page.540) 6934 0 R]
 /Limits [(page.536) (page.540)]
 >> endobj
-9892 0 obj <<
-/Names [(page.541) 6977 0 R (page.542) 6986 0 R (page.543) 6991 0 R (page.544) 6996 0 R (page.545) 7015 0 R (page.546) 7028 0 R]
+9861 0 obj <<
+/Names [(page.541) 6945 0 R (page.542) 6954 0 R (page.543) 6959 0 R (page.544) 6964 0 R (page.545) 6983 0 R (page.546) 6996 0 R]
 /Limits [(page.541) (page.546)]
 >> endobj
-9893 0 obj <<
-/Names [(page.547) 7034 0 R (page.548) 7040 0 R (page.549) 7045 0 R (page.55) 2569 0 R (page.550) 7050 0 R (page.551) 7054 0 R]
+9862 0 obj <<
+/Names [(page.547) 7002 0 R (page.548) 7008 0 R (page.549) 7013 0 R (page.55) 2564 0 R (page.550) 7018 0 R (page.551) 7022 0 R]
 /Limits [(page.547) (page.551)]
 >> endobj
-9894 0 obj <<
-/Names [(page.552) 7058 0 R (page.553) 7064 0 R (page.554) 7071 0 R (page.555) 7075 0 R (page.556) 7081 0 R (page.557) 7086 0 R]
+9863 0 obj <<
+/Names [(page.552) 7026 0 R (page.553) 7032 0 R (page.554) 7039 0 R (page.555) 7043 0 R (page.556) 7049 0 R (page.557) 7054 0 R]
 /Limits [(page.552) (page.557)]
 >> endobj
-9895 0 obj <<
-/Names [(page.558) 7091 0 R (page.559) 7098 0 R (page.56) 2574 0 R (page.560) 7107 0 R (page.561) 7116 0 R (page.562) 7121 0 R]
+9864 0 obj <<
+/Names [(page.558) 7059 0 R (page.559) 7066 0 R (page.56) 2569 0 R (page.560) 7075 0 R (page.561) 7084 0 R (page.562) 7089 0 R]
 /Limits [(page.558) (page.562)]
 >> endobj
-9896 0 obj <<
-/Names [(page.563) 7126 0 R (page.564) 7136 0 R (page.565) 7143 0 R (page.566) 7149 0 R (page.567) 7153 0 R (page.568) 7158 0 R]
+9865 0 obj <<
+/Names [(page.563) 7094 0 R (page.564) 7104 0 R (page.565) 7111 0 R (page.566) 7117 0 R (page.567) 7121 0 R (page.568) 7126 0 R]
 /Limits [(page.563) (page.568)]
 >> endobj
-9897 0 obj <<
-/Names [(page.569) 7164 0 R (page.57) 2588 0 R (page.570) 7171 0 R (page.571) 7179 0 R (page.572) 7184 0 R (page.573) 7189 0 R]
+9866 0 obj <<
+/Names [(page.569) 7132 0 R (page.57) 2581 0 R (page.570) 7139 0 R (page.571) 7147 0 R (page.572) 7152 0 R (page.573) 7157 0 R]
 /Limits [(page.569) (page.573)]
 >> endobj
-9898 0 obj <<
-/Names [(page.574) 7194 0 R (page.575) 7198 0 R (page.576) 7202 0 R (page.577) 7208 0 R (page.578) 7212 0 R (page.579) 7364 0 R]
+9867 0 obj <<
+/Names [(page.574) 7162 0 R (page.575) 7166 0 R (page.576) 7170 0 R (page.577) 7176 0 R (page.578) 7180 0 R (page.579) 7332 0 R]
 /Limits [(page.574) (page.579)]
 >> endobj
-9899 0 obj <<
-/Names [(page.58) 2595 0 R (page.580) 7499 0 R (page.581) 7604 0 R (page.582) 7730 0 R (page.583) 7827 0 R (page.584) 7939 0 R]
+9868 0 obj <<
+/Names [(page.58) 2588 0 R (page.580) 7467 0 R (page.581) 7572 0 R (page.582) 7698 0 R (page.583) 7795 0 R (page.584) 7907 0 R]
 /Limits [(page.58) (page.584)]
 >> endobj
-9900 0 obj <<
-/Names [(page.585) 8060 0 R (page.586) 8181 0 R (page.587) 8286 0 R (page.588) 8382 0 R (page.589) 8530 0 R (page.59) 2601 0 R]
+9869 0 obj <<
+/Names [(page.585) 8028 0 R (page.586) 8149 0 R (page.587) 8254 0 R (page.588) 8350 0 R (page.589) 8498 0 R (page.59) 2594 0 R]
 /Limits [(page.585) (page.59)]
 >> endobj
-9901 0 obj <<
-/Names [(page.590) 8661 0 R (page.591) 8776 0 R (page.592) 8885 0 R (page.593) 9055 0 R (page.594) 9183 0 R (page.595) 9310 0 R]
+9870 0 obj <<
+/Names [(page.590) 8629 0 R (page.591) 8744 0 R (page.592) 8853 0 R (page.593) 9023 0 R (page.594) 9151 0 R (page.595) 9278 0 R]
 /Limits [(page.590) (page.595)]
 >> endobj
-9902 0 obj <<
-/Names [(page.6) 1995 0 R (page.60) 2608 0 R (page.61) 2614 0 R (page.62) 2621 0 R (page.63) 2627 0 R (page.64) 2641 0 R]
+9871 0 obj <<
+/Names [(page.6) 1995 0 R (page.60) 2601 0 R (page.61) 2607 0 R (page.62) 2614 0 R (page.63) 2620 0 R (page.64) 2634 0 R]
 /Limits [(page.6) (page.64)]
 >> endobj
-9903 0 obj <<
-/Names [(page.65) 2649 0 R (page.66) 2659 0 R (page.67) 2672 0 R (page.68) 2679 0 R (page.69) 2684 0 R (page.7) 2006 0 R]
+9872 0 obj <<
+/Names [(page.65) 2642 0 R (page.66) 2652 0 R (page.67) 2665 0 R (page.68) 2672 0 R (page.69) 2677 0 R (page.7) 2006 0 R]
 /Limits [(page.65) (page.7)]
 >> endobj
-9904 0 obj <<
-/Names [(page.70) 2692 0 R (page.71) 2710 0 R (page.72) 2732 0 R (page.73) 2741 0 R (page.74) 2750 0 R (page.75) 2757 0 R]
+9873 0 obj <<
+/Names [(page.70) 2685 0 R (page.71) 2703 0 R (page.72) 2725 0 R (page.73) 2734 0 R (page.74) 2743 0 R (page.75) 2750 0 R]
 /Limits [(page.70) (page.75)]
 >> endobj
-9905 0 obj <<
-/Names [(page.76) 2763 0 R (page.77) 2771 0 R (page.78) 2777 0 R (page.79) 2782 0 R (page.8) 2026 0 R (page.80) 2786 0 R]
+9874 0 obj <<
+/Names [(page.76) 2756 0 R (page.77) 2764 0 R (page.78) 2770 0 R (page.79) 2775 0 R (page.8) 2026 0 R (page.80) 2779 0 R]
 /Limits [(page.76) (page.80)]
 >> endobj
-9906 0 obj <<
-/Names [(page.81) 2793 0 R (page.82) 2800 0 R (page.83) 2806 0 R (page.84) 2810 0 R (page.85) 2815 0 R (page.86) 2822 0 R]
+9875 0 obj <<
+/Names [(page.81) 2786 0 R (page.82) 2793 0 R (page.83) 2799 0 R (page.84) 2803 0 R (page.85) 2808 0 R (page.86) 2815 0 R]
 /Limits [(page.81) (page.86)]
 >> endobj
-9907 0 obj <<
-/Names [(page.87) 2831 0 R (page.88) 2844 0 R (page.89) 2858 0 R (page.9) 2033 0 R (page.90) 2864 0 R (page.91) 2869 0 R]
+9876 0 obj <<
+/Names [(page.87) 2824 0 R (page.88) 2837 0 R (page.89) 2851 0 R (page.9) 2033 0 R (page.90) 2857 0 R (page.91) 2862 0 R]
 /Limits [(page.87) (page.91)]
 >> endobj
-9908 0 obj <<
-/Names [(page.92) 2873 0 R (page.93) 2877 0 R (page.94) 2881 0 R (page.95) 2929 0 R (page.96) 2961 0 R (page.97) 2980 0 R]
+9877 0 obj <<
+/Names [(page.92) 2866 0 R (page.93) 2870 0 R (page.94) 2874 0 R (page.95) 2922 0 R (page.96) 2954 0 R (page.97) 2973 0 R]
 /Limits [(page.92) (page.97)]
 >> endobj
-9909 0 obj <<
-/Names [(page.98) 2984 0 R (page.99) 2988 0 R (page.i) 1121 0 R (page.ix) 1168 0 R (page.vii) 1130 0 R (page.viii) 1138 0 R]
+9878 0 obj <<
+/Names [(page.98) 2977 0 R (page.99) 2981 0 R (page.i) 1121 0 R (page.ix) 1168 0 R (page.vii) 1130 0 R (page.viii) 1138 0 R]
 /Limits [(page.98) (page.viii)]
 >> endobj
-9910 0 obj <<
+9879 0 obj <<
 /Names [(page.x) 1210 0 R (page.xi) 1250 0 R (page.xii) 1286 0 R (page.xiii) 1322 0 R (page.xiv) 1357 0 R (page.xix) 1486 0 R]
 /Limits [(page.x) (page.xix)]
 >> endobj
-9911 0 obj <<
+9880 0 obj <<
 /Names [(page.xl) 1939 0 R (page.xli) 1943 0 R (page.xlii) 1949 0 R (page.xv) 1397 0 R (page.xvi) 1435 0 R (page.xvii) 1454 0 R]
 /Limits [(page.xl) (page.xvii)]
 >> endobj
-9912 0 obj <<
+9881 0 obj <<
 /Names [(page.xviii) 1458 0 R (page.xx) 1541 0 R (page.xxi) 1596 0 R (page.xxii) 1651 0 R (page.xxiii) 1697 0 R (page.xxiv) 1715 0 R]
 /Limits [(page.xviii) (page.xxiv)]
 >> endobj
-9913 0 obj <<
+9882 0 obj <<
 /Names [(page.xxix) 1868 0 R (page.xxv) 1741 0 R (page.xxvi) 1793 0 R (page.xxvii) 1846 0 R (page.xxviii) 1864 0 R (page.xxx) 1875 0 R]
 /Limits [(page.xxix) (page.xxx)]
 >> endobj
-9914 0 obj <<
+9883 0 obj <<
 /Names [(page.xxxi) 1880 0 R (page.xxxii) 1884 0 R (page.xxxiii) 1891 0 R (page.xxxiv) 1900 0 R (page.xxxix) 1935 0 R (page.xxxv) 1909 0 R]
 /Limits [(page.xxxi) (page.xxxv)]
 >> endobj
-9915 0 obj <<
+9884 0 obj <<
 /Names [(page.xxxvi) 1916 0 R (page.xxxvii) 1922 0 R (page.xxxviii) 1927 0 R (part.1) 38 0 R (part.2) 498 0 R (part.3) 750 0 R]
 /Limits [(page.xxxvi) (part.3)]
 >> endobj
-9916 0 obj <<
-/Names [(pktcap01) 6918 0 R (pktcap02) 6919 0 R (pref-new) 1896 0 R (preface) 1886 0 R (primer) 6520 0 R (procstart) 2751 0 R]
+9885 0 obj <<
+/Names [(pktcap01) 6886 0 R (pktcap02) 6887 0 R (pref-new) 1896 0 R (preface) 1886 0 R (primer) 6488 0 R (procstart) 2744 0 R]
 /Limits [(pktcap01) (procstart)]
 >> endobj
-9917 0 obj <<
-/Names [(proffold) 3977 0 R (prom-dhcp) 2718 0 R (promisnet) 2664 0 R (promisnetsvca) 2665 0 R (promisnetsvcb) 2666 0 R (redirfold) 3535 0 R]
+9886 0 obj <<
+/Names [(proffold) 3963 0 R (prom-dhcp) 2711 0 R (promisnet) 2657 0 R (promisnetsvca) 2658 0 R (promisnetsvcb) 2659 0 R (redirfold) 3524 0 R]
 /Limits [(proffold) (redirfold)]
 >> endobj
-9918 0 obj <<
-/Names [(roothint) 2724 0 R (sbe-idmapridex) 4932 0 R (sbeamg) 5795 0 R (sbeavoid) 3547 0 R (sbehap-LDAPdiag) 3506 0 R (sbehap-PAM-NSS) 3670 0 R]
+9887 0 obj <<
+/Names [(roothint) 2717 0 R (sbe-idmapridex) 4902 0 R (sbeamg) 5763 0 R (sbeavoid) 3536 0 R (sbehap-LDAPdiag) 3497 0 R (sbehap-PAM-NSS) 3656 0 R]
 /Limits [(roothint) (sbehap-PAM-NSS)]
 >> endobj
-9919 0 obj <<
-/Names [(sbehap-bigacct) 3780 0 R (sbehap-bldg1) 3886 0 R (sbehap-bldg1-smbconf) 3892 0 R (sbehap-bldg2-smbconf) 3931 0 R (sbehap-dbconf) 3573 0 R (sbehap-ldapreconfa) 6685 0 R]
+9888 0 obj <<
+/Names [(sbehap-bigacct) 3766 0 R (sbehap-bldg1) 3872 0 R (sbehap-bldg1-smbconf) 3878 0 R (sbehap-bldg2-smbconf) 3917 0 R (sbehap-dbconf) 3562 0 R (sbehap-ldapreconfa) 6653 0 R]
 /Limits [(sbehap-bigacct) (sbehap-ldapreconfa)]
 >> endobj
-9920 0 obj <<
-/Names [(sbehap-ldapreconfb) 6686 0 R (sbehap-ldapreconfc) 6687 0 R (sbehap-ldifadd) 3801 0 R (sbehap-ldifpata) 6688 0 R (sbehap-ldifpatb) 6689 0 R (sbehap-locgrppol) 3532 0 R]
+9889 0 obj <<
+/Names [(sbehap-ldapreconfb) 6654 0 R (sbehap-ldapreconfc) 6655 0 R (sbehap-ldifadd) 3787 0 R (sbehap-ldifpata) 6656 0 R (sbehap-ldifpatb) 6657 0 R (sbehap-locgrppol) 3521 0 R]
 /Limits [(sbehap-ldapreconfb) (sbehap-locgrppol)]
 >> endobj
-9921 0 obj <<
-/Names [(sbehap-massive) 3695 0 R (sbehap-massive-smbconfa) 3698 0 R (sbehap-massive-smbconfb) 3699 0 R (sbehap-nss01) 3673 0 R (sbehap-nss02) 3681 0 R (sbehap-ppc) 3518 0 R]
+9890 0 obj <<
+/Names [(sbehap-massive) 3681 0 R (sbehap-massive-smbconfa) 3684 0 R (sbehap-massive-smbconfb) 3685 0 R (sbehap-nss01) 3659 0 R (sbehap-nss02) 3667 0 R (sbehap-ppc) 3507 0 R]
 /Limits [(sbehap-massive) (sbehap-ppc)]
 >> endobj
-9922 0 obj <<
-/Names [(sbehap-privs) 3519 0 R (sbehap-ptrcfg) 3860 0 R (sbehap-shareconfa) 3700 0 R (sbehap-shareconfb) 3701 0 R (sbehap-slapdconf) 3663 0 R (sbehap-slapdconf2) 4082 0 R]
+9891 0 obj <<
+/Names [(sbehap-privs) 3508 0 R (sbehap-ptrcfg) 3846 0 R (sbehap-shareconfa) 3686 0 R (sbehap-shareconfb) 3687 0 R (sbehap-slapdconf) 3649 0 R (sbehap-slapdconf2) 4068 0 R]
 /Limits [(sbehap-privs) (sbehap-slapdconf2)]
 >> endobj
-9923 0 obj <<
-/Names [(sbeidealx) 3722 0 R (sbent4smb) 5519 0 R (sbent4smb2) 5700 0 R (sbentnss) 5522 0 R (sbentnss2) 5547 0 R (sbentslapd) 5520 0 R]
+9892 0 obj <<
+/Names [(sbeidealx) 3708 0 R (sbent4smb) 5487 0 R (sbent4smb2) 5668 0 R (sbentnss) 5490 0 R (sbentnss2) 5515 0 R (sbentslapd) 5488 0 R]
 /Limits [(sbeidealx) (sbentslapd)]
 >> endobj
-9924 0 obj <<
-/Names [(sbentslapd2) 5745 0 R (sbepu2) 5839 0 R (sbersync) 5841 0 R (sbeug1) 5334 0 R (sbeug2) 5352 0 R (sbeunxa) 4948 0 R]
+9893 0 obj <<
+/Names [(sbentslapd2) 5713 0 R (sbepu2) 5807 0 R (sbersync) 5809 0 R (sbeug1) 5304 0 R (sbeug2) 5322 0 R (sbeunxa) 4918 0 R]
 /Limits [(sbentslapd2) (sbeunxa)]
 >> endobj
-9925 0 obj <<
-/Names [(sbevam1) 5574 0 R (sbewinbindex) 4980 0 R (sbexcld) 5842 0 R (sbrntldapconf) 5521 0 R (sdcsdmldap) 4757 0 R (secondmachine) 6917 0 R]
+9894 0 obj <<
+/Names [(sbevam1) 5542 0 R (sbewinbindex) 4950 0 R (sbexcld) 5810 0 R (sbrntldapconf) 5489 0 R (sdcsdmldap) 4731 0 R (secondmachine) 6885 0 R]
 /Limits [(sbevam1) (secondmachine)]
 >> endobj
-9926 0 obj <<
+9895 0 obj <<
 /Names [(section*.1) 6 0 R (section*.10) 1892 0 R (section*.11) 1894 0 R (section*.12) 1901 0 R (section*.13) 1903 0 R (section*.14) 1910 0 R]
 /Limits [(section*.1) (section*.14)]
 >> endobj
-9927 0 obj <<
-/Names [(section*.15) 1944 0 R (section*.16) 42 0 R (section*.18) 2294 0 R (section*.19) 2462 0 R (section*.20) 2860 0 R (section*.21) 3370 0 R]
+9896 0 obj <<
+/Names [(section*.15) 1944 0 R (section*.16) 42 0 R (section*.18) 2291 0 R (section*.19) 2457 0 R (section*.20) 2853 0 R (section*.21) 3361 0 R]
 /Limits [(section*.15) (section*.21)]
 >> endobj
-9928 0 obj <<
-/Names [(section*.22) 3548 0 R (section*.23) 3554 0 R (section*.24) 3564 0 R (section*.25) 3571 0 R (section*.26) 3587 0 R (section*.27) 3594 0 R]
+9897 0 obj <<
+/Names [(section*.22) 3537 0 R (section*.23) 3543 0 R (section*.24) 3553 0 R (section*.25) 3560 0 R (section*.26) 3576 0 R (section*.27) 3583 0 R]
 /Limits [(section*.22) (section*.27)]
 >> endobj
-9929 0 obj <<
-/Names [(section*.28) 4060 0 R (section*.29) 4456 0 R (section*.30) 502 0 R (section*.32) 4978 0 R (section*.33) 4988 0 R (section*.34) 5033 0 R]
+9898 0 obj <<
+/Names [(section*.28) 4046 0 R (section*.29) 4430 0 R (section*.30) 502 0 R (section*.32) 4948 0 R (section*.33) 4958 0 R (section*.34) 5003 0 R]
 /Limits [(section*.28) (section*.34)]
 >> endobj
-9930 0 obj <<
-/Names [(section*.35) 5632 0 R (section*.36) 754 0 R (section*.38) 6342 0 R (section*.39) 6478 0 R (section*.40) 7046 0 R (section*.41) 7067 0 R]
+9899 0 obj <<
+/Names [(section*.35) 5600 0 R (section*.36) 754 0 R (section*.38) 6310 0 R (section*.39) 6446 0 R (section*.40) 7014 0 R (section*.41) 7035 0 R]
 /Limits [(section*.35) (section*.41)]
 >> endobj
-9931 0 obj <<
-/Names [(section*.42) 7076 0 R (section*.43) 7077 0 R (section*.44) 7082 0 R (section*.45) 7087 0 R (section*.46) 7092 0 R (section*.47) 7093 0 R]
+9900 0 obj <<
+/Names [(section*.42) 7044 0 R (section*.43) 7045 0 R (section*.44) 7050 0 R (section*.45) 7055 0 R (section*.46) 7060 0 R (section*.47) 7061 0 R]
 /Limits [(section*.42) (section*.47)]
 >> endobj
-9932 0 obj <<
-/Names [(section*.48) 7099 0 R (section*.49) 7108 0 R (section*.50) 7122 0 R (section*.51) 7137 0 R (section*.52) 7138 0 R (section*.53) 7144 0 R]
+9901 0 obj <<
+/Names [(section*.48) 7067 0 R (section*.49) 7076 0 R (section*.50) 7090 0 R (section*.51) 7105 0 R (section*.52) 7106 0 R (section*.53) 7112 0 R]
 /Limits [(section*.48) (section*.53)]
 >> endobj
-9933 0 obj <<
-/Names [(section*.54) 7145 0 R (section*.55) 7154 0 R (section*.56) 7159 0 R (section*.57) 7160 0 R (section*.58) 7165 0 R (section*.59) 7166 0 R]
+9902 0 obj <<
+/Names [(section*.54) 7113 0 R (section*.55) 7122 0 R (section*.56) 7127 0 R (section*.57) 7128 0 R (section*.58) 7133 0 R (section*.59) 7134 0 R]
 /Limits [(section*.54) (section*.59)]
 >> endobj
-9934 0 obj <<
-/Names [(section*.60) 7167 0 R (section*.61) 7172 0 R (section*.62) 1110 0 R (section*.8) 34 0 R (section.1.1) 50 0 R (section.1.2) 54 0 R]
+9903 0 obj <<
+/Names [(section*.60) 7135 0 R (section*.61) 7140 0 R (section*.62) 1110 0 R (section*.8) 34 0 R (section.1.1) 50 0 R (section.1.2) 54 0 R]
 /Limits [(section*.60) (section.1.2)]
 >> endobj
-9935 0 obj <<
+9904 0 obj <<
 /Names [(section.1.3) 102 0 R (section.10.1) 722 0 R (section.10.2) 730 0 R (section.10.3) 738 0 R (section.11.1) 762 0 R (section.11.2) 770 0 R]
 /Limits [(section.1.3) (section.11.2)]
 >> endobj
-9936 0 obj <<
+9905 0 obj <<
 /Names [(section.11.3) 782 0 R (section.11.4) 826 0 R (section.12.1) 834 0 R (section.12.2) 842 0 R (section.12.3) 854 0 R (section.12.4) 886 0 R]
 /Limits [(section.11.3) (section.12.4)]
 >> endobj
-9937 0 obj <<
+9906 0 obj <<
 /Names [(section.13.1) 894 0 R (section.13.2) 898 0 R (section.13.3) 902 0 R (section.13.4) 954 0 R (section.14.1) 962 0 R (section.14.2) 966 0 R]
 /Limits [(section.13.1) (section.14.2)]
 >> endobj
-9938 0 obj <<
+9907 0 obj <<
 /Names [(section.15.1) 974 0 R (section.15.2) 978 0 R (section.15.3) 982 0 R (section.15.4) 986 0 R (section.15.5) 1002 0 R (section.15.6) 1010 0 R]
 /Limits [(section.15.1) (section.15.6)]
 >> endobj
-9939 0 obj <<
+9908 0 obj <<
 /Names [(section.15.7) 1014 0 R (section.15.8) 1018 0 R (section.15.9) 1022 0 R (section.16.1) 1042 0 R (section.16.2) 1046 0 R (section.16.3) 1054 0 R]
 /Limits [(section.15.7) (section.16.3)]
 >> endobj
-9940 0 obj <<
+9909 0 obj <<
 /Names [(section.16.4) 1094 0 R (section.16.5) 1102 0 R (section.2.1) 110 0 R (section.2.2) 118 0 R (section.2.3) 130 0 R (section.2.4) 146 0 R]
 /Limits [(section.16.4) (section.2.4)]
 >> endobj
-9941 0 obj <<
+9910 0 obj <<
 /Names [(section.3.1) 154 0 R (section.3.2) 162 0 R (section.3.3) 178 0 R (section.3.4) 222 0 R (section.4.1) 230 0 R (section.4.2) 238 0 R]
 /Limits [(section.3.1) (section.4.2)]
 >> endobj
-9942 0 obj <<
+9911 0 obj <<
 /Names [(section.4.3) 250 0 R (section.4.4) 286 0 R (section.5.1) 294 0 R (section.5.2) 298 0 R (section.5.3) 306 0 R (section.5.4) 350 0 R]
 /Limits [(section.4.3) (section.5.4)]
 >> endobj
-9943 0 obj <<
+9912 0 obj <<
 /Names [(section.5.5) 390 0 R (section.5.6) 394 0 R (section.5.7) 414 0 R (section.5.8) 442 0 R (section.5.9) 446 0 R (section.6.1) 454 0 R]
 /Limits [(section.5.5) (section.6.1)]
 >> endobj
-9944 0 obj <<
+9913 0 obj <<
 /Names [(section.6.2) 462 0 R (section.6.3) 486 0 R (section.6.4) 494 0 R (section.7.1) 510 0 R (section.7.2) 518 0 R (section.7.3) 530 0 R]
 /Limits [(section.6.2) (section.7.3)]
 >> endobj
-9945 0 obj <<
+9914 0 obj <<
 /Names [(section.7.4) 578 0 R (section.8.1) 586 0 R (section.8.2) 618 0 R (section.8.3) 634 0 R (section.9.1) 674 0 R (section.9.2) 682 0 R]
 /Limits [(section.7.4) (section.9.2)]
 >> endobj
-9946 0 obj <<
-/Names [(section.9.3) 694 0 R (section.9.4) 714 0 R (secure) 2556 0 R (simple) 1974 0 R (small) 2313 0 R (smbldap-init) 3741 0 R]
+9915 0 obj <<
+/Names [(section.9.3) 694 0 R (section.9.4) 714 0 R (secure) 2551 0 R (simple) 1974 0 R (small) 2310 0 R (smbldap-init) 3727 0 R]
 /Limits [(section.9.3) (smbldap-init)]
 >> endobj
-9947 0 obj <<
+9916 0 obj <<
 /Names [(subsection.1.2.1) 58 0 R (subsection.1.2.2) 74 0 R (subsection.1.2.3) 90 0 R (subsection.10.1.1) 726 0 R (subsection.10.2.1) 734 0 R (subsection.10.3.1) 742 0 R]
 /Limits [(subsection.1.2.1) (subsection.10.3.1)]
 >> endobj
-9948 0 obj <<
+9917 0 obj <<
 /Names [(subsection.11.1.1) 766 0 R (subsection.11.2.1) 774 0 R (subsection.11.3.1) 786 0 R (subsection.11.3.2) 790 0 R (subsection.11.3.3) 802 0 R (subsection.11.3.4) 806 0 R]
 /Limits [(subsection.11.1.1) (subsection.11.3.4)]
 >> endobj
-9949 0 obj <<
+9918 0 obj <<
 /Names [(subsection.11.3.5) 822 0 R (subsection.12.1.1) 838 0 R (subsection.12.2.1) 846 0 R (subsection.12.2.2) 850 0 R (subsection.12.3.1) 858 0 R (subsection.12.3.2) 862 0 R]
 /Limits [(subsection.11.3.5) (subsection.12.3.2)]
 >> endobj
-9950 0 obj <<
+9919 0 obj <<
 /Names [(subsection.12.3.3) 878 0 R (subsection.12.3.4) 882 0 R (subsection.13.3.1) 906 0 R (subsection.13.3.2) 922 0 R (subsection.13.3.3) 926 0 R (subsection.13.3.4) 930 0 R]
 /Limits [(subsection.12.3.3) (subsection.13.3.4)]
 >> endobj
-9951 0 obj <<
+9920 0 obj <<
 /Names [(subsection.13.3.5) 934 0 R (subsection.13.3.6) 938 0 R (subsection.13.3.7) 942 0 R (subsection.13.3.8) 946 0 R (subsection.13.3.9) 950 0 R (subsection.15.4.1) 990 0 R]
 /Limits [(subsection.13.3.5) (subsection.15.4.1)]
 >> endobj
-9952 0 obj <<
+9921 0 obj <<
 /Names [(subsection.15.4.2) 994 0 R (subsection.15.4.3) 998 0 R (subsection.15.5.1) 1006 0 R (subsection.15.9.1) 1026 0 R (subsection.15.9.2) 1030 0 R (subsection.15.9.3) 1034 0 R]
 /Limits [(subsection.15.4.2) (subsection.15.9.3)]
 >> endobj
-9953 0 obj <<
+9922 0 obj <<
 /Names [(subsection.16.2.1) 1050 0 R (subsection.16.3.1) 1058 0 R (subsection.16.3.2) 1066 0 R (subsection.16.3.3) 1074 0 R (subsection.16.3.4) 1082 0 R (subsection.16.3.5) 1090 0 R]
 /Limits [(subsection.16.2.1) (subsection.16.3.5)]
 >> endobj
-9954 0 obj <<
+9923 0 obj <<
 /Names [(subsection.16.4.1) 1098 0 R (subsection.2.1.1) 114 0 R (subsection.2.2.1) 122 0 R (subsection.2.2.2) 126 0 R (subsection.2.3.1) 134 0 R (subsection.2.3.2) 138 0 R]
 /Limits [(subsection.16.4.1) (subsection.2.3.2)]
 >> endobj
-9955 0 obj <<
+9924 0 obj <<
 /Names [(subsection.2.3.3) 142 0 R (subsection.3.1.1) 158 0 R (subsection.3.2.1) 166 0 R (subsection.3.2.2) 174 0 R (subsection.3.3.1) 182 0 R (subsection.3.3.2) 186 0 R]
 /Limits [(subsection.2.3.3) (subsection.3.3.2)]
 >> endobj
-9956 0 obj <<
+9925 0 obj <<
 /Names [(subsection.3.3.3) 190 0 R (subsection.3.3.4) 194 0 R (subsection.3.3.5) 198 0 R (subsection.3.3.6) 202 0 R (subsection.3.3.7) 206 0 R (subsection.3.3.8) 214 0 R]
 /Limits [(subsection.3.3.3) (subsection.3.3.8)]
 >> endobj
-9957 0 obj <<
+9926 0 obj <<
 /Names [(subsection.3.3.9) 218 0 R (subsection.4.1.1) 234 0 R (subsection.4.2.1) 242 0 R (subsection.4.2.2) 246 0 R (subsection.4.3.1) 254 0 R (subsection.4.3.2) 258 0 R]
 /Limits [(subsection.3.3.9) (subsection.4.3.2)]
 >> endobj
-9958 0 obj <<
+9927 0 obj <<
 /Names [(subsection.4.3.3) 262 0 R (subsection.4.3.4) 274 0 R (subsection.4.3.5) 278 0 R (subsection.4.3.6) 282 0 R (subsection.5.2.1) 302 0 R (subsection.5.3.1) 310 0 R]
 /Limits [(subsection.4.3.3) (subsection.5.3.1)]
 >> endobj
-9959 0 obj <<
+9928 0 obj <<
 /Names [(subsection.5.3.2) 342 0 R (subsection.5.3.3) 346 0 R (subsection.5.4.1) 354 0 R (subsection.5.4.2) 358 0 R (subsection.5.4.3) 362 0 R (subsection.5.4.4) 366 0 R]
 /Limits [(subsection.5.3.2) (subsection.5.4.4)]
 >> endobj
-9960 0 obj <<
+9929 0 obj <<
 /Names [(subsection.5.4.5) 382 0 R (subsection.5.4.6) 386 0 R (subsection.5.6.1) 398 0 R (subsection.5.6.2) 402 0 R (subsection.5.6.3) 406 0 R (subsection.5.6.4) 410 0 R]
 /Limits [(subsection.5.4.5) (subsection.5.6.4)]
 >> endobj
-9961 0 obj <<
+9930 0 obj <<
 /Names [(subsection.5.7.1) 418 0 R (subsection.5.7.2) 422 0 R (subsection.5.7.3) 426 0 R (subsection.5.7.4) 430 0 R (subsection.5.7.5) 434 0 R (subsection.5.7.6) 438 0 R]
 /Limits [(subsection.5.7.1) (subsection.5.7.6)]
 >> endobj
-9962 0 obj <<
+9931 0 obj <<
 /Names [(subsection.6.1.1) 458 0 R (subsection.6.2.1) 466 0 R (subsection.6.2.2) 482 0 R (subsection.6.3.1) 490 0 R (subsection.7.1.1) 514 0 R (subsection.7.2.1) 522 0 R]
 /Limits [(subsection.6.1.1) (subsection.7.2.1)]
 >> endobj
-9963 0 obj <<
+9932 0 obj <<
 /Names [(subsection.7.2.2) 526 0 R (subsection.7.3.1) 534 0 R (subsection.7.3.2) 538 0 R (subsection.7.3.3) 542 0 R (subsection.7.3.4) 546 0 R (subsection.7.3.5) 562 0 R]
 /Limits [(subsection.7.2.2) (subsection.7.3.5)]
 >> endobj
-9964 0 obj <<
+9933 0 obj <<
 /Names [(subsection.7.3.6) 574 0 R (subsection.8.1.1) 590 0 R (subsection.8.2.1) 622 0 R (subsection.8.2.2) 626 0 R (subsection.8.2.3) 630 0 R (subsection.8.3.1) 638 0 R]
 /Limits [(subsection.7.3.6) (subsection.8.3.1)]
 >> endobj
-9965 0 obj <<
+9934 0 obj <<
 /Names [(subsection.8.3.2) 654 0 R (subsection.8.3.3) 666 0 R (subsection.9.1.1) 678 0 R (subsection.9.2.1) 686 0 R (subsection.9.2.2) 690 0 R (subsection.9.3.1) 698 0 R]
 /Limits [(subsection.8.3.2) (subsection.9.3.1)]
 >> endobj
-9966 0 obj <<
+9935 0 obj <<
 /Names [(subsection.9.3.2) 706 0 R (subsection.9.3.3) 710 0 R (subsubsection.1.2.1.1) 62 0 R (subsubsection.1.2.1.2) 66 0 R (subsubsection.1.2.1.3) 70 0 R (subsubsection.1.2.2.1) 78 0 R]
 /Limits [(subsection.9.3.2) (subsubsection.1.2.2.1)]
 >> endobj
-9967 0 obj <<
+9936 0 obj <<
 /Names [(subsubsection.1.2.2.2) 82 0 R (subsubsection.1.2.2.3) 86 0 R (subsubsection.1.2.3.1) 94 0 R (subsubsection.1.2.3.2) 98 0 R (subsubsection.10.3.1.1) 746 0 R (subsubsection.11.2.1.1) 778 0 R]
 /Limits [(subsubsection.1.2.2.2) (subsubsection.11.2.1.1)]
 >> endobj
-9968 0 obj <<
+9937 0 obj <<
 /Names [(subsubsection.11.3.2.1) 794 0 R (subsubsection.11.3.2.2) 798 0 R (subsubsection.11.3.4.1) 810 0 R (subsubsection.11.3.4.2) 814 0 R (subsubsection.11.3.4.3) 818 0 R (subsubsection.12.3.2.1) 866 0 R]
 /Limits [(subsubsection.11.3.2.1) (subsubsection.12.3.2.1)]
 >> endobj
-9969 0 obj <<
+9938 0 obj <<
 /Names [(subsubsection.12.3.2.2) 870 0 R (subsubsection.12.3.2.3) 874 0 R (subsubsection.13.3.1.1) 910 0 R (subsubsection.13.3.1.2) 914 0 R (subsubsection.13.3.1.3) 918 0 R (subsubsection.16.3.1.1) 1062 0 R]
 /Limits [(subsubsection.12.3.2.2) (subsubsection.16.3.1.1)]
 >> endobj
-9970 0 obj <<
+9939 0 obj <<
 /Names [(subsubsection.16.3.2.1) 1070 0 R (subsubsection.16.3.3.1) 1078 0 R (subsubsection.16.3.4.1) 1086 0 R (subsubsection.3.2.1.1) 170 0 R (subsubsection.3.3.7.1) 210 0 R (subsubsection.4.3.3.1) 266 0 R]
 /Limits [(subsubsection.16.3.2.1) (subsubsection.4.3.3.1)]
 >> endobj
-9971 0 obj <<
+9940 0 obj <<
 /Names [(subsubsection.4.3.3.2) 270 0 R (subsubsection.5.3.1.1) 314 0 R (subsubsection.5.3.1.2) 318 0 R (subsubsection.5.3.1.3) 322 0 R (subsubsection.5.3.1.4) 326 0 R (subsubsection.5.3.1.5) 330 0 R]
 /Limits [(subsubsection.4.3.3.2) (subsubsection.5.3.1.5)]
 >> endobj
-9972 0 obj <<
+9941 0 obj <<
 /Names [(subsubsection.5.3.1.6) 334 0 R (subsubsection.5.3.1.7) 338 0 R (subsubsection.5.4.4.1) 370 0 R (subsubsection.5.4.4.2) 374 0 R (subsubsection.5.4.4.3) 378 0 R (subsubsection.6.2.1.1) 470 0 R]
 /Limits [(subsubsection.5.3.1.6) (subsubsection.6.2.1.1)]
 >> endobj
-9973 0 obj <<
+9942 0 obj <<
 /Names [(subsubsection.6.2.1.2) 474 0 R (subsubsection.6.2.1.3) 478 0 R (subsubsection.7.3.4.1) 550 0 R (subsubsection.7.3.4.2) 554 0 R (subsubsection.7.3.4.3) 558 0 R (subsubsection.7.3.5.1) 566 0 R]
 /Limits [(subsubsection.6.2.1.2) (subsubsection.7.3.5.1)]
 >> endobj
-9974 0 obj <<
+9943 0 obj <<
 /Names [(subsubsection.7.3.5.2) 570 0 R (subsubsection.8.1.1.1) 594 0 R (subsubsection.8.1.1.2) 598 0 R (subsubsection.8.1.1.3) 602 0 R (subsubsection.8.1.1.4) 606 0 R (subsubsection.8.1.1.5) 610 0 R]
 /Limits [(subsubsection.7.3.5.2) (subsubsection.8.1.1.5)]
 >> endobj
-9975 0 obj <<
+9944 0 obj <<
 /Names [(subsubsection.8.1.1.6) 614 0 R (subsubsection.8.3.1.1) 642 0 R (subsubsection.8.3.1.2) 646 0 R (subsubsection.8.3.1.3) 650 0 R (subsubsection.8.3.2.1) 658 0 R (subsubsection.8.3.2.2) 662 0 R]
 /Limits [(subsubsection.8.1.1.6) (subsubsection.8.3.2.2)]
 >> endobj
-9976 0 obj <<
-/Names [(subsubsection.9.3.1.1) 702 0 R (swxpp001) 6606 0 R (swxpp004) 6623 0 R (swxpp006) 6624 0 R (swxpp007) 6625 0 R (swxpp008) 6632 0 R]
+9945 0 obj <<
+/Names [(subsubsection.9.3.1.1) 702 0 R (swxpp001) 6574 0 R (swxpp004) 6591 0 R (swxpp006) 6592 0 R (swxpp007) 6593 0 R (swxpp008) 6600 0 R]
 /Limits [(subsubsection.9.3.1.1) (swxpp008)]
 >> endobj
-9977 0 obj <<
+9946 0 obj <<
 /Names [(table.0.1) 1847 0 R (table.1.1) 1848 0 R (table.13.1) 1858 0 R (table.16.1) 1859 0 R (table.16.2) 1860 0 R (table.3.1) 1849 0 R]
 /Limits [(table.0.1) (table.3.1)]
 >> endobj
-9978 0 obj <<
+9947 0 obj <<
 /Names [(table.3.2) 1850 0 R (table.4.1) 1851 0 R (table.5.1) 1852 0 R (table.5.2) 1853 0 R (table.5.3) 1854 0 R (table.5.4) 1855 0 R]
 /Limits [(table.3.2) (table.5.4)]
 >> endobj
-9979 0 obj <<
-/Names [(table.9.1) 1856 0 R (unixclients) 4723 0 R (upgrades) 5299 0 R (userconnect) 6987 0 R (validate1) 2022 0 R (wdcsdm) 4809 0 R]
+9948 0 obj <<
+/Names [(table.9.1) 1856 0 R (unixclients) 4697 0 R (upgrades) 5269 0 R (userconnect) 6955 0 R (validate1) 2022 0 R (wdcsdm) 4781 0 R]
 /Limits [(table.9.1) (wdcsdm)]
 >> endobj
-9980 0 obj <<
-/Kids [9418 0 R 9419 0 R 9420 0 R 9421 0 R 9422 0 R 9423 0 R]
+9949 0 obj <<
+/Kids [9387 0 R 9388 0 R 9389 0 R 9390 0 R 9391 0 R 9392 0 R]
 /Limits [(105) (Item.112)]
 >> endobj
-9981 0 obj <<
-/Kids [9424 0 R 9425 0 R 9426 0 R 9427 0 R 9428 0 R 9429 0 R]
+9950 0 obj <<
+/Kids [9393 0 R 9394 0 R 9395 0 R 9396 0 R 9397 0 R 9398 0 R]
 /Limits [(Item.113) (Item.145)]
 >> endobj
-9982 0 obj <<
-/Kids [9430 0 R 9431 0 R 9432 0 R 9433 0 R 9434 0 R 9435 0 R]
+9951 0 obj <<
+/Kids [9399 0 R 9400 0 R 9401 0 R 9402 0 R 9403 0 R 9404 0 R]
 /Limits [(Item.146) (Item.178)]
 >> endobj
-9983 0 obj <<
-/Kids [9436 0 R 9437 0 R 9438 0 R 9439 0 R 9440 0 R 9441 0 R]
+9952 0 obj <<
+/Kids [9405 0 R 9406 0 R 9407 0 R 9408 0 R 9409 0 R 9410 0 R]
 /Limits [(Item.179) (Item.21)]
 >> endobj
-9984 0 obj <<
-/Kids [9442 0 R 9443 0 R 9444 0 R 9445 0 R 9446 0 R 9447 0 R]
+9953 0 obj <<
+/Kids [9411 0 R 9412 0 R 9413 0 R 9414 0 R 9415 0 R 9416 0 R]
 /Limits [(Item.210) (Item.242)]
 >> endobj
-9985 0 obj <<
-/Kids [9448 0 R 9449 0 R 9450 0 R 9451 0 R 9452 0 R 9453 0 R]
+9954 0 obj <<
+/Kids [9417 0 R 9418 0 R 9419 0 R 9420 0 R 9421 0 R 9422 0 R]
 /Limits [(Item.243) (Item.275)]
 >> endobj
-9986 0 obj <<
-/Kids [9454 0 R 9455 0 R 9456 0 R 9457 0 R 9458 0 R 9459 0 R]
+9955 0 obj <<
+/Kids [9423 0 R 9424 0 R 9425 0 R 9426 0 R 9427 0 R 9428 0 R]
 /Limits [(Item.276) (Item.307)]
 >> endobj
-9987 0 obj <<
-/Kids [9460 0 R 9461 0 R 9462 0 R 9463 0 R 9464 0 R 9465 0 R]
+9956 0 obj <<
+/Kids [9429 0 R 9430 0 R 9431 0 R 9432 0 R 9433 0 R 9434 0 R]
 /Limits [(Item.308) (Item.34)]
 >> endobj
-9988 0 obj <<
-/Kids [9466 0 R 9467 0 R 9468 0 R 9469 0 R 9470 0 R 9471 0 R]
+9957 0 obj <<
+/Kids [9435 0 R 9436 0 R 9437 0 R 9438 0 R 9439 0 R 9440 0 R]
 /Limits [(Item.340) (Item.372)]
 >> endobj
-9989 0 obj <<
-/Kids [9472 0 R 9473 0 R 9474 0 R 9475 0 R 9476 0 R 9477 0 R]
+9958 0 obj <<
+/Kids [9441 0 R 9442 0 R 9443 0 R 9444 0 R 9445 0 R 9446 0 R]
 /Limits [(Item.373) (Item.404)]
 >> endobj
-9990 0 obj <<
-/Kids [9478 0 R 9479 0 R 9480 0 R 9481 0 R 9482 0 R 9483 0 R]
+9959 0 obj <<
+/Kids [9447 0 R 9448 0 R 9449 0 R 9450 0 R 9451 0 R 9452 0 R]
 /Limits [(Item.405) (Item.437)]
 >> endobj
-9991 0 obj <<
-/Kids [9484 0 R 9485 0 R 9486 0 R 9487 0 R 9488 0 R 9489 0 R]
+9960 0 obj <<
+/Kids [9453 0 R 9454 0 R 9455 0 R 9456 0 R 9457 0 R 9458 0 R]
 /Limits [(Item.438) (Item.47)]
 >> endobj
-9992 0 obj <<
-/Kids [9490 0 R 9491 0 R 9492 0 R 9493 0 R 9494 0 R 9495 0 R]
+9961 0 obj <<
+/Kids [9459 0 R 9460 0 R 9461 0 R 9462 0 R 9463 0 R 9464 0 R]
 /Limits [(Item.470) (Item.501)]
 >> endobj
-9993 0 obj <<
-/Kids [9496 0 R 9497 0 R 9498 0 R 9499 0 R 9500 0 R 9501 0 R]
+9962 0 obj <<
+/Kids [9465 0 R 9466 0 R 9467 0 R 9468 0 R 9469 0 R 9470 0 R]
 /Limits [(Item.502) (Item.534)]
 >> endobj
-9994 0 obj <<
-/Kids [9502 0 R 9503 0 R 9504 0 R 9505 0 R 9506 0 R 9507 0 R]
+9963 0 obj <<
+/Kids [9471 0 R 9472 0 R 9473 0 R 9474 0 R 9475 0 R 9476 0 R]
 /Limits [(Item.535) (Item.567)]
 >> endobj
-9995 0 obj <<
-/Kids [9508 0 R 9509 0 R 9510 0 R 9511 0 R 9512 0 R 9513 0 R]
+9964 0 obj <<
+/Kids [9477 0 R 9478 0 R 9479 0 R 9480 0 R 9481 0 R 9482 0 R]
 /Limits [(Item.568) (Item.6)]
 >> endobj
-9996 0 obj <<
-/Kids [9514 0 R 9515 0 R 9516 0 R 9517 0 R 9518 0 R 9519 0 R]
+9965 0 obj <<
+/Kids [9483 0 R 9484 0 R 9485 0 R 9486 0 R 9487 0 R 9488 0 R]
 /Limits [(Item.60) (Item.631)]
 >> endobj
-9997 0 obj <<
-/Kids [9520 0 R 9521 0 R 9522 0 R 9523 0 R 9524 0 R 9525 0 R]
+9966 0 obj <<
+/Kids [9489 0 R 9490 0 R 9491 0 R 9492 0 R 9493 0 R 9494 0 R]
 /Limits [(Item.632) (Item.664)]
 >> endobj
-9998 0 obj <<
-/Kids [9526 0 R 9527 0 R 9528 0 R 9529 0 R 9530 0 R 9531 0 R]
+9967 0 obj <<
+/Kids [9495 0 R 9496 0 R 9497 0 R 9498 0 R 9499 0 R 9500 0 R]
 /Limits [(Item.665) (Item.697)]
 >> endobj
-9999 0 obj <<
-/Kids [9532 0 R 9533 0 R 9534 0 R 9535 0 R 9536 0 R 9537 0 R]
+9968 0 obj <<
+/Kids [9501 0 R 9502 0 R 9503 0 R 9504 0 R 9505 0 R 9506 0 R]
 /Limits [(Item.698) (Item.87)]
 >> endobj
-10000 0 obj <<
-/Kids [9538 0 R 9539 0 R 9540 0 R 9541 0 R 9542 0 R 9543 0 R]
+9969 0 obj <<
+/Kids [9507 0 R 9508 0 R 9509 0 R 9510 0 R 9511 0 R 9512 0 R]
 /Limits [(Item.88) (bldg12nameda)]
 >> endobj
-10001 0 obj <<
-/Kids [9544 0 R 9545 0 R 9546 0 R 9547 0 R 9548 0 R 9549 0 R]
+9970 0 obj <<
+/Kids [9513 0 R 9514 0 R 9515 0 R 9516 0 R 9517 0 R 9518 0 R]
 /Limits [(bldg12namedb) (ch5-dnshcp-setup)]
 >> endobj
-10002 0 obj <<
-/Kids [9550 0 R 9551 0 R 9552 0 R 9553 0 R 9554 0 R 9555 0 R]
+9971 0 obj <<
+/Kids [9519 0 R 9520 0 R 9521 0 R 9522 0 R 9523 0 R 9524 0 R]
 /Limits [(ch5-dommem-smb) (ch9-adsdc)]
 >> endobj
-10003 0 obj <<
-/Kids [9556 0 R 9557 0 R 9558 0 R 9559 0 R 9560 0 R 9561 0 R]
+9972 0 obj <<
+/Kids [9525 0 R 9526 0 R 9527 0 R 9528 0 R 9529 0 R 9530 0 R]
 /Limits [(ch9-adssdm) (chapter.2)]
 >> endobj
-10004 0 obj <<
-/Kids [9562 0 R 9563 0 R 9564 0 R 9565 0 R 9566 0 R 9567 0 R]
+9973 0 obj <<
+/Kids [9531 0 R 9532 0 R 9533 0 R 9534 0 R 9535 0 R 9536 0 R]
 /Limits [(chapter.3) (example.10.3.2)]
 >> endobj
-10005 0 obj <<
-/Kids [9568 0 R 9569 0 R 9570 0 R 9571 0 R 9572 0 R 9573 0 R]
+9974 0 obj <<
+/Kids [9537 0 R 9538 0 R 9539 0 R 9540 0 R 9541 0 R 9542 0 R]
 /Limits [(example.10.3.3) (example.3.3.2)]
 >> endobj
-10006 0 obj <<
-/Kids [9574 0 R 9575 0 R 9576 0 R 9577 0 R 9578 0 R 9579 0 R]
+9975 0 obj <<
+/Kids [9543 0 R 9544 0 R 9545 0 R 9546 0 R 9547 0 R 9548 0 R]
 /Limits [(example.3.3.3) (example.5.5.5)]
 >> endobj
-10007 0 obj <<
-/Kids [9580 0 R 9581 0 R 9582 0 R 9583 0 R 9584 0 R 9585 0 R]
+9976 0 obj <<
+/Kids [9549 0 R 9550 0 R 9551 0 R 9552 0 R 9553 0 R 9554 0 R]
 /Limits [(example.6.3.1) (figure.15.4)]
 >> endobj
-10008 0 obj <<
-/Kids [9586 0 R 9587 0 R 9588 0 R 9589 0 R 9590 0 R 9591 0 R]
-/Limits [(figure.15.5) (id2422839)]
+9977 0 obj <<
+/Kids [9555 0 R 9556 0 R 9557 0 R 9558 0 R 9559 0 R 9560 0 R]
+/Limits [(figure.15.5) (id208651)]
 >> endobj
-10009 0 obj <<
-/Kids [9592 0 R 9593 0 R 9594 0 R 9595 0 R 9596 0 R 9597 0 R]
-/Limits [(id2422921) (id2491049)]
+9978 0 obj <<
+/Kids [9561 0 R 9562 0 R 9563 0 R 9564 0 R 9565 0 R 9566 0 R]
+/Limits [(id249668) (id275836)]
 >> endobj
-10010 0 obj <<
-/Kids [9598 0 R 9599 0 R 9600 0 R 9601 0 R 9602 0 R 9603 0 R]
-/Limits [(id2491344) (id2518398)]
+9979 0 obj <<
+/Kids [9567 0 R 9568 0 R 9569 0 R 9570 0 R 9571 0 R 9572 0 R]
+/Limits [(id276405) (id298394)]
 >> endobj
-10011 0 obj <<
-/Kids [9604 0 R 9605 0 R 9606 0 R 9607 0 R 9608 0 R 9609 0 R]
-/Limits [(id2518620) (id2537632)]
+9980 0 obj <<
+/Kids [9573 0 R 9574 0 R 9575 0 R 9576 0 R 9577 0 R 9578 0 R]
+/Limits [(id298782) (id318736)]
 >> endobj
-10012 0 obj <<
-/Kids [9610 0 R 9611 0 R 9612 0 R 9613 0 R 9614 0 R 9615 0 R]
-/Limits [(id2541204) (id2556959)]
+9981 0 obj <<
+/Kids [9579 0 R 9580 0 R 9581 0 R 9582 0 R 9583 0 R 9584 0 R]
+/Limits [(id319067) (id331882)]
 >> endobj
-10013 0 obj <<
-/Kids [9616 0 R 9617 0 R 9618 0 R 9619 0 R 9620 0 R 9621 0 R]
-/Limits [(id2557667) (id2572801)]
+9982 0 obj <<
+/Kids [9585 0 R 9586 0 R 9587 0 R 9588 0 R 9589 0 R 9590 0 R]
+/Limits [(id331978) (id345162)]
 >> endobj
-10014 0 obj <<
-/Kids [9622 0 R 9623 0 R 9624 0 R 9625 0 R 9626 0 R 9627 0 R]
-/Limits [(id2572825) (id2586716)]
+9983 0 obj <<
+/Kids [9591 0 R 9592 0 R 9593 0 R 9594 0 R 9595 0 R 9596 0 R]
+/Limits [(id345241) (id357100)]
 >> endobj
-10015 0 obj <<
-/Kids [9628 0 R 9629 0 R 9630 0 R 9631 0 R 9632 0 R 9633 0 R]
-/Limits [(id2587135) (lstlisting.3.-8)]
+9984 0 obj <<
+/Kids [9597 0 R 9598 0 R 9599 0 R 9600 0 R 9601 0 R 9602 0 R]
+/Limits [(id357230) (lstlisting.3.-8)]
 >> endobj
-10016 0 obj <<
-/Kids [9634 0 R 9635 0 R 9636 0 R 9637 0 R 9638 0 R 9639 0 R]
+9985 0 obj <<
+/Kids [9603 0 R 9604 0 R 9605 0 R 9606 0 R 9607 0 R 9608 0 R]
 /Limits [(lstlisting.3.-9) (lstnumber.-10.17)]
 >> endobj
-10017 0 obj <<
-/Kids [9640 0 R 9641 0 R 9642 0 R 9643 0 R 9644 0 R 9645 0 R]
+9986 0 obj <<
+/Kids [9609 0 R 9610 0 R 9611 0 R 9612 0 R 9613 0 R 9614 0 R]
 /Limits [(lstnumber.-10.18) (lstnumber.-11.23)]
 >> endobj
-10018 0 obj <<
-/Kids [9646 0 R 9647 0 R 9648 0 R 9649 0 R 9650 0 R 9651 0 R]
+9987 0 obj <<
+/Kids [9615 0 R 9616 0 R 9617 0 R 9618 0 R 9619 0 R 9620 0 R]
 /Limits [(lstnumber.-11.24) (lstnumber.-12.32)]
 >> endobj
-10019 0 obj <<
-/Kids [9652 0 R 9653 0 R 9654 0 R 9655 0 R 9656 0 R 9657 0 R]
+9988 0 obj <<
+/Kids [9621 0 R 9622 0 R 9623 0 R 9624 0 R 9625 0 R 9626 0 R]
 /Limits [(lstnumber.-12.33) (lstnumber.-16.18)]
 >> endobj
-10020 0 obj <<
-/Kids [9658 0 R 9659 0 R 9660 0 R 9661 0 R 9662 0 R 9663 0 R]
+9989 0 obj <<
+/Kids [9627 0 R 9628 0 R 9629 0 R 9630 0 R 9631 0 R 9632 0 R]
 /Limits [(lstnumber.-16.19) (lstnumber.-18.1)]
 >> endobj
-10021 0 obj <<
-/Kids [9664 0 R 9665 0 R 9666 0 R 9667 0 R 9668 0 R 9669 0 R]
+9990 0 obj <<
+/Kids [9633 0 R 9634 0 R 9635 0 R 9636 0 R 9637 0 R 9638 0 R]
 /Limits [(lstnumber.-18.10) (lstnumber.-19.12)]
 >> endobj
-10022 0 obj <<
-/Kids [9670 0 R 9671 0 R 9672 0 R 9673 0 R 9674 0 R 9675 0 R]
+9991 0 obj <<
+/Kids [9639 0 R 9640 0 R 9641 0 R 9642 0 R 9643 0 R 9644 0 R]
 /Limits [(lstnumber.-19.13) (lstnumber.-2.15)]
 >> endobj
-10023 0 obj <<
-/Kids [9676 0 R 9677 0 R 9678 0 R 9679 0 R 9680 0 R 9681 0 R]
+9992 0 obj <<
+/Kids [9645 0 R 9646 0 R 9647 0 R 9648 0 R 9649 0 R 9650 0 R]
 /Limits [(lstnumber.-2.16) (lstnumber.-20.2)]
 >> endobj
-10024 0 obj <<
-/Kids [9682 0 R 9683 0 R 9684 0 R 9685 0 R 9686 0 R 9687 0 R]
+9993 0 obj <<
+/Kids [9651 0 R 9652 0 R 9653 0 R 9654 0 R 9655 0 R 9656 0 R]
 /Limits [(lstnumber.-20.20) (lstnumber.-21.7)]
 >> endobj
-10025 0 obj <<
-/Kids [9688 0 R 9689 0 R 9690 0 R 9691 0 R 9692 0 R 9693 0 R]
+9994 0 obj <<
+/Kids [9657 0 R 9658 0 R 9659 0 R 9660 0 R 9661 0 R 9662 0 R]
 /Limits [(lstnumber.-21.8) (lstnumber.-22.4)]
 >> endobj
-10026 0 obj <<
-/Kids [9694 0 R 9695 0 R 9696 0 R 9697 0 R 9698 0 R 9699 0 R]
+9995 0 obj <<
+/Kids [9663 0 R 9664 0 R 9665 0 R 9666 0 R 9667 0 R 9668 0 R]
 /Limits [(lstnumber.-22.40) (lstnumber.-24.12)]
 >> endobj
-10027 0 obj <<
-/Kids [9700 0 R 9701 0 R 9702 0 R 9703 0 R 9704 0 R 9705 0 R]
+9996 0 obj <<
+/Kids [9669 0 R 9670 0 R 9671 0 R 9672 0 R 9673 0 R 9674 0 R]
 /Limits [(lstnumber.-24.13) (lstnumber.-25.21)]
 >> endobj
-10028 0 obj <<
-/Kids [9706 0 R 9707 0 R 9708 0 R 9709 0 R 9710 0 R 9711 0 R]
+9997 0 obj <<
+/Kids [9675 0 R 9676 0 R 9677 0 R 9678 0 R 9679 0 R 9680 0 R]
 /Limits [(lstnumber.-25.22) (lstnumber.-26.17)]
 >> endobj
-10029 0 obj <<
-/Kids [9712 0 R 9713 0 R 9714 0 R 9715 0 R 9716 0 R 9717 0 R]
+9998 0 obj <<
+/Kids [9681 0 R 9682 0 R 9683 0 R 9684 0 R 9685 0 R 9686 0 R]
 /Limits [(lstnumber.-26.18) (lstnumber.-27.18)]
 >> endobj
-10030 0 obj <<
-/Kids [9718 0 R 9719 0 R 9720 0 R 9721 0 R 9722 0 R 9723 0 R]
+9999 0 obj <<
+/Kids [9687 0 R 9688 0 R 9689 0 R 9690 0 R 9691 0 R 9692 0 R]
 /Limits [(lstnumber.-27.19) (lstnumber.-28.12)]
 >> endobj
-10031 0 obj <<
-/Kids [9724 0 R 9725 0 R 9726 0 R 9727 0 R 9728 0 R 9729 0 R]
+10000 0 obj <<
+/Kids [9693 0 R 9694 0 R 9695 0 R 9696 0 R 9697 0 R 9698 0 R]
 /Limits [(lstnumber.-28.13) (lstnumber.-29.10)]
 >> endobj
-10032 0 obj <<
-/Kids [9730 0 R 9731 0 R 9732 0 R 9733 0 R 9734 0 R 9735 0 R]
+10001 0 obj <<
+/Kids [9699 0 R 9700 0 R 9701 0 R 9702 0 R 9703 0 R 9704 0 R]
 /Limits [(lstnumber.-29.11) (lstnumber.-3.1)]
 >> endobj
-10033 0 obj <<
-/Kids [9736 0 R 9737 0 R 9738 0 R 9739 0 R 9740 0 R 9741 0 R]
+10002 0 obj <<
+/Kids [9705 0 R 9706 0 R 9707 0 R 9708 0 R 9709 0 R 9710 0 R]
 /Limits [(lstnumber.-3.10) (lstnumber.-30.13)]
 >> endobj
-10034 0 obj <<
-/Kids [9742 0 R 9743 0 R 9744 0 R 9745 0 R 9746 0 R 9747 0 R]
+10003 0 obj <<
+/Kids [9711 0 R 9712 0 R 9713 0 R 9714 0 R 9715 0 R 9716 0 R]
 /Limits [(lstnumber.-30.14) (lstnumber.-31.13)]
 >> endobj
-10035 0 obj <<
-/Kids [9748 0 R 9749 0 R 9750 0 R 9751 0 R 9752 0 R 9753 0 R]
+10004 0 obj <<
+/Kids [9717 0 R 9718 0 R 9719 0 R 9720 0 R 9721 0 R 9722 0 R]
 /Limits [(lstnumber.-31.14) (lstnumber.-33.4)]
 >> endobj
-10036 0 obj <<
-/Kids [9754 0 R 9755 0 R 9756 0 R 9757 0 R 9758 0 R 9759 0 R]
+10005 0 obj <<
+/Kids [9723 0 R 9724 0 R 9725 0 R 9726 0 R 9727 0 R 9728 0 R]
 /Limits [(lstnumber.-33.5) (lstnumber.-34.37)]
 >> endobj
-10037 0 obj <<
-/Kids [9760 0 R 9761 0 R 9762 0 R 9763 0 R 9764 0 R 9765 0 R]
+10006 0 obj <<
+/Kids [9729 0 R 9730 0 R 9731 0 R 9732 0 R 9733 0 R 9734 0 R]
 /Limits [(lstnumber.-34.38) (lstnumber.-35.32)]
 >> endobj
-10038 0 obj <<
-/Kids [9766 0 R 9767 0 R 9768 0 R 9769 0 R 9770 0 R 9771 0 R]
+10007 0 obj <<
+/Kids [9735 0 R 9736 0 R 9737 0 R 9738 0 R 9739 0 R 9740 0 R]
 /Limits [(lstnumber.-35.33) (lstnumber.-36.33)]
 >> endobj
-10039 0 obj <<
-/Kids [9772 0 R 9773 0 R 9774 0 R 9775 0 R 9776 0 R 9777 0 R]
+10008 0 obj <<
+/Kids [9741 0 R 9742 0 R 9743 0 R 9744 0 R 9745 0 R 9746 0 R]
 /Limits [(lstnumber.-36.34) (lstnumber.-37.31)]
 >> endobj
-10040 0 obj <<
-/Kids [9778 0 R 9779 0 R 9780 0 R 9781 0 R 9782 0 R 9783 0 R]
+10009 0 obj <<
+/Kids [9747 0 R 9748 0 R 9749 0 R 9750 0 R 9751 0 R 9752 0 R]
 /Limits [(lstnumber.-37.32) (lstnumber.-38.34)]
 >> endobj
-10041 0 obj <<
-/Kids [9784 0 R 9785 0 R 9786 0 R 9787 0 R 9788 0 R 9789 0 R]
+10010 0 obj <<
+/Kids [9753 0 R 9754 0 R 9755 0 R 9756 0 R 9757 0 R 9758 0 R]
 /Limits [(lstnumber.-38.4) (lstnumber.-39.7)]
 >> endobj
-10042 0 obj <<
-/Kids [9790 0 R 9791 0 R 9792 0 R 9793 0 R 9794 0 R 9795 0 R]
+10011 0 obj <<
+/Kids [9759 0 R 9760 0 R 9761 0 R 9762 0 R 9763 0 R 9764 0 R]
 /Limits [(lstnumber.-39.8) (lstnumber.-40.19)]
 >> endobj
-10043 0 obj <<
-/Kids [9796 0 R 9797 0 R 9798 0 R 9799 0 R 9800 0 R 9801 0 R]
+10012 0 obj <<
+/Kids [9765 0 R 9766 0 R 9767 0 R 9768 0 R 9769 0 R 9770 0 R]
 /Limits [(lstnumber.-40.2) (lstnumber.-5.17)]
 >> endobj
-10044 0 obj <<
-/Kids [9802 0 R 9803 0 R 9804 0 R 9805 0 R 9806 0 R 9807 0 R]
+10013 0 obj <<
+/Kids [9771 0 R 9772 0 R 9773 0 R 9774 0 R 9775 0 R 9776 0 R]
 /Limits [(lstnumber.-5.18) (lstnumber.-6.5)]
 >> endobj
-10045 0 obj <<
-/Kids [9808 0 R 9809 0 R 9810 0 R 9811 0 R 9812 0 R 9813 0 R]
+10014 0 obj <<
+/Kids [9777 0 R 9778 0 R 9779 0 R 9780 0 R 9781 0 R 9782 0 R]
 /Limits [(lstnumber.-6.6) (page.119)]
 >> endobj
-10046 0 obj <<
-/Kids [9814 0 R 9815 0 R 9816 0 R 9817 0 R 9818 0 R 9819 0 R]
+10015 0 obj <<
+/Kids [9783 0 R 9784 0 R 9785 0 R 9786 0 R 9787 0 R 9788 0 R]
 /Limits [(page.12) (page.151)]
 >> endobj
-10047 0 obj <<
-/Kids [9820 0 R 9821 0 R 9822 0 R 9823 0 R 9824 0 R 9825 0 R]
+10016 0 obj <<
+/Kids [9789 0 R 9790 0 R 9791 0 R 9792 0 R 9793 0 R 9794 0 R]
 /Limits [(page.152) (page.184)]
 >> endobj
-10048 0 obj <<
-/Kids [9826 0 R 9827 0 R 9828 0 R 9829 0 R 9830 0 R 9831 0 R]
+10017 0 obj <<
+/Kids [9795 0 R 9796 0 R 9797 0 R 9798 0 R 9799 0 R 9800 0 R]
 /Limits [(page.185) (page.216)]
 >> endobj
-10049 0 obj <<
-/Kids [9832 0 R 9833 0 R 9834 0 R 9835 0 R 9836 0 R 9837 0 R]
+10018 0 obj <<
+/Kids [9801 0 R 9802 0 R 9803 0 R 9804 0 R 9805 0 R 9806 0 R]
 /Limits [(page.217) (page.249)]
 >> endobj
-10050 0 obj <<
-/Kids [9838 0 R 9839 0 R 9840 0 R 9841 0 R 9842 0 R 9843 0 R]
+10019 0 obj <<
+/Kids [9807 0 R 9808 0 R 9809 0 R 9810 0 R 9811 0 R 9812 0 R]
 /Limits [(page.25) (page.281)]
 >> endobj
-10051 0 obj <<
-/Kids [9844 0 R 9845 0 R 9846 0 R 9847 0 R 9848 0 R 9849 0 R]
+10020 0 obj <<
+/Kids [9813 0 R 9814 0 R 9815 0 R 9816 0 R 9817 0 R 9818 0 R]
 /Limits [(page.282) (page.313)]
 >> endobj
-10052 0 obj <<
-/Kids [9850 0 R 9851 0 R 9852 0 R 9853 0 R 9854 0 R 9855 0 R]
+10021 0 obj <<
+/Kids [9819 0 R 9820 0 R 9821 0 R 9822 0 R 9823 0 R 9824 0 R]
 /Limits [(page.314) (page.346)]
 >> endobj
-10053 0 obj <<
-/Kids [9856 0 R 9857 0 R 9858 0 R 9859 0 R 9860 0 R 9861 0 R]
+10022 0 obj <<
+/Kids [9825 0 R 9826 0 R 9827 0 R 9828 0 R 9829 0 R 9830 0 R]
 /Limits [(page.347) (page.379)]
 >> endobj
-10054 0 obj <<
-/Kids [9862 0 R 9863 0 R 9864 0 R 9865 0 R 9866 0 R 9867 0 R]
+10023 0 obj <<
+/Kids [9831 0 R 9832 0 R 9833 0 R 9834 0 R 9835 0 R 9836 0 R]
 /Limits [(page.38) (page.410)]
 >> endobj
-10055 0 obj <<
-/Kids [9868 0 R 9869 0 R 9870 0 R 9871 0 R 9872 0 R 9873 0 R]
+10024 0 obj <<
+/Kids [9837 0 R 9838 0 R 9839 0 R 9840 0 R 9841 0 R 9842 0 R]
 /Limits [(page.411) (page.443)]
 >> endobj
-10056 0 obj <<
-/Kids [9874 0 R 9875 0 R 9876 0 R 9877 0 R 9878 0 R 9879 0 R]
+10025 0 obj <<
+/Kids [9843 0 R 9844 0 R 9845 0 R 9846 0 R 9847 0 R 9848 0 R]
 /Limits [(page.444) (page.476)]
 >> endobj
-10057 0 obj <<
-/Kids [9880 0 R 9881 0 R 9882 0 R 9883 0 R 9884 0 R 9885 0 R]
+10026 0 obj <<
+/Kids [9849 0 R 9850 0 R 9851 0 R 9852 0 R 9853 0 R 9854 0 R]
 /Limits [(page.477) (page.508)]
 >> endobj
-10058 0 obj <<
-/Kids [9886 0 R 9887 0 R 9888 0 R 9889 0 R 9890 0 R 9891 0 R]
+10027 0 obj <<
+/Kids [9855 0 R 9856 0 R 9857 0 R 9858 0 R 9859 0 R 9860 0 R]
 /Limits [(page.509) (page.540)]
 >> endobj
-10059 0 obj <<
-/Kids [9892 0 R 9893 0 R 9894 0 R 9895 0 R 9896 0 R 9897 0 R]
+10028 0 obj <<
+/Kids [9861 0 R 9862 0 R 9863 0 R 9864 0 R 9865 0 R 9866 0 R]
 /Limits [(page.541) (page.573)]
 >> endobj
-10060 0 obj <<
-/Kids [9898 0 R 9899 0 R 9900 0 R 9901 0 R 9902 0 R 9903 0 R]
+10029 0 obj <<
+/Kids [9867 0 R 9868 0 R 9869 0 R 9870 0 R 9871 0 R 9872 0 R]
 /Limits [(page.574) (page.7)]
 >> endobj
-10061 0 obj <<
-/Kids [9904 0 R 9905 0 R 9906 0 R 9907 0 R 9908 0 R 9909 0 R]
+10030 0 obj <<
+/Kids [9873 0 R 9874 0 R 9875 0 R 9876 0 R 9877 0 R 9878 0 R]
 /Limits [(page.70) (page.viii)]
 >> endobj
-10062 0 obj <<
-/Kids [9910 0 R 9911 0 R 9912 0 R 9913 0 R 9914 0 R 9915 0 R]
+10031 0 obj <<
+/Kids [9879 0 R 9880 0 R 9881 0 R 9882 0 R 9883 0 R 9884 0 R]
 /Limits [(page.x) (part.3)]
 >> endobj
-10063 0 obj <<
-/Kids [9916 0 R 9917 0 R 9918 0 R 9919 0 R 9920 0 R 9921 0 R]
+10032 0 obj <<
+/Kids [9885 0 R 9886 0 R 9887 0 R 9888 0 R 9889 0 R 9890 0 R]
 /Limits [(pktcap01) (sbehap-ppc)]
 >> endobj
-10064 0 obj <<
-/Kids [9922 0 R 9923 0 R 9924 0 R 9925 0 R 9926 0 R 9927 0 R]
+10033 0 obj <<
+/Kids [9891 0 R 9892 0 R 9893 0 R 9894 0 R 9895 0 R 9896 0 R]
 /Limits [(sbehap-privs) (section*.21)]
 >> endobj
-10065 0 obj <<
-/Kids [9928 0 R 9929 0 R 9930 0 R 9931 0 R 9932 0 R 9933 0 R]
+10034 0 obj <<
+/Kids [9897 0 R 9898 0 R 9899 0 R 9900 0 R 9901 0 R 9902 0 R]
 /Limits [(section*.22) (section*.59)]
 >> endobj
-10066 0 obj <<
-/Kids [9934 0 R 9935 0 R 9936 0 R 9937 0 R 9938 0 R 9939 0 R]
+10035 0 obj <<
+/Kids [9903 0 R 9904 0 R 9905 0 R 9906 0 R 9907 0 R 9908 0 R]
 /Limits [(section*.60) (section.16.3)]
 >> endobj
-10067 0 obj <<
-/Kids [9940 0 R 9941 0 R 9942 0 R 9943 0 R 9944 0 R 9945 0 R]
+10036 0 obj <<
+/Kids [9909 0 R 9910 0 R 9911 0 R 9912 0 R 9913 0 R 9914 0 R]
 /Limits [(section.16.4) (section.9.2)]
 >> endobj
-10068 0 obj <<
-/Kids [9946 0 R 9947 0 R 9948 0 R 9949 0 R 9950 0 R 9951 0 R]
+10037 0 obj <<
+/Kids [9915 0 R 9916 0 R 9917 0 R 9918 0 R 9919 0 R 9920 0 R]
 /Limits [(section.9.3) (subsection.15.4.1)]
 >> endobj
-10069 0 obj <<
-/Kids [9952 0 R 9953 0 R 9954 0 R 9955 0 R 9956 0 R 9957 0 R]
+10038 0 obj <<
+/Kids [9921 0 R 9922 0 R 9923 0 R 9924 0 R 9925 0 R 9926 0 R]
 /Limits [(subsection.15.4.2) (subsection.4.3.2)]
 >> endobj
-10070 0 obj <<
-/Kids [9958 0 R 9959 0 R 9960 0 R 9961 0 R 9962 0 R 9963 0 R]
+10039 0 obj <<
+/Kids [9927 0 R 9928 0 R 9929 0 R 9930 0 R 9931 0 R 9932 0 R]
 /Limits [(subsection.4.3.3) (subsection.7.3.5)]
 >> endobj
-10071 0 obj <<
-/Kids [9964 0 R 9965 0 R 9966 0 R 9967 0 R 9968 0 R 9969 0 R]
+10040 0 obj <<
+/Kids [9933 0 R 9934 0 R 9935 0 R 9936 0 R 9937 0 R 9938 0 R]
 /Limits [(subsection.7.3.6) (subsubsection.16.3.1.1)]
 >> endobj
-10072 0 obj <<
-/Kids [9970 0 R 9971 0 R 9972 0 R 9973 0 R 9974 0 R 9975 0 R]
+10041 0 obj <<
+/Kids [9939 0 R 9940 0 R 9941 0 R 9942 0 R 9943 0 R 9944 0 R]
 /Limits [(subsubsection.16.3.2.1) (subsubsection.8.3.2.2)]
 >> endobj
-10073 0 obj <<
-/Kids [9976 0 R 9977 0 R 9978 0 R 9979 0 R]
+10042 0 obj <<
+/Kids [9945 0 R 9946 0 R 9947 0 R 9948 0 R]
 /Limits [(subsubsection.9.3.1.1) (wdcsdm)]
 >> endobj
-10074 0 obj <<
-/Kids [9980 0 R 9981 0 R 9982 0 R 9983 0 R 9984 0 R 9985 0 R]
+10043 0 obj <<
+/Kids [9949 0 R 9950 0 R 9951 0 R 9952 0 R 9953 0 R 9954 0 R]
 /Limits [(105) (Item.275)]
 >> endobj
-10075 0 obj <<
-/Kids [9986 0 R 9987 0 R 9988 0 R 9989 0 R 9990 0 R 9991 0 R]
+10044 0 obj <<
+/Kids [9955 0 R 9956 0 R 9957 0 R 9958 0 R 9959 0 R 9960 0 R]
 /Limits [(Item.276) (Item.47)]
 >> endobj
-10076 0 obj <<
-/Kids [9992 0 R 9993 0 R 9994 0 R 9995 0 R 9996 0 R 9997 0 R]
+10045 0 obj <<
+/Kids [9961 0 R 9962 0 R 9963 0 R 9964 0 R 9965 0 R 9966 0 R]
 /Limits [(Item.470) (Item.664)]
 >> endobj
-10077 0 obj <<
-/Kids [9998 0 R 9999 0 R 10000 0 R 10001 0 R 10002 0 R 10003 0 R]
+10046 0 obj <<
+/Kids [9967 0 R 9968 0 R 9969 0 R 9970 0 R 9971 0 R 9972 0 R]
 /Limits [(Item.665) (chapter.2)]
 >> endobj
-10078 0 obj <<
-/Kids [10004 0 R 10005 0 R 10006 0 R 10007 0 R 10008 0 R 10009 0 R]
-/Limits [(chapter.3) (id2491049)]
+10047 0 obj <<
+/Kids [9973 0 R 9974 0 R 9975 0 R 9976 0 R 9977 0 R 9978 0 R]
+/Limits [(chapter.3) (id275836)]
 >> endobj
-10079 0 obj <<
-/Kids [10010 0 R 10011 0 R 10012 0 R 10013 0 R 10014 0 R 10015 0 R]
-/Limits [(id2491344) (lstlisting.3.-8)]
+10048 0 obj <<
+/Kids [9979 0 R 9980 0 R 9981 0 R 9982 0 R 9983 0 R 9984 0 R]
+/Limits [(id276405) (lstlisting.3.-8)]
 >> endobj
-10080 0 obj <<
-/Kids [10016 0 R 10017 0 R 10018 0 R 10019 0 R 10020 0 R 10021 0 R]
+10049 0 obj <<
+/Kids [9985 0 R 9986 0 R 9987 0 R 9988 0 R 9989 0 R 9990 0 R]
 /Limits [(lstlisting.3.-9) (lstnumber.-19.12)]
 >> endobj
-10081 0 obj <<
-/Kids [10022 0 R 10023 0 R 10024 0 R 10025 0 R 10026 0 R 10027 0 R]
+10050 0 obj <<
+/Kids [9991 0 R 9992 0 R 9993 0 R 9994 0 R 9995 0 R 9996 0 R]
 /Limits [(lstnumber.-19.13) (lstnumber.-25.21)]
 >> endobj
-10082 0 obj <<
-/Kids [10028 0 R 10029 0 R 10030 0 R 10031 0 R 10032 0 R 10033 0 R]
+10051 0 obj <<
+/Kids [9997 0 R 9998 0 R 9999 0 R 10000 0 R 10001 0 R 10002 0 R]
 /Limits [(lstnumber.-25.22) (lstnumber.-30.13)]
 >> endobj
-10083 0 obj <<
-/Kids [10034 0 R 10035 0 R 10036 0 R 10037 0 R 10038 0 R 10039 0 R]
+10052 0 obj <<
+/Kids [10003 0 R 10004 0 R 10005 0 R 10006 0 R 10007 0 R 10008 0 R]
 /Limits [(lstnumber.-30.14) (lstnumber.-37.31)]
 >> endobj
-10084 0 obj <<
-/Kids [10040 0 R 10041 0 R 10042 0 R 10043 0 R 10044 0 R 10045 0 R]
+10053 0 obj <<
+/Kids [10009 0 R 10010 0 R 10011 0 R 10012 0 R 10013 0 R 10014 0 R]
 /Limits [(lstnumber.-37.32) (page.119)]
 >> endobj
-10085 0 obj <<
-/Kids [10046 0 R 10047 0 R 10048 0 R 10049 0 R 10050 0 R 10051 0 R]
+10054 0 obj <<
+/Kids [10015 0 R 10016 0 R 10017 0 R 10018 0 R 10019 0 R 10020 0 R]
 /Limits [(page.12) (page.313)]
 >> endobj
-10086 0 obj <<
-/Kids [10052 0 R 10053 0 R 10054 0 R 10055 0 R 10056 0 R 10057 0 R]
+10055 0 obj <<
+/Kids [10021 0 R 10022 0 R 10023 0 R 10024 0 R 10025 0 R 10026 0 R]
 /Limits [(page.314) (page.508)]
 >> endobj
-10087 0 obj <<
-/Kids [10058 0 R 10059 0 R 10060 0 R 10061 0 R 10062 0 R 10063 0 R]
+10056 0 obj <<
+/Kids [10027 0 R 10028 0 R 10029 0 R 10030 0 R 10031 0 R 10032 0 R]
 /Limits [(page.509) (sbehap-ppc)]
 >> endobj
-10088 0 obj <<
-/Kids [10064 0 R 10065 0 R 10066 0 R 10067 0 R 10068 0 R 10069 0 R]
+10057 0 obj <<
+/Kids [10033 0 R 10034 0 R 10035 0 R 10036 0 R 10037 0 R 10038 0 R]
 /Limits [(sbehap-privs) (subsection.4.3.2)]
 >> endobj
-10089 0 obj <<
-/Kids [10070 0 R 10071 0 R 10072 0 R 10073 0 R]
+10058 0 obj <<
+/Kids [10039 0 R 10040 0 R 10041 0 R 10042 0 R]
 /Limits [(subsection.4.3.3) (wdcsdm)]
 >> endobj
-10090 0 obj <<
-/Kids [10074 0 R 10075 0 R 10076 0 R 10077 0 R 10078 0 R 10079 0 R]
+10059 0 obj <<
+/Kids [10043 0 R 10044 0 R 10045 0 R 10046 0 R 10047 0 R 10048 0 R]
 /Limits [(105) (lstlisting.3.-8)]
 >> endobj
-10091 0 obj <<
-/Kids [10080 0 R 10081 0 R 10082 0 R 10083 0 R 10084 0 R 10085 0 R]
+10060 0 obj <<
+/Kids [10049 0 R 10050 0 R 10051 0 R 10052 0 R 10053 0 R 10054 0 R]
 /Limits [(lstlisting.3.-9) (page.313)]
 >> endobj
-10092 0 obj <<
-/Kids [10086 0 R 10087 0 R 10088 0 R 10089 0 R]
+10061 0 obj <<
+/Kids [10055 0 R 10056 0 R 10057 0 R 10058 0 R]
 /Limits [(page.314) (wdcsdm)]
 >> endobj
-10093 0 obj <<
-/Kids [10090 0 R 10091 0 R 10092 0 R]
+10062 0 obj <<
+/Kids [10059 0 R 10060 0 R 10061 0 R]
 /Limits [(105) (wdcsdm)]
 >> endobj
-10094 0 obj <<
-/Dests 10093 0 R
+10063 0 obj <<
+/Dests 10062 0 R
 >> endobj
-10095 0 obj <<
+10064 0 obj <<
 /Type /Catalog
-/Pages 9416 0 R
-/Outlines 9417 0 R
-/Names 10094 0 R
+/Pages 9385 0 R
+/Outlines 9386 0 R
+/Names 10063 0 R
 /PageMode/UseOutlines/PageLabels << /Nums [0 << /S /r >> 1 << /S /r /St 7 >> 37 << /S /r /St 41 >> 39 << /S /D >> 303 << /S /D /St 263 >> 465 << /S /D /St 423 >> ] >>
 /OpenAction 1117 0 R
 >> endobj
-10096 0 obj <<
+10065 0 obj <<
 /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.3)/Keywords()
-/CreationDate (D:20080610111101+02'00')
-/ModDate (D:20080610111101+02'00')
+/CreationDate (D:20080528090643-05'00')
+/ModDate (D:20080528090643-05'00')
 /Trapped /False
 /PTEX.Fullbanner (This is pdfTeX using libpoppler, Version 3.141592-1.40.3-2.2 (Web2C 7.5.6) kpathsea version 3.5.6)
 >> endobj
 xref
-0 10097
+0 10066
 0000000001 65535 f 
 0000000002 00000 f 
 0000000003 00000 f 
 0000000004 00000 f 
 0000000000 00000 f 
 0000000015 00000 n 
-0000032185 00000 n 
-0003418063 00000 n 
+0000032187 00000 n 
+0003394378 00000 n 
 0000000061 00000 n 
 0000000102 00000 n 
-0000032245 00000 n 
-0003417976 00000 n 
+0000032247 00000 n 
+0003394291 00000 n 
 0000000148 00000 n 
 0000000182 00000 n 
-0003156101 00000 n 
-0003417887 00000 n 
-0000000228 00000 n 
-0000000255 00000 n 
-0000034773 00000 n 
-0003417798 00000 n 
-0000000302 00000 n 
-0000000337 00000 n 
-0000101696 00000 n 
-0003417709 00000 n 
-0000000384 00000 n 
-0000000418 00000 n 
-0000128491 00000 n 
-0003417620 00000 n 
-0000000465 00000 n 
-0000000498 00000 n 
-0000139465 00000 n 
-0003417531 00000 n 
-0000000545 00000 n 
-0000000572 00000 n 
-0000142151 00000 n 
-0003417442 00000 n 
-0000000619 00000 n 
-0000000645 00000 n 
-0000175695 00000 n 
-0003417314 00000 n 
-0000000688 00000 n 
-0000000744 00000 n 
-0000178213 00000 n 
-0003417240 00000 n 
-0000000792 00000 n 
-0000000841 00000 n 
-0000180927 00000 n 
-0003417114 00000 n 
-0000000887 00000 n 
-0000000939 00000 n 
-0000181053 00000 n 
-0003417040 00000 n 
-0000000987 00000 n 
-0000001022 00000 n 
-0000183581 00000 n 
-0003416915 00000 n 
-0000001070 00000 n 
-0000001109 00000 n 
-0000183707 00000 n 
-0003416804 00000 n 
-0000001162 00000 n 
-0000001202 00000 n 
-0000186982 00000 n 
-0003416730 00000 n 
-0000001260 00000 n 
-0000001312 00000 n 
-0000189615 00000 n 
-0003416643 00000 n 
-0000001370 00000 n 
-0000001411 00000 n 
-0000193836 00000 n 
-0003416569 00000 n 
-0000001469 00000 n 
-0000001506 00000 n 
-0000199131 00000 n 
-0003416445 00000 n 
-0000001559 00000 n 
-0000001613 00000 n 
-0000202507 00000 n 
-0003416371 00000 n 
-0000001671 00000 n 
-0000001723 00000 n 
-0000205230 00000 n 
-0003416284 00000 n 
-0000001781 00000 n 
-0000001822 00000 n 
-0000242954 00000 n 
-0003416210 00000 n 
-0000001880 00000 n 
-0000001917 00000 n 
-0000243080 00000 n 
-0003416099 00000 n 
-0000001970 00000 n 
-0000002012 00000 n 
-0000245980 00000 n 
-0003416025 00000 n 
-0000002070 00000 n 
-0000002122 00000 n 
-0000246106 00000 n 
-0003415950 00000 n 
-0000002180 00000 n 
-0000002222 00000 n 
-0000270185 00000 n 
-0003415873 00000 n 
-0000002271 00000 n 
-0000002316 00000 n 
-0000279946 00000 n 
-0003415743 00000 n 
-0000002363 00000 n 
-0000002416 00000 n 
-0000282692 00000 n 
-0003415625 00000 n 
-0000002465 00000 n 
-0000002501 00000 n 
-0000282819 00000 n 
-0003415560 00000 n 
-0000002555 00000 n 
-0000002597 00000 n 
-0000285355 00000 n 
-0003415428 00000 n 
-0000002646 00000 n 
-0000002695 00000 n 
-0000285482 00000 n 
-0003415349 00000 n 
-0000002749 00000 n 
-0000002791 00000 n 
-0000292468 00000 n 
-0003415270 00000 n 
-0000002845 00000 n 
-0000002887 00000 n 
-0000292595 00000 n 
-0003415138 00000 n 
-0000002936 00000 n 
-0000002974 00000 n 
-0000317299 00000 n 
-0003415059 00000 n 
-0000003028 00000 n 
-0000003064 00000 n 
-0000329126 00000 n 
-0003414966 00000 n 
-0000003118 00000 n 
-0000003178 00000 n 
-0000329253 00000 n 
-0003414887 00000 n 
-0000003232 00000 n 
-0000003276 00000 n 
-0000331696 00000 n 
-0003414808 00000 n 
-0000003325 00000 n 
-0000003370 00000 n 
-0000352949 00000 n 
-0003414677 00000 n 
-0000003417 00000 n 
-0000003471 00000 n 
-0000353076 00000 n 
-0003414559 00000 n 
-0000003520 00000 n 
-0000003556 00000 n 
-0000355971 00000 n 
-0003414494 00000 n 
-0000003610 00000 n 
-0000003652 00000 n 
-0000374464 00000 n 
-0003414362 00000 n 
-0000003701 00000 n 
-0000003750 00000 n 
-0000374591 00000 n 
-0003414244 00000 n 
-0000003804 00000 n 
-0000003846 00000 n 
-0000382994 00000 n 
-0003414179 00000 n 
-0000003905 00000 n 
-0000003954 00000 n 
-0000388243 00000 n 
-0003414100 00000 n 
-0000004008 00000 n 
-0000004050 00000 n 
-0000388370 00000 n 
-0003413968 00000 n 
-0000004099 00000 n 
-0000004137 00000 n 
-0000394355 00000 n 
-0003413889 00000 n 
-0000004191 00000 n 
-0000004243 00000 n 
-0000401471 00000 n 
-0003413796 00000 n 
-0000004297 00000 n 
-0000004342 00000 n 
-0000414345 00000 n 
-0003413703 00000 n 
-0000004396 00000 n 
-0000004459 00000 n 
-0000417292 00000 n 
-0003413610 00000 n 
-0000004513 00000 n 
-0000004560 00000 n 
-0000421555 00000 n 
-0003413517 00000 n 
-0000004614 00000 n 
-0000004669 00000 n 
-0000424042 00000 n 
-0003413424 00000 n 
-0000004723 00000 n 
-0000004759 00000 n 
-0000440826 00000 n 
-0003413292 00000 n 
-0000004813 00000 n 
-0000004870 00000 n 
-0000443502 00000 n 
-0003413227 00000 n 
-0000004929 00000 n 
-0000004997 00000 n 
-0000446273 00000 n 
-0003413134 00000 n 
-0000005051 00000 n 
-0000005105 00000 n 
-0000453812 00000 n 
-0003413055 00000 n 
-0000005159 00000 n 
-0000005203 00000 n 
-0000456510 00000 n 
-0003412976 00000 n 
-0000005252 00000 n 
-0000005297 00000 n 
-0000494021 00000 n 
-0003412845 00000 n 
-0000005344 00000 n 
-0000005393 00000 n 
-0000496810 00000 n 
-0003412727 00000 n 
-0000005442 00000 n 
-0000005478 00000 n 
-0000499554 00000 n 
-0003412662 00000 n 
-0000005532 00000 n 
-0000005574 00000 n 
-0000502489 00000 n 
-0003412530 00000 n 
-0000005623 00000 n 
-0000005672 00000 n 
-0000502616 00000 n 
-0003412451 00000 n 
-0000005726 00000 n 
-0000005768 00000 n 
-0000508544 00000 n 
-0003412372 00000 n 
-0000005822 00000 n 
-0000005864 00000 n 
-0000508670 00000 n 
-0003412240 00000 n 
-0000005913 00000 n 
-0000005951 00000 n 
-0000508796 00000 n 
-0003412161 00000 n 
-0000006005 00000 n 
-0000006081 00000 n 
-0000508923 00000 n 
-0003412068 00000 n 
-0000006135 00000 n 
-0000006192 00000 n 
-0000540508 00000 n 
-0003411936 00000 n 
-0000006246 00000 n 
-0000006299 00000 n 
-0000542977 00000 n 
-0003411857 00000 n 
-0000006358 00000 n 
-0000006419 00000 n 
-0000553394 00000 n 
-0003411778 00000 n 
-0000006478 00000 n 
-0000006567 00000 n 
-0000560100 00000 n 
-0003411685 00000 n 
-0000006621 00000 n 
-0000006676 00000 n 
-0000580278 00000 n 
-0003411592 00000 n 
-0000006730 00000 n 
-0000006784 00000 n 
-0000587377 00000 n 
-0003411513 00000 n 
-0000006838 00000 n 
-0000006882 00000 n 
-0000589795 00000 n 
-0003411434 00000 n 
-0000006931 00000 n 
-0000006976 00000 n 
-0000608274 00000 n 
-0003411303 00000 n 
-0000007023 00000 n 
-0000007071 00000 n 
-0000619245 00000 n 
-0003411224 00000 n 
-0000007120 00000 n 
-0000007200 00000 n 
-0000619371 00000 n 
-0003411092 00000 n 
-0000007249 00000 n 
-0000007285 00000 n 
-0000624742 00000 n 
-0003411027 00000 n 
-0000007339 00000 n 
-0000007381 00000 n 
-0000624997 00000 n 
-0003410895 00000 n 
-0000007430 00000 n 
-0000007479 00000 n 
-0000635912 00000 n 
-0003410777 00000 n 
-0000007533 00000 n 
-0000007575 00000 n 
-0000647336 00000 n 
-0003410698 00000 n 
-0000007634 00000 n 
-0000007696 00000 n 
-0000650585 00000 n 
-0003410605 00000 n 
-0000007755 00000 n 
-0000007809 00000 n 
-0000653777 00000 n 
-0003410512 00000 n 
-0000007868 00000 n 
-0000007918 00000 n 
-0000653904 00000 n 
-0003410419 00000 n 
-0000007977 00000 n 
-0000008020 00000 n 
-0000654031 00000 n 
-0003410326 00000 n 
-0000008079 00000 n 
-0000008143 00000 n 
-0000657371 00000 n 
-0003410233 00000 n 
-0000008202 00000 n 
-0000008274 00000 n 
-0000659614 00000 n 
-0003410154 00000 n 
-0000008333 00000 n 
-0000008415 00000 n 
-0000674598 00000 n 
-0003410061 00000 n 
-0000008469 00000 n 
-0000008511 00000 n 
-0000674725 00000 n 
-0003409982 00000 n 
-0000008565 00000 n 
-0000008613 00000 n 
-0000695628 00000 n 
-0003409850 00000 n 
-0000008662 00000 n 
-0000008713 00000 n 
-0000699058 00000 n 
-0003409771 00000 n 
-0000008767 00000 n 
-0000008822 00000 n 
-0000704955 00000 n 
-0003409678 00000 n 
-0000008876 00000 n 
-0000008934 00000 n 
-0000712428 00000 n 
-0003409585 00000 n 
-0000008988 00000 n 
-0000009039 00000 n 
-0000719371 00000 n 
-0003409453 00000 n 
-0000009093 00000 n 
-0000009169 00000 n 
-0000721503 00000 n 
-0003409374 00000 n 
-0000009228 00000 n 
-0000009302 00000 n 
-0000723837 00000 n 
-0003409281 00000 n 
-0000009361 00000 n 
-0000009434 00000 n 
-0000727550 00000 n 
-0003409202 00000 n 
-0000009493 00000 n 
-0000009551 00000 n 
-0000733960 00000 n 
-0003409109 00000 n 
-0000009605 00000 n 
-0000009690 00000 n 
-0000759033 00000 n 
-0003409030 00000 n 
-0000009744 00000 n 
-0000009791 00000 n 
-0000764385 00000 n 
-0003408937 00000 n 
-0000009840 00000 n 
-0000009889 00000 n 
-0000775014 00000 n 
-0003408805 00000 n 
-0000009938 00000 n 
-0000010000 00000 n 
-0000775140 00000 n 
-0003408726 00000 n 
-0000010054 00000 n 
-0000010119 00000 n 
-0000776819 00000 n 
-0003408633 00000 n 
-0000010173 00000 n 
-0000010230 00000 n 
-0000779350 00000 n 
-0003408540 00000 n 
-0000010284 00000 n 
-0000010338 00000 n 
-0000782341 00000 n 
-0003408461 00000 n 
-0000010392 00000 n 
-0000010454 00000 n 
-0000786219 00000 n 
-0003408329 00000 n 
-0000010503 00000 n 
-0000010555 00000 n 
-0000789163 00000 n 
-0003408250 00000 n 
-0000010609 00000 n 
-0000010691 00000 n 
-0000793150 00000 n 
-0003408157 00000 n 
-0000010745 00000 n 
-0000010819 00000 n 
-0000818143 00000 n 
-0003408064 00000 n 
-0000010873 00000 n 
-0000010941 00000 n 
-0000818270 00000 n 
-0003407971 00000 n 
-0000010995 00000 n 
-0000011063 00000 n 
-0000825330 00000 n 
-0003407878 00000 n 
-0000011117 00000 n 
-0000011164 00000 n 
-0000827733 00000 n 
-0003407799 00000 n 
-0000011218 00000 n 
-0000011267 00000 n 
-0000827860 00000 n 
-0003407706 00000 n 
-0000011316 00000 n 
-0000011358 00000 n 
-0000830562 00000 n 
-0003407627 00000 n 
-0000011407 00000 n 
-0000011452 00000 n 
-0000878375 00000 n 
-0003407510 00000 n 
-0000011499 00000 n 
-0000011560 00000 n 
-0000881048 00000 n 
-0003407392 00000 n 
-0000011609 00000 n 
-0000011645 00000 n 
-0000881175 00000 n 
-0003407327 00000 n 
-0000011699 00000 n 
-0000011741 00000 n 
-0000884174 00000 n 
-0003407195 00000 n 
-0000011790 00000 n 
-0000011839 00000 n 
-0000886873 00000 n 
-0003407077 00000 n 
-0000011893 00000 n 
-0000011935 00000 n 
-0000889466 00000 n 
-0003406998 00000 n 
-0000011994 00000 n 
-0000012032 00000 n 
-0000892190 00000 n 
-0003406905 00000 n 
-0000012091 00000 n 
-0000012161 00000 n 
-0000897552 00000 n 
-0003406826 00000 n 
-0000012220 00000 n 
-0000012273 00000 n 
-0000912703 00000 n 
-0003406747 00000 n 
-0000012327 00000 n 
-0000012369 00000 n 
-0000912829 00000 n 
-0003406615 00000 n 
-0000012418 00000 n 
-0000012456 00000 n 
-0000943858 00000 n 
-0003406550 00000 n 
-0000012510 00000 n 
-0000012554 00000 n 
-0000943985 00000 n 
-0003406471 00000 n 
-0000012603 00000 n 
-0000012648 00000 n 
-0001187323 00000 n 
-0003406339 00000 n 
-0000012692 00000 n 
-0000012764 00000 n 
-0001188884 00000 n 
-0003406260 00000 n 
-0000012813 00000 n 
-0000012877 00000 n 
-0001191991 00000 n 
-0003406128 00000 n 
-0000012924 00000 n 
-0000012994 00000 n 
-0001192118 00000 n 
-0003406010 00000 n 
-0000013043 00000 n 
-0000013079 00000 n 
-0001212328 00000 n 
-0003405945 00000 n 
-0000013133 00000 n 
-0000013175 00000 n 
-0001214852 00000 n 
-0003405813 00000 n 
-0000013224 00000 n 
-0000013273 00000 n 
-0001214979 00000 n 
-0003405734 00000 n 
-0000013327 00000 n 
-0000013369 00000 n 
-0001223176 00000 n 
-0003405655 00000 n 
-0000013423 00000 n 
-0000013465 00000 n 
-0001223303 00000 n 
-0003405523 00000 n 
-0000013514 00000 n 
-0000013552 00000 n 
-0001226139 00000 n 
-0003405444 00000 n 
-0000013606 00000 n 
-0000013695 00000 n 
-0001250216 00000 n 
-0003405351 00000 n 
-0000013749 00000 n 
-0000013846 00000 n 
-0001258034 00000 n 
-0003405258 00000 n 
-0000013900 00000 n 
-0000013994 00000 n 
-0001261201 00000 n 
-0003405126 00000 n 
-0000014048 00000 n 
-0000014129 00000 n 
-0001292592 00000 n 
-0003405047 00000 n 
-0000014188 00000 n 
-0000014241 00000 n 
-0001296798 00000 n 
-0003404954 00000 n 
-0000014300 00000 n 
-0000014363 00000 n 
-0001304458 00000 n 
-0003404875 00000 n 
-0000014422 00000 n 
-0000014516 00000 n 
-0001307961 00000 n 
-0003404743 00000 n 
-0000014570 00000 n 
-0000014627 00000 n 
-0001313608 00000 n 
-0003404664 00000 n 
-0000014686 00000 n 
-0000014731 00000 n 
-0001314117 00000 n 
-0003404585 00000 n 
-0000014790 00000 n 
-0000014835 00000 n 
-0001317296 00000 n 
-0003404506 00000 n 
-0000014889 00000 n 
-0000014933 00000 n 
-0001319584 00000 n 
-0003404427 00000 n 
-0000014982 00000 n 
-0000015027 00000 n 
-0001372011 00000 n 
-0003404295 00000 n 
-0000015074 00000 n 
-0000015120 00000 n 
-0001374255 00000 n 
-0003404177 00000 n 
-0000015169 00000 n 
-0000015205 00000 n 
-0001376742 00000 n 
-0003404073 00000 n 
-0000015259 00000 n 
-0000015303 00000 n 
-0001376869 00000 n 
-0003403994 00000 n 
-0000015362 00000 n 
-0000015419 00000 n 
-0001385267 00000 n 
-0003403901 00000 n 
-0000015478 00000 n 
-0000015524 00000 n 
-0001387540 00000 n 
-0003403808 00000 n 
-0000015583 00000 n 
-0000015646 00000 n 
-0001387666 00000 n 
-0003403715 00000 n 
-0000015705 00000 n 
-0000015757 00000 n 
-0001391986 00000 n 
-0003403622 00000 n 
-0000015816 00000 n 
-0000015874 00000 n 
-0001392113 00000 n 
-0003403543 00000 n 
-0000015933 00000 n 
-0000016004 00000 n 
-0001394751 00000 n 
-0003403411 00000 n 
-0000016053 00000 n 
-0000016120 00000 n 
-0001394878 00000 n 
-0003403332 00000 n 
-0000016174 00000 n 
-0000016241 00000 n 
-0001400959 00000 n 
-0003403239 00000 n 
-0000016295 00000 n 
-0000016368 00000 n 
-0001403434 00000 n 
-0003403160 00000 n 
-0000016422 00000 n 
-0000016475 00000 n 
-0001410599 00000 n 
-0003403042 00000 n 
-0000016524 00000 n 
-0000016579 00000 n 
-0001412945 00000 n 
-0003402924 00000 n 
-0000016633 00000 n 
-0000016704 00000 n 
-0001413072 00000 n 
-0003402845 00000 n 
-0000016763 00000 n 
-0000016838 00000 n 
-0001413199 00000 n 
-0003402752 00000 n 
-0000016897 00000 n 
-0000016978 00000 n 
-0001415482 00000 n 
-0003402673 00000 n 
-0000017037 00000 n 
-0000017126 00000 n 
-0001415609 00000 n 
-0003402541 00000 n 
-0000017180 00000 n 
-0000017239 00000 n 
-0001418576 00000 n 
-0003402462 00000 n 
-0000017298 00000 n 
-0000017358 00000 n 
-0001418703 00000 n 
-0003402383 00000 n 
-0000017417 00000 n 
-0000017474 00000 n 
-0001424007 00000 n 
-0003402304 00000 n 
-0000017528 00000 n 
-0000017601 00000 n 
-0001428106 00000 n 
-0003402172 00000 n 
-0000017648 00000 n 
-0000017709 00000 n 
-0001428233 00000 n 
-0003402054 00000 n 
-0000017758 00000 n 
-0000017794 00000 n 
-0001430420 00000 n 
-0003401989 00000 n 
-0000017848 00000 n 
-0000017890 00000 n 
-0001430546 00000 n 
-0003401857 00000 n 
-0000017939 00000 n 
-0000017988 00000 n 
-0001433461 00000 n 
-0003401778 00000 n 
-0000018042 00000 n 
-0000018084 00000 n 
-0001475093 00000 n 
-0003401699 00000 n 
-0000018138 00000 n 
-0000018180 00000 n 
-0001478649 00000 n 
-0003401567 00000 n 
-0000018229 00000 n 
-0000018267 00000 n 
-0001481006 00000 n 
-0003401449 00000 n 
-0000018321 00000 n 
-0000018379 00000 n 
-0001506518 00000 n 
-0003401384 00000 n 
-0000018438 00000 n 
-0000018490 00000 n 
-0001509849 00000 n 
-0003401291 00000 n 
-0000018544 00000 n 
-0000018604 00000 n 
-0001517000 00000 n 
-0003401212 00000 n 
-0000018658 00000 n 
-0000018702 00000 n 
-0001517127 00000 n 
-0003401133 00000 n 
-0000018751 00000 n 
-0000018796 00000 n 
-0001547686 00000 n 
-0003401015 00000 n 
-0000018844 00000 n 
-0000018910 00000 n 
-0001550104 00000 n 
-0003400897 00000 n 
-0000018960 00000 n 
-0000018997 00000 n 
-0001552913 00000 n 
-0003400832 00000 n 
-0000019052 00000 n 
-0000019095 00000 n 
-0001555181 00000 n 
-0003400700 00000 n 
-0000019145 00000 n 
-0000019195 00000 n 
-0001555308 00000 n 
-0003400635 00000 n 
-0000019250 00000 n 
-0000019293 00000 n 
-0001559664 00000 n 
-0003400517 00000 n 
-0000019343 00000 n 
-0000019382 00000 n 
-0001559791 00000 n 
-0003400413 00000 n 
-0000019437 00000 n 
-0000019500 00000 n 
-0001561291 00000 n 
-0003400348 00000 n 
-0000019560 00000 n 
-0000019614 00000 n 
-0001640403 00000 n 
-0003400227 00000 n 
-0000019658 00000 n 
-0000019704 00000 n 
-0001641667 00000 n 
-0003400148 00000 n 
-0000019753 00000 n 
-0000019790 00000 n 
-0001644060 00000 n 
-0003400016 00000 n 
-0000019838 00000 n 
-0000019909 00000 n 
-0001646710 00000 n 
-0003399898 00000 n 
-0000019959 00000 n 
-0000019996 00000 n 
-0001653516 00000 n 
-0003399833 00000 n 
-0000020051 00000 n 
-0000020094 00000 n 
-0001656177 00000 n 
-0003399701 00000 n 
-0000020144 00000 n 
-0000020194 00000 n 
-0001658498 00000 n 
-0003399597 00000 n 
-0000020249 00000 n 
-0000020292 00000 n 
-0001671282 00000 n 
-0003399532 00000 n 
-0000020352 00000 n 
-0000020397 00000 n 
-0001677726 00000 n 
-0003399400 00000 n 
-0000020447 00000 n 
-0000020486 00000 n 
-0001677853 00000 n 
-0003399321 00000 n 
-0000020541 00000 n 
-0000020589 00000 n 
-0001681021 00000 n 
-0003399189 00000 n 
-0000020644 00000 n 
-0000020696 00000 n 
-0001683293 00000 n 
-0003399110 00000 n 
-0000020756 00000 n 
-0000020804 00000 n 
-0001690096 00000 n 
-0003399031 00000 n 
-0000020864 00000 n 
-0000020910 00000 n 
-0001692727 00000 n 
-0003398938 00000 n 
-0000020965 00000 n 
-0000021034 00000 n 
-0001697661 00000 n 
-0003398806 00000 n 
-0000021089 00000 n 
-0000021142 00000 n 
-0001697788 00000 n 
-0003398727 00000 n 
-0000021202 00000 n 
-0000021274 00000 n 
-0001703413 00000 n 
-0003398634 00000 n 
-0000021334 00000 n 
-0000021405 00000 n 
-0001703731 00000 n 
-0003398555 00000 n 
-0000021465 00000 n 
-0000021526 00000 n 
-0001707833 00000 n 
-0003398476 00000 n 
-0000021581 00000 n 
-0000021626 00000 n 
-0001710064 00000 n 
-0003398397 00000 n 
-0000021676 00000 n 
-0000021722 00000 n 
-0001716517 00000 n 
-0003398265 00000 n 
-0000021770 00000 n 
-0000021832 00000 n 
-0001716644 00000 n 
-0003398147 00000 n 
-0000021882 00000 n 
-0000021919 00000 n 
-0001719125 00000 n 
-0003398082 00000 n 
-0000021974 00000 n 
-0000022017 00000 n 
-0001721267 00000 n 
-0003397950 00000 n 
-0000022067 00000 n 
-0000022117 00000 n 
-0001721394 00000 n 
-0003397871 00000 n 
-0000022172 00000 n 
-0000022215 00000 n 
-0001723340 00000 n 
-0003397792 00000 n 
-0000022270 00000 n 
-0000022313 00000 n 
-0001723467 00000 n 
-0003397660 00000 n 
-0000022363 00000 n 
-0000022402 00000 n 
-0001725157 00000 n 
-0003397581 00000 n 
-0000022457 00000 n 
-0000022524 00000 n 
-0001728313 00000 n 
-0003397449 00000 n 
-0000022579 00000 n 
-0000022628 00000 n 
-0001730278 00000 n 
-0003397370 00000 n 
-0000022688 00000 n 
-0000022736 00000 n 
-0001736994 00000 n 
-0003397277 00000 n 
-0000022796 00000 n 
-0000022842 00000 n 
-0001741788 00000 n 
-0003397198 00000 n 
-0000022902 00000 n 
-0000022950 00000 n 
-0001741915 00000 n 
-0003397105 00000 n 
-0000023005 00000 n 
-0000023045 00000 n 
-0001746677 00000 n 
-0003397026 00000 n 
-0000023100 00000 n 
-0000023145 00000 n 
-0001749358 00000 n 
-0003396947 00000 n 
-0000023195 00000 n 
-0000023241 00000 n 
-0001754861 00000 n 
-0003396815 00000 n 
-0000023289 00000 n 
-0000023362 00000 n 
-0001754987 00000 n 
-0003396736 00000 n 
-0000023412 00000 n 
-0000023449 00000 n 
-0001758133 00000 n 
-0003396643 00000 n 
-0000023499 00000 n 
-0000023549 00000 n 
-0001763654 00000 n 
-0003396511 00000 n 
-0000023599 00000 n 
-0000023663 00000 n 
-0001763781 00000 n 
-0003396393 00000 n 
-0000023718 00000 n 
-0000023760 00000 n 
-0001763908 00000 n 
-0003396314 00000 n 
-0000023820 00000 n 
-0000023862 00000 n 
-0001766408 00000 n 
-0003396221 00000 n 
-0000023922 00000 n 
-0000023966 00000 n 
-0001769057 00000 n 
-0003396142 00000 n 
-0000024026 00000 n 
-0000024073 00000 n 
-0001769182 00000 n 
-0003396049 00000 n 
-0000024128 00000 n 
-0000024174 00000 n 
-0001775892 00000 n 
-0003395956 00000 n 
-0000024229 00000 n 
-0000024280 00000 n 
-0001776019 00000 n 
-0003395863 00000 n 
-0000024335 00000 n 
-0000024409 00000 n 
-0001776146 00000 n 
-0003395770 00000 n 
-0000024464 00000 n 
-0000024546 00000 n 
-0001778572 00000 n 
-0003395677 00000 n 
-0000024601 00000 n 
-0000024662 00000 n 
-0001778699 00000 n 
-0003395584 00000 n 
-0000024717 00000 n 
-0000024802 00000 n 
-0001778826 00000 n 
-0003395491 00000 n 
-0000024857 00000 n 
-0000024901 00000 n 
-0001781523 00000 n 
-0003395412 00000 n 
-0000024956 00000 n 
-0000025000 00000 n 
-0001783845 00000 n 
-0003395333 00000 n 
-0000025050 00000 n 
-0000025093 00000 n 
-0001787339 00000 n 
-0003395201 00000 n 
-0000025141 00000 n 
-0000025185 00000 n 
-0001790627 00000 n 
-0003395122 00000 n 
-0000025235 00000 n 
-0000025272 00000 n 
-0001793211 00000 n 
-0003395043 00000 n 
-0000025322 00000 n 
-0000025365 00000 n 
-0001796423 00000 n 
-0003394909 00000 n 
-0000025413 00000 n 
-0000025474 00000 n 
-0001796550 00000 n 
-0003394830 00000 n 
-0000025524 00000 n 
-0000025595 00000 n 
-0001912755 00000 n 
-0003394737 00000 n 
-0000025645 00000 n 
-0000025696 00000 n 
-0001918918 00000 n 
-0003394644 00000 n 
-0000025746 00000 n 
-0000025785 00000 n 
-0001922024 00000 n 
-0003394511 00000 n 
-0000025835 00000 n 
-0000025883 00000 n 
-0001922151 00000 n 
-0003394432 00000 n 
-0000025938 00000 n 
-0000026011 00000 n 
-0001922278 00000 n 
-0003394339 00000 n 
-0000026066 00000 n 
-0000026139 00000 n 
-0001922405 00000 n 
-0003394259 00000 n 
-0000026194 00000 n 
-0000026247 00000 n 
-0001925324 00000 n 
-0003394121 00000 n 
-0000026298 00000 n 
-0000026364 00000 n 
-0001925452 00000 n 
-0003394052 00000 n 
-0000026420 00000 n 
-0000026483 00000 n 
-0001932057 00000 n 
-0003393954 00000 n 
-0000026534 00000 n 
-0000026584 00000 n 
-0002189191 00000 n 
-0003393856 00000 n 
-0000026635 00000 n 
-0000026686 00000 n 
-0002353225 00000 n 
-0003393758 00000 n 
-0000026737 00000 n 
-0000026831 00000 n 
-0002527899 00000 n 
-0003393634 00000 n 
-0000026882 00000 n 
-0000026929 00000 n 
-0002530167 00000 n 
-0003393550 00000 n 
-0000026985 00000 n 
-0000027029 00000 n 
-0002533604 00000 n 
-0003393451 00000 n 
-0000027085 00000 n 
-0000027134 00000 n 
-0002533732 00000 n 
-0003393367 00000 n 
-0000027190 00000 n 
-0000027248 00000 n 
-0002550858 00000 n 
-0003393229 00000 n 
-0000027297 00000 n 
-0000027346 00000 n 
-0002550986 00000 n 
-0003393145 00000 n 
-0000027397 00000 n 
-0000027445 00000 n 
-0002556613 00000 n 
-0003393005 00000 n 
-0000027496 00000 n 
-0000027534 00000 n 
-0002558973 00000 n 
-0003392936 00000 n 
-0000027590 00000 n 
-0000027634 00000 n 
-0002559357 00000 n 
-0003392796 00000 n 
-0000027685 00000 n 
-0000027720 00000 n 
-0002561796 00000 n 
-0003392671 00000 n 
-0000027776 00000 n 
-0000027837 00000 n 
-0002565561 00000 n 
-0003392602 00000 n 
-0000027898 00000 n 
-0000027936 00000 n 
-0002620885 00000 n 
-0003392462 00000 n 
-0000027992 00000 n 
-0000028064 00000 n 
-0002626951 00000 n 
-0003392393 00000 n 
-0000028125 00000 n 
-0000028163 00000 n 
-0002627079 00000 n 
-0003392253 00000 n 
-0000028219 00000 n 
-0000028295 00000 n 
-0002658064 00000 n 
-0003392184 00000 n 
-0000028356 00000 n 
-0000028407 00000 n 
-0002690684 00000 n 
-0003392044 00000 n 
-0000028463 00000 n 
-0000028538 00000 n 
-0002713355 00000 n 
-0003391975 00000 n 
-0000028599 00000 n 
-0000028639 00000 n 
-0002730536 00000 n 
-0003391891 00000 n 
-0000028695 00000 n 
-0000028747 00000 n 
-0002733179 00000 n 
-0003391751 00000 n 
-0000028798 00000 n 
-0000028849 00000 n 
-0002733307 00000 n 
-0003391682 00000 n 
-0000028905 00000 n 
-0000028949 00000 n 
-0002735440 00000 n 
-0003391598 00000 n 
-0000029000 00000 n 
-0000029047 00000 n 
-0002744864 00000 n 
-0003391500 00000 n 
-0000029096 00000 n 
-0000029163 00000 n 
-0002784908 00000 n 
-0003391402 00000 n 
-0000029213 00000 n 
-0000029242 00000 n 
-0002790015 00000 n 
-0003391319 00000 n 
-0000029293 00000 n 
-0000029327 00000 n 
-0000029712 00000 n 
-0000029956 00000 n 
-0000029381 00000 n 
-0000029828 00000 n 
-0000029892 00000 n 
-0003371226 00000 n 
-0003371079 00000 n 
-0003372547 00000 n 
-0003375180 00000 n 
-0000032369 00000 n 
-0000032005 00000 n 
-0000030058 00000 n 
-0000032121 00000 n 
-0003373715 00000 n 
-0000032306 00000 n 
-0003372401 00000 n 
-0003374158 00000 n 
-0000034899 00000 n 
-0000034593 00000 n 
-0000032485 00000 n 
-0000034709 00000 n 
-0000034835 00000 n 
-0000036293 00000 n 
-0000036444 00000 n 
-0000036598 00000 n 
-0000036752 00000 n 
-0000036906 00000 n 
-0000037059 00000 n 
-0000037213 00000 n 
-0000037367 00000 n 
-0000037516 00000 n 
-0000037671 00000 n 
-0000037824 00000 n 
-0000037978 00000 n 
-0000038133 00000 n 
-0000038293 00000 n 
-0000038458 00000 n 
-0000038623 00000 n 
-0000038787 00000 n 
-0000038947 00000 n 
-0000039112 00000 n 
-0000039277 00000 n 
-0000039442 00000 n 
-0000039601 00000 n 
-0000039766 00000 n 
-0000039931 00000 n 
-0000041919 00000 n 
-0000040150 00000 n 
-0000035949 00000 n 
-0000035015 00000 n 
-0000040086 00000 n 
-0000042071 00000 n 
-0000042226 00000 n 
-0000042386 00000 n 
-0000042541 00000 n 
-0000042701 00000 n 
-0000042861 00000 n 
-0000043016 00000 n 
-0000043176 00000 n 
-0000043336 00000 n 
-0000043496 00000 n 
-0000043651 00000 n 
-0000043803 00000 n 
-0000043958 00000 n 
-0000044118 00000 n 
-0000044272 00000 n 
-0000044432 00000 n 
-0000044597 00000 n 
-0000044757 00000 n 
-0000044912 00000 n 
-0000045072 00000 n 
-0000045232 00000 n 
-0000045392 00000 n 
-0000045552 00000 n 
-0000045712 00000 n 
-0000045872 00000 n 
-0000046032 00000 n 
-0000046197 00000 n 
-0000046357 00000 n 
-0000046517 00000 n 
-0000046671 00000 n 
-0000046824 00000 n 
-0000046979 00000 n 
-0000047139 00000 n 
-0000047294 00000 n 
-0000047454 00000 n 
-0000047614 00000 n 
-0000047769 00000 n 
-0000050139 00000 n 
-0000047993 00000 n 
-0000041449 00000 n 
-0000040266 00000 n 
-0000047929 00000 n 
-0003373569 00000 n 
-0000050298 00000 n 
-0000050458 00000 n 
-0000050622 00000 n 
-0000050787 00000 n 
-0000050947 00000 n 
-0000051107 00000 n 
-0000051267 00000 n 
-0000051421 00000 n 
-0000051574 00000 n 
-0000051729 00000 n 
-0000051884 00000 n 
-0000052044 00000 n 
-0000052198 00000 n 
-0000052358 00000 n 
-0000052522 00000 n 
-0000052687 00000 n 
-0000052852 00000 n 
-0000053017 00000 n 
-0000053182 00000 n 
-0000053347 00000 n 
-0000053512 00000 n 
-0000053671 00000 n 
-0000053831 00000 n 
-0000053986 00000 n 
-0000054146 00000 n 
-0000054306 00000 n 
-0000054466 00000 n 
-0000054626 00000 n 
-0000054791 00000 n 
-0000054956 00000 n 
-0000055121 00000 n 
-0000055281 00000 n 
-0000055441 00000 n 
-0000055595 00000 n 
-0000057777 00000 n 
-0000055814 00000 n 
-0000049696 00000 n 
-0000048095 00000 n 
-0000055750 00000 n 
-0000057936 00000 n 
-0000058096 00000 n 
-0000058256 00000 n 
-0000058416 00000 n 
-0000058571 00000 n 
-0000058730 00000 n 
-0000058890 00000 n 
-0000059050 00000 n 
-0000059210 00000 n 
-0000059370 00000 n 
-0000059529 00000 n 
-0000059684 00000 n 
-0000059839 00000 n 
-0000059992 00000 n 
-0000060147 00000 n 
-0000060307 00000 n 
-0000060462 00000 n 
-0000060622 00000 n 
-0000060787 00000 n 
-0000060952 00000 n 
-0000061117 00000 n 
-0000061277 00000 n 
-0000061432 00000 n 
-0000061591 00000 n 
-0000061746 00000 n 
-0000061895 00000 n 
-0000062050 00000 n 
-0000062202 00000 n 
-0000062357 00000 n 
-0000062517 00000 n 
-0000062672 00000 n 
-0000065072 00000 n 
-0000062896 00000 n 
-0000057361 00000 n 
-0000055916 00000 n 
-0000062832 00000 n 
-0003375305 00000 n 
-0000065231 00000 n 
-0000065386 00000 n 
-0000065545 00000 n 
-0000065705 00000 n 
-0000065865 00000 n 
-0000066025 00000 n 
-0000066190 00000 n 
-0000066355 00000 n 
-0000066520 00000 n 
-0000066680 00000 n 
-0000066845 00000 n 
-0000067010 00000 n 
-0000067169 00000 n 
-0000067324 00000 n 
-0000067477 00000 n 
-0000067631 00000 n 
-0000067791 00000 n 
-0000067954 00000 n 
-0000068119 00000 n 
-0000068284 00000 n 
-0000068449 00000 n 
-0000068614 00000 n 
-0000068778 00000 n 
-0000068933 00000 n 
-0000069093 00000 n 
-0000069253 00000 n 
-0000069413 00000 n 
-0000069568 00000 n 
-0000069728 00000 n 
-0000069893 00000 n 
-0000071987 00000 n 
-0000070122 00000 n 
-0000064665 00000 n 
-0000063012 00000 n 
-0000070058 00000 n 
-0000072152 00000 n 
-0000072311 00000 n 
-0000072476 00000 n 
-0000072641 00000 n 
-0000072801 00000 n 
-0000072954 00000 n 
-0000073109 00000 n 
-0000073268 00000 n 
-0000073423 00000 n 
-0000073582 00000 n 
-0000073742 00000 n 
-0000073897 00000 n 
-0000074057 00000 n 
-0000074222 00000 n 
-0000074380 00000 n 
-0000074540 00000 n 
-0000074693 00000 n 
-0000074847 00000 n 
-0000075003 00000 n 
-0000075164 00000 n 
-0000075320 00000 n 
-0000075481 00000 n 
-0000075637 00000 n 
-0000075798 00000 n 
-0000075964 00000 n 
-0000076114 00000 n 
-0000076269 00000 n 
-0000076423 00000 n 
-0000076579 00000 n 
-0000076739 00000 n 
-0000078903 00000 n 
-0000076959 00000 n 
-0000071580 00000 n 
-0000070224 00000 n 
-0000076895 00000 n 
-0000079063 00000 n 
-0000079229 00000 n 
-0000079385 00000 n 
-0000079546 00000 n 
-0000079706 00000 n 
-0000079871 00000 n 
-0000080037 00000 n 
-0000080198 00000 n 
-0000080359 00000 n 
-0000080524 00000 n 
-0000080690 00000 n 
-0000080856 00000 n 
-0000081017 00000 n 
-0000081173 00000 n 
-0000081326 00000 n 
-0000081482 00000 n 
-0000081643 00000 n 
-0000081799 00000 n 
-0000081960 00000 n 
-0000082120 00000 n 
-0000082276 00000 n 
-0000082437 00000 n 
-0000082598 00000 n 
-0000082764 00000 n 
-0000082929 00000 n 
-0000083095 00000 n 
-0000083256 00000 n 
-0000083417 00000 n 
-0000083573 00000 n 
-0000083727 00000 n 
-0000083883 00000 n 
-0000084038 00000 n 
-0000084194 00000 n 
-0000084355 00000 n 
-0000084521 00000 n 
-0000086913 00000 n 
-0000084751 00000 n 
-0000078451 00000 n 
-0000077075 00000 n 
-0000084687 00000 n 
-0000087078 00000 n 
-0000087239 00000 n 
-0000087399 00000 n 
-0000087560 00000 n 
-0000087720 00000 n 
-0000087881 00000 n 
-0000088042 00000 n 
-0000088203 00000 n 
-0000088363 00000 n 
-0000088519 00000 n 
-0000088673 00000 n 
-0000088829 00000 n 
-0000088985 00000 n 
-0000089139 00000 n 
-0000089294 00000 n 
-0000089450 00000 n 
-0000089605 00000 n 
-0000089761 00000 n 
-0000089922 00000 n 
-0000090083 00000 n 
-0000090244 00000 n 
-0000090400 00000 n 
-0000090561 00000 n 
-0000090717 00000 n 
-0000090873 00000 n 
-0000091029 00000 n 
-0000091185 00000 n 
-0000091346 00000 n 
-0000091507 00000 n 
-0000091668 00000 n 
-0000091822 00000 n 
-0000091978 00000 n 
-0000092134 00000 n 
-0000093553 00000 n 
-0000092359 00000 n 
-0000086479 00000 n 
-0000084853 00000 n 
-0000092295 00000 n 
-0000093708 00000 n 
-0000093869 00000 n 
-0000094035 00000 n 
-0000094195 00000 n 
-0000094361 00000 n 
-0000094522 00000 n 
-0000094688 00000 n 
-0000094849 00000 n 
-0000095015 00000 n 
-0000095176 00000 n 
-0000095332 00000 n 
-0000095493 00000 n 
-0000095647 00000 n 
-0000095800 00000 n 
-0000095955 00000 n 
-0000096175 00000 n 
-0000093281 00000 n 
-0000092461 00000 n 
-0000096111 00000 n 
-0000096558 00000 n 
-0000096378 00000 n 
-0000096277 00000 n 
-0000096494 00000 n 
-0003375430 00000 n 
-0000098206 00000 n 
-0000098362 00000 n 
-0000098518 00000 n 
-0000098674 00000 n 
-0000098826 00000 n 
-0000098982 00000 n 
-0000099137 00000 n 
-0000099293 00000 n 
-0000099449 00000 n 
-0000099604 00000 n 
-0000099760 00000 n 
-0000099915 00000 n 
-0000100071 00000 n 
-0000100227 00000 n 
-0000100383 00000 n 
-0000100539 00000 n 
-0000100695 00000 n 
-0000100851 00000 n 
-0000101007 00000 n 
-0000101162 00000 n 
-0000101318 00000 n 
-0000101475 00000 n 
-0000103542 00000 n 
-0000101758 00000 n 
-0000097880 00000 n 
-0000096600 00000 n 
-0000101632 00000 n 
-0000192814 00000 n 
-0000225048 00000 n 
-0000231139 00000 n 
-0000236390 00000 n 
-0000266306 00000 n 
-0000312177 00000 n 
-0000340129 00000 n 
-0000343781 00000 n 
-0000348162 00000 n 
-0000383121 00000 n 
-0000385505 00000 n 
-0000466043 00000 n 
-0000471471 00000 n 
-0000477223 00000 n 
-0000481468 00000 n 
-0000482491 00000 n 
-0000483895 00000 n 
-0000485090 00000 n 
-0000486151 00000 n 
-0000487199 00000 n 
-0000488386 00000 n 
-0000488512 00000 n 
-0000103698 00000 n 
-0000103855 00000 n 
-0000104011 00000 n 
-0000104165 00000 n 
-0000104319 00000 n 
-0000104475 00000 n 
-0000104631 00000 n 
-0000104786 00000 n 
-0000104942 00000 n 
-0000105098 00000 n 
-0000105254 00000 n 
-0000105411 00000 n 
-0000105568 00000 n 
-0000105725 00000 n 
-0000105882 00000 n 
-0000106039 00000 n 
-0000106194 00000 n 
-0000106347 00000 n 
-0000106504 00000 n 
-0000106659 00000 n 
-0000106815 00000 n 
-0000106971 00000 n 
-0000107127 00000 n 
-0000107283 00000 n 
-0000107439 00000 n 
-0000107594 00000 n 
-0000107750 00000 n 
-0000107906 00000 n 
-0000109963 00000 n 
-0000108126 00000 n 
-0000103153 00000 n 
-0000101874 00000 n 
-0000108062 00000 n 
-0000489670 00000 n 
-0000490807 00000 n 
-0000558055 00000 n 
-0000564118 00000 n 
-0000570219 00000 n 
-0000575520 00000 n 
-0000576032 00000 n 
-0000576543 00000 n 
-0000595459 00000 n 
-0000596602 00000 n 
-0000597739 00000 n 
-0000598927 00000 n 
-0000599962 00000 n 
-0000600983 00000 n 
-0000602122 00000 n 
-0000603239 00000 n 
-0000604447 00000 n 
-0000605479 00000 n 
-0000606590 00000 n 
-0000704827 00000 n 
-0000841280 00000 n 
-0000842319 00000 n 
-0000843375 00000 n 
-0000844427 00000 n 
-0000848620 00000 n 
-0000853201 00000 n 
-0000858508 00000 n 
-0000864781 00000 n 
-0000869601 00000 n 
-0000110118 00000 n 
-0000110275 00000 n 
-0000110431 00000 n 
-0000110587 00000 n 
-0000110743 00000 n 
-0000110899 00000 n 
-0000111054 00000 n 
-0000111210 00000 n 
-0000111365 00000 n 
-0000111521 00000 n 
-0000111678 00000 n 
-0000111834 00000 n 
-0000111990 00000 n 
-0000112146 00000 n 
-0000112302 00000 n 
-0000112457 00000 n 
-0000112613 00000 n 
-0000112767 00000 n 
-0000112924 00000 n 
-0000113081 00000 n 
-0000113237 00000 n 
-0000115217 00000 n 
-0000113458 00000 n 
-0000109637 00000 n 
-0000108228 00000 n 
-0000113394 00000 n 
-0000874218 00000 n 
-0000876133 00000 n 
-0000955637 00000 n 
-0000956997 00000 n 
-0000962422 00000 n 
-0000967844 00000 n 
-0000972304 00000 n 
-0000978597 00000 n 
-0000984636 00000 n 
-0001333520 00000 n 
-0001337524 00000 n 
-0001337651 00000 n 
-0001338710 00000 n 
-0001342974 00000 n 
-0001349695 00000 n 
-0001356196 00000 n 
-0001362502 00000 n 
-0001363779 00000 n 
-0001367500 00000 n 
-0001368523 00000 n 
-0001369980 00000 n 
-0001370106 00000 n 
-0000115372 00000 n 
-0000115528 00000 n 
-0000115684 00000 n 
-0000115840 00000 n 
-0000115996 00000 n 
-0000116152 00000 n 
-0000116308 00000 n 
-0000116465 00000 n 
-0000116622 00000 n 
-0000116779 00000 n 
-0000116936 00000 n 
-0000117093 00000 n 
-0000117250 00000 n 
-0000117407 00000 n 
-0000117564 00000 n 
-0000117720 00000 n 
-0000117876 00000 n 
-0000118034 00000 n 
-0000118192 00000 n 
-0000118350 00000 n 
-0000118507 00000 n 
-0000118665 00000 n 
-0000118823 00000 n 
-0000118981 00000 n 
-0000119139 00000 n 
-0000119297 00000 n 
-0000119454 00000 n 
-0000119611 00000 n 
-0000121212 00000 n 
-0000119832 00000 n 
-0000114828 00000 n 
-0000113560 00000 n 
-0000119768 00000 n 
-0001531291 00000 n 
-0001537405 00000 n 
-0001540818 00000 n 
-0001542120 00000 n 
-0001543136 00000 n 
-0001544206 00000 n 
-0001545286 00000 n 
-0001559536 00000 n 
-0001594338 00000 n 
-0001595722 00000 n 
-0001600844 00000 n 
-0001606911 00000 n 
-0001612828 00000 n 
-0001618524 00000 n 
-0001623106 00000 n 
-0001626055 00000 n 
-0001626981 00000 n 
-0001628538 00000 n 
-0001629847 00000 n 
-0001631292 00000 n 
-0001632823 00000 n 
-0001634067 00000 n 
-0001635380 00000 n 
-0001637183 00000 n 
-0001638604 00000 n 
-0001639829 00000 n 
-0001730150 00000 n 
-0001740380 00000 n 
-0001741660 00000 n 
-0000121369 00000 n 
-0000121525 00000 n 
-0000121681 00000 n 
-0000121838 00000 n 
-0000121995 00000 n 
-0000122151 00000 n 
-0000122308 00000 n 
-0000122465 00000 n 
-0000122622 00000 n 
-0000122779 00000 n 
-0000122936 00000 n 
-0000123092 00000 n 
-0000123249 00000 n 
-0000123470 00000 n 
-0000120958 00000 n 
-0000119934 00000 n 
-0000123406 00000 n 
-0001746422 00000 n 
-0001746549 00000 n 
-0002536455 00000 n 
-0002537953 00000 n 
-0002539144 00000 n 
-0002539272 00000 n 
-0002540736 00000 n 
-0002542108 00000 n 
-0002543473 00000 n 
-0002544972 00000 n 
-0002546150 00000 n 
-0002547269 00000 n 
-0002548631 00000 n 
-0002548757 00000 n 
-0000123853 00000 n 
-0000123673 00000 n 
-0000123572 00000 n 
-0000123789 00000 n 
-0003375555 00000 n 
-0000125414 00000 n 
-0000125558 00000 n 
-0000125711 00000 n 
-0000125864 00000 n 
-0000126008 00000 n 
-0000126161 00000 n 
-0000126306 00000 n 
-0000126459 00000 n 
-0000126605 00000 n 
-0000126758 00000 n 
-0000126904 00000 n 
-0000127057 00000 n 
-0000127210 00000 n 
-0000127363 00000 n 
-0000127509 00000 n 
-0000127662 00000 n 
-0000127815 00000 n 
-0000127968 00000 n 
-0000128121 00000 n 
-0000128274 00000 n 
-0000130405 00000 n 
-0000128553 00000 n 
-0000125106 00000 n 
-0000123895 00000 n 
-0000128427 00000 n 
-0003156067 00000 n 
-0000215737 00000 n 
-0000258503 00000 n 
-0003156033 00000 n 
-0000305958 00000 n 
-0003155999 00000 n 
-0000374336 00000 n 
-0003155965 00000 n 
-0000526688 00000 n 
-0003155931 00000 n 
-0000644409 00000 n 
-0000695755 00000 n 
-0000809560 00000 n 
-0003155897 00000 n 
-0000912955 00000 n 
-0000922138 00000 n 
-0000922266 00000 n 
-0000933003 00000 n 
-0000933131 00000 n 
-0001085736 00000 n 
-0000130557 00000 n 
-0000130703 00000 n 
-0000130855 00000 n 
-0000131008 00000 n 
-0000131161 00000 n 
-0000131307 00000 n 
-0000131460 00000 n 
-0000131612 00000 n 
-0000131758 00000 n 
-0000131912 00000 n 
-0000132065 00000 n 
-0000132219 00000 n 
-0000132373 00000 n 
-0000132527 00000 n 
-0000132681 00000 n 
-0000132835 00000 n 
-0000132989 00000 n 
-0000133143 00000 n 
-0000133297 00000 n 
-0000133451 00000 n 
-0000133606 00000 n 
-0000133751 00000 n 
-0000133905 00000 n 
-0000134059 00000 n 
-0000134209 00000 n 
-0000134363 00000 n 
-0000134517 00000 n 
-0000134671 00000 n 
-0000134889 00000 n 
-0000130016 00000 n 
-0000128655 00000 n 
-0000134825 00000 n 
-0001186355 00000 n 
-0003155863 00000 n 
-0001212200 00000 n 
-0001240599 00000 n 
-0001271838 00000 n 
-0003155829 00000 n 
-0001442338 00000 n 
-0001474965 00000 n 
-0003155795 00000 n 
-0001831089 00000 n 
-0001863415 00000 n 
-0001890587 00000 n 
-0001890715 00000 n 
-0001912627 00000 n 
-0002019538 00000 n 
-0002095566 00000 n 
-0002189063 00000 n 
-0002275656 00000 n 
-0002353097 00000 n 
-0002433475 00000 n 
-0002525931 00000 n 
-0003155761 00000 n 
-0002594407 00000 n 
-0002620757 00000 n 
-0002654739 00000 n 
-0002674194 00000 n 
-0002690556 00000 n 
-0002713227 00000 n 
-0002730408 00000 n 
-0000136403 00000 n 
-0000136555 00000 n 
-0000136699 00000 n 
-0000136851 00000 n 
-0000136996 00000 n 
-0000137148 00000 n 
-0000137300 00000 n 
-0000137446 00000 n 
-0000137598 00000 n 
-0000137744 00000 n 
-0000137896 00000 n 
-0000138048 00000 n 
-0000138200 00000 n 
-0000138352 00000 n 
-0000138498 00000 n 
-0000138650 00000 n 
-0000138796 00000 n 
-0000138949 00000 n 
-0000139095 00000 n 
-0000139248 00000 n 
-0000139527 00000 n 
-0000136095 00000 n 
-0000134991 00000 n 
-0000139401 00000 n 
-0000175082 00000 n 
-0000258631 00000 n 
-0000359103 00000 n 
-0000414664 00000 n 
-0000532931 00000 n 
-0000647463 00000 n 
-0000699185 00000 n 
-0000738732 00000 n 
-0000809688 00000 n 
-0001483437 00000 n 
-0003155727 00000 n 
-0001761016 00000 n 
-0002623761 00000 n 
-0002629928 00000 n 
-0000139910 00000 n 
-0000139730 00000 n 
-0000139629 00000 n 
-0000139846 00000 n 
-0000142277 00000 n 
-0000141843 00000 n 
-0000139952 00000 n 
-0000141959 00000 n 
-0000142023 00000 n 
-0000142087 00000 n 
-0000142213 00000 n 
-0000144864 00000 n 
-0000144684 00000 n 
-0000142379 00000 n 
-0000144800 00000 n 
-0003375680 00000 n 
-0000145740 00000 n 
-0000145560 00000 n 
-0000144980 00000 n 
-0000145676 00000 n 
-0000148357 00000 n 
-0000148049 00000 n 
-0000145842 00000 n 
-0000148165 00000 n 
-0000148229 00000 n 
-0000148293 00000 n 
-0000150545 00000 n 
-0000151017 00000 n 
-0000150408 00000 n 
-0000148459 00000 n 
-0000150697 00000 n 
-0000150761 00000 n 
-0000150825 00000 n 
-0000150889 00000 n 
-0000150953 00000 n 
-0000175146 00000 n 
-0000153919 00000 n 
-0000153483 00000 n 
-0000151147 00000 n 
-0000153599 00000 n 
-0000153663 00000 n 
-0000153727 00000 n 
-0000153791 00000 n 
-0000153855 00000 n 
-0003374740 00000 n 
-0000156558 00000 n 
-0000156250 00000 n 
-0000154063 00000 n 
-0000156366 00000 n 
-0000156430 00000 n 
-0000156494 00000 n 
-0003374012 00000 n 
-0000159072 00000 n 
-0000158892 00000 n 
-0000156716 00000 n 
-0000159008 00000 n 
-0003371816 00000 n 
-0003375805 00000 n 
-0000161963 00000 n 
-0000161783 00000 n 
-0000159230 00000 n 
-0000161899 00000 n 
-0000164590 00000 n 
-0000164835 00000 n 
-0000164453 00000 n 
-0000162093 00000 n 
-0000164771 00000 n 
-0003372837 00000 n 
-0003372693 00000 n 
-0003372256 00000 n 
-0003374887 00000 n 
-0000167305 00000 n 
-0000167125 00000 n 
-0000165007 00000 n 
-0000167241 00000 n 
-0000169994 00000 n 
-0000169814 00000 n 
-0000167421 00000 n 
-0000169930 00000 n 
-0000172467 00000 n 
-0000172159 00000 n 
-0000170110 00000 n 
-0000172275 00000 n 
-0000172339 00000 n 
-0000172403 00000 n 
-0000175210 00000 n 
-0000174902 00000 n 
-0000172611 00000 n 
-0000175018 00000 n 
-0003375930 00000 n 
-0000175757 00000 n 
-0000175579 00000 n 
-0000175340 00000 n 
-0000176048 00000 n 
-0000175932 00000 n 
-0000175831 00000 n 
-0000177901 00000 n 
-0000178403 00000 n 
-0000177764 00000 n 
-0000176090 00000 n 
-0000178085 00000 n 
-0000178149 00000 n 
-0000178275 00000 n 
-0000178339 00000 n 
-0000178856 00000 n 
-0000178676 00000 n 
-0000178575 00000 n 
-0000178792 00000 n 
-0000181179 00000 n 
-0000180747 00000 n 
-0000178898 00000 n 
-0000180863 00000 n 
-0003373422 00000 n 
-0000180989 00000 n 
-0000181115 00000 n 
-0003372982 00000 n 
-0000186749 00000 n 
-0000183832 00000 n 
-0000183401 00000 n 
-0000181337 00000 n 
-0000183517 00000 n 
-0000183643 00000 n 
-0000183769 00000 n 
-0003376055 00000 n 
-0000187108 00000 n 
-0000186612 00000 n 
-0000183976 00000 n 
-0000186918 00000 n 
-0000187044 00000 n 
-0000189383 00000 n 
-0000189227 00000 n 
-0000190059 00000 n 
-0000189081 00000 n 
-0000187308 00000 n 
-0000189551 00000 n 
-0000189677 00000 n 
-0000189741 00000 n 
-0000189805 00000 n 
-0000189869 00000 n 
-0000189932 00000 n 
-0000189995 00000 n 
-0000192878 00000 n 
-0000193962 00000 n 
-0000192634 00000 n 
-0000190245 00000 n 
-0000192750 00000 n 
-0000192942 00000 n 
-0003375033 00000 n 
-0000193006 00000 n 
-0000193070 00000 n 
-0000193134 00000 n 
-0000193198 00000 n 
-0000193262 00000 n 
-0000193326 00000 n 
-0000193390 00000 n 
-0000193453 00000 n 
-0000193517 00000 n 
-0000193580 00000 n 
-0000193644 00000 n 
-0000193708 00000 n 
-0000193772 00000 n 
-0000193898 00000 n 
-0000196089 00000 n 
-0000195717 00000 n 
-0000194119 00000 n 
-0000195833 00000 n 
-0000195897 00000 n 
-0000195961 00000 n 
-0000196025 00000 n 
-0000199257 00000 n 
-0000198951 00000 n 
-0000196247 00000 n 
-0000199067 00000 n 
-0000199193 00000 n 
-0000202134 00000 n 
-0000202286 00000 n 
-0000202633 00000 n 
-0000201988 00000 n 
-0000199401 00000 n 
-0000202443 00000 n 
-0000202569 00000 n 
-0003376180 00000 n 
-0001796486 00000 n 
-0002353289 00000 n 
-0000205012 00000 n 
-0000206820 00000 n 
-0000205483 00000 n 
-0000204875 00000 n 
-0000202763 00000 n 
-0000205166 00000 n 
-0000205292 00000 n 
-0000205356 00000 n 
-0000205419 00000 n 
-0000215801 00000 n 
-0000215993 00000 n 
-0000206704 00000 n 
-0000205613 00000 n 
-0000215673 00000 n 
-0000215865 00000 n 
-0000215929 00000 n 
-0000210962 00000 n 
-0000211080 00000 n 
-0000211128 00000 n 
-0000211557 00000 n 
-0000211580 00000 n 
-0000211960 00000 n 
-0000215650 00000 n 
-0000218403 00000 n 
-0000218095 00000 n 
-0000216138 00000 n 
-0000218211 00000 n 
-0000218275 00000 n 
-0000218339 00000 n 
-0000220374 00000 n 
-0000220535 00000 n 
-0000220694 00000 n 
-0000221358 00000 n 
-0000220219 00000 n 
-0000218561 00000 n 
-0000220848 00000 n 
-0000220912 00000 n 
-0000220976 00000 n 
-0000221040 00000 n 
-0000221102 00000 n 
-0000221166 00000 n 
-0000221230 00000 n 
-0000221294 00000 n 
-0000225112 00000 n 
-0000231203 00000 n 
-0000224830 00000 n 
-0000227285 00000 n 
-0000224693 00000 n 
-0000221474 00000 n 
-0000224984 00000 n 
-0000225176 00000 n 
-0000225240 00000 n 
-0000225304 00000 n 
-0000225368 00000 n 
-0000225432 00000 n 
-0000225496 00000 n 
-0000225560 00000 n 
-0000225624 00000 n 
-0000225688 00000 n 
-0000225752 00000 n 
-0000225816 00000 n 
-0000225880 00000 n 
-0000225943 00000 n 
-0000226007 00000 n 
-0000226070 00000 n 
-0000226134 00000 n 
-0000226197 00000 n 
-0000226261 00000 n 
-0000226325 00000 n 
-0000226389 00000 n 
-0000226453 00000 n 
-0000226517 00000 n 
-0000226581 00000 n 
-0000226645 00000 n 
-0000226709 00000 n 
-0000226773 00000 n 
-0000226837 00000 n 
-0000226901 00000 n 
-0000226965 00000 n 
-0000227029 00000 n 
-0000227093 00000 n 
-0000227157 00000 n 
-0000227221 00000 n 
-0000233630 00000 n 
-0000230959 00000 n 
-0000227442 00000 n 
-0000231075 00000 n 
-0000231267 00000 n 
-0000231331 00000 n 
-0000231395 00000 n 
-0000231459 00000 n 
-0000231523 00000 n 
-0000231587 00000 n 
-0000231651 00000 n 
-0000231715 00000 n 
-0000231778 00000 n 
-0000231842 00000 n 
-0000231905 00000 n 
-0000231969 00000 n 
-0000232031 00000 n 
-0000232095 00000 n 
-0000232159 00000 n 
-0000232223 00000 n 
-0000232287 00000 n 
-0000232351 00000 n 
-0000232415 00000 n 
-0000232479 00000 n 
-0000232543 00000 n 
-0000232607 00000 n 
-0000232671 00000 n 
-0000232735 00000 n 
-0000232799 00000 n 
-0000232863 00000 n 
-0000232927 00000 n 
-0000232991 00000 n 
-0000233055 00000 n 
-0000233119 00000 n 
-0000233183 00000 n 
-0000233247 00000 n 
-0000233311 00000 n 
-0000233375 00000 n 
-0000233439 00000 n 
-0000233503 00000 n 
-0000233566 00000 n 
-0003376305 00000 n 
-0000235986 00000 n 
-0000236838 00000 n 
-0000235849 00000 n 
-0000233787 00000 n 
-0000236134 00000 n 
-0000236198 00000 n 
-0000236262 00000 n 
-0000236326 00000 n 
-0000236454 00000 n 
-0000236518 00000 n 
-0000236582 00000 n 
-0000236646 00000 n 
-0000236710 00000 n 
-0000236774 00000 n 
-0000242737 00000 n 
-0000240367 00000 n 
-0000239357 00000 n 
-0000236982 00000 n 
-0000239473 00000 n 
-0000239537 00000 n 
-0000239601 00000 n 
-0000239665 00000 n 
-0000239729 00000 n 
-0000239793 00000 n 
-0000239857 00000 n 
-0000239921 00000 n 
-0000239984 00000 n 
-0000240048 00000 n 
-0000240112 00000 n 
-0000240176 00000 n 
-0000240240 00000 n 
-0000240304 00000 n 
-0000243206 00000 n 
-0000242600 00000 n 
-0000240511 00000 n 
-0000242890 00000 n 
-0000243016 00000 n 
-0000243142 00000 n 
-0000245609 00000 n 
-0000245761 00000 n 
-0000248875 00000 n 
-0000246488 00000 n 
-0000245463 00000 n 
-0000243322 00000 n 
-0000245916 00000 n 
-0000246042 00000 n 
-0000246168 00000 n 
-0000246232 00000 n 
-0000246296 00000 n 
-0000246360 00000 n 
-0000246424 00000 n 
-0000258695 00000 n 
-0000258567 00000 n 
-0000258135 00000 n 
-0000258286 00000 n 
-0000258887 00000 n 
-0000248729 00000 n 
-0000246618 00000 n 
-0000258439 00000 n 
-0000258759 00000 n 
-0000258823 00000 n 
-0000252509 00000 n 
-0000252627 00000 n 
-0000252675 00000 n 
-0000253116 00000 n 
-0000253139 00000 n 
-0000253564 00000 n 
-0000253660 00000 n 
-0000258112 00000 n 
-0000266370 00000 n 
-0000260483 00000 n 
-0000260111 00000 n 
-0000259102 00000 n 
-0000260227 00000 n 
-0000260291 00000 n 
-0000260355 00000 n 
-0000260419 00000 n 
-0003376430 00000 n 
-0000263052 00000 n 
-0000262360 00000 n 
-0000260599 00000 n 
-0000262476 00000 n 
-0000262540 00000 n 
-0000262604 00000 n 
-0000262668 00000 n 
-0000262732 00000 n 
-0000262796 00000 n 
-0000262860 00000 n 
-0000262924 00000 n 
-0000262988 00000 n 
-0000267968 00000 n 
-0000266063 00000 n 
-0000263182 00000 n 
-0000266179 00000 n 
-0000266243 00000 n 
-0000266434 00000 n 
-0000266498 00000 n 
-0000266562 00000 n 
-0000266626 00000 n 
-0000266690 00000 n 
-0000266754 00000 n 
-0000266818 00000 n 
-0000266882 00000 n 
-0000266946 00000 n 
-0000267010 00000 n 
-0000267074 00000 n 
-0000267138 00000 n 
-0000267202 00000 n 
-0000267266 00000 n 
-0000267330 00000 n 
-0000267394 00000 n 
-0000267458 00000 n 
-0000267522 00000 n 
-0000267586 00000 n 
-0000267650 00000 n 
-0000267714 00000 n 
-0000267778 00000 n 
-0000267841 00000 n 
-0000267905 00000 n 
-0000270376 00000 n 
-0000270005 00000 n 
-0000268111 00000 n 
-0000270121 00000 n 
-0000270248 00000 n 
-0000270312 00000 n 
-0000273068 00000 n 
-0000272888 00000 n 
-0000270534 00000 n 
-0000273004 00000 n 
-0000275871 00000 n 
-0000275691 00000 n 
-0000273184 00000 n 
-0000275807 00000 n 
-0000277590 00000 n 
-0000277410 00000 n 
-0000276015 00000 n 
-0000277526 00000 n 
-0003376555 00000 n 
-0000279733 00000 n 
-0000280073 00000 n 
-0000279596 00000 n 
-0000277706 00000 n 
-0000279882 00000 n 
-0000280009 00000 n 
-0000282946 00000 n 
-0000282512 00000 n 
-0000280189 00000 n 
-0000282628 00000 n 
-0000282755 00000 n 
-0000282882 00000 n 
-0000285132 00000 n 
-0000289124 00000 n 
-0000285608 00000 n 
-0000284995 00000 n 
-0000283062 00000 n 
-0000285291 00000 n 
-0000285418 00000 n 
-0000285545 00000 n 
-0000288045 00000 n 
-0000289338 00000 n 
-0000287908 00000 n 
-0000285752 00000 n 
-0000289274 00000 n 
-0003371668 00000 n 
-0003373275 00000 n 
-0000288429 00000 n 
-0000288547 00000 n 
-0000288595 00000 n 
-0000289103 00000 n 
-0000340193 00000 n 
-0000291947 00000 n 
-0000292099 00000 n 
-0000292721 00000 n 
-0000291792 00000 n 
-0000289511 00000 n 
-0000292404 00000 n 
-0000292531 00000 n 
-0000292658 00000 n 
-0000292251 00000 n 
-0001428169 00000 n 
-0000294372 00000 n 
-0000306276 00000 n 
-0000294256 00000 n 
-0000292865 00000 n 
-0000305894 00000 n 
-0000306021 00000 n 
-0000306084 00000 n 
-0000306148 00000 n 
-0000306212 00000 n 
-0003376680 00000 n 
-0000300640 00000 n 
-0000300758 00000 n 
-0000300806 00000 n 
-0000301245 00000 n 
-0000301268 00000 n 
-0000301657 00000 n 
-0000305871 00000 n 
-0000308239 00000 n 
-0000308390 00000 n 
-0000308927 00000 n 
+0003121850 00000 n 
+0003394202 00000 n 
+0000000227 00000 n 
+0000000254 00000 n 
+0000034775 00000 n 
+0003394113 00000 n 
+0000000301 00000 n 
+0000000336 00000 n 
+0000101698 00000 n 
+0003394024 00000 n 
+0000000383 00000 n 
+0000000417 00000 n 
+0000128493 00000 n 
+0003393935 00000 n 
+0000000464 00000 n 
+0000000497 00000 n 
+0000139467 00000 n 
+0003393846 00000 n 
+0000000544 00000 n 
+0000000571 00000 n 
+0000142153 00000 n 
+0003393757 00000 n 
+0000000618 00000 n 
+0000000644 00000 n 
+0000175697 00000 n 
+0003393629 00000 n 
+0000000687 00000 n 
+0000000743 00000 n 
+0000178215 00000 n 
+0003393555 00000 n 
+0000000791 00000 n 
+0000000840 00000 n 
+0000180929 00000 n 
+0003393429 00000 n 
+0000000886 00000 n 
+0000000938 00000 n 
+0000181055 00000 n 
+0003393355 00000 n 
+0000000986 00000 n 
+0000001021 00000 n 
+0000183583 00000 n 
+0003393230 00000 n 
+0000001069 00000 n 
+0000001108 00000 n 
+0000183709 00000 n 
+0003393119 00000 n 
+0000001161 00000 n 
+0000001201 00000 n 
+0000186984 00000 n 
+0003393045 00000 n 
+0000001259 00000 n 
+0000001311 00000 n 
+0000189617 00000 n 
+0003392958 00000 n 
+0000001369 00000 n 
+0000001410 00000 n 
+0000193838 00000 n 
+0003392884 00000 n 
+0000001468 00000 n 
+0000001505 00000 n 
+0000199133 00000 n 
+0003392760 00000 n 
+0000001558 00000 n 
+0000001612 00000 n 
+0000202509 00000 n 
+0003392686 00000 n 
+0000001670 00000 n 
+0000001722 00000 n 
+0000205232 00000 n 
+0003392599 00000 n 
+0000001780 00000 n 
+0000001821 00000 n 
+0000240473 00000 n 
+0003392525 00000 n 
+0000001879 00000 n 
+0000001916 00000 n 
+0000240599 00000 n 
+0003392414 00000 n 
+0000001969 00000 n 
+0000002011 00000 n 
+0000243499 00000 n 
+0003392340 00000 n 
+0000002069 00000 n 
+0000002121 00000 n 
+0000243625 00000 n 
+0003392265 00000 n 
+0000002179 00000 n 
+0000002221 00000 n 
+0000264313 00000 n 
+0003392188 00000 n 
+0000002270 00000 n 
+0000002315 00000 n 
+0000274074 00000 n 
+0003392058 00000 n 
+0000002362 00000 n 
+0000002415 00000 n 
+0000276820 00000 n 
+0003391940 00000 n 
+0000002464 00000 n 
+0000002500 00000 n 
+0000276947 00000 n 
+0003391875 00000 n 
+0000002554 00000 n 
+0000002596 00000 n 
+0000279483 00000 n 
+0003391743 00000 n 
+0000002645 00000 n 
+0000002694 00000 n 
+0000279610 00000 n 
+0003391664 00000 n 
+0000002748 00000 n 
+0000002790 00000 n 
+0000286609 00000 n 
+0003391585 00000 n 
+0000002844 00000 n 
+0000002886 00000 n 
+0000286736 00000 n 
+0003391453 00000 n 
+0000002935 00000 n 
+0000002973 00000 n 
+0000308349 00000 n 
+0003391374 00000 n 
+0000003027 00000 n 
+0000003063 00000 n 
+0000320176 00000 n 
+0003391281 00000 n 
+0000003117 00000 n 
+0000003177 00000 n 
+0000320303 00000 n 
+0003391202 00000 n 
+0000003231 00000 n 
+0000003275 00000 n 
+0000322746 00000 n 
+0003391123 00000 n 
+0000003324 00000 n 
+0000003369 00000 n 
+0000343999 00000 n 
+0003390992 00000 n 
+0000003416 00000 n 
+0000003470 00000 n 
+0000344126 00000 n 
+0003390874 00000 n 
+0000003519 00000 n 
+0000003555 00000 n 
+0000347021 00000 n 
+0003390809 00000 n 
+0000003609 00000 n 
+0000003651 00000 n 
+0000362521 00000 n 
+0003390677 00000 n 
+0000003700 00000 n 
+0000003749 00000 n 
+0000362648 00000 n 
+0003390559 00000 n 
+0000003803 00000 n 
+0000003845 00000 n 
+0000371050 00000 n 
+0003390494 00000 n 
+0000003904 00000 n 
+0000003953 00000 n 
+0000376299 00000 n 
+0003390415 00000 n 
+0000004007 00000 n 
+0000004049 00000 n 
+0000376426 00000 n 
+0003390283 00000 n 
+0000004098 00000 n 
+0000004136 00000 n 
+0000382411 00000 n 
+0003390204 00000 n 
+0000004190 00000 n 
+0000004242 00000 n 
+0000389527 00000 n 
+0003390111 00000 n 
+0000004296 00000 n 
+0000004341 00000 n 
+0000402401 00000 n 
+0003390018 00000 n 
+0000004395 00000 n 
+0000004458 00000 n 
+0000405348 00000 n 
+0003389925 00000 n 
+0000004512 00000 n 
+0000004559 00000 n 
+0000409611 00000 n 
+0003389832 00000 n 
+0000004613 00000 n 
+0000004668 00000 n 
+0000412098 00000 n 
+0003389739 00000 n 
+0000004722 00000 n 
+0000004758 00000 n 
+0000428882 00000 n 
+0003389607 00000 n 
+0000004812 00000 n 
+0000004869 00000 n 
+0000431558 00000 n 
+0003389542 00000 n 
+0000004928 00000 n 
+0000004996 00000 n 
+0000434329 00000 n 
+0003389449 00000 n 
+0000005050 00000 n 
+0000005104 00000 n 
+0000441868 00000 n 
+0003389370 00000 n 
+0000005158 00000 n 
+0000005202 00000 n 
+0000444566 00000 n 
+0003389291 00000 n 
+0000005251 00000 n 
+0000005296 00000 n 
+0000482077 00000 n 
+0003389160 00000 n 
+0000005343 00000 n 
+0000005392 00000 n 
+0000484866 00000 n 
+0003389042 00000 n 
+0000005441 00000 n 
+0000005477 00000 n 
+0000487610 00000 n 
+0003388977 00000 n 
+0000005531 00000 n 
+0000005573 00000 n 
+0000490545 00000 n 
+0003388845 00000 n 
+0000005622 00000 n 
+0000005671 00000 n 
+0000490672 00000 n 
+0003388766 00000 n 
+0000005725 00000 n 
+0000005767 00000 n 
+0000496600 00000 n 
+0003388687 00000 n 
+0000005821 00000 n 
+0000005863 00000 n 
+0000496726 00000 n 
+0003388555 00000 n 
+0000005912 00000 n 
+0000005950 00000 n 
+0000496852 00000 n 
+0003388476 00000 n 
+0000006004 00000 n 
+0000006080 00000 n 
+0000496979 00000 n 
+0003388383 00000 n 
+0000006134 00000 n 
+0000006191 00000 n 
+0000525137 00000 n 
+0003388251 00000 n 
+0000006245 00000 n 
+0000006298 00000 n 
+0000527606 00000 n 
+0003388172 00000 n 
+0000006357 00000 n 
+0000006418 00000 n 
+0000538023 00000 n 
+0003388093 00000 n 
+0000006477 00000 n 
+0000006566 00000 n 
+0000544729 00000 n 
+0003388000 00000 n 
+0000006620 00000 n 
+0000006675 00000 n 
+0000564907 00000 n 
+0003387907 00000 n 
+0000006729 00000 n 
+0000006783 00000 n 
+0000572006 00000 n 
+0003387828 00000 n 
+0000006837 00000 n 
+0000006881 00000 n 
+0000574424 00000 n 
+0003387749 00000 n 
+0000006930 00000 n 
+0000006975 00000 n 
+0000592903 00000 n 
+0003387618 00000 n 
+0000007022 00000 n 
+0000007070 00000 n 
+0000603884 00000 n 
+0003387539 00000 n 
+0000007119 00000 n 
+0000007199 00000 n 
+0000604010 00000 n 
+0003387407 00000 n 
+0000007248 00000 n 
+0000007284 00000 n 
+0000609381 00000 n 
+0003387342 00000 n 
+0000007338 00000 n 
+0000007380 00000 n 
+0000609636 00000 n 
+0003387210 00000 n 
+0000007429 00000 n 
+0000007478 00000 n 
+0000620551 00000 n 
+0003387092 00000 n 
+0000007532 00000 n 
+0000007574 00000 n 
+0000629711 00000 n 
+0003387013 00000 n 
+0000007633 00000 n 
+0000007695 00000 n 
+0000632960 00000 n 
+0003386920 00000 n 
+0000007754 00000 n 
+0000007808 00000 n 
+0000636152 00000 n 
+0003386827 00000 n 
+0000007867 00000 n 
+0000007917 00000 n 
+0000636279 00000 n 
+0003386734 00000 n 
+0000007976 00000 n 
+0000008019 00000 n 
+0000636406 00000 n 
+0003386641 00000 n 
+0000008078 00000 n 
+0000008142 00000 n 
+0000639746 00000 n 
+0003386548 00000 n 
+0000008201 00000 n 
+0000008273 00000 n 
+0000641989 00000 n 
+0003386469 00000 n 
+0000008332 00000 n 
+0000008414 00000 n 
+0000656988 00000 n 
+0003386376 00000 n 
+0000008468 00000 n 
+0000008510 00000 n 
+0000657115 00000 n 
+0003386297 00000 n 
+0000008564 00000 n 
+0000008612 00000 n 
+0000674585 00000 n 
+0003386165 00000 n 
+0000008661 00000 n 
+0000008712 00000 n 
+0000678015 00000 n 
+0003386086 00000 n 
+0000008766 00000 n 
+0000008821 00000 n 
+0000683912 00000 n 
+0003385993 00000 n 
+0000008875 00000 n 
+0000008933 00000 n 
+0000691385 00000 n 
+0003385900 00000 n 
+0000008987 00000 n 
+0000009038 00000 n 
+0000698328 00000 n 
+0003385768 00000 n 
+0000009092 00000 n 
+0000009168 00000 n 
+0000700460 00000 n 
+0003385689 00000 n 
+0000009227 00000 n 
+0000009301 00000 n 
+0000702794 00000 n 
+0003385596 00000 n 
+0000009360 00000 n 
+0000009433 00000 n 
+0000706507 00000 n 
+0003385517 00000 n 
+0000009492 00000 n 
+0000009550 00000 n 
+0000712917 00000 n 
+0003385424 00000 n 
+0000009604 00000 n 
+0000009689 00000 n 
+0000737990 00000 n 
+0003385345 00000 n 
+0000009743 00000 n 
+0000009790 00000 n 
+0000743342 00000 n 
+0003385252 00000 n 
+0000009839 00000 n 
+0000009888 00000 n 
+0000753971 00000 n 
+0003385120 00000 n 
+0000009937 00000 n 
+0000009999 00000 n 
+0000754097 00000 n 
+0003385041 00000 n 
+0000010053 00000 n 
+0000010118 00000 n 
+0000755776 00000 n 
+0003384948 00000 n 
+0000010172 00000 n 
+0000010229 00000 n 
+0000758307 00000 n 
+0003384855 00000 n 
+0000010283 00000 n 
+0000010337 00000 n 
+0000761298 00000 n 
+0003384776 00000 n 
+0000010391 00000 n 
+0000010453 00000 n 
+0000765176 00000 n 
+0003384644 00000 n 
+0000010502 00000 n 
+0000010554 00000 n 
+0000768120 00000 n 
+0003384565 00000 n 
+0000010608 00000 n 
+0000010690 00000 n 
+0000772107 00000 n 
+0003384472 00000 n 
+0000010744 00000 n 
+0000010818 00000 n 
+0000797100 00000 n 
+0003384379 00000 n 
+0000010872 00000 n 
+0000010940 00000 n 
+0000797227 00000 n 
+0003384286 00000 n 
+0000010994 00000 n 
+0000011062 00000 n 
+0000804287 00000 n 
+0003384193 00000 n 
+0000011116 00000 n 
+0000011163 00000 n 
+0000806690 00000 n 
+0003384114 00000 n 
+0000011217 00000 n 
+0000011266 00000 n 
+0000806817 00000 n 
+0003384021 00000 n 
+0000011315 00000 n 
+0000011357 00000 n 
+0000809519 00000 n 
+0003383942 00000 n 
+0000011406 00000 n 
+0000011451 00000 n 
+0000857332 00000 n 
+0003383825 00000 n 
+0000011498 00000 n 
+0000011559 00000 n 
+0000860005 00000 n 
+0003383707 00000 n 
+0000011608 00000 n 
+0000011644 00000 n 
+0000860132 00000 n 
+0003383642 00000 n 
+0000011698 00000 n 
+0000011740 00000 n 
+0000863131 00000 n 
+0003383510 00000 n 
+0000011789 00000 n 
+0000011838 00000 n 
+0000865830 00000 n 
+0003383392 00000 n 
+0000011892 00000 n 
+0000011934 00000 n 
+0000868423 00000 n 
+0003383313 00000 n 
+0000011993 00000 n 
+0000012031 00000 n 
+0000871147 00000 n 
+0003383220 00000 n 
+0000012090 00000 n 
+0000012160 00000 n 
+0000876509 00000 n 
+0003383141 00000 n 
+0000012219 00000 n 
+0000012272 00000 n 
+0000889454 00000 n 
+0003383062 00000 n 
+0000012326 00000 n 
+0000012368 00000 n 
+0000889580 00000 n 
+0003382930 00000 n 
+0000012417 00000 n 
+0000012455 00000 n 
+0000916962 00000 n 
+0003382865 00000 n 
+0000012509 00000 n 
+0000012553 00000 n 
+0000917089 00000 n 
+0003382786 00000 n 
+0000012602 00000 n 
+0000012647 00000 n 
+0001160427 00000 n 
+0003382654 00000 n 
+0000012691 00000 n 
+0000012763 00000 n 
+0001161988 00000 n 
+0003382575 00000 n 
+0000012812 00000 n 
+0000012876 00000 n 
+0001165095 00000 n 
+0003382443 00000 n 
+0000012923 00000 n 
+0000012993 00000 n 
+0001165222 00000 n 
+0003382325 00000 n 
+0000013042 00000 n 
+0000013078 00000 n 
+0001185432 00000 n 
+0003382260 00000 n 
+0000013132 00000 n 
+0000013174 00000 n 
+0001187956 00000 n 
+0003382128 00000 n 
+0000013223 00000 n 
+0000013272 00000 n 
+0001188083 00000 n 
+0003382049 00000 n 
+0000013326 00000 n 
+0000013368 00000 n 
+0001196280 00000 n 
+0003381970 00000 n 
+0000013422 00000 n 
+0000013464 00000 n 
+0001196407 00000 n 
+0003381838 00000 n 
+0000013513 00000 n 
+0000013551 00000 n 
+0001199243 00000 n 
+0003381759 00000 n 
+0000013605 00000 n 
+0000013694 00000 n 
+0001221130 00000 n 
+0003381666 00000 n 
+0000013748 00000 n 
+0000013845 00000 n 
+0001228948 00000 n 
+0003381573 00000 n 
+0000013899 00000 n 
+0000013993 00000 n 
+0001232115 00000 n 
+0003381441 00000 n 
+0000014047 00000 n 
+0000014128 00000 n 
+0001260479 00000 n 
+0003381362 00000 n 
+0000014187 00000 n 
+0000014240 00000 n 
+0001264685 00000 n 
+0003381269 00000 n 
+0000014299 00000 n 
+0000014362 00000 n 
+0001272345 00000 n 
+0003381190 00000 n 
+0000014421 00000 n 
+0000014515 00000 n 
+0001275848 00000 n 
+0003381058 00000 n 
+0000014569 00000 n 
+0000014626 00000 n 
+0001281495 00000 n 
+0003380979 00000 n 
+0000014685 00000 n 
+0000014730 00000 n 
+0001282004 00000 n 
+0003380900 00000 n 
+0000014789 00000 n 
+0000014834 00000 n 
+0001285183 00000 n 
+0003380821 00000 n 
+0000014888 00000 n 
+0000014932 00000 n 
+0001287471 00000 n 
+0003380742 00000 n 
+0000014981 00000 n 
+0000015026 00000 n 
+0001339898 00000 n 
+0003380610 00000 n 
+0000015073 00000 n 
+0000015119 00000 n 
+0001342142 00000 n 
+0003380492 00000 n 
+0000015168 00000 n 
+0000015204 00000 n 
+0001344629 00000 n 
+0003380388 00000 n 
+0000015258 00000 n 
+0000015302 00000 n 
+0001344756 00000 n 
+0003380309 00000 n 
+0000015361 00000 n 
+0000015418 00000 n 
+0001353154 00000 n 
+0003380216 00000 n 
+0000015477 00000 n 
+0000015523 00000 n 
+0001355427 00000 n 
+0003380123 00000 n 
+0000015582 00000 n 
+0000015645 00000 n 
+0001355553 00000 n 
+0003380030 00000 n 
+0000015704 00000 n 
+0000015756 00000 n 
+0001359873 00000 n 
+0003379937 00000 n 
+0000015815 00000 n 
+0000015873 00000 n 
+0001360000 00000 n 
+0003379858 00000 n 
+0000015932 00000 n 
+0000016003 00000 n 
+0001362638 00000 n 
+0003379726 00000 n 
+0000016052 00000 n 
+0000016119 00000 n 
+0001362765 00000 n 
+0003379647 00000 n 
+0000016173 00000 n 
+0000016240 00000 n 
+0001368846 00000 n 
+0003379554 00000 n 
+0000016294 00000 n 
+0000016367 00000 n 
+0001371321 00000 n 
+0003379475 00000 n 
+0000016421 00000 n 
+0000016474 00000 n 
+0001378486 00000 n 
+0003379357 00000 n 
+0000016523 00000 n 
+0000016578 00000 n 
+0001380832 00000 n 
+0003379239 00000 n 
+0000016632 00000 n 
+0000016703 00000 n 
+0001380959 00000 n 
+0003379160 00000 n 
+0000016762 00000 n 
+0000016837 00000 n 
+0001381086 00000 n 
+0003379067 00000 n 
+0000016896 00000 n 
+0000016977 00000 n 
+0001383369 00000 n 
+0003378988 00000 n 
+0000017036 00000 n 
+0000017125 00000 n 
+0001383496 00000 n 
+0003378856 00000 n 
+0000017179 00000 n 
+0000017238 00000 n 
+0001386463 00000 n 
+0003378777 00000 n 
+0000017297 00000 n 
+0000017357 00000 n 
+0001386590 00000 n 
+0003378698 00000 n 
+0000017416 00000 n 
+0000017473 00000 n 
+0001391894 00000 n 
+0003378619 00000 n 
+0000017527 00000 n 
+0000017600 00000 n 
+0001395993 00000 n 
+0003378487 00000 n 
+0000017647 00000 n 
+0000017708 00000 n 
+0001396120 00000 n 
+0003378369 00000 n 
+0000017757 00000 n 
+0000017793 00000 n 
+0001398307 00000 n 
+0003378304 00000 n 
+0000017847 00000 n 
+0000017889 00000 n 
+0001398433 00000 n 
+0003378172 00000 n 
+0000017938 00000 n 
+0000017987 00000 n 
+0001401348 00000 n 
+0003378093 00000 n 
+0000018041 00000 n 
+0000018083 00000 n 
+0001440839 00000 n 
+0003378014 00000 n 
+0000018137 00000 n 
+0000018179 00000 n 
+0001444395 00000 n 
+0003377882 00000 n 
+0000018228 00000 n 
+0000018266 00000 n 
+0001446752 00000 n 
+0003377764 00000 n 
+0000018320 00000 n 
+0000018378 00000 n 
+0001472264 00000 n 
+0003377699 00000 n 
+0000018437 00000 n 
+0000018489 00000 n 
+0001475595 00000 n 
+0003377606 00000 n 
+0000018543 00000 n 
+0000018603 00000 n 
+0001482746 00000 n 
+0003377527 00000 n 
+0000018657 00000 n 
+0000018701 00000 n 
+0001482873 00000 n 
+0003377448 00000 n 
+0000018750 00000 n 
+0000018795 00000 n 
+0001513432 00000 n 
+0003377330 00000 n 
+0000018843 00000 n 
+0000018909 00000 n 
+0001515850 00000 n 
+0003377212 00000 n 
+0000018959 00000 n 
+0000018996 00000 n 
+0001518659 00000 n 
+0003377147 00000 n 
+0000019051 00000 n 
+0000019094 00000 n 
+0001520927 00000 n 
+0003377015 00000 n 
+0000019144 00000 n 
+0000019194 00000 n 
+0001521054 00000 n 
+0003376950 00000 n 
+0000019249 00000 n 
+0000019292 00000 n 
+0001525410 00000 n 
+0003376832 00000 n 
+0000019342 00000 n 
+0000019381 00000 n 
+0001525537 00000 n 
+0003376728 00000 n 
+0000019436 00000 n 
+0000019499 00000 n 
+0001527037 00000 n 
+0003376663 00000 n 
+0000019559 00000 n 
+0000019613 00000 n 
+0001606149 00000 n 
+0003376542 00000 n 
+0000019657 00000 n 
+0000019703 00000 n 
+0001607413 00000 n 
+0003376463 00000 n 
+0000019752 00000 n 
+0000019789 00000 n 
+0001609806 00000 n 
+0003376331 00000 n 
+0000019837 00000 n 
+0000019908 00000 n 
+0001612456 00000 n 
+0003376213 00000 n 
+0000019958 00000 n 
+0000019995 00000 n 
+0001619262 00000 n 
+0003376148 00000 n 
+0000020050 00000 n 
+0000020093 00000 n 
+0001621923 00000 n 
+0003376016 00000 n 
+0000020143 00000 n 
+0000020193 00000 n 
+0001624244 00000 n 
+0003375912 00000 n 
+0000020248 00000 n 
+0000020291 00000 n 
+0001637028 00000 n 
+0003375847 00000 n 
+0000020351 00000 n 
+0000020396 00000 n 
+0001643472 00000 n 
+0003375715 00000 n 
+0000020446 00000 n 
+0000020485 00000 n 
+0001643599 00000 n 
+0003375636 00000 n 
+0000020540 00000 n 
+0000020588 00000 n 
+0001646767 00000 n 
+0003375504 00000 n 
+0000020643 00000 n 
+0000020695 00000 n 
+0001649039 00000 n 
+0003375425 00000 n 
+0000020755 00000 n 
+0000020803 00000 n 
+0001655842 00000 n 
+0003375346 00000 n 
+0000020863 00000 n 
+0000020909 00000 n 
+0001658473 00000 n 
+0003375253 00000 n 
+0000020964 00000 n 
+0000021033 00000 n 
+0001663407 00000 n 
+0003375121 00000 n 
+0000021088 00000 n 
+0000021141 00000 n 
+0001663534 00000 n 
+0003375042 00000 n 
+0000021201 00000 n 
+0000021273 00000 n 
+0001669159 00000 n 
+0003374949 00000 n 
+0000021333 00000 n 
+0000021404 00000 n 
+0001669477 00000 n 
+0003374870 00000 n 
+0000021464 00000 n 
+0000021525 00000 n 
+0001673579 00000 n 
+0003374791 00000 n 
+0000021580 00000 n 
+0000021625 00000 n 
+0001675810 00000 n 
+0003374712 00000 n 
+0000021675 00000 n 
+0000021721 00000 n 
+0001682263 00000 n 
+0003374580 00000 n 
+0000021769 00000 n 
+0000021831 00000 n 
+0001682390 00000 n 
+0003374462 00000 n 
+0000021881 00000 n 
+0000021918 00000 n 
+0001684871 00000 n 
+0003374397 00000 n 
+0000021973 00000 n 
+0000022016 00000 n 
+0001687013 00000 n 
+0003374265 00000 n 
+0000022066 00000 n 
+0000022116 00000 n 
+0001687140 00000 n 
+0003374186 00000 n 
+0000022171 00000 n 
+0000022214 00000 n 
+0001689086 00000 n 
+0003374107 00000 n 
+0000022269 00000 n 
+0000022312 00000 n 
+0001689213 00000 n 
+0003373975 00000 n 
+0000022362 00000 n 
+0000022401 00000 n 
+0001690903 00000 n 
+0003373896 00000 n 
+0000022456 00000 n 
+0000022523 00000 n 
+0001694059 00000 n 
+0003373764 00000 n 
+0000022578 00000 n 
+0000022627 00000 n 
+0001696024 00000 n 
+0003373685 00000 n 
+0000022687 00000 n 
+0000022735 00000 n 
+0001702740 00000 n 
+0003373592 00000 n 
+0000022795 00000 n 
+0000022841 00000 n 
+0001707534 00000 n 
+0003373513 00000 n 
+0000022901 00000 n 
+0000022949 00000 n 
+0001707661 00000 n 
+0003373420 00000 n 
+0000023004 00000 n 
+0000023044 00000 n 
+0001712423 00000 n 
+0003373341 00000 n 
+0000023099 00000 n 
+0000023144 00000 n 
+0001715104 00000 n 
+0003373262 00000 n 
+0000023194 00000 n 
+0000023240 00000 n 
+0001720607 00000 n 
+0003373130 00000 n 
+0000023288 00000 n 
+0000023361 00000 n 
+0001720733 00000 n 
+0003373051 00000 n 
+0000023411 00000 n 
+0000023448 00000 n 
+0001723879 00000 n 
+0003372958 00000 n 
+0000023498 00000 n 
+0000023548 00000 n 
+0001729400 00000 n 
+0003372826 00000 n 
+0000023598 00000 n 
+0000023662 00000 n 
+0001729527 00000 n 
+0003372708 00000 n 
+0000023717 00000 n 
+0000023759 00000 n 
+0001729654 00000 n 
+0003372629 00000 n 
+0000023819 00000 n 
+0000023861 00000 n 
+0001732154 00000 n 
+0003372536 00000 n 
+0000023921 00000 n 
+0000023965 00000 n 
+0001734803 00000 n 
+0003372457 00000 n 
+0000024025 00000 n 
+0000024072 00000 n 
+0001734928 00000 n 
+0003372364 00000 n 
+0000024127 00000 n 
+0000024173 00000 n 
+0001741638 00000 n 
+0003372271 00000 n 
+0000024228 00000 n 
+0000024279 00000 n 
+0001741765 00000 n 
+0003372178 00000 n 
+0000024334 00000 n 
+0000024408 00000 n 
+0001741892 00000 n 
+0003372085 00000 n 
+0000024463 00000 n 
+0000024545 00000 n 
+0001744318 00000 n 
+0003371992 00000 n 
+0000024600 00000 n 
+0000024661 00000 n 
+0001744445 00000 n 
+0003371899 00000 n 
+0000024716 00000 n 
+0000024801 00000 n 
+0001744572 00000 n 
+0003371806 00000 n 
+0000024856 00000 n 
+0000024900 00000 n 
+0001747269 00000 n 
+0003371727 00000 n 
+0000024955 00000 n 
+0000024999 00000 n 
+0001749591 00000 n 
+0003371648 00000 n 
+0000025049 00000 n 
+0000025092 00000 n 
+0001753085 00000 n 
+0003371516 00000 n 
+0000025140 00000 n 
+0000025184 00000 n 
+0001756373 00000 n 
+0003371437 00000 n 
+0000025234 00000 n 
+0000025271 00000 n 
+0001758957 00000 n 
+0003371358 00000 n 
+0000025321 00000 n 
+0000025364 00000 n 
+0001762169 00000 n 
+0003371224 00000 n 
+0000025412 00000 n 
+0000025473 00000 n 
+0001762296 00000 n 
+0003371145 00000 n 
+0000025523 00000 n 
+0000025594 00000 n 
+0001878501 00000 n 
+0003371052 00000 n 
+0000025644 00000 n 
+0000025695 00000 n 
+0001884664 00000 n 
+0003370959 00000 n 
+0000025745 00000 n 
+0000025784 00000 n 
+0001887770 00000 n 
+0003370826 00000 n 
+0000025834 00000 n 
+0000025882 00000 n 
+0001887897 00000 n 
+0003370747 00000 n 
+0000025937 00000 n 
+0000026010 00000 n 
+0001888024 00000 n 
+0003370654 00000 n 
+0000026065 00000 n 
+0000026138 00000 n 
+0001888151 00000 n 
+0003370574 00000 n 
+0000026193 00000 n 
+0000026246 00000 n 
+0001891070 00000 n 
+0003370436 00000 n 
+0000026297 00000 n 
+0000026363 00000 n 
+0001891198 00000 n 
+0003370367 00000 n 
+0000026419 00000 n 
+0000026482 00000 n 
+0001897803 00000 n 
+0003370269 00000 n 
+0000026533 00000 n 
+0000026583 00000 n 
+0002154937 00000 n 
+0003370171 00000 n 
+0000026634 00000 n 
+0000026685 00000 n 
+0002318971 00000 n 
+0003370073 00000 n 
+0000026736 00000 n 
+0000026830 00000 n 
+0002493648 00000 n 
+0003369949 00000 n 
+0000026881 00000 n 
+0000026928 00000 n 
+0002495916 00000 n 
+0003369865 00000 n 
+0000026984 00000 n 
+0000027028 00000 n 
+0002499353 00000 n 
+0003369766 00000 n 
+0000027084 00000 n 
+0000027133 00000 n 
+0002499481 00000 n 
+0003369682 00000 n 
+0000027189 00000 n 
+0000027247 00000 n 
+0002516607 00000 n 
+0003369544 00000 n 
+0000027296 00000 n 
+0000027345 00000 n 
+0002516735 00000 n 
+0003369460 00000 n 
+0000027396 00000 n 
+0000027444 00000 n 
+0002522362 00000 n 
+0003369320 00000 n 
+0000027495 00000 n 
+0000027533 00000 n 
+0002524722 00000 n 
+0003369251 00000 n 
+0000027589 00000 n 
+0000027633 00000 n 
+0002525106 00000 n 
+0003369111 00000 n 
+0000027684 00000 n 
+0000027719 00000 n 
+0002527545 00000 n 
+0003368986 00000 n 
+0000027775 00000 n 
+0000027836 00000 n 
+0002531310 00000 n 
+0003368917 00000 n 
+0000027897 00000 n 
+0000027935 00000 n 
+0002586634 00000 n 
+0003368777 00000 n 
+0000027991 00000 n 
+0000028063 00000 n 
+0002592700 00000 n 
+0003368708 00000 n 
+0000028124 00000 n 
+0000028162 00000 n 
+0002592828 00000 n 
+0003368568 00000 n 
+0000028218 00000 n 
+0000028294 00000 n 
+0002623813 00000 n 
+0003368499 00000 n 
+0000028355 00000 n 
+0000028406 00000 n 
+0002656433 00000 n 
+0003368359 00000 n 
+0000028462 00000 n 
+0000028537 00000 n 
+0002679104 00000 n 
+0003368290 00000 n 
+0000028598 00000 n 
+0000028638 00000 n 
+0002696285 00000 n 
+0003368206 00000 n 
+0000028694 00000 n 
+0000028746 00000 n 
+0002698928 00000 n 
+0003368066 00000 n 
+0000028797 00000 n 
+0000028848 00000 n 
+0002699056 00000 n 
+0003367997 00000 n 
+0000028904 00000 n 
+0000028948 00000 n 
+0002701189 00000 n 
+0003367913 00000 n 
+0000028999 00000 n 
+0000029046 00000 n 
+0002710613 00000 n 
+0003367815 00000 n 
+0000029095 00000 n 
+0000029162 00000 n 
+0002750657 00000 n 
+0003367717 00000 n 
+0000029212 00000 n 
+0000029241 00000 n 
+0002755764 00000 n 
+0003367634 00000 n 
+0000029292 00000 n 
+0000029326 00000 n 
+0000029714 00000 n 
+0000029958 00000 n 
+0000029380 00000 n 
+0000029830 00000 n 
+0000029894 00000 n 
+0003347541 00000 n 
+0003347394 00000 n 
+0003348862 00000 n 
+0003351495 00000 n 
+0000032371 00000 n 
+0000032007 00000 n 
+0000030060 00000 n 
+0000032123 00000 n 
+0003350030 00000 n 
+0000032308 00000 n 
+0003348716 00000 n 
+0003350473 00000 n 
+0000034901 00000 n 
+0000034595 00000 n 
+0000032487 00000 n 
+0000034711 00000 n 
+0000034837 00000 n 
+0000036295 00000 n 
+0000036446 00000 n 
+0000036600 00000 n 
+0000036754 00000 n 
+0000036908 00000 n 
+0000037061 00000 n 
+0000037215 00000 n 
+0000037369 00000 n 
+0000037518 00000 n 
+0000037673 00000 n 
+0000037826 00000 n 
+0000037980 00000 n 
+0000038135 00000 n 
+0000038295 00000 n 
+0000038460 00000 n 
+0000038625 00000 n 
+0000038789 00000 n 
+0000038949 00000 n 
+0000039114 00000 n 
+0000039279 00000 n 
+0000039444 00000 n 
+0000039603 00000 n 
+0000039768 00000 n 
+0000039933 00000 n 
+0000041921 00000 n 
+0000040152 00000 n 
+0000035951 00000 n 
+0000035017 00000 n 
+0000040088 00000 n 
+0000042073 00000 n 
+0000042228 00000 n 
+0000042388 00000 n 
+0000042543 00000 n 
+0000042703 00000 n 
+0000042863 00000 n 
+0000043018 00000 n 
+0000043178 00000 n 
+0000043338 00000 n 
+0000043498 00000 n 
+0000043653 00000 n 
+0000043805 00000 n 
+0000043960 00000 n 
+0000044120 00000 n 
+0000044274 00000 n 
+0000044434 00000 n 
+0000044599 00000 n 
+0000044759 00000 n 
+0000044914 00000 n 
+0000045074 00000 n 
+0000045234 00000 n 
+0000045394 00000 n 
+0000045554 00000 n 
+0000045714 00000 n 
+0000045874 00000 n 
+0000046034 00000 n 
+0000046199 00000 n 
+0000046359 00000 n 
+0000046519 00000 n 
+0000046673 00000 n 
+0000046826 00000 n 
+0000046981 00000 n 
+0000047141 00000 n 
+0000047296 00000 n 
+0000047456 00000 n 
+0000047616 00000 n 
+0000047771 00000 n 
+0000050141 00000 n 
+0000047995 00000 n 
+0000041451 00000 n 
+0000040268 00000 n 
+0000047931 00000 n 
+0003349884 00000 n 
+0000050300 00000 n 
+0000050460 00000 n 
+0000050624 00000 n 
+0000050789 00000 n 
+0000050949 00000 n 
+0000051109 00000 n 
+0000051269 00000 n 
+0000051423 00000 n 
+0000051576 00000 n 
+0000051731 00000 n 
+0000051886 00000 n 
+0000052046 00000 n 
+0000052200 00000 n 
+0000052360 00000 n 
+0000052524 00000 n 
+0000052689 00000 n 
+0000052854 00000 n 
+0000053019 00000 n 
+0000053184 00000 n 
+0000053349 00000 n 
+0000053514 00000 n 
+0000053673 00000 n 
+0000053833 00000 n 
+0000053988 00000 n 
+0000054148 00000 n 
+0000054308 00000 n 
+0000054468 00000 n 
+0000054628 00000 n 
+0000054793 00000 n 
+0000054958 00000 n 
+0000055123 00000 n 
+0000055283 00000 n 
+0000055443 00000 n 
+0000055597 00000 n 
+0000057779 00000 n 
+0000055816 00000 n 
+0000049698 00000 n 
+0000048097 00000 n 
+0000055752 00000 n 
+0000057938 00000 n 
+0000058098 00000 n 
+0000058258 00000 n 
+0000058418 00000 n 
+0000058573 00000 n 
+0000058732 00000 n 
+0000058892 00000 n 
+0000059052 00000 n 
+0000059212 00000 n 
+0000059372 00000 n 
+0000059531 00000 n 
+0000059686 00000 n 
+0000059841 00000 n 
+0000059994 00000 n 
+0000060149 00000 n 
+0000060309 00000 n 
+0000060464 00000 n 
+0000060624 00000 n 
+0000060789 00000 n 
+0000060954 00000 n 
+0000061119 00000 n 
+0000061279 00000 n 
+0000061434 00000 n 
+0000061593 00000 n 
+0000061748 00000 n 
+0000061897 00000 n 
+0000062052 00000 n 
+0000062204 00000 n 
+0000062359 00000 n 
+0000062519 00000 n 
+0000062674 00000 n 
+0000065074 00000 n 
+0000062898 00000 n 
+0000057363 00000 n 
+0000055918 00000 n 
+0000062834 00000 n 
+0003351620 00000 n 
+0000065233 00000 n 
+0000065388 00000 n 
+0000065547 00000 n 
+0000065707 00000 n 
+0000065867 00000 n 
+0000066027 00000 n 
+0000066192 00000 n 
+0000066357 00000 n 
+0000066522 00000 n 
+0000066682 00000 n 
+0000066847 00000 n 
+0000067012 00000 n 
+0000067171 00000 n 
+0000067326 00000 n 
+0000067479 00000 n 
+0000067633 00000 n 
+0000067793 00000 n 
+0000067956 00000 n 
+0000068121 00000 n 
+0000068286 00000 n 
+0000068451 00000 n 
+0000068616 00000 n 
+0000068780 00000 n 
+0000068935 00000 n 
+0000069095 00000 n 
+0000069255 00000 n 
+0000069415 00000 n 
+0000069570 00000 n 
+0000069730 00000 n 
+0000069895 00000 n 
+0000071989 00000 n 
+0000070124 00000 n 
+0000064667 00000 n 
+0000063014 00000 n 
+0000070060 00000 n 
+0000072154 00000 n 
+0000072313 00000 n 
+0000072478 00000 n 
+0000072643 00000 n 
+0000072803 00000 n 
+0000072956 00000 n 
+0000073111 00000 n 
+0000073270 00000 n 
+0000073425 00000 n 
+0000073584 00000 n 
+0000073744 00000 n 
+0000073899 00000 n 
+0000074059 00000 n 
+0000074224 00000 n 
+0000074382 00000 n 
+0000074542 00000 n 
+0000074695 00000 n 
+0000074849 00000 n 
+0000075005 00000 n 
+0000075166 00000 n 
+0000075322 00000 n 
+0000075483 00000 n 
+0000075639 00000 n 
+0000075800 00000 n 
+0000075966 00000 n 
+0000076116 00000 n 
+0000076271 00000 n 
+0000076425 00000 n 
+0000076581 00000 n 
+0000076741 00000 n 
+0000078905 00000 n 
+0000076961 00000 n 
+0000071582 00000 n 
+0000070226 00000 n 
+0000076897 00000 n 
+0000079065 00000 n 
+0000079231 00000 n 
+0000079387 00000 n 
+0000079548 00000 n 
+0000079708 00000 n 
+0000079873 00000 n 
+0000080039 00000 n 
+0000080200 00000 n 
+0000080361 00000 n 
+0000080526 00000 n 
+0000080692 00000 n 
+0000080858 00000 n 
+0000081019 00000 n 
+0000081175 00000 n 
+0000081328 00000 n 
+0000081484 00000 n 
+0000081645 00000 n 
+0000081801 00000 n 
+0000081962 00000 n 
+0000082122 00000 n 
+0000082278 00000 n 
+0000082439 00000 n 
+0000082600 00000 n 
+0000082766 00000 n 
+0000082931 00000 n 
+0000083097 00000 n 
+0000083258 00000 n 
+0000083419 00000 n 
+0000083575 00000 n 
+0000083729 00000 n 
+0000083885 00000 n 
+0000084040 00000 n 
+0000084196 00000 n 
+0000084357 00000 n 
+0000084523 00000 n 
+0000086915 00000 n 
+0000084753 00000 n 
+0000078453 00000 n 
+0000077077 00000 n 
+0000084689 00000 n 
+0000087080 00000 n 
+0000087241 00000 n 
+0000087401 00000 n 
+0000087562 00000 n 
+0000087722 00000 n 
+0000087883 00000 n 
+0000088044 00000 n 
+0000088205 00000 n 
+0000088365 00000 n 
+0000088521 00000 n 
+0000088675 00000 n 
+0000088831 00000 n 
+0000088987 00000 n 
+0000089141 00000 n 
+0000089296 00000 n 
+0000089452 00000 n 
+0000089607 00000 n 
+0000089763 00000 n 
+0000089924 00000 n 
+0000090085 00000 n 
+0000090246 00000 n 
+0000090402 00000 n 
+0000090563 00000 n 
+0000090719 00000 n 
+0000090875 00000 n 
+0000091031 00000 n 
+0000091187 00000 n 
+0000091348 00000 n 
+0000091509 00000 n 
+0000091670 00000 n 
+0000091824 00000 n 
+0000091980 00000 n 
+0000092136 00000 n 
+0000093555 00000 n 
+0000092361 00000 n 
+0000086481 00000 n 
+0000084855 00000 n 
+0000092297 00000 n 
+0000093710 00000 n 
+0000093871 00000 n 
+0000094037 00000 n 
+0000094197 00000 n 
+0000094363 00000 n 
+0000094524 00000 n 
+0000094690 00000 n 
+0000094851 00000 n 
+0000095017 00000 n 
+0000095178 00000 n 
+0000095334 00000 n 
+0000095495 00000 n 
+0000095649 00000 n 
+0000095802 00000 n 
+0000095957 00000 n 
+0000096177 00000 n 
+0000093283 00000 n 
+0000092463 00000 n 
+0000096113 00000 n 
+0000096560 00000 n 
+0000096380 00000 n 
+0000096279 00000 n 
+0000096496 00000 n 
+0003351745 00000 n 
+0000098208 00000 n 
+0000098364 00000 n 
+0000098520 00000 n 
+0000098676 00000 n 
+0000098828 00000 n 
+0000098984 00000 n 
+0000099139 00000 n 
+0000099295 00000 n 
+0000099451 00000 n 
+0000099606 00000 n 
+0000099762 00000 n 
+0000099917 00000 n 
+0000100073 00000 n 
+0000100229 00000 n 
+0000100385 00000 n 
+0000100541 00000 n 
+0000100697 00000 n 
+0000100853 00000 n 
+0000101009 00000 n 
+0000101164 00000 n 
+0000101320 00000 n 
+0000101477 00000 n 
+0000103544 00000 n 
+0000101760 00000 n 
+0000097882 00000 n 
+0000096602 00000 n 
+0000101634 00000 n 
+0000192816 00000 n 
+0000222567 00000 n 
+0000228658 00000 n 
+0000233909 00000 n 
+0000260434 00000 n 
+0000303175 00000 n 
+0000331179 00000 n 
+0000334831 00000 n 
+0000339212 00000 n 
+0000371177 00000 n 
+0000373561 00000 n 
+0000454099 00000 n 
+0000459527 00000 n 
+0000465279 00000 n 
+0000469524 00000 n 
+0000470547 00000 n 
+0000471951 00000 n 
+0000473146 00000 n 
+0000474207 00000 n 
+0000475255 00000 n 
+0000476442 00000 n 
+0000476568 00000 n 
+0000103700 00000 n 
+0000103857 00000 n 
+0000104013 00000 n 
+0000104167 00000 n 
+0000104321 00000 n 
+0000104477 00000 n 
+0000104633 00000 n 
+0000104788 00000 n 
+0000104944 00000 n 
+0000105100 00000 n 
+0000105256 00000 n 
+0000105413 00000 n 
+0000105570 00000 n 
+0000105727 00000 n 
+0000105884 00000 n 
+0000106041 00000 n 
+0000106196 00000 n 
+0000106349 00000 n 
+0000106506 00000 n 
+0000106661 00000 n 
+0000106817 00000 n 
+0000106973 00000 n 
+0000107129 00000 n 
+0000107285 00000 n 
+0000107441 00000 n 
+0000107596 00000 n 
+0000107752 00000 n 
+0000107908 00000 n 
+0000109965 00000 n 
+0000108128 00000 n 
+0000103155 00000 n 
+0000101876 00000 n 
+0000108064 00000 n 
+0000477726 00000 n 
+0000478863 00000 n 
+0000542684 00000 n 
+0000548747 00000 n 
+0000554848 00000 n 
+0000560149 00000 n 
+0000560661 00000 n 
+0000561172 00000 n 
+0000580088 00000 n 
+0000581231 00000 n 
+0000582368 00000 n 
+0000583556 00000 n 
+0000584591 00000 n 
+0000585612 00000 n 
+0000586751 00000 n 
+0000587868 00000 n 
+0000589076 00000 n 
+0000590108 00000 n 
+0000591219 00000 n 
+0000683784 00000 n 
+0000820237 00000 n 
+0000821276 00000 n 
+0000822332 00000 n 
+0000823384 00000 n 
+0000827577 00000 n 
+0000832158 00000 n 
+0000837465 00000 n 
+0000843738 00000 n 
+0000848558 00000 n 
+0000110120 00000 n 
+0000110277 00000 n 
+0000110433 00000 n 
+0000110589 00000 n 
+0000110745 00000 n 
+0000110901 00000 n 
+0000111056 00000 n 
+0000111212 00000 n 
+0000111367 00000 n 
+0000111523 00000 n 
+0000111680 00000 n 
+0000111836 00000 n 
+0000111992 00000 n 
+0000112148 00000 n 
+0000112304 00000 n 
+0000112459 00000 n 
+0000112615 00000 n 
+0000112769 00000 n 
+0000112926 00000 n 
+0000113083 00000 n 
+0000113239 00000 n 
+0000115219 00000 n 
+0000113460 00000 n 
+0000109639 00000 n 
+0000108230 00000 n 
+0000113396 00000 n 
+0000853175 00000 n 
+0000855090 00000 n 
+0000928741 00000 n 
+0000930101 00000 n 
+0000935526 00000 n 
+0000940948 00000 n 
+0000945408 00000 n 
+0000951701 00000 n 
+0000957740 00000 n 
+0001301407 00000 n 
+0001305411 00000 n 
+0001305538 00000 n 
+0001306597 00000 n 
+0001310861 00000 n 
+0001317582 00000 n 
+0001324083 00000 n 
+0001330389 00000 n 
+0001331666 00000 n 
+0001335387 00000 n 
+0001336410 00000 n 
+0001337867 00000 n 
+0001337993 00000 n 
+0000115374 00000 n 
+0000115530 00000 n 
+0000115686 00000 n 
+0000115842 00000 n 
+0000115998 00000 n 
+0000116154 00000 n 
+0000116310 00000 n 
+0000116467 00000 n 
+0000116624 00000 n 
+0000116781 00000 n 
+0000116938 00000 n 
+0000117095 00000 n 
+0000117252 00000 n 
+0000117409 00000 n 
+0000117566 00000 n 
+0000117722 00000 n 
+0000117878 00000 n 
+0000118036 00000 n 
+0000118194 00000 n 
+0000118352 00000 n 
+0000118509 00000 n 
+0000118667 00000 n 
+0000118825 00000 n 
+0000118983 00000 n 
+0000119141 00000 n 
+0000119299 00000 n 
+0000119456 00000 n 
+0000119613 00000 n 
+0000121214 00000 n 
+0000119834 00000 n 
+0000114830 00000 n 
+0000113562 00000 n 
+0000119770 00000 n 
+0001497037 00000 n 
+0001503151 00000 n 
+0001506564 00000 n 
+0001507866 00000 n 
+0001508882 00000 n 
+0001509952 00000 n 
+0001511032 00000 n 
+0001525282 00000 n 
+0001560084 00000 n 
+0001561468 00000 n 
+0001566590 00000 n 
+0001572657 00000 n 
+0001578574 00000 n 
+0001584270 00000 n 
+0001588852 00000 n 
+0001591801 00000 n 
+0001592727 00000 n 
+0001594284 00000 n 
+0001595593 00000 n 
+0001597038 00000 n 
+0001598569 00000 n 
+0001599813 00000 n 
+0001601126 00000 n 
+0001602929 00000 n 
+0001604350 00000 n 
+0001605575 00000 n 
+0001695896 00000 n 
+0001706126 00000 n 
+0001707406 00000 n 
+0000121371 00000 n 
+0000121527 00000 n 
+0000121683 00000 n 
+0000121840 00000 n 
+0000121997 00000 n 
+0000122153 00000 n 
+0000122310 00000 n 
+0000122467 00000 n 
+0000122624 00000 n 
+0000122781 00000 n 
+0000122938 00000 n 
+0000123094 00000 n 
+0000123251 00000 n 
+0000123472 00000 n 
+0000120960 00000 n 
+0000119936 00000 n 
+0000123408 00000 n 
+0001712168 00000 n 
+0001712295 00000 n 
+0002502204 00000 n 
+0002503702 00000 n 
+0002504893 00000 n 
+0002505021 00000 n 
+0002506485 00000 n 
+0002507857 00000 n 
+0002509222 00000 n 
+0002510721 00000 n 
+0002511899 00000 n 
+0002513018 00000 n 
+0002514380 00000 n 
+0002514506 00000 n 
+0000123855 00000 n 
+0000123675 00000 n 
+0000123574 00000 n 
+0000123791 00000 n 
+0003351870 00000 n 
+0000125416 00000 n 
+0000125560 00000 n 
+0000125713 00000 n 
+0000125866 00000 n 
+0000126010 00000 n 
+0000126163 00000 n 
+0000126308 00000 n 
+0000126461 00000 n 
+0000126607 00000 n 
+0000126760 00000 n 
+0000126906 00000 n 
+0000127059 00000 n 
+0000127212 00000 n 
+0000127365 00000 n 
+0000127511 00000 n 
+0000127664 00000 n 
+0000127817 00000 n 
+0000127970 00000 n 
+0000128123 00000 n 
+0000128276 00000 n 
+0000130407 00000 n 
+0000128555 00000 n 
+0000125108 00000 n 
+0000123897 00000 n 
+0000128429 00000 n 
+0003121816 00000 n 
+0000213256 00000 n 
+0000252368 00000 n 
+0003121782 00000 n 
+0000297014 00000 n 
+0003121748 00000 n 
+0000362393 00000 n 
+0003121714 00000 n 
+0000511317 00000 n 
+0003121680 00000 n 
+0000626784 00000 n 
+0000674712 00000 n 
+0000788517 00000 n 
+0003121646 00000 n 
+0000889706 00000 n 
+0000897719 00000 n 
+0000897847 00000 n 
+0000906107 00000 n 
+0000906235 00000 n 
+0001058840 00000 n 
+0000130559 00000 n 
+0000130705 00000 n 
+0000130857 00000 n 
+0000131010 00000 n 
+0000131163 00000 n 
+0000131309 00000 n 
+0000131462 00000 n 
+0000131614 00000 n 
+0000131760 00000 n 
+0000131914 00000 n 
+0000132067 00000 n 
+0000132221 00000 n 
+0000132375 00000 n 
+0000132529 00000 n 
+0000132683 00000 n 
+0000132837 00000 n 
+0000132991 00000 n 
+0000133145 00000 n 
+0000133299 00000 n 
+0000133453 00000 n 
+0000133608 00000 n 
+0000133753 00000 n 
+0000133907 00000 n 
+0000134061 00000 n 
+0000134211 00000 n 
+0000134365 00000 n 
+0000134519 00000 n 
+0000134673 00000 n 
+0000134891 00000 n 
+0000130018 00000 n 
+0000128657 00000 n 
+0000134827 00000 n 
+0001159459 00000 n 
+0003121612 00000 n 
+0001185304 00000 n 
+0001211513 00000 n 
+0001239725 00000 n 
+0003121578 00000 n 
+0001408084 00000 n 
+0001440711 00000 n 
+0003121544 00000 n 
+0001796835 00000 n 
+0001829161 00000 n 
+0001856333 00000 n 
+0001856461 00000 n 
+0001878373 00000 n 
+0001985284 00000 n 
+0002061312 00000 n 
+0002154809 00000 n 
+0002241402 00000 n 
+0002318843 00000 n 
+0002399224 00000 n 
+0002491680 00000 n 
+0003121510 00000 n 
+0002560156 00000 n 
+0002586506 00000 n 
+0002620488 00000 n 
+0002639943 00000 n 
+0002656305 00000 n 
+0002678976 00000 n 
+0002696157 00000 n 
+0000136405 00000 n 
+0000136557 00000 n 
+0000136701 00000 n 
+0000136853 00000 n 
+0000136998 00000 n 
+0000137150 00000 n 
+0000137302 00000 n 
+0000137448 00000 n 
+0000137600 00000 n 
+0000137746 00000 n 
+0000137898 00000 n 
+0000138050 00000 n 
+0000138202 00000 n 
+0000138354 00000 n 
+0000138500 00000 n 
+0000138652 00000 n 
+0000138798 00000 n 
+0000138951 00000 n 
+0000139097 00000 n 
+0000139250 00000 n 
+0000139529 00000 n 
+0000136097 00000 n 
+0000134993 00000 n 
+0000139403 00000 n 
+0000175084 00000 n 
+0000252496 00000 n 
+0000350153 00000 n 
+0000402720 00000 n 
+0000517560 00000 n 
+0000629838 00000 n 
+0000678142 00000 n 
+0000717689 00000 n 
+0000788645 00000 n 
+0001449183 00000 n 
+0003121476 00000 n 
+0001726762 00000 n 
+0002589510 00000 n 
+0002595677 00000 n 
+0000139912 00000 n 
+0000139732 00000 n 
+0000139631 00000 n 
+0000139848 00000 n 
+0000142279 00000 n 
+0000141845 00000 n 
+0000139954 00000 n 
+0000141961 00000 n 
+0000142025 00000 n 
+0000142089 00000 n 
+0000142215 00000 n 
+0000144866 00000 n 
+0000144686 00000 n 
+0000142381 00000 n 
+0000144802 00000 n 
+0003351995 00000 n 
+0000145742 00000 n 
+0000145562 00000 n 
+0000144982 00000 n 
+0000145678 00000 n 
+0000148359 00000 n 
+0000148051 00000 n 
+0000145844 00000 n 
+0000148167 00000 n 
+0000148231 00000 n 
+0000148295 00000 n 
+0000150547 00000 n 
+0000151019 00000 n 
+0000150410 00000 n 
+0000148461 00000 n 
+0000150699 00000 n 
+0000150763 00000 n 
+0000150827 00000 n 
+0000150891 00000 n 
+0000150955 00000 n 
+0000175148 00000 n 
+0000153921 00000 n 
+0000153485 00000 n 
+0000151149 00000 n 
+0000153601 00000 n 
+0000153665 00000 n 
+0000153729 00000 n 
+0000153793 00000 n 
+0000153857 00000 n 
+0003351055 00000 n 
+0000156560 00000 n 
+0000156252 00000 n 
+0000154065 00000 n 
+0000156368 00000 n 
+0000156432 00000 n 
+0000156496 00000 n 
+0003350327 00000 n 
+0000159074 00000 n 
+0000158894 00000 n 
+0000156718 00000 n 
+0000159010 00000 n 
+0003348131 00000 n 
+0003352120 00000 n 
+0000161965 00000 n 
+0000161785 00000 n 
+0000159232 00000 n 
+0000161901 00000 n 
+0000164592 00000 n 
+0000164837 00000 n 
+0000164455 00000 n 
+0000162095 00000 n 
+0000164773 00000 n 
+0003349152 00000 n 
+0003349008 00000 n 
+0003348571 00000 n 
+0003351202 00000 n 
+0000167307 00000 n 
+0000167127 00000 n 
+0000165009 00000 n 
+0000167243 00000 n 
+0000169996 00000 n 
+0000169816 00000 n 
+0000167423 00000 n 
+0000169932 00000 n 
+0000172469 00000 n 
+0000172161 00000 n 
+0000170112 00000 n 
+0000172277 00000 n 
+0000172341 00000 n 
+0000172405 00000 n 
+0000175212 00000 n 
+0000174904 00000 n 
+0000172613 00000 n 
+0000175020 00000 n 
+0003352245 00000 n 
+0000175759 00000 n 
+0000175581 00000 n 
+0000175342 00000 n 
+0000176050 00000 n 
+0000175934 00000 n 
+0000175833 00000 n 
+0000177903 00000 n 
+0000178405 00000 n 
+0000177766 00000 n 
+0000176092 00000 n 
+0000178087 00000 n 
+0000178151 00000 n 
+0000178277 00000 n 
+0000178341 00000 n 
+0000178858 00000 n 
+0000178678 00000 n 
+0000178577 00000 n 
+0000178794 00000 n 
+0000181181 00000 n 
+0000180749 00000 n 
+0000178900 00000 n 
+0000180865 00000 n 
+0003349737 00000 n 
+0000180991 00000 n 
+0000181117 00000 n 
+0003349297 00000 n 
+0000186751 00000 n 
+0000183834 00000 n 
+0000183403 00000 n 
+0000181339 00000 n 
+0000183519 00000 n 
+0000183645 00000 n 
+0000183771 00000 n 
+0003352370 00000 n 
+0000187110 00000 n 
+0000186614 00000 n 
+0000183978 00000 n 
+0000186920 00000 n 
+0000187046 00000 n 
+0000189385 00000 n 
+0000189229 00000 n 
+0000190061 00000 n 
+0000189083 00000 n 
+0000187310 00000 n 
+0000189553 00000 n 
+0000189679 00000 n 
+0000189743 00000 n 
+0000189807 00000 n 
+0000189871 00000 n 
+0000189934 00000 n 
+0000189997 00000 n 
+0000192880 00000 n 
+0000193964 00000 n 
+0000192636 00000 n 
+0000190247 00000 n 
+0000192752 00000 n 
+0000192944 00000 n 
+0003351348 00000 n 
+0000193008 00000 n 
+0000193072 00000 n 
+0000193136 00000 n 
+0000193200 00000 n 
+0000193264 00000 n 
+0000193328 00000 n 
+0000193392 00000 n 
+0000193455 00000 n 
+0000193519 00000 n 
+0000193582 00000 n 
+0000193646 00000 n 
+0000193710 00000 n 
+0000193774 00000 n 
+0000193900 00000 n 
+0000196091 00000 n 
+0000195719 00000 n 
+0000194121 00000 n 
+0000195835 00000 n 
+0000195899 00000 n 
+0000195963 00000 n 
+0000196027 00000 n 
+0000199259 00000 n 
+0000198953 00000 n 
+0000196249 00000 n 
+0000199069 00000 n 
+0000199195 00000 n 
+0000202136 00000 n 
+0000202288 00000 n 
+0000202635 00000 n 
+0000201990 00000 n 
+0000199403 00000 n 
+0000202445 00000 n 
+0000202571 00000 n 
+0003352495 00000 n 
+0001762232 00000 n 
+0002319035 00000 n 
+0000205014 00000 n 
+0000206821 00000 n 
+0000205485 00000 n 
+0000204877 00000 n 
+0000202765 00000 n 
+0000205168 00000 n 
+0000205294 00000 n 
+0000205358 00000 n 
+0000205421 00000 n 
+0000213320 00000 n 
+0000213512 00000 n 
+0000206705 00000 n 
+0000205615 00000 n 
+0000213192 00000 n 
+0000213384 00000 n 
+0000213448 00000 n 
+0000210963 00000 n 
+0000211095 00000 n 
+0003346971 00000 n 
+0000211576 00000 n 
+0000211143 00000 n 
+0000211553 00000 n 
+0003346929 00000 n 
+0000215922 00000 n 
+0000215614 00000 n 
+0000213657 00000 n 
+0000215730 00000 n 
+0000215794 00000 n 
+0000215858 00000 n 
+0000217893 00000 n 
+0000218054 00000 n 
+0000218213 00000 n 
+0000218877 00000 n 
+0000217738 00000 n 
+0000216080 00000 n 
+0000218367 00000 n 
+0000218431 00000 n 
+0000218495 00000 n 
+0000218559 00000 n 
+0000218621 00000 n 
+0000218685 00000 n 
+0000218749 00000 n 
+0000218813 00000 n 
+0000222631 00000 n 
+0000228722 00000 n 
+0000222349 00000 n 
+0000224804 00000 n 
+0000222212 00000 n 
+0000218993 00000 n 
+0000222503 00000 n 
+0000222695 00000 n 
+0000222759 00000 n 
+0000222823 00000 n 
+0000222887 00000 n 
+0000222951 00000 n 
+0000223015 00000 n 
+0000223079 00000 n 
+0000223143 00000 n 
+0000223207 00000 n 
+0000223271 00000 n 
+0000223335 00000 n 
+0000223399 00000 n 
+0000223462 00000 n 
+0000223526 00000 n 
+0000223589 00000 n 
+0000223653 00000 n 
+0000223716 00000 n 
+0000223780 00000 n 
+0000223844 00000 n 
+0000223908 00000 n 
+0000223972 00000 n 
+0000224036 00000 n 
+0000224100 00000 n 
+0000224164 00000 n 
+0000224228 00000 n 
+0000224292 00000 n 
+0000224356 00000 n 
+0000224420 00000 n 
+0000224484 00000 n 
+0000224548 00000 n 
+0000224612 00000 n 
+0000224676 00000 n 
+0000224740 00000 n 
+0000231149 00000 n 
+0000228478 00000 n 
+0000224961 00000 n 
+0000228594 00000 n 
+0000228786 00000 n 
+0000228850 00000 n 
+0000228914 00000 n 
+0000228978 00000 n 
+0000229042 00000 n 
+0000229106 00000 n 
+0000229170 00000 n 
+0000229234 00000 n 
+0000229297 00000 n 
+0000229361 00000 n 
+0000229424 00000 n 
+0000229488 00000 n 
+0000229550 00000 n 
+0000229614 00000 n 
+0000229678 00000 n 
+0000229742 00000 n 
+0000229806 00000 n 
+0000229870 00000 n 
+0000229934 00000 n 
+0000229998 00000 n 
+0000230062 00000 n 
+0000230126 00000 n 
+0000230190 00000 n 
+0000230254 00000 n 
+0000230318 00000 n 
+0000230382 00000 n 
+0000230446 00000 n 
+0000230510 00000 n 
+0000230574 00000 n 
+0000230638 00000 n 
+0000230702 00000 n 
+0000230766 00000 n 
+0000230830 00000 n 
+0000230894 00000 n 
+0000230958 00000 n 
+0000231022 00000 n 
+0000231085 00000 n 
+0003352620 00000 n 
+0000233505 00000 n 
+0000234357 00000 n 
+0000233368 00000 n 
+0000231306 00000 n 
+0000233653 00000 n 
+0000233717 00000 n 
+0000233781 00000 n 
+0000233845 00000 n 
+0000233973 00000 n 
+0000234037 00000 n 
+0000234101 00000 n 
+0000234165 00000 n 
+0000234229 00000 n 
+0000234293 00000 n 
+0000240256 00000 n 
+0000237886 00000 n 
+0000236876 00000 n 
+0000234501 00000 n 
+0000236992 00000 n 
+0000237056 00000 n 
+0000237120 00000 n 
+0000237184 00000 n 
+0000237248 00000 n 
+0000237312 00000 n 
+0000237376 00000 n 
+0000237440 00000 n 
+0000237503 00000 n 
+0000237567 00000 n 
+0000237631 00000 n 
+0000237695 00000 n 
+0000237759 00000 n 
+0000237823 00000 n 
+0000240725 00000 n 
+0000240119 00000 n 
+0000238030 00000 n 
+0000240409 00000 n 
+0000240535 00000 n 
+0000240661 00000 n 
+0000243128 00000 n 
+0000243280 00000 n 
+0000246276 00000 n 
+0000244007 00000 n 
+0000242982 00000 n 
+0000240841 00000 n 
+0000243435 00000 n 
+0000243561 00000 n 
+0000243687 00000 n 
+0000243751 00000 n 
+0000243815 00000 n 
+0000243879 00000 n 
+0000243943 00000 n 
+0000252560 00000 n 
+0000252432 00000 n 
+0000252153 00000 n 
+0000254215 00000 n 
+0000252752 00000 n 
+0000246139 00000 n 
+0000244137 00000 n 
+0000252304 00000 n 
+0000252624 00000 n 
+0000252688 00000 n 
+0000249905 00000 n 
+0000250037 00000 n 
+0000250538 00000 n 
+0000250085 00000 n 
+0000250515 00000 n 
+0000260498 00000 n 
+0000254624 00000 n 
+0000254078 00000 n 
+0000252967 00000 n 
+0000254368 00000 n 
+0000254432 00000 n 
+0000254496 00000 n 
+0000254560 00000 n 
+0003352745 00000 n 
+0000257180 00000 n 
+0000256489 00000 n 
+0000254740 00000 n 
+0000256605 00000 n 
+0000256669 00000 n 
+0000256733 00000 n 
+0000256797 00000 n 
+0000256861 00000 n 
+0000256925 00000 n 
+0000256989 00000 n 
+0000257053 00000 n 
+0000257117 00000 n 
+0000262096 00000 n 
+0000260191 00000 n 
+0000257310 00000 n 
+0000260307 00000 n 
+0000260371 00000 n 
+0000260562 00000 n 
+0000260626 00000 n 
+0000260690 00000 n 
+0000260754 00000 n 
+0000260818 00000 n 
+0000260882 00000 n 
+0000260946 00000 n 
+0000261010 00000 n 
+0000261074 00000 n 
+0000261138 00000 n 
+0000261202 00000 n 
+0000261266 00000 n 
+0000261330 00000 n 
+0000261394 00000 n 
+0000261458 00000 n 
+0000261522 00000 n 
+0000261586 00000 n 
+0000261650 00000 n 
+0000261714 00000 n 
+0000261778 00000 n 
+0000261842 00000 n 
+0000261906 00000 n 
+0000261969 00000 n 
+0000262033 00000 n 
+0000264504 00000 n 
+0000264133 00000 n 
+0000262239 00000 n 
+0000264249 00000 n 
+0000264376 00000 n 
+0000264440 00000 n 
+0000267196 00000 n 
+0000267016 00000 n 
+0000264662 00000 n 
+0000267132 00000 n 
+0000269999 00000 n 
+0000269819 00000 n 
+0000267312 00000 n 
+0000269935 00000 n 
+0000271718 00000 n 
+0000271538 00000 n 
+0000270143 00000 n 
+0000271654 00000 n 
+0003352870 00000 n 
+0000273861 00000 n 
+0000274201 00000 n 
+0000273724 00000 n 
+0000271834 00000 n 
+0000274010 00000 n 
+0000274137 00000 n 
+0000277074 00000 n 
+0000276640 00000 n 
+0000274317 00000 n 
+0000276756 00000 n 
+0000276883 00000 n 
+0000277010 00000 n 
+0000279260 00000 n 
+0000283265 00000 n 
+0000279736 00000 n 
+0000279123 00000 n 
+0000277190 00000 n 
+0000279419 00000 n 
+0000279546 00000 n 
+0000279673 00000 n 
+0000282173 00000 n 
+0000283479 00000 n 
+0000282036 00000 n 
+0000279880 00000 n 
+0000283415 00000 n 
+0003347983 00000 n 
+0003349590 00000 n 
+0000282556 00000 n 
+0000282688 00000 n 
+0000282736 00000 n 
+0000283244 00000 n 
+0000331243 00000 n 
+0000286088 00000 n 
+0000286240 00000 n 
+0000286862 00000 n 
+0000285933 00000 n 
+0000283652 00000 n 
+0000286545 00000 n 
+0000286672 00000 n 
+0000286799 00000 n 
+0000286392 00000 n 
+0001396056 00000 n 
+0000288452 00000 n 
+0000297270 00000 n 
+0000288336 00000 n 
+0000287006 00000 n 
+0000296950 00000 n 
+0000297078 00000 n 
+0000297142 00000 n 
+0000297206 00000 n 
+0003352995 00000 n 
+0000294711 00000 n 
+0000294843 00000 n 
+0000295334 00000 n 
+0000294891 00000 n 
+0000295311 00000 n 
+0000299268 00000 n 
+0000299419 00000 n 
+0000300019 00000 n 
+0000299122 00000 n 
+0000297415 00000 n 
+0000299572 00000 n 
+0000299636 00000 n 
+0000299700 00000 n 
+0000299764 00000 n 
+0000299827 00000 n 
+0000299891 00000 n 
+0000299955 00000 n 
+0000334895 00000 n 
+0000339276 00000 n 
+0000301413 00000 n 
+0000301693 00000 n 
+0000301276 00000 n 
+0000300135 00000 n 
+0000301565 00000 n 
+0000301629 00000 n 
+0000303239 00000 n 
+0000303367 00000 n 
+0000302995 00000 n 
+0000301809 00000 n 
+0000303111 00000 n 
+0000303303 00000 n 
+0000305578 00000 n 
+0000306178 00000 n 
+0000305441 00000 n 
+0000303483 00000 n 
+0000305730 00000 n 
+0000305794 00000 n 
+0000305858 00000 n 
+0000305922 00000 n 
+0000305986 00000 n 
+0000306050 00000 n 
+0000306114 00000 n 
+0000307879 00000 n 
+0000308540 00000 n 
+0000307742 00000 n 
+0000306294 00000 n 
+0000308029 00000 n 
 0000308093 00000 n 
-0000306421 00000 n 
-0000308543 00000 n 
-0000308607 00000 n 
-0000308671 00000 n 
-0000308735 00000 n 
-0000308799 00000 n 
-0000308863 00000 n 
-0000343845 00000 n 
-0000348226 00000 n 
-0000310356 00000 n 
-0000310636 00000 n 
-0000310219 00000 n 
-0000309043 00000 n 
-0000310508 00000 n 
-0000310572 00000 n 
-0000312241 00000 n 
-0000312369 00000 n 
-0000311997 00000 n 
-0000310752 00000 n 
-0000312113 00000 n 
-0000312305 00000 n 
-0000314528 00000 n 
-0000315128 00000 n 
-0000314391 00000 n 
-0000312485 00000 n 
-0000314680 00000 n 
-0000314744 00000 n 
-0000314808 00000 n 
-0000314872 00000 n 
-0000314936 00000 n 
-0000315000 00000 n 
-0000315064 00000 n 
-0000316829 00000 n 
-0000317490 00000 n 
-0000316692 00000 n 
-0000315244 00000 n 
-0000316979 00000 n 
-0000317043 00000 n 
-0000317107 00000 n 
-0000317171 00000 n 
-0000317235 00000 n 
-0000317362 00000 n 
-0000317426 00000 n 
-0000318870 00000 n 
-0000318690 00000 n 
-0000317620 00000 n 
-0000318806 00000 n 
-0003376805 00000 n 
-0000320564 00000 n 
-0000320258 00000 n 
-0000318986 00000 n 
-0000320374 00000 n 
-0000320438 00000 n 
-0000320501 00000 n 
-0000322724 00000 n 
-0000322416 00000 n 
-0000320694 00000 n 
-0000322532 00000 n 
-0000322596 00000 n 
-0000322660 00000 n 
-0000325243 00000 n 
-0000325394 00000 n 
-0000325697 00000 n 
-0000326423 00000 n 
-0000325079 00000 n 
-0000322840 00000 n 
-0000325848 00000 n 
-0000325912 00000 n 
-0000325976 00000 n 
-0000325545 00000 n 
-0000326040 00000 n 
-0000326104 00000 n 
-0000326168 00000 n 
-0000326232 00000 n 
-0000326296 00000 n 
-0000326360 00000 n 
-0001796613 00000 n 
-0000329380 00000 n 
-0000328755 00000 n 
-0000326567 00000 n 
-0000328871 00000 n 
-0000328935 00000 n 
-0000328999 00000 n 
-0000329063 00000 n 
-0000329189 00000 n 
-0000329316 00000 n 
-0000331887 00000 n 
-0000331516 00000 n 
-0000329524 00000 n 
-0000331632 00000 n 
-0000331759 00000 n 
-0000331823 00000 n 
-0000334505 00000 n 
-0000334325 00000 n 
-0000332045 00000 n 
-0000334441 00000 n 
-0003376930 00000 n 
-0000337411 00000 n 
-0000336975 00000 n 
-0000334663 00000 n 
-0000337091 00000 n 
-0000337155 00000 n 
-0000337219 00000 n 
-0000337283 00000 n 
-0000337347 00000 n 
-0003371519 00000 n 
-0000338823 00000 n 
-0000338643 00000 n 
-0000337583 00000 n 
-0000338759 00000 n 
-0000340257 00000 n 
-0000339949 00000 n 
-0000338967 00000 n 
-0000340065 00000 n 
-0000345380 00000 n 
-0000343601 00000 n 
-0000340373 00000 n 
-0000343717 00000 n 
-0000343909 00000 n 
-0000343973 00000 n 
-0000344037 00000 n 
-0000344101 00000 n 
-0000344165 00000 n 
-0003371964 00000 n 
-0000344229 00000 n 
-0000344293 00000 n 
-0000344357 00000 n 
-0000344421 00000 n 
-0000344485 00000 n 
-0000344549 00000 n 
-0000344613 00000 n 
-0000344677 00000 n 
-0000344741 00000 n 
-0000344805 00000 n 
-0000344869 00000 n 
-0000344933 00000 n 
-0000344997 00000 n 
-0000345060 00000 n 
-0000345124 00000 n 
-0000345188 00000 n 
-0000345252 00000 n 
-0000345316 00000 n 
-0000350078 00000 n 
-0000347982 00000 n 
-0000345537 00000 n 
-0000348098 00000 n 
-0000348290 00000 n 
-0000348354 00000 n 
-0000348418 00000 n 
-0000348482 00000 n 
-0000348546 00000 n 
-0000348610 00000 n 
-0000348674 00000 n 
-0000348738 00000 n 
-0000348802 00000 n 
-0000348866 00000 n 
-0000348930 00000 n 
-0000348994 00000 n 
-0000349058 00000 n 
-0000349122 00000 n 
-0000349186 00000 n 
-0000349250 00000 n 
-0000349314 00000 n 
-0000349378 00000 n 
-0000349442 00000 n 
-0000349506 00000 n 
-0000349570 00000 n 
-0000349634 00000 n 
-0000349697 00000 n 
-0000349761 00000 n 
-0000349824 00000 n 
-0000349888 00000 n 
-0000349950 00000 n 
-0000350014 00000 n 
-0000350474 00000 n 
-0000350294 00000 n 
-0000350193 00000 n 
-0000350410 00000 n 
-0003377055 00000 n 
-0000352438 00000 n 
-0000352736 00000 n 
-0000353203 00000 n 
-0000352283 00000 n 
-0000350516 00000 n 
-0000352885 00000 n 
-0000353012 00000 n 
-0000352587 00000 n 
-0000353139 00000 n 
-0000356098 00000 n 
-0000355791 00000 n 
-0000353319 00000 n 
-0000355907 00000 n 
-0000356034 00000 n 
-0000358885 00000 n 
-0000360806 00000 n 
-0000359229 00000 n 
-0000358748 00000 n 
-0000356214 00000 n 
-0000359039 00000 n 
-0000359167 00000 n 
-0000374718 00000 n 
+0000308157 00000 n 
+0000308221 00000 n 
+0000308285 00000 n 
+0000308412 00000 n 
+0000308476 00000 n 
+0000309920 00000 n 
+0000309740 00000 n 
+0000308670 00000 n 
+0000309856 00000 n 
+0003353120 00000 n 
+0000311614 00000 n 
+0000311308 00000 n 
+0000310036 00000 n 
+0000311424 00000 n 
+0000311488 00000 n 
+0000311551 00000 n 
+0000313774 00000 n 
+0000313466 00000 n 
+0000311744 00000 n 
+0000313582 00000 n 
+0000313646 00000 n 
+0000313710 00000 n 
+0000316293 00000 n 
+0000316444 00000 n 
+0000316747 00000 n 
+0000317473 00000 n 
+0000316129 00000 n 
+0000313890 00000 n 
+0000316898 00000 n 
+0000316962 00000 n 
+0000317026 00000 n 
+0000316595 00000 n 
+0000317090 00000 n 
+0000317154 00000 n 
+0000317218 00000 n 
+0000317282 00000 n 
+0000317346 00000 n 
+0000317410 00000 n 
+0001762359 00000 n 
+0000320430 00000 n 
+0000319805 00000 n 
+0000317617 00000 n 
+0000319921 00000 n 
+0000319985 00000 n 
+0000320049 00000 n 
+0000320113 00000 n 
+0000320239 00000 n 
+0000320366 00000 n 
+0000322937 00000 n 
+0000322566 00000 n 
+0000320574 00000 n 
+0000322682 00000 n 
+0000322809 00000 n 
+0000322873 00000 n 
+0000325555 00000 n 
+0000325375 00000 n 
+0000323095 00000 n 
+0000325491 00000 n 
+0003353245 00000 n 
+0000328461 00000 n 
+0000328025 00000 n 
+0000325713 00000 n 
+0000328141 00000 n 
+0000328205 00000 n 
+0000328269 00000 n 
+0000328333 00000 n 
+0000328397 00000 n 
+0003347834 00000 n 
+0000329873 00000 n 
+0000329693 00000 n 
+0000328633 00000 n 
+0000329809 00000 n 
+0000331307 00000 n 
+0000330999 00000 n 
+0000330017 00000 n 
+0000331115 00000 n 
+0000336430 00000 n 
+0000334651 00000 n 
+0000331423 00000 n 
+0000334767 00000 n 
+0000334959 00000 n 
+0000335023 00000 n 
+0000335087 00000 n 
+0000335151 00000 n 
+0000335215 00000 n 
+0003348279 00000 n 
+0000335279 00000 n 
+0000335343 00000 n 
+0000335407 00000 n 
+0000335471 00000 n 
+0000335535 00000 n 
+0000335599 00000 n 
+0000335663 00000 n 
+0000335727 00000 n 
+0000335791 00000 n 
+0000335855 00000 n 
+0000335919 00000 n 
+0000335983 00000 n 
+0000336047 00000 n 
+0000336110 00000 n 
+0000336174 00000 n 
+0000336238 00000 n 
+0000336302 00000 n 
+0000336366 00000 n 
+0000341128 00000 n 
+0000339032 00000 n 
+0000336587 00000 n 
+0000339148 00000 n 
+0000339340 00000 n 
+0000339404 00000 n 
+0000339468 00000 n 
+0000339532 00000 n 
+0000339596 00000 n 
+0000339660 00000 n 
+0000339724 00000 n 
+0000339788 00000 n 
+0000339852 00000 n 
+0000339916 00000 n 
+0000339980 00000 n 
+0000340044 00000 n 
+0000340108 00000 n 
+0000340172 00000 n 
+0000340236 00000 n 
+0000340300 00000 n 
+0000340364 00000 n 
+0000340428 00000 n 
+0000340492 00000 n 
+0000340556 00000 n 
+0000340620 00000 n 
+0000340684 00000 n 
+0000340747 00000 n 
+0000340811 00000 n 
+0000340874 00000 n 
+0000340938 00000 n 
+0000341000 00000 n 
+0000341064 00000 n 
+0000341524 00000 n 
+0000341344 00000 n 
+0000341243 00000 n 
+0000341460 00000 n 
+0003353370 00000 n 
+0000343488 00000 n 
+0000343786 00000 n 
+0000344253 00000 n 
+0000343333 00000 n 
+0000341566 00000 n 
+0000343935 00000 n 
+0000344062 00000 n 
+0000343637 00000 n 
+0000344189 00000 n 
+0000347148 00000 n 
+0000346841 00000 n 
+0000344369 00000 n 
+0000346957 00000 n 
+0000347084 00000 n 
+0000349935 00000 n 
+0000351854 00000 n 
+0000350279 00000 n 
+0000349798 00000 n 
+0000347264 00000 n 
+0000350089 00000 n 
+0000350217 00000 n 
+0000362774 00000 n 
+0000351738 00000 n 
+0000350395 00000 n 
+0000362329 00000 n 
+0000362457 00000 n 
+0000362584 00000 n 
+0000362711 00000 n 
+0000360088 00000 n 
+0000360220 00000 n 
+0000360713 00000 n 
+0000360268 00000 n 
 0000360690 00000 n 
-0000359345 00000 n 
-0000374272 00000 n 
-0000374400 00000 n 
-0000374527 00000 n 
-0000374654 00000 n 
-0000369024 00000 n 
-0000369142 00000 n 
-0000369190 00000 n 
-0000369631 00000 n 
-0000369654 00000 n 
-0000370043 00000 n 
-0000374249 00000 n 
-0000377717 00000 n 
-0000377537 00000 n 
-0000374863 00000 n 
-0000377653 00000 n 
-0000380125 00000 n 
-0000380423 00000 n 
-0000382777 00000 n 
-0000380637 00000 n 
-0000379970 00000 n 
-0000377833 00000 n 
-0000380573 00000 n 
-0000380274 00000 n 
-0003377180 00000 n 
-0000383249 00000 n 
-0000382640 00000 n 
-0000380753 00000 n 
-0000382930 00000 n 
-0000383057 00000 n 
-0000383185 00000 n 
-0000385287 00000 n 
-0000385633 00000 n 
-0000385150 00000 n 
-0000383379 00000 n 
-0000385441 00000 n 
-0000385569 00000 n 
-0000388029 00000 n 
-0000388497 00000 n 
-0000387892 00000 n 
-0000385749 00000 n 
-0000388179 00000 n 
-0000388306 00000 n 
-0000388433 00000 n 
-0000391433 00000 n 
-0000391697 00000 n 
-0000391296 00000 n 
-0000388655 00000 n 
-0000391633 00000 n 
-0003374595 00000 n 
-0000393629 00000 n 
-0000394546 00000 n 
-0000393492 00000 n 
-0000391939 00000 n 
-0000393780 00000 n 
-0000393844 00000 n 
-0000393908 00000 n 
-0000393971 00000 n 
-0000394035 00000 n 
-0000394099 00000 n 
-0000394163 00000 n 
-0000394227 00000 n 
-0000394291 00000 n 
-0000394418 00000 n 
-0000394482 00000 n 
-0000396490 00000 n 
-0000396182 00000 n 
-0000394690 00000 n 
-0000396298 00000 n 
-0000396362 00000 n 
-0000396426 00000 n 
-0003377305 00000 n 
-0000398465 00000 n 
-0000398809 00000 n 
-0000398328 00000 n 
-0000396606 00000 n 
-0000398617 00000 n 
-0000398681 00000 n 
-0000398745 00000 n 
-0000466107 00000 n 
-0000400940 00000 n 
-0000401093 00000 n 
-0000401250 00000 n 
-0000401790 00000 n 
-0000400785 00000 n 
-0000398967 00000 n 
-0000401407 00000 n 
-0000401534 00000 n 
-0000401598 00000 n 
-0000401662 00000 n 
-0000401726 00000 n 
-0000471535 00000 n 
-0000477287 00000 n 
-0000481532 00000 n 
-0000403423 00000 n 
-0000403572 00000 n 
-0000404067 00000 n 
-0000403268 00000 n 
-0000401920 00000 n 
-0000403876 00000 n 
-0000403940 00000 n 
-0000404004 00000 n 
-0000403724 00000 n 
-0000405954 00000 n 
-0000405710 00000 n 
-0000404183 00000 n 
-0000405826 00000 n 
-0000405890 00000 n 
-0000408395 00000 n 
-0000407959 00000 n 
-0000406070 00000 n 
-0000408075 00000 n 
-0000408139 00000 n 
-0000408203 00000 n 
-0000408267 00000 n 
-0000408331 00000 n 
-0000409928 00000 n 
-0000409684 00000 n 
-0000408525 00000 n 
-0000409800 00000 n 
-0000409864 00000 n 
-0003377430 00000 n 
-0000412285 00000 n 
-0000412437 00000 n 
-0000412592 00000 n 
-0000412750 00000 n 
-0000412908 00000 n 
-0000413221 00000 n 
-0000413372 00000 n 
-0000413523 00000 n 
-0000413675 00000 n 
-0000413827 00000 n 
-0000413978 00000 n 
-0000414129 00000 n 
-0000414855 00000 n 
-0000412040 00000 n 
-0000410044 00000 n 
-0000414281 00000 n 
-0000414408 00000 n 
-0000414472 00000 n 
-0000414536 00000 n 
-0000414600 00000 n 
-0000413064 00000 n 
-0000414728 00000 n 
-0000414791 00000 n 
-0000483959 00000 n 
-0000485154 00000 n 
-0000486215 00000 n 
-0000487263 00000 n 
-0002539208 00000 n 
-0002539336 00000 n 
-0002540800 00000 n 
-0000489734 00000 n 
-0000490871 00000 n 
-0000488449 00000 n 
-0000488576 00000 n 
-0000417611 00000 n 
-0000417048 00000 n 
-0000414985 00000 n 
-0000417164 00000 n 
-0000417228 00000 n 
-0000417355 00000 n 
-0000417419 00000 n 
-0000417483 00000 n 
-0000417547 00000 n 
-0000419454 00000 n 
-0000418956 00000 n 
-0000417741 00000 n 
-0000419072 00000 n 
-0000419136 00000 n 
-0000419200 00000 n 
-0000419263 00000 n 
-0000419326 00000 n 
-0000419390 00000 n 
-0000421807 00000 n 
-0000421375 00000 n 
-0000419570 00000 n 
-0000421491 00000 n 
-0000421617 00000 n 
-0000421681 00000 n 
-0000421745 00000 n 
-0000424233 00000 n 
-0000423862 00000 n 
-0000421951 00000 n 
-0000423978 00000 n 
-0000424105 00000 n 
-0000424169 00000 n 
-0000425973 00000 n 
-0000425665 00000 n 
-0000424363 00000 n 
-0000425781 00000 n 
-0000425845 00000 n 
-0000425909 00000 n 
-0003377555 00000 n 
-0000428026 00000 n 
-0000428368 00000 n 
-0000427889 00000 n 
-0000426089 00000 n 
-0000428177 00000 n 
-0000428241 00000 n 
-0000428305 00000 n 
-0000430091 00000 n 
-0000429847 00000 n 
-0000428512 00000 n 
-0000429963 00000 n 
-0000430027 00000 n 
-0000431321 00000 n 
-0000431141 00000 n 
-0000430207 00000 n 
-0000431257 00000 n 
-0000433107 00000 n 
-0000432799 00000 n 
-0000431423 00000 n 
-0000432915 00000 n 
-0000432979 00000 n 
-0000433043 00000 n 
-0003371373 00000 n 
-0000435328 00000 n 
-0000435020 00000 n 
-0000433293 00000 n 
-0000435136 00000 n 
-0000435200 00000 n 
-0000435264 00000 n 
-0000437018 00000 n 
-0000437324 00000 n 
-0000436881 00000 n 
-0000435444 00000 n 
-0000437196 00000 n 
-0000437260 00000 n 
-0003377680 00000 n 
-0000438778 00000 n 
-0000438598 00000 n 
-0000437496 00000 n 
-0000438714 00000 n 
-0000440953 00000 n 
-0000440646 00000 n 
-0000438894 00000 n 
-0000440762 00000 n 
-0000440889 00000 n 
-0000443628 00000 n 
-0000443322 00000 n 
-0000441097 00000 n 
-0000443438 00000 n 
-0000443564 00000 n 
-0000449208 00000 n 
-0000449512 00000 n 
-0000446527 00000 n 
-0000446093 00000 n 
-0000443744 00000 n 
-0000446209 00000 n 
-0000446336 00000 n 
-0000446399 00000 n 
-0000446463 00000 n 
-0000452933 00000 n 
-0000453085 00000 n 
-0000450238 00000 n 
-0000449053 00000 n 
-0000446657 00000 n 
-0000449663 00000 n 
-0000449360 00000 n 
-0000449727 00000 n 
-0000449790 00000 n 
-0000449854 00000 n 
-0000449918 00000 n 
-0000449982 00000 n 
-0000450046 00000 n 
-0000450110 00000 n 
-0000450174 00000 n 
-0000453939 00000 n 
-0000452787 00000 n 
-0000450368 00000 n 
-0000453236 00000 n 
-0000453300 00000 n 
-0000453364 00000 n 
-0000453428 00000 n 
-0000453492 00000 n 
-0000453556 00000 n 
-0000453620 00000 n 
-0000453684 00000 n 
-0000453748 00000 n 
-0000453875 00000 n 
-0003377805 00000 n 
-0000456701 00000 n 
-0000456330 00000 n 
-0000454083 00000 n 
-0000456446 00000 n 
-0000456573 00000 n 
-0000456637 00000 n 
-0000459413 00000 n 
-0000459233 00000 n 
-0000456873 00000 n 
-0000459349 00000 n 
-0003373127 00000 n 
-0000461906 00000 n 
-0000461726 00000 n 
-0000459599 00000 n 
-0000461842 00000 n 
-0000464584 00000 n 
-0000464404 00000 n 
-0000462022 00000 n 
-0000464520 00000 n 
-0000466171 00000 n 
-0000465863 00000 n 
-0000464784 00000 n 
-0000465979 00000 n 
-0000474349 00000 n 
-0000471291 00000 n 
-0000466287 00000 n 
-0000471407 00000 n 
-0000471599 00000 n 
-0000471663 00000 n 
-0000471727 00000 n 
-0000471791 00000 n 
-0000471855 00000 n 
-0000471919 00000 n 
-0000471983 00000 n 
-0000472047 00000 n 
-0000472111 00000 n 
-0000472175 00000 n 
-0000472239 00000 n 
-0000472303 00000 n 
-0000472367 00000 n 
-0000472431 00000 n 
-0000472495 00000 n 
-0000472559 00000 n 
-0000472623 00000 n 
-0000472687 00000 n 
-0000472751 00000 n 
-0000472815 00000 n 
-0000472879 00000 n 
-0000472943 00000 n 
-0000473007 00000 n 
-0000473071 00000 n 
-0000473134 00000 n 
-0000473198 00000 n 
-0000473261 00000 n 
-0000473325 00000 n 
-0000473389 00000 n 
-0000473453 00000 n 
-0000473517 00000 n 
-0000473581 00000 n 
-0000473645 00000 n 
-0000473709 00000 n 
-0000473773 00000 n 
-0000473837 00000 n 
-0000473901 00000 n 
-0000473965 00000 n 
-0000474029 00000 n 
-0000474093 00000 n 
-0000474157 00000 n 
-0000474221 00000 n 
-0000474285 00000 n 
-0003377930 00000 n 
-0000479139 00000 n 
-0000477043 00000 n 
-0000474506 00000 n 
-0000477159 00000 n 
-0000477351 00000 n 
-0000477415 00000 n 
-0000477479 00000 n 
-0000477543 00000 n 
-0000477607 00000 n 
-0000477671 00000 n 
-0000477735 00000 n 
-0000477799 00000 n 
-0000477863 00000 n 
-0000477927 00000 n 
-0000477991 00000 n 
-0000478055 00000 n 
-0000478119 00000 n 
-0000478183 00000 n 
-0000478247 00000 n 
-0000478310 00000 n 
-0000478374 00000 n 
-0000478437 00000 n 
-0000478501 00000 n 
-0000478563 00000 n 
-0000478627 00000 n 
-0000478691 00000 n 
-0000478755 00000 n 
-0000478819 00000 n 
-0000478883 00000 n 
-0000478947 00000 n 
-0000479011 00000 n 
-0000479075 00000 n 
-0000482619 00000 n 
-0000481288 00000 n 
-0000479268 00000 n 
-0000481404 00000 n 
-0000481596 00000 n 
-0000481660 00000 n 
-0000481724 00000 n 
-0000481788 00000 n 
-0000481852 00000 n 
-0000481916 00000 n 
-0000481980 00000 n 
-0000482044 00000 n 
-0000482108 00000 n 
-0000482172 00000 n 
-0000482236 00000 n 
-0000482300 00000 n 
-0000482364 00000 n 
-0000482427 00000 n 
-0000482555 00000 n 
-0000484023 00000 n 
-0000483715 00000 n 
-0000482762 00000 n 
-0000483831 00000 n 
-0000485218 00000 n 
-0000484910 00000 n 
-0000484139 00000 n 
-0000485026 00000 n 
-0000486279 00000 n 
-0000485971 00000 n 
-0000485334 00000 n 
-0000486087 00000 n 
-0000487327 00000 n 
-0000487019 00000 n 
-0000486395 00000 n 
-0000487135 00000 n 
-0003378055 00000 n 
-0000488640 00000 n 
-0000488206 00000 n 
-0000487443 00000 n 
-0000488322 00000 n 
-0000489798 00000 n 
-0000489490 00000 n 
-0000488756 00000 n 
-0000489606 00000 n 
-0000490935 00000 n 
-0000490627 00000 n 
-0000489914 00000 n 
-0000490743 00000 n 
-0000491332 00000 n 
-0000491152 00000 n 
-0000491051 00000 n 
-0000491268 00000 n 
-0000493214 00000 n 
-0000493513 00000 n 
-0000493810 00000 n 
-0000494147 00000 n 
-0000493041 00000 n 
-0000491374 00000 n 
-0000493957 00000 n 
-0000494084 00000 n 
-0000493364 00000 n 
-0000493662 00000 n 
-0000608337 00000 n 
-0000496937 00000 n 
-0000496630 00000 n 
-0000494291 00000 n 
-0000496746 00000 n 
-0000496873 00000 n 
-0003378180 00000 n 
-0000499681 00000 n 
-0000499374 00000 n 
-0000497053 00000 n 
-0000499490 00000 n 
-0000499617 00000 n 
-0000502129 00000 n 
-0000502743 00000 n 
-0000501983 00000 n 
-0000499797 00000 n 
-0000502425 00000 n 
-0000502552 00000 n 
-0000502278 00000 n 
-0000502679 00000 n 
-0000505472 00000 n 
-0000505292 00000 n 
-0000502887 00000 n 
-0000505408 00000 n 
-0000507715 00000 n 
-0000508013 00000 n 
-0000510429 00000 n 
-0000508166 00000 n 
-0000529916 00000 n 
-0000530074 00000 n 
-0000530231 00000 n 
-0000530388 00000 n 
-0000530545 00000 n 
-0000530702 00000 n 
-0000530859 00000 n 
-0000531015 00000 n 
-0000531168 00000 n 
-0000531321 00000 n 
-0000531478 00000 n 
-0000531635 00000 n 
-0000531793 00000 n 
-0000531948 00000 n 
-0000532102 00000 n 
-0000532257 00000 n 
-0000532413 00000 n 
-0000532565 00000 n 
-0000532717 00000 n 
-0000508327 00000 n 
-0000509113 00000 n 
-0000507542 00000 n 
-0000505602 00000 n 
-0000508480 00000 n 
-0000508607 00000 n 
-0000507864 00000 n 
-0000508732 00000 n 
-0000508859 00000 n 
-0000508986 00000 n 
-0000509050 00000 n 
-0000526752 00000 n 
-0000532995 00000 n 
-0000526944 00000 n 
-0000510313 00000 n 
-0000509257 00000 n 
-0000526624 00000 n 
-0000526816 00000 n 
-0000526880 00000 n 
-0000520969 00000 n 
-0000521087 00000 n 
-0000521135 00000 n 
-0000521590 00000 n 
-0000521614 00000 n 
-0000522017 00000 n 
-0000526601 00000 n 
-0000533123 00000 n 
-0000529617 00000 n 
-0000527089 00000 n 
-0000532867 00000 n 
-0000533059 00000 n 
-0003378305 00000 n 
-0000558119 00000 n 
-0000564182 00000 n 
-0000570283 00000 n 
-0000575584 00000 n 
-0000576096 00000 n 
-0000576607 00000 n 
-0000595523 00000 n 
-0000596666 00000 n 
-0000597802 00000 n 
-0000598991 00000 n 
-0000600026 00000 n 
-0000601047 00000 n 
-0000602186 00000 n 
-0000603303 00000 n 
-0000604511 00000 n 
-0000605543 00000 n 
-0000537182 00000 n 
-0000537332 00000 n 
-0000537484 00000 n 
-0000535018 00000 n 
-0000534646 00000 n 
-0000533239 00000 n 
-0000534762 00000 n 
-0000534826 00000 n 
-0000534890 00000 n 
-0000534954 00000 n 
-0000538020 00000 n 
-0000537027 00000 n 
-0000535134 00000 n 
-0000537636 00000 n 
-0000537700 00000 n 
-0000537764 00000 n 
-0000537828 00000 n 
-0000537892 00000 n 
-0000537956 00000 n 
-0000540099 00000 n 
-0000540635 00000 n 
-0000539962 00000 n 
-0000538164 00000 n 
-0000540253 00000 n 
-0000540317 00000 n 
-0000540381 00000 n 
-0000540445 00000 n 
-0000540571 00000 n 
-0000543232 00000 n 
-0000542797 00000 n 
-0000540822 00000 n 
-0000542913 00000 n 
-0000543040 00000 n 
-0000543104 00000 n 
-0000543168 00000 n 
-0000545718 00000 n 
-0000546321 00000 n 
-0000545581 00000 n 
-0000543362 00000 n 
-0000545873 00000 n 
-0000545937 00000 n 
-0000546001 00000 n 
-0000546065 00000 n 
-0000546129 00000 n 
-0000546193 00000 n 
-0000546257 00000 n 
-0000606654 00000 n 
-0000548103 00000 n 
-0000547859 00000 n 
-0000546437 00000 n 
-0000547975 00000 n 
-0000548039 00000 n 
-0003378430 00000 n 
-0000549830 00000 n 
-0000549986 00000 n 
-0000552413 00000 n 
-0000552712 00000 n 
-0000550463 00000 n 
-0000549684 00000 n 
-0000548219 00000 n 
-0000550144 00000 n 
-0000550208 00000 n 
-0000550272 00000 n 
-0000550335 00000 n 
-0000550399 00000 n 
-0000560163 00000 n 
-0000553457 00000 n 
-0000552864 00000 n 
-0000553020 00000 n 
-0000553178 00000 n 
-0000553841 00000 n 
-0000552231 00000 n 
-0000550593 00000 n 
-0000553330 00000 n 
-0000552563 00000 n 
-0000553521 00000 n 
-0000553585 00000 n 
-0000553649 00000 n 
-0000553713 00000 n 
-0000553777 00000 n 
-0000560227 00000 n 
-0000557875 00000 n 
-0000553971 00000 n 
-0000557991 00000 n 
-0000558183 00000 n 
-0000558247 00000 n 
-0000558311 00000 n 
-0000558375 00000 n 
-0000558439 00000 n 
-0000558503 00000 n 
-0000558567 00000 n 
-0000558631 00000 n 
-0000558695 00000 n 
-0000558759 00000 n 
-0000558823 00000 n 
-0000558887 00000 n 
-0000558951 00000 n 
-0000559015 00000 n 
-0000559079 00000 n 
-0000559143 00000 n 
-0000559207 00000 n 
-0000559271 00000 n 
-0000559335 00000 n 
-0000559399 00000 n 
-0000559463 00000 n 
-0000559527 00000 n 
-0000559591 00000 n 
-0000559654 00000 n 
-0000559718 00000 n 
-0000559781 00000 n 
-0000559845 00000 n 
-0000559908 00000 n 
-0000559972 00000 n 
-0000560036 00000 n 
-0000565970 00000 n 
-0000563938 00000 n 
-0000560412 00000 n 
-0000564054 00000 n 
-0000564246 00000 n 
-0000564310 00000 n 
-0000564374 00000 n 
-0000564438 00000 n 
-0000564502 00000 n 
-0000564566 00000 n 
-0000564630 00000 n 
-0000564694 00000 n 
-0000564758 00000 n 
-0000564822 00000 n 
-0000564886 00000 n 
-0000564950 00000 n 
-0000565014 00000 n 
-0000565078 00000 n 
-0000565140 00000 n 
-0000565204 00000 n 
-0000565267 00000 n 
-0000565331 00000 n 
-0000565394 00000 n 
-0000565458 00000 n 
-0000565522 00000 n 
-0000565586 00000 n 
-0000565650 00000 n 
-0000565714 00000 n 
-0000565778 00000 n 
-0000565842 00000 n 
-0000565906 00000 n 
-0000572583 00000 n 
-0000570039 00000 n 
-0000566141 00000 n 
-0000570155 00000 n 
-0000570347 00000 n 
-0000570411 00000 n 
-0000570475 00000 n 
-0000570539 00000 n 
-0000570603 00000 n 
-0000570667 00000 n 
-0000570731 00000 n 
-0000570795 00000 n 
-0000570859 00000 n 
-0000570923 00000 n 
-0000570987 00000 n 
-0000571051 00000 n 
-0000571115 00000 n 
-0000571179 00000 n 
-0000571241 00000 n 
-0000571305 00000 n 
-0000571368 00000 n 
-0000571432 00000 n 
-0000571495 00000 n 
-0000571559 00000 n 
-0000571623 00000 n 
-0000571687 00000 n 
-0000571751 00000 n 
-0000571815 00000 n 
-0000571879 00000 n 
-0000571943 00000 n 
-0000572007 00000 n 
-0000572071 00000 n 
-0000572135 00000 n 
-0000572199 00000 n 
-0000572263 00000 n 
-0000572327 00000 n 
-0000572391 00000 n 
-0000572455 00000 n 
-0000572519 00000 n 
-0000577372 00000 n 
-0000575340 00000 n 
-0000572740 00000 n 
-0000575456 00000 n 
-0000575648 00000 n 
-0000575712 00000 n 
-0000575776 00000 n 
-0000575840 00000 n 
-0000575904 00000 n 
-0000575968 00000 n 
-0000576159 00000 n 
-0000576223 00000 n 
-0000576287 00000 n 
-0000576351 00000 n 
-0000576415 00000 n 
-0000576479 00000 n 
-0000576671 00000 n 
-0000576735 00000 n 
-0000576799 00000 n 
-0000576863 00000 n 
-0000576927 00000 n 
-0000576991 00000 n 
-0000577055 00000 n 
-0000577117 00000 n 
-0000577181 00000 n 
-0000577244 00000 n 
-0000577308 00000 n 
-0003378555 00000 n 
-0000579759 00000 n 
-0000580063 00000 n 
-0000580725 00000 n 
-0000579604 00000 n 
-0000577543 00000 n 
-0000580214 00000 n 
-0000580341 00000 n 
-0000580405 00000 n 
-0000580469 00000 n 
-0000579911 00000 n 
-0000580533 00000 n 
-0000580597 00000 n 
-0000580661 00000 n 
-0000584281 00000 n 
-0000583526 00000 n 
-0000580855 00000 n 
-0000583642 00000 n 
-0000583706 00000 n 
-0000583770 00000 n 
-0000583834 00000 n 
-0000583898 00000 n 
-0000583962 00000 n 
-0000584025 00000 n 
-0000584089 00000 n 
-0000584153 00000 n 
-0000584217 00000 n 
-0000586605 00000 n 
-0000586757 00000 n 
-0000586908 00000 n 
-0000587504 00000 n 
-0000586450 00000 n 
-0000584425 00000 n 
-0000587057 00000 n 
-0000587121 00000 n 
-0000587185 00000 n 
-0000587249 00000 n 
-0000587313 00000 n 
-0000587440 00000 n 
-0000589986 00000 n 
-0000589615 00000 n 
-0000587648 00000 n 
-0000589731 00000 n 
-0000589858 00000 n 
-0000589922 00000 n 
-0000592594 00000 n 
-0000592414 00000 n 
-0000590158 00000 n 
-0000592530 00000 n 
-0000594361 00000 n 
-0000594181 00000 n 
-0000592738 00000 n 
-0000594297 00000 n 
-0003378680 00000 n 
-0000595587 00000 n 
-0000595279 00000 n 
-0000594505 00000 n 
-0000595395 00000 n 
-0000596730 00000 n 
-0000596422 00000 n 
-0000595703 00000 n 
-0000596538 00000 n 
-0000597865 00000 n 
-0000597559 00000 n 
-0000596846 00000 n 
-0000597675 00000 n 
-0000599055 00000 n 
-0000598747 00000 n 
-0000597981 00000 n 
-0000598863 00000 n 
-0000600090 00000 n 
-0000599782 00000 n 
-0000599171 00000 n 
-0000599898 00000 n 
-0000601111 00000 n 
-0000600803 00000 n 
-0000600206 00000 n 
-0000600919 00000 n 
-0003378805 00000 n 
-0000602250 00000 n 
-0000601942 00000 n 
-0000601227 00000 n 
-0000602058 00000 n 
-0000603367 00000 n 
-0000603059 00000 n 
-0000602366 00000 n 
-0000603175 00000 n 
-0000604575 00000 n 
-0000604267 00000 n 
-0000603483 00000 n 
-0000604383 00000 n 
-0000605607 00000 n 
-0000605299 00000 n 
-0000604691 00000 n 
-0000605415 00000 n 
-0000606718 00000 n 
-0000606410 00000 n 
-0000605723 00000 n 
-0000606526 00000 n 
-0000607115 00000 n 
-0000606935 00000 n 
-0000606834 00000 n 
-0000607051 00000 n 
-0003378930 00000 n 
-0000608056 00000 n 
-0000610918 00000 n 
-0000608401 00000 n 
-0000607919 00000 n 
-0000607157 00000 n 
-0000608210 00000 n 
-0000612018 00000 n 
-0000610802 00000 n 
-0000608517 00000 n 
-0000611954 00000 n 
-0003373864 00000 n 
-0000611302 00000 n 
-0000611420 00000 n 
-0000611468 00000 n 
-0000611933 00000 n 
-0000614493 00000 n 
-0000614313 00000 n 
-0000612191 00000 n 
-0000614429 00000 n 
-0000616630 00000 n 
-0000616450 00000 n 
-0000614595 00000 n 
-0000616566 00000 n 
-0000619498 00000 n 
-0000619065 00000 n 
-0000616746 00000 n 
-0000619181 00000 n 
-0000619308 00000 n 
-0000619434 00000 n 
-0000622072 00000 n 
-0000621892 00000 n 
-0000619614 00000 n 
-0000622008 00000 n 
-0003379055 00000 n 
-0000624487 00000 n 
-0000628018 00000 n 
-0000625124 00000 n 
-0000624350 00000 n 
-0000622174 00000 n 
-0000624678 00000 n 
-0000624805 00000 n 
-0000624869 00000 n 
-0000624933 00000 n 
-0000625060 00000 n 
-0000628230 00000 n 
-0000631279 00000 n 
-0000628745 00000 n 
-0000627863 00000 n 
-0000625324 00000 n 
-0000628681 00000 n 
-0000628455 00000 n 
-0000631488 00000 n 
-0000631663 00000 n 
-0000631833 00000 n 
-0000632019 00000 n 
-0000632186 00000 n 
-0000632367 00000 n 
-0000632539 00000 n 
-0000632788 00000 n 
-0000631079 00000 n 
-0000628931 00000 n 
-0000632724 00000 n 
-0000635477 00000 n 
-0000635652 00000 n 
-0000636039 00000 n 
-0000635331 00000 n 
-0000632946 00000 n 
-0000635848 00000 n 
-0000635975 00000 n 
-0000644144 00000 n 
-0000643986 00000 n 
-0000638223 00000 n 
-0000644537 00000 n 
-0000638077 00000 n 
-0000636282 00000 n 
-0000644345 00000 n 
-0000644473 00000 n 
-0000639492 00000 n 
-0000639610 00000 n 
-0000639658 00000 n 
-0000640085 00000 n 
-0000640107 00000 n 
-0000640479 00000 n 
-0000643963 00000 n 
-0000647591 00000 n 
-0000647156 00000 n 
-0000644752 00000 n 
-0000647272 00000 n 
-0000647399 00000 n 
-0000647527 00000 n 
-0003379180 00000 n 
-0000650712 00000 n 
-0000650405 00000 n 
-0000647721 00000 n 
-0000650521 00000 n 
-0000650648 00000 n 
-0000653362 00000 n 
-0000653513 00000 n 
-0000654158 00000 n 
-0000653216 00000 n 
-0000650842 00000 n 
-0000653713 00000 n 
-0000653840 00000 n 
-0000653967 00000 n 
-0000654094 00000 n 
-0000789226 00000 n 
-0000657137 00000 n 
-0000657498 00000 n 
-0000657000 00000 n 
-0000654372 00000 n 
-0000657307 00000 n 
-0000657434 00000 n 
-0000661786 00000 n 
-0000659869 00000 n 
-0000659434 00000 n 
-0000657670 00000 n 
-0000659550 00000 n 
-0000659677 00000 n 
-0000659741 00000 n 
-0000659805 00000 n 
-0000662668 00000 n 
-0000661670 00000 n 
-0000659999 00000 n 
-0000662478 00000 n 
-0000662542 00000 n 
-0000662605 00000 n 
-0000662290 00000 n 
-0000662408 00000 n 
-0000662456 00000 n 
-0000666108 00000 n 
-0000664257 00000 n 
-0000663949 00000 n 
-0000662855 00000 n 
-0000664065 00000 n 
-0000664129 00000 n 
-0000664193 00000 n 
-0003379305 00000 n 
-0000666457 00000 n 
-0000665971 00000 n 
-0000664373 00000 n 
-0000666265 00000 n 
-0000666329 00000 n 
-0000666393 00000 n 
-0000704891 00000 n 
-0000668605 00000 n 
-0000668425 00000 n 
-0000666587 00000 n 
-0000668541 00000 n 
-0003372111 00000 n 
-0000670437 00000 n 
-0000670257 00000 n 
-0000668749 00000 n 
-0000670373 00000 n 
-0000672199 00000 n 
-0000671891 00000 n 
-0000670567 00000 n 
-0000672007 00000 n 
-0000672071 00000 n 
-0000672135 00000 n 
-0000674096 00000 n 
-0000674851 00000 n 
-0000673950 00000 n 
-0000672329 00000 n 
-0000674406 00000 n 
-0000674470 00000 n 
-0000674534 00000 n 
-0000674661 00000 n 
-0000674788 00000 n 
-0000674251 00000 n 
-0000677579 00000 n 
-0000676056 00000 n 
-0000674995 00000 n 
-0000676172 00000 n 
-0000676236 00000 n 
-0000676300 00000 n 
-0000676364 00000 n 
-0000676428 00000 n 
-0000676492 00000 n 
-0000676556 00000 n 
-0000676620 00000 n 
-0000676683 00000 n 
-0000676747 00000 n 
-0000676811 00000 n 
-0000676875 00000 n 
-0000676939 00000 n 
-0000677003 00000 n 
-0000677067 00000 n 
-0000677131 00000 n 
-0000677195 00000 n 
-0000677259 00000 n 
-0000677323 00000 n 
-0000677387 00000 n 
-0000677451 00000 n 
-0000677515 00000 n 
-0003379430 00000 n 
-0000695285 00000 n 
-0000678852 00000 n 
-0000695883 00000 n 
-0000678715 00000 n 
-0000677695 00000 n 
-0000695436 00000 n 
-0000695500 00000 n 
-0000695564 00000 n 
-0000695691 00000 n 
-0000695819 00000 n 
-0000689597 00000 n 
-0000689715 00000 n 
-0000689763 00000 n 
-0000690210 00000 n 
-0000690234 00000 n 
-0000690641 00000 n 
-0000690737 00000 n 
-0000695262 00000 n 
-0000698374 00000 n 
-0000698529 00000 n 
-0000698689 00000 n 
-0000698842 00000 n 
-0000699313 00000 n 
-0000698210 00000 n 
-0000696029 00000 n 
-0000698994 00000 n 
-0000699121 00000 n 
-0000699249 00000 n 
-0000701543 00000 n 
-0000701702 00000 n 
-0000702177 00000 n 
-0000701397 00000 n 
-0000699500 00000 n 
-0000701859 00000 n 
-0000701923 00000 n 
-0000701987 00000 n 
-0000702050 00000 n 
-0000702114 00000 n 
-0000841344 00000 n 
-0000704607 00000 n 
-0000707589 00000 n 
-0000705210 00000 n 
-0000704470 00000 n 
-0000702293 00000 n 
-0000704763 00000 n 
-0000705018 00000 n 
-0000705082 00000 n 
-0000705146 00000 n 
-0000843439 00000 n 
-0000708093 00000 n 
-0000707443 00000 n 
-0000705354 00000 n 
-0000707901 00000 n 
-0000707745 00000 n 
-0000707965 00000 n 
-0000708029 00000 n 
-0000844491 00000 n 
-0000709634 00000 n 
-0000709454 00000 n 
-0000708266 00000 n 
-0000709570 00000 n 
-0003379555 00000 n 
-0000711709 00000 n 
-0000711876 00000 n 
-0000712043 00000 n 
-0000712204 00000 n 
-0000712682 00000 n 
-0000711545 00000 n 
-0000709750 00000 n 
-0000712364 00000 n 
-0000712491 00000 n 
-0000712555 00000 n 
-0000712618 00000 n 
-0000848684 00000 n 
-0000853265 00000 n 
-0000869665 00000 n 
-0000874280 00000 n 
-0000714406 00000 n 
-0000714034 00000 n 
-0000712812 00000 n 
-0000714150 00000 n 
-0000714214 00000 n 
-0000714278 00000 n 
-0000714342 00000 n 
-0000716628 00000 n 
-0000716320 00000 n 
-0000714522 00000 n 
-0000716436 00000 n 
-0000716500 00000 n 
-0000716564 00000 n 
-0000718719 00000 n 
-0000718903 00000 n 
-0000719102 00000 n 
-0000719496 00000 n 
-0000718564 00000 n 
-0000716744 00000 n 
-0000719307 00000 n 
-0000719434 00000 n 
-0000721821 00000 n 
-0000721323 00000 n 
-0000719682 00000 n 
-0000721439 00000 n 
-0000721566 00000 n 
-0000721629 00000 n 
-0000721693 00000 n 
-0000721757 00000 n 
-0000723489 00000 n 
-0000724027 00000 n 
-0000723352 00000 n 
-0000722008 00000 n 
-0000723645 00000 n 
-0000723709 00000 n 
-0000723773 00000 n 
-0000723900 00000 n 
-0000723964 00000 n 
-0003379680 00000 n 
-0000727613 00000 n 
-0000725395 00000 n 
-0000725870 00000 n 
-0000725258 00000 n 
-0000724157 00000 n 
-0000725551 00000 n 
-0000725615 00000 n 
-0000725679 00000 n 
-0000725743 00000 n 
-0000725807 00000 n 
-0000727805 00000 n 
-0000727370 00000 n 
-0000725986 00000 n 
-0000727486 00000 n 
-0000727677 00000 n 
-0000727741 00000 n 
-0000729436 00000 n 
-0000729256 00000 n 
-0000727935 00000 n 
-0000729372 00000 n 
-0000731086 00000 n 
-0000730843 00000 n 
-0000729538 00000 n 
-0000730959 00000 n 
-0000731023 00000 n 
-0000733590 00000 n 
-0000733742 00000 n 
-0000736482 00000 n 
-0000734087 00000 n 
-0000733444 00000 n 
-0000731202 00000 n 
-0000733896 00000 n 
-0000734023 00000 n 
-0001925388 00000 n 
-0000736702 00000 n 
-0000736345 00000 n 
-0000734231 00000 n 
-0000736638 00000 n 
-0003379805 00000 n 
-0000738796 00000 n 
-0000739052 00000 n 
-0000738552 00000 n 
-0000736875 00000 n 
-0000738668 00000 n 
-0000738860 00000 n 
-0000738924 00000 n 
-0000738988 00000 n 
-0000740681 00000 n 
-0000740309 00000 n 
-0000739168 00000 n 
-0000740425 00000 n 
-0000740489 00000 n 
-0000740553 00000 n 
-0000740617 00000 n 
-0000742211 00000 n 
-0000742496 00000 n 
-0000742074 00000 n 
-0000740797 00000 n 
-0000742368 00000 n 
-0000742432 00000 n 
-0000876197 00000 n 
-0000743870 00000 n 
-0000743626 00000 n 
-0000742612 00000 n 
-0000743742 00000 n 
-0000743806 00000 n 
-0000745494 00000 n 
-0000745838 00000 n 
-0000745357 00000 n 
-0000743986 00000 n 
-0000745646 00000 n 
-0000745710 00000 n 
-0000745774 00000 n 
-0000747396 00000 n 
-0000747088 00000 n 
-0000745954 00000 n 
-0000747204 00000 n 
-0000747268 00000 n 
-0000747332 00000 n 
-0003379930 00000 n 
-0000749400 00000 n 
-0000749028 00000 n 
-0000747512 00000 n 
-0000749144 00000 n 
-0000749208 00000 n 
-0000749272 00000 n 
-0000749336 00000 n 
-0000751060 00000 n 
-0000750752 00000 n 
-0000749516 00000 n 
-0000750868 00000 n 
-0000750932 00000 n 
-0000750996 00000 n 
-0000752823 00000 n 
-0000752515 00000 n 
-0000751176 00000 n 
-0000752631 00000 n 
-0000752695 00000 n 
-0000752759 00000 n 
-0000754858 00000 n 
-0000754486 00000 n 
-0000752939 00000 n 
-0000754602 00000 n 
-0000754666 00000 n 
-0000754730 00000 n 
-0000754794 00000 n 
-0000756329 00000 n 
-0000756021 00000 n 
-0000754974 00000 n 
-0000756137 00000 n 
-0000756201 00000 n 
-0000756265 00000 n 
-0000758373 00000 n 
-0000758670 00000 n 
-0000758820 00000 n 
-0000759416 00000 n 
-0000758209 00000 n 
-0000756445 00000 n 
-0000758969 00000 n 
-0000759096 00000 n 
-0000759160 00000 n 
-0000759224 00000 n 
-0000758523 00000 n 
-0000759288 00000 n 
-0000759352 00000 n 
-0003380055 00000 n 
-0000761677 00000 n 
-0000761113 00000 n 
-0000759546 00000 n 
-0000761229 00000 n 
-0000761293 00000 n 
-0000761357 00000 n 
-0000761421 00000 n 
-0000761485 00000 n 
-0000761549 00000 n 
-0000761613 00000 n 
-0000763359 00000 n 
-0000763523 00000 n 
-0000763684 00000 n 
-0000764005 00000 n 
-0000764163 00000 n 
-0000764768 00000 n 
-0000763177 00000 n 
-0000761807 00000 n 
-0000764321 00000 n 
-0000764448 00000 n 
-0000764512 00000 n 
-0000763845 00000 n 
-0000764576 00000 n 
-0000764640 00000 n 
-0000764704 00000 n 
-0000858572 00000 n 
-0000766179 00000 n 
-0000765935 00000 n 
-0000764898 00000 n 
-0000766051 00000 n 
-0000766115 00000 n 
-0000768307 00000 n 
-0000767935 00000 n 
-0000766295 00000 n 
-0000768051 00000 n 
-0000768115 00000 n 
-0000768179 00000 n 
-0000768243 00000 n 
-0000769925 00000 n 
-0000769617 00000 n 
-0000768423 00000 n 
-0000769733 00000 n 
-0000769797 00000 n 
-0000769861 00000 n 
-0000771808 00000 n 
-0000771500 00000 n 
-0000770041 00000 n 
-0000771616 00000 n 
-0000771680 00000 n 
-0000771744 00000 n 
-0003380180 00000 n 
-0000774020 00000 n 
-0000774184 00000 n 
-0000774345 00000 n 
-0000774667 00000 n 
-0000775267 00000 n 
-0000773847 00000 n 
-0000771924 00000 n 
-0000774822 00000 n 
-0000774886 00000 n 
-0000774506 00000 n 
-0000774950 00000 n 
-0000775076 00000 n 
-0000775203 00000 n 
-0000864845 00000 n 
-0000776946 00000 n 
-0000776639 00000 n 
-0000775411 00000 n 
-0000776755 00000 n 
-0000776882 00000 n 
-0000779085 00000 n 
-0000779477 00000 n 
-0000778948 00000 n 
-0000777076 00000 n 
-0000779286 00000 n 
-0000779413 00000 n 
-0000782107 00000 n 
-0000782468 00000 n 
-0000781970 00000 n 
-0000779677 00000 n 
-0000782277 00000 n 
-0000782404 00000 n 
-0000784371 00000 n 
-0000783935 00000 n 
-0000782668 00000 n 
-0000784051 00000 n 
-0000784115 00000 n 
-0000784179 00000 n 
-0000784243 00000 n 
-0000784307 00000 n 
-0000785945 00000 n 
-0000786346 00000 n 
-0000785808 00000 n 
-0000784487 00000 n 
-0000786155 00000 n 
-0000786282 00000 n 
-0003380305 00000 n 
-0000788792 00000 n 
-0000788947 00000 n 
-0000789673 00000 n 
-0000788646 00000 n 
-0000786532 00000 n 
-0000789099 00000 n 
-0000789290 00000 n 
-0000789354 00000 n 
-0000789418 00000 n 
-0000789482 00000 n 
-0000789545 00000 n 
-0000789609 00000 n 
-0000809624 00000 n 
-0000809752 00000 n 
-0000792607 00000 n 
-0000795025 00000 n 
-0000793277 00000 n 
-0000792470 00000 n 
-0000789817 00000 n 
-0000792767 00000 n 
-0000792831 00000 n 
-0000792895 00000 n 
-0000792959 00000 n 
-0000793023 00000 n 
-0000793086 00000 n 
-0000793213 00000 n 
-0000809944 00000 n 
-0000794909 00000 n 
-0000793477 00000 n 
-0000809496 00000 n 
-0000809816 00000 n 
-0000809880 00000 n 
-0000812572 00000 n 
-0000811944 00000 n 
-0000810112 00000 n 
-0000812060 00000 n 
+0000365773 00000 n 
+0000365593 00000 n 
+0000362919 00000 n 
+0000365709 00000 n 
+0000368181 00000 n 
+0000368479 00000 n 
+0000370833 00000 n 
+0000368693 00000 n 
+0000368026 00000 n 
+0000365889 00000 n 
+0000368629 00000 n 
+0000368330 00000 n 
+0003353495 00000 n 
+0000371305 00000 n 
+0000370696 00000 n 
+0000368809 00000 n 
+0000370986 00000 n 
+0000371113 00000 n 
+0000371241 00000 n 
+0000373343 00000 n 
+0000373689 00000 n 
+0000373206 00000 n 
+0000371435 00000 n 
+0000373497 00000 n 
+0000373625 00000 n 
+0000376085 00000 n 
+0000376553 00000 n 
+0000375948 00000 n 
+0000373805 00000 n 
+0000376235 00000 n 
+0000376362 00000 n 
+0000376489 00000 n 
+0000379489 00000 n 
+0000379753 00000 n 
+0000379352 00000 n 
+0000376711 00000 n 
+0000379689 00000 n 
+0003350910 00000 n 
+0000381685 00000 n 
+0000382602 00000 n 
+0000381548 00000 n 
+0000379995 00000 n 
+0000381836 00000 n 
+0000381900 00000 n 
+0000381964 00000 n 
+0000382027 00000 n 
+0000382091 00000 n 
+0000382155 00000 n 
+0000382219 00000 n 
+0000382283 00000 n 
+0000382347 00000 n 
+0000382474 00000 n 
+0000382538 00000 n 
+0000384546 00000 n 
+0000384238 00000 n 
+0000382746 00000 n 
+0000384354 00000 n 
+0000384418 00000 n 
+0000384482 00000 n 
+0003353620 00000 n 
+0000386521 00000 n 
+0000386865 00000 n 
+0000386384 00000 n 
+0000384662 00000 n 
+0000386673 00000 n 
+0000386737 00000 n 
+0000386801 00000 n 
+0000454163 00000 n 
+0000388996 00000 n 
+0000389149 00000 n 
+0000389306 00000 n 
+0000389846 00000 n 
+0000388841 00000 n 
+0000387023 00000 n 
+0000389463 00000 n 
+0000389590 00000 n 
+0000389654 00000 n 
+0000389718 00000 n 
+0000389782 00000 n 
+0000459591 00000 n 
+0000465343 00000 n 
+0000469588 00000 n 
+0000391479 00000 n 
+0000391628 00000 n 
+0000392123 00000 n 
+0000391324 00000 n 
+0000389976 00000 n 
+0000391932 00000 n 
+0000391996 00000 n 
+0000392060 00000 n 
+0000391780 00000 n 
+0000394010 00000 n 
+0000393766 00000 n 
+0000392239 00000 n 
+0000393882 00000 n 
+0000393946 00000 n 
+0000396451 00000 n 
+0000396015 00000 n 
+0000394126 00000 n 
+0000396131 00000 n 
+0000396195 00000 n 
+0000396259 00000 n 
+0000396323 00000 n 
+0000396387 00000 n 
+0000397984 00000 n 
+0000397740 00000 n 
+0000396581 00000 n 
+0000397856 00000 n 
+0000397920 00000 n 
+0003353745 00000 n 
+0000400341 00000 n 
+0000400493 00000 n 
+0000400648 00000 n 
+0000400806 00000 n 
+0000400964 00000 n 
+0000401277 00000 n 
+0000401428 00000 n 
+0000401579 00000 n 
+0000401731 00000 n 
+0000401883 00000 n 
+0000402034 00000 n 
+0000402185 00000 n 
+0000402911 00000 n 
+0000400096 00000 n 
+0000398100 00000 n 
+0000402337 00000 n 
+0000402464 00000 n 
+0000402528 00000 n 
+0000402592 00000 n 
+0000402656 00000 n 
+0000401120 00000 n 
+0000402784 00000 n 
+0000402847 00000 n 
+0000472015 00000 n 
+0000473210 00000 n 
+0000474271 00000 n 
+0000475319 00000 n 
+0002504957 00000 n 
+0002505085 00000 n 
+0002506549 00000 n 
+0000477790 00000 n 
+0000478927 00000 n 
+0000476505 00000 n 
+0000476632 00000 n 
+0000405667 00000 n 
+0000405104 00000 n 
+0000403041 00000 n 
+0000405220 00000 n 
+0000405284 00000 n 
+0000405411 00000 n 
+0000405475 00000 n 
+0000405539 00000 n 
+0000405603 00000 n 
+0000407510 00000 n 
+0000407012 00000 n 
+0000405797 00000 n 
+0000407128 00000 n 
+0000407192 00000 n 
+0000407256 00000 n 
+0000407319 00000 n 
+0000407382 00000 n 
+0000407446 00000 n 
+0000409863 00000 n 
+0000409431 00000 n 
+0000407626 00000 n 
+0000409547 00000 n 
+0000409673 00000 n 
+0000409737 00000 n 
+0000409801 00000 n 
+0000412289 00000 n 
+0000411918 00000 n 
+0000410007 00000 n 
+0000412034 00000 n 
+0000412161 00000 n 
+0000412225 00000 n 
+0000414029 00000 n 
+0000413721 00000 n 
+0000412419 00000 n 
+0000413837 00000 n 
+0000413901 00000 n 
+0000413965 00000 n 
+0003353870 00000 n 
+0000416082 00000 n 
+0000416424 00000 n 
+0000415945 00000 n 
+0000414145 00000 n 
+0000416233 00000 n 
+0000416297 00000 n 
+0000416361 00000 n 
+0000418147 00000 n 
+0000417903 00000 n 
+0000416568 00000 n 
+0000418019 00000 n 
+0000418083 00000 n 
+0000419377 00000 n 
+0000419197 00000 n 
+0000418263 00000 n 
+0000419313 00000 n 
+0000421163 00000 n 
+0000420855 00000 n 
+0000419479 00000 n 
+0000420971 00000 n 
+0000421035 00000 n 
+0000421099 00000 n 
+0003347688 00000 n 
+0000423384 00000 n 
+0000423076 00000 n 
+0000421349 00000 n 
+0000423192 00000 n 
+0000423256 00000 n 
+0000423320 00000 n 
+0000425074 00000 n 
+0000425380 00000 n 
+0000424937 00000 n 
+0000423500 00000 n 
+0000425252 00000 n 
+0000425316 00000 n 
+0003353995 00000 n 
+0000426834 00000 n 
+0000426654 00000 n 
+0000425552 00000 n 
+0000426770 00000 n 
+0000429009 00000 n 
+0000428702 00000 n 
+0000426950 00000 n 
+0000428818 00000 n 
+0000428945 00000 n 
+0000431684 00000 n 
+0000431378 00000 n 
+0000429153 00000 n 
+0000431494 00000 n 
+0000431620 00000 n 
+0000437264 00000 n 
+0000437568 00000 n 
+0000434583 00000 n 
+0000434149 00000 n 
+0000431800 00000 n 
+0000434265 00000 n 
+0000434392 00000 n 
+0000434455 00000 n 
+0000434519 00000 n 
+0000440989 00000 n 
+0000441141 00000 n 
+0000438294 00000 n 
+0000437109 00000 n 
+0000434713 00000 n 
+0000437719 00000 n 
+0000437416 00000 n 
+0000437783 00000 n 
+0000437846 00000 n 
+0000437910 00000 n 
+0000437974 00000 n 
+0000438038 00000 n 
+0000438102 00000 n 
+0000438166 00000 n 
+0000438230 00000 n 
+0000441995 00000 n 
+0000440843 00000 n 
+0000438424 00000 n 
+0000441292 00000 n 
+0000441356 00000 n 
+0000441420 00000 n 
+0000441484 00000 n 
+0000441548 00000 n 
+0000441612 00000 n 
+0000441676 00000 n 
+0000441740 00000 n 
+0000441804 00000 n 
+0000441931 00000 n 
+0003354120 00000 n 
+0000444757 00000 n 
+0000444386 00000 n 
+0000442139 00000 n 
+0000444502 00000 n 
+0000444629 00000 n 
+0000444693 00000 n 
+0000447469 00000 n 
+0000447289 00000 n 
+0000444929 00000 n 
+0000447405 00000 n 
+0003349442 00000 n 
+0000449962 00000 n 
+0000449782 00000 n 
+0000447655 00000 n 
+0000449898 00000 n 
+0000452640 00000 n 
+0000452460 00000 n 
+0000450078 00000 n 
+0000452576 00000 n 
+0000454227 00000 n 
+0000453919 00000 n 
+0000452840 00000 n 
+0000454035 00000 n 
+0000462405 00000 n 
+0000459347 00000 n 
+0000454343 00000 n 
+0000459463 00000 n 
+0000459655 00000 n 
+0000459719 00000 n 
+0000459783 00000 n 
+0000459847 00000 n 
+0000459911 00000 n 
+0000459975 00000 n 
+0000460039 00000 n 
+0000460103 00000 n 
+0000460167 00000 n 
+0000460231 00000 n 
+0000460295 00000 n 
+0000460359 00000 n 
+0000460423 00000 n 
+0000460487 00000 n 
+0000460551 00000 n 
+0000460615 00000 n 
+0000460679 00000 n 
+0000460743 00000 n 
+0000460807 00000 n 
+0000460871 00000 n 
+0000460935 00000 n 
+0000460999 00000 n 
+0000461063 00000 n 
+0000461127 00000 n 
+0000461190 00000 n 
+0000461254 00000 n 
+0000461317 00000 n 
+0000461381 00000 n 
+0000461445 00000 n 
+0000461509 00000 n 
+0000461573 00000 n 
+0000461637 00000 n 
+0000461701 00000 n 
+0000461765 00000 n 
+0000461829 00000 n 
+0000461893 00000 n 
+0000461957 00000 n 
+0000462021 00000 n 
+0000462085 00000 n 
+0000462149 00000 n 
+0000462213 00000 n 
+0000462277 00000 n 
+0000462341 00000 n 
+0003354245 00000 n 
+0000467195 00000 n 
+0000465099 00000 n 
+0000462562 00000 n 
+0000465215 00000 n 
+0000465407 00000 n 
+0000465471 00000 n 
+0000465535 00000 n 
+0000465599 00000 n 
+0000465663 00000 n 
+0000465727 00000 n 
+0000465791 00000 n 
+0000465855 00000 n 
+0000465919 00000 n 
+0000465983 00000 n 
+0000466047 00000 n 
+0000466111 00000 n 
+0000466175 00000 n 
+0000466239 00000 n 
+0000466303 00000 n 
+0000466366 00000 n 
+0000466430 00000 n 
+0000466493 00000 n 
+0000466557 00000 n 
+0000466619 00000 n 
+0000466683 00000 n 
+0000466747 00000 n 
+0000466811 00000 n 
+0000466875 00000 n 
+0000466939 00000 n 
+0000467003 00000 n 
+0000467067 00000 n 
+0000467131 00000 n 
+0000470675 00000 n 
+0000469344 00000 n 
+0000467324 00000 n 
+0000469460 00000 n 
+0000469652 00000 n 
+0000469716 00000 n 
+0000469780 00000 n 
+0000469844 00000 n 
+0000469908 00000 n 
+0000469972 00000 n 
+0000470036 00000 n 
+0000470100 00000 n 
+0000470164 00000 n 
+0000470228 00000 n 
+0000470292 00000 n 
+0000470356 00000 n 
+0000470420 00000 n 
+0000470483 00000 n 
+0000470611 00000 n 
+0000472079 00000 n 
+0000471771 00000 n 
+0000470818 00000 n 
+0000471887 00000 n 
+0000473274 00000 n 
+0000472966 00000 n 
+0000472195 00000 n 
+0000473082 00000 n 
+0000474335 00000 n 
+0000474027 00000 n 
+0000473390 00000 n 
+0000474143 00000 n 
+0000475383 00000 n 
+0000475075 00000 n 
+0000474451 00000 n 
+0000475191 00000 n 
+0003354370 00000 n 
+0000476696 00000 n 
+0000476262 00000 n 
+0000475499 00000 n 
+0000476378 00000 n 
+0000477854 00000 n 
+0000477546 00000 n 
+0000476812 00000 n 
+0000477662 00000 n 
+0000478991 00000 n 
+0000478683 00000 n 
+0000477970 00000 n 
+0000478799 00000 n 
+0000479388 00000 n 
+0000479208 00000 n 
+0000479107 00000 n 
+0000479324 00000 n 
+0000481270 00000 n 
+0000481569 00000 n 
+0000481866 00000 n 
+0000482203 00000 n 
+0000481097 00000 n 
+0000479430 00000 n 
+0000482013 00000 n 
+0000482140 00000 n 
+0000481420 00000 n 
+0000481718 00000 n 
+0000592966 00000 n 
+0000484993 00000 n 
+0000484686 00000 n 
+0000482347 00000 n 
+0000484802 00000 n 
+0000484929 00000 n 
+0003354495 00000 n 
+0000487737 00000 n 
+0000487430 00000 n 
+0000485109 00000 n 
+0000487546 00000 n 
+0000487673 00000 n 
+0000490185 00000 n 
+0000490799 00000 n 
+0000490039 00000 n 
+0000487853 00000 n 
+0000490481 00000 n 
+0000490608 00000 n 
+0000490334 00000 n 
+0000490735 00000 n 
+0000493528 00000 n 
+0000493348 00000 n 
+0000490943 00000 n 
+0000493464 00000 n 
+0000495771 00000 n 
+0000496069 00000 n 
+0000498485 00000 n 
+0000496222 00000 n 
+0000514545 00000 n 
+0000514703 00000 n 
+0000514860 00000 n 
+0000515017 00000 n 
+0000515174 00000 n 
+0000515331 00000 n 
+0000515488 00000 n 
+0000515644 00000 n 
+0000515797 00000 n 
+0000515950 00000 n 
+0000516107 00000 n 
+0000516264 00000 n 
+0000516422 00000 n 
+0000516577 00000 n 
+0000516731 00000 n 
+0000516886 00000 n 
+0000517042 00000 n 
+0000517194 00000 n 
+0000517346 00000 n 
+0000496383 00000 n 
+0000497169 00000 n 
+0000495598 00000 n 
+0000493658 00000 n 
+0000496536 00000 n 
+0000496663 00000 n 
+0000495920 00000 n 
+0000496788 00000 n 
+0000496915 00000 n 
+0000497042 00000 n 
+0000497106 00000 n 
+0000511381 00000 n 
+0000517624 00000 n 
+0000511573 00000 n 
+0000498369 00000 n 
+0000497313 00000 n 
+0000511253 00000 n 
+0000511445 00000 n 
+0000511509 00000 n 
+0000508997 00000 n 
+0000509129 00000 n 
+0000509637 00000 n 
+0000509177 00000 n 
+0000509613 00000 n 
+0000517752 00000 n 
+0000514246 00000 n 
+0000511718 00000 n 
+0000517496 00000 n 
+0000517688 00000 n 
+0003354620 00000 n 
+0000542748 00000 n 
+0000548811 00000 n 
+0000554912 00000 n 
+0000560213 00000 n 
+0000560725 00000 n 
+0000561236 00000 n 
+0000580152 00000 n 
+0000581295 00000 n 
+0000582431 00000 n 
+0000583620 00000 n 
+0000584655 00000 n 
+0000585676 00000 n 
+0000586815 00000 n 
+0000587932 00000 n 
+0000589140 00000 n 
+0000590172 00000 n 
+0000521811 00000 n 
+0000521961 00000 n 
+0000522113 00000 n 
+0000519647 00000 n 
+0000519275 00000 n 
+0000517868 00000 n 
+0000519391 00000 n 
+0000519455 00000 n 
+0000519519 00000 n 
+0000519583 00000 n 
+0000522649 00000 n 
+0000521656 00000 n 
+0000519763 00000 n 
+0000522265 00000 n 
+0000522329 00000 n 
+0000522393 00000 n 
+0000522457 00000 n 
+0000522521 00000 n 
+0000522585 00000 n 
+0000524728 00000 n 
+0000525264 00000 n 
+0000524591 00000 n 
+0000522793 00000 n 
+0000524882 00000 n 
+0000524946 00000 n 
+0000525010 00000 n 
+0000525074 00000 n 
+0000525200 00000 n 
+0000527861 00000 n 
+0000527426 00000 n 
+0000525451 00000 n 
+0000527542 00000 n 
+0000527669 00000 n 
+0000527733 00000 n 
+0000527797 00000 n 
+0000530347 00000 n 
+0000530950 00000 n 
+0000530210 00000 n 
+0000527991 00000 n 
+0000530502 00000 n 
+0000530566 00000 n 
+0000530630 00000 n 
+0000530694 00000 n 
+0000530758 00000 n 
+0000530822 00000 n 
+0000530886 00000 n 
+0000591283 00000 n 
+0000532732 00000 n 
+0000532488 00000 n 
+0000531066 00000 n 
+0000532604 00000 n 
+0000532668 00000 n 
+0003354745 00000 n 
+0000534459 00000 n 
+0000534615 00000 n 
+0000537042 00000 n 
+0000537341 00000 n 
+0000535092 00000 n 
+0000534313 00000 n 
+0000532848 00000 n 
+0000534773 00000 n 
+0000534837 00000 n 
+0000534901 00000 n 
+0000534964 00000 n 
+0000535028 00000 n 
+0000544792 00000 n 
+0000538086 00000 n 
+0000537493 00000 n 
+0000537649 00000 n 
+0000537807 00000 n 
+0000538470 00000 n 
+0000536860 00000 n 
+0000535222 00000 n 
+0000537959 00000 n 
+0000537192 00000 n 
+0000538150 00000 n 
+0000538214 00000 n 
+0000538278 00000 n 
+0000538342 00000 n 
+0000538406 00000 n 
+0000544856 00000 n 
+0000542504 00000 n 
+0000538600 00000 n 
+0000542620 00000 n 
+0000542812 00000 n 
+0000542876 00000 n 
+0000542940 00000 n 
+0000543004 00000 n 
+0000543068 00000 n 
+0000543132 00000 n 
+0000543196 00000 n 
+0000543260 00000 n 
+0000543324 00000 n 
+0000543388 00000 n 
+0000543452 00000 n 
+0000543516 00000 n 
+0000543580 00000 n 
+0000543644 00000 n 
+0000543708 00000 n 
+0000543772 00000 n 
+0000543836 00000 n 
+0000543900 00000 n 
+0000543964 00000 n 
+0000544028 00000 n 
+0000544092 00000 n 
+0000544156 00000 n 
+0000544220 00000 n 
+0000544283 00000 n 
+0000544347 00000 n 
+0000544410 00000 n 
+0000544474 00000 n 
+0000544537 00000 n 
+0000544601 00000 n 
+0000544665 00000 n 
+0000550599 00000 n 
+0000548567 00000 n 
+0000545041 00000 n 
+0000548683 00000 n 
+0000548875 00000 n 
+0000548939 00000 n 
+0000549003 00000 n 
+0000549067 00000 n 
+0000549131 00000 n 
+0000549195 00000 n 
+0000549259 00000 n 
+0000549323 00000 n 
+0000549387 00000 n 
+0000549451 00000 n 
+0000549515 00000 n 
+0000549579 00000 n 
+0000549643 00000 n 
+0000549707 00000 n 
+0000549769 00000 n 
+0000549833 00000 n 
+0000549896 00000 n 
+0000549960 00000 n 
+0000550023 00000 n 
+0000550087 00000 n 
+0000550151 00000 n 
+0000550215 00000 n 
+0000550279 00000 n 
+0000550343 00000 n 
+0000550407 00000 n 
+0000550471 00000 n 
+0000550535 00000 n 
+0000557212 00000 n 
+0000554668 00000 n 
+0000550770 00000 n 
+0000554784 00000 n 
+0000554976 00000 n 
+0000555040 00000 n 
+0000555104 00000 n 
+0000555168 00000 n 
+0000555232 00000 n 
+0000555296 00000 n 
+0000555360 00000 n 
+0000555424 00000 n 
+0000555488 00000 n 
+0000555552 00000 n 
+0000555616 00000 n 
+0000555680 00000 n 
+0000555744 00000 n 
+0000555808 00000 n 
+0000555870 00000 n 
+0000555934 00000 n 
+0000555997 00000 n 
+0000556061 00000 n 
+0000556124 00000 n 
+0000556188 00000 n 
+0000556252 00000 n 
+0000556316 00000 n 
+0000556380 00000 n 
+0000556444 00000 n 
+0000556508 00000 n 
+0000556572 00000 n 
+0000556636 00000 n 
+0000556700 00000 n 
+0000556764 00000 n 
+0000556828 00000 n 
+0000556892 00000 n 
+0000556956 00000 n 
+0000557020 00000 n 
+0000557084 00000 n 
+0000557148 00000 n 
+0000562001 00000 n 
+0000559969 00000 n 
+0000557369 00000 n 
+0000560085 00000 n 
+0000560277 00000 n 
+0000560341 00000 n 
+0000560405 00000 n 
+0000560469 00000 n 
+0000560533 00000 n 
+0000560597 00000 n 
+0000560788 00000 n 
+0000560852 00000 n 
+0000560916 00000 n 
+0000560980 00000 n 
+0000561044 00000 n 
+0000561108 00000 n 
+0000561300 00000 n 
+0000561364 00000 n 
+0000561428 00000 n 
+0000561492 00000 n 
+0000561556 00000 n 
+0000561620 00000 n 
+0000561684 00000 n 
+0000561746 00000 n 
+0000561810 00000 n 
+0000561873 00000 n 
+0000561937 00000 n 
+0003354870 00000 n 
+0000564388 00000 n 
+0000564692 00000 n 
+0000565354 00000 n 
+0000564233 00000 n 
+0000562172 00000 n 
+0000564843 00000 n 
+0000564970 00000 n 
+0000565034 00000 n 
+0000565098 00000 n 
+0000564540 00000 n 
+0000565162 00000 n 
+0000565226 00000 n 
+0000565290 00000 n 
+0000568910 00000 n 
+0000568155 00000 n 
+0000565484 00000 n 
+0000568271 00000 n 
+0000568335 00000 n 
+0000568399 00000 n 
+0000568463 00000 n 
+0000568527 00000 n 
+0000568591 00000 n 
+0000568654 00000 n 
+0000568718 00000 n 
+0000568782 00000 n 
+0000568846 00000 n 
+0000571234 00000 n 
+0000571386 00000 n 
+0000571537 00000 n 
+0000572133 00000 n 
+0000571079 00000 n 
+0000569054 00000 n 
+0000571686 00000 n 
+0000571750 00000 n 
+0000571814 00000 n 
+0000571878 00000 n 
+0000571942 00000 n 
+0000572069 00000 n 
+0000574615 00000 n 
+0000574244 00000 n 
+0000572277 00000 n 
+0000574360 00000 n 
+0000574487 00000 n 
+0000574551 00000 n 
+0000577223 00000 n 
+0000577043 00000 n 
+0000574787 00000 n 
+0000577159 00000 n 
+0000578990 00000 n 
+0000578810 00000 n 
+0000577367 00000 n 
+0000578926 00000 n 
+0003354995 00000 n 
+0000580216 00000 n 
+0000579908 00000 n 
+0000579134 00000 n 
+0000580024 00000 n 
+0000581359 00000 n 
+0000581051 00000 n 
+0000580332 00000 n 
+0000581167 00000 n 
+0000582494 00000 n 
+0000582188 00000 n 
+0000581475 00000 n 
+0000582304 00000 n 
+0000583684 00000 n 
+0000583376 00000 n 
+0000582610 00000 n 
+0000583492 00000 n 
+0000584719 00000 n 
+0000584411 00000 n 
+0000583800 00000 n 
+0000584527 00000 n 
+0000585740 00000 n 
+0000585432 00000 n 
+0000584835 00000 n 
+0000585548 00000 n 
+0003355120 00000 n 
+0000586879 00000 n 
+0000586571 00000 n 
+0000585856 00000 n 
+0000586687 00000 n 
+0000587996 00000 n 
+0000587688 00000 n 
+0000586995 00000 n 
+0000587804 00000 n 
+0000589204 00000 n 
+0000588896 00000 n 
+0000588112 00000 n 
+0000589012 00000 n 
+0000590236 00000 n 
+0000589928 00000 n 
+0000589320 00000 n 
+0000590044 00000 n 
+0000591347 00000 n 
+0000591039 00000 n 
+0000590352 00000 n 
+0000591155 00000 n 
+0000591744 00000 n 
+0000591564 00000 n 
+0000591463 00000 n 
+0000591680 00000 n 
+0003355245 00000 n 
+0000592685 00000 n 
+0000595547 00000 n 
+0000593030 00000 n 
+0000592548 00000 n 
+0000591786 00000 n 
+0000592839 00000 n 
+0000596657 00000 n 
+0000595431 00000 n 
+0000593146 00000 n 
+0000596593 00000 n 
+0003350179 00000 n 
+0000595927 00000 n 
+0000596059 00000 n 
+0000596107 00000 n 
+0000596572 00000 n 
+0000599132 00000 n 
+0000598952 00000 n 
+0000596830 00000 n 
+0000599068 00000 n 
+0000601269 00000 n 
+0000601089 00000 n 
+0000599234 00000 n 
+0000601205 00000 n 
+0000604137 00000 n 
+0000603704 00000 n 
+0000601385 00000 n 
+0000603820 00000 n 
+0000603947 00000 n 
+0000604073 00000 n 
+0000606711 00000 n 
+0000606531 00000 n 
+0000604253 00000 n 
+0000606647 00000 n 
+0003355370 00000 n 
+0000609126 00000 n 
+0000612657 00000 n 
+0000609763 00000 n 
+0000608989 00000 n 
+0000606813 00000 n 
+0000609317 00000 n 
+0000609444 00000 n 
+0000609508 00000 n 
+0000609572 00000 n 
+0000609699 00000 n 
+0000612869 00000 n 
+0000615918 00000 n 
+0000613384 00000 n 
+0000612502 00000 n 
+0000609963 00000 n 
+0000613320 00000 n 
+0000613094 00000 n 
+0000616127 00000 n 
+0000616302 00000 n 
+0000616472 00000 n 
+0000616658 00000 n 
+0000616825 00000 n 
+0000617006 00000 n 
+0000617178 00000 n 
+0000617427 00000 n 
+0000615718 00000 n 
+0000613570 00000 n 
+0000617363 00000 n 
+0000620116 00000 n 
+0000620291 00000 n 
+0000620678 00000 n 
+0000619970 00000 n 
+0000617585 00000 n 
+0000620487 00000 n 
+0000620614 00000 n 
+0000626519 00000 n 
+0000626361 00000 n 
+0000622869 00000 n 
+0000626912 00000 n 
+0000622723 00000 n 
+0000620921 00000 n 
+0000626720 00000 n 
+0000626848 00000 n 
+0000624135 00000 n 
+0000624267 00000 n 
+0000624745 00000 n 
+0000624315 00000 n 
+0000624723 00000 n 
+0000629966 00000 n 
+0000629531 00000 n 
+0000627127 00000 n 
+0000629647 00000 n 
+0000629774 00000 n 
+0000629902 00000 n 
+0003355495 00000 n 
+0000633087 00000 n 
+0000632780 00000 n 
+0000630096 00000 n 
+0000632896 00000 n 
+0000633023 00000 n 
+0000635737 00000 n 
+0000635888 00000 n 
+0000636533 00000 n 
+0000635591 00000 n 
+0000633217 00000 n 
+0000636088 00000 n 
+0000636215 00000 n 
+0000636342 00000 n 
+0000636469 00000 n 
+0000768183 00000 n 
+0000639512 00000 n 
+0000639873 00000 n 
+0000639375 00000 n 
+0000636747 00000 n 
+0000639682 00000 n 
+0000639809 00000 n 
+0000644161 00000 n 
+0000642244 00000 n 
+0000641809 00000 n 
+0000640045 00000 n 
+0000641925 00000 n 
+0000642052 00000 n 
+0000642116 00000 n 
+0000642180 00000 n 
+0000645058 00000 n 
+0000644045 00000 n 
+0000642374 00000 n 
+0000644868 00000 n 
+0000644932 00000 n 
+0000644995 00000 n 
+0000644666 00000 n 
+0000644798 00000 n 
+0000644846 00000 n 
+0000648498 00000 n 
+0000646647 00000 n 
+0000646339 00000 n 
+0000645245 00000 n 
+0000646455 00000 n 
+0000646519 00000 n 
+0000646583 00000 n 
+0003355620 00000 n 
+0000648847 00000 n 
+0000648361 00000 n 
+0000646763 00000 n 
+0000648655 00000 n 
+0000648719 00000 n 
+0000648783 00000 n 
+0000683848 00000 n 
+0000650995 00000 n 
+0000650815 00000 n 
+0000648977 00000 n 
+0000650931 00000 n 
+0003348426 00000 n 
+0000652827 00000 n 
+0000652647 00000 n 
+0000651139 00000 n 
+0000652763 00000 n 
+0000654589 00000 n 
+0000654281 00000 n 
+0000652957 00000 n 
+0000654397 00000 n 
+0000654461 00000 n 
+0000654525 00000 n 
+0000656486 00000 n 
+0000657241 00000 n 
+0000656340 00000 n 
+0000654719 00000 n 
+0000656796 00000 n 
+0000656860 00000 n 
+0000656924 00000 n 
+0000657051 00000 n 
+0000657178 00000 n 
+0000656641 00000 n 
+0000659969 00000 n 
+0000658446 00000 n 
+0000657385 00000 n 
+0000658562 00000 n 
+0000658626 00000 n 
+0000658690 00000 n 
+0000658754 00000 n 
+0000658818 00000 n 
+0000658882 00000 n 
+0000658946 00000 n 
+0000659010 00000 n 
+0000659073 00000 n 
+0000659137 00000 n 
+0000659201 00000 n 
+0000659265 00000 n 
+0000659329 00000 n 
+0000659393 00000 n 
+0000659457 00000 n 
+0000659521 00000 n 
+0000659585 00000 n 
+0000659649 00000 n 
+0000659713 00000 n 
+0000659777 00000 n 
+0000659841 00000 n 
+0000659905 00000 n 
+0003355745 00000 n 
+0000674242 00000 n 
+0000661241 00000 n 
+0000674840 00000 n 
+0000661104 00000 n 
+0000660085 00000 n 
+0000674393 00000 n 
+0000674457 00000 n 
+0000674521 00000 n 
+0000674648 00000 n 
+0000674776 00000 n 
+0000671987 00000 n 
+0000672119 00000 n 
+0000672627 00000 n 
+0000672167 00000 n 
+0000672603 00000 n 
+0000677331 00000 n 
+0000677486 00000 n 
+0000677646 00000 n 
+0000677799 00000 n 
+0000678270 00000 n 
+0000677167 00000 n 
+0000674986 00000 n 
+0000677951 00000 n 
+0000678078 00000 n 
+0000678206 00000 n 
+0000680500 00000 n 
+0000680659 00000 n 
+0000681134 00000 n 
+0000680354 00000 n 
+0000678457 00000 n 
+0000680816 00000 n 
+0000680880 00000 n 
+0000680944 00000 n 
+0000681007 00000 n 
+0000681071 00000 n 
+0000820301 00000 n 
+0000683564 00000 n 
+0000686546 00000 n 
+0000684167 00000 n 
+0000683427 00000 n 
+0000681250 00000 n 
+0000683720 00000 n 
+0000683975 00000 n 
+0000684039 00000 n 
+0000684103 00000 n 
+0000822396 00000 n 
+0000687050 00000 n 
+0000686400 00000 n 
+0000684311 00000 n 
+0000686858 00000 n 
+0000686702 00000 n 
+0000686922 00000 n 
+0000686986 00000 n 
+0000823448 00000 n 
+0000688591 00000 n 
+0000688411 00000 n 
+0000687223 00000 n 
+0000688527 00000 n 
+0003355870 00000 n 
+0000690666 00000 n 
+0000690833 00000 n 
+0000691000 00000 n 
+0000691161 00000 n 
+0000691639 00000 n 
+0000690502 00000 n 
+0000688707 00000 n 
+0000691321 00000 n 
+0000691448 00000 n 
+0000691512 00000 n 
+0000691575 00000 n 
+0000827641 00000 n 
+0000832222 00000 n 
+0000848622 00000 n 
+0000853237 00000 n 
+0000693363 00000 n 
+0000692991 00000 n 
+0000691769 00000 n 
+0000693107 00000 n 
+0000693171 00000 n 
+0000693235 00000 n 
+0000693299 00000 n 
+0000695585 00000 n 
+0000695277 00000 n 
+0000693479 00000 n 
+0000695393 00000 n 
+0000695457 00000 n 
+0000695521 00000 n 
+0000697676 00000 n 
+0000697860 00000 n 
+0000698059 00000 n 
+0000698453 00000 n 
+0000697521 00000 n 
+0000695701 00000 n 
+0000698264 00000 n 
+0000698391 00000 n 
+0000700778 00000 n 
+0000700280 00000 n 
+0000698639 00000 n 
+0000700396 00000 n 
+0000700523 00000 n 
+0000700586 00000 n 
+0000700650 00000 n 
+0000700714 00000 n 
+0000702446 00000 n 
+0000702984 00000 n 
+0000702309 00000 n 
+0000700965 00000 n 
+0000702602 00000 n 
+0000702666 00000 n 
+0000702730 00000 n 
+0000702857 00000 n 
+0000702921 00000 n 
+0003355995 00000 n 
+0000706570 00000 n 
+0000704352 00000 n 
+0000704827 00000 n 
+0000704215 00000 n 
+0000703114 00000 n 
+0000704508 00000 n 
+0000704572 00000 n 
+0000704636 00000 n 
+0000704700 00000 n 
+0000704764 00000 n 
+0000706762 00000 n 
+0000706327 00000 n 
+0000704943 00000 n 
+0000706443 00000 n 
+0000706634 00000 n 
+0000706698 00000 n 
+0000708393 00000 n 
+0000708213 00000 n 
+0000706892 00000 n 
+0000708329 00000 n 
+0000710043 00000 n 
+0000709800 00000 n 
+0000708495 00000 n 
+0000709916 00000 n 
+0000709980 00000 n 
+0000712547 00000 n 
+0000712699 00000 n 
+0000715439 00000 n 
+0000713044 00000 n 
+0000712401 00000 n 
+0000710159 00000 n 
+0000712853 00000 n 
+0000712980 00000 n 
+0001891134 00000 n 
+0000715659 00000 n 
+0000715302 00000 n 
+0000713188 00000 n 
+0000715595 00000 n 
+0003356120 00000 n 
+0000717753 00000 n 
+0000718009 00000 n 
+0000717509 00000 n 
+0000715832 00000 n 
+0000717625 00000 n 
+0000717817 00000 n 
+0000717881 00000 n 
+0000717945 00000 n 
+0000719638 00000 n 
+0000719266 00000 n 
+0000718125 00000 n 
+0000719382 00000 n 
+0000719446 00000 n 
+0000719510 00000 n 
+0000719574 00000 n 
+0000721168 00000 n 
+0000721453 00000 n 
+0000721031 00000 n 
+0000719754 00000 n 
+0000721325 00000 n 
+0000721389 00000 n 
+0000855154 00000 n 
+0000722827 00000 n 
+0000722583 00000 n 
+0000721569 00000 n 
+0000722699 00000 n 
+0000722763 00000 n 
+0000724451 00000 n 
+0000724795 00000 n 
+0000724314 00000 n 
+0000722943 00000 n 
+0000724603 00000 n 
+0000724667 00000 n 
+0000724731 00000 n 
+0000726353 00000 n 
+0000726045 00000 n 
+0000724911 00000 n 
+0000726161 00000 n 
+0000726225 00000 n 
+0000726289 00000 n 
+0003356245 00000 n 
+0000728357 00000 n 
+0000727985 00000 n 
+0000726469 00000 n 
+0000728101 00000 n 
+0000728165 00000 n 
+0000728229 00000 n 
+0000728293 00000 n 
+0000730017 00000 n 
+0000729709 00000 n 
+0000728473 00000 n 
+0000729825 00000 n 
+0000729889 00000 n 
+0000729953 00000 n 
+0000731780 00000 n 
+0000731472 00000 n 
+0000730133 00000 n 
+0000731588 00000 n 
+0000731652 00000 n 
+0000731716 00000 n 
+0000733815 00000 n 
+0000733443 00000 n 
+0000731896 00000 n 
+0000733559 00000 n 
+0000733623 00000 n 
+0000733687 00000 n 
+0000733751 00000 n 
+0000735286 00000 n 
+0000734978 00000 n 
+0000733931 00000 n 
+0000735094 00000 n 
+0000735158 00000 n 
+0000735222 00000 n 
+0000737330 00000 n 
+0000737627 00000 n 
+0000737777 00000 n 
+0000738373 00000 n 
+0000737166 00000 n 
+0000735402 00000 n 
+0000737926 00000 n 
+0000738053 00000 n 
+0000738117 00000 n 
+0000738181 00000 n 
+0000737480 00000 n 
+0000738245 00000 n 
+0000738309 00000 n 
+0003356370 00000 n 
+0000740634 00000 n 
+0000740070 00000 n 
+0000738503 00000 n 
+0000740186 00000 n 
+0000740250 00000 n 
+0000740314 00000 n 
+0000740378 00000 n 
+0000740442 00000 n 
+0000740506 00000 n 
+0000740570 00000 n 
+0000742316 00000 n 
+0000742480 00000 n 
+0000742641 00000 n 
+0000742962 00000 n 
+0000743120 00000 n 
+0000743725 00000 n 
+0000742134 00000 n 
+0000740764 00000 n 
+0000743278 00000 n 
+0000743405 00000 n 
+0000743469 00000 n 
+0000742802 00000 n 
+0000743533 00000 n 
+0000743597 00000 n 
+0000743661 00000 n 
+0000837529 00000 n 
+0000745136 00000 n 
+0000744892 00000 n 
+0000743855 00000 n 
+0000745008 00000 n 
+0000745072 00000 n 
+0000747264 00000 n 
+0000746892 00000 n 
+0000745252 00000 n 
+0000747008 00000 n 
+0000747072 00000 n 
+0000747136 00000 n 
+0000747200 00000 n 
+0000748882 00000 n 
+0000748574 00000 n 
+0000747380 00000 n 
+0000748690 00000 n 
+0000748754 00000 n 
+0000748818 00000 n 
+0000750765 00000 n 
+0000750457 00000 n 
+0000748998 00000 n 
+0000750573 00000 n 
+0000750637 00000 n 
+0000750701 00000 n 
+0003356495 00000 n 
+0000752977 00000 n 
+0000753141 00000 n 
+0000753302 00000 n 
+0000753624 00000 n 
+0000754224 00000 n 
+0000752804 00000 n 
+0000750881 00000 n 
+0000753779 00000 n 
+0000753843 00000 n 
+0000753463 00000 n 
+0000753907 00000 n 
+0000754033 00000 n 
+0000754160 00000 n 
+0000843802 00000 n 
+0000755903 00000 n 
+0000755596 00000 n 
+0000754368 00000 n 
+0000755712 00000 n 
+0000755839 00000 n 
+0000758042 00000 n 
+0000758434 00000 n 
+0000757905 00000 n 
+0000756033 00000 n 
+0000758243 00000 n 
+0000758370 00000 n 
+0000761064 00000 n 
+0000761425 00000 n 
+0000760927 00000 n 
+0000758634 00000 n 
+0000761234 00000 n 
+0000761361 00000 n 
+0000763328 00000 n 
+0000762892 00000 n 
+0000761625 00000 n 
+0000763008 00000 n 
+0000763072 00000 n 
+0000763136 00000 n 
+0000763200 00000 n 
+0000763264 00000 n 
+0000764902 00000 n 
+0000765303 00000 n 
+0000764765 00000 n 
+0000763444 00000 n 
+0000765112 00000 n 
+0000765239 00000 n 
+0003356620 00000 n 
+0000767749 00000 n 
+0000767904 00000 n 
+0000768630 00000 n 
+0000767603 00000 n 
+0000765489 00000 n 
+0000768056 00000 n 
+0000768247 00000 n 
+0000768311 00000 n 
+0000768375 00000 n 
+0000768439 00000 n 
+0000768502 00000 n 
+0000768566 00000 n 
+0000788581 00000 n 
+0000788709 00000 n 
+0000771564 00000 n 
+0000773982 00000 n 
+0000772234 00000 n 
+0000771427 00000 n 
+0000768774 00000 n 
+0000771724 00000 n 
+0000771788 00000 n 
+0000771852 00000 n 
+0000771916 00000 n 
+0000771980 00000 n 
+0000772043 00000 n 
+0000772170 00000 n 
+0000788901 00000 n 
+0000773866 00000 n 
+0000772434 00000 n 
+0000788453 00000 n 
+0000788773 00000 n 
+0000788837 00000 n 
+0000791529 00000 n 
+0000790901 00000 n 
+0000789069 00000 n 
+0000791017 00000 n 
+0000791081 00000 n 
+0000791145 00000 n 
+0000791209 00000 n 
+0000791273 00000 n 
+0000791337 00000 n 
+0000791401 00000 n 
+0000791465 00000 n 
+0000793999 00000 n 
+0000794186 00000 n 
+0000794687 00000 n 
+0000793844 00000 n 
+0000791716 00000 n 
+0000794623 00000 n 
+0000794405 00000 n 
+0000800341 00000 n 
+0000800645 00000 n 
+0000797353 00000 n 
+0000796920 00000 n 
+0000794916 00000 n 
+0000797036 00000 n 
+0000797163 00000 n 
+0000797290 00000 n 
+0003356745 00000 n 
+0000801308 00000 n 
+0000800186 00000 n 
+0000797497 00000 n 
+0000800796 00000 n 
+0000800860 00000 n 
+0000800493 00000 n 
+0000800924 00000 n 
+0000800988 00000 n 
+0000801052 00000 n 
+0000801116 00000 n 
+0000801180 00000 n 
+0000801244 00000 n 
+0000804414 00000 n 
+0000803851 00000 n 
+0000801452 00000 n 
+0000803967 00000 n 
+0000804031 00000 n 
+0000804095 00000 n 
+0000804159 00000 n 
+0000804223 00000 n 
+0000804350 00000 n 
+0000809250 00000 n 
+0000806944 00000 n 
+0000806510 00000 n 
+0000804544 00000 n 
+0000806626 00000 n 
+0000806753 00000 n 
+0000806880 00000 n 
+0000809646 00000 n 
+0000809113 00000 n 
+0000807060 00000 n 
+0000809455 00000 n 
+0000809582 00000 n 
+0000812368 00000 n 
 0000812124 00000 n 
-0000812188 00000 n 
-0000812252 00000 n 
-0000812316 00000 n 
-0000812380 00000 n 
-0000812444 00000 n 
-0000812508 00000 n 
-0000815042 00000 n 
-0000815229 00000 n 
-0000815730 00000 n 
-0000814887 00000 n 
-0000812759 00000 n 
-0000815666 00000 n 
-0000815448 00000 n 
-0000821384 00000 n 
-0000821688 00000 n 
-0000818396 00000 n 
-0000817963 00000 n 
-0000815959 00000 n 
-0000818079 00000 n 
-0000818206 00000 n 
-0000818333 00000 n 
-0003380430 00000 n 
-0000822351 00000 n 
-0000821229 00000 n 
-0000818540 00000 n 
-0000821839 00000 n 
-0000821903 00000 n 
-0000821536 00000 n 
-0000821967 00000 n 
-0000822031 00000 n 
-0000822095 00000 n 
-0000822159 00000 n 
-0000822223 00000 n 
-0000822287 00000 n 
-0000825457 00000 n 
-0000824894 00000 n 
-0000822495 00000 n 
-0000825010 00000 n 
-0000825074 00000 n 
-0000825138 00000 n 
-0000825202 00000 n 
-0000825266 00000 n 
-0000825393 00000 n 
-0000830293 00000 n 
-0000827987 00000 n 
-0000827553 00000 n 
-0000825587 00000 n 
-0000827669 00000 n 
-0000827796 00000 n 
-0000827923 00000 n 
-0000830689 00000 n 
-0000830156 00000 n 
-0000828103 00000 n 
-0000830498 00000 n 
-0000830625 00000 n 
-0000833411 00000 n 
-0000833167 00000 n 
-0000830889 00000 n 
-0000833283 00000 n 
-0000833347 00000 n 
-0000835970 00000 n 
-0000835790 00000 n 
-0000833541 00000 n 
-0000835906 00000 n 
-0003380555 00000 n 
-0000838522 00000 n 
-0000838342 00000 n 
-0000836100 00000 n 
-0000838458 00000 n 
-0000840077 00000 n 
-0000839897 00000 n 
-0000838666 00000 n 
-0000840013 00000 n 
-0000841408 00000 n 
-0000841100 00000 n 
-0000840193 00000 n 
-0000841216 00000 n 
-0000842447 00000 n 
-0000842139 00000 n 
-0000841524 00000 n 
-0000842255 00000 n 
-0000842383 00000 n 
-0000843503 00000 n 
-0000843195 00000 n 
-0000842563 00000 n 
-0000843311 00000 n 
-0000844555 00000 n 
-0000844247 00000 n 
-0000843619 00000 n 
-0000844363 00000 n 
-0003380680 00000 n 
-0000850540 00000 n 
-0000848440 00000 n 
-0000844671 00000 n 
-0000848556 00000 n 
-0000848748 00000 n 
-0000848812 00000 n 
-0000848876 00000 n 
-0000848940 00000 n 
-0000849004 00000 n 
-0000849068 00000 n 
-0000849132 00000 n 
-0000849196 00000 n 
-0000849260 00000 n 
-0000849324 00000 n 
-0000849388 00000 n 
-0000849452 00000 n 
-0000849516 00000 n 
-0000849580 00000 n 
+0000809846 00000 n 
+0000812240 00000 n 
+0000812304 00000 n 
+0000814927 00000 n 
+0000814747 00000 n 
+0000812498 00000 n 
+0000814863 00000 n 
+0003356870 00000 n 
+0000817479 00000 n 
+0000817299 00000 n 
+0000815057 00000 n 
+0000817415 00000 n 
+0000819034 00000 n 
+0000818854 00000 n 
+0000817623 00000 n 
+0000818970 00000 n 
+0000820365 00000 n 
+0000820057 00000 n 
+0000819150 00000 n 
+0000820173 00000 n 
+0000821404 00000 n 
+0000821096 00000 n 
+0000820481 00000 n 
+0000821212 00000 n 
+0000821340 00000 n 
+0000822460 00000 n 
+0000822152 00000 n 
+0000821520 00000 n 
+0000822268 00000 n 
+0000823512 00000 n 
+0000823204 00000 n 
+0000822576 00000 n 
+0000823320 00000 n 
+0003356995 00000 n 
+0000829497 00000 n 
+0000827397 00000 n 
+0000823628 00000 n 
+0000827513 00000 n 
+0000827705 00000 n 
+0000827769 00000 n 
+0000827833 00000 n 
+0000827897 00000 n 
+0000827961 00000 n 
+0000828025 00000 n 
+0000828089 00000 n 
+0000828153 00000 n 
+0000828217 00000 n 
+0000828281 00000 n 
+0000828345 00000 n 
+0000828409 00000 n 
+0000828473 00000 n 
+0000828537 00000 n 
+0000828601 00000 n 
+0000828665 00000 n 
+0000828729 00000 n 
+0000828793 00000 n 
+0000828857 00000 n 
+0000828921 00000 n 
+0000828985 00000 n 
+0000829049 00000 n 
+0000829113 00000 n 
+0000829177 00000 n 
+0000829241 00000 n 
+0000829305 00000 n 
+0000829369 00000 n 
+0000829433 00000 n 
+0000833499 00000 n 
+0000831978 00000 n 
+0000829654 00000 n 
+0000832094 00000 n 
+0000832286 00000 n 
+0000832350 00000 n 
+0000832414 00000 n 
+0000832477 00000 n 
+0000832541 00000 n 
+0000832604 00000 n 
+0000832668 00000 n 
+0000832731 00000 n 
+0000832795 00000 n 
+0000832859 00000 n 
+0000832923 00000 n 
+0000832987 00000 n 
+0000833051 00000 n 
+0000833115 00000 n 
+0000833179 00000 n 
+0000833243 00000 n 
+0000833307 00000 n 
+0000833371 00000 n 
+0000833435 00000 n 
+0000839765 00000 n 
+0000837285 00000 n 
+0000833628 00000 n 
+0000837401 00000 n 
+0000837593 00000 n 
+0000837657 00000 n 
+0000837721 00000 n 
+0000837785 00000 n 
+0000837849 00000 n 
+0000837913 00000 n 
+0000837977 00000 n 
+0000838041 00000 n 
+0000838105 00000 n 
+0000838169 00000 n 
+0000838233 00000 n 
+0000838297 00000 n 
+0000838361 00000 n 
+0000838425 00000 n 
+0000838489 00000 n 
+0000838553 00000 n 
+0000838617 00000 n 
+0000838681 00000 n 
+0000838744 00000 n 
+0000838808 00000 n 
+0000838871 00000 n 
+0000838935 00000 n 
+0000838997 00000 n 
+0000839061 00000 n 
+0000839125 00000 n 
+0000839189 00000 n 
+0000839253 00000 n 
+0000839317 00000 n 
+0000839381 00000 n 
+0000839445 00000 n 
+0000839509 00000 n 
+0000839573 00000 n 
+0000839637 00000 n 
+0000839701 00000 n 
+0000846038 00000 n 
+0000843558 00000 n 
+0000839908 00000 n 
+0000843674 00000 n 
+0000843866 00000 n 
+0000843930 00000 n 
+0000843994 00000 n 
+0000844058 00000 n 
+0000844122 00000 n 
+0000844186 00000 n 
+0000844250 00000 n 
+0000844314 00000 n 
+0000844378 00000 n 
+0000844442 00000 n 
+0000844506 00000 n 
+0000844570 00000 n 
+0000844634 00000 n 
+0000844698 00000 n 
+0000844762 00000 n 
+0000844826 00000 n 
+0000844890 00000 n 
+0000844954 00000 n 
+0000845017 00000 n 
+0000845081 00000 n 
+0000845144 00000 n 
+0000845208 00000 n 
+0000845270 00000 n 
+0000845334 00000 n 
+0000845398 00000 n 
+0000845462 00000 n 
+0000845526 00000 n 
+0000845590 00000 n 
+0000845654 00000 n 
+0000845718 00000 n 
+0000845782 00000 n 
+0000845846 00000 n 
+0000845910 00000 n 
+0000845974 00000 n 
+0000850218 00000 n 
+0000848378 00000 n 
+0000846181 00000 n 
+0000848494 00000 n 
+0000848686 00000 n 
+0000848750 00000 n 
+0000848814 00000 n 
+0000848878 00000 n 
+0000848942 00000 n 
+0000849006 00000 n 
+0000849070 00000 n 
+0000849134 00000 n 
+0000849198 00000 n 
+0000849262 00000 n 
+0000849326 00000 n 
+0000849390 00000 n 
+0000849454 00000 n 
+0000849517 00000 n 
+0000849581 00000 n 
 0000849644 00000 n 
 0000849708 00000 n 
-0000849772 00000 n 
-0000849836 00000 n 
-0000849900 00000 n 
-0000849964 00000 n 
-0000850028 00000 n 
-0000850092 00000 n 
-0000850156 00000 n 
-0000850220 00000 n 
-0000850284 00000 n 
-0000850348 00000 n 
-0000850412 00000 n 
-0000850476 00000 n 
-0000854542 00000 n 
-0000853021 00000 n 
-0000850697 00000 n 
-0000853137 00000 n 
-0000853329 00000 n 
-0000853393 00000 n 
-0000853457 00000 n 
-0000853520 00000 n 
-0000853584 00000 n 
-0000853647 00000 n 
-0000853711 00000 n 
-0000853774 00000 n 
-0000853838 00000 n 
-0000853902 00000 n 
-0000853966 00000 n 
-0000854030 00000 n 
-0000854094 00000 n 
-0000854158 00000 n 
-0000854222 00000 n 
-0000854286 00000 n 
-0000854350 00000 n 
-0000854414 00000 n 
-0000854478 00000 n 
-0000860808 00000 n 
-0000858328 00000 n 
-0000854671 00000 n 
-0000858444 00000 n 
-0000858636 00000 n 
-0000858700 00000 n 
-0000858764 00000 n 
-0000858828 00000 n 
-0000858892 00000 n 
-0000858956 00000 n 
-0000859020 00000 n 
-0000859084 00000 n 
-0000859148 00000 n 
-0000859212 00000 n 
-0000859276 00000 n 
-0000859340 00000 n 
-0000859404 00000 n 
-0000859468 00000 n 
-0000859532 00000 n 
-0000859596 00000 n 
-0000859660 00000 n 
-0000859724 00000 n 
-0000859787 00000 n 
-0000859851 00000 n 
-0000859914 00000 n 
-0000859978 00000 n 
-0000860040 00000 n 
-0000860104 00000 n 
-0000860168 00000 n 
-0000860232 00000 n 
-0000860296 00000 n 
-0000860360 00000 n 
-0000860424 00000 n 
-0000860488 00000 n 
-0000860552 00000 n 
-0000860616 00000 n 
-0000860680 00000 n 
-0000860744 00000 n 
-0000867081 00000 n 
-0000864601 00000 n 
-0000860951 00000 n 
-0000864717 00000 n 
-0000864909 00000 n 
-0000864973 00000 n 
-0000865037 00000 n 
-0000865101 00000 n 
-0000865165 00000 n 
-0000865229 00000 n 
-0000865293 00000 n 
-0000865357 00000 n 
-0000865421 00000 n 
-0000865485 00000 n 
-0000865549 00000 n 
-0000865613 00000 n 
-0000865677 00000 n 
-0000865741 00000 n 
-0000865805 00000 n 
-0000865869 00000 n 
-0000865933 00000 n 
-0000865997 00000 n 
-0000866060 00000 n 
-0000866124 00000 n 
-0000866187 00000 n 
-0000866251 00000 n 
-0000866313 00000 n 
-0000866377 00000 n 
-0000866441 00000 n 
-0000866505 00000 n 
-0000866569 00000 n 
-0000866633 00000 n 
-0000866697 00000 n 
-0000866761 00000 n 
-0000866825 00000 n 
-0000866889 00000 n 
-0000866953 00000 n 
-0000867017 00000 n 
-0000871261 00000 n 
-0000869421 00000 n 
-0000867224 00000 n 
-0000869537 00000 n 
-0000869729 00000 n 
-0000869793 00000 n 
-0000869857 00000 n 
-0000869921 00000 n 
-0000869985 00000 n 
-0000870049 00000 n 
-0000870113 00000 n 
-0000870177 00000 n 
-0000870241 00000 n 
-0000870305 00000 n 
-0000870369 00000 n 
-0000870433 00000 n 
-0000870497 00000 n 
-0000870560 00000 n 
-0000870624 00000 n 
-0000870687 00000 n 
-0000870751 00000 n 
-0000870813 00000 n 
-0000870877 00000 n 
-0000870941 00000 n 
-0000871005 00000 n 
-0000871069 00000 n 
-0000871133 00000 n 
-0000871197 00000 n 
-0000876261 00000 n 
-0000874038 00000 n 
-0000871376 00000 n 
-0000874154 00000 n 
-0000874343 00000 n 
-0000874407 00000 n 
-0000874471 00000 n 
-0000874535 00000 n 
-0000874599 00000 n 
-0000874663 00000 n 
-0000874727 00000 n 
-0000874791 00000 n 
-0000874855 00000 n 
-0000874919 00000 n 
-0000874983 00000 n 
-0000875047 00000 n 
-0000875111 00000 n 
-0000875175 00000 n 
-0000875239 00000 n 
-0000875303 00000 n 
-0000875367 00000 n 
-0000875431 00000 n 
-0000875495 00000 n 
-0000875559 00000 n 
-0000875623 00000 n 
-0000875687 00000 n 
-0000875751 00000 n 
-0000875815 00000 n 
-0000875879 00000 n 
-0000875942 00000 n 
-0000876006 00000 n 
-0000876069 00000 n 
-0003380805 00000 n 
-0000878502 00000 n 
-0000878195 00000 n 
-0000876390 00000 n 
-0000878311 00000 n 
-0000878438 00000 n 
-0000880835 00000 n 
-0000881301 00000 n 
-0000880698 00000 n 
-0000878618 00000 n 
-0000880984 00000 n 
-0000881111 00000 n 
-0000881237 00000 n 
-0000883963 00000 n 
-0000884301 00000 n 
-0000883826 00000 n 
-0000881431 00000 n 
-0000884110 00000 n 
-0000884237 00000 n 
-0000886661 00000 n 
-0000887000 00000 n 
-0000886524 00000 n 
-0000884445 00000 n 
-0000886809 00000 n 
-0000886936 00000 n 
-0000889593 00000 n 
-0000889286 00000 n 
-0000887130 00000 n 
-0000889402 00000 n 
-0000889529 00000 n 
-0000891977 00000 n 
-0000892317 00000 n 
-0000891840 00000 n 
-0000889709 00000 n 
-0000892126 00000 n 
-0000892253 00000 n 
-0003380930 00000 n 
-0000894929 00000 n 
-0000894749 00000 n 
-0000892447 00000 n 
-0000894865 00000 n 
-0000897679 00000 n 
-0000897372 00000 n 
-0000895045 00000 n 
-0000897488 00000 n 
-0000897615 00000 n 
-0000900308 00000 n 
-0000900455 00000 n 
-0000900758 00000 n 
-0000900975 00000 n 
-0000900144 00000 n 
-0000897809 00000 n 
-0000900911 00000 n 
-0000900607 00000 n 
-0001085800 00000 n 
-0001186419 00000 n 
-0000903651 00000 n 
-0000903471 00000 n 
-0000901077 00000 n 
-0000903587 00000 n 
-0000912485 00000 n 
-0000905761 00000 n 
-0000913083 00000 n 
-0000905624 00000 n 
-0000903767 00000 n 
-0000912639 00000 n 
-0000912765 00000 n 
-0000912891 00000 n 
-0000913019 00000 n 
-0000908076 00000 n 
-0000908194 00000 n 
-0000908242 00000 n 
-0000908645 00000 n 
-0000908668 00000 n 
-0000909032 00000 n 
-0000912462 00000 n 
-0000921762 00000 n 
-0000914786 00000 n 
-0000921919 00000 n 
-0000918009 00000 n 
-0000922394 00000 n 
-0000914640 00000 n 
-0000913243 00000 n 
-0000922074 00000 n 
-0000922202 00000 n 
-0000922330 00000 n 
-0003381055 00000 n 
-0000915424 00000 n 
-0000915542 00000 n 
-0000915590 00000 n 
-0000915965 00000 n 
-0000915987 00000 n 
-0000916274 00000 n 
-0000917986 00000 n 
-0000918817 00000 n 
-0000918935 00000 n 
-0000918983 00000 n 
-0000919360 00000 n 
-0000919382 00000 n 
-0000919683 00000 n 
-0000919779 00000 n 
-0000921739 00000 n 
-0000932632 00000 n 
-0000923955 00000 n 
-0000932786 00000 n 
-0000928645 00000 n 
-0000933258 00000 n 
-0000923809 00000 n 
-0000922569 00000 n 
-0000932939 00000 n 
-0000933067 00000 n 
-0000933195 00000 n 
-0000924898 00000 n 
-0000925016 00000 n 
-0000925064 00000 n 
-0000925463 00000 n 
-0000925485 00000 n 
-0000925813 00000 n 
-0000925909 00000 n 
-0000928622 00000 n 
-0000929496 00000 n 
-0000929614 00000 n 
-0000929662 00000 n 
-0000930057 00000 n 
-0000930079 00000 n 
-0000930382 00000 n 
-0000932609 00000 n 
-0000935234 00000 n 
-0000935383 00000 n 
-0000935798 00000 n 
-0000935088 00000 n 
-0000933419 00000 n 
-0000935542 00000 n 
-0000935606 00000 n 
-0000935670 00000 n 
-0000935734 00000 n 
-0000955701 00000 n 
-0000937478 00000 n 
-0000938019 00000 n 
-0000937341 00000 n 
-0000935971 00000 n 
-0000937636 00000 n 
-0000937700 00000 n 
-0000937764 00000 n 
-0000937828 00000 n 
-0000937892 00000 n 
-0000937955 00000 n 
-0000957061 00000 n 
-0000939428 00000 n 
-0000939122 00000 n 
-0000938135 00000 n 
-0000939238 00000 n 
-0000939302 00000 n 
-0000939365 00000 n 
-0000940976 00000 n 
-0000943412 00000 n 
-0000943571 00000 n 
-0000941381 00000 n 
-0000940839 00000 n 
-0000939544 00000 n 
-0000941125 00000 n 
-0000941189 00000 n 
-0000941253 00000 n 
-0000941317 00000 n 
-0000987721 00000 n 
-0001086556 00000 n 
-0000944175 00000 n 
-0000943266 00000 n 
-0000941497 00000 n 
-0000943730 00000 n 
-0000943794 00000 n 
-0000943921 00000 n 
-0000944047 00000 n 
-0000944111 00000 n 
-0003381180 00000 n 
-0000962486 00000 n 
-0000978661 00000 n 
-0000946552 00000 n 
-0000946372 00000 n 
-0000944333 00000 n 
-0000946488 00000 n 
-0000949210 00000 n 
-0000949359 00000 n 
-0000949514 00000 n 
-0000949731 00000 n 
-0000949055 00000 n 
-0000946682 00000 n 
-0000949667 00000 n 
-0000952312 00000 n 
-0000952528 00000 n 
-0000952175 00000 n 
-0000949875 00000 n 
-0000952464 00000 n 
-0000954320 00000 n 
-0000954140 00000 n 
-0000952686 00000 n 
-0000954256 00000 n 
-0000955765 00000 n 
-0000955457 00000 n 
-0000954436 00000 n 
-0000955573 00000 n 
-0000957125 00000 n 
-0000956817 00000 n 
-0000955881 00000 n 
-0000956933 00000 n 
-0003381305 00000 n 
-0000965226 00000 n 
-0000962242 00000 n 
-0000957241 00000 n 
-0000962358 00000 n 
-0000962550 00000 n 
-0000962614 00000 n 
-0000962678 00000 n 
-0000962742 00000 n 
-0000962806 00000 n 
-0000962870 00000 n 
-0000962934 00000 n 
-0000962998 00000 n 
-0000963061 00000 n 
-0000963125 00000 n 
-0000963188 00000 n 
-0000963252 00000 n 
-0000963314 00000 n 
-0000963378 00000 n 
-0000963442 00000 n 
-0000963506 00000 n 
-0000963570 00000 n 
-0000963634 00000 n 
-0000963698 00000 n 
-0000963762 00000 n 
-0000963826 00000 n 
-0000963890 00000 n 
-0000963954 00000 n 
-0000964018 00000 n 
-0000964082 00000 n 
-0000964146 00000 n 
-0000964210 00000 n 
-0000964274 00000 n 
-0000964338 00000 n 
-0000964402 00000 n 
-0000964465 00000 n 
-0000964529 00000 n 
-0000964591 00000 n 
-0000964655 00000 n 
-0000964718 00000 n 
-0000964782 00000 n 
-0000964846 00000 n 
-0000964910 00000 n 
-0000964974 00000 n 
-0000965037 00000 n 
-0000965100 00000 n 
-0000965163 00000 n 
-0000969632 00000 n 
-0000967664 00000 n 
-0000965383 00000 n 
-0000967780 00000 n 
-0000967908 00000 n 
-0000967972 00000 n 
-0000968036 00000 n 
-0000968100 00000 n 
-0000968164 00000 n 
-0000968228 00000 n 
-0000968292 00000 n 
-0000968356 00000 n 
-0000968420 00000 n 
-0000968484 00000 n 
-0000968548 00000 n 
-0000968612 00000 n 
-0000968676 00000 n 
-0000968740 00000 n 
-0000968804 00000 n 
-0000968867 00000 n 
-0000968931 00000 n 
-0000968994 00000 n 
-0000969058 00000 n 
-0000969120 00000 n 
-0000969184 00000 n 
-0000969248 00000 n 
-0000969312 00000 n 
-0000969376 00000 n 
-0000969440 00000 n 
-0000969504 00000 n 
-0000969568 00000 n 
-0000974158 00000 n 
-0000972124 00000 n 
-0000969747 00000 n 
-0000972240 00000 n 
-0000972368 00000 n 
-0000972432 00000 n 
-0000972496 00000 n 
-0000972559 00000 n 
-0000972623 00000 n 
-0000972686 00000 n 
-0000972750 00000 n 
-0000972814 00000 n 
-0000972878 00000 n 
-0000972942 00000 n 
-0000973006 00000 n 
-0000973070 00000 n 
-0000973134 00000 n 
-0000973198 00000 n 
-0000973262 00000 n 
-0000973326 00000 n 
-0000973390 00000 n 
-0000973454 00000 n 
-0000973518 00000 n 
-0000973582 00000 n 
-0000973646 00000 n 
-0000973710 00000 n 
-0000973774 00000 n 
-0000973838 00000 n 
-0000973902 00000 n 
-0000973966 00000 n 
-0000974030 00000 n 
-0000974094 00000 n 
-0000981409 00000 n 
-0000978417 00000 n 
-0000974273 00000 n 
-0000978533 00000 n 
-0000978725 00000 n 
-0000978789 00000 n 
-0000978853 00000 n 
-0000978917 00000 n 
-0000978981 00000 n 
-0000979045 00000 n 
-0000979109 00000 n 
-0000979173 00000 n 
-0000979237 00000 n 
-0000979301 00000 n 
-0000979365 00000 n 
-0000979429 00000 n 
-0000979493 00000 n 
-0000979557 00000 n 
-0000979621 00000 n 
-0000979685 00000 n 
-0000979749 00000 n 
-0000979813 00000 n 
-0000979877 00000 n 
-0000979941 00000 n 
-0000980005 00000 n 
-0000980069 00000 n 
-0000980132 00000 n 
-0000980196 00000 n 
-0000980259 00000 n 
-0000980323 00000 n 
-0000980385 00000 n 
-0000980449 00000 n 
-0000980513 00000 n 
-0000980577 00000 n 
-0000980641 00000 n 
-0000980705 00000 n 
-0000980769 00000 n 
-0000980833 00000 n 
-0000980897 00000 n 
-0000980961 00000 n 
-0000981025 00000 n 
-0000981089 00000 n 
-0000981153 00000 n 
-0000981217 00000 n 
-0000981281 00000 n 
-0000981345 00000 n 
-0000987062 00000 n 
-0000984456 00000 n 
-0000981552 00000 n 
-0000984572 00000 n 
-0000984699 00000 n 
-0000984762 00000 n 
-0000984826 00000 n 
-0000984890 00000 n 
-0000984954 00000 n 
-0000985018 00000 n 
-0000985082 00000 n 
-0000985146 00000 n 
-0000985210 00000 n 
-0000985274 00000 n 
-0000985338 00000 n 
-0000985402 00000 n 
-0000985466 00000 n 
-0000985530 00000 n 
-0000985594 00000 n 
-0000985658 00000 n 
-0000985722 00000 n 
-0000985786 00000 n 
-0000985850 00000 n 
-0000985914 00000 n 
-0000985977 00000 n 
-0000986041 00000 n 
-0000986104 00000 n 
-0000986168 00000 n 
-0000986230 00000 n 
-0000986294 00000 n 
-0000986358 00000 n 
-0000986422 00000 n 
-0000986486 00000 n 
-0000986550 00000 n 
-0000986614 00000 n 
-0000986678 00000 n 
-0000986742 00000 n 
-0000986806 00000 n 
-0000986870 00000 n 
-0000986934 00000 n 
-0000986998 00000 n 
-0001085864 00000 n 
-0000987605 00000 n 
-0000987177 00000 n 
-0001085672 00000 n 
-0003381430 00000 n 
-0001186483 00000 n 
-0001086440 00000 n 
-0001086004 00000 n 
-0001186291 00000 n 
-0001186904 00000 n 
-0001186724 00000 n 
-0001186623 00000 n 
-0001186840 00000 n 
-0001187386 00000 n 
-0001187207 00000 n 
-0001186946 00000 n 
-0001187677 00000 n 
-0001187561 00000 n 
-0001187460 00000 n 
-0001189075 00000 n 
-0001188640 00000 n 
-0001187719 00000 n 
-0001188756 00000 n 
-0001188820 00000 n 
-0001188947 00000 n 
-0001189011 00000 n 
-0001189472 00000 n 
-0001189292 00000 n 
-0001189191 00000 n 
-0001189408 00000 n 
-0003381555 00000 n 
-0001191478 00000 n 
-0001191323 00000 n 
-0001193879 00000 n 
-0001192245 00000 n 
-0001191168 00000 n 
-0001189514 00000 n 
-0001191927 00000 n 
-0001192054 00000 n 
-0001192181 00000 n 
-0001191703 00000 n 
-0001212264 00000 n 
-0001212455 00000 n 
-0001193763 00000 n 
-0001192431 00000 n 
-0001212136 00000 n 
-0001212391 00000 n 
-0001215106 00000 n 
-0001214672 00000 n 
-0001212609 00000 n 
-0001214788 00000 n 
-0001214915 00000 n 
-0001215042 00000 n 
-0001217904 00000 n 
-0001217724 00000 n 
-0001215236 00000 n 
-0001217840 00000 n 
-0001220644 00000 n 
-0001220464 00000 n 
-0001218048 00000 n 
-0001220580 00000 n 
-0001223430 00000 n 
-0001222996 00000 n 
-0001220774 00000 n 
-0001223112 00000 n 
-0001223239 00000 n 
-0001223366 00000 n 
-0003381680 00000 n 
-0001226266 00000 n 
-0001225959 00000 n 
-0001223560 00000 n 
-0001226075 00000 n 
-0001226202 00000 n 
-0001228804 00000 n 
-0001231046 00000 n 
-0001229022 00000 n 
-0001228667 00000 n 
-0001226410 00000 n 
-0001228958 00000 n 
-0001240663 00000 n 
-0001239780 00000 n 
-0001239928 00000 n 
-0001240233 00000 n 
-0001240382 00000 n 
-0001242768 00000 n 
-0001240727 00000 n 
-0001230873 00000 n 
-0001229223 00000 n 
-0001240535 00000 n 
-0001240081 00000 n 
-0001235365 00000 n 
-0001235483 00000 n 
-0001235531 00000 n 
-0001235954 00000 n 
-0001235977 00000 n 
-0001236327 00000 n 
-0001239757 00000 n 
-0001333584 00000 n 
-0001242922 00000 n 
-0001243138 00000 n 
-0001242622 00000 n 
-0001240915 00000 n 
-0001243074 00000 n 
-0001337715 00000 n 
-0001338774 00000 n 
-0001245024 00000 n 
-0001245242 00000 n 
-0001244887 00000 n 
-0001243254 00000 n 
-0001245178 00000 n 
-0001337588 00000 n 
-0001247236 00000 n 
-0001247056 00000 n 
-0001245358 00000 n 
-0001247172 00000 n 
-0003381805 00000 n 
-0001248923 00000 n 
-0001248743 00000 n 
-0001247380 00000 n 
-0001248859 00000 n 
-0001250343 00000 n 
-0001250036 00000 n 
-0001249039 00000 n 
-0001250152 00000 n 
-0001250279 00000 n 
-0001252703 00000 n 
-0001252858 00000 n 
-0001253267 00000 n 
-0001252557 00000 n 
-0001250473 00000 n 
-0001253012 00000 n 
-0001253076 00000 n 
-0001253139 00000 n 
-0001253203 00000 n 
-0001343038 00000 n 
-0001254661 00000 n 
-0001254353 00000 n 
-0001253454 00000 n 
-0001254469 00000 n 
-0001254533 00000 n 
-0001254597 00000 n 
-0001255876 00000 n 
-0001255696 00000 n 
-0001254777 00000 n 
-0001255812 00000 n 
-0001257751 00000 n 
-0001258415 00000 n 
-0001257614 00000 n 
-0001255992 00000 n 
-0001257906 00000 n 
-0001257970 00000 n 
-0001258097 00000 n 
-0001258161 00000 n 
-0001258225 00000 n 
-0001258287 00000 n 
-0001258351 00000 n 
-0003381930 00000 n 
-0001349759 00000 n 
-0001260985 00000 n 
-0001261328 00000 n 
-0001260848 00000 n 
-0001258545 00000 n 
-0001261137 00000 n 
-0001261264 00000 n 
-0001271902 00000 n 
-0001262722 00000 n 
-0001272030 00000 n 
-0001262606 00000 n 
-0001261458 00000 n 
-0001271774 00000 n 
-0001271966 00000 n 
-0001266514 00000 n 
-0001266632 00000 n 
-0001266680 00000 n 
-0001267125 00000 n 
-0001267148 00000 n 
-0001267542 00000 n 
-0001271751 00000 n 
-0001273306 00000 n 
-0001273126 00000 n 
-0001272176 00000 n 
-0001273242 00000 n 
-0001277402 00000 n 
-0001275061 00000 n 
-0001274817 00000 n 
-0001273422 00000 n 
-0001274933 00000 n 
-0001274997 00000 n 
-0001277097 00000 n 
-0001277250 00000 n 
-0001278018 00000 n 
-0001276942 00000 n 
-0001275177 00000 n 
-0001277570 00000 n 
-0001277634 00000 n 
-0001277698 00000 n 
-0001277762 00000 n 
-0001277826 00000 n 
-0001277890 00000 n 
-0001277954 00000 n 
-0001356260 00000 n 
-0001280226 00000 n 
-0001279982 00000 n 
-0001278190 00000 n 
-0001280098 00000 n 
-0001280162 00000 n 
-0003382055 00000 n 
-0001281733 00000 n 
-0001281427 00000 n 
-0001280356 00000 n 
-0001281543 00000 n 
-0001281607 00000 n 
-0001281671 00000 n 
-0001283064 00000 n 
-0001282820 00000 n 
-0001281849 00000 n 
-0001282936 00000 n 
-0001283000 00000 n 
-0001284785 00000 n 
-0001284478 00000 n 
-0001283180 00000 n 
-0001284594 00000 n 
-0001284658 00000 n 
-0001284721 00000 n 
-0001286153 00000 n 
-0001285973 00000 n 
-0001284901 00000 n 
-0001286089 00000 n 
-0001287713 00000 n 
-0001287533 00000 n 
-0001286255 00000 n 
-0001287649 00000 n 
-0001288722 00000 n 
-0001288542 00000 n 
-0001287829 00000 n 
-0001288658 00000 n 
-0003382180 00000 n 
-0001289777 00000 n 
-0001289597 00000 n 
-0001288824 00000 n 
-0001289713 00000 n 
-0001292370 00000 n 
-0001292719 00000 n 
-0001292233 00000 n 
-0001289893 00000 n 
-0001292528 00000 n 
-0001292655 00000 n 
-0001362566 00000 n 
-0001294771 00000 n 
-0001294271 00000 n 
-0001292863 00000 n 
-0001294387 00000 n 
-0001294451 00000 n 
-0001294515 00000 n 
-0001294579 00000 n 
-0001294643 00000 n 
-0001294707 00000 n 
-0001296583 00000 n 
-0001296925 00000 n 
-0001296446 00000 n 
-0001294901 00000 n 
-0001296734 00000 n 
-0001296861 00000 n 
-0001363842 00000 n 
-0001298450 00000 n 
-0001298270 00000 n 
-0001297069 00000 n 
-0001298386 00000 n 
-0001300020 00000 n 
-0001300507 00000 n 
-0001299883 00000 n 
-0001298623 00000 n 
-0001300187 00000 n 
-0001300251 00000 n 
-0001300315 00000 n 
-0001300379 00000 n 
-0001300443 00000 n 
-0003382305 00000 n 
-0001302367 00000 n 
-0001301931 00000 n 
-0001300679 00000 n 
+0000849770 00000 n 
+0000849834 00000 n 
+0000849898 00000 n 
+0000849962 00000 n 
+0000850026 00000 n 
+0000850090 00000 n 
+0000850154 00000 n 
+0000855218 00000 n 
+0000852995 00000 n 
+0000850333 00000 n 
+0000853111 00000 n 
+0000853300 00000 n 
+0000853364 00000 n 
+0000853428 00000 n 
+0000853492 00000 n 
+0000853556 00000 n 
+0000853620 00000 n 
+0000853684 00000 n 
+0000853748 00000 n 
+0000853812 00000 n 
+0000853876 00000 n 
+0000853940 00000 n 
+0000854004 00000 n 
+0000854068 00000 n 
+0000854132 00000 n 
+0000854196 00000 n 
+0000854260 00000 n 
+0000854324 00000 n 
+0000854388 00000 n 
+0000854452 00000 n 
+0000854516 00000 n 
+0000854580 00000 n 
+0000854644 00000 n 
+0000854708 00000 n 
+0000854772 00000 n 
+0000854836 00000 n 
+0000854899 00000 n 
+0000854963 00000 n 
+0000855026 00000 n 
+0003357120 00000 n 
+0000857459 00000 n 
+0000857152 00000 n 
+0000855347 00000 n 
+0000857268 00000 n 
+0000857395 00000 n 
+0000859792 00000 n 
+0000860258 00000 n 
+0000859655 00000 n 
+0000857575 00000 n 
+0000859941 00000 n 
+0000860068 00000 n 
+0000860194 00000 n 
+0000862920 00000 n 
+0000863258 00000 n 
+0000862783 00000 n 
+0000860388 00000 n 
+0000863067 00000 n 
+0000863194 00000 n 
+0000865618 00000 n 
+0000865957 00000 n 
+0000865481 00000 n 
+0000863402 00000 n 
+0000865766 00000 n 
+0000865893 00000 n 
+0000868550 00000 n 
+0000868243 00000 n 
+0000866087 00000 n 
+0000868359 00000 n 
+0000868486 00000 n 
+0000870934 00000 n 
+0000871274 00000 n 
+0000870797 00000 n 
+0000868666 00000 n 
+0000871083 00000 n 
+0000871210 00000 n 
+0003357245 00000 n 
+0000873886 00000 n 
+0000873706 00000 n 
+0000871404 00000 n 
+0000873822 00000 n 
+0000876636 00000 n 
+0000876329 00000 n 
+0000874002 00000 n 
+0000876445 00000 n 
+0000876572 00000 n 
+0000879265 00000 n 
+0000879412 00000 n 
+0000879715 00000 n 
+0000879932 00000 n 
+0000879101 00000 n 
+0000876766 00000 n 
+0000879868 00000 n 
+0000879564 00000 n 
+0001058904 00000 n 
+0001159523 00000 n 
+0000882608 00000 n 
+0000882428 00000 n 
+0000880034 00000 n 
+0000882544 00000 n 
+0000889236 00000 n 
+0000884719 00000 n 
+0000889834 00000 n 
+0000884582 00000 n 
+0000882724 00000 n 
+0000889390 00000 n 
+0000889516 00000 n 
+0000889642 00000 n 
+0000889770 00000 n 
+0000887033 00000 n 
+0000887165 00000 n 
+0000887620 00000 n 
+0000887213 00000 n 
+0000887597 00000 n 
+0000897343 00000 n 
+0000891535 00000 n 
+0000897500 00000 n 
+0000894350 00000 n 
+0000897975 00000 n 
+0000891389 00000 n 
+0000889994 00000 n 
+0000897655 00000 n 
+0000897783 00000 n 
+0000897911 00000 n 
+0003357370 00000 n 
+0000892176 00000 n 
+0000892308 00000 n 
+0000892734 00000 n 
+0000892356 00000 n 
+0000892712 00000 n 
+0000895160 00000 n 
+0000895292 00000 n 
+0000895728 00000 n 
+0000895340 00000 n 
+0000895706 00000 n 
+0000905736 00000 n 
+0000899536 00000 n 
+0000905890 00000 n 
+0000902691 00000 n 
+0000906362 00000 n 
+0000899390 00000 n 
+0000898150 00000 n 
+0000906043 00000 n 
+0000906171 00000 n 
+0000906299 00000 n 
+0000900486 00000 n 
+0000900618 00000 n 
+0000901076 00000 n 
+0000900666 00000 n 
+0000901054 00000 n 
+0000903542 00000 n 
+0000903674 00000 n 
+0000904120 00000 n 
+0000903722 00000 n 
+0000904098 00000 n 
+0000908338 00000 n 
+0000908487 00000 n 
+0000908902 00000 n 
+0000908192 00000 n 
+0000906523 00000 n 
+0000908646 00000 n 
+0000908710 00000 n 
+0000908774 00000 n 
+0000908838 00000 n 
+0000928805 00000 n 
+0000910582 00000 n 
+0000911123 00000 n 
+0000910445 00000 n 
+0000909075 00000 n 
+0000910740 00000 n 
+0000910804 00000 n 
+0000910868 00000 n 
+0000910932 00000 n 
+0000910996 00000 n 
+0000911059 00000 n 
+0000930165 00000 n 
+0000912532 00000 n 
+0000912226 00000 n 
+0000911239 00000 n 
+0000912342 00000 n 
+0000912406 00000 n 
+0000912469 00000 n 
+0000914080 00000 n 
+0000916516 00000 n 
+0000916675 00000 n 
+0000914485 00000 n 
+0000913943 00000 n 
+0000912648 00000 n 
+0000914229 00000 n 
+0000914293 00000 n 
+0000914357 00000 n 
+0000914421 00000 n 
+0000960825 00000 n 
+0001059660 00000 n 
+0000917279 00000 n 
+0000916370 00000 n 
+0000914601 00000 n 
+0000916834 00000 n 
+0000916898 00000 n 
+0000917025 00000 n 
+0000917151 00000 n 
+0000917215 00000 n 
+0003357495 00000 n 
+0000935590 00000 n 
+0000951765 00000 n 
+0000919656 00000 n 
+0000919476 00000 n 
+0000917437 00000 n 
+0000919592 00000 n 
+0000922314 00000 n 
+0000922463 00000 n 
+0000922618 00000 n 
+0000922835 00000 n 
+0000922159 00000 n 
+0000919786 00000 n 
+0000922771 00000 n 
+0000925416 00000 n 
+0000925632 00000 n 
+0000925279 00000 n 
+0000922979 00000 n 
+0000925568 00000 n 
+0000927424 00000 n 
+0000927244 00000 n 
+0000925790 00000 n 
+0000927360 00000 n 
+0000928869 00000 n 
+0000928561 00000 n 
+0000927540 00000 n 
+0000928677 00000 n 
+0000930229 00000 n 
+0000929921 00000 n 
+0000928985 00000 n 
+0000930037 00000 n 
+0003357620 00000 n 
+0000938330 00000 n 
+0000935346 00000 n 
+0000930345 00000 n 
+0000935462 00000 n 
+0000935654 00000 n 
+0000935718 00000 n 
+0000935782 00000 n 
+0000935846 00000 n 
+0000935910 00000 n 
+0000935974 00000 n 
+0000936038 00000 n 
+0000936102 00000 n 
+0000936165 00000 n 
+0000936229 00000 n 
+0000936292 00000 n 
+0000936356 00000 n 
+0000936418 00000 n 
+0000936482 00000 n 
+0000936546 00000 n 
+0000936610 00000 n 
+0000936674 00000 n 
+0000936738 00000 n 
+0000936802 00000 n 
+0000936866 00000 n 
+0000936930 00000 n 
+0000936994 00000 n 
+0000937058 00000 n 
+0000937122 00000 n 
+0000937186 00000 n 
+0000937250 00000 n 
+0000937314 00000 n 
+0000937378 00000 n 
+0000937442 00000 n 
+0000937506 00000 n 
+0000937569 00000 n 
+0000937633 00000 n 
+0000937695 00000 n 
+0000937759 00000 n 
+0000937822 00000 n 
+0000937886 00000 n 
+0000937950 00000 n 
+0000938014 00000 n 
+0000938078 00000 n 
+0000938141 00000 n 
+0000938204 00000 n 
+0000938267 00000 n 
+0000942736 00000 n 
+0000940768 00000 n 
+0000938487 00000 n 
+0000940884 00000 n 
+0000941012 00000 n 
+0000941076 00000 n 
+0000941140 00000 n 
+0000941204 00000 n 
+0000941268 00000 n 
+0000941332 00000 n 
+0000941396 00000 n 
+0000941460 00000 n 
+0000941524 00000 n 
+0000941588 00000 n 
+0000941652 00000 n 
+0000941716 00000 n 
+0000941780 00000 n 
+0000941844 00000 n 
+0000941908 00000 n 
+0000941971 00000 n 
+0000942035 00000 n 
+0000942098 00000 n 
+0000942162 00000 n 
+0000942224 00000 n 
+0000942288 00000 n 
+0000942352 00000 n 
+0000942416 00000 n 
+0000942480 00000 n 
+0000942544 00000 n 
+0000942608 00000 n 
+0000942672 00000 n 
+0000947262 00000 n 
+0000945228 00000 n 
+0000942851 00000 n 
+0000945344 00000 n 
+0000945472 00000 n 
+0000945536 00000 n 
+0000945600 00000 n 
+0000945663 00000 n 
+0000945727 00000 n 
+0000945790 00000 n 
+0000945854 00000 n 
+0000945918 00000 n 
+0000945982 00000 n 
+0000946046 00000 n 
+0000946110 00000 n 
+0000946174 00000 n 
+0000946238 00000 n 
+0000946302 00000 n 
+0000946366 00000 n 
+0000946430 00000 n 
+0000946494 00000 n 
+0000946558 00000 n 
+0000946622 00000 n 
+0000946686 00000 n 
+0000946750 00000 n 
+0000946814 00000 n 
+0000946878 00000 n 
+0000946942 00000 n 
+0000947006 00000 n 
+0000947070 00000 n 
+0000947134 00000 n 
+0000947198 00000 n 
+0000954513 00000 n 
+0000951521 00000 n 
+0000947377 00000 n 
+0000951637 00000 n 
+0000951829 00000 n 
+0000951893 00000 n 
+0000951957 00000 n 
+0000952021 00000 n 
+0000952085 00000 n 
+0000952149 00000 n 
+0000952213 00000 n 
+0000952277 00000 n 
+0000952341 00000 n 
+0000952405 00000 n 
+0000952469 00000 n 
+0000952533 00000 n 
+0000952597 00000 n 
+0000952661 00000 n 
+0000952725 00000 n 
+0000952789 00000 n 
+0000952853 00000 n 
+0000952917 00000 n 
+0000952981 00000 n 
+0000953045 00000 n 
+0000953109 00000 n 
+0000953173 00000 n 
+0000953236 00000 n 
+0000953300 00000 n 
+0000953363 00000 n 
+0000953427 00000 n 
+0000953489 00000 n 
+0000953553 00000 n 
+0000953617 00000 n 
+0000953681 00000 n 
+0000953745 00000 n 
+0000953809 00000 n 
+0000953873 00000 n 
+0000953937 00000 n 
+0000954001 00000 n 
+0000954065 00000 n 
+0000954129 00000 n 
+0000954193 00000 n 
+0000954257 00000 n 
+0000954321 00000 n 
+0000954385 00000 n 
+0000954449 00000 n 
+0000960166 00000 n 
+0000957560 00000 n 
+0000954656 00000 n 
+0000957676 00000 n 
+0000957803 00000 n 
+0000957866 00000 n 
+0000957930 00000 n 
+0000957994 00000 n 
+0000958058 00000 n 
+0000958122 00000 n 
+0000958186 00000 n 
+0000958250 00000 n 
+0000958314 00000 n 
+0000958378 00000 n 
+0000958442 00000 n 
+0000958506 00000 n 
+0000958570 00000 n 
+0000958634 00000 n 
+0000958698 00000 n 
+0000958762 00000 n 
+0000958826 00000 n 
+0000958890 00000 n 
+0000958954 00000 n 
+0000959018 00000 n 
+0000959081 00000 n 
+0000959145 00000 n 
+0000959208 00000 n 
+0000959272 00000 n 
+0000959334 00000 n 
+0000959398 00000 n 
+0000959462 00000 n 
+0000959526 00000 n 
+0000959590 00000 n 
+0000959654 00000 n 
+0000959718 00000 n 
+0000959782 00000 n 
+0000959846 00000 n 
+0000959910 00000 n 
+0000959974 00000 n 
+0000960038 00000 n 
+0000960102 00000 n 
+0001058968 00000 n 
+0000960709 00000 n 
+0000960281 00000 n 
+0001058776 00000 n 
+0003357745 00000 n 
+0001159587 00000 n 
+0001059544 00000 n 
+0001059108 00000 n 
+0001159395 00000 n 
+0001160008 00000 n 
+0001159828 00000 n 
+0001159727 00000 n 
+0001159944 00000 n 
+0001160490 00000 n 
+0001160311 00000 n 
+0001160050 00000 n 
+0001160781 00000 n 
+0001160665 00000 n 
+0001160564 00000 n 
+0001162179 00000 n 
+0001161744 00000 n 
+0001160823 00000 n 
+0001161860 00000 n 
+0001161924 00000 n 
+0001162051 00000 n 
+0001162115 00000 n 
+0001162576 00000 n 
+0001162396 00000 n 
+0001162295 00000 n 
+0001162512 00000 n 
+0003357870 00000 n 
+0001164582 00000 n 
+0001164427 00000 n 
+0001166983 00000 n 
+0001165349 00000 n 
+0001164272 00000 n 
+0001162618 00000 n 
+0001165031 00000 n 
+0001165158 00000 n 
+0001165285 00000 n 
+0001164807 00000 n 
+0001185368 00000 n 
+0001185559 00000 n 
+0001166867 00000 n 
+0001165535 00000 n 
+0001185240 00000 n 
+0001185495 00000 n 
+0001188210 00000 n 
+0001187776 00000 n 
+0001185713 00000 n 
+0001187892 00000 n 
+0001188019 00000 n 
+0001188146 00000 n 
+0001191008 00000 n 
+0001190828 00000 n 
+0001188340 00000 n 
+0001190944 00000 n 
+0001193748 00000 n 
+0001193568 00000 n 
+0001191152 00000 n 
+0001193684 00000 n 
+0001196534 00000 n 
+0001196100 00000 n 
+0001193878 00000 n 
+0001196216 00000 n 
+0001196343 00000 n 
+0001196470 00000 n 
+0003357995 00000 n 
+0001199370 00000 n 
+0001199063 00000 n 
+0001196664 00000 n 
+0001199179 00000 n 
+0001199306 00000 n 
+0001201908 00000 n 
+0001204148 00000 n 
+0001202126 00000 n 
+0001201771 00000 n 
+0001199514 00000 n 
+0001202062 00000 n 
+0001211577 00000 n 
+0001210694 00000 n 
+0001210842 00000 n 
+0001211147 00000 n 
+0001211296 00000 n 
+0001213682 00000 n 
+0001211641 00000 n 
+0001203975 00000 n 
+0001202327 00000 n 
+0001211449 00000 n 
+0001210995 00000 n 
+0001208471 00000 n 
+0001208603 00000 n 
+0001209078 00000 n 
+0001208651 00000 n 
+0001209055 00000 n 
+0001301471 00000 n 
+0001213836 00000 n 
+0001214052 00000 n 
+0001213536 00000 n 
+0001211829 00000 n 
+0001213988 00000 n 
+0001305602 00000 n 
+0001306661 00000 n 
+0001215938 00000 n 
+0001216156 00000 n 
+0001215801 00000 n 
+0001214168 00000 n 
+0001216092 00000 n 
+0001305475 00000 n 
+0001218150 00000 n 
+0001217970 00000 n 
+0001216272 00000 n 
+0001218086 00000 n 
+0003358120 00000 n 
+0001219837 00000 n 
+0001219657 00000 n 
+0001218294 00000 n 
+0001219773 00000 n 
+0001221257 00000 n 
+0001220950 00000 n 
+0001219953 00000 n 
+0001221066 00000 n 
+0001221193 00000 n 
+0001223617 00000 n 
+0001223772 00000 n 
+0001224181 00000 n 
+0001223471 00000 n 
+0001221387 00000 n 
+0001223926 00000 n 
+0001223990 00000 n 
+0001224053 00000 n 
+0001224117 00000 n 
+0001310925 00000 n 
+0001225575 00000 n 
+0001225267 00000 n 
+0001224368 00000 n 
+0001225383 00000 n 
+0001225447 00000 n 
+0001225511 00000 n 
+0001226790 00000 n 
+0001226610 00000 n 
+0001225691 00000 n 
+0001226726 00000 n 
+0001228665 00000 n 
+0001229329 00000 n 
+0001228528 00000 n 
+0001226906 00000 n 
+0001228820 00000 n 
+0001228884 00000 n 
+0001229011 00000 n 
+0001229075 00000 n 
+0001229139 00000 n 
+0001229201 00000 n 
+0001229265 00000 n 
+0003358245 00000 n 
+0001317646 00000 n 
+0001231899 00000 n 
+0001232242 00000 n 
+0001231762 00000 n 
+0001229459 00000 n 
+0001232051 00000 n 
+0001232178 00000 n 
+0001239789 00000 n 
+0001233638 00000 n 
+0001239917 00000 n 
+0001233522 00000 n 
+0001232372 00000 n 
+0001239661 00000 n 
+0001239853 00000 n 
+0001237416 00000 n 
+0001237548 00000 n 
+0001238045 00000 n 
+0001237596 00000 n 
+0001238022 00000 n 
+0001241193 00000 n 
+0001241013 00000 n 
+0001240063 00000 n 
+0001241129 00000 n 
+0001245289 00000 n 
+0001242948 00000 n 
+0001242704 00000 n 
+0001241309 00000 n 
+0001242820 00000 n 
+0001242884 00000 n 
+0001244984 00000 n 
+0001245137 00000 n 
+0001245905 00000 n 
+0001244829 00000 n 
+0001243064 00000 n 
+0001245457 00000 n 
+0001245521 00000 n 
+0001245585 00000 n 
+0001245649 00000 n 
+0001245713 00000 n 
+0001245777 00000 n 
+0001245841 00000 n 
+0001324147 00000 n 
+0001248113 00000 n 
+0001247869 00000 n 
+0001246077 00000 n 
+0001247985 00000 n 
+0001248049 00000 n 
+0003358370 00000 n 
+0001249620 00000 n 
+0001249314 00000 n 
+0001248243 00000 n 
+0001249430 00000 n 
+0001249494 00000 n 
+0001249558 00000 n 
+0001250951 00000 n 
+0001250707 00000 n 
+0001249736 00000 n 
+0001250823 00000 n 
+0001250887 00000 n 
+0001252672 00000 n 
+0001252365 00000 n 
+0001251067 00000 n 
+0001252481 00000 n 
+0001252545 00000 n 
+0001252608 00000 n 
+0001254040 00000 n 
+0001253860 00000 n 
+0001252788 00000 n 
+0001253976 00000 n 
+0001255600 00000 n 
+0001255420 00000 n 
+0001254142 00000 n 
+0001255536 00000 n 
+0001256609 00000 n 
+0001256429 00000 n 
+0001255716 00000 n 
+0001256545 00000 n 
+0003358495 00000 n 
+0001257664 00000 n 
+0001257484 00000 n 
+0001256711 00000 n 
+0001257600 00000 n 
+0001260257 00000 n 
+0001260606 00000 n 
+0001260120 00000 n 
+0001257780 00000 n 
+0001260415 00000 n 
+0001260542 00000 n 
+0001330453 00000 n 
+0001262658 00000 n 
+0001262158 00000 n 
+0001260750 00000 n 
+0001262274 00000 n 
+0001262338 00000 n 
+0001262402 00000 n 
+0001262466 00000 n 
+0001262530 00000 n 
+0001262594 00000 n 
+0001264470 00000 n 
+0001264812 00000 n 
+0001264333 00000 n 
+0001262788 00000 n 
+0001264621 00000 n 
+0001264748 00000 n 
+0001331729 00000 n 
+0001266337 00000 n 
+0001266157 00000 n 
+0001264956 00000 n 
+0001266273 00000 n 
+0001267907 00000 n 
+0001268394 00000 n 
+0001267770 00000 n 
+0001266510 00000 n 
+0001268074 00000 n 
+0001268138 00000 n 
+0001268202 00000 n 
+0001268266 00000 n 
+0001268330 00000 n 
+0003358620 00000 n 
+0001270254 00000 n 
+0001269818 00000 n 
+0001268566 00000 n 
+0001269934 00000 n 
+0001269998 00000 n 
+0001270062 00000 n 
+0001270126 00000 n 
+0001270190 00000 n 
+0001272125 00000 n 
+0001274844 00000 n 
+0001272600 00000 n 
+0001271988 00000 n 
+0001270370 00000 n 
+0001272281 00000 n 
+0001272408 00000 n 
+0001272472 00000 n 
+0001272536 00000 n 
+0001335451 00000 n 
+0001275030 00000 n 
+0001275488 00000 n 
+0001278377 00000 n 
+0001275975 00000 n 
+0001274680 00000 n 
+0001272730 00000 n 
+0001275656 00000 n 
+0001275720 00000 n 
+0001275784 00000 n 
+0001275911 00000 n 
+0001275260 00000 n 
+0001278546 00000 n 
+0001278780 00000 n 
+0001278231 00000 n 
+0001276161 00000 n 
+0001278716 00000 n 
+0001280971 00000 n 
+0001281121 00000 n 
+0001281281 00000 n 
+0001284547 00000 n 
+0001282258 00000 n 
+0001280816 00000 n 
+0001278966 00000 n 
+0001281431 00000 n 
+0001281558 00000 n 
+0001281622 00000 n 
+0001281685 00000 n 
+0001281749 00000 n 
+0001281813 00000 n 
+0001281877 00000 n 
+0001281940 00000 n 
+0001282067 00000 n 
+0001282131 00000 n 
+0001282194 00000 n 
+0001336474 00000 n 
+0001284704 00000 n 
+0001285310 00000 n 
+0001284401 00000 n 
+0001282388 00000 n 
+0001284864 00000 n 
+0001284928 00000 n 
+0001284992 00000 n 
+0001285056 00000 n 
+0001285120 00000 n 
+0001285246 00000 n 
+0003358745 00000 n 
+0001338057 00000 n 
+0001287662 00000 n 
+0001287291 00000 n 
+0001285454 00000 n 
+0001287407 00000 n 
+0001287534 00000 n 
+0001287598 00000 n 
+0001290175 00000 n 
+0001289995 00000 n 
+0001287820 00000 n 
+0001290111 00000 n 
+0001292794 00000 n 
+0001292614 00000 n 
+0001290291 00000 n 
+0001292730 00000 n 
+0001295147 00000 n 
+0001294967 00000 n 
+0001292952 00000 n 
+0001295083 00000 n 
+0001296936 00000 n 
+0001296756 00000 n 
+0001295291 00000 n 
+0001296872 00000 n 
+0001304284 00000 n 
+0001301227 00000 n 
+0001297066 00000 n 
+0001301343 00000 n 
+0001301535 00000 n 
+0001301599 00000 n 
+0001301663 00000 n 
+0001301727 00000 n 
+0001301791 00000 n 
+0001301855 00000 n 
+0001301919 00000 n 
+0001301983 00000 n 
 0001302047 00000 n 
 0001302111 00000 n 
 0001302175 00000 n 
 0001302239 00000 n 
 0001302303 00000 n 
-0001304238 00000 n 
-0001306957 00000 n 
-0001304713 00000 n 
-0001304101 00000 n 
-0001302483 00000 n 
-0001304394 00000 n 
-0001304521 00000 n 
-0001304585 00000 n 
-0001304649 00000 n 
-0001367564 00000 n 
-0001307143 00000 n 
-0001307601 00000 n 
-0001310490 00000 n 
-0001308088 00000 n 
-0001306793 00000 n 
-0001304843 00000 n 
-0001307769 00000 n 
-0001307833 00000 n 
-0001307897 00000 n 
-0001308024 00000 n 
-0001307373 00000 n 
-0001310659 00000 n 
-0001310893 00000 n 
-0001310344 00000 n 
-0001308274 00000 n 
-0001310829 00000 n 
-0001313084 00000 n 
-0001313234 00000 n 
-0001313394 00000 n 
-0001316660 00000 n 
-0001314371 00000 n 
-0001312929 00000 n 
-0001311079 00000 n 
-0001313544 00000 n 
-0001313671 00000 n 
-0001313735 00000 n 
-0001313798 00000 n 
-0001313862 00000 n 
-0001313926 00000 n 
-0001313990 00000 n 
-0001314053 00000 n 
-0001314180 00000 n 
-0001314244 00000 n 
-0001314307 00000 n 
-0001368587 00000 n 
-0001316817 00000 n 
-0001317423 00000 n 
-0001316514 00000 n 
-0001314501 00000 n 
-0001316977 00000 n 
-0001317041 00000 n 
-0001317105 00000 n 
-0001317169 00000 n 
-0001317233 00000 n 
-0001317359 00000 n 
-0003382430 00000 n 
-0001370170 00000 n 
-0001319775 00000 n 
-0001319404 00000 n 
-0001317567 00000 n 
-0001319520 00000 n 
-0001319647 00000 n 
-0001319711 00000 n 
-0001322288 00000 n 
-0001322108 00000 n 
-0001319933 00000 n 
-0001322224 00000 n 
-0001324907 00000 n 
-0001324727 00000 n 
-0001322404 00000 n 
-0001324843 00000 n 
-0001327260 00000 n 
-0001327080 00000 n 
-0001325065 00000 n 
-0001327196 00000 n 
-0001329049 00000 n 
-0001328869 00000 n 
-0001327404 00000 n 
-0001328985 00000 n 
-0001336397 00000 n 
-0001333340 00000 n 
-0001329179 00000 n 
-0001333456 00000 n 
-0001333648 00000 n 
-0001333712 00000 n 
-0001333776 00000 n 
-0001333840 00000 n 
-0001333904 00000 n 
-0001333968 00000 n 
-0001334032 00000 n 
-0001334096 00000 n 
-0001334160 00000 n 
-0001334224 00000 n 
-0001334288 00000 n 
-0001334352 00000 n 
-0001334416 00000 n 
-0001334480 00000 n 
-0001334544 00000 n 
-0001334608 00000 n 
-0001334672 00000 n 
-0001334736 00000 n 
-0001334800 00000 n 
-0001334864 00000 n 
-0001334927 00000 n 
-0001334991 00000 n 
-0001335054 00000 n 
-0001335118 00000 n 
-0001335181 00000 n 
-0001335245 00000 n 
-0001335309 00000 n 
-0001335373 00000 n 
-0001335437 00000 n 
-0001335501 00000 n 
-0001335565 00000 n 
-0001335629 00000 n 
-0001335693 00000 n 
-0001335757 00000 n 
-0001335821 00000 n 
-0001335885 00000 n 
-0001335949 00000 n 
-0001336013 00000 n 
-0001336077 00000 n 
-0001336141 00000 n 
-0001336205 00000 n 
-0001336269 00000 n 
-0001336333 00000 n 
-0003382555 00000 n 
-0001337779 00000 n 
-0001337344 00000 n 
-0001336540 00000 n 
-0001337460 00000 n 
-0001338838 00000 n 
-0001338530 00000 n 
-0001337895 00000 n 
-0001338646 00000 n 
-0001345595 00000 n 
-0001342794 00000 n 
-0001338954 00000 n 
-0001342910 00000 n 
-0001343102 00000 n 
-0001343166 00000 n 
-0001343230 00000 n 
-0001343294 00000 n 
-0001343358 00000 n 
-0001343422 00000 n 
-0001343486 00000 n 
-0001343550 00000 n 
-0001343614 00000 n 
-0001343678 00000 n 
-0001343742 00000 n 
-0001343806 00000 n 
-0001343870 00000 n 
-0001343933 00000 n 
-0001343997 00000 n 
-0001344060 00000 n 
-0001344124 00000 n 
-0001344187 00000 n 
-0001344251 00000 n 
-0001344315 00000 n 
-0001344379 00000 n 
-0001344443 00000 n 
-0001344507 00000 n 
-0001344571 00000 n 
-0001344635 00000 n 
-0001344699 00000 n 
-0001344763 00000 n 
-0001344827 00000 n 
-0001344891 00000 n 
-0001344955 00000 n 
-0001345019 00000 n 
-0001345083 00000 n 
-0001345147 00000 n 
-0001345211 00000 n 
-0001345275 00000 n 
-0001345339 00000 n 
-0001345403 00000 n 
-0001345467 00000 n 
-0001345531 00000 n 
-0001352251 00000 n 
-0001349515 00000 n 
-0001345738 00000 n 
-0001349631 00000 n 
-0001349823 00000 n 
-0001349887 00000 n 
-0001349951 00000 n 
-0001350015 00000 n 
-0001350079 00000 n 
-0001350143 00000 n 
-0001350207 00000 n 
-0001350271 00000 n 
-0001350335 00000 n 
-0001350399 00000 n 
-0001350463 00000 n 
-0001350527 00000 n 
-0001350591 00000 n 
-0001350655 00000 n 
-0001350719 00000 n 
-0001350783 00000 n 
-0001350847 00000 n 
-0001350911 00000 n 
-0001350975 00000 n 
-0001351039 00000 n 
-0001351103 00000 n 
-0001351167 00000 n 
-0001351231 00000 n 
-0001351295 00000 n 
-0001351359 00000 n 
-0001351423 00000 n 
-0001351487 00000 n 
-0001351550 00000 n 
-0001351614 00000 n 
-0001351677 00000 n 
-0001351741 00000 n 
-0001351803 00000 n 
-0001351867 00000 n 
-0001351931 00000 n 
-0001351995 00000 n 
-0001352059 00000 n 
-0001352123 00000 n 
-0001352187 00000 n 
-0001358688 00000 n 
-0001356016 00000 n 
-0001352394 00000 n 
-0001356132 00000 n 
-0001356324 00000 n 
-0001356388 00000 n 
-0001356452 00000 n 
-0001356516 00000 n 
-0001356580 00000 n 
-0001356644 00000 n 
-0001356708 00000 n 
-0001356772 00000 n 
-0001356835 00000 n 
-0001356899 00000 n 
-0001356962 00000 n 
-0001357026 00000 n 
-0001357089 00000 n 
-0001357153 00000 n 
-0001357217 00000 n 
-0001357281 00000 n 
-0001357345 00000 n 
-0001357409 00000 n 
-0001357473 00000 n 
-0001357537 00000 n 
-0001357601 00000 n 
-0001357665 00000 n 
-0001357729 00000 n 
-0001357793 00000 n 
-0001357857 00000 n 
-0001357921 00000 n 
-0001357985 00000 n 
-0001358049 00000 n 
-0001358113 00000 n 
-0001358177 00000 n 
-0001358241 00000 n 
-0001358305 00000 n 
-0001358369 00000 n 
-0001358433 00000 n 
-0001358497 00000 n 
-0001358561 00000 n 
-0001358625 00000 n 
-0001364993 00000 n 
-0001362322 00000 n 
-0001358831 00000 n 
-0001362438 00000 n 
-0001362630 00000 n 
-0001362694 00000 n 
-0001362757 00000 n 
-0001362821 00000 n 
-0001362883 00000 n 
-0001362947 00000 n 
-0001363011 00000 n 
-0001363075 00000 n 
-0001363139 00000 n 
-0001363203 00000 n 
-0001363267 00000 n 
-0001363331 00000 n 
-0001363395 00000 n 
-0001363459 00000 n 
-0001363523 00000 n 
-0001363587 00000 n 
-0001363651 00000 n 
-0001363715 00000 n 
-0001363905 00000 n 
-0001363969 00000 n 
-0001364033 00000 n 
-0001364097 00000 n 
-0001364161 00000 n 
-0001364225 00000 n 
-0001364289 00000 n 
-0001364353 00000 n 
-0001364417 00000 n 
-0001364481 00000 n 
-0001364545 00000 n 
-0001364609 00000 n 
-0001364673 00000 n 
-0001364737 00000 n 
-0001364801 00000 n 
-0001364865 00000 n 
-0001364929 00000 n 
-0003382680 00000 n 
-0001368651 00000 n 
-0001367320 00000 n 
-0001365136 00000 n 
-0001367436 00000 n 
-0001367628 00000 n 
-0001367692 00000 n 
-0001367755 00000 n 
-0001367819 00000 n 
-0001367883 00000 n 
-0001367947 00000 n 
-0001368011 00000 n 
-0001368075 00000 n 
-0001368139 00000 n 
-0001368203 00000 n 
-0001368267 00000 n 
-0001368331 00000 n 
-0001368395 00000 n 
-0001368459 00000 n 
-0001370234 00000 n 
-0001369800 00000 n 
-0001368808 00000 n 
-0001369916 00000 n 
-0001370043 00000 n 
-0001372138 00000 n 
-0001371831 00000 n 
-0001370350 00000 n 
-0001371947 00000 n 
-0001372074 00000 n 
-0001374382 00000 n 
-0001374075 00000 n 
-0001372254 00000 n 
-0001374191 00000 n 
-0001374318 00000 n 
-0001376995 00000 n 
-0001376562 00000 n 
-0001374555 00000 n 
-0001376678 00000 n 
-0001376805 00000 n 
-0001376931 00000 n 
-0001379456 00000 n 
-0001379276 00000 n 
-0001377125 00000 n 
-0001379392 00000 n 
-0003382805 00000 n 
-0001381375 00000 n 
-0001381195 00000 n 
-0001379572 00000 n 
-0001381311 00000 n 
-0001382871 00000 n 
-0001382691 00000 n 
-0001381548 00000 n 
-0001382807 00000 n 
-0001385394 00000 n 
-0001385087 00000 n 
-0001382987 00000 n 
-0001385203 00000 n 
-0001385330 00000 n 
-0001387792 00000 n 
-0001387360 00000 n 
-0001385538 00000 n 
-0001387476 00000 n 
-0001387602 00000 n 
-0001387729 00000 n 
-0001389485 00000 n 
-0001389305 00000 n 
-0001387993 00000 n 
-0001389421 00000 n 
-0001391748 00000 n 
-0001392240 00000 n 
-0001391611 00000 n 
-0001389601 00000 n 
-0001391922 00000 n 
-0001392049 00000 n 
-0001392176 00000 n 
-0003382930 00000 n 
-0001395069 00000 n 
-0001394571 00000 n 
-0001392426 00000 n 
-0001394687 00000 n 
-0001394814 00000 n 
-0001394941 00000 n 
-0001395005 00000 n 
-0001397316 00000 n 
-0001398106 00000 n 
-0001397179 00000 n 
-0001395199 00000 n 
-0001397466 00000 n 
-0001397530 00000 n 
-0001397594 00000 n 
-0001397658 00000 n 
-0001397722 00000 n 
-0001397786 00000 n 
-0001397850 00000 n 
-0001397914 00000 n 
-0001397978 00000 n 
-0001398042 00000 n 
-0001400225 00000 n 
-0001400525 00000 n 
-0001401086 00000 n 
-0001400061 00000 n 
-0001398222 00000 n 
-0001400831 00000 n 
-0001400895 00000 n 
-0001401022 00000 n 
-0001400375 00000 n 
-0001400678 00000 n 
-0001403220 00000 n 
-0001403561 00000 n 
-0001403083 00000 n 
-0001401230 00000 n 
-0001403370 00000 n 
-0001403497 00000 n 
-0001405309 00000 n 
-0001405129 00000 n 
-0001403705 00000 n 
-0001405245 00000 n 
-0001406783 00000 n 
-0001406603 00000 n 
-0001405411 00000 n 
-0001406719 00000 n 
-0003383055 00000 n 
-0001408294 00000 n 
-0001408114 00000 n 
-0001406885 00000 n 
-0001408230 00000 n 
-0001410385 00000 n 
-0001410726 00000 n 
-0001410248 00000 n 
-0001408396 00000 n 
-0001410535 00000 n 
-0001410662 00000 n 
-0001413324 00000 n 
-0001412765 00000 n 
-0001410856 00000 n 
-0001412881 00000 n 
-0001413008 00000 n 
-0001413135 00000 n 
-0001413262 00000 n 
-0001415265 00000 n 
-0001418202 00000 n 
-0001415735 00000 n 
-0001415128 00000 n 
-0001413482 00000 n 
-0001415418 00000 n 
-0001415545 00000 n 
-0001415672 00000 n 
-0001418830 00000 n 
-0001418056 00000 n 
-0001415879 00000 n 
-0001418512 00000 n 
-0001418639 00000 n 
-0001418357 00000 n 
-0001418766 00000 n 
-0001421358 00000 n 
-0001421571 00000 n 
-0001421221 00000 n 
-0001418974 00000 n 
-0001421507 00000 n 
-0003383180 00000 n 
-0001424390 00000 n 
-0001423827 00000 n 
-0001421701 00000 n 
-0001423943 00000 n 
-0001424070 00000 n 
-0001424134 00000 n 
-0001424198 00000 n 
-0001424262 00000 n 
-0001424326 00000 n 
-0001426404 00000 n 
-0001426160 00000 n 
-0001424534 00000 n 
-0001426276 00000 n 
-0001426340 00000 n 
-0001428360 00000 n 
-0001427926 00000 n 
-0001426520 00000 n 
-0001428042 00000 n 
-0001428296 00000 n 
-0001430673 00000 n 
-0001430240 00000 n 
-0001428476 00000 n 
-0001430356 00000 n 
-0001430483 00000 n 
-0001430609 00000 n 
-0001433240 00000 n 
-0001435539 00000 n 
-0001433587 00000 n 
-0001433103 00000 n 
-0001430874 00000 n 
-0001433397 00000 n 
-0001433523 00000 n 
-0001442402 00000 n 
-0001443670 00000 n 
-0001442466 00000 n 
-0001435423 00000 n 
-0001433717 00000 n 
-0001442274 00000 n 
-0003383305 00000 n 
-0001437918 00000 n 
-0001438036 00000 n 
-0001438084 00000 n 
-0001438507 00000 n 
-0001438530 00000 n 
-0001438885 00000 n 
-0001442251 00000 n 
-0001475220 00000 n 
-0001443554 00000 n 
-0001442612 00000 n 
-0001474901 00000 n 
-0001475029 00000 n 
-0001475156 00000 n 
-0001477676 00000 n 
-0001477974 00000 n 
-0001478129 00000 n 
-0001478426 00000 n 
-0001478776 00000 n 
-0001477494 00000 n 
-0001475374 00000 n 
-0001478585 00000 n 
-0001478712 00000 n 
-0001477825 00000 n 
-0001478278 00000 n 
-0001480638 00000 n 
-0001480788 00000 n 
-0001481133 00000 n 
-0001480492 00000 n 
-0001478934 00000 n 
-0001480942 00000 n 
-0001481069 00000 n 
-0001483501 00000 n 
-0001483565 00000 n 
-0001483257 00000 n 
-0001481277 00000 n 
-0001483373 00000 n 
-0001486129 00000 n 
-0001486282 00000 n 
-0001486436 00000 n 
-0001486593 00000 n 
-0001487128 00000 n 
-0001485965 00000 n 
-0001483766 00000 n 
-0001486744 00000 n 
-0001486808 00000 n 
-0001486872 00000 n 
-0001486936 00000 n 
-0001487000 00000 n 
-0001487064 00000 n 
-0001531355 00000 n 
-0001540881 00000 n 
-0001543200 00000 n 
-0001544270 00000 n 
-0001488833 00000 n 
-0001489178 00000 n 
-0001488696 00000 n 
-0001487315 00000 n 
-0001488986 00000 n 
-0001489050 00000 n 
-0001489114 00000 n 
-0003383430 00000 n 
-0001490865 00000 n 
-0001490685 00000 n 
-0001489294 00000 n 
-0001490801 00000 n 
-0001492446 00000 n 
-0001492266 00000 n 
-0001490981 00000 n 
-0001492382 00000 n 
-0001494220 00000 n 
-0001494628 00000 n 
-0001494083 00000 n 
-0001492548 00000 n 
-0001494372 00000 n 
-0001494436 00000 n 
-0001494500 00000 n 
-0001494564 00000 n 
-0001545350 00000 n 
-0001496192 00000 n 
-0001495884 00000 n 
-0001494744 00000 n 
-0001496000 00000 n 
-0001496064 00000 n 
-0001496128 00000 n 
-0001497731 00000 n 
-0001497423 00000 n 
-0001496308 00000 n 
-0001497539 00000 n 
-0001497603 00000 n 
-0001497667 00000 n 
-0001499372 00000 n 
-0001499064 00000 n 
-0001497847 00000 n 
-0001499180 00000 n 
-0001499244 00000 n 
-0001499308 00000 n 
-0003383555 00000 n 
-0001500989 00000 n 
-0001501332 00000 n 
-0001500852 00000 n 
-0001499488 00000 n 
-0001501140 00000 n 
-0001501204 00000 n 
-0001501268 00000 n 
-0001506580 00000 n 
-0001502799 00000 n 
-0001502555 00000 n 
-0001501448 00000 n 
-0001502671 00000 n 
-0001502735 00000 n 
-0001506235 00000 n 
-0001504933 00000 n 
-0001504497 00000 n 
-0001502915 00000 n 
-0001504613 00000 n 
-0001504677 00000 n 
-0001504741 00000 n 
-0001504805 00000 n 
-0001504869 00000 n 
-0001506644 00000 n 
-0001506098 00000 n 
-0001505077 00000 n 
-0001506390 00000 n 
-0001506454 00000 n 
-0001507679 00000 n 
-0001507499 00000 n 
-0001506774 00000 n 
-0001507615 00000 n 
-0001509630 00000 n 
-0001510103 00000 n 
-0001509493 00000 n 
-0001507781 00000 n 
-0001509785 00000 n 
-0001509912 00000 n 
-0001509976 00000 n 
-0001510040 00000 n 
-0003383680 00000 n 
-0001511498 00000 n 
-0001511126 00000 n 
-0001510247 00000 n 
-0001511242 00000 n 
-0001511306 00000 n 
-0001511370 00000 n 
-0001511434 00000 n 
-0001513340 00000 n 
-0001513096 00000 n 
-0001511614 00000 n 
-0001513212 00000 n 
-0001513276 00000 n 
-0001514982 00000 n 
-0001514674 00000 n 
-0001513456 00000 n 
-0001514790 00000 n 
-0001514854 00000 n 
-0001514918 00000 n 
-0001517318 00000 n 
-0001516757 00000 n 
-0001515098 00000 n 
-0001516873 00000 n 
-0001516937 00000 n 
-0001517063 00000 n 
-0001517190 00000 n 
-0001517254 00000 n 
-0001519626 00000 n 
-0001519446 00000 n 
-0001517476 00000 n 
-0001519562 00000 n 
-0001522181 00000 n 
-0001522001 00000 n 
-0001519770 00000 n 
-0001522117 00000 n 
-0003383805 00000 n 
-0001524628 00000 n 
-0001524448 00000 n 
-0001522297 00000 n 
-0001524564 00000 n 
-0001525854 00000 n 
-0001525674 00000 n 
-0001524758 00000 n 
-0001525790 00000 n 
-0001534095 00000 n 
-0001531111 00000 n 
-0001525956 00000 n 
-0001531227 00000 n 
-0001531419 00000 n 
-0001531483 00000 n 
-0001531547 00000 n 
-0001531611 00000 n 
-0001531675 00000 n 
-0001531739 00000 n 
-0001531803 00000 n 
-0001531867 00000 n 
-0001531930 00000 n 
-0001531994 00000 n 
-0001532057 00000 n 
-0001532121 00000 n 
-0001532183 00000 n 
-0001532247 00000 n 
-0001532311 00000 n 
-0001532375 00000 n 
+0001302367 00000 n 
+0001302431 00000 n 
+0001302495 00000 n 
+0001302559 00000 n 
+0001302623 00000 n 
+0001302687 00000 n 
+0001302751 00000 n 
+0001302814 00000 n 
+0001302878 00000 n 
+0001302941 00000 n 
+0001303005 00000 n 
+0001303068 00000 n 
+0001303132 00000 n 
+0001303196 00000 n 
+0001303260 00000 n 
+0001303324 00000 n 
+0001303388 00000 n 
+0001303452 00000 n 
+0001303516 00000 n 
+0001303580 00000 n 
+0001303644 00000 n 
+0001303708 00000 n 
+0001303772 00000 n 
+0001303836 00000 n 
+0001303900 00000 n 
+0001303964 00000 n 
+0001304028 00000 n 
+0001304092 00000 n 
+0001304156 00000 n 
+0001304220 00000 n 
+0003358870 00000 n 
+0001305666 00000 n 
+0001305231 00000 n 
+0001304427 00000 n 
+0001305347 00000 n 
+0001306725 00000 n 
+0001306417 00000 n 
+0001305782 00000 n 
+0001306533 00000 n 
+0001313482 00000 n 
+0001310681 00000 n 
+0001306841 00000 n 
+0001310797 00000 n 
+0001310989 00000 n 
+0001311053 00000 n 
+0001311117 00000 n 
+0001311181 00000 n 
+0001311245 00000 n 
+0001311309 00000 n 
+0001311373 00000 n 
+0001311437 00000 n 
+0001311501 00000 n 
+0001311565 00000 n 
+0001311629 00000 n 
+0001311693 00000 n 
+0001311757 00000 n 
+0001311820 00000 n 
+0001311884 00000 n 
+0001311947 00000 n 
+0001312011 00000 n 
+0001312074 00000 n 
+0001312138 00000 n 
+0001312202 00000 n 
+0001312266 00000 n 
+0001312330 00000 n 
+0001312394 00000 n 
+0001312458 00000 n 
+0001312522 00000 n 
+0001312586 00000 n 
+0001312650 00000 n 
+0001312714 00000 n 
+0001312778 00000 n 
+0001312842 00000 n 
+0001312906 00000 n 
+0001312970 00000 n 
+0001313034 00000 n 
+0001313098 00000 n 
+0001313162 00000 n 
+0001313226 00000 n 
+0001313290 00000 n 
+0001313354 00000 n 
+0001313418 00000 n 
+0001320138 00000 n 
+0001317402 00000 n 
+0001313625 00000 n 
+0001317518 00000 n 
+0001317710 00000 n 
+0001317774 00000 n 
+0001317838 00000 n 
+0001317902 00000 n 
+0001317966 00000 n 
+0001318030 00000 n 
+0001318094 00000 n 
+0001318158 00000 n 
+0001318222 00000 n 
+0001318286 00000 n 
+0001318350 00000 n 
+0001318414 00000 n 
+0001318478 00000 n 
+0001318542 00000 n 
+0001318606 00000 n 
+0001318670 00000 n 
+0001318734 00000 n 
+0001318798 00000 n 
+0001318862 00000 n 
+0001318926 00000 n 
+0001318990 00000 n 
+0001319054 00000 n 
+0001319118 00000 n 
+0001319182 00000 n 
+0001319246 00000 n 
+0001319310 00000 n 
+0001319374 00000 n 
+0001319437 00000 n 
+0001319501 00000 n 
+0001319564 00000 n 
+0001319628 00000 n 
+0001319690 00000 n 
+0001319754 00000 n 
+0001319818 00000 n 
+0001319882 00000 n 
+0001319946 00000 n 
+0001320010 00000 n 
+0001320074 00000 n 
+0001326575 00000 n 
+0001323903 00000 n 
+0001320281 00000 n 
+0001324019 00000 n 
+0001324211 00000 n 
+0001324275 00000 n 
+0001324339 00000 n 
+0001324403 00000 n 
+0001324467 00000 n 
+0001324531 00000 n 
+0001324595 00000 n 
+0001324659 00000 n 
+0001324722 00000 n 
+0001324786 00000 n 
+0001324849 00000 n 
+0001324913 00000 n 
+0001324976 00000 n 
+0001325040 00000 n 
+0001325104 00000 n 
+0001325168 00000 n 
+0001325232 00000 n 
+0001325296 00000 n 
+0001325360 00000 n 
+0001325424 00000 n 
+0001325488 00000 n 
+0001325552 00000 n 
+0001325616 00000 n 
+0001325680 00000 n 
+0001325744 00000 n 
+0001325808 00000 n 
+0001325872 00000 n 
+0001325936 00000 n 
+0001326000 00000 n 
+0001326064 00000 n 
+0001326128 00000 n 
+0001326192 00000 n 
+0001326256 00000 n 
+0001326320 00000 n 
+0001326384 00000 n 
+0001326448 00000 n 
+0001326512 00000 n 
+0001332880 00000 n 
+0001330209 00000 n 
+0001326718 00000 n 
+0001330325 00000 n 
+0001330517 00000 n 
+0001330581 00000 n 
+0001330644 00000 n 
+0001330708 00000 n 
+0001330770 00000 n 
+0001330834 00000 n 
+0001330898 00000 n 
+0001330962 00000 n 
+0001331026 00000 n 
+0001331090 00000 n 
+0001331154 00000 n 
+0001331218 00000 n 
+0001331282 00000 n 
+0001331346 00000 n 
+0001331410 00000 n 
+0001331474 00000 n 
+0001331538 00000 n 
+0001331602 00000 n 
+0001331792 00000 n 
+0001331856 00000 n 
+0001331920 00000 n 
+0001331984 00000 n 
+0001332048 00000 n 
+0001332112 00000 n 
+0001332176 00000 n 
+0001332240 00000 n 
+0001332304 00000 n 
+0001332368 00000 n 
+0001332432 00000 n 
+0001332496 00000 n 
+0001332560 00000 n 
+0001332624 00000 n 
+0001332688 00000 n 
+0001332752 00000 n 
+0001332816 00000 n 
+0003358995 00000 n 
+0001336538 00000 n 
+0001335207 00000 n 
+0001333023 00000 n 
+0001335323 00000 n 
+0001335515 00000 n 
+0001335579 00000 n 
+0001335642 00000 n 
+0001335706 00000 n 
+0001335770 00000 n 
+0001335834 00000 n 
+0001335898 00000 n 
+0001335962 00000 n 
+0001336026 00000 n 
+0001336090 00000 n 
+0001336154 00000 n 
+0001336218 00000 n 
+0001336282 00000 n 
+0001336346 00000 n 
+0001338121 00000 n 
+0001337687 00000 n 
+0001336695 00000 n 
+0001337803 00000 n 
+0001337930 00000 n 
+0001340025 00000 n 
+0001339718 00000 n 
+0001338237 00000 n 
+0001339834 00000 n 
+0001339961 00000 n 
+0001342269 00000 n 
+0001341962 00000 n 
+0001340141 00000 n 
+0001342078 00000 n 
+0001342205 00000 n 
+0001344882 00000 n 
+0001344449 00000 n 
+0001342442 00000 n 
+0001344565 00000 n 
+0001344692 00000 n 
+0001344818 00000 n 
+0001347343 00000 n 
+0001347163 00000 n 
+0001345012 00000 n 
+0001347279 00000 n 
+0003359120 00000 n 
+0001349262 00000 n 
+0001349082 00000 n 
+0001347459 00000 n 
+0001349198 00000 n 
+0001350758 00000 n 
+0001350578 00000 n 
+0001349435 00000 n 
+0001350694 00000 n 
+0001353281 00000 n 
+0001352974 00000 n 
+0001350874 00000 n 
+0001353090 00000 n 
+0001353217 00000 n 
+0001355679 00000 n 
+0001355247 00000 n 
+0001353425 00000 n 
+0001355363 00000 n 
+0001355489 00000 n 
+0001355616 00000 n 
+0001357372 00000 n 
+0001357192 00000 n 
+0001355880 00000 n 
+0001357308 00000 n 
+0001359635 00000 n 
+0001360127 00000 n 
+0001359498 00000 n 
+0001357488 00000 n 
+0001359809 00000 n 
+0001359936 00000 n 
+0001360063 00000 n 
+0003359245 00000 n 
+0001362956 00000 n 
+0001362458 00000 n 
+0001360313 00000 n 
+0001362574 00000 n 
+0001362701 00000 n 
+0001362828 00000 n 
+0001362892 00000 n 
+0001365203 00000 n 
+0001365993 00000 n 
+0001365066 00000 n 
+0001363086 00000 n 
+0001365353 00000 n 
+0001365417 00000 n 
+0001365481 00000 n 
+0001365545 00000 n 
+0001365609 00000 n 
+0001365673 00000 n 
+0001365737 00000 n 
+0001365801 00000 n 
+0001365865 00000 n 
+0001365929 00000 n 
+0001368112 00000 n 
+0001368412 00000 n 
+0001368973 00000 n 
+0001367948 00000 n 
+0001366109 00000 n 
+0001368718 00000 n 
+0001368782 00000 n 
+0001368909 00000 n 
+0001368262 00000 n 
+0001368565 00000 n 
+0001371107 00000 n 
+0001371448 00000 n 
+0001370970 00000 n 
+0001369117 00000 n 
+0001371257 00000 n 
+0001371384 00000 n 
+0001373196 00000 n 
+0001373016 00000 n 
+0001371592 00000 n 
+0001373132 00000 n 
+0001374670 00000 n 
+0001374490 00000 n 
+0001373298 00000 n 
+0001374606 00000 n 
+0003359370 00000 n 
+0001376181 00000 n 
+0001376001 00000 n 
+0001374772 00000 n 
+0001376117 00000 n 
+0001378272 00000 n 
+0001378613 00000 n 
+0001378135 00000 n 
+0001376283 00000 n 
+0001378422 00000 n 
+0001378549 00000 n 
+0001381211 00000 n 
+0001380652 00000 n 
+0001378743 00000 n 
+0001380768 00000 n 
+0001380895 00000 n 
+0001381022 00000 n 
+0001381149 00000 n 
+0001383152 00000 n 
+0001386089 00000 n 
+0001383622 00000 n 
+0001383015 00000 n 
+0001381369 00000 n 
+0001383305 00000 n 
+0001383432 00000 n 
+0001383559 00000 n 
+0001386717 00000 n 
+0001385943 00000 n 
+0001383766 00000 n 
+0001386399 00000 n 
+0001386526 00000 n 
+0001386244 00000 n 
+0001386653 00000 n 
+0001389245 00000 n 
+0001389458 00000 n 
+0001389108 00000 n 
+0001386861 00000 n 
+0001389394 00000 n 
+0003359495 00000 n 
+0001392277 00000 n 
+0001391714 00000 n 
+0001389588 00000 n 
+0001391830 00000 n 
+0001391957 00000 n 
+0001392021 00000 n 
+0001392085 00000 n 
+0001392149 00000 n 
+0001392213 00000 n 
+0001394291 00000 n 
+0001394047 00000 n 
+0001392421 00000 n 
+0001394163 00000 n 
+0001394227 00000 n 
+0001396247 00000 n 
+0001395813 00000 n 
+0001394407 00000 n 
+0001395929 00000 n 
+0001396183 00000 n 
+0001398560 00000 n 
+0001398127 00000 n 
+0001396363 00000 n 
+0001398243 00000 n 
+0001398370 00000 n 
+0001398496 00000 n 
+0001401127 00000 n 
+0001403423 00000 n 
+0001401474 00000 n 
+0001400990 00000 n 
+0001398761 00000 n 
+0001401284 00000 n 
+0001401410 00000 n 
+0001408148 00000 n 
+0001409416 00000 n 
+0001408212 00000 n 
+0001403307 00000 n 
+0001401604 00000 n 
+0001408020 00000 n 
+0003359620 00000 n 
+0001405797 00000 n 
+0001405929 00000 n 
+0001406404 00000 n 
+0001405977 00000 n 
+0001406381 00000 n 
+0001440966 00000 n 
+0001409300 00000 n 
+0001408358 00000 n 
+0001440647 00000 n 
+0001440775 00000 n 
+0001440902 00000 n 
+0001443422 00000 n 
+0001443720 00000 n 
+0001443875 00000 n 
+0001444172 00000 n 
+0001444522 00000 n 
+0001443240 00000 n 
+0001441120 00000 n 
+0001444331 00000 n 
+0001444458 00000 n 
+0001443571 00000 n 
+0001444024 00000 n 
+0001446384 00000 n 
+0001446534 00000 n 
+0001446879 00000 n 
+0001446238 00000 n 
+0001444680 00000 n 
+0001446688 00000 n 
+0001446815 00000 n 
+0001449247 00000 n 
+0001449311 00000 n 
+0001449003 00000 n 
+0001447023 00000 n 
+0001449119 00000 n 
+0001451875 00000 n 
+0001452028 00000 n 
+0001452182 00000 n 
+0001452339 00000 n 
+0001452874 00000 n 
+0001451711 00000 n 
+0001449512 00000 n 
+0001452490 00000 n 
+0001452554 00000 n 
+0001452618 00000 n 
+0001452682 00000 n 
+0001452746 00000 n 
+0001452810 00000 n 
+0001497101 00000 n 
+0001506627 00000 n 
+0001508946 00000 n 
+0001510016 00000 n 
+0001454579 00000 n 
+0001454924 00000 n 
+0001454442 00000 n 
+0001453061 00000 n 
+0001454732 00000 n 
+0001454796 00000 n 
+0001454860 00000 n 
+0003359745 00000 n 
+0001456611 00000 n 
+0001456431 00000 n 
+0001455040 00000 n 
+0001456547 00000 n 
+0001458192 00000 n 
+0001458012 00000 n 
+0001456727 00000 n 
+0001458128 00000 n 
+0001459966 00000 n 
+0001460374 00000 n 
+0001459829 00000 n 
+0001458294 00000 n 
+0001460118 00000 n 
+0001460182 00000 n 
+0001460246 00000 n 
+0001460310 00000 n 
+0001511096 00000 n 
+0001461938 00000 n 
+0001461630 00000 n 
+0001460490 00000 n 
+0001461746 00000 n 
+0001461810 00000 n 
+0001461874 00000 n 
+0001463477 00000 n 
+0001463169 00000 n 
+0001462054 00000 n 
+0001463285 00000 n 
+0001463349 00000 n 
+0001463413 00000 n 
+0001465118 00000 n 
+0001464810 00000 n 
+0001463593 00000 n 
+0001464926 00000 n 
+0001464990 00000 n 
+0001465054 00000 n 
+0003359870 00000 n 
+0001466735 00000 n 
+0001467078 00000 n 
+0001466598 00000 n 
+0001465234 00000 n 
+0001466886 00000 n 
+0001466950 00000 n 
+0001467014 00000 n 
+0001472326 00000 n 
+0001468545 00000 n 
+0001468301 00000 n 
+0001467194 00000 n 
+0001468417 00000 n 
+0001468481 00000 n 
+0001471981 00000 n 
+0001470679 00000 n 
+0001470243 00000 n 
+0001468661 00000 n 
+0001470359 00000 n 
+0001470423 00000 n 
+0001470487 00000 n 
+0001470551 00000 n 
+0001470615 00000 n 
+0001472390 00000 n 
+0001471844 00000 n 
+0001470823 00000 n 
+0001472136 00000 n 
+0001472200 00000 n 
+0001473425 00000 n 
+0001473245 00000 n 
+0001472520 00000 n 
+0001473361 00000 n 
+0001475376 00000 n 
+0001475849 00000 n 
+0001475239 00000 n 
+0001473527 00000 n 
+0001475531 00000 n 
+0001475658 00000 n 
+0001475722 00000 n 
+0001475786 00000 n 
+0003359995 00000 n 
+0001477244 00000 n 
+0001476872 00000 n 
+0001475993 00000 n 
+0001476988 00000 n 
+0001477052 00000 n 
+0001477116 00000 n 
+0001477180 00000 n 
+0001479086 00000 n 
+0001478842 00000 n 
+0001477360 00000 n 
+0001478958 00000 n 
+0001479022 00000 n 
+0001480728 00000 n 
+0001480420 00000 n 
+0001479202 00000 n 
+0001480536 00000 n 
+0001480600 00000 n 
+0001480664 00000 n 
+0001483064 00000 n 
+0001482503 00000 n 
+0001480844 00000 n 
+0001482619 00000 n 
+0001482683 00000 n 
+0001482809 00000 n 
+0001482936 00000 n 
+0001483000 00000 n 
+0001485372 00000 n 
+0001485192 00000 n 
+0001483222 00000 n 
+0001485308 00000 n 
+0001487927 00000 n 
+0001487747 00000 n 
+0001485516 00000 n 
+0001487863 00000 n 
+0003360120 00000 n 
+0001490374 00000 n 
+0001490194 00000 n 
+0001488043 00000 n 
+0001490310 00000 n 
+0001491600 00000 n 
+0001491420 00000 n 
+0001490504 00000 n 
+0001491536 00000 n 
+0001499841 00000 n 
+0001496857 00000 n 
+0001491702 00000 n 
+0001496973 00000 n 
+0001497165 00000 n 
+0001497229 00000 n 
+0001497293 00000 n 
+0001497357 00000 n 
+0001497421 00000 n 
+0001497485 00000 n 
+0001497549 00000 n 
+0001497613 00000 n 
+0001497676 00000 n 
+0001497740 00000 n 
+0001497803 00000 n 
+0001497867 00000 n 
+0001497929 00000 n 
+0001497993 00000 n 
+0001498057 00000 n 
+0001498121 00000 n 
+0001498185 00000 n 
+0001498249 00000 n 
+0001498313 00000 n 
+0001498377 00000 n 
+0001498441 00000 n 
+0001498505 00000 n 
+0001498569 00000 n 
+0001498633 00000 n 
+0001498697 00000 n 
+0001498761 00000 n 
+0001498825 00000 n 
+0001498889 00000 n 
+0001498953 00000 n 
+0001499017 00000 n 
+0001499080 00000 n 
+0001499144 00000 n 
+0001499206 00000 n 
+0001499270 00000 n 
+0001499333 00000 n 
+0001499397 00000 n 
+0001499461 00000 n 
+0001499525 00000 n 
+0001499589 00000 n 
+0001499652 00000 n 
+0001499715 00000 n 
+0001499778 00000 n 
+0001505577 00000 n 
+0001502971 00000 n 
+0001499998 00000 n 
+0001503087 00000 n 
+0001503214 00000 n 
+0001503277 00000 n 
+0001503341 00000 n 
+0001503405 00000 n 
+0001503469 00000 n 
+0001503533 00000 n 
+0001503597 00000 n 
+0001503661 00000 n 
+0001503725 00000 n 
+0001503789 00000 n 
+0001503853 00000 n 
+0001503917 00000 n 
+0001503981 00000 n 
+0001504045 00000 n 
+0001504109 00000 n 
+0001504173 00000 n 
+0001504237 00000 n 
+0001504301 00000 n 
+0001504365 00000 n 
+0001504429 00000 n 
+0001504492 00000 n 
+0001504556 00000 n 
+0001504619 00000 n 
+0001504683 00000 n 
+0001504745 00000 n 
+0001504809 00000 n 
+0001504873 00000 n 
+0001504937 00000 n 
+0001505001 00000 n 
+0001505065 00000 n 
+0001505129 00000 n 
+0001505193 00000 n 
+0001505257 00000 n 
+0001505321 00000 n 
+0001505385 00000 n 
+0001505449 00000 n 
+0001505513 00000 n 
+0001506691 00000 n 
+0001506384 00000 n 
+0001505692 00000 n 
+0001506500 00000 n 
+0001507994 00000 n 
+0001507686 00000 n 
+0001506807 00000 n 
+0001507802 00000 n 
+0001507930 00000 n 
+0003360245 00000 n 
+0001509010 00000 n 
+0001508702 00000 n 
+0001508110 00000 n 
+0001508818 00000 n 
+0001510079 00000 n 
+0001509772 00000 n 
+0001509126 00000 n 
+0001509888 00000 n 
+0001511159 00000 n 
+0001510852 00000 n 
+0001510195 00000 n 
+0001510968 00000 n 
+0001511556 00000 n 
+0001511376 00000 n 
+0001511275 00000 n 
+0001511492 00000 n 
+0001513559 00000 n 
+0001513252 00000 n 
+0001511598 00000 n 
+0001513368 00000 n 
+0001513495 00000 n 
+0001515977 00000 n 
+0001515670 00000 n 
+0001513675 00000 n 
+0001515786 00000 n 
+0001515913 00000 n 
+0003360370 00000 n 
+0001518298 00000 n 
+0001518786 00000 n 
+0001518152 00000 n 
+0001516093 00000 n 
+0001518595 00000 n 
+0001518722 00000 n 
+0001518446 00000 n 
+0001521180 00000 n 
+0001520747 00000 n 
+0001518916 00000 n 
+0001520863 00000 n 
+0001520990 00000 n 
+0001521117 00000 n 
+0001523483 00000 n 
+0001523633 00000 n 
+0001523865 00000 n 
+0001523337 00000 n 
+0001521310 00000 n 
+0001523801 00000 n 
+0003350765 00000 n 
+0003350620 00000 n 
+0001525346 00000 n 
+0001525664 00000 n 
+0001525102 00000 n 
+0001524094 00000 n 
+0001525218 00000 n 
+0001525473 00000 n 
+0001525600 00000 n 
+0001527164 00000 n 
+0001526857 00000 n 
+0001525794 00000 n 
+0001526973 00000 n 
+0001527100 00000 n 
+0001528418 00000 n 
+0001528238 00000 n 
+0001527294 00000 n 
+0001528354 00000 n 
+0003360495 00000 n 
+0001529593 00000 n 
+0001529413 00000 n 
+0001528520 00000 n 
+0001529529 00000 n 
+0001530757 00000 n 
+0001530577 00000 n 
+0001529695 00000 n 
+0001530693 00000 n 
+0001532226 00000 n 
+0001535147 00000 n 
 0001532439 00000 n 
-0001532503 00000 n 
-0001532567 00000 n 
-0001532631 00000 n 
-0001532695 00000 n 
-0001532759 00000 n 
-0001532823 00000 n 
-0001532887 00000 n 
-0001532951 00000 n 
-0001533015 00000 n 
-0001533079 00000 n 
-0001533143 00000 n 
-0001533207 00000 n 
-0001533271 00000 n 
-0001533334 00000 n 
-0001533398 00000 n 
-0001533460 00000 n 
-0001533524 00000 n 
-0001533587 00000 n 
-0001533651 00000 n 
-0001533715 00000 n 
-0001533779 00000 n 
-0001533843 00000 n 
-0001533906 00000 n 
-0001533969 00000 n 
-0001534032 00000 n 
-0001539831 00000 n 
-0001537225 00000 n 
-0001534252 00000 n 
-0001537341 00000 n 
-0001537468 00000 n 
-0001537531 00000 n 
-0001537595 00000 n 
-0001537659 00000 n 
-0001537723 00000 n 
-0001537787 00000 n 
-0001537851 00000 n 
-0001537915 00000 n 
-0001537979 00000 n 
-0001538043 00000 n 
-0001538107 00000 n 
-0001538171 00000 n 
-0001538235 00000 n 
-0001538299 00000 n 
-0001538363 00000 n 
-0001538427 00000 n 
-0001538491 00000 n 
-0001538555 00000 n 
-0001538619 00000 n 
-0001538683 00000 n 
-0001538746 00000 n 
-0001538810 00000 n 
-0001538873 00000 n 
-0001538937 00000 n 
-0001538999 00000 n 
-0001539063 00000 n 
-0001539127 00000 n 
-0001539191 00000 n 
-0001539255 00000 n 
-0001539319 00000 n 
-0001539383 00000 n 
-0001539447 00000 n 
-0001539511 00000 n 
-0001539575 00000 n 
-0001539639 00000 n 
-0001539703 00000 n 
-0001539767 00000 n 
-0001540945 00000 n 
-0001540638 00000 n 
-0001539946 00000 n 
-0001540754 00000 n 
-0001542248 00000 n 
-0001541940 00000 n 
-0001541061 00000 n 
-0001542056 00000 n 
-0001542184 00000 n 
-0003383930 00000 n 
-0001543264 00000 n 
-0001542956 00000 n 
-0001542364 00000 n 
-0001543072 00000 n 
-0001544333 00000 n 
-0001544026 00000 n 
-0001543380 00000 n 
-0001544142 00000 n 
-0001545413 00000 n 
-0001545106 00000 n 
-0001544449 00000 n 
-0001545222 00000 n 
-0001545810 00000 n 
-0001545630 00000 n 
-0001545529 00000 n 
-0001545746 00000 n 
-0001547813 00000 n 
-0001547506 00000 n 
-0001545852 00000 n 
-0001547622 00000 n 
-0001547749 00000 n 
-0001550231 00000 n 
-0001549924 00000 n 
-0001547929 00000 n 
-0001550040 00000 n 
-0001550167 00000 n 
-0003384055 00000 n 
-0001552552 00000 n 
-0001553040 00000 n 
-0001552406 00000 n 
-0001550347 00000 n 
-0001552849 00000 n 
-0001552976 00000 n 
-0001552700 00000 n 
-0001555434 00000 n 
-0001555001 00000 n 
-0001553170 00000 n 
-0001555117 00000 n 
-0001555244 00000 n 
-0001555371 00000 n 
-0001557737 00000 n 
-0001557887 00000 n 
-0001558119 00000 n 
-0001557591 00000 n 
-0001555564 00000 n 
-0001558055 00000 n 
-0003374450 00000 n 
-0003374305 00000 n 
-0001559600 00000 n 
-0001559918 00000 n 
-0001559356 00000 n 
-0001558348 00000 n 
-0001559472 00000 n 
-0001559727 00000 n 
-0001559854 00000 n 
-0001561418 00000 n 
-0001561111 00000 n 
-0001560048 00000 n 
-0001561227 00000 n 
-0001561354 00000 n 
-0001562672 00000 n 
-0001562492 00000 n 
-0001561548 00000 n 
-0001562608 00000 n 
-0003384180 00000 n 
-0001563847 00000 n 
-0001563667 00000 n 
-0001562774 00000 n 
-0001563783 00000 n 
-0001565011 00000 n 
-0001564831 00000 n 
-0001563949 00000 n 
-0001564947 00000 n 
-0001566480 00000 n 
-0001569401 00000 n 
-0001566693 00000 n 
-0001566343 00000 n 
-0001565113 00000 n 
-0001566629 00000 n 
-0001594402 00000 n 
-0001570460 00000 n 
-0001569550 00000 n 
-0001569857 00000 n 
-0001570159 00000 n 
-0001570839 00000 n 
-0001569192 00000 n 
-0001566809 00000 n 
-0001570775 00000 n 
-0001569704 00000 n 
-0001570009 00000 n 
-0001570309 00000 n 
-0001570625 00000 n 
-0001595786 00000 n 
-0001600908 00000 n 
-0001626119 00000 n 
-0001627044 00000 n 
-0001573581 00000 n 
-0001573729 00000 n 
-0001573945 00000 n 
-0001573116 00000 n 
-0001571025 00000 n 
-0001573280 00000 n 
-0001573881 00000 n 
-0001573430 00000 n 
-0001628602 00000 n 
-0001575888 00000 n 
-0001575708 00000 n 
-0001574132 00000 n 
-0001575824 00000 n 
-0003384305 00000 n 
-0001577136 00000 n 
-0001576956 00000 n 
-0001576004 00000 n 
-0001577072 00000 n 
-0001578957 00000 n 
-0001578777 00000 n 
-0001577252 00000 n 
+0001532089 00000 n 
+0001530859 00000 n 
+0001532375 00000 n 
+0001560148 00000 n 
+0001536206 00000 n 
+0001535296 00000 n 
+0001535603 00000 n 
+0001535905 00000 n 
+0001536585 00000 n 
+0001534938 00000 n 
+0001532555 00000 n 
+0001536521 00000 n 
+0001535450 00000 n 
+0001535755 00000 n 
+0001536055 00000 n 
+0001536371 00000 n 
+0001561532 00000 n 
+0001566654 00000 n 
+0001591865 00000 n 
+0001592790 00000 n 
+0001539327 00000 n 
+0001539475 00000 n 
+0001539691 00000 n 
+0001538862 00000 n 
+0001536771 00000 n 
+0001539026 00000 n 
+0001539627 00000 n 
+0001539176 00000 n 
+0001594348 00000 n 
+0001541634 00000 n 
+0001541454 00000 n 
+0001539878 00000 n 
+0001541570 00000 n 
+0003360620 00000 n 
+0001542882 00000 n 
+0001542702 00000 n 
+0001541750 00000 n 
+0001542818 00000 n 
+0001544703 00000 n 
+0001544523 00000 n 
+0001542998 00000 n 
+0001544639 00000 n 
+0001545957 00000 n 
+0001545777 00000 n 
+0001544819 00000 n 
+0001545893 00000 n 
+0001547761 00000 n 
+0001547995 00000 n 
+0001547624 00000 n 
+0001546073 00000 n 
+0001547931 00000 n 
+0001550249 00000 n 
+0001550459 00000 n 
+0001550112 00000 n 
+0001548167 00000 n 
+0001550395 00000 n 
+0001599877 00000 n 
+0001553485 00000 n 
+0001552857 00000 n 
+0001550575 00000 n 
+0001552973 00000 n 
+0001553037 00000 n 
+0001553101 00000 n 
+0001553165 00000 n 
+0001553229 00000 n 
+0001553293 00000 n 
+0001553357 00000 n 
+0001553421 00000 n 
+0003360745 00000 n 
+0001555960 00000 n 
+0001555780 00000 n 
+0001553629 00000 n 
+0001555896 00000 n 
+0001558391 00000 n 
+0001558624 00000 n 
+0001558254 00000 n 
+0001556090 00000 n 
+0001558560 00000 n 
+0001560212 00000 n 
+0001559904 00000 n 
+0001558782 00000 n 
+0001560020 00000 n 
+0001561596 00000 n 
+0001561288 00000 n 
+0001560328 00000 n 
+0001561404 00000 n 
+0001569206 00000 n 
+0001566410 00000 n 
+0001561712 00000 n 
+0001566526 00000 n 
+0001566718 00000 n 
+0001566782 00000 n 
+0001566846 00000 n 
+0001566910 00000 n 
+0001566974 00000 n 
+0001567038 00000 n 
+0001567102 00000 n 
+0001567166 00000 n 
+0001567229 00000 n 
+0001567293 00000 n 
+0001567356 00000 n 
+0001567420 00000 n 
+0001567482 00000 n 
+0001567546 00000 n 
+0001567610 00000 n 
+0001567674 00000 n 
+0001567738 00000 n 
+0001567802 00000 n 
+0001567866 00000 n 
+0001567930 00000 n 
+0001567994 00000 n 
+0001568058 00000 n 
+0001568122 00000 n 
+0001568186 00000 n 
+0001568250 00000 n 
+0001568314 00000 n 
+0001568378 00000 n 
+0001568442 00000 n 
+0001568506 00000 n 
+0001568570 00000 n 
+0001568634 00000 n 
+0001568698 00000 n 
+0001568762 00000 n 
+0001568825 00000 n 
+0001568889 00000 n 
+0001568951 00000 n 
+0001569015 00000 n 
+0001569078 00000 n 
+0001569142 00000 n 
+0001574957 00000 n 
+0001572477 00000 n 
+0001569363 00000 n 
+0001572593 00000 n 
+0001572721 00000 n 
+0001572785 00000 n 
+0001572849 00000 n 
+0001572913 00000 n 
+0001572977 00000 n 
+0001573040 00000 n 
+0001573104 00000 n 
+0001573167 00000 n 
+0001573231 00000 n 
+0001573294 00000 n 
+0001573358 00000 n 
+0001573422 00000 n 
+0001573486 00000 n 
+0001573550 00000 n 
+0001573614 00000 n 
+0001573678 00000 n 
+0001573742 00000 n 
+0001573806 00000 n 
+0001573870 00000 n 
+0001573934 00000 n 
+0001573998 00000 n 
+0001574062 00000 n 
+0001574126 00000 n 
+0001574190 00000 n 
+0001574254 00000 n 
+0001574318 00000 n 
+0001574382 00000 n 
+0001574446 00000 n 
+0001574510 00000 n 
+0001574574 00000 n 
+0001574638 00000 n 
+0001574702 00000 n 
+0001574766 00000 n 
+0001574830 00000 n 
+0001574894 00000 n 
+0003360870 00000 n 
+0001580937 00000 n 
+0001578394 00000 n 
+0001575100 00000 n 
+0001578510 00000 n 
+0001578638 00000 n 
+0001578702 00000 n 
+0001578765 00000 n 
+0001578829 00000 n 
 0001578893 00000 n 
-0001580211 00000 n 
-0001580031 00000 n 
-0001579073 00000 n 
-0001580147 00000 n 
-0001582015 00000 n 
-0001582249 00000 n 
-0001581878 00000 n 
-0001580327 00000 n 
-0001582185 00000 n 
-0001584503 00000 n 
-0001584713 00000 n 
-0001584366 00000 n 
-0001582421 00000 n 
-0001584649 00000 n 
-0001634131 00000 n 
-0001587739 00000 n 
-0001587111 00000 n 
-0001584829 00000 n 
-0001587227 00000 n 
-0001587291 00000 n 
-0001587355 00000 n 
-0001587419 00000 n 
-0001587483 00000 n 
-0001587547 00000 n 
-0001587611 00000 n 
-0001587675 00000 n 
-0003384430 00000 n 
-0001590214 00000 n 
-0001590034 00000 n 
-0001587883 00000 n 
-0001590150 00000 n 
-0001592645 00000 n 
-0001592878 00000 n 
-0001592508 00000 n 
-0001590344 00000 n 
-0001592814 00000 n 
-0001594466 00000 n 
-0001594158 00000 n 
-0001593036 00000 n 
-0001594274 00000 n 
-0001595850 00000 n 
-0001595542 00000 n 
-0001594582 00000 n 
-0001595658 00000 n 
-0001603460 00000 n 
-0001600664 00000 n 
-0001595966 00000 n 
-0001600780 00000 n 
-0001600972 00000 n 
-0001601036 00000 n 
-0001601100 00000 n 
-0001601164 00000 n 
-0001601228 00000 n 
-0001601292 00000 n 
-0001601356 00000 n 
-0001601420 00000 n 
-0001601483 00000 n 
-0001601547 00000 n 
-0001601610 00000 n 
-0001601674 00000 n 
-0001601736 00000 n 
-0001601800 00000 n 
-0001601864 00000 n 
-0001601928 00000 n 
-0001601992 00000 n 
-0001602056 00000 n 
-0001602120 00000 n 
-0001602184 00000 n 
-0001602248 00000 n 
-0001602312 00000 n 
-0001602376 00000 n 
-0001602440 00000 n 
-0001602504 00000 n 
-0001602568 00000 n 
-0001602632 00000 n 
-0001602696 00000 n 
-0001602760 00000 n 
-0001602824 00000 n 
-0001602888 00000 n 
-0001602952 00000 n 
-0001603016 00000 n 
-0001603079 00000 n 
-0001603143 00000 n 
-0001603205 00000 n 
-0001603269 00000 n 
-0001603332 00000 n 
-0001603396 00000 n 
-0001609211 00000 n 
-0001606731 00000 n 
-0001603617 00000 n 
-0001606847 00000 n 
-0001606975 00000 n 
-0001607039 00000 n 
-0001607103 00000 n 
-0001607167 00000 n 
-0001607231 00000 n 
-0001607294 00000 n 
-0001607358 00000 n 
-0001607421 00000 n 
-0001607485 00000 n 
-0001607548 00000 n 
-0001607612 00000 n 
-0001607676 00000 n 
-0001607740 00000 n 
-0001607804 00000 n 
-0001607868 00000 n 
-0001607932 00000 n 
-0001607996 00000 n 
-0001608060 00000 n 
-0001608124 00000 n 
-0001608188 00000 n 
-0001608252 00000 n 
-0001608316 00000 n 
-0001608380 00000 n 
-0001608444 00000 n 
-0001608508 00000 n 
-0001608572 00000 n 
-0001608636 00000 n 
-0001608700 00000 n 
-0001608764 00000 n 
-0001608828 00000 n 
-0001608892 00000 n 
-0001608956 00000 n 
-0001609020 00000 n 
-0001609084 00000 n 
-0001609148 00000 n 
-0003384555 00000 n 
-0001615191 00000 n 
-0001612648 00000 n 
-0001609354 00000 n 
-0001612764 00000 n 
-0001612892 00000 n 
-0001612956 00000 n 
-0001613019 00000 n 
-0001613083 00000 n 
-0001613147 00000 n 
-0001613211 00000 n 
-0001613274 00000 n 
-0001613338 00000 n 
-0001613401 00000 n 
-0001613465 00000 n 
-0001613528 00000 n 
-0001613592 00000 n 
-0001613656 00000 n 
-0001613720 00000 n 
-0001613784 00000 n 
-0001613848 00000 n 
-0001613912 00000 n 
-0001613976 00000 n 
-0001614040 00000 n 
-0001614104 00000 n 
-0001614168 00000 n 
-0001614232 00000 n 
-0001614296 00000 n 
-0001614360 00000 n 
-0001614424 00000 n 
-0001614488 00000 n 
-0001614552 00000 n 
-0001614616 00000 n 
-0001614680 00000 n 
-0001614744 00000 n 
-0001614808 00000 n 
-0001614872 00000 n 
-0001614936 00000 n 
-0001615000 00000 n 
-0001615064 00000 n 
-0001615127 00000 n 
-0001620760 00000 n 
-0001618344 00000 n 
-0001615334 00000 n 
-0001618460 00000 n 
-0001618588 00000 n 
-0001618652 00000 n 
-0001618716 00000 n 
-0001618780 00000 n 
-0001618844 00000 n 
-0001618907 00000 n 
-0001618971 00000 n 
-0001619034 00000 n 
-0001619098 00000 n 
-0001619161 00000 n 
-0001619225 00000 n 
-0001619289 00000 n 
-0001619353 00000 n 
-0001619417 00000 n 
-0001619481 00000 n 
-0001619545 00000 n 
-0001619609 00000 n 
-0001619673 00000 n 
-0001619737 00000 n 
-0001619801 00000 n 
-0001619865 00000 n 
-0001619929 00000 n 
-0001619993 00000 n 
-0001620057 00000 n 
-0001620121 00000 n 
-0001620185 00000 n 
-0001620249 00000 n 
-0001620313 00000 n 
-0001620377 00000 n 
-0001620441 00000 n 
-0001620505 00000 n 
-0001620569 00000 n 
-0001620633 00000 n 
-0001620697 00000 n 
-0001624638 00000 n 
-0001622926 00000 n 
-0001620917 00000 n 
-0001623042 00000 n 
-0001623170 00000 n 
-0001623234 00000 n 
-0001623298 00000 n 
-0001623362 00000 n 
-0001623426 00000 n 
-0001623490 00000 n 
-0001623554 00000 n 
-0001623618 00000 n 
-0001623682 00000 n 
-0001623746 00000 n 
-0001623810 00000 n 
-0001623874 00000 n 
-0001623938 00000 n 
-0001624001 00000 n 
-0001624065 00000 n 
-0001624128 00000 n 
-0001624192 00000 n 
-0001624254 00000 n 
-0001624318 00000 n 
-0001624382 00000 n 
-0001624446 00000 n 
-0001624510 00000 n 
-0001624574 00000 n 
-0001626183 00000 n 
-0001625875 00000 n 
-0001624753 00000 n 
-0001625991 00000 n 
-0001627108 00000 n 
-0001626801 00000 n 
-0001626299 00000 n 
-0001626917 00000 n 
-0001628666 00000 n 
-0001628358 00000 n 
-0001627224 00000 n 
-0001628474 00000 n 
-0003384680 00000 n 
-0001629975 00000 n 
-0001629667 00000 n 
-0001628782 00000 n 
-0001629783 00000 n 
-0001629911 00000 n 
-0001631420 00000 n 
-0001631112 00000 n 
-0001630091 00000 n 
-0001631228 00000 n 
-0001631356 00000 n 
-0001632951 00000 n 
-0001632643 00000 n 
-0001631536 00000 n 
-0001632759 00000 n 
-0001632887 00000 n 
-0001634195 00000 n 
-0001633887 00000 n 
-0001633067 00000 n 
-0001634003 00000 n 
-0001635508 00000 n 
-0001635200 00000 n 
-0001634311 00000 n 
-0001635316 00000 n 
-0001635444 00000 n 
-0001637311 00000 n 
-0001637003 00000 n 
-0001635624 00000 n 
-0001637119 00000 n 
-0001637247 00000 n 
-0003384805 00000 n 
-0001638732 00000 n 
-0001638424 00000 n 
-0001637427 00000 n 
-0001638540 00000 n 
-0001638668 00000 n 
-0001639957 00000 n 
-0001639649 00000 n 
-0001638848 00000 n 
-0001639765 00000 n 
-0001639893 00000 n 
-0001640466 00000 n 
-0001640287 00000 n 
-0001640073 00000 n 
-0001640757 00000 n 
-0001640641 00000 n 
-0001640540 00000 n 
-0001641858 00000 n 
-0001641423 00000 n 
-0001640799 00000 n 
-0001641539 00000 n 
-0001641603 00000 n 
-0001641730 00000 n 
-0001641794 00000 n 
-0001642255 00000 n 
-0001642075 00000 n 
-0001641974 00000 n 
-0001642191 00000 n 
-0003384930 00000 n 
-0001644187 00000 n 
-0001643880 00000 n 
-0001642297 00000 n 
-0001643996 00000 n 
-0001644123 00000 n 
-0001646837 00000 n 
-0001646530 00000 n 
-0001644303 00000 n 
-0001646646 00000 n 
-0001646773 00000 n 
-0001649107 00000 n 
-0001648927 00000 n 
-0001646995 00000 n 
-0001649043 00000 n 
-0001651324 00000 n 
-0001651144 00000 n 
-0001649209 00000 n 
-0001651260 00000 n 
-0001653643 00000 n 
-0001653336 00000 n 
-0001651426 00000 n 
-0001653452 00000 n 
-0001653579 00000 n 
-0001656302 00000 n 
-0001655997 00000 n 
-0001653759 00000 n 
+0001578957 00000 n 
+0001579020 00000 n 
+0001579084 00000 n 
+0001579147 00000 n 
+0001579211 00000 n 
+0001579274 00000 n 
+0001579338 00000 n 
+0001579402 00000 n 
+0001579466 00000 n 
+0001579530 00000 n 
+0001579594 00000 n 
+0001579658 00000 n 
+0001579722 00000 n 
+0001579786 00000 n 
+0001579850 00000 n 
+0001579914 00000 n 
+0001579978 00000 n 
+0001580042 00000 n 
+0001580106 00000 n 
+0001580170 00000 n 
+0001580234 00000 n 
+0001580298 00000 n 
+0001580362 00000 n 
+0001580426 00000 n 
+0001580490 00000 n 
+0001580554 00000 n 
+0001580618 00000 n 
+0001580682 00000 n 
+0001580746 00000 n 
+0001580810 00000 n 
+0001580873 00000 n 
+0001586506 00000 n 
+0001584090 00000 n 
+0001581080 00000 n 
+0001584206 00000 n 
+0001584334 00000 n 
+0001584398 00000 n 
+0001584462 00000 n 
+0001584526 00000 n 
+0001584590 00000 n 
+0001584653 00000 n 
+0001584717 00000 n 
+0001584780 00000 n 
+0001584844 00000 n 
+0001584907 00000 n 
+0001584971 00000 n 
+0001585035 00000 n 
+0001585099 00000 n 
+0001585163 00000 n 
+0001585227 00000 n 
+0001585291 00000 n 
+0001585355 00000 n 
+0001585419 00000 n 
+0001585483 00000 n 
+0001585547 00000 n 
+0001585611 00000 n 
+0001585675 00000 n 
+0001585739 00000 n 
+0001585803 00000 n 
+0001585867 00000 n 
+0001585931 00000 n 
+0001585995 00000 n 
+0001586059 00000 n 
+0001586123 00000 n 
+0001586187 00000 n 
+0001586251 00000 n 
+0001586315 00000 n 
+0001586379 00000 n 
+0001586443 00000 n 
+0001590384 00000 n 
+0001588672 00000 n 
+0001586663 00000 n 
+0001588788 00000 n 
+0001588916 00000 n 
+0001588980 00000 n 
+0001589044 00000 n 
+0001589108 00000 n 
+0001589172 00000 n 
+0001589236 00000 n 
+0001589300 00000 n 
+0001589364 00000 n 
+0001589428 00000 n 
+0001589492 00000 n 
+0001589556 00000 n 
+0001589620 00000 n 
+0001589684 00000 n 
+0001589747 00000 n 
+0001589811 00000 n 
+0001589874 00000 n 
+0001589938 00000 n 
+0001590000 00000 n 
+0001590064 00000 n 
+0001590128 00000 n 
+0001590192 00000 n 
+0001590256 00000 n 
+0001590320 00000 n 
+0001591929 00000 n 
+0001591621 00000 n 
+0001590499 00000 n 
+0001591737 00000 n 
+0001592854 00000 n 
+0001592547 00000 n 
+0001592045 00000 n 
+0001592663 00000 n 
+0001594412 00000 n 
+0001594104 00000 n 
+0001592970 00000 n 
+0001594220 00000 n 
+0003360995 00000 n 
+0001595721 00000 n 
+0001595413 00000 n 
+0001594528 00000 n 
+0001595529 00000 n 
+0001595657 00000 n 
+0001597166 00000 n 
+0001596858 00000 n 
+0001595837 00000 n 
+0001596974 00000 n 
+0001597102 00000 n 
+0001598697 00000 n 
+0001598389 00000 n 
+0001597282 00000 n 
+0001598505 00000 n 
+0001598633 00000 n 
+0001599941 00000 n 
+0001599633 00000 n 
+0001598813 00000 n 
+0001599749 00000 n 
+0001601254 00000 n 
+0001600946 00000 n 
+0001600057 00000 n 
+0001601062 00000 n 
+0001601190 00000 n 
+0001603057 00000 n 
+0001602749 00000 n 
+0001601370 00000 n 
+0001602865 00000 n 
+0001602993 00000 n 
+0003361120 00000 n 
+0001604478 00000 n 
+0001604170 00000 n 
+0001603173 00000 n 
+0001604286 00000 n 
+0001604414 00000 n 
+0001605703 00000 n 
+0001605395 00000 n 
+0001604594 00000 n 
+0001605511 00000 n 
+0001605639 00000 n 
+0001606212 00000 n 
+0001606033 00000 n 
+0001605819 00000 n 
+0001606503 00000 n 
+0001606387 00000 n 
+0001606286 00000 n 
+0001607604 00000 n 
+0001607169 00000 n 
+0001606545 00000 n 
+0001607285 00000 n 
+0001607349 00000 n 
+0001607476 00000 n 
+0001607540 00000 n 
+0001608001 00000 n 
+0001607821 00000 n 
+0001607720 00000 n 
+0001607937 00000 n 
+0003361245 00000 n 
+0001609933 00000 n 
+0001609626 00000 n 
+0001608043 00000 n 
+0001609742 00000 n 
+0001609869 00000 n 
+0001612583 00000 n 
+0001612276 00000 n 
+0001610049 00000 n 
+0001612392 00000 n 
+0001612519 00000 n 
+0001614853 00000 n 
+0001614673 00000 n 
+0001612741 00000 n 
+0001614789 00000 n 
+0001617070 00000 n 
+0001616890 00000 n 
+0001614955 00000 n 
+0001617006 00000 n 
+0001619389 00000 n 
+0001619082 00000 n 
+0001617172 00000 n 
+0001619198 00000 n 
+0001619325 00000 n 
+0001622048 00000 n 
+0001621743 00000 n 
+0001619505 00000 n 
+0001621859 00000 n 
+0001621986 00000 n 
+0003361370 00000 n 
+0001624371 00000 n 
+0001624064 00000 n 
+0001622164 00000 n 
+0001624180 00000 n 
+0001624307 00000 n 
+0001626602 00000 n 
+0001626818 00000 n 
+0001626465 00000 n 
+0001624487 00000 n 
+0001626754 00000 n 
+0001643535 00000 n 
+0001629227 00000 n 
+0001629047 00000 n 
+0001626948 00000 n 
+0001629163 00000 n 
+0001631822 00000 n 
+0001632022 00000 n 
+0001632290 00000 n 
+0001631676 00000 n 
+0001629329 00000 n 
+0001632226 00000 n 
+0001634704 00000 n 
+0001634524 00000 n 
+0001632462 00000 n 
+0001634640 00000 n 
+0001639820 00000 n 
+0001637154 00000 n 
+0001636848 00000 n 
+0001634806 00000 n 
+0001636964 00000 n 
+0001637091 00000 n 
+0003361495 00000 n 
+0001639999 00000 n 
+0001640456 00000 n 
+0001640713 00000 n 
+0001639656 00000 n 
+0001637270 00000 n 
+0001640649 00000 n 
+0001640228 00000 n 
+0001642971 00000 n 
+0001643726 00000 n 
+0001642825 00000 n 
+0001640899 00000 n 
+0001643408 00000 n 
+0001643662 00000 n 
+0001643189 00000 n 
+0001646894 00000 n 
+0001646140 00000 n 
+0001643898 00000 n 
+0001646256 00000 n 
+0001646320 00000 n 
+0001646384 00000 n 
+0001646447 00000 n 
+0001646511 00000 n 
+0001646575 00000 n 
+0001646639 00000 n 
+0001646703 00000 n 
+0001646830 00000 n 
+0001649166 00000 n 
+0001648603 00000 n 
+0001647038 00000 n 
+0001648719 00000 n 
+0001648783 00000 n 
+0001648847 00000 n 
+0001648911 00000 n 
+0001648975 00000 n 
+0001649102 00000 n 
+0001651431 00000 n 
+0001651251 00000 n 
+0001649296 00000 n 
+0001651367 00000 n 
+0001653433 00000 n 
+0001653253 00000 n 
+0001651646 00000 n 
+0001653369 00000 n 
+0003361620 00000 n 
+0001655969 00000 n 
+0001655662 00000 n 
+0001653549 00000 n 
+0001655778 00000 n 
+0001655905 00000 n 
+0001658919 00000 n 
+0001658293 00000 n 
 0001656113 00000 n 
-0001656240 00000 n 
-0003385055 00000 n 
-0001658625 00000 n 
-0001658318 00000 n 
-0001656418 00000 n 
-0001658434 00000 n 
-0001658561 00000 n 
-0001660856 00000 n 
-0001661072 00000 n 
-0001660719 00000 n 
-0001658741 00000 n 
-0001661008 00000 n 
-0001677789 00000 n 
-0001663481 00000 n 
-0001663301 00000 n 
-0001661202 00000 n 
-0001663417 00000 n 
-0001666076 00000 n 
-0001666276 00000 n 
-0001666544 00000 n 
-0001665930 00000 n 
-0001663583 00000 n 
-0001666480 00000 n 
-0001668958 00000 n 
-0001668778 00000 n 
-0001666716 00000 n 
-0001668894 00000 n 
-0001674074 00000 n 
-0001671408 00000 n 
-0001671102 00000 n 
-0001669060 00000 n 
-0001671218 00000 n 
-0001671345 00000 n 
-0003385180 00000 n 
-0001674253 00000 n 
-0001674710 00000 n 
-0001674967 00000 n 
-0001673910 00000 n 
-0001671524 00000 n 
-0001674903 00000 n 
-0001674482 00000 n 
-0001677225 00000 n 
-0001677980 00000 n 
-0001677079 00000 n 
-0001675153 00000 n 
-0001677662 00000 n 
-0001677916 00000 n 
-0001677443 00000 n 
-0001681148 00000 n 
-0001680394 00000 n 
-0001678152 00000 n 
-0001680510 00000 n 
-0001680574 00000 n 
-0001680638 00000 n 
-0001680701 00000 n 
-0001680765 00000 n 
-0001680829 00000 n 
-0001680893 00000 n 
-0001680957 00000 n 
-0001681084 00000 n 
-0001683420 00000 n 
-0001682857 00000 n 
-0001681292 00000 n 
-0001682973 00000 n 
-0001683037 00000 n 
-0001683101 00000 n 
-0001683165 00000 n 
-0001683229 00000 n 
-0001683356 00000 n 
-0001685685 00000 n 
-0001685505 00000 n 
-0001683550 00000 n 
-0001685621 00000 n 
-0001687687 00000 n 
-0001687507 00000 n 
-0001685900 00000 n 
-0001687623 00000 n 
-0003385305 00000 n 
-0001690223 00000 n 
-0001689916 00000 n 
-0001687803 00000 n 
-0001690032 00000 n 
-0001690159 00000 n 
-0001693173 00000 n 
-0001692547 00000 n 
-0001690367 00000 n 
-0001692663 00000 n 
-0001692790 00000 n 
-0001692854 00000 n 
-0001692918 00000 n 
-0001692982 00000 n 
-0001693045 00000 n 
-0001693109 00000 n 
-0001695449 00000 n 
-0001695077 00000 n 
-0001693303 00000 n 
-0001695193 00000 n 
-0001695257 00000 n 
-0001695321 00000 n 
-0001695385 00000 n 
-0001697977 00000 n 
-0001697353 00000 n 
-0001695565 00000 n 
-0001697469 00000 n 
-0001697533 00000 n 
-0001697597 00000 n 
-0001697724 00000 n 
-0001697851 00000 n 
-0001697914 00000 n 
-0001700857 00000 n 
-0001700293 00000 n 
-0001698107 00000 n 
-0001700409 00000 n 
-0001700473 00000 n 
-0001700537 00000 n 
-0001700601 00000 n 
-0001700665 00000 n 
-0001700729 00000 n 
-0001700793 00000 n 
-0001703986 00000 n 
-0001703233 00000 n 
-0001701001 00000 n 
-0001703349 00000 n 
-0001703476 00000 n 
-0001703540 00000 n 
-0001703604 00000 n 
-0001703667 00000 n 
-0001703794 00000 n 
-0001703858 00000 n 
-0001703922 00000 n 
-0003385430 00000 n 
-0001705355 00000 n 
-0001705111 00000 n 
-0001704130 00000 n 
-0001705227 00000 n 
-0001705291 00000 n 
-0001707960 00000 n 
-0001707589 00000 n 
-0001705471 00000 n 
-0001707705 00000 n 
-0001707769 00000 n 
-0001707896 00000 n 
-0001710255 00000 n 
-0001709884 00000 n 
-0001708104 00000 n 
-0001710000 00000 n 
-0001710127 00000 n 
-0001710191 00000 n 
-0001712720 00000 n 
-0001712540 00000 n 
-0001710413 00000 n 
-0001712656 00000 n 
-0001714300 00000 n 
-0001714120 00000 n 
-0001712864 00000 n 
-0001714236 00000 n 
-0001714739 00000 n 
-0001714559 00000 n 
-0001714458 00000 n 
-0001714675 00000 n 
-0003385555 00000 n 
-0001716771 00000 n 
-0001716337 00000 n 
-0001714781 00000 n 
-0001716453 00000 n 
-0001716580 00000 n 
-0001716707 00000 n 
-0001719252 00000 n 
-0001718945 00000 n 
-0001716887 00000 n 
-0001719061 00000 n 
-0001719188 00000 n 
-0001721521 00000 n 
-0001721087 00000 n 
-0001719368 00000 n 
-0001721203 00000 n 
-0001721330 00000 n 
-0001721457 00000 n 
-0001723593 00000 n 
-0001723160 00000 n 
-0001721651 00000 n 
-0001723276 00000 n 
-0001723403 00000 n 
-0001723529 00000 n 
-0001725284 00000 n 
-0001724977 00000 n 
-0001723723 00000 n 
-0001725093 00000 n 
-0001725220 00000 n 
-0001727936 00000 n 
-0001728568 00000 n 
-0001727790 00000 n 
-0001725471 00000 n 
-0001728249 00000 n 
-0001728376 00000 n 
-0001728440 00000 n 
-0001728093 00000 n 
-0001728504 00000 n 
-0003385680 00000 n 
-0001730214 00000 n 
-0001730405 00000 n 
-0001729906 00000 n 
-0001728698 00000 n 
-0001730022 00000 n 
-0001730086 00000 n 
-0001730341 00000 n 
-0001732750 00000 n 
-0001732917 00000 n 
-0001732595 00000 n 
-0001733414 00000 n 
-0001732440 00000 n 
-0001730535 00000 n 
-0001733094 00000 n 
-0001733158 00000 n 
-0001733222 00000 n 
-0001733286 00000 n 
-0001733350 00000 n 
-0001740444 00000 n 
-0001735004 00000 n 
-0001734696 00000 n 
-0001733586 00000 n 
-0001734812 00000 n 
-0001734876 00000 n 
-0001734940 00000 n 
-0001736708 00000 n 
-0001737121 00000 n 
-0001736571 00000 n 
-0001735120 00000 n 
-0001736866 00000 n 
-0001736930 00000 n 
-0001737057 00000 n 
-0001741724 00000 n 
-0001742106 00000 n 
-0001740200 00000 n 
-0001737251 00000 n 
-0001740316 00000 n 
-0001740508 00000 n 
-0001740572 00000 n 
-0001740636 00000 n 
-0001740700 00000 n 
-0001740764 00000 n 
-0001740828 00000 n 
-0001740892 00000 n 
-0001740956 00000 n 
-0001741020 00000 n 
-0001741084 00000 n 
-0001741148 00000 n 
-0001741212 00000 n 
-0001741276 00000 n 
-0001741340 00000 n 
-0001741404 00000 n 
-0001741468 00000 n 
-0001741532 00000 n 
-0001741596 00000 n 
-0001741851 00000 n 
-0001741978 00000 n 
-0001742042 00000 n 
-0001743806 00000 n 
-0001743959 00000 n 
-0001744622 00000 n 
-0001743660 00000 n 
-0001742291 00000 n 
-0001744110 00000 n 
-0001744174 00000 n 
-0001744238 00000 n 
-0001744302 00000 n 
-0001744366 00000 n 
-0001744430 00000 n 
-0001744494 00000 n 
-0001744558 00000 n 
-0003385805 00000 n 
-0001746486 00000 n 
-0001746613 00000 n 
-0001746803 00000 n 
-0001746242 00000 n 
-0001744738 00000 n 
-0001746358 00000 n 
-0001746739 00000 n 
-0001749548 00000 n 
-0001749178 00000 n 
-0001746933 00000 n 
-0001749294 00000 n 
-0001749421 00000 n 
-0001749485 00000 n 
-0001752019 00000 n 
-0001751839 00000 n 
-0001749678 00000 n 
-0001751955 00000 n 
-0001753207 00000 n 
-0001753027 00000 n 
-0001752149 00000 n 
-0001753143 00000 n 
-0001755114 00000 n 
-0001754681 00000 n 
-0001753309 00000 n 
-0001754797 00000 n 
-0001754924 00000 n 
-0001755050 00000 n 
-0001757598 00000 n 
-0001758260 00000 n 
-0001757452 00000 n 
-0001755230 00000 n 
-0001758069 00000 n 
-0001758196 00000 n 
-0001757833 00000 n 
-0003385930 00000 n 
-0001761144 00000 n 
-0001760836 00000 n 
-0001758446 00000 n 
-0001760952 00000 n 
-0001761080 00000 n 
-0001764035 00000 n 
-0001763474 00000 n 
-0001761260 00000 n 
-0001763590 00000 n 
-0001763717 00000 n 
-0001763844 00000 n 
-0001763971 00000 n 
-0001766045 00000 n 
-0001766534 00000 n 
-0001765899 00000 n 
-0001764179 00000 n 
-0001766344 00000 n 
-0001766471 00000 n 
-0001766194 00000 n 
-0002550922 00000 n 
-0001768843 00000 n 
-0001769309 00000 n 
-0001768706 00000 n 
-0001766749 00000 n 
-0001768993 00000 n 
-0001769118 00000 n 
-0001769245 00000 n 
-0001771223 00000 n 
-0001771043 00000 n 
-0001769496 00000 n 
-0001771159 00000 n 
-0001773512 00000 n 
-0001773729 00000 n 
-0001773375 00000 n 
-0001771339 00000 n 
-0001773665 00000 n 
-0003386055 00000 n 
-0002527963 00000 n 
-0001776272 00000 n 
-0001775712 00000 n 
-0001773859 00000 n 
-0001775828 00000 n 
-0001775955 00000 n 
-0001776082 00000 n 
-0001776208 00000 n 
-0001778953 00000 n 
-0001778392 00000 n 
-0001776388 00000 n 
-0001778508 00000 n 
-0001778635 00000 n 
-0001778762 00000 n 
-0001778889 00000 n 
-0001781650 00000 n 
-0001781343 00000 n 
-0001779083 00000 n 
-0001781459 00000 n 
-0001781586 00000 n 
-0001783972 00000 n 
-0001783665 00000 n 
-0001781766 00000 n 
-0001783781 00000 n 
-0001783908 00000 n 
-0001785154 00000 n 
-0001784974 00000 n 
-0001784130 00000 n 
-0001785090 00000 n 
-0001785537 00000 n 
-0001785357 00000 n 
-0001785256 00000 n 
-0001785473 00000 n 
-0003386180 00000 n 
-0001787466 00000 n 
-0001787159 00000 n 
-0001785579 00000 n 
-0001787275 00000 n 
-0001787402 00000 n 
-0001790028 00000 n 
-0001790207 00000 n 
-0001790389 00000 n 
-0001790753 00000 n 
-0001789873 00000 n 
-0001787582 00000 n 
-0001790563 00000 n 
-0001790690 00000 n 
-0001792959 00000 n 
-0001793338 00000 n 
-0001792822 00000 n 
-0001790939 00000 n 
-0001793147 00000 n 
-0001793274 00000 n 
-0001794499 00000 n 
-0001794319 00000 n 
-0001793524 00000 n 
-0001794435 00000 n 
-0001796208 00000 n 
-0001798548 00000 n 
-0001830417 00000 n 
-0001833196 00000 n 
-0001796868 00000 n 
-0001796071 00000 n 
-0001794601 00000 n 
-0001796359 00000 n 
-0001796677 00000 n 
-0001796740 00000 n 
-0001796804 00000 n 
-0001831153 00000 n 
-0001830569 00000 n 
-0001864729 00000 n 
-0001830873 00000 n 
-0001877561 00000 n 
-0001863047 00000 n 
-0001892844 00000 n 
-0001831472 00000 n 
-0001798384 00000 n 
-0001796984 00000 n 
-0001831025 00000 n 
-0001831217 00000 n 
-0001831281 00000 n 
-0001830721 00000 n 
-0001831345 00000 n 
-0001831408 00000 n 
-0003386305 00000 n 
-0001863479 00000 n 
-0001890651 00000 n 
-0001890779 00000 n 
-0001863199 00000 n 
-0001863607 00000 n 
-0001833050 00000 n 
-0001831626 00000 n 
-0001863351 00000 n 
-0001863543 00000 n 
-0001912691 00000 n 
-0001890843 00000 n 
-0001864613 00000 n 
-0001863761 00000 n 
-0001890523 00000 n 
-0001912882 00000 n 
-0001892728 00000 n 
-0001890998 00000 n 
-0001912563 00000 n 
-0001912818 00000 n 
-0001915045 00000 n 
-0001914865 00000 n 
-0001913050 00000 n 
-0001914981 00000 n 
-0001916367 00000 n 
-0001916187 00000 n 
-0001915161 00000 n 
-0001916303 00000 n 
-0001918704 00000 n 
-0001919045 00000 n 
-0001918567 00000 n 
-0001916483 00000 n 
-0001918854 00000 n 
-0001918981 00000 n 
-0003386430 00000 n 
-0002536519 00000 n 
-0001921196 00000 n 
-0001921352 00000 n 
-0001921504 00000 n 
-0001921808 00000 n 
-0001922532 00000 n 
-0001921023 00000 n 
-0001919189 00000 n 
-0001921960 00000 n 
-0001922087 00000 n 
-0001922214 00000 n 
-0001922341 00000 n 
-0001921656 00000 n 
-0001922468 00000 n 
-0002538017 00000 n 
-0001924456 00000 n 
-0001924618 00000 n 
-0001924780 00000 n 
-0001924942 00000 n 
-0001925101 00000 n 
-0001925772 00000 n 
-0001924283 00000 n 
-0001922662 00000 n 
-0001925260 00000 n 
-0001925516 00000 n 
-0001925580 00000 n 
-0001925644 00000 n 
-0001925708 00000 n 
-0002542172 00000 n 
-0002543537 00000 n 
-0002545036 00000 n 
-0002546214 00000 n 
-0002547333 00000 n 
-0001927368 00000 n 
-0001927125 00000 n 
-0001925902 00000 n 
-0001927241 00000 n 
-0001927305 00000 n 
-0001928721 00000 n 
-0001928477 00000 n 
-0001927484 00000 n 
-0001928593 00000 n 
-0001928657 00000 n 
-0001930267 00000 n 
-0001929959 00000 n 
-0001928837 00000 n 
-0001930075 00000 n 
-0001930139 00000 n 
-0001930203 00000 n 
-0001931809 00000 n 
-0001932185 00000 n 
-0001931672 00000 n 
-0001930383 00000 n 
-0001931993 00000 n 
-0001932121 00000 n 
-0003386555 00000 n 
-0001934063 00000 n 
-0001934295 00000 n 
-0001933926 00000 n 
-0001932371 00000 n 
-0001934231 00000 n 
-0001935867 00000 n 
-0001939622 00000 n 
-0001936335 00000 n 
-0001935730 00000 n 
-0001934467 00000 n 
-0001936016 00000 n 
-0001936080 00000 n 
-0001936144 00000 n 
-0001936208 00000 n 
-0001936272 00000 n 
-0002548694 00000 n 
-0001939015 00000 n 
-0001939163 00000 n 
-0001941536 00000 n 
-0001939316 00000 n 
-0002021415 00000 n 
-0001939470 00000 n 
-0001939919 00000 n 
-0001938842 00000 n 
-0001936451 00000 n 
-0001939791 00000 n 
-0001939855 00000 n 
-0002548821 00000 n 
-0002019602 00000 n 
-0002095630 00000 n 
-0002189127 00000 n 
-0002096881 00000 n 
-0002019165 00000 n 
-0002019317 00000 n 
-0002190717 00000 n 
-0002277545 00000 n 
-0002095200 00000 n 
-0002019666 00000 n 
-0001941390 00000 n 
-0001940105 00000 n 
-0002019474 00000 n 
-0002018233 00000 n 
-0002275720 00000 n 
-0002353161 00000 n 
-0002354676 00000 n 
-0002095694 00000 n 
-0002021269 00000 n 
-0002019820 00000 n 
-0002095502 00000 n 
-0002095352 00000 n 
-0002433539 00000 n 
-0002275076 00000 n 
-0002189319 00000 n 
-0002096765 00000 n 
-0002095834 00000 n 
-0002188999 00000 n 
-0002189255 00000 n 
-0003386680 00000 n 
-0002187992 00000 n 
-0002434695 00000 n 
-0002275229 00000 n 
-0002275403 00000 n 
-0002275784 00000 n 
-0002190562 00000 n 
-0002189473 00000 n 
-0002275592 00000 n 
-0002274221 00000 n 
-0002525995 00000 n 
-0002353353 00000 n 
-0002277429 00000 n 
-0002275980 00000 n 
-0002353033 00000 n 
-0002352287 00000 n 
-0002433603 00000 n 
-0002354560 00000 n 
-0002353521 00000 n 
-0002433411 00000 n 
-0002432685 00000 n 
-0002526059 00000 n 
-0002434579 00000 n 
-0002433757 00000 n 
-0002525867 00000 n 
-0002528027 00000 n 
-0002527719 00000 n 
-0002526213 00000 n 
-0002527835 00000 n 
-0002532934 00000 n 
-0002533141 00000 n 
-0002530295 00000 n 
-0002529987 00000 n 
-0002528157 00000 n 
-0002530103 00000 n 
-0002530231 00000 n 
-0003386805 00000 n 
-0002533347 00000 n 
-0002533859 00000 n 
-0002532779 00000 n 
-0002530439 00000 n 
-0002533540 00000 n 
-0002533668 00000 n 
-0002533795 00000 n 
-0002535426 00000 n 
-0002535246 00000 n 
-0002534045 00000 n 
-0002535362 00000 n 
-0002536583 00000 n 
-0002536275 00000 n 
-0002535542 00000 n 
-0002536391 00000 n 
-0002538081 00000 n 
-0002537773 00000 n 
-0002536699 00000 n 
-0002537889 00000 n 
-0002539400 00000 n 
-0002538964 00000 n 
-0002538197 00000 n 
-0002539080 00000 n 
-0002540864 00000 n 
-0002540556 00000 n 
-0002539516 00000 n 
-0002540672 00000 n 
-0003386930 00000 n 
-0002542236 00000 n 
-0002541928 00000 n 
-0002540980 00000 n 
-0002542044 00000 n 
-0002543601 00000 n 
-0002543293 00000 n 
-0002542352 00000 n 
-0002543409 00000 n 
-0002545099 00000 n 
-0002544792 00000 n 
-0002543717 00000 n 
-0002544908 00000 n 
-0002546278 00000 n 
-0002545970 00000 n 
-0002545215 00000 n 
-0002546086 00000 n 
-0002547397 00000 n 
-0002547089 00000 n 
-0002546394 00000 n 
-0002547205 00000 n 
-0002548885 00000 n 
-0002548451 00000 n 
-0002547513 00000 n 
-0002548567 00000 n 
-0003387055 00000 n 
-0002553494 00000 n 
-0002551114 00000 n 
-0002550678 00000 n 
-0002549001 00000 n 
-0002550794 00000 n 
-0002551050 00000 n 
-0002553665 00000 n 
-0002553914 00000 n 
-0002553348 00000 n 
-0002551230 00000 n 
-0002553850 00000 n 
-0002556244 00000 n 
-0002556397 00000 n 
-0002556741 00000 n 
-0002556098 00000 n 
-0002554143 00000 n 
-0002556549 00000 n 
-0002556677 00000 n 
-0002733243 00000 n 
-0002735504 00000 n 
-0002559485 00000 n 
-0002558793 00000 n 
-0002556871 00000 n 
-0002558909 00000 n 
-0002559037 00000 n 
-0002559101 00000 n 
-0002559165 00000 n 
-0002559229 00000 n 
-0002559293 00000 n 
-0002559421 00000 n 
-0002562180 00000 n 
-0002561616 00000 n 
-0002559629 00000 n 
-0002561732 00000 n 
-0002561860 00000 n 
-0002561924 00000 n 
-0002561988 00000 n 
-0002562052 00000 n 
-0002562116 00000 n 
-0002564407 00000 n 
-0002564721 00000 n 
-0002564873 00000 n 
-0002566495 00000 n 
-0002595829 00000 n 
-0002565025 00000 n 
-0002565689 00000 n 
-0002564234 00000 n 
-0002562324 00000 n 
-0002565179 00000 n 
-0002565243 00000 n 
-0002565307 00000 n 
-0002565371 00000 n 
-0002565434 00000 n 
-0002564564 00000 n 
-0002565497 00000 n 
-0002565625 00000 n 
-0003387180 00000 n 
-0002620949 00000 n 
-0002594471 00000 n 
-0002620821 00000 n 
-0002623825 00000 n 
-0002594535 00000 n 
-0002566379 00000 n 
-0002565805 00000 n 
-0002594343 00000 n 
-0002621140 00000 n 
-0002595713 00000 n 
-0002594675 00000 n 
-0002620693 00000 n 
-0002621013 00000 n 
-0002621076 00000 n 
-0002624208 00000 n 
-0002623581 00000 n 
-0002621308 00000 n 
-0002623697 00000 n 
-0002623889 00000 n 
-0002623953 00000 n 
-0002624017 00000 n 
-0002624081 00000 n 
-0002624145 00000 n 
-0002626295 00000 n 
-0002626448 00000 n 
-0002631529 00000 n 
-0002627206 00000 n 
-0002626140 00000 n 
-0002624338 00000 n 
-0002626759 00000 n 
-0002626823 00000 n 
-0002626887 00000 n 
-0002627015 00000 n 
-0002626604 00000 n 
-0002627143 00000 n 
-0002629992 00000 n 
-0002654803 00000 n 
-0002630375 00000 n 
-0002629748 00000 n 
-0002627322 00000 n 
-0002629864 00000 n 
-0002630056 00000 n 
-0002630120 00000 n 
-0002630184 00000 n 
-0002630247 00000 n 
-0002630311 00000 n 
-0002655059 00000 n 
-0002631413 00000 n 
-0002630547 00000 n 
-0002654675 00000 n 
-0002654867 00000 n 
-0002654931 00000 n 
-0002654995 00000 n 
-0003387305 00000 n 
-0002657720 00000 n 
-0002659649 00000 n 
-0002673975 00000 n 
-0002658192 00000 n 
-0002657583 00000 n 
-0002655227 00000 n 
-0002657872 00000 n 
-0002657936 00000 n 
-0002658000 00000 n 
-0002658128 00000 n 
-0002674258 00000 n 
-0002675784 00000 n 
-0002674322 00000 n 
-0002659512 00000 n 
-0002658392 00000 n 
-0002674130 00000 n 
-0002690620 00000 n 
-0002690812 00000 n 
-0002675668 00000 n 
-0002674476 00000 n 
-0002690492 00000 n 
-0002690748 00000 n 
-0002693949 00000 n 
-0002693065 00000 n 
-0002690980 00000 n 
-0002693181 00000 n 
-0002693245 00000 n 
-0002693309 00000 n 
-0002693373 00000 n 
-0002693437 00000 n 
-0002693501 00000 n 
-0002693565 00000 n 
-0002693629 00000 n 
-0002693693 00000 n 
-0002693757 00000 n 
-0002693821 00000 n 
-0002693885 00000 n 
-0002696202 00000 n 
-0002696352 00000 n 
-0002698369 00000 n 
-0002714695 00000 n 
-0002697102 00000 n 
-0002696047 00000 n 
-0002694093 00000 n 
-0002696654 00000 n 
-0002696718 00000 n 
-0002696782 00000 n 
-0002696846 00000 n 
-0002696910 00000 n 
-0002696974 00000 n 
-0002696503 00000 n 
-0002697038 00000 n 
-0002713291 00000 n 
-0002730472 00000 n 
-0002713483 00000 n 
-0002698253 00000 n 
-0002697232 00000 n 
-0002713163 00000 n 
-0002713419 00000 n 
-0003387430 00000 n 
-0002730664 00000 n 
-0002714579 00000 n 
-0002713651 00000 n 
-0002730344 00000 n 
-0002730600 00000 n 
-0002732905 00000 n 
-0002733435 00000 n 
-0002732768 00000 n 
-0002730832 00000 n 
-0002733115 00000 n 
-0002733371 00000 n 
-0002735632 00000 n 
-0002735260 00000 n 
-0002733663 00000 n 
-0002735376 00000 n 
-0002735568 00000 n 
-0002738277 00000 n 
-0002738097 00000 n 
-0002735790 00000 n 
-0002738213 00000 n 
-0002740675 00000 n 
-0002740495 00000 n 
-0002738435 00000 n 
-0002740611 00000 n 
-0002742799 00000 n 
-0002742619 00000 n 
-0002740876 00000 n 
-0002742735 00000 n 
-0003387555 00000 n 
-0002744473 00000 n 
-0002745055 00000 n 
-0002744327 00000 n 
-0002742943 00000 n 
-0002744800 00000 n 
-0002744928 00000 n 
-0002744636 00000 n 
-0002744991 00000 n 
-0002747579 00000 n 
-0002747399 00000 n 
-0002745213 00000 n 
-0002747515 00000 n 
-0002749655 00000 n 
-0002749347 00000 n 
-0002747681 00000 n 
-0002749463 00000 n 
-0002749527 00000 n 
-0002749591 00000 n 
-0002752051 00000 n 
-0002751808 00000 n 
-0002749757 00000 n 
-0002751924 00000 n 
-0002751988 00000 n 
-0002754338 00000 n 
-0002754094 00000 n 
-0002752167 00000 n 
-0002754210 00000 n 
-0002754274 00000 n 
-0002756473 00000 n 
-0002756166 00000 n 
-0002754440 00000 n 
-0002756282 00000 n 
-0002756346 00000 n 
-0002756409 00000 n 
-0003387680 00000 n 
-0002758982 00000 n 
-0002758483 00000 n 
-0002756589 00000 n 
-0002758599 00000 n 
-0002758663 00000 n 
-0002758727 00000 n 
-0002758791 00000 n 
-0002758855 00000 n 
-0002758919 00000 n 
-0002761677 00000 n 
-0002761177 00000 n 
-0002759084 00000 n 
-0002761293 00000 n 
-0002761357 00000 n 
-0002761421 00000 n 
-0002761485 00000 n 
-0002761549 00000 n 
-0002761613 00000 n 
-0002764173 00000 n 
-0002763929 00000 n 
-0002761793 00000 n 
-0002764045 00000 n 
-0002764109 00000 n 
-0002766514 00000 n 
-0002766270 00000 n 
-0002764261 00000 n 
-0002766386 00000 n 
-0002766450 00000 n 
-0002769121 00000 n 
-0002768558 00000 n 
-0002766630 00000 n 
-0002768674 00000 n 
-0002768738 00000 n 
-0002768802 00000 n 
-0002768866 00000 n 
-0002768930 00000 n 
-0002768994 00000 n 
-0002769057 00000 n 
-0002771441 00000 n 
-0002771133 00000 n 
-0002769209 00000 n 
-0002771249 00000 n 
-0002771313 00000 n 
-0002771377 00000 n 
-0003387805 00000 n 
-0002773676 00000 n 
-0002773368 00000 n 
-0002771557 00000 n 
-0002773484 00000 n 
-0002773548 00000 n 
-0002773612 00000 n 
-0002776224 00000 n 
-0002776044 00000 n 
-0002773778 00000 n 
-0002776160 00000 n 
-0002778555 00000 n 
-0002778311 00000 n 
-0002776326 00000 n 
-0002778427 00000 n 
-0002778491 00000 n 
-0002780814 00000 n 
-0002780507 00000 n 
-0002778657 00000 n 
-0002780623 00000 n 
-0002780687 00000 n 
-0002780750 00000 n 
-0002782842 00000 n 
-0002782470 00000 n 
-0002780930 00000 n 
-0002782586 00000 n 
-0002782650 00000 n 
-0002782714 00000 n 
-0002782778 00000 n 
-0002784972 00000 n 
-0002784665 00000 n 
-0002782944 00000 n 
-0002784781 00000 n 
-0002784845 00000 n 
-0003387930 00000 n 
-0002786789 00000 n 
-0002786966 00000 n 
-0002787422 00000 n 
-0002786634 00000 n 
-0002785102 00000 n 
-0002787358 00000 n 
-0002787162 00000 n 
-0002787819 00000 n 
-0002787639 00000 n 
-0002787538 00000 n 
-0002787755 00000 n 
-0002789780 00000 n 
-0002790143 00000 n 
-0002789643 00000 n 
-0002787861 00000 n 
-0002789951 00000 n 
-0002790079 00000 n 
-0002792384 00000 n 
-0002792204 00000 n 
-0002790315 00000 n 
-0002792320 00000 n 
-0002794692 00000 n 
-0002794512 00000 n 
-0002792500 00000 n 
-0002794628 00000 n 
-0002796878 00000 n 
-0002796698 00000 n 
-0002794808 00000 n 
-0002796814 00000 n 
-0003388055 00000 n 
-0002798541 00000 n 
-0002798778 00000 n 
-0002798404 00000 n 
-0002796994 00000 n 
-0002798714 00000 n 
-0002799231 00000 n 
-0002799051 00000 n 
-0002798950 00000 n 
-0002799167 00000 n 
-0002802276 00000 n 
-0002802428 00000 n 
-0002802579 00000 n 
-0002802730 00000 n 
-0002802881 00000 n 
-0002803032 00000 n 
-0002803183 00000 n 
-0002803334 00000 n 
-0002803485 00000 n 
-0002803636 00000 n 
-0002803787 00000 n 
-0002803938 00000 n 
-0002804088 00000 n 
-0002804238 00000 n 
-0002804388 00000 n 
-0002804538 00000 n 
-0002804689 00000 n 
-0002804838 00000 n 
-0002804989 00000 n 
-0002805140 00000 n 
-0002805291 00000 n 
-0002805441 00000 n 
-0002805591 00000 n 
-0002805743 00000 n 
-0002805895 00000 n 
-0002806047 00000 n 
-0002806199 00000 n 
-0002806351 00000 n 
-0002806502 00000 n 
-0002806653 00000 n 
-0002806804 00000 n 
-0002806955 00000 n 
-0002807107 00000 n 
-0002807257 00000 n 
-0002807408 00000 n 
-0002807559 00000 n 
-0002807710 00000 n 
-0002807861 00000 n 
-0002808012 00000 n 
-0002808164 00000 n 
-0002808316 00000 n 
-0002808465 00000 n 
-0002808616 00000 n 
-0002808767 00000 n 
-0002808918 00000 n 
-0002809069 00000 n 
-0002809219 00000 n 
-0002809371 00000 n 
-0002809523 00000 n 
-0002809674 00000 n 
-0002809826 00000 n 
-0002809978 00000 n 
-0002810130 00000 n 
-0002810282 00000 n 
-0002810434 00000 n 
-0002810585 00000 n 
-0002810736 00000 n 
-0002810886 00000 n 
-0002811036 00000 n 
-0002811186 00000 n 
-0002811337 00000 n 
-0002811488 00000 n 
-0002811638 00000 n 
-0002811789 00000 n 
-0002811940 00000 n 
-0002812091 00000 n 
-0002812242 00000 n 
-0002812393 00000 n 
-0002812544 00000 n 
-0002812696 00000 n 
-0002812848 00000 n 
-0002813000 00000 n 
-0002813152 00000 n 
-0002813303 00000 n 
-0002813455 00000 n 
-0002813606 00000 n 
-0002813756 00000 n 
-0002813908 00000 n 
-0002814060 00000 n 
-0002814212 00000 n 
-0002814364 00000 n 
-0002814516 00000 n 
-0002814667 00000 n 
-0002814818 00000 n 
-0002814969 00000 n 
-0002815121 00000 n 
-0002815272 00000 n 
-0002815424 00000 n 
-0002815576 00000 n 
-0002815728 00000 n 
-0002815879 00000 n 
-0002816030 00000 n 
-0002816182 00000 n 
-0002816333 00000 n 
-0002816483 00000 n 
-0002816634 00000 n 
-0002816786 00000 n 
-0002816938 00000 n 
-0002817090 00000 n 
-0002817239 00000 n 
-0002817391 00000 n 
-0002817542 00000 n 
-0002817693 00000 n 
-0002817845 00000 n 
-0002817995 00000 n 
-0002818147 00000 n 
-0002818299 00000 n 
-0002818450 00000 n 
-0002818601 00000 n 
-0002818753 00000 n 
-0002818904 00000 n 
-0002819055 00000 n 
-0002819206 00000 n 
-0002819356 00000 n 
-0002819508 00000 n 
-0002819660 00000 n 
-0002819812 00000 n 
-0002819964 00000 n 
-0002820115 00000 n 
-0002820267 00000 n 
-0002820419 00000 n 
-0002820571 00000 n 
-0002820723 00000 n 
-0002820874 00000 n 
-0002821025 00000 n 
-0002821176 00000 n 
-0002821327 00000 n 
-0002821479 00000 n 
-0002821630 00000 n 
-0002821782 00000 n 
-0002821933 00000 n 
-0002822085 00000 n 
-0002822233 00000 n 
-0002822385 00000 n 
-0002822536 00000 n 
-0002822688 00000 n 
-0002822840 00000 n 
-0002822992 00000 n 
-0002823144 00000 n 
-0002823296 00000 n 
-0002823447 00000 n 
-0002823598 00000 n 
-0002823749 00000 n 
-0002823901 00000 n 
-0002824053 00000 n 
-0002827329 00000 n 
-0002827481 00000 n 
-0002827633 00000 n 
-0002824269 00000 n 
-0002800843 00000 n 
-0002799273 00000 n 
-0002824205 00000 n 
-0002827785 00000 n 
-0002827937 00000 n 
-0002828088 00000 n 
-0002828240 00000 n 
-0002828391 00000 n 
-0002828541 00000 n 
-0002828690 00000 n 
-0002828840 00000 n 
-0002828990 00000 n 
-0002829140 00000 n 
-0002829290 00000 n 
-0002829440 00000 n 
-0002829590 00000 n 
-0002829740 00000 n 
-0002829890 00000 n 
-0002830041 00000 n 
-0002830193 00000 n 
-0002830345 00000 n 
-0002830497 00000 n 
-0002830648 00000 n 
-0002830799 00000 n 
-0002830950 00000 n 
-0002831101 00000 n 
-0002831252 00000 n 
-0002831404 00000 n 
-0002831555 00000 n 
-0002831707 00000 n 
-0002831857 00000 n 
-0002832009 00000 n 
-0002832161 00000 n 
-0002832313 00000 n 
-0002832465 00000 n 
-0002832617 00000 n 
-0002832768 00000 n 
-0002832919 00000 n 
-0002833070 00000 n 
-0002833221 00000 n 
-0002833373 00000 n 
-0002833525 00000 n 
-0002833677 00000 n 
-0002833828 00000 n 
-0002833979 00000 n 
-0002834131 00000 n 
-0002834283 00000 n 
-0002834434 00000 n 
-0002834585 00000 n 
-0002834736 00000 n 
-0002834887 00000 n 
-0002835039 00000 n 
-0002835190 00000 n 
-0002835341 00000 n 
-0002835492 00000 n 
-0002835642 00000 n 
-0002835792 00000 n 
-0002835944 00000 n 
-0002836094 00000 n 
-0002836246 00000 n 
-0002836397 00000 n 
-0002836549 00000 n 
-0002836700 00000 n 
-0002836852 00000 n 
-0002837004 00000 n 
-0002837155 00000 n 
-0002837306 00000 n 
-0002837458 00000 n 
-0002837608 00000 n 
-0002837759 00000 n 
-0002837909 00000 n 
-0002838061 00000 n 
-0002838212 00000 n 
-0002838363 00000 n 
-0002838514 00000 n 
-0002838665 00000 n 
-0002838817 00000 n 
-0002838969 00000 n 
-0002839121 00000 n 
-0002839271 00000 n 
-0002839422 00000 n 
-0002839574 00000 n 
-0002839726 00000 n 
-0002839878 00000 n 
-0002840028 00000 n 
-0002840179 00000 n 
-0002840331 00000 n 
-0002840482 00000 n 
-0002840633 00000 n 
-0002840785 00000 n 
-0002840937 00000 n 
-0002841089 00000 n 
-0002841241 00000 n 
-0002841393 00000 n 
-0002841545 00000 n 
-0002841697 00000 n 
-0002841849 00000 n 
+0001658409 00000 n 
+0001658536 00000 n 
+0001658600 00000 n 
+0001658664 00000 n 
+0001658728 00000 n 
+0001658791 00000 n 
+0001658855 00000 n 
+0001661195 00000 n 
+0001660823 00000 n 
+0001659049 00000 n 
+0001660939 00000 n 
+0001661003 00000 n 
+0001661067 00000 n 
+0001661131 00000 n 
+0001663723 00000 n 
+0001663099 00000 n 
+0001661311 00000 n 
+0001663215 00000 n 
+0001663279 00000 n 
+0001663343 00000 n 
+0001663470 00000 n 
+0001663597 00000 n 
+0001663660 00000 n 
+0001666603 00000 n 
+0001666039 00000 n 
+0001663853 00000 n 
+0001666155 00000 n 
+0001666219 00000 n 
+0001666283 00000 n 
+0001666347 00000 n 
+0001666411 00000 n 
+0001666475 00000 n 
+0001666539 00000 n 
+0001669732 00000 n 
+0001668979 00000 n 
+0001666747 00000 n 
+0001669095 00000 n 
+0001669222 00000 n 
+0001669286 00000 n 
+0001669350 00000 n 
+0001669413 00000 n 
+0001669540 00000 n 
+0001669604 00000 n 
+0001669668 00000 n 
+0003361745 00000 n 
+0001671101 00000 n 
+0001670857 00000 n 
+0001669876 00000 n 
+0001670973 00000 n 
+0001671037 00000 n 
+0001673706 00000 n 
+0001673335 00000 n 
+0001671217 00000 n 
+0001673451 00000 n 
+0001673515 00000 n 
+0001673642 00000 n 
+0001676001 00000 n 
+0001675630 00000 n 
+0001673850 00000 n 
+0001675746 00000 n 
+0001675873 00000 n 
+0001675937 00000 n 
+0001678466 00000 n 
+0001678286 00000 n 
+0001676159 00000 n 
+0001678402 00000 n 
+0001680046 00000 n 
+0001679866 00000 n 
+0001678610 00000 n 
+0001679982 00000 n 
+0001680485 00000 n 
+0001680305 00000 n 
+0001680204 00000 n 
+0001680421 00000 n 
+0003361870 00000 n 
+0001682517 00000 n 
+0001682083 00000 n 
+0001680527 00000 n 
+0001682199 00000 n 
+0001682326 00000 n 
+0001682453 00000 n 
+0001684998 00000 n 
+0001684691 00000 n 
+0001682633 00000 n 
+0001684807 00000 n 
+0001684934 00000 n 
+0001687267 00000 n 
+0001686833 00000 n 
+0001685114 00000 n 
+0001686949 00000 n 
+0001687076 00000 n 
+0001687203 00000 n 
+0001689339 00000 n 
+0001688906 00000 n 
+0001687397 00000 n 
+0001689022 00000 n 
+0001689149 00000 n 
+0001689275 00000 n 
+0001691030 00000 n 
+0001690723 00000 n 
+0001689469 00000 n 
+0001690839 00000 n 
+0001690966 00000 n 
+0001693682 00000 n 
+0001694314 00000 n 
+0001693536 00000 n 
+0001691217 00000 n 
+0001693995 00000 n 
+0001694122 00000 n 
+0001694186 00000 n 
+0001693839 00000 n 
+0001694250 00000 n 
+0003361995 00000 n 
+0001695960 00000 n 
+0001696151 00000 n 
+0001695652 00000 n 
+0001694444 00000 n 
+0001695768 00000 n 
+0001695832 00000 n 
+0001696087 00000 n 
+0001698496 00000 n 
+0001698663 00000 n 
+0001698341 00000 n 
+0001699160 00000 n 
+0001698186 00000 n 
+0001696281 00000 n 
+0001698840 00000 n 
+0001698904 00000 n 
+0001698968 00000 n 
+0001699032 00000 n 
+0001699096 00000 n 
+0001706190 00000 n 
+0001700750 00000 n 
+0001700442 00000 n 
+0001699332 00000 n 
+0001700558 00000 n 
+0001700622 00000 n 
+0001700686 00000 n 
+0001702454 00000 n 
+0001702867 00000 n 
+0001702317 00000 n 
+0001700866 00000 n 
+0001702612 00000 n 
+0001702676 00000 n 
+0001702803 00000 n 
+0001707470 00000 n 
+0001707852 00000 n 
+0001705946 00000 n 
+0001702997 00000 n 
+0001706062 00000 n 
+0001706254 00000 n 
+0001706318 00000 n 
+0001706382 00000 n 
+0001706446 00000 n 
+0001706510 00000 n 
+0001706574 00000 n 
+0001706638 00000 n 
+0001706702 00000 n 
+0001706766 00000 n 
+0001706830 00000 n 
+0001706894 00000 n 
+0001706958 00000 n 
+0001707022 00000 n 
+0001707086 00000 n 
+0001707150 00000 n 
+0001707214 00000 n 
+0001707278 00000 n 
+0001707342 00000 n 
+0001707597 00000 n 
+0001707724 00000 n 
+0001707788 00000 n 
+0001709552 00000 n 
+0001709705 00000 n 
+0001710368 00000 n 
+0001709406 00000 n 
+0001708037 00000 n 
+0001709856 00000 n 
+0001709920 00000 n 
+0001709984 00000 n 
+0001710048 00000 n 
+0001710112 00000 n 
+0001710176 00000 n 
+0001710240 00000 n 
+0001710304 00000 n 
+0003362120 00000 n 
+0001712232 00000 n 
+0001712359 00000 n 
+0001712549 00000 n 
+0001711988 00000 n 
+0001710484 00000 n 
+0001712104 00000 n 
+0001712485 00000 n 
+0001715294 00000 n 
+0001714924 00000 n 
+0001712679 00000 n 
+0001715040 00000 n 
+0001715167 00000 n 
+0001715231 00000 n 
+0001717765 00000 n 
+0001717585 00000 n 
+0001715424 00000 n 
+0001717701 00000 n 
+0001718953 00000 n 
+0001718773 00000 n 
+0001717895 00000 n 
+0001718889 00000 n 
+0001720860 00000 n 
+0001720427 00000 n 
+0001719055 00000 n 
+0001720543 00000 n 
+0001720670 00000 n 
+0001720796 00000 n 
+0001723344 00000 n 
+0001724006 00000 n 
+0001723198 00000 n 
+0001720976 00000 n 
+0001723815 00000 n 
+0001723942 00000 n 
+0001723579 00000 n 
+0003362245 00000 n 
+0001726890 00000 n 
+0001726582 00000 n 
+0001724192 00000 n 
+0001726698 00000 n 
+0001726826 00000 n 
+0001729781 00000 n 
+0001729220 00000 n 
+0001727006 00000 n 
+0001729336 00000 n 
+0001729463 00000 n 
+0001729590 00000 n 
+0001729717 00000 n 
+0001731791 00000 n 
+0001732280 00000 n 
+0001731645 00000 n 
+0001729925 00000 n 
+0001732090 00000 n 
+0001732217 00000 n 
+0001731940 00000 n 
+0002516671 00000 n 
+0001734589 00000 n 
+0001735055 00000 n 
+0001734452 00000 n 
+0001732495 00000 n 
+0001734739 00000 n 
+0001734864 00000 n 
+0001734991 00000 n 
+0001736969 00000 n 
+0001736789 00000 n 
+0001735242 00000 n 
+0001736905 00000 n 
+0001739258 00000 n 
+0001739475 00000 n 
+0001739121 00000 n 
+0001737085 00000 n 
+0001739411 00000 n 
+0003362370 00000 n 
+0002493712 00000 n 
+0001742018 00000 n 
+0001741458 00000 n 
+0001739605 00000 n 
+0001741574 00000 n 
+0001741701 00000 n 
+0001741828 00000 n 
+0001741954 00000 n 
+0001744699 00000 n 
+0001744138 00000 n 
+0001742134 00000 n 
+0001744254 00000 n 
+0001744381 00000 n 
+0001744508 00000 n 
+0001744635 00000 n 
+0001747396 00000 n 
+0001747089 00000 n 
+0001744829 00000 n 
+0001747205 00000 n 
+0001747332 00000 n 
+0001749718 00000 n 
+0001749411 00000 n 
+0001747512 00000 n 
+0001749527 00000 n 
+0001749654 00000 n 
+0001750900 00000 n 
+0001750720 00000 n 
+0001749876 00000 n 
+0001750836 00000 n 
+0001751283 00000 n 
+0001751103 00000 n 
+0001751002 00000 n 
+0001751219 00000 n 
+0003362495 00000 n 
+0001753212 00000 n 
+0001752905 00000 n 
+0001751325 00000 n 
+0001753021 00000 n 
+0001753148 00000 n 
+0001755774 00000 n 
+0001755953 00000 n 
+0001756135 00000 n 
+0001756499 00000 n 
+0001755619 00000 n 
+0001753328 00000 n 
+0001756309 00000 n 
+0001756436 00000 n 
+0001758705 00000 n 
+0001759084 00000 n 
+0001758568 00000 n 
+0001756685 00000 n 
+0001758893 00000 n 
+0001759020 00000 n 
+0001760245 00000 n 
+0001760065 00000 n 
+0001759270 00000 n 
+0001760181 00000 n 
+0001761954 00000 n 
+0001764294 00000 n 
+0001796163 00000 n 
+0001798942 00000 n 
+0001762614 00000 n 
+0001761817 00000 n 
+0001760347 00000 n 
+0001762105 00000 n 
+0001762423 00000 n 
+0001762486 00000 n 
+0001762550 00000 n 
+0001796899 00000 n 
+0001796315 00000 n 
+0001830475 00000 n 
+0001796619 00000 n 
+0001843307 00000 n 
+0001828793 00000 n 
+0001858590 00000 n 
+0001797218 00000 n 
+0001764130 00000 n 
+0001762730 00000 n 
+0001796771 00000 n 
+0001796963 00000 n 
+0001797027 00000 n 
+0001796467 00000 n 
+0001797091 00000 n 
+0001797154 00000 n 
+0003362620 00000 n 
+0001829225 00000 n 
+0001856397 00000 n 
+0001856525 00000 n 
+0001828945 00000 n 
+0001829353 00000 n 
+0001798796 00000 n 
+0001797372 00000 n 
+0001829097 00000 n 
+0001829289 00000 n 
+0001878437 00000 n 
+0001856589 00000 n 
+0001830359 00000 n 
+0001829507 00000 n 
+0001856269 00000 n 
+0001878628 00000 n 
+0001858474 00000 n 
+0001856744 00000 n 
+0001878309 00000 n 
+0001878564 00000 n 
+0001880791 00000 n 
+0001880611 00000 n 
+0001878796 00000 n 
+0001880727 00000 n 
+0001882113 00000 n 
+0001881933 00000 n 
+0001880907 00000 n 
+0001882049 00000 n 
+0001884450 00000 n 
+0001884791 00000 n 
+0001884313 00000 n 
+0001882229 00000 n 
+0001884600 00000 n 
+0001884727 00000 n 
+0003362745 00000 n 
+0002502268 00000 n 
+0001886942 00000 n 
+0001887098 00000 n 
+0001887250 00000 n 
+0001887554 00000 n 
+0001888278 00000 n 
+0001886769 00000 n 
+0001884935 00000 n 
+0001887706 00000 n 
+0001887833 00000 n 
+0001887960 00000 n 
+0001888087 00000 n 
+0001887402 00000 n 
+0001888214 00000 n 
+0002503766 00000 n 
+0001890202 00000 n 
+0001890364 00000 n 
+0001890526 00000 n 
+0001890688 00000 n 
+0001890847 00000 n 
+0001891518 00000 n 
+0001890029 00000 n 
+0001888408 00000 n 
+0001891006 00000 n 
+0001891262 00000 n 
+0001891326 00000 n 
+0001891390 00000 n 
+0001891454 00000 n 
+0002507921 00000 n 
+0002509286 00000 n 
+0002510785 00000 n 
+0002511963 00000 n 
+0002513082 00000 n 
+0001893114 00000 n 
+0001892871 00000 n 
+0001891648 00000 n 
+0001892987 00000 n 
+0001893051 00000 n 
+0001894467 00000 n 
+0001894223 00000 n 
+0001893230 00000 n 
+0001894339 00000 n 
+0001894403 00000 n 
+0001896013 00000 n 
+0001895705 00000 n 
+0001894583 00000 n 
+0001895821 00000 n 
+0001895885 00000 n 
+0001895949 00000 n 
+0001897555 00000 n 
+0001897931 00000 n 
+0001897418 00000 n 
+0001896129 00000 n 
+0001897739 00000 n 
+0001897867 00000 n 
+0003362870 00000 n 
+0001899809 00000 n 
+0001900041 00000 n 
+0001899672 00000 n 
+0001898117 00000 n 
+0001899977 00000 n 
+0001901613 00000 n 
+0001905368 00000 n 
+0001902081 00000 n 
+0001901476 00000 n 
+0001900213 00000 n 
+0001901762 00000 n 
+0001901826 00000 n 
+0001901890 00000 n 
+0001901954 00000 n 
+0001902018 00000 n 
+0002514443 00000 n 
+0001904761 00000 n 
+0001904909 00000 n 
+0001907282 00000 n 
+0001905062 00000 n 
+0001987161 00000 n 
+0001905216 00000 n 
+0001905665 00000 n 
+0001904588 00000 n 
+0001902197 00000 n 
+0001905537 00000 n 
+0001905601 00000 n 
+0002514570 00000 n 
+0001985348 00000 n 
+0002061376 00000 n 
+0002154873 00000 n 
+0002062627 00000 n 
+0001984911 00000 n 
+0001985063 00000 n 
+0002156463 00000 n 
+0002243291 00000 n 
+0002060946 00000 n 
+0001985412 00000 n 
+0001907136 00000 n 
+0001905851 00000 n 
+0001985220 00000 n 
+0001983979 00000 n 
+0002241466 00000 n 
+0002318907 00000 n 
+0002320422 00000 n 
+0002061440 00000 n 
+0001987015 00000 n 
+0001985566 00000 n 
+0002061248 00000 n 
+0002061098 00000 n 
+0002399288 00000 n 
+0002240822 00000 n 
+0002155065 00000 n 
+0002062511 00000 n 
+0002061580 00000 n 
+0002154745 00000 n 
+0002155001 00000 n 
+0003362995 00000 n 
+0002153738 00000 n 
+0002400444 00000 n 
+0002240975 00000 n 
+0002241149 00000 n 
+0002241530 00000 n 
+0002156308 00000 n 
+0002155219 00000 n 
+0002241338 00000 n 
+0002239967 00000 n 
+0002491744 00000 n 
+0002319099 00000 n 
+0002243175 00000 n 
+0002241726 00000 n 
+0002318779 00000 n 
+0002318033 00000 n 
+0002399352 00000 n 
+0002320306 00000 n 
+0002319267 00000 n 
+0002399160 00000 n 
+0002398431 00000 n 
+0002491808 00000 n 
+0002400328 00000 n 
+0002399506 00000 n 
+0002491616 00000 n 
+0002493776 00000 n 
+0002493468 00000 n 
+0002491962 00000 n 
+0002493584 00000 n 
+0002498683 00000 n 
+0002498890 00000 n 
+0002496044 00000 n 
+0002495736 00000 n 
+0002493906 00000 n 
+0002495852 00000 n 
+0002495980 00000 n 
+0003363120 00000 n 
+0002499096 00000 n 
+0002499608 00000 n 
+0002498528 00000 n 
+0002496188 00000 n 
+0002499289 00000 n 
+0002499417 00000 n 
+0002499544 00000 n 
+0002501175 00000 n 
+0002500995 00000 n 
+0002499794 00000 n 
+0002501111 00000 n 
+0002502332 00000 n 
+0002502024 00000 n 
+0002501291 00000 n 
+0002502140 00000 n 
+0002503830 00000 n 
+0002503522 00000 n 
+0002502448 00000 n 
+0002503638 00000 n 
+0002505149 00000 n 
+0002504713 00000 n 
+0002503946 00000 n 
+0002504829 00000 n 
+0002506613 00000 n 
+0002506305 00000 n 
+0002505265 00000 n 
+0002506421 00000 n 
+0003363245 00000 n 
+0002507985 00000 n 
+0002507677 00000 n 
+0002506729 00000 n 
+0002507793 00000 n 
+0002509350 00000 n 
+0002509042 00000 n 
+0002508101 00000 n 
+0002509158 00000 n 
+0002510848 00000 n 
+0002510541 00000 n 
+0002509466 00000 n 
+0002510657 00000 n 
+0002512027 00000 n 
+0002511719 00000 n 
+0002510964 00000 n 
+0002511835 00000 n 
+0002513146 00000 n 
+0002512838 00000 n 
+0002512143 00000 n 
+0002512954 00000 n 
+0002514634 00000 n 
+0002514200 00000 n 
+0002513262 00000 n 
+0002514316 00000 n 
+0003363370 00000 n 
+0002519243 00000 n 
+0002516863 00000 n 
+0002516427 00000 n 
+0002514750 00000 n 
+0002516543 00000 n 
+0002516799 00000 n 
+0002519414 00000 n 
+0002519663 00000 n 
+0002519097 00000 n 
+0002516979 00000 n 
+0002519599 00000 n 
+0002521993 00000 n 
+0002522146 00000 n 
+0002522490 00000 n 
+0002521847 00000 n 
+0002519892 00000 n 
+0002522298 00000 n 
+0002522426 00000 n 
+0002698992 00000 n 
+0002701253 00000 n 
+0002525234 00000 n 
+0002524542 00000 n 
+0002522620 00000 n 
+0002524658 00000 n 
+0002524786 00000 n 
+0002524850 00000 n 
+0002524914 00000 n 
+0002524978 00000 n 
+0002525042 00000 n 
+0002525170 00000 n 
+0002527929 00000 n 
+0002527365 00000 n 
+0002525378 00000 n 
+0002527481 00000 n 
+0002527609 00000 n 
+0002527673 00000 n 
+0002527737 00000 n 
+0002527801 00000 n 
+0002527865 00000 n 
+0002530156 00000 n 
+0002530470 00000 n 
+0002530622 00000 n 
+0002532244 00000 n 
+0002561578 00000 n 
+0002530774 00000 n 
+0002531438 00000 n 
+0002529983 00000 n 
+0002528073 00000 n 
+0002530928 00000 n 
+0002530992 00000 n 
+0002531056 00000 n 
+0002531120 00000 n 
+0002531183 00000 n 
+0002530313 00000 n 
+0002531246 00000 n 
+0002531374 00000 n 
+0003363495 00000 n 
+0002586698 00000 n 
+0002560220 00000 n 
+0002586570 00000 n 
+0002589574 00000 n 
+0002560284 00000 n 
+0002532128 00000 n 
+0002531554 00000 n 
+0002560092 00000 n 
+0002586889 00000 n 
+0002561462 00000 n 
+0002560424 00000 n 
+0002586442 00000 n 
+0002586762 00000 n 
+0002586825 00000 n 
+0002589957 00000 n 
+0002589330 00000 n 
+0002587057 00000 n 
+0002589446 00000 n 
+0002589638 00000 n 
+0002589702 00000 n 
+0002589766 00000 n 
+0002589830 00000 n 
+0002589894 00000 n 
+0002592044 00000 n 
+0002592197 00000 n 
+0002597278 00000 n 
+0002592955 00000 n 
+0002591889 00000 n 
+0002590087 00000 n 
+0002592508 00000 n 
+0002592572 00000 n 
+0002592636 00000 n 
+0002592764 00000 n 
+0002592353 00000 n 
+0002592892 00000 n 
+0002595741 00000 n 
+0002620552 00000 n 
+0002596124 00000 n 
+0002595497 00000 n 
+0002593071 00000 n 
+0002595613 00000 n 
+0002595805 00000 n 
+0002595869 00000 n 
+0002595933 00000 n 
+0002595996 00000 n 
+0002596060 00000 n 
+0002620808 00000 n 
+0002597162 00000 n 
+0002596296 00000 n 
+0002620424 00000 n 
+0002620616 00000 n 
+0002620680 00000 n 
+0002620744 00000 n 
+0003363620 00000 n 
+0002623469 00000 n 
+0002625398 00000 n 
+0002639724 00000 n 
+0002623941 00000 n 
+0002623332 00000 n 
+0002620976 00000 n 
+0002623621 00000 n 
+0002623685 00000 n 
+0002623749 00000 n 
+0002623877 00000 n 
+0002640007 00000 n 
+0002641533 00000 n 
+0002640071 00000 n 
+0002625261 00000 n 
+0002624141 00000 n 
+0002639879 00000 n 
+0002656369 00000 n 
+0002656561 00000 n 
+0002641417 00000 n 
+0002640225 00000 n 
+0002656241 00000 n 
+0002656497 00000 n 
+0002659698 00000 n 
+0002658814 00000 n 
+0002656729 00000 n 
+0002658930 00000 n 
+0002658994 00000 n 
+0002659058 00000 n 
+0002659122 00000 n 
+0002659186 00000 n 
+0002659250 00000 n 
+0002659314 00000 n 
+0002659378 00000 n 
+0002659442 00000 n 
+0002659506 00000 n 
+0002659570 00000 n 
+0002659634 00000 n 
+0002661951 00000 n 
+0002662101 00000 n 
+0002664118 00000 n 
+0002680444 00000 n 
+0002662851 00000 n 
+0002661796 00000 n 
+0002659842 00000 n 
+0002662403 00000 n 
+0002662467 00000 n 
+0002662531 00000 n 
+0002662595 00000 n 
+0002662659 00000 n 
+0002662723 00000 n 
+0002662252 00000 n 
+0002662787 00000 n 
+0002679040 00000 n 
+0002696221 00000 n 
+0002679232 00000 n 
+0002664002 00000 n 
+0002662981 00000 n 
+0002678912 00000 n 
+0002679168 00000 n 
+0003363745 00000 n 
+0002696413 00000 n 
+0002680328 00000 n 
+0002679400 00000 n 
+0002696093 00000 n 
+0002696349 00000 n 
+0002698654 00000 n 
+0002699184 00000 n 
+0002698517 00000 n 
+0002696581 00000 n 
+0002698864 00000 n 
+0002699120 00000 n 
+0002701381 00000 n 
+0002701009 00000 n 
+0002699412 00000 n 
+0002701125 00000 n 
+0002701317 00000 n 
+0002704026 00000 n 
+0002703846 00000 n 
+0002701539 00000 n 
+0002703962 00000 n 
+0002706424 00000 n 
+0002706244 00000 n 
+0002704184 00000 n 
+0002706360 00000 n 
+0002708548 00000 n 
+0002708368 00000 n 
+0002706625 00000 n 
+0002708484 00000 n 
+0003363870 00000 n 
+0002710222 00000 n 
+0002710804 00000 n 
+0002710076 00000 n 
+0002708692 00000 n 
+0002710549 00000 n 
+0002710677 00000 n 
+0002710385 00000 n 
+0002710740 00000 n 
+0002713328 00000 n 
+0002713148 00000 n 
+0002710962 00000 n 
+0002713264 00000 n 
+0002715404 00000 n 
+0002715096 00000 n 
+0002713430 00000 n 
+0002715212 00000 n 
+0002715276 00000 n 
+0002715340 00000 n 
+0002717800 00000 n 
+0002717557 00000 n 
+0002715506 00000 n 
+0002717673 00000 n 
+0002717737 00000 n 
+0002720087 00000 n 
+0002719843 00000 n 
+0002717916 00000 n 
+0002719959 00000 n 
+0002720023 00000 n 
+0002722222 00000 n 
+0002721915 00000 n 
+0002720189 00000 n 
+0002722031 00000 n 
+0002722095 00000 n 
+0002722158 00000 n 
+0003363995 00000 n 
+0002724731 00000 n 
+0002724232 00000 n 
+0002722338 00000 n 
+0002724348 00000 n 
+0002724412 00000 n 
+0002724476 00000 n 
+0002724540 00000 n 
+0002724604 00000 n 
+0002724668 00000 n 
+0002727426 00000 n 
+0002726926 00000 n 
+0002724833 00000 n 
+0002727042 00000 n 
+0002727106 00000 n 
+0002727170 00000 n 
+0002727234 00000 n 
+0002727298 00000 n 
+0002727362 00000 n 
+0002729922 00000 n 
+0002729678 00000 n 
+0002727542 00000 n 
+0002729794 00000 n 
+0002729858 00000 n 
+0002732263 00000 n 
+0002732019 00000 n 
+0002730010 00000 n 
+0002732135 00000 n 
+0002732199 00000 n 
+0002734870 00000 n 
+0002734307 00000 n 
+0002732379 00000 n 
+0002734423 00000 n 
+0002734487 00000 n 
+0002734551 00000 n 
+0002734615 00000 n 
+0002734679 00000 n 
+0002734743 00000 n 
+0002734806 00000 n 
+0002737190 00000 n 
+0002736882 00000 n 
+0002734958 00000 n 
+0002736998 00000 n 
+0002737062 00000 n 
+0002737126 00000 n 
+0003364120 00000 n 
+0002739425 00000 n 
+0002739117 00000 n 
+0002737306 00000 n 
+0002739233 00000 n 
+0002739297 00000 n 
+0002739361 00000 n 
+0002741973 00000 n 
+0002741793 00000 n 
+0002739527 00000 n 
+0002741909 00000 n 
+0002744304 00000 n 
+0002744060 00000 n 
+0002742075 00000 n 
+0002744176 00000 n 
+0002744240 00000 n 
+0002746563 00000 n 
+0002746256 00000 n 
+0002744406 00000 n 
+0002746372 00000 n 
+0002746436 00000 n 
+0002746499 00000 n 
+0002748591 00000 n 
+0002748219 00000 n 
+0002746679 00000 n 
+0002748335 00000 n 
+0002748399 00000 n 
+0002748463 00000 n 
+0002748527 00000 n 
+0002750721 00000 n 
+0002750414 00000 n 
+0002748693 00000 n 
+0002750530 00000 n 
+0002750594 00000 n 
+0003364245 00000 n 
+0002752538 00000 n 
+0002752715 00000 n 
+0002753171 00000 n 
+0002752383 00000 n 
+0002750851 00000 n 
+0002753107 00000 n 
+0002752911 00000 n 
+0002753568 00000 n 
+0002753388 00000 n 
+0002753287 00000 n 
+0002753504 00000 n 
+0002755529 00000 n 
+0002755892 00000 n 
+0002755392 00000 n 
+0002753610 00000 n 
+0002755700 00000 n 
+0002755828 00000 n 
+0002758133 00000 n 
+0002757953 00000 n 
+0002756064 00000 n 
+0002758069 00000 n 
+0002760441 00000 n 
+0002760261 00000 n 
+0002758249 00000 n 
+0002760377 00000 n 
+0002762627 00000 n 
+0002762447 00000 n 
+0002760557 00000 n 
+0002762563 00000 n 
+0003364370 00000 n 
+0002764290 00000 n 
+0002764527 00000 n 
+0002764153 00000 n 
+0002762743 00000 n 
+0002764463 00000 n 
+0002764980 00000 n 
+0002764800 00000 n 
+0002764699 00000 n 
+0002764916 00000 n 
+0002768025 00000 n 
+0002768177 00000 n 
+0002768328 00000 n 
+0002768479 00000 n 
+0002768630 00000 n 
+0002768781 00000 n 
+0002768932 00000 n 
+0002769083 00000 n 
+0002769234 00000 n 
+0002769385 00000 n 
+0002769536 00000 n 
+0002769687 00000 n 
+0002769837 00000 n 
+0002769987 00000 n 
+0002770137 00000 n 
+0002770287 00000 n 
+0002770438 00000 n 
+0002770587 00000 n 
+0002770738 00000 n 
+0002770889 00000 n 
+0002771040 00000 n 
+0002771190 00000 n 
+0002771340 00000 n 
+0002771492 00000 n 
+0002771644 00000 n 
+0002771796 00000 n 
+0002771948 00000 n 
+0002772100 00000 n 
+0002772251 00000 n 
+0002772402 00000 n 
+0002772553 00000 n 
+0002772704 00000 n 
+0002772856 00000 n 
+0002773006 00000 n 
+0002773157 00000 n 
+0002773308 00000 n 
+0002773459 00000 n 
+0002773610 00000 n 
+0002773761 00000 n 
+0002773913 00000 n 
+0002774065 00000 n 
+0002774214 00000 n 
+0002774365 00000 n 
+0002774516 00000 n 
+0002774667 00000 n 
+0002774818 00000 n 
+0002774968 00000 n 
+0002775120 00000 n 
+0002775272 00000 n 
+0002775423 00000 n 
+0002775575 00000 n 
+0002775727 00000 n 
+0002775879 00000 n 
+0002776031 00000 n 
+0002776183 00000 n 
+0002776334 00000 n 
+0002776485 00000 n 
+0002776635 00000 n 
+0002776785 00000 n 
+0002776935 00000 n 
+0002777086 00000 n 
+0002777237 00000 n 
+0002777387 00000 n 
+0002777538 00000 n 
+0002777689 00000 n 
+0002777840 00000 n 
+0002777991 00000 n 
+0002778142 00000 n 
+0002778293 00000 n 
+0002778445 00000 n 
+0002778597 00000 n 
+0002778749 00000 n 
+0002778901 00000 n 
+0002779052 00000 n 
+0002779204 00000 n 
+0002779355 00000 n 
+0002779505 00000 n 
+0002779657 00000 n 
+0002779809 00000 n 
+0002779961 00000 n 
+0002780113 00000 n 
+0002780265 00000 n 
+0002780416 00000 n 
+0002780567 00000 n 
+0002780718 00000 n 
+0002780870 00000 n 
+0002781021 00000 n 
+0002781173 00000 n 
+0002781325 00000 n 
+0002781477 00000 n 
+0002781628 00000 n 
+0002781779 00000 n 
+0002781931 00000 n 
+0002782082 00000 n 
+0002782232 00000 n 
+0002782383 00000 n 
+0002782535 00000 n 
+0002782687 00000 n 
+0002782839 00000 n 
+0002782988 00000 n 
+0002783140 00000 n 
+0002783291 00000 n 
+0002783442 00000 n 
+0002783594 00000 n 
+0002783744 00000 n 
+0002783896 00000 n 
+0002784048 00000 n 
+0002784199 00000 n 
+0002784350 00000 n 
+0002784502 00000 n 
+0002784653 00000 n 
+0002784804 00000 n 
+0002784955 00000 n 
+0002785105 00000 n 
+0002785257 00000 n 
+0002785409 00000 n 
+0002785561 00000 n 
+0002785713 00000 n 
+0002785864 00000 n 
+0002786016 00000 n 
+0002786168 00000 n 
+0002786320 00000 n 
+0002786472 00000 n 
+0002786623 00000 n 
+0002786774 00000 n 
+0002786925 00000 n 
+0002787076 00000 n 
+0002787228 00000 n 
+0002787379 00000 n 
+0002787531 00000 n 
+0002787682 00000 n 
+0002787834 00000 n 
+0002787982 00000 n 
+0002788134 00000 n 
+0002788285 00000 n 
+0002788437 00000 n 
+0002788589 00000 n 
+0002788741 00000 n 
+0002788893 00000 n 
+0002789045 00000 n 
+0002789196 00000 n 
+0002789347 00000 n 
+0002789498 00000 n 
+0002789650 00000 n 
+0002789802 00000 n 
+0002793078 00000 n 
+0002793230 00000 n 
+0002793382 00000 n 
+0002790018 00000 n 
+0002766592 00000 n 
+0002765022 00000 n 
+0002789954 00000 n 
+0002793534 00000 n 
+0002793686 00000 n 
+0002793837 00000 n 
+0002793989 00000 n 
+0002794140 00000 n 
+0002794290 00000 n 
+0002794439 00000 n 
+0002794589 00000 n 
+0002794739 00000 n 
+0002794889 00000 n 
+0002795039 00000 n 
+0002795189 00000 n 
+0002795339 00000 n 
+0002795489 00000 n 
+0002795639 00000 n 
+0002795790 00000 n 
+0002795942 00000 n 
+0002796094 00000 n 
+0002796246 00000 n 
+0002796397 00000 n 
+0002796548 00000 n 
+0002796699 00000 n 
+0002796850 00000 n 
+0002797001 00000 n 
+0002797153 00000 n 
+0002797304 00000 n 
+0002797456 00000 n 
+0002797606 00000 n 
+0002797758 00000 n 
+0002797910 00000 n 
+0002798062 00000 n 
+0002798214 00000 n 
+0002798366 00000 n 
+0002798517 00000 n 
+0002798668 00000 n 
+0002798819 00000 n 
+0002798970 00000 n 
+0002799122 00000 n 
+0002799274 00000 n 
+0002799426 00000 n 
+0002799577 00000 n 
+0002799728 00000 n 
+0002799880 00000 n 
+0002800032 00000 n 
+0002800183 00000 n 
+0002800334 00000 n 
+0002800485 00000 n 
+0002800636 00000 n 
+0002800788 00000 n 
+0002800939 00000 n 
+0002801090 00000 n 
+0002801241 00000 n 
+0002801391 00000 n 
+0002801541 00000 n 
+0002801693 00000 n 
+0002801843 00000 n 
+0002801995 00000 n 
+0002802146 00000 n 
+0002802298 00000 n 
+0002802449 00000 n 
+0002802601 00000 n 
+0002802753 00000 n 
+0002802904 00000 n 
+0002803055 00000 n 
+0002803207 00000 n 
+0002803357 00000 n 
+0002803508 00000 n 
+0002803658 00000 n 
+0002803810 00000 n 
+0002803961 00000 n 
+0002804112 00000 n 
+0002804263 00000 n 
+0002804414 00000 n 
+0002804566 00000 n 
+0002804718 00000 n 
+0002804870 00000 n 
+0002805020 00000 n 
+0002805171 00000 n 
+0002805323 00000 n 
+0002805475 00000 n 
+0002805627 00000 n 
+0002805777 00000 n 
+0002805928 00000 n 
+0002806080 00000 n 
+0002806231 00000 n 
+0002806382 00000 n 
+0002806534 00000 n 
+0002806686 00000 n 
+0002806838 00000 n 
+0002806990 00000 n 
+0002807142 00000 n 
+0002807294 00000 n 
+0002807446 00000 n 
+0002807598 00000 n 
+0002807750 00000 n 
+0002807901 00000 n 
+0002808053 00000 n 
+0002808205 00000 n 
+0002808357 00000 n 
+0002808509 00000 n 
+0002808659 00000 n 
+0002808811 00000 n 
+0002808963 00000 n 
+0002809115 00000 n 
+0002809267 00000 n 
+0002809419 00000 n 
+0002809571 00000 n 
+0002809722 00000 n 
+0002809874 00000 n 
+0002810026 00000 n 
+0002810177 00000 n 
+0002810329 00000 n 
+0002810481 00000 n 
+0002810633 00000 n 
+0002810785 00000 n 
+0002810935 00000 n 
+0002811086 00000 n 
+0002811238 00000 n 
+0002811390 00000 n 
+0002811542 00000 n 
+0002811693 00000 n 
+0002811844 00000 n 
+0002811995 00000 n 
+0002812146 00000 n 
+0002812298 00000 n 
+0002812450 00000 n 
+0002812601 00000 n 
+0002812752 00000 n 
+0002812904 00000 n 
+0002815766 00000 n 
+0002815918 00000 n 
+0002813119 00000 n 
+0002791762 00000 n 
+0002790134 00000 n 
+0002813055 00000 n 
+0002816069 00000 n 
+0002816221 00000 n 
+0002816373 00000 n 
+0002816524 00000 n 
+0002816676 00000 n 
+0002816828 00000 n 
+0002816980 00000 n 
+0002817132 00000 n 
+0002817284 00000 n 
+0002817436 00000 n 
+0002817588 00000 n 
+0002817740 00000 n 
+0002817891 00000 n 
+0002818042 00000 n 
+0002818193 00000 n 
+0002818345 00000 n 
+0002818497 00000 n 
+0002818649 00000 n 
+0002818801 00000 n 
+0002818952 00000 n 
+0002819104 00000 n 
+0002819255 00000 n 
+0002819406 00000 n 
+0002819558 00000 n 
+0002819710 00000 n 
+0002819860 00000 n 
+0002820010 00000 n 
+0002820161 00000 n 
+0002820310 00000 n 
+0002820462 00000 n 
+0002820612 00000 n 
+0002820762 00000 n 
+0002820912 00000 n 
+0002821063 00000 n 
+0002821213 00000 n 
+0002821364 00000 n 
+0002821516 00000 n 
+0002821668 00000 n 
+0002821820 00000 n 
+0002821971 00000 n 
+0002822123 00000 n 
+0002822275 00000 n 
+0002822427 00000 n 
+0002822579 00000 n 
+0002822731 00000 n 
+0002822883 00000 n 
+0002823035 00000 n 
+0002823187 00000 n 
+0002823339 00000 n 
+0002823490 00000 n 
+0002823642 00000 n 
+0002823793 00000 n 
+0002823944 00000 n 
+0002824096 00000 n 
+0002824247 00000 n 
+0002824398 00000 n 
+0002824549 00000 n 
+0002824700 00000 n 
+0002824848 00000 n 
+0002824996 00000 n 
+0002825148 00000 n 
+0002825300 00000 n 
+0002825452 00000 n 
+0002825604 00000 n 
+0002825756 00000 n 
+0002825908 00000 n 
+0002826060 00000 n 
+0002826212 00000 n 
+0002826364 00000 n 
+0002826516 00000 n 
+0002826668 00000 n 
+0002826819 00000 n 
+0002826970 00000 n 
+0002827121 00000 n 
+0002827273 00000 n 
+0002827425 00000 n 
+0002827577 00000 n 
+0002827728 00000 n 
+0002827880 00000 n 
+0002828030 00000 n 
+0002828182 00000 n 
+0002828334 00000 n 
+0002828486 00000 n 
+0002828637 00000 n 
+0002828787 00000 n 
+0002828939 00000 n 
+0002829091 00000 n 
+0002829243 00000 n 
+0002829394 00000 n 
+0002829544 00000 n 
+0002829696 00000 n 
+0002829848 00000 n 
+0002830000 00000 n 
+0002830152 00000 n 
+0002830304 00000 n 
+0002830456 00000 n 
+0002830607 00000 n 
+0002830759 00000 n 
+0002830911 00000 n 
+0002833997 00000 n 
+0002834148 00000 n 
+0002831127 00000 n 
+0002814729 00000 n 
+0002813235 00000 n 
+0002831063 00000 n 
+0002834300 00000 n 
+0002834450 00000 n 
+0002834602 00000 n 
+0002834752 00000 n 
+0002834901 00000 n 
+0002835051 00000 n 
+0002835200 00000 n 
+0002835350 00000 n 
+0002835500 00000 n 
+0002835651 00000 n 
+0002835802 00000 n 
+0002835953 00000 n 
+0002836104 00000 n 
+0002836254 00000 n 
+0002836405 00000 n 
+0002836556 00000 n 
+0002836706 00000 n 
+0002836856 00000 n 
+0002837008 00000 n 
+0002837160 00000 n 
+0002837310 00000 n 
+0002837460 00000 n 
+0002837611 00000 n 
+0002837762 00000 n 
+0002837914 00000 n 
+0002838066 00000 n 
+0002838217 00000 n 
+0002838367 00000 n 
+0002838519 00000 n 
+0002838671 00000 n 
+0002838822 00000 n 
+0002838973 00000 n 
+0002839124 00000 n 
+0002839275 00000 n 
+0002839427 00000 n 
+0002839579 00000 n 
+0002839731 00000 n 
+0002839883 00000 n 
+0002840035 00000 n 
+0002840186 00000 n 
+0002840338 00000 n 
+0002840490 00000 n 
+0002840641 00000 n 
+0002840793 00000 n 
+0002840945 00000 n 
+0002841095 00000 n 
+0002841245 00000 n 
+0002841395 00000 n 
+0002841547 00000 n 
+0002841698 00000 n 
+0002841850 00000 n 
 0002842001 00000 n 
 0002842152 00000 n 
 0002842304 00000 n 
 0002842456 00000 n 
 0002842608 00000 n 
-0002842760 00000 n 
-0002842910 00000 n 
-0002843062 00000 n 
-0002843214 00000 n 
-0002843366 00000 n 
-0002843518 00000 n 
-0002843670 00000 n 
-0002843822 00000 n 
-0002843973 00000 n 
-0002844125 00000 n 
-0002844277 00000 n 
-0002844428 00000 n 
-0002844580 00000 n 
-0002844732 00000 n 
-0002844884 00000 n 
-0002845036 00000 n 
-0002845186 00000 n 
-0002845337 00000 n 
-0002845489 00000 n 
-0002845641 00000 n 
-0002845793 00000 n 
-0002845944 00000 n 
-0002846095 00000 n 
-0002846246 00000 n 
-0002846397 00000 n 
-0002846549 00000 n 
-0002846701 00000 n 
-0002846852 00000 n 
-0002847003 00000 n 
-0002847155 00000 n 
-0002850017 00000 n 
-0002850169 00000 n 
-0002847370 00000 n 
-0002826013 00000 n 
-0002824385 00000 n 
-0002847306 00000 n 
-0002850320 00000 n 
-0002850472 00000 n 
-0002850624 00000 n 
-0002850775 00000 n 
-0002850927 00000 n 
-0002851079 00000 n 
-0002851231 00000 n 
-0002851383 00000 n 
-0002851535 00000 n 
-0002851687 00000 n 
-0002851839 00000 n 
-0002851991 00000 n 
-0002852142 00000 n 
-0002852293 00000 n 
-0002852444 00000 n 
-0002852596 00000 n 
-0002852748 00000 n 
-0002852900 00000 n 
-0002853052 00000 n 
-0002853203 00000 n 
-0002853355 00000 n 
-0002853506 00000 n 
-0002853657 00000 n 
-0002853809 00000 n 
-0002853961 00000 n 
-0002854111 00000 n 
-0002854261 00000 n 
-0002854412 00000 n 
-0002854561 00000 n 
-0002854713 00000 n 
-0002854863 00000 n 
-0002855013 00000 n 
-0002855163 00000 n 
-0002855314 00000 n 
-0002855464 00000 n 
-0002855615 00000 n 
-0002855767 00000 n 
-0002855919 00000 n 
-0002856071 00000 n 
-0002856222 00000 n 
-0002856374 00000 n 
-0002856526 00000 n 
-0002856678 00000 n 
-0002856830 00000 n 
-0002856982 00000 n 
-0002857134 00000 n 
-0002857286 00000 n 
-0002857438 00000 n 
-0002857590 00000 n 
-0002857741 00000 n 
-0002857893 00000 n 
-0002858044 00000 n 
-0002858195 00000 n 
-0002858347 00000 n 
-0002858498 00000 n 
-0002858649 00000 n 
-0002858800 00000 n 
-0002858951 00000 n 
-0002859099 00000 n 
-0002859247 00000 n 
-0002859399 00000 n 
-0002859551 00000 n 
-0002859703 00000 n 
-0002859855 00000 n 
-0002860007 00000 n 
-0002860159 00000 n 
-0002860311 00000 n 
-0002860463 00000 n 
-0002860615 00000 n 
-0002860767 00000 n 
-0002860919 00000 n 
-0002861070 00000 n 
-0002861221 00000 n 
-0002861372 00000 n 
-0002861524 00000 n 
-0002861676 00000 n 
-0002861828 00000 n 
-0002861979 00000 n 
-0002862131 00000 n 
-0002862281 00000 n 
-0002862433 00000 n 
-0002862585 00000 n 
-0002862737 00000 n 
-0002862888 00000 n 
-0002863038 00000 n 
-0002863190 00000 n 
-0002863342 00000 n 
-0002863494 00000 n 
-0002863645 00000 n 
-0002863795 00000 n 
-0002863947 00000 n 
-0002864099 00000 n 
-0002864251 00000 n 
-0002864403 00000 n 
-0002864555 00000 n 
-0002864707 00000 n 
-0002864858 00000 n 
-0002865010 00000 n 
-0002865162 00000 n 
-0002868248 00000 n 
-0002868399 00000 n 
-0002865378 00000 n 
-0002848980 00000 n 
-0002847486 00000 n 
-0002865314 00000 n 
-0002868551 00000 n 
-0002868701 00000 n 
-0002868853 00000 n 
-0002869003 00000 n 
-0002869152 00000 n 
-0002869302 00000 n 
-0002869451 00000 n 
-0002869601 00000 n 
-0002869751 00000 n 
-0002869902 00000 n 
-0002870053 00000 n 
-0002870204 00000 n 
-0002870355 00000 n 
-0002870505 00000 n 
-0002870656 00000 n 
-0002870807 00000 n 
-0002870957 00000 n 
-0002871107 00000 n 
-0002871259 00000 n 
-0002871411 00000 n 
-0002871561 00000 n 
-0002871711 00000 n 
-0002871862 00000 n 
-0002872013 00000 n 
-0002872165 00000 n 
-0002872317 00000 n 
-0002872468 00000 n 
-0002872618 00000 n 
-0002872770 00000 n 
-0002872922 00000 n 
-0002873073 00000 n 
-0002873224 00000 n 
-0002873375 00000 n 
-0002873526 00000 n 
-0002873678 00000 n 
-0002873830 00000 n 
-0002873982 00000 n 
-0002874134 00000 n 
-0002874286 00000 n 
-0002874437 00000 n 
-0002874589 00000 n 
-0002874741 00000 n 
-0002874892 00000 n 
-0002875044 00000 n 
-0002875196 00000 n 
-0002875346 00000 n 
-0002875496 00000 n 
-0002875646 00000 n 
-0002875798 00000 n 
-0002875949 00000 n 
-0002876101 00000 n 
-0002876252 00000 n 
-0002876403 00000 n 
-0002876555 00000 n 
-0002876707 00000 n 
-0002876859 00000 n 
-0002877010 00000 n 
-0002877162 00000 n 
-0002877314 00000 n 
-0002877466 00000 n 
-0002877616 00000 n 
-0002877767 00000 n 
-0002877917 00000 n 
-0002878068 00000 n 
-0002878220 00000 n 
-0002878372 00000 n 
-0002878524 00000 n 
-0002878676 00000 n 
-0002878828 00000 n 
-0002878980 00000 n 
-0002879129 00000 n 
-0002879279 00000 n 
-0002879431 00000 n 
-0002879583 00000 n 
-0002879734 00000 n 
-0002879884 00000 n 
-0002880035 00000 n 
-0002880186 00000 n 
-0002880337 00000 n 
-0002880489 00000 n 
-0002880641 00000 n 
-0002880793 00000 n 
-0002880945 00000 n 
-0002881095 00000 n 
-0002881246 00000 n 
-0002881397 00000 n 
-0002881548 00000 n 
-0002881699 00000 n 
-0002881850 00000 n 
-0002882002 00000 n 
-0002882153 00000 n 
-0002882305 00000 n 
-0002882457 00000 n 
-0002882609 00000 n 
-0002882760 00000 n 
-0002882912 00000 n 
-0002883064 00000 n 
-0002883216 00000 n 
-0002883368 00000 n 
-0002883519 00000 n 
-0002883669 00000 n 
-0002883821 00000 n 
-0002883973 00000 n 
-0002884125 00000 n 
-0002884277 00000 n 
-0002884429 00000 n 
-0002884580 00000 n 
-0002884732 00000 n 
-0002884883 00000 n 
-0002885034 00000 n 
-0002885185 00000 n 
-0002885336 00000 n 
-0002885488 00000 n 
-0002885640 00000 n 
-0002885792 00000 n 
-0002885944 00000 n 
-0002886095 00000 n 
-0002886247 00000 n 
-0002886398 00000 n 
-0002886550 00000 n 
-0002886702 00000 n 
-0002889431 00000 n 
-0002886918 00000 n 
-0002867013 00000 n 
-0002865494 00000 n 
-0002886854 00000 n 
-0003388180 00000 n 
-0002889583 00000 n 
-0002889735 00000 n 
-0002889887 00000 n 
-0002890037 00000 n 
-0002890188 00000 n 
-0002890338 00000 n 
-0002890487 00000 n 
-0002890636 00000 n 
-0002890787 00000 n 
-0002890937 00000 n 
-0002891088 00000 n 
-0002891240 00000 n 
-0002891392 00000 n 
-0002891544 00000 n 
-0002891696 00000 n 
-0002891848 00000 n 
-0002892000 00000 n 
-0002892151 00000 n 
-0002892303 00000 n 
-0002892455 00000 n 
-0002892607 00000 n 
-0002892759 00000 n 
-0002892910 00000 n 
-0002893061 00000 n 
-0002893212 00000 n 
-0002893363 00000 n 
-0002893515 00000 n 
-0002893667 00000 n 
-0002893819 00000 n 
-0002893971 00000 n 
-0002894123 00000 n 
-0002894275 00000 n 
-0002894426 00000 n 
-0002894578 00000 n 
-0002894728 00000 n 
-0002894877 00000 n 
-0002895029 00000 n 
-0002895181 00000 n 
-0002895332 00000 n 
-0002895483 00000 n 
-0002895635 00000 n 
-0002895787 00000 n 
-0002895939 00000 n 
-0002896091 00000 n 
-0002896243 00000 n 
-0002896395 00000 n 
-0002896547 00000 n 
-0002896699 00000 n 
-0002896851 00000 n 
-0002897003 00000 n 
-0002897152 00000 n 
-0002897301 00000 n 
-0002897453 00000 n 
-0002897604 00000 n 
-0002897756 00000 n 
-0002897908 00000 n 
-0002898060 00000 n 
-0002898211 00000 n 
-0002898363 00000 n 
-0002898515 00000 n 
-0002898667 00000 n 
-0002898819 00000 n 
-0002898971 00000 n 
-0002899123 00000 n 
-0002899275 00000 n 
-0002899427 00000 n 
-0002899578 00000 n 
-0002899730 00000 n 
-0002899882 00000 n 
-0002900033 00000 n 
-0002900184 00000 n 
-0002900335 00000 n 
-0002900486 00000 n 
-0002900638 00000 n 
-0002900790 00000 n 
-0002900941 00000 n 
-0002901092 00000 n 
-0002901243 00000 n 
-0002901393 00000 n 
-0002901544 00000 n 
-0002901696 00000 n 
-0002901848 00000 n 
-0002901999 00000 n 
-0002902151 00000 n 
-0002902302 00000 n 
-0002902454 00000 n 
-0002902605 00000 n 
-0002902757 00000 n 
-0002902909 00000 n 
-0002903061 00000 n 
-0002903212 00000 n 
-0002906060 00000 n 
-0002903428 00000 n 
-0002888475 00000 n 
-0002887034 00000 n 
-0002903364 00000 n 
-0002906210 00000 n 
-0002906362 00000 n 
-0002906514 00000 n 
-0002906666 00000 n 
-0002906817 00000 n 
-0002906967 00000 n 
-0002907119 00000 n 
-0002907270 00000 n 
-0002907421 00000 n 
-0002907573 00000 n 
-0002907725 00000 n 
-0002907876 00000 n 
-0002908028 00000 n 
-0002908180 00000 n 
-0002908332 00000 n 
-0002908481 00000 n 
-0002908633 00000 n 
-0002908785 00000 n 
-0002908936 00000 n 
-0002909088 00000 n 
-0002909240 00000 n 
-0002909392 00000 n 
-0002909543 00000 n 
-0002909693 00000 n 
-0002909845 00000 n 
-0002909996 00000 n 
-0002910147 00000 n 
-0002910296 00000 n 
-0002910447 00000 n 
-0002910599 00000 n 
-0002910749 00000 n 
-0002910901 00000 n 
-0002911052 00000 n 
-0002911202 00000 n 
-0002911353 00000 n 
-0002911505 00000 n 
-0002911657 00000 n 
-0002911809 00000 n 
-0002911961 00000 n 
-0002912112 00000 n 
-0002912264 00000 n 
-0002912416 00000 n 
-0002912567 00000 n 
-0002912718 00000 n 
-0002912869 00000 n 
-0002913021 00000 n 
-0002913172 00000 n 
-0002913324 00000 n 
-0002913476 00000 n 
-0002913628 00000 n 
-0002913779 00000 n 
-0002913930 00000 n 
-0002914082 00000 n 
-0002914234 00000 n 
-0002914386 00000 n 
-0002914538 00000 n 
-0002914690 00000 n 
-0002914842 00000 n 
-0002914994 00000 n 
-0002915146 00000 n 
-0002915298 00000 n 
-0002915450 00000 n 
-0002915602 00000 n 
-0002915754 00000 n 
-0002915906 00000 n 
-0002916056 00000 n 
-0002916208 00000 n 
-0002916359 00000 n 
-0002916510 00000 n 
-0002916661 00000 n 
-0002916813 00000 n 
-0002916965 00000 n 
-0002917117 00000 n 
-0002917269 00000 n 
-0002917421 00000 n 
-0002917573 00000 n 
-0002917725 00000 n 
-0002917877 00000 n 
-0002918029 00000 n 
-0002918180 00000 n 
-0002918331 00000 n 
-0002918482 00000 n 
-0002918633 00000 n 
-0002918783 00000 n 
-0002918935 00000 n 
-0002919086 00000 n 
-0002919237 00000 n 
-0002919387 00000 n 
-0002919538 00000 n 
-0002919688 00000 n 
-0002919839 00000 n 
-0002919990 00000 n 
-0002920141 00000 n 
-0002920293 00000 n 
-0002920445 00000 n 
-0002920597 00000 n 
-0002920749 00000 n 
-0002920901 00000 n 
-0002921053 00000 n 
-0002921205 00000 n 
-0002921355 00000 n 
-0002921506 00000 n 
-0002921657 00000 n 
-0002921808 00000 n 
-0002921960 00000 n 
-0002922112 00000 n 
-0002925197 00000 n 
-0002925348 00000 n 
-0002922328 00000 n 
-0002904969 00000 n 
-0002903544 00000 n 
-0002922264 00000 n 
-0002925499 00000 n 
-0002925651 00000 n 
-0002925802 00000 n 
-0002925953 00000 n 
-0002926104 00000 n 
-0002926256 00000 n 
-0002926406 00000 n 
-0002926558 00000 n 
-0002926710 00000 n 
-0002926862 00000 n 
-0002927014 00000 n 
-0002927165 00000 n 
-0002927316 00000 n 
-0002927468 00000 n 
-0002927620 00000 n 
-0002927772 00000 n 
-0002927923 00000 n 
-0002928074 00000 n 
-0002928226 00000 n 
-0002928377 00000 n 
-0002928529 00000 n 
-0002928681 00000 n 
-0002928832 00000 n 
-0002928984 00000 n 
-0002929136 00000 n 
-0002929287 00000 n 
-0002929439 00000 n 
-0002929591 00000 n 
-0002929741 00000 n 
-0002929893 00000 n 
-0002930045 00000 n 
-0002930197 00000 n 
-0002930349 00000 n 
-0002930501 00000 n 
-0002930653 00000 n 
-0002930805 00000 n 
-0002930956 00000 n 
-0002931108 00000 n 
-0002931260 00000 n 
-0002931412 00000 n 
-0002931564 00000 n 
-0002931716 00000 n 
-0002931868 00000 n 
-0002932019 00000 n 
-0002932169 00000 n 
-0002932321 00000 n 
-0002932473 00000 n 
-0002932625 00000 n 
-0002932777 00000 n 
-0002932929 00000 n 
-0002933081 00000 n 
-0002933233 00000 n 
-0002933385 00000 n 
-0002933537 00000 n 
-0002933689 00000 n 
-0002933841 00000 n 
-0002933992 00000 n 
-0002934144 00000 n 
-0002934296 00000 n 
-0002934448 00000 n 
-0002934600 00000 n 
-0002934752 00000 n 
-0002934904 00000 n 
-0002935056 00000 n 
-0002935206 00000 n 
-0002935357 00000 n 
-0002935509 00000 n 
-0002935661 00000 n 
-0002935812 00000 n 
-0002935961 00000 n 
-0002936112 00000 n 
-0002936263 00000 n 
-0002936415 00000 n 
-0002936567 00000 n 
-0002936718 00000 n 
-0002936870 00000 n 
-0002937020 00000 n 
-0002937171 00000 n 
-0002937322 00000 n 
-0002937474 00000 n 
-0002937626 00000 n 
-0002937778 00000 n 
-0002937930 00000 n 
-0002938082 00000 n 
-0002938234 00000 n 
-0002938386 00000 n 
-0002938538 00000 n 
-0002938689 00000 n 
-0002938840 00000 n 
-0002938992 00000 n 
-0002939142 00000 n 
-0002939293 00000 n 
-0002939445 00000 n 
-0002939597 00000 n 
-0002939747 00000 n 
-0002939898 00000 n 
-0002940050 00000 n 
-0002940201 00000 n 
-0002940350 00000 n 
-0002940501 00000 n 
-0002940650 00000 n 
-0002940801 00000 n 
-0002940953 00000 n 
-0002941105 00000 n 
-0002941257 00000 n 
-0002941408 00000 n 
-0002941559 00000 n 
-0002941710 00000 n 
-0002941861 00000 n 
-0002942011 00000 n 
-0002942161 00000 n 
-0002942310 00000 n 
-0002942461 00000 n 
-0002942612 00000 n 
-0002942763 00000 n 
-0002942915 00000 n 
-0002946028 00000 n 
-0002943130 00000 n 
-0002924007 00000 n 
-0002922444 00000 n 
-0002943066 00000 n 
-0002946180 00000 n 
-0002946331 00000 n 
-0002946483 00000 n 
-0002946635 00000 n 
-0002946787 00000 n 
-0002946939 00000 n 
-0002947089 00000 n 
-0002947241 00000 n 
-0002947393 00000 n 
-0002947545 00000 n 
-0002947696 00000 n 
-0002947848 00000 n 
-0002948000 00000 n 
-0002948152 00000 n 
-0002948304 00000 n 
-0002948456 00000 n 
-0002948607 00000 n 
-0002948758 00000 n 
-0002948910 00000 n 
-0002949062 00000 n 
-0002949213 00000 n 
-0002949365 00000 n 
-0002949517 00000 n 
-0002949669 00000 n 
-0002949820 00000 n 
-0002949971 00000 n 
-0002950123 00000 n 
-0002950275 00000 n 
-0002950427 00000 n 
-0002950578 00000 n 
-0002950729 00000 n 
-0002950881 00000 n 
-0002951031 00000 n 
-0002951182 00000 n 
-0002951333 00000 n 
-0002951484 00000 n 
-0002951634 00000 n 
-0002951784 00000 n 
-0002951934 00000 n 
-0002952085 00000 n 
-0002952236 00000 n 
-0002952387 00000 n 
-0002952538 00000 n 
-0002952689 00000 n 
-0002952840 00000 n 
-0002952989 00000 n 
-0002953141 00000 n 
-0002953293 00000 n 
-0002953445 00000 n 
-0002953597 00000 n 
-0002953749 00000 n 
-0002953901 00000 n 
-0002954053 00000 n 
-0002954205 00000 n 
-0002954356 00000 n 
-0002954508 00000 n 
-0002954659 00000 n 
-0002954811 00000 n 
-0002954961 00000 n 
-0002955113 00000 n 
-0002955264 00000 n 
-0002955416 00000 n 
-0002955568 00000 n 
-0002955720 00000 n 
-0002955872 00000 n 
-0002956023 00000 n 
-0002956175 00000 n 
-0002956327 00000 n 
-0002956478 00000 n 
-0002956629 00000 n 
-0002956777 00000 n 
-0002956925 00000 n 
-0002957074 00000 n 
-0002957223 00000 n 
-0002957372 00000 n 
-0002957521 00000 n 
-0002957670 00000 n 
-0002957822 00000 n 
-0002957973 00000 n 
-0002958125 00000 n 
-0002958277 00000 n 
-0002958429 00000 n 
-0002958581 00000 n 
-0002958733 00000 n 
-0002958885 00000 n 
-0002959036 00000 n 
-0002959188 00000 n 
-0002959340 00000 n 
-0002959492 00000 n 
-0002959643 00000 n 
-0002959794 00000 n 
-0002959945 00000 n 
-0002960095 00000 n 
-0002960247 00000 n 
-0002960398 00000 n 
-0002960550 00000 n 
-0002960702 00000 n 
-0002960854 00000 n 
-0002961006 00000 n 
-0002961158 00000 n 
-0002961310 00000 n 
-0002961460 00000 n 
-0002961611 00000 n 
-0002961761 00000 n 
-0002961913 00000 n 
-0002962065 00000 n 
-0002962216 00000 n 
-0002962366 00000 n 
-0002962517 00000 n 
-0002962668 00000 n 
-0002962819 00000 n 
-0002962970 00000 n 
-0002963121 00000 n 
-0002963272 00000 n 
-0002963423 00000 n 
-0002963574 00000 n 
-0002966461 00000 n 
-0002963790 00000 n 
-0002944847 00000 n 
-0002943232 00000 n 
-0002963726 00000 n 
-0002966613 00000 n 
-0002966765 00000 n 
-0002966915 00000 n 
-0002967067 00000 n 
-0002967219 00000 n 
-0002967370 00000 n 
-0002967521 00000 n 
-0002967672 00000 n 
-0002967823 00000 n 
-0002967975 00000 n 
-0002968126 00000 n 
-0002968278 00000 n 
-0002968430 00000 n 
-0002968582 00000 n 
-0002968733 00000 n 
-0002968885 00000 n 
-0002969037 00000 n 
-0002969189 00000 n 
-0002969341 00000 n 
-0002969493 00000 n 
-0002969645 00000 n 
-0002969797 00000 n 
-0002969949 00000 n 
-0002970100 00000 n 
-0002970251 00000 n 
-0002970402 00000 n 
-0002970554 00000 n 
-0002970705 00000 n 
-0002970856 00000 n 
-0002971007 00000 n 
-0002971158 00000 n 
-0002971308 00000 n 
-0002971459 00000 n 
+0002842759 00000 n 
+0002842911 00000 n 
+0002843063 00000 n 
+0002843215 00000 n 
+0002843365 00000 n 
+0002843516 00000 n 
+0002843666 00000 n 
+0002843817 00000 n 
+0002843969 00000 n 
+0002844121 00000 n 
+0002844273 00000 n 
+0002844425 00000 n 
+0002844577 00000 n 
+0002844729 00000 n 
+0002844878 00000 n 
+0002845028 00000 n 
+0002845180 00000 n 
+0002845332 00000 n 
+0002845483 00000 n 
+0002845633 00000 n 
+0002845784 00000 n 
+0002845935 00000 n 
+0002846086 00000 n 
+0002846238 00000 n 
+0002846390 00000 n 
+0002846542 00000 n 
+0002846694 00000 n 
+0002846844 00000 n 
+0002846995 00000 n 
+0002847146 00000 n 
+0002847297 00000 n 
+0002847448 00000 n 
+0002847599 00000 n 
+0002847751 00000 n 
+0002847902 00000 n 
+0002848054 00000 n 
+0002848206 00000 n 
+0002848358 00000 n 
+0002848509 00000 n 
+0002848661 00000 n 
+0002848813 00000 n 
+0002848965 00000 n 
+0002849117 00000 n 
+0002849268 00000 n 
+0002849418 00000 n 
+0002849570 00000 n 
+0002849722 00000 n 
+0002849874 00000 n 
+0002850026 00000 n 
+0002850178 00000 n 
+0002850329 00000 n 
+0002850481 00000 n 
+0002850632 00000 n 
+0002850783 00000 n 
+0002850934 00000 n 
+0002851085 00000 n 
+0002851237 00000 n 
+0002851389 00000 n 
+0002851541 00000 n 
+0002851693 00000 n 
+0002851844 00000 n 
+0002851996 00000 n 
+0002852147 00000 n 
+0002852299 00000 n 
+0002852451 00000 n 
+0002855180 00000 n 
+0002852667 00000 n 
+0002832762 00000 n 
+0002831243 00000 n 
+0002852603 00000 n 
+0003364495 00000 n 
+0002855332 00000 n 
+0002855484 00000 n 
+0002855636 00000 n 
+0002855786 00000 n 
+0002855937 00000 n 
+0002856087 00000 n 
+0002856236 00000 n 
+0002856385 00000 n 
+0002856536 00000 n 
+0002856686 00000 n 
+0002856837 00000 n 
+0002856989 00000 n 
+0002857141 00000 n 
+0002857293 00000 n 
+0002857445 00000 n 
+0002857597 00000 n 
+0002857749 00000 n 
+0002857900 00000 n 
+0002858052 00000 n 
+0002858204 00000 n 
+0002858356 00000 n 
+0002858508 00000 n 
+0002858659 00000 n 
+0002858810 00000 n 
+0002858961 00000 n 
+0002859112 00000 n 
+0002859264 00000 n 
+0002859416 00000 n 
+0002859568 00000 n 
+0002859720 00000 n 
+0002859872 00000 n 
+0002860024 00000 n 
+0002860175 00000 n 
+0002860327 00000 n 
+0002860477 00000 n 
+0002860626 00000 n 
+0002860778 00000 n 
+0002860930 00000 n 
+0002861081 00000 n 
+0002861232 00000 n 
+0002861384 00000 n 
+0002861536 00000 n 
+0002861688 00000 n 
+0002861840 00000 n 
+0002861992 00000 n 
+0002862144 00000 n 
+0002862296 00000 n 
+0002862448 00000 n 
+0002862600 00000 n 
+0002862752 00000 n 
+0002862901 00000 n 
+0002863050 00000 n 
+0002863202 00000 n 
+0002863353 00000 n 
+0002863505 00000 n 
+0002863657 00000 n 
+0002863809 00000 n 
+0002863960 00000 n 
+0002864112 00000 n 
+0002864264 00000 n 
+0002864416 00000 n 
+0002864568 00000 n 
+0002864720 00000 n 
+0002864872 00000 n 
+0002865024 00000 n 
+0002865176 00000 n 
+0002865327 00000 n 
+0002865479 00000 n 
+0002865631 00000 n 
+0002865782 00000 n 
+0002865933 00000 n 
+0002866084 00000 n 
+0002866235 00000 n 
+0002866387 00000 n 
+0002866539 00000 n 
+0002866690 00000 n 
+0002866841 00000 n 
+0002866992 00000 n 
+0002867142 00000 n 
+0002867293 00000 n 
+0002867445 00000 n 
+0002867597 00000 n 
+0002867748 00000 n 
+0002867900 00000 n 
+0002868051 00000 n 
+0002868203 00000 n 
+0002868354 00000 n 
+0002868506 00000 n 
+0002868658 00000 n 
+0002868810 00000 n 
+0002868961 00000 n 
+0002871809 00000 n 
+0002869177 00000 n 
+0002854224 00000 n 
+0002852783 00000 n 
+0002869113 00000 n 
+0002871959 00000 n 
+0002872111 00000 n 
+0002872263 00000 n 
+0002872415 00000 n 
+0002872566 00000 n 
+0002872716 00000 n 
+0002872868 00000 n 
+0002873019 00000 n 
+0002873170 00000 n 
+0002873322 00000 n 
+0002873474 00000 n 
+0002873625 00000 n 
+0002873777 00000 n 
+0002873929 00000 n 
+0002874081 00000 n 
+0002874230 00000 n 
+0002874382 00000 n 
+0002874534 00000 n 
+0002874685 00000 n 
+0002874837 00000 n 
+0002874989 00000 n 
+0002875141 00000 n 
+0002875292 00000 n 
+0002875442 00000 n 
+0002875594 00000 n 
+0002875745 00000 n 
+0002875896 00000 n 
+0002876045 00000 n 
+0002876196 00000 n 
+0002876348 00000 n 
+0002876498 00000 n 
+0002876650 00000 n 
+0002876801 00000 n 
+0002876951 00000 n 
+0002877102 00000 n 
+0002877254 00000 n 
+0002877406 00000 n 
+0002877558 00000 n 
+0002877710 00000 n 
+0002877861 00000 n 
+0002878013 00000 n 
+0002878165 00000 n 
+0002878316 00000 n 
+0002878467 00000 n 
+0002878618 00000 n 
+0002878770 00000 n 
+0002878921 00000 n 
+0002879073 00000 n 
+0002879225 00000 n 
+0002879377 00000 n 
+0002879528 00000 n 
+0002879679 00000 n 
+0002879831 00000 n 
+0002879983 00000 n 
+0002880135 00000 n 
+0002880287 00000 n 
+0002880439 00000 n 
+0002880591 00000 n 
+0002880743 00000 n 
+0002880895 00000 n 
+0002881047 00000 n 
+0002881199 00000 n 
+0002881351 00000 n 
+0002881503 00000 n 
+0002881655 00000 n 
+0002881805 00000 n 
+0002881957 00000 n 
+0002882108 00000 n 
+0002882259 00000 n 
+0002882410 00000 n 
+0002882562 00000 n 
+0002882714 00000 n 
+0002882866 00000 n 
+0002883018 00000 n 
+0002883170 00000 n 
+0002883322 00000 n 
+0002883474 00000 n 
+0002883626 00000 n 
+0002883778 00000 n 
+0002883929 00000 n 
+0002884080 00000 n 
+0002884231 00000 n 
+0002884382 00000 n 
+0002884532 00000 n 
+0002884684 00000 n 
+0002884835 00000 n 
+0002884986 00000 n 
+0002885136 00000 n 
+0002885287 00000 n 
+0002885437 00000 n 
+0002885588 00000 n 
+0002885739 00000 n 
+0002885890 00000 n 
+0002886042 00000 n 
+0002886194 00000 n 
+0002886346 00000 n 
+0002886498 00000 n 
+0002886650 00000 n 
+0002886802 00000 n 
+0002886954 00000 n 
+0002887104 00000 n 
+0002887255 00000 n 
+0002887406 00000 n 
+0002887557 00000 n 
+0002887709 00000 n 
+0002887861 00000 n 
+0002890946 00000 n 
+0002891097 00000 n 
+0002888077 00000 n 
+0002870718 00000 n 
+0002869293 00000 n 
+0002888013 00000 n 
+0002891248 00000 n 
+0002891400 00000 n 
+0002891551 00000 n 
+0002891702 00000 n 
+0002891853 00000 n 
+0002892005 00000 n 
+0002892155 00000 n 
+0002892307 00000 n 
+0002892459 00000 n 
+0002892611 00000 n 
+0002892763 00000 n 
+0002892914 00000 n 
+0002893065 00000 n 
+0002893217 00000 n 
+0002893369 00000 n 
+0002893521 00000 n 
+0002893672 00000 n 
+0002893823 00000 n 
+0002893975 00000 n 
+0002894126 00000 n 
+0002894278 00000 n 
+0002894430 00000 n 
+0002894581 00000 n 
+0002894733 00000 n 
+0002894885 00000 n 
+0002895036 00000 n 
+0002895188 00000 n 
+0002895340 00000 n 
+0002895490 00000 n 
+0002895642 00000 n 
+0002895794 00000 n 
+0002895946 00000 n 
+0002896098 00000 n 
+0002896250 00000 n 
+0002896402 00000 n 
+0002896554 00000 n 
+0002896705 00000 n 
+0002896857 00000 n 
+0002897009 00000 n 
+0002897161 00000 n 
+0002897313 00000 n 
+0002897465 00000 n 
+0002897617 00000 n 
+0002897768 00000 n 
+0002897918 00000 n 
+0002898070 00000 n 
+0002898222 00000 n 
+0002898374 00000 n 
+0002898526 00000 n 
+0002898678 00000 n 
+0002898830 00000 n 
+0002898982 00000 n 
+0002899134 00000 n 
+0002899286 00000 n 
+0002899438 00000 n 
+0002899590 00000 n 
+0002899741 00000 n 
+0002899893 00000 n 
+0002900045 00000 n 
+0002900197 00000 n 
+0002900349 00000 n 
+0002900501 00000 n 
+0002900653 00000 n 
+0002900805 00000 n 
+0002900955 00000 n 
+0002901106 00000 n 
+0002901258 00000 n 
+0002901410 00000 n 
+0002901561 00000 n 
+0002901710 00000 n 
+0002901861 00000 n 
+0002902012 00000 n 
+0002902164 00000 n 
+0002902316 00000 n 
+0002902467 00000 n 
+0002902619 00000 n 
+0002902769 00000 n 
+0002902920 00000 n 
+0002903071 00000 n 
+0002903223 00000 n 
+0002903375 00000 n 
+0002903527 00000 n 
+0002903679 00000 n 
+0002903831 00000 n 
+0002903983 00000 n 
+0002904135 00000 n 
+0002904287 00000 n 
+0002904438 00000 n 
+0002904589 00000 n 
+0002904741 00000 n 
+0002904891 00000 n 
+0002905042 00000 n 
+0002905194 00000 n 
+0002905346 00000 n 
+0002905496 00000 n 
+0002905647 00000 n 
+0002905799 00000 n 
+0002905950 00000 n 
+0002906099 00000 n 
+0002906250 00000 n 
+0002906399 00000 n 
+0002906550 00000 n 
+0002906702 00000 n 
+0002906854 00000 n 
+0002907006 00000 n 
+0002907157 00000 n 
+0002907308 00000 n 
+0002907459 00000 n 
+0002907610 00000 n 
+0002907760 00000 n 
+0002907910 00000 n 
+0002908059 00000 n 
+0002908210 00000 n 
+0002908361 00000 n 
+0002908512 00000 n 
+0002908664 00000 n 
+0002911777 00000 n 
+0002908879 00000 n 
+0002889756 00000 n 
+0002888193 00000 n 
+0002908815 00000 n 
+0002911929 00000 n 
+0002912080 00000 n 
+0002912232 00000 n 
+0002912384 00000 n 
+0002912536 00000 n 
+0002912688 00000 n 
+0002912838 00000 n 
+0002912990 00000 n 
+0002913142 00000 n 
+0002913294 00000 n 
+0002913445 00000 n 
+0002913597 00000 n 
+0002913749 00000 n 
+0002913901 00000 n 
+0002914053 00000 n 
+0002914205 00000 n 
+0002914356 00000 n 
+0002914507 00000 n 
+0002914659 00000 n 
+0002914811 00000 n 
+0002914962 00000 n 
+0002915114 00000 n 
+0002915266 00000 n 
+0002915418 00000 n 
+0002915569 00000 n 
+0002915720 00000 n 
+0002915872 00000 n 
+0002916024 00000 n 
+0002916176 00000 n 
+0002916327 00000 n 
+0002916478 00000 n 
+0002916630 00000 n 
+0002916780 00000 n 
+0002916931 00000 n 
+0002917082 00000 n 
+0002917233 00000 n 
+0002917383 00000 n 
+0002917533 00000 n 
+0002917683 00000 n 
+0002917834 00000 n 
+0002917985 00000 n 
+0002918136 00000 n 
+0002918287 00000 n 
+0002918438 00000 n 
+0002918589 00000 n 
+0002918738 00000 n 
+0002918890 00000 n 
+0002919042 00000 n 
+0002919194 00000 n 
+0002919346 00000 n 
+0002919498 00000 n 
+0002919650 00000 n 
+0002919802 00000 n 
+0002919954 00000 n 
+0002920105 00000 n 
+0002920257 00000 n 
+0002920408 00000 n 
+0002920560 00000 n 
+0002920710 00000 n 
+0002920862 00000 n 
+0002921013 00000 n 
+0002921165 00000 n 
+0002921317 00000 n 
+0002921469 00000 n 
+0002921621 00000 n 
+0002921772 00000 n 
+0002921924 00000 n 
+0002922076 00000 n 
+0002922227 00000 n 
+0002922378 00000 n 
+0002922526 00000 n 
+0002922674 00000 n 
+0002922823 00000 n 
+0002922972 00000 n 
+0002923121 00000 n 
+0002923270 00000 n 
+0002923419 00000 n 
+0002923571 00000 n 
+0002923722 00000 n 
+0002923874 00000 n 
+0002924026 00000 n 
+0002924178 00000 n 
+0002924330 00000 n 
+0002924482 00000 n 
+0002924634 00000 n 
+0002924785 00000 n 
+0002924937 00000 n 
+0002925089 00000 n 
+0002925241 00000 n 
+0002925392 00000 n 
+0002925543 00000 n 
+0002925694 00000 n 
+0002925844 00000 n 
+0002925996 00000 n 
+0002926147 00000 n 
+0002926299 00000 n 
+0002926451 00000 n 
+0002926603 00000 n 
+0002926755 00000 n 
+0002926907 00000 n 
+0002927059 00000 n 
+0002927209 00000 n 
+0002927360 00000 n 
+0002927510 00000 n 
+0002927662 00000 n 
+0002927814 00000 n 
+0002927965 00000 n 
+0002928115 00000 n 
+0002928266 00000 n 
+0002928417 00000 n 
+0002928568 00000 n 
+0002928719 00000 n 
+0002928870 00000 n 
+0002929021 00000 n 
+0002929172 00000 n 
+0002929323 00000 n 
+0002932210 00000 n 
+0002929539 00000 n 
+0002910596 00000 n 
+0002908981 00000 n 
+0002929475 00000 n 
+0002932362 00000 n 
+0002932514 00000 n 
+0002932664 00000 n 
+0002932816 00000 n 
+0002932968 00000 n 
+0002933119 00000 n 
+0002933270 00000 n 
+0002933421 00000 n 
+0002933572 00000 n 
+0002933724 00000 n 
+0002933875 00000 n 
+0002934027 00000 n 
+0002934179 00000 n 
+0002934331 00000 n 
+0002934482 00000 n 
+0002934634 00000 n 
+0002934786 00000 n 
+0002934938 00000 n 
+0002935090 00000 n 
+0002935242 00000 n 
+0002935394 00000 n 
+0002935546 00000 n 
+0002935698 00000 n 
+0002935849 00000 n 
+0002936000 00000 n 
+0002936151 00000 n 
+0002936303 00000 n 
+0002936454 00000 n 
+0002936605 00000 n 
+0002936756 00000 n 
+0002936907 00000 n 
+0002937057 00000 n 
+0002937208 00000 n 
+0002937358 00000 n 
+0002937510 00000 n 
+0002937659 00000 n 
+0002937810 00000 n 
+0002937961 00000 n 
+0002938111 00000 n 
+0002938263 00000 n 
+0002938414 00000 n 
+0002938566 00000 n 
+0002938718 00000 n 
+0002938870 00000 n 
+0002939021 00000 n 
+0002939173 00000 n 
+0002939325 00000 n 
+0002939476 00000 n 
+0002939627 00000 n 
+0002939778 00000 n 
+0002939929 00000 n 
+0002940081 00000 n 
+0002940233 00000 n 
+0002940385 00000 n 
+0002940537 00000 n 
+0002940689 00000 n 
+0002940840 00000 n 
+0002940991 00000 n 
+0002941142 00000 n 
+0002941293 00000 n 
+0002941445 00000 n 
+0002941596 00000 n 
+0002941747 00000 n 
+0002941899 00000 n 
+0002942051 00000 n 
+0002942203 00000 n 
+0002942355 00000 n 
+0002942507 00000 n 
+0002942659 00000 n 
+0002942811 00000 n 
+0002942963 00000 n 
+0002943115 00000 n 
+0002943267 00000 n 
+0002943419 00000 n 
+0002943571 00000 n 
+0002943722 00000 n 
+0002943874 00000 n 
+0002944026 00000 n 
+0002944178 00000 n 
+0002944330 00000 n 
+0002944480 00000 n 
+0002944632 00000 n 
+0002944783 00000 n 
+0002944935 00000 n 
+0002945086 00000 n 
+0002945238 00000 n 
+0002945389 00000 n 
+0002945541 00000 n 
+0002945692 00000 n 
+0002945844 00000 n 
+0002945994 00000 n 
+0002946146 00000 n 
+0002946298 00000 n 
+0002946450 00000 n 
+0002946600 00000 n 
+0002946752 00000 n 
+0002946902 00000 n 
+0002947053 00000 n 
+0002947205 00000 n 
+0002949907 00000 n 
+0002950058 00000 n 
+0002947421 00000 n 
+0002931182 00000 n 
+0002929655 00000 n 
+0002947357 00000 n 
+0002950210 00000 n 
+0002950361 00000 n 
+0002950512 00000 n 
+0002950662 00000 n 
+0002950813 00000 n 
+0002950963 00000 n 
+0002951114 00000 n 
+0002951265 00000 n 
+0002951416 00000 n 
+0002951567 00000 n 
+0002951719 00000 n 
+0002951871 00000 n 
+0002952023 00000 n 
+0002952174 00000 n 
+0002952326 00000 n 
+0002952477 00000 n 
+0002952628 00000 n 
+0002952780 00000 n 
+0002952931 00000 n 
+0002953081 00000 n 
+0002953231 00000 n 
+0002953381 00000 n 
+0002953532 00000 n 
+0002953683 00000 n 
+0002953834 00000 n 
+0002953985 00000 n 
+0002954136 00000 n 
+0002954287 00000 n 
+0002954439 00000 n 
+0002954591 00000 n 
+0002954743 00000 n 
+0002954895 00000 n 
+0002955047 00000 n 
+0002955199 00000 n 
+0002955351 00000 n 
+0002955503 00000 n 
+0002955655 00000 n 
+0002955807 00000 n 
+0002955958 00000 n 
+0002956110 00000 n 
+0002956261 00000 n 
+0002956411 00000 n 
+0002956563 00000 n 
+0002956715 00000 n 
+0002956867 00000 n 
+0002957018 00000 n 
+0002957169 00000 n 
+0002957321 00000 n 
+0002957473 00000 n 
+0002957624 00000 n 
+0002957774 00000 n 
+0002957926 00000 n 
+0002958078 00000 n 
+0002958228 00000 n 
+0002958380 00000 n 
+0002958532 00000 n 
+0002958683 00000 n 
+0002958833 00000 n 
+0002958985 00000 n 
+0002959137 00000 n 
+0002959289 00000 n 
+0002959439 00000 n 
+0002959588 00000 n 
+0002959740 00000 n 
+0002959892 00000 n 
+0002960044 00000 n 
+0002960196 00000 n 
+0002960348 00000 n 
+0002960500 00000 n 
+0002960650 00000 n 
+0002960802 00000 n 
+0002960953 00000 n 
+0002961105 00000 n 
+0002961256 00000 n 
+0002961406 00000 n 
+0002961557 00000 n 
+0002961709 00000 n 
+0002961861 00000 n 
+0002962013 00000 n 
+0002962164 00000 n 
+0002962316 00000 n 
+0002962468 00000 n 
+0002962620 00000 n 
+0002962769 00000 n 
+0002962921 00000 n 
+0002963073 00000 n 
+0002963224 00000 n 
+0002963374 00000 n 
+0002963526 00000 n 
+0002963677 00000 n 
+0002963828 00000 n 
+0002963979 00000 n 
+0002964195 00000 n 
+0002948933 00000 n 
+0002947537 00000 n 
+0002964131 00000 n 
+0003364620 00000 n 
+0002967519 00000 n 
+0002967669 00000 n 
+0002967821 00000 n 
+0002967972 00000 n 
+0002968123 00000 n 
+0002968275 00000 n 
+0002968426 00000 n 
+0002968578 00000 n 
+0002968729 00000 n 
+0002968880 00000 n 
+0002969031 00000 n 
+0002969183 00000 n 
+0002969335 00000 n 
+0002969487 00000 n 
+0002969639 00000 n 
+0002969791 00000 n 
+0002969943 00000 n 
+0002970094 00000 n 
+0002970246 00000 n 
+0002970398 00000 n 
+0002970549 00000 n 
+0002970699 00000 n 
+0002970850 00000 n 
+0002971002 00000 n 
+0002971154 00000 n 
+0002971306 00000 n 
+0002971458 00000 n 
 0002971609 00000 n 
-0002971761 00000 n 
-0002971910 00000 n 
-0002972061 00000 n 
-0002972212 00000 n 
-0002972362 00000 n 
-0002972514 00000 n 
-0002972665 00000 n 
-0002972817 00000 n 
-0002972969 00000 n 
-0002973121 00000 n 
-0002973272 00000 n 
-0002973424 00000 n 
-0002973576 00000 n 
-0002973727 00000 n 
-0002973878 00000 n 
-0002974029 00000 n 
-0002974180 00000 n 
-0002974332 00000 n 
-0002974484 00000 n 
-0002974636 00000 n 
-0002974788 00000 n 
-0002974940 00000 n 
-0002975091 00000 n 
-0002975242 00000 n 
-0002975393 00000 n 
-0002975544 00000 n 
-0002975696 00000 n 
-0002975847 00000 n 
-0002975998 00000 n 
-0002976150 00000 n 
-0002976302 00000 n 
-0002976454 00000 n 
-0002976606 00000 n 
-0002976758 00000 n 
-0002976910 00000 n 
-0002977062 00000 n 
-0002977214 00000 n 
-0002977366 00000 n 
-0002977518 00000 n 
-0002977670 00000 n 
-0002977822 00000 n 
-0002977973 00000 n 
-0002978125 00000 n 
-0002978277 00000 n 
-0002978429 00000 n 
-0002978581 00000 n 
-0002978731 00000 n 
-0002978883 00000 n 
-0002979034 00000 n 
-0002979186 00000 n 
-0002979337 00000 n 
-0002979489 00000 n 
-0002979640 00000 n 
-0002979792 00000 n 
-0002979943 00000 n 
-0002980095 00000 n 
-0002980245 00000 n 
-0002980397 00000 n 
-0002980549 00000 n 
-0002980701 00000 n 
-0002980851 00000 n 
-0002981003 00000 n 
-0002981153 00000 n 
-0002981304 00000 n 
-0002981456 00000 n 
-0002984158 00000 n 
-0002984309 00000 n 
-0002981672 00000 n 
-0002965433 00000 n 
-0002963906 00000 n 
+0002971759 00000 n 
+0002971911 00000 n 
+0002972063 00000 n 
+0002972215 00000 n 
+0002972367 00000 n 
+0002972519 00000 n 
+0002972671 00000 n 
+0002972823 00000 n 
+0002972975 00000 n 
+0002973127 00000 n 
+0002973279 00000 n 
+0002973431 00000 n 
+0002973583 00000 n 
+0002973735 00000 n 
+0002973887 00000 n 
+0002974039 00000 n 
+0002974191 00000 n 
+0002974343 00000 n 
+0002974495 00000 n 
+0002974647 00000 n 
+0002974799 00000 n 
+0002974950 00000 n 
+0002975101 00000 n 
+0002975252 00000 n 
+0002975404 00000 n 
+0002975556 00000 n 
+0002975706 00000 n 
+0002975858 00000 n 
+0002976010 00000 n 
+0002976162 00000 n 
+0002976314 00000 n 
+0002976466 00000 n 
+0002976618 00000 n 
+0002976769 00000 n 
+0002976920 00000 n 
+0002977070 00000 n 
+0002977221 00000 n 
+0002977372 00000 n 
+0002977524 00000 n 
+0002977676 00000 n 
+0002977828 00000 n 
+0002977976 00000 n 
+0002978126 00000 n 
+0002978278 00000 n 
+0002978430 00000 n 
+0002978582 00000 n 
+0002978733 00000 n 
+0002978885 00000 n 
+0002979037 00000 n 
+0002979189 00000 n 
+0002979341 00000 n 
+0002979493 00000 n 
+0002979645 00000 n 
+0002979797 00000 n 
+0002979949 00000 n 
+0002980101 00000 n 
+0002980253 00000 n 
+0002980404 00000 n 
+0002980556 00000 n 
+0002980703 00000 n 
+0002980855 00000 n 
+0002981007 00000 n 
+0002981155 00000 n 
+0002981305 00000 n 
+0002981457 00000 n 
 0002981608 00000 n 
-0002984461 00000 n 
-0002984612 00000 n 
-0002984763 00000 n 
-0002984913 00000 n 
-0002985064 00000 n 
-0002985214 00000 n 
-0002985365 00000 n 
-0002985516 00000 n 
-0002985667 00000 n 
-0002985818 00000 n 
-0002985970 00000 n 
-0002986122 00000 n 
-0002986274 00000 n 
-0002986425 00000 n 
-0002986577 00000 n 
-0002986728 00000 n 
-0002986879 00000 n 
-0002987031 00000 n 
-0002987182 00000 n 
-0002987332 00000 n 
-0002987482 00000 n 
-0002987632 00000 n 
-0002987783 00000 n 
-0002987934 00000 n 
-0002988085 00000 n 
-0002988236 00000 n 
-0002988387 00000 n 
-0002988538 00000 n 
-0002988690 00000 n 
-0002988842 00000 n 
-0002988994 00000 n 
-0002989146 00000 n 
-0002989298 00000 n 
-0002989450 00000 n 
-0002989602 00000 n 
-0002989754 00000 n 
-0002989906 00000 n 
-0002990058 00000 n 
-0002990209 00000 n 
-0002990361 00000 n 
-0002990512 00000 n 
-0002990662 00000 n 
-0002990814 00000 n 
-0002990966 00000 n 
-0002991118 00000 n 
-0002991269 00000 n 
-0002991420 00000 n 
-0002991572 00000 n 
-0002991724 00000 n 
-0002991875 00000 n 
-0002992025 00000 n 
-0002992177 00000 n 
-0002992329 00000 n 
-0002992479 00000 n 
-0002992631 00000 n 
-0002992783 00000 n 
-0002992934 00000 n 
-0002993084 00000 n 
-0002993236 00000 n 
-0002993388 00000 n 
-0002993540 00000 n 
-0002993690 00000 n 
-0002993839 00000 n 
-0002993991 00000 n 
-0002994143 00000 n 
-0002994295 00000 n 
-0002994447 00000 n 
-0002994599 00000 n 
-0002994751 00000 n 
-0002994901 00000 n 
-0002995053 00000 n 
-0002995204 00000 n 
-0002995356 00000 n 
-0002995507 00000 n 
-0002995657 00000 n 
-0002995808 00000 n 
-0002995960 00000 n 
-0002996112 00000 n 
-0002996264 00000 n 
-0002996415 00000 n 
-0002996567 00000 n 
-0002996719 00000 n 
-0002996871 00000 n 
-0002997020 00000 n 
-0002997172 00000 n 
-0002997324 00000 n 
-0002997475 00000 n 
-0002997625 00000 n 
-0002997777 00000 n 
-0002997928 00000 n 
-0002998079 00000 n 
-0002998230 00000 n 
-0002998446 00000 n 
-0002983184 00000 n 
-0002981788 00000 n 
-0002998382 00000 n 
-0003388305 00000 n 
-0003001770 00000 n 
-0003001920 00000 n 
-0003002072 00000 n 
-0003002223 00000 n 
-0003002374 00000 n 
-0003002526 00000 n 
-0003002677 00000 n 
-0003002829 00000 n 
-0003002980 00000 n 
-0003003131 00000 n 
-0003003282 00000 n 
-0003003434 00000 n 
-0003003586 00000 n 
-0003003738 00000 n 
-0003003890 00000 n 
-0003004042 00000 n 
-0003004194 00000 n 
-0003004345 00000 n 
-0003004497 00000 n 
-0003004649 00000 n 
-0003004800 00000 n 
-0003004950 00000 n 
-0003005101 00000 n 
-0003005253 00000 n 
-0003005405 00000 n 
-0003005557 00000 n 
-0003005709 00000 n 
-0003005860 00000 n 
-0003006010 00000 n 
-0003006162 00000 n 
-0003006314 00000 n 
-0003006466 00000 n 
-0003006618 00000 n 
-0003006770 00000 n 
-0003006922 00000 n 
-0003007074 00000 n 
-0003007226 00000 n 
-0003007378 00000 n 
-0003007530 00000 n 
-0003007682 00000 n 
-0003007834 00000 n 
-0003007986 00000 n 
-0003008138 00000 n 
-0003008290 00000 n 
-0003008442 00000 n 
-0003008594 00000 n 
-0003008746 00000 n 
-0003008898 00000 n 
-0003009050 00000 n 
-0003009201 00000 n 
-0003009352 00000 n 
-0003009503 00000 n 
-0003009655 00000 n 
-0003009807 00000 n 
-0003009957 00000 n 
-0003010109 00000 n 
-0003010261 00000 n 
-0003010413 00000 n 
-0003010565 00000 n 
-0003010717 00000 n 
-0003010869 00000 n 
-0003011020 00000 n 
-0003011171 00000 n 
-0003011321 00000 n 
-0003011472 00000 n 
-0003011623 00000 n 
-0003011775 00000 n 
-0003011927 00000 n 
-0003012079 00000 n 
-0003012227 00000 n 
-0003012377 00000 n 
-0003012529 00000 n 
-0003012681 00000 n 
-0003012833 00000 n 
-0003012984 00000 n 
-0003013136 00000 n 
-0003013288 00000 n 
-0003013440 00000 n 
-0003013592 00000 n 
-0003013744 00000 n 
-0003013896 00000 n 
-0003014048 00000 n 
-0003014200 00000 n 
-0003014352 00000 n 
-0003014504 00000 n 
-0003014655 00000 n 
-0003014807 00000 n 
-0003014954 00000 n 
-0003015106 00000 n 
-0003015258 00000 n 
-0003015406 00000 n 
-0003015556 00000 n 
-0003015708 00000 n 
-0003015859 00000 n 
-0003016011 00000 n 
-0003016163 00000 n 
-0003016315 00000 n 
-0003016466 00000 n 
-0003016617 00000 n 
-0003016768 00000 n 
-0003016920 00000 n 
-0003017070 00000 n 
-0003017220 00000 n 
-0003017372 00000 n 
-0003017524 00000 n 
-0003017676 00000 n 
-0003017828 00000 n 
-0003017980 00000 n 
-0003018131 00000 n 
-0003018281 00000 n 
-0003018432 00000 n 
-0003018584 00000 n 
-0003018736 00000 n 
-0003018888 00000 n 
-0003019039 00000 n 
-0003019190 00000 n 
-0003019342 00000 n 
-0003019494 00000 n 
-0003019646 00000 n 
-0003019798 00000 n 
-0003019950 00000 n 
-0003020102 00000 n 
-0003020254 00000 n 
-0003020405 00000 n 
-0003020557 00000 n 
-0003020708 00000 n 
-0003020860 00000 n 
-0003021012 00000 n 
-0003021162 00000 n 
-0003021314 00000 n 
-0003021466 00000 n 
-0003021618 00000 n 
-0003021770 00000 n 
-0003021922 00000 n 
-0003022074 00000 n 
-0003022225 00000 n 
-0003022375 00000 n 
-0003022525 00000 n 
-0003022675 00000 n 
-0003022827 00000 n 
-0003022979 00000 n 
-0003023129 00000 n 
-0003023280 00000 n 
-0003023495 00000 n 
-0003000355 00000 n 
-0002998562 00000 n 
-0003023431 00000 n 
-0003026420 00000 n 
-0003026571 00000 n 
-0003026722 00000 n 
-0003026874 00000 n 
-0003027025 00000 n 
-0003027177 00000 n 
-0003027328 00000 n 
-0003027479 00000 n 
-0003027628 00000 n 
-0003027780 00000 n 
-0003027932 00000 n 
-0003028084 00000 n 
-0003028236 00000 n 
-0003028388 00000 n 
-0003028540 00000 n 
-0003028691 00000 n 
-0003028842 00000 n 
-0003028992 00000 n 
-0003029143 00000 n 
-0003029293 00000 n 
-0003029444 00000 n 
-0003029595 00000 n 
-0003029746 00000 n 
-0003029897 00000 n 
-0003030048 00000 n 
-0003030197 00000 n 
-0003030348 00000 n 
-0003030499 00000 n 
-0003030651 00000 n 
-0003030803 00000 n 
-0003030955 00000 n 
-0003031107 00000 n 
-0003031259 00000 n 
-0003031411 00000 n 
-0003031563 00000 n 
-0003031715 00000 n 
-0003031867 00000 n 
-0003032019 00000 n 
-0003032171 00000 n 
-0003032322 00000 n 
-0003032473 00000 n 
-0003032625 00000 n 
-0003032777 00000 n 
-0003032928 00000 n 
-0003033079 00000 n 
-0003033230 00000 n 
-0003033381 00000 n 
-0003033533 00000 n 
-0003033685 00000 n 
-0003033836 00000 n 
-0003033988 00000 n 
-0003034140 00000 n 
-0003034292 00000 n 
-0003034444 00000 n 
-0003034596 00000 n 
-0003034748 00000 n 
-0003034900 00000 n 
-0003035051 00000 n 
-0003035202 00000 n 
-0003035354 00000 n 
-0003035506 00000 n 
-0003035657 00000 n 
-0003035808 00000 n 
-0003035958 00000 n 
-0003036110 00000 n 
-0003036261 00000 n 
-0003036412 00000 n 
-0003036563 00000 n 
-0003036714 00000 n 
-0003036865 00000 n 
-0003037016 00000 n 
-0003037168 00000 n 
-0003037320 00000 n 
-0003037471 00000 n 
-0003037622 00000 n 
-0003037774 00000 n 
-0003037926 00000 n 
-0003038077 00000 n 
-0003038229 00000 n 
-0003038381 00000 n 
-0003038532 00000 n 
-0003038684 00000 n 
-0003038836 00000 n 
-0003038988 00000 n 
-0003039139 00000 n 
-0003039287 00000 n 
-0003039435 00000 n 
-0003039587 00000 n 
-0003039738 00000 n 
-0003039888 00000 n 
-0003040040 00000 n 
-0003040192 00000 n 
-0003040342 00000 n 
-0003040493 00000 n 
-0003040642 00000 n 
-0003040794 00000 n 
-0003040945 00000 n 
-0003041095 00000 n 
-0003041246 00000 n 
-0003041398 00000 n 
-0003041550 00000 n 
-0003041701 00000 n 
-0003041852 00000 n 
-0003042003 00000 n 
-0003042155 00000 n 
-0003042305 00000 n 
-0003042455 00000 n 
-0003042606 00000 n 
-0003042757 00000 n 
-0003042909 00000 n 
-0003043059 00000 n 
-0003043211 00000 n 
-0003043363 00000 n 
-0003043515 00000 n 
-0003043666 00000 n 
-0003043817 00000 n 
-0003043968 00000 n 
-0003044119 00000 n 
-0003044269 00000 n 
-0003044421 00000 n 
-0003044572 00000 n 
-0003044724 00000 n 
-0003044876 00000 n 
-0003045026 00000 n 
-0003045178 00000 n 
-0003045330 00000 n 
-0003048226 00000 n 
-0003045545 00000 n 
-0003025158 00000 n 
-0003023611 00000 n 
-0003045481 00000 n 
-0003048378 00000 n 
-0003048529 00000 n 
-0003048680 00000 n 
-0003048832 00000 n 
-0003048984 00000 n 
-0003049135 00000 n 
-0003049287 00000 n 
-0003049439 00000 n 
-0003049591 00000 n 
-0003049743 00000 n 
-0003049895 00000 n 
-0003050047 00000 n 
-0003050199 00000 n 
-0003050350 00000 n 
-0003050501 00000 n 
-0003050652 00000 n 
-0003050804 00000 n 
-0003050955 00000 n 
-0003051107 00000 n 
-0003051259 00000 n 
-0003051411 00000 n 
-0003051562 00000 n 
-0003051712 00000 n 
-0003051864 00000 n 
-0003052015 00000 n 
-0003052166 00000 n 
-0003052318 00000 n 
-0003052470 00000 n 
-0003052622 00000 n 
-0003052774 00000 n 
-0003052925 00000 n 
-0003053076 00000 n 
-0003053227 00000 n 
-0003053379 00000 n 
-0003053531 00000 n 
-0003053683 00000 n 
-0003053833 00000 n 
-0003053984 00000 n 
-0003054136 00000 n 
-0003054287 00000 n 
-0003054436 00000 n 
-0003054588 00000 n 
-0003054740 00000 n 
-0003054892 00000 n 
-0003055044 00000 n 
-0003055196 00000 n 
-0003055348 00000 n 
-0003055499 00000 n 
-0003055651 00000 n 
-0003055802 00000 n 
-0003055952 00000 n 
-0003056102 00000 n 
-0003056254 00000 n 
-0003056405 00000 n 
-0003056553 00000 n 
-0003056704 00000 n 
-0003056856 00000 n 
-0003057006 00000 n 
-0003057155 00000 n 
-0003057307 00000 n 
-0003057459 00000 n 
-0003057611 00000 n 
-0003057763 00000 n 
-0003057914 00000 n 
-0003058066 00000 n 
-0003058218 00000 n 
-0003058370 00000 n 
-0003058522 00000 n 
-0003058674 00000 n 
-0003058826 00000 n 
-0003058977 00000 n 
-0003059128 00000 n 
-0003059279 00000 n 
-0003059430 00000 n 
-0003059581 00000 n 
-0003059733 00000 n 
-0003059885 00000 n 
-0003060037 00000 n 
-0003060189 00000 n 
-0003060341 00000 n 
-0003060493 00000 n 
-0003060644 00000 n 
-0003060796 00000 n 
-0003060948 00000 n 
-0003061100 00000 n 
-0003061251 00000 n 
-0003061403 00000 n 
-0003061554 00000 n 
-0003061705 00000 n 
-0003061855 00000 n 
-0003062006 00000 n 
-0003062155 00000 n 
-0003062307 00000 n 
-0003062459 00000 n 
-0003062611 00000 n 
-0003062763 00000 n 
-0003062915 00000 n 
-0003063066 00000 n 
-0003063216 00000 n 
-0003063368 00000 n 
-0003063520 00000 n 
-0003063671 00000 n 
-0003063823 00000 n 
-0003063975 00000 n 
-0003064127 00000 n 
-0003064278 00000 n 
-0003064429 00000 n 
-0003064581 00000 n 
-0003064733 00000 n 
-0003064885 00000 n 
-0003067741 00000 n 
-0003065101 00000 n 
-0003047099 00000 n 
-0003045661 00000 n 
-0003065037 00000 n 
-0003067891 00000 n 
-0003068043 00000 n 
-0003068195 00000 n 
-0003068347 00000 n 
-0003068499 00000 n 
-0003068650 00000 n 
-0003068801 00000 n 
-0003068952 00000 n 
-0003069104 00000 n 
-0003069256 00000 n 
-0003069408 00000 n 
-0003069560 00000 n 
-0003069710 00000 n 
-0003069862 00000 n 
-0003070014 00000 n 
-0003070162 00000 n 
-0003070314 00000 n 
-0003070465 00000 n 
-0003070617 00000 n 
-0003070769 00000 n 
-0003070921 00000 n 
-0003071073 00000 n 
-0003071225 00000 n 
-0003071377 00000 n 
-0003071529 00000 n 
-0003071681 00000 n 
-0003071833 00000 n 
-0003071985 00000 n 
-0003072136 00000 n 
-0003072288 00000 n 
-0003072439 00000 n 
-0003072590 00000 n 
-0003072741 00000 n 
-0003072891 00000 n 
-0003073043 00000 n 
-0003073194 00000 n 
-0003073345 00000 n 
-0003073496 00000 n 
-0003073647 00000 n 
-0003073798 00000 n 
-0003073950 00000 n 
-0003074102 00000 n 
-0003074254 00000 n 
-0003074406 00000 n 
-0003074558 00000 n 
-0003074710 00000 n 
-0003074862 00000 n 
-0003075014 00000 n 
-0003075166 00000 n 
-0003075318 00000 n 
-0003075470 00000 n 
-0003075622 00000 n 
-0003075773 00000 n 
-0003075925 00000 n 
-0003076077 00000 n 
-0003076229 00000 n 
-0003076381 00000 n 
-0003076533 00000 n 
-0003076685 00000 n 
-0003076837 00000 n 
-0003076989 00000 n 
-0003077141 00000 n 
-0003077293 00000 n 
-0003077445 00000 n 
-0003077597 00000 n 
-0003077746 00000 n 
-0003077894 00000 n 
-0003078045 00000 n 
-0003078197 00000 n 
-0003078349 00000 n 
-0003078500 00000 n 
-0003078651 00000 n 
-0003078802 00000 n 
-0003078954 00000 n 
-0003079106 00000 n 
-0003079258 00000 n 
-0003079409 00000 n 
-0003079559 00000 n 
-0003079711 00000 n 
-0003079862 00000 n 
-0003080014 00000 n 
-0003080165 00000 n 
-0003080316 00000 n 
-0003080468 00000 n 
-0003080620 00000 n 
-0003080771 00000 n 
-0003080923 00000 n 
+0002981760 00000 n 
+0002981912 00000 n 
+0002982064 00000 n 
+0002982215 00000 n 
+0002982366 00000 n 
+0002982517 00000 n 
+0002982669 00000 n 
+0002982819 00000 n 
+0002982969 00000 n 
+0002983121 00000 n 
+0002983273 00000 n 
+0002983425 00000 n 
+0002983577 00000 n 
+0002983729 00000 n 
+0002983880 00000 n 
+0002984030 00000 n 
+0002984181 00000 n 
+0002984333 00000 n 
+0002984485 00000 n 
+0002984637 00000 n 
+0002984788 00000 n 
+0002984939 00000 n 
+0002985091 00000 n 
+0002985243 00000 n 
+0002985395 00000 n 
+0002985547 00000 n 
+0002985699 00000 n 
+0002985851 00000 n 
+0002986003 00000 n 
+0002986154 00000 n 
+0002986306 00000 n 
+0002986457 00000 n 
+0002986609 00000 n 
+0002986761 00000 n 
+0002986911 00000 n 
+0002987063 00000 n 
+0002987215 00000 n 
+0002987367 00000 n 
+0002987519 00000 n 
+0002987671 00000 n 
+0002987823 00000 n 
+0002987974 00000 n 
+0002988124 00000 n 
+0002988274 00000 n 
+0002988424 00000 n 
+0002988576 00000 n 
+0002988728 00000 n 
+0002988878 00000 n 
+0002989029 00000 n 
+0002989244 00000 n 
+0002966104 00000 n 
+0002964311 00000 n 
+0002989180 00000 n 
+0002992169 00000 n 
+0002992320 00000 n 
+0002992471 00000 n 
+0002992623 00000 n 
+0002992774 00000 n 
+0002992926 00000 n 
+0002993077 00000 n 
+0002993228 00000 n 
+0002993377 00000 n 
+0002993529 00000 n 
+0002993681 00000 n 
+0002993833 00000 n 
+0002993985 00000 n 
+0002994137 00000 n 
+0002994289 00000 n 
+0002994440 00000 n 
+0002994591 00000 n 
+0002994741 00000 n 
+0002994892 00000 n 
+0002995042 00000 n 
+0002995193 00000 n 
+0002995344 00000 n 
+0002995495 00000 n 
+0002995646 00000 n 
+0002995797 00000 n 
+0002995946 00000 n 
+0002996097 00000 n 
+0002996248 00000 n 
+0002996400 00000 n 
+0002996552 00000 n 
+0002996704 00000 n 
+0002996856 00000 n 
+0002997008 00000 n 
+0002997160 00000 n 
+0002997312 00000 n 
+0002997464 00000 n 
+0002997616 00000 n 
+0002997768 00000 n 
+0002997920 00000 n 
+0002998071 00000 n 
+0002998222 00000 n 
+0002998374 00000 n 
+0002998526 00000 n 
+0002998677 00000 n 
+0002998828 00000 n 
+0002998979 00000 n 
+0002999130 00000 n 
+0002999282 00000 n 
+0002999434 00000 n 
+0002999585 00000 n 
+0002999737 00000 n 
+0002999889 00000 n 
+0003000041 00000 n 
+0003000193 00000 n 
+0003000345 00000 n 
+0003000497 00000 n 
+0003000649 00000 n 
+0003000800 00000 n 
+0003000951 00000 n 
+0003001103 00000 n 
+0003001255 00000 n 
+0003001406 00000 n 
+0003001557 00000 n 
+0003001707 00000 n 
+0003001859 00000 n 
+0003002010 00000 n 
+0003002161 00000 n 
+0003002312 00000 n 
+0003002463 00000 n 
+0003002614 00000 n 
+0003002765 00000 n 
+0003002917 00000 n 
+0003003069 00000 n 
+0003003220 00000 n 
+0003003371 00000 n 
+0003003523 00000 n 
+0003003675 00000 n 
+0003003826 00000 n 
+0003003978 00000 n 
+0003004130 00000 n 
+0003004281 00000 n 
+0003004433 00000 n 
+0003004585 00000 n 
+0003004737 00000 n 
+0003004888 00000 n 
+0003005036 00000 n 
+0003005184 00000 n 
+0003005336 00000 n 
+0003005487 00000 n 
+0003005637 00000 n 
+0003005789 00000 n 
+0003005941 00000 n 
+0003006091 00000 n 
+0003006242 00000 n 
+0003006391 00000 n 
+0003006543 00000 n 
+0003006694 00000 n 
+0003006844 00000 n 
+0003006995 00000 n 
+0003007147 00000 n 
+0003007299 00000 n 
+0003007450 00000 n 
+0003007601 00000 n 
+0003007752 00000 n 
+0003007904 00000 n 
+0003008054 00000 n 
+0003008204 00000 n 
+0003008355 00000 n 
+0003008506 00000 n 
+0003008658 00000 n 
+0003008808 00000 n 
+0003008960 00000 n 
+0003009112 00000 n 
+0003009264 00000 n 
+0003009415 00000 n 
+0003009566 00000 n 
+0003009717 00000 n 
+0003009868 00000 n 
+0003010018 00000 n 
+0003010170 00000 n 
+0003010321 00000 n 
+0003010473 00000 n 
+0003010625 00000 n 
+0003010775 00000 n 
+0003010927 00000 n 
+0003011079 00000 n 
+0003013975 00000 n 
+0003011294 00000 n 
+0002990907 00000 n 
+0002989360 00000 n 
+0003011230 00000 n 
+0003014127 00000 n 
+0003014278 00000 n 
+0003014429 00000 n 
+0003014581 00000 n 
+0003014733 00000 n 
+0003014884 00000 n 
+0003015036 00000 n 
+0003015188 00000 n 
+0003015340 00000 n 
+0003015492 00000 n 
+0003015644 00000 n 
+0003015796 00000 n 
+0003015948 00000 n 
+0003016099 00000 n 
+0003016250 00000 n 
+0003016401 00000 n 
+0003016553 00000 n 
+0003016704 00000 n 
+0003016856 00000 n 
+0003017008 00000 n 
+0003017160 00000 n 
+0003017311 00000 n 
+0003017461 00000 n 
+0003017613 00000 n 
+0003017764 00000 n 
+0003017915 00000 n 
+0003018067 00000 n 
+0003018219 00000 n 
+0003018371 00000 n 
+0003018523 00000 n 
+0003018674 00000 n 
+0003018825 00000 n 
+0003018976 00000 n 
+0003019128 00000 n 
+0003019280 00000 n 
+0003019432 00000 n 
+0003019582 00000 n 
+0003019733 00000 n 
+0003019885 00000 n 
+0003020036 00000 n 
+0003020185 00000 n 
+0003020337 00000 n 
+0003020489 00000 n 
+0003020641 00000 n 
+0003020793 00000 n 
+0003020945 00000 n 
+0003021097 00000 n 
+0003021248 00000 n 
+0003021400 00000 n 
+0003021551 00000 n 
+0003021701 00000 n 
+0003021851 00000 n 
+0003022003 00000 n 
+0003022154 00000 n 
+0003022302 00000 n 
+0003022453 00000 n 
+0003022605 00000 n 
+0003022755 00000 n 
+0003022904 00000 n 
+0003023056 00000 n 
+0003023208 00000 n 
+0003023360 00000 n 
+0003023512 00000 n 
+0003023663 00000 n 
+0003023815 00000 n 
+0003023967 00000 n 
+0003024119 00000 n 
+0003024271 00000 n 
+0003024423 00000 n 
+0003024575 00000 n 
+0003024726 00000 n 
+0003024877 00000 n 
+0003025028 00000 n 
+0003025179 00000 n 
+0003025330 00000 n 
+0003025482 00000 n 
+0003025634 00000 n 
+0003025786 00000 n 
+0003025938 00000 n 
+0003026090 00000 n 
+0003026242 00000 n 
+0003026393 00000 n 
+0003026545 00000 n 
+0003026697 00000 n 
+0003026849 00000 n 
+0003027000 00000 n 
+0003027152 00000 n 
+0003027303 00000 n 
+0003027454 00000 n 
+0003027604 00000 n 
+0003027755 00000 n 
+0003027904 00000 n 
+0003028056 00000 n 
+0003028208 00000 n 
+0003028360 00000 n 
+0003028512 00000 n 
+0003028664 00000 n 
+0003028815 00000 n 
+0003028965 00000 n 
+0003029117 00000 n 
+0003029269 00000 n 
+0003029420 00000 n 
+0003029572 00000 n 
+0003029724 00000 n 
+0003029876 00000 n 
+0003030027 00000 n 
+0003030178 00000 n 
+0003030330 00000 n 
+0003030482 00000 n 
+0003030634 00000 n 
+0003033490 00000 n 
+0003030850 00000 n 
+0003012848 00000 n 
+0003011410 00000 n 
+0003030786 00000 n 
+0003033640 00000 n 
+0003033792 00000 n 
+0003033944 00000 n 
+0003034096 00000 n 
+0003034248 00000 n 
+0003034399 00000 n 
+0003034550 00000 n 
+0003034701 00000 n 
+0003034853 00000 n 
+0003035005 00000 n 
+0003035157 00000 n 
+0003035309 00000 n 
+0003035459 00000 n 
+0003035611 00000 n 
+0003035763 00000 n 
+0003035911 00000 n 
+0003036063 00000 n 
+0003036214 00000 n 
+0003036366 00000 n 
+0003036518 00000 n 
+0003036670 00000 n 
+0003036822 00000 n 
+0003036974 00000 n 
+0003037126 00000 n 
+0003037278 00000 n 
+0003037430 00000 n 
+0003037582 00000 n 
+0003037734 00000 n 
+0003037885 00000 n 
+0003038037 00000 n 
+0003038188 00000 n 
+0003038339 00000 n 
+0003038490 00000 n 
+0003038640 00000 n 
+0003038792 00000 n 
+0003038943 00000 n 
+0003039094 00000 n 
+0003039245 00000 n 
+0003039396 00000 n 
+0003039547 00000 n 
+0003039699 00000 n 
+0003039851 00000 n 
+0003040003 00000 n 
+0003040155 00000 n 
+0003040307 00000 n 
+0003040459 00000 n 
+0003040611 00000 n 
+0003040763 00000 n 
+0003040915 00000 n 
+0003041067 00000 n 
+0003041219 00000 n 
+0003041371 00000 n 
+0003041522 00000 n 
+0003041674 00000 n 
+0003041826 00000 n 
+0003041978 00000 n 
+0003042130 00000 n 
+0003042282 00000 n 
+0003042434 00000 n 
+0003042586 00000 n 
+0003042738 00000 n 
+0003042890 00000 n 
+0003043042 00000 n 
+0003043194 00000 n 
+0003043346 00000 n 
+0003043495 00000 n 
+0003043643 00000 n 
+0003043794 00000 n 
+0003043946 00000 n 
+0003044098 00000 n 
+0003044249 00000 n 
+0003044400 00000 n 
+0003044551 00000 n 
+0003044703 00000 n 
+0003044855 00000 n 
+0003045007 00000 n 
+0003045158 00000 n 
+0003045308 00000 n 
+0003045460 00000 n 
+0003045611 00000 n 
+0003045763 00000 n 
+0003045914 00000 n 
+0003046065 00000 n 
+0003046217 00000 n 
+0003046369 00000 n 
+0003046520 00000 n 
+0003046672 00000 n 
+0003046824 00000 n 
+0003046975 00000 n 
+0003047127 00000 n 
+0003047279 00000 n 
+0003047430 00000 n 
+0003047580 00000 n 
+0003047731 00000 n 
+0003047883 00000 n 
+0003048034 00000 n 
+0003048185 00000 n 
+0003048336 00000 n 
+0003048487 00000 n 
+0003048639 00000 n 
+0003048790 00000 n 
+0003048942 00000 n 
+0003049094 00000 n 
+0003049246 00000 n 
+0003052831 00000 n 
+0003049462 00000 n 
+0003032417 00000 n 
+0003030952 00000 n 
+0003049398 00000 n 
+0003052982 00000 n 
+0003053133 00000 n 
+0003053285 00000 n 
+0003053437 00000 n 
+0003053589 00000 n 
+0003053741 00000 n 
+0003053893 00000 n 
+0003054045 00000 n 
+0003054197 00000 n 
+0003054349 00000 n 
+0003054501 00000 n 
+0003054653 00000 n 
+0003054805 00000 n 
+0003054955 00000 n 
+0003055104 00000 n 
+0003055256 00000 n 
+0003055408 00000 n 
+0003055560 00000 n 
+0003055712 00000 n 
+0003055863 00000 n 
+0003056015 00000 n 
+0003056167 00000 n 
+0003056319 00000 n 
+0003056471 00000 n 
+0003056623 00000 n 
+0003056775 00000 n 
+0003056927 00000 n 
+0003057079 00000 n 
+0003057230 00000 n 
+0003057380 00000 n 
+0003057531 00000 n 
+0003057680 00000 n 
+0003057831 00000 n 
+0003057983 00000 n 
+0003058135 00000 n 
+0003058285 00000 n 
+0003058436 00000 n 
+0003058587 00000 n 
+0003058738 00000 n 
+0003058890 00000 n 
+0003059042 00000 n 
+0003059194 00000 n 
+0003059346 00000 n 
+0003059498 00000 n 
+0003059650 00000 n 
+0003059802 00000 n 
+0003059954 00000 n 
+0003060106 00000 n 
+0003060258 00000 n 
+0003060410 00000 n 
+0003060562 00000 n 
+0003060713 00000 n 
+0003060865 00000 n 
+0003061016 00000 n 
+0003061168 00000 n 
+0003061320 00000 n 
+0003061471 00000 n 
+0003061622 00000 n 
+0003061773 00000 n 
+0003061924 00000 n 
+0003062075 00000 n 
+0003062225 00000 n 
+0003062375 00000 n 
+0003062527 00000 n 
+0003062679 00000 n 
+0003062830 00000 n 
+0003062982 00000 n 
+0003063133 00000 n 
+0003063283 00000 n 
+0003063434 00000 n 
+0003063585 00000 n 
+0003063735 00000 n 
+0003063886 00000 n 
+0003064037 00000 n 
+0003064189 00000 n 
+0003064337 00000 n 
+0003064489 00000 n 
+0003064641 00000 n 
+0003064793 00000 n 
+0003064945 00000 n 
+0003065097 00000 n 
+0003065249 00000 n 
+0003065401 00000 n 
+0003065553 00000 n 
+0003065705 00000 n 
+0003065857 00000 n 
+0003066009 00000 n 
+0003066160 00000 n 
+0003066311 00000 n 
+0003066463 00000 n 
+0003066615 00000 n 
+0003066767 00000 n 
+0003066918 00000 n 
+0003067070 00000 n 
+0003067221 00000 n 
+0003067373 00000 n 
+0003067525 00000 n 
+0003067676 00000 n 
+0003067826 00000 n 
+0003067977 00000 n 
+0003068128 00000 n 
+0003068280 00000 n 
+0003068431 00000 n 
+0003068581 00000 n 
+0003068732 00000 n 
+0003068884 00000 n 
+0003069036 00000 n 
+0003069188 00000 n 
+0003069340 00000 n 
+0003069492 00000 n 
+0003069642 00000 n 
+0003069793 00000 n 
+0003069945 00000 n 
+0003070097 00000 n 
+0003070249 00000 n 
+0003070400 00000 n 
+0003070552 00000 n 
+0003070703 00000 n 
+0003070853 00000 n 
+0003071004 00000 n 
+0003071155 00000 n 
+0003071306 00000 n 
+0003071457 00000 n 
+0003071609 00000 n 
+0003071759 00000 n 
+0003071909 00000 n 
+0003072060 00000 n 
+0003072209 00000 n 
+0003072360 00000 n 
+0003072512 00000 n 
+0003072664 00000 n 
+0003072814 00000 n 
+0003072965 00000 n 
+0003073115 00000 n 
+0003073265 00000 n 
+0003073416 00000 n 
+0003073567 00000 n 
+0003073719 00000 n 
+0003073870 00000 n 
+0003074021 00000 n 
+0003074173 00000 n 
+0003074325 00000 n 
+0003074477 00000 n 
+0003074628 00000 n 
+0003074778 00000 n 
+0003074929 00000 n 
+0003075080 00000 n 
+0003075232 00000 n 
+0003075383 00000 n 
+0003075535 00000 n 
+0003075687 00000 n 
+0003075839 00000 n 
+0003075991 00000 n 
+0003076141 00000 n 
+0003076291 00000 n 
+0003076443 00000 n 
+0003076594 00000 n 
+0003076745 00000 n 
+0003076896 00000 n 
+0003077047 00000 n 
+0003077199 00000 n 
+0003077351 00000 n 
+0003077503 00000 n 
+0003077655 00000 n 
+0003080773 00000 n 
+0003080924 00000 n 
+0003077871 00000 n 
+0003051218 00000 n 
+0003049578 00000 n 
+0003077807 00000 n 
 0003081075 00000 n 
 0003081226 00000 n 
-0003081378 00000 n 
-0003081530 00000 n 
-0003081681 00000 n 
-0003081831 00000 n 
-0003081982 00000 n 
-0003082134 00000 n 
+0003081377 00000 n 
+0003081527 00000 n 
+0003081678 00000 n 
+0003081830 00000 n 
+0003081981 00000 n 
+0003082133 00000 n 
 0003082285 00000 n 
-0003082436 00000 n 
-0003082587 00000 n 
-0003082738 00000 n 
-0003082890 00000 n 
-0003083041 00000 n 
-0003083193 00000 n 
-0003083345 00000 n 
-0003083497 00000 n 
-0003087082 00000 n 
-0003083713 00000 n 
-0003066668 00000 n 
-0003065203 00000 n 
-0003083649 00000 n 
-0003087233 00000 n 
-0003087384 00000 n 
-0003087536 00000 n 
-0003087688 00000 n 
-0003087840 00000 n 
-0003087992 00000 n 
-0003088144 00000 n 
-0003088296 00000 n 
-0003088448 00000 n 
-0003088600 00000 n 
-0003088752 00000 n 
-0003088904 00000 n 
-0003089056 00000 n 
-0003089206 00000 n 
-0003089355 00000 n 
-0003089507 00000 n 
-0003089659 00000 n 
-0003089811 00000 n 
-0003089963 00000 n 
-0003090114 00000 n 
-0003090266 00000 n 
-0003090418 00000 n 
-0003090570 00000 n 
-0003090722 00000 n 
-0003090874 00000 n 
-0003091026 00000 n 
-0003091178 00000 n 
-0003091330 00000 n 
-0003091481 00000 n 
-0003091631 00000 n 
-0003091782 00000 n 
-0003091931 00000 n 
-0003092082 00000 n 
-0003092234 00000 n 
-0003092386 00000 n 
-0003092536 00000 n 
-0003092687 00000 n 
-0003092838 00000 n 
-0003092989 00000 n 
-0003093141 00000 n 
-0003093293 00000 n 
-0003093445 00000 n 
-0003093597 00000 n 
-0003093749 00000 n 
-0003093901 00000 n 
-0003094053 00000 n 
-0003094205 00000 n 
-0003094357 00000 n 
-0003094509 00000 n 
-0003094661 00000 n 
-0003094813 00000 n 
-0003094964 00000 n 
-0003095116 00000 n 
-0003095267 00000 n 
-0003095419 00000 n 
-0003095571 00000 n 
-0003095722 00000 n 
-0003095873 00000 n 
-0003096024 00000 n 
-0003096175 00000 n 
-0003096326 00000 n 
-0003096476 00000 n 
-0003096626 00000 n 
-0003096778 00000 n 
-0003096930 00000 n 
-0003097081 00000 n 
-0003097233 00000 n 
-0003097384 00000 n 
-0003097534 00000 n 
-0003097685 00000 n 
-0003097836 00000 n 
-0003097986 00000 n 
-0003098137 00000 n 
-0003098288 00000 n 
-0003098440 00000 n 
-0003098588 00000 n 
-0003098740 00000 n 
-0003098892 00000 n 
-0003099044 00000 n 
-0003099196 00000 n 
-0003099348 00000 n 
-0003099500 00000 n 
-0003099652 00000 n 
-0003099804 00000 n 
-0003099956 00000 n 
-0003100108 00000 n 
-0003100260 00000 n 
-0003100411 00000 n 
-0003100562 00000 n 
-0003100714 00000 n 
-0003100866 00000 n 
-0003101018 00000 n 
-0003101169 00000 n 
-0003101321 00000 n 
-0003101472 00000 n 
-0003101624 00000 n 
-0003101776 00000 n 
-0003101927 00000 n 
-0003102077 00000 n 
-0003102228 00000 n 
-0003102379 00000 n 
-0003102531 00000 n 
-0003102682 00000 n 
+0003082437 00000 n 
+0003082589 00000 n 
+0003082741 00000 n 
+0003082892 00000 n 
+0003083043 00000 n 
+0003083194 00000 n 
+0003083346 00000 n 
+0003083498 00000 n 
+0003083650 00000 n 
+0003083802 00000 n 
+0003083954 00000 n 
+0003084106 00000 n 
+0003084258 00000 n 
+0003084410 00000 n 
+0003084562 00000 n 
+0003084712 00000 n 
+0003084863 00000 n 
+0003085013 00000 n 
+0003085164 00000 n 
+0003085315 00000 n 
+0003085467 00000 n 
+0003085619 00000 n 
+0003085770 00000 n 
+0003085921 00000 n 
+0003086073 00000 n 
+0003086225 00000 n 
+0003086375 00000 n 
+0003086527 00000 n 
+0003086679 00000 n 
+0003086830 00000 n 
+0003086981 00000 n 
+0003087132 00000 n 
+0003087284 00000 n 
+0003087436 00000 n 
+0003087588 00000 n 
+0003087740 00000 n 
+0003087891 00000 n 
+0003088043 00000 n 
+0003088195 00000 n 
+0003088347 00000 n 
+0003088499 00000 n 
+0003088651 00000 n 
+0003088802 00000 n 
+0003088954 00000 n 
+0003089105 00000 n 
+0003089257 00000 n 
+0003089406 00000 n 
+0003089557 00000 n 
+0003089709 00000 n 
+0003089861 00000 n 
+0003090013 00000 n 
+0003090165 00000 n 
+0003090317 00000 n 
+0003090469 00000 n 
+0003090621 00000 n 
+0003090773 00000 n 
+0003090925 00000 n 
+0003091077 00000 n 
+0003091227 00000 n 
+0003091379 00000 n 
+0003091530 00000 n 
+0003091681 00000 n 
+0003091832 00000 n 
+0003091983 00000 n 
+0003092135 00000 n 
+0003092286 00000 n 
+0003092438 00000 n 
+0003092589 00000 n 
+0003092741 00000 n 
+0003092892 00000 n 
+0003093043 00000 n 
+0003093195 00000 n 
+0003093347 00000 n 
+0003093499 00000 n 
+0003093651 00000 n 
+0003093803 00000 n 
+0003093955 00000 n 
+0003094105 00000 n 
+0003094255 00000 n 
+0003094405 00000 n 
+0003094556 00000 n 
+0003094708 00000 n 
+0003094860 00000 n 
+0003095011 00000 n 
+0003095163 00000 n 
+0003095315 00000 n 
+0003095467 00000 n 
+0003095618 00000 n 
+0003095770 00000 n 
+0003095921 00000 n 
+0003096072 00000 n 
+0003096224 00000 n 
+0003096374 00000 n 
+0003096525 00000 n 
+0003096677 00000 n 
+0003096827 00000 n 
+0003096978 00000 n 
+0003097129 00000 n 
+0003097280 00000 n 
+0003097432 00000 n 
+0003097584 00000 n 
+0003097735 00000 n 
+0003097887 00000 n 
+0003098038 00000 n 
+0003098190 00000 n 
+0003098341 00000 n 
+0003098492 00000 n 
+0003098644 00000 n 
+0003098796 00000 n 
+0003098948 00000 n 
+0003099100 00000 n 
+0003099252 00000 n 
+0003099404 00000 n 
+0003102529 00000 n 
+0003102680 00000 n 
+0003099620 00000 n 
+0003079529 00000 n 
+0003077987 00000 n 
+0003099556 00000 n 
+0003364745 00000 n 
 0003102832 00000 n 
-0003102983 00000 n 
-0003103135 00000 n 
-0003103287 00000 n 
-0003103439 00000 n 
-0003103591 00000 n 
-0003103743 00000 n 
-0003103893 00000 n 
-0003104044 00000 n 
-0003104196 00000 n 
-0003104348 00000 n 
-0003104500 00000 n 
-0003104651 00000 n 
-0003104803 00000 n 
-0003104954 00000 n 
-0003105104 00000 n 
-0003105255 00000 n 
-0003105406 00000 n 
-0003105557 00000 n 
-0003105708 00000 n 
-0003105860 00000 n 
-0003106010 00000 n 
-0003106160 00000 n 
-0003106311 00000 n 
-0003106460 00000 n 
-0003106611 00000 n 
-0003106763 00000 n 
-0003106915 00000 n 
-0003107065 00000 n 
-0003107216 00000 n 
-0003107366 00000 n 
-0003107516 00000 n 
-0003107667 00000 n 
-0003107818 00000 n 
-0003107970 00000 n 
-0003108121 00000 n 
-0003108272 00000 n 
-0003108424 00000 n 
-0003108576 00000 n 
-0003108728 00000 n 
-0003108879 00000 n 
-0003109029 00000 n 
-0003109180 00000 n 
-0003109331 00000 n 
-0003109483 00000 n 
-0003109634 00000 n 
-0003109786 00000 n 
-0003109938 00000 n 
-0003110090 00000 n 
-0003110242 00000 n 
-0003110392 00000 n 
-0003110542 00000 n 
-0003110694 00000 n 
-0003110845 00000 n 
-0003110996 00000 n 
-0003111147 00000 n 
-0003111298 00000 n 
-0003111450 00000 n 
-0003111602 00000 n 
-0003111754 00000 n 
-0003111906 00000 n 
-0003115024 00000 n 
-0003115175 00000 n 
-0003112122 00000 n 
-0003085469 00000 n 
-0003083829 00000 n 
-0003112058 00000 n 
-0003115326 00000 n 
-0003115477 00000 n 
-0003115628 00000 n 
-0003115778 00000 n 
-0003115929 00000 n 
-0003116081 00000 n 
-0003116232 00000 n 
-0003116384 00000 n 
-0003116536 00000 n 
-0003116688 00000 n 
-0003116840 00000 n 
-0003116992 00000 n 
-0003117143 00000 n 
-0003117294 00000 n 
-0003117445 00000 n 
-0003117597 00000 n 
-0003117749 00000 n 
-0003117901 00000 n 
-0003118053 00000 n 
-0003118205 00000 n 
-0003118357 00000 n 
-0003118509 00000 n 
-0003118661 00000 n 
-0003118813 00000 n 
-0003118963 00000 n 
-0003119114 00000 n 
-0003119264 00000 n 
-0003119415 00000 n 
-0003119566 00000 n 
-0003119718 00000 n 
-0003119870 00000 n 
-0003120021 00000 n 
-0003120172 00000 n 
-0003120324 00000 n 
-0003120476 00000 n 
-0003120626 00000 n 
-0003120778 00000 n 
-0003120930 00000 n 
-0003121081 00000 n 
-0003121232 00000 n 
-0003121383 00000 n 
-0003121535 00000 n 
-0003121687 00000 n 
-0003121839 00000 n 
-0003121991 00000 n 
-0003122142 00000 n 
-0003122294 00000 n 
-0003122446 00000 n 
-0003122598 00000 n 
-0003122750 00000 n 
-0003122902 00000 n 
-0003123053 00000 n 
-0003123205 00000 n 
-0003123356 00000 n 
-0003123508 00000 n 
-0003123657 00000 n 
-0003123808 00000 n 
-0003123960 00000 n 
-0003124112 00000 n 
-0003124264 00000 n 
-0003124416 00000 n 
-0003124568 00000 n 
-0003124720 00000 n 
-0003124872 00000 n 
-0003125024 00000 n 
-0003125176 00000 n 
-0003125328 00000 n 
-0003125478 00000 n 
-0003125630 00000 n 
-0003125781 00000 n 
-0003125932 00000 n 
-0003126083 00000 n 
-0003126234 00000 n 
-0003126386 00000 n 
-0003126537 00000 n 
-0003126689 00000 n 
-0003126840 00000 n 
-0003126992 00000 n 
-0003127143 00000 n 
-0003127294 00000 n 
-0003127446 00000 n 
-0003127598 00000 n 
-0003127750 00000 n 
-0003127902 00000 n 
-0003128054 00000 n 
-0003128206 00000 n 
-0003128356 00000 n 
-0003128506 00000 n 
-0003128656 00000 n 
-0003128807 00000 n 
-0003128959 00000 n 
-0003129111 00000 n 
-0003129262 00000 n 
-0003129414 00000 n 
-0003129566 00000 n 
-0003129718 00000 n 
-0003129869 00000 n 
-0003130021 00000 n 
-0003130172 00000 n 
-0003130323 00000 n 
-0003130475 00000 n 
-0003130625 00000 n 
-0003130776 00000 n 
-0003130928 00000 n 
-0003131078 00000 n 
-0003131229 00000 n 
-0003131380 00000 n 
-0003131531 00000 n 
-0003131683 00000 n 
-0003131835 00000 n 
-0003131986 00000 n 
-0003132138 00000 n 
-0003132289 00000 n 
-0003132441 00000 n 
-0003132592 00000 n 
-0003132743 00000 n 
-0003132895 00000 n 
-0003133047 00000 n 
-0003133199 00000 n 
-0003133351 00000 n 
-0003133503 00000 n 
-0003133655 00000 n 
-0003136780 00000 n 
-0003136931 00000 n 
-0003133871 00000 n 
-0003113780 00000 n 
-0003112238 00000 n 
-0003133807 00000 n 
-0003388430 00000 n 
-0003137083 00000 n 
-0003137233 00000 n 
-0003137383 00000 n 
-0003137533 00000 n 
-0003137683 00000 n 
-0003137832 00000 n 
-0003137984 00000 n 
-0003138136 00000 n 
-0003138288 00000 n 
-0003138440 00000 n 
-0003138590 00000 n 
-0003138741 00000 n 
-0003138893 00000 n 
-0003139045 00000 n 
-0003139196 00000 n 
-0003139347 00000 n 
-0003139498 00000 n 
-0003139649 00000 n 
-0003139801 00000 n 
-0003139952 00000 n 
-0003140104 00000 n 
-0003140256 00000 n 
-0003140408 00000 n 
-0003140560 00000 n 
-0003140712 00000 n 
-0003140864 00000 n 
-0003141016 00000 n 
-0003141168 00000 n 
-0003141320 00000 n 
-0003141472 00000 n 
-0003141624 00000 n 
-0003141775 00000 n 
-0003141926 00000 n 
-0003142078 00000 n 
-0003142230 00000 n 
-0003142381 00000 n 
-0003142532 00000 n 
-0003142683 00000 n 
-0003142835 00000 n 
-0003142987 00000 n 
-0003143139 00000 n 
-0003143291 00000 n 
-0003143443 00000 n 
-0003143595 00000 n 
-0003143747 00000 n 
-0003143899 00000 n 
-0003144051 00000 n 
-0003144203 00000 n 
-0003144355 00000 n 
-0003144507 00000 n 
-0003144659 00000 n 
-0003144810 00000 n 
-0003144961 00000 n 
-0003145112 00000 n 
-0003145264 00000 n 
-0003145416 00000 n 
-0003145567 00000 n 
-0003145719 00000 n 
-0003145870 00000 n 
-0003146022 00000 n 
-0003146174 00000 n 
-0003146326 00000 n 
-0003146478 00000 n 
-0003146630 00000 n 
-0003146782 00000 n 
-0003146934 00000 n 
-0003147086 00000 n 
-0003147238 00000 n 
-0003147389 00000 n 
-0003147541 00000 n 
-0003147692 00000 n 
-0003147842 00000 n 
-0003147994 00000 n 
-0003148144 00000 n 
-0003148296 00000 n 
-0003148448 00000 n 
-0003148600 00000 n 
-0003148752 00000 n 
-0003148903 00000 n 
-0003149054 00000 n 
-0003149203 00000 n 
-0003149352 00000 n 
-0003149503 00000 n 
-0003149652 00000 n 
-0003149803 00000 n 
-0003149953 00000 n 
-0003150104 00000 n 
-0003150255 00000 n 
-0003150406 00000 n 
-0003150558 00000 n 
-0003150710 00000 n 
-0003150862 00000 n 
-0003151013 00000 n 
-0003151164 00000 n 
-0003151315 00000 n 
-0003151467 00000 n 
-0003151619 00000 n 
-0003151767 00000 n 
-0003151919 00000 n 
-0003152071 00000 n 
-0003152221 00000 n 
-0003152372 00000 n 
-0003152523 00000 n 
-0003152674 00000 n 
-0003152825 00000 n 
-0003152975 00000 n 
-0003153126 00000 n 
-0003153277 00000 n 
-0003153429 00000 n 
-0003153581 00000 n 
-0003153731 00000 n 
-0003153883 00000 n 
-0003154035 00000 n 
-0003154187 00000 n 
-0003154339 00000 n 
-0003154490 00000 n 
-0003154641 00000 n 
-0003154792 00000 n 
-0003154942 00000 n 
-0003155093 00000 n 
-0003155245 00000 n 
-0003155397 00000 n 
-0003155611 00000 n 
-0003135536 00000 n 
-0003133987 00000 n 
-0003155547 00000 n 
-0003156133 00000 n 
-0003156159 00000 n 
-0003156185 00000 n 
-0003156211 00000 n 
-0003156643 00000 n 
-0003156667 00000 n 
-0003156793 00000 n 
-0003157007 00000 n 
-0003157451 00000 n 
-0003157615 00000 n 
-0003158266 00000 n 
-0003158587 00000 n 
-0003158623 00000 n 
-0003159277 00000 n 
-0003159727 00000 n 
-0003160103 00000 n 
-0003160141 00000 n 
-0003160221 00000 n 
-0003160654 00000 n 
-0003161026 00000 n 
-0003161663 00000 n 
-0003162059 00000 n 
-0003162739 00000 n 
-0003163409 00000 n 
-0003164042 00000 n 
-0003164694 00000 n 
-0003165101 00000 n 
-0003165750 00000 n 
-0003166388 00000 n 
-0003180964 00000 n 
-0003181429 00000 n 
-0003189086 00000 n 
-0003189404 00000 n 
-0003191700 00000 n 
-0003191928 00000 n 
-0003196585 00000 n 
-0003196842 00000 n 
-0003200459 00000 n 
-0003200700 00000 n 
-0003211338 00000 n 
-0003211733 00000 n 
-0003217976 00000 n 
-0003218268 00000 n 
-0003220008 00000 n 
-0003220231 00000 n 
-0003222048 00000 n 
-0003222282 00000 n 
-0003240954 00000 n 
-0003241576 00000 n 
-0003246072 00000 n 
-0003246348 00000 n 
+0003102982 00000 n 
+0003103132 00000 n 
+0003103282 00000 n 
+0003103432 00000 n 
+0003103581 00000 n 
+0003103733 00000 n 
+0003103885 00000 n 
+0003104037 00000 n 
+0003104189 00000 n 
+0003104339 00000 n 
+0003104490 00000 n 
+0003104642 00000 n 
+0003104794 00000 n 
+0003104945 00000 n 
+0003105096 00000 n 
+0003105247 00000 n 
+0003105398 00000 n 
+0003105550 00000 n 
+0003105701 00000 n 
+0003105853 00000 n 
+0003106005 00000 n 
+0003106157 00000 n 
+0003106309 00000 n 
+0003106461 00000 n 
+0003106613 00000 n 
+0003106765 00000 n 
+0003106917 00000 n 
+0003107069 00000 n 
+0003107221 00000 n 
+0003107373 00000 n 
+0003107524 00000 n 
+0003107675 00000 n 
+0003107827 00000 n 
+0003107979 00000 n 
+0003108130 00000 n 
+0003108281 00000 n 
+0003108432 00000 n 
+0003108584 00000 n 
+0003108736 00000 n 
+0003108888 00000 n 
+0003109040 00000 n 
+0003109192 00000 n 
+0003109344 00000 n 
+0003109496 00000 n 
+0003109648 00000 n 
+0003109800 00000 n 
+0003109952 00000 n 
+0003110104 00000 n 
+0003110256 00000 n 
+0003110408 00000 n 
+0003110559 00000 n 
+0003110710 00000 n 
+0003110861 00000 n 
+0003111013 00000 n 
+0003111165 00000 n 
+0003111316 00000 n 
+0003111468 00000 n 
+0003111619 00000 n 
+0003111771 00000 n 
+0003111923 00000 n 
+0003112075 00000 n 
+0003112227 00000 n 
+0003112379 00000 n 
+0003112531 00000 n 
+0003112683 00000 n 
+0003112835 00000 n 
+0003112987 00000 n 
+0003113138 00000 n 
+0003113290 00000 n 
+0003113441 00000 n 
+0003113591 00000 n 
+0003113743 00000 n 
+0003113893 00000 n 
+0003114045 00000 n 
+0003114197 00000 n 
+0003114349 00000 n 
+0003114501 00000 n 
+0003114652 00000 n 
+0003114803 00000 n 
+0003114952 00000 n 
+0003115101 00000 n 
+0003115252 00000 n 
+0003115401 00000 n 
+0003115552 00000 n 
+0003115702 00000 n 
+0003115853 00000 n 
+0003116004 00000 n 
+0003116155 00000 n 
+0003116307 00000 n 
+0003116459 00000 n 
+0003116611 00000 n 
+0003116762 00000 n 
+0003116913 00000 n 
+0003117064 00000 n 
+0003117216 00000 n 
+0003117368 00000 n 
+0003117516 00000 n 
+0003117668 00000 n 
+0003117820 00000 n 
+0003117970 00000 n 
+0003118121 00000 n 
+0003118272 00000 n 
+0003118423 00000 n 
+0003118574 00000 n 
+0003118724 00000 n 
+0003118875 00000 n 
+0003119026 00000 n 
+0003119178 00000 n 
+0003119330 00000 n 
+0003119480 00000 n 
+0003119632 00000 n 
+0003119784 00000 n 
+0003119936 00000 n 
+0003120088 00000 n 
+0003120239 00000 n 
+0003120390 00000 n 
+0003120541 00000 n 
+0003120691 00000 n 
+0003120842 00000 n 
+0003120994 00000 n 
+0003121146 00000 n 
+0003121360 00000 n 
+0003101285 00000 n 
+0003099736 00000 n 
+0003121296 00000 n 
+0003121882 00000 n 
+0003121908 00000 n 
+0003121934 00000 n 
+0003121960 00000 n 
+0003122392 00000 n 
+0003122416 00000 n 
+0003122542 00000 n 
+0003122756 00000 n 
+0003123200 00000 n 
+0003123364 00000 n 
+0003124015 00000 n 
+0003124336 00000 n 
+0003124372 00000 n 
+0003125026 00000 n 
+0003125476 00000 n 
+0003125852 00000 n 
+0003125890 00000 n 
+0003125970 00000 n 
+0003126403 00000 n 
+0003126775 00000 n 
+0003127412 00000 n 
+0003127808 00000 n 
+0003128488 00000 n 
+0003129158 00000 n 
+0003129791 00000 n 
+0003130443 00000 n 
+0003130874 00000 n 
+0003131523 00000 n 
+0003132161 00000 n 
+0003146737 00000 n 
+0003147202 00000 n 
+0003154859 00000 n 
+0003155177 00000 n 
+0003157473 00000 n 
+0003157701 00000 n 
+0003162358 00000 n 
+0003162615 00000 n 
+0003166232 00000 n 
+0003166473 00000 n 
+0003177111 00000 n 
+0003177506 00000 n 
+0003183749 00000 n 
+0003184041 00000 n 
+0003185781 00000 n 
+0003186004 00000 n 
+0003187821 00000 n 
+0003188055 00000 n 
+0003206727 00000 n 
+0003207349 00000 n 
+0003211988 00000 n 
+0003212262 00000 n 
+0003215593 00000 n 
+0003215861 00000 n 
+0003219826 00000 n 
+0003220102 00000 n 
+0003232134 00000 n 
+0003232568 00000 n 
+0003234370 00000 n 
+0003234599 00000 n 
+0003244573 00000 n 
+0003245059 00000 n 
+0003249386 00000 n 
 0003249679 00000 n 
-0003249947 00000 n 
-0003253912 00000 n 
-0003254188 00000 n 
-0003266220 00000 n 
-0003266654 00000 n 
-0003268456 00000 n 
-0003268685 00000 n 
-0003278659 00000 n 
-0003279145 00000 n 
-0003283472 00000 n 
-0003283765 00000 n 
-0003292973 00000 n 
-0003293382 00000 n 
-0003306647 00000 n 
-0003307152 00000 n 
-0003310290 00000 n 
-0003310546 00000 n 
-0003313070 00000 n 
-0003313387 00000 n 
-0003331048 00000 n 
-0003331569 00000 n 
-0003333333 00000 n 
-0003333556 00000 n 
-0003335303 00000 n 
-0003335526 00000 n 
-0003339053 00000 n 
-0003339292 00000 n 
-0003355899 00000 n 
-0003356546 00000 n 
-0003368544 00000 n 
-0003368996 00000 n 
-0003370849 00000 n 
-0003388519 00000 n 
-0003388645 00000 n 
-0003388771 00000 n 
-0003388897 00000 n 
-0003389023 00000 n 
-0003389149 00000 n 
-0003389275 00000 n 
-0003389401 00000 n 
-0003389527 00000 n 
-0003389653 00000 n 
-0003389779 00000 n 
-0003389905 00000 n 
-0003390031 00000 n 
-0003390157 00000 n 
-0003390283 00000 n 
-0003390409 00000 n 
-0003390535 00000 n 
-0003390661 00000 n 
-0003390778 00000 n 
-0003390905 00000 n 
-0003391032 00000 n 
-0003391159 00000 n 
-0003391242 00000 n 
-0003418136 00000 n 
-0003418285 00000 n 
-0003418424 00000 n 
-0003418625 00000 n 
-0003418805 00000 n 
-0003418990 00000 n 
-0003419174 00000 n 
-0003419359 00000 n 
-0003419543 00000 n 
-0003419728 00000 n 
-0003419911 00000 n 
-0003420094 00000 n 
-0003420279 00000 n 
-0003420463 00000 n 
-0003420648 00000 n 
-0003420832 00000 n 
-0003421017 00000 n 
-0003421201 00000 n 
-0003421386 00000 n 
-0003421570 00000 n 
-0003421755 00000 n 
-0003421938 00000 n 
-0003422119 00000 n 
-0003422302 00000 n 
-0003422485 00000 n 
-0003422670 00000 n 
-0003422854 00000 n 
-0003423039 00000 n 
-0003423223 00000 n 
-0003423408 00000 n 
-0003423592 00000 n 
-0003423777 00000 n 
-0003423961 00000 n 
-0003424146 00000 n 
-0003424329 00000 n 
-0003424512 00000 n 
-0003424697 00000 n 
-0003424881 00000 n 
-0003425066 00000 n 
-0003425250 00000 n 
-0003425435 00000 n 
-0003425617 00000 n 
-0003425802 00000 n 
-0003425986 00000 n 
-0003426171 00000 n 
-0003426355 00000 n 
-0003426540 00000 n 
-0003426723 00000 n 
-0003426906 00000 n 
-0003427091 00000 n 
-0003427275 00000 n 
-0003427460 00000 n 
-0003427644 00000 n 
-0003427829 00000 n 
-0003428013 00000 n 
-0003428198 00000 n 
-0003428382 00000 n 
-0003428567 00000 n 
-0003428750 00000 n 
-0003428931 00000 n 
-0003429114 00000 n 
-0003429297 00000 n 
-0003429482 00000 n 
-0003429666 00000 n 
-0003429851 00000 n 
-0003430035 00000 n 
-0003430220 00000 n 
-0003430404 00000 n 
-0003430589 00000 n 
-0003430773 00000 n 
-0003430958 00000 n 
-0003431141 00000 n 
-0003431324 00000 n 
-0003431509 00000 n 
-0003431693 00000 n 
-0003431878 00000 n 
-0003432062 00000 n 
-0003432247 00000 n 
-0003432429 00000 n 
-0003432614 00000 n 
-0003432798 00000 n 
-0003432983 00000 n 
-0003433167 00000 n 
-0003433352 00000 n 
-0003433535 00000 n 
-0003433718 00000 n 
-0003433903 00000 n 
-0003434087 00000 n 
-0003434272 00000 n 
-0003434456 00000 n 
-0003434641 00000 n 
-0003434825 00000 n 
-0003435010 00000 n 
-0003435194 00000 n 
-0003435379 00000 n 
-0003435562 00000 n 
-0003435743 00000 n 
-0003435926 00000 n 
-0003436109 00000 n 
-0003436294 00000 n 
-0003436478 00000 n 
-0003436663 00000 n 
-0003436847 00000 n 
-0003437032 00000 n 
-0003437216 00000 n 
-0003437401 00000 n 
-0003437585 00000 n 
-0003437770 00000 n 
-0003437953 00000 n 
-0003438136 00000 n 
-0003438321 00000 n 
-0003438505 00000 n 
-0003438690 00000 n 
-0003438874 00000 n 
-0003439059 00000 n 
-0003439241 00000 n 
-0003439426 00000 n 
-0003439610 00000 n 
-0003439789 00000 n 
-0003439965 00000 n 
-0003440142 00000 n 
-0003440318 00000 n 
-0003440495 00000 n 
-0003440683 00000 n 
-0003440871 00000 n 
-0003441067 00000 n 
-0003441264 00000 n 
-0003441471 00000 n 
-0003441675 00000 n 
-0003441877 00000 n 
-0003442079 00000 n 
-0003442283 00000 n 
-0003442506 00000 n 
-0003442738 00000 n 
-0003442966 00000 n 
-0003443188 00000 n 
-0003443390 00000 n 
-0003443566 00000 n 
-0003443769 00000 n 
-0003443986 00000 n 
-0003444185 00000 n 
-0003444383 00000 n 
-0003444578 00000 n 
-0003444772 00000 n 
-0003444966 00000 n 
-0003445153 00000 n 
-0003445353 00000 n 
-0003445546 00000 n 
-0003445761 00000 n 
-0003445999 00000 n 
-0003446238 00000 n 
-0003446471 00000 n 
-0003446704 00000 n 
-0003446937 00000 n 
-0003447170 00000 n 
-0003447395 00000 n 
-0003447624 00000 n 
-0003447849 00000 n 
-0003448079 00000 n 
-0003448309 00000 n 
-0003448534 00000 n 
-0003448759 00000 n 
-0003448984 00000 n 
-0003449209 00000 n 
-0003449439 00000 n 
-0003449664 00000 n 
-0003449889 00000 n 
-0003450104 00000 n 
-0003450317 00000 n 
-0003450526 00000 n 
-0003450735 00000 n 
-0003450936 00000 n 
-0003451137 00000 n 
-0003451338 00000 n 
-0003451524 00000 n 
-0003451717 00000 n 
-0003451910 00000 n 
-0003452103 00000 n 
-0003452296 00000 n 
-0003452489 00000 n 
-0003452682 00000 n 
-0003452875 00000 n 
-0003453068 00000 n 
-0003453261 00000 n 
-0003453454 00000 n 
-0003453647 00000 n 
-0003453840 00000 n 
-0003454033 00000 n 
-0003454226 00000 n 
-0003454419 00000 n 
-0003454612 00000 n 
-0003454805 00000 n 
-0003454998 00000 n 
-0003455191 00000 n 
-0003455384 00000 n 
-0003455577 00000 n 
-0003455770 00000 n 
-0003455963 00000 n 
-0003456156 00000 n 
-0003456349 00000 n 
-0003456542 00000 n 
-0003456735 00000 n 
-0003456928 00000 n 
-0003457121 00000 n 
-0003457314 00000 n 
-0003457507 00000 n 
-0003457700 00000 n 
-0003457893 00000 n 
-0003458086 00000 n 
-0003458279 00000 n 
-0003458472 00000 n 
-0003458665 00000 n 
-0003458855 00000 n 
-0003459051 00000 n 
-0003459253 00000 n 
-0003459504 00000 n 
-0003459751 00000 n 
-0003459998 00000 n 
-0003460247 00000 n 
-0003460496 00000 n 
-0003460745 00000 n 
-0003460993 00000 n 
-0003461242 00000 n 
-0003461490 00000 n 
-0003461739 00000 n 
-0003461982 00000 n 
-0003462227 00000 n 
-0003462476 00000 n 
-0003462724 00000 n 
-0003462969 00000 n 
-0003463212 00000 n 
-0003463461 00000 n 
-0003463709 00000 n 
-0003463958 00000 n 
-0003464206 00000 n 
-0003464449 00000 n 
-0003464690 00000 n 
-0003464931 00000 n 
-0003465172 00000 n 
-0003465417 00000 n 
-0003465666 00000 n 
-0003465914 00000 n 
-0003466160 00000 n 
-0003466401 00000 n 
-0003466650 00000 n 
-0003466895 00000 n 
-0003467136 00000 n 
-0003467385 00000 n 
-0003467633 00000 n 
-0003467882 00000 n 
-0003468130 00000 n 
-0003468374 00000 n 
-0003468619 00000 n 
-0003468868 00000 n 
-0003469116 00000 n 
-0003469365 00000 n 
-0003469610 00000 n 
-0003469849 00000 n 
-0003470090 00000 n 
-0003470330 00000 n 
-0003470571 00000 n 
-0003470811 00000 n 
-0003471044 00000 n 
-0003471291 00000 n 
-0003471538 00000 n 
-0003471784 00000 n 
-0003472025 00000 n 
-0003472274 00000 n 
-0003472522 00000 n 
-0003472771 00000 n 
-0003473014 00000 n 
-0003473259 00000 n 
-0003473508 00000 n 
-0003473756 00000 n 
-0003474005 00000 n 
-0003474252 00000 n 
-0003474499 00000 n 
-0003474743 00000 n 
-0003474989 00000 n 
-0003475238 00000 n 
-0003475485 00000 n 
-0003475728 00000 n 
-0003475973 00000 n 
-0003476222 00000 n 
-0003476470 00000 n 
-0003476715 00000 n 
-0003476958 00000 n 
-0003477207 00000 n 
-0003477455 00000 n 
-0003477704 00000 n 
-0003477952 00000 n 
-0003478201 00000 n 
-0003478446 00000 n 
-0003478690 00000 n 
-0003478939 00000 n 
-0003479187 00000 n 
-0003479436 00000 n 
-0003479684 00000 n 
-0003479928 00000 n 
-0003480173 00000 n 
-0003480422 00000 n 
-0003480670 00000 n 
-0003480919 00000 n 
-0003481166 00000 n 
-0003481413 00000 n 
-0003481658 00000 n 
-0003481903 00000 n 
-0003482152 00000 n 
-0003482400 00000 n 
-0003482649 00000 n 
-0003482896 00000 n 
-0003483142 00000 n 
-0003483385 00000 n 
-0003483634 00000 n 
-0003483882 00000 n 
-0003484131 00000 n 
-0003484379 00000 n 
-0003484626 00000 n 
-0003484865 00000 n 
-0003485106 00000 n 
-0003485346 00000 n 
-0003485587 00000 n 
-0003485827 00000 n 
-0003486062 00000 n 
-0003486306 00000 n 
-0003486555 00000 n 
-0003486802 00000 n 
-0003487049 00000 n 
-0003487298 00000 n 
-0003487541 00000 n 
-0003487787 00000 n 
-0003488033 00000 n 
-0003488274 00000 n 
-0003488521 00000 n 
-0003488765 00000 n 
-0003489008 00000 n 
-0003489253 00000 n 
-0003489494 00000 n 
-0003489743 00000 n 
-0003489991 00000 n 
-0003490240 00000 n 
-0003490488 00000 n 
-0003490737 00000 n 
-0003490983 00000 n 
-0003491226 00000 n 
-0003491475 00000 n 
-0003491723 00000 n 
-0003491972 00000 n 
-0003492220 00000 n 
-0003492465 00000 n 
-0003492709 00000 n 
-0003492958 00000 n 
-0003493206 00000 n 
-0003493455 00000 n 
-0003493703 00000 n 
-0003493950 00000 n 
-0003494191 00000 n 
-0003494440 00000 n 
-0003494688 00000 n 
-0003494937 00000 n 
-0003495185 00000 n 
-0003495429 00000 n 
-0003495674 00000 n 
-0003495923 00000 n 
-0003496171 00000 n 
-0003496420 00000 n 
-0003496667 00000 n 
-0003496908 00000 n 
-0003497155 00000 n 
-0003497402 00000 n 
-0003497651 00000 n 
-0003497899 00000 n 
-0003498143 00000 n 
-0003498383 00000 n 
-0003498624 00000 n 
-0003498864 00000 n 
-0003499097 00000 n 
-0003499341 00000 n 
-0003499590 00000 n 
-0003499833 00000 n 
-0003500076 00000 n 
-0003500325 00000 n 
-0003500568 00000 n 
-0003500808 00000 n 
-0003501049 00000 n 
-0003501289 00000 n 
-0003501522 00000 n 
-0003501760 00000 n 
-0003502001 00000 n 
-0003502240 00000 n 
-0003502477 00000 n 
-0003502708 00000 n 
-0003502930 00000 n 
-0003503112 00000 n 
-0003503297 00000 n 
-0003503481 00000 n 
-0003503666 00000 n 
-0003503849 00000 n 
-0003504032 00000 n 
-0003504217 00000 n 
-0003504401 00000 n 
-0003504586 00000 n 
-0003504770 00000 n 
-0003504955 00000 n 
-0003505139 00000 n 
-0003505324 00000 n 
-0003505508 00000 n 
-0003505693 00000 n 
-0003505876 00000 n 
-0003506059 00000 n 
-0003506244 00000 n 
-0003506425 00000 n 
-0003506610 00000 n 
-0003506794 00000 n 
-0003506979 00000 n 
-0003507163 00000 n 
-0003507348 00000 n 
-0003507532 00000 n 
-0003507717 00000 n 
-0003507901 00000 n 
-0003508086 00000 n 
-0003508269 00000 n 
-0003508452 00000 n 
-0003508637 00000 n 
-0003508821 00000 n 
-0003509006 00000 n 
-0003509190 00000 n 
-0003509375 00000 n 
-0003509559 00000 n 
-0003509744 00000 n 
-0003509926 00000 n 
-0003510111 00000 n 
-0003510295 00000 n 
-0003510480 00000 n 
-0003510663 00000 n 
-0003510846 00000 n 
-0003511031 00000 n 
-0003511215 00000 n 
-0003511400 00000 n 
-0003511584 00000 n 
-0003511769 00000 n 
-0003511953 00000 n 
-0003512138 00000 n 
-0003512322 00000 n 
-0003512507 00000 n 
-0003512690 00000 n 
-0003512873 00000 n 
-0003513058 00000 n 
-0003513239 00000 n 
-0003513424 00000 n 
-0003513608 00000 n 
-0003513793 00000 n 
-0003513977 00000 n 
-0003514162 00000 n 
-0003514346 00000 n 
-0003514531 00000 n 
-0003514715 00000 n 
-0003514900 00000 n 
-0003515083 00000 n 
-0003515266 00000 n 
-0003515451 00000 n 
-0003515635 00000 n 
-0003515820 00000 n 
-0003516004 00000 n 
-0003516189 00000 n 
-0003516373 00000 n 
-0003516558 00000 n 
-0003516740 00000 n 
-0003516925 00000 n 
-0003517109 00000 n 
-0003517294 00000 n 
-0003517477 00000 n 
-0003517660 00000 n 
-0003517845 00000 n 
-0003518029 00000 n 
-0003518214 00000 n 
-0003518398 00000 n 
-0003518583 00000 n 
-0003518767 00000 n 
-0003518952 00000 n 
-0003519136 00000 n 
-0003519321 00000 n 
-0003519504 00000 n 
-0003519687 00000 n 
-0003519872 00000 n 
-0003520047 00000 n 
-0003520222 00000 n 
-0003520399 00000 n 
-0003520575 00000 n 
-0003520752 00000 n 
-0003520928 00000 n 
-0003521105 00000 n 
-0003521286 00000 n 
-0003521467 00000 n 
-0003521652 00000 n 
-0003521845 00000 n 
-0003522038 00000 n 
-0003522236 00000 n 
-0003522420 00000 n 
-0003522604 00000 n 
-0003522803 00000 n 
-0003523011 00000 n 
-0003523261 00000 n 
-0003523512 00000 n 
-0003523751 00000 n 
-0003523993 00000 n 
-0003524188 00000 n 
-0003524371 00000 n 
-0003524574 00000 n 
-0003524778 00000 n 
-0003524985 00000 n 
-0003525194 00000 n 
-0003525402 00000 n 
-0003525610 00000 n 
-0003525819 00000 n 
-0003526028 00000 n 
-0003526237 00000 n 
-0003526439 00000 n 
-0003526648 00000 n 
-0003526859 00000 n 
-0003527070 00000 n 
-0003527283 00000 n 
-0003527500 00000 n 
-0003527708 00000 n 
-0003527911 00000 n 
-0003528114 00000 n 
-0003528317 00000 n 
-0003528520 00000 n 
-0003528723 00000 n 
-0003528916 00000 n 
-0003529160 00000 n 
-0003529411 00000 n 
-0003529662 00000 n 
-0003529913 00000 n 
-0003530164 00000 n 
-0003530419 00000 n 
-0003530676 00000 n 
-0003530922 00000 n 
-0003531165 00000 n 
-0003531408 00000 n 
-0003531651 00000 n 
-0003531894 00000 n 
-0003532137 00000 n 
-0003532380 00000 n 
-0003532623 00000 n 
-0003532866 00000 n 
-0003533109 00000 n 
-0003533352 00000 n 
-0003533595 00000 n 
-0003533859 00000 n 
-0003534141 00000 n 
-0003534432 00000 n 
-0003534724 00000 n 
-0003535014 00000 n 
-0003535297 00000 n 
-0003535580 00000 n 
-0003535863 00000 n 
-0003536146 00000 n 
-0003536429 00000 n 
-0003536639 00000 n 
-0003536835 00000 n 
-0003537028 00000 n 
-0003537218 00000 n 
-0003537331 00000 n 
-0003537449 00000 n 
-0003537567 00000 n 
-0003537684 00000 n 
-0003537802 00000 n 
-0003537920 00000 n 
-0003538038 00000 n 
-0003538155 00000 n 
-0003538273 00000 n 
-0003538391 00000 n 
-0003538509 00000 n 
-0003538626 00000 n 
-0003538744 00000 n 
-0003538862 00000 n 
-0003538980 00000 n 
-0003539096 00000 n 
-0003539213 00000 n 
-0003539331 00000 n 
-0003539449 00000 n 
-0003539566 00000 n 
-0003539688 00000 n 
-0003539819 00000 n 
-0003539945 00000 n 
-0003540067 00000 n 
-0003540193 00000 n 
-0003540323 00000 n 
-0003540452 00000 n 
-0003540579 00000 n 
-0003540702 00000 n 
-0003540823 00000 n 
-0003540944 00000 n 
-0003541065 00000 n 
-0003541186 00000 n 
-0003541307 00000 n 
-0003541428 00000 n 
-0003541555 00000 n 
-0003541689 00000 n 
-0003541824 00000 n 
-0003541959 00000 n 
-0003542094 00000 n 
-0003542228 00000 n 
-0003542363 00000 n 
-0003542497 00000 n 
-0003542630 00000 n 
-0003542764 00000 n 
-0003542897 00000 n 
-0003543032 00000 n 
-0003543167 00000 n 
-0003543302 00000 n 
-0003543437 00000 n 
-0003543572 00000 n 
-0003543707 00000 n 
-0003543840 00000 n 
-0003543974 00000 n 
-0003544109 00000 n 
-0003544243 00000 n 
-0003544377 00000 n 
-0003544512 00000 n 
-0003544647 00000 n 
-0003544782 00000 n 
-0003544917 00000 n 
-0003545050 00000 n 
-0003545184 00000 n 
-0003545317 00000 n 
-0003545449 00000 n 
-0003545574 00000 n 
-0003545692 00000 n 
-0003545811 00000 n 
-0003545930 00000 n 
-0003546049 00000 n 
-0003546167 00000 n 
-0003546286 00000 n 
-0003546405 00000 n 
-0003546524 00000 n 
-0003546642 00000 n 
-0003546761 00000 n 
-0003546880 00000 n 
-0003546999 00000 n 
-0003547118 00000 n 
-0003547237 00000 n 
-0003547354 00000 n 
-0003547473 00000 n 
-0003547588 00000 n 
-0003547709 00000 n 
-0003547835 00000 n 
-0003547960 00000 n 
-0003548086 00000 n 
-0003548212 00000 n 
-0003548343 00000 n 
-0003548479 00000 n 
-0003548614 00000 n 
-0003548755 00000 n 
-0003548901 00000 n 
-0003549013 00000 n 
-0003549127 00000 n 
-0003549245 00000 n 
-0003549364 00000 n 
-0003549488 00000 n 
-0003549615 00000 n 
-0003549748 00000 n 
-0003549888 00000 n 
-0003550029 00000 n 
-0003550170 00000 n 
-0003550311 00000 n 
-0003550444 00000 n 
-0003550568 00000 n 
-0003550693 00000 n 
-0003550820 00000 n 
-0003550957 00000 n 
-0003551068 00000 n 
-0003551195 00000 n 
-0003551327 00000 n 
-0003551430 00000 n 
-0003551518 00000 n 
-0003551560 00000 n 
-0003551840 00000 n 
+0003258887 00000 n 
+0003259296 00000 n 
+0003272561 00000 n 
+0003273066 00000 n 
+0003276204 00000 n 
+0003276460 00000 n 
+0003278984 00000 n 
+0003279301 00000 n 
+0003296962 00000 n 
+0003297483 00000 n 
+0003299247 00000 n 
+0003299470 00000 n 
+0003301217 00000 n 
+0003301440 00000 n 
+0003304967 00000 n 
+0003305206 00000 n 
+0003321813 00000 n 
+0003322460 00000 n 
+0003334458 00000 n 
+0003334910 00000 n 
+0003336763 00000 n 
+0003336993 00000 n 
+0003364834 00000 n 
+0003364960 00000 n 
+0003365086 00000 n 
+0003365212 00000 n 
+0003365338 00000 n 
+0003365464 00000 n 
+0003365590 00000 n 
+0003365716 00000 n 
+0003365842 00000 n 
+0003365968 00000 n 
+0003366094 00000 n 
+0003366220 00000 n 
+0003366346 00000 n 
+0003366472 00000 n 
+0003366598 00000 n 
+0003366724 00000 n 
+0003366850 00000 n 
+0003366976 00000 n 
+0003367093 00000 n 
+0003367220 00000 n 
+0003367347 00000 n 
+0003367474 00000 n 
+0003367557 00000 n 
+0003394451 00000 n 
+0003394600 00000 n 
+0003394739 00000 n 
+0003394940 00000 n 
+0003395120 00000 n 
+0003395305 00000 n 
+0003395489 00000 n 
+0003395674 00000 n 
+0003395858 00000 n 
+0003396043 00000 n 
+0003396226 00000 n 
+0003396409 00000 n 
+0003396594 00000 n 
+0003396778 00000 n 
+0003396963 00000 n 
+0003397147 00000 n 
+0003397332 00000 n 
+0003397516 00000 n 
+0003397701 00000 n 
+0003397885 00000 n 
+0003398070 00000 n 
+0003398253 00000 n 
+0003398434 00000 n 
+0003398617 00000 n 
+0003398800 00000 n 
+0003398985 00000 n 
+0003399169 00000 n 
+0003399354 00000 n 
+0003399538 00000 n 
+0003399723 00000 n 
+0003399907 00000 n 
+0003400092 00000 n 
+0003400276 00000 n 
+0003400461 00000 n 
+0003400644 00000 n 
+0003400827 00000 n 
+0003401012 00000 n 
+0003401196 00000 n 
+0003401381 00000 n 
+0003401565 00000 n 
+0003401750 00000 n 
+0003401932 00000 n 
+0003402117 00000 n 
+0003402301 00000 n 
+0003402486 00000 n 
+0003402670 00000 n 
+0003402855 00000 n 
+0003403038 00000 n 
+0003403221 00000 n 
+0003403406 00000 n 
+0003403590 00000 n 
+0003403775 00000 n 
+0003403959 00000 n 
+0003404144 00000 n 
+0003404328 00000 n 
+0003404513 00000 n 
+0003404697 00000 n 
+0003404882 00000 n 
+0003405065 00000 n 
+0003405246 00000 n 
+0003405429 00000 n 
+0003405612 00000 n 
+0003405797 00000 n 
+0003405981 00000 n 
+0003406166 00000 n 
+0003406350 00000 n 
+0003406535 00000 n 
+0003406719 00000 n 
+0003406904 00000 n 
+0003407088 00000 n 
+0003407273 00000 n 
+0003407456 00000 n 
+0003407639 00000 n 
+0003407824 00000 n 
+0003408008 00000 n 
+0003408193 00000 n 
+0003408377 00000 n 
+0003408562 00000 n 
+0003408744 00000 n 
+0003408929 00000 n 
+0003409113 00000 n 
+0003409298 00000 n 
+0003409482 00000 n 
+0003409667 00000 n 
+0003409850 00000 n 
+0003410033 00000 n 
+0003410218 00000 n 
+0003410402 00000 n 
+0003410587 00000 n 
+0003410771 00000 n 
+0003410956 00000 n 
+0003411140 00000 n 
+0003411325 00000 n 
+0003411509 00000 n 
+0003411694 00000 n 
+0003411877 00000 n 
+0003412058 00000 n 
+0003412241 00000 n 
+0003412424 00000 n 
+0003412609 00000 n 
+0003412793 00000 n 
+0003412978 00000 n 
+0003413162 00000 n 
+0003413347 00000 n 
+0003413531 00000 n 
+0003413716 00000 n 
+0003413900 00000 n 
+0003414085 00000 n 
+0003414268 00000 n 
+0003414451 00000 n 
+0003414636 00000 n 
+0003414820 00000 n 
+0003415005 00000 n 
+0003415189 00000 n 
+0003415374 00000 n 
+0003415556 00000 n 
+0003415741 00000 n 
+0003415925 00000 n 
+0003416104 00000 n 
+0003416280 00000 n 
+0003416457 00000 n 
+0003416633 00000 n 
+0003416810 00000 n 
+0003416998 00000 n 
+0003417186 00000 n 
+0003417382 00000 n 
+0003417579 00000 n 
+0003417786 00000 n 
+0003417990 00000 n 
+0003418192 00000 n 
+0003418394 00000 n 
+0003418598 00000 n 
+0003418821 00000 n 
+0003419053 00000 n 
+0003419281 00000 n 
+0003419503 00000 n 
+0003419705 00000 n 
+0003419881 00000 n 
+0003420084 00000 n 
+0003420301 00000 n 
+0003420500 00000 n 
+0003420698 00000 n 
+0003420893 00000 n 
+0003421087 00000 n 
+0003421281 00000 n 
+0003421468 00000 n 
+0003421668 00000 n 
+0003421861 00000 n 
+0003422076 00000 n 
+0003422314 00000 n 
+0003422553 00000 n 
+0003422786 00000 n 
+0003423019 00000 n 
+0003423252 00000 n 
+0003423485 00000 n 
+0003423710 00000 n 
+0003423939 00000 n 
+0003424164 00000 n 
+0003424394 00000 n 
+0003424624 00000 n 
+0003424849 00000 n 
+0003425074 00000 n 
+0003425299 00000 n 
+0003425524 00000 n 
+0003425754 00000 n 
+0003425979 00000 n 
+0003426204 00000 n 
+0003426419 00000 n 
+0003426632 00000 n 
+0003426841 00000 n 
+0003427050 00000 n 
+0003427251 00000 n 
+0003427452 00000 n 
+0003427653 00000 n 
+0003427834 00000 n 
+0003428019 00000 n 
+0003428204 00000 n 
+0003428389 00000 n 
+0003428574 00000 n 
+0003428759 00000 n 
+0003428944 00000 n 
+0003429129 00000 n 
+0003429314 00000 n 
+0003429499 00000 n 
+0003429684 00000 n 
+0003429869 00000 n 
+0003430054 00000 n 
+0003430239 00000 n 
+0003430424 00000 n 
+0003430609 00000 n 
+0003430794 00000 n 
+0003430979 00000 n 
+0003431164 00000 n 
+0003431349 00000 n 
+0003431534 00000 n 
+0003431719 00000 n 
+0003431904 00000 n 
+0003432089 00000 n 
+0003432274 00000 n 
+0003432459 00000 n 
+0003432644 00000 n 
+0003432829 00000 n 
+0003433014 00000 n 
+0003433199 00000 n 
+0003433384 00000 n 
+0003433569 00000 n 
+0003433754 00000 n 
+0003433939 00000 n 
+0003434124 00000 n 
+0003434309 00000 n 
+0003434494 00000 n 
+0003434679 00000 n 
+0003434865 00000 n 
+0003435061 00000 n 
+0003435263 00000 n 
+0003435514 00000 n 
+0003435761 00000 n 
+0003436008 00000 n 
+0003436257 00000 n 
+0003436506 00000 n 
+0003436755 00000 n 
+0003437003 00000 n 
+0003437252 00000 n 
+0003437500 00000 n 
+0003437749 00000 n 
+0003437992 00000 n 
+0003438237 00000 n 
+0003438486 00000 n 
+0003438734 00000 n 
+0003438979 00000 n 
+0003439222 00000 n 
+0003439471 00000 n 
+0003439719 00000 n 
+0003439968 00000 n 
+0003440216 00000 n 
+0003440459 00000 n 
+0003440700 00000 n 
+0003440941 00000 n 
+0003441182 00000 n 
+0003441427 00000 n 
+0003441676 00000 n 
+0003441924 00000 n 
+0003442170 00000 n 
+0003442411 00000 n 
+0003442660 00000 n 
+0003442905 00000 n 
+0003443146 00000 n 
+0003443395 00000 n 
+0003443643 00000 n 
+0003443892 00000 n 
+0003444140 00000 n 
+0003444384 00000 n 
+0003444629 00000 n 
+0003444878 00000 n 
+0003445126 00000 n 
+0003445375 00000 n 
+0003445620 00000 n 
+0003445859 00000 n 
+0003446100 00000 n 
+0003446340 00000 n 
+0003446581 00000 n 
+0003446821 00000 n 
+0003447054 00000 n 
+0003447301 00000 n 
+0003447548 00000 n 
+0003447794 00000 n 
+0003448035 00000 n 
+0003448284 00000 n 
+0003448532 00000 n 
+0003448781 00000 n 
+0003449024 00000 n 
+0003449269 00000 n 
+0003449518 00000 n 
+0003449766 00000 n 
+0003450015 00000 n 
+0003450262 00000 n 
+0003450509 00000 n 
+0003450753 00000 n 
+0003450999 00000 n 
+0003451248 00000 n 
+0003451495 00000 n 
+0003451738 00000 n 
+0003451983 00000 n 
+0003452232 00000 n 
+0003452480 00000 n 
+0003452725 00000 n 
+0003452968 00000 n 
+0003453217 00000 n 
+0003453465 00000 n 
+0003453714 00000 n 
+0003453962 00000 n 
+0003454211 00000 n 
+0003454456 00000 n 
+0003454700 00000 n 
+0003454949 00000 n 
+0003455197 00000 n 
+0003455446 00000 n 
+0003455694 00000 n 
+0003455938 00000 n 
+0003456183 00000 n 
+0003456432 00000 n 
+0003456680 00000 n 
+0003456929 00000 n 
+0003457176 00000 n 
+0003457423 00000 n 
+0003457668 00000 n 
+0003457913 00000 n 
+0003458162 00000 n 
+0003458410 00000 n 
+0003458659 00000 n 
+0003458906 00000 n 
+0003459152 00000 n 
+0003459395 00000 n 
+0003459644 00000 n 
+0003459892 00000 n 
+0003460141 00000 n 
+0003460389 00000 n 
+0003460636 00000 n 
+0003460875 00000 n 
+0003461116 00000 n 
+0003461356 00000 n 
+0003461597 00000 n 
+0003461837 00000 n 
+0003462072 00000 n 
+0003462316 00000 n 
+0003462565 00000 n 
+0003462812 00000 n 
+0003463059 00000 n 
+0003463308 00000 n 
+0003463551 00000 n 
+0003463797 00000 n 
+0003464043 00000 n 
+0003464284 00000 n 
+0003464531 00000 n 
+0003464775 00000 n 
+0003465018 00000 n 
+0003465263 00000 n 
+0003465504 00000 n 
+0003465753 00000 n 
+0003466001 00000 n 
+0003466250 00000 n 
+0003466498 00000 n 
+0003466747 00000 n 
+0003466993 00000 n 
+0003467236 00000 n 
+0003467485 00000 n 
+0003467733 00000 n 
+0003467982 00000 n 
+0003468230 00000 n 
+0003468475 00000 n 
+0003468719 00000 n 
+0003468968 00000 n 
+0003469216 00000 n 
+0003469465 00000 n 
+0003469713 00000 n 
+0003469960 00000 n 
+0003470201 00000 n 
+0003470450 00000 n 
+0003470698 00000 n 
+0003470947 00000 n 
+0003471195 00000 n 
+0003471439 00000 n 
+0003471684 00000 n 
+0003471933 00000 n 
+0003472181 00000 n 
+0003472430 00000 n 
+0003472677 00000 n 
+0003472918 00000 n 
+0003473165 00000 n 
+0003473412 00000 n 
+0003473661 00000 n 
+0003473909 00000 n 
+0003474153 00000 n 
+0003474393 00000 n 
+0003474634 00000 n 
+0003474874 00000 n 
+0003475107 00000 n 
+0003475351 00000 n 
+0003475600 00000 n 
+0003475843 00000 n 
+0003476086 00000 n 
+0003476335 00000 n 
+0003476578 00000 n 
+0003476818 00000 n 
+0003477059 00000 n 
+0003477299 00000 n 
+0003477532 00000 n 
+0003477770 00000 n 
+0003478011 00000 n 
+0003478250 00000 n 
+0003478487 00000 n 
+0003478718 00000 n 
+0003478940 00000 n 
+0003479122 00000 n 
+0003479307 00000 n 
+0003479491 00000 n 
+0003479676 00000 n 
+0003479859 00000 n 
+0003480042 00000 n 
+0003480227 00000 n 
+0003480411 00000 n 
+0003480596 00000 n 
+0003480780 00000 n 
+0003480965 00000 n 
+0003481149 00000 n 
+0003481334 00000 n 
+0003481518 00000 n 
+0003481703 00000 n 
+0003481886 00000 n 
+0003482069 00000 n 
+0003482254 00000 n 
+0003482435 00000 n 
+0003482620 00000 n 
+0003482804 00000 n 
+0003482989 00000 n 
+0003483173 00000 n 
+0003483358 00000 n 
+0003483542 00000 n 
+0003483727 00000 n 
+0003483911 00000 n 
+0003484096 00000 n 
+0003484279 00000 n 
+0003484462 00000 n 
+0003484647 00000 n 
+0003484831 00000 n 
+0003485016 00000 n 
+0003485200 00000 n 
+0003485385 00000 n 
+0003485569 00000 n 
+0003485754 00000 n 
+0003485936 00000 n 
+0003486121 00000 n 
+0003486305 00000 n 
+0003486490 00000 n 
+0003486673 00000 n 
+0003486856 00000 n 
+0003487041 00000 n 
+0003487225 00000 n 
+0003487410 00000 n 
+0003487594 00000 n 
+0003487779 00000 n 
+0003487963 00000 n 
+0003488148 00000 n 
+0003488332 00000 n 
+0003488517 00000 n 
+0003488700 00000 n 
+0003488883 00000 n 
+0003489068 00000 n 
+0003489249 00000 n 
+0003489434 00000 n 
+0003489618 00000 n 
+0003489803 00000 n 
+0003489987 00000 n 
+0003490172 00000 n 
+0003490356 00000 n 
+0003490541 00000 n 
+0003490725 00000 n 
+0003490910 00000 n 
+0003491093 00000 n 
+0003491276 00000 n 
+0003491461 00000 n 
+0003491645 00000 n 
+0003491830 00000 n 
+0003492014 00000 n 
+0003492199 00000 n 
+0003492383 00000 n 
+0003492568 00000 n 
+0003492750 00000 n 
+0003492935 00000 n 
+0003493119 00000 n 
+0003493304 00000 n 
+0003493487 00000 n 
+0003493670 00000 n 
+0003493855 00000 n 
+0003494039 00000 n 
+0003494224 00000 n 
+0003494408 00000 n 
+0003494593 00000 n 
+0003494777 00000 n 
+0003494962 00000 n 
+0003495146 00000 n 
+0003495331 00000 n 
+0003495514 00000 n 
+0003495697 00000 n 
+0003495882 00000 n 
+0003496057 00000 n 
+0003496232 00000 n 
+0003496409 00000 n 
+0003496585 00000 n 
+0003496762 00000 n 
+0003496938 00000 n 
+0003497115 00000 n 
+0003497296 00000 n 
+0003497477 00000 n 
+0003497662 00000 n 
+0003497855 00000 n 
+0003498048 00000 n 
+0003498246 00000 n 
+0003498430 00000 n 
+0003498614 00000 n 
+0003498813 00000 n 
+0003499021 00000 n 
+0003499271 00000 n 
+0003499522 00000 n 
+0003499761 00000 n 
+0003500003 00000 n 
+0003500198 00000 n 
+0003500381 00000 n 
+0003500584 00000 n 
+0003500788 00000 n 
+0003500995 00000 n 
+0003501204 00000 n 
+0003501412 00000 n 
+0003501620 00000 n 
+0003501829 00000 n 
+0003502038 00000 n 
+0003502247 00000 n 
+0003502449 00000 n 
+0003502658 00000 n 
+0003502869 00000 n 
+0003503080 00000 n 
+0003503293 00000 n 
+0003503510 00000 n 
+0003503718 00000 n 
+0003503921 00000 n 
+0003504124 00000 n 
+0003504327 00000 n 
+0003504530 00000 n 
+0003504733 00000 n 
+0003504926 00000 n 
+0003505170 00000 n 
+0003505421 00000 n 
+0003505672 00000 n 
+0003505923 00000 n 
+0003506174 00000 n 
+0003506429 00000 n 
+0003506686 00000 n 
+0003506932 00000 n 
+0003507175 00000 n 
+0003507418 00000 n 
+0003507661 00000 n 
+0003507904 00000 n 
+0003508147 00000 n 
+0003508390 00000 n 
+0003508633 00000 n 
+0003508876 00000 n 
+0003509119 00000 n 
+0003509362 00000 n 
+0003509605 00000 n 
+0003509869 00000 n 
+0003510151 00000 n 
+0003510442 00000 n 
+0003510734 00000 n 
+0003511024 00000 n 
+0003511307 00000 n 
+0003511590 00000 n 
+0003511873 00000 n 
+0003512156 00000 n 
+0003512439 00000 n 
+0003512649 00000 n 
+0003512845 00000 n 
+0003513038 00000 n 
+0003513228 00000 n 
+0003513341 00000 n 
+0003513459 00000 n 
+0003513577 00000 n 
+0003513694 00000 n 
+0003513812 00000 n 
+0003513930 00000 n 
+0003514048 00000 n 
+0003514165 00000 n 
+0003514283 00000 n 
+0003514401 00000 n 
+0003514519 00000 n 
+0003514636 00000 n 
+0003514754 00000 n 
+0003514872 00000 n 
+0003514990 00000 n 
+0003515106 00000 n 
+0003515223 00000 n 
+0003515341 00000 n 
+0003515459 00000 n 
+0003515576 00000 n 
+0003515697 00000 n 
+0003515827 00000 n 
+0003515952 00000 n 
+0003516073 00000 n 
+0003516198 00000 n 
+0003516327 00000 n 
+0003516455 00000 n 
+0003516581 00000 n 
+0003516702 00000 n 
+0003516820 00000 n 
+0003516938 00000 n 
+0003517056 00000 n 
+0003517174 00000 n 
+0003517292 00000 n 
+0003517410 00000 n 
+0003517535 00000 n 
+0003517668 00000 n 
+0003517802 00000 n 
+0003517936 00000 n 
+0003518070 00000 n 
+0003518203 00000 n 
+0003518337 00000 n 
+0003518470 00000 n 
+0003518602 00000 n 
+0003518735 00000 n 
+0003518867 00000 n 
+0003519001 00000 n 
+0003519135 00000 n 
+0003519269 00000 n 
+0003519403 00000 n 
+0003519537 00000 n 
+0003519672 00000 n 
+0003519805 00000 n 
+0003519939 00000 n 
+0003520074 00000 n 
+0003520208 00000 n 
+0003520342 00000 n 
+0003520477 00000 n 
+0003520612 00000 n 
+0003520747 00000 n 
+0003520882 00000 n 
+0003521015 00000 n 
+0003521149 00000 n 
+0003521282 00000 n 
+0003521414 00000 n 
+0003521539 00000 n 
+0003521657 00000 n 
+0003521776 00000 n 
+0003521895 00000 n 
+0003522014 00000 n 
+0003522132 00000 n 
+0003522251 00000 n 
+0003522370 00000 n 
+0003522489 00000 n 
+0003522607 00000 n 
+0003522726 00000 n 
+0003522845 00000 n 
+0003522964 00000 n 
+0003523083 00000 n 
+0003523202 00000 n 
+0003523319 00000 n 
+0003523438 00000 n 
+0003523553 00000 n 
+0003523674 00000 n 
+0003523800 00000 n 
+0003523925 00000 n 
+0003524051 00000 n 
+0003524177 00000 n 
+0003524308 00000 n 
+0003524444 00000 n 
+0003524579 00000 n 
+0003524720 00000 n 
+0003524866 00000 n 
+0003524978 00000 n 
+0003525092 00000 n 
+0003525210 00000 n 
+0003525329 00000 n 
+0003525449 00000 n 
+0003525569 00000 n 
+0003525695 00000 n 
+0003525829 00000 n 
+0003525964 00000 n 
+0003526102 00000 n 
+0003526243 00000 n 
+0003526376 00000 n 
+0003526500 00000 n 
+0003526625 00000 n 
+0003526752 00000 n 
+0003526889 00000 n 
+0003527000 00000 n 
+0003527127 00000 n 
+0003527259 00000 n 
+0003527362 00000 n 
+0003527450 00000 n 
+0003527492 00000 n 
+0003527772 00000 n 
 trailer
-<< /Size 10097
-/Root 10095 0 R
-/Info 10096 0 R
-/ID [<3AA8F575C8951BE0EDED3158469562DB> <3AA8F575C8951BE0EDED3158469562DB>] >>
+<< /Size 10066
+/Root 10064 0 R
+/Info 10065 0 R
+/ID [<63E92FE1D6F75D7ED1ED730FD2B719C7> <63E92FE1D6F75D7ED1ED730FD2B719C7>] >>
 startxref
-3552173
+3528105
 %%EOF

Modified: branches/samba/upstream/docs/Samba3-Developers-Guide.pdf
===================================================================
--- branches/samba/upstream/docs/Samba3-Developers-Guide.pdf	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/Samba3-Developers-Guide.pdf	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 (Attribution)
 endobj
 9 0 obj
-<< /S /GoTo /D (id2423066) >>
+<< /S /GoTo /D (id208944) >>
 endobj
 12 0 obj
 (Contents)
@@ -1144,7 +1144,7 @@
 << /S /GoTo /D (subsection.10.3.1) >>
 endobj
 768 0 obj
-(10.3.1 Upgrading from 2.2.* and 3.0alpha modules)
+(10.3.1 Upgrading from 2.2.* and 3.0aplha modules)
 endobj
 769 0 obj
 << /S /GoTo /D (section.10.4) >>
@@ -1318,14 +1318,13 @@
 << /S /GoTo /D [882 0 R  /Fit ] >>
 endobj
 884 0 obj <<
-/Length 180       
+/Length 184       
 /Filter /FlateDecode
 >>
 stream
-xÚ…±
-Â0†÷>ō	ؘKzI[Ô‚à¢ÁEÜ¥R[©Ôç7¡nNÿåî¾ïˆ„H¨3ù'+Ÿ-·ÊZ¡
-ðW at CÂj‚‚HhBð
-œÙ±ÜW%ϵ%¶o®‘…nxÆF,Æ×<¨§¶	üâwÑè Q¬ˆT2#”DÈI‹‚fß.t0FNv)-;q§¢­x_C{O. at -¤#ˆbš/=õafQ.fXIéÒþÏ7>û ~ <¼
+xÚ…?Â0Å÷~Š°g.é%騨…‚‹q¥¢V¿½)uspzïþ¼ßq
+Ž  Êԝ†l¼ÐÈ¡&. €,£33&
+lÅz²œNdn‹Y|IC"ž»[j$sƒêÙ6QîBˆˆ°dÖ=ÑZÔŠ gƒ¼:ž/ñžrÚŠöêÄFzh×Næ©êÚSÏ2XzHPy;„—{™ÞCZûÑ×(åûÄϏó} îv<ç
 endstream
 endobj
 882 0 obj <<
@@ -1388,15 +1387,15 @@
 /Filter /FlateDecode
 >>
 stream
-xœ+T0Ð3T0 A(œË¥d®^ÌU¨`l–Ó†zæÆ&æp¨ÎÉ“Kß9X?È݉K?¨ˆKßL:8+Xpé»é»åpé»ØØ襦d&—ä)šõäç”ææƒÕÙùE@¦—§‹BÅœ·—¹8\.²¼¯OZx(VPtQ«A½®ygŸcè‘zÓϺ¬¬T—Ïf``øÀ‘gx½’áOãÙ’IîÌ
-æ	Ù¸Ø¥Vœ[¤Èåê©ÈÈ Ùû>Ä
+xœ+T0Ð3T0 A(œË¥d®^ÌU¨`l–Ó†zæÆFFÚ¤ÌÉ“Kß9X?È݉K?¨†KßL:8+Xpé»é»åpé»ØØ襦d&—ä)šõäç”ææƒÕÙùE@¦—§‹BÅœ·—¹8\.²¼¯OZx(VPtQ«A½®ygŸcè‘zÓϺ¬¬T—Ïf``øÀ‘gx½’áOãÙ’IîÌ
+æ	Ù¸Ø¥Vœ[¤Èåê©ÈÈ «X>
 endstream
 endobj
 904 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110838)
-/ModDate (D:20080610110838)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090358-05'00')
+/ModDate (D:20080528090358-05'00')
 >>
 endobj
 905 0 obj
@@ -1406,7 +1405,7 @@
 >>
 endobj
 906 0 obj
-205
+206
 endobj
 890 0 obj <<
 /Type /Annot
@@ -3082,10 +3081,10 @@
 QµãRÙàP¥¬þc)¤tUeĉò?*šdC,©í.£$ʹVÎÍï.le¿ãèÕ,bÂ[>|×9½úËtF{£Ùÿ\­®ÀEÌÞñ¾¨¢¦÷œÁÁ8“—HFI,SJBéâh¬Ò<~ƒ¬WiN˜Ÿ‡jò]Ó˜•˜¤ÈDÝš
 î>°Ù`
 ü¼qk™€LþN##‡äoq˜ª¶·/,EæñÀ<yü84ÅÚ:é²T8ðm’ÔÚbŒ›9driKrL"ßØŒ˜]̨=¬Ö¹u,F…šz-Ý©ôPλ¨Ÿ-åáÁjÈ|zD,\äuvÓ·a2ÓêYÀÙñ/«Xª%Œ	aKzTPFhÎ0ZÎã?kŸ°Šœ“EÏq^Tî2¹† ˆÁCyÄO£|®ReÐW½¿¶3\\o¦yÈy¥ùeÙ	@À•wPî’í28‹ÐÏT Ùi²¢M²º_>gálÝ©†Z‰½îDÛè¯5H±p¡‰#rÆÆÔ´Ùõ;¨Ì~géB߀wœ¿4èZ
-ÔAá|ùÞq×ßB›Ì˚̤‹Êé~Z´	a”ÀKØIöb†PY,çÑ"J”@m’É]ßƪ%ìß
+ÔAárþÞq×ßB›Ì˚̤‹Êé~Z´	a”ÀKØIöb†PY,çÑ"J”@m’É]ßƪ%ìß
 ü‰|Z%¥üŒtÅüs¸ýfÍ!ÓÀu£™”°nïbaä¹ö9°Â×=à¡7UøÉUÕl×gÎùÑ-_¡	ûXì)¦ðÜ“;/Œ›«ý(z‹§u+ÔOà
 Ûï¹Ê÷1\µtõÌ•F v‘aS!¿Rym“é“öÝÃKj_¶%*¤‚ñŽ6•ñfŽQœTyΫeÚŠKÙ­Tl­Hzìp¼m3Ñ&¼„í€{µÕZÜ®âì—Yí—j?);áæž"x×,᛹zC±‡]åIš1Ôð­“CùáË0¹35‹©k†ht÷ó@'Mô¯Ïú:Ô†~ Ã|èOw~´ßØ#81ãÓ;{ÒëÕæ`¥•"Ãxž*—éó
-ycÛN0ViÛÈtúˆpðm²Ú¨ï_÷ýn¹¢ïժΨÿqWºv?ºPënîªÙ~§&þO†7þž	<ørz¥ÍV­z˜¬nÓ¦m¹€8€1Œ¹€6ÇÜUª{ô2Ì4@Ý$ÆU@”|šýúÛ’ÁÙö`¤5hëé1ׇÇe˜ç¯³ú‰ÙÜœÅ%R}nï¦ëÿÁ¤ó?äp–r
+ycÛN0ViÛÈtúˆpðm²Ú¨ï_÷ýn¹¢ïժΨÿqWºv?ºPënîªÙ~§&þO†7þž	<ørz¥ÍV­z˜¬nÓ¦m¹€8€1Œ¹€6ÇÜUª{ô2Ì4@Ý$ÆU@”|šýúÛ’ÁÙö`¤5hëé1ׇÇe˜ç¯³ú‰ÙÜœÅ%R}nï¦ëÿÁ¤ó?ät–r
 endstream
 endobj
 1197 0 obj <<
@@ -7493,15 +7492,14 @@
 >>
 stream
 xœ+T0Ð3T0 A(œË¥d®^ÌU¨`dn¬gjb‡±
-õ̍
-LÌ!´¡1D½…‚K>W  *
+õ̍Œ, ´9D½…‚K>W  ¬2
 endstream
 endobj
 1846 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110837)
-/ModDate (D:20080610110837)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090357-05'00')
+/ModDate (D:20080528090357-05'00')
 >>
 endobj
 1847 0 obj
@@ -7530,7 +7528,7 @@
 endstream
 endobj
 1849 0 obj
-61
+60
 endobj
 1845 0 obj <<
 /D [1843 0 R /XYZ 100.892 685.529 null]
@@ -8120,10 +8118,10 @@
 {i5öÓªì5nV§ùE…†R’
 Û*1Æ’
 —	|7":!foÐ+ÈÔÖWð9Áyþzõ¡Mf‹ð:ë`Dú·ùú¾H
-7ÅçôŸ~YÀG§£q± ‚S% ˜kÖ™€˜è†¢EI%“ì*5bùÓƒb|4ˆ|u?J
+7ÅçôŸ~YÀG§£q± ‚S% ˜kÖ™€˜è†¢EI%“ì*5bùÓƒb|´šD~?J
 ¤™¨ã…"£qi¨`Zþ¬
 zX”«õ`­!Ù›¡BŸXPù%ìmRB	'2MÑ/<nL:µ	¶dm¥$´QZGY«¤Ur¶`¯ª`‹èö¶
-\­ËÇñ:ÍýjÄš‡ü25Žªôÿ–]V±§ÎW£Áh"/O¡Kô2Ÿ§nŸÐiZ¥çåj0”>/ÊarY/™{ñ<ZÏ–t×>Ÿ>.ÆôV1hãC^°ÍÓŸ£‡U×Z)ÉA¯˜ŸÌ…¿¶V
+\­ËÇñ:ÍýjÄš‡ü25Žªôÿ–]V±§ÎW£öÁh"/O¡Kô2Ÿ§nŸÐiZ¥çåj0”>/ÊarY/™{ñ<ZÏ–t×>Ÿ>.ÆôV1hãC^°ÍÓŸ£‡U×Z)ÉA¯˜ŸÌ…¿¶V
 X”eUÍ„ãåbQŒ×)ã#©{ ‡„zÑClJ´õØØëtEš<¡}B’~0P"ˆ{$5À ÷0ÝPÒȪ(?ÍÆdniM=8~Ùë÷X%nú+ޝ͇)؍hïsÝlm?Õ„ÐŽF·M—ãf„{:Š¸¾ôú<3bOæ %’Ž90cg°k­˜¥`ïA­A=õd6
 ví¢Ÿ™kÄ—¢`ß®'zˆâðð& ëï[Zç§|èLr¨ª5s°ûY¼ä,ÓÎEYFµUÅÎ&7>.õÖMѼã¦ÔiǝOöƒ;m%¯nmØŸƒ „«9Rvnÿ*VsÚú¢ÔK$I£Çùº‹Á]bb¥Ïdp<+eÉf¥º7,§$÷êàFµA)¹ºLSÿ<[ß׋P=¤ËÿÝÓH9<™¸}-__Î=-‚Âzjâ„]TJ;`ƒe\™~`C`Šû6ì%m„Ü5["÷ùQçÓÖ"<{QE;Î8Wß°îÚk†ÀêÕ;¦¤>t¾½½øICjž¡Wk×ÛòrÁ|g3SJwofN2Ëíé½L2!EÓ…üÞwù½ôP„Ãïy`ÞŸI“¶ôQ”±Ÿð{Ι—¡PÅ58¶Pø½DÚcM?°’Òž½É˜<t×¼zǼ{¬n„ëÄê˜O¨:yýõªÉTÇ£ª¦÷˜Ñž¦8i™Gy$ìþ\ÆÅiŒK²”?Ió2O/¨œn£15óT?“UÈ–¥h£^Õ[Kë žkϏ8C Çé¼Õ"é„ð
 vÐ
@@ -8132,7 +8130,7 @@
 l°çP{/°FF*lÁ>ÿíææúùݏq,ÈHZ×æX}¼Ü‚sr~¹-9(K%j¤’ýoJT=,9P*9Ä!DÐôÐé#»GÞLi¨;7#áun¢¬Íi¥ÓG´Dò&U?¨J2lµÛG´Eê3o/°ÁÚ¨WuÕU¤cé+ÖCˆ˜1lI»;~¥føÁµ9¸ìÌø•Žé€©Sõߊ_‰@2Ü*ÉyßFí¶¤ÒýÀF¢–mØÃø¥“|ûh¼[Ï1áX='ÄÄâ$9ÇÇ“äLU*õ1_]Gpÿ
 Æ58i{A5Huå _7®Ñ8Ù*•‚:jÛ†5Ó¡AÊÅ^õÿûÙ	ò^~l:¹›ð[Ì¿@œùtIÅ_Ï7•{´Q}ÙY¬Ï'¢ Ï—ÊÙ>Qþ\”ëÔ˜.0f9Ÿ¤‡Mq_»s-œ
 ¤ƒu9Ý|éSJÄ%#Y¢Ùq¼Lª-Qjä	G^TTõò‡*$Û";6V·mëì0ì(Y´ûd€Z»˜ÒPÑÿ,¦ž98É2Þ5*v€*œ<}èTáäietýHöˆ“?^?æ	¼%È(Ü|ÃÌ•@î#û™9ÝcÄàáÌ«7ïj˗刂éËÀ«œvWÐzÜg•·.uéB™º°ÄŠîU‚ã½"ÝxFŸ§—zY·
-Kÿ=z	ûô*õøyV}¬ïsWE¯rjWOwï]7yATŸ1â5:7âêæ.	¦-`2«ŽÈØ~9¥ÈÍë—/Ó+ßù±¹¶.ê»ï«®ÁÛÙ—€Y–_¾g	º1r1™•ß;¬,F“öðñÈ sêá€ÆóeUìÛì,Í?Bê-ê£
+Kÿ=z	ûô*õøyV}¬ïsWE¯rjWOwï]7yATŸ1â5:7âêæ.	¦-`2«ŽÈØ~9¥ÈÍë—/Ó+ßù±¹¶.ê»ï«®ÁÛÙ—€Y–_¾g	º1r1™•ß;¬,F“öðñÈ sêá€ÆóeUìÛì,Í?Bê.¼£
 endstream
 endobj
 1924 0 obj <<
@@ -8343,11 +8341,20 @@
 /ProcSet [ /PDF /Text ]
 >> endobj
 1963 0 obj <<
-/Length 1332      
+/Length 1328      
 /Filter /FlateDecode
 >>
 stream
-xÚ­WmÛ6þž_aØàgE²ä·pms·ímëeÀ¶|±r1êØ™í܆ý÷‘¢ì؝o†}‰d‰¤ÈGä#†;·w.g/W³Å…JÁYÂᬶŽ‹¸pÂ8aA¢œUæ|tWóÏ«·‹ßwb–„¡BQ_ÅÌX2B¿^\Ï=(÷}#w³c¡›¹'”ÝW»ôÐê÷°†ÆfËÕì÷™ mîˆÁ±“ÒÙìg?s'ƒ½·g2‰{#¹wd³0ÀSçzöóŒc	üQ,IÈD:¡„5n.žÏ½ÀÜ[ÝÒ¤Ýišª¼4NšÕŠÆêhu~—¶V4KÛƒpù‘ã	Ékßš¯u{¬Kš{‚Æ|KcSíu»ËË[úܦy¡3cŽ“)¸²µ0«Þà”nëúýË5 ¾þáüêõ»åúr¹Z¿>_âߥeV賓§vÚ´õqcƒÖéþP赍ª9›òŒ‰ï:¿üˆq¸††Y5ÐNך1f½ç#x^/_þr‰^ò3ü}†ªkð”_ö7Í'!Uùì]÷¾ ?Oú4t½çjùÛjýêݏ×Ë¿á²mÝ,;ÙôDÄD쏡þÓ¤k—g‹ȤA’y"üTŽIæCSÁ6Rr>z±»šÇÒÌTÌÝ}úeîÇ®¦¯¼ÅQ¸:mi¥µr7ǼÈh*댤sá¦u;÷#×JïA¬Ùš;Yäî=žR«zr*Üc£·Ç¢?è¢p¨+4r—g¨wS•Ÿ¸P·G¸ç¼<#cñ`Aµ;yÙ´iQ°fGêp4yßc€êBAXZÄ]ß½Ï[«€%:Qƒ *e|0 ÷†¥„”[xõÅ®¶4šúljqã¡Ýãì`¼!UpÉðß×ü"Y(£Ž mM5dB#>Δ0†2;i† QÒù¡Ïd(aâµù´¿B·|	`£3U9'ˆZ\÷ÝfS燖dÒÍFÚfÒI)™²;ÖóV¯I÷7©× »mô”¯2X*¿ÓÂdÄsƤÐ&ß>’'mçê!…£”2,=º/´"ÃØ"F.x×t“Òºu‡dj—¨È}Ó’tZ4Ö …;}%!¼#Ñ)Z]¦7…ö2}§‹ê ì>,GI:¥û]¾A·l(’KópJ¡íaú((Šýˆ¼¦åÛü®Ï@UjŠ¶öUm3î+8­Kආõ¤†I I Ts¦$ž¸yC+íÎ$0¬<¢c>6iIûú¡ÕXg¸Ü<¼¶~ÿ‚Cõns[ÔS8E>ƒN “Æ*ž°éÃ4è… Âõ6/ž²©3ËÑA‰máÝVõºÃpPú#¦íùº“ØÖ’ð'éø•¹1ól¡Íoé àåꦅuxĦK*a<Lx~„m9/zôìóùïRn ¸®'…é½NlL€í”ͯXÒðaýh³µ¢©äâf¦µq›wÃææ”Oü¿;CàžÑ9ÿ¸B=*"rà*“@(BE…,Q1\uÀxÜ÷ªLK	¸ßkhˆ:®*èqN6Ø@ž5îIYž”™°êoÍ÷º4ô‚[À}€†ÏqruýÓ<ñÝóË«±=–›6¯Êæ	|è–cÛ¬œr¨ò¬Ã,Ö`:ï‚VsF¤È‡/ô‹'nû[HmÚ•QïY~ÕùmŠªÁGšßm›5µFëa‡ø|Ü.Ab4ãýSÕÛ¦Vj¢ëûƒz‹‰æêÿhÛúºîFøkñœDGZ
+xÚ­WmoÛ6þî_!Ø Í7½uÀ€$u²M¶ÕÞ0 )Ŧc¡²¤Ir^0ì¿ïŽ¤d)S†aØ“"ïŽwïž©sïPçrr¶œÌ.dì0Jb3g¹u˜ÏHH™D1ñcé,7΍˨œ~Y~œ]pîD$‰¢\F„3,i¡_/SOøÒ½*`¤î搩zê1É÷|—”ªpßkhl2_N~Ÿ0Цëë!œõ~ró…:ØûèP"âÈyÔ’{Gø	|<5s“Ÿ'´‹Ï±Äa~àFpT»9{;õ|î»÷ª1“f§Ì¤,Ò\;©W3»PVéCÒXÑMÒ$„㓐‡ŽÇñ­}k¾RÍ¡ÊÍÜcfL·f¬‹½jvi~o>·Iš©6G)¸ck¦W½Þ)íÖâêlˆ¯~8½~ÿi¾ºœ/WïO—§·Ô§»$ßdêä詝ÖMuXÛ ÕS²/3µ²QÕ'c^ƒ1ö]ë	…k`¸)FÚ©JB¬÷t ÏûùÙ/—è%=Áß7¨ºÏ@ùÑþ¦¾eBæoNÐuïûž úóªO}×[p®ç¿-WçŸ~\Ìÿ†Ë¶.ÛÙæhÓc!aBý§N×6ÏfI½$óXù)’ŒC›‚ad äÜx±»œFÂ̤»ûäë”G®2_icF•ÔÏfÖh¹È½;¤ÙÆ,‰ÊNʤjPÙŠîA¾lÁõÍ=¢Tqh
+܁\Øy¨ÕöeÝiK?ü²*ÐÊCºÑŠÌ]ù-eòþ ·œæ€¢Œ˜‹ ÷6R»“æu“d©wFnÁL®:PÉ)s3´ˆ»Ü}L«€:R½¨	J©}Ðw†…€¤›ñâ«]m̨«'ڍ'ð!Ùã¬ÔÞUpI³ßKv$aK¶¢êò æIA­4A€LÊñ€˜p 6nö—è 6:SäSB‹ëÜ­×UZ6F&Y¯UÙÔ£N
+Aí±ž‡°zu²¿K¼¸m­Æ|e¿BòVSÏ©
+0:‡ÖéöÙxÒ´®–	ܘ	IJÍуûB+"ˆ,âAè‚xMw‰Y·î™Já¥ú2t?4F:ÉjkÀ„;~%¼"á1Z•'w™ò6êAeE	Ü>,E‰[¥Ç]ºF·l(‚
+Ñ`J¦ í~úH(Š}	4^™åûô¡Ë@	eª«Ðlí‹Êf'„UåÀl5é(
+“€õ’@0êBé!H
+»6+ÍN'0¬<£m>ÖInöÕS£°Îp˜y<7Bxky÷~CõnS[Ôc8…œ@ÐJcØä0õ;!¨pµM³×,BêGDDbð@˜Ä¶ðn‹j aÕbØ+ýÏvl½Idk‰ñQ2>×7¦-´ù­9øCºªn`ž°ñ’Š	
+bÆ[γ=ûxþ»Ôƒ ®ëHaü@¯Ò`;fóKj>¬žm¶fD*y2ñ&øàÚ0õÃassÌ'úߝ1àž˜sþqÅ,t¨°Ð«Œ}&
+*2 ±Œàª}B£®S%XŠÁý. q0Ôq]@‡s´ÁÀò¬vO0Èêà¨L˜Uÿ€l¾W¹¦Ÿ Üîû4|Š“ëÅOÓ˜»§Ÿç×KsÆö¯›´ÈëW`àÐ+G¶U9ÕäP¤›k°Xé´
+ZöÌi‘,í¿hXÐï^¹ìBl!5ITf:ÏüE߷Ίiú°­W¦1Zõû÷Ãf	£îû§Î¶i¤Fz¾?Lo1ÒZýM[W×í,þˆåGŽ
 endstream
 endobj
 1962 0 obj <<
@@ -9479,7 +9486,7 @@
 [670.8 638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.5 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6 606.9 606.9 511.1]
 endobj
 2142 0 obj
-[272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2 380.8 544]
+[272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2 380.8 544 516.8 707.2 516.8 516.8]
 endobj
 2143 0 obj
 [562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.3 531.3 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.8 312.5 937.5 625 562.5 625 593.8 459.5 443.8 437.5 625 593.8 812.5 593.8 593.8]
@@ -10094,49 +10101,45 @@
 /FontFile 2160 0 R
 >> endobj
 2162 0 obj <<
-/Length1 1002
-/Length2 3541
+/Length1 1014
+/Length2 3862
 /Length3 0
-/Length 4196      
+/Length 4517      
 /Filter /FlateDecode
 >>
 stream
-xÚ­“y<Ôí×Ç#ÊNÊákMÄ̆‘}Ë6“ì[4ŒÆ³Xbt—­$dÏV–%ûmemµd—-IÈ){ž©žß]Ïýû÷y}ÿ¹>ç|®sÞ¯s¯´¸…•‚®Þ
-m„Ç‘ Šu@a	Q Š`6ii}EÂàq(Z€Àá@—ì(Lª¦Va“ôñ~ÁŒ—7	Õ?õä
-èú¢	w@ HÞh_z
-w°Â»cФ`E@‹,Ü –h"š€öPdƒ@ Œ;	pC{apl @&8O< ú+ìAöûO* M Ò¡ Y:ä)€ŽèÇaƒ´'‰§÷BÓIþ? þ]܈ŒÅ"Q¾?ÊÿÒ¥Q¾lðÿð¾~dš  ðhîßV;ô/6ÚCöýwÖ„„ÂbÜuq^X4 þ0AhÉÝðDa‰èŸq4Îãßô¹ýD ÙèÙY8šÉÿzÏŸ9G²öû§êóO
-ù­éÓ!`‚ '°"¡éßNþÕËçŽ÷Ààè¡P*˜¾t¥„@ ΠƒèÀ EžD¿ÐgB<ñ¶Ï©ª€L„~*5% dù[Á í?J™îtÇûú¢þ‰@èD ô?’Þôk¤¿
-* ó‡¤;|þj û‡„ ßß@¸?$½þ7Ý‹Çýî­L¯ìG_-¼Ç7èÀ„ßtôr¤@üiU Dþ]€ÎrMø•ÿï×ÔÓÃ…(@•% WSTUÀ”ÿãs'héçB_‰ÿhO}Ðè ´;ÛÛA¼û™Ÿ´Ú¨a†ùoJ˜åô¼þN at V5õ5²‡ßfÀ¾2󗛨´ß.Í8Ê5Ã<#¸+LŒi=ßi´rÕ?!}àûLÀÅ™ŒËTaûµDðG?‰ðnZmÿú¢
-ùމ×’
-Ú³??[ȵ5°ž=<&~ Ù) º93¦jo”µ‰Ž¬”Š[ò¤û?¸®=È“œÈ4ÞæÍR'?ºŠo ónç³ÜKúî¼þ©Wlj?k v×50ä=è‹õFÝŒ5–W‹ÍË¤Öïn?Êi¿ÖÊ$¤ãú5³’P0Ã:ÉāWï…B«³Ã¯õG¾¾g¨¤X9S”M;ŽthòFh™Š§×lÇq5ÈÅzû«¥o¡5¡sù÷z.Éž29GdõýzfÌ“¶™Zý.UBqEq¼e‰O7áÅKŽO‚7*Çï0;ß<’U–u‡/¦í½EçîiϥąêV¹’ñïÝÎæBû”FXôL)R3‡îæó…œnàÜ]
-Ûš¼…ÍyÁã^-¥"Ní³Röï zR…\ML¹ï+í¤›™?×ÞÏ¢õ¹0R߆¦ºf3X©Ú•ºfíµÁ›ÃäºžàœÕ¼¶Yf7°‘ImïvYºnGM¥d¦vv]7·ižDÁú)ðân1X&À4‰ñMPõ×)ØèøAžÃËyãÇË®·‡u¯˜ùOcSNSñ.6)é_tƒQˆG]HÙÏb¯pq#AÛ«÷¨GèYÓ«(\ÖõŒR}t,j¾œ!éÆ&‚/µ-]ô2x)Y±òH9çÓ¯
-ρõ©€Vh&¤vžV¤ÏåÃJS¥€Qyì¢ÔèÔº‹a‹
-˜dÃùbÏÖ¸ƒK”sZ£¯ŽËÈ}+ózÜý~©¿}DÔ¼3=†è¾Ñò·Ëc{p¹‰§<4øúªUP1='Т]¸XóK@¤±vTÏ:)躶¶Ù•€[÷KnÌ­º3fŒ›&²NÄœ“µólÂ;¸g&vt¾úšyB¾nàú+2‚×îéÆ%«tÄz’_RÉJðl¥¼sþÅë¨ñiã¡­9]îp^Œ<¶µm”gï2÷ אÆŒny¯h\ð‰ÚFc;Ñ]©CÕ¯ðyöïÕ	MRß^ÈÒÞpqaz.*¿™.¬\nßÍh(:àOvP(íå%½HÎ(ÓsBHˆÉMö£šŸEvìDÕÌ3êøªeáélHçRþh(gL6MªVíç@s|	?Ö{íçÛÐŒô
-ÿErÖ×ÿÌUg?םӭ§ Om쐖×jV÷i1ÖÉ|N2wîím xêÔÿZr,ƒš»¤']S(ñÄZ;᣽ýyÞUð™›`ú÷ŒË'Úœ[´ïºýÍÕd„üùÖ.+ qÖÕ}dd `š²_ÎÎIÛeÙ•*ÁY_æy¡sO Ç_Æ©ùt0iéüÎŒ±:.çèc”=1Ý
-½‘0:ÔR÷ô³æ׬§Ž1¥âUèã\mkO2 µ·Ï“V­ò»^ÀÚdÄ=é&!42 ˆ_Öi4J¡"æ©Yi[ɯ¤K‹Í:,i•¯%¸"TÅ&¦Rh¤ÝùÎãÈê꽪ÜY» 1üþ™J.Ù,
-ή=>¼Ï¡â¨ \Ižâ7༓¢3ƒ‰ÏpKIºý
-JÆÕ¼+h8ªÓ€!³]æÅށþ×Â9N¨²å›"«RÞ¡¶¯µBö=\vâ2¨Ù3zÓë0/òA˜¤ö÷ÄãugŽßxûLm1’£"Mr
-j’\v4¬Ø¡øYÚ¬d\xþ“r—Ûµ]Óh'Î&îRÜîë¡”âé`©ä&ù©OBDí]uš_ª§ŽE²¼8&Ýr7|y¢Ùuóúa…¾Ùma*¥r}lñQIÁþ*²îaœ91æU
-KT>’)ºrñ"sD·(Ac÷†ØËѯÃæÀ½Æ†
-Ú™œ¦.Þ_šhç…gF´a ¬p½+ŠV4’:kÀõagÆ:з䎮¤]]¦	lдÎ1I»èY4“2©½)l—ÂŸÓh2;[ÙPÒîZ¾IÈ0“P„=è}Óx’ölïí7á}±—)ï&>x¥®|²{‹i.1ŸŸsñXžyRéá•Æ«6eµØ·ñƹze¬ßׄ³@ËêF<êy8ØÕ‹U£«Ö½^
-~äŽ*@ÀÕ7<¡o>¾úÒb"„8+6h*™Ö<Z¹—â¿s=ÚG[)4¡«Ñ†:5è|ˆéÓ#9þ4ÑЭ².8‹_&S‰XlAÍL¥iÅpÕ»zš‡aPsI|DËË#'Êdl#ÈÙ<º=²ÚþPm£ÀÛ.$fa4dTÃ~jøùð|–캼/UÒƒÚ–;M46:2}8æ›—jš¡wháðh!ŒSÈ¥ôÞp3_c…€´õ×w}R¤ÑFĵ2ø	ÆÚÙÃ3£pMǾC²´˜÷m¿Ž<[‘4CÏ)cÁµSø&ÿ‘’ÀšzÃÉóÉ»}eY;»PÆ/‘­çï'-:½dÝËnGð_͐	˜Æ*c¶^an÷…~ÖgYᚐsÖÈœló=²º€/j¿~»7p¹-e«ŠÈ]þá»ö¦ëëRg´Ý-…ÅϾêÚ¥·ŽÄWSòâà‡|ųOG)7„R¥6§ÈÇ[ô0æ˽H?ÉŠ¬!2Ͼ¥!˜óžî–—˜ÌÜ“-Âm!ÞïûbÅlß\“œ	,<ÖÄ.´--¹àNù¯Ô6æ öAÑOM\rn
-îÓ¶óA$â;™†hßÞ7
-qš»°©óÍg›EË×rlßÖV*Q‡?•oý dÝŸAB.©…ÎqøŒù±ÉÆæÌ”ýµó"|œíýøŽ¬ˆ·åÚ;˜<SbiNwƒž±m²B¾–ÖqS-ðMŽt*OP…Ý·˜Óñ’oyòb™‹!_5™yÚ`ˆª&¡¸äÚvMJ£Hë”9_¡î#<—¹s«´^'‰×Y:Ê&zJ‡µ÷ʝV–;DK	Üê—Rãß.µ5ðÛÅé]H4æ¶â`ŠKÐ\·ñš•˜*‹i朖¡<Z‡©~'Kñ_•ëŽœ£ŒµU—†fX	/zrw0z?],–ΕxXÓÚZ¤w·‹	içziaÙŠgÎûàHU“ÕÝ¡>ëuL
-g¬9t¡¼²åƒn­RØçÁÉ+IlÕziܪN¹“ɯg;ÙFá¢jSiü|Ìáê‡òžÿ]Þ>j2ðN|Ä„S1KZd¾Š6(s“+1"¾sY#I${Eñ#ÞúC†ŒB¨†–Æ(!!PÀìußìèDRvÎ"ÄPõҜ𩀈f)¾&«a2×hQ5¬ø”m[
-h«‡ÛËŸUéðÔã'‘£¼Jä[Þ r=í'<‡¬÷ó.|P£¸=ÆÇĝi5ü^I>¸Ò‚³h==ÓÌoÇßÀÑjÅðÂhðõjÙÑ~ðҝôñµn!q¤…x”¥âti|Q¬i5÷i®¦¨ý˜jÃœjrAm˜Ò ´{]fQ³6ß@E¸öî
-Þ÷ځ[TuAºñ¤qÿþw—‘UÓíƒxEƇߪ#ò#º=[¾ÁŠm¯ÙUŽìTˆ&]Â툊ÈÎh/»%Èh¸	©í¤$œEA;†g#ÁãbØ^¼N·AB§pÿf¯¼ñý1á_γû½¼û\½ãð”äÛ·H{L옿ÌWâ>Ü”Ì"Z/¨ßG,H½ÒqƒPgz&ÍúГï“sß-ODî°ö?·Öå¥^}1<Ó\ÛdòX
-Æï¸e
-w(P˜ïk¬!V)¥Ž	q÷·$­{ø€üÅ'¹üB¬Ùò£ã²>ª3héâ:ƒ~¶ÍØÖÇé©Hß«ô%t_øp®°iU=iï÷¨ãŠ`þ­ó¯çžžcÖ”«¼±ö Ô‘ªU›ïέ³ý=ÞÙùóŽ×È Íò.IHíE3ÜJÎF+«2C‹•H“Qì;ê$¯£…tËy§7¿Ê1²Ö'1ôEuMy½c;8§³Ç OëLñM{‚¬Qµº
-¬då©ÞL´¶¾½jî’îÄEf­ßzx¸tOIï€-É>cèñ–íÊl_pÜé(ŨïøèY>ù»q
-‹YZëÅÛSéφØ:Ï4ïÞÌ
-?–9zòTôqMý;z±^¢
-ùù#åZáÂ28ò|{ÓGeG?×Ó`âޝ‘­Û±9eƒŠE`«]e®‚wϸ^³0ir\{’$|ixcÒ{3µuÆèC:*HÐðèÌœqµ|Ÿ€Í¼Ï³Ù ô›Ö8
-Þ¨¬1ökÖµì·÷Df"ô[N6‹‰É½:bš!ß6ÄèÂñ˜#)¡Jãx9é`òxØß)fÍŽ'X¶Ôm±³“éÄ•ãöñ#¹µõPý¥FÅÅÄÆYã9M}û4Ï«ØÔ£7üö¡‰Á9Ÿ=hëh0}ú–xí¶Ë?|;·B¾#\‹|¦z‰!væ\ŠÌ€Ò´Ø`âzÁó£ÍÐe{ÒÅ;ûz±ì‚ȱ’ϼ«ì³’Ü<…誢Í;˜p²('iÒ|¾ÒÞÐËñ`ERÓ¶3aþÙ‰¡šv߃Çú|ú£b–xÝ6«¶v°{ìÓÝ÷ÑKœ!qø“9(Ûטõ×ùiÐÄÍÉ´ÂA"Eí=¾~Fºªî&§ ïîÿ ¹‡'C
+xÚ­“y<Ô}×ÇQ¶ÉQQdg;…˜}ÉžhŒ†YÛØwƒÙšìK²$d-ûšì²%”-‘TÏtõÜW×sÝÿ>¯ùç÷9çó=çý:猰€Éui
+'¼#Ró’†‚ *@˜¡TA ÂÂ0î…Æã®Â½*@¨²2¨áí” ¡
+*²J*y€0†w÷# ]¼€b0ñ_&E I@#à8 !Üˉ¥Ö@À1Àëxéåj`0@³_/<fHO$Áé@¡@'4ÂèˆtFã à_@º8¨ø;ìäíþŸ”’àI…ŠQ!ŁTD'<ãtB¢ `#<µ’JòÿõïâÚÞŒû«ü¯!ýWŽEcüþ׀Ǻ{{!	@C¼’€û·Õ
+ù›Íé„öÆþ;«ëÇ 8gùB{j£‰H'´Âˆ‚c<‘Å‘8§CPçöXÏÊvÝFò÷>ÿÊ™ÀÑ8/s?÷¿«þ2ÿ¥¡4u:4x‚@ T#õ÷Ÿ¯›ÿꥅCàÐ8êAÈ+ áÜ@½ª’@hœ’D©À`ïE}¤Î$ˆÂ ¿Ö©(G…üú­`ÿ•’löG) Á–+ê.Áð¿•µ
+Åþ‰@©´`äß’Êþ=î?y ýIu¸þC*Á˜He ûGB!@0î’Úÿ†Zɝzfx§8¨€„?4Ôç^¾^@e¨üþ ööG~çÿ{³ššxb€´¬PZF
+TVR*ÊC‚þáM  q^ýi¨çñBS	‰$"€©q<âR¤ëýÚè’`­¼Wé%h5Ÿ'=kyq"bò-¦°WßCb®Êú°4‹m…~…ß÷ˆÏ3®1Ðt@{+Ì#‘<öcÅçÖJº?…Ïz'ÝÐoÙ]p?b½¡vtwCžÖøõ\_IŠM~ÇÃOë9&bWÍß3ÎдÞð©n͈TP´ÖNÇX¢ªDdÌ8È%1r¤Y_Ž”¤ã³CÁ®$¦:É7ÛøFoÎÃ<¦ìäv»«¯¯ÜàÉS¸‰›pÇb\à·ã¯IÊñÇçÝÍ Ô–e‚Õ_ÉÖŠ$’q£ª™Ép­:¡¤±Þ·¼ÕƒAá3£Q}Ù¾2 ª•¢‡ž3glZ¹Ó
+û ©ËY\ÑF½umé”lMà‡¼ìa71Ó	]cOfìÞ¥TÃAZ
+i>
+
+r€³L1%u9ñB³ý*ßÙôv·Of–g>àŽkk2p$…ÚLZ¯îg–xÌÿÖQ'GÖvDfºÄäõ±Ô"%ÙŸ„µ<Þ±>8„ƒV{‹KYðgå„ca•CñŸÌA6?À‡SK®½›„†_HJ-À
+nhüyr¬ÝM^vñÁ,w,Æ«Óv̝÷Ùs²Ø£ˆ»‰.)™ý~;åVcû”Ž!ûÍ›d+JZPFÚÀçظþíaÊóÊ™úE'°ûÑ°§Ÿˆ^2Ý+bõ:›øéxRÂ8ãÇÜÙ§gËc:‚‡¶ô=–NäRÏÏÈ»ôyÅÒñr¨ðʹ›|/ÜØOTw~Íuž%PG/ñz4.3fÅ-SO*Rˆ^«¤MŽ=0ä&3·“/øC6S at U'+Y›÷»€»‹>/e3 µk
+•D›+sƒbž{â…”Vw+x£¢µVŒzy÷Øf±Ú›Þ³"_òù+†š =°Ã“Èqžˆý¶çö֐J]m6VIY¿˜mÊ9Ëפƒ¯Xõ³OÔ5õèá]/bŒºº«~ˆÏ‚DZ¶té³zIÌsqÆbV¨\±
+"#© w/ãœdÝXL¯·!§Uó¾Ûu²án²{òã-?š‡2¹é<ßà,AÎ\פ®M|ý ÁÂNS†s¦ã°¬=f!÷þý°ÑŽisî奥(·û
+z˜ ÎØ}Ã2±pPMÏrJî
+tb‹f”¶™0Ь›ŒÑØ87P›k½X0Éb£Ÿ6^Þ¯R©mbl3f׈òŸ¯ÚÞvÐzg…Ü~XÁq}ä Ï«½ñNéaôþ´Œ“Sý~Å››û|²Wx—æ³)OIý/ú+.òOe•oê	Yàk	«†Í +"*\´wÃœ‰ tJ[ý¸±ÊÞÛI»}(Èx°·<˜Òü%çÓ ®9åúT»¼' §°•í4OâŠj„Í%K<Òb\q{ÿPõ?óYKÀÍ#0–ÒEK ×qßË“ô9Øk6;zF7A”±ì]:.—úú~êAiÒ½¥”É©ûEþ[ÄwƒìŠ¤I1±ìŽóžÙ9ú½gZé$%I`y™o'/šŽ„ðŸ
+CpšS\¾«}ï݃1Ž¿€ÈÎÐiVôŸ6Ûp—t(¶Q1ý°Êc-l>]T£*¤9¬zKÜÏ*ø¤„9û›òŒuTËbóíŸ×Љ—§%Œë”ȝd¢ƒE+6Ù"\ä
+;‹p«ªì)ôäÁ[¦2£t½¦‡BEÍ.m|j¼t/ñÈAÔÊŠõp¦úŒöt»ˆuÍAõ–bd@áH’Æa’V,w‹Ï»¹êŽð×)¡°¬{m¼<OÅ+“qç:ãßE0DßO-⨼ø´GþNýñ~Ë´åªb¯ç‘ͧÑsÊ´‚–ËíŠlˆ3‡ëàs7Ny
+V–¬§¹Aœ¹i~Ô*ËóÖsM´ÀÖ캦öé„åÙk1}S̵+±ÂƒO:eº÷¸šrØxCRTÂßšFXÿqb:E’F
+4!÷ú µ8u7.†pFFÅ¥¾+3Dík*dBUV»µ‡N¸7y¤ìõuDL†,U¾è·gå»lͨMdw°(sÇBBÄ®~¹n`Cù´q`T¢ÏàËÛ2‡*©œuÕ«á±9ðè÷2~§Â?»q¾ÀÎvü*]Ïž¼ß+þ%Ë«'WNó¬dX«–êatQú5‹¾J¼ÿbè°oZõ{G²jø¡UË‹®ÜÄŽÛѹǕÀyˆøŠ[E¦àiÛ=P´c9Ï=-}È·7è-æ6Ýxã¦Äšw8UØUú´$éu“®åX¶Z„iÏ·¦É.üKÖ[-’«ÜØùlÈ÷Cþú¢uEŽSëá…
+XÀ⏦î¶y»ÅpÕÍ@Q|–¡Ž‹Ý«ñGÒ€üW©éÛëvªlO˜Ö7eÛ <`\„jªUn.ñÓ#¼}» 怐‹ óÃtV»]OìòSdÚorËrT<~Kªt5ÇÂÌfjØ­Áÿ ìtBÀ2WŒ¶´FD»²¸§@S7CÁDÇÂÀÕ>—&¡“;`RØnHN¾ï³’Q=!a7UA@$ÁTX‰–̐¥çJü¢›”V0ç¡MñםLòu˶Vmv%‰¶¯g|KÛ­G&¨XZùŒ‹eYB˜Í»/ÓØ^dWgs]aèrÙVJ4‡vr¯,góyüùi”ñ•	z‡žV–]ŽÌõ»O¬XçéM»(Ùã¡%Í"¥¬€¨¤Ä„Ÿ “"1¨ê%õE1#W
+„Ž¡u] ¿ã{B©õ0„åãlc­5¹;§PUï*“…Œ 2^I”¬—kÔ#.ð­G“z÷`®¸¨ÝÀ‘m¦¢F¢™s^á ç“»M,L/ÊêDo?/‰kO§Á>ŸQ L¹«•ßÃÍ	¶šÖŸ££yùݟ˼z‘qyÜܝ5Î׌­•i_•{DŸã©¡çŒ†üYvd5£R™­sÐ"´Æ[1ð)?®!#CR]Œ¶®4Zãåôš¿Xš\²_¸fk§ñ•~SÌ‘ÿAÞƲ‰¼ å ó ÃrÅñÎëð#Ô°³šyÝM,<C»ùt|u_>±<ù܁ôƒf·Fðª7]aŽu¥þ馦1”ÊãýßîCrøl”èQäÑD²}úIbOÝ›ŠâÑžg>³|,^­èiº-(Ù¬ì‹/fïŸ÷—o{SÑK ¸Ò
+™¼$¦>Éq1Œ
+wœQ{8Pçéÿ¶<õXíN¿”JÍ £ÂUñã†}fÉšˆf3Q!ẽM@ÈjåTÛ„×ú§^0uo1…îܱK»ØRÔ)2!žÒ{õhŠ’òraZÜèaôõ‚rMî—­k@)‘sÞ1Á¥1MÃ:Ô|-[Yb‰”f±Ð“óM§(Z×lhÇÒ x¿Ýø”KÁHÃò]~í·¸ž®]}楣kðüŽnP¦çM¶Q†SŽ‘_PG™.]I¡»ùnYŠ,<¹xdŽNþ>’ÊÌ?â;3Ævt:/=ÁàÙGTÔX|ÃÏ‘ì3‘¾êlâ÷Y+û2À÷$ul'lF4MrnLÇé3¸/HÀ¾¿¾_½:pkâ¢ÝB/Ý>ÆMªž"žÝ€eàÍwJ½ž'¹&·Gœ}cÍX]æþZ”cEñì==Ÿd£UwõÔ«öSâÓ¼}nŽU\«=Ý‚iî$ kèîFÁ…=¢`i´!~I–‘Wµ¥ö­Ó;ÞCþÛnÈlé•Èá[ÞŽ6ÆDç}á’+¥I™µòÏ&§ª4ig—î<¶:ÑÜúµhh¸dèld};K^¼XfEÅÁº¥À²t£8X´-±Õó-9ÌR8,Ï÷'L§’Ýl#ðŒC@  Ü|èùã‰.üŽs-…°mBLj±®kAÿ¨ÅïúIY‡3™üF‚š€®EdfmR€6`íÓ«Kµ-uoÞÌ3;¿]e‘ÅIœ²vc¸ÐcØ>Ñ×û-¤–oUõÃå36ÈeK¥ò¹ˆY÷¯!‘/ß³§Ÿ'0bCRQ±V÷¹CöS–üb“òNË×÷î]ãj)—>&
+;‰®/ý6Á;öóÞÀæ¨0'M13éÈawÒ‚çCðý6Ž‹4i”ûÎT)×’ëXAC™GÛ÷¯+^¯}ø3žl¶´¢öHð;Z7¸G¯F‚T5Ç4èî¸ósÓ	µ¸sô#’Ì9»Žf}4;?áðb_#=nF‚ýèÖŠ«ÛoEêÀ›÷÷ªd5—¶ÃÇŠ‚”ÝôÛŸYx¿üqó…¡Z¦T@WnÊåô·¨ˆzFuðç$_‰þI]ÞmF¶.ì%ž4, (œ+*ÛºÁ¼}Ó	/mýÌ×H:VƆÊÕ*c™ÏÉÃ1H
+Ù÷.»þ°¥Èê/bZ #ãŸÖ7ä¿Ÿè/J볶öQïN‡Îéà7rÖ¸@¹zëÏw‡2¨_žÏ—:áed	*m®ˆ™§	ÛµÛU?w‹fY˜Ôqï'ž¡í‰îó`@ÇÁ}–ÜHçÆcLjÚhŸzB¾£ß9…Î%:C¶¼¯C)m:÷_ØÖÌ^B…çH­„ ,S¯ûÛlÙ¨ËDÕ¼fï°È˜ïÕãôÆÏÅc¡¾/6[ËÝèKLˆÛ*uˆ—ãEº¾EOÍÓ¬FÒË—GË坉g`{ÖôN핤gÌ^Ûaƒ*Œ‰ùM\w½òŽán|:3X"1”íýE!tëè½[+xåÀâ'z
+ÒŸ€	Üxd"¶=&Ü憒W«à?K`(ö”ÄÒŽ+s'²‚IiÝf&ݬRÈ59'ä <ÔŽ·et°âœì¨m~±qò앳wm+¯ü(û™¯@Rˆ{Ö£EcãB[³iÑ™Sq.…²F7GM-==´Ï¢±—ëÕ¼Þ"*}òK†ó^ÕfÃ,ÓŠ¤z[¬½2äÝS¥“)p]ˆÛË{•Œ—A—Æs¾xô$,»DicœaÉZ’¶UsÙ›ó®´†7Éibg£ˆÛ–!î
+ÅK2þ‰%^ôjǏÙÕd€/ß×"8NgŠógÈÌ oøBÁ}Æ”÷‰E£‹¤A¬íxÏÙçìy,¢åÓ"wŝ² ˆÇ<f}'/Gt_¼ákÕãvçFî©MêX±è©Ì5äðýùèÂp
 endstream
 endobj
 2163 0 obj <<
 /Type /FontDescriptor
-/FontName /UBWPZK+CMR12
+/FontName /JWNCSY+CMR12
 /Flags 4
 /FontBBox [-34 -251 988 750]
 /Ascent 694
@@ -10145,7 +10148,7 @@
 /ItalicAngle 0
 /StemV 65
 /XHeight 431
-/CharSet (/J/R/V/comma/e/eight/i/j/l/m/n/o/one/period/r/two/u/zero)
+/CharSet (/J/M/R/V/a/comma/e/eight/i/j/l/m/n/o/period/r/two/y/zero)
 /FontFile 2162 0 R
 >> endobj
 2164 0 obj <<
@@ -11081,10 +11084,10 @@
 888 0 obj <<
 /Type /Font
 /Subtype /Type1
-/BaseFont /UBWPZK+CMR12
+/BaseFont /JWNCSY+CMR12
 /FontDescriptor 2163 0 R
 /FirstChar 44
-/LastChar 117
+/LastChar 121
 /Widths 2142 0 R
 >> endobj
 1283 0 obj <<
@@ -13063,144 +13066,144 @@
 /Limits [(chapter.2) (chapter.7)]
 >> endobj
 2217 0 obj <<
-/Names [(chapter.8) 690 0 R (chapter.9) 722 0 R (contributing) 937 0 R (debug) 934 0 R (devprinting) 961 0 R (id2418515) 929 0 R]
-/Limits [(chapter.8) (id2418515)]
+/Names [(chapter.8) 690 0 R (chapter.9) 722 0 R (contributing) 937 0 R (debug) 934 0 R (devprinting) 961 0 R (id204795) 929 0 R]
+/Limits [(chapter.8) (id204795)]
 >> endobj
 2218 0 obj <<
-/Names [(id2423066) 10 0 R (id2423073) 1229 0 R (id2423089) 1610 0 R (id2423122) 1864 0 R (id2423150) 2057 0 R (id2423165) 2120 0 R]
-/Limits [(id2423066) (id2423165)]
+/Names [(id207339) 1238 0 R (id207368) 1243 0 R (id208944) 10 0 R (id208951) 1229 0 R (id249875) 1610 0 R (id249908) 1864 0 R]
+/Limits [(id207339) (id249908)]
 >> endobj
 2219 0 obj <<
-/Names [(id2452996) 1256 0 R (id2470131) 1304 0 R (id2471654) 1647 0 R (id2474612) 1967 0 R (id2474618) 1968 0 R (id2474639) 1974 0 R]
-/Limits [(id2452996) (id2474639)]
+/Names [(id249937) 2057 0 R (id249952) 2120 0 R (id251539) 1665 0 R (id251545) 1666 0 R (id251559) 1672 0 R (id251577) 1673 0 R]
+/Limits [(id249937) (id251577)]
 >> endobj
 2220 0 obj <<
-/Names [(id2475207) 2122 0 R (id2476194) 1237 0 R (id2476454) 1238 0 R (id2476707) 1611 0 R (id2478005) 1268 0 R (id2478547) 1232 0 R]
-/Limits [(id2475207) (id2478547)]
+/Names [(id252116) 1292 0 R (id252122) 1293 0 R (id252174) 1303 0 R (id252180) 1304 0 R (id252244) 1305 0 R (id252288) 2026 0 R]
+/Limits [(id252116) (id252288)]
 >> endobj
 2221 0 obj <<
-/Names [(id2478688) 1991 0 R (id2478734) 1996 0 R (id2478788) 2001 0 R (id2479503) 1827 0 R (id2479535) 1832 0 R (id2479560) 1833 0 R]
-/Limits [(id2478688) (id2479560)]
+/Names [(id253438) 1232 0 R (id254149) 1231 0 R (id255450) 1627 0 R (id255484) 1633 0 R (id255720) 1827 0 R (id256278) 2072 0 R]
+/Limits [(id253438) (id256278)]
 >> endobj
 2222 0 obj <<
-/Names [(id2479610) 1840 0 R (id2480830) 2016 0 R (id2480979) 2026 0 R (id2483219) 1979 0 R (id2484712) 2006 0 R (id2484771) 2011 0 R]
-/Limits [(id2479610) (id2484771)]
+/Names [(id256439) 1825 0 R (id256704) 2027 0 R (id259579) 2032 0 R (id261427) 2096 0 R (id261800) 1290 0 R (id261828) 1291 0 R]
+/Limits [(id256439) (id261828)]
 >> endobj
 2223 0 obj <<
-/Names [(id2484860) 1826 0 R (id2484878) 1865 0 R (id2485663) 1243 0 R (id2485716) 1248 0 R (id2485743) 1249 0 R (id2485765) 1250 0 R]
-/Limits [(id2484860) (id2485765)]
+/Names [(id263564) 1744 0 R (id264851) 1248 0 R (id264872) 1249 0 R (id264891) 1250 0 R (id267591) 1866 0 R (id268494) 1321 0 R]
+/Limits [(id263564) (id268494)]
 >> endobj
 2224 0 obj <<
-/Names [(id2486966) 1904 0 R (id2486973) 1905 0 R (id2487129) 1910 0 R (id2490624) 1638 0 R (id2490632) 1633 0 R (id2492515) 2071 0 R]
-/Limits [(id2486966) (id2492515)]
+/Names [(id268505) 1322 0 R (id268554) 1323 0 R (id268589) 1324 0 R (id268612) 1325 0 R (id268648) 1330 0 R (id268722) 1331 0 R]
+/Limits [(id268505) (id268722)]
 >> endobj
 2225 0 obj <<
-/Names [(id2493436) 2078 0 R (id2493858) 1290 0 R (id2493887) 1291 0 R (id2493921) 1292 0 R (id2493927) 1293 0 R (id2494386) 1876 0 R]
-/Limits [(id2493436) (id2494386)]
+/Names [(id268800) 1336 0 R (id268824) 1337 0 R (id268896) 1338 0 R (id268954) 1339 0 R (id269038) 1345 0 R (id269104) 1346 0 R]
+/Limits [(id268800) (id269104)]
 >> endobj
 2226 0 obj <<
-/Names [(id2495035) 1615 0 R (id2495315) 2027 0 R (id2495638) 1666 0 R (id2495656) 1672 0 R (id2495676) 1673 0 R (id2496516) 1656 0 R]
-/Limits [(id2495035) (id2496516)]
+/Names [(id269140) 1351 0 R (id269206) 1352 0 R (id269248) 1353 0 R (id269395) 1359 0 R (id269481) 1364 0 R (id269514) 1365 0 R]
+/Limits [(id269140) (id269514)]
 >> endobj
 2227 0 obj <<
-/Names [(id2496554) 1657 0 R (id2496643) 1665 0 R (id2497587) 1898 0 R (id2497786) 1927 0 R (id2497792) 1928 0 R (id2499078) 1710 0 R]
-/Limits [(id2496554) (id2499078)]
+/Names [(id269636) 1370 0 R (id269729) 1371 0 R (id270214) 1384 0 R (id270291) 1385 0 R (id270326) 1386 0 R (id270472) 1392 0 R]
+/Limits [(id269636) (id270472)]
 >> endobj
 2228 0 obj <<
-/Names [(id2499090) 1711 0 R (id2499103) 1712 0 R (id2499115) 1713 0 R (id2499128) 1714 0 R (id2499140) 1715 0 R (id2499153) 1716 0 R]
-/Limits [(id2499090) (id2499153)]
+/Names [(id270888) 1905 0 R (id271030) 1910 0 R (id271101) 2071 0 R (id271695) 2011 0 R (id273642) 1237 0 R (id274942) 1611 0 R]
+/Limits [(id270888) (id274942)]
 >> endobj
 2229 0 obj <<
-/Names [(id2499165) 1721 0 R (id2499178) 1722 0 R (id2499192) 1723 0 R (id2499219) 1724 0 R (id2500059) 1699 0 R (id2500070) 1700 0 R]
-/Limits [(id2499165) (id2500070)]
+/Names [(id275466) 1256 0 R (id276616) 2078 0 R (id276686) 1979 0 R (id277527) 1752 0 R (id278660) 1996 0 R (id278705) 2001 0 R]
+/Limits [(id275466) (id278705)]
 >> endobj
 2230 0 obj <<
-/Names [(id2500082) 1701 0 R (id2500093) 1702 0 R (id2500105) 1703 0 R (id2500118) 1704 0 R (id2502337) 1231 0 R (id2502524) 1336 0 R]
-/Limits [(id2500082) (id2502524)]
+/Names [(id279011) 1701 0 R (id279022) 1702 0 R (id279033) 1703 0 R (id279046) 1704 0 R (id279057) 1705 0 R (id279068) 1710 0 R]
+/Limits [(id279011) (id279068)]
 >> endobj
 2231 0 obj <<
-/Names [(id2502547) 1337 0 R (id2502622) 1338 0 R (id2502683) 1339 0 R (id2502769) 1345 0 R (id2503213) 1303 0 R (id2503263) 1825 0 R]
-/Limits [(id2502547) (id2503263)]
+/Names [(id279080) 1711 0 R (id279712) 1311 0 R (id279718) 1312 0 R (id279728) 1313 0 R (id279738) 1314 0 R (id279748) 1315 0 R]
+/Limits [(id279080) (id279748)]
 >> endobj
 2232 0 obj <<
-/Names [(id2504394) 1321 0 R (id2504406) 1322 0 R (id2504453) 1323 0 R (id2504489) 1324 0 R (id2504513) 1325 0 R (id2504550) 1330 0 R]
-/Limits [(id2504394) (id2504550)]
+/Names [(id279759) 1316 0 R (id279990) 1898 0 R (id280033) 1904 0 R (id280390) 1699 0 R (id280401) 1700 0 R (id280681) 1656 0 R]
+/Limits [(id279759) (id280681)]
 >> endobj
 2233 0 obj <<
-/Names [(id2504622) 1331 0 R (id2506691) 1305 0 R (id2506805) 1311 0 R (id2506811) 1312 0 R (id2506821) 1313 0 R (id2506831) 1314 0 R]
-/Limits [(id2504622) (id2506831)]
+/Names [(id280715) 1657 0 R (id282260) 1712 0 R (id282272) 1713 0 R (id282284) 1714 0 R (id282296) 1715 0 R (id282308) 1716 0 R]
+/Limits [(id280715) (id282308)]
 >> endobj
 2234 0 obj <<
-/Names [(id2506842) 1315 0 R (id2506853) 1316 0 R (id2507009) 2072 0 R (id2507572) 1881 0 R (id2508212) 2121 0 R (id2508955) 1679 0 R]
-/Limits [(id2506842) (id2508955)]
+/Names [(id282319) 1721 0 R (id282332) 1722 0 R (id282345) 1723 0 R (id282371) 1724 0 R (id282903) 1268 0 R (id285026) 2016 0 R]
+/Limits [(id282319) (id285026)]
 >> endobj
 2235 0 obj <<
-/Names [(id2508956) 1705 0 R (id2510489) 1866 0 R (id2510593) 1678 0 R (id2513367) 1620 0 R (id2513431) 1627 0 R (id2515467) 1744 0 R]
-/Limits [(id2508956) (id2515467)]
+/Names [(id285605) 1678 0 R (id285885) 1647 0 R (id286087) 1865 0 R (id286710) 1615 0 R (id286864) 1638 0 R (id287747) 1679 0 R]
+/Limits [(id285605) (id287747)]
 >> endobj
 2236 0 obj <<
-/Names [(id2515542) 1752 0 R (id2516427) 2095 0 R (id2516439) 2096 0 R (id2521716) 1346 0 R (id2521747) 1351 0 R (id2521812) 1352 0 R]
-/Limits [(id2515542) (id2521812)]
+/Names [(id289867) 1991 0 R (id290094) 1832 0 R (id290115) 1833 0 R (id290778) 1826 0 R (id291129) 2121 0 R (id291429) 1620 0 R]
+/Limits [(id289867) (id291429)]
 >> endobj
 2237 0 obj <<
-/Names [(id2521853) 1353 0 R (id2521982) 1359 0 R (id2522063) 1364 0 R (id2522093) 1365 0 R (id2522202) 1370 0 R (id2522290) 1371 0 R]
-/Limits [(id2521853) (id2522290)]
+/Names [(id291552) 1876 0 R (id292495) 2122 0 R (id294945) 1840 0 R (id295232) 1881 0 R (id295555) 2095 0 R (id298705) 2006 0 R]
+/Limits [(id291552) (id298705)]
 >> endobj
 2238 0 obj <<
-/Names [(id2522722) 1384 0 R (id2522797) 1385 0 R (id2522831) 1386 0 R (id2522959) 1392 0 R (id2523317) 1401 0 R (id2523327) 1402 0 R]
-/Limits [(id2522722) (id2523327)]
+/Names [(id298847) 1927 0 R (id298853) 1928 0 R (id299140) 1967 0 R (id299146) 1968 0 R (id299164) 1974 0 R (id299507) 1401 0 R]
+/Limits [(id298847) (id299507)]
 >> endobj
 2239 0 obj <<
-/Names [(id2523411) 1411 0 R (id2523560) 1412 0 R (id2523663) 1417 0 R (id2523683) 1418 0 R (id2523712) 1419 0 R (id2523821) 1425 0 R]
-/Limits [(id2523411) (id2523821)]
+/Names [(id299516) 1402 0 R (id299582) 1411 0 R (id299720) 1412 0 R (id299817) 1417 0 R (id299835) 1418 0 R (id299864) 1419 0 R]
+/Limits [(id299516) (id299864)]
 >> endobj
 2240 0 obj <<
-/Names [(id2523852) 1426 0 R (id2523968) 1431 0 R (id2524023) 1436 0 R (id2524084) 1437 0 R (id2524120) 1438 0 R (id2524258) 1444 0 R]
-/Limits [(id2523852) (id2524258)]
+/Names [(id299966) 1425 0 R (id299994) 1426 0 R (id300104) 1431 0 R (id300157) 1436 0 R (id300215) 1437 0 R (id300250) 1438 0 R]
+/Limits [(id299966) (id300250)]
 >> endobj
 2241 0 obj <<
-/Names [(id2524386) 1449 0 R (id2524397) 1450 0 R (id2524450) 1455 0 R (id2524482) 1456 0 R (id2524493) 1457 0 R (id2524525) 1458 0 R]
-/Limits [(id2524386) (id2524525)]
+/Names [(id300382) 1444 0 R (id300503) 1449 0 R (id300513) 1450 0 R (id300565) 1455 0 R (id300597) 1456 0 R (id300608) 1457 0 R]
+/Limits [(id300382) (id300608)]
 >> endobj
 2242 0 obj <<
-/Names [(id2524572) 1464 0 R (id2524578) 1465 0 R (id2524590) 1466 0 R (id2524653) 1467 0 R (id2524659) 1468 0 R (id2524670) 1469 0 R]
-/Limits [(id2524572) (id2524670)]
+/Names [(id300636) 1458 0 R (id300676) 1464 0 R (id300681) 1465 0 R (id300691) 1466 0 R (id300744) 1467 0 R (id300750) 1468 0 R]
+/Limits [(id300636) (id300750)]
 >> endobj
 2243 0 obj <<
-/Names [(id2524749) 1474 0 R (id2524756) 1475 0 R (id2524779) 1476 0 R (id2524807) 1477 0 R (id2524820) 1478 0 R (id2524906) 1483 0 R]
-/Limits [(id2524749) (id2524906)]
+/Names [(id300759) 1469 0 R (id300826) 1474 0 R (id300832) 1475 0 R (id300852) 1476 0 R (id300875) 1477 0 R (id300886) 1478 0 R]
+/Limits [(id300759) (id300886)]
 >> endobj
 2244 0 obj <<
-/Names [(id2524991) 1484 0 R (id2525003) 1485 0 R (id2525102) 1490 0 R (id2525188) 1491 0 R (id2525330) 1496 0 R (id2525358) 1501 0 R]
-/Limits [(id2524991) (id2525358)]
+/Names [(id300959) 1483 0 R (id301030) 1484 0 R (id301041) 1485 0 R (id301125) 1490 0 R (id301197) 1491 0 R (id301317) 1496 0 R]
+/Limits [(id300959) (id301317)]
 >> endobj
 2245 0 obj <<
-/Names [(id2525419) 1502 0 R (id2525448) 1503 0 R (id2525475) 1504 0 R (id2525535) 1510 0 R (id2525577) 1511 0 R (id2525612) 1512 0 R]
-/Limits [(id2525419) (id2525612)]
+/Names [(id301338) 1501 0 R (id301391) 1502 0 R (id301415) 1503 0 R (id301437) 1504 0 R (id301488) 1510 0 R (id301524) 1511 0 R]
+/Limits [(id301338) (id301524)]
 >> endobj
 2246 0 obj <<
-/Names [(id2525648) 1513 0 R (id2525679) 1518 0 R (id2525691) 1519 0 R (id2525715) 1520 0 R (id2525769) 1525 0 R (id2525782) 1526 0 R]
-/Limits [(id2525648) (id2525782)]
+/Names [(id301551) 1512 0 R (id301582) 1513 0 R (id301608) 1518 0 R (id301618) 1519 0 R (id301639) 1520 0 R (id301682) 1525 0 R]
+/Limits [(id301551) (id301682)]
 >> endobj
 2247 0 obj <<
-/Names [(id2525806) 1527 0 R (id2525850) 1528 0 R (id2525864) 1529 0 R (id2525877) 1530 0 R (id2525988) 1535 0 R (id2526093) 1540 0 R]
-/Limits [(id2525806) (id2526093)]
+/Names [(id301693) 1526 0 R (id301713) 1527 0 R (id301751) 1528 0 R (id301762) 1529 0 R (id301773) 1530 0 R (id301868) 1535 0 R]
+/Limits [(id301693) (id301868)]
 >> endobj
 2248 0 obj <<
-/Names [(id2526118) 1541 0 R (id2526278) 1546 0 R (id2526379) 1547 0 R (id2526418) 1553 0 R (id2526437) 1554 0 R (id2526546) 1555 0 R]
-/Limits [(id2526118) (id2526546)]
+/Names [(id301957) 1540 0 R (id301978) 1541 0 R (id302116) 1546 0 R (id302202) 1547 0 R (id302236) 1553 0 R (id302251) 1554 0 R]
+/Limits [(id301957) (id302251)]
 >> endobj
 2249 0 obj <<
-/Names [(id2526611) 1560 0 R (id2526622) 1561 0 R (id2526658) 1562 0 R (id2526713) 1563 0 R (id2526720) 1564 0 R (id2526862) 1569 0 R]
-/Limits [(id2526611) (id2526862)]
+/Names [(id302345) 1555 0 R (id302399) 1560 0 R (id302409) 1561 0 R (id302440) 1562 0 R (id302485) 1563 0 R (id302491) 1564 0 R]
+/Limits [(id302345) (id302491)]
 >> endobj
 2250 0 obj <<
-/Names [(id2526932) 1574 0 R (id2526976) 1579 0 R (id2527011) 1580 0 R (id2527018) 1581 0 R (id2527128) 1586 0 R (id2527287) 1592 0 R]
-/Limits [(id2526932) (id2527287)]
+/Names [(id302611) 1569 0 R (id302666) 1574 0 R (id302698) 1579 0 R (id302726) 1580 0 R (id302731) 1581 0 R (id302826) 1586 0 R]
+/Limits [(id302611) (id302826)]
 >> endobj
 2251 0 obj <<
-/Names [(id2527300) 1593 0 R (id2527342) 1594 0 R (id2527394) 1595 0 R (id2528055) 2032 0 R (internals) 935 0 R (modules) 938 0 R]
-/Limits [(id2527300) (modules)]
+/Names [(id302963) 1592 0 R (id302973) 1593 0 R (id303009) 1594 0 R (id303054) 1595 0 R (internals) 935 0 R (modules) 938 0 R]
+/Limits [(id302963) (modules)]
 >> endobj
 2252 0 obj <<
 /Names [(ntdomain) 932 0 R (page.1) 1213 0 R (page.10) 1276 0 R (page.100) 1942 0 R (page.101) 1949 0 R (page.102) 1956 0 R]
@@ -13452,27 +13455,27 @@
 >> endobj
 2314 0 obj <<
 /Kids [2217 0 R 2218 0 R 2219 0 R 2220 0 R 2221 0 R 2222 0 R]
-/Limits [(chapter.8) (id2484771)]
+/Limits [(chapter.8) (id261828)]
 >> endobj
 2315 0 obj <<
 /Kids [2223 0 R 2224 0 R 2225 0 R 2226 0 R 2227 0 R 2228 0 R]
-/Limits [(id2484860) (id2499153)]
+/Limits [(id263564) (id274942)]
 >> endobj
 2316 0 obj <<
 /Kids [2229 0 R 2230 0 R 2231 0 R 2232 0 R 2233 0 R 2234 0 R]
-/Limits [(id2499165) (id2508955)]
+/Limits [(id275466) (id285026)]
 >> endobj
 2317 0 obj <<
 /Kids [2235 0 R 2236 0 R 2237 0 R 2238 0 R 2239 0 R 2240 0 R]
-/Limits [(id2508956) (id2524258)]
+/Limits [(id285605) (id300250)]
 >> endobj
 2318 0 obj <<
 /Kids [2241 0 R 2242 0 R 2243 0 R 2244 0 R 2245 0 R 2246 0 R]
-/Limits [(id2524386) (id2525782)]
+/Limits [(id300382) (id301682)]
 >> endobj
 2319 0 obj <<
 /Kids [2247 0 R 2248 0 R 2249 0 R 2250 0 R 2251 0 R 2252 0 R]
-/Limits [(id2525806) (page.102)]
+/Limits [(id301693) (page.102)]
 >> endobj
 2320 0 obj <<
 /Kids [2253 0 R 2254 0 R 2255 0 R 2256 0 R 2257 0 R 2258 0 R]
@@ -13516,11 +13519,11 @@
 >> endobj
 2330 0 obj <<
 /Kids [2310 0 R 2311 0 R 2312 0 R 2313 0 R 2314 0 R 2315 0 R]
-/Limits [(CodingSuggestions) (id2499153)]
+/Limits [(CodingSuggestions) (id274942)]
 >> endobj
 2331 0 obj <<
 /Kids [2316 0 R 2317 0 R 2318 0 R 2319 0 R 2320 0 R 2321 0 R]
-/Limits [(id2499165) (page.53)]
+/Limits [(id275466) (page.53)]
 >> endobj
 2332 0 obj <<
 /Kids [2322 0 R 2323 0 R 2324 0 R 2325 0 R 2326 0 R 2327 0 R]
@@ -13547,8 +13550,8 @@
 >> endobj
 2337 0 obj <<
 /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.3)/Keywords()
-/CreationDate (D:20080610111133+02'00')
-/ModDate (D:20080610111133+02'00')
+/CreationDate (D:20080528090721-05'00')
+/ModDate (D:20080528090721-05'00')
 /Trapped /False
 /PTEX.Fullbanner (This is pdfTeX using libpoppler, Version 3.141592-1.40.3-2.2 (Web2C 7.5.6) kpathsea version 3.5.6)
 >> endobj
@@ -13560,2343 +13563,2343 @@
 0000000004 00000 f 
 0000000000 00000 f 
 0000000015 00000 n 
-0000028928 00000 n 
-0000510848 00000 n 
+0000028946 00000 n 
+0000511220 00000 n 
 0000000061 00000 n 
 0000000090 00000 n 
-0000332405 00000 n 
-0000510761 00000 n 
-0000000135 00000 n 
-0000000162 00000 n 
-0000080899 00000 n 
-0000510634 00000 n 
-0000000205 00000 n 
-0000000243 00000 n 
-0000083095 00000 n 
-0000510523 00000 n 
-0000000289 00000 n 
-0000000341 00000 n 
-0000083220 00000 n 
-0000510449 00000 n 
-0000000389 00000 n 
-0000000424 00000 n 
-0000083346 00000 n 
-0000510362 00000 n 
-0000000472 00000 n 
-0000000504 00000 n 
-0000085895 00000 n 
-0000510275 00000 n 
-0000000552 00000 n 
-0000000589 00000 n 
-0000086020 00000 n 
-0000510188 00000 n 
-0000000637 00000 n 
-0000000669 00000 n 
-0000088471 00000 n 
-0000510101 00000 n 
-0000000717 00000 n 
-0000000747 00000 n 
-0000091038 00000 n 
-0000510014 00000 n 
-0000000795 00000 n 
-0000000828 00000 n 
-0000091164 00000 n 
-0000509927 00000 n 
-0000000876 00000 n 
-0000000912 00000 n 
-0000091290 00000 n 
-0000509840 00000 n 
-0000000960 00000 n 
-0000000995 00000 n 
-0000094053 00000 n 
-0000509766 00000 n 
-0000001043 00000 n 
-0000001085 00000 n 
-0000098328 00000 n 
-0000509654 00000 n 
-0000001131 00000 n 
-0000001175 00000 n 
-0000098452 00000 n 
-0000509543 00000 n 
-0000001223 00000 n 
-0000001258 00000 n 
-0000104399 00000 n 
-0000509469 00000 n 
-0000001311 00000 n 
-0000001343 00000 n 
-0000104525 00000 n 
-0000509395 00000 n 
-0000001396 00000 n 
-0000001428 00000 n 
-0000104651 00000 n 
-0000509270 00000 n 
-0000001476 00000 n 
-0000001519 00000 n 
-0000104777 00000 n 
-0000509196 00000 n 
-0000001572 00000 n 
-0000001602 00000 n 
-0000106679 00000 n 
-0000509072 00000 n 
-0000001655 00000 n 
-0000001692 00000 n 
-0000106805 00000 n 
-0000508998 00000 n 
-0000001750 00000 n 
-0000001794 00000 n 
-0000106931 00000 n 
+0000332432 00000 n 
+0000511133 00000 n 
+0000000134 00000 n 
+0000000161 00000 n 
+0000080917 00000 n 
+0000511006 00000 n 
+0000000204 00000 n 
+0000000242 00000 n 
+0000083113 00000 n 
+0000510895 00000 n 
+0000000288 00000 n 
+0000000340 00000 n 
+0000083238 00000 n 
+0000510821 00000 n 
+0000000388 00000 n 
+0000000423 00000 n 
+0000083364 00000 n 
+0000510734 00000 n 
+0000000471 00000 n 
+0000000503 00000 n 
+0000085913 00000 n 
+0000510647 00000 n 
+0000000551 00000 n 
+0000000588 00000 n 
+0000086038 00000 n 
+0000510560 00000 n 
+0000000636 00000 n 
+0000000668 00000 n 
+0000088489 00000 n 
+0000510473 00000 n 
+0000000716 00000 n 
+0000000746 00000 n 
+0000091056 00000 n 
+0000510386 00000 n 
+0000000794 00000 n 
+0000000827 00000 n 
+0000091182 00000 n 
+0000510299 00000 n 
+0000000875 00000 n 
+0000000911 00000 n 
+0000091308 00000 n 
+0000510212 00000 n 
+0000000959 00000 n 
+0000000994 00000 n 
+0000094071 00000 n 
+0000510138 00000 n 
+0000001042 00000 n 
+0000001084 00000 n 
+0000098346 00000 n 
+0000510026 00000 n 
+0000001130 00000 n 
+0000001174 00000 n 
+0000098470 00000 n 
+0000509915 00000 n 
+0000001222 00000 n 
+0000001257 00000 n 
+0000104417 00000 n 
+0000509841 00000 n 
+0000001310 00000 n 
+0000001342 00000 n 
+0000104543 00000 n 
+0000509767 00000 n 
+0000001395 00000 n 
+0000001427 00000 n 
+0000104669 00000 n 
+0000509642 00000 n 
+0000001475 00000 n 
+0000001518 00000 n 
+0000104795 00000 n 
+0000509568 00000 n 
+0000001571 00000 n 
+0000001601 00000 n 
+0000106697 00000 n 
+0000509444 00000 n 
+0000001654 00000 n 
+0000001691 00000 n 
+0000106823 00000 n 
+0000509370 00000 n 
+0000001749 00000 n 
+0000001793 00000 n 
+0000106949 00000 n 
+0000509296 00000 n 
+0000001851 00000 n 
+0000001895 00000 n 
+0000108189 00000 n 
+0000509183 00000 n 
+0000001948 00000 n 
+0000001983 00000 n 
+0000108315 00000 n 
+0000509107 00000 n 
+0000002041 00000 n 
+0000002075 00000 n 
+0000108441 00000 n 
+0000509016 00000 n 
+0000002134 00000 n 
+0000002166 00000 n 
+0000108568 00000 n 
 0000508924 00000 n 
-0000001852 00000 n 
-0000001896 00000 n 
-0000108171 00000 n 
-0000508811 00000 n 
-0000001949 00000 n 
-0000001984 00000 n 
-0000108297 00000 n 
-0000508735 00000 n 
-0000002042 00000 n 
-0000002076 00000 n 
-0000108423 00000 n 
-0000508644 00000 n 
-0000002135 00000 n 
-0000002167 00000 n 
-0000108550 00000 n 
-0000508552 00000 n 
-0000002226 00000 n 
-0000002259 00000 n 
-0000108677 00000 n 
-0000508460 00000 n 
-0000002318 00000 n 
-0000002352 00000 n 
-0000108804 00000 n 
-0000508368 00000 n 
-0000002411 00000 n 
-0000002474 00000 n 
-0000110137 00000 n 
-0000508276 00000 n 
-0000002533 00000 n 
-0000002575 00000 n 
-0000110264 00000 n 
-0000508184 00000 n 
-0000002634 00000 n 
-0000002694 00000 n 
-0000110391 00000 n 
-0000508092 00000 n 
-0000002753 00000 n 
-0000002834 00000 n 
-0000110518 00000 n 
-0000508000 00000 n 
-0000002893 00000 n 
-0000002946 00000 n 
-0000110645 00000 n 
-0000507908 00000 n 
-0000003006 00000 n 
-0000003075 00000 n 
-0000111951 00000 n 
-0000507816 00000 n 
-0000003135 00000 n 
-0000003198 00000 n 
-0000112078 00000 n 
-0000507724 00000 n 
-0000003258 00000 n 
-0000003320 00000 n 
-0000113697 00000 n 
-0000507632 00000 n 
-0000003380 00000 n 
-0000003441 00000 n 
-0000113824 00000 n 
-0000507540 00000 n 
-0000003501 00000 n 
-0000003590 00000 n 
-0000113951 00000 n 
-0000507448 00000 n 
-0000003650 00000 n 
-0000003714 00000 n 
-0000114076 00000 n 
-0000507356 00000 n 
-0000003774 00000 n 
-0000003852 00000 n 
-0000115520 00000 n 
-0000507264 00000 n 
-0000003912 00000 n 
-0000003987 00000 n 
-0000115647 00000 n 
-0000507172 00000 n 
-0000004047 00000 n 
-0000004110 00000 n 
-0000117454 00000 n 
-0000507080 00000 n 
-0000004170 00000 n 
-0000004261 00000 n 
-0000117581 00000 n 
-0000506988 00000 n 
-0000004321 00000 n 
-0000004420 00000 n 
-0000117708 00000 n 
-0000506896 00000 n 
-0000004480 00000 n 
-0000004560 00000 n 
-0000119133 00000 n 
-0000506804 00000 n 
-0000004620 00000 n 
-0000004699 00000 n 
-0000120432 00000 n 
-0000506712 00000 n 
-0000004759 00000 n 
-0000004809 00000 n 
-0000120559 00000 n 
-0000506620 00000 n 
-0000004869 00000 n 
-0000004934 00000 n 
-0000122038 00000 n 
-0000506528 00000 n 
-0000004994 00000 n 
-0000005081 00000 n 
-0000122165 00000 n 
-0000506436 00000 n 
-0000005141 00000 n 
-0000005202 00000 n 
-0000126062 00000 n 
-0000506344 00000 n 
-0000005262 00000 n 
-0000005356 00000 n 
-0000126189 00000 n 
-0000506252 00000 n 
-0000005416 00000 n 
-0000005498 00000 n 
-0000126316 00000 n 
-0000506160 00000 n 
-0000005558 00000 n 
-0000005612 00000 n 
-0000128099 00000 n 
-0000506082 00000 n 
-0000005672 00000 n 
-0000005722 00000 n 
-0000131594 00000 n 
-0000505951 00000 n 
-0000005771 00000 n 
-0000005825 00000 n 
-0000131721 00000 n 
-0000505872 00000 n 
-0000005879 00000 n 
-0000005916 00000 n 
-0000136277 00000 n 
-0000505740 00000 n 
-0000005970 00000 n 
-0000006002 00000 n 
-0000136404 00000 n 
+0000002225 00000 n 
+0000002258 00000 n 
+0000108695 00000 n 
+0000508832 00000 n 
+0000002317 00000 n 
+0000002351 00000 n 
+0000108822 00000 n 
+0000508740 00000 n 
+0000002410 00000 n 
+0000002473 00000 n 
+0000110155 00000 n 
+0000508648 00000 n 
+0000002532 00000 n 
+0000002574 00000 n 
+0000110282 00000 n 
+0000508556 00000 n 
+0000002633 00000 n 
+0000002693 00000 n 
+0000110409 00000 n 
+0000508464 00000 n 
+0000002752 00000 n 
+0000002833 00000 n 
+0000110536 00000 n 
+0000508372 00000 n 
+0000002892 00000 n 
+0000002945 00000 n 
+0000110663 00000 n 
+0000508280 00000 n 
+0000003005 00000 n 
+0000003074 00000 n 
+0000111969 00000 n 
+0000508188 00000 n 
+0000003134 00000 n 
+0000003197 00000 n 
+0000112096 00000 n 
+0000508096 00000 n 
+0000003257 00000 n 
+0000003319 00000 n 
+0000113715 00000 n 
+0000508004 00000 n 
+0000003379 00000 n 
+0000003440 00000 n 
+0000113842 00000 n 
+0000507912 00000 n 
+0000003500 00000 n 
+0000003589 00000 n 
+0000113969 00000 n 
+0000507820 00000 n 
+0000003649 00000 n 
+0000003713 00000 n 
+0000114094 00000 n 
+0000507728 00000 n 
+0000003773 00000 n 
+0000003851 00000 n 
+0000115538 00000 n 
+0000507636 00000 n 
+0000003911 00000 n 
+0000003986 00000 n 
+0000115665 00000 n 
+0000507544 00000 n 
+0000004046 00000 n 
+0000004109 00000 n 
+0000117472 00000 n 
+0000507452 00000 n 
+0000004169 00000 n 
+0000004260 00000 n 
+0000117599 00000 n 
+0000507360 00000 n 
+0000004320 00000 n 
+0000004419 00000 n 
+0000117726 00000 n 
+0000507268 00000 n 
+0000004479 00000 n 
+0000004559 00000 n 
+0000119151 00000 n 
+0000507176 00000 n 
+0000004619 00000 n 
+0000004698 00000 n 
+0000120450 00000 n 
+0000507084 00000 n 
+0000004758 00000 n 
+0000004808 00000 n 
+0000120577 00000 n 
+0000506992 00000 n 
+0000004868 00000 n 
+0000004933 00000 n 
+0000122056 00000 n 
+0000506900 00000 n 
+0000004993 00000 n 
+0000005080 00000 n 
+0000122183 00000 n 
+0000506808 00000 n 
+0000005140 00000 n 
+0000005201 00000 n 
+0000126080 00000 n 
+0000506716 00000 n 
+0000005261 00000 n 
+0000005355 00000 n 
+0000126207 00000 n 
+0000506624 00000 n 
+0000005415 00000 n 
+0000005497 00000 n 
+0000126334 00000 n 
+0000506532 00000 n 
+0000005557 00000 n 
+0000005611 00000 n 
+0000128117 00000 n 
+0000506454 00000 n 
+0000005671 00000 n 
+0000005721 00000 n 
+0000131612 00000 n 
+0000506323 00000 n 
+0000005770 00000 n 
+0000005824 00000 n 
+0000131739 00000 n 
+0000506244 00000 n 
+0000005878 00000 n 
+0000005915 00000 n 
+0000136295 00000 n 
+0000506112 00000 n 
+0000005969 00000 n 
+0000006001 00000 n 
+0000136422 00000 n 
+0000506033 00000 n 
+0000006060 00000 n 
+0000006154 00000 n 
+0000138047 00000 n 
+0000505940 00000 n 
+0000006213 00000 n 
+0000006265 00000 n 
+0000138174 00000 n 
+0000505847 00000 n 
+0000006324 00000 n 
+0000006367 00000 n 
+0000138301 00000 n 
+0000505754 00000 n 
+0000006426 00000 n 
+0000006471 00000 n 
+0000139964 00000 n 
 0000505661 00000 n 
-0000006061 00000 n 
-0000006155 00000 n 
-0000138029 00000 n 
+0000006530 00000 n 
+0000006575 00000 n 
+0000140090 00000 n 
 0000505568 00000 n 
-0000006214 00000 n 
-0000006266 00000 n 
-0000138156 00000 n 
+0000006634 00000 n 
+0000006679 00000 n 
+0000141675 00000 n 
 0000505475 00000 n 
-0000006325 00000 n 
-0000006368 00000 n 
-0000138283 00000 n 
-0000505382 00000 n 
-0000006427 00000 n 
-0000006472 00000 n 
-0000139946 00000 n 
-0000505289 00000 n 
-0000006531 00000 n 
-0000006576 00000 n 
-0000140072 00000 n 
-0000505196 00000 n 
-0000006635 00000 n 
-0000006680 00000 n 
-0000141657 00000 n 
-0000505103 00000 n 
-0000006739 00000 n 
-0000006784 00000 n 
-0000143610 00000 n 
-0000505024 00000 n 
-0000006843 00000 n 
-0000006888 00000 n 
-0000143737 00000 n 
-0000504931 00000 n 
-0000006942 00000 n 
-0000006972 00000 n 
-0000143864 00000 n 
-0000504838 00000 n 
-0000007026 00000 n 
-0000007071 00000 n 
-0000145574 00000 n 
-0000504745 00000 n 
-0000007125 00000 n 
-0000007176 00000 n 
-0000147176 00000 n 
-0000504613 00000 n 
-0000007230 00000 n 
-0000007271 00000 n 
-0000147303 00000 n 
-0000504534 00000 n 
-0000007330 00000 n 
-0000007365 00000 n 
-0000148657 00000 n 
-0000504455 00000 n 
-0000007424 00000 n 
-0000007460 00000 n 
-0000148783 00000 n 
-0000504323 00000 n 
-0000007514 00000 n 
-0000007561 00000 n 
-0000148910 00000 n 
-0000504244 00000 n 
-0000007620 00000 n 
-0000007655 00000 n 
-0000149037 00000 n 
-0000504165 00000 n 
-0000007714 00000 n 
-0000007750 00000 n 
-0000150150 00000 n 
-0000504033 00000 n 
-0000007804 00000 n 
-0000007859 00000 n 
-0000150276 00000 n 
-0000503954 00000 n 
-0000007918 00000 n 
-0000007953 00000 n 
-0000150403 00000 n 
-0000503875 00000 n 
-0000008012 00000 n 
-0000008048 00000 n 
-0000150530 00000 n 
-0000503743 00000 n 
-0000008102 00000 n 
-0000008143 00000 n 
-0000150657 00000 n 
-0000503664 00000 n 
-0000008202 00000 n 
-0000008237 00000 n 
-0000150784 00000 n 
-0000503585 00000 n 
-0000008296 00000 n 
-0000008332 00000 n 
-0000152115 00000 n 
-0000503453 00000 n 
-0000008387 00000 n 
-0000008423 00000 n 
-0000152241 00000 n 
-0000503374 00000 n 
-0000008483 00000 n 
-0000008519 00000 n 
-0000152367 00000 n 
-0000503295 00000 n 
-0000008579 00000 n 
-0000008616 00000 n 
-0000152494 00000 n 
-0000503163 00000 n 
-0000008671 00000 n 
-0000008713 00000 n 
-0000152621 00000 n 
-0000503084 00000 n 
-0000008773 00000 n 
-0000008809 00000 n 
-0000154236 00000 n 
-0000503005 00000 n 
-0000008869 00000 n 
-0000008906 00000 n 
-0000154363 00000 n 
-0000502887 00000 n 
-0000008961 00000 n 
-0000009004 00000 n 
-0000154490 00000 n 
-0000502808 00000 n 
-0000009064 00000 n 
-0000009100 00000 n 
-0000155880 00000 n 
-0000502729 00000 n 
-0000009160 00000 n 
-0000009197 00000 n 
-0000156007 00000 n 
-0000502598 00000 n 
-0000009246 00000 n 
-0000009302 00000 n 
-0000157849 00000 n 
-0000502480 00000 n 
-0000009356 00000 n 
-0000009403 00000 n 
-0000159421 00000 n 
-0000502401 00000 n 
-0000009462 00000 n 
-0000009497 00000 n 
-0000159548 00000 n 
-0000502322 00000 n 
-0000009556 00000 n 
-0000009592 00000 n 
-0000159675 00000 n 
-0000502190 00000 n 
-0000009646 00000 n 
-0000009690 00000 n 
-0000159802 00000 n 
-0000502111 00000 n 
-0000009749 00000 n 
-0000009784 00000 n 
-0000161614 00000 n 
-0000502032 00000 n 
-0000009843 00000 n 
-0000009879 00000 n 
-0000161741 00000 n 
-0000501900 00000 n 
-0000009933 00000 n 
-0000009982 00000 n 
-0000161868 00000 n 
-0000501821 00000 n 
-0000010041 00000 n 
-0000010076 00000 n 
-0000161995 00000 n 
-0000501742 00000 n 
-0000010135 00000 n 
-0000010171 00000 n 
-0000163526 00000 n 
-0000501610 00000 n 
-0000010225 00000 n 
-0000010264 00000 n 
-0000163652 00000 n 
-0000501531 00000 n 
-0000010323 00000 n 
-0000010358 00000 n 
-0000163778 00000 n 
-0000501452 00000 n 
-0000010417 00000 n 
-0000010453 00000 n 
-0000165597 00000 n 
-0000501334 00000 n 
-0000010507 00000 n 
-0000010547 00000 n 
-0000165724 00000 n 
-0000501255 00000 n 
-0000010606 00000 n 
-0000010641 00000 n 
-0000165851 00000 n 
-0000501176 00000 n 
-0000010700 00000 n 
-0000010736 00000 n 
-0000165977 00000 n 
-0000501045 00000 n 
-0000010785 00000 n 
-0000010843 00000 n 
-0000166104 00000 n 
-0000500927 00000 n 
-0000010897 00000 n 
-0000010936 00000 n 
-0000166231 00000 n 
-0000500848 00000 n 
-0000010995 00000 n 
-0000011030 00000 n 
-0000167343 00000 n 
-0000500769 00000 n 
-0000011089 00000 n 
-0000011125 00000 n 
-0000168814 00000 n 
-0000500651 00000 n 
-0000011179 00000 n 
-0000011214 00000 n 
-0000168941 00000 n 
-0000500572 00000 n 
-0000011273 00000 n 
-0000011308 00000 n 
-0000170083 00000 n 
-0000500493 00000 n 
-0000011367 00000 n 
-0000011403 00000 n 
-0000170210 00000 n 
-0000500362 00000 n 
-0000011452 00000 n 
-0000011502 00000 n 
-0000171736 00000 n 
-0000500244 00000 n 
-0000011556 00000 n 
-0000011596 00000 n 
-0000171863 00000 n 
-0000500165 00000 n 
-0000011655 00000 n 
-0000011690 00000 n 
-0000171990 00000 n 
-0000500086 00000 n 
-0000011749 00000 n 
-0000011785 00000 n 
-0000173497 00000 n 
-0000499968 00000 n 
-0000011839 00000 n 
-0000011884 00000 n 
-0000173624 00000 n 
-0000499889 00000 n 
-0000011943 00000 n 
-0000011978 00000 n 
-0000173751 00000 n 
-0000499810 00000 n 
-0000012037 00000 n 
-0000012073 00000 n 
-0000173878 00000 n 
-0000499679 00000 n 
-0000012122 00000 n 
-0000012192 00000 n 
-0000174005 00000 n 
-0000499600 00000 n 
-0000012246 00000 n 
-0000012283 00000 n 
-0000175579 00000 n 
-0000499507 00000 n 
-0000012337 00000 n 
-0000012371 00000 n 
-0000177236 00000 n 
-0000499428 00000 n 
-0000012425 00000 n 
-0000012459 00000 n 
-0000179189 00000 n 
-0000499311 00000 n 
-0000012508 00000 n 
-0000012545 00000 n 
-0000179316 00000 n 
-0000499193 00000 n 
-0000012599 00000 n 
-0000012640 00000 n 
-0000179443 00000 n 
-0000499114 00000 n 
-0000012699 00000 n 
-0000012752 00000 n 
-0000180573 00000 n 
-0000499035 00000 n 
-0000012811 00000 n 
-0000012857 00000 n 
-0000182816 00000 n 
-0000498917 00000 n 
-0000012911 00000 n 
-0000012952 00000 n 
-0000182942 00000 n 
-0000498838 00000 n 
-0000013011 00000 n 
-0000013059 00000 n 
-0000183069 00000 n 
-0000498745 00000 n 
-0000013118 00000 n 
-0000013167 00000 n 
-0000183196 00000 n 
-0000498666 00000 n 
-0000013226 00000 n 
-0000013276 00000 n 
-0000184097 00000 n 
-0000498534 00000 n 
-0000013320 00000 n 
-0000013360 00000 n 
-0000186254 00000 n 
-0000498416 00000 n 
-0000013407 00000 n 
-0000013455 00000 n 
-0000186380 00000 n 
-0000498337 00000 n 
-0000013504 00000 n 
-0000013540 00000 n 
-0000186698 00000 n 
-0000498244 00000 n 
-0000013589 00000 n 
-0000013637 00000 n 
-0000189160 00000 n 
-0000498151 00000 n 
-0000013686 00000 n 
-0000013724 00000 n 
-0000189671 00000 n 
-0000498058 00000 n 
-0000013773 00000 n 
-0000013811 00000 n 
-0000192445 00000 n 
-0000497979 00000 n 
-0000013860 00000 n 
-0000013895 00000 n 
-0000193730 00000 n 
-0000497847 00000 n 
-0000013942 00000 n 
-0000013994 00000 n 
-0000193856 00000 n 
-0000497768 00000 n 
-0000014043 00000 n 
-0000014084 00000 n 
-0000196297 00000 n 
-0000497675 00000 n 
-0000014133 00000 n 
-0000014176 00000 n 
-0000199733 00000 n 
-0000497582 00000 n 
-0000014225 00000 n 
-0000014271 00000 n 
-0000199860 00000 n 
-0000497489 00000 n 
-0000014320 00000 n 
-0000014366 00000 n 
-0000201859 00000 n 
-0000497371 00000 n 
-0000014415 00000 n 
-0000014452 00000 n 
-0000201986 00000 n 
-0000497292 00000 n 
-0000014506 00000 n 
-0000014543 00000 n 
-0000203697 00000 n 
-0000497199 00000 n 
-0000014597 00000 n 
-0000014633 00000 n 
-0000203822 00000 n 
-0000497120 00000 n 
-0000014687 00000 n 
-0000014740 00000 n 
-0000205583 00000 n 
-0000496988 00000 n 
-0000014787 00000 n 
-0000014832 00000 n 
-0000205709 00000 n 
-0000496909 00000 n 
-0000014881 00000 n 
-0000014923 00000 n 
-0000205836 00000 n 
-0000496816 00000 n 
-0000014972 00000 n 
-0000015013 00000 n 
-0000211095 00000 n 
-0000496683 00000 n 
-0000015062 00000 n 
-0000015107 00000 n 
-0000211222 00000 n 
+0000006738 00000 n 
+0000006783 00000 n 
+0000143628 00000 n 
+0000505396 00000 n 
+0000006842 00000 n 
+0000006887 00000 n 
+0000143755 00000 n 
+0000505303 00000 n 
+0000006941 00000 n 
+0000006971 00000 n 
+0000143882 00000 n 
+0000505210 00000 n 
+0000007025 00000 n 
+0000007070 00000 n 
+0000145592 00000 n 
+0000505117 00000 n 
+0000007124 00000 n 
+0000007175 00000 n 
+0000147194 00000 n 
+0000504985 00000 n 
+0000007229 00000 n 
+0000007270 00000 n 
+0000147321 00000 n 
+0000504906 00000 n 
+0000007329 00000 n 
+0000007364 00000 n 
+0000148675 00000 n 
+0000504827 00000 n 
+0000007423 00000 n 
+0000007459 00000 n 
+0000148801 00000 n 
+0000504695 00000 n 
+0000007513 00000 n 
+0000007560 00000 n 
+0000148928 00000 n 
+0000504616 00000 n 
+0000007619 00000 n 
+0000007654 00000 n 
+0000149055 00000 n 
+0000504537 00000 n 
+0000007713 00000 n 
+0000007749 00000 n 
+0000150168 00000 n 
+0000504405 00000 n 
+0000007803 00000 n 
+0000007858 00000 n 
+0000150294 00000 n 
+0000504326 00000 n 
+0000007917 00000 n 
+0000007952 00000 n 
+0000150421 00000 n 
+0000504247 00000 n 
+0000008011 00000 n 
+0000008047 00000 n 
+0000150548 00000 n 
+0000504115 00000 n 
+0000008101 00000 n 
+0000008142 00000 n 
+0000150675 00000 n 
+0000504036 00000 n 
+0000008201 00000 n 
+0000008236 00000 n 
+0000150802 00000 n 
+0000503957 00000 n 
+0000008295 00000 n 
+0000008331 00000 n 
+0000152133 00000 n 
+0000503825 00000 n 
+0000008386 00000 n 
+0000008422 00000 n 
+0000152259 00000 n 
+0000503746 00000 n 
+0000008482 00000 n 
+0000008518 00000 n 
+0000152385 00000 n 
+0000503667 00000 n 
+0000008578 00000 n 
+0000008615 00000 n 
+0000152512 00000 n 
+0000503535 00000 n 
+0000008670 00000 n 
+0000008712 00000 n 
+0000152639 00000 n 
+0000503456 00000 n 
+0000008772 00000 n 
+0000008808 00000 n 
+0000154254 00000 n 
+0000503377 00000 n 
+0000008868 00000 n 
+0000008905 00000 n 
+0000154381 00000 n 
+0000503259 00000 n 
+0000008960 00000 n 
+0000009003 00000 n 
+0000154508 00000 n 
+0000503180 00000 n 
+0000009063 00000 n 
+0000009099 00000 n 
+0000155898 00000 n 
+0000503101 00000 n 
+0000009159 00000 n 
+0000009196 00000 n 
+0000156025 00000 n 
+0000502970 00000 n 
+0000009245 00000 n 
+0000009301 00000 n 
+0000157867 00000 n 
+0000502852 00000 n 
+0000009355 00000 n 
+0000009402 00000 n 
+0000159439 00000 n 
+0000502773 00000 n 
+0000009461 00000 n 
+0000009496 00000 n 
+0000159566 00000 n 
+0000502694 00000 n 
+0000009555 00000 n 
+0000009591 00000 n 
+0000159693 00000 n 
+0000502562 00000 n 
+0000009645 00000 n 
+0000009689 00000 n 
+0000159820 00000 n 
+0000502483 00000 n 
+0000009748 00000 n 
+0000009783 00000 n 
+0000161632 00000 n 
+0000502404 00000 n 
+0000009842 00000 n 
+0000009878 00000 n 
+0000161759 00000 n 
+0000502272 00000 n 
+0000009932 00000 n 
+0000009981 00000 n 
+0000161886 00000 n 
+0000502193 00000 n 
+0000010040 00000 n 
+0000010075 00000 n 
+0000162013 00000 n 
+0000502114 00000 n 
+0000010134 00000 n 
+0000010170 00000 n 
+0000163544 00000 n 
+0000501982 00000 n 
+0000010224 00000 n 
+0000010263 00000 n 
+0000163670 00000 n 
+0000501903 00000 n 
+0000010322 00000 n 
+0000010357 00000 n 
+0000163796 00000 n 
+0000501824 00000 n 
+0000010416 00000 n 
+0000010452 00000 n 
+0000165615 00000 n 
+0000501706 00000 n 
+0000010506 00000 n 
+0000010546 00000 n 
+0000165742 00000 n 
+0000501627 00000 n 
+0000010605 00000 n 
+0000010640 00000 n 
+0000165869 00000 n 
+0000501548 00000 n 
+0000010699 00000 n 
+0000010735 00000 n 
+0000165995 00000 n 
+0000501417 00000 n 
+0000010784 00000 n 
+0000010842 00000 n 
+0000166122 00000 n 
+0000501299 00000 n 
+0000010896 00000 n 
+0000010935 00000 n 
+0000166249 00000 n 
+0000501220 00000 n 
+0000010994 00000 n 
+0000011029 00000 n 
+0000167361 00000 n 
+0000501141 00000 n 
+0000011088 00000 n 
+0000011124 00000 n 
+0000168832 00000 n 
+0000501023 00000 n 
+0000011178 00000 n 
+0000011213 00000 n 
+0000168959 00000 n 
+0000500944 00000 n 
+0000011272 00000 n 
+0000011307 00000 n 
+0000170101 00000 n 
+0000500865 00000 n 
+0000011366 00000 n 
+0000011402 00000 n 
+0000170228 00000 n 
+0000500734 00000 n 
+0000011451 00000 n 
+0000011501 00000 n 
+0000171754 00000 n 
+0000500616 00000 n 
+0000011555 00000 n 
+0000011595 00000 n 
+0000171881 00000 n 
+0000500537 00000 n 
+0000011654 00000 n 
+0000011689 00000 n 
+0000172008 00000 n 
+0000500458 00000 n 
+0000011748 00000 n 
+0000011784 00000 n 
+0000173515 00000 n 
+0000500340 00000 n 
+0000011838 00000 n 
+0000011883 00000 n 
+0000173642 00000 n 
+0000500261 00000 n 
+0000011942 00000 n 
+0000011977 00000 n 
+0000173769 00000 n 
+0000500182 00000 n 
+0000012036 00000 n 
+0000012072 00000 n 
+0000173896 00000 n 
+0000500051 00000 n 
+0000012121 00000 n 
+0000012191 00000 n 
+0000174023 00000 n 
+0000499972 00000 n 
+0000012245 00000 n 
+0000012282 00000 n 
+0000175597 00000 n 
+0000499879 00000 n 
+0000012336 00000 n 
+0000012370 00000 n 
+0000177254 00000 n 
+0000499800 00000 n 
+0000012424 00000 n 
+0000012458 00000 n 
+0000179207 00000 n 
+0000499683 00000 n 
+0000012507 00000 n 
+0000012544 00000 n 
+0000179334 00000 n 
+0000499565 00000 n 
+0000012598 00000 n 
+0000012639 00000 n 
+0000179461 00000 n 
+0000499486 00000 n 
+0000012698 00000 n 
+0000012751 00000 n 
+0000180591 00000 n 
+0000499407 00000 n 
+0000012810 00000 n 
+0000012856 00000 n 
+0000182834 00000 n 
+0000499289 00000 n 
+0000012910 00000 n 
+0000012951 00000 n 
+0000182960 00000 n 
+0000499210 00000 n 
+0000013010 00000 n 
+0000013058 00000 n 
+0000183087 00000 n 
+0000499117 00000 n 
+0000013117 00000 n 
+0000013166 00000 n 
+0000183214 00000 n 
+0000499038 00000 n 
+0000013225 00000 n 
+0000013275 00000 n 
+0000184115 00000 n 
+0000498906 00000 n 
+0000013319 00000 n 
+0000013359 00000 n 
+0000186272 00000 n 
+0000498788 00000 n 
+0000013406 00000 n 
+0000013454 00000 n 
+0000186398 00000 n 
+0000498709 00000 n 
+0000013503 00000 n 
+0000013539 00000 n 
+0000186716 00000 n 
+0000498616 00000 n 
+0000013588 00000 n 
+0000013636 00000 n 
+0000189178 00000 n 
+0000498523 00000 n 
+0000013685 00000 n 
+0000013723 00000 n 
+0000189689 00000 n 
+0000498430 00000 n 
+0000013772 00000 n 
+0000013810 00000 n 
+0000192463 00000 n 
+0000498351 00000 n 
+0000013859 00000 n 
+0000013894 00000 n 
+0000193748 00000 n 
+0000498219 00000 n 
+0000013941 00000 n 
+0000013993 00000 n 
+0000193874 00000 n 
+0000498140 00000 n 
+0000014042 00000 n 
+0000014083 00000 n 
+0000196315 00000 n 
+0000498047 00000 n 
+0000014132 00000 n 
+0000014175 00000 n 
+0000199751 00000 n 
+0000497954 00000 n 
+0000014224 00000 n 
+0000014270 00000 n 
+0000199878 00000 n 
+0000497861 00000 n 
+0000014319 00000 n 
+0000014365 00000 n 
+0000201877 00000 n 
+0000497743 00000 n 
+0000014414 00000 n 
+0000014451 00000 n 
+0000202004 00000 n 
+0000497664 00000 n 
+0000014505 00000 n 
+0000014542 00000 n 
+0000203715 00000 n 
+0000497571 00000 n 
+0000014596 00000 n 
+0000014632 00000 n 
+0000203840 00000 n 
+0000497492 00000 n 
+0000014686 00000 n 
+0000014739 00000 n 
+0000205601 00000 n 
+0000497360 00000 n 
+0000014786 00000 n 
+0000014831 00000 n 
+0000205727 00000 n 
+0000497281 00000 n 
+0000014880 00000 n 
+0000014922 00000 n 
+0000205854 00000 n 
+0000497188 00000 n 
+0000014971 00000 n 
+0000015012 00000 n 
+0000211113 00000 n 
+0000497055 00000 n 
+0000015061 00000 n 
+0000015106 00000 n 
+0000211240 00000 n 
+0000496976 00000 n 
+0000015160 00000 n 
+0000015201 00000 n 
+0000211367 00000 n 
+0000496883 00000 n 
+0000015255 00000 n 
+0000015296 00000 n 
+0000211494 00000 n 
+0000496790 00000 n 
+0000015350 00000 n 
+0000015396 00000 n 
+0000211621 00000 n 
+0000496697 00000 n 
+0000015450 00000 n 
+0000015491 00000 n 
+0000211748 00000 n 
 0000496604 00000 n 
-0000015161 00000 n 
-0000015202 00000 n 
-0000211349 00000 n 
+0000015545 00000 n 
+0000015586 00000 n 
+0000211874 00000 n 
 0000496511 00000 n 
-0000015256 00000 n 
-0000015297 00000 n 
-0000211476 00000 n 
+0000015640 00000 n 
+0000015682 00000 n 
+0000213166 00000 n 
 0000496418 00000 n 
-0000015351 00000 n 
-0000015397 00000 n 
-0000211603 00000 n 
+0000015736 00000 n 
+0000015778 00000 n 
+0000213293 00000 n 
 0000496325 00000 n 
-0000015451 00000 n 
-0000015492 00000 n 
-0000211730 00000 n 
+0000015832 00000 n 
+0000015878 00000 n 
+0000213420 00000 n 
 0000496232 00000 n 
-0000015546 00000 n 
-0000015587 00000 n 
-0000211856 00000 n 
+0000015932 00000 n 
+0000015978 00000 n 
+0000213547 00000 n 
 0000496139 00000 n 
-0000015641 00000 n 
-0000015683 00000 n 
-0000213148 00000 n 
+0000016033 00000 n 
+0000016081 00000 n 
+0000213674 00000 n 
 0000496046 00000 n 
-0000015737 00000 n 
-0000015779 00000 n 
-0000213275 00000 n 
+0000016136 00000 n 
+0000016184 00000 n 
+0000213801 00000 n 
 0000495953 00000 n 
-0000015833 00000 n 
-0000015879 00000 n 
-0000213402 00000 n 
+0000016239 00000 n 
+0000016282 00000 n 
+0000213928 00000 n 
 0000495860 00000 n 
-0000015933 00000 n 
-0000015979 00000 n 
-0000213529 00000 n 
+0000016337 00000 n 
+0000016380 00000 n 
+0000215662 00000 n 
 0000495767 00000 n 
-0000016034 00000 n 
-0000016082 00000 n 
-0000213656 00000 n 
-0000495674 00000 n 
-0000016137 00000 n 
-0000016185 00000 n 
-0000213783 00000 n 
-0000495581 00000 n 
-0000016240 00000 n 
-0000016283 00000 n 
-0000213910 00000 n 
-0000495488 00000 n 
-0000016338 00000 n 
-0000016381 00000 n 
-0000215644 00000 n 
-0000495395 00000 n 
-0000016436 00000 n 
-0000016484 00000 n 
-0000215771 00000 n 
-0000495316 00000 n 
-0000016539 00000 n 
-0000016587 00000 n 
-0000215897 00000 n 
-0000495184 00000 n 
-0000016636 00000 n 
-0000016681 00000 n 
-0000216024 00000 n 
-0000495105 00000 n 
-0000016735 00000 n 
-0000016771 00000 n 
-0000219206 00000 n 
-0000495026 00000 n 
-0000016825 00000 n 
-0000016863 00000 n 
-0000221722 00000 n 
-0000494947 00000 n 
-0000016912 00000 n 
-0000016956 00000 n 
-0000225708 00000 n 
-0000494854 00000 n 
-0000017003 00000 n 
-0000017051 00000 n 
-0000235276 00000 n 
-0000494761 00000 n 
-0000017098 00000 n 
-0000017145 00000 n 
-0000239466 00000 n 
-0000494643 00000 n 
-0000017192 00000 n 
-0000017229 00000 n 
-0000239592 00000 n 
-0000494564 00000 n 
-0000017278 00000 n 
-0000017312 00000 n 
-0000239719 00000 n 
-0000494432 00000 n 
-0000017361 00000 n 
-0000017400 00000 n 
-0000239845 00000 n 
-0000494353 00000 n 
-0000017454 00000 n 
-0000017494 00000 n 
-0000242372 00000 n 
-0000494274 00000 n 
-0000017548 00000 n 
-0000017588 00000 n 
-0000242499 00000 n 
-0000494156 00000 n 
-0000017637 00000 n 
-0000017676 00000 n 
-0000244584 00000 n 
-0000494091 00000 n 
-0000017730 00000 n 
-0000017795 00000 n 
-0000247604 00000 n 
-0000493958 00000 n 
-0000017839 00000 n 
-0000017884 00000 n 
-0000249978 00000 n 
-0000493840 00000 n 
-0000017931 00000 n 
-0000017982 00000 n 
-0000250104 00000 n 
-0000493761 00000 n 
-0000018031 00000 n 
-0000018060 00000 n 
-0000250231 00000 n 
-0000493682 00000 n 
-0000018109 00000 n 
-0000018149 00000 n 
-0000253410 00000 n 
-0000493550 00000 n 
-0000018197 00000 n 
-0000018239 00000 n 
-0000253536 00000 n 
-0000493432 00000 n 
-0000018289 00000 n 
-0000018343 00000 n 
-0000256165 00000 n 
-0000493353 00000 n 
-0000018398 00000 n 
-0000018446 00000 n 
-0000263721 00000 n 
-0000493274 00000 n 
-0000018501 00000 n 
-0000018557 00000 n 
-0000265610 00000 n 
-0000493142 00000 n 
-0000018607 00000 n 
-0000018695 00000 n 
-0000265737 00000 n 
-0000493063 00000 n 
-0000018750 00000 n 
-0000018808 00000 n 
-0000267387 00000 n 
-0000492984 00000 n 
-0000018863 00000 n 
-0000018932 00000 n 
-0000274915 00000 n 
-0000492852 00000 n 
-0000018982 00000 n 
-0000019041 00000 n 
-0000275042 00000 n 
-0000492787 00000 n 
-0000019096 00000 n 
-0000019164 00000 n 
-0000284796 00000 n 
-0000492669 00000 n 
-0000019214 00000 n 
-0000019249 00000 n 
-0000284922 00000 n 
-0000492590 00000 n 
-0000019304 00000 n 
-0000019362 00000 n 
-0000286403 00000 n 
-0000492511 00000 n 
-0000019417 00000 n 
-0000019470 00000 n 
-0000287942 00000 n 
-0000492379 00000 n 
-0000019518 00000 n 
-0000019566 00000 n 
-0000288068 00000 n 
-0000492261 00000 n 
-0000019616 00000 n 
-0000019657 00000 n 
-0000290669 00000 n 
-0000492182 00000 n 
-0000019712 00000 n 
-0000019761 00000 n 
-0000291052 00000 n 
-0000492089 00000 n 
-0000019816 00000 n 
-0000019872 00000 n 
-0000292336 00000 n 
-0000492010 00000 n 
-0000019927 00000 n 
-0000019978 00000 n 
-0000294012 00000 n 
-0000491892 00000 n 
-0000020028 00000 n 
-0000020059 00000 n 
-0000294395 00000 n 
-0000491827 00000 n 
-0000020114 00000 n 
-0000020155 00000 n 
-0000296033 00000 n 
-0000491695 00000 n 
-0000020203 00000 n 
-0000020254 00000 n 
-0000296158 00000 n 
-0000491630 00000 n 
-0000020304 00000 n 
-0000020342 00000 n 
-0000299537 00000 n 
-0000491512 00000 n 
-0000020390 00000 n 
-0000020454 00000 n 
-0000299663 00000 n 
-0000491433 00000 n 
-0000020504 00000 n 
-0000020541 00000 n 
-0000299790 00000 n 
-0000491340 00000 n 
-0000020591 00000 n 
-0000020633 00000 n 
-0000302400 00000 n 
-0000491261 00000 n 
-0000020683 00000 n 
-0000020726 00000 n 
-0000307830 00000 n 
-0000491128 00000 n 
-0000020770 00000 n 
-0000020819 00000 n 
-0000310141 00000 n 
-0000491049 00000 n 
-0000020867 00000 n 
-0000020924 00000 n 
-0000314932 00000 n 
-0000490931 00000 n 
-0000020972 00000 n 
-0000021027 00000 n 
-0000315058 00000 n 
-0000490852 00000 n 
-0000021077 00000 n 
-0000021110 00000 n 
-0000315185 00000 n 
-0000490759 00000 n 
-0000021160 00000 n 
-0000021224 00000 n 
-0000317822 00000 n 
-0000490666 00000 n 
-0000021274 00000 n 
-0000021316 00000 n 
-0000322937 00000 n 
-0000490573 00000 n 
-0000021366 00000 n 
-0000021441 00000 n 
-0000323063 00000 n 
-0000490494 00000 n 
-0000021491 00000 n 
-0000021551 00000 n 
-0000329908 00000 n 
-0000490375 00000 n 
-0000021595 00000 n 
-0000021632 00000 n 
-0000331900 00000 n 
-0000490271 00000 n 
-0000021680 00000 n 
-0000021729 00000 n 
-0000332026 00000 n 
-0000490192 00000 n 
-0000021779 00000 n 
-0000021814 00000 n 
-0000332153 00000 n 
-0000490113 00000 n 
-0000021864 00000 n 
-0000021896 00000 n 
-0000022209 00000 n 
-0000022445 00000 n 
-0000021948 00000 n 
-0000022321 00000 n 
-0000022383 00000 n 
-0000483481 00000 n 
-0000484504 00000 n 
-0000486253 00000 n 
-0000024523 00000 n 
-0000024693 00000 n 
-0000023838 00000 n 
-0000025057 00000 n 
-0000023690 00000 n 
-0000022530 00000 n 
-0000483335 00000 n 
-0000485815 00000 n 
-0000484359 00000 n 
-0000483922 00000 n 
-0000485961 00000 n 
-0000024875 00000 n 
-0000483627 00000 n 
-0000485083 00000 n 
-0000024338 00000 n 
-0000024455 00000 n 
-0000024502 00000 n 
-0000026450 00000 n 
-0000026600 00000 n 
-0000026751 00000 n 
-0000026926 00000 n 
-0000027100 00000 n 
-0000027269 00000 n 
-0000027424 00000 n 
-0000027572 00000 n 
-0000027724 00000 n 
-0000027909 00000 n 
-0000028069 00000 n 
-0000028222 00000 n 
-0000028392 00000 n 
-0000028542 00000 n 
-0000028713 00000 n 
-0000030302 00000 n 
-0000029112 00000 n 
-0000026206 00000 n 
-0000025235 00000 n 
-0000028866 00000 n 
-0000485521 00000 n 
-0000028988 00000 n 
-0000029050 00000 n 
-0000485669 00000 n 
-0000083157 00000 n 
-0000098390 00000 n 
-0000186317 00000 n 
-0000193793 00000 n 
-0000205646 00000 n 
-0000225771 00000 n 
-0000235339 00000 n 
-0000239529 00000 n 
-0000250041 00000 n 
-0000030475 00000 n 
-0000030646 00000 n 
-0000030791 00000 n 
-0000030958 00000 n 
-0000031128 00000 n 
-0000031277 00000 n 
-0000031422 00000 n 
-0000031573 00000 n 
-0000031743 00000 n 
-0000031890 00000 n 
-0000032041 00000 n 
-0000032254 00000 n 
-0000030082 00000 n 
-0000029249 00000 n 
-0000032192 00000 n 
-0000485376 00000 n 
-0000253473 00000 n 
-0000288005 00000 n 
-0000296096 00000 n 
-0000299600 00000 n 
-0000310204 00000 n 
-0000314995 00000 n 
-0000331963 00000 n 
-0000032665 00000 n 
-0000032491 00000 n 
-0000032391 00000 n 
-0000032603 00000 n 
-0000034165 00000 n 
-0000034317 00000 n 
-0000034466 00000 n 
-0000034618 00000 n 
-0000034772 00000 n 
-0000034926 00000 n 
-0000035080 00000 n 
-0000035234 00000 n 
-0000035387 00000 n 
-0000035541 00000 n 
-0000035695 00000 n 
-0000035849 00000 n 
-0000036003 00000 n 
-0000036155 00000 n 
-0000036309 00000 n 
-0000036468 00000 n 
-0000036626 00000 n 
-0000036780 00000 n 
-0000036939 00000 n 
-0000037098 00000 n 
-0000037262 00000 n 
-0000037426 00000 n 
-0000037584 00000 n 
-0000037748 00000 n 
-0000037912 00000 n 
-0000038076 00000 n 
-0000038240 00000 n 
-0000038403 00000 n 
-0000038567 00000 n 
-0000041383 00000 n 
-0000038794 00000 n 
-0000033809 00000 n 
-0000032706 00000 n 
-0000038731 00000 n 
-0000041547 00000 n 
-0000041712 00000 n 
-0000041877 00000 n 
-0000042043 00000 n 
-0000042209 00000 n 
-0000042375 00000 n 
-0000042541 00000 n 
-0000042707 00000 n 
-0000042873 00000 n 
-0000043039 00000 n 
-0000043203 00000 n 
-0000043369 00000 n 
-0000043534 00000 n 
-0000043700 00000 n 
-0000043866 00000 n 
-0000044032 00000 n 
-0000044198 00000 n 
-0000044364 00000 n 
-0000044529 00000 n 
-0000044695 00000 n 
-0000044861 00000 n 
-0000045026 00000 n 
-0000045192 00000 n 
-0000045347 00000 n 
-0000045507 00000 n 
-0000045667 00000 n 
-0000045832 00000 n 
-0000045997 00000 n 
-0000046162 00000 n 
-0000046326 00000 n 
-0000046491 00000 n 
-0000048283 00000 n 
-0000046720 00000 n 
-0000040968 00000 n 
-0000038905 00000 n 
-0000046656 00000 n 
-0000486371 00000 n 
-0000048447 00000 n 
-0000048612 00000 n 
-0000048772 00000 n 
-0000048931 00000 n 
-0000049091 00000 n 
-0000049251 00000 n 
-0000049416 00000 n 
-0000049581 00000 n 
-0000049741 00000 n 
-0000049906 00000 n 
-0000050071 00000 n 
-0000050231 00000 n 
-0000050394 00000 n 
-0000050559 00000 n 
-0000050719 00000 n 
-0000050883 00000 n 
-0000051047 00000 n 
-0000051208 00000 n 
-0000051374 00000 n 
-0000051540 00000 n 
-0000051701 00000 n 
-0000051867 00000 n 
-0000052033 00000 n 
-0000052194 00000 n 
-0000052359 00000 n 
-0000052524 00000 n 
-0000052679 00000 n 
-0000052839 00000 n 
-0000053003 00000 n 
-0000053168 00000 n 
-0000053328 00000 n 
-0000053493 00000 n 
-0000053658 00000 n 
-0000053818 00000 n 
-0000053983 00000 n 
-0000054148 00000 n 
-0000054308 00000 n 
-0000054472 00000 n 
-0000054637 00000 n 
-0000056633 00000 n 
-0000054861 00000 n 
-0000047795 00000 n 
-0000046819 00000 n 
-0000054797 00000 n 
-0000056797 00000 n 
-0000056962 00000 n 
-0000057117 00000 n 
-0000057276 00000 n 
-0000057441 00000 n 
-0000057606 00000 n 
-0000057766 00000 n 
-0000057931 00000 n 
-0000058096 00000 n 
-0000058251 00000 n 
-0000058411 00000 n 
-0000058576 00000 n 
-0000058739 00000 n 
-0000058899 00000 n 
-0000059064 00000 n 
-0000059228 00000 n 
-0000059383 00000 n 
-0000059543 00000 n 
-0000059703 00000 n 
-0000059863 00000 n 
-0000060017 00000 n 
-0000060177 00000 n 
-0000060342 00000 n 
-0000060507 00000 n 
-0000060666 00000 n 
-0000060831 00000 n 
-0000060996 00000 n 
-0000061161 00000 n 
-0000061310 00000 n 
-0000061462 00000 n 
-0000061617 00000 n 
-0000061772 00000 n 
-0000061927 00000 n 
-0000062082 00000 n 
-0000062236 00000 n 
-0000064152 00000 n 
-0000062453 00000 n 
-0000056181 00000 n 
-0000054960 00000 n 
-0000062389 00000 n 
-0000064306 00000 n 
-0000064461 00000 n 
-0000064616 00000 n 
-0000064771 00000 n 
-0000064926 00000 n 
-0000065086 00000 n 
-0000065245 00000 n 
-0000065405 00000 n 
-0000065557 00000 n 
-0000065712 00000 n 
-0000065866 00000 n 
-0000066021 00000 n 
-0000066181 00000 n 
-0000066341 00000 n 
-0000066501 00000 n 
-0000066661 00000 n 
-0000066820 00000 n 
-0000066980 00000 n 
-0000067139 00000 n 
-0000067299 00000 n 
-0000067459 00000 n 
-0000067620 00000 n 
-0000067781 00000 n 
-0000067942 00000 n 
-0000068102 00000 n 
-0000068263 00000 n 
-0000068423 00000 n 
-0000068578 00000 n 
-0000068738 00000 n 
-0000068898 00000 n 
-0000069053 00000 n 
-0000069206 00000 n 
-0000069359 00000 n 
-0000069512 00000 n 
-0000069667 00000 n 
-0000071883 00000 n 
-0000069886 00000 n 
-0000063700 00000 n 
-0000062578 00000 n 
-0000069822 00000 n 
-0000072042 00000 n 
-0000072202 00000 n 
-0000072356 00000 n 
-0000072516 00000 n 
-0000072664 00000 n 
-0000072817 00000 n 
-0000072972 00000 n 
-0000073127 00000 n 
-0000073281 00000 n 
-0000073437 00000 n 
-0000073598 00000 n 
-0000073758 00000 n 
-0000073913 00000 n 
-0000074074 00000 n 
-0000074235 00000 n 
-0000074391 00000 n 
-0000074552 00000 n 
-0000074706 00000 n 
-0000074867 00000 n 
-0000075026 00000 n 
-0000075180 00000 n 
-0000075336 00000 n 
-0000075496 00000 n 
-0000075657 00000 n 
-0000075817 00000 n 
-0000075973 00000 n 
-0000076134 00000 n 
-0000076288 00000 n 
-0000076443 00000 n 
-0000076597 00000 n 
-0000076753 00000 n 
-0000076908 00000 n 
-0000078222 00000 n 
-0000078372 00000 n 
-0000077128 00000 n 
-0000071458 00000 n 
-0000069985 00000 n 
-0000077064 00000 n 
-0000078526 00000 n 
-0000078680 00000 n 
-0000078836 00000 n 
-0000078992 00000 n 
-0000079148 00000 n 
-0000079304 00000 n 
-0000079460 00000 n 
-0000079609 00000 n 
-0000079763 00000 n 
-0000079919 00000 n 
-0000080139 00000 n 
-0000077986 00000 n 
-0000077240 00000 n 
-0000080075 00000 n 
-0000080532 00000 n 
-0000080352 00000 n 
-0000080251 00000 n 
-0000080468 00000 n 
-0000486496 00000 n 
-0000080961 00000 n 
-0000080783 00000 n 
-0000080574 00000 n 
-0000081251 00000 n 
-0000081135 00000 n 
-0000081034 00000 n 
-0000083472 00000 n 
-0000082851 00000 n 
-0000081293 00000 n 
-0000082967 00000 n 
-0000083031 00000 n 
-0000485229 00000 n 
-0000083282 00000 n 
-0000083408 00000 n 
-0000086146 00000 n 
-0000085715 00000 n 
-0000083598 00000 n 
-0000085831 00000 n 
-0000085957 00000 n 
-0000086082 00000 n 
-0000088597 00000 n 
-0000088291 00000 n 
-0000086258 00000 n 
-0000088407 00000 n 
-0000088533 00000 n 
-0000091416 00000 n 
-0000090858 00000 n 
-0000088709 00000 n 
-0000090974 00000 n 
-0000091100 00000 n 
-0000091226 00000 n 
-0000091352 00000 n 
-0000486621 00000 n 
-0000094179 00000 n 
-0000093873 00000 n 
-0000091541 00000 n 
-0000093989 00000 n 
-0000094115 00000 n 
-0000095641 00000 n 
-0000095461 00000 n 
-0000094291 00000 n 
-0000095577 00000 n 
-0000097628 00000 n 
-0000097821 00000 n 
-0000100952 00000 n 
-0000098577 00000 n 
-0000097473 00000 n 
-0000095740 00000 n 
-0000098264 00000 n 
-0000098513 00000 n 
-0000098043 00000 n 
-0000101534 00000 n 
-0000101140 00000 n 
-0000101347 00000 n 
-0000102088 00000 n 
-0000100788 00000 n 
-0000098716 00000 n 
-0000101708 00000 n 
-0000484793 00000 n 
-0000101772 00000 n 
-0000101834 00000 n 
-0000101898 00000 n 
-0000101962 00000 n 
-0000102026 00000 n 
-0000484649 00000 n 
-0000484067 00000 n 
-0000486107 00000 n 
-0000105158 00000 n 
-0000104219 00000 n 
-0000102282 00000 n 
-0000104335 00000 n 
-0000104461 00000 n 
-0000104587 00000 n 
-0000104713 00000 n 
-0000104839 00000 n 
-0000104903 00000 n 
-0000104967 00000 n 
-0000105031 00000 n 
-0000105095 00000 n 
-0000107057 00000 n 
-0000106435 00000 n 
-0000105270 00000 n 
-0000106551 00000 n 
-0000106615 00000 n 
-0000106741 00000 n 
-0000106867 00000 n 
-0000106993 00000 n 
-0000486746 00000 n 
-0000108931 00000 n 
-0000107991 00000 n 
-0000107169 00000 n 
-0000108107 00000 n 
-0000108233 00000 n 
-0000108359 00000 n 
-0000108486 00000 n 
-0000108613 00000 n 
-0000108740 00000 n 
-0000108867 00000 n 
-0000110772 00000 n 
-0000109957 00000 n 
-0000109043 00000 n 
-0000110073 00000 n 
-0000110200 00000 n 
-0000110327 00000 n 
-0000110454 00000 n 
-0000110581 00000 n 
-0000110708 00000 n 
-0000112205 00000 n 
-0000111771 00000 n 
-0000110897 00000 n 
-0000111887 00000 n 
-0000112014 00000 n 
-0000112141 00000 n 
-0000114203 00000 n 
-0000113517 00000 n 
-0000112317 00000 n 
-0000113633 00000 n 
-0000113760 00000 n 
-0000113887 00000 n 
-0000114013 00000 n 
-0000114139 00000 n 
-0000115774 00000 n 
-0000115340 00000 n 
-0000114341 00000 n 
-0000115456 00000 n 
-0000484937 00000 n 
-0000115583 00000 n 
-0000115710 00000 n 
-0000117835 00000 n 
-0000117274 00000 n 
-0000115926 00000 n 
-0000117390 00000 n 
-0000117517 00000 n 
-0000117644 00000 n 
-0000117771 00000 n 
-0000486871 00000 n 
-0000119260 00000 n 
-0000118953 00000 n 
-0000117960 00000 n 
-0000119069 00000 n 
-0000119196 00000 n 
-0000120686 00000 n 
-0000120252 00000 n 
-0000119385 00000 n 
-0000120368 00000 n 
-0000120495 00000 n 
-0000120622 00000 n 
-0000122292 00000 n 
-0000121858 00000 n 
-0000120811 00000 n 
-0000121974 00000 n 
-0000122101 00000 n 
-0000122228 00000 n 
-0000123267 00000 n 
-0000123087 00000 n 
-0000122417 00000 n 
-0000123203 00000 n 
-0000124424 00000 n 
-0000124244 00000 n 
-0000123366 00000 n 
-0000124360 00000 n 
-0000126443 00000 n 
-0000125882 00000 n 
-0000124523 00000 n 
-0000125998 00000 n 
-0000126125 00000 n 
-0000126252 00000 n 
-0000126379 00000 n 
-0000486996 00000 n 
-0000128226 00000 n 
-0000127919 00000 n 
-0000126581 00000 n 
-0000128035 00000 n 
-0000128162 00000 n 
-0000129899 00000 n 
-0000129719 00000 n 
-0000128351 00000 n 
-0000129835 00000 n 
-0000131848 00000 n 
-0000131414 00000 n 
-0000129998 00000 n 
-0000131530 00000 n 
-0000131657 00000 n 
-0000131784 00000 n 
-0000134089 00000 n 
-0000133909 00000 n 
-0000131973 00000 n 
-0000134025 00000 n 
-0000136531 00000 n 
-0000136097 00000 n 
-0000134214 00000 n 
-0000136213 00000 n 
-0000136340 00000 n 
-0000136467 00000 n 
-0000138410 00000 n 
-0000137849 00000 n 
-0000136656 00000 n 
-0000137965 00000 n 
-0000138092 00000 n 
-0000138219 00000 n 
-0000138346 00000 n 
-0000487121 00000 n 
-0000140199 00000 n 
-0000139766 00000 n 
-0000138535 00000 n 
-0000139882 00000 n 
-0000140008 00000 n 
-0000140135 00000 n 
-0000141784 00000 n 
-0000141477 00000 n 
-0000140311 00000 n 
-0000141593 00000 n 
-0000141720 00000 n 
-0000143991 00000 n 
-0000143430 00000 n 
-0000141896 00000 n 
-0000143546 00000 n 
-0000143673 00000 n 
-0000143800 00000 n 
-0000143927 00000 n 
-0000145701 00000 n 
-0000145394 00000 n 
-0000144129 00000 n 
-0000145510 00000 n 
-0000483186 00000 n 
-0000145637 00000 n 
-0000147430 00000 n 
-0000146996 00000 n 
-0000145853 00000 n 
-0000147112 00000 n 
-0000147239 00000 n 
-0000147366 00000 n 
-0000149164 00000 n 
-0000148477 00000 n 
-0000147568 00000 n 
-0000148593 00000 n 
-0000148720 00000 n 
-0000148846 00000 n 
-0000148973 00000 n 
-0000149100 00000 n 
-0000487246 00000 n 
-0000150911 00000 n 
-0000149970 00000 n 
-0000149302 00000 n 
-0000150086 00000 n 
-0000150212 00000 n 
-0000150339 00000 n 
-0000150466 00000 n 
-0000150593 00000 n 
-0000150720 00000 n 
-0000150847 00000 n 
-0000152748 00000 n 
-0000151935 00000 n 
-0000151036 00000 n 
-0000152051 00000 n 
-0000152178 00000 n 
-0000152303 00000 n 
-0000152430 00000 n 
-0000152557 00000 n 
-0000152684 00000 n 
-0000154617 00000 n 
-0000154056 00000 n 
-0000152873 00000 n 
-0000154172 00000 n 
-0000154299 00000 n 
-0000154426 00000 n 
-0000154553 00000 n 
-0000156134 00000 n 
-0000155700 00000 n 
-0000154742 00000 n 
-0000155816 00000 n 
-0000155943 00000 n 
-0000156070 00000 n 
-0000157975 00000 n 
-0000157669 00000 n 
-0000156246 00000 n 
-0000157785 00000 n 
-0000157911 00000 n 
-0000159927 00000 n 
-0000159241 00000 n 
-0000158113 00000 n 
-0000159357 00000 n 
-0000159484 00000 n 
-0000159611 00000 n 
-0000159738 00000 n 
-0000159863 00000 n 
-0000487371 00000 n 
-0000162122 00000 n 
-0000161434 00000 n 
-0000160052 00000 n 
-0000161550 00000 n 
-0000161677 00000 n 
-0000161804 00000 n 
-0000161931 00000 n 
-0000162058 00000 n 
-0000163905 00000 n 
-0000163346 00000 n 
-0000162247 00000 n 
-0000163462 00000 n 
-0000163589 00000 n 
-0000163715 00000 n 
-0000163841 00000 n 
-0000166358 00000 n 
-0000165417 00000 n 
-0000164043 00000 n 
-0000165533 00000 n 
-0000165660 00000 n 
-0000165787 00000 n 
-0000165914 00000 n 
-0000166040 00000 n 
-0000166167 00000 n 
-0000166294 00000 n 
-0000167470 00000 n 
-0000167163 00000 n 
-0000166522 00000 n 
-0000167279 00000 n 
-0000167406 00000 n 
-0000169068 00000 n 
-0000168634 00000 n 
-0000167582 00000 n 
-0000168750 00000 n 
-0000168877 00000 n 
-0000169004 00000 n 
-0000170337 00000 n 
-0000169903 00000 n 
-0000169206 00000 n 
-0000170019 00000 n 
-0000170146 00000 n 
-0000170273 00000 n 
-0000487496 00000 n 
-0000172117 00000 n 
-0000171556 00000 n 
-0000170449 00000 n 
-0000171672 00000 n 
-0000171799 00000 n 
-0000171926 00000 n 
-0000172053 00000 n 
-0000174132 00000 n 
-0000173317 00000 n 
-0000172242 00000 n 
-0000173433 00000 n 
-0000173560 00000 n 
-0000173687 00000 n 
-0000173814 00000 n 
-0000173941 00000 n 
-0000174068 00000 n 
-0000175706 00000 n 
-0000175399 00000 n 
-0000174257 00000 n 
-0000175515 00000 n 
-0000175642 00000 n 
-0000177363 00000 n 
-0000177056 00000 n 
-0000175831 00000 n 
-0000177172 00000 n 
-0000177299 00000 n 
-0000179570 00000 n 
-0000179009 00000 n 
-0000177488 00000 n 
-0000179125 00000 n 
-0000179252 00000 n 
-0000179379 00000 n 
-0000179506 00000 n 
-0000180700 00000 n 
-0000180393 00000 n 
-0000179682 00000 n 
-0000180509 00000 n 
-0000180636 00000 n 
-0000487621 00000 n 
-0000183323 00000 n 
-0000182636 00000 n 
-0000180812 00000 n 
-0000182752 00000 n 
-0000182879 00000 n 
-0000183005 00000 n 
-0000183132 00000 n 
-0000183259 00000 n 
-0000183729 00000 n 
-0000183549 00000 n 
-0000183448 00000 n 
-0000183665 00000 n 
-0000184160 00000 n 
-0000183981 00000 n 
-0000183771 00000 n 
-0000184450 00000 n 
-0000184334 00000 n 
-0000184233 00000 n 
-0000186824 00000 n 
-0000186010 00000 n 
-0000184492 00000 n 
-0000186126 00000 n 
-0000186190 00000 n 
-0000186443 00000 n 
-0000186507 00000 n 
-0000186571 00000 n 
-0000186634 00000 n 
-0000186760 00000 n 
-0000189798 00000 n 
-0000188980 00000 n 
-0000186937 00000 n 
-0000189096 00000 n 
-0000189223 00000 n 
-0000189287 00000 n 
-0000189351 00000 n 
-0000189415 00000 n 
-0000189479 00000 n 
-0000189543 00000 n 
-0000189607 00000 n 
-0000189734 00000 n 
-0000487746 00000 n 
-0000192572 00000 n 
-0000192265 00000 n 
-0000189910 00000 n 
-0000192381 00000 n 
-0000192508 00000 n 
-0000193983 00000 n 
-0000193550 00000 n 
-0000192684 00000 n 
-0000193666 00000 n 
-0000193919 00000 n 
-0000196424 00000 n 
-0000195863 00000 n 
-0000194109 00000 n 
-0000195979 00000 n 
-0000196043 00000 n 
-0000196107 00000 n 
-0000196171 00000 n 
-0000196235 00000 n 
-0000196360 00000 n 
-0000198215 00000 n 
-0000198035 00000 n 
-0000196549 00000 n 
-0000198151 00000 n 
-0000199987 00000 n 
-0000199553 00000 n 
-0000198340 00000 n 
-0000199669 00000 n 
-0000199796 00000 n 
-0000199923 00000 n 
-0000202113 00000 n 
-0000201487 00000 n 
-0000200112 00000 n 
-0000201603 00000 n 
-0000201667 00000 n 
-0000201731 00000 n 
-0000201795 00000 n 
-0000201922 00000 n 
-0000202049 00000 n 
-0000487871 00000 n 
-0000203947 00000 n 
-0000203517 00000 n 
-0000202238 00000 n 
-0000203633 00000 n 
-0000203760 00000 n 
-0000203883 00000 n 
-0000206219 00000 n 
-0000205403 00000 n 
-0000204059 00000 n 
-0000205519 00000 n 
-0000205772 00000 n 
-0000205899 00000 n 
-0000205963 00000 n 
-0000206027 00000 n 
-0000206091 00000 n 
-0000206155 00000 n 
-0000209535 00000 n 
-0000209037 00000 n 
-0000206332 00000 n 
-0000209153 00000 n 
-0000209217 00000 n 
-0000209281 00000 n 
-0000209345 00000 n 
-0000209409 00000 n 
-0000209471 00000 n 
-0000211983 00000 n 
-0000210787 00000 n 
-0000209634 00000 n 
-0000210903 00000 n 
-0000210967 00000 n 
-0000211031 00000 n 
-0000211158 00000 n 
-0000211285 00000 n 
-0000211412 00000 n 
-0000211539 00000 n 
-0000211666 00000 n 
-0000211792 00000 n 
-0000211919 00000 n 
-0000214036 00000 n 
-0000212968 00000 n 
-0000212095 00000 n 
-0000213084 00000 n 
-0000213211 00000 n 
-0000213338 00000 n 
-0000213465 00000 n 
-0000213592 00000 n 
-0000213719 00000 n 
-0000213846 00000 n 
-0000213973 00000 n 
-0000216534 00000 n 
-0000215464 00000 n 
-0000214148 00000 n 
-0000215580 00000 n 
-0000215707 00000 n 
-0000215834 00000 n 
-0000215960 00000 n 
-0000216087 00000 n 
-0000216151 00000 n 
-0000216215 00000 n 
-0000216279 00000 n 
-0000216343 00000 n 
-0000216407 00000 n 
-0000216471 00000 n 
-0000487996 00000 n 
-0000219397 00000 n 
-0000218515 00000 n 
-0000216659 00000 n 
-0000218631 00000 n 
-0000218695 00000 n 
-0000218759 00000 n 
-0000218823 00000 n 
-0000218886 00000 n 
-0000218950 00000 n 
-0000219014 00000 n 
-0000219078 00000 n 
-0000219142 00000 n 
-0000219269 00000 n 
-0000219333 00000 n 
-0000222233 00000 n 
-0000221414 00000 n 
-0000219509 00000 n 
-0000221530 00000 n 
-0000221594 00000 n 
-0000221658 00000 n 
-0000221785 00000 n 
-0000221849 00000 n 
-0000221913 00000 n 
-0000221977 00000 n 
-0000222041 00000 n 
-0000222105 00000 n 
-0000222169 00000 n 
-0000223302 00000 n 
-0000222866 00000 n 
-0000222345 00000 n 
-0000222982 00000 n 
-0000223046 00000 n 
-0000223110 00000 n 
-0000223174 00000 n 
-0000223238 00000 n 
-0000225254 00000 n 
-0000225454 00000 n 
-0000225834 00000 n 
-0000225108 00000 n 
-0000223401 00000 n 
-0000225644 00000 n 
-0000229278 00000 n 
-0000228268 00000 n 
-0000225973 00000 n 
-0000228384 00000 n 
-0000228448 00000 n 
-0000228512 00000 n 
-0000228576 00000 n 
-0000228640 00000 n 
-0000228704 00000 n 
-0000228768 00000 n 
-0000228831 00000 n 
-0000228895 00000 n 
-0000228959 00000 n 
-0000229023 00000 n 
-0000229087 00000 n 
-0000229150 00000 n 
-0000229214 00000 n 
-0000232659 00000 n 
-0000231712 00000 n 
-0000229364 00000 n 
-0000231828 00000 n 
-0000231892 00000 n 
-0000231956 00000 n 
-0000232020 00000 n 
-0000232084 00000 n 
-0000232148 00000 n 
-0000232212 00000 n 
-0000232276 00000 n 
-0000232340 00000 n 
-0000232403 00000 n 
-0000232467 00000 n 
-0000232531 00000 n 
-0000232595 00000 n 
-0000488121 00000 n 
-0000233393 00000 n 
-0000233213 00000 n 
-0000232758 00000 n 
-0000233329 00000 n 
-0000235402 00000 n 
-0000235096 00000 n 
-0000233479 00000 n 
-0000235212 00000 n 
-0000237433 00000 n 
-0000237607 00000 n 
-0000237852 00000 n 
-0000237287 00000 n 
-0000235541 00000 n 
-0000237788 00000 n 
-0000239972 00000 n 
-0000239286 00000 n 
-0000238007 00000 n 
-0000239402 00000 n 
-0000239655 00000 n 
-0000239781 00000 n 
-0000239908 00000 n 
-0000242625 00000 n 
-0000242192 00000 n 
-0000240098 00000 n 
-0000242308 00000 n 
-0000242435 00000 n 
-0000242562 00000 n 
-0000483774 00000 n 
-0000245668 00000 n 
-0000244711 00000 n 
-0000244404 00000 n 
-0000242764 00000 n 
-0000244520 00000 n 
-0000244647 00000 n 
-0000488246 00000 n 
-0000246811 00000 n 
-0000245552 00000 n 
-0000244850 00000 n 
-0000246747 00000 n 
-0000246052 00000 n 
-0000246170 00000 n 
-0000246218 00000 n 
-0000246726 00000 n 
-0000247233 00000 n 
-0000247053 00000 n 
-0000246952 00000 n 
-0000247169 00000 n 
-0000247667 00000 n 
-0000247488 00000 n 
-0000247275 00000 n 
-0000247957 00000 n 
-0000247841 00000 n 
-0000247740 00000 n 
-0000250358 00000 n 
-0000249734 00000 n 
-0000247999 00000 n 
-0000249850 00000 n 
-0000249914 00000 n 
-0000250167 00000 n 
-0000250294 00000 n 
-0000251434 00000 n 
-0000251254 00000 n 
-0000250497 00000 n 
-0000251370 00000 n 
-0000488371 00000 n 
-0000253663 00000 n 
-0000253230 00000 n 
-0000251533 00000 n 
-0000253346 00000 n 
-0000253599 00000 n 
-0000256292 00000 n 
-0000255985 00000 n 
-0000253776 00000 n 
-0000256101 00000 n 
-0000256228 00000 n 
-0000259361 00000 n 
-0000259181 00000 n 
-0000256443 00000 n 
-0000259297 00000 n 
-0000260454 00000 n 
-0000260274 00000 n 
-0000259499 00000 n 
-0000260390 00000 n 
-0000261632 00000 n 
-0000261452 00000 n 
-0000260566 00000 n 
-0000261568 00000 n 
-0000263848 00000 n 
-0000263541 00000 n 
-0000261757 00000 n 
-0000263657 00000 n 
-0000263784 00000 n 
-0000488496 00000 n 
-0000265864 00000 n 
-0000265430 00000 n 
-0000263986 00000 n 
-0000265546 00000 n 
-0000265673 00000 n 
-0000265800 00000 n 
-0000267514 00000 n 
-0000267207 00000 n 
-0000265989 00000 n 
-0000267323 00000 n 
-0000267450 00000 n 
-0000269695 00000 n 
-0000269515 00000 n 
-0000267639 00000 n 
-0000269631 00000 n 
-0000271108 00000 n 
-0000270928 00000 n 
-0000269820 00000 n 
-0000271044 00000 n 
-0000272508 00000 n 
-0000272328 00000 n 
-0000271220 00000 n 
-0000272444 00000 n 
-0000275489 00000 n 
-0000274735 00000 n 
-0000272620 00000 n 
-0000274851 00000 n 
-0000274978 00000 n 
-0000275105 00000 n 
-0000275169 00000 n 
-0000275233 00000 n 
-0000275297 00000 n 
-0000275361 00000 n 
-0000275425 00000 n 
-0000488621 00000 n 
-0000276429 00000 n 
-0000276249 00000 n 
-0000275627 00000 n 
-0000276365 00000 n 
-0000277760 00000 n 
-0000277453 00000 n 
-0000276528 00000 n 
-0000277569 00000 n 
-0000277633 00000 n 
-0000277696 00000 n 
-0000280181 00000 n 
-0000280590 00000 n 
-0000280044 00000 n 
-0000277885 00000 n 
-0000280334 00000 n 
-0000280398 00000 n 
-0000280462 00000 n 
-0000280526 00000 n 
-0000281809 00000 n 
-0000281629 00000 n 
-0000280715 00000 n 
-0000281745 00000 n 
-0000282975 00000 n 
-0000282795 00000 n 
-0000281921 00000 n 
-0000282911 00000 n 
-0000285049 00000 n 
-0000284488 00000 n 
-0000283074 00000 n 
-0000284604 00000 n 
-0000284668 00000 n 
-0000284732 00000 n 
-0000284858 00000 n 
-0000284985 00000 n 
-0000488746 00000 n 
-0000286530 00000 n 
-0000286223 00000 n 
-0000285174 00000 n 
-0000286339 00000 n 
-0000286466 00000 n 
-0000288641 00000 n 
-0000287762 00000 n 
-0000286655 00000 n 
-0000287878 00000 n 
-0000288131 00000 n 
-0000288195 00000 n 
-0000288258 00000 n 
-0000288321 00000 n 
-0000288385 00000 n 
-0000288449 00000 n 
-0000288513 00000 n 
-0000288577 00000 n 
-0000291179 00000 n 
-0000290489 00000 n 
-0000288754 00000 n 
-0000290605 00000 n 
-0000290732 00000 n 
-0000290796 00000 n 
-0000290860 00000 n 
-0000290924 00000 n 
-0000290988 00000 n 
-0000291115 00000 n 
-0000292463 00000 n 
-0000292156 00000 n 
-0000291317 00000 n 
-0000292272 00000 n 
-0000292399 00000 n 
-0000294522 00000 n 
-0000293832 00000 n 
-0000292588 00000 n 
-0000293948 00000 n 
-0000294075 00000 n 
-0000294139 00000 n 
-0000294203 00000 n 
-0000294267 00000 n 
-0000294331 00000 n 
-0000294458 00000 n 
-0000296284 00000 n 
-0000295853 00000 n 
-0000294660 00000 n 
-0000295969 00000 n 
-0000296220 00000 n 
-0000488871 00000 n 
-0000297804 00000 n 
-0000297624 00000 n 
-0000296410 00000 n 
-0000297740 00000 n 
-0000299917 00000 n 
-0000299357 00000 n 
-0000297916 00000 n 
-0000299473 00000 n 
-0000299726 00000 n 
-0000299853 00000 n 
-0000302591 00000 n 
-0000302220 00000 n 
-0000300030 00000 n 
-0000302336 00000 n 
-0000302463 00000 n 
-0000302527 00000 n 
-0000304934 00000 n 
-0000304754 00000 n 
-0000302716 00000 n 
-0000304870 00000 n 
-0000307050 00000 n 
-0000306870 00000 n 
-0000305073 00000 n 
-0000306986 00000 n 
-0000307456 00000 n 
-0000307276 00000 n 
-0000307175 00000 n 
-0000307392 00000 n 
-0000488996 00000 n 
-0000307893 00000 n 
-0000307714 00000 n 
-0000307498 00000 n 
-0000308183 00000 n 
-0000308067 00000 n 
-0000307966 00000 n 
-0000310267 00000 n 
-0000309897 00000 n 
-0000308225 00000 n 
-0000310013 00000 n 
-0000310077 00000 n 
-0000312804 00000 n 
-0000312624 00000 n 
-0000310380 00000 n 
-0000312740 00000 n 
-0000484212 00000 n 
-0000313607 00000 n 
-0000313427 00000 n 
-0000312930 00000 n 
-0000313543 00000 n 
-0000315312 00000 n 
-0000314752 00000 n 
-0000313706 00000 n 
-0000314868 00000 n 
-0000315121 00000 n 
-0000315248 00000 n 
-0000489121 00000 n 
-0000317949 00000 n 
-0000317642 00000 n 
-0000315451 00000 n 
-0000317758 00000 n 
-0000317885 00000 n 
-0000320491 00000 n 
-0000319991 00000 n 
-0000318087 00000 n 
-0000320107 00000 n 
-0000320171 00000 n 
-0000320235 00000 n 
-0000320299 00000 n 
-0000320363 00000 n 
-0000320427 00000 n 
-0000323190 00000 n 
-0000322565 00000 n 
-0000320630 00000 n 
-0000322681 00000 n 
-0000322745 00000 n 
-0000322809 00000 n 
-0000322873 00000 n 
-0000323000 00000 n 
-0000323126 00000 n 
-0000325061 00000 n 
-0000324881 00000 n 
-0000323315 00000 n 
-0000324997 00000 n 
-0000327743 00000 n 
-0000327563 00000 n 
-0000325186 00000 n 
-0000327679 00000 n 
-0000329461 00000 n 
-0000329281 00000 n 
-0000327868 00000 n 
-0000329397 00000 n 
-0000489246 00000 n 
-0000329971 00000 n 
-0000329792 00000 n 
-0000329586 00000 n 
-0000330261 00000 n 
-0000330145 00000 n 
-0000330044 00000 n 
-0000332279 00000 n 
-0000331656 00000 n 
-0000330303 00000 n 
-0000331772 00000 n 
-0000331836 00000 n 
-0000332089 00000 n 
-0000332216 00000 n 
-0000332436 00000 n 
-0000332462 00000 n 
-0000332790 00000 n 
-0000332814 00000 n 
-0000332838 00000 n 
-0000333170 00000 n 
-0000333208 00000 n 
-0000333240 00000 n 
-0000333272 00000 n 
-0000333698 00000 n 
-0000334366 00000 n 
-0000334920 00000 n 
-0000335563 00000 n 
-0000336193 00000 n 
-0000336444 00000 n 
-0000336840 00000 n 
-0000336876 00000 n 
-0000337500 00000 n 
-0000338170 00000 n 
-0000338810 00000 n 
-0000339217 00000 n 
-0000339649 00000 n 
-0000341315 00000 n 
-0000341548 00000 n 
-0000357210 00000 n 
-0000357731 00000 n 
-0000364618 00000 n 
-0000364922 00000 n 
-0000368218 00000 n 
-0000368455 00000 n 
-0000375598 00000 n 
-0000375891 00000 n 
-0000377700 00000 n 
-0000377935 00000 n 
-0000379752 00000 n 
-0000379986 00000 n 
-0000381651 00000 n 
-0000381883 00000 n 
-0000399840 00000 n 
-0000400425 00000 n 
-0000404742 00000 n 
-0000405016 00000 n 
-0000406880 00000 n 
-0000407106 00000 n 
-0000408959 00000 n 
-0000409185 00000 n 
-0000411001 00000 n 
-0000411229 00000 n 
-0000417209 00000 n 
-0000417536 00000 n 
-0000421370 00000 n 
-0000421653 00000 n 
-0000430191 00000 n 
-0000430596 00000 n 
-0000443054 00000 n 
-0000443516 00000 n 
-0000444833 00000 n 
-0000445072 00000 n 
-0000461078 00000 n 
-0000461542 00000 n 
-0000477677 00000 n 
-0000478298 00000 n 
-0000482906 00000 n 
-0000489353 00000 n 
-0000489478 00000 n 
-0000489604 00000 n 
-0000489730 00000 n 
-0000489856 00000 n 
-0000489936 00000 n 
-0000490037 00000 n 
-0000510921 00000 n 
-0000511120 00000 n 
-0000511305 00000 n 
-0000511489 00000 n 
-0000511674 00000 n 
-0000511858 00000 n 
-0000512037 00000 n 
-0000512213 00000 n 
-0000512390 00000 n 
-0000512566 00000 n 
-0000512743 00000 n 
-0000512918 00000 n 
-0000513093 00000 n 
-0000513270 00000 n 
-0000513446 00000 n 
-0000513623 00000 n 
-0000513799 00000 n 
-0000513976 00000 n 
-0000514152 00000 n 
-0000514329 00000 n 
-0000514505 00000 n 
-0000514682 00000 n 
-0000514885 00000 n 
-0000515080 00000 n 
-0000515266 00000 n 
-0000515454 00000 n 
-0000515645 00000 n 
-0000515838 00000 n 
-0000516031 00000 n 
-0000516224 00000 n 
-0000516417 00000 n 
-0000516610 00000 n 
-0000516803 00000 n 
-0000516996 00000 n 
-0000517189 00000 n 
-0000517382 00000 n 
-0000517575 00000 n 
-0000517768 00000 n 
-0000517961 00000 n 
-0000518154 00000 n 
-0000518347 00000 n 
-0000518540 00000 n 
-0000518733 00000 n 
-0000518926 00000 n 
-0000519119 00000 n 
-0000519312 00000 n 
-0000519505 00000 n 
-0000519698 00000 n 
-0000519891 00000 n 
-0000520084 00000 n 
-0000520277 00000 n 
-0000520470 00000 n 
-0000520663 00000 n 
-0000520856 00000 n 
-0000521049 00000 n 
-0000521242 00000 n 
-0000521435 00000 n 
-0000521628 00000 n 
-0000521821 00000 n 
-0000522008 00000 n 
-0000522189 00000 n 
-0000522374 00000 n 
-0000522558 00000 n 
-0000522743 00000 n 
-0000522926 00000 n 
-0000523107 00000 n 
-0000523283 00000 n 
-0000523460 00000 n 
-0000523636 00000 n 
-0000523813 00000 n 
-0000523989 00000 n 
-0000524166 00000 n 
-0000524342 00000 n 
-0000524519 00000 n 
-0000524694 00000 n 
-0000524869 00000 n 
-0000525046 00000 n 
-0000525222 00000 n 
-0000525399 00000 n 
-0000525575 00000 n 
-0000525752 00000 n 
-0000525925 00000 n 
-0000526102 00000 n 
-0000526266 00000 n 
-0000526458 00000 n 
-0000526655 00000 n 
-0000526866 00000 n 
-0000527077 00000 n 
-0000527285 00000 n 
-0000527487 00000 n 
-0000527690 00000 n 
-0000527893 00000 n 
-0000528096 00000 n 
-0000528323 00000 n 
-0000528574 00000 n 
-0000528816 00000 n 
-0000529061 00000 n 
-0000529304 00000 n 
-0000529547 00000 n 
-0000529790 00000 n 
-0000530033 00000 n 
-0000530282 00000 n 
-0000530527 00000 n 
-0000530770 00000 n 
-0000531037 00000 n 
-0000531328 00000 n 
-0000531618 00000 n 
-0000531909 00000 n 
-0000532196 00000 n 
-0000532482 00000 n 
-0000532770 00000 n 
-0000533053 00000 n 
-0000533336 00000 n 
-0000533619 00000 n 
-0000533902 00000 n 
-0000534185 00000 n 
-0000534468 00000 n 
-0000534640 00000 n 
-0000534766 00000 n 
-0000534881 00000 n 
-0000534997 00000 n 
-0000535115 00000 n 
-0000535235 00000 n 
-0000535355 00000 n 
-0000535475 00000 n 
-0000535595 00000 n 
-0000535715 00000 n 
-0000535834 00000 n 
-0000535951 00000 n 
-0000536067 00000 n 
-0000536183 00000 n 
-0000536303 00000 n 
-0000536427 00000 n 
-0000536556 00000 n 
-0000536690 00000 n 
-0000536829 00000 n 
-0000536973 00000 n 
-0000537073 00000 n 
-0000537201 00000 n 
-0000537319 00000 n 
-0000537449 00000 n 
-0000537540 00000 n 
-0000537645 00000 n 
-0000537685 00000 n 
-0000537993 00000 n 
+0000016435 00000 n 
+0000016483 00000 n 
+0000215789 00000 n 
+0000495688 00000 n 
+0000016538 00000 n 
+0000016586 00000 n 
+0000215915 00000 n 
+0000495556 00000 n 
+0000016635 00000 n 
+0000016680 00000 n 
+0000216042 00000 n 
+0000495477 00000 n 
+0000016734 00000 n 
+0000016770 00000 n 
+0000219224 00000 n 
+0000495398 00000 n 
+0000016824 00000 n 
+0000016862 00000 n 
+0000221740 00000 n 
+0000495319 00000 n 
+0000016911 00000 n 
+0000016955 00000 n 
+0000225726 00000 n 
+0000495226 00000 n 
+0000017002 00000 n 
+0000017050 00000 n 
+0000235294 00000 n 
+0000495133 00000 n 
+0000017097 00000 n 
+0000017144 00000 n 
+0000239484 00000 n 
+0000495015 00000 n 
+0000017191 00000 n 
+0000017228 00000 n 
+0000239610 00000 n 
+0000494936 00000 n 
+0000017277 00000 n 
+0000017311 00000 n 
+0000239737 00000 n 
+0000494804 00000 n 
+0000017360 00000 n 
+0000017399 00000 n 
+0000239863 00000 n 
+0000494725 00000 n 
+0000017453 00000 n 
+0000017493 00000 n 
+0000242390 00000 n 
+0000494646 00000 n 
+0000017547 00000 n 
+0000017587 00000 n 
+0000242517 00000 n 
+0000494528 00000 n 
+0000017636 00000 n 
+0000017675 00000 n 
+0000244602 00000 n 
+0000494463 00000 n 
+0000017729 00000 n 
+0000017794 00000 n 
+0000247635 00000 n 
+0000494330 00000 n 
+0000017838 00000 n 
+0000017883 00000 n 
+0000250009 00000 n 
+0000494212 00000 n 
+0000017930 00000 n 
+0000017981 00000 n 
+0000250135 00000 n 
+0000494133 00000 n 
+0000018030 00000 n 
+0000018059 00000 n 
+0000250262 00000 n 
+0000494054 00000 n 
+0000018108 00000 n 
+0000018148 00000 n 
+0000253441 00000 n 
+0000493922 00000 n 
+0000018196 00000 n 
+0000018238 00000 n 
+0000253567 00000 n 
+0000493804 00000 n 
+0000018288 00000 n 
+0000018342 00000 n 
+0000256196 00000 n 
+0000493725 00000 n 
+0000018397 00000 n 
+0000018445 00000 n 
+0000263752 00000 n 
+0000493646 00000 n 
+0000018500 00000 n 
+0000018556 00000 n 
+0000265641 00000 n 
+0000493514 00000 n 
+0000018606 00000 n 
+0000018694 00000 n 
+0000265768 00000 n 
+0000493435 00000 n 
+0000018749 00000 n 
+0000018807 00000 n 
+0000267418 00000 n 
+0000493356 00000 n 
+0000018862 00000 n 
+0000018931 00000 n 
+0000274946 00000 n 
+0000493224 00000 n 
+0000018981 00000 n 
+0000019040 00000 n 
+0000275073 00000 n 
+0000493159 00000 n 
+0000019095 00000 n 
+0000019163 00000 n 
+0000284823 00000 n 
+0000493041 00000 n 
+0000019213 00000 n 
+0000019248 00000 n 
+0000284949 00000 n 
+0000492962 00000 n 
+0000019303 00000 n 
+0000019361 00000 n 
+0000286430 00000 n 
+0000492883 00000 n 
+0000019416 00000 n 
+0000019469 00000 n 
+0000287969 00000 n 
+0000492751 00000 n 
+0000019517 00000 n 
+0000019565 00000 n 
+0000288095 00000 n 
+0000492633 00000 n 
+0000019615 00000 n 
+0000019656 00000 n 
+0000290696 00000 n 
+0000492554 00000 n 
+0000019711 00000 n 
+0000019760 00000 n 
+0000291079 00000 n 
+0000492461 00000 n 
+0000019815 00000 n 
+0000019871 00000 n 
+0000292363 00000 n 
+0000492382 00000 n 
+0000019926 00000 n 
+0000019977 00000 n 
+0000294039 00000 n 
+0000492264 00000 n 
+0000020027 00000 n 
+0000020058 00000 n 
+0000294422 00000 n 
+0000492199 00000 n 
+0000020113 00000 n 
+0000020154 00000 n 
+0000296060 00000 n 
+0000492067 00000 n 
+0000020202 00000 n 
+0000020253 00000 n 
+0000296185 00000 n 
+0000492002 00000 n 
+0000020303 00000 n 
+0000020341 00000 n 
+0000299564 00000 n 
+0000491884 00000 n 
+0000020389 00000 n 
+0000020453 00000 n 
+0000299690 00000 n 
+0000491805 00000 n 
+0000020503 00000 n 
+0000020540 00000 n 
+0000299817 00000 n 
+0000491712 00000 n 
+0000020590 00000 n 
+0000020632 00000 n 
+0000302427 00000 n 
+0000491633 00000 n 
+0000020682 00000 n 
+0000020725 00000 n 
+0000307857 00000 n 
+0000491500 00000 n 
+0000020769 00000 n 
+0000020818 00000 n 
+0000310168 00000 n 
+0000491421 00000 n 
+0000020866 00000 n 
+0000020923 00000 n 
+0000314959 00000 n 
+0000491303 00000 n 
+0000020971 00000 n 
+0000021026 00000 n 
+0000315085 00000 n 
+0000491224 00000 n 
+0000021076 00000 n 
+0000021109 00000 n 
+0000315212 00000 n 
+0000491131 00000 n 
+0000021159 00000 n 
+0000021223 00000 n 
+0000317849 00000 n 
+0000491038 00000 n 
+0000021273 00000 n 
+0000021315 00000 n 
+0000322964 00000 n 
+0000490945 00000 n 
+0000021365 00000 n 
+0000021440 00000 n 
+0000323090 00000 n 
+0000490866 00000 n 
+0000021490 00000 n 
+0000021550 00000 n 
+0000329935 00000 n 
+0000490747 00000 n 
+0000021594 00000 n 
+0000021631 00000 n 
+0000331927 00000 n 
+0000490643 00000 n 
+0000021679 00000 n 
+0000021728 00000 n 
+0000332053 00000 n 
+0000490564 00000 n 
+0000021778 00000 n 
+0000021813 00000 n 
+0000332180 00000 n 
+0000490485 00000 n 
+0000021863 00000 n 
+0000021895 00000 n 
+0000022212 00000 n 
+0000022448 00000 n 
+0000021947 00000 n 
+0000022324 00000 n 
+0000022386 00000 n 
+0000483853 00000 n 
+0000484876 00000 n 
+0000486625 00000 n 
+0000024541 00000 n 
+0000024711 00000 n 
+0000023841 00000 n 
+0000025075 00000 n 
+0000023693 00000 n 
+0000022533 00000 n 
+0000483707 00000 n 
+0000486187 00000 n 
+0000484731 00000 n 
+0000484294 00000 n 
+0000486333 00000 n 
+0000024893 00000 n 
+0000483999 00000 n 
+0000485455 00000 n 
+0000024342 00000 n 
+0000024473 00000 n 
+0000024520 00000 n 
+0000026468 00000 n 
+0000026618 00000 n 
+0000026769 00000 n 
+0000026944 00000 n 
+0000027118 00000 n 
+0000027287 00000 n 
+0000027442 00000 n 
+0000027590 00000 n 
+0000027742 00000 n 
+0000027927 00000 n 
+0000028087 00000 n 
+0000028240 00000 n 
+0000028410 00000 n 
+0000028560 00000 n 
+0000028731 00000 n 
+0000030320 00000 n 
+0000029130 00000 n 
+0000026224 00000 n 
+0000025253 00000 n 
+0000028884 00000 n 
+0000485893 00000 n 
+0000029006 00000 n 
+0000029068 00000 n 
+0000486041 00000 n 
+0000083175 00000 n 
+0000098408 00000 n 
+0000186335 00000 n 
+0000193811 00000 n 
+0000205664 00000 n 
+0000225789 00000 n 
+0000235357 00000 n 
+0000239547 00000 n 
+0000250072 00000 n 
+0000030493 00000 n 
+0000030664 00000 n 
+0000030809 00000 n 
+0000030976 00000 n 
+0000031146 00000 n 
+0000031295 00000 n 
+0000031440 00000 n 
+0000031591 00000 n 
+0000031761 00000 n 
+0000031908 00000 n 
+0000032059 00000 n 
+0000032272 00000 n 
+0000030100 00000 n 
+0000029267 00000 n 
+0000032210 00000 n 
+0000485748 00000 n 
+0000253504 00000 n 
+0000288032 00000 n 
+0000296123 00000 n 
+0000299627 00000 n 
+0000310231 00000 n 
+0000315022 00000 n 
+0000331990 00000 n 
+0000032683 00000 n 
+0000032509 00000 n 
+0000032409 00000 n 
+0000032621 00000 n 
+0000034183 00000 n 
+0000034335 00000 n 
+0000034484 00000 n 
+0000034636 00000 n 
+0000034790 00000 n 
+0000034944 00000 n 
+0000035098 00000 n 
+0000035252 00000 n 
+0000035405 00000 n 
+0000035559 00000 n 
+0000035713 00000 n 
+0000035867 00000 n 
+0000036021 00000 n 
+0000036173 00000 n 
+0000036327 00000 n 
+0000036486 00000 n 
+0000036644 00000 n 
+0000036798 00000 n 
+0000036957 00000 n 
+0000037116 00000 n 
+0000037280 00000 n 
+0000037444 00000 n 
+0000037602 00000 n 
+0000037766 00000 n 
+0000037930 00000 n 
+0000038094 00000 n 
+0000038258 00000 n 
+0000038421 00000 n 
+0000038585 00000 n 
+0000041401 00000 n 
+0000038812 00000 n 
+0000033827 00000 n 
+0000032724 00000 n 
+0000038749 00000 n 
+0000041565 00000 n 
+0000041730 00000 n 
+0000041895 00000 n 
+0000042061 00000 n 
+0000042227 00000 n 
+0000042393 00000 n 
+0000042559 00000 n 
+0000042725 00000 n 
+0000042891 00000 n 
+0000043057 00000 n 
+0000043221 00000 n 
+0000043387 00000 n 
+0000043552 00000 n 
+0000043718 00000 n 
+0000043884 00000 n 
+0000044050 00000 n 
+0000044216 00000 n 
+0000044382 00000 n 
+0000044547 00000 n 
+0000044713 00000 n 
+0000044879 00000 n 
+0000045044 00000 n 
+0000045210 00000 n 
+0000045365 00000 n 
+0000045525 00000 n 
+0000045685 00000 n 
+0000045850 00000 n 
+0000046015 00000 n 
+0000046180 00000 n 
+0000046344 00000 n 
+0000046509 00000 n 
+0000048301 00000 n 
+0000046738 00000 n 
+0000040986 00000 n 
+0000038923 00000 n 
+0000046674 00000 n 
+0000486743 00000 n 
+0000048465 00000 n 
+0000048630 00000 n 
+0000048790 00000 n 
+0000048949 00000 n 
+0000049109 00000 n 
+0000049269 00000 n 
+0000049434 00000 n 
+0000049599 00000 n 
+0000049759 00000 n 
+0000049924 00000 n 
+0000050089 00000 n 
+0000050249 00000 n 
+0000050412 00000 n 
+0000050577 00000 n 
+0000050737 00000 n 
+0000050901 00000 n 
+0000051065 00000 n 
+0000051226 00000 n 
+0000051392 00000 n 
+0000051558 00000 n 
+0000051719 00000 n 
+0000051885 00000 n 
+0000052051 00000 n 
+0000052212 00000 n 
+0000052377 00000 n 
+0000052542 00000 n 
+0000052697 00000 n 
+0000052857 00000 n 
+0000053021 00000 n 
+0000053186 00000 n 
+0000053346 00000 n 
+0000053511 00000 n 
+0000053676 00000 n 
+0000053836 00000 n 
+0000054001 00000 n 
+0000054166 00000 n 
+0000054326 00000 n 
+0000054490 00000 n 
+0000054655 00000 n 
+0000056651 00000 n 
+0000054879 00000 n 
+0000047813 00000 n 
+0000046837 00000 n 
+0000054815 00000 n 
+0000056815 00000 n 
+0000056980 00000 n 
+0000057135 00000 n 
+0000057294 00000 n 
+0000057459 00000 n 
+0000057624 00000 n 
+0000057784 00000 n 
+0000057949 00000 n 
+0000058114 00000 n 
+0000058269 00000 n 
+0000058429 00000 n 
+0000058594 00000 n 
+0000058757 00000 n 
+0000058917 00000 n 
+0000059082 00000 n 
+0000059246 00000 n 
+0000059401 00000 n 
+0000059561 00000 n 
+0000059721 00000 n 
+0000059881 00000 n 
+0000060035 00000 n 
+0000060195 00000 n 
+0000060360 00000 n 
+0000060525 00000 n 
+0000060684 00000 n 
+0000060849 00000 n 
+0000061014 00000 n 
+0000061179 00000 n 
+0000061328 00000 n 
+0000061480 00000 n 
+0000061635 00000 n 
+0000061790 00000 n 
+0000061945 00000 n 
+0000062100 00000 n 
+0000062254 00000 n 
+0000064170 00000 n 
+0000062471 00000 n 
+0000056199 00000 n 
+0000054978 00000 n 
+0000062407 00000 n 
+0000064324 00000 n 
+0000064479 00000 n 
+0000064634 00000 n 
+0000064789 00000 n 
+0000064944 00000 n 
+0000065104 00000 n 
+0000065263 00000 n 
+0000065423 00000 n 
+0000065575 00000 n 
+0000065730 00000 n 
+0000065884 00000 n 
+0000066039 00000 n 
+0000066199 00000 n 
+0000066359 00000 n 
+0000066519 00000 n 
+0000066679 00000 n 
+0000066838 00000 n 
+0000066998 00000 n 
+0000067157 00000 n 
+0000067317 00000 n 
+0000067477 00000 n 
+0000067638 00000 n 
+0000067799 00000 n 
+0000067960 00000 n 
+0000068120 00000 n 
+0000068281 00000 n 
+0000068441 00000 n 
+0000068596 00000 n 
+0000068756 00000 n 
+0000068916 00000 n 
+0000069071 00000 n 
+0000069224 00000 n 
+0000069377 00000 n 
+0000069530 00000 n 
+0000069685 00000 n 
+0000071901 00000 n 
+0000069904 00000 n 
+0000063718 00000 n 
+0000062596 00000 n 
+0000069840 00000 n 
+0000072060 00000 n 
+0000072220 00000 n 
+0000072374 00000 n 
+0000072534 00000 n 
+0000072682 00000 n 
+0000072835 00000 n 
+0000072990 00000 n 
+0000073145 00000 n 
+0000073299 00000 n 
+0000073455 00000 n 
+0000073616 00000 n 
+0000073776 00000 n 
+0000073931 00000 n 
+0000074092 00000 n 
+0000074253 00000 n 
+0000074409 00000 n 
+0000074570 00000 n 
+0000074724 00000 n 
+0000074885 00000 n 
+0000075044 00000 n 
+0000075198 00000 n 
+0000075354 00000 n 
+0000075514 00000 n 
+0000075675 00000 n 
+0000075835 00000 n 
+0000075991 00000 n 
+0000076152 00000 n 
+0000076306 00000 n 
+0000076461 00000 n 
+0000076615 00000 n 
+0000076771 00000 n 
+0000076926 00000 n 
+0000078240 00000 n 
+0000078390 00000 n 
+0000077146 00000 n 
+0000071476 00000 n 
+0000070003 00000 n 
+0000077082 00000 n 
+0000078544 00000 n 
+0000078698 00000 n 
+0000078854 00000 n 
+0000079010 00000 n 
+0000079166 00000 n 
+0000079322 00000 n 
+0000079478 00000 n 
+0000079627 00000 n 
+0000079781 00000 n 
+0000079937 00000 n 
+0000080157 00000 n 
+0000078004 00000 n 
+0000077258 00000 n 
+0000080093 00000 n 
+0000080550 00000 n 
+0000080370 00000 n 
+0000080269 00000 n 
+0000080486 00000 n 
+0000486868 00000 n 
+0000080979 00000 n 
+0000080801 00000 n 
+0000080592 00000 n 
+0000081269 00000 n 
+0000081153 00000 n 
+0000081052 00000 n 
+0000083490 00000 n 
+0000082869 00000 n 
+0000081311 00000 n 
+0000082985 00000 n 
+0000083049 00000 n 
+0000485601 00000 n 
+0000083300 00000 n 
+0000083426 00000 n 
+0000086164 00000 n 
+0000085733 00000 n 
+0000083616 00000 n 
+0000085849 00000 n 
+0000085975 00000 n 
+0000086100 00000 n 
+0000088615 00000 n 
+0000088309 00000 n 
+0000086276 00000 n 
+0000088425 00000 n 
+0000088551 00000 n 
+0000091434 00000 n 
+0000090876 00000 n 
+0000088727 00000 n 
+0000090992 00000 n 
+0000091118 00000 n 
+0000091244 00000 n 
+0000091370 00000 n 
+0000486993 00000 n 
+0000094197 00000 n 
+0000093891 00000 n 
+0000091559 00000 n 
+0000094007 00000 n 
+0000094133 00000 n 
+0000095659 00000 n 
+0000095479 00000 n 
+0000094309 00000 n 
+0000095595 00000 n 
+0000097646 00000 n 
+0000097839 00000 n 
+0000100970 00000 n 
+0000098595 00000 n 
+0000097491 00000 n 
+0000095758 00000 n 
+0000098282 00000 n 
+0000098531 00000 n 
+0000098061 00000 n 
+0000101552 00000 n 
+0000101158 00000 n 
+0000101365 00000 n 
+0000102106 00000 n 
+0000100806 00000 n 
+0000098734 00000 n 
+0000101726 00000 n 
+0000485165 00000 n 
+0000101790 00000 n 
+0000101852 00000 n 
+0000101916 00000 n 
+0000101980 00000 n 
+0000102044 00000 n 
+0000485021 00000 n 
+0000484439 00000 n 
+0000486479 00000 n 
+0000105176 00000 n 
+0000104237 00000 n 
+0000102300 00000 n 
+0000104353 00000 n 
+0000104479 00000 n 
+0000104605 00000 n 
+0000104731 00000 n 
+0000104857 00000 n 
+0000104921 00000 n 
+0000104985 00000 n 
+0000105049 00000 n 
+0000105113 00000 n 
+0000107075 00000 n 
+0000106453 00000 n 
+0000105288 00000 n 
+0000106569 00000 n 
+0000106633 00000 n 
+0000106759 00000 n 
+0000106885 00000 n 
+0000107011 00000 n 
+0000487118 00000 n 
+0000108949 00000 n 
+0000108009 00000 n 
+0000107187 00000 n 
+0000108125 00000 n 
+0000108251 00000 n 
+0000108377 00000 n 
+0000108504 00000 n 
+0000108631 00000 n 
+0000108758 00000 n 
+0000108885 00000 n 
+0000110790 00000 n 
+0000109975 00000 n 
+0000109061 00000 n 
+0000110091 00000 n 
+0000110218 00000 n 
+0000110345 00000 n 
+0000110472 00000 n 
+0000110599 00000 n 
+0000110726 00000 n 
+0000112223 00000 n 
+0000111789 00000 n 
+0000110915 00000 n 
+0000111905 00000 n 
+0000112032 00000 n 
+0000112159 00000 n 
+0000114221 00000 n 
+0000113535 00000 n 
+0000112335 00000 n 
+0000113651 00000 n 
+0000113778 00000 n 
+0000113905 00000 n 
+0000114031 00000 n 
+0000114157 00000 n 
+0000115792 00000 n 
+0000115358 00000 n 
+0000114359 00000 n 
+0000115474 00000 n 
+0000485309 00000 n 
+0000115601 00000 n 
+0000115728 00000 n 
+0000117853 00000 n 
+0000117292 00000 n 
+0000115944 00000 n 
+0000117408 00000 n 
+0000117535 00000 n 
+0000117662 00000 n 
+0000117789 00000 n 
+0000487243 00000 n 
+0000119278 00000 n 
+0000118971 00000 n 
+0000117978 00000 n 
+0000119087 00000 n 
+0000119214 00000 n 
+0000120704 00000 n 
+0000120270 00000 n 
+0000119403 00000 n 
+0000120386 00000 n 
+0000120513 00000 n 
+0000120640 00000 n 
+0000122310 00000 n 
+0000121876 00000 n 
+0000120829 00000 n 
+0000121992 00000 n 
+0000122119 00000 n 
+0000122246 00000 n 
+0000123285 00000 n 
+0000123105 00000 n 
+0000122435 00000 n 
+0000123221 00000 n 
+0000124442 00000 n 
+0000124262 00000 n 
+0000123384 00000 n 
+0000124378 00000 n 
+0000126461 00000 n 
+0000125900 00000 n 
+0000124541 00000 n 
+0000126016 00000 n 
+0000126143 00000 n 
+0000126270 00000 n 
+0000126397 00000 n 
+0000487368 00000 n 
+0000128244 00000 n 
+0000127937 00000 n 
+0000126599 00000 n 
+0000128053 00000 n 
+0000128180 00000 n 
+0000129917 00000 n 
+0000129737 00000 n 
+0000128369 00000 n 
+0000129853 00000 n 
+0000131866 00000 n 
+0000131432 00000 n 
+0000130016 00000 n 
+0000131548 00000 n 
+0000131675 00000 n 
+0000131802 00000 n 
+0000134107 00000 n 
+0000133927 00000 n 
+0000131991 00000 n 
+0000134043 00000 n 
+0000136549 00000 n 
+0000136115 00000 n 
+0000134232 00000 n 
+0000136231 00000 n 
+0000136358 00000 n 
+0000136485 00000 n 
+0000138428 00000 n 
+0000137867 00000 n 
+0000136674 00000 n 
+0000137983 00000 n 
+0000138110 00000 n 
+0000138237 00000 n 
+0000138364 00000 n 
+0000487493 00000 n 
+0000140217 00000 n 
+0000139784 00000 n 
+0000138553 00000 n 
+0000139900 00000 n 
+0000140026 00000 n 
+0000140153 00000 n 
+0000141802 00000 n 
+0000141495 00000 n 
+0000140329 00000 n 
+0000141611 00000 n 
+0000141738 00000 n 
+0000144009 00000 n 
+0000143448 00000 n 
+0000141914 00000 n 
+0000143564 00000 n 
+0000143691 00000 n 
+0000143818 00000 n 
+0000143945 00000 n 
+0000145719 00000 n 
+0000145412 00000 n 
+0000144147 00000 n 
+0000145528 00000 n 
+0000483558 00000 n 
+0000145655 00000 n 
+0000147448 00000 n 
+0000147014 00000 n 
+0000145871 00000 n 
+0000147130 00000 n 
+0000147257 00000 n 
+0000147384 00000 n 
+0000149182 00000 n 
+0000148495 00000 n 
+0000147586 00000 n 
+0000148611 00000 n 
+0000148738 00000 n 
+0000148864 00000 n 
+0000148991 00000 n 
+0000149118 00000 n 
+0000487618 00000 n 
+0000150929 00000 n 
+0000149988 00000 n 
+0000149320 00000 n 
+0000150104 00000 n 
+0000150230 00000 n 
+0000150357 00000 n 
+0000150484 00000 n 
+0000150611 00000 n 
+0000150738 00000 n 
+0000150865 00000 n 
+0000152766 00000 n 
+0000151953 00000 n 
+0000151054 00000 n 
+0000152069 00000 n 
+0000152196 00000 n 
+0000152321 00000 n 
+0000152448 00000 n 
+0000152575 00000 n 
+0000152702 00000 n 
+0000154635 00000 n 
+0000154074 00000 n 
+0000152891 00000 n 
+0000154190 00000 n 
+0000154317 00000 n 
+0000154444 00000 n 
+0000154571 00000 n 
+0000156152 00000 n 
+0000155718 00000 n 
+0000154760 00000 n 
+0000155834 00000 n 
+0000155961 00000 n 
+0000156088 00000 n 
+0000157993 00000 n 
+0000157687 00000 n 
+0000156264 00000 n 
+0000157803 00000 n 
+0000157929 00000 n 
+0000159945 00000 n 
+0000159259 00000 n 
+0000158131 00000 n 
+0000159375 00000 n 
+0000159502 00000 n 
+0000159629 00000 n 
+0000159756 00000 n 
+0000159881 00000 n 
+0000487743 00000 n 
+0000162140 00000 n 
+0000161452 00000 n 
+0000160070 00000 n 
+0000161568 00000 n 
+0000161695 00000 n 
+0000161822 00000 n 
+0000161949 00000 n 
+0000162076 00000 n 
+0000163923 00000 n 
+0000163364 00000 n 
+0000162265 00000 n 
+0000163480 00000 n 
+0000163607 00000 n 
+0000163733 00000 n 
+0000163859 00000 n 
+0000166376 00000 n 
+0000165435 00000 n 
+0000164061 00000 n 
+0000165551 00000 n 
+0000165678 00000 n 
+0000165805 00000 n 
+0000165932 00000 n 
+0000166058 00000 n 
+0000166185 00000 n 
+0000166312 00000 n 
+0000167488 00000 n 
+0000167181 00000 n 
+0000166540 00000 n 
+0000167297 00000 n 
+0000167424 00000 n 
+0000169086 00000 n 
+0000168652 00000 n 
+0000167600 00000 n 
+0000168768 00000 n 
+0000168895 00000 n 
+0000169022 00000 n 
+0000170355 00000 n 
+0000169921 00000 n 
+0000169224 00000 n 
+0000170037 00000 n 
+0000170164 00000 n 
+0000170291 00000 n 
+0000487868 00000 n 
+0000172135 00000 n 
+0000171574 00000 n 
+0000170467 00000 n 
+0000171690 00000 n 
+0000171817 00000 n 
+0000171944 00000 n 
+0000172071 00000 n 
+0000174150 00000 n 
+0000173335 00000 n 
+0000172260 00000 n 
+0000173451 00000 n 
+0000173578 00000 n 
+0000173705 00000 n 
+0000173832 00000 n 
+0000173959 00000 n 
+0000174086 00000 n 
+0000175724 00000 n 
+0000175417 00000 n 
+0000174275 00000 n 
+0000175533 00000 n 
+0000175660 00000 n 
+0000177381 00000 n 
+0000177074 00000 n 
+0000175849 00000 n 
+0000177190 00000 n 
+0000177317 00000 n 
+0000179588 00000 n 
+0000179027 00000 n 
+0000177506 00000 n 
+0000179143 00000 n 
+0000179270 00000 n 
+0000179397 00000 n 
+0000179524 00000 n 
+0000180718 00000 n 
+0000180411 00000 n 
+0000179700 00000 n 
+0000180527 00000 n 
+0000180654 00000 n 
+0000487993 00000 n 
+0000183341 00000 n 
+0000182654 00000 n 
+0000180830 00000 n 
+0000182770 00000 n 
+0000182897 00000 n 
+0000183023 00000 n 
+0000183150 00000 n 
+0000183277 00000 n 
+0000183747 00000 n 
+0000183567 00000 n 
+0000183466 00000 n 
+0000183683 00000 n 
+0000184178 00000 n 
+0000183999 00000 n 
+0000183789 00000 n 
+0000184468 00000 n 
+0000184352 00000 n 
+0000184251 00000 n 
+0000186842 00000 n 
+0000186028 00000 n 
+0000184510 00000 n 
+0000186144 00000 n 
+0000186208 00000 n 
+0000186461 00000 n 
+0000186525 00000 n 
+0000186589 00000 n 
+0000186652 00000 n 
+0000186778 00000 n 
+0000189816 00000 n 
+0000188998 00000 n 
+0000186955 00000 n 
+0000189114 00000 n 
+0000189241 00000 n 
+0000189305 00000 n 
+0000189369 00000 n 
+0000189433 00000 n 
+0000189497 00000 n 
+0000189561 00000 n 
+0000189625 00000 n 
+0000189752 00000 n 
+0000488118 00000 n 
+0000192590 00000 n 
+0000192283 00000 n 
+0000189928 00000 n 
+0000192399 00000 n 
+0000192526 00000 n 
+0000194001 00000 n 
+0000193568 00000 n 
+0000192702 00000 n 
+0000193684 00000 n 
+0000193937 00000 n 
+0000196442 00000 n 
+0000195881 00000 n 
+0000194127 00000 n 
+0000195997 00000 n 
+0000196061 00000 n 
+0000196125 00000 n 
+0000196189 00000 n 
+0000196253 00000 n 
+0000196378 00000 n 
+0000198233 00000 n 
+0000198053 00000 n 
+0000196567 00000 n 
+0000198169 00000 n 
+0000200005 00000 n 
+0000199571 00000 n 
+0000198358 00000 n 
+0000199687 00000 n 
+0000199814 00000 n 
+0000199941 00000 n 
+0000202131 00000 n 
+0000201505 00000 n 
+0000200130 00000 n 
+0000201621 00000 n 
+0000201685 00000 n 
+0000201749 00000 n 
+0000201813 00000 n 
+0000201940 00000 n 
+0000202067 00000 n 
+0000488243 00000 n 
+0000203965 00000 n 
+0000203535 00000 n 
+0000202256 00000 n 
+0000203651 00000 n 
+0000203778 00000 n 
+0000203901 00000 n 
+0000206237 00000 n 
+0000205421 00000 n 
+0000204077 00000 n 
+0000205537 00000 n 
+0000205790 00000 n 
+0000205917 00000 n 
+0000205981 00000 n 
+0000206045 00000 n 
+0000206109 00000 n 
+0000206173 00000 n 
+0000209553 00000 n 
+0000209055 00000 n 
+0000206350 00000 n 
+0000209171 00000 n 
+0000209235 00000 n 
+0000209299 00000 n 
+0000209363 00000 n 
+0000209427 00000 n 
+0000209489 00000 n 
+0000212001 00000 n 
+0000210805 00000 n 
+0000209652 00000 n 
+0000210921 00000 n 
+0000210985 00000 n 
+0000211049 00000 n 
+0000211176 00000 n 
+0000211303 00000 n 
+0000211430 00000 n 
+0000211557 00000 n 
+0000211684 00000 n 
+0000211810 00000 n 
+0000211937 00000 n 
+0000214054 00000 n 
+0000212986 00000 n 
+0000212113 00000 n 
+0000213102 00000 n 
+0000213229 00000 n 
+0000213356 00000 n 
+0000213483 00000 n 
+0000213610 00000 n 
+0000213737 00000 n 
+0000213864 00000 n 
+0000213991 00000 n 
+0000216552 00000 n 
+0000215482 00000 n 
+0000214166 00000 n 
+0000215598 00000 n 
+0000215725 00000 n 
+0000215852 00000 n 
+0000215978 00000 n 
+0000216105 00000 n 
+0000216169 00000 n 
+0000216233 00000 n 
+0000216297 00000 n 
+0000216361 00000 n 
+0000216425 00000 n 
+0000216489 00000 n 
+0000488368 00000 n 
+0000219415 00000 n 
+0000218533 00000 n 
+0000216677 00000 n 
+0000218649 00000 n 
+0000218713 00000 n 
+0000218777 00000 n 
+0000218841 00000 n 
+0000218904 00000 n 
+0000218968 00000 n 
+0000219032 00000 n 
+0000219096 00000 n 
+0000219160 00000 n 
+0000219287 00000 n 
+0000219351 00000 n 
+0000222251 00000 n 
+0000221432 00000 n 
+0000219527 00000 n 
+0000221548 00000 n 
+0000221612 00000 n 
+0000221676 00000 n 
+0000221803 00000 n 
+0000221867 00000 n 
+0000221931 00000 n 
+0000221995 00000 n 
+0000222059 00000 n 
+0000222123 00000 n 
+0000222187 00000 n 
+0000223320 00000 n 
+0000222884 00000 n 
+0000222363 00000 n 
+0000223000 00000 n 
+0000223064 00000 n 
+0000223128 00000 n 
+0000223192 00000 n 
+0000223256 00000 n 
+0000225272 00000 n 
+0000225472 00000 n 
+0000225852 00000 n 
+0000225126 00000 n 
+0000223419 00000 n 
+0000225662 00000 n 
+0000229296 00000 n 
+0000228286 00000 n 
+0000225991 00000 n 
+0000228402 00000 n 
+0000228466 00000 n 
+0000228530 00000 n 
+0000228594 00000 n 
+0000228658 00000 n 
+0000228722 00000 n 
+0000228786 00000 n 
+0000228849 00000 n 
+0000228913 00000 n 
+0000228977 00000 n 
+0000229041 00000 n 
+0000229105 00000 n 
+0000229168 00000 n 
+0000229232 00000 n 
+0000232677 00000 n 
+0000231730 00000 n 
+0000229382 00000 n 
+0000231846 00000 n 
+0000231910 00000 n 
+0000231974 00000 n 
+0000232038 00000 n 
+0000232102 00000 n 
+0000232166 00000 n 
+0000232230 00000 n 
+0000232294 00000 n 
+0000232358 00000 n 
+0000232421 00000 n 
+0000232485 00000 n 
+0000232549 00000 n 
+0000232613 00000 n 
+0000488493 00000 n 
+0000233411 00000 n 
+0000233231 00000 n 
+0000232776 00000 n 
+0000233347 00000 n 
+0000235420 00000 n 
+0000235114 00000 n 
+0000233497 00000 n 
+0000235230 00000 n 
+0000237451 00000 n 
+0000237625 00000 n 
+0000237870 00000 n 
+0000237305 00000 n 
+0000235559 00000 n 
+0000237806 00000 n 
+0000239990 00000 n 
+0000239304 00000 n 
+0000238025 00000 n 
+0000239420 00000 n 
+0000239673 00000 n 
+0000239799 00000 n 
+0000239926 00000 n 
+0000242643 00000 n 
+0000242210 00000 n 
+0000240116 00000 n 
+0000242326 00000 n 
+0000242453 00000 n 
+0000242580 00000 n 
+0000484146 00000 n 
+0000245686 00000 n 
+0000244729 00000 n 
+0000244422 00000 n 
+0000242782 00000 n 
+0000244538 00000 n 
+0000244665 00000 n 
+0000488618 00000 n 
+0000246842 00000 n 
+0000245570 00000 n 
+0000244868 00000 n 
+0000246778 00000 n 
+0000246069 00000 n 
+0000246201 00000 n 
+0000246249 00000 n 
+0000246757 00000 n 
+0000247264 00000 n 
+0000247084 00000 n 
+0000246983 00000 n 
+0000247200 00000 n 
+0000247698 00000 n 
+0000247519 00000 n 
+0000247306 00000 n 
+0000247988 00000 n 
+0000247872 00000 n 
+0000247771 00000 n 
+0000250389 00000 n 
+0000249765 00000 n 
+0000248030 00000 n 
+0000249881 00000 n 
+0000249945 00000 n 
+0000250198 00000 n 
+0000250325 00000 n 
+0000251465 00000 n 
+0000251285 00000 n 
+0000250528 00000 n 
+0000251401 00000 n 
+0000488743 00000 n 
+0000253694 00000 n 
+0000253261 00000 n 
+0000251564 00000 n 
+0000253377 00000 n 
+0000253630 00000 n 
+0000256323 00000 n 
+0000256016 00000 n 
+0000253807 00000 n 
+0000256132 00000 n 
+0000256259 00000 n 
+0000259392 00000 n 
+0000259212 00000 n 
+0000256474 00000 n 
+0000259328 00000 n 
+0000260485 00000 n 
+0000260305 00000 n 
+0000259530 00000 n 
+0000260421 00000 n 
+0000261663 00000 n 
+0000261483 00000 n 
+0000260597 00000 n 
+0000261599 00000 n 
+0000263879 00000 n 
+0000263572 00000 n 
+0000261788 00000 n 
+0000263688 00000 n 
+0000263815 00000 n 
+0000488868 00000 n 
+0000265895 00000 n 
+0000265461 00000 n 
+0000264017 00000 n 
+0000265577 00000 n 
+0000265704 00000 n 
+0000265831 00000 n 
+0000267545 00000 n 
+0000267238 00000 n 
+0000266020 00000 n 
+0000267354 00000 n 
+0000267481 00000 n 
+0000269726 00000 n 
+0000269546 00000 n 
+0000267670 00000 n 
+0000269662 00000 n 
+0000271139 00000 n 
+0000270959 00000 n 
+0000269851 00000 n 
+0000271075 00000 n 
+0000272539 00000 n 
+0000272359 00000 n 
+0000271251 00000 n 
+0000272475 00000 n 
+0000275520 00000 n 
+0000274766 00000 n 
+0000272651 00000 n 
+0000274882 00000 n 
+0000275009 00000 n 
+0000275136 00000 n 
+0000275200 00000 n 
+0000275264 00000 n 
+0000275328 00000 n 
+0000275392 00000 n 
+0000275456 00000 n 
+0000488993 00000 n 
+0000276460 00000 n 
+0000276280 00000 n 
+0000275658 00000 n 
+0000276396 00000 n 
+0000277791 00000 n 
+0000277484 00000 n 
+0000276559 00000 n 
+0000277600 00000 n 
+0000277664 00000 n 
+0000277727 00000 n 
+0000280212 00000 n 
+0000280621 00000 n 
+0000280075 00000 n 
+0000277916 00000 n 
+0000280365 00000 n 
+0000280429 00000 n 
+0000280493 00000 n 
+0000280557 00000 n 
+0000281840 00000 n 
+0000281660 00000 n 
+0000280746 00000 n 
+0000281776 00000 n 
+0000283006 00000 n 
+0000282826 00000 n 
+0000281952 00000 n 
+0000282942 00000 n 
+0000285076 00000 n 
+0000284515 00000 n 
+0000283105 00000 n 
+0000284631 00000 n 
+0000284695 00000 n 
+0000284759 00000 n 
+0000284885 00000 n 
+0000285012 00000 n 
+0000489118 00000 n 
+0000286557 00000 n 
+0000286250 00000 n 
+0000285201 00000 n 
+0000286366 00000 n 
+0000286493 00000 n 
+0000288668 00000 n 
+0000287789 00000 n 
+0000286682 00000 n 
+0000287905 00000 n 
+0000288158 00000 n 
+0000288222 00000 n 
+0000288285 00000 n 
+0000288348 00000 n 
+0000288412 00000 n 
+0000288476 00000 n 
+0000288540 00000 n 
+0000288604 00000 n 
+0000291206 00000 n 
+0000290516 00000 n 
+0000288781 00000 n 
+0000290632 00000 n 
+0000290759 00000 n 
+0000290823 00000 n 
+0000290887 00000 n 
+0000290951 00000 n 
+0000291015 00000 n 
+0000291142 00000 n 
+0000292490 00000 n 
+0000292183 00000 n 
+0000291344 00000 n 
+0000292299 00000 n 
+0000292426 00000 n 
+0000294549 00000 n 
+0000293859 00000 n 
+0000292615 00000 n 
+0000293975 00000 n 
+0000294102 00000 n 
+0000294166 00000 n 
+0000294230 00000 n 
+0000294294 00000 n 
+0000294358 00000 n 
+0000294485 00000 n 
+0000296311 00000 n 
+0000295880 00000 n 
+0000294687 00000 n 
+0000295996 00000 n 
+0000296247 00000 n 
+0000489243 00000 n 
+0000297831 00000 n 
+0000297651 00000 n 
+0000296437 00000 n 
+0000297767 00000 n 
+0000299944 00000 n 
+0000299384 00000 n 
+0000297943 00000 n 
+0000299500 00000 n 
+0000299753 00000 n 
+0000299880 00000 n 
+0000302618 00000 n 
+0000302247 00000 n 
+0000300057 00000 n 
+0000302363 00000 n 
+0000302490 00000 n 
+0000302554 00000 n 
+0000304961 00000 n 
+0000304781 00000 n 
+0000302743 00000 n 
+0000304897 00000 n 
+0000307077 00000 n 
+0000306897 00000 n 
+0000305100 00000 n 
+0000307013 00000 n 
+0000307483 00000 n 
+0000307303 00000 n 
+0000307202 00000 n 
+0000307419 00000 n 
+0000489368 00000 n 
+0000307920 00000 n 
+0000307741 00000 n 
+0000307525 00000 n 
+0000308210 00000 n 
+0000308094 00000 n 
+0000307993 00000 n 
+0000310294 00000 n 
+0000309924 00000 n 
+0000308252 00000 n 
+0000310040 00000 n 
+0000310104 00000 n 
+0000312831 00000 n 
+0000312651 00000 n 
+0000310407 00000 n 
+0000312767 00000 n 
+0000484584 00000 n 
+0000313634 00000 n 
+0000313454 00000 n 
+0000312957 00000 n 
+0000313570 00000 n 
+0000315339 00000 n 
+0000314779 00000 n 
+0000313733 00000 n 
+0000314895 00000 n 
+0000315148 00000 n 
+0000315275 00000 n 
+0000489493 00000 n 
+0000317976 00000 n 
+0000317669 00000 n 
+0000315478 00000 n 
+0000317785 00000 n 
+0000317912 00000 n 
+0000320518 00000 n 
+0000320018 00000 n 
+0000318114 00000 n 
+0000320134 00000 n 
+0000320198 00000 n 
+0000320262 00000 n 
+0000320326 00000 n 
+0000320390 00000 n 
+0000320454 00000 n 
+0000323217 00000 n 
+0000322592 00000 n 
+0000320657 00000 n 
+0000322708 00000 n 
+0000322772 00000 n 
+0000322836 00000 n 
+0000322900 00000 n 
+0000323027 00000 n 
+0000323153 00000 n 
+0000325088 00000 n 
+0000324908 00000 n 
+0000323342 00000 n 
+0000325024 00000 n 
+0000327770 00000 n 
+0000327590 00000 n 
+0000325213 00000 n 
+0000327706 00000 n 
+0000329488 00000 n 
+0000329308 00000 n 
+0000327895 00000 n 
+0000329424 00000 n 
+0000489618 00000 n 
+0000329998 00000 n 
+0000329819 00000 n 
+0000329613 00000 n 
+0000330288 00000 n 
+0000330172 00000 n 
+0000330071 00000 n 
+0000332306 00000 n 
+0000331683 00000 n 
+0000330330 00000 n 
+0000331799 00000 n 
+0000331863 00000 n 
+0000332116 00000 n 
+0000332243 00000 n 
+0000332463 00000 n 
+0000332489 00000 n 
+0000332817 00000 n 
+0000332841 00000 n 
+0000332865 00000 n 
+0000333197 00000 n 
+0000333235 00000 n 
+0000333267 00000 n 
+0000333299 00000 n 
+0000333725 00000 n 
+0000334393 00000 n 
+0000334947 00000 n 
+0000335590 00000 n 
+0000336220 00000 n 
+0000336471 00000 n 
+0000336867 00000 n 
+0000336903 00000 n 
+0000337527 00000 n 
+0000338197 00000 n 
+0000338837 00000 n 
+0000339268 00000 n 
+0000339700 00000 n 
+0000341366 00000 n 
+0000341599 00000 n 
+0000357261 00000 n 
+0000357782 00000 n 
+0000364669 00000 n 
+0000364973 00000 n 
+0000368269 00000 n 
+0000368506 00000 n 
+0000375649 00000 n 
+0000375942 00000 n 
+0000377751 00000 n 
+0000377986 00000 n 
+0000379803 00000 n 
+0000380037 00000 n 
+0000381702 00000 n 
+0000381934 00000 n 
+0000399891 00000 n 
+0000400476 00000 n 
+0000405114 00000 n 
+0000405388 00000 n 
+0000407252 00000 n 
+0000407478 00000 n 
+0000409331 00000 n 
+0000409557 00000 n 
+0000411373 00000 n 
+0000411601 00000 n 
+0000417581 00000 n 
+0000417908 00000 n 
+0000421742 00000 n 
+0000422025 00000 n 
+0000430563 00000 n 
+0000430968 00000 n 
+0000443426 00000 n 
+0000443888 00000 n 
+0000445205 00000 n 
+0000445444 00000 n 
+0000461450 00000 n 
+0000461914 00000 n 
+0000478049 00000 n 
+0000478670 00000 n 
+0000483278 00000 n 
+0000489725 00000 n 
+0000489850 00000 n 
+0000489976 00000 n 
+0000490102 00000 n 
+0000490228 00000 n 
+0000490308 00000 n 
+0000490409 00000 n 
+0000511293 00000 n 
+0000511492 00000 n 
+0000511677 00000 n 
+0000511861 00000 n 
+0000512046 00000 n 
+0000512230 00000 n 
+0000512409 00000 n 
+0000512585 00000 n 
+0000512762 00000 n 
+0000512938 00000 n 
+0000513115 00000 n 
+0000513290 00000 n 
+0000513465 00000 n 
+0000513642 00000 n 
+0000513818 00000 n 
+0000513995 00000 n 
+0000514171 00000 n 
+0000514348 00000 n 
+0000514524 00000 n 
+0000514701 00000 n 
+0000514877 00000 n 
+0000515054 00000 n 
+0000515257 00000 n 
+0000515452 00000 n 
+0000515638 00000 n 
+0000515824 00000 n 
+0000516007 00000 n 
+0000516192 00000 n 
+0000516377 00000 n 
+0000516562 00000 n 
+0000516747 00000 n 
+0000516932 00000 n 
+0000517117 00000 n 
+0000517302 00000 n 
+0000517487 00000 n 
+0000517672 00000 n 
+0000517857 00000 n 
+0000518042 00000 n 
+0000518227 00000 n 
+0000518412 00000 n 
+0000518597 00000 n 
+0000518782 00000 n 
+0000518967 00000 n 
+0000519152 00000 n 
+0000519337 00000 n 
+0000519522 00000 n 
+0000519707 00000 n 
+0000519892 00000 n 
+0000520077 00000 n 
+0000520262 00000 n 
+0000520447 00000 n 
+0000520632 00000 n 
+0000520817 00000 n 
+0000521002 00000 n 
+0000521187 00000 n 
+0000521372 00000 n 
+0000521557 00000 n 
+0000521742 00000 n 
+0000521927 00000 n 
+0000522109 00000 n 
+0000522290 00000 n 
+0000522475 00000 n 
+0000522659 00000 n 
+0000522844 00000 n 
+0000523027 00000 n 
+0000523208 00000 n 
+0000523384 00000 n 
+0000523561 00000 n 
+0000523737 00000 n 
+0000523914 00000 n 
+0000524090 00000 n 
+0000524267 00000 n 
+0000524443 00000 n 
+0000524620 00000 n 
+0000524795 00000 n 
+0000524970 00000 n 
+0000525147 00000 n 
+0000525323 00000 n 
+0000525500 00000 n 
+0000525676 00000 n 
+0000525853 00000 n 
+0000526026 00000 n 
+0000526203 00000 n 
+0000526367 00000 n 
+0000526559 00000 n 
+0000526756 00000 n 
+0000526967 00000 n 
+0000527178 00000 n 
+0000527386 00000 n 
+0000527588 00000 n 
+0000527791 00000 n 
+0000527994 00000 n 
+0000528197 00000 n 
+0000528424 00000 n 
+0000528675 00000 n 
+0000528917 00000 n 
+0000529162 00000 n 
+0000529405 00000 n 
+0000529648 00000 n 
+0000529891 00000 n 
+0000530134 00000 n 
+0000530383 00000 n 
+0000530628 00000 n 
+0000530871 00000 n 
+0000531138 00000 n 
+0000531429 00000 n 
+0000531719 00000 n 
+0000532010 00000 n 
+0000532297 00000 n 
+0000532583 00000 n 
+0000532871 00000 n 
+0000533154 00000 n 
+0000533437 00000 n 
+0000533720 00000 n 
+0000534003 00000 n 
+0000534286 00000 n 
+0000534569 00000 n 
+0000534741 00000 n 
+0000534867 00000 n 
+0000534982 00000 n 
+0000535098 00000 n 
+0000535216 00000 n 
+0000535335 00000 n 
+0000535453 00000 n 
+0000535571 00000 n 
+0000535689 00000 n 
+0000535807 00000 n 
+0000535925 00000 n 
+0000536042 00000 n 
+0000536158 00000 n 
+0000536274 00000 n 
+0000536394 00000 n 
+0000536518 00000 n 
+0000536647 00000 n 
+0000536781 00000 n 
+0000536920 00000 n 
+0000537064 00000 n 
+0000537164 00000 n 
+0000537291 00000 n 
+0000537408 00000 n 
+0000537538 00000 n 
+0000537629 00000 n 
+0000537734 00000 n 
+0000537774 00000 n 
+0000538082 00000 n 
 trailer
 << /Size 2338
 /Root 2336 0 R
 /Info 2337 0 R
-/ID [<649461F760FFE13F4FBC6A63C6857F2C> <649461F760FFE13F4FBC6A63C6857F2C>] >>
+/ID [<4372C46ABF0DB33A5666F2E6A10ACB38> <4372C46ABF0DB33A5666F2E6A10ACB38>] >>
 startxref
-538325
+538414
 %%EOF

Modified: branches/samba/upstream/docs/Samba3-HOWTO.pdf
===================================================================
--- branches/samba/upstream/docs/Samba3-HOWTO.pdf	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/Samba3-HOWTO.pdf	2008-06-15 01:55:18 UTC (rev 1953)
@@ -13,7 +13,7 @@
 (Attribution)
 endobj
 13 0 obj
-<< /S /GoTo /D (id2423022) >>
+<< /S /GoTo /D (id249731) >>
 endobj
 16 0 obj
 (Contents)
@@ -3514,7 +3514,7 @@
 << /S /GoTo /D (subsection.22.19.14) >>
 endobj
 2348 0 obj
-(22.19.14 Windows XP SP1)
+(22.19.14 Win XP-SP1)
 endobj
 2349 0 obj
 << /S /GoTo /D (subsection.22.19.15) >>
@@ -5524,14 +5524,12 @@
 << /S /GoTo /D [3686 0 R  /Fit ] >>
 endobj
 3688 0 obj <<
-/Length 270       
+/Length 272       
 /Filter /FlateDecode
 >>
 stream
-xÚ…‘1OÃ0…÷þ
-¶Ô>;vœ©²D*-ƒi\”&È´ü{lœéÞ;Ýó}'sòF8iVüŸzkW7¢"X@U{$ˆ
-4
-RjZUÄödGíɳBVŠv{Žú0¸1ÛGwfé«ËV‚€¯,7“‚>Û.[7õìŶ¤.¡äŠ¡F“ßú£~:,+šëÐû4ÉLāZ)‘ÈŠZšVJ•³­Ï>Ä Ðt©Vô‰A}˜fVD7ïëÜoçC:e³²Ì`þø¼·Î­Äú+ܸè=W¼õ!|Gù‰;.qw:%F´šÄ€½°]'ŸÃÈÁ¹I?qoW?PãgE
+xÚ…QÁNÃ0½ï+rL¤ÕÄn“¦Wtª„&ŒCX36´µ(‰ý=)ލ'¿g½g?ËZ¼	-Ú™þ§^ûÙÕÕk 4•ð[hÀ"‰ÊXSß‹géwQemär­ÑnöáÀô!U‰ò50-à›áb©J’O~É4½zñh*¨´!4èxø*ncŠÃæ²¢ýÚ÷qçd.ǁÆš’tÙlJ¨{»x8Æ”då
+¦ZËGåHÆ4ŒªÈlܿϹߍ;…r`² 6yå0‹?>O)̹5eýmLápÁkmtS:g€<â&¤SÞ=…%v•Èäj9Û}PYuf?¹ËtÒÚMž?¿¸õ³yïg—
 endstream
 endobj
 3686 0 obj <<
@@ -10440,23 +10438,21 @@
 /ProcSet [ /PDF /Text ]
 >> endobj
 4492 0 obj <<
-/Length 1784      
+/Length 1783      
 /Filter /FlateDecode
 >>
 stream
-xڝXÛrÚH}ç+Tû$ª‚2W]öeËñ­HÅ^ÖÆ»[•äAÙVEH¬$ÛÉßo÷ÌžÃè2’NwŸî>=Ä{ôˆw9ø4|¼Ä£$HHB½éƒG%
-"B½0N™o:÷¾ú?¾äy>ü>ýüñ‚1/’0¸š30x•ZuZ•mV¶
-®œOÿ
-(Ü‚·÷^*νÙbðõ;ñæpï³GžÄÞ«Z¹ð¸ŒƒPJ8.¼ÛÁ_b’>b*7'< 2ôB‘
-ba4Hªtz_G¡þ?Oi;q.üqƒÿÜ/–u^Yì·Íô¥!‹‰/xh]°ZH¼åAH£fƒqZgi›—ʤÕÓY¿à}ð$áýô1k\P“Þ/xt8RnC:}ÊŒ¿z~Ò(o³ºCér›”œFìS6mZàêÔ`N‹<Óèœ` ÝfÄd€ÜÚ†DÉ6"sÿd>§PßDò:kÃ+þTõ.¼° ]a„ó^óö©znõÉ]ÓEzÜ!)Û¶HÆc0%>Ô¯”ÚŒ0nå~:Ÿ/·¹xZ-i9w‡8á‰/9
-³A¹Êkˆ*8LVøÕCà´iòYZt)AýÚ8Õ$÷ÛÊ03] 
-÷©3I„` š¾t¸Ím 'Ï÷€¦È›'wJË‡ª^ô›ûN Ð:Lîçu6k«ú—>­1¾œáš“‰Ë¢Fa3cÞá<¯ëªvVFxïÿ°+§D`%äXú²çá_éÈ3f˜I]›Æ¤Ý\/ºï²Ë¼í¬29Ú=v™™ƒ“Ù,kœ&Òˆðã\Ø)ŽFDÉš"úôsußè£K0˜v—o—ÚTøüªÈÐ8hEæÑJ/jUo®†ßBÓ®+RÇöN…VŠD£Uth´?VžƒÂPv¾ê0ÁÉ—ªqWYñÐé®m½1ŠÂ€C×1D‰ñÝéSºl·š
-¼™@öÆ£\ÿônr‹n´»_OÇ×—Cµúön2ùóf˜„þtû±$L$ ””[ÀÜ0{K]ÉXWÀk‚ùóÎ2Î%Ì	cwöÀ÷íç#	òâ¹ÎL¯Áò­¨ÿ)+³o„ŠÖMv‘Ðx?"bc:¾`…¡g¯î²ÿ›#‡˜-ŸRèÚhÃlÏK“Ø‘ÝŠ.y|®Ó]¡¢ŒP*fÕ—¼ü±jîYš7k‘ Š\ߘ=/› ©œ(Akóý(·´†ï6_,‹l_0«Ê‡N ¶Ø{
-˺V¥î ÇÕBt(½˜]^UuÖ…‘þ4ZarÙA;†q„õ+>ŽŒÜFÆ“ùËPJHÃY6ïDÕûH&!Ö‡ä(Òq;éN3­šj-¥øv‹Yò¥	†#O|£\¨›eõ¨­F•ÓYý›i¿]#Ã'–ˆºäиs;/oR„ð
-ˆ“®‘F˜ÐxŠc	 ù°¨¿U5,çHN¼»­°Ÿ¡Ç‹Jëâÿ“ÃB%à}a=U8ùýç(»¬|ÞžkÖòwÚzà‰º¦¼žP#!M’Ö:ÿ\ù,o4h~^¦÷X,ãŠ2uªðþ¦ïn°D]Á‚¡6dÒﶌ„0ÉGݾBºÄ¯%õ•W>Vx8k³Vːg4ˆd¼)hš¶Æe™zlñ®&ÏB$,î>®ÚS€AÌ#‹·¤Í[:>‘ß
-wË¢JM9¸Ê`Ô…Gg&Ø™%?®0‰ý…‰Ed5EþØÍÓêÆVø`’ÖÍIÝSº»iogu¾4ëû[ê\“³çeeû®ŒG•<a/y—gc“Må›lúÐÛbéÙ f/³úîzü¯{îr?\bAj-lk`è©æMj…ÜFÛÁœvuáœv¥€áPÊCE°)åŽÍ)›Y‘­z^3doVï
-é坙È@¤¡•ùÌ]\%ïGÞ÷®µb©Æµä5¬'¸Óè;N("W2:µ&ô>	í
- ½#	t±ê¡ÛJŠü´6WoÆ} Ä\Wåh‹»®)¯·'±cžq£Sî“?½÷oÚ¾×ïo7=3í‰UëûF$ÁmžÉQ}MiàÕLiÔÉj×È»$]'“ÃCY“ Yé¤^1©áKmô´Öë¢ëös'gnýÉ%P>$‡ãŒ­jÏHaáŸMµÚn4•EQwzç6BõâídC OHkQÒÖ¢V[¾kM‘ bµéwR«ñ§¼Íf8ôº“7ÁÍèÕY¤½³\¯Î5¾)‚ø¥¥ôÖàÍ{Q¸@–~%?‡Xâ]p	 j‡»û}÷>üð	ð
+xڝXÉrÛH½ë+Xs¢ª"¦W.s™r¼•R±£±åÉT%9Ðm³B‘’^ò÷t7%Jî–-]$.Mòx šx÷ñΟ¦ƒg’x”	I¨7½ó¨¤AD¨ÆI áMçÞwÿåå)ÏóáÏéçgŒyq„¡ÀÕœñ€Á«Ôªãªl³²mpÝàt:øo@á¼½÷Rpî̓ï?‰7‡{Ÿ=ð$öžÕÊ…Çe„RÂqá]þƒ”ôS¹8á•¡Š$P°£AP…¤{Ôû>
+…ð¿=¤ípĹðÇ
+þs¼XÖy9d±ß6m<Ò{”†,&¾à¡uÁj!ñF”!z0˜
+Æq¥m^Þk(“@VkL'uþ„ô9,À“t†¿¿†2ôÓû¬qAMbx¿àÑþH¹
+éô!3þêùI£¼Îê¥ËmRrr±LÙ´iQ€«Rƒ9.òL£s‚ôm0#&äÖ6$J¶јûGó98…ú&’—Y‹žñ§ªuá…èº#lœ÷œ·Õc«Onš.ÒãŽéLÙæ°E2ƒ)ñ¾~¥Ôf„q+÷Óù|¹ÍÅãj±H˹;Ä	O|!ÈÞP˜
+ÊE~_CTÁa:°Â¯îº §M“ÏÒ¢K	ê×Æ©&‘¸ßV†™ém¸MI"Ðô} Ã5hn=y¼4EÞ<¸Sz\ÞUõ¢GØÜØwÖidr?¯³Y[Õ¿õieˆñå×M\Eà0jï(›Aóçi]Wµ³Ú0Âãøí»rJVBŽõ§Ï{Žþøø·>¼‚8c†™ôÑå±iLÚÍõ¢Û.»ÌÛN*“£Ýcç™98šÍ²Æi"?̵âhD”¬)¢O?W·>:ƒiwùz©M…ßȯŠƒVd­ô¢V%ðæjø-4áº"ÕÑx\`ïTh¥H4ZE7€öAûcå9(eç«œ|©w•åîÚÖ£(8tíA”ß?¤Ëv«©À›9 d¯<Ê%ño&×èH»«ñåt|y>T«¯o&“¯WÃ$ô§Û%a"¥t ÜÒäF€ÙkêJƺ^ëÌw–qÆ(aN»³¾o—8gIufz
+–oEýOY™ý T´n²‹„Æo#"0V¡óõ	+4…<{v×–·¿9r¸ÙÂð)…^¡6ìÀ¶ð¸4ùÙè@Эè’ûÇ:Ý*ÊEáA¡böP}ÉË_«–Ñ螥y³	ú¨ÈõÙã²	šÊ‰´6åvcC€Öð]ç‹e‘màfUy×	À{¯aÙ]ת”à ãX Zˆö¥³«Ó‹ªÎº0"Ò£V!GБ´aGX¿âÃÈÈmd<š?
+¥„4œeóNT½tab}H"·“î8Óª©ÖRŠo·˜!Ÿš`8ðÄÊ…ê±YVÚj4Q9Õ˜öÛ52|Òa‰¡	Iö;·óò*EÏ€8éi„	§8– ’?;€úGUÃrŽäÄ»«Ñ
+ûŠq¼¨´!þ·*ßèë©ÂÉè?Ùeåóö\³–¿›ÐÖOÔ5åõÌè„		l’t°ÖiìôeYä³¼-@Ð0 ùi™Þb±`Œ+ÊÔ©Âû‡¾»Áu†ÚTI¿Û2Â$uû
+é¿2”ÔW^ùXáá¬ÍZ-g@žÑ ’ñ¦ iÚ—eê±Å»š<e°¸ûì›nB~1,Þ’6oéøD~7Ü,‹*5åà"ƒaPþ™`g–ü°Â$Þ.L,"«ù³(òûnžV7¶Â“´nNêžÒÝM{=«ó¥YßßÂPçš¼˜u8/+Ûwe?¨ä	{É;?›l*_eÓ‡ÞKÏ5{™Õ7—ãÝs— !)ž9%ì…m
+=Õ¼Jm£ÐÁ ƒÛh;˜Ó.ΜӮ0J¹¯(ö"¥Ü±9åb3+²UoÃk†ìÍjà]!=¿1ˆ4´2Ÿ¹‹«¤âýÈûÞµV,Õ¸¶‚¼†õ w}Ç)EòJFûã±Ö„Þ'¡]Á ¤·b$.VÝu[I‘ŸÖæêÕx¢”؃˪mq×5åõö$vÌó1ntÊ·äOïý›v†ïõûëMÏL{bÕú~Ip›grGT_SZx5SÄAÚÁu²Ú5rÅ.	A×ÉdÿÐEÖ$hV:©WLFjøR=m§õ:‚èºýÜɉ[r	”Éþ8c«Ú3RXøGES­¶MeQ@Ô]£Þ¹P½xE;ÙCãÈÒÃZ”´µ¨Õ–ïZÓŸå€XmúÕjcü!o³½îäMp3:duiï,ã‹SoŠ ~k)½5xó^ΐ¥€_ÉÏ!–x\Â#¨ÚáîFØýŸNÿà'ð
 endstream
 endobj
 4491 0 obj <<
@@ -11311,17 +11307,23 @@
 /ProcSet [ /PDF /Text ]
 >> endobj
 4610 0 obj <<
-/Length 1593      
+/Length 1596      
 /Filter /FlateDecode
 >>
 stream
-xÚ¥XKs›H¾ëWP{YTaæGE¶·œM%R*[•ä€IÔ"Њ•¿=Ó #gFŠÉÉCÏC_wý²k­-×úkôz9ºº¥ÔNèûÜZ®,⺎©å‹ÐñB%Ö{VMZ4õøÛòÍÕ­çÂ)'tC"/0æ9Ìõá9uôp8dòØèf9úoD@§{¯ÂafÅÛÑ—o®•ÀÞËuX(¬Gurk1O8¾çÁ:·£#·Eêö¯€pê0î[>¥…ÄA©C˜C”î®õeB³WåxB»ÜFMOªlŸÌ³£"‘nߎ·åÑžAñ|~‹ër׋¼ŒÚÇ«wEÝDùDþªÅ¸DhM †ÇCD•ÃseqªŽ¶GíãÁ‰ïâ«Þ“ª\§è|*Dët<aŒÙÓ8.÷…5Y±–2n?fÍwgŸæ.ÂJm¹çqQÏ‘9QXasˆÝ"m: Ìþ´Ã¿öeÕF >a! !灸:Z*ÌʪJã[yQ.îŠøIΟ΀-ô¤ïAc:hÓ¤|P<÷y, at tóÑSJ¤ü[ÖÍ"7¸{]eߥ8­j<´*+Üùœ	2·6òs–g)jZ›IÊ8Eé’öŸïÕÑRu¹iYº“|ý)P¸êù¡åyÀ1žM 
-Ø1}hÒž
-Ná-îÒfÙñ6ËStûâZ":éÈh(~Á‚9<ôuž÷Œa[Öuö·FYlʪ‰Ë-ÐÏÜ'À°ôu0TÜ7ûªµÇuŠÄÊËÝöIˆçRÀð`˜÷Í&­Lyè3†3mÊÎͨ˜`îeTS"óôqšd*©;ÊÑRï¢&­2ø2á~Ù:½àÑúiºo° %iž*$
-DÙšk^¥uZ}{¾õvW½´Û¡ùZ#>EƒÑœW„ó‡U__ž AÓñÕ%|½¯Ž¸E£Æ¯›Ã.²"ML}4´ÿbúúzÆŒËâèp3ÓdÅü°¶¼‹ã÷Q®7ΙÊÍ/ã02>Ð!{~«ªÜžò‰Û’”RÒ–eg2Uך(–eh„ÔBì¤#jû¬,]}x@¨#^8BkÓ²JŸG^Æn§Ølô:—rᏻ/ör¨oF¶ÛŽç7UUšÍ@]&Äå6y5Ô‡^ÏS"<\½ë,„A`·½Ò,*þlºnIö¼mêƒöÜú]ž„|mJć™M•_¡%‰÷»:J’z+xøZÂí¿ÓtWãrZÿ›É]ã'vE°øØ&¼?±e®ëGUƒ«¥Yaì˜îÛªXMRÈ]_ý¶1væNÖUÔ!ú¨PŸ%´†>ꊁ<Pa¢ãc¯‡˜áÒ±wl¯Ýl³¦ÇG#=YV9àOþ"5ÎGá¡œáЖöÙ‰…NHù·8]ª[Dˆ6Bq/¡™ ®?±¶¸Oá·ÅÉÌ‚‚²pIÈXJÅ1iÃÞiàƒ€ºîáꟹ‘ôªÝªÊýÙ>‘9ê%s©†Úâ3U-3ˆL-æëTÅœ\¶.IÕŽ¯œ"ōœ,ä¢ç¹¿M‘";nÃÔ‰÷°.=W½
-¾Ï¨ùql­Í¾%!	Èo@[µ>íÖU”È,Û%›Ž~OU‡À ‡ÀÓÝŽ•ÂNûGq^4y2ôùe=´$Õ×¹.Œ„´Ÿ\„¦m,ˆ½´±%zÞ{îÚŸ7Y,¼vgžq£¶Ý¸žqå,ÏÙ`ÏW§øµlÐÓ䧾Ý(ƒî§N蹓ðè]ëÖE“åùqDT[A!üË*¹šJCŒÍp°û‡‚ÂÐ¥
-õñkÜ
-E‹®Ý‹÷,¡°ÀÍ­Â*¦ó,ÎÎLL%w6€…„ê7˜§³ºZ•GV`f!;Ù¼?µ5°	°7U’Þ¡öÏЮæÇ8÷i©'Ó…9ÌÀ|ô÷XÇζëÇ–¶X§¯ðã¾l²ÕtÎû…ª­C»iñ~yÒž›üWÉb›ø¯­ãØbNÎ4X®lJø Â{ÌH!½ßµv¢@KE)Udô´’µéNJ_§(‚)ÒÀRÐO&òôŠ²¾ÞrUoÏ+Üý½YŽþbç…¸
+xÚ¥XKs›H¾ëWP{YTaæGE¶·œÝ8J¤TR•ä€IÔ"Њ•¿=Ó #gFŠÉICÏ|ÝýõK®µ¶\ë¯Ñëåèê–RK8¡ïsk¹²ˆë:"¤–/BÇA”X_ìYY4iÑÔãoË7W·ž§œÐ
+‰¼À˜ç0ׇש£‡Ã!“ÇF7ËÑ#b8Ý{+fV¼}ùæZ	ì½±\‡…ÂzT'·ó„ã{¬sk1z?r[¤n1ñú§ã¾åóÐQZH”:„9TAéîZ_&D0{UŽ'4°ËmÔdñ¤ÊvðÈ<;*¹àöíXp[žíÏç׸¸.Çpý±È˨½q¼zWÔM”OäW-Æ%Bk0<"ª^W' zà(A`{4Ð8œø.¾Õ{R•ëA…hŽ'Œ1{Ç徐¢&+ÖRÆíǬÙàîìã|aÂEx@©í1÷<.ê9Ò#'
++lÑ¡[¤M„Ùwøû~_6Qmârˆ«Ã ¥Â¬¬ª4nðÛÊ‹rqWÄOrþÜpl¡'}7ÓA›&åƒâ)¸Ïc¢ó˜žR"åß²n1¸ÁÝë*û.ÅiUã¡UYáΧ¬H¹µ‘Ÿ³<KQÓÚLRÆ9(J/´ÿú>Q-U—›–¥;Éןò…«žZž#áÙâЀÓ‡&]Pà©àÞÅAºÀ,["ÞfyŠn_ü@KD#
+Å/˜B0‡‡¾Îóž1l˺ÎòÖ(‹MY5q¹ú™cƒû„ 6€€¾†Jƒûf_µö¸N‘Xy¹Û^"	ñ\ê> L ó®Ù¤•)}Æp¦MÙ¹̽ŒjbJdž>N“L%ubG9ZêmÔ¤UO&"àÁ/[§<Z?M÷
+´$ÍS…D([sÍ«´N«ïcÏ·£Þö‘c;4_kħh0šÓãŠpþ°ªàë«Â h:¾º„¯÷Õ÷±hÔøtsØåQV¤‰	¢†ö_LC__/À˜qYnfš`¬˜Á€k«ÁÛH1~åz㜩Üü2#ã½²gá·ªÊí)Ÿ¸-I)%mÙPv&Su­‰bY†6`@H-ÄN:¢¶¯•¥Ë uÄKGhmZVéó( ÂËØí›m€^çR.¼Æãꛑí¶ãùMU•f3P—	qùÃ&¯†úÐëy
+A„‡«·…°1ì¶WšEÅŸM×-Éž·M}Ð~€[¿Ë“¯M‰ƒøá0³é£ò+´$ñ~WGIRo¥@ËC¸ýwšîj\Në3²k|Įڄ×à#¶Ìuý¨jp• 4+ŒÓ}[«I
+y¡ë«ÿiGŒ¹“uuÈ°.*Ôg	­!¤ºb T˜èãøØë!f¸tìÛk7Û¬éñÑHGO–UNø“¿HóQAx(§ƒA8´¥}vb¡ÒCþ-ŽB—ꢍPÜKh&ȁëE¬íîÓGø¶8™YPðA.	K©8&mØ;
+|P×=\}žI¯Ú­ªÜ?œé¨ë™£^2'œj¨->SÅÐ2ƒÈäÐb¾NUÌÉeë’TíøÊ)RÜÈÉB.zÞ‘ûÙ)²ã6LxëÒsÕÛàû„šÇÖÚì[’€ü–´Uëãn]E‰Ì²]²éè÷TÅpp<-ÐíX)ì´çE“'CŸ_ÖCKR}ëÂHHûÉEh
+ùÐÆ‚(Ð{A[¢ç½W à®ýi“ÅR°Ákwæ7jۍëÙ™WÎòœ
+öquŠ_Ë=M~ê‹Ð2è~ê„ž;	Þµn]4YžGDõ2c+(„Y%WSiˆ±Y v((]ÚPÿ`a»¡hѵ{ñ¾‚%¸ù£UXÅtžÅÙ™iƒ©äΰPýàótV7ÐA«òÁ
+Ì,d' ›÷§¶6Ð#ö¦J²Â;ÔžâÚÕüç>-õdº0‡˜þëØÙvýØÒëô>Ü—M¶úÂy¿P¢uh7-Þ/OºÀs“?ã*Yr7
+?þy>Ỷyâ"òo)ÎÜ»`6
+	çÝ®µ*çK©r¾” g•¬MoRú:EL­(•‚~ð›ÈÒ+ÂúúÊU}=¯p÷{³ýÎ܁à
 endstream
 endobj
 4609 0 obj <<
@@ -15055,7 +15057,7 @@
 /ProcSet [ /PDF /Text ]
 >> endobj
 5232 0 obj <<
-/Length 1314      
+/Length 1316      
 /Filter /FlateDecode
 >>
 stream
@@ -15065,11 +15067,12 @@
 /¹ºÍß„ê`ùmþçûCO_}ŨĚéäj>­Õ¥¥ÌÝ.,Djúz¨5oP4C+-‚1uÐ
 d­mÚ
 Š‰M ”e zÑ"Í4ß‹Y¼Ç}Ä{•¨ß}ŽÆ´ÛÜ7‹“è“®&emÉ¢ `ÿ»6útd7oåg‘ò$Ô§(×v¼HU¡ÊÒä…¨ÓnwãÍó˜
-eÏqôr”Ï2	Ê#µ¼gç98!W÷ý…	‡BÉ—KB8ê›axFœÛm{®„Š²0]û±.⋱k¡l—ëB%¾ôq¾Š· §Û.çbKÉEu)L¥ºÏ2S”ĝQ¨„1‡¾_#ÚZ/–·žRâR¦ÔKe¸ÎÛmeâP”fÅ»¥¡uO•[ãE¨ä€ïE]Cªê⫾ÂWP.óu©~(Êz¶Ûƈ[ö rC;êâ1&?Ä$y5Í/Èâmqôn}˜\P˜b(fkU¼ZBÞ@ðóÊ»ù­:ÿ©šfêø[º™œâ¨Ü]Cb;oÇwk|Þ®r$J+Övˆu‡¡­Û0ÈL¦ômmèÙ…\î"n;Cõ¶Ú€ÏðFÏqM<](ƒX¾JP;ßȠŽٖu¨Ç¾ŒÛ¿Âi·
-ÛâÎJÆyäuÆ~é=ßÏáÔ¡Ð~Ÿ¬œJYûÀiÕ±žì	¤~Ò¯¥°á.Øw"˲-µ­öÿ}tºܖ¬îPiEk#²öŸ´f W:*|ô:MAõ
-馱Eä}ížmQ°…ƒ‡²»mìM‰+ØFÖ·y¹	ßã^æ00ÉP;|ÌI`µ`·ÍS9Ÿgj;Pß*s4¶hœêŒüC’‚ž;]¿Á3ªÓi””ž–Å"Xj=Ø'§S§|‰Ûéì°~yÊЁ$ú»ÄÒ¾¹XAÿÒ­­K±@\¶Àé„ÔŠµô>W N	ŘJ’áQf­$•ót=Ít°tÒ\þŒÊ
-žÕL²Št.%q¤
-mOmålZ‚VÿÜô†*ÿûö!~‰Ûêå®æ9ö÷ëÌó×òòƒnÄ è>蹄=ØvWÚûa˜+]}Õ>ŽË„‡#›z"-l&…‡+æ´Á<W¶&ɧFª*2ÒÓÖCӁ,><cÅ`Š—¸X©£}Ñìî=Œkpq:€I®}‡vê¬æ„Ù-Çr Z\|ÀøÃÛÆŸïjæy€!Dÿh™ë™»xåœÞÿ'ì«ÏËÅè?xãà
+eÏqôr”Ï2	Ê#µ¼gç98!W÷ý…	‡BÉ—KB8ê›axFœÛm{®„Š²0]û±.⋱k¡l—ëB%¾ôq¾Š· §Û.çbKÉEu)L¥ºÏ2S”ĝQ¨„1‡¾_#ÚZ/–·žRâR¦ÔKe¸ÎÛmeâP”fÅ»¥¡uO•[ãE¨ä€ïE]Cªê⫾ÂWP.óu©~(Êz¶Ûƈ[ö rC;êâ1&?Ä$y5Í/Èâmqôn}˜\P˜ÎPÌÖªxµ„¼àç”wó[uþR5ÍÔñ·t39Å?P¹»†:Äv _¼
+ß­ñy»Ê‘,(	¬XÛ!Ö†¶nà 3™fзµ gr¹‹¸=Xo«
+ø<kÐiôÑÄÓ…2ˆå«µ@ð,ZÜ›mY‡zì˸ý+œv«°-î¬dœWA^Gaì‘ÞóýN
+í÷ÉÊ©”u°œ6\ëÉž@ê'ýZ
+î‚}'²,›ÑRÛjÿßg@'¬ËmÉê•V´6"kÿIk:q¥Ó¡ÂG¯ÓTߐn[DÞ×îÙ[8x(»ÛÆÞ”¸‚md}›—›ð=îe³ “µÁÇœVvÛ<•óYpö¨¶õ­2Gc‹€Æ©ÎÈ?$)è¹ÓEð<£:FIéiY,‚¥Öƒ}r:uÊ—¸Îë—§H¢¿K,훋ô/ÝÚºÄÅ`œNH­XKïs…âô‘PŒ©$eÖJR9O×ÓLK'ÍåϨŒðÑàYÍ$«HçRGªÐöÔVîÀ¦%ø`ùÿÇíAo¨ò¿oOâ—¸­^î:ažc_±Î<-/?èFLŠ^@àƒžK؃
+aw¥½†¹ÂÐÕ'Qíã¸Lx8‚±©'ÒÂfYx¸bNÌsek‘|j¤ª"#=m=4ÈâÃ3V¦x‰‹•:ÚÍîÞÓÁ¸÷§˜äÚwh§ÎjN˜ÝÑr,¢ÅÅŒ?¼müù®fžBô¿–¹ž¹ËWÎéá±ñÂþa±ú¼\Œþü¡ãß
 endstream
 endobj
 5231 0 obj <<
@@ -17646,15 +17649,14 @@
 >>
 stream
 xœ+T0Ð3T0 A(œË¥d®^ÌU¨`dn¬gjb‡±
-õ̍
-LÌ!´¡1D½…‚K>W  *
+õ̍Œ, ´9D½…‚K>W  ¬2
 endstream
 endobj
 5680 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110837)
-/ModDate (D:20080610110837)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090357-05'00')
+/ModDate (D:20080528090357-05'00')
 >>
 endobj
 5681 0 obj
@@ -17683,7 +17685,7 @@
 endstream
 endobj
 5683 0 obj
-61
+60
 endobj
 5677 0 obj <<
 /D [5675 0 R /XYZ 151.701 685.529 null]
@@ -20299,19 +20301,29 @@
 /ProcSet [ /PDF /Text ]
 >> endobj
 6169 0 obj <<
-/Length 1459      
+/Length 1461      
 /Filter /FlateDecode
 >>
 stream
-xڝWKsÛ6¾ëW°§R3C í!Ó<œ:3i¦curHs€EHÂX"’²ãþú¤ª9ä",°‹åî·¬Òh¥Ñ»É«ùäŵI#•&uZ«h¾Œ”QI™ª¨¨êÄÔ:š7Ñç¸H§_æï_\gYT%uQh”Ìt–Ô¹E$ó&l­o§³Üèøuh‡.l¦3¥U¿^ÛÝà:fiÔ4y;Ÿ|àUøöÑ'M’çÑb;ùü%ཏÒ$¯«è‘$·Qnª¤0èMt;ùs’Šti’eú\YY—ÿ«ì{`ÐfJvôÚ¯öoª<Ö‰bd”9¾gê$¯Š™ß•<ß~³ÛÝoæZàJ¾ƒ†6I­õÀq¾Tbj"Ц@Õ_'i¢‰=®t8ސƒ7Û,zà—0Ÿ©,© UfY¢Àÿ0øY“X8;2‘ã¢NâRTIZ€#©J´®æ¿SUœ£Öó¨09F寶q]?ضñíj:Ó•Ž×aš•ñ#o>ÜâjâO¾m¦*fVϼÅÆ»9€ÄϪ’<ì¦3 \gÇ÷±&PÄò¶uŠ>âOèîÑ`°h¦òÄŒŽ8Röà»Ðn™(O à2ÉÊVðÀ‘ºÅi·a`âŽ-àÍn/§àÉr/´|6¬EªßwK»MXòêå&+Èö^¾ˆ®”WFÔæÜVDúpÉÁÞsèm°S–\}"m­p¶e¢	¼z€bV¦:¾A†ªc°{¸Rgl0Êô¼2" cy¿
-„ÿ6"Û8ËBƒ|¡w¢f¿;ØuÁD%7õ)*y‘þ'À$õè‡5S¾µûº§ô@ñ¡³Ò«%ôð ’%wÛYÈ# MÌL–ů0˜ÈÚ¸áçþØ*ÃF­	q؃Ύi¼†DÇ
-fcã6þŽºðvož›pÃ~¼¿äÊ$1Ò–ôw<S×V–AEfùX\7¨§¬(¸î¦FAQ,®‹aóÄÇáÞ
-…è㺵÷Nr]4ž ¾õP±÷®ÿéR×ÕÐ\ÊC}ßP×] ¢ó«5nÁõ
-e<rr$†ïßüÖ]1‡-AT\/—;wvÛõ½kâXwâÁ\WOÛa@œ‹¼bôà£gò¾Ô!Zuoq·_ ekæS®#î§?ŽŸ´5A;åÆ@;±¿bûQŽ*©…Ý÷"¶	½°ÁÖe°ë¤œö‹Á?øaü.<w‚jCµsáõòöYyÉÊ*ßXNJ8Æ„m-ä¥Ý°üݾkœÜ	ãÝqß­lëÿ‘2û㧵£ÀhÃÙ¨Ç éÓðÂvxCVÀØB(iÍØç;}û—Ð$Ê:þØRNî!¢àº¶ÝV>LMAbÓCÂwoD[ßþÌ’[ØøQ I¶åêØ68=Žë€»-3¡Ð-AÅü¨éf³ò×ã¬Ó‹^{ès‡tÙe¶—\€”êÈ¢bL
-SÆ<0–ð ’Ù”ô}Sž©ÆóžWòVNzR9cüB¶;;ê
-ã:€·uìŠTT
-Ñ7ÊÐû‰"‚~Ç»±"/yrHAÎΦü¼õ'ҤʤÚ(ššAW^%U%È™RðT^ORg˜-é%)% ^¹ÖaQý¥Ö‹ù^'Z©1ß©Œ4_SM¼ŒïÝŸÜQ;¥|Ä¿Š? <~Ñ¡@èÃR¸ÏÃ}ßrßw~xzy©Ÿ ½Ô%EA§¹ºä‹)“ŠæC™ÚÍ	5<Ë~ÕÎB{é{EqÜ÷¯0¬Øøs··™XŽ'ý:t8ETeϧ0™áÃOO pDJ ´kD£g>¯¥LM@ü æ©·«ÆÖ\Ÿ¦É;xÙ¡é‚ŸS\i”‚€ÂÐ Š›ç™xÌy¥¨#!sœD
-ß<K1~3*‹Ÿx³yžÒàÕ³|{2+üýøuö~ì
+xڝWKsÛ6¾ëW°§R3C í!Ó<œ:3i¦curHs€EHÂX"’²ãþú¤ª9ä",°‹åî·¬Òh¥Ñ»É«ùäŵI#•&uZ«h¾Œ”QI™ª¨¨êÄÔ:š7Ñç¸H§_æï_\gYT%uQh”Ìt–Ô¹E$ó&l­o§³Üèøuh‡.l¦3¥U¿^ÛÝà:fiÔ4y;Ÿ|àUøöÑ'M’çÑb;ùü%ཏÒ$¯«è‘$·Qnª¤0èMt;ùs’Šti’eú\YY—ÿ«ì{`ÐfJvôÚ¯öoª<Ö‰bd”9¾gê$¯Š™ß•<ß~³ÛÝoæZàJ¾ƒ†6I­õÀq¾Tbj"ë¤6ªþ:IMìq¥Ãñ†¼¸ÙfÑ› Ÿ¸„ùLeI©2Ëþÿ€ÁÏšÄÂÙ‘‰u—¢JÒIU’Ö—¿SUœ£Öó¨09F寶q]?ضñíj:Ó•Ž×aš•ñ#o>ÜâjâO¾m¦*fVϼÅÆ»9€ÄϪ’<ì¦3 \gÇ÷±&PÄò¶uŠ>âOèîÑ`°h¦òÄèš-s¤ìÁw¡Ý2=Pž Àe’•9¬èI5Ö(NÓ¸
+wlov{9
+ Oþ끍CËgÃZ¤ú}·´Ù„%¯^n°"lïå‹èJyp…aDmÎmE¤—ì=ׁÎÐ;0eÉÕ'ÒÖ
+wa[&šÀ«(feªãd¨:»‡+ uÆ£LÏ+#2–÷«@Èðo#²³,4Èz'jö»ƒ]G>vAÉM}
+J^¤ÿ‰/I=úaÍ”omã¾î);P|謇ìj	<<€|dÉ]çvÒÈè3“eñ+Œ%²6nø¹¿ìÊ‘D‡=(혆ÀkHtÜ`66nãï¨o×ùvá¹)7ìÇûK> Aâ#m)@¿pÇ3õqmeTd–ÅuƒzÊŠBënjÅÒáº6O|î­Pˆ>®[{ï$×E㉃[{ïúŸ.u]
+Í¥<Ô÷
+uÝÑ :¿ZS1á\ßPÆ#‡1GbøþÁoÝsØDÅõr¹sg·]ß»v!þˆu'îÌuµ¦ ºÈ+FŽ13z&èK¢U—ñwûZ¶f>å:á~
+ñãHñ	A[´Sn´û+¶å¨‘ZØ}/b›Ðl½q»NÊi¿üƒÆïÂs'¨æ1T;^/oŸ•‘¬| Jñå¤„cLØÖB^Ú
+Ëßí»Æɝ0Þ÷Ýʶþ©±ð¸?~Z;
+Œ6œz>
+/lw€7dŒ-„’ÖŒpŽ°Ó§±	M¢¬ã-å4\á)
+.¬kÛmåÃÔ$60=$|÷F¹õí/Á,¹…=Œ;d[®ŽmƒÓã¸^± ¸Û2
+ÝrT̏‘~`v1+p½0Î:½èµ‡FwH7]va{¡aBFudP1f†)cžKx¹lJú¼)Ï4ãyÏ+9+ç<©”1~!۝õ†qÀY:6Eª)…àeèùD¿ãÝX—bqÈ@NÎ¥ü¼õ'Ò£Êæ£Ú(šAW^%e&ƒ5Ώ3¥à¥¼ž¢Î0ZÒKR
+J@¼r­ÃšúKÓÆÍ"ӝªØHï5ÕØÃËøÞ=ñÉucQÊGÜð«øÀã
+„>,…û<ÛWñ-÷ð}燧——ÚðYýÑC]RTqtš«K¾˜2©h<”1¡]јPëìWí,´—¾WÇmÿ
+Êm?w{û‘‰åxÒ¯C‡CDUñ|
+ƒ¾ûôòÈüG¤B»F4zæóZÊÐÄïJžZ»Ê`jÍõiš¼ƒ—ú—.ø5Å•&)(
+ ¸y)÷ÇœWŠ:2ÆÉ<Ôðͳã'£Ò¹ø‰÷7›ç!
+nPÝ1Ë·'ãñ¸Â¿N~²
 endstream
 endobj
 6168 0 obj <<
@@ -20328,42 +20340,56 @@
 /PTEX.FileName (./Samba3-HOWTO/images/domain.pdf)
 /PTEX.PageNumber 1
 /PTEX.InfoDict 6172 0 R
-/BBox [0 0 814 521]
+/BBox [0 0 814 522]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
 /R7 6173 0 R
->>/Font << /R9 6174 0 R>>
+>>/Font << /R8 6174 0 R>>
 >>
 /Length 6175 0 R
 /Filter /FlateDecode
 >>
 stream
-xœ•œÉ®$·E÷õ¹“´P:9“K
-†aÀ“”ðºÑ–ä¶ú©­–Ãïœ2XU™A‹RE’Á)x9ÔûyÙVµlô_ý|ûzûÝ·aùᗛ떴]þ{SË»[f–oÿp‹J«5…EÛÍ­É/¯Ý¢¶˜Ö¤o¶°Z³ÀµÕ‹Ý‚Z½ëßßÞT4n±[ðiŒîÔ¯­„··j0AªimHì¹·ïoo­üfiþåä÷ýó¶ß¶5:å¼^øÿlÖ£œ? ø×€
-ù-­Ê-.©Õj¿¨ìêÜòñ»Û÷h¿é5Ô6•áÚ†5¤ÅxeÑR¨‘YÍædB_K¹½›æôà€€.N-Pa«7¿j‡N×í¸–÷䊀ÚÛÃi õtÕ’óP¬’OÔšG‰ÍÂýº¢X^«±œª–!¯ꨣ	F¯É1ï›…×ñŠšŽÍ–„¸nv1Ú­ß1ŽVëÂé9ÇŸ’+ü%uLƒÂ<V¹mâF£»YÞ³‰rEåL[-KÞÖÙ5`+LwSVg”îŸ÷õœãC=%øáÐè™ÃÌQrÏæøà™g—<¢‰ób—æøà’ÒXk°›ÆÉz½nFEŠÆè÷Ík×?œâ£ƒü!¶ëýšh8¶&/†aÖŸ2Ó·”EãaŠ˜ÍÉæOoÌé<=ÇŸÎÓ+ü©ƒ.Dê2rsšYšÑúªÚÎœŽ™9>:(ÀY—TÚéª1´³fõ¶[J§Ì©ý°ÙäI…O©nÉy	¨ý(ñ Hk(=æ% ¦½aŒ'UÓR(ôo‚<8ë9>ô†ì
-oíj¯Oµµ¾ ö£dFa©8æ% —Ç"©
-§Zdây	(êY„
-joâêc^”ܶb±m–RÇ9µ3›¸ž®XÊâ?§¸_	Ü%Ëè×9Åü
-8Îñ«eðë‚b~aÈ®ÛÐÕ2øuAq¿"z}h‰jý:§˜_Qa¼-Q-ƒ_ó+Z·úÀK¬–Á¯ŠûÜjÃPb±Œ~S̯´
-ÝC_žþ;ó%l5/¥Z_.(î‹·X\‡âŠeôèœâ~%³º4”X,£_çÔá—ÁúK1è(±Y¸_WÔ~ûù¦J,¬o_—/_°KN´QÅz––—ïoe÷¬…jÑé[YÅüòzûôoß½¾ùø¿Ï^þu+)âòò§Û§_x}óî§Ï>¹}úÕ‡Ÿ~ýøáýûï>âÛï_nßLD¿ÅD
-2ÜYO[¡@K"š²:Ëô»ÕA€óÕA„Û”Ö¼u7^¡± ö2íóÞ…9>¸ Áû¥¶°Q ×Á£;Ñ‹=y1PWÏV'¯í_TÕB9I¨ý°9…žãåÃàÓ)3Ûýõ°¬ò%é5ZŒK,l›:í„Súi\нÚ˜Ñ<Ï[YER”Îxª%7€zÜúÝŽfRiƒFÃÜtkð¤½ëç]-8¯¦?ÙúE	lBÏ8÷L„ßoýÔFÁ9I]àÜ%~½J	{Mg˜,‰¢6,Æž9(À¹ƒ"üµmˆ+gÊÁPkóf&ü5«uËCEh;Eg¥¨¡òýód¦^àϦê%~½ápèØ _µ5È4d!öNºE€sExï–Nklãò9bt~Ýœêê	µ6…Ù’\ˆzƒŠMÝByI¨ý(±S{¨!/	5ë
-ŸKcO¡B„âJ¥½ÜÃpà¼7DøcoXÌù0Ô§Z†Z_PûQr§¼Õ릇¬Ð~KÞ¬Ø%2¨Å&ž•„ÂZ­P"¶úÊEMr1ÒÙØ
-y±žC{7y¨H¥òúVSUKŽ'sˆùäbb`ÅUÃàÓ9Ä|"Ej‡âŠeðéb>Ì/ËJ+ߏΐÃLüUy^Tµp. îOÊǬ´b=:…~£Ä§Óƒ|®±uI1Kü/ß¼ýñ?ÿ^ª¤¿ú‡¼_”LàïÔèh³*¦™Àà|þ‹p°…¶­º*ow¦ïçôà€€fÒ2åcxËF´'¯–"-ç«”Åpy0´tÕByI¨ý°Ñ)s>tééªeðë‚š©ü–"¢¿J¿VùsúYW\ѽ+ÚÀ‰ð<Fjdé÷fÉÍ' U¾IÁС}P˜^˜Um1: |¨¦?QùV)x¯Æ´ç’Z€ÚM‚ß«|ÃH«˜Ô¥9> ð‰Þ…£­pÂ|‰Èb¢òøè  ?Fmâ	+‡Ï[ÿÚäÕÀ§ü93«qËÁŸƒYÑÞúLáðgÓô¿Ö”˜ÝùÞUÑ]‘V3…/ÀG8ë’JoÆб>Ú{‹Ûš+V,¥SæÔÞm)…#SÖÒ³ä8, ö^âAa¡·¤‘y^jÚÑl´Gi)²·æ´7æøÐü±7°k¦À}Ô§Y†Þ¸ ö^2£¢÷¤Þ‡¼zVÅ@/*ªE&ž—„B^%Òu^¢}­éÆ#t`³ä¼ÔÞmVÃe[¸’®YÊ28§¿,âLÜx‰ÍÂýº¢˜_èuW¢XKW-ƒ_Ôá—ÃD3:²›…ûuE~9Ÿ0ž-+±Y¸_WÔá—ß0yóékK×,ܯ+ê7ª~z!âB€Ä :WýVß«~ÝT?;xkŸÚoEvíÊsÑ6R™Ï,õÕX‰TMq¬‰y˜ƒVÉ­)
-ù<XX>““fU¹F5ùÂFYÄ’´X,M%\Í™aÐÎaón¦±‹_è:"с¤Ü“'3v8š²=8ú
-íšèy—ÉMõZׯåÀb‚Ì׬–t»Mѱ¦»dJ˜x8z›ÀãÁÛ¾â._}ÙÅÒ‘¼¡'.«2þø¼wgŽIð!î6z$©äžMñÑ3~/ÄÑ—‰î-¤.ÍñÁ%	~-Köä¾gAO蜮}Þ;8Ç%¸¥+ÚY†ü(§ŽÁúq¿˜°C ™²“#o:¡T@ŸùEq‰<g}7ÇÇ#ÀCV›×Ë¥ˆR:lŒo‡	jZë–ª[‡î
-t÷mæøPk	~Ô:A”Õ½E(µôdm¬µ€¢Q¦\ž#a<K7G" ©nÉÂ@@íÌÖú‘îûŠûUZ„—X,£_çó«DsV`1^2̧ޢGª£Ý%÷©Œs^`±Œ^S;›3½DÒk:ŒãA@!/z‘eÕ@M[ú!/…¼¬§÷ÎœêVGuä•C¦bP›Ô<«H*Øt†õQÖg‘b¡ƒ½|#2ÇŸ‰·Kû%µÒùѦò2Ðq«Ž‰l­GvŠV€2NAéÒAC­>ßOµôÕ’•œ€šŠ9«t~ß^ýR´ãÀp at PXÎçô^çô=—opMÁHo˜×d“zn†ßé¹9~®çJkK=›âwznŽ?ê9H‚….ÍñQÏ	ð™žÃ2eZakì5û|ÐsS|ÔsÜÒ«9Z}5m']„±>Hº)>ª:>v;:š%ˆFØY¶ tÖ‰s|Œ;œ	;HÚrå+²(TË栝ÛÒ1§æ®¦PZWé•,$—
-X·'ÂnŠ‘G€³M3z+ùî=I¶ïÝy­%T+åé·ÂþÌb±‡ì†ªUfÐ~˜Zp?RK€ â>•Ö`ÅÃèÓ)tøT:+®Z¸Oó©·fOv4¹ b>•΋+–Á§shgs¥çéŒltJB‘ CûӍ£è*~Ìj‘‹šîdÔ-¬‚ŠåU#&£ê\òº ¦‚.l‘¶VZ'MŠDÙ€ªÚ1‡–¹‡¨;£Ç ;§ÑKX‹6ô|B/p#/Ò‹ùUë'§q3ú.¦Ni&ål–Ú!|l&‹´’¼Š’›Bs!g}~*T½R؈™¼#Cx¦ä¦ø]@ãZŽ„Ð0>¤'ÚGç›YúYå£bšâ£bàgZN™üN©gs|NüAËémË-,tiŽRI€O´œ¡ß íM欲ù“Þb<üNññèW€Û@»%úåö•˜.mæÏø$ªLñ1¬ð‰ªñX+éñ-,¡5"õá”ZH at 3!éÑ/¶—ô{ù²'¯“bÓ!j.äj
-K»ÕG–
-X)Ì£|ãcÜàLÈ¡ç´ëÞC¢)Ô,ÿ4㨵„ÊçÀ†íèp9{£ç®[ŠB™S;³µð~¤;	Åüª-ÂJ¬–Á¯ŠùU£:+±Z¿.(æWoÕ#ÝÑöŠùU‡:+±Z¿.¨ý˜6G‰Þ…¼Øò™  (/̹¼
-vŠ~ex?«	ˆaô)£š…×Q@±¼(xæ??Ñ-ufy]PûðW	b>lºô„Â…ò'OÚo³çÑý¢”Pw[ßïúý1‰¾áiv}°ŒÊû!ýú|ëéú|{–õå˜Óo»Nù‚Ð/‚œ1ù6ýï>þø˯o~}÷á§åºMWÆX:–Ïv6…åå#õ%Qt¥ݹóüê³OráC‡^•¢ðÏ5¼tFhsÍ(¿¯ÿúç/þøÊ(ßÐsû?2W/‹
+xœ•œÉ®·†÷ç)zgia†ó°´ì ÉnY7¶£XWŠ¯yûTq,ž>Ý,!‹Î-$‹Sñçpôë&…Ú$þ¯~Ÿžo¿û!l?ÿvÓAȤíöß[þïÛ¸E¥•HaÓV:‘üöÜ-JÆ$’Þ¼‘AX³5j«7+ƒÞõ¿Ÿn*'bìø£{õÏVÂÓ­LÐ Õ´6$	ÎõÜÛßO·V~³4ÿrò{÷Ÿnÿ¼í7)¢SÎëþi=”óò3£P!/“PnsI	«ý¦B°Â¹íåÇÛOh¿ij{òpmƒi3^Yh)¨‘Fº
+2Á?K¹½‹Öôä ƒ.Ž-Pa«¥ÚA§ë í(‡åºÂ öa“1ˆˆ¨§«–œƒ"
+”|ÂÖ%6õëŠ"yÁÆRªZ¦¼.¨QGŒÉï›…ÖñŠZŽÍ–„(¤ÝŒvÂDƒãHXgNÇÈ9þp\ác”Ô1
+Ìc•Û&JÝÍòL”+*gÚjYò¶ÎŠ “XÁt‡aª“pFéþ½¯çŸêÉÁ‡C³gfŽâ{¶Æ'Ï88q¨¸ä!š8?%ÒlN\Zã“KüAc‰`¥†	’ôZHFEŒÆÐïÒÁœÆ¯×îèàŸdà‡Øf¬÷"áplM^Ó¬?e–5n9(ëP„fLÿžÍÓsüá<½Â:èBÄ.CaNã"ë¡f¸¾*mw>fÖøì ']Ri§«ÆÐÎám·”NYSû°ÙäQ +žRÝ’óbPû(qP¨5”žóbPËÞ0Æ£ªi)ôoypÖk|ê
+~ì
+o­0ŽÖ§Z¦Z_Pû(™P0ƒTœóbP—‡ERJµÈDóbPس*°¼‰ÂǼ(9)`±m–RÇ5µ›:/p=]±”ÅMQ¿Lp;•X,³_çñ+ÀÀqŽ–X-“_ñ†¬–X-“_õ+B¯O-Q-³_çñ+*/SKTËä×EüŠÖ	h‰Õ2ùuAQ¿‚vj‰j™ý:§ˆ_IN݃N=üïÄ—d`«ah)Õ2ùrAQ_¼…Åu*®XfÎ)êW2Â¥©Äb™ý:§†_Ö_ŒA£Äf¡~]Qûí×›*±°~žž·7oa‡œ÷¯°ž¥ííO·²sV›‚
+ÑvIxPÌoŸo¯þöòþùÝËÿ^¿ý×-§€ïÛ?Ý^}÷éùÝû¯¿º½úöÓÇÏ/Ÿ>|øñþúýÛÛ÷Ñoa"•6å¬Ç­PÀ¥
+"š²:Ëô»ÕÓՁ…Û”DÞº¯ ±@*ØË´ï½k|rƒ÷JÉ 1ëà¡;¡{òbÀ®^3¤N^Ü?TÕ‚9q¨}Øœ‚ž£åÃäÓ)³Úýõ`äKÒ"Z—°°IuÚ	§ôÃ>¸ {´1£%xž·²
+¥(žñTKn:uÜúºšI%	
+æ¦Á£ö®ß»Z2pZM~²õ‹ $P°1=càÔ3~¿õSƒsš9æ§.±ðëPJý`ÁdI]ÊîñÄANdácÔ¶!®œ)C­Í›ešðÔªÖ-AÛ)<+…*ß¿'3õ4U/ñë
+‡ƒŽ
+૶ò‚
+d>ëNdá½[:­a—Ï£ó°ò„nÁnáPû°)X-Ê…¨%¨ØÔ-˜‡ÚG‰rÀa5åÅ¡V½áóqiì)Tˆ ¸ÒYo0pÚ,üØæ|˜êS-S­/¨}”Ü)oµzÊŠí·ä€]"Zl¢Yq(X«”[}å¢F91¤³±òb½†önò "•Êë[MU-9ž¬!Ⓡ)®&ŸÎ!â*R3W,“Oçñ)à1p"ÅUÃäÓ94|‚á&”§ÅUõé¢>¥|d@Š+†Ù§Sèe>ž äƒp
+Û—³Ìóîé—ÿü{«²¾‰}³ØS<‘o¼S –`VÂÌŠi%ò8,ÜØ*M
+]Õ·;Óøkzr€Ay™òQ
+xËf´'¯–"/ש”…ñò`héªóâPû°áIs>xééªeòë‚Z)ý–"B(ýZé¯éG]qE÷®h'‚ç1b#[0a°i–Ü|ê¨ôM
+é³j¡§øTM~¢ô­Rà½âzÆÀ'ýÆÁï•>È+×¥5>0ð…æ†Ûáó%BY‹{îàŸdàcÔÖ!ž`åðyû_›¼è”?gV5n9øàs0+ú[Ÿ©|þhš^â׺fw¾{Ux_¤UÕáît‚­ñÙANº¤ÒÒ<Ú‡ö–QŠ\±b)²¦önK)™²ù›%Çaµ÷eÄoÐÉ4/µìh$îSZŠ…ÊgàSopðcoÀÎYZŸf™zã‚Ú{É„ŠÞ£‚ŸòbPг*ð„j‘‰æÅ¡ /%â•^½*oã!èÀfÉy1¨½Û¬ÆcYàJºf)Ëàš~Yˆ31ŸÙ÷tÕBýº¢ˆ_Ðë®D±–®Z&¿.¨á—ƒ‰ft$%6õëŠ~9ŸðÉË(°¨WçÌðÉK˜¸ùôµ¥jêÓõ…Š_ˆ¸@þÁüõ%Š_7ÅOÞÚÁ§ö²hÂnÁ]yŽÚF,ó‘¥¾+±OFÜÉÂü†1±jÑ*9‘Ò”ÓÁBrZœ5û¨ÊEªÉW6ÊB$I›…°S	VkfZ´s°}7AjœÞx!‘ðH„܃G+v:‘Z²=4z	
+›ð—ÉMõ\×?Ë‘ÅY5.æ”ï·Ñ#<¸Óx›lB	‡Ã·<½-á{îòå—Ý,Ê|ä"”ñã{ïΟâà'2ÜI|&©øž-ñÙ3~/á/Þ\p]Zã“KüZ”:íaûž>.ð%~ñÄîÞÁ5>9ÈÁ-^²à¾2äg9eÚ6ï÷+x
+!kxqîÇ”
+bP€o~V\‚ÏY÷­ñ9Ê0ðqÒjó‚¹UŠÊ£YL0¾&p¨e­[
+
+°wèþ¨€·pÇ€³Æ§ZsðQëªÜ¨îý3DS‹ïÖæZ3(h°cˁ"y~¼âP	$Õ-Y0¨ØZLéFäçPÔ¯Ò"´Äb™ý:§ˆ_% “‹aòê”!>õ©F»s(êSç´Àb™½:§v2gz‰(Út˜Çƒ‚¼ðY–U4î駼äe=>z¦T·:2¨‘WŽšŠ@mRÓ¬. ®fÓ	väPe}Ö)Ä°?Þ:.éGêíŠv°]xz$UþIôšÐ1á“-±è]—ø]øq
+”.Žh%áó
+UK_-YÉ1¨¥˜³Jãž³ù¥pÏðM2šÏÑ•?t)¿oÅ)ñ!³H6éþ=Jº~'éÖø¹¤+
+Îõl‰ßIº5~”t ^fº´ÆgIÇÀW’–);jÛc¯Û÷ðz~MÏ‚nM[|7‡K¯Æí¤ëC°|ïÏÖø¬éøJÕEØÑÁꀿ‚e‰Iö´×øw8QuQ²ç²"T‹t Ûº±¦Öª®¦PZWÝ•ýQFù@Õ-ñ9î0p²i†ÞJ¾{z-ä›wZk••Jyü­`拱°‡ì†*TVÐ>L-¸Tc	`@Ô§Ò¤¸b˜}:…†O5œ“⪅útŸzköd£Éñ©pZ\±L>C;™+½8§d³S
+Õ´?Þ'
+/âç¬ÖꯨñF–@ÝB*È H^5`ªÎå)¯j©æ‚Œ¸¯Ò:iT$ʨªÝ`âwˆº+zºkz	Ö¦
+>žÐ¸#/â›y¡Õá9Àš¾‹©KšH9›õ†v>¤É"­$¯†¢ä–ÐZÈYŸU¯”Ä,¸ƒ8p| ÁÀïê?
+9<‚†ñ!å8éþ ²ri‰Ïr‰Ÿ	9eò¯8iZ­Ã©gk|VMü ä´”¹…™µÆg¥ÄÀBÎà¯ÐG{ã“9«lþâKŒÃÁ~¸
+¸[ÂßÁ¦ÒÛ>
+Û÷U–øVøBÕxX+ñù-ž*A-jD:ëÃ%=µƒ&B.â³_Ø^â/戼ZLŠM‡p¨µ«),nTì*ÀJ¡u^ãsÜaàDÈAρðoÞƒDSP³üãŒQk•Ï
+.*Úá3àrð†\·…²¦vbká}¤‹ ‡"~Õ!%VËä×EüªQ”X-“_ñ«·êH7ÚžC¿êP'%VËä×µi3Jô.äÅ–Î…yÁœË«`§ðw†÷³ŠA¡@1}J¨f¡udP$/žù è–:³§¼.¨}úw	b>lWºø€Â…òž´KÞf‡Ñý¢”Ow[ßïü%þs}ÃÓ,ä9À2:])ïCúõùÖÓõùö('—·ƒ4§/»PøÌ_B[‰|¡þ÷O/¿üöùÝç÷Ÿ>nßà…ºmkÇöµ‚­…Ҷÿ˜©7Há”?ñڝþÇo_•K70vðQ)”þµw#Ú\5Ìþù›?þ3Ê—ôßßþºµ/x
 endstream
 endobj
 6172 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610111327)
-/ModDate (D:20080610111327)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090957-05'00')
+/ModDate (D:20080528090957-05'00')
 >>
 endobj
 6173 0 obj
@@ -20374,69 +20400,351 @@
 endobj
 6174 0 obj
 <<
-/BaseFont /RKBLRI#2BAlbanyAMT
+/BaseFont /BYYIFV#2BDejaVuSans
 /FontDescriptor 6176 0 R
 /Type /Font
 /FirstChar 32
 /LastChar 121
-/Widths [ 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 600 600 0 0 0 0 600 0 0 0 600 600 600 600 0 0 0 0 0 0 600 0 0 0 0 0 0 0 0 0 600 0 600 0 600 0 0 0 600 0 600 600 600 600 600 600 0 600 600 600 600 0 0 0 600]
+/Widths [ 318 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 636 636 0 0 0 0 0 0 0 0 0 0 0 0 0 0 684 686 698 770 0 0 0 0 295 0 0 0 863 748 787 603 0 0 0 0 0 0 989 0 0 0 0 0 0 0 0 0 613 0 550 0 615 0 0 0 278 0 579 278 974 634 612 635 0 411 521 392 634 0 0 0 592]
 /Encoding /WinAnsiEncoding
-/Subtype /Type1
+/Subtype /TrueType
 >>
 endobj
 6175 0 obj
-3404
+3408
 endobj
 6176 0 obj
 <<
 /Type /FontDescriptor
-/FontName /RKBLRI#2BAlbanyAMT
-/FontBBox [ 0 -186 593 627]
-/Flags 5
-/Ascent 627
-/CapHeight 627
-/Descent -186
+/FontName /BYYIFV#2BDejaVuSans
+/FontBBox [ 0 -208 956 759]
+/Flags 4
+/Ascent 759
+/CapHeight 759
+/Descent -208
 /ItalicAngle 0
-/StemV 88
-/AvgWidth 600
-/MaxWidth 600
+/StemV 143
 /MissingWidth 600
-/CharSet (/A/y/n/c/M/B/o/N/C/p/e/O/D/P/r/one/s/t/i/two/u/I/k/l/a/m/W/space)
-/FontFile3 6177 0 R
+/FontFile2 6177 0 R
 >>
 endobj
 6177 0 obj
 <<
-/Subtype /Type1C
 /Filter /FlateDecode
-/Length 6178 0 R
+/Length1 86484
+/Length 35079
 >>
 stream
-xœ}W{\Te>Ã0çœ E9T蜑(Àš¶ šÉEPÔ(a”›à ÃMa[<ˆ27@‡odiæ¡ð’©(™­å‚h¶&[–Yk-tñ=»ßüö·ßa‚™ýgÿ™™ïœï{¿÷}žç½Œ„pw#$‰Gt^fF&:~•¸
-ü%ÂT7aš”C	Âwÿ¢dÓˆ¨°‚	
-^ÎKÊy¹˜êõÈú'C«7TL"¤IÙî}1…EšbUNîVeðêä5!3gÎr>™©ÌÔŒ½QÆf—¨r
-”Ïà¥Ùy…EùÙ[*cðî¼<U–2'OS”[¢ÌØ°!{ƒx,5#/{³2N•§***,UÇ„(Ÿ;wÞlüñl‚*?S]¢Œ/,(T®P&gç¨ó2Šÿç!AS£5Yñ‹bŠ²c“ŠK¶ªÔ/mÎËÈ_£œ÷,A¯‰D,1‡xŠH"B‰@b%GÌ%ž&æ)Ä*b5±œH%f+ˆxb1‘@D‡`ˆi<¨&F$¥’ŸÜrݾ–N—j¥v÷b÷+²©²
-Ù—ä2ê1*›ê¥é|úÑcᏝñHóèóøÄs‚g¹ðp¢ðã!ˆ‡S¼Ä ™°6J…(H’÷¢ Ù‹¤¦VW]eÔµ±0—´ô­-Z}»‘Dë«­'5Z]UµA|íE¢¥vµ,ÔÔà&ñÑL²ÍˆOÔê5ì"ò<É`//GÛI à”l‰oF	Ý‚…—œƒ "¤Ðé‹eˆÁ×j««Zl¤Šl3ZZ´
-»œ£`‘µ:Í")YîpÐÂ^$Q8B0$ûÈeE–iñƒÎÊŽ^‰ƒ½Çñ>àÃÑn?æX(„Ë£ÄHÄ]mlº—N–9¬ZYðs†MäqÞdÞo¦™žCo¾mêò³ê•µ—¶sù4âT”3z7Òâp¢œUž¼½äòüøœm+V*°<ì‚g°C¼Ó%l¼ä©¶ŽFOÎœ…GS~¿k×lçØ7­ûÛ¸ÚXc¬ÕÖïªÕ*Ö¦½\ƒwº½xó7Þ·»©{Xæzùî&]«³Þhe™®ûs½MgÜ®`º*uµv4vAÍKxÁû¤¾„ä0~—íê(žCœà©õqÕÒ*®‚IŠ†Ñ<–‹,WU‹q±«UNˆÅÓ¦ÑÓel´ 60ý.sÀŽƒÎæ%0I”Z/Å?ä«]ÔÒGÞ¼>ôÙú3Ž±}ÇÚ»¸é»ÑWg(ÙyÙ’GÙrȆêFoúÊø„ןcQ:"‡
-¡®pºãe]¥s¸:>e]¬jA2³¾ò¼#G>O!o4y$°F~†‰0%è'4…Ítÿí«çŸ
-^ð|`à‚;#ÃCw~qbö×y©Pï+X;¨qDPˆ(”ªjQ(ƒö,]dÓÉr‡»ö‚ˆ+²ó86Y$\¶7ÈêyÉUl¾XØ#µ'ñðKÜ2.qKzZÆk…K¸:‚Bþà¼aê§WŸ>«h?ÜláL´¹ÖP£ÝY¯­S¬~yí–8¬ ˜ÀöSàùÝC~{'5¡QÑPѤmáèV½É‚;eÑ™ª«t5å
-GöÁn‹é€°B ΆYb"-b–Õx…³Ñ¤ÅVc9àl¬Åٍäé—.æÁÑ0é‡ïÁ“eî€çìûhRÔÚ¢¸TÄ]”ÜŠ	]¼èæ?~9ø3ëÐþbfða?¤É¹Sõ¶Êã¹wž›‰˜Š&"ßGà¼Ît˜jMµuoÔïÔ±Y›«ã9Dp?¯úæÝ­ú/=ärƒIûçÒã žã…°QšoȋܐŠD‘€¿…ià~Qˆ 9šŽéú{D¢@4m¢‘³%(¿Ç_´“zQ°ß8äêJf!	¾ÃØd {‘‚€gÀù*P¡¸AÔ.#$oWË5<E]àº*;sùÌÉ\*½˜
-˜<KáH‰d7|…oˆ„
-9,"¼7øà‡ý,zËEúvµk¶T‘VãZB
-*Ü¡â©Û×R–ÆÅ$‡±c….ºÌëuÈü"Z¤rû(±7ѽ™£+±ŸcmÌ­;å,Šƒ-$Ó5n=‡zür¶‡·êuõMÝl45ëå­ì–jS·–K*œáÀ¿#
-“Gµ´­:Oû1f!VËs¥ïKæh&.dqÚòÍmG5ìÑò£ºA]¯®]×^Õ^i)æ¶ÒŒ9uù†°ç–tRè)&®Yk•k¹(U6¯ËôÚV³«Eo°²fª{ãÙòkXw²¡Þ/ÞÙÖ‘wÝ| Ûœ¨Ÿo¬Û­nÁ¶J[vX,Ov÷¼õQþë{L@Ån½¶Ù¿Eojcó_)& ×ÆjcÞ^‹opÈòWLEh·Öa¨À“²Ö*+ëpª Ïhj¼!¢ƒdÔ•´òÄ[&­¹fçŸëßÐ)2K–”§pt\Æ;çX°A!5^DǨø'¸Ià8¦ù†ÈÄ|.=Ð=æ"­ÿÓXû
-'Ó…»òí:­†M¦0ÍŠ#ä(—¨6¡ÚQáŠEû>¢ŒÞìÎñc¶
-/ûÞr¶¦L%xaî]bh%™žÄ”Äüeþk³ø³,\œåì\ðÛEç×üíÚÇG/ô*œyàðÝ*VÔžX±öœÕX»±ÎÒÎ^€Ÿá >¶6x¢&Á
-4
-ü;ÄÀ2ù©°-‘‘Ì¿6ü6j0é$Ê‚õ¸eùÉN“Œ}¼-#_'vIçÁÇ3öì¼ÝšêÜñ£Ãaöb,¦a‘ñA<ìÖÿÃÇâ±<<ÎûðÐÇgÂD?¦\XàûÐ+Wì_úÑœË«4«;vÖÕq;èC­y÷ž††=ŠÛ‡Žêßåènz…¥’öå5½†+àäð¤0–9ûâÕ5úûÚ/]Qô¸/[‘*öû¸ôŽsŸö¿ÿèƒ3u5ï².“ÌÀIøÓɬaà1Óݱ¾¢-Ï3ã
-Ú2:–˜ÿ T…døK'Žéôï8¦ÊbÑõA§n™Óâû}oÂ^vÛ”Í2MhÀuÃ{*è$û^=»2sSéº
-õ™Í‡Ös\F•&–î€0Ý6ÄKöADAš¼}¯@ µÊþB~‚GH›s¼@O‹^ŠÓ¤•ýšL¶!ü@O"wûÔ¡Hv×EuÎ:k	ECïàä½)r”TñÆNWóD©ÆÐhhäö(àñn™½±.ڀ˘¨pÈ"óW!žßxҏÙ~¼¼‘ºtæêå{ßÐÌzð†	¶·>~òÛð¯fħ¦mT”•TçsºÖXc27é[÷(ö}üéŸsôÍÏãÒË
-g‡²h*‘%QL’0íi­3VWÖÕ–)˜½¹ÔÄm6!܆SÁf#ß÷à=ß÷òâ½&ÄÉ<1“
+xœì½|U÷>~§ÏÜéDêR	mw–$e@ª ,É&YH²!ÙЛ RPTDDDETlˆ¨ˆXQbWDl("6Ä¿™Ùýúªoù>ò²÷Ν{Ïsιå9ç²ñEBHFs…çæwñ#÷‘û²ó9¬°<\™xôóq¸pR܇¢ÍRœ–wçãÅ•%åíIã"gtgIÙÔâDm,BÖˆÒH¸èüøDYí´v/u¤- D-tžÛ”–ǧ$únï|ÄËb…áÄs›-uhWžRÙè„àȧîrZ}áòHóñƒntž_@¨7_«ŽÏQ>¡¾¯!ô|«ÊªHe/îkg<>†SJÑ´Ëùym@«‰õΓ«ßD§e-¹	ÍG5NËvb±ˆìä´­GGЧ紋Ú@#b 
+8­½Åè;¢ mvd¤‘±4¢sèÍt½…þ”ލ’éjz7=–®&ÔÍÌ0f½ó7…ÚAè9Ôm!ö¡j´•:H¨mt­ }ÔnjúØA¡ù»Ð2´Mwt±ˆšMN'󜖝Ìn´Êù‰9ïwkˆ=Žv[‰yh/ZIÑd´†ØëصEó¨r¶ã“ Yìè¿Ó‘µÛ¿
+UÓˆÙK`tœìè´9Ú;Xã¼ÏfT'f¯÷sÍvÐ:vkq­×cë‰íÄ!ö*´í¡FS©wˆùtkúvº?Z–ð 5-sd¯rÇ°ÅÄTÇv÷gº+œL%6 ƒôXnœ#{‡k‘ƒ¹™Ìs,*FÛœ¿“Yͱ©1ŸZähê¾m†vsè.ÎxG7Ó±¡DãÚttÚ„:Q+Ð2G’g/›ÌuF®¦÷;6/#–GÑn*u@ÅôaÇ×ÈBhBq,CS$’|ÚF²mVÑƾCFøžÙ²SÒi>ómDƒ7ÊS}[Nœ<‚nÂŒÜÈ4ÝHµå7Òm[ïÿ½—û;%
+<·ñ×PH
+ÍpÚòG8U÷ÉivÚCÞ;t#ÓÖù_Ö؍¾ÂRßbmqëž‹µHÏNΚuì.?ÞÌÙŒþðúOCä*·å”?cÜk9U€:¢R$!i¨/â¢0¥N鮥ÆDŸ“ãV~¨H$@D4ñ#Ô)$’
+¡N;õžPgDŽ…:‹09ê<ҝ}“¨‹Î*BP—ڏ‚º‚ì^ã ®!±×½P×Ýk‡ƒHЂ3¬«‡îÖ	ԐØuñÄWP§œöãP§QC²ÔԈ̄:‹,²ê<jE.…ºˆz’OC]nÛ“ju•ö<u
+5ìu-ÔuÄ÷z¥;k­MEU(ŠJÇ‘µG…Ϊò!?êêüœÚ8§‡¥9}âÎJ‹;½#(ŒÊQ’Óš…*œþZ**s~|(郎jï)â”gÌ$ç³Èé‰ÿj÷“¨Ò$ËÝNoW°3æ_CÌpjãqÃœóÏç •:uWZÄö,rÎy§ÍçhVã`—9O…ÎS‘ƒ[îôpßa„Òc•S«¢%¥q_ûÂ>×®߸©¾´h¼:^	—'ù²*
+;ûRËÊ|yn¯j_^¤:R5)RÔÿfhwwhAxRùøXE‰/-\ú;3"ãÃÃjœÍ®(‰TûÂU_´ÂWY3®,Zè+Š•‡£Žf§š˜ïè08?\á<¤9ÆÄЧ‹MøsCþLŸaž·«Å<úŸû•ƒ†Eªª£±
+Ÿ¿³?pª¨Ó	«Ø“–˜Ó8¬¸ZÜâX…㢸ãqäÍ{Ü™µž¨‹óS2&92:;ccNYåÌdÄ“WåÍygGnăJãñÊž]º9B'Õt®ŽÕTFŠcU%‘Îçuf=
+j×Hí:ýínpß¹ë.â­Ýˆ³‚bh²Ó×]©ÿÌús%õsÞLuú”z#£Î»JÏ®¸·Ö]¯Uy#ÜÝáJtš'O·£nÕœ²¿~ÏìüœÉöÄ;µú^ûíNǨÓßøÁêôøçϬ3ÏwÍQç
+öjq¯Å]…垯'8m1gþ/]\Ë{òÊ=iu»)êéT꽋€]%JÌzÌ{b¶h‰5–XïIž^1oö+¼ñ•°c1GjÖXVAØ“‘ð4™qO‹Ó×S¡×Ï]‡	éµÜÞ	Ýk9âmøÄÚkUo•´òfÎ[ä•Õž^…Θ0؇½]Pè¬ÐrOJÜ{SëŸb§V;©ýIëÜSËÕ?î¬ßÄêwë|â¶Tz»¦ÈA(ôF×jSäY÷ÖÚ8çmÜ{›ÀÀ€»¹ÐѬƓ’ðÉdo
+”z§R<SîµÕ·¨Ö†ªSVeBÛχIõfÇ­—{ó™˜k\ï©vF'ýŽI'íì❠>Orb?$dGÁ«§Îþ[]비¶•'WtÜÓ«nÕÕY4ÙóGùŸB¨Ý
+ÅÞ©^Fê!yŸ.F’Wºžïô(ôä%úÔΟ»ŽËàd«¡B»ÈÓ8
+šöôvghv$Ƽ“¡nêŸEuøíIPáôÃn¨>¥oí^©óXý3 þ8ŸgsØÓ{gó©k-ፗ„ÿ`>cú`î˽²îüø3s÷˜ÈeÖ0XÔùOýÑX×'S[è®Ï‹=‹`%•yë´êdKBSקEõæ¼þª«eаLjQïÌ(óžðI‹Š<MÝùª¨ç’Sx5T{††½Õ“X»µ§û§úÿ´©VKÔ­°°7G^ƒSqN÷Ç™tK‚ù.óÆEç4Ç'g§Ê;gÃÞ¹R'·¶¥ú䊬Ý/§³GιˆgE-ÒdϪ"o|«3ða«“vŸ>;ïjÙ¶U½U–Ø3Ù§ñË8o¿ÇêéZû vLrÞFÏౚâù¹vr¥ó“`¯°w¢FNŽ¨?ï	k[ðwJ©wÂû¼²tŒx+é÷ÖIíYw¦³»Èc‚
+oÞëûëL^Åõ<Wÿê^­öNÍZ®®Ûmµ;ɍÊNÆU0âT‰•ÞŠžà|–ÀŒ%øÐ]Uøä©úï<©~ߪq°GâÀ‡Å'=Õ…<œ\”ã<¹8¹ÎSîÄ‘yÞ»,§ÍçÄqyΛaÎS†ÓšáÍKª÷Æ}ßÊۍݺ+1
+õd%dä9Ÿ®ì‘N‹+Ûç=»Oþ9Ž,wlð0BŽ´|G³\§îÊä´f;eú¹#ҝ–¡Î³[ï‡Ü(4—ãŒ*ðöŽ;ÎÕ%¡iÓ^‡zªVYb­fƒœ§<G~x›êÈÎòä¹ú'yñ‘[Ï=žËó¤»>r%»2Ӎ²½'·u¨Svúå{þLõlNh›ãِé¼OØò4HÌDB£t§ì`»=ú9zx^p‘
+ g’7®=Þxu ×+¡Y.̲[¯“Ò|™ÐÃõÿ°“ÈùžýÙΏϳ¿Ài)ðæ&Õ‘_+·víôó$¸zcÏC=ûR=?äzi^?׋®?³O®¸¼z³’îù˝7Wó)ÕóHþ-©•Vvδ:ðI„~ž}!ÏSÙ^ï|Ǐ!§ÖÉ–ÄzÌòlM_'d&Ö}bMd×ónºg£;³CÔ¬©TÏw§ZáÎÓpOÿ:+3
+Ÿéõ|V7û90»µúxÈgðÊpo/†¼^©Þ\çŸÜ#™Þþš=¹Âê΀¡°>sOjvªk÷Qm¿?sv$dÕbŸ:ƒÞzÊ
+óOz#ÑÿÜÄÙrx­ÐËsâ'ÏíS™»~ÔXÖ;“ꝵõ#Ä)ÜÏë[~Z¿ºÖD¶”଺\§~ìv¦»6;NÄòµQo]ô‘8»9Qý¨·È‹Ï1`õɨ$æŁ±“‘Édïm§WÂÝIì”<ÏE{ÜŸt«–‹êd%âÊ°-¸hÕgðæï3þMfXéñ}e²WCdâÚW}Ýöi§eõ÷?¿ßç Ö–3Eõý_åÍw%äRQÏÃn<ÙäV¡Ú¼¬Î'®÷nå§ÍzÝês¥õD§ß*¸>(©§y‘çkŒwx.&öΫÚ;®ÿþ­Ó?}gý¿t„O¹:=òú÷Ýá3ÞùþÃ÷AøOݝÉÖө¶çŸ»A=Ó
+þ¯Ý+ù~s¯„ÿÿ{¥z÷Ju7ÿß¼W§0ìï^	Ÿ![û_¸WÂg¼Wª³è?s¯„ÿà¾à?s¯„Ñ¿z¯T÷¯Nÿä½RÝ~;õ^é÷Ø÷÷o—ùy"’ø_»]ÂèÔÛ¥3ßnügn—ðx×WσÿÛ·LØ[c¿fþó·Løø–	ŸvËT—ëþ'o™ðÿyËäûÝ2áá–É÷o»ež†9RxÚ&¼ê¼ÿÏÝá3ÎùëîÿæîÈ÷_»;¿{wTwôï¿;ÂÿÂÝÑÉý÷ÞÕž¬¿Ï(¿½ñÁáƧþ-Í?yãƒÿ֍Ïos¶¿vãƒëÝøüѽÃ?qCÿü¾¨î¦{8îSg„2½/h¹_Us¿ìvòûq¾öÕ‘ˆo\¤,6¹Cgߟøb[g_¿²©•¥Õ¾hye¬*)òWÅÊ}©U‘Ið%°Zï‹t5‰/ÒÕ‡Á¸}X¤*ìK¨vòÛx¸ÓþÁ¿ýÞÞŸþÊŸï4äh5ûâUá¢Hy¸j‚/V|ºŒGªÊ£ÕÞ—æ¢Õ¾ÒHUÄÁ*©
+W8¦'9¶;f9ÏU•D’|ñ˜/\1ÕW©ªvÄÆŏE„}…ŽÒØé/Ôú©°0V^étw;ÄK鎗#ÕŽ÷Zy.iÕÁVäWWÇ
+£aÅ
+kÊ#ñpÜÕ§8ZæLR{W¢7À—+ŽOvÜߪƒ§IU¤²*VTSñÄEâãjâW|Ê€$gšËjŠ\M&G㥱š¸£Ly€\„ª„+±5ÕNל$_yĵ{¤º4©F’‹Ù%Vå«Ž8óàôŽ:ª‚ù§A»Ê9b+]GÇqÂuÐäRgaýf€;
+Å5U`ÄXóUÇ’|Õ5ãÆG
+ãn‹k_q¬ÌYl®A…±Š¢¨kGuOŒqáq±IÏ‚Ä*ò8¹*bqgª­î¬TÖ­€Ä;_ui¸¬‹€×5œ]>ÅÎX…³.ª|屪ÈÍöŧVFŠÃPç„R§¾-Ouv‹3¼(ZuZ¸,î,=§â
+y–'\çnÐp•£WMY¸
+»@E‘êhI…§FIb¯:ƒÜ.t„T»#jõ©>ɉ Ïaá²3€1µzÔIsÔ«(›ê‹Ö[æØ5§*âþÚ„××­T»Žtç¥v{Dœ5©òMŽUUûZÜ‡­\ìÚ¸•»m[y.sf&ö˸ˆ³“\©5θ>™‹žT,2%îì_¸²ÒÙ^áqe÷EÂvG²[Áu“RŽûJÃÕŽÄHÅ)>qW]Ýê.òÕTÂuªbO¹„…4«Õ±2wW{ÓæNRØWæžÎ^©íX.œ.qsöaE»Kõ_[T§@9–£b¤¬ØUªÈ—™›SàËÏÍ,žšòeåûçåËÊeøZ¥æ;Ï­’|ó
+úç-ð9=òRs
+Fúr3}©9#}³r2’|¡ƒóBùù87Ï—5hpvVÈiËÊIÏš‘•ÓÏ—æŒËÉ-ðeg
+Ê*p„äzCATV(ß6(”—ÞßyLMËÊÎ*™„3³
+r™Žry¾TßàÔ¼‚¬ô¡Ù©y¾ÁCóç懎؜¬œÌ<%4(äáJÏ<2/«_ÿ‚$gPÓ˜„òR3BƒRó&ùa¹ŽÉy>¯KgGKG†/4Ìœß?5;Û—–U_Jäöu½Ó/'wPgæÍÉH-ÈÊÍñ¥…SRÓ²C	ÝSÒ³S³%ù2R¥ösÍ©q»%Ì©svôå„òR³“|ùƒCéYnÅñcV^(½ÀëéøÞñD¶§nznN~hÈP§ÁéW‘„‡÷yŽ©ÎÿÒ=Í<óss]9¹y'Už•Jò¥æeå»3’™—ë¨ëÎgn¦·†:þt'/ôuçÈmûíêpz¹£ÁÀŒPj¶#0ßUÃiÀ§ôuVWhJa¤2î®mØ܉£Ñ;Fgg’·j‡€³„ûU87ÑæUZrv–Ç:‰Ó­Ž°]:NJ½Þñá¬n‡‰GoѤˆsV»GI¬
+ÇÜÃdr´ÚÛé–ǜ竗9`Î(wy½œ³2\æ«>©æ)
+×’aeUÔ2¹*w_¸Æi­ŠN®šò,ðÕYà¢Ô	ý«"Õ•KE'EʦvvúV¹\æi­(ŽU•ƒéžû
+ã=kC…¸¯Ä^‹ãXUIgÆ^Äõ·C§?û+ÿL„qï¯ÄA¸.òýÅ8ÿ6‚C¾Ð“T]ËgPëüwb%_m¬„ÿ7b%œ˜‡[¬„öoÅJøŒ•p]¬äû‹±>%.ø±þ½XÉ÷çc%\/Vª¿}O	—>w‰*\Â.ùþV¸„OQ×Ëÿé	WÄ|;dÂÿhÈ„!dòýõ	Ÿ2ùþJÈ„Ï2ùþ•	¤4 ×U;µÿ_ŠŽpå':µёïïDG¸~täûKÑ>ctäû;Ñ‘»XOÙ('ü»ï_|ð>¾?ø`/ð95vø¿šxmÿ¾^Ѐ;;Eç¿ó;ƒ]¼{»	Îß.ÞÝY‘÷¯z½_­tÚNý×Â?þ
+Ã.“£¢]¢Îa5¥seie81ÿÒïr’‰_€>1Bgøc-÷~'šD¢ƒXÄ!	#IHF
+R‘†td Y¨jˆÎBÐÙ¨1j‚š¢f¨9já(ÒµB­QÔµCç ö¨:uDI¨“cÔuó~ëÓFAÔ%£(Åño/têú óQ_ïž;Ý»ÎôþÍ#
+@
+òþÅc0‚ò¼oÏuŽF ‘Ž- Ñhº]„Æ:n¸Ý‚.AóÑ£hú]Š–¢ËÐ
+è´Ž Ñbô6š‡®Bß oÑt-Zˆ¶£÷Ñ×h
+Ú€¾Gß¡£èft7zíD÷ qÎ]áÌÝ.ÇÑÏ¢çÑKè´½ˆ"÷¿'ð2zÝëÌút%z½†ö:sûú-r&ŝûrTæLÈZÇý½[Ûjïvv’³2>wÖÂ44MG3Ñ´Ý„f£YhºB‡ÑV‚"h‚!X‚#xô+:N&DBB'DÈ„B¨Ah„N„IXD¢!qш8›hL4AÇЏDS¢ÑœhAøˆ–D+¢5цhK´#Î!Úˆs‰Žè'ô‘Dt":]ˆ®D7ÂO›݉d¢‘BôD¢D/â<¢7ч8ŸèK¤iD:‘A„ˆL¢ÑŸÈBÑ}Ä b ‘M"rˆ\b01„È#òÑÏèôú˜( †ÈáÄb$1Š¸€MŒ!.$."ÆabQH¢˜(!J‰(z„OL ʈrô	ú”¨ bD%1‘¨"ª‰8QCL"&Sˆ©Ä4b:1ƒ˜IÌ"fsÐzâbb.1¸„˜O\J, ‹ˆÅÄeÄåÄb)±Œ¸‚¸’XN\E\M\C¬ ®%V׫ˆë‰ÕÄ
+ÄâFb-qq3q±Ž¸•XOÜFÜNÜAl î$î"î&î!î%6÷›ˆû‰ÍÄăÄCÄâab+ñ±x”xŒxœx‚x’xŠØN<Mì ž!vÏÏÏ»ˆˆÝÄ‹ÄKÄËÄ+Ä«Äâ5b/ñ:ññ&ññ6ññ.ññ>±ø€ØO|H >">&>!>%>#Ÿ_‡ˆ/‰ÃÄWÄâkââ[â;â{â(ñqŒø‘ø‰ø™ø…ø•8Nœ I$I‘4ɐ,É‘<)˜I‰”I…TIÔIƒ4I‹l at 6$Ï"‘g“É&dS²ÙœlAúÈ–d+²5Ù†lK¶#Ï!Û“ÈsÉŽdÙ‰ìLv!»’ÝH? m2Hv'“Éd
+Ù“ìEžGö&ûç“}ÉT2L'3È™Iö#û“Yä r ™M"sÈ\r09„Ì#óÉr(9ŒNŽ G’£ÈÈÑäòBò"r,&Ç‘…d!‹É²”Œ’ãÉ	dYNV1²’œHV‘Õdœ¬!'‘“É)äTr9œAÎ$g‘³É9äÅä\ry	9Ÿ¼”\@.$‘‹ÉËÈËÉ%äRryy%¹œ¼Š¼š¼†\A^K®$¯#W‘ד«ÉÈ5ääZò&òfòry+¹ž¼¼¼ƒÜ@ÞIÞEÞMÞCÞKn$ï#7‘÷£7Ñ~r3ù ù ù¹…|˜ÜJ>Bn#%#'Ÿ Ÿ$Ÿ"·£wлè=ôzí#Ÿ&wÏ;ÉgÉçÈçÉ]äänòEò%òeòòUrù¹—||ƒ|“|‹|›|‡|—||ŸÜG~@î'?$‘“ŸŸ’Ÿ‘ÉÏÉ/ÈCä—äaò+òù5ù
+ù-ùù=y”ü<FþHþDþLþBþJ'OPˆ"(’¢(šb(–â(ž(L‰”DÉ”B©”Fé”A™”E5 RgQ¨³©ÆTª)ÕŒjNµ |TKªÕšjCµ¥ÚQçPí©Ô¹TG*‰êDu¦ºP]©n”Ÿ
+P6¤ºSÉT*…êIõ¢Î£zS}¨ó©¾T*•F¥STˆÊ¤úQý©,j 5Ê¦Q9T.5˜BåQùT5”F
+§FP#эÔ(êj45†ººˆK…©qT!UDE¨bª„*¥¢ÔxjUF•ST]OUR©*ªšŠS5Ô$j25…šJM£¦S3¨™Ô,j65‡º˜šKÍ£.¡æS—R¨…Ô"j1uu9µ„ZJ-£® ®¤–SWQWS×P+¨k©•ÔuÔ*êzj5uµ†º‘ZKÝDÝLÝB­£n¥ÖS·Q·SwP¨;©»¨»©{¨{©Ô}Ô&ê~j3õ õ õµ…z˜ÚJ=Bm£¥£§ž ž¤ž¢¶SOS;¨g¨Ô³ÔsÔóÔ.êj7õ"õõ2õ
+õ*µ‡zÚK½N½A½I½E½M½C½K½G½Oí£> öSR¨¨©O¨O©Ï¨ƒÔçÔÔ!êKê0õu„úšú†ú–úŽúž:Jý@£~¤~¢~¦~¡~¥ŽS'hD4IS4M34Ks4O4¦EZ¢eZ¡UZ£uÚ MÚ¢Ð
+é³èFôÙtcº	Ý”nF7§[Ð>º%ÝŠnM·¡ÛÒíèsèötú\º#Dw¢;Ó]è®t7ÚOh›ÒÝédºB÷¤{Ñçѽé>ôùt_:•N£Óé:DgÒýèþt=€HgÓƒè:—L¡óè|º€J£‡Ó#è‘ô(úz4=†¾¾ˆK‡éqt!]DGèbº„.¥£ôxz]F—ÓtŒ®¤'ÒUt5§kèIôdz
+=•žFO§gÐ3éYôlz}1=—žG_Bϧ/¥ÐéEôbú2úrz	½”^F_A_I/§¯¢¯¦¯¡WÐ×Ò+éëèUôõôjúz
+}#½–¾‰¾™¾…^GßJ¯§o£o§ï 7ÐwÒwÑwÓ÷Ð÷ÒéûèMôýôfúúAú!zý0½•~„ÞF?J?F?N?A?I?Eo§Ÿ¦wÐÏÐ;égéçèçé]ôônúEú%úeúúUzý½—~~ƒ~“~‹~›~‡~—~~ŸÞG@ï§?¤ÐÑӟПҟÑéÏé/èCô—ôaú+úý5ý
+ý-ýý=}”þ>FÿHÿDÿLÿBÿJ§O0ˆ!’¡ša–áž̈ŒÄȌ¨ŒÆèŒÁ˜ŒÅ4`2g1˜³™ÆL¦)ÓŒiδ`|LK¦ÓšiôeÚ1ç0í™̹LG&‰éÄtfº0]™nŒŸ	06dº3ÉL&…éÉôbÎcz3}˜ó™¾L*“Ƥ3LˆÉdú1ý™,f 3Éf19L.3˜Âä1ùL3”ÆgF0#™QÌÌhfs!s3–	3ã˜B¦ˆ‰0ÅL	SÊD™ñ̦Œ)g*˜SÉLdª˜j&ÎÔ0“˜ÉÌf*3™ÎÌ`f2³˜ÙÌæbf.3¹„™Ï\Ê,`2‹˜ÅÌeÌåÌf)³Œ¹‚¹’YÎ\Å\Í\ì`®eV2×1«˜ë™ÕÌ
+ÌæFf-ss3s³Ž¹•YÏÜÆÜÎÜÁl`îdîbîfîaîe62÷1›˜û™ÍÌ̃ÌCÌæaf+ó³y”yŒyœy‚y’yŠÙÎ<Íì`žav2Ï2Ï1Ï3»˜˜ÝÌ‹ÌKÌËÌ+Ì«Ìæ5f/ó:óó&óó6óó.óó>³ù€ÙÏ|È`>b>f>a>e>c2Ÿ3_0‡˜/™ÃÌWÌækææ[æ;æ{æ(ósŒù‘ù‰ù™ù…ù•9Îœ`K°$K±4Ë°,˱<+°˜Y‰•Y…UYÕYƒ5Y‹mÀ6dÏb±g³Ù&lS¶ÛœmÁúØ–l+¶5Û†m˶cÏaÛ³ØsÙŽlÛ‰íÌva»²ÝX?`m6Èvg“Ùl
+Û“íÅžÇöfû°ç³}ÙT6Mg3Ø›Éöcû³Yì v ›ÍbsØ\v0;„ÍcóÙv(;ŒÎŽ`G²£ØØÑìöBö"v,fDZ…la‹Ù¶”²ãÙ	l[ÎV°1¶’ÈV±Õlœ­a'±“Ù)ìTv;ÁÎdg±³Ù9ìÅì\v{	;Ÿ½”]À.d±‹ÙËØËÙ%ìRv{{%»œ½Š½š½†]Á^Ë®d¯cW±×³«ÙØ5ììZö&öföv{+»ž½½½ƒÝÀÞÉÞÅÞÍÞÃÞËndïc7±÷³›ÙØÙ‡Ø-ìÃìVövû(ûû8ûû$û»}šÝÁ>ÃîdŸeŸcŸgw±/°»ÙٗؗÙWØWÙ=ìkì^öuö
+öMö-ömöö]ö=ö}vû»Ÿý=À~Ä~Ì~Â~Ê~Æd?g¿`±_²‡Ù¯Ø#ì×ì7ì·ìwì÷ìQööû#ûû3ûû+{œ=Á!ŽàHŽâhŽáXŽãxNà0'r's
+§r§sgr×€kȝÅ5âÎæsM¸¦\3®9ׂóq-¹V\k®
+×–kǝõç:pçr¹$®×™ëÂuåºq~.ÀÙ\ëÎ%s=¸®'׋;ëÍõáÎçúr©\—Îep!.“ëÇõ粸Ü@.›Äåp¹Ü`n—ÇåsÜPn7œÁäFqp£¹1Ü…ÜEÜX.̍ã
+¹".Âs%\)åÆs¸2®œ«àb\%7‘«âª¹8WÃMâ&sS¸©Ü4n:7ƒ›ÉÍâfss¸‹¹¹Ü<în>w)·€[È-âs—q—sK¸¥Ü2î
+îJn9ww5w
+·‚»–[É]Ç­â®çVs7pk¸¹µÜMÜÍÜ-Ü:îVn=ww;w·»“»‹»›»‡»—ÛÈÝÇmâîç6sprq[¸‡¹­Ü#Ü6îQî1îqî	îIî)n;÷4·ƒ{†ÛÉ=Ë=Ç=Ïíâ^àvs/r/q/s¯p¯r{¸×¸½ÜëÜÜ›Ü[ÜÛÜ;Ü»Ü{ÜûÜ>în?÷!w€ûˆû˜û„û”ûŒ;È}Î}Áâ¾äs_qG¸¯¹o¸o¹ï¸ï¹£ÜÜ1îGî'îgîîWî8w‚G<Á“<ÅÓ<ó<Çó¼Àc^ä%^æ^å5^ç
+Þä-¾ߐ?‹oÄŸÍ7æ›ðMùf|s¾ïã[ò­øÖ|¾-ߎ?‡oÏwàÏå;òI|'¾3ß…ïÊwãý|€·ù ߝOæ{ð)|O¾ß›ïßÏ÷åSù4>ÏàC|&ߏïÏgñø|6?ˆÏásùÁü>Ïçø¡ü0~8?‚ɏâ/àGócøù‹ø±|˜ÇòE|„/æKøR>ʏç'ðe|9_ÁÇøJ~"_ÅWóq¾†ŸÄOæ§ðSùiüt~?“ŸÅÏæçðósùyü%ü|þR~¿_Ä/æ/ã/ç—ðKùeüü•ürþ*þjþ~-¿’¿Ž_Å_ϯæoà×ð7òkù›ø›ù[øuü­üzþ6þvþ~'7/¿‘¿ßÄßÏoæàäâ·ðó[ùGømü£ücüãüü“üSüvþi~ÿ¿“–ŽžßÅ¿Àïæ_ä_â_æ_á_å÷ð¯ñ{ù×ù7ø7ù·ø·ùwøwù÷ø÷ù}üü~þCþ ÿÿ1ÿ	ÿ)ÿÿœÿ‚?ÄÉæ¿âð_óßðßòßñßóGùøcüüOüÏü/ü¯üqþ„€B J F`NàAÀ‚(H‚,(‚*h‚.‚)XB¡¡p–ÐH8[h,4š
+Í„æBÁ'´Z	­…6B[¡pŽÐ^è œ+t’„NBg¡‹ÐUè&ø…€`A¡»,ôR„žB/á<¡·ÐG8_è+¤
+iBº!„„L¡ŸÐ_È…la#ä
+ƒ…!Bž/C…aÂpa„0R%\ ŒÆ
+	c…°0N(Š„ˆP,”¥BT/LÊ„r¡Bˆ	•ÂD¡J¨âB0I˜,L¦
+Ó„éÂa¦0K˜-Ì.æ
+ó„K„ùÂ¥Âa¡°HX,\&\.,–
+Ë„+„+…åÂUÂÕÂ5Â
+áZa¥p°J¸^X-Ü ¬nÖ
+7	7·ë„[…õÂmÂíÂÂáNá.ánáá^a£pŸ°I¸_Ø,< <(<$l¶
+Û„G…Ç„Ç…'„'…§„íÂÓÂáa§ð¬ðœð¼°KxAØ-¼(¼$¼,¼"¼*ì^ö
+¯oo
+o	oïï
+ï	ïû„„ý‡Âá#ácááSá3á ð¹ð…pHøR8,|%¾¾¾¾¾Ž
+?Ç„…Ÿ„Ÿ…_„_…ãÂ	Œ0ILa3˜Åæ±€1±„e¬`kXÇ6±…à†ø,ÜŸã&¸)n†›ã؇[âV¸5nƒÛâvøÜwÀçâŽ8	wqÜwÃ~À6âî8÷À)¸'î…Ïýq|>î‹SqNÇ8„3q?Ügáx ÎƃpÎŃñœ‡óqŠ‡ááx‰Gáðh<_ˆ/ÂcqÃ…¸Gp1.Á¥8ŠÇã	¸—ã
+Õx"®ÂÕ8Žkð$<OÁSñ4<ÏÀ3ñ,<ÏÁã¹x¾ÏÇ—âx!^„ãËðåx	^Š—á+ð•x9¾
+_¯Á+ðµx%¾¯Â×ãÕø¼߈×â›ðÍø¼ߊ×ãÛðíø¼߉ïÂwã{ð½x#¾oÂ÷ãÍøü ~oÁã­ø¼
+?ŠC›Ðýøqü~=ˆBOã§Ðfô ځ·£¹è)´ ?wàgНx'~?‡ŸÇ»ðx7z¿ˆ_Â/ãWð«x~
+ïE¡Çñëø
+ü&~¿ßÁïâ÷ðûhÞ‡?Àûñ‡ø þŒ?ÁŸâÏðAü9þÂ_âÃø+|¿Áßâïð÷ø(þÃ?âŸðÏøü+>ŽOˆH$DR¤DZdDVäD^D,Š¢$Ê¢"ª¢&ê¢!š¢%6Šg‰Ä³ÅÆb±©ØLl.¶}bK±•ØZl#¶Û‰çˆíÑbñ\±£˜$v;‹]Ä®b7Ñ/D[ŠÝÅd±‡˜"ö{‰ç‰½Å>âùb_1ULÓÅ1$fŠýÄþb–8@(f‹ƒÄ1W,óÄ|±@*‡‹#Ä‘â(ñq´8F¼P¼H+†Åqèr±P,#b±X"–ŠQq¼8A,ËÅ
+1&VŠÅ*±ZŒ‹5â$q²8Eœ*N§‹3Ä™â,q¶8G¼Xœ+Î/ç‹—ŠÄ…â"q±x™x¹¸D\*.¯¯—‹W‰W‹×ˆ+ÄkÅ•âuâ*ñzqµxƒ¸F¼Q\+Þ$Þ,Þ"®o׋·‰·‹wˆÄ;ŻĻÅ{Ä{ōâ}â&ñ~q³ø€ø ø¸E|XÜ*>"nŸŸŸ·‹O‹;Ägĝâ³âsâóâ.ñq·ø¢ø’ø²øŠøª¸G|MÜ+¾.¾!¾)¾%¾-¾#¾+¾'¾/î?÷‹ŠďďÅOÄOÅÏăâçââ!ñKñ°ø•xDüZüFüVüNü^<*þ ‹'$$)Q-1+q/	–DI’dI‘TI“tɐLÉ’H
+¥³¤FÒÙRc©‰ÔTj&5—ZH>©¥ÔJj-µ‘ÚJí¤s¤öRé\©£”$u’:K]ÐJ©«ÔMò£Û¥€dKA©»”,õR¤žh•Ô]‡¾’ΓzK}¤ó¥¾Rª”†n•Ò¥)„–K™R?©¿”%
+JÙÒ )GÊ•KCÐj)OÊ—
+¤¡Ò0i¸4B)’.FKc¤¥‹¤±RX'JERD*–J¤R)*—&HeR9ºMªbR¥4Qª’ª¥¸T#M’&KS¤©Ò4iº4Cš)Í’fKs¤‹¥¹Ò<é´Lš/]*- at W£k¤…Ò"i±t™t¹´DZ*-“®®”–KWIWK×H+¤k¥•ÒuÒ*éziµtƒ´FºQZ+Ý$Ý,Ý"­“n•ÖK·I·KwH¤;¥»¤»¥{¤{¥Ò}Ò&é~i³ô€ô ô´EzXÚ*="m“•“—žž”ž’¶KOK;¤g¤Ò³ÒsÒóÒ.éi·ô¢ô’ô²ôŠôª´GzMÚ+½.½!½)½%½-½#½+½'½/í“>öKJ¤¤¥O¤O¥Ï¤ƒÒçÒÒ!éKé°ô•tDúZúFúVúNú^:*ý “~”~’~–~‘~•ŽK'd$2)S2-32+s2/2–EY’eY‘UY“uِMÙ’È
+å³äFòÙrc¹‰ÜTn&7—[È>¹¥ÜJn-·‘ÛÊíäsäörù\¹£œ$w’;Ë]ä®r7Ù/d[ÊÝåd¹‡œ"÷”{Éçɽå>òùr_9UN“Óå9$gÊýäþr–<@(g˃ä9W,‘óä|¹@*“‡Ë#ä‘ò(ùy´<F¾P¾H+‡åqr¡\$Gäb¹D.•£òxy‚\&—ËrL®”'ÊUrµ—käIòdyŠ<Už&O—gÈ3åYòlyŽ|±<Wž'_"Ï—/•ÈåEòbù2ùry‰¼T^&_!_)/—¯’¯–¯‘WÈ×Ê+åëäUòõòjùy|£¼V¾I¾Y¾E^'ß*¯—o“o—ï7ÈwÊwÉwË÷È÷ÊåûäMòýòfùùAù!y‹ü°¼U~DÞ&?*?&?.?!?)?%o—Ÿ–wÈÏÈ;ågåçäçå]òònùEù%ùeùùUyüš¼W~]~C~S~K~[~G~W~O~_Þ' ï—?”ÈÉËŸÈŸÊŸÉåÏå/äCò—òaù+ùˆüµüü­üü½|TþA>&ÿ(ÿ$ÿ,ÿ"ÿ*—O(H!R¡ZaVá^¬ˆŠ¤ÈŠ¢¨Š¦èŠ¡˜Š¥4P*g)”³•ÆJ¥©ÒLi®´P|JK¥•ÒZi£´UÚ)ç(í•ʹJG%	=¬tR:+]”®J7ů[	*Ý•d¥‡’¢ôTz)ç)½•>ÊùJ_%UISÒ•%¤d*ý”þJ–2@¨d+ƒ”%W¬Qò”|¥@ªS†+#”‘Ê(åe´2F¹P¹H«„•qJ¡R¤D”b¥D)U¢Êxe‚R¦”+JL©T&*UJµWj”IÊdeŠ2U™¦LWf(3•YÊleŽr±2W™§\¢ÌW.U(•EÊbå2åre‰²TY¦\¡\©,W®R®V®QV(×*+•ë”UÊõÊjåer£²V¹I¹Y¹EY§Üª¬WnSnWîP6(w*w)w+÷(÷*•û”MÊýÊfååAå!e‹ò°²UyDÙ¦<ª<¦<®<¡<©<¥lWžVv(Ï(;•g•ç”ç•]ÊÊnåEå%åeååUeòš²Wy]yCySyKy[yGyWyOy_Ù§| ìW>T()+Ÿ(Ÿ*Ÿ)•Ï•/”CÊ—Êaå+åˆòµòò­òò½rTùA9¦ü¨ü¤ü¬ü¢üªWN¨H%TR¥TZeTVåT^T¬Šª¤Êª¢ªª¦êª¡šª¥6Pªg©Ô³ÕÆjµ©ÚLm®¶P}jKµ•ÚZm£¶UÛ©ç¨íÕê¹jG5Ií¤vV»¨]Õnª_
+¨¶T»«Éj5Eí©öRÏS{«}ÔóÕ¾jªš¦¦«jHÍTû©ýÕ,u€:PÍV©9j®:X¢æ©ùj:T¦WG¨#ÕQêêhuŒz¡z‘:V
+«ãÔBµH¨Åj‰ZªFÕñêµL-W+Ô˜Z©NT«Ôj5®Ö¨“ÔÉêuª:M®ÎPgª³ÔÙêõbu®:O½D¯^ª.Pª‹ÔÅêeêåêu©ºL½B½R]®^¥^­^£®P¯UWª×©«ÔëÕÕê
+êõFu­z“z³z‹ºN½U]¯Þ¦Þ®Þ¡nPïTïRïVïQïU7ª÷©›ÔûÕÍêêƒêCêõau«úˆºM}T}L}\}B}R}JÝ®>­îPŸQwªÏªÏ©Ï«»ÔÔÝê‹êKêËê+ê«êõ5u¯úºú†ú¦ú–ú¶úŽú®úžú¾ºOý@ݯ~¨P?R?V?Q?U?SªŸ«_¨‡Ô/ÕÃêWêõkõõ[õ;õ{õ¨úƒzLýQýIýYýEýU=®žÐFh¤Fi´Æh¬Æi¼&hX5I“5ES5MÓ5C35Kk 5ÔÎÒigkµ&ZS­™Ö\k¡ù´–Z+­µÖFk«µÓÎÑÚk´sµŽZ’ÖIë¬uѺjÝ4¿Ðl-¨u×’µZŠÖS륝§õÖúhçk}µT-MK×2´–©õÓúkYÚ m –­
+Òr´\m°6DËÓòµm¨6L®ÐFj£´´ÑÚíBí"m¬ÖÆi…Z‘ÑŠµ­T‹jãµ	Z™V®Uh1­R›¨UiÕZ\«Ñ&i“µ)ÚTmš6]›¡ÍÔfi³µ9ÚÅÚ\mžv‰6_»T[ -Ôi‹µË´Ëµ%ÚRm™v…v¥¶\»J»Z»F[¡]«­Ô®ÓVi×k«µ´5ڍÚZí&ífímv«¶^»M»]»C۠ݩݥݭݣݫmÔîÓ6i÷k›µ´µ‡´-ÚÃÚVím›ö¨ö˜ö¸ö„ö¤ö”¶]{ZÛ¡=£íÔžÕžÓž×vi/h»µµ—´—µW´Wµ=ÚkÚ^íuí
+íMí-ímíí]í=í}mŸö¶_ûP; }¤}¬}¢}ª}¦Ô>×¾Ði_j‡µ¯´#Ú×Ú7Ú·ÚwÚ÷ÚQíí˜ö£ö“ö³ö‹ö«v\;¡#ÐIÒiÑYÓy]б.ê’.늮ꚮë†nê–Þ@o¨Ÿ¥7ÒÏÖëMô¦z3½¹ÞB÷é-õVzk½ÞVo§Ÿ£·×;èçêõ$½“ÞYï¢wÕ»é~= ÛzPï®'ë=ô½§ÞK?Oï­÷ÑÏ×ûê©zšž®gè!=Sï§÷׳ôú@=[¤çè¹ú`}ˆž§çëúP}˜>\¡ÔGéè£õ1ú…úEúX=¬Óõ"=¢ë%z©ÕÇëô2½\¯Ðcz¥>Q¯Ò«õ¸^£OÒ'ëSô©ú4}º>CŸ©ÏÒgësô‹õ¹ú<ý}¾~©¾@_¨/Òë—é—ëKô¥ú2ý
+ýJ}¹~•~µ~¾B¿V_©_§¯Ò¯×Wë7èkôõµúMúÍú-ú:ýV}½~›~»~‡¾A¿S¿K¿[¿G¿WߨߧoÒï×7ëèêé[ô‡õ­ú#ú6ýQý1ýqý	ýIý)}»þ´¾CFß©?«?§?¯ïÒ_Ðwë/ê/é/ë¯è¯ê{ô×ô½úëúú›ú[úÛú;ú»ú{úûè	ô¤¾Oÿ@߯¨Ð?Ò?Ö?Ñ?Õ?ÓêŸë_è‡ô/õÃúWúýkýý[ý;ý{ý¨þƒ~LÿQÿIÿYÿEÿU?®Ÿ0A¤A´Á¬Á¼!Ø
+ɐ
+ÅP
+ÍÐ
+Ã0
+Ëh`44Î2g&FS£™ÑÜhaøŒ–F+£µÑÆhk´3Î1ÚŒsŽF’ÑÉèlt1ºÝ¿0l#ht7’FŠÑÓèeœgô6úç}T#ÍH72Œ‘iô3úYÆ c ‘m2rŒ\c°1ÄÈ3òc¨1ÌnŒ0F£ŒŒÑÆãBã"c¬6Æ…F‘1Š£Ôˆã	F™QnT1£Ò˜hTÕFܨ1&“)ÆTcš1ݘaÌ4f³9ÆÅÆ\cžq‰1߸ÔX`,4‹ËŒË%ÆRc™q…q¥±Ü¸Ê¸Ú¸ÆXa\k¬4®3V׫Œ5ƍÆZã&ãfãcq«±Þ¸Í¸Ý¸ÃØ`ÜiÜeÜmÜcÜkl4î36÷›Œ‡Œ-ÆÃÆVãc›ñ¨ñ˜ñ¸ñ„ñ¤ñ”±ÝxÚØa<cì4ž5ž3ž7v/»—Œ—WŒW=ÆkÆ^ãuã
+ãMã-ãmãã]ã=ã}cŸñ±ßøÐ8`|d|l|b|j|f4>7¾0_‡¯Œ#Æ×Æ7Æ·ÆwÆ÷ÆQãã˜ñ£ñ“ñ³ñ‹ñ«qÜ8a"“0I“2i“1Y“3yS0±)š’)›Š©šš©›†iš–ÙÀlhže62Ï6›M̦f3³¹ÙÂô™-ÍVfk³ÙÖlgžc¶7;˜çšÍ$³“ÙÙìbv5»™~3`ÚfÐìn&›=̳§ÙË<Ïìmö1Ï7ûš©fš™nf˜!3Óìgö7³Ìæ@3Ûd昹æ`sˆ™gæ›æPs˜9ÜaŽ4G™˜£Í1æ…æEæX3lŽ3Í"3b›%f©5Ç›Ì2³Ü¬0cf¥9Ѭ2«Í¸YcN2'›SÌ©æ4sº9ÃœiÎ2g›s̋͹æ<ós¾y©¹À\h.2›—™—›KÌ¥æ2ó
+óJs¹y•yµy¹Â¼Ö\i^g®2¯7W›7˜kÌ͵æMæÍæ-æ:óVs½y›y»y‡¹Á¼Ó¼Ë¼Û¼Ç¼×ÜhÞgn2ï77›˜š™[̇ͭæ#æ6óQó1óqó	óIó)s»ù´¹Ã|ÆÜi>k>g>oî2_0w›/š/™/›¯˜¯š{Ì×̽æëææ›æ[æÛæ;æ»æ{æûæ>ós¿ù¡yÀüÈüØüÄüÔüÌ<h~n~a2¿4›_™G̯ÍoÌoÍïÌïÍ£ææ1óGó'ógóóWó¸yÂBa‘eÑc±gñ–`aK´$K¶Kµ4K·Ë´,«ÕÐ:Ëjdm5¶šXM­fVs«…å³ZZ­¬ÖV«­ÕÎ:Çjou°Îµ:ZIV'«³ÕÅêju³üVÀ²­ ÕÝJ¶zX)VO«—užÕÛêcoõµR­4+ÝÊ°BV¦ÕÏêoeY¬V¶5Èʱr­ÁÖ+ÏÊ·
+¬¡Ö0k¸5Âi².°F[c¬­‹¬±VØgZEVÄ*¶J¬R+j·&XeV¹UaŬJk¢UeU[q«ÆšdM¶¦XS­iÖtk†5ÓšeͶæX[s­yÖ%Ö|ëRkµÐZd-¶.³.·–XK­eÖÖ•Ör¡º8^:µ²4RÁ¥–‡«b\8Q²©ãª"“"lØ+¸ÔXI¬"2'J1½0ZUXS^\™"ÖÕqzQ,.,ŒTÄqáÉ*›QvE%ŠG~8Î… 0€¡`Ä+p¨NPäd•‘DɆ#^!ö«§TI=¥úÕÉ*9Y•úÆÊËÃðPRïAì_ONi]î?.\E—:lV<ZVa£^Áe%Q°$+aI4áº,Ð9š(ɬdt¼8 Æøºº4°¾VNy(©ŠD*ÊÂEÑB6;\X°e^!e×ïWVïÍN8¨Ì+èlÇzºÌù`sã+ãsꏯ¨?>'1¾"áàŠ°ûÇUsª(¡"%\.ãsÆǼBÎ-­©(	WÕ”—…kâr¬þ›—С*¡C^}ªê됗С*Qä'FU{…˜_ύÕõÜXP_Z¼¾´‚„˜xÂ#î”ÆÝ)š˜ÒšÄ”«jÀª¡	«j¼‚Z­(ajÜOyè)ÖÔâ†ÂÔ×À®^OÛÉõê#ëÕ§ÖÕÙQ	[§yU·Œ§¬2e±Š’j®¦"Úµ[®PvƒÒe JÊ ”Ý¡L†²”)P¦B™e:”P† ÌL”)€Ÿø)€›¸)€›¸)€›¸)€›¸)€›¸)€›¸)™Lni¬ª‚‰¹Ÿ‰¶T°9°S;°S;°S;°S;°S;°SCÌP³¦3
+ìMì4ÀNì4ÀNì4ÀNì4ÀNì4ÀNì4ÀN»ÓÀßéàïtÀOütÀOütÀOütÀOütÀOütÀOütÀOütÀÏ üÀÏ üÀÏ üÀÏ üÀÏ üÀÏ üÀÏ üÀÏ üÀ~ðC€üà‡‚l¿Ä®/ñ
+hô ‡ =è!@zÐC€ž	虀ž	虀ž	è™`}&XŸ	Ög~f
+NuO’Ä&Ÿ¬r©¡DŽ$κÜê²pui¢««{Rü]»BÙ
+J?”(m(ƒPv‡2ÊP¦@™
+e”éPf@‚2á
+7ÀïøÝ ¿àwün€ß
+ð»%KùõÏêêzÐ4éštMº&Ý@“n ‰4ñƒ&~ÐÄšøA?hâMüà	?xžð¾ðý€ï|?àû? øÀ ~ ð€ ü@wÞ9ÍË"ÕÕã¡€P  
+@ (  €
+Ø €
+Ø €
+Ø €
+°Á6àÛ€o¾
+ø6àÛ€o¾
+øAÀ~ðƒ€ü à?øAÀ~ðƒ€ü à?øÝ¿;àwüî€ßð»~wÀïøÝ¿;àwüî€ßð»~wÀïøÉ€ŸøÉ€ŸøÉ€ŸøÉ€ŸøÉ€ŸøÉ€ŸøÉ€ŸøÉ€Ÿøø!ðCà‡0Àa€ ?„~üø!ðCà‡0Àa€ ?„~üø!ð§ >„~üø!ðC8à‡pÀá€Â?„~üø!ð§ ~*à§>„~	üø!$ðCHà‡À!B?„~	üø!$ð§~*à§>„~üø!,ðCXà‡°ÀaÂ?„~üø!,ðCXà‡°ÀaÂ?„~üø!,ðCXà‡0Àa€ ?„~üø!ðCà‡0Àa€ ?„~üø!ðCàZ÷­ûÖý@ë~ u?кhÝy!y@ì~ v?¹ˆÜDî¢ög&%UáIîom<JukÞ»@W¿à%õZl(ƒPv‡2Êri,6ÁûÅþz£R¡Lƒ2Ê(CP&| :
+ €N@§ Ó Ði è4Ð
+´èÖÊ(H4 $ 
+ ‰€D@¢ Ñ€ß/9$åýÆêŒ&
+ “€IÀ¤`Ò 0i ˜4 L &
+ “€IÀ¤`Ò 0i ˜4 L &
+ “€ | Ò i ˆ4 D "
+ ‘€H@¤ Ò i ˆ4 D "
+ ‘€H@¤ Ò i ˆ4 D "
+ ‘€H@¤ Ð h 4 D ¢ !€@ˆ Ä b 1 „ "
+ €h@4 š M 9ÄÄc±j¹(©ŠTG«½'œZVYöªB¸"”E¢a)TYuRS¯™Åá}VjRnyÔM¬Cëuƹ呒D'=êt?‹ñ°è´H<Ìô;bB1‡Q å¼¢<¦ Ô©Ñ. 30\Yf³ÃåãŠÂä 2§†å@rp”Ê+1ùÑ’ò0U®á@jpi”Jwþ®ŽJYõ4Q¡Cí3Ÿt€©ov¤Öìh­ÙVÍ©CFyãéq®Q%®QLQ¤,æ@=Í5É}÷Lr…1<“Ê<“>HK'+jÈ)Q.–°‹ª*±Õ®Qݯ âŽm€OU:v:G&æ:\ªïkõ45¥XýÙª©?[±“³•P#£+ë©Ù/Áš2dØ´ƒÝõÆÕ¾ƒõù` òÁ äƒÈ  q€8@ Ž G ˆ# Ä â q€8@ Ž d„È@$ ’ I 2 d„Ȑ€h #@F€Œ0 a ð3?ð3?ð3?3oChChChChuÙ@]6P—
+ÔeChChiÙ@Z6–
+¤eiÙ@Z6–
+¤eiÙ@Z6–
+¤eiÙ@Z6–
+¤eiÙ@Z6–
+¤eiÙ@Z6–
+¤eCægCæg_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|eCâgoÙÀ[6ð–
+‰Ÿ
+‰Ÿ
+‰Ÿ
+|fŸÙøِøِøÙÀs6ðœ
+<gÏÙÀs6ðœ
+<gCâgCâgCâgCâgCâgCâgCâgCâgCâgCâgCâgCâgCâgCâgCâgCâgCâgßÚÀ·6$~6$~6$~6$~6ð±
+|lÛÀÇ6$~6$~6$~6$~6$~6$~6$~6$~6$~6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6$|6ÜÛplChChChChChChChChChChChçې ڐ ڐ ÚÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀûAàý ð~x?¼Þï÷ƒÀûAàý ð~x?¼Þï÷ƒÀûAàý ð~x?¼>µí ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0üþÿÿ‚ÀAà¿ ð_x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{A¸ðï÷‚pžá<Ây„ó<çyÎó œçA8σpžá<¦ÕÊ{à<Ây„ó<çyÎó œçA8σpžáüÂù„ó7çoÎß œ¿A8ƒpþáüýí½¸Uî]Õ««wwïûÎÞ	¹'$!0쵺«j5"ìä&åŽ"ÙIvÈ֐rá"0A΁€â€Bˆ
+¨xCÑñh‚ÈxaTDóè3sŽŽ£àÁù™œ9xœ’â[ÝõëÐ:·ó|ßó|ßó=OÒlþ]½W×»ªjÕûþ׿²Þ„Içûôþ
+áßþ
+áßþ
+áßþ
+áßþ
+áßþ
+áßþ
+áßþ
+áßþ
+áß^
+áÕ^
+áÕ^à§ˆyEÄ|!b^1ˆ˜DÌ"æóˆù@Ä| b>1ˆ˜DÌ"æóˆù@Ä| b>ÁüÁüÁüÁüÁüÁk¼Ák¼Ák¼Ák¼Ák¼U;ûå¸àµ^‹àµ^‹àµ^‹àµ^‹àµ^‹à±ˆü<‚§"x*‚§"x*‚§"x*‚§"x*‚§¢¨³_ú
+OEðTOEðTEðLÏDðLÏDðLÏDðLÏDðLÏDðLÏDðLÏDðLD~‘GäÃùoDþ‘¯Fä©yiD¾Á;¼Á¼‘¯Eäi÷}Äýq?EÜO÷SÔ¹Ÿl§=û#O‰ÈS"ò”žŠá©žŠá©˜¼3&ïŒé_oÅäq³³¿:±Al¢!fÇÃ{1¼Ã{1¼Ã{1ÇÃ{1¼Ã{1¼Ã{1¼Ã{1¼Ã{1¼Ã{1¼Ã{1¼Ã{1¼Ã{1¼“_Æä—1ùeL~“_Æ\·˜ësÝb®[Ìu‹¹n1×)î\'òIC^d¿†ñk·†qj˜ôÐ0ï3ÌããÖ03Ìãó7ÃüÍ03ÌßL­³C¤?Œ{üÍ0o3Ì×ó4üÌ0/3ÌÇó1ÃýaÐoƒ~ôÛ ßý6ÜGý6è·A¿
+úmÐmƒntÛ0þ
+ãß0þ
+ãß0þ
+ãÞ0Þ
+ãÝ0Þ
+ãÝ0Þ
+ãÝ0¾
+ãÛ0¾
+ãÛ0¾
+ãÛ0¾
+ãÛ0¾
+ãÛ0žM6žåx6ovQ±B¬CbDŒ‰šX#Ö‰
+b“ØÁ3D›Åø
+ðà7Ào€ß ¿~üø
+ðà7Ào€ß ¿~ü&øMð›à7Áo‚ß?¡}Bû„ö	íÚ'öô7¡¿	ýMèoBú›ÐßÎõIèoB
+ø|¾߀oÀ7àð
+ø|¾߀oÀ7àð-ø|¾ß‚oÁ·à[ð-ø|¾?›çJê×’úµ¤~-©_Kê×’úµ¤~-©[KêÖ’ºµ¤n-©[KêÖ’ºµ¤n-©[KêÖ’ºµ¤n-©[KêÖ’ºµ¤n-©[KêÖ’ºµ¤^-©WKêÕ’zµ¤^-©WKêÕ’zµ¤^-©WKêÕ’zµ¤^-©WKêÕ’zµ¤^-©WKêÕ’zµ¤^-©WKêÕ’zµ¤^-©SKêÔ’:µ¤N-©SKêÔ’:µ¤N-©SKêÔ’:µ¤N-©SKêÔ’:µ¤N-©SKêÔ’:µ¤N-©OKêÓ’ú´¤>-©OKêÓ’ú´¤.-©KKêÒ’º´¤.-©KKêÒ’º´¤.-©KKêÒ’º´¤.-©KKêÒ’º´¤.-©KKêÒ’º´¤.-©KKêÒ’º´¤.-©KKêÒ’º´¤.-©KKêÒ’º´¤.-©KKêÒ’º´¤.-©KKêÒ’º´¤.-©KKêÒ’º´¤.-©KKêÒ’º´¤.-©KKêÒ.‚¯Á×àkð5ø|
+¾_ƒ_¿~
+üø5ðkà×À¯_¿~
+üø5ðkà×À¯ÎRŸ–Ô§%õiI}ZRŸ–Ô§%õiI}ZRŸ–Ô§%õiI}ZRŸ–Ô§%õiI}ZRŸ–Ô§%õiI}ZRŸ–Ô§%õiI}ZRŸ–Ô§%õiI}ZRŸ–Ô£%õhI=ZR–Ô£%õhI=ZR–Ô£%õhI=ZR–Ô£%õhI=ZR–Ô£%õhI=ZR–Ô£%õhI=ZR–Ô£%õhI=ZR–Ô£%õhI=ZR–Ô£%õhI=ZR–Ô£%õhI=ZR–Ô£%õhI=ZR‡–Ô¡%uhIZR‡–Ô¡%uhIZR‡–Ô¡%uhIZR‡–Ô¡%uhIZV;úlÁ·àguhIZR‡–Ô¡%uhIZR‡–Ô¡%uhIYRG–Ô‘%udù>:¢Ã¡ì|_kÄ:±Al¢!Òô8DCô8DCô8DCô8DCô8DCô8DCô8DCô8DCô˜z¹¤^.©—Kêå’z¹¤^.©—Kêå’z¹¤^.©—Kêå’z¹¤^.©“Kêä’:¹¤N.©“Kêä’:¹¤N.©“Kêä’:¹¤N.©“Kêä’:¹¤N.©“Kêã’ú¸¤>.©Kêã.‚‹.S/—ÔË%õrI½\R/—ÔË%õr¢ËÔÍ%usIÝ\R7—ÔÍ%usIÝ\R7—ÔÍ%usI½[Rï–Ô»%õnI½[Rï–Ô»%õnI½[Rï–Ô»%õnI½[Rï–Ô»%õnI½[Rï–Ôµ]dÿèeˆ^†èeˆ^†èeˆ^†èeˆ^†èeˆ^†èeˆÎ…è\ˆÎ…è\ˆÎ…è\Xï|ó‚Î…è\ˆÎ…è\ˆÎ…è\ˆÎ…èuiIZR÷”Ô=%õ@I=PFäEyQD^‘Q/t1$²?Î?u at IPR”Ô%u at IPRtQkÄ:±Al"ýæúD\ꉒz¢‹às}¨/º>ùõFÁ'Ÿ‰Èg"ò™>Oàó>Oàó>Oàó>Oàó${®èbX'6ˆœ„hˆÙq&èA‚$èA‚$èA‚$è@‚$è@‚$è@‚$è@‚$è@‚$è@‚$è@ï'ð~ï'ð~ï'ð~ï'ð~ï'ð}ß'ð}ß'ð}ß'ð}ß'ð}ß'ð}ß'ð}ß'•.Ç	ï'ð~ï'ð~ï'ð~Âý”p?%ð~ï'ð~ï'ð~ï'ð~ï'ð~Â|,ÿø?ÿø?ÿø?ÿø?ÿø?÷x?÷x?÷x?÷x?÷x?÷x?÷x?ßø=Ïx áþJ:÷ó…„ùBÂ|!Gx4Gx4Gx4Gx4Gx4Gx4Gx4Gx4a¾0_H˜/$Ìæ	ó…„ùBÂ|!a¾0_H˜/$Ìæ	󅄺\B].a~0?H˜$Ìæ	óOxÊÀSž2𔁧<eà)O™ñÎþêıILˆ†˜õ×ÀSž2𔁧<eÈ[
+|eà+_øÊÀW¾2𕁯|eà+_øÊÀW¾2ä­†¼ÕÀ_þ2𗁿üeà/øËÀ_†¼ÕÀc3ð˜Ç<fà1xÌÀc3ð˜Ç<fà1ñ<CxÌÀc3ð˜Ç<fà1xÌÀc3ð˜Ç<fà1xÌÀc3ð˜Ç<fà1xÌÀc3ð˜!5ð™Ï|fà3ŸøÌÀg>3ð™Ï|fà3ŸøÌP_2Ô—õ%CeÈ£y”!2äQ†<ʐGò(CeàK_òaC>làOC>lȇ
+ù°‰má¢öʝÂ5Y¸([/M;”.êüõõÒ5wÙ÷ÈÇxÞ%yÞå"øäc†|̐ñÌEðÉÇù˜!3äc†|Œçf’çf’çf’çf.‚O>Æó3Éó3iО“Iž“Iž“¹ÈþуðÜÌEöðMòÍEŽ=àyšäyšäyšäyšäyšäyšäyšäyšäyšäyšäyšäyš‹à£<W“<Ws|ô€çl’çl’çl’çl’çl.‚^ô‚çnÒtô‚zÏÝ$ÏÝ$ÏÝ\ŸzÏá$Ïá$Ïá$Ïá$Ïá$Ïá$Ïá$Ïá$Ïá$Ïá\ŸzÏåd繜ac¨'êI†y¡žd¨'êI†z’¡žd¨'êI†z’¡ždxîc¨+êJ†º’¡®d¨++—d7ÚuíÀ§ SU2T•U%CUÉPU²¨µE­-jmQk‹Z[ÔÚ¢Öµ¶¨µïì¯Nl›Ä„hˆÙÑXÔÚ¢Öµ¶¨µE­-jmQg‹:[ÔÙ¢Îu¶¨³E-jlQc‹[ÔØ¢Æ5¶¨±E-jlQc‹[ÔتLJ[ÔØ¢Æ5¶¨±E-jlQc‹[ÔØ¢Æ5¶¨±E-jlQc‹[ÔØ¢Æ5¶¨±E-jlQ_‹úZÔ×¢¾õµ¨¯Em-jkQ[‹ÚZÔÖ¢¶µµ¨­Ee-êjÃÎ~é?jjQS‹šZÔÔ¢¦5µ¨©EM-jjQS‹šZÔÔ¢¦5µ¨©EM-jjQS‹šZÔÔ¢¦5µ¨©EM-jjQS‹šZÔÔ¢¦5µT3,ÕK5ÃRÍ°T3,³‹zZÔÓ¢žõ´¨§E=-êiuãE=-êiQO‹zZÔÓ¢žõ´¨§E=-êiQO‹zZÔÓ2۲̶,³-ËlË¢®uµ¨«E]-êjQW‹ºZÔÕ¢®uµ¨«E]-êjQW‹ºZÔÕ¢®uµ¨«E]-êjQU‹ªZTÕ¢ªUµ¨ªEU-ªjQU‹ªZTÕ¢ªUµ¨ªEU-jjQS‹šZÔÔ¢¦5µ¨©EM-jjQS‹šZÔÔ¢¦5µ¨§E=-êiQO‹zZÔÓ¢šÕ´¨¦E5-ªiQM‹jZTÓ¢šÕ´¨¦E5-ªiQM‹jZTÓ¢šÕ´¨¦åé‹åé‹E'-úhÑG‹>ÚŽ>òÔÅòÔÅòÔÅòÔÅfO]Ôx¦£.J¢"VˆUbHŒˆ1QkÄ:±Alb×fQ‚/eyãô;·Mm˜Ü¾‰€”Qû_&ß¾~ÆýzÝæþ«vδþíø«ÝGShÃîTe`fKËêmjËæ©I÷¥×ÌtmÒŠÎ+:«è¬¢³ŠÎ*:«Ø{E®œÞÒ6›Z?³ì
+§¨B+œ¢
+(NQ¥QšºvýæÉ+Ý1ð	8p*àT9)U.J•‹Rå¢TAª‚T©
+R•‹Qåøª_•ã«‚[·
+nnnnnÈ‘†à‡à‡à‡à‡à‡à‡à‡à‡à‡à‡àGàGàGàGàGì/bû‹Ø_Äþ"ö³¿˜ýÅô?¦ÿ1ýéLÿcúƒƒƒƒƒƒ§ÁÓàiú¯é¿_ƒ¯Á×àkð5ø|
+¾_ƒ¯Á¯[·n
+ܸõñþõ3›g¶\éî‘“Û®ãS•ß<½m’
+ºV
+[§¶»VlÒ³:=«×óf¶\‘7;·Íð	}ªÓ§:ç¤Aßô­Aßô­Aß '´OhŸpŽÎQ¹H81+	‘Éñζ"VˆUbHŒˆ1QkıILˆ†˜Ÿ”ãÅ37n›|玝Ûø `	°:“`÷^35í8lǶÉíÛùðlvàb£ø–ßÝyÒ·uÛÔöõÛ¦·¶þÉv>¤+ŠS 8Š(z è¢РTºZ”Т„¥JJSÛwL_9¹Ú•£¬€\¹Â9¨ÐƒJ5˜Ü<µu[àC‚”ð+àWÀ¯€]JèRB—º”Ð¥„.%t)«?´)¡M	mJhSB›º”USlÝ(›¦·m(9i¿áBÁ€”0 „%(ÃzÉíbjúŠM;6õíØ´mŠ÷Û{7N_Ýyß·ÝiÙ6ø‡#JQˆF”‡ÑŸˆþDô'¢?ýA%*aP	ƒJT •0¨ŒÁÁ‡Q%Œ*aT	£JU¨F•0ª„Q%Œ*aT	£bF©0£T˜Q*Ì(]¬–&·m›¹fóÔÆ=íw;·–Ûq[ëtf¿Ü0sÍ–ìÝ:wK4ÛÀÝS£Ë5º\£Ë5º\£Ë5º\£Ë5º\£Ë5º\§Ëuº\§Ëuº\ç”Á´xIº÷éÙºíS|H'êt¢N'êtÖ•°®„u%¬‹©¤ÂTRa*ébu`½C›ž¼Â%RŽ]8
+úÒà\48
+ºÑ 
+ºÑ 
+ºÑ 
+ºÑ¤MºÑ¤MºÑä\49Mð›à7Áo‚ß¿	~ü&øMð›6;—.ÓjŒrgcçÖþÎÛöø8Òª5DŽl´FI¶Ÿ„~!BxN*<'ž“
+ÏI…ç¤ÂsRá9©ðœTxN*<'•ìˆ—á¼΋á¼ð
+ø|¾߀oÀ7àð
+ø|¾ß‚oÁ·à[ð-ø|¾ß‚oÁ·à[ð™m¸iGÉÅVâ>™¥À.svz»KÐwLù¬ZœºrëŽë\úQ¼b[ËOfËŽž©ÍSW¶Lk3o +1vtëÅí;×;æœì|Ð$&ÄoI…—¤ÂKRá%ébÔ7éú±mzû;ÂmâCM¬ĦÓá™­3ÛZ*<¹¹ìÞljÙóNn&·\±9»{1T˜G*Ì#æ‘
+óH£òæ™+¦×O¶|™K¼ÙÖ7½eGkŽ³¾¸–>æ‘
+óH…y¤Â<Ra©0T˜GºX)íØänøn"Å'ô IVH2î‘
+÷H…{¤j¹GnŸ¾rzóä6¶é’Œ{¤Â=Rá©pT¸GºX-¹	ÔÛv¹Žˆ2þ‘
+ßH…o¤Â7Rá©ðTøF*|#¾‘
+ßH…o¤Â7Rá©ðTøF*|#¾‘
+ßH…o¤Â7Rá©ðTøFºh{§®Ú9}µËs¶¬çì¢ÖxF*<"‘
+H…G¤Â#Rá©ðˆTxD*<"‘
+H…G¤Â#Rá©ðˆTxD*<"‘
+H…G¤Â#Rá©ðˆTxD*<"‘
+Heûnpcu§S®Öÿ¦v”Ü-›ý‚ÖaŸ‚›§®¥ug#kMzÆL÷H…{¤Â=Rá©pT¸G*Ü#î‘
+÷H…{¤‹ÕrË!Û夛wnç£h ûèʝ›wLoÝ|ÓÒ|$>’
+I…¤ÂGRá#©ð‘TøH*|$>’.Vû݁oj²ï<r_‘à&©p“T¸I*Ü$n’
+7I…›¤ÂMRá&©pT¸G*Ü#î‘
+÷H…{¤Â=Rá©pT¸G*Ü#î‘
+÷H…{¤Â=Rá©pT¸Gª–{䆙¯ñ,‹¤ÂERá"©p‘T¸H*\$.
+Hù>¬f…0+„Y%ïÓo„×H…k¤Â5Rá©pt‘ó†0ã©pT¸Fº>ÂŒ‹¤ÂERá"é"ø³B˜Œˤ‹à#Ì
+aV³B˜¬f…0+„Y!Ì
+aVÙ_¾vÂ1N”Á¦™d¡æиV*\+®•
+×J5±F¬Ä&1!¢íß6u5ºçØ"û4{´¦p¡T¸P*\'®“
+×Im¹%˜.cؼcë‘·ëØš‹Í¤ÂfRa3©°™TØJ*l% rìp)6‡
+›C…­¡LöC­¥?Tà‡
+üP*ðC~¨Àø¡?T˜.T˜.T`†
+ÌP*0Cf¨À˜¡3T`†J³é#¼ÂÈf™b™bù‘bù‘bù‘bù‘bù‘bù‘bù‘bù‘bù‘‹µâyVŽw*Ïá¸l} »>¨«Äc¢&ÖˆubÃíp¼{‡	Ñm«A嵌4–
+¸Xi5P]
+èµ›PÆ­Õ®ôÂM(Û}Ð]
+胕ՊՊՊÕ.¶»P{mŒ[–(–(–(–(–¸ØîAÔµz@²ÈzÅzÅzÅzÛ=ˆ_Û¹"\l÷ ìÚ= YÄaG±r@±r@±r@±r@±r@±r@±r@±r@±r@±r@±r@±r@±r@±r@±rÀÅÖ8¨¶Ç{£ª¼	eçâM¥ÖiÓùDuÚ¨°Óxœ7ÕNãŠî´9ò&:mŽ¼éüªÚG@;{V®V4îì¹ÚéOµÓŸjgÏÕÎ×Ã#xd?]#˜[…-Â–GaË£°åQØò(–)(–)(–)(–)(–)(–)(–)(–)(–)(–)(–)¨ö2…­ë6Ϭg¶Mˆe
+ªµLaÖî߃OM=ÔqÐý[ÐÉ#[‹6oìþ=èä‘­EÛvd¿ß¼cû¦É
+SAûÿ=Þ™Åv+¸ž%Š%.rìäŽ!¹cHî¢
+!Ú¢
+!ÚÖliãôæÍSÖÍ\[8Ã
+ºÎÉFX¡X¡X¡X¡X¡Xáb­p†Ôî†j‡°õ¬­µûmnjIz€:°Bab¤Z&F;ZÕ¢[Ù¦䑘)LŒ&F
+#Õ21jx.loS„ÃÄHab¤01R˜)LŒ&FªebÔþþælƒO‰©‘‹à7k…,¹g“O6MûÄP®Æ
+Ia…¤°BRX!)¬VH
++$ãÒô–«×ítçvGë]7$™(vH
+;$…’bÙ‰ÂIa‡¤X†¢°CRØ!)ì\Ën²µ%å#ždG$…#’‹td4$
+IFC’Qœ“ÎI
+ç$…s’Â9ÉENÉhH2’Œ†$£!ÉhH2’Œ†$£!ÉhH2AMt"éD$	BD‚‘ D$	BD‚‘ D¤£8>¹˜
+|*FéADzQAŠ¨ áå"ø|׈ä "9ÀYÊEðÉ
+"r§TDn€ó”ÂyJá<¥pžR8O)œ§ÎS
+ç)…ó”ÂyJá<¥pžR8O)œ§ÎS
+ç)…ó”ÂyJá<¥pžR8O)œ§ÎS
+ç)k¥íWNožÚ8¹~ªÏÝG6Äö[hBH
+¢Š-lœºr’›'ªÊ|×ð¤T)j)j)ªU
+ƒ*…A•Â JaP¥0¨RT)ªU
+ƒ*…A•Â JaPå"øT’"*I•$¬\ŸJRD%)¢’…6ؾµ£1Ø\¹¨òë7ï\ÇF5Ø45éÈtÃô䕝¿ˆ€Ã•ÂáÊÅZï•;·3§šèzßù˜])Ì®‹Û‹Û‹Û‹Û‹Û‹Û‹Û‹Û‹Û\¤+¨?fY
+³,…Y–Â,Ka–¥0ËR˜e)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É©ˆY æ].‚ƒÐcæå"8}„ÐG=&_.‚Ã,0ªwp8Nt30¡óÏ‹"êE1ԏw¶+Ä*1"ÆDM¬›Ä„hˆnÅÆPlÅÆPlÅÆPlÅÆPlÅÆPlÅÆPlÅÆPlÅÆPlÅÆPlÅÆPlÅÆPlÅÆPlµÆPkµÆPkµÆPkµÆPkµÆPkµÆPkµÆPkµÆPkÌœ+fÎóÈ<æ‘y¯ÆðjÌ”+fÊ3劙rÅpk·Æpk·Æpk·Æpk·Æpk§Æpi—Æpi—ÆpfWÆpeWÆpeWÆpeWÆ°cL5"¦Sˆ©FÄT#b(2†"c*ï1•÷˜Ê{/Æðbuð8x1†cx1†cx1†cx1†cx1†cx1†cx1†cx1†cx1†cx1†cx1†cx1†cx1†cx1†cx1†cx1†cx1†cx1†cx1†ÿbø/†ÿbø/†ÿbf at 13 ˜êX/Æðb/Æðb/Æðb/Æðb/Æðb/Æðb/Æðb/ÆðbÆ>dÞ3÷ÄÌ{bæ=1óž˜úyLý<¦~S?™÷ÄÌ{0T˜ü)Lþ\d¤ò1©<æ
+s?…¹ŸÂÜOaî§0÷S˜û¹ÈþIÕ1ûS˜ý)Ìþ\ììŸþ’ªÇ¤ê1©º&U×è…F/4z¡ÑMª®Ñ
+nhtC£šT]“ªktD£#ÑèˆFG4:¢ÑŽhtD£#ÑèˆFG4:¢ÑŽhtD£#ÑèˆFG4:¢ÑŽhtD£#Ñèˆ&U×è‰FO4z¢ÑžhôD£'=Ñè‰FO4z¢ÑžhôD£'=Ñè‰FO4z¢ÑžhôD£'=Ñè‰FO4z¢ÑžhôD£'=Ñè‰FO4z¢ÉÕ5º¢ÉÕ5ú¢Ñ¾hôE“«kruM®®ÑM®®ÑþhôG£?ýÑèF4OKS×è‘F4z¤Ñ#iôH£G=Òè‘F4z¤Ñ#iôH£G=Òè‘F4z¤Ñ#iôH£G=Òè‘F4z¤Ñ#iôH£G=Òè‘F4z¤Ñ#iôH£G=Òè‘F4z¤Ñ#iôH£G=Òè‘F4z¤Ñ#Mž®ÉÓ5yºF§4:¥Ñ)NitJ£SÒè”F§4:¥Ñ)NitJ£SÒè”F§4:¥Ñ)NitJ£SÒè”&×è•F¯4z¥Ñ+^iôJ£W½Òè•F¯4z¥Ñ+^iôJS§ÓÔé4u:MNó¼Wó½4u:MNS§ÓÔé4Ï}5Ï}5Ï}5;MÁNóôJóôJS±ÓTì4;MÅNS±ÓTì4;ÍscÍscÍscMµNS­ÓTë4Õ:MµNS­Ó趦Z§©ÖiªušjæéšFß5ú®Ñw¾kô]£ïšR¦T§)ÕiJuý×è¿Fÿ5ú¯Ñþkô_£ÿý×è¿Fÿ5ú¯Ñþkô_£ÿ5ô¼†ž×Ðïú]CjèC
+^¨Á5®gëYãzÖ¸ž5®gëYãzÖ¸ž5ÎS~×èw¼¤N^R'/©“OÔÉ'êäuò‰:ùD|¢N>Q'Ÿ¨“OÔÉ'êäuò‰:ùD|¢N>Q'Ÿ¨“OÔÑï:¼Z‡Wëðj^­Ã«uxµÎù«sþêðj^­Ã«uxµ¯ÖáÕ:¼Z‡Wëðj^­Ã«uxµ¯ÖáÕ:¼Z‡Wëðj^­Ã«uxµ¯ÖáÕ:¼Z‡Wëðj^­Ã«uxµßÕá»:|W‡ïêð]¾«Ãwuø®ßÕá»:|W‡ïêð]ñ_g5?
+ÆOƒñÓ ¯m×6ÈkÜ
+îƒymƒ¼¶1ÞÙoƒØ$&DCÌŽ³Á8l0ŒÃã°Á8l0ŒÃã°Á8l0ŒÃùjƒ|µA¾Ú _m’Ï4Égšä3ͨóû*1$Fʨ‰5bØ fÇÝ$/i’—4ÉKšä%˜)̍æF
+s#…¹‘ÂÜHan¤07R˜)̍æF
+s#…¹‘ÂÜHan¤07R˜)̍æF
+s#…¹‘ÂÜHan¤07R˜)̍æF
+s#…¹‘ÂÜHan¤07R˜)̍æF
+s#…¹‘ÂÜHan¤07R˜)̍æF
+s#Á'¯ÅäHar¤09R˜)LŽ&G
+“#…É‘‹íïU“,pQ±B¬CbDŒ‰šX#Ö‰
+b“˜
+üüüüüüüüüüüüüüüü|¾߀oÀ7àð
+ø|¾߀oÀ7àð
+ø|¾ß‚oÁ·à[ð-ø|¾ß‚oÁ·à[ð-øY>`ù[–e¥Ve<hù×Õm”]w¿ZøÔ§>µð©…ï,|gá;ßYøÎÅ„hˆ|gá;ßYøÎEö«Ø¯b¿ŠýfóskÄ:±AlÁWà+ð+àWÀ¯€_¿~ü
+øp+àVÀ­€[·^œ*8Uö_eÿUö[帪ì¿Êþ«ì¿Êþ«ì¿ÊqU;8WÈq„à„à„G^^^^^^^^ã¦q|ǁƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ¯Á×àk¾¯ù¾æûšïk¾¯ù~ï×ø~þ×èþ×èï×ø~B¿p
+ÇcøÜ‚oÁ·|^ÀdÍb²f1Y³˜¬YLÖ,&k“5‹ÉšÅdÍb²f1Y³˜¬YLÖ,&k“5‹ÉšÅäÌbrf19³˜œYL¨,&T*‹	•Å„Êb>e1Ÿ²˜OY̧,æSó)‹ù”Å|Êb>å"ýâºòªXþQÁÕàj΋_ƒ¯Á×à3.0Ÿ²˜OY̧,æSó)‹ù”Å|Êb>e1Ÿ²˜OY̧,æSó)‹ù”Å|Êb>e1Ÿ²üã-–¼Åò·Xþñ‹9•ÅœÊbNe1§²˜SYÌ©,æTs*‹9•ÅœÊbNe1§²˜SYÌ©,æTs*‹9•ÅœÊbNe1§²˜SYÌ©,æTs*‹9•ÅœÊbNe1§²˜SYÌ©,æTs*‹9•ÅœÊbNe1§²˜SYÌ©,æTs*‹9•ÅœÊbNe1§²˜SYÌ©,æTs*‹9•ÅœÊbNe1§²˜SYÌ©,æTs*‹9•ÅœÊbNe1§²˜SYÌ©,æTs*‹9•ÅœÊbNe1§²˜SYÌ©,æTs*‹9•ÅœÊbNe1§²˜SYÌ©,æTs*‹9•‹à[ð-ø|¾ß‚oÁ·à[ð-ø𢁱é°ØtXl:,6.&…-k×ñ,È,¨,T²PÍB˜…(qtjY¨g¡‘…f@0Y°í 3<™áÉOfx2ÓžÌðd†'3<™áÉOfx2ÓžÌðd†§2<•á©Oex*ÃSžÊðT†§2<•á©Oex*ÃSžÊðT†WÉð*^%ëdx•¯’áU2¼J†WÉð*^%ëdx•¯’áU2¼J†WÍðª^5ëfxÕ¯šáU3¼j†WÍðª^5ëfxÕ¯šáU3¼j†fxa†fxa†fxa†¶ñÂìÀÂìÀÂìˆÂìˆÂìˆÂìˆÂìPÂìPÂìPÂìPÂìPÂ쬻aÖÝ0ën˜u7¬²³vwì»aÖÏ0ëg˜õ3ÌúÒÏ0ÎBÖÝ0ën˜…P˜…P˜…P”EYç£/Êð¢/Êð¢/Êð¢/Êð¢/ÊðêÙ>ëÙ>ëÙ>ëÙ>ëÙ>ëÙ>ëÙ>ëÙ>ëÙ>ëÙ>ëÙ>ëì3;†zvõìêÙ142¼F†×Èð^#Ãkdx¯‘á52¼F†×Èð^#Ãkdx¯‘á53¼f†×Ìðš^3ÃkfxÍ¯™á53¼f†×Ìðš^3ÃkfxÍ¯™á%^’á%^ÒÆ‹Ê[Õ,„Yˆ²gAg¡–…z¥
+›ÏÙ±~rÛÌ–b‚‹gPoù{çOoÞ0¼±åDXnNo[¿óÊÖjÄ ÙjÛç¸xܱáêõ“Û§‚FËr¨”Ìì˜\¿~jËŽ¾3vn¹brÛÎ+7OîÜÑ›Ìì\·yªmZžÜ6¹nzýåfZëËÛo•{¿½³Qimto\>9ÐÝðòÉNÓjû{­^D‘Y½qzË䑍é-Ó;Žl\9µa:ۨˮfnãµfnãµf‘íÞ›íÞ›íjÖ¨wýÆm´~ÓK߶Mo¹"ûEÜìÚ™Ûxí+n㵝ÅIw³¤»YÒÕLwî>Ý}Zu7SÝÍTw³°»YØÝ,ì>ÐîóÑè>ì|t.Г/_7¹­Çl¹bõä惭6*Ò«Ý…Ú<µ}{¶]K:Û½í4®ÝO•÷ÕÖ6ïã®Ï[md×ûñ®ö²ë}çóÊï}·ÙõygÿÍF×çý¨ß{?Þõ¾Âûè÷ÞË®÷ã]ïk]ßí¼—-Üòºm“íe3;‚³Z'+;¡µìŠÌÞ™åáíÕ›g¶\±}Çä¶ÎIï¾jî«Öè¾jÍî{¢Ù}O4»ï‰Z6T‚ͯu"É †[ÕX¯¾rfËÌÛ&·nâ“ÚkŸN·öO½³û·<c~o»Ö½Ýr¹þÝíf£³-6¬Ÿ	Îlu%³¥X½Î‘Kû¼E¡lýó¹]ï³kê>kmw}nºÞ[Ú˜®6Õ®6­÷¶}Ôq³þÚùjm9E­#'/v}íjÖènÖènÖìnÖìnÖìn–t7Kº›%ÝÍLw3ÓÝÌt7³ÝÍlw³®»6NÆ»š¹×š¹®f²»™ìn&»›©îfª»™ênVénVénVénVínVínVínv7»›…ÝÍ¢îfQw³¨»YÜÝ,înw7ÓÝÍtw3ÝݬÖݬÖݬÖݬ{¼%Ýã-éoI÷xKºÇ[Ò=Þ’îñ–t·¤{¼%Ýã-éoI÷xKºÇ[Ò=Þ’îñ–t·¤{¼%ÝãÍt7Ó=ÞL÷x3ÝãÍt7Ó=ÞL÷x3ÝãÍt7Ó=ÞL÷x3ÝãÍt7Ó=ÞL÷x3ÝãÍt7Ó=ÞL÷x3ÝãÍt7Ó=ÞL÷x3Ùx+½Åå“ëf®ns_k±I‹y/»Þ«®÷•®÷Õ®÷a×û¨ë}|„ñ«±Y½azr}Æﺾz]+›kñ1Ÿ4^û¤ýe#õꝡô¼}¹›&^}%GÅÿZ!þI‰ßîÿs@ü&/§â¬ÿ8 þû^q`…ø‡÷ÔƒHÅK{ů÷ŠŠ¿?(þÏTüÝ)âW
+ñB*þ›¿|þ¼à—{Åó®áóç‰ç~qrðÜAñ‹“ÅÏSñ·©ø™3*~ºWü$ÿuDü—Å_EüU*~ìšÿøFñ£gßüèFñìÅÿr~ðÃTüå|ñ¤â/RñƒTüçT|¯øÞ3‹‚ï¥â™Eâ»J<ŠoÝ2|køóÙâ©T|3ßHÅ×SñµTüY*žLÅWSñD*¾’ŠÇ‡Åþ[WûS±ïË_	ö¥âË_º,øòWÄ—oÊé?­¾tÙÄ«âKùÿ´B|1ºW|!ŸOÅc©ø\*Ý þd@<òÙÁ#Äg	>»B<<">ã:ý™ƒâÓ©øT*>™ŠOŒˆ‡Rññ
+Wâcâ£ă®Éƒ{Å©¸ÿ#}Áý©øHŸøð‡æÞ >tßPð¡¹â¾!ñÁ²øãTÜ»·?¸7{ûÅ÷¥={Å=w÷/î8(Þ×W‚÷§â®;/îúŠ¸ë¦ü´"¸ó2qçDþVˆ÷¥âŽ÷®îHÅ{W‹÷¸Ã|O]Ü~[opû¨¸­WìvìÞ nugêÖâ–añSñnþC*nïNÅM©Ø•Š‰Wÿðƃ?Lō7Š6ˆëÏ®_!Þ•ŠëRq퀸¦O\];S±ã Ø~Pl;(®:(¶¦b&[R±y©xg*Þ1ÜÞqž˜NŦÅncc*¦R±!ëS±.“§ˆµÅÛûÄe©xk*.MÅ%—ƒKŠ‹Ëâ¢Ùsƒ‹”¸08äâü1qž?œwŒx˨xóY³‚7§bM¯øƒTœû¦¡àÜT¼iHœ“Š³ÝoÎNÅYggÍg.ìÎgô‹7¦Âîf¯HRÑ̽.h¯ˆúÙb"§§â´7Œ§Š7œ:¼aDœúúþàÔ‰WÅëûÅ)©¨¥BÇ£>(âh(ˆGEöѐ{Eu‘¨ô%{•
+Ù+ÆOî
+ÆûÅɽbõëJÁê!ñº’8I‰OXœ¸Aœ°j$8a…X5"Ž_¹"8¾.V®Ç­è
+Ž+zÅòT,Kűƒb©;Î¥#bɱø Xäaѱ°_,pgpA*æób®Û˜›Šc6ˆ9îLÍIÅl÷¥ÙsÅX*FS1+#®ÁH*†Ý±7ÄЍbpƒHEßì ?}®ußlÑ›Šò(¥¢èšSÑ3*
+DÞý2ïFÀ˜pŸŠTäÜvîuÂ^*ü}þ†[ÞçŸøÿ‡?Þÿ×ø7ÿ,ôrÞÆto~cð'¼oÞD_þ¯ðŠ_våòÞÉO=û¢ô†ž}ñÙÇg
+/^±txéƼwh»˜è—éÞžúÇm…UžïýÜóò—?òÊÞÄÄXC<˜Ï=¼»Ç{°T\\X ¼Å~ïгg?6xþÅû]ã	}É‹Or;>ùEõrk×gŸwñ%Çú_ƒùÜeñÒá \Q^:¶4õÏJ?èO}×?ëÐCç·Ÿ±ïŒƒ?zØóÜ.ö:¼³‚Þノ•sçÍÇ,òÞpäC¾§ÿÁÑ÷ç½sÞP9ç—Ì……C‡Î~lìü³›}þ[Ï~lôü·º¾ˆW¿¦/qÇøµ¯
+ÔèÏËíþô¿î	~=<§æz6¡.È_\Øó®ü»‚«çïžÛ“÷òsóóòóƒ;¼«;çmŸ¿cÁÍÞ­sožwóü›|Úûôüá˼ËV¸C#/>Í«Ç-;¶ÐžæWT~l´ÐSðüÛs_?tÎvÿ}•É7}êÖËxí»ž½øWþ¨yëÜôå‡~øÿý§\yï™×ìm4¿'Õ¯¾ñ¶Ol]˜þ½;vwHžlrç:çÎö7&êÞ°ïåƒ|®uìþpY”½áœ'D¹ÇBëÃÒ°([¿hx¢g/Þ]
+JÅžBÞÝS^)(»+óÔœÖÁŸúü³/ŽÔºþH(fo‡²÷—û…%}¾ÙDcÐÌ
+ö½‹½«½­Þ^©Ç/æ
+¢”ŸíÏÍ]è_œ[Ów…¿)w­uî±-MϵÅÝþm¹›úþ8÷A±7?ǝ¥’¿Ô¯øËÄR±,÷DúRnEzý/sµ¿¼íðå·ý(8<W<zðDWúnwìÂ{Ú]÷ݱ½ao‰×œX6×ÛS.íy·¿§ü'‹‡{‹¹YsÞÀ‚ÙÁÜ«KÞ‚‘üÒ¡C/ªCn˜¹kYk_dw‰‡^ªaðXwþðÒÖ¢Òã–y³b©šÝºF‹ü±Ñü²¥þÝ~òñ|äãéþ‰÷¼ÿý÷¤½¹üoºaÏ'Ò¯þUîéÃ?ÝýÞ;nÉmLO›ÙvÕÖO~íó·ltÉ3üÿâÆéöWŸVºq:׋&æõtàÑòžaÿ£Þ£ù=sÞ?|Ǽž¹ýÞøèмV[7Úó/·ûö?_ÿâàüÅós®{c«ýeK¼á!Ïõ.8²1;X¹ñ…›_õÒþïÝüÂÆwüú?¦’¾Ë¿Õ?ïÖ_ë~tùÛÓo§•þuúí·_þÃ3ÎððÝ•ðxc{¹ó<Æy\=1æí)¹38TÌ
+•½`n¿ò”ò#®S/¿8\㤹ÛâkgµOX%능í¸Ê÷ï~ÙýÅéÏÓgÒ†Ãù‚¿7Ý”®I'ƒ“_¹Æ?Æ_íŸäÏùdzozSú‡éÞöýëðý»¾ðVÙû\Î_àåó­ûs¨Å^›!Z ãþDÿx0¬	Öw…ËfU†—=ýÝï?:x"û),vûéóþl¢*†{Š=¹a?Wl‘+•Kî†(—åžœ(
+ïsÅ^7òÝ°Ê…ùÓÊ´ßä¡ÖÈhÿ§^TîÝ‘ =쳡ï†üց֐¿P´†{)WˍöÌ*—;®gIÏqå%åjOXžÎݐ»¾çºòM¹›{n.ß•›÷{Å,¾XæŸ$V/UýSÅ…ÅKJSÅw”®.^çÎùûÄÿCbÔݳ–ºaxÙ°ïⲧý×ù7ú»ü×ýyºë™t×SÁÅ?<1X|ÈË{Þ9‡AÅ{É»nbQ;l?7옥áÖjPð{ròQ;Êrv”íyꋪÆ1æÝúqǶ¸·ulãQN÷œ‘{cÏtncÏM¹ž‚_*Œùó
+Ö?³p‘qaÊŸ.\W¸ÅOa_áÞ¡v¯Ýp^ÚîòPnïSéÃïp½}eqþçOÌÿü•Ån¬µî¿v÷@¯7Ç[61«°gÄÛÓ÷þ‘;Ž)ͬˆ¹cCÇ´»—
+ÿ¡—Æýc[ê¢Zÿ_™
+µöÿÅÊŸ¤‡}ñ“Ÿø~úêOüSükÓÛÒo¥žîö¯ÎI÷¥¿Lÿ[ºÏ?ßçÏ÷Ïx(}kzú@úVÿ!{}¢3îóïkûYÞ)Ǹ1ßú#Cå¢S;7òOn
+ýÑŒ2²aÑV¨‰ÞÁ±Åc§]>ö¹± }á
+ÇçùÝ	ðïNßwß}ïKµÿWZ=|%ýnpòá|`÷­øäsÿõ§¿8üiwÍÏëùdk¼ú×OœÌ+nŒæç•Kb^¹·œ›ççz{Ë…Ö0†óøϵö¼¾F9ȉ‚»¶½Å¾Þr©XZÞÛãõ=û½9\[õ/à#ñ…{íñü…\!È•’”GÊÇËÝH>-wZP-—Ïɽ)h”'Ê—äÞ‘{gpEymùúÜ®Ü
+Á®à¦òÞÜž`aWʹ»*_¼Às£-_ôŠ=%¯”/—û¼yb,?VœÛ74°$¿4XRXÒ³¤¸¬´¼¼¢wÉÀ’Ss§ˆ0_	Æ‹Q©Ö{zßø€õ¬Vn"oÜíÞpƒ¸Qœ(N”’ò›ú&&.ιû¦oÍÀÆÜb2¿.X[XÛ³¶¸¡´¡¼¡÷ïjÿúܵâšüŽàºÂu=×·¯íÛÕ·kàÖÜnq[þöà–Ò{zï¸7ÿÀÀçÞÚµ•’ßúÏ_Vò—%ßsC©ö\ëßOoOÝxúFêFðHþ¥Ö»ç†hë_}.ÿºüõî\­ðžpYÇâÞ9¥ï3s
+û†—ܺøñû—í¾cNŸ7GÓ_*ö.ÅQsœJß{Ö]—ìî{êù—¹Aþ­—†^®
+לÜNl_8¾h|ñø’ñ¥ãÇž¾rbáÄ¢‰ÅK&–N»fášEk¯Y²féšc׬ܺò–…»í^¼{É{×ÊWX¹¨óÕΗ:_X»híâµKÖ.ݺhëâ­K¶.½iÑM‹oZrÓÒc.s£÷ØÂØèl7‚ßàÇÃËB§)ÇV£ÊÒî4evîÉŸ=òî™îß·ïô'n{ä™Ã¯ø¹OÝ»öKçO=yéÿ8«l¼~Ýö¿þâªs¿ûፓ_ÿØW¿6²ë½«W?¼rå¡7]õêsâw®æz§OÌ÷nõoËÜÚ[yÿp~ÿœ}-áé÷Î5NøžïßPúòKC¿y©u«ÍšÓü»æ?8?@ ;nà± xá܏¬ùÓo}ëO×|äÜ7}â²Ãék.øX>|äÄŸûþ÷Ÿ;ñć—/÷Oóüÿ”eíkèú•ßåú5êÍ÷¶N,÷ÆüÒ­ÅÛ‚±ÏøÁþ>ÿ+ÇìÙ×wÇ‚ùc¹âXÑ;;72h´eð©v~ØêæóCîÚ
+½üÒpëÚ­:}áÖ….ü‹…§{§û§çN;}~pRÏÉÅ“K'•g¼&7363¿tÙU­CYºÈ¯t˸#¹žöáõäwúBß÷¿üŽo¯[ÿïL_N¿í¯:ô¿g_î·Ý· ÷öKŸüvµúè	'ùÚ/û³üfúÓ§îýâ£÷·Žéëî„_Wmçï'NžÌÞ{"øżg‹C‡)¸÷ü¡‰
+•&JkJkK[Kî̶¤t¸2¶ìëûÜŸüÚW,Œþ]ëÚ=î8òÃne7ÊW‡ƒBÐ3\(b¸“e6ŠŽˆÄÞ½¥BàçE¿èÙÞe>ûÔpFCÏÏé’˜NæØ–š¡væxy>W.Îέ̭
+N,^˜swuq{îšàæÜíÁïÎí
+î-~<7âòÔB®×e²Ç‹•ùãƒ'öLômkûn·¸»ú}…;{î÷ö<,>|©çÏ{~Üó[q@ü6 ?ﲫZ7ùpë&oÉéãûs+þþð£¹w8üíý…ÑCÓþs‡_>üHnÙ៺ã}íüûeïÞ\ëh\.’åýC¤[ƒNRÛ'͝°Âèÿz‘sճЍ§c½K'Ž+Œ”Žô
+{Æúv/\"öÍbîP7<X,Ö×,8¦8Ï.kkË!§.íÇ©§>ÿr;ñq§lbÖøò5Ë·.¿kùƒîõg˶üÕå%7nÚ÷㘻ZíûówÞTÆڿ̯2_»ùsOî߶óÎOîßvÍû>¹ÿé]÷®ÏŠÛo¸ú7¿8ü¶Üýýð“ޝ»ÿcú³ޝ_ûèënð¼ÎõÞàŽa–ËQ犒'üÂîá}}O”]*åÛâ2Û–Ä—_lO^~êÅvw¿¸vìc­õ_êІ}7Ü°ç‘ýûºóëßÊ=ÔêÂ÷·ºà §6ü÷âN‡ÛÊÎryÁþoß¾V^02øf12fŽißzGò‚‰e§Ï½Þ»¾°«gWqWiWyWïõ}»úw
+ìÜ5´køú‘ç˜;ÜÅnŽÍV¶“ˆŒ1rÛïyä³{î~ä‘»ø#éKþ{úþ°øÙO?ý¯¾óí¿ûpúôÅô×îÆ«¹ûkÔ×m¾x<½0ÿë㐛iž61Þ~o`tPÜ7p‡ÿUñÄÂá‘Þ7ÎÉ{Åœ]Ø:?*ëíó­34ô”ëqií¢›=¸èoåýËV99®79G¹~vÎÚ}õ·ïßÊç¯ÿž÷ê«ß»þó9ý©|àS­ŸO~´P~xÃdúDúOîõĤÿ÷ϼðÂ3îçȵg¹þ
+{㣗÷ŠÝûJOô”NŽ­KâŸÊîÇaÏ~¯EZ_\3ëY­«–ñêk—lŽ8kñ™'}øS®'ß2kõñÅ‘ágž<üwÁ6®‚6ÞŒãõo;¼•Þ§ö÷åzÏ[¼¨XÊõ”Ï[¼xQ£Ü»hq~ÌñýíùÑ[Çn?¦Å÷+ß¿¨Ü»x~÷–ùŁžâè±æøV¿ž}ñyסöü"€ß´`¤Ã­ÙwÏ@6ÿ‚·²EW.(/è]зڑëI½'õ½¾ôúòë{_ß×»Ä[â/Ï_>¾÷„Y'ž<vÂìã¿xÕ’UK—¯¼µ|kï­}·ö´Ž —+”½¢Oô‹1(†Ä\1OÌòK+O^uúªËWíZuÓª»V=¸êÀªc\ªpÕkú³ØoÍîÊ­Û<îØÉî,¶¤Ó©Ñ{Ïýô¥·ß¾îžÓŸúÄoÿêÒonÞø­É›ï˜úìÄgÿøoÿóÆ/æOôøãÏ?âÌ¥'|ðöiÙ²'Ãð’7Ÿ½fÅàò=7ßÿÈ¢ìzÆnÐýcp¿»õÄ܁ 8(>ãæ÷Ow—{ÝYv#mhd u/žú”ûO13kó‡Kê¿ð¹±lB;¶txtöëý±–®;wDx}zËÙÛ¿úÕ}l÷îàþôw~ðösï{à/skïôOóÚcýQw?^œ_ë°G½×O,x	î(ûOŒîës<0Ú{®c;Öº1kÙ¸z^¡ƒ™±¯µè`–›d7 {Czá?Ú¢ƒ?Ù·¯ùù_ÿŽÿÿñÜ'O>ðÀ“å®åÁG6®? >Ý:þ7¸ûm—ëàÿÞ‰fO1WöËýeÏôû‡ûú½Vèw	sß°K—ý½¥!¯7Ø-¾:ÐûÄÐ@_¹ä²äâ`~°w¨Uu*ŸöcÅv¹§·5±lÕ~ZïÛ¥Ÿ§Ú9þ;ˆÉÇþµä9øõÕ*(xA±Pý³Ësú‡ú—õ‡ýg–ÿ |nÿ¥¥KËï(ïî¿©ÿîþ—O—
+½A_ï@ïà,7”
+æ”G{Gûæ
+Ì\é-w£uI~I°ÊÍ
+W”—÷.ï[ÙÂÀ	ƒK†c/ôÃÜx~<Ðå¨7êÓýµÚàøpÝ›ð'rb"?L&z&Š’)¿±ÿ́3'†Ï÷Þì¿9wX“_\X¸ çÂâE¥‹Êô^ÐwÉÀ%ƒk†7ús›ÊÓÓƒk‡¯/^;píàíÞ{J·ôÞÒw{ÿí·~°´§wOß}÷
+>ÔûPßg>;øØð†6üêð”»	‚ÿD?tWôt¿7çî>÷žîÞ|Îù•¥éë¿é¿Ýû77}ç]÷qëùùsÝ#6{í?Çþo¾.õþêßzùúús§y½×Oĸ¸Z|©û•¿çŸ¿‚Üëj÷úÛìU(º×M…û{¼žS{þ¨çozþ¦8»ø­R¾d³Wù¤£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯£¯ýåeóÖoÇÖ
+„Ö_žç~
+Þ¿ûGüþ£c¿»½|Åq+[±…2.U%ûô”#¿O<ëáâ9Þ¹°æÍo9Ï»à‹.vÛoû÷±ÿ_ù“÷žmÿ?ß:?®{õU÷ÿ%­ÿ»í¼÷/œ€ögÔû7¿Ü[áç­<²}qÜ“žò*¿ÓöïŸÿI܏u?g°}Žû9×ûo÷fï-ÞynëïBï"ïb~ÿ¶vß=ÿ./øwûÞùSüÝÍށWçƒlìxùï{;?¹÷ºAõÿð'˜ãýÜýìý¿ýs7Üè=ìõ¶VyOÿþOîm¿ûSxÁµ=äâ9Þöü½§ÿµŸž¿ó’ÿŸüÞõퟍÞUíŸ÷'Wó¾ÞúÉÌ{¼{žñF¼Çó¿ô®
+FÝ{÷#ÎrÛ'z3b™»ß=Úý“Â{CûÜçNùùçûÜã—žúoqv±¾ùô‡¿Ô‰¿ýñáãú·•.è¾’ÿ9B3
 endstream
 endobj
-6178 0 obj
-2599
-endobj
 6170 0 obj <<
 /D [6168 0 R /XYZ 151.701 685.529 null]
 >> endobj
@@ -20447,17 +20755,17 @@
 /D [6168 0 R /XYZ 151.701 643.753 null]
 >> endobj
 274 0 obj <<
-/D [6168 0 R /XYZ 151.701 206.116 null]
+/D [6168 0 R /XYZ 151.701 205.973 null]
 >> endobj
 6171 0 obj <<
-/D [6168 0 R /XYZ 151.701 176.706 null]
+/D [6168 0 R /XYZ 151.701 176.61 null]
 >> endobj
 6167 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F51 3736 0 R /F59 4373 0 R /F17 3698 0 R >>
 /XObject << /Im2 6161 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6181 0 obj <<
+6180 0 obj <<
 /Length 2064      
 /Filter /FlateDecode
 >>
@@ -20476,21 +20784,21 @@
 ˆ««xm3G ùŽ)'so6ƒ¬9 ÂÙ>c¥ì™63£¯ï˜ô	ÐksÌurýÅ`¸ªóKÁçðÇF[š<WšXñ¹Ìóþ¿J±…c¡ÿ¢þ‡¦ÿ¾Û­þA>²ô
 endstream
 endobj
-6180 0 obj <<
+6179 0 obj <<
 /Type /Page
-/Contents 6181 0 R
-/Resources 6179 0 R
+/Contents 6180 0 R
+/Resources 6178 0 R
 /MediaBox [0 0 612 792]
 /Parent 6159 0 R
 >> endobj
-6182 0 obj <<
-/D [6180 0 R /XYZ 100.892 685.529 null]
+6181 0 obj <<
+/D [6179 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6179 0 obj <<
+6178 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6186 0 obj <<
+6185 0 obj <<
 /Length 1866      
 /Filter /FlateDecode
 >>
@@ -20508,37 +20816,37 @@
 Â%µjÀ{‚™–ÏÉìO­3ÐÅù€¸Œ/µ#cáÿç¹>Ã `ŽLY¡)ö-Õ¼1úüÍƬÌéׄ„~·ïà,"ß%S'Gϲ(ëkTsg0™g\…R!Õñ¸£ox)ÂÌ`l‚—ÑäDl3©r“p¼à% °¶ˆ÷¬n“ÀVÍ_SE1©<õ²áßôÉ”þ]
 endstream
 endobj
-6185 0 obj <<
+6184 0 obj <<
 /Type /Page
-/Contents 6186 0 R
-/Resources 6184 0 R
+/Contents 6185 0 R
+/Resources 6183 0 R
 /MediaBox [0 0 612 792]
 /Parent 6159 0 R
-/Annots [ 6183 0 R 6188 0 R ]
+/Annots [ 6182 0 R 6187 0 R ]
 >> endobj
-6183 0 obj <<
+6182 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [313.104 468.141 453.918 481.043]
 /Subtype /Link
 /A << /S /GoTo /D (domain-member) >>
 >> endobj
-6188 0 obj <<
+6187 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.34 455.198 220.848 466.887]
 /Subtype /Link
 /A << /S /GoTo /D (domain-member) >>
 >> endobj
-6187 0 obj <<
-/D [6185 0 R /XYZ 151.701 685.529 null]
+6186 0 obj <<
+/D [6184 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6184 0 obj <<
+6183 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F88 5678 0 R /F72 5679 0 R /F51 3736 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6192 0 obj <<
+6191 0 obj <<
 /Length 2048      
 /Filter /FlateDecode
 >>
@@ -20563,21 +20871,21 @@
 ‰Du_CÚ½9(±á|9òÝÜõcÆrMšÖ û½Ü,þfAŸÞ
 endstream
 endobj
-6191 0 obj <<
+6190 0 obj <<
 /Type /Page
-/Contents 6192 0 R
-/Resources 6190 0 R
+/Contents 6191 0 R
+/Resources 6189 0 R
 /MediaBox [0 0 612 792]
 /Parent 6159 0 R
 >> endobj
-6193 0 obj <<
-/D [6191 0 R /XYZ 100.892 685.529 null]
+6192 0 obj <<
+/D [6190 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6190 0 obj <<
+6189 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F51 3736 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6198 0 obj <<
+6197 0 obj <<
 /Length 2280      
 /Filter /FlateDecode
 >>
@@ -20597,56 +20905,56 @@
 jÿS1†@âiï¡ø"M¾To \'¹_äpµÆ5௦գèY8$í#	Nª•Á€Å¦Uº'¼>¼š²ät­½²a¸†j"õ)¸@ì±£Æ&i­€’âÛ°›ø¥²ÁÐ6o[¼ÙƒœçZøïûÕÿ ìÇ.h
 endstream
 endobj
-6197 0 obj <<
+6196 0 obj <<
 /Type /Page
-/Contents 6198 0 R
-/Resources 6196 0 R
+/Contents 6197 0 R
+/Resources 6195 0 R
 /MediaBox [0 0 612 792]
-/Parent 6202 0 R
-/Annots [ 6189 0 R 6200 0 R 6194 0 R 6195 0 R ]
+/Parent 6201 0 R
+/Annots [ 6188 0 R 6199 0 R 6193 0 R 6194 0 R ]
 >> endobj
-6189 0 obj <<
+6188 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [274.504 619.448 511.352 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (groupmapping) >>
 >> endobj
-6200 0 obj <<
+6199 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 608.02 186.637 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (groupmapping) >>
 >> endobj
-6194 0 obj <<
+6193 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [332.002 559.377 386.167 568.946]
 /Subtype /Link
 /A << /S /GoTo /D (machine-trust-accounts) >>
 >> endobj
-6195 0 obj <<
+6194 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [275.311 530.158 499.758 541.847]
 /Subtype /Link
 /A << /S /GoTo /D (passdb) >>
 >> endobj
-6199 0 obj <<
-/D [6197 0 R /XYZ 151.701 685.529 null]
+6198 0 obj <<
+/D [6196 0 R /XYZ 151.701 685.529 null]
 >> endobj
 278 0 obj <<
-/D [6197 0 R /XYZ 151.701 511.838 null]
+/D [6196 0 R /XYZ 151.701 511.838 null]
 >> endobj
-6201 0 obj <<
-/D [6197 0 R /XYZ 151.701 481.442 null]
+6200 0 obj <<
+/D [6196 0 R /XYZ 151.701 481.442 null]
 >> endobj
-6196 0 obj <<
+6195 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6206 0 obj <<
+6205 0 obj <<
 /Length 2296      
 /Filter /FlateDecode
 >>
@@ -20673,21 +20981,21 @@
 Ì^Y0'HݬÛ_TŸ›¨C.rÈbü{áä1­jfäÓ{<‹³å‚ÜW5ÏûÈ1–[ÅÒ'ù“@ÖÃ#Ö"Á_`#¼•âàoïòþvûojßþt¾ù^6…p
 endstream
 endobj
-6205 0 obj <<
+6204 0 obj <<
 /Type /Page
-/Contents 6206 0 R
-/Resources 6204 0 R
+/Contents 6205 0 R
+/Resources 6203 0 R
 /MediaBox [0 0 612 792]
-/Parent 6202 0 R
+/Parent 6201 0 R
 >> endobj
-6207 0 obj <<
-/D [6205 0 R /XYZ 100.892 685.529 null]
+6206 0 obj <<
+/D [6204 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6204 0 obj <<
+6203 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6210 0 obj <<
+6209 0 obj <<
 /Length 2559      
 /Filter /FlateDecode
 >>
@@ -20719,21 +21027,21 @@
 Jº {LØ=HC·ÀúåkÓÜÞùrlƒütÓï”åÎvd4@µ¾ó”møjMGœd¸]~,DzDPxÃŒ;à»CRDyb¦ùÆñ—b&‹M?L溵é´—åH½Ö(â^?ãàè5ü¸+ ÕÉãÂ3õ[V2jž.ªÜÆÕYl‘û~B×|ƒâGžMÍ?"‰_€a`ÕÙ4<¤çU)	³ª/ü6°ÒÇ­Á=*øV`O(ˆSð9^Žë¡!Ë"	ÇÌ÷!ùk%\'醏-övÌã‡8éY¯~.o†Þñy at 2ÂY±sqÛNÓ\^˜ùîiG~1ÌãÊw)³¯²&úaºî$¢s³…\®R)]é¢Pú„̥ܤÓsÎôÿhùµùŽ
 endstream
 endobj
-6209 0 obj <<
+6208 0 obj <<
 /Type /Page
-/Contents 6210 0 R
-/Resources 6208 0 R
+/Contents 6209 0 R
+/Resources 6207 0 R
 /MediaBox [0 0 612 792]
-/Parent 6202 0 R
+/Parent 6201 0 R
 >> endobj
-6211 0 obj <<
-/D [6209 0 R /XYZ 151.701 685.529 null]
+6210 0 obj <<
+/D [6208 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6208 0 obj <<
+6207 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6214 0 obj <<
+6213 0 obj <<
 /Length 1956      
 /Filter /FlateDecode
 >>
@@ -20755,33 +21063,33 @@
 Lÿi[Fv¬|ænÙ“à>Nq´)Þœ¶v¡4o[Ýúã~õ_<Ö@
 endstream
 endobj
-6213 0 obj <<
+6212 0 obj <<
 /Type /Page
-/Contents 6214 0 R
-/Resources 6212 0 R
+/Contents 6213 0 R
+/Resources 6211 0 R
 /MediaBox [0 0 612 792]
-/Parent 6202 0 R
+/Parent 6201 0 R
 >> endobj
-6215 0 obj <<
-/D [6213 0 R /XYZ 100.892 685.529 null]
+6214 0 obj <<
+/D [6212 0 R /XYZ 100.892 685.529 null]
 >> endobj
 282 0 obj <<
-/D [6213 0 R /XYZ 100.892 539.975 null]
+/D [6212 0 R /XYZ 100.892 539.975 null]
 >> endobj
-6216 0 obj <<
-/D [6213 0 R /XYZ 100.892 513.193 null]
+6215 0 obj <<
+/D [6212 0 R /XYZ 100.892 513.193 null]
 >> endobj
 286 0 obj <<
-/D [6213 0 R /XYZ 100.892 448.28 null]
+/D [6212 0 R /XYZ 100.892 448.28 null]
 >> endobj
-6217 0 obj <<
-/D [6213 0 R /XYZ 100.892 421.386 null]
+6216 0 obj <<
+/D [6212 0 R /XYZ 100.892 421.386 null]
 >> endobj
-6212 0 obj <<
+6211 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F51 3736 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6221 0 obj <<
+6220 0 obj <<
 /Length 2347      
 /Filter /FlateDecode
 >>
@@ -20805,29 +21113,29 @@
 s<„3wo@ÝŒ ~àÃ`¥»'âÀƒÙêàç{{ðC…_j8ßa$Þîÿc£³]@£÷¶Ý Y¸ÛÍã{ˆ‰¿0(’Té©i2áM“»ÚLøW†LpG—eS£d>ñžoÙåöŠDØÿOÞ<~¹™y àr¥+*Gÿ–Ž‰K=ÒùDèy¹¥ÖS´g›¼7a½óE:![ˆìÅj:™?ÌÏqñÁ]H„ù·^Ü…’‰ÊÏîôÐ.ÓH'U¾C¹B%B–‘Èt’j5{ÌÓÉßÀ®´–I™g³–o$ÔLµ>]Nþ8€!øŽŒøg!Õ[ÿ<\Q_Äw^ØB#boý#èðÂcL¤‹æ&z	Ádÿ¸½vþ
 endstream
 endobj
-6220 0 obj <<
+6219 0 obj <<
 /Type /Page
-/Contents 6221 0 R
-/Resources 6219 0 R
+/Contents 6220 0 R
+/Resources 6218 0 R
 /MediaBox [0 0 612 792]
-/Parent 6202 0 R
-/Annots [ 6218 0 R ]
+/Parent 6201 0 R
+/Annots [ 6217 0 R ]
 >> endobj
-6218 0 obj <<
+6217 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [202.164 116.961 392.068 129.913]
 /Subtype /Link
 /A << /S /GoTo /D (passdb) >>
 >> endobj
-6222 0 obj <<
-/D [6220 0 R /XYZ 151.701 685.529 null]
+6221 0 obj <<
+/D [6219 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6219 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F29 5413 0 R /F59 4373 0 R /F51 3736 0 R /F30 5441 0 R /F60 6223 0 R >>
+6218 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F29 5413 0 R /F59 4373 0 R /F51 3736 0 R /F30 5441 0 R /F60 6222 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6227 0 obj <<
+6226 0 obj <<
 /Length 2120      
 /Filter /FlateDecode
 >>
@@ -20850,29 +21158,29 @@
 våçÝåkeùóî}'g6V®j¦ºšqˆ+íù°~:/‹ÿÌf$
 endstream
 endobj
-6226 0 obj <<
+6225 0 obj <<
 /Type /Page
-/Contents 6227 0 R
-/Resources 6225 0 R
+/Contents 6226 0 R
+/Resources 6224 0 R
 /MediaBox [0 0 612 792]
-/Parent 6202 0 R
-/Annots [ 6224 0 R ]
+/Parent 6201 0 R
+/Annots [ 6223 0 R ]
 >> endobj
-6224 0 obj <<
+6223 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [168.286 450.859 311.497 463.811]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://utools.com/UPromote.asp)>>
 >> endobj
-6228 0 obj <<
-/D [6226 0 R /XYZ 100.892 685.529 null]
+6227 0 obj <<
+/D [6225 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6225 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F51 3736 0 R /F59 4373 0 R /F15 3700 0 R /F88 5678 0 R /F72 5679 0 R /F90 6229 0 R /F91 6230 0 R /F61 5442 0 R /F71 5443 0 R /F53 3738 0 R >>
+6224 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F51 3736 0 R /F59 4373 0 R /F15 3700 0 R /F88 5678 0 R /F72 5679 0 R /F90 6228 0 R /F91 6229 0 R /F61 5442 0 R /F71 5443 0 R /F53 3738 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6234 0 obj <<
+6233 0 obj <<
 /Length 1884      
 /Filter /FlateDecode
 >>
@@ -20895,27 +21203,27 @@
 *øŒ¤ÙKÝ!LÃq§•§šë¾Æà™Þ¨kfy#«>ŸŠÔ ZVН­åQ‰™K¬Âÿ&€yp@ ïó ÄÎz*p¦52Æü>ˆr³Û1Õ ™¿'IÇZ,›Î\?ñeŽöŠÜa 6ò*ÌÏ–wŒ¢yCC%µy¤-OÒ\Z¸\†'5Žƒ[¦Ü¾a×Ì}2<¨ÊY%àzö`‰Ÿ—¾áœ9 ;¶ËoÞé÷³‡Í]k·
 endstream
 endobj
-6233 0 obj <<
+6232 0 obj <<
 /Type /Page
-/Contents 6234 0 R
-/Resources 6232 0 R
+/Contents 6233 0 R
+/Resources 6231 0 R
 /MediaBox [0 0 612 792]
-/Parent 6237 0 R
+/Parent 6236 0 R
 >> endobj
-6235 0 obj <<
-/D [6233 0 R /XYZ 151.701 685.529 null]
+6234 0 obj <<
+/D [6232 0 R /XYZ 151.701 685.529 null]
 >> endobj
 290 0 obj <<
-/D [6233 0 R /XYZ 151.701 481.355 null]
+/D [6232 0 R /XYZ 151.701 481.355 null]
 >> endobj
-6236 0 obj <<
-/D [6233 0 R /XYZ 151.701 450.264 null]
+6235 0 obj <<
+/D [6232 0 R /XYZ 151.701 450.264 null]
 >> endobj
-6232 0 obj <<
+6231 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F51 3736 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6242 0 obj <<
+6241 0 obj <<
 /Length 1641      
 /Filter /FlateDecode
 >>
@@ -20938,58 +21246,58 @@
 Þ-o)T¹#±§î;<Á¾!(È
 endstream
 endobj
-6241 0 obj <<
+6240 0 obj <<
 /Type /Page
-/Contents 6242 0 R
-/Resources 6240 0 R
+/Contents 6241 0 R
+/Resources 6239 0 R
 /MediaBox [0 0 612 792]
-/Parent 6237 0 R
-/Annots [ 6231 0 R 6244 0 R 6238 0 R 6239 0 R 6245 0 R ]
+/Parent 6236 0 R
+/Annots [ 6230 0 R 6243 0 R 6237 0 R 6238 0 R 6244 0 R ]
 >> endobj
-6231 0 obj <<
+6230 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [305.564 543.874 403.108 556.775]
 /Subtype /Link
 /A << /S /GoTo /D (domain-member) >>
 >> endobj
-6244 0 obj <<
+6243 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [144.531 530.93 207.614 542.62]
 /Subtype /Link
 /A << /S /GoTo /D (domain-member) >>
 >> endobj
-6238 0 obj <<
+6237 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [133.967 129.464 273.383 140.871]
 /Subtype /Link
 /A << /S /GoTo /D (NetworkBrowsing) >>
 >> endobj
-6239 0 obj <<
+6238 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [297.402 129.464 460.543 140.871]
 /Subtype /Link
 /A << /S /GoTo /D (integrate-ms-networks) >>
 >> endobj
-6245 0 obj <<
+6244 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 116.961 194.884 128.468]
 /Subtype /Link
 /A << /S /GoTo /D (integrate-ms-networks) >>
 >> endobj
-6243 0 obj <<
-/D [6241 0 R /XYZ 100.892 685.529 null]
+6242 0 obj <<
+/D [6240 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6240 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F88 5678 0 R /F72 5679 0 R /F15 3700 0 R /F51 3736 0 R /F59 4373 0 R /F29 5413 0 R /F30 5441 0 R /F60 6223 0 R >>
+6239 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F88 5678 0 R /F72 5679 0 R /F15 3700 0 R /F51 3736 0 R /F59 4373 0 R /F29 5413 0 R /F30 5441 0 R /F60 6222 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6251 0 obj <<
+6250 0 obj <<
 /Length 1746      
 /Filter /FlateDecode
 >>
@@ -21014,44 +21322,44 @@
 š`—Gª­¬@ÙMÑ/ä(îmÏïGá	.æŒõæсCYðÛ¶Pwý	oÝ 
 endstream
 endobj
-6250 0 obj <<
+6249 0 obj <<
 /Type /Page
-/Contents 6251 0 R
-/Resources 6249 0 R
+/Contents 6250 0 R
+/Resources 6248 0 R
 /MediaBox [0 0 612 792]
-/Parent 6237 0 R
-/Annots [ 6246 0 R 6247 0 R 6253 0 R ]
+/Parent 6236 0 R
+/Annots [ 6245 0 R 6246 0 R 6252 0 R ]
 >> endobj
-6246 0 obj <<
+6245 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.34 410.922 401.571 422.612]
 /Subtype /Link
 /A << /S /GoTo /D (ProfileMgmt) >>
 >> endobj
-6247 0 obj <<
+6246 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.804 410.922 453.918 422.612]
 /Subtype /Link
 /A << /S /GoTo /D (PolicyMgmt) >>
 >> endobj
-6253 0 obj <<
+6252 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.34 397.373 371.287 409.063]
 /Subtype /Link
 /A << /S /GoTo /D (PolicyMgmt) >>
 >> endobj
-6252 0 obj <<
-/D [6250 0 R /XYZ 151.701 685.529 null]
+6251 0 obj <<
+/D [6249 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6249 0 obj <<
+6248 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F51 3736 0 R /F15 3700 0 R /F88 5678 0 R /F72 5679 0 R /F59 4373 0 R /F53 3738 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6259 0 obj <<
+6258 0 obj <<
 /Length 2248      
 /Filter /FlateDecode
 >>
@@ -21074,63 +21382,63 @@
 Ú²ïèáòzùo°Ó
 endstream
 endobj
-6258 0 obj <<
+6257 0 obj <<
 /Type /Page
-/Contents 6259 0 R
-/Resources 6257 0 R
+/Contents 6258 0 R
+/Resources 6256 0 R
 /MediaBox [0 0 612 792]
-/Parent 6237 0 R
-/Annots [ 6254 0 R 6255 0 R 6256 0 R 6262 0 R 6248 0 R ]
+/Parent 6236 0 R
+/Annots [ 6253 0 R 6254 0 R 6255 0 R 6261 0 R 6247 0 R ]
 >> endobj
-6254 0 obj <<
+6253 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [178.077 451.986 247.797 463.676]
 /Subtype /Link
 /A << /S /GoTo /D (pdc-example) >>
 >> endobj
-6255 0 obj <<
+6254 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [233.714 430.038 303.434 441.728]
 /Subtype /Link
 /A << /S /GoTo /D (pdc-example) >>
 >> endobj
-6256 0 obj <<
+6255 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.815 166.108 460.543 177.797]
 /Subtype /Link
 /A << /S /GoTo /D (passdb) >>
 >> endobj
-6262 0 obj <<
+6261 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [127.168 154.68 291.585 164.248]
 /Subtype /Link
 /A << /S /GoTo /D (passdb) >>
 >> endobj
-6248 0 obj <<
+6247 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [132.873 116.961 268.735 129.913]
 /Subtype /Link
 /A << /S /GoTo /D (NetworkBrowsing) >>
 >> endobj
-6260 0 obj <<
-/D [6258 0 R /XYZ 100.892 685.529 null]
+6259 0 obj <<
+/D [6257 0 R /XYZ 100.892 685.529 null]
 >> endobj
 294 0 obj <<
-/D [6258 0 R /XYZ 100.892 534.552 null]
+/D [6257 0 R /XYZ 100.892 534.552 null]
 >> endobj
-6261 0 obj <<
-/D [6258 0 R /XYZ 100.892 501.631 null]
+6260 0 obj <<
+/D [6257 0 R /XYZ 100.892 501.631 null]
 >> endobj
-6257 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F29 5413 0 R /F17 3698 0 R /F53 3738 0 R /F59 4373 0 R /F30 5441 0 R /F60 6223 0 R >>
+6256 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F29 5413 0 R /F17 3698 0 R /F53 3738 0 R /F59 4373 0 R /F30 5441 0 R /F60 6222 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6266 0 obj <<
+6265 0 obj <<
 /Length 3167      
 /Filter /FlateDecode
 >>
@@ -21162,99 +21470,99 @@
 Î9§¥($öþ%þø/C?üøó¯ï†êqp¢;ˆÛð>´;Ÿ4I_öŧ°îÙgÞûχrÇÉА5_P³lš¼Ë—øŠg§&0%ùéÎ
 endstream
 endobj
-6265 0 obj <<
+6264 0 obj <<
 /Type /Page
-/Contents 6266 0 R
-/Resources 6264 0 R
+/Contents 6265 0 R
+/Resources 6263 0 R
 /MediaBox [0 0 612 792]
-/Parent 6237 0 R
+/Parent 6236 0 R
 >> endobj
-6267 0 obj <<
-/D [6265 0 R /XYZ 151.701 685.529 null]
+6266 0 obj <<
+/D [6264 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5023 0 obj <<
-/D [6265 0 R /XYZ 151.701 660.623 null]
+/D [6264 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6263 0 obj <<
-/D [6265 0 R /XYZ 151.701 643.753 null]
+6262 0 obj <<
+/D [6264 0 R /XYZ 151.701 643.753 null]
 >> endobj
+6267 0 obj <<
+/D [6264 0 R /XYZ 151.701 637.775 null]
+>> endobj
 6268 0 obj <<
-/D [6265 0 R /XYZ 151.701 637.775 null]
+/D [6264 0 R /XYZ 151.701 644.051 null]
 >> endobj
 6269 0 obj <<
-/D [6265 0 R /XYZ 151.701 644.051 null]
+/D [6264 0 R /XYZ 151.701 632.096 null]
 >> endobj
 6270 0 obj <<
-/D [6265 0 R /XYZ 151.701 632.096 null]
+/D [6264 0 R /XYZ 151.701 620.141 null]
 >> endobj
 6271 0 obj <<
-/D [6265 0 R /XYZ 151.701 620.141 null]
+/D [6264 0 R /XYZ 151.701 608.186 null]
 >> endobj
 6272 0 obj <<
-/D [6265 0 R /XYZ 151.701 608.186 null]
+/D [6264 0 R /XYZ 151.701 596.231 null]
 >> endobj
 6273 0 obj <<
-/D [6265 0 R /XYZ 151.701 596.231 null]
+/D [6264 0 R /XYZ 151.701 584.276 null]
 >> endobj
 6274 0 obj <<
-/D [6265 0 R /XYZ 151.701 584.276 null]
+/D [6264 0 R /XYZ 151.701 572.32 null]
 >> endobj
 6275 0 obj <<
-/D [6265 0 R /XYZ 151.701 572.32 null]
+/D [6264 0 R /XYZ 151.701 560.365 null]
 >> endobj
 6276 0 obj <<
-/D [6265 0 R /XYZ 151.701 560.365 null]
+/D [6264 0 R /XYZ 151.701 548.41 null]
 >> endobj
 6277 0 obj <<
-/D [6265 0 R /XYZ 151.701 548.41 null]
+/D [6264 0 R /XYZ 151.701 536.455 null]
 >> endobj
 6278 0 obj <<
-/D [6265 0 R /XYZ 151.701 536.455 null]
+/D [6264 0 R /XYZ 151.701 524.5 null]
 >> endobj
 6279 0 obj <<
-/D [6265 0 R /XYZ 151.701 524.5 null]
+/D [6264 0 R /XYZ 151.701 512.545 null]
 >> endobj
 6280 0 obj <<
-/D [6265 0 R /XYZ 151.701 512.545 null]
+/D [6264 0 R /XYZ 151.701 500.589 null]
 >> endobj
 6281 0 obj <<
-/D [6265 0 R /XYZ 151.701 500.589 null]
+/D [6264 0 R /XYZ 151.701 488.634 null]
 >> endobj
 6282 0 obj <<
-/D [6265 0 R /XYZ 151.701 488.634 null]
+/D [6264 0 R /XYZ 151.701 476.679 null]
 >> endobj
 6283 0 obj <<
-/D [6265 0 R /XYZ 151.701 476.679 null]
+/D [6264 0 R /XYZ 151.701 464.724 null]
 >> endobj
 6284 0 obj <<
-/D [6265 0 R /XYZ 151.701 464.724 null]
+/D [6264 0 R /XYZ 151.701 452.769 null]
 >> endobj
 6285 0 obj <<
-/D [6265 0 R /XYZ 151.701 452.769 null]
+/D [6264 0 R /XYZ 151.701 440.814 null]
 >> endobj
 6286 0 obj <<
-/D [6265 0 R /XYZ 151.701 440.814 null]
+/D [6264 0 R /XYZ 151.701 428.858 null]
 >> endobj
 6287 0 obj <<
-/D [6265 0 R /XYZ 151.701 428.858 null]
+/D [6264 0 R /XYZ 151.701 416.903 null]
 >> endobj
 6288 0 obj <<
-/D [6265 0 R /XYZ 151.701 416.903 null]
+/D [6264 0 R /XYZ 151.701 404.948 null]
 >> endobj
 6289 0 obj <<
-/D [6265 0 R /XYZ 151.701 404.948 null]
+/D [6264 0 R /XYZ 151.701 392.993 null]
 >> endobj
 6290 0 obj <<
-/D [6265 0 R /XYZ 151.701 392.993 null]
+/D [6264 0 R /XYZ 151.701 381.038 null]
 >> endobj
-6291 0 obj <<
-/D [6265 0 R /XYZ 151.701 381.038 null]
->> endobj
-6264 0 obj <<
+6263 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F4 5484 0 R /F51 3736 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6294 0 obj <<
+6293 0 obj <<
 /Length 2392      
 /Filter /FlateDecode
 >>
@@ -21286,46 +21594,46 @@
 ¼#„Ûµ+öñDœ×¾¼ez`~;ÀÀYg’-V«[ú,.ò­c*+G©8uìÓ>Dþ³»¤ò
 endstream
 endobj
-6293 0 obj <<
+6292 0 obj <<
 /Type /Page
-/Contents 6294 0 R
-/Resources 6292 0 R
+/Contents 6293 0 R
+/Resources 6291 0 R
 /MediaBox [0 0 612 792]
-/Parent 6237 0 R
+/Parent 6236 0 R
 >> endobj
+6294 0 obj <<
+/D [6292 0 R /XYZ 100.892 685.529 null]
+>> endobj
 6295 0 obj <<
-/D [6293 0 R /XYZ 100.892 685.529 null]
+/D [6292 0 R /XYZ 145.527 472.299 null]
 >> endobj
 6296 0 obj <<
-/D [6293 0 R /XYZ 145.527 472.299 null]
+/D [6292 0 R /XYZ 145.527 472.876 null]
 >> endobj
 6297 0 obj <<
-/D [6293 0 R /XYZ 145.527 472.876 null]
+/D [6292 0 R /XYZ 145.527 460.921 null]
 >> endobj
 6298 0 obj <<
-/D [6293 0 R /XYZ 145.527 460.921 null]
+/D [6292 0 R /XYZ 145.527 448.965 null]
 >> endobj
 6299 0 obj <<
-/D [6293 0 R /XYZ 145.527 448.965 null]
+/D [6292 0 R /XYZ 145.527 437.01 null]
 >> endobj
 6300 0 obj <<
-/D [6293 0 R /XYZ 145.527 437.01 null]
+/D [6292 0 R /XYZ 145.527 425.055 null]
 >> endobj
-6301 0 obj <<
-/D [6293 0 R /XYZ 145.527 425.055 null]
->> endobj
 298 0 obj <<
-/D [6293 0 R /XYZ 100.892 312.197 null]
+/D [6292 0 R /XYZ 100.892 312.197 null]
 >> endobj
-6302 0 obj <<
-/D [6293 0 R /XYZ 100.892 285.93 null]
+6301 0 obj <<
+/D [6292 0 R /XYZ 100.892 285.93 null]
 >> endobj
-6292 0 obj <<
+6291 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F88 5678 0 R /F72 5679 0 R /F53 3738 0 R /F4 5484 0 R /F17 3698 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6305 0 obj <<
+6304 0 obj <<
 /Length 2412      
 /Filter /FlateDecode
 >>
@@ -21358,78 +21666,78 @@
 ¶¦ ˜‚^ým?Oaf÷íÑöøÏu5-š†HˆÁ;ðÿÐ_¢Ò
 endstream
 endobj
-6304 0 obj <<
+6303 0 obj <<
 /Type /Page
-/Contents 6305 0 R
-/Resources 6303 0 R
+/Contents 6304 0 R
+/Resources 6302 0 R
 /MediaBox [0 0 612 792]
-/Parent 6321 0 R
+/Parent 6320 0 R
 >> endobj
-6306 0 obj <<
-/D [6304 0 R /XYZ 151.701 685.529 null]
+6305 0 obj <<
+/D [6303 0 R /XYZ 151.701 685.529 null]
 >> endobj
 302 0 obj <<
-/D [6304 0 R /XYZ 151.701 575.416 null]
+/D [6303 0 R /XYZ 151.701 575.416 null]
 >> endobj
-6307 0 obj <<
-/D [6304 0 R /XYZ 151.701 545.608 null]
+6306 0 obj <<
+/D [6303 0 R /XYZ 151.701 545.608 null]
 >> endobj
 306 0 obj <<
-/D [6304 0 R /XYZ 151.701 485.665 null]
+/D [6303 0 R /XYZ 151.701 485.665 null]
 >> endobj
-6308 0 obj <<
-/D [6304 0 R /XYZ 151.701 456.748 null]
+6307 0 obj <<
+/D [6303 0 R /XYZ 151.701 456.748 null]
 >> endobj
 310 0 obj <<
-/D [6304 0 R /XYZ 151.701 393.883 null]
+/D [6303 0 R /XYZ 151.701 393.883 null]
 >> endobj
-6309 0 obj <<
-/D [6304 0 R /XYZ 151.701 367.887 null]
+6308 0 obj <<
+/D [6303 0 R /XYZ 151.701 367.887 null]
 >> endobj
 5024 0 obj <<
-/D [6304 0 R /XYZ 151.701 355.3 null]
+/D [6303 0 R /XYZ 151.701 355.3 null]
 >> endobj
+6309 0 obj <<
+/D [6303 0 R /XYZ 151.701 338.43 null]
+>> endobj
 6310 0 obj <<
-/D [6304 0 R /XYZ 151.701 338.43 null]
+/D [6303 0 R /XYZ 151.701 332.452 null]
 >> endobj
 6311 0 obj <<
-/D [6304 0 R /XYZ 151.701 332.452 null]
+/D [6303 0 R /XYZ 151.701 338.729 null]
 >> endobj
 6312 0 obj <<
-/D [6304 0 R /XYZ 151.701 338.729 null]
+/D [6303 0 R /XYZ 151.701 326.773 null]
 >> endobj
 6313 0 obj <<
-/D [6304 0 R /XYZ 151.701 326.773 null]
+/D [6303 0 R /XYZ 151.701 314.818 null]
 >> endobj
 6314 0 obj <<
-/D [6304 0 R /XYZ 151.701 314.818 null]
+/D [6303 0 R /XYZ 151.701 302.863 null]
 >> endobj
 6315 0 obj <<
-/D [6304 0 R /XYZ 151.701 302.863 null]
+/D [6303 0 R /XYZ 151.701 290.908 null]
 >> endobj
 6316 0 obj <<
-/D [6304 0 R /XYZ 151.701 290.908 null]
+/D [6303 0 R /XYZ 151.701 278.953 null]
 >> endobj
 6317 0 obj <<
-/D [6304 0 R /XYZ 151.701 278.953 null]
+/D [6303 0 R /XYZ 151.701 266.998 null]
 >> endobj
 6318 0 obj <<
-/D [6304 0 R /XYZ 151.701 266.998 null]
+/D [6303 0 R /XYZ 151.701 255.042 null]
 >> endobj
-6319 0 obj <<
-/D [6304 0 R /XYZ 151.701 255.042 null]
->> endobj
 314 0 obj <<
-/D [6304 0 R /XYZ 151.701 207.31 null]
+/D [6303 0 R /XYZ 151.701 207.31 null]
 >> endobj
-6320 0 obj <<
-/D [6304 0 R /XYZ 151.701 180.718 null]
+6319 0 obj <<
+/D [6303 0 R /XYZ 151.701 180.718 null]
 >> endobj
-6303 0 obj <<
+6302 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R /F4 5484 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6324 0 obj <<
+6323 0 obj <<
 /Length 2124      
 /Filter /FlateDecode
 >>
@@ -21456,28 +21764,28 @@
 ˆ{‚ðo¾çžMÿØðë…ÞÉHu	û%&Måk0F•‚ªpcYÖâ§ìi!9Ø'Týâ€,nÒó§ÐŸ"þO>ÿ}³ßü±¸xÙ
 endstream
 endobj
-6323 0 obj <<
+6322 0 obj <<
 /Type /Page
-/Contents 6324 0 R
-/Resources 6322 0 R
+/Contents 6323 0 R
+/Resources 6321 0 R
 /MediaBox [0 0 612 792]
-/Parent 6321 0 R
+/Parent 6320 0 R
 >> endobj
-6325 0 obj <<
-/D [6323 0 R /XYZ 100.892 685.529 null]
+6324 0 obj <<
+/D [6322 0 R /XYZ 100.892 685.529 null]
 >> endobj
 318 0 obj <<
-/D [6323 0 R /XYZ 100.892 445.939 null]
+/D [6322 0 R /XYZ 100.892 445.939 null]
 >> endobj
-6326 0 obj <<
-/D [6323 0 R /XYZ 100.892 417.109 null]
+6325 0 obj <<
+/D [6322 0 R /XYZ 100.892 417.109 null]
 >> endobj
-6322 0 obj <<
+6321 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F88 5678 0 R /F72 5679 0 R /F15 3700 0 R /F17 3698 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6329 0 obj <<
+6328 0 obj <<
 /Length 2206      
 /Filter /FlateDecode
 >>
@@ -21508,42 +21816,42 @@
 ½HItý­<÷xsMmÏŒÓ{Æ5µˆ+Úâh þû¦ËmñU<×›Æ gÒëÆÖêBt®ðž¡¡z׫PºB÷QÞÔV‚Ø Nò}ÊÈTì왐͢iÈf‘Tì(ÃÜpþû®õBF®#²…C<ÃXâF.žaÈñœÑ[É¥Æ|µžC9W£ÒSs—ºP0>TÈmöì¼û?€”¿]¾wuýÆÿðþ·9'™7v¼g×â$höfc¸i–@µvÁ)†"=‡PÓN¿ÆrÿA_;ÉÛÝxYQÓqöÙíÙ€pÿ¯oÿ*„U
 endstream
 endobj
-6328 0 obj <<
+6327 0 obj <<
 /Type /Page
-/Contents 6329 0 R
-/Resources 6327 0 R
+/Contents 6328 0 R
+/Resources 6326 0 R
 /MediaBox [0 0 612 792]
-/Parent 6321 0 R
+/Parent 6320 0 R
 >> endobj
+6329 0 obj <<
+/D [6327 0 R /XYZ 151.701 685.529 null]
+>> endobj
 6330 0 obj <<
-/D [6328 0 R /XYZ 151.701 685.529 null]
+/D [6327 0 R /XYZ 151.701 518.219 null]
 >> endobj
 6331 0 obj <<
-/D [6328 0 R /XYZ 151.701 518.219 null]
+/D [6327 0 R /XYZ 151.701 416.6 null]
 >> endobj
 6332 0 obj <<
-/D [6328 0 R /XYZ 151.701 416.6 null]
+/D [6327 0 R /XYZ 151.701 382.727 null]
 >> endobj
 6333 0 obj <<
-/D [6328 0 R /XYZ 151.701 382.727 null]
+/D [6327 0 R /XYZ 151.701 349.46 null]
 >> endobj
 6334 0 obj <<
-/D [6328 0 R /XYZ 151.701 349.46 null]
+/D [6327 0 R /XYZ 151.701 302.038 null]
 >> endobj
 6335 0 obj <<
-/D [6328 0 R /XYZ 151.701 302.038 null]
+/D [6327 0 R /XYZ 151.701 227.517 null]
 >> endobj
 6336 0 obj <<
-/D [6328 0 R /XYZ 151.701 227.517 null]
+/D [6327 0 R /XYZ 151.701 166.546 null]
 >> endobj
-6337 0 obj <<
-/D [6328 0 R /XYZ 151.701 166.546 null]
->> endobj
-6327 0 obj <<
+6326 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R /F52 3737 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6343 0 obj <<
+6342 0 obj <<
 /Length 2097      
 /Filter /FlateDecode
 >>
@@ -21564,50 +21872,50 @@
 "l›KܾìÄ÷¡Üÿ1¾7æå¿jþ/Gäþì_Ž›&™sU¿øãÝaW˜5þ§µŽ|
 endstream
 endobj
-6342 0 obj <<
+6341 0 obj <<
 /Type /Page
-/Contents 6343 0 R
-/Resources 6341 0 R
+/Contents 6342 0 R
+/Resources 6340 0 R
 /MediaBox [0 0 612 792]
-/Parent 6321 0 R
-/Annots [ 6338 0 R 6345 0 R 6339 0 R ]
+/Parent 6320 0 R
+/Annots [ 6337 0 R 6344 0 R 6338 0 R ]
 >> endobj
-6338 0 obj <<
+6337 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [338.8 571.76 460.543 583.45]
 /Subtype /Link
 /A << /S /GoTo /D (PolicyMgmt) >>
 >> endobj
-6345 0 obj <<
+6344 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [127.168 560.332 213.312 569.901]
 /Subtype /Link
 /A << /S /GoTo /D (PolicyMgmt) >>
 >> endobj
-6339 0 obj <<
+6338 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [298.256 118.128 457.513 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (NetworkBrowsing) >>
 >> endobj
-6344 0 obj <<
-/D [6342 0 R /XYZ 100.892 685.529 null]
+6343 0 obj <<
+/D [6341 0 R /XYZ 100.892 685.529 null]
 >> endobj
 322 0 obj <<
-/D [6342 0 R /XYZ 100.892 346.989 null]
+/D [6341 0 R /XYZ 100.892 346.989 null]
 >> endobj
-6346 0 obj <<
-/D [6342 0 R /XYZ 100.892 322.689 null]
+6345 0 obj <<
+/D [6341 0 R /XYZ 100.892 322.689 null]
 >> endobj
-6341 0 obj <<
+6340 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F51 3736 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F52 3737 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6349 0 obj <<
+6348 0 obj <<
 /Length 2238      
 /Filter /FlateDecode
 >>
@@ -21637,30 +21945,30 @@
 
 endstream
 endobj
-6348 0 obj <<
+6347 0 obj <<
 /Type /Page
-/Contents 6349 0 R
-/Resources 6347 0 R
+/Contents 6348 0 R
+/Resources 6346 0 R
 /MediaBox [0 0 612 792]
-/Parent 6321 0 R
-/Annots [ 6340 0 R ]
+/Parent 6320 0 R
+/Annots [ 6339 0 R ]
 >> endobj
-6340 0 obj <<
+6339 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 646.546 219.708 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (DMB) >>
 >> endobj
-6350 0 obj <<
-/D [6348 0 R /XYZ 151.701 685.529 null]
+6349 0 obj <<
+/D [6347 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6347 0 obj <<
+6346 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F88 5678 0 R /F72 5679 0 R /F52 3737 0 R /F59 4373 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6354 0 obj <<
+6353 0 obj <<
 /Length 1760      
 /Filter /FlateDecode
 >>
@@ -21689,40 +21997,40 @@
 E|"
 endstream
 endobj
-6353 0 obj <<
+6352 0 obj <<
 /Type /Page
-/Contents 6354 0 R
-/Resources 6352 0 R
+/Contents 6353 0 R
+/Resources 6351 0 R
 /MediaBox [0 0 612 792]
-/Parent 6321 0 R
+/Parent 6320 0 R
 >> endobj
-6355 0 obj <<
-/D [6353 0 R /XYZ 100.892 685.529 null]
+6354 0 obj <<
+/D [6352 0 R /XYZ 100.892 685.529 null]
 >> endobj
 326 0 obj <<
-/D [6353 0 R /XYZ 100.892 660.623 null]
+/D [6352 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6356 0 obj <<
-/D [6353 0 R /XYZ 100.892 641.209 null]
+6355 0 obj <<
+/D [6352 0 R /XYZ 100.892 641.209 null]
 >> endobj
 330 0 obj <<
-/D [6353 0 R /XYZ 100.892 641.209 null]
+/D [6352 0 R /XYZ 100.892 641.209 null]
 >> endobj
-6357 0 obj <<
-/D [6353 0 R /XYZ 100.892 613.905 null]
+6356 0 obj <<
+/D [6352 0 R /XYZ 100.892 613.905 null]
 >> endobj
 334 0 obj <<
-/D [6353 0 R /XYZ 100.892 226.463 null]
+/D [6352 0 R /XYZ 100.892 226.463 null]
 >> endobj
-6358 0 obj <<
-/D [6353 0 R /XYZ 100.892 201.691 null]
+6357 0 obj <<
+/D [6352 0 R /XYZ 100.892 201.691 null]
 >> endobj
-6352 0 obj <<
+6351 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6361 0 obj <<
+6360 0 obj <<
 /Length 1563      
 /Filter /FlateDecode
 >>
@@ -21736,27 +22044,27 @@
 =KȦ’ñãCã?¿ÒãW*X|“¼Çþ5¯ëéJK=|×q9giŠ¬ÓÓó‡Îb?Š,åQÅÓ'ÊxÀä]S½ò'ζ­ü´O°‚š2y?e§oÐi„OÛÿ CA
 endstream
 endobj
-6360 0 obj <<
+6359 0 obj <<
 /Type /Page
-/Contents 6361 0 R
-/Resources 6359 0 R
+/Contents 6360 0 R
+/Resources 6358 0 R
 /MediaBox [0 0 612 792]
-/Parent 6364 0 R
+/Parent 6363 0 R
 >> endobj
-6362 0 obj <<
-/D [6360 0 R /XYZ 151.701 685.529 null]
+6361 0 obj <<
+/D [6359 0 R /XYZ 151.701 685.529 null]
 >> endobj
 338 0 obj <<
-/D [6360 0 R /XYZ 151.701 472.35 null]
+/D [6359 0 R /XYZ 151.701 472.35 null]
 >> endobj
-6363 0 obj <<
-/D [6360 0 R /XYZ 151.701 441.788 null]
+6362 0 obj <<
+/D [6359 0 R /XYZ 151.701 441.788 null]
 >> endobj
-6359 0 obj <<
+6358 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6367 0 obj <<
+6366 0 obj <<
 /Length 2203      
 /Filter /FlateDecode
 >>
@@ -21778,39 +22086,39 @@
 ‚dn„¼mFïïEÉÍI¡“®“¢ðûDþ£^‰W¿ßÀ©ß´ÍеøU‘jõ±q_\Y¹~ßûȼ•ØÌê”üææûâ™×øƒü€“=ÜÓƒ‚Û‰oëT^>  ì@2º¦‘ÝóÙì›Zfd ð´ræD¾Giyðn«j|qéÁkÂÉbÿLyzfÿaòùŸÐ¼µ
 endstream
 endobj
-6366 0 obj <<
+6365 0 obj <<
 /Type /Page
-/Contents 6367 0 R
-/Resources 6365 0 R
+/Contents 6366 0 R
+/Resources 6364 0 R
 /MediaBox [0 0 612 792]
-/Parent 6364 0 R
+/Parent 6363 0 R
 >> endobj
-6368 0 obj <<
-/D [6366 0 R /XYZ 100.892 685.529 null]
+6367 0 obj <<
+/D [6365 0 R /XYZ 100.892 685.529 null]
 >> endobj
 342 0 obj <<
-/D [6366 0 R /XYZ 100.892 660.623 null]
+/D [6365 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6369 0 obj <<
-/D [6366 0 R /XYZ 100.892 644.027 null]
+6368 0 obj <<
+/D [6365 0 R /XYZ 100.892 644.027 null]
 >> endobj
 346 0 obj <<
-/D [6366 0 R /XYZ 100.892 297.48 null]
+/D [6365 0 R /XYZ 100.892 297.48 null]
 >> endobj
-6370 0 obj <<
-/D [6366 0 R /XYZ 100.892 270.191 null]
+6369 0 obj <<
+/D [6365 0 R /XYZ 100.892 270.191 null]
 >> endobj
 350 0 obj <<
-/D [6366 0 R /XYZ 100.892 183.737 null]
+/D [6365 0 R /XYZ 100.892 183.737 null]
 >> endobj
-6371 0 obj <<
-/D [6366 0 R /XYZ 100.892 156.447 null]
+6370 0 obj <<
+/D [6365 0 R /XYZ 100.892 156.447 null]
 >> endobj
-6365 0 obj <<
+6364 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6374 0 obj <<
+6373 0 obj <<
 /Length 1346      
 /Filter /FlateDecode
 >>
@@ -21828,27 +22136,27 @@
 ðÖ­„€²	Ïæ,°êwÌâ¢ò÷ì¿`³Gã[ß¾ì8éýû±¨bÛô’ç1ŠûN‡¸6àõà '‡æãáƒ6<uŠ@^|‹ô2úâi˜]œ¹²ÀaüÓ_ûñ"þ:IM
 endstream
 endobj
-6373 0 obj <<
+6372 0 obj <<
 /Type /Page
-/Contents 6374 0 R
-/Resources 6372 0 R
+/Contents 6373 0 R
+/Resources 6371 0 R
 /MediaBox [0 0 612 792]
-/Parent 6364 0 R
+/Parent 6363 0 R
 >> endobj
-6375 0 obj <<
-/D [6373 0 R /XYZ 151.701 685.529 null]
+6374 0 obj <<
+/D [6372 0 R /XYZ 151.701 685.529 null]
 >> endobj
 354 0 obj <<
-/D [6373 0 R /XYZ 151.701 621.077 null]
+/D [6372 0 R /XYZ 151.701 621.077 null]
 >> endobj
-6376 0 obj <<
-/D [6373 0 R /XYZ 151.701 581.364 null]
+6375 0 obj <<
+/D [6372 0 R /XYZ 151.701 581.364 null]
 >> endobj
-6372 0 obj <<
+6371 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6381 0 obj <<
+6380 0 obj <<
 /Length 1620      
 /Filter /FlateDecode
 >>
@@ -21872,47 +22180,47 @@
 Ðüæ7 «ÿÒPßÎÜ'?RÉ(_ýüÉDEðmš}Û”Rè¢ðkÄoDEÅ<âÓHà‡ô¨f›g–ù§}ÉTb-ƒáûÙ	á[{,žG2+`ÁKb—wýwoݏV·7:<Ù<³µcþÔ~÷3ÑÖT·ù8.¢Xð·¹"}Åÿ ÕbóS
 endstream
 endobj
-6380 0 obj <<
+6379 0 obj <<
 /Type /Page
-/Contents 6381 0 R
-/Resources 6379 0 R
+/Contents 6380 0 R
+/Resources 6378 0 R
 /MediaBox [0 0 612 792]
-/Parent 6364 0 R
-/Annots [ 6377 0 R 6378 0 R ]
+/Parent 6363 0 R
+/Annots [ 6376 0 R 6377 0 R ]
 >> endobj
-6377 0 obj <<
+6376 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 422.881 244.524 434.57]
 /Subtype /Link
 /A << /S /GoTo /D (samba-pdc) >>
 >> endobj
-6378 0 obj <<
+6377 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 219.789 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(mailto:jht at samba.org)>>
 >> endobj
-6382 0 obj <<
-/D [6380 0 R /XYZ 100.892 685.529 null]
+6381 0 obj <<
+/D [6379 0 R /XYZ 100.892 685.529 null]
 >> endobj
 358 0 obj <<
-/D [6380 0 R /XYZ 100.892 660.623 null]
+/D [6379 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3743 0 obj <<
-/D [6380 0 R /XYZ 100.892 474.704 null]
+/D [6379 0 R /XYZ 100.892 474.704 null]
 >> endobj
 362 0 obj <<
-/D [6380 0 R /XYZ 100.892 404.412 null]
+/D [6379 0 R /XYZ 100.892 404.412 null]
 >> endobj
-6383 0 obj <<
-/D [6380 0 R /XYZ 100.892 376.471 null]
+6382 0 obj <<
+/D [6379 0 R /XYZ 100.892 376.471 null]
 >> endobj
-6379 0 obj <<
+6378 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6387 0 obj <<
+6386 0 obj <<
 /Length 2054      
 /Filter /FlateDecode
 >>
@@ -21940,35 +22248,35 @@
 !+=_xÚ†Ç[CÅ¥¿­¶!©Ïq¢Õþ²TŽãçõÍ%1x®
 endstream
 endobj
-6386 0 obj <<
+6385 0 obj <<
 /Type /Page
-/Contents 6387 0 R
-/Resources 6385 0 R
+/Contents 6386 0 R
+/Resources 6384 0 R
 /MediaBox [0 0 612 792]
-/Parent 6364 0 R
-/Annots [ 6384 0 R ]
+/Parent 6363 0 R
+/Annots [ 6383 0 R ]
 >> endobj
-6384 0 obj <<
+6383 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [300.596 344.72 346.02 356.409]
 /Subtype /Link
 /A << /S /GoTo /D (pdc-bdc-table) >>
 >> endobj
-6388 0 obj <<
-/D [6386 0 R /XYZ 151.701 685.529 null]
+6387 0 obj <<
+/D [6385 0 R /XYZ 151.701 685.529 null]
 >> endobj
 366 0 obj <<
-/D [6386 0 R /XYZ 151.701 306.856 null]
+/D [6385 0 R /XYZ 151.701 306.856 null]
 >> endobj
-6389 0 obj <<
-/D [6386 0 R /XYZ 151.701 274.78 null]
+6388 0 obj <<
+/D [6385 0 R /XYZ 151.701 274.78 null]
 >> endobj
-6385 0 obj <<
+6384 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6393 0 obj <<
+6392 0 obj <<
 /Length 2281      
 /Filter /FlateDecode
 >>
@@ -21991,33 +22299,33 @@
 ùekÛ=QÀ,!=6BteGàA^nj¢ù~B9ZH²a(õ«@¶·"ÿzûëg"|®Ê{ëúgÔÚà}⪳˜ô¦Ì=kDìs˜Pñp9¬P	¢«°«¦¦%®rƒ_C“ß!	Ò´Ìs¼ÎÿF¡iá šÂ&‡gzÝ+óIQQ©†ÄE ›Ò¤%Šïظ’4)µ0;¿€Ðdßèzë‰DòRÚÊú]”¾‡Gƒ˜_b.ƒ÷g@š‚!ïËîÿ@8fÂå¡ÖÖ]K!ý7®Q¿¥O3îÐëcæiߺҰJ~ÏïP</lê¦t’΂ðKŽ ÕÁ¬@˜•X¥,Mmé-ì÷EØèzC£²"N·v…æÅW»ë¹¢'®}p/Üõ"2&ýÕlœ•ïÏGwÁŠEÑëfj÷šƒ‹ðk«ªô»V¤jjèÁwæ+Û´Uál_ÎÕð×™Qñ琠YãÚšzJ؝YÛ£´1…‚îåcë¦/Ï„`ׇÈR¾IÃòàÞoǍS{“U4B©Ü`Pâç×]! ­ÑP?pîmã#(OÜð°fR´l߀t¨vtª&•ŒàÒõÞ•Ò%â)ôtÅU÷-­R1IÐîl5`Ž¦U]á;‡à˜lР"d3€Æ«IÕ¤Ѐ5•‹Nƒñi›1탇p˜¤^¡Ã)…p°3Td…ôñÃUÐ;5w1¢‡î?ë°óAÝÎE¥¸ëléð(FèƒQa±_bˆçªÄ§}3)6H0ñôÏ …ûV¼pè^ù¾@tŸNF¥½×ª>Äâ[hn`ÿZå­C£ãXP‹Î}Œ$Wý]ÝT=Êö¦lsS‘G ˆ•Œ.‚Çÿ£&"ùД{šè0¨˜»¨…‹èÈŠNÈãzíHÍ<mptÄ<Ÿ|Ôõ*y8÷(á‚	ü÷ö¾¦±?Tùèë¼½ISªþå%:¦ÛP‚$‰>xƒn~f…“Ø•Çÿu…²ð)oµm
 endstream
 endobj
-6392 0 obj <<
+6391 0 obj <<
 /Type /Page
-/Contents 6393 0 R
-/Resources 6391 0 R
+/Contents 6392 0 R
+/Resources 6390 0 R
 /MediaBox [0 0 612 792]
-/Parent 6364 0 R
+/Parent 6363 0 R
 >> endobj
-6394 0 obj <<
-/D [6392 0 R /XYZ 100.892 685.529 null]
+6393 0 obj <<
+/D [6391 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5308 0 obj <<
-/D [6392 0 R /XYZ 100.892 660.623 null]
+/D [6391 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6390 0 obj <<
-/D [6392 0 R /XYZ 100.892 643.753 null]
+6389 0 obj <<
+/D [6391 0 R /XYZ 100.892 643.753 null]
 >> endobj
 370 0 obj <<
-/D [6392 0 R /XYZ 100.892 345.468 null]
+/D [6391 0 R /XYZ 100.892 345.468 null]
 >> endobj
-6395 0 obj <<
-/D [6392 0 R /XYZ 100.892 326.548 null]
+6394 0 obj <<
+/D [6391 0 R /XYZ 100.892 326.548 null]
 >> endobj
-6391 0 obj <<
+6390 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6398 0 obj <<
+6397 0 obj <<
 /Length 2304      
 /Filter /FlateDecode
 >>
@@ -22038,21 +22346,21 @@
 G ·¯i$ñ ‹ÛÙŽÍÊŠœÑÁ}kÖàgh’³	à[Ãè¦7YŽ¥´•nb;	?ÿa7JÒ¸f`Üe ÐavýÃKhôØbLÓGBÓfŒï×]˜2ŽsÎ8VB	 3OÆ"Ë"Zþ/ä˨A„$‚ӏÅÿuŠà§ñ«­MkkU…§m~ò¯å˜æF¼ KZ at NÊòDD±{ÔMñ©…ÈN‘HAÿTF¨òfhÆ-Ïdö»w›õØð?A`r®8г,Àô^¾ý÷ûýÝßQÃzÂ
 endstream
 endobj
-6397 0 obj <<
+6396 0 obj <<
 /Type /Page
-/Contents 6398 0 R
-/Resources 6396 0 R
+/Contents 6397 0 R
+/Resources 6395 0 R
 /MediaBox [0 0 612 792]
-/Parent 6400 0 R
+/Parent 6399 0 R
 >> endobj
-6399 0 obj <<
-/D [6397 0 R /XYZ 151.701 685.529 null]
+6398 0 obj <<
+/D [6396 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6396 0 obj <<
+6395 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6407 0 obj <<
+6406 0 obj <<
 /Length 2379      
 /Filter /FlateDecode
 >>
@@ -22078,55 +22386,55 @@
 ¬ä.‘
 endstream
 endobj
-6406 0 obj <<
+6405 0 obj <<
 /Type /Page
-/Contents 6407 0 R
-/Resources 6405 0 R
+/Contents 6406 0 R
+/Resources 6404 0 R
 /MediaBox [0 0 612 792]
-/Parent 6400 0 R
-/Annots [ 6401 0 R 6402 0 R 6403 0 R 6404 0 R ]
+/Parent 6399 0 R
+/Annots [ 6400 0 R 6401 0 R 6402 0 R 6403 0 R ]
 >> endobj
-6401 0 obj <<
+6400 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [339.296 276.769 409.465 288.458]
 /Subtype /Link
 /A << /S /GoTo /D (minimalPDC) >>
 >> endobj
-6402 0 obj <<
+6401 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [114.018 198.152 261.212 209.841]
 /Subtype /Link
 /A << /S /GoTo /D (samba-pdc) >>
 >> endobj
-6403 0 obj <<
+6402 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [313.349 198.152 460.543 209.841]
 /Subtype /Link
 /A << /S /GoTo /D (samba-pdc) >>
 >> endobj
-6404 0 obj <<
+6403 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 352.091 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.samba.org/samba/docs/Samba3-ByExample)>>
 >> endobj
-6408 0 obj <<
-/D [6406 0 R /XYZ 100.892 685.529 null]
+6407 0 obj <<
+/D [6405 0 R /XYZ 100.892 685.529 null]
 >> endobj
 374 0 obj <<
-/D [6406 0 R /XYZ 100.892 375.011 null]
+/D [6405 0 R /XYZ 100.892 375.011 null]
 >> endobj
-6409 0 obj <<
-/D [6406 0 R /XYZ 100.892 342.824 null]
+6408 0 obj <<
+/D [6405 0 R /XYZ 100.892 342.824 null]
 >> endobj
-6405 0 obj <<
+6404 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F17 3698 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6413 0 obj <<
+6412 0 obj <<
 /Length 3067      
 /Filter /FlateDecode
 >>
@@ -22161,66 +22469,66 @@
 Yiî`,GÊá‘¥[¸<±œEß¹¾ïY¶‚ï\6Fxÿ!bÃãrè‰w×ÿ]K«
 endstream
 endobj
-6412 0 obj <<
+6411 0 obj <<
 /Type /Page
-/Contents 6413 0 R
-/Resources 6411 0 R
+/Contents 6412 0 R
+/Resources 6410 0 R
 /MediaBox [0 0 612 792]
-/Parent 6400 0 R
+/Parent 6399 0 R
 >> endobj
-6414 0 obj <<
-/D [6412 0 R /XYZ 151.701 685.529 null]
+6413 0 obj <<
+/D [6411 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5025 0 obj <<
-/D [6412 0 R /XYZ 151.701 660.623 null]
+/D [6411 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6410 0 obj <<
-/D [6412 0 R /XYZ 151.701 632.325 null]
+6409 0 obj <<
+/D [6411 0 R /XYZ 151.701 632.325 null]
 >> endobj
+6414 0 obj <<
+/D [6411 0 R /XYZ 151.701 626.347 null]
+>> endobj
 6415 0 obj <<
-/D [6412 0 R /XYZ 151.701 626.347 null]
+/D [6411 0 R /XYZ 151.701 632.623 null]
 >> endobj
 6416 0 obj <<
-/D [6412 0 R /XYZ 151.701 632.623 null]
+/D [6411 0 R /XYZ 151.701 620.668 null]
 >> endobj
 6417 0 obj <<
-/D [6412 0 R /XYZ 151.701 620.668 null]
+/D [6411 0 R /XYZ 151.701 608.713 null]
 >> endobj
 6418 0 obj <<
-/D [6412 0 R /XYZ 151.701 608.713 null]
+/D [6411 0 R /XYZ 151.701 596.758 null]
 >> endobj
 6419 0 obj <<
-/D [6412 0 R /XYZ 151.701 596.758 null]
+/D [6411 0 R /XYZ 151.701 584.803 null]
 >> endobj
 6420 0 obj <<
-/D [6412 0 R /XYZ 151.701 584.803 null]
+/D [6411 0 R /XYZ 151.701 572.848 null]
 >> endobj
 6421 0 obj <<
-/D [6412 0 R /XYZ 151.701 572.848 null]
+/D [6411 0 R /XYZ 151.701 560.892 null]
 >> endobj
 6422 0 obj <<
-/D [6412 0 R /XYZ 151.701 560.892 null]
+/D [6411 0 R /XYZ 151.701 548.937 null]
 >> endobj
 6423 0 obj <<
-/D [6412 0 R /XYZ 151.701 548.937 null]
+/D [6411 0 R /XYZ 151.701 536.982 null]
 >> endobj
 6424 0 obj <<
-/D [6412 0 R /XYZ 151.701 536.982 null]
+/D [6411 0 R /XYZ 151.701 525.027 null]
 >> endobj
-6425 0 obj <<
-/D [6412 0 R /XYZ 151.701 525.027 null]
->> endobj
 378 0 obj <<
-/D [6412 0 R /XYZ 151.701 476.88 null]
+/D [6411 0 R /XYZ 151.701 476.88 null]
 >> endobj
-6426 0 obj <<
-/D [6412 0 R /XYZ 151.701 457.96 null]
+6425 0 obj <<
+/D [6411 0 R /XYZ 151.701 457.96 null]
 >> endobj
-6411 0 obj <<
+6410 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F4 5484 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6430 0 obj <<
+6429 0 obj <<
 /Length 2370      
 /Filter /FlateDecode
 >>
@@ -22247,47 +22555,47 @@
 ,®œ&Ê›Jüá¢7'á3Âq8=TËgBgg¢ÿ¼é€-
 endstream
 endobj
-6429 0 obj <<
+6428 0 obj <<
 /Type /Page
-/Contents 6430 0 R
-/Resources 6428 0 R
+/Contents 6429 0 R
+/Resources 6427 0 R
 /MediaBox [0 0 612 792]
-/Parent 6400 0 R
-/Annots [ 6427 0 R ]
+/Parent 6399 0 R
+/Annots [ 6426 0 R ]
 >> endobj
-6427 0 obj <<
+6426 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 325.312 169.615 337.001]
 /Subtype /Link
 /A << /S /GoTo /D (mulitldapcfg) >>
 >> endobj
-6431 0 obj <<
-/D [6429 0 R /XYZ 100.892 685.529 null]
+6430 0 obj <<
+/D [6428 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5026 0 obj <<
-/D [6429 0 R /XYZ 100.892 313.152 null]
+/D [6428 0 R /XYZ 100.892 313.152 null]
 >> endobj
+6431 0 obj <<
+/D [6428 0 R /XYZ 100.892 296.282 null]
+>> endobj
 6432 0 obj <<
-/D [6429 0 R /XYZ 100.892 296.282 null]
+/D [6428 0 R /XYZ 100.892 290.305 null]
 >> endobj
 6433 0 obj <<
-/D [6429 0 R /XYZ 100.892 290.305 null]
+/D [6428 0 R /XYZ 100.892 296.581 null]
 >> endobj
-6434 0 obj <<
-/D [6429 0 R /XYZ 100.892 296.581 null]
->> endobj
 382 0 obj <<
-/D [6429 0 R /XYZ 100.892 235.555 null]
+/D [6428 0 R /XYZ 100.892 235.555 null]
 >> endobj
-6435 0 obj <<
-/D [6429 0 R /XYZ 100.892 208.191 null]
+6434 0 obj <<
+/D [6428 0 R /XYZ 100.892 208.191 null]
 >> endobj
-6428 0 obj <<
+6427 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F51 3736 0 R /F52 3737 0 R /F53 3738 0 R /F4 5484 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6442 0 obj <<
+6441 0 obj <<
 /Length 2056      
 /Filter /FlateDecode
 >>
@@ -22308,61 +22616,61 @@
 w§@füAYÄ`4ãWxhÑC>Ö¦Xº?	„{#MVS]ã¹?{!‹Þ*ú[^ÈÑ7_"-VΔVf]w¨¹eî ìÂþgÁ#—X¡\I‘kŸ ÚXdQõÂïsÑ[ÎË|âÑ®55SüÈÝ]ëí7ãË¤Os†ÄJp2k§{µØ>Z Zºk¡ ,ºžPp|ƒa3<Em7Æ®]ÒÛC[ö6㇧TuC‰Ä^CF„Â^àPÌÜt`’áNl®%/*€AªòÐèW竦Çöù'—”¹…¨õ ?ôßí¸}ÃPØW'#ƒWsÿIp[£?š¼c’pòOb†þ¶-r4Þƒ%ýçø,Þœµm©qö²ÓîŸãËÕj7'»LþyñƒäWîŠÒ@/ôe©áª2§È“2ã¾×›Åÿ yyˆ;
 endstream
 endobj
-6441 0 obj <<
+6440 0 obj <<
 /Type /Page
-/Contents 6442 0 R
-/Resources 6440 0 R
+/Contents 6441 0 R
+/Resources 6439 0 R
 /MediaBox [0 0 612 792]
-/Parent 6400 0 R
-/Annots [ 6436 0 R 6437 0 R 6438 0 R ]
+/Parent 6399 0 R
+/Annots [ 6435 0 R 6436 0 R 6437 0 R ]
 >> endobj
-6436 0 obj <<
+6435 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.004 486.443 390.441 498.133]
 /Subtype /Link
 /A << /S /GoTo /D (NetworkBrowsing) >>
 >> endobj
-6437 0 obj <<
+6436 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.479 486.443 451.032 498.133]
 /Subtype /Link
 /A << /S /GoTo /D (netdiscuss) >>
 >> endobj
-6438 0 obj <<
+6437 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [440.679 297.542 508.322 309.231]
 /Subtype /Link
 /A << /S /GoTo /D (adsdnstech) >>
 >> endobj
-6443 0 obj <<
-/D [6441 0 R /XYZ 151.701 685.529 null]
+6442 0 obj <<
+/D [6440 0 R /XYZ 151.701 685.529 null]
 >> endobj
 386 0 obj <<
-/D [6441 0 R /XYZ 151.701 660.623 null]
+/D [6440 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6444 0 obj <<
-/D [6441 0 R /XYZ 151.701 642.766 null]
+6443 0 obj <<
+/D [6440 0 R /XYZ 151.701 642.766 null]
 >> endobj
 390 0 obj <<
-/D [6441 0 R /XYZ 151.701 443.151 null]
+/D [6440 0 R /XYZ 151.701 443.151 null]
 >> endobj
-6445 0 obj <<
-/D [6441 0 R /XYZ 151.701 414.478 null]
+6444 0 obj <<
+/D [6440 0 R /XYZ 151.701 414.478 null]
 >> endobj
 394 0 obj <<
-/D [6441 0 R /XYZ 151.701 279.227 null]
+/D [6440 0 R /XYZ 151.701 279.227 null]
 >> endobj
-6446 0 obj <<
-/D [6441 0 R /XYZ 151.701 249.935 null]
+6445 0 obj <<
+/D [6440 0 R /XYZ 151.701 249.935 null]
 >> endobj
-6440 0 obj <<
+6439 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F52 3737 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6451 0 obj <<
+6450 0 obj <<
 /Length 2208      
 /Filter /FlateDecode
 >>
@@ -22388,41 +22696,41 @@
 Kg·ÂjÑ6%-ïa®?BCô2SêO;è*dž—gp m†M³µ…ìÛ”gxTa_²€“ïjÈÉÔ¨mÑÁ:	%ÒG‰¢•Iª¸€1à‚ñ‡74>>¬æÂhoz›üX¾.;sœ[âþß>$¨iÆ­Þ³à˜ÚÓéŒÚ 5|5=Ö–ÎdlÉhs ÂÊm'üu—YëÇë›ÿSÚ”
 endstream
 endobj
-6450 0 obj <<
+6449 0 obj <<
 /Type /Page
-/Contents 6451 0 R
-/Resources 6449 0 R
+/Contents 6450 0 R
+/Resources 6448 0 R
 /MediaBox [0 0 612 792]
-/Parent 6400 0 R
-/Annots [ 6439 0 R ]
+/Parent 6399 0 R
+/Annots [ 6438 0 R ]
 >> endobj
-6439 0 obj <<
+6438 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [112.623 568.216 180.676 577.663]
 /Subtype /Link
 /A << /S /GoTo /D (adsdnstech) >>
 >> endobj
-6452 0 obj <<
-/D [6450 0 R /XYZ 100.892 685.529 null]
+6451 0 obj <<
+/D [6449 0 R /XYZ 100.892 685.529 null]
 >> endobj
 398 0 obj <<
-/D [6450 0 R /XYZ 100.892 660.623 null]
+/D [6449 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6453 0 obj <<
-/D [6450 0 R /XYZ 100.892 641.288 null]
+6452 0 obj <<
+/D [6449 0 R /XYZ 100.892 641.288 null]
 >> endobj
 402 0 obj <<
-/D [6450 0 R /XYZ 100.892 552.079 null]
+/D [6449 0 R /XYZ 100.892 552.079 null]
 >> endobj
-6454 0 obj <<
-/D [6450 0 R /XYZ 100.892 520.488 null]
+6453 0 obj <<
+/D [6449 0 R /XYZ 100.892 520.488 null]
 >> endobj
-6449 0 obj <<
+6448 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F51 3736 0 R /F59 4373 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6459 0 obj <<
+6458 0 obj <<
 /Length 2259      
 /Filter /FlateDecode
 >>
@@ -22446,35 +22754,35 @@
 pT]¯ò¯{÷}ÿx÷_b'#
 endstream
 endobj
-6458 0 obj <<
+6457 0 obj <<
 /Type /Page
-/Contents 6459 0 R
-/Resources 6457 0 R
+/Contents 6458 0 R
+/Resources 6456 0 R
 /MediaBox [0 0 612 792]
-/Parent 6462 0 R
-/Annots [ 6455 0 R ]
+/Parent 6461 0 R
+/Annots [ 6454 0 R ]
 >> endobj
-6455 0 obj <<
+6454 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.523 118.128 266.243 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (minim-bdc) >>
 >> endobj
-6460 0 obj <<
-/D [6458 0 R /XYZ 151.701 685.529 null]
+6459 0 obj <<
+/D [6457 0 R /XYZ 151.701 685.529 null]
 >> endobj
 406 0 obj <<
-/D [6458 0 R /XYZ 151.701 198.792 null]
+/D [6457 0 R /XYZ 151.701 198.792 null]
 >> endobj
-6461 0 obj <<
-/D [6458 0 R /XYZ 151.701 168.425 null]
+6460 0 obj <<
+/D [6457 0 R /XYZ 151.701 168.425 null]
 >> endobj
-6457 0 obj <<
+6456 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F51 3736 0 R /F53 3738 0 R /F17 3698 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6466 0 obj <<
+6465 0 obj <<
 /Length 3035      
 /Filter /FlateDecode
 >>
@@ -22499,76 +22807,76 @@
 ãFo„ˆàšÍd!z¯ùÕZÂó·n½9ÍÖ«µ‡åòñÛóó§§'¶Hf·	+æ÷çT:ŸãÅù5Õ'­èâkux}C)-ƒUĆoÞµù/Ë&›
 endstream
 endobj
-6465 0 obj <<
+6464 0 obj <<
 /Type /Page
-/Contents 6466 0 R
-/Resources 6464 0 R
+/Contents 6465 0 R
+/Resources 6463 0 R
 /MediaBox [0 0 612 792]
-/Parent 6462 0 R
-/Annots [ 6456 0 R ]
+/Parent 6461 0 R
+/Annots [ 6455 0 R ]
 >> endobj
-6456 0 obj <<
+6455 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 352.091 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.samba.org/samba/docs/Samba3-ByExample)>>
 >> endobj
-6467 0 obj <<
-/D [6465 0 R /XYZ 100.892 685.529 null]
+6466 0 obj <<
+/D [6464 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5027 0 obj <<
-/D [6465 0 R /XYZ 100.892 660.623 null]
+/D [6464 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6463 0 obj <<
-/D [6465 0 R /XYZ 100.892 643.753 null]
+6462 0 obj <<
+/D [6464 0 R /XYZ 100.892 643.753 null]
 >> endobj
+6467 0 obj <<
+/D [6464 0 R /XYZ 100.892 637.775 null]
+>> endobj
 6468 0 obj <<
-/D [6465 0 R /XYZ 100.892 637.775 null]
+/D [6464 0 R /XYZ 100.892 644.051 null]
 >> endobj
 6469 0 obj <<
-/D [6465 0 R /XYZ 100.892 644.051 null]
+/D [6464 0 R /XYZ 100.892 632.096 null]
 >> endobj
 6470 0 obj <<
-/D [6465 0 R /XYZ 100.892 632.096 null]
+/D [6464 0 R /XYZ 100.892 608.186 null]
 >> endobj
 6471 0 obj <<
-/D [6465 0 R /XYZ 100.892 608.186 null]
+/D [6464 0 R /XYZ 100.892 596.231 null]
 >> endobj
 6472 0 obj <<
-/D [6465 0 R /XYZ 100.892 596.231 null]
+/D [6464 0 R /XYZ 100.892 584.276 null]
 >> endobj
 6473 0 obj <<
-/D [6465 0 R /XYZ 100.892 584.276 null]
+/D [6464 0 R /XYZ 100.892 572.32 null]
 >> endobj
 6474 0 obj <<
-/D [6465 0 R /XYZ 100.892 572.32 null]
+/D [6464 0 R /XYZ 100.892 560.365 null]
 >> endobj
 6475 0 obj <<
-/D [6465 0 R /XYZ 100.892 560.365 null]
+/D [6464 0 R /XYZ 100.892 548.41 null]
 >> endobj
 6476 0 obj <<
-/D [6465 0 R /XYZ 100.892 548.41 null]
+/D [6464 0 R /XYZ 100.892 536.455 null]
 >> endobj
 6477 0 obj <<
-/D [6465 0 R /XYZ 100.892 536.455 null]
+/D [6464 0 R /XYZ 100.892 524.5 null]
 >> endobj
 6478 0 obj <<
-/D [6465 0 R /XYZ 100.892 524.5 null]
+/D [6464 0 R /XYZ 100.892 512.545 null]
 >> endobj
 6479 0 obj <<
-/D [6465 0 R /XYZ 100.892 512.545 null]
+/D [6464 0 R /XYZ 100.892 488.634 null]
 >> endobj
 6480 0 obj <<
-/D [6465 0 R /XYZ 100.892 488.634 null]
+/D [6464 0 R /XYZ 100.892 476.679 null]
 >> endobj
-6481 0 obj <<
-/D [6465 0 R /XYZ 100.892 476.679 null]
->> endobj
-6464 0 obj <<
+6463 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F4 5484 0 R /F51 3736 0 R /F52 3737 0 R /F29 5413 0 R /F59 4373 0 R /F85 5513 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6486 0 obj <<
+6485 0 obj <<
 /Length 2170      
 /Filter /FlateDecode
 >>
@@ -22597,47 +22905,47 @@
 )V4
 endstream
 endobj
-6485 0 obj <<
+6484 0 obj <<
 /Type /Page
-/Contents 6486 0 R
-/Resources 6484 0 R
+/Contents 6485 0 R
+/Resources 6483 0 R
 /MediaBox [0 0 612 792]
-/Parent 6462 0 R
-/Annots [ 6482 0 R 6483 0 R ]
+/Parent 6461 0 R
+/Annots [ 6481 0 R 6482 0 R ]
 >> endobj
-6482 0 obj <<
+6481 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 127.92 251.769 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://samba.org)>>
 >> endobj
-6483 0 obj <<
+6482 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 421.73 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.samba.org/samba/docs/Samba3-ByExample.pdf)>>
 >> endobj
-6487 0 obj <<
-/D [6485 0 R /XYZ 151.701 685.529 null]
+6486 0 obj <<
+/D [6484 0 R /XYZ 151.701 685.529 null]
 >> endobj
 410 0 obj <<
-/D [6485 0 R /XYZ 151.701 362.973 null]
+/D [6484 0 R /XYZ 151.701 362.973 null]
 >> endobj
-6488 0 obj <<
-/D [6485 0 R /XYZ 151.701 333.254 null]
+6487 0 obj <<
+/D [6484 0 R /XYZ 151.701 333.254 null]
 >> endobj
 414 0 obj <<
-/D [6485 0 R /XYZ 151.701 215.558 null]
+/D [6484 0 R /XYZ 151.701 215.558 null]
 >> endobj
-6489 0 obj <<
-/D [6485 0 R /XYZ 151.701 186.331 null]
+6488 0 obj <<
+/D [6484 0 R /XYZ 151.701 186.331 null]
 >> endobj
-6484 0 obj <<
+6483 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F88 5678 0 R /F72 5679 0 R /F85 5513 0 R /F53 3738 0 R /F15 3700 0 R /F59 4373 0 R /F17 3698 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6492 0 obj <<
+6491 0 obj <<
 /Length 1980      
 /Filter /FlateDecode
 >>
@@ -22655,33 +22963,33 @@
 ßüâGƒªÝÐõáü‹qi.ì „±[EjØ«èÏüüs0<50ï•l¦8ÁßQ±7”ô½“¸‰'&Ü€êÛͱ0þ+Ö‡õâ?0j9Y
 endstream
 endobj
-6491 0 obj <<
+6490 0 obj <<
 /Type /Page
-/Contents 6492 0 R
-/Resources 6490 0 R
+/Contents 6491 0 R
+/Resources 6489 0 R
 /MediaBox [0 0 612 792]
-/Parent 6462 0 R
+/Parent 6461 0 R
 >> endobj
-6493 0 obj <<
-/D [6491 0 R /XYZ 100.892 685.529 null]
+6492 0 obj <<
+/D [6490 0 R /XYZ 100.892 685.529 null]
 >> endobj
 418 0 obj <<
-/D [6491 0 R /XYZ 100.892 499.939 null]
+/D [6490 0 R /XYZ 100.892 499.939 null]
 >> endobj
-6494 0 obj <<
-/D [6491 0 R /XYZ 100.892 458.02 null]
+6493 0 obj <<
+/D [6490 0 R /XYZ 100.892 458.02 null]
 >> endobj
 422 0 obj <<
-/D [6491 0 R /XYZ 100.892 337.638 null]
+/D [6490 0 R /XYZ 100.892 337.638 null]
 >> endobj
-6495 0 obj <<
-/D [6491 0 R /XYZ 100.892 309.064 null]
+6494 0 obj <<
+/D [6490 0 R /XYZ 100.892 309.064 null]
 >> endobj
-6490 0 obj <<
+6489 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6498 0 obj <<
+6497 0 obj <<
 /Length 593       
 /Filter /FlateDecode
 >>
@@ -22694,27 +23002,27 @@
 =“h
 endstream
 endobj
-6497 0 obj <<
+6496 0 obj <<
 /Type /Page
-/Contents 6498 0 R
-/Resources 6496 0 R
+/Contents 6497 0 R
+/Resources 6495 0 R
 /MediaBox [0 0 612 792]
-/Parent 6462 0 R
+/Parent 6461 0 R
 >> endobj
-6499 0 obj <<
-/D [6497 0 R /XYZ 151.701 685.529 null]
+6498 0 obj <<
+/D [6496 0 R /XYZ 151.701 685.529 null]
 >> endobj
 426 0 obj <<
-/D [6497 0 R /XYZ 151.701 660.623 null]
+/D [6496 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6500 0 obj <<
-/D [6497 0 R /XYZ 151.701 644.027 null]
+6499 0 obj <<
+/D [6496 0 R /XYZ 151.701 644.027 null]
 >> endobj
-6496 0 obj <<
+6495 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6503 0 obj <<
+6502 0 obj <<
 /Length 1540      
 /Filter /FlateDecode
 >>
@@ -22730,33 +23038,33 @@
 m‹v ‘ÀüaL$$#½¢8Ӂ?§ÿ ¿æp
 endstream
 endobj
-6502 0 obj <<
+6501 0 obj <<
 /Type /Page
-/Contents 6503 0 R
-/Resources 6501 0 R
+/Contents 6502 0 R
+/Resources 6500 0 R
 /MediaBox [0 0 612 792]
-/Parent 6462 0 R
+/Parent 6461 0 R
 >> endobj
-6504 0 obj <<
-/D [6502 0 R /XYZ 100.892 685.529 null]
+6503 0 obj <<
+/D [6501 0 R /XYZ 100.892 685.529 null]
 >> endobj
 430 0 obj <<
-/D [6502 0 R /XYZ 100.892 660.623 null]
+/D [6501 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3744 0 obj <<
-/D [6502 0 R /XYZ 100.892 503.843 null]
+/D [6501 0 R /XYZ 100.892 503.843 null]
 >> endobj
 434 0 obj <<
-/D [6502 0 R /XYZ 100.892 301.918 null]
+/D [6501 0 R /XYZ 100.892 301.918 null]
 >> endobj
-6505 0 obj <<
-/D [6502 0 R /XYZ 100.892 273.603 null]
+6504 0 obj <<
+/D [6501 0 R /XYZ 100.892 273.603 null]
 >> endobj
-6501 0 obj <<
+6500 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6508 0 obj <<
+6507 0 obj <<
 /Length 1965      
 /Filter /FlateDecode
 >>
@@ -22784,27 +23092,27 @@
 iÈ£r÷:×<š`€C}íBÀšiw Rt‹ZÞ‚œ¼ ÃC	håÇÒ@vZÿ0®ÿáä珸98¤¬ º<¤žÌ©ú¨%á–’pMªâÁ…S®9JùWËÌß•ë„3XÌ÷Åvñ7 ?Ÿð
 endstream
 endobj
-6507 0 obj <<
+6506 0 obj <<
 /Type /Page
-/Contents 6508 0 R
-/Resources 6506 0 R
+/Contents 6507 0 R
+/Resources 6505 0 R
 /MediaBox [0 0 612 792]
-/Parent 6510 0 R
+/Parent 6509 0 R
 >> endobj
-6509 0 obj <<
-/D [6507 0 R /XYZ 151.701 685.529 null]
+6508 0 obj <<
+/D [6506 0 R /XYZ 151.701 685.529 null]
 >> endobj
 438 0 obj <<
-/D [6507 0 R /XYZ 151.701 372.571 null]
+/D [6506 0 R /XYZ 151.701 372.571 null]
 >> endobj
-6203 0 obj <<
-/D [6507 0 R /XYZ 151.701 330.141 null]
+6202 0 obj <<
+/D [6506 0 R /XYZ 151.701 330.141 null]
 >> endobj
-6506 0 obj <<
+6505 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F51 3736 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6513 0 obj <<
+6512 0 obj <<
 /Length 1494      
 /Filter /FlateDecode
 >>
@@ -22824,21 +23132,21 @@
 Vïy*Œ_øƒû‘­ËZ
 endstream
 endobj
-6512 0 obj <<
+6511 0 obj <<
 /Type /Page
-/Contents 6513 0 R
-/Resources 6511 0 R
+/Contents 6512 0 R
+/Resources 6510 0 R
 /MediaBox [0 0 612 792]
-/Parent 6510 0 R
+/Parent 6509 0 R
 >> endobj
-6514 0 obj <<
-/D [6512 0 R /XYZ 100.892 685.529 null]
+6513 0 obj <<
+/D [6511 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6511 0 obj <<
+6510 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F51 3736 0 R /F59 4373 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6517 0 obj <<
+6516 0 obj <<
 /Length 1747      
 /Filter /FlateDecode
 >>
@@ -22860,27 +23168,27 @@
 8Ì™Á<9'¹žÓE”ër^`ãä?|_mW÷šq
 endstream
 endobj
-6516 0 obj <<
+6515 0 obj <<
 /Type /Page
-/Contents 6517 0 R
-/Resources 6515 0 R
+/Contents 6516 0 R
+/Resources 6514 0 R
 /MediaBox [0 0 612 792]
-/Parent 6510 0 R
+/Parent 6509 0 R
 >> endobj
-6518 0 obj <<
-/D [6516 0 R /XYZ 151.701 685.529 null]
+6517 0 obj <<
+/D [6515 0 R /XYZ 151.701 685.529 null]
 >> endobj
 442 0 obj <<
-/D [6516 0 R /XYZ 151.701 429.113 null]
+/D [6515 0 R /XYZ 151.701 429.113 null]
 >> endobj
-6519 0 obj <<
-/D [6516 0 R /XYZ 151.701 402.461 null]
+6518 0 obj <<
+/D [6515 0 R /XYZ 151.701 402.461 null]
 >> endobj
-6515 0 obj <<
+6514 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F51 3736 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6523 0 obj <<
+6522 0 obj <<
 /Length 1412      
 /Filter /FlateDecode
 >>
@@ -22894,21 +23202,21 @@
 ¬Ï†³©|)øG…J³ð1v`Àۍ÷þxù3-\ʼnccNC·é$¸xáêå€±;&UìÊ ®†Á÷Æ4¦Å<§íukkZQá„Å”®¤ÎOÎÕwkÏ™´še¶«uÓ?:ã<ù?iò•l
 endstream
 endobj
-6522 0 obj <<
+6521 0 obj <<
 /Type /Page
-/Contents 6523 0 R
-/Resources 6521 0 R
+/Contents 6522 0 R
+/Resources 6520 0 R
 /MediaBox [0 0 612 792]
-/Parent 6510 0 R
+/Parent 6509 0 R
 >> endobj
-6524 0 obj <<
-/D [6522 0 R /XYZ 100.892 685.529 null]
+6523 0 obj <<
+/D [6521 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6521 0 obj <<
+6520 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6529 0 obj <<
+6528 0 obj <<
 /Length 2083      
 /Filter /FlateDecode
 >>
@@ -22930,78 +23238,78 @@
 À‘ì…c§z+!ÒŠ/H€8æñ\B´8u‰'Ci–¥‚HÌÇÆwV¥Ò¯eŠÎX&´þ¾»­Ÿ)wPˏ#–»ùT€BülHBÁƒÀë–b¶ZõXˆˆÚz€(«Š®gÒµ÷ØÄсó7È`ý7ôî¸ZÙ˜öaz‹åÁø"éuAäåqžó»'Ãß"ÅT‘qz§Šÿó´ød*bq¬Ÿ›ò…’PkN‡|ɸµ$‰mÝŠ•m—Bbו'a‹Ùï8 Ó£*å.~¿;Ñðü"™“'L{Z1‡oÎÏûñph»Õ¾’±M[ŸoÍ.«åýáþoý¦Ü~ÿùæ[Ïò5ıÿö˜3Y'ªEYĤ^Ú_Iû3×’Ã&†¹Ó'¡ýg±Ò§äï±r¢}ü…xùdÍzS
 endstream
 endobj
-6528 0 obj <<
+6527 0 obj <<
 /Type /Page
-/Contents 6529 0 R
-/Resources 6527 0 R
+/Contents 6528 0 R
+/Resources 6526 0 R
 /MediaBox [0 0 612 792]
-/Parent 6510 0 R
-/Annots [ 6525 0 R 6526 0 R ]
+/Parent 6509 0 R
+/Annots [ 6524 0 R 6525 0 R ]
 >> endobj
-6520 0 obj <<
+6519 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./xslt/figures/warning.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 6532 0 R
+/PTEX.InfoDict 6531 0 R
 /BBox [0 0 33 33]
 /Resources <<
 /ProcSet [ /PDF /ImageC ]
 /ExtGState <<
-/R7 6533 0 R
+/R7 6532 0 R
 >>>>
-/Length 6534 0 R
+/Length 6533 0 R
 /Filter /FlateDecode
 >>
 stream
-xœ+T0Ð3T0 A(œË¥d®^ÌU¨`l–Ó†zæÆ&æp¨ÎÉ“Kß9X?È݉K?¨ˆKßL:8+Xpé»é»åpé»ØØ襦d&—ä)šõäç”ææƒÕÙùE@¦—§‹BÅœ·—¹8\.²¼¯OZx(VPtQ«A½®ygŸcè‘zÓϺ¬¬T—Ïf``øÀ‘gx½’áOãÙ’IîÌ
-æ	Ù¸Ø¥Vœ[¤Èåê©ÈÈ Ùû>Ä
+xœ+T0Ð3T0 A(œË¥d®^ÌU¨`l–Ó†zæÆFFÚ¤ÌÉ“Kß9X?È݉K?¨†KßL:8+Xpé»é»åpé»ØØ襦d&—ä)šõäç”ææƒÕÙùE@¦—§‹BÅœ·—¹8\.²¼¯OZx(VPtQ«A½®ygŸcè‘zÓϺ¬¬T—Ïf``øÀ‘gx½’áOãÙ’IîÌ
+æ	Ù¸Ø¥Vœ[¤Èåê©ÈÈ «X>
 endstream
 endobj
-6532 0 obj
+6531 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110838)
-/ModDate (D:20080610110838)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090358-05'00')
+/ModDate (D:20080528090358-05'00')
 >>
 endobj
-6533 0 obj
+6532 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-6534 0 obj
-205
+6533 0 obj
+206
 endobj
-6525 0 obj <<
+6524 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 127.92 468.803 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://support.microsoft.com/default.aspx?scid=kb;en-us;173673)>>
 >> endobj
-6526 0 obj <<
+6525 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 468.803 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://support.microsoft.com/default.aspx?scid=kb;en-us;172540)>>
 >> endobj
-6530 0 obj <<
-/D [6528 0 R /XYZ 151.701 685.529 null]
+6529 0 obj <<
+/D [6527 0 R /XYZ 151.701 685.529 null]
 >> endobj
 446 0 obj <<
-/D [6528 0 R /XYZ 151.701 451.471 null]
+/D [6527 0 R /XYZ 151.701 451.471 null]
 >> endobj
-6531 0 obj <<
-/D [6528 0 R /XYZ 151.701 412.188 null]
+6530 0 obj <<
+/D [6527 0 R /XYZ 151.701 412.188 null]
 >> endobj
-6527 0 obj <<
+6526 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
-/XObject << /Im3 6520 0 R >>
+/XObject << /Im3 6519 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6537 0 obj <<
+6536 0 obj <<
 /Length 2152      
 /Filter /FlateDecode
 >>
@@ -23021,60 +23329,60 @@
  Ç®2Hȃ„°è%佄Ø	w´pëÿ[˜JXDI>)q’Œã9½ÎP_ÛÎ=NøW²ñHÿg ðÓ¤qÞVeègo«ÝÍÑ£Q8¶ëÿqkÂ_=݉lÖ0À>ÿÊÀ‚•
 endstream
 endobj
-6536 0 obj <<
+6535 0 obj <<
 /Type /Page
-/Contents 6537 0 R
-/Resources 6535 0 R
+/Contents 6536 0 R
+/Resources 6534 0 R
 /MediaBox [0 0 612 792]
-/Parent 6510 0 R
+/Parent 6509 0 R
 >> endobj
+6537 0 obj <<
+/D [6535 0 R /XYZ 100.892 685.529 null]
+>> endobj
 6538 0 obj <<
-/D [6536 0 R /XYZ 100.892 685.529 null]
+/D [6535 0 R /XYZ 100.892 660.623 null]
 >> endobj
 6539 0 obj <<
-/D [6536 0 R /XYZ 100.892 660.623 null]
+/D [6535 0 R /XYZ 100.892 647.543 null]
 >> endobj
 6540 0 obj <<
-/D [6536 0 R /XYZ 100.892 647.543 null]
+/D [6535 0 R /XYZ 100.892 625.628 null]
 >> endobj
 6541 0 obj <<
-/D [6536 0 R /XYZ 100.892 625.628 null]
+/D [6535 0 R /XYZ 100.892 585.922 null]
 >> endobj
 6542 0 obj <<
-/D [6536 0 R /XYZ 100.892 585.922 null]
+/D [6535 0 R /XYZ 100.892 561.886 null]
 >> endobj
 6543 0 obj <<
-/D [6536 0 R /XYZ 100.892 561.886 null]
+/D [6535 0 R /XYZ 100.892 539.971 null]
 >> endobj
+450 0 obj <<
+/D [6535 0 R /XYZ 100.892 467.17 null]
+>> endobj
 6544 0 obj <<
-/D [6536 0 R /XYZ 100.892 539.971 null]
+/D [6535 0 R /XYZ 100.892 435.173 null]
 >> endobj
-450 0 obj <<
-/D [6536 0 R /XYZ 100.892 467.17 null]
->> endobj
 6545 0 obj <<
-/D [6536 0 R /XYZ 100.892 435.173 null]
+/D [6535 0 R /XYZ 100.892 272.284 null]
 >> endobj
 6546 0 obj <<
-/D [6536 0 R /XYZ 100.892 272.284 null]
+/D [6535 0 R /XYZ 100.892 272.861 null]
 >> endobj
 6547 0 obj <<
-/D [6536 0 R /XYZ 100.892 272.861 null]
+/D [6535 0 R /XYZ 100.892 260.905 null]
 >> endobj
-6548 0 obj <<
-/D [6536 0 R /XYZ 100.892 260.905 null]
->> endobj
 454 0 obj <<
-/D [6536 0 R /XYZ 100.892 197.818 null]
+/D [6535 0 R /XYZ 100.892 197.818 null]
 >> endobj
-6549 0 obj <<
-/D [6536 0 R /XYZ 100.892 158.83 null]
+6548 0 obj <<
+/D [6535 0 R /XYZ 100.892 158.83 null]
 >> endobj
-6535 0 obj <<
+6534 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F4 5484 0 R /F51 3736 0 R /F52 3737 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6553 0 obj <<
+6552 0 obj <<
 /Length 1825      
 /Filter /FlateDecode
 >>
@@ -23089,47 +23397,47 @@
 #ŸÖ7-OxœÿÜ/6ËE‹ö~[ÜÕXBU™)—¼¢rFu”8óhÁnBÇá+èò¤7èEΈåõÖܾ!—Ÿs.Uf0ÒäT½¯L¢Âßx(NñZ Œmï] ó±á`ðQ„‚ìyø\[ÿ¯(û@*ò¾m‰óOëß 4àÆ4^ƺ紋Ö5拼ØN"„ÕXG”63ÃQŽ˜3q¸Ð× ÆŠê›ÿNяÌ	ÕÈAø.Ž›ç¨Qß¾ÓŸÇwŒ€	ßñ¼ç§!¹%;õIHs5Šƒðâ ?Lh^,}Í*Õ„9ƒ3‚ñØ…w$`÷ŠK3Ë.{MÆ5$宕&\«ø”éŸÀ5”ç,•s\CÚ»ñ'cë‚v®1™ Àf’pDœü”àËÚ_ná\Ù3Èùœåc‘sš%,øG;=k(Ñó–Oz˜€'½ jþF•	ô…¸Ñ‘ÓãôÄÃQ<|×EOY<àŸòÜ&0cQÀŸ{àúzFDýPp%¾1Ÿ,5‹21—è$¨‹ðµãê§ÊËÛé6°æ‘JgfauÿL™E¿Ç>?M{)ùõœhHÓï§à£Ÿ½uÅéÉkÀª¥½w¦‰ñûz³úÂb
 endstream
 endobj
-6552 0 obj <<
+6551 0 obj <<
 /Type /Page
-/Contents 6553 0 R
-/Resources 6551 0 R
+/Contents 6552 0 R
+/Resources 6550 0 R
 /MediaBox [0 0 612 792]
-/Parent 6558 0 R
-/Annots [ 6550 0 R ]
+/Parent 6557 0 R
+/Annots [ 6549 0 R ]
 >> endobj
-6550 0 obj <<
+6549 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [409.099 118.128 463.213 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (domain-member-server) >>
 >> endobj
-6554 0 obj <<
-/D [6552 0 R /XYZ 151.701 685.529 null]
+6553 0 obj <<
+/D [6551 0 R /XYZ 151.701 685.529 null]
 >> endobj
 458 0 obj <<
-/D [6552 0 R /XYZ 151.701 660.623 null]
+/D [6551 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6555 0 obj <<
-/D [6552 0 R /XYZ 151.701 641.288 null]
+6554 0 obj <<
+/D [6551 0 R /XYZ 151.701 641.288 null]
 >> endobj
 462 0 obj <<
-/D [6552 0 R /XYZ 151.701 371.361 null]
+/D [6551 0 R /XYZ 151.701 371.361 null]
 >> endobj
-6556 0 obj <<
-/D [6552 0 R /XYZ 151.701 343.229 null]
+6555 0 obj <<
+/D [6551 0 R /XYZ 151.701 343.229 null]
 >> endobj
 466 0 obj <<
-/D [6552 0 R /XYZ 151.701 173.388 null]
+/D [6551 0 R /XYZ 151.701 173.388 null]
 >> endobj
-6557 0 obj <<
-/D [6552 0 R /XYZ 151.701 145.862 null]
+6556 0 obj <<
+/D [6551 0 R /XYZ 151.701 145.862 null]
 >> endobj
-6551 0 obj <<
+6550 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6564 0 obj <<
+6563 0 obj <<
 /Length 1879      
 /Filter /FlateDecode
 >>
@@ -23149,49 +23457,49 @@
 æûÊ«¬sõ˜Ÿ­šè=´«ÙÛòkkd¸¬ëð6±ÁvãÚëBINi.fá±/>¯™Æ€Ð0zê–³®`¡mp¾?ÚaW¶_y7ùÿshÁ`¾í­ÔeÍßñd}"r==|“…ZZáa…¶û*ѱÂ
 endstream
 endobj
-6563 0 obj <<
+6562 0 obj <<
 /Type /Page
-/Contents 6564 0 R
-/Resources 6562 0 R
+/Contents 6563 0 R
+/Resources 6561 0 R
 /MediaBox [0 0 612 792]
-/Parent 6558 0 R
-/Annots [ 6560 0 R 6561 0 R ]
+/Parent 6557 0 R
+/Annots [ 6559 0 R 6560 0 R ]
 >> endobj
-6560 0 obj <<
+6559 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [168.621 293.676 310.109 305.365]
 /Subtype /Link
 /A << /S /GoTo /D (samba-pdc) >>
 >> endobj
-6561 0 obj <<
+6560 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 188.376 145.827 200.065]
 /Subtype /Link
 /A << /S /GoTo /D (assumptions) >>
 >> endobj
-6565 0 obj <<
-/D [6563 0 R /XYZ 100.892 685.529 null]
+6564 0 obj <<
+/D [6562 0 R /XYZ 100.892 685.529 null]
 >> endobj
 470 0 obj <<
-/D [6563 0 R /XYZ 100.892 660.623 null]
+/D [6562 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6559 0 obj <<
-/D [6563 0 R /XYZ 100.892 641.209 null]
+6558 0 obj <<
+/D [6562 0 R /XYZ 100.892 641.209 null]
 >> endobj
 474 0 obj <<
-/D [6563 0 R /XYZ 100.892 238.158 null]
+/D [6562 0 R /XYZ 100.892 238.158 null]
 >> endobj
-6566 0 obj <<
-/D [6563 0 R /XYZ 100.892 210.744 null]
+6565 0 obj <<
+/D [6562 0 R /XYZ 100.892 210.744 null]
 >> endobj
-6562 0 obj <<
+6561 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F88 5678 0 R /F72 5679 0 R /F53 3738 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6570 0 obj <<
+6569 0 obj <<
 /Length 2637      
 /Filter /FlateDecode
 >>
@@ -23220,51 +23528,51 @@
 n暢²ê۝½4/¡±ttóQ„W% ÂuVÕÓ«¬jšHM¯U †TÅj»K"ôM§rQ”k/"t3¢ý?û#E
 endstream
 endobj
-6569 0 obj <<
+6568 0 obj <<
 /Type /Page
-/Contents 6570 0 R
-/Resources 6568 0 R
+/Contents 6569 0 R
+/Resources 6567 0 R
 /MediaBox [0 0 612 792]
-/Parent 6558 0 R
+/Parent 6557 0 R
 >> endobj
-6571 0 obj <<
-/D [6569 0 R /XYZ 151.701 685.529 null]
+6570 0 obj <<
+/D [6568 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5310 0 obj <<
-/D [6569 0 R /XYZ 151.701 660.623 null]
+/D [6568 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6567 0 obj <<
-/D [6569 0 R /XYZ 151.701 643.753 null]
+6566 0 obj <<
+/D [6568 0 R /XYZ 151.701 643.753 null]
 >> endobj
+6571 0 obj <<
+/D [6568 0 R /XYZ 151.701 564.225 null]
+>> endobj
 6572 0 obj <<
-/D [6569 0 R /XYZ 151.701 564.225 null]
+/D [6568 0 R /XYZ 151.701 556.853 null]
 >> endobj
 6573 0 obj <<
-/D [6569 0 R /XYZ 151.701 556.853 null]
+/D [6568 0 R /XYZ 151.701 454.794 null]
 >> endobj
 6574 0 obj <<
-/D [6569 0 R /XYZ 151.701 454.794 null]
+/D [6568 0 R /XYZ 151.701 455.977 null]
 >> endobj
 6575 0 obj <<
-/D [6569 0 R /XYZ 151.701 455.977 null]
+/D [6568 0 R /XYZ 151.701 308.2 null]
 >> endobj
 6576 0 obj <<
-/D [6569 0 R /XYZ 151.701 308.2 null]
+/D [6568 0 R /XYZ 151.701 306.656 null]
 >> endobj
 6577 0 obj <<
-/D [6569 0 R /XYZ 151.701 306.656 null]
+/D [6568 0 R /XYZ 151.701 178.105 null]
 >> endobj
 6578 0 obj <<
-/D [6569 0 R /XYZ 151.701 178.105 null]
+/D [6568 0 R /XYZ 151.701 178.682 null]
 >> endobj
-6579 0 obj <<
-/D [6569 0 R /XYZ 151.701 178.682 null]
->> endobj
-6568 0 obj <<
+6567 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F4 5484 0 R /F85 5513 0 R /F59 4373 0 R /F53 3738 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6583 0 obj <<
+6582 0 obj <<
 /Length 1615      
 /Filter /FlateDecode
 >>
@@ -23278,36 +23586,36 @@
 	ã§@ê‰ãE¨0ßÆ"꜊1;ôæê%púÁ"l=4˜i–‡OS({j )WQNʳÖÐZ±Ÿ]²™*t»ÝÜà¡"µ“2Ÿl$M+#5dV4´Ú×]EŠe~€Ú$äÖª±£’wËt…Ì~jÜîW¦Ð.pƸA»JSÖ{"èÏjªoUOìZþº=£;:—°õæIjU´¾©5ئÜ&*)È°+¹ÇÐa Å`K(RFÑ—z{Rœœ¸¾Yñe„‰ë¿a¨`PèŽS…¨ú/¦Šÿ?A\wÕÙxdk’EÝQâZ’Ìnp¤îí*œü0¶®sê”Ç.vÿA„T~kþ¯ïÿ`Dbèí|%EÓyûçýëëwÏBŽ\Û‰·Ì)‡ø=ÔÛяA†õí0W`.h‡6Y$‡"ØÚ2*wö5"EØ¡Ûð¿Âÿ-÷ÕVìŒ7ˆq,1?1žÞËV™s%ïüLÝÐúVtpÓÌÍLq”—Ùi~‚{E*ͨ“»ˆW„ïï΍³XðsÆzÐvx¡üwÀoÅ×ço[ a¾‚kGB×_BÐ:’Zl’‡=5EzŸšx¶…Ž/¸¹‡IJ!q£—;°—¶ÿÃÚv{„ã#Í#Iþ•¿—àÇÈ3ô¦»£ Òqë±P>ÿµ ™g-!NrÁý0%iqRbÒ2ÜPÈdOK³ÕjØlIJÖ̹3ã¶¬Ö“vŠ7YçDgÁ	Ú!AÆ¥HAsºÔñ ÃibÂÜù)™ÜÓ˜'Të†"òVBFh¹‘¡È÷|äÐho±@ÖB´(ò F(õ_øUÿ“GEh
 endstream
 endobj
-6582 0 obj <<
+6581 0 obj <<
 /Type /Page
-/Contents 6583 0 R
-/Resources 6581 0 R
+/Contents 6582 0 R
+/Resources 6580 0 R
 /MediaBox [0 0 612 792]
-/Parent 6558 0 R
-/Annots [ 6580 0 R 6585 0 R ]
+/Parent 6557 0 R
+/Annots [ 6579 0 R 6584 0 R ]
 >> endobj
-6580 0 obj <<
+6579 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [263.203 199.423 460.543 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (NetCommand) >>
 >> endobj
-6585 0 obj <<
+6584 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 187.995 231.585 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (NetCommand) >>
 >> endobj
-6584 0 obj <<
-/D [6582 0 R /XYZ 100.892 685.529 null]
+6583 0 obj <<
+/D [6581 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6581 0 obj <<
+6580 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6589 0 obj <<
+6588 0 obj <<
 /Length 2086      
 /Filter /FlateDecode
 >>
@@ -23343,35 +23651,35 @@
 ñtðPŠ[§“–ÝÎ2ÖQXKÃeÇv~À1©sÊÞKâu¥;ÖÉ<#y7ÖuœÒ|	âJó§è ö÷¬;÷P´Ym÷ryÁmwÞ¦÷à—I®ìßÜ`³³é«ÃPŘw/÷ýq¿ù/Êyœñ
 endstream
 endobj
-6588 0 obj <<
+6587 0 obj <<
 /Type /Page
-/Contents 6589 0 R
-/Resources 6587 0 R
+/Contents 6588 0 R
+/Resources 6586 0 R
 /MediaBox [0 0 612 792]
-/Parent 6558 0 R
-/Annots [ 6586 0 R ]
+/Parent 6557 0 R
+/Annots [ 6585 0 R ]
 >> endobj
-6586 0 obj <<
+6585 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [225.746 282.368 473.049 294.058]
 /Subtype /Link
 /A << /S /GoTo /D (winbind) >>
 >> endobj
-6590 0 obj <<
-/D [6588 0 R /XYZ 151.701 685.529 null]
+6589 0 obj <<
+/D [6587 0 R /XYZ 151.701 685.529 null]
 >> endobj
 478 0 obj <<
-/D [6588 0 R /XYZ 151.701 449.413 null]
+/D [6587 0 R /XYZ 151.701 449.413 null]
 >> endobj
-6591 0 obj <<
-/D [6588 0 R /XYZ 151.701 420.303 null]
+6590 0 obj <<
+/D [6587 0 R /XYZ 151.701 420.303 null]
 >> endobj
-6587 0 obj <<
+6586 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R /F51 3736 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6596 0 obj <<
+6595 0 obj <<
 /Length 2452      
 /Filter /FlateDecode
 >>
@@ -23398,71 +23706,71 @@
 Â&:ŽÚÑšF}¾gÏŸÖL™Ó¤‰—‹z|[GƒoOÔqà;^¯0'0ÿëe}%MhÇú_“Kæ°@hn¨)¨ÁÚÆò¬mDe€÷ÚQÔõ±ÒÁ/8;yMs·{yêƒÆ¹0„ø²Ô¿È1 	´LÌžûüw(¯¢>:Þ	,òlÏQ2ÚöžórQOxÎVàÑž³'ê8Ï9^¯í'0ÿëe¾Üz‰²LüV]($.""Ð4D| Ñ:ªfpÄy,—rxÞ÷ÐÇé&æý´…áž`%B9Ýy9ºÛó>zaÊÑBä£Ê’þ[Ê#¾z¡HÑÿ§ãçöñ¯^Ȫ¬:ÉW¯ýeÍΏµ Öÿ˜ðïÓ
 endstream
 endobj
-6595 0 obj <<
+6594 0 obj <<
 /Type /Page
-/Contents 6596 0 R
-/Resources 6594 0 R
+/Contents 6595 0 R
+/Resources 6593 0 R
 /MediaBox [0 0 612 792]
-/Parent 6558 0 R
-/Annots [ 6593 0 R 6598 0 R 6592 0 R ]
+/Parent 6557 0 R
+/Annots [ 6592 0 R 6597 0 R 6591 0 R ]
 >> endobj
-6593 0 obj <<
+6592 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [189.209 428.72 403.108 440.713]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxworld.com/linuxworld/lw-1998-10/lw-10-samba.html)>>
 >> endobj
-6598 0 obj <<
+6597 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [144.531 414.868 303.15 427.769]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxworld.com/linuxworld/lw-1998-10/lw-10-samba.html)>>
 >> endobj
-6592 0 obj <<
+6591 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [168.286 368.951 287.961 381.903]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxworld.com)>>
 >> endobj
-6597 0 obj <<
-/D [6595 0 R /XYZ 100.892 685.529 null]
+6596 0 obj <<
+/D [6594 0 R /XYZ 100.892 685.529 null]
 >> endobj
 482 0 obj <<
-/D [6595 0 R /XYZ 100.892 340.455 null]
+/D [6594 0 R /XYZ 100.892 340.455 null]
 >> endobj
 6111 0 obj <<
-/D [6595 0 R /XYZ 100.892 311.776 null]
+/D [6594 0 R /XYZ 100.892 311.776 null]
 >> endobj
 486 0 obj <<
-/D [6595 0 R /XYZ 100.892 262.224 null]
+/D [6594 0 R /XYZ 100.892 262.224 null]
 >> endobj
+6598 0 obj <<
+/D [6594 0 R /XYZ 100.892 235.119 null]
+>> endobj
 6599 0 obj <<
-/D [6595 0 R /XYZ 100.892 235.119 null]
+/D [6594 0 R /XYZ 100.892 207.139 null]
 >> endobj
 6600 0 obj <<
-/D [6595 0 R /XYZ 100.892 207.139 null]
+/D [6594 0 R /XYZ 100.892 207.716 null]
 >> endobj
 6601 0 obj <<
-/D [6595 0 R /XYZ 100.892 207.716 null]
+/D [6594 0 R /XYZ 100.892 195.76 null]
 >> endobj
 6602 0 obj <<
-/D [6595 0 R /XYZ 100.892 195.76 null]
+/D [6594 0 R /XYZ 100.892 183.805 null]
 >> endobj
 6603 0 obj <<
-/D [6595 0 R /XYZ 100.892 183.805 null]
+/D [6594 0 R /XYZ 100.892 159.895 null]
 >> endobj
 6604 0 obj <<
-/D [6595 0 R /XYZ 100.892 159.895 null]
+/D [6594 0 R /XYZ 100.892 147.94 null]
 >> endobj
-6605 0 obj <<
-/D [6595 0 R /XYZ 100.892 147.94 null]
->> endobj
-6594 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R /F90 6229 0 R /F52 3737 0 R /F53 3738 0 R /F91 6230 0 R /F61 5442 0 R /F71 5443 0 R /F17 3698 0 R /F4 5484 0 R /F51 3736 0 R >>
+6593 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R /F90 6228 0 R /F52 3737 0 R /F53 3738 0 R /F91 6229 0 R /F61 5442 0 R /F71 5443 0 R /F17 3698 0 R /F4 5484 0 R /F51 3736 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6610 0 obj <<
+6609 0 obj <<
 /Length 2352      
 /Filter /FlateDecode
 >>
@@ -23494,47 +23802,47 @@
 c¡'ÎqüVp¶Vp% õsµ‚+¨'ÅB&ܶŒ¡¨S ”#.S¸ɉ¢¡þÈ€i˜“%Ë’à0ŸHøýxºaüðཆÍw‹Ån·cÍèI€?šÅi×£û,[®ñø‹M]´x¯_„+ÂS€3BzÔ9GãëüPQ!élzVÀÝw*ÏDüJa®Gþqö!æHÙdsDo
 endstream
 endobj
-6609 0 obj <<
+6608 0 obj <<
 /Type /Page
-/Contents 6610 0 R
-/Resources 6608 0 R
+/Contents 6609 0 R
+/Resources 6607 0 R
 /MediaBox [0 0 612 792]
-/Parent 6616 0 R
-/Annots [ 6606 0 R 6615 0 R ]
+/Parent 6615 0 R
+/Annots [ 6605 0 R 6614 0 R ]
 >> endobj
-6606 0 obj <<
+6605 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 129.215 511.352 140.871]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.microsoft.com/windows2000/techinfo/planning/security/kerbsteps.asp)>>
 >> endobj
-6615 0 obj <<
+6614 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [150.705 116.961 213.892 127.721]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.microsoft.com/windows2000/techinfo/planning/security/kerbsteps.asp)>>
 >> endobj
+6610 0 obj <<
+/D [6608 0 R /XYZ 151.701 685.529 null]
+>> endobj
 6611 0 obj <<
-/D [6609 0 R /XYZ 151.701 685.529 null]
+/D [6608 0 R /XYZ 151.701 626.674 null]
 >> endobj
 6612 0 obj <<
-/D [6609 0 R /XYZ 151.701 626.674 null]
+/D [6608 0 R /XYZ 151.701 627.251 null]
 >> endobj
-6613 0 obj <<
-/D [6609 0 R /XYZ 151.701 627.251 null]
->> endobj
 490 0 obj <<
-/D [6609 0 R /XYZ 151.701 365.3 null]
+/D [6608 0 R /XYZ 151.701 365.3 null]
 >> endobj
-6614 0 obj <<
-/D [6609 0 R /XYZ 151.701 338.595 null]
+6613 0 obj <<
+/D [6608 0 R /XYZ 151.701 338.595 null]
 >> endobj
-6608 0 obj <<
+6607 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F4 5484 0 R /F85 5513 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R /F17 3698 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6619 0 obj <<
+6618 0 obj <<
 /Length 1185      
 /Filter /FlateDecode
 >>
@@ -23548,28 +23856,28 @@
 ìï.}1ýjõãüÊsúÿôÀá]8ṳ́ŒÂàõž{gR—a×;<3Õó’‹ÃëÎ÷Ô¼ááeQ‡cÂÝÁûΣ½÷µ‹©üUc8 & ïž^ù}8$ʺѼnÛÍ«ÓÓÝn‡3Ѧ¸ªW§uË?ùèÄí§öÇr[@v^wÐžÞŽC±ã²NóìÓ/dí_d)Ê
 endstream
 endobj
-6618 0 obj <<
+6617 0 obj <<
 /Type /Page
-/Contents 6619 0 R
-/Resources 6617 0 R
+/Contents 6618 0 R
+/Resources 6616 0 R
 /MediaBox [0 0 612 792]
-/Parent 6616 0 R
-/Annots [ 6607 0 R ]
+/Parent 6615 0 R
+/Annots [ 6606 0 R ]
 >> endobj
-6607 0 obj <<
+6606 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 346.886 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.ietf.org/rfc/rfc1510.txt?number=1510)>>
 >> endobj
-6620 0 obj <<
-/D [6618 0 R /XYZ 100.892 685.529 null]
+6619 0 obj <<
+/D [6617 0 R /XYZ 100.892 685.529 null]
 >> endobj
-6617 0 obj <<
+6616 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F29 5413 0 R /F53 3738 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6626 0 obj <<
+6625 0 obj <<
 /Length 1926      
 /Filter /FlateDecode
 >>
@@ -23594,22 +23902,22 @@
 %°´Àcò˜ªM~²:5ãâ_a˜šÂR)â|7…ñ<ÕßÑ@÷Y–ÞKýåzMAž¤~Ë02c¸p#@’þ[ \‡÷cKÛ”¹€±-XÐkÉgÈ?O—ÄÞ·Ç°¨,ËÚqAαZ%ìX¤¶ïÍƹNÝ(ÙŸ9`A…©†’>>»ip„mÏ?šÖ…¾$ÂÒ÷[wÞ*3ž{ÀíþØò_(¢ÿ&øà
 endstream
 endobj
-6625 0 obj <<
+6624 0 obj <<
 /Type /Page
-/Contents 6626 0 R
-/Resources 6624 0 R
+/Contents 6625 0 R
+/Resources 6623 0 R
 /MediaBox [0 0 612 792]
-/Parent 6616 0 R
+/Parent 6615 0 R
 >> endobj
-6627 0 obj <<
-/D [6625 0 R /XYZ 151.701 685.529 null]
+6626 0 obj <<
+/D [6624 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6624 0 obj <<
+6623 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F85 5513 0 R /F88 5678 0 R /F72 5679 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6630 0 obj <<
+6629 0 obj <<
 /Length 1658      
 /Filter /FlateDecode
 >>
@@ -23634,49 +23942,49 @@
 dXø#÷¥rKÝiž9|F;|í(c‡4\`oG4bzú—´ã[é ©Q'Ü HÏ:þ8ë`ó‚úK¥¤QÿúÆ/©  LbF
 endstream
 endobj
-6629 0 obj <<
+6628 0 obj <<
 /Type /Page
-/Contents 6630 0 R
-/Resources 6628 0 R
+/Contents 6629 0 R
+/Resources 6627 0 R
 /MediaBox [0 0 612 792]
-/Parent 6616 0 R
-/Annots [ 6621 0 R 6622 0 R 6623 0 R ]
+/Parent 6615 0 R
+/Annots [ 6620 0 R 6621 0 R 6622 0 R ]
 >> endobj
-6621 0 obj <<
+6620 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [113.142 632.997 175.653 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (ads-test-smbclient) >>
 >> endobj
-6622 0 obj <<
+6621 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.151 632.997 266.663 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (ads-create-machine-account) >>
 >> endobj
-6623 0 obj <<
+6622 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [289.345 632.997 351.856 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (ads-test-server) >>
 >> endobj
-6631 0 obj <<
-/D [6629 0 R /XYZ 100.892 685.529 null]
+6630 0 obj <<
+/D [6628 0 R /XYZ 100.892 685.529 null]
 >> endobj
 494 0 obj <<
-/D [6629 0 R /XYZ 100.892 605.897 null]
+/D [6628 0 R /XYZ 100.892 605.897 null]
 >> endobj
-6632 0 obj <<
-/D [6629 0 R /XYZ 100.892 579.042 null]
+6631 0 obj <<
+/D [6628 0 R /XYZ 100.892 579.042 null]
 >> endobj
-6628 0 obj <<
+6627 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6637 0 obj <<
+6636 0 obj <<
 /Length 1845      
 /Filter /FlateDecode
 >>
@@ -23694,34 +24002,34 @@
 ‰Á‰FāyM„çDJ~ô	:ì ý/2¦«ü³ŒÓ«ŒÒøýd|Ä
 endstream
 endobj
-6636 0 obj <<
+6635 0 obj <<
 /Type /Page
-/Contents 6637 0 R
-/Resources 6635 0 R
+/Contents 6636 0 R
+/Resources 6634 0 R
 /MediaBox [0 0 612 792]
-/Parent 6616 0 R
+/Parent 6615 0 R
 >> endobj
-6638 0 obj <<
-/D [6636 0 R /XYZ 151.701 685.529 null]
+6637 0 obj <<
+/D [6635 0 R /XYZ 151.701 685.529 null]
 >> endobj
 498 0 obj <<
-/D [6636 0 R /XYZ 151.701 592.997 null]
+/D [6635 0 R /XYZ 151.701 592.997 null]
 >> endobj
-6639 0 obj <<
-/D [6636 0 R /XYZ 151.701 568.742 null]
+6638 0 obj <<
+/D [6635 0 R /XYZ 151.701 568.742 null]
 >> endobj
 502 0 obj <<
-/D [6636 0 R /XYZ 151.701 368.559 null]
+/D [6635 0 R /XYZ 151.701 368.559 null]
 >> endobj
+6633 0 obj <<
+/D [6635 0 R /XYZ 151.701 341.979 null]
+>> endobj
 6634 0 obj <<
-/D [6636 0 R /XYZ 151.701 341.979 null]
->> endobj
-6635 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F85 5513 0 R /F88 5678 0 R /F72 5679 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6642 0 obj <<
+6641 0 obj <<
 /Length 2160      
 /Filter /FlateDecode
 >>
@@ -23756,45 +24064,45 @@
 §!E¬æ‚Õpš¼‰€è·/þÁì:\'æö¿¸È0»Ç»äˆ“Ÿn€:=[LR+ÿ™%ãÜ
 endstream
 endobj
-6641 0 obj <<
+6640 0 obj <<
 /Type /Page
-/Contents 6642 0 R
-/Resources 6640 0 R
+/Contents 6641 0 R
+/Resources 6639 0 R
 /MediaBox [0 0 612 792]
-/Parent 6616 0 R
+/Parent 6615 0 R
 >> endobj
-6643 0 obj <<
-/D [6641 0 R /XYZ 100.892 685.529 null]
+6642 0 obj <<
+/D [6640 0 R /XYZ 100.892 685.529 null]
 >> endobj
 506 0 obj <<
-/D [6641 0 R /XYZ 100.892 660.623 null]
+/D [6640 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6633 0 obj <<
-/D [6641 0 R /XYZ 100.892 641.703 null]
+6632 0 obj <<
+/D [6640 0 R /XYZ 100.892 641.703 null]
 >> endobj
 510 0 obj <<
-/D [6641 0 R /XYZ 100.892 578.568 null]
+/D [6640 0 R /XYZ 100.892 578.568 null]
 >> endobj
-6644 0 obj <<
-/D [6641 0 R /XYZ 100.892 553.836 null]
+6643 0 obj <<
+/D [6640 0 R /XYZ 100.892 553.836 null]
 >> endobj
 514 0 obj <<
-/D [6641 0 R /XYZ 100.892 463.636 null]
+/D [6640 0 R /XYZ 100.892 463.636 null]
 >> endobj
+6644 0 obj <<
+/D [6640 0 R /XYZ 100.892 422.536 null]
+>> endobj
 6645 0 obj <<
-/D [6641 0 R /XYZ 100.892 422.536 null]
+/D [6640 0 R /XYZ 100.892 295.393 null]
 >> endobj
 6646 0 obj <<
-/D [6641 0 R /XYZ 100.892 295.393 null]
+/D [6640 0 R /XYZ 100.892 296.273 null]
 >> endobj
-6647 0 obj <<
-/D [6641 0 R /XYZ 100.892 296.273 null]
->> endobj
-6640 0 obj <<
+6639 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F85 5513 0 R /F59 4373 0 R /F52 3737 0 R /F4 5484 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6650 0 obj <<
+6649 0 obj <<
 /Length 1946      
 /Filter /FlateDecode
 >>
@@ -23818,39 +24126,39 @@
 9õ󤬾˜®Ž/9 ßバdú¿µ5(_iŠ¤Õ“>0]•B%ÉWžÂÇ~ÿÈߏã°X†|FDBÎy ®¸óÄ	Ž: n'¢ßíã÷ogBèp$ÍÀˆ–è,D½æ|‡Ï±(è`hB[ê »^Pn£È¹y 	Ù‰©Šs\<õ•üFT©ç`Ï1n‡ý›Î^&½á¨:øYÃÃ'}ϝô¤¶[hÒ¬×96ø²AhÅZZHê1~á{Ã-‚î#¾Æ<>/ > ÿ@ öØ¥j1mùÔH3`[º–{fù‡EY†c “`XÆwmyy–…Œ³4äW~Uàuû«†ÀÇçÚn6[Ë,†ÇwXgÄ©ïǹtK‹Xg‡SwÃûl=‹е®–~e-w¸°™ŒŸÞõ:v`Î/ ª=ƒCï	<§½ƒ¼kžz{^·Ž+ͼ±Éã	zµã½ÈñŒÄÆÚŒ\x®;é¨ÍÒhÓ\ü!záV‰ÞRß	„ÇlÛó°¶xîÞÖ`eØ•'¸a ª·ŒÙŒ,¼ðnaµáQã¼úÁ¿²FjIÁÊ•Rðø«FºüO~ð„ï»ÛÅ¿­½êß
 endstream
 endobj
-6649 0 obj <<
+6648 0 obj <<
 /Type /Page
-/Contents 6650 0 R
-/Resources 6648 0 R
+/Contents 6649 0 R
+/Resources 6647 0 R
 /MediaBox [0 0 612 792]
-/Parent 6655 0 R
+/Parent 6654 0 R
 >> endobj
-6651 0 obj <<
-/D [6649 0 R /XYZ 151.701 685.529 null]
+6650 0 obj <<
+/D [6648 0 R /XYZ 151.701 685.529 null]
 >> endobj
 518 0 obj <<
-/D [6649 0 R /XYZ 151.701 660.623 null]
+/D [6648 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6652 0 obj <<
-/D [6649 0 R /XYZ 151.701 641.209 null]
+6651 0 obj <<
+/D [6648 0 R /XYZ 151.701 641.209 null]
 >> endobj
 522 0 obj <<
-/D [6649 0 R /XYZ 151.701 505.145 null]
+/D [6648 0 R /XYZ 151.701 505.145 null]
 >> endobj
-6653 0 obj <<
-/D [6649 0 R /XYZ 151.701 479.561 null]
+6652 0 obj <<
+/D [6648 0 R /XYZ 151.701 479.561 null]
 >> endobj
 526 0 obj <<
-/D [6649 0 R /XYZ 151.701 247.284 null]
+/D [6648 0 R /XYZ 151.701 247.284 null]
 >> endobj
-6654 0 obj <<
-/D [6649 0 R /XYZ 151.701 217.255 null]
+6653 0 obj <<
+/D [6648 0 R /XYZ 151.701 217.255 null]
 >> endobj
-6648 0 obj <<
+6647 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6658 0 obj <<
+6657 0 obj <<
 /Length 1747      
 /Filter /FlateDecode
 >>
@@ -23873,27 +24181,27 @@
 ÷YL;’zé÷/T“[ÑÔBø.†”«<–EHôª³íÇ°ßq°.Ñ(:õç5¹²«œ[ñ˜©N}hߎ³ƒÌ?¹˜ÃvGÜï(KXÉi6î	…¤OàÒ“E´@ØáÊ€!÷HÜÎìíØPõÁ™¸ÇÞúYÙ6ÈuxÌgpül¼|7[K?[Ý{É«ØÎüÃœ ÄȆ1c‹Ù“˜G §cœx²¤cg'£m7Ÿ:È?£vÐJ7SAó¬êiVšM&™¿ i§¦§‚eŸžeÈC¢ßܾzyG•0À„éÐó—Aø±]ý‚
 endstream
 endobj
-6657 0 obj <<
+6656 0 obj <<
 /Type /Page
-/Contents 6658 0 R
-/Resources 6656 0 R
+/Contents 6657 0 R
+/Resources 6655 0 R
 /MediaBox [0 0 612 792]
-/Parent 6655 0 R
+/Parent 6654 0 R
 >> endobj
-6659 0 obj <<
-/D [6657 0 R /XYZ 100.892 685.529 null]
+6658 0 obj <<
+/D [6656 0 R /XYZ 100.892 685.529 null]
 >> endobj
 530 0 obj <<
-/D [6657 0 R /XYZ 100.892 363.642 null]
+/D [6656 0 R /XYZ 100.892 363.642 null]
 >> endobj
-6660 0 obj <<
-/D [6657 0 R /XYZ 100.892 339.803 null]
+6659 0 obj <<
+/D [6656 0 R /XYZ 100.892 339.803 null]
 >> endobj
-6656 0 obj <<
+6655 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F51 3736 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6663 0 obj <<
+6662 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -23901,20 +24209,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-6662 0 obj <<
+6661 0 obj <<
 /Type /Page
-/Contents 6663 0 R
-/Resources 6661 0 R
+/Contents 6662 0 R
+/Resources 6660 0 R
 /MediaBox [0 0 612 792]
-/Parent 6655 0 R
+/Parent 6654 0 R
 >> endobj
-6664 0 obj <<
-/D [6662 0 R /XYZ 151.701 685.529 null]
+6663 0 obj <<
+/D [6661 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6661 0 obj <<
+6660 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-6667 0 obj <<
+6666 0 obj <<
 /Length 1337      
 /Filter /FlateDecode
 >>
@@ -23925,33 +24233,33 @@
 Ë´3ºÞÙÞ£40·­0g2a¡\fâìæ®s|ºš‡hƵvšÇMœ%4‘èô—	Wƒd‰}…_¼2‹kü¤W( ï6yPd	=Tn¼…¥ß ʲˆÚéÃØôÇ•žµpbV!¸e|5¾Ó¥„Áè‡1²l[æüÅ Yššĝ9gúÙ UW#b•‹Œ¼ž÷©+AïÙ!LWɵÁ\—Þ)„5!Ë"ã7w¥'Ì,rš‘$¸ngà›³Hêˆ/ÕÑEjݨ/)ìˆú“Ȫ)”jêxkîÏíäJL½ÆÓG¼›ýÀyÙ)`ºÞ¡$íwé®#ûµ!åd½Ìòu«ÛDÀÚ‡_?t@¾©n×l;ý²ï ¹'4Cí†fœ4]Ò¸¤” å¯e휞óÀâ€Ã¦šg…ç5¼§ÙÏ·ñk£þNóâËËwnÚq%"¶‘ O”d¤¿MfÂI4«ôÃ9@¹eÉŠëé a^fðÎùE$ËLÜóòe;ãu¹PË·tR\ïXÜ×ù”yû.ú€@c5ìÃ2ãÀ«iäG8³‚ðv³´F‡Ø s®#¹×gNNÛ½xŒÌÇP“/ŒÏ½ùóTá'ŒÇëC&·/Ø<8ÛÑ…¬Kx¯4|ÞwGè'¼u$Mz”yÝ/hçæAwch}\Ó;s KŒ/®#4߁7mrùSóö!–¥Ê°Py ž†0îȶŒåüùNWpU
 endstream
 endobj
-6666 0 obj <<
+6665 0 obj <<
 /Type /Page
-/Contents 6667 0 R
-/Resources 6665 0 R
+/Contents 6666 0 R
+/Resources 6664 0 R
 /MediaBox [0 0 612 792]
-/Parent 6655 0 R
+/Parent 6654 0 R
 >> endobj
-6668 0 obj <<
-/D [6666 0 R /XYZ 100.892 685.529 null]
+6667 0 obj <<
+/D [6665 0 R /XYZ 100.892 685.529 null]
 >> endobj
 534 0 obj <<
-/D [6666 0 R /XYZ 100.892 660.623 null]
+/D [6665 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3775 0 obj <<
-/D [6666 0 R /XYZ 100.892 495.155 null]
+/D [6665 0 R /XYZ 100.892 495.155 null]
 >> endobj
 538 0 obj <<
-/D [6666 0 R /XYZ 100.892 384.044 null]
+/D [6665 0 R /XYZ 100.892 384.044 null]
 >> endobj
-6669 0 obj <<
-/D [6666 0 R /XYZ 100.892 349.264 null]
+6668 0 obj <<
+/D [6665 0 R /XYZ 100.892 349.264 null]
 >> endobj
-6665 0 obj <<
+6664 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6676 0 obj <<
+6675 0 obj <<
 /Length 2169      
 /Filter /FlateDecode
 >>
@@ -23982,68 +24290,68 @@
 NáÇë
 endstream
 endobj
-6675 0 obj <<
+6674 0 obj <<
 /Type /Page
-/Contents 6676 0 R
-/Resources 6674 0 R
+/Contents 6675 0 R
+/Resources 6673 0 R
 /MediaBox [0 0 612 792]
-/Parent 6655 0 R
-/Annots [ 6670 0 R 6679 0 R 6671 0 R 6672 0 R ]
+/Parent 6654 0 R
+/Annots [ 6669 0 R 6678 0 R 6670 0 R 6671 0 R ]
 >> endobj
-6670 0 obj <<
+6669 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [480.269 379.329 511.352 392.23]
 /Subtype /Link
 /A << /S /GoTo /D (pam) >>
 >> endobj
-6679 0 obj <<
+6678 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 365.78 395.545 378.681]
 /Subtype /Link
 /A << /S /GoTo /D (pam) >>
 >> endobj
-6671 0 obj <<
+6670 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 218.762 221.848 230.452]
 /Subtype /Link
 /A << /S /GoTo /D (simplynice) >>
 >> endobj
-6672 0 obj <<
+6671 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [247.551 218.762 311.573 230.452]
 /Subtype /Link
 /A << /S /GoTo /D (SimplePrintServer) >>
 >> endobj
-6677 0 obj <<
-/D [6675 0 R /XYZ 151.701 685.529 null]
+6676 0 obj <<
+/D [6674 0 R /XYZ 151.701 685.529 null]
 >> endobj
 542 0 obj <<
-/D [6675 0 R /XYZ 151.701 660.623 null]
+/D [6674 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6678 0 obj <<
-/D [6675 0 R /XYZ 151.701 638.691 null]
+6677 0 obj <<
+/D [6674 0 R /XYZ 151.701 638.691 null]
 >> endobj
 546 0 obj <<
-/D [6675 0 R /XYZ 151.701 268.616 null]
+/D [6674 0 R /XYZ 151.701 268.616 null]
 >> endobj
-6680 0 obj <<
-/D [6675 0 R /XYZ 151.701 239.866 null]
+6679 0 obj <<
+/D [6674 0 R /XYZ 151.701 239.866 null]
 >> endobj
 550 0 obj <<
-/D [6675 0 R /XYZ 151.701 179.318 null]
+/D [6674 0 R /XYZ 151.701 179.318 null]
 >> endobj
 5589 0 obj <<
-/D [6675 0 R /XYZ 151.701 155.299 null]
+/D [6674 0 R /XYZ 151.701 155.299 null]
 >> endobj
-6674 0 obj <<
+6673 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6685 0 obj <<
+6684 0 obj <<
 /Length 2812      
 /Filter /FlateDecode
 >>
@@ -24075,84 +24383,84 @@
 wlh¡•°‰YÇtã@8&„¿ä%ˆ„ÿÅðb ”-^ÃêÅ™é‰kĵdñÃ'Áî‚_h£Y=HqJYÇtB8§•ó1;^ÂøhP(†>úõHnbə隥97 f|Å“@ŸBaH`\Vö¯üš5½î¥d›>òi¦fOÂ1¨ÞÀÎíbÓ©`ÀõÐôÚà°öÆÞmá
 endstream
 endobj
-6684 0 obj <<
+6683 0 obj <<
 /Type /Page
-/Contents 6685 0 R
-/Resources 6683 0 R
+/Contents 6684 0 R
+/Resources 6682 0 R
 /MediaBox [0 0 612 792]
-/Parent 6655 0 R
-/Annots [ 6673 0 R 6682 0 R ]
+/Parent 6654 0 R
+/Annots [ 6672 0 R 6681 0 R ]
 >> endobj
-6673 0 obj <<
+6672 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [147.894 646.546 217.34 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (simplynice) >>
 >> endobj
-6682 0 obj <<
+6681 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [112.394 352.801 180.977 364.491]
 /Subtype /Link
 /A << /S /GoTo /D (simplynice) >>
 >> endobj
-6686 0 obj <<
-/D [6684 0 R /XYZ 100.892 685.529 null]
+6685 0 obj <<
+/D [6683 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5051 0 obj <<
-/D [6684 0 R /XYZ 100.892 582.804 null]
+/D [6683 0 R /XYZ 100.892 582.804 null]
 >> endobj
-6681 0 obj <<
-/D [6684 0 R /XYZ 100.892 565.934 null]
+6680 0 obj <<
+/D [6683 0 R /XYZ 100.892 565.934 null]
 >> endobj
+6686 0 obj <<
+/D [6683 0 R /XYZ 100.892 559.956 null]
+>> endobj
 6687 0 obj <<
-/D [6684 0 R /XYZ 100.892 559.956 null]
+/D [6683 0 R /XYZ 100.892 566.233 null]
 >> endobj
 6688 0 obj <<
-/D [6684 0 R /XYZ 100.892 566.233 null]
+/D [6683 0 R /XYZ 100.892 554.277 null]
 >> endobj
 6689 0 obj <<
-/D [6684 0 R /XYZ 100.892 554.277 null]
+/D [6683 0 R /XYZ 100.892 542.322 null]
 >> endobj
 6690 0 obj <<
-/D [6684 0 R /XYZ 100.892 542.322 null]
+/D [6683 0 R /XYZ 100.892 530.367 null]
 >> endobj
 6691 0 obj <<
-/D [6684 0 R /XYZ 100.892 530.367 null]
+/D [6683 0 R /XYZ 100.892 518.412 null]
 >> endobj
 6692 0 obj <<
-/D [6684 0 R /XYZ 100.892 518.412 null]
+/D [6683 0 R /XYZ 100.892 506.457 null]
 >> endobj
 6693 0 obj <<
-/D [6684 0 R /XYZ 100.892 506.457 null]
+/D [6683 0 R /XYZ 100.892 494.502 null]
 >> endobj
 6694 0 obj <<
-/D [6684 0 R /XYZ 100.892 494.502 null]
+/D [6683 0 R /XYZ 100.892 482.546 null]
 >> endobj
 6695 0 obj <<
-/D [6684 0 R /XYZ 100.892 482.546 null]
+/D [6683 0 R /XYZ 100.892 470.591 null]
 >> endobj
 6696 0 obj <<
-/D [6684 0 R /XYZ 100.892 470.591 null]
+/D [6683 0 R /XYZ 100.892 458.636 null]
 >> endobj
 6697 0 obj <<
-/D [6684 0 R /XYZ 100.892 458.636 null]
+/D [6683 0 R /XYZ 100.892 446.681 null]
 >> endobj
-6698 0 obj <<
-/D [6684 0 R /XYZ 100.892 446.681 null]
->> endobj
 554 0 obj <<
-/D [6684 0 R /XYZ 100.892 201.402 null]
+/D [6683 0 R /XYZ 100.892 201.402 null]
 >> endobj
 5590 0 obj <<
-/D [6684 0 R /XYZ 100.892 173.117 null]
+/D [6683 0 R /XYZ 100.892 173.117 null]
 >> endobj
-6683 0 obj <<
+6682 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R /F4 5484 0 R /F59 4373 0 R /F17 3698 0 R /F88 5678 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6702 0 obj <<
+6701 0 obj <<
 /Length 1803      
 /Filter /FlateDecode
 >>
@@ -24176,41 +24484,41 @@
 ~ÓÐÏ$.š\$ÅÅÝêRÞɪTÜ“©¶dämŒÏXl(½pµº ÿ8*çJÿ¿¾ÿk^¡#Ð6ûø?x…ß–bªEPæ¥%ÒL¼ÇžÛðª@Ž¼KmWFm‘f‹tÞä`>„‚Z^}DY¤ÌQ–îÄ6ûŠy Ê¡5ž4a ˆRÁÜÓ!MØšÁ/ànäš{ÞÇËÅ¢ܬZª¶WrZj/wZÒg)Ç_P±(å‰tN¢#ÆQU?öX8ƒ´>sà8¾Ú­þæúÎ
 endstream
 endobj
-6701 0 obj <<
+6700 0 obj <<
 /Type /Page
-/Contents 6702 0 R
-/Resources 6700 0 R
+/Contents 6701 0 R
+/Resources 6699 0 R
 /MediaBox [0 0 612 792]
-/Parent 6708 0 R
-/Annots [ 6699 0 R ]
+/Parent 6707 0 R
+/Annots [ 6698 0 R ]
 >> endobj
-6699 0 obj <<
+6698 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [296.235 612.067 489.84 624.969]
 /Subtype /Link
 /A << /S /GoTo /D (CUPS-printing) >>
 >> endobj
+6702 0 obj <<
+/D [6700 0 R /XYZ 151.701 685.529 null]
+>> endobj
 6703 0 obj <<
-/D [6701 0 R /XYZ 151.701 685.529 null]
+/D [6700 0 R /XYZ 151.701 660.623 null]
 >> endobj
 6704 0 obj <<
-/D [6701 0 R /XYZ 151.701 660.623 null]
+/D [6700 0 R /XYZ 151.701 647.543 null]
 >> endobj
 6705 0 obj <<
-/D [6701 0 R /XYZ 151.701 647.543 null]
+/D [6700 0 R /XYZ 151.701 599.514 null]
 >> endobj
 6706 0 obj <<
-/D [6701 0 R /XYZ 151.701 599.514 null]
+/D [6700 0 R /XYZ 151.701 552.698 null]
 >> endobj
-6707 0 obj <<
-/D [6701 0 R /XYZ 151.701 552.698 null]
->> endobj
-6700 0 obj <<
+6699 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F88 5678 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6715 0 obj <<
+6714 0 obj <<
 /Length 2572      
 /Filter /FlateDecode
 >>
@@ -24239,108 +24547,108 @@
 ·æTþ‡Ô†YŒÙŸº^Ô°üüüpÏßÁ¨­{CQ¦ Ýš7é_ðyµí^Ðò†õ‘RBsÄÅ ‚PqçQT-£Pdpö¾ë à,ÁR9 ÛwžÕIa~€0 MX6å ˆ~SúÔÿºt»ã
 endstream
 endobj
-6714 0 obj <<
+6713 0 obj <<
 /Type /Page
-/Contents 6715 0 R
-/Resources 6713 0 R
+/Contents 6714 0 R
+/Resources 6712 0 R
 /MediaBox [0 0 612 792]
-/Parent 6708 0 R
-/Annots [ 6709 0 R 6710 0 R 6735 0 R 6711 0 R ]
+/Parent 6707 0 R
+/Annots [ 6708 0 R 6709 0 R 6734 0 R 6710 0 R ]
 >> endobj
-6709 0 obj <<
+6708 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [320.44 568.493 390.16 580.183]
 /Subtype /Link
 /A << /S /GoTo /D (AnonPtrSvr) >>
 >> endobj
-6710 0 obj <<
+6709 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.682 158.503 403.108 170.495]
 /Subtype /Link
 /A << /S /GoTo /D (CUPS-printing) >>
 >> endobj
-6735 0 obj <<
+6734 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [144.531 145.256 170.735 156.946]
 /Subtype /Link
 /A << /S /GoTo /D (CUPS-printing) >>
 >> endobj
-6711 0 obj <<
+6710 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [175.41 145.256 242.311 156.946]
 /Subtype /Link
 /A << /S /GoTo /D (cups-raw) >>
 >> endobj
-6716 0 obj <<
-/D [6714 0 R /XYZ 100.892 685.529 null]
+6715 0 obj <<
+/D [6713 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5052 0 obj <<
-/D [6714 0 R /XYZ 100.892 554.002 null]
+/D [6713 0 R /XYZ 100.892 554.002 null]
 >> endobj
+6716 0 obj <<
+/D [6713 0 R /XYZ 100.892 537.132 null]
+>> endobj
 6717 0 obj <<
-/D [6714 0 R /XYZ 100.892 537.132 null]
+/D [6713 0 R /XYZ 100.892 531.154 null]
 >> endobj
 6718 0 obj <<
-/D [6714 0 R /XYZ 100.892 531.154 null]
+/D [6713 0 R /XYZ 100.892 537.431 null]
 >> endobj
 6719 0 obj <<
-/D [6714 0 R /XYZ 100.892 537.431 null]
+/D [6713 0 R /XYZ 100.892 525.476 null]
 >> endobj
 6720 0 obj <<
-/D [6714 0 R /XYZ 100.892 525.476 null]
+/D [6713 0 R /XYZ 100.892 513.52 null]
 >> endobj
 6721 0 obj <<
-/D [6714 0 R /XYZ 100.892 513.52 null]
+/D [6713 0 R /XYZ 100.892 501.565 null]
 >> endobj
 6722 0 obj <<
-/D [6714 0 R /XYZ 100.892 501.565 null]
+/D [6713 0 R /XYZ 100.892 489.61 null]
 >> endobj
 6723 0 obj <<
-/D [6714 0 R /XYZ 100.892 489.61 null]
+/D [6713 0 R /XYZ 100.892 477.655 null]
 >> endobj
 6724 0 obj <<
-/D [6714 0 R /XYZ 100.892 477.655 null]
+/D [6713 0 R /XYZ 100.892 465.7 null]
 >> endobj
 6725 0 obj <<
-/D [6714 0 R /XYZ 100.892 465.7 null]
+/D [6713 0 R /XYZ 100.892 453.745 null]
 >> endobj
 6726 0 obj <<
-/D [6714 0 R /XYZ 100.892 453.745 null]
+/D [6713 0 R /XYZ 100.892 441.789 null]
 >> endobj
 6727 0 obj <<
-/D [6714 0 R /XYZ 100.892 441.789 null]
+/D [6713 0 R /XYZ 100.892 429.834 null]
 >> endobj
 6728 0 obj <<
-/D [6714 0 R /XYZ 100.892 429.834 null]
+/D [6713 0 R /XYZ 100.892 417.879 null]
 >> endobj
 6729 0 obj <<
-/D [6714 0 R /XYZ 100.892 417.879 null]
+/D [6713 0 R /XYZ 100.892 405.924 null]
 >> endobj
 6730 0 obj <<
-/D [6714 0 R /XYZ 100.892 405.924 null]
+/D [6713 0 R /XYZ 100.892 393.969 null]
 >> endobj
 6731 0 obj <<
-/D [6714 0 R /XYZ 100.892 393.969 null]
+/D [6713 0 R /XYZ 100.892 382.014 null]
 >> endobj
 6732 0 obj <<
-/D [6714 0 R /XYZ 100.892 382.014 null]
+/D [6713 0 R /XYZ 100.892 370.058 null]
 >> endobj
 6733 0 obj <<
-/D [6714 0 R /XYZ 100.892 370.058 null]
+/D [6713 0 R /XYZ 100.892 358.103 null]
 >> endobj
-6734 0 obj <<
-/D [6714 0 R /XYZ 100.892 358.103 null]
->> endobj
-6713 0 obj <<
+6712 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R /F4 5484 0 R /F59 4373 0 R /F88 5678 0 R /F72 5679 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6738 0 obj <<
+6737 0 obj <<
 /Length 920       
 /Filter /FlateDecode
 >>
@@ -24353,35 +24661,35 @@
 ›»À=<Æ	­¤³i+|„ÚºvœF~ñ»›Nøqÿš 
 endstream
 endobj
-6737 0 obj <<
+6736 0 obj <<
 /Type /Page
-/Contents 6738 0 R
-/Resources 6736 0 R
+/Contents 6737 0 R
+/Resources 6735 0 R
 /MediaBox [0 0 612 792]
-/Parent 6708 0 R
-/Annots [ 6712 0 R ]
+/Parent 6707 0 R
+/Annots [ 6711 0 R ]
 >> endobj
-6712 0 obj <<
+6711 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.005 646.546 297.532 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (AnonPtrSvr) >>
 >> endobj
-6739 0 obj <<
-/D [6737 0 R /XYZ 151.701 685.529 null]
+6738 0 obj <<
+/D [6736 0 R /XYZ 151.701 685.529 null]
 >> endobj
 558 0 obj <<
-/D [6737 0 R /XYZ 151.701 538.38 null]
+/D [6736 0 R /XYZ 151.701 538.38 null]
 >> endobj
-6740 0 obj <<
-/D [6737 0 R /XYZ 151.701 509.602 null]
+6739 0 obj <<
+/D [6736 0 R /XYZ 151.701 509.602 null]
 >> endobj
-6736 0 obj <<
+6735 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F85 5513 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6743 0 obj <<
+6742 0 obj <<
 /Length 1138      
 /Filter /FlateDecode
 >>
@@ -24393,39 +24701,39 @@
 w… ªúùfR+"=iwHÓ˜5nB	³#'Å+©å“¥ŸìÿÎüËôê"å‡àr(PÝh %¦s\"áˆþJöÏ+z|6pöË-ÜŽÃZjzöÿ2¤¥³ÿbzLèðÆÎݶ•}¯¦ŽX²Qûaû9LÃ+øJùóÐÂC/1\²4Kíõâ™û©âÑqhð‡û'©ÁàŸ
 endstream
 endobj
-6742 0 obj <<
+6741 0 obj <<
 /Type /Page
-/Contents 6743 0 R
-/Resources 6741 0 R
+/Contents 6742 0 R
+/Resources 6740 0 R
 /MediaBox [0 0 612 792]
-/Parent 6708 0 R
+/Parent 6707 0 R
 >> endobj
-6744 0 obj <<
-/D [6742 0 R /XYZ 100.892 685.529 null]
+6743 0 obj <<
+/D [6741 0 R /XYZ 100.892 685.529 null]
 >> endobj
 562 0 obj <<
-/D [6742 0 R /XYZ 100.892 660.623 null]
+/D [6741 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3776 0 obj <<
-/D [6742 0 R /XYZ 100.892 471.539 null]
+/D [6741 0 R /XYZ 100.892 471.539 null]
 >> endobj
 566 0 obj <<
-/D [6742 0 R /XYZ 100.892 471.539 null]
+/D [6741 0 R /XYZ 100.892 471.539 null]
 >> endobj
-6745 0 obj <<
-/D [6742 0 R /XYZ 100.892 439.895 null]
+6744 0 obj <<
+/D [6741 0 R /XYZ 100.892 439.895 null]
 >> endobj
 570 0 obj <<
-/D [6742 0 R /XYZ 100.892 259.804 null]
+/D [6741 0 R /XYZ 100.892 259.804 null]
 >> endobj
-6746 0 obj <<
-/D [6742 0 R /XYZ 100.892 230.281 null]
+6745 0 obj <<
+/D [6741 0 R /XYZ 100.892 230.281 null]
 >> endobj
-6741 0 obj <<
+6740 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F51 3736 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6755 0 obj <<
+6754 0 obj <<
 /Length 2178      
 /Filter /FlateDecode
 >>
@@ -24458,54 +24766,54 @@
 §-X.Ó\ 	SÌÛé)‹‘Y¿Ø_cTo脪yh»ƒC/´¿Úß»?)kÏY«ŽX «1Å8ÿ¢ñÍÝ5sMf‹ÿMÌbÒÂ*³'³ê	Û;Ç£ûÑM”‹X˜¾?í®þ?¯Öq
 endstream
 endobj
-6754 0 obj <<
+6753 0 obj <<
 /Type /Page
-/Contents 6755 0 R
-/Resources 6753 0 R
+/Contents 6754 0 R
+/Resources 6752 0 R
 /MediaBox [0 0 612 792]
-/Parent 6708 0 R
-/Annots [ 6747 0 R 6749 0 R ]
+/Parent 6707 0 R
+/Annots [ 6746 0 R 6748 0 R ]
 >> endobj
-6747 0 obj <<
+6746 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.26 241.52 282.616 253.21]
 /Subtype /Link
 /A << /S /GoTo /D (WXPP002) >>
 >> endobj
-6749 0 obj <<
+6748 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.463 165.669 466.819 178.57]
 /Subtype /Link
 /A << /S /GoTo /D (WXPP003) >>
 >> endobj
-6756 0 obj <<
-/D [6754 0 R /XYZ 151.701 685.529 null]
+6755 0 obj <<
+/D [6753 0 R /XYZ 151.701 685.529 null]
 >> endobj
 574 0 obj <<
-/D [6754 0 R /XYZ 151.701 660.623 null]
+/D [6753 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6757 0 obj <<
-/D [6754 0 R /XYZ 151.701 641.039 null]
+6756 0 obj <<
+/D [6753 0 R /XYZ 151.701 641.039 null]
 >> endobj
 578 0 obj <<
-/D [6754 0 R /XYZ 151.701 455.741 null]
+/D [6753 0 R /XYZ 151.701 455.741 null]
 >> endobj
+6757 0 obj <<
+/D [6753 0 R /XYZ 151.701 431.177 null]
+>> endobj
 6758 0 obj <<
-/D [6754 0 R /XYZ 151.701 431.177 null]
+/D [6753 0 R /XYZ 151.701 304.213 null]
 >> endobj
 6759 0 obj <<
-/D [6754 0 R /XYZ 151.701 304.213 null]
+/D [6753 0 R /XYZ 151.701 242.517 null]
 >> endobj
-6760 0 obj <<
-/D [6754 0 R /XYZ 151.701 242.517 null]
->> endobj
-6753 0 obj <<
+6752 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F52 3737 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6771 0 obj <<
+6770 0 obj <<
 /Length 1468      
 /Filter /FlateDecode
 >>
@@ -24520,15 +24828,15 @@
 ºƒ½'œix½Dröµ³uÛô¼-Ü'/ˆ74îÁŠ «C$·-«›6qvpÕ}Â@rL”Œéxñ7þ&ý 5¸§
 endstream
 endobj
-6770 0 obj <<
+6769 0 obj <<
 /Type /Page
-/Contents 6771 0 R
-/Resources 6769 0 R
+/Contents 6770 0 R
+/Resources 6768 0 R
 /MediaBox [0 0 612 792]
-/Parent 6708 0 R
-/Annots [ 6751 0 R 6752 0 R 6763 0 R 6765 0 R ]
+/Parent 6707 0 R
+/Annots [ 6750 0 R 6751 0 R 6762 0 R 6764 0 R ]
 >> endobj
-6748 0 obj <<
+6747 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 367
@@ -24697,58 +25005,58 @@
 KÜeoÁ©©N¼™Aÿ¾œ`©P?’‘é2AM@&¤2Ó©×W¦¦æ¼«aǦ^Wø"—Ôg:¡ýòe†ùße,åÙ>˜é€¡%½™Îúú²¯'Ó[—oµO˜E3¨~y3½ýrÓ®M°”kÐûLGªË5À,õË60³L‚ˆb.3¹.3Ôd€ešLLHìöâëÃĶÌvË2M"Ò¢û2‚]&¨	H´ùé‰×ß9¸¯"Xh¤iáïŘYÛ2Í7ß]ŸŸž0žB6‚]vš€)Çn;rõcÏ¿r×-ûo>0ôo¡ebb^\j>ùâ·Ýo!‡ÖvÙjR¤Tž8ußñïÿöÕ‡žym/=$õŽcO=ðY]7‚ߎ`—]´ñ›þS;vEcùÒ;?53ktÝ(Ëcc“F¡¤i¥<æ×õÝ[ò5ÒI#fÞÚ¸ØnmÚ0r]ž¿³@oÿ•¶V06)"„Ýn5cžý·÷Á.»àí\  5 at M  j€š  Ô 5 ¨j PÔ  >ðÏñ}åòþJaßDcù·«Q¦­V)Ë– †€ÍeZ¿@ëhk¥@ö[Û«íU"Òú¸ë1æÄOŒÉ°!ñ—ÅÜ‹W0ºG—Š{/tÒë nÉdíOTQ¶û;K‡IÉ8HÂD‘ aQÄ2mŽâ•6  µüëi‘5
 endstream
 endobj
-6751 0 obj <<
+6750 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [127.168 381.001 196.131 392.69]
 /Subtype /Link
 /A << /S /GoTo /D (DHCP) >>
 >> endobj
-6752 0 obj <<
+6751 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.941 381.001 270.904 392.69]
 /Subtype /Link
 /A << /S /GoTo /D (DHCP) >>
 >> endobj
-6763 0 obj <<
+6762 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [409.558 250.924 460.543 262.613]
 /Subtype /Link
 /A << /S /GoTo /D (WXPP005) >>
 >> endobj
-6765 0 obj <<
+6764 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [370.108 153.36 420.464 165.05]
 /Subtype /Link
 /A << /S /GoTo /D (WXPP014) >>
 >> endobj
-6772 0 obj <<
-/D [6770 0 R /XYZ 100.892 685.529 null]
+6771 0 obj <<
+/D [6769 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5173 0 obj <<
-/D [6770 0 R /XYZ 100.892 660.623 null]
+/D [6769 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6761 0 obj <<
-/D [6770 0 R /XYZ 100.892 643.753 null]
+6760 0 obj <<
+/D [6769 0 R /XYZ 100.892 643.753 null]
 >> endobj
+6772 0 obj <<
+/D [6769 0 R /XYZ 100.892 341.35 null]
+>> endobj
 6773 0 obj <<
-/D [6770 0 R /XYZ 100.892 341.35 null]
+/D [6769 0 R /XYZ 100.892 203.138 null]
 >> endobj
 6774 0 obj <<
-/D [6770 0 R /XYZ 100.892 203.138 null]
+/D [6769 0 R /XYZ 100.892 154.357 null]
 >> endobj
-6775 0 obj <<
-/D [6770 0 R /XYZ 100.892 154.357 null]
->> endobj
-6769 0 obj <<
+6768 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R >>
-/XObject << /Im4 6748 0 R >>
+/XObject << /Im4 6747 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6783 0 obj <<
+6782 0 obj <<
 /Length 1255      
 /Filter /FlateDecode
 >>
@@ -24766,15 +25074,15 @@
 |©¦™s÷ГŒ³Ç†³4©«¼êÚI*†˜ƒÿÈ "­
 endstream
 endobj
-6782 0 obj <<
+6781 0 obj <<
 /Type /Page
-/Contents 6783 0 R
-/Resources 6781 0 R
+/Contents 6782 0 R
+/Resources 6780 0 R
 /MediaBox [0 0 612 792]
-/Parent 6788 0 R
-/Annots [ 6767 0 R 6779 0 R ]
+/Parent 6787 0 R
+/Annots [ 6766 0 R 6778 0 R ]
 >> endobj
-6750 0 obj <<
+6749 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 404
@@ -24918,47 +25226,47 @@
 üšÓuƒ
 endstream
 endobj
-6767 0 obj <<
+6766 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.735 363.322 292.091 374.89]
 /Subtype /Link
 /A << /S /GoTo /D (WXPP009) >>
 >> endobj
-6779 0 obj <<
+6778 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.978 153.778 228.334 165.346]
 /Subtype /Link
 /A << /S /GoTo /D (w2kp001) >>
 >> endobj
-6784 0 obj <<
-/D [6782 0 R /XYZ 151.701 685.529 null]
+6783 0 obj <<
+/D [6781 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5174 0 obj <<
-/D [6782 0 R /XYZ 151.701 660.623 null]
+/D [6781 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6762 0 obj <<
-/D [6782 0 R /XYZ 151.701 642.541 null]
+6761 0 obj <<
+/D [6781 0 R /XYZ 151.701 642.541 null]
 >> endobj
 582 0 obj <<
-/D [6782 0 R /XYZ 151.701 347.213 null]
+/D [6781 0 R /XYZ 151.701 347.213 null]
 >> endobj
+6784 0 obj <<
+/D [6781 0 R /XYZ 151.701 321.597 null]
+>> endobj
 6785 0 obj <<
-/D [6782 0 R /XYZ 151.701 321.597 null]
+/D [6781 0 R /XYZ 151.701 190.424 null]
 >> endobj
 6786 0 obj <<
-/D [6782 0 R /XYZ 151.701 190.424 null]
+/D [6781 0 R /XYZ 151.701 154.774 null]
 >> endobj
-6787 0 obj <<
-/D [6782 0 R /XYZ 151.701 154.774 null]
->> endobj
-6781 0 obj <<
+6780 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F52 3737 0 R /F59 4373 0 R >>
-/XObject << /Im5 6750 0 R >>
+/XObject << /Im5 6749 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6800 0 obj <<
+6799 0 obj <<
 /Length 1248      
 /Filter /FlateDecode
 >>
@@ -24972,15 +25280,15 @@
 îË¡àâ6Jjí•„».DzÃÁÿûT[%ºõ H0‡:Ö¾Žqß“ú„£åK¾y¨±(¥ VõsÉò.ó¾ßnˆò$Aî&ï9AŠ½íƒíjÔ'÷ƒõÐ$Ø!ÅD/m{2–oˆäCF·ô›™dôÓ·[È„,OÜB©âNš½g=Y¦8š«·WÝ7ÁtK#fųOé/<WÃÍv<ó7<ÓCóASª<þ*×HˆœñŽâÍÅۏ)ÞŽo¹º·ÄŽc|l@‡šÄÅ[Ú@¯+·Uç›Ù¹ÀT >ûvI_ô(ù¾EÕš$ {_ö>ñùDÓô\ܯð‰ëDOUNÚT-æ¨ZÆ–ÿ ‰! ˆ
 endstream
 endobj
-6799 0 obj <<
+6798 0 obj <<
 /Type /Page
-/Contents 6800 0 R
-/Resources 6798 0 R
+/Contents 6799 0 R
+/Resources 6797 0 R
 /MediaBox [0 0 612 792]
-/Parent 6788 0 R
-/Annots [ 6791 0 R 6793 0 R 6794 0 R ]
+/Parent 6787 0 R
+/Annots [ 6790 0 R 6792 0 R 6793 0 R ]
 >> endobj
-6764 0 obj <<
+6763 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 404
@@ -25096,51 +25404,51 @@
 ˜ý›5uL Ús5Ì©/fÞ×qüÑYcì²cç\ÇAÑ]ˉս¤ÙŸÞü›^=P'¦.µí^Òlæ»!²¿ËlÛuxO›­ ”Jrx‰hí¹ŽóäîáB»`xQã°Ré—Èæ¾~äñ/Y“:®ÖÝ)›_ÞwÝ«_¸Þ4ó¼“ý]þôM¿ÓÉëO8li¼@²"ÛúÇ®ûé…v9 š6mí8iùèÞý»®qªÖE¢J°íl:ÝôáoÞ÷“{žn¤º¿ö¤Ã¯ýç³SVóð¾g"ká.wŸgá™»09Èð¢Æa¦•jI§[M+£”B… £‚.Á=a(ˆÈäø;7ëâÛå ¼xØHCkÏ΍¹qpãY„»à%¢DbxQ"1¼ˆ(‘^D”H/"J$†%’BïM=--ëÛ¬žæѽûÅn/R:—ËT­gDDQ{1¼Ã;09hÁ{:;4š°ð;ç¿@na•/dë…ô«øUÅoÜ1˃ÅïXTt[5ëñ€‹ôP/d§Ðný¾t+ù¦˜·¾ºD ÐÐ z/&ãnD”hÿ£KŠ
 endstream
 endobj
-6791 0 obj <<
+6790 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [268.229 310.222 318.585 323.124]
 /Subtype /Link
 /A << /S /GoTo /D (w2kp002) >>
 >> endobj
-6793 0 obj <<
+6792 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [127.168 247.302 195.551 258.991]
 /Subtype /Link
 /A << /S /GoTo /D (DHCP) >>
 >> endobj
-6794 0 obj <<
+6793 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [169.471 156.677 219.827 168.366]
 /Subtype /Link
 /A << /S /GoTo /D (w2kp003) >>
 >> endobj
-6801 0 obj <<
-/D [6799 0 R /XYZ 100.892 685.529 null]
+6800 0 obj <<
+/D [6798 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5175 0 obj <<
-/D [6799 0 R /XYZ 100.892 660.623 null]
+/D [6798 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6777 0 obj <<
-/D [6799 0 R /XYZ 100.892 643.753 null]
+6776 0 obj <<
+/D [6798 0 R /XYZ 100.892 643.753 null]
 >> endobj
+6801 0 obj <<
+/D [6798 0 R /XYZ 100.892 350.374 null]
+>> endobj
 6802 0 obj <<
-/D [6799 0 R /XYZ 100.892 350.374 null]
+/D [6798 0 R /XYZ 100.892 194.101 null]
 >> endobj
 6803 0 obj <<
-/D [6799 0 R /XYZ 100.892 194.101 null]
+/D [6798 0 R /XYZ 100.892 121.245 null]
 >> endobj
-6804 0 obj <<
-/D [6799 0 R /XYZ 100.892 121.245 null]
->> endobj
-6798 0 obj <<
+6797 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R >>
-/XObject << /Im6 6764 0 R >>
+/XObject << /Im6 6763 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6811 0 obj <<
+6810 0 obj <<
 /Length 1222      
 /Filter /FlateDecode
 >>
@@ -25159,15 +25467,15 @@
 Ö1C±Ù†Š»ÿ+KLjÔbxµŸbz†,Ð0p[æ è©ÌàÅÜÓ‹õ4,EPJqY°JàrRÄø\h¼=Ô{X?m1½.¼tÙÓÕv~“öxÿ<ÛË
 endstream
 endobj
-6810 0 obj <<
+6809 0 obj <<
 /Type /Page
-/Contents 6811 0 R
-/Resources 6809 0 R
+/Contents 6810 0 R
+/Resources 6808 0 R
 /MediaBox [0 0 612 792]
-/Parent 6788 0 R
-/Annots [ 6796 0 R 6807 0 R ]
+/Parent 6787 0 R
+/Annots [ 6795 0 R 6806 0 R ]
 >> endobj
-6766 0 obj <<
+6765 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 404
@@ -25378,44 +25686,44 @@
 -/0½´;]!Äpž¾±ñëñãÏ-..?þÜ0,¶;>ýÆüc^¶Œ‹‹[	ŽNKÙgQ‰—¹0æ€/íu™‹ß1Å1æÕlY\ÜÒl)Üb»Ã™ýÆÂ[^KK[UY––¶¦õÛ,êg ŸWhyé¥ÝîiÀÞüU~8vìÈÒÒÖcÇŠŒ_ÌÔn[×Ç$<É]d=ã¦MQôƒiý‰#é\F=žÎ°ßåCðU£ÓñíwqìØáM›¶ê_S}¨(ͱc¾0ÛŸ²äï6Ë•8hÒß—&K;?Cè62‚¨.“çóª@VV©ÏJÿÊÊ!ÝVâë€0w;Ý¡wmåÒêåRŸUšt.• ¼ÛØE·L)®ìgUb¹s§Û¥šœskyË\|Ksl0s·Ë$/"Ö6‚iBÞõëëë‚({eÍÃÄÝN»Kõha¶½,íõuÙ:«F‘×O¯µ××ÉYdBðUB8k¹!?ï}hÀÙB4Õö¬åF­>CëI±,òcßûñ…ç,t¹+H¸wb˜p˜¹Ûí´××÷?³b+²ÁT‡Z½þš—îØû÷¹øò_úÙÙçÛÂxð‘ÝxÍEµúlZ$‹|×G¿ö†«/xñŽåt‚rÁÄÄü½gè³ßµYàªÃÌìì;oÞõ¾-ߺ÷Á‡>ýô§ÇíN1œµÜxÝž‹ÿâw_U3½Š"*ò'¾õç÷=Z¥=ìEVˆW<±´ûyÍCG|·½}@¢V«ÏÎÌl¬Ïœ!DMdŒ™J­~Æð”w;§•!ˆ™O¶ŽtÚ§ɦ°ÈgÞ8CO>L­ÃhyêÀÜí´×W),²/ ”/ @)Að ”/ @)Að ”/ @)´íэç4,Ìœ3×<t”O/:R¯­m™g  dõ­<E+OQëðu~xêHóÔ"|ç\÷ô¸Á”’{¿Ü+ÅÜwd¬2sïXäÌ+2OÇ S:Õƒj »“{ë³RäfŒw×@0Q¨KÝu"š¡î!Z-ò5“  0þ2s·á
 endstream
 endobj
-6796 0 obj <<
+6795 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.129 332.647 452.486 344.336]
 /Subtype /Link
 /A << /S /GoTo /D (w2kp004) >>
 >> endobj
-6807 0 obj <<
+6806 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.735 268.06 297.546 279.628]
 /Subtype /Link
 /A << /S /GoTo /D (w2kp005) >>
 >> endobj
-6812 0 obj <<
-/D [6810 0 R /XYZ 151.701 685.529 null]
+6811 0 obj <<
+/D [6809 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5176 0 obj <<
-/D [6810 0 R /XYZ 151.701 660.623 null]
+/D [6809 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6778 0 obj <<
-/D [6810 0 R /XYZ 151.701 643.753 null]
+6777 0 obj <<
+/D [6809 0 R /XYZ 151.701 643.753 null]
 >> endobj
-6813 0 obj <<
-/D [6810 0 R /XYZ 151.701 333.643 null]
+6812 0 obj <<
+/D [6809 0 R /XYZ 151.701 333.643 null]
 >> endobj
 586 0 obj <<
-/D [6810 0 R /XYZ 151.701 247.616 null]
+/D [6809 0 R /XYZ 151.701 247.616 null]
 >> endobj
-6814 0 obj <<
-/D [6810 0 R /XYZ 151.701 220.162 null]
+6813 0 obj <<
+/D [6809 0 R /XYZ 151.701 220.162 null]
 >> endobj
-6809 0 obj <<
+6808 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F52 3737 0 R /F59 4373 0 R >>
-/XObject << /Im7 6766 0 R >>
+/XObject << /Im7 6765 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6825 0 obj <<
+6824 0 obj <<
 /Length 1379      
 /Filter /FlateDecode
 >>
@@ -25435,15 +25743,15 @@
 |œBZ:ç'úQ¤MØè	6áÿÿ hn
 endstream
 endobj
-6824 0 obj <<
+6823 0 obj <<
 /Type /Page
-/Contents 6825 0 R
-/Resources 6823 0 R
+/Contents 6824 0 R
+/Resources 6822 0 R
 /MediaBox [0 0 612 792]
-/Parent 6788 0 R
-/Annots [ 6817 0 R 6819 0 R 6820 0 R 6821 0 R ]
+/Parent 6787 0 R
+/Annots [ 6816 0 R 6818 0 R 6819 0 R 6820 0 R ]
 >> endobj
-6768 0 obj <<
+6767 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 404
@@ -25604,58 +25912,58 @@
 ŸõþâŽ3ÃßXW¬Ž2&+–UÕ媌|ë÷Ò­äMQ25¼ºÊ‚ 0aj ˜û0ç2“Ã0Uàÿœ¥¹Ì
 endstream
 endobj
-6817 0 obj <<
+6816 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [170.199 301.85 226.009 313.418]
 /Subtype /Link
 /A << /S /GoTo /D (WME001) >>
 >> endobj
-6819 0 obj <<
+6818 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [127.168 240.609 196.33 252.299]
 /Subtype /Link
 /A << /S /GoTo /D (DHCP) >>
 >> endobj
-6820 0 obj <<
+6819 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [202.39 240.609 271.552 252.299]
 /Subtype /Link
 /A << /S /GoTo /D (DHCP) >>
 >> endobj
-6821 0 obj <<
+6820 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [276.381 212.905 332.191 225.807]
 /Subtype /Link
 /A << /S /GoTo /D (WME002) >>
 >> endobj
-6826 0 obj <<
-/D [6824 0 R /XYZ 100.892 685.529 null]
+6825 0 obj <<
+/D [6823 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5177 0 obj <<
-/D [6824 0 R /XYZ 100.892 660.623 null]
+/D [6823 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6789 0 obj <<
-/D [6824 0 R /XYZ 100.892 643.753 null]
+6788 0 obj <<
+/D [6823 0 R /XYZ 100.892 643.753 null]
 >> endobj
+6826 0 obj <<
+/D [6823 0 R /XYZ 100.892 350.538 null]
+>> endobj
 6827 0 obj <<
-/D [6824 0 R /XYZ 100.892 350.538 null]
+/D [6823 0 R /XYZ 100.892 302.846 null]
 >> endobj
 6828 0 obj <<
-/D [6824 0 R /XYZ 100.892 302.846 null]
+/D [6823 0 R /XYZ 100.892 153.266 null]
 >> endobj
-6829 0 obj <<
-/D [6824 0 R /XYZ 100.892 153.266 null]
->> endobj
-6823 0 obj <<
+6822 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R >>
-/XObject << /Im8 6768 0 R >>
+/XObject << /Im8 6767 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6838 0 obj <<
+6837 0 obj <<
 /Length 1383      
 /Filter /FlateDecode
 >>
@@ -25673,15 +25981,15 @@
 d¬<‘þòy€D$S}s–ÒˆSj`ñ$5%þ˜êj‚&ª J yø¯v,$æ8í9fæÙ ‰oÉEύ#¼¿ÿ :bá
 endstream
 endobj
-6837 0 obj <<
+6836 0 obj <<
 /Type /Page
-/Contents 6838 0 R
-/Resources 6836 0 R
+/Contents 6837 0 R
+/Resources 6835 0 R
 /MediaBox [0 0 612 792]
-/Parent 6788 0 R
-/Annots [ 6832 0 R 6834 0 R ]
+/Parent 6787 0 R
+/Annots [ 6831 0 R 6833 0 R ]
 >> endobj
-6780 0 obj <<
+6779 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 367
@@ -25784,47 +26092,47 @@
 ¨	 ¤5€4 & Ô Ò0‘Ý[»Ë. žµÍK›Ë. ¬ÿήDá
 endstream
 endobj
-6832 0 obj <<
+6831 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.978 297.401 233.998 309.091]
 /Subtype /Link
 /A << /S /GoTo /D (WME005) >>
 >> endobj
-6834 0 obj <<
+6833 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [316.372 219.436 372.182 231.126]
 /Subtype /Link
 /A << /S /GoTo /D (WME003) >>
 >> endobj
-6839 0 obj <<
-/D [6837 0 R /XYZ 151.701 685.529 null]
+6838 0 obj <<
+/D [6836 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5178 0 obj <<
-/D [6837 0 R /XYZ 151.701 660.623 null]
+/D [6836 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6790 0 obj <<
-/D [6837 0 R /XYZ 151.701 643.753 null]
+6789 0 obj <<
+/D [6836 0 R /XYZ 151.701 643.753 null]
 >> endobj
+6839 0 obj <<
+/D [6836 0 R /XYZ 151.701 402.992 null]
+>> endobj
 6840 0 obj <<
-/D [6837 0 R /XYZ 151.701 402.992 null]
+/D [6836 0 R /XYZ 151.701 335.715 null]
 >> endobj
-6841 0 obj <<
-/D [6837 0 R /XYZ 151.701 335.715 null]
->> endobj
 590 0 obj <<
-/D [6837 0 R /XYZ 151.701 199.396 null]
+/D [6836 0 R /XYZ 151.701 199.396 null]
 >> endobj
-6842 0 obj <<
-/D [6837 0 R /XYZ 151.701 169.123 null]
+6841 0 obj <<
+/D [6836 0 R /XYZ 151.701 169.123 null]
 >> endobj
-6836 0 obj <<
+6835 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R >>
-/XObject << /Im9 6780 0 R >>
+/XObject << /Im9 6779 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6855 0 obj <<
+6854 0 obj <<
 /Length 1515      
 /Filter /FlateDecode
 >>
@@ -25840,15 +26148,15 @@
 g*$¡uëÝÑFuÓVû¢]¹Ãn¢M„1ûêxž‘^ï۾خ¼Ú}nš¬zÌ“áéØ>Ôž`ÆåÉ®jOÁÁߧ”y†Òÿ;¤D’*X¸GÀ+׍‹#ŒðLC¡à¥$͹²&u…G™è'Œ„šÐìm_ÂD‰˜˜¼„‰ȏ1Q½„‰ðҏ;Ì蹫$Q){Ù[ÅøQgHª=r.¢ž#Ä7Õ¬»1¾Ðí:ÿž­7eîXÖ~®•{å!ƒ}î_½¿õ`˜¦DKÙ(üh‰øõXËx>ûpã	4wo<üb¡hfŸc°µoµ:àŒ%ÁÓ½þ`ý?ÜýŽŸ7wvóç-j áå^”íH\ùrÔgë¹{†Bª;uê÷³éÕë;kü[âH?74Ó_)d°@®Â‚ˆ	hbŽÑ±W+~,çÁüí ˜auœEu¢ ±*ÇÜø‡²ÆØ÷€ÍtáÃu“-‹ÚßÙµ¾0=™¤ý ÛNüÉ)ŠÀÔºM½kSW¡¸±ª±B=!”g¨Aq\ƒÜÖàqÀÃþFÿEb÷
 endstream
 endobj
-6854 0 obj <<
+6853 0 obj <<
 /Type /Page
-/Contents 6855 0 R
-/Resources 6853 0 R
+/Contents 6854 0 R
+/Resources 6852 0 R
 /MediaBox [0 0 612 792]
-/Parent 6788 0 R
-/Annots [ 6845 0 R 6847 0 R 6849 0 R ]
+/Parent 6787 0 R
+/Annots [ 6844 0 R 6846 0 R 6848 0 R ]
 >> endobj
-6792 0 obj <<
+6791 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 404
@@ -25930,60 +26238,60 @@
  €flíþÇîÐy  hÌÿ8Öéf
 endstream
 endobj
-6845 0 obj <<
+6844 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [294.42 290.315 350.231 302.005]
 /Subtype /Link
 /A << /S /GoTo /D (wxpp001) >>
 >> endobj
-6847 0 obj <<
+6846 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [146.562 201.305 202.373 212.873]
 /Subtype /Link
 /A << /S /GoTo /D (wxpp004) >>
 >> endobj
-6849 0 obj <<
+6848 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [283.986 152.941 339.797 164.631]
 /Subtype /Link
 /A << /S /GoTo /D (wxpp006) >>
 >> endobj
-6856 0 obj <<
-/D [6854 0 R /XYZ 100.892 685.529 null]
+6855 0 obj <<
+/D [6853 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5179 0 obj <<
-/D [6854 0 R /XYZ 100.892 660.623 null]
+/D [6853 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6805 0 obj <<
-/D [6854 0 R /XYZ 100.892 642.541 null]
+6804 0 obj <<
+/D [6853 0 R /XYZ 100.892 642.541 null]
 >> endobj
+6856 0 obj <<
+/D [6853 0 R /XYZ 100.892 368.049 null]
+>> endobj
 6857 0 obj <<
-/D [6854 0 R /XYZ 100.892 368.049 null]
+/D [6853 0 R /XYZ 100.892 349.511 null]
 >> endobj
 6858 0 obj <<
-/D [6854 0 R /XYZ 100.892 349.511 null]
+/D [6853 0 R /XYZ 100.892 326.125 null]
 >> endobj
 6859 0 obj <<
-/D [6854 0 R /XYZ 100.892 326.125 null]
+/D [6853 0 R /XYZ 100.892 291.311 null]
 >> endobj
 6860 0 obj <<
-/D [6854 0 R /XYZ 100.892 291.311 null]
+/D [6853 0 R /XYZ 100.892 202.301 null]
 >> endobj
 6861 0 obj <<
-/D [6854 0 R /XYZ 100.892 202.301 null]
+/D [6853 0 R /XYZ 100.892 153.938 null]
 >> endobj
-6862 0 obj <<
-/D [6854 0 R /XYZ 100.892 153.938 null]
->> endobj
-6853 0 obj <<
+6852 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R >>
-/XObject << /Im10 6792 0 R >>
+/XObject << /Im10 6791 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6870 0 obj <<
+6869 0 obj <<
 /Length 1181      
 /Filter /FlateDecode
 >>
@@ -26003,15 +26311,15 @@
 ¸õn¤ÑW¸f8œ ÓÞd? °ÞÏ
 endstream
 endobj
-6869 0 obj <<
+6868 0 obj <<
 /Type /Page
-/Contents 6870 0 R
-/Resources 6868 0 R
+/Contents 6869 0 R
+/Resources 6867 0 R
 /MediaBox [0 0 612 792]
-/Parent 6875 0 R
-/Annots [ 6851 0 R 6866 0 R ]
+/Parent 6874 0 R
+/Annots [ 6850 0 R 6865 0 R ]
 >> endobj
-6795 0 obj <<
+6794 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 404
@@ -26068,47 +26376,47 @@
 kƒRu—Š¡º„am^×X­¨æÎ`ƒGƒ= •/ *^ T"¼ ¨DxP‰ð á@¥‘ˆ|wÐ÷d Àb®ìüy§ïi €…ý?üÅ=Ò
 endstream
 endobj
-6851 0 obj <<
+6850 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.463 366.069 461.273 377.758]
 /Subtype /Link
 /A << /S /GoTo /D (wxpp007) >>
 >> endobj
-6866 0 obj <<
+6865 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [233.25 290.756 289.061 302.324]
 /Subtype /Link
 /A << /S /GoTo /D (wxpp008) >>
 >> endobj
-6871 0 obj <<
-/D [6869 0 R /XYZ 151.701 685.529 null]
+6870 0 obj <<
+/D [6868 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5180 0 obj <<
-/D [6869 0 R /XYZ 151.701 660.623 null]
+/D [6868 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6806 0 obj <<
-/D [6869 0 R /XYZ 151.701 643.753 null]
+6805 0 obj <<
+/D [6868 0 R /XYZ 151.701 643.753 null]
 >> endobj
+6871 0 obj <<
+/D [6868 0 R /XYZ 151.701 367.065 null]
+>> endobj
 6872 0 obj <<
-/D [6869 0 R /XYZ 151.701 367.065 null]
+/D [6868 0 R /XYZ 151.701 291.752 null]
 >> endobj
-6873 0 obj <<
-/D [6869 0 R /XYZ 151.701 291.752 null]
->> endobj
 594 0 obj <<
-/D [6869 0 R /XYZ 151.701 228.755 null]
+/D [6868 0 R /XYZ 151.701 228.755 null]
 >> endobj
-6874 0 obj <<
-/D [6869 0 R /XYZ 151.701 201.135 null]
+6873 0 obj <<
+/D [6868 0 R /XYZ 151.701 201.135 null]
 >> endobj
-6868 0 obj <<
+6867 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R >>
-/XObject << /Im11 6795 0 R >>
+/XObject << /Im11 6794 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6884 0 obj <<
+6883 0 obj <<
 /Length 1144      
 /Filter /FlateDecode
 >>
@@ -26121,15 +26429,15 @@
 èJÛÂ72ZM~QDªAÈ’r7(Õ¤rƒ¨ÔçZ8=¶¸>JÕ5ÅQ3ʼn ‚/*Ϋï@xÇÿ=«Úñ
 endstream
 endobj
-6883 0 obj <<
+6882 0 obj <<
 /Type /Page
-/Contents 6884 0 R
-/Resources 6882 0 R
+/Contents 6883 0 R
+/Resources 6881 0 R
 /MediaBox [0 0 612 792]
-/Parent 6875 0 R
-/Annots [ 6878 0 R 6880 0 R ]
+/Parent 6874 0 R
+/Annots [ 6877 0 R 6879 0 R ]
 >> endobj
-6797 0 obj <<
+6796 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 404
@@ -26211,44 +26519,44 @@
 3qº–Ko»'ŽY K/ ÈÄ ²ñ€,Áa»ëŽÞ/Ø)–GËmgaln¬X#^°S4}¥bW¹b­A¼`wÈqŽÕ†¾¶óà°€,A¼  K/ ÈÄ ²ñ€,A¼  K/ È’™ˆœ>:Ýv6  ºqëè?Ž¶ €Îü4-“
 endstream
 endobj
-6878 0 obj <<
+6877 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.108 223.431 276.918 235.12]
 /Subtype /Link
 /A << /S /GoTo /D (WME009) >>
 >> endobj
-6880 0 obj <<
+6879 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [354.32 118.128 410.131 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (WME010) >>
 >> endobj
-6885 0 obj <<
-/D [6883 0 R /XYZ 100.892 685.529 null]
+6884 0 obj <<
+/D [6882 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5181 0 obj <<
-/D [6883 0 R /XYZ 100.892 660.623 null]
+/D [6882 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6815 0 obj <<
-/D [6883 0 R /XYZ 100.892 643.753 null]
+6814 0 obj <<
+/D [6882 0 R /XYZ 100.892 643.753 null]
 >> endobj
+6885 0 obj <<
+/D [6882 0 R /XYZ 100.892 286.227 null]
+>> endobj
 6886 0 obj <<
-/D [6883 0 R /XYZ 100.892 286.227 null]
+/D [6882 0 R /XYZ 100.892 263.529 null]
 >> endobj
 6887 0 obj <<
-/D [6883 0 R /XYZ 100.892 263.529 null]
+/D [6882 0 R /XYZ 100.892 158.226 null]
 >> endobj
-6888 0 obj <<
-/D [6883 0 R /XYZ 100.892 158.226 null]
->> endobj
-6882 0 obj <<
+6881 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R >>
-/XObject << /Im12 6797 0 R /Im1 5672 0 R >>
+/XObject << /Im12 6796 0 R /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6897 0 obj <<
+6896 0 obj <<
 /Length 1129      
 /Filter /FlateDecode
 >>
@@ -26270,15 +26578,15 @@
 ãÿG|×cüÌvh%|/à.ÐÙUÃÃVáuö7ÏDÁÍ
 endstream
 endobj
-6896 0 obj <<
+6895 0 obj <<
 /Type /Page
-/Contents 6897 0 R
-/Resources 6895 0 R
+/Contents 6896 0 R
+/Resources 6894 0 R
 /MediaBox [0 0 612 792]
-/Parent 6875 0 R
-/Annots [ 6891 0 R 6893 0 R ]
+/Parent 6874 0 R
+/Annots [ 6890 0 R 6892 0 R ]
 >> endobj
-6808 0 obj <<
+6807 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 404
@@ -26341,47 +26649,47 @@
 Däôñ麛 óÙ9ú×£u· æöÿe26 
 endstream
 endobj
-6891 0 obj <<
+6890 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [272.281 304.382 328.091 316.071]
 /Subtype /Link
 /A << /S /GoTo /D (WME013) >>
 >> endobj
-6893 0 obj <<
+6892 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.372 242.657 253.182 254.225]
 /Subtype /Link
 /A << /S /GoTo /D (WME014) >>
 >> endobj
-6898 0 obj <<
-/D [6896 0 R /XYZ 151.701 685.529 null]
+6897 0 obj <<
+/D [6895 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5182 0 obj <<
-/D [6896 0 R /XYZ 151.701 660.623 null]
+/D [6895 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6816 0 obj <<
-/D [6896 0 R /XYZ 151.701 643.753 null]
+6815 0 obj <<
+/D [6895 0 R /XYZ 151.701 643.753 null]
 >> endobj
+6898 0 obj <<
+/D [6895 0 R /XYZ 151.701 353.554 null]
+>> endobj
 6899 0 obj <<
-/D [6896 0 R /XYZ 151.701 353.554 null]
+/D [6895 0 R /XYZ 151.701 305.378 null]
 >> endobj
-6900 0 obj <<
-/D [6896 0 R /XYZ 151.701 305.378 null]
->> endobj
 598 0 obj <<
-/D [6896 0 R /XYZ 151.701 225.437 null]
+/D [6895 0 R /XYZ 151.701 225.437 null]
 >> endobj
-6901 0 obj <<
-/D [6896 0 R /XYZ 151.701 198.027 null]
+6900 0 obj <<
+/D [6895 0 R /XYZ 151.701 198.027 null]
 >> endobj
-6895 0 obj <<
+6894 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F51 3736 0 R >>
-/XObject << /Im13 6808 0 R >>
+/XObject << /Im13 6807 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6906 0 obj <<
+6905 0 obj <<
 /Length 958       
 /Filter /FlateDecode
 >>
@@ -26399,14 +26707,14 @@
 Í8£îK¬ÑÑ
 endstream
 endobj
-6905 0 obj <<
+6904 0 obj <<
 /Type /Page
-/Contents 6906 0 R
-/Resources 6904 0 R
+/Contents 6905 0 R
+/Resources 6903 0 R
 /MediaBox [0 0 612 792]
-/Parent 6875 0 R
+/Parent 6874 0 R
 >> endobj
-6818 0 obj <<
+6817 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 367
@@ -26469,21 +26777,21 @@
 ª‚¾	Feï—ðˆ=o¹R"£¹Ž»³°@L(‚l®Ó¹Üré×î†-kƒ‘ D 2ˆ& dM È š Áo:¨kóf¢çó…E^MPÑ4MGg¡µ/,²F4AE#žë±ÓYcÞ€¢	 D 2ˆ& dM È š A4 ã¥Ô<ÏGg  @)¥ÔÿèÉ)&
 endstream
 endobj
-6907 0 obj <<
-/D [6905 0 R /XYZ 100.892 685.529 null]
+6906 0 obj <<
+/D [6904 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5183 0 obj <<
-/D [6905 0 R /XYZ 100.892 660.623 null]
+/D [6904 0 R /XYZ 100.892 660.623 null]
 >> endobj
-6830 0 obj <<
-/D [6905 0 R /XYZ 100.892 643.753 null]
+6829 0 obj <<
+/D [6904 0 R /XYZ 100.892 643.753 null]
 >> endobj
-6904 0 obj <<
+6903 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F51 3736 0 R /F53 3738 0 R /F59 4373 0 R >>
-/XObject << /Im14 6818 0 R >>
+/XObject << /Im14 6817 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6910 0 obj <<
+6909 0 obj <<
 /Length 382       
 /Filter /FlateDecode
 >>
@@ -26493,14 +26801,14 @@
 ½hdÓîÖ¦ÈÆ6ÍiWŒçAØIÞés;qmPœ($¯a݃x¦ò Ä¾ :É–È=q²UhIõÆÉ¿Çyr9ióÜùù{r­™+ïÿ#Wâ­t‡çjÿ#×]¶ùªý/
 endstream
 endobj
-6909 0 obj <<
+6908 0 obj <<
 /Type /Page
-/Contents 6910 0 R
-/Resources 6908 0 R
+/Contents 6909 0 R
+/Resources 6907 0 R
 /MediaBox [0 0 612 792]
-/Parent 6875 0 R
+/Parent 6874 0 R
 >> endobj
-6822 0 obj <<
+6821 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 356
@@ -26556,7 +26864,7 @@
 G˜á‚áè(×â5]p‘Np $„ 	a@BX  $„ ɯ®ëÇÑÕ   §ðÿ±ÐP
 endstream
 endobj
-6833 0 obj <<
+6832 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 356
@@ -26604,27 +26912,27 @@
 GÂXà‚áh(×ã5+]p•-:8H €„°  !, H €äŸaÇÑÅ   §ð_vª]#
 endstream
 endobj
-6911 0 obj <<
-/D [6909 0 R /XYZ 151.701 685.529 null]
+6910 0 obj <<
+/D [6908 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5184 0 obj <<
-/D [6909 0 R /XYZ 151.701 646.651 null]
+/D [6908 0 R /XYZ 151.701 646.651 null]
 >> endobj
-6831 0 obj <<
-/D [6909 0 R /XYZ 151.701 629.781 null]
+6830 0 obj <<
+/D [6908 0 R /XYZ 151.701 629.781 null]
 >> endobj
 5185 0 obj <<
-/D [6909 0 R /XYZ 151.701 372.977 null]
+/D [6908 0 R /XYZ 151.701 372.977 null]
 >> endobj
-6843 0 obj <<
-/D [6909 0 R /XYZ 151.701 356.107 null]
+6842 0 obj <<
+/D [6908 0 R /XYZ 151.701 356.107 null]
 >> endobj
-6908 0 obj <<
+6907 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R >>
-/XObject << /Im15 6822 0 R /Im16 6833 0 R >>
+/XObject << /Im15 6821 0 R /Im16 6832 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6914 0 obj <<
+6913 0 obj <<
 /Length 403       
 /Filter /FlateDecode
 >>
@@ -26635,14 +26943,14 @@
 (wѸGV5ðÁ`™á¾s·wìî<rVø9";à ÃÀ¶•ûäüo±'¸Bœô˜,åôW²Ñ±?§ß³IB4i¸|~üÑ·&^Ùl!™dS8|ƒQë¬úóõ‡•áyðnûÅ“Áz°Ì`5ÿõ-n¯{jM”A(¡ø4P¿8~¼ž×±È!Žá4Ï®;Jð~g}Nù^iÄhÚ«ɦÅÔ§8"Jà×d·§˜5V"‚eµš¦“Á†Û<µS®Wí¶í×›á ÅDzÖb½m7ñr2­Iþk¼‰PíÿŠòB¼ByŠWãa¼ºo2ä-ñOû¦Âúâ
 endstream
 endobj
-6913 0 obj <<
+6912 0 obj <<
 /Type /Page
-/Contents 6914 0 R
-/Resources 6912 0 R
+/Contents 6913 0 R
+/Resources 6911 0 R
 /MediaBox [0 0 612 792]
-/Parent 6875 0 R
+/Parent 6874 0 R
 >> endobj
-6835 0 obj <<
+6834 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 356
@@ -26696,7 +27004,7 @@
 GÂXà†áhXïŒ×8ltÃU¶èà !, H €„°  !, H ’º®{>Ÿµ‹  .á¿ÑMs§
 endstream
 endobj
-6846 0 obj <<
+6845 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 419
@@ -26911,27 +27219,27 @@
 û{ßø?üW;I7¿þz‹>‡E=W¿#ñè»øÒÿÂømt*  J’ÎQ·Ûït‰Úð8OÒ9ÞœqSÝx?D`æbüNUÞ´N{‹üÊG:í½ª y&£œÎ]ûPõùy–þ²µJ¥:|i¤S©T‡/t*•êð¥‘N¥R¾4Ò©TªÃ—F:•Juø"¼òû/§éû†Ý—OÞºà›“;ΞN{[Ë™J¥R=“ò·pùG¸ü#Œßî¢úƒÉ;O&ï X˲Úw?|ùlöŸ1wKŸ½ÛþÒ—"ï^-gù;•w&_úã„´$÷˼ߩg­ù¥¿[sgöžõÞÝÞ7Ïh§oïö®{V1ÐÌ-€.Ì[È×ù‹¼*•JµoúÿAN!
 endstream
 endobj
-6915 0 obj <<
-/D [6913 0 R /XYZ 100.892 685.529 null]
+6914 0 obj <<
+/D [6912 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5186 0 obj <<
-/D [6913 0 R /XYZ 100.892 652.776 null]
+/D [6912 0 R /XYZ 100.892 652.776 null]
 >> endobj
-6844 0 obj <<
-/D [6913 0 R /XYZ 100.892 635.906 null]
+6843 0 obj <<
+/D [6912 0 R /XYZ 100.892 635.906 null]
 >> endobj
 5187 0 obj <<
-/D [6913 0 R /XYZ 100.892 391.352 null]
+/D [6912 0 R /XYZ 100.892 391.352 null]
 >> endobj
-6863 0 obj <<
-/D [6913 0 R /XYZ 100.892 374.482 null]
+6862 0 obj <<
+/D [6912 0 R /XYZ 100.892 374.482 null]
 >> endobj
-6912 0 obj <<
+6911 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R >>
-/XObject << /Im17 6835 0 R /Im18 6846 0 R >>
+/XObject << /Im17 6834 0 R /Im18 6845 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6918 0 obj <<
+6917 0 obj <<
 /Length 419       
 /Filter /FlateDecode
 >>
@@ -26942,14 +27250,14 @@
 ýîÄNæHì‰%2üBìûjÿ"®Ý
 endstream
 endobj
-6917 0 obj <<
+6916 0 obj <<
 /Type /Page
-/Contents 6918 0 R
-/Resources 6916 0 R
+/Contents 6917 0 R
+/Resources 6915 0 R
 /MediaBox [0 0 612 792]
-/Parent 6920 0 R
+/Parent 6919 0 R
 >> endobj
-6848 0 obj <<
+6847 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 419
@@ -27198,7 +27506,7 @@
 öÓÙ+ê#ØdÃ#õ;O~jßý}dw˜é ˆ{×ö÷ßÛLd [>Ï3Ø{l{…ç˾¨êivw¹xPÙìlò#ˆÏtœ½ÀÜ“±¸ßø>î¾ò6ùQ†¿lMé?Ìt„þÃLGé?Ìt„þÃLGé?Ìt„þ#øÿëñw$ÉÓ£ýwœÜ~KŒ[¶¾ÿú¥yF!"½ÉŸcòçÈîìcùïÝ=¹wÀF^«Ý~óåÅÊ¿ wkïm/íC‘íoËYÿLe«ùÚ'”5Þ¯«½•‹F~íïÖ´ºwÑzw»ß\°ü>}¼Û½î¢(°äÈÏ ì#¿t“¿ÈK!Wÿ´h<à
 endstream
 endobj
-6850 0 obj <<
+6849 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 327
@@ -27304,27 +27612,27 @@
 'ʤN•(û¸â3[ŒyÒåÔ)Eð~ÍÂׁ³Ñʱm!‚|/)×±­˜cÛ ‚ÿùZNµæb±h$R6Ü­(¤X,šé%Q7®â­»m¨T¤Dðß9• "RÊul{Ëž¶ºqÒ0ašS­³Ê1ûš›tºq‚w/”Ê1i_•†qÞ	3ôÈ+Ÿ_<cÁÌ47KY¢­M÷üió…KfI¾kP__ÛÒÒº}Û£ä¾ef(tóïx|Ýw^«Ó}Ë.>ùð[®<C»i Q6Sõ¢‰û[wݬwg¬T	!¥2Í2Ã!E»¢ùF¸x•+×JÌGQoÏ×±²LR{¡‰m«ÑÓÂ}5Ó‘rXÀÛ iŒ¯-cL7œjÆtéfL7œjÆtéfL7œjÆtéfL7œjÆtéfL7œjÆt#0imYCEÅŒJ³¡¼c+YUiËÅb‘!nc,ÝûѶm;ÐÓbÂý0z #z €Èë™.ŸÏ½ª\§ÈuΙ~j›éö1Ù~š›aÊ0IÆ»®çøボWQæ	265ÇYýmšªrQìw9€‚²˜PûÑ]È?Æ^ÿ„7
 endstream
 endobj
-6919 0 obj <<
-/D [6917 0 R /XYZ 151.701 685.529 null]
+6918 0 obj <<
+/D [6916 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5188 0 obj <<
-/D [6917 0 R /XYZ 151.701 647.026 null]
+/D [6916 0 R /XYZ 151.701 647.026 null]
 >> endobj
-6864 0 obj <<
-/D [6917 0 R /XYZ 151.701 630.156 null]
+6863 0 obj <<
+/D [6916 0 R /XYZ 151.701 630.156 null]
 >> endobj
 5189 0 obj <<
-/D [6917 0 R /XYZ 151.701 349.602 null]
+/D [6916 0 R /XYZ 151.701 349.602 null]
 >> endobj
-6865 0 obj <<
-/D [6917 0 R /XYZ 151.701 332.732 null]
+6864 0 obj <<
+/D [6916 0 R /XYZ 151.701 332.732 null]
 >> endobj
-6916 0 obj <<
+6915 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R >>
-/XObject << /Im19 6848 0 R /Im20 6850 0 R >>
+/XObject << /Im19 6847 0 R /Im20 6849 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6923 0 obj <<
+6922 0 obj <<
 /Length 469       
 /Filter /FlateDecode
 >>
@@ -27339,14 +27647,14 @@
 Ãuý¨wIÑ›$ˆô»$úðK4;NÊ´åïWOÀ¢^ÆlÔM×=gÊ¥Mû!ÊjÚ#BAéÿ+èIHKàâ§þT(vp”Ó›BQû„¢yµßÊv·¯…ß
 endstream
 endobj
-6922 0 obj <<
+6921 0 obj <<
 /Type /Page
-/Contents 6923 0 R
-/Resources 6921 0 R
+/Contents 6922 0 R
+/Resources 6920 0 R
 /MediaBox [0 0 612 792]
-/Parent 6920 0 R
+/Parent 6919 0 R
 >> endobj
-6852 0 obj <<
+6851 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 327
@@ -27473,7 +27781,7 @@
 À„Ú‹ÞbþDÃ0£Ëÿ*¦?_
 endstream
 endobj
-6867 0 obj <<
+6866 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 326
@@ -27644,27 +27952,27 @@
 鍊üÃ0;Ⱦík
 endstream
 endobj
-6924 0 obj <<
-/D [6922 0 R /XYZ 100.892 685.529 null]
+6923 0 obj <<
+/D [6921 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5190 0 obj <<
-/D [6922 0 R /XYZ 100.892 620.526 null]
+/D [6921 0 R /XYZ 100.892 620.526 null]
 >> endobj
-6876 0 obj <<
-/D [6922 0 R /XYZ 100.892 603.656 null]
+6875 0 obj <<
+/D [6921 0 R /XYZ 100.892 603.656 null]
 >> endobj
 5191 0 obj <<
-/D [6922 0 R /XYZ 100.892 317.602 null]
+/D [6921 0 R /XYZ 100.892 317.602 null]
 >> endobj
-6877 0 obj <<
-/D [6922 0 R /XYZ 100.892 300.732 null]
+6876 0 obj <<
+/D [6921 0 R /XYZ 100.892 300.732 null]
 >> endobj
-6921 0 obj <<
+6920 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R >>
-/XObject << /Im21 6852 0 R /Im22 6867 0 R >>
+/XObject << /Im21 6851 0 R /Im22 6866 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6927 0 obj <<
+6926 0 obj <<
 /Length 451       
 /Filter /FlateDecode
 >>
@@ -27673,14 +27981,14 @@
 ¥ÒÂù 6¨VâZj¢ü¦:Ÿ-Œ‚s4´¢CŽ‘†¦‹«¼@Kò[Ó®bn‚ÜïÆÄ—ºÏQÉ}ÊÅu?ÆÂ<¶ß•¦»§nÙ7±MI+ÏžšUš´“óûåC_wcÁ§²OUö˜iþ“§>Ö¢¸Ýf×7J¬¸v.`ðb?tnZÎZŽ7â*ûš©_œÀ"«~+CùG°)‘ÑЍ-^•wCÒƒQ#§Ú?t–¡ÃÓê>µ#š2qèeøãäeº-ÛzÔ cÞÅÍëó mXwG(šý˜1gCùpItåp!÷œœ}Þò4#ÿsJ…Â#2¢0 ƒyËÔ'0È0ÉoRòâ°cq´ä„ÌH¼3'eÖ—y¾iê6‰Ù'aI®sÍ*ñEsÛÅ]\÷GFðÉå`-wcßeò‚Ku×7õîß‚¤ÁRø¯aHdù4à·S!¢^8„¦Àý‡¼žö'
 endstream
 endobj
-6926 0 obj <<
+6925 0 obj <<
 /Type /Page
-/Contents 6927 0 R
-/Resources 6925 0 R
+/Contents 6926 0 R
+/Resources 6924 0 R
 /MediaBox [0 0 612 792]
-/Parent 6920 0 R
+/Parent 6919 0 R
 >> endobj
-6879 0 obj <<
+6878 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 367
@@ -27745,7 +28053,7 @@
 jéñ^|a•W˜… P Ð5 P Ð5 P Ð5 þ†áñxí   À0ÃðÿÁ5M±
 endstream
 endobj
-6881 0 obj <<
+6880 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 344
@@ -27806,27 +28114,27 @@
 Z8 at PÏ“§¾3¶’ÛeIjþ<ñRt¢Y¹Ê?9Oåæn—{/¸çÞàÒ  ‰  ‰ € …Ðñã—A"@Öüò²‰D üÏŸC"@Ú¿Ã_è‚›ìÐY€D €D @H „D @H „D @ÆûÇÑa  €CýœN8
 endstream
 endobj
-6928 0 obj <<
-/D [6926 0 R /XYZ 151.701 685.529 null]
+6927 0 obj <<
+/D [6925 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5192 0 obj <<
-/D [6926 0 R /XYZ 151.701 644.901 null]
+/D [6925 0 R /XYZ 151.701 644.901 null]
 >> endobj
-6889 0 obj <<
-/D [6926 0 R /XYZ 151.701 628.031 null]
+6888 0 obj <<
+/D [6925 0 R /XYZ 151.701 628.031 null]
 >> endobj
 5193 0 obj <<
-/D [6926 0 R /XYZ 151.701 356.227 null]
+/D [6925 0 R /XYZ 151.701 356.227 null]
 >> endobj
-6890 0 obj <<
-/D [6926 0 R /XYZ 151.701 339.357 null]
+6889 0 obj <<
+/D [6925 0 R /XYZ 151.701 339.357 null]
 >> endobj
-6925 0 obj <<
+6924 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R >>
-/XObject << /Im23 6879 0 R /Im24 6881 0 R >>
+/XObject << /Im23 6878 0 R /Im24 6880 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6931 0 obj <<
+6930 0 obj <<
 /Length 386       
 /Filter /FlateDecode
 >>
@@ -27837,14 +28145,14 @@
 ÿ }ÚM½S¿¥LÎ šø)+R¸Õ“Svÿ‘òçnß ë†ÿ+
 endstream
 endobj
-6930 0 obj <<
+6929 0 obj <<
 /Type /Page
-/Contents 6931 0 R
-/Resources 6929 0 R
+/Contents 6930 0 R
+/Resources 6928 0 R
 /MediaBox [0 0 612 792]
-/Parent 6920 0 R
+/Parent 6919 0 R
 >> endobj
-6892 0 obj <<
+6891 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 367
@@ -27885,7 +28193,7 @@
  €¢(Šâa;¤
 endstream
 endobj
-6894 0 obj <<
+6893 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 367
@@ -27920,27 +28228,27 @@
 ïfý¶é)M Ò¦ç@šðD{ü®ÇƒÞp•FaÒˆ!M€Òˆ!M€Òˆ!M€ÿt]÷ùù¹v3  º®ëºÿÅ‹…%
 endstream
 endobj
-6932 0 obj <<
-/D [6930 0 R /XYZ 100.892 685.529 null]
+6931 0 obj <<
+/D [6929 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5194 0 obj <<
-/D [6930 0 R /XYZ 100.892 652.401 null]
+/D [6929 0 R /XYZ 100.892 652.401 null]
 >> endobj
-6902 0 obj <<
-/D [6930 0 R /XYZ 100.892 635.531 null]
+6901 0 obj <<
+/D [6929 0 R /XYZ 100.892 635.531 null]
 >> endobj
 5195 0 obj <<
-/D [6930 0 R /XYZ 100.892 378.727 null]
+/D [6929 0 R /XYZ 100.892 378.727 null]
 >> endobj
-6903 0 obj <<
-/D [6930 0 R /XYZ 100.892 361.857 null]
+6902 0 obj <<
+/D [6929 0 R /XYZ 100.892 361.857 null]
 >> endobj
-6929 0 obj <<
+6928 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R >>
-/XObject << /Im25 6892 0 R /Im26 6894 0 R >>
+/XObject << /Im25 6891 0 R /Im26 6893 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-6935 0 obj <<
+6934 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -27948,20 +28256,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-6934 0 obj <<
+6933 0 obj <<
 /Type /Page
-/Contents 6935 0 R
-/Resources 6933 0 R
+/Contents 6934 0 R
+/Resources 6932 0 R
 /MediaBox [0 0 612 792]
-/Parent 6920 0 R
+/Parent 6919 0 R
 >> endobj
-6936 0 obj <<
-/D [6934 0 R /XYZ 151.701 685.529 null]
+6935 0 obj <<
+/D [6933 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6933 0 obj <<
+6932 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-6939 0 obj <<
+6938 0 obj <<
 /Length 137       
 /Filter /FlateDecode
 >>
@@ -27970,21 +28278,21 @@
 ¦K–Á0s^÷ä ô€p`øë&±Õ^Ш¼×Ò´EE¬7*ZH.ü,ñ<NBšàøñZö–NM°*Ä@³ 	£BÒyåblƺ¼…×<×{Wš³êÉö¯1OÏ¡ÎÒòëß]b´ˆ(þ
 endstream
 endobj
-6938 0 obj <<
+6937 0 obj <<
 /Type /Page
-/Contents 6939 0 R
-/Resources 6937 0 R
+/Contents 6938 0 R
+/Resources 6936 0 R
 /MediaBox [0 0 612 792]
-/Parent 6920 0 R
+/Parent 6919 0 R
 >> endobj
 602 0 obj <<
-/D [6938 0 R /XYZ 100.892 495.521 null]
+/D [6937 0 R /XYZ 100.892 495.521 null]
 >> endobj
-6937 0 obj <<
+6936 0 obj <<
 /Font << /F27 3691 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6942 0 obj <<
+6941 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -27992,17 +28300,17 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-6941 0 obj <<
+6940 0 obj <<
 /Type /Page
-/Contents 6942 0 R
-/Resources 6940 0 R
+/Contents 6941 0 R
+/Resources 6939 0 R
 /MediaBox [0 0 612 792]
-/Parent 6943 0 R
+/Parent 6942 0 R
 >> endobj
-6940 0 obj <<
+6939 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-6946 0 obj <<
+6945 0 obj <<
 /Length 380       
 /Filter /FlateDecode
 >>
@@ -28013,33 +28321,33 @@
 ­l’ñ>×í\®xû;CI~îžsûù¸‚H……þT¨;Õ 	¾Ë¨d
 endstream
 endobj
-6945 0 obj <<
+6944 0 obj <<
 /Type /Page
-/Contents 6946 0 R
-/Resources 6944 0 R
+/Contents 6945 0 R
+/Resources 6943 0 R
 /MediaBox [0 0 612 792]
-/Parent 6943 0 R
+/Parent 6942 0 R
 >> endobj
+6946 0 obj <<
+/D [6944 0 R /XYZ 100.892 685.529 null]
+>> endobj
 6947 0 obj <<
-/D [6945 0 R /XYZ 100.892 685.529 null]
+/D [6944 0 R /XYZ 100.892 660.623 null]
 >> endobj
+606 0 obj <<
+/D [6944 0 R /XYZ 100.892 559.126 null]
+>> endobj
 6948 0 obj <<
-/D [6945 0 R /XYZ 100.892 660.623 null]
+/D [6944 0 R /XYZ 100.892 559.126 null]
 >> endobj
-606 0 obj <<
-/D [6945 0 R /XYZ 100.892 559.126 null]
->> endobj
 6949 0 obj <<
-/D [6945 0 R /XYZ 100.892 559.126 null]
+/D [6944 0 R /XYZ 100.892 559.126 null]
 >> endobj
-6950 0 obj <<
-/D [6945 0 R /XYZ 100.892 559.126 null]
->> endobj
-6944 0 obj <<
+6943 0 obj <<
 /Font << /F17 3698 0 R /F15 3700 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6953 0 obj <<
+6952 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -28047,20 +28355,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-6952 0 obj <<
+6951 0 obj <<
 /Type /Page
-/Contents 6953 0 R
-/Resources 6951 0 R
+/Contents 6952 0 R
+/Resources 6950 0 R
 /MediaBox [0 0 612 792]
-/Parent 6943 0 R
+/Parent 6942 0 R
 >> endobj
-6954 0 obj <<
-/D [6952 0 R /XYZ 151.701 685.529 null]
+6953 0 obj <<
+/D [6951 0 R /XYZ 151.701 685.529 null]
 >> endobj
-6951 0 obj <<
+6950 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-6960 0 obj <<
+6959 0 obj <<
 /Length 1121      
 /Filter /FlateDecode
 >>
@@ -28073,54 +28381,54 @@
 i¡™Ü¹í%øâ&?LTñˆQ¾@ý©ªi…‹ˆ{)Lé‘Õ#äNì+JX¿w¶+gîú#ÿ=¿[xk¾ËϼwÃøô¡ÑÓë‡ÌÙ:pbŠ#†b[Aîˆu|hÔ|Hø`øô“lè %,6G!X^(ç^«Ò4Øfƒó<Ø àÌ9 ÈÚIþ¢o1S³´€v›ïT˜Éqf4ÿš4=»p|§—1Ûx¡‹Üëuz( ŒÑLÆSòÍõú*òÏwš”ð#H&°C%‡°É¬³—à7ä?S©c
 endstream
 endobj
-6959 0 obj <<
+6958 0 obj <<
 /Type /Page
-/Contents 6960 0 R
-/Resources 6958 0 R
+/Contents 6959 0 R
+/Resources 6957 0 R
 /MediaBox [0 0 612 792]
-/Parent 6943 0 R
-/Annots [ 6955 0 R 6956 0 R ]
+/Parent 6942 0 R
+/Annots [ 6954 0 R 6955 0 R ]
 >> endobj
-6955 0 obj <<
+6954 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [122.32 375.634 350.434 387.324]
 /Subtype /Link
 /A << /S /GoTo /D (upgrading-to-3.0) >>
 >> endobj
-6956 0 obj <<
+6955 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.411 183.774 259.464 193.342]
 /Subtype /Link
 /A << /S /GoTo /D (oldupdatenotes) >>
 >> endobj
-6961 0 obj <<
-/D [6959 0 R /XYZ 100.892 685.529 null]
+6960 0 obj <<
+/D [6958 0 R /XYZ 100.892 685.529 null]
 >> endobj
 610 0 obj <<
-/D [6959 0 R /XYZ 100.892 660.623 null]
+/D [6958 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3777 0 obj <<
-/D [6959 0 R /XYZ 100.892 442.277 null]
+/D [6958 0 R /XYZ 100.892 442.277 null]
 >> endobj
 614 0 obj <<
-/D [6959 0 R /XYZ 100.892 354.172 null]
+/D [6958 0 R /XYZ 100.892 354.172 null]
 >> endobj
-6962 0 obj <<
-/D [6959 0 R /XYZ 100.892 322.444 null]
+6961 0 obj <<
+/D [6958 0 R /XYZ 100.892 322.444 null]
 >> endobj
 618 0 obj <<
-/D [6959 0 R /XYZ 100.892 277.505 null]
+/D [6958 0 R /XYZ 100.892 277.505 null]
 >> endobj
-6963 0 obj <<
-/D [6959 0 R /XYZ 100.892 245.776 null]
+6962 0 obj <<
+/D [6958 0 R /XYZ 100.892 245.776 null]
 >> endobj
-6958 0 obj <<
+6957 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6967 0 obj <<
+6966 0 obj <<
 /Length 2413      
 /Filter /FlateDecode
 >>
@@ -28149,34 +28457,34 @@
 ¾ÏЮ)§kM¬A…§oÁÃç1‹äUƒ„.Ù®tÅŸo?ÜðÞÔkyîÁ§³÷.*N,ŒÂ›zƒq‚ÆØq¯$úŠ{®§Ñ6<ƏØzû°A{öü]žr(G‹íÀà2ëÞÔØcpâÝçëÿÈý¸ýŽ#PÆ“Á>R„¹è`.·ø¤ 7’<pôÑ=ÀþMhr]¤«˜¥Ï×q}ýI™ƒ÷«ƒÁºƒm¸pæ'Nü‚ªæqè™s§ëÕ’Ë[îæÓ°6øMþßÛ°ŽŒŠ’åi˜ž„MàÁí5Mªs’Hi“y:ŒUG«÷ÑDŸ=Ã´Xãóhˆºÿ±âðêCz>=4_jþÃ4¿»ºzª¿ÖjćqÕû«WËW§é ìš,ï?Ws_A9ÿù5¥
 endstream
 endobj
-6966 0 obj <<
+6965 0 obj <<
 /Type /Page
-/Contents 6967 0 R
-/Resources 6965 0 R
+/Contents 6966 0 R
+/Resources 6964 0 R
 /MediaBox [0 0 612 792]
-/Parent 6943 0 R
-/Annots [ 6957 0 R ]
+/Parent 6942 0 R
+/Annots [ 6956 0 R ]
 >> endobj
-6957 0 obj <<
+6956 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 280.013 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://wiki.samba.org/)>>
 >> endobj
-6968 0 obj <<
-/D [6966 0 R /XYZ 151.701 685.529 null]
+6967 0 obj <<
+/D [6965 0 R /XYZ 151.701 685.529 null]
 >> endobj
 622 0 obj <<
-/D [6966 0 R /XYZ 151.701 491.786 null]
+/D [6965 0 R /XYZ 151.701 491.786 null]
 >> endobj
-6969 0 obj <<
-/D [6966 0 R /XYZ 151.701 462.699 null]
+6968 0 obj <<
+/D [6965 0 R /XYZ 151.701 462.699 null]
 >> endobj
-6965 0 obj <<
+6964 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F29 5413 0 R /F53 3738 0 R /F17 3698 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6972 0 obj <<
+6971 0 obj <<
 /Length 1973      
 /Filter /FlateDecode
 >>
@@ -28199,28 +28507,28 @@
 ç‚+ÐE®¾'$Oª€`ÿ$^û¢6ö’ù/d¼4æ;_ª¤’B{Ù6î†øTM—¹„z:ú$8hûwºýøi,þ‚7þAøB
 endstream
 endobj
-6971 0 obj <<
+6970 0 obj <<
 /Type /Page
-/Contents 6972 0 R
-/Resources 6970 0 R
+/Contents 6971 0 R
+/Resources 6969 0 R
 /MediaBox [0 0 612 792]
-/Parent 6943 0 R
+/Parent 6942 0 R
 >> endobj
-6973 0 obj <<
-/D [6971 0 R /XYZ 100.892 685.529 null]
+6972 0 obj <<
+/D [6970 0 R /XYZ 100.892 685.529 null]
 >> endobj
 626 0 obj <<
-/D [6971 0 R /XYZ 100.892 389.664 null]
+/D [6970 0 R /XYZ 100.892 389.664 null]
 >> endobj
-6974 0 obj <<
-/D [6971 0 R /XYZ 100.892 360.144 null]
+6973 0 obj <<
+/D [6970 0 R /XYZ 100.892 360.144 null]
 >> endobj
-6970 0 obj <<
+6969 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F17 3698 0 R /F88 5678 0 R /F72 5679 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6979 0 obj <<
+6978 0 obj <<
 /Length 2327      
 /Filter /FlateDecode
 >>
@@ -28239,66 +28547,66 @@
 »£^>b3ºU‰I«Î>þ…‘þâ™Î¤
 endstream
 endobj
-6978 0 obj <<
+6977 0 obj <<
 /Type /Page
-/Contents 6979 0 R
-/Resources 6977 0 R
+/Contents 6978 0 R
+/Resources 6976 0 R
 /MediaBox [0 0 612 792]
-/Parent 6986 0 R
-/Annots [ 6975 0 R 6982 0 R 6976 0 R ]
+/Parent 6985 0 R
+/Annots [ 6974 0 R 6981 0 R 6975 0 R ]
 >> endobj
-6975 0 obj <<
+6974 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.207 517.943 511.352 529.633]
 /Subtype /Link
 /A << /S /GoTo /D (groupmapping) >>
 >> endobj
-6982 0 obj <<
+6981 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 504.394 324.879 516.083]
 /Subtype /Link
 /A << /S /GoTo /D (groupmapping) >>
 >> endobj
-6976 0 obj <<
+6975 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 317.671 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://pdbsql.sourceforge.net/)>>
 >> endobj
-6980 0 obj <<
-/D [6978 0 R /XYZ 151.701 685.529 null]
+6979 0 obj <<
+/D [6977 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5312 0 obj <<
-/D [6978 0 R /XYZ 151.701 660.623 null]
+/D [6977 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6981 0 obj <<
-/D [6978 0 R /XYZ 151.701 643.753 null]
+6980 0 obj <<
+/D [6977 0 R /XYZ 151.701 643.753 null]
 >> endobj
 630 0 obj <<
-/D [6978 0 R /XYZ 151.701 492.626 null]
+/D [6977 0 R /XYZ 151.701 492.626 null]
 >> endobj
-6983 0 obj <<
-/D [6978 0 R /XYZ 151.701 466.462 null]
+6982 0 obj <<
+/D [6977 0 R /XYZ 151.701 466.462 null]
 >> endobj
 634 0 obj <<
-/D [6978 0 R /XYZ 151.701 379.381 null]
+/D [6977 0 R /XYZ 151.701 379.381 null]
 >> endobj
-6984 0 obj <<
-/D [6978 0 R /XYZ 151.701 353.217 null]
+6983 0 obj <<
+/D [6977 0 R /XYZ 151.701 353.217 null]
 >> endobj
 638 0 obj <<
-/D [6978 0 R /XYZ 151.701 252.586 null]
+/D [6977 0 R /XYZ 151.701 252.586 null]
 >> endobj
-6985 0 obj <<
-/D [6978 0 R /XYZ 151.701 226.423 null]
+6984 0 obj <<
+/D [6977 0 R /XYZ 151.701 226.423 null]
 >> endobj
-6977 0 obj <<
+6976 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R /F59 4373 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6989 0 obj <<
+6988 0 obj <<
 /Length 848       
 /Filter /FlateDecode
 >>
@@ -28313,28 +28621,28 @@
 9Þ®eFV¥1½Þ7MÀ‡D¨äŠ”:¹–qã@\6‹®ïü¡Ÿ™ˆª³m˜ÚàaÿFÔ¼`!ÈØ{`偌gˆ¦¨¤#3ÃÙÅõ“HÑp¦ÁÁʵ_•2gß=Dv%o<®ž¹[W³³¯íðØ-,vii8 p\œÀë#C㶇ÇðY¹çÕHÿ#Uø§o8-Ïþ€40Oܵú¸Ce5PäWðµÒ²/ç?€üZ΋¬f§¼UŠQ#jb­Xú5q-c7÷aÐÕŸ"œÛ¦
 endstream
 endobj
-6988 0 obj <<
+6987 0 obj <<
 /Type /Page
-/Contents 6989 0 R
-/Resources 6987 0 R
+/Contents 6988 0 R
+/Resources 6986 0 R
 /MediaBox [0 0 612 792]
-/Parent 6986 0 R
+/Parent 6985 0 R
 >> endobj
-6990 0 obj <<
-/D [6988 0 R /XYZ 100.892 685.529 null]
+6989 0 obj <<
+/D [6987 0 R /XYZ 100.892 685.529 null]
 >> endobj
 642 0 obj <<
-/D [6988 0 R /XYZ 100.892 660.623 null]
+/D [6987 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3778 0 obj <<
-/D [6988 0 R /XYZ 100.892 453.01 null]
+/D [6987 0 R /XYZ 100.892 453.01 null]
 >> endobj
-6987 0 obj <<
+6986 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F88 5678 0 R /F72 5679 0 R /F50 3701 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6993 0 obj <<
+6992 0 obj <<
 /Length 2088      
 /Filter /FlateDecode
 >>
@@ -28353,28 +28661,28 @@
 ˆÒ2 Ôv7V—4?¸­Æ^æôì {¹uϕÔvD†q'¥÷g׎G·ÃôäX1o®u’påö²€Ë‡Ý£Ÿ™ãÎãpý+¡Öp¦€˜w/8ÆšCÀòܯ<qÇÕ	çâõM‡ELêšDôš{	§F®-D\x-,ŽLÌv˸xóó<÷_Ë.÷|߸&>pkpÁo+¾%xÏÍ'a¸BGïßçøc#ýuÉ9šÄÅd 7¾‹_Âh¹ý&k„)Î>Ù®mŽ—Ó{¥¤×&¢ò"ÌÑ©IèaFK¶ ]‹²üNˆ¹vŸ¤¸à2>Œòo‚èùG„(¹®*ùÈÏ]âð/¢øMÓJß;©]e]K*ÝñüßlñÄýeä)
 endstream
 endobj
-6992 0 obj <<
+6991 0 obj <<
 /Type /Page
-/Contents 6993 0 R
-/Resources 6991 0 R
+/Contents 6992 0 R
+/Resources 6990 0 R
 /MediaBox [0 0 612 792]
-/Parent 6986 0 R
+/Parent 6985 0 R
 >> endobj
-6994 0 obj <<
-/D [6992 0 R /XYZ 151.701 685.529 null]
+6993 0 obj <<
+/D [6991 0 R /XYZ 151.701 685.529 null]
 >> endobj
 646 0 obj <<
-/D [6992 0 R /XYZ 151.701 470.484 null]
+/D [6991 0 R /XYZ 151.701 470.484 null]
 >> endobj
-6995 0 obj <<
-/D [6992 0 R /XYZ 151.701 442.787 null]
+6994 0 obj <<
+/D [6991 0 R /XYZ 151.701 442.787 null]
 >> endobj
-6991 0 obj <<
+6990 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-6998 0 obj <<
+6997 0 obj <<
 /Length 1789      
 /Filter /FlateDecode
 >>
@@ -28400,27 +28708,27 @@
 #ˆL#¦ÆgElNMEmì	ÕçÁúO>0Mg<Ÿ¦? Ž¹Æ•o˜¤ÞÎ=“/§ã1|ìõô~ÿOz1 þ6®5ýt)À²œsßwëÅ_Rç{
 endstream
 endobj
-6997 0 obj <<
+6996 0 obj <<
 /Type /Page
-/Contents 6998 0 R
-/Resources 6996 0 R
+/Contents 6997 0 R
+/Resources 6995 0 R
 /MediaBox [0 0 612 792]
-/Parent 6986 0 R
+/Parent 6985 0 R
 >> endobj
-6999 0 obj <<
-/D [6997 0 R /XYZ 100.892 685.529 null]
+6998 0 obj <<
+/D [6996 0 R /XYZ 100.892 685.529 null]
 >> endobj
 650 0 obj <<
-/D [6997 0 R /XYZ 100.892 494.418 null]
+/D [6996 0 R /XYZ 100.892 494.418 null]
 >> endobj
-7000 0 obj <<
-/D [6997 0 R /XYZ 100.892 465.714 null]
+6999 0 obj <<
+/D [6996 0 R /XYZ 100.892 465.714 null]
 >> endobj
-6996 0 obj <<
+6995 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F51 3736 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7003 0 obj <<
+7002 0 obj <<
 /Length 1355      
 /Filter /FlateDecode
 >>
@@ -28440,27 +28748,27 @@
 ï}ì@²~ñîùëwÔß/Üè-fÒ­ÃS÷.ûA—ÕAõ¦nê  ´@н®·½±f7ªöVUº÷‹ën9gÞàÑ¢L¢çr U)ˆø¶êÜ»ªöŒ–ÙÅó`jáÇþW-ùf
 endstream
 endobj
-7002 0 obj <<
+7001 0 obj <<
 /Type /Page
-/Contents 7003 0 R
-/Resources 7001 0 R
+/Contents 7002 0 R
+/Resources 7000 0 R
 /MediaBox [0 0 612 792]
-/Parent 6986 0 R
+/Parent 6985 0 R
 >> endobj
-7004 0 obj <<
-/D [7002 0 R /XYZ 151.701 685.529 null]
+7003 0 obj <<
+/D [7001 0 R /XYZ 151.701 685.529 null]
 >> endobj
 654 0 obj <<
-/D [7002 0 R /XYZ 151.701 212.543 null]
+/D [7001 0 R /XYZ 151.701 212.543 null]
 >> endobj
-6447 0 obj <<
-/D [7002 0 R /XYZ 151.701 182.99 null]
+6446 0 obj <<
+/D [7001 0 R /XYZ 151.701 182.99 null]
 >> endobj
-7001 0 obj <<
+7000 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F51 3736 0 R /F59 4373 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7007 0 obj <<
+7006 0 obj <<
 /Length 2130      
 /Filter /FlateDecode
 >>
@@ -28486,27 +28794,27 @@
 ¤‚P©E¦^|S…	}“èá›à×¾IÒÈÍçßUòürE€*PK}³©ÐªEiü7M‚pªÌ—Ý0~}Øü–:,c
 endstream
 endobj
-7006 0 obj <<
+7005 0 obj <<
 /Type /Page
-/Contents 7007 0 R
-/Resources 7005 0 R
+/Contents 7006 0 R
+/Resources 7004 0 R
 /MediaBox [0 0 612 792]
-/Parent 6986 0 R
+/Parent 6985 0 R
 >> endobj
-7008 0 obj <<
-/D [7006 0 R /XYZ 100.892 685.529 null]
+7007 0 obj <<
+/D [7005 0 R /XYZ 100.892 685.529 null]
 >> endobj
 658 0 obj <<
-/D [7006 0 R /XYZ 100.892 660.623 null]
+/D [7005 0 R /XYZ 100.892 660.623 null]
 >> endobj
-7009 0 obj <<
-/D [7006 0 R /XYZ 100.892 641.039 null]
+7008 0 obj <<
+/D [7005 0 R /XYZ 100.892 641.039 null]
 >> endobj
-7005 0 obj <<
+7004 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7012 0 obj <<
+7011 0 obj <<
 /Length 2351      
 /Filter /FlateDecode
 >>
@@ -28536,33 +28844,33 @@
 f¢MºÈìç#ý’|ÝÉ¥‡åõõéûýÓÝÿ ©œ/ 
 endstream
 endobj
-7011 0 obj <<
+7010 0 obj <<
 /Type /Page
-/Contents 7012 0 R
-/Resources 7010 0 R
+/Contents 7011 0 R
+/Resources 7009 0 R
 /MediaBox [0 0 612 792]
-/Parent 7018 0 R
+/Parent 7017 0 R
 >> endobj
+7012 0 obj <<
+/D [7010 0 R /XYZ 151.701 685.529 null]
+>> endobj
 7013 0 obj <<
-/D [7011 0 R /XYZ 151.701 685.529 null]
+/D [7010 0 R /XYZ 151.701 207.194 null]
 >> endobj
 7014 0 obj <<
-/D [7011 0 R /XYZ 151.701 207.194 null]
+/D [7010 0 R /XYZ 151.701 184.873 null]
 >> endobj
 7015 0 obj <<
-/D [7011 0 R /XYZ 151.701 184.873 null]
+/D [7010 0 R /XYZ 151.701 163.159 null]
 >> endobj
 7016 0 obj <<
-/D [7011 0 R /XYZ 151.701 163.159 null]
+/D [7010 0 R /XYZ 151.701 143.263 null]
 >> endobj
-7017 0 obj <<
-/D [7011 0 R /XYZ 151.701 143.263 null]
->> endobj
-7010 0 obj <<
+7009 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7021 0 obj <<
+7020 0 obj <<
 /Length 2319      
 /Filter /FlateDecode
 >>
@@ -28583,33 +28891,33 @@
 1ÚîÚâ ^ÛÞÆ®”/">Þ;ÞÜ:»Z•øB5Qr=Z¼8‘ðK¿SkVÛr#B±*ñRsLÇ\l»NÞyjãÏèðÐÀXFhsˆ«ûˆÁ}Œ´üVö*¢C6È_CÓ:f®Ùü¡â$L™_õI€xÒÎ*5IY˜èK‡7F{#ÊÓ'{S™FþZ$‰¡!âOíŸW Õ(¯"¶êQ†}Îâ}w,Lý¼–M]õÐ]ÿ_ڏ¶wÿ†eõŒ
 endstream
 endobj
-7020 0 obj <<
+7019 0 obj <<
 /Type /Page
-/Contents 7021 0 R
-/Resources 7019 0 R
+/Contents 7020 0 R
+/Resources 7018 0 R
 /MediaBox [0 0 612 792]
-/Parent 7018 0 R
+/Parent 7017 0 R
 >> endobj
+7021 0 obj <<
+/D [7019 0 R /XYZ 100.892 685.529 null]
+>> endobj
 7022 0 obj <<
-/D [7020 0 R /XYZ 100.892 685.529 null]
+/D [7019 0 R /XYZ 100.892 660.623 null]
 >> endobj
 7023 0 obj <<
-/D [7020 0 R /XYZ 100.892 660.623 null]
+/D [7019 0 R /XYZ 100.892 647.543 null]
 >> endobj
-7024 0 obj <<
-/D [7020 0 R /XYZ 100.892 647.543 null]
->> endobj
 662 0 obj <<
-/D [7020 0 R /XYZ 100.892 491.394 null]
+/D [7019 0 R /XYZ 100.892 491.394 null]
 >> endobj
-7025 0 obj <<
-/D [7020 0 R /XYZ 100.892 463.535 null]
+7024 0 obj <<
+/D [7019 0 R /XYZ 100.892 463.535 null]
 >> endobj
-7019 0 obj <<
+7018 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F52 3737 0 R /F17 3698 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7028 0 obj <<
+7027 0 obj <<
 /Length 2018      
 /Filter /FlateDecode
 >>
@@ -28638,27 +28946,27 @@
 BK%|™iäwtÜ ƒ©1ð‘ž>´CwÒÀðÖB;·åûjö.‰ìñ	’ztËÂ,>òØ¿ÌþP_g0ù ÎÞ*Àx! ºåÓ¿E šGÃÛî~鏔t®)ëce¿šáh’BþzŒ'
 endstream
 endobj
-7027 0 obj <<
+7026 0 obj <<
 /Type /Page
-/Contents 7028 0 R
-/Resources 7026 0 R
+/Contents 7027 0 R
+/Resources 7025 0 R
 /MediaBox [0 0 612 792]
-/Parent 7018 0 R
+/Parent 7017 0 R
 >> endobj
-7029 0 obj <<
-/D [7027 0 R /XYZ 151.701 685.529 null]
+7028 0 obj <<
+/D [7026 0 R /XYZ 151.701 685.529 null]
 >> endobj
 666 0 obj <<
-/D [7027 0 R /XYZ 151.701 660.623 null]
+/D [7026 0 R /XYZ 151.701 660.623 null]
 >> endobj
-6448 0 obj <<
-/D [7027 0 R /XYZ 151.701 641.703 null]
+6447 0 obj <<
+/D [7026 0 R /XYZ 151.701 641.703 null]
 >> endobj
-7026 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F93 7030 0 R /F53 3738 0 R >>
+7025 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F93 7029 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7033 0 obj <<
+7032 0 obj <<
 /Length 1815      
 /Filter /FlateDecode
 >>
@@ -28677,21 +28985,21 @@
 å“æu(8›÷°?…	“7—Ñ„å*¼:a¹½ÄÿJè_ÄÕ_vÍf(×Õ®ßÎÆé¯Û­)ýMݽ˜!wžþWŽ§
 endstream
 endobj
-7032 0 obj <<
+7031 0 obj <<
 /Type /Page
-/Contents 7033 0 R
-/Resources 7031 0 R
+/Contents 7032 0 R
+/Resources 7030 0 R
 /MediaBox [0 0 612 792]
-/Parent 7018 0 R
+/Parent 7017 0 R
 >> endobj
-7034 0 obj <<
-/D [7032 0 R /XYZ 100.892 685.529 null]
+7033 0 obj <<
+/D [7031 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7031 0 obj <<
+7030 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F51 3736 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7037 0 obj <<
+7036 0 obj <<
 /Length 1380      
 /Filter /FlateDecode
 >>
@@ -28711,27 +29019,27 @@
 ¦>l}ø·e-ÍЂHij¤ÈÜ\µšHyÃÄ®)K<kC,®³HêŒþƒÀUUŲ4gânG¶d@±Á«K*–ú¯dÙqõ[¢¨Æ²`rLÍB‡¾øÝÙb_4Fe‡cEYÓàd˜š©T§ÙÞ­¯ãj£\g†b³$‡–B!+ÂÛýJ­»4ûº‚ö#ÞmGR2qßÚÁ“Ö™„¢dkŠ †Çòöž˜½!5îpšòÁÿxía‚±õ;$L}·-»=®W{;¸NEì®`Ù‚Ä…"…]cGöº¹Ân`ÐcÞV+¼TûÊ#L‹ÊîTDi?ð“壑ÿugô—ÀV?\j`·ÝfˆÀååEŬ²þ[ç-¤Åì^1„ÑU¡~Ãïã\g€Ì%ŠŽFoMÇB¸¿ð<~Ö†zUۗ¶µ±ß+0 øVíùE…Þã	Ùñ;šIO¢ÿøiÆìYò_$pݵWØR‡^aø¬	o?vªÚÁ>ÇçÈöÂá3¦?áëèñ|~u
 endstream
 endobj
-7036 0 obj <<
+7035 0 obj <<
 /Type /Page
-/Contents 7037 0 R
-/Resources 7035 0 R
+/Contents 7036 0 R
+/Resources 7034 0 R
 /MediaBox [0 0 612 792]
-/Parent 7018 0 R
+/Parent 7017 0 R
 >> endobj
-7038 0 obj <<
-/D [7036 0 R /XYZ 151.701 685.529 null]
+7037 0 obj <<
+/D [7035 0 R /XYZ 151.701 685.529 null]
 >> endobj
 670 0 obj <<
-/D [7036 0 R /XYZ 151.701 331.191 null]
+/D [7035 0 R /XYZ 151.701 331.191 null]
 >> endobj
-7039 0 obj <<
-/D [7036 0 R /XYZ 151.701 298.218 null]
+7038 0 obj <<
+/D [7035 0 R /XYZ 151.701 298.218 null]
 >> endobj
-7035 0 obj <<
+7034 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7042 0 obj <<
+7041 0 obj <<
 /Length 2447      
 /Filter /FlateDecode
 >>
@@ -28769,21 +29077,21 @@
 ÝÄÏVCo?±~«+úùK«y¢bïVŸ\º7;j”%⨌4ç¹/ÊRï¿Ì"M^"ÆÁ+à¨àœº-…ÊHGhˆ›¡»[Tdž*"%ñ¿îûñéê}ÅȘ
 endstream
 endobj
-7041 0 obj <<
+7040 0 obj <<
 /Type /Page
-/Contents 7042 0 R
-/Resources 7040 0 R
+/Contents 7041 0 R
+/Resources 7039 0 R
 /MediaBox [0 0 612 792]
-/Parent 7018 0 R
+/Parent 7017 0 R
 >> endobj
-7043 0 obj <<
-/D [7041 0 R /XYZ 100.892 685.529 null]
+7042 0 obj <<
+/D [7040 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7040 0 obj <<
+7039 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F52 3737 0 R /F59 4373 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7048 0 obj <<
+7047 0 obj <<
 /Length 2600      
 /Filter /FlateDecode
 >>
@@ -28809,65 +29117,65 @@
 ]¤çÌf³å×$c;vøߺX$
 endstream
 endobj
-7047 0 obj <<
+7046 0 obj <<
 /Type /Page
-/Contents 7048 0 R
-/Resources 7046 0 R
+/Contents 7047 0 R
+/Resources 7045 0 R
 /MediaBox [0 0 612 792]
-/Parent 7059 0 R
-/Annots [ 7044 0 R ]
+/Parent 7058 0 R
+/Annots [ 7043 0 R ]
 >> endobj
-7044 0 obj <<
+7043 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.493 314.08 302.667 325.77]
 /Subtype /Link
 /A << /S /GoTo /D (dmbexample) >>
 >> endobj
-7049 0 obj <<
-/D [7047 0 R /XYZ 151.701 685.529 null]
+7048 0 obj <<
+/D [7046 0 R /XYZ 151.701 685.529 null]
 >> endobj
 674 0 obj <<
-/D [7047 0 R /XYZ 151.701 603.61 null]
+/D [7046 0 R /XYZ 151.701 603.61 null]
 >> endobj
-6351 0 obj <<
-/D [7047 0 R /XYZ 151.701 575.785 null]
+6350 0 obj <<
+/D [7046 0 R /XYZ 151.701 575.785 null]
 >> endobj
+7049 0 obj <<
+/D [7046 0 R /XYZ 151.701 388.28 null]
+>> endobj
 7050 0 obj <<
-/D [7047 0 R /XYZ 151.701 388.28 null]
+/D [7046 0 R /XYZ 151.701 389.463 null]
 >> endobj
+5053 0 obj <<
+/D [7046 0 R /XYZ 151.701 301.46 null]
+>> endobj
 7051 0 obj <<
-/D [7047 0 R /XYZ 151.701 389.463 null]
+/D [7046 0 R /XYZ 151.701 284.589 null]
 >> endobj
-5053 0 obj <<
-/D [7047 0 R /XYZ 151.701 301.46 null]
->> endobj
 7052 0 obj <<
-/D [7047 0 R /XYZ 151.701 284.589 null]
+/D [7046 0 R /XYZ 151.701 278.612 null]
 >> endobj
 7053 0 obj <<
-/D [7047 0 R /XYZ 151.701 278.612 null]
+/D [7046 0 R /XYZ 151.701 284.888 null]
 >> endobj
 7054 0 obj <<
-/D [7047 0 R /XYZ 151.701 284.888 null]
+/D [7046 0 R /XYZ 151.701 272.933 null]
 >> endobj
 7055 0 obj <<
-/D [7047 0 R /XYZ 151.701 272.933 null]
+/D [7046 0 R /XYZ 151.701 260.978 null]
 >> endobj
 7056 0 obj <<
-/D [7047 0 R /XYZ 151.701 260.978 null]
+/D [7046 0 R /XYZ 151.701 249.023 null]
 >> endobj
 7057 0 obj <<
-/D [7047 0 R /XYZ 151.701 249.023 null]
+/D [7046 0 R /XYZ 151.701 237.068 null]
 >> endobj
-7058 0 obj <<
-/D [7047 0 R /XYZ 151.701 237.068 null]
->> endobj
-7046 0 obj <<
+7045 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R /F59 4373 0 R /F4 5484 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7064 0 obj <<
+7063 0 obj <<
 /Length 2509      
 /Filter /FlateDecode
 >>
@@ -28894,90 +29202,90 @@
 î3ÛÔÒïøþxQjȝƒÿ1ãʁ
 endstream
 endobj
-7063 0 obj <<
+7062 0 obj <<
 /Type /Page
-/Contents 7064 0 R
-/Resources 7062 0 R
+/Contents 7063 0 R
+/Resources 7061 0 R
 /MediaBox [0 0 612 792]
-/Parent 7059 0 R
-/Annots [ 7045 0 R 7060 0 R ]
+/Parent 7058 0 R
+/Annots [ 7044 0 R 7059 0 R ]
 >> endobj
-7045 0 obj <<
+7044 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.774 518.918 368.948 530.608]
 /Subtype /Link
 /A << /S /GoTo /D (lmbexample) >>
 >> endobj
-7060 0 obj <<
+7059 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.97 384.744 438.145 397.646]
 /Subtype /Link
 /A << /S /GoTo /D (nombexample) >>
 >> endobj
-7065 0 obj <<
-/D [7063 0 R /XYZ 100.892 685.529 null]
+7064 0 obj <<
+/D [7062 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5054 0 obj <<
-/D [7063 0 R /XYZ 100.892 660.623 null]
+/D [7062 0 R /XYZ 100.892 660.623 null]
 >> endobj
+7065 0 obj <<
+/D [7062 0 R /XYZ 100.892 643.753 null]
+>> endobj
 7066 0 obj <<
-/D [7063 0 R /XYZ 100.892 643.753 null]
+/D [7062 0 R /XYZ 100.892 637.775 null]
 >> endobj
 7067 0 obj <<
-/D [7063 0 R /XYZ 100.892 637.775 null]
+/D [7062 0 R /XYZ 100.892 644.051 null]
 >> endobj
 7068 0 obj <<
-/D [7063 0 R /XYZ 100.892 644.051 null]
+/D [7062 0 R /XYZ 100.892 632.096 null]
 >> endobj
 7069 0 obj <<
-/D [7063 0 R /XYZ 100.892 632.096 null]
+/D [7062 0 R /XYZ 100.892 620.141 null]
 >> endobj
 7070 0 obj <<
-/D [7063 0 R /XYZ 100.892 620.141 null]
+/D [7062 0 R /XYZ 100.892 608.186 null]
 >> endobj
 7071 0 obj <<
-/D [7063 0 R /XYZ 100.892 608.186 null]
+/D [7062 0 R /XYZ 100.892 596.231 null]
 >> endobj
+5055 0 obj <<
+/D [7062 0 R /XYZ 100.892 372.168 null]
+>> endobj
 7072 0 obj <<
-/D [7063 0 R /XYZ 100.892 596.231 null]
+/D [7062 0 R /XYZ 100.892 355.298 null]
 >> endobj
-5055 0 obj <<
-/D [7063 0 R /XYZ 100.892 372.168 null]
->> endobj
 7073 0 obj <<
-/D [7063 0 R /XYZ 100.892 355.298 null]
+/D [7062 0 R /XYZ 100.892 349.32 null]
 >> endobj
 7074 0 obj <<
-/D [7063 0 R /XYZ 100.892 349.32 null]
+/D [7062 0 R /XYZ 100.892 355.597 null]
 >> endobj
 7075 0 obj <<
-/D [7063 0 R /XYZ 100.892 355.597 null]
+/D [7062 0 R /XYZ 100.892 343.642 null]
 >> endobj
 7076 0 obj <<
-/D [7063 0 R /XYZ 100.892 343.642 null]
+/D [7062 0 R /XYZ 100.892 331.686 null]
 >> endobj
 7077 0 obj <<
-/D [7063 0 R /XYZ 100.892 331.686 null]
+/D [7062 0 R /XYZ 100.892 319.731 null]
 >> endobj
 7078 0 obj <<
-/D [7063 0 R /XYZ 100.892 319.731 null]
+/D [7062 0 R /XYZ 100.892 307.776 null]
 >> endobj
-7079 0 obj <<
-/D [7063 0 R /XYZ 100.892 307.776 null]
->> endobj
 678 0 obj <<
-/D [7063 0 R /XYZ 100.892 257.723 null]
+/D [7062 0 R /XYZ 100.892 257.723 null]
 >> endobj
-7080 0 obj <<
-/D [7063 0 R /XYZ 100.892 230.548 null]
+7079 0 obj <<
+/D [7062 0 R /XYZ 100.892 230.548 null]
 >> endobj
-7062 0 obj <<
+7061 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F4 5484 0 R /F59 4373 0 R /F53 3738 0 R /F17 3698 0 R /F85 5513 0 R /F52 3737 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7085 0 obj <<
+7084 0 obj <<
 /Length 2497      
 /Filter /FlateDecode
 >>
@@ -29005,79 +29313,79 @@
 Ým~Eï{š>f8û“¡t€ÊªYvÿ'x /¹f2žðâ笸‹áGoXÿà!Ti¹‚QLþºQS!÷Vçg°}òì³îâæ—³}öVLà:«š¤Æø¬b½7\æËcóñƒKÆ;ù9y{³­vwñÝؾ‚âäK¶†"x{à²b\ €£“ý|ÿ¹}†Âir¨Æ¹÷ƒXùü•K`<œýåê½–ò'÷~í<Þ(J£žiÔØô±¤ÿÏØšÃ
 endstream
 endobj
-7084 0 obj <<
+7083 0 obj <<
 /Type /Page
-/Contents 7085 0 R
-/Resources 7083 0 R
+/Contents 7084 0 R
+/Resources 7082 0 R
 /MediaBox [0 0 612 792]
-/Parent 7059 0 R
-/Annots [ 7061 0 R 7081 0 R 7082 0 R ]
+/Parent 7058 0 R
+/Annots [ 7060 0 R 7080 0 R 7081 0 R ]
 >> endobj
-7061 0 obj <<
+7060 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [276.947 632.997 352.121 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (remsmb) >>
 >> endobj
-7081 0 obj <<
+7080 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [355.069 459.093 423.122 470.783]
 /Subtype /Link
 /A << /S /GoTo /D (browse-force-master) >>
 >> endobj
-7082 0 obj <<
+7081 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 382.942 225.879 394.632]
 /Subtype /Link
 /A << /S /GoTo /D (xremmb) >>
 >> endobj
-7086 0 obj <<
-/D [7084 0 R /XYZ 151.701 685.529 null]
+7085 0 obj <<
+/D [7083 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5056 0 obj <<
-/D [7084 0 R /XYZ 151.701 620.408 null]
+/D [7083 0 R /XYZ 151.701 620.408 null]
 >> endobj
+7086 0 obj <<
+/D [7083 0 R /XYZ 151.701 603.538 null]
+>> endobj
 7087 0 obj <<
-/D [7084 0 R /XYZ 151.701 603.538 null]
+/D [7083 0 R /XYZ 151.701 597.56 null]
 >> endobj
 7088 0 obj <<
-/D [7084 0 R /XYZ 151.701 597.56 null]
+/D [7083 0 R /XYZ 151.701 603.837 null]
 >> endobj
 7089 0 obj <<
-/D [7084 0 R /XYZ 151.701 603.837 null]
+/D [7083 0 R /XYZ 151.701 591.882 null]
 >> endobj
 7090 0 obj <<
-/D [7084 0 R /XYZ 151.701 591.882 null]
+/D [7083 0 R /XYZ 151.701 579.926 null]
 >> endobj
 7091 0 obj <<
-/D [7084 0 R /XYZ 151.701 579.926 null]
+/D [7083 0 R /XYZ 151.701 567.971 null]
 >> endobj
 7092 0 obj <<
-/D [7084 0 R /XYZ 151.701 567.971 null]
+/D [7083 0 R /XYZ 151.701 556.016 null]
 >> endobj
-7093 0 obj <<
-/D [7084 0 R /XYZ 151.701 556.016 null]
->> endobj
 5057 0 obj <<
-/D [7084 0 R /XYZ 151.701 370.353 null]
+/D [7083 0 R /XYZ 151.701 370.353 null]
 >> endobj
-7094 0 obj <<
-/D [7084 0 R /XYZ 151.701 353.483 null]
+7093 0 obj <<
+/D [7083 0 R /XYZ 151.701 353.483 null]
 >> endobj
 682 0 obj <<
-/D [7084 0 R /XYZ 151.701 307.421 null]
+/D [7083 0 R /XYZ 151.701 307.421 null]
 >> endobj
-7095 0 obj <<
-/D [7084 0 R /XYZ 151.701 279.627 null]
+7094 0 obj <<
+/D [7083 0 R /XYZ 151.701 279.627 null]
 >> endobj
-7083 0 obj <<
+7082 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F4 5484 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7098 0 obj <<
+7097 0 obj <<
 /Length 2248      
 /Filter /FlateDecode
 >>
@@ -29095,27 +29403,27 @@
 ˆ\<·µ0XôXŸàãqÅÇÓTMȃ_ò^ã`#­®6l7£§BÞo¦1ˆ1ž ïL5Ô‘µg„LË€¢8«VîFr/Žï¡Î­ˆ<ÿ]¨ío…ÇŠqæéÎ	ÐUzÅÈÏ…Ñó#Ô( k=35TCȩǁw_jAv¾A¢æºþÓ4'ûvç«ÕVû=Õêæ/+ÜRaW¢UÂÛvD˜Û¤™ÒÜœ.¢îÏCÎx"M@˜þ}»R‚ÙE”ýFá¿–mw†÷Å	&ÁÿmŽeåy>ô| ­À‹ÏT*LçTþzÚ}a‹Ç0ñënÕ—¥åœG™!ü«ZÝÎËzú+‚k;ÊñöŸ‚áÚîÐ;}×¢³ÿ¹øÛá¦\jÊ¥´ÍÓàaýöñî08
 endstream
 endobj
-7097 0 obj <<
+7096 0 obj <<
 /Type /Page
-/Contents 7098 0 R
-/Resources 7096 0 R
+/Contents 7097 0 R
+/Resources 7095 0 R
 /MediaBox [0 0 612 792]
-/Parent 7059 0 R
+/Parent 7058 0 R
 >> endobj
-7099 0 obj <<
-/D [7097 0 R /XYZ 100.892 685.529 null]
+7098 0 obj <<
+/D [7096 0 R /XYZ 100.892 685.529 null]
 >> endobj
 686 0 obj <<
-/D [7097 0 R /XYZ 100.892 334.547 null]
+/D [7096 0 R /XYZ 100.892 334.547 null]
 >> endobj
-7100 0 obj <<
-/D [7097 0 R /XYZ 100.892 306.746 null]
+7099 0 obj <<
+/D [7096 0 R /XYZ 100.892 306.746 null]
 >> endobj
-7096 0 obj <<
+7095 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7103 0 obj <<
+7102 0 obj <<
 /Length 2056      
 /Filter /FlateDecode
 >>
@@ -29137,45 +29445,45 @@
 ™®@ÇxŸ=dp® #>±¼?ÔŽ)¸+©SÅ<6šóåû¶iŸž¯gYTÄé—–³Ÿ‡õ%]>Q¢\gó—'xW[ñ\@\Œ¬¶;Öýõ3²æÏP¢aþóÿß߯þPñ¾g
 endstream
 endobj
-7102 0 obj <<
+7101 0 obj <<
 /Type /Page
-/Contents 7103 0 R
-/Resources 7101 0 R
+/Contents 7102 0 R
+/Resources 7100 0 R
 /MediaBox [0 0 612 792]
-/Parent 7059 0 R
+/Parent 7058 0 R
 >> endobj
+7103 0 obj <<
+/D [7101 0 R /XYZ 151.701 685.529 null]
+>> endobj
 7104 0 obj <<
-/D [7102 0 R /XYZ 151.701 685.529 null]
+/D [7101 0 R /XYZ 151.701 572.781 null]
 >> endobj
 7105 0 obj <<
-/D [7102 0 R /XYZ 151.701 572.781 null]
+/D [7101 0 R /XYZ 151.701 540.789 null]
 >> endobj
 7106 0 obj <<
-/D [7102 0 R /XYZ 151.701 540.789 null]
+/D [7101 0 R /XYZ 151.701 470.44 null]
 >> endobj
 7107 0 obj <<
-/D [7102 0 R /XYZ 151.701 470.44 null]
+/D [7101 0 R /XYZ 151.701 424.899 null]
 >> endobj
-7108 0 obj <<
-/D [7102 0 R /XYZ 151.701 424.899 null]
->> endobj
 690 0 obj <<
-/D [7102 0 R /XYZ 151.701 336.653 null]
+/D [7101 0 R /XYZ 151.701 336.653 null]
 >> endobj
-7109 0 obj <<
-/D [7102 0 R /XYZ 151.701 310.452 null]
+7108 0 obj <<
+/D [7101 0 R /XYZ 151.701 310.452 null]
 >> endobj
 694 0 obj <<
-/D [7102 0 R /XYZ 151.701 233.635 null]
+/D [7101 0 R /XYZ 151.701 233.635 null]
 >> endobj
-7110 0 obj <<
-/D [7102 0 R /XYZ 151.701 207.231 null]
+7109 0 obj <<
+/D [7101 0 R /XYZ 151.701 207.231 null]
 >> endobj
-7101 0 obj <<
+7100 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7113 0 obj <<
+7112 0 obj <<
 /Length 2690      
 /Filter /FlateDecode
 >>
@@ -29208,48 +29516,48 @@
 ®É)[2Ü.6–õn½"„þ±áŸJz&¯Ò˜„Žíìe¡QW¨Ú±í`]°áMÞâ«ó$€h»ÛÄçU—2  ¼Šù‚RSçUÌ!S0/ë~“À?}¿}Ž‰7×å`\8òJ»O…Ðë÷X˜N}\–›S©RѺBìƒÊ0WÍ=7eFÈiþX?ȍMÐt‰³[ÊG}®ã4PKÙ9ÏË"	‡ õ®¡Êá–(÷…zU¶]ڋʪ.ÛÛnPJ›¡¥×usìM{W­Š¶lRÊö1{ˆ•MŽSÝbÃd‡oØ穱¼¦ò&­ë«:¡Ö‰Ú—*åc‹¤•h¨|ÀkD‹Cn»wöŽóøÆÆÃîõd°l&áìù³ß^½ù÷o^½{}¯ã1˜U	#ǃŠð“‹yÌŠù.“æ(1‚•A&Ëï½Üu•¨+	½Ó™OM½ûšúÜeÐRZJù½ç’9éÆüÙ+¤8–©<{yM½·¼Ã§\¦Œ	»T9X"a¢…:Éø{?-?jw)8+ÿ¡u‚×
 endstream
 endobj
-7112 0 obj <<
+7111 0 obj <<
 /Type /Page
-/Contents 7113 0 R
-/Resources 7111 0 R
+/Contents 7112 0 R
+/Resources 7110 0 R
 /MediaBox [0 0 612 792]
-/Parent 7059 0 R
+/Parent 7058 0 R
 >> endobj
+7113 0 obj <<
+/D [7111 0 R /XYZ 100.892 685.529 null]
+>> endobj
 7114 0 obj <<
-/D [7112 0 R /XYZ 100.892 685.529 null]
+/D [7111 0 R /XYZ 100.892 660.623 null]
 >> endobj
 7115 0 obj <<
-/D [7112 0 R /XYZ 100.892 660.623 null]
+/D [7111 0 R /XYZ 100.892 653.25 null]
 >> endobj
 7116 0 obj <<
-/D [7112 0 R /XYZ 100.892 653.25 null]
+/D [7111 0 R /XYZ 100.892 641.295 null]
 >> endobj
+698 0 obj <<
+/D [7111 0 R /XYZ 100.892 492.153 null]
+>> endobj
 7117 0 obj <<
-/D [7112 0 R /XYZ 100.892 641.295 null]
+/D [7111 0 R /XYZ 100.892 466.192 null]
 >> endobj
-698 0 obj <<
-/D [7112 0 R /XYZ 100.892 492.153 null]
->> endobj
 7118 0 obj <<
-/D [7112 0 R /XYZ 100.892 466.192 null]
+/D [7111 0 R /XYZ 100.892 410.985 null]
 >> endobj
 7119 0 obj <<
-/D [7112 0 R /XYZ 100.892 410.985 null]
+/D [7111 0 R /XYZ 100.892 411.562 null]
 >> endobj
 7120 0 obj <<
-/D [7112 0 R /XYZ 100.892 411.562 null]
+/D [7111 0 R /XYZ 100.892 352.414 null]
 >> endobj
 7121 0 obj <<
-/D [7112 0 R /XYZ 100.892 352.414 null]
+/D [7111 0 R /XYZ 100.892 350.869 null]
 >> endobj
-7122 0 obj <<
-/D [7112 0 R /XYZ 100.892 350.869 null]
->> endobj
-7111 0 obj <<
+7110 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F4 5484 0 R /F15 3700 0 R /F59 4373 0 R /F17 3698 0 R /F53 3738 0 R /F51 3736 0 R /F52 3737 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7125 0 obj <<
+7124 0 obj <<
 /Length 2472      
 /Filter /FlateDecode
 >>
@@ -29282,39 +29590,39 @@
 1’÷=ššFÛ~×nxN¥O¹;–á–™p©3a Q‰Þ~[e¡OñÐ -kõŒA’“Ú0$f£é²ÏTÒ<ãLV'-ƒÅDÕå¥òîlH± Þ`¤Ê å§péª(BÍbÂã}‡±LZ…¹Z`0Êê¦âAìY³2£ÂP5©óy=!ç|vGÄP; J^tmº³g}OfŠÏ@U'SN."÷§¤©½Àij³œ	îSàq3[z’SØTÿg€`”àé?èà¡Ê=8’£òé(gx?À…Øy¸ À¤ìæ€6<3T¿n½Û¶ýÐÏuXÖˆD'c‹D뱆	dcžñŽ]&(¨Z…¢fé4c¸á ‚UsœÊ2ê]_’MÐïÃÌ% f~ð±ÿìtÍÂ
 endstream
 endobj
-7124 0 obj <<
+7123 0 obj <<
 /Type /Page
-/Contents 7125 0 R
-/Resources 7123 0 R
+/Contents 7124 0 R
+/Resources 7122 0 R
 /MediaBox [0 0 612 792]
-/Parent 7131 0 R
+/Parent 7130 0 R
 >> endobj
-7126 0 obj <<
-/D [7124 0 R /XYZ 151.701 685.529 null]
+7125 0 obj <<
+/D [7123 0 R /XYZ 151.701 685.529 null]
 >> endobj
 702 0 obj <<
-/D [7124 0 R /XYZ 151.701 610.408 null]
+/D [7123 0 R /XYZ 151.701 610.408 null]
 >> endobj
+7126 0 obj <<
+/D [7123 0 R /XYZ 151.701 582.124 null]
+>> endobj
 7127 0 obj <<
-/D [7124 0 R /XYZ 151.701 582.124 null]
+/D [7123 0 R /XYZ 151.701 496.666 null]
 >> endobj
 7128 0 obj <<
-/D [7124 0 R /XYZ 151.701 496.666 null]
+/D [7123 0 R /XYZ 151.701 497.243 null]
 >> endobj
-7129 0 obj <<
-/D [7124 0 R /XYZ 151.701 497.243 null]
->> endobj
 706 0 obj <<
-/D [7124 0 R /XYZ 151.701 425.661 null]
+/D [7123 0 R /XYZ 151.701 425.661 null]
 >> endobj
-7130 0 obj <<
-/D [7124 0 R /XYZ 151.701 396.485 null]
+7129 0 obj <<
+/D [7123 0 R /XYZ 151.701 396.485 null]
 >> endobj
-7123 0 obj <<
+7122 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R /F53 3738 0 R /F4 5484 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7135 0 obj <<
+7134 0 obj <<
 /Length 2292      
 /Filter /FlateDecode
 >>
@@ -29341,49 +29649,49 @@
 tçýÞwXˆ—Lò_ñ jÄ
 endstream
 endobj
-7134 0 obj <<
+7133 0 obj <<
 /Type /Page
-/Contents 7135 0 R
-/Resources 7133 0 R
+/Contents 7134 0 R
+/Resources 7132 0 R
 /MediaBox [0 0 612 792]
-/Parent 7131 0 R
+/Parent 7130 0 R
 >> endobj
-7132 0 obj <<
+7131 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./xslt/figures/important.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 7140 0 R
+/PTEX.InfoDict 7139 0 R
 /BBox [0 0 29 29]
 /Resources <<
 /ProcSet [ /PDF /ImageC ]
 /ExtGState <<
-/R7 7141 0 R
+/R7 7140 0 R
 >>/XObject <<
-/R8 7142 0 R
+/R8 7141 0 R
 >>>>
-/Length 7143 0 R
+/Length 7142 0 R
 /Filter /FlateDecode
 >>
 stream
-xœ+T0Ð3T0 A(œË¥d®^ÌU¨`daцzæÆ&æ ÚÈÌÔ¢ÎBÁ%Ÿ+L®
+xœ+T0Ð3T0 A(œË¥d®^ÌU¨`daцzæÆFFPÚ¢ÌBÁ%Ÿ+t
 endstream
 endobj
-7140 0 obj
+7139 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110837)
-/ModDate (D:20080610110837)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090357-05'00')
+/ModDate (D:20080528090357-05'00')
 >>
 endobj
-7141 0 obj
+7140 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-7142 0 obj
+7141 0 obj
 <<
 /Subtype /Image
 /ColorSpace /DeviceRGB
@@ -29403,30 +29711,30 @@
 ¬Õ+(Í-Xè ì»¾›|ßëPÕÀ+í‰Rõìô¿>È*øƒ{°lK,XsYÙ’ÌQáw®ÝìY¯¦ØT§ÅÆ{5tƒì-7sç‚dX¼e‚âáWN;mv¢ì’§EÐtË|l¬Gwe+È7ž18+áH`'‰4pJ¼ ÀN‘À
 endstream
 endobj
-7143 0 obj
-58
+7142 0 obj
+54
 endobj
-7136 0 obj <<
-/D [7134 0 R /XYZ 100.892 685.529 null]
+7135 0 obj <<
+/D [7133 0 R /XYZ 100.892 685.529 null]
 >> endobj
 710 0 obj <<
-/D [7134 0 R /XYZ 100.892 269.067 null]
+/D [7133 0 R /XYZ 100.892 269.067 null]
 >> endobj
+7136 0 obj <<
+/D [7133 0 R /XYZ 100.892 244.588 null]
+>> endobj
 7137 0 obj <<
-/D [7134 0 R /XYZ 100.892 244.588 null]
+/D [7133 0 R /XYZ 100.892 176.345 null]
 >> endobj
 7138 0 obj <<
-/D [7134 0 R /XYZ 100.892 176.345 null]
+/D [7133 0 R /XYZ 100.892 177.528 null]
 >> endobj
-7139 0 obj <<
-/D [7134 0 R /XYZ 100.892 177.528 null]
->> endobj
-7133 0 obj <<
+7132 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R /F17 3698 0 R /F4 5484 0 R >>
-/XObject << /Im27 7132 0 R >>
+/XObject << /Im27 7131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7146 0 obj <<
+7145 0 obj <<
 /Length 2654      
 /Filter /FlateDecode
 >>
@@ -29450,27 +29758,27 @@
 jPjÉ+†`x£^ÀG-6nG®pÅã¡>.Àr.IÉr…ç[Í2ÉÑT¼L…0ÕZ#mî#à»·ssMþ¼ZüãÔö+;÷£¹ø: Û¸Àló?+Oj(Mþ„­Ëî
 endstream
 endobj
-7145 0 obj <<
+7144 0 obj <<
 /Type /Page
-/Contents 7146 0 R
-/Resources 7144 0 R
+/Contents 7145 0 R
+/Resources 7143 0 R
 /MediaBox [0 0 612 792]
-/Parent 7131 0 R
+/Parent 7130 0 R
 >> endobj
+7146 0 obj <<
+/D [7144 0 R /XYZ 151.701 685.529 null]
+>> endobj
 7147 0 obj <<
-/D [7145 0 R /XYZ 151.701 685.529 null]
+/D [7144 0 R /XYZ 151.701 311.588 null]
 >> endobj
 7148 0 obj <<
-/D [7145 0 R /XYZ 151.701 311.588 null]
+/D [7144 0 R /XYZ 151.701 312.771 null]
 >> endobj
-7149 0 obj <<
-/D [7145 0 R /XYZ 151.701 312.771 null]
->> endobj
-7144 0 obj <<
+7143 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R /F17 3698 0 R /F52 3737 0 R /F53 3738 0 R /F4 5484 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7152 0 obj <<
+7151 0 obj <<
 /Length 1747      
 /Filter /FlateDecode
 >>
@@ -29492,34 +29800,34 @@
 Þú“Qù
 endstream
 endobj
-7151 0 obj <<
+7150 0 obj <<
 /Type /Page
-/Contents 7152 0 R
-/Resources 7150 0 R
+/Contents 7151 0 R
+/Resources 7149 0 R
 /MediaBox [0 0 612 792]
-/Parent 7131 0 R
+/Parent 7130 0 R
 >> endobj
-7153 0 obj <<
-/D [7151 0 R /XYZ 100.892 685.529 null]
+7152 0 obj <<
+/D [7150 0 R /XYZ 100.892 685.529 null]
 >> endobj
 714 0 obj <<
-/D [7151 0 R /XYZ 100.892 660.623 null]
+/D [7150 0 R /XYZ 100.892 660.623 null]
 >> endobj
-7154 0 obj <<
-/D [7151 0 R /XYZ 100.892 641.703 null]
+7153 0 obj <<
+/D [7150 0 R /XYZ 100.892 641.703 null]
 >> endobj
 718 0 obj <<
-/D [7151 0 R /XYZ 100.892 517.09 null]
+/D [7150 0 R /XYZ 100.892 517.09 null]
 >> endobj
-7155 0 obj <<
-/D [7151 0 R /XYZ 100.892 490.082 null]
+7154 0 obj <<
+/D [7150 0 R /XYZ 100.892 490.082 null]
 >> endobj
-7150 0 obj <<
+7149 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7158 0 obj <<
+7157 0 obj <<
 /Length 1453      
 /Filter /FlateDecode
 >>
@@ -29538,34 +29846,34 @@
 þdÊëR¢ñq×Fçr²nȀǧqæ‚OÕ‰©êf¹ê̞؝qùžêlº­;s½fˆ@\Æâƒ/Éq&<æŸê®‚=NÀG¸»}Ž¸Û9½'¯AöÞö¸l ³ì›'S’ArzÕn$´ÛÖÒ˜R½s9¥½¹ý-=×–GK%r¶¶_7¦èd»…×Ϧ™Rêj ê­¦™êrö‚¶·O,FÚ·@ßùž€7céQCÀÄí½Ú¤~å;€„ÆÞûl¶šš¬îŒÏJQ̳pD©b‰ôüi)`‰Ö¶Ãàýî|Üœs˜¿ðLá	Ë.¬ÎßœR9…#åÓ-Ïxñ¶M‚—=¬Ñ¢h²ÍLºíêdþ‘PP:I@Ór_B/É|G"\? Ñ:¬?ªH9T‘Ø"(TG¬$§'‰O'–¹t•Mmº‘Êýü/FÌ3Æóâ§ÿBÁOÿ§F-,eõ3<ȹúÁBšs–ÃÇûWlL¡üC™~—¦ç›~]
 endstream
 endobj
-7157 0 obj <<
+7156 0 obj <<
 /Type /Page
-/Contents 7158 0 R
-/Resources 7156 0 R
+/Contents 7157 0 R
+/Resources 7155 0 R
 /MediaBox [0 0 612 792]
-/Parent 7131 0 R
+/Parent 7130 0 R
 >> endobj
-7159 0 obj <<
-/D [7157 0 R /XYZ 151.701 685.529 null]
+7158 0 obj <<
+/D [7156 0 R /XYZ 151.701 685.529 null]
 >> endobj
 722 0 obj <<
-/D [7157 0 R /XYZ 151.701 381.288 null]
+/D [7156 0 R /XYZ 151.701 381.288 null]
 >> endobj
-7160 0 obj <<
-/D [7157 0 R /XYZ 151.701 351.18 null]
+7159 0 obj <<
+/D [7156 0 R /XYZ 151.701 351.18 null]
 >> endobj
 726 0 obj <<
-/D [7157 0 R /XYZ 151.701 301.656 null]
+/D [7156 0 R /XYZ 151.701 301.656 null]
 >> endobj
-7161 0 obj <<
-/D [7157 0 R /XYZ 151.701 274.56 null]
+7160 0 obj <<
+/D [7156 0 R /XYZ 151.701 274.56 null]
 >> endobj
-7156 0 obj <<
+7155 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R /F88 5678 0 R /F72 5679 0 R >>
-/XObject << /Im3 6520 0 R >>
+/XObject << /Im3 6519 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7164 0 obj <<
+7163 0 obj <<
 /Length 2052      
 /Filter /FlateDecode
 >>
@@ -29593,27 +29901,27 @@
 q
 endstream
 endobj
-7163 0 obj <<
+7162 0 obj <<
 /Type /Page
-/Contents 7164 0 R
-/Resources 7162 0 R
+/Contents 7163 0 R
+/Resources 7161 0 R
 /MediaBox [0 0 612 792]
-/Parent 7131 0 R
+/Parent 7130 0 R
 >> endobj
-7165 0 obj <<
-/D [7163 0 R /XYZ 100.892 685.529 null]
+7164 0 obj <<
+/D [7162 0 R /XYZ 100.892 685.529 null]
 >> endobj
 730 0 obj <<
-/D [7163 0 R /XYZ 100.892 320.19 null]
+/D [7162 0 R /XYZ 100.892 320.19 null]
 >> endobj
-7166 0 obj <<
-/D [7163 0 R /XYZ 100.892 294.563 null]
+7165 0 obj <<
+/D [7162 0 R /XYZ 100.892 294.563 null]
 >> endobj
-7162 0 obj <<
+7161 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F17 3698 0 R /F51 3736 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7169 0 obj <<
+7168 0 obj <<
 /Length 2560      
 /Filter /FlateDecode
 >>
@@ -29637,48 +29945,48 @@
 ørC3v…×6¨…Ëp{ÿ”w†éC¨œtd§«¦Þˆ“ú‚„(A¬ ý^ nÕ—érÙàGNCåè›´G ;ˆÀ$:&0.s¨:៴/!.…wé^Ä°Q‡€¬1ì	"æëÞMA™Wh—¯Ðõ:V?yE%zTΣ/ï?ÔC{yˆ³.nÖCÓ{p¿õbÒ¥rmp\P¦EßáˆåAS6ìúÎe¹—>à?Iv–BûS@º\ŒFüðîø/é}–
 endstream
 endobj
-7168 0 obj <<
+7167 0 obj <<
 /Type /Page
-/Contents 7169 0 R
-/Resources 7167 0 R
+/Contents 7168 0 R
+/Resources 7166 0 R
 /MediaBox [0 0 612 792]
-/Parent 7179 0 R
+/Parent 7178 0 R
 >> endobj
+7169 0 obj <<
+/D [7167 0 R /XYZ 151.701 685.529 null]
+>> endobj
 7170 0 obj <<
-/D [7168 0 R /XYZ 151.701 685.529 null]
+/D [7167 0 R /XYZ 151.701 578.99 null]
 >> endobj
 7171 0 obj <<
-/D [7168 0 R /XYZ 151.701 578.99 null]
+/D [7167 0 R /XYZ 151.701 579.567 null]
 >> endobj
 7172 0 obj <<
-/D [7168 0 R /XYZ 151.701 579.567 null]
+/D [7167 0 R /XYZ 151.701 529.341 null]
 >> endobj
 7173 0 obj <<
-/D [7168 0 R /XYZ 151.701 529.341 null]
+/D [7167 0 R /XYZ 151.701 527.797 null]
 >> endobj
 7174 0 obj <<
-/D [7168 0 R /XYZ 151.701 527.797 null]
+/D [7167 0 R /XYZ 151.701 465.616 null]
 >> endobj
 7175 0 obj <<
-/D [7168 0 R /XYZ 151.701 465.616 null]
+/D [7167 0 R /XYZ 151.701 464.072 null]
 >> endobj
 7176 0 obj <<
-/D [7168 0 R /XYZ 151.701 464.072 null]
+/D [7167 0 R /XYZ 151.701 452.117 null]
 >> endobj
-7177 0 obj <<
-/D [7168 0 R /XYZ 151.701 452.117 null]
->> endobj
 734 0 obj <<
-/D [7168 0 R /XYZ 151.701 361.122 null]
+/D [7167 0 R /XYZ 151.701 361.122 null]
 >> endobj
-7178 0 obj <<
-/D [7168 0 R /XYZ 151.701 331.144 null]
+7177 0 obj <<
+/D [7167 0 R /XYZ 151.701 331.144 null]
 >> endobj
-7167 0 obj <<
+7166 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F51 3736 0 R /F15 3700 0 R /F85 5513 0 R /F4 5484 0 R /F59 4373 0 R /F52 3737 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7182 0 obj <<
+7181 0 obj <<
 /Length 2052      
 /Filter /FlateDecode
 >>
@@ -29700,28 +30008,28 @@
 éìoG#K	
 endstream
 endobj
-7181 0 obj <<
+7180 0 obj <<
 /Type /Page
-/Contents 7182 0 R
-/Resources 7180 0 R
+/Contents 7181 0 R
+/Resources 7179 0 R
 /MediaBox [0 0 612 792]
-/Parent 7179 0 R
+/Parent 7178 0 R
 >> endobj
-7183 0 obj <<
-/D [7181 0 R /XYZ 100.892 685.529 null]
+7182 0 obj <<
+/D [7180 0 R /XYZ 100.892 685.529 null]
 >> endobj
 738 0 obj <<
-/D [7181 0 R /XYZ 100.892 620.268 null]
+/D [7180 0 R /XYZ 100.892 620.268 null]
 >> endobj
-7184 0 obj <<
-/D [7181 0 R /XYZ 100.892 593.761 null]
+7183 0 obj <<
+/D [7180 0 R /XYZ 100.892 593.761 null]
 >> endobj
-7180 0 obj <<
+7179 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R /F59 4373 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7187 0 obj <<
+7186 0 obj <<
 /Length 2095      
 /Filter /FlateDecode
 >>
@@ -29742,28 +30050,28 @@
 SD 要ºÿ(îë=…9U UŒÞŒ(z¤?é̹Í<öŠõ‚e/. ñÍ/͘§RM9k|ÐGÈaÿßKt“
 endstream
 endobj
-7186 0 obj <<
+7185 0 obj <<
 /Type /Page
-/Contents 7187 0 R
-/Resources 7185 0 R
+/Contents 7186 0 R
+/Resources 7184 0 R
 /MediaBox [0 0 612 792]
-/Parent 7179 0 R
+/Parent 7178 0 R
 >> endobj
-7188 0 obj <<
-/D [7186 0 R /XYZ 151.701 685.529 null]
+7187 0 obj <<
+/D [7185 0 R /XYZ 151.701 685.529 null]
 >> endobj
 742 0 obj <<
-/D [7186 0 R /XYZ 151.701 618.859 null]
+/D [7185 0 R /XYZ 151.701 618.859 null]
 >> endobj
-7189 0 obj <<
-/D [7186 0 R /XYZ 151.701 594.079 null]
+7188 0 obj <<
+/D [7185 0 R /XYZ 151.701 594.079 null]
 >> endobj
-7185 0 obj <<
+7184 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F17 3698 0 R /F88 5678 0 R /F72 5679 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7192 0 obj <<
+7191 0 obj <<
 /Length 2233      
 /Filter /FlateDecode
 >>
@@ -29789,214 +30097,490 @@
 ‚t+ƒ¢ËèÞÍî˜M€	®=0RJY7ŽO¯tpõ¿TÝ_¨kÜÞü;…Íì
 endstream
 endobj
-7191 0 obj <<
+7190 0 obj <<
 /Type /Page
-/Contents 7192 0 R
-/Resources 7190 0 R
+/Contents 7191 0 R
+/Resources 7189 0 R
 /MediaBox [0 0 612 792]
-/Parent 7179 0 R
+/Parent 7178 0 R
 >> endobj
-7193 0 obj <<
-/D [7191 0 R /XYZ 100.892 685.529 null]
+7192 0 obj <<
+/D [7190 0 R /XYZ 100.892 685.529 null]
 >> endobj
 746 0 obj <<
-/D [7191 0 R /XYZ 100.892 618.395 null]
+/D [7190 0 R /XYZ 100.892 618.395 null]
 >> endobj
-7194 0 obj <<
-/D [7191 0 R /XYZ 100.892 591.957 null]
+7193 0 obj <<
+/D [7190 0 R /XYZ 100.892 591.957 null]
 >> endobj
 750 0 obj <<
-/D [7191 0 R /XYZ 100.892 180.718 null]
+/D [7190 0 R /XYZ 100.892 180.718 null]
 >> endobj
-7195 0 obj <<
-/D [7191 0 R /XYZ 100.892 153.868 null]
+7194 0 obj <<
+/D [7190 0 R /XYZ 100.892 153.868 null]
 >> endobj
-7190 0 obj <<
+7189 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F17 3698 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7200 0 obj <<
-/Length 1735      
+7199 0 obj <<
+/Length 1730      
 /Filter /FlateDecode
 >>
 stream
-xÚ­WKsÛ8¾ûWè¶òL­ˆ½ŽMÒî´Ó¤³MföÐöÀØJ¬‰-¹’\oþý~ H[rÜtw»AP<qðûäüvrö6‰GE\ˆàö>‰ˆ²Xi^DI¡ƒÛEð9y<ýzûþì­”AiªITÊ"Jµ†&+t]öS‡»©,†¨öq:SIž·vºëªúa:ZdáÅÒlú²¥u
-«|òævòm" 
-öÌH"¥‚ùzòùk,°ö>ˆ#UäÁÎJ®•äQš$ WÁÍäI<¼›HNÞMÃðÔÝÍ̧2—UùÆ†Ýt¦cö˪{R¡©Ì»1k»3<]™'|7Ñöeå%«šÇ®Y—L™¶4]4¥‰8ÖS9-s³1w+'ßÜ“_p™™PQ¢¶wÞ6]7ë¶w5ü=SJ…wð¯Ì¼‰³[–5Só¦þý°mË…ç´m9§köS®ž¦¹
-#‘ˆtÑÔ]µ°„m†Ò¡°{GŸÆ>0Ö:¶D‡Ûîx„èeý“Ÿ­ÔÛŠÌa	¼Ž8’akN‡CRQ–ÇñÙãá…OãY!ùº{«òƒUÇ”&P]ø€¿°/q3x‰óg/ñæ/³Þ¬Ê—®„×Yñ_BüxÜ«Nsän¨qË¡úÛ$Ž´]ö£eúŽqön-óà²Á‡SR3‘F90a&#·ý‹Ø´ÙÀ¶2U%**gß.)MÀ¢¨îª®ï?'–Û/Û²d’ÓÃI‰“X¼"º¥óP)öÊêrÞÛüÀôŽBû‰5bÛfØrç’ÞOÂ)ü$Iã«S»[VŒ1€ˆ$
-uÓ3±1]Ç2Ù,æ7‹w(¸¥%§+dÒP°èÒ¸=”Þºh¾&@ÃzU—ïhj^©zØ*3Iø&Â-ôräÒš<h=qƒûfZ°öœµ“¶4fl¤5ID+ØJ^ƒi°·TákkP·% dawZ¿tœ5@´¦m½_0ý)CÍjE*‡^ðîëxÁPŽ1FFâô
-¹…ò,,ybaœ—n_䞉ÐÍ<> 26Ì¢°°7 í]…ô¯`ƒEÜÊÔÓo'Ü™GûŒGpLô¸:ø
-êPW¯Ås ‘:
-$p…õÅ”Œd¦Æ¨8Î9‰ªˆè€.”xíPñ‚Ï¥Ò¨áþ‰‰'x°¥Kz/X€B€Fö $/¯ qÎ49«ŠÊˆê,ò«rºw’|4+²(É{*q°Y­LO™®Ý»(sD¶vn¾r û#áѳ9‡ë<;œv\Ëç×T%Ó,@îä'8ø3§k©#´P¤JùJtÉG[°ƒ­G%+.I)—£LG) ™,	ÿ|w}C”FunZ‚ª<á„¥›-$Ì~§Õ2o˜§Ì±©CRG‘‚†WÚòn÷* ¬jO…:ZÅówo¸DÖfmO at g°«ú¥ëúqOâ\óÚšB­Yiß9“Ïì”ÞNß“5üe€w»±~pAºôW('¼Æ‘bµúkÈAdµþx—ª<̼۬<uMÊ•aéÀˆg¶\±sz^ìëVáóË6‰YÈô,³Åh~´”QŒ:+¥Šrý«1Šà¤x‡®T«=0ÐÙ;kÈgëAXçïìÂÅ)6¦é(‰…Íxq2ÁzEÆÃY¨_2^ägçVW\8ã	|¨O«j‹M9ã8|Ël«@rïƵznª‚O”JÿS•L£4.Ʀ^þSÕ™¢C*;_œd6N
-û"Ó8.?B›/hhkôš§Æõ9^ÛJ]g	õG6Á-¹1m_Í·+Ó;0Ø•ÄéÉU(Y?a¢H£Lÿšçð· ̬®DëC„°¥¿†©Ù2³ø>Mm?aÜåù_ÁŠb«ô¨…«êzßÓ‡VœÀ`|¸:gÂ?VpyJ	ÿ[$Üÿ"ÎͶ+=ʱ@Ս~¤”û‘Òû©Ë«ó“xø‘Z;@ziö&f„02wÃ!‘G?p¶‰+ŽÑž÷àe\E'zýV®q‡‚¯2éäniZò× ]ÞS5ªæªq¬­ó–Ú·¾<õpg‹ÈS§Åþ(~éÜ’WOŠöâvéøüD´·>…Ôÿ)ûŸkr[ˆlÂ_sY}ŸrkH¬Ì;ϹÄBæÑÊ—ž^…¦¦]0m«ô­	÷fîŽþQ“ˍT"‡­>3l/†qè j«³sà›<–îwŠøÔ*¹÷¼-ìÆZݹdÓíOrP·)F†ò~DÖÿ
-ö‰þ
+xÚ­WKsÛ8¾ûWè¶òL­ˆ¤^<ÖI»ÓN“Î6žÙCÛc+‘&¶äŠr½ù÷‹iKŽ›ÙÝìEAAàAü>™/&ïÓ8q¤c-‚Å} Rå±²BG©N‚Å*øŠ"ž~_|¼x/ePD:Ë•RGY’€&º)û©ŠÃýTê°Eª{œÎTš†óŽ¦{[7Ó™HD^VfÛ—®'¡ å“w‹É‰ m`ÏÀŒ4R*Xn&_¿ÇÁ
+Ö>q¤tìIr¨´ˆ²4zÜNþ˜Äû‰ôìÝ0<sw3Ë©,ª.âX‚¡Î’X†}UÛ7@
+šfż[³A±;ÃÓµypÂwÓn¯j/Y7<ÚvS2eºÒØh:ËRqª§vZ–fkîÖN¾½G¿ÀefBEi¢ÙÞe×Z;³»»ü=SJ…wà_™{ÿ"g_•
+S˶ù‹äaו+Ïéºr‰×ì§"\?MFþ )"Q(>è²ml½¢G‚m‡$ÄCÁî=~Zz`X³lIî¶NØò>À—õO|%©÷5šÃð:âD†­9©Æ¨Ô§ñëü—ñðBŒ§ã™’|݃UÅÑªÓ ÊRP­}À_ÒKÜ^bþì%Þýe6ÛuùÒ•0Â…þ/!~:TgE$t¨\GZ	TýcG	-û‘˜~‡c\|ØÈ"¸jáŒã)G©™È¢0a&A½ü74°i³m/dªJU$A/ù{Qaš £ÚÖ¶·Œ'Äí«®,™äôpÒßâ4oÖ¡¤±0ÅAYS.{ʘÞah?±æA¬ób×î ¶Ü¹¨÷‹p
+¿HÔøæ\Æî«š1 "ÍÃUËcÓöLlµLA&›ÕÒÀÍ"Æ.ÈÒ’Ód²P°heÜLo]8ß  ÁzÝ”–w´
+¯Ô=Ø*s‰ø&ÂèåÈÅ5yÔzæ÷í`@&‚µ¬µe1c#®yLBZñÀVá5È‘º¥
+ß’Av‡@ÉÂî´¾rœ
+€hƒÛz¿`ús†šõU½àÝgyÁ`Ž#1FFäô-ŽAy–<!ÇÅÊí³€Ü3º™ÂˆŒ-³0,è¸Ý֐þ5Ø@ˆ[S@=ývÖÉÖ<Ò3bcr@ë£¯@ÔÕñHd’pQÅâÅ”Œd®Æ¨8Î9	U¢ƒt‰Ø¡â%Ÿ‹!”@
+÷OŒ<Á•.X:úÓ{|Å8²Aòê$æL£³ê¨Œ°ÎB~ÕN÷¾†‡DÍt¥¹`O¥®¶ëµé1Ó÷.*)¸
+B¶Z7_;€ z‘ðèٜÓ";wÜÈçO°Jfy ¹óT¾Êé‰L"h¡PUš:Ÿ_ñÑv`ëI	‡—¤˜ËQ®ôI
+€Lž†~¸¹E*êÜ1>tUEÊ	‹+”-(Ì~NTǼaž2‡R¥N,B-¯tå¸Ý« euw.Ô¡Uœø|Ë%²1::ƒ}ÝW®sèÇ=‰sÍ[2[³’Þ9—Ïì”ÞNß“µüe€înK~pAº诡œðG
+iõאƒÈêüñ.Uy¶]›ey5ªÐaéÀˆgT®tìœ^èCÝÒ>¿¨I$\dLd!Ó³Ìf£ÅyPH¤Œb¨³RªHË×Æ(t(ï +—ê xöž`
+ò™<Öù;;¤pqª ßÎFI,(ãÅÙÐ(4ŒP¹z•ñ:pvAºDîŒGðÁ>­n›
+Æ7àñ-§V-äÞ7깩
+|¢Tö¿˜ªde±›zõOLUX/dRi}q’ù85è%DžÀqÅ	bP¾@CóØp 7<5®Ïùäðšj(vAœ%ØQ‚¹5]_/wkÓ
+;0°+³³ª Ì$ð&tòužƒ¿% Âœte29F(Vùk˜†-3«ŸÓQú	óà.Ïÿ*¬Pb•´puÓzzãЊŸ®çLPðÃ
+\SÂÿ	÷ŸÆ¿ˆK³³¥G9¨íèGJ¹©äð#uu=?‹‡Ÿ±µH/͡Ä"Œ,œÈpƒäÉ5qúíyRÆUt¤ÇÐOr­;ø
+!O¶•éÐ_çÚ(Gõ’°Î¥BOÔ¡÷å©Ç;ª"OLq êÃYü",bÝ’W
+ýÅ¢r|~#ÜÛ­rhtôŸ‚áðsŽb!›à¯¹¬N¹5D†?UƒÆç\bAæ‘äË-Ï¯‚¦¶[1MÕ@úÖ÷féŽþU“ˍT*‡­>3¨ƒqèl«³oÀ5E,Ýïò±Urïy[hÇZݹÈÆNr ncŒÿäýYÿ7Áˆ‰æ
 endstream
 endobj
-7199 0 obj <<
+7198 0 obj <<
 /Type /Page
-/Contents 7200 0 R
-/Resources 7198 0 R
+/Contents 7199 0 R
+/Resources 7197 0 R
 /MediaBox [0 0 612 792]
-/Parent 7179 0 R
-/Annots [ 7196 0 R ]
+/Parent 7178 0 R
+/Annots [ 7195 0 R ]
 >> endobj
-7197 0 obj <<
+7196 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-HOWTO/images/browsing1.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 7203 0 R
-/BBox [0 0 794 509]
+/PTEX.InfoDict 7202 0 R
+/BBox [0 0 796 508]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 7204 0 R
->>/Font << /R9 7205 0 R>>
+/R7 7203 0 R
+>>/Font << /R8 7204 0 R>>
 >>
-/Length 7206 0 R
+/Length 7205 0 R
 /Filter /FlateDecode
 >>
 stream
-xœÝ]Ë®$¹qÝ×WÔÎÓ‹I%ßäR£¶ M7 …Ç૱ÆFµ
-%ø÷}Nð̺·ªnàAè˨à #™ŒÁGÎ_ÎûfÎ;ÿ×þ}ù|úÕéüçÿ9í[ڍIö|ýÇ/>™óœŒ3~³þìR´›)goò¶›x.)l!˜ó/?þýdÍ–÷Ýœÿ÷$ÍœøûGê}<Ù-Ù õŒa+îìCL[IgçüÑÙ³ùà*|€€Úl¸rÞo©ÜYç6çï€4Yw¶{Ùö=ŸcÜR4©‚ö3Ÿ)VÌÐp)[¶çÏJ`¶t61%üƒÇ6cPŒey”_ h;*Dð[N³þ(Š~Vh»ã‘…óP`ñ䃟M´2kÔ>@íਿð‚q}>›~æ¸^
-ÆÙmžO›ÍÓ>¿o±(ûjYÛ×Ý ® —kÊ@݆mjH˜VµQËÓÀh]ìõ–A{"«ú°¶€·©Ø1/Tø­ù-æªKz ÄžýÙïhÅÈÛÍ¢Ëðp\þ_°ù¢!M² ‚utG
-Õ$+ª8xÀU%*Â].ªª`Á$gí5‰Fí[(%îå|ýŸ¡u;GÄÅ”·,¶7}¤ÒËêÁ1˜—Ù̵dÖÊÞmÉtÅ—cKŽÍû5þ³<™[¤gAðïhǦMhd‹xÍÎ…#ßÝGk–³Ýp‘,ç…å0¡ý¢	[†ÞAÞ£ÏåȁÀö£¦x Yƒ‰ïh2Ö“
-‰õ!1c}ÎîÀr6›B?n7DZ›’ä¶Ï([™Ù r´aóŽ'1Ë/'›
-š‘2xÕN£\›`.);Fq*(	O[5QË/§Ñ‡è]¬õ6Ði>§]ÛÍŸ]``¤MäË«L´˜4ÚÄZÖ&6Ä0 )åÚ„6‘nØ(ƒÙö Ú¨eecô>6+ÖÁ{.ËÖ³	Ó…1OƒÝvv†ïsÖÛæ˜îƒ0ã‚#ágÈÄ%°r)Â6¤²%· ªdAE4a­F5É‚JèŽ_t5ÉŠ*Q([¡ªdAez&
-ª¹Í}–~LßÔ¹Þ½x6,\Ž~ý2[9”g‚€Ãš¡õrÕ©ïýÚ¾Ï|.Xð(ÇÄÖõ¨Z2™Ýf:°õ= ×ÜçB=·€yƒ^£:؍dDR*>@>!AÈ+ȺÈ!êDƒ·5Y·hîh2Þn˜ä˜ûÌþ )›õ¹b¢Ì-»KpûyJLrô¶ Ct¥¦;HQÞ™vôòËÉe ­ŸˆÌ+SC/·6X£K̾í¬Ñ4X´×}´ÑʨÑ{1½ßMÃÁzÐçµm¡ÀiÞg3=œ®Wfº,/à0³–µ™
-1ÌlF¹¶¡Ì4ÑJ at 74`ƒ1fµ¬ÌˆÞ˦á`Ç2„OgÛBƒŽ$šëŒÅ¯œÕсYryßÂóûNýR*%!Êä‘.q©r'‰yCKÚªIT¿2½¨&YPB5ÉŠBRèWT•,¨‚s÷Õ$u›w"„ O yô¢ÉL±Ž>þ¢Ú¹’ŒZ~Ï•ÀšæËU[¤Â÷m_èP+ñ(þr2õïöÏËçówŸN¿ú¡œ;Ý}BÖZgCBAbätÄqŸ>Ÿþå›ß™?þú÷6î;ÿüîÿ~úGP%¦º!ˆ7þÓŸNüñ7ç¿ùþŸ¿ûñÇOÿyúí§ÓïïÐ2ò3¼%|—B–ðá¢÷}u|¡´ü \Ó²ÏÄðºEt}ä’gÄ7ï•k\Ú1Ñgì-Œc6i˜°bl@™në1̐‘âXD°T„¦çÓƒ‘3«HŽG$ÁŸ•æ„s0\«5¤ƒÌÐ:<ãGù<‚ÌTЋµ©Ð$ÿ
-¢)Àûùl¢–Y£w¢#z»†Õ
-:ógµlaãñ³I˜QQibÞà¥F&ºÑ…VVVD3bhèåÚ†2“aŠuÓL†)¦¨6jY™9½—]ÃjÇ2€OgÛÂÆa‰ïnLW.Ž&Å	ÿæêšîc8ëƒ,øî\æšu€Éwæd3_Wx«AM¢Qaß­dÑÕ%+ªš£QU² L€‹7Õ$ŠowԝÍÅÈÑ…µ] ŽeZ8ÜxÃï\Ü<:öËlçZ2jPŸÄMóåª-rñû¶¿pqäbž°SËÚ°OaÝ6$Ñ\¬öºæº{å½¹ØRbbRá:Œ¬Hßq­#ÖWdæî/q(‹ªGP1§Ž}f#”iæ}_dSWnÆÀA’ë–æPô èÞÚ@(–¬¨+ržbta'b
-/áÙ!¹ÖH(è^ÄN\6ux—jT N±-* w00á€qqçfÔmEÖËNÉmÓhâKmcó!‰ÎVc÷PGiHÃ%{Ž„ë™ÐäÂ$*º=ÊÂZ+¿œÐpž?[¼Ò²qÕª÷rk@àMb¤_µºÅóG 5´·2à½ýè=nՐ¾žÑª%ö˜æI´àL¼Ó@pꮺÐÊÃÀöó0°UåÚ€2”‹Ü°U'¿F¥½–•Ñûת,X†í‰¬ZâÈÝ©=Õ™	—ŠX©Xd,Q©”ŽèÐǼMËÆÁè–Ë%]‚>ÁŠSŒ;øÄ, ,>¤3
-Ô$Êö%ð²}	\£JYÛ«‚¿zh¯I4êv¼²“Í
-TäNÒçá³3þ)ä¨Õ‰_T#GÁ¨}q’D6­—«v„Þ­íCœÁõ¦0c‡Èø4­}Õ‘Æ]øÇ/[GðÉãÇ«ŽŽ#ÒîËßøÖ–øçoeA–f`ScˆêØ‚ «‡1 øjDëvŸÎ×ðd€á¶3j8„͈ü%Œýßzºâ>èãc Œ‘·AŽ€É$çѱÀŒõ2ÒJ1¢XÚœxCLßol
-Ï^~a€ñÊ‘´¯¡w¼?ˆWeÐŪ)
-·eƒ¼Š—úôC˜ËU­õ%ûZ:Ågò©s'/j]"4Ö!]s¸$$§,&pÏ.kI«%oÕWÒôóÃKfˆ`c(5`6\Dgw‰ñ`#¨°É2wœe¿;zÀ·Æû«(Æ4·Üe²pŤ@ž¶«žWS„+µ~‘ÔJ‡aþ:*e”ýŽ¤#Á#‘õñ5•±®Èê7ߘ(;Õs¹ªU}Ç×Ñôó—úAžÍs|è\@GøÍÿý·¿þôËÙp‰”§ÎL8xË}÷²Šúñoÿö_?ýµþ,îqäÝï5-<ê"öÝ…ÜsŒ!GG<^hà#‚þ¿.q¼õÓÇ[?½2ØcË•Y÷Ÿå F¿:ô 犎…³.¿1¾ŽâIžx¹æn™ùg_£™"LJ¸~+GÐ"Cý81—«Z†ýJ:–¸Íî2YB¶<ùÄ/P¤¤.‰]*¯’ZK^›¯¤é
-ç‡I(‚^LØ÷’´$òL$qÙĪ2–ßð¯¢8:.fÐÑãåp2&ÞqEžZ2Ÿûeb"òî´HZ­Ã8%2Î<çÂæéò$F2o Ë"]ÆúÆÈ,oˆË±Ju
-ÿ-_ìö<{óš×³Ã­
-Û"¨Ï¡?©o¤=‚Â;RàGñàºìó	Ž
-OÝ.ºA}©äZ<ÍÝlô}´´9pûà˜ÅŸ[6pÈo—€1ÏÀŠ…Y©½º„ð |9•™À¬ÞVög
-ùá"ž¢Ãq`€xà’§P:€,~E|t[¢`ØnkÚᥑ³Y$H?bxeY¶a¨e¸ïY·þ‡$E&RrR8±¸“KIi2Ê­ü‚
-Œ‰­BÀL“§‚^Ì}ãH¸qàÏS‚.MÔ2kôNtDïc×°Z!‡žÔ²õTÊø™'¨Êb$»’”•VVÏfjY[Ù݈®¡—kÚLfiF™É¶¢j£–µ™1úÝ4¬v¬øl¶­‡3ØÉø1]Q)%.|9}8ó>ˆ?Êñæë¾n4	S„½Ÿt² ¯@M¢AeçR•ÂTÁAÂ[=M¢@Ž&g…i
-¡ïZ:Ý%
-tçPfDÄÄ«	Ñ~	bwõârÐ#QÇѯ_F3×’YËñ¬Xžš/WmÕm›÷lY™BF’¹jj"·g.VÞSœ¿Ú{ ~owÇðì,Wäõ…"‹ú`Œgâèå#¿> _îöñ`³‘lÛᱚs‡ËväóßÁp7û; ƒWÏ•; cÃ%‚~µŒì‚=^z`
-š…BxLô³ Tæ:ˆán)œ«ÖŒ‚èÌ(¿ †•<y"Œ¼&SC/K¬ÐyçèN9ÉbÏh¢–Y£w¢#z'»†Å
-98ÿœ†­×ƯH.L^ŒlIÚÐo3ÝÙƒZÖFvD·¡keiC[Ék£¬D\§Ÿ£µí÷ÞÅ^}5b¼§2låÕ!»cžê[|eœ}»âŒ÷•2á8é>I̵ꮉ)ŒÉF5ÉŠÊ5HcwÞQŽ
-Ô%Ê ¤KT¨&YQÈyS^PU¢Qw.üq!)afs»,â6/žL–MôËâ×K¦êí\If-¤IŽ
-5Í—«¶$I}×öW~åF_äõc³7Âäëžýš	O‚} ÿ…9±ÑxæÄlÄÉÒo~gÿø=óaÂÏŸþéô͏ßüá~÷ñÇþîô-×ÙSðçúãŸý›³çâÀÅŽÑ<ÂîÀ5»—$»˜²XœÂëtÛ1ÎÆ·¸½Cäwºó“"·0thw‰Ý 1àÚ§áµ(w¥§Ä¾‚v:FЛ'½›³l
-µòË	’½QdCpgÛ+
-£ÜŽMN	ï@Ó殡¦‡³ž.Î^4ÄèeÓp°ã¥îÚ<©mëþñ3yh5“tP”™˜¾ºRÔF¶ß»½z/×´¼{땍<ëTµ¬mlˆÑŦá`Ä:~OeØz“Ô½¥1Y_e÷û(”#žàGß	¹
-"úï“«¤ÍèPy‚ªdA1\I‹ª&YPˆ‚xT¡šdEeãHU%Š
-v§QM¢Q·É=# â-·j0Ðѝxâ±~a¨£[¿Ìv®$³–ñ¼mŸ‡æËU[äÊ÷m!wÃoF«²aãˠ µ¿&÷Gð_Hî…‡
-˜§Ä­È½Jîß=H×Hr
-/Þ?H×À—déudè¢ùÚ–CzÜAŠ°ßÄhÆ~¤)ûMÐCœí/˜DÅkJ"¬äñ%;yÍ{xµÝ*^óN–ç ¹GΓU¹QΔTR
-*gÍ:«Í>4ÄècSp°‚ÿY-[øzþÜimJ*/Í„¶f­ÖŸGÿ[íQîŒ3%•“FýJYS'µÙ†l
-&¬c÷Df­/CÙJͲß&ë@<‘Ÿ[šï,<tسuÉ‚âçŠæô.Ñ(uu‰Fy¹À?AM 1aGŸ4£wÉã\Iã,8nre÷à“õŽ>ý2Û¹’ÌZÑÈœÄxlJnz¼góS;p€‰Y1¯ƒvçëLýþK·¦¥~>¦á¿>ž+j§wÆ™!ÃÓxíÌå]ÈÇSâ±®8Dóú…Öó è­ã9ËÌóU©}Ùww†"É	…"ž¯éù­}÷à:I<3ÆuY–Ž_Ý- ›êíì×vˈŸ+oì»Ðå`âMMò™BÞ?½µïžR’µ(xÌö}<%±çč»ºx2ñ>O4£ü8†–©Ø@x9íÙªBûxÝ”8ùþϬg_Šj –Y£w¡#zÿº†ÕRÙ3Zµ„ ýg.Úú¢
-,©nãõ¸êìèA+NÇïÕ‚Y½•[ÓÆRàU6ri1*kYÛØ­‹CÃj„¹'3l	C’0­ô՝ö@œêY® äœ·"›Ö]"îê¦uâ2òzj
-Š<?ž4¨I¼&€U‰A;×K¨I4([¹^­@M¢@·ƒ$‰Ø9°šlvםáeÛúèÌ/³•kɬUÀÉÆÍ—cSBuïØú‚¤è,ˆ	xkm‘1‘/Á‚tñÏm? ¿·Ó=¿|Šñ.m1K¶ÎKÑF} ®5„ò¿]–ØõÕò²‰§ncx&Ô½±Ó>@;¯Ä¼±ÓÞA¤ky—âfr3Oó
-uäYÔ ^‘7$lò5‹]îCDnâ¹4Ê/¨ôÆ…àÇ¢ÒÐËÒ„Th¹Ú9@ΫŠ£‰ZfÞ‰Žèì+äfÞs¶Þ©l¿®"×Ü]yeÅ#ï‹Çid/O#'¢Ú05´rkcZY2gMV®UËcim´ò´r"Z/‡†Õ=~ÏgÛz¿Ÿƒè³õÕ$ÿç}=0—ѐ‘T¹KxŶ=ëÈ„	˜B5É‚Jk*T“¬(~·Í-¨*YPY|·B5É‚*¼&4ªI4ê6Ç"ýâ$‘æȆwwæ1zI&.‹{÷²½Ý›¹–ÌZiA„¡ørlI²Ò÷k|½e™ŒçqiPf¬”“‡ZÝ
-¸ÿÂ$89L6ž³çO=Åwu§}ìªïuKÝ=¼¥"oÈ´ã{wèïa—!DÌÛDþvý÷WŒÚ16™·è»CL”Ë>71<àߦ„úÎßán~eµÄP¾ƒ2%{†âÚfò5ô'ƒq—.ÚQ~9faBáRÔ¨?Š¦}_~¬\¡µkÚ7Õ÷4pv #z«‚£	âùŸÑ¬•·ÛÏòÕã•…âá‹~±«L{yXØÍ‚^¿[ÃBæ•AH­ÍÿJ€Uê[yZ8½ËUÁÑ=pOeÖúõ%žüåòw›Ÿ¯²õ LôÄm2ìÞø®KxY¬ôåïTÓ
-ª’•á»áͪI¯ø¯-6ÉŠ*¡rúDU‰FÅ=†ÊéÕ%uç‹!ÊoÞƲ..~›÷Ïri7~-\Kf•Èä4u^®Z‘ï!¼SËOyvY¥¶!—½¦¶a¿&êGð_ÈÔ!ùL:‹½ïš»‡wÍ}Þå?ð )? _¿’È•Æ°óq{€3¿‰ÑÔü&Hsó[ ÇÈ9~Ú +›’ÆB/Q)“¤ÚX‹ÉgM¼BðÓ^AièåAdCÒ˜lh¨D5ÛèT6{ѽ—]ÃjGûÖÞ“Úvü\¢ü<ùlH:µ]µ.(>kœˆjÄÔÐÊ“Ò†¤qZ×Ð(k´1Hmôb z¿»†Õ=„ÏgÛás‰I>õ›°ïƒ8ûÑÐB²]¢)Ïž]Ó$Û%ÉîF.€+’m’•åöŽFUÉ‚âSÖ¨&YPüÒ:ò.…j’Ç	Ûóx(Š6»OŸ4xôò—ÑεDñ-÷•KQTylK6Òßµý•¼w^7všŒ÷úé«7Èûü—ÞfÏ ËPŽiöÜIÿýéÿ ¢p
+xœÝ]M$7r½÷¯¨›5å&¿Éãjµ0lØV3€–±€{åŒj+ïÂßï¿‚Yӝ5ð 
+tèaÔc‘IÆ‹àGê/—}3—ÿµ¿Ï/O¿ù1]þü?Oû–vc’½Üþã×??güfýÅ¥`7S.Þäm7ñRRØB0—_~ú'k¶¼ïæò¿OÒÄåÇ¿¿§ÞÇ'»%¤žq!lÅ_|i+éâœß ºc6\…÷q³áÄ_S9Yë6çO@¿Zw±{Ùö=_bÜR±‚öŸ'TÌÐA;Ë–íåE	Ì–.&¦´%ƒ"€1(Dz…2ÊÏÀG4"ø-§©`¥Vè’‚g.CÝýül¢•Y£ub Z»‚Å„g¼ÙG´ê¾Û›×æÃæ6Ð¥Ífe¡Û·X”…µ¬-ìˆn@×Ð˵	mbpFÛÔ1=­j£–•‰Ñ:Ù,F,/î¡ìê¯ÎÈ«óӍù ÂïhΣ»ÆW×tˆ3=cšïhÅÈgÑåݰ•¿Ã'l¾hH“,¨ g·¤PM²¢Šƒ'\PU² b´Û¢ª
+Lrv³QƒšD£v<ñ÷r¹ýŸ¡u,^\ŒyËb{óÛÙE*½®žoó:›¹•ÌZÙ;¾Ù¦øzléÊwó~ÿ"Oæ-Ⳟü&J&q¢1ÍÎ…#5ÛYŸòæÙÎÛyÎÀMØ2,¨ðò}.' ‡‘¶Ÿi²{’õ&È Ë DC|HLYŸ³;°Í¦Ð×­ÛÍñÝMIt[‰”a0§râK±Î^£—ŸŸl*h>ND‚ƒÞíT0ʵ	Öè’¼ã-N9ái«&jùùiô¡zkýƒ
+t›i×Âxóg i9x•‰“F›XËÚĆ4£\›Ð&Ò
+e£7Û®m¬eecô>6+Ö—÷X–-¬gÅÄ1OáwzFH쬷Í1ƒ0ãÝI~,Êãj—"B§"üaC*[òªJTDÖjT“,¨dýæF5ÉŠ*q+‹®&YP™žÉhT“hÔÛìgé	ÉõôPg{÷ãòÖÈ Ï~UͳNAÐAÛ›ÞëMK¤¿÷lýœÿ\°`S¾[X×û}+œÌn3Ý؁ ï€kt!í2+8–ÐkTÇ‘’HM¥ÂÈ#ŽLyYw 9„thðmM½ŒæD“A<©nwÉ!)›ºb"²‰q_”$C9z[/º–!EygÒËÏO.+°#2_\™F¹¶ÁMb¡kg¦Áî‘C~´ÑʨÑ{1­—]ÃÁúÑǵm!Âù3FŽ³‹™.ˆ‡fb§¬Ì¬emfC³š†Q®m(3ŒÁi&Ò€-ÕF-+3¢÷²i8ر¾ÂG³m!CG*m3¿²Ntà^Þ· ýé_àDIrˆµɤK¦>”dâbj©Û@5É‚J`Yf¹Õ$*ý˜¨QM²¢úU%ª€ðö¥÷M¢QoS¡ó®Q¢’ä	4žá$3­£¿ªvn$£–ߑħ84_oÚ"¾oûB‡²t‰Gñ—'SÿÝþ<¿\¾ûôô›Y7ºû„ܵ".9g$ß!
+{¸|zyú×o~0üí‡oÁ݈L<Kß}ø·Oÿ¶Äì@O„/ŸþôÄŸ~wùé›ïÿù»Ÿ>|øôŸO¿ÿôô‡^Fš†a‚Ù˜<ˆÕp1ã´ ³Ž#úÈËwÀ5/ûŒxã-îÓ’+ OÜ,×È´c|Ž2eßÂ8äÛ썱¾Hˆ³`Š1L”+[²x«É ³
+J“1’äô"~Q˜.Ápé–«M%3Â&d>ƒ^~Fô%$…ð–ñÂPЋµ©Ð$èYDU`1 !M´2k´NDïc×°ZAoþ¨–-t<~¦šµ‘l
+njZýÀ´²–µ•ÑŒz¹¶¡ÌdœbÝ4“qŠ)ªZVfDïe×°Ú±¼À‡³m¡ã°#Ùý˜®\#5̍ÓÆl·ú¦;@œ÷AV~w®sùº	åìL'Hh¾ .ñVƒšD£Â¾[I§ªKVTƒ4ªJ”	àL£QM² ,}–î|—hÔÛtŒdÝ0w:væ†Ã‘güÎUΣk¿Îvn%£V ûm&
+Í×›¶HÇïÛþBÇÑnZ:²–Eb±˜}H&ÍUá¯S0àÉ|A­:fÅÄp`Öpä=ê,P	|Ä(f¤§T݃bÔˆ×éð'E0óÁlêïxqdy¼SÑ ³åP,yWä<Åû†ˆ*¼Dh‡ ä¬CPq3æ
+Eö„œTÀ*¶Å䙞0á€q˜£9(²Ö¸Ñð&ˆ™4qPÛÄ(Ãã…Dg«¿1%ðï‹’0`²—èÖ-QYGø€Óu£üü„†³$añ(d«iåÚ†Ô¨kCƒ52·F­Œ½ÑzÙ5ì =®mK$2ö’Ch3]ᐝf"©ÜUZY›Ùì¦a”kÊL-æi&÷
+0]fµ¬ÌˆÞ˦á`Çú
+Ͷ%‰Ü¾Ús±pµ2b*‰AF¥X:¨;@ŸâÎ_ùÝï\U}—|…g÷z¼A£ªdA™šê(T“,(ºYŒ¨&YQ{‰`Á8„kk{M¢QoG"!Óç‘	™érÎwožñ†
+ÙkuïWÕÈQ0ªD_œ$˜Mëõ¦á©wkûD+?÷¨‚¶¤0ûªcSøÇ/[dðÉċ‹çrškßøÖ&Vfá÷²Ä 3è©ñÅƒlqn„8w 88¢u»O—Ûðø€—³†EÏ"+Æ™Kaü­G0ÎAïá-y优Ltž3»ä³6#é#º pe¨,“0ÀÆË·ßËÏ>>s~íkè#Ñ#*¹‹M =«:î¯C¿—Áx­O?ā¹ÞÔZ‡Ù×Ò)~Ó1%‚4î±® ‹€Ý‹9âz®UÚ¬%­–Œª¯¤é—W^wq j@]j0m<¢á.1J¡Â&ÃÄr–f½µ¯¾ï¯¢ÝrÊ"éGr`‘ I{5u@²kãPéðš¿ŽJyËà­ÀÃðüd1¾®âÉâ8GL”í쎹ÞÔª¾ãëhúåK=¡Ç9>tþOø͏ÿý·¿þüëÅpý”Á ²¶ w)ë«ÿöïÿõó_ëoâG~Ø}^ >	-9:…œ9Ő² ¡<ÏÄí»ç߶þñÖÏÏ~þÌœ`Ë|–«²:8$>É© „è:'§b¼„¬v–_™_Gñ¤Q­xHÕÕK\Sä¬Q®§¼®|ÖB‘s½©uàÚ¯¤ó‰áÀ¥œ4ôìVé
+¤N3pÀNæ`^%µ–¡¯¤é'ˆÉí-cv‡Ãï%iIdÔ̳G1ªe‡nØ×_øWQŒ(‡{"°#¾	hñL2µd>÷ëÄDäæi‘´Z‡÷ü•tÊ{6´c„žÄHžÔ¢ë"mÆ:bdÆ7ÄõX¥º‰ÿ¿–/vž!¾ùŒ÷³ÃÃ
+·Û©Ö™Œw|sàç(‘ê¦ìå	>Ý.ºîA}©›¤\<L8º>ZÚ|¹½sŸÌ⟲ž€)“¬Ã<)žŒxsqáør‚3`=,ä(d.,á=ŒËóÁ ñp&Ï@, t qwÐçM^Ûۚď€#wÄ%È"Oçr<À²GÃnÐØO	f
+Ò—=¦¹F–±Yör¦¬—ŸQÎÌ)ò“§‚^Lý|Àp{Á_¦‚,!âl¢–Y£w¢#z»†Õ
+9ûð –­‡WÆÏ`äR#m]`
+YX›]¨emeGt#º†^®mh3y&Ù(3y=ª6jY›Ù£ßMÃjÇúͶõ$gÁ`›îóž'%.‚?lîêÄ™Ï3€¦í¾î0TADà³÷ã’NŽv*L“hC\£1U°@œ”¸`ªD×›²VÔ%Dçש@M¢@'ç7£•M™ö— †W7.çAuûu6s#™µœå°™š¯7mÕ­÷lY£²aÆ…	Øä8l©#Æ+áÖ€êüِÁHܸü+wi¸‚¿‘gJâëËG†=G/y
+Ú¬Æã
+ç7ô:Èá¯;ÁðòCÝ+{´cè¹râbµŸ÷AÉ.Øã
+	Y˜ÎáiÒ%@¨ìöx¹¤cèW𠬡ÿ1£üŒVòå‰02L¦†^–&X¡Þ¢»¡ ÞYÕD-³FïDGôNv
+‹rÊþ1
+[ïHŒ_Ѯɋ‘¦&iC?¢,äý³µ¬ìˆnC×0ÊÒ†¶’k×FY‰ S?G)jÛk½újÄúòÊ°•WwÄì>ŒyúÙ{w€8ã}%M“ļ	Ï}"Ü®
+ø3\”B5ÉŠÊ5Hc÷™EOP—,(ƒÇ°´×%+ªÈõª:¹‹Âëp»,æV'žvîñ€‡òê%
+OõVn$³’u¼g2õ^oZ’õ[_¹•~‘—•ñ·r%£±CJ­¸õü&Ä$ã™óâ;fâì¿g2LøåÓ?=}óÓ7ÿò?|üéÇ¿{ú6Ñ&nWȏôïîLfH”›5áŒØï€kf/ÜàrÇKáó\;@Žç¿O0rï;€ö"U' Ý3»AfÀÅO°•œs|ÑCþ2ˆÚåïw’{ Çsq”ŸŸ ÙG6Öy¥a”ÛéÊ)‰²"75Ôüp¶ÑóÅÙ‹†½lv<×훵m½õ?~6žÕ´™äƒ¢ÌÄÖ=¢6²ýÞ-èÕ{¹6 mäM]¯läiY§Z¨emcCŒ.6
+#Ö÷÷P†­÷þ9ßÓ˜¬Ÿ¿öŠB9
+‚ô‘« ò°Wjwì÷º¯AU² ¯¤EU“,(žF
+F£šdEqe=-¨*YPsiwÕ$õ6»gD@<LϽšÝ‘¦º'O<ý!}ûu¶s#™µŒGPÜ5_oÚ"a¾oûÃÃO½X•
+ƒeŒíûµ){þžÇòoó”J[Ügw'gç„€:»{9ûø’s¢ægÛrȏ;Hqö«ÍÙ¯‚4g¿º‡³}à=”¨xMI„•<þ$›ky¯¶[ÅkÞM|Þæ-çIŒªÜ(gJ*)
+•³fÕfbô±)8XAÿ¨–-|=î´6%•—fB[³ÖFëÏ£ÿ­ö(wÆ™’ÊI£~¥¬©¿“Úì@CŒ6Öw÷@f­4ñ:KM³_'ë;@<¶Ÿ[šï,¼S€˜ .YPü˜@ÑœÞ%Å­ã´®.Ñ(ï"Wø'¨	4†ü6iFï’û¹“ÆYpÜäÊîÁ'ë}úu¶s#™µ¢‘	8‰ñØ”\yÏæ¦và ³b^ç«¼ÂÔ÷à¿tsšõ¹¤¸æâ¿=2jGxÆ"ù*Ñîõ!£×!Ÿ¿ž§l^ÒЊîA}¡}±nÕpÝ,­÷ÞݝÁHòF‚¡€'lÎ÷Þï€ë`$ùåƒd.ÉêqÝ—ÔåN˜;€ÒÄϏ•|¢i–SûMM%ÊIò··ÞSJ²$ŸÙ¾ª§$ˆ~eóN"›À{“)µWÜÊÏ€WááS]Ì”ê£Ð>x7%V¾4«;Ç}ÉÙ@-³FïBGôþu
+«$³G´j	BúÏŒ‘}ÑòÔoõJ”3½­8-¿WfõVn
+L¿ƒ'O¡)€·ˆq6P‹ÓÂñ{ëߨ¾Z _Û#Yµ„ )æçuÛÔüì.û9†S<ËM”œòVd¿ºKä>^®×:S²ç¯PM² x.×%j’Nµ‹®&YPh€«%
+Õ$*óöÒû&Ѩ·ƒ$‰/v[áó—á¹#Þ€“=ã£/¿Žvn%ªV)›©ùzÓ–pÝ»¶¿„!I֐‘§ós'|/ü€,¢àÌO÷ÚOÁgíÑÃü@‘9ßi¿®ù4žÀäS‰]?»D>@–WNO0ü|§{e«}€vÞŽye«½ƒ
+¿!†Ñúvr3ó
+qäYT”RHë1Þ*¼öƒÜ'rJ{ùxWdŸo œQ¿›~Á7§c«"±rÖ£µÐˬ!]˜€Þã®`±@.ê=žQë%Ënï÷Õ“Û]B­Ñy—¡Õ°°••…Ñ,
+Z¹51m,‰“¥¿})¥µÑÊÃÆ	h}
+V+ô›{4ËÖ–ðbüRDŸ¡ŸMìï q®×SrrïAÒã.!%Ú¶Q£“Û.
+Õ$*qÇ5iT“¬(^wªJTö➪ITᡇ QM¢Qoójô2Aä{:²ÏÝ8oð;7×Å¥{Ù×îÍÜJf­Äo#†¡øzlI2Ñ÷k|½d™Œ|<+OÆäê'ÃUº«n܁ÿÂÄ79~µY9òß½'ö®n²·
+uàd3Ýݽ™ø±´ÓÏíp÷ðåc	1gîsñ’«}e/½cl4¯1w‡ðk&û+;éÃíñ•(¡a˜¸sèŸÐ6¿BáZF(ßIé’Âõ8Tã"®ù!îwˆc"÷çÐt/??aùmBá"”éõ{±7@|—'ß³©õ{Âט	`ïÂDô>WGÄÿ?¤]+ywƒ"Ó&¯M¤«/nÚè‘Ë#×6¶ò´±	†MÁ(·&¦‘L,ù°®€÷ì­j¡•§‘Ñ{]­Ð/ïÑ,[¿ÓÄÿ\oóTórî׶ï aÂ'ÄzB¸{£¿.á…±ÒWÀº¹U%*9ŦPM² xá?ej’U¿ì¡QU¢QqG¾¯»Õsòu„å¶7W‚,ŒwÎKhY–¸.ýÚ›¹Ì:‘ÛÉiê½Þ´$ßGxÇÖòYRM•ä†Lß%«ÐûøÒ ï{ð_HÞ!ùº:ÞÎÞ·ÏÝÝÛç>ïò¥Ò;YúøúUE˜YÂJÓÇ
+íR<ý*Fõ« ÍÔ¯î£êÀOɇ¢(­K:%¡R&cqwI§¢4ùÒ‰â4Ã© §
+Iã´¦ SVob’ZïÄDô^w
+«íË|iÙñÓŠÕ¤AjCÒ9©[Ù9«[9I­[9ÍÊ¡¡•'«
+Icµ®¡‘ÖhcÐÚèÅ@ô~w
+«ú>žm‡O+&ù¿¼MÙç Î|4´Ðl—hÚóÅ›•f»d¡Y8P†S4Û$+*›±7É‚¢OKE£šdAñ³ì+±7Éý¤íÜuT¬ÙÝùdÀ£ƒ¿Žfn%Šk¹-<)òÐŽl¤¿WÓ+]¼^“¼Â_cësø—ÞcÏ–
+‡D{î ÿáéÿ 2žª’
 endstream
 endobj
-7203 0 obj
+7202 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610111327)
-/ModDate (D:20080610111327)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090958-05'00')
+/ModDate (D:20080528090958-05'00')
 >>
 endobj
-7204 0 obj
+7203 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-7205 0 obj
+7204 0 obj
 <<
-/BaseFont /FOZASA#2BAlbanyAMT
-/FontDescriptor 7207 0 R
+/BaseFont /HNXYWT#2BDejaVuSans
+/FontDescriptor 7206 0 R
 /Type /Font
 /FirstChar 32
 /LastChar 117
-/Widths [ 600 0 0 0 0 0 0 0 600 600 0 0 0 0 0 0 0 600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 600 600 600 0 0 0 600 0 0 0 600 600 0 0 0 600 600 0 0 0 600 0 0 0 0 0 0 0 600 0 0 600 0 0 600 0 0 0 0 0 0 0 0 600 600 0 0 600 0 600 600]
+/Widths [ 318 0 0 0 0 0 0 0 390 390 0 0 0 0 0 0 0 636 636 636 0 0 0 0 0 0 0 0 0 0 0 0 0 684 686 698 770 632 0 0 0 295 0 0 0 863 748 0 0 0 695 635 0 0 0 989 0 0 0 0 0 0 0 500 0 0 635 0 0 615 0 0 0 0 0 0 0 0 634 612 0 0 411 0 392 634]
 /Encoding /WinAnsiEncoding
-/Subtype /Type1
+/Subtype /TrueType
 >>
 endobj
+7205 0 obj
+5539
+endobj
 7206 0 obj
-5548
-endobj
-7207 0 obj
 <<
 /Type /FontDescriptor
-/FontName /FOZASA#2BAlbanyAMT
-/FontBBox [ -12 -125 612 618]
-/Flags 5
-/Ascent 618
-/CapHeight 618
-/Descent -125
+/FontName /HNXYWT#2BDejaVuSans
+/FontBBox [ -9 -235 956 759]
+/Flags 4
+/Ascent 759
+/CapHeight 759
+/Descent -235
 /ItalicAngle 0
-/StemV 91
-/AvgWidth 600
-/MaxWidth 600
+/StemV 143
 /MissingWidth 600
-/CharSet (/A/n/M/B/o/N/C/e/D/underscore/E/r/one/R/t/two/S/u/three/I/b/W/space/parenleft/parenright)
-/FontFile3 7208 0 R
+/FontFile2 7207 0 R
 >>
 endobj
-7208 0 obj
+7207 0 obj
 <<
-/Subtype /Type1C
 /Filter /FlateDecode
-/Length 7209 0 R
+/Length1 85440
+/Length 34160
 >>
 stream
-xœuV{TgŸdfT!FZÑLDð…ÏUÔVD­"(¢²¸TЁ MDAÅAóßÕ*ëkŸ©/´Ög}´ë«ê¶][Q«wö|Ù=;C*aÿØsrræû¾ù߽÷wGDH¼‘HÔ=2+-5G»@X…q"®¿7@¼ûr÷é "b\NÏJoò#oÉöþ=?¸êv(ìMˆE"í¦­Qê\]^fzF2$qþ¢ÐaÆ{vF‡‡‡+ÓtO”ѪüÌôåþaµ*K›­Ê)˜¬ŒâßÎÊÊ\¦LÏÒåfä+S—/W-®-LÍR­TÆdfeææªW+C¢B•cF=‚ÿ373;M“¯ŒU稕s”óU隬ԼÿÙ$âÓÈœØiê¹Qªèéyó4³Ò)CB¿=f,AqÄHbO„AD1˜B$c‰Db±JD	эèND~„ŒèCôã9#$„A$Dà5Á«Nì'Î_‘Ì”œŽ‘V‘äòµj¡.Ò½é%t6}¤›¢ÛQ®­׆Xfá+²@L†b.âåp°t*©+5Š­¦F‘‹¹®¶Ì¬eV8‰sHñRRWf*6X„coÏpi¤Y¤ÎÈß°	[ÃÈ+£Ô¬c¦ç!X
-›Y9^K§¤[I·çl.ë~,ì>î/{“¹ñòÁ¬¡X0Ûˆ_¤Zwü=1¤Àò k³o³Ó²“;÷î·8Š¦Ú=«kóP6Q&å	Å‹¬w‡¢g2ÁLþ0ýÒØØô5sæ):‚à4¬è.ËùÏð™FÃ{©Õ¥‰è‚>Ôƒ%“ÓìVµuÂ*„Äa¸†viˆ€½Ø 8ÜíÒd’Z7
-GÇm[Çm-Éi,$ŒÅï¥nü…,¨XôPÉŠùyb/“?ß»õôÆÒ3¾f.½ç0:G?‰¼6Tíg-$‹UrPÁDêû)óbç~ù'ãÝr(„Pª5šh¯Þ‘ŽÒéØ„¤hs!ˉ:0wç]žç¢äØop0öÁ¾oB€Ïƛߠô	þ'îäI~<iPÈ„IAA½iúè-ÓÉÙ[n±b®¢/çh¤:Á¡BÆŠ
-BÆî¹–‘øW)HêÝáÖ3-7]™­·wr³Œ„K®J©;B3+ºÆ›ÏãªåKNÆíš…f¢¸U)É©QOGsé‰ ìý¿mÝuú¬bÏ®šzd£í¥cÙºŠ²rEâìÅ«b»¿žÌ
-zü½
-Ä/-œ[¥¨,ÜRV‹è:³­ž	Uo²ŠMF½›˜ÆÂPVÄmƒd9:Uá,:ñdró0ÞTŸà0Ü÷ý?ƒ÷™F[©­´|}Å:³lå4M,š|³ø=ÍJ¿Þ¹Ø†Úнøm£èN„4?w'¹+jú¶ƒ™o(ÜWÕ‹|¬K#ç40ˆjA‡‹þšÁ¦íŠCéiTàؐáîNƒ¸gB)ù	>‚Ž`×󗝃pàË (…ÔYJëj,ÖøS
-eÖµÅe¥:E
-%k†S¡¤Þl¬èP ㊤<µåÒt)GY1—ãȆr«¡¨œ7 ;‡{àÔÇNÎâ½G±þ²[Å·1¦ùœ—­-r~¿Ö±2ØÊxÆoò9·ØëJ,zÇÀ*Rv¸¼Nî<°9Kv˜MU[]cµÕXË-ú:fÕv--Fñê‘ÝlÂ
-ôô
-߶áP-‡OÈM^àñôEO·f“á0P}hNÓ/NŸA×égïðÝSIþ„ð¹çj	ÕÐÃêîÍĸ/&-eÜõñŽwv\I<JèA9Ê-EEå|õà‘T§XÝÃ;ȈÖä_ŸydŸ­Ìn\·¡b½I‘–?]Ÿ€è˜ÔƒÍ8AMuºë°“ F©Y¿_X]\jò—ró¸:¹ÌΦ¦4ÄN™1.µayc³_shííµwÎòÝE_éëW¢:rzâH…ì‹Q(²yÃw·•[ˆ6”•ò,K)­¥¬¦Îlq(öQ2{2{9ÿV xÿt«­¹ Iµ‹Ér¨-Ÿ×ÆÚò͹õùõEûÑ~úzë¹Ç?´¦ÄU+d…›¶˜jj·X˜·T}¹ÍЁ×±ùŽªÛ{<õ¿¬€›Ý÷GneÚLΛ/….¼Ô‘²“q	qÙ3/cÏ2ðÍpR·ð§SÎ/úÛwW¾j¹àQg8ÀwÍ÷œCép–Áw=¢ÂW­3ÂÚÐQpp×#¹üþÇHß° qnwúÀœf˜ÈµË‡{z±…”\ŽDªsãÕKRÖ}úJæÝ èÙÖ¾Ð{xö‰\°2:‰˜«ò×'
->4dÊãööýÖ!Û¹Î§¬h+$C$‹Á§o+	4bWô:y•ŸžNÏÁƒ…Y!Ró9ß•‹ùi,‰%®þ	\®ôIÌAYp
-°øìhs£yFd2és£±×rÜ
-£ ƒƒnbÉN•ÕhEt­Õj¯Þ¸©b33|³ÛÑôaÿ»ÛÐkÓæÊM¨š—Mk‰¢ÃÖU1Äó¶JŒ¥%ëQEÕ:æ6öÝ,H›2{Pîµaª@ëék©Ýf6ï­WÜÑQèŽ^£·+Ÿ’‚#F«	]Š}ω8.BþoIÒ¿$îq/‚ƒ|ßÜç89ž_¸~	?5ÚŒ–*KªVÀ'Ç¥®ZÌtÜw=íˆniïü¸Xv/o›ÁŸ•WQÏ\»ôâ9-[
->ÐÓ¹ïJ¿—ãMP'¯Phó
-ÙHG—Z6ûs]µbë•o›n"úþ¸˜­zDƒKp¾4ž’Ås·°i²Í‚ªƒc¬Îj;T
-Ã#yeeUe%¢eÏ®ì9Ò|±ßó©7‚%f/S¬),Ö!#̓·[ªªj¬Šýgýðròì¥êå©:fµ±p㟭/ù£d·^=™5eêÔYaœ‡–0¦Íë«Êm,5
-5ōz¦9÷Œá,¢úÇã×7—´~v€éµÆɍw‚ŸÓé$Otg{œðöf½{Ä}ëK¦
+xœì½|U÷>~§ÏÜéDêR	mw6! HÊ!$TQY’M²dC²¡7A¤( ¨ˆˆˆŠ¨ØQ±"¢"6Ä®ˆØPTlˆ
+~3³'$ úõUßòÿ|þäeï;÷žçœsËsÎeã‹„Œæ 
+
+É+èæGîbÐóÎçð¢ŠpUâ9ûCçãã¢IqŠ¶HuZÞqž•T•VL´'GˆtžÑ¥åSKýµ±icÊ"áâCòc;1x¡Óš\æ4H[š@ˆrŸÛ•Uħ$úç´s>ŠËcEáijoB:T„§T59.8ò©;V_e¸"ÒrüàœgG¿>|U¬&>wFÅL„ú½ŠÐsmªª#U½¹¯ñø(BLD[Ð.çç	´­&Ö;O®~–µä&4Õ:-Û‰]Ä"²‹Ó¶F{œžÐ.jˆ(à´"ô&C¢ïˆB´Ù‘‘JXD*Ç҈Υ7Óùôúz7J¡kèÝôXº†P71ÙõÎßTji gQ+´…؇jÐVê  ¶Ñ™´‚öQ»©
+è#…väïBËÐ:4ÝÑÅ"bh69ÌwZv2»Ñ*ç'æ¼ßM¬!ö8Úm%桽h%E“Ðb¯c×.tÍ£
+ÉÙŽOd‰£ÿNGÖngü*TC#f/Ñ1²³Óæhï`ó>[P]˜½ÞÏa4ÛA.DëØ-¬ÅµuP\­'¶‡Ø+ÑZ´‡CM¤Þ&æÓméÛèhYÂÔX´Ì‘½ÊÖSÛÝŸé®tr2=–Ø€Òc¹qŽì®Eæf2ß±¨msþNf5ǦÞÄ|j‘£©û¶ÚÍ
+¤»9ã	ÜLÇj„bTwjÓÑÝhêB­@ËIž½l
+sĹšÞïؼŒXBA»©LÔ	•Ð_:¾FB+zcš"	”äÓ6’í³‹7ö:Ò÷̨Ö]’Nyôiœo#²QžêÛrüø‘t3fÔF¦ùFª=¿‘nßvÿï½Üß%iА‘¾¿†2Ajhl¦ÓV0Ò©ºON³ÓÊôÞ¹ ™öÎÿ²Çnô•ùk‹ÛöZ¬EzuqÖ¬cwűÎfüà‡×~*W»-'ýå¶XË©BÔ•!	‘HCý݈)sJw-5%úž·’ðC@"q ê$¢‰¡N!‘luÚ©÷‚:ƒ$r,ÔY„ÉyPç‘îì›D]tV‚ºl\ßq4Ôd÷u
+‰½ïºŽèÞ;D‚œaÝ=t·N ÆÄ.¨“ˆ'¾‚:å´ƒ:“m Î &dÔYd‘PçQr)ÔEÔ‹|
+êrû^TK¨+¨¬×Q¨k¨qïk ®#¾÷Ã(ÃYkUh*ªFQTêx8Ž|¨#*rV•ùQwç'àÔÆ9=|(ÝéwVZÜéAaT’œÖlTéôïêÔÒP¹óãCù'dÕxO§Œ8c&9ŸÅNOü'P“O :H“,wWT:½]=ÂΘ
+1Ó©wÆ
+wÎ?ŸƒTæÔ]ioDسÈ9ç6Ÿ£Y­ƒ]î<9OÅn…ÓÃ}‡ʈUM­Ž––Å}‹:ùüÝ»|ã¦úÒ£ñšxu$\‘äË®,êêK+/÷廽j|ù‘šHõ¤HqWü›¡ÉîÐÂð¤Šñ±ÊR_z¸ìwfFƇ‡×:›'\Y©ñ…«#¾h¥¯ªv\y´ÈW«G+ÍN6±À3Ð9`pA¸ÒyHwŒ‰¡	N%›ðç†ü™>Ã=o×8>Šyô;>÷;+
+T×Dc•>WàdQ§:V‰'-1§qXqu¸%±JÇEqÇãÈ›÷¸3k½P7ç§dLrdtuÆÆœ²Ú™Éˆ'¯Ú›ó®ŽÜˆ3•ÅãU½ºu+v„NªíZ«­.Š”ĪK#]+#Îë¬Ô­‘ºuúÛÝà¾s×]Ä[»gÅÐd§¯»Rÿ™õçJêï¼™êô)óFFwUž]qo­»^«öF¸»Ã•:éOžjGýþª=iýž5Øù9í‰5vj
+½ö۝ŽQ—¿ñƒÿÔéñÏŸY§Ÿïz›£ÎìÕâ^‹»
++<_OpÚbÎü_º¸–
+ñäUxÒêwSÔÓ©Ì{»J=”J˜õ$˜÷Äl%Ðk,±Þ“<½bÞìWzã«`Ç&bŽÔ8¬±(¬‚°'#ái2㞧®§"¯Ÿ»Òë$¸½º'ÖrÄÛð‰µ×¦Á*iãÍœ;¶Ø+k<½Šœ1a°{» ÈY¡ž”¸÷¦Î?%N­vRÇ:Ö#¸§–«ÜY¿‰Õï"ÖûÄm©òvM±ƒP䍮Ӧس î­µqÎÛ¸÷6ÿ !	vs‘£Y­'%á“ÉÞ(óN¥8x¦ÂkkhQ
+Õ'­Ê„¶µž“ÌŽ[¯ðæ31׸Á	RãŒNú;’NØÙÍ;A|žäÄ~HÈŽ‚WOžý?¶ºÎs	m«N¬è¸§Wýª«·h²çŠ?…P·J¼S½,Œ4@,ö>]Œ$¯t=1ÞéQäÉKô©›?w—ÃÉV7CEv±§q4íåíÎBÐ.ìHŒy'Cý4<‹ê=ðÛ“ Òé‡ÝPsRߺ½Rﱆg@Ãq>Ïæ°§9öÎæ“×ZÂ	.	ÿÁ|Æ<ôÁÜWxeýùñgæ"î1‘ˬa°¨ëIžú£±®O¦·$Ð]Ÿ—x:ÃJ*÷Öiõ‰–„¦®O‹ÌyÃUWÇ a£Þ™Qî=á{šºóUÙÀ¥'ñj©î
+{«'±vë0NõOÍÿiS–,¨_aaoŽþ¼'ãœêÓé–ó]þÎiŽOÌNµwΆ½s¥^n]K͉Y·_NeœsÏŠ:¤ÉžUÅÞø6§áÃ6'ì>uvÞÕ±m›«,±grNá—qÞ~5еöAÝ:™ä¼žÆc4Åós%ìä*ç'Á^aïDœÑpÞ:×µàÓî”2ï„÷ye
+èñVÒï­“º³îtgw±Ç•Þ¼7ô×鼊x®áþÕ½Z㝚u\]¿Ûêv’9”Ÿˆ=ªaÄÉ«¼=Áù,…K𡻪ð‰SõßyRý¾Uã`ÄKNxj 
+y8y(×yrqòœ§B4‰#ó½wÙN›Ï‰ãò7ݧL§5Ó›—4ïû¾·G8uWbæÉJÈÈw>]Ù£œW¶Ï{vŸ9ýsYîØéa„iŽfyNÝ•=ØiÍqÊôsGd8-Ãœg·Þ¹Qh/×Uèíwœ«KBÓB§½õd­²=Ä:Í;OùŽüð6Í‘íÉsõOòâ#·žz&<—ïIw}äJvef8åxOnë0§âô+ðü™æÙœÐ6׳!ËyŸ°%äi˜‰„FN9ÄÁv{ôwô*ô¼à"BÏ$o]{2½ñ.ê ¯WB³<˜e·^/¥+ø2¡‡ëÿá'<ûsœŸg¡ÓRèÍMš#¿NnÝÚéïIpõÆž7†yö¥y~ÈóÒ½~®]æœXqù
+f%Ãó—;o®æ™Ršç‘‚ÓZR'­áìœnuàý=ûBž§r¼ÞŽCNÿì-‰õ˜íÙš¾NÈL¬ûÄšÈiàÝÏFwf‡:¨!XSižïN¶Â§žþõV$f 
+>3ø¬~ösavëô)ôOã•Þ^y½Ò¼¹.8±G²¼ý;4vb…ÕŸÃ`}æÐìdÿÖí£º~æìHȪÃ>y3½õ”œðF¢þ¹‰³+äðZ‘—çÄOœÛ'3wè±>mw&58kF‰S¸¿×·â”~õ­‰l)ÁYõ¹NÃØítv]vœˆåë¢Þúè#qv'r¢†Qo±Ÿ'bÀšQIÌ‹c'"“ÉÞÛzN¯‚»“ØIyž‹ö¸?éVÕËJÄ•a/ZpÑjNãÍßg(ü›Ì°ÊãûÊd¯‡Èĵ¯úºíÓNɆëî~;¾ÓÎA-§‹ú¿Ú›ï*È¥¢ž‡Ýx²+È­FuyY½O\$îÝ*N™õúÕçJë…N½Up}PÚ@óbÏ×%îð\LìWuw\ÿý[§úÎúé>Ÿttjäõﻧ½òý‡ïƒðŸº:9’/j Sý]G]Ï?wƒzºü_»Wòýæ^	ÿÿ÷J
+î•êoþ¿y¯„ObØÿÞ½>M¶ö¿p¯„O{¯ToÑæ^	ÿÁ}Áæ^	£õ^©þ_þÉ{¥úývò½Òï±ïïß.%òóD$ñ¿v»„ÑÉ·K§¿ÝøÏÜ.á?𮯁ÿ·o™°·Æ~Íüço™ðÿð->å–©>×ýOÞ2áÿó–É÷»eÂÿÂ-“ïßvË„=w¤ô´Mx;ÍyÿŸ»;§óÿÖÝþÍÝ‘ï¿vw„÷î¨þèßw„ÿ…»£?’ûï½;ª;YŸQ~{ãƒÿOÃ[šòÆÿ­ŸßælíÆ7¸ñù£{‡â†&þùýPýMöpܧ®ey_Ðr¿ªæ~ÙíÄ÷ã|k"߸Hylr§®¾?ñŶ®¾þåS«Êj|ÑŠªXu<Rì+©ŽUøÒª#“àK`uÞéj_¤kƒq=úðHuØ—PíÄ·ñp—?üƒû½½?ý•?ß)ÈÑöÅ«ÃÅ‘Špõ_¬äT)‰TWDk¼/ÍEk|e‘ꈃUZ®tLOrlwÌr†9«.$ùâ1_¸rª¯*R]ãˆ‹;‹:.ûŠ¥±Ó3^©óSQQ¬¢Êéîvˆ—9Ò/G*kïµñ\Ò¦“#¬Ø®©‰EÃ.ŽÕVD*ãḫOI´Ü™¤Ž®Do€¯ VŸì¸¿M'O“êHUu¬¸¶(â‰)Ž:†EÇÕÆ#®ø¤IÎ4•×»šLŽÆËbµqG™Š( ¹Õ	W:bkkœþ®9I¾Šˆk5öHMYRŒ$³[¬ÚWqæÁéuTóOv•sÄV¹ŽŽã„ë< ÉeÎÂúÍ wJj«+Àˆ7°8櫉%ùjjǍÅÝ×¾’X¹³Ø\ƒŠb•ÅQ׎š^:âÂãb“"ž‰Uä)pbTÆâÎ4Ô$ZÝY©ª_‰w¾š²py9¯9j8»$|’±Jg]Tû*bÕ‘Óší‹O­Š”„ ®	¥N~[žêìgxq´$ê.´pyÜYzNÅ..ö,O¸ÎÝ ájG¯Úòp5vŠ#5ÑÒJOÒÄ^u¹+4\ä©qGÔéSs*’+; žÃÂå§ cêô¨—æ¨WY>Õm°Ì±kNuÄýµ	¯¯[©qéÎKÝöˆ8k.Rí
+š«.®ñµ9±Û¸Øu/pwÛ¶ñ\æÌLì—qg'¹Rk9p}2)=¡XdJÜÙ1¾pU•³½ÂãÊ#î‹„íŽd·‚ë'¥,÷•…k‰‘Ê“|⮺úÕ]ì«­,…ëUÅžr	ÿhVkbåî®ö¦Í¤°¯Ü==œ½R×±*\4!\êæìÃÊv—꿶¨N‚r,GÅHy‰«Ô€/+/·ÐW—U8"-?äË.ð
+ÉÏžÊôµI+pžÛ$ùFdÈVèszä§åŽòåeùÒrGùeçf&ùB#‡ä‡
+
+p^¾/{ðœìÓ–›‘3,3;·¿/Ý—›WèËÉœ]è-Ì󆂨ìP+lp(?c€ó˜–ž“]8*	geæ:2åò}i¾!iù…ÙÃrÒò}C†åÉ+922±¹Ù¹YùJhpÈ1”‘7dT~vÿ…IΠB§1	æ§e†§åJò9Âò“ó}^—®Ž–Ž_h¸;¸`@ZNŽ/=»° 0?”6Øíëz§nÞàÎÊ–›™V˜—ëK9¦¤¥ç„º9¦dä¤eNòe¦
+NëïšSâvK˜SïìèÊ
+å§å$ù
+†„2²ÝŠãÇìüPF¡×Óñ½ã‰OÝŒ¼Ü‚ÐÐaNƒÓ¯"	ò Òœÿexšyæç:æºr
+óòO¨2"» ”äKËÏ.pg$+?ÏQםϼ,osüéN^.èëΑÛöÛÕáôrGƒ™¡´G`«†Ó€Oê묮Д¢HUÜ]Û°¹G£wŒ&ÎÎ$oÕ&g	÷¯t6n¢Í«:´äì,u§[=a»tœ”8z½ãÃYÝ%ŽÞâIç¬q’X5Ž¹‡Éäh·Ó
+¬ˆ%8ÏW.wÀœQî.òz9ge¸ÜVsBÍ“6®#êê¨3dru4î&¾p­ÓZ4\
+4åYà«·ÀE©?úWGjª–ŠNŠ”Oíêô­v¹ÌÓ$ZY«® Ó=÷Å{Õ…
+q_©'¼8DZêÒ®>Œ½ˆëo‡NöWþ™8'â ß_‰ƒp}äû‹qþm‡|‘'©¦Ž3N Ö,øïÄJ¾ºX	ÿoÄJ81ÿ¶X	'6ìߊ•ð?+áúXÉ÷c%|R\ðb%ü{±’ïÏÇJ¸A¬Ôpûž.9|îÿT¸„!\òý­p	Ÿ¤®—7þÓ!®ŒùþvÈ„ÿѐ	CÈäûë!>5dòý•	Ÿ6dòý+!.L>x`ž«vÚ€¿ázËÿNt„ë¢#ß߉ŽpÃèÈ÷—¢#|ÚèÈ÷w¢#w±ž´QN>øwß¿øà?||"ðÁ^àsrìð4ñºþý¼ wuŠ®çw»y÷vœ¿Ý¼»³bï_õºzÿ¾Z崝ü¯…ü†Ý&G'D»EÃjJת²ªnpbþ¥ßå$¿ }|NóÇZîýN4‰(D#±ˆC<F"’Œ¤"
+éÈ@&²P#ԝš 3QSÔ5G-PKÔÊQ¤5jƒÚ¢v¨=ê€ÎBQ't6ꌒPÇþn¨;êáýÖ§‚(¥ ž(Õñootêƒú¢sQ?ïž;ûÎòþÍ#
+Dƒ
+öþÅcŠò½oÏsF¢QŽ-ç¡1è|tºuÜp'º]Œæ£GÐ
+ô)º-E—¢ëÑíhA¢Åè-4]‰¾Aߢ%è´mGÑ´}¾CGÐMè.ô,Ú‰îFãœ9ºÜ™»]Ž£ŸAÏ¡Ñóh7zDîOà%ô2ºÇ™õÃè
+ôzíuæösôZäLŠ;÷¨Ü™µŽû'z·¶5Þíì$ge|欅ih*šŽf¢hºÍF³Ðt:„¾D[	Š 	†`	Žàѯè!˜		'!
+¡¡:a&aˆÆÄDâL¢)ÑE?͉DK¢á#Zmˆ¶D;¢=с8‹èHt"Î&:£ŸÐëDÑ…èJt#º=? l"H$)DO"•è…>@ˆÞÄ9D¢/q.яH#Ò‰"“YDb ‘6¢{‰Ä "‡LäyÄb(‘O ŸÑ/èCôQH#†#ˆ‘Ä(b4q1†8Ÿ¸€¸K„‰qDQLDˆ¢”(#¢èab<1('*ÐÇ袒ˆUÄD¢š¨!âD-1‰˜LL!¦ÓˆéÄb&1‹˜MÌA뉋ˆ¹Ä<âbb>q	±€XH,"——Kˆ¥Ä2ârâ
+b9q%qq5±‚¸†XI\K¬"®#V×kˆˆµÄÄMÄÍÄ:âb=q+qq;±¸ƒ¸“¸‹¸›¸‡ØHÜKl"î#6÷[ˆ‡ˆ­ÄÃÄ6ââQâ1âqâ	âIb;ñ±ƒxšØI<C<K<Gì"ž'v////¯{ˆW‰½ÄkÄëÄÄ›Ä[ÄÛÄ;Ä»Ä{Ä>â}b?ñq€øøˆø˜ø„ø”8H|F|N"¾ ¾$¾"_ßßßßGˆˆ£ÄÄOÄÏÄ/įÄ1â8‰H‚$IŠ¤I†dIŽäIÄ¤HJ¤L*¤Jj¤N¤IZd#²1yÙ„<“lJ6#›“-È–d+ÒG¶&ېmÉvd{²yÙ‘ìDžMv&“È.dW²ٝìAúÉ i“A2™L!{’©d/²7yÙ‡ìKžKö#ÓÈt2ƒÌ$CdÙŸ@f“ÉAd9˜Ì%óÈ!äP2Ÿ, Éaäpr9’EŽ&Ï#ǐ瓐’cÉ09Ž,"‹ÉYB–’ed”ON ËÉ
+²’Œ‘UäD²š¬!ãd-9‰œLN!§’ÓÈéär&9‹œMÎ!/"ç’óÈ‹Éùä%är!¹ˆ\L^J^F.!—’ËÈËÉ+Èåä•äUäÕä
+òr%y-¹Š¼Ž\M^O®!o ×’7’7‘7“ëÈ[Èõä­ämäíäòòNò.ònòr#y/¹‰¼½ö“›ÉûÉÈÉ-äCäVòarùù(ùù8ùù$¹½ÞAï¢÷Ñ›hù¹ƒ|šÜI>C>K>Gî"Ÿ'w“//’/‘/“¯{ÈWɽäkäëää›ä[äÛä;ä»ä{ä>ò}r?ùy€üüˆü˜ü„ü”<H~F~N"¿ ¿$¿"“_“ߐߒߑߓGÈÈ£ääOäÏä/ä¯ä1ò8…(‚")Š¢)†b)Žâ)Â”HI”L)”Ji”N”IYT#ª1uÕ„:“jJ5£šS-¨–T+ÊGµ¦ÚPm©vT{ªuÕ‘êDMu¦’¨.TWª՝êAù© eSA*™J¡zR©T/ª7uÕ‡êKKõ£Ò¨t*ƒÊ¤BTÕŸ@eS©AT5˜Ê¥ò¨!ÔP*Ÿ* 
+©aÔpj5’…n FSçQc¨ó©¨©±T˜GQÅT„*¡J©2*J§&PåTUIÅÐuT5‘ª¦j¨8UKM¢&SS¨©Ô4j:5ƒšIÍ¢fSs¨‹¨¹Ô<êbj>u	µ€ZH-¢S—R—QK¨¥Ô2êrê
+j9u%uu5µ‚º†ZI]K­¢®£VS×Sk¨¨µÔÔMÔÍÔ:êj=u+uu;µºƒº“º‹º›º‡ÚHÝKm¢î£6S÷SPR[¨‡¨­ÔÃÔ6êêQê1êqê	êIj;õµƒzšÚI=C=K=Gí¢ž§vS/P/R/Q/S¯P{¨W©½ÔkÔëÔÔ›Ô[ÔÛÔ;Ô»Ô{Ô>ê}j?õu€úúˆú˜ú„ú”:H}F}N¢¾ ¾¤¾¢S_SßPßRßQßSG¨¨£ÔÔOÔÏÔ/Ô¯Ô1ê8h‚&iŠ¦i†fiŽæiÆ´HK´L+´Jk´N´I[t#º1}Ý„>“nJ7£›Ó-è–t+ÚG·¦ÛÐmévt{º}Ý‘îDŸMw¦“è.tWºݝîAûé mÓA:™N¡{Ò©t/º7}݇îKŸK÷£Óèt:ƒÎ¤CtÝŸ@gÓéAt=˜Î¥óè!ôP:Ÿ. éaôpz=’E¦Ï£ÇÐçÓÐÒcé0=Ž.¢‹é]B—Òet”OO Ëé
+º’ŽÑUôDºš®¡ãt-=‰žLO¡§ÒÓèéôz&=‹žMÏ¡/¢çÒóè‹éùô%ôz!½ˆ^L_J_F/¡—ÒËèËé+èåô•ôUôÕô
+úz%}-½Š¾Ž^M_O¯¡o ×Ò7Ò7Ñ7Óëè[èõô­ômôíôúúNú.únúz#}/½‰¾ÞLßO?@?Ho¡¢·ÒÓÛèGèGéÇèÇé'è'éíôSôúiz'ýý,ý½‹~žÞM¿@¿H¿D¿L¿Bï¡_¥÷үѯÓoÐoÒoÑoÓïÐïÒïÑûè÷éýôôúCú#úcúúSú ýý9}ˆþ‚þ’þŠ>LMCKGO¡ Ò?Ò?Ñ?ӿпÒÇèãb†d(†f†e8†g3"#12£0*£1:c0&c1˜ÆÌLæL¦)ÓŒiδ`Z2­ÓšiôeÚ1í™ÌYLG¦s6Ó™Ibº0]™nLw¦ãgŒÍ™d&…éɤ2½˜ÞÌ9L¦/s.ӏIcÒ™&“	1YLf “Íd19Ì`&—Éc†0C™|¦€)d†1ÙÌHf3š9ÃœÏ\À\ÈŒeÂÌ8¦ˆ)f"L	SÊ”1Qf<3)g*˜J&ÆT1™j¦†‰3µÌ$f23…™ÊLc¦33˜™Ì,f63‡¹ˆ™ËÌc.fæ3—0˜…Ì"f1s)s³„YÊ,c.g®`–3W2W1W3+˜k˜•ÌµÌ*æ:f5s=³†¹YËÜÈÜÄÜ̬cnaÖ3·2·1·3˜;˜;™»˜»™{˜Ì½Ì&æ>f3s?ó ó ³…yˆÙÊ<Ìlcaecgž`žd¶3O1;˜§™Ì3̳ÌsÌ.æyf7óó"óó2ó
+³‡y•Ù˼ƼμÁ¼É¼Å¼Í¼Ã¼Ë¼ÇìcÞgö30˜™˜™O˜O™ƒÌgÌçÌ!ææKæ+æ0ó5ó
+ó-óó=s„ù9ÊüÈüÄüÌüÂüÊcŽ³ˆ%X’¥XšeX–åXžXÌŠ¬Äʬª¬Æê¬Áš¬Å6b³g°MØ3Ù¦l3¶9Û‚mɶb}lk¶
+Û–mǶg;°g±ÙNìÙlg6‰íÂve»±ÝÙ¬Ÿ
+°6d“Ù¶'›Êöb{³ç°}ؾì¹l?6Mg3ØL6Äf±ýÙl6;Äæ°ƒÙ\6ÂeóÙ¶ÆgG°#ÙQìhö<v{>{{!;–
+³ãØ"¶˜°%l)[ÆFÙñ출­`+Ù[ÅNd«Ù6ÎÖ²“ØÉìv*;ÎÎ`g²³ØÙìö"v.;½˜Ï^Â.`²‹ØÅì¥ìeìv)»Œ½œ½‚]Î^É^Å^Í®`¯aW²×²«ØëØÕìõìöv-{#{{3»Ž½…]ÏÞÊÞÆÞÎn`ï`ïdïbïfïa7²÷²›ØûØÍìýììƒìö!v+û0»}„}”}Œ}œ}‚}’ÝÎ>Åî`Ÿfw²Ï°Ï²Ï±»ØçÙÝìì‹ìKìËì+ìöUv/ûû:ûû&ûû6ûû.û»}ŸÝÏ~À`?d?b?f?a?e²Ÿ±Ÿ³‡Ø/Ø/Ù¯ØÃì×ì7ì·ìwì÷ìöö(û#ûû3ûû+{Œ=Î!ŽàHŽâhŽáXŽãxNà0'r's
+§r§sgr׈k̝Á5áÎäšr͸æ\®%׊óq­¹6\[®מëÀÅuä:qgs¹$®וëÆuçzp~.ÀÙ\KæR¸ž\*׋ë͝Ãõáúrçrý¸4.Ëà2¹—ÅõçpÙÜ@n—Ã
+ær¹<n7”Ëç
+¸Bn7œÁäFq£¹ó¸1ÜùÜÜ…ÜX.̍㊸b.•p¥\åÆs¸r®‚«äb\7‘«æj¸8WËMâ&sS¸©Ü4n:7ƒ›ÉÍâfss¸‹¸¹Ü<îbn>w	·€[È-âs—r—qK¸¥Ü2îrî
+n9w%ww5·‚»†[É]Ë­â®ãVs×sk¸¸µÜÜMÜÍÜ:în=w+ww;·»ƒ»“»‹»›»‡ÛÈÝËmâîã6s÷spr[¸‡¸­ÜÃÜ6îîQî1îqî	îIn;÷·ƒ{šÛÉ=Ã=Ë=Çíâžçvs/p/r/q/s¯p{¸W¹½ÜkÜëÜÜ›Ü[ÜÛÜ;Ü»Ü{Ü>î}n?÷w€ûûˆû˜û„û”;È}Æ}Îâ¾à¾ä¾âs_sßpßrßqßsG¸¸£ÜÜOÜÏÜ/ܯÜ1î8x‚'yŠ§y†gyŽçyÇ¼ÈK¼Ì+¼Êk¼Î¼É[|#¾1ß„?“oÊ7ã›ó-ø–|+ÞÇ·æÛðmùv|{¾ß‘ïÄŸÍwæ“ø.|W¾ߝïÁûù oóA>™Oá{ò©|/¾7߇ïËŸË÷ãÓøt>ƒÏäC|ߟÀgóùA|?˜Ïåóø!üP>Ÿ/àùaüp~?’ŏæÏãÇðçóðòcù0?Ž/â‹ù_—òe|”ÏOàËù
+¾’ñUüD¾š¯áã|-?‰ŸÌOá§òÓøéü~&?‹ŸÍÏá/âçòóø‹ùùü%ü~!¿ˆ_Ì_Ê_Æ/á—òËøËù+øåü•üUüÕü
+þ~%-¿Š¿Ž_Í_ϯáoà×ò7ò7ñ7óëø[øõü­ümüíüþþNþ.þnþ~#/¿‰¿ßÌßÏ?À?Èoáâ·òóÛøGøGùÇøÇù'ø'ùíüSüþi~'ÿÿ,ÿ¿‹žßÍ¿À¿È¿Ä¿Ì¿Âïá_å÷ò¯ñ¯óoðoòoñoóïðïòïñûø÷ùýüüþCþ#þcþþSþ ÿÿ9ˆÿ‚ÿ’ÿŠ?ÌÍÃËÇÏáàò?ò?ñ?ó¿ð¿òÇøã(8¢ 	² ª 	º`¦`	„ÆÂBáL¡©ÐLh.´Z
+­ŸÐZh#´Ú	í…ÂYBG¡“p¶ÐYHº]…nBw¡‡à‚-…d!Eè)¤
+½„ÞÂ9B¡¯p®ÐOHÒ…!S	YBa€-	9Â`!WȆC…|¡@(†	Ã…ÂHa”0Z8O#œ/\ \(ŒÂÂ8¡H("B‰P*”	Qa¼0A(*„J!&T	…j¡FˆµÂ$a²0E˜*L¦3„™Â,a¶0G¸H˜+Ì.æ—„…Â"a±p©p™°DX*,.®–W
+W	W+„k„•ÂµÂ*á:aµp½°F¸AX+Ü(Ü$Ü,¬nÖ·
+·	·„;„;…»„»…{„Â½Â&á>a³p¿ð€ð °ExHØ*<,lžž¶O	;„§…Â3³ÂsÂ.áya·ð‚ð¢ð’ð²ðŠ°GxUØ+¼&¼.¼!¼)¼%¼-¼#¼+¼'ìÞö„…„…O„O…ƒÂgÂçÂ!ááKá+á°ðµðð­ðð½pDøA8*ü(ü$ü,ü"ü*Žc„	Lb
+Ó˜Á,æ0Œ±ˆ%,c«XÃ:6°‰-Ü7Ægà&øLÜ7ÃÍqÜ·Â>Ü·Ámq;ÜwÀgᎸ>wÆI¸áî¸öã ¶q'ãܧâ^¸7>÷Á}ñ¹¸NÃé8gâÎÂýñ œâA8ƹ8ÁCq>.À…xŽGà‘xÏÃcðùø|!‹Ãx.ÂÅ8‚Kp).ÃQ<OÀå¸Wâ®Âq5®Áq\‹'áÉx
+žŠ§áéxž‰gáÙx¾ÏÅóðÅx>¾/Àñ"¼_Š/ÃKðR¼_Ž¯ÀËñ•ø*|5^¯Á+ñµx¾¯Æ×ã5ø¼߈oÂ7ãuø¼ߊo÷ã
+ø|'¾ߍïÁñ½x¾oÆ÷ãðƒx~oÅãmøü(Ú„îÏáÇñèô z
+?‰6£ûѼÍEO¢ø)¼?îÀ;ñ3øYüÞ…ŸÇ»ÑÓøü"~	¿Œ_Á{ð«x/z=†_ïã7ð›ø-ü6~¿‹ßCÛð>ü>ޏ?Àð‡ø#ü1þŠâÏðçøþ‰¿Â‡ñ×øü-þàðQü#þ	ÿŒÁ¿âcø¸ˆDB$EJ¤EFdENäEAÄ¢(J¢,*¢*j¢.¢)Zb#±±x†ØD<Sl*6›‹-Ä–b+Ñ'¶ÛˆmÅvb{±ƒx–Øý vÏ;‹Ib±«ØMì.öýb@´Å ˜,¦ˆ=ÅT±—Ø[<Gì#öÏû‰ibº˜!fŠ!1Kì/³Åâ 1G,æŠyâq¨˜/ˆ…â0q¸8B)ŽG‹ç‰cÄóÅÄűbX‡.‹Äb1"–ˆ¥b™Ç‹Är±B¬cb•8Q¬kĸX+N'‹SÄ©â4qº8Cœ)Îg‹sċĹâ<ñbq¾x‰¸@\(.‹—Š—‰KÄ¥â2ñrñ
+q¹x¥x•xµ¸B¼F\)^+®¯W‹×‹kÄĵââMâÍâ:ñq½x«x›x»¸A¼C¼S¼K¼[¼GÜ(Þ+nï7‹÷‹ˆŠ[ćĭâÃâ6ññQñ1ñqñ	ñIq»ø”¸C|ZÜ)>#>+>'îŸw‹/ˆ/Š/‰/‹¯ˆ{ÄWŽâkâëââ›â[âÛâ;â»â{â>ñ}q¿øx@üPüHüXüDüT<(~&~.¿¿¿‹_‹ßˆßŠß‰ß‹GÄÄ£ââOâÏâ/â¯â1ñ¸„$B"%J¢%Fb%Nâ%AÂ’(I’,)’*i’.’)YR#©±t†ÔD:Sj*5“šK-¤–R+É'µ–ÚHm¥vR{©ƒt–ÔQê$-u–’¤.RW©Z)u—zH~t›l)(%K)RO)Uê…VI½Ñµè+驏ÔW:Wê'¥Iéè)CÊ”Bh¹”%õ—HÙÒ@i”#
+–r¥<iˆ4­–ò¥©P&
+—FH#¥QÒhé<iŒt¾tt¡4V
+Kã¤"©XŠH%R©T&E¥ñÒ©\ª@·J•RLª’&JÕR—j¥IÒdiŠ4Uš&M—fH3¥YÒliŽt‘4Wš']Œ–Ió¥K¤è*tµ´PZ$-–.•.“–HK¥eÒåÒÒréJé*éji…t´RºVZ%]'­–®—ÖH7Hk¥¥›¤›¥uÒ-ÒzéVé6éviƒt‡t§t—t·t´QºWÚ$Ý'm–”¶HI[¥‡¥mÒ#Ò£ÒcÒãÒÒ“Òvé)i‡ô´´SzFzVzNÚ%=/í–^^”^’^–^‘öH¯J{¥×¤×¥7¤7¥·¤·¥w¤w¥÷¤}ÒûÒ~éé€ô¡ô‘ô±ô‰ô©tPúLú\:$}!})}%–¾–¾‘¾•¾“¾—ŽH?HG¥¥Ÿ¤Ÿ¥_¤_¥cÒqÉ„LÊ”LËŒÌÊœÌË‚ŒeQ–dYVdUÖd]6dS¶äFrcù¹‰|¦ÜTn&7—[È-åV²On-·‘ÛÊíäörù,¹£ÜI>[î,'É]ä®r7¹»ÜCöËÙ–ƒr²œ"÷”Så^roù¹ÜW>Wî'§Éér†œ)‡ä,¹¿<@Ζʃäy°œ+çÉCä¡r¾\ ÊÃäáòy¤<J-Ÿ'‘Ï—//”ÇÊayœ\$˹D.•Ëä¨<^ž —Ër¥“«ä‰rµ\#ÇåZy’<Yž"O•§ÉÓåòLy–<[ž#_$Ï•çÉËóåKäòBy‘¼X¾T¾L^"/•—É—ËWÈËå+å«ä«åò5òJùZy•|¼Z¾^^#ß ¯•o”o’o–×É·Èëå[åÛäÛå
+òòò]òÝò=òFù^y“|Ÿ¼Y¾_~@~PÞ"?$o•–·ÉÈÊÉËOÈOÊÛå§äòÓòNùùYù9y—ü¼¼[~A~Q~I~Y~EÞ#¿*ï•_“_—ߐߔߒߖߑߕߓ÷ÉïËûåäò‡òGòÇò'ò§òAù3ùsùü…ü¥ü•|XþZþFþVþNþ^>"ÿ •”’–‘•ÉǤ
+©P
+­0
+«p
+¯
+VDERdEQTEStÅPLÅR)•3”&Ê™JS¥™Ò\i¡´TZ)>¥µÒFi«´SÚ+”³”ŽJ'ål¥³’„Rº(]•nJw¥‡âWŠ­•d%E驤*½”ÞÊ9J¥¯r®ÒOISÒ•%S	)YJe€’­T)9Ê`%WÉS†(C•|¥@)T†)ÕÊHe”2Z9O£œ¯\ \¨ŒUÂÊ8¥H)V"J‰Rª”)Qe¼2A)W*”J%¦T)•j¥F‰+µÊ$e²2E™ªLS¦+3”™Ê,e¶2G¹H™«ÌS.Væ+—(”…Ê"e±r©r™²DYª,S.W®P–+W*W)W++”k”•ÊµÊ*å:eµr½²F¹AY«Ü¨Ü¤Ü¬¬SnQÖ+·*·)·+”;”;•»”»•{”Ê½Ê&å>e³r¿ò€ò ²EyHÙª<¬lSQUSWžPžT¶+O);”§•Ê3ʳÊsÊ.åye·ò‚ò¢ò’ò²òŠ²GyUÙ«¼¦¼®¼¡¼©¼¥¼­¼£¼«¼§ìSÞWö+(”•”•O”O•ƒÊgÊçÊ!ååKå+å°òµòò­òò½rDùA9ªü¨ü¤ü¬ü¢üªSŽ«H%TR¥TZeTVåT^T¬Šª¤Êª¢ªª¦êª¡šª¥6R«g¨MÔ3Õ¦j3µ¹ÚBm©¶R}jkµÚVm§¶W;¨g©ÕNêÙjg5Ií¢vU»©ÝÕª_
+¨¶T“Õµ§šªöR{«ç¨}Ô¾ê¹j?5MMW3ÔL5¤f©ýÕj¶:P¤æ¨ƒÕ\5O¢UóÕµP¦WG¨#ÕQêhõ<uŒz¾zz¡:V
+«ãÔ"µX¨%j©Z¦FÕñêµ\­P+Õ˜Z¥NT«Õ5®Öª“ÔÉêuª:M®ÎPgª³ÔÙêõ"u®:O½X¯^¢.Pª‹ÔÅê¥êeêu©ºL½\½B]®^©^¥^­®P¯QWª×ª«ÔëÔÕêõêõu­z£z“z³ºN½E]¯ÞªÞ¦Þ®nPïPïTïRïVïQ7ª÷ª›ÔûÔÍêýêêƒêõ!u«ú°ºM}D}T}L}\}B}RÝ®>¥îPŸVwªÏ¨ÏªÏ©»ÔçÕÝêê‹êKêËê+êõUu¯úšúºú†ú¦ú–ú¶úŽú®úžºO}_ݯ~ P?T?R?V?Q?UªŸ©Ÿ«‡Ô/Ô/Õ¯ÔÃê×ê7ê·êwê÷êõõ¨ú£ú“ú³ú‹ú«zL=®!ÐHÒhÑXÓxMа&j’&kŠ¦jš¦k†fj–ÖHk¬¡5ÑÎÔšjÍ´æZ­¥ÖJói­µ6Z[­Ö^렝¥uÔ:igkµ$­‹ÖUë¦u×zh~- ÙZPKÖR´žZªÖK뭝£õÑújçjý´4-]ËÐ2µ–¥õ×hÙÚ@m–£
+Örµ<mˆ6TË×
+´Bm˜6\¡ÔFi£µó´1ÚùÚÚ…ÚX-¬ÓŠ´b-¢•h¥Z™ÕÆk´r­B«ÔbZ•6Q«Öj´¸V«MÒ&kS´©Ú4mº6C›©ÍÒfks´‹´¹Ú<íbm¾v‰¶@[¨-Òk—j—iK´¥Ú2írí
+m¹v¥v•vµ¶B»F[©]«­Ò®ÓVk×kk´´µÚÚMÚÍÚ:ím½v«v›v»¶A»C»S»K»[»GۨݫmÒîÓ6k÷khj[´‡´­ÚÃÚ6ííQí1íqí	íIm»ö”¶C{ZÛ©=£=«=§íÒž×vk/h/j/i/k¯h{´Wµ½ÚkÚëÚÚ›Ú[ÚÛÚ;Ú»Ú{Ú>í}m¿öv@ûPûHûXûDûT;¨}¦}®ҾоԾÒk_kßhßjßißkG´´£ÚÚOÚÏÚ/Ú¯Ú1í¸ŽtB'uJ§uFguNçuAǺ¨Kº¬+ºªkº®º©[z#½±~†ÞD?Soª7Ó›ë-ô–z+ݧ·ÖÛèmõvz{½ƒ~–ÞQ蘭­wÖ“ô.zW½›Þ]ï¡ûõ€nëA=YOÑ{ê©z/½·~ŽÞGï«Ÿ«÷ÓÓôt=CÏÔCz–Þ_ gëõAzŽ>XÏÕóô!úP=_/Ðõaúp}„>R¥ÖÏÓÇèçëèêcõ°>N/Ò‹õˆ^¢—êezT¯OÐËõ
+½RéUúD½Z¯Ñãz­>IŸ¬OѧêÓôéú}¦>KŸ­ÏÑ/Òçêóô‹õùú%ú}¡¾H_¬_ª_¦/Ñ—êËôËõ+ôåú•úUúÕú
+ý}¥~­¾J¿N_­_¯¯ÑoÐ×ê7ê7é7ëëô[ôõú­úmúíúýýNý.ýný}£~¯¾I¿O߬߯? ?¨oÑÒ·êëÛôGôGõÇôÇõ'ô'õíúSúýi}§þŒþ¬þœ¾K^ß­¿ ¿¨¿¤¿¬¿¢ïÑ_Õ÷ê¯é¯ëoèoêoéoëïèïêï¡ÇÑú>ý}}¿þ~@ÿPÿHÿXÿDÿT?¨¦®ҿпԿÒë_ëßèßêßéßëGôô£úúOúÏú/ú¯ú1ý¸ 
+Ê 
+Æ`
+Îà
+ÁÀ†hH†l(†jh†n†iXF#£±q†ÑÄ8Óhj43š-Œ–F+Ãg´6ÚmvF{£ƒq–ÑÑèdœmt6’Œ.FW£›ÑÝèaø€aA#ÙH1z©F/£·qŽÑÇèkœkô3ÒŒt#ÃÈ4BF–Ñß`dAFŽ1ØÈ5òŒ!ÆP#ß(0
+aÆpc„1ÒeŒ6Î3Æçc°1Î(2ŠˆQb”eFÔoL0ʍ
+£ÒˆUÆD£Ú¨1âF­1ɘlL1¦ÓŒéÆc¦1˘mÌ1.2æ󌋍ùÆ%Æc¡±ÈXl\j\f,1–ˌˍ+ŒåÆ•ÆUÆÕÆ
+ãc¥q­±Ê¸ÎXm\o¬1n0Ö777ëŒ[ŒõÆ­ÆmÆíÆããNã.ãnãc£q¯±É¸ÏØlÜo<`<hl12¶ÛŒGŒGÇŒÇ'Œ'íÆSÆãic§ñŒñ¬ñœ±ËxÞØm¼`¼h¼d¼l¼bì1^5ö¯¯ooooïïïûŒ÷ýÆÆãCã#ãcããSã ñ™ñ¹qÈøÂøÒøÊ8l|m|c|k|g|o1~0Ž???¿¿ÇŒã&2	“4)“6“59“7›¢)™²©˜ª©™ºi˜¦i™ÌÆæfóL³©ÙÌln¶0[š­LŸÙÚlc¶5Û™íÍæYfG³“y¶ÙÙL2»˜]Ínfw³‡é7¦mÍd3Åìi¦š½ÌÞæ9f³¯y®ÙÏL3ÓÍ3Ó™Yfs€™m4™9æ`3×Ì3‡˜CÍ|³À,4‡™ÃÍæHs”9Ú<Ïcžo^`^hŽ5Ãæ8³È,6#f‰Yj–™Qs¼9Á,7+ÌJ3fV™Íj³ÆŒ›µæ$s²9ÅœjN3§›3Ì™æ,s¶9ǼȜkÎ3/6ç›—˜Ì…æ"s±y©y™¹Ä\j.3/7¯0—›WšW™W›+ÌkÌ•æµæ*ó:sµy½¹Æ¼Á\kÞhÞdÞl®3o1×›·š·™·›Ì;Ì;ͻ̻Í{̍æ½æ&ó>s³y¿ù€ù ¹Å|ÈÜj>ln31537Ÿ0Ÿ4·›O™;̧͝æ3æ³æsæ.óys·ù‚ù¢ù’ù²ùŠ¹Ç|ÕÜk¾f¾n¾a¾i¾e¾m¾c¾k¾gî3ß7÷›˜Ì͏̏ÍOÌO̓ægæçæ!óóKó+ó°ùµùù­ùù½yÄüÁ<jþhþdþlþbþj3[È",Ò¢,Úb,Öâ,Þ,l‰–dÉ–b©–fé–a™–e5²[gXM¬3­¦V3«¹ÕÂjiµ²|Vk«ÕÖjgµ·:XgY­NÖÙVg+ÉêbuµºYÝ­–ß
+X¶´’­«§•jõ²z[çX}¬¾Ö¹V?+ÍJ·2¬L+deYý­V¶5ÐdåXƒ­\+Ïb
+µò­«Ðf
+·FX#­QÖhë<kŒu¾uu¡5Ö
+[ã¬"«ØŠX%V©UfE­ñ֫ܪ°*­˜UeM´ª­+nÕZ“¬ÉÖkª5ÍšnÍ°fZ³¬ÙÖë"k®5Ϻؚo]b-°Z‹¬ÅÖ¥ÖeÖk©µÌºÜºÂZ.Ô”Ä˦V•E*¹´ŠpQu¬’'J6m\udR„
+{—+UF&páD)fE«‹j+JÊ#SÄ¢ú:Î(ŽÅÃEE‘Ê8.:Qe3‹Â®ÈâD‘éÈǹ F 0” ŒxÕŠœ¨r!P#’(ÙPBbÄ+Äþ
+”*m TÿzY¥'ªRÿ¢XEEJ<ˆÈ)«¯ÓÆ…«é2çƒÍŽGË‹#lÔ+¸l°$
+–d',‰&\—
+:G%™=ŒŽ6À__—5ÔjÂI¥Õ‘Hey¸²8ZÄæ„‹jã¶Ü+¤œ†ýÊ<°9	•{ãXO—;lnb|eb|nÃñ•
+Çç&ÆW&\vÿ︪c΂¡B•¥T¤²”Ëãc`|^Âø˜WÈyeµ•¥áêÚŠòpm\Ž5|bó:T'tÈo¨CuCò:T'Š‚Ĩ¯¸±¦J‹7”V˜Ox¤ÐÒ¸;¥ÃSZ›˜Òa`U-X5,aU­W0꣕¥L­û);ÉÂÚ†OÜ0˜úZØ5#h;¹A}TƒúÔú:;:aë4¯À£ë—ñ´U¦<VYZÃÕVF»÷èÙÊPú¡@iC„2Ê({B™
+e”éPf@™	eʬD™
+ø©€Ÿ
+¸©€›
+¸©€›
+¸©€›
+¸©€›
+¸©€›
+¸©€›šÅä•Åª+™˜û™hK›Ó ;
+°Ó ;
+°Ó ;
+°Ó ;
+°Ó ;
+°Ó ;-Äó0kë1ÓÁÞtÀNìtÀNìtÀNìtÀNìtÀNìtÀNìt°;üþÎ üÀÏ üÀÏ üÀÏ üÀÏ üÀÏ üÀÏ üÀÏ üLÀÏüLÀÏüLÀÏüLÀÏüLÀÏüLÀÏüLÀÏüLÀÏüà‡ ?ø!À~(ÈöOìúR¯€V@zÐC€ô ‡ =èY€žèY€žèY€žÖgõY`}àg¥â4÷$Ilòð‰*—J”áHâ¬Ë«)×”%ê±úº'Åß½;”= ôC€Ò†2e2”)Pö„2Ê4(Ó¡Ì€2Ê”	oø{ ~Àïø= ¿à÷ ü€ß#E*hxV×4x€ IФhÒ4éšô Mü ‰4ñƒ&~ÐÄšøA?hâOøÁ~ð„ðý€ï|?àûßøÀ ~ ð€ ü à’yç4/ÔÔŒ‡P  
+@ (  @ €6(`ƒ6(`ƒ6(`ƒ68ÀØ€o¾
+ø6àÛ€o¾
+ø6à?øAÀ~ðƒ€ü à?øAÀ~ðƒ€ü à'~2à'~2à'~2à'~2à'~2à'~2à'~2à'~2ৠ~
+ৠ~
+ৠ~
+ৠ~
+ৠ~
+ৠ~
+ৠ~
+ৠ~
+àCà‡0Àa€ ?„~üø!ðCà‡0Àa€ ?„~üø!ðCà‡0ÀŸ
+øø!ðC8à‡pÀá€Â?„~üø!ðC8à‡pÀŸ
+øi€Ÿøø!$ðCHà‡À!B?„~	üø!$ðCHà‡ÀŸøi€Ÿøø!,ðCXà‡°ÀaÂ?„~üø!,ðCXà‡°ÀaÂ?„~üø!,ðCXà‡°Àa ?„~üø!ðCà‡0Àa€ ?„~üø!ðCà‡0Àa€hÝ´îZ÷­ûÖý@ë~ uä…@^ä±ûØý@ä~ r?¹ˆÚŸ•"”V‡'¹¿µ=Nð(Õ­yïÝý‚—4h±¡B™e
+”=å²Xl‚÷‹ý
+F¥A™e”™P† Lø  t :
+ €N@§ Ó Ði hÑ£'”©P>h H4 $ 
+ ‰€D@¢¿_rHÊûŒÕL &
+ “€IÀ¤`Ò 0i ˜4 L &
+ “€IÀ¤`Ò 0i ˜4 L &
+ ? ø@¤ Ò i ˆ4 D "
+ ‘€H@¤ Ò i ˆ4 D "
+ ‘€H@¤ Ò i ˆ4 D "
+ ‘€H@  Ð h ˆ2 D B !€@ˆ Ä b 1 D "
+ Ñ€h@4 š@Jˆ‰Ç*c5rq4R©‰ÖxO8­¼ª,ìU…pe,)DÃR¨ª&ꤦ^3ŠÃûìÔ¤¼Š¨›X'†5èŒó*"¥‰NzÔé~ãaÑé‘x˜évÅ„b£ =ÚyE9xLa™S£]@fP¸ª*Ìæ„+ƇÉÁµdn-92ʁä(•_c
+¢¥aª0\ˁ6Ԑ²(•áüR•²h¢B‡ºg>á )ÒÐìHÙÑ:³­Ú“‡&ŒòÆÓã\£J]£˜âHy<́,zšk’û2î™ä
+c&x&•{&%|žAVÖ’S¢\,aU]ck\£z0^AÅÛ Ÿªrì*rþ:LÌu¸ÔÐ×ê)jJ±†³UÛp¶b'f+¡FfwÖS³^‚5dÈ´i»덫{ëòÁ äƒÈ @> â q€8@ Ž G ˆ# Ä â q€8@Ȑ€H@$ ’ d„Ȑ # Ñ #@F€Œ0 a 2Â@àg~àg~àg~V߆ІІІÐ겁ºl .¨Ë†ІÐÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -HˆÌφÌϾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʆÄÏÞ²·là-???øÌ>³!ñ³!ñ³!ñ³çlà9xΞ³çlà9xΆÄφÄφÄφÄφÄφÄφÄφÄφÄφÄφÄφÄφÄφÄφÄφÄφÄϾµomHülHülHülHülàcøØ>¶mHülHülHülHülHülHülHülHülHülHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHøl¸¶á؆ІІІІІІІІІІÐη!´!´!´÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷ƒÀûAàý ð~x?¼Þï÷ƒÀûAàý ð~x?¼Þï÷ƒÀûAàý ð~x?|>êÚA/àà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø/üþÿÿ‚ÀAà¿ ð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚páÞïá<Ây„ó<çyÎó œçA8σpžá<ÂyL¯“öÀy„ó<çyÎó œçA8σpžá<Âù„ó;çoÎß œ¿A8ƒpþáü
+Âù̬ÿÿÚ;û09ª:ßWõéê™î™Lf&3¼B,æœîª:,Lw×9ò²º*¨°.Â$3I“LœI0ˆË›â"B‚뺂Šoˆˆ¬‹€¬ëºQDñ®×…½ëÞõ¸w#r½ì½Þ@Š{ºëÓIÁ³ë>ÏýãÞç>ÏPL~U=§ë{ªêÔ÷û«_å|Cáßþ
+áßþ
+áßþ
+áßþ
+áßþ
+áßþ
+áßþ
+áßþ
+áßþ
+áÕ^
+áÕ^
+áÕ~Šx®ˆx^ˆx.ˆxˆxˆxˆxˆxˆxˆxˆxˆxˆxˆxˆxˆxˆxˆxˆxˆà¿þ‹à¿þ‹à¿þ‹à¿þ‹à¿þ‹àµ^‹àµ^‹àµ^‹àµ^‹àµ^‹jÝýr\ðZ¯EðZ¯EðZ¯EðZ¯EðZ¯EðXD~ÁS<ÁS<ÁS<ÁS<ÁSQÔÝ/ý†§"x*‚§"x*‚‡"x&‚g"x&‚g"x&‚g"x&‚g"x&‚g"x&‚g"x&‚g"x&"?ŽÈ#òáˆü7"ÈW#òÔˆ¼4"ߌà^‰à^ˆÈ×"ò´ˆû>â~Š¸Ÿ"û)êÞO¶Ûžý‘§Dä)yJOÅðTOÅðTLÞ“wÆô/†·bòθÕÝ_ƒØ$¶ˆ	ѳãá½Þ‹á½ދ὘ãá½Þ‹á½Þ‹á½Þ‹á½Þ‹á½Þ‹á½Þ‹á½Þ‹á½Þ‹á½Þ‹É/cò˘ü2&¿ŒÉ/c®[Ìu‹¹n1×-æºÅ\·˜ëw¯ù¤!/2Œ_Ãø5Œ[Ã85<ôÐðÜgxŽ3Œ[Ãsœá9Îðüfx~3<¿žßL½»C¤?Œ{Ãs›á¹Íð¼fxN3<—žËÏc†ç1ÃýaÐoƒ~ôÛ ßý6ÜGý6è·A¿
+úmÐmƒntÛ0þ
+ãß0þ
+ãß0þ
+ãÞ0Þ
+ãÝ0Þ
+ãÝ0Þ
+ãÝ0¾
+ãÛ0¾
+ãÛ0¾
+ãÛ0¾
+ãÛ0¾
+ãÛ0žM6žåXöÜì¢$*b•X#†Äˆ5±Nl›Ä±‹gˆ6‹Mð›à7Áo‚ß¿	~ü&øMð›à7Áo‚ß¿	~ü&ø-ð[à·Àoß¿~Bû„ö	íÚ'´OºíéoBú›Ðß„þ&ô7¡¿Ýë“Ðß„þð
+ø|¾߀oÀ7àð
+ø|¾߀oÀ7à[ð-ø|¾ß‚oÁ·à[ð-ø|~öœ+©_Kê×’úµ¤~-©_Kê×’úµ¤n-©[KêÖ’ºµ¤n-©[KêÖ’ºµ¤n-©[KêÖ’ºµ¤n-©[KêÖ’ºµ¤n-©[KêÖ’zµ¤^-©WKêÕ’zµ¤^-©WKêÕ’zµ¤^-©WKêÕ’zµ¤^-©WKêÕ’zµ¤^-©WKêÕ’zµ¤^-©WKêÕ’zµ¤N-©SKêÔ’:µ¤N-©SKêÔ’:µ¤N-©SKêÔ’:µ¤N-©SKêÔ’:µ¤N-©SKêÔ’:µ¤>-©OKêÓ’ú´¤>-©OKêÓ’º´¤.-©KKêÒ’º´¤.-©KKêÒ’º´¤.-©KKêÒ’º´¤.-©KKêÒ’º´¤.-©KKêÒ’º´¤.-©KKêÒ’º´¤.-©KKêÒ’º´¤.-©KKêÒ’º´¤.-©KKêÒ’º´¤.-©KKêÒ’º´¤.-©KKêÒ’º´¤.-©KKêÒ’º´¤.-©K»¾_ƒ¯Á×àkð5ø|
+~ü:øuðëà×Á¯ƒ_¿~ü:øuðëà×Á¯ƒ_¿>:K}ZRŸ–Ô§%õiI}ZRŸ–Ô§%õiI}ZRŸ–Ô§%õiI}ZRŸ–Ô§%õiI}ZRŸ–Ô§%õiI}ZRŸ–Ô§%õiI}ZRŸ–Ô§%õiI}ZR–Ô£%õhI=ZR–Ô£%õhI=ZR–Ô£%õhI=ZR–Ô£%õhI=ZR–Ô£%õhI=ZR–Ô£%õhI=ZR–Ô£%õhI=ZR–Ô£%õhI=ZR–Ô£%õhI=ZR–Ô£%õhI=ZR–Ô£%õhIZR‡–Ô¡%uhIZR‡–Ô¡%uhIZR‡–Ô¡%uhIZR‡–Ô¡%uhYëê³ß‚ŸÕ¡%uhIZR‡–Ô¡%uhIZR‡–Ô¡%udIYRG–Ô‘]äûèpˆ‡²û}M¬Ä&±ELˆ†HÿÑã=Ñã=Ñã=Ñã=Ñã=Ñã=Ñã=Ñã=Ñcêå’z¹¤^.©—Kêå’z¹¤^.©—Kêå’z¹¤^.©—Kêå’z¹¤N.©“Kêä’:¹¤N.©“Kêä’:¹¤N.©“Kêä’:¹¤N.©“Kêä’:¹¤N.©Kêã’ú¸¤>.©».ºL½\R/—ÔË%õrI½\R/—ÔËeˆ.S7—ÔÍ%usIÝ\R7—ÔÍ%usIÝ\R7—ÔÍ%õnI½[Rï–Ô»%õnI½[Rï–Ô»%õnI½[Rï–Ô»%õnI½[Rï–Ô»%õnI½[R×v‘ý£—!z¢—!z¢—!z¢—!z¢—!z¢—!:¢s!:¢s!:¢sa£û=Î:¢s!:¢s!:¢s!:¢sÔ¥%uhIÝSR÷”Ô%õ@‘EäEyQD^D½ÐŐÈþ8ÿÔ%u at IPR”Ô%u at IÐEM¬Ä&±ELˆô›ëq}¨'Jê‰.‚Ïõ¡¾è"øä3Ô]Ÿ|&"Ÿ‰Ègø<Ïø<Ïø<Ïø<Ï“ì½¢‹ubƒØ$vq¢!fÇ™ 	z 	z 	: 	: 	: 	: 	: 	: 	: 	¼ŸÀû	¼ŸÀû	¼ŸÀû	¼ŸÀû	¼ŸÀ÷	|ŸÀ÷	|ŸÀ÷	|ŸÀ÷	|ŸÀ÷	|ŸÀ÷	|ŸÀ÷	|ŸT»¸'¼ŸÀû	¼ŸÀû	¼ŸÀû	÷SÂý”Àû	¼ŸÀû	¼ŸÀû	¼ŸÀû	¼ŸÀû	Ïc	üŸÀÿ	üŸÀÿ	üŸÀÿ	üŸÀÿ	üŸÀÿ	¼ŸÀû	¼ŸÀû	¼ŸÀû	¼ŸÀû	¼ŸÀû	¼ŸÀû	¼ŸÀû	üžÀï	|žÀ	÷WÒ½¿x^Hx^Hx^HàÑMàÑMàÑMàÑMàÑMàÑMàÑMàÑMx^Hx^Hx^Hx^Hx^Hx^Hx^Hx^Hx^Hx^Hx^Hx^Hx^Hx^H¨Ë%Ôåžžžžžž<eà)OxÊÀSž2𔁧<eƺûk›Ä1!bÖ_OxÊÀSž2ð”!o5𕁯|eà+_øÊÀW¾2𕁯|eà+_øʐ·òVøËÀ_þ2𗁿üeà/òVxÌÀc3ð˜Ç<fà1xÌÀc3ð˜Ç<Æûià1xÌÀc3ð˜Ç<fà1xÌÀc3ð˜Ç<fà1xÌÀc3ð˜Ç<fà1xÌÀc†<ÖÀg>3ð™Ï|fà3ŸøÌÀg>3ð™Ï|fà3C}ÉP_2Ô—y”!2äQ†<ʐGò(CeÈ£y”/
+|iȇ
+ù°?
+ù°!6äÃ&¶¥·tfî”vgá-Ù|ùݝP~K÷¯¯—wwײñ¾Kò¾ËEðÉÇù˜!ã=˜‹à“ò1C>fÈÇùïÍ$ïÍ$ïÍ$ïÍ\Ÿ|Œ÷g’÷gÒ ¼'“¼'“¼'s‘ý£=ཙ‹ì=à=šä=š‹zÀû4Éû4Éû4Éû4Éû4Éû4Éû4Éû4Éû4Éû4Éû4Éû4ÁGx¯&y¯æ"øèïÙ$ïÙ$ïÙ$ïÙ$ïÙ\½0èïݤéêõ$Þ»IÞ»IÞ»¹>õ$ÞÃIÞÃIÞÃIÞÃIÞÃIÞÃIÞÃIÞÃIÞÃIÞù>õ$ÞËÉî{9ÃsŒ¡žd¨'žkõ$C=ÉPO2Ô“õ$C=ÉPO2Ô“õ$Ã{C]ÉPW2Ô•u%C]ÉXYº(»Ñ®ì>ª’¡ªd¨*ªJ†ª’E­-jmQk‹Z[ÔÚ¢Öµ¶¨µE­íXw
+b“Ø"&DCÌŽÆ¢Öµ¶¨µE­-jmQk‹:[ÔÙ¢Îu¶¨³E-jlQc‹[ÔØ¢Æ5¶¨±E-jlQc‹[ÔØ¢ÆVuñ8>ÔØ¢Æ5¶¨±E-jlQc‹[ÔØ¢Æ5¶¨±E-jlQc‹[ÔØ¢Æ5¶¨±E-jlQc‹úZÔ×¢¾õµ¨¯E}-jkQ[‹ÚZÔÖ¢¶µµ¨­Em-*kQWv÷KÿQS‹šZÔÔ¢¦5µ¨©EM-jjQS‹šZÔÔ¢¦5µ¨©EM-jjQS‹šZÔÔ¢¦5µ¨©EM-jjQS‹šZÔÔ¢¦5µ¨©¥ša©fXª–j†¥šayŠ±¨§E=-êiQO‹zZÔÓ¢žVwñ8^ÔÓ¢žõ´¨§E=-êiQO‹zZÔÓ¢žõ´¨§E=-O[–§-ËÓ–åiË¢®uµ¨«E]-êjQW‹ºZÔÕ¢®uµ¨«E]-êjQW‹ºZÔÕ¢®uµ¨«E]-êjQU‹ªZTÕ¢ªUµ¨ªEU-ªjQU‹ªZTÕ¢ªUµ¨ªEU-jjQS‹šZÔÔ¢¦5µ¨©EM-jjQS‹šZÔÔ¢¦5µ¨§E=-êiQO‹zZÔÓ¢šÕ´¨¦E5-ªiQM‹jZTÓ¢šÕ´¨¦E5-ªiQM‹jZTÓ¢šÕ´¨¦åí‹åí‹E'-úhÑG‹>Ú®>òÖÅòÖÅòÖÅòÖÅfo]ÔX¦£.J¢"V‰5bHŒˆ1QëıIlb×fQ‚/eeÓôæ]³S“s[øH-èüËäsgܯ7l]ðŽ]3í;þr÷ÑÔ$m؝ªÌlo[½Mmß:5á¾4°s÷Ln“Vt^ÑYEgUtVÑYÅÞ«²´mz{Ç8ljãÌv°«œ¢*ý­rŠª T9EÕfyꊍ['¶¹càpªàTÁ©qRj\”¥ÆE©T©R
+¤£ÆñÕ8¾ÇW·n
+ÜÜÜÜܐ#
+ÁÁÁÁÁÁÁÁÁÁÁÀÀÀÀØ_Äþ"ö±¿ˆýEì/f1û‹éLÿcúÓÿ˜þÇô?/////Oƒ§ÁÓô_Ó
+¾_ƒ¯Á×àkð5ø|
+¾_ƒ_·nÜ:¸upc6ÎlÙ¾ÍÝ#;'f¯äSUÜ:=;Á]kD¥Ss®›ô¬AύâäÌöÍE³kv†OèSƒ>58'MúÖ¤oMúÖ¤oMúÖ8¡}Bû„s”pŽÎE¹ȈYIˆLŽu·±J¬CbDŒ‰šX'6‰-bB4Äìø¤ë=gÓìÄÛwîšå€%À`èLJ€eÜ·{jÚqØÎÙ‰¹9><{:p±ÙûÆ—ï<éß1;5·qvzGûŸlçCº¢8ŠS è¢Š(z 
+JÅ¡+СE	-JhQª¤<5·szÛÄNhWBŒ²
+rä*ç Jªµ`bëÔŽ-lAJRVÁ¯‚_¿
+>t)¡K	]JèRB—º”Ð¥¬qüЦ„6%´)¡M	mJèRÖLoûFÙ2=;Yv2ÒYáBÁ€”0 „%(ÃFÙíbjzó–[úwn™b}®oÓôåÝõþ9§eÛÙà{Œ(aD	#JQFZD"úÑŸˆþDô•0¨„A%*aP	ƒJT 2?F•0ª„Q%Œ*aT	£JU¨F•0ª„Q%ŒŠ¥ÂŒRaF©0£t±Vž˜Ù½ujÓΞÎÚ®•NœmŸÎì—“3»·gkÜE,Ól’»§N—ët¹N—ët¹N—ët¹N—ët¹N—ët¹A—t¹A—t¹Á)ƒiñ’t1î?Ò³
+sS|H't¢A'tÖ•°®„u%¬‹©¤ÂTRa*ébm`£C›žØì)Ç.œ‹&}ir.šœ‹&Ýhҍ&Ýhҍ&Ýhҍ&ÝhэÝhэÝhq.Zœ‹ø-ð[à·Àoß¿~üø-›K—iµGF¥»±kÇ‚îjg|iÕ"G6Ú£$ÛOB¿!<'ž“
+ÏI…ç¤ÂsRá9©ðœTxN*<'ž“JvÅËp^çÅp^ø|¾߀oÀ7àð
+ø|¾ß‚oÁ·à[ð-ø|¾ß‚oÁ·à[ð-ø<m¸ÇŽ²‹íÄ}"K]æÞ7uÅôœKÐwNù¬Ö;µmÇÎ+]úÑ»y¶í'³}gÏÔÖ©mmÓÚÌhÆŽ®q£wn×FÇœÝZÄ„˜aã-©ð’TxI*¼$]Œú'\?f§çÞînjbØ$¶œÏ옙m«ðÄÖŠ[ÙÒ¶çØLlß¼5»{1T˜G*Ì#æ‘
+óH£ÊÖ™ÍÓ'Ú¾ÌeVgfû§·ïl?ãllƒ®%‚y¤Â<Ra©0T˜G*Ì#æ‘.VË;·¸~“{âz€$+$÷H…{¤Â=RµÝ#禷Mo˜e› ɸG*Ü#î‘
+÷H…{¤‹µ²{€Ú<»ëÈuD”ñTøF*|#¾‘
+ßH…o¤Â7Rá©ðTøF*|#¾‘
+ßH…o¤Â7Rá©ðTøF*|#¾‘
+ßH…o¤Â7ÒEÛ7õŽ]Ó—»<gûFÎ.jg¤Â#Rá©ðˆTxD*<"‘
+H…G¤Â#Rá©ðˆTxD*<"‘
+H…G¤Â#Rá©ðˆTxD*<"‘
+H…G¤Â#Rá©ðˆtQvî7Vw9åÚ9ÐÝhÿ1µ³ìnÙì´ûÝÜ:u­»YkÚÐ3ž„pT¸G*Ü#î‘
+÷H…{¤Â=Rá©pT¸GºX«´²]Nºu×EÙGÛvmÝ9½cë•|LOHð‘TøH*|$>’
+I…¤ÂGRá#©ð‘TøHºX[à|ÇTې}בûŠ¤ 7I…›¤ÂMRá&©p“T¸I*Ü$n’
+7I…{¤Â=Rá©pT¸G*Ü#î‘
+÷H…{¤Â=Rá©pT¸G*Ü#î‘
+÷H…{¤Â=RµÝ#'gvåY„I…‹¤ÂERá"©p‘T¸H*\ ..ò}„Y!Ì
+aV³Jºß§ß3®‘
+×H…k¤Â5Ráé"ç
+aÆ5Rá©pt|„I…‹¤ÂEÒEðf…0+„—IÁG˜¬f…0+„Y!Ì
+aV³B˜¬²¿|í„cŒ(ƒ-3»ÈB«<CãZ©p­T¸V*\+]ÔÄ:±Al[Ä„hˆvÁìÔåèžc‹ìÓì՚…RáB©pT¸N*\']´•¶`ºŒaëÎGV7°74›I…ͤÂfRa3©°•TØJ:AäØáRl6‡
+[C'˜ì‡ZK~¨ÂUø¡
+?Tá‡*üP…ªðC~¨ò¸Påq¡
+3Ta†*ÌP…ª0Cf¨ÂU˜¡
+3T[ÝH?áUF6ÓÈÓÈӏӏӏӏӏӏӏӏӏ\¬÷žoåØX·òŽÉö2÷A•X#†Äˆ5±Nl›n‡cù&DC´íÕ£
+iLp±Ún r
+èµ›PÆíµ\ú@á&”>è\úÀ`e¶€b¶€b¶€b¶€‹.ԏî€qËtÅtÅtÅtÅt;=ˆr; $‹ÌPÌPÌPÌp±ÓƒøèÈ™0 ˜0 ˜0 ˜0 ˜0àb§anô€d‡ÅÌÅÌÅÌÅÌÅÌÅÌÅÌÅÌÅÌÅÌÅÌÅÌÅÌÅÌÅÌÛã ÖnEÕX	ewE±R­wÛt?QÝ6*ì6c¥Öm\ÕÝ6GVâîJÔmsd¥û«ZBíîYu»Z;Ò¸»çZ·?µnjÝ=׺_à‘ýäF09&¶<
+[…-Â–GaË£°åQLSPLSPLSPLSPLSPLSPLSPLSPLSPLSPLSPi
+;6lÙøöl›
+ÓT{šÂäöüïÁ§¦ê8ÈÿtòÈö$†­›ò¿<²=‰avgöû­;ç¶LLN?{&ßžÅN+¸ž)Š).rìäŽ!¹cHî¢
+!Ú¢
+!ÚÖmyÓôÖ­S“f®(í]÷d#Ì…PÌ…PÌ…PÌ…PÌ…PÌ…p±^:[jwCuBØ~×ÖÞý¬{´¤=@˜¡01Rm£íjÑ®lÓòHLŒ&F
+#…‰‘j›u¾?žË#;Ûá01R˜)LŒ&F
+#…‰‘j›u¾¿uÛà“Gbjä"ø­z)KîÙäÄ“F†-Ó91”«±BRX!)¬VH
++$…’Â
+ÉŸ<½ýò
+»Ü¹ÝÙ^ËC’‰b‡¤°CRØ!)¦(ìvHŠi(
+;$…’ÂÉŰⶶg |ÄÁ“Œâˆ¤pDr‘.Œ†$£!ÉhH2Šs’Â9IᜤpNR8'¹Èi 
+IFC’ѐd4$
+IFC’ѐd4$
+IF#¨)â•NÄ+ˆ!"AˆH"„ˆ!"AˆH"„ˆtÇ'¢!‚OÅ("=ˆH"*H$£\_‚Oâ‘D$8K¹>¹ADn€ã”ŠÈ
+pžR8O)œ§ÎS
+ç)…ó”ÂyJá<¥pžR8O)œ§ÎS
+ç)…ó”ÂyJá<¥pžR8O)œ§ÎS
+ç)…ó”ÂyJá<åb½<·mzëÔ¦‰Sýî¶8²!ævm§	] 5ˆª¶´ijÛ7OT“ÅÜð¤T)&j)&j)ªU
+ƒ*…A•Â JaP¥0¨RT)ªU
+ƒ*…A•Â JaPå"øT’"*I•$¬\ŸJRD%)¢’…6˜ÛÑÕl®\Tō[wm`£l™špd:9=±­ûp¸R8\¹XïÛ¶kŽgª©Üz÷o `v¥0»RLnSLnSLnSLnSLnSLnSLnSLnSLns‘® þ˜e)̲fY
+³,…Y–Â,Ka–¥˜$§˜$§˜$§˜$§˜$§˜$§˜$§˜$§˜$§˜$§˜$§˜$§˜$§˜$§˜$§˜$§˜$§˜$§˜$§˜$§˜$§˜$§˜$§˜$§˜$§˜$§˜$§˜$§˜$§"ž1ïr„3/ÁAè#„>Bè1ùrž£F‡ãDç1S:ñ¾(¢^C½ñXw»J¬#bLÔÄ:±ELˆ†˜áÆPlÅÆPlÅÆPlÅÆPlÅÆPlÅÆPlÅÆPlÅÆPlÅÆPlÅÆPlÅÆPlÅÆPlÅÆPkµÆPkµÆPkµÆPkµÆPkµÆPkµÆPkµÆPkµÆ<sÅ<sż2yeë1¼óÈóÈóÈóÈí1Üí1Üí1Üí1Üí1œÃ¥1\Ã¥1\Ù1\Õ1\Õ1\Õ1\ÃŽ1Õˆ˜jDL5"¦Sˆ¡ÈŠŒ©¼ÇTÞc*ï1¼ËqÔÅãxàÅ^ŒáÅ^ŒáÅ^ŒáÅ^ŒáÅ^ŒáÅ^ŒáÅ^ŒáÅ^ŒáÅ^ŒáÅ^ŒáÅ^ŒáÅ^ŒáÅ^ŒáÅ^ŒáÅ^ŒáÅ^ŒáÅ^ŒáÅ^ŒáÅþ‹á¿þ‹á¿þ‹yŠyŠ©ŽÅðb/Æðb/Æðb/Æðb/Æðb/Æðb/Æðb/Æðb/ÆðaÜåCž{bž{bž{bž{bž{bž{bêç1õó˜úyLý<æ¹'æ¹3@…ÉŸÂäÏEöG*“Êcþ§0÷S˜û)Ìýæ~
+s?…¹Ÿ‹ìŸT³?…ÙŸÂìÏÅîþé/©zLª“ªkRu^hôB£½Ð¤êÝÐè†F74º¡IÕ5©ºFG4:¢ÑŽhtD£#ÑèˆFG4:¢ÑŽhtD£#ÑèˆFG4:¢ÑŽhtD£#ÑèˆFG4:¢ÑŽhRužhôD£'=Ñè‰FO4z¢ÑžhôD£'=Ñè‰FO4z¢ÑžhôD£'=Ñè‰FO4z¢ÑžhôD£'=Ñè‰FO4z¢ÑžhôD£'š\]£+š\]£/}Ñè‹F_4¹º&W×äêÝÑäêýÑèF4ú£ÑþhôGó÷´4ÕqiôH£G=Òè‘F4z¤Ñ#iôH£G=Òè‘F4z¤Ñ#iôH£G=Òè‘F4z¤Ñ#iôH£G=Òè‘F4z¤Ñ#iôH£G=Òè‘F4z¤Ñ#iôH£G=Òè‘F4z¤Ñ#iôH£G=Òäéš<]“§ktJ£SÒè”F§4:¥Ñ)NitJ£SÒè”F§4:¥Ñ)NitJ£SÒè”F§4:¥Ñ)Niòw^iôJ£W½Òè•F¯4z¥Ñ+^iôJ£W½Òè•F¯4u:MNS§ÓÔé4ï{5ÑKS§ÓÔé4u:MNóÞWóÞWóÞWS°Óì4o¯4o¯4;MÅNS±ÓTì4;MÅNS±Ó¼7Ö¼7Ö¼7ÖTë4Õ:MµNS­ÓTë4Õ:nkªušj¦Z§©ÖiÞ®iô]£ï}×è»Fß5ú®)ÕiJušR¦T§Ñþkô_£ÿý×è¿Fÿ5ú¯Ñþkô_£ÿý×è¿Fÿ5ú_GÏëèyý®£ßuô¡Ž>Ôá…:¼PçzÖ¹žu®gëYçzÖ¹žu®gëYç<Õéw~7ÈKä%
+ò’ùDƒ|¢A>Ñ ŸhO4È'ä
+ò‰ùDƒ|¢A>Ñ ŸhO4È'ä
+ò‰ùDýnÀ«
+xµ¯6àÕ¼Ú€Wœ¿ç¯¯6àÕ¼Ú€Wðj^mÀ«
+xµ¯6àÕ¼Ú€Wðj^mÀ«
+xµ¯6àÕ¼Ú€Wðj^mÀ«
+xµ¯6àÕ¼Ú€Wð]¾kÀw
+ø®ß5à»|×€ïð]¾kÀw
+ø®ß5ÿ
+ÆQ“ñÓdü4?MòÚ&ym“¼¶É}Ðä>h’×6Ék›cÝý6‰-bB4Äì8›ŒÃ&ã°É8l2›ŒÃ&ã°É8l2›ŒÃ&ã°É8l’¯6ÉW›ä«MòÕùL‹|¦E>ÓŠº¿¯CbDŒ‰šX'6ˆMbvÜ-ò’yI‹¼¤E^‚¹‘ÂÜHan¤07R˜)̍æF
+s#…¹‘ÂÜHan¤07R˜)̍æF
+s#…¹‘ÂÜHan¤07R˜)̍æF
+s#…¹‘ÂÜHan¤07R˜)̍æF
+s#…¹‘ÂÜHan¤07R˜)̍æF
+s#…¹‘ÂÜHan¤07r|òZLŽ&G
+“#…É‘ÂäHar¤09R˜¹Øù^-Éò%Q«Ä1$Fʨ‰ubƒØ$¶ˆ	ÑÁOÀOÀOÀOÀOÀOÀOÀOÀOÀOÀOÀOÀOÀOÀOÀOÀ7àð
+ø|¾߀oÀ7àð
+ø|¾߀oÀ·à[ð-ø|¾ß‚oÁ·à[ð-ø|¾ß‚Ÿå–¿U`™VjUƃ–]ÝFÙu·ð«…O-|jáSŸZøÎÂw¾³ð…ï\Lˆ†˜áÁw¾³ð…ï\d¿Šý*ö«Øoö|îbØ 6‰-"ø
+|~ü*øUð«àWÁ¯‚_¿
+nÜ*¸Up«àVÁ«S§Æþkì¿Æ~kWý×؍ý×؍ý×8®Z‡ã
+9ŽœœãÁÁÁÁÁÁÁÁÁcÜ4#Ž/âø"ð#ð#ð#ð#ð#ð#ð#ð#ð#ð#ð#ð#ð#ðcðcðcðcðcðcðcðcðcðcðcðcðcðcðcðcð5ø|Í÷5ß×|_ó}Í÷5߯óý:߯Óÿ:ý¯Óÿ:ý¯óý:ßOèw®áxŸ[ð-ø–ïجYLÖ,&k“5‹ÉšÅdÍb²f1Y³˜¬YLÖ,&k“5‹ÉšÅdÍb²f1Y³˜œYLÎ,&g“3‹	•Å„ÊbBe1¡²˜PY̧,æSó)‹ù”Å|Êb>e1Ÿ²˜OY̧\¤_\WþQË?ªâ"¸\ÍyÑàkð5ø|ÆæSó)‹ù”Å|Êb>e1Ÿ²˜OY̧,æSó)‹ù”Å|Êb>e1Ÿ²˜OY̧,æS–¼Åò·XþñË?Þb1§²˜SYÌ©,æTs*‹9•ÅœÊbNe1§²˜SYÌ©,æTs*‹9•ÅœÊbNe1§²˜SYÌ©,æTs*‹9•ÅœÊbNe1§²˜SYÌ©,æTs*‹9•ÅœÊbNe1§²˜SYÌ©,æTs*‹9•ÅœÊbNe1§²˜SYÌ©,æTs*‹9•ÅœÊbNe1§²˜SYÌ©,æTs*‹9•ÅœÊbNe1§²˜SYÌ©,æTs*‹9•ÅœÊbNe1§²˜SYÌ©,æTs*‹9•ÅœÊbNe1§²˜SYÌ©,æTs*‹9•ÅœÊbNe1§r|¾ß‚oÁ·à[ð-ø|¾^4ð 6›‹M‡Å¦ÃŤ´«mí:–™•…jjY³e!΂ÎB=,4³ÐÊ&¶d†'3<™áÉOfx2ÓžÌðd†'3<™áÉOfx2ÓžÌðT†§2<•á©Oex*ÃSžÊðT†§2<•á©Oex*ÃSžÊðª^5ëfxÕ¯šáU3¼j†WÍðª^5ëfxÕ¯šáU3¼j†WÍðj^-ëexµ¯–áÕ2¼Z†WËðj^-ëexµ¯–áÕ2¼Z†WËðÂ/ÌðÂ/ÌðÂ/ÌðÂ^˜X˜X˜Q˜Q˜Q˜Q˜J˜J˜J˜J˜J˜C˜u7̺fÝ
+³î†5vÖén˜u7Ìúfý³~†Y?CúÆYȺfÝ
+3 0
+3 0
+3 0Š2 (ë|”áE^”áE^”áE^”áE^”áE^#Ûg#Ûg#Ûg#Ûg#Ûg#Ûg#Ûg#Ûg#Ûg#Ûg#Ûgƒ}fÇÐÈŽ¡‘C#;†f†×Ìðš^3ÃkfxÍ¯™á53¼f†×Ìðš^3ÃkfxÍ¯™á53¼V†×ÊðZ^+Ãkex­¯•áµ2¼V†×ÊðZ^+Ãkex­¯•áµ2¼$ÃK2¼$ÃK:x±QY`«–…0Qâ,è,Ô³ÐÈB³<¹õ·vnœ˜ÙÞ›àâ4ÚþžÁÓ['§‚×´+­éٍ»¶µg#­vÛ~ÇÅcŽ
+×oœ˜›
+šmË¡r2³sbãÆ©í;ûÏÞµ}óÄì®m['víìKfvmØ:Õ±­LÌNl˜ÞxÉäL{~ygU¹õ¹îFµ½1ß¸db ßð’‰nÓZç{í^D‘Y¿izûÄ‘éíÓ;ll›šœÎ62×Ìmmæ6Ž6‹l~o6¿7›kÖlä~ã6Ú¿é£o³ÓÛ7g¿ˆ[¹¹£_qGw'ùfI¾Y’k¦óG óG óG U¾™Ê7Sùfa¾Y˜oæ4>šùóÑÌÎG÷mžØtɆ‰Ù³}óú‰­;¶Û¨H¯wjëÔÜ\¶]OºÛ}4¦ÝOõZ{›õ8÷y»Ì­åÚËÜz÷óê+¾ÛÊ}ÞÝ«‘û¼»õŠõ±Üz•õèë2·>–[¯ç¾Û]—mÜʆىÎ4ƒ™Á¹í“•ÐzvEïÊòðÎÆú­3Û7Ï휘ížôüUkæ¯Z3ÕZù{¢•¿'Zù{¢ž
+•`ëÑN$ÀP{£ëõÛf¶ÏlžØ±…OêG?Y8ÝžØ?õöü%n{Ƽb»žßn»\¿|»Õìn‹É3Á9í®d¶ë78r霷(”í>7·ž]S÷Y{;÷¹É­[Ú˜\›Z®M{ÝvŽ:n5Žž¯öÆ‘SÔÞ8ròb××\³f¾Y3߬•oÖÊ7kå›%ùfI¾Y’ofòÍL¾™É7³ùf6ß,w×ÆÉX®™Û8ÚÌmäšÉ|3™o&óÍT¾™Ê7SùfÕ|³j¾Y5߬–oVË7«å›…ùfa¾Y˜oå›EùfQ¾Yœoç›Åùf:ßLç›é|³z¾Y=߬žo–oI~¼%ùñ–äÇ[’oI~¼%ùñ–äÇ[’oI~¼%ùñ–äÇ[’oI~¼%ùñ–äÇ[’oI~¼™üx3ùñfòãÍäǛɏ7“o&?ÞL~¼™üx3ùñfòãÍäǛɏ7“o&?ÞL~¼™üx3ùñfòãÍäǛɏ7“o&?ÞL6ÞÊotùÃĆ™Ë;ÜמlÒ¦DÖen]åÖ«¹õZn=Ì­G¹õøã×b³~rzbcÆﺱ~C;›kó1Ÿ4~Òù²‘zý®PzÞC…kÆ_z!‡FÄÿZ+~¥ÄÿÜ/þÇ€ø—T<ŸŠÿ¾Vür@ü·ýâ¹µâïm¿HųûÅÏ÷‹ƒ‡Ä?ÿ5ÿtºøYS<“ŠTâ§OŸüt¿xÚ5|ú|ñ“ŸüäøñiâG©ø‡Tü½ÿeDüp¿ø»Tüçañ·W‹|EüM*þÚ5ÿë«ÅSO¾&xêjñäkÄ_}YðW©øþ2ñSñ½Tüe*þC*¾»_<ñÁ©øÎ
+ñm%OÅ7¯
+¾¹\|c±8Š¿HÅ×Sñç©øZ*þ,_MÅŸ¦âÑT|%‰‡¯_<œŠ‡¾ü•à¡T|ùÁ‹ƒ/E|ùšâƒ²6xðâñ—ăãÅ?Y+¾”Š?Þ/HÅSq*¾Šû&ÅçĽŸ[Ü;)>wÏpð¹µâžañY×éÏŸIŧSñ©T|rXܝŠO|| ø„›w¹&wíw¦â£Ô|4Ô/>ò‡K‚LŠ?üð`ð‡KćÅTćRqÇþÁ©Ø¿@ìs_Ú·_Ü~Û@pûIâ¶ñÁCâÖ|%¸5¸åâà_¸¦xËï¯
+n¹XÜ2^üýµâý©¸ù}냛Sñ¾õâ½î0ßÛ7ÝØÜ4"nì7¸n˜×»3uýZqݐø½T¼çÚ¡à=©¸vH¼;פbo*Æ_z×ÕWïJÅÕW‹«&ÅžFƒ=kÅ;Sqe*®»ûÅå±+;‰¹CböxÇ!±#3©ØžŠ­«ÅÛSqÙP3¸ì|1Š-W‹ÍncS*¦R1™Š©ØŠ‰ÓÅ¥‡ÄÛúÅÅ©xk*~']X	.:$.¬ˆ·,^¼E‰7§âMùMMqÁ¨8ßÎ?V¼qD¼áÜEÁRñú>ñÛ©xÝkƒ×¥âµƒâ·RqžûÍy©8÷œÁàÜEâœãçŠ³ˆ×¤Âîf¿HRÑ*¼*hͯˆÆyb<g¥âÌßοyÆÂà7‡Å¯^œ1þÒBñêâôTÔS¡ã‘@q4Ä#"
+û‚hP„}¢¶BT%û•
+Ù'ÆNëƈÓúÄúW•ƒõƒâUeqª§üÆÚà”Iñ'¿±Vœ<,N:qmpRCœ¸V¬[Û¬[(Öö‰R±&Ç/«Ýq®«&ÅÊCb…;„“â¸b¹;ƒËS±ìXÚKÜÆ’T;)Žqgê˜T,v_Z¼DŒ¦b$‹R1ì§bÈëPS^-NŠT,è_,HE¿kÝ¿Xô¥¢2(Ê©èuÍzSÑ3"J“¢è~Yt#`T¸OE*
+n»ð*á
+/þCþäuï÷Oùÿá?ïÿu~íÇyoSº¿¸)¸Û^·t¼¿ø‚WzÁï
+öŠÞiž<(½Á'>yplÑÐ꡵«‡Vo*z/Ήe/þ4Ýß3ð«_ΖNö|ïþô—…=¥ao/,}È»c`A'†KÞ¢ÊÀàߝwÿ¢.|Ø«¼ô5}Ñy÷/ì¬{ãú¢§ÕÁ¡zݼxpÌ/FG†Y³®Ö†ãžë¯}Ïuwíßwû¥áLÏ|æ™ôÕ?ýgÿ›ÿð÷þƒïn‡7ÓÁ[9¾°§×ã{}ÃÅE½žÃ;ãù£û]T]<<:RèY
+‡µÂÝn—ûößuÝ{ÞS>˜žñ÷ÿžþÏ?õ¿ñÌ3þ×=Ïí÷GžWüà©v÷ÆG›â®bá®àÝ=Þ]åÞ•¥åÂ[é÷
+>Éøí#8xàEw‚N;¨žoŸ¢óοð¢ãý/-‹…‹ãÕCA¸¶:´ztuꟛþ?õmÿÜᄃ8wöCgzêžÞ~‡wnðœ·Üûðø‰K–.Ç.
+ŠÞP›ƒº}Á]#·½»
+Þ`¥àW–3(JÇ
+¾xÞý£œwÿâÞzÞý#¼ÕõE´Ï¬»V_ûÚÐpþ<ßéOÏ`ðóžàçCÇÔ]ÏÆÕ›ŠoÞÜóÎâ;ƒË—Ý°¤§è———Ëwz——v-[¶sùµÞõK®]zí²k—Æû̲¡‹½‹×ºC#/>ÓkëÖ_ê	Ïô«ª8:Rê)yþM…?ñ·æü÷W'^ûéë/ù«+Þùä…?óGÌ[—¤ÏßsÏ=»ý[OßvÇ9»÷7[OHõ³¯ÿî'w—þsçØ?òÒOŠsîØOòvŒ¯÷FU®/¯¼~Õ¢»FÜU¾­´ü®U·­¹µtóè'N^¼|‘'F–,_·jp¹YY.Ü>‹/è}¹sôîðÝe?¦sÝ>ýüÓÿñÙÁÎâÎɘ?^ž\1±rbÕäê¢w±¿Â)®>~݉á
+w(îqmÝ)~˜­¼ì ÅY·~"ý^ú³·=vÙßÚöÕÇþä}îûè'>tþWgç¿èýþßkWøÀ¹ví_Hµÿ–ßÛ÷©Ý;æöœ°îK«VýÇ®úœçî¯A϶¸1Up£êëã
+oÈ÷ŠA±Ð¾ÆþPET¼¡‚'D¥Ç]øRûÃò¨ô¶ÑôDÏ>_¼»”{{JEǁ^9¨¸xà˜öE>ãé'º#;z‘„Þlu0[¿èøVõûþÅãÍ…þž…½½½Ë½ÞÍ^¹Çï-”D¹¸Ø_Rx³aáõý›ý-…+üËW‰Ùâîž+zoðo,\Óÿ¡ÂˆýÅcÜh(û«ýª¿F¬k
+¦ÏÖ¦{~Z¨ÿÆ×ÜøT0px‰¸ïÐ)þÞôÝîïq7¾ºcïõ†¼U^k|Ío_¥¼oøÝþ¾ÊçWõõ-YxËK–¯/{ˇ‹«Ý]«^t·SûZv³»®ƒÏÖÇXx¼;
+huv™Ž¬¬]­·Çbçš®Yíßæ'Ÿø£?úDú¨Êí·Þz{ÚW(>sèš«ö}2}î…Ã?+<~ø‡7¼ïæë
+›Ò3gfß±ãS_ûâMYõ}ëoݘœ{é'Á‰nL.ñ¢ñ¥>6p_eߐÿ1ï¾â¾cnºyiÏ’ÞØÈàÒvÛÄøôó¾ýgǾ´pÙÊe×½ÑõþšUÞРçzÙXœ¸é™k_òÒçüAß»ö™M—ýü÷Òϧïô¯÷Ï¿þçÁ†§.y[úXú7éÒÇÞvÉ_}¶§ï®„çk¼örç1¸Ÿó¸~|ÔÛWvgp°·0Xñ‚%”·¼\vêð^vÒÜíÿÀ¥‹:'¬šuaíêN<Ù÷o{Þý•éÒï¤M‡ó€¿?Ý’¾>N{a·¬¿Þ?Õ?æSéé5é»Òý{µ}ßçðûÚè¥}ÅÂ>ïݽûŠŸ¯~¹G,÷ŠýíSòäG®×Ø+8ôEŽ;†øy\Üxiá±Ãõ¯^<3xêžÔÞsø'÷t÷ïßæö/¼õ_ö¾PðÝ‹í›|°Í´^‡iÛ{v·ñ‚±`<x}pipKpgPºxQuhÍãßþvðÔ¡SØOi¥ÛO¿÷gã51ÔÓÛSò½í 
+åJÙÝp•r³ÒS½ÂûBoŸ»³ÜmTJË‹gVèw/¶G^ûþ:pP¹µ#7Xç¶Ên-wKíhßRoíÛ©\¨ŒFzUÖÖõ¬êYWYU©õ„•éÂU…==WV®)\Ûsmå…ÅE¿O,ò—‰5þ©âÄÞ“Ê5ÿñæÞ‹ÊS½—•/ï½Ò]Ó÷‹}þŠw›-Zín´¡5C¾èk÷_å_íïõ_õtïwÒ½‚§^ì¿:tJ°òE¯èúQ÷UwìeïÊñ=î°ýcè¦;Xw¨AÉï),/F=î(+ÙQvÊUc,þ¼ýãŽme_ûØÆ¢‚î9»ðšžé¦žk
+=%¿\õ—–¬Né-þ…¥)ºteé:ÿ½¥}þ‡Kwö
+vzí†ÛÐêN—û¤Ï¾Ìõö…•Å:¥ø£V2–/pý\äTï‹ã¡ã6Q)
+‰¢†ŠEÑ,½QQÝWÙ·àÝ}Å $†/,*K–‡Î©,ï/×áˆí5”÷3Ú<\o/G/º÷ÀøŠý½s‘x8Âë)Žz£þHa±8¦¸Ö[ë¯-¬'–Öõ¬ë]W^µ"ò£‚õmaK°«¸+ؽèÆҍ=*}¨gåÅé8fѱÞ?ÅäÐêUmêqÇœQ‘xcÏ™ßýÁŸû¾+þîÛþ·|ïÅ÷¾)ýà¾},<ºøïJ·ø{÷o8|SðÔ_ÿÍû)üöágoxÏ{®k_»œ~ÜñΉ޻ÆÏXÐ_è+¬X¹¢·\è©V®\Ѭô­XYõ½ÑÜ~쾡â>ïöµŽNZQé[¹¬Ç;~Ù’Wõ,9þ¤Á¿;à.íÓNò:çe°#„Ž ¿yd(´Ï
+Áœ…Ž.~påɧüÛ'‹Œ¿Ž/Ž,^ù¯ˆäiŽÂÚ	Uµ¸xöÜ—|òwê?þOéÓg.ûÅ5{Î~þÑ>¼çÇßöù—é¿
+îþF]sùÆ©•KNùÁƒ?ø‡±Ó¾gìïÚ~ÕÊc_õµÏ}óéuíãN<¯çSíûÕß3~N°´¸{´¸´RK+}•ÂR¿Ð×çƆ»Ýظû]ë!ÏëoV‚‚(¹±Ý×ÛßW)÷–‚¶DöõxŸ|âƶú×oà#ñˆDzûù—¥B)(TœRW†+''¸;ùÌ™A­2Vù­Âkƒfe¼rQá²Âۃ͕K+{
+{W{ƒk*ûû‚ãz¼rÁ±J±ä™çî¶b¯×ÛSöÊÅJ¥ßX*F‹£½KúVW«J«zVõ®)ŸPYÛ·j`ÕÀ…ÓEX¬c½Q¹ÞwVÿØ€õ¬na¼hÝ5ÝMÜìï/'•×öŒ\Xp¼ÑÿúM…Íb¢¸!¸´tiÏ¥½“åÉÊdßnïrOá
+±»¸3¸²teÏîÞ½Wôïíß;p}áqcñ¦àºò{ûn¸£xçÀÞÚ¾k«e¿ý¿¿¦ì¯IžðO÷ë?iÿñÝô¦4ýFúõÔÝÁÃÅgÛ?Žs=×æ›—¦ÇGÒ{g/üï³¾W(¶ùßåÁ¾Ë‹#/üMzï-·xýzčï»K#N?–{z|‰x¸aùácGo^øв;–xÃï9¶¿Ô»Ôvîk—»¶¹þéçüæ³c^ºâšw­NÉ:É™šn0úíÍÉYaŸ£k†ªâ§Ÿþà?Ýþ9üû§qÏÞK/=±ç‹§?üpá´ï<óÌwÜOፓé£é¯ÜòèÄäg\o
+Þ;\¿ö÷x#Þ2—…žà8¡|}ïÁègýàá~ÿ+Ç><üPÿÍË—zG{½ó
+ÃÍòŽÌèäÙmýº“c>ßI2ÇO>ë¸ÇÝuÜ÷Ž{î¸à,ï,ÿ¬ÂY£g-Ní9­÷´ò©•oÆŸ)ÌŒÎ,+_üŽv®°ºscMÜ!õtî¿žâÞèÿî—/{lÃÆï½=}>}Ì?ùÅû=>yã‡(¼íw¾úX­vßoœêk¿â/ò[éÜñ¥û>Ú¾§qZ=éŽi‘Ëa–ˆ²'üÒ
+Cõ?ZqRè½nA¹·ÏŽ´ÏtçDŸÑ>ÑCÃî>ùÒ¥£9ÚÎa±e§Ú­TGÛgzqqò¡«®ÚwïÃ7ÿxן³p÷áß-|ôΏ~õîÃ7/½ojòœË]·Ï;Æ;w|Qéáaïáþ‡†o>¶<¼ð
+bxÔÛ9uÙis	Âøš³–ìñö”ööìíÝ[Þ[ÙÛ·§{îÜ;´gø®%Ï-r½é^rÇ?'¶/¹·æøöŸ…¹ÛïýܾÛî½÷¶çüáôÙçþ[úHüý3?þÌϾõØ?}$ýVz0ý¹;quw~F|íqnĹ®CÞØøHÉqÅPŸ¸aà¡ò£=•’»]­K¢œê»³âºxàÉ'ÚõK¯_tç¢öYɈñè)9Fœ»òœS?òé‡>ý‘ë­_.¾4<ô¯~ÀMƒ ƒ»ÁÿËà£îZ¸Q?ô.Ÿuùÿ£½7Tú¹½ÞÁáöµ8ã€û_‘¹u'Ê|a4Kx]ú4²øÕþ¨ëáК°:äïö÷¤×7÷§úÔÇo¸!øhúõ[ßuÓë>|ç÷—Þ⟙Ýs÷¹ëqañR‡=â½z|ùÑ‘psÅtä¡~7Fú^çF„m_˜zvÜO«#Ãafôkíá°È)zvÜʚЍÕã×ù÷µ‡Ãçz¨õÅ]þ-ÿ/ýG
+Ÿ:<qç_½»°ç…»îÝ´ñ9ñ™v/ŽÿW—ßñ®ÅòUÿÿþ{)¬/\_ø¾M–M,O5Ë׃3³¥´ü‹ê,ïê,?{åÒsBÏåå>·ì]?¿Ì/óËü2¿Ì/óËü2¿Ì/óËü2¿Ì/óËü2¿Ì/óËü2¿Ì/óËü2¿Ì/óËü2¿Ì/óËü2¿Ì/óËü2¿Ì/óËüòï/^ö·5ýNñD;øKÝOÉûwÿľ~VFF¿¬Á	kםx’‹§ºŸ1éþ#÷Çéü¶éyÆóÎî6~Ã=ïMÞ[.ü÷qÿ¯ýWôžèüYlŸŸçv½ô’ûsUûO·]ôŽž€î}^ÿ+>ñF½ÅÞ¿ýß	ÞZow¢wÛ§Ç<ÉZèE¬þò¯¶ÏŸ×9…^î,ùï
+Þ;ñMîç-Þ…>{þ¼à×ôæåÿõ¾|ó9ï¹—^öA6f¼âw½MÝŸÂûÜ`ú5?b¥w¿û¹û×ýÇx?r?ûÝÏGþ~®ôƒ«½ÇƒýÞ\éd^þSøÝ—ÿ”žqŸ¿øŠŸ[ÜψwCþ§çŸ¼ä×ý½—~Þýqíéþzïø÷~‚a×î§nq®÷Hçg»ßÝ×9×…ÓôÅû¿ðÈ%Ïøoevqþâñ<؍ÿó¯¯[0[~SþÊýo#úZô
 endstream
 endobj
-7209 0 obj
-2337
-endobj
-7196 0 obj <<
+7195 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [305.796 611.895 361.607 623.584]
+/Rect [305.796 611.815 361.607 623.504]
 /Subtype /Link
 /A << /S /GoTo /D (browsing1) >>
 >> endobj
-7201 0 obj <<
-/D [7199 0 R /XYZ 151.701 685.529 null]
+7200 0 obj <<
+/D [7198 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5197 0 obj <<
-/D [7199 0 R /XYZ 151.701 600.157 null]
+/D [7198 0 R /XYZ 151.701 599.997 null]
 >> endobj
-7202 0 obj <<
-/D [7199 0 R /XYZ 151.701 583.287 null]
+7201 0 obj <<
+/D [7198 0 R /XYZ 151.701 583.127 null]
 >> endobj
-7198 0 obj <<
+7197 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R >>
-/XObject << /Im28 7197 0 R >>
+/XObject << /Im28 7196 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7216 0 obj <<
+7214 0 obj <<
 /Length 2897      
 /Filter /FlateDecode
 >>
@@ -30043,49 +30627,49 @@
 ª_ŠxFð¡9õ=x[â#¹î…ûBsGƒ\5Dÿm&¬ƒ
 endstream
 endobj
-7215 0 obj <<
+7213 0 obj <<
 /Type /Page
-/Contents 7216 0 R
-/Resources 7214 0 R
+/Contents 7214 0 R
+/Resources 7212 0 R
 /MediaBox [0 0 612 792]
-/Parent 7179 0 R
-/Annots [ 7210 0 R 7211 0 R 7212 0 R ]
+/Parent 7178 0 R
+/Annots [ 7208 0 R 7209 0 R 7210 0 R ]
 >> endobj
-7210 0 obj <<
+7208 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [339.467 521.739 390.98 534.641]
 /Subtype /Link
 /A << /S /GoTo /D (browsubnet) >>
 >> endobj
-7211 0 obj <<
+7209 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.977 347.198 283.658 356.766]
 /Subtype /Link
 /A << /S /GoTo /D (brsbex) >>
 >> endobj
-7212 0 obj <<
+7210 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [243.502 190.253 294.888 199.821]
 /Subtype /Link
 /A << /S /GoTo /D (brsbex) >>
 >> endobj
-7217 0 obj <<
-/D [7215 0 R /XYZ 100.892 685.529 null]
+7215 0 obj <<
+/D [7213 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5313 0 obj <<
-/D [7215 0 R /XYZ 100.892 482.553 null]
+/D [7213 0 R /XYZ 100.892 482.553 null]
 >> endobj
-7218 0 obj <<
-/D [7215 0 R /XYZ 100.892 465.683 null]
+7216 0 obj <<
+/D [7213 0 R /XYZ 100.892 465.683 null]
 >> endobj
-7214 0 obj <<
+7212 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F52 3737 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7223 0 obj <<
+7221 0 obj <<
 /Length 2820      
 /Filter /FlateDecode
 >>
@@ -30114,48 +30698,48 @@
 3fÔ>c&d¨€6ªƒ–õàúü¿pŸŠÜ)øÙzTÅä‘6òqŒÉjiâ"Ê•Ù aI?Vë;0p0i»ènžÒowëøö9µ1¨j4o–¼WÌdzz¸‚ªc"½}•94ZΨÝñX19½Ì¦ÿŒÚ Ä
 endstream
 endobj
-7222 0 obj <<
+7220 0 obj <<
 /Type /Page
-/Contents 7223 0 R
-/Resources 7221 0 R
+/Contents 7221 0 R
+/Resources 7219 0 R
 /MediaBox [0 0 612 792]
-/Parent 7226 0 R
-/Annots [ 7213 0 R 7220 0 R ]
+/Parent 7224 0 R
+/Annots [ 7211 0 R 7218 0 R ]
 >> endobj
-7213 0 obj <<
+7211 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.008 468.661 297.394 480.35]
 /Subtype /Link
 /A << /S /GoTo /D (brsex2) >>
 >> endobj
-7220 0 obj <<
+7218 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [266.614 174.753 318.001 186.443]
 /Subtype /Link
 /A << /S /GoTo /D (brsex3) >>
 >> endobj
-7224 0 obj <<
-/D [7222 0 R /XYZ 151.701 685.529 null]
+7222 0 obj <<
+/D [7220 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5314 0 obj <<
-/D [7222 0 R /XYZ 151.701 660.623 null]
+/D [7220 0 R /XYZ 151.701 660.623 null]
 >> endobj
-7219 0 obj <<
-/D [7222 0 R /XYZ 151.701 643.753 null]
+7217 0 obj <<
+/D [7220 0 R /XYZ 151.701 643.753 null]
 >> endobj
 5315 0 obj <<
-/D [7222 0 R /XYZ 151.701 456.488 null]
+/D [7220 0 R /XYZ 151.701 456.488 null]
 >> endobj
-7225 0 obj <<
-/D [7222 0 R /XYZ 151.701 439.618 null]
+7223 0 obj <<
+/D [7220 0 R /XYZ 151.701 439.618 null]
 >> endobj
-7221 0 obj <<
+7219 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7230 0 obj <<
+7228 0 obj <<
 /Length 2357      
 /Filter /FlateDecode
 >>
@@ -30177,48 +30761,48 @@
 Ÿíõÿ+o™G
 endstream
 endobj
-7229 0 obj <<
+7227 0 obj <<
 /Type /Page
-/Contents 7230 0 R
-/Resources 7228 0 R
+/Contents 7228 0 R
+/Resources 7226 0 R
 /MediaBox [0 0 612 792]
-/Parent 7226 0 R
+/Parent 7224 0 R
 >> endobj
-7231 0 obj <<
-/D [7229 0 R /XYZ 100.892 685.529 null]
+7229 0 obj <<
+/D [7227 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5316 0 obj <<
-/D [7229 0 R /XYZ 100.892 660.623 null]
+/D [7227 0 R /XYZ 100.892 660.623 null]
 >> endobj
-7227 0 obj <<
-/D [7229 0 R /XYZ 100.892 643.753 null]
+7225 0 obj <<
+/D [7227 0 R /XYZ 100.892 643.753 null]
 >> endobj
-7232 0 obj <<
-/D [7229 0 R /XYZ 100.892 470.127 null]
+7230 0 obj <<
+/D [7227 0 R /XYZ 100.892 470.127 null]
 >> endobj
-7233 0 obj <<
-/D [7229 0 R /XYZ 100.892 421.959 null]
+7231 0 obj <<
+/D [7227 0 R /XYZ 100.892 421.959 null]
 >> endobj
-7234 0 obj <<
-/D [7229 0 R /XYZ 100.892 387.341 null]
+7232 0 obj <<
+/D [7227 0 R /XYZ 100.892 387.341 null]
 >> endobj
 754 0 obj <<
-/D [7229 0 R /XYZ 100.892 309.55 null]
+/D [7227 0 R /XYZ 100.892 309.55 null]
 >> endobj
-7235 0 obj <<
-/D [7229 0 R /XYZ 100.892 280.027 null]
+7233 0 obj <<
+/D [7227 0 R /XYZ 100.892 280.027 null]
 >> endobj
 758 0 obj <<
-/D [7229 0 R /XYZ 100.892 215.065 null]
+/D [7227 0 R /XYZ 100.892 215.065 null]
 >> endobj
-7236 0 obj <<
-/D [7229 0 R /XYZ 100.892 188.157 null]
+7234 0 obj <<
+/D [7227 0 R /XYZ 100.892 188.157 null]
 >> endobj
-7228 0 obj <<
+7226 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7239 0 obj <<
+7237 0 obj <<
 /Length 1970      
 /Filter /FlateDecode
 >>
@@ -30240,39 +30824,39 @@
 î#chtÄê(³àñ´ôÅýgý48ó3—} ¶Ù<"¤ô½Ø–FâÔêÿ(„ŸKByæ€h_§FÞðÊ„úW#Qo]:ÎRÎÐC^êñ qÐx‚a·©ŽÁͬ4ºïýÓêßâ¸è
 endstream
 endobj
-7238 0 obj <<
+7236 0 obj <<
 /Type /Page
-/Contents 7239 0 R
-/Resources 7237 0 R
+/Contents 7237 0 R
+/Resources 7235 0 R
 /MediaBox [0 0 612 792]
-/Parent 7226 0 R
+/Parent 7224 0 R
 >> endobj
-7240 0 obj <<
-/D [7238 0 R /XYZ 151.701 685.529 null]
+7238 0 obj <<
+/D [7236 0 R /XYZ 151.701 685.529 null]
 >> endobj
 762 0 obj <<
-/D [7238 0 R /XYZ 151.701 524.933 null]
+/D [7236 0 R /XYZ 151.701 524.933 null]
 >> endobj
-7241 0 obj <<
-/D [7238 0 R /XYZ 151.701 501.407 null]
+7239 0 obj <<
+/D [7236 0 R /XYZ 151.701 501.407 null]
 >> endobj
 766 0 obj <<
-/D [7238 0 R /XYZ 151.701 396.724 null]
+/D [7236 0 R /XYZ 151.701 396.724 null]
 >> endobj
-7242 0 obj <<
-/D [7238 0 R /XYZ 151.701 372.591 null]
+7240 0 obj <<
+/D [7236 0 R /XYZ 151.701 372.591 null]
 >> endobj
 770 0 obj <<
-/D [7238 0 R /XYZ 151.701 235.863 null]
+/D [7236 0 R /XYZ 151.701 235.863 null]
 >> endobj
-7243 0 obj <<
-/D [7238 0 R /XYZ 151.701 207.284 null]
+7241 0 obj <<
+/D [7236 0 R /XYZ 151.701 207.284 null]
 >> endobj
-7237 0 obj <<
+7235 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R /F53 3738 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7247 0 obj <<
+7245 0 obj <<
 /Length 2105      
 /Filter /FlateDecode
 >>
@@ -30295,35 +30879,35 @@
 ÿAÆ>ñŠø=ÿ;ï¸[”sÏœƒïÔÎâ=Òðˆ[R:	å ý› ä0#›‰¿“k¬0Ÿá"¤§t´$BhŽ"‚í‚Ïê,ow§?xyk[Ã/¹%àý÷ÝÓÍÿ [ÆUå
 endstream
 endobj
-7246 0 obj <<
+7244 0 obj <<
 /Type /Page
-/Contents 7247 0 R
-/Resources 7245 0 R
+/Contents 7245 0 R
+/Resources 7243 0 R
 /MediaBox [0 0 612 792]
-/Parent 7226 0 R
-/Annots [ 7244 0 R ]
+/Parent 7224 0 R
+/Annots [ 7242 0 R ]
 >> endobj
-7244 0 obj <<
+7242 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [368.775 218.8 436.828 230.49]
 /Subtype /Link
 /A << /S /GoTo /D (adsdnstech) >>
 >> endobj
-7248 0 obj <<
-/D [7246 0 R /XYZ 100.892 685.529 null]
+7246 0 obj <<
+/D [7244 0 R /XYZ 100.892 685.529 null]
 >> endobj
 774 0 obj <<
-/D [7246 0 R /XYZ 100.892 206.434 null]
+/D [7244 0 R /XYZ 100.892 206.434 null]
 >> endobj
-7249 0 obj <<
-/D [7246 0 R /XYZ 100.892 166.532 null]
+7247 0 obj <<
+/D [7244 0 R /XYZ 100.892 166.532 null]
 >> endobj
-7245 0 obj <<
+7243 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7252 0 obj <<
+7250 0 obj <<
 /Length 2153      
 /Filter /FlateDecode
 >>
@@ -30344,22 +30928,22 @@
 0ñ­ç	ŽI Àáܼ%g¼/ãé&çQ™£~ZFܹ`ÂR¯;nF†ó— DèÝíÇÁG”“4ç¤\ƒê¾ï	¾hEV]i=¡zæÕ\<ÿþHæ°sÓ:Qªž%[g:à9vI¹'ú <|zGTÃ>™þ±³BWˆ9ˆû˦B¼Úòˆ!¾FÒØŽ_‡sêuŠÖ/l*)×sÃ’JÒ¦¶FÌŒxÎÀr`ÅŽ3FAXCDM¶< ӝ§T×Ð dPS‘É×	’d'ƏpÔµ£ïòä«‘fçO'vÜ~?ŽØK±gA"6,bL4ÔŸ^u\ üø<í«ÄŠ»6èiò%iù8ÿbú/Ô6e÷
 endstream
 endobj
-7251 0 obj <<
+7249 0 obj <<
 /Type /Page
-/Contents 7252 0 R
-/Resources 7250 0 R
+/Contents 7250 0 R
+/Resources 7248 0 R
 /MediaBox [0 0 612 792]
-/Parent 7226 0 R
+/Parent 7224 0 R
 >> endobj
-7253 0 obj <<
-/D [7251 0 R /XYZ 151.701 685.529 null]
+7251 0 obj <<
+/D [7249 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7250 0 obj <<
+7248 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7256 0 obj <<
+7254 0 obj <<
 /Length 1579      
 /Filter /FlateDecode
 >>
@@ -30386,27 +30970,27 @@
 ¥ì’»qš±©©ŒÌÿÇ¡êEguUÀ_P‘Á°Æái·ó<;ÛÄÿÓÑ
 endstream
 endobj
-7255 0 obj <<
+7253 0 obj <<
 /Type /Page
-/Contents 7256 0 R
-/Resources 7254 0 R
+/Contents 7254 0 R
+/Resources 7252 0 R
 /MediaBox [0 0 612 792]
-/Parent 7226 0 R
+/Parent 7224 0 R
 >> endobj
-7257 0 obj <<
-/D [7255 0 R /XYZ 100.892 685.529 null]
+7255 0 obj <<
+/D [7253 0 R /XYZ 100.892 685.529 null]
 >> endobj
 778 0 obj <<
-/D [7255 0 R /XYZ 100.892 660.623 null]
+/D [7253 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3779 0 obj <<
-/D [7255 0 R /XYZ 100.892 462.473 null]
+/D [7253 0 R /XYZ 100.892 462.473 null]
 >> endobj
-7254 0 obj <<
+7252 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7261 0 obj <<
+7259 0 obj <<
 /Length 1914      
 /Filter /FlateDecode
 >>
@@ -30436,41 +31020,41 @@
 K²#r&9CÕX*~Åtc/ˆtã婪ýÌ2‚\Ï#à0òËÓ~†8\œ±á:ó§úO»àÐ×
 endstream
 endobj
-7260 0 obj <<
+7258 0 obj <<
 /Type /Page
-/Contents 7261 0 R
-/Resources 7259 0 R
+/Contents 7259 0 R
+/Resources 7257 0 R
 /MediaBox [0 0 612 792]
-/Parent 7265 0 R
-/Annots [ 7258 0 R ]
+/Parent 7263 0 R
+/Annots [ 7256 0 R ]
 >> endobj
-7258 0 obj <<
+7256 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [448.045 425.419 508.322 437.108]
 /Subtype /Link
 /A << /S /GoTo /D (passdbtech) >>
 >> endobj
-7262 0 obj <<
-/D [7260 0 R /XYZ 151.701 685.529 null]
+7260 0 obj <<
+/D [7258 0 R /XYZ 151.701 685.529 null]
 >> endobj
 782 0 obj <<
-/D [7260 0 R /XYZ 151.701 660.623 null]
+/D [7258 0 R /XYZ 151.701 660.623 null]
 >> endobj
-7263 0 obj <<
-/D [7260 0 R /XYZ 151.701 641.209 null]
+7261 0 obj <<
+/D [7258 0 R /XYZ 151.701 641.209 null]
 >> endobj
 786 0 obj <<
-/D [7260 0 R /XYZ 151.701 576.785 null]
+/D [7258 0 R /XYZ 151.701 576.785 null]
 >> endobj
-7264 0 obj <<
-/D [7260 0 R /XYZ 151.701 546.001 null]
+7262 0 obj <<
+/D [7258 0 R /XYZ 151.701 546.001 null]
 >> endobj
-7259 0 obj <<
+7257 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7269 0 obj <<
+7267 0 obj <<
 /Length 1768      
 /Filter /FlateDecode
 >>
@@ -30493,27 +31077,27 @@
 þÃ܁—²Àõ¬SÂÿÞߺ5è5.”?ŸósÔ4ÌÇ4¾Þ®þ§2¢½
 endstream
 endobj
-7268 0 obj <<
+7266 0 obj <<
 /Type /Page
-/Contents 7269 0 R
-/Resources 7267 0 R
+/Contents 7267 0 R
+/Resources 7265 0 R
 /MediaBox [0 0 612 792]
-/Parent 7265 0 R
+/Parent 7263 0 R
 >> endobj
-7270 0 obj <<
-/D [7268 0 R /XYZ 100.892 685.529 null]
+7268 0 obj <<
+/D [7266 0 R /XYZ 100.892 685.529 null]
 >> endobj
 790 0 obj <<
-/D [7268 0 R /XYZ 100.892 660.623 null]
+/D [7266 0 R /XYZ 100.892 660.623 null]
 >> endobj
-7271 0 obj <<
-/D [7268 0 R /XYZ 100.892 641.703 null]
+7269 0 obj <<
+/D [7266 0 R /XYZ 100.892 641.703 null]
 >> endobj
-7267 0 obj <<
+7265 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7278 0 obj <<
+7276 0 obj <<
 /Length 2230      
 /Filter /FlateDecode
 >>
@@ -30533,48 +31117,48 @@
 	ËiÅ/.H2ª<$WÀ–¨ZÆh^64ŸD#ÍõO¦¥âøƒžNÿ· Xޝ8BÏ,‹á¼lÑD39/ RÚª„ŠÏí#熝üûˆ¨SË©­6åA¨¨=¸NÌG]ïeC¾ügB‚­ÿÀcÏiü/ˆÏ)Œ?/_ã÷‡íêÿ÷ÒÊ
 endstream
 endobj
-7277 0 obj <<
+7275 0 obj <<
 /Type /Page
-/Contents 7278 0 R
-/Resources 7276 0 R
+/Contents 7276 0 R
+/Resources 7274 0 R
 /MediaBox [0 0 612 792]
-/Parent 7265 0 R
-/Annots [ 7273 0 R 7274 0 R ]
+/Parent 7263 0 R
+/Annots [ 7271 0 R 7272 0 R ]
 >> endobj
-7273 0 obj <<
+7271 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [376.086 301.862 432.094 314.763]
 /Subtype /Link
 /A << /S /GoTo /D (idmap-sid2uid) >>
 >> endobj
-7274 0 obj <<
+7272 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [455.344 301.862 511.352 314.763]
 /Subtype /Link
 /A << /S /GoTo /D (idmap-uid2sid) >>
 >> endobj
-7279 0 obj <<
-/D [7277 0 R /XYZ 151.701 685.529 null]
+7277 0 obj <<
+/D [7275 0 R /XYZ 151.701 685.529 null]
 >> endobj
 794 0 obj <<
-/D [7277 0 R /XYZ 151.701 660.623 null]
+/D [7275 0 R /XYZ 151.701 660.623 null]
 >> endobj
-7266 0 obj <<
-/D [7277 0 R /XYZ 151.701 641.209 null]
+7264 0 obj <<
+/D [7275 0 R /XYZ 151.701 641.209 null]
 >> endobj
 798 0 obj <<
-/D [7277 0 R /XYZ 151.701 275.269 null]
+/D [7275 0 R /XYZ 151.701 275.269 null]
 >> endobj
-7280 0 obj <<
-/D [7277 0 R /XYZ 151.701 248.372 null]
+7278 0 obj <<
+/D [7275 0 R /XYZ 151.701 248.372 null]
 >> endobj
-7276 0 obj <<
+7274 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7285 0 obj <<
+7283 0 obj <<
 /Length 1390      
 /Filter /FlateDecode
 >>
@@ -30593,357 +31177,1146 @@
 žx1í»2zèëÞø?áôÍ‚/kzö*cèŸçèÂóV]lºü=átú®Þ=@\àÇÍï~lÎÃúÔßQÛtê©paµ£uèe=MÖª†¦ƒ¼x+Pÿ%¨”Æù&k5X§lãŸÆº~ÿŸ`Ï©w×!ÚüÔ‡p2\â@ôö÷cú‰dXå$S »Ò4Âÿtú
 endstream
 endobj
-7284 0 obj <<
+7282 0 obj <<
 /Type /Page
-/Contents 7285 0 R
-/Resources 7283 0 R
+/Contents 7283 0 R
+/Resources 7281 0 R
 /MediaBox [0 0 612 792]
-/Parent 7265 0 R
+/Parent 7263 0 R
 >> endobj
-7272 0 obj <<
+7270 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-HOWTO/images/idmap-sid2uid.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 7287 0 R
-/BBox [0 0 919 554]
+/PTEX.InfoDict 7285 0 R
+/BBox [0 0 954 554]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 7288 0 R
->>/Font << /R9 7289 0 R/R11 7290 0 R>>
+/R7 7286 0 R
+>>/Font << /R8 7287 0 R/R10 7288 0 R>>
 >>
-/Length 7291 0 R
+/Length 7289 0 R
 /Filter /FlateDecode
 >>
 stream
-xœåXMo7½ï¯à±=„%‡~œ
-nŠ^Ú&rQô(’íº°l'Šá¿ß7Ü%¹Ú¸¶*´§@펇óù8ÔGe´UF>Ó÷f7|÷.ª«ýP¤êÓÕ`Õõà\:eÅÆm’Ú5‰÷ÁèäÕÍp9PÔ–,«Çiñ»Z¸qÒÞ6ÙEÞé€r>²vi¶n¹JLÀ[¤¾|€+ΰÌ´/û„ä´o(ÑèèšÄ%o5“boƒý•’ÕÔfhëYgRMÁäqÝazÝt#&ÉÍ@98m¸I(eÒ›ÊöÞ6m’Ѫ¦ ½ðsƒÈ|½¾¯z-ìø<}mvêõ9*>«Z»ç—ÃØ	V9uˆ²µÓ”“:ß
-߬~:ûöü¯á‡óá-j-$fQb™%–‡à6•Zkì`Âím2š½%ê$¾Wˆ_=K4˜±?™ÔHÿ_šÿ<9R¼ŽÛÒÆÄ©_>©³»Ýúúöû±¥¡0="{anÖåQ¨U—qÌÚeAe¬C£wTÃÄ´sÉ´Jöû'W-³:äHs_½#DTt²æ0VÅûæã2ô…˼Î\à(%<Ïás¨Â‹A³e©‚,ºÄ{ƒši-–t´#-Îý{¢›EÔFqð绞CÏVGV6  Ð».1èþÀc@!‡ìŽV®²ŽJXJ
-ä+ú²å¢—iŸSNÚzûäÛÀ*«QÃUr3„`“ıJBH¹°É)µw'6%ÐJ•8ÎÙ ª‹„D÷iú¾ivTÉ
-$†Ú&ሼj:ë{ßµJª]UCµ{é«Pÿ×íÿ©¤Î6‡>פ^Úà·Cöw&qÒÏda
-’-ÈN­Ža-vÊ¥u½“Ó$J!O9§b(3N6`%zSõÌ{ë¿×}ú	à
-k‹„ágc[¢õæîáv[Èÿ¦Ah3‘²Šsã|Û8ô•õÐ.Ñ,Ò9ñ,œÜ
-ÌpÉç™K—G¡VMæÈ£x¤#8J¨ÂU1˜3tL<“ÔU…ÈaŽ†ÆXujÕduG lDùùªbº
-ËU–J\~#­ä"iÇ32pÉsaFÎ`ÄŠM€N,gLí¹úÞ»²JjßN
-j[×:T+:%–Æ®"ë…ø«ÊúÞ7­’jVÕPÍ^z*Tø5{òtçÁóRö3&|³¾¾™Qa?t]–ù·=¢é5ÉX!ó:Â`‰ð³â5cNùtQÚöEЩæ³%m\F¸„RÌÿu½ßŸ½n‹‘7Ho¨Le8 #†'L²^Vå‘wG¶Š¸Þƒ_5Tõ©£œA[‡ñÆzjgä×C’ÆORTY–‘E„0÷YŒj"/Ñìñ#à§Æ52ÈWsÑdÆ1ñêábÿ¹°8ø*Tß«¶d¾ß}¸Gà·)—*ÜŸ·öë]Ñ€dy¡¼ƒßo¶ëû
-@Ø0‹?ùûûÍÝî~ý¹çwŠBLZx5É)³{,²û"zÕãš²•a¹ƒª¤äöÔLW #yŸ¡&Ɂ®gP3]Î'ùßd†š$ºžA­ž=D"³$Ý&–ÓZ!QF‰ƒžîUxüdrÊ·Er¾†ñæùûõí‡ëÛmË~ëJa 1¹:L®ÆaV@%ã†Þ(F¿Œ9ÕÒW¸Ôb M’ŒÅÔÇÑÔíûëín}¯QþbuËjPÒDŒ¾(üâÙRþÒÏ4VV5¼Jkúüª)ÄŽu™,‘¹ÂJä0̏—É#@]S
-cÙ,‡ã¡ªçP«Yáúë„]kíº„qúår¥`ázBRVt¾þLØ77
+xœåWMo7½ï¯Øc{0˯’§Aš¢—¶‰T=²d§.$Û‰bøï÷
+wI®6®½ÚSàƒ–ãÇá|>?öZ™^Ëßø»=tß½ý‡c—¥ý§sÌ*¦ž´c¥c¨ïY«èû}wÝÙ Œ5Ô?Žßý¸hãªs–¢ò¦Ê&(띊(ç)'ûæ»Ä|!¶ý—â†&-:ˆ,+ŸÏá蔯(
+A«àªÄEoÙž¼aÅmi£Q–ûmW%Æ“J®¯
+FË	ãrÛŒ%ûÎ&vJS•Ø˜¬²¡ª¬ëzh•VUÅ號[Dæëõ}Õêøcg†ïñg{è_­Qí8w¬Ýõu7té	Šƒí”M±_ºoV?½þvýW÷ú{‹ZãHäJ,‘3–äƒ}Ä¡“–ñÖÁ„Û›¨y	JPQ|/'¾z’há,z3ª‘ÿ¿4ÿyv¤,{4Žc«´9R¿<|ê_ß67·ß׈Í
+…éÙã©é׋P«&£”K‚J؇Fo¨Š	‰•ã©dÜ%çý“«XZ£8;õÕ;‹ˆ" #â¡*þ¸:Vç¡Ï\æUJˆ)áiŸCe^dEfÅ2ȁ÷59Ð"Z,
+„,ÝÏ7ý{gÑmEÔFvðç»–COFê
+£ Ð‡&Ñè~ü[‚BؾYCElãÌéžÀî0£í›ïz™÷)¦¨ŒïɏÎâ˜eŠ¸Hö³‰È"aŽ)Ó,I©­QŠÁyÛ®H,HÎŒõxFYo«E²‡ÄÀÐ* €¼j[U–u;´HŠY£‚bõÜSaþ¯Ùûs5.6¹Ð”£çøí”úŽ”„ñ“5 |DN“jÃX(ÎÔ”rßzÏ´‘"1rI…\Ä.iP’}SôLë¿×}>ý{MÊ _¸ÁÉ'ÎÑzs÷p»ËÌÿÍ ´Iځ?qq¯w•@/Œ‡v‰f–NYgæä¡#‚K~êöõ"Ԫʜõ*é
+*ž 
+C†
+‘&’²+³ø,¬Bа@›«– VUVNÊ”ŸŸ 
+¦Ù0ß5ra®Äù/Òj]°ÊÑ„
+œFòO¨ÀiÌWœª˜o˜Òseݺ²HJß
+¥¯Ë
+Š
+¬$]$Ö/´_t–u;µHŠ]EC±{î«Pá×íÿÙãOytœá›ÍÍ~†íÎuIæßú!lˆ¾WVÆ
+™×c-þÝ'E˜S>]åÎ}t®õd¬2N#”#)æÿº9_¿ª°ÁȃiÃk›§2ܐÃ&Y/»ÒÐÇa<o—àWU|j(§ÑÙ<¼X— VpFþà:Géý(5•d›5ˆPÀ?1ª‰<G³=ÄÀύk áC–÷ƒÒØøááêø99(‹5Šï¢nŸ—÷üãN ùQ…·â	âóîò¸9d
+H–àôÿûÝæ¾ 6/ù|
+ð~{w¸ß|n	À[%Üå¦Àý=
+fé}½jÉÈ´Ü@E’“» 5ÑÅVKâ'¨Qr¢ëÔD—óQEž¢Fɉ®gP«g/’@$Y7‘äÆî‘€ ãÄIS·2\ ?›œ’Æ3¥·rǎϱßon/onw5ûµyÀ*™LÀìê0»j‡y¥ŒGXf+±zè\[/ð®Å4ÀBÖ¨Þlìã`ìîýÍî°¹Wè ±›å½ŠÚF%pú¬ö³WÖ䐖¶CmË‹ä´ª—àWõV±äHåù¹ËÄdúá=¹ Ô4•86Áu¥B:Qõj5©$¼€l©¤C“î¿”Ÿ$ôcŸ’o»¿263
 endstream
 endobj
-7287 0 obj
+7285 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610111328)
-/ModDate (D:20080610111328)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090959-05'00')
+/ModDate (D:20080528090959-05'00')
 >>
 endobj
-7288 0 obj
+7286 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-7289 0 obj
+7287 0 obj
 <<
-/BaseFont /DHDIMV#2BLuxiSans-Bold
-/FontDescriptor 7292 0 R
+/BaseFont /RKQGWV#2BDejaVuSans-Bold
+/FontDescriptor 7290 0 R
 /Type /Font
 /FirstChar 32
 /LastChar 119
-/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 611 0 0 722 0 722 0 611 0 0 278 0 0 0 0 0 778 667 0 0 667 0 722 0 944 0 0 0 0 0 0 0 556 0 556 611 556 611 556 0 611 0 278 0 0 278 889 611 611 611 0 389 556 333 611 0 778]
+/Widths [ 348 0 0 0 0 0 0 0 0 0 0 0 0 0 380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 580 0 0 762 0 830 0 683 0 0 372 0 0 0 0 0 850 733 0 0 720 0 812 0 1103 0 0 0 0 0 0 0 500 0 675 716 593 716 678 0 716 0 343 0 0 343 1042 712 687 716 0 493 595 478 712 0 924]
 /Encoding /WinAnsiEncoding
-/Subtype /Type1
+/Subtype /TrueType
 >>
 endobj
-7290 0 obj
+7288 0 obj
 <<
-/BaseFont /YALMGL#2BLuxiSans
-/FontDescriptor 7293 0 R
+/BaseFont /MSTPMV#2BDejaVuSans
+/FontDescriptor 7291 0 R
 /Type /Font
 /FirstChar 78
 /LastChar 115
-/Widths [ 600 0 0 0 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 0 0 600 0 0 0 600]
+/Widths [ 748 0 0 0 0 0 0 0 0 0 0 611 0 0 0 0 0 0 0 0 0 0 0 615 0 0 0 0 0 0 0 0 0 612 0 0 0 521]
 /Encoding /WinAnsiEncoding
-/Subtype /Type1
+/Subtype /TrueType
 >>
 endobj
-7291 0 obj
-1367
+7289 0 obj
+1357
 endobj
-7292 0 obj
+7290 0 obj
 <<
 /Type /FontDescriptor
-/FontName /DHDIMV#2BLuxiSans-Bold
-/FontBBox [ -22 -218 932 744]
+/FontName /RKQGWV#2BDejaVuSans-Bold
+/FontBBox [ 0 -235 1071 759]
 /Flags 4
-/Ascent 744
-/CapHeight 744
-/Descent -218
+/Ascent 759
+/CapHeight 759
+/Descent -235
 /ItalicAngle 0
-/StemV 139
-/MissingWidth 278
-/CharSet (/n/c/B/o/d/p/e/period/O/D/underscore/P/r/g/F/s/t/i/S/u/I/question/U/w/l/a/m/b/W/space)
-/FontFile3 7294 0 R
+/StemV 160
+/MissingWidth 600
+/FontFile2 7292 0 R
 >>
 endobj
-7293 0 obj
+7291 0 obj
 <<
 /Type /FontDescriptor
-/FontName /YALMGL#2BLuxiSans
-/FontBBox [ 0 -16 562 563]
-/Flags 5
-/Ascent 563
-/CapHeight 563
-/Descent -16
+/FontName /MSTPMV#2BDejaVuSans
+/FontBBox [ -1 -176 649 729]
+/Flags 4
+/Ascent 729
+/CapHeight 729
+/Descent -176
 /ItalicAngle 0
-/StemV 84
-/AvgWidth 600
-/MaxWidth 600
+/StemV 97
 /MissingWidth 600
-/CharSet (/o/Y/N/e/s)
-/FontFile3 7295 0 R
+/FontFile2 7293 0 R
 >>
 endobj
-7294 0 obj
+7292 0 obj
 <<
-/Subtype /Type1C
 /Filter /FlateDecode
-/Length 7296 0 R
+/Length1 86112
+/Length 34941
 >>
 stream
-xœ]UyTGïffzZ.ƝiFAˆ·€ÊS†KEÀE‘s™!\‚q]Á®oLp9^q\TPñ ž®hWHb|k0끊~…Ù­žf³t¿ª¯ª~õûŽßW4%6£hš¶^’™­	Ñ¥»zéSâŒÁƘ	cE™X÷Î}`“d,µäH¯²!Kññ1æþ6pW_‡œ”ˆ¦³w,Ö§æ¤i“2øÉaË#œ¦LqùÝ2ÝÃÃ_—óa…÷ŽO×$êxdŧèSµñºŒyüb²;%EË'¦ä¤&¥ó1qqñqÆcá1)ñëyµ&E“šªÏâ'/vâgL›6Ý•üf,Õh×e¦óFöüÞÈÿŠ¢ºX/}\j|°wHZ¢:=Cšé¶!%F».‚ÿdÍŠ
-¦¼©	TåC-£ÔÔ4Ê‘šN…R~Ô$jFP³¨pÊ™šC­¤‚(/j)µ˜r§hj8µâ)%	 %¦|©/i+:œ>ofc¶Áì'ÑTQšèŒØE.þYâ Y$¹ ÁìfNH=¥%Òÿ°óÙìr6Žm„rkP‰à
-ºb›àa
-ðvòšÁÀ
-È´K*ïºUs¾½ùTr ?$–ߤ`áߎ¥^‘©Á±
-yÍ}©µÐxú4ð"¡s¹0jæ?±bñl×qx	V÷N€Y`÷¸¸ÃJ<šÉñѧ†!Ö{í­þúƒµG*”…§Ê«Ð
-t<µÐ›µH@ ƒeäó ™M8C)LÀÖ0ÑNÞßcÝ̏èzaµ¡Úpâ&jD·ãnxÔÞ¾xâ<º‰.§5¬;³Ö°²Ð“Ü}Ÿg,ãÀ‘]Xx‚N­Än–‰Á—‘÷ß9›´4>ÙK‰}ˆ^T7÷Oàªp‘Ã*Lc¬îÃÌ÷W@Ã"œü{*ó±„뺬§ŠðY¸`eç«Wõ÷”& a®%ÂT³ŠmN´-ƨnœlÐb0IWW•ùŠœÝ¼J‰PÊë"­šV‡6t©¬²Åæ‚÷Ý%õD§(_Ÿ¨Žç/j;;ðéøF2Öø»"IÊ0ÿ~'±T2§ƒkõíˆÛƒ5¸ß˼—xY)ïªOô;àà‹¢tš`ÌõCà‘jµOT{__m‡¼!ã-Œï…áoi¡²¸ü´íCW·^Þ|6ñÙ¬&LÎS]°ûãEOƁ+X=ëxS®Ä
-fãÚ¸´•(­?²áÔæâm_ï¨gwõrz*ÏÝD•¨bc±þð†½Y»Hv‹2`¤°FÒUà,¨ÀY$ŒÈá‘›&È/À'Á‘k0m˜ø­ºÅ·'ù5zz¾iioiûÇô
-“ð2 3°cnÅxÄæã‘¿?	ÏÀNsUØ[Íë#¤\ô•r¨Œ„tÑ]¤„n‹ºlá,"Ôy¬®©±½ü9	qÊóe‘Mê2,&Þ‘uçÁ>Žs‚äú|<Ï
-%n**­¤(õñA<H!sÌÀ臿ÂdP¹?À.J|÷½œ“½¼ô!iᢄ¤y$¾öDmö R›ÜðQiURyGϹs=_Üù·"Œ—nÍ߆¶£@£õbå†7Dg€uÿê'ÉlJ>l{;y·àBPÜ¥ò§·bVŸrÀ#§`ž‡ç?Âb°o9[ÔtEé%
-ˆŒö	O*=·E™ü˜BÝí…¤æ?2q{räJ‚s`མâ:¯xMrZéç忺íÙË‹ßµ+M}.)’þÞèx´qpdø6±ý²Á&§MíÀúÁ̦–0 ,3ºÚ'ì̸ÀÌìÀŽ$Îc稱(ñPJQ–²(ûHÞ•0/b”¼·rKÁ–ÌÑÉquû
-r›}~èó“d;ó6ÿ9ÜÑ]t£°ª¢ªâë˨u&Õx—`ŸúQq¹ûQ){ª¢¸N!ïkCߤçG²ÖðPðë¥ó1ΉúÕŸtàŸ˜951¿”—íÞ_¦x&ýóŽ­;s›w¨V	—HOƒr’¨íÅ·ˆ³mÆÓ±&y3ÅhÅ„øĐŠÈ K"Kº&ÀU˜ ^_p¨mSubUäÕ¹'I‰âÅ*<Kn¬€ÉzåË
-/²
-zb¿44ašãò÷·)°Š9€§½KI*B@ôˆ”‘tY3v8¦ÄL)_’R‚ì¯ÕUvýÚ»hÂÔ_,¦Ù™ôoêØÙÂY[Á@h=–Êk£c|ƒµß*à¡l)Å­¾ ½Sw¼¹J!ÏrnÀ»˜n1¦Q3 å°óPêŒÊì+6Uw¹Q˜ùdu0O:3:ÆÕ5úü#…‡Éy”.«[ÓÕõé#ôuk¨­«.mD=¬'%ú6ÅŽlÁU0HH½yZϬ%˜7ŽfGŽ¸$0‘y(Ⱥe’¬†âmdÅVüPAI¦—3Abs‚xc—áÒŽþõ+t‚…)˜-¼ŽUXµ ËòàÀì»~ôz<'1'ï³M[•Ù¹©·„æŽâs"V g´úp|Y*+¯Y_~)»Ö¡];VWÏʳ‘~wîáÏXpa°'h9yÍÜØÕÞ«teUçK‹µûöî*ÜooýÎêãÃÙLH-úìäuÍÿóxv·ž©j¾t2u­š,˜6ÒþÀ›˜òJQ|ZvҡجÕ+Xy]›ôÿ_’¦/I‰Ž16D¯uá§/¥µ; ÷†ƒÛÌï¯(üOû#?•¦	c¡@
-æø2×Qç3É)ÒGí½ªýÕ3S³ç=ð-Dh%x&ƒéÁjòîTKðdK/`‰pÁh‡uïµU°ZÁz°Õ˜-cÂ@EC2¨HaՐöñ²Z¸‹-¹Á§já©ñY%›„0§oÁ˜qƉ	¬æPë¾CÍç{[W£YãøOší§
-Y«H^³9j§1íb¶w×ÞlElsÍŸ¢ÿ’¥œï›½{üŠWfÅàYu”ssgæ,-aÜAK+Šú/»N
+xœì½	xÅö>\½wWïÝ#²3ì aÉLwB@–,„’°£2I&$™˜LXEÄTTqCTDÄ
+DEETT\AED\ÁþÝ='$ úóªwùžçcdªººªÞsNU÷œ"¹!]Œ(4<7¿g ¹ˆœbç{TQe¸:þœ=Íùú²hJÌßÿ‰DÞiÙ‰YPR]Z9žœ|!ª—Ó¶ª´bzI¼¿ê´™Ë"áâÌÓó1¼‹ÓšTæ4(¶ØàôwÆ£e•±i€·Ñùª¨ˆ…ãÏí?F¨Ë¢Êð´êæć¢ÝVU¸2RÓzÉçُP?»:Z›øþ
+2B©czá`uM¤ú‚ð²}ˆà#Ä­ Jˆ Q‚6¢/œ)û¡eè'ª
+"O‰Óê–«ˆ´ßy_èôœMÏ%
+œ²’^ŽHçýEô6“$‚¨ïÔ:Òˉh=Ú댞M\Ífƹ½=yݹ3›‰ƒL
+™‚ÆЕt?z-=›^ëô¨£KèÙhóBn§—Ò3é×è™hŒ+‘íþuå@Kˆ!D{´„\Bd͈rÚäÈ\B –}™­ÌV´í †;=W¡©$&¶‡ˆžÄb­3ê0:L´qžlÒ&û‰£íÔ£%ha8OÑ6Gî½èª¥YÑfٍف6£Ý觡Ié|·¢º3;œÏA´Mr,³› ™¬kK—GÐ~byy„hOÎÇ Ú8Ö<—ÚFO¤·ÐW:oë$¤ÚPiÎ÷·³ƒXâH±›-!¦;ýÜÏLg?¹™\çèøÚåè堓ș䴋XM¬w$Fh.±šžÈÒ-Ðv	=pmƒ¶“Û{÷ì1ÍgÑašE©lb"½ÒµêÈl"Ñ–Âh1„›ãh‚¨d4ùœ·/ˆÙÿ8½x¶ZDw¦nsd'ÉëíFLGÛȪ-õ>‰uh!Z‡j‘3ÕéqŽehŠ$P‚_[CvÌ*^3pÄÿ‹cÛvO8åѯqþ5høyºÝñãÃÇÐ-˜±k˜–k¨ŽüºcûÝ¿÷rw÷„¡ÃÇø×]B0mhb†Ó˜?Æ©ºON³ÓÊðÞ¹¨k˜ŽÎY×ø‹Êüó´yíûÌÓ"}º#çls•ÇZ!¤µý±æh@Ý涜ôg¼ÛâBå nh’œ½¨¡È9áÌ×Ü
+§t^s¢ÿ‰q‹‰ Ô	${ N"š8
+u
+i¤ê´Sχ:ƒ$rÔY¤’÷CG:ùÔEwB]6nír9Ôdõ] u
+‰}wB]GtßC"AŽ@½<t·N &ÄV¨“ˆ'¾:…üÄ1¨ÓÈO&BAMÉb¨³¨59ê<jGn€ºˆúßB]î؇
+u•õíu
+5éûÔuÄ÷ý¥£(ªFÓQ
+*G¥¨ŐuAE¨«SP/çtj…N?JsúÄœ}szGPU¢§5U9ý{8µTTá|ü(ïÄ\µÞSÄ)#Θ)Îw±Óÿ	Ô¤¨Òk’3¦ÊéíÊvÆükˆNm’3nªsz9}ÃÞloDØÓÈïÌRå|W;}
+y˝~~g|ÔA{ï0BéÑêé5å¥e1—¢®þ@¯^AátZy¬6V	W&ø³ªŠzøS+*üyn¯Z^¤6R3%RÜÿfh’;´ <¥rR´ªÔŸ.û‘IáQuÎÙ	W•Fjýᚈ¿¼Ê_]WXQ^ä/ŽV†Ë«ÉNV1ßSÐq
+08?\å<¤9ÊT8*¡´hEñï
+ñ7tk4Øÿ—‡ŒòÖ¢Ö±`Ô³oÀY‘€³¯Ð¨HMmy´Êèž<sý¼ÝO×¶ûé$)ñ&o€lÏzYJ¢UŽ=cÎò o“Äœ%îƒz:Ÿb˜cŠ3GglÔ)kœexóÕx¤‡3oăÊb±ê>={;“N©ëQ­«)Š”DkJ#=ª"ÎëÌFÔo¨úMýÛ£ã¾s7iÄÛèGÇ(šêôu·õ?³YÝ™9o¦;}ʼ‘åλjO¯˜w0\«Õx#Ü£äÎ:åKžªGÃa¬;é0þž6ØùœN÷ø–;µÆVû­[ÀÎøëü§\Í?ïàN¿Þ
+:—;o°W‹y-î.¬ôl=Ùi‹:+ðÉâj6Ü›¯Ò›­áp•{2•yï" W©‡R«ž ë_­8Z|Å÷{‚'WÔ[ý*o|5à8BÔ™5{¬vAØ›#nisÆ<)NÝOE^?wÆg¯ŸÁí—=¾—#Þùï½vvI;oåܱÅ^YëÉUäŒ	ƒ~Ø;Eέôf‰yoêíSâÔ*à$u9!c‚ëÓ\ùcÎþï~±Á&nKµwjŠ„"ot½4Åž1o¯:ocÞÛ8þ„8ÍEŽduÞ,q›Lõö@™ç•b`™J¯­±Fõ:Ôœ´+ãÒÖy6Lh´:n½Ò[ÏøZãF¤Öð;z$œÐ³§çAüÞÌñ󟻬zòêÿ±Öõ–‹K[}bGÇ<¹v]ƒFS={Tþ)„úÓPâyõ*Ð0Ò±Øûv1¼ÒµÄ$§G‘7_¼Oýú•xL÷lõ+Täa{—ƒ¤}¼ÓY Ò…£žghXƒÆ¾¨Á¿õUNÿœ†Ú“úÖŸ•‹5öÇù=ÃžäØóÍ'ﵸ5â\þƒõŒz,臵¯ôÊÿñgÖ"æ1‘ˬaШÇI–ú£±®M¦·ÄÑ]›—x2ÃNªðöi͉–¸¤®M‹­yã]WÏ aË=ŸQá=á{’ºëUÕÈ¥'ñj©Þ‡†½Ýß»õ§Ú§öÿÔ©^J4ì°°·F^‚“qNµÇédK€õ®ðÆ•ÿŽ7Ç'V§Æó³aϯ4Ì[ßR{bGÖŸ—SÙ#~.âiQ4ÕÓªØßî4|Øî„Þ§ŽÀλz¶m×h—ÅÏLö)üRè÷h#YëàÔï“)ÎÛòÓX,⤤1à·wµó‰³WØó¨‘#¯{\æú|Ú“Ræyx¿WÖ‚Œo'ýÞ>©÷u§óÝÅTyëÞØ^§³*nd¹ÆkøWÏj-Äï~Фþ´ÕŸ$7r¨8{ÔÀˆ“g¬övôdç»V,·î®Â'¼ê¿ÓSý¾V…pFbÀ‡%',5…<œ\”ã<¹8¹ÎSíÄ‘yÞ»,§ÍïÄqyΛQÎS†Óšá­Kª÷Æ}ßÎ;£º;c.éÍŸ#Ïùvçë´¸sû½g÷i¨Ó?Ç™ËBc<Œ3[¾#Y®Swçæ´f;eú¹#ҝ–‘γ[„Ü(4Ž—ãŒ*ðÎŽ;Ε%.iÓÞ€z²TYb½dÃœ§<gþÁð6Õ™;˛ϕ?Á‹ÜzÈ·\ž7»k#wfwÎtG¢lïÉmé”Ý~ùž=S=ãÒæx:d:ï㺄<	â+—(Ý)‡;ØnAŽ\ž\¤è™à­£«O†7ÞEêõŠK–«ìÖf鶌ËáÚÔ	ä|Oÿlçã÷ô/pZ
+¼µIu毟·~ïòfpåÆž5Fzú¥zvÈõÒ¼~®]{fŸØqyV%ݳ—»n®äRªg‘üÓjR?[ãÕ9ÝîÀ'yú…<Ke{½ó;†œþY'Zâû1ËÓ5lŸ3¾ïã{"»‘uÓ=Ý•á †`O¥z¶;YwF{ò7h_TøNod³†Õρխ—§ÀC.8UF{g1äõJõÖ:ÿÄÉôÎï0|ä‰ÖàFÂþÌ=!ÙÉö­?GõýþŒïˆÏU}ò
+fxû)$Ì?axüóÆ}WÈáµ"/ωðÛ'3w㨱!mw&4òµ#¸äõ­<¥_Ck<[ŠsVC®Ó8v;]†]ŸÇcùú¨·!úˆûîxNÔ8ê-öâóxX{"*‰zq`ôDd2Õ{ÛÀéÕpw=)Ïs‘Ã÷'œÀªç¢†¹âqeØ‹\´ÚÓXó÷
+ÿ&3¬öø>Ž2Õ«Ç 2qõ«ƒ¾nûŒS²áúûŸß®ÿ´kP¯Ëé"‡Æö¯ñÖ»r©rÏÂn<Ùæ­AõyYƒM\ÄïÝ*OYõ†ÝçÎ֝z«àÚ ´‘äÅž­1ŠßṘØóWõw\ÿý[§ú‚ûé>Ÿttjäõﻧ½òÿ‡ïƒðŸº:9’/j$SÃ]G}Ï?wƒzºü_»Wòÿæ^	ÿÿ÷Jî•nþ¿y¯„ObØÿÞ½>M¶ö¿p¯„O{¯Ô Ñæ^	ÿÁ}Áæ^	£õ^©á_þÉ{¥†óvò½Òï±ïïß.Åóóx$ñ¿v»„ÑÉ·K§¿ÝøÏÜ.á?°®¿‘ÿ·o™°·Ç~Íüço™ðÿð->å–©!×ýOÞ2áÿó–Éÿ»eÂÿÂ-“ÿßvË„=ŒrfâI·vªóþ?ww„O»æÿ­»#ü›»#ÿíîÿîÝQÃпÿîÿwG4ï¿÷î¨Þ³þ>£üöÆÿ…ŸÆ·4ÿäþ[7>¿ÍÙþڍntãóG÷ÿÄ
+Mì7óD
+7
+ØÃqŸz ”éý€–ûsmîOƝøa:—ÚHÄ_©ˆNíÚÃÿ'~
+®‡PÅôê²Zyeu´&)ö—ÔD+ý©5‘)ðC`õÞOÝÕÅê®1Æ
+è£"5a\´?º‡»ÿáüÛòûÓ?è?¹¼‡ý±špq¤2\3Ù-9uŒ‡Gj*Ëk½Ÿ¡+¯õ—Ej"ViM¸ÊQ=ÁÑÝQËæX¬¦4’àEýáªéþêHM­3 Zs,Vî˜ ì/r„ÆNÏXY¤ÞNEEÑÊj§»Û!VæÌîX9RUëX¯g’v]ÉŠýáÚÚhQyØÁÃÅÑ¢ºÊHU,så))¯p©‹;£7ÀŸ-‰MuÌß®«'IM¤º&Z\Wñ¦).w+/¬‹E\ðIœe.ª¨+v%™Z+‹ÖÅa*ËÈE¨‰›Ò™¶®Öé望ௌ¸ZcoƒÔ–%4ÂHp1{FküµgœÞ厨 þ)Юpδծ¡c8n:hj™³±~3À]†’ºš*0â
+,Žúk£	þÚºÂI‘¢˜ÛâêW­p6›«PQ´ª¸ÜÕ£¶ÆÎtáÂ蔈§A|yœØUј³µñVwUªv@ü¿¶,\Q#`5G甄OÒ3Zåì‹e´&rZµý±éÕ‘’°Ô#.ÔÉo+ÃӝÓâ/./)w7Z¸"æl=§âL..ö4›Î= áG®ºŠp
+vŠ#µå¥Už¥ñ³êrwh¸È™¤ÖQ/Oí©Hî”Øð®8ý0¦^Ž†Ùñª*¦ûËmsìªSqoÃëëVj]CºëR<"Ξ‹Ôxƒ¦FkŠkýíNœÃv.výÜÎ=¶í<“9+“
+ç¥0âœ$wÖ:g
+\›L‰–Ÿ,2-朸ºÚ9^ኈû"®»3³[Á
+‹RŽù˵Ό‘ª“lâÝ]쯫*DÅžpq
+ÿhUk£î©ö–Í]¤°¿ÂõÎY©ïX.š.usÎaU»[õ_ÛT'A9Ë1RQâ
+58äÏÌÍ)ðççfŒNÍù³òýÃórGee„2üíRóçv	þÑYƒsGøy©9cý¹™þÔœ±þ¡Y9	þИáy¡ü|œ›çÏ6<;+ä´eå¤gÌÈÊäOsÆåäø³³†e8“äzCaª¬P¾;Ù°P^ú`ç15-+;«`lÎÌ*Èqæt„Ëó§ú‡§æd¥ÌNÍó™7<7?äÌ‘áL›“•“™ç „†…%œ‰Òs‡ÍË4¸ ÁTà4&à‚¼ÔŒÐ°Ô¼¡	~g²\Gå<¿×¥‡#¥3‡?4Êœ?85;ÛŸ–U_Jæöu­3('wXgæŽÌÉH-ÈÊÍñ§…URÓ²CqÙUÒ³S³†%ø3R‡¥rÕ©q»ÅÕi0v
+å„òR³üùÃCéYnűcV^(½ÀëéØÞ±D¶'nznN~hÄH§ÁéW‘€GyŽ©Îéždžú9Žºî<¹y'D•Jð§æeå»+’™—ëˆë®gn¦·F:öt/äu×Èmûíîpz¹£AÁŒPj¶3a¾+†Ó€Oêëì®Ð´¢HuÌÝÛp¸ã®Ñs£qß™àíÚ¸p¶ð *çàÆÛ¼ªCKÎÉòX'îÝۥㄸëõ܇³»&Š»Þâ)ÇÖº®$Zƒ£®3™Z^ët‡+£qÎó׆+0g”{Š¼^Ž¯W8ÃjOˆyҁÂõdX]Sî™ZSsœ‰?\ç´Ö”Ï ®šò4ð7hà¢48‡¸ü5‘Új‡¥Ê§D*¦÷púÖ¸\æIR^U­©Õ=óÅúÔ‡
+1©7yq4†£5¥=ü{×ߝþìïGü3qŽÇAþ¿á†8Èÿã üÛ8œ|‘7Sm=gœ&@mXð߉•üõ±þ߈•p|þm±ŽØ¿+á0VÂ
+±’ÿ/ÆJø¤¸à/ÄJø÷b%ÿŸ•p£X©ññ=)\røÜqÿT¸„!\òÿ­p	Ÿ$®—7þÓ!®ŠúÿvÈ„ÿѐ	CÈäÿë!>5dòÿ•	Ÿ6dòÿ+!.H5lH®+vêà¿áÍÿNt„ë£#ÿ߉ŽpãèÈÿ—¢#|ÚèÈÿw¢#w³žtPN>øwÿ¿øà?|ü"ðÁ^àsrìð4±úþ½ ÷pŠçw{z÷v“¿=½»³bï_õzxÿ¾Zí´ü¯…ü†=§–O.ïYî8«i=ªËª{‚ÇüK¿øéýN´÷çø,4æoˆ÷;Ô$¢Ä"ñH@‰HB2RŠ4¤#™È‡Î@MЙ¨)j†š£¨%j…Z£6Ž,mQ;Ôu@Q'ÔuA]ÑY¨J@ÝôD½P¢÷{ ²QJF½QŠcâ¾èlÔõGÐ@ïª;Ý»’ÎôþÙ#
+AC£
+óþÑc8ò¼ éè>Ac]Æ£	èt.:Mt,±
+Ý….EsÑ“hú]†®AóÑ­è^´œ Ñ<ô>šƒ¢Cè;t5º	]6£Ñ·è6tú}£eèôÚ‚V£Bg™®uì·Õ±õ‹èeôzmC¯¢/œE½Ž¶£…?ˆ®Co£·Ðgy¿B_£+uq—¿Ò±}ºÃYƒó½‹ÛZï‚vŠ³9¾t¶Ã4ÍD¢Ð:t'ºÍB£Ùh?:€ÖAÁÁ£_Ñ1B 0!:N B&B%B#t LÂGœA4!Î$š͈æDt%Z­ˆÖDÂO´%Úí‰DG¢Ñ™èBt%Î"º¡ŸÐ;DѝèAô$z‰D€aID2Ñ›H!ú OТ/q6яèO ©D‘Nd!"“D&²Ðô1„JdÈ"—NŒ òˆ|ô3ú}ŠöÄHb1šCŒ%Æã‰	Ä9ĹÄyÄD"LED1!JˆR¢Œ(GˆIÄd¢‚¨DŸ¡}D%ª‰ó‰¢–ˆuÄb*1˜NÌ f³ˆ‹ˆ‹Ñ=Älâbq)1—¸Œ¸œ¸‚¸’˜GÌ'®"®&®!××׉ˆ‰EÄMÄbâfb	q±”¸•¸¸¸ƒ¸“XFÜE,'î&î!V+‰{‰ûˆû‰UÄÄjâAb
+ñ±–x˜x„x”xŒxœXG<A¬'6‰'‰§ˆ§‰gˆMijÄfâ9âyâbñ"ññ2±•x…ØF¼J¼F¼Nl'Þ Þ$Þ"voïïïï;‰]ćÄGÄÇÄnâbñ)±—øŒØG|N|A|I|Eì'¾&߉o‰CÄwÄ÷ÄÄaâGâq”ø‰ø™ø…ø•8F'I$I‘4ɐ,É‘<)˜I‰”I…TIÔIƒ4IyÙ„<“lJ6#›“-È–d+²5Ù†ô“mÉvd{²Ù‘ìDv&»]ɳÈndٝìAö${‘‰d€’i“Id2Ù›L!û}ɳÉ~dr 9L%ÓÈt2ƒ‘™ä r0™E!‡’Ùä02‡Ì%‡“#È<2Ÿ, G’£ÈÑär,9ŽON Ï!Ï%Ï#'’a²,"‹ÉYB–’ed99‰œLV•d%«Éóɲ–Œ‘uär*9œNÎ g’’³È‹È‹ÉÙä%äòRr.yy9yy%9œO^E^M^C. ¯%¯#¯'’77’‹È›ÈÅäÍäòr)y+yy;yy'¹Œ¼‹\NÞMÞC® W’÷’÷‘÷“«ÈÈÕäƒäò!r-ù0zí&!%#'בOëÉ
+äFòIò)òiòrù,¹}€v¢]ècôúˆ|Ž|ž|ÜB¾H¾D¾Ln%_!·‘¯’¯‘¯“ÛÉ7È7É·ÈäÛä;ä»ä{äûääNrù!ùù1¹›ü„ÜC~Jî%?#÷‘Ÿ“__’_‘ûɯÉä7äAò[òùù=ùy˜ü‘<B%"&!%‘Ç)DIQM1KqO	¦DJ¢dJ¡TJ£tÊ LÊGA5¡Î¤šRͨæTª%ÕŠjMµ¡üT[ªÕžê@u¤:Q©.TWê,ª•@u§zP=©^T" ‚”EÙT•Lõ¦R¨>T_êlªÕŸ@
+¤R©4*Ê BT&5ˆLeQC¨¡T65ŒÊ¡r©áÔ*Ê§
+¨‘Ô(j45†‹n§ÆQã©	Ô9Ô¹ÔyÔD*LRET1¡J¨RªŒ*§&Q“©
+ª’ª¢¢èªš:Ÿª¡j©UGM¡¦RÓ¨éÔj&uu!5‹ºˆº˜šM]BÍ¡.¥æR—Q—SWPWRó¨ùÔUÔÕÔ5ÔêZê:êzj!uu#µˆº‰ZLÝL-¡n¡–R·R·Q·SwPwR˨»¨åÔÝÔ=Ô
+j%u/uu?µŠz€ZM=H­¡¢ÖRSPRQSë¨'¨õÔj#õ$õõ4õµ‰z–ÚL=G=O½@m¡^¤^¢^¦¶R¯PÛ¨W©×¨×©íÔÔ›Ô[Ôêmêê]ê=ê}êj'µ‹úúˆú˜ÚM}Bí¡>¥öRŸQû¨Ï©/¨/©¯¨ýÔ×Ôêê õ-uˆúŽúžú:LýH¡ŽR?Q?S¿P¿RǨã4¢	š¤)š¦š¥9š§Ó"-Ñ2­Ð*­Ñ:mÐ&í£Ï ›ÐgÒMéftsºÝ’nE·¦ÛÐ~º-ÝŽnOw ;ҝèÎtº+}ݍN »Ó=èžt/:‘ÐAÚ¢m:‰N¦{Ó)tº/}6ݏîO Ò©tNgÐ!:“D¦³è!ôP:›FçйôpzGçÓôHz=šC¥ÇÑãé	ô9ô¹ôyôD:LÒEt1¡KèRºŒ.§'Ñ“é
+º’®¢£t5}>]C×Ò1ºŽžBO¥§ÑÓéôLúúBz}}1=›¾„žC_JÏ¥/£/§¯ ¯¤çÑóé«è«ékèôµôuôõôBúúFz}½˜¾™^BßB/¥o¥o£o§ï ï¤—ÑwÑËé»é{èôJú^ú>ú~zý ½š~^C?D¯¥¦¡¥£§×ÑOÐëé
+ôFúIú)úiúzý,½™~Ž~ž~ÞB¿H¿D¿Lo¥_¡·Ñ¯Ò¯Ñ¯ÓÛé7è7é·èôÛô;ô»ô{ôûôôNzý!ýý1½›þ„ÞCJï¥?£÷ÑŸÓ_Ð_Ò_Ñûé¯éô7ôAú[úýý=ý}˜þ‘>B¥¢¦¡¥ÑÇÄÉPÍ0ËpÏfDFbdFaTFctÆ`LÆÇœÁ4aÎdš2͘æL¦%ÓŠiÍ´aüL[¦ÓžéÀtd:1™.LWæ,¦“Àtgz0=™^L"`‚ŒÅØL“ÌôfR˜>L_æl¦ÓŸÀdR™4&É`BL&3ˆÌd1C˜¡L63ŒÉar™áÌ&Ég
+˜‘Ì(f43†ËŒcÆ3˜s˜s™ó˜‰L˜)dŠ˜b&”0¥LSÎLb&3L%SÅD™jæ|¦†©ebL3…™ÊLc¦33˜™ÌÌ…Ì,æ"æbf6s	3‡¹”™Ë\Æ\Î\Á\ÉÌcæ3W1W3×0˜k™ë˜ë™…Ì
+̍Ì"æ&f1s3³„¹…YÊÜÊÜÆÜÎÜÁÜÉ,cîb–3w3÷0+˜•Ì½Ì}ÌýÌ*æf5ó ³†yˆYË<Ì<Â<Ê<Æ<άcž`Ö3˜Ì“ÌSÌÓÌ3Ì&æYf3óó<ó³…y‘y‰y™ÙʼÂlc^e^c^g¶3o0o2o1;˜·™w˜w™÷˜÷™˜Ì.æCæ#æcf7ó	³‡ù”ÙË|Æìc>g¾`¾d¾bö3_3˜o˜ƒÌ·Ì!æ;æ{ææ0ó#s„9ÊüÄüÌüÂüÊcŽ³ˆ%X’¥XšeX–åXžXÌŠ¬Äʬª¬Æê¬Áš¬=ƒmžÉ6e›±ÍÙlK¶ÛšmÃúÙ¶l;¶=ہíÈvb;³]Ø®ìYl76íÎö`{²½ØD6ÀY‹µÙ$6™íͦ°}ؾìÙl?¶?;€Ȧ²il:›Á†ØLv;˜Íb‡°CÙlv›Ãæ²ÃÙl›Ï°#ÙQìhv;–ÇŽg'°ç°ç²ç±Ù0[ȱÅl„-aKÙ2¶œÄNf+ØJ¶Š²Õìùl
+[ËÆØ:v
+;•ÆNgg°3ÙØÙYìEìÅìlöv{);—½Œ½œ½‚½’ÇÎg¯b¯f¯a°×²×±×³ÙØÙEìMìböfv	{»”½•½½½ƒ½“]ÆÞÅ.gïfïaW°+Ù{ÙûØûÙUììjöAv
+û»–}˜}„}”}Œ}œ]Ç>Á®g7°Ù'٧اÙgØMì³ìfö9öyövû"ûû2»•}…ÝƾʾƾÎngß`ßdßbw°o³ï°ï²ï±ï³°;Ù]ì‡ìGìÇìnövû)»—ýŒÝÇ~Î~Á~É~Åîg¿f°ß°ÙoÙCìwì÷ììaöGö{”ý‰ý™ý…ý•=ÆçGp$Gq4Çp,Çq<'p˜9‰“9…S9Ó9ƒ39wׄ;“kÊ5ãšs-¸–\+®5׆ósm¹v\{®בëÄuæºp]¹³¸n\םëÁõäzq‰\€rgsI\2×›Káúp}¹³¹~\n 7KåÒ¸t.ƒq™Ü n0—Å
+á†rÙÜ0.‡Ëå†s#¸<.Ÿ+àFr£¸ÑÜn,7ŽÏMàÎáÎåÎã&ra®+⊹W•re\97‰›ÌUp•\媹ó¹®–‹quÜn*7›ÎÍàfrpr³¸‹¸‹¹ÙÜ%ÜîRn.ww9ww%7›Ï]Å]Í]Ã-à®å®ã®çr7p7r‹¸›¸ÅÜÍÜîn)w+ww;ww'·Œ»‹[ÎÝÍÝíàVr÷r÷q÷s«¸¸Õ܃Üî!n-÷0÷÷(÷÷8·Ž{‚[Ïmà6rOrOqOsÏp›¸g¹ÍÜsÜóÜÜîEî%îen+÷
+·{•{{ÛνÁ½É½ÅíàÞæÞáÞåÞãÞç>àvr»¸¹¸¹ÝÜ'ÜîSn/÷·ûœû‚û’ûŠÛÏ}Íà¾árßr‡¸ï¸ï¹¸Ã܏Üî(÷÷3÷÷+wŒ;Î#žàIžâižáYžãy^à1/ò/ó
+¯ò¯óoò>þ¾	&ß”oÆ7ç[ð-ùV|k¾
+ïçÛòíøö|¾#߉ïÌwá»ògñÝø¾;߃ïÉ÷âù ä-Þæ“ød¾7ŸÂ÷áûògóýøþü ~ ŸÊ§ñé|â3ùAü`>‹Âå³ùa|ŸËçGðy|>_ÀäGñ£ù1üX~?žŸÀŸÃŸËŸÇOäÃ|!_Äó¾„/åËør~?™¯à+ù*>ÊWóçó5|-ãëø)üT~?ŸÁÏä/à/ägññó³ùKø9ü¥ü\þ2þrþ
+þJ~?Ÿ¿Š¿š¿†_À_Ë_Ç_Ï/äoàoäñ7ñ‹ù›ù%ü-üRþVþ6þvþþN~¿œ¿›¿‡_Á¯äïåïãïçWñð«ùù5üCüZþaþþQþ1þq~ÿ¿žßÀoäŸäŸâŸæŸá7ñÏò›ùçøçùø-ü‹üKüËüVþ~ÿ*ÿÿ:¿ƒ“‹ßÁ¿Í¿Ã¿Ë¿Ç¿ÏÀïäwñòñó»ùOø=ü§ü^þ3~ÿ9ÿÿ%ÿ¿Ÿÿš?ÀÃä¿åñßñßó?ð‡ùù#üQþ'þgþþWþ\@!%Ð#°'ð‚ `A$AA4AÁ|ÂBáL¡©ÐLh.´Z
+­„ÖBÁ/´Ú	í…BG¡“ÐYè"tκ		Bw¡‡ÐSè%$
+!(X‚-$	ÉBo!Eè#ôÎú	ý…Â@!UHÒ…!$d
+ƒ„ÁB–0D*dÄ!W.Œò„|¡@)ŒFc„±Â8a¼0A8G8W8O˜(„…B¡H("B‰P*”	åÂ$a²P!T
+UBT¨Îj„Z!&Ô	S„©Â4aº0C˜)\ \(Ì..f—s„K…¹ÂeÂå•Â<a¾p•pµp°@¸V¸N¸^X(Ü Ü(,n7K„[„¥Â­ÂmÂíÂ2á.a¹p·p°BX)Ü+Ü'Ü/¬V
+k„‡„µÂÃÂ#£ÂcÂãÂ:á	a½°AØ(<)<%<-<#lž6Ï	Ï/[„…—„—…­Â+Â6áUá5áua»ð†ð¦ð–°Cx[xGxWxOx_ø@Ø)ì>>>vŸ{„O…½ÂgÂ>ásááKá+a¿ðµp@øF8(|+¾¾~?
+G„£ÂOÂÏÂ/¯Â1á8F˜À$¦0ÌbóXÀ‹XÂ2V°Š5¬c›Ø‡ÏÀMð™¸)n†›ã¸%n…[ã6؏Ûâv¸=î€;âN¸3î‚»â³p7œ€»ã¸'î…q ±…mœ„“qoœ‚ûà¾ølÜ÷Çð@œŠÓp:ÎÀ!œ‰áÁ8ÁCq6†sp.ŽGà<œðH<
+ÆcðX<Çð9ø\|žˆÃ¸ábÁ%¸—ár<	OƸWá(®Æçã\‹c¸OÁSñ4<ÏÀ3ñøB<_„/Ƴñ%x¾ÏÅ—áËñøJ<ÏÇWá«ñ5x¾_‡¯Çñ
+øF¼ß„ã›ñ|^ŠoÅ·áÛñøN¼ß…—ã»ñ=x^‰ïÅ÷áûñ*ü ^ÄkðCx-~?‚ŏáÇñ:ü^7àøIüZ‹ÆOãgð&ôz=‡ŸE GÑóx3º=‹.ÇÏáçñè~¼¿ˆ_Â/ã­ø¼
+½€_ůá×ñvü~¿…w §ÐÓømü~¿‡ßÇàxþmÄáñnü	Þƒ?Å{ñgxþ¿Ä_áýøk| ƒâoñ!üþÿ€ãñ|ÿ„Æ¿à_ñ1|\D"!’"%Ò"#²"'ò¢ bQ%QQ5Q
+Ñ}âbñL±©ØLl.¶[Š­ÄÖbÑ/¶Û‰íÅbG±“ØYì‚~»Šg‰Ýı»ØCì)öÅ€-Ñ“Äd±·˜"öûŠg‹ýÄþâ q ˜*¦‰éb†3ÅAâ`1K"³ÅabŽ˜+Gˆyb¾X ŽG‰£Å1âXqœ8^œ ž#ž+ž'NÃb!ºJ,‹ÅˆX"–Šeb¹8Iœ,Vˆ•b•«ÅóűVŒ‰uâqª8Mœ.ÎgŠˆŠ³Ä‹Ä‹ÅÙâ%âñRq®x™x¹x…x¥8Oœ/^%^-^#.¯¯¯Š7ˆ7Š‹Ä›ÄÅâÍâñq©x«x›x»x‡x§¸L¼K\.Þ-Þ#®WŠ÷Š÷‰÷‹«ÄÄÕâƒâñ!q­ø°øˆø¨ø˜ø¸¸N|B\/n7ŠOŠO‰O‹Ïˆ›ÄgÅÍâsâóââñEñ%ñeq«øŠ¸M|U|M|]Ü.¾!¾)¾%îßßßßß?wŠ»ÄŏďÅÝâ'âñSq¯ø™¸Oü\üBüRüJÜ/~-¿ŠßŠ‡ÄïÄïÅÄÃââñ¨ø“ø³ø‹ø«xL<.!‰H‰’h‰‘X‰“xI°$J’$KŠ¤Jš¤K†dJ>é©‰t¦ÔTj&5—ZH-¥VRk©ä—ÚJí¤öR©£ÔIê,u‘ºJgIݤ©»ÔCê‰K½¤D)€VJAÉ’l)IJ–zK)R´Dê‹nFßHgKý¤þÒ i ”*¥¡»¥t)C
+¡ë¥Li4XÊ’†HC¥li˜”#åJÃ¥h©”'åKÒHi”4Z#•ÆIã¥	Ò9Ò¹ÒyÒD),JER±‘J¤R©L*—&I“¥
+©­ª¤¨T-/ÕHµRLª“¦HS¥iÒti†4Sº@ºPš%]$],Í–.‘æH—¢Ò\é2értºQºBºRš'Í—®’®–®‘H×J×I×K¥¤¥EÒMÒbéfi‰t‹´TºUºMº]ºCºSZ&Ý%-—î–î‘VH+¥{¥û¤û¥UÒÒjéAiô´VzXzDzTzLz\Z'=!­—6H¥'¥§¤§¥g¤MÒ³Òfé9éyéi‹ô¢ô’ô²´UzEÚ&½*½&½.m—ސޔޒvHoKïHïJïIïKH;¥]Ò‡ÒGÒÇÒnéiô©´WúLÚ'}.}!})}%í—¾–HßH¥o¥CÒwÒ÷ÒÒaéGéˆtTúIúYúEúU:&—‘LȤLÉ´ÌȬÌɼ,ÈXeI–eEVeMÖeC6eŸ|†ÜD>Sn*7“›Ë-ä–r+¹µÜFöËmåvr{¹ƒÜQî$w–»È]å³änr‚Ü]î!÷”{ɉr@Ê–lËIr²Ü[N‘ûÈ}å³å~ry€<PN•Óät9CÉ™ò y°œ%‘‡ÊÙò09GΕ‡Ë#ä<9_.GÊ£äÑòy¬<N/OÏ‘Ï•Ï“'Êa¹P.’‹åˆ\"—Êer¹<Iž,WÈ•r••«åóå¹VŽÉuòyª<Mž.ϐgÊÈʳä‹ä‹åÙò%òùRy®|™|¹|…|¥<Ož/_%_-_#/¯•¯“¯—Ê7È7Ê‹ä›äÅòÍòùy©|«|›|»|‡|§¼L¾K^.ß-ß#¯WÊ÷Ê÷É÷Ë«ÐòòjùAyü¼V~X~D~T~L~\^'?!¯—7Èå'å§ä§ågäMò³òfù9ùyùy‹ü¢ü’ü²¼U~EÞ&¿*¿&¿.o—ߐߔߒwÈoËïÈïÊïÉïËÈ;å]ò‡òGòÇònùyü©¼WþLÞ'.!)%ï—¿–ÈßÈåoåCòwò÷òòaùGùˆ|TþIþYþEþU>&WB(¤B)´Â(¬Â)¼"(XI‘EQMÑC1Ÿr†ÒD9Siª4Sš+-”–J+¥µÒFñ+m•vJ{¥ƒÒQé¤tVº(]•³”nJ‚Ò]é¡ôTz)‰J@	*–b+IJ²Ò[IQú(}•³•~Je€2PIUÒ”t%C	)™Ê e°’¥Q†*ÙÊ0%GÉU†+#”<%_)PF*£”ÑÊe¬2N¯LPÎQÎUÎS&*a¥P)RŠ•ˆR¢”*eJ¹2I™¬T(•J•Uª•ó•¥V‰)uÊeª2M™®ÌPf*(*³”‹”‹•ÙÊ%ÊåRe®r™r¹r…r¥2O™¯\¥\­\£,P®U®S®W*7(7*‹”›”ÅÊÍÊåe©r«r›r»r‡r§²L¹KY®Ü­Ü£¬PV*÷*÷)÷+«””ÕʃÊå!e­ò°òˆò¨ò˜ò¸²NyBY¯lP6*O*O)O+Ï(›”g•ÍÊsÊóÊÊåEå%åee«òŠ²MyUyMy]Ù®¼¡¼©¼¥ìPÞVÞQÞUÞSÞW>Pv*»”•”•ÝÊ'ÊåSe¯ò™²Où\ùBùRùJÙ¯|­P¾Q*ß*‡”ï”ï•”ÃʏÊå¨ò“ò³ò‹ò«rL9®"•PI•Ri•QY•SyUP±*ª’*«Šªªšª«†jª>õµ‰z¦ÚTm¦6W[¨-ÕVjkµêWÛªíÔöjµ£ÚIí¬vQ»ªg©ÝÔµ»ÚCí©öRÕ€T-ÕV“Ôdµ·š¢öQûªg«ýÔþê u šª¦©éj†R3ÕAê`5K¢U³ÕajŽš«WG¨yj¾Z ŽTG©£Õ1êXuœ:^ ž£ž«ž§NTÃj¡Z¤«µD-UËÔru’:Y­P+Õ*5ªV«ç«5j­SëÔ)êTuš:]¡ÎT/P/Tg©©«³ÕKÔ9ê¥ê\õ2õrõ
+õJuž:_½J½Z½F] ^«^§^¯.ToPoT©7©‹Õ›Õ%ê-êRõVõ6õvõõNu™z—º\½[½G]¡®TïUïSïWW©¨«ÕÕ5êCêZõaõõQõ1õquú„º^Ý nTŸTŸRŸVŸQ7©Ïª›ÕçÔçÕÔ-ê‹êKêËêVõu›úªúšúºº]}C}S}KÝ¡¾­¾£¾«¾§¾¯~ îTw©ª©«»ÕOÔ=ê§ê^õ3uŸú¹ú…ú¥ú•º_ýZ= ~£T¿U©ß©ß«?¨‡ÕÕ#êQõ'õgõõWõ˜z\C¡‘¥Ñ£±§ñš aMÔ$MÖMÕ4M×ÍÔ|ÚZíL­©ÖLk®µÐZj­´ÖZͯµÕÚiíµZG­“ÖYë¢uÕÎÒºi	Zw­‡ÖSë¥%j-¨Yš­%iÉZo-Eë£õÕÎÖúiýµÚ@-UKÓÒµ-¤ejƒ´ÁZ–6Dªekô-W®Ðò´|­@©ÒFkc´±Ú8m¼6A;G;W;O›¨…µB­H+Ö"Z‰Vª•iåÚ$m²V¡UjUZT«ÖÎ×j´Z-¦ÕiS´©Ú4mº6C›©] ]¨ÍÒ.Ò.Öfk—hs´Kµ¹ÚeÚåÚÚ•Ú<m¾v•vµv¶@»V»N»^[¨Ý Ý¨-ÒnÒk7kK´[´¥Ú­ÚmÚíÚڝÚ2í.m¹v·v¶B[©Ý«Ý§Ý¯­ÒÐVkjk´‡´µÚÃÚ#Ú£ÚcÚãÚ:í	m½¶AÛ¨=©=¥=­=£mÒžÕ6kÏiÏk/h[´µ—´—µ­Ú+Ú6íUí5íum»ö†ö¦ö–¶C{[{G{W{O{_û@Û©íÒ>Ô>Ò>ÖvkŸh{´Oµ½ÚgÚ>ísííKí+m¿öµv@ûF;¨}«Ò¾Ó¾×~Ðk?jG´£ÚOÚÏÚ/Ú¯Ú1í¸ŽtB'uJ§uFguNçuAǺ¨Kº¬+ºªkº®º©ûô3ô&ú™zS½™Þ\o¡·Ô[é­õ6º_o«·ÓÛëôŽz'½³ÞE犯¥wÓôîz½§ÞKOÔzP·t[OÒ“õÞzŠÞGï«Ÿ­÷Óûëôzªž¦§ëzHÏÔéƒõ,}ˆ>TÏÖ‡é9z®>\¡çéùz>R¥ÖÇècõqúx}zmÒÏÑÏÕÏÓ'êa½P/Ò‹õˆ^¢—êez¹>IŸ¬Wè•z•Õ«õóõ½Véuú}ª>MŸ®ÏÐgêèê³ô‹ô‹õÙú%úýR}®~™~¹~…~¥>OŸ¯_¥_­_£/Яկӯ×ê7è7ê‹ô›ôÅúÍúý}©~«~›~»~‡~§¾L¿K_®ß­ß£¯ÐWê÷ê÷é÷ë«ôôÕúƒúý!}­þ°þˆþ¨þ˜þ¸¾NB_¯oÐ7êOêOéOëÏè›ôgõÍúsúóúúýEý%ýe}«þŠ¾MUM]ß®¿¡¿©¿¥ïÐßÖßÑßÕßÓß×?Ðwê»ôõôõÝú'úýS}¯þ™¾Oÿ\ÿBÿRÿJ߯­пÑêßê‡ôïôïõôÃúúý¨þ“þ³þ‹þ«~L?n ƒ0Hƒ2hƒ1Xƒ3xC0°!’!Š¡š¡†a>ã£‰q¦ÑÔhf47Z-VFk£á7ÚíŒöF££ÑÉèlt1ºgÝŒ£»ÑÃèiô2€4,Ã6’Œd£·‘bô1úgýŒþÆ c ‘j¤éF†22AÆ`#Ëb5²aFŽ‘k7FyF¾Q`Œ4F£1ÆXcœ1Þ˜`œcœkœgL4ÂF¡Qd£Ä(5ÊŒrc’1Ù¨0**#jTç5F­3êŒ)ÆTcš1ݘaÌ4.0.4f³KŒ9Æ¥Æ\ã2ãrã
+ãJcž1߸ʸڸÆX`\k\g\o,4n0n47‹›%Æ-ÆRãVã6ãvããNc™q—±Ü¸Û¸ÇXa¬4î5î3î7V«5ÆCÆZãaããQã1ãqcñ„±ÞØ`l4ž4ž2ž6ž16Ï›çŒçŒ-Æ‹ÆKÆËÆVãc›ñªñšñº±ÝxÃxÓxËØa¼m¼c¼k¼g¼o|`ì4v»OŒ=ƧÆ^ã3cŸñ¹ñ…ñ¥ñ•±ßøÚ8`|c4¾5ßß?‡#ÆQã'ãgããWã˜qÜD&a’&eÒ&c²&gò¦`bS4%S6S55S7
+Ó4}æfóL³©ÙÌln¶0[š­ÌÖfÓo¶5Û™íÍfG³“ÙÙìbv5Ï2»™	fw³‡ÙÓìe&š3hZ¦m&™Éfo3Åìcö5Ï6û™ýÍæ@3ÕL3ÓÍ3dfšƒÌÁf–9Äjf›ÃÌ3×nŽ0óÌ|³ÀiŽ2G›c̱æ8s¼9Á<Ç<×<Ïœh†ÍB³È,6#f‰Yj–™åæ$s²YaVšUfÔ¬6Ï7kÌZ3fÖ™SÌ©æ4sº9Ãœi^`^hÎ2/2/6g›—˜sÌK͹æeæåææ•æ<s¾y•yµy¹À¼Ö¼Î¼Þ\hÞ`Þh.2o2›7›KÌ[Ì¥æ­æmæíæææ2ó.s¹y·y¹Â\iÞkÞgÞo®20W›šk̵̇æÃæ#æ£æcæãæ:ó	s½¹ÁÜh>i>e>m>cn2Ÿ57›Ï™Ï›/˜[ÌÍ—Ì—Í­æ+æ6óUó5óus»ù†ù¦ù–¹Ã|Û|Ç|×|Ï|ßüÀÜiî2?4?2?6w›Ÿ˜{ÌOͽægæ>ósóóKó+s¿ùµyÀüÆ<h~k2¿3¿70›?šGÌ£æOæÏæ/æ¯æ1ó¸ùé£|´ñ±>ÎÇûö‰>É'ûŸêÓ|ºÏð™>Ÿï_ß™¾¦¾f¾æ¾¾–¾V¾Ö¾6>¿¯­¯¯½¯ƒ¯£¯“¯³¯‹¯«ï,_7_‚¯»¯‡¯§¯—/Ñð}–Ïö%ù’}½})¾>¾¾¾³}ý|ý}|}©¾4_º/Ãòeúùû²|C„Ú’XÙôê²H—Z.ª‰VqáxɦÖD¦DØ°Wp©ÑÒhUd2Ž—bzQyMQ]eIEdšXÔPÇéÅÑX¸¨(RÃE'ªlFQ؝²8^d8ó‡c\ # ŠF¼‡&Šœ¨r!#/ÙP|ƈWˆƒ	UÚH¨A
+s•ž¨JƒŠ¢••ax(mô n4OYC\®¡Ëœ/6+V^Qa˽‚ËMÊA“¬¸&åqÓeÌåñ’ÌB–O‡4˜ÔP—†6–jòI¥5‘HUE¸ª¸¼ˆÍÕÅ"l…WHٍûU4z`³ãªð
+:ÛÑž®p¾ØœøøªøøœÆ㫏ω¯Š¸*ìþ_pÕD
+C…ªJ©HU)—ÊGAùܸòQ¯sËêªJÃ5u•ẘmüÄæÅe¨‰Ë×X†šÆ2äÅe¨‰ùñQµ^!æ72cm#34ž-Öx¶‚ø4±¸E
+Ü%¹K:2¾¤uñ%	ZՁV#ãZÕy3²¦¼ª”©s¿å‘'iX×ø‰	K_§ft#i§6ªmTŸÞPgÇÅuáx\Ã6žq¢ÊTD«Jk¹ºªò^‰½{A™e Ê ””6”IP&CÙÊ(S¡Lƒ2Ê(CPfÆËÀOüÀMÜÀMÜÀMÜÀMÜÀMÜÀMÜ”L&·,ZSÅDÝïx[*èœ
+Ø©€
+Ø©€
+Ø©€
+Ø©€
+Ø©€
+Ø©!f¤‡Y×€™ú¦v`§v`§v`§v`§v`§v`§Þi`ït°w:à§~:à§~:à§~:à§~:à§~:à§~:à§~:àg ~àg ~àg ~àg ~àg ~àg ~àg ~àg ~à‡ ?ø!À~ðC6;(~êK½Z=è!@zÐC€ô gz& gz& gz&hŸ	Úg‚ö™€Ÿ™‚S]O?äáU.5/Ѹ¯Ë­­×–Åëцº7K W/(¡@„Ò‚Ò†2	Êd({C™e*”iP¦C™eʸ5‰€Ÿø‰€Ÿø‰€Ÿø‰€Ÿ˜,å7öÕµ H’’$‚$‰ I"H’’@’ H I I $	€$$ –€%`‰ à ? øÀ ~ ðƒ€ü à?øAÀ&ñŽ7¯ˆÔÖN‚ A€ ‚ @‚ ` ` ` ÀX€o¾øà[€o¾øàÛ€o¾
+ø6àÛ€o¾
+ø6àÛ€o¾
+ø6àÛ€o¾
+ø6à'~à'~à'~à'~à'~à'~à'~à'~à'~2à'~2à'~2à'~2à'~2à'~2à'~2à'~2àC€0  a@ € „ @€0  a@ € „ @€0 ø @8€p  á@  „ @8€p ø©€Ÿ
+ø $@H€  !A B‚ „	 $@H€ 
+ø©€Ÿø ,@X€°  aA ‚ „ ,@X€°  aA ‚ „ ,@X€°  aA € „ @€0  a@ € „ @€0  a@ h= ´ Z ­€Ö@ë õ@æÁ|!˜ˆ= Ä " ‘€È@ԁÌd¡´&<ÅýEéBÁ£T·æ½ö
+^BШł҆2	Êd({ËeÑèdïwéJ…2
+Êt(3 A·Aè4t:
+Nƒ@§A Ó`"H‘ØÊ(H4$
+‰Dƒ@¢A Ñ`  9$åýoz5(L&
+“IƒÀ¤A`Ò 0i˜4L&
+“IƒÀ¤A`Ò 0i˜4L&
+?ø@¤A Ò iˆ4D"
+‘Hƒ@¤A Ò iˆ4D"
+‘Hƒ@¤A Ò iˆ4D"
+‘Hƒ@ A Ð hˆ2DB!ƒ@ˆA Ä b1D"
+сh‚@4A š`rˆ‰E«¢µrqy¤&R[^ë=áÔŠê²°WÂUÑX¤"R–BÕµåNjê5ó¡¼ÏŠBMÊ­,wëøÃÈFqne¤4ÞI/wºŸ„ÅxXtZ$f…@1.˜Ã(€Gs^QSPæÔh®®³ÙáÊÂâ09¬ŽÌ©#Ç”s 9¼œÊ+‹2ù奕aª \ǁ4Ôð²r*Ýù;¼¶\Êj$‰
+êŸqø„¤Hcµ#õj—׫í«;yh\)o<]è*Uê*ÅG*baæ¢g¸*¹/cžJîdÌdO¥
+O¥¸
+ÒÒɪ:rZ9ëEÕ”EÙZW©DÆ+¨˜£àSÕŽ^EÎ_瑉º—ÛZ=EL)Úxµê¯VôÄjÅÅÈèÅzb&ò`%Øs@Á‹v°Yo\ý;Øϐ!B>„|0ù`òÁ Gˆ#Äâq8‚@A Ž Gˆ#ÄâBF„Œ0D"	‘!#BF„Œ0aˆ&a2 d„Aȃ3?ð3?ð3?ð3ãøä€ä€ä€ä€P—ÔeuY@]ä€ä€–¤eiY at Z–¤eiY at Z–¤eiY at Z–¤eiY at Z–¤eiY at Z–¤eiY at Zd~d~ð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀW$~ð–¼eoYøYøYøYÀg𙉟‰Ÿ‰Ÿ<gÏYÀsðœ<gÏYÀs$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~ð­|kAâgAâgAâgAâg[ÀÇð±|lAâgAâgAâgAâgAâgAâgAâgAâgAâgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgAÂgÁ=°÷À$€$€$€$€$€$€$€$€$€$€$€p¾	 	 	 ¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oÚÀ‡v°¾ä>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´mà?øÏþ³ÿlà?øÏþ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=.<mà=xÏnƒ?·ÁŸÛàÏmðç6øsü¹
+þÜnƒ?·Óêç}ÀŸÛàÏmðç6øsü¹
+þÜnƒ?·ÁÛà¿mð¿6ø_ü¯
+þ×ÿkƒÿµÁÿÚõãA^ð¿6ø_ü¯
+þ×ÿkƒÿµÁÿÚàmð¿6ø_ü¯
+þ×ÿkƒÿµÁÿÚàmð¿6ø_üª
+~Õ¿jƒ_µÁ¯&J‚¼"	ò…$È’ øí½œU÷]Õ§kfzn™Ifr%“†p3Ì9ÝUuš‹L÷Ô9  "‚È$™‘$“"+îÍËʪ+"âr‘EETnÊE‘ÝUÄÜõ¶î®¸Ï>npÝ}qÇP¼§ú|'´<Ïûúù¼÷ÏûI*Ýÿ®îÓõ;uêÔïwοº~“0H˜$Ìæ	ó„ù@Â| a>0H˜$Ìæ	ó„ù@Â| ÿø/ÿø/ÿø/ÿø/ÿø/×x-×x-×x-×x-×x-©Ío—ý‚×x-×x-×x-×x-×x-ÇÆç	<•ÀS	<•ÀS	<•ÀS	<•ÀS	<•$óÛ¥ÞðTO%ðTO%ðPÏ$ðLÏ$ðLÏ$ðLÏ$ðLÏ$ðLÏ$ðLÏ$ðLÏ$ŒÆÇ	ãá„ñoÂø5a¼š0NM—&Œ7x'Wx#Æk	ã´„ó>á|J8ŸΧ„ó)™?Ÿì|y¶Ç8%aœ’0NIá©žJá©žJw¦Œ;Sê—Â[)ãÎt|~{
+b“8N̈†è÷7…÷Rx/…÷Rx/…÷Rö?…÷Rx/…÷Rx/…÷Rx/…÷Rx/…÷Rx/…÷Rx/…÷Rx/…÷Rx/…÷Rx/e|™2¾L_¦Œ/SÆ—)Ç-帥·”ã–rÜRŽ[ÊqJçãIøÈÐ
+ý×Ðo
+ýÔ04è¡aÞg˜Çú­ag˜Çæo†ù›aþf˜¿™úüv‘úÐï
+ó6üÍ0_3ÌÓó2üÌ03ÌÇç‡A¿
+úmÐoƒ~ôÛpôÛ ßý6è·A·
+ºmÐmCÿ7ôCÿ7ôCÿ7ô{C7ôwC7ôwC7ôwCÿ6ôoCÿ6ôoCÿ6ôoCÿ6ôoCÿ6ôoC6¾?ËQ?ovQ±J¬cbBL‰šX'6ˆMâ8qÏ­Mð›à7Áo‚ß¿	~ü&øMð›à7Áo‚ß¿	~ü&øãàƒ?þ8øãàƒŸQ>£|FùŒòå³ùòÔ7£¾õͨoF}3ê›Qßùã“Qߌúð
+ø|¾߀oÀ7àð
+ø|¾߀oÀ7à[ð-ø|¾ß‚oÁ·à[ð-ø|¾ŸçJò×’üµ$-É_Kò×’üµ$-É[KòÖ’¼µ$o-É[KòÖ’¼µ$o-É[KòÖ’¼µ$o-É[KòÖ’¼µ$o-É[KòÖ’¼µ$_-ÉWKòÕ’|µ$_-ÉWKòÕ’|µ$_-ÉWKòÕ’|µ$_-ÉWKòÕ’|µ$_-ÉWKòÕ’|µ$_-ÉWKòÕ’|µ$_-ÉSKòÔ’<µ$O-ÉSKòÔ’<µ$O-ÉSKòÔ’<µ$O-ÉSKòÔ’<µ$O-ÉSKòÔ’<µ$O-ÉOKòÓ’ü´$?-ÉOKòÓ’ü´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ.‚¯Á×àkð5ø|
+¾_ƒ_¿~ü:øuðëà×Á¯ƒ_¿~ü:øuðëà×Á¯ƒÎ’Ÿ–ä§%ùiI~Z’Ÿ–ä§%ùiI~Z’Ÿ–ä§%ùiI~Z’Ÿ–ä§%ùiI~Z’Ÿ–ä§%ùiI~Z’Ÿ–ä§%ùiI~Z’Ÿ–ä§%ùiI~Z’Ÿ–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’‡–ä¡%yhIZ’‡–ä¡%yhIZ’‡–ä¡%yhIZ’‡–ä¡%yhIZÖæõÙ‚oÁ÷yhIZ’‡–ä¡%yhIZ’‡–ä¡%yhIY’G–ä‘%ydù>:£Ã±œÿ¾&Ö‰
+b“8N̈†HýÑã=ŽÑã=ŽÑã=ŽÑã=ŽÑã=ŽÑã=ŽÑã=ŽÑã=ŽÑcòå’|¹$_.É—Kòå’|¹$_.É—Kòå’|¹$_.É—Kòå’|¹$O.É“Kòä’<¹$O.É“Kòä’<¹$O.É“Kòä’<¹$O.É“Kòä’<¹$O.ɏKòã’ü¸$?.ɏ».ºL¾\’/—äË%ùrI¾\’/—äËeŒ.“7—äÍ%ysIÞ\’7—äÍ%ysIÞ\’7—äÍ%ùnI¾[’ï–ä»%ùnI¾[’ï–ä»%ùnI¾[’ï–ä»%ùnI¾[’ï–ä»%ùnI¾[’×v‘í£—1z£—1z£—1z£—1z£—1z£—1:£s1:£s1:£sqcþ{´:£s1:£s1:£s1:£sä¥%yhIÞS’÷”ä%ù@™0.J%Œ‹ÆEä]Œ‰lö'(ÉJò€’< $(ÉJò€.jbØ 6‰ãÄŒH½9>	LJ|¢$Ÿè"øò‹.‚Ïx†|£‹à3žIÏ$Œg2ø<ƒÏ3ø<ƒÏ3ø<ƒÏ3ø<ƒÏ3]ÑÅ:±Alçq2¢!úýÌЃ=ÈЃ=ÈЃÈЁÈЁÈЁÈЁÈЁÈЁÈЁÞÏàýÞÏàýÞÏàýÞÏàýÞÏàû¾Ïàû¾Ïàû¾Ïàû¾Ïàû¾Ïàû¾Ïàû¾Ïªó¸ì'¼ŸÁû¼ŸÁû¼ŸÁûçSÆù”Áû¼ŸÁû¼ŸÁû¼ŸÁû¼ŸÁûó±þÏàÿþÏàÿþÏàÿþÏàÿþÏàÿÞÏàýÞÏàýÞÏàýÞÏàýÞÏàýÞÏàýÞÏàý~Ïà÷>ÏàŒó+›?¿˜/dÌ2æ<šÁ£<šÁ£<šÁ£<šÁ£<šÁ£<šÁ£<šÁ£<šÁ£ó…ŒùBÆ|!c¾1_Ș/dÌ2æó…ŒùBÆ|!c¾1_Ș/däå2òróƒŒùAÆü c~1?ȘxÊÀSž2𔁧<eà)OxÊŒÎo¯AlljÑ}}
+<eà)OxÊÀS†q«¯|eà+_øÊÀW¾2𕁯|eà+_øÊÀW†q«aÜjà/øËÀ_þ2𗁿üeà/øÕÀc3ð˜Ç<fà1xÌÀc3ð˜Ç<fà1q=CxÌÀc3ð˜Ç<fà1xÌÀc3ð˜Ç<fà1xÌÀc3ð˜Ç<fà1xÌÀc3ð˜akà3ŸøÌÀg>3ð™Ï|fà3ŸøÌÀg>3ð™!¿dÈ/òK†q”aeGÆQ†q”aeGÆQ†q”/
+|iÆÃþ4Œ‡
+ãaÃxؤ¶ãÍ­;w:öùðf¿ü¾V¨¼yþçë•}ó¯ü÷q½Kr½ËEðÆc†ñ×Á\Ÿñ˜a<fÆc†ñ×Í$×Í$×Í$×Í\Ÿñ×Ï$×ϤA¸N&¹N&¹Næ"ÛGzÀu3Ù>zÀu4Éu4Ù?ô€ëi’ëi’ëi’ëi’ëi’ëi’ëi’ëi’ëi’ëi’ëi’ëi.‚p]Mr]ÍEðÑ®³I®³I®³I®³I®³¹>zaЮ»I3¯䓸î&¹î&¹îæ"ø䓸'¹'¹'¹'¹'¹'¹'¹'¹'¹ç"ø䓸.'ç¯Ëæ1†|’!Ÿd˜×òI†|’!ŸdÈ'òI†|’!ŸdÈ'òI†ë>†¼’!¯dÈ+òJ†¼’±²ã|¢]Þ
+¼:Y%CVɐU2d•Y%‹Z[ÔÚ¢Öµ¶¨µE­-jmQk‹ZÛÑùí5ˆMâ81#¢ß‹Z[ÔÚ¢Öµ¶¨µE­-êlQg‹:[ÔÙ¢Îu¶¨±E-jlQc‹[ÔØ¢Æ5¶¨±E-jlQc‹[5Çþ¡Æ5¶¨±E-jlQc‹[ÔØ¢Æ5¶¨±E-jlQc‹[ÔØ¢Æ5¶¨±E-jlQc‹[Ô×¢¾õµ¨¯E}-êkQ[‹ÚZÔÖ¢¶µµ¨­Em-jkQY‹ºÚx~»Ô5µ¨©EM-jjQS‹šZÔÔ¢¦5µ¨©EM-jjQS‹šZÔÔ¢¦5µ¨©EM-jjQS‹šZÔÔ¢¦5µ¨©EM-jjQS‹šZ²–l†%›aÉfX²–YŒE=-êiQO‹zZÔÓ¢žõ´zýE=-êiQO‹zZÔÓ¢žõ´¨§E=-êiQO‹zZÔÓ2۲̶,³-ËlË¢®uµ¨«E]-êjQW‹ºZÔÕ¢®uµ¨«E]-êjQW‹ºZÔÕ¢®uµ¨«E]-êjQU‹ªZTÕ¢ªUµ¨ªEU-ªjQU‹ªZTÕ¢ªUµ¨ªEU-jjQS‹šZÔÔ¢¦5µ¨©EM-jjQS‹šZÔÔ¢¦5µ¨§E=-êiQO‹zZÔÓ¢šÕ´¨¦E5-ªiQM‹jZTÓ¢šÕ´¨¦E5-ªiQM‹jZTÓ¢šÕ´¨¦åê‹åê‹E'-úhÑG‹>Úy}䪋媋媋媋õW]Ô¨×Q%Q«Ä1&&Ä”¨‰ubƒØ$Ž3â<®õQ‚/e÷¶©Kf÷LnØ»·€”I_돁ïÝ2í>Þ¼£ïm³ÓÅŸk¿Ì½5¹•2lNUû§wVo“»vLN¸/õÏì›n[¥•WTVQYEe•UTV±õªìØ9µ«e6YüÝ{Þ¥‰ªÔ·JUA©ÒDÕfeòí[vLìtûÀ;àTÁ©‚S£Qj”¥ÆA©T©R
+¤£ÆþÕØ¿ûW·n
+ÜÜÜÜܘ=ÁÁÁÁÁÁÁÁÁÁÁOÀOÀOÀOÀOØ^Âö¶—°½„í%l/e{)ÛK©JýSêŸRÿ”ú§Ô?/////Oƒ§ÁÓÔ_S
+¾_ƒ¯Á×àkð5ø|
+¾_ƒ_·nÜ:¸up£}[¦wLïÚéΑ™‰=—ó®*ï˜Ú3Á
+Uk$»'÷ºR¬R³5k4Ê[§w]R6³{¦y‡:5¨Sƒ6iR·&ukR·&ukR·&Àå3Êg´QFe´EF[xbV"“£óëŠX%Öˆ11!¦DM¬›ÄqbF4D¿RŽv½vÛž‰Kgf÷ðÀ`	0t&%À2íÙ79å8lfÏÄÞ½¼¸Ÿ¸Øì:û77žõîÞ3¹wËž©ÝÅ_IçMª¢hE(j ¨¢Š@ƒR±ë
+thQB‹Z”*«LÚ91íJˆQVA®‚\¥
+ªÔ Z‹&vLîÞÎø¤„ eü*øUð«àC—º”Ð¥„.%t)¡K	]ÊûmJhSB›ڔЦ„.eÍt'Êö©=[+NFZ/8P0 „%(a@	ʸQq›˜œºdûÌöÞ™í{&y½·gÛÔeó¯{÷:-ÛÅ
+ßc×`D	#JQˆ2a×ê“PŸ„ú$Ô'¡>0¨„A%*aP	ƒJT •)ø)ø0ª„Q%Œ*aT	£JU¨F•0ª„Q%Œ*aTÌ(f”
+3J…¥‹µÊÄž=ÓûvLn›él½šÝÝÝŠ{ŠæônÞ·Ë¿Úìb…b[9{êT¹N•ëT¹N•ëT¹N•ëT¹N•ëT¹N•T¹A•T¹A•4L‹—¤‹iïÁšmÞ;É›T¢A%T¢A%`]	ëJXWº˜J*L%¦’.Öú·8´©‰KÜ@ʱmѤ.MÚ¢I[4©F“j4©F“j4©F“j4©Æ8Õ§ãTcœjŒÓã´Å8øãàƒ?þ8øãàƒ?þ8øãÖ·¥i=£{~evwßüËVÿ8Xªè"WŠ^â·“Q/DÏI…ç¤ÂsRá9©ðœTxN*<'ž“
+ÏI…礒óâehC»ÚÅ€oÀ7àð
+ø|¾߀oÀ7à[ð-ø|¾ß‚oÁ·à[ð-ø|¾ß‚ÏlÃM;*.÷	?v#÷žÉ·Oíuô™©ƒïÕº&wîž¹Ü
+?º.ÙSøÉìšéœÜ1¹³0­õÞ@;1vt…]{g·8朘cœ˜=6Þ’
+/I…—¤ÂKÒŤwÂÕcÏÔÞKÂmçMM¬›Äq§ÃÓ»§÷*<±£Û½Ø^ØóNìˆ&v]²ÃŸ½˜G*Ì#æ‘
+óH…y¤‹I÷ŽéK¦¶L¾Ì^NïéÚ5SÌq¶ ‘+‰àc©0T˜G*Ì#æ‘
+óH…y¤‹ÕÊÌvwÂos)Þ¡H²B’qT¸G*Ü#Uá¹wjçÔŽ‰=¬S$÷H…{¤Â=Rá©pt±Vq¨KöÌ<Žˆ2þ‘
+ßH…o¤Â7Rá©ðTøF*|#¾‘
+ßH…o¤Â7Rá©ðTøF*|#¾‘
+ßH…o¤Â7Rá©ðTøFºh{&ß6;u™çìÚBë¢ÖxF*<"‘
+H…G¤Â#Rá©ðˆTxD*<"‘
+H…G¤Â#Rá©ðˆTxD*<"‘
+H…G¤Â#Rá©ðˆTxD*<"‘
+Heëlp}uÖ)×LÿüJñ49Sq§¬ÿ€Òq¯ë‚;&ßNéù_š2ÔŒ™î‘
+÷H…{¤Â=Rá©pT¸G*Ü#î‘
+÷HkÝ…C¶“î˜ÝË[I¿kç쎙©Ý;.çmjÂp I…¤ÂGRá#©ð‘TøH*|$>’
+I…¤‹µ>·ã»'CöÙƒçƒÜ$n’
+7I…›¤ÂMRá&©p“T¸I*Ü$î‘
+÷H…{¤Â=Rá©pT¸G*Ü#î‘
+÷H…{¤Â=Rá©pT¸G*Ü#î‘
+÷HU¸Gnžy™g~\$.’
+I…‹¤ÂERá"©pT¸@ºÈ÷f…0+„Y!Ì*›ÿ>õF˜qT¸F*\#®‘
+×Hi7„×H…k¤Â5ÒEðf\$.’
+IÁG˜¬f\&]aV³B˜¬f…0+„Y!Ì
+aV³ò?¾vÂ1J”ÑöéYF¡UæиV*\+®•
+×J5±Nl›ÄqbF4DÛ·gò2tϱ…×_ZS¸P*\(®“
+×I…뤋¶»L7bØ1³ûàËÍl
+ÍÅfRa3©°™TØL*l%¶’NÙw¸›C…Í¡ÂÖÐ	&Û!×R…ªðC~¨ÂUø¡
+?Tá‡*üP…ªLªLª0Cf¨ÂU˜¡
+3Ta†*ÌP…ª0Cu|>Rzx•žÍmdŠÛÈ·)n?RÜ~¤¸ýHqû‘âö#ÅíGŠÛ·©ÖíG»7ï˜ÞrikŸ+~~¬ŠŸ»ùOÛç11!¦Qû§ubƒØìܱ­ýóŒhˆ¶sÏŒÿ|ÇÌÞí['£ÖsçÖK}l•âòÓdÅO“]L‰š:šsÌcŽyÌ19æqÝV¶M¹ÉÖÍÓoï8Õ
+Mé\üÆYñgÅoœ¿qVüÆYñgÅoœ]¬wœ*u\«¶B\äЋÍïqCF
+PŽ:?rV˜“¨Âœd¦˜Îîf
+ ˜“(ÌIæ$
+sU˜“´¾¿<§­u&ט“(ÌIæ$
+s…9‰ÂœDæ$­ïïØÆ:øèf%.‚?^ïð¢Í*
+<Äã¦Õ0¤¡°8QXœ(,N'
+‹…ʼnÂâÄÅ´2µë²Í³®mgŠWí(6'
+›…͉âçä
+›…͉âçå
+›…͉ÂæÄŸÛ
+¢vyPÞbçœNN'.RD&FdbD&FdpDQ8¢(QŽ(
+GiD&FdbD&FdbD&FdbD&FdbD&FdD&!U›ªM™™I™™I™™I™™Iœ\\̈†>3ÁIÈØ&Ìf†8Á¸¾AJ¤„l-Ž1.‚@%N2nV >ÓCeŽ2
+G…£ŒÂQFá(£p”Q8Ê(eŽ2
+G…£ŒÂQFá(£p”Q8Ê(eŽ2
+G…£ŒÂQFá(£p”q±^Ùëæ‚“Û&¶Lº¹êeWÄÞÙ]¡
+Ì“ªíØ6¹s‚“'©ÉrÛ
+ð¤k1žQÜ€¡¸Ca<£0žQÏ(ŒgÆ3
+ã…ñŒÂxFa<£0žQÏ(ŒgÆ3
+ãÁg†˜0CL˜!bLã"øÌfˆ	3Ä$¶ÑÞÝóƒ}‹ª¼eÇìfVjÑöÉ	G¦[§&vÎ_`ĹFá\ãb½gçì^ÆJ“ým¯ç¯,bb£0±QÜ´¢¸iEqÓŠâ¦ÅM+Š›V7­(nZQÜ´â"Uaæˆ	ŽÂGa‚£0ÁQ˜à(Lp&8Š›_7¿(n~QÜü¢¸ùEqó‹âæÅÍ/Š›_7¿(n~QÜü¢¸ùEqó‹âæÅÍ/Š›_7¿(n~QÜü¢¸ùEqó‹âæÅÍ/Š›_7¿(n~QÜü¢¸ùÅMèÁat— ô	BI‹à ô	BŸ ô˜÷¸£»¤1Ã~¢ó˜ü¨OÈ'ÌS¨7_¯kÄ„˜5±N'fDCô¸)›B±)›B±)›B±)›B±)›B±)›B±)›B±)›B±)›B±)›B±)›B±)›B±)ÔšB­)ÔšB­)ÔšB­)ÔšB­)ÔšB­)ÔšB­)ÔšB­)ÔšB­)y·”¼[Ê¥°”Ka)¼šÂ«)y·”¼[JÞ-%ï–­)ܚ­)ܚ­)ܚ­)ܚ­)œšÂ¥)\šÂ¥)\šÂ™)\™Â•)\™Â•)\™Â•)\™ÂŽ)³Œ”YFÊ,#e–‘2ËH¡ÈŠLɨ¥dÔR2j)¼˜Â‹i2ÇþÀ‹)¼˜Â‹)¼˜Â‹)¼˜Â‹)¼˜Â‹)¼˜Â‹)¼˜Â‹)¼˜Â‹)¼˜Â‹)¼˜Â‹)¼˜Â‹)¼˜Â‹)¼˜Â‹)¼˜Â‹)¼˜Â‹)¼˜Â‹)¼˜Â‹)¼˜Â‹)¼˜Â‹)ü—Â)ü—Â)ü—2J™¥ÌzSx1…Sx1…Sx1…Sx1…Sx1…Sx1…Sx1…Sx1…Sø0çCæ=)óž”yOʼ'eÞ“2ïIÉ‹¥äÅRòb)y±”yOʼ“/…y—¼ËE¶ÇP>e(©—´KaÚ¥0íR˜v)L»¦].²}†ê˜x)L¼&^.ÎoŸú2TOª§Õ5Cu^hôB£½ÐÕ5º¡Ñ
+nhtC3T×Õ5:¢ÑŽhtD£#ÑèˆFG4:¢ÑŽhtD£#ÑèˆFG4:¢ÑŽhtD£#ÑèˆFG4:¢ÑŽhtD3T×è‰FO4z¢ÑžhôD£'=Ñè‰FO4z¢ÑžhôD£'=Ñè‰FO4z¢ÑžhôD£'=Ñè‰FO4z¢ÑžhôD£'=Ñè‰FO4z¢«ktE3V×è‹F_4ú¢ÑÍX]3V׌Õ5º£«kôG£?ýÑèF4ú£ÑÍï/4Y/iôH£G=Òè‘F4z¤Ñ#iôH£G=Òè‘F4z¤Ñ#iôH£G=Òè‘F4z¤Ñ#iôH£G=Òè‘F4z¤Ñ#iôH£G=Òè‘F4z¤Ñ#iôH£G=Òè‘F4z¤Ñ#iôH£G=ÒŒÓ5ãtÍ8]£SÒè”F§4:¥Ñ)NitJ£SÒè”F§4:¥Ñ)NitJ£SÒè”F§4:¥Ñ)NitJ3~×è•F¯4z¥Ñ+^iôJ£W½Òè•F¯4z¥Ñ+^iôJ“§Óäé4y:MžNsGóMžN“§Óäé4y:ÍõÍõÍõMÂN“°Ód¥5YiMÆN“±Ódì4;MÆN“±Ódì4׃4׃4׃4Ù:M¶N“­Ódë4Ù:M¶N£Ûšl&[§ÉÖi²uš¬¹Fß5ú®Ñw¾kô]£ïšT&U§IÕiRuý×è¿Fÿ5ú¯Ñþkô_£ÿý×è¿Fÿ5ú¯Ñþkô_£ÿuô¼Žž×Ñï:ú]GêèC^¨ÃuŽgãYçxÖ9žuŽgãYçxÖ9žuÚ©N½ëÔ»Á¸¤Á¸¤Á¸¤Áx¢Áx¢Áx¢Áx¢Áx¢Áx¢Áx¢Áx¢Áx¢Áx¢Áx¢Áx¢Áx¢Áx¢Áx¢Áx¢Áx¢~7àÕ¼Ú€Wðj^mÀ«
+Ú¯Aû5àÕ¼Ú€Wðj^mÀ«
+xµ¯6àÕ¼Ú€Wðj^mÀ«
+xµ¯6àÕ¼Ú€Wðj^mÀ«
+xµ¯6àÕ¼Ú€Wðj¾kÀw
+ø®ß5à»|×€ïð]¾kÀw
+ø®ß5à»ý¿A?jÒšôŸ&ý§É¸¶É¸¶É¸¶ÉyÐä<h2®m2®mŽÎo·I'fDCôûÙ¤6é‡Múa“~ؤ6é‡Múa“~ؤ6é‡Múa“ñj“ñj“ñj“ñê8ã™qÆ3ãŒgÆ“ùÏkĘ˜S¢&Ö‰
+b“è÷{œqÉ8ã’qÆ%ãŒK0-Q˜–(LK¦%
+Ó…i‰Â´DaZ¢0-Q˜–(LK¦%
+Ó…i‰Â´DaZ¢0-Q˜–(LK¦%
+Ó…i‰Â´DaZ¢0-Q˜–(LK¦%
+Ó…i‰Â´DaZ¢0-Q˜–(LK¦%
+Ó…i‰Â´DaZ¢0-Q˜–(LK¦%.‚ϸó…y‰Â¼Da^¢0/Q˜—(ÌKæ%.¶¾WËüxÀEITÄ*±FŒ‰	1%jbØ 6‰ãÄŒhˆàgàgàgàgàgàgàgàgàgàgàgàgàgàgàgàgàð
+ø|¾߀oÀ7àð
+ø|¾߀oÀ7à[ð-ø|¾ß‚oÁ·à[ð-ø|¾ß‚oÁ÷ãËø¶ü•d›øãláSZøÓŸþ´ð›…ß,üfá7¿¹˜
+ÑãÁo~³ð›…ß\d»Ší*¶«Ø®Ÿ»X'6ˆMâ8|¾¿
+~ü*øUð«àWÁ¯‚_·
+nÜ*¸Up«àÕÀ©Scû5¶_c»5ö«Æökl¿Æökl¿ÆökìWm‡ýŠÙœœ˜ýˆÁ‹Á‹Á‹Á‹Á‹Á‹Á‹Á‹Á£ß4ö/aÿððððððððððððððSðSðSðSðSðSðSðSðSðSðSðSðSðSðSðSð5ø|Í÷5ß×|_ó}Í÷5߯óý:߯Sÿ:õ¯Sÿ:õ¯óý:ßϨw®aï[ð-ø–ïØ%YÌ’,fI³$‹Y’Å,Éb–d1K²˜%YÌ’,fI³$‹Y’Å,Éb–d1K²˜YÌŠ,fE³"‹™ŒÅLÆb&c1“±˜ÉXLd,&2‹‰ŒÅDÆb"c1‘±˜ÈXLd\¤^Wþ8‚å#¸®WÓ.|
+¾_ƒO¿ÀDÆb"c1‘±˜ÈXLd,&2‹‰ŒÅDÆb"c1‘±˜ÈXLd,&2‹‰ŒÅDÆòG,„ÁòG,„Áb2c1™±˜ÌXLf,&3“‹ÉŒÅdÆb2c1™±˜ÌXLf,&3“‹ÉŒÅdÆb2c1™±˜ÌXLf,&3“‹ÉŒÅdÆb2c1™±˜ÌXLf,&3“‹ÉŒÅdÆb2c1™±˜ÌXLf,&3“‹ÉŒÅdÆb2c1™±˜ÌXLf,&3“‹ÉŒÅdÆb2c1™±˜ÌXLf,&3“‹ÉŒÅdÆb2c1™±˜ÌXLf,&3“‹ÉŒÅdÆb2c1™±˜ÌXLf,&3“‹ÉŒÅdÆb2c1™±˜ÌXLf,&3“‹ÉŒÅdÆb2ã"ø|¾ß‚oÁ·à[ð-ø|>¼hàAn··Üno¹ÝÞr»½‹YÇlaÑ8êƒôAùPõ¡æCìCâCêƒö¡îCǦã>€`|°­ =žôxÒãI'=žôxÒãI'=žôxÒãI'=žôxÒãI§<žòxÊã)§<žòxÊã)§<žòxÊã)§<žòxÊã)WõxUWõxUWõxUWõxUWõxUWõxUWõxUWõxUWóx5Wóx5Wóx5Wóx5Wóx5Wóx5Wóx5Wóx5{¼ØãÅ/öx±Ç‹=^Ü‹ýŽÅ~Çb¿G±ß£ØïQì÷(ö»û]‰ý®Ä~Wb¿+±ß‡ØW7öՍ}uc_ݸÆÆZՍ}uc_ÏØ×3öõŒ}=cê§>øêƾº±Š=Pìb{ Ø%(ñ•O<^âñ—x¼Äã%/ñx‰ÇK<^âñ2ÿ½Ì/óßËü÷2ÿ½Ì/óßËøž¯gæë™ùzf¾žÆ×Óøz_Oãëi<žñxÆãg<žñxÆãg<žñxÆãg=žõxÖãYg=žõxÖãYg=žõxÖãYg=žg°Øz<ÛÂK<Ÿ%žÏÏg‰ç³ÄóYâù,ñ|–x>K}/HcÖ´u>4}÷!óÁøÐBO}/H}/H}/H}/H}/H}/H}/H}/H}/H}/H}/H}/H—x¼Äã%/õx©ÇK=^êñR—z¼Ôã¥/õx©ÇK=^êñR—z¼Ôã¥O{<íñ´ÇÓO{<íñ´ÇÓO{<íñ´ÇÓO{<íñ´ÇÓÏ÷¬Ô÷¬Ô÷¬Ô÷¬Ô÷¬Ô÷¬Ô÷¬Ô÷¬Ô÷¬ÔÆ•­;ΘÙ2±gzWW†GbÔ(Ü£s¦vlŒN)|޺ǧöl™ÝYÜëe£fááRɦg&¶l™Ü5Ó{êì®K&öÌîÜ11;Ó“MÏnÞ1ÙrˆëžØ3±yjËÅ[§‹v[/•{½w~¥Z¬ô·¯\<Ñß^ðâ‰ù¢µÖ÷fwµþ®ß†mS»&®Líšš9¸²srë”_iȶbnååbnååb‰mßšmßšm+Öl´}âVŠOz¨Ûž©]—øÒñ¶¹•—¿âV^ÞXšµËÚ‹emÅtûèö=Ðí{ U{1Õ^Lµ‹Û‹ÅíÅâömof{{4}{Ì K&¶]¼ybOë37`Ù°ebïd§ÙuɆ‰3Š7U¢7¸£¶crï^¿^Ïæ×{Z_ÕîQãu­XçuÚö~QF¶½m+/Û^Ï¿_}ÅwÇÛÞŸßþxÑöþüvÔ+^¶½®ò:yÅkÙöz´íu½í»ó¯eÛ½yÏDëfé™è´¢±|ëÖýáY<ëgG­•
+;¦w]²wfbÏüh?„ÍöCØl?„ãí'Èxû	2Þ~‚Ô}¿‰v¼\‰Ì+µToØ9½kڝɻ·óNýåwL·MO^Ú~ˆGŽW¬×Û×áß\oί‹-[§£×Uñ7ýoØìúS«Ý’Xœ´íµ?¦î½b½í}ÓöÚRÆ´•©µ•)^ÛÖ^§ã—Û«X9ØDÅÊÁÆK]]ÛŠ5Û‹5Û‹·o/6Þ^,k/–µËÚ‹™öb¦½˜i/fÛ‹Ùöbm§pš¶s+/s+mÅd{1Ù^L¶SíÅT{1Õ^¬Ú^¬Ú^¬Ú^¬Ö^¬Ö^¬Ö^,n/·‹Û‹%íÅ’öbI{±´½XÚ^,m/¦Û‹éöbº½X½½X½½X½½X{ËÚû[ÖÞß²öþ–µ÷·¬½¿eíý-kïoY{ËÚû[ÖÞß²öþ–µ÷·¬½¿eíý-kïoY{ËÚû›iïo¦½¿™öþfÚû›iïo¦½¿™öþfÚû›iïo¦½¿™öþfÚû›iïo¦½¿™öþfÚû›iïo¦½¿™öþfÚû›iïo¦½¿™öþf|«œí›§/kq_qËOA‰¼–m¯UÛëjÛëZÛë¸íuÒö:=ÈøµÔlØ:5±Åó»žØ°¹Ú|Ì;Í—ßi}ÙH½a6–ß/]ä×ƒîùUášàø 
+_̹µÃƒÅîy-ï­m•+^‹puëóUÁƒîy$ØêžW¶>=,XæžW#îyyëe­ç¥­ç%­çÅ­çáp(èw[n­¯E¸¨õzaëyAØ\é>_ÐZ+^‹°/ì
+ÞïÞëk½×<”ÃÞ°'8ß½W|"ÜóÕ°;8½W|"Üó˜{¯xG„•Ö7»ZϝAoë¹øFÇÝÝ5…­ýŠZÏåV)ÑÚ£R띰õŒ½t¥xé5"ÏŁ_Èůs¹øÕ§D¿ºR¼pŠøÏ9ñ¹øe.žÏÅÿò ø÷\ü[.~‘‹?ÏÅsû»£çr±¿[ì+ÿËϺ£QâgÝâ¿Ï‰þÐâèŸsñßæÄ?͉Ÿº•ŸæâÙ\ü$ÿ˜‹ÈÅßçâǹø»9ñ£.~´Uüp©øÁM#ѶŠïo]ôý9ñ½uâo¿µ.úÛ9ñ7ߊþf±øî3Ñw‡Ä3âéïôDO¯ßéßv%¾='¾å¶ÿ­uâ©?鍞:\<ù×CÑ“Gˆ¿þæÂ诇Ä7Š'ÜÇO¬ßýÁèñ\|ýk£¯?(¾~uùkc/ýÕºèkÅ×ÆʵNüe.þb«xìƒÑc¹øêaâÑ\|%üùñÑ#sâÏ?·"úóãÅÃ_^=¬Ä—Œ¾¼\<ôà‚è¡Añà½ÑƒÄ½â~v.¾”‹/‹ûŠÿš‹{sqO.î^"îZ&î\,¾à¶ó…9ñy>?'>çÊn…¸Ã…;®ŸÍÅíGˆÏäâÓ¹øT.nËÅŸu‹[sñÉ[ú£Oæâ–~qËXùf×P7ω›ÜWn7ºpãœøS·óz˜øD.nøøƒÑ
+¹øøõ£?(>~uùú¬‹®ß(®+,×¹Þq].>ºA\ë¾xíÈØKâ#î«Y-þ¤W|ؽõáÓÅqá¿äâC®>´X|p@|`øã\\“‹÷çârñ¾\¼7ïy÷ºè=¹x÷:ñ‡¹øƒ\ü¾¿w­øÝ\¼+W/Wu‹wæâÊ\\‘‹w̉ߙ—çbße·EûrqÙmbvfE4;'fVˆ½sbÏ•âm¹Ø=}l4}¬Ø5'vΉsâÒ\¼5S¹Ø¾¥7Ú®Ä%¹Ø¦ÄäÖîh2[»ÅÖ±ò–ÍÝÑ–^±¹[LlŽ&®›ÂÁhÓ°¸¸[\”‹¹¸Ð­_˜‹Þ²"º oqkoY!ÎÏÅysâ͹8×­½tn.Þ”‹sFćÄÙg-‹Îžg¹ÎZ&Î|òèÌ9ñ†×FoX&^?(^7"Î8}(:cXœ~Ú`tú8íµýÑiƒâµýâÔ9qŠŠNvH˜9‘÷GÙ1Þ/šuQsN4Ü6ëÄØÉ¢±\œüšþèäâ5ýâ¤û¢“‹ûÄ	[Åñ¹¨	‹t‘HâåQ²Nĵ¡(^.âGʵ6$jW—«ª7ª‰êXYõ
+9z[$s1ê¶?z›8®WlX$^}ìñÑ«çıÃë¢cÇlGoGåâÈa±~É`´~D±Z¬¯:Ü5À1¯‡ŠµA_´vN¬Y ÖŒ•W‰UÝbdD¬<lY´r8lÁ¢è°eâ°/9ÎøPyEŸX¾ìôhù•b™]vºXš‹%ƒb±C[<'†Ý{ÃëÄÐV±hP,ÌÅ [ÌÅÀV±  Z°H,x¤Ü? ú¯.÷¹OúæD¯=n×z‹ž«ËÝ}¢{¬\ÉEW.:sÑuG¹ˆºE4V.Ï	±U”Ü·J¹c¯¾(AŸ¿nýƒkÂcþÿñ/ø»ÿ7þ[¥`[~my[tk ‚Î`ÕCN²Ž‚ #<â¾°+zo©÷ØÓûe0ðôþ§÷.\3¸nÍàšmåàÀ^±âÀOók;û_ø÷=G¹ïað-·Ázø{n[ƒ_>]r궨<pÀ}ý8÷]÷½o…ÛóëÂß˯t¸×AyUô‹`e°&8ulýÊåQ©Ü±lAðþ‘-øHïÍ‹®ù£ÕQ%\¾,¨”/X”FµOŸ¸_=ýôþ…õú {[~þÀóûž¬×—ÔGÃ5q-99|M׎8|mGçàkª*u8Õ‡#W…Ò_äm¾u¬o:÷¬‡¶]þµÏ‡Áë/ËŽÎ?N¹Çòì«6_»pƒ}Ãx3<þè#ÿêÏ7üüúkNõWò·gAôÞ虠ˍkVgŽ­[Ü¿àáŽû—_S¹iGÐ)Žô.¨,]Qî‹Gzt.^&Ö¸VPE.)ê}°ên©ŽU‚µk[{æÚr¸1,îS>â˜ppÑü‹p$*®Y]ì‰XxÁE]ðÌ?ÎÌÎÌþcéÔ+Þ“ÿ0ÿî‹ï*5Ã4\²M|øÌ׿î¬ü±÷nÞ21‘_^ZöªG¯ùÛ§£gzrçÇ‚âx»úwÔ[õ_l©\>²¸«´¸;ˆ^=°!X\K]mìw-:_ËÑ»Ï\ºº
+V[•:<tUY²xáðP©³ÃÕ¬tÒûöÿê…ç^üexmxNøº}SÛ¶M½=¿Ó-o-ß}àm?ûñßýsxøÄÌdþ§>“ÿçäÌDÑW\=Êßpõ¨ÇŒ
+–éx¸ôHpMWºfDw«½sèEÞ7ÐsfÏîn,z‘_*/xqOé’?–_=“ÿ(ÿYþ£ßí·[:ÉmWÇ~1øJɍ
+…냧߹àœÓï8ç‚óîw­0¦Ï÷2¼o ‹ÎŒDkÃ…ï*66wLë¼xé'Û\ÿìqí¤Æu|~aðùÞ^·´òê©xõð1¾•Ü©ñ¬ë?ë	–-Y4°ì¸e'/‹\[­-
+-¬ª…q­$VƒÁšÖ³Øv磏Þy×£Þn¯ËÝù,¿$üXù{ùýÿ’Ëÿ²?,‡Kò­ùGòkó­á
+á[ÃKÃæ]«ïu‹9¶¸÷ó=Ÿ®©,êë»^]îér;;ä»ÚüÑ{¾8oï†Ã¢íŠT^søàšƒGò¡ÒUáÊPæOæ?Éó«Âw=³ûw~gwôÌ‹?û—_œ+?œ_¼sëÖ­sûÃ/ý$zµkõÁ§ÆŽÖ•‡–v÷Œ¬*‡_-uéçËŸ_wÃàuGŽt÷¬ZѬXÖ?Ô¹lí‘?Üïä±¢Çõi5VþӁŸ<FÇÎÙ}TX_Y©¯ª¯>mä´U§­>¯{ãÊG.ZuÑê·¬yëaÓ+§G¦Wm_=½zך™ž™Þ™¾+V]±úŠ5×ö|´÷ã#ׯºaõõknë¹­÷¶¾ÛWÞ>rûªÛWß¾æȍEwÝ:Z¼ÊŸCkÖ¾jýàâ²ßõãÂ
+Ž%^µF•ËßxÇ϶¿ï÷ÏŸ½õWßΐçóüÀž+Þù‡¼ç#ÿd¸:ìGXŽnËKõgž8¾tzâ¡ÿü·$ͯ;çõöŒ‘5£ß¾ûÇ¿X×j§‡\;}Õ£Á :¶d°§ËQhôHÿu•àš…]‹»ëE\x°ç¨çF½olÑîE7.òý{hqQA×Å}—qòò÷¾ïr×5ÍÈ̍ž9ð®ûo¼ñ~qՁwå_Í“ð$‡{Rt}Øáö†;ÇNëXÙÙÕ­,G]]ÝIOw9*W’(*÷$%QêN*ÝB”J+E©×w*л®;*‰|¥§«·§»ÒÕ•°÷t}OŸ~gŝ:Ýç\pú=ÅSïË'ÑKŠ.æY¹8ýçuDÏutñˆž{åúùkñ'D÷pi 4
+DÝëºW»åøÒɥ㣓£j÷¨[ÆZËE¥‹¢‰î/•îê¾Ó-Nº£JW¥õtô..-KÊˢᮡÊòžå½ëKGŠõå#£u]G÷ן”¡Ê*íííR•šÛÿ“û_+lùÔÈTNëÙlßRz‹xSùMÑÙgwžÝõ–Ê›z6öNÓáti—Ø^ÞÞ9Ùµ½ri÷®ž©ÞéÞ}b_×Û+—õ¼½÷=ÐõÞÞ/–÷•¿ÝÕõpïénc‹ÖTÂâëé¤ðma)½îQ
+wå7åYþoùóy=ó믖O*sÇ”§ý!¯—A¾ÒMสÿÞÀÍKÇ=VHí£áðšØi¬ûìá‡ÝyÞK?)ÿEùî¼_|bìèJG°lUOðí%OvÜØÿÔàê'V}ã°|ðºÞàð%bi_¥¯ç¤U¢oè„#\G{ìywx=<ÛÒÊúùü¼Î¹wÆqëOZ}Òš“׿nõëÖl\½qÍ.w’½sõ;×ì^ÿþÕï_ó‰ÕŸXó¹ÕŸ[óåÕ_^3¬FFWŒ­zãÈ™«¶ŒlZõ#W¯úðÈWÝ2rÓª»Gî\5Pœs­óÍuà“Âuƒkâ~wQœeÕ6A^].ݲûmœ5ù¾BqO½÷]Ÿÿž›•¯ýÎþñÞ¿|ÓÞž	sòÎ8-{݇võîßuÛ¶ß¸å/¾t؛ްaC8xØÊmqáî<»¨cÈñóa[ÑqsïS‚›‡¯[ðøŠO.}j™h.[Ú[é[>°² Dw¢û¿ÿÙÖþÞû†‘M#¥pã:Ï‚­J‹b¬PP´«òúa'"Ø{ùå{÷¾ãï8íÞÙ'Ãîü?žœ½÷´üúpÛûôM7}ú37Þø™Ò3›7æ_Ì_tË7n¾ÅU§u\‹ã»ãµ,HÇ–O„O—ûŸè{ºûæÁòÍKÜaZÞÙì†NX>pà15/ ùó?ø¥«ØÅ+®ZQjç.×–é kG¯!jq9~í‡ßpí§>uí9;çsoο•ßžwÞgË'å?T£_øÄ'¾ dþƒU«Üx`Ø-骠Õ^ºöêwðíµäæà©þÁ›£§º®ë<ü¤*}¥±åÍžŠö*úL!Ï>ÿìþg_n¯°PÞÖQ-jSU‹E{ÞVïN»{öÉü?Âî'gî¹¥h¿=—_.*÷«ý·l¹0|m(Üòڍ¾^´`ñhÕ͵WÔíÚk(XŒ­	†ÿ6¬<Ñõttcoø7Ko\øxïu‡­.u
+÷Y©oÁ	‡µjXhŠo¼g[­÷óúè½Ç­<yeQÍá5#áo6Üê ò=0ê>ð`ß
+ïÛsW^•_•?•!<=\v…'åÜ·iûÛÞùÎñ,ß?*Ã8\.Ïýð¶+gwÑŽ¹úË—»V<28}ìˆÃˆ`ø‰ÅO/»qáJ×+÷ÝsøÍ¿<%Žè
+úúdžW7;N8jþ<,úà³¾Uó_þ¼E×´Go:ºèŠ­VkE«.‰[ìïúá`k?b1ß\c‹Û\3>ìýæìݧ¹&ÿlþÐÔc[.º÷‚;oÝ?}ÅÛ÷î¾âŠ‡7_ŽÏý:l\¸å¶ƒù¿ç?Y½&\’Ä×ß*:n½öúoýȵ·çÛ¡…®Ocÿ£Æú;~ÜSþd)
+ûÊÁ@×ÀGìŒÿÆ*gV6UvW®®”_ƒÝn+N†üúò¦_ßÔ1”ÿ°Õ÷_ÞæȃO–¾`ààÀm&Ú펮ŽØLkC¿Úïϛۃ ó^×ÖScG­^X)w«;:—.øÁꧏÜsØ¢Î`haoW_Ç©C}O]µ¢oåÀ~tç4ie¡IN,ĵÞêǝxâ³ÏŸøì~Çn)æcV­]æúÝë¯^ÿÁõ_Xß¹1,NûÅÃn‡^ž5¬ô}ºØËáÖçå²wåq7{	íë·M—òëÆξd·[ÝÞüì%3w‹Û¶ïüùO^<·tjßaË÷]úé_ü~éÔ.ýÌ'^ü^yÓ­oÚÌ·M´Ðíß’ [ê9ìþÁ§†¸§?,õ§öõ-(†•ž­N,úIÁÜ£÷nZvõ2úÅ®jë=7¼\»ha~]ßÀð©v_]‘³îÛõè×K·¿xîtøñíZ~øúÏ}¬UÍ<ßÖ»zcÛW»±í̓›{/ƶÍgˆæð	¯ÛÞ—.:yÙ)Åø$lïˆmÃÚÒWö]yå¾Ù+®˜uJhÜ0åÇùßå÷‡§ˆw|öæ›?[< ÿZ¾ß-_u8äíërG~nt‘«KÁK'Œ­|™—ï¿.ü;qÏJÇIc-vjcògŸ}%5­;Øpø¢¶ª–íÒFã·:Zßëèé–ïíè¾µÄEZðz‹™ZÇKìwut<¾x°¿ÒшGzþ¤ÿñÊ=Ý}A×À¢ó-*:_×Kèók1®jl	løÊCµDì?nãqïûHQsÏ•>R·xø®?{ñ@yÓ—vMŠ¨è'ouú±Ùá®~86Ö×[êïIFVD]•¨Ü¬Z5²Î½[Ú2ôÄðÓKo,߸îñ—Çßo\q¶€Ÿ¹öuGÜóôþgsþËBmΏÚúŸs'áüµwwõ¸ÙÂØE•J¥»ÒÓÓÛÓWY¾¼wyßòþ¥ŽíÚPÙн¡gC£V×»N¨œÐ}BÏñ½Ç÷^9­û´žÓzOíÛ×»¯ï®*t?Ðó@ï}ëú;ú;û»ú+ýÝ}=ißÉG]|T¥‡µ
+ÐË‹[ôƒŒ7?@OŠ“oÉÞï^¼mËé'‡‹Î_È禟»òÒ˜™zëkwžü¯<`Ë÷öýbt´³¡§røMŸ½çÞÃjµãë£ÇõuÜògwß1R´ë
+w<oþÔÍžvŽ-ˆ›Ã{ºnº»z*¥ŠëdûÏj›.ž~ç`ñ´°5æí/øåÄÇœøØc~ÿØþçO,È¥ –¥''/*¹-,<³t¦8sxSi“ð;ZæÐâÜ7<|°:Xª†oË?ðš¿”óé»î¾;úÓüÑ—‚|ÝëÓ—‚»žà¯iqÆMî\í(orc‰ÆV8±	{0ôÔ’ëÂ{v”‚EúOqÜ1°Ü«¶§=7¯8È+®.Æ‹\ÿr3ÒÅK|óÔñ#n
+·—úŸâ¸£ ã³þëÎG¿Þ[ºc÷ùsÞ½oÅáGÜñ±ÒQ¿¾é–{„Á©Ž£Wºúô†¿ûŠyFÍÏ3jÅ<£VÌ3jÿ›óŒÿOçÝçü_3Åø§a7©ˆKq4Ú}Jk2qq÷Žî«ºï,¹%rK÷#¥G¢ou?Õý÷¥¿þµ{ÉâҐÿ,Œ:ÜfV†º÷¾ªtLtTÇÑ]ÇT^Õ³ÎM,â k¥¢ã;ŽïL»tïÉý§”ü´â”®S{Ïç–Ïíº rNÏù½÷o+m*oŽ6ulêÜÔµµ{SÏliwyo´»cwçî®™îÝ=ïßÓñû]ï­üaÏõ~ ÿOº>ÞûÁþÛJŸ·•?ýY×g*·õÜÞ{_xÇ}]÷÷þeø˜x¼üõŽgJßSþ~ôÓ®ÿ^ù§žŸõ^К|¬‹ÿášžpÍ©á…}9<Æ=.Ì¿—_þå‡òËË›åË¥¿¾I”ä®Mø­Ë‰¿u¹®µ¼¼žè–í­åýmËwKC­åÓny¶ô¬xøË·Å·Ë–o/?5£ëÜ’GyÇ‘­ÅvÜ×1×9ÖùÇny¼ë²®§*KÝò¡åÐrh9´Z-‡–CË¡åÐrh9´Z-‡–CË¡åÐrh9´Z-‡–CË¡åÐrh9´Z-‡–CË¡åÐrh9´Z-‡–ÿ¯-ÿ%x؊ŝÅ_—»GGð[ÿ‰ßX|åÇkƒ`]°>8*Žm­«j$Žçóf{Ê©ÁiÁAð†3Ï:ûÁ›Î}óyÁ[~;òÿCÿÊÁS­çrÑ>¿Ø÷ÒKîyuñìÖËÁ+à7ÿýÍñ?ü[Ûz.î\\ï­Û¸i)ÿOÕVLÜ£øÁþñÁoþkºG˜À§¿ví-éþ½!838+8;x£{ý¦àÜàÍÁyîÕ[ZõÂÑo­Ûü¿®ß\ýEð‹—~ã
+ßo‚ò7ƒmóÒ×]‡ú?ðÝÁ·þÏ>Ê·×Ì?:–µ·úG´ïåGiîþèpõ~äÊÌ?¾|¸xt\å>s®ï'ýï=ŠNQ<¢mÁyÑÁå‡[ñÂh§‹;yí¥‡ƒ;Ú]ç·GwwDWùïñïîû_
+Þ*¾¬pŸÝT<:·º#]´yéø¸ëÎ/<pñ‚¬òé«_¿á®ùøŸ{ütÁ7+Û\ÙƒGð òM
 endstream
 endobj
-7295 0 obj
+7293 0 obj
 <<
-/Subtype /Type1C
 /Filter /FlateDecode
-/Length 7297 0 R
+/Length1 82308
+/Length 31285
 >>
 stream
-xœUKLAÇgi»­ZPºT‘îŠ(­H at E¸(­ÄPƒŠ1&6”¶¡”>  eÑÀB4-úÀ!QkŒ.DÔø¾.¾ƒz@¹h„¨3f9¸@”x™Ì÷Ÿß÷ûfÒ€aØŠ"»“>Rf¶-é(CbP’„mDOÐSYØ›eŽíRb¬RÂ*¥C¿_¨`g<lY
-k€ÃœÝz‹ÕUGWU×SÚc%ÇuiiÛ–“í999T¹ëï	e0Úè*3µEÜ4Mk­Ñ\ŸGéEÚd¢+¨*“ËZm£Ê*+•m¥e&c
-U@›h«ÕÒ@iõ:jGfæötqÙq®-·Û¨b‹ÙBQ%Æ*»©¬î¿  ³œ8h´pä‚P Ž\|4¸ƒ%a¶˜,4‡fy„ñØ[­ä%ðÒ«ÕæTaµ?«…*¨šýã`BêW!,—þø˜»I››’’=5û}zjŽûYÙyŒ‡úç7ŸAƒ¾ƒœà,Š}=}Ö7)Äâ®VÆÓìcBäM\Ð
-!:d7ðpèo㜋„W$zE"ŠÃL 7ÊŬٳÁx¨—ëx9™Œÿ;ÇÃW¼u¬Eá¨\ý€ ÃK²099_Q—l#î^ºB|8o§ñeµúÕNrªÀáãù.ÙâÇÀ|nå14OªÙñŽHÓ•êOy÷ÒX…š!Ä	k¥ÀÄÏPy'êóú¼íç;Î1dEM¾½˜ ›÷ÒóSÁKÃ_Þ<šagØÉÙŠEkL‚0ÞÊ«æxÇ-xíö:H­®¾|j „Uºü“…5!óˆ‹q0“Ì3Ì{†›‚ul½‚ð—VfíÞ}\Ãɉ‚¾6_‹†(ô0­nrX;¹¶~
-Ñàz¤_>zæ®û9«€²é‰WQÓ%²fÈè?Äíìmï¶DWCàl0¸~tâÊäûûµ§/jˆäÆn®­/1ÀùB$á-'’CLo³†ð·xÅ	qŽÚªH$‚­äW)•¼2€?ŠInJ
+xœì½|U÷>~§ÏÜéDêR	mw–’²@H 	UT–d“,$ِlèMª€¢"""*¢bCDEÄŠˆŠØ»"bCQ±!6øÍÌž€è×W}Ëÿóù“—½wîÜ{žsÎ-Ï9—/"B2šƒ(4$7¿‹¹ˆ¾«œÏá…åáÊÄsÍùXP8)îCÑf)NË;ÎóñâÊ’ò‰ö¤ñ‘Î3º£¤ljq¢¿6!zQi$\tX~l'"R³Öî¥Nƒ´µñA„¨EÎs›ÒòøÀ;â|Œ)‹†ÏÖ§uhWžRÙè„àȧîtZ}áòHóñƒopžŸG¨7_«ŽÏQ>¡~¯"ô\«ÊªHe/îkg<>†SJÑV´ÛùymDkˆ
+Γ«ßD§e¹ÍG5NËb7±˜ìä´m at GÐ^§çB´›ÚH#b 
+8­½Éè;¢ mqd¤‘±4¢sè-t½•þ„Þƒ’éjz=–®&ÔMÌpfƒó7…ÚIèYÔm%ö£j´:D¨ít­ ýÔj#úÈA¡ù»Ñr´Mwt±ˆšMN'óœ–]Ì´Úù‰9ï÷k‰½ŽvÛˆyhZEÑä ´–ØçصEó¨r¶ã“ Yìè¿Ë‘µÇ¿UÓˆÙG`tœìè´9Ú;Xã¼ÏfT'fŸ÷sÍvÐzv+kq­×cˆÄaöJ´í¥ÆP©·‰ùtkú6z Zžð 5-wd¯vÇ°ÅÄTÇv÷gº+œL%6¢CôXnœ#{§k‘ƒ¹…Ìs,*F۝¿“Yͱ©1ŸZìhê¾m†öpé.ÎxG7Ó±¡DãÚtt7ÚŒ:Q+ÑrG’g/›ÌuF®¡86/'–’GÑ*u@Åô—Ž¯‘…ÐJ„äX†¦H%ù´MdÛ¬¢Mý†Žô=3ªe§¤Ó}çÛ„†l’§ú¶ž81d$Ý„µ‰iº‰jËo¢Û¶>ð{/tJ4d¤oÓ¯¡›á´åtªî“Óì´‡2¼w.è&¦­ó¿¬±›|…¥¾%Ú’Ö=—h‘žœ5ëØ]~¼™³?øᵟ†ÊUnË)F¸-Ö
+ª uD¥HB$ÒP?Ä;;­Sê”îZjLô99ná‡:Dâ ÔID?BB"Ùê´Sï	uIäX¨³“ó Î#ÝÙ7‰ºè¬"uÙ¸¾ýh¨+Èî5ê{Ýuѽv:ˆ-8úzèn@
+‰ÝP'O|uÊi?u5$[AAÈL¨³È"ˡΣVä2¨‹¨'ùÔå¶=©æPWPiÏcP×PÃ^×@]G|¯‡Qº³Ö*ÑTT…¢¨ÄñpùP{Tè¬*ò£®ÎOÀ©szøPšÓ'¸Ó;‚¨%9­Y¨ÂéßÙ©¥¢2çLJòNʪöž"NqÆLr>‹œžøO v?‰Zà Mr°Ü]Qáôvõ;cþ5Ä§6Þ7Ü9ÿ|R©Sw¥E¼aÏ"çœwÚ|Žf5v™óTè<9¸åN÷F(=V9µ*ZR÷µ/ìàówíð›êK‹Æ«ãU‘py’/«¢°³/µ¬Ì—çöªöåEª#U“"Eño†vw‡„'•U”øÒÂ¥¿30#2><¼ÆÙ<ኒHµ/\ñE+|•5ãÊ¢…¾¢Xy8Záhvª‰ùžÎ± ƒóÃÎCšcLMp*±Ø„?7äÏôîy»ÚñQÌó ßñ¹ßY9hx¤ª:«ðù;û§Š:MЙ°Š=i‰9ÃŠ«Å-ŽU8.Š;G޼ǝY뉺8?E c’#£³36æ”UÎLF<yUÞœwväFœ1¨4¯ìÙ¥K‘#tRMçêXMUa¤8VUé\q^gÖÓ vÔ®Óßî÷»î"Þڍ8+(†&;}Ý•úϬ?WRçÍT§O©72꼫ôìŠ{kÝõZ•7ÂÝ®ÔI§yòt;êöWÍ)ûë÷¬ÁÎÏ™lO¬°S«ïµßîtŒ:ýü§NþÌ:ó|×ÙuÞ`¯÷ZÜUXîùz‚ÓsfàÿÒŵlˆ'¯Ü“V·›¢žN¥Þ»ØUâ¡TÀ¬'Á¼'f+–Xc‰õžäéóf¿Â_	;6s¤ÆaEa„=	Oc÷´8}=zýÜu˜^+ÁíÐ=±–#Þ†O¬½VõVI+oæܱE^YíéUèŒ	ƒ}ØÛ…Î
+-÷¤Ä½7µþ)vje°“ÚŸÔ±Á=µ\ýãÎúM¬~±Î'nK¥·kŠ„Bot­6Ežqo­sÞƽ·	üI°›Íj<)	ŸLöÖ@©w*ÅÁ3å^[}‹jm¨:eU&´­ñ|˜TovÜz¹7Ÿ‰¹ÆõNjgtÒïØ‘tÒÎ.Þ	âó$'öCBv¼zêìÿ±ÕµžKh[yrEÇ=½êV]E“=”ÿ)„ÚÝPìê`a¤b‘÷éb$y¥ë‰ñNBO^¢Oíü¹ë¸N¶Ú*ô°‹<£ iOow€vaGbÌ;êæ þYTçßžNÿ8ì†êSúÖî•:Õ?êóy6‡=ͱw6ŸºÖÞHpIøæ3æ± æ¾Ü+ëΏ?3q‰\f
+ƒEOñԍu}2¸%îú¼ØÓ±VR™·N«N¶$4u}ZToÎ믺Z
+{ŒõÎŒ2ï	Ÿ´¨ÈÓԝ¯ŠzÞ(9…WHµghØ[=‰µ[‹qºªÿO›jµÄ`AÝ
+{sôç58çtœI·$˜ï2o\ôwNs|rvª¼s6ì+urk[ªO®ÈÚýr:{Dàœ‹xVÔ"Mö¬*òÆ·:¶:i÷é#°ó®–m[Õ[e‰=“}¿Œóö{¬ž®5°j×É$çmô‹ )žŸ+`'W:?	ö
+{'jääˆúóžÐ¹¶Ÿq§”z'¼Ï+«ALj·’~oÔžug:»‹<&¨ðæ½¾¿ÎäU\Ïsõçð¯îÕjïÔ¬åêºÝV»“ÜÈ¡ìdìQ#N•Xé­è	Îg	ÌX‚ÝU…OžªÿΓê÷­{$|X|ÒSPÈÃÉE9Γ‹“ë< N™ç½ËrÚ|N—ç¼î<e8­Þ¼¤zoÜ÷­¼Ý8©»sÑ0OVBFžóéÊå´¸²}Þ³û4ÈéŸãÈrdžÐH#äHËw4Ëuê®ìÁNk¶S† Ÿ;"Ýiæ<»õþȍBx9Ψoï¸ã\]š8íu¨§j•å!Öj6ØyÊs䀷©Žì,Ož«’¹õÐ3á¹<Oºë#W²+3ÝÑ(Û{r[‡9å§_¾çÏTÏ愶9ž
+™Îû„-!OƒÄL$4JwÊ!¶Û£¿£Wç© z&yóèÚ“áwQy½šåÂ,»õ:)Á—	=\ÿ?‰œïÙŸíüø<ûœ–onRùµrk×NO‚«7ö¼1̳/ÕóC®‡æõs½èú3ûäŠË«7+éž¿Üys5ÏðR=äŸÑ’ZiõgçL«ŸDèïÙò<•íõÎwürúglI¬Ç,ÏÖtðuBfbÝ'ÖDv=ï¦{6º3;ÔA
+ÁšJõ|wªî<ðô¯³"1©ð™^Ïgu³Ÿ³[«O‡\p¯ŒðöbÈë•êÍuþÉ=’éíßÁ ù°“+¬îë3÷¤f§ú·vÕöû3gGBV-ö©3˜á­§lÐ0ÿ¤7=ðÈMœ]!‡×
+½<'~òÜ>•¹ëGuÑhý¸3©ÞY[?HœÂý½¾å§õ«kMdK	ΪËuêÇngÊ°k³ãD,_õÖE‰³;‘Տz‹¼ø<VŸŒJb^;™LöÞÖqz%ܝÄNÉó\ä°ÇýI'±j¹¨NV"®{Ñ‚‹V}oþ>Cáßd†•ß'P&{õ8D&®}5Ð×mŸvZ6\{ÿóÛ9ðqjm9SäPßÿUÞ|WB.õ<ìÆ“AnªÍËê|âz qïV~ڬ׭>WZOtú­‚냒zšy¾Æ(q‡çbbJ½ãúïß:ýÓwÖÿK÷Aø”û Ó#¯ß}>ã}ï?|„ÿÔ}Щ‘|a=êî:j{þ¹Ô3Ý°àÿÚ½’ï7÷Jøÿ¿Wªw¯TwÃðÿÍ{%|
+Ãþ÷î•ð²µÿ…{%|Æ{¥:‹þ3÷Jøîþ3÷Jý«÷JuÿêôOÞ+Õí·Sï•~}ÿv)‘Ÿ'"‰ÿµÛ%ŒN½]:óíÆæv	ÿw}õ<ø¿}Ë„½5öÛhæ?Ë„ÿ‡o™ði·Lu¹îò–	ÿŸ·L¾ÿØ-þn™|ÿ¶[&ìù`¸#u §mÂÛ©ÎûÿÜÝ>ãœÿ·îŽðoîŽ|ÿµ»#ü»wGuw@ÿþ»#ü/Üý‘ÜïÝQíÉúûŒòÛün|êßÒü“7>øoÝøü6gûk7>¸ÞÏÝ;ü74ñßÈï‡ên°‡ã>uF(Óû‚–ûU5÷Ën'¿çk_‰øÆEÊb“;töý‰/¶uöõ/›ZYZí‹–Wƪâ‘"_qU¬Ü—Z™_«Åð¾HW“ø"]}ŒëЇGªÂ¾„j'¿‡;ýáüÛïíýé¯üùNCŽVã°/^.Š”‡«&øbŧKÁxH¤ª<Zí}i.Zí+TE¬’ªp…cz’c»c–3ÌñXUI$ɏùÂS}•‘ªjg at l\ÜñXÔqAØWè(žñÒH­Ÿ
+cå•Nw·C¼Ô‘îx9RQíx¯•ç’VaE¾puu¬0vðpQ¬°¦<RÇ]}Š£eÎ$µw%z|ù±âødÇý­:xšTE*«bE5…OLQÔ1,:®&quÀ§Hr¦¹°¬¦ÈÕdr4^«‰;Ê”GÈE¨J¸Ò[SíôwÍIò•G\«±·@ªK“êa$¹˜]bU¾êˆ3N﨣*˜´«œ#¶Òut'\çM.uÖo¸ÓP\SUá F¼E1_u,ÉW]3n|¤0öÇÊœÅæT«(ŠºvT÷ĸÀ›ñ,H¬"O“‹ "w¦¡:ÑêÎJeÝ
+H¼óU—†ËÊð¸xÍQÃÙ%áSìŒU8ë¢ÊW«ŠœÑl_|je¤8ì uN(uêÛòðTg·8Ë¢ÅQw¡…ËâÎÒs*ŽÐpQ‘gyÂuî
+W9zÕ”…«°T©Ž–Txj”$öª3È]¡áBGHµ;¢VŸêÓ‘\‘Øð.;³ S«G4G½Š²©¾h½eŽ]sª"î¯Mx}ÝJµëHw^j·GÄYs‘*oÐäXUQµ¯ÕÉ}ØÊÅ®}[¹Û¶•ç2gf²a¿Œ‹8;É•Zã́ë“I±èIÅ"SâÎŽñ…++íWq_$lw$»\7)¥á¸¯4\íHŒTœâwÕÕ­î"_ME(\§*ö”KXøG³Z+swµ7mî$…}eîéáì•ÚŽ•áÂ	áÇ0gVÄ°»TÿµEu
+”s`9*FÊŠ]¥„|™¹9¾üÜÌ‚©y!_V¾oH^îð¬ŒP†¯Uj¾óÜ*É7"«`@î°ŸÓ#/5§`”/7Ó—š3Ê7(+'#É9$/”Ÿsó|Yƒ‡dg…œ¶¬œôìaY9ý}iθœÜ_vÖà¬GhA®7De…ò]aƒCyéœÇÔ´¬ì¬‚QI83« Ç‘é(—çKõ
+IÍ+ÈJ–šç2,oHn~È‘‘áˆÍÉÊÉÌsPBƒCŽŽ ôÜ!£ò²ú(Hr8I¸ /5#485oP’Ï–똜çóºtv´tdøBÃÝÁùR³³}iYùy¡ÔÁn_×;ýsr‡pfî°œŒÔ‚¬Ü_ZÈ1%5-;”ÐÍ1%=;5kp’/#upjלZ·[Âœ:w`w@ÿPN(/5;É—?$”žåV?få…Ò¼žŽïOd{ê¦çæ䇆sœ~µIxÄ€áêü/ÝÓÌ3?Ç1וS›WpR•Yù¡$_j^V¾;#™y¹Žºî|æfz+`˜ãOwòr at _wŽÜ¶ß®§—;Ì¥f;ó]5œ|J_gu…¦F*ãîچ͝8½c4qv&y«6q8K¸…³qm^Õ¡%ggy¬“8ÝêÛ¥ã¤ÄÑëÎêv˜(qôMŠ8'`µ{”ĪpÌ=L&G«½îP`y,Áy¾êp™æŒrw‘×Ë9+Ãeΰê“jž²¡p-VVE!“«¢qç0ñ…kœÖªè4 á* )Ï_.JÝáÐ¿*R]é°TtR¤ljg§o•Ëež&ÑŠâXU9˜î¹¯0Þ³6TˆûJ<áE±8ŽU•töaìE\;tú³¿òðÏÄA8ùþJ„ëâ ß_Œƒðoã 8ä=IÕµœq† µ.`Á'VòÕÆJø#V‰yø·ÅJ8±aÿV¬„ÿÁX	×ÅJ¾¿+áSâ‚¿+áß‹•|>VÂõb¥úÛ÷”pÉásçø§Â%á’ïo…Køu½¼ñŸ™pEÌ÷·C&ü†LB&ß_™ðé!“﯄LøŒ!“ï_	™pAêðÁs]µSü¥è×Yþw¢#\ùþNt„ëGG¾¿á3FG¾¿¹‹õ”r2ðÁ¿øøþ…ÀÿqàãûöŸSc‡ÿ; ‰×öïç
+¸³Stþ;¿3ØÅ»·›àüíâݝyÿª×Ùû÷ÕJ§íÔ-üãß0ì29:!Ú%êVS:W–Vvó/ý.'™øè³Ðht†?Ö
+ïw¢ID!1ˆEâ‘€0‘„d¤ iHG2‘… †è,ԝ£&¨)j†š£Ž"-Q+ÔµAmQ;tj: sQG”„:9öwA]Q7ï·>mDÝQ2êRÿöBç¡Þ¨ê‹úy÷ÜéÞ}t¦÷oYh äxl°÷/CÐP”ç}{v˜cø4rl9A ÑEh¬ã†;ÑÍè4=‚V¢OÑ´]Š®G·£õ‰– ·Ð<t%ú}‹–¢kÐ"´½‡¾FkÑFô=úE7¡»Ð³hºsæèrgîv;Ž~=‡^DÏ£=èt¹ÿ=—ÐËèg֏ +ÐkèU´Ï™ÛÏÑh±3)îÜ—£2gBÖ9îŸèÝÚV{·³“œ•ñ™³¦¡©h:š‰f ­èF4ÍBsÐÅè0úm#(‚&‚%8‚G¿¢ã„@`B$$t‚@„L(„J„Fè„A˜„E4 gˆ³‰ÆDtýH4%š͉„hI´"Zmˆ¶D;â¢=с8—èˆ~B¯ID'¢3Ñ…èJt#üD€°‰ ѝH&z)DOô:Hô"Î#z}ˆ¾D?"•H#Ò‰"Ddý‰DÚ„î%ƒˆlb0‘CäCˆ¡D‘~F¿ ÑGD1ŒNŒ F£ˆÑÄùÄââBâ"b,&Æ…D!Š‰¢”ˆ¢‡‰ñÄ¢Œ(G£Oˆ
+"FT‰*¢šˆ5Ä$b21…˜JL#¦3ˆ™Ä,b61m .&æóˆKˆùÄb!±ˆXL,!.%.#–ˈåÄåÄÄ
+âJâ*âjb%q
+±Š¸–XM\G¬!®'Ö7눉›ˆ›‰õÄ-ÄâVâ6âvb#qq'qq7q±‰¸—ØLÜGl!î' $¶Ûˆ‡‰íÄ#Ä£ÄcÄãÄÄ“Äâ)b'ñ4±‹x†x–xŽØM<Oì!^ ^$^"^&^!ö¯ûˆ×ˆ×‰7ˆ7‰·ˆ·‰wˆw‰÷ˆýÄûÄââ ñ!ññ1ñ	ñ)qˆøŒøœ8L|A|I|E!¾&¾!¾%¾#¾'Ž?Lj‰ŸˆŸ‰_ˆ_‰ãÄ	‘I’I“É’É“‰I‘”H™TH•ÔH4H“´ÈdCò,²y6Ù˜lB6%›‘ÍɤlI¶"[“mȶd;ò²=ف<—ìH&‘ÈÎd²+ٍô“Ò&ƒdw2™ìA¦=É^äydo²Ù—ìG¦’id:™A†ÈL²?9€Ì"’ƒÈlr0™Cæ’CÈ¡d™OÃÈáär$9ŠMžOŽ!/ /$/"Ç’arYH‘²˜,!KÉ(9žœ@–‘åd#+ɉdYMÆÉr9™œBN%§‘ÓÉäLr9›œC^LÎ%ç‘—óÉäBr¹˜\B^J^F.%—‘ËÉËÉ+Èä•äUäÕäJòry-¹š¼Ž\C^O®%o ב7’7‘7“ëÉ[È
+ä­ämäíäFòòNò.ònòry/¹™¼½[ÈûÉÈÉ­äCä6òar;ùù(ùù8ùù$¹½ÞAï¢÷Ñ›h?ù¹“|šÜE>C>K>Gî&Ÿ'÷//’/‘/“¯{ÉWÉ}äkäëää›ä[äÛä;ä»ä{ä~ò}ò ùyüüˆü˜ü„ü”<D~F~N&¿ ¿$¿"_“ߐߒߑߓGÉÈcääOäÏä/ä¯äqò…(‚")Š¢)†b)Žâ)Â”HI”L)”Ji”N”IYTª!uÕˆ:›jL5¡šRͨæTÊGµ¤ZQ­©6T[ªuÕžê@Ku¤’¨NTgªÕ•êFù© eSAª;•Lõ R¨žT/ê<ª7Õ‡êKõ£R©4*Ê BT&ÕŸ@eQ©AT65˜Ê¡r©!ÔP*Ê§
+¨aÔpj5’…n FSçSc¨¨©‹¨±T˜GRET„*¦J¨R*J§&PeT9UAÅÐuT%5‘ª¢ª©8UCM¢&SS¨©Ô4j:5ƒšIÍ¢fSs¨‹©¹Ô<êj>µ€ZH-¢SK¨K©Ë¨¥Ô2j9u9uµ‚º’ºŠºšZI]C­¢®¥VS×Qk¨ë©µÔ
+Ô:êFê&êfj=uµº•ººÚHÝAÝIÝEÝMÝCm¢î¥6S÷Q[¨û©¨©­ÔCÔ6êaj;õõ(õõ8õõ$µƒzŠÚI=Mí¢ž¡ž¥ž£vSÏS{¨¨©—¨—©W¨½Ô«Ô>ê5êuê
+êMê-êmêê]ê=j?õ>u€ú€:H}H}D}L}B}J¢>£>§S_P_R_QG¨¯©o¨o©ï¨ï©£ÔÔ1êGê'êgêêWê8u‚F4A“4EÓ4C³4Gó´@cZ¤%Z¦Z¥5Z§
+Ú¤-ºݐ>‹nDŸM7¦›ÐMéftsºí£[Ò­èÖtº-ÝŽ>‡nOw Ï¥;ÒIt'º3Ý…îJw£ýt€¶é ݝN¦{Ð)tOº}Ý›îC÷¥ûÑ©tNgÐ!:“îO ³èô :›Lçйôz(GçÓô0z8=‚I¢GÓçÓcèèé‹è±t˜GÒEt„.¦KèR:J§'Ðet9]AÇèJz"]EWÓqº†žDO¦§ÐSéiôtz=“žEϦçÐÓséyô%ô|z½^D/¦—ЗҗÑKéeôrúrú
+z}%}}5½’¾†^E_K¯¦¯£×Ð×ÓkéèuôôMôÍôzúz}+}};½‘¾ƒ¾“¾‹¾›¾‡ÞDßKo¦ï£·Ð÷ÓÐÒ[é‡èmôÃôvúúQú1úqú	úIzý½“~šÞE?C?K?G烈§÷Ð/Ð/Ò/Ñ/Ó¯Ð{éWé}ôkôëôô›ô[ôÛô;ô»ô{ô~ú}ú ý}þþˆþ˜þ„þ”>DFN¦¿ ¿¤¿¢Ð_ÓßÐßÒßÑßÓGéècôôOôÏô/ô¯ôqúƒ‚!Š¡†aŽáÁŒÈHŒÌ(ŒÊhŒÎŒÉXL¦!sÓˆ9›iÌ4aš2͘æLÆÇ´dZ1­™6L[¦sÓžéÀœËtd’˜NLg¦Ó•éÆø™ c3A¦;“Ìô`R˜žL/æ<¦7Ó‡éËôcR™4&É`BL&ÓŸÀd1™AL63˜Éar™!ÌP&Ég
+˜aÌpf3’ÅŒfÎgÆ0021c™03Ž)dŠ˜SÌ”0¥L”ÏL`ʘr¦‚‰1•ÌD¦Š©fâL
+3‰™ÌLa¦2Ó˜éÌf&3‹™ÍÌa.fæ2ó˜K˜ùÌf!³ˆYÌ,a.e.c–2˘åÌåÌÌ
+æJæ*æjf%s
+³Š¹–YÍ\Ǭa®gÖ270똙›˜›™õÌ-ÌæVæ6ævf#ss'ss7s³‰¹—ÙÌÜÇlaîg`d¶21Û˜‡™íÌ#Ì£ÌcÌãÌÌ“Ìæ)f'ó4³‹y†y–yŽÙÍ<Ïìa^`^d^b^f^aö2¯2û˜×˜×™7˜7™·˜·™w˜w™÷˜ýÌûÌææ ó!óó1ó	ó)sˆùŒùœ9Ì|Á|É|Åa¾f¾a¾e¾c¾gŽ2?0ǘ™Ÿ˜Ÿ™_˜_™ãÌ	±K²K³˲˳‹Y‘•X™UX•ÕX5X“µØlCö,¶{6Û˜mÂ6e›±ÍÙ¬mɶb[³mضl;ö¶=ہ=—íÈ&±ØÎl¶+ۍõ³Öfƒlw6™íÁ¦°=Ù^ìylo¶Û—íǦ²il:›Á†ØL¶?;€Íb²ƒØlv0›Ãæ²CØ¡l›Ï°ÃØáìv$;Š͞ώa/`/d/bDzav[ȱ¶˜-aKÙ(;žÀ–±ålc+Ù‰l[ÍÆÙv;™ÂNe§±ÓÙìLv;›Ã^ÌÎeç±—°óÙìBv»˜]Â^Ê^Æ.e—±ËÙËÙ+Øì•ìUìÕìJöv{-»š½Ž]Ã^Ï®eo`×±7²7±7³ëÙ[Ø
+ì­ìmìíìFööNö.önöv{/»™½ÝÂÞÏ>À>Èneb·±³ÛÙGØGÙÇØÇÙ'Ø'ÙìSìNöivûû,û»›}žÝþÀ¾È¾Ä¾Ì¾Âîe_e÷±¯±¯³o°o²o±o³ï°ï²ï±ûÙ÷ÙììAöCö#öcööSöûû9{˜ý‚ý’ýŠ=Â~Í~Ã~Ë~Ç~Ïe`±?²?±?³¿°¿²ÇÙâŽä(ŽæŽå8Žçs"'q2§p*§q:gp&gq
+¸†ÜY\#îl®1ׄkÊ5ãšs-8×’kŵæÚpm¹vÜ9\{®w.בKâ:q¹.\W®ççœÍ¹î\2׃Kázr½¸ó¸Þ\®/׏KåÒ¸t.ƒq™\n —Å
+äqÙÜ`.‡Ëå†pC¹<.Ÿ+à†qùÜHn7š;ŸÃ]À]È]čåÂÜ8®+â"\1W•rQn<7+ãʹ
+.ÆUr¹*®š‹s5Ü$n27…›ÊMã¦s3¸™Ü,n67‡»˜›ËÍã.áæs¸…Ü"n1·„»”»Œ[Ê-ã–s—sWp+¸+¹«¸«¹•Ü5Ü*îZn5w·†»ž[ËÝÀ­ãnänânæÖs·p¸[¹Û¸Û¹ÜܝÜ]ÜÝÜ=Ü&î^n3w·…»Ÿ{€{ÛÊ=Ämãæ¶sprqsOpOr;¸§¸ÜÓÜ.îîYî9n7÷<·‡{{‘{‰{™{…Û˽Êíã^ã^çÞàÞäÞâÞæÞáÞåÞãösïs¸¸ƒÜ‡ÜGÜÇÜ'ܧÜ!î3îsî0÷÷%÷w„ûšû†û–ûŽûž;ÊýÀã~ä~â~æ~á~åŽs'xÄ<ÉS<Í3<Ës<Ï<æE^âe^áU^ãuÞàMÞâð
+ù³øFüÙ|c¾	ß”oÆ7ç[ð>¾%ߊoÍ·áÛòíøsøö|þ\¾#ŸÄwâ;ó]ø®|7ÞÏx›òÝùd¾ŸÂ÷ä{ñçñ½ù>|_¾ŸÊ§ñé|â3ùþü >‹Èâ³ùÁ|ŸËá‡òy|>_Àã‡ó#ø‘ü(~4>?†¿€¿¿ˆˇùq|!_ÄGøb¾„/å£üx~_Æ—ó|Œ¯ä'òU|5çkøIüd~
+?•ŸÆOçgð3ùYül~1?—ŸÇ_ÂÏçðùEüb~	)¿”_Æ/ç/ç¯àWðWòWñWó+ùkøUüµüjþ:~
+=¿–¿_ÇßÈßÄß̯çoá7ð·ò·ñ·óù;ø;ù»ø»ù{øMü½üfþ>~?ÿ ÿ ¿•ˆßÆ?ÌoçáåãçŸàŸäwðOñ;ù§ù]ü3ü³üsünþy~ÿÿ"ÿÿ2ÿ
+¿—•ßǿƿοÁ¿É¿Å¿Í¿Ã¿Ë¿ÇïçßçððùùøùOøOùCügüçüaþþKþ+þÿ5ÿ
+ÿ-ÿÿ=”ÿ?ÆÿÈÿÄÿÌÿÂÿÊçOH R Z`Và^,ˆ‚$È‚"¨‚&è‚!˜‚%4
+g	„³…ÆB¡©ÐLh.´|BK¡•ÐZh#´Ú	çí…¹BG!Iè$tº]…n‚_¶ºÉB!Eè)ôÎz}„¾B?!UHÒ…!$d
+ý…B–0P$dƒ…!W"ò„|¡@&F#…QÂhá|aŒpp¡p‘0Vã„B¡HˆÅB‰P*D…ñ¡L(*„˜P)Lª„j!.Ô“„ÉÂaª0M˜.Ìf
+³„ÙÂába®0O¸D˜/,
+‹„ÅÂáRá2a©°LX.\.\!¬®®®V
+׫„k…ÕÂuÂáza­pƒ°N¸Q¸I¸YX/Ü"lnnn6
+ww
+w	w÷›„{…ÍÂ}Âá~ááAa«ð°MxXØ.<"<*<&<.<!<)ìžv
+O»„g„g…ç„ÝÂóÂááEá%áeáa¯ðª°OxMx]xCxSxKx[xGxWxOØ/¼/>
+
+	ŸŸ
+‡„τυ×ÂWÂákáá[á;á{á¨ðƒpLøQøIøYøEøU8.œÀ˜Ä¦1ƒYÌacKXÆ
+V±†ul`[¸nˆÏðÙ¸1n‚›âf¸9n}¸%n…[ã6¸-n‡ÏÁíq|.p'ÜwÁ]q7ìÇlã qœ‚{â^ø<Ü÷Á}q?œŠÓp:ÎÀ!œ‰ûã8ăp6Œsp.‚‡â<œð0<À#ñ(<ŸÇàð…ø"<‡ñ8\ˆ‹pã\Š£x<ž€Ëp9®À1\‰'â*\ã¸O“ñ<OÃÓñ<ϳñ|1ž‹çáKð|¼ /Ä‹ðb¼_Š/ÃKñ2¼_Ž¯À+ð•ø*|5^‰¯Á«ðµx5¾¯Á×ãµø¼߈oÂ7ãõø¼ߊo÷ãø|'¾ߍïÁ›ð½x3¾oÁ÷ãðƒx+~oÃãíøü(ÚŒîÏáÇñèô z
+?‰¶ ûÑN¼ÍEO¢…ø)¼?îÀ»ð3øYüލŸÇ{ÐÓøü"~	¿Œ_Á{ñ«xz=†_ïã7ð›ø-ü6~¿‹ßCÛñ~ü>>€?Àñ‡ø#ü1þŠáÏðçø0þ‰¿ÂGð×øü-þâð1ü#þ	ÿŒÁ¿âãø„ˆDB$EJ¤EFdENäEAÄ¢(J¢,*¢*j¢.¢)Zb±¡x–ØH<[l,6›ŠÍÄæbÑ'¶[‰­Å6b[±xŽØý vÏ;ŠIb'±³ØEì*výb@´Å Ø]L{ˆ)bO±—xžØ[ì#öû‰©bš˜.fˆ!1Sì/³Äâ 1[,戹âq¨˜'æ‹â0q¸8B)ŽG‹ç‹cÄÄŋıbX‡.Å"1"‹%b©Ç‹Ä2±\¬cb¥8Q¬«Å¸X#N'‹SÄ©â4qº8Cœ)Îg‹sċŹâ<ñq¾¸@\(.‹KÄKÅËÄ¥â2q¹x¹x…¸B¼R¼J¼Z\)^#®¯W‹×‰kÄëŵâ
+â:ñFñ&ñfq½x‹¸A¼U¼M¼]Ü(Þ!Þ)Þ%Þ-Þ#nï7‹÷‰[ÄûÅÄÅ­âCâ6ñaq»øˆø¨ø˜ø¸ø„ø¤¸C|JÜ)>-Ÿw‹Ï‹{ÄÄÅ—Ä—ÅWĽâ«â>ñ5ñuñ
+ñMñ-ñmññ]ñ=q¿ø¾x@ü@<(~(~$~,~"~*??‹_ˆ_Š_‰GįÅoÄoÅïÄïÅ£ââ1ñGñ'ñgññWñ¸xBB!‘%Ñ#±'ñ’ aI”$I–I•4I—É”,©ÔP:Kj$-5–šHM¥fRs©…ä“ZJ­¤ÖR©­ÔN:Gj/uÎ•:JIR'©³Ô­’ºJÝ$?ºM
+H¶”ºKÉR)Eê‰VK½Ðµè+é<©·ÔGê+õ“R¥4t‹”.eH!´BÊ”úK¤,i 4HÊ–K9R®4DŠÖHyR¾T 
+“†K#¤‘Ò(i´t¾4Fº@ºPºH+…¥qR¡T$E¤b©D*•¢Òxi‚T&•£[¥
+)&UJ¥*©ZŠK5Ò$i²4Eš*M“¦K3¤™Ò,i¶4GºXš+Í“.AË¥ùÒi!º
+]--’KK¤K¥Ë¤¥Ò2i¹t¹t…´BºRºJºZZ)]#­’®•VK×Ik¤ë¥µÒ
+Ò:éFé&éfi½t‹´AºUºMº]Ú(Ý!Ý)Ý%Ý-Ý#m’î•6K÷I[¤û¥¤¥­ÒCÒ6éai»ôˆô¨ô˜ô¸ô„ô¤´CzJÚ)=-í’ž‘ž•ž“vKÏK{¤¤¥—¤—¥W¤½Ò«Ò>é5éué
+éMé-éméé]é=i¿ô¾t@ú@:(}(}$},}"}*’>“>—K_H_J_IG¤¯¥o¤o¥ï¤ï¥£ÒÒ1éGé'égééWé¸tBF2!“2%Ó2#³2'ó² cY”%Y–Y•5Y—
+Ù”-¹ÜP>Kn$Ÿ-7–›ÈMåfrs¹…ì“[Ê­äÖr¹­ÜN>Gn/wÏ•;ÊIr'¹³ÜEî*w“ýr@¶å Ü]N–{È)rO¹—|žÜ[î#÷•ûÉ©ršœ.gÈ!9Sî/³äò 9[,çȹòy¨œ'çËò0y¸<B)’GËçËcääå‹ä±rX'ÊErD.–KäR9*—'Èer¹\!ÇäJy¢\%WËq¹Fž$O–§ÈSåiòty†<Sž%Ï–çÈËsåyò%ò|y¼P^$/–—È—Ê—ÉKåeòrùrù
+y…|¥|•|µ¼R¾F^%_+¯–¯“×È×ËkåäuòòMòÍòzùyƒ|«|›|»¼Q¾C¾S¾K¾[¾GÞ$ß+o–ï“·È÷ËÈÊ[å‡ämòÃòvùùQù1ùqù	ùIy‡ü”¼S~ZÞ%?#?+?'ï–Ÿ—÷È/È/Ê/É/˯È{åWå}òkòëòò›ò[òÛò;ò»ò{ò~ù}ù€ü|PþPþHþXþDþT>$&.–¿¿”¿’È_ËßÈßÊßÉßËGåäcòòOòÏò/ò¯òqù„‚B!J¡FaNáAÁŠ¨HŠ¬(ŠªhŠ®Š©XJ¥¡r–ÒH9[i¬4Qš*Í”æJŧ´TZ)­•6J[¥rŽÒ^é œ«tT’ÐCJ'¥³ÒEéªtSüJ@±• Ò]IVz()JO¥—ržÒ[é£ôUú)©Jš’®d(!%Sé¯P²”Ê %[¬ä(¹Êe¨’§ä+Ê0e¸2B©ŒRF+ç+c””•‹”±JX§*EJD)VJ”R%ªŒW&(eJ¹R¡Ä”Je¢R¥T+q¥F™¤LV¦(S•iÊte†2S™¥ÌVæ(+s•yÊ%Ê|e²PY¤,V–(—*—)K•eÊrårå
+e…r¥r•rµ²R¹FY¥\«¬V®SÖ(×+k•”uʍÊMÊÍÊzåeƒr«r›r»²Q¹C¹S¹K¹[¹G٤ܫlVîS¶(÷+(*[•‡”mÊÃÊvååQå1åqå	åIe‡ò”²SyZÙ¥<£<«<§ìVžWö(/(/*/)/+¯({•W•}ÊkÊëÊÊ›Ê[ÊÛÊ;Ê»Ê{Ê~å}å€òrPùPùHùXùDùT9¤|¦|®V¾P¾T¾RŽ(_+ß(ß*ß)ß+G•”cʏÊOÊÏÊ/ʯÊqå„ŠTB%UJ¥UFeUNåUAŪ¨Jª¬*ªªjª®ª©Zjµ¡z–ÚH=[m¬6Q›ªÍÔæjÕ§¶T[©­Õ6j[µzŽÚ^í ž«vT“ÔNjgµ‹ÚUí¦úÕ€j«Aµ»š¬öPSÔžj/õ<µ·ÚGí«öSSÕ45]ÍPCj¦Ú_ f©ÕAj¶:XÍQsÕ!êP5OÍWÔaêpu„:R¥ŽVÏWǨ¨ª©cÕ°:N-T‹ÔˆZ¬–¨¥jT¯NPËÔrµB©•êDµJ­Vãj:I¬NQ§ªÓÔéêu¦:K­ÎQ/VçªóÔKÔùêu¡ºH]¬.Q/U/S—ªËÔåêåêê
+õJõ*õju¥zºJ½V]­^§®Q¯Wת7¨ëÔÕ›Ô›Õõê-êõVõ6õvu£z‡z§z—z·zºI½WݬާnQïWPT·ª©ÛÔ‡Õíê#ê£êcêãêê“êõ)u§ú´ºK}F}V}NÝ­>¯îQ_P_T_R_V_Q÷ª¯ªûÔ×Ô×Õ7Ô7Õ·Ô·ÕwÔwÕ÷Ôýêûêõõ ú¡ú‘ú±ú‰ú©zHýLý\=¬~¡~©~¥Q¿V¿Q¿U¿S¿Wª?¨ÇÔÕŸÔŸÕ_Ô_Õãê	
+i„Fj”FkŒÆjœÆk‚†5Q“4YS4UÓ4]34S³´ZCí,­‘v¶ÖXk¢5Õši͵šOk©µÒZkm´¶Z;í­½ÖA;Wë¨%i´ÎZ­«ÖMókÍÖ‚Zw-Yë¡¥h=µ^ÚyZo­ÖW맥jiZº–¡…´L­¿6@ËÒjƒ´lm°–£åjC´¡Zž–¯hôáÚm¤6J­¯Ñ.Ð.Ô.ÒÆjamœV¨i­X+ÑJµ¨6^› •iåZ…Ó*µ‰Z•V­Åµm’6Y›¢MÕ¦iÓµÚLm–6[›£]¬ÍÕæi—hóµÚBm‘¶X[¢]ª]¦-Õ–i˵˵+´Ú•ÚUÚÕÚJím•v­¶Z»N[£]¯­ÕnÐÖi7j7i7këµ[´
+Ú­ÚmÚíÚFííNí.íním“v¯¶Y»Oۢݯ= =¨mÕÒ¶ikÛµG´GµÇ´Çµ'´'µÚSÚNíim—öŒö¬öœ¶[{^Û£½ ½¨½¤½¬½¢íÕ^Õöi¯i¯kohojoiokïhïjïiûµ÷µÚÚAíCí#ícííSíö™ö¹vXûBûRûJ;¢}­}£}«}§}¯Õ~ÐŽi?j?i?k¿h¿jǵ:Ò	Ô)ÖÕ9×ë¢.鲮誮éºnè¦né
+ô†úYz#ýl½±ÞDoª7Ó›ë-tŸÞRo¥·ÖÛèmõvú9z{½ƒ~®ÞQOÒ;éõ.zW½›î׺­õîz²ÞCOÑ{ê½ôóôÞz½¯ÞOOÕÓôt=Cé™z}€ž¥ÔéÙú`=GÏÕ‡èCõ<=_/ЇéÃõúH}”>Z?_£_ _¨_¤ÕÃú8½P/Ò#z±^¢—êQ}¼>A/ÓËõ
+=¦Wêõ*½Zë5ú$}²>EŸªOÓ§ë3ô™ú,}¶>G¿XŸ«ÏÓ/Ñçëô…ú"}±¾D¿T¿L_ª/Ó—ë—ëWè+ô+õ«ô«õ•ú5ú*ýZ}µ~¾F¿^_«ß ¯ÓoÔoÒoÖ×ë·èô[õÛôÛõúúú]úÝú=ú&ý^}³~Ÿ¾E¿_@Pߪ?¤oÓÖ·ëèêéëOèOê;ô§ôúÓú.ýýYý9}·þ¼¾GAQIYEß«¿ªïÓ_Ó_×ßÐßÔßÒßÖßÑßÕßC£'ôýúûúýý þ¡þ‘þ±þ‰þ©~HÿLÿ\?¬¡©¥ѿֿѿտӿ׏ê?èÇôõŸôŸõ_ô_õãú	„A”AŒÁœÁ‚
+ѐÙPÕÐÝ0Ó°ŒFCã,£‘q¶ÑØhb45š͍†Ïhi´2ZmŒ¶F;㣽ÑÁ8×èh$ŒÎF£«ÑÍðÃ6‚Fw#Ùèa¤=^ÆyFo£Ñ×èg¤iFº‘a„ŒL£¿1ÀÈ2ƒŒlc°‘cäCŒ¡Fž‘oÃŒáÆc¤1ÊmœoŒ1.0.4.2ÆacœQh£Ø(1J¨1Þ˜`”åF…3*‰F•Qmčc’1Ù˜bL5¦ӍÆLc–1Û˜c\lÌ5æ—óÆBc‘±ØXb\j\f,5–ˍˍ+ŒÆ•ÆUÆÕÆJãc•q­±Ú¸ÎXc\o¬5n0Ö777ë[Œ
+Æ­ÆmÆíÆFããNã.ãnãc“q¯±Ù¸ÏØbÜo<`<hl52¶ۍGŒGÇŒÇ'Œ'ÆSÆNãic—ñŒñ¬ñœ±ÛxÞØc¼`¼h¼d¼l¼bì5^5ö¯¯ooooïïïû÷ÆÆAãCã#ãcããSãñ™ñ¹qØøÂøÒøÊ8b|m|c|k|g|o5~0Ž???¿¿Ǎ&2	“4)“6“59“7›¢)™²©˜ª©™ºi˜¦i™
+̆æYf#ól³±ÙÄlj63››-LŸÙÒle¶6Û˜mÍvæ9f{³ƒy®ÙÑL2;™Í.fW³›é7¦mÍîf²ÙÃL1{š½ÌóÌÞf³¯ÙÏL5ÓÌt3Ã™™fs€™e4™Ùæ`3ÇÌ5‡˜CÍ<3ß,0‡™ÃÍæHs”9Ú<ßc^`^h^dŽ5Ãæ8³Ð,2#f±Yb–šQs¼9Á,3ËÍ
+3fVšÍ*³ÚŒ›5æ$s²9ÅœjN3§›3Ì™æ,s¶9Ǽ؜kÎ3/1ç›Ì…æ"s±¹Ä¼Ô¼Ì\j.3—›—›W˜+Ì+Í«Ì«Í•æ5æ*óZsµy¹Æ¼Þ\kÞ`®3o4o2o6×›·˜Ì[ÍÛÌÛ͍æææ]æÝæ=æ&ó^s³yŸ¹Å¼ß|À|ÐÜj>dn36·›˜š™›O˜Oš;̧̝æÓæ.óóYó9s·ù¼¹Ç|Á|Ñ|É|Ù|ÅÜk¾jî3_3_7ß0ß4ß2ß6ß1ß5ß3÷›ï›Ì̃æ‡æGæÇæ'æ§æ!ó3ósó°ù…ù¥ù•yÄüÚüÆüÖüÎüÞ<jþ`342615›',diQm1kqo	¶DK²dK±TK³tË°L˲X
+­³¬FÖÙVc«‰ÕÔjf5·ZX>«¥ÕÊjmµ±ÚZí¬s¬öVë\«£•du²:[]¬®V7Ëo,Û
+ZÝ­d«‡•bõ´zYçY½­>V_«Ÿ•j¥YéV†²2­þÖ +Ëh
+²²­ÁVŽ•k
+±†ZyV¾U`
+³†[#¬‘Ö(k´u¾5ƺÀºÐºÈk…­qV¡UdE¬b«Ä*µ¢Öxk‚Uf•[V̪´&ZUVµ·j¬IÖdkŠ5ÕšfM·fX3­YÖlkŽu±5ךg]bÍ·X­EÖbk‰u©u™µÔZf-·.·®°VÕÅñÒ©•¥‘
+.µ<\X«à‰’MW™aÃ^Á¥ÆJb‘	\8QŠé…Ѫšòâ²È±°®ŽÓ‹bñpaa¤"ŽOVٌ°+²(Qd8òÃq.€ % #^Cu‚"'«\Ôˆ$J6”ñ
+±=¥Jê)Õ¿NVÉɪԿ0V^†‡’zâ€zrJëêô€qá*ºÔù`³âѲ¢õ
+.,‰‚%Y	K¢	×eÎÑDIf
+$£ãŁõ0Æ×Õ¥AõµšpÊCIU$RQ®(Š²Ùášx„-ó
+)»~¿²zlvÂAe^Ag;ÖÓeΛ“_‘ŸS|Eýñ9‰ñ	W„Ýÿ;®ª˜³`¨PE	©(árÁøŸ›0>ærniMEI¸ª¦¼,\—cõŸØ¼„U	òêëPU_‡¼„U‰"?1ªÚ+Äüzn¬®çÆ‚úÒâõ¥$ÄÄ)p§4îNé°Ä”Ö$¦tXUV
+KXUãÌ°ªhE	Sã~ÊÃN±°¦þ7¦¾v͈zÚN®WU¯>µ®ÎŽNØ:Í+ðèºe<íd•)‹U”Ts5Ñ®Ýzt…²”~(PÚP¡ìe2”= L2Ê4(Ó¡Ì€2ef¢LüÀOÜÀMÜÀMÜÀMÜÀMÜÀMÜÀMÉdrKcULÌýL´¥‚Í©€
+Ø©€
+Ø©€
+Ø©€
+Ø©€
+Ø©€b†y˜5u˜i`o`§v`§v`§v`§v`§v`§v؝þN§~:à§~:à§~:à§~:à§~:à§~:à§~:à§~àg ~àg ~àg ~àg ~àg ~àg ~àg ~àg ~ðC€üà‡ ?dû'v}‰W at + ‡ =è!@zÐC€ôL@ÏôL@ÏôL@Ïë3ÁúL°>ð3Spª{’$6yød•K
+%Êp$qÖåV—…«KõX]Ý“âïÚÊnPú¡@iC„²;”ÉPö€2ÊT(Ó L‡2Ê”	oø»~7ÀïøÝ ¿àwün€ß-YʯVW×{€ I7ФhÒ
+4éštMü ‰4ñƒ&~ÐÄšøA?hâOøÁ~ð„ðý€ï|?àûßøÀ ~ ð€ ü àºóÎi^©®
+ @ €P  
+@ ( lPÀlPÀlPÀlp€
+°ß|ðmÀ·ß|ðmÀ~ðƒ€ü à?øAÀ~ðƒ€ü à?øAÀïøÝ¿;àwüî€ßð»~wÀïøÝ¿;àwüî€ßð»~wÀOüdÀOüdÀOüdÀOüdÀOüdÀOüdÀOüdÀOüdÀ‡0Àa€ ?„~üø!ðCà‡0Àa€ ?„~üø!ðCà‡0Àa€?ð!ðC8à‡pÀá€Â?„~üø!ðC8à‡pÀá€?ðS?ð!$ðCHà‡À!B?„~	üø!$ðCHà‡À!?ðS?
+ð!,ðCXà‡°ÀaÂ?„~üø!,ðCXà‡°ÀaÂ?„~üø!,ðCXà‡°ÀaÂ?„~üø!ðCà‡0Àa€ ?„~üø!ðCà‡0Àa€ ?кhÝ´îZ÷­ûÖý@ëþȁ¼Èb÷±ûÈý@ä~ r?µ?3Y(©
+Ork{œàQª[óÞºú/!¨×bC„²;”ÉPöKc±	Þ/öו
+e”éPf@‚2რÐi è4 t :
+ €N@§n E·P¦@	ø@¢ Ñ h H4 $ 
+ ‰ü~É!)ï?0Vg0i ˜4 L &
+ “€IÀ¤`Ò 0i ˜4 L &
+ “€IÀ¤`Ò 0i ˜4 ü à‘€H@¤ Ò i ˆ4 D "
+ ‘€H@¤ Ò i ˆ4 D "
+ ‘€H@¤ Ò i ˆ4 D "
+ €@@  Ê e 1 „ B !€@ˆ Ä Q ˆ( D ¢	 Ñ€hÉ!&«ˆUËEÑHU¤:Zí=áÔ²ÊÒ°W±x¤,
+K¡ÊꨓšzÍ|(ï³bP“rË£nbxV¯3Î-”$:éQ§û)XŒ‡E§Eâa¦Ø	Š9Œxôhçåà1¥Nv™AáÊÊ0›.W&א95äÈ(C¢T^iŒÉ–”‡©‚p
+ÚPCJ£TºówHuTʪ§‰
+jŸqø¤¤H}³#µfGkͶjNš0ÊOs*qbŠ"eñ0²èi®Iî˸g’+Œ™à™Tæ™”ðAZ:YQCN‰r±„]TUiŒ­vêÆxwl|ªÒ±«Ðùë<21×áR}_«§©)ÅêÏVMýÙŠœ­„]YOÍn<x	֐A æìn¬7®ö¬gȐ @>€|0 ù` ˆ# Ä â q€8@ Ž G ˆ# Ä â q #@F "	 ‘€H #@F€Œ0 D€Œ0 a 2 d„È™€Ÿ	ø™€Ÿ	ø™€Ÿ	ø™	|r@r@r@r@¨Ë겁ºl .r@r@HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -2?2?øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+?xËÞ²·lHülHülHülà3ø̆ÄφÄφÄÏž³çlà9xΞ³çlà9?????????????????øÖ¾µ!ñ³!ñ³!ñ³!ñ³màcøØ>¶!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³á؆{`@@@@@@@@@@@8߆ІІÐÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞï÷ƒÀûAàý ð~x?¼Þï÷ƒÀûAàý ð~x?¼Þï÷ƒÀûAàý ðaø0¨m½€ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aà¿ ð_ø/üþÿÿ‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼ÞÂ…gx/¼„ó<çyÎó œçA8σpžá<Ây„ó<çy0­V.ØçyÎó œçA8σpžá<Ây„ó<çwÎï œ¿A8ƒpþáü
+Âù„ó7ço0£vüÿkï\€äÊêóÞ=gz¤yH+i¥…e_ì.bW<´óÿwß{NÃÚ«Û}Ο—M‹Í#µ&#ÍHiÄh´!klÖ€±Ád0&~$¶!øv½‰óðƘøÇ—Ä±1K°“¯;béÍí9¿–.•"§R®uIÿ¾=§ïwîíÓßwîwu¾¡¿ðoÿðoÿðoÿðoÿðoÿðoÿðoÿðoÿðoÿðj¯ðj¯ðj	?•\W”\/”\”\”\”\”\”\”\”\”\”\”\”\”\”\”\”\”\”ð_	ÿ•ð_	ÿ•ð_	ÿ•ð_	ÿ•ð_	ÿ•ðZ	¯•ðZ	¯•ðZ	¯•ðZ	¯•ðZ	¯•½É~9.x­„×Jx­„×Jx­„×Jx­„×Jx­„×Jx¬d~^ÂS%<UÂS%<UÂS%<UÂS%<UÂSe9Ù/ý†§Jxª„§Jxª„‡Jx¦„gJx¦„gJx¦„gJx¦„gJx¦„gJx¦„gJx¦„gJx¦d~\2?.™—ÌKæ¯%óÕ’yjɼ´d¾YÂ;%¼RÂ%¼P2_+™§•|ïK¾O%ߧ’ïSÉ÷©œ|ŸlÒžý1O)™§”ÌS<<åá)OyxÊ3ïôÌ;=ýóð–gÞ釓ýUÔuHÔDÍÇëá=ïyxÏÃ{Þó¿‡÷<¼çá=ïyxÏÃ{Þóðž‡÷<¼çá=ïyxÏÃ{Þóðž‡÷<¼ç™_zæ—žù¥g~é™_z>7ÏçæùÜ<Ÿ›çsó|nžÏÉO>'擉yQbü&ÆobÜ&Æiâz0¡‡‰ë¾Äu\bÜ&®ã×q‰ë·Äõ[âú-qý–ú“ý$*ýaÜ'®Û×m‰ëµÄuZâº,q]–¸K\%¾	ýNèwB¿úÐïÄ÷(¡ß	ýNèwB¿ºÐí„n'Æbü'Æbü'ÆbÜ'Æ{b¼'Æ{b¼'Æ{b¼'Æwb|'Æwb|'Æwb|'Æwb|'Æwb|'ÆsÊãYóus]…ªÔ.µG-¨%ÕSµO­¨ê:ÁKTËu þ üøðàÀ€?  þ üøðàÀ€? þü!øCð‡àÁ´´´´´“öô7ÒßH#ýô7ÒßH'ŸO¤¿‘þ&ðø	ü~?ŸÀOà'ðø	ü~?ŸÀOàø¾oàø¾oàø¾oàçë\Á¿ükÁ¿ükÁ¿ükÁ¿|kÁ·|kÁ·|kÁ·|kÁ·|kÁ·|kÁ·|kÁ·|kÁ·|kÁ·|kÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯|jÁ§|jÁ§|jÁ§|jÁ§|jÁ§|jÁ§|jÁ§|jÁ§|jÁ§|jÁ§üiÁŸüiÁŸüiÁŸüiÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—®+øü ~ ?€Ààðø}ðûà÷Áïƒß¿~ü>ø}ðûà÷Áïƒß¿~ü>øè,þ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG>´àC>´àC>´àC>´àC>´àC>´àC>´àC>´àCKo¢Ï¾Ÿ}hÁ‡|hÁ‡|hÁ‡|hÁ‡|hÁG|dÁG|äºò~t¸@‡™¼?PûÔŠ: ©‘š¨ô=.Ðã=.Ðã=.Ðã=.Ðã=.Ðã=.Ðã=.Ðã=.Ðã=Æ/ürÁ/ürÁ/ürÁ/ürÁ/ürÁ/ürÁ/ürÁ'|rÁ'|rÁ'|rÁ'|rÁ'|rÁ'|rÁ'|rÁ'|rÁ'üqÁüqÁüñº‚‹.ã—~¹à—~¹à—~¹à—K.㛾¹à›¾¹à›¾¹à›¾¹à›¾¹àw~·àw~·àw~·àw~·àw~·àw~·àw~·àw~·àw~·àkוý£—zY —zY —zY —zY —zY —:W s:W s:W sE5yç+й+й+й+Ð9|iÁ‡|OÁ÷ü@Á”’yQɼ¨d^T2/Â/¬kAeœ|@Á|@Á|@Á|ÀºjŸZQÔ!5Ré7ŸOÉ烟(ø‰uŸÏ±®à3ŸÁo¬+øÌgJæ3%ó™ŸGø<Âç>ðy„Ï#|áó˜ï+ÖµO­¨ê'R5gD"zуˆDô ¢ˆè@D":сˆDt ¢ˆè@D":сïGx?Âûޏð~„÷#¼áýïGø>Â÷¾ð}„ï#|áûßGø>Â÷¾ð}„ï#|»\Žޏð~„÷#¼áýïG¾O‘ïS„÷#¼áýïGx?Âûޏð~„÷#×cþð„ÿ#üáÿÿGø?Âÿþð„÷#¼áýïGx?Âûޏð~„÷#¼áýïGx?Âû~ð{„Ï#<ù~ÅÉ÷‹ë…ÈõBäz!£ðh„G#<áяFx4£ðh„G#<áяFx4r½¹^ˆ\/D®"בë…ÈõBäz!r½¹^ˆ\/D®"ב녈/ñå"בëƒÈõAäú r}¹>HðT‚§<•à©O%x*ÁS	žJðTZœì¯¢¨Cj¤&jîo‚§<•à©O%x*1oMðU‚¯|•à«_%ø*ÁW	¾JðU‚¯|•à«_%ø*1oMÌ[ü•à¯%ø+Á_	þJðW‚¿ü•˜·&x,Ác	KðX‚Ç<–౏%x,Ác	KðX‚Ç<–à1îgH‚Ç<–౏%x,Ác	KðX‚Ç<–౏%x,Ác	KðX‚Ç<–౏%x,Ác	KðX‚Ç<–౏%æ±	>KðY‚Ï|–೟%ø,Ág	>KðY‚Ï|–೟%ü¥„¿”ð—ó¨Ä<*1JÌ£ó¨Ä<*1JÌ£ó¨_&ø21Ṅü™˜'æÉùpò6óÒ­•;3÷äòÒ¼^þž­2ûÒÉ_Ÿ½gò,¿ù÷»„û]uŸùXb>–˜q¬®à3KÌÇó±Ä|,1ã¾™pßL¸o&Ü7«+øÌǸ&Ü?“„pŸL¸O&Ü'«+ûGzÀ}³º²ô€ûhÂ}´ºr|è÷Ó„ûiÂý4á~šp?M¸Ÿ&ÜOî§	÷Ó„ûiÂý4á~Z]ÁG¸¯&ÜW«+øè÷Ù„ûlÂ}6á>›pŸ­®à£	½à¾›¤‰^à'qßM¸ï&Üw«+øøI܇îÃ	÷á„ûpÂ}8á>œpN¸'܇îÃÕ|ü$îËÉä¾\â:&á'%ü¤ÄuMÂOJøI	?)á'%ü¤„Ÿ”ð“~RÂOJÜ÷IøJ	_)á+%|¥„¯”Lf^ž¿h¯Û*¼
+:®RÂUJ¸J	W)á*jm¨µ¡Ö†Zjm¨µ¡Ö†Zjm‹“ýUÔuHÔDÍGc¨µ¡Ö†Zjm¨µ¡Ö†:êl¨³¡Î†:êl¨±¡Æ†jl¨±¡Æ†jl¨±¡Æ†jl¨±éãC
+56ÔØPcC
+56ÔØPcC
+56ÔØPcC
+56ÔØPcC
+56ÔØPcC
+56ÔØP_C}
+õ5Ô×P_C}
+µ5ÔÖP[Cm
+µ5ÔÖP[Cm
+•5ÔÕŠÉ~é?jj¨©¡¦†šjj¨©¡¦†šjj¨©¡¦†šjj¨©¡¦†šjj¨©¡¦†šjj¨©¡¦†šjj¨©¡¦†šjj¨©áfn†áfn†áfW1†zêi¨§¡ž†zêi¨§…	Ç‹zêi¨§¡ž†zêi¨§¡ž†zêi¨§¡ž†zW[ÆÕ–qµe\mêj¨«¡®†ºêj¨«¡®†ºêj¨«¡®†ºêj¨«¡®†ºêj¨«¡®†ºêj¨ª¡ª†ªªj¨ª¡ª†ªªj¨ª¡ª†ªªj¨ª¡ª†ªjj¨©¡¦†šjj¨©¡¦†šjj¨©¡¦†šjj¨©¡ž†zêi¨§¡ž†zªi¨¦¡š†jªi¨¦¡š†jªi¨¦¡š†jªi¨¦¡š†jªi¨¦¡šÆÝãî‹¡“†>úhè£Mô‘».Æ]㮋q×Åò]]Ì:ZW¡*µKíQjIõÔ@íS+ê€:¤Fê×rðE掯ž8·±²¼tö$/)å®­ßL~öØzýã£k»^sn}ü»ãï®_ZY¦
+»ÓîîõÓ㨷•Ók+Kõ›voÞ³ÞؤW:«tVé¬ÒY¥³ÊÞ»2sjõôVpØʱõÓ`w9E]úÛåuAérŠºƒÙ•×[[:U¯€Ó§N“ÒãCéñ¡ôøPz õ@êÔ©Ç‡Ñãøz_ãëÛ·nnnnnÁ‘ààààààààààà—à—à—à—à—ì¯d%û+Ù_ÉþJöçÙŸgžþ{úï鿧ÿžþ{úïÁóàyð<x<^ /€è ÿü ~ ?€Ààðøü ~ ¿nÜ>¸}pûàV‹»Ž­¯­Ÿ>UG6—6^Ç«:½¶º±Ä]«Ê™3+gëVlÒ³ŠžUÕôòúéÓéÜÆ:¯Ð§Š>Uœ“}з}з} ii9G‘s9‘s‘‰Y"“ÅɶR»Ôµ –TO
+Ô>u@R#5Qóñ‰,î|Þñ¥WožÛà€`:Xüü=+«5‡mn,=Ëk€ç«ƒºv¾øËwÎl¬œ=¶±zfü+Ûy‘®(§@9J”(=Pz 
+Šrè
+:´(Т@‹¢qvåìæê©¥MhW Fé‚ܹË9èÒƒn¯³´¶ræ$[àCAJü.ø]ð»àC—]
+t)Ð¥@—]
+t)=ŽÚhS M6ÚèRziçø‹rrucy¶–‘­'|P0 À€
+(0 Õl½‹•Õ'7O.lžÜXáùÙùã«wOž/œ­µì4¼CƒFQ`D)9´’þ”ô§¤?%ý)é*0¨À ƒ
+*0¨À ƒŠ߃£
+Œ*0ªÀ¨£
+Œ*0ªÀ¨£
+Œ*0ªÀ¨„Q*a”J¥FY×ÞìÒÆÆú=k+Ç7wl=;wfn«nŒOgþáòú=§ó³£õ‡8K³e¾=}ºÜ§Ë}ºÜ§Ë}ºÜ§Ë}ºÜ§Ë}ºÜ§Ë]®èrE—+º\qÊ`Z²$ëê.õìèÙ^¤¨èDE'`]uÖX—PI%TR	•¬ko÷±muéD=‘ªÙ…s1 /ÎÅ€s1 º1 º1 º1 Cº1¤Cº1¤CÎŐs1þü!øCð‡àÁ‚?hù\Ö3­ñȘ›lœ;³kòtk|\j5"—6Æ£$ï'Ò/DˆÌI%sRÉœT2'•ÌI%sRÉœT2'•ÌI%sRe"^‰ó’8/‰ó’ÀOà'ðø	ü~?ŸÀOà'ð
+|ßÀ7ð
+|ßÀ7ð
+|ßÀ7ð
+|Ÿ«ú²c¶®ã‰ûRž×3÷ù•×®ž­'蛫—^ëí\9ufóuõôc牍qžÌéÍ+k+§Æ¡µ9èÁŽuãjçÙsÇjæ\š¼0¤FjÆ&[RÉ’T²$•,ɺ–Ku?6VϾºV¸“¼¨}ê€:¬uxýÌúÆX…—Öæê''Çñ¼Kk¥Ó'Öò·—ðH%<R	TÂ#•ðȺ–skë'V-s™gyº¾±°zzs|slÒ©["ø„G*á‘Jx¤©„G*á‘Jxd]»³›'ë/üñúBŠWè’¬H2é‘Jz¤’©ãôȳ«§V×–6ئH2é‘Jz¤’©¤G*é‘uíÍÖP'6Î]úeò#•ÜH%7RɍTr#•ÜH%7RɍTr#•ÜH%7RɍTr#•ÜH%7RɍTr#•ÜH%7RɍTr#•ÜH%7²®6¿òšs«w×óœÓÇ8»¨5™‘JF¤’©dD*‘JF¤’©dD*‘JF¤’©dD*‘JF¤’©dD*‘JF¤’©dD*‘JF¤’©dD*‘JF¤’©dDÖU¶¾
+õX=W+×æîÉÆøŸ•ÍÙú+›@ëb¡‚k+¯¥õd#·¦
+=ãJˆôH%=RITÒ#•ôH%=RITÒ#•ôH%=²®½¹qBv='];w–—ÊÝù¥SçÖ6WϬ½Ž—é	Ór$•I%GRÉ‘Tr$•I%GRÉ‘Tr$•ɺövÕ~feÈ~îÒ÷ŠIi’Jš¤’&©¤I*i’Jš¤’&©¤I*i’Jz¤’©¤G*é‘Jz¤’©¤G*é‘Jz¤’©¤G*é‘Jz¤’©¤G*é‘Jz¤’©ãôÈåõÍË<‹ð“"©¤H*)’JŠ¤’"©¤H*)J
+d]y?¬³"ÌŠ0kœ¼Ÿ~#̤F*©‘Jj¤’©¤FÖ•ó†0“©¤F*©‘ua&ERI‘TR$ë
+>¬³"̤LÖ|„YfE˜aV„YfE˜aV„YfÍÿùºŽEªtN®ŸcÚåšÔJ%µRI­TR+ë¨}jEP‡ÔHMTÛµ±r7ºW³E~5ßZSR(•J%uRITR'ëjscÁ¬gk›g.==ÊÞÐ\b&•˜I%fR‰™Tb%•XÉZ9v¸”˜C%æP‰5¬“ýàµtá‡.üÐ…ºðC~èÂ]ø¡?tá‡.—].º0CfèÂ]˜¡3ta†.ÌÐ…º0Cw8©ôƒÞed³ŒLYF¦,?R–)ˏ”åGÊò#eù‘²üHY~¤,?ªkç&‹‹ç¹X”ñÒx¡KíQjIõÔ@íS+ê Þábs‡‘š¨6nн܀‘ÆRºvÇ
+´Ñ€.àÝâÇ
+zô㦐­>„FúÀ`eµ€²Z at Y- ¬¨ëVú—wÀ¸e¹€²\@Y. ,P–Ôu«ecô€É"ë”õÊze½@]·zà/"”Ê‚eÁ€²` ®[=(; LIØQV(+”•ÊÊe倲r at Y9 ¬PV(+”•ÊÊe倲r at Y9P×ñ8èmƒú‰öxRÈä‰ò¤ÛŸ´™¼¢“6ZL/ò¤7iÜ
+“6—žøÉ“rÒæғɏz¹:Ù³NºÚ»Ôx²çÞ¤?½Iz“=÷&o/.à¥ý4F0sLby”X%–G‰åQby”Xe™‚²LAY¦ ,SP–)(Ë”e
+Ê2e™‚²LAY¦ [ËÎ][?ö꼍Ä2/SX>Ýü9øxêEðæOAg9^Ä°v¼ùsЙGŽ1ll柯mž=¹´¼ÒÙúwÇò«sÝj׳„AYÂPWŽ¹cÁܱ`îX 
+ÚP 
+ÚPômöøêÚÚÊòÑõ×Î<·t““8°BY¡¬…PÖB(k!”µuíÏ<WBý…Ú*Åø^Ûx÷õ¥%
+èêÀb%ÄHÇ!F›c·èܶé óHBŒ”#%ÄH	1ÒqˆÑÖû7À«ç‘[Û˜p„)!FJˆ‘b¤„)!F:1ÚzÿÚq¶ÁgI¨Q]ÁögòäžMN<ÓÈb˜¶Nv5QHJ’…¤D!)QHJ’…TW?»zúî£çês»9~Ö„d&J’‡¤Ä!)ËN”8$%IY†¢Ä!)qHJR]‹¹úbëtå%žÉ(‰HJ"R]é“Ñ‚ÉhÁd´`2Jr’’œ¤$')ÉIJrR]9
+LF&£“Ñ‚ÉhÁd´`2Z0-˜ŒLF&£%ÔTrK§ä–NÉ¡d‚P2A(™ ”LJ&%„’	BÉt”ħºFj¢‚cT2=(™”8H%‰Qu_ÀgâZ29(™,UWð™”Ì
+HœÒ’¹ÉSJò”’<¥$O)ÉSJò”’<¥$O)ÉSJò”’<¥$O)ÉSJò”’<¥$O)ÉSJò”’<¥$O)ÉSJò”’<¥$OÕµ?{öÔêÚÊñ¥c+õ×âÒ†;{î4MèSƒ²k3ÇWN-ñå){2ÝØ žiUÊB-e¡–P¥T)UJ@•P¥T)UJ@•P¥T)UJ@•P¥TÕ|œ¤'©ÄI"Àª®àã$•8I%NRYXç왉ÆsUW>¶vî(½ÎÉ•¥šL—W—NMþ#	WJÂU]ûó§Îåšjewãùä v¥„])‹Û”ÅmÊâ6eq›²¸MYܦ,nS·)‹ÛêJWP²”°,%,K	ËR²”°,%,KY$§,’SÉ)‹ä”ErÊ"9e‘œ²HNY$§,’SÉ)‹ä”ErÊ"9e‘œ²HNY$§,’SÉ)‹ä”ErÊ"9e‘œ²HNY$§,’SÉ)‹ä”ErZrHxW]ÁAè	óª+8}‰Ð—=!_u‡«À²šàpœè<a`Z¢ó%÷‹Jü"õúÅÉv—Ú£–TO
+Ô>uHÔD͸ŠõP¬‡b=ë¡XÅz(ÖC±ŠõP¬‡b=ë¡XÅz(ÖC±ŠõP¬‡b=ë¡XÅz(ÖC±jõP«‡Z=Ôê¡Vµz¨ÕC­jõP«‡Z=Ôê¡Vµz¨ÕC­žk.Ï5—疹疹‡W=¼ê¹äò\ry.¹<—\nõp«‡[=ÜêáV·z¸Õínõpª‡K=\êáR—z8ÓÕ®ôp¥‡+=\éáJWzØÑãFx܏áq#<n„‡"=éqÞ=λÇy÷ð¢‡}9ÁãxàE/zxÑË^ôð¢‡=¼èáE/zxÑË^ôð¢‡=¼èáE/zxÑË^ôð¢‡=¼èáE/zxÑË^ôð¢‡=¼èáE/zxÑË^ôðŸ‡ÿ<üçá?ÿy®€<W@wÌË^ôð¢‡=¼èáE/zxÑË^ôð¢‡=¼èáE/zxÑÇ~‡\÷x®{<×=žëÏuçºÇãŸ{üsîñÏ=×=žë •?%䯮쏩¼g*OøŸû)á~J¸ŸûÕ•ý3U'ìO	ûSÂþê:Ù?ýeªî™ª{¦ê©z@/zЋ€^¦êÝèF at 7º˜ª¦ê	èH at G:Б€Žt$ #	èH at G:Б€Žt$ #	èH at G:Б€Žt$ #	èH at G:˜ªô$ '=	èI at OzГ€žô$ '=	èI at OzГ€žô$ '=	èI at OzГ€žô$ '=	èI at OzГ€žô$ '=	ÌÕº˜«ô% /}	èK`®˜«æêÝ	ÌÕúП€þô' ?ý	èOàÿiÜñ€ô( G=
+èQ@zУ€ô( G=
+èQ@zУ€ô( G=
+èQ@zУ€ô( G=
+èQ@zУ€ô( G=
+èQ@zУ€ô( G=
+èQ@zУ€ô( G=
+ÌÓóôÀ<= S
+èT@§:Щ€Nt* S
+èT@§:Щ€Nt* S
+èT@§:Щ€Nt*0èU@¯zЫ€^ô* W½
+èU@¯zЫ€^ô*àÓ|º€Oðé÷{ÿÑ+àÓ|º€Oðé÷}÷}÷}†]À°ܽ
+ܽ
+8vÇ.àØ»€cpìŽ]à¾qà¾qà¾qÀ­¸u·.àÖܺ€[Ðí€[pën]À­Ü]è{@ßúÐ÷€¾ô=`Õ¬º€U°êúÐÿ€þô? ÿýè@ÿúÐÿ€þô? ÿýè@ÿûèy=ï£ß}ô»>ôч>¼Ð‡ú|ž}>Ï>ŸgŸÏ³ÏçÙçóìóyöù<ûœ§>ýîÓïŠyIż¤b^R1Ÿ¨˜OTÌ'*æó‰ŠùDÅ|¢b>Q1Ÿ¨˜OTÌ'*æó‰ŠùDÅ|¢b>Q1Ÿ¨Ðï
+^­àÕ
+^­àÕ
+^­àÕŠóWqþ*xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+ø®‚ï*ø®‚ï*ø®‚ï*ø®‚ï*ø®‚ï*ø®‚ï*ø®büWŒ£ãgÀø0~ÌkÌkÌk||ÌkÌk‹“ý¨Cj¤&j>ÎãpÀ80ŒÃãpÀ80ŒÃãpÀ80ÌWÌWÌWÌW‡Ìg†Ìg†Ìg†åäç=jA-©ž¨}jEPóq™—™—™—™—n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸Q]Ág^KÈ‘r¤„)!GJÈ‘r¤„)!GuÝz_/æù@]…ªÔ.µG-¨%ÕSµO­¨ê©‰
+~?‚ÁàGð#øü~?‚ÁàGð#øü~?ŸÀOà'ðø	ü~?ŸÀOà'ðø	ü¾oàø¾oàø¾oàø¾oàøy>`ü¯cY©iæAã·«[™?wƒ_
+>5øÔàSƒO
+¾3øÎà;ƒï¾«k¤&jƃï¾3øÎ໺²_e¿Ê~•ýæëóºö©u@RÁWðü.ø]ð»àwÁï‚ß¿~Ü.¸]p»àvÁí‚קNý÷؏ýö8®ûï±ÿûï±ÿûïq\½	ÇUp88ÇQ€W€W€W€W€W€W€W€W€Ç¸”_Éñ•à—à—à—à—à—à—à—à—à—à—à—à—à—à{ð=ø|¾߃ïÁ÷à{ð=ø|¾߃ïÁ÷àðø÷Þxàý÷Þßçý}Þߧÿ}úߧÿ}úßçý}Þéw7q<‰×
+|ßx?¼@Èš²f„¬!kFÈš²f„¬!kFÈš²f„¬!kFÈš²f„¬!kFÈ™rf„œ!gF•Be„P!TF•>e„OáSFø”>e„OáSFø”>UWúÅçÊ/U1~©J]Á
+àÎK ?€Àà3.Ÿ2§Œð)#|ÊŸ2§Œð)#|ÊŸ2§Œð)#|ÊŸ2§Œð)#|ÊŸ2~y‹ñË[Œ_Þbüò#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œª®àø¾oàø¾oàø>¼˜àAb:Œ˜#¦Ãˆé¨kœ97Žv]ÌErÑ\º¹ôr)r)sñ¹„\ú¹T¹ræBÊŶŠd<Éx’ñ$ãIÆ“Œ'O2žd<Éx’ñ$ãIÆ“Œ'O2žf<Íxšñ4ãiÆÓŒ§O3žf<Íxšñ4ãiÆÓŒ§O3^7ãu3^7ãu3^7ãu3^7ãu3^7ãu3^7ãu3^7ãu3^7ãu3^/ãõ2^/ãõ2^/ãõ2^/ãõ2^/ãõ2^/ãõ2^/ãõ2^/ãõ2^‘ñŠŒWd¼"ã¯ÈxÅ^‘¬ÈVä#*òùˆŠ|DE>”"J‘¥È‡RäC)ò1¹»Eîn‘»[äî=v¶ÕÝ"w·Èý,r?‹ÜÏ"÷³ Ÿ…Ï%w·ÈÝ-2P‘ŠTd "¨Ì@eî|™ñÊŒWf¼2㕯ÌxeÆ+3^™ñÊŒWå}VyŸUÞg•÷Yå}VyŸUÞg•÷Yå}VyŸUÞgÅ>ó1Tùª|U>†AÆd¼AÆd¼AÆd¼AÆd¼AÆd¼AÆd¼AÆd¼AÆd¼aÆf¼aÆf¼aÆf¼aÆf¼aÆf¼aÆf¼aÆf¼aÆf¼˜ñbÆ‹/náù¤¹°Õ˥ȥÌÅçréçRå2˜]^û†ÍcKë§wFR<;Õ8ß³ó’Õµå•ÎsÆI„sÃՍcçNW#v†ã¶5/ÖlxøØÒÙ•Î`94×7—Ž[9½¹ðÜs§O,mœ;µ¶tns>®Ÿ;º¶²:·´±ttõØ+—×ÇëË·žjýüìd£;ÞØÝÜxåÒîfÃW.Mšö¶Þ7îEY¦ÃÇWO/]ÚX=½ºyiãÔÊòjÞ¨¤Ñ¬Þ¸Ü¬Þ¸Ü¬´æÞ¬¹7k4TŸÔãŸÌÓ·ÕÓ'òü°±³zãò[êË;ó±Ù,6›ÅF³Ð<‚Ð<‚Ð<‚ ÍfÚl¦ÍfE³YÑlV4´y>Íó1ÈçcòX:þÊ£K;Ò釗Ö6¯·Ñ2®?¨µ•³góv?N¶ç·FÐb¨ÿöxÞoóÜ7^·‘ÆóÅF{i<Ÿ¼ÞýŠ÷¯Oö?c4^ŸìG¿âùbãy—çåW<—ÆóÅÆó~㽓ç2Ɲ;º±´µÌ`}³óüñÉÊ'´Ÿ?‘«ÎåyøÖÆáµõÓ'În.mLNzóS4?µAóS6¿ÃæwbØüNôóPé¬]îDÌ {Ç=ŸZ?½~bcéÌI^é_~åŠÕñÂþ•W7?âqfÌWl÷›Ûã”ë/ß&ÛnùØzçyã®äXŠÃGkrÙ:oe!ã_ŸÛxž?ÓúµñvãõÔxn´I6½F›ñsÛ:j?¬.Ÿ¯ñÆ¥S4Þ¸tò|Ý×F³A³Ù ÙlØl6l66›Åf³Øl›ÍR³Yj6KÍfÖlfÍfo­‹fõÆåfõF£™4›I³™4›i³™6›i³Y·Ù¬ÛlÖm6ë5›õšÍzÍfE³YÑlV4›•Ífe³YÙlæ›Í|³™o6Íf¡Ù,4›õ›ÍúÍfýf³æx‹Íñ›ã-6Ç[lŽ·Øo±9Þbs¼Åæx‹Íñ›ã-6Ç[lŽ·Øo±9Þbs¼Åæx‹Íñ–šã-5Ç[jŽ·Ôo©9ÞRs¼¥æxKÍñ–šã-5Ç[jŽ·Ôo©9ÞRs¼¥æxKÍñ–šã-5Ç[jŽ·Ôo©9ÞRs¼¥æxKy¼Í¾¸ž?,]¿{‹ûÆ‹MÆ”Èsi<×Æónãy¯ñ¼h</Ïý%ÆïùtxyuéXæ÷P>:žÍù˜W—_Ùzs’pø\!­ÖýSo8òøGîâ~÷?º¿R÷—ÜÿØíþbä¾0rÿý ûóÝîÏ.¸Gº?}kÕùÓ‘ûü÷¹î‘‹î¿]tÿuäþäYîî³#÷_Ô}æá;;Ÿ¹à®>|§ûôÝÖùôE÷G·¹OÜŽÜ¨ûÏûÝï_pÿiäþã>÷îu¿÷ ûÝ‘ûºùïÜë>ù‰çt>y¯ûÄsÜoÿÖ5ß¹ßºÆýû‘ûÍ‘ûw#÷#÷ëܯýêõ_¹_½Þý[u¹_~ÓÞÎ/_ëþÍUî¡‘û¥‘û×#÷¯Fî_ŽÜ¿¹_¹>rÿlä¹_Øë¸ï`灑»ÿ£v~ä®ÎGt}ÃôG~þ`ç#wyÜ}äÈôÏt?7rÿô‚ûÙ‘û™‘ûé‘û©‘ûð²û'»Ý‡>x°ó¡e÷ÁŸÜ×ùàA÷“ûÜOԝþ‰‹îÇGîÜ?¹Ûç~tä~ä‡ww~DÝïvÿpÙ} nòî‡Fîý?¸ÐyÿÈýà‚{ß{¯î¼oÙ½÷={:ï½Ú½gû9÷ý#÷}vu¾oä.ìrï®ßôîî]ïÜÝy׭Ý?¸è¾÷v¾wäÞñö»:ïxнã
+Óoÿžƒ·ßåÞ~dú{ºï¹·}×áÎÛFî»»·Ö‡ùÖʽåÍó·ìwožwßY¿ðËî¾úLÝwнi¯ûŽ‘ûö7îí|ûȽq¯ûû#÷†‘;?rGÿ¶{ïí|ÛÈÝ{¯û{Ëîõ/9ÐyýA÷wGîu#÷ÚÝîžw÷œ;7r›ÝÙ‹nã¢{ÍEwfäÖGîôÈ­Ýè^=r¯Ú;è¼êN·:r'ïu'êã#·2rË#wl䎎ÜÒ³Üß¹è¾uÁÝ5r{ä^1r/Ù\çåÝËæÜK¯ººóRuß2rß\#óÀ½ä€»³½§sçÝ‹÷»=ÿÊ΋Fî›æÝß¹~ãžÎGî÷¸o¹Ô?yÁÈ=ÿy{:Ï¿Ò=ïº]çíqÏÝåž3rvÁ¥.ŽÜpꙝáE7xÐU/pGFûú¯Û×ùúýîën¿¢óuûÜíÏÞÕ¹ýÈãW¸gïrϹþÈ¿¿.:_îéøý®,æ;åWÌ»Þõ®»Ë©ÌwtädÞ-Þ6ßYÜån›w‡Ÿ9Û9¼Ç=sÖ=CÝÓŸv°óôe÷´Cû:O;èís·Þr°skån9èžzp¾óÔ+ÜÁy÷”‘»yänºÂÝXçûÜ“—Ý
+Ýõõ!\¿ì®Ûå®­Ïàµ#wÍE÷¤»ºÞ¸z䞸ìžPŸ©'ŒÜUõ›®ºÚ¹ý#wåÈí«ì¹½õ±î¸=÷º+–Ýî‘ÛµpUg×È-Ô­®ró#7·ÇÍŽÜκÙΑ۱ßÍ,»éú‡Óõ8àêWÝÈMÕÛSÏtí=®5ríûÛËoúîöÓÿ&üiýÿîÀÿöÏu­©ÖñÑ…éãm¹ÖŽÖ“Ž,L±5óÅöÎÎù©éÖm}âiíùÄ#Ÿxdñʽ7î=xãޏO·;ë®yì3£;vÿÕŸoÌjµ[oµ:ÝÎ'[³­×¹~ÇÞöT{jïÌŽ™ÁŽ)×ú©™öŽ©k§Ë׶¦çö<öÈcìí÷¥uÛíh¿¿ø‚;_¶cÏôçÆ_~ÓÏÞ0ßnßud±œ
+;ž;õœ«SÇw¼ajÇL{væ@ûI3Ö~ÞÌKÛ/›Yi¯Î¼næMí·Î¼»ýž™šßsWë®+olïíî­ÿ¹ùãí=S=ú¥W=Ôùäo˜þÔŧOê‹7´Ú?ÖjM¶îçÎÖ»ŽÜêöNw¦§êÎvÆÅMílílïmµvƝž™Ú1}¤smëÈŽÙ=Ÿxø±‡÷;\÷7w·Sww';ãn·æÆݾ½3µª˜ZœZì,î´©#SG:Gv¾hêEí\™úŽ©wNí¹ªý$wÃÜSÛ‡œowdîDû¤{­;3÷Cs»êCpÝÙv·>€½Ó¿×~û½¿÷¥GµóÉ/½gêøcþ¥þÔÇZõŸ©Ökÿôôùé×·ö·®i9ò”ցöì};ßÜ9ðíÎíŸøÀ¾ûÞví5¦vØÙzÁÔ¾+Òµõ9ÿÂ#íÞ‡¿ðÈÃ{>_?¾ðùú…Å#‡î¸îÌu¸î7¯{ôºÎ­;ÚwLÝqàŽk:ÏØqÛÎÛfŸ1·ÞZo¯O­X¿fö®×´ïj¸ñúvWK`wûæ'·öîiuµµãpûæ›fvLŸìg~ý£¯úØÑc¿ùêÑFkzìÚ;îŸú±7¿çÝSßúŠ_üX¯÷á§=£Úsí+ÛÃÑï?ô}?÷á÷OŽé\}Ló­'´žäÊ™öµX¸ßÛž8»ïŠ¹}Ò·!wÏçÜ|ÇÕ¯o½~æüŽó;ÏÏžŸ;?ÿú…ó»Îï>Åù=ç÷¾~ß®~ôê½uooš9°ÿªîxÕèSoÑqoo¾iüïÔÙw}èƒï~ç‡>ôÎGÛûFŸôÏFÚÞëþà³ÿøgÿøW>ö'ïýÊè‘Ñçêè×ýÜßõyo·Öÿ´ûXÝÇ[ZŸ=rû®…©ÝówÞpýÎÙ©swÞpÃõƒ¹ùëo˜>к¯ý–éý÷xËØ;ýÀÁû÷¾íÖëçæo¸fGëÅ×ìܽcçþ›Ò­{{¨þB=\Ÿý~ŸOdÏè/>¿ç/>¿ï	Œ¯ÝŸÛû„þŽ­ǃë–ñà:uíܵó×.®?”gÌ?cáٳϞ{öü³æŸÜzrû)S·ÎÝ:ÿ´+oÛہ§]uëõ·Þpèɇn|Ê-÷ÍÝ7ßÂ}»ö`jjfnfÞ-¸]n·»ÂíqW»'¹kܵÓ×ÍÞrÛ¡;½òÐùCo8ôŽC8ôè¡'Ö£ñ5í[l}
+oh_ß>°æ曞zK±õù×'ô¶öávÑ«§ŠW¹ïz᏿â-o9ú®;ú±¿üÝWüÒÚñ_^zãÛV>xäƒßÿ‡¿qüç¦ïøð­·¾ä%Gžwãî§ýÀ[Þ÷‘›oþÅ¢xù‹^ðM¯xÊ»ßøþ]ßÚúsÓÿóÇÝ_õñ»_ýÑ|•Ç»òc*n?¶ۏíÇöcû±ýØ~l?¶ۏíÇöcû±ýØ~l?¶ۏíÇöcû±ýØ~l?¶ۏíÇöcû±ýØ~l?¶ۏíÇöcû±ýØ~|mVþÀí­º¿åÆ¥ý¤úïLë¯ù\~z{ãåç^zöâúï·üu£þ_ý™n­mý;=>?ž}üñúߎÿ­·§[_vH?·ÕW›GzùÏ‹©ß²µÏVû­Î×Ü»_¾ùhëÑÇ¿ì…ü™¶¦½uüoúßÎc­­§?ýø—þþ>ÒzÍ×ô÷3_ñ÷é­õ­s<õ¬OýÌOÿÔ/¼òŠÛÿ¢uCþP~éãïûȤþåï|é©»6f¿¹ù‰ý/Þ]I
 endstream
 endobj
-7296 0 obj
-2315
-endobj
-7297 0 obj
-792
-endobj
-7286 0 obj <<
-/D [7284 0 R /XYZ 100.892 685.529 null]
+7284 0 obj <<
+/D [7282 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5235 0 obj <<
-/D [7284 0 R /XYZ 100.892 660.623 null]
+/D [7282 0 R /XYZ 100.892 660.623 null]
 >> endobj
+7279 0 obj <<
+/D [7282 0 R /XYZ 100.892 643.753 null]
+>> endobj
 7281 0 obj <<
-/D [7284 0 R /XYZ 100.892 643.753 null]
->> endobj
-7283 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F51 3736 0 R >>
-/XObject << /Im29 7272 0 R >>
+/XObject << /Im29 7270 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7300 0 obj <<
-/Length 816       
+7296 0 obj <<
+/Length 814       
 /Filter /FlateDecode
 >>
 stream
-xÚÅUMo›@½ó+öRYï'°½¥uÒ:R¢´vÕJic	Xp>þ}gw!µ]ÇjÓH9íjfx;3ïÍ@ÐôÉû0óF'’ J°"Š¢ÙQIqL(Š…¥h6G—>U,¸šŽNC	VQ$lhaÎ9 Ù £,ÓëºB.…?©:`Êoª´+tíŒã´K¯Ó6oƒ
-ûoÒU—7ÎI©yÂ;žy·LÈj#	/¡¬ò.¯šƒïÌU‚îmd…¸Lp$%ÜK4õ¾x¤¯pVD0cb,Vñ³`‡Ú$MÆ®'ÅrÝäPN¡Ü÷ŒÊÍ#	ÐjèÙd|vtñ¾àÜÿš·º\÷ÝâÂ×gÿ6·îÖiç™Ô·FêãM+!^ÒµÝs€fâG‚1KKÈ­G°´îá´Æá‹Þ0šTœ ±†7öqF¤ÊPÈ0Hí%?!
-)†9:þèQ‚I$™“È‘ñ“Ðضs ÝåÎ]î¾õ4žø÷==*qô\NóL×sg<ž†Ò+¼ƒ¼NØC‡”(èëäs–c§À$A G%%³o1Še:”à„÷Ò=×]>H鷐bL`=j‰è‰Å„2 Ê†lÜŸa¤?4 †°– ˜mÕ¦Ìr‰Kb ‘¹,ϦA³;”ÛRáÇ…9¥ÿYW¹³€?„^ä}@­;q“Þõ‹4+J Ç…H;]Æ~í>Ìt²)ÇR(—C„‚À¯Ò¢v÷*¯úšw`Í–ú«èÜ™¥µMÁÜW©a©éŠ¬X¥ÐvXoáîy¸ÔK]·žs„ª`]ñ§ñÙQˆq…i¬A¤8Œ øA Ÿ1Œæÿ`¥üÆn)VC;ó1 QÐP?ä³» ©¿ÐeéÆ¥¨—ÎtX[˜×ÖYì†ÓÏœÛ3fPÖeùè®ízµ²*ÐMç,ƒF¬7ÏÖ
-¨ü}üªÑá>ž;§ÜL—íá¥AaBàOüª;ã|æväóð/+‹½îó“7X˜ŒâÞ¿hô"oÒò
-Ú ‰<ô¿ú¼éU9:šß2‚Õ’åó]çvŽÃ	[âA€A
+xÚÅUMoÛ0½ûWèh³¢OÛÚ­[Ú-ZtK†
+èzp'5`[©íôãߏ’ì.ÉÒ`ë
+ô$¤ž(¾GŠ %"è“÷aæN$A”`EE³¢’â˜P%
+K%ÐlŽ.}ªXp5;0†¬¢HØÐ8Âœs@²AGY¦×u„\
+R/tÀ”ßTiWèÚÇi—^§mÞ!4ö?Þ¤«.oœ“Rs…w<ón=
+˜ÕF2nBYå]^4ß)"˜«ÝÛÈ
+q™àHJØ—hê}ñHÿÂ=XÁŒ‰]°XÅÏ‚*“4»
+œËu“ÃsÏÁ}ͨÜ<I€VCÍ&ã³£‹÷p‚sÿkÞêrÝW‹_/œýÛdܺ]§gPß©MH¬„xIÕvךQsž#ÁŽ¥%äÖ#XZ÷°Zãp¢7Œ&'h¬áŽ}Ü„&ÅPÈ0Hí%?!
+)†9:þèQ‚I$™“È‘ñ“ÐØ–s ÝåÎmî¾õ4žø÷==*qô\NóL×sg<ž†Ò+¼ƒ¼NØC‡”(èëäs–c§À$A G%%³w1Š[¡'¼—î¹îòAJ¿…c’ ë1PKDO,&”	æB6öÏ°NÒŸPÃ
+XKP̶ަÌp‰Kb ‘¹,ϦA½;<5¶O5†f•þg]åÎþj‘÷µî\ÄMz×G,Ò¬("mwûµ;˜(¨dRŽ¥P.‡4!€_¥EíöU^õ‡šw`É–ú«èÜš¥µMÁìW©a©éŠ¬X¥PvXoáÔK]·žs„nª`\ñ§öÙQˆq…i¬A¤8´ øA Ÿ1´æÿ`OùŒÝ§X
+íôÇ€FAC}“Ïn쀦þB—¥k—¢^:Ó]`9l¡_[g±3V#<³n÷˜AY—å£Û¶ëÕʪ@7³±Þ<[7 ð÷ñ«F‡ûxîœr3]¶‡‡…ŸøUgÆùÌÍ0Èçá_F{Ýë&o00!ÄÝÑèEÞ!¤å”yè¿ú¼éU9:šß2‚Ñ’åó]çvŽÃ
+SâþïA
 endstream
 endobj
-7299 0 obj <<
+7295 0 obj <<
 /Type /Page
-/Contents 7300 0 R
-/Resources 7298 0 R
+/Contents 7296 0 R
+/Resources 7294 0 R
 /MediaBox [0 0 612 792]
-/Parent 7265 0 R
+/Parent 7263 0 R
 >> endobj
-7275 0 obj <<
+7273 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-HOWTO/images/idmap-uid2sid.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 7302 0 R
-/BBox [0 0 435 442]
+/PTEX.InfoDict 7298 0 R
+/BBox [0 0 468 442]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 7303 0 R
->>/Font << /R9 7304 0 R/R11 7305 0 R>>
+/R7 7299 0 R
+>>/Font << /R8 7300 0 R/R10 7301 0 R>>
 >>
-/Length 7306 0 R
+/Length 7302 0 R
 /Filter /FlateDecode
 >>
 stream
-xœåXMo7½ï¯à1=˜!gøy*¤)z)KEÑS K¶ë²Èÿ~ßì’ÜÕÚA·j{2tÐrô8CßÌê³2Ú*#Ÿò½ÝwoÏ£º>t½U}¹î¬ºélÈAû¬È«Yí›Á¦Ì:yuÛ]u6kk8¨§2÷üÇ%óV°ÂÇf› ¢³ÚP6FžLšO‘ðÎDmrR΄ -ÁMµp4I‡¼µê˜É5Ûå½×) åkã¼ù,‰g fJÈî³ÉmrÚ圵ð…0.ûf¹íBÆžªERâ0dÆT׆ÄIÃ綫ëX»¬Úô²ß Œ·m
-Å€äéàFH$“§æ²Ç˜ÕRÕ<”5϶¹²¼Ò¯Æ‹õ¹³ÃsùÚîÕ»5®xßß$¯ÖÈÓ€Ptn9ß!ôzß½ùõ§÷ß­ÿì~XwÁO§sŠmpš\ÏXÜ!bEÑóÐ«E¨ýÖäÁÆÓ;BÁÅ{ö“ÎœL,äŸN*äg/¨çØ?ò&ÉS¼öQ®=eÜ›P
-8pšªÁ:‹#tŠRÒ6ç6¶™tŠ^N´XrÔÞáVH‡HªF¨ãm[DµÜv¼¡Ø…UÕcŽ!‹¡®©Ì.+žmQˆÿw}*é3.O2^Y¯³A=Ò¯&¤7:’‰†A«ÌÀ¯œR×FZÕY©>1!èKŒ{à{WŒ±	ê yT›0ÅÏ´Œü÷¾ÿ89[– Q¢ LHÔgëÃý×»Ý÷’°·çÖJ"	é‘YP0ЄԙÃEN¸°ë]÷æ÷˃`¡e‰°>œ£g—úŸ~¾oiŸo¶€Bþƍ]-B­FQ¥J~…F¨q^Âùæ©¥ÌêÛ=ø 2Rã£h[µx”ãäÒbÔªË9k†˜UÛˆb´é#Ö5Œó泊zë©ç8_
-Xº	ÀaÜ,« «–¢&_
-ŒFH÷Iú;ŽÎ,HiæŒÃVÍ,Wµ Ãp;.a0I=¨Ñ&ìÆå母[Äf)kj†%Ïö(ø*·}r叨ø}dˆ|DðÃææv¢‚cgéò\¿	$ï¼ü˜ñcŠèp 71¨/—8Ž “5	e"òϬMѤ_6‡Ãûwmù‰C¤jo†‚ˆîaª4´ÚÃmLx·X _5Pks*ˆ2ÄÑ
-/@Ð'ÙDߪ³…JˆúcOšðmŒtBC&ÇW ð“sšDß±áˆÎz/9½þzyx””ž£Ôg«ÎÚLˆ÷añ€¬?íbƒvRsŽ»‹Ãfß{€WáÓñï·»ÍC ¼ï_|ÚÞï6ítk8 xy“¢„Š“šáøtÀW#È¡¯ñ~*†^èÿ4ñĸ¤ž& b8òômÐÄ“•ô¦	¨Ž<}´šphÞ@Œ}xД¾É®¯ÊÏ-¨OУØûœ+ÃD!@z/‚FÖâÀ¡y‹Êp¬@'³™±%ip?Œâ·›»‹›»]#!¾v¸Ld2À’·"¾ÔëúœEKð«å\ᘠ&ÞÔD&P‚ԝÈ:¨Kˆh¥¼–Vj&à'×
-‡„@y,áŒ$±OCbwŸnvû̓ƥ—;‡íZAhGtèØg¾¼`âÝ #hzŸ‡²öb9>ƒ%x!fä^l€Aº¢AlÛ@Œ"*>¿‡±«Í/ó¼^¯0ÅÏñßTÿ_”ÑÄË‹•c\‹¬£
-šx/RÞ7ñ”þA?ß*6Ï.MUÝØÕ"Ôj´A¥‡sHD6»	ªa<YP{j)³$ÞÇî/­\‰
+xœåXMo7½ï¯à1=˜!gøy
+¤-z)ËEÐS K¶ë²Èÿ~ßìrÉÕځjs2|°vô8ß¼™Õe´UFþÊÿÍ®{{ÕÕ¾ë­êëUgCÚgE6XÍjW
+6eÖ)¨›î²³Y[ÃA=–u§¿.Y·‚°u¬¶	*:«
+ecäÉ¢ùÙÞ™¨MNÊ™´%¸-MÒ!/F­:f£CrÕ6Ayï‡]bíá¡­›¯’ýÀL	™}òAòšœ¶A9g-|a› †}µÜt!ニÕ")qV9f,uõ‘8éDjӍëX»¬êòrÞºAyÞÔŠÉ%ÒÁ5H$“§ê²>·=GK	ªz(1ÏŽ¹²¼Ò“¯ZQ}éìð¹üÛìÔû3”^RC%yu†<
+EA‡À[߁<g»îÍŸ¿}øéìŸîç³î#øétÎA±
+N“ë‹"V=ˆJ…ý/£ö[“Ok„‚1³]"9
+˜hû§«
+ûÙìé$ ‰Cö¬â൏R÷”Q8a4àB8ôu^ÖYÜ¡S”’¶9×g›I§èåJ‹%GÜ= k-î£ì0>oj£å¦‹ µ%…V£Çòض,†1¦²ºD<;¢0ÿ5žúXÖgTO2^Y¯³	Ô³~5a½Ñ‘LD‡0:3ð+§TÔµ²Ö#:+í'&ì`a‚OÂãclZ
+ymÝæLñ3í#ÿ¿ï¿Î–%ˆ”Ô$¶	iÈÖ/wßn·ï$aoOá‰$¤GVAÂP‰I8TroÛvoþºØb–ñá=»á«ßïjÚçG‡- Ð¿v°ËE¨U³%á,Pò-Dª¡Úºd§eI?|˜èA•‘EÙF‹G3N.-F­ºœ³f(Ùhk(ö8	¡-›/*òç­oŸ~ÀÝR@%l „AlP/ˆª ©–¢&?S–rö”!¾íÙᾂ”uµ0g\´ª( \U77-„Á õB‹Ñ@r—«¿ú\w¬–Su0„<;£èß«<öÑm?¢Ý÷;CàcJz}}3QÀ6V:†4ÿ±8îMLµÛÇŒ/“LD°ùë®cèh=B‹„ü3kSôèõ~ÿá}
+?qЙÐû<¤ÞݳW„%1£½Ähãã"üª¡ê˜3¢(C1Ÿ‰×%(蓤ŸÕÙ:™(l¡¿ú¤	ÿ€º!›íhüè¼&ÑwtÛˆÑK¾B^¯¾]ì$­'ÄhõÙ«“ºâ½ßß#ó[Ø€Ö
+;@<lÏ÷ë]ï^‡xøýÍv}_hïãìs€Ï›»Ýýú¡Þð˜h^^¥(¡ã¤j8¼àðU9Ì5ÞO@ÅÐkýË ‰'F¡zš€ŠáÀÓ÷AOVÒ›& b8ðô}Ðj¡ù Ññ +ý=¾+?µ GA“bïs®• 齈YË’–䣎þP$^ÆÍeƁdH at uÌ?ÂåO×·ç×·ÛJ!ÂöÚ¡”Èd€%kE~©Wö9‡–àW
+å\~v¨¨Éœ·5	ô gÜÈ:hJÉCPdš‰ÄøѝÃ!!ÐBKÐ4IìãØíçëín}¯Qò’cçp‚@9¢Ã¼>+÷ò~‰7ƒ·h6Põ>%öb9¼ƒ%x¡edi_2¶Ç s‘þÜd#£…ˆÊcÊïß`¬C´ùy–Åõ¦ø9ü•êÇíòFxy­rŒ²Èx«Fø Bޏð(þå#üü¨8<»0ŒUãÁ.¡V͍~Ì!‘X4¹†ªOÔžZÊ*Ùïc÷/J<
 endstream
 endobj
-7302 0 obj
+7298 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610111328)
-/ModDate (D:20080610111328)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528091000-05'00')
+/ModDate (D:20080528091000-05'00')
 >>
 endobj
-7303 0 obj
+7299 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-7304 0 obj
+7300 0 obj
 <<
-/BaseFont /RGGEYY#2BLuxiSans-Bold
-/FontDescriptor 7307 0 R
+/BaseFont /DLNEXN#2BDejaVuSans-Bold
+/FontDescriptor 7303 0 R
 /Type /Font
 /FirstChar 46
 /LastChar 119
-/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 611 0 0 722 0 722 0 611 0 0 278 0 0 0 0 0 0 667 0 0 667 0 722 0 944 0 0 0 0 0 0 0 556 0 556 611 556 611 556 0 611 0 278 0 0 278 889 611 611 611 0 0 556 333 611 0 778]
+/Widths [ 380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 580 0 0 762 0 830 0 683 0 0 372 0 0 0 0 0 0 733 0 0 720 0 812 0 1103 0 0 0 0 0 0 0 500 0 675 716 593 716 678 0 716 0 343 0 0 343 1042 712 687 716 0 0 595 478 712 0 924]
 /Encoding /WinAnsiEncoding
-/Subtype /Type1
+/Subtype /TrueType
 >>
 endobj
-7305 0 obj
+7301 0 obj
 <<
-/BaseFont /YALMGL#2BLuxiSans
-/FontDescriptor 7308 0 R
+/BaseFont /MSTPMV#2BDejaVuSans
+/FontDescriptor 7304 0 R
 /Type /Font
 /FirstChar 78
 /LastChar 115
-/Widths [ 600 0 0 0 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 0 0 600 0 0 0 600]
+/Widths [ 748 0 0 0 0 0 0 0 0 0 0 611 0 0 0 0 0 0 0 0 0 0 0 615 0 0 0 0 0 0 0 0 0 612 0 0 0 521]
 /Encoding /WinAnsiEncoding
-/Subtype /Type1
+/Subtype /TrueType
 >>
 endobj
-7306 0 obj
-1354
+7302 0 obj
+1349
 endobj
-7307 0 obj
+7303 0 obj
 <<
 /Type /FontDescriptor
-/FontName /RGGEYY#2BLuxiSans-Bold
-/FontBBox [ -22 -218 932 744]
+/FontName /DLNEXN#2BDejaVuSans-Bold
+/FontBBox [ 0 -235 1071 759]
 /Flags 4
-/Ascent 744
-/CapHeight 744
-/Descent -218
+/Ascent 759
+/CapHeight 759
+/Descent -235
 /ItalicAngle 0
-/StemV 139
-/MissingWidth 278
-/CharSet (/n/c/B/o/d/p/e/period/D/underscore/P/g/F/s/t/i/S/u/I/question/U/w/l/a/m/b/W)
-/FontFile3 7309 0 R
+/StemV 160
+/MissingWidth 600
+/FontFile2 7305 0 R
 >>
 endobj
-7308 0 obj
+7304 0 obj
 <<
 /Type /FontDescriptor
-/FontName /YALMGL#2BLuxiSans
-/FontBBox [ 0 -16 562 563]
-/Flags 5
-/Ascent 563
-/CapHeight 563
-/Descent -16
+/FontName /MSTPMV#2BDejaVuSans
+/FontBBox [ -1 -176 649 729]
+/Flags 4
+/Ascent 729
+/CapHeight 729
+/Descent -176
 /ItalicAngle 0
-/StemV 84
-/AvgWidth 600
-/MaxWidth 600
+/StemV 97
 /MissingWidth 600
-/CharSet (/o/Y/N/e/s)
-/FontFile3 7310 0 R
+/FontFile2 7306 0 R
 >>
 endobj
-7309 0 obj
+7305 0 obj
 <<
-/Subtype /Type1C
 /Filter /FlateDecode
-/Length 7311 0 R
+/Length1 85816
+/Length 34700
 >>
 stream
-xœ]UyTT׏™÷fd&pæ¡‚€5nàrT„aQDÀ€ È:ÈÌ6ÁX+ؘ£WMD[¬€Á
-*‡ #.pÔ²E£Ø`Rë©ÁT”Xê÷ðbNïÕ6ýã½sïwïýÝß÷û–KSb+Š¦iÙºÜ|MD‚.ÛËWŸ‘d¶x
-Ž´àd%LåbÝïÑ]ÌtjÝÉA;d+B¶â³NŽØC—J&BÁ$JDÓùJ×è3²4©i9¼[ä†h÷9s<ÿk™ïããÃo+x·Âû%gkRu¼+ä%gè3µÉºœeü²;#C“ȧfd¦eó	IIÉIæcQ	ÉÛyµ&C“™©ÏãÝÖ¸óÍ›7ß‹ü>Z¯ÑnËÍæÍìùu¼™ÿ¯,E9ê}õI™É~a©êìMDnP䎌í¶è·¬¤¨PʏšI…QþT8¥¦\¨ùT 5›ÚHERÁÔB*Šò S›¨Ê—ZO­¡¼©‰Ô*Š§œˆn”˜
- ~OÛÑQtƒ•½Õ«ÑÑ>‘A¼\œ+.c&1˜íL3ÈÒl)ûFò±¤DrAb’:AµL T!x®Üþ6ð°øÉ
-ãmÁÀÈ´_¢è¿clè鼐¾V‰Ë/°	êÁߘÌÐD¥ÂøP"Úr€ÀЁ	§à)WSü;")^äåŒ×aõàLX“Ÿ wB…§±þúÌH$õÛzg¤õ¸édªìBuY=ºÎf–ùIe£)äN>Û?¨„™X³&+F9À ûº^Öhh4œ»…n¢»I7|Lw¯œk@·PKVÛ¶K[
-›ÊV»²àå,aB¯A•¢S«ðËÅÀ*FîÕ¥‡¬ON÷Uá –ñ΋Zâf1ñÚ…+öqÅ4öÇêaLÁRð~4¬†µn¯ñ
-ÕAÌpý-jg×hÿU+7õ½zÕÚ÷@ešàU!Ì…	°°Üþ<AÛcVu—àî ü¨ó¸”Mkß\H(rîx^â[¹úR´JÑmèÒt9v£¦ªÚ6)¶ì¸ošÔ³Ücüýc{_¼4õõ™á³	ð0Dìæ;l#Аaþíb©e/†šô=H
-ÿ x?È}Ú¢Rô·¦^v@±:M¨¬õãà1jµlÏð°©×Þ–ófÂÄ×´PyÜÁRô%*Fí{[v×¥-ìÀ4á<׋q^ý̼Àn¨÷_Õ*¬dwnMÊÚ„Ñö“;.ì.ß÷ÕþVé¡AîØ£Ú¯o¡ZT³³\bÇ‘¼Ã)ÿ‰®
-rºŸDöxˆú Žê;ÓÜq³§ú8ãExoL‡º
-‹É¥dÝcl˜#Ç%À\_Žá…Ë1£’ÎE°—䊞 > ˆÇ	"äÁ	BY˜öø'pWïï°§
-ß«VàÄd//ùΐ¶juJÚ2³¦X÷÷"ëS‹¬$a7L¬<‰¬ÞÅó;	qçBñs°/ÃËŸ`1L½]wªãªÊWï•Vùõ%va&”é.i/§uîüž`ɳ{ PœkÁ×wÕw¶û¦@ß ¸î¡Ÿ¯|Ó£²T \Ïuú[3÷èæà.Èñ]bûäcÇ,¼-…f#`eo"ƒÁËÍÁ	VÜ~`ôb"ÕôÅj,J-É8•§:•²èêNX=E1X»§tOî´ô¤Á©ºâÒå®’ÏJ>;O¶³_`ë¿…€7ºn”Õ×Ô×|Õ‚ÚP_šÑ¯û·NI*-<Š*¥jÊ›•Šánô§ìƒ1R<éïÇËä·\H^»¨?ìÅe~¬®:|´J9$ùÍþ½
-‘4¥¨Ä¤‚&Ò- š4œÏËïg»Í§-‰kî6ì¨VL@ˆO,	jØ’´¥0Úa¦Hø§ð‡ºw5¦ÖÇ´/=?ƒ8ºÆÕÏÀ̍à¦Wý¼ãe¾AÂ¦®H™ç²áòÃ}JìÊÃó^/†õ$a zB2AÞ‰Ϩ0[ÉWdT ¶©×škûjK\ý¥ÒR¹6sÌì,•eé…ùBƒ` ´žJƵñ	¡Úš?+á%¡l+Á6] ¹×|¶³^©È_;îܨ_9}ÛFͨ–Ãã¡MɁ„árK‚V“Uá Y+’,ˆOðòŠox¢Š°™#ŸÊðæ-m±ýŸ<AOPÿ™6SscåMôH*Id£§,ÚѨx	†ä›Ï˜l© c0o-2\Xð300‹},ÈÆäÌ{Vãz›Yñ„?žPÌü
-a0öçˆÇ¡0ÝìqÅI.ëôïþ€ÎI¡MV«®cWìº2Ë‹”àÈ_?ýÇ^$m?[ZPô鮽ªüB„Ô{"
-§ðÑ‘Š;‘\•)U·W7å›;ѵ3Í­RE>Ò.<ñ©<Y¼´œÂ¸41Îo³®ª¾¡²üf©ÒtÌP|äPÙÑ©²7vNBjÕø7YÑÜù?ÏÒ@×¥úΦó™[•xÌbùÕ\°—Œ¬½…©€Øìˆå'­‘çQJÌ‹Û(U4wKþ¿Gw¼ïÑD³6¤^›£.6eõ87aɽÜoS¯ªRÚ‚.¡@›¥‰”B©¬q×Ûì?Û=Æ_í·¹çՐ¥¾ñ|Tç ñ£Z/`1=ÖH:z#ƒÝXÌŒ]ÆŒpÙl‡moµQl„.uY¢®4¤ƒ+Éì:^ø8¼—îc[nì¹Zxn~­È&!¬é;àd„IWÀY$0Ç¡®â’ΆÁ®³è)8¹<ójö*Ó·ìŽ=àCL‡ØÏL·º´ÓøqpüoóÃbUËrâ/–¿ñý•9§C9¬(=Í‚µ58Û€õ1[[p>nkGQÿ¶'®E
+xœì½	xÅö>\½wWïÝ#²3ì aÉLwBسL HÂŽÊ$™,db2aUPQADÄ
+QP7\QQqqADT7þÝ='$ úóz×ïy>F¦ª««ê=çTÕyÏ)’{’Ñ%ˆB#ró{û‡ÞÏù]T®Ž?«p¾^-šóx"‘wZv#D”T—VN §Fˆêå´­)­˜Qï¯:mƧe‘pñ!æéˆÈu[“ÊœåÁ›œþÎxÔ¡¬26ð;_Ñ¢pü¹Ý[uYRž^Ý|¡ø0B´Ûê¯
+WFjZ/Ûç<ûêoWGkc“Þ_,#”:¡W×Dª/¯8€~BÜ*¢„%h3ú™²?Z~¢Ú Òù”8­n¹†(@÷…NÏ9ô<¢À)+镈tÞ_Lïp0I"ˆ
+ÑN­#½’ØŒ6¢ýÎè9Ä5Ìf¼Ûۓםë(³•8̤)h,]I÷§×ÓsèõN:º„žƒÖ9ß)äNz9=‹~ž…ƺ’Ùî_W´ŒJ´GËÈeDÑŒÈ w -ŽÌ%Ä@bÑ—ÙÎlG»Ð.b„Ós
+šFbbq„èIŒ%Ö;£Ž¢£DçÉ&mâqÀ‘x)ÚIe0Z††ó´ípäޏŽ ZÚ™-dv‘ݘ]h+Ú‹ÞqÚšLÎw+ª;³ËùF«ÑdÇ2{	’ÙÅú¸¶t	y$æ’÷Çˆöé|¢cÍó¨ô$z}•óÖ±ARAª
+•æ|Ot{0»ˆeŽ{Ùb†ÓÏýÌrp’[É
+ŽŽO¡=Ž^:9‘œE.C{ˆµÄFGb„ækéI\!Ý-c—ÑcÑ!×6h'¹Ã±ÇÏÐ6¥Yt˜Ê&&Ñ«]‹¡ŽÌm¹¡¬–C¹¹Ž&ˆJF³Ïyû˜-ñÓ‹g[¡%tgê6Gv’¼¨ÞnÄ´ƒL¡
+Ñrﳈ؀¡
+¨9SPçX†¦H%øµudǬâuƒFŽõ¿8®m÷„Óýç_‡F¬“gø7œ81b,Ý‚·Ži¹Žêȯ£;¶ßûG/÷vO6b¬Ñ%”Ó†&e8ùcªûä4;í¡ºŽéèü—5i¿¨Ì?_›ß¾Ï|-Ò§;rÎ6Wù[+„´¶?Ö¨;Ü–SþLp[|C©Ô
+MG’³549'œùš[å”îÁkN89n)€:DbÔIDÇ¡N!ôCvêùPgDΆ:‹Tò~¨óH'?‚ºèî@¨ËÆ­]®€º‚¬¾¡®!±ïn¨ëˆî{ÄA$hÁ¨—‡îÖ	Ô„ØuñÄ7P§Ÿø
+ê4ò“‰PgPS²ê,jM.€:Ú‘› .¢>ä·P—;ö¡†A]Ae};B]CMú>uñ}?Gé(ŠªÑTƒÊQ)*C1äG]Pêê”ÔËùZ¡ÓÏҜ>1gŸÅœÞF•(ÁiÍBUNÿN-U8?Ê;9W­÷qʈ3fªó]ìôÄ5é$jƒ4ÕÁšìŒ©rz»r„1ÿb†S›ìŒêœENß°7[Äö4ò;³T9ßÕNŸBgÞr§ŸßuÐÃÞ;ŒPz´zFMyiYÌߥ¨«?ЫWÐ_8ßV«ÕD•	þ¬ª¢þÔŠ
+žÛ«ÖŸ©ÔL÷À¿šä-O­œ­*õ§…Ëþ``FdrxtsvÂU¥‘Z¸&â/¯òW×V”ù‹£•áò*G²SUÌ÷tœÎW9iŽ2ŽJ(-ZQüGCü
+Ý
+öÿí!£½µ¨u,õìpV$àì+4:RS[­òz‚§Î\?o÷Óçu§í~&IJ¼Éã Û³^–’h•cϘ³<ÈÛ$1g‰û žÎ§æ˜êÌÑÃuÊgÙ#Þ|5ÞéáÌqÆ ²X¬ºOÏžÅΤSëzÔFëjŠ"%ÑšÒHªˆó:³‘õª~Sÿþè¸ïÜMñ6zÄÑ1Š¦9}Ýmý¯Ù¬îLƒ73œ>eÞÈrç]µ§WÌ;®Õj¼îQrgzš%O×£á0֝rÿHì|Τ{|K„Zc«ýÞ-`güýþK®æ_ïàμÞ
+:—;o°W‹y-î.¬ôl=Åi‹:+ðÉâj6›¯Ò›­áp•{2•yï" W©‡R«ž ë_­8Z|Å÷{‚'WÔ[ý*o|5à8BÔ™5{¬vAØ›#nisÆ<)NßOE^?wÆg¯ŸÁí—=¾—#Þùï½vvI;oåܱÅ^YëÉUäŒ	ƒ~Ø;Eέôf‰yoêíSâÔ*à$u9)c‚ëÓ\ùcÎþï~±Á&nKµwjŠ„"ot½4Åž1o¯:ocÞÛ8þ„8ÍEŽduÞ,q›Lóö@™ç•b`™J¯­±Fõ:Ôœ²+ãÒÖy6Lh´:n½Ò[ÏøZãF¤Öðz$œÔ³§çAüÞÌñ󟻬zêêÿ¹Öõ–‹K[}rGÇ<¹v]ƒFÓ<{Tþ%„úÓPâyõ*Ð0Ò±Øûv1¼ÒµÄd§G‘7_¼Oýú•xL÷lõ+Täa{—ƒ¤}¼ÓY Ò…£žghXƒÆ¾¨Á¿÷UNÿœ†ÚSúÖŸ•‹5öÇù=ÃžäØóͧ5â\þ“õŒz,臵¯ôÊÿñWÖ"æ1‘ˬaШÇ)–ú³±®Mf ·ÄÑ]›—x2ÃNªðöiÍÉ–¸¤®M‹­yã]WÏ aË=ŸQá=á“{’ºëUÕÈ¥§ðj©Þ‡†½Ýß»õ§Û§öÿÔ©^J4ì°°·F]‚SqN·Ç™dK€õ®ðÆ•ÿ7Ç'W§Æó³aϯ4Ì[ßR{rGÖŸ—ÓÙ#~.âiQ4ÍÓªØßî|Øî¤Þ§Àλz¶m×h—ÅÏLöiüRè÷h#YëàÔï“©ÎÛò3X,⤤1à·wµó‰³WØ󨑓#¯{\æú|Æ“Ræyx¿WÖ‚Œo'ýÑ>©÷ugòÝÅTyëÞØ^g²*nd¹ÆkøwÏj-Äï~Фþ´ÕŸ$7r¨8{ÔÀˆSg¬övôç»V,·î®Â'½ê¿ÓSý±V…pFbÀ‡%'-5…<œ\”ã<¹8¹ÎSãÄ‘yÞ»,§ÍïÄqyΛÑÎS†Óšá­Kª÷Æ}ßÎ;cœº;c.åÍŸ#Ïùvçç´¸sû½g÷i˜Ó?Ç™ËBc=Œ3[¾#Y®Swçî´f;eú¹#ҝ–Qγ[ŒÜ(4Ž—ãŒ*ðÎŽ;Ε%.iÓÞ€zªTYb½dݧ<gþ!ð6Õ™;˛ϕ?Á‹ÜzÈ·\ž7»k#wfwÎtG¢lïÉmå”#œ~ùž=S=ãÒæx:d:ï㺄<	â+—(Ý)G8ØnÁŽ\ž\¤è™à­£«O†7ÞEæõŠK–«ìÖf鶌ËáÚôIä|Oÿlçã÷ô/pZ
+¼µIu毟·~ïöfpåÆž5Fyú¥zvÈõÒ¼~®]{fŸÜqyV%ݳ—»n®äRªg‘ü3jR?[ãÕ9ÓîÀ'{ú…<Ke{½ó;†œþY'[âû1ËÓ5lŸ3¾ïã{"»‘uÓ=Ý•é †`O¥z¶;UwÆxò7h_TøNod³†Õρխ—§ÀC.8ƒUÆxg1äõJõÖ:ÿäÉôÎïp|ÔÉÖàFÁþÌ=)Ù©ö­?GõýþŠïˆÏU}ê
+fxû)$Ì?ixü'óÆ}WÈáµ"/ωôÛ§2w㨱!mw&4òµ#¸ìõ­<­_Ck<[ŠsVC®Ó8v;S†]ŸÇcùú¨·!úˆûîxNÔ8ê-öâóxX{2*‰zq`ôdd2Í{ÛÀéÕpw=%Ïs‘Ã÷'œÄªç¢†¹âqeØ‹\´Ú3Xó
+ÿ.3¬öø>Ž2Í«Ç 2qõ«ƒ¾nûÌÓ²áúûŸß¯ÿŒkP¯Ë™"‡Æö¯ñÖ»r©rÏÂn<Ùæ­AõyYƒM\ÄïÝ*O[õ†ÝçÎ֝~«àÚ ´‘äÅž­1ŠßṘØóWõw\ÿý[§õ÷ÿÒ}>å>èôÈëßw„Ïxäÿßá¿ttj$_ÔH¦†»ŽúžíõL7,ø¿v¯äÿݽþÿï•Ý+5Ü0üó^	ŸÂ°ÿ½{%|†líá^	Ÿñ^©A£ÿ̽þ“û‚ÿ̽Fÿè½Rÿ:ý+ï•ÎÛ©÷Jľ|»ÏÏã‘ÄÿÚíF§Þ.ùvã?s»„ÿĺþFüß¾eÂÞû}4óŸ¿eÂÿ÷Lø´[¦†\÷?yË„ÿÏ[&ÿì–	ÿ·LþÛ-öl0Ú™u¨'mÜÚ©ÎûÿÜÝ>ãšÿ·îŽðïîŽüÿµ»#ü‡wG
+w@ÿþ»#üÜýÙ¼ÿÞ»£zÏúÇŒòûü7n|ßÒü+o|ð?uãóûœíïÝøàF7>vï𯸡‰ýnþA¨á¦{8îS„2½Ðr®Íýɸ“?LçïR‰ø#Ñi]{øÿÂOÁõð®˜Q]Vë/¯¬ŽÖÄ"Åþ’šh¥?µ&2~¬Ãû©»ºøOÝ5†Á¸}t¤&쏋vòG÷p÷?ýƒÿC~ùçý§!—×â°?V.ŽT†k¦ø£%§Ï‚ñˆHMey­÷3tåµþ²HMÄÁ*­	W9ª'8º;j9ËՔFü±¨?\5Ã_©©uDcŽÅÊ„ýEŽÐØé+‹ÔÛ©¨(ZYítw;ÄÊœÙ+GªjëµóLÒ®«3Y±?\[-*;x¸8ZTW©Š…c®<%åÎ"uqgôøó£%±iŽùÛuõ$©‰T×D‹ëŠ"Þ4ÅåŽbå…u±ˆ+>e@‚³ÌEuÅ®$ÓÊceѺ˜#Le9 ¹5qS:ÓÖÕ:ý]uü•WkìmÚ²„F	.fÏh¿6⬃ӻÜÔ?
+ÚΙ¶Ú5tÇMçM+s6Öï¸ËPRWSå F¼ÅQm4Á_[W89Rs[\ýJ¢Îfs*ŠV—»zÔöÁ¸À™.\ñ4ˆï"O€“› *s–¡6Þê®JuÈ¿ó×–…+*pa¬æˆáœ’ð)zF«œ}Q㯌ÖDΨ¶?6£:Rv€zÄ…:õmex†sZœáÅå%åîFWÄœ­çTœIÃÅÅžæqÓ¹4\ãÈUW®Á.Pq¤¶¼´Ê£4~VAî
+9“Ôº#êå©=ɝ; žÁÂgž ÆÔËÑ0›#^UÅy£mŽ]uj"îïmx}ÝJ­kHw]êGÄÙs‘oдhMq­¿ÝÉsØÎÅ®Û¹Ç¶g2ge²á¼Fœ“äÎZ笁k“©Ñò“‚E¦ÇœãWW;Ç+\Xq_Äuwfv+¸aQÊÂ1Y¸Ö™1RuŠMÜ]×°»‹ýuUÅ pƒ¨Ø.®áŸ­jm´Â=ÕÞ²¹‹öW¸ÞÃ9+õ«ÃESÂ¥ŽbÎ9¬Šbw«þc›ê(Ça9"F*J\¡†„ü™¹9þüÜÌ‚1©y!V¾D^î謌P†¿]j¾óÜ.Á?&«`HÓ#/5§`œ?7ÓŸš3Î?,+'#Á;"/”ŸsóüYÃGdg…œ¶¬œôìQY9ƒýiθœÜvÖð¬gÒ‚\o(L•Êw'ÊKâ<¦¦eegŒKÀ™Y9ÎœŽpyþTÿˆÔ¼‚¬ôQÙ©yþ£òFä懜92œis²r2ó”Ð𐣄3QzîˆqyYƒ‡$8ƒ
+œÆ\—šžš7,ÁïL–먜ç÷ºôp¤tæð‡F»ƒó‡¤fgûÓ²
+òòB©Ãݾ®uçäáÌÜQ9©Y¹9þ´£JjZv(.›£JzvjÖðFêðÔÁ®:õ n·¸:
+æÀî€Á¡œP^jv‚?D(=Ë­8vÌÊ¥x=Û;–ÈöÄMÏÍɍå48ýê!ð˜!!ÂQ Õù/Ý“ÌS?ÇQם§ 7¯à¤(c²òC	þÔ¼¬|wE2órqÝõÌÍôvÀ(Çžîâ值î¹m¿ßN/w4(˜JÍv&ÌwÅpð)}Ýš^©Ž¹{wÜ5zn4î;¼]wÎ\åÜx›WuhÉ9YëĽ[a»tœw½žûpv·ÃDq×[<5âxÀZוDkpÔu&ÓÊk½“îP`e4ÎyþÚp…æŒrO‘×Ëñ•á
+gXíI1O9P¸ž«kʝ!ÓjÊcŽ3ñ‡ëœÖšò™@Ã5 at Sžþ
+\”ç—¿&R[í°TùÔHÅŒNß—Ë<IÊ«J¢5• ºg¾¢XŸúP!æ/õ&/ŽÆp´¦´‡c/âú§C§¿úûÿš8Çã ÿ߉ƒpCäÿ›qþ}N¾È›©¶ž3Π6,øŸ‰•üõ±þ߈•p|þm±ŽØ*VÂÿÂX	7ÄJþ¿+áSâ‚¿+á?Š•ü=Vb¥ÆÇ÷”pÉásÇIü«Â%á’ÿŸ
+—ð)âzyã¿:dÂUQÿ?2áiÈ„!dòÿý	Ÿ2ùÿNÈ„Ï2ùÿ‘	¤Ž>4×;uÈߊŽpƒæÿLt„ë£#ÿ?áÆÑ‘ÿoEGøŒÑ‘ÿŸ‰ŽÜÍzÊA9øà?|üÿ@àƒÿ<ðñÿ…À{Ï©±ÃÿÐÄêûò‚ÜÃ)zü3¿3ØÓ»·›âüíéݝ{ÿª×Ãû÷Õj§íÔ-üóß0ì9­|JyÏrÇYMïQ]VÝ<æßúÅOïw¢½?'f£ñè|C½ß¡&…hÄ qˆGÂHD’‘‚T¤!ÈD>tj‚ÎFMQ3Ôµ@-Q+Ôµqdi‹Ú¡ö¨êˆ:¡Î¨êŠÎAÝPê'ꅽߵ’P2êR÷EýP4 
+Dƒ¼«îtïJ:Óûg,4
+sŒ6ÜûGh$Êó~€v”£û4st™€&¢sÑyè|4ɱÄtºÍCO¢%èst9º-@·¢{ÑJ‚DóÑûh.Z„Ž ïÐ5è&t%ÚŠ>DߢÛÐ}èô=:ŠV ÐKhZ‹
+eºÎ±ßvÇÖ/¢—Ñkè´½Š¾pýMô:Ú‰tþ0º½ÞB»œåý
+}®rÖÅ]þJÇöUèg
+.ð.nk½Ú©ÎæøÒÙ3Ñ4]„.DНèb4]‚æ ƒèÚHPM0Kp~E¿	‘Ð	2¡*A¡a>â,¢	q6Ñ”hF4'Z cè8Ñ’hE´&Ú~¢-ÑŽhOt :ˆÎD¢+qÑ
+ý„Þ!ˆîD¢'Ñ‹H$D°›H"’‰ÞD
+Ñ}‚ö}‰~Db 1D¤iD:‘A„ˆLb01„ÈBëÐCÄPb‘M'rˆ\b1’È#òÑÏèô)ÚO£ˆÑÄb,1ŽOL &çç瓈0QHÅD„(!J‰2¢m"&Sˆ
+¢}†UD”¨&. jˆZ"FÔS‰iÄtb1“˜E\H\DÌ&.&.A÷sˆK‰¹ÄeÄ<ârâ
+âJâ*b>±€¸š¸†¸–XH\G\OÜ@,"7Kˆ›ˆ¥ÄÍÄ2âb9q+qq;qq'±‚¸‹XIÜMÜC¬"V÷÷÷kˆˆµÄƒÄ:â!b=ñ0ññ(ññ8±x‚ØHl"6OOOÏ[ˆg‰­ÄsÄóÄÄ6âEâ%âeb;ñ
+±ƒx•xxØI¼A¼I¼Eì"Þ&Þ!Þ%Þ#Þ'> v{ˆ‰ˆ‰½Ä'Ä>âSb?ñq€øœø‚ø’øŠ8H|M"¾!ßGˆïˆï‰ˆ£ÄÄ1â8ññ3ññ+ñq‚D$A’$EÒ$C²$Gò¤@bR$%R&R%5R'
+Ò$}äYdòl²)ÙŒlN¶ [’­ÈÖdÒO¶%Û‘íÉdG²Ù™ìBv%Ï!»‘	dw²Ù“ìE&’2HZ¤M&‘Édo2…ìCö%û‘ýÉä@r™J¦‘éd"3ÉÁä2‹J#³Éád™KŽ G’yd>Y@Ž"G“cȱä8r<9œHžKžGžON"Ãd!YD“²„,%ËÈrr29…¬ +É*2JV“5d-#ëÈ©ä4r:9ƒœIÎ"/$/"g““—sÈKɹäeä<òrò
+òJò*r>¹€¼š¼†¼–\H^G^OÞ@."“7’KțȥäÍä2òr9y+yy;yy'¹‚¼‹\IÞMÞC®"W“÷’÷‘÷“kÈȵäƒä:ò!r=ù0zí%!%#'7OÉMäfòIò)òiòrù,¹}€v£=ècôúˆ|Ž|ž|ÜF¾H¾D¾Ln'_!w¯’¯‘¯“;É7È7É·È]äÛä;ä»ä{äûäänrù!ùù1¹—ü„ÜG~Jî'?#Ÿ“__’_‘ɯÉCä7äaò[òùù=ùy”ü‘<F'"&!%#OPˆ"(’¢(šb(–â(ž(L‰”DÉ”B©”Fé”A™”:‹jBM5¥šQÍ©TKªÕšjCù©¶T;ª=ՁêHu¢:S]¨®Ô9T7*êNõ zR½¨D*@)‹²©$*™êM¥P}¨¾T?ª?5€H
+¢R©4*Ê BT&5˜BeQC©aT65œÊ¡r©ÔH*Ê§
+¨QÔhj5–‡n§ÆS¨‰Ô¹ÔyÔùÔ$*LRET1¡J¨RªŒ*§&SS¨
+ª’ª¢¢èªšº€ª¡j©UGM¥¦QÓ©ÔLju!u5›º˜º„šC]JÍ¥.£æQ—SWPWRWQó©ÔÕÔ5ÔµÔBê:êzêjµ˜º‘ZBÝD-¥n¦–Q·PË©[©Û¨Û©;¨;©Ô]ÔJênêjµšº—ººŸZC=@­¥¤ÖQQ멇©G¨G©Ç¨Ç©
+ÔÔFjµ™z’zŠzšz†ÚB=Km¥ž£ž§^ ¶Q/R/Q/SÛ©W¨Ô«ÔkÔëÔNê
+êMê-jõ6õõ.õõ>õµ›ÚC}H}D}Lí¥>¡öQŸRû©Ï¨ÔçÔÔ—ÔWÔAêkêõ
+u˜ú–:B}G}Oý@¥~¤ŽQÇ©Ÿ¨Ÿ©_¨_©ß¨4¢	š¤)š¦š¥9š§Ó"-Ñ2­Ð*­Ñ:mÐ&í£Ï¢›ÐgÓMéftsºÝ’nE·¦ÛÐ~º-ÝŽnOw ;ҝèÎtº+}ݍN »Ó=èžt/:‘ÐAÚ¢m:‰N¦{Ó)tº/ݏîO ÒƒèT:N§3èI¦‡ÐYôPzM§sè\z=’Σóéz=šC¥ÇÑãé	ôDú\ú<ú|z¦é"º˜ŽÐ%t)]F—Ó“é)t]IWÑQºš¾€®¡ké]GO¥§ÑÓéôLz}!}=›¾˜¾„žC_JÏ¥/£çÑ—ÓWÐWÒWÑóéôÕô5ôµôBú:úzúz½˜¾‘^BßD/¥o¦—Ñ·ÐËé[éÛèÛé;è;éô]ôJúnúz½š¾—¾¾Ÿ^C?@¯¥¤×ÑÑëé‡éGèGéÇèÇé
+ôôFz½™~’~Š~š~†ÞB?Ko¥Ÿ£Ÿ§_ ·Ñ/Ò/Ñ/ÓÛéWèô«ôkôëôNú
+úMú-zý6ýý.ýý>ý½›ÞCHDLï¥?¡÷ÑŸÒûéÏèôçôô—ôWôAúkúý
+}˜þ–>BGOÿ@¥¤ÑÇéŸèŸé_è_éßèb†d(†f†e8†g3"#12£0*£1:c0&ãcÎbš0g3M™fLs¦Ó’iÅ´fÚ0~¦-ÓŽiÏt`:2˜ÎL¦+sӍI`º3=˜žL/&‘	0AÆbl&‰Ifz3)L¦/ӏéÏ`2ƒ˜T&Ig2˜“Éf†0YÌPf“Ígr˜\f3’Écò™f3šÃŒeÆ1ã™	ÌDæ\æ<æ|ff
+™"¦˜‰0%L)SÆ”3“™)LSÉT1Q¦š¹€©aj™SÇLe¦1Ó™ÌLfs!s3›¹˜¹„™Ã\ÊÌe.cæ1—3W0W2W1ó™ÌÕÌ5̵ÌBæ:æzæf³˜¹‘YÂÜÄ,enf–1·0Ë™[™Û˜Û™;˜;™Ì]ÌJænæf³š¹—¹¹ŸYÃ<À¬edÖ11뙇™G˜G™Ç˜Ç™
+ÌÌFf³™y’yŠyšy†ÙÂ<Ëležcžg^`¶1/2/1/3Û™W˜Ì«ÌkÌëÌNæ
+æMæ-fó6óó.óó>ó³›ÙÃ|È|Ä|Ììe>aö1Ÿ2û™Ï˜ÌçÌÌ—ÌWÌAækæó
+s˜ù–9Â|Ç|ÏüÀe~dŽ1Ç™Ÿ˜Ÿ™_˜_™ß˜,b	–d)–f–e9–g³"+±2«°*«±:k°&ëcÏb›°g³MÙfls¶Û’mŶfÛ°~¶-ÛŽmÏv`;²ØÎl¶+{ۍM`»³=Øžl/6‘
+°AÖbm6‰Mf{³)l¶/ۏíÏ`²ƒØT6Mg3Ø›Éf‡°YìPv›ÍgsØ\v;’ÍcóÙv;šÃŽeDZãÙ	ìDö\ö<ö|vfÙ"¶˜°%l)[Æ–³“Ù)l[ÉV±Q¶š½€­akÙ[ÇNe§±ÓÙìLv{!{;›½˜½„Ã^ÊÎe/cç±—³W°W²W±óÙìÕì5ìµìBö:özöv»˜½‘]ÂÞÄ.eof—±·°ËÙ[ÙÛØÛÙ;Ø;Ùì]ìJönöv»š½—½½Ÿ]Ã>À®ed×±±ëÙ‡ÙGØGÙÇØÇÙ
+ììFv»™}’}Š}š}†ÝÂ>ËneŸcŸg_`·±/²/±/³ÛÙWØì«ìkìëìNö
+öMö-vû6ûû.ûû>û»›ÝÃ~È~Ä~Ìîe?a÷±Ÿ²ûÙÏØìçìì—ìWìAököû
+{˜ý–=Â~Ç~ÏþÀed±Çٟ؟Ù_Ø_ÙßØâŽä(ŽæŽå8Žçs"'q2§p*§q:gp&çãÎâšpgsM¹f\s®×’kŵæÚp~®-׎kÏuà:r¸Î\®+w׍Kàºs=¸ž\/.‘pAÎâl.‰Kæzs)\®/׏ëÏ
+àrƒ¸T.Kç2¸—É
+æ†pYÜPn—Í
+çr¸\n7’Ëãò¹n7šÍåÆqã¹	ÜDî\î<î|næ
+¹"®˜‹p%\)WÆ•s“¹)\WÉUqQ®š»€«áj¹WÇMå¦qÓ¹ÜLnw!w7›»˜»„›Ã]ÊÍå.ãæq—sWpWrWqó¹ÜÕÜ5ܵÜBî:îzîn·˜»‘[ÂÝÄ-ånæ–q·p˹[¹Û¸Û¹;¸;¹Ü]ÜJînîn·š»—»»Ÿ[Ã=À­åäÖqq빇¹G¸G¹Ç¸Ç¹
+ÜÜFn·™{’{Š{š{†ÛÂ=Ëmåžãžç^à¶q/r/q/sÛ¹W¸Ü«ÜkÜëÜNî
+îMî-n÷6÷÷.÷÷>÷·›ÛÃ}È}Ä}Ìíå>áöqŸrû¹Ï¸ÜçÜÜ—ÜWÜAîkî÷
+w˜û–;Â}Ç}ÏýÀå~äŽqǹŸ¸Ÿ¹_¸_¹ß¸<â	žä)žæžå9žçó"/ñ2¯ð*¯ñ:oð&ïãÏâ›ðgóMùf|s¾ß’oÅ·æÛð~¾-ߎoÏwà;òøÎ|¾+ߍOà»ó=øž|/>‘ðAÞâm>‰Oæ{ó)|¾/ߏïÏàòƒøT>Oç3øŸÉæ‡ðYüP~ŸÍçsø\~?’Ïãóù~?šÏåÇñãù	üDþ\þ<þ|~æù"¾˜ð%|)_Æ—ó“ù)|_ÉWñQ¾š¿€¯ákù_ÇOå§ñÓùüL~!?›¿˜¿„ŸÃ_ÊÏå/ãçñ—óWðWòWñóùüÕü5üµüBþ:þzþ~¿˜¿‘_ÂßÄ/åoæ—ñ·ðËù[ùÛøÛù;ø;ùü]üJþnþ~¿š¿—¿¿Ÿ_Ã?À¯åä×ññëù‡ùGøGùÇøÇù
+üüF~¿™’Šš†ßÂ?ËoåŸãŸç_à·ñ/ò/ñ/óÛùWøü«üküëüNþ
+þMþ-~ÿ6ÿÿ.ÿÿ>ÿ¿›ßÃÈÄÌïå?á÷ñŸòûùÏøüçüü—üWüAþkþÿ
+˜ÿ–?ÂÇÏÿÀåäñÇùŸøŸù_ø_ùßø(8¢ 	² ª 	º`¦àΚgM…fBs¡…ÐRh%´Ú~¡­ÐNh/t:
+„ÎB¡«pŽÐMHº=„žB/!QAÁl!IHz)B¡¯ÐOè/
+ƒ„T!MH2„)†YÂPa˜-r„\a„0RÈò…a”0Z#ŒÆ	ã…	ÂDá\á<á|a’
+…"¡Xˆ%B©P&”“…)B…P)T	Q¡Z¸@¨j…˜P'L¦	Ó…ÂLa–p¡p‘0[¸X¸D˜#\*Ì.æ	—WW
+W	ó…ÂÕÂ5µÂBá:ázáa‘°X¸QX"Ü$,n–	·Ë…[…Û„Û…;„;…Â]ÂJánáa•°Z¸W¸O¸_X#< ¬Ö		ë…‡…G„G…Ç„Ç…
+ÂÂFa“°YxRxJxZxFØ"<+lžž^¶	/
+/	/Û…W„«ÂkÂëÂNá
+áMá-a—ð¶ðŽð®ðžð¾ð°[Ø#|(|$|,ì>ö	Ÿ
+û…Ï„Âç—ÂWÂAákáðpXøV8"|'|/ü ~Ž	Ç…Ÿ„Ÿ…_„_…ß„a“˜Â4f0‹9Ìcc,b	ËXÁ*Ö°Ž
+lb>7Ág㦸nŽ[à–¸nÛ`?n‹Ûáö¸îˆ;áθîŠÏÁÝpîŽ{àž¸NÄĶqNƽq
+îƒûâ~¸?€âA8§átœC8ÆCpŠ‡ál<çà\<Äy8àQx4ƒÇâqx<ž€'âsñyø|<	‡q!.ÂÅ8‚Kp).Ãåx2ž‚+p%®ÂQ\/À5¸ÇpžŠ§áéxž‰gáñEx6¾_‚çàKñ\|ž‡/ÇWà+ñUx>^€¯Æ×àkñB|¾߀áÅøF¼ß„—â›ñ2|^ŽoÅ·áÛñøN¼ß…Wâ»ñ=x^ïÅ÷áûñü ^‹ÄëðCx=~?‚ŏáÇñüÞˆ7áÍøIüZÆOãgðôz=‡ŸE GÑóx+º=‹®ÀÏáçñè~¼
+¿ˆ_Â/ãíø¼½€_ůá×ñNü~¿…w¡§ÐÓømü~¿‡ßÇàÝxþmÆáñ^ü	Þ‡?Åûñgø þ¿Ä_áƒøk|ƒãoñüþÿ€âñ1|ÿ„Æ¿à_ñoø„ˆDB$EJ¤EFdENäEAÄ¢(J¢,*¢*j¢.¢)úijÄ&âÙbS±™Ø\l!¶[‰­Å6¢_l+¶Û‹ÄŽb'±³Øý(vÏ»‰	bw±‡ØSì%&Š1(Z¢-&‰Ébo1Eì#öû‰ýÅâ@q˜*¦‰éb†3ÅÁâ1K*³ÅábŽ˜+ŽGŠyb¾X ŽG‹cıâ8q¼8Aœ(ž+ž'ž/NÃb!ºZ,‹ÅˆX"–Šeb¹8Yœ"Vˆ•b•«ÅıVŒ‰uâTqš8]œ!Îg‰Š‰³Å‹ÅKÄ9â¥â\ñ2qžx¹x…x¥x•8_\ ^-^#^+.¯¯o‰‹ÅÅ%âMâRñfq™x‹¸\¼U¼M¼]¼C¼S\!Þ%®ïïW‰«Å{ÅûÄûÅ5ââZñAqø¸^|X|D|T|L|\Ü >!n7‰›Å'ŧħÅgÄ-â³âVñ9ñyñq›ø¢ø’ø²¸]|EÜ!¾*¾&¾.îßßßw‰o‹ïˆïŠï‰ï‹ˆ»Å=â‡âGâÇâ^ñqŸø©¸_üL< ~.~!~)~%¿‰ßˆ‡ÅoÅ#âwâ÷ââQñGñ˜x\üIüYüEüUüM<!!‰H‰’h‰‘X‰“xI°$J’$KŠ¤Jš¤K†dJ>é,©‰t¶ÔTj&5—ZH-¥VRk©ä—ÚJí¤öR©£ÔIê,u‘ºJçHݤ©»ÔCꉖJ½¤D)€VKAÉ’l)IJ–zK)R´Lê‹nFßHý¤þÒ i 4HJ•ÒÐÝRº”!…Ð
+R¦4X"eIC¥aR¶4\Ê‘r¥ÒH´\Ê“ò¥i”4Z#•ÆIã¥	ÒDé\é<é|i’–
+¥"©XŠH%R©T&•K“¥)R…T‰VIURTª–.j¤Z)&ÕIS¥iÒti†4Sš%](]$Í–.–.‘æH—Js¥ËÐBižt¹tZŒn”®”®’æK¤«¥k¤k¥…ÒuÒõÒ
+Ò"i±t£´DºIZ*Ý,-“n‘–K·J·I·KwHwJ+¤»¤•ÒÝÒ=Ò*iµt¯tŸt¿´Fz at Z+=(­“’ÖKKHJIK¤'¤Ò&i³ô¤ô”ô´ôŒ´EzVÚ*='=/½ m“^”^’^–¶K¯H;¤W¥×¤×¥ÒÒ›Ò[Ò.éméé]é=é}éi·´GúPúHúXÚ+}"í“>•öKŸI¤Ï¥/¤/¥¯¤ƒÒ×Ò!éé°ô­tDúNú^úA:*ý(“ŽK?I?K¿H¿J¿I'd$2)S2-32+s2/2–EY’eY‘UY“uِMÙ'Ÿ%7‘Ï–›ÊÍäær¹¥ÜJn-·‘ýr[¹Ü^î w”;ɝå.rWù¹›œ w—{È=å^r¢ƒ²%Ûr’œ,÷–Sä>r_¹ŸÜ_ ”É©ršœ.gÈ!9S,‘³ä¡ò09[.çȹòy¤œ'çËò(y´<F+“ÇËä‰ò¹òyòùò$9,ÊEr±‘KäR¹L.—'ËSä
+¹R®’£rµ|\#×Ê1¹Nž*O“§Ë3ä™ò,ùBù"y¶|±|‰<G¾Tž+_&Ï“/—¯¯”¯’çËä«åkäkå…òuòõò
+ò"y±|£¼D¾I^*ß,/“o‘—Ë·Ê·É·ËwÈwÊ+ä»ä•òÝò=ò*yµ|¯|Ÿ|¿¼=!? ¯•”×ÉÉëå‡åGäGåÇäÇå
+òòFy“¼Y~R~J~Z~FÞ"?+o•Ÿ“Ÿ—_·É/Ê/É/ËÛåWäò«òkòëòNù
+ùMù-y—ü¶üŽü®üžü¾ü¼[Þ#($,ï•?‘÷ÉŸÊûåÏäòçòò—òWòAùkùü|XþV>"'/ÿ •”ÉÇåŸäŸå_ä_åßä
+R…T(…V…U8…W+¢")²¢(ª¢)ºb(¦âSÎRš(g+M•fJs¥…ÒRi¥´VÚ(~¥­ÒNi¯tP:*”ÎJ¥«rŽÒMIPº+=”žJ/%Q	(AÅRl%IIVz+)J¥¯ÒOé¯P*ƒ”T%MIW2”’©V†(YÊPe˜’­Wr”\e„2RÉSò•e”2Z£ŒUÆ)ã•	ÊDå\å<å|e’V
+•"¥X‰(%J©R¦”+“•)J…R©T)Q¥Z¹@©Qj•˜R§LU¦)Ó•ÊLe–r¡r‘2[¹X¹D™£\ªÌU.Sæ)—+W(W*W)ó•ÊÕÊ5ʵÊBå:åzåe‘²X¹QY¢Ü¤,UnV–)·(Ë•[•Û”Û•;”;•Ê]ÊJånåe•²Z¹W¹O¹_Y£< ¬UTÖ))땇•G”G•Ç”Ç•
+ÊÊFe“²YyRyJyZyFÙ¢<«lUžSžW^P¶)/*/)/+Û•W”Ê«ÊkÊëÊNå
+åMå-e—ò¶òŽò®òžò¾ò²[Ù£|¨|¤|¬ìU>Qö)Ÿ*û•Ï”ÊçÊÊ—ÊWÊAåkåòrXùV9¢|§|¯ü U~TŽ)Ç•Ÿ”Ÿ•_”_•ß”*R	•T)•V•U9•W«¢*©²ª¨ªª©ºj¨¦êSÏR›¨g«MÕfjsµ…ÚRm¥¶VÛ¨~µ­ÚNm¯vP;ªÔÎjµ«zŽÚMMP»«=Ôžj/5Q
+¨AÕRm5IMV{«)jµ¯ÚOí¯PªƒÔT5MMW3Ԑš©V‡¨YêPu˜š­WsÔ\u„:RÍSóÕu”:Z£ŽUÇ©ãÕ	êDõ\õ<õ|u’VÕ"µX¨%j©Z¦–«“Õ)j…Z©V©QµZ½@­QkÕ˜Z§NU§©ÓÕêLu–z¡z‘:[½X½D£^ªÎU/Sç©—«W¨WªW©óÕêÕê5êµêBõ:õzõu‘ºX½Q]¢Þ¤.UoV—©·¨ËÕ[ÕÛÔÛÕ;Ô;Õê]êJõnõu•ºZ½W½O½_]£> ®UTש©ëÕ‡ÕGÔGÕÇÔÇÕ
+êêFu“ºY}R}J}Z}FÝ¢>«nUŸSŸW_P·©/ª/©/«ÛÕWÔê«êkêëêNõ
+õMõ-u—ú¶úŽú®úžú¾úº[Ý£~¨~¤~¬îU?Q÷©ŸªûÕÏÔêçêê—êWêAõkõúzXýV=¢~§~¯þ UT©ÇÕŸÔŸÕ_Ô_ÕßÔҍÔ(ÖÕ8×
+k¢&i²¦hª¦iºfh¦æÓÎÒšhgkMµfZs­…ÖRk¥µÖÚh~­­ÖNk¯uÐ:j´ÎZ­«vŽÖMKкk=´žZ/-QhAÍÒl-IKÖzk)Z­¯ÖOë¯
+Ðjƒ´T-MK×2´–©
+Ö†hYÚPm˜–­
+×r´\m„6RËÓòµm”6Z£ÕÆiãµ	ÚDí\í<í|m’Ö
+µ"­X‹h%Z©V¦•k“µ)Z…V©UiQ­Z»@«Ñjµ˜V§MÕ¦iÓµÚLm–v¡v‘6[»X»D›£]ªÍÕ.Óæi—kWhWjWióµÚÕÚ5ÚµÚBí:ízím‘¶X»Q[¢Ý¤-ÕnÖ–i·h˵[µÛ´Ûµ;´;µÚ]ÚJíním•¶Z»W»O»_[£= ­ÕÔÖii뵇µG´GµÇ´Çµ
+ÚÚFm“¶Y{R{J{Z{FÛ¢=«mÕžÓž×^жi/j/i/kÛµW´Ú«ÚkÚëÚNí
+íMí-m—ö¶öŽö®öžö¾ö¶[Û£}¨}¤}¬íÕ>ÑöiŸjûµÏ´ÚçÚÚ—ÚWÚAíkíövXûV;¢}§}¯ý Õ~ÔŽiǵŸ´Ÿµ_´_µß´:Ò	Ô)ÖÕ9×ë¢.鲮誮éºnè¦îÓÏÒ›ègëMõfzs½…ÞRo¥·ÖÛè~½­ÞNo¯wÐ;êôÎz½«~ŽÞMOлë=ôžz/=QèAÝÒm=IOÖ{ë)z½¯ÞOï¯ÐêƒôT=MO×3ôž©Ö‡èYúP}˜ž­×sô\}„>RÏÓóõ}”>Z£ÕÇéãõ	úDôÚ¢Ÿ«Ÿ§Ÿ¯OÒÃz¡^¤ë½D/ÕËôr}²>E¯Ð+õ*=ªWëè5z­Óëô©ú4}º>CŸ©ÏÒ/Ô/Ògëë—èsôKõ¹úeú<ýrý
+ýJý*}¾¾@¿Z¿F¿V_¨_§_¯ß /Òë7êKô›ô¥úÍú2ý}¹~«~›~»~‡~§¾B¿K_©ß­ß£¯ÒWë÷ê÷é÷ëkôôµúƒú:ý!}½þ°þˆþ¨þ˜þ¸¾ABߨoÒ7ëOêOéOëÏè[ôgõ­úsúóúú6ýEý%ýe}»þŠ¾CUM]ß©¿¡¿©¿¥ïÒßÖßÑßÕßÓß×?Ðwë{ôõôõ½ú'ú>ýS}¿þ™~@ÿ\ÿBÿRÿJ?¨­Ò¿ÑëßêGôïôïõô£úú1ý¸þ“þ³þ‹þ«þ›~Â@aeÐc°gð†``C4$C6C54C7Ã4|ÆYFãl£©ÑÌhn´0Z­ŒÖFÃo´5ÚíFG£“ÑÙèbt5Î1º	Fw£‡ÑÓèe$#hX†m$ÉFo#Åècô5úýÆ@c‘j¤éF†22ÁÆ#Ëj3²áFŽ‘kŒ0FyF¾Q`Œ2FcŒ±Æ8c¼1Á˜hœkœgœoL2ÂF¡Qd£Ä(5ÊŒrc²1Ũ0**#jT5F­3ꌩÆ4cº1ØiÌ2.4.2f—sŒK¹ÆeÆ<ãrã
+ãJã*c¾±À¸Ú¸Æ¸ÖXh\g\oÜ`,27KŒ›Œ¥ÆÍÆ2ãc¹q«q›q»q‡q§±Â¸ËXiÜmÜc¬2V÷÷÷kŒŒµÆƒÆ:ã!c½ñ°ñˆñ¨ñ˜ñ¸±ÁxÂØhl26OOOÏ[Œg­ÆsÆóÆÆ6ãEã%ãec»ñŠ±ÃxÕxÍxÝØi¼a¼i¼eì2Þ6Þ1Þ5Þ3Þ7>0v{ŒŒ½Æ'Æ>ãSc¿ñ™qÀøÜøÂøÒøÊ8h|m2¾1ßGŒïŒïŒ£ÆÆ1ã¸ñ“ñ³ñ‹ñ«ñ›qÂD&a’&eÒ&c²&gò¦`bS4%S6S55S7
+Ó4}æYfól³©ÙÌln¶0[š­ÌÖfÓo¶5Û™íÍfG³“ÙÙìbv5Ï1»™	fw³‡ÙÓìe&š3hZ¦m&™Éfo3Åìcö5û™ýÍæ@s™j¦™éf†23ÍÁæ3Ëj3³ÍáfŽ™kŽ0Gšyf¾Y`Ž2G›c̱æ8s¼9ÁœhžkžgžoN2Ãf¡Yd›³Ä,5ËÌrs²9Ŭ0+Í*3jV›˜5f­3ëÌ©æ4sº9ÃœiÎ2/4/2g››—˜sÌK͹æeæ<óró
+óJó*s¾¹À¼Ú¼Æ¼Ö\h^g^oÞ`.2›7šK̛̥æÍæ2ós¹y«y›y»y‡y§¹Â¼Ë\iÞmÞc®2W›÷š÷™÷›kÌ̵æƒæ:ó!s½ù°ùˆù¨ù˜ù¸¹Á|ÂÜhn27›OšO™O›Ï˜[ÌgÍ­æsæóææ6óEó%óes»ùŠ¹Ã|Õ|Í|ÝÜi¾a¾i¾eî2ß6ß1ß5ß3ß7?0w›{Ì͏̏ͽæ'æ>óSs¿ù™yÀüÜüÂüÒüÊ<h~m2¿1›ßšGÌïÌïÍÌ£ææ1ó¸ù“ù³ù‹ù«ù›y‡|„ôQ>ÚÇøXçã}‚ûDŸä“}ŠOõi>ÝgøLŸÏw–¯‰ïl_S_3_s__K_+_k_Ÿß×Ö×Î×Þ×Á×Ñ×É×Ù×Å×ÕwŽ¯›/Á×Ý×Ã×Ó×Ë—èø‚>Ëgû’|ɾ޾____?_ß ß@ß _ª/Í—îËð…|™¾Á¾!¾,ßP¡¶$V6£º,RÅ¥V†‹j¢U\8^²©…5‘©6ì\j´4Z™Â…㥘^T^STWYR™.5Ôqzq4.*ŠTÅpÑÉ*›Qv§,ŽÎüáÀ †â€¯À¡†‰"'«\ĈÄK6Ÿ1ââàFB•6jpÃ\¥'«Òà¢heeJ=ˆCÍSÖP§‡†kè2ç‹ÍŠ•WGØr¯à²@“rÐ$+®IyÜtY sy¼$³†’å“Å¡0&7Ô¥a¥šrÊCiM$RU®*./b³ÃEu±[áRvã~Ø츁*¼‚Îv´§+œ/6'>¾*>>§ñøªÆãsâã«â®
+»ÿ\5QgÃP¡ªR*RUÊå‚òQP>7®|Ô+äܲºªÒpM]eE¸.&G?±yqjâ2ä5–¡¦±yqjâE~|T­WˆùÌXÛÈŒg‹5ž­ >M,n‘wIcî’ŽŠ/i]|IGVu Õ¨¸Vu^ÁŒª)¯*eêÜoyÔ)Ö5~âFÁÒ×Á©ÓHÚiêãÕg4ÔÙñq]gzß°gž¬2ѪÒZ®®ª¼Wbï^P&B€2¥¥
+e”ÉPö†2ÊT(Ó L‡2Ê”™ñ2ðS ?pS 7pS 7pS 7pS 7pS 7pS 7%“É-‹ÖT1Q÷;Þ–
+:§v*`§v*`§v*`§v*`§v*`§vjˆåaÖ5`¦¾i€Øi€Øi€Øi€Øi€Øi€Øi wØ;ìø速ø速ø速ø速ø速ø速ø速ø€Ÿø€Ÿø€Ÿø€Ÿø€Ÿø€Ÿø€Ÿø€Ÿø!À~ðC€üÍŽŸúR¯€V@zÐC€ô ‡ =虀ž	虀ž	虀ž	Úg‚ö™ }&àg¦àTדÄyød•K
+ÅËp$îërk+µeñz´¡îÍèÕÊD(P¡´ ´¡L‚2ÊÞP¦@™
+e”éPf@‚2n@"à'~"à'~"à'~"à'&Kù}um£è’$‚$‰ I"H’’$‚$$ ’@’ H I I $	€%`‰ X" øÀ ~ ð€ ü à?øAÀ~ðƒI¼ãÍ+"µµ“¡‚ A A€ ‚ €X €X €X €°À à[€o¾øà[€o¾ø6àÛ€o¾
+ø6àÛ€o¾
+ø6àÛ€o¾
+ø6àÛ€o¾
+øI€ŸøI€ŸøI€ŸøI€ŸøI€ŸøI€ŸøI€ŸøI€ŸøÉ€ŸøÉ€ŸøÉ€ŸøÉ€ŸøÉ€ŸøÉ€ŸøÉ€ŸøÉ€Ÿø @€0  a@ € „ @€0  a@ € „ ¤ >„ @8€p  á@  „ ¤ ~*à§>„	 $@H€  !A B‚ „	 $¤~*à§>„ ,@X€°  aA ‚ „ ,@X€°  aA ‚ „ ,@X€0  a@ € „ @€0  a@ € „ @ Z ­€Ö@ë õ Ðz h=‚ùB0_æb ±€È@ä ò u 3Y(­	OuQºPð(Õ­y‚—4j± ´¡L‚2ÊÞrY4:Åû]úF£R¡Lƒ2Ê(CPÆm:
+Nƒ@§A Ó Ðiè4˜R$ö†2JÀ
+‰Dƒ@¢A Ñ hH4HIyÿ›^
+J“IƒÀ¤A`Ò 0i˜4L&
+“IƒÀ¤A`Ò 0i˜4L&
+“IƒAÀ>iˆ4D"
+‘Hƒ@¤A Ò iˆ4D"
+‘Hƒ@¤A Ò iˆ4D"
+‘Hƒ@¤A Ò h4¢Qƒ@ˆA Ä b1„Bˆ‚@4A š Mˆ&˜bbѪh­\\©‰Ô–×zO8µ¢º,ìU…pU4©ˆ”‡¥Pum¹“šzÍ|(ï³¢P“r+ËÝÄ:þ0ªQgœ[)wÒ˝î§`1‰…™Áa'PŒæ0
+àÑãW”ƒÇ”95Úd†…««Ãlv¸²°8L¯#sêȱåH@Ž(§òÊ¢L~yie˜*×q 
+5¢¬œJwþŽ¨-—²I¢B‡úg>i )ÒXíH½ÚåõjûêNWÊOºJ•ºJ1Å‘ŠX˜ƒ¹è™®J’;3ÅS©ÂS)nƒ´t²ªŽœ^ÎEãzQ5eQ¶ÖU*‘ñ
+*æèøTµ£W‘ó×yd¢®Á¥Æ¶VOSŠ6^­ºÆ«=¹Zq12z±ž˜‰<X	öA0âìDÖWÿö3äƒAȃ!B>„|0Äâq8‚@A Ž Gˆ#Äâq8‚!#‘H‚@$Aȃ!#BF¢	BF„Œ0a2 d„ÁLÀÏüLÀÏüLÀÏüÌ8¾9 9 9 9 ÔeuY@]P—9 9 ¤eiY at Z–¤eiY at Z–¤eiY at Z–¤eiY at Z–¤eiY at Z–¤eiY at Z–™Ÿ™Ÿ|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀW𕉟¼eoYÀ[$~$~$~ð™|fAâgAâgAâgÏYÀsðœ<gÏYÀs𜉟‰Ÿ‰Ÿ‰Ÿ‰Ÿ‰Ÿ‰Ÿ‰Ÿ‰Ÿ‰Ÿ‰Ÿ‰Ÿ‰Ÿ‰Ÿ‰Ÿ‰Ÿ‰Ÿ|kßZøYøYøYøYÀÇð±|l[øYøYøYøYøYøYøYøYøYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYðYplÁ=°	 	 	 	 	 	 	 	 	 	 	 œoAhAhAhï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀ‡6ð¡¬o¹€màCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÏþ³ÿlà?øÏþ³ÿlà=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xφOxÏÞ³ÁŸÛàÏmðç6øsü¹
+þÜnƒ?·ÁŸÛàÏí´úyAðç6øsü¹
+þÜnƒ?·ÁŸÛàÏmðß6øoü¯
+þ×ÿkƒÿµÁÿÚàmð¿vFýxü¯
+þ×ÿkƒÿµÁÿÚàmð¿6ø_ü¯
+þ×ÿkƒÿµÁÿÚàmð¿6ø_ü¯
+þ׿jƒ_µÁ¯ÚàWmð«IàŸ’ ¯H‚|!	ò‚$È’þ_{ïgGUçûÖÞkW¿»ÓtçI:i0DC¯µwÕZ›‡ôÞ]k€
+ˆB ¤CZ’tLºŒ 8/#£Ž#"êðAETÊC•™QÄœñ=3âœ9Npœ¹è`ÅYµ×·ÃÖ{Î=÷|Î=Ÿ{?÷“Töþïª]U¿U«Vý~kýkׯ¤ŒRÆ)ごñ@Êx e<2H¤ŒRÆ)ごñ@Êx e<Â)ü—Â)ü—Â)ü—Â)ü—Â)ü—Âk)¼–Âk)¼–Âk)¼–Âk)¼–Âk)¼–ÖöËqÁk)¼–Âk)¼–Âk)¼–Âk)¼–Âk)¼–Âc)ýóžJá©žJá©žJá©žJá©žJÓ…ýRnx*…§Rx*…§Rx(…gRx&…gRx&…gRx&…gRx&…gRx&…gRx&…gRx&…gRúÇ)ýã”þpJÿ7¥ÿšÒ_M駦ôKSú›)¼“Â+)¼‘Â)ýµ”~ZÊuŸr=¥\O)×SÊõ”.\Ona}öG?%¥Ÿ’ÒOÑ𔆧4<¥á)M¿SÓïÔ”OÃ[š~§ž\Ø_ƒØ$N3¢%†ãÕðž†÷4¼§á=
+ïiŽ_Ã{ÞÓðž†÷4¼§á=
+ïixOÃ{ÞÓðž†÷4¼§á=
+ïixOÃ{ÞÓô/5ýKMÿRÓ¿Ôô/5çMsÞ4çMsÞ4çMsÞ4çI/œ'ú“–~‘¥ýZÚ¯¥ÝZÚ©e<hÑC˸Ï2Ž³´[Ë8Î2Ž³Œß,ã7ËøÍ2~³õ…ýX"å¡Ý[Æm–q›e¼f§YÆe–q™e<fY®‹~[ôÛ¢ßý¶è·å:²è·E¿-úmÑo‹n[tÛ¢Û–öoiÿ–öoiÿ–öoi÷–öniï–öniï–öniï–ömiß–ömiß–ömiß–ömiß–ömiß–ölC{–ãaÜì£$*b•X#&Ä”¨‰†X'6ˆMâ$qÏ]ˆMð›à7Áo‚ß¿	~ü&øMð›à7Áo‚ß¿	~ü&ø“àO‚?	þ$ø“àO‚Ÿ±~Æúëg¬Ÿ±~¶°>åÍ(oFy3Ê›QÞŒòf”wáüd”7£¼|¾ß‚oÁ·à[ð-ø|¾ß‚oÁ·à[ð-ø|¾߁ïÀwà;ðø|¾߁ƹ’üµ$-É_Kò×’üµ$-É_KòÖ’¼µ$o-É[KòÖ’¼µ$o-É[KòÖ’¼µ$o-É[KòÖ’¼µ$o-É[KòÖ’¼µ$o-ÉWKòÕ’|µ$_-ÉWKòÕ’|µ$_-ÉWKòÕ’|µ$_-ÉWKòÕ’|µ$_-ÉWKòÕ’|µ$_-ÉWKòÕ’|µ$_-ÉWKòÔ’<µ$O-ÉSKòÔ’<µ$O-ÉSKòÔ’<µ$O-ÉSKòÔ’<µ$O-ÉSKòÔ’<µ$O-ÉSKòÓ’ü´$?-ÉOKòÓ’ü´$?-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´àð
+ø|¾߀oÀ7à×Á¯ƒ_¿~ü:øuðëà×Á¯ƒ_¿~ü:øuðëࣳä§%ùiI~Z’Ÿ–ä§%ùiI~Z’Ÿ–ä§%ùiI~Z’Ÿ–ä§%ùiI~Z’Ÿ–ä§%ùiI~Z’Ÿ–ä§%ùiI~Z’Ÿ–ä§%ùiI~Z’Ÿ–ä§%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä¡%yhIZ’‡–ä¡%yhIZ’‡–ä¡%yhIZ’‡–ä¡%yhIZ’‡–µ}và;ðCZ’‡–ä¡%yhIZ’‡–ä¡%yhIZ’G–ä‘%ydIÙG¶G‡t8‘ÛbØ 6‰“ÄŒh‰”=NÐã=NÐã=NÐã=NÐã=NÐã=NÐã=NÐã=NÐã=&_.É—Kòå’|¹$_.É—Kòå’|¹$_.É—Kòå’|¹$_.É—Kòä’<¹$O.É“Kòä’<¹$O.É“Kòä’<¹$O.É“Kòä’<¹$O.É“Kòä’ü¸$?.ɏKòã’ü¸à¢ËäË%ùrI¾\’/—äË%ùrI¾\&è2ysIÞ\’7—äÍ%ysIÞ\’7—äÍ%ysIÞ\’ï–ä»%ùnI¾[’ï–ä»%ùnI¾[’ï–ä»%ùnI¾[’ï–ä»%ùnI¾[’ï–ä»%ymÙ?z™ —	z™ —	z™ —	z™ —	z™ —	z™ s	:— s	:— s	:—4¶£^йKйKйKй#/-ÉCKòž’¼§$(ÉÊ”~QJ¿(¥_”Ò/"_ècBdÔ?y at IP’”ä%y at IP’ôÑëıIœ$fDÊÍùI9?ä%ùDÁçü_ô|ú3ä}ŸþLJ&¥?“Áç|žÁç|žÁç|žÁç|ž…ûŠ>Ö‰
+b“¸€“-1g†dèA†dèA†dè@†dè@†dè@†dè@†dè@†dè@†dè@†dð~ïgð~ïgð~ïgð~ïgð~ßgð}ßgð}ßgð}ßgð}ßgð}ßgð}ßgð}V]Àå8áýÞÏàýÞÏàýÞϸž2®§ÞÏàýÞÏàýÞÏàýÞÏàýÞϏeðÿgðÿgðÿgðÿgðÿgð~ïgð~ïgð~ïgð~ïgð~ïgð~ïgð~ïgð{¿gðyd\_ÙÂõÅx!c¼1^ÈàÑÍàÑÍàÑÍàÑÍàÑÍàÑÍàÑÍàÑÍ/dŒ2Æã…ŒñBÆx!c¼1^È/dŒ2Æã…ŒñBÆx!#/—‘—ËdŒ2ÆヌñAÆøÀÂSž²ð”…§,<eá)OYxÊÂSv|a
+b“8Ï–Êká)OYxÊÂSž²ô[-|eá+_YøÊÂW¾²ð•…¯,|eá+_YøÊÂW¾²ô[-ýVYøËÂ_þ²ð—…¿,üeá/Yú­³ð˜…Ç,<fá1YxÌÂc³ð˜…Ç,<fá1YxŒûÒÂc³ð˜…Ç,<fá1YxÌÂc³ð˜…Ç,<fá1YxÌÂc³ð˜…Ç,<fá1YxÌÂc³ð˜…Ç,ýXŸYøÌÂg>³ð™…Ï,|fá3ŸYøÌÂg>³ð™…Ï,ù%K~É’_²ô£,ý(K?Êҏ²ô£,ý(K?Êҏ²ô£,|iáKKØÒ¶ð§¥?lé[úÃV»Ž×¶žÜéØÂkÃóòûZ¡ûµ?_ïÞ·ð)lGŒû]’û]>‚OÌÒ³ôǸæ#øôÇ,ý1KÌÒ³ôǸo&¹o&¹o&¹oæ#øôǸ&¹&-zÀ}2É}2É}2Ù?z`Ñî›ùÈþÑî£Iî£ùÈñ¡ÜO“ÜO“ÜO“ÜO“ÜO“ÜO“ÜO“ÜO“ÜO“ÜO“ÜO“ÜOó|ô€ûj’ûj>‚pŸMrŸMrŸMrŸMrŸÍGðÑ‹^pßMÚ½ ŸÄ}7É}7É}7Á'ŸÄ}8É}8É}8É}8É}8É}8É}8É}8É}8É}8Á'ŸÄ}9¹p_Î2Ž±ä“,ù$˸ƒO²ä“,ù$K>É’O²ä“,ù$K>É’O²Ü÷±ä•,y%K^É’W²ä•¬“„íòV`)èd•,Y%KVÉ’U²d•jíPk‡Z;ÔÚ¡Öµv¨µC­jíÆö× 6‰“ÄŒh‰áhjíPk‡Z;ÔÚ¡Öµv¨³CêìPg‡:;ÔÙ¡Æ5v¨±CjìPc‡;ÔØ¡Æ5v¨±CjìÔLJ;ÔØ¡Æ5v¨±CjìPc‡;ÔØ¡Æ5v¨±CjìPc‡;ÔØ¡Æ5v¨±CjìP_‡ú:Ôס¾õu¨¯CmjëP[‡Ú:ÔÖ¡¶µu¨­Ceêê’…ýR~ÔÔ¡¦5u¨©CMjêPS‡š:ÔÔ¡¦5u¨©CMjêPS‡š:ÔÔ¡¦5u¨©CMjêPS‡š:ÔÔ¡¦5u¨©CMjêÈf8²Žl†#›áÈf8F1õt¨§C=êéPO‡z:ÔÓ™<Žõt¨§C=êéPO‡z:ÔÓ¡žõt¨§C=êéPOÇhË1ÚrŒ¶£-‡º:ÔÕ¡®uu¨«C]êêPW‡º:ÔÕ¡®uu¨«C]êêPW‡º:ÔÕ¡®uu¨«CUªêPU‡ª:TÕ¡ªUu¨ªCUªêPU‡ª:TÕ¡ªUu¨©CMjêPS‡š:ÔÔ¡¦5u¨©CMjêPS‡š:ÔÔ¡žõt¨§C=êéPO‡j:TÓ¡šÕt¨¦C5ªéPM‡j:TÓ¡šÕt¨¦C5ªéPM‡j:TÓ¡šŽ»/Ž»/tè£Cúèô‘».Ž».Ž».Ž»..ÜuQãAG}”DE¬kÄ„˜5ÑëıIœ$fÄ\¢_Êžm3—Îï™Þ:µw;‹€”i돁ïÝ2ë¿Þ¼£ÿ
+ó³ÅŸk£_4½•u؝ªÌî*¬Þ¦w혞ò
+Ìí›m›e-
+¯(¬¢°ŠÂ*
+«(¬bïUÙ±sfWË8lºø»÷,¥Šª”·JUA©REÕf÷ô›¶ì˜Ú鏁%àTÁ©‚S£Rjœ”'¥ÆI©T©R
+¤'£ÆñÕ8¾ÇW·n
+ÜÜÜÜÜ„#MÀOÀOÀOÀOÀOÀOÀOÀOÀOÀOÀOÁOÁOÁOÁOÙ_ÊþRö—²¿”ý¥ìO³?Íþ4å×”_S~Mù5å×”_ƒ§ÁÓàið4x<žÏP~Cù
+ø|¾߀oÀ7àð
+ø|~Ü:¸upëàÖÁmŒ÷o™Ý1»k§¿Fæ¦ö\ÎRUÙ1³gŠŠÖH;vOïõk1KÉ”¬Ñ¨lÝuiÅÎï™e	ejP¦uÒ¤lMÊÖ¤lMÊÖ¤lM€3ÖÏX?£Ž2ê(£.2ê"³’™_˜WÄ*±FLˆ)Q
+±Nl'‰ÑÃñI9Þõòm{¦.››ßÀ%À`èLJ€¥îÝ7=ã9lnÏÔÞ½,<Œ|lvó›;Ïúvï™Þ»eÏÌî⯤³¢(ª@QŠ(J (¢РTºZ”Т„¥Êº§÷ÎÍ윚ƒv%Ä(« WA®RUJP­ÅS;¦wog|RB²
+~ü*øUð¡K	]JèRB—º”Ð¥„.eã‡6%´)¡M	mJhSB—²f»ŠeûÌž­Ý^FZ8Q0 „%(a@	ʤÑíw1=séö¹í}sÛ÷Lóyoﶙ7.|îÛëµl3lÇ¡ÁˆF”0¢„eÊ¡¥”'¥<)åI)OJy`P	ƒJT •0¨„A%*5ø|U¨F•0ª„Q%Œ*aT	£JU¨F•0*f”
+3J…¥ÂŒÒÇZ÷Ôž=³ûvLo›ël}šßÝÓŠ{Šê_nÝ·+|ÚìOb7«måê©Sä:E®Sä:E®Sä:E®Sä:E®Sä:EnPäEnPäEnPe0-^’>ê¾C%Û¼wš…¢A!¢A!`]	ëJXWº˜J*L%¦’>Ö¶x´™©K}GʳuѤ,Mê¢I]4)F“b4)F“b4)F“b4)Æ$ؤ“c’bLR“ÔÅ$ø“àO‚?	þ$ø“àO‚?	þ$ø“.Ô¥ïi-£gaf~wÿÂÇVû8´VÑDÍ­$ì'£\ˆž“
+ÏI…ç¤ÂsRá9©ðœTxN*<'ž“
+ÏI%ÄËR/–z±Ô‹ß‚oÁ·à[ð-ø|¾ß‚oÁwà;ðø|¾߁ïÀwà;ðø|¾ŸÑ†vtûXtܧBØ÷Ü{§ß4³×wÐçf-«uMïÜ=w¹ï~t]º§ð“Ù5×9½czgaZ¼vbìèWntíßâ™sjaÁ$1#l¼%^’
+/I…—¤iß”/Çž™½—y…ÛÎBC¬›ÄI¯Ã³»g÷*<µ£ÇØ^ØóN툧v]º#\½˜G*Ì#æ‘
+óH…y¤iÏŽÙKg¶L¾ÌÝ|œÝÓ7³k®ãl)@b¿&‚y¤Â<Ra©0T˜G*Ì#æ‘>V»ç¶û~›H±„ É
+IÆ=Rá©pT…{äÞ™3;¦ö0O	dÜ#î‘
+÷H…{¤Â=ÒÇZ·@]ºgþÐyD”ñTøF*|#¾‘
+ßH…o¤Â7Rá©ðTøF*|#¾‘
+ßH…o¤Â7Rá©ðTøF*|#¾‘
+ßH…o¤Â7ÒG×;ý†ù™7ú~ή-Ô.jg¤Â#Rá©ðˆTxD*<"‘
+H…G¤Â#Rá©ðˆTxD*<"‘
+H…G¤Â#Rá©ðˆTxD*<"‘
+H…G¤Â#Rá©ðˆôQ¶®ßVç½rÍ
+,ÌoÓsÝþ’
+_°vÒç›àŽé7±öÂLX›u(#!Ü#î‘
+÷H…{¤Â=Rá©pT¸G*Ü#î‘>Öz
+‡lß'Ý1¿—Eé@X´s~ÇÜÌî—³˜’ÐÀGRá#©ð‘TøH*|$>’
+I…¤ÂGRá#éc­ßøîé}þÐuE§ 7I…›¤ÂMRá&©p“T¸I*Ü$n’
+7I…{¤Â=Rá©pT¸G*Ü#î‘
+÷H…{¤Â=Rá©pT¸G*Ü#î‘
+÷H…{¤Â=Rî‘[gç^àY„I…‹¤ÂERá"©p‘T¸H*\ .>²=¬f…0+„YeÛSn„×H…k¤Â5Rá©pô‘zC˜qT¸F*\#}aÆERá"©p‘ô|„Y!Ì
+aÆeÒGðf…0+„Y!Ì
+aV³B˜¬f…0«ðãk/ãDoŸ§Zek¥ÂµRáZ©p­ôÑëıIœ$fDKtý{¦ßˆîy¶Kí5…¥Â…Rá:©pT¸Núèz
+Áô=†s»}ÜÌÞÐ\l&6“
+›I…ͤÂVRa+é‘c‡K±9TØ*l
+½`²r-Uø¡
+?Tá‡*üP…ªðC~¨ÂUø¡Êp¡Êp¡
+3Ta†*ÌP…ª0Cf¨ÂU˜¡
+3T'"å …WiÙ<F¦xŒLñø‘âñ#ÅãGŠÇ)?R<~¤xüHñø‘j=~´{óŽÙ-—µæùù±âçǪøù±ÿ´}ŸS¢ŽÛ¿­ÄfçŽmíßgDKt{æÂ÷;æönŸÚ:·Þ;·^bk-Î!?MVü4ÙGM4DÐÑ„„sžpÎÎyÂ9Oê®{ÛŒ‘lÝ<û¦ŽÓ|×”ÆÅoœ¿qVüÆYñgÅoœ¿qVüÆÙÇzÇiÒ$µj+$E½ØýßedJÀYçGÎ
+sU˜“Ì£ÀùÝÌS ôs…9‰ÂœDaN¢
+s’Öö{ÀóúКgp9‰ÂœDaN¢0'Q˜“(ÌITaNÒÚ~Ç6æÁG0+ñüÉzGmf©xä!™´­Š!
+…ʼnÂâDaq¢°8QXœ(,N'>êî™]oÜ<ïëv®øÔ‰Â`s¢°9QØœ(~N®°9QØœ(~^®°9QØœ(lN|Lz|'jW eÈàt¢p:ñ‘" 2	"“ 2	"ƒ#ŠÂEሢpDQ8¢øH5 2	"“ 2	"“ 2	"“ 2	"“ 2	"“"2)©Ú”TmŠÌ¤ÈLŠÌ¤ÈLŠÌ¤ÈLŠÌ¤ÈLŠÌàäâcF´Dð	¦LJÆ6ed˜22Ä	ÆGð%øRŠ ¥dkqŒñ|*E p’ñ£ðâ(£p”Q8Ê(eŽ2
+G…£ŒÂQFá(£p”Q8Ê(eŽ2
+G…£ŒÂQFá(£p”Q8Ê(eŽ2
+G…£Œõî½~,8½mjË´«¾ñÐŒØ;¿‹U(ãôê:¶MïœââIk²Ò6<éZŒg`(ÀPÏ(ŒgÆ3
+ã…ñŒÂxFa<£0žQÏ(ŒgÆ3
+ã…ñŒÂxÆGð!¦ŒSFˆÓø>#Ä”bÊ1M\¼w÷‚Æ`_㣪lÙ1¿™™Z¼}zÊ“éÖ™©7q®Q8×øXïÝ9¿—¾Òô@Ûç…;‹˜Ø(Ll­(ZQ<´¢xhEñЊâ¡ÅC+Š‡V­øHQ9b‚£0ÁQ˜à(Lp&8
+…	ŽâáÅÃ/Š‡_¿(~Q<ü¢xøEñð‹âáÅÃ/Š‡_¿(~Q<ü¢xøEñð‹âáÅÃ/Š‡_¿(~Q<ü¢xøEñð‹âáÅÃ/Š‡_¿(~ñzpèÝ¥}ŠÐcÒã#8}ŠÐ§=æ=>‚Cï.m,àpœè<&?*EçSòÀ)ã@
+õêñ…ù*±FL‰šhˆuâ$1#ZbÀÕP¬†b5«¡X
+Åj(VC±ŠÕP¬†b5«¡X
+Åj(VC±ŠÕP¬†b5«¡X
+Åj(VC±ŠÕP«†Z5Ôª¡V
+µj¨UC­jÕP«†Z5Ôª¡V
+µj¨UC­jÕäÝ4y7Í­0Í­0
+¯jxU“wÓäÝ4y7MÞMínÕp«†[5ܪáV
+·j¸UíNÕp©†K5\ªáR
+gj¸RÕ®Ôp¥†+5\©áJ
+;jFšQ†f”¡ehFŠÔP¤&£¦É¨i2j^Ôð¢Nð8xQË^Ôð¢†5¼¨áE
+/jxQË^Ôð¢†5¼¨áE
+/jxQË^Ôð¢†5¼¨áE
+/jxQË^Ôð¢†5¼¨áE
+/jxQË^Ôð¢†5ü§á?
+ÿiøOڐf¤õjxQË^Ôð¢†5¼¨áE
+/jxQË^Ôð¢†5¼¨áE
+/jøP/ð!ã͸G3îÑŒ{4ã͸G“ÓäÅ4y1M^L3îÑŒ{0ùR˜w)Ì»|dtå5]yL½¦]
+Ó.…i—´KaÚ¥0íò‘ýÓUÇÄKaâ¥0ñòqaÿ”—®º¦«®éªºê½0è…A/zaèªtàÝ0膡«nèªtÄ #1èˆAG:bЃŽtÄ #1èˆAG:bЃŽtÄ #1èˆAG:bЃŽtÄ #1舡«nЃžôÄ '=1è‰AOzbЃžôÄ '=1è‰AOzbЃžôÄ '=1è‰AOzbЃžôÄ '=1è‰AOzbЃžôÄÐW7芡¯nЃ¾ôÅ /†¾º¡¯nè«tÇÐW7èAúcЃþôÇ ?†ß_²^=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘Azdè§úé†~ºA§:eÐ)ƒNtÊ S2è”A§:eÐ)ƒNtÊ S2è”A§:eÐ)ƒNtÊ S2蔡ÿnÐ+ƒ^ôÊ W½2è•A¯zeÐ+ƒ^ôÊ W½2è•!OgÈÓòt†<á>Žá†<!OgÈÓòt†û9†û9†û9†„!agÈJ²Ò†Œ!cgÈØ2v†Œ!cgÈØîîî²u†l![gÈÖ²u†lA·
+Ù:C¶Î­3dëYsƒ¾ôÝ ï}7è»Aß
+©:CªÎª3¤êúoЃþôß ÿý7è¿Aÿ
+úoЃþôß ÿý7è¿Aÿëèy=¯£ßuô»Ž>Ôч:¼P‡êœÏ:ç³Îù¬s>ëœÏ:ç³Îù¬s>ëÔSr×)wƒ~Iƒ~Iƒ~IƒþDƒþDƒþDƒþDƒþDƒþDƒþDƒþDƒþDƒþDƒþDƒþDƒþDƒþDƒþDƒþDƒþDýnÀ«
+xµ¯6àÕ¼Ú€WÔ_ƒúkÀ«
+xµ¯6àÕ¼Ú€Wðj^mÀ«
+xµ¯6àÕ¼Ú€Wðj^mÀ«
+xµ¯6àÕ¼Ú€Wðj^mÀ«
+xµ¯6àÕ|×€ïð]¾kÀw
+ø®ß5à»|×€ïð]¾kÀw
+ÚƒvÔ¤ý4i?MÚO“~m“~m“~m“ë ÉuФ_Û¤_Û_Øo“8Ï–Ž³I;lÒ›´Ã&í°I;lÒ›´Ã&í°I;lÒ›´Ã&ýÕ&ýÕ&ýÕ&ýÕIú3“ôg&éÏL¦ß׈	1%j¢!Ö‰
+b“Ž{’~É$ý’Iú%“ôK0-Q˜–(LK¦%
+Ó…i‰Â´DaZ¢0-Q˜–(LK¦%
+Ó…i‰Â´DaZ¢0-Q˜–(LK¦%
+Ó…i‰Â´DaZ¢0-Q˜–(LK¦%
+Ó…i‰Â´DaZ¢0-Q˜–(LK¦%
+Ó…i‰Â´DaZ¢0-Q˜–(LK¦%>‚O¿ó…y‰Â¼Da^¢0/Q˜—(ÌKæ%>¶¶«e¡?à£$*b•X#&Ä”¨‰†X'6ˆMâ$1#Z"øøøøøøøøøøøøøøøøø|¾ß‚oÁ·à[ð-ø|¾ß‚oÁ·à[ð-ø|¾߁ïÀwà;ðø|¾߁ïÀwà;ðCÀñ¾%Ù¥á<;øÔÁŸþtð§ƒ?üæà7¿9øÍÁo>fDKxð›ƒßüæà7Ù¯b¿Šý*öÆã>Ö‰
+b“8I_¯À¯‚_¿
+~ü*øUð«àWÁ­‚[·
+nÜ*x5pjàÔ؍ý×Øoãª±ÿû¯±ÿû¯±ÿÇU[ÀḎ#''á8ðððððððððh7Í”ãK9¾üüüüüüüüüüüüü|
+¾_ƒ¯Á×àkð5ø|
+¾_ƒ¯Á×àkð5ø|¾ß°½a{Ãö†í
+Û¶¯³}í딿Nù딿Nùël_gûŒrgàZŽÇ²ÜïÀwl`–ä0Kr˜%9Ì’fI³$‡Y’Ã,Éa–ä0Kr˜%9Ì’fI³$‡Y’Ã,ÉaVä0+r˜9ÌŠf23‡™ŒÃLÆa&ã0‘q˜È8Ld&2‡‰ŒÃDÆa"ã0‘ñ‘rq^ùãŽ?Žà#¸\C½ð
+ø|>퇉ŒÃDÆa"ã0‘q˜È8Ld&2‡‰ŒÃDÆa"ã0‘q˜È8Ld&2ÇapüÇapü‡ÉŒÃdÆa2ã0™q˜Ì8Lf&3“‡ÉŒÃdÆa2ã0™q˜Ì8Lf&3“‡ÉŒÃdÆa2ã0™q˜Ì8Lf&3“‡ÉŒÃdÆa2ã0™q˜Ì8Lf&3“‡ÉŒÃdÆa2ã0™q˜Ì8Lf&3“‡ÉŒÃdÆa2ã0™q˜Ì8Lf&3“‡ÉŒÃdÆa2ã0™q˜Ì8Lf&3“‡ÉŒÃdÆa2ã0™q˜Ì8Lf&3“‡ÉŒÃdÆa2ã0™q˜Ì8Lf&3“‡ÉŒÃdÆa2ã0™q˜Ì8Lf&3“‡ÉŒà;ðø|¾߁ïÀwà;ðøð¢…yÜÞñ¸½ãq{Çãö>fó…Eãx2B5„ZIi:B=„FÍ&C Á†àZA<ðdÀ“O<ðdÀ“O<ðdÀ“O<ðdÀ“O<ðTÀSO<ðTÀSO<ðTÀSO<ðTÀS¯ðª¯ðª¯ðª¯ðª¯ðª¯ðª¯ðª¯ðª¯ðj¯ðj¯ðj¯ðj¯ðj¯ðj¯ðj¯ðj/	xIÀK^ð’€—¼¤…—„K%ሒpDI8¢$Q%	‡’„CI¡$áP’pI(nŠ›„â&¡¸IµŠ›„â&¡œI(gÊ™„r&”3Ñ!„â&¡¸I JP€’ ” $ ¥(
+…O^ðÒ€—¼4à¥/
+xiÀK^ð²°]¶ËÂvYØ.Ûea»,l—±](gÊ™…rf¡œ6”Ó†rÚPNÊiž
+x6àÙ€gž
+x6àÙ€gž
+x6àÙ€çžx.เçžx.เçžx.เç^`°Ä<×ÂKŸ¥ÏÒÀgià³4ðYø,
+|–>Ó¡è„9B=„FÍ&CÈB°!´Ðuh:´Z­@‡V C+СèÐ
+th:´Z­@§/
+xiÀKžx:à逧žx:à逧žx:à逧žx:à逧ž	x&à™€gž	x&à™€gž	x&à™€gž	x&à™€g^hY:´,Z–-K‡–¥CËÒ¡eéвthYÚ%Ý[wœ9·ejÏì®®Ä¸Q¸'ÆçÎìØ:ŸZø¼õLÎìÙ2¿³xÖ+ž,֍›…‡Kw6;7µeËô®¹¾Óæw]:µg~玩ù¹Þlv~óŽé–C\ÏÔž©Í3[.Ù:[<°Ûú¨üç½3Õbf }æ’©ö/™ZXµÖÚn~WëïúmØ6³kêÐÌÌ®™¹C3;§·Î„™†l[Íϼ°šŸyaµÔµï͵ï͵­Öl´}ãgŠoz)Ûž™]—†/ôdÛÎüÌ›ø™v¦³öÕ²öÕ²¶ÕLû˜ö#0íG`Tûjª}5Õ¾ZÒ¾ZÒ¾ZÒ~ íõÑl¯f¨…téÔ¶K6Oíi}ç;,¶Líî´».Ý0µcnQ±P¥fƒ?k;¦÷î
+óõla¾·µÑ¸ñ¯ŸkÅ<ŸuÛòbÙöy¼m}Ùöyayõ·¶l[¾°ÿÉ£mùÂ~Ôo}oû\åsú[ŸeÛçñ¶Ïõ¶m>Ë·góž©ÖósñéEe…Ú­‡Ó³t>ŒŽZ3vÌîºtïÜÔž…3Ð~
+›í§°Ù~
+'Û/Éöd²ý©‡vïx¡Y *fjÚlØ9»kÖ_É»·³¤þÂ’E3ÅcÓÓ—µŸâ‘ã·æëíó…‡ðoÎO6æÅ–­³ñË‹¢„‡þ7löí©Uoi"‹?NÚö9œS¿¬˜o[nÛ>;Ö±mëÔÚÖ)>»ÖQëÉÆõU̪¢bæPåi_Ö¶Õší«5ÛW›l_m²}µÉöÕ²öÕ²öÕ²öÕlûj¶}5Û¾šk_͵¯Öv	ël¼m5?óÂj~¦m5Ù¾šl_M¶¯¦ÚWSí«©öÕªí«UÛW«¶¯Vk_­Ö¾Z­}µ¤}µ¤}µ¤}µ´}µ´}µ´}5ݾšn_M·¯fÚW3í«™öÕêí«ÕÛW«·¯ÖÞÞ²öö–µ··¬½½eíí-kooY{{ËÚÛ[ÖÞÞ²öö–µ··¬½½eíí-kooY{{ËÚÛ[ÖÞÞ²ööfÛÛ›moo¶½½ÙööfÛÛ›moo¶½½ÙööfÛÛ›moo¶½½ÙööfÛÛ›moo¶½½ÙööfÛÛ›moo¶½½ÙööfÛÛ›moo¶½½ÙÐÞºÏñ‰©Í³olq_ñÈOA‰|–mŸUÛçjÛçZÛç¤ísÚöYbüš¶¶ÎLm	ün¦6l.ºv³¤ùÂ’ÖÆVš
+ó‰lü~ùêÒÑQ‰ÒºhÈ¿¿¨4Å¥EüÜQÑRÿ~$ËŽl­W|¥µ­ï×D÷û÷Ñh«_Ýúöˆh…_ú÷•­%+ZïË[ïËZïK[ï#¥áhÀïu¤5W|¥%­Ï‹[ï‹JÑ•þûE­¹â³(õ—ú¢wùeý­eýÑCQ¥ÔWê.ðËŠo„¿Ú/ë-õDGûeÅ7¿OøeÅQênmÙÕzïŒúZïÅw~`CÜXRêhWÜz¯´Ö­#*·–”ZïÑÄóWŠç_&ò\üõqñÁ\üú8q ¿zöÔøWWŠgOÿq@ü2¿ÈÅ3¹ø?îÿž‹ËÅÏsñ¯£âg¹xzOüt.ö÷ˆý•ùiOü/Jü´Gü—âŸß»4þç\üç⟈Ÿø™Ÿäâ©\ü8ÿ˜‹ÈÅßçâG¹øáñƒï/°U|¹øލ£ñ÷¶Šï~g]üÝâ;ëÄß}c]üwÄß~{8þÛ¥âÛOÆßOŠ'¾Õ?±V|«W|Ó¯ñÍâ~ÿßX'ÿÓ¾øñ£Äc3?v´ø›¯/ŽÿfX|}±xÔýèjñµañÈWïÉÅW¿²1þêýâ«WW¾2ñü_¯‹¿²Q|e¢ò×ëÄ_åâ/·Š‡ß3?œ‹/!¾”‹/æâ¡¿8!~è€ø‹O­ŠÿâñàVÆ*ñ…†â/¬Ü¿(~`HÜ__|ÿ"q_Ÿ¸×ƒÝ›‹Ïçâs#âžÅâ?åâî\Ü•‹;—‰Ï®w,ŸñûùÌñi>}@|ʯÿ©Uâvn¿R|2·->‘‹çâc¹¸5Þ#nÉÅGoˆ?š‹›ÄÍ•›|EÝt@Üè7¹qTÜàÃ
+ÄŸùƒÿ³#ÄGrñáÝ8º~cü¡ûŇ®®\ÿîuñõÅõ•æâ:ß:®ËÅ6ˆký†×ŽN</Þï7}ÿZñ§}â}~ÑûÎâßäâ½¾Þ»T¼gP¼{øã\\“‹wåârñÎ\¼#oÛºøí¹xÛ:ñ‡¹øƒ\ü¾¿w­øÝ\¼5W¯Wõˆ·äâÊ\\‘‹7¿s@\ž‹}o¼5Þ—‹7Þ*æçVÅóÄÜ*±÷€Øs¥xC.vÏÏ'v;ˆÄe¹x}.fr±}K_¼]‰Ks±M‰é­=ñt.¶öˆ­•-›{â-}bs˜Ú4O]+6•†âM#â’qq.6æâ"?Q..|ݪøÂ\¼ÎϽn•¸ ç¯ÍÅy~~âùórñš\œ;*^=,Î9{E|Îq¶ÿâìâ¬W­ˆÏ: ^õÊ¡øU+Ä+‡Ä+FÅ™gÇgŽˆ3NŠÏ§¿| >}H¼|@œv@œê†ãSG„ö€È&âl‘˜Íƺ¸y at 4ü>ëÄÄ)‹â‰\œò²ø”Eâeâä“úã“—Š“úʼn[Å	¹¨“½D¤ÉÊ8]'’Úpœ¬ÉC•ZO\µ«+UÕW‡Eu¢¢ú„¿5–¹÷û¿Uß'6,/=î„ø¥Äq#ëâãNÇn/Ù*ŽÉÅ‹GÄúeCñúQqôZ±nT¼è(_ǾhT5$ŽŒúã#ˆ±Ebl¢²vX¬é££bõ+âÕëÄ‹–ÄG¬G|ÞsÆ{+«úÅÊgÄ+¯+<èŠ3Äò\,K=ÚÒbÄ/Y'†·Š%Cbq.†üüP.·ŠEƒñ¢%bÑC•A1pu¥ßÓ@ô)Ñë­w©è½ºÒÓ/z&*ݹèÊEg.:➸#qˆ'*•Ble¿U9÷ìÕ—†DÔ/JŸ/mýƒkJÇþÿã_ôÿvþ7þ[Eåh[~me[|K$¢ÎhÍ^²ŽŽ¢¨£tô=¥®øåJtüÃOì—ÑàûŸØ?¾dhlhÝØÐضJtp¯Xuð'ùµÏþûžŽcü6Q)ú†ßa½ô{~_CŸ‹>^ö궤2xÐo~¼ßÖo÷ÒöüºÒïåWzÜk¢¨²&þy´:‹N›X¿ze\®t¬X½ktð½‹ÞßwÓ’kFÿhmGÜ]Z¹"ê./]´&*–Ž|â¤ýê‰'ö/®×‡ü«Øó3ŸÙ?øôP½¾¬>^Kjé)¥—•’ÚÑGÙÑ9ô²RUUF†;¼ê—Fb_„ò_æh¾~¢žl:ïì¶]þ•Ï”¢W^<‘½$ÿ@iÆ¿ž•ç\µù„ÚEÜ«&›¥^òâ¿þ‹Íº þ²3^úÅüÑ?²¢(~GüdÔåû5k£³&Ö-Žî]ô`ǽ+¯é¾wyGÔ)ö-ê^¾ªÒ)–Žö-ì\ºBŒùZPE-+Ê}¨è~ªOtGGyü‘gY)m,Ï)}lihɇÒhid¸rLihlmq$bñ…_|á“ÿ87?7ÿåÓ®x{þýüÛϽµÜ,éÒ²mâ}g½ògç?·wó–©©üòòŠ}éš¿{"~òÇv~0*η/G½Uþeц‰‘è¡îkJ-í*/í‰â—nˆ–v‹å¾´÷û](åøg­(ù²
+U[…:ªä‹²léâ‘árg‡/YùäwîÿÕ³O?÷‹Òµ¥sK¯Ø7³mÛÌ›ò;üôúʝßðÓýðŸKGMÍMçÏ~ìùLÏMmÅ—£ò5_Žîè؉¡ÊC–Š®éŠK¾Ú"ÑÓª¯‡=zQEã÷öžÕ»»W”6­(LT=·§|és̯ŠŸÌÿ4ÿÁsoû-Ÿì÷+¢ã>}±ì{…·Á3îXtîwž{áù÷úZ˜0„FYºg0žˆÏŠEkÇ”ÞZììÀ±ÔSë<÷DK"9±´ïӝ½ŸŽ®é^ÒßYê|i¥·Ëïx8œÖ…šz¦¸FîŒFJE9‹“U;jhìP­=P¾ª´º$óÇòçùU¥·>¹ûw~gwüäs?ý—çž;Py0¿dçÖ­;Z×ÑûžÿqüRm¬>6ñ’h]exùPOïèšÊHéË•‘//ÿôPåÓë><tÝ‹G{z׬êŒV­î\qä‹¿¿ß_¬­«(ÏàSþÂÈ2ø“Cn|âÜÝÇ”ê«ë£õ5õµ§ž¾æôµç÷l\}ÑèÅk.^ûº±×1»zvtvÍöµ³kwÍõÎõÍõ_±æŠµWŒ]Ûû¾^¿æÃk¯»µ÷Ö¾[ûo[}Ûèmkn[{ÛØ‹7McCÉ_p#ÃKׄö:vä‹Ö-­„C?¾´Á_‘/S•Ê×ÞüÓíïüýæoùÕ7óïåßúãüßýîRïoùÃßþþ¿¬´¶4ðæR%¾5X›3Ï:irù˜zôÿø·4)Ù3_qî+Ý™£cãß¼óG?_ת§|=}ÙŸ£¡¨:±l¨·ËÓUüÐÀuÝÑ5‹»–öÔ‹s¿¸Õ–‹ÊPÏWßø=Kv/¹aIhKÃK‹úæ4­†|¸üï¼Ü7ƒ/å÷å÷ç_ŠŸ<øÖ{o¸á^qÕÁ·æ_Î)¥¥“=îÉQÔõ>ÛWÚ9qzÇêήÎxu%îêêìI{{*q¥;ãJoZåž´»Gˆryµ(÷ùÕ=ãö­ë‰Ë¢CD_ìíêëíéîêˆ+^D{;£þÁ'θ£Û7Óžs/<ãŽÞâ­ï…ûè²¢‰yöSþ Îxõùƒñӝƒ]¼â§{þ‚#KŠž‘ò`y8Œ{Öõ¬õÓ	åSÊ'ħÄÕžq?M´¦‹ËÇS=Ÿ/¶ç?y"»º»ãÞŽ¾¥ååbYeE<Ò5ܽ²weßúò‹ÅúÊ‹ãu]/é;~ -§BUT<Þ1Þ9Þ¥ºkþøOx¹p•ÓbÛ}zïÆhcéuå׉×T^ŸÓqNç9]¯ë~MïƾÙh¶4[Þ%¶W¶wNwmᆲgWïLßlß>±¯ëMÝoì}SßÛ;ÿ ë}Ÿ+ß'î©|>þl׃}gø-ë.ÿ[o'—ÞP*—¢Ò^ÿ*—vå7æYþoù3y?ùë/WN.^Ž­Ìþú½A›¢|µx}ÏóÂÀÝ‘ƒ•¸µGÇK#c‰×3ÿ݃úëþüç\ùËÊ›ýu¿.úÈÄKº;¢kz£o.{¬ã†Ç‡Ö>ºækGÜpÔ#C×õEG-Ëû»û{O^#ú‡O<Ú7´‡Ÿñ§g(ÁS-]ú§Ÿýògu®½3_òÚ“ÇNYÿŠµ¯Û¸vãØ.‘½eí[Æv¯×Úw}díGÆ>µöSc_Xû…±5:¾frtbÍ«GÏZ³etÓš?½zÍûFß³ææÑ×Ü9zÇšÁâšk]o¾Ÿ\Z74–øðèâ*«¶‰ßÚJùæÝo¸ðìéwêvÚÝoýôwüøÈoýáïý«×ìýç¹Òñ~ðû왧g¯xïÎcÞöÜ[oݶñk7ÿåçxÍ«6l(
+±ú_[šq»¿Î.îŽz£#"3±ªã¦¾ÇE7\·è‘U]þø
+Ñ\<±¼¯»åàê‚ý…Vÿþ§ZÇ?~÷«F7–K×lZºù«Îyýˆ§^í½üò½{ßüæ7Ÿ~÷üc¥žü—Íß}z~}iÛþø7~ü7Üð‰ò“›7æŸËŸóÓç6n¾Ù§u^‹ó•øóµ"Ò+£GKOTí¢ç¦¡ÊMËüiZÙÙ쏆O\9xðaµŸùÙà/|Á.YuÕªr;wùºÔC¾×ESK+ÉËß÷ªk?ö±kÏýÀĹŸzmþü¶Òy¥ãÏÿdåäüûjü3ùÈg”Ì¿·f×Þ?é5Q«¾.òõ5à8êkÙMÑãC7ŏw]7ðHé£b¸õ—'V6{O,ê«h3…=õÌSûŸz¡¾J…ʵÎjQšªZ*Ú+ðÖ¢+uúóå¿,õ<6w×ÍEýí¹ürñ@ùü_í¿yËE¥——„Ÿ^¾ñàW‹,^­²ùúŠ{|}
+G«¢É‰±häïJݏv=ßÐWúÛå7,~¤ïº#V”»Fú£¬Ü¿èÄ#Z%,4%TÞS­ÚûY}üîãWŸ²º(æÈØhé7+nm‡÷¼¿ÿÃïzÃÓW^•_•?ž¦tFéÈRWéäü=û6mÿÝÁruÛ[Þ2™åûÇe))-+-.é}Û®œßE=æ.¨\îkñÅÑG±HD#.}bÅ
+‹Wû&ØýHÿ]GÝ´ø»Ñãâ辨`bdm³ãÄc®Ã¢
+>j5ÿÅÏ
+QôUû’M/)šb«V“ZQ«Ë’ûûv8Ô:ŽD,4_ÙâV_Å_ÏŸ)õ}}þÎÓ}•2`æá-ß}á·ìŸ½âM{w_qŃ›/*Møu©qÑ–[åÿžÿxíXiYš\‹è¸åÚëo¸åý×ÞR\Cþ€û6Qô³™èøAtWå£å¸Ô_‰»zb§¯5Ñ}V÷¦îÝÝWwW^èïÜ^ÚV\ùõ•M¿¾±c8ÿ~«í¿°ÏÑÏE-—ú£ÁCým¿›xS¼;¾:f7­]tÿj¸nn‹¢Î»};XÍL³jdqw¥3ZÛѹ|Ñ÷Ö>~”xdô®#–tFËûºú;Nî_|ÚšUý«=)¯I«M:xR!®õVã8þ¤“žz椧ö{þóSÑŸX´fýøú³Öï^õú÷¬ÿÌú΍¥â²_:âè…úØPhÓÅQŽ´¾¯Ü—Ý¿û‹ø‘BɽrÛl9¿nâœKwûÙíÍO^:w§¸uûΟýø¹óʧõ±rße¿á¹ï–O»ï²O|ä¹ïT6ÝrɦÝÑBÝÄ‹ýñ-‹’‰å¾’K=ß[üøÈ#ƒw
+”ÊýÑ©Cýý‹‹Žn`«“ŠvR0÷øÝ›V\½"\~‰/ÚúÀ
+/”.^œ_×?8rÚ†ÝWgäì{v}é«åÛž;o¶ô¡÷îZyÔúO}°UŽÍºÞÖûrôú’¼tbIÇM‹£›úY|Ýòîæ¢3EsäÄå‡z(žš~6~^rÊŠS‹þI©½!.\Yþ½üÅ}W^¹oþŠ+æ½ZßMùQþÃüÞÒ©âÍŸ¼é¦O¯R”%ß璘”LiØO&”åöü¼øb_–‚—NœXý/=2p]é‡â®Õž“&ZìÔÆäƒO=õÛÔ´îPuÀáKÚŠZ^\ÔKßâi}¯§§›Ÿ»»£ç–6ºàõ3•¢×{ßì˶>úþÄD_y 7]3wtvuÇ•žtÍšÑu¡ÜâøáGGžX~ÃPå†u¼Ð~õªs|Gø¬#_ñâ‚žØÿÔoö„Q°þâ…ÞÓÀÓ¾‘.8òή^ßkŸ¸¸»»»§»··¯·¿{Q|Ôʾ•ý+–/:®kC÷†ž
+½ú6ô³¶Þub÷‰='öžÐwBÿݧ÷œÞ{zßiýûúöõß×u_÷}=÷õÞ×w_ÿºŽÎ®îžþ^ÝÊ1—Ó]ô‡Ú:Ê•¥­Žò!æYè(§ÅE°lï·/ٶ匩SJKÌŸÍÌ>}åeÿ07óú—ï<å_zæà–ïz
+úùøx59vCo÷Q7~ò®»:ª4X«P?¾¿kôæ?¿óöÑâ:Xå­·ÄæG1;'VÄ]‹ÄMC¥»ºnŠzºz»ËÝþd.8w¸mˆtÆCÅÛâVßs ¸ÎOzøàI?­ïæ¤â"/.ðå§D§,)û†%
+.:«|–8kdSy“Z×ðÒýß/:j¨:T®–ސ¿ûe}>ÿúŸ½óÎøÏò/=åë^©Ÿ>ûDé{¾#÷²Öµ{£¿f:*›¼¦Ÿ8±Ê“~©ï{Ï/»n°t×âŽr´dQÿЩþ\Ô3Џïߺ‚W]]èúßF‡Ë¾¦—…ê=¤§GßXÚ^Zzª¿†R<û?íüÒ×Jw—oß}aþô†·í[uÔÑ·°|̯o¼¹u—¢Ó<W®öåé+ýîoõ÷k¡¿_+úûµ¢¿_ûïö÷ôßìï÷œûÿLWÿŸF|ç>)'ñxÏ©­Ný%=;z®ê¹£ì§ØO=•Š¿ÑóxÏß—ÿ>þמeKËþ²8ìô»YÜ=ܳ´÷èÒ‹ÊÇÆÇt¼¤ëØîõ®óü$JJµò‰ñ	'tê.ÓwÊÀ©åн?µë´¾Äy•óº.ì>·÷‚¾K¶•7U6Ç›:6unêÚÚ³©w¾¼»²7Þݱ»sw×\ÏîÞ·•ÞÞñû]ïèþÃÞ?ê{÷ÀŸv}¨ï=·–?!n­|"þó®OtßÚ{[ß=¥{;î麷ï¯J‹G*_íx²üñ·•ïÆ?éú/ÝÿÔûÓ¾[ƒ€U¥âi¬·4vZ颾P:Ö¿.Ê¿“_þ…òË+›•ç*僿¾Q”æ¾NþN'ý§ëZӳѳ¥“ü´½5½ë7¦GŠ©ìSåëË׋¹ßšÞ.Þ^Y\ÙT¹­òlüJ?Ýí§¶¦ƒ;:îèøegÖš~ÞuzןtýI÷žÃÓáéðtx:<žO‡§ÃÓáéðtx:<žO‡§ÃÓáéðtx:<žO‡§ÃÓáéðtx:<žO‡§ÃÓáéðtx:<žOÿ_›¢ð‹ìR+¿à/~øºÒ¿:¢ÿÉC¿½àÈ(Z­Ž‰¢ã‚j¥‘‰Nàûf”YwêiÑéÑ™Qôª³Î>çÕQtÞkϏ^÷?‹ü¿í_%º»õ^)êççûžÞ¿o(Þý|%úoòÿéß‘­÷â)ÁõþÕz<y¡6øWm½§þUü8þ„è7ÿ5ý+‹lä¢S‹_ÿúºŠŠÚòÿ^½º5w^ôÚè|_×*[TzOÿß>ʮߜýyôóçcAhQåëѶÿ՗艾ñ¿úªÜ]³ðêX=ÐzÝ^ñ¾^åÿýWüƒ¶×—£÷¯Ž«ü>ü«ë[ÑÉÿW¯âįx[t~|_t{åÁV¼(ÞéãN>ûWùÁèööW×yÑmñÑíñUa»…WåËÑëÅ·¢Uþ»‹WçV¦‹:/ŸðŸ½ã3÷]²è¤_DkÂIúòW?üÙ…ø{þdÑ×»·ùuÁÿ
+Ó¬1˜
 endstream
 endobj
-7310 0 obj
+7306 0 obj
 <<
-/Subtype /Type1C
 /Filter /FlateDecode
-/Length 7312 0 R
+/Length1 82308
+/Length 31285
 >>
 stream
-xœUKLAÇgi»­ZPºT‘îŠ(­H at E¸(­ÄPƒŠ1&6”¶¡”>  eÑÀB4-úÀ!QkŒ.DÔø¾.¾ƒz@¹h„¨3f9¸@”x™Ì÷Ÿß÷ûfÒ€aØŠ"»“>Rf¶-é(CbP’„mDOÐSYØ›eŽíRb¬RÂ*¥C¿_¨`g<lY
-k€ÃœÝz‹ÕUGWU×SÚc%ÇuiiÛ–“í999T¹ëï	e0Úè*3µEÜ4Mk­Ñ\ŸGéEÚd¢+¨*“ËZm£Ê*+•m¥e&c
-U@›h«ÕÒ@iõ:jGfæötqÙq®-·Û¨b‹ÙBQ%Æ*»©¬î¿  ³œ8h´pä‚P Ž\|4¸ƒ%a¶˜,4‡fy„ñØ[­ä%ðÒ«ÕæTaµ?«…*¨šýã`BêW!,—þø˜»I››’’=5û}zjŽûYÙyŒ‡úç7ŸAƒ¾ƒœà,Š}=}Ö7)Äâ®VÆÓìcBäM\Ð
-!:d7ðpèo㜋„W$zE"ŠÃL 7ÊŬٳÁx¨—ëx9™Œÿ;ÇÃW¼u¬Eá¨\ý€ ÃK²099_Q—l#î^ºB|8o§ñeµúÕNrªÀáãù.ÙâÇÀ|nå14OªÙñŽHÓ•êOy÷ÒX…š!Ä	k¥ÀÄÏPy'êóú¼íç;Î1dEM¾½˜ ›÷ÒóSÁKÃ_Þ<šagØÉÙŠEkL‚0ÞÊ«æxÇ-xíö:H­®¾|j „Uºü“…5!óˆ‹q0“Ì3Ì{†›‚ul½‚ð—VfíÞ}\Ãɉ‚¾6_‹†(ô0­nrX;¹¶~
-Ñàz¤_>zæ®û9«€²é‰WQÓ%²fÈè?Äíìmï¶DWCàl0¸~tâÊäûûµ§/jˆäÆn®­/1ÀùB$á-'’CLo³†ð·xÅ	qŽÚªH$‚­äW)•¼2€?ŠInJ
+xœì½|U÷>~§ÏÜéDêR	mw–’²@H 	UT–d“,$ِlèMª€¢"""*¢bCDEÄŠˆŠØ»"bCQ±!6øÍÌž€è×W}Ëÿóù“—½wîÜ{žsÎ-Ï9—/"B2šƒ(4$7¿‹¹ˆ¾«œÏá…åáÊÄsÍùXP8)îCÑf)NË;ÎóñâÊ’ò‰ö¤ñ‘Î3º£¤ljq¢¿6!zQi$\tX~l'"R³Öî¥Nƒ´µñA„¨EÎs›ÒòøÀ;â|Œ)‹†ÏÖ§uhWžRÙè„àȧîtZ}áòHóñƒopžŸG¨7_«ŽÏQ>¡~¯"ô\«ÊªHe/îkg<>†SJÑV´ÛùymDkˆ
+Γ«ßD§e¹ÍG5NËb7±˜ìä´m at GÐ^§çB´›ÚH#b 
+8­½Éè;¢ mqd¤‘±4¢sè-t½•þ„Þƒ’éjz=–®&ÔMÌpfƒó7…ÚIèYÔm%ö£j´:D¨ít­ ýÔj#úÈA¡ù»Ñr´Mwt±ˆšMN'óœ–]Ì´Úù‰9ï÷k‰½ŽvÛˆyhZEÑä ´–ØçصEó¨r¶ã“ Yìè¿Ë‘µÇ¿UÓˆÙG`tœìè´9Ú;Xã¼ÏfT'fŸ÷sÍvÐzv+kq­×cˆÄaöJ´í¥ÆP©·‰ùtkú6z Zžð 5-wd¯vÇ°ÅÄTÇv÷gº+œL%6¢CôXnœ#{§k‘ƒ¹…Ìs,*F۝¿“Yͱ©1ŸZìhê¾m†öpé.ÎxG7Ó±¡DãÚtt7ÚŒ:Q+ÑrG’g/›ÌuF®¡86/'–’GÑ*u@Åô—Ž¯‘…ÐJ„äX†¦H%ù´MdÛ¬¢Mý†Žô=3ªe§¤Ó}çÛ„†l’§ú¶ž81d$Ý„µ‰iº‰jËo¢Û¶>ð{/tJ4d¤oÓ¯¡›á´åtªî“Óì´‡2¼w.è&¦­ó¿¬±›|…¥¾%Ú’Ö=—h‘žœ5ëØ]~¼™³?øᵟ†ÊUnË)F¸-Ö
+ª uD¥HB$ÒP?Ä;;­Sê”îZjLô99ná‡:Dâ ÔID?BB"Ùê´Sï	uIäX¨³“ó Î#ÝÙ7‰ºè¬"uÙ¸¾ýh¨+Èî5ê{Ýuѽv:ˆ-8úzèn@
+‰ÝP'O|uÊi?u5$[AAÈL¨³È"ˡΣVä2¨‹¨'ùÔå¶=©æPWPiÏcP×PÃ^×@]G|¯‡Qº³Ö*ÑTT…¢¨ÄñpùP{Tè¬*ò£®ÎOÀ©szøPšÓ'¸Ó;‚¨%9­Y¨ÂéßÙ©¥¢2çLJòNʪöž"NqÆLr>‹œžøO v?‰Zà Mr°Ü]Qáôvõ;cþ5Ä§6Þ7Ü9ÿ|R©Sw¥E¼aÏ"çœwÚ|Žf5v™óTè<9¸åN÷F(=V9µ*ZR÷µ/ìàówíð›êK‹Æ«ãU‘py’/«¢°³/µ¬Ì—çöªöåEª#U“"Eño†vw‡„'•U”øÒÂ¥¿30#2><¼ÆÙ<ኒHµ/\ñE+|•5ãÊ¢…¾¢Xy8Záhvª‰ùžÎ± ƒóÃÎCšcLMp*±Ø„?7äÏôîy»ÚñQÌó ßñ¹ßY9hx¤ª:«ðù;û§Š:MЙ°Š=i‰9ÃŠ«Å-ŽU8.Š;G޼ǝY뉺8?E c’#£³36æ”UÎLF<yUÞœwväFœ1¨4¯ìÙ¥K‘#tRMçêXMUa¤8VUé\q^gÖÓ vÔ®Óßî÷»î"Þڍ8+(†&;}Ý•úϬ?WRçÍT§O©72꼫ôìŠ{kÝõZ•7ÂÝ®ÔI§yòt;êöWÍ)ûë÷¬ÁÎÏ™lO¬°S«ïµßîtŒ:ýü§NþÌ:ó|×ÙuÞ`¯÷ZÜUXîùz‚ÓsfàÿÒŵlˆ'¯Ü“V·›¢žN¥Þ»ØUâ¡TÀ¬'Á¼'f+–Xc‰õžäéóf¿Â_	;6s¤ÆaEa„=	Oc÷´8}=zýÜu˜^+ÁíÐ=±–#Þ†O¬½VõVI+oæܱE^YíéUèŒ	ƒ}ØÛ…Î
+-÷¤Ä½7µþ)vje°“ÚŸÔ±Á=µ\ýãÎúM¬~±Î'nK¥·kŠ„Bot­6Ežqo­sÞƽ·	üI°›Íj<)	ŸLöÖ@©w*ÅÁ3å^[}‹jm¨:eU&´­ñ|˜TovÜz¹7Ÿ‰¹ÆõNjgtÒïØ‘tÒÎ.Þ	âó$'öCBv¼zêìÿ±ÕµžKh[yrEÇ=½êV]E“=”ÿ)„ÚÝPìê`a¤b‘÷éb$y¥ë‰ñNBO^¢Oíü¹ë¸N¶Ú*ô°‹<£ iOow€vaGbÌ;êæ þYTçßžNÿ8ì†êSúÖî•:Õ?êóy6‡=ͱw6ŸºÖÞHpIøæ3æ± æ¾Ü+ëΏ?3q‰\f
+ƒEOñԍu}2¸%îú¼ØÓ±VR™·N«N¶$4u}ZToÎ믺Z
+{ŒõÎŒ2ï	Ÿ´¨ÈÓԝ¯ŠzÞ(9…WHµghØ[=‰µ[‹qºªÿO›jµÄ`AÝ
+{sôç58çtœI·$˜ï2o\ôwNs|rvª¼s6ì+urk[ªO®ÈÚýr:{Dàœ‹xVÔ"Mö¬*òÆ·:¶:i÷é#°ó®–m[Õ[e‰=“}¿Œóö{¬ž®5°j×É$çmô‹ )žŸ+`'W:?	ö
+{'jääˆúóžÐ¹¶Ÿq§”z'¼Ï+«ALj·’~oÔžug:»‹<&¨ðæ½¾¿ÎäU\Ïsõçð¯îÕjïÔ¬åêºÝV»“ÜÈ¡ìdìQ#N•Xé­è	Îg	ÌX‚ÝU…OžªÿΓê÷­{$|X|ÒSPÈÃÉE9Γ‹“ë< N™ç½ËrÚ|N—ç¼î<e8­Þ¼¤zoÜ÷­¼Ý8©»sÑ0OVBFžóéÊå´¸²}Þ³û4ÈéŸãÈrdžÐH#äHËw4Ëuê®ìÁNk¶S† Ÿ;"Ýiæ<»õþȍBx9Ψoï¸ã\]š8íu¨§j•å!Öj6ØyÊs䀷©Žì,Ož«’¹õÐ3á¹<Oºë#W²+3ÝÑ(Û{r[‡9å§_¾çÏTÏ愶9ž
+™Îû„-!OƒÄL$4JwÊ!¶Û£¿£Wç© z&yóèÚ“áwQy½šåÂ,»õ:)Á—	=\ÿ?‰œïÙŸíüø<ûœ–onRùµrk×NO‚«7ö¼1̳/ÕóC®‡æõs½èú3ûäŠË«7+éž¿Üys5ÏðR=äŸÑ’ZiõgçL«ŸDèïÙò<•íõÎwürúglI¬Ç,ÏÖtðuBfbÝ'ÖDv=ï¦{6º3;ÔA
+ÁšJõ|wªî<ðô¯³"1©ð™^Ïgu³Ÿ³[«O‡\p¯ŒðöbÈë•êÍuþÉ=’éíßÁ ù°“+¬îë3÷¤f§ú·vÕöû3gGBV-ö©3˜á­§lÐ0ÿ¤7=ðÈMœ]!‡×
+½<'~òÜ>•¹ëGuÑhý¸3©ÞY[?HœÂý½¾å§õ«kMdK	ΪËuêÇngÊ°k³ãD,_õÖE‰³;‘Տz‹¼ø<VŸŒJb^;™LöÞÖqz%ܝÄNÉó\ä°ÇýI'±j¹¨NV"®{Ñ‚‹V}oþ>Cáßd†•ß'P&{õ8D&®}5Ð×mŸvZ6\{ÿóÛ9ðqjm9SäPßÿUÞ|WB.õ<ìÆ“AnªÍËê|âz qïV~ڬ׭>WZOtú­‚냒zšy¾Æ(q‡çbbJ½ãúïß:ýÓwÖÿK÷Aø”û Ó#¯ß}>ã}ï?|„ÿÔ}Щ‘|a=êî:j{þ¹Ô3Ý°àÿÚ½’ï7÷Jøÿ¿Wªw¯TwÃðÿÍ{%|
+Ãþ÷î•ð²µÿ…{%|Æ{¥:‹þ3÷Jøîþ3÷Jý«÷JuÿêôOÞ+Õí·Sï•~}ÿv)‘Ÿ'"‰ÿµÛ%ŒN½]:óíÆæv	ÿw}õ<ø¿}Ë„½5öÛhæ?Ë„ÿ‡o™ði·Lu¹îò–	ÿŸ·L¾ÿØ-þn™|ÿ¶[&ìù`¸#u §mÂÛ©ÎûÿÜÝ>ãœÿ·îŽðoîŽ|ÿµ»#ü»wGuw@ÿþ»#ü/Üý‘ÜïÝQíÉúûŒòÛün|êßÒü“7>øoÝøü6gûk7>¸ÞÏÝ;ü74ñßÈï‡ên°‡ã>uF(Óû‚–ûU5÷Ën'¿çk_‰øÆEÊb“;töý‰/¶uöõ/›ZYZí‹–Wƪâ‘"_qU¬Ü—Z™_«Åð¾HW“ø"]}ŒëЇGªÂ¾„j'¿‡;ýáüÛïíýé¯üùNCŽVã°/^.Š”‡«&øbŧKÁxH¤ª<Zí}i.Zí+TE¬’ªp…cz’c»c–3ÌñXUI$ɏùÂS}•‘ªjg at l\ÜñXÔqAØWè(žñÒH­Ÿ
+cå•Nw·C¼Ô‘îx9RQíx¯•ç’VaE¾puu¬0vðpQ¬°¦<RÇ]}Š£eÎ$µw%z|ù±âødÇý­:xšTE*«bE5…OLQÔ1,:®&quÀ§Hr¦¹°¬¦ÈÕdr4^«‰;Ê”GÈE¨J¸Ò[SíôwÍIò•G\«±·@ªK“êa$¹˜]bU¾êˆ3N﨣*˜´«œ#¶Òut'\çM.uÖo¸ÓP\SUá F¼E1_u,ÉW]3n|¤0öÇÊœÅæT«(ŠºvT÷ĸÀ›ñ,H¬"O“‹ "w¦¡:ÑêÎJeÝ
+H¼óU—†ËÊð¸xÍQÃÙ%áSìŒU8ë¢ÊW«ŠœÑl_|je¤8ì uN(uêÛòðTg·8Ë¢ÅQw¡…ËâÎÒs*ŽÐpQ‘gyÂuî
+W9zÕ”…«°T©Ž–Txj”$öª3È]¡áBGHµ;¢VŸêÓ‘\‘Øð.;³ S«G4G½Š²©¾h½eŽ]sª"î¯Mx}ÝJµëHw^j·GÄYs‘*oÐäXUQµ¯ÕÉ}ØÊÅ®}[¹Û¶•ç2gf²a¿Œ‹8;É•Zã́ë“I±èIÅ"SâÎŽñ…++íWq_$lw$»\7)¥á¸¯4\íHŒTœâwÕÕ­î"_ME(\§*ö”KXøG³Z+swµ7mî$…}eîéáì•ÚŽ•áÂ	áÇ0gVÄ°»TÿµEu
+”s`9*FÊŠ]¥„|™¹9¾üÜÌ‚©y!_V¾oH^îð¬ŒP†¯Uj¾óÜ*É7"«`@î°ŸÓ#/5§`”/7Ó—š3Ê7(+'#É9$/”Ÿsó|Yƒ‡dg…œ¶¬œôìaY9ý}iθœÜ_vÖà¬GhA®7De…ò]aƒCyéœÇÔ´¬ì¬‚QI83« Ç‘é(—çKõ
+IÍ+ÈJ–šç2,oHn~È‘‘áˆÍÉÊÉÌsPBƒCŽŽ ôÜ!£ò²ú(Hr8I¸ /5#485oP’Ï–똜çóºtv´tdøBÃÝÁùR³³}iYùy¡ÔÁn_×;ýsr‡pfî°œŒÔ‚¬Ü_ZÈ1%5-;”ÐÍ1%=;5kp’/#upjלZ·[Âœ:w`w@ÿPN(/5;É—?$”žåV?få…Ò¼žŽïOd{ê¦çæ䇆sœ~µIxÄ€áêü/ÝÓÌ3?Ç1וS›WpR•Yù¡$_j^V¾;#™y¹Žºî|æfz+`˜ãOwòr at _wŽÜ¶ß®§—;Ì¥f;ó]5œ|J_gu…¦F*ãîچ͝8½c4qv&y«6q8K¸…³qm^Õ¡%ggy¬“8ÝêÛ¥ã¤ÄÑëÎêv˜(qôMŠ8'`µ{”ĪpÌ=L&G«½îP`y,Áy¾êp™æŒrw‘×Ë9+Ãeΰê“jž²¡p-VVE!“«¢qç0ñ…kœÖªè4 á* )Ï_.JÝáÐ¿*R]é°TtR¤ljg§o•Ëež&ÑŠâXU9˜î¹¯0Þ³6TˆûJ<áE±8ŽU•töaìE\;tú³¿òðÏÄA8ùþJ„ëâ ß_Œƒðoã 8ä=IÕµœq† µ.`Á'VòÕÆJø#V‰yø·ÅJ8±aÿV¬„ÿÁX	×ÅJ¾¿+áSâ‚¿+áß‹•|>VÂõb¥úÛ÷”pÉásçø§Â%á’ïo…Køu½¼ñŸ™pEÌ÷·C&ü†LB&ß_™ðé!“﯄LøŒ!“ï_	™pAêðÁs]µSü¥è×Yþw¢#\ùþNt„ëGG¾¿á3FG¾¿¹‹õ”r2ðÁ¿øøþ…ÀÿqàãûöŸSc‡ÿ; ‰×öïç
+¸³Stþ;¿3ØÅ»·›àüíâݝyÿª×Ùû÷ÕJ§íÔ-üãß0ì29:!Ú%êVS:W–Vvó/ý.'™øè³Ðht†?Ö
+ïw¢ID!1ˆEâ‘€0‘„d¤ iHG2‘… †è,ԝ£&¨)j†š£Ž"-Q+ÔµAmQ;tj: sQG”„:9öwA]Q7ï·>mDÝQ2êRÿöBç¡Þ¨ê‹úy÷ÜéÞ}t¦÷oYh äxl°÷/CÐP”ç}{v˜cø4rl9A ÑEh¬ã†;ÑÍè4=‚V¢OÑ´]Š®G·£õ‰– ·Ð<t%ú}‹–¢kÐ"´½‡¾FkÑFô=úE7¡»Ð³hºsæèrgîv;Ž~=‡^DÏ£=èt¹ÿ=—ÐËèg֏ +ÐkèU´Ï™ÛÏÑh±3)îÜ—£2gBÖ9îŸèÝÚV{·³“œ•ñ™³¦¡©h:š‰f ­èF4ÍBsÐÅè0úm#(‚&‚%8‚G¿¢ã„@`B$$t‚@„L(„J„Fè„A˜„E4 gˆ³‰ÆDtýH4%š͉„hI´"Zmˆ¶D;â¢=с8—èˆ~B¯ID'¢3Ñ…èJt#üD€°‰ ѝH&z)DOô:Hô"Î#z}ˆ¾D?"•H#Ò‰"Ddý‰DÚ„î%ƒˆlb0‘CäCˆ¡D‘~F¿ ÑGD1ŒNŒ F£ˆÑÄùÄââBâ"b,&Æ…D!Š‰¢”ˆ¢‡‰ñÄ¢Œ(G£Oˆ
+"FT‰*¢šˆ5Ä$b21…˜JL#¦3ˆ™Ä,b61m .&æóˆKˆùÄb!±ˆXL,!.%.#–ˈåÄåÄÄ
+âJâ*âjb%q
+±Š¸–XM\G¬!®'Ö7눉›ˆ›‰õÄ-ÄâVâ6âvb#qq'qq7q±‰¸—ØLÜGl!î' $¶Ûˆ‡‰íÄ#Ä£ÄcÄãÄÄ“Äâ)b'ñ4±‹x†x–xŽØM<Oì!^ ^$^"^&^!ö¯ûˆ×ˆ×‰7ˆ7‰·ˆ·‰wˆw‰÷ˆýÄûÄââ ñ!ññ1ñ	ñ)qˆøŒøœ8L|A|I|E!¾&¾!¾%¾#¾'Ž?Lj‰ŸˆŸ‰_ˆ_‰ãÄ	‘I’I“É’É“‰I‘”H™TH•ÔH4H“´ÈdCò,²y6Ù˜lB6%›‘ÍɤlI¶"[“mȶd;ò²=ف<—ìH&‘ÈÎd²+ٍô“Ò&ƒdw2™ìA¦=É^äydo²Ù—ìG¦’id:™A†ÈL²?9€Ì"’ƒÈlr0™Cæ’CÈ¡d™OÃÈáär$9ŠMžOŽ!/ /$/"Ç’arYH‘²˜,!KÉ(9žœ@–‘åd#+ɉdYMÆÉr9™œBN%§‘ÓÉäLr9›œC^LÎ%ç‘—óÉäBr¹˜\B^J^F.%—‘ËÉËÉ+Èä•äUäÕäJòry-¹š¼Ž\C^O®%o ב7’7‘7“ëÉ[È
+ä­ämäíäFòòNò.ònòry/¹™¼½[ÈûÉÈÉ­äCä6òar;ùù(ùù8ùù$¹½ÞAï¢÷Ñ›h?ù¹“|šÜE>C>K>Gî&Ÿ'÷//’/‘/“¯{ÉWÉ}äkäëää›ä[äÛä;ä»ä{ä~ò}ò ùyüüˆü˜ü„ü”<D~F~N&¿ ¿$¿"_“ߐߒߑߓGÉÈcääOäÏä/ä¯äqò…(‚")Š¢)†b)Žâ)Â”HI”L)”Ji”N”IYTª!uÕˆ:›jL5¡šRͨæTÊGµ¤ZQ­©6T[ªuÕžê@Ku¤’¨NTgªÕ•êFù© eSAª;•Lõ R¨žT/ê<ª7Õ‡êKõ£R©4*Ê BT&ÕŸ@eQ©AT65˜Ê¡r©!ÔP*Ê§
+¨aÔpj5’…n FSçSc¨¨©‹¨±T˜GRET„*¦J¨R*J§&PeT9UAÅÐuT%5‘ª¢ª©8UCM¢&SS¨©Ô4j:5ƒšIÍ¢fSs¨‹©¹Ô<êj>µ€ZH-¢SK¨K©Ë¨¥Ô2j9u9uµ‚º’ºŠºšZI]C­¢®¥VS×Qk¨ë©µÔ
+Ô:êFê&êfj=uµº•ººÚHÝAÝIÝEÝMÝCm¢î¥6S÷Q[¨û©¨©­ÔCÔ6êaj;õõ(õõ8õõ$µƒzŠÚI=Mí¢ž¡ž¥ž£vSÏS{¨¨©—¨—©W¨½Ô«Ô>ê5êuê
+êMê-êmêê]ê=j?õ>u€ú€:H}H}D}L}B}J¢>£>§S_P_R_QG¨¯©o¨o©ï¨ï©£ÔÔ1êGê'êgêêWê8u‚F4A“4EÓ4C³4Gó´@cZ¤%Z¦Z¥5Z§
+Ú¤-ºݐ>‹nDŸM7¦›ÐMéftsºí£[Ò­èÖtº-ÝŽ>‡nOw Ï¥;ÒIt'º3Ý…îJw£ýt€¶é ݝN¦{Ð)tOº}Ý›îC÷¥ûÑ©tNgÐ!:“îO ³èô :›Lçйôz(GçÓô0z8=‚I¢GÓçÓcèèé‹è±t˜GÒEt„.¦KèR:J§'Ðet9]AÇèJz"]EWÓqº†žDO¦§ÐSéiôtz=“žEϦçÐÓséyô%ô|z½^D/¦—ЗҗÑKéeôrúrú
+z}%}}5½’¾†^E_K¯¦¯£×Ð×ÓkéèuôôMôÍôzúz}+}};½‘¾ƒ¾“¾‹¾›¾‡ÞDßKo¦ï£·Ð÷ÓÐÒ[é‡èmôÃôvúúQú1úqú	úIzý½“~šÞE?C?K?G烈§÷Ð/Ð/Ò/Ñ/Ó¯Ð{éWé}ôkôëôô›ô[ôÛô;ô»ô{ô~ú}ú ý}þþˆþ˜þ„þ”>DFN¦¿ ¿¤¿¢Ð_ÓßÐßÒßÑßÓGéècôôOôÏô/ô¯ôqúƒ‚!Š¡†aŽáÁŒÈHŒÌ(ŒÊhŒÎŒÉXL¦!sÓˆ9›iÌ4aš2͘æLÆÇ´dZ1­™6L[¦sÓžéÀœËtd’˜NLg¦Ó•éÆø™ c3A¦;“Ìô`R˜žL/æ<¦7Ó‡éËôcR™4&É`BL&ÓŸÀd1™AL63˜Éar™!ÌP&Ég
+˜aÌpf3’ÅŒfÎgÆ0021c™03Ž)dŠ˜SÌ”0¥L”ÏL`ʘr¦‚‰1•ÌD¦Š©fâL
+3‰™ÌLa¦2Ó˜éÌf&3‹™ÍÌa.fæ2ó˜K˜ùÌf!³ˆYÌ,a.e.c–2˘åÌåÌÌ
+æJæ*æjf%s
+³Š¹–YÍ\Ǭa®gÖ270똙›˜›™õÌ-ÌæVæ6ævf#ss'ss7s³‰¹—ÙÌÜÇlaîg`d¶21Û˜‡™íÌ#Ì£ÌcÌãÌÌ“Ìæ)f'ó4³‹y†y–yŽÙÍ<Ïìa^`^d^b^f^aö2¯2û˜×˜×™7˜7™·˜·™w˜w™÷˜ýÌûÌææ ó!óó1ó	ó)sˆùŒùœ9Ì|Á|É|Åa¾f¾a¾e¾c¾gŽ2?0ǘ™Ÿ˜Ÿ™_˜_™ãÌ	±K²K³˲˳‹Y‘•X™UX•ÕX5X“µØlCö,¶{6Û˜mÂ6e›±ÍÙ¬mɶb[³mضl;ö¶=ہ=—íÈ&±ØÎl¶+ۍõ³Öfƒlw6™íÁ¦°=Ù^ìylo¶Û—íǦ²il:›Á†ØL¶?;€Íb²ƒØlv0›Ãæ²CØ¡l›Ï°ÃØáìv$;Š͞ώa/`/d/bDzav[ȱ¶˜-aKÙ(;žÀ–±ålc+Ù‰l[ÍÆÙv;™ÂNe§±ÓÙìLv;›Ã^ÌÎeç±—°óÙìBv»˜]Â^Ê^Æ.e—±ËÙËÙ+Øì•ìUìÕìJöv{-»š½Ž]Ã^Ï®eo`×±7²7±7³ëÙ[Ø
+ì­ìmìíìFööNö.önöv{/»™½ÝÂÞÏ>À>Èneb·±³ÛÙGØGÙÇØÇÙ'Ø'ÙìSìNöivûû,û»›}žÝþÀ¾È¾Ä¾Ì¾Âîe_e÷±¯±¯³o°o²o±o³ï°ï²ï±ûÙ÷ÙììAöCö#öcööSöûû9{˜ý‚ý’ýŠ=Â~Í~Ã~Ë~Ç~Ïe`±?²?±?³¿°¿²ÇÙâŽä(ŽæŽå8Žçs"'q2§p*§q:gp&gq
+¸†ÜY\#îl®1ׄkÊ5ãšs-8×’kŵæÚpm¹vÜ9\{®w.בKâ:q¹.\W®ççœÍ¹î\2׃Kázr½¸ó¸Þ\®/׏KåÒ¸t.ƒq™\n —Å
+äqÙÜ`.‡Ëå†pC¹<.Ÿ+à†qùÜHn7š;ŸÃ]À]È]čåÂÜ8®+â"\1W•rQn<7+ãʹ
+.ÆUr¹*®š‹s5Ü$n27…›ÊMã¦s3¸™Ü,n67‡»˜›ËÍã.áæs¸…Ü"n1·„»”»Œ[Ê-ã–s—sWp+¸+¹«¸«¹•Ü5Ü*îZn5w·†»ž[ËÝÀ­ãnänânæÖs·p¸[¹Û¸Û¹ÜܝÜ]ÜÝÜ=Ü&î^n3w·…»Ÿ{€{ÛÊ=Ämãæ¶sprqsOpOr;¸§¸ÜÓÜ.îîYî9n7÷<·‡{{‘{‰{™{…Û˽Êíã^ã^çÞàÞäÞâÞæÞáÞåÞãösïs¸¸ƒÜ‡ÜGÜÇÜ'ܧÜ!î3îsî0÷÷%÷w„ûšû†û–ûŽûž;ÊýÀã~ä~â~æ~á~åŽs'xÄ<ÉS<Í3<Ës<Ï<æE^âe^áU^ãuÞàMÞâð
+ù³øFüÙ|c¾	ß”oÆ7ç[ð>¾%ߊoÍ·áÛòíøsøö|þ\¾#ŸÄwâ;ó]ø®|7ÞÏx›òÝùd¾ŸÂ÷ä{ñçñ½ù>|_¾ŸÊ§ñé|â3ùþü >‹Èâ³ùÁ|ŸËá‡òy|>_Àã‡ó#ø‘ü(~4>?†¿€¿¿ˆˇùq|!_ÄGøb¾„/å£üx~_Æ—ó|Œ¯ä'òU|5çkøIüd~
+?•ŸÆOçgð3ùYül~1?—ŸÇ_ÂÏçðùEüb~	)¿”_Æ/ç/ç¯àWðWòWñWó+ùkøUüµüjþ:~
+=¿–¿_ÇßÈßÄß̯çoá7ð·ò·ñ·óù;ø;ù»ø»ù{øMü½üfþ>~?ÿ ÿ ¿•ˆßÆ?ÌoçáåãçŸàŸäwðOñ;ù§ù]ü3ü³üsünþy~ÿÿ"ÿÿ2ÿ
+¿—•ßǿƿοÁ¿É¿Å¿Í¿Ã¿Ë¿ÇïçßçððùùøùOøOùCügüçüaþþKþ+þÿ5ÿ
+ÿ-ÿÿ=”ÿ?ÆÿÈÿÄÿÌÿÂÿÊçOH R Z`Và^,ˆ‚$È‚"¨‚&è‚!˜‚%4
+g	„³…ÆB¡©ÐLh.´|BK¡•ÐZh#´Ú	çí…¹BG!Iè$tº]…n‚_¶ºÉB!Eè)ôÎz}„¾B?!UHÒ…!$d
+ý…B–0P$dƒ…!W"ò„|¡@&F#…QÂhá|aŒpp¡p‘0Vã„B¡HˆÅB‰P*D…ñ¡L(*„˜P)Lª„j!.Ô“„ÉÂaª0M˜.Ìf
+³„ÙÂába®0O¸D˜/,
+‹„ÅÂáRá2a©°LX.\.\!¬®®®V
+׫„k…ÕÂuÂáza­pƒ°N¸Q¸I¸YX/Ü"lnnn6
+ww
+w	w÷›„{…ÍÂ}Âá~ááAa«ð°MxXØ.<"<*<&<.<!<)ìžv
+O»„g„g…ç„ÝÂóÂááEá%áeáa¯ðª°OxMx]xCxSxKx[xGxWxOØ/¼/>
+
+	ŸŸ
+‡„τυ×ÂWÂákáá[á;á{á¨ðƒpLøQøIøYøEøU8.œÀ˜Ä¦1ƒYÌacKXÆ
+V±†ul`[¸nˆÏðÙ¸1n‚›âf¸9n}¸%n…[ã6¸-n‡ÏÁíq|.p'ÜwÁ]q7ìÇlã qœ‚{â^ø<Ü÷Á}q?œŠÓp:ÎÀ!œ‰ûã8ăp6Œsp.‚‡â<œð0<À#ñ(<ŸÇàð…ø"<‡ñ8\ˆ‹pã\Š£x<ž€Ëp9®À1\‰'â*\ã¸O“ñ<OÃÓñ<ϳñ|1ž‹çáKð|¼ /Ä‹ðb¼_Š/ÃKñ2¼_Ž¯À+ð•ø*|5^‰¯Á«ðµx5¾¯Á×ãµø¼߈oÂ7ãõø¼ߊo÷ãø|'¾ߍïÁ›ð½x3¾oÁ÷ãðƒx+~oÃãíøü(ÚŒîÏáÇñèô z
+?‰¶ ûÑN¼ÍEO¢…ø)¼?îÀ»ð3øYüލŸÇ{ÐÓøü"~	¿Œ_Á{ñ«xz=†_ïã7ð›ø-ü6~¿‹ßCÛñ~ü>>€?Àñ‡ø#ü1þŠáÏðçø0þ‰¿ÂGð×øü-þâð1ü#þ	ÿŒÁ¿âãø„ˆDB$EJ¤EFdENäEAÄ¢(J¢,*¢*j¢.¢)Zb±¡x–ØH<[l,6›ŠÍÄæbÑ'¶[‰­Å6b[±xŽØý vÏ;ŠIb'±³ØEì*výb@´Å Ø]L{ˆ)bO±—xžØ[ì#öû‰©bš˜.fˆ!1Sì/³Äâ 1[,戹âq¨˜'æ‹â0q¸8B)ŽG‹ç‹cÄÄŋıbX‡.Å"1"‹%b©Ç‹Ä2±\¬cb¥8Q¬«Å¸X#N'‹SÄ©â4qº8Cœ)Îg‹sċŹâ<ñq¾¸@\(.‹KÄKÅËÄ¥â2q¹x¹x…¸B¼R¼J¼Z\)^#®¯W‹×‰kÄëŵâ
+â:ñFñ&ñfq½x‹¸A¼U¼M¼]Ü(Þ!Þ)Þ%Þ-Þ#nï7‹÷‰[ÄûÅÄÅ­âCâ6ñaq»øˆø¨ø˜ø¸ø„ø¤¸C|JÜ)>-Ÿw‹Ï‹{ÄÄÅ—Ä—ÅWĽâ«â>ñ5ñuñ
+ñMñ-ñmññ]ñ=q¿ø¾x@ü@<(~(~$~,~"~*??‹_ˆ_Š_‰GįÅoÄoÅïÄïÅ£ââ1ñGñ'ñgññWñ¸xBB!‘%Ñ#±'ñ’ aI”$I–I•4I—É”,©ÔP:Kj$-5–šHM¥fRs©…ä“ZJ­¤ÖR©­ÔN:Gj/uÎ•:JIR'©³Ô­’ºJÝ$?ºM
+H¶”ºKÉR)Eê‰VK½Ðµè+é<©·ÔGê+õ“R¥4t‹”.eH!´BÊ”úK¤,i 4HÊ–K9R®4DŠÖHyR¾T 
+“†K#¤‘Ò(i´t¾4Fº@ºPºH+…¥qR¡T$E¤b©D*•¢Òxi‚T&•£[¥
+)&UJ¥*©ZŠK5Ò$i²4Eš*M“¦K3¤™Ò,i¶4GºXš+Í“.AË¥ùÒi!º
+]--’KK¤K¥Ë¤¥Ò2i¹t¹t…´BºRºJºZZ)]#­’®•VK×Ik¤ë¥µÒ
+Ò:éFé&éfi½t‹´AºUºMº]Ú(Ý!Ý)Ý%Ý-Ý#m’î•6K÷I[¤û¥¤¥­ÒCÒ6éai»ôˆô¨ô˜ô¸ô„ô¤´CzJÚ)=-í’ž‘ž•ž“vKÏK{¤¤¥—¤—¥W¤½Ò«Ò>é5éué
+éMé-éméé]é=i¿ô¾t@ú@:(}(}$},}"}*’>“>—K_H_J_IG¤¯¥o¤o¥ï¤ï¥£ÒÒ1éGé'égééWé¸tBF2!“2%Ó2#³2'ó² cY”%Y–Y•5Y—
+Ù”-¹ÜP>Kn$Ÿ-7–›ÈMåfrs¹…ì“[Ê­äÖr¹­ÜN>Gn/wÏ•;ÊIr'¹³ÜEî*w“ýr@¶å Ü]N–{È)rO¹—|žÜ[î#÷•ûÉ©ršœ.gÈ!9Sî/³äò 9[,çȹòy¨œ'çËò0y¸<B)’GËçËcääå‹ä±rX'ÊErD.–KäR9*—'Èer¹\!ÇäJy¢\%WËq¹Fž$O–§ÈSåiòty†<Sž%Ï–çÈËsåyò%ò|y¼P^$/–—È—Ê—ÉKåeòrùrù
+y…|¥|•|µ¼R¾F^%_+¯–¯“×È×ËkåäuòòMòÍòzùyƒ|«|›|»¼Q¾C¾S¾K¾[¾GÞ$ß+o–ï“·È÷ËÈÊ[å‡ämòÃòvùùQù1ùqù	ùIy‡ü”¼S~ZÞ%?#?+?'ï–Ÿ—÷È/È/Ê/É/˯È{åWå}òkòëòò›ò[òÛò;ò»ò{ò~ù}ù€ü|PþPþHþXþDþT>$&.–¿¿”¿’È_ËßÈßÊßÉßËGåäcòòOòÏò/ò¯òqù„‚B!J¡FaNáAÁŠ¨HŠ¬(ŠªhŠ®Š©XJ¥¡r–ÒH9[i¬4Qš*Í”æJŧ´TZ)­•6J[¥rŽÒ^é œ«tT’ÐCJ'¥³ÒEéªtSüJ@±• Ò]IVz()JO¥—ržÒ[é£ôUú)©Jš’®d(!%Sé¯P²”Ê %[¬ä(¹Êe¨’§ä+Ê0e¸2B©ŒRF+ç+c””•‹”±JX§*EJD)VJ”R%ªŒW&(eJ¹R¡Ä”Je¢R¥T+q¥F™¤LV¦(S•iÊte†2S™¥ÌVæ(+s•yÊ%Ê|e²PY¤,V–(—*—)K•eÊrårå
+e…r¥r•rµ²R¹FY¥\«¬V®SÖ(×+k•”uʍÊMÊÍÊzåeƒr«r›r»²Q¹C¹S¹K¹[¹G٤ܫlVîS¶(÷+(*[•‡”mÊÃÊvååQå1åqå	åIe‡ò”²SyZÙ¥<£<«<§ìVžWö(/(/*/)/+¯({•W•}ÊkÊëÊÊ›Ê[ÊÛÊ;Ê»Ê{Ê~å}å€òrPùPùHùXùDùT9¤|¦|®V¾P¾T¾RŽ(_+ß(ß*ß)ß+G•”cʏÊOÊÏÊ/ʯÊqå„ŠTB%UJ¥UFeUNåUAŪ¨Jª¬*ªªjª®ª©Zjµ¡z–ÚH=[m¬6Q›ªÍÔæjÕ§¶T[©­Õ6j[µzŽÚ^í ž«vT“ÔNjgµ‹ÚUí¦úÕ€j«Aµ»š¬öPSÔžj/õ<µ·ÚGí«öSSÕ45]ÍPCj¦Ú_ f©ÕAj¶:XÍQsÕ!êP5OÍWÔaêpu„:R¥ŽVÏWǨ¨ª©cÕ°:N-T‹ÔˆZ¬–¨¥jT¯NPËÔrµB©•êDµJ­Vãj:I¬NQ§ªÓÔéêu¦:K­ÎQ/VçªóÔKÔùêu¡ºH]¬.Q/U/S—ªËÔåêåêê
+õJõ*õju¥zºJ½V]­^§®Q¯Wת7¨ëÔÕ›Ô›Õõê-êõVõ6õvu£z‡z§z—z·zºI½WݬާnQïWPT·ª©ÛÔ‡Õíê#ê£êcêãêê“êõ)u§ú´ºK}F}V}NÝ­>¯îQ_P_T_R_V_Q÷ª¯ªûÔ×Ô×Õ7Ô7Õ·Ô·ÕwÔwÕ÷Ôýêûêõõ ú¡ú‘ú±ú‰ú©zHýLý\=¬~¡~©~¥Q¿V¿Q¿U¿S¿Wª?¨ÇÔÕŸÔŸÕ_Ô_Õãê	
+i„Fj”FkŒÆjœÆk‚†5Q“4YS4UÓ4]34S³´ZCí,­‘v¶ÖXk¢5Õši͵šOk©µÒZkm´¶Z;í­½ÖA;Wë¨%i´ÎZ­«ÖMókÍÖ‚Zw-Yë¡¥h=µ^ÚyZo­ÖW맥jiZº–¡…´L­¿6@ËÒjƒ´lm°–£åjC´¡Zž–¯hôáÚm¤6J­¯Ñ.Ð.Ô.ÒÆjamœV¨i­X+ÑJµ¨6^› •iåZ…Ó*µ‰Z•V­Åµm’6Y›¢MÕ¦iÓµÚLm–6[›£]¬ÍÕæi—hóµÚBm‘¶X[¢]ª]¦-Õ–i˵˵+´Ú•ÚUÚÕÚJím•v­¶Z»N[£]¯­ÕnÐÖi7j7i7këµ[´
+Ú­ÚmÚíÚFííNí.íním“v¯¶Y»Oۢݯ= =¨mÕÒ¶ikÛµG´GµÇ´Çµ'´'µÚSÚNíim—öŒö¬öœ¶[{^Û£½ ½¨½¤½¬½¢íÕ^Õöi¯i¯kohojoiokïhïjïiûµ÷µÚÚAíCí#ícííSíö™ö¹vXûBûRûJ;¢}­}£}«}§}¯Õ~ÐŽi?j?i?k¿h¿jǵ:Ò	Ô)ÖÕ9×ë¢.鲮誮éºnè¦né
+ô†úYz#ýl½±ÞDoª7Ó›ë-tŸÞRo¥·ÖÛèmõvú9z{½ƒ~®ÞQOÒ;éõ.zW½›î׺­õîz²ÞCOÑ{ê½ôóôÞz½¯ÞOOÕÓôt=Cé™z}€ž¥ÔéÙú`=GÏÕ‡èCõ<=_/ЇéÃõúH}”>Z?_£_ _¨_¤ÕÃú8½P/Ò#z±^¢—êQ}¼>A/ÓËõ
+=¦Wêõ*½Zë5ú$}²>EŸªOÓ§ë3ô™ú,}¶>G¿XŸ«ÏÓ/Ñçëô…ú"}±¾D¿T¿L_ª/Ó—ë—ëWè+ô+õ«ô«õ•ú5ú*ýZ}µ~¾F¿^_«ß ¯ÓoÔoÒoÖ×ë·èô[õÛôÛõúúú]úÝú=ú&ý^}³~Ÿ¾E¿_@Pߪ?¤oÓÖ·ëèêéëOèOê;ô§ôúÓú.ýýYý9}·þ¼¾GAQIYEß«¿ªïÓ_Ó_×ßÐßÔßÒßÖßÑßÕßC£'ôýúûúýý þ¡þ‘þ±þ‰þ©~HÿLÿ\?¬¡©¥ѿֿѿտӿ׏ê?èÇôõŸôŸõ_ô_õãú	„A”AŒÁœÁ‚
+ѐÙPÕÐÝ0Ó°ŒFCã,£‘q¶ÑØhb45š͍†Ïhi´2ZmŒ¶F;㣽ÑÁ8×èh$ŒÎF£«ÑÍðÃ6‚Fw#Ùèa¤=^ÆyFo£Ñ×èg¤iFº‘a„ŒL£¿1ÀÈ2ƒŒlc°‘cäCŒ¡Fž‘oÃŒáÆc¤1ÊmœoŒ1.0.4.2ÆacœQh£Ø(1J¨1Þ˜`”åF…3*‰F•Qmčc’1Ù˜bL5¦ӍÆLc–1Û˜c\lÌ5æ—óÆBc‘±ØXb\j\f,5–ˍˍ+ŒÆ•ÆUÆÕÆJãc•q­±Ú¸ÎXc\o¬5n0Ö777ë[Œ
+Æ­ÆmÆíÆFããNã.ãnãc“q¯±Ù¸ÏØbÜo<`<hl52¶ۍGŒGÇŒÇ'Œ'ÆSÆNãic—ñŒñ¬ñœ±ÛxÞØc¼`¼h¼d¼l¼bì5^5ö¯¯ooooïïïû÷ÆÆAãCã#ãcããSãñ™ñ¹qØøÂøÒøÊ8b|m|c|k|g|o5~0Ž???¿¿Ǎ&2	“4)“6“59“7›¢)™²©˜ª©™ºi˜¦i™
+̆æYf#ól³±ÙÄlj63››-LŸÙÒle¶6Û˜mÍvæ9f{³ƒy®ÙÑL2;™Í.fW³›é7¦mÍîf²ÙÃL1{š½ÌóÌÞf³¯ÙÏL5ÓÌt3Ã™™fs€™e4™Ùæ`3ÇÌ5‡˜CÍ<3ß,0‡™ÃÍæHs”9Ú<ßc^`^h^dŽ5Ãæ8³Ð,2#f±Yb–šQs¼9Á,3ËÍ
+3fVšÍ*³ÚŒ›5æ$s²9ÅœjN3§›3Ì™æ,s¶9Ǽ؜kÎ3/1ç›Ì…æ"s±¹Ä¼Ô¼Ì\j.3—›—›W˜+Ì+Í«Ì«Í•æ5æ*óZsµy¹Æ¼Þ\kÞ`®3o4o2o6×›·˜Ì[ÍÛÌÛ͍æææ]æÝæ=æ&ó^s³yŸ¹Å¼ß|À|ÐÜj>dn36·›˜š™›O˜Oš;̧̝æÓæ.óóYó9s·ù¼¹Ç|Á|Ñ|É|Ù|ÅÜk¾jî3_3_7ß0ß4ß2ß6ß1ß5ß3÷›ï›Ì̃æ‡æGæÇæ'æ§æ!ó3ósó°ù…ù¥ù•yÄüÚüÆüÖüÎüÞ<jþ`342615›',diQm1kqo	¶DK²dK±TK³tË°L˲X
+­³¬FÖÙVc«‰ÕÔjf5·ZX>«¥ÕÊjmµ±ÚZí¬s¬öVë\«£•du²:[]¬®V7Ëo,Û
+ZÝ­d«‡•bõ´zYçY½­>V_«Ÿ•j¥YéV†²2­þÖ +Ëh
+²²­ÁVŽ•k
+±†ZyV¾U`
+³†[#¬‘Ö(k´u¾5ƺÀºÐºÈk…­qV¡UdE¬b«Ä*µ¢Öxk‚Uf•[V̪´&ZUVµ·j¬IÖdkŠ5ÕšfM·fX3­YÖlkŽu±5ךg]bÍ·X­EÖbk‰u©u™µÔZf-·.·®°VÕÅñÒ©•¥‘
+.µ<\X«à‰’MW™aÃ^Á¥ÆJb‘	\8QŠé…Ѫšòâ²È±°®ŽÓ‹bñpaa¤"ŽOVٌ°+²(Qd8òÃq.€ % #^Cu‚"'«\Ôˆ$J6”ñ
+±=¥Jê)Õ¿NVÉɪԿ0V^†‡’zâ€zrJëêô€qá*ºÔù`³âѲ¢õ
+.,‰‚%Y	K¢	×eÎÑDIf
+$£ãŁõ0Æ×Õ¥AõµšpÊCIU$RQ®(Š²Ùášx„-ó
+)»~¿²zlvÂAe^Ag;ÖÓeΛ“_‘ŸS|Eýñ9‰ñ	W„Ýÿ;®ª˜³`¨PE	©(árÁøŸ›0>ærniMEI¸ª¦¼,\—cõŸØ¼„U	òêëPU_‡¼„U‰"?1ªÚ+Äüzn¬®çÆ‚úÒâõ¥$ÄÄ)p§4îNé°Ä”Ö$¦tXUV
+KXUãÌ°ªhE	Sã~ÊÃN±°¦þ7¦¾v͈zÚN®WU¯>µ®ÎŽNØ:Í+ðèºe<íd•)‹U”Ts5Ñ®Ýzt…²”~(PÚP¡ìe2”= L2Ê4(Ó¡Ì€2ef¢LüÀOÜÀMÜÀMÜÀMÜÀMÜÀMÜÀMÉdrKcULÌýL´¥‚Í©€
+Ø©€
+Ø©€
+Ø©€
+Ø©€
+Ø©€b†y˜5u˜i`o`§v`§v`§v`§v`§v`§v؝þN§~:à§~:à§~:à§~:à§~:à§~:à§~:à§~àg ~àg ~àg ~àg ~àg ~àg ~àg ~àg ~ðC€üà‡ ?dû'v}‰W at + ‡ =è!@zÐC€ôL@ÏôL@ÏôL@Ïë3ÁúL°>ð3Spª{’$6yød•K
+%Êp$qÖåV—…«KõX]Ý“âïÚÊnPú¡@iC„²;”ÉPö€2ÊT(Ó L‡2Ê”	oø»~7ÀïøÝ ¿àwün€ß-YʯVW×{€ I7ФhÒ
+4éštMü ‰4ñƒ&~ÐÄšøA?hâOøÁ~ð„ðý€ï|?àûßøÀ ~ ð€ ü àºóÎi^©®
+ @ €P  
+@ ( lPÀlPÀlPÀlp€
+°ß|ðmÀ·ß|ðmÀ~ðƒ€ü à?øAÀ~ðƒ€ü à?øAÀïøÝ¿;àwüî€ßð»~wÀïøÝ¿;àwüî€ßð»~wÀOüdÀOüdÀOüdÀOüdÀOüdÀOüdÀOüdÀOüdÀ‡0Àa€ ?„~üø!ðCà‡0Àa€ ?„~üø!ðCà‡0Àa€?ð!ðC8à‡pÀá€Â?„~üø!ðC8à‡pÀá€?ðS?ð!$ðCHà‡À!B?„~	üø!$ðCHà‡À!?ðS?
+ð!,ðCXà‡°ÀaÂ?„~üø!,ðCXà‡°ÀaÂ?„~üø!,ðCXà‡°ÀaÂ?„~üø!ðCà‡0Àa€ ?„~üø!ðCà‡0Àa€ ?кhÝ´îZ÷­ûÖý@ëþȁ¼Èb÷±ûÈý@ä~ r?µ?3Y(©
+Ork{œàQª[óÞºú/!¨×bC„²;”ÉPöKc±	Þ/öו
+e”éPf@‚2რÐi è4 t :
+ €N@§n E·P¦@	ø@¢ Ñ h H4 $ 
+ ‰ü~É!)ï?0Vg0i ˜4 L &
+ “€IÀ¤`Ò 0i ˜4 L &
+ “€IÀ¤`Ò 0i ˜4 ü à‘€H@¤ Ò i ˆ4 D "
+ ‘€H@¤ Ò i ˆ4 D "
+ ‘€H@¤ Ò i ˆ4 D "
+ €@@  Ê e 1 „ B !€@ˆ Ä Q ˆ( D ¢	 Ñ€hÉ!&«ˆUËEÑHU¤:Zí=áÔ²ÊÒ°W±x¤,
+K¡ÊꨓšzÍ|(ï³bP“rË£nbxV¯3Î-”$:éQ§û)XŒ‡E§Eâa¦Ø	Š9Œxôhçåà1¥Nv™AáÊÊ0›.W&א95äÈ(C¢T^iŒÉ–”‡©‚p
+ÚPCJ£TºówHuTʪ§‰
+jŸqø¤¤H}³#µfGkͶjNš0ÊOs*qbŠ"eñ0²èi®Iî˸g’+Œ™à™Tæ™”ðAZ:YQCN‰r±„]TUiŒ­vêÆxwl|ªÒ±«Ðùë<21×áR}_«§©)ÅêÏVMýÙŠœ­„]YOÍn<x	֐A æìn¬7®ö¬gȐ @>€|0 ù` ˆ# Ä â q€8@ Ž G ˆ# Ä â q #@F "	 ‘€H #@F€Œ0 D€Œ0 a 2 d„È™€Ÿ	ø™€Ÿ	ø™€Ÿ	ø™	|r@r@r@r@¨Ë겁ºl .r@r@HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -2?2?øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+?xËÞ²·lHülHülHülà3ø̆ÄφÄφÄÏž³çlà9xΞ³çlà9?????????????????øÖ¾µ!ñ³!ñ³!ñ³!ñ³màcøØ>¶!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³á؆{`@@@@@@@@@@@8߆ІІÐÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞï÷ƒÀûAàý ð~x?¼Þï÷ƒÀûAàý ð~x?¼Þï÷ƒÀûAàý ðaø0¨m½€ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aà¿ ð_ø/üþÿÿ‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼ÞÂ…gx/¼„ó<çyÎó œçA8σpžá<Ây„ó<çy0­V.ØçyÎó œçA8σpžá<Ây„ó<çwÎï œ¿A8ƒpþáü
+Âù„ó7ço0£vüÿkï\€äÊêóÞ=gz¤yH+i¥…e_ì.bW<´óÿwß{NÃÚ«Û}Ο—M‹Í#µ&#ÍHiÄh´!klÖ€±Ád0&~$¶!øv½‰óðƘøÇ—Ä±1K°“¯;béÍí9¿–.•"§R®uIÿ¾=§ïwîíÓßwîwu¾¡¿ðoÿðoÿðoÿðoÿðoÿðoÿðoÿðoÿðoÿðj¯ðj¯ðj	?•\W”\/”\”\”\”\”\”\”\”\”\”\”\”\”\”\”\”\”\”ð_	ÿ•ð_	ÿ•ð_	ÿ•ð_	ÿ•ð_	ÿ•ðZ	¯•ðZ	¯•ðZ	¯•ðZ	¯•ðZ	¯•½É~9.x­„×Jx­„×Jx­„×Jx­„×Jx­„×Jx¬d~^ÂS%<UÂS%<UÂS%<UÂS%<UÂSe9Ù/ý†§Jxª„§Jxª„‡Jx¦„gJx¦„gJx¦„gJx¦„gJx¦„gJx¦„gJx¦„gJx¦d~\2?.™—ÌKæ¯%óÕ’yjɼ´d¾YÂ;%¼RÂ%¼P2_+™§•|ïK¾O%ߧ’ïSÉ÷©œ|ŸlÒžý1O)™§”ÌS<<åá)OyxÊ3ïôÌ;=ýóð–gÞ釓ýUÔuHÔDÍÇëá=ïyxÏÃ{Þó¿‡÷<¼çá=ïyxÏÃ{Þóðž‡÷<¼çá=ïyxÏÃ{Þóðž‡÷<¼ç™_zæ—žù¥g~é™_z>7ÏçæùÜ<Ÿ›çsó|nžÏÉO>'擉yQbü&ÆobÜ&Æiâz0¡‡‰ë¾Äu\bÜ&®ã×q‰ë·Äõ[âú-qý–ú“ý$*ýaÜ'®Û×m‰ëµÄuZâº,q]–¸K\%¾	ýNèwB¿úÐïÄ÷(¡ß	ýNèwB¿ºÐí„n'Æbü'Æbü'ÆbÜ'Æ{b¼'Æ{b¼'Æ{b¼'Æwb|'Æwb|'Æwb|'Æwb|'Æwb|'ÆsÊãYóus]…ªÔ.µG-¨%ÕSµO­¨ê:ÁKTËu þ üøðàÀ€?  þ üøðàÀ€? þü!øCð‡àÁ´´´´´“öô7ÒßH#ýô7ÒßH'ŸO¤¿‘þ&ðø	ü~?ŸÀOà'ðø	ü~?ŸÀOàø¾oàø¾oàø¾oàçë\Á¿ükÁ¿ükÁ¿ükÁ¿|kÁ·|kÁ·|kÁ·|kÁ·|kÁ·|kÁ·|kÁ·|kÁ·|kÁ·|kÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯|jÁ§|jÁ§|jÁ§|jÁ§|jÁ§|jÁ§|jÁ§|jÁ§|jÁ§|jÁ§üiÁŸüiÁŸüiÁŸüiÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—®+øü ~ ?€Ààðø}ðûà÷Áïƒß¿~ü>ø}ðûà÷Áïƒß¿~ü>øè,þ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG>´àC>´àC>´àC>´àC>´àC>´àC>´àC>´àCKo¢Ï¾Ÿ}hÁ‡|hÁ‡|hÁ‡|hÁ‡|hÁG|dÁG|äºò~t¸@‡™¼?PûÔŠ: ©‘š¨ô=.Ðã=.Ðã=.Ðã=.Ðã=.Ðã=.Ðã=.Ðã=.Ðã=Æ/ürÁ/ürÁ/ürÁ/ürÁ/ürÁ/ürÁ/ürÁ'|rÁ'|rÁ'|rÁ'|rÁ'|rÁ'|rÁ'|rÁ'|rÁ'üqÁüqÁüñº‚‹.ã—~¹à—~¹à—~¹à—K.㛾¹à›¾¹à›¾¹à›¾¹à›¾¹àw~·àw~·àw~·àw~·àw~·àw~·àw~·àw~·àw~·àkוý£—zY —zY —zY —zY —zY —:W s:W s:W sE5yç+й+й+й+Ð9|iÁ‡|OÁ÷ü@Á”’yQɼ¨d^T2/Â/¬kAeœ|@Á|@Á|@Á|ÀºjŸZQÔ!5Ré7ŸOÉ烟(ø‰uŸÏ±®à3ŸÁo¬+øÌgJæ3%ó™ŸGø<Âç>ðy„Ï#|áó˜ï+ÖµO­¨ê'R5gD"zуˆDô ¢ˆè@D":сˆDt ¢ˆè@D":сïGx?Âûޏð~„÷#¼áýïGø>Â÷¾ð}„ï#|áûßGø>Â÷¾ð}„ï#|»\Žޏð~„÷#¼áýïG¾O‘ïS„÷#¼áýïGx?Âûޏð~„÷#×cþð„ÿ#üáÿÿGø?Âÿþð„÷#¼áýïGx?Âûޏð~„÷#¼áýïGx?Âû~ð{„Ï#<ù~ÅÉ÷‹ë…ÈõBäz!£ðh„G#<áяFx4£ðh„G#<áяFx4r½¹^ˆ\/D®"בë…ÈõBäz!r½¹^ˆ\/D®"ב녈/ñå"בëƒÈõAäú r}¹>HðT‚§<•à©O%x*ÁS	žJðTZœì¯¢¨Cj¤&jîo‚§<•à©O%x*1oMðU‚¯|•à«_%ø*ÁW	¾JðU‚¯|•à«_%ø*1oMÌ[ü•à¯%ø+Á_	þJðW‚¿ü•˜·&x,Ác	KðX‚Ç<–౏%x,Ác	KðX‚Ç<–à1îgH‚Ç<–౏%x,Ác	KðX‚Ç<–౏%x,Ác	KðX‚Ç<–౏%x,Ác	KðX‚Ç<–౏%æ±	>KðY‚Ï|–೟%ø,Ág	>KðY‚Ï|–೟%ü¥„¿”ð—ó¨Ä<*1JÌ£ó¨Ä<*1JÌ£ó¨_&ø21Ṅü™˜'æÉùpò6óÒ­•;3÷äòÒ¼^þž­2ûÒÉ_Ÿ½gò,¿ù÷»„û]uŸùXb>–˜q¬®à3KÌÇó±Ä|,1ã¾™pßL¸o&Ü7«+øÌǸ&Ü?“„pŸL¸O&Ü'«+ûGzÀ}³º²ô€ûhÂ}´ºr|è÷Ó„ûiÂý4á~šp?M¸Ÿ&ÜOî§	÷Ó„ûiÂý4á~Z]ÁG¸¯&ÜW«+øè÷Ù„ûlÂ}6á>›pŸ­®à£	½à¾›¤‰^à'qßM¸ï&Üw«+øøI܇îÃ	÷á„ûpÂ}8á>œpN¸'܇îÃÕ|ü$îËÉä¾\â:&á'%ü¤ÄuMÂOJøI	?)á'%ü¤„Ÿ”ð“~RÂOJÜ÷IøJ	_)á+%|¥„¯”Lf^ž¿h¯Û*¼
+:®RÂUJ¸J	W)á*jm¨µ¡Ö†Zjm¨µ¡Ö†Zjm‹“ýUÔuHÔDÍGc¨µ¡Ö†Zjm¨µ¡Ö†:êl¨³¡Î†:êl¨±¡Æ†jl¨±¡Æ†jl¨±¡Æ†jl¨±éãC
+56ÔØPcC
+56ÔØPcC
+56ÔØPcC
+56ÔØPcC
+56ÔØPcC
+56ÔØP_C}
+õ5Ô×P_C}
+µ5ÔÖP[Cm
+µ5ÔÖP[Cm
+•5ÔÕŠÉ~é?jj¨©¡¦†šjj¨©¡¦†šjj¨©¡¦†šjj¨©¡¦†šjj¨©¡¦†šjj¨©¡¦†šjj¨©¡¦†šjj¨©áfn†áfn†áfW1†zêi¨§¡ž†zêi¨§…	Ç‹zêi¨§¡ž†zêi¨§¡ž†zêi¨§¡ž†zW[ÆÕ–qµe\mêj¨«¡®†ºêj¨«¡®†ºêj¨«¡®†ºêj¨«¡®†ºêj¨«¡®†ºêj¨ª¡ª†ªªj¨ª¡ª†ªªj¨ª¡ª†ªªj¨ª¡ª†ªjj¨©¡¦†šjj¨©¡¦†šjj¨©¡¦†šjj¨©¡ž†zêi¨§¡ž†zªi¨¦¡š†jªi¨¦¡š†jªi¨¦¡š†jªi¨¦¡š†jªi¨¦¡šÆÝãî‹¡“†>úhè£Mô‘».Æ]㮋q×Åò]]Ì:ZW¡*µKíQjIõÔ@íS+ê€:¤Fê×rðE掯ž8·±²¼tö$/)å®­ßL~öØzýã£k»^sn}ü»ãï®_ZY¦
+»ÓîîõÓ㨷•Ók+Kõ›voÞ³ÞؤW:«tVé¬ÒY¥³ÊÞ»2sjõôVpØʱõÓ`w9E]úÛåuAérŠºƒÙ•×[[:U¯€Ó§N“ÒãCéñ¡ôøPz õ@êÔ©Ç‡Ñãøz_ãëÛ·nnnnnÁ‘ààààààààààà—à—à—à—à—ì¯d%û+Ù_ÉþJöçÙŸgžþ{úï鿧ÿžþ{úïÁóàyð<x<^ /€è ÿü ~ ?€Ààðøü ~ ¿nÜ>¸}pûàV‹»Ž­¯­Ÿ>UG6—6^Ç«:½¶º±Ä]«Ê™3+gëVlÒ³ŠžUÕôòúéÓéÜÆ:¯Ð§Š>Uœ“}з}з} ii9G‘s9‘s‘‰Y"“ÅɶR»Ôµ –TO
+Ô>u@R#5Qóñ‰,î|Þñ¥WožÛà€`:Xüü=+«5‡mn,=Ëk€ç«ƒºv¾øËwÎl¬œ=¶±zfü+Ûy‘®(§@9J”(=Pz 
+Šrè
+:´(Т@‹¢qvåìæê©¥MhW Fé‚ܹË9èÒƒn¯³´¶ræ$[àCAJü.ø]ð»àC—]
+t)Ð¥@—]
+t)=ŽÚhS M6ÚèRziçø‹rrucy¶–‘­'|P0 À€
+(0 Õl½‹•Õ'7O.lžÜXáùÙùã«wOž/œ­µì4¼CƒFQ`D)9´’þ”ô§¤?%ý)é*0¨À ƒ
+*0¨À ƒŠ߃£
+Œ*0ªÀ¨£
+Œ*0ªÀ¨£
+Œ*0ªÀ¨„Q*a”J¥FY×ÞìÒÆÆú=k+Ç7wl=;wfn«nŒOgþáòú=§ó³£õ‡8K³e¾=}ºÜ§Ë}ºÜ§Ë}ºÜ§Ë}ºÜ§Ë}ºÜ§Ë]®èrE—+º\qÊ`Z²$ëê.õìèÙ^¤¨èDE'`]uÖX—PI%TR	•¬ko÷±muéD=‘ªÙ…s1 /ÎÅ€s1 º1 º1 º1 Cº1¤Cº1¤CÎŐs1þü!øCð‡àÁ‚?hù\Ö3­ñȘ›lœ;³kòtk|\j5"—6Æ£$ï'Ò/DˆÌI%sRÉœT2'•ÌI%sRÉœT2'•ÌI%sRe"^‰ó’8/‰ó’ÀOà'ðø	ü~?ŸÀOà'ð
+|ßÀ7ð
+|ßÀ7ð
+|ßÀ7ð
+|Ÿ«ú²c¶®ã‰ûRž×3÷ù•×®ž­'蛫—^ëí\9ufóuõôc牍qžÌéÍ+k+§Æ¡µ9èÁŽuãjçÙsÇjæ\š¼0¤FjÆ&[RÉ’T²$•,ɺ–Ku?6VϾºV¸“¼¨}ê€:¬uxýÌúÆX…—Öæê''Çñ¼Kk¥Ó'Öò·—ðH%<R	TÂ#•ðȺ–skë'V-s™gyº¾±°zzs|slÒ©["ø„G*á‘Jx¤©„G*á‘Jxd]»³›'ë/üñúBŠWè’¬H2é‘Jz¤’©ãôȳ«§V×–6ئH2é‘Jz¤’©¤G*é‘uíÍÖP'6Î]úeò#•ÜH%7RɍTr#•ÜH%7RɍTr#•ÜH%7RɍTr#•ÜH%7RɍTr#•ÜH%7RɍTr#•ÜH%7²®6¿òšs«w×óœÓÇ8»¨5™‘JF¤’©dD*‘JF¤’©dD*‘JF¤’©dD*‘JF¤’©dD*‘JF¤’©dD*‘JF¤’©dD*‘JF¤’©dDÖU¶¾
+õX=W+×æîÉÆøŸ•ÍÙú+›@ëb¡‚k+¯¥õd#·¦
+=ãJˆôH%=RITÒ#•ôH%=RITÒ#•ôH%=²®½¹qBv='];w–—ÊÝù¥SçÖ6WϬ½Ž—é	Ór$•I%GRÉ‘Tr$•I%GRÉ‘Tr$•ɺövÕ~feÈ~îÒ÷ŠIi’Jš¤’&©¤I*i’Jš¤’&©¤I*i’Jz¤’©¤G*é‘Jz¤’©¤G*é‘Jz¤’©¤G*é‘Jz¤’©¤G*é‘Jz¤’©ãôÈåõÍË<‹ð“"©¤H*)’JŠ¤’"©¤H*)J
+d]y?¬³"ÌŠ0kœ¼Ÿ~#̤F*©‘Jj¤’©¤FÖ•ó†0“©¤F*©‘ua&ERI‘TR$ë
+>¬³"̤LÖ|„YfE˜aV„YfE˜aV„YfÍÿùºŽEªtN®ŸcÚåšÔJ%µRI­TR+ë¨}jEP‡ÔHMTÛµ±r7ºW³E~5ßZSR(•J%uRITR'ëjscÁ¬gk›g.==ÊÞÐ\b&•˜I%fR‰™Tb%•XÉZ9v¸”˜C%æP‰5¬“ýàµtá‡.üÐ…ºðC~èÂ]ø¡?tá‡.—].º0CfèÂ]˜¡3ta†.ÌÐ…º0Cw8©ôƒÞed³ŒLYF¦,?R–)ˏ”åGÊò#eù‘²üHY~¤,?ªkç&‹‹ç¹X”ñÒx¡KíQjIõÔ@íS+ê Þábs‡‘š¨6nн܀‘ÆRºvÇ
+´Ñ€.àÝâÇ
+zô㦐­>„FúÀ`eµ€²Z at Y- ¬¨ëVú—wÀ¸e¹€²\@Y. ,P–Ôu«ecô€É"ë”õÊze½@]·zà/"”Ê‚eÁ€²` ®[=(; LIØQV(+”•ÊÊe倲r at Y9 ¬PV(+”•ÊÊe倲r at Y9P×ñ8èmƒú‰öxRÈä‰ò¤ÛŸ´™¼¢“6ZL/ò¤7iÜ
+“6—žøÉ“rÒæғɏz¹:Ù³NºÚ»Ôx²çÞ¤?½Iz“=÷&o/.à¥ý4F0sLby”X%–G‰åQby”Xe™‚²LAY¦ ,SP–)(Ë”e
+Ê2e™‚²LAY¦ [ËÎ][?ö꼍Ä2/SX>Ýü9øxêEðæOAg9^Ä°v¼ùsЙGŽ1ll柯mž=¹´¼ÒÙúwÇò«sÝj׳„AYÂPWŽ¹cÁܱ`îX 
+ÚP 
+ÚPômöøêÚÚÊòÑõ×Î<·t““8°BY¡¬…PÖB(k!”µuíÏ<WBý…Ú*Åø^Ûx÷õ¥%
+èêÀb%ÄHÇ!F›c·èܶé óHBŒ”#%ÄH	1ÒqˆÑÖû7À«ç‘[Û˜p„)!FJˆ‘b¤„)!F:1ÚzÿÚq¶ÁgI¨Q]ÁögòäžMN<ÓÈb˜¶Nv5QHJ’…¤D!)QHJ’…TW?»zúî£çês»9~Ö„d&J’‡¤Ä!)ËN”8$%IY†¢Ä!)qHJR]‹¹úbëtå%žÉ(‰HJ"R]é“Ñ‚ÉhÁd´`2Jr’’œ¤$')ÉIJrR]9
+LF&£“Ñ‚ÉhÁd´`2Z0-˜ŒLF&£%ÔTrK§ä–NÉ¡d‚P2A(™ ”LJ&%„’	BÉt”ħºFj¢‚cT2=(™”8H%‰Qu_ÀgâZ29(™,UWð™”Ì
+HœÒ’¹ÉSJò”’<¥$O)ÉSJò”’<¥$O)ÉSJò”’<¥$O)ÉSJò”’<¥$O)ÉSJò”’<¥$O)ÉSJò”’<¥$OÕµ?{öÔêÚÊñ¥c+õ×âÒ†;{î4MèSƒ²k3ÇWN-ñå){2ÝØ žiUÊB-e¡–P¥T)UJ@•P¥T)UJ@•P¥T)UJ@•P¥TÕ|œ¤'©ÄI"Àª®àã$•8I%NRYXç왉ÆsUW>¶vî(½ÎÉ•¥šL—W—NMþ#	WJÂU]ûó§Îåšjewãùä v¥„])‹Û”ÅmÊâ6eq›²¸MYܦ,nS·)‹ÛêJWP²”°,%,K	ËR²”°,%,KY$§,’SÉ)‹ä”ErÊ"9e‘œ²HNY$§,’SÉ)‹ä”ErÊ"9e‘œ²HNY$§,’SÉ)‹ä”ErÊ"9e‘œ²HNY$§,’SÉ)‹ä”ErZrHxW]ÁAè	óª+8}‰Ð—=!_u‡«À²šàpœè<a`Z¢ó%÷‹Jü"õúÅÉv—Ú£–TO
+Ô>uHÔD͸ŠõP¬‡b=ë¡XÅz(ÖC±ŠõP¬‡b=ë¡XÅz(ÖC±ŠõP¬‡b=ë¡XÅz(ÖC±jõP«‡Z=Ôê¡Vµz¨ÕC­jõP«‡Z=Ôê¡Vµz¨ÕC­žk.Ï5—疹疹‡W=¼ê¹äò\ry.¹<—\nõp«‡[=ÜêáV·z¸Õínõpª‡K=\êáR—z8ÓÕ®ôp¥‡+=\éáJWzØÑãFx܏áq#<n„‡"=éqÞ=λÇy÷ð¢‡}9ÁãxàE/zxÑË^ôð¢‡=¼èáE/zxÑË^ôð¢‡=¼èáE/zxÑË^ôð¢‡=¼èáE/zxÑË^ôð¢‡=¼èáE/zxÑË^ôðŸ‡ÿ<üçá?ÿy®€<W@wÌË^ôð¢‡=¼èáE/zxÑË^ôð¢‡=¼èáE/zxÑÇ~‡\÷x®{<×=žëÏuçºÇãŸ{üsîñÏ=×=žë •?%䯮쏩¼g*OøŸû)á~J¸ŸûÕ•ý3U'ìO	ûSÂþê:Ù?ýeªî™ª{¦ê©z@/zЋ€^¦êÝèF at 7º˜ª¦ê	èH at G:Б€Žt$ #	èH at G:Б€Žt$ #	èH at G:Б€Žt$ #	èH at G:˜ªô$ '=	èI at OzГ€žô$ '=	èI at OzГ€žô$ '=	èI at OzГ€žô$ '=	èI at OzГ€žô$ '=	ÌÕº˜«ô% /}	èK`®˜«æêÝ	ÌÕúП€þô' ?ý	èOàÿiÜñ€ô( G=
+èQ@zУ€ô( G=
+èQ@zУ€ô( G=
+èQ@zУ€ô( G=
+èQ@zУ€ô( G=
+èQ@zУ€ô( G=
+èQ@zУ€ô( G=
+ÌÓóôÀ<= S
+èT@§:Щ€Nt* S
+èT@§:Щ€Nt* S
+èT@§:Щ€Nt*0èU@¯zЫ€^ô* W½
+èU@¯zЫ€^ô*àÓ|º€Oðé÷{ÿÑ+àÓ|º€Oðé÷}÷}÷}†]À°ܽ
+ܽ
+8vÇ.àØ»€cpìŽ]à¾qà¾qà¾qÀ­¸u·.àÖܺ€[Ðí€[pën]À­Ü]è{@ßúÐ÷€¾ô=`Õ¬º€U°êúÐÿ€þô? ÿýè@ÿúÐÿ€þô? ÿýè@ÿûèy=ï£ß}ô»>ôч>¼Ð‡ú|ž}>Ï>ŸgŸÏ³ÏçÙçóìóyöù<ûœ§>ýîÓïŠyIż¤b^R1Ÿ¨˜OTÌ'*æó‰ŠùDÅ|¢b>Q1Ÿ¨˜OTÌ'*æó‰ŠùDÅ|¢b>Q1Ÿ¨Ðï
+^­àÕ
+^­àÕ
+^­àÕŠóWqþ*xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+ø®‚ï*ø®‚ï*ø®‚ï*ø®‚ï*ø®‚ï*ø®‚ï*ø®büWŒ£ãgÀø0~ÌkÌkÌk||ÌkÌk‹“ý¨Cj¤&j>ÎãpÀ80ŒÃãpÀ80ŒÃãpÀ80ÌWÌWÌWÌW‡Ìg†Ìg†Ìg†åäç=jA-©ž¨}jEPóq™—™—™—™—n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸Q]Ág^KÈ‘r¤„)!GJÈ‘r¤„)!GuÝz_/æù@]…ªÔ.µG-¨%ÕSµO­¨ê©‰
+~?‚ÁàGð#øü~?‚ÁàGð#øü~?ŸÀOà'ðø	ü~?ŸÀOà'ðø	ü¾oàø¾oàø¾oàø¾oàøy>`ü¯cY©iæAã·«[™?wƒ_
+>5øÔàSƒO
+¾3øÎà;ƒï¾«k¤&jƃï¾3øÎ໺²_e¿Ê~•ýæëóºö©u@RÁWðü.ø]ð»àwÁï‚ß¿~Ü.¸]p»àvÁí‚קNý÷؏ýö8®ûï±ÿûï±ÿûïq\½	ÇUp88ÇQ€W€W€W€W€W€W€W€W€Ç¸”_Éñ•à—à—à—à—à—à—à—à—à—à—à—à—à—à{ð=ø|¾߃ïÁ÷à{ð=ø|¾߃ïÁ÷àðø÷Þxàý÷Þßçý}Þߧÿ}úߧÿ}úßçý}Þéw7q<‰×
+|ßx?¼@Èš²f„¬!kFÈš²f„¬!kFÈš²f„¬!kFÈš²f„¬!kFÈ™rf„œ!gF•Be„P!TF•>e„OáSFø”>e„OáSFø”>UWúÅçÊ/U1~©J]Á
+àÎK ?€Àà3.Ÿ2§Œð)#|ÊŸ2§Œð)#|ÊŸ2§Œð)#|ÊŸ2§Œð)#|ÊŸ2~y‹ñË[Œ_Þbüò#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œª®àø¾oàø¾oàø>¼˜àAb:Œ˜#¦Ãˆé¨kœ97Žv]ÌErÑ\º¹ôr)r)sñ¹„\ú¹T¹ræBÊŶŠd<Éx’ñ$ãIÆ“Œ'O2žd<Éx’ñ$ãIÆ“Œ'O2žf<Íxšñ4ãiÆÓŒ§O3žf<Íxšñ4ãiÆÓŒ§O3^7ãu3^7ãu3^7ãu3^7ãu3^7ãu3^7ãu3^7ãu3^7ãu3^/ãõ2^/ãõ2^/ãõ2^/ãõ2^/ãõ2^/ãõ2^/ãõ2^/ãõ2^‘ñŠŒWd¼"ã¯ÈxÅ^‘¬ÈVä#*òùˆŠ|DE>”"J‘¥È‡RäC)ò1¹»Eîn‘»[äî=v¶ÕÝ"w·Èý,r?‹ÜÏ"÷³ Ÿ…Ï%w·ÈÝ-2P‘ŠTd "¨Ì@eî|™ñÊŒWf¼2㕯ÌxeÆ+3^™ñÊŒWå}VyŸUÞg•÷Yå}VyŸUÞg•÷Yå}VyŸUÞgÅ>ó1Tùª|U>†AÆd¼AÆd¼AÆd¼AÆd¼AÆd¼AÆd¼AÆd¼AÆd¼aÆf¼aÆf¼aÆf¼aÆf¼aÆf¼aÆf¼aÆf¼aÆf¼˜ñbÆ‹/náù¤¹°Õ˥ȥÌÅçréçRå2˜]^û†ÍcKë§wFR<;Õ8ß³ó’Õµå•ÎsÆI„sÃՍcçNW#v†ã¶5/ÖlxøØÒÙ•Î`94×7—Ž[9½¹ðÜs§O,mœ;µ¶tns>®Ÿ;º¶²:·´±ttõØ+—×ÇëË·žjýüìd£;ÞØÝÜxåÒîfÃW.Mšö¶Þ7îEY¦ÃÇWO/]ÚX=½ºyiãÔÊòjÞ¨¤Ñ¬Þ¸Ü¬Þ¸Ü¬´æÞ¬¹7k4TŸÔãŸÌÓ·ÕÓ'òü°±³zãò[êË;ó±Ù,6›ÅF³Ð<‚Ð<‚Ð<‚ ÍfÚl¦ÍfE³YÑlV4´y>Íó1ÈçcòX:þÊ£K;Ò釗Ö6¯·Ñ2®?¨µ•³góv?N¶ç·FÐb¨ÿöxÞoóÜ7^·‘ÆóÅF{i<Ÿ¼ÞýŠ÷¯Oö?c4^ŸìG¿âùbãy—çåW<—ÆóÅÆó~㽓ç2Ɲ;º±´µÌ`}³óüñÉÊ'´Ÿ?‘«ÎåyøÖÆáµõÓ'În.mLNzóS4?µAóS6¿ÃæwbØüNôóPé¬]îDÌ {Ç=ŸZ?½~bcéÌI^é_~åŠÕñÂþ•W7?âqfÌWl÷›Ûã”ë/ß&ÛnùØzçyã®äXŠÃGkrÙ:oe!ã_ŸÛxž?ÓúµñvãõÔxn´I6½F›ñsÛ:j?¬.Ÿ¯ñÆ¥S4Þ¸tò|Ý×F³A³Ù ÙlØl6l66›Åf³Øl›ÍR³Yj6KÍfÖlfÍfo­‹fõÆåfõF£™4›I³™4›i³™6›i³Y·Ù¬ÛlÖm6ë5›õšÍzÍfE³YÑlV4›•Ífe³YÙlæ›Í|³™o6Íf¡Ù,4›õ›ÍúÍfýf³æx‹Íñ›ã-6Ç[lŽ·Øo±9Þbs¼Åæx‹Íñ›ã-6Ç[lŽ·Øo±9Þbs¼Åæx‹Íñ–šã-5Ç[jŽ·Ôo©9ÞRs¼¥æxKÍñ–šã-5Ç[jŽ·Ôo©9ÞRs¼¥æxKÍñ–šã-5Ç[jŽ·Ôo©9ÞRs¼¥æxKy¼Í¾¸ž?,]¿{‹ûÆ‹MÆ”Èsi<×Æónãy¯ñ¼h</Ïý%ÆïùtxyuéXæ÷P>:žÍù˜W—_Ùzs’pø\!­ÖýSo8òøGîâ~÷?º¿R÷—ÜÿØíþbä¾0rÿý ûóÝîÏ.¸Gº?}kÕùÓ‘ûü÷¹î‘‹î¿]tÿuäþäYîî³#÷_Ô}æá;;Ÿ¹à®>|§ûôÝÖùôE÷G·¹OÜŽÜ¨ûÏûÝï_pÿiäþã>÷îu¿÷ ûÝ‘ûºùïÜë>ù‰çt>y¯ûÄsÜoÿÖ5ß¹ßºÆýû‘ûÍ‘ûw#÷#÷ëܯýêõ_¹_½Þý[u¹_~ÓÞÎ/_ëþÍUî¡‘û¥‘û×#÷¯Fî_ŽÜ¿¹_¹>rÿlä¹_Øë¸ï`灑»ÿ£v~ä®ÎGt}ÃôG~þ`ç#wyÜ}äÈôÏt?7rÿô‚ûÙ‘û™‘ûé‘û©‘ûð²û'»Ý‡>x°ó¡e÷ÁŸÜ×ùàA÷“ûÜOԝþ‰‹îÇGîÜ?¹Ûç~tä~ä‡ww~DÝïvÿpÙ} nòî‡Fîý?¸ÐyÿÈýà‚{ß{¯î¼oÙ½÷={:ï½Ú½gû9÷ý#÷}vu¾oä.ìrï®ßôîî]ïÜÝy׭Ý?¸è¾÷v¾wäÞñö»:ïxнã
+Óoÿžƒ·ßåÞ~dú{ºï¹·}×áÎÛFî»»·Ö‡ùÖʽåÍó·ìwožwßY¿ðËî¾úLÝwнi¯ûŽ‘ûö7îí|ûȽq¯ûû#÷†‘;?rGÿ¶{ïí|ÛÈÝ{¯û{Ëîõ/9ÐyýA÷wGîu#÷ÚÝîžw÷œ;7r›ÝÙ‹nã¢{ÍEwfäÖGîôÈ­Ýè^=r¯Ú;è¼êN·:r'ïu'êã#·2rË#wl䎎ÜÒ³Üß¹è¾uÁÝ5r{ä^1r/Ù\çåÝËæÜK¯ººóRuß2rß\#óÀ½ä€»³½§sçÝ‹÷»=ÿÊ΋Fî›æÝß¹~ãžÎGî÷¸o¹Ô?yÁÈ=ÿy{:Ï¿Ò=ïº]çíqÏÝåž3rvÁ¥.ŽÜpꙝáE7xÐU/pGFûú¯Û×ùúýîën¿¢óuûÜíÏÞÕ¹ýÈãW¸gïrϹþÈ¿¿.:_îéøý®,æ;åWÌ»Þõ®»Ë©ÌwtädÞ-Þ6ßYÜån›w‡Ÿ9Û9¼Ç=sÖ=CÝÓŸv°óôe÷´Cû:O;èís·Þr°skån9èžzp¾óÔ+ÜÁy÷”‘»yänºÂÝXçûÜ“—Ý
+Ýõõ!\¿ì®Ûå®­Ïàµ#wÍE÷¤»ºÞ¸z䞸ìžPŸ©'ŒÜUõ›®ºÚ¹ý#wåÈí«ì¹½õ±î¸=÷º+–Ýî‘ÛµpUg×È-Ô­®ró#7·ÇÍŽÜκÙΑ۱ßÍ,»éú‡Óõ8àêWÝÈMÕÛSÏtí=®5ríûÛËoúîöÓÿ&üiýÿîÀÿöÏu­©ÖñÑ…éãm¹ÖŽÖ“Ž,L±5óÅöÎÎù©éÖm}âiíùÄ#Ÿxdñʽ7î=xãޏO·;ë®yì3£;vÿÕŸoÌjµ[oµ:ÝÎ'[³­×¹~ÇÞöT{jïÌŽ™ÁŽ)×ú©™öŽ©k§Ë׶¦çö<öÈcìí÷¥uÛíh¿¿ø‚;_¶cÏôçÆ_~ÓÏÞ0ßnßud±œ
+;ž;õœ«SÇw¼ajÇL{væ@ûI3Ö~ÞÌKÛ/›Yi¯Î¼næMí·Î¼»ýž™šßsWë®+olïíî­ÿ¹ùãí=S=ú¥W=Ôùäo˜þÔŧOê‹7´Ú?ÖjM¶îçÎÖ»ŽÜêöNw¦§êÎvÆÅMílílïmµvƝž™Ú1}¤smëÈŽÙ=Ÿxø±‡÷;\÷7w·Sww';ãn·æÆݾ½3µª˜ZœZì,î´©#SG:Gv¾hêEí\™úŽ©wNí¹ªý$wÃÜSÛ‡œowdîDû¤{­;3÷Cs»êCpÝÙv·>€½Ó¿×~û½¿÷¥GµóÉ/½gêøcþ¥þÔÇZõŸ©Ökÿôôùé×·ö·®i9ò”ցöì};ßÜ9ðíÎíŸøÀ¾ûÞví5¦vØÙzÁÔ¾+Òµõ9ÿÂ#íÞ‡¿ðÈÃ{>_?¾ðùú…Å#‡î¸îÌu¸î7¯{ôºÎ­;ÚwLÝqàŽk:ÏØqÛÎÛfŸ1·ÞZo¯O­X¿fö®×´ïj¸ñúvWK`wûæ'·öîiuµµãpûæ›fvLŸìg~ý£¯úØÑc¿ùêÑFkzìÚ;îŸú±7¿çÝSßúŠ_üX¯÷á§=£Úsí+ÛÃÑï?ô}?÷á÷OŽé\}Ló­'´žäÊ™öµX¸ßÛž8»ïŠ¹}Ò·!wÏçÜ|ÇÕ¯o½~æüŽó;ÏÏžŸ;?ÿú…ó»Îï>Åù=ç÷¾~ß®~ôê½uooš9°ÿªîxÕèSoÑqoo¾iüïÔÙw}èƒï~ç‡>ôÎGÛûFŸôÏFÚÞëþà³ÿøgÿøW>ö'ïýÊè‘Ñçêè×ýÜßõyo·Öÿ´ûXÝÇ[ZŸ=rû®…©ÝówÞpýÎÙ©swÞpÃõƒ¹ùëo˜>к¯ý–éý÷xËØ;ýÀÁû÷¾íÖëçæo¸fGëÅ×ìܽcçþ›Ò­{{¨þB=\Ÿý~ŸOdÏè/>¿ç/>¿ï	Œ¯ÝŸÛû„þŽ­ǃë–ñà:uíܵó×.®?”gÌ?cáٳϞ{öü³æŸÜzrû)S·ÎÝ:ÿ´+oÛہ§]uëõ·Þpèɇn|Ê-÷ÍÝ7ßÂ}»ö`jjfnfÞ-¸]n·»ÂíqW»'¹kܵÓ×ÍÞrÛ¡;½òÐùCo8ôŽC8ôè¡'Ö£ñ5í[l}
+oh_ß>°æ曞zK±õù×'ô¶öávÑ«§ŠW¹ïz᏿â-o9ú®;ú±¿üÝWüÒÚñ_^zãÛV>xäƒßÿ‡¿qüç¦ïøð­·¾ä%Gžwãî§ýÀ[Þ÷‘›oþÅ¢xù‹^ðM¯xÊ»ßøþ]ßÚúsÓÿóÇÝ_õñ»_ýÑ|•Ç»òc*n?¶ۏíÇöcû±ýØ~l?¶ۏíÇöcû±ýØ~l?¶ۏíÇöcû±ýØ~l?¶ۏíÇöcû±ýØ~l?¶ۏíÇöcû±ýØ~|mVþÀí­º¿åÆ¥ý¤úïLë¯ù\~z{ãåç^zöâúï·üu£þ_ý™n­mý;=>?ž}üñúߎÿ­·§[_vH?·ÕW›GzùÏ‹©ß²µÏVû­Î×Ü»_¾ùhëÑÇ¿ì…ü™¶¦½uüoúßÎc­­§?ýø—þþ>ÒzÍ×ô÷3_ñ÷é­õ­s<õ¬OýÌOÿÔ/¼òŠÛÿ¢uCþP~éãïûȤþåï|é©»6f¿¹ù‰ý/Þ]I
 endstream
 endobj
-7311 0 obj
-2162
-endobj
-7312 0 obj
-792
-endobj
-7301 0 obj <<
-/D [7299 0 R /XYZ 151.701 685.529 null]
+7297 0 obj <<
+/D [7295 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5236 0 obj <<
-/D [7299 0 R /XYZ 151.701 660.623 null]
+/D [7295 0 R /XYZ 151.701 660.623 null]
 >> endobj
-7282 0 obj <<
-/D [7299 0 R /XYZ 151.701 643.753 null]
+7280 0 obj <<
+/D [7295 0 R /XYZ 151.701 643.753 null]
 >> endobj
-7298 0 obj <<
+7294 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F51 3736 0 R /F88 5678 0 R /F72 5679 0 R >>
-/XObject << /Im30 7275 0 R /Im1 5672 0 R >>
+/XObject << /Im30 7273 0 R /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7315 0 obj <<
+7309 0 obj <<
 /Length 1762      
 /Filter /FlateDecode
 >>
@@ -30966,33 +32339,33 @@
 ;’aQϝÿPê?mÕpß™N±µŽDÅâáÞêð%€À‹ìï0…Þ¶T< WŽN±%P-úÒ4:'SNí;ŒâŽÓ1ï¡oVX~†ÝÊøŸÃ~æ—(.|0ˆ÷çôpô(øÿ»îŒ_ôšÏm©DÁÑPÕ5òÅ4¾«;ûÓkíõ$&ÀíaÁ©ÌÂ1t÷õé1•Pø£¿y}õêÍk®«d)iÄɇ—àáôƒw"Aˆø;â˜íLjü‡4«ø9Œˆ{÷0ö¨’ïùˆk>0bó¡}÷¿_ñüât>Þn­ø<4¶É`ÂnW&þÏϤsÄÉ3ü$—í8¡2+vrÄÞ1“UHÞ,A»Ï¶›¾wû‘…@3Pµ =`}9t!Íuè7½éA|³ir³¼{n¬~¼^Îþm.9}
 endstream
 endobj
-7314 0 obj <<
+7308 0 obj <<
 /Type /Page
-/Contents 7315 0 R
-/Resources 7313 0 R
+/Contents 7309 0 R
+/Resources 7307 0 R
 /MediaBox [0 0 612 792]
-/Parent 7265 0 R
+/Parent 7263 0 R
 >> endobj
-7316 0 obj <<
-/D [7314 0 R /XYZ 100.892 685.529 null]
+7310 0 obj <<
+/D [7308 0 R /XYZ 100.892 685.529 null]
 >> endobj
 802 0 obj <<
-/D [7314 0 R /XYZ 100.892 455.626 null]
+/D [7308 0 R /XYZ 100.892 455.626 null]
 >> endobj
-7317 0 obj <<
-/D [7314 0 R /XYZ 100.892 429 null]
+7311 0 obj <<
+/D [7308 0 R /XYZ 100.892 429 null]
 >> endobj
 806 0 obj <<
-/D [7314 0 R /XYZ 100.892 214.193 null]
+/D [7308 0 R /XYZ 100.892 214.193 null]
 >> endobj
-7318 0 obj <<
-/D [7314 0 R /XYZ 100.892 188.173 null]
+7312 0 obj <<
+/D [7308 0 R /XYZ 100.892 188.173 null]
 >> endobj
-7313 0 obj <<
+7307 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F51 3736 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7323 0 obj <<
+7317 0 obj <<
 /Length 2166      
 /Filter /FlateDecode
 >>
@@ -31017,41 +32390,41 @@
 ¹µ¯
 endstream
 endobj
-7322 0 obj <<
+7316 0 obj <<
 /Type /Page
-/Contents 7323 0 R
-/Resources 7321 0 R
+/Contents 7317 0 R
+/Resources 7315 0 R
 /MediaBox [0 0 612 792]
-/Parent 7327 0 R
-/Annots [ 7319 0 R ]
+/Parent 7321 0 R
+/Annots [ 7313 0 R ]
 >> endobj
-7319 0 obj <<
+7313 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [294.523 152.279 369.698 163.969]
 /Subtype /Link
 /A << /S /GoTo /D (idmapbackendexample) >>
 >> endobj
-7324 0 obj <<
-/D [7322 0 R /XYZ 151.701 685.529 null]
+7318 0 obj <<
+/D [7316 0 R /XYZ 151.701 685.529 null]
 >> endobj
 810 0 obj <<
-/D [7322 0 R /XYZ 151.701 606.871 null]
+/D [7316 0 R /XYZ 151.701 606.871 null]
 >> endobj
-7325 0 obj <<
-/D [7322 0 R /XYZ 151.701 580.429 null]
+7319 0 obj <<
+/D [7316 0 R /XYZ 151.701 580.429 null]
 >> endobj
 814 0 obj <<
-/D [7322 0 R /XYZ 151.701 355.605 null]
+/D [7316 0 R /XYZ 151.701 355.605 null]
 >> endobj
-7326 0 obj <<
-/D [7322 0 R /XYZ 151.701 329.105 null]
+7320 0 obj <<
+/D [7316 0 R /XYZ 151.701 329.105 null]
 >> endobj
-7321 0 obj <<
+7315 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F51 3736 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R /F53 3738 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7332 0 obj <<
+7326 0 obj <<
 /Length 2848      
 /Filter /FlateDecode
 >>
@@ -31079,61 +32452,61 @@
 [üu {¤ŠP!ݸ<tSõ6'Š»
 endstream
 endobj
-7331 0 obj <<
+7325 0 obj <<
 /Type /Page
-/Contents 7332 0 R
-/Resources 7330 0 R
+/Contents 7326 0 R
+/Resources 7324 0 R
 /MediaBox [0 0 612 792]
-/Parent 7327 0 R
-/Annots [ 7320 0 R 7329 0 R ]
+/Parent 7321 0 R
+/Annots [ 7314 0 R 7323 0 R ]
 >> endobj
-7320 0 obj <<
+7314 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [191.554 519.452 302.363 531.445]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.padl.com)>>
 >> endobj
-7329 0 obj <<
+7323 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 365.715 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.padl.com/download/xad_oss_plugins.tar.gz)>>
 >> endobj
-7333 0 obj <<
-/D [7331 0 R /XYZ 100.892 685.529 null]
+7327 0 obj <<
+/D [7325 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5058 0 obj <<
-/D [7331 0 R /XYZ 100.892 660.623 null]
+/D [7325 0 R /XYZ 100.892 660.623 null]
 >> endobj
+7322 0 obj <<
+/D [7325 0 R /XYZ 100.892 643.753 null]
+>> endobj
 7328 0 obj <<
-/D [7331 0 R /XYZ 100.892 643.753 null]
+/D [7325 0 R /XYZ 100.892 637.775 null]
 >> endobj
-7334 0 obj <<
-/D [7331 0 R /XYZ 100.892 637.775 null]
+7329 0 obj <<
+/D [7325 0 R /XYZ 100.892 644.051 null]
 >> endobj
-7335 0 obj <<
-/D [7331 0 R /XYZ 100.892 644.051 null]
+7330 0 obj <<
+/D [7325 0 R /XYZ 100.892 632.096 null]
 >> endobj
-7336 0 obj <<
-/D [7331 0 R /XYZ 100.892 632.096 null]
+7331 0 obj <<
+/D [7325 0 R /XYZ 100.892 608.186 null]
 >> endobj
-7337 0 obj <<
-/D [7331 0 R /XYZ 100.892 608.186 null]
+7332 0 obj <<
+/D [7325 0 R /XYZ 100.892 596.231 null]
 >> endobj
-7338 0 obj <<
-/D [7331 0 R /XYZ 100.892 596.231 null]
->> endobj
 818 0 obj <<
-/D [7331 0 R /XYZ 100.892 354.971 null]
+/D [7325 0 R /XYZ 100.892 354.971 null]
 >> endobj
-7339 0 obj <<
-/D [7331 0 R /XYZ 100.892 324.312 null]
+7333 0 obj <<
+/D [7325 0 R /XYZ 100.892 324.312 null]
 >> endobj
-7330 0 obj <<
+7324 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F4 5484 0 R /F51 3736 0 R /F52 3737 0 R /F59 4373 0 R /F53 3738 0 R /F29 5413 0 R /F17 3698 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7342 0 obj <<
+7336 0 obj <<
 /Length 2325      
 /Filter /FlateDecode
 >>
@@ -31160,27 +32533,27 @@
 ©«·xÌÂÝ8îç&|LDÖܯؔ*f²öü8í¿?nþ¾~N
 endstream
 endobj
-7341 0 obj <<
+7335 0 obj <<
 /Type /Page
-/Contents 7342 0 R
-/Resources 7340 0 R
+/Contents 7336 0 R
+/Resources 7334 0 R
 /MediaBox [0 0 612 792]
-/Parent 7327 0 R
+/Parent 7321 0 R
 >> endobj
-7343 0 obj <<
-/D [7341 0 R /XYZ 151.701 685.529 null]
+7337 0 obj <<
+/D [7335 0 R /XYZ 151.701 685.529 null]
 >> endobj
 822 0 obj <<
-/D [7341 0 R /XYZ 151.701 321.946 null]
+/D [7335 0 R /XYZ 151.701 321.946 null]
 >> endobj
-7344 0 obj <<
-/D [7341 0 R /XYZ 151.701 295.735 null]
+7338 0 obj <<
+/D [7335 0 R /XYZ 151.701 295.735 null]
 >> endobj
-7340 0 obj <<
+7334 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7347 0 obj <<
+7341 0 obj <<
 /Length 2172      
 /Filter /FlateDecode
 >>
@@ -31212,27 +32585,27 @@
 Z•± 
 endstream
 endobj
-7346 0 obj <<
+7340 0 obj <<
 /Type /Page
-/Contents 7347 0 R
-/Resources 7345 0 R
+/Contents 7341 0 R
+/Resources 7339 0 R
 /MediaBox [0 0 612 792]
-/Parent 7327 0 R
+/Parent 7321 0 R
 >> endobj
-7348 0 obj <<
-/D [7346 0 R /XYZ 100.892 685.529 null]
+7342 0 obj <<
+/D [7340 0 R /XYZ 100.892 685.529 null]
 >> endobj
 826 0 obj <<
-/D [7346 0 R /XYZ 100.892 482.001 null]
+/D [7340 0 R /XYZ 100.892 482.001 null]
 >> endobj
-7349 0 obj <<
-/D [7346 0 R /XYZ 100.892 452.753 null]
+7343 0 obj <<
+/D [7340 0 R /XYZ 100.892 452.753 null]
 >> endobj
-7345 0 obj <<
+7339 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7353 0 obj <<
+7347 0 obj <<
 /Length 2341      
 /Filter /FlateDecode
 >>
@@ -31266,41 +32639,41 @@
 ‘.„õ0kÌ1C¼Gç[¶ä óu¢œ‹%ØlJìîÿÃÝÕ_o¤0¢
 endstream
 endobj
-7352 0 obj <<
+7346 0 obj <<
 /Type /Page
-/Contents 7353 0 R
-/Resources 7351 0 R
+/Contents 7347 0 R
+/Resources 7345 0 R
 /MediaBox [0 0 612 792]
-/Parent 7327 0 R
-/Annots [ 7350 0 R ]
+/Parent 7321 0 R
+/Annots [ 7344 0 R ]
 >> endobj
-7350 0 obj <<
+7344 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 256.378 476.061 268.068]
 /Subtype /Link
 /A << /S /GoTo /D (NetCommand) >>
 >> endobj
-7354 0 obj <<
-/D [7352 0 R /XYZ 151.701 685.529 null]
+7348 0 obj <<
+/D [7346 0 R /XYZ 151.701 685.529 null]
 >> endobj
 830 0 obj <<
-/D [7352 0 R /XYZ 151.701 458.9 null]
+/D [7346 0 R /XYZ 151.701 458.9 null]
 >> endobj
-7355 0 obj <<
-/D [7352 0 R /XYZ 151.701 428.879 null]
+7349 0 obj <<
+/D [7346 0 R /XYZ 151.701 428.879 null]
 >> endobj
 834 0 obj <<
-/D [7352 0 R /XYZ 151.701 242.465 null]
+/D [7346 0 R /XYZ 151.701 242.465 null]
 >> endobj
-7356 0 obj <<
-/D [7352 0 R /XYZ 151.701 215.456 null]
+7350 0 obj <<
+/D [7346 0 R /XYZ 151.701 215.456 null]
 >> endobj
-7351 0 obj <<
+7345 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7359 0 obj <<
+7353 0 obj <<
 /Length 1352      
 /Filter /FlateDecode
 >>
@@ -31317,21 +32690,21 @@
 }W¢¶;üA#‰k·Ù×ã%0/ÅŽRb]ÞÜcámdFÀ_çÑL~‹Ðœa£jÓ“ðWÐöv€ò<aèÞôövJÙoÉlNIÈIîÁOb$SG©pOøš·K<FçY<ÎgÂx6ŠA±¤$öÚ`c×µõζI á¾”bÚìá–L¤9èc´+Û		¨LÁ4a=FMÀk‘cvãðÞý­¼“=ƒþ“àÒŒ”P×ürÁ×NØ8ÿq̬ÀaOÓÚà(©±U¸¥;›MÖ}ÓƒùÌŒ¦–ÝLìÓâÊ}á×ü?ýX
 endstream
 endobj
-7358 0 obj <<
+7352 0 obj <<
 /Type /Page
-/Contents 7359 0 R
-/Resources 7357 0 R
+/Contents 7353 0 R
+/Resources 7351 0 R
 /MediaBox [0 0 612 792]
-/Parent 7327 0 R
+/Parent 7321 0 R
 >> endobj
-7360 0 obj <<
-/D [7358 0 R /XYZ 100.892 685.529 null]
+7354 0 obj <<
+/D [7352 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7357 0 obj <<
+7351 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F51 3736 0 R /F59 4373 0 R /F53 3738 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7363 0 obj <<
+7357 0 obj <<
 /Length 1590      
 /Filter /FlateDecode
 >>
@@ -31356,51 +32729,51 @@
 /³—
 endstream
 endobj
-7362 0 obj <<
+7356 0 obj <<
 /Type /Page
-/Contents 7363 0 R
-/Resources 7361 0 R
+/Contents 7357 0 R
+/Resources 7355 0 R
 /MediaBox [0 0 612 792]
-/Parent 7374 0 R
+/Parent 7368 0 R
 >> endobj
-7364 0 obj <<
-/D [7362 0 R /XYZ 151.701 685.529 null]
+7358 0 obj <<
+/D [7356 0 R /XYZ 151.701 685.529 null]
 >> endobj
 838 0 obj <<
-/D [7362 0 R /XYZ 151.701 571.639 null]
+/D [7356 0 R /XYZ 151.701 571.639 null]
 >> endobj
-7365 0 obj <<
-/D [7362 0 R /XYZ 151.701 545.662 null]
+7359 0 obj <<
+/D [7356 0 R /XYZ 151.701 545.662 null]
 >> endobj
-7366 0 obj <<
-/D [7362 0 R /XYZ 151.701 312.171 null]
+7360 0 obj <<
+/D [7356 0 R /XYZ 151.701 312.171 null]
 >> endobj
-7367 0 obj <<
-/D [7362 0 R /XYZ 151.701 291.427 null]
+7361 0 obj <<
+/D [7356 0 R /XYZ 151.701 291.427 null]
 >> endobj
-7368 0 obj <<
-/D [7362 0 R /XYZ 151.701 257.135 null]
+7362 0 obj <<
+/D [7356 0 R /XYZ 151.701 257.135 null]
 >> endobj
-7369 0 obj <<
-/D [7362 0 R /XYZ 151.701 236.391 null]
+7363 0 obj <<
+/D [7356 0 R /XYZ 151.701 236.391 null]
 >> endobj
-7370 0 obj <<
-/D [7362 0 R /XYZ 151.701 215.647 null]
+7364 0 obj <<
+/D [7356 0 R /XYZ 151.701 215.647 null]
 >> endobj
-7371 0 obj <<
-/D [7362 0 R /XYZ 151.701 194.904 null]
+7365 0 obj <<
+/D [7356 0 R /XYZ 151.701 194.904 null]
 >> endobj
-7372 0 obj <<
-/D [7362 0 R /XYZ 151.701 174.16 null]
+7366 0 obj <<
+/D [7356 0 R /XYZ 151.701 174.16 null]
 >> endobj
-7373 0 obj <<
-/D [7362 0 R /XYZ 151.701 139.867 null]
+7367 0 obj <<
+/D [7356 0 R /XYZ 151.701 139.867 null]
 >> endobj
-7361 0 obj <<
+7355 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F51 3736 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7378 0 obj <<
+7372 0 obj <<
 /Length 2182      
 /Filter /FlateDecode
 >>
@@ -31421,41 +32794,41 @@
 N½/ëø@QÓ#F@í‹ÁÀƲF%?™Ür»¿âÎ…ï³ÐëoÂtÖDZH*ù®œ|x!®£iEeP	ñ‘mŁŠ?IÜjYßÌ¢3£ƒŒo´å÷­ÆŸÊæ¾>.ÚçáÒa§ÿß»Ϗß6ìJ
 endstream
 endobj
-7377 0 obj <<
+7371 0 obj <<
 /Type /Page
-/Contents 7378 0 R
-/Resources 7376 0 R
+/Contents 7372 0 R
+/Resources 7370 0 R
 /MediaBox [0 0 612 792]
-/Parent 7374 0 R
-/Annots [ 7375 0 R ]
+/Parent 7368 0 R
+/Annots [ 7369 0 R ]
 >> endobj
-7375 0 obj <<
+7369 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.138 472.107 243.524 481.676]
 /Subtype /Link
 /A << /S /GoTo /D (policycontrols) >>
 >> endobj
-7379 0 obj <<
-/D [7377 0 R /XYZ 100.892 685.529 null]
+7373 0 obj <<
+/D [7371 0 R /XYZ 100.892 685.529 null]
 >> endobj
 842 0 obj <<
-/D [7377 0 R /XYZ 100.892 375.854 null]
+/D [7371 0 R /XYZ 100.892 375.854 null]
 >> endobj
-7380 0 obj <<
-/D [7377 0 R /XYZ 100.892 349.674 null]
+7374 0 obj <<
+/D [7371 0 R /XYZ 100.892 349.674 null]
 >> endobj
-7381 0 obj <<
-/D [7377 0 R /XYZ 100.892 168.878 null]
+7375 0 obj <<
+/D [7371 0 R /XYZ 100.892 168.878 null]
 >> endobj
-7382 0 obj <<
-/D [7377 0 R /XYZ 100.892 168.878 null]
+7376 0 obj <<
+/D [7371 0 R /XYZ 100.892 168.878 null]
 >> endobj
-7376 0 obj <<
+7370 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7386 0 obj <<
+7380 0 obj <<
 /Length 1806      
 /Filter /FlateDecode
 >>
@@ -31473,27 +32846,27 @@
 !RƘ3hƒqõˆµ÷ú*œ#ÿx¾¹¨
 endstream
 endobj
-7385 0 obj <<
+7379 0 obj <<
 /Type /Page
-/Contents 7386 0 R
-/Resources 7384 0 R
+/Contents 7380 0 R
+/Resources 7378 0 R
 /MediaBox [0 0 612 792]
-/Parent 7374 0 R
+/Parent 7368 0 R
 >> endobj
-7387 0 obj <<
-/D [7385 0 R /XYZ 151.701 685.529 null]
+7381 0 obj <<
+/D [7379 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5317 0 obj <<
-/D [7385 0 R /XYZ 151.701 660.623 null]
+/D [7379 0 R /XYZ 151.701 660.623 null]
 >> endobj
-7383 0 obj <<
-/D [7385 0 R /XYZ 151.701 643.753 null]
+7377 0 obj <<
+/D [7379 0 R /XYZ 151.701 643.753 null]
 >> endobj
-7384 0 obj <<
+7378 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7390 0 obj <<
+7384 0 obj <<
 /Length 1243      
 /Filter /FlateDecode
 >>
@@ -31506,21 +32879,21 @@
 x1Qé¹ÈsóHs‘x¡ž±íKQÕuÛî´ÑЦµb‰T¢˜ÒÜk5¥¹6ÑhûØ8ZéðŒ¶Ý{ÍN˜Îpn<V	‡Ü[N7†¯Ñ Ò=Ù NêÜïÅù§ ë4—Ž8c•˜ðLežm€¢ùRnza”fíÇa„CÔžFh¬csÉ9‡î>¼`ï¯øÞþŸî
 endstream
 endobj
-7389 0 obj <<
+7383 0 obj <<
 /Type /Page
-/Contents 7390 0 R
-/Resources 7388 0 R
+/Contents 7384 0 R
+/Resources 7382 0 R
 /MediaBox [0 0 612 792]
-/Parent 7374 0 R
+/Parent 7368 0 R
 >> endobj
-7391 0 obj <<
-/D [7389 0 R /XYZ 100.892 685.529 null]
+7385 0 obj <<
+/D [7383 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7388 0 obj <<
+7382 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7395 0 obj <<
+7389 0 obj <<
 /Length 1475      
 /Filter /FlateDecode
 >>
@@ -31545,35 +32918,35 @@
 »‘ÿ…É-Qöß4i*Ȉpûözy¹øcõö¤/_ø)ü/+1ñ¬
 endstream
 endobj
-7394 0 obj <<
+7388 0 obj <<
 /Type /Page
-/Contents 7395 0 R
-/Resources 7393 0 R
+/Contents 7389 0 R
+/Resources 7387 0 R
 /MediaBox [0 0 612 792]
-/Parent 7374 0 R
-/Annots [ 7392 0 R ]
+/Parent 7368 0 R
+/Annots [ 7386 0 R ]
 >> endobj
-7392 0 obj <<
+7386 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [297.735 429.218 374.273 440.908]
 /Subtype /Link
 /A << /S /GoTo /D (TOSHARG-acctflags) >>
 >> endobj
-7396 0 obj <<
-/D [7394 0 R /XYZ 151.701 685.529 null]
+7390 0 obj <<
+/D [7388 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7397 0 obj <<
-/D [7394 0 R /XYZ 151.701 390.243 null]
+7391 0 obj <<
+/D [7388 0 R /XYZ 151.701 390.243 null]
 >> endobj
-7398 0 obj <<
-/D [7394 0 R /XYZ 151.701 390.243 null]
+7392 0 obj <<
+/D [7388 0 R /XYZ 151.701 390.243 null]
 >> endobj
-7393 0 obj <<
+7387 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F51 3736 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7402 0 obj <<
+7396 0 obj <<
 /Length 1275      
 /Filter /FlateDecode
 >>
@@ -31590,33 +32963,33 @@
 µ3[»ÏnÂìãÉpÛ™Ãà{6a,'"ÏκÃÖ$–¸-Ȑ› Ð«Þ½‚BOhŸ7ÝûîЮ…`ÌêºÑ›ÆoãÜ	®ƒ´±*}Nîö‰Ꙉ«Ïº= –Iknj·êp$bÛyöúugµ—wc=ej¥Ïî	˱j­gŽMăÑÏ<¤O fº&̏	Œ6ˆ†èuºõ8ƒÂáÚNé¿„y\­þ×Eâ{1I0ßüã?êr4~ÿ¢™ê²6Óà–¯àºytçê¹ë!döÔ×­îoýË¥7ÓÁ‘W/ž†÷ÝUB	d’³ŒÃ¯ŒŒ'‚²BQYBiVÐ"L%’ò9ˆg¶dQékmŸ¨ %ÿÁ9E?›ÖO«§u_¡ø-hã<ÞS.ðFýÖ q/ò,Ç_á?hþ¼q
 endstream
 endobj
-7401 0 obj <<
+7395 0 obj <<
 /Type /Page
-/Contents 7402 0 R
-/Resources 7400 0 R
+/Contents 7396 0 R
+/Resources 7394 0 R
 /MediaBox [0 0 612 792]
-/Parent 7374 0 R
+/Parent 7368 0 R
 >> endobj
-7403 0 obj <<
-/D [7401 0 R /XYZ 100.892 685.529 null]
+7397 0 obj <<
+/D [7395 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7404 0 obj <<
-/D [7401 0 R /XYZ 100.892 479.475 null]
+7398 0 obj <<
+/D [7395 0 R /XYZ 100.892 479.475 null]
 >> endobj
-7405 0 obj <<
-/D [7401 0 R /XYZ 100.892 479.475 null]
+7399 0 obj <<
+/D [7395 0 R /XYZ 100.892 479.475 null]
 >> endobj
-7406 0 obj <<
-/D [7401 0 R /XYZ 100.892 303.933 null]
+7400 0 obj <<
+/D [7395 0 R /XYZ 100.892 303.933 null]
 >> endobj
-7407 0 obj <<
-/D [7401 0 R /XYZ 100.892 303.933 null]
+7401 0 obj <<
+/D [7395 0 R /XYZ 100.892 303.933 null]
 >> endobj
-7400 0 obj <<
+7394 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F17 3698 0 R /F15 3700 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7410 0 obj <<
+7404 0 obj <<
 /Length 987       
 /Filter /FlateDecode
 >>
@@ -31630,21 +33003,21 @@
 ?þ͉L'
 endstream
 endobj
-7409 0 obj <<
+7403 0 obj <<
 /Type /Page
-/Contents 7410 0 R
-/Resources 7408 0 R
+/Contents 7404 0 R
+/Resources 7402 0 R
 /MediaBox [0 0 612 792]
-/Parent 7412 0 R
+/Parent 7406 0 R
 >> endobj
-7411 0 obj <<
-/D [7409 0 R /XYZ 151.701 685.529 null]
+7405 0 obj <<
+/D [7403 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7408 0 obj <<
+7402 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7416 0 obj <<
+7410 0 obj <<
 /Length 1933      
 /Filter /FlateDecode
 >>
@@ -31672,35 +33045,35 @@
 ìHüÛ9øDÜ-*7»Î­”2V7báeÞCTYV,ÑH.B°Ý7r–ó0½}…Pä§îY“ê?ƒCj{ä_ÅÃ4ñ+ ˜¸GJô—Ë82lÓ µÄ¿¢TPJOp™XØÒÂu“ȬüÙÚo-W«(÷¾ü¿°iNŽ€Ü…‹80á[i6à…	çúå<g~!.<P&÷.A>ä=_o½Î¤eéeéõz ,’KH“[¤û7eÁø“›”JŐßõ*·¿,m¬ià/{Ù©¦Áuª+9g1·¼À˜s½§TØ1ºkÍŠ8ÉÓ›÷ÉþR' væ*bý`s•Nþï‚? €ã
 endstream
 endobj
-7415 0 obj <<
+7409 0 obj <<
 /Type /Page
-/Contents 7416 0 R
-/Resources 7414 0 R
+/Contents 7410 0 R
+/Resources 7408 0 R
 /MediaBox [0 0 612 792]
-/Parent 7412 0 R
-/Annots [ 7413 0 R ]
+/Parent 7406 0 R
+/Annots [ 7407 0 R ]
 >> endobj
-7413 0 obj <<
+7407 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.95 193.39 308.488 205.079]
 /Subtype /Link
 /A << /S /GoTo /D (accountflags) >>
 >> endobj
-7417 0 obj <<
-/D [7415 0 R /XYZ 100.892 685.529 null]
+7411 0 obj <<
+/D [7409 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7418 0 obj <<
-/D [7415 0 R /XYZ 100.892 454.786 null]
+7412 0 obj <<
+/D [7409 0 R /XYZ 100.892 454.786 null]
 >> endobj
-7399 0 obj <<
-/D [7415 0 R /XYZ 100.892 454.786 null]
+7393 0 obj <<
+/D [7409 0 R /XYZ 100.892 454.786 null]
 >> endobj
-7414 0 obj <<
+7408 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7422 0 obj <<
+7416 0 obj <<
 /Length 1618      
 /Filter /FlateDecode
 >>
@@ -31722,27 +33095,27 @@
 ^¿Ÿ~þêú}‚ýe–ÿ®É~GH›‰.Àt¨íbQm¬£bœl^š·XšëEhmDeyw„ÙvrŽ'5쾋g÷OŠQÖºóA/­Å~L7_…™¥'‹ò‡Ù¾+=CÔz¶[•þ nïèVG¥ëO<«›•ã›-Ã͝v³X¨þ/¸õ®Ûž~èÎûƒ²äMC‹¹}ð s˜²nÕ9ÙïR¸j&lAL]Lvif%·]NŸýSdͧÿЂ,ú/°ƒx
 endstream
 endobj
-7421 0 obj <<
+7415 0 obj <<
 /Type /Page
-/Contents 7422 0 R
-/Resources 7420 0 R
+/Contents 7416 0 R
+/Resources 7414 0 R
 /MediaBox [0 0 612 792]
-/Parent 7412 0 R
+/Parent 7406 0 R
 >> endobj
-7423 0 obj <<
-/D [7421 0 R /XYZ 151.701 685.529 null]
+7417 0 obj <<
+/D [7415 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5318 0 obj <<
-/D [7421 0 R /XYZ 151.701 660.623 null]
+/D [7415 0 R /XYZ 151.701 660.623 null]
 >> endobj
-7419 0 obj <<
-/D [7421 0 R /XYZ 151.701 643.753 null]
+7413 0 obj <<
+/D [7415 0 R /XYZ 151.701 643.753 null]
 >> endobj
-7420 0 obj <<
+7414 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7426 0 obj <<
+7420 0 obj <<
 /Length 996       
 /Filter /FlateDecode
 >>
@@ -31754,27 +33127,27 @@
 “,›o7ÀâÙ†Š`/­.‹3}tƒùXCSú4]@í©Vû(‹ý¥¸3Ö ŠÚØÚœÚæCN-…Ý´ Úᆠ%±°js´W3+E;Ê-·[ó%IFU}¤Ò…l@Ë£}¯Äv.ºâç$wmÆßœj)ÍC>?¨ŽcMucÙÑð×–ÕWϺ9„hme`ç¡V—«#+Ñ컃+à±ß¡lµ9Z½ŸÄúß-YÍNP9ߥO(¸xòû²îkW¸QwÂñ27ŽpGü7úÈ
 endstream
 endobj
-7425 0 obj <<
+7419 0 obj <<
 /Type /Page
-/Contents 7426 0 R
-/Resources 7424 0 R
+/Contents 7420 0 R
+/Resources 7418 0 R
 /MediaBox [0 0 612 792]
-/Parent 7412 0 R
+/Parent 7406 0 R
 >> endobj
-7427 0 obj <<
-/D [7425 0 R /XYZ 100.892 685.529 null]
+7421 0 obj <<
+/D [7419 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7428 0 obj <<
-/D [7425 0 R /XYZ 100.892 272.702 null]
+7422 0 obj <<
+/D [7419 0 R /XYZ 100.892 272.702 null]
 >> endobj
-7429 0 obj <<
-/D [7425 0 R /XYZ 100.892 272.702 null]
+7423 0 obj <<
+/D [7419 0 R /XYZ 100.892 272.702 null]
 >> endobj
-7424 0 obj <<
+7418 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7432 0 obj <<
+7426 0 obj <<
 /Length 908       
 /Filter /FlateDecode
 >>
@@ -31785,39 +33158,39 @@
 ì^¼¡-Ù½…¦ßN,þ_àNùô]7_%òâýòæÞxù6{k߀v+sôÞÿôEäêŽü3ŽyK¯¶‘(§îxä"ÿÜpæQÿûæiÌ<
 endstream
 endobj
-7431 0 obj <<
+7425 0 obj <<
 /Type /Page
-/Contents 7432 0 R
-/Resources 7430 0 R
+/Contents 7426 0 R
+/Resources 7424 0 R
 /MediaBox [0 0 612 792]
-/Parent 7412 0 R
+/Parent 7406 0 R
 >> endobj
-7433 0 obj <<
-/D [7431 0 R /XYZ 151.701 685.529 null]
+7427 0 obj <<
+/D [7425 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7434 0 obj <<
-/D [7431 0 R /XYZ 151.701 547.292 null]
+7428 0 obj <<
+/D [7425 0 R /XYZ 151.701 547.292 null]
 >> endobj
-7435 0 obj <<
-/D [7431 0 R /XYZ 151.701 524.094 null]
+7429 0 obj <<
+/D [7425 0 R /XYZ 151.701 524.094 null]
 >> endobj
-7436 0 obj <<
-/D [7431 0 R /XYZ 151.701 503.018 null]
+7430 0 obj <<
+/D [7425 0 R /XYZ 151.701 503.018 null]
 >> endobj
-7437 0 obj <<
-/D [7431 0 R /XYZ 151.701 481.941 null]
+7431 0 obj <<
+/D [7425 0 R /XYZ 151.701 481.941 null]
 >> endobj
-7438 0 obj <<
-/D [7431 0 R /XYZ 151.701 460.865 null]
+7432 0 obj <<
+/D [7425 0 R /XYZ 151.701 460.865 null]
 >> endobj
-7439 0 obj <<
-/D [7431 0 R /XYZ 151.701 439.788 null]
+7433 0 obj <<
+/D [7425 0 R /XYZ 151.701 439.788 null]
 >> endobj
-7430 0 obj <<
+7424 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7442 0 obj <<
+7436 0 obj <<
 /Length 1597      
 /Filter /FlateDecode
 >>
@@ -31833,40 +33206,40 @@
 Ä0áK	D´î]v<Ü)I“Àüaêú æP *³5˳٠ìÖÐ;•Ý»ˆ‚H¯M{o/}§RM±Î}¬q‰ÁàZ߃iF3¤ç ·×~€y˜Óˆˆ½mº¯&¦ŸËPÞçqÖn7AþY~¹²fÜõáŒo-øv}mû”˜¾0ýõ Ý
 endstream
 endobj
-7441 0 obj <<
+7435 0 obj <<
 /Type /Page
-/Contents 7442 0 R
-/Resources 7440 0 R
+/Contents 7436 0 R
+/Resources 7434 0 R
 /MediaBox [0 0 612 792]
-/Parent 7412 0 R
+/Parent 7406 0 R
 >> endobj
-7443 0 obj <<
-/D [7441 0 R /XYZ 100.892 685.529 null]
+7437 0 obj <<
+/D [7435 0 R /XYZ 100.892 685.529 null]
 >> endobj
 846 0 obj <<
-/D [7441 0 R /XYZ 100.892 366.648 null]
+/D [7435 0 R /XYZ 100.892 366.648 null]
 >> endobj
-7444 0 obj <<
-/D [7441 0 R /XYZ 100.892 341.993 null]
+7438 0 obj <<
+/D [7435 0 R /XYZ 100.892 341.993 null]
 >> endobj
-7445 0 obj <<
-/D [7441 0 R /XYZ 100.892 294.596 null]
+7439 0 obj <<
+/D [7435 0 R /XYZ 100.892 294.596 null]
 >> endobj
-7446 0 obj <<
-/D [7441 0 R /XYZ 100.892 249.309 null]
+7440 0 obj <<
+/D [7435 0 R /XYZ 100.892 249.309 null]
 >> endobj
 850 0 obj <<
-/D [7441 0 R /XYZ 100.892 198.025 null]
+/D [7435 0 R /XYZ 100.892 198.025 null]
 >> endobj
-7447 0 obj <<
-/D [7441 0 R /XYZ 100.892 168.957 null]
+7441 0 obj <<
+/D [7435 0 R /XYZ 100.892 168.957 null]
 >> endobj
-7440 0 obj <<
+7434 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F85 5513 0 R >>
-/XObject << /Im1 5672 0 R /Im3 6520 0 R >>
+/XObject << /Im1 5672 0 R /Im3 6519 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7450 0 obj <<
+7444 0 obj <<
 /Length 2374      
 /Filter /FlateDecode
 >>
@@ -31896,33 +33269,33 @@
 ö\­üûÝë/«ÿÿæþæ/Èù<“
 endstream
 endobj
-7449 0 obj <<
+7443 0 obj <<
 /Type /Page
-/Contents 7450 0 R
-/Resources 7448 0 R
+/Contents 7444 0 R
+/Resources 7442 0 R
 /MediaBox [0 0 612 792]
-/Parent 7454 0 R
+/Parent 7448 0 R
 >> endobj
-7451 0 obj <<
-/D [7449 0 R /XYZ 151.701 685.529 null]
+7445 0 obj <<
+/D [7443 0 R /XYZ 151.701 685.529 null]
 >> endobj
 854 0 obj <<
-/D [7449 0 R /XYZ 151.701 532.072 null]
+/D [7443 0 R /XYZ 151.701 532.072 null]
 >> endobj
-7452 0 obj <<
-/D [7449 0 R /XYZ 151.701 507.954 null]
+7446 0 obj <<
+/D [7443 0 R /XYZ 151.701 507.954 null]
 >> endobj
 858 0 obj <<
-/D [7449 0 R /XYZ 151.701 403.912 null]
+/D [7443 0 R /XYZ 151.701 403.912 null]
 >> endobj
-7453 0 obj <<
-/D [7449 0 R /XYZ 151.701 377.469 null]
+7447 0 obj <<
+/D [7443 0 R /XYZ 151.701 377.469 null]
 >> endobj
-7448 0 obj <<
+7442 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F59 4373 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7457 0 obj <<
+7451 0 obj <<
 /Length 2029      
 /Filter /FlateDecode
 >>
@@ -31950,33 +33323,33 @@
 CîUqƒÛ‹NN̵{™{kn:ÂI—ZÐÄíǪûÒ®S—G-MxÈ»¤ºR¾˜“Q/m]ôú¨¥j¯µûý¤~ß¿1Qÿ
 endstream
 endobj
-7456 0 obj <<
+7450 0 obj <<
 /Type /Page
-/Contents 7457 0 R
-/Resources 7455 0 R
+/Contents 7451 0 R
+/Resources 7449 0 R
 /MediaBox [0 0 612 792]
-/Parent 7454 0 R
+/Parent 7448 0 R
 >> endobj
-7458 0 obj <<
-/D [7456 0 R /XYZ 100.892 685.529 null]
+7452 0 obj <<
+/D [7450 0 R /XYZ 100.892 685.529 null]
 >> endobj
 862 0 obj <<
-/D [7456 0 R /XYZ 100.892 518.523 null]
+/D [7450 0 R /XYZ 100.892 518.523 null]
 >> endobj
-7459 0 obj <<
-/D [7456 0 R /XYZ 100.892 494.405 null]
+7453 0 obj <<
+/D [7450 0 R /XYZ 100.892 494.405 null]
 >> endobj
 866 0 obj <<
-/D [7456 0 R /XYZ 100.892 181.635 null]
+/D [7450 0 R /XYZ 100.892 181.635 null]
 >> endobj
-7460 0 obj <<
-/D [7456 0 R /XYZ 100.892 153.072 null]
+7454 0 obj <<
+/D [7450 0 R /XYZ 100.892 153.072 null]
 >> endobj
-7455 0 obj <<
+7449 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7473 0 obj <<
+7467 0 obj <<
 /Length 2063      
 /Filter /FlateDecode
 >>
@@ -32000,82 +33373,82 @@
 \Ÿ§/ç=(;PŽ¦8Û­Yüoœ³TdOptXOx²—ÃSõpßÙõÐ=±!”¬ÞÖýâ®°ûçp×EHÐEf—)DÄPßñ®wBtè“ôTÇú毆4ÔæŽÙn±î‹Ò QxW­Ž33Z–4ß6û¾aÛþ2™¨Ôqò„û´†kÀ+¬©V†¹5åý³¨þ‹ÿfŒÚ“ÿ•ëWß
 endstream
 endobj
-7472 0 obj <<
+7466 0 obj <<
 /Type /Page
-/Contents 7473 0 R
-/Resources 7471 0 R
+/Contents 7467 0 R
+/Resources 7465 0 R
 /MediaBox [0 0 612 792]
-/Parent 7454 0 R
-/Annots [ 7461 0 R 7462 0 R 7463 0 R 7464 0 R 7465 0 R 7466 0 R 7467 0 R 7468 0 R 7469 0 R 7470 0 R ]
+/Parent 7448 0 R
+/Annots [ 7455 0 R 7456 0 R 7457 0 R 7458 0 R 7459 0 R 7460 0 R 7461 0 R 7462 0 R 7463 0 R 7464 0 R ]
 >> endobj
-7461 0 obj <<
+7455 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 215.592 270.598 228.543]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.padl.com/)>>
 >> endobj
-7462 0 obj <<
+7456 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 204.633 394.482 217.584]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://safari.oreilly.com/?XmlId=1-56592-491-6)>>
 >> endobj
-7463 0 obj <<
+7457 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 193.674 289.428 206.625]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.openldap.org/)>>
 >> endobj
-7464 0 obj <<
+7458 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 182.715 477.719 195.666]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.sun.com/software/products/directory_srvr_ee/index.xml)>>
 >> endobj
-7465 0 obj <<
+7459 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 171.756 374.159 184.707]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.novell.com/products/edirectory/)>>
 >> endobj
-7466 0 obj <<
+7460 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 160.797 483.423 173.748]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www-306.ibm.com/software/tivoli/products/directory-server/)>>
 >> endobj
-7467 0 obj <<
+7461 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 149.838 388.281 162.789]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.redhat.com/software/rha/directory/)>>
 >> endobj
-7468 0 obj <<
+7462 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 138.879 402.403 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxsecurity.com/content/view/119229)>>
 >> endobj
-7469 0 obj <<
+7463 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 127.92 427.932 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.unav.es/cti/ldap-smb/ldap-smb-3-howto.html)>>
 >> endobj
-7470 0 obj <<
+7464 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 289.428 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://samba.idealx.org/)>>
 >> endobj
-7474 0 obj <<
-/D [7472 0 R /XYZ 151.701 685.529 null]
+7468 0 obj <<
+/D [7466 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7471 0 obj <<
+7465 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F51 3736 0 R /F15 3700 0 R /F29 5413 0 R /F59 4373 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7479 0 obj <<
+7473 0 obj <<
 /Length 1996      
 /Filter /FlateDecode
 >>
@@ -32094,47 +33467,47 @@
 D ×µ7|w8Õ]zj÷;×0Œ à¹aSˆÍ=‡RÓŠ&6舉%x2m^l¯ä	Èäv²µQcƒ¨±±	McCŒo…_îÂ-LðÊÉ{oHèíõÅïHùÔkh¤l7õ3r°ôœ,|S…‰»š<Nf?Í	mÿíÛŒð%óÃáÓŒù$#¹ýy¡5_£FwèÙyàOë<£Q‹¹es»ÿN\<}MÕE8 >Ü,EWÿ8¼çC7š>YMpHҐüÿMTÿ!8ÿ­6ÿ\
 endstream
 endobj
-7478 0 obj <<
+7472 0 obj <<
 /Type /Page
-/Contents 7479 0 R
-/Resources 7477 0 R
+/Contents 7473 0 R
+/Resources 7471 0 R
 /MediaBox [0 0 612 792]
-/Parent 7454 0 R
-/Annots [ 7475 0 R 7476 0 R ]
+/Parent 7448 0 R
+/Annots [ 7469 0 R 7470 0 R ]
 >> endobj
-7475 0 obj <<
+7469 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [211.865 520.246 359.737 531.936]
 /Subtype /Link
 /A << /S /GoTo /D (bugreport) >>
 >> endobj
-7476 0 obj <<
+7470 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 229.204 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(mailto:jerry at samba.org)>>
 >> endobj
-7480 0 obj <<
-/D [7478 0 R /XYZ 100.892 685.529 null]
+7474 0 obj <<
+/D [7472 0 R /XYZ 100.892 685.529 null]
 >> endobj
 870 0 obj <<
-/D [7478 0 R /XYZ 100.892 621.723 null]
+/D [7472 0 R /XYZ 100.892 621.723 null]
 >> endobj
-7481 0 obj <<
-/D [7478 0 R /XYZ 100.892 595.753 null]
+7475 0 obj <<
+/D [7472 0 R /XYZ 100.892 595.753 null]
 >> endobj
 874 0 obj <<
-/D [7478 0 R /XYZ 100.892 488.649 null]
+/D [7472 0 R /XYZ 100.892 488.649 null]
 >> endobj
-7482 0 obj <<
-/D [7478 0 R /XYZ 100.892 462.679 null]
+7476 0 obj <<
+/D [7472 0 R /XYZ 100.892 462.679 null]
 >> endobj
-7477 0 obj <<
+7471 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7485 0 obj <<
+7479 0 obj <<
 /Length 1891      
 /Filter /FlateDecode
 >>
@@ -32164,27 +33537,27 @@
 ”:¯hp•nóœ¦ö‡ÇÍÿ V9ü
 endstream
 endobj
-7484 0 obj <<
+7478 0 obj <<
 /Type /Page
-/Contents 7485 0 R
-/Resources 7483 0 R
+/Contents 7479 0 R
+/Resources 7477 0 R
 /MediaBox [0 0 612 792]
-/Parent 7454 0 R
+/Parent 7448 0 R
 >> endobj
-7486 0 obj <<
-/D [7484 0 R /XYZ 151.701 685.529 null]
+7480 0 obj <<
+/D [7478 0 R /XYZ 151.701 685.529 null]
 >> endobj
 878 0 obj <<
-/D [7484 0 R /XYZ 151.701 448.279 null]
+/D [7478 0 R /XYZ 151.701 448.279 null]
 >> endobj
-7487 0 obj <<
-/D [7484 0 R /XYZ 151.701 421.287 null]
+7481 0 obj <<
+/D [7478 0 R /XYZ 151.701 421.287 null]
 >> endobj
-7483 0 obj <<
+7477 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7490 0 obj <<
+7484 0 obj <<
 /Length 957       
 /Filter /FlateDecode
 >>
@@ -32201,21 +33574,21 @@
 [©ÆÑ|;Îòÿæ¿_ëy]£å;Þ)>þË™Oøóô/êå¯ý
 endstream
 endobj
-7489 0 obj <<
+7483 0 obj <<
 /Type /Page
-/Contents 7490 0 R
-/Resources 7488 0 R
+/Contents 7484 0 R
+/Resources 7482 0 R
 /MediaBox [0 0 612 792]
-/Parent 7454 0 R
+/Parent 7448 0 R
 >> endobj
-7491 0 obj <<
-/D [7489 0 R /XYZ 100.892 685.529 null]
+7485 0 obj <<
+/D [7483 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7488 0 obj <<
+7482 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7494 0 obj <<
+7488 0 obj <<
 /Length 897       
 /Filter /FlateDecode
 >>
@@ -32230,27 +33603,27 @@
 z_¨)™Š‚ôªEõސY¡?ÏËÅÕ?·c*^¾µK)úu7|Òì¾Evÿúç+ç—]
 endstream
 endobj
-7493 0 obj <<
+7487 0 obj <<
 /Type /Page
-/Contents 7494 0 R
-/Resources 7492 0 R
+/Contents 7488 0 R
+/Resources 7486 0 R
 /MediaBox [0 0 612 792]
-/Parent 7497 0 R
+/Parent 7491 0 R
 >> endobj
-7495 0 obj <<
-/D [7493 0 R /XYZ 151.701 685.529 null]
+7489 0 obj <<
+/D [7487 0 R /XYZ 151.701 685.529 null]
 >> endobj
 882 0 obj <<
-/D [7493 0 R /XYZ 151.701 608.87 null]
+/D [7487 0 R /XYZ 151.701 608.87 null]
 >> endobj
-7496 0 obj <<
-/D [7493 0 R /XYZ 151.701 582.579 null]
+7490 0 obj <<
+/D [7487 0 R /XYZ 151.701 582.579 null]
 >> endobj
-7492 0 obj <<
+7486 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F17 3698 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7500 0 obj <<
+7494 0 obj <<
 /Length 827       
 /Filter /FlateDecode
 >>
@@ -32270,21 +33643,21 @@
 ‘n„oœß=}ž
 endstream
 endobj
-7499 0 obj <<
+7493 0 obj <<
 /Type /Page
-/Contents 7500 0 R
-/Resources 7498 0 R
+/Contents 7494 0 R
+/Resources 7492 0 R
 /MediaBox [0 0 612 792]
-/Parent 7497 0 R
+/Parent 7491 0 R
 >> endobj
-7501 0 obj <<
-/D [7499 0 R /XYZ 100.892 685.529 null]
+7495 0 obj <<
+/D [7493 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7498 0 obj <<
+7492 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7504 0 obj <<
+7498 0 obj <<
 /Length 1789      
 /Filter /FlateDecode
 >>
@@ -32305,46 +33678,46 @@
 õDš4‰á›¸r1aáúK÷uYÔb¡ÉáöƪŠÓ1|3¡æ_"k³a¾ºþ‹we
 endstream
 endobj
-7503 0 obj <<
+7497 0 obj <<
 /Type /Page
-/Contents 7504 0 R
-/Resources 7502 0 R
+/Contents 7498 0 R
+/Resources 7496 0 R
 /MediaBox [0 0 612 792]
-/Parent 7497 0 R
+/Parent 7491 0 R
 >> endobj
-7505 0 obj <<
-/D [7503 0 R /XYZ 151.701 685.529 null]
+7499 0 obj <<
+/D [7497 0 R /XYZ 151.701 685.529 null]
 >> endobj
 886 0 obj <<
-/D [7503 0 R /XYZ 151.701 500.415 null]
+/D [7497 0 R /XYZ 151.701 500.415 null]
 >> endobj
-7506 0 obj <<
-/D [7503 0 R /XYZ 151.701 476.213 null]
+7500 0 obj <<
+/D [7497 0 R /XYZ 151.701 476.213 null]
 >> endobj
-7507 0 obj <<
-/D [7503 0 R /XYZ 151.701 180.444 null]
+7501 0 obj <<
+/D [7497 0 R /XYZ 151.701 180.444 null]
 >> endobj
-7508 0 obj <<
-/D [7503 0 R /XYZ 151.701 181.021 null]
+7502 0 obj <<
+/D [7497 0 R /XYZ 151.701 181.021 null]
 >> endobj
-7509 0 obj <<
-/D [7503 0 R /XYZ 151.701 169.066 null]
+7503 0 obj <<
+/D [7497 0 R /XYZ 151.701 169.066 null]
 >> endobj
-7510 0 obj <<
-/D [7503 0 R /XYZ 151.701 157.111 null]
+7504 0 obj <<
+/D [7497 0 R /XYZ 151.701 157.111 null]
 >> endobj
-7511 0 obj <<
-/D [7503 0 R /XYZ 151.701 145.155 null]
+7505 0 obj <<
+/D [7497 0 R /XYZ 151.701 145.155 null]
 >> endobj
-7512 0 obj <<
-/D [7503 0 R /XYZ 151.701 133.2 null]
+7506 0 obj <<
+/D [7497 0 R /XYZ 151.701 133.2 null]
 >> endobj
-7502 0 obj <<
+7496 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F88 5678 0 R /F72 5679 0 R /F53 3738 0 R /F17 3698 0 R /F15 3700 0 R /F4 5484 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7516 0 obj <<
+7510 0 obj <<
 /Length 2336      
 /Filter /FlateDecode
 >>
@@ -32366,68 +33739,68 @@
 oó!ÛmJÆíeO´›”EÞ)‰ý°Js¢–Y•4UeO'vàÊÍo·»È)î†`Çã1øazZ7·Ù<ñ«ë«'g7siQfmœ2Wàh^Œc?Øìà”ª‚½Ûܼ´Ø¯P(Íá ho%[N¿OŽDHøöRãÄÊMþÖb׳rD[ÆpsþåúiúãFjI2¶ôð^aþ¼°Û%	š Ö@Ø(œ{>ÿ6…R¯›Ö‡6ÇÜÁǝúœW›<Í“òqÛá}w´@±*…È9;zуûæÿé`
 endstream
 endobj
-7515 0 obj <<
+7509 0 obj <<
 /Type /Page
-/Contents 7516 0 R
-/Resources 7514 0 R
+/Contents 7510 0 R
+/Resources 7508 0 R
 /MediaBox [0 0 612 792]
-/Parent 7497 0 R
-/Annots [ 7513 0 R ]
+/Parent 7491 0 R
+/Annots [ 7507 0 R ]
 >> endobj
-7513 0 obj <<
+7507 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 490.961 175.07 502.651]
 /Subtype /Link
 /A << /S /GoTo /D (confldapex) >>
 >> endobj
-7517 0 obj <<
-/D [7515 0 R /XYZ 100.892 685.529 null]
+7511 0 obj <<
+/D [7509 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7518 0 obj <<
-/D [7515 0 R /XYZ 100.892 661.619 null]
+7512 0 obj <<
+/D [7509 0 R /XYZ 100.892 661.619 null]
 >> endobj
-7519 0 obj <<
-/D [7515 0 R /XYZ 100.892 649.664 null]
+7513 0 obj <<
+/D [7509 0 R /XYZ 100.892 649.664 null]
 >> endobj
-7520 0 obj <<
-/D [7515 0 R /XYZ 100.892 637.709 null]
+7514 0 obj <<
+/D [7509 0 R /XYZ 100.892 637.709 null]
 >> endobj
-7521 0 obj <<
-/D [7515 0 R /XYZ 100.892 625.753 null]
+7515 0 obj <<
+/D [7509 0 R /XYZ 100.892 625.753 null]
 >> endobj
-7522 0 obj <<
-/D [7515 0 R /XYZ 100.892 613.798 null]
+7516 0 obj <<
+/D [7509 0 R /XYZ 100.892 613.798 null]
 >> endobj
-7523 0 obj <<
-/D [7515 0 R /XYZ 100.892 601.843 null]
+7517 0 obj <<
+/D [7509 0 R /XYZ 100.892 601.843 null]
 >> endobj
-7524 0 obj <<
-/D [7515 0 R /XYZ 100.892 589.888 null]
+7518 0 obj <<
+/D [7509 0 R /XYZ 100.892 589.888 null]
 >> endobj
-7525 0 obj <<
-/D [7515 0 R /XYZ 100.892 577.933 null]
+7519 0 obj <<
+/D [7509 0 R /XYZ 100.892 577.933 null]
 >> endobj
-7526 0 obj <<
-/D [7515 0 R /XYZ 100.892 565.978 null]
+7520 0 obj <<
+/D [7509 0 R /XYZ 100.892 565.978 null]
 >> endobj
 890 0 obj <<
-/D [7515 0 R /XYZ 100.892 475.555 null]
+/D [7509 0 R /XYZ 100.892 475.555 null]
 >> endobj
-7527 0 obj <<
-/D [7515 0 R /XYZ 100.892 448.107 null]
+7521 0 obj <<
+/D [7509 0 R /XYZ 100.892 448.107 null]
 >> endobj
 894 0 obj <<
-/D [7515 0 R /XYZ 100.892 217.266 null]
+/D [7509 0 R /XYZ 100.892 217.266 null]
 >> endobj
-7528 0 obj <<
-/D [7515 0 R /XYZ 100.892 189.817 null]
+7522 0 obj <<
+/D [7509 0 R /XYZ 100.892 189.817 null]
 >> endobj
-7514 0 obj <<
+7508 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F4 5484 0 R /F53 3738 0 R /F17 3698 0 R /F51 3736 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7533 0 obj <<
+7527 0 obj <<
 /Length 4563      
 /Filter /FlateDecode
 >>
@@ -32479,129 +33852,129 @@
 Ÿ|õó—¯/ùT·Ð}Yè_  ›ßÐß8!äj‡ä“?èî柞ॾؗË7ÊXþ)ª&ËËåÍK¤Î½iýÔgŸª>èñ\ñÿÏÀ ¤
 endstream
 endobj
-7532 0 obj <<
+7526 0 obj <<
 /Type /Page
-/Contents 7533 0 R
-/Resources 7531 0 R
+/Contents 7527 0 R
+/Resources 7525 0 R
 /MediaBox [0 0 612 792]
-/Parent 7497 0 R
-/Annots [ 7530 0 R 7564 0 R ]
+/Parent 7491 0 R
+/Annots [ 7524 0 R 7558 0 R ]
 >> endobj
-7530 0 obj <<
+7524 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.259 131.071 511.352 143.972]
 /Subtype /Link
 /A << /S /GoTo /D (passdb) >>
 >> endobj
-7564 0 obj <<
+7558 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 120.249 315.122 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (passdb) >>
 >> endobj
-7534 0 obj <<
-/D [7532 0 R /XYZ 151.701 685.529 null]
+7528 0 obj <<
+/D [7526 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5059 0 obj <<
-/D [7532 0 R /XYZ 151.701 660.623 null]
+/D [7526 0 R /XYZ 151.701 660.623 null]
 >> endobj
+7523 0 obj <<
+/D [7526 0 R /XYZ 151.701 643.753 null]
+>> endobj
 7529 0 obj <<
-/D [7532 0 R /XYZ 151.701 643.753 null]
+/D [7526 0 R /XYZ 151.701 637.775 null]
 >> endobj
+7530 0 obj <<
+/D [7526 0 R /XYZ 151.701 644.051 null]
+>> endobj
+7531 0 obj <<
+/D [7526 0 R /XYZ 151.701 632.096 null]
+>> endobj
+7532 0 obj <<
+/D [7526 0 R /XYZ 151.701 620.141 null]
+>> endobj
+7533 0 obj <<
+/D [7526 0 R /XYZ 151.701 608.186 null]
+>> endobj
+7534 0 obj <<
+/D [7526 0 R /XYZ 151.701 596.231 null]
+>> endobj
 7535 0 obj <<
-/D [7532 0 R /XYZ 151.701 637.775 null]
+/D [7526 0 R /XYZ 151.701 584.276 null]
 >> endobj
 7536 0 obj <<
-/D [7532 0 R /XYZ 151.701 644.051 null]
+/D [7526 0 R /XYZ 151.701 572.32 null]
 >> endobj
 7537 0 obj <<
-/D [7532 0 R /XYZ 151.701 632.096 null]
+/D [7526 0 R /XYZ 151.701 560.365 null]
 >> endobj
 7538 0 obj <<
-/D [7532 0 R /XYZ 151.701 620.141 null]
+/D [7526 0 R /XYZ 151.701 548.41 null]
 >> endobj
 7539 0 obj <<
-/D [7532 0 R /XYZ 151.701 608.186 null]
+/D [7526 0 R /XYZ 151.701 536.455 null]
 >> endobj
 7540 0 obj <<
-/D [7532 0 R /XYZ 151.701 596.231 null]
+/D [7526 0 R /XYZ 151.701 524.5 null]
 >> endobj
 7541 0 obj <<
-/D [7532 0 R /XYZ 151.701 584.276 null]
+/D [7526 0 R /XYZ 151.701 500.589 null]
 >> endobj
 7542 0 obj <<
-/D [7532 0 R /XYZ 151.701 572.32 null]
+/D [7526 0 R /XYZ 151.701 488.634 null]
 >> endobj
 7543 0 obj <<
-/D [7532 0 R /XYZ 151.701 560.365 null]
+/D [7526 0 R /XYZ 151.701 476.679 null]
 >> endobj
 7544 0 obj <<
-/D [7532 0 R /XYZ 151.701 548.41 null]
+/D [7526 0 R /XYZ 151.701 464.724 null]
 >> endobj
 7545 0 obj <<
-/D [7532 0 R /XYZ 151.701 536.455 null]
+/D [7526 0 R /XYZ 151.701 452.769 null]
 >> endobj
 7546 0 obj <<
-/D [7532 0 R /XYZ 151.701 524.5 null]
+/D [7526 0 R /XYZ 151.701 428.858 null]
 >> endobj
 7547 0 obj <<
-/D [7532 0 R /XYZ 151.701 500.589 null]
+/D [7526 0 R /XYZ 151.701 416.903 null]
 >> endobj
 7548 0 obj <<
-/D [7532 0 R /XYZ 151.701 488.634 null]
+/D [7526 0 R /XYZ 151.701 404.948 null]
 >> endobj
 7549 0 obj <<
-/D [7532 0 R /XYZ 151.701 476.679 null]
+/D [7526 0 R /XYZ 151.701 392.993 null]
 >> endobj
 7550 0 obj <<
-/D [7532 0 R /XYZ 151.701 464.724 null]
+/D [7526 0 R /XYZ 151.701 369.083 null]
 >> endobj
 7551 0 obj <<
-/D [7532 0 R /XYZ 151.701 452.769 null]
+/D [7526 0 R /XYZ 151.701 357.127 null]
 >> endobj
 7552 0 obj <<
-/D [7532 0 R /XYZ 151.701 428.858 null]
+/D [7526 0 R /XYZ 151.701 345.172 null]
 >> endobj
 7553 0 obj <<
-/D [7532 0 R /XYZ 151.701 416.903 null]
+/D [7526 0 R /XYZ 151.701 333.217 null]
 >> endobj
 7554 0 obj <<
-/D [7532 0 R /XYZ 151.701 404.948 null]
+/D [7526 0 R /XYZ 151.701 321.262 null]
 >> endobj
 7555 0 obj <<
-/D [7532 0 R /XYZ 151.701 392.993 null]
+/D [7526 0 R /XYZ 151.701 309.307 null]
 >> endobj
 7556 0 obj <<
-/D [7532 0 R /XYZ 151.701 369.083 null]
+/D [7526 0 R /XYZ 151.701 297.352 null]
 >> endobj
 7557 0 obj <<
-/D [7532 0 R /XYZ 151.701 357.127 null]
+/D [7526 0 R /XYZ 151.701 273.441 null]
 >> endobj
-7558 0 obj <<
-/D [7532 0 R /XYZ 151.701 345.172 null]
->> endobj
-7559 0 obj <<
-/D [7532 0 R /XYZ 151.701 333.217 null]
->> endobj
-7560 0 obj <<
-/D [7532 0 R /XYZ 151.701 321.262 null]
->> endobj
-7561 0 obj <<
-/D [7532 0 R /XYZ 151.701 309.307 null]
->> endobj
-7562 0 obj <<
-/D [7532 0 R /XYZ 151.701 297.352 null]
->> endobj
-7563 0 obj <<
-/D [7532 0 R /XYZ 151.701 273.441 null]
->> endobj
-7531 0 obj <<
+7525 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F4 5484 0 R /F59 4373 0 R /F51 3736 0 R /F52 3737 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7570 0 obj <<
+7564 0 obj <<
 /Length 2024      
 /Filter /FlateDecode
 >>
@@ -32623,49 +33996,49 @@
 N'èç÷ÿøñ‡{éNÑ®ÉÕ¡9¥çzΤ×`ŸÆjÝ—?Ôai®=¬fÿ‡àϯËO ³Ì“ð…_Ì€L! ³ ®Šâ"¿¼÷Xðuõ¦QQžZω¹N£/gåäSžY19¤ÖY™/G6˜ ¶wK£Ð_Ú{‹žƒøetrNsÿýn»ø7tGi
 endstream
 endobj
-7569 0 obj <<
+7563 0 obj <<
 /Type /Page
-/Contents 7570 0 R
-/Resources 7568 0 R
+/Contents 7564 0 R
+/Resources 7562 0 R
 /MediaBox [0 0 612 792]
-/Parent 7497 0 R
-/Annots [ 7565 0 R 7566 0 R 7567 0 R ]
+/Parent 7491 0 R
+/Annots [ 7559 0 R 7560 0 R 7561 0 R ]
 >> endobj
-7565 0 obj <<
+7559 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [160.259 308.612 211.646 320.301]
 /Subtype /Link
 /A << /S /GoTo /D (attribobjclPartA) >>
 >> endobj
-7566 0 obj <<
+7560 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [237.532 308.612 288.918 320.301]
 /Subtype /Link
 /A << /S /GoTo /D (attribobjclPartB) >>
 >> endobj
-7567 0 obj <<
+7561 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.136 274 370.308 286.902]
 /Subtype /Link
 /A << /S /GoTo /D (samba-pdc) >>
 >> endobj
-7571 0 obj <<
-/D [7569 0 R /XYZ 100.892 685.529 null]
+7565 0 obj <<
+/D [7563 0 R /XYZ 100.892 685.529 null]
 >> endobj
 898 0 obj <<
-/D [7569 0 R /XYZ 100.892 371.828 null]
+/D [7563 0 R /XYZ 100.892 371.828 null]
 >> endobj
-7572 0 obj <<
-/D [7569 0 R /XYZ 100.892 343.604 null]
+7566 0 obj <<
+/D [7563 0 R /XYZ 100.892 343.604 null]
 >> endobj
-7568 0 obj <<
+7562 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F17 3698 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7577 0 obj <<
+7571 0 obj <<
 /Length 1384      
 /Filter /FlateDecode
 >>
@@ -32682,27 +34055,27 @@
 Ø0ûòÓP_pÍÑ™WÕãøgø;—åüð3ìqØM–=¨pì¡Mw:ê0"Kå0ZžOPAì› Ú7–]9m½;ì¾ß»¥ãxЭ-õOÜ´`oËú‚Ü8{uþð„H(º~Â"ê<2—Uc¿¥¼–H^÷,¯á¥ü$wjïU%‹ÌÍÏ­/§ªÿÓÍ¿”s¼==ýóc3oöåj^Ýþ»XÝ¿Ûþ²ß
 endstream
 endobj
-7576 0 obj <<
+7570 0 obj <<
 /Type /Page
-/Contents 7577 0 R
-/Resources 7575 0 R
+/Contents 7571 0 R
+/Resources 7569 0 R
 /MediaBox [0 0 612 792]
-/Parent 7580 0 R
+/Parent 7574 0 R
 >> endobj
-7578 0 obj <<
-/D [7576 0 R /XYZ 151.701 685.529 null]
+7572 0 obj <<
+/D [7570 0 R /XYZ 151.701 685.529 null]
 >> endobj
 902 0 obj <<
-/D [7576 0 R /XYZ 151.701 552.157 null]
+/D [7570 0 R /XYZ 151.701 552.157 null]
 >> endobj
-7579 0 obj <<
-/D [7576 0 R /XYZ 151.701 526.553 null]
+7573 0 obj <<
+/D [7570 0 R /XYZ 151.701 526.553 null]
 >> endobj
-7575 0 obj <<
+7569 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F59 4373 0 R /F51 3736 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7584 0 obj <<
+7578 0 obj <<
 /Length 1534      
 /Filter /FlateDecode
 >>
@@ -32718,41 +34091,41 @@
 ]¹c˜"’Ðqó®O^~„É`JœÂS퉚)‚©Ñ«›‡Ìdç	³í/<›”	•"F"ß^}W¤B<0¥a9òUQ®s]M–6EB©žR¼êC`ÚǬº~¦b¼kŸöº.¦3|۱К’…šÜÛ¹`´_öo'CR`£JL’ÿ7‰”‡‘%éL~qkT_O©Náq8û3T›hÑôHõí·:¡ýýOÑI _p2Öyu}ñúò	Åðª!”üÅ	@iÊÇŠoòŸÍf.\4¾Tڐ '!Ù5dÙQÏop¿ÈÇó’?ÎKŠÍãðzs`…Áڭʍh”;Š}Þxô%áqÇ1wjafãN"Ž…c7p€nN’<ŒA«ó=`Øľ³üÁá#yÛ–‹Ó®Ò›<^7ù®*ºS˜P …Ó0UŽ°€°Û-<¨ùz¤¸AGŽSŽ”òpm¦Ncƒb4¢ðïKØèªkÜnð×\‚õ†§Ó9Jž*¤ïz"¤†¿BaþÐVÚL
 endstream
 endobj
-7583 0 obj <<
+7577 0 obj <<
 /Type /Page
-/Contents 7584 0 R
-/Resources 7582 0 R
+/Contents 7578 0 R
+/Resources 7576 0 R
 /MediaBox [0 0 612 792]
-/Parent 7580 0 R
-/Annots [ 7581 0 R ]
+/Parent 7574 0 R
+/Annots [ 7575 0 R ]
 >> endobj
-7581 0 obj <<
+7575 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.627 313.379 439.013 325.068]
 /Subtype /Link
 /A << /S /GoTo /D (ldappwsync) >>
 >> endobj
-7585 0 obj <<
-/D [7583 0 R /XYZ 100.892 685.529 null]
+7579 0 obj <<
+/D [7577 0 R /XYZ 100.892 685.529 null]
 >> endobj
 906 0 obj <<
-/D [7583 0 R /XYZ 100.892 423.254 null]
+/D [7577 0 R /XYZ 100.892 423.254 null]
 >> endobj
-7586 0 obj <<
-/D [7583 0 R /XYZ 100.892 390.812 null]
+7580 0 obj <<
+/D [7577 0 R /XYZ 100.892 390.812 null]
 >> endobj
 910 0 obj <<
-/D [7583 0 R /XYZ 100.892 266.529 null]
+/D [7577 0 R /XYZ 100.892 266.529 null]
 >> endobj
-7587 0 obj <<
-/D [7583 0 R /XYZ 100.892 236.209 null]
+7581 0 obj <<
+/D [7577 0 R /XYZ 100.892 236.209 null]
 >> endobj
-7582 0 obj <<
+7576 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7592 0 obj <<
+7586 0 obj <<
 /Length 736       
 /Filter /FlateDecode
 >>
@@ -32765,47 +34138,47 @@
 ¿¼)M˜Ð»ùßàEÈV¸¼75{&Êíþ¿™´„v
 endstream
 endobj
-7591 0 obj <<
+7585 0 obj <<
 /Type /Page
-/Contents 7592 0 R
-/Resources 7590 0 R
+/Contents 7586 0 R
+/Resources 7584 0 R
 /MediaBox [0 0 612 792]
-/Parent 7580 0 R
-/Annots [ 7589 0 R ]
+/Parent 7574 0 R
+/Annots [ 7583 0 R ]
 >> endobj
-7589 0 obj <<
+7583 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.523 560.056 257.091 569.624]
 /Subtype /Link
 /A << /S /GoTo /D (acctmgmttools) >>
 >> endobj
-7593 0 obj <<
-/D [7591 0 R /XYZ 151.701 685.529 null]
+7587 0 obj <<
+/D [7585 0 R /XYZ 151.701 685.529 null]
 >> endobj
 914 0 obj <<
-/D [7591 0 R /XYZ 151.701 660.623 null]
+/D [7585 0 R /XYZ 151.701 660.623 null]
 >> endobj
-7594 0 obj <<
-/D [7591 0 R /XYZ 151.701 641.209 null]
+7588 0 obj <<
+/D [7585 0 R /XYZ 151.701 641.209 null]
 >> endobj
 918 0 obj <<
-/D [7591 0 R /XYZ 151.701 641.209 null]
+/D [7585 0 R /XYZ 151.701 641.209 null]
 >> endobj
-7595 0 obj <<
-/D [7591 0 R /XYZ 151.701 612.925 null]
+7589 0 obj <<
+/D [7585 0 R /XYZ 151.701 612.925 null]
 >> endobj
 922 0 obj <<
-/D [7591 0 R /XYZ 151.701 548.136 null]
+/D [7585 0 R /XYZ 151.701 548.136 null]
 >> endobj
-7596 0 obj <<
-/D [7591 0 R /XYZ 151.701 519.851 null]
+7590 0 obj <<
+/D [7585 0 R /XYZ 151.701 519.851 null]
 >> endobj
-7590 0 obj <<
+7584 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7599 0 obj <<
+7593 0 obj <<
 /Length 3117      
 /Filter /FlateDecode
 >>
@@ -32843,27 +34216,27 @@
 ¾ˆLAh¢|o(UÅq_H¦™Ú¸‡#pŽ?îÁ9þ¶ƒwëòÑAT«ÇEeç`›運áÓü2¸A\s¸uì÷ÍÿES\
 endstream
 endobj
-7598 0 obj <<
+7592 0 obj <<
 /Type /Page
-/Contents 7599 0 R
-/Resources 7597 0 R
+/Contents 7593 0 R
+/Resources 7591 0 R
 /MediaBox [0 0 612 792]
-/Parent 7580 0 R
+/Parent 7574 0 R
 >> endobj
-7600 0 obj <<
-/D [7598 0 R /XYZ 100.892 685.529 null]
+7594 0 obj <<
+/D [7592 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5319 0 obj <<
-/D [7598 0 R /XYZ 100.892 660.623 null]
+/D [7592 0 R /XYZ 100.892 660.623 null]
 >> endobj
-7573 0 obj <<
-/D [7598 0 R /XYZ 100.892 631.719 null]
+7567 0 obj <<
+/D [7592 0 R /XYZ 100.892 631.719 null]
 >> endobj
-7597 0 obj <<
+7591 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7603 0 obj <<
+7597 0 obj <<
 /Length 1784      
 /Filter /FlateDecode
 >>
@@ -32883,33 +34256,33 @@
 „³ÕbŽËºïAgµû9ª MÔ£š¶´išw‹ß' ÒPÙÂ͆¼tÔˆ~óE_öˆæ:”0<‰hŽ-€¢]Ñ_{dR(éO"“bßùñrtñö[\rCy¹˜ dØ|…•ÿùõõÍhKæÜ?u<ÏœÈCî÷N·¹] JÇýÙñ/KÐB<
 endstream
 endobj
-7602 0 obj <<
+7596 0 obj <<
 /Type /Page
-/Contents 7603 0 R
-/Resources 7601 0 R
+/Contents 7597 0 R
+/Resources 7595 0 R
 /MediaBox [0 0 612 792]
-/Parent 7580 0 R
+/Parent 7574 0 R
 >> endobj
-7604 0 obj <<
-/D [7602 0 R /XYZ 151.701 685.529 null]
+7598 0 obj <<
+/D [7596 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5320 0 obj <<
-/D [7602 0 R /XYZ 151.701 615.927 null]
+/D [7596 0 R /XYZ 151.701 615.927 null]
 >> endobj
-7574 0 obj <<
-/D [7602 0 R /XYZ 151.701 587.023 null]
+7568 0 obj <<
+/D [7596 0 R /XYZ 151.701 587.023 null]
 >> endobj
 5321 0 obj <<
-/D [7602 0 R /XYZ 151.701 309.137 null]
+/D [7596 0 R /XYZ 151.701 309.137 null]
 >> endobj
-7588 0 obj <<
-/D [7602 0 R /XYZ 151.701 292.267 null]
+7582 0 obj <<
+/D [7596 0 R /XYZ 151.701 292.267 null]
 >> endobj
-7601 0 obj <<
+7595 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7607 0 obj <<
+7601 0 obj <<
 /Length 1315      
 /Filter /FlateDecode
 >>
@@ -32929,531 +34302,1483 @@
 ê‹Tÿ?%“;ÿBÉKwÎþaœ¿ä :¡y˜4†‡—¶”…Gs:¨~«k%e
 endstream
 endobj
-7606 0 obj <<
+7600 0 obj <<
 /Type /Page
-/Contents 7607 0 R
-/Resources 7605 0 R
+/Contents 7601 0 R
+/Resources 7599 0 R
 /MediaBox [0 0 612 792]
-/Parent 7580 0 R
+/Parent 7574 0 R
 >> endobj
-7608 0 obj <<
-/D [7606 0 R /XYZ 100.892 685.529 null]
+7602 0 obj <<
+/D [7600 0 R /XYZ 100.892 685.529 null]
 >> endobj
 926 0 obj <<
-/D [7606 0 R /XYZ 100.892 660.623 null]
+/D [7600 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3780 0 obj <<
-/D [7606 0 R /XYZ 100.892 459.31 null]
+/D [7600 0 R /XYZ 100.892 459.31 null]
 >> endobj
-7605 0 obj <<
+7599 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F50 3701 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R /F85 5513 0 R >>
-/XObject << /Im3 6520 0 R >>
+/XObject << /Im3 6519 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7617 0 obj <<
-/Length 1250      
+7611 0 obj <<
+/Length 1248      
 /Filter /FlateDecode
 >>
 stream
-xڝVKÛ6¾ûWèH5MŠÔ+·$Û]8èÛ®ƒ.°ÍA–d[€,9¢gûë;áüZe‹ö"gFÃož¤ð6žðî&–“ùm <)x"é-מ$„ôÂ8áA¢½eî=3_‰é×å§ù­ï{1OÂP[Uqª‚”îÚ¦ßOg*Ðì>ÝïËzón:Ó‘b÷Äý³¬ófª;b¤uŽDÀ¾L%û¼˜Î${‚–!û¸M÷]Ñ’Xúxúä×åäۏÀg8®”—í&Ï_…—ƒì“'¸Jbï`5wž
-bЕ÷8ù}"Ν—‘'}žR_8¯nD¿@.•‚ÝN•dEÚõm.„‘sˆE]ü%¤îEJçQÞLù\ 
-kò1ÝMý˜­Òé̏$K«ªÁ=Æ÷ݶp‚|WÖ¥éÚ´kZ'khÍZÀáÔ0À¸R€Ï}^ê¹/ÄÚm(AÖp6C˜ˆK*è„peM_ãÿzçKç/ì©–Ñ®J@Ó–Õ	RcP̲ÒÂA%€¿#é¡ì¶Äûòyñ4ÿ­´Öû$ux¬Ýìt4ùŠ‡W¥¥.4‰“¥5+¤ Í.­ÓM‘Ó¦7PDÚØ"AU©.ƒ†MûJs4jg1÷}†ñž?=àF±(ì¶YÆ`q—M=Ål“ìþþ#ýÑQ›
-„VC߈ˆ½ßïÛfßR`Q‘Âm±N3Ç2Y[î;CͶé«|âYh«hç{™S|¶E¨ó¢"ÚÛìV<kêõXyc»¨xÐ,×ÎjçVCk^˜²¥#±H0m^Uh›ÓÙ:ú"éèÞLú>µºôÒùogÆ™Ç!Kû®Ù¥]™A§½œú''ùa[ÔĆò0î'ê4H‹qFÚ‚tzS䐢@J¶¨îÖÉÒ•)jHÎY\Ï7k4' é’÷B©Ù,»¡µj°h‘JÝP¹Õ:à:ÖCØ?å³Ôs>–¤ #å“dÈtÛ×54‡ÃðˆIÙ¹Ùž†F8–…$áÂ/³ÐmmZãÈEˆS°aÓe^aÛ˜CÜ‘ÚÁÐþPVQ+›§f‡¦<'ÓXGŽZܸßSì9'¿CîH{¬Û+M…T–Ñ‹ZÛ´ÞXVÀÌžÊ*+qÖÛcÖÀz!+r•\ä*Œ9ºcôó]Š-¬/G³¥cûÇlÍÇlBö=bq3nî¶P‡ƒþ>mÓ]³Ä“e}ÿb@à5÷_5ÜÛ3á†«*øÏïq&<‰Ãë‹<J¢Ÿ^äo¼^t(¸åm¹é©]æ#hà L'ÚÅÍýû‡wu¼{€|\Ü̺fvG…¡Ù…iª¾ƒ±þ–cA kø^(×ë…i	ko4ðL›Xñ°Zæð‡cÌ;%½›Î8rÒšaÐ Ã XËÿøh`@6;ƒFï¬`,MRiÈ°{gÙY
-ošÜ
-½ËpT¤¦À1©à’s³taÐÀ³œÒ½[ê¦#§44
-8åkÖÔôr‘¬¢ñ>\	¨Œéü>µS¼ro8°ÆžKøòÐÒ?]6¸i‹¬ÙÔåßö’cÁª"5Gá_µHωÒà=[îP¬HÅz­ƒ7Å¿ÿ
-¨ý+5fI¶<6ùE÷(-á
-]PÝÅÿÃ
-eþÓ5	
+xڝVÝoÛ6÷_¡G˜iR$õÑ·¶YK‘-. ëƒ,˶ YrE©nö×ïŽG%¶£fØ^¤ãÝñx÷»RÛ@7“ËÉüÚˆ@
+žŠTËM ä±A”¤Ü¤:X®ƒG*1ýºü4¿à áii§ªb®@UÒMÛô‡éLÍn³Ã¡¬·ï¦3+v{OÜ?ËzÝL•`GKŒ¬^#aØ—©dŸÓ™dðÑ2bwÙ¡+ZËOŸüºœ|›àqàð‰Ÿ†+äûÉãW¬Aö)\¥Iptšû@™„GÆ ]÷“ß'â4x2ä©‘ú,xr$Ær	^I!ØõTIVd]ßBû€øPÔÅ_BêÎRÒœ¢*‚™’<™¼ÏöÓ0a«l:cɲªjp¸àºÛ^°Þ—ui»6ëšÖËúç-øáÕ`üÀ'†>/õ<â­¶” g8Ÿ¡›è—TÜè”üÊ›¾ÆýFJ](Ü©ŽÑ®Jð¦-«'dÖ¢C	ËKç*û{’ËnG¼/ŸóßJg½ÿAR›¿ÍÏBÅ•‘Å¥Ît‰“g5+çJA‹}VgÛbM‹ÞB=éÐE‚êRÃ†€ˆ¦}¥9ŠÛ	êaÈñùÃ.»ƒÒn›Ma-–wÙÔSÌ7Éno?ÒŽŽ0l*:=#böþph›CKТ"±Érϲy[:Kí®é«õ˜‹'ÐVÑÎ÷rMø4ìÊÖ¨Ó²Â
+n÷+ž7õf¬À±aT2h–oµóKÿuaË–ŽÄ2A(:Z¼ªжO¶s•ôYÒ1¼™Ciu¥ßM“ˆ#–õ]³Ïº2‡^{"9uКäÇ]QÊÃúMÔk덴éô¶XCŠŒ”lQ{ݝ—e+[Ԑœ“r®Ù ¹h8IŸ¼_ÐÕ„ÚͱúW
+-R™+ÃZ®=À~üTÈVPÏë±$D*|N’%Óm_×ÐÞ‡{L
+L§ØO§èelDcYHS.Âè<ÝÎ¥5‰=b@¼€
+‹~(ó×–ÀpGrhKëcYUD­\B¼š›nö¼˜Æ:òÔâÊoÏ°ç¼ü¹#í±i¬4QYD/®èßfõÖ±³*«¼ÄiïŽUXkàÖÑX	”«ô,WQÂaÔ=£¿Þg8Ð"Áúr4[:áIøœ­ù˜MȾÑ#·ãáv‹t4è²6Û0K,YÖ—þŸÍ ^óðUý=NÜC¸ª‚ÿü&×±àñë«<NãŸ^åo¼_t[#ß^—Ûž*QÑu>âmdÀt:x»¸º}÷QÏw÷‹«Y×Ìn¨04û£°MÕw0Öß
+ÌD Äÿz£\þ/MË8å!D	¦¿M7N<üsØáóÅ^Éઁ3^N9ÕšIÃc-ÿ‹³ÃæÙàÕìÄ-ze™±I¥!»þ•åæ(¼hj7ôn,Ç1‘ÙG¤‚ÎÏiP<ÒeAÃÎqJÿj©›ŽœlÐÌ4ÜT¨YSÓ»E²ŠFûp 2¦òûÔMðÊ¿dhôá°{,á«CËðå¢ÁE[äͶ.ÿvD”vW™}nðM‹$Ì8,˜!Á£ã…ŠôP¨—:xKüûVð:¼PcÎ#É–Ï
+~Ö9JK.L<t@]tgû‡?”ø?>„®
 endstream
 endobj
-7616 0 obj <<
+7610 0 obj <<
 /Type /Page
-/Contents 7617 0 R
-/Resources 7615 0 R
+/Contents 7611 0 R
+/Resources 7609 0 R
 /MediaBox [0 0 612 792]
-/Parent 7621 0 R
-/Annots [ 7611 0 R 7612 0 R ]
+/Parent 7615 0 R
+/Annots [ 7605 0 R 7606 0 R ]
 >> endobj
-7609 0 obj <<
+7603 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-HOWTO/images/idmap-sid2gid.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 7622 0 R
-/BBox [0 0 710 548]
+/PTEX.InfoDict 7616 0 R
+/BBox [0 0 759 548]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 7623 0 R
->>/Font << /R9 7624 0 R/R11 7625 0 R>>
+/R7 7617 0 R
+>>/Font << /R8 7618 0 R/R10 7619 0 R>>
 >>
-/Length 7626 0 R
+/Length 7620 0 R
 /Filter /FlateDecode
 >>
 stream
-xœåWMo7½ëWÌ19X)Q§AÛ —õ(z*œÝØu1c;vƒüý>ÎŒ4³ëÔÞ.“ ³¢)ŠOÔçÎYêœþ›¿ÛÁ¼;OÝõ£q6GÏâ'?®
-u7†J–}'œ¬”Ð
-†£›C“ô”d‰›„S"ˆmÊ¥.ÿûÐmͼ&.6ÈçÝ$Öå’»j¿®·Í‡*é
-ea[b“PJÙ–ÔlÖu;³
-ªOÕ@uù0Ì­¹2œ±7J÷ÕŒÉëÎ?¼Þllæ Ÿ
-M¿çÏvèÞ_ PmNØÅ•™€†p\´"±c¶D1tƒyóá—ß^üm~º0¿
-,–©ó)ý*	¶øÎã`õ©G%ŽÑÚòDV‚Ê -U§z³¥¢©'iÚÇäìÒóЄŸû„^b´Ú‚(mözBƧ.Q{çŠM‹2ì5‘9Áʲv1iUQþYr€‹HÔl!Ä„vE)ô€ºØ6ª¤7Ù+)4IòÑIÍ`]/G6ÉìTµP>ŒR{áµF~*îÉeë$€ž,ì¯î¾Ü+ð) o”»³¶ogÞlVMñ<+‡ cÞØyØÖfWÈrl’Þ¡Q5‰°€dÀ…ñ]­µ¡bD MÑ h±j„½¥«gÔõ¶ùQ%½	>z«t2K¶AšÍ¶n§6ÉìWµPý>ŒU¡øºã?A¢€>%0}È#"¾¼éè|„+¦‰Qp™¨ÛU¢ÌxŒÖf‘ÅnͪåµòJ«é´Š—µdÞ51q
-‚v@	H’«¡{²
-ȳÓVž8Ö7ŸlJÊQ"ÙÊ7Tª™1Âïeú¯Ó/Qð[L2Ö.¸2ÕîîËíî­Þ»s ÷kL‰u
-]¨Hw(hi¤—?>=.•&h{5‚h\ƒJ gCa8çáE­ñŽœÎ¹éÎ]÷A¡‹T°Gšq_ÑJîÒóþ+#ûÁÕ”x¤‚t,ʘ/2)ùõ®…Èœ0áÏŽFg†&I8ÑÏ¥>Fkƒ{
-n£ U¶h‰÷`ò±ü>gxµïp×æ˜|æ¬`æsžÀ¼L)¬c½[ÈÍ
-vÈÑõM‡ÅZT’%ᶔoèT;óäôlŸgrÎ
-f/Îbðð2œÁWgÊ_|ˆæêY†•d*ë:ÏiÍ$Îe4Oãä´À1Ö	ÒùI'q W»þ?šÙÍNó]Àù͇%=a2«]¥µYd¹a^Âب‹VÕñ.°ß?Ù5ÉÏL)P]è•>ˆÑ±	O²A™Ÿ´_V:™3c	‚õN‘iûýæöãÍín!ŠÄ3‡ïEÆkʏl]š c)yÆ3ðýÍ¢UPML‹–gL¼\&z=B€Ôv™†>GÚwõ fÌ´ ‘`bE§l¶÷êËÚ' õœãR¿NiÝýy³.ïí?»šaÜŒ ÙŸrûÝåýãåÐ*#fÀÌ6××Èn8F£Èäúr;ø¡ÈÄ%Ýóc’3º/Òº'¹<Býd"ŠPÔâœÌñ•€4î'sé*O/†×F´~=˜<´IeKÿ@œ£
+xœåWMo7½óWì19˜á¿O‚¶A/j	(z*)v]hmÇnà¿ß7\’+­][“aÀÒ>
+‡Ã™7³_£i0òW?7£úp‡«et
+–à'_î¯eç4ÛÁsÔ>£â`¼N®; 9jâpŒ„=±Ž©?2þ[7lT}&Î:eàu1ym’¬®ÞÛó¦А¢äYçЊ1霺ÏöÜ÷l@‹©9¨/Ž¸Q—ŠV?<ª’³áüÓ›LĪ<øªhú^?6ãðq
+Á{ÍÕúRMÔÂaLÐÞ‡Y7¬GõîÓ/?¾_ÿ­~Z«ß9öši°1fùq:ÛÁúì$¢ŠpŒÕJ‘%ÒÞ	k߬°«µ!i*‰òAò´.$A«d?ОðõðGÏ!hN~ð8¥NVvHÉjCAíÉ:ÎRl%•)ÂÑülB”²¢þqÉ!Jäªzp!¢GQøºG{Þô8²SÉfí£ëH´i¡î³=Ï»v¤ÆÕ<´¸—g•fxÛç?µÈ$m<Ô Ý™§¸º¿ýv'M@Ü£4œõu[õnµ× /k²s¾¤Ž…oio2iÙ)OhÇñì!7PÌ";ýQzlTGzEž֓g+-ÓvhÏ›ECvÊÙ`µÈJEgÖ.4—ý±ïÙ‘)¨¶¾Å¼<§ñížýT":°cÄÖÐz—
+¾¸Þu²Ù€H¬Ä6©ê¨œIEq"êxŒÕjÆB‚¾F±²Ò iϪÛd´ˆõûH]5©qtŽœ0?;ä©•£[ˆ²vȳ‘Ÿ¶ë6„Ÿtwì}Òþ“榜ð{¹þëô‹º¢/µs&Oµ»ýv³ýAª÷á>pdžYV¡Ð™rÎ@%ðÌYùãËÃ\i‚5îAÎ˹FA`‹`]Ö4¼f´R֐‘Ú2Ó­;Û:!.Á¶Œ4eY–:/WÉvÿ•Ã£µ„X$‚d,J˜0 Ï’_oû™#f!ül¨3v$bG[}ŒÕ
+ÂF96[yk¡ßåÚ³)‰‡yÝrÕDåmâ$TæRš¨<Ï)ÞiÃr¯æ\øiH:±Ì)Õ†½¬’|Ä5韱i~êìô|ŸNf2Fû ?yÁ‡×Éµ:õz†Ê-°võ{ÈTÕý4¼dUGHè{Á¨ŽeôtRßÚiìd©{«þ?™Ù€ÌFҝ!iIæeÅ@@K˜ÌÃ^}.²ZÍXê”÷®ôélÕl¬q¬÷¶¨É/L&ìR™všv£_¡_eʆ‚Ü‘ö{Ýèd½®ÈË}⧩ë÷ë›Ï×7ÛY#äo9,lϾ\Q¶(uhbŽ¦|<Ê~5[eµœ­,cÐå<iëVà£4Ë4è’®k1‡X¦lL©¹e³¿ª¾n}òIO)õqJëöÏëíxq§ÿÙ~–ãV„Tðád»Û^Ü=\Œ½!àÅC÷LÙú>±{Ž±_	3¹½¹-¾3qƒŠýe’š¢7‘..sy„ùÉ2™ÅcMfy3@“y tM¥g	ÃFÐv(yô)eOÿ™“
 endstream
 endobj
-7622 0 obj
+7616 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610111329)
-/ModDate (D:20080610111329)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528091002-05'00')
+/ModDate (D:20080528091002-05'00')
 >>
 endobj
-7623 0 obj
+7617 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-7624 0 obj
+7618 0 obj
 <<
-/BaseFont /OKOVQR#2BLuxiSans-Bold
-/FontDescriptor 7627 0 R
+/BaseFont /YZUQMW#2BDejaVuSans-Bold
+/FontDescriptor 7621 0 R
 /Type /Font
 /FirstChar 46
 /LastChar 119
-/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 611 0 0 0 0 722 0 611 778 0 278 0 0 0 0 0 0 0 0 0 667 0 0 0 944 0 0 0 0 0 0 0 556 0 556 611 0 611 0 0 611 0 278 0 0 278 889 611 611 611 0 389 556 333 611 0 778]
+/Widths [ 380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 580 0 0 0 0 830 0 683 821 0 372 0 0 0 0 0 0 0 0 0 720 0 0 0 1103 0 0 0 0 0 0 0 500 0 675 716 0 716 0 0 716 0 343 0 0 343 1042 712 687 716 0 493 595 478 712 0 924]
 /Encoding /WinAnsiEncoding
-/Subtype /Type1
+/Subtype /TrueType
 >>
 endobj
-7625 0 obj
+7619 0 obj
 <<
-/BaseFont /YALMGL#2BLuxiSans
-/FontDescriptor 7628 0 R
+/BaseFont /MSTPMV#2BDejaVuSans
+/FontDescriptor 7622 0 R
 /Type /Font
 /FirstChar 78
 /LastChar 115
-/Widths [ 600 0 0 0 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 0 0 600 0 0 0 600]
+/Widths [ 748 0 0 0 0 0 0 0 0 0 0 611 0 0 0 0 0 0 0 0 0 0 0 615 0 0 0 0 0 0 0 0 0 612 0 0 0 521]
 /Encoding /WinAnsiEncoding
-/Subtype /Type1
+/Subtype /TrueType
 >>
 endobj
-7626 0 obj
-1197
+7620 0 obj
+1184
 endobj
-7627 0 obj
+7621 0 obj
 <<
 /Type /FontDescriptor
-/FontName /OKOVQR#2BLuxiSans-Bold
-/FontBBox [ -22 -218 932 744]
+/FontName /YZUQMW#2BDejaVuSans-Bold
+/FontBBox [ 0 -235 1071 759]
 /Flags 4
-/Ascent 744
-/CapHeight 744
-/Descent -218
+/Ascent 759
+/CapHeight 759
+/Descent -235
 /ItalicAngle 0
-/StemV 139
-/MissingWidth 278
-/CharSet (/n/o/d/p/period/D/underscore/r/g/F/s/G/t/i/S/u/I/question/w/l/a/m/b/W)
-/FontFile3 7629 0 R
+/StemV 160
+/MissingWidth 600
+/FontFile2 7623 0 R
 >>
 endobj
-7628 0 obj
+7622 0 obj
 <<
 /Type /FontDescriptor
-/FontName /YALMGL#2BLuxiSans
-/FontBBox [ 0 -16 562 563]
-/Flags 5
-/Ascent 563
-/CapHeight 563
-/Descent -16
+/FontName /MSTPMV#2BDejaVuSans
+/FontBBox [ -1 -176 649 729]
+/Flags 4
+/Ascent 729
+/CapHeight 729
+/Descent -176
 /ItalicAngle 0
-/StemV 84
-/AvgWidth 600
-/MaxWidth 600
+/StemV 97
 /MissingWidth 600
-/CharSet (/o/Y/N/e/s)
-/FontFile3 7630 0 R
+/FontFile2 7624 0 R
 >>
 endobj
-7629 0 obj
+7623 0 obj
 <<
-/Subtype /Type1C
 /Filter /FlateDecode
-/Length 7631 0 R
+/Length1 85360
+/Length 34291
 >>
 stream
-xœ]TkTSW>—äÞDÀh¸¤Ñäú JÕúÔ¥"„—
-K†Ø$¼5X¦Ö©Wm«®jy8ø(VŒá¡€/Vµ¼Z[éZÚÖ骵Ž(ul÷'væ$¬2Óùqï:gßs¾ûío{SHì(Š’­*±“ô–¢ˆ<S¶+2KPRÂ$a²¨[ž‡:ÊèÉhÕácyoï->6IZîWå°”ŽG"Š²îª^™—_Zh4äs)¯¦Íœ9ë¿‘¹aaa\fé_¸Èœ"£ÁÂiÈbKŽ)/ßœc)^Ì­$§M&cg0•æçqúììœl×µuzSÎœÖh2æççmáWq¯Ì™37„¼^Yc4g–q.öÜ*ÎÅÿO„ÐDK^v~d¡A[]lL*‰ÝjÒ›3S_Þ¸¡”ˆ¢ÐZ€’Pš’Q JAqh>Z‡‚Ñz´E 5h%
-EãÐrÄ!"£hôzB­¢Qƒ)o‹¼Då¢Ñwâdq•ø´ø¾øßôZ`R™Jæ8Ó"y	eðuBxYj}n ócí7›Âi#ÛA	;xÓ~®¯û“Íñ*|D~—€Wl–D¤å'd©Xû7Q4<šj"ö'‚.¡EÃ4˜ÂQX;Œ„CèS `Äþ†—ªwcZ1xQ;E“µ|Ùú§O/
-ÜV»Æ„Ô	³a̯õ9AÐÊ]|Ê„ _àfÌáj&·kCC/ÅŠ </Š¨_q:UͶ§ÚzŒ=Ê^¾µ¡©SŠ=…±Š/ZµÓƒtÑQQºþÇOÚ\ðEø'Cr½ö¶ÒH²˜{±‹Dš˜S	my}¼|ÿ	2½]rÛpQÍ^2ÄœŠSFó:‹1A
-žy#àiZm”®ox¸­Ÿ€;6ñ Š@N
-B0\…`Ñ /œa@Äm¿~­¯ñ14bÓãµýi×µ
-XLr ߃Ã
-rM)úʼ ÏOZ‚iÂÕŸ”ÅÔ#eñcm£%i–°ýwÏž½ûс]«QÁTÉŽÝïò;ùx>IoŽ²¶_]Á–Ÿ‘\ï»s=En½þ~ìaA	•°nêӏ¯Vâ	3±/ÆK~Àbð¿q¦æz‡:B—–µ.·þl¹
-0»õ‡,§Íçs»·}KTYôó-`Õç2ÁÀb¤舘´>&"6½wè—–/úÔnCAÈ!ŒhñсµW_‚Ib¿ƒÜYùÂÁŒLè,x>m„a(±Ü•ê°°GðP¼̼~@Dš¼P‹E†*SÍuõðöŽm°8u"û ©¼º¼ä¥ÍÙ[ã–}Õ¥ª²ªwªÞ9AŽ3ïcϬ†Pþkþê¡æ“Í'ÿ~‘ïärí‘u8êÒÄìêŠý|½ô““µí*v¸—ÿ´hwšTæ¨)†	\ì&Ä`‚Ï9öc­0Ií„W8³3³¢°¤@ÊÚ7’Ö*ñØù¿’BÏ|lÇ…2˧êºÒªms¤0…)…`,{ˆ#	ùMxž·â˜ŽÀkC=Mw¯¨YëÇ3éÜbPߎ4ÌQÅR о܏¿gÚõ?56ìÝß ’üå½»*xé¦íUmjh%Ä;ko…{]·³ÜvÙƒq˜Å„Éȳ‹Á[¨oÊÓ ¦‰„	ï+øÞ²†æ´®ðS	Á•š0<ÓW“!0OýËÖ'V[Ÿè¿&iÓœ€WÏó®
-k˜J<ç·…°†Ô?D?@ HÖvcåQ5fê¹:Sßé¹½iðagÖŠTîöšébçî1÷<±
-g|¡u_ÂÚã3ôÑ	æ“Ÿ«à	¡ì-Á^=Ñ ¹Õ~¬»YÅZãG’sDÖR7\Þ1:Ì
-<âG;kJpøBˆ`£‰=Ãœ²pAFcεZàZ00Ëi£a:sOßqÊéQ¼¥\xÁãFüGÏ­æísœpM€É.®u‡…Gþú\
-ðX~k°fÙj,ß®%³ïÊ‘ûyi×±RCéö7Ëv¨­<¯-Oª˜È•¦&óÁ|úÁœ†|b“7[­mÊnþòÑöKRÖÊçí­8ø¦f1x)˜¬=<+=rƒ¥¡ù\}íµjU[¥m߇{í÷—=;:»	©å#ÛÞý?CùNÏéæîÖù¯«°ÓùÓ^ð‘<‹ÿ£h]Q’^Up)åD¿šÏÚ’ž,eÛ{%ÿ?g¯ÎÙëD—6¤½Ûםj-ìS‚bÆÁ¢[%_:Ô›:cOÅò1¼®Ð˜"…j	xâ‹Šþö¨AiQÚÈ
-}O‡Ü£ðyäˆà‹/d8Ì4žÇ`ÊyLå4d0í<iá¼+™/Ì4Q¼„9{ÜÕ
-›ACêŽ5#s¯í§„¯±·ÂùH+<b\34B1xR7a’Æ·À‘@Cº‚ïÙWÕ}îAϱüwR˜ð3ž± ÆœøºjóÆ·t»ÂHh³óNÛg=¼´ÛþZ\ÆÛÖDzItqÆÞ…Rà’GY|D°ÕÂÒZÝ<=aŠxVz{ÔÞcúmÒœ
+xœì½	xÅö>\½wWïÝ#²3ì aÉLwB@–,„’°£2I&$™˜LXEÄTTqCTDÄ
+DEETT\AED\ÁþÝ='$ úóªwùžçcdªººªÞsNU÷œ"¹!]Œ(4<7¿g ¹ˆ¡1ç{TQe¸:þœµÜùzµhJÌßÿ‰DÞiÙ‰YPR]Z9žœ|!ª—Ó¶ª´bzI¼¿ê´é-Ë"áâÌÓó1¬·ÓšTæ4(¶ØàôwÆ£e•±i€÷ŠóUQ-
+ÇŸÛJuYTžVÝ|ø0B´Ûê¯
+WFjZ/Ùã<ûêgWGkcß¿AF(uB/¬®‰T_^¶ü`„¸D	$JÐFô…3e?´ýDµA¤ó)qZÝrQ€ö;³é¹DSVÒË鼿ˆÞæ`’D¢óZGz9±­G{Ñ³‰«™ÁÌ8··'¯;×af3qI!Sк’îG¯¥gÓkut	=­q¾SÈíôRz&ý=q%#²Ý¿®h	1„h–Kˆ¢‘AnC›™KˆÄ¢/³•ÙŠv Äp§ç*4•ÄÄâÑ“C¬uFF‡‰6ΓMÚÄbŸ#ñb´Ã`´- çi#ÚæȽBµ´3+ZÀì »1;Ðf´½ã´#4‰ ïVTwf‡ó9ˆV¢IŽev$³ƒõqméòÚOÌ!ï!í	ÒùDÇšçRÛè‰ôúJç­c‚¤‚T*Íùžàö`vK)v³%Ät§Ÿû™éàì'7“ëŸB»½tr9“\‚v«‰õŽÄÍ%VÓ¹BºZÂ.¡Ç ®mÐvr›cáž=æ£ùl":L³è •ML¤WºC™M„³}¸!¬C¸9Ž&ˆJF3‘Ïyû˜MñÓ‹g[¡Etgê6Gv’¼°ÞnÄt´L¡
+ÑRﳐX‡¢u¨9SPçX†¦H%øµ5dǬâ5GŒñ¿8¶m÷„Sýç_ƒ†¯‘§û×?>|Ý‚»†i¹†êȯ¡;¶ßý{/wwO:|ŒÑ%”Ó†&f8ùcœªûä4;í¡º†éèü—5q¿¨Ì?O›×¾Ï<-Ò§;rÎ6Wy¬BZÛkŽÔmnËIÆ»-¾!Tꆦ!ÉÙ‹ˆœÎ|Í­pJ÷à5'úŸ·˜@@"±ê$¢‰£P§Fú¡N;õ|¨3H"gAE*y?Ôy¤“A]tw ÔeãÖ.—C]AVßPאØw'ÔuD÷=ä ´àÔËCwëjBl…:‰xâ¨SÈOƒ:üd"ÔÔ”,†:‹Z“ó¡Î£v䨋¨ù-ÔåŽ}¨¡PWPYߎP×P“¾ÏA]G|ßÏQ:Š¢j4Õ rTŠÊPùQT„º:e õr>A§Vèôð£4§OÌÙg1§w…Q%JpZ³P•Ó¿‡SKEÎǏòNÌUë=Eœ2⌙â|;=ñŸ@M:Zà Mq°&9cªœÞ®agÌ¿†˜áÔ&9ãF¡:§G‘Ó7ìÍñF„=üÎ,UÎwµÓ§Ð™·ÜéçwÆGô°÷#”­ž^S^Zów)êêôêôN÷§•Çjc5‘pe‚?«ª¨‡?µ¢ÂŸçöªõçEj#5S"Å=ðo†&¹CÂS*'E«Jýiá²ß˜™U眝pUi¤Ö®‰øË«üÕu…åEþâhe¸¼Ê‘ìdó=§ ƒóÃUÎCš£L…£J‹VÿÞC·FƒýyÈ(o-jF=ûœ	8û
+ŠÔÔ–G«üàÉ3×ÏÛýÔyÝi»ŸN’oòøˆÁö¬—¥$ZåØ3æ,ò6IÌYâ>¨§ó)†9¦8sôpÆF²ÆYöˆ7_·Az8óFœ1¨,«îÓ³g±3锺µÑºš¢HI´¦4Ò£*â¼Îl$Aý†ªßÔ¿=:î;w“F¼qtŒ¢©N_w[ÿ3›ÕiófºÓ§ÌYöôŠyõZ7Â=Jî¬SN±ä©z4ƺ“ãïiƒÏéto‰°Sklµßºì쀿þÁÊÕüóîôëÝ s¹ó{µ˜×âîÂJÏÖ“¶¨³ÿ—,®fýù*½ÙW¹'S™÷.z•z(U°ê	°îñÕŠ£Å÷X|¿'xrE½Õ¯òÆWÃŽ#DYc°ÇÊa„½9â–Æ0gÌ“âÔýTäõs÷a|öúÜÞqÙã{9âÿøÞk×h—´óVÎ[앵ž\EΘ0臽SPäìÐJo–˜÷¦Þ>%N­NR—26 ¸>Í•?æìßøîwlâ¶T{§¦ØA(òF×KSìióöZ¡ó6潍cà?@H€Ó\äHVçÍ·ÉTo”y^)–©ôÚkT¯CÍI»2.mgÄF«ãÖ+½õŒ¯5näAjÑ	¿£GÂ	={zÄïÍ?ñ¹ËÁª'¯þk]o¹¸´Õ'vtÌ“«a×5h4Õ³GåŸB¨?
+%žW¯
+#‹½o#Á+]KLrzyóÅûÔ¯_‰ÇDqÏV¿BEv±'q9HÚÇ; ]Ø™1êy††5hì‹,ð[OPåôÁi¨=©oýYi°XcÐxœßÓ9ìIŽ=ß|ò^‹[#Î%á?XϨǂ~XûJ¯lðf-b¹Ìzœd©?ëÚd:pKݵy‰'c1ì¤
+oŸÖœh‰KêÚ´¸Ñš7Þuõö±ÜóÞ>¡Q±'©»^U¬Qz¯Æ‘ê}hØÛ=ñ½[qª}jÿOê¥Ä AÃ{kôç%8çT{œN¶Xï
+o\ùïxs|buj<?öüJüõ-µ'vdýy9•="àç"žõHS=­Š½ñíNÇíNè}ê켫gÛvvYüÌdŸÂ/…Þy6’µÎAý>™â¼-?Å"NJŽq{W;Ÿ8{…=91¢ñºÇe®oÁ§=)ež‡÷{e-ÈñvÒïí“z_w:ß]ì1A•·îíu:«âF–k¼†õ¬ÖBüîMêO[ýIr#‡Š±G
+Œ8yÆjoGOv¾KaÅâ|èî*|«þ;=ÕïkUg$|XrÂRƒQÈÃÉE9Γ‹“ë< ÑN™ç½ËrÚüN—ç¼å<e8­Þº¤zoÜ÷í¼Ó8Ú©»3梑Þ\ñ9òœowî±N‹;·ß{vŸ†:ýsœ¹Ü±!4ÆÃ9³å;’å:uwîaNk¶S† Ÿ;"Ýié<»õAȍBãx9Ψïì¸ã\Yâ’8í
+¨'K•å!ÖK6ÌyÊsæoS¹³¼ù\ù¼øȭ瀜qËåy³»6rgvçLw$ÊöžÜÖ‘N9Üé—ïÙ3ÕÓ9.mŽ§C¦ó>®KÈ“ ¾q‰Òr¸ƒíöäÈUàYÁE*€ž	Þ:ºúdxã]Ô¡^¯¸d¹°Ên½a–`˸®ýG@Î÷ôÏv>~Oÿ§¥À[›Tgþúyë÷Î oWnìYc¤§_ªg‡\!ÍëçZѵgö‰—×hUÒ={¹ëæJžá!¥zÉ?­&õ³5^Óí|a§_ȳT¶×;ß±cÈéŸu¢%¾³<]ÓÁÖñ9ãû>¾'²Y7ÝÓÑ]ÙjöTªg»“µp×i´'ƒñH…ïôF6kXýXÝzy
+<ä‚ÓXe´wC^¯To­óOœ‘LïüÉGžØa
+>`$ìÏÜ’lßúsTßïÏøŽø\õØ'¯`†·Ÿ²AÂüÖˆ÷À0oÜw…^+òòœØ	¿}2s7Ž¢ÑÆqgB#_Û8ˆ{áA^ßÊSú5´Æ³¥8g5ä:c·ÓeØõÙq<–¯z¢¸ïŽçD£Þb/>Ç€µ'¢’¨FOD&S½·
+œ^
+w'Ñ“ò<9ìqÂ	¬z.j˜+W†½hÁE«=5Ÿ¡ðo2Ãjïã(S½z"W¿:èë¶Ï8%®¿ÿùíøO»õºœ.rhlÿo½«!—*÷,ìÆ“=`ÞTŸ—5Øĵ@üÞ­ò”UoØ}îl}Щ·
+®
+JI^ìÙ£øž‹‰=UÇõß¿uú§/¸ÿ—îƒðI÷A§F^ÿ¾û |Úû ÿø>ÿ©û “#ù¢F25ÜuÔ÷üs7¨§»aÁÿµ{%ÿoî•ðÿ¯Ôè^©á†áÿ›÷Jø$†ýïÝ+áÓdkÿ÷Jø´÷J
+ýgî•ðÜügî•0úWï•þÕ韼Wj8o'ß+ýûþþíR<?Gÿk·K|»túۍÿÌíþëúYðû–	{{ì·ÑÌþ–	ÿß2áSn™rÝÿä-þ?o™üÿ±[&ü/Ü2ùÿm·LسÁ(gÖ!ž´qk§:ïÿswGø´kþߺ;¿¹;òÿ×îŽðïÞ5ÜýûïŽð¿pwôGóþ{ïŽê=ëï3Êoo|ð_¸ñi|KóOÞøà¿uãóÛœí¯ÝøàF7>tïðOÜÐÄ~3ÿ@ÔpÓ€=÷©B™Þh¹?×æþd܉¦ów©Dü…‘ŠèÔ®=üâ§àzøUL¯.«õ—WVGkb‘bIM´ÒŸZ™?VáýÔ]]ü§îÃ`Ü€>*RöÇE;ñ£{¸ûþÁ¿ý!¿?ýóþSËkqØ«	G*Ã5“ýÑ’SgÁxx¤¦²¼ÖûºòZY¤&â`•Ö„«ÕݵœaŽÅjJ#	þXÔ®šî¯ŽÔÔ:¢…1ÇbåŽ	Âþ"GhìôŒ•EêíTT­¬vº»beÎ쎕#UµŽõÚy&i×Õ™¬Ø®­•‡<\-ª«ŒTÅÂ1Wž’ò
+g‘º¸3züùÑ’ØTÇüíºz’ÔDªk¢ÅuEošârG±òºXÄ•Ÿ4 ÁY梊ºbW’©å±²h]̦²€\„š¸)iëjþ®:	þʈ«5ö6HmYB#Œ³g´Æ_qÖÁé]îˆ
+êŸí
+çL[í:†ã¦ó€¦–9ë7Üe(©«©r #ÞÀ⨿6šà¯­+œ)Š¹-®~%Ñ
+g³¹
+E«ŠË]=jû`\àL.ŒN‰xÄw‘'À‰MP9ËPouW¥ºaÄßùk˸0VsÄpNIø$=£Uξ¨ñWFk"§UÛ›^)	;@=âBü¶2<Ý9-Îðâò’rw£…+bÎÖs*ΤáâbOó¸éÜ®q䪫×`¨8R[^Zå‰Q?«Î w‡†‹œIjÝõòÔžŠäN‰ Ï`áŠÓO cêåh˜Í¯ªbº¿¼Ñ6Ç®:5÷÷6¼¾n¥Ö5¤».õÇ#âì¹H7hj´¦¸ÖßîÄ9lçb׿ÀíÜcÛÎ3™³2Ùp^
+#ÎIrg­sÖÀµÉ”hù	Á"ÓbΉñ‡««ã.¬ˆ¸/âº;3»Ü°(eᘿ,\ëÌ©:É&î®kØÝÅþºªb¸ATì	×ðVµ6ZážjoÙÜE
+û+\ï᜕úŽÕá¢ÉáRG1çVE±»UÿµMu”ã°#%®PƒCþÌÜœ~nfÁèÔ¼?+ß?</wTVF(Ãß.5ßyn—àU08wdßé‘—šS0ÖŸ›éOÍëš•“‘àžÊÏǹyþ¬aó³BN[VNzöÈŒ¬œAþ4g\Nn?;kXV3iA®7¦Ê
+廓
+å¥vSÓ²²³
+Æ&à̬‚gNG¸<ªxj^AVúÈìÔ<ÿð‘yÃsóCÎδ9Y9™yJhXÈQ™(=wøؼ¬AƒœANc.ÈKÍ
+KÍšàw&ËuTÎó{]z8R:søC£ÜÁùƒS³³ýiYùy¡Ôan_×:ƒrr‡…pfîÈœŒÔ‚¬ÜZÈQ%5-;—ÍQ%=;5kX‚?#uXê Wz·[\s`wÀ PN(/5;ÁŸ?<”žåV;få…Ò¼žŽíKd{â¦çæä‡FŒtœ~õ	xôàá(êü—îIæ©Ÿã¨ëÎS›WpB”ÑYù¡j^V¾»"™y¹Ž¸îzæfz;`¤cOwñr@^wÜ¶ß;Ì¥f;æ»b8
+ø¤¾Îî
+M+ŠTÇܽ
+‡;î=7÷	Þ®;gªrn¼Í«:´äœ,uâÞ­°]:Nˆ»^Ï}8»Ûa¢¸ë-žq<`­ëJ¢58ê:“©åµÞIw(°2ç<m¸ÂsF¹§ÈëåøÊp…3¬ö„˜'(\O†Õ5åΐ©5å1Ç™øÃuNkMù á )Oƒ.JƒsˆË_©­vXª|J¤bz§oËež$åU%ÑšJPÝ3_Q¬O}¨ó—z“Gc8ZSÚϱqýíÐéÏþ~Ä?áxäÿ+qnˆƒü1¿ƒÀÉy3ÕÖsÆiÔ†€ÿXÉ_+áÿX	Ç×áß+áøý[±þc%Ü+ùÿb¬„OŠþB¬„/VòÿùX	7Š•ß“Â%‡Ï'ñO…KÂ%ÿß
+—ðIâzyã?2᪨ÿo‡Lø
+™0„Lþ¿2áSC&ÿ_	™ðiC&ÿ¿2á‚ÔQÆäºb§þKÑnÐüïDG¸>:òÿè7ŽŽü):§Žü':r7ëIåDàƒ7ðñÿþãÀÇÿ'ì>'Çÿw@«ï?Ðp§èñw~g°§wo7ÙùÛÓ»;+öþU¯‡÷ï«ÕNÛÉÿZøÇ¿aØsjùäòžåŽ³šÖ£º¬º'xÌ¿ô‹ŸÞïD{ŽÏBãÐiþø†x¿CM"
+шA,⏄‘ˆ$$#©HC:2‰|èԝ‰š¢f¨9jZ¢V¨5jãÈÒµCíQÔuBQԝ…º¡ÔÝ1AOÔ%z¿j!%¡dÔ¥8&î‹ÎFýP4 
+ô®ºÓ½+éLïŸ=²Ð4Ô1Ú0ï=†£(ÏûÚ‘Žî£Ñ4ÖÑe<š€ÎAç¢óÐDÇ«Ð]èR4=‰¡ÏÑeè4ÝŠîEË	ÍCï£9h!:„¾CW£›Ðh3ú}‹nC÷¡Ð÷è0Z†@/¡-h5*t–éZÇ~[[¿ˆ^F¯¡WÐ6ô*úÂYô7Ñëh;zÐYøƒè:ô6zíp–÷+ô5ºÒYwù+ÛW¡;œ58ß»¸­õ.h§8›ãKg;Ì@ÓÑLt!º ­Cw¢‹Ð,t1šö£h=A4Á,Á<ú#"!¡ã"dB!T‚ 4B'Â$|ÄDâL¢)ÑŒhN´@GÐQ¢%ÑŠhM´!üD[¢Ñžè@t$:‰.DWâ,¢ú	½C$݉DO¢‘Hˆ a6‘D$½‰¢úí!úgýˆþÄ b ‘J¤éD"2‰AÄ`"­ACˆ¡D61ŒÈ!r‰áÄ"ÈG?£_Чh/Q@Œ$F£‰1ÄXb1ž˜@œCœKœGL$ÂD!QD¢„(%ʈr´˜DL&*ˆJôÚGTQ¢š8Ÿ¨!j‰QGL!¦ÓˆéÄb&qq!1‹¸ˆ¸ÝCÌ&.!æ—s‰ËˆË‰+ˆ+‰yÄ|â*âjâbq-qq=±¸¸‘XDÜD,&n&–·K‰[‰ÛˆÛ‰;ˆ;‰eÄ]Ärânâb±’¸—¸¸ŸXE<@¬&$Ök‰‡‰GˆG‰ÇˆÇ‰uÄÄzb±‘x’xŠxšx†ØD<Kl&ž#ž'^ ¶///[‰WˆmÄ«ÄkÄëÄvâ
+âMâ-bñ6ññ.ññ>ñ±“ØE|H|D|Lì&>!öŸ{‰Ïˆ}ÄçÄÄ—ÄWÄ~âkâ ñ
+qø–8D|G|Oü@&~$ŽG‰ŸˆŸ‰_ˆ_‰cÄq‘I’I“É’É“‰I‘”H™TH•ÔH4H“ô‘gMÈ3ɦd3²9Ù‚lI¶"[“mH?Ù–lG¶';ÉNdg²Ù•<‹ìF&ÝÉdO²™HÈ i‘6™D&“½É²Ù—<›ìGö'ÉT2L'3È™I"“Yär(™M#sÈ\r89‚Ì#óÉr$9ŠMŽ!Ç’ãÈñäòò\ò<r"&É"²˜Œ%d)YF–““ÈÉdYIV‘Q²š<Ÿ¬!kÉYGN!§’ÓÈéär&yy!9‹¼ˆ¼˜œM^BÎ!/%ç’—‘—“WW’óÈùäUäÕä5äòZò:òzr!yy#¹ˆ¼‰\LÞL.!o!—’·’·‘·“ww’ËÈ»ÈåäÝä=ä
+r%y/yy?¹Š|€\M>H®!"×’£wÑnòòQò1òqrù¹žÜ@n$Ÿ$Ÿ"Ÿ&Ÿ!7‘Ï’›Ñh'Ú…>FÈçÈçÉÈ-ä‹äKäËäVòrù*ùù:¹|ƒ|“|‹ÜA¾M¾C¾K¾G¾O~@î$w‘’‘“»ÉOÈ=ä§ä^ò3rù9ùù%ù¹Ÿüš<@~C$¿%‘ß‘ß“?‡ÉÉ#äQò'ògòòWòyœBA‘EÑC±Gñ”@aJ¤$J¦J¥4J§ʤ|ÔTêLª)ÕŒjNµ ZR­¨ÖTÊOµ¥ÚQí©TGªÕ™êBu¥Î¢ºQ	TwªÕ“êE%R*HY”M%QÉTo*…êCõ¥Î¦úQý©Ô@*•J£Ò©*DeRƒ¨ÁT5„JeSè*—N ò¨|ª€I¢FSc¨±èvj5žš@CKGM¤ÂT!UDSª„*¥Ê¨rj5™ª *©**Šn¡ª©ó©ª–ŠQuÔj*5šNÍ fRPR³¨‹¨‹©ÙÔ%ÔêRj.uu9uu%5šO]E]M]C- ®¥®£®§R7P7R‹¨›¨ÅÔÍÔêj)u+uu;uu'µŒº‹ZNÝMÝC­ VR÷R÷Q÷S«¨¨ÕÔƒÔê!j-õ0õõ(õõ8µŽz‚ZOm 6ROROQOSÏP›¨g©ÍÔsÔóÔÔêEê%êej+õ
+µz•zzÚN½A½I½Eí Þ¦Þ¡Þ¥Þ£Þ§> vR»¨©¨©ÝÔ'ÔêSj/õµúœú‚ú’úŠÚO}M ¾¡RßR‡¨ï¨ï©¨ÃԏÔê(õõ3õõ+uŒ:N#š Iš¢iš¡Yš£yZ 1-Ò-Ó
+­Ò­ÓmÒ>úº	}&Ý”nF7§[Ð-éVtkº
+í§ÛÒíèötº#݉îLw¡»ÒgÑÝèº;݃îI÷¢é ¤-Ú¦“èdº7B÷¡ûÒgÓýèþô z J§Ñét¢3éAô`:‹B¥³éatK§GÐyt>]@¤GÑ£é1ôXz=žž@ŸCŸKŸGO¤Ãt!]DÓº„.¥Ëèrz=™® +é*:JWÓçÓ5t-£ëè)ôTz=žAϤ/ /¤gÑÑÓ³éKè9ô¥ô\ú2úrú
+úJz=Ÿ¾Š¾š¾†^@_K_G_O/¤o o¤Ñ7Ñ‹é›é%ô-ôRúVú6úvúúNz}½œ¾›¾‡^A¯¤ï¥ï£ï§WÑЫéé5ôCôZúaúúQú1úqzý½žÞ@o¤Ÿ¤Ÿ¢Ÿ¦Ÿ¡7ÑÏÒ›éçèçéè-ô‹ôKôËôVúzý*ýý:½~ƒ~“~‹ÞA¿M¿C¿K¿G¿O@ï¤wÑÒÑÓ»éOè=ô§ô^ú3zý9ýý%ý½Ÿþš>@C¤¿¥ÑßÑßÓ?Їéé#ôQú'úgúúWú}œAÁÅÐðÇðŒÀ`Fd$FfFe4FgÆd|ÌLæL¦)ÓŒiδ`Z2­˜ÖLÆÏ´eÚ1í™LG¦Ó™éÂteÎbº1	Lw¦Ó“éÅ$2&ÈXŒÍ$1ÉLo&…éÃôeÎfú1ý™Ì@&•IcÒ™&Äd2ƒ˜ÁL3„Êd3Ø&—ÎŒ`ò˜|¦€ÉŒbF3c˜±Ì8f<39‡9—9™È„™B¦ˆ)f"L	SÊ”1åÌ$f2SÁT2UL”©fÎgj˜Z&ÆÔ1S˜©Ì4f:3ƒ™É\À\ÈÌb.b.ff3—0s˜K™¹ÌeÌåÌÌ•Ì<f>ss5s
+³€¹–¹Ž¹žYÈÜÀÜÈ,bnb373K˜[˜¥Ì­ÌmÌíÌ̝Ì2æ.f9s7s³‚YÉÜËÜÇÜϬb`V32k˜‡˜µÌÃÌ#Ì£ÌcÌãÌ:æ	f=³ÙÈ<É<Å<Í<Ãlbže63Ï1Ï3/0[˜™—˜—™­Ì+Ì6æUæ5æuf;óó&ó³ƒy›y‡y—yyŸù€ÙÉìb>d>b>fv3Ÿ0{˜O™½ÌgÌ>æsææKæ+f?ó5s€ù†9È|Ëb¾c¾g~`3?2G˜£ÌOÌÏÌ/̯Ì1æ8‹X‚%YŠ¥Y†eYŽåYÅ¬ÈJ¬Ì*¬Êj¬Î¬ÉúØ3Ø&ì™lS¶ÛœmÁ¶d[±­Ù6¬Ÿm˶c۳؎l'¶3Û…íÊžÅvcØîl¶'Û‹MdlµX›Mb“ÙÞl
+Û‡íËžÍöcû³؁l*›Æ¦³lˆÍd±ƒÙ,v;”Íf‡±9l.;œÁæ±ùl;’ÅŽfÇ°cÙqìxv{{.{;‘
+³…l[ÌFض”-cËÙIìd¶‚­d«Ø([ÍžÏÖ°µlŒ­c§°SÙiìtv;“½€½Å^Ä^ÌÎf/aç°—²sÙËØËÙ+Ø+Ùyì|ö*öjöv{-{{=»½½‘]ÄÞÄ.fof—°·°KÙ[ÙÛØÛÙ;Ø;Ùeì]ìrönöv»’½—½½Ÿ]Å>À®fd×°±kÙ‡ÙGØGÙÇØÇÙuììzv»‘}’}Š}š}†ÝÄ>ËnfŸcŸg_`·°/²/±/³[ÙWØmì«ìkìëìvö
+öMö-vû6ûû.ûû>û»“ÝÅ~È~Ä~Ìîf?a÷°Ÿ²{ÙÏØ}ìçìì—ìWì~ökö û
+{ý–=Ä~Ç~ÏþÀfd°Gٟ؟Ù_Ø_ÙcìqqGrGsÇrÇs‡9‘“8™S8•Ó838“óqgpM¸3¹¦\3®9ׂkɵâZsm8?×–kǵç:p¹N\g®ו;‹ëÆ%pݹ\O®—ȸ gq6—Ä%s½¹®×—;›ëÇõçp¹T.Kç2¸—É
+âsYÜn(—Í
+ãr¸\n87‚Ëãò¹n$7Š͍áÆrã¸ñÜîî\î<n"æ
+¹"®˜‹p%\)WÆ•s“¸É\WÉUqQ®š;Ÿ«áj¹WÇMá¦rÓ¸éÜn&ww!7‹»ˆ»˜›Í]ÂÍá.åær—q—sWpWró¸ùÜUÜÕÜ5ÜîZî:îzn!ww#·ˆ»‰[ÌÝÌ-áná–r·r·q·swpwr˸»¸åÜÝÜ=Ü
+n%w/ww?·Š{€[Í=È­áâÖrsprqsë¸'¸õÜn#÷$÷÷4÷·‰{–ÛÌ=Ç=ϽÀmá^ä^â^æ¶r¯pÛ¸W¹×¸×¹íÜÜ›Ü[Üîmîî]î=î}în'·‹ûûˆû˜ÛÍ}Âíá>åörŸqû¸Ï¹/¸/¹¯¸ýÜ×Üîî ÷-wˆûŽûžû;ÌýÈáŽr?q?s¿p¿rǸã<â	žä)žæžå9žçó"/ñ2¯ð*¯ñ:oð&ïãÏà›ðgòMùf|s¾ß’oÅ·æÛð~¾-ߎoÏwà;òøÎ|¾+ߍOà»ó=øž|/>‘ðAÞâm>‰Oæ{ó)|¾/6ߏïÏàò©|ŸÎgð!>“Äæ³ø!üP>›Æçð¹üp~ŸÇçóüH~?šÏåÇñãù	ü9ü¹üyüD>ÌòE|1áKøR¾Œ/ç'ñ“ù
+¾’¯â£|5>_Ã×ò1¾ŽŸÂOå§ñÓùüLþþB~1?›¿„ŸÃ_ÊÏå/ã/ç¯à¯äçñóù«ø«ùkøüµüuüõüBþþF~¿˜¿™_ÂßÂ/åoåoãoçïàïä—ñwñËù»ù{øüJþ^þ>þ~~ÿ ¿š_Ã?įåæáåãç×ñOðëù
+üFþIþ)þiþ~ÿ,¿™Žžß¿ȿĿÌoå_á·ñ¯ò¯ñ¯óÛù7ø7ù·øüÛü;ü»ü{üûüüN~ÿ!ÿÿ1¿›ÿ„ßÃÊïå?ã÷ñŸó_ð_ò_ñûù¯ùü7üAþ[þÿÿ=ÿ˜ÿ‘?ÂåâæáåñÇ$)P-0+p/DAdATAtÁLÁ'œ!4Κ
+Í„æB¡¥ÐJh-´üB[¡Ð^è t:	….BWá,¡› tz=…^B¢‚‚%ØB’,ôR„>B_ál¡ŸÐ_ R…4!]ÈBB¦0H,d	C„¡B¶0LÈr…áÂ!OÈ
+„‘Â(a´0F+ŒÆ„s„s…ó„‰BX(Š„b!"”¥B™P.L&B¥P%D…já|¡F¨bB0E˜*L¦3„™ÂÂ…Â,á"ába¶p‰0G¸T˜+\&\.\!\)ÌæW	Wׄk…ë„ë……Â
+Â"á&a±p³°D¸EX*Ü*Ü&Ü.Ü!Ü),î–w÷+„•Â½Â}ÂýÂ*áaµð °FxHX+<,<"<*<&<.¬žÖ„Â“ÂSÂÓÂ3Â&áYa³ðœð¼ð‚°ExQxIxYØ*¼"l^^^¶oo
+o	;„·…w„w…÷„÷…„Â.áCá#áca·ð‰°GøTØ+|&ì>¾¾¾ö_„o„ƒÂ·Â!á;á{áá°ð£pD8*ü$ü,ü"ü*Žc„	Lb
+Ó˜Á,æ0Œ±ˆ%,c«XÃ:6°‰}øÜŸ‰›âf¸9n[âV¸5nƒý¸-n‡Ûã¸#î„;ã.¸+>wÃ	¸;î{â^8p[ØÆI8÷Æ)¸î‹ÏÆýp< Ä©8
+§ã™xŒ³ð<gãa8çâáxÎÃù¸ Ä£ðh<Åãðx<ŸƒÏÅçá‰8Œq.Æ\‚Kq.Ç“ðd\+qŽâj|>®Áµ8†ëð<OÃÓñ<_€/ijðEøb<_‚çàKñ\|¾_¯Äóð||¾_ƒàkñuøz¼߀oÄ‹ðMx1¾/Á·à¥øV|¾߁ïÄËð]x9¾߃Wà•ø^|¾¯ÂàÕøA¼?„×â‡ñ#øQü~¯ÃOàõxÞˆŸÄO¡µèaü4~oB¡ÇÑsøYôz=7£Kгèrü~¿€îÇ[ð‹ø%ü2ÞŠ_ÁÛÐøUü~oÇoà7ñ[xz
+=ßÆïàwñ{ø}üÞ‰wáÑFüþïÆŸà=øS¼†÷áÏñøKüޏ¿Æð7ø þÂßáïñø0þÁGñOøgüþÃÇE$")R"-2"+r"/
+"EQeQUQuÑMÑ'ž!6Ï›ŠÍÄæb±¥ØJl-¶ýb[±Ø^ì v;‰Å.èG±«x–ØML»‹=Äžb/1QˆAÑm1IL{‹)b±¯x¶ØOì/Š©bš˜.fˆ!1S$³Ä!âP1[&戹âpq„˜'æ‹âHq”8Z#ŽljãÅ	â9â¹âyâD1,¢«Ä"±XŒˆ%b©X&–‹“ÄÉb…X)V‰Q±Z<_¬kŘX'N§ŠÓÄéâq¦xx¡8K¼H¼Xœ-^"Î/犗‰—‹WˆWŠóÄùâUâÕâ5âñZñ:ñzq¡xƒx£¸H¼I\,Þ,.o—Š·Š·‰·‹wˆwŠËÄ»ÄåâÝâ=â
+q¥x¯xŸx¿¸J|@\->(®׊‹ˆŠ‰‹ëÄ'Äõâq£ø¤ø”ø´øŒ¸I|VÜ,>'>/¾ n___·Š¯ˆÛÄWÅ×Ä×Åíââ›â[âñmññ]ñ=ñ}ñq§¸KüPüHüXÜ-~"î?÷ŠŸ‰ûÄÏÅ/Ä/ůÄýâ×âññ ø­xHüNü^üA<,þ(Š?‰?‹¿ˆ¿ŠÇÄã’‰”(‰–‰•8‰—	K¢$I²¤Hª¤IºdH¦ä“ΐšHgJM¥fRs©…ÔRj%µ–ÚH~©­ÔNj/u:J¤ÎR©«t–ÔMJºK=¤žh±ÔKJ”h¥”,É–’¤d©·”"õAK¤¾èfôt¶ÔOê/
+J©Rº[J—2¤º^Ê”Iƒ¥,iˆ4TÊ–†I9R®4\–JyR¾T ”FI£¥1ÒXiœ4^š #+'M”ÂR¡T$K©D*•Ê¤ri’4Yª*Ñ
+©JŠJÕÒùRT+Ť:iŠ4Uš&M—fH3¥¤¥YÒEÒÅÒléiŽt)Z Í•.“.G7 ¥+¤+¥yÒ|é*éjéit­tt½´PºAºQZ$Ý$-–n––H·HK¥[¥Û¤Û¥;¤;¥eÒ]Òrénéi…´RºWºOº_Z%= ­–”ÖHIk¥‡¥G¤G¥Ç¤Ç¥uÒÒziƒ´QzRzJzZzFÚ$=+m–ž“ž—^¶H/J/I/K[¥W¤mÒ«ÒkÒëÒvé
+éMé-i‡ô¶ôŽô®ôžô¾ô´SÚ%}(}$},í–>‘öHŸJ{¥Ï¤}ÒçÒÒ—ÒWÒ~éké€ôtPúV:$}'}/ý –~”ŽHG¥Ÿ¤Ÿ¥_¤_¥cÒqÉ„LÊ”LËŒÌÊœÌË‚ŒeQ–dYVdUÖd]6dSöÉgÈMä3å¦r3¹¹ÜBn)·’[Ëmd¿ÜVn'·—;ÈåNrg¹‹ÜU>Kî&'ÈÝårO¹—œ(ä lɶœ$'˽幏ÜW>[î'÷—ÈåT9MN—3䐜)’ËYòy¨œ-“sä\y¸<BΓóåy¤<J-‘ÇÊãäñòùù\ù<y¢–å"¹XŽÈ%r©\&—Ë“äÉr…\)WÉQ¹Z>_®‘kå˜\'O‘§ÊÓäéòy¦||¡<K¾H¾Xž-_"Ï‘/•çÊ—É—ËWÈWÊóäùòUòÕò5òùZù:ùzy¡|ƒ|£¼H¾I^,ß,/‘o‘—Ê·Ê·É·ËwÈwÊËä»äåòÝò=ò
+y¥|¯|Ÿ|¿¼
+=!? ¯–”×ÈÉkå‡åGäGåÇäÇåuòòzyƒ¼Q~R~J~Z~FÞ$?+o–Ÿ“Ÿ—_·È/Ê/É/Ë[åWämò«òkòëòvù
+ùMù-y‡ü¶üŽü®üžü¾ü¼SÞ%($,ï–?‘÷ÈŸÊ{åÏä}òçòò—òWò~ùkù€ü|PþV>$'/ÿ –”ÈGåŸäŸå_ä_åcòq)„B*”B+ŒÂ*œÂ+‚‚Q‘YQUÑ]1Sñ)g(M”3•¦J3¥¹ÒBi©´RZ+m¿ÒVi§´W:(•NJg¥‹ÒU9Ké¦$(Ý•JO¥—’¨” b)¶’¤$+½•¥ÒW9[é§ôW(•T%MIW2”’©R+YÊe¨’­Sr”\e¸2BÉSò•e¤2J­ŒQÆ*ã”ñÊåå\å<e¢V
+•"¥X‰(%J©R¦”+“”ÉJ…R©T)Q¥Z9_©Qj•˜R§LQ¦*Ó”éÊe¦rr¡2K¹H¹X™­\¢ÌQ.Uæ*—)—+W(W*ó”ùÊUÊÕÊ5ÊåZå:åze¡rƒr£²H¹IY¬Ü¬,QnQ–*·*·)·+w(w*Ë”»”åÊÝÊ=Ê
+e¥r¯rŸr¿²Jy at Y­<¨¬QRÖ*+(*)+ë”'”õÊe£ò¤ò”ò´òŒ²IyVÙ¬<§<¯¼ lQ^T^R^V¶*¯(Û”W•×”וíÊÊ›Ê[Êåmåå]å=å}åe§²KùPùHùXÙ­|¢ìQ>Uö*Ÿ)û”Ï•/”/•¯”ýÊ×Êåå ò­rHùNù^ùA9¬ü¨QŽ*?)?+¿(¿*Ç”ã*R	•T)•V•U9•W«¢*©²ª¨ªª©ºj¨¦êSÏP›¨gªMÕfjsµ…ÚRm¥¶VÛ¨~µ­ÚNm¯vP;ªÔÎjµ«z–ÚMMP»«=Ôžj/5Q
+¨AÕRm5IMV{«)jµ¯z¶ÚOí¯Pª©jšš®f¨!5S¤V³Ô!êP5[¦æ¨¹êpu„š§æ«êHu”:Z£ŽUÇ©ãÕ	ê9ê¹êyêD5¬ªEj±QKÔRµL-W'©“Õ
+µR­R£jµz¾Z£Öª1µN¢NU§©ÓÕêLõõBu–z‘z±:[½D£^ªÎU/S/W¯P¯Tç©óÕ«Ô«ÕkÔêµêuêõêBõõFu‘z“ºX½Y]¢Þ¢.UoUoSoWïPïT—©w©ËÕ»Õ{ÔêJõ^õ>õ~u•ú€ºZ}P]£>¤®UVQUSWשO¨ëÕ
+êFõIõ)õiõu“ú¬ºY}N}^}AÝ¢¾¨¾¤¾¬nU_Q·©¯ª¯©¯«ÛÕ7Ô7Õ·ÔêÛê;ê»ê{êûêêNu—ú¡ú‘ú±º[ýDÝ£~ªîU?S÷©Ÿ«_¨_ª_©ûÕ¯Õê7êAõ[õúú½úƒzXýQ=¢URVQU©Ç5¤©Q­1«q¯	ÖDMÒdMÑTMÓtÍÐLͧ¡5ÑÎÔšjÍ´æZ­¥ÖJk­µÑüZ[­Ö^ë uÔ:iµ.ZWí,­›– u×zh=µ^Z¢Ђš¥ÙZ’–¬õÖR´>Z_íl­ŸÖ_ 
+ÔRµ4-]ËÐBZ¦6H¬eiC´¡Z¶6LËÑrµáÚ-OË×
+´‘Ú(m´6F«ÓÆk´s´sµó´‰ZX+ÔŠ´b-¢•h¥Z™V®MÒ&kZ¥V¥Eµjí|­F«ÕbZ6E›ªMÓ¦k3´™ÚÚ…Ú,í"íbm¶v‰6G»T›«]¦]®]¡]©ÍÓækWiWk×h´kµë´ëµ…Ú
+ڍÚ"í&m±v³¶D»E[ªÝªÝ¦Ý®Ý¡Ý©-ÓîÒ–kwk÷h+´•Ú½Ú}ÚýÚ*ímµö ¶F{H[«=¬=¢=ª=¦=®­ÓžÐÖk´Ú“ÚSÚÓÚ3Ú&íYm³öœö¼ö‚¶E{Q{I{YÛª½¢mÓ^Õ^Ó^׶kohojoi;´·µw´wµ÷´÷µ´Ú.íCí#ícm·ö‰¶GûTÛ«}¦íÓ>׾оԾÒök_k´o´ƒÚ·Ú!í;í{íí°ö£vD;ªý¤ý¬ý¢ýªÓŽëH'tR§tZgtVçt^t¬‹º¤Ëº¢«º¦ëº¡›ºO?Co¢Ÿ©7Õ›éÍõzK½•ÞZo£ûõ¶z;½½ÞAï¨wÒ;ë]ô®úYz7=Aï®÷Ð{ê½ôD= uK·õ$=Yï­§è}ô¾úÙz?½¿>@¨§êizºž¡‡ôL}>XÏÒ‡èCõl}˜ž£çêÃõzžž¯è#õQúh}Œ>V§×' gÐ&ýý\ý<}¢Öõ"½Xè%z©^¦—ë“ôÉz…^©WéQ½Z?_¯Ñkõ˜^§OѧêÓôéú}¦~~¡>K¿H¿XŸ­_¢ÏÑ/Õçê—é—ëWèWêóôùúUúÕú5úýZý:ýz}¡~ƒ~£¾H¿I_¬ß¬/ÑoÑ—ê·ê·é·ëwèwêËô»ôåúÝú=ú
+}¥~¯~Ÿ~¿¾J@_­?¨¯ÑÒ×êëèêéëëô'ôõú}£þ¤þ”þ´þŒ¾IV߬?§?¯¿ oÑ_Ô_Ò_Ö·ê¯èÛôWõ×ô×õíúú›ú[úýmýý]ý=ý}ý}§¾KÿPÿHÿXß­¢ïÑ?Õ÷êŸéûôÏõ/ô/õ¯ôýú×úýý þ­~HÿNÿ^ÿA?¬ÿ¨яê?é?ë¿è¿êÇôã2ƒ4(ƒ6ƒ58ƒ7¢!²¡ª¡ºa¦á3Î0šgMfFs£…ÑÒhe´6Ú~£­ÑÎhot0:ŒÎF£«q–ÑÍH0º=ŒžF/#ÑAÃ2l#ÉH6z)F£¯q¶ÑÏèo0©Fš‘nd!#Ód6²Œ!ÆP#Ûfä¹Æpc„‘gäÆHc”1ÚcŒ5Æã	Æ9ƹÆyÆD#lEF±1JŒR£Ì(7&“
+£Ò¨2¢Fµq¾QcÔ1£Î˜bL5¦ӍÆLããBc–q‘q±1۸Ęc\jÌ5.3.7®0®4æ󍫌«kŒƵÆuÆõÆBããFc‘q“±Ø¸ÙXbÜb,5n5n3n7î0î4–wˍ»{ŒÆJã^ã>ã~c•ñ€±ÚxÐXc<d¬561537ÖOë
+ÆFãIã)ãiãc“ñ¬±ÙxÎxÞxÁØb¼h¼d¼ll5^1¶¯¯¯ۍ7Œ7·ŒÆÛÆ;Æ»Æ{ÆûÆÆNc—ñ¡ñ‘ñ±±ÛøÄØc|jì5>3öŸ___û¯Æ7ÆAã[ãññ½ñƒqØøÑ8b5~2~6~1~5ŽÇMd&iR&m2&kr&o
+&6ES2eS1US3uÓ0MÓgža61Ï4›šÍÌæf³¥ÙÊlm¶1ýf[³ÙÞì`v4;™Í.fWó,³›™`v7{˜=Í^f¢0ƒ¦eÚf’™lö6SÌ>f_ól³ŸÙß`4SÍ43ÝÌ0Cf¦9Èlf™CÌ¡f¶9ÌÌ1sÍáæ3ÏÌ7Ì‘æ(s´9ÆkŽ3Ç›ÌsÌsÍó̉fØ,4‹Ìb3b–˜¥f™YnN2'›f¥YeFÍjó|³Æ¬5cf9ÅœjN3§›3Ì™ææ…æ,ó"óbs¶y‰9ǼԜk^f^n^a^iÎ3ç›W™W›×˜ÌkÍëÌëÍ…æ
+ææ"ó&s±y³¹Ä¼Å\jÞjÞfÞnÞaÞi.3ï2—›w›÷˜+Ì•æ½æ}æýæ*ósµù ¹Æ|È\k>l>b>j>f>n®3Ÿ0×›̍æ“æSæÓæ3æ&óYs³ùœù¼ù‚¹Å|Ñ|É|ÙÜj¾bn3_5_3_7·›o˜ošo™;Ì·ÍwÌwÍ÷Ì÷Í̝æ.óCó#ócs·ù‰¹ÇüÔÜk~fî3?7¿0¿4¿2÷›_›Ìõæ·æ!ó;ó{óó°ù£yÄ<jþdþlþbþj3ûð‘>ÊGûëã|¼OðaŸè“|²Oñ©>ͧûŸéóùÎð5ñékêkækîkákékåkíkãóûÚúÚùÚû:ø:ú:ù:ûºøºúÎòuó%øºûzøzúzù}_Ðgùl_’/Ù×Û—âëãëë;Û×Ï×ß7À7ЗêKó¥û2|!_¦oo°/Ë7D¨-‰•M¯.‹Tq©•á¢šhŽ—ljaMdJ„
+{—-VE&sáx)¦•×ÕU–TD¦‰E
+uœ^…‹Š"U1\t¢Êf…Ý)‹ãE†38Æ… 0€¡8`Ä+p¨a¢È‰*1"ñ’
+ÅgŒx…8¨‘P¥„Ô0W鉪4¨(ZY†‡ÒFâàFó”5ÔéÁ…áºÌùb³båŶÜ+¸,Ф4ÉŠkR7]È\/ɬ!dù$qH#ŒI
+uihc©&ŸôPZ‰TU„«ŠË‹ØìpQ],ÂVx…”ݸ_E£6;n 
+¯ ³íé
+ç‹Í‰¯ŠÏi<¾ªñøœøøª¸«ÂîÿWMÔÙ0T¨ª”ŠT•r¹ |”ύ+õ
+9·¬®ª4\SWY®‹ÉÑÆOl^\†š¸ye¨i,C^\†šx‘Uëb~#3Ö62cAãÙbg+ˆO‹[¤À]Ò˜»¤#ãKZ_Ò‘ Uh52®UW0#kÊ«J™:÷[y’†uŸ¸‘°ôupjF7’vj£úØFõé
+uv\\×^Ç5lã'ªLE´ª´–««*ï•Ø»”‰P BiAiC™e2”½¡L2Ê4(Ó¡Ì€2ef¼LüÀOÜÀMÜÀMÜÀMÜÀMÜÀMÜÀMÉdrË¢5ULÔýŽ·¥‚Ω€
+Ø©€
+Ø©€
+Ø©€
+Ø©€
+Ø©€bFz˜u
+˜i o`§v`§v`§v`§v`§v`§vèöN{§~:à§~:à§~:à§~:à§~:à§~:à§~:à§~àg ~àg ~àg ~àg ~àg ~àg ~àg ~àg ~ðC€üà‡ ?d³ƒâ§¾Ô+ ÐC€ô ‡ =è!@z& gz& gz& g‚ö™ }&hŸ	ø™)8Õõ$ñC>QåRCñ2‰ûºÜÚŠpmY¼m¨{³zõ‚2Ê ”A(-(m(“ L†²7”)P¦B™e:”P† Œ[#ø‰€Ÿø‰€Ÿø‰€Ÿø‰ÉR~c_]Ûèz€$‰ I"H’’$‚$‰ I $	€$$ ’@’ H I`‰ X" – ~ ð€ ü à ?øAÀ~ðƒ€ü`ïxóŠHmí$h ‚ @‚ A A€ ` ` ` `,0€øà[€o¾øà[€o¾
+ø6àÛ€o¾
+ø6àÛ€o¾
+ø6àÛ€o¾
+ø6àÛ€o~à'~à'~à'~à'~à'~à'~à'~à'~2à'~2à'~2à'~2à'~2à'~2à'~2à'~2à'>„ @€0  a@ € „ @€0  a@ € „)€á@  „ @8€p  á@  „)€Ÿ
+ø©€!A B‚ „	 $@H€  !A B‚ „	©€Ÿ
+øi€aA ‚ „ ,@X€°  aA ‚ „ ,@X€°  aA ‚ „ @€0  a@ € „ @€0  a@ € „€Ö@ë õ Ðz h= ´ Z„`¾Ì‚ù€Ø@ì ò y ˆ< DÈLJkÂSÜ_”.<JukÞ»`¯€à%Z,(m(“ L†²·\Nö~—¾Ñ¨T(Ó L‡2Ê”qNƒ@§A Ó Ðiè4t:
+&‚‰½¡LðDƒ@¢A Ñ hH4$
+’CRÞÿ¦WƒRÀ¤A`Ò 0i˜4L&
+“IƒÀ¤A`Ò 0i˜4L&
+“IƒÀ¤A`Ò`ðƒ€D"
+‘Hƒ@¤A Ò iˆ4D"
+‘Hƒ@¤A Ò iˆ4D"
+‘Hƒ@¤A Ò iˆ4
+(ƒ@”A Ä b1„B!ƒ@DA ¢ Mˆ&D¢	&‡˜X´*Z+—Gj"µåµÞN­¨.{U!\E*"åa)T][^3ŠÁû¬(Ô¤ÜÊr7±Ž?ŒlÔçVFJãôr§ûIXŒ‡E§EbafPØ	ã‚9Œxô8çåà1eNv™¡áêê0›®,,“ÃêÈœ:rL9ÃË©¼²(“_^Z¦
+ÂuHC
+/+§Ò¿ÃkË¥¬F’¨Ð¡þ‡O@Š4V;R¯vy½Ú¾º“‡Æ•òÆÓ…®R¥®RLq¤"æ`.z†«’û2æ©äNÆLöTªðTŠÛ -¬ª#§•sѸ^TMY”­u•Jd¼‚Š9º>UíèUäüu™¨kp©±­ÕSÄ”¢W«®ñjEO¬V\ŒŒ^¬'f"V‚=dÌ°h;‘õÆÕ¿ƒýù`òÁ äƒAȃ!q8‚@A Ž Gˆ#Äâq8‚@A Ž d„Aȃ@$A ’ I2 d„Aȃh‚!#BF„Œ0a0ð3?ð3?ð3?3ŽoAhAhAhAhuY@]P—ÔeAhAhiY at Z–¤eiY at Z–¤eiY at Z–¤eiY at Z–¤eiY at Z–¤eiY at Z–¤eAægAæg_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|eAâgoYÀ[𖉟‰Ÿ‰Ÿ|fŸYøYøYøYÀsðœ<gÏYÀsðœ<gAâgAâgAâgAâgAâgAâgAâgAâgAâgAâgAâgAâgAâgAâgAâgAâgAâgßZÀ·$~$~$~$~ð±|l[ÀÇ$~$~$~$~$~$~$~$~$~$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|Ü[plAhAhAhAhAhAhAhAhAhAhAhç[ Z Z ZÀûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¡
+|hëÛA.àCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÐþ³ÿlà?øÏþ³ÿlà?xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³áÂÓÞ³÷lðç6øsü¹
+þÜnƒ?·ÁŸÛàÏmðç6øs;­~^Ðü¹
+þÜnƒ?·ÁŸÛàÏmðç6øsü·
+þÛÿkƒÿµÁÿÚàmð¿6ø_ü¯Q?äÿkƒÿµÁÿÚàmð¿6ø_ü¯
+þ×ÿkƒÿµÁÿÚàmð¿6ø_ü¯
+þ×ÿkƒÿµÁ¯ÚàWmð«6øUüjø§$È+’ _H‚¼ 	ò$Èþ_{ï'WUçûîªU»»«_éN:	IH'!†ð2d­ª½×*ÒU½×*""t’iIÒ1é¹ÂȼÔqtÔQ‘Á‘QDãÁgqDEçø#zæ8¹8£m(ÎÚµ¾l9sï9çsîùÜû¹ŸfÓõ¯ªÞµkï½ê÷[ë·{ÿ’2H™¤ÌRæ)ó”ù@Ê| e>2H™¤ÌRæ)ó”ù@
+ÿ¥ð_
+ÿ¥ð_
+ÿ¥ð_
+ÿ¥ð_
+ÿ¥ð_
+¯¥ðZ
+¯¥ðZ
+¯¥ðZ
+¯¥ðZ
+¯¥ðZZŸÛ.û¯¥ðZ
+¯¥ðZ
+¯¥ðZ
+¯¥ðZ
+¯¥ðZ
+¥ŒÏSx*…§Rx*…§Rx*…§Rx*…§Rx*Mç¶K»á©žJá©žJá¡žIᙞIᙞIᙞIᙞIᙞIᙞIᙞI§ŒSÆÃ)ãß”ñkÊx5eœš2.Mo¦ðN
+¯¤ðF
+/¤Œ×RÆi)ßû”ïSÊ÷)åû”ò}Jç¾Onn}¶Ç8%eœ’2NÑ𔆧4<¥á)͸S3îÔ´OÃ[šq§ŸÛ^“Ú¢ŽS3ª¥†ýÕðž†÷4¼§á=
+ïiö_Ã{ÞÓðž†÷4¼§á=
+ïixOÃ{ÞÓðž†÷4¼§á=
+ïixOÃ{ÞÓŒ/5ãKÍøR3¾ÔŒ/5çMsÞ4çMsÞ4çMsÞ4çIϝ'Æ“–q‘¥ÿZú¯¥ßZú©e>hÑC˼Ï2³ô[Ë<Î2³Ìß,ó7ËüÍ2³¹íX*í¡ß[æm–y›e¾f™§Yæe–y™e>f™Y¾ý¶è·E¿-úmÑoË÷È¢ßý¶è·E¿-ºmÑm‹n[ú¿¥ÿ[ú¿¥ÿ[ú¿¥ß[ú»¥¿[ú»¥¿[ú»¥¿[ú·¥[ú·¥[ú·¥[ú·¥[ú·¥[ú³
+ýYnóf_%UQkÔ:5¡¦TM5ÔµImQÇ©sx–êBmß¿~üø-ð[à·Àoß¿~üø-ð[à·ÀüqðÇÁüŒõ3ÖÏX?cýŒõ³¹õioF{3Ú›ÑÞŒöf´7£½sç'£½íµà[ð-ø|¾ß‚oÁ·à[ð-ø|¾ß‚oÁwà;ðø|¾߁ïÀwà;ðøü0Ï•ø×ÿZâ_Kük‰-ñ¯%þµÄ·–øÖßZâ[K|k‰o-ñ­%¾µÄ·–øÖßZâ[K|k‰o-ñ­%¾µÄ·–øÖßZâWKüj‰_-ñ«%~µÄ¯–øÕ¿ZâWKüj‰_-ñ«%~µÄ¯–øÕ¿ZâWKüj‰_-ñ«%~µÄ¯–øÕ¿ZâWK|j‰O-ñ©%>µÄ§–øÔŸZâSK|j‰O-ñ©%>µÄ§–øÔŸZâSK|j‰O-ñ©%>µÄŸ–øÓZâOKüi‰?-ñ§%¾´Ä—–øÒ_ZâKK|i‰/-ñ¥%¾´Ä—–øÒ_ZâKK|i‰/-ñ¥%¾´Ä—–øÒ_ZâKK|i‰/-ñ¥%¾´Ä—–øÒ_ZâKK|i‰/-ñ¥%¾´Ä—–øÒ_ZâKK|i‰/-ñ¥%¾´Ä—–øÒ_ZâKK|i‰/-ñ¥%¾´Ä—–øÒ¾‚oÀ7àð
+ø|¾ß€ß ¿~üø
+ðà7Ào€ß ¿~üø
+ðà7Ào€ÎâOKüi‰?-ñ§%þ´ÄŸ–øÓZâOKüi‰?-ñ§%þ´ÄŸ–øÓZâOKüi‰?-ñ§%þ´ÄŸ–øÓZâOKüi‰?-ñ§%þ´Ä–øÑ?ZâGKüh‰-ñ£%~´Ä–øÑ?ZâGKüh‰-ñ£%~´Ä–øÑ?ZâGKüh‰-ñ£%~´Ä–øÑ?ZâGKüh‰-ñ£%~´Ä–øÑ?ZâGKüh‰-ñ£%~´Ä–øÑ?ZâCK|h‰-ñ¡%>´Ä‡–øÐZâCK|h‰-ñ¡%>´Ä‡–øÐZÖçôفïÀ>´Ä‡–øÐZâCK|h‰-ñ¡%>´ÄG–øÈYâ#ûÊçÑáNäÜç
+µAmR[ÔqjFµTڏ'èq‚'èq‚'èq‚'èq‚'èq‚'èq‚'èq‚'èq‚ã—Kür‰_.ñË%~¹Ä/—øå¿\â—Kür‰_.ñË%~¹Ä/—øäŸ\â“K|r‰O.ñÉ%>¹Ä'—øäŸ\â“K|r‰O.ñÉ%>¹Ä'—øä\âKüq‰?.ñÇ}]Æ/—øå¿\â—Kür‰_.ñËe‚.ã›K|s‰o.ñÍ%¾¹Ä7—øæß\â›K|s‰ß-ñ»%~·Äï–øÝ¿[âwKün‰ß-ñ»%~·Äï–øÝ¿[âwKün‰ß-ñ»%¾¶¯l½LÐ˽LÐ˽LÐ˽LÐ˽LÐ˽LйKйKйKšsŸã¸ s	:— s	:— s	:— s	:‡/-ñ¡%¾§Ä÷”ø?P¦Œ‹RÆE)㢔q~¡¯	•íqüñ%> Ä”ø€PâJ|@_
+µAmR[ÔqjF¥ÝœŸ”óƒŸ(ñ}Ÿóƒ¿è+øŒgð}ŸñLÊx&e<“Áç|žÁç|žÁç|žÁç|ž…늾6¨Mj‹:‡“Q-5ìg†dèA†dèA†dè@†dè@†dè@†dè@†dè@†dè@†dè@†dð~ïgð~ïgð~ïgð~ïgð~ßgð}ßgð}ßgð}ßgð}ßgð}ßgð}ßgð}V›Ãe?áýÞÏàýÞÏàýÞÏø>e|Ÿ2x?ƒ÷3x?ƒ÷3x?ƒ÷3x?ƒ÷3x?c>–ÁÿüŸÁÿüŸÁÿüŸÁÿüŸÁÿüŸÁû¼ŸÁû¼ŸÁû¼ŸÁû¼ŸÁû¼ŸÁû¼ŸÁû¼ŸÁïüžÁç<ñýÊæ¾_Ì2æó…ÍàÑÍàÑÍàÑÍàÑÍàÑÍàÑÍàÑÍàÑŒùBÆ|!c¾1_Ș/dÌ2æó…ŒùBÆ|!c¾1_Ș/dÌ2|¹_.c~1?ȘdÌ2æóOYxÊÂSž²ð”…§,<eá)OٍsÛkR[ÔqjFµÔÐ^OYxÊÂSž²ð”eÜjá+_YøÊÂW¾²ð•…¯,|eá+_YøÊÂW¾²ð•eÜj·ZøËÂ_þ²ð—…¿,üeá/YøË2nµð˜…Ç,<fá1YxÌÂc³ð˜…Ç,<fá1YxÌÂc\ϐ³ð˜…Ç,<fá1YxÌÂc³ð˜…Ç,<fá1YxÌÂc³ð˜…Ç,<fá1YxÌÂc³ð˜…Ç,<fÇZøÌÂg>³ð™…Ï,|fá3ŸYøÌÂg>³ð™…Ï,|fñ—,þ’Å_²Œ£,ã(Ë8Ê2Ž²Œ£,ã(Ë8Ê2Ž²Œ£,|iáKËxØ2¶ð§e<l[ÆÃV»®WuîÜé:Ê«Âýò;¥úª¹?_¯œ{>ÇxŒë]’ë]¾‚ÏxÌ2³ŒÇ¸æ+øŒÇ,ã1ËxÌ2³ŒÇ¸n&¹n&¹n&¹næ+øŒÇ¸~&¹~&-zÀu2Éu2Éu2_Ù>z`Ñ®›ùÊöÑ®£I®£ùÊþ¡\O“\O“\O“\O“\O“\O“\O“\O“\O“\O“\O“\Oó|ô€ëj’ëj¾‚pMrMrMrMrÍWðÑ‹^pÝMÚ9½ÀO⺛些些¯àã'qNrNrNrNrNrNrNrNrNrÎWðñ“¸.'ç®ËYæ1?Éâ'Yæ5?Éâ'Yü$‹Ÿdñ“,~’ÅO²øI?ÉrÝÇâ+Y|%‹¯dñ•,¾’u²ë’ðE»¦Sxt\%‹«dq•,®’ÅUr¨µC­jíPk‡Z;ÔÚ¡Öµv¨µÛ8·½&µE§fTK
+{ãPk‡Z;ÔÚ¡Öµv¨µCêìPg‡:;ÔÙ¡Î5v¨±CjìPc‡;ÔØ¡Æ5v¨±CjìPc§æðØ?ÔØ¡Æ5v¨±CjìPc‡;ÔØ¡Æ5v¨±CjìPc‡;ÔØ¡Æ5v¨±CjìPc‡ú:Ôס¾õu¨¯C}jëP[‡Ú:ÔÖ¡¶µu¨­Cm*ëPW—Ìm—ö£¦5u¨©CMjêPS‡š:ÔÔ¡¦5u¨©CMjêPS‡š:ÔÔ¡¦5u¨©CMjêPS‡š:ÔÔ¡¦5u¨©CMjêPS‡›áp3n†ÃÍp¸ŽYŒC=êéPO‡z:ÔÓ¡žõtfýE=êéPO‡z:ÔÓ¡žõt¨§C=êéPO‡z:ÔÓ1Ûr̶³-ÇlË¡®uu¨«C]êêPW‡º:ÔÕ¡®uu¨«C]êêPW‡º:ÔÕ¡®uu¨«C]êêPU‡ª:TÕ¡ªUu¨ªCUªêPU‡ª:TÕ¡ªUu¨ªCUjêPS‡š:ÔÔ¡¦5u¨©CMjêPS‡š:ÔÔ¡¦5u¨§C=êéPO‡z:ÔÓ¡šÕt¨¦C5ªéPM‡j:TÓ¡šÕt¨¦C5ªéPM‡j:TÓ¡šÕt¨¦ãê‹ãê‹C'úèÐG‡>º9}䪋㪋㪋㪋W]ÔÆ £¾Jª¢Ö¨ujBM©šj¨
+j“Ú¢ŽS3ê®U‚/e+ì›Ü>±'o)ӁÎ?¾Û´ÿõÖ]¯=0ÿsíWû·&·³›SµÁé=yÔÛäž]“þCƒ3§/Y‹Æ+«h¬¢±ŠÆ*«ØzMvížÚÓ	›ÌÿÝ{ÞåÕhoCT¥Æ!ªµª“¯Û¶kb·ßÞ§N
+œ:¥ÎI©sR꜔:Huê ÕAªs2êì_ý«³upëàÖÁMÀMÀMÀMÀMØÓüüüüüüüüüüüüüüü”í¥l/e{)ÛKÙ^Êö4ÛÓlOÓ~Mû5í×´_Ó~Mû5x<
+žOƒ§Á3àðí7´ß€oÀ7àð
+ø|¾߀oÀ7à7Àm€Û ·nÜæƁmÓ»¦÷ìöß‘™‰}×ð®ªìšÚ7ÁšÖL»öNî÷kñ’–5iY³YÙ>½çÊŠ=°ošwhS“659&-ÚÖ¢m-ÚÖ¢m-ÚÖ8cýŒõ3ŽQÆ1Ê8Ç"³’™Ü8÷ZQkÔ:5¡¦TM5ÔµE§fTK
+û'åÆžïØ7qṌ}¼°XI	°Ô}'§<‡Íì›Ø¿Ÿ÷ ³_[=üöƳþ½û&÷oÛ7µ7ÿWÒy“¦(â(Z h¢Š@ƒR±ë
+thQB‹Z”*«NÚ=1íJˆQÖ@®\ãÔhA­OìšÜ»“WàC‚”5ðkà×À¯]JèRB—º”Ð¥„.%t)ëì?´)¡M	mJhSB›º”uÛ“QvNíÛ^õ2Òy‰‚%(a@	JP&ͪßÄäÔ•;gvöÏìÜ7Éóý};¦®ž{Þ¿ßkÙ^ð9v
+F”0¢„%Œ(Sv-¥=)íIiOJ{RÚƒJT •0¨„A%*aP©Á×àèF•0ª„Q%Œ*aT	£JU¨F•0ª„Q	£T„Q*Â(a”¾Ö«ûöMÜ5¹c¦»óìÀÞÞNÝ—ÎðËíÓ÷„g[ýI¬²Úv¾=
+šÜ É
+šÜ É
+šÜ É
+šÜ É
+šÜ ÉMšÜ¤ÉMšÜ¤ÉMLK–¤¯ºÿH˶îŸäMѤMѤ°®„u%¬+a]B%¡’ŠPI_ëƒÛ<ÚÔÄ•~ åÙ…cÑ¢--ŽE‹cÑ¢-šÑ¢-šÑ¢-šÑ¢ã4cœfŒÓŒqš1αçXŒƒ?þ8øãàƒ?þ8øãàƒ?î±ô#­¼gôν8°w`îi§Y+ï"G^ä½$l'£]ˆ™“ŠÌIEæ¤"sR‘9©ÈœTdN*2'™“ŠÌI%çÄËr\,ÇÅr\,ø|¾ß‚oÁ·à[ð-ø|¾߁ïÀwà;ðø|¾߁ïÀwà;ðøÌ6ü´£êk>pŸC`?rï›|ÝÔ~?@Ÿ™:ò^½gr÷Þ™küð£çÊ}yžÌž™îÉ]“»óÐڐ
+´›`G¿r³gÿmž9'æÞ§fÔ€M¶¤"KR‘%©È’ô5íŸðíØ7µÿ*¯p;yÓPÔuÜëðôÞé}¹
+OìêõOvæñ¼»â‰=Wî
+ß^Â#á‘ŠðHEx¤"<Ò×´w×ô•SÛ&ò\æ*O§÷õOí™Éç8ÛrØ¯‰à©T„G*Â#á‘ŠðHEx¤¯µêÌNÿ…ßá'R¼Cd…$“©HT¤Gª<=rÿÔî©]ûxMdÒ#é‘ŠôHEz¤"=Ò×zÕO ®ÜwàÈyD”ɏTäF*r#¹‘ŠÜHEn¤"7R‘©ÈTäF*r#¹‘ŠÜHEn¤"7R‘©ÈTäF*r#¹‘ŠÜHEn¤"7ÒW×7ùÚSWûqΞm]ÔšÌHEF¤"#R‘©ÈˆTdD*2"‘ŠŒHEF¤"#R‘©ÈˆTdD*2"‘ŠŒHEF¤"#R‘©ÈˆTdD*2"‘ŠŒHEF¤"#R‘é«ì||_=à•kfpîEþ09Sõ_ÙðÖNú}Ü5ù:Öž{ÖfZÆLˆôHEz¤"=R‘©HT¤G*Ò#é‘ŠôHEz¤¯õÞ<!ۏIwØÏ[é`xk÷]3S{w]ÃÛ´„á 9’ŠIEŽ¤"GR‘#©È‘TäH*r$9’ŠI_ë~Ç÷NæìŽ|¯&©H“T¤I*Ò$i’Š4IEš¤"MR‘&©HT¤G*Ò#é‘ŠôHEz¤"=R‘©HT¤G*Ò#é‘ŠôHEz¤"=R‘©HT¤Gª<=rûôÌQžEøI‘T¤H*R$)’ŠIEŠ¤"R‘é+ŸG˜¬f…0«lîó´a&5R‘©HT¤F*R#}å¸!̤F*R#©‘¾‚0“"©H‘T¤Hú
+>¬f…0“2é+ø³B˜¬f…0+„Y!Ì
+aV³B˜Uøãk/©2Þ9}€Qh94©•ŠÔJEj¥"µÒWCmP›ÔuœšQ-Õ
+웼ÝólÞ
+—Ö)”ŠJEê¤"uR‘:é«ëÍӏvÍì=òt+[Cs‰™TÄL*b&1“ŠXIE¬¤Dö.%æPs¨ˆ5ô‚ÉvðZjðC
+~¨Á5ø¡?Ôà‡üPƒjðCéBéB
+f¨Á5˜¡3Ô`†ÌPƒj0C
+f¨ÏUÚA¯Ñ³¹Lq™âö#ÅíGŠÛ·)n?RÜ~¤¸ýHqû‘âö#Õ¹ýhïÖ]ÓÛ®ê¼æϏ~¬ò??öóŸÂïjJÕqñ·
+j“ÚêÞµ£øûŒj©®{ßLøý®™ý;'¶OƝÇîíW…ÚY‹sÈŸ&+þ4ÙWM5TÐÑ„„sžpÎÎyÂ9O®ºcÊÏH¶o~]×9~hJçâoœã¬øgÅß8+þÆYñ7Ί¿qöµÑuŽ4I½Ö)Iî¡ç›ß燌¬@8ëü‘³"œDåá$3ù,ðÀ^^Ó ôpE8‰"œDN¢òp’Îç÷çõ¡óšÉ5á$ŠpE8‰"œDN¢'Qy8Içó»vð|ô°_ÁotÑæ%yHÆmçÀ`Cq¢ˆ8QDœ("N'ŠˆEĉ¯º:µçê­ü±ÉŸ!QbN1'Š˜ÅŸ“+bN1'Š?/WÄœ(bN1'¾&½~µ'€ò;Èt¢H:ñ•& 2	"“ 2	"C"Š"E‘ˆ¢HDQ$¢øÊa at dD&AdD&AdD&AdD&AdD&EdR¬Ú«6EfRd&EfRd&EfRd&EfRd&EfHrñ5£Z*øÌS&űM™¦ÌI‚ñ|	>‚”"H)n-‰1¾‚@¥I2~V >ÓCe‰2ŠDE¢Œ"QF‘(£H”Q$Ê(e‰2ŠDE¢Œ"QF‘(£H”Q$Ê(e‰2ŠDE¢Œ"QF‘(£H”ñµQÝïç‚“;&¶Mú¹êÕG^ˆýö°
+M`~˜Ö\׎ÉÝ|yÒº¬^ ]KðŒâÅ
+ŠàEðŒ"xF<£žQÏ(‚gÁ3ŠàEðŒ"xF<£žQÏø
+>3Ä”bÊ‘`_Ág†˜2CL™!¦‰‹÷ïÓâk|U•m»låE=Þ99áÉtûÔÄ$×(’k|môí>°Ÿ±Òä`áùÜ•EBl!6Š›V7­(nZQÜ´¢¸iEqÓŠâ¦ÅM+Š›V|¥)Ì	ÁQ„à(Bp!8ŠEŽ"Gqó‹âæÅÍ/Š›_7¿(n~QÜü¢¸ùEqó‹âæÅÍ/Š›_7¿(n~QÜü¢¸ùEqó‹âæÅÍ/Š›_7¿(n~QÜü¢¸ùEqó‹âæÅÍ/Š›_7¿ø	=8ŒîR„>Eè	éñ„>EèS„žð_Áat—6çpØOtž•¢ó)>pÊ<PC½zãÜëµNM©šj¨
+ê85£ZjÀÕP¬†b5«¡X
+Åj(VC±ŠÕP¬†b5«¡X
+Åj(VC±ŠÕP¬†b5«¡X
+Åj(VC±ŠÕP«†Z5Ôª¡V
+µj¨UC­jÕP«†Z5Ôª¡V
+µj¨UC­jÕønßMs)Ls)Lë^ÕønßMã»i|7
+·j¸UínÕp«†[5ܪáV
+·j8UÃ¥.Õp©†K5œ©áJ
+Wj¸RÕ®Ôp¥†+5쨙ehfšY†f–¡™eh(RC‘GMã¨i5
+/jxQ§sx켨áE
+/jxQË^Ôð¢†5¼¨áE
+/jxQË^Ôð¢†5¼¨áE
+/jxQË^Ôð¢†5¼¨áE
+/jxQË^Ôð¢†5¼¨áE
+/jxQËþÓðŸ†ÿ4ü§á?ÍH3ÒÌz5¼¨áE
+/jxQË^Ôð¢†5¼¨áE
+/jxQË^Ôð¢†5|¨çøyfÞ£™÷hæ=šyfÞ£ñÅ4¾˜ÆÓøbšyfÞCÈ—"¼KÞå+Ûc(¯Êê¥íR„v)B»¡]ŠÐ.Eh—¯lŸ¡:!^Š/Eˆ—¯sÛ§½Õ5CuÍPÝ0T7è…A/zaÐÃPÝ Ý0è†A7CuÃPÝ #1èˆAG:bЃŽtÄ #1èˆAG:bЃŽtÄ #1èˆAG:bЃŽtÄ #1èˆAGCuƒžôÄ '=1è‰AOzbЃžôÄ '=1è‰AOzbЃžôÄ '=1è‰AOzbЃžôÄ '=1è‰AOzbЃžôÄ '†±ºAWcuƒ¾ôÅ /}1ŒÕ
+cuÃXÝ ;†±ºAúcЃþôÇ ?ý1üý…Áõ2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#Ã8Ý0N7ŒÓ
+:eÐ)ƒNtÊ S2è”A§:eÐ)ƒNtÊ S2è”A§:eÐ)ƒNtÊ S2è”A§ãwƒ^ôÊ W½2è•A¯zeÐ+ƒ^ôÊ W½2è•A¯>Á§3øtŸÎpÇðŸÎàÓ|:ƒOg¸žc¸žc¸žc0ì†Á•6¸ÒÇÎàØ;ƒcgpìŽÁ±3\2\2\2¸u·ÎàÖÜ:ƒ[gpëºmpënÁ­3¸u×Ü ï}7è»Aß
+únÐwƒUg°êVÁª3è¿Aÿ
+úoЃþôß ÿý7è¿Aÿ
+úoЃþôß ÿýo ç
+ô¼~7ÐïúÐ@ðB^hp>œÏç³Áùlp>œÏç³Áùlpœ´»A»›ŒKšŒKšŒKšŒ'šŒ'šŒ'šŒ'šŒ'šŒ'šŒ'šŒ'šŒ'šŒ'šŒ'šŒ'šŒ'šŒ'šŒ'šŒ'šŒ'šèw^m«Mxµ	¯6áÕ&¼Úäø59~Mxµ	¯6áÕ&¼Ú„W›ðj^m«Mxµ	¯6áÕ&¼Ú„W›ðj^m«Mxµ	¯6áÕ&¼Ú„W›ðj^m«Mxµ	¯6áÕ&¼Ú„ïšð]¾kÂwMø®	ß5á»&|ׄïšð]¾kÂwMø®IÿoҏZôŸý§Eÿi1®m1®m1®mñ=hñ=h1®m1®mmœÛn‹:Nͨ–ö³E?lÑ[ôÃý°E?lÑ[ôÃý°E?lÑ[ôÃãÕãÕãÕãÕqÆ3ãŒgÆÏŒ§s¿¯SjJÕTCmP›Ô5ì÷8ã’qÆ%ãŒKÆ—Z¢-Q„–(BK¡%ŠÐEh‰"´DZ¢-Q„–(BK¡%ŠÐEh‰"´DZ¢-Q„–(BK¡%ŠÐEh‰"´DZ¢-Q„–(BK¡%ŠÐEh‰"´DZ¢-Q„–(BK¡%ŠÐEh‰"´DZ¢-Q„–(BK|Ÿq-á%ŠðEx‰"¼D^¢/Q„—(ÂK|í|®ž…ñ€¯’ª¨5jšPSª¦jƒÚ¤¶¨ãÔŒj©àgàgàgàgàgàgàgàgàgàgàgàgàgàgàgàgà[ð-ø|¾ß‚oÁ·à[ð-ø|¾ß‚oÁ·à;ðø|¾߁ïÀwà;ðø|¾߁ïÀãÇ?ðíøW’]γƒOüéàO:øÓÁo~sð›ƒßüækFµÔ€¿9øÍÁo~ó•í*¶«Ø®b»a>îkƒÚ¤¶¨ãTðø
+üø5ðkà×À¯_¿~
+ܸ5pkàÖÀ­W§Ní×Ù~íÖÙ¯:Û¯³ý:Û¯³ý:Û¯³_õ9ö+a?ppö#////////~ÓJÙ¿”ýKÁOÁOÁOÁOÁOÁOÁOÁOÁOÁOÁOÁOÁOÁ×àkð5ø|
+¾_ƒ¯Á×àkð5ø|
+¾_ƒ¯Á7àð
+Ÿ7|ÞðyÃç
+Ÿ7|¾Áç|¾Aû´¿Aû´¿Áç|>£Ý¸–ý±¼ïÀwà;>–äKr„%9Â’aIŽ°$GX’#,É–äKr„%9Â’aIŽ°$GX’#,ÉVä+r„9Ša2Ž0G˜Œ#LÆ&ã‘q„È8Bd!2ŽGˆŒ#DÆ"ã‘ñ•vq^ùÇÿ8‚¯àp
+ÇÅ€oÀ7àðé„È8Bd!2ŽGˆŒ#DÆ"ã‘q„È8Bd!2ŽGˆŒ#DÆ"ã‘q„È8þÇ?ÂàøGÿƒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆWðø|¾߁ïÀwà;ðø|xуÜnï¸ÝÞq»½ãv{_³®yDãÆPd(*”Z(õP’PÒPt(&”F(ÍPZ¡Œ‡‚
+ÅuŠx2àÉ€'žx2àÉ€'žx2àÉ€'žx2àÉ€'ž
+x*à©€§ž
+x*à©€§ž
+x*à©€§ž
+x*à©€§^-àÕ^-àÕ^-àÕ^-àÕ^-àÕ^-àÕ^-àÕ^-àÕ^=àÕ^=àÕ^=àÕ^=àÕ^=àÕ^=àÕ^=àÕ^=àÕ^ð’€—¼$à%/	xI/	;–„KÂ%a’°GIØ£$ìJv%	»’„]I®$a’ÐÜ$47	ÍMBs“:ë47	ÍMB;“ÐÎ$´3	íLhg¢C	ÍMBs“ ” $ %(	@I JPŸ¼4à¥/
+xiÀK^ðÒ€—¼4àeásYø\>—…ÏeásYø\>—ñ¹ÐÎ,´3íÌB;mh§
+í´¡6´Ó<ðlÀ³Ï<ðlÀ³Ï<ðlÀ³Ï<ð\ÀsÏ<ð\ÀsÏ<ð\ÀsϼÀ`‰x®ƒ—>KŸ¥ÏÒÀgià³4ðYø,
+|¦C/Ð	¯L(Pš¡´B%ņÒAסèÐtè:ôz½@‡^ C/СèÐtè:ô¼4à¥/
+x:à逧žx:à逧žx:à逧žx:à逧žx&à™€gž	x&à™€gž	x&à™€gž	x&à™€gž	x¡géгtèY:ô,z–=K‡ž¥CÏÒ¡gi—T·ï:ofÛľé==‰q3OOŒ/œÚµ}2>;ÏyëŸÚ·íÀîü^¯x<_7nå.ÕlzfbÛ¶É=3ýçØsåľ»wM˜é˦lÝ5ÙIˆëØ7±ujÛÛ§óv;O•¾îE-1X|qÅÄ`qÅ+&æV­w>w`OçßõÛ°cjÏÄ‘S{¦fŽ¼Ø=¹}*¼hÊÂjþÅÑÕü‹£«¥®¸5WÜš+¬Öj~ã_ä¿é£mû¦ö\~¡Çó/Ž~Ä¿8º1WËŠ«e…ÕLqLqLqŒ*®¦Š«©âjIqµ¤¸ZRÜÑâñhG+¹tåÄŽ+¶NìëüÎX6l›Ø?Ùm÷\¹ab×Ì‚üM•š
+þ¬íšÜ¿?¼nds¯û:ÚhüOçõü5Ïuáý|Yx¾±°¾,<Ÿ{¿ö¼ÏŽÞŸÛþxŽQxn;êyÏ7ž×xž>ï¹,<ßXxÞ(|vî¹Ìq{·î›èÜì1=oÊV8ºpz–³£Î‹
+»¦÷\¹fbßÜ(žÂVñ¶Š§p¼ø/~AÆ‹_Fè7ñ®£ÈÀpþ¢®Í†ÝÓ{¦ý7yïNÞi}gÁT~ÛôäUÅSœ'r<ïu£ø:Ïþí×ã­¹×bÛöéøÅySÂMÿ¶úþÔ9ni"óœ´ð<œSÿ^þºð¾-<w¬cëÔëäÏ]g¯õxóèñÊ_9Dù‹#Oû¶VkWkW/®6^\m¼¸ZV\-+®–W³ÅÕlq5[\ÍWsÅÕ
+_am,¬æ_]Í¿(¬&‹«Éâj²¸š*®¦Š«©âjµâjµâjµâjõâjõâjõâjIqµ¤¸ZR\--®–WK‹«éâjº¸š.®fŠ«™âj¦¸Z£¸Z£¸Z£¸Z±¿eÅþ–û[VìoY±¿eÅþ–û[VìoY±¿eÅþ–û[VìoY±¿eÅþ–û[VìoY±¿eÅþf‹ýÍû›-ö7[ìo¶Øßl±¿Ùb³Åþf‹ýÍû›-ö7[ìo¶Øßl±¿Ùb³Åþf‹ýÍû›-ö7[ìo¶Øßl±¿Ùb³¡¿U/ðƒ‰‰­ÓWw¸/¿å'§DžËÂsUx^+<¯ž'…çiá¹>Âøum7lŸšØøÝLlØšír>æÖÑw:¶Òl8È支/µ#QZ
+ûÇ”ÖD§EqéѬµ6Zâã½ã:ëåÏEiuç÷«¢üãh´Ý?®ìüöØh™\úÇåw–ué<.í<.é<..Dƒ~«‹;¯ò碴¨ó|açqAi0ºÎÿ~AçUþ\”JýÑ[ý{÷¢‡£J©¿Ô]âßË#üãõþ½¾Rot¼/ÿðcþ½üQªv>ÙÓyìŽú;ù'ºîy¹¨ÔÕÙ¯¸óXé¬%:{Tî¼Sê<FcÏ]'ž{‘h·Åáßœn‹ßœ"fÛâ׿:;þõuâWg‹›ÿÚ¿l‹gÚâÿ|@üK[üs[ü¢-~>*žn‹§õÆOµÅ¡^qh¬òO?ëÿI‰ŸõŠÿ2+þñKâl‹ÿ<+~:+~â_ü¤-žl‹·Åj‹h‹µÅÛâïgžLüƒíâûLjïÝ2o»øîwÖÅߝßY'þã××ÅÿqVüÝ·Gâ¿["¾ý­¡øÛ#â[Câ‰oöÅO¬ßìßðk|cV|ÝoÿëëÄãïî_+¾ö·#ñ׎ûÕ…ñߎˆ¯.ù_?¶R|eD<úåâGÛâË_Úùñåë+_{îoÖÅ_Ú,¾4Vù›uâ¯Ûâ‹ÛÅ#ïŠi‹/+þª->ßÿåiñóâ/?¾"þËÓÄCŸ[?¤ÄçŽ?·\<øÀ‚øÁañÀýýñÄýýâ³ì³mñ™¶øôbñ©…â?´Å}mqo[ܳT|r™¸{‰ø¿¿˜Ÿðå³âã~ý¯wùr×uâcmqçñâ£mñ‘¶ø󶸣->Ü+no‹Ý6¨-n·UnõêÖYq‹ÿÈ-£âf_nžô;ÿÁcÅÚâýï{ ~[¼ï¦Íñû﻾rÓÛ×Å7m7Uþ¬-nô½ãƶxïqƒÿà
+£cω÷ø¾gµxw¿x—ë]çŠ?õåOÛâþ8¼s‰xǐxû:ñ'mñ¶¶xk[üq[¼¥-þ¨-Þü¦uñ›ÛâMëÄÛâÛâ”øýÄïµÅï¶ÅõËÄzÅï´Åumqm[¼~Vü³âš¶8xõñÁ¶¸úq`fE|`V̬ûgžëÄkÛbïô)ñô)bϬØ=+vÍŠ«Úâ5m1Õ;·õÇ;•¸²-v(1¹½7žl‹í½bûXeÛÖÞx[¿ØÚ+&¶,Ž'n[JÃñ–ÅâŠ^qy[ln‹ËüëËÚâÒW¯ˆ/m‹WûW¯^!.i‹‹gÅ«Úâ"ÿz칋Úâ•mqá¨xň¸àåËâfÅËý/^¾Lœÿ²eñù³âe/Ž_¶L¼tX¼dTœwîH|Þbqî¦áøܱéŃñ¦añâAqά8ۍÄg/nDØY‘ÆÙ1>(ZÍuqkV4ý6›ëÄØYⱶ8ëEƒñYÄ‹Å™gÄg.gˆÓ·‹ÓÚ¢1"L[èE"M–Çé:‘ÔGâd¹H®Ô{âúˆ¨__©©þ¸6"jcÕ/äÆ;bÙýö7Þ!N퉞rZüÂYqÊâuñ)§‰“·‹“¶‹Ûâ„ÅbýÒáxý¨8~µX7*^°Ö€“_0*֋㢁ø¸Y±fX3VY="VõŠÑQ±òØeñÊuâØ‹âc—‰c?ã9㝕bù²sãå׉etٹ☶X:,–x´%³b±oñ:1²],ÛbØ¿n‹¡íbÁàP¼`‘XðpepH^_ð¿˜ýJôù]ë["ú®¯ôˆÞ±Jµ-zÚ¢»-ºâÞ¸«-â^U*³Bleÿ©rÛ³×@\Ñ€(}¦´ýßV:ùÿÿEÿo7àã+£¨íhßPÙ߉¨;Zõ —¬ã£(ê*ÿ©ROüGåJtê#O’ÑЇž8´qÑðšáuk†×ì¨D‡÷‹‡Ò¾¡{ðWÿ²¯ëDÿ™¨}Ýo°Qú}¿­áOG){u[T:ì?~ªÿ¬ÿÜ×K;Û7–~¿}Ç}[UVÅ¿ˆVFk¢sÆÖ¯\—+]ËDozç‚÷ôߺèm£¼º+®––/‹ªå%VEåÑÒqCOœqH=ñÄ¡…Æ°ÿÉ·üÌág
+=5Üh,ml,­IêéY¥•’úñkëê~Q©¦*‹Gº¼ê—Ǿ	å/¶ßÛzÍX#ÙrÑËÜqÍ—6?SŠ^zùXvRû½¥)ÿó+yÁ¶žV¿lƒ{Ùx«tÚI'üÍ_n}ß%ûÂϷߟ¯ýÑiÄߊz¢¥Ñ†±ÅÑÃÕ·•^ÒS^ÒÅ/Ú-©Šcü>>ä[Dm¼çüe¥ÒæÒp-¿ùøµ¥5«+K—,\<RîX*Ÿù–C¿þÕSÏþ²tCéÂÒKNíØ1õºöÝ~yMåžÃ¯ýÙÿþKk'f&Û¿úó¶ÿmrf"?Ö¾•¯øvT£“dž+w=T~8z[O\ê~lÕë[ žxÄ£?“Ãj¨ïü¾½}¢´9?ay°²àÙ}å+Ÿý³öâoµÐþYûϾÉowÇs?Žg;çåܱuË–/éªFKÄÀÐòÏ»äbèÕ÷‹]±Lö×¢S½°ëäQõÌ“‡=ØÐ#OúSñ´_¾èONøã=W¬ò»¾®«²vu4<­Q•¥ÃJk+/Yè‡^;¼&ž}GûÑ·ÿ¸}^éÁÒァ4|ÍuÿvíOý‹œqå‰ÿT¾xÚ¹Ò­¥ÉÒTéƒF·¿r¶k?÷ó§ÚíC~YæX”ÏôÇBD§|:ú|ُ…ïwçÞ½àÂsïºðÒ‹?ë{瘹$tÄÒ§†â±øüXtƃ¥ßÍÀìÉùvÞå÷ý…~ß×G>vR´®2rÌpoßèªÊâÒ*‹¿pÌ'†+ŸX÷þáOíí[µ¢;Z±lp¤{Ùq'}ÿÿ’<’wÈüŒåG¡ý“¡Ÿ/;cî=±ÔXÙm¬j¬Þ4ºiÕ¦Õ÷n^yÙèå«._ýê5¯9vzåôèôª«§WïY3Ó7Ó?3píªkW_»æ†¾÷ö¿oô¦Uï_}Óš;úîè¿càΕwŽÞ¹êÎÕw®9asÞ¥òcÙµxdɪÒhiñHeÍq/X?¼¤:Ú©¥
+þ›ðÌ+_yýÏv¾å.9pû¯¿Ñþ^û›ÒþOo{©ïÚßyã¥o~Ϗ¾VZ]|}©ßÑ~D›óÎ?cü˜5ê±ÿíŸÓ¤dÏ{É…/u獮Ùø{~ø‹uïù™QÔó.¼ûK»Ç6u­ìîéŽWVâžžîÞ´¯·WªiWúÒ²(÷¦Õ^!Êå•¢ÜïW÷ŒÓ¿®7.‹.}¾¯§¿¯·ÚÓW¼ˆôuGCOœ{wÕŸ²Þ/=÷î¾ü¡ÿèÉ{liþeòß~å¿çç¾ââî¡ø©î¡~⧞ÿú’ãJc‰ÞÅå¡òH<õ®ë]í—ÓÊg•O‹ÏŠk½ý2ÖY./_Oô~¦üÉÞ»ý≨7®öT«q_Wÿ’ò1bieY¼¸g¤º¼oyÿúò	b}å„x]ÏIý§¦åT¨ŠŠ7vmìÞØ£ªu¿ÿg
+¾X¸Ê9±­nêÛm.½ºüjñÊÊ+ãº.è¾ çÕÕWöm¦KÓå=bgeg÷dÏÎêU½{ú¦ú§ûŠƒ=¯«^Ý÷ºþ7wÿaÏõº|¿øTå3ñ'{ê?×olÑšj)ÿ¿ópféµ¥r)*í÷?åÒžö-í¬ýÏígÚYü­ß|¡rfþ3{reú7ïܵWú‰Ç÷üwdð¾ÈÏAʧæßØ'ÛXZ¼&ñ|î÷ÐCžß.~îÇ•/V^õF뢌T튖­ê‹¾±ôk]7>>¼ú±U_9ö浏ßØ­]*Ž¨ô¹JŒœ~¼§Gžñ§g8ÐÞ“^þéÓÿútƒïÀy§®?sõ™kÎZÿ’Õ/Y³yõæ5{|gÿÕ¿³fïú·®~뚬þÀš¯þøšÏ­þÜšÅjtãªñѱU¯=Õ¶Ñ-«þpôúUï}ǪÛFoYuÏèÝ«†ò¾ßé÷¾§ŸYZ7¼&ô_„ãóÞ^+ÿêJù¶½¯½ôå“oÉÙýœû~÷ßñ3Àã¾ùÆ?ÙÿׯÜÿ3¥SýäïWçmÊ^òÎÝ'¾éÙß½cÇæ¯ÜöÅÏûÊ—mØP>våÏ£œóïò¼py×HÔ™±]·ö?¾ ºuñ]ñ¡c_&ZÇŽé¯,Z™ó®z&'š'=ÙÙÿ÷½ltËhÙS`àþN£E®K9ú&¯_ìiHDû¯¹fÿþ׿þõ›î;ðµRoû_¿và¾Mí›J;þóGn¹å#½ù揖¿µusûÓígýòéÍ[oóÍé´í2߶Aÿb(´mé­ÑãƒÃ·Æ÷Ü8øhéCb¤
+”Ç–·úNÏÛ–ŸŸœŸ|æÉCCOm[)W„ÎÌUSKD±±wä²½éž_kÿk©÷k3÷Þ–·uß5׈ËÿúÐmÛ.+½¸ä'´¥o>üå¼µùOh[ÛŃ•k|ËNðjrü±D´ø±%O,»yáJ«Ü»öօߍÇ÷Gƒc‹W·ºN?q®åÇðÉÐÒö/ŸÎÉÕ7÷¤-'凲ÓÒ¤ž·ti²&—‡GK9퉹náw@Üá›ýÕö3¥þ¯¸g“ߍµœzdÛå÷]z÷퇦¯}Ýþ½×^ûÐÖËJ㳿)5/ÛvÇááö¿´¼zMiišÜt»èºý†›n¾ý=7Üž÷¿CýqÎÇI'Ž
+vý º·ò¡r\¨DC=C‡=1¡õcÕó«[ª{«×W+Gõö®ÒŽüd¶oªlùÍ-]#íïw¾“G·9úéèCåÒ@4td¼ä7o‰÷Æ×Çl¦³‰®‘_
+ßç;£¨û>ÿ=]M¸bñÂj¥;ZÝÕ}Ì‚ï­öÓîGGï=vQw4²°¿g ëœ‘…ç¬Z1°rèø ŠžSWæœzøŒ| ’;sj=ãÉgÎxòÿþú%K-Xµ~ãúó×ï]ýúw¬ÿ‹õÝ›Ky·]²ØïÐÑÖšáÐOò½\Üù}åþ쁽ŸԏôJî¥;¦ËíÇ.¸r¯¹³õ±+gîwìÜýôŸ½¨|ÎÀ±Ë^õ‘›Ÿýnùœû¯úèžýNeËíWlÙÍ›x¡ß¿¥Q2vŒ?È¥Þï-||ñ£C÷–ÊÑÙÆòVø¶‘÷“œy6Þ·eÙõËB—N|ÓÖ}<ÚºxaûƁ¡ÅçlØ{}~F^þ©=õåòÏ^4]zß;÷,_»þãÖiÇÖÍO‡ï—çÃx½oGŸoÉÇuݺ0ºµÿÑ…7Sm-8O´ŸF{ÈþÓ?¥µììE¢ÀOyGƒŸÎcùó¯»îàk¯=à™Ü¶hÿ°ý÷íϖίÿØ­·~,ÿ)Eí/µùåK%Sñ‹	m¹«}Q|¹oKþ]?}låÑïú£ƒ7–þ^Ü»ÒÏÇ:ßø
+=ùäó¿îëŽ8hQ¡©å…ùq)ÐÐíž–öû¯ümÏÞ×Õ{{„„Îy©ómïœ/qÈ·m8ÒcK†«]Ý‘x¸ï݃Vïíîíˆz†æoQÞùzž{Ø\òHçód>tîDéù§j©8têæSßòž¼=öÞëžt‚8uÉâO~øÙÕ-ŸÙ3)⼟¼ÆëÕV»>úþØØ@y°/]5wu÷TãJoºjÕèº0†‹+=QylñÇÜ<\¹yÝ£GÇq¯XqȝÜKNȹç‰COþöHî—Oýòé…s£ŽÁ§ü—ƒrÉq÷ôôùÑíØåÕjµ·Ú××ß7P]¯]Þ¿|`ùà1NéÙPÝл¡oCÿ†W7zN¯žÞ{zßiý§
+œ[ÝÔ»©oSÿ9ûÜßsõþÞûûîï¿`Ý`×`÷`Ï`u°w Oœuâ'VóqDa WYÒèa¼¹^šù–îÿö;¶;qViÑCí_µg§Ÿºîª˜™zÍ‹wŸõó‡Ÿ9¼í»•3ۿظ±–œ¼¡¯ºö–Ý{ßÚµ¥¡zý´ÆÆSzFoûð=wæÇu…?Ÿ·ÇŒE»Ç–Æ=Ä­Ã¥{{nz{úªåªïdC/)³Ï½{8Xس
+æürÆ#‡Ïxä‘0O{äÐ3gää’Ë1gEg-*û-->¿|¾8ñ–òv4'Ì‘%§û'^Ïýô 6\®•^Û~û‹.ûLû«O|òž{â¶ÿ깨½î¥ú¹è“O”¾ç@/êpÆ-þ»ÚUÙ-óߎ^lJýßy|éC¥{vù¹è‚á³=w-JhïIu”9V\¿Â;ü,×ÏÌü‘^ïm<þ–ÒÎòàð’³=wädüòÿ°û¯¾Rº¯|×ÞKÛOmxÓÁk¿ëÏÊ'þæ–Û:ìQŠÎñ½Ò·§¿ô{Ï'×Ã8¹ž“ëù8¹þ9Nþá¿;Nî½ðÿ™!òOûAqRN⍽gwÃWôîê}CïÝe¿Ä~é}¸üpüõÞÇ{TþQüóÞ¥KÊ#~L±0êò›YXé]Òw|éå“ã»Nê9¹ú‚¾u~`œDI©^>=>­ë´nÝcúÏ<»†Åg÷œÓ‰¸¨rQÏ¥Õû.é¿bpGyKek¼¥kK÷–ží½[ú”÷VöÇ{»övïí™éÝÛ÷¦Ò›»þ çªoìûãþ·¾»ç}ýï¼£üQqGå£ñ‡{>Z½£ïÎþO•>Ûõ©žÏöÿuéñhåË]ß*Gü]å»ñOzþKõ§}?ë¿´3x^QÊÿ/­é+­9§tÙƒŸ+ì.k§}Íçl_SÙrø°¨<[)þÍ-¢|¸íéñÿÝåŒÿîrã‘åûÑ÷K=¥­~yã»”—³<óÛ‹èñËŸŠ‰U6t–wûå¡Îòýø¼øñ·»^à—-ÝýÝ;º?Ñý‰ž?™_æ—ùe~™_æ—ùe~™_æ—ùe~™_æ—ùe~™_æ—ùe~™_æ—ùe~™_æ—ùe~™_æ—ùe~™_æ—ùe~™_æ—ùåÿkKþ¼Ô©ùù¾.÷?]ÑÿäÃÏã¸üa}tâIÑ)GÞKýÏi<oE™ÎŽ¢MÑyQô²ó_~Á+¢W^ôª‹£WÿÏ"ÿoû¯Ý×y¬äÇçŸ{Î?nÈýëJôïìòóßqGž­÷?'F'ùÇSþõRêiÏ{¿å²Èúdz;¯7ùŸó:Ï^½<º z…þÊè¢èUÑÅþÙ«;m‹JïˆâÿѝŒz~ûå/¢_<÷[o„¾U¾íø_ý½Ñ×ÿW*·Go{þO×íуùO|Ð×wF;òŸòlôàÿÈOü…è]ÅŸžoFgþßýä'>ÿ‰wDÇ÷GwñsÙóÊEwz.ŠîŒïñë¾áèçÄ¿DwU¾½F|3ZáwKþÓ½=:§sÌ˧ýÃ'ïþ‹û¯XpÆ/£Uá$}áËïÿä\ý·}‡²à«Õ~Ý#gð¿Ñ–¼È
 endstream
 endobj
-7630 0 obj
+7624 0 obj
 <<
-/Subtype /Type1C
 /Filter /FlateDecode
-/Length 7632 0 R
+/Length1 82308
+/Length 31285
 >>
 stream
-xœUKLAÇgi»­ZPºT‘îŠ(­H at E¸(­ÄPƒŠ1&6”¶¡”>  eÑÀB4-úÀ!QkŒ.DÔø¾.¾ƒz@¹h„¨3f9¸@”x™Ì÷Ÿß÷ûfÒ€aØŠ"»“>Rf¶-é(CbP’„mDOÐSYØ›eŽíRb¬RÂ*¥C¿_¨`g<lY
-k€ÃœÝz‹ÕUGWU×SÚc%ÇuiiÛ–“í999T¹ëï	e0Úè*3µEÜ4Mk­Ñ\ŸGéEÚd¢+¨*“ËZm£Ê*+•m¥e&c
-U@›h«ÕÒ@iõ:jGfæötqÙq®-·Û¨b‹ÙBQ%Æ*»©¬î¿  ³œ8h´pä‚P Ž\|4¸ƒ%a¶˜,4‡fy„ñØ[­ä%ðÒ«ÕæTaµ?«…*¨šýã`BêW!,—þø˜»I››’’=5û}zjŽûYÙyŒ‡úç7ŸAƒ¾ƒœà,Š}=}Ö7)Äâ®VÆÓìcBäM\Ð
-!:d7ðpèo㜋„W$zE"ŠÃL 7ÊŬٳÁx¨—ëx9™Œÿ;ÇÃW¼u¬Eá¨\ý€ ÃK²099_Q—l#î^ºB|8o§ñeµúÕNrªÀáãù.ÙâÇÀ|nå14OªÙñŽHÓ•êOy÷ÒX…š!Ä	k¥ÀÄÏPy'êóú¼íç;Î1dEM¾½˜ ›÷ÒóSÁKÃ_Þ<šagØÉÙŠEkL‚0ÞÊ«æxÇ-xíö:H­®¾|j „Uºü“…5!óˆ‹q0“Ì3Ì{†›‚ul½‚ð—VfíÞ}\Ãɉ‚¾6_‹†(ô0­nrX;¹¶~
-Ñàz¤_>zæ®û9«€²é‰WQÓ%²fÈè?Äíìmï¶DWCàl0¸~tâÊäûûµ§/jˆäÆn®­/1ÀùB$á-'’CLo³†ð·xÅ	qŽÚªH$‚­äW)•¼2€?ŠInJ
+xœì½|U÷>~§ÏÜéDêR	mw–’²@H 	UT–d“,$ِlèMª€¢"""*¢bCDEÄŠˆŠØ»"bCQ±!6øÍÌž€è×W}Ëÿóù“—½wîÜ{žsÎ-Ï9—/"B2šƒ(4$7¿‹¹ˆ¾«œÏá…åáÊÄsÍùXP8)îCÑf)NË;ÎóñâÊ’ò‰ö¤ñ‘Î3º£¤ljq¢¿6!zQi$\tX~l'"R³Öî¥Nƒ´µñA„¨EÎs›ÒòøÀ;â|Œ)‹†ÏÖ§uhWžRÙè„àȧîtZ}áòHóñƒopžŸG¨7_«ŽÏQ>¡~¯"ô\«ÊªHe/îkg<>†SJÑV´ÛùymDkˆ
+Γ«ßD§e¹ÍG5NËb7±˜ìä´m at GÐ^§çB´›ÚH#b 
+8­½Éè;¢ mqd¤‘±4¢sè-t½•þ„Þƒ’éjz=–®&ÔMÌpfƒó7…ÚIèYÔm%ö£j´:D¨ít­ ýÔj#úÈA¡ù»Ñr´Mwt±ˆšMN'óœ–]Ì´Úù‰9ï÷k‰½ŽvÛˆyhZEÑä ´–ØçصEó¨r¶ã“ Yìè¿Ë‘µÇ¿UÓˆÙG`tœìè´9Ú;Xã¼ÏfT'fŸ÷sÍvÐzv+kq­×cˆÄaöJ´í¥ÆP©·‰ùtkú6z Zžð 5-wd¯vÇ°ÅÄTÇv÷gº+œL%6¢CôXnœ#{§k‘ƒ¹…Ìs,*F۝¿“Yͱ©1ŸZìhê¾m†öpé.ÎxG7Ó±¡DãÚtt7ÚŒ:Q+ÑrG’g/›ÌuF®¡86/'–’GÑ*u@Åô—Ž¯‘…ÐJ„äX†¦H%ù´MdÛ¬¢Mý†Žô=3ªe§¤Ó}çÛ„†l’§ú¶ž81d$Ý„µ‰iº‰jËo¢Û¶>ð{/tJ4d¤oÓ¯¡›á´åtªî“Óì´‡2¼w.è&¦­ó¿¬±›|…¥¾%Ú’Ö=—h‘žœ5ëØ]~¼™³?øᵟ†ÊUnË)F¸-Ö
+ª uD¥HB$ÒP?Ä;;­Sê”îZjLô99ná‡:Dâ ÔID?BB"Ùê´Sï	uIäX¨³“ó Î#ÝÙ7‰ºè¬"uÙ¸¾ýh¨+Èî5ê{Ýuѽv:ˆ-8úzèn@
+‰ÝP'O|uÊi?u5$[AAÈL¨³È"ˡΣVä2¨‹¨'ùÔå¶=©æPWPiÏcP×PÃ^×@]G|¯‡Qº³Ö*ÑTT…¢¨ÄñpùP{Tè¬*ò£®ÎOÀ©szøPšÓ'¸Ó;‚¨%9­Y¨ÂéßÙ©¥¢2çLJòNʪöž"NqÆLr>‹œžøO v?‰Zà Mr°Ü]Qáôvõ;cþ5Ä§6Þ7Ü9ÿ|R©Sw¥E¼aÏ"çœwÚ|Žf5v™óTè<9¸åN÷F(=V9µ*ZR÷µ/ìàówíð›êK‹Æ«ãU‘py’/«¢°³/µ¬Ì—çöªöåEª#U“"Eño†vw‡„'•U”øÒÂ¥¿30#2><¼ÆÙ<ኒHµ/\ñE+|•5ãÊ¢…¾¢Xy8Záhvª‰ùžÎ± ƒóÃÎCšcLMp*±Ø„?7äÏôîy»ÚñQÌó ßñ¹ßY9hx¤ª:«ðù;û§Š:MЙ°Š=i‰9ÃŠ«Å-ŽU8.Š;G޼ǝY뉺8?E c’#£³36æ”UÎLF<yUÞœwväFœ1¨4¯ìÙ¥K‘#tRMçêXMUa¤8VUé\q^gÖÓ vÔ®Óßî÷»î"Þڍ8+(†&;}Ý•úϬ?WRçÍT§O©72꼫ôìŠ{kÝõZ•7ÂÝ®ÔI§yòt;êöWÍ)ûë÷¬ÁÎÏ™lO¬°S«ïµßîtŒ:ýü§NþÌ:ó|×ÙuÞ`¯÷ZÜUXîùz‚ÓsfàÿÒŵlˆ'¯Ü“V·›¢žN¥Þ»ØUâ¡TÀ¬'Á¼'f+–Xc‰õžäéóf¿Â_	;6s¤ÆaEa„=	Oc÷´8}=zýÜu˜^+ÁíÐ=±–#Þ†O¬½VõVI+oæܱE^YíéUèŒ	ƒ}ØÛ…Î
+-÷¤Ä½7µþ)vje°“ÚŸÔ±Á=µ\ýãÎúM¬~±Î'nK¥·kŠ„Bot­6Ežqo­sÞƽ·	üI°›Íj<)	ŸLöÖ@©w*ÅÁ3å^[}‹jm¨:eU&´­ñ|˜TovÜz¹7Ÿ‰¹ÆõNjgtÒïØ‘tÒÎ.Þ	âó$'öCBv¼zêìÿ±ÕµžKh[yrEÇ=½êV]E“=”ÿ)„ÚÝPìê`a¤b‘÷éb$y¥ë‰ñNBO^¢Oíü¹ë¸N¶Ú*ô°‹<£ iOow€vaGbÌ;êæ þYTçßžNÿ8ì†êSúÖî•:Õ?êóy6‡=ͱw6ŸºÖÞHpIøæ3æ± æ¾Ü+ëΏ?3q‰\f
+ƒEOñԍu}2¸%îú¼ØÓ±VR™·N«N¶$4u}ZToÎ믺Z
+{ŒõÎŒ2ï	Ÿ´¨ÈÓԝ¯ŠzÞ(9…WHµghØ[=‰µ[‹qºªÿO›jµÄ`AÝ
+{sôç58çtœI·$˜ï2o\ôwNs|rvª¼s6ì+urk[ªO®ÈÚýr:{Dàœ‹xVÔ"Mö¬*òÆ·:¶:i÷é#°ó®–m[Õ[e‰=“}¿Œóö{¬ž®5°j×É$çmô‹ )žŸ+`'W:?	ö
+{'jääˆúóžÐ¹¶Ÿq§”z'¼Ï+«ALj·’~oÔžug:»‹<&¨ðæ½¾¿ÎäU\Ïsõçð¯îÕjïÔ¬åêºÝV»“ÜÈ¡ìdìQ#N•Xé­è	Îg	ÌX‚ÝU…OžªÿΓê÷­{$|X|ÒSPÈÃÉE9Γ‹“ë< N™ç½ËrÚ|N—ç¼î<e8­Þ¼¤zoÜ÷­¼Ý8©»sÑ0OVBFžóéÊå´¸²}Þ³û4ÈéŸãÈrdžÐH#äHËw4Ëuê®ìÁNk¶S† Ÿ;"Ýiæ<»õþȍBx9Ψoï¸ã\]š8íu¨§j•å!Öj6ØyÊs䀷©Žì,Ož«’¹õÐ3á¹<Oºë#W²+3ÝÑ(Û{r[‡9å§_¾çÏTÏ愶9ž
+™Îû„-!OƒÄL$4JwÊ!¶Û£¿£Wç© z&yóèÚ“áwQy½šåÂ,»õ:)Á—	=\ÿ?‰œïÙŸíüø<ûœ–onRùµrk×NO‚«7ö¼1̳/ÕóC®‡æõs½èú3ûäŠË«7+éž¿Üys5ÏðR=äŸÑ’ZiõgçL«ŸDèïÙò<•íõÎwürúglI¬Ç,ÏÖtðuBfbÝ'ÖDv=ï¦{6º3;ÔA
+ÁšJõ|wªî<ðô¯³"1©ð™^Ïgu³Ÿ³[«O‡\p¯ŒðöbÈë•êÍuþÉ=’éíßÁ ù°“+¬îë3÷¤f§ú·vÕöû3gGBV-ö©3˜á­§lÐ0ÿ¤7=ðÈMœ]!‡×
+½<'~òÜ>•¹ëGuÑhý¸3©ÞY[?HœÂý½¾å§õ«kMdK	ΪËuêÇngÊ°k³ãD,_õÖE‰³;‘Տz‹¼ø<VŸŒJb^;™LöÞÖqz%ܝÄNÉó\ä°ÇýI'±j¹¨NV"®{Ñ‚‹V}oþ>Cáßd†•ß'P&{õ8D&®}5Ð×mŸvZ6\{ÿóÛ9ðqjm9SäPßÿUÞ|WB.õ<ìÆ“AnªÍËê|âz qïV~ڬ׭>WZOtú­‚냒zšy¾Æ(q‡çbbJ½ãúïß:ýÓwÖÿK÷Aø”û Ó#¯ß}>ã}ï?|„ÿÔ}Щ‘|a=êî:j{þ¹Ô3Ý°àÿÚ½’ï7÷Jøÿ¿Wªw¯TwÃðÿÍ{%|
+Ãþ÷î•ð²µÿ…{%|Æ{¥:‹þ3÷Jøîþ3÷Jý«÷JuÿêôOÞ+Õí·Sï•~}ÿv)‘Ÿ'"‰ÿµÛ%ŒN½]:óíÆæv	ÿw}õ<ø¿}Ë„½5öÛhæ?Ë„ÿ‡o™ði·Lu¹îò–	ÿŸ·L¾ÿØ-þn™|ÿ¶[&ìù`¸#u §mÂÛ©ÎûÿÜÝ>ãœÿ·îŽðoîŽ|ÿµ»#ü»wGuw@ÿþ»#ü/Üý‘ÜïÝQíÉúûŒòÛün|êßÒü“7>øoÝøü6gûk7>¸ÞÏÝ;ü74ñßÈï‡ên°‡ã>uF(Óû‚–ûU5÷Ën'¿çk_‰øÆEÊb“;töý‰/¶uöõ/›ZYZí‹–Wƪâ‘"_qU¬Ü—Z™_«Åð¾HW“ø"]}ŒëЇGªÂ¾„j'¿‡;ýáüÛïíýé¯üùNCŽVã°/^.Š”‡«&øbŧKÁxH¤ª<Zí}i.Zí+TE¬’ªp…cz’c»c–3ÌñXUI$ɏùÂS}•‘ªjg at l\ÜñXÔqAØWè(žñÒH­Ÿ
+cå•Nw·C¼Ô‘îx9RQíx¯•ç’VaE¾puu¬0vðpQ¬°¦<RÇ]}Š£eÎ$µw%z|ù±âødÇý­:xšTE*«bE5…OLQÔ1,:®&quÀ§Hr¦¹°¬¦ÈÕdr4^«‰;Ê”GÈE¨J¸Ò[SíôwÍIò•G\«±·@ªK“êa$¹˜]bU¾êˆ3N﨣*˜´«œ#¶Òut'\çM.uÖo¸ÓP\SUá F¼E1_u,ÉW]3n|¤0öÇÊœÅæT«(ŠºvT÷ĸÀ›ñ,H¬"O“‹ "w¦¡:ÑêÎJeÝ
+H¼óU—†ËÊð¸xÍQÃÙ%áSìŒU8ë¢ÊW«ŠœÑl_|je¤8ì uN(uêÛòðTg·8Ë¢ÅQw¡…ËâÎÒs*ŽÐpQ‘gyÂuî
+W9zÕ”…«°T©Ž–Txj”$öª3È]¡áBGHµ;¢VŸêÓ‘\‘Øð.;³ S«G4G½Š²©¾h½eŽ]sª"î¯Mx}ÝJµëHw^j·GÄYs‘*oÐäXUQµ¯ÕÉ}ØÊÅ®}[¹Û¶•ç2gf²a¿Œ‹8;É•Zã́ë“I±èIÅ"SâÎŽñ…++íWq_$lw$»\7)¥á¸¯4\íHŒTœâwÕÕ­î"_ME(\§*ö”KXøG³Z+swµ7mî$…}eîéáì•ÚŽ•áÂ	áÇ0gVÄ°»TÿµEu
+”s`9*FÊŠ]¥„|™¹9¾üÜÌ‚©y!_V¾oH^îð¬ŒP†¯Uj¾óÜ*É7"«`@î°ŸÓ#/5§`”/7Ó—š3Ê7(+'#É9$/”Ÿsó|Yƒ‡dg…œ¶¬œôìaY9ý}iθœÜ_vÖà¬GhA®7De…ò]aƒCyéœÇÔ´¬ì¬‚QI83« Ç‘é(—çKõ
+IÍ+ÈJ–šç2,oHn~È‘‘áˆÍÉÊÉÌsPBƒCŽŽ ôÜ!£ò²ú(Hr8I¸ /5#485oP’Ï–똜çóºtv´tdøBÃÝÁùR³³}iYùy¡ÔÁn_×;ýsr‡pfî°œŒÔ‚¬Ü_ZÈ1%5-;”ÐÍ1%=;5kp’/#upjלZ·[Âœ:w`w@ÿPN(/5;É—?$”žåV?få…Ò¼žŽïOd{ê¦çæ䇆sœ~µIxÄ€áêü/ÝÓÌ3?Ç1וS›WpR•Yù¡$_j^V¾;#™y¹Žºî|æfz+`˜ãOwòr at _wŽÜ¶ß®§—;Ì¥f;ó]5œ|J_gu…¦F*ãîچ͝8½c4qv&y«6q8K¸…³qm^Õ¡%ggy¬“8ÝêÛ¥ã¤ÄÑëÎêv˜(qôMŠ8'`µ{”ĪpÌ=L&G«½îP`y,Áy¾êp™æŒrw‘×Ë9+Ãeΰê“jž²¡p-VVE!“«¢qç0ñ…kœÖªè4 á* )Ï_.JÝáÐ¿*R]é°TtR¤ljg§o•Ëež&ÑŠâXU9˜î¹¯0Þ³6TˆûJ<áE±8ŽU•töaìE\;tú³¿òðÏÄA8ùþJ„ëâ ß_Œƒðoã 8ä=IÕµœq† µ.`Á'VòÕÆJø#V‰yø·ÅJ8±aÿV¬„ÿÁX	×ÅJ¾¿+áSâ‚¿+áß‹•|>VÂõb¥úÛ÷”pÉásçø§Â%á’ïo…Køu½¼ñŸ™pEÌ÷·C&ü†LB&ß_™ðé!“﯄LøŒ!“ï_	™pAêðÁs]µSü¥è×Yþw¢#\ùþNt„ëGG¾¿á3FG¾¿¹‹õ”r2ðÁ¿øøþ…ÀÿqàãûöŸSc‡ÿ; ‰×öïç
+¸³Stþ;¿3ØÅ»·›àüíâݝyÿª×Ùû÷ÕJ§íÔ-üãß0ì29:!Ú%êVS:W–Vvó/ý.'™øè³Ðht†?Ö
+ïw¢ID!1ˆEâ‘€0‘„d¤ iHG2‘… †è,ԝ£&¨)j†š£Ž"-Q+ÔµAmQ;tj: sQG”„:9öwA]Q7ï·>mDÝQ2êRÿöBç¡Þ¨ê‹úy÷ÜéÞ}t¦÷oYh äxl°÷/CÐP”ç}{v˜cø4rl9A ÑEh¬ã†;ÑÍè4=‚V¢OÑ´]Š®G·£õ‰– ·Ð<t%ú}‹–¢kÐ"´½‡¾FkÑFô=úE7¡»Ð³hºsæèrgîv;Ž~=‡^DÏ£=èt¹ÿ=—ÐËèg֏ +ÐkèU´Ï™ÛÏÑh±3)îÜ—£2gBÖ9îŸèÝÚV{·³“œ•ñ™³¦¡©h:š‰f ­èF4ÍBsÐÅè0úm#(‚&‚%8‚G¿¢ã„@`B$$t‚@„L(„J„Fè„A˜„E4 gˆ³‰ÆDtýH4%š͉„hI´"Zmˆ¶D;â¢=с8—èˆ~B¯ID'¢3Ñ…èJt#üD€°‰ ѝH&z)DOô:Hô"Î#z}ˆ¾D?"•H#Ò‰"Ddý‰DÚ„î%ƒˆlb0‘CäCˆ¡D‘~F¿ ÑGD1ŒNŒ F£ˆÑÄùÄââBâ"b,&Æ…D!Š‰¢”ˆ¢‡‰ñÄ¢Œ(G£Oˆ
+"FT‰*¢šˆ5Ä$b21…˜JL#¦3ˆ™Ä,b61m .&æóˆKˆùÄb!±ˆXL,!.%.#–ˈåÄåÄÄ
+âJâ*âjb%q
+±Š¸–XM\G¬!®'Ö7눉›ˆ›‰õÄ-ÄâVâ6âvb#qq'qq7q±‰¸—ØLÜGl!î' $¶Ûˆ‡‰íÄ#Ä£ÄcÄãÄÄ“Äâ)b'ñ4±‹x†x–xŽØM<Oì!^ ^$^"^&^!ö¯ûˆ×ˆ×‰7ˆ7‰·ˆ·‰wˆw‰÷ˆýÄûÄââ ñ!ññ1ñ	ñ)qˆøŒøœ8L|A|I|E!¾&¾!¾%¾#¾'Ž?Lj‰ŸˆŸ‰_ˆ_‰ãÄ	‘I’I“É’É“‰I‘”H™TH•ÔH4H“´ÈdCò,²y6Ù˜lB6%›‘ÍɤlI¶"[“mȶd;ò²=ف<—ìH&‘ÈÎd²+ٍô“Ò&ƒdw2™ìA¦=É^äydo²Ù—ìG¦’id:™A†ÈL²?9€Ì"’ƒÈlr0™Cæ’CÈ¡d™OÃÈáär$9ŠMžOŽ!/ /$/"Ç’arYH‘²˜,!KÉ(9žœ@–‘åd#+ɉdYMÆÉr9™œBN%§‘ÓÉäLr9›œC^LÎ%ç‘—óÉäBr¹˜\B^J^F.%—‘ËÉËÉ+Èä•äUäÕäJòry-¹š¼Ž\C^O®%o ב7’7‘7“ëÉ[È
+ä­ämäíäFòòNò.ònòry/¹™¼½[ÈûÉÈÉ­äCä6òar;ùù(ùù8ùù$¹½ÞAï¢÷Ñ›h?ù¹“|šÜE>C>K>Gî&Ÿ'÷//’/‘/“¯{ÉWÉ}äkäëää›ä[äÛä;ä»ä{ä~ò}ò ùyüüˆü˜ü„ü”<D~F~N&¿ ¿$¿"_“ߐߒߑߓGÉÈcääOäÏä/ä¯äqò…(‚")Š¢)†b)Žâ)Â”HI”L)”Ji”N”IYTª!uÕˆ:›jL5¡šRͨæTÊGµ¤ZQ­©6T[ªuÕžê@Ku¤’¨NTgªÕ•êFù© eSAª;•Lõ R¨žT/ê<ª7Õ‡êKõ£R©4*Ê BT&ÕŸ@eQ©AT65˜Ê¡r©!ÔP*Ê§
+¨aÔpj5’…n FSçSc¨¨©‹¨±T˜GRET„*¦J¨R*J§&PeT9UAÅÐuT%5‘ª¢ª©8UCM¢&SS¨©Ô4j:5ƒšIÍ¢fSs¨‹©¹Ô<êj>µ€ZH-¢SK¨K©Ë¨¥Ô2j9u9uµ‚º’ºŠºšZI]C­¢®¥VS×Qk¨ë©µÔ
+Ô:êFê&êfj=uµº•ººÚHÝAÝIÝEÝMÝCm¢î¥6S÷Q[¨û©¨©­ÔCÔ6êaj;õõ(õõ8õõ$µƒzŠÚI=Mí¢ž¡ž¥ž£vSÏS{¨¨©—¨—©W¨½Ô«Ô>ê5êuê
+êMê-êmêê]ê=j?õ>u€ú€:H}H}D}L}B}J¢>£>§S_P_R_QG¨¯©o¨o©ï¨ï©£ÔÔ1êGê'êgêêWê8u‚F4A“4EÓ4C³4Gó´@cZ¤%Z¦Z¥5Z§
+Ú¤-ºݐ>‹nDŸM7¦›ÐMéftsºí£[Ò­èÖtº-ÝŽ>‡nOw Ï¥;ÒIt'º3Ý…îJw£ýt€¶é ݝN¦{Ð)tOº}Ý›îC÷¥ûÑ©tNgÐ!:“îO ³èô :›Lçйôz(GçÓô0z8=‚I¢GÓçÓcèèé‹è±t˜GÒEt„.¦KèR:J§'Ðet9]AÇèJz"]EWÓqº†žDO¦§ÐSéiôtz=“žEϦçÐÓséyô%ô|z½^D/¦—ЗҗÑKéeôrúrú
+z}%}}5½’¾†^E_K¯¦¯£×Ð×ÓkéèuôôMôÍôzúz}+}};½‘¾ƒ¾“¾‹¾›¾‡ÞDßKo¦ï£·Ð÷ÓÐÒ[é‡èmôÃôvúúQú1úqú	úIzý½“~šÞE?C?K?G烈§÷Ð/Ð/Ò/Ñ/Ó¯Ð{éWé}ôkôëôô›ô[ôÛô;ô»ô{ô~ú}ú ý}þþˆþ˜þ„þ”>DFN¦¿ ¿¤¿¢Ð_ÓßÐßÒßÑßÓGéècôôOôÏô/ô¯ôqúƒ‚!Š¡†aŽáÁŒÈHŒÌ(ŒÊhŒÎŒÉXL¦!sÓˆ9›iÌ4aš2͘æLÆÇ´dZ1­™6L[¦sÓžéÀœËtd’˜NLg¦Ó•éÆø™ c3A¦;“Ìô`R˜žL/æ<¦7Ó‡éËôcR™4&É`BL&ÓŸÀd1™AL63˜Éar™!ÌP&Ég
+˜aÌpf3’ÅŒfÎgÆ0021c™03Ž)dŠ˜SÌ”0¥L”ÏL`ʘr¦‚‰1•ÌD¦Š©fâL
+3‰™ÌLa¦2Ó˜éÌf&3‹™ÍÌa.fæ2ó˜K˜ùÌf!³ˆYÌ,a.e.c–2˘åÌåÌÌ
+æJæ*æjf%s
+³Š¹–YÍ\Ǭa®gÖ270똙›˜›™õÌ-ÌæVæ6ævf#ss'ss7s³‰¹—ÙÌÜÇlaîg`d¶21Û˜‡™íÌ#Ì£ÌcÌãÌÌ“Ìæ)f'ó4³‹y†y–yŽÙÍ<Ïìa^`^d^b^f^aö2¯2û˜×˜×™7˜7™·˜·™w˜w™÷˜ýÌûÌææ ó!óó1ó	ó)sˆùŒùœ9Ì|Á|É|Åa¾f¾a¾e¾c¾gŽ2?0ǘ™Ÿ˜Ÿ™_˜_™ãÌ	±K²K³˲˳‹Y‘•X™UX•ÕX5X“µØlCö,¶{6Û˜mÂ6e›±ÍÙ¬mɶb[³mضl;ö¶=ہ=—íÈ&±ØÎl¶+ۍõ³Öfƒlw6™íÁ¦°=Ù^ìylo¶Û—íǦ²il:›Á†ØL¶?;€Íb²ƒØlv0›Ãæ²CØ¡l›Ï°ÃØáìv$;Š͞ώa/`/d/bDzav[ȱ¶˜-aKÙ(;žÀ–±ålc+Ù‰l[ÍÆÙv;™ÂNe§±ÓÙìLv;›Ã^ÌÎeç±—°óÙìBv»˜]Â^Ê^Æ.e—±ËÙËÙ+Øì•ìUìÕìJöv{-»š½Ž]Ã^Ï®eo`×±7²7±7³ëÙ[Ø
+ì­ìmìíìFööNö.önöv{/»™½ÝÂÞÏ>À>Èneb·±³ÛÙGØGÙÇØÇÙ'Ø'ÙìSìNöivûû,û»›}žÝþÀ¾È¾Ä¾Ì¾Âîe_e÷±¯±¯³o°o²o±o³ï°ï²ï±ûÙ÷ÙììAöCö#öcööSöûû9{˜ý‚ý’ýŠ=Â~Í~Ã~Ë~Ç~Ïe`±?²?±?³¿°¿²ÇÙâŽä(ŽæŽå8Žçs"'q2§p*§q:gp&gq
+¸†ÜY\#îl®1ׄkÊ5ãšs-8×’kŵæÚpm¹vÜ9\{®w.בKâ:q¹.\W®ççœÍ¹î\2׃Kázr½¸ó¸Þ\®/׏KåÒ¸t.ƒq™\n —Å
+äqÙÜ`.‡Ëå†pC¹<.Ÿ+à†qùÜHn7š;ŸÃ]À]È]čåÂÜ8®+â"\1W•rQn<7+ãʹ
+.ÆUr¹*®š‹s5Ü$n27…›ÊMã¦s3¸™Ü,n67‡»˜›ËÍã.áæs¸…Ü"n1·„»”»Œ[Ê-ã–s—sWp+¸+¹«¸«¹•Ü5Ü*îZn5w·†»ž[ËÝÀ­ãnänânæÖs·p¸[¹Û¸Û¹ÜܝÜ]ÜÝÜ=Ü&î^n3w·…»Ÿ{€{ÛÊ=Ämãæ¶sprqsOpOr;¸§¸ÜÓÜ.îîYî9n7÷<·‡{{‘{‰{™{…Û˽Êíã^ã^çÞàÞäÞâÞæÞáÞåÞãösïs¸¸ƒÜ‡ÜGÜÇÜ'ܧÜ!î3îsî0÷÷%÷w„ûšû†û–ûŽûž;ÊýÀã~ä~â~æ~á~åŽs'xÄ<ÉS<Í3<Ës<Ï<æE^âe^áU^ãuÞàMÞâð
+ù³øFüÙ|c¾	ß”oÆ7ç[ð>¾%ߊoÍ·áÛòíøsøö|þ\¾#ŸÄwâ;ó]ø®|7ÞÏx›òÝùd¾ŸÂ÷ä{ñçñ½ù>|_¾ŸÊ§ñé|â3ùþü >‹Èâ³ùÁ|ŸËá‡òy|>_Àã‡ó#ø‘ü(~4>?†¿€¿¿ˆˇùq|!_ÄGøb¾„/å£üx~_Æ—ó|Œ¯ä'òU|5çkøIüd~
+?•ŸÆOçgð3ùYül~1?—ŸÇ_ÂÏçðùEüb~	)¿”_Æ/ç/ç¯àWðWòWñWó+ùkøUüµüjþ:~
+=¿–¿_ÇßÈßÄß̯çoá7ð·ò·ñ·óù;ø;ù»ø»ù{øMü½üfþ>~?ÿ ÿ ¿•ˆßÆ?ÌoçáåãçŸàŸäwðOñ;ù§ù]ü3ü³üsünþy~ÿÿ"ÿÿ2ÿ
+¿—•ßǿƿοÁ¿É¿Å¿Í¿Ã¿Ë¿ÇïçßçððùùøùOøOùCügüçüaþþKþ+þÿ5ÿ
+ÿ-ÿÿ=”ÿ?ÆÿÈÿÄÿÌÿÂÿÊçOH R Z`Và^,ˆ‚$È‚"¨‚&è‚!˜‚%4
+g	„³…ÆB¡©ÐLh.´|BK¡•ÐZh#´Ú	çí…¹BG!Iè$tº]…n‚_¶ºÉB!Eè)ôÎz}„¾B?!UHÒ…!$d
+ý…B–0P$dƒ…!W"ò„|¡@&F#…QÂhá|aŒpp¡p‘0Vã„B¡HˆÅB‰P*D…ñ¡L(*„˜P)Lª„j!.Ô“„ÉÂaª0M˜.Ìf
+³„ÙÂába®0O¸D˜/,
+‹„ÅÂáRá2a©°LX.\.\!¬®®®V
+׫„k…ÕÂuÂáza­pƒ°N¸Q¸I¸YX/Ü"lnnn6
+ww
+w	w÷›„{…ÍÂ}Âá~ááAa«ð°MxXØ.<"<*<&<.<!<)ìžv
+O»„g„g…ç„ÝÂóÂááEá%áeáa¯ðª°OxMx]xCxSxKx[xGxWxOØ/¼/>
+
+	ŸŸ
+‡„τυ×ÂWÂákáá[á;á{á¨ðƒpLøQøIøYøEøU8.œÀ˜Ä¦1ƒYÌacKXÆ
+V±†ul`[¸nˆÏðÙ¸1n‚›âf¸9n}¸%n…[ã6¸-n‡ÏÁíq|.p'ÜwÁ]q7ìÇlã qœ‚{â^ø<Ü÷Á}q?œŠÓp:ÎÀ!œ‰ûã8ăp6Œsp.‚‡â<œð0<À#ñ(<ŸÇàð…ø"<‡ñ8\ˆ‹pã\Š£x<ž€Ëp9®À1\‰'â*\ã¸O“ñ<OÃÓñ<ϳñ|1ž‹çáKð|¼ /Ä‹ðb¼_Š/ÃKñ2¼_Ž¯À+ð•ø*|5^‰¯Á«ðµx5¾¯Á×ãµø¼߈oÂ7ãõø¼ߊo÷ãø|'¾ߍïÁ›ð½x3¾oÁ÷ãðƒx+~oÃãíøü(ÚŒîÏáÇñèô z
+?‰¶ ûÑN¼ÍEO¢…ø)¼?îÀ»ð3øYüލŸÇ{ÐÓøü"~	¿Œ_Á{ñ«xz=†_ïã7ð›ø-ü6~¿‹ßCÛñ~ü>>€?Àñ‡ø#ü1þŠáÏðçø0þ‰¿ÂGð×øü-þâð1ü#þ	ÿŒÁ¿âãø„ˆDB$EJ¤EFdENäEAÄ¢(J¢,*¢*j¢.¢)Zb±¡x–ØH<[l,6›ŠÍÄæbÑ'¶[‰­Å6b[±xŽØý vÏ;ŠIb'±³ØEì*výb@´Å Ø]L{ˆ)bO±—xžØ[ì#öû‰©bš˜.fˆ!1Sì/³Äâ 1[,戹âq¨˜'æ‹â0q¸8B)ŽG‹ç‹cÄÄŋıbX‡.Å"1"‹%b©Ç‹Ä2±\¬cb¥8Q¬«Å¸X#N'‹SÄ©â4qº8Cœ)Îg‹sċŹâ<ñq¾¸@\(.‹KÄKÅËÄ¥â2q¹x¹x…¸B¼R¼J¼Z\)^#®¯W‹×‰kÄëŵâ
+â:ñFñ&ñfq½x‹¸A¼U¼M¼]Ü(Þ!Þ)Þ%Þ-Þ#nï7‹÷‰[ÄûÅÄÅ­âCâ6ñaq»øˆø¨ø˜ø¸ø„ø¤¸C|JÜ)>-Ÿw‹Ï‹{ÄÄÅ—Ä—ÅWĽâ«â>ñ5ñuñ
+ñMñ-ñmññ]ñ=q¿ø¾x@ü@<(~(~$~,~"~*??‹_ˆ_Š_‰GįÅoÄoÅïÄïÅ£ââ1ñGñ'ñgññWñ¸xBB!‘%Ñ#±'ñ’ aI”$I–I•4I—É”,©ÔP:Kj$-5–šHM¥fRs©…ä“ZJ­¤ÖR©­ÔN:Gj/uÎ•:JIR'©³Ô­’ºJÝ$?ºM
+H¶”ºKÉR)Eê‰VK½Ðµè+é<©·ÔGê+õ“R¥4t‹”.eH!´BÊ”úK¤,i 4HÊ–K9R®4DŠÖHyR¾T 
+“†K#¤‘Ò(i´t¾4Fº@ºPºH+…¥qR¡T$E¤b©D*•¢Òxi‚T&•£[¥
+)&UJ¥*©ZŠK5Ò$i²4Eš*M“¦K3¤™Ò,i¶4GºXš+Í“.AË¥ùÒi!º
+]--’KK¤K¥Ë¤¥Ò2i¹t¹t…´BºRºJºZZ)]#­’®•VK×Ik¤ë¥µÒ
+Ò:éFé&éfi½t‹´AºUºMº]Ú(Ý!Ý)Ý%Ý-Ý#m’î•6K÷I[¤û¥¤¥­ÒCÒ6éai»ôˆô¨ô˜ô¸ô„ô¤´CzJÚ)=-í’ž‘ž•ž“vKÏK{¤¤¥—¤—¥W¤½Ò«Ò>é5éué
+éMé-éméé]é=i¿ô¾t@ú@:(}(}$},}"}*’>“>—K_H_J_IG¤¯¥o¤o¥ï¤ï¥£ÒÒ1éGé'égééWé¸tBF2!“2%Ó2#³2'ó² cY”%Y–Y•5Y—
+Ù”-¹ÜP>Kn$Ÿ-7–›ÈMåfrs¹…ì“[Ê­äÖr¹­ÜN>Gn/wÏ•;ÊIr'¹³ÜEî*w“ýr@¶å Ü]N–{È)rO¹—|žÜ[î#÷•ûÉ©ršœ.gÈ!9Sî/³äò 9[,çȹòy¨œ'çËò0y¸<B)’GËçËcääå‹ä±rX'ÊErD.–KäR9*—'Èer¹\!ÇäJy¢\%WËq¹Fž$O–§ÈSåiòty†<Sž%Ï–çÈËsåyò%ò|y¼P^$/–—È—Ê—ÉKåeòrùrù
+y…|¥|•|µ¼R¾F^%_+¯–¯“×È×ËkåäuòòMòÍòzùyƒ|«|›|»¼Q¾C¾S¾K¾[¾GÞ$ß+o–ï“·È÷ËÈÊ[å‡ämòÃòvùùQù1ùqù	ùIy‡ü”¼S~ZÞ%?#?+?'ï–Ÿ—÷È/È/Ê/É/˯È{åWå}òkòëòò›ò[òÛò;ò»ò{ò~ù}ù€ü|PþPþHþXþDþT>$&.–¿¿”¿’È_ËßÈßÊßÉßËGåäcòòOòÏò/ò¯òqù„‚B!J¡FaNáAÁŠ¨HŠ¬(ŠªhŠ®Š©XJ¥¡r–ÒH9[i¬4Qš*Í”æJŧ´TZ)­•6J[¥rŽÒ^é œ«tT’ÐCJ'¥³ÒEéªtSüJ@±• Ò]IVz()JO¥—ržÒ[é£ôUú)©Jš’®d(!%Sé¯P²”Ê %[¬ä(¹Êe¨’§ä+Ê0e¸2B©ŒRF+ç+c””•‹”±JX§*EJD)VJ”R%ªŒW&(eJ¹R¡Ä”Je¢R¥T+q¥F™¤LV¦(S•iÊte†2S™¥ÌVæ(+s•yÊ%Ê|e²PY¤,V–(—*—)K•eÊrårå
+e…r¥r•rµ²R¹FY¥\«¬V®SÖ(×+k•”uʍÊMÊÍÊzåeƒr«r›r»²Q¹C¹S¹K¹[¹G٤ܫlVîS¶(÷+(*[•‡”mÊÃÊvååQå1åqå	åIe‡ò”²SyZÙ¥<£<«<§ìVžWö(/(/*/)/+¯({•W•}ÊkÊëÊÊ›Ê[ÊÛÊ;Ê»Ê{Ê~å}å€òrPùPùHùXùDùT9¤|¦|®V¾P¾T¾RŽ(_+ß(ß*ß)ß+G•”cʏÊOÊÏÊ/ʯÊqå„ŠTB%UJ¥UFeUNåUAŪ¨Jª¬*ªªjª®ª©Zjµ¡z–ÚH=[m¬6Q›ªÍÔæjÕ§¶T[©­Õ6j[µzŽÚ^í ž«vT“ÔNjgµ‹ÚUí¦úÕ€j«Aµ»š¬öPSÔžj/õ<µ·ÚGí«öSSÕ45]ÍPCj¦Ú_ f©ÕAj¶:XÍQsÕ!êP5OÍWÔaêpu„:R¥ŽVÏWǨ¨ª©cÕ°:N-T‹ÔˆZ¬–¨¥jT¯NPËÔrµB©•êDµJ­Vãj:I¬NQ§ªÓÔéêu¦:K­ÎQ/VçªóÔKÔùêu¡ºH]¬.Q/U/S—ªËÔåêåêê
+õJõ*õju¥zºJ½V]­^§®Q¯Wת7¨ëÔÕ›Ô›Õõê-êõVõ6õvu£z‡z§z—z·zºI½WݬާnQïWPT·ª©ÛÔ‡Õíê#ê£êcêãêê“êõ)u§ú´ºK}F}V}NÝ­>¯îQ_P_T_R_V_Q÷ª¯ªûÔ×Ô×Õ7Ô7Õ·Ô·ÕwÔwÕ÷Ôýêûêõõ ú¡ú‘ú±ú‰ú©zHýLý\=¬~¡~©~¥Q¿V¿Q¿U¿S¿Wª?¨ÇÔÕŸÔŸÕ_Ô_Õãê	
+i„Fj”FkŒÆjœÆk‚†5Q“4YS4UÓ4]34S³´ZCí,­‘v¶ÖXk¢5Õši͵šOk©µÒZkm´¶Z;í­½ÖA;Wë¨%i´ÎZ­«ÖMókÍÖ‚Zw-Yë¡¥h=µ^ÚyZo­ÖW맥jiZº–¡…´L­¿6@ËÒjƒ´lm°–£åjC´¡Zž–¯hôáÚm¤6J­¯Ñ.Ð.Ô.ÒÆjamœV¨i­X+ÑJµ¨6^› •iåZ…Ó*µ‰Z•V­Åµm’6Y›¢MÕ¦iÓµÚLm–6[›£]¬ÍÕæi—hóµÚBm‘¶X[¢]ª]¦-Õ–i˵˵+´Ú•ÚUÚÕÚJím•v­¶Z»N[£]¯­ÕnÐÖi7j7i7këµ[´
+Ú­ÚmÚíÚFííNí.íním“v¯¶Y»Oۢݯ= =¨mÕÒ¶ikÛµG´GµÇ´Çµ'´'µÚSÚNíim—öŒö¬öœ¶[{^Û£½ ½¨½¤½¬½¢íÕ^Õöi¯i¯kohojoiokïhïjïiûµ÷µÚÚAíCí#ícííSíö™ö¹vXûBûRûJ;¢}­}£}«}§}¯Õ~ÐŽi?j?i?k¿h¿jǵ:Ò	Ô)ÖÕ9×ë¢.鲮誮éºnè¦né
+ô†úYz#ýl½±ÞDoª7Ó›ë-tŸÞRo¥·ÖÛèmõvú9z{½ƒ~®ÞQOÒ;éõ.zW½›î׺­õîz²ÞCOÑ{ê½ôóôÞz½¯ÞOOÕÓôt=Cé™z}€ž¥ÔéÙú`=GÏÕ‡èCõ<=_/ЇéÃõúH}”>Z?_£_ _¨_¤ÕÃú8½P/Ò#z±^¢—êQ}¼>A/ÓËõ
+=¦Wêõ*½Zë5ú$}²>EŸªOÓ§ë3ô™ú,}¶>G¿XŸ«ÏÓ/Ñçëô…ú"}±¾D¿T¿L_ª/Ó—ë—ëWè+ô+õ«ô«õ•ú5ú*ýZ}µ~¾F¿^_«ß ¯ÓoÔoÒoÖ×ë·èô[õÛôÛõúúú]úÝú=ú&ý^}³~Ÿ¾E¿_@Pߪ?¤oÓÖ·ëèêéëOèOê;ô§ôúÓú.ýýYý9}·þ¼¾GAQIYEß«¿ªïÓ_Ó_×ßÐßÔßÒßÖßÑßÕßC£'ôýúûúýý þ¡þ‘þ±þ‰þ©~HÿLÿ\?¬¡©¥ѿֿѿտӿ׏ê?èÇôõŸôŸõ_ô_õãú	„A”AŒÁœÁ‚
+ѐÙPÕÐÝ0Ó°ŒFCã,£‘q¶ÑØhb45š͍†Ïhi´2ZmŒ¶F;㣽ÑÁ8×èh$ŒÎF£«ÑÍðÃ6‚Fw#Ùèa¤=^ÆyFo£Ñ×èg¤iFº‘a„ŒL£¿1ÀÈ2ƒŒlc°‘cäCŒ¡Fž‘oÃŒáÆc¤1ÊmœoŒ1.0.4.2ÆacœQh£Ø(1J¨1Þ˜`”åF…3*‰F•Qmčc’1Ù˜bL5¦ӍÆLc–1Û˜c\lÌ5æ—óÆBc‘±ØXb\j\f,5–ˍˍ+ŒÆ•ÆUÆÕÆJãc•q­±Ú¸ÎXc\o¬5n0Ö777ë[Œ
+Æ­ÆmÆíÆFããNã.ãnãc“q¯±Ù¸ÏØbÜo<`<hl52¶ۍGŒGÇŒÇ'Œ'ÆSÆNãic—ñŒñ¬ñœ±ÛxÞØc¼`¼h¼d¼l¼bì5^5ö¯¯ooooïïïû÷ÆÆAãCã#ãcããSãñ™ñ¹qØøÂøÒøÊ8b|m|c|k|g|o5~0Ž???¿¿Ǎ&2	“4)“6“59“7›¢)™²©˜ª©™ºi˜¦i™
+̆æYf#ól³±ÙÄlj63››-LŸÙÒle¶6Û˜mÍvæ9f{³ƒy®ÙÑL2;™Í.fW³›é7¦mÍîf²ÙÃL1{š½ÌóÌÞf³¯ÙÏL5ÓÌt3Ã™™fs€™e4™Ùæ`3ÇÌ5‡˜CÍ<3ß,0‡™ÃÍæHs”9Ú<ßc^`^h^dŽ5Ãæ8³Ð,2#f±Yb–šQs¼9Á,3ËÍ
+3fVšÍ*³ÚŒ›5æ$s²9ÅœjN3§›3Ì™æ,s¶9Ǽ؜kÎ3/1ç›Ì…æ"s±¹Ä¼Ô¼Ì\j.3—›—›W˜+Ì+Í«Ì«Í•æ5æ*óZsµy¹Æ¼Þ\kÞ`®3o4o2o6×›·˜Ì[ÍÛÌÛ͍æææ]æÝæ=æ&ó^s³yŸ¹Å¼ß|À|ÐÜj>dn36·›˜š™›O˜Oš;̧̝æÓæ.óóYó9s·ù¼¹Ç|Á|Ñ|É|Ù|ÅÜk¾jî3_3_7ß0ß4ß2ß6ß1ß5ß3÷›ï›Ì̃æ‡æGæÇæ'æ§æ!ó3ósó°ù…ù¥ù•yÄüÚüÆüÖüÎüÞ<jþ`342615›',diQm1kqo	¶DK²dK±TK³tË°L˲X
+­³¬FÖÙVc«‰ÕÔjf5·ZX>«¥ÕÊjmµ±ÚZí¬s¬öVë\«£•du²:[]¬®V7Ëo,Û
+ZÝ­d«‡•bõ´zYçY½­>V_«Ÿ•j¥YéV†²2­þÖ +Ëh
+²²­ÁVŽ•k
+±†ZyV¾U`
+³†[#¬‘Ö(k´u¾5ƺÀºÐºÈk…­qV¡UdE¬b«Ä*µ¢Öxk‚Uf•[V̪´&ZUVµ·j¬IÖdkŠ5ÕšfM·fX3­YÖlkŽu±5ךg]bÍ·X­EÖbk‰u©u™µÔZf-·.·®°VÕÅñÒ©•¥‘
+.µ<\X«à‰’MW™aÃ^Á¥ÆJb‘	\8QŠé…Ѫšòâ²È±°®ŽÓ‹bñpaa¤"ŽOVٌ°+²(Qd8òÃq.€ % #^Cu‚"'«\Ôˆ$J6”ñ
+±=¥Jê)Õ¿NVÉɪԿ0V^†‡’zâ€zrJëêô€qá*ºÔù`³âѲ¢õ
+.,‰‚%Y	K¢	×eÎÑDIf
+$£ãŁõ0Æ×Õ¥AõµšpÊCIU$RQ®(Š²Ùášx„-ó
+)»~¿²zlvÂAe^Ag;ÖÓeΛ“_‘ŸS|Eýñ9‰ñ	W„Ýÿ;®ª˜³`¨PE	©(árÁøŸ›0>ærniMEI¸ª¦¼,\—cõŸØ¼„U	òêëPU_‡¼„U‰"?1ªÚ+Äüzn¬®çÆ‚úÒâõ¥$ÄÄ)p§4îNé°Ä”Ö$¦tXUV
+KXUãÌ°ªhE	Sã~ÊÃN±°¦þ7¦¾v͈zÚN®WU¯>µ®ÎŽNØ:Í+ðèºe<íd•)‹U”Ts5Ñ®Ýzt…²”~(PÚP¡ìe2”= L2Ê4(Ó¡Ì€2ef¢LüÀOÜÀMÜÀMÜÀMÜÀMÜÀMÜÀMÉdrKcULÌýL´¥‚Í©€
+Ø©€
+Ø©€
+Ø©€
+Ø©€
+Ø©€b†y˜5u˜i`o`§v`§v`§v`§v`§v`§v؝þN§~:à§~:à§~:à§~:à§~:à§~:à§~:à§~àg ~àg ~àg ~àg ~àg ~àg ~àg ~àg ~ðC€üà‡ ?dû'v}‰W at + ‡ =è!@zÐC€ôL@ÏôL@ÏôL@Ïë3ÁúL°>ð3Spª{’$6yød•K
+%Êp$qÖåV—…«KõX]Ý“âïÚÊnPú¡@iC„²;”ÉPö€2ÊT(Ó L‡2Ê”	oø»~7ÀïøÝ ¿àwün€ß-YʯVW×{€ I7ФhÒ
+4éštMü ‰4ñƒ&~ÐÄšøA?hâOøÁ~ð„ðý€ï|?àûßøÀ ~ ð€ ü àºóÎi^©®
+ @ €P  
+@ ( lPÀlPÀlPÀlp€
+°ß|ðmÀ·ß|ðmÀ~ðƒ€ü à?øAÀ~ðƒ€ü à?øAÀïøÝ¿;àwüî€ßð»~wÀïøÝ¿;àwüî€ßð»~wÀOüdÀOüdÀOüdÀOüdÀOüdÀOüdÀOüdÀOüdÀ‡0Àa€ ?„~üø!ðCà‡0Àa€ ?„~üø!ðCà‡0Àa€?ð!ðC8à‡pÀá€Â?„~üø!ðC8à‡pÀá€?ðS?ð!$ðCHà‡À!B?„~	üø!$ðCHà‡À!?ðS?
+ð!,ðCXà‡°ÀaÂ?„~üø!,ðCXà‡°ÀaÂ?„~üø!,ðCXà‡°ÀaÂ?„~üø!ðCà‡0Àa€ ?„~üø!ðCà‡0Àa€ ?кhÝ´îZ÷­ûÖý@ëþȁ¼Èb÷±ûÈý@ä~ r?µ?3Y(©
+Ork{œàQª[óÞºú/!¨×bC„²;”ÉPöKc±	Þ/öו
+e”éPf@‚2რÐi è4 t :
+ €N@§n E·P¦@	ø@¢ Ñ h H4 $ 
+ ‰ü~É!)ï?0Vg0i ˜4 L &
+ “€IÀ¤`Ò 0i ˜4 L &
+ “€IÀ¤`Ò 0i ˜4 ü à‘€H@¤ Ò i ˆ4 D "
+ ‘€H@¤ Ò i ˆ4 D "
+ ‘€H@¤ Ò i ˆ4 D "
+ €@@  Ê e 1 „ B !€@ˆ Ä Q ˆ( D ¢	 Ñ€hÉ!&«ˆUËEÑHU¤:Zí=áÔ²ÊÒ°W±x¤,
+K¡ÊꨓšzÍ|(ï³bP“rË£nbxV¯3Î-”$:éQ§û)XŒ‡E§Eâa¦Ø	Š9Œxôhçåà1¥Nv™AáÊÊ0›.W&א95äÈ(C¢T^iŒÉ–”‡©‚p
+ÚPCJ£TºówHuTʪ§‰
+jŸqø¤¤H}³#µfGkͶjNš0ÊOs*qbŠ"eñ0²èi®Iî˸g’+Œ™à™Tæ™”ðAZ:YQCN‰r±„]TUiŒ­vêÆxwl|ªÒ±«Ðùë<21×áR}_«§©)ÅêÏVMýÙŠœ­„]YOÍn<x	֐A æìn¬7®ö¬gȐ @>€|0 ù` ˆ# Ä â q€8@ Ž G ˆ# Ä â q #@F "	 ‘€H #@F€Œ0 D€Œ0 a 2 d„È™€Ÿ	ø™€Ÿ	ø™€Ÿ	ø™	|r@r@r@r@¨Ë겁ºl .r@r@HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -2?2?øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+?xËÞ²·lHülHülHülà3ø̆ÄφÄφÄÏž³çlà9xΞ³çlà9?????????????????øÖ¾µ!ñ³!ñ³!ñ³!ñ³màcøØ>¶!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³á؆{`@@@@@@@@@@@8߆ІІÐÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞï÷ƒÀûAàý ð~x?¼Þï÷ƒÀûAàý ð~x?¼Þï÷ƒÀûAàý ðaø0¨m½€ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aà¿ ð_ø/üþÿÿ‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼ÞÂ…gx/¼„ó<çyÎó œçA8σpžá<Ây„ó<çy0­V.ØçyÎó œçA8σpžá<Ây„ó<çwÎï œ¿A8ƒpþáü
+Âù„ó7ço0£vüÿkï\€äÊêóÞ=gz¤yH+i¥…e_ì.bW<´óÿwß{NÃÚ«Û}Ο—M‹Í#µ&#ÍHiÄh´!klÖ€±Ád0&~$¶!øv½‰óðƘøÇ—Ä±1K°“¯;béÍí9¿–.•"§R®uIÿ¾=§ïwîíÓßwîwu¾¡¿ðoÿðoÿðoÿðoÿðoÿðoÿðoÿðoÿðoÿðj¯ðj¯ðj	?•\W”\/”\”\”\”\”\”\”\”\”\”\”\”\”\”\”\”\”\”ð_	ÿ•ð_	ÿ•ð_	ÿ•ð_	ÿ•ð_	ÿ•ðZ	¯•ðZ	¯•ðZ	¯•ðZ	¯•ðZ	¯•½É~9.x­„×Jx­„×Jx­„×Jx­„×Jx­„×Jx¬d~^ÂS%<UÂS%<UÂS%<UÂS%<UÂSe9Ù/ý†§Jxª„§Jxª„‡Jx¦„gJx¦„gJx¦„gJx¦„gJx¦„gJx¦„gJx¦„gJx¦d~\2?.™—ÌKæ¯%óÕ’yjɼ´d¾YÂ;%¼RÂ%¼P2_+™§•|ïK¾O%ߧ’ïSÉ÷©œ|ŸlÒžý1O)™§”ÌS<<åá)OyxÊ3ïôÌ;=ýóð–gÞ釓ýUÔuHÔDÍÇëá=ïyxÏÃ{Þó¿‡÷<¼çá=ïyxÏÃ{Þóðž‡÷<¼çá=ïyxÏÃ{Þóðž‡÷<¼ç™_zæ—žù¥g~é™_z>7ÏçæùÜ<Ÿ›çsó|nžÏÉO>'擉yQbü&ÆobÜ&Æiâz0¡‡‰ë¾Äu\bÜ&®ã×q‰ë·Äõ[âú-qý–ú“ý$*ýaÜ'®Û×m‰ëµÄuZâº,q]–¸K\%¾	ýNèwB¿úÐïÄ÷(¡ß	ýNèwB¿ºÐí„n'Æbü'Æbü'ÆbÜ'Æ{b¼'Æ{b¼'Æ{b¼'Æwb|'Æwb|'Æwb|'Æwb|'Æwb|'ÆsÊãYóus]…ªÔ.µG-¨%ÕSµO­¨ê:ÁKTËu þ üøðàÀ€?  þ üøðàÀ€? þü!øCð‡àÁ´´´´´“öô7ÒßH#ýô7ÒßH'ŸO¤¿‘þ&ðø	ü~?ŸÀOà'ðø	ü~?ŸÀOàø¾oàø¾oàø¾oàçë\Á¿ükÁ¿ükÁ¿ükÁ¿|kÁ·|kÁ·|kÁ·|kÁ·|kÁ·|kÁ·|kÁ·|kÁ·|kÁ·|kÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯|jÁ§|jÁ§|jÁ§|jÁ§|jÁ§|jÁ§|jÁ§|jÁ§|jÁ§|jÁ§üiÁŸüiÁŸüiÁŸüiÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—®+øü ~ ?€Ààðø}ðûà÷Áïƒß¿~ü>ø}ðûà÷Áïƒß¿~ü>øè,þ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG>´àC>´àC>´àC>´àC>´àC>´àC>´àC>´àCKo¢Ï¾Ÿ}hÁ‡|hÁ‡|hÁ‡|hÁ‡|hÁG|dÁG|äºò~t¸@‡™¼?PûÔŠ: ©‘š¨ô=.Ðã=.Ðã=.Ðã=.Ðã=.Ðã=.Ðã=.Ðã=.Ðã=Æ/ürÁ/ürÁ/ürÁ/ürÁ/ürÁ/ürÁ/ürÁ'|rÁ'|rÁ'|rÁ'|rÁ'|rÁ'|rÁ'|rÁ'|rÁ'üqÁüqÁüñº‚‹.ã—~¹à—~¹à—~¹à—K.㛾¹à›¾¹à›¾¹à›¾¹à›¾¹àw~·àw~·àw~·àw~·àw~·àw~·àw~·àw~·àw~·àkוý£—zY —zY —zY —zY —zY —:W s:W s:W sE5yç+й+й+й+Ð9|iÁ‡|OÁ÷ü@Á”’yQɼ¨d^T2/Â/¬kAeœ|@Á|@Á|@Á|ÀºjŸZQÔ!5Ré7ŸOÉ烟(ø‰uŸÏ±®à3ŸÁo¬+øÌgJæ3%ó™ŸGø<Âç>ðy„Ï#|áó˜ï+ÖµO­¨ê'R5gD"zуˆDô ¢ˆè@D":сˆDt ¢ˆè@D":сïGx?Âûޏð~„÷#¼áýïGø>Â÷¾ð}„ï#|áûßGø>Â÷¾ð}„ï#|»\Žޏð~„÷#¼áýïG¾O‘ïS„÷#¼áýïGx?Âûޏð~„÷#×cþð„ÿ#üáÿÿGø?Âÿþð„÷#¼áýïGx?Âûޏð~„÷#¼áýïGx?Âû~ð{„Ï#<ù~ÅÉ÷‹ë…ÈõBäz!£ðh„G#<áяFx4£ðh„G#<áяFx4r½¹^ˆ\/D®"בë…ÈõBäz!r½¹^ˆ\/D®"ב녈/ñå"בëƒÈõAäú r}¹>HðT‚§<•à©O%x*ÁS	žJðTZœì¯¢¨Cj¤&jîo‚§<•à©O%x*1oMðU‚¯|•à«_%ø*ÁW	¾JðU‚¯|•à«_%ø*1oMÌ[ü•à¯%ø+Á_	þJðW‚¿ü•˜·&x,Ác	KðX‚Ç<–౏%x,Ác	KðX‚Ç<–à1îgH‚Ç<–౏%x,Ác	KðX‚Ç<–౏%x,Ác	KðX‚Ç<–౏%x,Ác	KðX‚Ç<–౏%æ±	>KðY‚Ï|–೟%ø,Ág	>KðY‚Ï|–೟%ü¥„¿”ð—ó¨Ä<*1JÌ£ó¨Ä<*1JÌ£ó¨_&ø21Ṅü™˜'æÉùpò6óÒ­•;3÷äòÒ¼^þž­2ûÒÉ_Ÿ½gò,¿ù÷»„û]uŸùXb>–˜q¬®à3KÌÇó±Ä|,1ã¾™pßL¸o&Ü7«+øÌǸ&Ü?“„pŸL¸O&Ü'«+ûGzÀ}³º²ô€ûhÂ}´ºr|è÷Ó„ûiÂý4á~šp?M¸Ÿ&ÜOî§	÷Ó„ûiÂý4á~Z]ÁG¸¯&ÜW«+øè÷Ù„ûlÂ}6á>›pŸ­®à£	½à¾›¤‰^à'qßM¸ï&Üw«+øøI܇îÃ	÷á„ûpÂ}8á>œpN¸'܇îÃÕ|ü$îËÉä¾\â:&á'%ü¤ÄuMÂOJøI	?)á'%ü¤„Ÿ”ð“~RÂOJÜ÷IøJ	_)á+%|¥„¯”Lf^ž¿h¯Û*¼
+:®RÂUJ¸J	W)á*jm¨µ¡Ö†Zjm¨µ¡Ö†Zjm‹“ýUÔuHÔDÍGc¨µ¡Ö†Zjm¨µ¡Ö†:êl¨³¡Î†:êl¨±¡Æ†jl¨±¡Æ†jl¨±¡Æ†jl¨±éãC
+56ÔØPcC
+56ÔØPcC
+56ÔØPcC
+56ÔØPcC
+56ÔØPcC
+56ÔØP_C}
+õ5Ô×P_C}
+µ5ÔÖP[Cm
+µ5ÔÖP[Cm
+•5ÔÕŠÉ~é?jj¨©¡¦†šjj¨©¡¦†šjj¨©¡¦†šjj¨©¡¦†šjj¨©¡¦†šjj¨©¡¦†šjj¨©¡¦†šjj¨©áfn†áfn†áfW1†zêi¨§¡ž†zêi¨§…	Ç‹zêi¨§¡ž†zêi¨§¡ž†zêi¨§¡ž†zW[ÆÕ–qµe\mêj¨«¡®†ºêj¨«¡®†ºêj¨«¡®†ºêj¨«¡®†ºêj¨«¡®†ºêj¨ª¡ª†ªªj¨ª¡ª†ªªj¨ª¡ª†ªªj¨ª¡ª†ªjj¨©¡¦†šjj¨©¡¦†šjj¨©¡¦†šjj¨©¡ž†zêi¨§¡ž†zªi¨¦¡š†jªi¨¦¡š†jªi¨¦¡š†jªi¨¦¡š†jªi¨¦¡šÆÝãî‹¡“†>úhè£Mô‘».Æ]㮋q×Åò]]Ì:ZW¡*µKíQjIõÔ@íS+ê€:¤Fê×rðE掯ž8·±²¼tö$/)å®­ßL~öØzýã£k»^sn}ü»ãï®_ZY¦
+»ÓîîõÓ㨷•Ók+Kõ›voÞ³ÞؤW:«tVé¬ÒY¥³ÊÞ»2sjõôVpØʱõÓ`w9E]úÛåuAérŠºƒÙ•×[[:U¯€Ó§N“ÒãCéñ¡ôøPz õ@êÔ©Ç‡Ñãøz_ãëÛ·nnnnnÁ‘ààààààààààà—à—à—à—à—ì¯d%û+Ù_ÉþJöçÙŸgžþ{úï鿧ÿžþ{úïÁóàyð<x<^ /€è ÿü ~ ?€Ààðøü ~ ¿nÜ>¸}pûàV‹»Ž­¯­Ÿ>UG6—6^Ç«:½¶º±Ä]«Ê™3+gëVlÒ³ŠžUÕôòúéÓéÜÆ:¯Ð§Š>Uœ“}з}з} ii9G‘s9‘s‘‰Y"“ÅɶR»Ôµ –TO
+Ô>u@R#5Qóñ‰,î|Þñ¥WožÛà€`:Xüü=+«5‡mn,=Ëk€ç«ƒºv¾øËwÎl¬œ=¶±zfü+Ûy‘®(§@9J”(=Pz 
+Šrè
+:´(Т@‹¢qvåìæê©¥MhW Fé‚ܹË9èÒƒn¯³´¶ræ$[àCAJü.ø]ð»àC—]
+t)Ð¥@—]
+t)=ŽÚhS M6ÚèRziçø‹rrucy¶–‘­'|P0 À€
+(0 Õl½‹•Õ'7O.lžÜXáùÙùã«wOž/œ­µì4¼CƒFQ`D)9´’þ”ô§¤?%ý)é*0¨À ƒ
+*0¨À ƒŠ߃£
+Œ*0ªÀ¨£
+Œ*0ªÀ¨£
+Œ*0ªÀ¨„Q*a”J¥FY×ÞìÒÆÆú=k+Ç7wl=;wfn«nŒOgþáòú=§ó³£õ‡8K³e¾=}ºÜ§Ë}ºÜ§Ë}ºÜ§Ë}ºÜ§Ë}ºÜ§Ë]®èrE—+º\qÊ`Z²$ëê.õìèÙ^¤¨èDE'`]uÖX—PI%TR	•¬ko÷±muéD=‘ªÙ…s1 /ÎÅ€s1 º1 º1 º1 Cº1¤Cº1¤CÎŐs1þü!øCð‡àÁ‚?hù\Ö3­ñȘ›lœ;³kòtk|\j5"—6Æ£$ï'Ò/DˆÌI%sRÉœT2'•ÌI%sRÉœT2'•ÌI%sRe"^‰ó’8/‰ó’ÀOà'ðø	ü~?ŸÀOà'ð
+|ßÀ7ð
+|ßÀ7ð
+|ßÀ7ð
+|Ÿ«ú²c¶®ã‰ûRž×3÷ù•×®ž­'蛫—^ëí\9ufóuõôc牍qžÌéÍ+k+§Æ¡µ9èÁŽuãjçÙsÇjæ\š¼0¤FjÆ&[RÉ’T²$•,ɺ–Ku?6VϾºV¸“¼¨}ê€:¬uxýÌúÆX…—Öæê''Çñ¼Kk¥Ó'Öò·—ðH%<R	TÂ#•ðȺ–skë'V-s™gyº¾±°zzs|slÒ©["ø„G*á‘Jx¤©„G*á‘Jxd]»³›'ë/üñúBŠWè’¬H2é‘Jz¤’©ãôȳ«§V×–6ئH2é‘Jz¤’©¤G*é‘uíÍÖP'6Î]úeò#•ÜH%7RɍTr#•ÜH%7RɍTr#•ÜH%7RɍTr#•ÜH%7RɍTr#•ÜH%7RɍTr#•ÜH%7²®6¿òšs«w×óœÓÇ8»¨5™‘JF¤’©dD*‘JF¤’©dD*‘JF¤’©dD*‘JF¤’©dD*‘JF¤’©dD*‘JF¤’©dD*‘JF¤’©dDÖU¶¾
+õX=W+×æîÉÆøŸ•ÍÙú+›@ëb¡‚k+¯¥õd#·¦
+=ãJˆôH%=RITÒ#•ôH%=RITÒ#•ôH%=²®½¹qBv='];w–—ÊÝù¥SçÖ6WϬ½Ž—é	Ór$•I%GRÉ‘Tr$•I%GRÉ‘Tr$•ɺövÕ~feÈ~îÒ÷ŠIi’Jš¤’&©¤I*i’Jš¤’&©¤I*i’Jz¤’©¤G*é‘Jz¤’©¤G*é‘Jz¤’©¤G*é‘Jz¤’©¤G*é‘Jz¤’©ãôÈåõÍË<‹ð“"©¤H*)’JŠ¤’"©¤H*)J
+d]y?¬³"ÌŠ0kœ¼Ÿ~#̤F*©‘Jj¤’©¤FÖ•ó†0“©¤F*©‘ua&ERI‘TR$ë
+>¬³"̤LÖ|„YfE˜aV„YfE˜aV„YfÍÿùºŽEªtN®ŸcÚåšÔJ%µRI­TR+ë¨}jEP‡ÔHMTÛµ±r7ºW³E~5ßZSR(•J%uRITR'ëjscÁ¬gk›g.==ÊÞÐ\b&•˜I%fR‰™Tb%•XÉZ9v¸”˜C%æP‰5¬“ýàµtá‡.üÐ…ºðC~èÂ]ø¡?tá‡.—].º0CfèÂ]˜¡3ta†.ÌÐ…º0Cw8©ôƒÞed³ŒLYF¦,?R–)ˏ”åGÊò#eù‘²üHY~¤,?ªkç&‹‹ç¹X”ñÒx¡KíQjIõÔ@íS+ê Þábs‡‘š¨6nн܀‘ÆRºvÇ
+´Ñ€.àÝâÇ
+zô㦐­>„FúÀ`eµ€²Z at Y- ¬¨ëVú—wÀ¸e¹€²\@Y. ,P–Ôu«ecô€É"ë”õÊze½@]·zà/"”Ê‚eÁ€²` ®[=(; LIØQV(+”•ÊÊe倲r at Y9 ¬PV(+”•ÊÊe倲r at Y9P×ñ8èmƒú‰öxRÈä‰ò¤ÛŸ´™¼¢“6ZL/ò¤7iÜ
+“6—žøÉ“rÒæғɏz¹:Ù³NºÚ»Ôx²çÞ¤?½Iz“=÷&o/.à¥ý4F0sLby”X%–G‰åQby”Xe™‚²LAY¦ ,SP–)(Ë”e
+Ê2e™‚²LAY¦ [ËÎ][?ö꼍Ä2/SX>Ýü9øxêEðæOAg9^Ä°v¼ùsЙGŽ1ll柯mž=¹´¼ÒÙúwÇò«sÝj׳„AYÂPWŽ¹cÁܱ`îX 
+ÚP 
+ÚPômöøêÚÚÊòÑõ×Î<·t““8°BY¡¬…PÖB(k!”µuíÏ<WBý…Ú*Åø^Ûx÷õ¥%
+èêÀb%ÄHÇ!F›c·èܶé óHBŒ”#%ÄH	1ÒqˆÑÖû7À«ç‘[Û˜p„)!FJˆ‘b¤„)!F:1ÚzÿÚq¶ÁgI¨Q]ÁögòäžMN<ÓÈb˜¶Nv5QHJ’…¤D!)QHJ’…TW?»zúî£çês»9~Ö„d&J’‡¤Ä!)ËN”8$%IY†¢Ä!)qHJR]‹¹úbëtå%žÉ(‰HJ"R]é“Ñ‚ÉhÁd´`2Jr’’œ¤$')ÉIJrR]9
+LF&£“Ñ‚ÉhÁd´`2Z0-˜ŒLF&£%ÔTrK§ä–NÉ¡d‚P2A(™ ”LJ&%„’	BÉt”ħºFj¢‚cT2=(™”8H%‰Qu_ÀgâZ29(™,UWð™”Ì
+HœÒ’¹ÉSJò”’<¥$O)ÉSJò”’<¥$O)ÉSJò”’<¥$O)ÉSJò”’<¥$O)ÉSJò”’<¥$O)ÉSJò”’<¥$OÕµ?{öÔêÚÊñ¥c+õ×âÒ†;{î4MèSƒ²k3ÇWN-ñå){2ÝØ žiUÊB-e¡–P¥T)UJ@•P¥T)UJ@•P¥T)UJ@•P¥TÕ|œ¤'©ÄI"Àª®àã$•8I%NRYXç왉ÆsUW>¶vî(½ÎÉ•¥šL—W—NMþ#	WJÂU]ûó§Îåšjewãùä v¥„])‹Û”ÅmÊâ6eq›²¸MYܦ,nS·)‹ÛêJWP²”°,%,K	ËR²”°,%,KY$§,’SÉ)‹ä”ErÊ"9e‘œ²HNY$§,’SÉ)‹ä”ErÊ"9e‘œ²HNY$§,’SÉ)‹ä”ErÊ"9e‘œ²HNY$§,’SÉ)‹ä”ErZrHxW]ÁAè	óª+8}‰Ð—=!_u‡«À²šàpœè<a`Z¢ó%÷‹Jü"õúÅÉv—Ú£–TO
+Ô>uHÔD͸ŠõP¬‡b=ë¡XÅz(ÖC±ŠõP¬‡b=ë¡XÅz(ÖC±ŠõP¬‡b=ë¡XÅz(ÖC±jõP«‡Z=Ôê¡Vµz¨ÕC­jõP«‡Z=Ôê¡Vµz¨ÕC­žk.Ï5—疹疹‡W=¼ê¹äò\ry.¹<—\nõp«‡[=ÜêáV·z¸Õínõpª‡K=\êáR—z8ÓÕ®ôp¥‡+=\éáJWzØÑãFx܏áq#<n„‡"=éqÞ=λÇy÷ð¢‡}9ÁãxàE/zxÑË^ôð¢‡=¼èáE/zxÑË^ôð¢‡=¼èáE/zxÑË^ôð¢‡=¼èáE/zxÑË^ôð¢‡=¼èáE/zxÑË^ôðŸ‡ÿ<üçá?ÿy®€<W@wÌË^ôð¢‡=¼èáE/zxÑË^ôð¢‡=¼èáE/zxÑÇ~‡\÷x®{<×=žëÏuçºÇãŸ{üsîñÏ=×=žë •?%䯮쏩¼g*OøŸû)á~J¸ŸûÕ•ý3U'ìO	ûSÂþê:Ù?ýeªî™ª{¦ê©z@/zЋ€^¦êÝèF at 7º˜ª¦ê	èH at G:Б€Žt$ #	èH at G:Б€Žt$ #	èH at G:Б€Žt$ #	èH at G:˜ªô$ '=	èI at OzГ€žô$ '=	èI at OzГ€žô$ '=	èI at OzГ€žô$ '=	èI at OzГ€žô$ '=	ÌÕº˜«ô% /}	èK`®˜«æêÝ	ÌÕúП€þô' ?ý	èOàÿiÜñ€ô( G=
+èQ@zУ€ô( G=
+èQ@zУ€ô( G=
+èQ@zУ€ô( G=
+èQ@zУ€ô( G=
+èQ@zУ€ô( G=
+èQ@zУ€ô( G=
+ÌÓóôÀ<= S
+èT@§:Щ€Nt* S
+èT@§:Щ€Nt* S
+èT@§:Щ€Nt*0èU@¯zЫ€^ô* W½
+èU@¯zЫ€^ô*àÓ|º€Oðé÷{ÿÑ+àÓ|º€Oðé÷}÷}÷}†]À°ܽ
+ܽ
+8vÇ.àØ»€cpìŽ]à¾qà¾qà¾qÀ­¸u·.àÖܺ€[Ðí€[pën]À­Ü]è{@ßúÐ÷€¾ô=`Õ¬º€U°êúÐÿ€þô? ÿýè@ÿúÐÿ€þô? ÿýè@ÿûèy=ï£ß}ô»>ôч>¼Ð‡ú|ž}>Ï>ŸgŸÏ³ÏçÙçóìóyöù<ûœ§>ýîÓïŠyIż¤b^R1Ÿ¨˜OTÌ'*æó‰ŠùDÅ|¢b>Q1Ÿ¨˜OTÌ'*æó‰ŠùDÅ|¢b>Q1Ÿ¨Ðï
+^­àÕ
+^­àÕ
+^­àÕŠóWqþ*xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+ø®‚ï*ø®‚ï*ø®‚ï*ø®‚ï*ø®‚ï*ø®‚ï*ø®büWŒ£ãgÀø0~ÌkÌkÌk||ÌkÌk‹“ý¨Cj¤&j>ÎãpÀ80ŒÃãpÀ80ŒÃãpÀ80ÌWÌWÌWÌW‡Ìg†Ìg†Ìg†åäç=jA-©ž¨}jEPóq™—™—™—™—n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸Q]Ág^KÈ‘r¤„)!GJÈ‘r¤„)!GuÝz_/æù@]…ªÔ.µG-¨%ÕSµO­¨ê©‰
+~?‚ÁàGð#øü~?‚ÁàGð#øü~?ŸÀOà'ðø	ü~?ŸÀOà'ðø	ü¾oàø¾oàø¾oàø¾oàøy>`ü¯cY©iæAã·«[™?wƒ_
+>5øÔàSƒO
+¾3øÎà;ƒï¾«k¤&jƃï¾3øÎ໺²_e¿Ê~•ýæëóºö©u@RÁWðü.ø]ð»àwÁï‚ß¿~Ü.¸]p»àvÁí‚קNý÷؏ýö8®ûï±ÿûï±ÿûïq\½	ÇUp88ÇQ€W€W€W€W€W€W€W€W€Ç¸”_Éñ•à—à—à—à—à—à—à—à—à—à—à—à—à—à{ð=ø|¾߃ïÁ÷à{ð=ø|¾߃ïÁ÷àðø÷Þxàý÷Þßçý}Þߧÿ}úߧÿ}úßçý}Þéw7q<‰×
+|ßx?¼@Èš²f„¬!kFÈš²f„¬!kFÈš²f„¬!kFÈš²f„¬!kFÈ™rf„œ!gF•Be„P!TF•>e„OáSFø”>e„OáSFø”>UWúÅçÊ/U1~©J]Á
+àÎK ?€Àà3.Ÿ2§Œð)#|ÊŸ2§Œð)#|ÊŸ2§Œð)#|ÊŸ2§Œð)#|ÊŸ2~y‹ñË[Œ_Þbüò#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œª®àø¾oàø¾oàø>¼˜àAb:Œ˜#¦Ãˆé¨kœ97Žv]ÌErÑ\º¹ôr)r)sñ¹„\ú¹T¹ræBÊŶŠd<Éx’ñ$ãIÆ“Œ'O2žd<Éx’ñ$ãIÆ“Œ'O2žf<Íxšñ4ãiÆÓŒ§O3žf<Íxšñ4ãiÆÓŒ§O3^7ãu3^7ãu3^7ãu3^7ãu3^7ãu3^7ãu3^7ãu3^7ãu3^/ãõ2^/ãõ2^/ãõ2^/ãõ2^/ãõ2^/ãõ2^/ãõ2^/ãõ2^‘ñŠŒWd¼"ã¯ÈxÅ^‘¬ÈVä#*òùˆŠ|DE>”"J‘¥È‡RäC)ò1¹»Eîn‘»[äî=v¶ÕÝ"w·Èý,r?‹ÜÏ"÷³ Ÿ…Ï%w·ÈÝ-2P‘ŠTd "¨Ì@eî|™ñÊŒWf¼2㕯ÌxeÆ+3^™ñÊŒWå}VyŸUÞg•÷Yå}VyŸUÞg•÷Yå}VyŸUÞgÅ>ó1Tùª|U>†AÆd¼AÆd¼AÆd¼AÆd¼AÆd¼AÆd¼AÆd¼AÆd¼aÆf¼aÆf¼aÆf¼aÆf¼aÆf¼aÆf¼aÆf¼aÆf¼˜ñbÆ‹/náù¤¹°Õ˥ȥÌÅçréçRå2˜]^û†ÍcKë§wFR<;Õ8ß³ó’Õµå•ÎsÆI„sÃՍcçNW#v†ã¶5/ÖlxøØÒÙ•Î`94×7—Ž[9½¹ðÜs§O,mœ;µ¶tns>®Ÿ;º¶²:·´±ttõØ+—×ÇëË·žjýüìd£;ÞØÝÜxåÒîfÃW.Mšö¶Þ7îEY¦ÃÇWO/]ÚX=½ºyiãÔÊòjÞ¨¤Ñ¬Þ¸Ü¬Þ¸Ü¬´æÞ¬¹7k4TŸÔãŸÌÓ·ÕÓ'òü°±³zãò[êË;ó±Ù,6›ÅF³Ð<‚Ð<‚Ð<‚ ÍfÚl¦ÍfE³YÑlV4´y>Íó1ÈçcòX:þÊ£K;Ò釗Ö6¯·Ñ2®?¨µ•³góv?N¶ç·FÐb¨ÿöxÞoóÜ7^·‘ÆóÅF{i<Ÿ¼ÞýŠ÷¯Oö?c4^ŸìG¿âùbãy—çåW<—ÆóÅÆó~㽓ç2Ɲ;º±´µÌ`}³óüñÉÊ'´Ÿ?‘«ÎåyøÖÆáµõÓ'În.mLNzóS4?µAóS6¿ÃæwbØüNôóPé¬]îDÌ {Ç=ŸZ?½~bcéÌI^é_~åŠÕñÂþ•W7?âqfÌWl÷›Ûã”ë/ß&ÛnùØzçyã®äXŠÃGkrÙ:oe!ã_ŸÛxž?ÓúµñvãõÔxn´I6½F›ñsÛ:j?¬.Ÿ¯ñÆ¥S4Þ¸tò|Ý×F³A³Ù ÙlØl6l66›Åf³Øl›ÍR³Yj6KÍfÖlfÍfo­‹fõÆåfõF£™4›I³™4›i³™6›i³Y·Ù¬ÛlÖm6ë5›õšÍzÍfE³YÑlV4›•Ífe³YÙlæ›Í|³™o6Íf¡Ù,4›õ›ÍúÍfýf³æx‹Íñ›ã-6Ç[lŽ·Øo±9Þbs¼Åæx‹Íñ›ã-6Ç[lŽ·Øo±9Þbs¼Åæx‹Íñ–šã-5Ç[jŽ·Ôo©9ÞRs¼¥æxKÍñ–šã-5Ç[jŽ·Ôo©9ÞRs¼¥æxKÍñ–šã-5Ç[jŽ·Ôo©9ÞRs¼¥æxKy¼Í¾¸ž?,]¿{‹ûÆ‹MÆ”Èsi<×Æónãy¯ñ¼h</Ïý%ÆïùtxyuéXæ÷P>:žÍù˜W—_Ùzs’pø\!­ÖýSo8òøGîâ~÷?º¿R÷—ÜÿØíþbä¾0rÿý ûóÝîÏ.¸Gº?}kÕùÓ‘ûü÷¹î‘‹î¿]tÿuäþäYîî³#÷_Ô}æá;;Ÿ¹à®>|§ûôÝÖùôE÷G·¹OÜŽÜ¨ûÏûÝï_pÿiäþã>÷îu¿÷ ûÝ‘ûºùïÜë>ù‰çt>y¯ûÄsÜoÿÖ5ß¹ßºÆýû‘ûÍ‘ûw#÷#÷ëܯýêõ_¹_½Þý[u¹_~ÓÞÎ/_ëþÍUî¡‘û¥‘û×#÷¯Fî_ŽÜ¿¹_¹>rÿlä¹_Øë¸ï`灑»ÿ£v~ä®ÎGt}ÃôG~þ`ç#wyÜ}äÈôÏt?7rÿô‚ûÙ‘û™‘ûé‘û©‘ûð²û'»Ý‡>x°ó¡e÷ÁŸÜ×ùàA÷“ûÜOԝþ‰‹îÇGîÜ?¹Ûç~tä~ä‡ww~DÝïvÿpÙ} nòî‡Fîý?¸ÐyÿÈýà‚{ß{¯î¼oÙ½÷={:ï½Ú½gû9÷ý#÷}vu¾oä.ìrï®ßôîî]ïÜÝy׭Ý?¸è¾÷v¾wäÞñö»:ïxнã
+Óoÿžƒ·ßåÞ~dú{ºï¹·}×áÎÛFî»»·Ö‡ùÖʽåÍó·ìwožwßY¿ðËî¾úLÝwнi¯ûŽ‘ûö7îí|ûȽq¯ûû#÷†‘;?rGÿ¶{ïí|ÛÈÝ{¯û{Ëîõ/9ÐyýA÷wGîu#÷ÚÝîžw÷œ;7r›ÝÙ‹nã¢{ÍEwfäÖGîôÈ­Ýè^=r¯Ú;è¼êN·:r'ïu'êã#·2rË#wl䎎ÜÒ³Üß¹è¾uÁÝ5r{ä^1r/Ù\çåÝËæÜK¯ººóRuß2rß\#óÀ½ä€»³½§sçÝ‹÷»=ÿÊ΋Fî›æÝß¹~ãžÎGî÷¸o¹Ô?yÁÈ=ÿy{:Ï¿Ò=ïº]çíqÏÝåž3rvÁ¥.ŽÜpꙝáE7xÐU/pGFûú¯Û×ùúýîën¿¢óuûÜíÏÞÕ¹ýÈãW¸gïrϹþÈ¿¿.:_îéøý®,æ;åWÌ»Þõ®»Ë©ÌwtädÞ-Þ6ßYÜån›w‡Ÿ9Û9¼Ç=sÖ=CÝÓŸv°óôe÷´Cû:O;èís·Þr°skån9èžzp¾óÔ+ÜÁy÷”‘»yänºÂÝXçûÜ“—Ý
+Ýõõ!\¿ì®Ûå®­Ïàµ#wÍE÷¤»ºÞ¸z䞸ìžPŸ©'ŒÜUõ›®ºÚ¹ý#wåÈí«ì¹½õ±î¸=÷º+–Ýî‘ÛµpUg×È-Ô­®ró#7·ÇÍŽÜκÙΑ۱ßÍ,»éú‡Óõ8àêWÝÈMÕÛSÏtí=®5ríûÛËoúîöÓÿ&üiýÿîÀÿöÏu­©ÖñÑ…éãm¹ÖŽÖ“Ž,L±5óÅöÎÎù©éÖm}âiíùÄ#Ÿxdñʽ7î=xãޏO·;ë®yì3£;vÿÕŸoÌjµ[oµ:ÝÎ'[³­×¹~ÇÞöT{jïÌŽ™ÁŽ)×ú©™öŽ©k§Ë׶¦çö<öÈcìí÷¥uÛíh¿¿ø‚;_¶cÏôçÆ_~ÓÏÞ0ßnßud±œ
+;ž;õœ«SÇw¼ajÇL{væ@ûI3Ö~ÞÌKÛ/›Yi¯Î¼næMí·Î¼»ýž™šßsWë®+olïíî­ÿ¹ùãí=S=ú¥W=Ôùäo˜þÔŧOê‹7´Ú?ÖjM¶îçÎÖ»ŽÜêöNw¦§êÎvÆÅMílílïmµvƝž™Ú1}¤smëÈŽÙ=Ÿxø±‡÷;\÷7w·Sww';ãn·æÆݾ½3µª˜ZœZì,î´©#SG:Gv¾hêEí\™úŽ©wNí¹ªý$wÃÜSÛ‡œowdîDû¤{­;3÷Cs»êCpÝÙv·>€½Ó¿×~û½¿÷¥GµóÉ/½gêøcþ¥þÔÇZõŸ©Ökÿôôùé×·ö·®i9ò”ցöì};ßÜ9ðíÎíŸøÀ¾ûÞví5¦vØÙzÁÔ¾+Òµõ9ÿÂ#íÞ‡¿ðÈÃ{>_?¾ðùú…Å#‡î¸îÌu¸î7¯{ôºÎ­;ÚwLÝqàŽk:ÏØqÛÎÛfŸ1·ÞZo¯O­X¿fö®×´ïj¸ñúvWK`wûæ'·öîiuµµãpûæ›fvLŸìg~ý£¯úØÑc¿ùêÑFkzìÚ;îŸú±7¿çÝSßúŠ_üX¯÷á§=£Úsí+ÛÃÑï?ô}?÷á÷OŽé\}Ló­'´žäÊ™öµX¸ßÛž8»ïŠ¹}Ò·!wÏçÜ|ÇÕ¯o½~æüŽó;ÏÏžŸ;?ÿú…ó»Îï>Åù=ç÷¾~ß®~ôê½uooš9°ÿªîxÕèSoÑqoo¾iüïÔÙw}èƒï~ç‡>ôÎGÛûFŸôÏFÚÞëþà³ÿøgÿøW>ö'ïýÊè‘Ñçêè×ýÜßõyo·Öÿ´ûXÝÇ[ZŸ=rû®…©ÝówÞpýÎÙ©swÞpÃõƒ¹ùëo˜>к¯ý–éý÷xËØ;ýÀÁû÷¾íÖëçæo¸fGëÅ×ìܽcçþ›Ò­{{¨þB=\Ÿý~ŸOdÏè/>¿ç/>¿ï	Œ¯ÝŸÛû„þŽ­ǃë–ñà:uíܵó×.®?”gÌ?cáٳϞ{öü³æŸÜzrû)S·ÎÝ:ÿ´+oÛہ§]uëõ·Þpèɇn|Ê-÷ÍÝ7ßÂ}»ö`jjfnfÞ-¸]n·»ÂíqW»'¹kܵÓ×ÍÞrÛ¡;½òÐùCo8ôŽC8ôè¡'Ö£ñ5í[l}
+oh_ß>°æ曞zK±õù×'ô¶öávÑ«§ŠW¹ïz᏿â-o9ú®;ú±¿üÝWüÒÚñ_^zãÛV>xäƒßÿ‡¿qüç¦ïøð­·¾ä%Gžwãî§ýÀ[Þ÷‘›oþÅ¢xù‹^ðM¯xÊ»ßøþ]ßÚúsÓÿóÇÝ_õñ»_ýÑ|•Ç»òc*n?¶ۏíÇöcû±ýØ~l?¶ۏíÇöcû±ýØ~l?¶ۏíÇöcû±ýØ~l?¶ۏíÇöcû±ýØ~l?¶ۏíÇöcû±ýØ~|mVþÀí­º¿åÆ¥ý¤úïLë¯ù\~z{ãåç^zöâúï·üu£þ_ý™n­mý;=>?ž}üñúߎÿ­·§[_vH?·ÕW›GzùÏ‹©ß²µÏVû­Î×Ü»_¾ùhëÑÇ¿ì…ü™¶¦½uüoúßÎc­­§?ýø—þþ>ÒzÍ×ô÷3_ñ÷é­õ­s<õ¬OýÌOÿÔ/¼òŠÛÿ¢uCþP~éãïûȤþåï|é©»6f¿¹ù‰ý/Þ]I
 endstream
 endobj
-7631 0 obj
-1924
-endobj
-7632 0 obj
-792
-endobj
-7611 0 obj <<
+7605 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [322.112 118.128 378.78 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (idmap-sid2gid) >>
 >> endobj
-7612 0 obj <<
+7606 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.352 118.128 460.02 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (idmap-gid2sid) >>
 >> endobj
-7618 0 obj <<
-/D [7616 0 R /XYZ 151.701 685.529 null]
+7612 0 obj <<
+/D [7610 0 R /XYZ 151.701 685.529 null]
 >> endobj
 930 0 obj <<
-/D [7616 0 R /XYZ 151.701 660.623 null]
+/D [7610 0 R /XYZ 151.701 660.623 null]
 >> endobj
-7619 0 obj <<
-/D [7616 0 R /XYZ 151.701 641.209 null]
+7613 0 obj <<
+/D [7610 0 R /XYZ 151.701 641.209 null]
 >> endobj
 5238 0 obj <<
-/D [7616 0 R /XYZ 151.701 470.384 null]
+/D [7610 0 R /XYZ 151.701 471.132 null]
 >> endobj
-7620 0 obj <<
-/D [7616 0 R /XYZ 151.701 453.514 null]
+7614 0 obj <<
+/D [7610 0 R /XYZ 151.701 454.262 null]
 >> endobj
-7615 0 obj <<
+7609 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R >>
-/XObject << /Im31 7609 0 R >>
+/XObject << /Im31 7603 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7636 0 obj <<
-/Length 1133      
+7628 0 obj <<
+/Length 1134      
 /Filter /FlateDecode
 >>
 stream
-xÚ­VKoÛ8¾ûWè(1ç{k‘¦p±)v×^´@Úcɶvõp%iþýÎp(Ç”`[ô4Cr8œÇ73äÁ.àÁûÙÛõìúVÊ fiÌE°Þ‚s–¤2ˆ’”™Të,¸Wù¦/šzþuýÁ‰',"â2e¤9É	É›/Tx;W<Ìmlón¾PF‡¶Î1áۼοp¡ûŽ4ϲ”§Î|¬Í S*R³wëÙ·™€]>³Ò0¥‚M5»ÿʃÎ>œ©4	d(“°È ¶2XÍþœqïù„®ˆ3)õXYœÆ/*sá»´þ¤Í€6“·Å Î'
-c$ÉmaÎ/FT'ƒ×Ë›»7ü7”
-ß/oÑá_y×”G—	wÐ7Dïl¿™Ë$ÜõŽ$WËöJÔ´a©Ö?¶1«VQâÜÕßfœw<P·9Üð×ËJÉঁ7¦’Ã…0 ñ#Æ—ƒU‹3³^É™1“ð”ËÀ®mŽ‡Ê¦rïi­†\ˆoÎÃc—gÄabdš†y×Û‡²èö´ý÷Çågâœr’qI„­k¢+—m`àíÃ\„S¯ßzÚíÌö£«Ç`áYÅŒN½IîìÏàÞáäCå`¨F2á+‘Ph\F¿¨8dÚL:Yê¹±ê›Ö£
-…¢ŠpÁÃȽæRŒ}&þ¥U EŸ@?’:ÿ̏Uz¹
-:…‚
-ý,ÿ©Rð¦-Îlsºô)8¤Ÿ¡7YUÔE×·¢
- ”:EËŒø q˜ÓÂ΁D€ÚÖoõ{Û÷¸Ïa“š¾:WrÈ0¼ç3ÜUlÓÔÛ),脥ɡ’@9€^íóvk7þånÓ3à¹ÑÐàG•RÙñÈë(
-³¢…QGüÆ–eG,Ö¨Ž@÷ÞËa%_ÿN¿Ó^÷Ôõyõ|ŽšAÁnx¿‡jö÷»½Í¨ˆi
-M½,ú"ﮦ&"¿4Ù¹l³l²3‰ó0Nj‹X*Å(|J†Y^¾mÉõ³Bà±›äšeÃ8¹P]5¤|ÒVH9ô/!^½³22„¯Ã±ì©¾a9Ž:î‘.¿"ìB.‚UÛ
-ÿ:VácQ–Ä=¸ì`.b©Ø5Qø ¦ñŠÔºŸhQUÑ{…EupÈoœ
-lþ¨ïà‰xð¤ËŸµ$à‡”Ài¹õû±„sg”ôŒÝ_
-dë¦G>Ue9 	—Ç™”·KV‘<ýlk7PÉ6-ÑîàêÅ‹ÅÏbWÔ”ÁÀš$)1(×ÂÏÎÿÇ–6èG½[ýTÔó>žÀÄÓ×’óï‹®w.sô˜D¶ÙN6)9'”¿«wEç4Œ4Ðük»C7'@'|^“h¸ë0áУ4–Ž!_Ú*ú€½+’” Î÷œxôi‘åÔ|
-ìO´‰ÐÃd´£÷œ«W˜±è¤ëòQlA&,ãÐÃpãÄÛ4ǶóÃ}k‹’]L÷Â$üÒ†áX
+xÚ­VKoÛ8¾ûWè(ç{k‘¦p±)v×^´@Úcɶvõp%iþýÎp(Ç6”`[ôÄ!9ü8o†äÁ6àÁûÙÛÕìúVÊ aYÂE°Ú‚s–f2ˆÓŒ™L«<¸—Åz(ÛfþuõÁ©§,‹cê2c´9é	É›G‚Ç*¼+v8tE?”Ñ¡mrLø¶hŠ/\è¡'DÃáZ–ñÌY @N´1¥¨5{·š}›	Xå+
+S*X׳û¯<ÈaïCÀ™ÊÒàÑiց2)‹
+¢UÁröçŒ{Ï'°bΤԗ`I–¼æÂwnýÍ šIȇÛra çS…1’ä¶0§cÐéèõâæîÍ¿Á	¥Â÷‹tøWÑ·ÕÁeÂm-wvXÏeîÊfKšËÅ
+{%jÚ°LëŸ	Ûåx	­âÔ¹
+Ðßfœ·=Žnq<᮵’ÁMwL%‡‘0@ñ#ÆŽ‡£ÑªèĬWr¦DÂ$\å2°íÚþ¶û©\Á}Z«1W%ò›óðÐ9I˜™eaÑö¡*û-ÿýqñ™$N:.‰°ôqEãÒe¸{?!äÔã[?ö»³ýèê1ˆ¼1‘PÌèÌ›äöŽñîOŽ4TŽ†êB'|…2
+Ëø‡L Íd“Å¡þgqË¡í<ë¡P(ªX w<ŒÜk.%Øg’_ZZ2“ª@êü3?Vêå*ˆ´`1D"‚þ
+–ÿT)xÓ¢Û\†Î}Ž ­ÔgèM^—Mٝ…h	¥Î„‡*'ù†$,hbç ?"Amç—†HzÜ°HM_Þ+9dîóîë¶n›ÍtʌңæXI ¤‡[‡¢Ûص¿¹_wåžžðÜhhð•RÛñèë8󲃧Žäµ­ªžD¬QöÎëa%_ÿN¾ÓZÿÔEý| ¶Úà7|ØA5ûóýÎæTÄ4‡¦^•CYôWS/"?7Ù¹ló|²3‰Ó0N¢Å,“â"|J†yQ½mÉõ3 <à‰{É'e
+qz]·>i+¤ú‡W‡	﬌áëp¨ªo˜^F×È—_‘w!HgÁjlÿ¨ð±¬*’\v0‰aW„È
+¬š8ü‡ÐóŠ£u>Ѥ*ërð€e½wÌo6Ä{Àx"<é‹g4¢üRø -6~cw©áܹHzN›î/ºM;  Ÿªª‰„ÓÞL*ºµ%«HŸþ¶³k¨žtÛŽÆ~ïêÅ«%ÏjWÔ”ÁÀ†4)1¨×ÁÏÎÿ/-mÑ/Ž$¡ñnI㧲ñœÇðñ^<}-9ÿõƒpU¢ç$Šíf²YH	Ì9²ü]³-›¢ wÀHÍ¿±[ts‚tBÀç5Ç³ŽŽ=
+{ljÈC»v€ŠÞcïŠ%¥Fç{A2úˆc™Ô|JìO´ˆÔÃä4½d/®9W¯0cñëüRlA&.㣇áÆoݺÞ?îììuGx	ÿÒ¨áX
 endstream
 endobj
-7635 0 obj <<
+7627 0 obj <<
 /Type /Page
-/Contents 7636 0 R
-/Resources 7634 0 R
+/Contents 7628 0 R
+/Resources 7626 0 R
 /MediaBox [0 0 612 792]
-/Parent 7621 0 R
-/Annots [ 7613 0 R ]
+/Parent 7615 0 R
+/Annots [ 7607 0 R ]
 >> endobj
-7610 0 obj <<
+7604 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-HOWTO/images/idmap-gid2sid.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 7639 0 R
-/BBox [0 0 718 549]
+/PTEX.InfoDict 7631 0 R
+/BBox [0 0 767 549]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 7640 0 R
->>/Font << /R9 7641 0 R/R11 7642 0 R>>
+/R7 7632 0 R
+>>/Font << /R8 7633 0 R/R10 7634 0 R>>
 >>
-/Length 7643 0 R
+/Length 7635 0 R
 /Filter /FlateDecode
 >>
 stream
-xœåWMo7½ëW蘬ˆÔ'O‚6A/ê5PôT8»±ëbÖvâùû}œiö#­·ädø°#š¤È§GŠúd½#ëõoþ]oÍëËboŸŒw¥ŠÏl?>ß²w†|e'6Å’œ$»5TBu%uÉ`¨²8]BâÙ¥bSÈìhgÍLN‚]›.ñ•\!Û<DÉÅ	Öóm½na4Á`DØEæ.î²¯û¦]2‡Õ<ô°÷3]›ÃÕy±_ÍŸ½|ÿ’ñXÍ(€ŸÀø=ÿ¬·öíH%¶Avuc&²!zö.²£â¡]mÍ«÷?ÿøÃÕ_æ§+ó«¡H¤; eÅT%Al¨^¦ônNÒZb©NTF`»LZÞÕ`CªÉ‘jQâàÊl—ƒJ¬t?5Jª=þÐÒ(".&[‘—‚}¸ø긐'W»€%$—‚Í~¼ô5 ÇÑFàÛ$죓jg{ šèÍþÛrÝCh¤‘,b—P*8YnÛrÙ±IZLÍA‹ù0K­‰—šùÙ삐߅„
-•ü·Ÿ¾<*ý)º6ÚØ¡.6æÕj§.膲ÇG,œï"æœ\FÊœá…q) ´cí’Á¤±fJ—¤ˆd™’w™–µïQIkÓ$T*¡ÚæJÊ.£ËÍ{´õºÇÑ$ƒ‰	CûÜ,‰É“«‹Ï¶^ví’9®æ¡Å}˜«òðeç.cAÓ
-I²ó9t|w}7tÒ%~ÐÊá¤WÒÖDÆý ¹K´9ž¢µê2”@p4jÅZ\ÙÕêvŠ=YMÍ8gô}O¤ú˜E?${‰Š@`Øj41çuŸÃø†®C-Á]*äoê4?c¦ßÍ÷Ÿg"ãbfFÓíšSOy÷ðå~óFñõ%n94:õhFi.r€UÌcŸùýãÓrä¢N\AŠ¬7+$IoFΨáijZ+w+ϲ	®žx&í¸€"Dä4êd%Ãpd¥ûý"ûÉ5H ©èìŒ+=Õ	’_zŠÌ	í'ĉõw»H<ð¡)ÅS´V†1Q¸ºlѪMž£žÈ`ïØZM¬.%Äq²˜û¼Ô¨:`ô±¥*U)cT¢è 4t.J…­Ù¾¥ÓüÌ£Ôwò}>§QS)Q¶Á£
-:Ó	·ê>øˆÐ-®6Ï£"\ÄŠöh…ÿÒšÊ2Ë@ÑY+4iBéešuŠ´rÇêÿš½wì1îê¸^éÐ‡Æ PÊÎñÜœ¤µZd•J£VÎãвhuÆdO2[=?3söAï;®¹jS$õ•qÇŠ òQkðy¥³Û&zrÁôِd„ô·»ûw÷›¥Ö,º-h86y½²PÕÀ 4QÇù8¾OÑ_-ZŒ7W¥-”¿o§uŠ©3å8 ¶¡aÞ½½è#&é	áˆ&8ûöõ³‡Šˆ®
-ïrõëì揻ÍöúÑý½ù cë¦y×ë¦Z¹Ãæúñézۏ ®îp¶E¾Çì~'¨¯”˜90„ÇJLv:]ô§%þ:>à÷ˆÙ‘<AýìǦ#½¢£¾PkY^ÀpɽFךôòÚmWØÎpr,éãÊ
-¾þUO¡h
+xœåWMo7½ëW蘬ˆ”DI§EÛ —õ(z
+œ]Ûu1k;qƒüý>ÎŒ4û‘ÖÛr2ö°#‚¢È§Ç}´Þ‘õú›ÿ×[óö2Û»gã].ÕÛãOw†|aWɦ˜“«Én
+åP\–.®Žc—PõìR±);ŠËš™\
+vmºÄr™l³«d=­ÑÖëîG“¦Vv‘JÕù"Ýf_÷S»dö«Yè~ĺ6·†‹óµVûÅŒèÙËw¯’Õ¸ñ.Œßóßzk¸­Šm¨]Ýš‰n🽄ø(;‚Å«­yóî—¿»úËüte~3	>‰
+êBEU%¡ÚP|â»=Ikeˆ«
+d¯“Šw%ؐJr¤*”8¸<o’ ’Ý-z’îH5{ü¡i‘ku1Ù‚h8ÂÙÇ]0€9!¸B]Â5$—‚•C¾öudvY‘möÑÕœm3 0ÖÓ	m¹îN4	¢Œ-‹„RƵr7ÙÖýÌ&hN5ÍéÃ85%^oìgs¿,€ú.$’‘úwŸ??)ù)º:ÚìCVlÌ›ÕNVÀ3Pîâ#fãûœˆ"ÉI´Ì+Œ›H™k—&“»$E$A ²”¼ZÖÜG­M“PÉÈdìlr'ɶ3ÚzÝýh’ÁÄ„zP›$&O®p·ÙÖË©]2ûÕ,4¿cU&¾îøÏec̨ùà=Uq^&:þ|}?tÒ%~PçI™+Z Î-§h­º)Z±d—wµú>
+Yÿ‡£]SAAÕ×ñ¤¥êG_£"{Õ›³ózΡC×!AIð*aÈ!|E§Ù#ýf¶ÿ<û}™$¬Z7yºÄÇÏ›ïõß^Âê®zÜFŽb/$`>´Îüqó¼\9‡èΐB´¯B2ñM
+s÷=Eke¡¹ò,›àêiÅ!"¦QGtªŽvéyÿ†È~p
+’ HJB@OOe‚ä×Ç"s
+:'ÖDÛ.|F·nOÒZÆHáâ"[´J@‘G¸ÿ ¢`-ûwM¬Î9Äqº˜ë|-Q?tÈèsK&dªN2-K%«Ž?C×á¬$QØ
+-A¾¢Óì̃Ô7²}>§‘SIûcð(NàtBW½P0QŽ8Ý\kÓð<+b Œ<íáðJã<Yt~EÌMI´Ž#r)ÑÇG\§‘ro×ÿg4{ïØ'«
+§:dôፁ…1 •²s?·'i­™GªÒ¨%HVÞÕê:,ã>ízypfñA)j•Ô€LÕƒP¹Ñ$|Yé캉¢œÑ2‚¾R!ýýþáÃýÃf)†EªVlð°ê  =irwhb
+Øø2<Eµh1Þ\eWùï›ÕS´@H*Ç	°M
+óA(î qµI_ï7{ï×TÏž&"Ê5Òe—£_&@7ïï7Ûë'÷÷æƒb‹c³–ÆeÒ6×OÏ×Û¼ä8½Pµ9½Gèü)ú+%¤†Úñ‡’ŽýEÉ9-Ûû„ì(ž ~ö+ccTÔ§iÉË+î¹WÝZq^ž¹­uí%Ç’>¦¬`뺊Ÿì
 endstream
 endobj
-7639 0 obj
+7631 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610111329)
-/ModDate (D:20080610111329)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528091003-05'00')
+/ModDate (D:20080528091003-05'00')
 >>
 endobj
-7640 0 obj
+7632 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-7641 0 obj
+7633 0 obj
 <<
-/BaseFont /OKOVQR#2BLuxiSans-Bold
-/FontDescriptor 7644 0 R
+/BaseFont /YZUQMW#2BDejaVuSans-Bold
+/FontDescriptor 7636 0 R
 /Type /Font
 /FirstChar 46
 /LastChar 119
-/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 611 0 0 0 0 722 0 611 778 0 278 0 0 0 0 0 0 0 0 0 667 0 0 0 944 0 0 0 0 0 0 0 556 0 556 611 0 611 0 0 611 0 278 0 0 278 889 611 611 611 0 389 556 333 611 0 778]
+/Widths [ 380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 580 0 0 0 0 830 0 683 821 0 372 0 0 0 0 0 0 0 0 0 720 0 0 0 1103 0 0 0 0 0 0 0 500 0 675 716 0 716 0 0 716 0 343 0 0 343 1042 712 687 716 0 493 595 478 712 0 924]
 /Encoding /WinAnsiEncoding
-/Subtype /Type1
+/Subtype /TrueType
 >>
 endobj
-7642 0 obj
+7634 0 obj
 <<
-/BaseFont /YALMGL#2BLuxiSans
-/FontDescriptor 7645 0 R
+/BaseFont /MSTPMV#2BDejaVuSans
+/FontDescriptor 7637 0 R
 /Type /Font
 /FirstChar 78
 /LastChar 115
-/Widths [ 600 0 0 0 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 0 0 600 0 0 0 600]
+/Widths [ 748 0 0 0 0 0 0 0 0 0 0 611 0 0 0 0 0 0 0 0 0 0 0 615 0 0 0 0 0 0 0 0 0 612 0 0 0 521]
 /Encoding /WinAnsiEncoding
-/Subtype /Type1
+/Subtype /TrueType
 >>
 endobj
-7643 0 obj
-1208
+7635 0 obj
+1197
 endobj
-7644 0 obj
+7636 0 obj
 <<
 /Type /FontDescriptor
-/FontName /OKOVQR#2BLuxiSans-Bold
-/FontBBox [ -22 -218 932 744]
+/FontName /YZUQMW#2BDejaVuSans-Bold
+/FontBBox [ 0 -235 1071 759]
 /Flags 4
-/Ascent 744
-/CapHeight 744
-/Descent -218
+/Ascent 759
+/CapHeight 759
+/Descent -235
 /ItalicAngle 0
-/StemV 139
-/MissingWidth 278
-/CharSet (/n/o/d/p/period/D/underscore/r/g/F/s/G/t/i/S/u/I/question/w/l/a/m/b/W)
-/FontFile3 7646 0 R
+/StemV 160
+/MissingWidth 600
+/FontFile2 7638 0 R
 >>
 endobj
-7645 0 obj
+7637 0 obj
 <<
 /Type /FontDescriptor
-/FontName /YALMGL#2BLuxiSans
-/FontBBox [ 0 -16 562 563]
-/Flags 5
-/Ascent 563
-/CapHeight 563
-/Descent -16
+/FontName /MSTPMV#2BDejaVuSans
+/FontBBox [ -1 -176 649 729]
+/Flags 4
+/Ascent 729
+/CapHeight 729
+/Descent -176
 /ItalicAngle 0
-/StemV 84
-/AvgWidth 600
-/MaxWidth 600
+/StemV 97
 /MissingWidth 600
-/CharSet (/o/Y/N/e/s)
-/FontFile3 7647 0 R
+/FontFile2 7639 0 R
 >>
 endobj
-7646 0 obj
+7638 0 obj
 <<
-/Subtype /Type1C
 /Filter /FlateDecode
-/Length 7648 0 R
+/Length1 85360
+/Length 34291
 >>
 stream
-xœ]TkTSW>—äÞDÀh¸¤Ñäú JÕúÔ¥"„—
-K†Ø$¼5X¦Ö©Wm«®jy8ø(VŒá¡€/Vµ¼Z[éZÚÖ骵Ž(ul÷'væ$¬2Óùqï:gßs¾ûío{SHì(Š’­*±“ô–¢ˆ<S¶+2KPRÂ$a²¨[ž‡:ÊèÉhÕácyoï->6IZîWå°”ŽG"Š²îª^™—_Zh4äs)¯¦Íœ9ë¿‘¹aaa\fé_¸Èœ"£ÁÂiÈbKŽ)/ßœc)^Ì­$§M&cg0•æçqúììœl×µuzSÎœÖh2æççmáWq¯Ì™37„¼^Yc4g–q.öÜ*ÎÅÿO„ÐDK^v~d¡A[]lL*‰ÝjÒ›3S_Þ¸¡”ˆ¢ÐZ€’Pš’Q JAqh>Z‡‚Ñz´E 5h%
-EãÐrÄ!"£hôzB­¢Qƒ)o‹¼Då¢Ñwâdq•ø´ø¾øßôZ`R™Jæ8Ó"y	eðuBxYj}n ócí7›Âi#ÛA	;xÓ~®¯û“Íñ*|D~—€Wl–D¤å'd©Xû7Q4<šj"ö'‚.¡EÃ4˜ÂQX;Œ„CèS `Äþ†—ªwcZ1xQ;E“µ|Ùú§O/
-ÜV»Æ„Ô	³a̯õ9AÐÊ]|Ê„ _àfÌáj&·kCC/ÅŠ </Š¨_q:UͶ§ÚzŒ=Ê^¾µ¡©SŠ=…±Š/ZµÓƒtÑQQºþÇOÚ\ðEø'Cr½ö¶ÒH²˜{±‹Dš˜S	my}¼|ÿ	2½]rÛpQÍ^2ÄœŠSFó:‹1A
-žy#àiZm”®ox¸­Ÿ€;6ñ Š@N
-B0\…`Ñ /œa@Äm¿~­¯ñ14bÓãµýi×µ
-XLr ߃Ã
-rM)úʼ ÏOZ‚iÂÕŸ”ÅÔ#eñcm£%i–°ýwÏž½ûс]«QÁTÉŽÝïò;ùx>IoŽ²¶_]Á–Ÿ‘\ï»s=En½þ~ìaA	•°nêӏ¯Vâ	3±/ÆK~Àbð¿q¦æz‡:B—–µ.·þl¹
-0»õ‡,§Íçs»·}KTYôó-`Õç2ÁÀb¤舘´>&"6½wè—–/úÔnCAÈ!ŒhñсµW_‚Ib¿ƒÜYùÂÁŒLè,x>m„a(±Ü•ê°°GðP¼̼~@Dš¼P‹E†*SÍuõðöŽm°8u"û ©¼º¼ä¥ÍÙ[ã–}Õ¥ª²ªwªÞ9AŽ3ïcϬ†Pþkþê¡æ“Í'ÿ~‘ïärí‘u8êÒÄìêŠý|½ô““µí*v¸—ÿ´hwšTæ¨)†	\ì&Ä`‚Ï9öc­0Ií„W8³3³¢°¤@ÊÚ7’Ö*ñØù¿’BÏ|lÇ…2˧êºÒªms¤0…)…`,{ˆ#	ùMxž·â˜ŽÀkC=Mw¯¨YëÇ3éÜbPߎ4ÌQÅR о܏¿gÚõ?56ìÝß ’üå½»*xé¦íUmjh%Ä;ko…{]·³ÜvÙƒq˜Å„Éȳ‹Á[¨oÊÓ ¦‰„	ï+øÞ²†æ´®ðS	Á•š0<ÓW“!0OýËÖ'V[Ÿè¿&iÓœ€WÏó®
-k˜J<ç·…°†Ô?D?@ HÖvcåQ5fê¹:Sßé¹½iðagÖŠTîöšébçî1÷<±
-g|¡u_ÂÚã3ôÑ	æ“Ÿ«à	¡ì-Á^=Ñ ¹Õ~¬»YÅZãG’sDÖR7\Þ1:Ì
-<âG;kJpøBˆ`£‰=Ãœ²pAFcεZàZ00Ëi£a:sOßqÊéQ¼¥\xÁãFüGÏ­æísœpM€É.®u‡…Gþú\
-ðX~k°fÙj,ß®%³ïÊ‘ûyi×±RCéö7Ëv¨­<¯-Oª˜È•¦&óÁ|úÁœ†|b“7[­mÊnþòÑöKRÖÊçí­8ø¦f1x)˜¬=<+=rƒ¥¡ù\}íµjU[¥m߇{í÷—=;:»	©å#ÛÞý?CùNÏéæîÖù¯«°ÓùÓ^ð‘<‹ÿ£h]Q’^Up)åD¿šÏÚ’ž,eÛ{%ÿ?g¯ÎÙëD—6¤½Ûםj-ìS‚bÆÁ¢[%_:Ô›:cOÅò1¼®Ð˜"…j	xâ‹Šþö¨AiQÚÈ
-}O‡Ü£ðyäˆà‹/d8Ì4žÇ`ÊyLå4d0í<iá¼+™/Ì4Q¼„9{ÜÕ
-›ACêŽ5#s¯í§„¯±·ÂùH+<b\34B1xR7a’Æ·À‘@Cº‚ïÙWÕ}îAϱüwR˜ð3ž± ÆœøºjóÆ·t»ÂHh³óNÛg=¼´ÛþZ\ÆÛÖDzItqÆÞ…Rà’GY|D°ÕÂÒZÝ<=aŠxVz{ÔÞcúmÒœ
+xœì½	xÅö>\½wWïÝ#²3ì aÉLwB@–,„’°£2I&$™˜LXEÄTTqCTDÄ
+DEETT\AED\ÁþÝ='$ úóªwùžçcdªººªÞsNU÷œ"¹!]Œ(4<7¿g ¹ˆ¡1ç{TQe¸:þœµÜùzµhJÌßÿ‰DÞiÙ‰YPR]Z9žœ|!ª—Ó¶ª´bzI¼¿ê´é-Ë"áâÌÓó1¬·ÓšTæ4(¶ØàôwÆ£e•±i€÷ŠóUQ-
+ÇŸÛJuYTžVÝ|ø0B´Ûê¯
+WFjZ/Ùã<ûêgWGkcß¿AF(uB/¬®‰T_^¶ü`„¸D	$JÐFô…3e?´ýDµA¤ó)qZÝrQ€ö;³é¹DSVÒË鼿ˆÞæ`’D¢óZGz9±­G{Ñ³‰«™ÁÌ8··'¯;×af3qI!Sк’îG¯¥gÓkut	=­q¾SÈíôRz&ý=q%#²Ý¿®h	1„h–Kˆ¢‘AnC›™KˆÄ¢/³•ÙŠv Äp§ç*4•ÄÄâÑ“C¬uFF‡‰6ΓMÚÄbŸ#ñb´Ã`´- çi#ÚæȽBµ´3+ZÀì »1;Ðf´½ã´#4‰ ïVTwf‡ó9ˆV¢IŽev$³ƒõqméòÚOÌ!ï!í	ÒùDÇšçRÛè‰ôúJç­c‚¤‚T*Íùžàö`vK)v³%Ät§Ÿû™éàì'7“ëŸB»½tr9“\‚v«‰õŽÄÍ%VÓ¹BºZÂ.¡Ç ®mÐvr›cáž=æ£ùl":L³è •ML¤WºC™M„³}¸!¬C¸9Ž&ˆJF3‘Ïyû˜MñÓ‹g[¡Etgê6Gv’¼°ÞnÄt´L¡
+ÑRﳐX‡¢u¨9SPçX†¦H%øµ5dǬâ5GŒñ¿8¶m÷„Sýç_ƒ†¯‘§û×?>|Ý‚»†i¹†êȯ¡;¶ßý{/wwO:|ŒÑ%”Ó†&f8ùcœªûä4;í¡º†éèü—5q¿¨Ì?O›×¾Ï<-Ò§;rÎ6Wy¬BZÛkŽÔmnËIÆ»-¾!Tꆦ!ÉÙ‹ˆœÎ|Í­pJ÷à5'úŸ·˜@@"±ê$¢‰£P§Fú¡N;õ|¨3H"gAE*y?Ôy¤“A]tw ÔeãÖ.—C]AVßPאØw'ÔuD÷=ä ´àÔËCwëjBl…:‰xâ¨SÈOƒ:üd"ÔÔ”,†:‹Z“ó¡Î£v䨋¨ù-ÔåŽ}¨¡PWPYߎP×P“¾ÏA]G|ßÏQ:Š¢j4Õ rTŠÊPùQT„º:e õr>A§Vèôð£4§OÌÙg1§w…Q%JpZ³P•Ó¿‡SKEÎǏòNÌUë=Eœ2⌙â|;=ñŸ@M:Zà Mq°&9cªœÞ®agÌ¿†˜áÔ&9ãF¡:§G‘Ó7ìÍñF„=üÎ,UÎwµÓ§Ð™·ÜéçwÆGô°÷#”­ž^S^Zów)êêôêôN÷§•Çjc5‘pe‚?«ª¨‡?µ¢ÂŸçöªõçEj#5S"Å=ðo†&¹CÂS*'E«Jýiá²ß˜™U眝pUi¤Ö®‰øË«üÕu…åEþâhe¸¼Ê‘ìdó=§ ƒóÃUÎCš£L…£J‹VÿÞC·FƒýyÈ(o-jF=ûœ	8û
+ŠÔÔ–G«üàÉ3×ÏÛýÔyÝi»ŸN’oòøˆÁö¬—¥$ZåØ3æ,ò6IÌYâ>¨§ó)†9¦8sôpÆF²ÆYöˆ7_·Az8óFœ1¨,«îÓ³g±3锺µÑºš¢HI´¦4Ò£*â¼Îl$Aý†ªßÔ¿=:î;w“F¼qtŒ¢©N_w[ÿ3›ÕiófºÓ§ÌYöôŠyõZ7Â=Jî¬SN±ä©z4ƺ“ãïiƒÏéto‰°Sklµßºì쀿þÁÊÕüóîôëÝ s¹ó{µ˜×âîÂJÏÖ“¶¨³ÿ—,®fýù*½ÙW¹'S™÷.z•z(U°ê	°îñÕŠ£Å÷X|¿'xrE½Õ¯òÆWÃŽ#DYc°ÇÊa„½9â–Æ0gÌ“âÔýTäõs÷a|öúÜÞqÙã{9âÿøÞk×h—´óVÎ[앵ž\EΘ0臽SPäìÐJo–˜÷¦Þ>%N­NR—26 ¸>Í•?æìßøîwlâ¶T{§¦ØA(òF×KSìióöZ¡ó6潍cà?@H€Ó\äHVçÍ·ÉTo”y^)–©ôÚkT¯CÍI»2.mgÄF«ãÖ+½õŒ¯5näAjÑ	¿£GÂ	={zÄïÍ?ñ¹ËÁª'¯þk]o¹¸´Õ'vtÌ“«a×5h4Õ³GåŸB¨?
+%žW¯
+#‹½o#Á+]KLrzyóÅûÔ¯_‰ÇDqÏV¿BEv±'q9HÚÇ; ]Ø™1êy††5hì‹,ð[OPåôÁi¨=©oýYi°XcÐxœßÓ9ìIŽ=ß|ò^‹[#Î%á?XϨǂ~XûJ¯lðf-b¹Ìzœd©?ëÚd:pKݵy‰'c1ì¤
+oŸÖœh‰KêÚ´¸Ñš7Þuõö±ÜóÞ>¡Q±'©»^U¬Qz¯Æ‘ê}hØÛ=ñ½[qª}jÿOê¥Ä AÃ{kôç%8çT{œN¶Xï
+o\ùïxs|buj<?öüJüõ-µ'vdýy9•="àç"žõHS=­Š½ñíNÇíNè}ê켫gÛvvYüÌdŸÂ/…Þy6’µÎAý>™â¼-?Å"NJŽq{W;Ÿ8{…=91¢ñºÇe®oÁ§=)ež‡÷{e-ÈñvÒïí“z_w:ß]ì1A•·îíu:«âF–k¼†õ¬ÖBüîMêO[ýIr#‡Š±G
+Œ8yÆjoGOv¾KaÅâ|èî*|«þ;=ÕïkUg$|XrÂRƒQÈÃÉE9Γ‹“ë< ÑN™ç½ËrÚüN—ç¼å<e8­Þº¤zoÜ÷í¼Ó8Ú©»3梑Þ\ñ9òœowî±N‹;·ß{vŸ†:ýsœ¹Ü±!4ÆÃ9³å;’å:uwîaNk¶S† Ÿ;"Ýié<»õAȍBãx9Ψïì¸ã\Yâ’8í
+¨'K•å!ÖK6ÌyÊsæoS¹³¼ù\ù¼øȭ瀜qËåy³»6rgvçLw$ÊöžÜÖ‘N9Üé—ïÙ3ÕÓ9.mŽ§C¦ó>®KÈ“ ¾q‰Òr¸ƒíöäÈUàYÁE*€ž	Þ:ºúdxã]Ô¡^¯¸d¹°Ên½a–`˸®ýG@Î÷ôÏv>~Oÿ§¥À[›Tgþúyë÷Î oWnìYc¤§_ªg‡\!ÍëçZѵgö‰—×hUÒ={¹ëæJžá!¥zÉ?­&õ³5^Óí|a§_ȳT¶×;ß±cÈéŸu¢%¾³<]ÓÁÖñ9ãû>¾'²Y7ÝÓÑ]ÙjöTªg»“µp×i´'ƒñH…ïôF6kXýXÝzy
+<ä‚ÓXe´wC^¯To­óOœ‘LïüÉGžØa
+>`$ìÏÜ’lßúsTßïÏøŽø\õØ'¯`†·Ÿ²AÂüÖˆ÷À0oÜw…^+òòœØ	¿}2s7Ž¢ÑÆqgB#_Û8ˆ{áA^ßÊSú5´Æ³¥8g5ä:c·ÓeØõÙq<–¯z¢¸ïŽçD£Þb/>Ç€µ'¢’¨FOD&S½·
+œ^
+w'Ñ“ò<9ìqÂ	¬z.j˜+W†½hÁE«=5Ÿ¡ðo2Ãjïã(S½z"W¿:èë¶Ï8%®¿ÿùíøO»õºœ.rhlÿo½«!—*÷,ìÆ“=`ÞTŸ—5Øĵ@üÞ­ò”UoØ}îl}Щ·
+®
+JI^ìÙ£øž‹‰=UÇõß¿uú§/¸ÿ—îƒðI÷A§F^ÿ¾û |Úû ÿø>ÿ©û “#ù¢F25ÜuÔ÷üs7¨§»aÁÿµ{%ÿoî•ðÿ¯Ôè^©á†áÿ›÷Jø$†ýïÝ+áÓdkÿ÷Jø´÷J
+ýgî•ðÜügî•0úWï•þÕ韼Wj8o'ß+ýûþþíR<?Gÿk·K|»túۍÿÌíþëúYðû–	{{ì·ÑÌþ–	ÿß2áSn™rÝÿä-þ?o™üÿ±[&ü/Ü2ùÿm·LسÁ(gÖ!ž´qk§:ïÿswGø´kþߺ;¿¹;òÿ×îŽðïÞ5ÜýûïŽð¿pwôGóþ{ïŽê=ëï3Êoo|ð_¸ñi|KóOÞøà¿uãóÛœí¯ÝøàF7>tïðOÜÐÄ~3ÿ@ÔpÓ€=÷©B™Þh¹?×æþd܉¦ów©Dü…‘ŠèÔ®=üâ§àzøUL¯.«õ—WVGkb‘bIM´ÒŸZ™?VáýÔ]]ü§îÃ`Ü€>*RöÇE;ñ£{¸ûþÁ¿ý!¿?ýóþSËkqØ«	G*Ã5“ýÑ’SgÁxx¤¦²¼ÖûºòZY¤&â`•Ö„«ÕݵœaŽÅjJ#	þXÔ®šî¯ŽÔÔ:¢…1ÇbåŽ	Âþ"GhìôŒ•EêíTT­¬vº»beÎ쎕#UµŽõÚy&i×Õ™¬Ø®­•‡<\-ª«ŒTÅÂ1Wž’ò
+g‘º¸3züùÑ’ØTÇüíºz’ÔDªk¢ÅuEošârG±òºXÄ•Ÿ4 ÁY梊ºbW’©å±²h]̦²€\„š¸)iëjþ®:	þʈ«5ö6HmYB#Œ³g´Æ_qÖÁé]îˆ
+êŸí
+çL[í:†ã¦ó€¦–9ë7Üe(©«©r #ÞÀ⨿6šà¯­+œ)Š¹-®~%Ñ
+g³¹
+E«ŠË]=jû`\àL.ŒN‰xÄw‘'À‰MP9ËPouW¥ºaÄßùk˸0VsÄpNIø$=£Uξ¨ñWFk"§UÛ›^)	;@=âBü¶2<Ý9-Îðâò’rw£…+bÎÖs*ΤáâbOó¸éÜ®q䪫×`¨8R[^Zå‰Q?«Î w‡†‹œIjÝõòÔžŠäN‰ Ï`áŠÓO cêåh˜Í¯ªbº¿¼Ñ6Ç®:5÷÷6¼¾n¥Ö5¤».õÇ#âì¹H7hj´¦¸ÖßîÄ9lçb׿ÀíÜcÛÎ3™³2Ùp^
+#ÎIrg­sÖÀµÉ”hù	Á"ÓbΉñ‡««ã.¬ˆ¸/âº;3»Ü°(eᘿ,\ëÌ©:É&î®kØÝÅþºªb¸ATì	×ðVµ6ZážjoÙÜE
+û+\ï᜕úŽÕá¢ÉáRG1çVE±»UÿµMu”ã°#%®PƒCþÌÜœ~nfÁèÔ¼?+ß?</wTVF(Ãß.5ßyn—àU08wdßé‘—šS0ÖŸ›éOÍëš•“‘àžÊÏǹyþ¬aó³BN[VNzöÈŒ¬œAþ4g\Nn?;kXV3iA®7¦Ê
+廓
+å¥vSÓ²²³
+Æ&à̬‚gNG¸<ªxj^AVúÈìÔ<ÿð‘yÃsóCÎδ9Y9™yJhXÈQ™(=wøؼ¬AƒœANc.ÈKÍ
+KÍšàw&ËuTÎó{]z8R:søC£ÜÁùƒS³³ýiYùy¡Ôan_×:ƒrr‡…pfîÈœŒÔ‚¬ÜZÈQ%5-;—ÍQ%=;5kX‚?#uXê Wz·[\s`wÀ PN(/5;ÁŸ?<”žåV;få…Ò¼žŽíKd{â¦çæä‡FŒtœ~õ	xôàá(êü—îIæ©Ÿã¨ëÎS›WpB”ÑYù¡j^V¾»"™y¹Ž¸îzæfz;`¤cOwñr@^wÜ¶ß;Ì¥f;æ»b8
+ø¤¾Îî
+M+ŠTÇܽ
+‡;î=7÷	Þ®;gªrn¼Í«:´äœ,uâÞ­°]:Nˆ»^Ï}8»Ûa¢¸ë-žq<`­ëJ¢58ê:“©åµÞIw(°2ç<m¸ÂsF¹§ÈëåøÊp…3¬ö„˜'(\O†Õ5åΐ©5å1Ç™øÃuNkMù á )Oƒ.JƒsˆË_©­vXª|J¤bz§oËež$åU%ÑšJPÝ3_Q¬O}¨ó—z“Gc8ZSÚϱqýíÐéÏþ~Ä?áxäÿ+qnˆƒü1¿ƒÀÉy3ÕÖsÆiÔ†€ÿXÉ_+áÿX	Ç×áß+áøý[±þc%Ü+ùÿb¬„OŠþB¬„/VòÿùX	7Š•ß“Â%‡Ï'ñO…KÂ%ÿß
+—ðIâzyã?2᪨ÿo‡Lø
+™0„Lþ¿2áSC&ÿ_	™ðiC&ÿ¿2á‚ÔQÆäºb§þKÑnÐüïDG¸>:òÿè7ŽŽü):§Žü':r7ëIåDàƒ7ðñÿþãÀÇÿ'ì>'Çÿw@«ï?Ðp§èñw~g°§wo7ÙùÛÓ»;+öþU¯‡÷ï«ÕNÛÉÿZøÇ¿aØsjùäòžåŽ³šÖ£º¬º'xÌ¿ô‹ŸÞïD{ŽÏBãÐiþø†x¿CM"
+шA,⏄‘ˆ$$#©HC:2‰|èԝ‰š¢f¨9jZ¢V¨5jãÈÒµCíQÔuBQԝ…º¡ÔÝ1AOÔ%z¿j!%¡dÔ¥8&î‹ÎFýP4 
+ô®ºÓ½+éLïŸ=²Ð4Ô1Ú0ï=†£(ÏûÚ‘Žî£Ñ4ÖÑe<š€ÎAç¢óÐDÇ«Ð]èR4=‰¡ÏÑeè4ÝŠîEË	ÍCï£9h!:„¾CW£›Ðh3ú}‹nC÷¡Ð÷è0Z†@/¡-h5*t–éZÇ~[[¿ˆ^F¯¡WÐ6ô*úÂYô7Ñëh;zÐYøƒè:ô6zíp–÷+ô5ºÒYwù+ÛW¡;œ58ß»¸­õ.h§8›ãKg;Ì@ÓÑLt!º ­Cw¢‹Ð,t1šö£h=A4Á,Á<ú#"!¡ã"dB!T‚ 4B'Â$|ÄDâL¢)ÑŒhN´@GÐQ¢%ÑŠhM´!üD[¢Ñžè@t$:‰.DWâ,¢ú	½C$݉DO¢‘Hˆ a6‘D$½‰¢úí!úgýˆþÄ b ‘J¤éD"2‰AÄ`"­ACˆ¡D61ŒÈ!r‰áÄ"ÈG?£_Чh/Q@Œ$F£‰1ÄXb1ž˜@œCœKœGL$ÂD!QD¢„(%ʈr´˜DL&*ˆJôÚGTQ¢š8Ÿ¨!j‰QGL!¦ÓˆéÄb&qq!1‹¸ˆ¸ÝCÌ&.!æ—s‰ËˆË‰+ˆ+‰yÄ|â*âjâbq-qq=±¸¸‘XDÜD,&n&–·K‰[‰ÛˆÛ‰;ˆ;‰eÄ]Ärânâb±’¸—¸¸ŸXE<@¬&$Ök‰‡‰GˆG‰ÇˆÇ‰uÄÄzb±‘x’xŠxšx†ØD<Kl&ž#ž'^ ¶///[‰WˆmÄ«ÄkÄëÄvâ
+âMâ-bñ6ññ.ññ>ñ±“ØE|H|D|Lì&>!öŸ{‰Ïˆ}ÄçÄÄ—ÄWÄ~âkâ ñ
+qø–8D|G|Oü@&~$ŽG‰ŸˆŸ‰_ˆ_‰cÄq‘I’I“É’É“‰I‘”H™TH•ÔH4H“ô‘gMÈ3ɦd3²9Ù‚lI¶"[“mH?Ù–lG¶';ÉNdg²Ù•<‹ìF&ÝÉdO²™HÈ i‘6™D&“½É²Ù—<›ìGö'ÉT2L'3È™I"“Yär(™M#sÈ\r89‚Ì#óÉr$9ŠMŽ!Ç’ãÈñäòò\ò<r"&É"²˜Œ%d)YF–““ÈÉdYIV‘Q²š<Ÿ¬!kÉYGN!§’ÓÈéär&yy!9‹¼ˆ¼˜œM^BÎ!/%ç’—‘—“WW’óÈùäUäÕä5äòZò:òzr!yy#¹ˆ¼‰\LÞL.!o!—’·’·‘·“ww’ËÈ»ÈåäÝä=ä
+r%y/yy?¹Š|€\M>H®!"×’£wÑnòòQò1òqrù¹žÜ@n$Ÿ$Ÿ"Ÿ&Ÿ!7‘Ï’›Ñh'Ú…>FÈçÈçÉÈ-ä‹äKäËäVòrù*ùù:¹|ƒ|“|‹ÜA¾M¾C¾K¾G¾O~@î$w‘’‘“»ÉOÈ=ä§ä^ò3rù9ùù%ù¹Ÿüš<@~C$¿%‘ß‘ß“?‡ÉÉ#äQò'ògòòWòyœBA‘EÑC±Gñ”@aJ¤$J¦J¥4J§ʤ|ÔTêLª)ÕŒjNµ ZR­¨ÖTÊOµ¥ÚQí©TGªÕ™êBu¥Î¢ºQ	TwªÕ“êE%R*HY”M%QÉTo*…êCõ¥Î¦úQý©Ô@*•J£Ò©*DeRƒ¨ÁT5„JeSè*—N ò¨|ª€I¢FSc¨±èvj5žš@CKGM¤ÂT!UDSª„*¥Ê¨rj5™ª *©**Šn¡ª©ó©ª–ŠQuÔj*5šNÍ fRPR³¨‹¨‹©ÙÔ%ÔêRj.uu9uu%5šO]E]M]C- ®¥®£®§R7P7R‹¨›¨ÅÔÍÔêj)u+uu;uu'µŒº‹ZNÝMÝC­ VR÷R÷Q÷S«¨¨ÕÔƒÔê!j-õ0õõ(õõ8µŽz‚ZOm 6ROROQOSÏP›¨g©ÍÔsÔóÔÔêEê%êej+õ
+µz•zzÚN½A½I½Eí Þ¦Þ¡Þ¥Þ£Þ§> vR»¨©¨©ÝÔ'ÔêSj/õµúœú‚ú’úŠÚO}M ¾¡RßR‡¨ï¨ï©¨ÃԏÔê(õõ3õõ+uŒ:N#š Iš¢iš¡Yš£yZ 1-Ò-Ó
+­Ò­ÓmÒ>úº	}&Ý”nF7§[Ð-éVtkº
+í§ÛÒíèötº#݉îLw¡»ÒgÑÝèº;݃îI÷¢é ¤-Ú¦“èdº7B÷¡ûÒgÓýèþô z J§Ñét¢3éAô`:‹B¥³éatK§GÐyt>]@¤GÑ£é1ôXz=žž@ŸCŸKŸGO¤Ãt!]DÓº„.¥Ëèrz=™® +é*:JWÓçÓ5t-£ëè)ôTz=žAϤ/ /¤gÑÑÓ³éKè9ô¥ô\ú2úrú
+úJz=Ÿ¾Š¾š¾†^@_K_G_O/¤o o¤Ñ7Ñ‹é›é%ô-ôRúVú6úvúúNz}½œ¾›¾‡^A¯¤ï¥ï£ï§WÑЫéé5ôCôZúaúúQú1úqzý½žÞ@o¤Ÿ¤Ÿ¢Ÿ¦Ÿ¡7ÑÏÒ›éçèçéè-ô‹ôKôËôVúzý*ýý:½~ƒ~“~‹ÞA¿M¿C¿K¿G¿O@ï¤wÑÒÑÓ»éOè=ô§ô^ú3zý9ýý%ý½Ÿþš>@C¤¿¥ÑßÑßÓ?Їéé#ôQú'úgúúWú}œAÁÅÐðÇðŒÀ`Fd$FfFe4FgÆd|ÌLæL¦)ÓŒiδ`Z2­˜ÖLÆÏ´eÚ1í™LG¦Ó™éÂteÎbº1	Lw¦Ó“éÅ$2&ÈXŒÍ$1ÉLo&…éÃôeÎfú1ý™Ì@&•IcÒ™&Äd2ƒ˜ÁL3„Êd3Ø&—ÎŒ`ò˜|¦€ÉŒbF3c˜±Ì8f<39‡9—9™È„™B¦ˆ)f"L	SÊ”1åÌ$f2SÁT2UL”©fÎgj˜Z&ÆÔ1S˜©Ì4f:3ƒ™É\À\ÈÌb.b.ff3—0s˜K™¹ÌeÌåÌÌ•Ì<f>ss5s
+³€¹–¹Ž¹žYÈÜÀÜÈ,bnb373K˜[˜¥Ì­ÌmÌíÌ̝Ì2æ.f9s7s³‚YÉÜËÜÇÜϬb`V32k˜‡˜µÌÃÌ#Ì£ÌcÌãÌ:æ	f=³ÙÈ<É<Å<Í<Ãlbže63Ï1Ï3/0[˜™—˜—™­Ì+Ì6æUæ5æuf;óó&ó³ƒy›y‡y—yyŸù€ÙÉìb>d>b>fv3Ÿ0{˜O™½ÌgÌ>æsææKæ+f?ó5s€ù†9È|Ëb¾c¾g~`3?2G˜£ÌOÌÏÌ/̯Ì1æ8‹X‚%YŠ¥Y†eYŽåYÅ¬ÈJ¬Ì*¬Êj¬Î¬ÉúØ3Ø&ì™lS¶ÛœmÁ¶d[±­Ù6¬Ÿm˶c۳؎l'¶3Û…íÊžÅvcØîl¶'Û‹MdlµX›Mb“ÙÞl
+Û‡íËžÍöcû³؁l*›Æ¦³lˆÍd±ƒÙ,v;”Íf‡±9l.;œÁæ±ùl;’ÅŽfÇ°cÙqìxv{{.{;‘
+³…l[ÌFض”-cËÙIìd¶‚­d«Ø([ÍžÏÖ°µlŒ­c§°SÙiìtv;“½€½Å^Ä^ÌÎf/aç°—²sÙËØËÙ+Ø+Ùyì|ö*öjöv{-{{=»½½‘]ÄÞÄ.fof—°·°KÙ[ÙÛØÛÙ;Ø;Ùeì]ìrönöv»’½—½½Ÿ]Å>À®fd×°±kÙ‡ÙGØGÙÇØÇÙuììzv»‘}’}Š}š}†ÝÄ>ËnfŸcŸg_`·°/²/±/³[ÙWØmì«ìkìëìvö
+öMö-vû6ûû.ûû>û»“ÝÅ~È~Ä~Ìîf?a÷°Ÿ²{ÙÏØ}ìçìì—ìWì~ökö û
+{ý–=Ä~Ç~ÏþÀfd°Gٟ؟Ù_Ø_ÙcìqqGrGsÇrÇs‡9‘“8™S8•Ó838“óqgpM¸3¹¦\3®9ׂkɵâZsm8?×–kǵç:p¹N\g®ו;‹ëÆ%pݹ\O®—ȸ gq6—Ä%s½¹®×—;›ëÇõçp¹T.Kç2¸—É
+âsYÜn(—Í
+ãr¸\n87‚Ëãò¹n$7Š͍áÆrã¸ñÜîî\î<n"æ
+¹"®˜‹p%\)WÆ•s“¸É\WÉUqQ®š;Ÿ«áj¹WÇMá¦rÓ¸éÜn&ww!7‹»ˆ»˜›Í]ÂÍá.åær—q—sWpWró¸ùÜUÜÕÜ5ÜîZî:îzn!ww#·ˆ»‰[ÌÝÌ-áná–r·r·q·swpwr˸»¸åÜÝÜ=Ü
+n%w/ww?·Š{€[Í=È­áâÖrsprqsë¸'¸õÜn#÷$÷÷4÷·‰{–ÛÌ=Ç=ϽÀmá^ä^â^æ¶r¯pÛ¸W¹×¸×¹íÜÜ›Ü[Üîmîî]î=î}în'·‹ûûˆû˜ÛÍ}Âíá>åörŸqû¸Ï¹/¸/¹¯¸ýÜ×Üîî ÷-wˆûŽûžû;ÌýÈáŽr?q?s¿p¿rǸã<â	žä)žæžå9žçó"/ñ2¯ð*¯ñ:oð&ïãÏà›ðgòMùf|s¾ß’oÅ·æÛð~¾-ߎoÏwà;òøÎ|¾+ߍOà»ó=øž|/>‘ðAÞâm>‰Oæ{ó)|¾/6ߏïÏàò©|ŸÎgð!>“Äæ³ø!üP>›Æçð¹üp~ŸÇçóüH~?šÏåÇñãù	ü9ü¹üyüD>ÌòE|1áKøR¾Œ/ç'ñ“ù
+¾’¯â£|5>_Ã×ò1¾ŽŸÂOå§ñÓùüLþþB~1?›¿„ŸÃ_ÊÏå/ã/ç¯à¯äçñóù«ø«ùkøüµüuüõüBþþF~¿˜¿™_ÂßÂ/åoåoãoçïàïä—ñwñËù»ù{øüJþ^þ>þ~~ÿ ¿š_Ã?įåæáåãç×ñOðëù
+üFþIþ)þiþ~ÿ,¿™Žžß¿ȿĿÌoå_á·ñ¯ò¯ñ¯óÛù7ø7ù·øüÛü;ü»ü{üûüüN~ÿ!ÿÿ1¿›ÿ„ßÃÊïå?ã÷ñŸó_ð_ò_ñûù¯ùü7üAþ[þÿÿ=ÿ˜ÿ‘?ÂåâæáåñÇ$)P-0+p/DAdATAtÁLÁ'œ!4Κ
+Í„æB¡¥ÐJh-´üB[¡Ð^è t:	….BWá,¡› tz=…^B¢‚‚%ØB’,ôR„>B_ál¡ŸÐ_ R…4!]ÈBB¦0H,d	C„¡B¶0LÈr…áÂ!OÈ
+„‘Â(a´0F+ŒÆ„s„s…ó„‰BX(Š„b!"”¥B™P.L&B¥P%D…já|¡F¨bB0E˜*L¦3„™ÂÂ…Â,á"ába¶p‰0G¸T˜+\&\.\!\)ÌæW	Wׄk…ë„ë……Â
+Â"á&a±p³°D¸EX*Ü*Ü&Ü.Ü!Ü),î–w÷+„•Â½Â}ÂýÂ*áaµð °FxHX+<,<"<*<&<.¬žÖ„Â“ÂSÂÓÂ3Â&áYa³ðœð¼ð‚°ExQxIxYØ*¼"l^^^¶oo
+o	;„·…w„w…÷„÷…„Â.áCá#áca·ð‰°GøTØ+|&ì>¾¾¾ö_„o„ƒÂ·Â!á;á{áá°ð£pD8*ü$ü,ü"ü*Žc„	Lb
+Ó˜Á,æ0Œ±ˆ%,c«XÃ:6°‰}øÜŸ‰›âf¸9n[âV¸5nƒý¸-n‡Ûã¸#î„;ã.¸+>wÃ	¸;î{â^8p[ØÆI8÷Æ)¸î‹ÏÆýp< Ä©8
+§ã™xŒ³ð<gãa8çâáxÎÃù¸ Ä£ðh<Åãðx<ŸƒÏÅçá‰8Œq.Æ\‚Kq.Ç“ðd\+qŽâj|>®Áµ8†ëð<OÃÓñ<_€/ijðEøb<_‚çàKñ\|¾_¯Äóð||¾_ƒàkñuøz¼߀oÄ‹ðMx1¾/Á·à¥øV|¾߁ïÄËð]x9¾߃Wà•ø^|¾¯ÂàÕøA¼?„×â‡ñ#øQü~¯ÃOàõxÞˆŸÄO¡µèaü4~oB¡ÇÑsøYôz=7£Kгèrü~¿€îÇ[ð‹ø%ü2ÞŠ_ÁÛÐøUü~oÇoà7ñ[xz
+=ßÆïàwñ{ø}üÞ‰wáÑFüþïÆŸà=øS¼†÷áÏñøKüޏ¿Æð7ø þÂßáïñø0þÁGñOøgüþÃÇE$")R"-2"+r"/
+"EQeQUQuÑMÑ'ž!6Ï›ŠÍÄæb±¥ØJl-¶ýb[±Ø^ì v;‰Å.èG±«x–ØML»‹=Äžb/1QˆAÑm1IL{‹)b±¯x¶ØOì/Š©bš˜.fˆ!1S$³Ä!âP1[&戹âpq„˜'æ‹âHq”8Z#ŽljãÅ	â9â¹âyâD1,¢«Ä"±XŒˆ%b©X&–‹“ÄÉb…X)V‰Q±Z<_¬kŘX'N§ŠÓÄéâq¦xx¡8K¼H¼Xœ-^"Î/犗‰—‹WˆWŠóÄùâUâÕâ5âñZñ:ñzq¡xƒx£¸H¼I\,Þ,.o—Š·Š·‰·‹wˆwŠËÄ»ÄåâÝâ=â
+q¥x¯xŸx¿¸J|@\->(®׊‹ˆŠ‰‹ëÄ'Äõâq£ø¤ø”ø´øŒ¸I|VÜ,>'>/¾ n___·Š¯ˆÛÄWÅ×Ä×Åíââ›â[âñmññ]ñ=ñ}ñq§¸KüPüHüXÜ-~"î?÷ŠŸ‰ûÄÏÅ/Ä/ůÄýâ×âññ ø­xHüNü^üA<,þ(Š?‰?‹¿ˆ¿ŠÇÄã’‰”(‰–‰•8‰—	K¢$I²¤Hª¤IºdH¦ä“ΐšHgJM¥fRs©…ÔRj%µ–ÚH~©­ÔNj/u:J¤ÎR©«t–ÔMJºK=¤žh±ÔKJ”h¥”,É–’¤d©·”"õAK¤¾èfôt¶ÔOê/
+J©Rº[J—2¤º^Ê”Iƒ¥,iˆ4TÊ–†I9R®4\–JyR¾T ”FI£¥1ÒXiœ4^š #+'M”ÂR¡T$K©D*•Ê¤ri’4Yª*Ñ
+©JŠJÕÒùRT+Ť:iŠ4Uš&M—fH3¥¤¥YÒEÒÅÒléiŽt)Z Í•.“.G7 ¥+¤+¥yÒ|é*éjéit­tt½´PºAºQZ$Ý$-–n––H·HK¥[¥Û¤Û¥;¤;¥eÒ]Òrénéi…´RºWºOº_Z%= ­–”ÖHIk¥‡¥G¤G¥Ç¤Ç¥uÒÒziƒ´QzRzJzZzFÚ$=+m–ž“ž—^¶H/J/I/K[¥W¤mÒ«ÒkÒëÒvé
+éMé-i‡ô¶ôŽô®ôžô¾ô´SÚ%}(}$},í–>‘öHŸJ{¥Ï¤}ÒçÒÒ—ÒWÒ~éké€ôtPúV:$}'}/ý –~”ŽHG¥Ÿ¤Ÿ¥_¤_¥cÒqÉ„LÊ”LËŒÌÊœÌË‚ŒeQ–dYVdUÖd]6dSöÉgÈMä3å¦r3¹¹ÜBn)·’[Ëmd¿ÜVn'·—;ÈåNrg¹‹ÜU>Kî&'ÈÝårO¹—œ(ä lɶœ$'˽幏ÜW>[î'÷—ÈåT9MN—3䐜)’ËYòy¨œ-“sä\y¸<BΓóåy¤<J-‘ÇÊãäñòùù\ù<y¢–å"¹XŽÈ%r©\&—Ë“äÉr…\)WÉQ¹Z>_®‘kå˜\'O‘§ÊÓäéòy¦||¡<K¾H¾Xž-_"Ï‘/•çÊ—É—ËWÈWÊóäùòUòÕò5òùZù:ùzy¡|ƒ|£¼H¾I^,ß,/‘o‘—Ê·Ê·É·ËwÈwÊËä»äåòÝò=ò
+y¥|¯|Ÿ|¿¼
+=!? ¯–”×ÈÉkå‡åGäGåÇäÇåuòòzyƒ¼Q~R~J~Z~FÞ$?+o–Ÿ“Ÿ—_·È/Ê/É/Ë[åWämò«òkòëòvù
+ùMù-y‡ü¶üŽü®üžü¾ü¼SÞ%($,ï–?‘÷ÈŸÊ{åÏä}òçòò—òWò~ùkù€ü|PþV>$'/ÿ –”ÈGåŸäŸå_ä_åcòq)„B*”B+ŒÂ*œÂ+‚‚Q‘YQUÑ]1Sñ)g(M”3•¦J3¥¹ÒBi©´RZ+m¿ÒVi§´W:(•NJg¥‹ÒU9Ké¦$(Ý•JO¥—’¨” b)¶’¤$+½•¥ÒW9[é§ôW(•T%MIW2”’©R+YÊe¨’­Sr”\e¸2BÉSò•e¤2J­ŒQÆ*ã”ñÊåå\å<e¢V
+•"¥X‰(%J©R¦”+“”ÉJ…R©T)Q¥Z9_©Qj•˜R§LQ¦*Ó”éÊe¦rr¡2K¹H¹X™­\¢ÌQ.Uæ*—)—+W(W*ó”ùÊUÊÕÊ5ÊåZå:åze¡rƒr£²H¹IY¬Ü¬,QnQ–*·*·)·+w(w*Ë”»”åÊÝÊ=Ê
+e¥r¯rŸr¿²Jy at Y­<¨¬QRÖ*+(*)+ë”'”õÊe£ò¤ò”ò´òŒ²IyVÙ¬<§<¯¼ lQ^T^R^V¶*¯(Û”W•×”וíÊÊ›Ê[Êåmåå]å=å}åe§²KùPùHùXÙ­|¢ìQ>Uö*Ÿ)û”Ï•/”/•¯”ýÊ×Êåå ò­rHùNù^ùA9¬ü¨QŽ*?)?+¿(¿*Ç”ã*R	•T)•V•U9•W«¢*©²ª¨ªª©ºj¨¦êSÏP›¨gªMÕfjsµ…ÚRm¥¶VÛ¨~µ­ÚNm¯vP;ªÔÎjµ«z–ÚMMP»«=Ôžj/5Q
+¨AÕRm5IMV{«)jµ¯z¶ÚOí¯Pª©jšš®f¨!5S¤V³Ô!êP5[¦æ¨¹êpu„š§æ«êHu”:Z£ŽUÇ©ãÕ	ê9ê¹êyêD5¬ªEj±QKÔRµL-W'©“Õ
+µR­R£jµz¾Z£Öª1µN¢NU§©ÓÕêLõõBu–z‘z±:[½D£^ªÎU/S/W¯P¯Tç©óÕ«Ô«ÕkÔêµêuêõêBõõFu‘z“ºX½Y]¢Þ¢.UoUoSoWïPïT—©w©ËÕ»Õ{ÔêJõ^õ>õ~u•ú€ºZ}P]£>¤®UVQUSWשO¨ëÕ
+êFõIõ)õiõu“ú¬ºY}N}^}AÝ¢¾¨¾¤¾¬nU_Q·©¯ª¯©¯«ÛÕ7Ô7Õ·ÔêÛê;ê»ê{êûêêNu—ú¡ú‘ú±º[ýDÝ£~ªîU?S÷©Ÿ«_¨_ª_©ûÕ¯Õê7êAõ[õúú½úƒzXýQ=¢URVQU©Ç5¤©Q­1«q¯	ÖDMÒdMÑTMÓtÍÐLͧ¡5ÑÎÔšjÍ´æZ­¥ÖJk­µÑüZ[­Ö^ë uÔ:iµ.ZWí,­›– u×zh=µ^Z¢Ђš¥ÙZ’–¬õÖR´>Z_íl­ŸÖ_ 
+ÔRµ4-]ËÐBZ¦6H¬eiC´¡Z¶6LËÑrµáÚ-OË×
+´‘Ú(m´6F«ÓÆk´s´sµó´‰ZX+ÔŠ´b-¢•h¥Z™V®MÒ&kZ¥V¥Eµjí|­F«ÕbZ6E›ªMÓ¦k3´™ÚÚ…Ú,í"íbm¶v‰6G»T›«]¦]®]¡]©ÍÓækWiWk×h´kµë´ëµ…Ú
+ڍÚ"í&m±v³¶D»E[ªÝªÝ¦Ý®Ý¡Ý©-ÓîÒ–kwk÷h+´•Ú½Ú}ÚýÚ*ímµö ¶F{H[«=¬=¢=ª=¦=®­ÓžÐÖk´Ú“ÚSÚÓÚ3Ú&íYm³öœö¼ö‚¶E{Q{I{YÛª½¢mÓ^Õ^Ó^׶kohojoi;´·µw´wµ÷´÷µ´Ú.íCí#ícm·ö‰¶GûTÛ«}¦íÓ>׾оԾÒök_k´o´ƒÚ·Ú!í;í{íí°ö£vD;ªý¤ý¬ý¢ýªÓŽëH'tR§tZgtVçt^t¬‹º¤Ëº¢«º¦ëº¡›ºO?Co¢Ÿ©7Õ›éÍõzK½•ÞZo£ûõ¶z;½½ÞAï¨wÒ;ë]ô®úYz7=Aï®÷Ð{ê½ôD= uK·õ$=Yï­§è}ô¾úÙz?½¿>@¨§êizºž¡‡ôL}>XÏÒ‡èCõl}˜ž£çêÃõzžž¯è#õQúh}Œ>V§×' gÐ&ýý\ý<}¢Öõ"½Xè%z©^¦—ë“ôÉz…^©WéQ½Z?_¯Ñkõ˜^§OѧêÓôéú}¦~~¡>K¿H¿XŸ­_¢ÏÑ/Õçê—é—ëWèWêóôùúUúÕú5úýZý:ýz}¡~ƒ~£¾H¿I_¬ß¬/ÑoÑ—ê·ê·é·ëwèwêËô»ôåúÝú=ú
+}¥~¯~Ÿ~¿¾J@_­?¨¯ÑÒ×êëèêéëëô'ôõú}£þ¤þ”þ´þŒ¾IV߬?§?¯¿ oÑ_Ô_Ò_Ö·ê¯èÛôWõ×ô×õíúú›ú[úýmýý]ý=ý}ý}§¾KÿPÿHÿXß­¢ïÑ?Õ÷êŸéûôÏõ/ô/õ¯ôýú×úýý þ­~HÿNÿ^ÿA?¬ÿ¨яê?é?ë¿è¿êÇôã2ƒ4(ƒ6ƒ58ƒ7¢!²¡ª¡ºa¦á3Î0šgMfFs£…ÑÒhe´6Ú~£­ÑÎhot0:ŒÎF£«q–ÑÍH0º=ŒžF/#ÑAÃ2l#ÉH6z)F£¯q¶ÑÏèo0©Fš‘nd!#Ód6²Œ!ÆP#Ûfä¹Æpc„‘gäÆHc”1ÚcŒ5Æã	Æ9ƹÆyÆD#lEF±1JŒR£Ì(7&“
+£Ò¨2¢Fµq¾QcÔ1£Î˜bL5¦ӍÆLããBc–q‘q±1۸Ęc\jÌ5.3.7®0®4æ󍫌«kŒƵÆuÆõÆBããFc‘q“±Ø¸ÙXbÜb,5n5n3n7î0î4–wˍ»{ŒÆJã^ã>ã~c•ñ€±ÚxÐXc<d¬561537ÖOë
+ÆFãIã)ãiãc“ñ¬±ÙxÎxÞxÁØb¼h¼d¼ll5^1¶¯¯¯ۍ7Œ7·ŒÆÛÆ;Æ»Æ{ÆûÆÆNc—ñ¡ñ‘ñ±±ÛøÄØc|jì5>3öŸ___û¯Æ7ÆAã[ãññ½ñƒqØøÑ8b5~2~6~1~5ŽÇMd&iR&m2&kr&o
+&6ES2eS1US3uÓ0MÓgža61Ï4›šÍÌæf³¥ÙÊlm¶1ýf[³ÙÞì`v4;™Í.fWó,³›™`v7{˜=Í^f¢0ƒ¦eÚf’™lö6SÌ>f_ól³ŸÙß`4SÍ43ÝÌ0Cf¦9Èlf™CÌ¡f¶9ÌÌ1sÍáæ3ÏÌ7Ì‘æ(s´9ÆkŽ3Ç›ÌsÌsÍó̉fØ,4‹Ìb3b–˜¥f™YnN2'›f¥YeFÍjó|³Æ¬5cf9ÅœjN3§›3Ì™ææ…æ,ó"óbs¶y‰9ǼԜk^f^n^a^iÎ3ç›W™W›×˜ÌkÍëÌëÍ…æ
+ææ"ó&s±y³¹Ä¼Å\jÞjÞfÞnÞaÞi.3ï2—›w›÷˜+Ì•æ½æ}æýæ*ósµù ¹Æ|È\k>l>b>j>f>n®3Ÿ0×›̍æ“æSæÓæ3æ&óYs³ùœù¼ù‚¹Å|Ñ|É|ÙÜj¾bn3_5_3_7·›o˜ošo™;Ì·ÍwÌwÍ÷Ì÷Í̝æ.óCó#ócs·ù‰¹ÇüÔÜk~fî3?7¿0¿4¿2÷›_›Ìõæ·æ!ó;ó{óó°ù£yÄ<jþdþlþbþj3ûð‘>ÊGûëã|¼OðaŸè“|²Oñ©>ͧûŸéóùÎð5ñékêkækîkákékåkíkãóûÚúÚùÚû:ø:ú:ù:ûºøºúÎòuó%øºûzøzúzù}_Ðgùl_’/Ù×Û—âëãëë;Û×Ï×ß7À7ЗêKó¥û2|!_¦oo°/Ë7D¨-‰•M¯.‹Tq©•á¢šhŽ—ljaMdJ„
+{—-VE&sáx)¦•×ÕU–TD¦‰E
+uœ^…‹Š"U1\t¢Êf…Ý)‹ãE†38Æ… 0€¡8`Ä+p¨a¢È‰*1"ñ’
+ÅgŒx…8¨‘P¥„Ô0W鉪4¨(ZY†‡ÒFâàFó”5ÔéÁ…áºÌùb³båŶÜ+¸,Ф4ÉŠkR7]È\/ɬ!dù$qH#ŒI
+uihc©&ŸôPZ‰TU„«ŠË‹ØìpQ],ÂVx…”ݸ_E£6;n 
+¯ ³íé
+ç‹Í‰¯ŠÏi<¾ªñøœøøª¸«ÂîÿWMÔÙ0T¨ª”ŠT•r¹ |”ύ+õ
+9·¬®ª4\SWY®‹ÉÑÆOl^\†š¸ye¨i,C^\†šx‘Uëb~#3Ö62cAãÙbg+ˆO‹[¤À]Ò˜»¤#ãKZ_Ò‘ Uh52®UW0#kÊ«J™:÷[y’†uŸ¸‘°ôupjF7’vj£úØFõé
+uv\\×^Ç5lã'ªLE´ª´–««*ï•Ø»”‰P BiAiC™e2”½¡L2Ê4(Ó¡Ì€2ef¼LüÀOÜÀMÜÀMÜÀMÜÀMÜÀMÜÀMÉdrË¢5ULÔýŽ·¥‚Ω€
+Ø©€
+Ø©€
+Ø©€
+Ø©€
+Ø©€bFz˜u
+˜i o`§v`§v`§v`§v`§v`§vèöN{§~:à§~:à§~:à§~:à§~:à§~:à§~:à§~àg ~àg ~àg ~àg ~àg ~àg ~àg ~àg ~ðC€üà‡ ?d³ƒâ§¾Ô+ ÐC€ô ‡ =è!@z& gz& gz& g‚ö™ }&hŸ	ø™)8Õõ$ñC>QåRCñ2‰ûºÜÚŠpmY¼m¨{³zõ‚2Ê ”A(-(m(“ L†²7”)P¦B™e:”P† Œ[#ø‰€Ÿø‰€Ÿø‰€Ÿø‰ÉR~c_]Ûèz€$‰ I"H’’$‚$‰ I $	€$$ ’@’ H I`‰ X" – ~ ð€ ü à ?øAÀ~ðƒ€ü`ïxóŠHmí$h ‚ @‚ A A€ ` ` ` `,0€øà[€o¾øà[€o¾
+ø6àÛ€o¾
+ø6àÛ€o¾
+ø6àÛ€o¾
+ø6àÛ€o~à'~à'~à'~à'~à'~à'~à'~à'~2à'~2à'~2à'~2à'~2à'~2à'~2à'~2à'>„ @€0  a@ € „ @€0  a@ € „)€á@  „ @8€p  á@  „)€Ÿ
+ø©€!A B‚ „	 $@H€  !A B‚ „	©€Ÿ
+øi€aA ‚ „ ,@X€°  aA ‚ „ ,@X€°  aA ‚ „ @€0  a@ € „ @€0  a@ € „€Ö@ë õ Ðz h= ´ Z„`¾Ì‚ù€Ø@ì ò y ˆ< DÈLJkÂSÜ_”.<JukÞ»`¯€à%Z,(m(“ L†²·\Nö~—¾Ñ¨T(Ó L‡2Ê”qNƒ@§A Ó Ðiè4t:
+&‚‰½¡LðDƒ@¢A Ñ hH4$
+’CRÞÿ¦WƒRÀ¤A`Ò 0i˜4L&
+“IƒÀ¤A`Ò 0i˜4L&
+“IƒÀ¤A`Ò`ðƒ€D"
+‘Hƒ@¤A Ò iˆ4D"
+‘Hƒ@¤A Ò iˆ4D"
+‘Hƒ@¤A Ò iˆ4
+(ƒ@”A Ä b1„B!ƒ@DA ¢ Mˆ&D¢	&‡˜X´*Z+—Gj"µåµÞN­¨.{U!\E*"åa)T][^3ŠÁû¬(Ô¤ÜÊr7±Ž?ŒlÔçVFJãôr§ûIXŒ‡E§EbafPØ	ã‚9Œxô8çåà1eNv™¡áêê0›®,,“ÃêÈœ:rL9ÃË©¼²(“_^Z¦
+ÂuHC
+/+§Ò¿ÃkË¥¬F’¨Ð¡þ‡O@Š4V;R¯vy½Ú¾º“‡Æ•òÆÓ…®R¥®RLq¤"æ`.z†«’û2æ©äNÆLöTªðTŠÛ -¬ª#§•sѸ^TMY”­u•Jd¼‚Š9º>UíèUäüu™¨kp©±­ÕSÄ”¢W«®ñjEO¬V\ŒŒ^¬'f"V‚=dÌ°h;‘õÆÕ¿ƒýù`òÁ äƒAȃ!q8‚@A Ž Gˆ#Äâq8‚@A Ž d„Aȃ@$A ’ I2 d„Aȃh‚!#BF„Œ0a0ð3?ð3?ð3?3ŽoAhAhAhAhuY@]P—ÔeAhAhiY at Z–¤eiY at Z–¤eiY at Z–¤eiY at Z–¤eiY at Z–¤eiY at Z–¤eAægAæg_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|e_YÀWð•|eAâgoYÀ[𖉟‰Ÿ‰Ÿ|fŸYøYøYøYÀsðœ<gÏYÀsðœ<gAâgAâgAâgAâgAâgAâgAâgAâgAâgAâgAâgAâgAâgAâgAâgAâgAâgßZÀ·$~$~$~$~ð±|l[ÀÇ$~$~$~$~$~$~$~$~$~$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|$|Ü[plAhAhAhAhAhAhAhAhAhAhAhç[ Z Z ZÀûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àûð¾¼oï[Àû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¡
+|hëÛA.àCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÐþ³ÿlà?øÏþ³ÿlà?xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³áÂÓÞ³÷lðç6øsü¹
+þÜnƒ?·ÁŸÛàÏmðç6øs;­~^Ðü¹
+þÜnƒ?·ÁŸÛàÏmðç6øsü·
+þÛÿkƒÿµÁÿÚàmð¿6ø_ü¯Q?äÿkƒÿµÁÿÚàmð¿6ø_ü¯
+þ×ÿkƒÿµÁÿÚàmð¿6ø_ü¯
+þ×ÿkƒÿµÁ¯ÚàWmð«6øUüjø§$È+’ _H‚¼ 	ò$Èþ_{ï'WUçûîªU»»«_éN:	IH'!†ð2d­ª½×*ÒU½×*""t’iIÒ1é¹ÂȼÔqtÔQ‘Á‘QDãÁgqDEçø#zæ8¹8£m(ÎÚµ¾l9sï9çsîùÜû¹ŸfÓõ¯ªÞµkï½ê÷[ë·{ÿ’2H™¤ÌRæ)ó”ù@Ê| e>2H™¤ÌRæ)ó”ù@
+ÿ¥ð_
+ÿ¥ð_
+ÿ¥ð_
+ÿ¥ð_
+ÿ¥ð_
+¯¥ðZ
+¯¥ðZ
+¯¥ðZ
+¯¥ðZ
+¯¥ðZZŸÛ.û¯¥ðZ
+¯¥ðZ
+¯¥ðZ
+¯¥ðZ
+¯¥ðZ
+¥ŒÏSx*…§Rx*…§Rx*…§Rx*…§Rx*Mç¶K»á©žJá©žJá¡žIᙞIᙞIᙞIᙞIᙞIᙞIᙞI§ŒSÆÃ)ãß”ñkÊx5eœš2.Mo¦ðN
+¯¤ðF
+/¤Œ×RÆi)ßû”ïSÊ÷)åû”ò}Jç¾Onn}¶Ç8%eœ’2NÑ𔆧4<¥á)͸S3îÔ´OÃ[šq§ŸÛ^“Ú¢ŽS3ª¥†ýÕðž†÷4¼§á=
+ïiö_Ã{ÞÓðž†÷4¼§á=
+ïixOÃ{ÞÓðž†÷4¼§á=
+ïixOÃ{ÞÓŒ/5ãKÍøR3¾ÔŒ/5çMsÞ4çMsÞ4çMsÞ4çIϝ'Æ“–q‘¥ÿZú¯¥ßZú©e>hÑC˼Ï2³ô[Ë<Î2³Ìß,ó7ËüÍ2³¹íX*í¡ß[æm–y›e¾f™§Yæe–y™e>f™Y¾ý¶è·E¿-úmÑoË÷È¢ßý¶è·E¿-ºmÑm‹n[ú¿¥ÿ[ú¿¥ÿ[ú¿¥ß[ú»¥¿[ú»¥¿[ú»¥¿[ú·¥[ú·¥[ú·¥[ú·¥[ú·¥[ú³
+ýYnóf_%UQkÔ:5¡¦TM5ÔµImQÇ©sx–êBmß¿~üø-ð[à·Àoß¿~üø-ð[à·ÀüqðÇÁüŒõ3ÖÏX?cýŒõ³¹õioF{3Ú›ÑÞŒöf´7£½sç'£½íµà[ð-ø|¾ß‚oÁ·à[ð-ø|¾ß‚oÁwà;ðø|¾߁ïÀwà;ðøü0Ï•ø×ÿZâ_Kük‰-ñ¯%þµÄ·–øÖßZâ[K|k‰o-ñ­%¾µÄ·–øÖßZâ[K|k‰o-ñ­%¾µÄ·–øÖßZâWKüj‰_-ñ«%~µÄ¯–øÕ¿ZâWKüj‰_-ñ«%~µÄ¯–øÕ¿ZâWKüj‰_-ñ«%~µÄ¯–øÕ¿ZâWK|j‰O-ñ©%>µÄ§–øÔŸZâSK|j‰O-ñ©%>µÄ§–øÔŸZâSK|j‰O-ñ©%>µÄŸ–øÓZâOKüi‰?-ñ§%¾´Ä—–øÒ_ZâKK|i‰/-ñ¥%¾´Ä—–øÒ_ZâKK|i‰/-ñ¥%¾´Ä—–øÒ_ZâKK|i‰/-ñ¥%¾´Ä—–øÒ_ZâKK|i‰/-ñ¥%¾´Ä—–øÒ_ZâKK|i‰/-ñ¥%¾´Ä—–øÒ_ZâKK|i‰/-ñ¥%¾´Ä—–øÒ¾‚oÀ7àð
+ø|¾ß€ß ¿~üø
+ðà7Ào€ß ¿~üø
+ðà7Ào€ÎâOKüi‰?-ñ§%þ´ÄŸ–øÓZâOKüi‰?-ñ§%þ´ÄŸ–øÓZâOKüi‰?-ñ§%þ´ÄŸ–øÓZâOKüi‰?-ñ§%þ´Ä–øÑ?ZâGKüh‰-ñ£%~´Ä–øÑ?ZâGKüh‰-ñ£%~´Ä–øÑ?ZâGKüh‰-ñ£%~´Ä–øÑ?ZâGKüh‰-ñ£%~´Ä–øÑ?ZâGKüh‰-ñ£%~´Ä–øÑ?ZâCK|h‰-ñ¡%>´Ä‡–øÐZâCK|h‰-ñ¡%>´Ä‡–øÐZÖçôفïÀ>´Ä‡–øÐZâCK|h‰-ñ¡%>´ÄG–øÈYâ#ûÊçÑáNäÜç
+µAmR[ÔqjFµTڏ'èq‚'èq‚'èq‚'èq‚'èq‚'èq‚'èq‚'èq‚ã—Kür‰_.ñË%~¹Ä/—øå¿\â—Kür‰_.ñË%~¹Ä/—øäŸ\â“K|r‰O.ñÉ%>¹Ä'—øäŸ\â“K|r‰O.ñÉ%>¹Ä'—øä\âKüq‰?.ñÇ}]Æ/—øå¿\â—Kür‰_.ñËe‚.ã›K|s‰o.ñÍ%¾¹Ä7—øæß\â›K|s‰ß-ñ»%~·Äï–øÝ¿[âwKün‰ß-ñ»%~·Äï–øÝ¿[âwKün‰ß-ñ»%¾¶¯l½LÐ˽LÐ˽LÐ˽LÐ˽LÐ˽LйKйKйKšsŸã¸ s	:— s	:— s	:— s	:‡/-ñ¡%¾§Ä÷”ø?P¦Œ‹RÆE)㢔q~¡¯	•íqüñ%> Ä”ø€PâJ|@_
+µAmR[ÔqjF¥ÝœŸ”óƒŸ(ñ}Ÿóƒ¿è+øŒgð}ŸñLÊx&e<“Áç|žÁç|žÁç|žÁç|ž…늾6¨Mj‹:‡“Q-5ìg†dèA†dèA†dè@†dè@†dè@†dè@†dè@†dè@†dè@†dð~ïgð~ïgð~ïgð~ïgð~ßgð}ßgð}ßgð}ßgð}ßgð}ßgð}ßgð}V›Ãe?áýÞÏàýÞÏàýÞÏø>e|Ÿ2x?ƒ÷3x?ƒ÷3x?ƒ÷3x?ƒ÷3x?c>–ÁÿüŸÁÿüŸÁÿüŸÁÿüŸÁÿüŸÁû¼ŸÁû¼ŸÁû¼ŸÁû¼ŸÁû¼ŸÁû¼ŸÁû¼ŸÁïüžÁç<ñýÊæ¾_Ì2æó…ÍàÑÍàÑÍàÑÍàÑÍàÑÍàÑÍàÑÍàÑŒùBÆ|!c¾1_Ș/dÌ2æó…ŒùBÆ|!c¾1_Ș/dÌ2|¹_.c~1?ȘdÌ2æóOYxÊÂSž²ð”…§,<eá)OٍsÛkR[ÔqjFµÔÐ^OYxÊÂSž²ð”eÜjá+_YøÊÂW¾²ð•…¯,|eá+_YøÊÂW¾²ð•eÜj·ZøËÂ_þ²ð—…¿,üeá/YøË2nµð˜…Ç,<fá1YxÌÂc³ð˜…Ç,<fá1YxÌÂc\ϐ³ð˜…Ç,<fá1YxÌÂc³ð˜…Ç,<fá1YxÌÂc³ð˜…Ç,<fá1YxÌÂc³ð˜…Ç,<fÇZøÌÂg>³ð™…Ï,|fá3ŸYøÌÂg>³ð™…Ï,|fñ—,þ’Å_²Œ£,ã(Ë8Ê2Ž²Œ£,ã(Ë8Ê2Ž²Œ£,|iáKËxØ2¶ð§e<l[ÆÃV»®WuîÜé:Ê«Âýò;¥úª¹?_¯œ{>ÇxŒë]’ë]¾‚ÏxÌ2³ŒÇ¸æ+øŒÇ,ã1ËxÌ2³ŒÇ¸n&¹n&¹n&¹næ+øŒÇ¸~&¹~&-zÀu2Éu2Éu2_Ù>z`Ñ®›ùÊöÑ®£I®£ùÊþ¡\O“\O“\O“\O“\O“\O“\O“\O“\O“\O“\O“\Oó|ô€ëj’ëj¾‚pMrMrMrMrÍWðÑ‹^pÝMÚ9½ÀO⺛些些¯àã'qNrNrNrNrNrNrNrNrNrÎWðñ“¸.'ç®ËYæ1?Éâ'Yæ5?Éâ'Yü$‹Ÿdñ“,~’ÅO²øI?ÉrÝÇâ+Y|%‹¯dñ•,¾’u²ë’ðE»¦Sxt\%‹«dq•,®’ÅUr¨µC­jíPk‡Z;ÔÚ¡Öµv¨µÛ8·½&µE§fTK
+{ãPk‡Z;ÔÚ¡Öµv¨µCêìPg‡:;ÔÙ¡Î5v¨±CjìPc‡;ÔØ¡Æ5v¨±CjìPc§æðØ?ÔØ¡Æ5v¨±CjìPc‡;ÔØ¡Æ5v¨±CjìPc‡;ÔØ¡Æ5v¨±CjìPc‡ú:Ôס¾õu¨¯C}jëP[‡Ú:ÔÖ¡¶µu¨­Cm*ëPW—Ìm—ö£¦5u¨©CMjêPS‡š:ÔÔ¡¦5u¨©CMjêPS‡š:ÔÔ¡¦5u¨©CMjêPS‡š:ÔÔ¡¦5u¨©CMjêPS‡›áp3n†ÃÍp¸ŽYŒC=êéPO‡z:ÔÓ¡žõtfýE=êéPO‡z:ÔÓ¡žõt¨§C=êéPO‡z:ÔÓ1Ûr̶³-ÇlË¡®uu¨«C]êêPW‡º:ÔÕ¡®uu¨«C]êêPW‡º:ÔÕ¡®uu¨«C]êêPU‡ª:TÕ¡ªUu¨ªCUªêPU‡ª:TÕ¡ªUu¨ªCUjêPS‡š:ÔÔ¡¦5u¨©CMjêPS‡š:ÔÔ¡¦5u¨§C=êéPO‡z:ÔÓ¡šÕt¨¦C5ªéPM‡j:TÓ¡šÕt¨¦C5ªéPM‡j:TÓ¡šÕt¨¦ãê‹ãê‹C'úèÐG‡>º9}䪋㪋㪋㪋W]ÔÆ £¾Jª¢Ö¨ujBM©šj¨
+j“Ú¢ŽS3ê®U‚/e+ì›Ü>±'o)ӁÎ?¾Û´ÿõÖ]¯=0ÿsíWû·&·³›SµÁé=yÔÛäž]“þCƒ3§/Y‹Æ+«h¬¢±ŠÆ*«ØzMvížÚÓ	›ÌÿÝ{ÞåÕhoCT¥Æ!ªµª“¯Û¶kb·ßÞ§N
+œ:¥ÎI©sR꜔:Huê ÕAªs2êì_ý«³upëàÖÁMÀMÀMÀMÀMØÓüüüüüüüüüüüüüüü”í¥l/e{)ÛKÙ^Êö4ÛÓlOÓ~Mû5í×´_Ó~Mû5x<
+žOƒ§Á3àðí7´ß€oÀ7àð
+ø|¾߀oÀ7à7Àm€Û ·nÜæƁmÓ»¦÷ìöß‘™‰}×ð®ªìšÚ7ÁšÖL»öNî÷kñ’–5iY³YÙ>½çÊŠ=°ošwhS“659&-ÚÖ¢m-ÚÖ¢m-ÚÖ8cýŒõ3ŽQÆ1Ê8Ç"³’™Ü8÷ZQkÔ:5¡¦TM5ÔµE§fTK
+û'åÆžïØ7qṌ}¼°XI	°Ô}'§<‡Íì›Ø¿Ÿ÷ ³_[=üöƳþ½û&÷oÛ7µ7ÿWÒy“¦(â(Z h¢Š@ƒR±ë
+thQB‹Z”*«NÚ=1íJˆQÖ@®\ãÔhA­OìšÜ»“WàC‚”5ðkà×À¯]JèRB—º”Ð¥„.%t)ëì?´)¡M	mJhSB›º”uÛ“QvNíÛ^õ2Òy‰‚%(a@	JP&ͪßÄäÔ•;gvöÏìÜ7Éóý};¦®ž{Þ¿ßkÙ^ð9v
+F”0¢„%Œ(Sv-¥=)íIiOJ{RÚƒJT •0¨„A%*aP©Á×àèF•0ª„Q%Œ*aT	£JU¨F•0ª„Q	£T„Q*Â(a”¾Ö«ûöMÜ5¹c¦»óìÀÞÞNÝ—ÎðËíÓ÷„g[ýI¬²Úv¾=
+šÜ É
+šÜ É
+šÜ É
+šÜ É
+šÜ ÉMšÜ¤ÉMšÜ¤ÉMLK–¤¯ºÿH˶îŸäMѤMѤ°®„u%¬+a]B%¡’ŠPI_ëƒÛ<ÚÔÄ•~ åÙ…cÑ¢--ŽE‹cÑ¢-šÑ¢-šÑ¢-šÑ¢ã4cœfŒÓŒqš1αçXŒƒ?þ8øãàƒ?þ8øãàƒ?î±ô#­¼gôν8°w`îi§Y+ï"G^ä½$l'£]ˆ™“ŠÌIEæ¤"sR‘9©ÈœTdN*2'™“ŠÌI%çÄËr\,ÇÅr\,ø|¾ß‚oÁ·à[ð-ø|¾߁ïÀwà;ðø|¾߁ïÀwà;ðøÌ6ü´£êk>pŸC`?rï›|ÝÔ~?@Ÿ™:ò^½gr÷Þ™küð£çÊ}yžÌž™îÉ]“»óÐڐ
+´›`G¿r³gÿmž9'æÞ§fÔ€M¶¤"KR‘%©È’ô5íŸðíØ7µÿ*¯p;yÓPÔuÜëðôÞé}¹
+OìêõOvæñ¼»â‰=Wî
+ß^Â#á‘ŠðHEx¤"<Ò×´w×ô•SÛ&ò\æ*O§÷õOí™Éç8ÛrØ¯‰à©T„G*Â#á‘ŠðHEx¤¯µêÌNÿ…ßá'R¼Cd…$“©HT¤Gª<=rÿÔî©]ûxMdÒ#é‘ŠôHEz¤"=Ò×zÕO ®ÜwàÈyD”ɏTäF*r#¹‘ŠÜHEn¤"7R‘©ÈTäF*r#¹‘ŠÜHEn¤"7R‘©ÈTäF*r#¹‘ŠÜHEn¤"7ÒW×7ùÚSWûqΞm]ÔšÌHEF¤"#R‘©ÈˆTdD*2"‘ŠŒHEF¤"#R‘©ÈˆTdD*2"‘ŠŒHEF¤"#R‘©ÈˆTdD*2"‘ŠŒHEF¤"#R‘é«ì||_=à•kfpîEþ09Sõ_ÙðÖNú}Ü5ù:Öž{ÖfZÆLˆôHEz¤"=R‘©HT¤G*Ò#é‘ŠôHEz¤¯õÞ<!ۏIwØÏ[é`xk÷]3S{w]ÃÛ´„á 9’ŠIEŽ¤"GR‘#©È‘TäH*r$9’ŠI_ë~Ç÷NæìŽ|¯&©H“T¤I*Ò$i’Š4IEš¤"MR‘&©HT¤G*Ò#é‘ŠôHEz¤"=R‘©HT¤G*Ò#é‘ŠôHEz¤"=R‘©HT¤Gª<=rûôÌQžEøI‘T¤H*R$)’ŠIEŠ¤"R‘é+ŸG˜¬f…0«lîó´a&5R‘©HT¤F*R#}å¸!̤F*R#©‘¾‚0“"©H‘T¤Hú
+>¬f…0“2é+ø³B˜¬f…0+„Y!Ì
+aV³B˜Uøãk/©2Þ9}€Qh94©•ŠÔJEj¥"µÒWCmP›ÔuœšQ-Õ
+웼ÝólÞ
+—Ö)”ŠJEê¤"uR‘:é«ëÍӏvÍì=òt+[Cs‰™TÄL*b&1“ŠXIE¬¤Dö.%æPs¨ˆ5ô‚ÉvðZjðC
+~¨Á5ø¡?Ôà‡üPƒjðCéBéB
+f¨Á5˜¡3Ô`†ÌPƒj0C
+f¨ÏUÚA¯Ñ³¹Lq™âö#ÅíGŠÛ·)n?RÜ~¤¸ýHqû‘âö#Õ¹ýhïÖ]ÓÛ®ê¼æϏ~¬ò??öóŸÂïjJÕqñ·
+j“ÚêÞµ£øûŒj©®{ßLøý®™ý;'¶OƝÇîíW…ÚY‹sÈŸ&+þ4ÙWM5TÐÑ„„sžpÎÎyÂ9O®ºcÊÏH¶o~]×9~hJçâoœã¬øgÅß8+þÆYñ7Ί¿qöµÑuŽ4I½Ö)Iî¡ç›ß燌¬@8ëü‘³"œDåá$3ù,ðÀ^^Ó ôpE8‰"œDN¢òp’Îç÷çõ¡óšÉ5á$ŠpE8‰"œDN¢'Qy8Içó»vð|ô°_ÁotÑæ%yHÆmçÀ`Cq¢ˆ8QDœ("N'ŠˆEĉ¯º:µçê­ü±ÉŸ!QbN1'Š˜ÅŸ“+bN1'Š?/WÄœ(bN1'¾&½~µ'€ò;Èt¢H:ñ•& 2	"“ 2	"C"Š"E‘ˆ¢HDQ$¢øÊa at dD&AdD&AdD&AdD&AdD&EdR¬Ú«6EfRd&EfRd&EfRd&EfRd&EfHrñ5£Z*øÌS&űM™¦ÌI‚ñ|	>‚”"H)n-‰1¾‚@¥I2~V >ÓCe‰2ŠDE¢Œ"QF‘(£H”Q$Ê(e‰2ŠDE¢Œ"QF‘(£H”Q$Ê(e‰2ŠDE¢Œ"QF‘(£H”ñµQÝïç‚“;&¶Mú¹êÕG^ˆýö°
+M`~˜Ö\׎ÉÝ|yÒº¬^ ]KðŒâÅ
+ŠàEðŒ"xF<£žQÏ(‚gÁ3ŠàEðŒ"xF<£žQÏø
+>3Ä”bÊ‘`_Ág†˜2CL™!¦‰‹÷ïÓâk|U•m»låE=Þ99áÉtûÔÄ$×(’k|môí>°Ÿ±Òä`áùÜ•EBl!6Š›V7­(nZQÜ´¢¸iEqÓŠâ¦ÅM+Š›V|¥)Ì	ÁQ„à(Bp!8ŠEŽ"Gqó‹âæÅÍ/Š›_7¿(n~QÜü¢¸ùEqó‹âæÅÍ/Š›_7¿(n~QÜü¢¸ùEqó‹âæÅÍ/Š›_7¿(n~QÜü¢¸ùEqó‹âæÅÍ/Š›_7¿ø	=8ŒîR„>Eè	éñ„>EèS„žð_Áat—6çpØOtž•¢ó)>pÊ<PC½zãÜëµNM©šj¨
+ê85£ZjÀÕP¬†b5«¡X
+Åj(VC±ŠÕP¬†b5«¡X
+Åj(VC±ŠÕP¬†b5«¡X
+Åj(VC±ŠÕP«†Z5Ôª¡V
+µj¨UC­jÕP«†Z5Ôª¡V
+µj¨UC­jÕønßMs)Ls)Lë^ÕønßMã»i|7
+·j¸UínÕp«†[5ܪáV
+·j8UÃ¥.Õp©†K5œ©áJ
+Wj¸RÕ®Ôp¥†+5쨙ehfšY†f–¡™eh(RC‘GMã¨i5
+/jxQ§sx켨áE
+/jxQË^Ôð¢†5¼¨áE
+/jxQË^Ôð¢†5¼¨áE
+/jxQË^Ôð¢†5¼¨áE
+/jxQË^Ôð¢†5¼¨áE
+/jxQËþÓðŸ†ÿ4ü§á?ÍH3ÒÌz5¼¨áE
+/jxQË^Ôð¢†5¼¨áE
+/jxQË^Ôð¢†5|¨çøyfÞ£™÷hæ=šyfÞ£ñÅ4¾˜ÆÓøbšyfÞCÈ—"¼KÞå+Ûc(¯Êê¥íR„v)B»¡]ŠÐ.Eh—¯lŸ¡:!^Š/Eˆ—¯sÛ§½Õ5CuÍPÝ0T7è…A/zaÐÃPÝ Ý0è†A7CuÃPÝ #1èˆAG:bЃŽtÄ #1èˆAG:bЃŽtÄ #1èˆAG:bЃŽtÄ #1èˆAGCuƒžôÄ '=1è‰AOzbЃžôÄ '=1è‰AOzbЃžôÄ '=1è‰AOzbЃžôÄ '=1è‰AOzbЃžôÄ '†±ºAWcuƒ¾ôÅ /}1ŒÕ
+cuÃXÝ ;†±ºAúcЃþôÇ ?ý1üý…Áõ2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#Ã8Ý0N7ŒÓ
+:eÐ)ƒNtÊ S2è”A§:eÐ)ƒNtÊ S2è”A§:eÐ)ƒNtÊ S2è”A§ãwƒ^ôÊ W½2è•A¯zeÐ+ƒ^ôÊ W½2è•A¯>Á§3øtŸÎpÇðŸÎàÓ|:ƒOg¸žc¸žc¸žc0ì†Á•6¸ÒÇÎàØ;ƒcgpìŽÁ±3\2\2\2¸u·ÎàÖÜ:ƒ[gpëºmpënÁ­3¸u×Ü ï}7è»Aß
+únÐwƒUg°êVÁª3è¿Aÿ
+úoЃþôß ÿý7è¿Aÿ
+úoЃþôß ÿýo ç
+ô¼~7ÐïúÐ@ðB^hp>œÏç³Áùlp>œÏç³Áùlpœ´»A»›ŒKšŒKšŒKšŒ'šŒ'šŒ'šŒ'šŒ'šŒ'šŒ'šŒ'šŒ'šŒ'šŒ'šŒ'šŒ'šŒ'šŒ'šŒ'šŒ'šèw^m«Mxµ	¯6áÕ&¼Úäø59~Mxµ	¯6áÕ&¼Ú„W›ðj^m«Mxµ	¯6áÕ&¼Ú„W›ðj^m«Mxµ	¯6áÕ&¼Ú„W›ðj^m«Mxµ	¯6áÕ&¼Ú„ïšð]¾kÂwMø®	ß5á»&|ׄïšð]¾kÂwMø®IÿoҏZôŸý§Eÿi1®m1®m1®mñ=hñ=h1®m1®mmœÛn‹:Nͨ–ö³E?lÑ[ôÃý°E?lÑ[ôÃý°E?lÑ[ôÃãÕãÕãÕãÕqÆ3ãŒgÆÏŒ§s¿¯SjJÕTCmP›Ô5ì÷8ã’qÆ%ãŒKÆ—Z¢-Q„–(BK¡%ŠÐEh‰"´DZ¢-Q„–(BK¡%ŠÐEh‰"´DZ¢-Q„–(BK¡%ŠÐEh‰"´DZ¢-Q„–(BK¡%ŠÐEh‰"´DZ¢-Q„–(BK¡%ŠÐEh‰"´DZ¢-Q„–(BK|Ÿq-á%ŠðEx‰"¼D^¢/Q„—(ÂK|í|®ž…ñ€¯’ª¨5jšPSª¦jƒÚ¤¶¨ãÔŒj©àgàgàgàgàgàgàgàgàgàgàgàgàgàgàgàgà[ð-ø|¾ß‚oÁ·à[ð-ø|¾ß‚oÁ·à;ðø|¾߁ïÀwà;ðø|¾߁ïÀãÇ?ðíøW’]γƒOüéàO:øÓÁo~sð›ƒßüækFµÔ€¿9øÍÁo~ó•í*¶«Ø®b»a>îkƒÚ¤¶¨ãTðø
+üø5ðkà×À¯_¿~
+ܸ5pkàÖÀ­W§Ní×Ù~íÖÙ¯:Û¯³ý:Û¯³ý:Û¯³_õ9ö+a?ppö#////////~ÓJÙ¿”ýKÁOÁOÁOÁOÁOÁOÁOÁOÁOÁOÁOÁOÁOÁ×àkð5ø|
+¾_ƒ¯Á×àkð5ø|
+¾_ƒ¯Á7àð
+Ÿ7|ÞðyÃç
+Ÿ7|¾Áç|¾Aû´¿Aû´¿Áç|>£Ý¸–ý±¼ïÀwà;>–äKr„%9Â’aIŽ°$GX’#,É–äKr„%9Â’aIŽ°$GX’#,ÉVä+r„9Ša2Ž0G˜Œ#LÆ&ã‘q„È8Bd!2ŽGˆŒ#DÆ"ã‘ñ•vq^ùÇÿ8‚¯àp
+ÇÅ€oÀ7àðé„È8Bd!2ŽGˆŒ#DÆ"ã‘q„È8Bd!2ŽGˆŒ#DÆ"ã‘q„È8þÇ?ÂàøGÿƒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆWðø|¾߁ïÀwà;ðø|xуÜnï¸ÝÞq»½ãv{_³®yDãÆPd(*”Z(õP’PÒPt(&”F(ÍPZ¡Œ‡‚
+ÅuŠx2àÉ€'žx2àÉ€'žx2àÉ€'žx2àÉ€'ž
+x*à©€§ž
+x*à©€§ž
+x*à©€§ž
+x*à©€§^-àÕ^-àÕ^-àÕ^-àÕ^-àÕ^-àÕ^-àÕ^-àÕ^=àÕ^=àÕ^=àÕ^=àÕ^=àÕ^=àÕ^=àÕ^=àÕ^ð’€—¼$à%/	xI/	;–„KÂ%a’°GIØ£$ìJv%	»’„]I®$a’ÐÜ$47	ÍMBs“:ë47	ÍMB;“ÐÎ$´3	íLhg¢C	ÍMBs“ ” $ %(	@I JPŸ¼4à¥/
+xiÀK^ðÒ€—¼4àeásYø\>—…ÏeásYø\>—ñ¹ÐÎ,´3íÌB;mh§
+í´¡6´Ó<ðlÀ³Ï<ðlÀ³Ï<ðlÀ³Ï<ð\ÀsÏ<ð\ÀsÏ<ð\ÀsϼÀ`‰x®ƒ—>KŸ¥ÏÒÀgià³4ðYø,
+|¦C/Ð	¯L(Pš¡´B%ņÒAסèÐtè:ôz½@‡^ C/СèÐtè:ô¼4à¥/
+x:à逧žx:à逧žx:à逧žx:à逧žx&à™€gž	x&à™€gž	x&à™€gž	x&à™€gž	x¡géгtèY:ô,z–=K‡ž¥CÏÒ¡gi—T·ï:ofÛľé==‰q3OOŒ/œÚµ}2>;ÏyëŸÚ·íÀîü^¯x<_7nå.ÕlzfbÛ¶É=3ýçØsåľ»wM˜é˦lÝ5ÙIˆëØ7±ujÛÛ§óv;O•¾îE-1X|qÅÄ`qÅ+&æV­w>w`OçßõÛ°cjÏÄ‘S{¦fŽ¼Ø=¹}*¼hÊÂjþÅÑÕü‹£«¥®¸5WÜš+¬Öj~ã_ä¿é£mû¦ö\~¡Çó/Ž~Ä¿8º1WËŠ«e…ÕLqLqLqŒ*®¦Š«©âjIqµ¤¸ZRÜÑâñhG+¹tåÄŽ+¶NìëüÎX6l›Ø?Ùm÷\¹ab×Ì‚üM•š
+þ¬íšÜ¿?¼nds¯û:ÚhüOçõü5Ïuáý|Yx¾±°¾,<Ÿ{¿ö¼ÏŽÞŸÛþxŽQxn;êyÏ7ž×xž>ï¹,<ßXxÞ(|vî¹Ìq{·î›èÜì1=oÊV8ºpz–³£Î‹
+»¦÷\¹fbßÜ(žÂVñ¶Š§p¼ø/~AÆ‹_Fè7ñ®£ÈÀpþ¢®Í†ÝÓ{¦ý7yïNÞi}gÁT~ÛôäUÅSœ'r<ïu£ø:Ïþí×ã­¹×bÛöéøÅySÂMÿ¶úþÔ9ni"óœ´ð<œSÿ^þºð¾-<w¬cëÔëäÏ]g¯õxóèñÊ_9Dù‹#Oû¶VkWkW/®6^\m¼¸ZV\-+®–W³ÅÕlq5[\ÍWsÅÕ
+_am,¬æ_]Í¿(¬&‹«Éâj²¸š*®¦Š«©âjµâjµâjµâjõâjõâjõâjIqµ¤¸ZR\--®–WK‹«éâjº¸š.®fŠ«™âj¦¸Z£¸Z£¸Z£¸Z±¿eÅþ–û[VìoY±¿eÅþ–û[VìoY±¿eÅþ–û[VìoY±¿eÅþ–û[VìoY±¿eÅþf‹ýÍû›-ö7[ìo¶Øßl±¿Ùb³Åþf‹ýÍû›-ö7[ìo¶Øßl±¿Ùb³Åþf‹ýÍû›-ö7[ìo¶Øßl±¿Ùb³¡¿U/ðƒ‰‰­ÓWw¸/¿å'§DžËÂsUx^+<¯ž'…çiá¹>Âøum7lŸšØøÝLlØšír>æÖÑw:¶Òl8È支/µ#QZ
+ûÇ”ÖD§EqéѬµ6Zâã½ã:ëåÏEiuç÷«¢üãh´Ý?®ìüöØh™\úÇåw–ué<.í<.é<..Dƒ~«‹;¯ò碴¨ó|açqAi0ºÎÿ~AçUþ\”JýÑ[ý{÷¢‡£J©¿Ô]âßË#üãõþ½¾Rot¼/ÿðcþ½üQªv>ÙÓyìŽú;ù'ºîy¹¨ÔÕÙ¯¸óXé¬%:{Tî¼Sê<FcÏ]'ž{‘h·Åáßœn‹ßœ"fÛâ׿:;þõuâWg‹›ÿÚ¿l‹gÚâÿ|@üK[üs[ü¢-~>*žn‹§õÆOµÅ¡^qh¬òO?ëÿI‰ŸõŠÿ2+þñKâl‹ÿ<+~:+~â_ü¤-žl‹·Åj‹h‹µÅÛâïgžLüƒíâûLjïÝ2o»øîwÖÅߝßY'þã××ÅÿqVüÝ·Gâ¿["¾ý­¡øÛ#â[Câ‰oöÅO¬ßìßðk|cV|ÝoÿëëÄãïî_+¾ö·#ñ׎ûÕ…ñߎˆ¯.ù_?¶R|eD<úåâGÛâË_Úùñåë+_{îoÖÅ_Ú,¾4Vù›uâ¯Ûâ‹ÛÅ#ïŠi‹/+þª->ßÿåiñóâ/?¾"þËÓÄCŸ[?¤ÄçŽ?·\<øÀ‚øÁañÀýýñÄýýâ³ì³mñ™¶øôbñ©…â?´Å}mqo[ܳT|r™¸{‰ø¿¿˜Ÿðå³âã~ý¯wùr×uâcmqçñâ£mñ‘¶ø󶸣->Ü+no‹Ý6¨-n·UnõêÖYq‹ÿÈ-£âf_nžô;ÿÁcÅÚâýï{ ~[¼ï¦Íñû﻾rÓÛ×Å7m7Uþ¬-nô½ãƶxïqƒÿà
+£cω÷ø¾gµxw¿x—ë]çŠ?õåOÛâþ8¼s‰xǐxû:ñ'mñ¶¶xk[üq[¼¥-þ¨-Þü¦uñ›ÛâMëÄÛâÛâ”øýÄïµÅï¶ÅõËÄzÅï´Åumqm[¼~Vü³âš¶8xõñÁ¶¸úq`fE|`V̬ûgžëÄkÛbïô)ñô)bϬØ=+vÍŠ«Úâ5m1Õ;·õÇ;•¸²-v(1¹½7žl‹í½bûXeÛÖÞx[¿ØÚ+&¶,Ž'n[JÃñ–ÅâŠ^qy[ln‹ËüëËÚâÒW¯ˆ/m‹WûW¯^!.i‹‹gÅ«Úâ"ÿz칋Úâ•mqá¨xň¸àåËâfÅËý/^¾Lœÿ²eñù³âe/Ž_¶L¼tX¼dTœwîH|Þbqî¦áøܱéŃñ¦añâAqά8ۍÄg/nDØY‘ÆÙ1>(ZÍuqkV4ý6›ëÄØYⱶ8ëEƒñYÄ‹Å™gÄg.gˆÓ·‹ÓÚ¢1"L[èE"M–Çé:‘ÔGâd¹H®Ô{âúˆ¨__©©þ¸6"jcÕ/äÆ;bÙýö7Þ!N퉞rZüÂYqÊâuñ)§‰“·‹“¶‹Ûâ„ÅbýÒáxý¨8~µX7*^°Ö€“_0*֋㢁ø¸Y±fX3VY="VõŠÑQ±òØeñÊuâØ‹âc—‰c?ã9㝕bù²sãå׉etٹ☶X:,–x´%³b±oñ:1²],ÛbØ¿n‹¡íbÁàP¼`‘XðpepH^_ð¿˜ýJôù]ë["ú®¯ôˆÞ±Jµ-zÚ¢»-ºâÞ¸«-â^U*³Bleÿ©rÛ³×@\Ñ€(}¦´ýßV:ùÿÿEÿo7àã+£¨íhßPÙ߉¨;Zõ —¬ã£(ê*ÿ©ROüGåJtê#O’ÑЇž8´qÑðšáuk†×ì¨D‡÷‹‡Ò¾¡{ðWÿ²¯ëDÿ™¨}Ýo°Qú}¿­áOG){u[T:ì?~ªÿ¬ÿÜ×K;Û7–~¿}Ç}[UVÅ¿ˆVFk¢sÆÖ¯\—+]ËDozç‚÷ôߺèm£¼º+®––/‹ªå%VEåÑÒqCOœqH=ñÄ¡…Æ°ÿÉ·üÌág
+=5Üh,ml,­IêéY¥•’úñkëê~Q©¦*‹Gº¼ê—Ǿ	å/¶ßÛzÍX#ÙrÑËÜqÍ—6?SŠ^zùXvRû½¥)ÿó+yÁ¶žV¿lƒ{Ùx«tÚI'üÍ_n}ß%ûÂϷߟ¯ýÑiÄߊz¢¥Ñ†±ÅÑÃÕ·•^ÒS^ÒÅ/Ú-©Šcü>>ä[Dm¼çüe¥ÒæÒp-¿ùøµ¥5«+K—,\<RîX*Ÿù–C¿þÕSÏþ²tCéÂÒKNíØ1õºöÝ~yMåžÃ¯ýÙÿþKk'f&Û¿úó¶ÿmrf"?Ö¾•¯øvT£“dž+w=T~8z[O\ê~lÕë[ žxÄ£?“Ãj¨ïü¾½}¢´9?ay°²àÙ}å+Ÿý³öâoµÐþYûϾÉowÇs?Žg;çåܱuË–/éªFKÄÀÐòÏ»äbèÕ÷‹]±Lö×¢S½°ëäQõÌ“‡=ØÐ#OúSñ´_¾èONøã=W¬ò»¾®«²vu4<­Q•¥ÃJk+/Yè‡^;¼&ž}GûÑ·ÿ¸}^éÁÒァ4|ÍuÿvíOý‹œqå‰ÿT¾xÚ¹Ò­¥ÉÒTéƒF·¿r¶k?÷ó§ÚíC~YæX”ÏôÇBD§|:ú|ُ…ïwçÞ½àÂsïºðÒ‹?ë{瘹$tÄÒ§†â±øüXtƃ¥ßÍÀìÉùvÞå÷ý…~ß×G>vR´®2rÌpoßèªÊâÒ*‹¿pÌ'†+ŸX÷þáOíí[µ¢;Z±lp¤{Ùq'}ÿÿ’<’wÈüŒåG¡ý“¡Ÿ/;cî=±ÔXÙm¬j¬Þ4ºiÕ¦Õ÷n^yÙèå«._ýê5¯9vzåôèôª«§WïY3Ó7Ó?3píªkW_»æ†¾÷ö¿oô¦Uï_}Óš;úîè¿càΕwŽÞ¹êÎÕw®9asÞ¥òcÙµxdɪÒhiñHeÍq/X?¼¤:Ú©¥
+þ›ðÌ+_yýÏv¾å.9pû¯¿Ñþ^û›ÒþOo{©ïÚßyã¥o~Ϗ¾VZ]|}©ßÑ~D›óÎ?cü˜5ê±ÿíŸÓ¤dÏ{É…/u獮Ùø{~ø‹uïù™QÔó.¼ûK»Ç6u­ìîéŽWVâžžîÞ´¯·WªiWúÒ²(÷¦Õ^!Êå•¢ÜïW÷ŒÓ¿®7.‹.}¾¯§¿¯·ÚÓW¼ˆôuGCOœ{wÕŸ²Þ/=÷î¾ü¡ÿèÉ{liþeòß~å¿çç¾ââî¡ø©î¡~⧞ÿú’ãJc‰ÞÅå¡òH<õ®ë]í—ÓÊg•O‹ÏŠk½ý2ÖY./_Oô~¦üÉÞ»ý≨7®öT«q_Wÿ’ò1bieY¼¸g¤º¼oyÿúò	b}å„x]ÏIý§¦åT¨ŠŠ7vmìÞØ£ªu¿ÿg
+¾X¸Ê9±­nêÛm.½ºüjñÊÊ+ãº.è¾ çÕÕWöm¦KÓå=bgeg÷dÏÎêU½{ú¦ú§ûŠƒ=¯«^Ý÷ºþ7wÿaÏõº|¿øTå3ñ'{ê?×olÑšj)ÿ¿ópféµ¥r)*í÷?åÒžö-í¬ýÏígÚYü­ß|¡rfþ3{reú7ïܵWú‰Ç÷üwdð¾ÈÏAʧæßØ'ÛXZ¼&ñ|î÷ÐCžß.~îÇ•/V^õF뢌T튖­ê‹¾±ôk]7>>¼ú±U_9ö浏ßØ­]*Ž¨ô¹JŒœ~¼§Gžñ§g8ÐÞ“^þéÓÿútƒïÀy§®?sõ™kÎZÿ’Õ/Y³yõæ5{|gÿÕ¿³fïú·®~뚬þÀš¯þøšÏ­þÜšÅjtãªñѱU¯=Õ¶Ñ-«þpôúUï}ǪÛFoYuÏèÝ«†ò¾ßé÷¾§ŸYZ7¼&ô_„ãóÞ^+ÿêJù¶½¯½ôå“oÉÙýœû~÷ßñ3Àã¾ùÆ?ÙÿׯÜÿ3¥SýäïWçmÊ^òÎÝ'¾éÙß½cÇæ¯ÜöÅÏûÊ—mØP>våÏ£œóïò¼py×HÔ™±]·ö?¾ ºuñ]ñ¡c_&ZÇŽé¯,Z™ó®z&'š'=ÙÙÿ÷½ltËhÙS`àþN£E®K9ú&¯_ìiHDû¯¹fÿþ׿þõ›î;ðµRoû_¿và¾Mí›J;þóGn¹å#½ù揖¿µusûÓígýòéÍ[oóÍé´í2߶Aÿb(´mé­ÑãƒÃ·Æ÷Ü8øhéCb¤
+”Ç–·úNÏÛ–ŸŸœŸ|æÉCCOm[)W„ÎÌUSKD±±wä²½éž_kÿk©÷k3÷Þ–·uß5׈ËÿúÐmÛ.+½¸ä'´¥o>üå¼µùOh[ÛŃ•k|ËNðjrü±D´ø±%O,»yáJ«Ü»öօߍÇ÷Gƒc‹W·ºN?q®åÇðÉÐÒö/ŸÎÉÕ7÷¤-'凲ÓÒ¤ž·ti²&—‡GK9퉹náw@Üá›ýÕö3¥þ¯¸g“ߍµœzdÛå÷]z÷퇦¯}Ýþ½×^ûÐÖËJ㳿)5/ÛvÇááö¿´¼zMiišÜt»èºý†›n¾ý=7Üž÷¿CýqÎÇI'Ž
+vý º·ò¡r\¨DC=C‡=1¡õcÕó«[ª{«×W+Gõö®ÒŽüd¶oªlùÍ-]#íïw¾“G·9úéèCåÒ@4td¼ä7o‰÷Æ×Çl¦³‰®‘_
+ßç;£¨û>ÿ=]M¸bñÂj¥;ZÝÕ}Ì‚ï­öÓîGGï=vQw4²°¿g ëœ‘…ç¬Z1°rèø ŠžSWæœzøŒ| ’;sj=ãÉgÎxòÿþú%K-Xµ~ãúó×ï]ýúw¬ÿ‹õÝ›Ky·]²ØïÐÑÖšáÐOò½\Üù}åþ쁽ŸԏôJî¥;¦ËíÇ.¸r¯¹³õ±+gîwìÜýôŸ½¨|ÎÀ±Ë^õ‘›Ÿýnùœû¯úèžýNeËíWlÙÍ›x¡ß¿¥Q2vŒ?È¥Þï-||ñ£C÷–ÊÑÙÆòVø¶‘÷“œy6Þ·eÙõËB—N|ÓÖ}<ÚºxaûƁ¡ÅçlØ{}~F^þ©=õåòÏ^4]zß;÷,_»þãÖiÇÖÍO‡ï—çÃx½oGŸoÉÇuݺ0ºµÿÑ…7Sm-8O´ŸF{ÈþÓ?¥µììE¢ÀOyGƒŸÎcùó¯»îàk¯=à™Ü¶hÿ°ý÷íϖίÿØ­·~,ÿ)Eí/µùåK%Sñ‹	m¹«}Q|¹oKþ]?}låÑïú£ƒ7–þ^Ü»ÒÏÇ:ßø
+=ùäó¿îëŽ8hQ¡©å…ùq)ÐÐíž–öû¯ümÏÞ×Õ{{„„Îy©ómïœ/qÈ·m8ÒcK†«]Ý‘x¸ï݃Vïíîíˆz†æoQÞùzž{Ø\òHçód>tîDéù§j©8têæSßòž¼=öÞëžt‚8uÉâO~øÙÕ-ŸÙ3)⼟¼ÆëÕV»>úþØØ@y°/]5wu÷TãJoºjÕèº0†‹+=QylñÇÜ<\¹yÝ£GÇq¯XqȝÜKNȹç‰COþöHî—Oýòé…s£ŽÁ§ü—ƒrÉq÷ôôùÑíØåÕjµ·Ú××ß7P]¯]Þ¿|`ùà1NéÙPÝл¡oCÿ†W7zN¯žÞ{zßiý§
+œ[ÝÔ»©oSÿ9ûÜßsõþÞûûîï¿`Ý`×`÷`Ï`u°w Oœuâ'VóqDa WYÒèa¼¹^šù–îÿö;¶;qViÑCí_µg§Ÿºîª˜™zÍ‹wŸõó‡Ÿ9¼í»•3ۿظ±–œ¼¡¯ºö–Ý{ßÚµ¥¡zý´ÆÆSzFoûð=wæÇu…?Ÿ·ÇŒE»Ç–Æ=Ä­Ã¥{{nz{úªåªïdC/)³Ï½{8Xس
+æürÆ#‡Ïxä‘0O{äÐ3gää’Ë1gEg-*û-->¿|¾8ñ–òv4'Ì‘%§û'^Ïýô 6\®•^Û~û‹.ûLû«O|òž{â¶ÿ깨½î¥ú¹è“O”¾ç@/êpÆ-þ»ÚUÙ-óߎ^lJýßy|éC¥{vù¹è‚á³=w-JhïIu”9V\¿Â;ü,×ÏÌü‘^ïm<þ–ÒÎòàð’³=wädüòÿ°û¯¾Rº¯|×ÞKÛOmxÓÁk¿ëÏÊ'þæ–Û:ìQŠÎñ½Ò·§¿ô{Ï'×Ã8¹ž“ëù8¹þ9Nþá¿;Nî½ðÿ™!òOûAqRN⍽gwÃWôîê}CïÝe¿Ä~é}¸üpüõÞÇ{TþQüóÞ¥KÊ#~L±0êò›YXé]Òw|éå“ã»Nê9¹ú‚¾u~`œDI©^>=>­ë´nÝcúÏ<»†Åg÷œÓ‰¸¨rQÏ¥Õû.é¿bpGyKek¼¥kK÷–ží½[ú”÷VöÇ{»övïí™éÝÛ÷¦Ò›»þ çªoìûãþ·¾»ç}ýï¼£üQqGå£ñ‡{>Z½£ïÎþO•>Ûõ©žÏöÿuéñhåË]ß*Gü]å»ñOzþKõ§}?ë¿´3x^QÊÿ/­é+­9§tÙƒŸ+ì.k§}Íçl_SÙrø°¨<[)þÍ-¢|¸íéñÿÝåŒÿîrã‘åûÑ÷K=¥­~yã»”—³<óÛ‹èñËŸŠ‰U6t–wûå¡Îòýø¼øñ·»^à—-ÝýÝ;º?Ñý‰ž?™_æ—ùe~™_æ—ùe~™_æ—ùe~™_æ—ùe~™_æ—ùe~™_æ—ùe~™_æ—ùe~™_æ—ùe~™_æ—ùe~™_æ—ùåÿkKþ¼Ô©ùù¾.÷?]ÑÿäÃÏã¸üa}tâIÑ)GÞKýÏi<oE™ÎŽ¢MÑyQô²ó_~Á+¢W^ôª‹£WÿÏ"ÿoû¯Ý×y¬äÇçŸ{Î?nÈýëJôïìòóßqGž­÷?'F'ùÇSþõRêiÏ{¿å²Èúdz;¯7ùŸó:Ï^½<º z…þÊè¢èUÑÅþÙ«;m‹JïˆâÿѝŒz~ûå/¢_<÷[o„¾U¾íø_ý½Ñ×ÿW*·Go{þO×íуùO|Ð×wF;òŸòlôàÿÈOü…è]ÅŸžoFgþßýä'>ÿ‰wDÇ÷GwñsÙóÊEwz.ŠîŒïñë¾áèçÄ¿DwU¾½F|3ZáwKþÓ½=:§sÌ˧ýÃ'ïþ‹û¯XpÆ/£Uá$}áËïÿä\ý·}‡²à«Õ~Ý#gð¿Ñ–¼È
 endstream
 endobj
-7647 0 obj
+7639 0 obj
 <<
-/Subtype /Type1C
 /Filter /FlateDecode
-/Length 7649 0 R
+/Length1 82308
+/Length 31285
 >>
 stream
-xœUKLAÇgi»­ZPºT‘îŠ(­H at E¸(­ÄPƒŠ1&6”¶¡”>  eÑÀB4-úÀ!QkŒ.DÔø¾.¾ƒz@¹h„¨3f9¸@”x™Ì÷Ÿß÷ûfÒ€aØŠ"»“>Rf¶-é(CbP’„mDOÐSYØ›eŽíRb¬RÂ*¥C¿_¨`g<lY
-k€ÃœÝz‹ÕUGWU×SÚc%ÇuiiÛ–“í999T¹ëï	e0Úè*3µEÜ4Mk­Ñ\ŸGéEÚd¢+¨*“ËZm£Ê*+•m¥e&c
-U@›h«ÕÒ@iõ:jGfæötqÙq®-·Û¨b‹ÙBQ%Æ*»©¬î¿  ³œ8h´pä‚P Ž\|4¸ƒ%a¶˜,4‡fy„ñØ[­ä%ðÒ«ÕæTaµ?«…*¨šýã`BêW!,—þø˜»I››’’=5û}zjŽûYÙyŒ‡úç7ŸAƒ¾ƒœà,Š}=}Ö7)Äâ®VÆÓìcBäM\Ð
-!:d7ðpèo㜋„W$zE"ŠÃL 7ÊŬٳÁx¨—ëx9™Œÿ;ÇÃW¼u¬Eá¨\ý€ ÃK²099_Q—l#î^ºB|8o§ñeµúÕNrªÀáãù.ÙâÇÀ|nå14OªÙñŽHÓ•êOy÷ÒX…š!Ä	k¥ÀÄÏPy'êóú¼íç;Î1dEM¾½˜ ›÷ÒóSÁKÃ_Þ<šagØÉÙŠEkL‚0ÞÊ«æxÇ-xíö:H­®¾|j „Uºü“…5!óˆ‹q0“Ì3Ì{†›‚ul½‚ð—VfíÞ}\Ãɉ‚¾6_‹†(ô0­nrX;¹¶~
-Ñàz¤_>zæ®û9«€²é‰WQÓ%²fÈè?Äíìmï¶DWCàl0¸~tâÊäûûµ§/jˆäÆn®­/1ÀùB$á-'’CLo³†ð·xÅ	qŽÚªH$‚­äW)•¼2€?ŠInJ
+xœì½|U÷>~§ÏÜéDêR	mw–’²@H 	UT–d“,$ِlèMª€¢"""*¢bCDEÄŠˆŠØ»"bCQ±!6øÍÌž€è×W}Ëÿóù“—½wîÜ{žsÎ-Ï9—/"B2šƒ(4$7¿‹¹ˆ¾«œÏá…åáÊÄsÍùXP8)îCÑf)NË;ÎóñâÊ’ò‰ö¤ñ‘Î3º£¤ljq¢¿6!zQi$\tX~l'"R³Öî¥Nƒ´µñA„¨EÎs›ÒòøÀ;â|Œ)‹†ÏÖ§uhWžRÙè„àȧîtZ}áòHóñƒopžŸG¨7_«ŽÏQ>¡~¯"ô\«ÊªHe/îkg<>†SJÑV´ÛùymDkˆ
+Γ«ßD§e¹ÍG5NËb7±˜ìä´m at GÐ^§çB´›ÚH#b 
+8­½Éè;¢ mqd¤‘±4¢sè-t½•þ„Þƒ’éjz=–®&ÔMÌpfƒó7…ÚIèYÔm%ö£j´:D¨ít­ ýÔj#úÈA¡ù»Ñr´Mwt±ˆšMN'óœ–]Ì´Úù‰9ï÷k‰½ŽvÛˆyhZEÑä ´–ØçصEó¨r¶ã“ Yìè¿Ë‘µÇ¿UÓˆÙG`tœìè´9Ú;Xã¼ÏfT'fŸ÷sÍvÐzv+kq­×cˆÄaöJ´í¥ÆP©·‰ùtkú6z Zžð 5-wd¯vÇ°ÅÄTÇv÷gº+œL%6¢CôXnœ#{§k‘ƒ¹…Ìs,*F۝¿“Yͱ©1ŸZìhê¾m†öpé.ÎxG7Ó±¡DãÚtt7ÚŒ:Q+ÑrG’g/›ÌuF®¡86/'–’GÑ*u@Åô—Ž¯‘…ÐJ„äX†¦H%ù´MdÛ¬¢Mý†Žô=3ªe§¤Ó}çÛ„†l’§ú¶ž81d$Ý„µ‰iº‰jËo¢Û¶>ð{/tJ4d¤oÓ¯¡›á´åtªî“Óì´‡2¼w.è&¦­ó¿¬±›|…¥¾%Ú’Ö=—h‘žœ5ëØ]~¼™³?øᵟ†ÊUnË)F¸-Ö
+ª uD¥HB$ÒP?Ä;;­Sê”îZjLô99ná‡:Dâ ÔID?BB"Ùê´Sï	uIäX¨³“ó Î#ÝÙ7‰ºè¬"uÙ¸¾ýh¨+Èî5ê{Ýuѽv:ˆ-8úzèn@
+‰ÝP'O|uÊi?u5$[AAÈL¨³È"ˡΣVä2¨‹¨'ùÔå¶=©æPWPiÏcP×PÃ^×@]G|¯‡Qº³Ö*ÑTT…¢¨ÄñpùP{Tè¬*ò£®ÎOÀ©szøPšÓ'¸Ó;‚¨%9­Y¨ÂéßÙ©¥¢2çLJòNʪöž"NqÆLr>‹œžøO v?‰Zà Mr°Ü]Qáôvõ;cþ5Ä§6Þ7Ü9ÿ|R©Sw¥E¼aÏ"çœwÚ|Žf5v™óTè<9¸åN÷F(=V9µ*ZR÷µ/ìàówíð›êK‹Æ«ãU‘py’/«¢°³/µ¬Ì—çöªöåEª#U“"Eño†vw‡„'•U”øÒÂ¥¿30#2><¼ÆÙ<ኒHµ/\ñE+|•5ãÊ¢…¾¢Xy8Záhvª‰ùžÎ± ƒóÃÎCšcLMp*±Ø„?7äÏôîy»ÚñQÌó ßñ¹ßY9hx¤ª:«ðù;û§Š:MЙ°Š=i‰9ÃŠ«Å-ŽU8.Š;G޼ǝY뉺8?E c’#£³36æ”UÎLF<yUÞœwväFœ1¨4¯ìÙ¥K‘#tRMçêXMUa¤8VUé\q^gÖÓ vÔ®Óßî÷»î"Þڍ8+(†&;}Ý•úϬ?WRçÍT§O©72꼫ôìŠ{kÝõZ•7ÂÝ®ÔI§yòt;êöWÍ)ûë÷¬ÁÎÏ™lO¬°S«ïµßîtŒ:ýü§NþÌ:ó|×ÙuÞ`¯÷ZÜUXîùz‚ÓsfàÿÒŵlˆ'¯Ü“V·›¢žN¥Þ»ØUâ¡TÀ¬'Á¼'f+–Xc‰õžäéóf¿Â_	;6s¤ÆaEa„=	Oc÷´8}=zýÜu˜^+ÁíÐ=±–#Þ†O¬½VõVI+oæܱE^YíéUèŒ	ƒ}ØÛ…Î
+-÷¤Ä½7µþ)vje°“ÚŸÔ±Á=µ\ýãÎúM¬~±Î'nK¥·kŠ„Bot­6Ežqo­sÞƽ·	üI°›Íj<)	ŸLöÖ@©w*ÅÁ3å^[}‹jm¨:eU&´­ñ|˜TovÜz¹7Ÿ‰¹ÆõNjgtÒïØ‘tÒÎ.Þ	âó$'öCBv¼zêìÿ±ÕµžKh[yrEÇ=½êV]E“=”ÿ)„ÚÝPìê`a¤b‘÷éb$y¥ë‰ñNBO^¢Oíü¹ë¸N¶Ú*ô°‹<£ iOow€vaGbÌ;êæ þYTçßžNÿ8ì†êSúÖî•:Õ?êóy6‡=ͱw6ŸºÖÞHpIøæ3æ± æ¾Ü+ëΏ?3q‰\f
+ƒEOñԍu}2¸%îú¼ØÓ±VR™·N«N¶$4u}ZToÎ믺Z
+{ŒõÎŒ2ï	Ÿ´¨ÈÓԝ¯ŠzÞ(9…WHµghØ[=‰µ[‹qºªÿO›jµÄ`AÝ
+{sôç58çtœI·$˜ï2o\ôwNs|rvª¼s6ì+urk[ªO®ÈÚýr:{Dàœ‹xVÔ"Mö¬*òÆ·:¶:i÷é#°ó®–m[Õ[e‰=“}¿Œóö{¬ž®5°j×É$çmô‹ )žŸ+`'W:?	ö
+{'jääˆúóžÐ¹¶Ÿq§”z'¼Ï+«ALj·’~oÔžug:»‹<&¨ðæ½¾¿ÎäU\Ïsõçð¯îÕjïÔ¬åêºÝV»“ÜÈ¡ìdìQ#N•Xé­è	Îg	ÌX‚ÝU…OžªÿΓê÷­{$|X|ÒSPÈÃÉE9Γ‹“ë< N™ç½ËrÚ|N—ç¼î<e8­Þ¼¤zoÜ÷­¼Ý8©»sÑ0OVBFžóéÊå´¸²}Þ³û4ÈéŸãÈrdžÐH#äHËw4Ëuê®ìÁNk¶S† Ÿ;"Ýiæ<»õþȍBx9Ψoï¸ã\]š8íu¨§j•å!Öj6ØyÊs䀷©Žì,Ož«’¹õÐ3á¹<Oºë#W²+3ÝÑ(Û{r[‡9å§_¾çÏTÏ愶9ž
+™Îû„-!OƒÄL$4JwÊ!¶Û£¿£Wç© z&yóèÚ“áwQy½šåÂ,»õ:)Á—	=\ÿ?‰œïÙŸíüø<ûœ–onRùµrk×NO‚«7ö¼1̳/ÕóC®‡æõs½èú3ûäŠË«7+éž¿Üys5ÏðR=äŸÑ’ZiõgçL«ŸDèïÙò<•íõÎwürúglI¬Ç,ÏÖtðuBfbÝ'ÖDv=ï¦{6º3;ÔA
+ÁšJõ|wªî<ðô¯³"1©ð™^Ïgu³Ÿ³[«O‡\p¯ŒðöbÈë•êÍuþÉ=’éíßÁ ù°“+¬îë3÷¤f§ú·vÕöû3gGBV-ö©3˜á­§lÐ0ÿ¤7=ðÈMœ]!‡×
+½<'~òÜ>•¹ëGuÑhý¸3©ÞY[?HœÂý½¾å§õ«kMdK	ΪËuêÇngÊ°k³ãD,_õÖE‰³;‘Տz‹¼ø<VŸŒJb^;™LöÞÖqz%ܝÄNÉó\ä°ÇýI'±j¹¨NV"®{Ñ‚‹V}oþ>Cáßd†•ß'P&{õ8D&®}5Ð×mŸvZ6\{ÿóÛ9ðqjm9SäPßÿUÞ|WB.õ<ìÆ“AnªÍËê|âz qïV~ڬ׭>WZOtú­‚냒zšy¾Æ(q‡çbbJ½ãúïß:ýÓwÖÿK÷Aø”û Ó#¯ß}>ã}ï?|„ÿÔ}Щ‘|a=êî:j{þ¹Ô3Ý°àÿÚ½’ï7÷Jøÿ¿Wªw¯TwÃðÿÍ{%|
+Ãþ÷î•ð²µÿ…{%|Æ{¥:‹þ3÷Jøîþ3÷Jý«÷JuÿêôOÞ+Õí·Sï•~}ÿv)‘Ÿ'"‰ÿµÛ%ŒN½]:óíÆæv	ÿw}õ<ø¿}Ë„½5öÛhæ?Ë„ÿ‡o™ði·Lu¹îò–	ÿŸ·L¾ÿØ-þn™|ÿ¶[&ìù`¸#u §mÂÛ©ÎûÿÜÝ>ãœÿ·îŽðoîŽ|ÿµ»#ü»wGuw@ÿþ»#ü/Üý‘ÜïÝQíÉúûŒòÛün|êßÒü“7>øoÝøü6gûk7>¸ÞÏÝ;ü74ñßÈï‡ên°‡ã>uF(Óû‚–ûU5÷Ën'¿çk_‰øÆEÊb“;töý‰/¶uöõ/›ZYZí‹–Wƪâ‘"_qU¬Ü—Z™_«Åð¾HW“ø"]}ŒëЇGªÂ¾„j'¿‡;ýáüÛïíýé¯üùNCŽVã°/^.Š”‡«&øbŧKÁxH¤ª<Zí}i.Zí+TE¬’ªp…cz’c»c–3ÌñXUI$ɏùÂS}•‘ªjg at l\ÜñXÔqAØWè(žñÒH­Ÿ
+cå•Nw·C¼Ô‘îx9RQíx¯•ç’VaE¾puu¬0vðpQ¬°¦<RÇ]}Š£eÎ$µw%z|ù±âødÇý­:xšTE*«bE5…OLQÔ1,:®&quÀ§Hr¦¹°¬¦ÈÕdr4^«‰;Ê”GÈE¨J¸Ò[SíôwÍIò•G\«±·@ªK“êa$¹˜]bU¾êˆ3N﨣*˜´«œ#¶Òut'\çM.uÖo¸ÓP\SUá F¼E1_u,ÉW]3n|¤0öÇÊœÅæT«(ŠºvT÷ĸÀ›ñ,H¬"O“‹ "w¦¡:ÑêÎJeÝ
+H¼óU—†ËÊð¸xÍQÃÙ%áSìŒU8ë¢ÊW«ŠœÑl_|je¤8ì uN(uêÛòðTg·8Ë¢ÅQw¡…ËâÎÒs*ŽÐpQ‘gyÂuî
+W9zÕ”…«°T©Ž–Txj”$öª3È]¡áBGHµ;¢VŸêÓ‘\‘Øð.;³ S«G4G½Š²©¾h½eŽ]sª"î¯Mx}ÝJµëHw^j·GÄYs‘*oÐäXUQµ¯ÕÉ}ØÊÅ®}[¹Û¶•ç2gf²a¿Œ‹8;É•Zã́ë“I±èIÅ"SâÎŽñ…++íWq_$lw$»\7)¥á¸¯4\íHŒTœâwÕÕ­î"_ME(\§*ö”KXøG³Z+swµ7mî$…}eîéáì•ÚŽ•áÂ	áÇ0gVÄ°»TÿµEu
+”s`9*FÊŠ]¥„|™¹9¾üÜÌ‚©y!_V¾oH^îð¬ŒP†¯Uj¾óÜ*É7"«`@î°ŸÓ#/5§`”/7Ó—š3Ê7(+'#É9$/”Ÿsó|Yƒ‡dg…œ¶¬œôìaY9ý}iθœÜ_vÖà¬GhA®7De…ò]aƒCyéœÇÔ´¬ì¬‚QI83« Ç‘é(—çKõ
+IÍ+ÈJ–šç2,oHn~È‘‘áˆÍÉÊÉÌsPBƒCŽŽ ôÜ!£ò²ú(Hr8I¸ /5#485oP’Ï–똜çóºtv´tdøBÃÝÁùR³³}iYùy¡ÔÁn_×;ýsr‡pfî°œŒÔ‚¬Ü_ZÈ1%5-;”ÐÍ1%=;5kp’/#upjלZ·[Âœ:w`w@ÿPN(/5;É—?$”žåV?få…Ò¼žŽïOd{ê¦çæ䇆sœ~µIxÄ€áêü/ÝÓÌ3?Ç1וS›WpR•Yù¡$_j^V¾;#™y¹Žºî|æfz+`˜ãOwòr at _wŽÜ¶ß®§—;Ì¥f;ó]5œ|J_gu…¦F*ãîچ͝8½c4qv&y«6q8K¸…³qm^Õ¡%ggy¬“8ÝêÛ¥ã¤ÄÑëÎêv˜(qôMŠ8'`µ{”ĪpÌ=L&G«½îP`y,Áy¾êp™æŒrw‘×Ë9+Ãeΰê“jž²¡p-VVE!“«¢qç0ñ…kœÖªè4 á* )Ï_.JÝáÐ¿*R]é°TtR¤ljg§o•Ëež&ÑŠâXU9˜î¹¯0Þ³6TˆûJ<áE±8ŽU•töaìE\;tú³¿òðÏÄA8ùþJ„ëâ ß_Œƒðoã 8ä=IÕµœq† µ.`Á'VòÕÆJø#V‰yø·ÅJ8±aÿV¬„ÿÁX	×ÅJ¾¿+áSâ‚¿+áß‹•|>VÂõb¥úÛ÷”pÉásçø§Â%á’ïo…Køu½¼ñŸ™pEÌ÷·C&ü†LB&ß_™ðé!“﯄LøŒ!“ï_	™pAêðÁs]µSü¥è×Yþw¢#\ùþNt„ëGG¾¿á3FG¾¿¹‹õ”r2ðÁ¿øøþ…ÀÿqàãûöŸSc‡ÿ; ‰×öïç
+¸³Stþ;¿3ØÅ»·›àüíâݝyÿª×Ùû÷ÕJ§íÔ-üãß0ì29:!Ú%êVS:W–Vvó/ý.'™øè³Ðht†?Ö
+ïw¢ID!1ˆEâ‘€0‘„d¤ iHG2‘… †è,ԝ£&¨)j†š£Ž"-Q+ÔµAmQ;tj: sQG”„:9öwA]Q7ï·>mDÝQ2êRÿöBç¡Þ¨ê‹úy÷ÜéÞ}t¦÷oYh äxl°÷/CÐP”ç}{v˜cø4rl9A ÑEh¬ã†;ÑÍè4=‚V¢OÑ´]Š®G·£õ‰– ·Ð<t%ú}‹–¢kÐ"´½‡¾FkÑFô=úE7¡»Ð³hºsæèrgîv;Ž~=‡^DÏ£=èt¹ÿ=—ÐËèg֏ +ÐkèU´Ï™ÛÏÑh±3)îÜ—£2gBÖ9îŸèÝÚV{·³“œ•ñ™³¦¡©h:š‰f ­èF4ÍBsÐÅè0úm#(‚&‚%8‚G¿¢ã„@`B$$t‚@„L(„J„Fè„A˜„E4 gˆ³‰ÆDtýH4%š͉„hI´"Zmˆ¶D;â¢=с8—èˆ~B¯ID'¢3Ñ…èJt#üD€°‰ ѝH&z)DOô:Hô"Î#z}ˆ¾D?"•H#Ò‰"Ddý‰DÚ„î%ƒˆlb0‘CäCˆ¡D‘~F¿ ÑGD1ŒNŒ F£ˆÑÄùÄââBâ"b,&Æ…D!Š‰¢”ˆ¢‡‰ñÄ¢Œ(G£Oˆ
+"FT‰*¢šˆ5Ä$b21…˜JL#¦3ˆ™Ä,b61m .&æóˆKˆùÄb!±ˆXL,!.%.#–ˈåÄåÄÄ
+âJâ*âjb%q
+±Š¸–XM\G¬!®'Ö7눉›ˆ›‰õÄ-ÄâVâ6âvb#qq'qq7q±‰¸—ØLÜGl!î' $¶Ûˆ‡‰íÄ#Ä£ÄcÄãÄÄ“Äâ)b'ñ4±‹x†x–xŽØM<Oì!^ ^$^"^&^!ö¯ûˆ×ˆ×‰7ˆ7‰·ˆ·‰wˆw‰÷ˆýÄûÄââ ñ!ññ1ñ	ñ)qˆøŒøœ8L|A|I|E!¾&¾!¾%¾#¾'Ž?Lj‰ŸˆŸ‰_ˆ_‰ãÄ	‘I’I“É’É“‰I‘”H™TH•ÔH4H“´ÈdCò,²y6Ù˜lB6%›‘ÍɤlI¶"[“mȶd;ò²=ف<—ìH&‘ÈÎd²+ٍô“Ò&ƒdw2™ìA¦=É^äydo²Ù—ìG¦’id:™A†ÈL²?9€Ì"’ƒÈlr0™Cæ’CÈ¡d™OÃÈáär$9ŠMžOŽ!/ /$/"Ç’arYH‘²˜,!KÉ(9žœ@–‘åd#+ɉdYMÆÉr9™œBN%§‘ÓÉäLr9›œC^LÎ%ç‘—óÉäBr¹˜\B^J^F.%—‘ËÉËÉ+Èä•äUäÕäJòry-¹š¼Ž\C^O®%o ב7’7‘7“ëÉ[È
+ä­ämäíäFòòNò.ònòry/¹™¼½[ÈûÉÈÉ­äCä6òar;ùù(ùù8ùù$¹½ÞAï¢÷Ñ›h?ù¹“|šÜE>C>K>Gî&Ÿ'÷//’/‘/“¯{ÉWÉ}äkäëää›ä[äÛä;ä»ä{ä~ò}ò ùyüüˆü˜ü„ü”<D~F~N&¿ ¿$¿"_“ߐߒߑߓGÉÈcääOäÏä/ä¯äqò…(‚")Š¢)†b)Žâ)Â”HI”L)”Ji”N”IYTª!uÕˆ:›jL5¡šRͨæTÊGµ¤ZQ­©6T[ªuÕžê@Ku¤’¨NTgªÕ•êFù© eSAª;•Lõ R¨žT/ê<ª7Õ‡êKõ£R©4*Ê BT&ÕŸ@eQ©AT65˜Ê¡r©!ÔP*Ê§
+¨aÔpj5’…n FSçSc¨¨©‹¨±T˜GRET„*¦J¨R*J§&PeT9UAÅÐuT%5‘ª¢ª©8UCM¢&SS¨©Ô4j:5ƒšIÍ¢fSs¨‹©¹Ô<êj>µ€ZH-¢SK¨K©Ë¨¥Ô2j9u9uµ‚º’ºŠºšZI]C­¢®¥VS×Qk¨ë©µÔ
+Ô:êFê&êfj=uµº•ººÚHÝAÝIÝEÝMÝCm¢î¥6S÷Q[¨û©¨©­ÔCÔ6êaj;õõ(õõ8õõ$µƒzŠÚI=Mí¢ž¡ž¥ž£vSÏS{¨¨©—¨—©W¨½Ô«Ô>ê5êuê
+êMê-êmêê]ê=j?õ>u€ú€:H}H}D}L}B}J¢>£>§S_P_R_QG¨¯©o¨o©ï¨ï©£ÔÔ1êGê'êgêêWê8u‚F4A“4EÓ4C³4Gó´@cZ¤%Z¦Z¥5Z§
+Ú¤-ºݐ>‹nDŸM7¦›ÐMéftsºí£[Ò­èÖtº-ÝŽ>‡nOw Ï¥;ÒIt'º3Ý…îJw£ýt€¶é ݝN¦{Ð)tOº}Ý›îC÷¥ûÑ©tNgÐ!:“îO ³èô :›Lçйôz(GçÓô0z8=‚I¢GÓçÓcèèé‹è±t˜GÒEt„.¦KèR:J§'Ðet9]AÇèJz"]EWÓqº†žDO¦§ÐSéiôtz=“žEϦçÐÓséyô%ô|z½^D/¦—ЗҗÑKéeôrúrú
+z}%}}5½’¾†^E_K¯¦¯£×Ð×ÓkéèuôôMôÍôzúz}+}};½‘¾ƒ¾“¾‹¾›¾‡ÞDßKo¦ï£·Ð÷ÓÐÒ[é‡èmôÃôvúúQú1úqú	úIzý½“~šÞE?C?K?G烈§÷Ð/Ð/Ò/Ñ/Ó¯Ð{éWé}ôkôëôô›ô[ôÛô;ô»ô{ô~ú}ú ý}þþˆþ˜þ„þ”>DFN¦¿ ¿¤¿¢Ð_ÓßÐßÒßÑßÓGéècôôOôÏô/ô¯ôqúƒ‚!Š¡†aŽáÁŒÈHŒÌ(ŒÊhŒÎŒÉXL¦!sÓˆ9›iÌ4aš2͘æLÆÇ´dZ1­™6L[¦sÓžéÀœËtd’˜NLg¦Ó•éÆø™ c3A¦;“Ìô`R˜žL/æ<¦7Ó‡éËôcR™4&É`BL&ÓŸÀd1™AL63˜Éar™!ÌP&Ég
+˜aÌpf3’ÅŒfÎgÆ0021c™03Ž)dŠ˜SÌ”0¥L”ÏL`ʘr¦‚‰1•ÌD¦Š©fâL
+3‰™ÌLa¦2Ó˜éÌf&3‹™ÍÌa.fæ2ó˜K˜ùÌf!³ˆYÌ,a.e.c–2˘åÌåÌÌ
+æJæ*æjf%s
+³Š¹–YÍ\Ǭa®gÖ270똙›˜›™õÌ-ÌæVæ6ævf#ss'ss7s³‰¹—ÙÌÜÇlaîg`d¶21Û˜‡™íÌ#Ì£ÌcÌãÌÌ“Ìæ)f'ó4³‹y†y–yŽÙÍ<Ïìa^`^d^b^f^aö2¯2û˜×˜×™7˜7™·˜·™w˜w™÷˜ýÌûÌææ ó!óó1ó	ó)sˆùŒùœ9Ì|Á|É|Åa¾f¾a¾e¾c¾gŽ2?0ǘ™Ÿ˜Ÿ™_˜_™ãÌ	±K²K³˲˳‹Y‘•X™UX•ÕX5X“µØlCö,¶{6Û˜mÂ6e›±ÍÙ¬mɶb[³mضl;ö¶=ہ=—íÈ&±ØÎl¶+ۍõ³Öfƒlw6™íÁ¦°=Ù^ìylo¶Û—íǦ²il:›Á†ØL¶?;€Íb²ƒØlv0›Ãæ²CØ¡l›Ï°ÃØáìv$;Š͞ώa/`/d/bDzav[ȱ¶˜-aKÙ(;žÀ–±ålc+Ù‰l[ÍÆÙv;™ÂNe§±ÓÙìLv;›Ã^ÌÎeç±—°óÙìBv»˜]Â^Ê^Æ.e—±ËÙËÙ+Øì•ìUìÕìJöv{-»š½Ž]Ã^Ï®eo`×±7²7±7³ëÙ[Ø
+ì­ìmìíìFööNö.önöv{/»™½ÝÂÞÏ>À>Èneb·±³ÛÙGØGÙÇØÇÙ'Ø'ÙìSìNöivûû,û»›}žÝþÀ¾È¾Ä¾Ì¾Âîe_e÷±¯±¯³o°o²o±o³ï°ï²ï±ûÙ÷ÙììAöCö#öcööSöûû9{˜ý‚ý’ýŠ=Â~Í~Ã~Ë~Ç~Ïe`±?²?±?³¿°¿²ÇÙâŽä(ŽæŽå8Žçs"'q2§p*§q:gp&gq
+¸†ÜY\#îl®1ׄkÊ5ãšs-8×’kŵæÚpm¹vÜ9\{®w.בKâ:q¹.\W®ççœÍ¹î\2׃Kázr½¸ó¸Þ\®/׏KåÒ¸t.ƒq™\n —Å
+äqÙÜ`.‡Ëå†pC¹<.Ÿ+à†qùÜHn7š;ŸÃ]À]È]čåÂÜ8®+â"\1W•rQn<7+ãʹ
+.ÆUr¹*®š‹s5Ü$n27…›ÊMã¦s3¸™Ü,n67‡»˜›ËÍã.áæs¸…Ü"n1·„»”»Œ[Ê-ã–s—sWp+¸+¹«¸«¹•Ü5Ü*îZn5w·†»ž[ËÝÀ­ãnänânæÖs·p¸[¹Û¸Û¹ÜܝÜ]ÜÝÜ=Ü&î^n3w·…»Ÿ{€{ÛÊ=Ämãæ¶sprqsOpOr;¸§¸ÜÓÜ.îîYî9n7÷<·‡{{‘{‰{™{…Û˽Êíã^ã^çÞàÞäÞâÞæÞáÞåÞãösïs¸¸ƒÜ‡ÜGÜÇÜ'ܧÜ!î3îsî0÷÷%÷w„ûšû†û–ûŽûž;ÊýÀã~ä~â~æ~á~åŽs'xÄ<ÉS<Í3<Ës<Ï<æE^âe^áU^ãuÞàMÞâð
+ù³øFüÙ|c¾	ß”oÆ7ç[ð>¾%ߊoÍ·áÛòíøsøö|þ\¾#ŸÄwâ;ó]ø®|7ÞÏx›òÝùd¾ŸÂ÷ä{ñçñ½ù>|_¾ŸÊ§ñé|â3ùþü >‹Èâ³ùÁ|ŸËá‡òy|>_Àã‡ó#ø‘ü(~4>?†¿€¿¿ˆˇùq|!_ÄGøb¾„/å£üx~_Æ—ó|Œ¯ä'òU|5çkøIüd~
+?•ŸÆOçgð3ùYül~1?—ŸÇ_ÂÏçðùEüb~	)¿”_Æ/ç/ç¯àWðWòWñWó+ùkøUüµüjþ:~
+=¿–¿_ÇßÈßÄß̯çoá7ð·ò·ñ·óù;ø;ù»ø»ù{øMü½üfþ>~?ÿ ÿ ¿•ˆßÆ?ÌoçáåãçŸàŸäwðOñ;ù§ù]ü3ü³üsünþy~ÿÿ"ÿÿ2ÿ
+¿—•ßǿƿοÁ¿É¿Å¿Í¿Ã¿Ë¿ÇïçßçððùùøùOøOùCügüçüaþþKþ+þÿ5ÿ
+ÿ-ÿÿ=”ÿ?ÆÿÈÿÄÿÌÿÂÿÊçOH R Z`Và^,ˆ‚$È‚"¨‚&è‚!˜‚%4
+g	„³…ÆB¡©ÐLh.´|BK¡•ÐZh#´Ú	çí…¹BG!Iè$tº]…n‚_¶ºÉB!Eè)ôÎz}„¾B?!UHÒ…!$d
+ý…B–0P$dƒ…!W"ò„|¡@&F#…QÂhá|aŒpp¡p‘0Vã„B¡HˆÅB‰P*D…ñ¡L(*„˜P)Lª„j!.Ô“„ÉÂaª0M˜.Ìf
+³„ÙÂába®0O¸D˜/,
+‹„ÅÂáRá2a©°LX.\.\!¬®®®V
+׫„k…ÕÂuÂáza­pƒ°N¸Q¸I¸YX/Ü"lnnn6
+ww
+w	w÷›„{…ÍÂ}Âá~ááAa«ð°MxXØ.<"<*<&<.<!<)ìžv
+O»„g„g…ç„ÝÂóÂááEá%áeáa¯ðª°OxMx]xCxSxKx[xGxWxOØ/¼/>
+
+	ŸŸ
+‡„τυ×ÂWÂákáá[á;á{á¨ðƒpLøQøIøYøEøU8.œÀ˜Ä¦1ƒYÌacKXÆ
+V±†ul`[¸nˆÏðÙ¸1n‚›âf¸9n}¸%n…[ã6¸-n‡ÏÁíq|.p'ÜwÁ]q7ìÇlã qœ‚{â^ø<Ü÷Á}q?œŠÓp:ÎÀ!œ‰ûã8ăp6Œsp.‚‡â<œð0<À#ñ(<ŸÇàð…ø"<‡ñ8\ˆ‹pã\Š£x<ž€Ëp9®À1\‰'â*\ã¸O“ñ<OÃÓñ<ϳñ|1ž‹çáKð|¼ /Ä‹ðb¼_Š/ÃKñ2¼_Ž¯À+ð•ø*|5^‰¯Á«ðµx5¾¯Á×ãµø¼߈oÂ7ãõø¼ߊo÷ãø|'¾ߍïÁ›ð½x3¾oÁ÷ãðƒx+~oÃãíøü(ÚŒîÏáÇñèô z
+?‰¶ ûÑN¼ÍEO¢…ø)¼?îÀ»ð3øYüލŸÇ{ÐÓøü"~	¿Œ_Á{ñ«xz=†_ïã7ð›ø-ü6~¿‹ßCÛñ~ü>>€?Àñ‡ø#ü1þŠáÏðçø0þ‰¿ÂGð×øü-þâð1ü#þ	ÿŒÁ¿âãø„ˆDB$EJ¤EFdENäEAÄ¢(J¢,*¢*j¢.¢)Zb±¡x–ØH<[l,6›ŠÍÄæbÑ'¶[‰­Å6b[±xŽØý vÏ;ŠIb'±³ØEì*výb@´Å Ø]L{ˆ)bO±—xžØ[ì#öû‰©bš˜.fˆ!1Sì/³Äâ 1[,戹âq¨˜'æ‹â0q¸8B)ŽG‹ç‹cÄÄŋıbX‡.Å"1"‹%b©Ç‹Ä2±\¬cb¥8Q¬«Å¸X#N'‹SÄ©â4qº8Cœ)Îg‹sċŹâ<ñq¾¸@\(.‹KÄKÅËÄ¥â2q¹x¹x…¸B¼R¼J¼Z\)^#®¯W‹×‰kÄëŵâ
+â:ñFñ&ñfq½x‹¸A¼U¼M¼]Ü(Þ!Þ)Þ%Þ-Þ#nï7‹÷‰[ÄûÅÄÅ­âCâ6ñaq»øˆø¨ø˜ø¸ø„ø¤¸C|JÜ)>-Ÿw‹Ï‹{ÄÄÅ—Ä—ÅWĽâ«â>ñ5ñuñ
+ñMñ-ñmññ]ñ=q¿ø¾x@ü@<(~(~$~,~"~*??‹_ˆ_Š_‰GįÅoÄoÅïÄïÅ£ââ1ñGñ'ñgññWñ¸xBB!‘%Ñ#±'ñ’ aI”$I–I•4I—É”,©ÔP:Kj$-5–šHM¥fRs©…ä“ZJ­¤ÖR©­ÔN:Gj/uÎ•:JIR'©³Ô­’ºJÝ$?ºM
+H¶”ºKÉR)Eê‰VK½Ðµè+é<©·ÔGê+õ“R¥4t‹”.eH!´BÊ”úK¤,i 4HÊ–K9R®4DŠÖHyR¾T 
+“†K#¤‘Ò(i´t¾4Fº@ºPºH+…¥qR¡T$E¤b©D*•¢Òxi‚T&•£[¥
+)&UJ¥*©ZŠK5Ò$i²4Eš*M“¦K3¤™Ò,i¶4GºXš+Í“.AË¥ùÒi!º
+]--’KK¤K¥Ë¤¥Ò2i¹t¹t…´BºRºJºZZ)]#­’®•VK×Ik¤ë¥µÒ
+Ò:éFé&éfi½t‹´AºUºMº]Ú(Ý!Ý)Ý%Ý-Ý#m’î•6K÷I[¤û¥¤¥­ÒCÒ6éai»ôˆô¨ô˜ô¸ô„ô¤´CzJÚ)=-í’ž‘ž•ž“vKÏK{¤¤¥—¤—¥W¤½Ò«Ò>é5éué
+éMé-éméé]é=i¿ô¾t@ú@:(}(}$},}"}*’>“>—K_H_J_IG¤¯¥o¤o¥ï¤ï¥£ÒÒ1éGé'égééWé¸tBF2!“2%Ó2#³2'ó² cY”%Y–Y•5Y—
+Ù”-¹ÜP>Kn$Ÿ-7–›ÈMåfrs¹…ì“[Ê­äÖr¹­ÜN>Gn/wÏ•;ÊIr'¹³ÜEî*w“ýr@¶å Ü]N–{È)rO¹—|žÜ[î#÷•ûÉ©ršœ.gÈ!9Sî/³äò 9[,çȹòy¨œ'çËò0y¸<B)’GËçËcääå‹ä±rX'ÊErD.–KäR9*—'Èer¹\!ÇäJy¢\%WËq¹Fž$O–§ÈSåiòty†<Sž%Ï–çÈËsåyò%ò|y¼P^$/–—È—Ê—ÉKåeòrùrù
+y…|¥|•|µ¼R¾F^%_+¯–¯“×È×ËkåäuòòMòÍòzùyƒ|«|›|»¼Q¾C¾S¾K¾[¾GÞ$ß+o–ï“·È÷ËÈÊ[å‡ämòÃòvùùQù1ùqù	ùIy‡ü”¼S~ZÞ%?#?+?'ï–Ÿ—÷È/È/Ê/É/˯È{åWå}òkòëòò›ò[òÛò;ò»ò{ò~ù}ù€ü|PþPþHþXþDþT>$&.–¿¿”¿’È_ËßÈßÊßÉßËGåäcòòOòÏò/ò¯òqù„‚B!J¡FaNáAÁŠ¨HŠ¬(ŠªhŠ®Š©XJ¥¡r–ÒH9[i¬4Qš*Í”æJŧ´TZ)­•6J[¥rŽÒ^é œ«tT’ÐCJ'¥³ÒEéªtSüJ@±• Ò]IVz()JO¥—ržÒ[é£ôUú)©Jš’®d(!%Sé¯P²”Ê %[¬ä(¹Êe¨’§ä+Ê0e¸2B©ŒRF+ç+c””•‹”±JX§*EJD)VJ”R%ªŒW&(eJ¹R¡Ä”Je¢R¥T+q¥F™¤LV¦(S•iÊte†2S™¥ÌVæ(+s•yÊ%Ê|e²PY¤,V–(—*—)K•eÊrårå
+e…r¥r•rµ²R¹FY¥\«¬V®SÖ(×+k•”uʍÊMÊÍÊzåeƒr«r›r»²Q¹C¹S¹K¹[¹G٤ܫlVîS¶(÷+(*[•‡”mÊÃÊvååQå1åqå	åIe‡ò”²SyZÙ¥<£<«<§ìVžWö(/(/*/)/+¯({•W•}ÊkÊëÊÊ›Ê[ÊÛÊ;Ê»Ê{Ê~å}å€òrPùPùHùXùDùT9¤|¦|®V¾P¾T¾RŽ(_+ß(ß*ß)ß+G•”cʏÊOÊÏÊ/ʯÊqå„ŠTB%UJ¥UFeUNåUAŪ¨Jª¬*ªªjª®ª©Zjµ¡z–ÚH=[m¬6Q›ªÍÔæjÕ§¶T[©­Õ6j[µzŽÚ^í ž«vT“ÔNjgµ‹ÚUí¦úÕ€j«Aµ»š¬öPSÔžj/õ<µ·ÚGí«öSSÕ45]ÍPCj¦Ú_ f©ÕAj¶:XÍQsÕ!êP5OÍWÔaêpu„:R¥ŽVÏWǨ¨ª©cÕ°:N-T‹ÔˆZ¬–¨¥jT¯NPËÔrµB©•êDµJ­Vãj:I¬NQ§ªÓÔéêu¦:K­ÎQ/VçªóÔKÔùêu¡ºH]¬.Q/U/S—ªËÔåêåêê
+õJõ*õju¥zºJ½V]­^§®Q¯Wת7¨ëÔÕ›Ô›Õõê-êõVõ6õvu£z‡z§z—z·zºI½WݬާnQïWPT·ª©ÛÔ‡Õíê#ê£êcêãêê“êõ)u§ú´ºK}F}V}NÝ­>¯îQ_P_T_R_V_Q÷ª¯ªûÔ×Ô×Õ7Ô7Õ·Ô·ÕwÔwÕ÷Ôýêûêõõ ú¡ú‘ú±ú‰ú©zHýLý\=¬~¡~©~¥Q¿V¿Q¿U¿S¿Wª?¨ÇÔÕŸÔŸÕ_Ô_Õãê	
+i„Fj”FkŒÆjœÆk‚†5Q“4YS4UÓ4]34S³´ZCí,­‘v¶ÖXk¢5Õši͵šOk©µÒZkm´¶Z;í­½ÖA;Wë¨%i´ÎZ­«ÖMókÍÖ‚Zw-Yë¡¥h=µ^ÚyZo­ÖW맥jiZº–¡…´L­¿6@ËÒjƒ´lm°–£åjC´¡Zž–¯hôáÚm¤6J­¯Ñ.Ð.Ô.ÒÆjamœV¨i­X+ÑJµ¨6^› •iåZ…Ó*µ‰Z•V­Åµm’6Y›¢MÕ¦iÓµÚLm–6[›£]¬ÍÕæi—hóµÚBm‘¶X[¢]ª]¦-Õ–i˵˵+´Ú•ÚUÚÕÚJím•v­¶Z»N[£]¯­ÕnÐÖi7j7i7këµ[´
+Ú­ÚmÚíÚFííNí.íním“v¯¶Y»Oۢݯ= =¨mÕÒ¶ikÛµG´GµÇ´Çµ'´'µÚSÚNíim—öŒö¬öœ¶[{^Û£½ ½¨½¤½¬½¢íÕ^Õöi¯i¯kohojoiokïhïjïiûµ÷µÚÚAíCí#ícííSíö™ö¹vXûBûRûJ;¢}­}£}«}§}¯Õ~ÐŽi?j?i?k¿h¿jǵ:Ò	Ô)ÖÕ9×ë¢.鲮誮éºnè¦né
+ô†úYz#ýl½±ÞDoª7Ó›ë-tŸÞRo¥·ÖÛèmõvú9z{½ƒ~®ÞQOÒ;éõ.zW½›î׺­õîz²ÞCOÑ{ê½ôóôÞz½¯ÞOOÕÓôt=Cé™z}€ž¥ÔéÙú`=GÏÕ‡èCõ<=_/ЇéÃõúH}”>Z?_£_ _¨_¤ÕÃú8½P/Ò#z±^¢—êQ}¼>A/ÓËõ
+=¦Wêõ*½Zë5ú$}²>EŸªOÓ§ë3ô™ú,}¶>G¿XŸ«ÏÓ/Ñçëô…ú"}±¾D¿T¿L_ª/Ó—ë—ëWè+ô+õ«ô«õ•ú5ú*ýZ}µ~¾F¿^_«ß ¯ÓoÔoÒoÖ×ë·èô[õÛôÛõúúú]úÝú=ú&ý^}³~Ÿ¾E¿_@Pߪ?¤oÓÖ·ëèêéëOèOê;ô§ôúÓú.ýýYý9}·þ¼¾GAQIYEß«¿ªïÓ_Ó_×ßÐßÔßÒßÖßÑßÕßC£'ôýúûúýý þ¡þ‘þ±þ‰þ©~HÿLÿ\?¬¡©¥ѿֿѿտӿ׏ê?èÇôõŸôŸõ_ô_õãú	„A”AŒÁœÁ‚
+ѐÙPÕÐÝ0Ó°ŒFCã,£‘q¶ÑØhb45š͍†Ïhi´2ZmŒ¶F;㣽ÑÁ8×èh$ŒÎF£«ÑÍðÃ6‚Fw#Ùèa¤=^ÆyFo£Ñ×èg¤iFº‘a„ŒL£¿1ÀÈ2ƒŒlc°‘cäCŒ¡Fž‘oÃŒáÆc¤1ÊmœoŒ1.0.4.2ÆacœQh£Ø(1J¨1Þ˜`”åF…3*‰F•Qmčc’1Ù˜bL5¦ӍÆLc–1Û˜c\lÌ5æ—óÆBc‘±ØXb\j\f,5–ˍˍ+ŒÆ•ÆUÆÕÆJãc•q­±Ú¸ÎXc\o¬5n0Ö777ë[Œ
+Æ­ÆmÆíÆFããNã.ãnãc“q¯±Ù¸ÏØbÜo<`<hl52¶ۍGŒGÇŒÇ'Œ'ÆSÆNãic—ñŒñ¬ñœ±ÛxÞØc¼`¼h¼d¼l¼bì5^5ö¯¯ooooïïïû÷ÆÆAãCã#ãcããSãñ™ñ¹qØøÂøÒøÊ8b|m|c|k|g|o5~0Ž???¿¿Ǎ&2	“4)“6“59“7›¢)™²©˜ª©™ºi˜¦i™
+̆æYf#ól³±ÙÄlj63››-LŸÙÒle¶6Û˜mÍvæ9f{³ƒy®ÙÑL2;™Í.fW³›é7¦mÍîf²ÙÃL1{š½ÌóÌÞf³¯ÙÏL5ÓÌt3Ã™™fs€™e4™Ùæ`3ÇÌ5‡˜CÍ<3ß,0‡™ÃÍæHs”9Ú<ßc^`^h^dŽ5Ãæ8³Ð,2#f±Yb–šQs¼9Á,3ËÍ
+3fVšÍ*³ÚŒ›5æ$s²9ÅœjN3§›3Ì™æ,s¶9Ǽ؜kÎ3/1ç›Ì…æ"s±¹Ä¼Ô¼Ì\j.3—›—›W˜+Ì+Í«Ì«Í•æ5æ*óZsµy¹Æ¼Þ\kÞ`®3o4o2o6×›·˜Ì[ÍÛÌÛ͍æææ]æÝæ=æ&ó^s³yŸ¹Å¼ß|À|ÐÜj>dn36·›˜š™›O˜Oš;̧̝æÓæ.óóYó9s·ù¼¹Ç|Á|Ñ|É|Ù|ÅÜk¾jî3_3_7ß0ß4ß2ß6ß1ß5ß3÷›ï›Ì̃æ‡æGæÇæ'æ§æ!ó3ósó°ù…ù¥ù•yÄüÚüÆüÖüÎüÞ<jþ`342615›',diQm1kqo	¶DK²dK±TK³tË°L˲X
+­³¬FÖÙVc«‰ÕÔjf5·ZX>«¥ÕÊjmµ±ÚZí¬s¬öVë\«£•du²:[]¬®V7Ëo,Û
+ZÝ­d«‡•bõ´zYçY½­>V_«Ÿ•j¥YéV†²2­þÖ +Ëh
+²²­ÁVŽ•k
+±†ZyV¾U`
+³†[#¬‘Ö(k´u¾5ƺÀºÐºÈk…­qV¡UdE¬b«Ä*µ¢Öxk‚Uf•[V̪´&ZUVµ·j¬IÖdkŠ5ÕšfM·fX3­YÖlkŽu±5ךg]bÍ·X­EÖbk‰u©u™µÔZf-·.·®°VÕÅñÒ©•¥‘
+.µ<\X«à‰’MW™aÃ^Á¥ÆJb‘	\8QŠé…Ѫšòâ²È±°®ŽÓ‹bñpaa¤"ŽOVٌ°+²(Qd8òÃq.€ % #^Cu‚"'«\Ôˆ$J6”ñ
+±=¥Jê)Õ¿NVÉɪԿ0V^†‡’zâ€zrJëêô€qá*ºÔù`³âѲ¢õ
+.,‰‚%Y	K¢	×eÎÑDIf
+$£ãŁõ0Æ×Õ¥AõµšpÊCIU$RQ®(Š²Ùášx„-ó
+)»~¿²zlvÂAe^Ag;ÖÓeΛ“_‘ŸS|Eýñ9‰ñ	W„Ýÿ;®ª˜³`¨PE	©(árÁøŸ›0>ærniMEI¸ª¦¼,\—cõŸØ¼„U	òêëPU_‡¼„U‰"?1ªÚ+Äüzn¬®çÆ‚úÒâõ¥$ÄÄ)p§4îNé°Ä”Ö$¦tXUV
+KXUãÌ°ªhE	Sã~ÊÃN±°¦þ7¦¾v͈zÚN®WU¯>µ®ÎŽNØ:Í+ðèºe<íd•)‹U”Ts5Ñ®Ýzt…²”~(PÚP¡ìe2”= L2Ê4(Ó¡Ì€2ef¢LüÀOÜÀMÜÀMÜÀMÜÀMÜÀMÜÀMÉdrKcULÌýL´¥‚Í©€
+Ø©€
+Ø©€
+Ø©€
+Ø©€
+Ø©€b†y˜5u˜i`o`§v`§v`§v`§v`§v`§v؝þN§~:à§~:à§~:à§~:à§~:à§~:à§~:à§~àg ~àg ~àg ~àg ~àg ~àg ~àg ~àg ~ðC€üà‡ ?dû'v}‰W at + ‡ =è!@zÐC€ôL@ÏôL@ÏôL@Ïë3ÁúL°>ð3Spª{’$6yød•K
+%Êp$qÖåV—…«KõX]Ý“âïÚÊnPú¡@iC„²;”ÉPö€2ÊT(Ó L‡2Ê”	oø»~7ÀïøÝ ¿àwün€ß-YʯVW×{€ I7ФhÒ
+4éštMü ‰4ñƒ&~ÐÄšøA?hâOøÁ~ð„ðý€ï|?àûßøÀ ~ ð€ ü àºóÎi^©®
+ @ €P  
+@ ( lPÀlPÀlPÀlp€
+°ß|ðmÀ·ß|ðmÀ~ðƒ€ü à?øAÀ~ðƒ€ü à?øAÀïøÝ¿;àwüî€ßð»~wÀïøÝ¿;àwüî€ßð»~wÀOüdÀOüdÀOüdÀOüdÀOüdÀOüdÀOüdÀOüdÀ‡0Àa€ ?„~üø!ðCà‡0Àa€ ?„~üø!ðCà‡0Àa€?ð!ðC8à‡pÀá€Â?„~üø!ðC8à‡pÀá€?ðS?ð!$ðCHà‡À!B?„~	üø!$ðCHà‡À!?ðS?
+ð!,ðCXà‡°ÀaÂ?„~üø!,ðCXà‡°ÀaÂ?„~üø!,ðCXà‡°ÀaÂ?„~üø!ðCà‡0Àa€ ?„~üø!ðCà‡0Àa€ ?кhÝ´îZ÷­ûÖý@ëþȁ¼Èb÷±ûÈý@ä~ r?µ?3Y(©
+Ork{œàQª[óÞºú/!¨×bC„²;”ÉPöKc±	Þ/öו
+e”éPf@‚2რÐi è4 t :
+ €N@§n E·P¦@	ø@¢ Ñ h H4 $ 
+ ‰ü~É!)ï?0Vg0i ˜4 L &
+ “€IÀ¤`Ò 0i ˜4 L &
+ “€IÀ¤`Ò 0i ˜4 ü à‘€H@¤ Ò i ˆ4 D "
+ ‘€H@¤ Ò i ˆ4 D "
+ ‘€H@¤ Ò i ˆ4 D "
+ €@@  Ê e 1 „ B !€@ˆ Ä Q ˆ( D ¢	 Ñ€hÉ!&«ˆUËEÑHU¤:Zí=áÔ²ÊÒ°W±x¤,
+K¡ÊꨓšzÍ|(ï³bP“rË£nbxV¯3Î-”$:éQ§û)XŒ‡E§Eâa¦Ø	Š9Œxôhçåà1¥Nv™AáÊÊ0›.W&א95äÈ(C¢T^iŒÉ–”‡©‚p
+ÚPCJ£TºówHuTʪ§‰
+jŸqø¤¤H}³#µfGkͶjNš0ÊOs*qbŠ"eñ0²èi®Iî˸g’+Œ™à™Tæ™”ðAZ:YQCN‰r±„]TUiŒ­vêÆxwl|ªÒ±«Ðùë<21×áR}_«§©)ÅêÏVMýÙŠœ­„]YOÍn<x	֐A æìn¬7®ö¬gȐ @>€|0 ù` ˆ# Ä â q€8@ Ž G ˆ# Ä â q #@F "	 ‘€H #@F€Œ0 D€Œ0 a 2 d„È™€Ÿ	ø™€Ÿ	ø™€Ÿ	ø™	|r@r@r@r@¨Ë겁ºl .r@r@HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -2?2?øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+?xËÞ²·lHülHülHülà3ø̆ÄφÄφÄÏž³çlà9xΞ³çlà9?????????????????øÖ¾µ!ñ³!ñ³!ñ³!ñ³màcøØ>¶!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³á؆{`@@@@@@@@@@@8߆ІІÐÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞï÷ƒÀûAàý ð~x?¼Þï÷ƒÀûAàý ð~x?¼Þï÷ƒÀûAàý ðaø0¨m½€ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aà¿ ð_ø/üþÿÿ‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼ÞÂ…gx/¼„ó<çyÎó œçA8σpžá<Ây„ó<çy0­V.ØçyÎó œçA8σpžá<Ây„ó<çwÎï œ¿A8ƒpþáü
+Âù„ó7ço0£vüÿkï\€äÊêóÞ=gz¤yH+i¥…e_ì.bW<´óÿwß{NÃÚ«Û}Ο—M‹Í#µ&#ÍHiÄh´!klÖ€±Ád0&~$¶!øv½‰óðƘøÇ—Ä±1K°“¯;béÍí9¿–.•"§R®uIÿ¾=§ïwîíÓßwîwu¾¡¿ðoÿðoÿðoÿðoÿðoÿðoÿðoÿðoÿðoÿðj¯ðj¯ðj	?•\W”\/”\”\”\”\”\”\”\”\”\”\”\”\”\”\”\”\”\”ð_	ÿ•ð_	ÿ•ð_	ÿ•ð_	ÿ•ð_	ÿ•ðZ	¯•ðZ	¯•ðZ	¯•ðZ	¯•ðZ	¯•½É~9.x­„×Jx­„×Jx­„×Jx­„×Jx­„×Jx¬d~^ÂS%<UÂS%<UÂS%<UÂS%<UÂSe9Ù/ý†§Jxª„§Jxª„‡Jx¦„gJx¦„gJx¦„gJx¦„gJx¦„gJx¦„gJx¦„gJx¦d~\2?.™—ÌKæ¯%óÕ’yjɼ´d¾YÂ;%¼RÂ%¼P2_+™§•|ïK¾O%ߧ’ïSÉ÷©œ|ŸlÒžý1O)™§”ÌS<<åá)OyxÊ3ïôÌ;=ýóð–gÞ釓ýUÔuHÔDÍÇëá=ïyxÏÃ{Þó¿‡÷<¼çá=ïyxÏÃ{Þóðž‡÷<¼çá=ïyxÏÃ{Þóðž‡÷<¼ç™_zæ—žù¥g~é™_z>7ÏçæùÜ<Ÿ›çsó|nžÏÉO>'擉yQbü&ÆobÜ&Æiâz0¡‡‰ë¾Äu\bÜ&®ã×q‰ë·Äõ[âú-qý–ú“ý$*ýaÜ'®Û×m‰ëµÄuZâº,q]–¸K\%¾	ýNèwB¿úÐïÄ÷(¡ß	ýNèwB¿ºÐí„n'Æbü'Æbü'ÆbÜ'Æ{b¼'Æ{b¼'Æ{b¼'Æwb|'Æwb|'Æwb|'Æwb|'Æwb|'ÆsÊãYóus]…ªÔ.µG-¨%ÕSµO­¨ê:ÁKTËu þ üøðàÀ€?  þ üøðàÀ€? þü!øCð‡àÁ´´´´´“öô7ÒßH#ýô7ÒßH'ŸO¤¿‘þ&ðø	ü~?ŸÀOà'ðø	ü~?ŸÀOàø¾oàø¾oàø¾oàçë\Á¿ükÁ¿ükÁ¿ükÁ¿|kÁ·|kÁ·|kÁ·|kÁ·|kÁ·|kÁ·|kÁ·|kÁ·|kÁ·|kÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯üjÁ¯|jÁ§|jÁ§|jÁ§|jÁ§|jÁ§|jÁ§|jÁ§|jÁ§|jÁ§|jÁ§üiÁŸüiÁŸüiÁŸüiÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—|iÁ—®+øü ~ ?€Ààðø}ðûà÷Áïƒß¿~ü>ø}ðûà÷Áïƒß¿~ü>øè,þ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àOþ´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG~´àG>´àC>´àC>´àC>´àC>´àC>´àC>´àC>´àCKo¢Ï¾Ÿ}hÁ‡|hÁ‡|hÁ‡|hÁ‡|hÁG|dÁG|äºò~t¸@‡™¼?PûÔŠ: ©‘š¨ô=.Ðã=.Ðã=.Ðã=.Ðã=.Ðã=.Ðã=.Ðã=.Ðã=Æ/ürÁ/ürÁ/ürÁ/ürÁ/ürÁ/ürÁ/ürÁ'|rÁ'|rÁ'|rÁ'|rÁ'|rÁ'|rÁ'|rÁ'|rÁ'üqÁüqÁüñº‚‹.ã—~¹à—~¹à—~¹à—K.㛾¹à›¾¹à›¾¹à›¾¹à›¾¹àw~·àw~·àw~·àw~·àw~·àw~·àw~·àw~·àw~·àkוý£—zY —zY —zY —zY —zY —:W s:W s:W sE5yç+й+й+й+Ð9|iÁ‡|OÁ÷ü@Á”’yQɼ¨d^T2/Â/¬kAeœ|@Á|@Á|@Á|ÀºjŸZQÔ!5Ré7ŸOÉ烟(ø‰uŸÏ±®à3ŸÁo¬+øÌgJæ3%ó™ŸGø<Âç>ðy„Ï#|áó˜ï+ÖµO­¨ê'R5gD"zуˆDô ¢ˆè@D":сˆDt ¢ˆè@D":сïGx?Âûޏð~„÷#¼áýïGø>Â÷¾ð}„ï#|áûßGø>Â÷¾ð}„ï#|»\Žޏð~„÷#¼áýïG¾O‘ïS„÷#¼áýïGx?Âûޏð~„÷#×cþð„ÿ#üáÿÿGø?Âÿþð„÷#¼áýïGx?Âûޏð~„÷#¼áýïGx?Âû~ð{„Ï#<ù~ÅÉ÷‹ë…ÈõBäz!£ðh„G#<áяFx4£ðh„G#<áяFx4r½¹^ˆ\/D®"בë…ÈõBäz!r½¹^ˆ\/D®"ב녈/ñå"בëƒÈõAäú r}¹>HðT‚§<•à©O%x*ÁS	žJðTZœì¯¢¨Cj¤&jîo‚§<•à©O%x*1oMðU‚¯|•à«_%ø*ÁW	¾JðU‚¯|•à«_%ø*1oMÌ[ü•à¯%ø+Á_	þJðW‚¿ü•˜·&x,Ác	KðX‚Ç<–౏%x,Ác	KðX‚Ç<–à1îgH‚Ç<–౏%x,Ác	KðX‚Ç<–౏%x,Ác	KðX‚Ç<–౏%x,Ác	KðX‚Ç<–౏%æ±	>KðY‚Ï|–೟%ø,Ág	>KðY‚Ï|–೟%ü¥„¿”ð—ó¨Ä<*1JÌ£ó¨Ä<*1JÌ£ó¨_&ø21Ṅü™˜'æÉùpò6óÒ­•;3÷äòÒ¼^þž­2ûÒÉ_Ÿ½gò,¿ù÷»„û]uŸùXb>–˜q¬®à3KÌÇó±Ä|,1ã¾™pßL¸o&Ü7«+øÌǸ&Ü?“„pŸL¸O&Ü'«+ûGzÀ}³º²ô€ûhÂ}´ºr|è÷Ó„ûiÂý4á~šp?M¸Ÿ&ÜOî§	÷Ó„ûiÂý4á~Z]ÁG¸¯&ÜW«+øè÷Ù„ûlÂ}6á>›pŸ­®à£	½à¾›¤‰^à'qßM¸ï&Üw«+øøI܇îÃ	÷á„ûpÂ}8á>œpN¸'܇îÃÕ|ü$îËÉä¾\â:&á'%ü¤ÄuMÂOJøI	?)á'%ü¤„Ÿ”ð“~RÂOJÜ÷IøJ	_)á+%|¥„¯”Lf^ž¿h¯Û*¼
+:®RÂUJ¸J	W)á*jm¨µ¡Ö†Zjm¨µ¡Ö†Zjm‹“ýUÔuHÔDÍGc¨µ¡Ö†Zjm¨µ¡Ö†:êl¨³¡Î†:êl¨±¡Æ†jl¨±¡Æ†jl¨±¡Æ†jl¨±éãC
+56ÔØPcC
+56ÔØPcC
+56ÔØPcC
+56ÔØPcC
+56ÔØPcC
+56ÔØP_C}
+õ5Ô×P_C}
+µ5ÔÖP[Cm
+µ5ÔÖP[Cm
+•5ÔÕŠÉ~é?jj¨©¡¦†šjj¨©¡¦†šjj¨©¡¦†šjj¨©¡¦†šjj¨©¡¦†šjj¨©¡¦†šjj¨©¡¦†šjj¨©áfn†áfn†áfW1†zêi¨§¡ž†zêi¨§…	Ç‹zêi¨§¡ž†zêi¨§¡ž†zêi¨§¡ž†zW[ÆÕ–qµe\mêj¨«¡®†ºêj¨«¡®†ºêj¨«¡®†ºêj¨«¡®†ºêj¨«¡®†ºêj¨ª¡ª†ªªj¨ª¡ª†ªªj¨ª¡ª†ªªj¨ª¡ª†ªjj¨©¡¦†šjj¨©¡¦†šjj¨©¡¦†šjj¨©¡ž†zêi¨§¡ž†zªi¨¦¡š†jªi¨¦¡š†jªi¨¦¡š†jªi¨¦¡š†jªi¨¦¡šÆÝãî‹¡“†>úhè£Mô‘».Æ]㮋q×Åò]]Ì:ZW¡*µKíQjIõÔ@íS+ê€:¤Fê×rðE掯ž8·±²¼tö$/)å®­ßL~öØzýã£k»^sn}ü»ãï®_ZY¦
+»ÓîîõÓ㨷•Ók+Kõ›voÞ³ÞؤW:«tVé¬ÒY¥³ÊÞ»2sjõôVpØʱõÓ`w9E]úÛåuAérŠºƒÙ•×[[:U¯€Ó§N“ÒãCéñ¡ôøPz õ@êÔ©Ç‡Ñãøz_ãëÛ·nnnnnÁ‘ààààààààààà—à—à—à—à—ì¯d%û+Ù_ÉþJöçÙŸgžþ{úï鿧ÿžþ{úïÁóàyð<x<^ /€è ÿü ~ ?€Ààðøü ~ ¿nÜ>¸}pûàV‹»Ž­¯­Ÿ>UG6—6^Ç«:½¶º±Ä]«Ê™3+gëVlÒ³ŠžUÕôòúéÓéÜÆ:¯Ð§Š>Uœ“}з}з} ii9G‘s9‘s‘‰Y"“ÅɶR»Ôµ –TO
+Ô>u@R#5Qóñ‰,î|Þñ¥WožÛà€`:Xüü=+«5‡mn,=Ëk€ç«ƒºv¾øËwÎl¬œ=¶±zfü+Ûy‘®(§@9J”(=Pz 
+Šrè
+:´(Т@‹¢qvåìæê©¥MhW Fé‚ܹË9èÒƒn¯³´¶ræ$[àCAJü.ø]ð»àC—]
+t)Ð¥@—]
+t)=ŽÚhS M6ÚèRziçø‹rrucy¶–‘­'|P0 À€
+(0 Õl½‹•Õ'7O.lžÜXáùÙùã«wOž/œ­µì4¼CƒFQ`D)9´’þ”ô§¤?%ý)é*0¨À ƒ
+*0¨À ƒŠ߃£
+Œ*0ªÀ¨£
+Œ*0ªÀ¨£
+Œ*0ªÀ¨„Q*a”J¥FY×ÞìÒÆÆú=k+Ç7wl=;wfn«nŒOgþáòú=§ó³£õ‡8K³e¾=}ºÜ§Ë}ºÜ§Ë}ºÜ§Ë}ºÜ§Ë}ºÜ§Ë]®èrE—+º\qÊ`Z²$ëê.õìèÙ^¤¨èDE'`]uÖX—PI%TR	•¬ko÷±muéD=‘ªÙ…s1 /ÎÅ€s1 º1 º1 º1 Cº1¤Cº1¤CÎŐs1þü!øCð‡àÁ‚?hù\Ö3­ñȘ›lœ;³kòtk|\j5"—6Æ£$ï'Ò/DˆÌI%sRÉœT2'•ÌI%sRÉœT2'•ÌI%sRe"^‰ó’8/‰ó’ÀOà'ðø	ü~?ŸÀOà'ð
+|ßÀ7ð
+|ßÀ7ð
+|ßÀ7ð
+|Ÿ«ú²c¶®ã‰ûRž×3÷ù•×®ž­'蛫—^ëí\9ufóuõôc牍qžÌéÍ+k+§Æ¡µ9èÁŽuãjçÙsÇjæ\š¼0¤FjÆ&[RÉ’T²$•,ɺ–Ku?6VϾºV¸“¼¨}ê€:¬uxýÌúÆX…—Öæê''Çñ¼Kk¥Ó'Öò·—ðH%<R	TÂ#•ðȺ–skë'V-s™gyº¾±°zzs|slÒ©["ø„G*á‘Jx¤©„G*á‘Jxd]»³›'ë/üñúBŠWè’¬H2é‘Jz¤’©ãôȳ«§V×–6ئH2é‘Jz¤’©¤G*é‘uíÍÖP'6Î]úeò#•ÜH%7RɍTr#•ÜH%7RɍTr#•ÜH%7RɍTr#•ÜH%7RɍTr#•ÜH%7RɍTr#•ÜH%7²®6¿òšs«w×óœÓÇ8»¨5™‘JF¤’©dD*‘JF¤’©dD*‘JF¤’©dD*‘JF¤’©dD*‘JF¤’©dD*‘JF¤’©dD*‘JF¤’©dDÖU¶¾
+õX=W+×æîÉÆøŸ•ÍÙú+›@ëb¡‚k+¯¥õd#·¦
+=ãJˆôH%=RITÒ#•ôH%=RITÒ#•ôH%=²®½¹qBv='];w–—ÊÝù¥SçÖ6WϬ½Ž—é	Ór$•I%GRÉ‘Tr$•I%GRÉ‘Tr$•ɺövÕ~feÈ~îÒ÷ŠIi’Jš¤’&©¤I*i’Jš¤’&©¤I*i’Jz¤’©¤G*é‘Jz¤’©¤G*é‘Jz¤’©¤G*é‘Jz¤’©¤G*é‘Jz¤’©ãôÈåõÍË<‹ð“"©¤H*)’JŠ¤’"©¤H*)J
+d]y?¬³"ÌŠ0kœ¼Ÿ~#̤F*©‘Jj¤’©¤FÖ•ó†0“©¤F*©‘ua&ERI‘TR$ë
+>¬³"̤LÖ|„YfE˜aV„YfE˜aV„YfÍÿùºŽEªtN®ŸcÚåšÔJ%µRI­TR+ë¨}jEP‡ÔHMTÛµ±r7ºW³E~5ßZSR(•J%uRITR'ëjscÁ¬gk›g.==ÊÞÐ\b&•˜I%fR‰™Tb%•XÉZ9v¸”˜C%æP‰5¬“ýàµtá‡.üÐ…ºðC~èÂ]ø¡?tá‡.—].º0CfèÂ]˜¡3ta†.ÌÐ…º0Cw8©ôƒÞed³ŒLYF¦,?R–)ˏ”åGÊò#eù‘²üHY~¤,?ªkç&‹‹ç¹X”ñÒx¡KíQjIõÔ@íS+ê Þábs‡‘š¨6nн܀‘ÆRºvÇ
+´Ñ€.àÝâÇ
+zô㦐­>„FúÀ`eµ€²Z at Y- ¬¨ëVú—wÀ¸e¹€²\@Y. ,P–Ôu«ecô€É"ë”õÊze½@]·zà/"”Ê‚eÁ€²` ®[=(; LIØQV(+”•ÊÊe倲r at Y9 ¬PV(+”•ÊÊe倲r at Y9P×ñ8èmƒú‰öxRÈä‰ò¤ÛŸ´™¼¢“6ZL/ò¤7iÜ
+“6—žøÉ“rÒæғɏz¹:Ù³NºÚ»Ôx²çÞ¤?½Iz“=÷&o/.à¥ý4F0sLby”X%–G‰åQby”Xe™‚²LAY¦ ,SP–)(Ë”e
+Ê2e™‚²LAY¦ [ËÎ][?ö꼍Ä2/SX>Ýü9øxêEðæOAg9^Ä°v¼ùsЙGŽ1ll柯mž=¹´¼ÒÙúwÇò«sÝj׳„AYÂPWŽ¹cÁܱ`îX 
+ÚP 
+ÚPômöøêÚÚÊòÑõ×Î<·t““8°BY¡¬…PÖB(k!”µuíÏ<WBý…Ú*Åø^Ûx÷õ¥%
+èêÀb%ÄHÇ!F›c·èܶé óHBŒ”#%ÄH	1ÒqˆÑÖû7À«ç‘[Û˜p„)!FJˆ‘b¤„)!F:1ÚzÿÚq¶ÁgI¨Q]ÁögòäžMN<ÓÈb˜¶Nv5QHJ’…¤D!)QHJ’…TW?»zúî£çês»9~Ö„d&J’‡¤Ä!)ËN”8$%IY†¢Ä!)qHJR]‹¹úbëtå%žÉ(‰HJ"R]é“Ñ‚ÉhÁd´`2Jr’’œ¤$')ÉIJrR]9
+LF&£“Ñ‚ÉhÁd´`2Z0-˜ŒLF&£%ÔTrK§ä–NÉ¡d‚P2A(™ ”LJ&%„’	BÉt”ħºFj¢‚cT2=(™”8H%‰Qu_ÀgâZ29(™,UWð™”Ì
+HœÒ’¹ÉSJò”’<¥$O)ÉSJò”’<¥$O)ÉSJò”’<¥$O)ÉSJò”’<¥$O)ÉSJò”’<¥$O)ÉSJò”’<¥$OÕµ?{öÔêÚÊñ¥c+õ×âÒ†;{î4MèSƒ²k3ÇWN-ñå){2ÝØ žiUÊB-e¡–P¥T)UJ@•P¥T)UJ@•P¥T)UJ@•P¥TÕ|œ¤'©ÄI"Àª®àã$•8I%NRYXç왉ÆsUW>¶vî(½ÎÉ•¥šL—W—NMþ#	WJÂU]ûó§Îåšjewãùä v¥„])‹Û”ÅmÊâ6eq›²¸MYܦ,nS·)‹ÛêJWP²”°,%,K	ËR²”°,%,KY$§,’SÉ)‹ä”ErÊ"9e‘œ²HNY$§,’SÉ)‹ä”ErÊ"9e‘œ²HNY$§,’SÉ)‹ä”ErÊ"9e‘œ²HNY$§,’SÉ)‹ä”ErZrHxW]ÁAè	óª+8}‰Ð—=!_u‡«À²šàpœè<a`Z¢ó%÷‹Jü"õúÅÉv—Ú£–TO
+Ô>uHÔD͸ŠõP¬‡b=ë¡XÅz(ÖC±ŠõP¬‡b=ë¡XÅz(ÖC±ŠõP¬‡b=ë¡XÅz(ÖC±jõP«‡Z=Ôê¡Vµz¨ÕC­jõP«‡Z=Ôê¡Vµz¨ÕC­žk.Ï5—疹疹‡W=¼ê¹äò\ry.¹<—\nõp«‡[=ÜêáV·z¸Õínõpª‡K=\êáR—z8ÓÕ®ôp¥‡+=\éáJWzØÑãFx܏áq#<n„‡"=éqÞ=λÇy÷ð¢‡}9ÁãxàE/zxÑË^ôð¢‡=¼èáE/zxÑË^ôð¢‡=¼èáE/zxÑË^ôð¢‡=¼èáE/zxÑË^ôð¢‡=¼èáE/zxÑË^ôðŸ‡ÿ<üçá?ÿy®€<W@wÌË^ôð¢‡=¼èáE/zxÑË^ôð¢‡=¼èáE/zxÑÇ~‡\÷x®{<×=žëÏuçºÇãŸ{üsîñÏ=×=žë •?%䯮쏩¼g*OøŸû)á~J¸ŸûÕ•ý3U'ìO	ûSÂþê:Ù?ýeªî™ª{¦ê©z@/zЋ€^¦êÝèF at 7º˜ª¦ê	èH at G:Б€Žt$ #	èH at G:Б€Žt$ #	èH at G:Б€Žt$ #	èH at G:˜ªô$ '=	èI at OzГ€žô$ '=	èI at OzГ€žô$ '=	èI at OzГ€žô$ '=	èI at OzГ€žô$ '=	ÌÕº˜«ô% /}	èK`®˜«æêÝ	ÌÕúП€þô' ?ý	èOàÿiÜñ€ô( G=
+èQ@zУ€ô( G=
+èQ@zУ€ô( G=
+èQ@zУ€ô( G=
+èQ@zУ€ô( G=
+èQ@zУ€ô( G=
+èQ@zУ€ô( G=
+ÌÓóôÀ<= S
+èT@§:Щ€Nt* S
+èT@§:Щ€Nt* S
+èT@§:Щ€Nt*0èU@¯zЫ€^ô* W½
+èU@¯zЫ€^ô*àÓ|º€Oðé÷{ÿÑ+àÓ|º€Oðé÷}÷}÷}†]À°ܽ
+ܽ
+8vÇ.àØ»€cpìŽ]à¾qà¾qà¾qÀ­¸u·.àÖܺ€[Ðí€[pën]À­Ü]è{@ßúÐ÷€¾ô=`Õ¬º€U°êúÐÿ€þô? ÿýè@ÿúÐÿ€þô? ÿýè@ÿûèy=ï£ß}ô»>ôч>¼Ð‡ú|ž}>Ï>ŸgŸÏ³ÏçÙçóìóyöù<ûœ§>ýîÓïŠyIż¤b^R1Ÿ¨˜OTÌ'*æó‰ŠùDÅ|¢b>Q1Ÿ¨˜OTÌ'*æó‰ŠùDÅ|¢b>Q1Ÿ¨Ðï
+^­àÕ
+^­àÕ
+^­àÕŠóWqþ*xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+xµ‚W+ø®‚ï*ø®‚ï*ø®‚ï*ø®‚ï*ø®‚ï*ø®‚ï*ø®büWŒ£ãgÀø0~ÌkÌkÌk||ÌkÌk‹“ý¨Cj¤&j>ÎãpÀ80ŒÃãpÀ80ŒÃãpÀ80ÌWÌWÌWÌW‡Ìg†Ìg†Ìg†åäç=jA-©ž¨}jEPóq™—™—™—™—n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸Q]Ág^KÈ‘r¤„)!GJÈ‘r¤„)!GuÝz_/æù@]…ªÔ.µG-¨%ÕSµO­¨ê©‰
+~?‚ÁàGð#øü~?‚ÁàGð#øü~?ŸÀOà'ðø	ü~?ŸÀOà'ðø	ü¾oàø¾oàø¾oàø¾oàøy>`ü¯cY©iæAã·«[™?wƒ_
+>5øÔàSƒO
+¾3øÎà;ƒï¾«k¤&jƃï¾3øÎ໺²_e¿Ê~•ýæëóºö©u@RÁWðü.ø]ð»àwÁï‚ß¿~Ü.¸]p»àvÁí‚קNý÷؏ýö8®ûï±ÿûï±ÿûïq\½	ÇUp88ÇQ€W€W€W€W€W€W€W€W€Ç¸”_Éñ•à—à—à—à—à—à—à—à—à—à—à—à—à—à{ð=ø|¾߃ïÁ÷à{ð=ø|¾߃ïÁ÷àðø÷Þxàý÷Þßçý}Þߧÿ}úߧÿ}úßçý}Þéw7q<‰×
+|ßx?¼@Èš²f„¬!kFÈš²f„¬!kFÈš²f„¬!kFÈš²f„¬!kFÈ™rf„œ!gF•Be„P!TF•>e„OáSFø”>e„OáSFø”>UWúÅçÊ/U1~©J]Á
+àÎK ?€Àà3.Ÿ2§Œð)#|ÊŸ2§Œð)#|ÊŸ2§Œð)#|ÊŸ2§Œð)#|ÊŸ2~y‹ñË[Œ_Þbüò#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œÊ§2©Œp*#œª®àø¾oàø¾oàø>¼˜àAb:Œ˜#¦Ãˆé¨kœ97Žv]ÌErÑ\º¹ôr)r)sñ¹„\ú¹T¹ræBÊŶŠd<Éx’ñ$ãIÆ“Œ'O2žd<Éx’ñ$ãIÆ“Œ'O2žf<Íxšñ4ãiÆÓŒ§O3žf<Íxšñ4ãiÆÓŒ§O3^7ãu3^7ãu3^7ãu3^7ãu3^7ãu3^7ãu3^7ãu3^7ãu3^/ãõ2^/ãõ2^/ãõ2^/ãõ2^/ãõ2^/ãõ2^/ãõ2^/ãõ2^‘ñŠŒWd¼"ã¯ÈxÅ^‘¬ÈVä#*òùˆŠ|DE>”"J‘¥È‡RäC)ò1¹»Eîn‘»[äî=v¶ÕÝ"w·Èý,r?‹ÜÏ"÷³ Ÿ…Ï%w·ÈÝ-2P‘ŠTd "¨Ì@eî|™ñÊŒWf¼2㕯ÌxeÆ+3^™ñÊŒWå}VyŸUÞg•÷Yå}VyŸUÞg•÷Yå}VyŸUÞgÅ>ó1Tùª|U>†AÆd¼AÆd¼AÆd¼AÆd¼AÆd¼AÆd¼AÆd¼AÆd¼aÆf¼aÆf¼aÆf¼aÆf¼aÆf¼aÆf¼aÆf¼aÆf¼˜ñbÆ‹/náù¤¹°Õ˥ȥÌÅçréçRå2˜]^û†ÍcKë§wFR<;Õ8ß³ó’Õµå•ÎsÆI„sÃՍcçNW#v†ã¶5/ÖlxøØÒÙ•Î`94×7—Ž[9½¹ðÜs§O,mœ;µ¶tns>®Ÿ;º¶²:·´±ttõØ+—×ÇëË·žjýüìd£;ÞØÝÜxåÒîfÃW.Mšö¶Þ7îEY¦ÃÇWO/]ÚX=½ºyiãÔÊòjÞ¨¤Ñ¬Þ¸Ü¬Þ¸Ü¬´æÞ¬¹7k4TŸÔãŸÌÓ·ÕÓ'òü°±³zãò[êË;ó±Ù,6›ÅF³Ð<‚Ð<‚Ð<‚ ÍfÚl¦ÍfE³YÑlV4´y>Íó1ÈçcòX:þÊ£K;Ò釗Ö6¯·Ñ2®?¨µ•³góv?N¶ç·FÐb¨ÿöxÞoóÜ7^·‘ÆóÅF{i<Ÿ¼ÞýŠ÷¯Oö?c4^ŸìG¿âùbãy—çåW<—ÆóÅÆó~㽓ç2Ɲ;º±´µÌ`}³óüñÉÊ'´Ÿ?‘«ÎåyøÖÆáµõÓ'În.mLNzóS4?µAóS6¿ÃæwbØüNôóPé¬]îDÌ {Ç=ŸZ?½~bcéÌI^é_~åŠÕñÂþ•W7?âqfÌWl÷›Ûã”ë/ß&ÛnùØzçyã®äXŠÃGkrÙ:oe!ã_ŸÛxž?ÓúµñvãõÔxn´I6½F›ñsÛ:j?¬.Ÿ¯ñÆ¥S4Þ¸tò|Ý×F³A³Ù ÙlØl6l66›Åf³Øl›ÍR³Yj6KÍfÖlfÍfo­‹fõÆåfõF£™4›I³™4›i³™6›i³Y·Ù¬ÛlÖm6ë5›õšÍzÍfE³YÑlV4›•Ífe³YÙlæ›Í|³™o6Íf¡Ù,4›õ›ÍúÍfýf³æx‹Íñ›ã-6Ç[lŽ·Øo±9Þbs¼Åæx‹Íñ›ã-6Ç[lŽ·Øo±9Þbs¼Åæx‹Íñ–šã-5Ç[jŽ·Ôo©9ÞRs¼¥æxKÍñ–šã-5Ç[jŽ·Ôo©9ÞRs¼¥æxKÍñ–šã-5Ç[jŽ·Ôo©9ÞRs¼¥æxKy¼Í¾¸ž?,]¿{‹ûÆ‹MÆ”Èsi<×Æónãy¯ñ¼h</Ïý%ÆïùtxyuéXæ÷P>:žÍù˜W—_Ùzs’pø\!­ÖýSo8òøGîâ~÷?º¿R÷—ÜÿØíþbä¾0rÿý ûóÝîÏ.¸Gº?}kÕùÓ‘ûü÷¹î‘‹î¿]tÿuäþäYîî³#÷_Ô}æá;;Ÿ¹à®>|§ûôÝÖùôE÷G·¹OÜŽÜ¨ûÏûÝï_pÿiäþã>÷îu¿÷ ûÝ‘ûºùïÜë>ù‰çt>y¯ûÄsÜoÿÖ5ß¹ßºÆýû‘ûÍ‘ûw#÷#÷ëܯýêõ_¹_½Þý[u¹_~ÓÞÎ/_ëþÍUî¡‘û¥‘û×#÷¯Fî_ŽÜ¿¹_¹>rÿlä¹_Øë¸ï`灑»ÿ£v~ä®ÎGt}ÃôG~þ`ç#wyÜ}äÈôÏt?7rÿô‚ûÙ‘û™‘ûé‘û©‘ûð²û'»Ý‡>x°ó¡e÷ÁŸÜ×ùàA÷“ûÜOԝþ‰‹îÇGîÜ?¹Ûç~tä~ä‡ww~DÝïvÿpÙ} nòî‡Fîý?¸ÐyÿÈýà‚{ß{¯î¼oÙ½÷={:ï½Ú½gû9÷ý#÷}vu¾oä.ìrï®ßôîî]ïÜÝy׭Ý?¸è¾÷v¾wäÞñö»:ïxнã
+Óoÿžƒ·ßåÞ~dú{ºï¹·}×áÎÛFî»»·Ö‡ùÖʽåÍó·ìwožwßY¿ðËî¾úLÝwнi¯ûŽ‘ûö7îí|ûȽq¯ûû#÷†‘;?rGÿ¶{ïí|ÛÈÝ{¯û{Ëîõ/9ÐyýA÷wGîu#÷ÚÝîžw÷œ;7r›ÝÙ‹nã¢{ÍEwfäÖGîôÈ­Ýè^=r¯Ú;è¼êN·:r'ïu'êã#·2rË#wl䎎ÜÒ³Üß¹è¾uÁÝ5r{ä^1r/Ù\çåÝËæÜK¯ººóRuß2rß\#óÀ½ä€»³½§sçÝ‹÷»=ÿÊ΋Fî›æÝß¹~ãžÎGî÷¸o¹Ô?yÁÈ=ÿy{:Ï¿Ò=ïº]çíqÏÝåž3rvÁ¥.ŽÜpꙝáE7xÐU/pGFûú¯Û×ùúýîën¿¢óuûÜíÏÞÕ¹ýÈãW¸gïrϹþÈ¿¿.:_îéøý®,æ;åWÌ»Þõ®»Ë©ÌwtädÞ-Þ6ßYÜån›w‡Ÿ9Û9¼Ç=sÖ=CÝÓŸv°óôe÷´Cû:O;èís·Þr°skån9èžzp¾óÔ+ÜÁy÷”‘»yänºÂÝXçûÜ“—Ý
+Ýõõ!\¿ì®Ûå®­Ïàµ#wÍE÷¤»ºÞ¸z䞸ìžPŸ©'ŒÜUõ›®ºÚ¹ý#wåÈí«ì¹½õ±î¸=÷º+–Ýî‘ÛµpUg×È-Ô­®ró#7·ÇÍŽÜκÙΑ۱ßÍ,»éú‡Óõ8àêWÝÈMÕÛSÏtí=®5ríûÛËoúîöÓÿ&üiýÿîÀÿöÏu­©ÖñÑ…éãm¹ÖŽÖ“Ž,L±5óÅöÎÎù©éÖm}âiíùÄ#Ÿxdñʽ7î=xãޏO·;ë®yì3£;vÿÕŸoÌjµ[oµ:ÝÎ'[³­×¹~ÇÞöT{jïÌŽ™ÁŽ)×ú©™öŽ©k§Ë׶¦çö<öÈcìí÷¥uÛíh¿¿ø‚;_¶cÏôçÆ_~ÓÏÞ0ßnßud±œ
+;ž;õœ«SÇw¼ajÇL{væ@ûI3Ö~ÞÌKÛ/›Yi¯Î¼næMí·Î¼»ýž™šßsWë®+olïíî­ÿ¹ùãí=S=ú¥W=Ôùäo˜þÔŧOê‹7´Ú?ÖjM¶îçÎÖ»ŽÜêöNw¦§êÎvÆÅMílílïmµvƝž™Ú1}¤smëÈŽÙ=Ÿxø±‡÷;\÷7w·Sww';ãn·æÆݾ½3µª˜ZœZì,î´©#SG:Gv¾hêEí\™úŽ©wNí¹ªý$wÃÜSÛ‡œowdîDû¤{­;3÷Cs»êCpÝÙv·>€½Ó¿×~û½¿÷¥GµóÉ/½gêøcþ¥þÔÇZõŸ©Ökÿôôùé×·ö·®i9ò”ցöì};ßÜ9ðíÎíŸøÀ¾ûÞví5¦vØÙzÁÔ¾+Òµõ9ÿÂ#íÞ‡¿ðÈÃ{>_?¾ðùú…Å#‡î¸îÌu¸î7¯{ôºÎ­;ÚwLÝqàŽk:ÏØqÛÎÛfŸ1·ÞZo¯O­X¿fö®×´ïj¸ñúvWK`wûæ'·öîiuµµãpûæ›fvLŸìg~ý£¯úØÑc¿ùêÑFkzìÚ;îŸú±7¿çÝSßúŠ_üX¯÷á§=£Úsí+ÛÃÑï?ô}?÷á÷OŽé\}Ló­'´žäÊ™öµX¸ßÛž8»ïŠ¹}Ò·!wÏçÜ|ÇÕ¯o½~æüŽó;ÏÏžŸ;?ÿú…ó»Îï>Åù=ç÷¾~ß®~ôê½uooš9°ÿªîxÕèSoÑqoo¾iüïÔÙw}èƒï~ç‡>ôÎGÛûFŸôÏFÚÞëþà³ÿøgÿøW>ö'ïýÊè‘Ñçêè×ýÜßõyo·Öÿ´ûXÝÇ[ZŸ=rû®…©ÝówÞpýÎÙ©swÞpÃõƒ¹ùëo˜>к¯ý–éý÷xËØ;ýÀÁû÷¾íÖëçæo¸fGëÅ×ìܽcçþ›Ò­{{¨þB=\Ÿý~ŸOdÏè/>¿ç/>¿ï	Œ¯ÝŸÛû„þŽ­ǃë–ñà:uíܵó×.®?”gÌ?cáٳϞ{öü³æŸÜzrû)S·ÎÝ:ÿ´+oÛہ§]uëõ·Þpèɇn|Ê-÷ÍÝ7ßÂ}»ö`jjfnfÞ-¸]n·»ÂíqW»'¹kܵÓ×ÍÞrÛ¡;½òÐùCo8ôŽC8ôè¡'Ö£ñ5í[l}
+oh_ß>°æ曞zK±õù×'ô¶öávÑ«§ŠW¹ïz᏿â-o9ú®;ú±¿üÝWüÒÚñ_^zãÛV>xäƒßÿ‡¿qüç¦ïøð­·¾ä%Gžwãî§ýÀ[Þ÷‘›oþÅ¢xù‹^ðM¯xÊ»ßøþ]ßÚúsÓÿóÇÝ_õñ»_ýÑ|•Ç»òc*n?¶ۏíÇöcû±ýØ~l?¶ۏíÇöcû±ýØ~l?¶ۏíÇöcû±ýØ~l?¶ۏíÇöcû±ýØ~l?¶ۏíÇöcû±ýØ~|mVþÀí­º¿åÆ¥ý¤úïLë¯ù\~z{ãåç^zöâúï·üu£þ_ý™n­mý;=>?ž}üñúߎÿ­·§[_vH?·ÕW›GzùÏ‹©ß²µÏVû­Î×Ü»_¾ùhëÑÇ¿ì…ü™¶¦½uüoúßÎc­­§?ýø—þþ>ÒzÍ×ô÷3_ñ÷é­õ­s<õ¬OýÌOÿÔ/¼òŠÛÿ¢uCþP~éãïûȤþåï|é©»6f¿¹ù‰ý/Þ]I
 endstream
 endobj
-7648 0 obj
-1924
-endobj
-7649 0 obj
-792
-endobj
-7614 0 obj <<
+7608 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-HOWTO/images/idmap-store-gid2sid.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 7650 0 R
-/BBox [0 0 503 45]
+/PTEX.InfoDict 7640 0 R
+/BBox [0 0 536 45]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 7651 0 R
->>/Font << /R9 7652 0 R>>
+/R7 7641 0 R
+>>/Font << /R8 7642 0 R>>
 >>
-/Length 7653 0 R
+/Length 7643 0 R
 /Filter /FlateDecode
 >>
 stream
-xœåU=o1Ýõ+4¦CX‘”Di-Z{/R;1RØm¾Šþý>OŠã!5²¬#ï‰||"u÷>ûÐ~óºÚ¹—æ7.P‰jɯÇþÖ‰&a¯E(Wö;'‡gëÄÔ(–áÃT¯¡bk¶p™Þ¯\÷°â}bÀžst{5xt²Š$*{ˆ`Ï1gû ëì¼æƒ÷Q­+wã°™#›ÿë&ùüåÅ;—d1þ¸w¼ž—ÕÎZ¢¯PĬÚî^4QLíMÖZürçÎ_?Xþt_–îÛ«mÈ	{ÔkM”,B洛B–áÙºT!–Ùðä©ê¡€tÝe¼GÝš¢ù Âûž¢Û«A£{Ô 
-ÄêžJ%Dì1»=’vGgÕtÖÇ•N
-øŽ«k¯q%”ƒµÆÌS³]4›aô—ç(gHª\02MªIÛ ß€n°PÚäŸ _*ª³r€Š¨×Jš‚ž‚Z¸£ó€Ïmp‘1ïù=ßL'À{ŽÇ
-7›Q—Á¶A´
-»T¡$¶÷¼ØÔò¾2©¥v²³.,)Që˨b}¸Æþ@o=w(Y•¦±Êþ’ùuýä7¿ÿÜí®îFpk’^Et8Ù6Åh­JÌ3áÿcÞÊWs¤€ÑÁõœMtâ»]_Ý=^íÕó˜I-¨?gŒŠâc°\»³^Ì÷Û5þéiýc”
-—¬!5ÆöeRÚHÚ=/ûüqÿ9/¦¥
+xœåT»n[1ÝõÓ!¬HJ¢´-‚Ž½éu´°Û¼Šþ~îµ×Cjd
+X"/ŸG‡¼÷Ø‡öÛŸÓν¿4û蕨–üñùpëD
+“°×"”kò;'WŽC³ubjËЈá"Õk¨p­C.øÎ~r]ÃRˆsô=BŠÍ ò>G—§QG× «H¢ràðös/dÝkF]û£î£^'wãàÌ‘Íÿq3tþòâC²ÚnÜ;^îûcÚùkpªøŽÚ .^4QLíKŽAüzçÎVŸ?¾[ÿpŸÖîËKdN”U½ÖDÉ"ðNZ)dš­K`™
+MŽ‘Š hH×eQž¿O®kP'…h¾GÈF†ø¾çèò4êèd5`´º¦RÉ{Ì.?gíš^WÐë>îu¦à›îÿµ|ãJ
+ò¶³ÆÌ3á.'EóœåP•ƦA5)£½”,”6ý'˜¯†‘ªÀ±XEôk¥ÎAO±Z¹ãÖ	pÈmz‘2/>¯§SìW‹Ž/d¤Ëîb3*c%l›‰¶‘—*´4vìÔ¿0¯¥Z2,)Qãf	Tq>\Ãÿ£×¾<°,jm·â"íå^?ùÛ‡_¿ïvWwƒÜhÒ«h °QoÛF¢ÍãUÑ6/ÿßæµõjŽ0=XÒÙDçz·›«»Ç«]+õ<fRêÏâ1úõƝõf¾~ßàŸž6ßF[Ñ°j[ÿ jŒÜø%@I»æ_jŸb¿BÜ¿wN¦ë
 endstream
 endobj
-7650 0 obj
+7640 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610111329)
-/ModDate (D:20080610111329)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528091004-05'00')
+/ModDate (D:20080528091004-05'00')
 >>
 endobj
-7651 0 obj
+7641 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-7652 0 obj
+7642 0 obj
 <<
-/BaseFont /YXRASL#2BLuxiSans-Bold
-/FontDescriptor 7654 0 R
+/BaseFont /GKERRY#2BDejaVuSans-Bold
+/FontDescriptor 7644 0 R
 /Type /Font
 /FirstChar 32
 /LastChar 117
-/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 0 778 0 278 0 0 0 0 0 0 0 0 0 667 0 0 0 0 0 0 0 0 0 0 0 556 0 556 611 0 611 556 0 611 0 278 0 0 278 889 611 611 611 0 389 556 333 611]
+/Widths [ 348 0 0 0 0 0 0 0 0 0 0 0 0 0 380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 830 0 0 821 0 372 0 0 0 0 0 0 0 0 0 720 0 0 0 0 0 0 0 0 0 0 0 500 0 675 716 0 716 678 0 716 0 343 0 0 343 1042 712 687 716 0 493 595 478 712]
 /Encoding /WinAnsiEncoding
-/Subtype /Type1
+/Subtype /TrueType
 >>
 endobj
-7653 0 obj
-576
+7643 0 obj
+570
 endobj
-7654 0 obj
+7644 0 obj
 <<
 /Type /FontDescriptor
-/FontName /YXRASL#2BLuxiSans-Bold
-/FontBBox [ -22 -218 824 741]
+/FontName /GKERRY#2BDejaVuSans-Bold
+/FontBBox [ 0 -235 962 759]
 /Flags 4
-/Ascent 741
-/CapHeight 741
-/Descent -218
+/Ascent 759
+/CapHeight 759
+/Descent -235
 /ItalicAngle 0
-/StemV 123
-/MissingWidth 278
-/CharSet (/n/o/d/p/e/period/D/underscore/r/g/s/G/t/i/S/u/I/l/a/m/b/space)
-/FontFile3 7655 0 R
+/StemV 144
+/MissingWidth 600
+/FontFile2 7645 0 R
 >>
 endobj
-7655 0 obj
+7645 0 obj
 <<
-/Subtype /Type1C
 /Filter /FlateDecode
-/Length 7656 0 R
+/Length1 84392
+/Length 33467
 >>
 stream
-xœ]UiPTW¾î~ݲx6HZ»kÔ„¨¸T”¥ÙD$ 
-²4­½°ÓMd¢£74àDÃbPB¡I‡¨hØR&’ª˜™L*	qD‰£žÇ\25·¡â$óãu½wνßýÎ÷ÝsšAbÄ0Œã¦|“6.ŐëdÔ¥Y#~‚‚Ù‹EùÄ0ýù´Y²m:;á€íEØ^|a‘ôoÎÐã'æƒù$bÓáª`c–9G«ÉÌ㽶¾™àíëë÷¿ÈŠÀÀ@~·ù·’ž«ÕxOúR®3féÓ
-ykù`ºZ§Ó¦ò9+3—OIKKO³nÛ–¢KßË«µ:mV–±€÷
-öæ_]¾|…?ýyu³V¿;?—·²ç7ñVþˆ „\Æ´¬ôMnXž6.?B—¢ßÍ¿²¡´…¢X¤F(…£xä…¶¢H€¶!‚ÐfŒ4m@®T($Faè8zÄlbÚlÍz›‘ZÔ)z"~Q|L<&¾/Iþ*™a“؝l6[ŽàZÁì5瀇]À»r–[B«|¦•~ŽK¹ñÛ–«#ƒ—öD)Éw4ò)ØEŒiPbVLª’³|-¥y ‡ aZè‚
-àEÐ/|*'ž„!¡D=E¬ÕåõŒ¬W•‰|¼[íáíc÷ŒÝUÍÍó¯–Á<¨qn h%V>Å‚·ðÓz“*6³G}8–¹7y¬
-ªÛx9AÅu%´i‡ø£¾¥OFlùê—¼“ÂBC“F>ê³ÂçRàŸ`­õæoØH¤Åþ×Ã4ÒÂ6ÇtG°\þ	Ž°únþ]M·ŠïÑ„7G*Âp’A#[ãx¢Zš425Õ9jïË{K&`þ3F¨…yy>Ž+pY÷¾6ÍdÀ a(çe~DL"ÈÆŸÝÁ&GŸ6ªˆ’-z;-g;NÅ{Ï^ÚWsàÃC=²#òS÷Z®|†[pSQñtቂ£2ÇéNB.81ãà7ÀG4îm,ˆðØù®›#1H0ˆucGÔõDL¥yŸ™)9ݦ‚äú:ò:	ˆ[G$”³õÞ
-TsÞ»r­Ï}o—r£÷®\¹÷þ{‡ÿR­„%Ò²òø ŽÂq)ú ×úÔê:1üð„
-ú㬠Ít×>pså¾ü(Êj)÷àvJòÅhYàKœÈZ²î{"·[mÕ½ª idâÎÐm™uWJ”ă-O9c¸¬ÿ8s°è[*ýªŸï §¢8×(9A|¬7èeïíáAÉÓ¿|úÅȬÚ`OÀƹ“ž	
-âd-`J8"ØÈûÚ(ñ ¥/^©&"M¥®º@Um:»¿·Ö&,ä&ZJªJò_Ü“V©1TT™•Å•ïV¾Û@—³Çˆí?¢a5þ
-ß8ÓÞÔÞôa7îÃc™–ZÚ³0­ªô$®“]jªéRrSÃø£ÜòDjJu,àk¡œ 8_WÎ4$,’嵆=¸»4'?[ÆYviâ³cÄ!à)µoÅø}àz?)6|¤ª5WN—;kâxŸ„Pòd)YF
-I6¼D^‡·&‡Zî]Wq¦|%?°Žð>Á|;×kçåëÁƒ6‡‡ú•Qòwv¥%å§Æú£'ë•“Ò?*;\Šeû+;UÐA›©çknÓ;4lݝ:{û­¦³Óz1¡B²ŽÓËòÀžÞc{ÆK¡–Š„	Çäx¸øM{bÿš†%”`°g YB$7âÁ˨ú¥ð‘©Õˆ·¸mŽËXîñæÇ_POöYþl%l¦®nÑ÷àÒØA¢8¯"l_««Å}n׺ZÆï÷¥n<®œm;_+»ÙöœE&¡ÍEh¥´~”r–¨)a1ú¦Ï•ðˆR¶—»¡0Þéº0Ø®äLQsÅM‡Ô0·hg€vZ/'>¿êÁ‡}ž˜+Ùšài‚j½H’µÂk q¾HÅÖCkÏÊsÎýù}|Q}R°ÙpxÏ7¢‰Ó~%(ØŠëç>Ųþfyÿ;Åe*S)Æê’¸Ò…¼9!ûàäÓéõYÔm¦NÅ ¾v¾«GÆ™°ñhééwdàÇ’õ —s–5©É!;õíWëjnV);OµVœ8r椛ã¿žåAJjÃÜãÊu
-þn03t¹}°£!ëm%™™üá[p–>‰úŒ °¤Ü¸evÏÖ†pS’ãe\×°ôÿgíÀóY;@Õ±jC»¯k[sGΈä“0VÝÉÿRÓ«Êè‹hŽÀá8)G»UUR°%ÝòѮЗ½CÕ!;FOÎŽCúÏB5Oö€'µxZmúHì(#|Eìå3ÔÂÖ1ïœÐZëk’α`kîv`{ÊÞÜß³w@è¿ó”Ѥ
+xœì½	xÅö>\½wWïÝ#²3ì aÉLw  K–	BIXEe’L’$“	«¢ˆ¸€ŠŠ""nˆ‚Šˆ¸!à‚¨¨ˆŠŠ+¨ˆˆ"¢"¸À¿»ç„D^ïú=ÏG$UÓ]uÞsNU÷œ"¹!]‚(4"¯ g ¹ˆÁ:ßGW†«ŸC¯:ß>/ž÷x2™wžìDˆ,,­.«<‡œ|!ª—ólUYÅôÒÄxÕy&g–GÂ%˜gæ#"Û•“Rî<Pj±ÁïÌGÊ+ãÓã‡Hη’ŠXq8ñ¹•…P—E•áiÕ͈ D»OýUáÊHMë%{œÏ~„úÛÕ±ÚøÄn”J‹Ð‹«k"Õ†—íC?!nQJ‰R´}éˆì–¡Ÿ©6ˆt¾J§n»Š(Dû÷EÎÈÙô\¢Ði+éåˆtÞ_Los0I"ˆŠÐN¯#½œØˆÖ£½ÎìÙÄ5Ìf¼;ÚÓוu˜ÙLdRÉT4–®¤ûÓkéÙôZgD]JÏFkœï©ävz)=“~ž‰Æºš9î_W´„J´GKÈ%D&ÑŒÈ$·¡MŽÎ¥Ä@b	яÙÊlE;Ðb„3ršJbbqˆèIŒ%Ö:³£ÃDç“MÚÄbŸ£ñb´Ë`´- çÓF´ÍÑ{/:„jiG*ZÀì »1;Ðf´½ë<GhA:ß[QÝ™Î×A´Mr<³› ™¬kK—’GÐ~by/y„hOÎ—A´q¼yµžHo¡¯rÞ:Þ!H*Hµ¡ÒïÜÌb‰£Ån¶”˜îŒs¿f:8ûÉÍä:ÇƧÑ.Ç.œ@Î$— ]Äjb½£1Bs‰ÕôD®ˆn–°Kè±è€ë´Üæøc„çùh>›ŒÓ,:Håé•®ÇPGfˆ¶ÜPÖ@‹ˆ¡ÜÇDõF3‘Ïyû2˜M‰/g϶B‹èÎÔíŽî$yQ½ßˆéh™J¡¥Þ×BbZˆÖ¡Z䈠:=Á±M‘JòkkÈŽÙ%këi\ÛîI§|ôkœ
+±Fžî_wüøˆ±tfܦåª#¿†îØ~÷½ÜÝ=i؈±þuD—P&ˆ
+MÌtŒuºî'ç±ó<”é½sQ×0ÿ²'®ñ—ûçióÚ÷§EúvGÎÙæ*µBHkûSÍÑ€ºÍ}rÒŸqîßP*uCӐäìE
+
+BÎ	g¾áV8­{ðšNÌ[L O ‘Ø}ÑÄQèSH#ýЧ~ô$‘³ Ï"•| ú<Òɏ¡/º;ú²q[—+ ¯ «ßèkHì·ú:¢ûr	Zpêå¡»}5!¶BŸD<ñ-ô)ä'ŽAŸF~2újJ–@ŸE­ÉùÐçQ;rôEÔ—üúrǾÔ0è+¨¼_Gèk¨I¿ç¡¯#¾ß(ÅP5šŽjP•¡rG~Ô£®N@½œ¯ Ó+rFøQº3&î쳸3:‚¨%9O³Q•3¾‡ÓKCΗ埐Uë}Š8mÄ™3Åù^âŒÄ5åj¡ƒ4ÅÁšäÌ©rF»z„9ÿb¦Ó›ä̍êœÅÎØ°'-âÍ{ù)UÎ÷jgL‘#7êŒó;óczØ{‡ʈUO¯‰–•Çý]Š»ú½zýEÓýéÑxm¼&®LògW÷ð§UTøóÝQµþüHm¤fJ¤¤þÝÔwjaxJå¤XU™?=\þ3#“£뜳®*‹ÔúÃ5´Ê_]WT-ö—Ä*ÃÑ*G³“M,ðt‚L.W9Òc*“Pz¬¢ä¦ø†5šìÿÛSF{kQëx0æù7à¬HÀÙWht¤¦6«òz‚'K®—ÛýT¹®Øî§Ó¤ÔžØ qØžõº”ƪƝåAÞ&‰;KÜõt¾J@ÆGFgnÌikœexòj¼
+ÒÑqæ òx¼ºoÏž%ŽÐ)u=jcu5Å‘ÒXMY¤GUÄyÕHƒú
+U¿©tÜwî&x=âØCS±î¶þ×lVWÒ`çÍtgL¹73꼫öìŠ{ÃõZ7Ã=J®Ô)§xòT;cÝI‡ñ¬ÁÎ×élOl‰°Ókìµß‡ì쀿ÿ…ÿR¨ù׸ӯwƒÍQç
+özq+=_OvžÅœø¿tq-áÉ«ô¤5®¨§S¹÷.v•y(U°êI°î‰ÕJ %öXb¿'yzżկòæWÃN Ä©qØcQØaOFÂÓdÆ=-NÝOÅÞ8w&¤×KpG'tOìåˆwþ{¯]£]ÒÎ[9wn‰×Özz;sÂ`öNA±³C+=)qïM½J^œ¤.'tl at pcš«ÜÙ¿‰Ýï"6øÄ}R흚¡Ø›]¯M‰gAÜÛkEÎÛ¸÷6ÿ!	Ns±£Y'%á“©Þ(÷¢R<Sé=klQ½
+5'íÊ„¶už“­ŽÛ¯ôÖ3±Ö¸Q©uf'ýI'ììéE¿'9q²£àÕ“WÿÏ­®÷\BÛê;:îéÕ°ë,šêù£ò/!ÔŸ†R/ªW…‘Fˆ%Þw#Ék]OLrF{òcêׯÔc¢Dd«_¡b»ÄÓ8
+šöõNg!hv$ƼÈаcQƒ~	ªœñq8
+µ'­?+
+kÏó{6‡=ͱ›OÞk	o$¸$ü'ëóXÐk_éµ
+ñ㯬EÜc"—YÃ`Q“<õgs]ŸLnI »>/õt,TáíÓšOšº>-i´æw]=ƒ†=FŒz1£Âû„OXTâiê®WU#o”Ä«	¤úövObïÖcœêŸÚÿÓ¦z-1XаÃÂÞýu
+NÆ9Õ§Ó-	ֻ›ýƒhŽO¬NgÃ^\i[ÿ¤öÄŽ¬?/§²Gâ\ij¢iªgU‰7¿Ýiø°Ý	»OwõlÛ®Ñ.Kœ™œSø¥È;ï±FºÖÁ9¨ß'Sœ·ÑÓx,┤qàwtµó•`¯°Q#'f4^÷„ÎõOðiOJ¹áý^[:F¼ôGû¤>֝.v—xLPå­{cÎ«¸‘ç¯áß=«µ¿ûÁ’úÓV’ÜÌ¡âDîQ3N–XííèÉÎ÷2X±º»
+ŸˆªÿÎHõÇVÁ‰–žðÔòpòP®óÉÅÉs>¢1N™ï½Ëvžù<.ßy3Úù”é<ÍôÖ%Í{ã¾oçÆ1Nß•˜‡Fy²2òï®ìqÎW¶ßûì~æŒÏud¹sCh¬‡r¤8šå9}WöpçiŽÓ†`œ;#Ãy2Êùìö#7Màå:³
+½³ãÎsuIhZè<o@=Y«l±^³áΧ|Gþx›æÈÎöä¹ú'yù‘ÛÏ=žË÷¤»>r%»23r¼OîÓQN;ÂWàù3ͳ9¡m®gC–ó>aKÈÓ ±	2œv„ƒíŽìèUèyÁE*„‘IÞ:ºödzó]ÔaÞ¨„fy°Ên¿AJðeB×ÿ£O xöç8_~ÏþBçI¡·6iŽüz¹õ{g°'ÁÕ{ÞåÙ—æù!ÏCH÷ƹ^tý™sbÇå7Z•Ï_šgzHižG
+NkI½´Æ«sºÝO öìyžÊñF8~9ã³O<IìÇlÏÖðuBfbß'öDN#ïfx6º+;ÒA
+ÁžJó|w²î:ñôo°"±ið=£‘ÏV?V·^ŸB¹ð4^ãÅ7*Í[ë‚g$Ë;¿ÃAóQ'vXCû3ï„f'û·þՏû+±#!«ûäÌôöShXp‰øOä&bWÈáµb¯Î‰ŸˆÛ'3w㬱!mœw&5Šµ3D썭<e\ÃÓDµ”ଆZ§qîvº
+»¾:NäòõYoCö‘ˆÝ‰š¨qÖ[âå牰öDVóòÀ؉Ìdª÷¶Ó«áî$vRç"‡=îO:UÏE
+²yeØË\´ÚÓxó
+ÿ®2¬öø>2ÕëÇ!3qí«ƒ±îó§TÃõ÷?¿_ÿi× Þ–Óeý_ã­w5ÔRQÏÃn>ÙäÖ úº¬Á'®÷n•§¬zÃîs¥õE§Þ*¸>(k¤y‰çkŒwx.&öâUý×ÿÖé_}Áý¿t„Oº:5óú÷ÝáÓÞùÿÃ÷Aø/ݝœÉ7ҩᮣ~ä_»A=Ý
+þ¯Ý+ùw¯„ÿÿ{¥F÷J
+7ÿß¼WÂ'1ìï^	Ÿ¦Zû_¸W§½Wj°è?s¯„ÿä¾à?s¯„Ñ?z¯Ôð¯NÿÊ{¥†óvò½Ò±ïß.%êóD&ñ¿v»„ÑÉ·K§¿ÝøÏÜ.á?ñ®¿‘ÿ·o™°·Ç~ŸÍüço™ðÿð->å–©¡ÖýOÞ2áÿó–Éÿ»eÂÿÀ-“ÿßvË„=Œv¤õ´Mx;ÍyÿŸ»;§]óÿÖÝþÝÝ‘ÿ¿vw„ÿðî¨áèßw„ÿ»£?“ûï½;ª¬Ì(¿¿ñÁãƧñ-Í¿òÆÿS7>¿¯Ùþލntãóg÷ÿŠšøïäB
+7
+ØÃq?õ@(Ëû-÷çÚÜŸŒ;ñÃtþ.µ‘ˆ¿(R›Úµ‡ÿ/ü\ÿàŠéÕåµþheu¬&)ñ—ÖÄ*ýi5‘)ðC`õÞOÝÕ%~ê®1Æ
+è£#5aBµ?º‡»ÿéüûòûË?è?9Z‹ÃþxM¸$R®™ì•ž*ã‘šÊh­÷3tÑZy¤&â`•Õ„«Ó“Û³œiŽÇjÊ"IþxÌ®šî¯ŽÔÔ:bEqÇcQÇa±£4vFÆË#õ~*.ŽUV;ÃÝñrGºãåHU­ã½vžKÚuu„•øõµ±âhØÁÃ%±âºÊHU<wõ)V8‹ÔÅ•èMðÄJãS÷·ëêiR©®‰•ÔG<1%QÇ°hQ]<âê€Ošä,sqE]‰«ÉÔh¼<Vw”©Œ‹P“p¥#¶®Ö䯌¸VcoƒÔ–'5ÂHr1{ÆjüµgœÑQGU0ÿhW9Glµëè8N¸ÎšZîl¬ßMp—¡´®¦ÊŒxKbþÚX’¿¶®hR¤8î>qí+U8›Í5¨8VUuí¨í‹q¡#.\›ñ,Hì"O› *w–¡6ñÔ]•ê†xç¯-WTà¢xÍQÃ9%á“ìŒU9û¢Æ_«‰œÖl|zu¤4ì õH(uòÛÊðtç´8ÓK¢¥Qw£…+âÎÖs:ŽÐpI‰gyÂuî
+×8zÕU„k°T©–Uyj”%Ϊ3ÉÝ¡ábGH­;£^ŸÚS‘\‘Øð®8½ ˜S¯Gƒ4G½ªŠéþh£mŽ]sj"îïmxcÝN­ëHw]êGÄÙs‘oÒÔXMI­¿Ý‰sØÎÅ®Û¹Ç¶ç2gerà¼Eœ“äJ­sÖÀõÉ”Xô„b‘iqçÄøÃÕÕÎñ
+UDÜ	ÛÉn7,Jy8î/×:#U'ùÄÝu
+»»Ä_WU
+7¨Š=åþÙªÖÆ*ÜSí-›»Ha…=œ³R?°:\<9\ææœÃªv·ê?¶©N‚r–£b¤¢ÔUjHÈŸ•—[è/ÈË*“–ògøGäçÎÎeúÛ¥8ŸÛ%ùÇdÉUèwFä§åŽóçeùÓrÇù‡eçf&ùCcGä‡
+
+p^¾?{øˆœìó,;7#gTfvî`º3/7¯ÐŸ“=<»ÐZ˜çMQÙ¡WØðP~ÆçcZzvNvá¸$œ•]˜ëÈt”Ë÷§ùG¤åfgŒÊIË÷•?"¯ äÈÈtÄæfçfå;(¡á!ÇGPFÞˆqùÙƒ‡&9“
+‡I¸0?-34<-X’ß–瘜ï÷†ôp´tdøC£ÝÉCÒrrüéÙ……ù¡´áîX×;ƒsó†‡pVÞ¨ÜÌ´Âì¼\zÈ1%-='”ÐÍ1%#'-{x’?3mxÚ`לzwXÂœw`wÂàPn(?-'É_0"”‘ív?fç‡2
+½‘ŽïOäxêfäå„FŽr8ãê!’ð˜!!Â1 Íù/ÃÓÌ3?×1וS˜—_xB•1Ù¡$Z~v»"YùyŽºîzæey;`”ãOwñrA_wÜg¿ßÎ(w6˜JËq¸j8ðIcÝšV©Ž»{w"4za4;“¼]›Î\åÜÄ3¯ëÐ’s²<ÖID·Âvé8)z½ðáìn‡‰¡·dJĉ€µn(‰Õà˜L¦Fk½“îP`e,ÁyþÚp…æÌrO‘7ʉ•á
+gZí	5O:P¸ž«k¢Î”©5ѸLüá:çiMtÐp
+Дg¿Á¥!8$ô¯‰ÔV;,©˜ÞÃ[ãr™§I´ª4VS	¦{î+Ž÷­Oâþ2OxI,Žc5e=ü{×?:ýÕߏø×äA8‘ùÿN„ò ÿß̃ðïó òÅž¤ÚzÎ8M‚ڐ°à&Wò×çJø#W‰uø·åJ8q`ÿ©\	ÿs%ܐ+ùÿf®„OÊþF®„ÿ(Wòÿõ\	7Ê•ß“Ò%‡Ï ñ¯J—0¤Kþ*]Â'©ëՍÿê”	WÅüÿtÊ„ÿ¥)†”Éÿ÷S&|jÊäÿ;)>mÊäÿGR&\˜6zøÐ<Wí´!+;Â
+–ÿ3ٮώüÿLv„gGþ¿•áÓfGþ&;r7ëIåDâƒÿ0ññÿ‰þóÄÇÿì%>'çÿwB¯?ÈKp§éñÏüÎ`OïÞn²ó·§wwVâý«^ïßW«g'ÿkáŸÿ†aÏ©ÑÉÑžQ'XMëQ]^Ý"æßúÅOïw¢½?Çg¡ñè4|C½ß¡&…hÄ qˆGÂHD’‘‚T¤!ÈD>tj‚ÎDMQ3Ôµ@-Q+Ôµqti‹Ú¡ö¨êˆ:¡Î¨êŠÎBÝPê'ê…’½ßµRPoÔ¥:.î‡ÎFýÑ 4
+ò®º3¼+é,ïŸ=²ÑP4ÌqÚpï=F ‘(ßûÚQŽícÐX4αå4‹ÎC磉Ž'V¡»Ñeh.z
+-B_ Ëѵh>º
+݇–$š‡>@sÐBt}®A7£+ÑfôúÝŽîG?¢Ða´=ˆ^F[ÐjTä,ÓuŽÿ¶:¾~	½‚^G¯¢mè5ô¥³èo¡7Ðvô³ðÑõèô6Úá,ï×èt•³.îòW:¾¯Bw:kpwq[ë]ÐNq6ÇWÎv˜¦£™è"t!Z‡îB£Yè4íGÐz‚"h‚!X‚#xô:F&DBBÇ	DÈ„B¨Ah„N„Iøˆ3ˆ&Ä™DS¢ÑœhŽ £DK¢ÑšhCø‰¶D;¢=сèHt":]ˆ®ÄYD7ô3z—H"º=ˆžD/"™AÂ"l"…èMô!R‰¾èS´‡èGœMô'‰AD‘Nd™DˆÈ"Cˆl´=L%†9Äp"—È#F#‰|¢ ý‚~EŸ¡½D!1ŠMŒ!ÆãˆñÄ9Äâ\â<â|b"&Šˆb¢„ˆ¥DQNDÑb1™¨ *ÑçhQEĈj⢆¨%âD1…˜JL#¦3ˆ™Ä…ÄEÄ,âbât/1›¸”˜C\FÌ%.'® ®$®"æ󉫉kˆk‰ÄuÄõÄ
+ÄBâFâ&bq3±˜¸…XBÜJ,%n#n'î î$î"–wˉ{ˆ{‰ÄJâ>â~âbñ ±šxˆXC<L¬%!%#'ž ÖOë‰
+ÄFâ)âiââYbñ±™xžxx‘ØB¼D¼L¼Bl%^%¶¯¯oÛ‰7‰·ˆ·‰Ä;Ä»Ä{ÄûÄćÄNbññ1ñ	±›ø”ØC|Fì%>'ö____û‰oˆÄ·ÄAâ;âñ=ññ#q˜ø‰8B%~&~!~%~#ŽÇID$IR$M2$Kr$O
+$&ER"eR!UR#uÒ MÒGžA6!Ï$›’ÍÈæd²%ÙŠlM¶!ýd[²Ùžì@v$;‘É.dWò,²™Dv'{=É^d2 ƒ¤EÚd
+Ù›ìC¦’}É~äÙdr 9D¦‘éd™I†È,r09„Ì&‡’ÃÈr8™Kæ‘#È‘d>Y@’£ÈÑär,9ŽOžCN Ï%Ï#Ï''’a²ˆ,&KÈYJ–‘åd”œDN&+ÈJ²ŠŒ‘Õäd
+YKÆÉ:r
+9•œFN'g3ÉÉ‹ÈYäÅä%älòRry9—¼œ¼‚¼’¼ŠœGÎ'¯&¯!¯%×‘ד7ÉÉ›ÈEäÍäbòr	y+¹”¼¼¼ƒ¼“¼‹\FÞM.'ï!ï%W+ÉûÈûÉÈUäƒäjò!r
+ù0¹–|½‡v“’‘“OëÈ'Éõär#ùù4ùù,¹‰|ŽÜŒ>D;Ñ.ô	z}L>O¾@¾Hn!_"_&_!·’¯’ÛÈ×È×É7Èíä›ä[äÛäòò]ò=ò}òòCr'¹‹üˆü˜ü„ÜM~Jî!?#÷’Ÿ“ûÈ/È/ɯȯÉýä7äò[ò ùyˆüžüü‘<LþD!’?“¿¿’¿‘ÇÈ㢊¤(Š¦Š¥8Š§
+S"%Q2¥P*¥Q:eP&å£Î šPgRM©fTsªÕ’jEµ¦ÚP~ª-ÕŽjOu :R¨ÎTª+uՍJ¢ºS=¨žT/*™
+PAÊ¢l*…êMõ¡R©¾T?êlª?5€H
+¢Ò¨t*ƒÊ¤BT5˜BeSC©aT5œÊ¥ò¨ÔH*Ÿ* 
+©QÔhj5–‡î ÆSçP¨s©ó¨ó©‰T˜*¢Š©*B•ReT9¥&Q“©
+ª’ª¢bèVªšº€ª¡j©8UGM¡¦RÓ¨éÔj&u!u5‹º˜º„šM]JÍ¡.£æR—SWPWRWQó¨ùÔÕÔ5ÔµÔê:êzêj!u#uµˆº™ZLÝB-¡n¥–R·Q·SwPwRwQ˨»©åÔ=Ô½Ô
+j%uu?õ µŠzZM=D­¡¦ÖRPRQSOPë¨'©õÔj#õõ4õõ,µ‰zŽÚL=O½@½Hm¡^¢^¦^¡¶R¯Rۨרש7¨íÔ›Ô[ÔÛÔêê]ê=ê}êêCj'µ‹úˆú˜ú„ÚM}Jí¡>£öRŸSû¨/¨/©¯¨¯©ýÔ7Ôê[ê õuˆúžúú‘:LýD¡ŽR?S¿P¿R¿QǨã4¢	š¤)š¦š¥9š§Ó"-Ñ2­Ð*­Ñ:mÐ&í£Ï ›ÐgÒMéftsºÝ’nE·¦ÛÐ~º-ÝŽnOw ;ҝèÎtº+}ݍN¢»Ó=èžt/:™ÐAÚ¢m:…îM÷¡Sé¾t?úlº?=€H¢Óèt:ƒÎ¤Ct=˜BgÓCéat=œÎ¥óèôH:Ÿ. éQôhz=–G§Ï¡'ÐçÒçÑçÓé0]DÓ%t„.¥Ëèr:JO¢'Ót%]EÇèjúº†®¥ãt=…žJO£§Ó3è™ô…ôEô,úbúz6})=‡¾ŒžK_N_A_I_EÏ£çÓWÓ×Ð×Òèëèëéè…ôôMô"úfz1}½„¾•^JßFßNßAßIßE/£ï¦—Ó÷Ð÷Ò+è•ô}ôýôô*úAz5ý½†~˜^K?B?J?F?N?A¯£Ÿ¤×ÓèôSôÓô3ô³ô&ú9z3ý<ýý"½…~‰~™~…ÞJ¿Jo£_£_§ß ·ÓoÒoÑoÓ;èwèwé÷è÷éèéô.ú#úcúz7ý)½‡þŒÞKN ¿¤¿¢¿¦÷ÓßÐèoéƒôwô!ú{úúGú0ý}„>JÿLÿBÿJÿF£3ˆ!’¡ša–áž̈ŒÄȌ¨ŒÆèŒÁ˜Œ9ƒiÂœÉ4eš1Í™LK¦ÓšiÃø™¶L;¦=ӁéÈtb:3]˜®ÌYL7&‰éÎô`z2½˜d&À‹±™¦7Ó‡Ieú2ý˜³™þÌ f 3ˆIcÒ™&“	1YÌ`f“Íe†19Ìp&—ÉcF0#™|¦€)dF1£™1ÌXf3ž9‡™ÀœËœÇœÏLdÂLSÌ”0¦”)cÊ™(3‰™ÌT0•Lcª™˜¦–‰3uÌf*3™ÎÌ`f221³˜‹™K˜ÙÌ¥Ìæ2f.s9ss%s3™Ï\Í\Ã\Ë,`®c®gn`27271‹˜›™ÅÌ-ÌæVf)ss;ss's³Œ¹›YÎÜÃÜˬ`V2÷1÷30«˜™ÕÌCÌæaf-óó(óó8ó³Žy’YÏl`62O1O3Ï0Ï2›˜ç˜ÍÌóÌÌ‹Ìæ%æeæf+ó*³yyyƒÙμɼżÍì`ÞaÞeÞcÞg>`>dv2»˜˜™O˜Ý̧Ìæ3f/ó9³ù‚ù’ùŠùšÙÏ|Ã`¾e2ß1‡˜ï™˜™ÃÌOÌæ(ó3óó+ósŒ9Î"–`I–bi–aY–cyV`1+²+³
+«²«³k²>ö¶	{&Û”mÆ6g[°-ÙVlk¶
+ëgÛ²íØöl¶#Û‰íÌva»²g±ÝØ$¶;ÛƒíÉöb“Ù d-ÖfSØÞl6•íËöcÏfû³؁ì 6Mg3ØL6Äf±ƒÙ!l6;”Ææ°ÃÙ\6ÁŽdóÙ¶ÅŽfÇ°cÙqìxöv{.{{>;‘
+³El1[ÂFØR¶Œ-g£ì$v2[ÁV²UlŒ­f/`kØZ6ÎÖ±SØ©ì4v:;ƒÉ^È^ÄÎb/f/ag³—²sØËعìåìì•ìUì<v>{5{
+{-»€½Ž½ž½]ÈÞÈÞÄ.bof³·°KØ[Ù¥ìmìíììì]ì2önv9{{/»‚]ÉÞÇÞÏ>À®bdW³±k؇ٵì#ì£ìcìãìì:öIv=»ÝÈ>Å>Í>Ã>ËnbŸc7³Ï³/°/²[ؗؗÙWØ­ì«ì6ö5öuö
+v;û&ûû6»ƒ}‡}—}}Ÿý€ýÝÉîb?b?f?aw³Ÿ²{ØÏؽìçì>ööKö+ökv?û
+{€ý–=È~Çb¿g`d³?±GØ£ìÏì/ì¯ìoì1ö8‡8‚#9Š£9†c9Žã9ÃœÈIœÌ)œÊiœÎœÉù¸3¸&Ü™\S®לkÁµäZq­¹6œŸk˵ãÚs¸Ž\'®3×…ëʝÅuã’¸î\®'׋Kæ\³8›Kázs}¸T®/׏;›ëÏ
+àrƒ¸4.Ëà2¹—Å
+æ†pÙÜPn—Ã
+çr¹<n7’Ëç
+¸Bn7šÍåÆqã¹s¸	ܹÜyÜùÜD.ÌqÅ\	áJ¹2®œ‹r“¸É\WÉUq1®š»€«áj¹8WÇMá¦rÓ¸éÜn&w!w7‹»˜»„›Í]ÊÍá.ãær—sWpWrWqó¸ùÜÕÜ5ܵÜî:îzîn!w#w·ˆ»™[ÌÝÂ-ánå–r·q·swpwrwq˸»¹åÜ=ܽÜ
+n%ww?÷ ·Š{[Í=Ä­áæÖrprqsOpë¸'¹õÜn#÷÷4÷÷,·‰{ŽÛÌ=ϽÀ½Èmá^â^æ^á¶r¯r۸׸׹7¸íÜ›Ü[ÜÛÜîî]î=î}îîCn'·‹ûˆû˜û„ÛÍ}Êíá>ãörŸsû¸/¸/¹¯¸¯¹ýÜ7Üî[î ÷wˆûžûû‘;ÌýÄáŽr?s¿p¿r¿qǸã<â	žä)žæžå9žçó"/ñ2¯ð*¯ñ:oð&ïãÏà›ðgòMùf|s¾ß’oÅ·æÛð~¾-ߎoÏwà;òøÎ|¾+ߍOâ»ó=øž|/>™ðAÞâm>…ïÍ÷áSù¾|?þl¾??€ÈâÓøt>ƒÏäC|?˜ÂgóCùa|?œÏåóøüH>Ÿ/àùQüh~?–ǏçÏá'ðçòçñçóù0_Äó%|„/åËør>ÊOâ'ó|%_ÅÇøjþ¾†¯åã|?…ŸÊOã§ó3ø™ü…üEü,þbþ~6)?‡¿ŒŸË_Î_Á_É_ÅÏãçóWó×ð×òøëøëùø…üüMü"þf~1¿„¿•_ÊßÆßÎßÁßÉßÅ/ãïæ—ó÷ð÷ò+ø•ü}üýüü*þA~5ÿ¿†˜_Ë?Â?Ê?Æ?Î?Á¯ãŸä×óøüSüÓü3ü³ü&þ9~3ÿ<ÿÿ"¿…‰™…ßÊ¿Êoã_ã_çßà·óoòoñoó;øwøwù÷ø÷ùøùü.þ#þcþ~7ÿ)¿‡ÿŒßËÎïã¿à¿ä¿â¿æ÷óßðøoùƒüwü!þ{þþGþ0ÿ„?ÊÿÌÿÂÿÊÿÆãH R Z`Và^,ˆ‚$È‚"¨‚&è‚!˜‚O8Ch"œ)4š	Í…BK¡•ÐZh#ø…¶B;¡½ÐAè(t:]„®ÂYB7!Iè.ôz
+½„d! K°…¡·ÐGHú
+ý„³…þ a 0HHÒ…!S	YÂ`aˆ-†	9Âp!WÈF#…|¡@(F	£…1ÂXaœ0^8G˜ œ+œ'œ/LÂB‘P,”¡T(Ê…¨0I˜,T•B•ª…„¡VˆuÂaª0M˜.Ìf
+
+	³„‹…K„ÙÂ¥Âá2a®p¹p…p¥p•0O˜/\-\#\+,®®n
+7
+7	‹„›…ÅÂ-ÂáVa©p›p»p‡p§p—°L¸[X.Ü#Ü+¬V
+÷	÷«„…ÕÂCÂáaa­ðˆð¨ð˜ð¸ð„°NxRX/l6
+O	OÏÏ
+›„ç„ÍÂó‹Âá%áeáa«ðª°MxMx]xCØ.¼)¼%¼-ìÞÞÞÞ>>v
+»„„…O„ݧÂá3a¯ð¹°OøBøRøJøZØ/|#¾
+ß	‡„ï…„…ÃÂOÂá¨ð³ð‹ð«ð›pL8Ž&0‰)Lc³˜Ã<0Æ"–°Œ¬b
+ëØÀ&öá3p|&nŠ›áæ¸n‰[áÖ¸
+ö㶸n;àŽ¸à®ø,Ü
+'áî¸î‰{ádÀAla§àÞ¸NÅ}q?|6îàxNÃé8gâ΃ñœ‡âa8ǹ8À#q>.À…xÇà±xÏÁð¹ø<|>žˆÃ¸ãÁ¥¸—ã(ž„'ã
+\‰«pWãp
+®Åq\‡§à©xžŽgà™øB|ž…/Æ—àÙøR<_†çâËñøJ|ž‡çã«ñ5øZ¼ _‡¯Ç7à…øF|^„oÆ‹ñ-x	¾/Å·áÛñøN|^†ïÆËñ=ø^¼¯Ä÷áûñx~¯Æá5øa¼?‚ŏáÇñx~¯ÇðFü~­Eàgð³xz=žÇÏ¡GÑcè¼]ŠžCWàçñøEô Þ‚_Â/ãWðVü*Þ†^įá×ñx;~¿…ßÆ;ÐÓèü~¿‡ßÇàñN¼„6âñ'x7þïÁŸá½øs¼¿Ä_á¯ñ~ü
+>€¿Åñwøþÿ€ćñOø>ŠÆ¿à_ñoø>."‘I‘i‘Y‘yQ±(Š’(‹Š¨Šš¨‹†hŠ>ñ±‰x¦ØTl&6[ˆ-ÅVbk±èÛŠíÄöb±£ØIì,vA?‰]ųÄnb’Ø]ì!ö{‰Éb@Š–h‹)bo±˜*öû‰g‹ýÅâ@q˜&¦‹b¦³ÄÁâ1[*sÄáb®˜'ŽGŠùbX(ŽG‹cıâ8q¼xŽ8A<W<O<_œ(†Å"tµX,–ˆ±T,ËŨ8Iœ,Vˆ•b•«ÅıVŒ‹uâqª8Mœ.ÎgŠŠ‰³Ä‹ÅKÄÙâ¥âñ2q®x¹x…x¥x•8Oœ/^-^#^+.¯¯oŠ7Š7‰‹Ä›ÅÅâ-âñVq©x›x»x‡x§x—¸L¼[\.Þ#Þ+®WŠ÷‰÷‹ˆ«ÄÅÕâCâñaq­øˆø¨ø˜ø¸ø„¸N|R\/n7ŠO‰O‹ÏˆÏŠ›ÄçÄÍâóââ‹âñ%ñeñq«øª¸M|M|]|CÜ.¾)¾%¾-îßßßß??wŠ»ÄÄÅOÄÝâ§âñ3q¯ø¹¸OüBüRüJüZÜ/~#¿Šß‰‡ÄïÅÄÅÃâOâñ¨ø³ø‹ø«ø›xL<.!‰H‰’h‰‘X‰“xI°$J’$KŠ¤Jš¤K†dJ>é©‰t¦ÔTj&5—ZH-¥VRk©ä—ÚJí¤öR©£ÔIê,u‘ºJgIݤ$©»ÔCê‰K½¤d)€VJAÉ’l)Eê-õ‘R¥¾h‰ÔÝ‚¾•Î–úK¤Ò )MJG÷HR¦B7HYÒ`iˆ”-
+•†I9Òp)WÊ“FH#ÑR)_*
+¥QÒhiŒ4V'—Α&HçJçIçK¥°T$K%RD*•Ê¤r)*M’&KR%Z!UI1©Zº@ª‘j¥¸T'M‘¦JÓ¤éÒi¦t¡t‘4KºXºDš-]*Í‘.C¤¹ÒåÒèFt“t¥t•4Oš/]-]#]+-®“®—nJ7J7I‹¤›¥ÅÒ-ÒéVi©t›t»t‡t§t—´Lº[Z.Ý#Ý+­VJ÷I÷KH«¤¥ÕÒCÒéai­ôˆô¨ô˜ô¸ô„´NzRZ/m6JOIOKÏHÏJ›¤ç¤ÍÒóÒÒ‹Òé%éeéi«ôª´MzMz]zCÚ.½)½%½-íÞ‘Þ•Þ“Þ—>>”vJ»¤¤¥O¤ÝÒ§Òé3i¯ô¹´OúBúRúJúZÚ/}#¾•JßI‡¤ï¥¤¥ÃÒOÒé¨ô³ô‹ô«ô›tL:.#™I™’i™‘Y™“yY±,Ê’,ËŠ¬Êš¬Ë†lÊ>ù¹‰|¦ÜTn&7—[È-åVrk¹ì—ÛÊíäör¹£ÜIî,w‘»ÊgÉÝä$¹»ÜCî)÷’“倔-Ù–SäÞr9Uî+÷“Ï–ûËäò 9MN—3äL9$gɃå!r¶<T&çÈÃå\9O!”óå¹P%–ÇÈcåqòxùy‚|®|ž|¾<QËEr±\"GäR¹L.—£ò$y²\!WÊUrL®–/käZ9.×ÉSä©ò4yº<Cž)_(_$Ï’/–/‘gË—ÊsäËä¹òåòò•òUò<y¾|µ||­¼@¾N¾^¾A^(ß(ß$/’o–Ë·ÈKä[å¥òmòíòòò]ò2ùny¹||¯¼B^)ß'ß/? ¯BOÊÊ«å‡ä5òÃòZùùQù1ùqù	yü¤¼^Þ o”Ÿ’Ÿ–Ÿ‘Ÿ•7ÉÏÉ›åçåäå-òKòËò+òVùUy›üšüºü†¼]~S~K~[Þ!¿#¿+¿'¿/ (ï”wÉÉËŸÈ»åOå=ògò^ùsyŸü…ü¥ü•üµ¼_þF> +”¿“ÉßË?È?ʇåŸä#òQùgùùWù7ù˜|\A
+¡
+¥Ð
+£°
+§ðŠ `ET$EVEU4EWÅT|ÊJåL¥©ÒLi®´PZ*­”ÖJů´UÚ)í•JG¥“ÒYé¢tUÎRº)IJw¥‡ÒSé¥$+%¨XŠ­¤(½•>JªÒW駜­ôW(•AJš’®d(™JHÉR+C”le¨2LÉQ†+¹Jž2B©ä+J¡2J­ŒQÆ*ã”ñÊ9Êå\å<å|e¢VŠ”b¥D‰(¥J™R®D•IÊd¥B©Tª”˜R­\ Ô(µJ\©S¦(S•iÊte†2S¹P¹H™¥\¬\¢ÌV.Uæ(—)s•Ë•+”+•«”yÊ|åjååZerr½rƒ²P¹Q¹IY¤Ü¬,VnQ–(·*K•Û”Û•;”;•»”eÊÝÊråå^e…²R¹O¹_y at Y¥<¨¬VRÖ(+k•G”G•Ç”Ç•'”uÊ“Êzeƒ²QyJyZyFyVÙ¤<§lVžW^P^T¶(/)/+¯([•W•mÊkÊëÊÊvåMå-åme‡òŽò®òžò¾òò¡²SÙ¥|¤|¬|¢ìV>Uö(Ÿ){•Ï•}ÊÊ—ÊWÊ×Ê~åå€ò­rPùN9¤|¯ü ü¨V~RŽ(G•Ÿ•_”_•ß”cÊq©„Jª”J«ŒÊªœÊ«‚ŠUQ•TYUTUÕT]5TSõ©g¨MÔ3Õ¦j3µ¹ÚBm©¶R[«mT¿ÚVm§¶W;¨ÕNjgµ‹ÚU=Kí¦&©ÝÕjOµ—š¬Ô j©¶š¢öVû¨©j_µŸz¶Ú_ T©ijºš¡fª!5K¬Q³Õ¡ê05G®æªyêu¤š¯¨…ê(u´:F«ŽSÇ«ç¨ÔsÕóÔóÕ‰jX-R‹Õ5¢–ªej¹U'©“Õ
+µR­RcjµzZ£ÖªqµN¢NU§©ÓÕêLõBõ"u–z±z‰:[½T£^¦ÎU/W¯P¯T¯Rç©óÕ«ÕkÔkÕêuêõê
+êBõFõ&u‘z³ºX½E]¢Þª.UoSoWïPïTïR—©w«ËÕ{Ô{ÕêJõ>õ~õu•ú ºZ}H]£>¬®UQUSWŸPשOªëÕ
+êFõ)õiõõYu“úœºY}^}A}QÝ¢¾¤¾¬¾¢nU_U·©¯©¯«o¨ÛÕ7Õ·Ô·Õê;ê»ê{êûêê‡êNu—ú‘ú±ú‰º[ýTÝ£~¦îU?W÷©_¨_ª_©_«ûÕoÔê·êAõ;õú½úƒú£zXýI=¢UVQUS©Ç5¤©Q­1«q¯	ÖDMÒdMÑTMÓtÍÐLͧ¡5ÑÎÔšjÍ´æZ­¥ÖJk­µÑüZ[­Ö^ë uÔ:iµ.ZWí,­›–¤u×zh=µ^Z²Ђš¥ÙZŠÖ[룥j}µ~ÚÙZm€6P¤¥iéZ†–©…´,m°6DËÖ†jôm¸–«åi#´‘Z¾V j£´ÑÚm¬6N¯£MÐÎÕÎÓÎ×&ja­H+ÖJ´ˆVª•iåZT›¤MÖ*´J­J‹iÕÚZV«Åµ:mŠ6U›¦M×fh3µµ‹´YÚÅÚ%ÚlíRmŽv™6W»\»B»R»J›§Í׮֮ѮÕh×i×k7hµµ›´EÚÍÚbím‰v«¶T»M»]»C»S»K[¦Ý­-×îÑîÕVh+µû´ûµ´UÚƒÚjí!mö°¶V{D{T{L{\{B[§=©­×6hµ§´§µg´gµMÚsÚfíyííEm‹ö’ö²öŠ¶U{UÛ¦½¦½®½¡m×ÞÔÞÒÞÖvhïhïjïiïkhj;µ]ÚGÚÇÚ'ÚníSmö™¶Wû\Û§}¡}©}¥}­í×¾Ñhßjµï´CÚ÷ÚڏÚaí'íˆvTûYûEûUûM;¦בNè¤Né´Îè¬Îé¼.èXuI—uEWuM×uC7uŸ~†ÞD?Soª7Ó›ë-ô–z+½µÞF÷ëmõvz{½ƒÞQï¤wÖ»è]õ³ônz’Þ]ï¡÷Ô{éÉz@ê–në)zo½žª÷Õûégëýõú@}ž¦§ëz¦Ò³ôÁú=[ªÓsôáz®ž§ÐGêùz^¨ÒGëcô±ú8}¼~Ž>=‹6éçêçéçëõ°^¤ë%zD/ÕËôr=ªOÒ'ëz¥^¥Çôjý½F¯Õãz>EŸªOÓ§ë3ô™ú…úEú,ýbý}¶~©>G¿LŸ«_®_¡_©_¥ÏÓçëWë×è×êôëôëõô…úúMú"ýf}±~‹¾D¿U_ªß¦ß®ß¡ß©ß¥/ÓïÖ—ë÷è÷ê+ô•ú}úýúú*ýA}µþ¾FX_«?¢?ª?¦?®?¡¯ÓŸÔ×ëôúSúÓú3ú³ú&ý9}³þ¼þ‚þ¢¾EIYEߪ¿ªoÓ_Ó_×ßзëoêoéoë;ôwôwõ÷ô÷õôõú.ý#ýcý}·þ©¾GÿLß«®ïӿпԿҿÖ÷ëßèôoõƒúwú!ý{ýýGý°þ“~D?ªÿ¬ÿ¢ÿªÿ¦ӏÈ Ò Ú`ÖàÞlˆ†dȆb¨†fè†a˜†Ï8Ãhbœi45š͍FK£•ÑÚhcø¶F;£½ÑÁèht2:]Œ®ÆYF7#Éènô0z½Œd#`
+Ë°£·ÑÇH5úýŒ³þÆ c 1ÈH3ҍ#ÓYÆ`cˆ‘m5†9Æp#×È3F#|£À(4F£1ÆXcœ1Þ8ǘ`œkœgœoL4ÂF‘Ql”£Ô(3ʍ¨1ɘlT•F•3ªŒ£ÖˆuÆcª1͘nÌ0f³Œ‹KŒÙÆ¥Æã2c®q¹q…q¥q•1Ϙo\m\c\k,0®3®7n077‹Œ›ÅÆ-ÆãVc©q›q»q‡q§q—±Ì¸ÛXnÜcÜk¬0V÷÷«ŒÕÆCÆãac­ñˆñ¨ñ˜ñ¸ñ„±ÎxÒXol06OOÏÏ›ŒçŒÍÆóÆÆ‹Æã%ãeãc«ñª±ÍxÍxÝxÃØn¼i¼e¼mì0Þ1Þ5Þ3Þ7>0>4v»ŒŒOŒÝƧÆã3c¯ñ¹±ÏøÂøÒøÊøÚØo|c0¾5߇ŒïŒÃÆOÆã¨ñ³ñ‹ñ«ñ›qÌ8n"“0I“2i“1Y“3yS0±)š’)›Š©šš©›†iš>ó³‰y¦ÙÔlf67[˜-ÍVfk³é7ÛšíÌöf³£ÙÉìlv1»šg™ÝÌ$³»ÙÃìiö2“Í€4-Ó6SÌÞf3Õìkö3Ï6û›́æ 3ÍL73ÌL3df™ƒÍ!f¶9Ôfæ˜ÃÍ\3ÏaŽ4óͳÐeŽ6ǘcÍqæxós‚y®yžy¾9Ñ›Ef±YbFÌR³Ì,7£æ$s²YaVšUf̬6/0kÌZ3nÖ™SÌ©æ4sº9Ãœi^h^dÎ2/6/1g›—šsÌË̹æåææ•æUæ<s¾yµyy­¹À¼Î¼Þ¼Á\hÞhÞd.2o6›·˜KÌ[Í¥æmæíæææ]æ2óns¹yy¯¹Â\iÞgÞo>`®24W›™k̇͵æ#æ£æcæãææ:óIs½¹ÁÜh>e>m>c>kn2Ÿ37›Ï›/˜/š[Ì—Ì—ÍWÌ­æ«æ6ó5óuó
+s»ù¦ù–ù¶¹Ã|Ç|×|Ï|ßüÀüÐÜiî2?2?6?1w›Ÿš{ÌÏ̽æçæ>óóKó+óks¿ùyÀüÖ<h~g2¿704›?™GÌ£æÏæ/æ¯æoæ1ó¸ùé£|´ñ±>ÎÇûö‰>É'ûŸêÓ|ºÏð™>Ÿï_ß™¾¦¾f¾æ¾¾–¾V¾Ö¾6>¿¯­¯¯½¯ƒ¯£¯“¯³¯‹¯«ï,_7_’¯»¯‡¯§¯—/Ùð}–Ïö¥øzûúøR}}}ý|gûúûøúùÒ|é¾_¦/äËò
+ö
+ñeû†
+µ¥ñòéÕå‘*.­2\\«â‰–M+ª‰L‰°a¯áÒbe±ªÈd.œhÅŒâhMq]eiEdšXÜÐÇ%±x¸¸8RÇÅ'ºlfqØY’h2ùá8À †€¯Á¡A‘].jD-JHŒx8¸‘Re”Ü «ìDW\«¬DzFÄ!ä”7ôé!EáºÜùÆfÇ£%6ê5\6XK²–D®Ë£‰–ÌJF'‰CaLjèKÃk5ù¤e5‘HUE¸ª$ZÌæ„‹ëâ¶Âk¤œÆã*}`sªð:DZž®p¾±¹‰ùU‰ù¹çW5žŸ›˜_•ppUØý¿àª‰9†
+U•Q‘ª2.Œñy	ãc^#ç•×U•…kê*+Âuq9Öø›ŸÐ¡&¡C~cj됟С&Ñ$fÕzXÐȍµÜXØXZ¼±´Â„˜xÂ#…î’ÆÝ%•XҺĒŽ«êÀªQ	«ê¼†U­*cêÜïò¨“,¬kü‰K_§fL#m§6êkÔŸÞÐgÇ'lá5x|Ã6žq¢ËTĪÊj¹ºªh¯ä>½ M†6 mZZÚh{CÛÚThÓ M‡6ÚLhCÐf%ÚTÀOüTÀMÜTÀMÜTÀMÜTÀMÜTÀMÜTÀMÜÔ,&¯<VSÅÄÜï‰gi`s`§v`§v`§v`§v`§v`§…˜Qf]f:Ø›Ø逝Ø逝Ø逝Ø逝Ø逝Ø逝v§ƒ¿3À߀Ÿø€Ÿø€Ÿø€Ÿø€Ÿø€Ÿø€Ÿø€Ÿ	ø™€Ÿ	ø™€Ÿ	ø™€Ÿ	ø™€Ÿ	ø™€Ÿ	ø™€Ÿ	ø™€Ÿ	ø™€üà‡ ?ø!ÀÙìàÄ©/óx
+è!@zÐC€ô ‡ =г =г =гÀú,°>¬Ïü¬TœæF’Ä!Ÿèri¡DŽ$b]^mE¸¶<я5ô=)^½ M†6 mZZÚh{CÛÚThÓ M‡6ÚLhCÐ&¼HüdÀOüdÀOüdÀOüäÞRAãX]ÛèŒ M’A“dÐ$4IM’A“ h M I 4	€&Ð$ šÀðD < ü à ? øÀ ~ðƒ€ü à?øÁÞ‰æ‘ÚÚIð ‚AP 
+A (‚ €
+X €
+X €
+X €°Àà[€o¾øà[€o¾ø6àÛ€o¾
+ø6àÛ€o¾
+ø6àÛ€o¾
+ø6àÛ€o¾
+ø)€Ÿø)€Ÿø)€Ÿø)€Ÿø)€Ÿø)€Ÿø)€Ÿø)€Ÿø½¿7à÷üÞ€ßð{~oÀï
+ø½¿7à÷üÞ€ßð{~oÀï
+ø 
+@€4  i@ Ò€ ¤H 
+@€4  i@ Ò€ ¤H 
+¤>¤H @:€t  é@ ҁ ¤H ¤~à§>¤H	 %@J€”  )A R‚ ¤H	 %¤~à§>¤H -@Z€´  iA Ò‚ ¤H -@Z€´  iA Ò‚ ¤H -@Z€4  i@ Ò€ ¤H 
+@€4  i@ Ò€ ¤H 
+@ Z ­€Ö@ë õ Ðz h=y!y@ì ö y ˆ< D ¢dõÊjÂSÜ_”.<Ju{Þ»`¯€àžXÐÚЦ@ÛÚ>ry,6Ùû]úF³Ò M‡6ÚLhCÐ&|:
+Nƒ@§A Ó Ðiè4˜Z$÷6ZÀ
+‰Dƒ@¢A Ñ hH4HIyÿ›^
+F“IƒÀ¤A`Ò 0i˜4L&
+“IƒÀ¤A`Ò 0i˜4L&
+“IƒAÀ>iˆ4D"
+‘Hƒ@¤A Ò iˆ4D"
+‘Hƒ@¤A Ò iˆ4D"
+‘Hƒ@¤A Ò h4¢Qƒ@ˆA Ä b1„Bˆ‚@4A š Mˆ&Ø;ÄÄcU±Z¹$©‰ÔFk½O8­¢º<ìu…pU,©ˆDÃR¨º6ꔦÞc>‡÷Ù1èIy•Q·°N|Õh0ΫŒ”%éQgøIXŒ‡E§GâafpØIŠ9Œxôxçåà1…åNv™aáêê0›®,*	“ÃëÈÜ:rl”
+ÈQ*¿<ÆDË*ÃTa¸Žm¨åQ*Ãù;¢6*e7ÒD…õŸqø„¤Hc³#õfGëÍö՝<5a”7Ÿ.r*sbJ"ñ0²è®Iî˸g’+Œ™ì™Tá™”ðAzYUGN‹r±„]TMyŒ­uJf¼†Š;¶>UíØUìüu>21×áRc_«§¨)ůV]ãÕŠX­„™½XOÍd¼{È ˜iÑv2ëÍ«ûêÁ ÔƒA¨ƒP¡B=âq8‚@A Ž Gˆ#Äâq8‚@A¨ƒPH‚@$A ’ T„A¨ƒP¡"Ñ¡"BE„Š0a*Â`àg~àg~àg~Vß‚ЂЂЂÐê²€º, .¨Ë‚ЂÐÒ²€´, -HËÒ²€´, -HËÒ²€´, -HËÒ²€´, -HËÒ²€´, -HËÒ²€´, -HË‚ÊÏ‚ÊϾ²€¯,à+øʾ²€¯,à+øʾ²€¯,à+øʾ²€¯,à+øʾ²€¯,à+øʾ²€¯,à+øʾ²€¯,à+øʾ²€¯,à+øʾ²€¯,à+øʾ²€¯,à+øʾ²€¯,à+øÊ‚ÂÏÞ²€·,à-
+?
+?
+?øÌ>³ ð³ ð³ ð³€ç,à9xΞ³€ç,à9x΂ÂÏ‚ÂÏ‚ÂÏ‚ÂÏ‚ÂÏ‚ÂÏ‚ÂÏ‚ÂÏ‚ÂÏ‚ÂÏ‚ÂÏ‚ÂÏ‚ÂÏ‚ÂÏ‚ÂÏ‚ÂÏ‚ÂϾµ€o-(ü,(ü,(ü,(ü,àcøØ>¶€-(ü,(ü,(ü,(ü,(ü,(ü,(ü,(ü,(ü,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,(ø,¸¶àØ‚ЂЂЂЂЂЂЂЂЂЂÐη  ´  ´  ´€÷-à}xßÞ·€÷-à}xßÞ·€÷-à}xßÞ·€÷-à}xßÞ·€÷-à}xßÞ·€÷-à}xßÞ·€÷-à}xßÞ·€÷-à}xßÞ·€÷-à}xßÞ·€÷-à}xßÞ·€÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷màCøÐÖ?½€màCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÐ>´màCøÏþ³ÿlà?øÏþ³ÿlà=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xÏÞ³÷là=xφOxÏÞ³!žÛÏmˆç6Äsâ¹
+ñ܆xnC<·!žÛÏíôz¹`Äsâ¹
+ñ܆xnC<·!žÛÏmˆç6Äoâ·
+ñ׆økCüµ!þÚmˆ¿6Ä_;³~>èñ׆økCüµ!þÚmˆ¿6Ä_â¯
+ñ׆økCüµ!þÚmˆ¿6Ä_â¯
+ñ׆økC\µ!®ÚWmˆ«6ÄÕˆO)PW¤@½uA
+Ôÿ¯½s“ã¨ï|ÏÖÌJûÔ®´«·V’…,FÞª™îªñïÌt•lÀ€ÖJZY‹%­Ø‡…œwŽ#BpóðÇc^¶‡mˆÎ˜<€$—Cär‰p¸œ	°Èí«žúŽÔpÜ'¹û|îñ¹Ïz¼óŸžíé_uwÍïWõëíŸæ	ó„ù@Â| a>0H˜$Ìæ	ó„ù@Â| a>0H˜$ð_ÿ%ð_ÿ%ð_ÿ%ð_ÿ%ð_ÿ%ðZ¯%ðZ¯%ðZ¯%ðZ¯%ðZ¯%µÎvÙ/x-×x-×x-×x-×x-×x,a|žÀS	<•ÀS	<•ÀS	<•ÀS	<•ÀSIÒÙ.톧x*§x*‡x&gx&gx&gx&gx&gx&gx&gx&a|œ0>N'ŒƯ	ãÕ„qj¸4a¼™À;	¼’À	¼0^K§%|ï¾O	ߧ„ïSÂ÷)é|Ÿ\g}¶Ç8%aœ’0NÑ𔆧4<¥á)͸S3îÔ´OÃ[šq§nu¶× 6©-jJµÔ°¿ÞÓðž†÷4¼§á=ÍþkxOÃ{ÞÓðž†÷4¼§á=
+ïixOÃ{ÞÓðž†÷4¼§á=
+ïixOÃ{šñ¥f|©_jÆ—šñ¥æ¼iΛæ¼iΛæ¼iΛæ<éÎyb<iYú¯¥ÿZú­¥ŸZæƒ=´Ìû,ó8K¿µÌã,ó8ËüÍ2³Ìß,ó7[ïlÇRiýÞ2o³ÌÛ,ó5Ë<Í2/³ÌË,ó1Ë|Ìòý°è·E¿-úmÑo‹~[¾Gý¶è·E¿-úmÑm‹n[tÛÒÿ-ýßÒÿ-ýßÒÿ-ýÞÒß-ýÝÒß-ýÝÒß-ýÝÒ¿-ýÛÒ¿-ýÛÒ¿-ýÛÒ¿-ýÛÒ¿-ýÛÒŸmèÏr<Ì›}•TE­RkÔ˜šP5ÕPëÔµImQ;x–êBm‚ß¿	~ü&øMð›à7Áo‚ß¿	~ü&øMð›à7Áoß¿~üø-ðSÖOY?eý”õSÖO;ëÓÞ”ö¦´7¥½)íMioJ{;ç'¥½)íµà[ð-ø|¾ß‚oÁ·à[ð-ø|¾ß‚oÁwà;ðø|¾߁ïÀwà;ðøü0Ï•ø×ÿZâ_Kük‰-ñ¯%þµÄ·–øÖßZâ[K|k‰o-ñ­%¾µÄ·–øÖßZâ[K|k‰o-ñ­%¾µÄ·–øÖßZâWKüj‰_-ñ«%~µÄ¯–øÕ¿ZâWKüj‰_-ñ«%~µÄ¯–øÕ¿ZâWKüj‰_-ñ«%~µÄ¯–øÕ¿ZâWK|j‰O-ñ©%>µÄ§–øÔŸZâSK|j‰O-ñ©%>µÄ§–øÔŸZâSK|j‰O-ñ©%>µÄŸ–øÓZâOKüi‰?-ñ§%¾´Ä—–øÒ_ZâKK|i‰/-ñ¥%¾´Ä—–øÒ_ZâKK|i‰/-ñ¥%¾´Ä—–øÒ_ZâKK|i‰/-ñ¥%¾´Ä—–øÒ_ZâKK|i‰/-ñ¥%¾´Ä—–øÒ_ZâKK|i‰/-ñ¥%¾´Ä—–øÒ_ZâKK|i‰/-ñ¥%¾´Ä—–øÒ¾‚oÀ7àð
+ø|¾߀_¿~ü:øuðëà×Á¯ƒ_¿~ü:øuðëà×Á¯ƒÎâOKüi‰?-ñ§%þ´ÄŸ–øÓZâOKüi‰?-ñ§%þ´ÄŸ–øÓZâOKüi‰?-ñ§%þ´ÄŸ–øÓZâOKüi‰?-ñ§%þ´Ä–øÑ?ZâGKüh‰-ñ£%~´Ä–øÑ?ZâGKüh‰-ñ£%~´Ä–øÑ?ZâGKüh‰-ñ£%~´Ä–øÑ?ZâGKüh‰-ñ£%~´Ä–øÑ?ZâGKüh‰-ñ£%~´Ä–øÑ?ZâCK|h‰-ñ¡%>´Ä‡–øÐZâCK|h‰-ñ¡%>´Ä‡–øÐZÖ:úìÀwàZâCK|h‰-ñ¡%>´Ä‡–øÐZâ#K|d‰,ñ‘}åóèpŒDzóyC­SÔ&µEM©–JûÑã=ŽÑã=ŽÑã=ŽÑã=ŽÑã=ŽÑã=ŽÑã=ŽÑã=ŽÑcür‰_.ñË%~¹Ä/—øå¿\â—Kür‰_.ñË%~¹Ä/—øåŸ\â“K|r‰O.ñÉ%>¹Ä'—øäŸ\â“K|r‰O.ñÉ%>¹Ä'—øäŸ\âKüq‰?.ñÇ%þ¸¯à¢Ëøå¿\â—Kür‰_.ñË%~¹ŒÑe|s‰o.ñÍ%¾¹Ä7—øæß\â›K|s‰o.ñ»%~·Äï–øÝ¿[âwKün‰ß-ñ»%~·Äï–øÝ¿[âwKün‰ß-ñ»%~·Ä×ö•í£—1z£—1z£—1z£—1z£—1z£—1:£s1:£s1:£sq£ó9Ž:£s1:£s1:£s1:£søÒZâ{J|O‰(ñe¸(a\”0.JáúSÙÇPâJ|@‰(ñ%> ÄôÕPëÔµImQS*íæü$œüD‰Ÿè+øœüE_Ág<ƒßè+øŒgÆ3	ã™>Oáó>Oáó>Oáó>Oáó4\WôµNmP›ÔNJµÔ°Ÿ)z¢)z¢)z¢):¢):¢):¢):¢):¢):¢):Âû)¼ŸÂû)¼ŸÂû)¼ŸÂû)¼ŸÂû)|ŸÂ÷)|ŸÂ÷)|ŸÂ÷)|ŸÂ÷)|ŸÂ÷)|ŸÂ÷)|ŸÂ÷iµƒË~Âû)¼ŸÂû)¼ŸÂû)¼Ÿò}Jù>¥ð~
+ï§ð~
+ï§ð~
+ï§ð~
+ï§ð~Ê|,…ÿSø?…ÿSø?…ÿSø?…ÿSø?…ÿSø?…÷Sx?…÷Sx?…÷Sx?…÷Sx?…÷Sx?…÷Sx?…÷Sx?…ßSø=…ÏSx åû•v¾_ÌRæ)ó…MáÑMáÑMáÑMáÑMáÑMáÑMáÑMáÑ”ùBÊ|!e¾2_H™/¤ÌRæ)ó…”ùBÊ|!e¾2_H™/¤ÌR|¹_.e~2?H™¤ÌRæ)óOYxÊÂSž²ð”…§,<eá)OÙñÎöÔ&µEM©–Úká)OYxÊÂSž²Œ[-|eá+_YøÊÂW¾²ð•…¯,|eá+_YøÊÂW¾²Œ[-ãVYøËÂ_þ²ð—…¿,üeá/YÆ­³ð˜…Ç,<fá1YxÌÂc³ð˜…Ç,<fá1YxŒëÒÂc³ð˜…Ç,<fá1YxÌÂc³ð˜…Ç,<fá1YxÌÂc³ð˜…Ç,<fá1YxÌÂc³ð˜…Ç,ãXŸYøÌÂg>³ð™…Ï,|fá3ŸYøÌÂg>³ð™…Ï,þ’Å_²øK–q”eeGYÆQ–q”eeGYÆQ–q”…/-|i[ÆÃþ´Œ‡-ãaËxØj×ýÊö;ÝÇBye¸_þX»ô¼²óçë=Ç:¯Âçq½Kr½ËWðYÆc–ñ×Á|Ÿñ˜e<fYÆc–ñ×Í$×Í$×Í$×Í|Ÿñ×Ï$×ϤE¸N&¹N&¹Næ+ÛG,zÀu3_Ù>zÀu4Éu4_Ù?ô€ëi’ëi’ëi’ëi’ëi’ëi’ëi’ëi’ëi’ëi’ëi’ëi¾‚p]Mr]ÍWðÑ®³I®³I®³I®³I®³ù
+>zaÑ®»IÛÑü$®»I®»I®»ù
+>~×á$×á$×á$×á$×á$×á$×á$×á$×á$×á|?‰ër²s]Î2±øI?É2¯±øI?Éâ'Yü$‹Ÿdñ“,~’ÅO²øI–ë>_Éâ+Y|%‹¯dñ•¬“ݯ
+_´ëÚ…wAÇU²¸JWÉâ*Y\%‡Z;ÔÚ¡Öµv¨µC­jíPk‡Z»ñÎöÔ&µEM©–öÆ¡Öµv¨µC­jíPk‡:;ÔÙ¡Îuv¨³CjìPc‡;ÔØ¡Æ5v¨±CjìPc‡;ÔØ¡ÆNuðØ?ÔØ¡Æ5v¨±CjìPc‡;ÔØ¡Æ5v¨±CjìPc‡;ÔØ¡Æ5v¨±CjìPc‡ú:Ôס¾õu¨¯C}jëP[‡Ú:ÔÖ¡¶µu¨­Cm*ëPWw¶KûQS‡š:ÔÔ¡¦5u¨©CMjêPS‡š:ÔÔ¡¦5u¨©CMjêPS‡š:ÔÔ¡¦5u¨©CMjêPS‡š:ÔÔ¡¦5u¨©ÃÍp¸7Ãáf8ÜÇ,Æ¡žõt¨§C=êéPO‡z:ÓÁcQO‡z:ÔÓ¡žõt¨§C=êéPO‡z:ÔÓ¡žõt̶³-ÇlË1Ûr¨«C]êêPW‡º:ÔÕ¡®uu¨«C]êêPW‡º:ÔÕ¡®uu¨«C]êêPW‡º:TÕ¡ªUu¨ªCUªêPU‡ª:TÕ¡ªUu¨ªCUªêPU‡š:ÔÔ¡¦5u¨©CMjêPS‡š:ÔÔ¡¦5u¨©CMêéPO‡z:ÔÓ¡žõt¨¦C5ªéPM‡j:TÓ¡šÕt¨¦C5ªéPM‡j:TÓ¡šÕt¨¦C5ªé¸úâ¸úâÐI‡>:ôÑ¡®£\uq\uq\uq\uq᪋:ꫤ*j•Z£ÆÔ„ª©†Z§6¨Mj‹šR;¸.T	¾”½¦¯^˜Ú?9w·€”É@ûŸÛ7ã½÷ÐÀëfò®ýZÿÖÔ~Öasª:8s$z›:rhjÒhpþØLa‘µh¼¢±ŠÆ*«h¬¢±Š­We÷áé#íà°©üß½ç]Q•öV9DUPª¢j³gê
+ûMöûÀ;àTÁ©‚Sã Ô8)5NJ“R©R
+¤H5NFý«±5ö¯n
+ܸ1¸1¸1¸1¸1{ƒƒƒƒƒƒƒƒƒƒƒŸ€Ÿ€Ÿ€Ÿ€Ÿ°½„í%l/a{	ÛKØžf{šíiÚ¯i¿¦ýšökÚ¯i¿Oƒ§ÁÓàið4x<ž¡ý†öð
+ø|¾߀oÀ7àð
+øü:¸upëàÖÁ­ƒÛØ7shæÈaÿ™Ÿœ½ŽwUùÐôì$4­‘tšók±HË´¬Ñ(ïŸ9ruÙ.ÌÎðmjЦǤIÛš´­IÛš´­IÛš §¬Ÿ²~Ê1J9F)Ç"åXbV"“ãeE­RkÔ˜šP5ÕPëÔ&µEM©–öOÊñå/80;yÍüÂ,o ,– CgR,uß±©iÏaó³“ss¼x˜øÚ\þÒŸÞxÚtvjnßìôÑü_IçMš¢8ŠC h¢Š(Z 
+JÅ®+СE	-JhQª´gjn~úðä<´+!FY¹
+r•cP¥ÕZeòÐÔу,AJRVÁ¯‚_¿
+>t)¡K	]JèRB—º”Ð¥¬±ÿЦ„6%´)¡M	mJèRÖìòü‹rpzv—‘öN(a@	JP€2nôøMLM_}pþ`ÿüÁÙ)^Ïõ˜¾¶óºÎkÙø»#JQˆF”	»–О„ö$´'¡=	íA%*aP	ƒJT •0¨ÔàkðaT	£JU¨F•0ª„Q%Œ*aT	£JU¨„Q*Â(a”Š0J_k=“³³3ÇM˜_Ö~µp´·]góÃ~¹æØ‘ðj¯?‰=¬¶ŸoO&×ir&×ir&×ir&×ir&×irƒ&7hrƒ&7hrƒCÓ’%é«î?Õ²½sS¼I#4¢A#4Ö•°®„u%¬K¨¤"TR*ékmpŸG›ž¼Ú¤<»p,š´¥É±hr,š4£I3š4£I3š4£I3š4£E3Z4£E3Z4£Å±hq,Zà·Àoß¿~üø-ð[à·\8–~¤•÷ŒÞÎÂÂсÎËvÿ8µVÞEN-ä½$l'¥]ˆ™“ŠÌIEæ¤"sR‘9©ÈœTdN*2'™“ŠÌI%;âe9.–ãb9.|¾ß‚oÁ·à[ð-ø|¾߁ïÀwà;ðø|¾߁ïÀwà;ðø|f~ÚÑãk>pŸC`?rï›zÃôœ ÏOŸz¯¶|êðÑùëüðcùÕ³yžÌ‘ùeS‡¦硵!è0ÁŽ~åÆò¹…}ž9';o´¨)5`“-©È’TdI*²$}Mú'};f§ç®ñ
+w7
+µNmR[^‡gŽÎÌæ*<y¨×¿8˜ÇóNªL¹úPøö©T„G*Â#ᑾ&½‡f®žÞ7™ç2÷ðrf¶úÈ|>ÇÙ—ƒTüš>á‘ŠðHEx¤"<R©T„GúZí™?è¿ðüDŠwh’¬dÒ#é‘ŠôH•§GÎMž>49Ë2-@’IT¤G*Ò#é‘ŠôH_k=~uõì©óˆ(“©ÈTäF*r#¹‘ŠÜHEn¤"7R‘©ÈTäF*r#¹‘ŠÜHEn¤"7R‘©ÈTäF*r#¹‘ŠÜHEn¤¯®oêõÓ×úqΑ}]ÔšÌHEF¤"#R‘©ÈˆTdD*2"‘ŠŒHEF¤"#R‘©ÈˆTdD*2"‘ŠŒHEF¤"#R‘©ÈˆTdD*2"‘ŠŒHEF¤"#R‘é«l|_]ðÊ5?ØYÈŸ¦æ{üW6ü‚µã~ßM½µ;amÖ¡eÌ„HT¤G*Ò#é‘ŠôHEz¤"=R‘©HT¤GúZëͲý˜ôÐÂo%ƒá­Ã‡æ§ºŽ·i	Ãr$9’ŠIEŽ¤"GR‘#©È‘TäH*r$9’¾ÖüŽÊÙN}¯&©H“T¤I*Ò$i’Š4IEš¤"MR‘&©HT¤G*Ò#é‘ŠôHEz¤"=R‘©HT¤G*Ò#é‘ŠôHEz¤"=R‘©HT¤Gª<=rÿÌüižEøI‘T¤H*R$)’ŠIEŠ¤"R‘é+ŸG˜¬f…0«´óyڍ0“©HT¤F*R#©‘¾rÜfR#©‘ŠÔH_ÁG˜I‘T¤H*R$}aV³B˜I™ô|„Y!Ì
+aV³B˜¬f…0+„Y!Ì*üñµŽqª¬œY`ZeMj¥"µR‘Z©H­ôÕPëÔµImQSª¥ºÙ©kÑ=ÏáÝpiM‘B©H¡T¤N*R'©“¾ºÞ\0ýˆáÐüÑS/÷²54—˜IE̤"fR3©ˆ•TÄJzAdßáRb1‡ŠXC/˜l¯¥
+?Tá‡*üP…ªðC~¨ÂUø¡
+?T™.T™.Ta†*ÌP…ª0Cf¨ÂU˜¡
+3Ta†j«Si=¼JÏæ62ÅmdŠÛ·)n?RÜ~¤¸ýHqû‘âö#ÅíGŠÛTûö££{Í컦½ÌŸ+þüXå~ìç?…ßÇÔ„ª+ÅßÖ©
+jsÙ¡ÅߧTKuËfçÃïÍÏœÜ?Ui?/ÛM¨íµ8‡üi²âO“}ÕTCMˆ9ç1ç<æœÇœó¸îzLûÉþ½3oè¾ØMé\ü³âoœã¬øgÅß8+þÆYñ7ξֻ/–&®UÛ%Î=ô|ó³~ÈÈ
+´€³Î9+ÂITN2ŸÏŽ²LÐÂIá$ŠpE8‰ÊÃIÚŸŸÏëC{™É5á$ŠpE8‰"œDN¢'Qy8Iûó‡°>ú@X‰¯à·êÝA´YäÀ#q˶6'ŠˆEĉ"âDq¢ˆ8QDœøª{¦\»wÁÛùüU…!æDs¢ˆ9Qü9¹"æDs¢øórẺ"æDsâkÜëQG(o±óˆI'Š¤_i"#21"#2$¢(Q‰(ŠDE"Š¯D&FdbD&FdbD&FdbD&FdbD&FdD&ÁªM°jd&Afd&Afd&Afd&Afd†$_Sª¥‚ÏL0A`Û„™aÂ̐$_Á—à#H	‚”àÖ’ã+øT‚@‘$ãgà3=$QF‘(£H”Q$Ê(e‰2ŠDE¢Œ"QF‘(£H”Q$Ê(e‰2ŠDE¢Œ"QF‘(£H”Q$Ê(e‰2ŠD_ë=s~.8u`rß”Ÿ«^{jAÌ-ašÀü0©ºîS‡'ùò$5Y., ]KðŒâÅ
+ŠàEðŒ"xF<£žQÏ(‚gÁ3ŠàEðŒ"xF<£žQÏø
+>3Ä„bÂ‘`_Ág†˜0CL˜!&±«Ìíhñ5¾ªò¾C{Y¨UNMz2Ý?=y¸s‘äEr¯õ¾ÃsŒ•¦¯;W	±Q„Ø(nZQÜ´¢¸iEqÓŠâ¦ÅM+Š›V7­(nZñ•¦0s$G‚£ÁQ„à(Bp!8ŠÅÍ/Š›_7¿(n~QÜü¢¸ùEqó‹âæÅÍ/Š›_7¿(n~QÜü¢¸ùEqó‹âæÅÍ/Š›_7¿(n~QÜü¢¸ùEqó‹âæÅÍ/Š›_7¿(n~QÜüâ'ôà0ºKú¡'¤ÇWpú¡OzÂ{|‡Ñ]Òèà°Ÿè<!?*Aç|à„y †zõxg¹J­Qª¦jÚ¢¦TK
+¸ŠÕP¬†b5«¡X
+Åj(VC±ŠÕP¬†b5«¡X
+Åj(VC±ŠÕP¬†b5«¡X
+Åj(VC±jÕP«†Z5Ôª¡V
+µj¨UC­jÕP«†Z5Ôª¡V
+µj¨UC­ßMã»i.…i.…ixUëßMã»i|7ï¦áV
+·j¸UínÕp«†[5ܪáV
+§j¸TÃ¥.Õp©†35\©áJ
+Wj¸RÕ®Ôp¥†5³Í,C3ËÐÌ24³
+Ej(Rã¨i5£¦áE
+/꤃ÇþÀ‹^Ôð¢†5¼¨áE
+/jxQË^Ôð¢†5¼¨áE
+/jxQË^Ôð¢†5¼¨áE
+/jxQË^Ôð¢†5¼¨áE
+/jxQË^Ôð¢†5¼¨á?
+ÿiøOÃþÓÌ€43 ͬWË^Ôð¢†5¼¨áE
+/jxQË^Ôð¢†5¼¨áE
+/jxQǺÇÌ{4óͼG3ïÑÌ{4ó/¦ñÅ4¾˜ÆÓÌ{4óB¾á]Šð._ÙCyÍPžP/Eh—"´KÚ¥íR„v)B»|eûÕ	ñR„x)B¼|ílŸö2T×Õ5CuÃPÝ ½0è…A/CuƒntàÝ0Õ
+CuƒŽtÄ #1èˆAG:bЃŽtÄ #1èˆAG:bЃŽtÄ #1èˆAG:bЃŽtÄ #1Õ
+zbЃžôÄ '=1è‰AOzbЃžôÄ '=1è‰AOzbЃžôÄ '=1è‰AOzbЃžôÄ '=1è‰AOzbЃžÆê]1ŒÕ
+úbЃ¾ôÅ0V7ŒÕ
+cuƒîÆêý1èAúcЃþôÇð÷×Ë G=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘AãtÃ8Ý0N7è”A§:eÐ)ƒNtÊ S2è”A§:eÐ)ƒNtÊ S2è”A§:eÐ)ƒNtÊ S2Œß
+zeÐ+ƒ^ôÊ W½2è•A¯zeÐ+ƒ^ôÊ W½2øtŸÎàÓ|:ÃuÃp|:ƒOgðé>ázŽázŽázŽÁ°3vWÚàJ;ƒcgpìŽÁ±38vÇÎp=Èp=Èp=ÈàÖÜ:ƒ[gpënÁ­3è¶Á­3¸u·ÎàÖ\sƒ¾ôÝ ï}7è»Aß
+VÁª3Xu«Î ÿý7è¿Aÿ
+úoЃþôß ÿý7è¿Aÿ
+úoЃþô¿Žž×Ñó:ú]G¿ëèC}¨Ãux¡Îù¬s>ëœÏ:ç³Îù¬s>ëœÏ:ç³ÎqªÓî:ín0.i0.i0.i0žh0žh0žh0žh0žh0žh0žh0žh0žh0žh0žh0žh0žh0žh0žh0žh0žh ß
+xµ¯6àÕ¼Ú€Wðjƒã×àø5àÕ¼Ú€Wðj^mÀ«
+xµ¯6àÕ¼Ú€Wðj^mÀ«
+xµ¯6àÕ¼Ú€Wðj^mÀ«
+xµ¯6àÕ¼Ú€Wðj¾kÀw
+ø®ß5à»|×€ïð]¾kÀw
+ø®ß5à»ý¿A?jÒšôŸ&ý§É¸¶É¸¶É¸¶É÷ É÷ É¸¶É¸¶9ÞÙn“Ú¢¦TK
+ûÙ¤6é‡Múa“~ؤ6é‡Múa“~ؤ6é‡Múa“ñj“ñj“ñj“ñj‹ñL‹ñL‹ñL+éü¾F©	US
+µNmP›Ô°ß-Æ%-Æ%-Æ%-Æ%„–(BK¡%ŠÐEh‰"´DZ¢-Q„–(BK¡%ŠÐEh‰"´DZ¢-Q„–(BK¡%ŠÐEh‰"´DZ¢-Q„–(BK¡%ŠÐEh‰"´DZ¢-Q„–(BK¡%ŠÐEh‰"´DZ¢-Q„–(BK¡%ŠÐ_Ág\Kx‰"¼D^¢/Q„—(ÂKá%Šð_ÛŸ«¥a<૤*j•Z£ÆÔ„ª©†Z§6¨Mj‹šR-üüüüüüüüüüüüüüüü|¾ß‚oÁ·à[ð-ø|¾ß‚oÁ·à[ð-ø|¾߁ïÀwà;ðø|¾߁ïÀwà;ðøa<àø¾ÿJ²KÂyvð©ƒ?üéàO:øÍÁo~sð›ƒß|M©–ðà7¿9øÍÁo¾²]ÅvÛUl7ÌÇ}­SÔ&µE_¯À¯‚_¿
+~ü*øUð«àWÁ­‚[·
+nÜ*x5pjàÔØ~í×Ønýª±ýÛ¯±ýÛ¯±ýûUëà°_1ûƒƒ³1x1x1x1x1x1x1x1x1xô›fÂþ%ì_~~~~~~~~~~~~~¾_ƒ¯Á×àkð5ø|
+¾_ƒ¯Á×àkð5ø|
+¾߀oø¼áó†Ï>oø¼áóu>_çóuÚ_§ýuÚ_§ýu>_çó)íNÁµìå}¾ßñyx€°$GX’#,É–äKr„%9Â’aIŽ°$GX’#,É–äKr„%9Â’aIŽ°"GX‘#¬ÈVä“q„É8Âda2Ž0GˆŒ#DÆ"ã‘q„È8Bd!2ŽGˆŒ¯´‹óÊ?ŽàøÇ|×€k8.|¾߀O¿ DÆ"ã‘q„È8Bd!2ŽGˆŒ#DÆ"ã‘q„È8Bd!2ŽGˆŒ#DÆñ08þÇ?ÂàøG!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3ŽGÈŒ#dÆ2ã™q„Ì8Bf!3¾‚ïÀwà;ðø|¾߁ïÀwàËäv{ÇíöŽÛí·Ûûšv/äã¡ÈPT(ÕPj¡Ä¡$¡èPL(õP¡4Ci…‚
+ŵ‹x2àÉ€'žx2àÉ€'žx2àÉ€'žx2àÉ€'ž
+x*à©€§ž
+x*à©€§ž
+x*à©€§ž
+x*à©€§^5àU^5àU^5àU^5àU^5àU^5àU^5àU^5àU^-àÕ^-àÕ^-àÕ^-àÕ^-àÕ^-àÕ^-àÕ^-àÕ^ð‼8àÅ/xq/;‡‹ÃÅaâ°GqØ£8ìJv%»‡]‰Ã®ÄaâÐÜ847͍Csãk77͍C;ãÐÎ8´3íŒig¬C	͍Csã  8 Å(@q JPŸ¼$à%/	xIÀK^ð’€—¼$à¥ásiø\>—†Ï¥ásiø\>—ò¹ÐÎ4´3
+íLC;mh§
+í´¡6´Ó<ðlÀ³Ï<ðlÀ³Ï<ðlÀ³Ï<ð\ÀsÏ<ð\ÀsÏ<ð\ÀsϼÀ`±x®—>KŸ%Ï’ÀgIà³$ðYø,	|¦C/Ð1K&”z(Pš¡´BIC±¡´Ñuè:ôz½@‡^ C/СèÐtè:ôz½@'/	xIÀKžx:à逧žx:à逧žx:à逧žx:à逧ž	x&à™€gž	x&à™€gž	x&à™€gž	x&à™€g^èY:ô,z–=K‡ž¥CÏÒ¡géгtèYÚÅ=û]:¿orvæÈò”ŒÄJ#OO¬\>}hÿTå¢<ç­·5=»oáp~¯W¥•¯[iæ.=éÌüä¾}SGæû/^8rõäìÂáC“ó}éÌÂÞCS털ÞÉÙɽÓû®Ú?“ß°Û~©üë¹ÎB5_,.\59X\ñªÉΪµö玴ÿ]¿¦LžZ˜>2=jáðÔþé°Ð…ÕüÂéÕüÂéÕWÜš+nÍVk6
+¿ñùoúhÛìô‘«Ã/t«°1¿pú#~áôÆtZ\--®–V3Å=0Å=0Å=0ª¸š*®¦Š«ÅÅÕââjqqG‹Ç£Y<Íp<:'èêÉW흜mÿÎXv›Zf\½sòÐüŠüM•˜þ¬šš›Ëõ´³Ü×þиñ?5^×òe^ëÂûù:²ðz¼°¾,¼î¼_ý™Ï¶
+ïw¶ßÊ1
+ïw¶£~æõxáu•×Éϼ–…×ã…×õÂg;¯eŽÛ»wv²}³ÇÌ|eW~°ÂÑ­‡Ó³z!ÌŽÚ;͹zn~r¶sŠ§°Y<…Íâ)l¿ ­â¤Uü‚ÔC¿©:݈4 ç5mvž92ã¿ÉGòNýô;+¦óÛ¦§®)žâ<‘ãg–ëÅå<Cø§—[Íβط¦ò‚¼)á¦ÿ{}j·$–ù?NZxΩ/_.¼o¯ëØÂ:µÂ:ùk×ÞkÝjœ>^ù©C”/œ:xÚ·µ°Z³¸Z³¸Z«¸Z«¸Z«¸ZZ\--®–W³ÅÕlq5[\ÍWsÅÕ
+_aŽVó§Wó…Õdq5Y\MWSÅÕTq5U\­Z\­Z\­Z\­V\­V\­V\-.®W‹‹«%ÅÕ’âjIq5]\MWÓÅÕLq5S\ÍW«W«W«W+ö·´ØßÒbK‹ý--ö·´ØßÒbK‹ý--ö·´ØßÒbK‹ý--ö·´ØßÒbK‹ý--ö·´Øßl±¿Ùb³Åþf‹ýÍû›-ö7[ìo¶Øßl±¿Ùb³Åþf‹ýÍû›-ö7[ìo¶Øßl±¿Ùb³Åþf‹ýÍû›-ö7[ìo6ô·ž—úÁÄäÞ™kÛÜ—ßò“S"¯eáµ*¼®^×
+¯ãÂë¤ðZŸbüš¶;÷OOîün&wî͇v9óNóô;í[iv.IJñË]7–ÎŒ²H”¶GÃþùY¥­Ñ¹Q¥ô¬hÑ/m‹Vûç3xïŒözùkQÚÒþýæèAÿ<í÷ϛڿÝ­óÏ¢1ÿ¼¾ýκöóÚöóšöóêöóhi$ô[m/å¯EiUûõÊöóŠÒ`tƒÿýŠöRþZ”JýÑ[ý{í÷¢‡£r©¿Ô½Ê¿—ÿFøçý{}¥ÞèLÿ^þáŸ'ü{ù;¢ÔÓþäòö󲨿ýœ¢ûÞßÙYi¬*u·÷«Ò~.·×í=êj¿Sj?GÏÜ žy¾È2qò'gWNfâ'g‹ÅLüøGU~|ƒøÑE⇋âŸ2ñƒL<•‰ÿú øÇLü—L|?ÿ0&žÌÄ÷NôV¾—‰½âÄDùïÿ®·ò÷Jü]¯øÏ‹âoß±ºò·™øO‹âoÅwýÂw3q<ßÉÄÌÄ_gâ?dâ¯2ñ—‹â/¾½¶òûŷ׊oÝ6VùÖ~ñÍ?ß^ùæ¢øóíâϾº½òg‹âOÿd¤ò§«ÅŸ|c¨ò'#âC≯÷UžØ"¾Þ'¾æ×øÚ¢øªßþW·‹Ç»¿òø6ñ•?©|åLñÇ_^Yùãñå•â1ÿëÇ6‰/ˆG¿ø`åÑL|ñ»+_|P|ñÆò&žù÷Û+_Ø-¾0Qþ÷ÛÅ¿ËÄ폼}¨òH&>¿Q|.˜‰‡ÿàÜÊËâ>¼¡òçŠÏ~f}å³J|æ¡áÊgÖ‹‡\QyhX<ø@åÁâ~ñiöéL|*ŸŸX)þm&îÏÄ}™¸wøø:ñ±Õâ£~;]ñå#‹âÃ~ýo÷ørÏ
+âC™¸ûLñÁL| ¿Ÿ‰»2ñ{½âÎL¼ÿŽÁÊû3qÇ ¸c¢|»?P·/ŠÛüGn·úrë¢xŸßù÷mïÍÄ{Þý`å=™x÷-»+ï~P¼ûÆò-oÛ^¹e·¸e¢ü»™¸Ù÷Ž›3ñ;;ÅMþƒ7M<#Þå?ú®-â·ûÅ;ý[ï¼Dü–/¿•‰wøãðŽÕâíCâmÛÅofâ72ñÖLü›L¼%ÿ:¿þkÛ+¿ž‰_Û.~5¿’‰_Vâ—n¿˜‰_ÈčëÄ›{Å›2qC&®ÏÄÅ¿Z×eâصwUŽeâÚ»ÄÂü†Ê¢˜ß æÅì
+âõ™8:sveælqdQ^‡Å5™x]&¦3qp_å Wgâ€Sû{+S™Øß+öO”÷íí­ìë{{ÅäžÑÊäMbOi¸²gT\Õ+^›‰Ý™¸Ò/_™‰×¼zCå5™xµ_zõñªL\±(^™‰Wøå‰g^‘‰—gâò1ñ²ñÒ—¬«¼tQ¼Äÿâ%ëÄe/^W¹lQ¼øEÕ¯//—^2R¹tT\²k¸rɈØõ‚ÁÊ®añ‚Aqñ¢¸ÈT.nDØE‘¶+é
+ÑÍÆöJsQ4ü6ÛÅÄ…+*™¸ðùƒ•WˆçŠÎ¨\°Zœ? ÎÛ/ÎÍD}D˜LèU"‰×W’í"®Tâõ"~¸\ë¨ÔFDíÆrUõWª#¢:QVýBŽßU‘™÷Û¿KœÓ/v®Ï;ûÜÊóÅÙ£Û+gŸ+ž»_<g¿8+Ï;ÖWvŒ‰3·ˆícâYÛüxî³ÆĶaqF4P9cQl]!¶N”·ŒˆÍ½blLlÚ¸®²i»Ø¸bUeã:±ñSž3ÞQÞ0 Ö¯»¤²þ±Îƒ®»D¬ÍÄša±Ú£­^£þ½Ñíbd¿X5,VfbØ/gbh¿X18TY±J¬x¸<8$o,øß,Š~%úü®õ­}7–{DïD¹'Ë3±,Ý•ÞJw&*½¢2Q./
+±_tùOuež½*¥a
+ˆÒ§Jûå7JÏýÿã¿èÿvþ7þ·)Šº¢ÙMå•;#-‹6?ä%ëÌ(ŠºKg~¢´¼ò¯»ÊÑ9<qBFCOœxâÄøªá­ÃÛ·o=PŽNΉ
+'¿›Ý´lðGÿ8Û}–ÿLTŠ¾ê7X/ý’ßÖð'£tyu[U:é?~Žÿ¬ÿÜWK³›K¿”Ýàqò(õÊ7¢åÑšhçÄhôpÏo”^½¼kuoTyÞÐÎhuXë?{òÄpÝÿ—oâ©ã÷^¶®TÚ]®æwóž¹­´uKyÍê•£#]˺Ëg•º.xˉÿè{Oÿ tSéòҏM80ý†ìcþñºò½'_ÿwõ—[Ú69?•ýè÷?˜ýpj~2oóg¾SY¬|?Ú]2±}ÝúÕýC=Ñj10´þÓWD}¤ç=âæcÖÉþjtΪçu?wÌ·ê©ã'ñå‘ãOzÒ?þhxe=ü?~ïU›}·w—·m‰†‡¢­ª¼fxgiÛ]£#+}³õð¶á­•Å·gþ^öo²KK•~ñ]¥áënøáõóãïÿÅùWŸõ÷]WÌ8Wº½4Uš.½ÏèìK¹ì™ø^–­òC¦®¼ÍþØu]àˆÎþdô‡]~ä#üq¾äc+.¿äcC—¿æŠOû³1a^|éC•‰Êe±;?•~!{så‹ÏÍ·óN¿ïÏóû¾#úý‰çDÛË#k‡{ûÆ6—GKŸ/~~íG†ËÙþžá›Ÿ=ÖÛ·yòhúÁ‘eëÎxöзOøNñˆßÛö™ʏBöÝ¡ï¯é„‰ËžUªoªÕ7×·ìÛµy×–+zwoºrìµ›_»åÕ[_·qfÓÌØÌæƒ[f¶Ù:ß7ß??pýæë·\¿õ¦¾ßé÷Ø-›ß³å–­wõÝÕ×ÀÝ›î»{óÝ[îÞúìÝù©Ïe÷èÈêÍ¥±ÒèHyëÏÚ1¼º:Ä9¥¥¸ö,ÌË_zãß|Ë/¿jáÎ-ûVöõßÌþãÛÞVê»þM¿úš_×øJiKið¥rå®ìm.½ìüÖڭ걇~ø_’¸d/}áå/r—ŽmÿÚ½õýíí~e›ü í[þxÞùñ[×9ùÙâ±ñÒèÖØüï>ûYߧ¯xæ;å?*¿1ꍶGïxNOw´ns_ôµ5_é¾uðñá-mþÒÆ[·=:|s´mX;Ð3ÐwÁf10rÞ™¾K=òÔ	¥†CW?þÔIHÿæÉz²Îñ¼ôœl¹`ë…;^¸å…[woÙ½õˆ?poÚò¦­Gw¼uË[·¾wË{·~xˇ·~fËg¶Žª±ñÍ­±‰Í/»ló¾±=›eìÆÍï{ûæ;ÆnÛ|ïØÇ6åDZ}ýQ» ´}xk<èê™ù‘«æ_«3º—
+?¿TÝRîºãèë_ó’©·”¦³ß¹øþ_øÈŸûÑó_ÿÕßœûw/ŸûÛùÒ9~àü£Kw¥/|Çá³~íé_¸ëÀî/ÝñGŸÚøòïÜY޸颜_îñ}ìµÝ#Q_´12ºoï|EtûèÍ+Ýðþµ¯Í•kû{ÖmòA©§òN{üÄñöþßÿâ±=c]þë¾ïíFß4•µ|“wŒú.-¢¹ë®››{ã߸ëþ…¯”z³úÊÂý»²[JþÓn»í¼õÖv}cïîì“ÙÓþñÉÝ{ïðÍi·íJ߶A¿0Ú¶æöèñÁáÛ+/¿yðÑÒûÅH9èšXßì;/o[~~ò/Ôñ§ŽŸ:~ºm%OŠá捪ªÕ¢ØØ»rÊÛuïÂW²*õ~eþ¾;ò¶Î^wx¨ëŠŸ¸cß•¥”üd ô‚Ý'¿˜·6ÿi·Í÷¥J¯ïK#ц¨5±5ý³RÏcËŸ¨ÜÚ_úÓµ·®|´ÿæF»–Di×ÀŠó6¶[˜'ÃòøPö”g¦úøýçlºpSÞÌÑ­c¥6ù¦jÚUÂÙ®ôž|pà=o}ý÷nxsöæìñ죥K<Õ,/]½ýØžƒ¿8ÔU=ð¦7µÒìĸ,Å¥5¥•¥s³Ï½óÀ
+G8Ž™«–¯óGñÙžEÏܸBD£­~bÝ­+7ùÓÝóèÀ}Ûn_ùÍèqqf4081º¥Ù}ÞY>ŸŸïãá¨f?x2'hŸ³ç9ùioÕ¸–Õ5ñÖ¼Íþœ·÷#.춸Ëâ/gO•ú¿¼pï.È?”=4ýȾ×ÞÿšÝybæú7̽þúÏî½²ÔZüI©qå¾»Ngÿ˜}gËÖÒš$¾åNÑ}çM·Üzç»nº3ï¯~‡Vú>‘ëáYƒÝÝW~—Ÿ–£¡åC'Ï?¡Ð¢‰žËzöôí¹±§\jSkþ¸§t ïxÙ-å=?¹­{$ûv›?Nosì“Ñû»üsè”.úÍTöTŽVn¬°™ö&ºG~|"hêÝQ´ì~߶GÓgm]ÙS^mé^¶vÅ·¶øéÕ£c÷m\µ,YÙ¿| û⑁•oÞ0°ièÌ ^6åBpòü\HëíÎqÎùçêüã'<×øÇšúxibÅæã;.ÛqtǍ;Þ¾ã£;–í.å_±Õ£~‡ž_êÂÖáЧó½mÿ¾ü@úàÑ?|Ô+zɽèÀLWvóÄK¯>ê6?tõü½â®ƒ‡ŸüÎÓ¯èºx`ãúc×|àÖ§¿Ùuñ×|ð½OÿyyϝWí9uŽMe¥ß¿5Q<±ÖäRï·V>>úèÐ}ƒ¥®è¢áCù@ 0Ãùy?ÉYrüþ=ën\¾~±oÚŽ §[WY™Ý<04zñΣ7ægä%Ÿ8ò¹/vÝýô+fJï~Ç‘õÛv|øwÛíØ»ûÉèÔ÷m‡oGŸoÉó&Vuß¾2º½ÿÑ•7¯íi®¸T4GÏ£äîÉñOèU®»h•(piÞ;ß,ÿÜõ‡Çn¸áØÂõ×/”¶–lö`öWÙ_fŸ.]$Þø¡ÛoÿPþSŠ²/d'üã%SñÚrOöŠÊk}[r^:obÓi^ztðæÒ_Šû6yNšh³S5‡ŽÿYjÚ~êpÀ—«
+MíZ™—eÞé)tÎÓÓOßßÝ{g0…Î9´ÍLíó%Nø¶
+Gzbõð`O÷²H<Ü÷ÛƒöÜ·¬·{ Z>´2ï|«òηü™‡Í«icŽçC¦á¶˜•~öT­'ÎÙ}Î[Þ•·ÇÞwÃÊç<[œ³zôã¿÷ôÉòžO™•¼Ÿ¼Îkë^»#úöÄÄ@×`_2¶y¬Ò½lyO¥Ü›lÞ<¶=Œ]¢ÇJO”G}bí­Ãå[·?zzüò²
+/õ˜ËÎxá³sîyâÄñŸÁüàÉ¡<¹Ò#.yÙˆ¿ç¿”Wqïò>?ª›xmOOOoO__ß@ϊʶõýëÖ®]qöò=;{wöíìß9pÖ–úòózÎë=¯ïÜþs.éÙÕ»«oWÿÅÇú
+<°üžzè{ ÿíƒÝƒË—ööôéϺ꬞ÝÑO
+pÊ«ÛœSŒ×à$ù—oÍÜŸ\u`ß%“–V}6ûQ¶8ó½®ùëùé×½àð…ÿððS'÷}³|Aöýññjüܝ}=ÛnûÐ}÷oÛVªÕݏŸ3°|ìŽß»÷ž±ü¸nðçóÎÊû¢UÑá‰õƒ•å+ÄíÃ¥û–ßõ.ïëéêñlhåàå#…áå%ΟV¶šƒ9¿œÿÈÉóyde{ìòȉ§ÎÏÉ%'–µF®êòZ¬Z1|Y×eâ²Ñ=]{DØÑœ0GVŸç_ø±‡W‡»ª¥×go{þ•ŸÊ¾üÄÇï½·ò¾ìsÏDÙöég¢?QúV)*=¿Í·ùïjwyO´Î;6x±)õkäñ57•î[Ùíç+†/òÜ1´>¨v ½ãê4sl¸qƒÿvøÙŒŸ9ø#½&ÞS:~æm¥ƒ]ƒÃ«/òÜ‘“ñKþíáÏ}©t×=G_“}oç¯Û°íÌ{~·ë¬ŸÜvìqæ?û8ÿâqcûñMÿÈþûGé·þ»Jwuw½É?gøǯûǽíÇãå‰ò/—­¬õË»£îWwß±ôXz,=–K¥ÇÒcé±ôXz,=–K¥ÇÒcé±ôXz,=–K¥ÇÒcé±ôXz,=–K¥ÇÒcé±ôXz,=–K¥ÇÒãÿÅGþ’¸Ô®ù_žç8¹ÞÿtGÿì⧖†î:;¢è9ÑÙ§“¯šQj£‹.ŽvE—FÑ‹/{ÉK_½ü¯¼âŸÇý?ö_9z¬ý\ΏÏ÷žyÆ?oÉŸýr9úÙðÓÿýüÃñóÿÛÑ~~Žÿ9ûçü6ù9ïåÿ5ýOYÿ|Qt±Þå.mÿæÅÑeÑK¢—F/ó¯_½"zetE»ÍQéíQå_ܪå?½øýèûÏüÔ¡ÏDå/G:?]_ôéáGôF_ýßñÓ}gôЩŸwDòŸ®Åè¡ÉOåóÑ;ÿg~ò‘ÿTDWTˆîáçÊÊa¿|¸ýÞ•ùO×g£{Š?Ë_Ý]¹×¯ûæÓŸÿÝSþ|ô:ñõhƒÿÝmícÝuî_üc}àªçÿ ÚNÎç¿øžwêgO~wÅ—{øuO¹ÿã·I
 endstream
 endobj
-7656 0 obj
-1807
-endobj
-7613 0 obj <<
+7607 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [112.623 300.575 168.433 312.143]
 /Subtype /Link
 /A << /S /GoTo /D (idmap-store-gid2sid) >>
 >> endobj
-7637 0 obj <<
-/D [7635 0 R /XYZ 100.892 685.529 null]
+7629 0 obj <<
+/D [7627 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5239 0 obj <<
-/D [7635 0 R /XYZ 100.892 660.623 null]
+/D [7627 0 R /XYZ 100.892 660.623 null]
 >> endobj
-7633 0 obj <<
-/D [7635 0 R /XYZ 100.892 643.753 null]
+7625 0 obj <<
+/D [7627 0 R /XYZ 100.892 643.753 null]
 >> endobj
 5240 0 obj <<
-/D [7635 0 R /XYZ 100.892 285.425 null]
+/D [7627 0 R /XYZ 100.892 285.425 null]
 >> endobj
-7638 0 obj <<
-/D [7635 0 R /XYZ 100.892 268.555 null]
+7630 0 obj <<
+/D [7627 0 R /XYZ 100.892 268.555 null]
 >> endobj
-7634 0 obj <<
+7626 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R >>
-/XObject << /Im32 7610 0 R /Im33 7614 0 R >>
+/XObject << /Im32 7604 0 R /Im33 7608 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7659 0 obj <<
+7648 0 obj <<
 /Length 2012      
 /Filter /FlateDecode
 >>
@@ -33479,33 +35804,33 @@
 Ë‹9\ŒCgè,_:Ø1'6ò›úk¶žHbééûÑ×)­»ÏƒXÂëLòoÃpâš½îø'Œ'ØæÁw‹žM¨(ìÕÜΫr@š"U”*}Œê«Ç+ó+ôzâ¢7Þ Ðþûêvñ/7…£é
 endstream
 endobj
-7658 0 obj <<
+7647 0 obj <<
 /Type /Page
-/Contents 7659 0 R
-/Resources 7657 0 R
+/Contents 7648 0 R
+/Resources 7646 0 R
 /MediaBox [0 0 612 792]
-/Parent 7621 0 R
+/Parent 7615 0 R
 >> endobj
-7660 0 obj <<
-/D [7658 0 R /XYZ 151.701 685.529 null]
+7649 0 obj <<
+/D [7647 0 R /XYZ 151.701 685.529 null]
 >> endobj
 934 0 obj <<
-/D [7658 0 R /XYZ 151.701 522.825 null]
+/D [7647 0 R /XYZ 151.701 522.825 null]
 >> endobj
-7661 0 obj <<
-/D [7658 0 R /XYZ 151.701 494.184 null]
+7650 0 obj <<
+/D [7647 0 R /XYZ 151.701 494.184 null]
 >> endobj
-7662 0 obj <<
-/D [7658 0 R /XYZ 151.701 240.243 null]
+7651 0 obj <<
+/D [7647 0 R /XYZ 151.701 240.243 null]
 >> endobj
-7663 0 obj <<
-/D [7658 0 R /XYZ 151.701 217.329 null]
+7652 0 obj <<
+/D [7647 0 R /XYZ 151.701 217.329 null]
 >> endobj
-7657 0 obj <<
+7646 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7666 0 obj <<
+7655 0 obj <<
 /Length 1934      
 /Filter /FlateDecode
 >>
@@ -33530,30 +35855,30 @@
 £$¡Ž>ëÙ8ö¦ê5ÚÃA4Šk1¼<ҍ&Á™/|5””Kí`æF¢¸,»6®ý¬ÄGãÍÂ÷áHfJ4~dœ$Ofœ¡5µ¾/—‡ó–7[¢%Ÿ/Ü×1wÍzaa|J²Ü4›!}§ÃN*-!”–ù¹ÀÅ9âzWÛšY—ÿ/a„OXzîpå™åÉ•ÊxÂ÷«¸é¿·aÚQãìœGnVèI\(šK颔NuY:Õ’p|6o-éâÙßHßíVÿ“N
 endstream
 endobj
-7665 0 obj <<
+7654 0 obj <<
 /Type /Page
-/Contents 7666 0 R
-/Resources 7664 0 R
+/Contents 7655 0 R
+/Resources 7653 0 R
 /MediaBox [0 0 612 792]
-/Parent 7621 0 R
+/Parent 7615 0 R
 >> endobj
-7667 0 obj <<
-/D [7665 0 R /XYZ 100.892 685.529 null]
+7656 0 obj <<
+/D [7654 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7668 0 obj <<
-/D [7665 0 R /XYZ 100.892 660.623 null]
+7657 0 obj <<
+/D [7654 0 R /XYZ 100.892 660.623 null]
 >> endobj
 938 0 obj <<
-/D [7665 0 R /XYZ 100.892 269.101 null]
+/D [7654 0 R /XYZ 100.892 269.101 null]
 >> endobj
-7669 0 obj <<
-/D [7665 0 R /XYZ 100.892 242.246 null]
+7658 0 obj <<
+/D [7654 0 R /XYZ 100.892 242.246 null]
 >> endobj
-7664 0 obj <<
+7653 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7672 0 obj <<
+7661 0 obj <<
 /Length 2349      
 /Filter /FlateDecode
 >>
@@ -33579,27 +35904,27 @@
 |cëGvùÒî>'žÙ¯Û_XS?Mº+tb8Y?§²6½­V{|zwßÌÝïwÿ†¡i‡
 endstream
 endobj
-7671 0 obj <<
+7660 0 obj <<
 /Type /Page
-/Contents 7672 0 R
-/Resources 7670 0 R
+/Contents 7661 0 R
+/Resources 7659 0 R
 /MediaBox [0 0 612 792]
-/Parent 7621 0 R
+/Parent 7615 0 R
 >> endobj
-7673 0 obj <<
-/D [7671 0 R /XYZ 151.701 685.529 null]
+7662 0 obj <<
+/D [7660 0 R /XYZ 151.701 685.529 null]
 >> endobj
 942 0 obj <<
-/D [7671 0 R /XYZ 151.701 660.623 null]
+/D [7660 0 R /XYZ 151.701 660.623 null]
 >> endobj
-7674 0 obj <<
-/D [7671 0 R /XYZ 151.701 628.154 null]
+7663 0 obj <<
+/D [7660 0 R /XYZ 151.701 628.154 null]
 >> endobj
-7670 0 obj <<
+7659 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7677 0 obj <<
+7666 0 obj <<
 /Length 2350      
 /Filter /FlateDecode
 >>
@@ -33628,21 +35953,21 @@
 Øèæf±rÆÚŒ÷àÐ!p]‚T¯˜¦ìL=Ô@bÒ»¸]HtÎl|±°* UñÿÕUß	!…Zª¾VK¡™+ÄýÓ‚öµŠQtQC_ŸÉÝ—W¡WtYïþá—÷¿I`Þ
 endstream
 endobj
-7676 0 obj <<
+7665 0 obj <<
 /Type /Page
-/Contents 7677 0 R
-/Resources 7675 0 R
+/Contents 7666 0 R
+/Resources 7664 0 R
 /MediaBox [0 0 612 792]
-/Parent 7621 0 R
+/Parent 7615 0 R
 >> endobj
-7678 0 obj <<
-/D [7676 0 R /XYZ 100.892 685.529 null]
+7667 0 obj <<
+/D [7665 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7675 0 obj <<
+7664 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7682 0 obj <<
+7671 0 obj <<
 /Length 2074      
 /Filter /FlateDecode
 >>
@@ -33665,54 +35990,54 @@
 ©ã]ÿ4à†{Ɛ+#î°‹î¶nâ…ô¦ÒòòjZÆ%Íòp´êÌÇíßU<þÿ#“.7ÀpûÀs¤2jgþoŽìÚˆ¸ôé?•„ÿÜñ"'óдÍ$õ†µœ¡AÏ^,³ÿ¾Úßý×}©•
 endstream
 endobj
-7681 0 obj <<
+7670 0 obj <<
 /Type /Page
-/Contents 7682 0 R
-/Resources 7680 0 R
+/Contents 7671 0 R
+/Resources 7669 0 R
 /MediaBox [0 0 612 792]
-/Parent 7689 0 R
-/Annots [ 7679 0 R 7687 0 R ]
+/Parent 7678 0 R
+/Annots [ 7668 0 R 7676 0 R ]
 >> endobj
-7679 0 obj <<
+7668 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [480.269 333.147 511.352 346.049]
 /Subtype /Link
 /A << /S /GoTo /D (rights) >>
 >> endobj
-7687 0 obj <<
+7676 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 319.598 319.515 332.5]
 /Subtype /Link
 /A << /S /GoTo /D (rights) >>
 >> endobj
-7683 0 obj <<
-/D [7681 0 R /XYZ 151.701 685.529 null]
+7672 0 obj <<
+/D [7670 0 R /XYZ 151.701 685.529 null]
 >> endobj
 946 0 obj <<
-/D [7681 0 R /XYZ 151.701 539.165 null]
+/D [7670 0 R /XYZ 151.701 539.165 null]
 >> endobj
-7684 0 obj <<
-/D [7681 0 R /XYZ 151.701 509.719 null]
+7673 0 obj <<
+/D [7670 0 R /XYZ 151.701 509.719 null]
 >> endobj
-7685 0 obj <<
-/D [7681 0 R /XYZ 151.701 488.437 null]
+7674 0 obj <<
+/D [7670 0 R /XYZ 151.701 488.437 null]
 >> endobj
-7686 0 obj <<
-/D [7681 0 R /XYZ 151.701 466.345 null]
+7675 0 obj <<
+/D [7670 0 R /XYZ 151.701 466.345 null]
 >> endobj
 950 0 obj <<
-/D [7681 0 R /XYZ 151.701 229.864 null]
+/D [7670 0 R /XYZ 151.701 229.864 null]
 >> endobj
-7688 0 obj <<
-/D [7681 0 R /XYZ 151.701 202.732 null]
+7677 0 obj <<
+/D [7670 0 R /XYZ 151.701 202.732 null]
 >> endobj
-7680 0 obj <<
+7669 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7693 0 obj <<
+7682 0 obj <<
 /Length 2163      
 /Filter /FlateDecode
 >>
@@ -33740,36 +36065,36 @@
 nAË_tø:ç,+ÿRÂüÿ%•T
 endstream
 endobj
-7692 0 obj <<
+7681 0 obj <<
 /Type /Page
-/Contents 7693 0 R
-/Resources 7691 0 R
+/Contents 7682 0 R
+/Resources 7680 0 R
 /MediaBox [0 0 612 792]
-/Parent 7689 0 R
-/Annots [ 7690 0 R ]
+/Parent 7678 0 R
+/Annots [ 7679 0 R ]
 >> endobj
-7690 0 obj <<
+7679 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.259 341.279 456.646 352.968]
 /Subtype /Link
 /A << /S /GoTo /D (WKURIDS) >>
 >> endobj
-7694 0 obj <<
-/D [7692 0 R /XYZ 100.892 685.529 null]
+7683 0 obj <<
+/D [7681 0 R /XYZ 100.892 685.529 null]
 >> endobj
 954 0 obj <<
-/D [7692 0 R /XYZ 100.892 504.757 null]
+/D [7681 0 R /XYZ 100.892 504.757 null]
 >> endobj
-7695 0 obj <<
-/D [7692 0 R /XYZ 100.892 478.25 null]
+7684 0 obj <<
+/D [7681 0 R /XYZ 100.892 478.25 null]
 >> endobj
-7691 0 obj <<
+7680 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R /F88 5678 0 R /F72 5679 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7699 0 obj <<
+7688 0 obj <<
 /Length 2175      
 /Filter /FlateDecode
 >>
@@ -33792,33 +36117,33 @@
 ˺™‹9Ì¥˜K@ã¥ÄïÅ\€3R‚ø†Æ.Ð=!ñ¢ýèü?íãíK¶ӁŸDUIê±ÛÛÓCá’ÙM‡T'¡÷aÇÞã}ÙØuüæºz
 endstream
 endobj
-7698 0 obj <<
+7687 0 obj <<
 /Type /Page
-/Contents 7699 0 R
-/Resources 7697 0 R
+/Contents 7688 0 R
+/Resources 7686 0 R
 /MediaBox [0 0 612 792]
-/Parent 7689 0 R
+/Parent 7678 0 R
 >> endobj
-7700 0 obj <<
-/D [7698 0 R /XYZ 151.701 685.529 null]
+7689 0 obj <<
+/D [7687 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5322 0 obj <<
-/D [7698 0 R /XYZ 151.701 633.68 null]
+/D [7687 0 R /XYZ 151.701 633.68 null]
 >> endobj
-7696 0 obj <<
-/D [7698 0 R /XYZ 151.701 618.931 null]
+7685 0 obj <<
+/D [7687 0 R /XYZ 151.701 618.931 null]
 >> endobj
 958 0 obj <<
-/D [7698 0 R /XYZ 151.701 272.75 null]
+/D [7687 0 R /XYZ 151.701 272.75 null]
 >> endobj
-7701 0 obj <<
-/D [7698 0 R /XYZ 151.701 244.679 null]
+7690 0 obj <<
+/D [7687 0 R /XYZ 151.701 244.679 null]
 >> endobj
-7697 0 obj <<
+7686 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7707 0 obj <<
+7696 0 obj <<
 /Length 1390      
 /Filter /FlateDecode
 >>
@@ -33832,54 +36157,54 @@
 O?\ò;‡Ř£oü¡³a2s|ÞûX gøß}~«F«0É(¾ýf³«ôf'ÑW9<v†å›u¥XYíÀÝ; Âg‡gã²ÒuÓÕ¶ÄÛñ¡£¶4ÄÙÓ´œ«™z××-À3×r¢ÿ¨UùçBö¨?©nþÏp¶"Á_S‹S•âL&Ötô«ï_‘`z—ß›Y8J}PO0ÂŽ€ã÷rœ½ÐÊEj’¸†1ÛÿÛ=~ÿ¬tÙ\Uý¥éFÈ•.— ,ÚeP®s¶“‹;¿ÆÓ©N3j Êl¦¨n^‡›A÷ãW,ÖÕ/¹õâêϝ~‚Øݯ¿à@Z—æ|*§¹yzÄÙQ¶­Ò‹Y¨Š#ÑõslQéKE0³Þ¹xCå!þO÷ø…w{'PÀèÙ²]î QÄx:©8ôLZ¨Mð'ÀHÒ¼vmh"Ãã-K轹âkÕ>ÏU[üà`/ýDttOh-Ò…'	H¯Å&®˜FKj¥ªz­ÓÔ>짬˜z¤¢îuÄs©OQ¿ªåäÉŠ±¨ñIZ²Ù¡Nÿj윣
 endstream
 endobj
-7706 0 obj <<
+7695 0 obj <<
 /Type /Page
-/Contents 7707 0 R
-/Resources 7705 0 R
+/Contents 7696 0 R
+/Resources 7694 0 R
 /MediaBox [0 0 612 792]
-/Parent 7689 0 R
-/Annots [ 7702 0 R 7703 0 R ]
+/Parent 7678 0 R
+/Annots [ 7691 0 R 7692 0 R ]
 >> endobj
-7702 0 obj <<
+7691 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.582 463.388 283.837 475.077]
 /Subtype /Link
 /A << /S /GoTo /D (smbgrpadd.sh) >>
 >> endobj
-7703 0 obj <<
+7692 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [345.91 131.677 421.42 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (smbgrpadd) >>
 >> endobj
-7708 0 obj <<
-/D [7706 0 R /XYZ 100.892 685.529 null]
+7697 0 obj <<
+/D [7695 0 R /XYZ 100.892 685.529 null]
 >> endobj
 962 0 obj <<
-/D [7706 0 R /XYZ 100.892 622.026 null]
+/D [7695 0 R /XYZ 100.892 622.026 null]
 >> endobj
-7709 0 obj <<
-/D [7706 0 R /XYZ 100.892 589.863 null]
+7698 0 obj <<
+/D [7695 0 R /XYZ 100.892 589.863 null]
 >> endobj
 966 0 obj <<
-/D [7706 0 R /XYZ 100.892 530.799 null]
+/D [7695 0 R /XYZ 100.892 530.799 null]
 >> endobj
-7710 0 obj <<
-/D [7706 0 R /XYZ 100.892 501.648 null]
+7699 0 obj <<
+/D [7695 0 R /XYZ 100.892 501.648 null]
 >> endobj
 5060 0 obj <<
-/D [7706 0 R /XYZ 100.892 408.188 null]
+/D [7695 0 R /XYZ 100.892 408.188 null]
 >> endobj
-7711 0 obj <<
-/D [7706 0 R /XYZ 100.892 391.318 null]
+7700 0 obj <<
+/D [7695 0 R /XYZ 100.892 391.318 null]
 >> endobj
-7705 0 obj <<
+7694 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7715 0 obj <<
+7704 0 obj <<
 /Length 1842      
 /Filter /FlateDecode
 >>
@@ -33900,56 +36225,56 @@
 8°? ÇéØfrQÁÂ.÷D3øxКÁ‡,TFí–Ƨ@¹£³Ì[Ž)‰Kœ xJoØ[•Þ¤Õ¦çïþi,ÿ#d™ÌR:X€=ýëK3”
 endstream
 endobj
-7714 0 obj <<
+7703 0 obj <<
 /Type /Page
-/Contents 7715 0 R
-/Resources 7713 0 R
+/Contents 7704 0 R
+/Resources 7702 0 R
 /MediaBox [0 0 612 792]
-/Parent 7689 0 R
-/Annots [ 7704 0 R ]
+/Parent 7678 0 R
+/Annots [ 7693 0 R ]
 >> endobj
-7704 0 obj <<
+7693 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 453.62 225.879 465.31]
 /Subtype /Link
 /A << /S /GoTo /D (set-group-map) >>
 >> endobj
-7716 0 obj <<
-/D [7714 0 R /XYZ 151.701 685.529 null]
+7705 0 obj <<
+/D [7703 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5061 0 obj <<
-/D [7714 0 R /XYZ 151.701 660.623 null]
+/D [7703 0 R /XYZ 151.701 660.623 null]
 >> endobj
-7712 0 obj <<
-/D [7714 0 R /XYZ 151.701 643.753 null]
+7701 0 obj <<
+/D [7703 0 R /XYZ 151.701 643.753 null]
 >> endobj
-7717 0 obj <<
-/D [7714 0 R /XYZ 151.701 637.775 null]
+7706 0 obj <<
+/D [7703 0 R /XYZ 151.701 637.775 null]
 >> endobj
-7718 0 obj <<
-/D [7714 0 R /XYZ 151.701 644.051 null]
+7707 0 obj <<
+/D [7703 0 R /XYZ 151.701 644.051 null]
 >> endobj
-7719 0 obj <<
-/D [7714 0 R /XYZ 151.701 632.096 null]
+7708 0 obj <<
+/D [7703 0 R /XYZ 151.701 632.096 null]
 >> endobj
 970 0 obj <<
-/D [7714 0 R /XYZ 151.701 566.737 null]
+/D [7703 0 R /XYZ 151.701 566.737 null]
 >> endobj
-7720 0 obj <<
-/D [7714 0 R /XYZ 151.701 547.817 null]
+7709 0 obj <<
+/D [7703 0 R /XYZ 151.701 547.817 null]
 >> endobj
 5062 0 obj <<
-/D [7714 0 R /XYZ 151.701 437.327 null]
+/D [7703 0 R /XYZ 151.701 437.327 null]
 >> endobj
-7721 0 obj <<
-/D [7714 0 R /XYZ 151.701 420.457 null]
+7710 0 obj <<
+/D [7703 0 R /XYZ 151.701 420.457 null]
 >> endobj
-7713 0 obj <<
+7702 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F4 5484 0 R /F51 3736 0 R /F52 3737 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7724 0 obj <<
+7713 0 obj <<
 /Length 1877      
 /Filter /FlateDecode
 >>
@@ -33975,40 +36300,40 @@
 ¾ÊD}rvÓQüŒÎjWŒÜösË)×iƒÕCxbõæ~pN@v—«Tkýñé™ú×_è%âÿÚø^&ÿ Š’Áh
 endstream
 endobj
-7723 0 obj <<
+7712 0 obj <<
 /Type /Page
-/Contents 7724 0 R
-/Resources 7722 0 R
+/Contents 7713 0 R
+/Resources 7711 0 R
 /MediaBox [0 0 612 792]
-/Parent 7689 0 R
+/Parent 7678 0 R
 >> endobj
-7725 0 obj <<
-/D [7723 0 R /XYZ 100.892 685.529 null]
+7714 0 obj <<
+/D [7712 0 R /XYZ 100.892 685.529 null]
 >> endobj
 974 0 obj <<
-/D [7723 0 R /XYZ 100.892 473.144 null]
+/D [7712 0 R /XYZ 100.892 473.144 null]
 >> endobj
-7726 0 obj <<
-/D [7723 0 R /XYZ 100.892 447.925 null]
+7715 0 obj <<
+/D [7712 0 R /XYZ 100.892 447.925 null]
 >> endobj
 978 0 obj <<
-/D [7723 0 R /XYZ 100.892 386.332 null]
+/D [7712 0 R /XYZ 100.892 386.332 null]
 >> endobj
-7727 0 obj <<
-/D [7723 0 R /XYZ 100.892 360.168 null]
+7716 0 obj <<
+/D [7712 0 R /XYZ 100.892 360.168 null]
 >> endobj
 982 0 obj <<
-/D [7723 0 R /XYZ 100.892 178.957 null]
+/D [7712 0 R /XYZ 100.892 178.957 null]
 >> endobj
-7728 0 obj <<
-/D [7723 0 R /XYZ 100.892 139.244 null]
+7717 0 obj <<
+/D [7712 0 R /XYZ 100.892 139.244 null]
 >> endobj
-7722 0 obj <<
+7711 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F88 5678 0 R /F72 5679 0 R /F53 3738 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7731 0 obj <<
+7720 0 obj <<
 /Length 1288      
 /Filter /FlateDecode
 >>
@@ -34019,48 +36344,48 @@
 {¾É7öæ.îµ]ö³£Ýî­ÖþÓ¥¯Ý_˜ªrImWÓf*œÛÑ`¨¢Ë×çW7"yºQWSw	Ä?~ßoÒM>E<‡&D›0”rN»	ß"-zV¨ÖH(6n‡KSw½Ð÷@ÞWéTÇ爪ôõÕå›ó?ç¿MBJŽÁû‰ä؆mÖS$C„åPøW`*Ó`:âC¦Â5­ONCGdÌâóyµâôÜÿ‘ÿO«¨
 endstream
 endobj
-7730 0 obj <<
+7719 0 obj <<
 /Type /Page
-/Contents 7731 0 R
-/Resources 7729 0 R
+/Contents 7720 0 R
+/Resources 7718 0 R
 /MediaBox [0 0 612 792]
-/Parent 7742 0 R
+/Parent 7731 0 R
 >> endobj
-7732 0 obj <<
-/D [7730 0 R /XYZ 151.701 685.529 null]
+7721 0 obj <<
+/D [7719 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7733 0 obj <<
-/D [7730 0 R /XYZ 151.701 593.346 null]
+7722 0 obj <<
+/D [7719 0 R /XYZ 151.701 593.346 null]
 >> endobj
-7734 0 obj <<
-/D [7730 0 R /XYZ 151.701 574.717 null]
+7723 0 obj <<
+/D [7719 0 R /XYZ 151.701 574.717 null]
 >> endobj
-7735 0 obj <<
-/D [7730 0 R /XYZ 151.701 554.819 null]
+7724 0 obj <<
+/D [7719 0 R /XYZ 151.701 554.819 null]
 >> endobj
-7736 0 obj <<
-/D [7730 0 R /XYZ 151.701 534.496 null]
+7725 0 obj <<
+/D [7719 0 R /XYZ 151.701 534.496 null]
 >> endobj
-7737 0 obj <<
-/D [7730 0 R /XYZ 151.701 511.748 null]
+7726 0 obj <<
+/D [7719 0 R /XYZ 151.701 511.748 null]
 >> endobj
-7738 0 obj <<
-/D [7730 0 R /XYZ 151.701 478.178 null]
+7727 0 obj <<
+/D [7719 0 R /XYZ 151.701 478.178 null]
 >> endobj
-7739 0 obj <<
-/D [7730 0 R /XYZ 151.701 459.975 null]
+7728 0 obj <<
+/D [7719 0 R /XYZ 151.701 459.975 null]
 >> endobj
-7740 0 obj <<
-/D [7730 0 R /XYZ 151.701 437.53 null]
+7729 0 obj <<
+/D [7719 0 R /XYZ 151.701 437.53 null]
 >> endobj
-7741 0 obj <<
-/D [7730 0 R /XYZ 151.701 417.206 null]
+7730 0 obj <<
+/D [7719 0 R /XYZ 151.701 417.206 null]
 >> endobj
-7729 0 obj <<
+7718 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R /F17 3698 0 R /F52 3737 0 R /F53 3738 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7745 0 obj <<
+7734 0 obj <<
 /Length 1472      
 /Filter /FlateDecode
 >>
@@ -34079,27 +36404,27 @@
 Ýek–¡‘_>8ÌŒ›Ta~öÝ0_«£¡PÚAµ¯hƒ‚ãòÔ¦¦ÝÏ%&çù§Ï‡ úäÎ?©OZ-‡ß-|à‡#çá_-ËùÉ!ø;ýv¯ÒÃ
 endstream
 endobj
-7744 0 obj <<
+7733 0 obj <<
 /Type /Page
-/Contents 7745 0 R
-/Resources 7743 0 R
+/Contents 7734 0 R
+/Resources 7732 0 R
 /MediaBox [0 0 612 792]
-/Parent 7742 0 R
+/Parent 7731 0 R
 >> endobj
-7746 0 obj <<
-/D [7744 0 R /XYZ 100.892 685.529 null]
+7735 0 obj <<
+/D [7733 0 R /XYZ 100.892 685.529 null]
 >> endobj
 986 0 obj <<
-/D [7744 0 R /XYZ 100.892 660.623 null]
+/D [7733 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3812 0 obj <<
-/D [7744 0 R /XYZ 100.892 417.192 null]
+/D [7733 0 R /XYZ 100.892 417.192 null]
 >> endobj
-7743 0 obj <<
+7732 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7749 0 obj <<
+7738 0 obj <<
 /Length 2240      
 /Filter /FlateDecode
 >>
@@ -34120,33 +36445,33 @@
 Céñ9Bx‡<q÷Í»l¬cz˜›_¬y±úÛ:+’º÷é˜.¿Jéx¾: þæY¼¸Åð{/\á:úC…Ýl•3ØÉ­‘SÑ È3ÿ¿VHuèEþŸˆh­ÒßF4¾ôô"H!mò´iHCljzÅÏξâætRQä¥Aró²3¯$-Šö#ø·ÝÈ€ýµ„'U óGsÞêXrã&“Çí"’Õl°¡Ð‘7zü†óXqÄÑ"@hLÿ¶S¡ÎóᩪÅ\òábã…a5cø}¡íe>ŽWÏ‚ ûqMŽ—ÄQ͘ay|”‰TÙç`°Í„~µ{?"Y)cðŸ'@‘C,ûix¥< SWÏÙ÷)&iêaøžìö¥ê»¶¹öL@˜ß¬þ±¥Ù+>2ϯÃóÿýÓáä»>
 endstream
 endobj
-7748 0 obj <<
+7737 0 obj <<
 /Type /Page
-/Contents 7749 0 R
-/Resources 7747 0 R
+/Contents 7738 0 R
+/Resources 7736 0 R
 /MediaBox [0 0 612 792]
-/Parent 7742 0 R
+/Parent 7731 0 R
 >> endobj
-7750 0 obj <<
-/D [7748 0 R /XYZ 151.701 685.529 null]
+7739 0 obj <<
+/D [7737 0 R /XYZ 151.701 685.529 null]
 >> endobj
 990 0 obj <<
-/D [7748 0 R /XYZ 151.701 660.623 null]
+/D [7737 0 R /XYZ 151.701 660.623 null]
 >> endobj
-7751 0 obj <<
-/D [7748 0 R /XYZ 151.701 641.209 null]
+7740 0 obj <<
+/D [7737 0 R /XYZ 151.701 641.209 null]
 >> endobj
 994 0 obj <<
-/D [7748 0 R /XYZ 151.701 208.986 null]
+/D [7737 0 R /XYZ 151.701 208.986 null]
 >> endobj
-7752 0 obj <<
-/D [7748 0 R /XYZ 151.701 182.273 null]
+7741 0 obj <<
+/D [7737 0 R /XYZ 151.701 182.273 null]
 >> endobj
-7747 0 obj <<
+7736 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7755 0 obj <<
+7744 0 obj <<
 /Length 2311      
 /Filter /FlateDecode
 >>
@@ -34177,33 +36502,33 @@
 ›þ·¿ï.þ&,-é
 endstream
 endobj
-7754 0 obj <<
+7743 0 obj <<
 /Type /Page
-/Contents 7755 0 R
-/Resources 7753 0 R
+/Contents 7744 0 R
+/Resources 7742 0 R
 /MediaBox [0 0 612 792]
-/Parent 7742 0 R
+/Parent 7731 0 R
 >> endobj
-7756 0 obj <<
-/D [7754 0 R /XYZ 100.892 685.529 null]
+7745 0 obj <<
+/D [7743 0 R /XYZ 100.892 685.529 null]
 >> endobj
 998 0 obj <<
-/D [7754 0 R /XYZ 100.892 547.815 null]
+/D [7743 0 R /XYZ 100.892 547.815 null]
 >> endobj
-7757 0 obj <<
-/D [7754 0 R /XYZ 100.892 517.794 null]
+7746 0 obj <<
+/D [7743 0 R /XYZ 100.892 517.794 null]
 >> endobj
 1002 0 obj <<
-/D [7754 0 R /XYZ 100.892 269.563 null]
+/D [7743 0 R /XYZ 100.892 269.563 null]
 >> endobj
-7758 0 obj <<
-/D [7754 0 R /XYZ 100.892 242.554 null]
+7747 0 obj <<
+/D [7743 0 R /XYZ 100.892 242.554 null]
 >> endobj
-7753 0 obj <<
+7742 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7761 0 obj <<
+7750 0 obj <<
 /Length 1329      
 /Filter /FlateDecode
 >>
@@ -34227,27 +36552,27 @@
 õ2ÙE,\«$¯êü±Ös7v|»ÉéíOÈç.ž4QOî‹Ê@Å]#Nîwœ%/²W®%Öc‚H`Úú->{¼EúnËÄÔ½@ÖôÌAjõ€›~nâRÏ¢é¦0HßÍ	2Çù‚¶®Š¦j‡™)rªô@¹W,ÝŽz˜‡‘/}Õ:×ë4@™·voÿš¢ýOůº«¡)@üŠãð÷¡í¿8ÿ¾-«V;ááñ?}á?Å?jat€
 endstream
 endobj
-7760 0 obj <<
+7749 0 obj <<
 /Type /Page
-/Contents 7761 0 R
-/Resources 7759 0 R
+/Contents 7750 0 R
+/Resources 7748 0 R
 /MediaBox [0 0 612 792]
-/Parent 7742 0 R
+/Parent 7731 0 R
 >> endobj
-7762 0 obj <<
-/D [7760 0 R /XYZ 151.701 685.529 null]
+7751 0 obj <<
+/D [7749 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1006 0 obj <<
-/D [7760 0 R /XYZ 151.701 451.712 null]
+/D [7749 0 R /XYZ 151.701 451.712 null]
 >> endobj
-7763 0 obj <<
-/D [7760 0 R /XYZ 151.701 425.742 null]
+7752 0 obj <<
+/D [7749 0 R /XYZ 151.701 425.742 null]
 >> endobj
-7759 0 obj <<
+7748 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7766 0 obj <<
+7755 0 obj <<
 /Length 898       
 /Filter /FlateDecode
 >>
@@ -34261,21 +36586,21 @@
 7.oï•mÔÝ=Aú‡ÞÈš0mðpŠÁ¸Ás·ØÖ(‹Hj:¤þfìïþ¶°á(~8`ŒÔÇé“uG>‡5:ìq»2˜ÀaósÉ7û¢Síä’ˆ??;?‘³EÓšÅåÛó³÷·‹~­ô¢¯1®uUæíÜÒ«ÌOÂå[Îß¼¥ïÉëÍ	Í&¥:á./†]J‘ý×…“c7SŠ'rïûþqƒ—Ýg"d:8j-žg߶æ´*ÌiþÍœÖòŧ4šöm”MLÂÔ€"ZÙÑsjñaöãqµ –=µÏ'ñÓøeg˜“	j‡sLH2÷øGaüÂÿ¿ £3y.
 endstream
 endobj
-7765 0 obj <<
+7754 0 obj <<
 /Type /Page
-/Contents 7766 0 R
-/Resources 7764 0 R
+/Contents 7755 0 R
+/Resources 7753 0 R
 /MediaBox [0 0 612 792]
-/Parent 7742 0 R
+/Parent 7731 0 R
 >> endobj
-7767 0 obj <<
-/D [7765 0 R /XYZ 100.892 685.529 null]
+7756 0 obj <<
+/D [7754 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7764 0 obj <<
+7753 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7770 0 obj <<
+7759 0 obj <<
 /Length 1769      
 /Filter /FlateDecode
 >>
@@ -34302,27 +36627,27 @@
 N@éDNK+eë|I2çèö«–ã\+WòŸóÐô&Å…hvšA-‡Ìq¯­C	§tØã}1SܭϤô5”å2éOÂÜÿÑ}ŽuJ¹·WF'ö"âx/yúû Mîþ£²k •¡]€qà>‡]¢Ù$Þÿß4~_®ÿŽ&
 endstream
 endobj
-7769 0 obj <<
+7758 0 obj <<
 /Type /Page
-/Contents 7770 0 R
-/Resources 7768 0 R
+/Contents 7759 0 R
+/Resources 7757 0 R
 /MediaBox [0 0 612 792]
-/Parent 7773 0 R
+/Parent 7762 0 R
 >> endobj
-7771 0 obj <<
-/D [7769 0 R /XYZ 151.701 685.529 null]
+7760 0 obj <<
+/D [7758 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1010 0 obj <<
-/D [7769 0 R /XYZ 151.701 427.11 null]
+/D [7758 0 R /XYZ 151.701 427.11 null]
 >> endobj
-7772 0 obj <<
-/D [7769 0 R /XYZ 151.701 395.095 null]
+7761 0 obj <<
+/D [7758 0 R /XYZ 151.701 395.095 null]
 >> endobj
-7768 0 obj <<
+7757 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7776 0 obj <<
+7765 0 obj <<
 /Length 1517      
 /Filter /FlateDecode
 >>
@@ -34337,22 +36662,22 @@
 Ê\0šÕ”ǝ©†À®\9XåUé`ëà‚5™GÏî¶N€Dõhä?(,]ïª;Ê8Ã7"µdÍæÄ«»²pò,Ïm?[Rò–ÝêÚÊýCºÁL²ê D²‹ ?xÇ¿ÇãàT)-Ô
 endstream
 endobj
-7775 0 obj <<
+7764 0 obj <<
 /Type /Page
-/Contents 7776 0 R
-/Resources 7774 0 R
+/Contents 7765 0 R
+/Resources 7763 0 R
 /MediaBox [0 0 612 792]
-/Parent 7773 0 R
+/Parent 7762 0 R
 >> endobj
-7777 0 obj <<
-/D [7775 0 R /XYZ 100.892 685.529 null]
+7766 0 obj <<
+/D [7764 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7774 0 obj <<
+7763 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7780 0 obj <<
+7769 0 obj <<
 /Length 1556      
 /Filter /FlateDecode
 >>
@@ -34365,34 +36690,34 @@
 í5ÊV1íó†L‰Ç n'`礥ïõvr„-×>ÅeûAU×~žü ;̪i±–‡~;+j"éXDc	BŽ_¶ûªÕzp¼þýÜv†'{m¨dßHþ¾ÊE¨êªT¦ê°žŠ‚::¬öÃÇm,\Uy[ˆÀgš07SÀƨÄܧK‚38%˜ãŒäu=G–ëùkj¤´ŽÊsëÄäÆʨZD]v†ºÄ¡î OŒ;‚-õ`ÉažŒC˜¼À!<y°†÷—KF>ßáæF¤Ó€”Eqk‘GI–ã„ÓS3˜;HeFÓ¦³t‚Ço¼è`bzÜZ{¯ë™[;Heül*R˜ÊÒ€ƒ”pƒÔoçééyDÆ8D”®×L83j¯ÕÒjqD£œ¤‡érügNVæès¡WT8}x§ k"	o.¹›†­&ᶳ•Yjìë@ÜL``œ­!}wZûÌ k£À}75ÂÏ𕶔Y:”¡¬àS5çÄÏü42‘¾ºÕ-‘g9áx€…p7tsup&#öà=ØáC/!|Q”ʈ	…™ZìOuIô<48°iø9e¶Ò l1@õªÑ1›& m™§bù¥ÜMf\w;9€ÄÇÂvzíwÝúvh[Ãek=¨[í[©½&¯ÿ9fɽ.£ÿ³ààZÕC-XE(Ž-Νð›FTÄ.@B/ ’.]$ðýîè9ñÁü'—Á<ðÿˆ‰$ÊüÅë®Ñ][ ±«Fšã«²Õ㨆ïÄÚ+„íÁ÷=)Zü{‰÷^Â|€‘Äák*EU§U6U[fP¦+þk뱜ny¦‡al7ÕÄŒ}5€jì¿Õa|Dl©Ý’ fhгÿpÈT;Z	Ö[E5‹6Çiÿ_ÚÖ£íÇÿ¡~þ¥¹òÏ
 endstream
 endobj
-7779 0 obj <<
+7768 0 obj <<
 /Type /Page
-/Contents 7780 0 R
-/Resources 7778 0 R
+/Contents 7769 0 R
+/Resources 7767 0 R
 /MediaBox [0 0 612 792]
-/Parent 7773 0 R
+/Parent 7762 0 R
 >> endobj
-7781 0 obj <<
-/D [7779 0 R /XYZ 151.701 685.529 null]
+7770 0 obj <<
+/D [7768 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1014 0 obj <<
-/D [7779 0 R /XYZ 151.701 480.371 null]
+/D [7768 0 R /XYZ 151.701 480.371 null]
 >> endobj
-7782 0 obj <<
-/D [7779 0 R /XYZ 151.701 453.205 null]
+7771 0 obj <<
+/D [7768 0 R /XYZ 151.701 453.205 null]
 >> endobj
 1018 0 obj <<
-/D [7779 0 R /XYZ 151.701 334.39 null]
+/D [7768 0 R /XYZ 151.701 334.39 null]
 >> endobj
-7783 0 obj <<
-/D [7779 0 R /XYZ 151.701 305.103 null]
+7772 0 obj <<
+/D [7768 0 R /XYZ 151.701 305.103 null]
 >> endobj
-7778 0 obj <<
+7767 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R /F88 5678 0 R /F72 5679 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7787 0 obj <<
+7776 0 obj <<
 /Length 1448      
 /Filter /FlateDecode
 >>
@@ -34407,35 +36732,35 @@
 ËÔi¸dKâ`|€PFnà[hÌ|ÔY@˜1¶ÐÀ~iëže¯þœ×e3l¶Š‹-Ê_3¿pƒmÈòËíçÂ\U{sÀ\ÕÚ\}­t“ëýþž—G=’n—˜ÿèËñq¿w8Ç´¤T‹ìϲýÝ8ìóóí‚þÒ]Uî‘Éòˆí÷ì}ÞÖÝѸ‡+¹È?A<0ßÖ;ßÙàW;ÊCyzrBƒ§Î«éÔÅ0–EÜžÊ"æpN·°éá÷¬á“h¬Á4¦ˆ˜Û‚ŽôÒ©“·Yzo¡{ý¿§ô©æڝmz߁€ÕMì ëzÃ7j#ø&‘`Q `²ŽB‘n ˜i¸²ÓúOô]6/™ãþäý5/Í—
 endstream
 endobj
-7786 0 obj <<
+7775 0 obj <<
 /Type /Page
-/Contents 7787 0 R
-/Resources 7785 0 R
+/Contents 7776 0 R
+/Resources 7774 0 R
 /MediaBox [0 0 612 792]
-/Parent 7773 0 R
-/Annots [ 7784 0 R ]
+/Parent 7762 0 R
+/Annots [ 7773 0 R ]
 >> endobj
-7784 0 obj <<
+7773 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [152.978 395.848 430.396 408.749]
 /Subtype /Link
 /A << /S /GoTo /D (groupmapping) >>
 >> endobj
-7788 0 obj <<
-/D [7786 0 R /XYZ 100.892 685.529 null]
+7777 0 obj <<
+/D [7775 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1022 0 obj <<
-/D [7786 0 R /XYZ 100.892 561.591 null]
+/D [7775 0 R /XYZ 100.892 561.591 null]
 >> endobj
-7789 0 obj <<
-/D [7786 0 R /XYZ 100.892 533.117 null]
+7778 0 obj <<
+/D [7775 0 R /XYZ 100.892 533.117 null]
 >> endobj
-7785 0 obj <<
+7774 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7792 0 obj <<
+7781 0 obj <<
 /Length 1310      
 /Filter /FlateDecode
 >>
@@ -34455,21 +36780,21 @@
 WtÊbþ×tÓ6d7Òêÿ£aä_à”C[Óÿ¯,ÿ¡»'üšÿ	ãZ8$
 endstream
 endobj
-7791 0 obj <<
+7780 0 obj <<
 /Type /Page
-/Contents 7792 0 R
-/Resources 7790 0 R
+/Contents 7781 0 R
+/Resources 7779 0 R
 /MediaBox [0 0 612 792]
-/Parent 7773 0 R
+/Parent 7762 0 R
 >> endobj
-7793 0 obj <<
-/D [7791 0 R /XYZ 151.701 685.529 null]
+7782 0 obj <<
+/D [7780 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7790 0 obj <<
+7779 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7796 0 obj <<
+7785 0 obj <<
 /Length 784       
 /Filter /FlateDecode
 >>
@@ -34481,21 +36806,21 @@
 ©&©ŸÒ`?çÙd|uüMÏÕ“•ü|<EkÇúQh+Û-i·÷ÍJYkÉ›+¶¬z gj!¸þˆäš5ÒîöÛàn0Åeã§î5\ $dÃÌZ'üL_•è/uUôºË”D¨âŠ:$±gúVMÓ}ПŠm'µÖÔ²°FOB› ð;£k½9z¡Ì#k{3ýàGÙta4çoÎà;ÆtQ¼w’_ƒÔû\èKÄã‚Ë’¿øk…ØúåF‹C'ž–Š·f³óeÐ7C?z`W±ÎZ{’ÐnC‘áN²š÷znÍu§8ÓÓ ÒÜÙi9ñ”Y‘0+	­5#dÐÃZt•=½œÚuG€¶ÊÒ®ý+fÜXË=![.[щGíÅ{m2)¹zUiñ¿*íDLz¥M¹š¾­4úÿídOi›¹a…?Ï¿xOŠ
 endstream
 endobj
-7795 0 obj <<
+7784 0 obj <<
 /Type /Page
-/Contents 7796 0 R
-/Resources 7794 0 R
+/Contents 7785 0 R
+/Resources 7783 0 R
 /MediaBox [0 0 612 792]
-/Parent 7773 0 R
+/Parent 7762 0 R
 >> endobj
-7797 0 obj <<
-/D [7795 0 R /XYZ 100.892 685.529 null]
+7786 0 obj <<
+/D [7784 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7794 0 obj <<
+7783 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7800 0 obj <<
+7789 0 obj <<
 /Length 1706      
 /Filter /FlateDecode
 >>
@@ -34515,28 +36840,28 @@
 ¾šðŠy³uS*h×Ç‚Æî\îØuL¹ÜAG¿n«ŠžBÿTù“A¯œk­ô~ÔA󡸻Wùø?q„Wú?s¤‹
 endstream
 endobj
-7799 0 obj <<
+7788 0 obj <<
 /Type /Page
-/Contents 7800 0 R
-/Resources 7798 0 R
+/Contents 7789 0 R
+/Resources 7787 0 R
 /MediaBox [0 0 612 792]
-/Parent 7803 0 R
+/Parent 7792 0 R
 >> endobj
-7801 0 obj <<
-/D [7799 0 R /XYZ 151.701 685.529 null]
+7790 0 obj <<
+/D [7788 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1026 0 obj <<
-/D [7799 0 R /XYZ 151.701 484.424 null]
+/D [7788 0 R /XYZ 151.701 484.424 null]
 >> endobj
-7802 0 obj <<
-/D [7799 0 R /XYZ 151.701 459.201 null]
+7791 0 obj <<
+/D [7788 0 R /XYZ 151.701 459.201 null]
 >> endobj
-7798 0 obj <<
+7787 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F88 5678 0 R /F72 5679 0 R /F53 3738 0 R /F51 3736 0 R /F17 3698 0 R /F15 3700 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7807 0 obj <<
+7796 0 obj <<
 /Length 1365      
 /Filter /FlateDecode
 >>
@@ -34553,44 +36878,44 @@
 Êw´Ã/CLL>>ºÐR,ûãKpâa‰“?
 endstream
 endobj
-7806 0 obj <<
+7795 0 obj <<
 /Type /Page
-/Contents 7807 0 R
-/Resources 7805 0 R
+/Contents 7796 0 R
+/Resources 7794 0 R
 /MediaBox [0 0 612 792]
-/Parent 7803 0 R
-/Annots [ 7804 0 R ]
+/Parent 7792 0 R
+/Annots [ 7793 0 R ]
 >> endobj
-7804 0 obj <<
+7793 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [251.575 131.677 325.594 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (autopoweruserscript) >>
 >> endobj
-7808 0 obj <<
-/D [7806 0 R /XYZ 100.892 685.529 null]
+7797 0 obj <<
+/D [7795 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1030 0 obj <<
-/D [7806 0 R /XYZ 100.892 528.497 null]
+/D [7795 0 R /XYZ 100.892 528.497 null]
 >> endobj
-7809 0 obj <<
-/D [7806 0 R /XYZ 100.892 500.406 null]
+7798 0 obj <<
+/D [7795 0 R /XYZ 100.892 500.406 null]
 >> endobj
 5063 0 obj <<
-/D [7806 0 R /XYZ 100.892 292.302 null]
+/D [7795 0 R /XYZ 100.892 292.302 null]
 >> endobj
-7810 0 obj <<
-/D [7806 0 R /XYZ 100.892 261.883 null]
+7799 0 obj <<
+/D [7795 0 R /XYZ 100.892 261.883 null]
 >> endobj
-7811 0 obj <<
-/D [7806 0 R /XYZ 100.892 152.997 null]
+7800 0 obj <<
+/D [7795 0 R /XYZ 100.892 152.997 null]
 >> endobj
-7805 0 obj <<
+7794 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7816 0 obj <<
+7805 0 obj <<
 /Length 2483      
 /Filter /FlateDecode
 >>
@@ -34621,85 +36946,85 @@
 ‹Øfï#š4o¼Ä¡}m4"}lÁ7 tw ›ùXÌÑx™ÔínÙèÉN„ÿ²ð«
 endstream
 endobj
-7815 0 obj <<
+7804 0 obj <<
 /Type /Page
-/Contents 7816 0 R
-/Resources 7814 0 R
+/Contents 7805 0 R
+/Resources 7803 0 R
 /MediaBox [0 0 612 792]
-/Parent 7803 0 R
-/Annots [ 7812 0 R 7813 0 R 7829 0 R ]
+/Parent 7792 0 R
+/Annots [ 7801 0 R 7802 0 R 7818 0 R ]
 >> endobj
-7812 0 obj <<
+7801 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.947 401.356 325.122 413.046]
 /Subtype /Link
 /A << /S /GoTo /D (magicnetlogon) >>
 >> endobj
-7813 0 obj <<
+7802 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [477.996 367.342 511.352 379.031]
 /Subtype /Link
 /A << /S /GoTo /D (magicnetlogon) >>
 >> endobj
-7829 0 obj <<
+7818 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.978 353.792 225.425 365.482]
 /Subtype /Link
 /A << /S /GoTo /D (magicnetlogon) >>
 >> endobj
-7817 0 obj <<
-/D [7815 0 R /XYZ 151.701 685.529 null]
+7806 0 obj <<
+/D [7804 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5064 0 obj <<
-/D [7815 0 R /XYZ 151.701 660.623 null]
+/D [7804 0 R /XYZ 151.701 660.623 null]
 >> endobj
-7818 0 obj <<
-/D [7815 0 R /XYZ 151.701 643.753 null]
+7807 0 obj <<
+/D [7804 0 R /XYZ 151.701 643.753 null]
 >> endobj
-7819 0 obj <<
-/D [7815 0 R /XYZ 151.701 637.775 null]
+7808 0 obj <<
+/D [7804 0 R /XYZ 151.701 637.775 null]
 >> endobj
-7820 0 obj <<
-/D [7815 0 R /XYZ 151.701 644.051 null]
+7809 0 obj <<
+/D [7804 0 R /XYZ 151.701 644.051 null]
 >> endobj
-7821 0 obj <<
-/D [7815 0 R /XYZ 151.701 632.096 null]
+7810 0 obj <<
+/D [7804 0 R /XYZ 151.701 632.096 null]
 >> endobj
-7822 0 obj <<
-/D [7815 0 R /XYZ 151.701 620.141 null]
+7811 0 obj <<
+/D [7804 0 R /XYZ 151.701 620.141 null]
 >> endobj
-7823 0 obj <<
-/D [7815 0 R /XYZ 151.701 608.186 null]
+7812 0 obj <<
+/D [7804 0 R /XYZ 151.701 608.186 null]
 >> endobj
-7824 0 obj <<
-/D [7815 0 R /XYZ 151.701 584.276 null]
+7813 0 obj <<
+/D [7804 0 R /XYZ 151.701 584.276 null]
 >> endobj
-7825 0 obj <<
-/D [7815 0 R /XYZ 151.701 572.32 null]
+7814 0 obj <<
+/D [7804 0 R /XYZ 151.701 572.32 null]
 >> endobj
-7826 0 obj <<
-/D [7815 0 R /XYZ 151.701 524.109 null]
+7815 0 obj <<
+/D [7804 0 R /XYZ 151.701 524.109 null]
 >> endobj
-7827 0 obj <<
-/D [7815 0 R /XYZ 151.701 438.488 null]
+7816 0 obj <<
+/D [7804 0 R /XYZ 151.701 438.488 null]
 >> endobj
-7828 0 obj <<
-/D [7815 0 R /XYZ 151.701 402.352 null]
+7817 0 obj <<
+/D [7804 0 R /XYZ 151.701 402.352 null]
 >> endobj
 1034 0 obj <<
-/D [7815 0 R /XYZ 151.701 251.926 null]
+/D [7804 0 R /XYZ 151.701 251.926 null]
 >> endobj
-7830 0 obj <<
-/D [7815 0 R /XYZ 151.701 220.487 null]
+7819 0 obj <<
+/D [7804 0 R /XYZ 151.701 220.487 null]
 >> endobj
-7814 0 obj <<
+7803 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F4 5484 0 R /F51 3736 0 R /F52 3737 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7833 0 obj <<
+7822 0 obj <<
 /Length 1256      
 /Filter /FlateDecode
 >>
@@ -34716,33 +37041,33 @@
 ùGh#nZo$ÿ4qrs\Ú7Žu‡ ñÿ!|á·ä_Çuõ
 endstream
 endobj
-7832 0 obj <<
+7821 0 obj <<
 /Type /Page
-/Contents 7833 0 R
-/Resources 7831 0 R
+/Contents 7822 0 R
+/Resources 7820 0 R
 /MediaBox [0 0 612 792]
-/Parent 7803 0 R
+/Parent 7792 0 R
 >> endobj
-7834 0 obj <<
-/D [7832 0 R /XYZ 100.892 685.529 null]
+7823 0 obj <<
+/D [7821 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1038 0 obj <<
-/D [7832 0 R /XYZ 100.892 578.882 null]
+/D [7821 0 R /XYZ 100.892 578.882 null]
 >> endobj
-7835 0 obj <<
-/D [7832 0 R /XYZ 100.892 552.062 null]
+7824 0 obj <<
+/D [7821 0 R /XYZ 100.892 552.062 null]
 >> endobj
 1042 0 obj <<
-/D [7832 0 R /XYZ 100.892 168.842 null]
+/D [7821 0 R /XYZ 100.892 168.842 null]
 >> endobj
-7836 0 obj <<
-/D [7832 0 R /XYZ 100.892 142.225 null]
+7825 0 obj <<
+/D [7821 0 R /XYZ 100.892 142.225 null]
 >> endobj
-7831 0 obj <<
+7820 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7840 0 obj <<
+7829 0 obj <<
 /Length 1268      
 /Filter /FlateDecode
 >>
@@ -34761,41 +37086,41 @@
 ç8F)pÙRºlÁ­Ý’%O3—,x ¼‚µ›,cLe»ëì%«{)hZ”Ô¾Kf}Æ×Ê=÷ƒí¿õBXéýYû‰ìnoMåð@ùw,Pdì;5(+ÒnX+ü/üb£aÂ
 endstream
 endobj
-7839 0 obj <<
+7828 0 obj <<
 /Type /Page
-/Contents 7840 0 R
-/Resources 7838 0 R
+/Contents 7829 0 R
+/Resources 7827 0 R
 /MediaBox [0 0 612 792]
-/Parent 7803 0 R
-/Annots [ 7837 0 R ]
+/Parent 7792 0 R
+/Annots [ 7826 0 R ]
 >> endobj
-7837 0 obj <<
+7826 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [256.311 447.072 324.364 458.761]
 /Subtype /Link
 /A << /S /GoTo /D (sbeuseraddn) >>
 >> endobj
-7841 0 obj <<
-/D [7839 0 R /XYZ 151.701 685.529 null]
+7830 0 obj <<
+/D [7828 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1046 0 obj <<
-/D [7839 0 R /XYZ 151.701 525.076 null]
+/D [7828 0 R /XYZ 151.701 525.076 null]
 >> endobj
-7842 0 obj <<
-/D [7839 0 R /XYZ 151.701 496.039 null]
+7831 0 obj <<
+/D [7828 0 R /XYZ 151.701 496.039 null]
 >> endobj
 1050 0 obj <<
-/D [7839 0 R /XYZ 151.701 194.011 null]
+/D [7828 0 R /XYZ 151.701 194.011 null]
 >> endobj
-7843 0 obj <<
-/D [7839 0 R /XYZ 151.701 167.095 null]
+7832 0 obj <<
+/D [7828 0 R /XYZ 151.701 167.095 null]
 >> endobj
-7838 0 obj <<
+7827 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7847 0 obj <<
+7836 0 obj <<
 /Length 1432      
 /Filter /FlateDecode
 >>
@@ -34819,42 +37144,42 @@
 !ÙÝ‹í–û¡‡ÄË7ÏÅØñ_Ó›ÁDOñ[2&ØYü¢Ã%¿>^;³Ž:‚âúö"ü %žV쿾^sø‰Y¤æå0ez]dóÐSµ¯/ÀCòTµ³B¡G“{‚:¤ug‹…/üoýFA´
 endstream
 endobj
-7846 0 obj <<
+7835 0 obj <<
 /Type /Page
-/Contents 7847 0 R
-/Resources 7845 0 R
+/Contents 7836 0 R
+/Resources 7834 0 R
 /MediaBox [0 0 612 792]
-/Parent 7803 0 R
-/Annots [ 7844 0 R 7850 0 R ]
+/Parent 7792 0 R
+/Annots [ 7833 0 R 7839 0 R ]
 >> endobj
-7844 0 obj <<
+7833 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [370.97 188.469 460.543 200.159]
 /Subtype /Link
 /A << /S /GoTo /D (rights) >>
 >> endobj
-7850 0 obj <<
+7839 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 174.92 212.186 186.609]
 /Subtype /Link
 /A << /S /GoTo /D (rights) >>
 >> endobj
-7848 0 obj <<
-/D [7846 0 R /XYZ 100.892 685.529 null]
+7837 0 obj <<
+/D [7835 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1054 0 obj <<
-/D [7846 0 R /XYZ 100.892 367.994 null]
+/D [7835 0 R /XYZ 100.892 367.994 null]
 >> endobj
-7849 0 obj <<
-/D [7846 0 R /XYZ 100.892 329.751 null]
+7838 0 obj <<
+/D [7835 0 R /XYZ 100.892 329.751 null]
 >> endobj
-7845 0 obj <<
+7834 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7853 0 obj <<
+7842 0 obj <<
 /Length 1171      
 /Filter /FlateDecode
 >>
@@ -34868,22 +37193,22 @@
 <´	÷r¬a³^ûyaz«v6ÖåuÓÂ8€ðh3„Ð/Ëýº1=^øøáã»6ösèÖ›!@8‹PÌNÙÚx?ªŸƒ‡4¼;:àR½+—u£U¸´ïÇ(‚ÕÓªBuŠs64N…ލÄñ]>þaDþì’A&
 endstream
 endobj
-7852 0 obj <<
+7841 0 obj <<
 /Type /Page
-/Contents 7853 0 R
-/Resources 7851 0 R
+/Contents 7842 0 R
+/Resources 7840 0 R
 /MediaBox [0 0 612 792]
-/Parent 7855 0 R
+/Parent 7844 0 R
 >> endobj
-7854 0 obj <<
-/D [7852 0 R /XYZ 151.701 685.529 null]
+7843 0 obj <<
+/D [7841 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7851 0 obj <<
+7840 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F88 5678 0 R /F72 5679 0 R /F53 3738 0 R /F15 3700 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7858 0 obj <<
+7847 0 obj <<
 /Length 1281      
 /Filter /FlateDecode
 >>
@@ -34899,21 +37224,21 @@
 ’À ’!!ÈŠê¦w"›‚Éü+ÜîHDW¯Â¼»˜³8s {Sã™ $k‹ž.t¯*¸\©Afª²$½f…ÍmG{ÕjGtYÑ!R‡¹”rJãã ‹ÇqÌfiæÇÇõG[%8·ê“E21á¿°í"(˵ñ5ÁÍÀì0ëx-!-Ø…ä᪱ء߂x¦ÐŠ”:Sc§E²‚Þ	*´mGªXé(¥p!eOBBËÓÐ d;âë{ؼ·˜—ùš8ø~²q‡õ5¦Û嶄k!Â&i=æTöxÊ@µ¯=Ì{¥n˜ºóxPý2ŒU[Å»ßN¥*:lJmÓô?¹~ˆÕOcg“;½$h"ªÚÉ_œ¿9{5¿Xüù•'âq²_Ð…4–cô~Üš¡b+œÛ&Øz3~ûôàÀrô³žÌ=9‘Ÿ·÷ÜL|vA‚þÕ‹Ð÷䍷9ö+H8âhQ]CÍNÊQÊÞëûÊXF©k±ÓX¶e®Ü+¹¶áÀ ç)›ùÒ»^÷§œÂ’xÿ ´ÕWæÖâÖ:àþ7¯K+¨µ¦y 2ÛóY(ËIßLœ†Ô0!Jãàë°\J¦ë!ôðTþw ¡ø?b÷	ž²æšäÍ…ŸO˦,©ÍÑÿhLðzݐpðpq}ìv³úVa“íÆàòhæ噵ªW¾û]o»}[,ô³ùQ„”¦sbz¤yþӁ=LÀªN'ü)á?/ÿ—ɯðOì2qìn
 endstream
 endobj
-7857 0 obj <<
+7846 0 obj <<
 /Type /Page
-/Contents 7858 0 R
-/Resources 7856 0 R
+/Contents 7847 0 R
+/Resources 7845 0 R
 /MediaBox [0 0 612 792]
-/Parent 7855 0 R
+/Parent 7844 0 R
 >> endobj
-7859 0 obj <<
-/D [7857 0 R /XYZ 100.892 685.529 null]
+7848 0 obj <<
+/D [7846 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7856 0 obj <<
+7845 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7862 0 obj <<
+7851 0 obj <<
 /Length 803       
 /Filter /FlateDecode
 >>
@@ -34927,27 +37252,27 @@
 )9ç>®_SÜê]POÿÒ=|Im4ßTKFÈ¿Ë¿ßG at lb³³.6f^ïéٝVxÍÿ8Ö]V
 endstream
 endobj
-7861 0 obj <<
+7850 0 obj <<
 /Type /Page
-/Contents 7862 0 R
-/Resources 7860 0 R
+/Contents 7851 0 R
+/Resources 7849 0 R
 /MediaBox [0 0 612 792]
-/Parent 7855 0 R
+/Parent 7844 0 R
 >> endobj
-7863 0 obj <<
-/D [7861 0 R /XYZ 151.701 685.529 null]
+7852 0 obj <<
+/D [7850 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1058 0 obj <<
-/D [7861 0 R /XYZ 151.701 237.994 null]
+/D [7850 0 R /XYZ 151.701 237.994 null]
 >> endobj
-7864 0 obj <<
-/D [7861 0 R /XYZ 151.701 199.972 null]
+7853 0 obj <<
+/D [7850 0 R /XYZ 151.701 199.972 null]
 >> endobj
-7860 0 obj <<
+7849 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F17 3698 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7867 0 obj <<
+7856 0 obj <<
 /Length 1220      
 /Filter /FlateDecode
 >>
@@ -34966,27 +37291,27 @@
 It‡~¨éG•BôH¢V4‚ùBïUJAúé¡¢ö—‡^Ÿ?A´yQá[h®6Q¯1¨,	žžuS×é#û­–­à'ƨéý}<uµÄ´•æɯ2ÝêïäEôš'ý¸ñ¿»Mf]šàá7@¯ÏÖ”ûw7Âwþ‡1Aù
 endstream
 endobj
-7866 0 obj <<
+7855 0 obj <<
 /Type /Page
-/Contents 7867 0 R
-/Resources 7865 0 R
+/Contents 7856 0 R
+/Resources 7854 0 R
 /MediaBox [0 0 612 792]
-/Parent 7855 0 R
+/Parent 7844 0 R
 >> endobj
-7868 0 obj <<
-/D [7866 0 R /XYZ 100.892 685.529 null]
+7857 0 obj <<
+/D [7855 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1062 0 obj <<
-/D [7866 0 R /XYZ 100.892 660.623 null]
+/D [7855 0 R /XYZ 100.892 660.623 null]
 >> endobj
-7869 0 obj <<
-/D [7866 0 R /XYZ 100.892 644.027 null]
+7858 0 obj <<
+/D [7855 0 R /XYZ 100.892 644.027 null]
 >> endobj
-7865 0 obj <<
+7854 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7872 0 obj <<
+7861 0 obj <<
 /Length 1343      
 /Filter /FlateDecode
 >>
@@ -35008,21 +37333,21 @@
 Œž²ú»Ú|[Û§Úœ«æË*-`@8³\šo¿üÓ‹õ|~7¾]ß\/Ž m0­²Ü)¡-<¹/üÉ5¨š¿2ív…¿6p‰s 
 endstream
 endobj
-7871 0 obj <<
+7860 0 obj <<
 /Type /Page
-/Contents 7872 0 R
-/Resources 7870 0 R
+/Contents 7861 0 R
+/Resources 7859 0 R
 /MediaBox [0 0 612 792]
-/Parent 7855 0 R
+/Parent 7844 0 R
 >> endobj
-7873 0 obj <<
-/D [7871 0 R /XYZ 151.701 685.529 null]
+7862 0 obj <<
+/D [7860 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7870 0 obj <<
+7859 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7877 0 obj <<
+7866 0 obj <<
 /Length 1611      
 /Filter /FlateDecode
 >>
@@ -35039,34 +37364,34 @@
 ÎD<¾'Í;’ž„ºObóŒ„àð(õÂH²@ŠYåÇáä9- œC,ü4°¡üyfáõ«d*ž°0NÝ}ö0ǧ××çó™õª¾S¬íö׆º.Ú¼¿¾E’o ²¥ÿüÁ6);»GfEбQ’8¿Ìd!~ÿ Œß8n
 endstream
 endobj
-7876 0 obj <<
+7865 0 obj <<
 /Type /Page
-/Contents 7877 0 R
-/Resources 7875 0 R
+/Contents 7866 0 R
+/Resources 7864 0 R
 /MediaBox [0 0 612 792]
-/Parent 7855 0 R
-/Annots [ 7874 0 R ]
+/Parent 7844 0 R
+/Annots [ 7863 0 R ]
 >> endobj
-7874 0 obj <<
+7863 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 370.92 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.samba.org/samba/docs/Samba3-ByExample.pdf)>>
 >> endobj
-7878 0 obj <<
-/D [7876 0 R /XYZ 100.892 685.529 null]
+7867 0 obj <<
+/D [7865 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1066 0 obj <<
-/D [7876 0 R /XYZ 100.892 238.118 null]
+/D [7865 0 R /XYZ 100.892 238.118 null]
 >> endobj
-7879 0 obj <<
-/D [7876 0 R /XYZ 100.892 213.173 null]
+7868 0 obj <<
+/D [7865 0 R /XYZ 100.892 213.173 null]
 >> endobj
-7875 0 obj <<
+7864 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F29 5413 0 R /F17 3698 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7882 0 obj <<
+7871 0 obj <<
 /Length 1056      
 /Filter /FlateDecode
 >>
@@ -35079,21 +37404,21 @@
 ÛoçvŸ§Ô	Nª¦õŽì•~K׈ŒK[tŠÃåݧ—)§§·›Öähÿ/×`}7>Å·Pn˜Vôb qzïpwz}€vï¬pÀÑx0ðXYÚ7ÞÖÆÝg‹OA	ÇdKB«S<;[üœL½:õÏT:<SÀ‚Á1«*MìPÿzÁÝØš²Goˆ·úôùqq}Ï—#ûï_ŽÓWkXá÷]½®
 endstream
 endobj
-7881 0 obj <<
+7870 0 obj <<
 /Type /Page
-/Contents 7882 0 R
-/Resources 7880 0 R
+/Contents 7871 0 R
+/Resources 7869 0 R
 /MediaBox [0 0 612 792]
-/Parent 7884 0 R
+/Parent 7873 0 R
 >> endobj
-7883 0 obj <<
-/D [7881 0 R /XYZ 151.701 685.529 null]
+7872 0 obj <<
+/D [7870 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7880 0 obj <<
+7869 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7887 0 obj <<
+7876 0 obj <<
 /Length 953       
 /Filter /FlateDecode
 >>
@@ -35104,21 +37429,21 @@
 ·Í¹w¨=w³.–Ûl¢8Ëx¨ìm{™+N§÷ŽãòO&Äi„‘EŠ“ž{Pò[ßPXæW‘çáKÿfÁßMƛ뒋Í婏‡EA`PgFŸ¢ãŸHyö`îxyêÁòhŽSëZÒž9îa°ßföxŠ-¸^Š†ˆ¾è!̘µdÓ¢?½V4]|£:rì\Y–2|ƒ™?¨ßð½ÑãÒù~—Xê€Ój¦?¦í±•¿Á«C²/Ž€U ø¹cV‡ö³ú×ÆÚ“™`ò8èGú‘ðì=÷Œu»lº²ÍqèôØR\Î1CO«¦箬o®®·/nžo·|º7•îï_wùz¬OMöMíãø{TBrݹèûñ»˜'Ìý	Ójb÷8×%fnI¢€3»O£ó%rUÉÃ˵ó¼÷÷€µû™êÍ»í‰Ó»†#èk—Ç£nùï/ˆò¾ ¾Âµ|뜟ð	õ7ÝA›ê
 endstream
 endobj
-7886 0 obj <<
+7875 0 obj <<
 /Type /Page
-/Contents 7887 0 R
-/Resources 7885 0 R
+/Contents 7876 0 R
+/Resources 7874 0 R
 /MediaBox [0 0 612 792]
-/Parent 7884 0 R
+/Parent 7873 0 R
 >> endobj
-7888 0 obj <<
-/D [7886 0 R /XYZ 100.892 685.529 null]
+7877 0 obj <<
+/D [7875 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7885 0 obj <<
+7874 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7891 0 obj <<
+7880 0 obj <<
 /Length 1739      
 /Filter /FlateDecode
 >>
@@ -35141,27 +37466,27 @@
 Mž{™Üv™>èÏ€	‚þôjA} z;ð¯bÁo×Wϯ¯¾Ž0Ìp;=¹1OoW¹ƒ¹ØóÞKNÞ°qŽŸ<]ÇaÒ°‰óäø•€rùÜÔ`‰¥ô0@‘=Ú{q@›A³|^ìñÅRór>ÇQsשJ‹´åKÚ,Ç,:4c`ÖN×K`Ê‹ .×_Ç ÞoNpyøß„û}±Yý¨—”¾
 endstream
 endobj
-7890 0 obj <<
+7879 0 obj <<
 /Type /Page
-/Contents 7891 0 R
-/Resources 7889 0 R
+/Contents 7880 0 R
+/Resources 7878 0 R
 /MediaBox [0 0 612 792]
-/Parent 7884 0 R
+/Parent 7873 0 R
 >> endobj
-7892 0 obj <<
-/D [7890 0 R /XYZ 151.701 685.529 null]
+7881 0 obj <<
+/D [7879 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1070 0 obj <<
-/D [7890 0 R /XYZ 151.701 476.453 null]
+/D [7879 0 R /XYZ 151.701 476.453 null]
 >> endobj
-7893 0 obj <<
-/D [7890 0 R /XYZ 151.701 444.258 null]
+7882 0 obj <<
+/D [7879 0 R /XYZ 151.701 444.258 null]
 >> endobj
-7889 0 obj <<
+7878 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7896 0 obj <<
+7885 0 obj <<
 /Length 1443      
 /Filter /FlateDecode
 >>
@@ -35181,27 +37506,27 @@
 l-Î.Š¶~Œ¹2Òª}FØT«|ÖÊ^:ä‡,Û±‹s2ø¡=‘“ýoZÊq„à>ÚCóðczõÎH«ÿÕ¬Ûû¿°šì¤m츁ZDV²MN¸üÛ4Óqû­†·gþs˯lRak2Õ×ì®_sg™ö•í¶ã±÷Oõú~ÿþÄà´(
 endstream
 endobj
-7895 0 obj <<
+7884 0 obj <<
 /Type /Page
-/Contents 7896 0 R
-/Resources 7894 0 R
+/Contents 7885 0 R
+/Resources 7883 0 R
 /MediaBox [0 0 612 792]
-/Parent 7884 0 R
+/Parent 7873 0 R
 >> endobj
-7897 0 obj <<
-/D [7895 0 R /XYZ 100.892 685.529 null]
+7886 0 obj <<
+/D [7884 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1074 0 obj <<
-/D [7895 0 R /XYZ 100.892 269.048 null]
+/D [7884 0 R /XYZ 100.892 269.048 null]
 >> endobj
-7898 0 obj <<
-/D [7895 0 R /XYZ 100.892 239.381 null]
+7887 0 obj <<
+/D [7884 0 R /XYZ 100.892 239.381 null]
 >> endobj
-7894 0 obj <<
+7883 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7901 0 obj <<
+7890 0 obj <<
 /Length 1679      
 /Filter /FlateDecode
 >>
@@ -35223,27 +37548,27 @@
 ^
 endstream
 endobj
-7900 0 obj <<
+7889 0 obj <<
 /Type /Page
-/Contents 7901 0 R
-/Resources 7899 0 R
+/Contents 7890 0 R
+/Resources 7888 0 R
 /MediaBox [0 0 612 792]
-/Parent 7884 0 R
+/Parent 7873 0 R
 >> endobj
-7902 0 obj <<
-/D [7900 0 R /XYZ 151.701 685.529 null]
+7891 0 obj <<
+/D [7889 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1078 0 obj <<
-/D [7900 0 R /XYZ 151.701 599.595 null]
+/D [7889 0 R /XYZ 151.701 599.595 null]
 >> endobj
-7903 0 obj <<
-/D [7900 0 R /XYZ 151.701 567.045 null]
+7892 0 obj <<
+/D [7889 0 R /XYZ 151.701 567.045 null]
 >> endobj
-7899 0 obj <<
+7888 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7907 0 obj <<
+7896 0 obj <<
 /Length 1460      
 /Filter /FlateDecode
 >>
@@ -35260,48 +37585,48 @@
 ,:¬¸ÉéE€¼,“ø¢L ƒHv1Ú‚%ð¡ÂˆèA'ìÀ3m^EÀ{Zí¨Ñš¬jƒþ¬ÙþÎþÂò²b
 endstream
 endobj
-7906 0 obj <<
+7895 0 obj <<
 /Type /Page
-/Contents 7907 0 R
-/Resources 7905 0 R
+/Contents 7896 0 R
+/Resources 7894 0 R
 /MediaBox [0 0 612 792]
-/Parent 7884 0 R
-/Annots [ 7904 0 R 7910 0 R ]
+/Parent 7873 0 R
+/Annots [ 7893 0 R 7899 0 R ]
 >> endobj
-7904 0 obj <<
+7893 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [298.601 259.837 460.543 271.527]
 /Subtype /Link
 /A << /S /GoTo /D (AccessControls) >>
 >> endobj
-7910 0 obj <<
+7899 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 248.409 213.04 257.977]
 /Subtype /Link
 /A << /S /GoTo /D (AccessControls) >>
 >> endobj
-7908 0 obj <<
-/D [7906 0 R /XYZ 100.892 685.529 null]
+7897 0 obj <<
+/D [7895 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1082 0 obj <<
-/D [7906 0 R /XYZ 100.892 371.046 null]
+/D [7895 0 R /XYZ 100.892 371.046 null]
 >> endobj
-7909 0 obj <<
-/D [7906 0 R /XYZ 100.892 342.482 null]
+7898 0 obj <<
+/D [7895 0 R /XYZ 100.892 342.482 null]
 >> endobj
 1086 0 obj <<
-/D [7906 0 R /XYZ 100.892 235.832 null]
+/D [7895 0 R /XYZ 100.892 235.832 null]
 >> endobj
-7911 0 obj <<
-/D [7906 0 R /XYZ 100.892 207.269 null]
+7900 0 obj <<
+/D [7895 0 R /XYZ 100.892 207.269 null]
 >> endobj
-7905 0 obj <<
+7894 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7914 0 obj <<
+7903 0 obj <<
 /Length 2164      
 /Filter /FlateDecode
 >>
@@ -35319,33 +37644,33 @@
 ò|Ç­™,p³Ÿª²œ9‹ec+(ñðSBfKõkME|>ñ‰ß˜þÖî/ä]'$@OCF›íwÊÔ™Æ£ƒ}ϱ‹u·Ì[÷a"çN»«åõÔYal'¹ªÜ†]À•Ôº´lù‰rI4´u½rÉ{Žú61¹¢óϲ'”Mf<p¸-™Œ¿1p‰¾¦Ìœ‰+FÌ´-+·(*7B«w_pÔÞ¼2—ï±î7ª¾ !æ¹ûV|³­wöØ–ÇîÈÝü"J¹ñáyõ’íª
 endstream
 endobj
-7913 0 obj <<
+7902 0 obj <<
 /Type /Page
-/Contents 7914 0 R
-/Resources 7912 0 R
+/Contents 7903 0 R
+/Resources 7901 0 R
 /MediaBox [0 0 612 792]
-/Parent 7919 0 R
+/Parent 7908 0 R
 >> endobj
-7915 0 obj <<
-/D [7913 0 R /XYZ 151.701 685.529 null]
+7904 0 obj <<
+/D [7902 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7916 0 obj <<
-/D [7913 0 R /XYZ 151.701 305.512 null]
+7905 0 obj <<
+/D [7902 0 R /XYZ 151.701 305.512 null]
 >> endobj
-7917 0 obj <<
-/D [7913 0 R /XYZ 151.701 270.814 null]
+7906 0 obj <<
+/D [7902 0 R /XYZ 151.701 270.814 null]
 >> endobj
 1090 0 obj <<
-/D [7913 0 R /XYZ 151.701 209.827 null]
+/D [7902 0 R /XYZ 151.701 209.827 null]
 >> endobj
-7918 0 obj <<
-/D [7913 0 R /XYZ 151.701 180.911 null]
+7907 0 obj <<
+/D [7902 0 R /XYZ 151.701 180.911 null]
 >> endobj
-7912 0 obj <<
+7901 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7923 0 obj <<
+7912 0 obj <<
 /Length 2257      
 /Filter /FlateDecode
 >>
@@ -35369,29 +37694,29 @@
 šôÉ$óüÝÕ¸.Áÿ^œuÏòîž¿]«Ñ|G㞉ª+¹µ·¾æ¢ˆï›¶åžÁpxBøï뇻ÿ od 
 endstream
 endobj
-7922 0 obj <<
+7911 0 obj <<
 /Type /Page
-/Contents 7923 0 R
-/Resources 7921 0 R
+/Contents 7912 0 R
+/Resources 7910 0 R
 /MediaBox [0 0 612 792]
-/Parent 7919 0 R
-/Annots [ 7920 0 R ]
+/Parent 7908 0 R
+/Annots [ 7909 0 R ]
 >> endobj
-7920 0 obj <<
+7909 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.895 470.407 418.737 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (rights) >>
 >> endobj
-7924 0 obj <<
-/D [7922 0 R /XYZ 100.892 685.529 null]
+7913 0 obj <<
+/D [7911 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7921 0 obj <<
+7910 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F85 5513 0 R /F52 3737 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7927 0 obj <<
+7916 0 obj <<
 /Length 2154      
 /Filter /FlateDecode
 >>
@@ -35415,27 +37740,27 @@
 U&ã+€üÒ+.¨éÜÉ©Ÿ¤ÓgJÅÅ»z‚T?{1K%rX‹*üéOH÷½Ú­þŽŽ§.
 endstream
 endobj
-7926 0 obj <<
+7915 0 obj <<
 /Type /Page
-/Contents 7927 0 R
-/Resources 7925 0 R
+/Contents 7916 0 R
+/Resources 7914 0 R
 /MediaBox [0 0 612 792]
-/Parent 7919 0 R
+/Parent 7908 0 R
 >> endobj
-7928 0 obj <<
-/D [7926 0 R /XYZ 151.701 685.529 null]
+7917 0 obj <<
+/D [7915 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1094 0 obj <<
-/D [7926 0 R /XYZ 151.701 600.229 null]
+/D [7915 0 R /XYZ 151.701 600.229 null]
 >> endobj
-7929 0 obj <<
-/D [7926 0 R /XYZ 151.701 574.104 null]
+7918 0 obj <<
+/D [7915 0 R /XYZ 151.701 574.104 null]
 >> endobj
-7925 0 obj <<
+7914 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F52 3737 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7932 0 obj <<
+7921 0 obj <<
 /Length 1956      
 /Filter /FlateDecode
 >>
@@ -35460,22 +37785,22 @@
 ÿ({ÒŒÃՐ	å<`²ŽeÄkó˜e Åc½'é¦q—͟ɐå8³p\ýMC0!§×Œ*ÛøYüB¥û/‹“ë
 endstream
 endobj
-7931 0 obj <<
+7920 0 obj <<
 /Type /Page
-/Contents 7932 0 R
-/Resources 7930 0 R
+/Contents 7921 0 R
+/Resources 7919 0 R
 /MediaBox [0 0 612 792]
-/Parent 7919 0 R
+/Parent 7908 0 R
 >> endobj
-7933 0 obj <<
-/D [7931 0 R /XYZ 100.892 685.529 null]
+7922 0 obj <<
+/D [7920 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7930 0 obj <<
+7919 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F85 5513 0 R /F88 5678 0 R /F72 5679 0 R /F53 3738 0 R /F59 4373 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7936 0 obj <<
+7925 0 obj <<
 /Length 1553      
 /Filter /FlateDecode
 >>
@@ -35501,39 +37826,39 @@
 t½«÷öƒ²íoÕÃßÁáÿ2ÿiØúM
 endstream
 endobj
-7935 0 obj <<
+7924 0 obj <<
 /Type /Page
-/Contents 7936 0 R
-/Resources 7934 0 R
+/Contents 7925 0 R
+/Resources 7923 0 R
 /MediaBox [0 0 612 792]
-/Parent 7919 0 R
+/Parent 7908 0 R
 >> endobj
-7937 0 obj <<
-/D [7935 0 R /XYZ 151.701 685.529 null]
+7926 0 obj <<
+/D [7924 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1098 0 obj <<
-/D [7935 0 R /XYZ 151.701 660.623 null]
+/D [7924 0 R /XYZ 151.701 660.623 null]
 >> endobj
-7938 0 obj <<
-/D [7935 0 R /XYZ 151.701 641.897 null]
+7927 0 obj <<
+/D [7924 0 R /XYZ 151.701 641.897 null]
 >> endobj
 1102 0 obj <<
-/D [7935 0 R /XYZ 151.701 496.601 null]
+/D [7924 0 R /XYZ 151.701 496.601 null]
 >> endobj
-7939 0 obj <<
-/D [7935 0 R /XYZ 151.701 469.946 null]
+7928 0 obj <<
+/D [7924 0 R /XYZ 151.701 469.946 null]
 >> endobj
 1106 0 obj <<
-/D [7935 0 R /XYZ 151.701 255.533 null]
+/D [7924 0 R /XYZ 151.701 255.533 null]
 >> endobj
-7940 0 obj <<
-/D [7935 0 R /XYZ 151.701 228.685 null]
+7929 0 obj <<
+/D [7924 0 R /XYZ 151.701 228.685 null]
 >> endobj
-7934 0 obj <<
+7923 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7943 0 obj <<
+7932 0 obj <<
 /Length 2261      
 /Filter /FlateDecode
 >>
@@ -35559,21 +37884,21 @@
 ¬Öô‚bèÖ/¨%²Ò! hEéþ\õ\®QO‰(ÃNʱÐnL:JÙ÷3GŽø;ßnjžPÝÖ‹BÄPxô€Jž3˜–,Q‘òt=µr Zhž/Þñz^Nï½–ÿφÛgðù3†4¨çÉïc_–þÂœ¸*	åqë½eyáj;Û`!WXo™‹¦FapñÞ¬¡¸o!SþÔ#c¸
 endstream
 endobj
-7942 0 obj <<
+7931 0 obj <<
 /Type /Page
-/Contents 7943 0 R
-/Resources 7941 0 R
+/Contents 7932 0 R
+/Resources 7930 0 R
 /MediaBox [0 0 612 792]
-/Parent 7919 0 R
+/Parent 7908 0 R
 >> endobj
-7944 0 obj <<
-/D [7942 0 R /XYZ 100.892 685.529 null]
+7933 0 obj <<
+/D [7931 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7941 0 obj <<
+7930 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F51 3736 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7947 0 obj <<
+7936 0 obj <<
 /Length 969       
 /Filter /FlateDecode
 >>
@@ -35589,21 +37914,21 @@
 'g‚~²ÜüöÒž]_ÿzÓÛvü“ùª1ñ
 endstream
 endobj
-7946 0 obj <<
+7935 0 obj <<
 /Type /Page
-/Contents 7947 0 R
-/Resources 7945 0 R
+/Contents 7936 0 R
+/Resources 7934 0 R
 /MediaBox [0 0 612 792]
-/Parent 7949 0 R
+/Parent 7938 0 R
 >> endobj
-7948 0 obj <<
-/D [7946 0 R /XYZ 151.701 685.529 null]
+7937 0 obj <<
+/D [7935 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7945 0 obj <<
+7934 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7952 0 obj <<
+7941 0 obj <<
 /Length 1298      
 /Filter /FlateDecode
 >>
@@ -35624,39 +37949,39 @@
 µÈÀøâéŠwûœCcàÏŽ³È¯àMi>ô<Tªõ®GŠŸúú­ŽNOLƾt&#°¥#Äì Ÿ=ýo\n¿xFðœ4»WU[wµŒzóÊêÒP—~WŒ_ø¹ò?O0t-
 endstream
 endobj
-7951 0 obj <<
+7940 0 obj <<
 /Type /Page
-/Contents 7952 0 R
-/Resources 7950 0 R
+/Contents 7941 0 R
+/Resources 7939 0 R
 /MediaBox [0 0 612 792]
-/Parent 7949 0 R
+/Parent 7938 0 R
 >> endobj
-7953 0 obj <<
-/D [7951 0 R /XYZ 100.892 685.529 null]
+7942 0 obj <<
+/D [7940 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1110 0 obj <<
-/D [7951 0 R /XYZ 100.892 660.623 null]
+/D [7940 0 R /XYZ 100.892 660.623 null]
 >> endobj
-7954 0 obj <<
-/D [7951 0 R /XYZ 100.892 638.691 null]
+7943 0 obj <<
+/D [7940 0 R /XYZ 100.892 638.691 null]
 >> endobj
 1114 0 obj <<
-/D [7951 0 R /XYZ 100.892 571.242 null]
+/D [7940 0 R /XYZ 100.892 571.242 null]
 >> endobj
-7955 0 obj <<
-/D [7951 0 R /XYZ 100.892 540.879 null]
+7944 0 obj <<
+/D [7940 0 R /XYZ 100.892 540.879 null]
 >> endobj
 1118 0 obj <<
-/D [7951 0 R /XYZ 100.892 275.527 null]
+/D [7940 0 R /XYZ 100.892 275.527 null]
 >> endobj
-7956 0 obj <<
-/D [7951 0 R /XYZ 100.892 245.562 null]
+7945 0 obj <<
+/D [7940 0 R /XYZ 100.892 245.562 null]
 >> endobj
-7950 0 obj <<
+7939 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7959 0 obj <<
+7948 0 obj <<
 /Length 1403      
 /Filter /FlateDecode
 >>
@@ -35671,33 +37996,33 @@
 G2õËÑ~únÁ»r³kfÙk¬iÝ2{¤vxp;ÑB£®»Ñɐ53T®Oµ^‡†^Ô²:ðGÀÊAW;ûX¢Ìµ?ÝLç^»Urv†^™†Í\M"I8#ULuG”C<1Ou«sÔÚ85@[C8Hž³¶w;U}¿À190' §½ÕSŽ)J¨ ö\sÊq2g€p€'‚C®mKGv£s=€,Íá@GJå¨ÿ*D¥g‡–àT`( Ÿ¡;›+‡ˆà.ú×¹1¦£\ßO¾“$õWÖv”ø7#	8Aã&oPýŽXf¢H3ŒøH6zb`b…šû‹‹GȦ;"ß:Æ„‰ J\?8‡ßQk5…°ÿcã¾ð'â/ÿ³Ç
 endstream
 endobj
-7958 0 obj <<
+7947 0 obj <<
 /Type /Page
-/Contents 7959 0 R
-/Resources 7957 0 R
+/Contents 7948 0 R
+/Resources 7946 0 R
 /MediaBox [0 0 612 792]
-/Parent 7949 0 R
+/Parent 7938 0 R
 >> endobj
-7960 0 obj <<
-/D [7958 0 R /XYZ 151.701 685.529 null]
+7949 0 obj <<
+/D [7947 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1122 0 obj <<
-/D [7958 0 R /XYZ 151.701 352.998 null]
+/D [7947 0 R /XYZ 151.701 352.998 null]
 >> endobj
-7961 0 obj <<
-/D [7958 0 R /XYZ 151.701 321.437 null]
+7950 0 obj <<
+/D [7947 0 R /XYZ 151.701 321.437 null]
 >> endobj
 1126 0 obj <<
-/D [7958 0 R /XYZ 151.701 270.636 null]
+/D [7947 0 R /XYZ 151.701 270.636 null]
 >> endobj
-7962 0 obj <<
-/D [7958 0 R /XYZ 151.701 240.478 null]
+7951 0 obj <<
+/D [7947 0 R /XYZ 151.701 240.478 null]
 >> endobj
-7957 0 obj <<
+7946 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7965 0 obj <<
+7954 0 obj <<
 /Length 1173      
 /Filter /FlateDecode
 >>
@@ -35711,39 +38036,39 @@
 a8öó¤s!Ã_ïo¥vß6;ÛuP[ã¿Û²ðŽ:7Dcùðóß?_~O
 endstream
 endobj
-7964 0 obj <<
+7953 0 obj <<
 /Type /Page
-/Contents 7965 0 R
-/Resources 7963 0 R
+/Contents 7954 0 R
+/Resources 7952 0 R
 /MediaBox [0 0 612 792]
-/Parent 7949 0 R
+/Parent 7938 0 R
 >> endobj
-7966 0 obj <<
-/D [7964 0 R /XYZ 100.892 685.529 null]
+7955 0 obj <<
+/D [7953 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1130 0 obj <<
-/D [7964 0 R /XYZ 100.892 608.939 null]
+/D [7953 0 R /XYZ 100.892 608.939 null]
 >> endobj
-7967 0 obj <<
-/D [7964 0 R /XYZ 100.892 580.353 null]
+7956 0 obj <<
+/D [7953 0 R /XYZ 100.892 580.353 null]
 >> endobj
 1134 0 obj <<
-/D [7964 0 R /XYZ 100.892 405.255 null]
+/D [7953 0 R /XYZ 100.892 405.255 null]
 >> endobj
-7968 0 obj <<
-/D [7964 0 R /XYZ 100.892 376.669 null]
+7957 0 obj <<
+/D [7953 0 R /XYZ 100.892 376.669 null]
 >> endobj
 1138 0 obj <<
-/D [7964 0 R /XYZ 100.892 198.048 null]
+/D [7953 0 R /XYZ 100.892 198.048 null]
 >> endobj
-7969 0 obj <<
-/D [7964 0 R /XYZ 100.892 166.45 null]
+7958 0 obj <<
+/D [7953 0 R /XYZ 100.892 166.45 null]
 >> endobj
-7963 0 obj <<
+7952 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7972 0 obj <<
+7961 0 obj <<
 /Length 1008      
 /Filter /FlateDecode
 >>
@@ -35761,21 +38086,21 @@
 !}ËÎÌúmÑ/j·žÓ¶[Ám‘~wäÎnØâÅæà}¬ì]kÒ³ú‚ÜÍonî3Ç{D:/ª².Û®É;Ýü¿&zÈýЂ‘3Nœx‘ýئ±eI—<õŸpí·m¹>(Y|&ÔÜRN†–¤þ¿ˆ9£¸Eš£à²âéYÅ“çŠ÷n§Ôwþ¶úpÀenÄ#%Ùô/0ÛéÄÖº—Ý;4óyÛúHDìScx©õ€ÿ!Ï°˜
 endstream
 endobj
-7971 0 obj <<
+7960 0 obj <<
 /Type /Page
-/Contents 7972 0 R
-/Resources 7970 0 R
+/Contents 7961 0 R
+/Resources 7959 0 R
 /MediaBox [0 0 612 792]
-/Parent 7949 0 R
+/Parent 7938 0 R
 >> endobj
-7973 0 obj <<
-/D [7971 0 R /XYZ 151.701 685.529 null]
+7962 0 obj <<
+/D [7960 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7970 0 obj <<
+7959 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7976 0 obj <<
+7965 0 obj <<
 /Length 1756      
 /Filter /FlateDecode
 >>
@@ -35795,27 +38120,27 @@
 ÿÌÑûé&“_ÎßÐi ¨–v¯ª‰c¯à·æS€š@×/äd#@¸ÿP^½ÍÂyÃÀIîAù)|É ¸HÎ.ºü2NŠZ
 endstream
 endobj
-7975 0 obj <<
+7964 0 obj <<
 /Type /Page
-/Contents 7976 0 R
-/Resources 7974 0 R
+/Contents 7965 0 R
+/Resources 7963 0 R
 /MediaBox [0 0 612 792]
-/Parent 7949 0 R
+/Parent 7938 0 R
 >> endobj
-7977 0 obj <<
-/D [7975 0 R /XYZ 100.892 685.529 null]
+7966 0 obj <<
+/D [7964 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1142 0 obj <<
-/D [7975 0 R /XYZ 100.892 660.623 null]
+/D [7964 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3813 0 obj <<
-/D [7975 0 R /XYZ 100.892 470.232 null]
+/D [7964 0 R /XYZ 100.892 470.232 null]
 >> endobj
-7974 0 obj <<
+7963 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7981 0 obj <<
+7970 0 obj <<
 /Length 1917      
 /Filter /FlateDecode
 >>
@@ -35841,54 +38166,54 @@
 HËÙÈRÓÄôdõÝ?—i µvdËT¹þBêüXì
 endstream
 endobj
-7980 0 obj <<
+7969 0 obj <<
 /Type /Page
-/Contents 7981 0 R
-/Resources 7979 0 R
+/Contents 7970 0 R
+/Resources 7968 0 R
 /MediaBox [0 0 612 792]
-/Parent 7987 0 R
-/Annots [ 7978 0 R 7984 0 R ]
+/Parent 7976 0 R
+/Annots [ 7967 0 R 7973 0 R ]
 >> endobj
-7978 0 obj <<
+7967 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [458.556 450.417 511.352 462.106]
 /Subtype /Link
 /A << /S /GoTo /D (ServerType) >>
 >> endobj
-7984 0 obj <<
+7973 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 436.868 324.122 448.557]
 /Subtype /Link
 /A << /S /GoTo /D (ServerType) >>
 >> endobj
-7982 0 obj <<
-/D [7980 0 R /XYZ 151.701 685.529 null]
+7971 0 obj <<
+/D [7969 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1146 0 obj <<
-/D [7980 0 R /XYZ 151.701 503.235 null]
+/D [7969 0 R /XYZ 151.701 503.235 null]
 >> endobj
-7983 0 obj <<
-/D [7980 0 R /XYZ 151.701 472.7 null]
+7972 0 obj <<
+/D [7969 0 R /XYZ 151.701 472.7 null]
 >> endobj
 1150 0 obj <<
-/D [7980 0 R /XYZ 151.701 421.742 null]
+/D [7969 0 R /XYZ 151.701 421.742 null]
 >> endobj
-7985 0 obj <<
-/D [7980 0 R /XYZ 151.701 396.543 null]
+7974 0 obj <<
+/D [7969 0 R /XYZ 151.701 396.543 null]
 >> endobj
 1154 0 obj <<
-/D [7980 0 R /XYZ 151.701 255.758 null]
+/D [7969 0 R /XYZ 151.701 255.758 null]
 >> endobj
-7986 0 obj <<
-/D [7980 0 R /XYZ 151.701 228.438 null]
+7975 0 obj <<
+/D [7969 0 R /XYZ 151.701 228.438 null]
 >> endobj
-7979 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F29 5413 0 R /F17 3698 0 R /F30 5441 0 R /F60 6223 0 R /F71 5443 0 R >>
+7968 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F29 5413 0 R /F17 3698 0 R /F30 5441 0 R /F60 6222 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7990 0 obj <<
+7979 0 obj <<
 /Length 2125      
 /Filter /FlateDecode
 >>
@@ -35914,21 +38239,21 @@
 Û±Y}éDÀ“Ñtí„KÛ@º†hTˆ‘Ë?aÛv Í&5Ñ´¥½Ùl×ÜÕœŠÈ.ô 1cY¨µ™ªŸï¤,&¼ºÅ8yþv‰ò?øþƒàýçØëÞ/w‹?^ºüÓ
 endstream
 endobj
-7989 0 obj <<
+7978 0 obj <<
 /Type /Page
-/Contents 7990 0 R
-/Resources 7988 0 R
+/Contents 7979 0 R
+/Resources 7977 0 R
 /MediaBox [0 0 612 792]
-/Parent 7987 0 R
+/Parent 7976 0 R
 >> endobj
-7991 0 obj <<
-/D [7989 0 R /XYZ 100.892 685.529 null]
+7980 0 obj <<
+/D [7978 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7988 0 obj <<
+7977 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7994 0 obj <<
+7983 0 obj <<
 /Length 2499      
 /Filter /FlateDecode
 >>
@@ -35957,21 +38282,21 @@
 xd€ÇÈKj§Á¾®¾¹ûáãíý§•ÃÓ<ʤüÿžÖ›|yø§Ûß}Kº0o¨BÄGòÅ·%é5òâ÷¸À ýIÍX
 endstream
 endobj
-7993 0 obj <<
+7982 0 obj <<
 /Type /Page
-/Contents 7994 0 R
-/Resources 7992 0 R
+/Contents 7983 0 R
+/Resources 7981 0 R
 /MediaBox [0 0 612 792]
-/Parent 7987 0 R
+/Parent 7976 0 R
 >> endobj
-7995 0 obj <<
-/D [7993 0 R /XYZ 151.701 685.529 null]
+7984 0 obj <<
+/D [7982 0 R /XYZ 151.701 685.529 null]
 >> endobj
-7992 0 obj <<
+7981 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-7998 0 obj <<
+7987 0 obj <<
 /Length 2286      
 /Filter /FlateDecode
 >>
@@ -35994,21 +38319,21 @@
 7Ç\9ÿ¸ÂÜ…·´¸ákÛ`g”¨`{j;LhRR/¾ÁŽÅ9%Œ¬Dµ»ä©_½ˆ­wO…§G;ží˜nmg«vnr‘Fï¡ñé©î	†ÕÛÛ÷‰0‘ëìaCŸ`QpMzÏá¸Â|ÆÝ£g{TÚÚ_òFŒq€%…852¥OñŠ8!pÁUîMÓ’V~â‹pÞx°Ñgˆˆ>;Žy~‚œÊó¾o…Ê’ÙZhÓ`1äÏh‡î„GÜþ•Í«!²°šåÉÑÌ!a†MóÁ¯Xtpíq®¼VÖ€Ýâw!–×E£{ôoqäbÿnG_i“;ÒÄ·H°3ÀõÉ–;}»|™…ÊÍßwëׂ
 endstream
 endobj
-7997 0 obj <<
+7986 0 obj <<
 /Type /Page
-/Contents 7998 0 R
-/Resources 7996 0 R
+/Contents 7987 0 R
+/Resources 7985 0 R
 /MediaBox [0 0 612 792]
-/Parent 7987 0 R
+/Parent 7976 0 R
 >> endobj
-7999 0 obj <<
-/D [7997 0 R /XYZ 100.892 685.529 null]
+7988 0 obj <<
+/D [7986 0 R /XYZ 100.892 685.529 null]
 >> endobj
-7996 0 obj <<
+7985 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8002 0 obj <<
+7991 0 obj <<
 /Length 2230      
 /Filter /FlateDecode
 >>
@@ -36032,33 +38357,33 @@
 [_ø5€d–M¤rÙ?l¸u›fâíÝ­Ãd öÉó*z‚—kt¤lkÏ}G×´½Ï~Šj[òë/¨e:drì%猫"A]X^±åWO?<Ϻ9<§©âÂ8n¶“Þ“A¾ÇlìÁ)žÐÏÂa¤~¶ºÊ1%äîó¦º&ö9õêÝ	´T2ΊüâÅIù§·PÌÃëǦü¯=6áé`tR¯žJ3È-|	Çã|ªK|”A±WoÀ	Ãs%x%ŒÐ¨´Ðè?Ò>2©Þb#r©o#ãíQwz|(%½LtLú'ÈPôd z`ÖU<§‰—GE¤Œ ظäKá‰|_Î	´˜çôÌ÷‹WˆGŽù ÿM&D LG~[Aš_Ã<žÁŠ~“—ß)A²+xž+Œ`¨åý2´ß?ÞüùÇ‘×
 endstream
 endobj
-8001 0 obj <<
+7990 0 obj <<
 /Type /Page
-/Contents 8002 0 R
-/Resources 8000 0 R
+/Contents 7991 0 R
+/Resources 7989 0 R
 /MediaBox [0 0 612 792]
-/Parent 7987 0 R
+/Parent 7976 0 R
 >> endobj
-8003 0 obj <<
-/D [8001 0 R /XYZ 151.701 685.529 null]
+7992 0 obj <<
+/D [7990 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1158 0 obj <<
-/D [8001 0 R /XYZ 151.701 660.623 null]
+/D [7990 0 R /XYZ 151.701 660.623 null]
 >> endobj
-8004 0 obj <<
-/D [8001 0 R /XYZ 151.701 641.703 null]
+7993 0 obj <<
+/D [7990 0 R /XYZ 151.701 641.703 null]
 >> endobj
 1162 0 obj <<
-/D [8001 0 R /XYZ 151.701 199.593 null]
+/D [7990 0 R /XYZ 151.701 199.593 null]
 >> endobj
-8005 0 obj <<
-/D [8001 0 R /XYZ 151.701 168.826 null]
+7994 0 obj <<
+/D [7990 0 R /XYZ 151.701 168.826 null]
 >> endobj
-8000 0 obj <<
+7989 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F85 5513 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8009 0 obj <<
+7998 0 obj <<
 /Length 2437      
 /Filter /FlateDecode
 >>
@@ -36086,80 +38411,80 @@
 N6Lòÿ v[ÌŒ
 endstream
 endobj
-8008 0 obj <<
+7997 0 obj <<
 /Type /Page
-/Contents 8009 0 R
-/Resources 8007 0 R
+/Contents 7998 0 R
+/Resources 7996 0 R
 /MediaBox [0 0 612 792]
-/Parent 7987 0 R
-/Annots [ 8006 0 R ]
+/Parent 7976 0 R
+/Annots [ 7995 0 R ]
 >> endobj
-8006 0 obj <<
+7995 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 311.377 176.508 323.067]
 /Subtype /Link
 /A << /S /GoTo /D (idmapnt4dms) >>
 >> endobj
-8010 0 obj <<
-/D [8008 0 R /XYZ 100.892 685.529 null]
+7999 0 obj <<
+/D [7997 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1166 0 obj <<
-/D [8008 0 R /XYZ 100.892 576.565 null]
+/D [7997 0 R /XYZ 100.892 576.565 null]
 >> endobj
-8011 0 obj <<
-/D [8008 0 R /XYZ 100.892 547.244 null]
+8000 0 obj <<
+/D [7997 0 R /XYZ 100.892 547.244 null]
 >> endobj
 1170 0 obj <<
-/D [8008 0 R /XYZ 100.892 472.661 null]
+/D [7997 0 R /XYZ 100.892 472.661 null]
 >> endobj
-8012 0 obj <<
-/D [8008 0 R /XYZ 100.892 449.283 null]
+8001 0 obj <<
+/D [7997 0 R /XYZ 100.892 449.283 null]
 >> endobj
 1174 0 obj <<
-/D [8008 0 R /XYZ 100.892 361.069 null]
+/D [7997 0 R /XYZ 100.892 361.069 null]
 >> endobj
-8013 0 obj <<
-/D [8008 0 R /XYZ 100.892 332.224 null]
+8002 0 obj <<
+/D [7997 0 R /XYZ 100.892 332.224 null]
 >> endobj
 5065 0 obj <<
-/D [8008 0 R /XYZ 100.892 286.724 null]
+/D [7997 0 R /XYZ 100.892 286.724 null]
 >> endobj
-8014 0 obj <<
-/D [8008 0 R /XYZ 100.892 269.854 null]
+8003 0 obj <<
+/D [7997 0 R /XYZ 100.892 269.854 null]
 >> endobj
-8015 0 obj <<
-/D [8008 0 R /XYZ 100.892 263.877 null]
+8004 0 obj <<
+/D [7997 0 R /XYZ 100.892 263.877 null]
 >> endobj
-8016 0 obj <<
-/D [8008 0 R /XYZ 100.892 270.153 null]
+8005 0 obj <<
+/D [7997 0 R /XYZ 100.892 270.153 null]
 >> endobj
-8017 0 obj <<
-/D [8008 0 R /XYZ 100.892 258.198 null]
+8006 0 obj <<
+/D [7997 0 R /XYZ 100.892 258.198 null]
 >> endobj
-8018 0 obj <<
-/D [8008 0 R /XYZ 100.892 246.243 null]
+8007 0 obj <<
+/D [7997 0 R /XYZ 100.892 246.243 null]
 >> endobj
-8019 0 obj <<
-/D [8008 0 R /XYZ 100.892 234.288 null]
+8008 0 obj <<
+/D [7997 0 R /XYZ 100.892 234.288 null]
 >> endobj
-8020 0 obj <<
-/D [8008 0 R /XYZ 100.892 222.332 null]
+8009 0 obj <<
+/D [7997 0 R /XYZ 100.892 222.332 null]
 >> endobj
-8021 0 obj <<
-/D [8008 0 R /XYZ 100.892 210.377 null]
+8010 0 obj <<
+/D [7997 0 R /XYZ 100.892 210.377 null]
 >> endobj
-8022 0 obj <<
-/D [8008 0 R /XYZ 100.892 198.422 null]
+8011 0 obj <<
+/D [7997 0 R /XYZ 100.892 198.422 null]
 >> endobj
-8023 0 obj <<
-/D [8008 0 R /XYZ 100.892 186.467 null]
+8012 0 obj <<
+/D [7997 0 R /XYZ 100.892 186.467 null]
 >> endobj
-8007 0 obj <<
+7996 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F51 3736 0 R /F53 3738 0 R /F4 5484 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8027 0 obj <<
+8016 0 obj <<
 /Length 931       
 /Filter /FlateDecode
 >>
@@ -36171,30 +38496,30 @@
 dÔ±ÑÒÍÍ	ضå©ØšS#teÛb£¿à³­£h]}	Ø‹¦¾èØŸ‹ÖšSN›Ð•Y<áŒñ7¸¥n2LUë	ø~·ÏÖÉgçÛgõž¢qÜ=¡¯ªË9oz"_ÕH*—Í·¬®Š‹æ¼.Üx Å`??š¬¯Åñ½øÒˆ)‰Å´@²	·M ¿ #;ˆd'„7ð͍àeÊXï!×òúÎg⿉xv͐OÁI:Mzõ"+%5æQÉ«©s¤t”ƒ§¬#ÓÕìÿá£æ_CJb
 endstream
 endobj
-8026 0 obj <<
+8015 0 obj <<
 /Type /Page
-/Contents 8027 0 R
-/Resources 8025 0 R
+/Contents 8016 0 R
+/Resources 8014 0 R
 /MediaBox [0 0 612 792]
-/Parent 8032 0 R
+/Parent 8021 0 R
 >> endobj
-8028 0 obj <<
-/D [8026 0 R /XYZ 151.701 685.529 null]
+8017 0 obj <<
+/D [8015 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8029 0 obj <<
-/D [8026 0 R /XYZ 151.701 471.827 null]
+8018 0 obj <<
+/D [8015 0 R /XYZ 151.701 471.827 null]
 >> endobj
-8030 0 obj <<
-/D [8026 0 R /XYZ 151.701 444.941 null]
+8019 0 obj <<
+/D [8015 0 R /XYZ 151.701 444.941 null]
 >> endobj
-8031 0 obj <<
-/D [8026 0 R /XYZ 151.701 150.253 null]
+8020 0 obj <<
+/D [8015 0 R /XYZ 151.701 150.253 null]
 >> endobj
-8025 0 obj <<
+8014 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8035 0 obj <<
+8024 0 obj <<
 /Length 2563      
 /Filter /FlateDecode
 >>
@@ -36220,89 +38545,89 @@
 t5G)±wÍÂÐ`àÊ0mƱٸÑ:&:)çs0ÏŸ8YŽ×3Z:ºë|‡sý1nŽ
 endstream
 endobj
-8034 0 obj <<
+8023 0 obj <<
 /Type /Page
-/Contents 8035 0 R
-/Resources 8033 0 R
+/Contents 8024 0 R
+/Resources 8022 0 R
 /MediaBox [0 0 612 792]
-/Parent 8032 0 R
-/Annots [ 8024 0 R ]
+/Parent 8021 0 R
+/Annots [ 8013 0 R ]
 >> endobj
-8024 0 obj <<
+8013 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [373.41 605.935 448.585 617.625]
 /Subtype /Link
 /A << /S /GoTo /D (idmapadsdms) >>
 >> endobj
-8036 0 obj <<
-/D [8034 0 R /XYZ 100.892 685.529 null]
+8025 0 obj <<
+/D [8023 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1178 0 obj <<
-/D [8034 0 R /XYZ 100.892 660.623 null]
+/D [8023 0 R /XYZ 100.892 660.623 null]
 >> endobj
-8037 0 obj <<
-/D [8034 0 R /XYZ 100.892 644.027 null]
+8026 0 obj <<
+/D [8023 0 R /XYZ 100.892 644.027 null]
 >> endobj
 5066 0 obj <<
-/D [8034 0 R /XYZ 100.892 593.874 null]
+/D [8023 0 R /XYZ 100.892 593.874 null]
 >> endobj
-8038 0 obj <<
-/D [8034 0 R /XYZ 100.892 577.004 null]
+8027 0 obj <<
+/D [8023 0 R /XYZ 100.892 577.004 null]
 >> endobj
-8039 0 obj <<
-/D [8034 0 R /XYZ 100.892 571.027 null]
+8028 0 obj <<
+/D [8023 0 R /XYZ 100.892 571.027 null]
 >> endobj
-8040 0 obj <<
-/D [8034 0 R /XYZ 100.892 577.303 null]
+8029 0 obj <<
+/D [8023 0 R /XYZ 100.892 577.303 null]
 >> endobj
-8041 0 obj <<
-/D [8034 0 R /XYZ 100.892 565.348 null]
+8030 0 obj <<
+/D [8023 0 R /XYZ 100.892 565.348 null]
 >> endobj
-8042 0 obj <<
-/D [8034 0 R /XYZ 100.892 553.393 null]
+8031 0 obj <<
+/D [8023 0 R /XYZ 100.892 553.393 null]
 >> endobj
-8043 0 obj <<
-/D [8034 0 R /XYZ 100.892 541.438 null]
+8032 0 obj <<
+/D [8023 0 R /XYZ 100.892 541.438 null]
 >> endobj
-8044 0 obj <<
-/D [8034 0 R /XYZ 100.892 529.483 null]
+8033 0 obj <<
+/D [8023 0 R /XYZ 100.892 529.483 null]
 >> endobj
-8045 0 obj <<
-/D [8034 0 R /XYZ 100.892 517.527 null]
+8034 0 obj <<
+/D [8023 0 R /XYZ 100.892 517.527 null]
 >> endobj
-8046 0 obj <<
-/D [8034 0 R /XYZ 100.892 505.572 null]
+8035 0 obj <<
+/D [8023 0 R /XYZ 100.892 505.572 null]
 >> endobj
-8047 0 obj <<
-/D [8034 0 R /XYZ 100.892 493.617 null]
+8036 0 obj <<
+/D [8023 0 R /XYZ 100.892 493.617 null]
 >> endobj
-8048 0 obj <<
-/D [8034 0 R /XYZ 100.892 481.662 null]
+8037 0 obj <<
+/D [8023 0 R /XYZ 100.892 481.662 null]
 >> endobj
-8049 0 obj <<
-/D [8034 0 R /XYZ 100.892 469.707 null]
+8038 0 obj <<
+/D [8023 0 R /XYZ 100.892 469.707 null]
 >> endobj
-8050 0 obj <<
-/D [8034 0 R /XYZ 100.892 457.752 null]
+8039 0 obj <<
+/D [8023 0 R /XYZ 100.892 457.752 null]
 >> endobj
-8051 0 obj <<
-/D [8034 0 R /XYZ 100.892 445.796 null]
+8040 0 obj <<
+/D [8023 0 R /XYZ 100.892 445.796 null]
 >> endobj
-8052 0 obj <<
-/D [8034 0 R /XYZ 100.892 315.423 null]
+8041 0 obj <<
+/D [8023 0 R /XYZ 100.892 315.423 null]
 >> endobj
-8053 0 obj <<
-/D [8034 0 R /XYZ 100.892 293.998 null]
+8042 0 obj <<
+/D [8023 0 R /XYZ 100.892 293.998 null]
 >> endobj
-8054 0 obj <<
-/D [8034 0 R /XYZ 100.892 273.784 null]
+8043 0 obj <<
+/D [8023 0 R /XYZ 100.892 273.784 null]
 >> endobj
-8033 0 obj <<
+8022 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F4 5484 0 R /F59 4373 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8058 0 obj <<
+8047 0 obj <<
 /Length 2074      
 /Filter /FlateDecode
 >>
@@ -36323,30 +38648,30 @@
 Æ­», ›oD!‹4¼~A5Z"5Î0QP'Zu±ƒº-›}åþÖ³RqÆÅÔéÓA‹aêçýX €?ák[;ÜÂB( TîMR„Wu.æÝ|¥†‘µœ‡?‡vME–=hûå…?<t6½±ðz`zúáv%%Pø'è«Váþ>á¡ý$åK;ócøBøÿLï;!
 endstream
 endobj
-8057 0 obj <<
+8046 0 obj <<
 /Type /Page
-/Contents 8058 0 R
-/Resources 8056 0 R
+/Contents 8047 0 R
+/Resources 8045 0 R
 /MediaBox [0 0 612 792]
-/Parent 8032 0 R
+/Parent 8021 0 R
 >> endobj
-8059 0 obj <<
-/D [8057 0 R /XYZ 151.701 685.529 null]
+8048 0 obj <<
+/D [8046 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8060 0 obj <<
-/D [8057 0 R /XYZ 151.701 431.13 null]
+8049 0 obj <<
+/D [8046 0 R /XYZ 151.701 431.13 null]
 >> endobj
 1182 0 obj <<
-/D [8057 0 R /XYZ 151.701 390.728 null]
+/D [8046 0 R /XYZ 151.701 390.728 null]
 >> endobj
-8061 0 obj <<
-/D [8057 0 R /XYZ 151.701 364.756 null]
+8050 0 obj <<
+/D [8046 0 R /XYZ 151.701 364.756 null]
 >> endobj
-8056 0 obj <<
+8045 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F85 5513 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8064 0 obj <<
+8053 0 obj <<
 /Length 3163      
 /Filter /FlateDecode
 >>
@@ -36380,89 +38705,89 @@
 Uƒó"˜ý¬¯Z
 endstream
 endobj
-8063 0 obj <<
+8052 0 obj <<
 /Type /Page
-/Contents 8064 0 R
-/Resources 8062 0 R
+/Contents 8053 0 R
+/Resources 8051 0 R
 /MediaBox [0 0 612 792]
-/Parent 8032 0 R
-/Annots [ 8055 0 R ]
+/Parent 8021 0 R
+/Annots [ 8044 0 R ]
 >> endobj
-8055 0 obj <<
+8044 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 632.997 175.07 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (idmapadsridDMS) >>
 >> endobj
-8065 0 obj <<
-/D [8063 0 R /XYZ 100.892 685.529 null]
+8054 0 obj <<
+/D [8052 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5067 0 obj <<
-/D [8063 0 R /XYZ 100.892 619.269 null]
+/D [8052 0 R /XYZ 100.892 619.269 null]
 >> endobj
-8066 0 obj <<
-/D [8063 0 R /XYZ 100.892 602.399 null]
+8055 0 obj <<
+/D [8052 0 R /XYZ 100.892 602.399 null]
 >> endobj
-8067 0 obj <<
-/D [8063 0 R /XYZ 100.892 596.422 null]
+8056 0 obj <<
+/D [8052 0 R /XYZ 100.892 596.422 null]
 >> endobj
-8068 0 obj <<
-/D [8063 0 R /XYZ 100.892 602.698 null]
+8057 0 obj <<
+/D [8052 0 R /XYZ 100.892 602.698 null]
 >> endobj
-8069 0 obj <<
-/D [8063 0 R /XYZ 100.892 590.743 null]
+8058 0 obj <<
+/D [8052 0 R /XYZ 100.892 590.743 null]
 >> endobj
-8070 0 obj <<
-/D [8063 0 R /XYZ 100.892 578.788 null]
+8059 0 obj <<
+/D [8052 0 R /XYZ 100.892 578.788 null]
 >> endobj
-8071 0 obj <<
-/D [8063 0 R /XYZ 100.892 566.833 null]
+8060 0 obj <<
+/D [8052 0 R /XYZ 100.892 566.833 null]
 >> endobj
-8072 0 obj <<
-/D [8063 0 R /XYZ 100.892 554.877 null]
+8061 0 obj <<
+/D [8052 0 R /XYZ 100.892 554.877 null]
 >> endobj
-8073 0 obj <<
-/D [8063 0 R /XYZ 100.892 542.922 null]
+8062 0 obj <<
+/D [8052 0 R /XYZ 100.892 542.922 null]
 >> endobj
-8074 0 obj <<
-/D [8063 0 R /XYZ 100.892 530.967 null]
+8063 0 obj <<
+/D [8052 0 R /XYZ 100.892 530.967 null]
 >> endobj
-8075 0 obj <<
-/D [8063 0 R /XYZ 100.892 519.012 null]
+8064 0 obj <<
+/D [8052 0 R /XYZ 100.892 519.012 null]
 >> endobj
-8076 0 obj <<
-/D [8063 0 R /XYZ 100.892 507.057 null]
+8065 0 obj <<
+/D [8052 0 R /XYZ 100.892 507.057 null]
 >> endobj
-8077 0 obj <<
-/D [8063 0 R /XYZ 100.892 495.102 null]
+8066 0 obj <<
+/D [8052 0 R /XYZ 100.892 495.102 null]
 >> endobj
-8078 0 obj <<
-/D [8063 0 R /XYZ 100.892 483.146 null]
+8067 0 obj <<
+/D [8052 0 R /XYZ 100.892 483.146 null]
 >> endobj
-8079 0 obj <<
-/D [8063 0 R /XYZ 100.892 471.191 null]
+8068 0 obj <<
+/D [8052 0 R /XYZ 100.892 471.191 null]
 >> endobj
-8080 0 obj <<
-/D [8063 0 R /XYZ 100.892 459.236 null]
+8069 0 obj <<
+/D [8052 0 R /XYZ 100.892 459.236 null]
 >> endobj
-8081 0 obj <<
-/D [8063 0 R /XYZ 100.892 447.281 null]
+8070 0 obj <<
+/D [8052 0 R /XYZ 100.892 447.281 null]
 >> endobj
-8082 0 obj <<
-/D [8063 0 R /XYZ 100.892 435.326 null]
+8071 0 obj <<
+/D [8052 0 R /XYZ 100.892 435.326 null]
 >> endobj
-8083 0 obj <<
-/D [8063 0 R /XYZ 100.892 423.371 null]
+8072 0 obj <<
+/D [8052 0 R /XYZ 100.892 423.371 null]
 >> endobj
-8084 0 obj <<
-/D [8063 0 R /XYZ 100.892 411.415 null]
+8073 0 obj <<
+/D [8052 0 R /XYZ 100.892 411.415 null]
 >> endobj
-8062 0 obj <<
+8051 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F4 5484 0 R /F59 4373 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8087 0 obj <<
+8076 0 obj <<
 /Length 1454      
 /Filter /FlateDecode
 >>
@@ -36480,42 +38805,42 @@
 <÷o<Ù¬„t:Â-n¶E×@Տf¦[¥ã¥ãjpOø+ôyP­5
 endstream
 endobj
-8086 0 obj <<
+8075 0 obj <<
 /Type /Page
-/Contents 8087 0 R
-/Resources 8085 0 R
+/Contents 8076 0 R
+/Resources 8074 0 R
 /MediaBox [0 0 612 792]
-/Parent 8032 0 R
+/Parent 8021 0 R
 >> endobj
-8088 0 obj <<
-/D [8086 0 R /XYZ 151.701 685.529 null]
+8077 0 obj <<
+/D [8075 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8089 0 obj <<
-/D [8086 0 R /XYZ 151.701 613.554 null]
+8078 0 obj <<
+/D [8075 0 R /XYZ 151.701 613.554 null]
 >> endobj
-8090 0 obj <<
-/D [8086 0 R /XYZ 151.701 593.115 null]
+8079 0 obj <<
+/D [8075 0 R /XYZ 151.701 593.115 null]
 >> endobj
-8091 0 obj <<
-/D [8086 0 R /XYZ 151.701 573.888 null]
+8080 0 obj <<
+/D [8075 0 R /XYZ 151.701 573.888 null]
 >> endobj
-8092 0 obj <<
-/D [8086 0 R /XYZ 151.701 294.341 null]
+8081 0 obj <<
+/D [8075 0 R /XYZ 151.701 294.341 null]
 >> endobj
-8093 0 obj <<
-/D [8086 0 R /XYZ 151.701 273.902 null]
+8082 0 obj <<
+/D [8075 0 R /XYZ 151.701 273.902 null]
 >> endobj
 1186 0 obj <<
-/D [8086 0 R /XYZ 151.701 181.309 null]
+/D [8075 0 R /XYZ 151.701 181.309 null]
 >> endobj
-8094 0 obj <<
-/D [8086 0 R /XYZ 151.701 152.909 null]
+8083 0 obj <<
+/D [8075 0 R /XYZ 151.701 152.909 null]
 >> endobj
-8085 0 obj <<
+8074 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F85 5513 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8099 0 obj <<
+8088 0 obj <<
 /Length 3017      
 /Filter /FlateDecode
 >>
@@ -36548,93 +38873,93 @@
 ʨ‰0ÛÇz¨Óëj4åÃu[£ýÂþk³¿Ë÷>^þúá£xõá¢MÐɼü2+ŠûÕcËÃ7`¼yëL3Äÿ …y¿Ç
 endstream
 endobj
-8098 0 obj <<
+8087 0 obj <<
 /Type /Page
-/Contents 8099 0 R
-/Resources 8097 0 R
+/Contents 8088 0 R
+/Resources 8086 0 R
 /MediaBox [0 0 612 792]
-/Parent 8032 0 R
-/Annots [ 8095 0 R 8096 0 R ]
+/Parent 8021 0 R
+/Annots [ 8084 0 R 8085 0 R ]
 >> endobj
-8095 0 obj <<
+8084 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [325.108 585.034 400.282 596.723]
 /Subtype /Link
 /A << /S /GoTo /D (idmapldapDMS) >>
 >> endobj
-8096 0 obj <<
+8085 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [112.623 283.922 172.191 293.369]
 /Subtype /Link
 /A << /S /GoTo /D (dbglvl) >>
 >> endobj
-8100 0 obj <<
-/D [8098 0 R /XYZ 100.892 685.529 null]
+8089 0 obj <<
+/D [8087 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5068 0 obj <<
-/D [8098 0 R /XYZ 100.892 573.533 null]
+/D [8087 0 R /XYZ 100.892 573.533 null]
 >> endobj
-8101 0 obj <<
-/D [8098 0 R /XYZ 100.892 556.663 null]
+8090 0 obj <<
+/D [8087 0 R /XYZ 100.892 556.663 null]
 >> endobj
-8102 0 obj <<
-/D [8098 0 R /XYZ 100.892 550.686 null]
+8091 0 obj <<
+/D [8087 0 R /XYZ 100.892 550.686 null]
 >> endobj
-8103 0 obj <<
-/D [8098 0 R /XYZ 100.892 556.962 null]
+8092 0 obj <<
+/D [8087 0 R /XYZ 100.892 556.962 null]
 >> endobj
-8104 0 obj <<
-/D [8098 0 R /XYZ 100.892 545.007 null]
+8093 0 obj <<
+/D [8087 0 R /XYZ 100.892 545.007 null]
 >> endobj
-8105 0 obj <<
-/D [8098 0 R /XYZ 100.892 533.052 null]
+8094 0 obj <<
+/D [8087 0 R /XYZ 100.892 533.052 null]
 >> endobj
-8106 0 obj <<
-/D [8098 0 R /XYZ 100.892 521.097 null]
+8095 0 obj <<
+/D [8087 0 R /XYZ 100.892 521.097 null]
 >> endobj
-8107 0 obj <<
-/D [8098 0 R /XYZ 100.892 509.141 null]
+8096 0 obj <<
+/D [8087 0 R /XYZ 100.892 509.141 null]
 >> endobj
-8108 0 obj <<
-/D [8098 0 R /XYZ 100.892 497.186 null]
+8097 0 obj <<
+/D [8087 0 R /XYZ 100.892 497.186 null]
 >> endobj
-8109 0 obj <<
-/D [8098 0 R /XYZ 100.892 485.231 null]
+8098 0 obj <<
+/D [8087 0 R /XYZ 100.892 485.231 null]
 >> endobj
-8110 0 obj <<
-/D [8098 0 R /XYZ 100.892 473.276 null]
+8099 0 obj <<
+/D [8087 0 R /XYZ 100.892 473.276 null]
 >> endobj
-8111 0 obj <<
-/D [8098 0 R /XYZ 100.892 461.321 null]
+8100 0 obj <<
+/D [8087 0 R /XYZ 100.892 461.321 null]
 >> endobj
-8112 0 obj <<
-/D [8098 0 R /XYZ 100.892 449.366 null]
+8101 0 obj <<
+/D [8087 0 R /XYZ 100.892 449.366 null]
 >> endobj
-8113 0 obj <<
-/D [8098 0 R /XYZ 100.892 437.41 null]
+8102 0 obj <<
+/D [8087 0 R /XYZ 100.892 437.41 null]
 >> endobj
-8114 0 obj <<
-/D [8098 0 R /XYZ 100.892 425.455 null]
+8103 0 obj <<
+/D [8087 0 R /XYZ 100.892 425.455 null]
 >> endobj
-8115 0 obj <<
-/D [8098 0 R /XYZ 100.892 413.5 null]
+8104 0 obj <<
+/D [8087 0 R /XYZ 100.892 413.5 null]
 >> endobj
-8116 0 obj <<
-/D [8098 0 R /XYZ 100.892 401.545 null]
+8105 0 obj <<
+/D [8087 0 R /XYZ 100.892 401.545 null]
 >> endobj
-8117 0 obj <<
-/D [8098 0 R /XYZ 100.892 389.59 null]
+8106 0 obj <<
+/D [8087 0 R /XYZ 100.892 389.59 null]
 >> endobj
-8118 0 obj <<
-/D [8098 0 R /XYZ 100.892 377.635 null]
+8107 0 obj <<
+/D [8087 0 R /XYZ 100.892 377.635 null]
 >> endobj
-8097 0 obj <<
+8086 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F4 5484 0 R /F59 4373 0 R /F51 3736 0 R /F85 5513 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8122 0 obj <<
+8111 0 obj <<
 /Length 1138      
 /Filter /FlateDecode
 >>
@@ -36650,22 +38975,22 @@
 H$<þð¿`@¡ûÿš¡ÎP«L€0ä«ùÆO0J wÿ—‘>™_0ržŒ…ÿp†­Q‚(÷°úlG5eèfs7Ÿ»M?¦šºt~ðŽà˜aÓ=èUÛŠ.[¿;Ô	ð#¬z%3ʍ—> ;M‘­Ü(•~”š#?BM?Ù)zü;íWèŽÿ HèÛ'
 endstream
 endobj
-8121 0 obj <<
+8110 0 obj <<
 /Type /Page
-/Contents 8122 0 R
-/Resources 8120 0 R
+/Contents 8111 0 R
+/Resources 8109 0 R
 /MediaBox [0 0 612 792]
-/Parent 8124 0 R
+/Parent 8113 0 R
 >> endobj
-8123 0 obj <<
-/D [8121 0 R /XYZ 151.701 685.529 null]
+8112 0 obj <<
+/D [8110 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8120 0 obj <<
+8109 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F88 5678 0 R /F72 5679 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8128 0 obj <<
+8117 0 obj <<
 /Length 1259      
 /Filter /FlateDecode
 >>
@@ -36678,43 +39003,43 @@
 ˜8/p»¢Â+Í£M‚ƒçïoÕ›4NqýâÊ]=9sRÁ‰ˆ‡„åQ +Ib†¡0P&a~ƒ8¦½¿`0?IêæauÁz5°p~“ôቛ{ŽôÚ6Íþr>oÛ–ìÓ¬$Ý€Ò»;P•AðÓåßÐó_ÌÁ–—
 endstream
 endobj
-8127 0 obj <<
+8116 0 obj <<
 /Type /Page
-/Contents 8128 0 R
-/Resources 8126 0 R
+/Contents 8117 0 R
+/Resources 8115 0 R
 /MediaBox [0 0 612 792]
-/Parent 8124 0 R
-/Annots [ 8125 0 R ]
+/Parent 8113 0 R
+/Annots [ 8114 0 R ]
 >> endobj
-8125 0 obj <<
+8114 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 215.082 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.padl.com)>>
 >> endobj
-8129 0 obj <<
-/D [8127 0 R /XYZ 100.892 685.529 null]
+8118 0 obj <<
+/D [8116 0 R /XYZ 100.892 685.529 null]
 >> endobj
-8130 0 obj <<
-/D [8127 0 R /XYZ 100.892 282.221 null]
+8119 0 obj <<
+/D [8116 0 R /XYZ 100.892 282.221 null]
 >> endobj
-8131 0 obj <<
-/D [8127 0 R /XYZ 100.892 259.808 null]
+8120 0 obj <<
+/D [8116 0 R /XYZ 100.892 259.808 null]
 >> endobj
-8132 0 obj <<
-/D [8127 0 R /XYZ 100.892 238.607 null]
+8121 0 obj <<
+/D [8116 0 R /XYZ 100.892 238.607 null]
 >> endobj
-8133 0 obj <<
-/D [8127 0 R /XYZ 100.892 214.982 null]
+8122 0 obj <<
+/D [8116 0 R /XYZ 100.892 214.982 null]
 >> endobj
-8134 0 obj <<
-/D [8127 0 R /XYZ 100.892 178.717 null]
+8123 0 obj <<
+/D [8116 0 R /XYZ 100.892 178.717 null]
 >> endobj
-8126 0 obj <<
+8115 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8137 0 obj <<
+8126 0 obj <<
 /Length 1087      
 /Filter /FlateDecode
 >>
@@ -36729,30 +39054,30 @@
 uü.hÒ_À€9¨¤3¶îòLÖ°»ú?¼#ÿÌaÓÈ
 endstream
 endobj
-8136 0 obj <<
+8125 0 obj <<
 /Type /Page
-/Contents 8137 0 R
-/Resources 8135 0 R
+/Contents 8126 0 R
+/Resources 8124 0 R
 /MediaBox [0 0 612 792]
-/Parent 8124 0 R
+/Parent 8113 0 R
 >> endobj
-8138 0 obj <<
-/D [8136 0 R /XYZ 151.701 685.529 null]
+8127 0 obj <<
+/D [8125 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8139 0 obj <<
-/D [8136 0 R /XYZ 151.701 432.877 null]
+8128 0 obj <<
+/D [8125 0 R /XYZ 151.701 432.877 null]
 >> endobj
-8140 0 obj <<
-/D [8136 0 R /XYZ 151.701 306.417 null]
+8129 0 obj <<
+/D [8125 0 R /XYZ 151.701 306.417 null]
 >> endobj
-8141 0 obj <<
-/D [8136 0 R /XYZ 151.701 207.057 null]
+8130 0 obj <<
+/D [8125 0 R /XYZ 151.701 207.057 null]
 >> endobj
-8135 0 obj <<
+8124 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8145 0 obj <<
+8134 0 obj <<
 /Length 2446      
 /Filter /FlateDecode
 >>
@@ -36777,80 +39102,80 @@
 &/‚Ÿ§7Óé|Ü•Ù‡‰™ÙbñmäuúgLá²é¼¬$%Ú™t•Oò¢È(c£ÿ:Þ~ØÎÓØs,¡2_% UI9èù+‚ßÜþ¯VEñ=7”3àÌ`>î{éS”BöÆT(Ë'ºÇüŠ‹iö¼Ó32+-‹¼ÄO#ÒwyL|“ÎS:°S¶Œnqüz7~UçÈV7p…à±sÌæ}+œ*ËÕS–ë]Ù’0UJÃÇ–Œ*°kL–œ?‘&Fšt<ÎW˜È9Þ<NšT¾ƒå—Ùós+•¶JãYf_*°zê:[zÜwŽ 3ÝÜF5éž×y9¹†Ù[Lf¯&~≞“¶+óÁ,Ç2§¤Ø²2yVOÌ&ÿ};ßäÓN[âé	SV¶LÊXgºkZæqNIëX%uô/fÙtýr¼eô§Ízûüe9ñSà+-»ÂÙÿ ©,
 endstream
 endobj
-8144 0 obj <<
+8133 0 obj <<
 /Type /Page
-/Contents 8145 0 R
-/Resources 8143 0 R
+/Contents 8134 0 R
+/Resources 8132 0 R
 /MediaBox [0 0 612 792]
-/Parent 8124 0 R
-/Annots [ 8142 0 R ]
+/Parent 8113 0 R
+/Annots [ 8131 0 R ]
 >> endobj
-8142 0 obj <<
+8131 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [284.319 544.247 359.494 555.937]
 /Subtype /Link
 /A << /S /GoTo /D (idmaprfc2307) >>
 >> endobj
-8146 0 obj <<
-/D [8144 0 R /XYZ 100.892 685.529 null]
+8135 0 obj <<
+/D [8133 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1190 0 obj <<
-/D [8144 0 R /XYZ 100.892 660.623 null]
+/D [8133 0 R /XYZ 100.892 660.623 null]
 >> endobj
-8147 0 obj <<
-/D [8144 0 R /XYZ 100.892 630.478 null]
+8136 0 obj <<
+/D [8133 0 R /XYZ 100.892 630.478 null]
 >> endobj
 5087 0 obj <<
-/D [8144 0 R /XYZ 100.892 532.379 null]
+/D [8133 0 R /XYZ 100.892 532.379 null]
 >> endobj
-8148 0 obj <<
-/D [8144 0 R /XYZ 100.892 504.081 null]
+8137 0 obj <<
+/D [8133 0 R /XYZ 100.892 504.081 null]
 >> endobj
-8149 0 obj <<
-/D [8144 0 R /XYZ 100.892 498.103 null]
+8138 0 obj <<
+/D [8133 0 R /XYZ 100.892 498.103 null]
 >> endobj
-8150 0 obj <<
-/D [8144 0 R /XYZ 100.892 504.38 null]
+8139 0 obj <<
+/D [8133 0 R /XYZ 100.892 504.38 null]
 >> endobj
-8151 0 obj <<
-/D [8144 0 R /XYZ 100.892 492.425 null]
+8140 0 obj <<
+/D [8133 0 R /XYZ 100.892 492.425 null]
 >> endobj
-8152 0 obj <<
-/D [8144 0 R /XYZ 100.892 480.469 null]
+8141 0 obj <<
+/D [8133 0 R /XYZ 100.892 480.469 null]
 >> endobj
-8153 0 obj <<
-/D [8144 0 R /XYZ 100.892 468.514 null]
+8142 0 obj <<
+/D [8133 0 R /XYZ 100.892 468.514 null]
 >> endobj
-8154 0 obj <<
-/D [8144 0 R /XYZ 100.892 456.559 null]
+8143 0 obj <<
+/D [8133 0 R /XYZ 100.892 456.559 null]
 >> endobj
-8155 0 obj <<
-/D [8144 0 R /XYZ 100.892 444.604 null]
+8144 0 obj <<
+/D [8133 0 R /XYZ 100.892 444.604 null]
 >> endobj
-8156 0 obj <<
-/D [8144 0 R /XYZ 100.892 432.649 null]
+8145 0 obj <<
+/D [8133 0 R /XYZ 100.892 432.649 null]
 >> endobj
-8157 0 obj <<
-/D [8144 0 R /XYZ 100.892 420.694 null]
+8146 0 obj <<
+/D [8133 0 R /XYZ 100.892 420.694 null]
 >> endobj
-8158 0 obj <<
-/D [8144 0 R /XYZ 100.892 408.738 null]
+8147 0 obj <<
+/D [8133 0 R /XYZ 100.892 408.738 null]
 >> endobj
-8159 0 obj <<
-/D [8144 0 R /XYZ 100.892 396.783 null]
+8148 0 obj <<
+/D [8133 0 R /XYZ 100.892 396.783 null]
 >> endobj
-8160 0 obj <<
-/D [8144 0 R /XYZ 100.892 384.828 null]
+8149 0 obj <<
+/D [8133 0 R /XYZ 100.892 384.828 null]
 >> endobj
-8161 0 obj <<
-/D [8144 0 R /XYZ 100.892 372.873 null]
+8150 0 obj <<
+/D [8133 0 R /XYZ 100.892 372.873 null]
 >> endobj
-8143 0 obj <<
+8132 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F4 5484 0 R /F59 4373 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8166 0 obj <<
+8155 0 obj <<
 /Length 1201      
 /Filter /FlateDecode
 >>
@@ -36870,52 +39195,52 @@
 •ŠÉµÔ´ÀóxùÛY„Ñe6UϸHŸ®»ah_DÑñxäûUáV°Ž8†Ž}ÔoÑWÖfÎEîŸÌ}GáÍòÜ¥’:<ëôÿG÷@OŸFyïB¸W­\•UÑ÷u3ØÒûäx[}ÿúbu‹hU¤ áâ½ú^ÃXUð¿©l²«¶íš¢Ü=‰L|e¿@ò¤úõØó'Åç
 endstream
 endobj
-8165 0 obj <<
+8154 0 obj <<
 /Type /Page
-/Contents 8166 0 R
-/Resources 8164 0 R
+/Contents 8155 0 R
+/Resources 8153 0 R
 /MediaBox [0 0 612 792]
-/Parent 8124 0 R
-/Annots [ 8162 0 R 8163 0 R 8170 0 R ]
+/Parent 8113 0 R
+/Annots [ 8151 0 R 8152 0 R 8159 0 R ]
 >> endobj
-8162 0 obj <<
+8151 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 138.879 350.622 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.microsoft.com/windows/sfu/)>>
 >> endobj
-8163 0 obj <<
+8152 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 129.215 511.352 140.871]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.geekcomix.com/cgi-bin/classnotes/wiki.pl?LDAP01/An_Alternative_Approach)>>
 >> endobj
-8170 0 obj <<
+8159 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [150.705 116.961 246.843 127.721]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.geekcomix.com/cgi-bin/classnotes/wiki.pl?LDAP01/An_Alternative_Approach)>>
 >> endobj
-8167 0 obj <<
-/D [8165 0 R /XYZ 151.701 685.529 null]
+8156 0 obj <<
+/D [8154 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1194 0 obj <<
-/D [8165 0 R /XYZ 151.701 539.782 null]
+/D [8154 0 R /XYZ 151.701 539.782 null]
 >> endobj
-8168 0 obj <<
-/D [8165 0 R /XYZ 151.701 513.812 null]
+8157 0 obj <<
+/D [8154 0 R /XYZ 151.701 513.812 null]
 >> endobj
 1198 0 obj <<
-/D [8165 0 R /XYZ 151.701 453.483 null]
+/D [8154 0 R /XYZ 151.701 453.483 null]
 >> endobj
-8169 0 obj <<
-/D [8165 0 R /XYZ 151.701 427.513 null]
+8158 0 obj <<
+/D [8154 0 R /XYZ 151.701 427.513 null]
 >> endobj
-8164 0 obj <<
+8153 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8173 0 obj <<
+8162 0 obj <<
 /Length 1440      
 /Filter /FlateDecode
 >>
@@ -36937,27 +39262,27 @@
 ‡’0‰#V$ë3V’”€Ð„—~¼ôÌÅø€œ†67wݲv'Dùa5†çh/·ïü²?¹®“d;uÊÏpkMÁp÷ëI¡3å;µÁVšÌüðÒ]«ëºGÂ2óÑaÔ¬‰>iÛòâ8øâ/?ÿ8L&<tá›þV^†s ž»"‰RÁÈd³Å!ø?ùEoÖ
 endstream
 endobj
-8172 0 obj <<
+8161 0 obj <<
 /Type /Page
-/Contents 8173 0 R
-/Resources 8171 0 R
+/Contents 8162 0 R
+/Resources 8160 0 R
 /MediaBox [0 0 612 792]
-/Parent 8124 0 R
+/Parent 8113 0 R
 >> endobj
-8174 0 obj <<
-/D [8172 0 R /XYZ 100.892 685.529 null]
+8163 0 obj <<
+/D [8161 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1202 0 obj <<
-/D [8172 0 R /XYZ 100.892 660.623 null]
+/D [8161 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3814 0 obj <<
-/D [8172 0 R /XYZ 100.892 466.99 null]
+/D [8161 0 R /XYZ 100.892 466.99 null]
 >> endobj
-8171 0 obj <<
+8160 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8178 0 obj <<
+8167 0 obj <<
 /Length 2133      
 /Filter /FlateDecode
 >>
@@ -36984,36 +39309,36 @@
 „*‹h‚‡AG«ð¹K„’#vp"v%×>ac´PIo¸ñEé⟀*ÃÃê9;§”ùk¶³&J©¿l‚ |)”3ÉÍ–Ì•nËOI ˜Ï—¶ŒÌXsŠñÅ2=òB÷ 2®ÈäÒ(v¹þþ¼ÕÚáùüûJ”K
 endstream
 endobj
-8177 0 obj <<
+8166 0 obj <<
 /Type /Page
-/Contents 8178 0 R
-/Resources 8176 0 R
+/Contents 8167 0 R
+/Resources 8165 0 R
 /MediaBox [0 0 612 792]
-/Parent 8181 0 R
-/Annots [ 8175 0 R ]
+/Parent 8170 0 R
+/Annots [ 8164 0 R ]
 >> endobj
-8175 0 obj <<
+8164 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.506 131.677 481.841 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (rp-privs) >>
 >> endobj
-8179 0 obj <<
-/D [8177 0 R /XYZ 151.701 685.529 null]
+8168 0 obj <<
+/D [8166 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1206 0 obj <<
-/D [8177 0 R /XYZ 151.701 246.098 null]
+/D [8166 0 R /XYZ 151.701 246.098 null]
 >> endobj
-8180 0 obj <<
-/D [8177 0 R /XYZ 151.701 215.805 null]
+8169 0 obj <<
+/D [8166 0 R /XYZ 151.701 215.805 null]
 >> endobj
-8176 0 obj <<
+8165 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F88 5678 0 R /F72 5679 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R /F59 4373 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8185 0 obj <<
+8174 0 obj <<
 /Length 2258      
 /Filter /FlateDecode
 >>
@@ -37040,33 +39365,33 @@
 ÷´'M¼¼¥'ò¢ìÆ>Ð7G“R¯Ý¯|£¤¿¸ØFô¼$,X'žPëÿ¨LÈ
 endstream
 endobj
-8184 0 obj <<
+8173 0 obj <<
 /Type /Page
-/Contents 8185 0 R
-/Resources 8183 0 R
+/Contents 8174 0 R
+/Resources 8172 0 R
 /MediaBox [0 0 612 792]
-/Parent 8181 0 R
+/Parent 8170 0 R
 >> endobj
-8186 0 obj <<
-/D [8184 0 R /XYZ 100.892 685.529 null]
+8175 0 obj <<
+/D [8173 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5355 0 obj <<
-/D [8184 0 R /XYZ 100.892 637.435 null]
+/D [8173 0 R /XYZ 100.892 637.435 null]
 >> endobj
-8182 0 obj <<
-/D [8184 0 R /XYZ 100.892 620.565 null]
+8171 0 obj <<
+/D [8173 0 R /XYZ 100.892 620.565 null]
 >> endobj
 1210 0 obj <<
-/D [8184 0 R /XYZ 100.892 494.351 null]
+/D [8173 0 R /XYZ 100.892 494.351 null]
 >> endobj
-8187 0 obj <<
-/D [8184 0 R /XYZ 100.892 465.793 null]
+8176 0 obj <<
+/D [8173 0 R /XYZ 100.892 465.793 null]
 >> endobj
-8183 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F51 3736 0 R /F53 3738 0 R /F94 8188 0 R >>
+8172 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F51 3736 0 R /F53 3738 0 R /F94 8177 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8191 0 obj <<
+8180 0 obj <<
 /Length 1866      
 /Filter /FlateDecode
 >>
@@ -37091,22 +39416,22 @@
 ¢ÃâÌœé8œÛš×_CÜF’UAÜŸ[fY^8œgfºÖì*`‚`îí^掹þ2Ð/i2­_@áp÷?·xº%
 endstream
 endobj
-8190 0 obj <<
+8179 0 obj <<
 /Type /Page
-/Contents 8191 0 R
-/Resources 8189 0 R
+/Contents 8180 0 R
+/Resources 8178 0 R
 /MediaBox [0 0 612 792]
-/Parent 8181 0 R
+/Parent 8170 0 R
 >> endobj
-8192 0 obj <<
-/D [8190 0 R /XYZ 151.701 685.529 null]
+8181 0 obj <<
+/D [8179 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8189 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F51 3736 0 R /F94 8188 0 R /F88 5678 0 R /F72 5679 0 R /F85 5513 0 R >>
+8178 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F51 3736 0 R /F94 8177 0 R /F88 5678 0 R /F72 5679 0 R /F85 5513 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8195 0 obj <<
+8184 0 obj <<
 /Length 2042      
 /Filter /FlateDecode
 >>
@@ -37129,27 +39454,27 @@
 k–`ùÞp ˆâãl®îõÖ ¹Ñ×Q׊Û|Ô–žLÀE)="d²ñ@dXL¶;Y¼ËQ®Œ´Laù®Uäÿ»ã@ƒp´³uRÑL$ÝÃÇ\Üñ¬U p´gw>¤Ý<B$ió…÷œ¦Î¦(}u(ÃÚ°SdQù’ Ë|nQ†›("Ï feYø;¤9ðo’ž‡pÇ Û€:º€u?¹{nÅÔåïÞïXß}¾qß„ˆ?ÃëlÒÏDÅyjü¾ö_‰ˆXhÓåF®ž€à~öøa‘¯0BøÊGâÀ„‹k¾XÞBÍ%.XŠè<MþÖæBwE½áŽ¾çM¼_‘œ^\â:ƒåcäãVyrNþuô/+·›ž¡ÈwåÅÀ;“ÉÆÚùñ«ß±Ò2Ž©AyØA=›_–¸À#ÿUn˪¢Ð]F¶wÃØ1 ¡5¡lʼnk=¿3±[ÚJ&;ÙIw<æ6+ö Ÿ£ÿiü¿a¸„À;X²ªØ¦Ý:tæ¡”˜­›m›t>ÞØô¬/µ”®?H·Ï_n	×ËKkŽDm¸™¡gñÉõ·Wö-÷¶÷Æ?vÿÞ¾‡
 endstream
 endobj
-8194 0 obj <<
+8183 0 obj <<
 /Type /Page
-/Contents 8195 0 R
-/Resources 8193 0 R
+/Contents 8184 0 R
+/Resources 8182 0 R
 /MediaBox [0 0 612 792]
-/Parent 8181 0 R
+/Parent 8170 0 R
 >> endobj
-8196 0 obj <<
-/D [8194 0 R /XYZ 100.892 685.529 null]
+8185 0 obj <<
+/D [8183 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1214 0 obj <<
-/D [8194 0 R /XYZ 100.892 633.574 null]
+/D [8183 0 R /XYZ 100.892 633.574 null]
 >> endobj
-8197 0 obj <<
-/D [8194 0 R /XYZ 100.892 607.827 null]
+8186 0 obj <<
+/D [8183 0 R /XYZ 100.892 607.827 null]
 >> endobj
-8193 0 obj <<
+8182 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8200 0 obj <<
+8189 0 obj <<
 /Length 1271      
 /Filter /FlateDecode
 >>
@@ -37169,27 +39494,27 @@
 åÛÁíËX3‹³›ª;ÖɇµƒÛ™ÒÀ§÷‡niærªË™ÐÜÌ¢t3ÿ«›ýŸ^ÌÎþ^ƒ?ÿ¨%'Y
 endstream
 endobj
-8199 0 obj <<
+8188 0 obj <<
 /Type /Page
-/Contents 8200 0 R
-/Resources 8198 0 R
+/Contents 8189 0 R
+/Resources 8187 0 R
 /MediaBox [0 0 612 792]
-/Parent 8181 0 R
+/Parent 8170 0 R
 >> endobj
-8201 0 obj <<
-/D [8199 0 R /XYZ 151.701 685.529 null]
+8190 0 obj <<
+/D [8188 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1218 0 obj <<
-/D [8199 0 R /XYZ 151.701 622.631 null]
+/D [8188 0 R /XYZ 151.701 622.631 null]
 >> endobj
-8202 0 obj <<
-/D [8199 0 R /XYZ 151.701 594.105 null]
+8191 0 obj <<
+/D [8188 0 R /XYZ 151.701 594.105 null]
 >> endobj
-8198 0 obj <<
+8187 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8206 0 obj <<
+8195 0 obj <<
 /Length 1514      
 /Filter /FlateDecode
 >>
@@ -37208,35 +39533,35 @@
 Pl®À»xbÿ펗m
 endstream
 endobj
-8205 0 obj <<
+8194 0 obj <<
 /Type /Page
-/Contents 8206 0 R
-/Resources 8204 0 R
+/Contents 8195 0 R
+/Resources 8193 0 R
 /MediaBox [0 0 612 792]
-/Parent 8181 0 R
-/Annots [ 8203 0 R ]
+/Parent 8170 0 R
+/Annots [ 8192 0 R ]
 >> endobj
-8203 0 obj <<
+8192 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 117.522 293.946 130.423]
 /Subtype /Link
 /A << /S /GoTo /D (rights) >>
 >> endobj
-8207 0 obj <<
-/D [8205 0 R /XYZ 100.892 685.529 null]
+8196 0 obj <<
+/D [8194 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1222 0 obj <<
-/D [8205 0 R /XYZ 100.892 212.226 null]
+/D [8194 0 R /XYZ 100.892 212.226 null]
 >> endobj
-8208 0 obj <<
-/D [8205 0 R /XYZ 100.892 183.893 null]
+8197 0 obj <<
+/D [8194 0 R /XYZ 100.892 183.893 null]
 >> endobj
-8204 0 obj <<
+8193 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8211 0 obj <<
+8200 0 obj <<
 /Length 1445      
 /Filter /FlateDecode
 >>
@@ -37252,34 +39577,34 @@
 ®ÏOÛ‰¦]ûŽ |_eÁáÆ8âD³’¶ýø•b4ñ˜•¸ßRâÇ9ÿ0‚•¡¿”PµVuÕoËЇ¨Çc#Êy’È?Ààà)hà6¬9ËoAÎgÒpÆŠM×öAk:uq‹L#m è$´Õ$thvWC[i¥Äh—4k-Rñ²ƒ—³Z@õ:ÚxlE8Chi”y´!u°r»å’菳u¾Ðs"s:[ãþ¶¢j*oçVÁwÕ0Jð’àÃCP}QWX;ðÍ¡7§.;ÁÇ€ØÏMñxÌdÐKC{ºÝR¨Ò½ošÒwSqÏ¢ëeÂ(Š(ô±±hîD¡ø–ÊeÏ»œ•¸Šâ<š¥¡¬¹¬¸©ÛU^eÒœír2#ÒåûswNS™¨dœˆNôN®¾8Å…ÜPœ—©+¶»’Gm†t×o«=kPÉ7uK:ëóžA™2£¡¢D?þW(ì4§|^
 endstream
 endobj
-8210 0 obj <<
+8199 0 obj <<
 /Type /Page
-/Contents 8211 0 R
-/Resources 8209 0 R
+/Contents 8200 0 R
+/Resources 8198 0 R
 /MediaBox [0 0 612 792]
-/Parent 8215 0 R
+/Parent 8204 0 R
 >> endobj
-8212 0 obj <<
-/D [8210 0 R /XYZ 151.701 685.529 null]
+8201 0 obj <<
+/D [8199 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1226 0 obj <<
-/D [8210 0 R /XYZ 151.701 228.557 null]
+/D [8199 0 R /XYZ 151.701 228.557 null]
 >> endobj
-8213 0 obj <<
-/D [8210 0 R /XYZ 151.701 199.475 null]
+8202 0 obj <<
+/D [8199 0 R /XYZ 151.701 199.475 null]
 >> endobj
 1230 0 obj <<
-/D [8210 0 R /XYZ 151.701 199.475 null]
+/D [8199 0 R /XYZ 151.701 199.475 null]
 >> endobj
-8214 0 obj <<
-/D [8210 0 R /XYZ 151.701 157.542 null]
+8203 0 obj <<
+/D [8199 0 R /XYZ 151.701 157.542 null]
 >> endobj
-8209 0 obj <<
+8198 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8219 0 obj <<
+8208 0 obj <<
 /Length 1166      
 /Filter /FlateDecode
 >>
@@ -37290,29 +39615,29 @@
 ¡)œP ¸Nv)Uæµ; eIu€Ã‚ƒPM塽ó…²Ð‹Yï’1ÕñÞ¸×0ñ0·›Âu«¶dRÉÑü—±þ:ÝajÖzÒ"›v<4å_C™˜¾†ú³­ëŸ6³ßíá2Ø÷ëß$¼ðÛ€%˵ ?ßÿ“ù?"÷]èïžÚl‚`pnæ,ô„½ó’ÅIö[k‹Þl;Tϵøró+ôÎê(¨×týíOLJUè}[QCסßÇ›AL÷†÷†X3oTtq8¸ËtsÂæÈGßø„çÿ—ðc
 endstream
 endobj
-8218 0 obj <<
+8207 0 obj <<
 /Type /Page
-/Contents 8219 0 R
-/Resources 8217 0 R
+/Contents 8208 0 R
+/Resources 8206 0 R
 /MediaBox [0 0 612 792]
-/Parent 8215 0 R
-/Annots [ 8216 0 R ]
+/Parent 8204 0 R
+/Annots [ 8205 0 R ]
 >> endobj
-8216 0 obj <<
+8205 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [119.771 524.604 188.306 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (nestedgrpmgmgt) >>
 >> endobj
-8220 0 obj <<
-/D [8218 0 R /XYZ 100.892 685.529 null]
+8209 0 obj <<
+/D [8207 0 R /XYZ 100.892 685.529 null]
 >> endobj
-8217 0 obj <<
+8206 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8223 0 obj <<
+8212 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -37320,20 +39645,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-8222 0 obj <<
+8211 0 obj <<
 /Type /Page
-/Contents 8223 0 R
-/Resources 8221 0 R
+/Contents 8212 0 R
+/Resources 8210 0 R
 /MediaBox [0 0 612 792]
-/Parent 8215 0 R
+/Parent 8204 0 R
 >> endobj
-8224 0 obj <<
-/D [8222 0 R /XYZ 151.701 685.529 null]
+8213 0 obj <<
+/D [8211 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8221 0 obj <<
+8210 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-8227 0 obj <<
+8216 0 obj <<
 /Length 1639      
 /Filter /FlateDecode
 >>
@@ -37346,27 +39671,27 @@
 PÑ) zŠ€Çv6žˆãXÉQÎÝÀ盡ö¦,­±.O?­Ÿy›¢[ŠÙÑô#<LåúàkG+OTóhA—’GÌP‰ Ò˜r•D `–bŒéÒÈ‚–ûdg?vxTûó\¤³›©0ûžúñüœš±ÐÝ·žêG?ž¹ñΗ_¿½Ëÿw!þ#gaê  VQhÛ2ôý‹ð?ù_lL
 endstream
 endobj
-8226 0 obj <<
+8215 0 obj <<
 /Type /Page
-/Contents 8227 0 R
-/Resources 8225 0 R
+/Contents 8216 0 R
+/Resources 8214 0 R
 /MediaBox [0 0 612 792]
-/Parent 8215 0 R
+/Parent 8204 0 R
 >> endobj
-8228 0 obj <<
-/D [8226 0 R /XYZ 100.892 685.529 null]
+8217 0 obj <<
+/D [8215 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1234 0 obj <<
-/D [8226 0 R /XYZ 100.892 660.623 null]
+/D [8215 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3815 0 obj <<
-/D [8226 0 R /XYZ 100.892 474.265 null]
+/D [8215 0 R /XYZ 100.892 474.265 null]
 >> endobj
-8225 0 obj <<
+8214 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8231 0 obj <<
+8220 0 obj <<
 /Length 2111      
 /Filter /FlateDecode
 >>
@@ -37384,27 +39709,27 @@
 L¹íQÇœ¡x¢õ‚îÀ<Ò´¹×é8ŽßÞßü	OÂy¥
 endstream
 endobj
-8230 0 obj <<
+8219 0 obj <<
 /Type /Page
-/Contents 8231 0 R
-/Resources 8229 0 R
+/Contents 8220 0 R
+/Resources 8218 0 R
 /MediaBox [0 0 612 792]
-/Parent 8215 0 R
+/Parent 8204 0 R
 >> endobj
-8232 0 obj <<
-/D [8230 0 R /XYZ 151.701 685.529 null]
+8221 0 obj <<
+/D [8219 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1238 0 obj <<
-/D [8230 0 R /XYZ 151.701 547.944 null]
+/D [8219 0 R /XYZ 151.701 547.944 null]
 >> endobj
-8233 0 obj <<
-/D [8230 0 R /XYZ 151.701 520.497 null]
+8222 0 obj <<
+/D [8219 0 R /XYZ 151.701 520.497 null]
 >> endobj
-8229 0 obj <<
+8218 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F88 5678 0 R /F51 3736 0 R /F59 4373 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8236 0 obj <<
+8225 0 obj <<
 /Length 2036      
 /Filter /FlateDecode
 >>
@@ -37428,33 +39753,33 @@
 œ%¹© AWÕGÀ!4ÔÇ ›Çë•œ@Òg?óK¼åtòõÕºï/‡Ýÿ«1¾
 endstream
 endobj
-8235 0 obj <<
+8224 0 obj <<
 /Type /Page
-/Contents 8236 0 R
-/Resources 8234 0 R
+/Contents 8225 0 R
+/Resources 8223 0 R
 /MediaBox [0 0 612 792]
-/Parent 8215 0 R
+/Parent 8204 0 R
 >> endobj
-8237 0 obj <<
-/D [8235 0 R /XYZ 100.892 685.529 null]
+8226 0 obj <<
+/D [8224 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1242 0 obj <<
-/D [8235 0 R /XYZ 100.892 523.068 null]
+/D [8224 0 R /XYZ 100.892 523.068 null]
 >> endobj
-8238 0 obj <<
-/D [8235 0 R /XYZ 100.892 491.981 null]
+8227 0 obj <<
+/D [8224 0 R /XYZ 100.892 491.981 null]
 >> endobj
 1246 0 obj <<
-/D [8235 0 R /XYZ 100.892 398.525 null]
+/D [8224 0 R /XYZ 100.892 398.525 null]
 >> endobj
-8239 0 obj <<
-/D [8235 0 R /XYZ 100.892 370.451 null]
+8228 0 obj <<
+/D [8224 0 R /XYZ 100.892 370.451 null]
 >> endobj
-8234 0 obj <<
+8223 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F51 3736 0 R /F59 4373 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8242 0 obj <<
+8231 0 obj <<
 /Length 1741      
 /Filter /FlateDecode
 >>
@@ -37486,21 +39811,21 @@
 ƒ¤Œçÿ	hwÝdœ]qçõo"Â}JÂ…241?¾ôî÷Ò[¢ù{*,‚(ŸÞk—:Q”"ºçgع0UDA–WÓγý*ƒÈ›Æì`x$²|«<ÿ‰úȨSxµ«7sý/z£JU£n/—Ô‡ßó$k—ہG-¤Ÿµ%‹T0\ f²€FÃJŒ•ŸU+fÔº1µ´§[èoNR¥‘~#ã!‰L	{	¯ñûf»úè¡…1
 endstream
 endobj
-8241 0 obj <<
+8230 0 obj <<
 /Type /Page
-/Contents 8242 0 R
-/Resources 8240 0 R
+/Contents 8231 0 R
+/Resources 8229 0 R
 /MediaBox [0 0 612 792]
-/Parent 8244 0 R
+/Parent 8233 0 R
 >> endobj
-8243 0 obj <<
-/D [8241 0 R /XYZ 151.701 685.529 null]
+8232 0 obj <<
+/D [8230 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8240 0 obj <<
+8229 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8248 0 obj <<
+8237 0 obj <<
 /Length 2084      
 /Filter /FlateDecode
 >>
@@ -37518,35 +39843,35 @@
 •þ”McQ‰ª=Ú5!íu¢{µÆ*ñ²ëS²²ý£Ð‹3󇜨þxI-<ŒdD¶¯qŒ|/ÈòõG¬óq‡¡»ßÒûYJWN¾îÉLâÓëéûB¥Ã£aÕJÑò®Éï^¦ “8Šç÷³˜ÆLr™h§scOóÔ"¿æqŠã…Ç¥zÓ÷ÇýæÄcn
 endstream
 endobj
-8247 0 obj <<
+8236 0 obj <<
 /Type /Page
-/Contents 8248 0 R
-/Resources 8246 0 R
+/Contents 8237 0 R
+/Resources 8235 0 R
 /MediaBox [0 0 612 792]
-/Parent 8244 0 R
-/Annots [ 8245 0 R ]
+/Parent 8233 0 R
+/Annots [ 8234 0 R ]
 >> endobj
-8245 0 obj <<
+8234 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [148.815 131.677 200.485 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (TOSH-Accesstbl) >>
 >> endobj
-8249 0 obj <<
-/D [8247 0 R /XYZ 100.892 685.529 null]
+8238 0 obj <<
+/D [8236 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1250 0 obj <<
-/D [8247 0 R /XYZ 100.892 206.915 null]
+/D [8236 0 R /XYZ 100.892 206.915 null]
 >> endobj
-8250 0 obj <<
-/D [8247 0 R /XYZ 100.892 173.85 null]
+8239 0 obj <<
+/D [8236 0 R /XYZ 100.892 173.85 null]
 >> endobj
-8246 0 obj <<
+8235 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F51 3736 0 R /F59 4373 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8257 0 obj <<
+8246 0 obj <<
 /Length 1685      
 /Filter /FlateDecode
 >>
@@ -37568,41 +39893,41 @@
 (鬡~<€¯»¶¦·ª¼HÕRtf±´êxDS×áYúYTê7ÈvVpPÖظ"j…§XGÃðD‹Ëï©(©Lsӏ,èB»cí§0Þ~lÊν/ðPnW·îµ7ÿY:ESºBÌ÷@3¶ÓÈUFˆðÆî`ê’ÜY„ð¬²~ µšŽÓ pgIEf?þqc¶)FJr÷„ÆÎ>»‘î;bãîi85âݝ)×Nꈃå‰xˆïÐUûñ›`ô_)AY¹/ ÆÿVo‰q¢à¹^út¹¹âxŸ¬ô½Y¬:çió…yG‡ŽÝ_náÎö?Z¸Ø
 endstream
 endobj
-8256 0 obj <<
+8245 0 obj <<
 /Type /Page
-/Contents 8257 0 R
-/Resources 8255 0 R
+/Contents 8246 0 R
+/Resources 8244 0 R
 /MediaBox [0 0 612 792]
-/Parent 8244 0 R
-/Annots [ 8252 0 R ]
+/Parent 8233 0 R
+/Annots [ 8241 0 R ]
 >> endobj
-8252 0 obj <<
+8241 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.796 118.128 439.607 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (access1) >>
 >> endobj
-8258 0 obj <<
-/D [8256 0 R /XYZ 151.701 685.529 null]
+8247 0 obj <<
+/D [8245 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5356 0 obj <<
-/D [8256 0 R /XYZ 151.701 660.623 null]
+/D [8245 0 R /XYZ 151.701 660.623 null]
 >> endobj
-8251 0 obj <<
-/D [8256 0 R /XYZ 151.701 643.753 null]
+8240 0 obj <<
+/D [8245 0 R /XYZ 151.701 643.753 null]
 >> endobj
 1254 0 obj <<
-/D [8256 0 R /XYZ 151.701 562.888 null]
+/D [8245 0 R /XYZ 151.701 562.888 null]
 >> endobj
-8259 0 obj <<
-/D [8256 0 R /XYZ 151.701 543.968 null]
+8248 0 obj <<
+/D [8245 0 R /XYZ 151.701 543.968 null]
 >> endobj
-8255 0 obj <<
+8244 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8263 0 obj <<
+8252 0 obj <<
 /Length 1691      
 /Filter /FlateDecode
 >>
@@ -37621,200 +39946,547 @@
 <Ô‚œ›©±Â¢g äµßs¿%@3ðdêK¢D×gÖÑîùtßÆNß¿ÜöNNÙ~ztüpnC‚ª½$¯ÌËŠõˆØÒALL°Ø˜ön½k†nÒ0Ò膶3>(3¸þ±ßpÞnœ–ƒ=³cË Špbˆ3‘¢0!±Ü„$±È&€Sp“¡ùªd;‰Á·(LþÄÕ u¦uú§§âºÖ)tã˜EJûáà«¿oXÿçÛo“
 endstream
 endobj
-8262 0 obj <<
+8251 0 obj <<
 /Type /Page
-/Contents 8263 0 R
-/Resources 8261 0 R
+/Contents 8252 0 R
+/Resources 8250 0 R
 /MediaBox [0 0 612 792]
-/Parent 8244 0 R
-/Annots [ 8254 0 R ]
+/Parent 8233 0 R
+/Annots [ 8243 0 R ]
 >> endobj
-8253 0 obj <<
+8242 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-HOWTO/images/access1.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 8266 0 R
+/PTEX.InfoDict 8255 0 R
 /BBox [0 0 845 343]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 8267 0 R
->>/Font << /R9 8268 0 R/R11 8269 0 R>>
+/R7 8256 0 R
+>>/Font << /R8 8257 0 R/R10 8258 0 R>>
 >>
-/Length 8270 0 R
+/Length 8259 0 R
 /Filter /FlateDecode
 >>
 stream
-xœÍUMoÚ@½ï¯˜[R)ìì÷^EU¥\Š-õLÁ¡nMH(ɿ½ȧÊ6ÏoÞ¾Ýyë}‰rsí¸y˜-…r(c€WAPŠ-F_YTÁ*Ф"† D& &PÁ£ôêBd;v=/‚šçÝm2‡/9AI>ÈE30Ñ,mèÍ;rÏÅõêý¹ø”ÿ÷¹øÎÄÍŲ¤cî)—†:%ÐZ»çt½,êå¡Uå,!±zi¨U5µouV/ÖχVu´Üò3V/ 
-î?'.þcu±úutYÛ*¯šp–3Ø)·_ÏR„ÎoN¡ú8§']žåN©çP9›º¬áÞ>é)Ÿç9C}jiP]ä³
-ß)Ÿç9ÿO
-É÷y;"Ú«Q>ŸÇ`9)ùT\ߍŸàþ­˜¬WÅ
-<”Ë<–U±
-wSi!hh?êrCº«‹ñªØÑ®šW£b<½ÙþîãÇ”¯þµoKÃò}þsQ•¨Ê§?:-ëb²ZÔïŒlm¬–¨tÛ»yPä5·*nð¤ì ›kÈ£õG¥N±XKÆl2à ïr¦ª¾¬C2¡(7ŸgÐrYu&­iþrâÐhӏÓ¤-§‰Òšá2ɧ‘Oìñ~Rè: ê ލNu:$ãZ‰1YW%½o&°Ói¨=:Þ½Nd‚"§Ù$ӠȃXÓë´€WwGLtz„u<‹¦ó"ïø,KæÕ–”>]ÓÉ„ã=èÓemM„|<&e=’	ËÏÛÝÞ–µ IÅ_ÿ½®w‡Å9‰^%aiŠuºh=’qöÿÙÌ
-¶
+xœÍUMoÚ@½ï¯˜[R)ìì·¯¢ªR.ÅH=S0”Ö‰%üûøk)#Ÿ*KØ<¿yûvç­÷$ÈýUߧ…¸yX¬Áþ*‚,ª`hR	† D& &PÁ£ôÊLÌ…r(“ oâ £¯×”¥5›yT=×·i_Æl%€’|00ž‹Ê"Ñµôþyâv³{É>‹Ç±øy×Æ1÷²÷+HC’h­=rº]gåúÔªr–z¬^AjU%ƒrGVåjûrjU'–ÛÝcõ
+ÒàþsÚu¼ª«Í¯³ËÚÄPyÐüã"ÔèåvÊí—Ƴ¡«ŒÎ ÿ8§]ör§Ôs¨œ]–ðï‡ô’Ï~ÎPŸZTWùlÂwÉg?gø÷I!™ó>ïG¬×(Ÿ‡ÏÎc°–`<·“gx|ϦÛMvOËõæË<;„»ªdÚSEûQ.÷¤‡2›l²švS½e“ÙÝá÷?§|ó¨}[ÃÖ»âç*_N!_>ÿiÑٲ̦›U¹cäÐhcµD¥›Þ-@	¯¹usƒ¯ ¥'X!¬!ÖŸ•ºÄb-m³Ñ€5@Þ+äLå]Y‹¤BPî??Πå² ëL\SýåšѦ§H[NÅ5-Âe’O#Ùãý¤Ðµ@Þ¼ë´HÊ´“h]•ô¾š@­Ó ‰öèx#t:’
+J8Í&š%<ˆ5Nxxw$‘N‡°ŽgÑx^äŸeѼÀò€û³§ÓéT8Þƒ>^ÖÐDÈÇcTÖ!©°ü|ØíMYTüõ?êz‹pXœ“èU– D¢Ž­CRÎþ__j
 endstream
 endobj
-8266 0 obj
+8255 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610111330)
-/ModDate (D:20080610111330)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528091005-05'00')
+/ModDate (D:20080528091005-05'00')
 >>
 endobj
-8267 0 obj
+8256 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-8268 0 obj
+8257 0 obj
 <<
-/BaseFont /COMJEP#2BAlbanyAMT
-/FontDescriptor 8271 0 R
+/BaseFont /SSWNMX#2BDejaVuSans
+/FontDescriptor 8260 0 R
 /Type /Font
 /FirstChar 32
 /LastChar 121
-/Widths [ 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 0 600 600 0 0 0 600 0 0 600 600 0 600 600 600 600 0 600 600 600]
+/Widths [ 318 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 635 615 0 635 634 0 0 0 278 0 0 612 635 0 411 521 392 634 0 818 592 592]
 /Encoding /WinAnsiEncoding
-/Subtype /Type1
+/Subtype /TrueType
 >>
 endobj
-8269 0 obj
+8258 0 obj
 <<
-/BaseFont /JRDGVI#2BDejaVuSansMono
-/FontDescriptor 8272 0 R
+/BaseFont /HCJMNA#2BDejaVuSansMono
+/FontDescriptor 8261 0 R
 /Type /Font
 /FirstChar 32
 /LastChar 121
-/Widths [ 600 0 0 0 0 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 0 600 0 0 0 600 0 0 600 0 0 0 0 0 600 0 0 0 0 600 0 0 0 0 0 0 0 0 0 600 600 600 600 600 600 0 0 600 0 600 600 600 600 600 0 0 600 600 600 600 0 0 600 600]
+/Widths [ 602 0 0 0 0 0 0 0 0 0 0 0 602 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 602 0 602 0 0 0 602 0 0 602 0 0 0 0 0 602 0 0 0 0 602 0 0 0 0 0 0 0 0 0 602 602 602 602 602 602 0 0 602 0 602 602 602 602 602 0 0 602 602 602 602 0 0 602 602]
 /Encoding /WinAnsiEncoding
-/Subtype /Type1
+/Subtype /TrueType
 >>
 endobj
-8270 0 obj
-629
+8259 0 obj
+630
 endobj
-8271 0 obj
+8260 0 obj
 <<
 /Type /FontDescriptor
-/FontName /COMJEP#2BAlbanyAMT
-/FontBBox [ 0 -186 570 604]
-/Flags 5
-/Ascent 604
-/CapHeight 604
-/Descent -186
+/FontName /SSWNMX#2BDejaVuSans
+/FontBBox [ 0 -208 775 759]
+/Flags 4
+/Ascent 759
+/CapHeight 759
+/Descent -208
 /ItalicAngle 0
-/StemV 85
-/AvgWidth 600
-/MaxWidth 600
+/StemV 116
 /MissingWidth 600
-/CharSet (/y/o/d/p/e/r/g/s/h/t/u/w/l/x/space)
-/FontFile3 8273 0 R
+/FontFile2 8262 0 R
 >>
 endobj
-8272 0 obj
+8261 0 obj
 <<
 /Type /FontDescriptor
-/FontName /JRDGVI#2BDejaVuSansMono
-/FontBBox [ 0 -186 593 627]
-/Flags 5
-/Ascent 627
-/CapHeight 627
-/Descent -186
+/FontName /HCJMNA#2BDejaVuSansMono
+/FontBBox [ 0 -208 602 765]
+/Flags 4
+/Ascent 765
+/CapHeight 765
+/Descent -208
 /ItalicAngle 0
-/StemV 88
-/AvgWidth 600
-/MaxWidth 600
-/MissingWidth 600
-/CharSet (/L/y/n/c/comma/o/d/C/e/f/E/r/s/R/t/i/u/I/k/l/a/x/m/b/W/space)
-/FontFile3 8274 0 R
+/StemV 90
+/MissingWidth 602
+/FontFile2 8263 0 R
 >>
 endobj
-8273 0 obj
+8262 0 obj
 <<
-/Subtype /Type1C
 /Filter /FlateDecode
-/Length 8275 0 R
+/Length1 84528
+/Length 33255
 >>
 stream
-xœmT{PTe¿—Ýývƒp¯¹w§HÞ¢$)ˆ®F¦¢”eBÀ¸°Ù]ew±ì¦Sûr±} ¥¦øj¼˜R‘@¯©±—’ZMš%Cô:·ùœ¦owƒ­¦îÜïÞs¾sÎï÷;?šGP4MGh+ÊëÅ«§L!îŠfŠ8\"|"ŒKfRùóꧽ §9¹ˆ“‹»î’Ð=^ˆÍ±”ˆ¦
-;÷êôƆÚêš&uréʵ)iiéá/ssrrÔÆÉ?êÅUµÕõêYäeS•V§¯«ªoÊS’h­¶vƒºZkÔ×4ªË++«*ikʵUÕšZm­^¯Û¤N.LQgÍ™37ƒ<²Jjë*šÕźzúõʪêfmyÿ>RcÔUꫪkšš[´5E=N­ –PRjµŒZM=D•Rk¨2ª˜zŒ¢©X‚
-%¦Z¨7èúúˆêˆ›¢ãâL1'“¬’ØP.Z(ŒEc¸¤Gððt,„X ‚cq‹q¢3Èh¶´µ9,^Z‘×nw»-v#[„À!x$Èë°uºÍ6#‹EÈd¶¶µ:¬v ál<‚ÀˆäDH‘ÁB"ìV»‘’›yæéó¼É‹à¬P¨ÄŠ{“pž>‘
-PLÜ„h˜‘ôžÁVˆ½’{OòüÜÄÄùÃã#Ã?³Áü&xû»üŠÞNn€èx¦M0
-ãÊÒx°/ۏÛÑãçWy“á¨TReúpÌØ,ˆºøþ±Ï{ULkÖ¨tªM¦m5Â:˜PŽ_ÎM$‘Iy¹)IIÕËÃ7U! `6—y=¯ø™gÆ QÈV¦#S;©è$ ôßò”’Îiñ°PJ@ À™	p)°õ>4Pw‰“Aì Še†!*ã:ŽÍ/ÓkÖ¨@3 œ¸X’™—Ÿ’üÀ—££_
-ÝÍ
-‹xHåiáeX§äÎìðoé®ù&¯/Ì4#)Gã¸ß!á:Èß<ê4;ÍÏîØne7l\Ô\ÌaŠËû´õ7/öýøÅ»cÜ7´âå92r+ÇÃU^Ë+ LñhÉXh|kpŒ/ñÕ´à)4ƧÈã²»:·ÙM,ÖÀ3ˆ91§÷NØËù·½Òd³îÚñ'ÛípîvtØMì3]ÍÎz®Œ[¡›½@öä>âá{B×4žPß)™ásO¬=¼(‹32°Ko¤øüÙÃçzY¬”.]]ºT…o#J‘´"E}Üqϱ‡ºÝ‡9^F.Iî—2£S$f f/Ô+G‡”æÏÎ( P
-Ýø[602azÀ–Óp¬7žq	‹¥²æðú=+9£IY´®h£·þ ‘=h:h²Z÷[÷·îßâiàšdŒkMQå¼û—œ8£²IÍn‹s«Š)jµ¶›Øäl°Y:UÌón›ÝǺ¤=O¿e:GÈ–Œ^:ÒrT»—ÝØUåZn»Ïѱ³ÙMîÚäÞæñÜÙ3Ø=tñº§^T1woÞi³ìNpÛœ^–q}.eîöZm*ƵÕL*„Xû[õ4Äòð*Ùž¢øtdé(þ–ïÉвh„Û‘×ÆÀ®;r¹>>àäî8Éíµî3¼ºÉÝÀÕÉ0·^:µ2|Ž©”]èʲ÷2KÊ›JÊT!-þÂӐÙ#‚Ljb Jêë°oÙÒÑnRᨩ!t‰Â{Qþ‡ë~üÐë¯9-®öíÏíxÖªªh\bZÅÉ4åGúXðƒ.¼z“;}•(’v §|"žiŽ»ˆ<¡Ëj9é?ªt"æôòUËë–%”màßba ]F‚ü}àìÚ¯Ï}p°0Ð<×ÀÓ‡ˆÉ=
-9"¡8îA.ñ†§Åaãxið…,°KÊP6¶ÂbgÿèC#·ä’>t
-\×±KäHx>HP7açaßöGˆ¼åÃóÂéð'ò8']2M.¦¢–́˜ï‡’xæ\z%̇,âÜÌ%¯$YIt^„gâ8|'ÄIÎ ‰è´¼dØóT9"÷eáGð‰1צLî›õRs!2qª¤(ìk%MF˜}F·ø…l?(ü~?:ÉG’Ëyù4Šúªõ…˜
+xœì½|U÷>~§ÏÜéDêR	mw–š¤l HB•%Ù$I6$:‚)
+(*""¢"*6DTD¬ˆ¨ˆ
+±+"6bƒßÌì		ˆ~}Õ·ü?Ÿ?yÙ{çνç9çÜòœsÙø"!$£ÙˆBCró»ø‘û‡ä|/,W&ž3{;‡'Å}(Ú,Åiy×y>^\YR>Ñž4!ÒyFw–”M-Nô×Æ"$m.„‹ɏï@DÖ1§µ{©Ó mi| !j¡óܦ´<>ðæ9Ue±Âpâ¹™…P‡våá)•NŽ|ê.§ÕW.4?øFçù„úð•±êøœå3ê÷BÏ·ª¬ŠTöâ¾vÆc)%‚hÚåü<‰6 ÕÄzçÉÕo¢Ó²–܄棧e;±‹XDvrÚÖ£#hÓsÚEm 1œV„ÞbHôQ€6;2R‹HáXÑ9ôf:ÞBJïFÉt5½›KWêff8³Þù›Bí 
+ôj¶ûP5ÚJ¤Ô6:ƒVÐ>j7µ}ì ÐŽü]hZ‡¦;ºXDÍ"§“yNËNf7ZåüÄœ÷»‰5ÄG»­Ä\´­¤hr ZCìuìÚ…Ž¢¹T9ËñI€,vôßéÈÚíŒ_…ªiÄì%0:NvtÚí¬qÞg3ª³×û9‚f9Èh»…µ¸ÖŠë±õÄvâ{Z‹öPc¨‰Ô;Ä|º5};= -Kx€‹–9²W¹cØbbªc»û3Ý•NN¦ÇÐAz,7Α½ÃµÈÁÜLæ9£mÎßɬæØÔ‹˜O-r4uß6C»¹tg¼#›éXPŒ
+¢ñNm:ºmB¨h™#ɳ—MfŽ:#WÓû›—KÈ£h7•: bú°ãkä,Ÿ=ıM‘JòiɶYEû
+é{vTËNI§=ú4η
+Ù(Oõm9qbÈHº	3j#Ót#Õ–ßH·m½ÿ÷^îï”4hÈHßÆ_C 546ÃiËéTÝ'§Ùiexï\ЍL[çYc7ú
+K}‹µÅ­{.Ö"=;9kÖ±»üx3g3~øÃë?
+•«Ü–SþŒq[¬åTêˆJ‘„H¤¡~ˆGˆnÀ”:¥»–}OŽ[Iø¡N ‘8 uÑďP§H6„:íÔ{BA9ê,Âä\¨óHwöM¢.:«A]6nh?ê
+²{ƒº†Ä^÷B]Gt¯"Aΰ®º['PCbÔIÄ_ArڏCF
+ÉVPgP#2ê,²Èr¨ó¨¹ê"êI>
+u¹mOª9ÔTÚóÔ5Ô°×µP×ßë”J4U¡(*q<G>Ô:«Ê‡ü¨«ópjãœ>”æô‰;+-îôŽ 0*GINkªpúwvj©¨Ìùñ¡¼“²ª½§ˆSFœ1“œÏ"§'þ¨ÝO¢8H“,wWT8½]=ÂΘ
+1éwÆ
+wÎ?ŸƒTêÔ]ioDسÈ9ç6Ÿ£Yƒ]æ<:OEn¹ÓÃ}‡JUN­Š–”Æ}í;øü]»|ã¦úÒ¢ñêxU$\žä˪(ììK-+óå¹½ª}y‘êHÕ¤HQgü›¡ÝÝ¡áIåãc%¾´péï̈Œ¯q6O¸¢$RíWE|Ñ
+_e͸²h¡¯(VŽV8šjb¾g s,Ààüp…óæCœJ,6áÏ
+ù3}†{Þ®v|ó<èw|îwV©ªŽÆ*|þÎþÀ©¢Nt&¬bOZbNã°âjq‹cŽ‹âŽÇ‘7ïqgÖz¢.ÎOȘäÈè쌍9e•3“O^•7睹g*Ç+{véRäTÓ¹:VSU)ŽU•D:WDœ×™õ4¨]#µëô·»Á}ç®»ˆ·v#Î
+Š¡ÉN_w¥þ3ëÏ•Ôßy3ÕéSꍌ:ï*=»âÞZw½Våpw‡+uÒiž<ÝŽºýUsÊþú=k°ós&Ûk ìÔê{í·;£Nãÿ©ÓãŸ?³Î<ßu6G7ثŽw–{¾žà´Åœø¿tq-âÉ+÷¤Õí¦¨§S©÷.v•x(0ëI0ï‰ÙJ %ÖXb½'yzżٯðÆWÂŽM Ä©qXcQXaOFÂÓdÆ=-N_O…^?w&¤×Jp{'tO¬åˆ·ák¯U½UÒÊ›9wl‘WV{z:cÂ`övA¡³BË=)qïM­ŠZì¤ö'u¬CpO-Wÿ¸³~«ßE¬ó‰ÛRéíš"¡Ð]«M‘gAÜ[k㜷qïmÿBìæBG³OJÂ'“½5PêJqðL¹×VߢZªNY•	mk<&Õ›·^îÍgb®q½¤Úô;v$´³‹w‚ø<ɉý¯ž:ûlu­çÚVž\ÑqO¯ºUWgÑdÏå
+¡v7{§zX©‡Xä}ºI^ézb¼Ó£Ð“—èS;î:.ƒ“­v†
+=ì"Oã(hÚÓ۝ ]Ø‘óN†º9¨Õyà·'A…Ó?»¡ú”¾µ{¥ÎcõÏ€úã|žÍaOsìÍ§®µ„7\þƒùŒy,胹/÷ʺóãÏÌEÜc"—YÃ`QçS<õGc]ŸLnI »>/öt,‚•Tæ­Óª“-	M]ŸÕ›óú«®–AÃ#F½3£Ì{Â'-*ò4uç«¢ž7JNáÕRíöVObíÖbœîŸêÿÓ¦Z-1XP·ÂÂÞýy
+NÅ9ÝgÒ-	æ»ÌýÓŸœ*ïœ
+{çJÜÚ–ê“+²v¿œÎ8ç"žµH“=«Š¼ñ­ÎÀ‡­NÚ}ú켫eÛVõVYbÏdŸÆ/ã¼ý«§k
+ìƒÚu2Éy=ƒÇ"hŠçç
+ØÉ•ÎO‚½ÂÞ‰99¢þ¼'t®mÁgÜ)¥Þ	ïóÊjÐ1â­¤ß['µgÝ™Îî"	*¼y¯ï¯3y×ó\ý9ü«{µÚ;5k¹ºn·Õî$7r(;{TÁˆS%Vz+z‚óY3–àCwUᓧê¿ó¤ú}«ÆÁ‰ŸôÔ òprQŽóäâä:Oh„Gæyﲜ6ŸÇå9o†;ONk†7/©Þ÷}+o7Žpê®Ä\4Ì“•‘ç|º²G9-®lŸ÷ì>
+rúç8²Ü±!4ÒÃ9ÒòÍrº+{°Óší”!èçŽHwZ†9Ïn½?r£Ð^Ž3ªÀÛ;î8W—„¦N{ê©Zeyˆµš
+vžòùàmª#;Ë“çêŸäÅGn=ôLx.Ï“îúÈ•ìÊLw4ÊöžÜÖaN9Äé—ïù3Õ³9¡mŽgC¦ó>aKÈÓ 1	ÒrˆƒíöèïèUàyÁE*€žIÞ<ºödxã]ÔA^¯„f¹0Ën½NJgðeB×ÿÃO"ç{ög;?>Ïþ§¥À››TG~­ÜÚµÓß“àê=oóìKõüë!¤yý\/ºþÌ>¹âòêÍJºç/wÞ\Í3<¤TÏ#ùg´¤VZýÙ9ÓêÀ'ú{ö…<Oe{½ó?†œþY'[ë1˳5|™X÷‰5‘]ϻ鞍îÌuPC°¦R=ߝj…;O#<ýë¬HÌ@*|¦×óYÝìçÀìÖêSà!œÁ+#¼½òz¥zsrdzûw0h>ìä
+«;†ÁúÌ=©Ù©þ­ÝGµýþÌÙ‘U‹}êfxë)4Ì?éDürgWÈáµB/ωŸ<·OeîúQc]4Z?îLªwÖ֏§p¯oùiýêZÙR‚³êrú±Û™2ìÚì8Ë×F½uÑGâìNäDõ£Þ"/>OÄ€Õ'£’˜ÆNF&“½·uœ^	w'±Sò<9ìqÒI¬Z.ª“•ˆ+Ã^´à¢UŸÁ›¿ÏPø7™a¥Ç÷	”É^=‘‰k_
+ôuÛ§–
+×Þÿüv|gœƒZ[Î9Ô÷•7ß•KE=»ñdg[…jó²:Ÿ¸HÜ»•Ÿ6ëu«Ï•Ö~«àú ¤žæEž¯1JÜṘØ;¯jï¸þû·NÿôõÿÒ}>å>èôÈëßw„Ïxäûßá?utj$_XO§º»ŽÚžîõL7,ø¿v¯äûͽþÿï•êÝ+ÕÝ0üó^	ŸÂ°ÿ½{%|†líá^	Ÿñ^©Î¢ÿ̽þƒû‚ÿ̽Fÿê½RÝ¿:ý“÷JuûíÔ{¥ßcßß¿]Jäç‰Hâív	£So—Î|»ñŸ¹]Âà]_=þoß2aoý6šùÏß2áÿá[&|Ú-S]®ûŸ¼eÂÿç-“ï?vË„ÿ…[&ß¿í–	{>îHèi›ðvªóþ?ww„Ï8çÿ­»#ü›»#ßíîÿîÝQÝпÿîÿwG$÷ß{wT{²þ>£üöÆÿ…Ÿú·4ÿäþ[7>¿ÍÙþڍ®wãóG÷ÿÄ
+Mü7òû¡º›ìá¸OÊô¾ å~UÍý²ÛÉïÇùÚWG"¾q‘²Øä}â‹m}ý˦V–Vû¢å•±ªx¤ÈW\+÷¥VE&Á—Àj1¼/ÒÕ$¾HWã:ôᑪ°/¡ÚÉoãáNøÿö{{ú+¾Ó£Õ8ì‹W…‹"åáª	¾XñéR0©*V{_š‹VûJ#U«¤*\ᘞäØî˜ås<VUIòÅc¾pÅT_e¤ªÚw<u\ö:Jc§g¼4Rë§ÂÂXy¥ÓÝí/u¤;^ŽTT;Þk幤UGX‘/\]+Œ†<\+¬)TÄÃqWŸâh™3Ií]‰Þ _~¬8>Ùq«ž&U‘ʪXQMaÄSu‹Ž«‰G\ð)’œi.,«)r5™—ÆjâŽ2åQ rª®tÄÖT;ý]s’|å×jì-êÒ¤zI.f—X•¯:ẫÓ;ê¨
+æŸí*爭tÇ	×y@“K…õ›î4×TU8€o`QÌWKòU׌)Œ»-®}ű2g±¹Æ*Š¢®Õ=1.pÄ…ÇÅ&E<«ÈSàä"¨ˆÅi¨N´º³RY·ï|Õ¥á²2<.^sÔpvIø;cκ¨ò•Çª"g4ÛŸZ);@Jú¶<<ÕÙ-Îð¢hqÔ]hᲸ³ôœŠ#4\TäYžp»AÃUŽ^5eá*ìEª£%ž%‰½êrWh¸ÐR펨էút$W$v <‡…ËÎ, ÆÔêQ'ÍQ¯¢lª/Zo™cלªˆûk^_·Rí:ҝ—ÚíqÖ\¤Ê49VUTíkur¶r±k_àVî¶må¹Ì™™lØ/ã"ÎNr¥Ö8sàúdR,zR±È”¸³c|áÊJg{…Ç•EÜ	ÛÉn×MJi8î+
+W;#§øÄ]uu«»ÈWSQ
+שŠ=åþѬVÇÊÜ]íM›;Ia_™{z8{¥¶ce¸pB¸Ä1ÌÙ‡1ì.ÕmQåXŽŠ‘²bW©!_fnN/?7³`Dj^È—•ï’—;<+#”ák•šï<·JòÈ*;¬ÀçôÈKÍ)åËÍô¥æŒò
+ÊÊÉHò…FÉåçãÜ<_Öà!ÙY!§-+'={XFVN_š3.'·À—58«ÀZë
+QY¡|WØàP^ú ç15-+;«`TÎÌ*Èqd:ÊåùR}CRó
+²Ò‡e§æù†Ë’›rdd8bs²r2ó”Ðàc„#(=wȨ¼¬þ
+’œANc.ÈKÍ
+NÍ”äs„å:&çù¼.-¾Ðpwpþ€Ôìl_ZVA~A^(u°Û×õNÿœÜÁ!œ™;,'#µ +7Ç—rLIMË%tsLIÏNÍœäËHœÚß5§Äí–0§ÎØÐ?”ÊKÍNòå	¥g¹ǏYy¡ô¯§ã{ÇÙžºé¹9ù¡¡Ãœ§_-D1 äA8¤:ÿK÷4óÌÏqÌuåäæœTeDV~(É—š—•ïÎHf^®£®;Ÿ¹™Þ
+æøӝ¼Ðם#·í·«ÃéåŽ3B©ÙŽÀ|W
+§ŸÒ×Y]¡)…‘ʸ»¶as'ŽFïMœIÞªMÎî_álÜD›WuhÉÙYë$N·:Âvé8)qôzLJ³º&J½E“"Î	Xí%±*s“ÉÑjo§;XKpž¯:\æ€9£Ü]äõrÎÊp™3¬ú¤š§l(\K†•UQgÈäªhÜ9L|᧵*:
+h¸
+hʳÀWg‹Rw8$ô¯ŠTW:,)›ÚÙé[år™§I´¢8VU¦{î+Œ÷¬
+â¾OxQ,ŽcU%}{×ߝþì¯<ü3qNÄA¾¿áº8È÷ã üÛ8ùBORu-gœ!@­Xð߉•|µ±þ߈•pbþm±NlØ¿+á0VÂu±’ï/ÆJø”¸à/ÄJø÷b%ߟ•p½X©þö=%\røÜ9$þ©p	C¸äû[á>E]/oü§C&\óýí	ÿ£!†É÷×C&|zÈäû+!>cÈäûWB&\:|ðÀ\WíÔ):Âu–ÿè×FG¾¿áúÑ‘ï/EGøŒÑ‘ïïDGîb=e£œ|ðï>¾!ðÁøøþDàƒ½ÀçÔØáÿhâµýûyAîìÿÎïvñîí&8»xwgEÞ¿êuöþ}µÒi;õ_ÿø7»LŽNˆv‰:‡Õ”Ε¥•]àÄüK¿ËI&~úÄÅh4:Ãk¹÷;Ñ$¢Ä"ñH@‰HB2RŠ4¤#™ÈB
+PCtj„ÎFQÔ5CÍQG‘–¨jÚ ¶¨:µGй¨#JBû» ®¨›÷[Ÿ6
+¢î(õ@)Ž{¡Þ¨ê‹ÎCý¼{îtï>:Óû7,4
+r<6Øû!h(Êó¾=;Ì1|‰F9¶œÆ Ð…è"4ÖqÃ]è4ÍG¢è3t)ZŠ.C7 ;Ð:‚D‹ÑÛh.º
+}ƒ¾EKеh!ÚŽÞG_£5hú}‡Ž¢›ÑÝè9´݃Æ9st…3w»G?‹žG/¡Ðnô":ˆÜÿžÀËèt¯3ëGЕèuôÚëÌíèK´È™wîËQ™3!k÷Oônm«½ÛÙIÎÊøÜYÓÐT4ÍD3Ðtš….F³Ñ%è:Œ¶AÁÁ£_ÑqB 0!:A B&B%B#t LÂ"
+‰³ˆFÄÙDc¢	:†~$š͈æDÂG´$Z­‰6D[¢qÑžè@œKtD?¡7ˆ$¢Ñ™èBt%º~"@ØDèN$=ˆ¢'ú z½‰>D_â<¢‘J¤éD"2‰þÄ "mD÷‰AD61˜È!r‰!ÄP"ÈG?£_ÐGèc¢€F'F#‰QÄhâ|bqq!q1–ãˆB¢ˆˆÅD	QJDÑ#ÄxbQF”£OЧD#*‰‰DQMĉb1™˜BL%¦Ó‰ÄLâbb1­'.!æs‰yÄ|âRb±XD,&.#.'–K‰eÄÄ•Ärâ*âjâbq-±’¸ŽXE\O¬&n Ö7k‰›ˆ›‰[ˆuÄ­Äzâ6âvâbq'qq7qq/±‘¸ØDÜOl& $"¶[‰GˆmÄ£ÄcÄãÄÄ“ÄSÄvâibñ±“x–xŽxžØE¼@ì&^$^"^&^!^%ö¯{‰×‰7ˆ7‰·ˆ·‰wˆw‰÷ˆ÷‰}ÄÄ~âCâ ññ1ñ	ñ)ñqøœø‚8D|I&¾"Ž_ßßßßG‰ˆcďÄOÄÏÄ/įÄqâ‰H‚$IŠ¤I†dIŽäIÄ¤HJ¤L*¤Jj¤N¤IZd²!yÙˆ<›lL6!›’ÍÈædÒG¶$[‘­É6d[²yÙžì@žKv$“ÈNdg²Ù•ìFúÉ i“A²;™Lö SÈžd/²7Ù‡ìKžGö#SÉ42Ì Cd&ÙŸ@f‘ÉAd69˜Ì!sÉ!äP2Ì'Èaäpr9’EŽ&Ï'ǐ’‘cÉ09Ž,$‹ÈYL–¥d”ON ËÈr²‚Œ‘•äD²Š¬&ãd
+9‰œLN!§’ÓÈéär&y19‹œM^BÎ!ç’óÈùä¥är!¹ˆ\L^F^N.!—’ËÈ+È+ÉåäUäÕä5ä
+òZr%y¹Š¼ž\MÞ@®!o$×’7‘7“·ëÈ[ÉõämäíääòNò.ònòò^r#y¹‰¼½‰ö“›ÉÈɇÈ-äÃäVòrù(ùù8ùù$ù¹½ƒÞEï¡Ð[hù4¹ƒ|†ÜI>K>G>Oî"_ w“/’/‘/“¯¯’{È×Ƚäëää›ä[äÛä;ä»ä{äûä>òr?ù!y€üˆü˜ü„ü”üŒ<H~N~A"¿$“_‘GȯÉoÈoÉïÈïÉ£ää1òGò'ògòòWò8y‚BA‘EÑC±Gñ”@aJ¤$J¦J¥4J§ʤ,ªՐ:‹jDM5¦šPM©fTsªå£ZR­¨ÖTª-ÕŽ:‡jOu Î¥:RIT'ª3Õ…êJu£üT€²© ՝J¦zP)TOªÕ›êCõ¥Î£úQ©T•NeP!*“êO
+ ²¨Ô *›LåP¹Ôj(•GåSÔ0j85‚IB7R£©ó©1ÔÔ…ÔEÔX*L£
+©"*BS%T)¥ÆS¨2ªœª bèzª’šHUQÕTœª¡&Q“©)ÔTj5šAͤ.¦fQ³©K¨9Ô\j5Ÿº”Z at -¤Q‹©Ë¨Ë©%ÔRjuu%µœºŠºšº†ZA]K­¤®£VQ×S«©¨5ԍÔZê&êfêju+µžºººƒÚ@ÝIÝEÝMÝCÝKm¤î£6Q÷S›©¨©‡¨-ÔÃÔVêjõ(õõ8õõ$õµzšÚA=Cí¤ž¥ž£ž§vQ/P»©©—¨—©W¨W©=ÔkÔ^êuê
+êMê-êmêê]ê=ê}jõµŸú:@}D}L}B}J}F¤>§¾ Q_R‡©¯¨#Ô×Ô7Ô·ÔwÔ÷ÔQêêõ#õõ3õõ+uœ:A#š Iš¢iš¡Yš£yZ 1-Ò-Ó
+­Ò­ÓmÒÝ€nHŸE7¢Ï¦ÓMè¦t3º9Ý‚öÑ-éVtkº
+Ý–nGŸC·§;ÐçÒé$ºÝ™îBw¥»Ñ~:@ÛtîN'Ó=èº'Ý‹îM÷¡ûÒçÑýèT:N§3èI÷§ÐYô@zM¦sè\z=”Σóéz=œA¤GÑ£éóé1ôô…ôEôX:L£é":BÓ%t)¥ÇÓè2ºœ® ct%=‘®¢«é8]CO¢'ÓSè©ô4z:=ƒžI_LÏ¢gÓ—Ðsè¹ô<z>})½€^H/¢Ó—Ñ—ÓKè¥ô2ú
+úJz9}}5}
+½‚¾–^I_G¯¢¯§WÓ7ÐkèéµôMôÍô-ô:úVz=}};}½¾“¾‹¾›¾‡¾—ÞHßGo¢ï§7ÓÐÒÑ[è‡é­ô#ô6úQú1úqú	úIú)z;ý4½ƒ~†ÞI?K?G?Oï¢_ wÓ/Ò/Ñ/ӯЯÒ{è×è½ôëôô›ô[ôÛô;ô»ô{ôûô>úz?ý!}€þˆþ˜þ„þ”þŒ>HNA¢¿¤Ó_ÑGè¯éoèoéïèïé£ôô1úGú'úgúúWú8}‚AÁÅÐðÇðŒÀ`Fd$FfFe4FgÆd,¦Ӑ9‹iÄœÍ4fš0M™fLs¦ãcZ2­˜ÖL¦-ÓŽ9‡iÏt`Îe:2IL'¦3Ó…éÊtcüL€±™ ӝIfz0)LO¦Ó›éÃôeÎcú1©L“Îd0!&“éÏ`²˜Ì &›Ìä0¹Ìf(“Çä3Ì0f83‚ÉŒbF3ç3c˜˜™‹˜±L˜Ç2EL„)fJ˜R&ÊŒg&0eL9SÁĘJf"SÅT3q¦†™ÄLf¦0S™iÌtf3“¹˜™ÅÌf.aæ0s™yÌ|æRf³YÄ,f.c.g–0K™eÌÌ•Ìræ*æjæfs-³’¹ŽYÅ\Ϭfn`Ö072k™›˜›™[˜uÌ­Ìzæ6ævæfs'ss7ss/³‘¹ÙÄÜÏlf`db¶03[™G˜mÌ£ÌcÌãÌÌ“ÌSÌvæifó³“y–yŽyžÙżÀìf^d^b^f^a^eö0¯1{™×™7˜7™·˜·™w˜w™÷˜÷™}ÌÌ~æCæ óó1ó	ó)ósùœù‚9Ä|Éf¾bŽ0_3ß0ß2ß1ß3G™˜c̏ÌOÌÏÌ/̯Ìqæ‹X‚%YŠ¥Y†eYŽåYÅ¬ÈJ¬Ì*¬Êj¬Î¬ÉZl¶!{Ûˆ=›mÌ6a›²ÍØælÖǶd[±­Ù6l[¶{ÛžíÀžËvd“ØNlg¶Û•íÆúÙ k³A¶;›Ìö`SØžl/¶7Û‡íËžÇöcSÙ46Í`Cl&ÛŸÀf±ÙAl6;˜ÍasÙ!ìP6ÍgØaìpv;’ÅŽfÏgÇ°°²±cÙ0;Ž-d‹Ø[Ì–°¥l”ÏN`ËØr¶‚±•ìD¶Š­fãl
+;‰ÌNa§²ÓØéìv&{1;‹Í^ÂÎaç²óØùì¥ìv!»ˆ]Ì^Æ^Î.a—²ËØ+Ø+ÙåìUìÕì5ì
+öZv%{»Š½ž]ÍÞÀ®aodײ7±7³·°ëØ[ÙõìmìíììöNö.önöö^v#{»‰½ŸÝÌ>À>È>Änaf·²°ÛØGÙÇØÇÙ'Ø'Ù§ØíìÓìöv'û,ûû<»‹}Ý;Ⱦľ̾¾Êîa_c÷²¯³o°o²o±o³ï°ï²ï±ï³ûØØýì‡ìö#öcööSö3ö û9û{ˆý’=Ì~Åa¿f¿a¿e¿c¿g²?°ÇØٟ؟Ù_Ø_Ùãì	qGrGsÇrÇs‡9‘“8™S8•Ó838“³¸\Cî,®w6טkÂ5åšq͹œkɵâZsm¸¶\;î®=ׁ;—ëÈ%q¸Î\®+׍ósÎæ‚\w.™ëÁ¥p=¹^\o®×—;ëÇ¥ri\:—Á…¸L®?7€Ëârƒ¸ln0—ÃårC¸¡\—ÏpøáÜn$7Š͝ύá.à.ä.âÆranWÈq®˜+áJ¹(7ž›À•qå\ã*¹‰\WÍŹn7™›ÂMå¦qÓ¹ÜLîbn7›»„›ÃÍåæqó¹K¹ÜBn·˜»Œ»œ[Â-å–qWpWr˹«¸«¹k¸ܵÜJî:nw=·š»[ÃÝÈ­ånânænáÖq·rë¹Û¸Û¹;¸
+ܝÜ]ÜÝÜ=ܽÜFî>nw?·™{€{{ˆÛÂ=Ìmåá¶qrqsOpOrOqÛ¹§¹Ü3ÜNîYî9îyn÷·›{‘{‰{™{…{•ÛýÆíå^çÞàÞäÞâÞæÞáÞåÞãÞçöqpû¹¹ÜGÜÇÜ'ܧÜgÜAîsîî÷%w˜ûŠ;Â}Í}Ã}Ë}Ç}Ïå~àŽq?r?q?s¿p¿rǹ<â	žä)žæžå9žçó"/ñ2¯ð*¯ñ:oð&oñ
+ø†üY|#þl¾1ß„oÊ7ã›ó-xß’oÅ·æÛðmùvü9|{¾.ß‘Oâ;ñù.|W¾ïç¼Íùî|2߃Oá{ò½øÞ|¾/ߏOåÓøt>ƒñ™|~ ŸÅäñÙü`>‡Ïå‡ðCù<>Ÿ/à‡ñÃùüH~?š?ŸÃ_À_È_ďåÃü8¾/â#|1_—òQ~<?/ãËù
+>ÆWòù*¾šó5ü$~2?…ŸÊOã§ó3ø™üÅü,~6	?‡ŸËÏãçó—òø…ü"~19¿„_Ê/ã¯à¯ä—óWñWó×ð+økù•üuü*þz~5¿†¿‘_ËßÄßÌ߯ãoå×ó·ñ·ówðø;ù»ø»ù{ø{ùü}ü&þ~~3ÿ ÿ ÿ¿…˜ßÊ?ÂoãåãçŸàŸäŸâ·óOó;øgøü³üsüóü.þ~7ÿ"ÿÿ2ÿ
+ÿ*¿‡ß˿οÁ¿É¿Å¿Í¿Ã¿Ë¿Ç¿Ïïã?à÷óòøøùOøOùÏøƒüçüü!þKþ0ÿ„ÿšÿ†ÿ–ÿŽÿž?ÊÿÀãäâæáåó'$)P-0+p/DAdATAtÁLÁ
+…³„FÂÙBc¡‰ÐTh&4Z>¡¥ÐJh-´Ú
+í„s„öBá\¡£$t:]„®B7Á/[
+Ý…d¡‡"ôz	½…>B_á<¡Ÿ*¤	éB†2…þ !K(²…ÁBŽ+†
+yB¾P †#„‘Â(a´p¾0F¸@¸P¸H+„…qB¡P$D„b¡D(¢Âxa‚P&”BL¨&
+UBµj„IÂdaŠ0U˜&Lf3…‹…YÂláaŽ0W˜'Ì.…EÂbá2ára‰°TX&\!\),®®®V×
++…ë„UÂõÂjáap£°V¸I¸Y¸EX'Ü*¬nnî6w
+w	w÷÷
+…û„MÂýÂfááAá!a‹ð°°UxDØ&<*<&<.<!<)<%lžvÏ;…g…ç„ç…]ÂÂnáEá%áeááUaðš°Wx]xCxSxKx[xGxWxOx_Ø'| ì>	ŸŸ
+Ÿ	…Ï…/„C—Âaá+áˆðµðð­ðð½pTøA8&ü(ü$ü,ü"ü*N`„	Lb
+Ó˜Á,æ0Œ±ˆ%,c«XÃ:6°‰-Ü 7ÄgáFølÜ7ÁMq3Ü·À>ܷ­qÜ·Ãçàö¸>wÄI¸ஸöã ¶qwÇɸNÁ=q/Ü÷Á}ñy¸NÅi8gàÎÄýñ œ…âA8Æ98ÁCqÎÇxŽGà‘xÏÇcðøB|‹Ãx.ÄE8‚‹q	.ÅQ<OÀe¸Wà®Äq®Æq\ƒ'áÉx
+žŠ§áéxž‰/Ƴðl|	žƒçâyx>¾/Àñ"¼_†/ÇKðR¼_¯ÄËñUøj|
+^¯Å+ñux¾¯Æ7à5øF¼ß„oÆ·àuøV¼߆oÇwà
+øN|¾߃ïÅñ}x¾oÆàñCx~oŏàmøQüÚ„îǏã'ð“èAôz?…6£Ð¼ÍAO¡øi¼?ƒîÄ;ñ³ø9ü<Þ…_À»Ñ3øEü~¿‚_Å{ðkx/z=Ž_Çoà7ñ[ømü~¿‡ßGÛð>üޏ?ÄðGøcü	þ†âÏñøþÆ_á#økü
+þ‡¿ÇGñøþÿ„Æ¿à_ñq|BD"!’"%Ò"#²"'ò¢ bQ%QQ5Q
+Ñ-±ØP<Kl$ž-6›ˆMÅfbs±…è[Š­ÄÖb±­ØN<Gl~;ˆçŠÅ$±“ØYì"v»‰~1 ÚbPì.&‹=ı§ØKì-öûŠç‰ýÄT1ML3Đ˜)öˆYâ@q˜-sÄ\qˆ8TÌóÅq˜8\!ŽG‰£ÅóÅ1ââ…âEâX1,ŽC—‹…b‘‹Å±TŒŠãÅ	b™X.Vˆ1±Rœ(V‰Õb\¬'‰“Å)âTqš8]œ!Î/g‰³ÅKÄ9â\qž8_¼T\ .‰‹ÅËÄËÅ%âRq™x…x¥¸\¼J¼Z¼F\!^+®¯W‰×‹«ÅÄ5ââZñ&ñfñqx«¸^¼M¼]¼CÜ Þ)Þ%Þ-Þ#Þ+nï7‰÷‹›ÅÄŇÄ-âÃâVñq›ø¨ø˜ø¸ø„ø¤ø”¸]|ZÜ!>#Ÿw‰/ˆ»ÅÅ—Ä—ÅWÄWÅ=âkâ^ñuñ
+ñMñ-ñmññ]ñ=ñ}qŸø¸_üP< ~$~,~"~*~&?¿‰_Š‡Å¯Ä#â×â7â·âwâ÷âQññ˜ø£ø“ø³ø‹ø«x\<!!‰H‰’h‰‘X‰“xI°$J’$KŠ¤Jš¤K†dJ–Ô@j(%5’ΖKM¤¦R3©¹ÔBòI-¥VRk©ÔVj'#µ—:HçJ¥$©“ÔYê‚VJ]¥n’Ý.$[
+JÝ¥d©‡”"õD«¤^è:ô•Ô[ê#õ•Î“úI©RºUJ—2¤Z.eJý¥R–4P$eKƒ¥)W"
+E«¥<)_*†IÃ¥ÒHi”4Z:_#] ](]$•ÂÒ8©P*’"R±T"•JQi¼4A*“ÊÑmR…“*¥‰R•T-Å¥i’4Yš"M•¦IÓ¥ÒLébi–4[ºDš#Í•æ¡eÒ|éRiº]#-”I‹¥Ë¤Ë¥%ÒRi™t…t¥´\ºJºZºFZ!]+­”®“VI×K«¥¤5ҍÒZé&éféit«´^ºMº]ºCÚ Ý)Ý%Ý-Ý#Ý+m”î“6I÷K›¥¤¥‡¤-ÒÃÒVéi›ô¨ô˜ô¸ô„ô¤ô”´]zZÚ!=#픞•ž“ž—vI/H»¥¥—¤—¥W¤W¥=ÒkÒ^éué
+éMé-éméé]é=é}iŸô´_úP: }$},}"}*}&”>—¾I_J‡¥¯¤#Ò×Ò7Ò·ÒwÒ÷ÒQéé˜ô£ô“ô³ô‹ô«t\:!#™I™’i™‘Y™“yY±,Ê’,ËŠ¬Êš¬Ë†lÊ–Ü@n(Ÿ%7’Ï–ËMä¦r3¹¹ÜBöÉ-åVrk¹ÜVn'Ÿ#·—;ÈçÊå$¹“ÜYî"w•»É~9 ÛrPî.'Ë=乧ÜKî-÷‘ûÊçÉýäT9MN—3䐜)÷—ÈYò@yœ-–sä\yˆ<TΓóåy˜<\!”GÉ£åóå1òò…òEòX9,“å"9"Ë%r©•ÇËä2¹\®cr¥<Q®’«å¸\#O’'ËSä©ò4yº<Cž)_,Ï’gË—Èsä¹ò<y¾|©¼@^(/’Ë—É—ËKä¥ò2ù
+ùJy¹|•|µ|¼B¾V^)_'¯’¯—WË7ÈkäåµòMòÍò-ò:ùVy½|›|»|‡¼A¾S¾K¾[¾G¾WÞ(ß'o’ï—7ËÈÊÉ[ä‡å­ò#ò6ùQù1ùqù	ùIù)y»ü´¼C~FÞ)?+?'?/ï’_wË/Ê/É/˯ȯÊ{ä×ä½òëòò›ò[òÛò;ò»ò{òûò>ùy¿ü¡|@þHþXþDþTþL>(.!’¿”Ë_ÉGä¯åoäoåïäïå£òò1ùGù'ùgùùWù¸|BA
+¡
+¥Ð
+£°
+§ðŠ `ET$EVEU4EWÅT,¥ÒP9Ki¤œ­4Vš(M•fJs¥…âSZ*­”ÖJ¥­ÒN9Gi¯tPÎU:*Ièa¥“ÒYé¢tUº)~% ØJPé®$+=”¥§ÒKé­ôQú*ç)ý”T%MIW2”’©ôW(YÊ@e’­Vr”\eˆ2TÉSò•e˜2\¡ŒTF)£•ó•1ÊÊ…ÊEÊX%¬ŒS
+•"%¢+%J©UÆ+”2¥\©PbJ¥2Q©Rª•¸R£LR&+S”©Ê4eº2C™©\¬ÌRf+—(s”¹Ê<e¾r©²@Y¨,R+—)—+K”¥Ê2å
+åJe¹r•rµr²B¹VY©\§¬R®WV+7(k”•µÊMÊÍÊ-Ê:åVe½r›r»r‡²A¹S¹K¹[¹G¹W٨ܧlRîW6+(*)[”‡•­Ê#Ê6åQå1åqå	åIå)e»ò´²CyFÙ©<«<§<¯ìR^Pv+/*/)/+¯(¯*{”×”½ÊëÊÊ›Ê[ÊÛÊ;Ê»Ê{ÊûÊ>åe¿ò¡r@ùHùXùDùTùL9¨|®|¡R¾T+_)G”¯•o”o•ï”ï•£ÊÊ1åGå'ågååWå¸rBE*¡’*¥Ò*£²*§òª bUT%UVUU5UW
+ÕT-µÚP=Km¤ž­6V›¨MÕfjsµ…êS[ª­ÔÖjµ­ÚN=Gm¯vPÏU;ªIj'µ³ÚEíªvSýj@µÕ Ú]MV{¨)jOµ—Ú[í£öUÏSû©©jšš®f¨!5Sí¯P³Ôê 5[¬æ¨¹êu¨š§æ«ê0u¸:B©ŽRG«ç«cÔÔÕ‹Ô±jX§ªEjD-VKÔR5ªŽW'¨ej¹Z¡ÆÔJu¢Z¥V«qµF¤NV§¨SÕiêtu†:S½X¥ÎV/Qç¨sÕyê|õRuºP]¤.V/S/W—¨KÕeêê•êrõ*õjõu…z­ºR½N]¥^¯®VoPר7ªkÕ›Ô›Õ[Ôuê­êzõ6õvõuƒz§z—z·zz¯ºQ½OݤޯnVPTR·¨«[ÕGÔmê£êcêãêê“êSêvõiu‡úŒºS}V}N}^Ý¥¾ îV_T_R_V_Q_U÷¨¯©{Õ×Õ7Ô7Õ·Ô·ÕwÔwÕ÷Ô÷Õ}êê~õCõ€ú‘ú±ú‰ú©ú™zPý\ýB=¤~©V¿R¨_«ß¨ßªß©ß«GÕÔcêêOêÏê/ê¯êqõ„†4B#5J£5Fc5Nã5AÚ¨Iš¬)šªiš®š©YZ­¡v–ÖH;[k¬5ÑšjÍ´æZͧµÔZi­µ6Z[­vŽÖ^렝«uÔ’´NZg­‹ÖUë¦ùµ€fkA­»–¬õÐR´žZ/­·ÖG뫝§õÓRµ4-]ËÐBZ¦Ö_ eiµAZ¶6XËÑrµ!ÚP-OË×
+´aÚpm„6R¥ÖÎ×Æhhjicµ°6N+ÔŠ´ˆV¬•h¥ZT¯MÐÊ´r­B‹i•ÚD­J«ÖâZ6I›¬MѦjÓ´éÚm¦v±6K›­]¢ÍÑæjó´ùÚ¥Úm¡¶H[¬]¦]®-Ñ–jË´+´+µåÚUÚÕÚ5Ú
+íZm¥v¶J»^[­Ý ­ÑnÔÖj7i7k·hë´[µõÚmÚíÚÚíNí.íníí^m£vŸ¶I»_Û¬= =¨=¤mÑÖ¶jhÛ´GµÇ´Çµ'´'µ§´íÚÓÚím§ö¬öœö¼¶K{AÛ­½¨½¤½¬½¢½ªíÑ^Óöj¯kohojoiokïhïjïiïkû´´ýÚ‡Úí#ícííSí3í ö¹ö…vHûR;¬}¥Ѿ־ѾվӾ׎j?hÇ´µŸ´Ÿµ_´_µãÚ	é„Nê”NëŒÎêœÎë‚ŽuQ—tYWtU×t]7tS·ôzCý,½‘~¶ÞXo¢7Õ›éÍõºOo©·Ò[ëmô¶z;ý½½ÞA?Wï¨'éôÎz½«ÞM÷ëÝÖƒzw=Yè=õ^zo½ÞW?O裏êizºž¡‡ôL½¿>@ÏÒêƒôl}°ž£çêCô¡zžž¯èÃôáú}¤>J­Ÿ¯Ñ/Ð/Ô/ÒÇêa}œ^¨é½X/ÑKõ¨>^Ÿ —éåz…Ó+õ‰z•^­Çõ}’>YŸ¢OÕ§éÓõúLýb}–>[¿DŸ£ÏÕçéóõKõúB}‘¾X¿L¿\_¢/Õ—éWèWêËõ«ô«õkôúµúJý:}•~½¾Z¿A_£ß¨¯ÕoÒoÖoÑ×é·êëõÛôÛõ;ô
+úú]úÝú=ú½úFý>}“~¿¾Y@PHߢ?¬oÕÑ·éêéëOèOêOéÛõ§õú3úNýYý9ýy}—þ‚¾[QIYEUߣ¿¦ïÕ_×ßÐßÔßÒßÖßÑßÕßÓßGO 'õ}úú~ýCý€þ‘þ±þ‰þ©þ™~Pÿ\ÿB?¤©ֿҏè_ëßèßêßéßëGõôcúúOúÏú/ú¯úqý„ 
+Ê 
+Æ`
+Îà
+ÁÀ†hH†l(†jh†n†iXF£¡q–ÑÈ8Ûhl41šÍŒæFÃg´4Z­6F[£qŽÑÞè`œkt4’ŒNFg£‹ÑÕèfø€aA£»‘lô0RŒžF/£·ÑÇèkœgô3R4#ÝÈ0BF¦Ñß`dAF¶1ØÈ1r!ÆP#ÏÈ7
+ŒaÆpc„1ÒeŒ6Î7Æc°1Î(4ŠŒˆQl”¥FÔoL0ÊŒr£Âˆ•ÆD£Ê¨6âF1ɘlL1¦ÓŒéÆc¦q±1˘m\bÌ1æóŒùÆ¥Æc¡±ÈXl\f\n,1–ËŒ+Œ+åÆUÆÕÆ5Æ
+ãZc¥q±Ê¸ÞXmÜ`¬1n4Ö77·ëŒ[õÆmÆíÆÆãNã.ãnãã^c£qŸ±É¸ßØl<`<h<dl16¶ÛŒGÇŒÇ'Œ'§ŒíÆÓÆãc§ñ¬ñœñ¼±ËxÁØm¼h¼d¼l¼b¼jì1^3ö¯ooooïïïïûŒŒýƇÆã#ãcããSã3ã ñ¹ñ…qÈøÒ8l|e1¾6¾1¾5¾3¾7Ž?ÇŒŸŒŸ_Œ_ãÆ	™„Iš”I›ŒÉšœÉ›‚‰MÑ”LÙTLÕÔLÝ4LÓ´ÌfCó,³‘y¶ÙØlb65›™ÍͦÏli¶2[›m̶f;ó³½ÙÁ<×ìh&™ÌÎf³«ÙÍô›Ó6ƒfw3Ùìa¦˜=Í^fo³Ù×<Ïìg¦šifº™a†ÌL³¿9ÀÌ2šƒÌls°™cæšCÌ¡fž™o˜ÃÌáæs¤9ÊmžoŽ1/0/4/2ÇšasœYh™³Ø,1Kͨ9Þœ`–™åf…3+͉f•YmÆÍs’9ÙœbN5§™ÓÍæLóbs–9ۼĜcÎ5ç™óÍKÍæBs‘¹Ø¼Ì¼Ü\b.5—™W˜WšËÍ«Ì«ÍkÌæµæJó:s•y½¹Ú¼Á\cÞh®5o2o6o1×™·šëÍÛÌÛÍ;Ì
+ææ]æÝæ=æ½æFó>s“y¿¹Ù|À|Ð|ÈÜb>ln51·™š™›O˜OšO™ÛͧÍæ3æNóYó9óys—ù‚¹Û|Ñ|É|Ù|Å|ÕÜc¾fî5_7ß0ß4ß2ß6ß1ß5ß3ß7÷™˜ûÍÍæGæÇæ'æ§ægæAósóóù¥yØüÊ<b~m~c~k~g~o50™?š?™?›¿˜¿šÇͲ‹´(‹¶‹µ8‹·[¢%Y²¥Xª¥YºeX¦eY
+¬†ÖYV#ël«±ÕÄjj5³š[-,ŸÕÒjeµ¶ÚXm­vÖ9V{«ƒu®ÕÑJ²:Y­.VW«›å·–m­îV²ÕÃJ±zZ½¬ÞV«¯užÕÏJµÒ¬t+Ã
+Y™Vk€•e
+´YÙÖ`+Çʵ†XC­<+ß*°†YíÖHk”5Ú:ßc]`]h]dµÂÖ8«Ð*²"V±Ub•ZQk¼5Á*³Ê­
++fUZ­*«ÚŠ[5Ö$k²5ÅšjM³¦[3¬™ÖÅÖ,k¶u‰5Çškͳæ[—Z¬…Ö"k±u™u¹µÄZj-³®°®´–ÕÅñÒ©•¥‘
+.µ<\X«à‰’MW™aÃ^Á¥ÆJb‘	\8QŠé…Ѫšòâ²È±°®ŽÓ‹bñpaa¤"ŽOVٌ°+²(Qd8òÃq.€ % #^Cu‚"'«\Ôˆ$J6”ñ
+±=¥Jê)Õ¿NVÉɪԿ0V^†‡’zâ€zrJëêô€qá*ºÔù`³âѲ¢õ
+.,‰‚%Y	K¢	×eÎÑDIf
+$£ãŁõ0Æ×Õ¥AõµšpÊCIU$RQ®(Š²Ùášx„-ó
+)»~¿²zlvÂAe^Ag;ÖÓeΛ“_‘ŸS|Eýñ9‰ñ	W„Ýÿ;®ª˜³`¨PE	©(árÁøŸ›0>ærniMEI¸ª¦¼,\—cõŸØ¼„U	òêëPU_‡¼„U‰"?1ªÚ+Äüzn¬®çÆ‚úÒâõ¥$ÄÄ)p§4îNé°Ä”Ö$¦tXUV
+KXUãÌ°ªhE	Sã~ÊÃN±°¦þ7¦¾v͈zÚN®WU¯>µ®ÎŽNØ:Í+ðèºe<íd•)‹U”Ts5Ñ®Ýzt…²”~(PÚP¡ìe2”= L2Ê4(Ó¡Ì€2ef¢LüÀOÜÀMÜÀMÜÀMÜÀMÜÀMÜÀMÉdrKcULÌýL´¥‚Í©€
+Ø©€
+Ø©€
+Ø©€
+Ø©€
+Ø©€b†y˜5u˜i`o`§v`§v`§v`§v`§v`§v؝þN§~:à§~:à§~:à§~:à§~:à§~:à§~:à§~àg ~àg ~àg ~àg ~àg ~àg ~àg ~àg ~ðC€üà‡ ?dû'v}‰W at + ‡ =è!@zÐC€ôL@ÏôL@ÏôL@Ïë3ÁúL°>ð3Spª{’$6yød•K
+%Êp$qÖåV—…«KõX]Ý“âïÚÊnPú¡@iC„²;”ÉPö€2ÊT(Ó L‡2Ê”	oø»~7ÀïøÝ ¿àwün€ß-YʯVW×{€ I7ФhÒ
+4éštMü ‰4ñƒ&~ÐÄšøA?hâOøÁ~ð„ðý€ï|?àûßøÀ ~ ð€ ü àºóÎi^©®
+ @ €P  
+@ ( lPÀlPÀlPÀlp€
+°ß|ðmÀ·ß|ðmÀ~ðƒ€ü à?øAÀ~ðƒ€ü à?øAÀïøÝ¿;àwüî€ßð»~wÀïøÝ¿;àwüî€ßð»~wÀOüdÀOüdÀOüdÀOüdÀOüdÀOüdÀOüdÀOüdÀ‡0Àa€ ?„~üø!ðCà‡0Àa€ ?„~üø!ðCà‡0Àa€?ð!ðC8à‡pÀá€Â?„~üø!ðC8à‡pÀá€?ðS?ð!$ðCHà‡À!B?„~	üø!$ðCHà‡À!?ðS?
+ð!,ðCXà‡°ÀaÂ?„~üø!,ðCXà‡°ÀaÂ?„~üø!,ðCXà‡°ÀaÂ?„~üø!ðCà‡0Àa€ ?„~üø!ðCà‡0Àa€ ?кhÝ´îZ÷­ûÖý@ëþȁ¼Èb÷±ûÈý@ä~ r?µ?3Y(©
+Ork{œàQª[óÞºú/!¨×bC„²;”ÉPöKc±	Þ/öו
+e”éPf@‚2რÐi è4 t :
+ €N@§n E·P¦@	ø@¢ Ñ h H4 $ 
+ ‰ü~É!)ï?0Vg0i ˜4 L &
+ “€IÀ¤`Ò 0i ˜4 L &
+ “€IÀ¤`Ò 0i ˜4 ü à‘€H@¤ Ò i ˆ4 D "
+ ‘€H@¤ Ò i ˆ4 D "
+ ‘€H@¤ Ò i ˆ4 D "
+ €@@  Ê e 1 „ B !€@ˆ Ä Q ˆ( D ¢	 Ñ€hÉ!&«ˆUËEÑHU¤:Zí=áÔ²ÊÒ°W±x¤,
+K¡ÊꨓšzÍ|(ï³bP“rË£nbxV¯3Î-”$:éQ§û)XŒ‡E§Eâa¦Ø	Š9Œxôhçåà1¥Nv™AáÊÊ0›.W&א95äÈ(C¢T^iŒÉ–”‡©‚p
+ÚPCJ£TºówHuTʪ§‰
+jŸqø¤¤H}³#µfGkͶjNš0ÊOs*qbŠ"eñ0²èi®Iî˸g’+Œ™à™Tæ™”ðAZ:YQCN‰r±„]TUiŒ­vêÆxwl|ªÒ±«Ðùë<21×áR}_«§©)ÅêÏVMýÙŠœ­„]YOÍn<x	֐A æìn¬7®ö¬gȐ @>€|0 ù` ˆ# Ä â q€8@ Ž G ˆ# Ä â q #@F "	 ‘€H #@F€Œ0 D€Œ0 a 2 d„È™€Ÿ	ø™€Ÿ	ø™€Ÿ	ø™	|r@r@r@r@¨Ë겁ºl .r@r@HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -2?2?øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+?xËÞ²·lHülHülHülà3ø̆ÄφÄφÄÏž³çlà9xΞ³çlà9?????????????????øÖ¾µ!ñ³!ñ³!ñ³!ñ³màcøØ>¶!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³á؆{`@@@@@@@@@@@8߆ІІÐÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞï÷ƒÀûAàý ð~x?¼Þï÷ƒÀûAàý ð~x?¼Þï÷ƒÀûAàý ðaø0¨m½€ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aà¿ ð_ø/üþÿÿ‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼ÞÂ…gx/¼„ó<çyÎó œçA8σpžá<Ây„ó<çy0­V.ØçyÎó œçA8σpžá<Ây„ó<çwÎï œ¿A8ƒpþáü
+Âù„ó7ço0£v<èçïÿkïìÃ$«ê;_U§nwWU¿3=ÈÛð20¨CŸSuï9(}«î9¼%È;‚Aé™îÆžé±§›‘kV%Á¾Yƒ¯D|›AÐYÑh4›`ݘ5QŒÉ:*qu“ŒP³§ú|j¸ú<Ùì>Ïî>OSôüªªOÝï¹·Îý~ÏýÞ9߉áßþáßþáßþáßþáßþáßþáßþáßþáß^áÕ^áÕ^Mৄ늄년낄끄끄끄끄끄끄끄끄끄끄끄끄끄끄끄ëþKà¿þKà¿þKà¿þKà¿þKà¿^Kàµ^Kàµ^Kàµ^Kàµ^K൤ÑÛ.û¯%ðZ¯%ðZ¯%ðZ¯%ðZ¯%ðZ%ÌÏx*§x*§x*§x*§x*IzÛ¥ßðTO%ðTO%ðPÏ$ðLÏ$ðLÏ$ðLÏ$ðLÏ$ðLÏ$ðLÏ$ðLÏ$̏æÇ	óá„ùoÂü5a¾š0OM˜—&Ì7x'Wx#æk	ó´„ó>á|J8ŸΧ„ó)éO®×ží1OI˜§$ÌS4<¥á)
+OixJ3ïÔÌ;5ýÓð–fÞ©Û½í¥ÔµMͨ–öWÃ{ÞÓðž†÷4¼§Ù
+ïixOÃ{ÞÓðž†÷4¼§á=
+ïixOÃ{ÞÓðž†÷4¼§á=
+ïixO3¿ÔÌ/5óKÍüR3¿Ô|ošïMó½i¾7Í÷¦ùÞ4ß“î}OÌ'-ó"ËøµŒ_˸µŒSËõ E-×}–ë8˸µ\ÇY®ã,×o–ë7Ëõ›åúÍ6{Û±Túø·\·Y®Û,×k–ë4Ëu™åºÌr=f¹³œý¶è·E¿-úmÑoËydÑo‹~[ôÛ¢ßݶè¶E·-ãß2þ-ãß2þ-ãß2î-ãÝ2Þ-ãÝ2Þ-ãÝ2Þ-ãÛ2¾-ãÛ2¾-ãÛ2¾-ãÛ2¾-ãÛ2¾-ãÙ†ñ,'Ãu³¯’ª¨ujƒSª¦j“šR[Ô6µ‡g©.Ôø-ð[à·Àoß¿~üø-ð[à·Àoß¿~ü6ømðÛà·Áoƒß?£}FûŒöí3Úg½öô7£¿ýÍèoF3ú›ÑßÞ÷“ÑߌþZð-ø|¾ß‚oÁ·à[ð-ø|¾ß‚oÁ·à;ðø|¾߁ïÀwà;ðø|~¸Î•ø×ÿZâ_Kük‰-ñ¯%þµÄ·–øÖßZâ[K|k‰o-ñ­%¾µÄ·–øÖßZâ[K|k‰o-ñ­%¾µÄ·–øÖßZâWKüj‰_-ñ«%~µÄ¯–øÕ¿ZâWKüj‰_-ñ«%~µÄ¯–øÕ¿ZâWKüj‰_-ñ«%~µÄ¯–øÕ¿ZâWK|j‰O-ñ©%>µÄ§–øÔŸZâSK|j‰O-ñ©%>µÄ§–øÔŸZâSK|j‰O-ñ©%>µÄŸ–øÓZâOKüi‰?-ñ§%¾´Ä—–øÒ_ZâKK|i‰/-ñ¥%¾´Ä—–øÒ_ZâKK|i‰/-ñ¥%¾´Ä—–øÒ_ZâKK|i‰/-ñ¥%¾´Ä—–øÒ_ZâKK|i‰/-ñ¥%¾´Ä—–øÒ_ZâKK|i‰/-ñ¥%¾´Ä—–øÒ_ZâKK|i‰/-ñ¥%¾´Ä—–øÒ¾‚oÀ7àð
+ø|¾߀ß¿	~ü&øMð›à7Áo‚ß¿	~ü&øMð›à7Áo‚ÎâOKüi‰?-ñ§%þ´ÄŸ–øÓZâOKüi‰?-ñ§%þ´ÄŸ–øÓZâOKüi‰?-ñ§%þ´ÄŸ–øÓZâOKüi‰?-ñ§%þ´Ä–øÑ?ZâGKüh‰-ñ£%~´Ä–øÑ?ZâGKüh‰-ñ£%~´Ä–øÑ?ZâGKüh‰-ñ£%~´Ä–øÑ?ZâGKüh‰-ñ£%~´Ä–øÑ?ZâGKüh‰-ñ£%~´Ä–øÑ?ZâCK|h‰-ñ¡%>´Ä‡–øÐZâCK|h‰-ñ¡%>´Ä‡–øÐZ6zúìÀwàZâCK|h‰-ñ¡%>´Ä‡–øÐZâ#K|d‰,ñ‘}åóèpŒDz÷yCmRSj‹Ú¦fTK¥ÿèqŒÇèqŒÇèqŒÇèqŒÇèqŒÇèqŒÇèqŒÇèqŒÇè1~¹Ä/—øå¿\â—Kür‰_.ñË%~¹Ä/—øå¿\â—Kür‰O.ñÉ%>¹Ä'—øäŸ\â“K|r‰O.ñÉ%>¹Ä'—øäŸ\â“K|r‰O.ñÇ%þ¸Ä—øãÜWpÑeür‰_.ñË%~¹Ä/—øå¿\Æè2¾¹Ä7—øæß\â›K|s‰o.ñÍ%¾¹Ä7—øÝ¿[âwKün‰ß-ñ»%~·Äï–øÝ¿[âwKün‰ß-ñ»%~·Äï–øÝ¿[âkûÊöÑ˽ŒÑ˽ŒÑ˽ŒÑ˽ŒÑ˽ŒÑ˝‹Ñ¹‹Ñ¹‹Ñ¹8í}Žã‚ÎÅè\ŒÎÅè\ŒÎÅè\ŒÎÅ辴ć–øžßSâJü@™0/J˜%Ì‹æEø…¾ÆT¶ÇñÇ”ø€PâJ|@‰(ñ}5Ô&5¥¶¨mjF¥ß|?	ß~¢ÄOô|¾üE_Ág>ƒßè+øÌgæ3	ó™>Ïàó>Ïàó>Ïàó>Ïàó,ÜWôµIM©-j'£ZjØÏ=ÈЃ=ÈЃ=ÈЁÈЁÈЁÈЁÈЁÈЁÈЁÈàýÞÏàýÞÏàýÞÏàýÞÏàý¾Ïàû¾Ïàû¾Ïàû¾Ïàû¾Ïàû¾Ïàû¾Ïàû¬ÞÃe?áýÞÏàýÞÏàýÞÏ8Ÿ2ΧÞÏàýÞÏàýÞÏàýÞÏàýÞϸËàÿþÏàÿþÏàÿþÏàÿþÏàÿþÏàýÞÏàýÞÏàýÞÏàýÞÏàýÞÏàýÞÏàýÞÏà÷~ÏàóÈ8¿²ÞùÅõBÆõBÆõBfðhfðhfðhfðhfðhfðhfðhfðhÆõBÆõBÆõBÆõBÆõBÆõBÆõBÆõBÆõBÆõBÆõBÆõBÆõBÆõB†/—áËe\d\d\d\d\d\XxÊÂSž²ð”…§,<eá)OYxÊNö¶—R[Ô65£Zj诅§,<eá)OYxÊ2oµð•…¯,|eá+_YøÊÂW¾²ð•…¯,|eá+_YøÊ2oµÌ[-üeá/YøËÂ_þ²ð—…¿,üe™·ZxÌÂc³ð˜…Ç,<fá1YxÌÂc³ð˜…Ç,<fá1îgHYxÌÂc³ð˜…Ç,<fá1YxÌÂc³ð˜…Ç,<fá1YxÌÂc³ð˜…Ç,<fá1YxÌÂc³Ìc-|fá3ŸYøÌÂg>³ð™…Ï,|fá3ŸYøÌÂg>³øKÉâ/YæQ–y”ee™GYæQ–y”ee™GYæQ¾´ð¥e>l™[øÓ2¶Ì‡-óa«]ße++wú®å²°^þú•R¹¬÷××+×÷ž…Ï1ã~—ä~—¯à3³ÌÇ,ó1îƒù
+>ó1Ë|Ì2³ÌÇ,ó1î›Iî›Iî›Iî›ù
+>ó1îŸIîŸI‹pŸLrŸLrŸÌW¶Xô€ûf¾²}ô€ûh’ûh¾²è÷Ó$÷Ó$÷Ó$÷Ó$÷Ó$÷Ó$÷Ó$÷Ó$÷Ó$÷Ó$÷Ó$÷Ó|=ྚ侚¯à£Üg“Üg“Üg“Üg“Ügó|ô¢Üw“¶§øIÜw“Üw“Üwó|ü$îÃIîÃIîÃIîÃIîÃIîÃIîÃIîÃIîÃIîÃù
+>~÷ådワå:Æâ'Yü$ËuÅO²øI?Éâ'Yü$‹Ÿdñ“,~’ÅO²Ü÷±øJ_Éâ+Y|%‹¯dì»<œh7®ÞWÉâ*Y\%‹«dq•jíPk‡Z;ÔÚ¡Öµv¨µC­jí&{ÛK©-j›šQ-5ìC­jíPk‡Z;ÔÚ¡Öuv¨³CêìPg‡:;ÔØ¡Æ5v¨±CjìPc‡;ÔØ¡Æ5v¨±Cêᱨ±CjìPc‡;ÔØ¡Æ5v¨±CjìPc‡;ÔØ¡Æ5v¨±CjìPc‡;ÔØ¡Æõu¨¯C}êëP_‡ú:ÔÖ¡¶µu¨­CmjëP[‡Ú:TÖ¡®.îm—þ£¦5u¨©CMjêPS‡š:ÔÔ¡¦5u¨©CMjêPS‡š:ÔÔ¡¦5u¨©CMjêPS‡š:ÔÔ¡¦5u¨©CMjêPS‡›áp3n†ÃÍp¸Ž«‡z:ÔÓ¡žõt¨§C=êéLýE=êéPO‡z:ÔÓ¡žõt¨§C=êéPO‡z:ÔÓqµå¸Úr\m9®¶êêPW‡º:ÔÕ¡®uu¨«C]êêPW‡º:ÔÕ¡®uu¨«C]êêPW‡º:ÔÕ¡®Uu¨ªCUªêPU‡ª:TÕ¡ªUu¨ªCUªêPU‡ª:TÕ¡¦5u¨©CMjêPS‡š:ÔÔ¡¦5u¨©CMjêPS‡z:ÔÓ¡žõt¨§C=ªéPM‡j:TÓ¡šÕt¨¦C5ªéPM‡j:TÓ¡šÕt¨¦C5ªéPM‡j:î¾8î¾8tÒ¡}tè£ëé#w]w]w]w]\¸ë¢&ƒŽú*©ŠZ§6¨15¡jª¡6©)µEmS3j×…*Á—²ºuîêåÅÙ™é×ð2Zù—ÉwnYð¿Þ<?ôºå…kv†6lNÕ‡¶w£Þf·ÏÏNû
+/]¿{I+:¯è¬¢³ŠÎ*:«è¬bëuÙ·mnûJpØì–…í`×9Duú[çÕA©sˆê­Êì
+[槷ù}àpêàÔÁipP|)
+¾”_J¤H
+ 5ø2ì_ƒýk°
+pà6ÀÁÁÁÁÙÓüüüüüüüüüüüüüüü„í%l/a{	ÛKØ^Âö4ÛÓlOÓMÿ5ý×ô_ÓMÿ5x<
+žOƒ§Á3àðý7ô߀oÀ7àð
+ø|¾߀oÀ7à7Ám‚Û·	nÜtrhËÂüÂömþYš^¼‘wUy~nqšt-MúvÌîô­xIÏRz–¦å™…íW—íòâïЧ”>¥“}kÑ·}kÑ·}kœÑ>£}Æ1Ê8FÇ"ãXbV"““½×ŠZ§6¨15¡jª¡6©-j›šQ-5쟔“go]œ~íÒò"o ,– CgR,uíúÙ9ÏaK‹Ó;wòàáêÀ×ÖÀ…¿¼ñlpÇâìÎ-‹s;ºÿd;oÒÅ!PE=Pô@ÑhP*v]-JhQB‹Re•ÙKsÛ¦— ]	1Ê:Èuëƒ:=¨7¢éùÙ×ð
+|RB²~ü:øuð¡K	]JèRB—º”Ð¥„.eƒý‡6%´)¡M	mJhSB—²aº'Ê5s‹3/#+Oø¢`@	JP€”qZñ›˜»úš¥k—®YœåùÎÚÖ¹ëzÏwz-ÛÎ>Ç®ÁˆF”0¢„e®%ô'¡?	ýIèOB`P	ƒJT •0¨„A%*5ø|U¨F•0ª„Q%Œ*aT	£JU¨F•0*a”Š0JE¥"ŒÒ×FezqqáúùÙ­Ký+Ï–wTWêb÷p†_Î,\¿=<Ûì¿Ä
+Íf8{št¹I—›t¹I—›t¹I—›t¹I—›t¹I—SºœÒå”.§t9åÁ´dIúªölóÎYÞ¤)HéDJ'`]	ëJXWº„J*B%¡’¾6†·x´¹é«ýDʳÇ¢E_Z‹Ç¢E7Zt£E7Zt£E7Zt£E7Út£M7Út£M7Ú‹6Ç¢
+~ü6ømðÛà·Áoƒß¿
+~Û…cégZÝ‘Qí½XÞ1Ô{º2>¶ê‘ƒ/º£$l'£_ˆ™“ŠÌIEæ¤"sR‘9©ÈœTdN*2'™“ŠÌI%{âe9.–ãb9.|¾ß‚oÁ·à[ð-ø|¾߁ïÀwà;ðø|¾߁ïÀwà;ðø|®6üeGÅ×îÄ}:Lý̽6{ÃÜN?A_š;ø^c`vÛŽ¥ýôcàêÅnžÌö¥þÙùÙmÝÐڐ
+´`Gß8ع¼Å3çtï65£l²%Y’Š,IE–¤¯Éà´ïÇâÜÎ×z…»†7
+µImQÛ^‡v,,vUxz¾êŸ\Ӎ睞¦·_=Î^Â#á‘ŠðHEx¤"<Òפ:¿põÜ–én.s…§‹ƒsÛ—º×8[º ‘o‰à©T„G*Â#á‘ŠðHEx¤¯õÊÒ5þ„ßê/¤x‡ É
+I&=R‘©HTÝôȝsÛææ§yMdÒ#é‘ŠôHEz¤"=Ò×FÅ_@]½¸|ð{D”ɏTäF*r#¹‘ŠÜHEn¤"7R‘©ÈTäF*r#¹‘ŠÜHEn¤"7R‘©ÈTäF*r#¹‘ŠÜHEn¤"7ÒWW›}ÝòÜu~ž³}Gµ&3R‘©ÈˆTdD*2"‘ŠŒHEF¤"#R‘©ÈˆTdD*2"‘ŠŒHEF¤"#R‘©ÈˆTdD*2"‘ŠŒHEF¤"#R‘©ÈˆTdDú*WÎ?V—½r-
+÷^tÿ˜]ªøS6ü‚Öñ ‚ó³7к÷"´¦
+=ãJˆôHEz¤"=R‘©HT¤G*Ò#é‘ŠôHEz¤¯j7!ÛÏIç—wòV2ÞÚ¶<¿4·cþFÞ¦'LÈ‘TäH*r$9’ŠIEŽ¤"GR‘#©È‘TäHúÚò;¾c¶Ⱦ|ð¼bR@š¤"MR‘&©H“T¤I*Ò$i’Š4IEš¤"=R‘©HT¤G*Ò#é‘ŠôHEz¤"=R‘©HT¤G*Ò#é‘ŠôHEz¤"=R‘©ºé‘3K/ð,ÂOŠ¤"ER‘"©H‘T¤H*R$)ŠH_ù<¬f…0+„Ye½ÏÓo„™ÔHEj¤"5R‘©Hô•ã†0“©HT¤Fú
+>ÂLŠ¤"ER‘"é+ø³B˜ÂLʤ¯à#Ì
+aV³B˜¬f…0+„Y!Ì
+aVá/_{ᘤÊèš…ef¡u®¡I­T¤V*R+©•¾j“šR[Ô65£ZªZœ½ÝólÞ
+·Ö)”ŠJEê¤"uR‘:é««vÓÏæ—v|º™­¡¹ÄL*b&1“Š˜IE¬¤"VÒ"û—s¨ˆ9TÄzÁd;x-uø¡?Ôá‡:üP‡êðC~¨Ãuø¡ÎåBË…:ÌP‡ê0Cf¨Ãu˜¡3Ôa†:ÌPo÷*ý`„×Ù,#S,#S,?R,?R,?R,?R,?R,?R,?R,?R,?òµ9p‘“““=ç9ž”Ý7dî:µA©	US
+µIM©-¿ÁÉü3ª¥ºnƒú
+i,ðµÞm r
+èÞM,u·A#×€>`ÜÄr¥&×€>0XY- X- X- X-àëJš/l€qËrÅrÅrÅrÅr_Wzä6@˜,²^@±^@±^@±^Àוè6À\‘ŠŠŠŠ¾®ô Îm€0Y$aG±r@±r@±r@±r@±r@±r@±r@±r@±r@±r@±r@±r@±r@±r@±rÀ×î8h¬ŒÿD5xËÞÅ“z³×¦÷ŽêµQq¯ñ$O½ÆuÓksð‰î=Izm>éýªÑƒA{[V½®66îm¹ÑëO£×ŸFoˍÞÇãƒ;xp;¹Ì“XE,"–GË£ˆåQÄò(–)(–)(–)(–)(–)(–)(–)(–)(–)(–)(–)¨•e
+;6Ï/lymxÄ2Õ]¦0³=ÿ{ðñÔc££üoAgÙ]Ä0¿5ÿ{ЙGv1,.…ßÏ/í¼fzf6Zù³浡®´‚ëY XÂà+ûÎÜ1fî3wŒÑ†mˆÑ†mˆ›®²un~~vfóÂ
+}gùA×;؈k!k!k!k!k!k!|mö%?¡VJܽ×ÖÝü¢¿´¤=@X¡1RÝ£¥®[´¼ƒ×t€y$!FŠ#Eˆ‘"ÄHuCŒV>¿žŸG®¼Æ„#ÄHb¤1R„)BŒ!Fªb´òùù­¼Ÿy$¡F¾‚ßnö…É=/9ðL#ã¶]90ØÕD!)¢QHŠ($E’"
+I…ä«®Ìm¿nó²?¶KÝgyHf¢Ä!)âqHŠe'Š8$E’bŠ"I‡¤ˆCò5®ú‹­í”·Øy&£$")‘|¥LFc&£1“јÉ(ÉIŠä$Er’"9I‘œä+‡ÉhÌd4f23™ŒÆLFc&£1“јÉhÌd4šné$ÜÒI˜ $L&	„„	BÂ!a‚0AH˜Ž’øäkFµTðqŒ¦	Óƒ)ÁA"1ÊWð%øL\&	“’¥|Ÿ¹AÂÜ€Ä)•07 yJ‘<¥HžR$O)’§ÉSŠä)Eò”"yJ‘<¥HžR$O)’§ÉSŠä)Eò”"yJ‘<¥HžR$O)’§ÉSŠä)Eò”¯ÍÊÎmsó³[§·ÌúÓâà±sy;MèSƒ¤îú¶În›æäI²œ{<ÓªµµUŠ€*E@•" JP¥¨RT)ªUŠ€*E@•" JP¥¨ò|œ¤')ÁI"ÀÊWðq’œ¤')‰]´sGOcˆ¹òU•·Ì/oæE#ºfvÚ“éÌÜô¶Þ_D áJ‘påk³¶my'×T³Ã¹ç½¿@Ø•"ìJ±¸M±¸M±¸M±¸M±¸M±¸M±¸M±¸M±¸ÍWº‚ú–¥ËR„e)²aYŠ°,EX–b‘œb‘œb‘œb‘œb‘œb‘œb‘œb‘œb‘œb‘œb‘œb‘œb‘œb‘œb‘œb‘œb‘œb‘œb‘œb‘œb‘œb‘œb‘œb‘œb‘œb‘œb‘œb‘œb‘œJ¸
+$¼ËWpz¼|¡Oú¡'äËWp¸
+LÒû‰Î¦t>á~Q‚_¤¡^=Ù{]§6¨	US
+µImS3ª¥\
+Åj(VC±ŠÕP¬†b5«¡X
+Åj(VC±ŠÕP¬†b5«¡X
+Åj(VC±ŠÕP¬†b5«¡X
+µj¨UC­jÕP«†Z5Ôª¡V
+µj¨UC­jÕP«†Z5Ôª¡VÍ5—æšKsË\sË\ë^Õ\ri.¹4—\šK.
+·j¸UínÕp«†[5ܪáV
+·j8UÃ¥.Õp©†K5œ©áJ
+Wj¸RÕ®Ôp¥†+5ì¨q#4n„ƍи7BC‘ŠÔ8ïç]ã¼kxQË:éá±?ð¢†5¼¨áE
+/jxQË^Ôð¢†5¼¨áE
+/jxQË^Ôð¢†5¼¨áE
+/jxQË^Ôð¢†5¼¨áE
+/jxQË^Ôð¢†5¼¨áE
+/jøOÃþÓðŸ†ÿ4W@š+ ;¦áE
+/jxQË^Ôð¢†5¼¨áE
+/jxQË^Ôð¢†5¼¨áCÝãC®{4×=šëÍuæºGsÝ£ñÏ5þ¹Æ?×øçšëÍua€Š?EÈŸ¯l©¼f*OøŸ"ÜOî§÷S„û)Âýá~¾²}¦ê„ý)Âþa¾ö¶O™ªk¦êš©ºaªnЃ^ô †©ºA7ºaÐ
+ƒn¦ê†©ºAG:bЃŽtÄ #1èˆAG:bЃŽtÄ #1èˆAG:bЃŽtÄ #1èˆAG:bЃŽ¦ê=1è‰AOzbЃžôÄ '=1è‰AOzbЃžôÄ '=1è‰AOzbЃžôÄ '=1è‰AOzbЃžôÄ '=1è‰AOsuƒ®æê}1è‹A_úb˜«æꆹºAwsuƒþôÇ ?ý1èAúcø{ZwÜ G=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘AzdÐ#ƒôÈ G=2è‘AótÃ<Ý0O7è”A§:eÐ)ƒNtÊ S2è”A§:eÐ)ƒNtÊ S2è”A§:eÐ)ƒNtÊ S2Ìß
+zeÐ+ƒ^ôÊ W½2è•A¯zeÐ+ƒ^ôÊ W½2øtŸÎàÓ|:Ãý^Ã_ô2øtŸÎàÓ|:Ã}_Ã}_Ã}_ƒag0ìw¯w¯ŽÁ±38vÇÎàØ;ƒcg¸ol¸ol¸olpënÁ­3¸u·ÎàÖtÛàÖÜ:ƒ[gpëw×únÐwƒ¾ôÝ ï}7Xu«Î`Õ¬:ƒþôß ÿý7è¿Aÿ
+úoЃþôß ÿý7è¿Aÿ
+úoÐÿ&zÞDÏ›èwýn¢Mô¡	/4á…&ßg“ï³É÷Ùäûlò}6ù>›|ŸM¾Ï&Ç©I¿›ô;e^’2/I™—¤Ì'Ræ)ó‰”ùDÊ|"e>‘2ŸH™O¤Ì'Ræ)ó‰”ùDÊ|"e>‘2ŸH™O¤Ì'Rô;…WSx5…WSx5…WSx5åø¥¿^MáÕ^MáÕ^MáÕ^MáÕ^MáÕ^MáÕ^MáÕ^MáÕ^MáÕ^MáÕ^MáÕ^MáÕ^MáÕ^MáÕ¾KỾKỾKỾKỾKỾKỾKÿ)ã¨Åøi1~ZŒŸóÚóÚóÚçA‹ó Å¼¶Å¼¶5ÙÛn‹Ú¦fTK
+ûÙb¶‡-Æa‹qØb¶‡-Æa‹qØb¶‡-Æa‹ùj‹ùj‹ùj‹ùj›ùL›ùL›ùL;éý¾A©	US
+µIM©-jØï6ó’6ó’6ó’6óáFŠp#E¸‘"ÜHn¤7R„)áFŠp#E¸‘"ÜHn¤7R„)áFŠp#E¸‘"ÜHn¤7R„)áFŠp#E¸‘"ÜHn¤7R„)áFŠp#E¸‘"ÜHn¤7R„)áFŠp#E¸‘¯à3¯%äHr¤9R„)BŽ!GŠ#EÈ‘¯+Ÿkda>૤*jÚ ÆÔ„ª©†Ú¤¦ÔµMͨ–
+~~~~~~~~~~~~~~~~¾ß‚oÁ·à[ð-ø|¾ß‚oÁ·à[ð-ø|¾߁ïÀwà;ðø|¾߁ïÀwà;ðøü0pü­DzR§:þuu—„ïÝÁ¯>uð©ƒO|êà;ß9øÎÁw¾ó5£ZjÀƒï|çà;ßùÊvÛUlW±Ýp}îk“šR[Ô6|¾¿~ü:øuðëà×Á¯ƒ_·nÜ:¸upëà5Ài€Ó`û
+¶ß`»
+ö«Áöl¿Áöl¿ÁöìW£‡Ã~ÅìGNNÌ~ÄàÅàÅàÅàÅàÅàÅàÅàÅà1nZ	û—°	ø	ø	ø	ø	ø	ø	ø	ø	ø	ø	ø	ø	ø	ø|
+¾_ƒ¯Á×àkð5ø|
+¾_ƒ¯Á×àkð5ø|¾áó†Ï>oø¼áó†Ï7ù|“Ï7é“þ7é“þ7ù|“Ïgô;ײ?–÷ø|ÇçáBÖ!kŽ5GÈš#dͲæYs„¬9BÖ!kŽ5GÈš#dͲæYs„¬9BÎ!gŽ3GÈ™#„ÊBå¡r„P9B¨áSŽð)Gø”#|Ê>åŸr„O9§áS¾Ò/¾WþQÇ?ªâ+¸\Ãq1àð
+ø|ÆáSŽð)Gø”#|Ê>åŸr„O9§áSŽð)Gø”#|Ê>åŸr„O9§áSŽ¼Åñ·8þñÇ?Þâ§r„S9©áTŽp*G8•#œÊNå§r„S9©áTŽp*G8•#œÊNå§r„S9©áTŽp*G8•#œÊNå§r„S9©áTŽp*G8•#œÊNå§r„S9©áTŽp*G8•#œÊNå§r„S9©áTŽp*G8•#œÊNå§r„S9©áTŽp*G8•#œÊNå§r„S9©áTŽp*G8•#œÊNå§r„S9©áTŽp*G8•#œÊNå§r„S9©áTŽp*G8•#œÊNå§ò|¾߁ïÀwà;ðø|¾^´ð 1Ž˜GL‡#¦Ã׬o¹í:ŠE…R¥JJŠÅ„Ò%
+¥J;l(n¥È€'žx2àÉ€'žx2àÉ€'žx2àÉ€'žx2à©€§ž
+x*à©€§ž
+x*à©€§ž
+x*à©€§ž
+x*àÕ^=àÕ^=àÕ^=àÕ^=àÕ^=àÕ^=àÕ^=àÕ^=à5^#à5^#à5^#à5^#à5^#à5^#à5^#à5^#àÅ/xqÀ‹^ð àÅaÇâ°cqØ£8ìQö({‡]‰Ã®ÄaWâ°+qØ•8ìCº‡îÆ¡»qènÜ`c+ݍCwãÐÏ8ô3ýŒC?cúëPBwãÐÝ8 Å(@q ŠP€’ ”„Î'/	xIÀK^ð’€—¼$à%/	xiØf¶™†m¦a›iØf¶™†m¦a›iØf¶™†m¦l3ìCö!
+û†}h¼VÀk¼VÀk¼VÀk¼VÀk¼VÀk¼VÀk¼VÀk¼VÀk¼vÀk¼vÀk¼vÀk¼vÀk¼vÀk¼vÀk¼vÀk¼vÀË^ð²€—­ài«BáU#”8”$Š	¥JJ«23ÿK[¦¶d¤xFi7ß3ºxn~f6:³›DXmÏ-nYÞÖ]µ»m=Oz6Ü´ezçlÔêFU²…¥é-[f·/
+žµ¼ýêéÅåmóÓËKµlayóüìJdhuzqzóÜ–×Ì,t×—¯<UþùÎÞ‹z÷ÅpþÅk¦‡ó
+_3ÝkÚXù\·Ib7mÛ>}ðÅÜö¹¥ƒ/¶ÍÎÌ…©Ì5ó/^hæ_¼Ð,qù­¹üÖ\®Y+ÍýÆ¿èþ¦Fßç¶_~¡Û¹ù/|Ä¿xac:Ë7ËòͲ\3“ߓߓߣòÍT¾™Ê7‹óÍâ|³8¿£ùãÑʏV8½/èêé­¯Ù<½Øo·_½iz~i¤ÛF%f“ÿ¢ægwî¯›YïumeMÿÓày£ûšç:÷~·Ì=ŸÌµ—¹ç½÷ë¿òÙvîýÞöÛ]ŒÜû½í¨_y>™{^çyò+Ïeîùdîy3÷ÙÞsÙÅ­n^œ^Yf°°Ó=Xá€6Ã7²v9ÌÃW^lš_Ø~õÎ¥éÅÞAÏk­ü·ÖÊkíü9ÑΟíü9ÑC%š¡Y ë¾hh³iÛÂö…«§w\Ã;ÍÞ™ë.ìŸ}mþ+îfÆüÊëfþu7åú—_·[½×bfËBtv·+!–bÓfO.+Ç-‰e÷ŸÏÍ=ß©¯û:÷¾Í=w´±¹6\›îs·²×º¾p¼º/¢î‹ƒOû¾æšµòÍZùfí|³v¾Y;ß,Ë7ËòͲ|3›ofóÍl¾™Ë7sùf¹³Vg“¹fþÅÍü‹\3™o&óÍd¾™Ê7Sùf*߬žoVÏ7«ç›5òÍùf|³8ß,Î7‹óÍ’|³$ß,É7Óùf:ßLç›™|3“ofòÍšùfÍ|³f¾Y~¼eùñ–åÇ[–oY~¼eùñ–åÇ[–oY~¼eùñ–åÇ[–oY~¼eùñ–åÇ[–oY~¼eùñfóãÍæǛ͏7›o6?Þl~¼Ùüx³ùñfóãÍæǛ͏7›o6?Þl~¼Ùüx³ùñfóãÍæǛ͏7›o6?Þl~¼Ùüx³a¼U.ôó‡éÍ×­p_w±I—y.sÏUîy=÷¼‘{çž'¹çú ã7´Ý437½%ð»I7mîÎæº|Ì;­ÞYù°•fÓr,…=¥[¦ü¢#ö¯ÿºAü‹ÿ¼[üÏañóŽøYGü
+â§ÃâŸv‹g7ˆŸ¼%~Ò?Þ-~´[ìÛ/~¸_ü÷ŽøÇSÅ?´Ä:âï•øþ3Eßß-žñ
+Ÿ¹H|ﻧDßÛ/¾{Šø»ŽøÛŽøŽÿmø›ÝâÛñ×ãâ¿Þ,¾õñÍŽø+ßü¯nßxúÌè7‹§ÏùGDÙq„ø/ñçñõŽøZGüÙnñÕ¯¬‹¾Ú_Y'þT‰/wÄß4}ñHñŸ×Š';âñ'ñùŽøãŽø\G|¶#žèˆÇ;â3ñؘØ{ë†hoGìùôg¢=ñéO]}ú3âÓ·”?õÉ
+ѧ®œ: >5Uþäñ‰ŽøønñhG|¬#鈏vÄÃ3⏆ÅCnˆš~d<zpƒøȸø°ïô‡÷‹uÄ;âñþqñ@Güáû†£?Tâ}Ãâ?͈û}“ûw‹÷vÄ}0Ý×0(Þóîâ÷̈w¿k4z÷aâ]£âUñŽŽ¸w÷PtoGì÷øݳ[Ü}×pt÷Iâ®añöýâ÷ßö™è÷;âmw^½í3âm·”ïü½
+ѝWŠ;§Ê¿·AünGÜñÖMÑñÖMâ-~7ß’ŠÛß\‹n_#Þ\·ù7n›·ú#uëñ¦1ñ;âwÞ8ýNG¼qLü‡Ž¸¥#vuÄԁ߾ùæè·;âæ›ÅfÄMOD7m¯ïˆ;â†aqý ¸®*–;bi¿Ø¹_,î¯Û/vtÄBGlïˆùcÅk;âÚ±VtíEb®#®¹Y\í_líˆÙŽ˜éˆ-±¹#¦OWí¯WvÄ«:⊎¸ü•Õèòýâ•UqÙÚâ˔¸´#.ñÈ—´ÄÅâ¢âhtÑ‹Ä…kÄç]Ðç×Ä+:â¼ßÎëˆß¿ÑçúßœÛçœ=sˆ8û¨¡èìQq֐8³#Ünaw‹¬#Ú¥—Fíý¢õ‘ž+¦:⌎xùËÆ£—¯/;}$zÙ¸8ý´¡èô©#â´!qjG4;Âè5‘Ù/t2é5"‰kQ2*âšh¬õ!¡d-R!kbò”Z49$N©‰M/­D›FÅK+â%J¼øä
+Ñ‹gÄÉÇ£“7ˆãâ¤7D'¥âÄ
+â„
+µè„±¡&Žïˆõq܈8Öïç±ãâ˜qô~±ÎïºqԐ8ÒÁ#;âˆýâð–8Ì¿8¬#^4#õGêÐŽXë?´ö01Ñk:␎÷
+Æ;bÌïëXKŒÞ,FfÄpG
+®†:bз\+jQ•ŽðÍ:¢è›eÿ˲¿+:¢ä_—^*Š£¢ÐÅ=Å™7ýnñÅÿ?üWø¿ÝÿíGJ…­Ýå­ÑQè/>5XþE¡ïŁhW©\8åɧ÷ÉÂèÓûžÞ7yÈرcŽ;vk¹ðÜNqÄsßïìîþ—Ÿ.ömôÛx݁è[S-Y0S‡¾·0¼fo4pÇðžâ½âÐra tæØxÍ5úܾŸíSJNÙ÷ÌÏžÜ7úä'?uÕº[ÖÝ¿N¯,ŽÕÇÖÇÃÅõÇ•ÆFuµ¶¸fm½»âï„õÇõ‰÷íÙsêÇÞð•…_yÃÇžêƒoû‡>ôö·P|ªôêÝ÷¡™ébVðlº3ñ•üà+þ‡~í*ßTXS8¢°cêøÂD±rëÀ›£‰£½ƒÅϼhïøžÁ;Ž<b¢401P8·4>b\éâ“cãM¿ãÏülß3£?öŸýØ¿19µñŒ£vuÿQ~Ô³GEgÎ(žQ:câŒ#¢—ôŸ2pJå%Õ…ÂBq¡´0±pDåÊ×ùý™8v]ÑðûtLaeŸ
+ý›üþõõ—w=÷èàŸ}úÚ§6oùó×v~Öyª¸ñ¹ïû÷”Þÿæwí.½úŠÏ>Õh<|òKŠ¦X-RlwþæÉ{?ñð}…î>u.-_á÷©V8©pÎÔúϪŒßzÈÚ½#bï	ë÷œøxeïȇuÂa…Á3ûÆǏ±GŸ{²wØŸ|&øÎ7º{ÔôGÿä[N¾ÿäîÑ_9Ì+‡üÐÑұǝpb¼Òý—ùJÆýWrh\ï{ÿ=w¿ÿýwßóþ=Îþé‡.¸à¾?ù‰æ£oøÚsÏ}í
+6÷”^ö¥oûKO}ûÛ?ì|·óG­ûøKN~âs¯Ú²¹xjQËÅS7oùH¡P,<V(”gü˜9¤Ð˜:LT
+b¸ØwÛðØžÁ{«ÅÒ@ἡÊ@Í­ñ_‡ú™„§œ¾Ï÷{lüÐæä£WM»£eýXè²R{¹ïêÚòÌž7¼áž‡öîm}|ùó_,=ðüo•î{ï}Ÿ}àùÛúÖ<ßìÌOº¸Ÿ÷ÜèqEá¸Oî-
+®ìQºcrrjh4šŠÎ®ŠvDÏF}Å+ñCòó{öô­ù×}ÆÓòʱ?ÔûCúöŽöî¿ãE•ñ‘Äø„}ÑÊð	CgôÇ“SëÏ8ì¦ÂM}»úw
+ìªìªîªÝ4¸kh×ð®‘]£»Æn¿ÿ°góûÒ;ð~¬Ÿ¨º#eýqÝ?K;ï~èÁ{îzè¡»ž-Žw~üì?u~RßùÁ—¿üƒøÒSÿøžÎ—:û:?òƒ§éÇÈš¢)tûø˜ø>vÏÅ—OÑ;÷ßQ|B<~”?Ï\9#]÷lT*ôö™Þé8U	çãß®+¯ÜÐ=´ÝCë{SZÜ	ùARܹw嗢髅¾zÓÇJÆŸ‘ìþ|èù‡ûª™™î<Þùÿx|ºøÃÞ	Yà{çøþ&§ÖôÕúc~B0¼§òxµo 0àƻõ;Vý!|òé¯vO¼OœÈ{)ùã´ròLìÕÚCÅ9GŸý’÷|Ð÷ä±7²éHñ‰ñ±¯|öùGËW=¼uK­à-øžxÊãXøÁÔéCƒ¥áÚEG¯¨”ú«}ôºVµ¶îèòDáÖâíå5·NÜþ¢½cå½öŒÝqÒºjíè#ú10Ü?°æ8{R·_Oï{¦{Þ4a‡ÑÎÏ<úówGå¹½²tøGc‡6ûWþ¼ü¸G'úq:µíÈꑵ#7y‚xIí%ƒ§UN«žV;m°vLá˜âñ¥“ª'ÕN>ä”5§Lœ¼ö¤u'½ñ˜Çâ­Õ[k·Þ:4Þ݃R©¯ÚWƒbH‹1*‡‹#Ä‘å£*'ž²ñŒ¯Ù¸kã-߶ñþÏn|Ñ•O=á8­Y{tq]qbMßúƒ'³`§ø£7ü­xëyºâöÛ7ß}Æ“ïÿço^ñ…ù­_œ~ã³N=øŽ¿ýÚÖO”Ïxø¤“.¾xêìc‡O~çíïùÔúõŸãË/8÷ü
+#ÇßóÆûZ¾OíÝO£ûüyì™8.Œ¸­ZóGُ´Ññáîy|ú“þÕ=r§ìûÙéþ+óüóèGù|ìıckÖžVœð]½
+ÔÇŠ×oê¼éܝO<ñ÷Ýv›Ÿ©þɝÏßûyïzï_”®º³øòÂÊXØŸ¯,_å±×N›:ò¹£Z||ÍžAÏ!kjçy6qݳÆÕ3ªG%ŸX˜øã	?°ñNÀƒtBñá.™üÑž=í-þKů+}àùé÷¾÷³”núÅýmÝò¬øPwÿ/-úb߇Áâ§ÎŽ.é‹*ÕJù’jE\R­UK—KµZµo¬ ?+Gý¥1Qô­Ç
+…ÁV5*‰>Qø\m`°V­ôEe?ÕñçÄÐèÓç>R½øÜGÆ.~Õ¹Œwÿ8¤ûGíâW½r¯ßõ)syñÜG}ƒ¡îÛ£áíl.ÿê¡Í¶Tª7(£õð½PÃÓˏ+NˆJkKk£ãªqõìÒÙ‘«NU_UzUtIõüêöÒöhkõÆҮҍѮè¶Ò;Kïˆî®>^z<úZé)ñõ訨T}åZT¨U|œ(&Ö–Ž8¢²¦61¸¡°¡¸¾t¢8¶¼!:®ï¸þ
+'VŽ¯[[?ØI9hN»ÒY•§Ê­hªoªj «dÕ¬65<5|iáÒ⥥óËDö]ØþÀE•‹«—Ô¶fŠ³¥kÅlùÚèÚ¾kû·W¦kW./–‹7–n7”oŽ^ß·«ïõý»úo¸±²«rSõºÚ̓·•ÞÝ9|oáÞâÝ¥»Ä{ÊïŽÞÑ÷ŽþwL²{ð½Ã(| ø@éñ`ùÁèÃ}îpàÁ²ô1ñDÙ_ŸU>7üdéâ«å?nô'Ù!õ#ŠÝÿ‹ëkÅõ—îùûïëï¿¿§ó×ßú§Ÿ~«|Õs»ÅµÝŸ_Ü/v?w­#§y­»Ñ‘Z±=墱¾þ¾ò˜(÷wKT.–Š~Žì¿ö1ß²:V©»¥VõC¦2æL«Ú_.–
+Ÿ‹J<+
+ô
+öÈßÿÊPñƒ ¯;6Î}dÍÅÝçÝñäÓOŽõÆÄ¿5$~ùuwL¼£Z.W/OTO¨¾¬,«—”/ëeukõºâëË×õ/U·üÆê;Ëï-ßÛÿöêÛª(~¸üÑòûûÿ°zõȪ(Gþ¨.&¢‰Êᵍâ„hCåäÚ1C§›BGþ¤Ò¬M-\d+çÔ¦†.÷ßòå¥ËÅeÑ¥}—÷_:piåòÚùCC7w
+½»xwÿƒÅúúúÐw†â}¥´¾Rôÿ×+ÅòLçµÅ|«óXç±o?ÞYüVqcqcùªç¿óüç‹{:g•Î)­í¼®xg÷<}™×Å]þ;)¾uªÝ?PªŒFº‡¹P)Œ
+ºexÈŸ¸ƒcþ´m
+Õ*£…Zt›xb¸öøèðÐ`µâÏց‘òHm´÷¬öZî°×V{8꣞lö5ÇšãÿöÙýèPÕ=æÏö¢¾ŠZ[=ththýP<tvõÕ󆮨\Q½¶zÛÐ-Cw
+W¾þL«
+×F-N”FˣѡÕ5µ5ƒ‡>rbáx¯*Ç”‰6œTÙP=¾vüà‰C'Ÿ<r̘.ÄŸ4YžŒL5©%ƒf¨9Ü™KSÅ©Ò”˜*Oq¶*¶zæÐÙÃgL]\¸ xAéq~ù|ÿý\â¿ŸË*—ù³ð’Áˇ/9lkqkéšêÜðÜÈUc7
+Ü0|ÃÈí…·TÞT{ÓàíC·ß>òÎÊ=µ{ß5ü®‘j>8üàÈ#c_ûÎ؁±Yÿ]FÃÅcϼg»ßg½t×yw¿á®ù߸¸~lç´/_]|õ®ùÒëßuÖ­—Ï{în1_Xùï¸ÿ§Ûß,|³xzñ»WÿP2þ±C#^-î÷—–ú®X}¬>V«ÕÇêcõ±úX}¬>V«ÕÇêcõ±úX}¬>V«ÕÇêcõ±úX}¬>V«ÕÇêcõ±úX}¬>V«ÕÇêcõ±úø·…ð7ä‹+µ»Ú¥û—õ÷?}…÷?ñï7ùwÿ;ó¬Â9çúúŠBá‹
+—\zÙ+W¼ê·~
+þuüW.<½òg¹{|ž½ñÀÿç1Ý?ýërá×s ~ÿY8ËÿyNá\^¿båÏù?/)\Z¸¬ðJÿìŠÂ«
+Ý#ë÷¥ø¶Bô¼õ_~ùláÙ¿ôF;…òŸ¶ö~JoõƒjõçàO´¦ðºò¾ðÓ}Ëÿ”š…Ï÷~Êß_ióX÷GœSx¬üâ‚X_оÝÃÝŸ¾·.-?^8­ð2Ž}éÔ¿ûØ#}ì5#§ÿ¼ptø²¾ðå÷|ªWÿù¯ž?ah±rIþ›ü_^tN4
 endstream
 endobj
-8274 0 obj
+8263 0 obj
 <<
-/Subtype /Type1C
 /Filter /FlateDecode
-/Length 8276 0 R
+/Length1 50720
+/Length 22603
 >>
 stream
-xœ}VTSW}!ä&å°¢yi›Š ÖªXÛúá£"‚EA--S~j$|Q’B”|lñIò#h>þбVªõQ•ju¬ý8µR«NýtÛét˜:ž7sY]sBg­™µ²ÞÊ}ïÜsÎÝ{Ÿs®ˆ
- D"QhRÑƼ쪕y¥•ËËJË„W3øH?1€Ÿ$fq:ÿõ¿¤’IÔ‚ØÒQ»BDlˆ˜
-	Ü;1$#>®PØ>†‹DÕ
-»Ëʵêõ6+§de®Žž:ušÿÍÌøøxe¾vè‹2©¨R½¾T9™üÙR¤)+/)*Ý<O™H¬5ur½F[¾¡R™WXXT(lËÎÓ+SÔuyyÙå”Äh嬧Ÿž9<f¥«Kò«*•BîÊ4efÑú*M^ů^R5!M[ZPV˜X´.¹¢2s³ºji±&¯º$µrEM§^¤2¨$j•L©¨j15™ZI­¢fSYT*•MÅPiÔrjµ–J§©8JD¢"	vT õuI´Tt>€
-Øðƒ8Y|*0.ðd½¤ÍGnô‹t±ôš,Tfä¹Gî-
-â‚NÝâ{Gó½,ÇWq"Hh‡#'ÅPÈ{ä_ ·Õâl1Z´ÎBZƒ©Vo3¹™›Uó…•¾VXñ‹áeä2Ûõµ¦:Çâ#Râ§·ó.NÔÏA<ĉ¡-<	«$˜&ûŒz½Íèf –x·:F«–IE`ã]’ä¶YZœ!žé|\ÌûÏÁ÷qÜ—¼7ÂBŠªÄÂjò0»Ñ`þÐÕsaÆÁÁöúÌãçÈ ­ÏÊÍÃ=¹¨ÚçÕÃ@òX‰/£¥šÉ…&t”³;ö8dtÇþCGìÇ#ßa=¦ýÕ­[œl‰³j©¶Žl´7€\¾$tŒ,èvòïg/_¿5íIâUvÂd’Å}.‚>ÎoäCäymÙÞtV†'L†ÇãqW¯zÛº˜Cž=nÖ)³ÕÙÆú£bMβÊDb0ÿ‹Ÿ@|óÜëÎËndèkº†&SKd³ÅæaèãßHékn“m›‚>^c2h™Á°¼ˆus|'†ó|¢‡=…CñØþ)@ éÿFø¨¿ãqL~àOwž˜27A¥š{§¿ïþ}û+8èç л×ÖÙüÉAëy-ß'Ÿî'û®C/vg¾5ŸdC"0tíÁ7/·}Ö© kg}'¦ˆÖ¯B¸úå}·TÄ2j^BtÔs$êí;ßûÀâ-œè#NÌWðò—:2,e—°›rsò^.KfÓeqR	¡8&~|å@çYEëfk—9Ö:ãŽz£Y‘µlͦ’KPT?Œb®K!øë^?¸“þ†b׫MF'+k±Ø]J]¦‡õ±´ˆƒNÄï9{ºÞ[stýy]S‰«qQ3ðhþ³
-"¿3Çì»ÁüZýSP¼¨j9‹)vÞ§µÿ”qžo¯_êe{Ù+ö<- Ö
-	ï3B¬9WйŽ¶«{¹×ê[gÌ,ÛÀÊšmV§ÍlÕ70š¦K+›¹,{“+ÖèŸqO´_åð%rÙ*¯ðI>2¾â ˆ¨~ªöŸ¹­'#ès¤æÊA•‹´VCK³ÕæV@„Ôm´m«5´Š\¬‚")ݧ£‘ÎRçR 3°PÐx­^Ðø…*RðCŠ§kù,ˆEn³M_c&ès8ÿA:td
-‰žHä~
-4¤à°éêŒÛÈFóî™:¸Òۍ„„O‘Ëau´l·êœ›}¼:öwDîc½Ûl¶˜Þ¨o`±7Xt-̦½UöRv
-»¢ì©8™O¥0	fÀXR_?r[; ­3‚vðI¼\¾áÍÜÝ™¬ŒN‰^”“Zì.=¬eë›n˜.šZM­µ­5®
-v³Œvd§Æ>“|ü´Â"¥SšvRD©‚*˜8²®¶[ôN§ÅêaÒöuguWYHî_¼õÖÖcš}LñÞ"G†e¶ÍÜPå$¾¶8·»\Ú/½qó½’ßüVA?þjƒÅØé´Ø	fŽÏ¤ôã¤Lõ
-Ú±Í@"øàZǁŽˆ„°uštÙxh”ÃxtséU=xŽì’_1%(+{;íÔ_Žvža?‘}w=Fw¡ÿA<ïߺ Ac è`º´ûÓ¬ŒÔ„5Ѿ‡À3ÚÅ°–ÐÁRÙZScšvðB¿ænà}hÁ•œo¿tâwv££nÇëõ¯™ù•Éº•¬,%ï­.¼Pæ¯ò!ü "8JÄÿ¹ ‚Ù#rÂ=8ÖßDàŸŽcÊåïÉ·™ŒZ&SJhVDƒ\’ºMV½b¨9õø$~¨=¯?‚ÞÌ/¿éïÂtµš!ºq†Dwd¬Ì(Y¹¦€;ËÀûÓü
-üùúìùÕ_^ýàð…‹
-ÿäóå<62÷Buý"NôËTaFXëÕ
-ÝÈí;±c†G„	Mm‡1†'Az= ‰°D~ú,ÆÉ’rDÿÛï#Â磎`‘‹p¼3!BÒ‰èáé„ÃýØíCx!Ž’ðÁä<CïÎx²ýßùáw’,†ÎÔ'ð1<O!hÀóøB<‰ƒñ\X7—I—!Ã@ÇÏ
-ÿÛÐkV]_üÞSëRkµ«Ûw˜ÍìvYÕàhhܵ«Qq{ÿaËÛ¬ìós_d’¤+vkš^&íu윱}vþG«¿½~¹õÒEGà’´laì¥äëúøú»?Ÿ:c®{{XUa]AF<„Â\üŒ 渥r˜³$Dßrû`"©‹üèDxÇ \rzpÌ·›ª…KÅð¡-ˆø›…Ó!D?ð7ÙGý…´2b`Ž‘¤Ž }¼ßÂ0òâÑ}ž?YÐ"òºa ©ƒ…þöM®ê¡•kðáxH¼š Is—N=ØyìMuƒ¯Ý1E;…ï'.ÙOÐl{scC7áî‘﨡
-]~éìù·¬-TT)Þÿ
-›Ç–jÕ9²ÿîʐÛQÄYL1Ú­ðdùeõÝDw%u~ îŽ„Q½}0ÆLëÅ¡W'­e åCù·žˆž3åÙ»}}¼óý g{ùǼ÷9Ñnȁ#†Ðð+d¼
-Ä*É'èCÞ#ñ
-ø	åE8{R@¤V/àó'”9PŽÉ%_²áÀ‰+ùrɽ•¨òß@½ìä… ’'á7v¾¾óuvÇ£5Îm{œ–F¯CO‚K2z«—Ÿã%åèõ¢wƒ¸àwCB¸Qõmµß
+xœÄ½xE×6<»³³ÕiÐ‹8Å«-RhQÙML*¶“ºl˶ˆmINzï5ôÞ{‡@è½÷Þ{ïý¡ˆv÷–ãäá}Þ÷z¿ÿ»>:³»³ç>Óîsf|dˆ@B$”ÌžÕ<Á$á?½Ä?æ¶õäú¢ë>"Dø¦ma%öùéJ¿ñ!âÄŽ¾ÎžÅïBƒ{×tv/îˆêŸý!ÃìÊçÚ?«»ç&BþŒßtºø
+õvQáõ—ñëMºz*{Gõ®çwuÛrÑõÕS	Yó¬žÜÞ}#JÚk¼>Ç#±Þ\O~??‚_ÿIÈF£úŠåÊZûï´œ1#	)žÑWÊ÷Mzô>®ÿÔkQÖ%ËÈ“áW	'qضŒ!@āŸeäAþ\ë-žŽîäåËÈŸüóòƒ ÓG——îáïî(mÄïž@Î	ß<~Júé]äEò8y“—>’”¿+¼H6ÞåÚŽZBïáWòÏ}é=tGaC¡‡\"\Ç5îË1‹ä ‘K±‰k~Zzžß}šÁN!—"/–Âí›ÜBŽ!?‘3ÄÏÉN¼|'y˜ÛS%C#áeò×t•¸ØÁë=̵EÎ!/“²D×|Ÿ½,nɵÞÂ[@H+9‡½ÌÎúƒË—Ùwü	!ëËËä‘ÊƼA¿]&Ü%4ˆ3É‹üý}IÝ…îEß“6–ÑÏÉ	"¡{=ɳìey$9AÙ˜œ w‹¥=Ÿ}ƒö‰‹¤=„«Èç\g+ý_oÄ-;'l1!·ˆMl&›ÉÛÜÁï~ž}ÊÃÉÓôwÞï'‰UaªäÓíø“}¥éärs3Þ3|À©ÍÑ‹d_v\ôC®â?ãØqt)×ö†·!çˆÂ1ÜÚ_xoi–¸c}ö
+9L¸…ÛM”%¤Ì^&d$¹]‘™DEÔÇ†ß Žil¿aò;Æ›¿Ñ¸úU.cÕØ
+dö
+CÇ–ýý÷ì¥uÙüØz7Ð1ê
+Ò˜ßÿ¯¾?®~ÚìcË„5½,Ôz{dùÍæy1¸â·ù}/>Po`cø¿{ÜkëŠ=üè'=<?iáëVé©®OˆôüGý=’ÝÜYé!¸c<%Ö‘-É"óY2œL&*!l_ŒH¼ÎÂЁ÷v'÷¡,áBe‘H®(S~ÿP”%^¾eFê„P–ÉPqÊ*!NFÙ ë‹Ç£<D;eÔK(%Ö†/pÍ‚¤ñ«{B” ,˜CY$ªÐŒ2å÷[Q–xù4”YKxe™¬'|‹²JF‹ë¡lI|Eå!«o*^ƒòPÒµaÉð¹ÔG“)NÒE*$FÆ’6²9—&™Èâ¼ÔÊkÄHš×©2ÿ¯Dò$GzH=¿ÛHzyýñ¼”"Ýü'Fšt•Ã«<—yþÎBþÙÎkê$ËK{r
+sI?¯ÑÆë渖ΰfŒ—ý1®¥—öñ:­\o×‹ñ÷‹7>Ó	Éû—
+]•ØضÍcæĉñXëâXºP)WJù\O}¬±·m|,ÕÝk
+j•cMùr¾´0ß>^Ïæ÷ÌÍíç,×Û™/Çr¥|¬Ðëëoí.´ÅÚ‹=¹B/XÙÒæÐÎÀÆÜŽÞ`EBMs®·›QìåwÒüv‘O>’.ü¯4ü/^™öp™÷K1ì5“÷³ÉÇŽÌÍ—Ê…boÌoÆWÖ\Ó»ŠÖ@é?™ÑV‹Æ´‚ñ¯ÒQìå}[á=NÂq¯ðQ›D&ðŸvèXÈuŒçï¹,ñ‘̇úJᘏçzóüÒU©ôMš0¡+]Ø?¾\ì/µå;Š¥ÎüøÞ<ì² 6Gjsõßçfð,˜wùpþæù*’E¼n0Sÿÿ™ÁLÖÿ9/
+¶ùßךNÆýüèÿ/Öï?÷öŠ6Ћ±ðy.œ=a¯.à÷Š|äÿ;[‚–Íõõ„ÚVÌëHwWø,vu†(½á¬lõt„OóhÑG³­>´«Zؾ߇µ!¹Ö
+F¸Ί¨-mèéšÎJhÅÊë"Çkµ…3¤Úk‚Ú‘íÑLʇK/šÁ£Í’ÑáÈﶇ²ÚÕÆßÉ¡}Ñlã³²'ÔR	ŸÔú§ƒ—º1Çظ! “Àþ
+_Ñ<WôIp§9Jhç
+kÚÃT¹ÖÊŸV§5Œÿ¡k©[Öj‰údQ8ºBN¨ gzÂ{ƒ[TÓ_ZiVFÖö‡}X?ht‚rO8žµ±^±~Ëüíúÿ¢õíœòR,Ô­‡Hw½ºòèÿçV×z.²¶o`FWV™u+Z´(쏞ÿBm5t„œÚ‹æ!¶‡ŸF}(ƒžØ“×hõEuÏãn°dm„ÚBìöÐâ,®Î¼•ã‹!3¬ƒÁ\´¢þ	§SÁj(¯T·¶VVôØ`ü^,ls#Õ:ÀÛµ¹õFÄä¹ÿ0žÅÐÅ0ö=¡\Áÿ“±¨ð–÷…~-‡_©§þÓ»AŸ,°¿'\}…p-×-°½Ö‹îD–}Ú>hÌϺšÿ
+P¢þêçZrá{µµ‡–ãÕ;¨7:y½ 5]¸WÄ¡¹pöDs·†±jÿ”ÿÛ6
+æ¸ö•fX.£²à?[²2ÞªýòO6ÖcÜ»Ã÷
+ÿÕK` |h_ÏJzkwÊ3³¶nVõ"yð]~¥X¶ª=|ô?øÅÑí^õ ~ÍëŽ4Û¢µ3}?Ó®ûâ [û±j#±?-üCåÉÞa?÷bE÷ñŸÈ‹åBfͼ1xü#›ÿóŠé
+™>Ê2l̇3ê¿ž/Qëþ‰Ãƒ§ýa­•{øŸz56¨çáÿvÍ–Cö¬ùì«®¶¢‚¢{ )ፕ5ö…3zÿìĈE~±7ìÛUãÿŒõ_·ªk¤¿Ø1ÐSS‰âÌ"3ùU€3‹_µy<žl
+Ÿ5ò{1Ï5ñ'sùU–ß͆ã’
+ŸÏG‡«q/g‘9¡®HGÿtÏçwݱð:¸šÆëÏ亂w=²cˆáqmÍaͦP÷~w:—êodø9ü:(O!A4áÍäoµ„k'x/°%²´…ß_º²U!bͲüª‰ëŸŠ§)®»1ÔØ_öTPž9`§KSašnÑôð*¸;‡ËÙ¼^sØŸ©°Í‘µ3Ã6øüyÔ/´ ‰È¢—³9vPc
+·«%´"@jAÍú°…A{²áûê´ðndÙ,ŒrP^¡e<ú2²#èÿ¹ÈÍaû§óŸXØþ~§%›×_Ó[›;SB
+3æÑœ°}©°f…éðYЋAN¨Ù4hT2aãXž
+‘Ra4ÿcKjÚVš5„)aû¼°§¦‡µ›y?z¼~ãÀh>6†mÍ o#Ñ¼æÄôA½›	ÛŒìÕÃœJ…}·r+¢Ø¿¢Ñ¤ð™Ôg+F&F730Ö³ÂYöï½2/\‹^X+Žuó@/øáúËçšaµqœƒù9kÀ²•û·¶Žjõþ'Üéªa¯<‚Ùp>M‡…ͽñß델Ëã~­-ÜïTx{eÏ=8z\•Ž?ëqíàH bá)aÝžUê­¸ñsä³VìyÇpÿä¹j»ä(¦_ýÖ¢ˆ»£½Ñàè·=ŒÓ£X°<•Dþ£8™,
+Ÿ®ðéÑn°'¬1x¿Wq£–õãUuEñe.Œ´ò?ôæòP«îûB¡,
+ËD&AûúQ7¸¿Ï*»âÒ*»ªÿnjmùïú¿ŽwöT…°‡ƒxr<ô–Hm¶¢O‚ˆN¿zVõ³/Ð6‰¬‡}Ð9ÈòvŒxt’`ê„øáa\pžœ‰œ…ÆÆ–óùXk¾»¸hóñ±ÿÁéçx]_ñòÜ|)‹4œ¹êãþã?ºþ¿?­‚\à&Æ*¥\{¾'WZ+v¬ªE×gçK=…rxÖÉkwåKyŽÕYÊõVòíõ±Žo<7¸Ô™¯UŠ±\ïâX_¾Tæ/[+¼Á…ÞNŽÒƍjVºò8×̵µ{úxõ B¥‹k睔ï-óvÉè͹²öX®\.¶r÷`[O¾·’«ötºy
+4†/Äš‹•E¼ÏGoZRÊ÷•ŠíýmùPM{7¬ÐÚ_ɇ6¬ôB=¥¶îþöÀ’E…JW±¿Âé) (¨_Šº’«í/óúAsêc=ù°Õáø–»êaÔ˜Š¥X9Ïǁ×.pSÑüU ã¸Ú¾ £+èºhQW±çß_†¡£¿ÔËóá‹íÅX¹X+÷·î™o«w¢>îæS2hP[±·½´£<I×[ø£\kqa>lA4‹B&Ao±Â‡¡Ý
+F¥oÅˆžÅÊ]9Þ¨Ö<z›Á'yn¥v{ù¼(ÅzŠ¥ü?6;VYÜ—ïÈq ñ‘Q+?íÉ-ô÷Û…`¢åº+|êñWško[u]°¾r%nWw®µçË…ÎÞÐŒÎîÅ}]åà¥`†æÚ¸’rðFÍžòªHÑŒk:,×=HÁ*Jð^Í–¹‰½Ý‹c…•¦:oR)üÎ9¬ÊAgcS["y>ïòQKíåØ聵8:À®=ˆ–îè°ÛøèLÇšiÍóÕhíçã4ba±0`X~ï
+_5±\__b¹Öî|ð j?×¼ÊÀtå*±®\™kÌ÷®Ü/nÅoõ÷¶ÃàÑ+óÊ訅ÿidËÅî`e‡CT.Ö0_/µŠ}¹¶¹NÞ0¾{‹üñ?ŸX+AqÒâ&æ»;£¦z1ÖÌ–Xó,¿e^ªÉ‹56Çf7ÍšÛ˜õ²±Ñ©f~=º>6¯±eê¬9-1^£)5³e~l–KÍœ›Ö83[óvœÝä57Çf5ÅgÌžÞèñ{33ÓçdgN‰¥ù{3gµÄ¦7ÎhláJ[f…¯BU£×(›á5e¦òËTºqzcËüú˜ßØ23Ðés¥©ØìTSKcfÎôTSlöœ¦Ù³š=®#ËÕÎlœé7qo†ÇÁefÍžßÔ8ejK=©…߬µ4¥²ÞŒTÓ´úÀÂY¼ÉM±°Êxn%×óæ/7OMMŸK7¶4·4y©AÝ w¦Ìœ5#è£93³©–ÆY3ci7%•žîE¶ñ¦d¦§gÔDz©©)^ó
+ š³¢;‚¦x3½¦ÔôúXól/Óx?66y™–°&ï{ÞÓCs3³f6{;Ìá7x½©^ÁâÿfBËÂæÏäÍ
+ô´Ìjj0e^c³WK556&øM³¸¹Áxò7‚6ÎáýÞLØŒQpïßg¯¼f½Ôt®°90ãßêòÙåíÝ–ï«s‹;¢ÇJ#þ¬gmD|
+Oéå7ºù|æ++ô<íX\K®ýôÁg7÷Fý¶/Ìs,TÂ×G1 “E…r¸Ò¹ì)Âï•sÝŒ¿5P‹óe®›¿V0såUsˆ}¥eQ©PádËõó»¥Â>pÅ%¸ªU[ ¬j)_î㞪°0ß½x<¯[
+üYhI¡·£XêAÓÃîk«Lªqh%Ö*oç
+/–:ÇÇôÿ“ߊN£àü¿	aä؞ǍÏFûø½•ÏùþóïP',*,(L(p:Ü{|_Wßp2rÂþÞŸìfC¬òñTxW$”H„™(D%7
+RG†¡dNFÕÈêd$EÖ k’µÈÚd².Y¬O6 òèt#2šlL6!cȦd32–lN¶ [òÈwoÏ2‘4„¿³¶ˆMâ’IòþÚŠlM¶!Û’íÈäp?™	÷}~x
+ÑH¶'ÓxÌOfótSxÒ0‡Ìå{½ùžs'²3Ù…ìJv#»“=x_C.&‡’ÃÈÝd)ùŒNŽ'ǐsÉ•äA$G“7È!äòù‘GN'G’É;ä{r¹ŠüL~"¿‹Èµäqò(¹Žï±Úȉ|,žä}þy‚<Kž"O“gÈç|_$Ï‘çÉõ|¿#'‘WÈKäe>V_’¯ÉQ|Ôƒ±ìá{„^rë½Â=M9Ü»,ä#ýÛ}øþa_²„ìG–‘Édr 9ˆ|E¾!w
+T&È‚"¨ä/R4A¡Žü-aˆ0T&Âpa„°š°º0R%¬!¬)¬%¬-¬#¬K~#ÿÖÖ66bÂFÂhacaaŒ°©°™0VØ\ØBØ’üN^ê…qÂxa‚0QhL!.X‚-8‚+$„¤0‰|@>¶¶¶¶¶&)!-d„¬à	¾0E˜*4’ȍÂöÂ4aº0C˜)Ìf;MB3ùƒüI>"-Âa®0OØQ˜/ì$ì,ì"ì*ì&ì.ì!ä„V¡MhòB‡Ð)t	²\ØSX t=äò©Ð+…>a/¡$”…ŠÐ/,	{‹…}„}…ý„%Âþä2á á`ááPá0ápááHá(áhááXá8áxááDá$ádááTá4a©pºp†p¦p–p¶pŽp®pžp¾pp¡p‘p±p‰p©p™p¹p…p¥p•pµpp­pp½pƒp£p“p³p‹p«p›p»°L¸C¸SX.Ü%Ü-Ü#Ü+Ü'Ü/< <(<$<,<"<*<&<.<!<)<%<-<#<+<'</¼ ¼(¼$¼,¼"¼*¼&¼.¼!¼)¼%¼-¼#¼+¼'¼/| |(|$|,|"|*|&|.|!|)|%|-|#|+|'|/ü ü(ü$ü,ü"ü*ü&üKø]øCøSøK¨
+‰q¢(RQ™(‹Š¨Šš¨‹†X'‡ŠÃÄáâq5quq¤8J\C\S\K\[\G\W\O\_Ü@ÜPŒ‰‰£ÅÅMÄ1â¦âfâXqsqqK±^'Ž'ˆÅÑã¢%Ú¢#ºbBLŠ“Ä­Ä­ÅmÄmÅíÄÉbJL‹1+z¢/N§Šâöâ4qº8Cœ)Îg‹;ˆMb³Ø"ÎçŠóÄÅùâNâÎâ.â®ânâîâbNlÛÄv1/vˆb—X÷ˆÝbØ+Å>q/±$–ÅŠØ/.‰{‹‹Å}Ä}ÅýÄ%âþâââAâÁâ!â¡âaâáââ‘âQâÑä5ò¾xŒx¬xœx¼x‚x¢x’x²x
+y“¼EÞ&ï‘×É»â©âiâRñtññLñ,ñlññ\ñ<ñ|ññBñ"ñbññRñ2ñrñ
+ñJñ*ñjññZñ:ñzññFñ&ñfññVñ6ñvq™x‡x§¸\¼K¼[¼G¼W¼O¼_|@|P|H|X|D|T|L|\|B|R|J|Z|F|V|N|^|A|Q|I|Y|E|U|M|]|C|S|K|[|G|W|O|_ü@üPüHüXüDüTüLü\üBüRüJüZüFüVüNü^üAüQüIüYüEüUüMü—ø»ø‡ø§ø—Xÿ¦„
+T¤”J”Q™*T%çSêÔ utJ‡Ñát]®NGÒQt
+º&]‹®MסëÒõèútr6ݐÆèFt4ݘnBÇÐMéft,ÝœnA·¤õtO'Љ´š4N-jS‡º4A“tÝŠnM·¡ÛÒíèdš¢iš¡YêQŸN¡Si#ÝžN£Óé:“΢³é´‰6Ó:‡Î¥óèŽt>݉îLw¡»ÒÝèîtš£­´¶Ó<í ´‹èžtí¦=´—iÝ‹–h™Vh?]HѽébºÝ—îG—Ðýéô@z=˜B¥‡ÑÃéôHz=šC¥ÇÑãé	ôDz=™žBO¥§Ñ¥ôtz=“žEϦçÐséyô|z½^D/¦—ÐKéeôrz½’^E¯¦×Ðkéuôzz½‘ÞDo¦·Ð[émôvºŒÞAï¤Ëé]ônz½—ÞGï§ÐéCôaú}”>F§OÐ'éSôiú}–>GŸ§/ÐéKôeú
+}•¾F_§oÐ7é[ômú}—¾GߧÐéGôcú	ý”~F?§_Ð/éWôkú
+ý–~G¿§?ÐéOôgúý•þFÿE§Ð?é_´Jÿ–ˆ$H¢D%Ib’,)’*i’.R4D*
+“†K#¤Õ¤Õ¥‘Ò(i
+iMi-imii]i=i}iiC)&m$–6–6‘ÆH›J›Ic¥Í¥-¤-¥ziœ4^š M”$SŠK–dKŽäJ	))M’¶’¶–¶‘¶•¶“&K))-e¤¬äI¾4Eš*5JÛKÓ¤éÒi¦4Kš-í 5IÍR‹4Gš+Í“v”æK;I;K»H»J»I»K{H9©Uj“Ú¥¼Ô!uJ]RAÚSZ uK=R¯T”ú¤½¤’T–*R¿´PZ$í--–ö‘ö•ö“–HûKHJIK‡H‡J‡I‡KGHGJGIGKÇHÇJÇIÇK'H'J'I'K§H§J§IK¥Ó¥3¤3¥³¤³¥s¤s¥ó¤ó¥¤¥‹¤‹¥K¤K¥Ë¤Ë¥+¤+¥«¤«¥k¤k¥ë¤ë¥¤¥›¤›¥[¤[¥Û¤Û¥eÒҝÒré.énéé^é>é~ééAé!éaééQé1éqé	éIé)éiééYé9éyééEé%éeééUé5éué
+éMé-éméé]é=é}ééCé#écééSé3ésééKé+ékéé[é;é{ééGé'égééWé7é_ÒïÒÒŸÒ_RUú›&0‘Q&1Æd¦0•iLg«cCØP6Œ
+g#Øjlu6’bk°5ÙZlm¶[—­ÇÖg°
+YŒmÄF³Ù&lÛ”mÆƲÍÙlKVÏƱñl›È˜ÉâÌb6s˜Ë,É&±­ØÖl¶-ÛŽMf)–f–eóÙ6•5²íÙ46Í`3Ù,6›íÀšX3kasØ\6íÈ泝ØÎl¶+ۍíÎö`9ÖÊÚX;˳ÖɺXíÉ°nÖÃzY‘õ±½X‰•Y…õ³…lÛ›-fû°}Ù~l	ÛŸÀd±ƒÙ!ìPv;œÁŽdG±£Ù1ìXv;žÀNd'±“Ù)ìTv[ÊNgg°3ÙYìlv;—ÇÎg°ÙEìbv	»”]Æ.gW°+ÙUìjv
+»–]Ç®g7°ÙMìfv»•ÝÆngËØìN¶œÝÅîf÷°{Ù}ì~ö {=Äf°GÙcìqö{’=ÅžfÏ°gÙsìyö{‘½Ä^f¯°WÙkìuö{“½ÅÞfï°wÙ{ì}öû}Ä>fŸ°OÙgìsöû’}žfß°oÙwì{öû‘ýÄ~f¿°_Ùoì_ìwöû“ýŪìo™È‚,ÊT–d&˲"«²&ë²!×ÉCä¡ò0y¸<B^M^])’אהגזבודח77”còFòhycyyŒ¼©¼™<VÞ\ÞBÞR®—ÇÉãå	òD¹A6å¸lɶìÈ®œ“ò$y+ykyy[y;y²œ’ÓrFÎÊžìËSä©r£¼½<Mž.ϐgʳäÙòr“Ü,·Èsä¹ò<yGy¾¼“¼³¼‹¼«¼›¼»¼‡œ“[å6¹]ÎËr§Ü%ä=år·Ü#÷ÊE¹OÞK.Ée¹"÷ËåEòÞòbyy_y?y‰¼¿|€| ||°|ˆ|¨|˜|¸|„|¤|”|´|Œ|¬|œ|¼|‚|¢|’|²|Š|ª|š¼T>]>C>S>K>[>G>W>O>_¾@¾P¾H¾X¾D¾T¾ŒÜDn–/—¯ ·‘ÛÉCò•är+yX¾ŠL GÈW“«åkÈ#òµär¯||½|ƒ|£|“|³|‹|«|›|»¼L¾C¾S^.ß%ß-ß#ß+ß'ß/? ?(?$?,?"?*?&?.?!?)?%?-?#?+?'?/¿ ¿(¿$¿,¿"¿*¿&¿.¿!¿)¿%¿-¿#¿+¿GŽ•ß—??”?’?–?‘?•?“?—¿¿”¿’¿–¿‘¿•¿“¿—”’–‘•“ÿ%ÿ.ÿ!ÿ)ÿ%Wå¿¢Š¨PER˜"+Š¢*š¢+†R§Q†*ÔáÊe5eue¤2JYCYSYKY[YGYWYOY_Ù@ÙP‰))£••M”1ʦÊfÊXeseeK¥^§ŒW&(•ÅT⊥؊£¸JBI*“”­”­•m”m•í”ÉJJI+%«xŠ¯LQ¦*ÊöÊ4eº2C™©ÌRf+;(MJ³Ò¢ÌQæ*ó”•ùÊNÊÎÊ.Ê®ÊnÊîÊä%G®PZ•6¥]É+J§ÒEÎ"g’o•‚²§²@éVzÈ¥J/9Y)*}Ê^JI)+rŽÒ¯,T){+‹•}”}•ý”%ÊþÊʁÊAÊÁÊ!äråPå0åpååHå(åhååXå8åxååDå$ådååTå4e©rºr†r¦r9A9[9G9—œJNSÎSÎW.P.T.R.V.Q.U.S.W®P®T®R®V®Q®U®S®WnPnTnRnVnQnUnSnW–)w(w*Ë•»”»•{”{•û”û•”•‡”‡•G”G•Ç”Ç•'”'•§”§•g”g•ç”ç•”•—”—•W”W•×”ו7”7•·”·•w”w•÷”÷•”•”•O”O•Ï”Ï•/”/•¯”¯•o”o•ï”ï•”•Ÿ”Ÿ•_”_•ß”)¿+(*)Uåo•¨‚*ªT•T¦Êª¢ªª¦êª¡Ö©CÔ¡ê0u¸:B]M]]©ŽR×P×T×R×V×Q×U×S×W7P7TcêFêhucuuŒº©º™:VÝ\ÝBÝR­WÇ©ãÕ	êDµA5Õ¸j©¶ê¨®šP“ê$u+ukuu[u;u²šRÓjFͪžê«SÔ©j£º½:M®ÎPgª³ÔÙêj“Ú¬¶¨sÔ¹ê<uGu¾º“º³º‹º«º›º»º‡šS[Õ6µ]Í«j§Ú¥Ô=Õj·Ú£öªEµOÝK-©eµ¢ö«ÕEêÞêbuu_u?u‰º¿z€z zz°zˆz¨z˜z¸z„z¤z”z´zŒz¬zœz¼z‚z¢z’z²zŠzªzšºT=]=C=S=K=[=G=W=O=_½@½P½H½X½D½T½L½\½B½R½J½Z½F½V½N½^½A½Q½I½Y½E½U½M½]]¦Þ¡Þ©.WïRïVïQïUïSïWPTRVQUSWŸPŸTŸRŸVŸQŸUŸSŸW_P_T_R_V_Q_U_S_WßPßTßRßVßQßUßSßW?P?T?R?V?Q?U?S?W¿P¿T¿R¿V¿Q¿U¿S¿WPTRVQUSÿ¥þ®þ¡þ©þ¥VÕ¿5¢	š¨QMÒ˜&kŠ¦jš¦k†V§
+цjôáÚm5mum¤6J[C[S[K[[[G[W[O[_Û@ÛP‹ii£µµM´1ämSm3m¬¶¹¶…¶¥V¯ÓÆk´‰ZƒfjqÍÒlÍÑ\-¡%µIÚVÚÖÚ6Ú¶ÚvÚd-¥¥µŒ–Õ<ÍצhSµFm{mš6]›¡ÍÔfi³µ´&­YkÑæhsµyÚŽÚ|m'mgmmWm7mwm-§µjmZ»–×:´N­K+h{j´n­GëÕŠZŸ¶—VÒÊZEë×j‹´½µÅÚ>Ú¾Ú~Úmí í@í í`ííPí0ípííHí(íhííXí8íxííDí$ídííTí4m©vºv†v¦v–v¶vŽv®vžv¾vv¡v‘v±v‰v©v™v¹v…v¥v•vµvv­vv½vƒv£v“v³v‹v«v›v»¶L»C»S[®Ý¥Ý­Ý£Ý«Ý§Ý¯= =¨=¤=¬=¢=ª=¦=®=¡=©=¥=­=£=«=§=¯½ ½¨½¤½¬½¢½ª½¦½®½¡½©½¥½­½£½«½§½¯} }¨}¤}¬}¢}ª}¦}®}¡}©}¥}­}£}«}§}¯ý ý¨ý¤ý¬ý¢ýªý¦ýKû]ûCûSûK«jëDtQ§º¤3]Ö]Õ5]×
+½N¢Õ‡éÃõújúêúH}”¾†¾¦¾–¾¶¾Ž¾®¾ž¾¾¾¾¡Ó7ÒGëë›ècôMõÍô±úæúú–z½>N¯OÐ'ê
+º©ÇuK·uGwõ„žÔ'é[é[ëÛèÛêÛé“õ”žÖ3zV÷t_Ÿ¢OÕõíõiút}†>SŸ¥ÏÖwЛôf½EŸ£ÏÕçé;êóõôõ]ô]õÝôÝõ=ôœÞª·éíz^ïÐ;õ.½ ï©/лõ½W/ê}ú^zI/ë½__¨/Ò÷ÖëûèûêûéKôýõôõƒôƒõCôCõÃôÃõ#ô#õ£ô£õcôcõãôãõôõ“ô“õSÈ}ä~ýTý4}©~º~†~¦~–~¶~Ž~®~ž~¾~~¡~‘~±~‰~©~™~¹~…~¥~•~µ~~­~~½~ƒ~£~“~³~‹~«~›~»¾L¿C¿S_®ß¥ß­ß£ß«ß§ß¯? ?¨?¤?¬?¢?ª?¦?®?¡?©?¥?­?£?«?§?¯¿ ¿¨¿¤¿¬¿¢¿ª¿¦¿®¿¡¿©¿¥¿­¿£¿«¿§¿¯ ¨¤¬¢ª¦®¡©¥­£«§¯ÿ ÿ¨ÿ¤ÿ¬ÿ¢ÿªÿ¦ÿKÿ]ÿCÿSÿK¯êÄÑ †d0C6C54C7£Îb5†ÍÆjÆêÆHc”±†±¦±–±¶±Ž±®±ž±¾±±¡362F›cŒMÍŒ±ÆæÆÆ–F½1ÎoL0&
+†iÄ
+Ë°
+Çp„‘4&[[ÛÛÛ“”‘62FÖðߘbL5íiÆtc†1Ó˜eÌ6v0šŒf£Å˜cÌ5æ;󍝌]Œ]ÝŒÝ=ŒœÑj´íFÞè0:.£`ìi,0º£×(}Æ^FÉ(£ßXh,2ö6ûûûKŒýŒƒŒƒCŒCÃŒÃ#Œ#£Œ£cŒcãŒãŒ“Œ“SŒSÓŒ¥ÆéÆÆ™ÆYÆÙÆ9ƹÆyÆùÆÆ…ÆEÆÅÆ%Æ¥ÆeÆåÆÆ•ÆUÆÕÆ5ƵÆuÆõÆ
+ƍÆMÆÍÆ-Æ­ÆmÆíÆ2ããNc¹q—q·qq¯qŸq¿ñ€ñ ññ°ñˆñ¨ñ˜ñ¸ñ„ñ¤ñ”ñ´ñŒVî¨t-îëÊ÷*©ž\[©Ø«ä")§ZKù…y9
+%Uì,öæ(¹H™¶B©­¿§£;¿·Ñ¶¢¬gÚ‹•\[[¾·¢·
+ål[.PÙ‰,ן«( ó ô"À|(to…¢ü@Qñ`F>’²i̇˜2ȨÎAFMY¡«s X7¥­ØÓ“ÃEç cê =]+ÊÒÔÖ\Iêârc¥ÐÝž—¡PÑ’ZÒµ¤u]#l.DRlÜ^,ìil?cÏåºiƒ­Z°ÒEg)ŸïíÎõ¶Úä鹶þJ^îEÝôÁõº]ÈÓ£ê…4·^êæòÌèýÞèý™ƒßïüþÌèýÞ¨ƒ{sÁWÈKE>a¨×ÛIó½Ê,4¾ˆÆÏŠ_ŐY]ý½¹ROw®¿2¤8øJnŠl(E64
+¶¡4؆¦È†R$š£·Ê¡0šucyP7¶ÖV¬­%RS‰z¤%ÒJ0¤s¢!폆tZՏV͉ZÕ
+6§TèídýÁç9+µ°ð•2CߏU3oµ‹•ç*/^Q–wŠÚºO(ôVLã}Š¬»ØÛYVú{! MÈ8¤iC:.d2	™‚LCf ³¤É$ð“ÀO7	Ü$p“ÀM7	Ü$p“ÀM7	Ü$p“ÀMúlVW±ÔËŠÁgt/…6§€v
+Ø)`§€v
+Ø)`§€v
+Ø)Í	1ûW`¦ÑÞ4°ÓÀN;
+ì4°ÓÀN;
+ì40ÓÀL3öfпàe€—^õ3µú—,ÞËâ½,ÞËâ½,ìÌÂÎ,ìÌÂÎ,ìÌÂÎ,ú({³°7ü,ð³À÷€ïß¾—§D«±3¸4hÐ< y@ó€æÍš4­òÑ*­ò¡ßO*)/\YJ.±É¬rw®Ü•‹+Êa}sâDÈH2iAڐ¤™€LB¦ ӐÈ,¤µËl ~ð€ß üà7 ¿ø
+n]ó`6,º@
+XÒ K€Ü dÈ&M ™@2d¢¥&Zj¢¥&ô›Ðo¢¥&ZjÏ^xqàÅÑÒ8Z~øqGå|؝/—÷Ä
+‡q‡q‡q‡°`€ ÷mÜ·a˜
+Ãlf×ê£cltŒ
+»lØeÃ.vٰˆ]6ì²a—|øðà;Àw€ï ß¾|øðà;Àw€ï ß¾|ø.ð]à»Àwïß¾|ø.ð]à»Àwïß>œ	gÂÁ™pp&œ	gÂÁ™pp&œ	gÂÁ™pp&œ	gÂÁ™pp&œ	g&GgÂÑ™pt&	GgÂÑ™pt&	GgÂÑ™pt&™~
+ø)àÃÙ™pv&œ	ggÂÙ™pv&œ	ggÂÙ™pv&œ	gg¦€Ÿ~øpx&ž	‡gÂá™px&ž	‡gÂá™px&ž	‡gÂá™pxf¸p|&Ÿ™žôdð> 	‡gÂá™px&ž	gÂQ™pP&”	ez¨ï¡]Úåá}í‚Ë2á²L?®u–rƒlÕV-t!A)|Ÿhjaˆ9èŽiC:.dbHW±¸ ÌhôV
+2
+™ÌBzQÆá>âpq¸8ÜGî#÷‡ûˆ7ÀŠ†døpñà7 N$'‡‰Ã‰ÄM³Ž“vø‚‚g‰Ã³ÄáYâð,qx–8<Kž%χg‰Ã³ÄáYâð,qx–8<Kž%χg‰Ã³ÄãÀŽ%LJc‰Ã±ÄáXâp,q8–8KÜADqÆAœqcÜõX¥Ø[,i/äKùr¡^é©î¾®\XÔr½ÅJ¾;_ÈÕy}åß„·U¯‚çE”êfõ‚­Lt1gPe}VO¾3ª4¢À«¯„ÅB,)¯äØ”"Ã8ÓOÚ‰?¢µtñ’ ²i¹¾¾ߤö´¶çÄýâÌ~qÇ‚ÄÙÚÔUdͅΞmÉõ+°†Îî*Ðÿov¹P×8È’a¨P»ÖsP—Üì|­Ù…Z³Gö¯üjÔ¨ð}©5hTgÐ(Öžï®äè’ö	š<¬„M
+”±a“ºÃ&E}Îˆ½ýâÞ¾õ
+ÛEK]E¹4ª…‚VxÛ€Oûx»Úøü’ƒ¯Ü×ÃV1³®8x´úVq`´"3²åÐ̽„9²‹g-‰c7Èá{µg˜Ïˆìãˆìãˆìãˆìãˆìãˆìã Ì8"û8ˆ3âŒ#öŽûµk¬/¶ &#&#&û°±y܇=>ìña{|ØãÃ?²ÇBŒn!F·£[ˆÑ-P­ªµ@µ¨ÖBŒn!F·@²HÖÉZ Y$kd-¬’µ@²HÖÉZ Y$kd-¬’µ@²HÖÉZ Y$kd-¬’µLà›À¿ZàWüj_-ð«~µÀ¯øÕ¿ZàWüj_-ð«~µÀ¯øÕ¿ZàWüj_-ð«~µÀ¯øÕ¿ZàWüj_-îwË>xײ€€Þ²€oß¾|øð-à[À·€o~ÁÂÁÂÁÂÁÂÁÂÁÂÁÂÁB€j!@µ ZP-¨T©…€ÔB at j! µ`Z0-ŒVªöö `´0Z-ˆD+÷øYì,vN4,œhXØ›Aÿ ð³2µ÷“Ÿ…ÀÏBàg-œtX8é°ZàC|h-ð¡>´À‡øÐZàC|h-’I¤…@ÒB i!´HZ$-œ}X8û°pöaáìÃÂÙ‡…³ük-ð¯þµÀ¿ø×ÿZà_ükð¾rÀCøÆÏ8à<ã€gðŒžqÀ3xÆÏ8à<ã€gðŒžqÀ3xÆÏ8à<ã€gðŒžqÀ3xÆÏ8àüá€?ð‡þpÀøÃ8àüá€?«¦í8àüá€?ð‡þpÀøÃ8àüàà`ÀA<éà`ÀÁÁ€ƒƒ88pp0à85½°88p¿:ØØ;ˆ_lìlìlìlìlìlìlìlìlìlìlìlìlìð¾sÀk6Ê6Æ6¾øÉÁFÕ/9Øx:è¿88QuÀÖ™ƒuæ`9XgÖ™ã×êCÖ™ƒuæ`yh·‡v{h¯‡öy8¸ðp`áá€ÂŸ{às<ðº^÷Àë¼dMõ‹‡~óÀÿøßÃÁ‚‡þÀƒ?ðà<øýìáàÀÃÁ¿àÁ/x88ð0<x88ðppàÁx88ðà<xØ?áejõBû&F~‚ËH2iAڐ¤™€LB¦ ӐÈžéGÒ¾|øð=à{À÷€ïß¾|øð=à{À÷€ïß¾|ø>ð}àûÀ÷ïß¾|ø>ð£8½!Åß\& £úÙ(æҁt!³ddoÖ„>ÏM<ü —
+À‹ü —À‰ü —À‹/»â°+ò\¦!¯áÁ¸p-àZÀµ€k×®\¸p-àZÀµ€k¡½ð-àÛÀ·oß¾
+|ø6ðmàÛÀ·oß¾}ô9Ðç@Ÿ=.ô¸x/çI\'ÑŽ$Ú‘D;’hG
+íH¡)ঀ›n
+zShG
+ø)à§ÐŽÚ‘~
+ø)ীŸ~øiুŸ~øiুŸ~¸iঁ›n¸iàFš
+^´Oå²Ò„ŒCZ6¤éB& “)È4d2éA¿ø
+Ào ~ð ¿ú ¿ú ëÕÃzõ°^=úMè7¡ß„~í3Ñ>x&ðLà™ÀÃú÷°þ=¬{ëÞú÷°î=¬{ëÞú÷°î=¬{ëÞú÷°î=¬{/^ÃCû°þ=¬ëßÃú÷°þ=¬ëßÃú÷°þ=¬ëßÃú÷°þ=¬WëÕÃzõ°^=¬WϮՇ½6ìµa¯
+{ØëÀ^¬oëÛs ß~úèw ß~úèw¡ß…~ú]èwÑ.úÃEûÀ#ž}®/ÏOÎåE‘˜e@,
+…6¯v<¦-ª•¢÷З€¾Ú“@{hOíI /û“°7	{“°7	{“Ð^óÀ[ˆ“ß4 ¾i@¼Ò€x¥q
+—è¿ìÉ@_ÏŸxðÿžgËó£ŽXŠè.¼³ïìÁ{ðÆ>ØÅ»ø`ìâƒ]|°‹vñÁ.>ØÅŸXÓ—‚LCf ³dÔ›>ØÅ»ø`ìâÃûû
+ÀÛø`lãƒm|°¶ñÁ.>ØÅ»ø`ìâƒ]|í3Ñ>°¶ñÁ6>ØÆÛøf
+í3Ñ>°öñÁ>>ØÇûø`ìãƒ}|°öñÁ>>ØÇûø`ìãƒ}|°öñÁ>>ØÇûø`lãƒm|°¶ñmøˆ6|D>¢Ñ…èÂGtá#ºðÁV>ØÊKù`'ß®é…ý`#l䃍|°‘hÃG´á;Ðï@?ØÊ[ù`+l僭|°•¶òÁV>ØÊ[ù`+l僭|°•¶òÁV>¢ß¾|DA¾|ø	à%€— ^x	à!zòÁf>ØÌ›ù`3læƒÍüð5<´ìæ'Ÿ>ØÎÛù`;lçƒíü$ð“ÀO?	|°¡(ÏG”ç#Êóåù`Klé#Êóåùˆò|Dy>¢<Qž(ÏG”ç#Êóåùˆò|Dy>¢<QžvöÁÎ>¢<Qž(ÏGtç#ºóÁâ>XÜG”ç#ÊóÁê>XÝG”ç#Êó3ÀÍ 7Üp3ÀÍ 7Üp3À…·ðá-|xÞÂÏ 7\ìn}ìn}ìn}ìn}ìf}ìf}ìf}ìf}ìf}ìf}ìb}ìb}ìb}ìb}ìb}ìb}ìb}x1»X»X»X»X»X»X»X»X»X»X»X»V»V~ÑÇnÕÇnÕ‡ôkþ»U»U»UßNô[%sbäG¹l€4!㐤
+é@º	È$d*’
+ÐÛРw:ûKùö\¹·ì!á_œ*·ùíÖî!{õƒ?
+¶ßÊ·£ŽIf˜¸Ž7hù½Ûºs=ü=ÜÉB¢Aµ`¨C-jÁP]ê¢\4Ø…z\èq¡Ç…
+Žˆ‘Ë$ìra—¼ðÀK Ãhiø	à'€Ÿ ~ø	à'€Ÿ ~ø	à'€Ÿn¸Ià&›nÊ‘¼þR1ºH£r£=¢Ù€YÒEEfCtÆa6˜5™‚L«ÅÞ|¥«Pj×*‹Ša¡=²¡ÊÆ+‘cå2™„Li\E>øw]u•®Rå²ÑQXX+וùìéÅÞóµ\©T\ԝï¨(a©¿OeøÇò¢‡íÅE½Q©•§¡Z{o¤"	Ó’0-	Ó’0-‰VF>ÂD¯‰^9¼\FCßù. Ñ‹‘0‘Çk"×D/—nÝ€e­å<nˆŒHÁˆŒHÁˆŒHÁˆ4ŒÀÐ"¡×DB/—ÖÐ6ŽVÈuò%Yé/¡/Ò°%¾H£/Ò0#
+3Ò0#
+3Ò0#
+3Ò0#320#320#ƒ¾È /2ÀÏ ?üð3ÀÏ ?üð3ÀÏøQ_rþf†^»èïR+†óc V0E.‚YéÉ®,ìÊ®,ìÊ®,ìÊ®,ìÊ®,ìÊ¢_<ô‹‡~ñÐ/úÅC¿xÀ÷€ïß¾|øð=à{À÷€ïß¾|ø>ð}àûÀ÷ïß¾|ø>ð}àûÀ‡âIÍ÷ôU—ó•oùÖ··¢ä»óÁ_	Õ£üŸ$󚜤Ôr[Wðq#iE¾0—v]®Ì}K¡¼ '‡¡3£­—ɺ¾R±¯XŠþD¤Î]Á—rÝ,×Ûٝ׻‹…¶\ðm
+Åb©®ÐüÙÈàÏž{×¥t›Hø5‘ðk"?×D~®‰ü\3ÈÏ-z
+ݹ®Q?ÚèpiB¢	–¥µ{;Ký­‡g3áÙLx4ÓB´åáY52jdúšÈô5‘ék"Ó×D¦¯‰L_™¾&2}MdúšÈô5‘ék"Ó×D¦¯‰L_™¾\úF~¯þÂÂ\w¾·-b3dùšÈò5‘Õk"«×DV¯‰¬^Ù»&²wMdïšÈÞ5‘½k"{×Dö®‰ì]Ù»&²wMdïšÈÞ5‘½k"{×Dö®‰ì]Ù»&²wMdïšÈÞå²!œ[|¦ôsÆ®­]ùŠÆ'tô µíºR>ø6j×.¢Ú¨Ëà÷‘×k"¯×Dþ®‰ü]ù»\šzðm›î|_w·œ¡Ñ­žþîJ¡¯{1nî
+™»&2wMdîšÈÜ5‘¹k"s×Dæ®dî¶++Ö¨™«|@/(Ñ%šÙÚsè%"sÕD檉ÌU™«&2WMd®šÈ\5‘¹j"sÕDæ*—‘Þ8BßøÄÖUì‡_#ðEƪ‰ŒU«\& “)È4d2éAúCxˆáãݍŽLdªšÈT5‘©j"SÕDfª‰ÌT™¨&2QMd¢réëAqí®ô
+[fBÂ4¤œšH95‘bj"5ÔDJ¨‰”P)¡&RBM¤„šH	5‘j"%ÔŒƒÓâà4¤†r‰ÖÁâˆÍã`²8,‹ƒÁâ`¬8˜*¦Šƒ©â`&¤žr	}`¦8˜)fŠƒ‘âØÄèÅèuÐ`¡8X(î@Ÿ}`¥8X)VŠƒ•â`!¤ÂšH…å㊃…â`!¤Êr	ý`™8öqì!âØCÄÁqpE\WÄ“ÀMÖ®a?Vv+;Ž•ÇÊŽ#p#p#p#p#p#p§ÐžìAÌGÌGÌGÌGÌGÌÏÔdd‡eÆÕf¿aâÄÚ®ÕžØÜht#iAڐ¤™€LB¦ Ó\áÄÁ
+³¤Tˆ¯¨€lcÛ
+Á7©*Àì‘ì7¨`
+ª `CChCbPØ€Encsl›xnÂ&„ÝÄ7|
+°îm¬{ëÞƺ·MX€m›m†8ƒÀ`;nÇñ<â° Zà®P F±ã° ÌbƒYl0‹
+f±ã¡ö ° ÔbÇa…ç TcƒjlPcÁ“
+ê±A=6¨ÇFeƒ‚lP
+²DÙV0¬pð‚i¡`7Ô
+&
+ñd­NíŽY«cÚµÊQ°j•ã‰Z‚[+8µ:…Ú#«Ñ0 ZÓlÖLµ*×4[5{¬š=VM³U{Ýhà€žA3¼gƒ÷lðž
+Þ³ÙˆÆlð 
+´Áƒ6xÐÚàA<hƒmDc6¢1¼h#³ƒh¬¯µ»Ø¶ ºOÚàI›ó$ßIz|œµØ	—
+~
+t°¨ÍY´»cðs ã¤Åæ‘X©=ï®”»ríy~*í"ÖÂy‹
+.¶qØ`ã°ÁF4f#³Ùàlœmƒ³mp¶ôµŽßÛ¶·÷–§òIWël¶ª]à ¶
+Ò¶AÚ6HÛN%å©
+	¾ Baçyúß¡, kÛ8i°qÒ`§”JpžÐ߇k€C%‡J6Žl1Ø8b°ÓÉèýðÒéèÇ46Žl1Ø8b°qÄ`ãˆÁƃ‰GïwwàøˆSm1Ø8b°3I9
+—q‰ŽG8kg¼°câhU¨Y fš­=G«q€`ã ÁκZ¡wak?ïÛJP‰ˆÙFÄl#b¶1Ûˆ˜mDÌ6"f³ˆÙFÄl#b¶=[çÛ’Þ·ÐxÍ6‚fç6Îlœ#Ø8G°qŽ`#¸¶qŽ`ãÁÆ9‚sç6Îlœ#Ø8G°qŽ`ãÁÆ9‚sç6Îlœ#ØÑ·$Ž„l€4!㐤
+é@º	È$d
+2
+™ÌBzÀÇù·ƒðÀAxà Àwà#ë˜Kà7 ¿ƒàÀAp€ìd.ØÀAl€¬e¾Ÿ>bd/›È^6‘½l"{ÙDö²‰ìeÙË&²—Md/›È^6‘½l"{ÙDö²‰ìeÙÇ\&µrO¡;ü?9Ôñi=pAËý½¨píNÜ—;ò=9L~Çj]À|¸u$)›HR6‘¤l"IÙD’²‰$eIÊ&’”M$)›HR6‘¤l"IÙD’²‰$eIÊ&’”M$)s	|ì@ì@ì@ÄÌ%ð±qp6â`'âØ>+÷Õ|R¹4¥¶îþV\X¬+ŸãdØ^Èõ{ÛqÀØ¢8NÒèé/c¯™:¨\ûÍ	žM$<›Hx6‘ðl:ðÞ¼·ïíÀ¡ !šKô¼·ïíÀ{#aÚD´‰„i	Ó&¦M$L›H˜6‘0m"aÚD´‰„i	Ó&¦M$L›H˜æøðßü·ƒ]ƒ“$V›H¬æúá¡xhځ‡F6—Ðí$kúÑ>자¨m:ð‹Nà݉5iBÆ!-HÒ…L@&!3YH2êGTä‚Š\P‘*rAE.¨È¹ "Tä‚Š\P‘*rAE.¨È¹ "Tä‚Š\P‘*rAE.¨È¹ "ä‚‚\P
+rAA.(ȹ؜¸Øœ¸Øœ¸ðÔn¸Ø›¸Ø›¸Ø›¸ 0{{§.N=\ð—þr±5q±5q±5q±5qÁa.8̇¹à0æ‚Ã\p˜sÁa.¸Ëg¹à,œå‚³\p“NrÁI.8É'¹à$œä‚“\°‹3Z§#.NG\œŽ¸8³uAE.¨ÈÅi‰ë §&.øÇÿ¸N
+íÿ¸àüã‚\ðþq±^]¬KëÒźt±.]¬K‘³‹ÈÙÅi‡‹õêb½ºœ]Î.g³‹ÀÙEàì"pvqÚáâ´ÃÅi‡‹Óq³‹¸ÙEÜìÖx¿™s/»ˆ—]ÄË.âeñ²‹xÙůä\üJÎůä\üJÎE¼ì"^v-ºù\„|I„zI„^I„^)¬¯4x$
+IƒGÒà‘4x$
+IƒGÒà‘4x$ƒñËÀd"ÿá;Q\yÌeÒ‚¬=w ]Èd2™†Ì@f!=H?’Ñ) —
+Àw€ï ß¾|øðà;Àw€ï ß¾|ø.ð]à»Àwïß¾|ô[Ú¾|ø.ð]à»Àwï?üðx?÷x?÷x?÷“x?‰÷“°?	û“°?	û“x?‰÷SÀK/¼ð<´ÏCû|<÷ñ܇¾h+à#q×G⮏Ä]‰»>w}$ìúHØå2™„LA¦!3YH¸èG|ñÉÇŸ¸n¸Qüâ#Á×G‚¯_	¾>|}$ør	|Œ~}$üúÆÁÃ8 ØG°`	À>€}|±ŠKà'Ÿ~øIà'qĬ|$ûH öñE+_´âø)ীŸ~
+ø)àc^à‹X\ó_Èòñ…,	Ë>–}|!ËDz||!ËDz||!ËDz|$8ûHpæøiুŸ~øiàg€Ÿ~øàg€žó2ÀÏ ?üð3ÀÏ ?üð3ÀÏ ?ü,ð³ÀÏ?ü,ð³ÀÏ?ü,ð³ÀÏ?ü,ð³ÀÏß¾|øð=à{À÷€ïëÜÃ:÷<à{À÷€ïß¾|ø>ð}àûÀ÷ïß¾|ø>ð}àûÀïxà¤ÞùH½ó‘zç#õŽË¬ÜߐåÛªH4DÂŒD<V$ìH8‘p#‘ˆD2©H¤#‘‰¼Hø¡HDx‰/á%"¼D„—ˆð^"ÂKDx‰/á%"¼D„—ˆð^"ÂKFxÉ/á%#¼d„—Œð’^2ÂKFxÉ/á%#¼d„—Œð’^2ÂKEx©/á¥B<×w"áF"‰d$R‘HG"‰l$¼HøZ{÷ôèÏhjÙB.ú:K_Ô`-Á_8bS‚¯,虁¿gÉ2Aå!Áÿ^4ø_µ`¯ŽðG‰Æ·åÊùèb¢3øÂ|‘|áG•®Bï^ýùr O¬ð‰fR¶æJCj…ñ‹
+íù¡Wåž\w7ݳXÑ^³|yqOk±»¬çJ¹ÖBÛîíÅ Û),š¼\®]ÄËþè»Ðã;
+½¹è"Õ0¾Ð[¨\ôäÛ¨æ¯\-¸:XÛî—ftYò‚ËÚ³Î\ÇîÜöá+_îž3p#ø›¤Š×Û9>×]¹C<PuÓ©»²ÔzÂ(²”Pþy ‘„‘¤ÊË«‡Ÿ«‘Õø爰<<üFÎâŸCÃò›¾œÂRc„!d	¿ª#cø§ALþ©‡ú´°–J†òO%,Ëa–¥ð>
+ïˆáaòü*­Vé_KèŸUúG•þnÒ-§¿-¡¿þr,ûµJ½Oúåçùì—cé/J?ÿ´)ûy>ýy²ôÓ¦ôÇ&°§?L ßWéwUú­I¿I¿^J¿â&~U¥_-ûûùÉK_N¡_|ÞξXJ?o§ŸU駟¬Ë>­ÒOÖ¥WéGè‡UúÁrúþ{k³÷§ï­Mß]Jß©Ò·«ô­7G±·ªôÍQô¥ôõ×F±×«ôµãöÚ(úêúÊ$ú2¿xy}©J_|Ag/Vé:}¾JŸ«ÒgÁž]>³}ºJŸZJŸ<f{²JŸ¨ÒÇ—ÐǪôÑ*}¤J>k{¨J¬Òªôþ*½ë»o$½·ŽÞs÷rvO•Þ}×®ìîåô–awíJïš,-Cï¬Ò;–Òe'¤ØíUz·ýNoåºn©Ò›ÛéMíôÆ¡ô†ÕèõUz]uò_ôÚ*½¦J¯^^U¥W^1”]iÒ+†ÒË/Á.K/A/½d»t	½d½¸J/ªÒ«ô‚ó×f´ÓóÏÎÎ_›ž7œž«Ósªôlrv•ž5„žyÆxvf•ž1žžÎñO_J—ž¶œ-­ÒÓøÜ:m9=í@éÔÇ°Sw¥§N–N©Ò“«ô$~}ÒrzâzïŒRôxÞÚãGÒãz,¿ql;=†wÚ1cèÑ#èQUzd•Q¥‡6‚^¥‡ ‡Vé!Uzðˆ4;¸™T¥îMØ	; J÷_B—l@÷«Ò}‡Ò}ªtQ•.¬ÒþJëFû—	dòR¥ŽVî“Ê«Ñòd©T¥{Ui_•{›Yq)ííËz›iÏXÚ]¥Lºg•LÚõ;í\N;ª4_¥íUÚÖºk«ÒV2œµn at sUºG•î^¥»íd°Ý†Ò]Ûé.ÑùÅÎ#éNå3zÇ‘t^•Î­Ò9ë®Í昴¥J›«´©JwXBgW鬑tf•ÎƱU:}96–n߸ÛÞ¥™ÕXãZtª·›Z¥SøÕ”vêó+9õÖ¢Y~#ëÒLzˬF3ËÄÉ“5)ÆÒ#hz™HøUjòP–FSË„ûøÕäíêØä¡tò2á@~µ]Æ¶«£Û-&On—¶­Òm¸	ÛüN·®Ò­ÆÒIUšäœl§‰†uXbu«Ô7’9UjO£ÖÄu˜5Æ¹ˆW©É+šUÚÀ7¬C'®C'ðÒ„µèxm
+6~9W¿:7’Ž[&°õÃG°úÕi}`îRiË-Æ°-«t^s‹1tsqÛ¼JÇVéfUºé0:f4ãÑM†Ñ«tô°alt•nÇ6ZBcãè†Óèyƒ*]¿J×ã}»^•®ËGeݵé:Uºv•®U¥kr
+kútQãØi:jäp6j9œ®Îë­>’®Æß_­JGð–HÓáaø:<ê»aCëØ°atXÔwC‡èlhõÝÞwCt:„÷Ý-RF낹åJF•ê¼%z•jkPu8UªTæªå*e#)卣¿S‘ß'Q Œ£d8þ¿ö®8ªë<Ÿsï¹Ï}èÞ•V»z?6’xUZ­X@Ð끄 0聈j08qd’ …´xIqQdh*c—€L‚Sye2ô˜CŠ±%hÀ£¢Ì„tMWÆNX]úŸ»’‚b;i¦3í´³çÛ{ï¹{µçü¯óýÿÎjæøñÆÖxöÿŸ†þ·øo¶ºgm£v˜4r¯"	(é'z^DˆÇQÝXäv3e
+²‘2
+8#Õ5-EMi$(øü•vX0úÑ×ø™tƒ[Œi#ÌG8qÈî1°¯ c<Kpâé§/à Á€çXYG$¾|iκ¢µà]úgQÛƒ[$›»‹bP¦'6æ
+t&º5½a<£´K‡ÙŽØH—eóÎXÃE匔;÷î8ÓÌØ‘ŒT¥¸¢mÖLìHeTÅ’ãš7Ÿd/;V§hý¸'Ô[VÞµfp``°úd™{æL|oÇO᎙3¯,ôhïh?ÓþI{dzP—e!RÉ
+#šé‰æÛ	ÓŽöŠíäG2æ¤lMD9F*Gp` etAœ‘)V°LèdwŒ¯f^ÿs.ø7Ü¥•tßê
+éyÆæõ±Ó<‘²>2iç9<ŸMÐ|ɶrÁØt`×XÀ55®ÎÙ…ÚOqn°çj?…qïïêê"-¡q¯Ã¸ÏÀ¸ÔöF:,Á‰l6šËƒ¤`°¬Qp_èú%æjp#7ü»á.ê|î*|.Å£-ž’(°2ŸF·ºL#„]Ìde‰µ]Šj7í5N–xVfUofåQ³£äD£3!d€jËUsõLY0AcÉ¥p.]U-(܇‚bþפâDl‹t°™x6VjŠ‹X£x¬æÐßÍÒ̧•OU]úù™e;7\¸„;ïaþåñwþå»/´d.Dm;®5⦗ëÇ÷qÿx÷ųLÍøoïiÙÚqY×ňF<EÏI²Dd‰•
+2ƒƒôDôâDQ`ÒXƈŒ8
+ËÊ,~lYyŽ ”uÙ¦+, ©u%¨âÄ¡÷/Âõ¢ /èÖ¤ž±K×{Ö'±I$IÎb³Èl¹-$äZ¦–3ØéÌ,6Ìâfˆ³¥4CºÑ
+$é&y\¾˜'Í5Ì3®F«q-SÍ®%k¸:¾N¨×JÕ†zãb£±‰ÝAš¤G=ªWsâ0}±vúºÞ;åüàÜ¥·ÏqÃ÷‹ØÔàû¤÷w³Ùç‚ûÀÇ­°¶d'gô”g–, Ød£=B@ÝvÁkIiK>—àýR¯¥ÃnÂvc–ycQ2á­‹f)cp¬KÍ¥fÒXWÁ©*øÕ“àLr&;Sœ©¨w2r§áXt§­ÓÞÓk®‡åÈ[£¢értÏWnX¬©éî¹óò±›.U^p/Â9°p1Ó»ðåWžÿê÷^Ç==ùo4¿vùþ|‚÷Z¾nÓÙê¶Á…éÉLÎÓÛßþÞ[3+Æ[ŽoüÊ…cgûö4Í›ëÏȨªr
+íÁ}t­æ£@×xäôÄÚ!ky#$¯µ#¢7îH²XJíFž-I Ý\°ÒèB¥ZŽNÁ7)/¦‚YT…3¬5‡=¼·uÏþý{Z÷ŽßšsdÓÛ¿¾}icG¦ßÏd]»qsxèýÌ׫ªµ‹Ú¿kÿ¦
+®]u „€˜ìyÒÀö1(Ëkl3WP[Ìùh/«x¥^Jl#âKb•±I^S´±;ÊÇŸGl“–$iåS¥µ›8
+“•/U–ªÿû·ÎžjøÞ—sgÏÆp`Á¬9¾œ÷Ëw®Œä/¢vÙ	rX@$%dEÅzÍQ^±ÃÜ‹°6‚x¦Tµ–P»P—O·‹š3á»·Fc]·n.¶ÖïÏìØxéöoÞ~ü%-bokk[[kë^ö*óÈoV­ÅùØŠU<­f¸vãý¡á›7&å©»XAžbO:Š†oSmÒ>ºó^¾ãì5u$°L¼"Eó¨,Þ¢LÈ6 q—2Õ(
+FeìÄ"iM™°uÒrà@!f¤:xëÜëÕç·nî¯Óîk7pòÝkŸøÉw÷¶žR˜õµü›ÿ¸ ÷M0^.ŽÄFìÑ~1xìäé£ÔÀ)`·H4¬¦`£ØÍc/:bæûd&R@Ç›"QÊPÁ °„K_(£WÊ—…ZÎ
+³'`Jâ@sîý’quÃ2Ü¢íòkÃxöÉ7ø¨Ž•Olð³Ø«¾Jÿë¡8>óÁ¼2AFŒ»‘q@>‚úx¦›°Ìsh©,˜aâÑ@°@c×(×‰§d[Fø:Þ|
+oÕFp’ßO‚Y>»˜yä6Ï ÌsF_/ƒž<Ñ&‰twSäicÑ&ˆ,ÃÙxŽî†mƒÚn±]¶‘yX’—0Ï¡b#x&àRClµ=Dø@”ð"“tù!p¤(PŽ¬âQŒfìœ]t3s¹yb	³‰nHÍÁ’ňI;ÃÇ
+vq›ÁÍòÙ|2ŸËæ‹ål™PÃ×O²›Éf~³ÐÄ~k⛄xàEHr8GÂ,¨Ž@/¾õK­C
+ðؾ^>*¸_ÕjÇK˜Å-Z!èÞ	ºË|X8Ý)!Vî6²ÝI7TH`Û@ð²îQ;}DEçS¦»©/™]u5×oÿÝ?h?ÇàÃßøÖÑ¡>ö·aÜ­0î6ˆíTôŠ'Ãn‰ˆ€âxÁjô&³½q}1Š€Ôq_©.‹¨Œ·/‹-v(cKOW/=­®®«îA±Î/¨	é¼ݨ£c`atš_žR'qrNÞ)8E§ä”†ÂèB[¡½0¦0¶0®0¾0¡0±™m&Í\3ß,4‹ÍR³ÜlðEûl>»/Æë‹óÅû|‰\¯]tv¨!öSêäXõ‡Ì«©›Ë¿³í„»dEþ‰Üò²Üü eCaÅãì%ÅWµÆŸcZ>|fç¯Æw1-w·Ó+ih((,Aë'l‰æxì’™î¥Í{Õ^cŸŒ•›$ÞPE¹X§bÐ’Ö”q>+‰ëÙòtK›ßŸ}â™×N2ÝãåLwûo¾6þÒp¢aȾnö¯,Ñs
+9<‘¼×‚¼FšÛ$KDk±.²ë$2Aµ°X&YÈ,c‚ï)É1Þƒ½<pû“{¿¹}ïûÁkÃ7o_»qT{WûWˆ©÷ð_à$(d2ií»ôÜ
+óªh9Ì*X¤²íæ^©Oy‰eh@¯ê`Ö¡ËԍNOš‚¬¨É('«Nµ±âT=ȃQ<ê
+´¯PV¨–z¢þßÛÁFvç?_vª»§'óÜî¢óئÌYÿ|yü=Òpó¹]©_
+ÕƒÃ`äÉ@Ïz<&#c6Ø’E‰d[bRââ„D»lHL"VԆϓ¨6ëy»W%Þ´^µcF‚lHŠÐò8Þ\&ðQ©Å3 ;ÍF)ñNR¯¢}L³”Ŧ—új×K;a²À›ÊXÔDPÝÑ4êNĺ¥³˜LL™ÐÍþlyçªoî\÷fù¾wWuoyâ'«Ÿßó±Xü·uãíÚã$÷Ç™™+W--w˜c~óøY‡£×íÞPӜ͘“ízù‡)º®»Áö"÷}ˆ±lÝ̉l7RqŸØ-‹	¾ÃðŠÅ<¡ct5Ñ@£Ü<m]«Ì&|L[¿þÙ+#Wº(Esß×ú|ãßxìÐñKLƒ/šÈëqdýÄu‡ŒûŒ4¦Ë!¸õ¸Õò£®‰¸Ž„L
+·©”šÞïrû·÷÷ôdŸ|úÔ	|‚6
+k¦éþ±¹q$äÏ
+б•4@\Ÿô,Fxàc"ÐG0ƒY%«
+þR¶I2¦ƒLw¡µA±»X&"ê㘉S&ò”µ‚¬=êúÖž*q§ß2FõžDà~aÞ,ìÀM/`E¶Êyd®\KÖÈb=®—0±Dù˜¬×¶aÿ°æ×z†±_ÛvÏĤaü×ã~|A+d–0víIü×!]µ5¤tµ NO±Éf6Aö‘
+Œd¤HµYE±E(ˆ^TÅd6EØÌfÓb%Ò„Ì’WèWÍ}‘ªa‚:W°ˆ–2sq$-du=ݹӾ’LוÆp(M-°Ð4K”
+Cwi1ƘÒÍéÔ2µÌRc’!Ý€	ÁßbÜ´ð šæ°µ™¥R3÷¯{qëÊu¥Úò~\Kûqã³ç´Oó*+_Z?@*ƒ/²_EzKÿ£(ú³°àŸÀ(äþßcÓ>ú,˜Fæ43Æ°Ù˾Eº8'×Ƚª#À?Æå‡(„rá|a„Fa„Fa„Fa„Fa„Faüß
+ý
+¯ÿOŠB¬þÃD,<ú“}¨ñù’ŽfÀyBYú­›žò¦ž—”.)C¨U._±²
+¡G׬­F¨nÝŸžû¤4¤Ÿ	µÏݦàœLÏpOÐt<ܾÀ_ÐÒá˜1ÑŸ£Ÿ³zêžêå¡Ï¶"TŒJP)Z‚Êôû
+8*Ñr´­DUú;¢5h-ªÖûuh.;Â÷_–Oœ~{Ý}0íPì r5êø‚†ý9 at m€Á	\Ôqý!ø¦ðy­]@ýh' _Ç@ u¢­ÐßG· a´{âiÈLu`òF~tú‡o}%¢àc”RºÿâÑs“×ûûÆ1×+>ú°Eþ˜ÍQ
 endstream
 endobj
-8275 0 obj
-1589
-endobj
-8276 0 obj
-2481
-endobj
-8254 0 obj <<
+8243 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [300.259 455.339 375.434 468.241]
 /Subtype /Link
 /A << /S /GoTo /D (access2) >>
 >> endobj
-8264 0 obj <<
-/D [8262 0 R /XYZ 100.892 685.529 null]
+8253 0 obj <<
+/D [8251 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5242 0 obj <<
-/D [8262 0 R /XYZ 100.892 660.623 null]
+/D [8251 0 R /XYZ 100.892 660.623 null]
 >> endobj
-8260 0 obj <<
-/D [8262 0 R /XYZ 100.892 643.753 null]
+8249 0 obj <<
+/D [8251 0 R /XYZ 100.892 643.753 null]
 >> endobj
 5088 0 obj <<
-/D [8262 0 R /XYZ 100.892 443.713 null]
+/D [8251 0 R /XYZ 100.892 443.713 null]
 >> endobj
-8265 0 obj <<
-/D [8262 0 R /XYZ 100.892 426.843 null]
+8254 0 obj <<
+/D [8251 0 R /XYZ 100.892 426.843 null]
 >> endobj
-8261 0 obj <<
+8250 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R >>
-/XObject << /Im34 8253 0 R >>
+/XObject << /Im34 8242 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8279 0 obj <<
+8266 0 obj <<
 /Length 2337      
 /Filter /FlateDecode
 >>
@@ -37844,27 +40516,27 @@
 ’!¸2¤tÝøK¸Lߐ‰ø‘?ÕÊ⥟ªŠ°õR`Šuñ,b6J±ÀQ É£»Ð¾aenûS¨¤Gæ"0Š9ý—“©Z¨±œ[U‚‹·«§W:¢Ú‰ÚÃå-6ðº°Òü.h›ó0Ϧ…®i®£“O3/8	óÜs>`§xHtü֏ײ`-‘öoÛlÃçôYÜÏö¿?ïþÏæHÒ
 endstream
 endobj
-8278 0 obj <<
+8265 0 obj <<
 /Type /Page
-/Contents 8279 0 R
-/Resources 8277 0 R
+/Contents 8266 0 R
+/Resources 8264 0 R
 /MediaBox [0 0 612 792]
-/Parent 8244 0 R
+/Parent 8233 0 R
 >> endobj
-8280 0 obj <<
-/D [8278 0 R /XYZ 151.701 685.529 null]
+8267 0 obj <<
+/D [8265 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1258 0 obj <<
-/D [8278 0 R /XYZ 151.701 515.419 null]
+/D [8265 0 R /XYZ 151.701 515.419 null]
 >> endobj
-8281 0 obj <<
-/D [8278 0 R /XYZ 151.701 489.033 null]
+8268 0 obj <<
+/D [8265 0 R /XYZ 151.701 489.033 null]
 >> endobj
-8277 0 obj <<
+8264 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8284 0 obj <<
+8271 0 obj <<
 /Length 1484      
 /Filter /FlateDecode
 >>
@@ -37878,30 +40550,30 @@
 ?@w;bƒÁÓD2C‹ Ûq;ØvbD¸‰_˜J´9T˜Ò':°Õ…_HÓÏŒ¤ðÃa9}è­•ñq¢iEáõzýP`KÅHðˆØ‘>ÙiÕ…±ÚòG)Á¡ÂñЖþ/Ú]ÙôŠ 1vcì\V±rì/Î%r+üóý¿Ì-
 endstream
 endobj
-8283 0 obj <<
+8270 0 obj <<
 /Type /Page
-/Contents 8284 0 R
-/Resources 8282 0 R
+/Contents 8271 0 R
+/Resources 8269 0 R
 /MediaBox [0 0 612 792]
-/Parent 8244 0 R
+/Parent 8233 0 R
 >> endobj
-8285 0 obj <<
-/D [8283 0 R /XYZ 100.892 685.529 null]
+8272 0 obj <<
+/D [8270 0 R /XYZ 100.892 685.529 null]
 >> endobj
-8286 0 obj <<
-/D [8283 0 R /XYZ 100.892 481.941 null]
+8273 0 obj <<
+/D [8270 0 R /XYZ 100.892 481.941 null]
 >> endobj
-8287 0 obj <<
-/D [8283 0 R /XYZ 100.892 455.459 null]
+8274 0 obj <<
+/D [8270 0 R /XYZ 100.892 455.459 null]
 >> endobj
-8288 0 obj <<
-/D [8283 0 R /XYZ 100.892 357.603 null]
+8275 0 obj <<
+/D [8270 0 R /XYZ 100.892 357.603 null]
 >> endobj
-8282 0 obj <<
+8269 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8294 0 obj <<
+8281 0 obj <<
 /Length 2096      
 /Filter /FlateDecode
 >>
@@ -37924,67 +40596,67 @@
 âqû°®³ED•BÆx×IB‚["|X*‹Ó$bV¹ö¹q§å§Švþ_‰è/®Ø|Õÿ+e&ñgqA5°?á0ã}¥°||<üøŽ†
 endstream
 endobj
-8293 0 obj <<
+8280 0 obj <<
 /Type /Page
-/Contents 8294 0 R
-/Resources 8292 0 R
+/Contents 8281 0 R
+/Resources 8279 0 R
 /MediaBox [0 0 612 792]
-/Parent 8300 0 R
-/Annots [ 8289 0 R 8290 0 R 8291 0 R ]
+/Parent 8287 0 R
+/Annots [ 8276 0 R 8277 0 R 8278 0 R ]
 >> endobj
-8289 0 obj <<
+8276 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 355.885 202.091 365.453]
 /Subtype /Link
 /A << /S /GoTo /D (ugbc) >>
 >> endobj
-8290 0 obj <<
+8277 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.953 218.903 245.813 230.592]
 /Subtype /Link
 /A << /S /GoTo /D (fdpbc) >>
 >> endobj
-8291 0 obj <<
+8278 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [300.034 145.226 351.616 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (mcoc) >>
 >> endobj
-8295 0 obj <<
-/D [8293 0 R /XYZ 151.701 685.529 null]
+8282 0 obj <<
+/D [8280 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1262 0 obj <<
-/D [8293 0 R /XYZ 151.701 660.623 null]
+/D [8280 0 R /XYZ 151.701 660.623 null]
 >> endobj
-8296 0 obj <<
-/D [8293 0 R /XYZ 151.701 641.209 null]
+8283 0 obj <<
+/D [8280 0 R /XYZ 151.701 641.209 null]
 >> endobj
 1266 0 obj <<
-/D [8293 0 R /XYZ 151.701 578.035 null]
+/D [8280 0 R /XYZ 151.701 578.035 null]
 >> endobj
-8297 0 obj <<
-/D [8293 0 R /XYZ 151.701 551.659 null]
+8284 0 obj <<
+/D [8280 0 R /XYZ 151.701 551.659 null]
 >> endobj
 1270 0 obj <<
-/D [8293 0 R /XYZ 151.701 343.463 null]
+/D [8280 0 R /XYZ 151.701 343.463 null]
 >> endobj
-8298 0 obj <<
-/D [8293 0 R /XYZ 151.701 314.966 null]
+8285 0 obj <<
+/D [8280 0 R /XYZ 151.701 314.966 null]
 >> endobj
 1274 0 obj <<
-/D [8293 0 R /XYZ 151.701 192.932 null]
+/D [8280 0 R /XYZ 151.701 192.932 null]
 >> endobj
-8299 0 obj <<
-/D [8293 0 R /XYZ 151.701 168.88 null]
+8286 0 obj <<
+/D [8280 0 R /XYZ 151.701 168.88 null]
 >> endobj
-8292 0 obj <<
+8279 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8306 0 obj <<
+8293 0 obj <<
 /Length 2178      
 /Filter /FlateDecode
 >>
@@ -38010,33 +40682,33 @@
 ¬©¢î‚»›Ëm0aõgS)P!ýF€P°Ã&\áQΠÄ|6+_©Â	<ŒUYÙYÊÊn‚¬•ñªÚÇ`³2t}¢–ã†´Œÿž„@öêý¿xÍû2„6o󚊛áÌEgFÚ		züš*µ‡ÇæÆj~xk¶nüÖl-Ýóßš•8¼5ï2˜[)ÆM¨ÖéFJ[¼BÈCE‘UOõ9RëàÙ¾ã}ZHLxCµÚ!qŸmpØ׌ºÃÁÜ¿3o at Aø?–I}‹—Õ"`!}[Ò‘Ë´ÔÆžèI)Üཏì8³ó3+ñæ	OUuCœ±¤ð®UÓºm0tõȲïŠjfü¹˜|8ËÓ	½µ`K•ê$yDû:$Ác•6óŸ{jÿWâMè¢Áå=†©>=è÷’ó¿ÞÿòÙ;Éó'kpšÿƒíÄ`
 endstream
 endobj
-8305 0 obj <<
+8292 0 obj <<
 /Type /Page
-/Contents 8306 0 R
-/Resources 8304 0 R
+/Contents 8293 0 R
+/Resources 8291 0 R
 /MediaBox [0 0 612 792]
-/Parent 8300 0 R
+/Parent 8287 0 R
 >> endobj
-8307 0 obj <<
-/D [8305 0 R /XYZ 100.892 685.529 null]
+8294 0 obj <<
+/D [8292 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5357 0 obj <<
-/D [8305 0 R /XYZ 100.892 660.623 null]
+/D [8292 0 R /XYZ 100.892 660.623 null]
 >> endobj
-8301 0 obj <<
-/D [8305 0 R /XYZ 100.892 643.753 null]
+8288 0 obj <<
+/D [8292 0 R /XYZ 100.892 643.753 null]
 >> endobj
 1278 0 obj <<
-/D [8305 0 R /XYZ 100.892 192.355 null]
+/D [8292 0 R /XYZ 100.892 192.355 null]
 >> endobj
-8308 0 obj <<
-/D [8305 0 R /XYZ 100.892 172.942 null]
+8295 0 obj <<
+/D [8292 0 R /XYZ 100.892 172.942 null]
 >> endobj
-8304 0 obj <<
+8291 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8311 0 obj <<
+8298 0 obj <<
 /Length 2062      
 /Filter /FlateDecode
 >>
@@ -38066,27 +40738,27 @@
 ÿƒªWø²°[ÐÒ‘öæR°¨«£Þwg*.ém½eÃN¾Åb†‹ã%M¬è}AæÖÙ—íj¾Ø’Üú–Öãkìâ¡×Nà;Ÿ ’¢wtï®ë=§Ýá¯ÿûvüÿ\âB?
 endstream
 endobj
-8310 0 obj <<
+8297 0 obj <<
 /Type /Page
-/Contents 8311 0 R
-/Resources 8309 0 R
+/Contents 8298 0 R
+/Resources 8296 0 R
 /MediaBox [0 0 612 792]
-/Parent 8300 0 R
+/Parent 8287 0 R
 >> endobj
-8312 0 obj <<
-/D [8310 0 R /XYZ 151.701 685.529 null]
+8299 0 obj <<
+/D [8297 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5358 0 obj <<
-/D [8310 0 R /XYZ 151.701 660.623 null]
+/D [8297 0 R /XYZ 151.701 660.623 null]
 >> endobj
-8302 0 obj <<
-/D [8310 0 R /XYZ 151.701 643.753 null]
+8289 0 obj <<
+/D [8297 0 R /XYZ 151.701 643.753 null]
 >> endobj
-8309 0 obj <<
+8296 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8316 0 obj <<
+8303 0 obj <<
 /Length 2176      
 /Filter /FlateDecode
 >>
@@ -38109,52 +40781,52 @@
 Ö™FBÈ^zUã ¬_PÁ1ÞXʃþþº’ðpg—ä–‰d¾Á>ãé›Ã‹-ÔYÖN¥™ÁõPVøÀrwúô7WÔåwßV€Xö5g÷­°àzêj¯•h2“LÍ¡üýŠôúŠüËY¤Ù
 endstream
 endobj
-8315 0 obj <<
+8302 0 obj <<
 /Type /Page
-/Contents 8316 0 R
-/Resources 8314 0 R
+/Contents 8303 0 R
+/Resources 8301 0 R
 /MediaBox [0 0 612 792]
-/Parent 8300 0 R
-/Annots [ 8313 0 R ]
+/Parent 8287 0 R
+/Annots [ 8300 0 R ]
 >> endobj
-8313 0 obj <<
+8300 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 417.993 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://support.microsoft.com/default.aspx?scid=kb;en-us;173673)>>
 >> endobj
-8317 0 obj <<
-/D [8315 0 R /XYZ 100.892 685.529 null]
+8304 0 obj <<
+/D [8302 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1282 0 obj <<
-/D [8315 0 R /XYZ 100.892 503.557 null]
+/D [8302 0 R /XYZ 100.892 503.557 null]
 >> endobj
-8318 0 obj <<
-/D [8315 0 R /XYZ 100.892 476.694 null]
+8305 0 obj <<
+/D [8302 0 R /XYZ 100.892 476.694 null]
 >> endobj
 1286 0 obj <<
-/D [8315 0 R /XYZ 100.892 427.756 null]
+/D [8302 0 R /XYZ 100.892 427.756 null]
 >> endobj
-8319 0 obj <<
-/D [8315 0 R /XYZ 100.892 400.477 null]
+8306 0 obj <<
+/D [8302 0 R /XYZ 100.892 400.477 null]
 >> endobj
-8320 0 obj <<
-/D [8315 0 R /XYZ 100.892 314.447 null]
+8307 0 obj <<
+/D [8302 0 R /XYZ 100.892 314.447 null]
 >> endobj
-8321 0 obj <<
-/D [8315 0 R /XYZ 100.892 266.324 null]
+8308 0 obj <<
+/D [8302 0 R /XYZ 100.892 266.324 null]
 >> endobj
 1290 0 obj <<
-/D [8315 0 R /XYZ 100.892 201.513 null]
+/D [8302 0 R /XYZ 100.892 201.513 null]
 >> endobj
-8322 0 obj <<
-/D [8315 0 R /XYZ 100.892 174.234 null]
+8309 0 obj <<
+/D [8302 0 R /XYZ 100.892 174.234 null]
 >> endobj
-8314 0 obj <<
+8301 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8325 0 obj <<
+8312 0 obj <<
 /Length 2153      
 /Filter /FlateDecode
 >>
@@ -38175,31 +40847,31 @@
 wú]´édÆ&3}ÑÂ`ÛÔÇÃÔíÐ.£Gÿ[>©†MœCe©ëÉNÅ”ÞhlŸ¯ ÿo„«ˆm†6Þ¶xìçJYѝœS]T—I5u“Uÿͪ¿ÒûÛ¨Š‘Å"óŏ£@CŠ`ù8z~œCÅÜï~á0£°"ƒ¾:Â$ lôÿÒ+ó‡\*Óãþÿ/XÀk
 endstream
 endobj
-8324 0 obj <<
+8311 0 obj <<
 /Type /Page
-/Contents 8325 0 R
-/Resources 8323 0 R
+/Contents 8312 0 R
+/Resources 8310 0 R
 /MediaBox [0 0 612 792]
-/Parent 8300 0 R
+/Parent 8287 0 R
 >> endobj
-8326 0 obj <<
-/D [8324 0 R /XYZ 151.701 685.529 null]
+8313 0 obj <<
+/D [8311 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8327 0 obj <<
-/D [8324 0 R /XYZ 151.701 554.172 null]
+8314 0 obj <<
+/D [8311 0 R /XYZ 151.701 554.172 null]
 >> endobj
-8328 0 obj <<
-/D [8324 0 R /XYZ 151.701 456.559 null]
+8315 0 obj <<
+/D [8311 0 R /XYZ 151.701 456.559 null]
 >> endobj
-8329 0 obj <<
-/D [8324 0 R /XYZ 151.701 388.166 null]
+8316 0 obj <<
+/D [8311 0 R /XYZ 151.701 388.166 null]
 >> endobj
-8323 0 obj <<
+8310 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F52 3737 0 R /F88 5678 0 R /F72 5679 0 R /F53 3738 0 R /F89 6121 0 R >>
-/XObject << /Im3 6520 0 R >>
+/XObject << /Im3 6519 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8332 0 obj <<
+8319 0 obj <<
 /Length 2062      
 /Filter /FlateDecode
 >>
@@ -38219,40 +40891,40 @@
 Z\&á—{ ¥±|õƒ€{| DŽNSßCO‹£9Ð|Ÿ¸ˆ'É€VãÁªE¿øÎ œ[(É¡òœEun”úŸzþúò:cº
 endstream
 endobj
-8331 0 obj <<
+8318 0 obj <<
 /Type /Page
-/Contents 8332 0 R
-/Resources 8330 0 R
+/Contents 8319 0 R
+/Resources 8317 0 R
 /MediaBox [0 0 612 792]
-/Parent 8300 0 R
+/Parent 8287 0 R
 >> endobj
-8333 0 obj <<
-/D [8331 0 R /XYZ 100.892 685.529 null]
+8320 0 obj <<
+/D [8318 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1294 0 obj <<
-/D [8331 0 R /XYZ 100.892 660.623 null]
+/D [8318 0 R /XYZ 100.892 660.623 null]
 >> endobj
-8334 0 obj <<
-/D [8331 0 R /XYZ 100.892 625.142 null]
+8321 0 obj <<
+/D [8318 0 R /XYZ 100.892 625.142 null]
 >> endobj
 1298 0 obj <<
-/D [8331 0 R /XYZ 100.892 625.142 null]
+/D [8318 0 R /XYZ 100.892 625.142 null]
 >> endobj
-8335 0 obj <<
-/D [8331 0 R /XYZ 100.892 598.735 null]
+8322 0 obj <<
+/D [8318 0 R /XYZ 100.892 598.735 null]
 >> endobj
 1302 0 obj <<
-/D [8331 0 R /XYZ 100.892 300.05 null]
+/D [8318 0 R /XYZ 100.892 300.05 null]
 >> endobj
-8336 0 obj <<
-/D [8331 0 R /XYZ 100.892 275.376 null]
+8323 0 obj <<
+/D [8318 0 R /XYZ 100.892 275.376 null]
 >> endobj
-8330 0 obj <<
+8317 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F88 5678 0 R /F72 5679 0 R /F53 3738 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8339 0 obj <<
+8326 0 obj <<
 /Length 2053      
 /Filter /FlateDecode
 >>
@@ -38282,33 +40954,33 @@
 ÝEq3†àìýÆå0ÝÙ "%TüÛ/5ùW¡29°¦/*…^xÒosKsA‘“©Ùó!ÃóïÁ^ØTú¼ÿ¿êüǯ:ù¿|ÕÿäYÇ?íÍfõsí
 endstream
 endobj
-8338 0 obj <<
+8325 0 obj <<
 /Type /Page
-/Contents 8339 0 R
-/Resources 8337 0 R
+/Contents 8326 0 R
+/Resources 8324 0 R
 /MediaBox [0 0 612 792]
-/Parent 8344 0 R
+/Parent 8331 0 R
 >> endobj
-8340 0 obj <<
-/D [8338 0 R /XYZ 151.701 685.529 null]
+8327 0 obj <<
+/D [8325 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1306 0 obj <<
-/D [8338 0 R /XYZ 151.701 660.623 null]
+/D [8325 0 R /XYZ 151.701 660.623 null]
 >> endobj
-8341 0 obj <<
-/D [8338 0 R /XYZ 151.701 641.703 null]
+8328 0 obj <<
+/D [8325 0 R /XYZ 151.701 641.703 null]
 >> endobj
 1310 0 obj <<
-/D [8338 0 R /XYZ 151.701 254.152 null]
+/D [8325 0 R /XYZ 151.701 254.152 null]
 >> endobj
-8342 0 obj <<
-/D [8338 0 R /XYZ 151.701 224.535 null]
+8329 0 obj <<
+/D [8325 0 R /XYZ 151.701 224.535 null]
 >> endobj
-8337 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F85 5513 0 R /F59 4373 0 R /F95 8343 0 R >>
+8324 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F85 5513 0 R /F59 4373 0 R /F95 8330 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8347 0 obj <<
+8334 0 obj <<
 /Length 2358      
 /Filter /FlateDecode
 >>
@@ -38343,33 +41015,33 @@
 ‡œ]\»ò×&£r%®Rzl^fÞ@°+4é4ÏÞB)9QF/ÏÅõóAAÏDvÏà~Tš¾¤€ÝÊ[þ#4ŠAˆ`åPÑm$UHè8Üø–Be’£ã¶rØËåmÊò/e~öW7½ ·mŸŸînJÁ‘D’¢ÐD²Z#r–ùñÝßoîþ\R
 endstream
 endobj
-8346 0 obj <<
+8333 0 obj <<
 /Type /Page
-/Contents 8347 0 R
-/Resources 8345 0 R
+/Contents 8334 0 R
+/Resources 8332 0 R
 /MediaBox [0 0 612 792]
-/Parent 8344 0 R
+/Parent 8331 0 R
 >> endobj
-8348 0 obj <<
-/D [8346 0 R /XYZ 100.892 685.529 null]
+8335 0 obj <<
+/D [8333 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1314 0 obj <<
-/D [8346 0 R /XYZ 100.892 536.046 null]
+/D [8333 0 R /XYZ 100.892 536.046 null]
 >> endobj
-8349 0 obj <<
-/D [8346 0 R /XYZ 100.892 508.741 null]
+8336 0 obj <<
+/D [8333 0 R /XYZ 100.892 508.741 null]
 >> endobj
 1318 0 obj <<
-/D [8346 0 R /XYZ 100.892 222.293 null]
+/D [8333 0 R /XYZ 100.892 222.293 null]
 >> endobj
-8350 0 obj <<
-/D [8346 0 R /XYZ 100.892 194.979 null]
+8337 0 obj <<
+/D [8333 0 R /XYZ 100.892 194.979 null]
 >> endobj
-8345 0 obj <<
+8332 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8353 0 obj <<
+8340 0 obj <<
 /Length 2316      
 /Filter /FlateDecode
 >>
@@ -38393,27 +41065,27 @@
 Rø”Xþ厭­%……¹«7,jÅsX)ËKfƱQ¥PSCEÃq£`·¥”¸9Sãz¥òT³Ò“‹É*©xÂ0¸â)gÏô\±í½]¿Ï ÈòûÌ}PæʇߦÁ÷÷ðp¾?>Üü^#RÃ
 endstream
 endobj
-8352 0 obj <<
+8339 0 obj <<
 /Type /Page
-/Contents 8353 0 R
-/Resources 8351 0 R
+/Contents 8340 0 R
+/Resources 8338 0 R
 /MediaBox [0 0 612 792]
-/Parent 8344 0 R
+/Parent 8331 0 R
 >> endobj
-8354 0 obj <<
-/D [8352 0 R /XYZ 151.701 685.529 null]
+8341 0 obj <<
+/D [8339 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1322 0 obj <<
-/D [8352 0 R /XYZ 151.701 559.457 null]
+/D [8339 0 R /XYZ 151.701 559.457 null]
 >> endobj
-8355 0 obj <<
-/D [8352 0 R /XYZ 151.701 530.347 null]
+8342 0 obj <<
+/D [8339 0 R /XYZ 151.701 530.347 null]
 >> endobj
-8351 0 obj <<
+8338 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8358 0 obj <<
+8345 0 obj <<
 /Length 570       
 /Filter /FlateDecode
 >>
@@ -38422,21 +41094,21 @@
 Ùßv9ÀH^^’ÆŠŽSòå·{`-PåYhOþ#ÏÆÕè,ž½n­G¼ø?¨¢i0{oßç`½ûÞ¶hxœœî7‡ÞžŽ›óX­o*ÌTÚÖçHCÛénçðÆÏYG‚ÊX!×UBî2ƒçÚµîѮ͡nàçÃwÁQkŒMŲ©ØÀ½z at cJïÆO×’`\g”^N•gœÆi4¯ó;êe^?Ž)KE>†…KÖ‚ƒ<aÍc³ã¶G:íéÉdâž›ü=ÀbÜvÍ+zêâjeÚ¯'ÛMk+MÑL:WqA3‘Í„óâ.J.Ãûs§{W›ã­.3èRªùÒʘÚe)è0½Þío&Yeܱ™Vê¯Mê(Ü­g”HÊÓeœ÷·¸(óåAux%]ÑñùÍïf>á9þ$×"A
 endstream
 endobj
-8357 0 obj <<
+8344 0 obj <<
 /Type /Page
-/Contents 8358 0 R
-/Resources 8356 0 R
+/Contents 8345 0 R
+/Resources 8343 0 R
 /MediaBox [0 0 612 792]
-/Parent 8344 0 R
+/Parent 8331 0 R
 >> endobj
-8359 0 obj <<
-/D [8357 0 R /XYZ 100.892 685.529 null]
+8346 0 obj <<
+/D [8344 0 R /XYZ 100.892 685.529 null]
 >> endobj
-8356 0 obj <<
+8343 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8362 0 obj <<
+8349 0 obj <<
 /Length 1993      
 /Filter /FlateDecode
 >>
@@ -38463,27 +41135,27 @@
 d1ý¬4ü¿yXýlá
 endstream
 endobj
-8361 0 obj <<
+8348 0 obj <<
 /Type /Page
-/Contents 8362 0 R
-/Resources 8360 0 R
+/Contents 8349 0 R
+/Resources 8347 0 R
 /MediaBox [0 0 612 792]
-/Parent 8344 0 R
+/Parent 8331 0 R
 >> endobj
-8363 0 obj <<
-/D [8361 0 R /XYZ 151.701 685.529 null]
+8350 0 obj <<
+/D [8348 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1326 0 obj <<
-/D [8361 0 R /XYZ 151.701 660.623 null]
+/D [8348 0 R /XYZ 151.701 660.623 null]
 >> endobj
-8364 0 obj <<
-/D [8361 0 R /XYZ 151.701 630.478 null]
+8351 0 obj <<
+/D [8348 0 R /XYZ 151.701 630.478 null]
 >> endobj
-8360 0 obj <<
+8347 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F85 5513 0 R /F51 3736 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8367 0 obj <<
+8354 0 obj <<
 /Length 1031      
 /Filter /FlateDecode
 >>
@@ -38498,21 +41170,21 @@
 ú+}P:üHzQ›Øœ \ŸèßE=2]Cì`$áúkƐ;Š—+2…RÙSœp—¢sÀÿ-Hâ=ft®ß2ƒJb%Ò ²}èx‘ú,¹ÐMݨ@a>ûþ­…0Íú®Ÿhç88È—z{/ŽÉ—×ÆáÝ”/µƒEHoÐÐöô\oœf!àí¢–™5?o^{–s»¾‘슺£x¡Œƒš4—~.VèX´-g9‚Í×.u3e¸aœ/7ÌØžã­§”ÍíP„ª_¶pKx‰}yüPy¨‘©µõªµCÏÆXüÒ£wMôðû6<æ7ÏüO©ÿ 9ب/
 endstream
 endobj
-8366 0 obj <<
+8353 0 obj <<
 /Type /Page
-/Contents 8367 0 R
-/Resources 8365 0 R
+/Contents 8354 0 R
+/Resources 8352 0 R
 /MediaBox [0 0 612 792]
-/Parent 8344 0 R
+/Parent 8331 0 R
 >> endobj
-8368 0 obj <<
-/D [8366 0 R /XYZ 100.892 685.529 null]
+8355 0 obj <<
+/D [8353 0 R /XYZ 100.892 685.529 null]
 >> endobj
-8365 0 obj <<
+8352 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F85 5513 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8371 0 obj <<
+8358 0 obj <<
 /Length 2265      
 /Filter /FlateDecode
 >>
@@ -38538,49 +41210,49 @@
 ==ÅíÀæÙbÙÔ¶:†Õ ¸‡	ý2šv嚦£Û¾ù¡:” xÿSÌ
 endstream
 endobj
-8370 0 obj <<
+8357 0 obj <<
 /Type /Page
-/Contents 8371 0 R
-/Resources 8369 0 R
+/Contents 8358 0 R
+/Resources 8356 0 R
 /MediaBox [0 0 612 792]
-/Parent 8380 0 R
+/Parent 8367 0 R
 >> endobj
-8372 0 obj <<
-/D [8370 0 R /XYZ 151.701 685.529 null]
+8359 0 obj <<
+/D [8357 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8373 0 obj <<
-/D [8370 0 R /XYZ 151.701 660.623 null]
+8360 0 obj <<
+/D [8357 0 R /XYZ 151.701 660.623 null]
 >> endobj
-8374 0 obj <<
-/D [8370 0 R /XYZ 151.701 653.25 null]
+8361 0 obj <<
+/D [8357 0 R /XYZ 151.701 653.25 null]
 >> endobj
-8375 0 obj <<
-/D [8370 0 R /XYZ 151.701 641.295 null]
+8362 0 obj <<
+/D [8357 0 R /XYZ 151.701 641.295 null]
 >> endobj
-8376 0 obj <<
-/D [8370 0 R /XYZ 151.701 629.34 null]
+8363 0 obj <<
+/D [8357 0 R /XYZ 151.701 629.34 null]
 >> endobj
-8377 0 obj <<
-/D [8370 0 R /XYZ 151.701 617.385 null]
+8364 0 obj <<
+/D [8357 0 R /XYZ 151.701 617.385 null]
 >> endobj
 1330 0 obj <<
-/D [8370 0 R /XYZ 151.701 578.014 null]
+/D [8357 0 R /XYZ 151.701 578.014 null]
 >> endobj
-8378 0 obj <<
-/D [8370 0 R /XYZ 151.701 540.206 null]
+8365 0 obj <<
+/D [8357 0 R /XYZ 151.701 540.206 null]
 >> endobj
 1334 0 obj <<
-/D [8370 0 R /XYZ 151.701 227.005 null]
+/D [8357 0 R /XYZ 151.701 227.005 null]
 >> endobj
-8379 0 obj <<
-/D [8370 0 R /XYZ 151.701 199.969 null]
+8366 0 obj <<
+/D [8357 0 R /XYZ 151.701 199.969 null]
 >> endobj
-8369 0 obj <<
+8356 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F4 5484 0 R /F15 3700 0 R /F17 3698 0 R /F88 5678 0 R /F72 5679 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8383 0 obj <<
+8370 0 obj <<
 /Length 1828      
 /Filter /FlateDecode
 >>
@@ -38605,27 +41277,27 @@
 â¾øVœÃŒ‹¥¤@†‘„3!ííøøôÍ/ªzD--Óín(Mÿ¢ŸoWÿBàø…
 endstream
 endobj
-8382 0 obj <<
+8369 0 obj <<
 /Type /Page
-/Contents 8383 0 R
-/Resources 8381 0 R
+/Contents 8370 0 R
+/Resources 8368 0 R
 /MediaBox [0 0 612 792]
-/Parent 8380 0 R
+/Parent 8367 0 R
 >> endobj
-8384 0 obj <<
-/D [8382 0 R /XYZ 100.892 685.529 null]
+8371 0 obj <<
+/D [8369 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1338 0 obj <<
-/D [8382 0 R /XYZ 100.892 329.155 null]
+/D [8369 0 R /XYZ 100.892 329.155 null]
 >> endobj
-8385 0 obj <<
-/D [8382 0 R /XYZ 100.892 302.672 null]
+8372 0 obj <<
+/D [8369 0 R /XYZ 100.892 302.672 null]
 >> endobj
-8381 0 obj <<
+8368 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8389 0 obj <<
+8376 0 obj <<
 /Length 1572      
 /Filter /FlateDecode
 >>
@@ -38645,35 +41317,35 @@
 Ôiéd³¾ðŸÌœýyµ8¹=I›l	K.´û Î+7¸’ÓšSRHQ«7ƒáûr³ú»w‡Y
 endstream
 endobj
-8388 0 obj <<
+8375 0 obj <<
 /Type /Page
-/Contents 8389 0 R
-/Resources 8387 0 R
+/Contents 8376 0 R
+/Resources 8374 0 R
 /MediaBox [0 0 612 792]
-/Parent 8380 0 R
-/Annots [ 8386 0 R ]
+/Parent 8367 0 R
+/Annots [ 8373 0 R ]
 >> endobj
-8386 0 obj <<
+8373 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.53 333.052 470.325 344.741]
 /Subtype /Link
 /A << /S /GoTo /D (fdsacls) >>
 >> endobj
-8390 0 obj <<
-/D [8388 0 R /XYZ 151.701 685.529 null]
+8377 0 obj <<
+/D [8375 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1342 0 obj <<
-/D [8388 0 R /XYZ 151.701 399.277 null]
+/D [8375 0 R /XYZ 151.701 399.277 null]
 >> endobj
-8391 0 obj <<
-/D [8388 0 R /XYZ 151.701 369.549 null]
+8378 0 obj <<
+/D [8375 0 R /XYZ 151.701 369.549 null]
 >> endobj
-8387 0 obj <<
+8374 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8395 0 obj <<
+8382 0 obj <<
 /Length 1593      
 /Filter /FlateDecode
 >>
@@ -38686,45 +41358,45 @@
 K7?€Ø”yûg	pac 86¥p:4fK4ÂACp³ÙlÕî÷\úWôi…ËÕZ}ÖYmWpìV0ôˆîʆ™åÈ¿8hˆÜCÊI·Þ íåÚàÎyˆÇÔFlrPFÒ.‰·ƒø0óHs›¡ÔyqØ6<þïeS¤ l¼±çuÐ+UÛ ¨Î"|f Æ{7ã@r©‘: 4¨Ò¨G…R7›;âèvD1o`ë¾åÅcƒ‡­lèˆHŸ˜â)û[ô,TR°}4Ÿ&°Eéâ©jG¦À.¤4‰Bª$àbÜl?­ ÷¦œ9Ènõ\§°CÏ݉tÁ$% Gï`yÒ…Gmo‡z”ø«ßèwOƒ ÉoÎõq‘¡HÝC+äÌ5‘} ;¥j«q•ÏoéõZ×wŸ¸ßÍY,	5v¢tÔX˜D²ß¶÷Xy–/Ìæ*‚‰—ÁD<¿Ž)‰ÁWç^BßÓ³—èH—²;-g÷ˆ™¯W^0t æ…×ôŠ¢Ã¨[J\ýØþ?âþ‘ðÀCøêØ	ë¼^%0¸Ÿ»§€&“Óõ°¼ˆ°ÿQÌ%'ÛÜ>TŽ‚³í\Ÿ\wItÖ›keN6¿ä 9Ûf7w ƒ‹q࣒!ã™b$#qy!ë†*۠ѱŸrùÜ/çÊÐ,do‰4S~|MÅ·iÐ8RN°üÑÃõ¬¹Û)"Yo¥>à³ÉYa£·Ù?<ÿý.Œoύ‘/ss§™eYò?ܹùԝá§îL¾ä•ŸðT„îþ­ÿ"4F‡
 endstream
 endobj
-8394 0 obj <<
+8381 0 obj <<
 /Type /Page
-/Contents 8395 0 R
-/Resources 8393 0 R
+/Contents 8382 0 R
+/Resources 8380 0 R
 /MediaBox [0 0 612 792]
-/Parent 8380 0 R
+/Parent 8367 0 R
 >> endobj
-8396 0 obj <<
-/D [8394 0 R /XYZ 100.892 685.529 null]
+8383 0 obj <<
+/D [8381 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1346 0 obj <<
-/D [8394 0 R /XYZ 100.892 660.623 null]
+/D [8381 0 R /XYZ 100.892 660.623 null]
 >> endobj
-8397 0 obj <<
-/D [8394 0 R /XYZ 100.892 641.897 null]
+8384 0 obj <<
+/D [8381 0 R /XYZ 100.892 641.897 null]
 >> endobj
 1350 0 obj <<
-/D [8394 0 R /XYZ 100.892 493.985 null]
+/D [8381 0 R /XYZ 100.892 493.985 null]
 >> endobj
-8398 0 obj <<
-/D [8394 0 R /XYZ 100.892 465.139 null]
+8385 0 obj <<
+/D [8381 0 R /XYZ 100.892 465.139 null]
 >> endobj
 1354 0 obj <<
-/D [8394 0 R /XYZ 100.892 408.879 null]
+/D [8381 0 R /XYZ 100.892 408.879 null]
 >> endobj
-8399 0 obj <<
-/D [8394 0 R /XYZ 100.892 382.851 null]
+8386 0 obj <<
+/D [8381 0 R /XYZ 100.892 382.851 null]
 >> endobj
-8400 0 obj <<
-/D [8394 0 R /XYZ 100.892 254.409 null]
+8387 0 obj <<
+/D [8381 0 R /XYZ 100.892 254.409 null]
 >> endobj
-8401 0 obj <<
-/D [8394 0 R /XYZ 100.892 231.896 null]
+8388 0 obj <<
+/D [8381 0 R /XYZ 100.892 231.896 null]
 >> endobj
-8393 0 obj <<
+8380 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8404 0 obj <<
+8391 0 obj <<
 /Length 1021      
 /Filter /FlateDecode
 >>
@@ -38743,28 +41415,28 @@
 @KÛ˜!ç*ç2çÏܝ™˜ò¸oÖé}ü/§)§÷
 endstream
 endobj
-8403 0 obj <<
+8390 0 obj <<
 /Type /Page
-/Contents 8404 0 R
-/Resources 8402 0 R
+/Contents 8391 0 R
+/Resources 8389 0 R
 /MediaBox [0 0 612 792]
-/Parent 8380 0 R
+/Parent 8367 0 R
 >> endobj
-8405 0 obj <<
-/D [8403 0 R /XYZ 151.701 685.529 null]
+8392 0 obj <<
+/D [8390 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8406 0 obj <<
-/D [8403 0 R /XYZ 151.701 490.311 null]
+8393 0 obj <<
+/D [8390 0 R /XYZ 151.701 490.311 null]
 >> endobj
-8407 0 obj <<
-/D [8403 0 R /XYZ 151.701 266.903 null]
+8394 0 obj <<
+/D [8390 0 R /XYZ 151.701 266.903 null]
 >> endobj
-8402 0 obj <<
+8389 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F88 5678 0 R /F72 5679 0 R /F53 3738 0 R /F15 3700 0 R /F85 5513 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8410 0 obj <<
+8397 0 obj <<
 /Length 1968      
 /Filter /FlateDecode
 >>
@@ -38790,45 +41462,45 @@
 ¦Ô?Àò“0CK˜¡¬k¬ù:¼ÜÀÚ(µØÛrèch|S¾Ò(—í8¥x €H>£EzšÁ·–¦'/q™¼SwwuµvMR axP`1e¨&•üÁ;r¸ü¬Xj«
 endstream
 endobj
-8409 0 obj <<
+8396 0 obj <<
 /Type /Page
-/Contents 8410 0 R
-/Resources 8408 0 R
+/Contents 8397 0 R
+/Resources 8395 0 R
 /MediaBox [0 0 612 792]
-/Parent 8380 0 R
+/Parent 8367 0 R
 >> endobj
-8411 0 obj <<
-/D [8409 0 R /XYZ 100.892 685.529 null]
+8398 0 obj <<
+/D [8396 0 R /XYZ 100.892 685.529 null]
 >> endobj
-8412 0 obj <<
-/D [8409 0 R /XYZ 100.892 660.623 null]
+8399 0 obj <<
+/D [8396 0 R /XYZ 100.892 660.623 null]
 >> endobj
-8413 0 obj <<
-/D [8409 0 R /XYZ 100.892 476.114 null]
+8400 0 obj <<
+/D [8396 0 R /XYZ 100.892 476.114 null]
 >> endobj
-8414 0 obj <<
-/D [8409 0 R /XYZ 100.892 431.352 null]
+8401 0 obj <<
+/D [8396 0 R /XYZ 100.892 431.352 null]
 >> endobj
-8415 0 obj <<
-/D [8409 0 R /XYZ 128.164 431.929 null]
+8402 0 obj <<
+/D [8396 0 R /XYZ 128.164 431.929 null]
 >> endobj
 1358 0 obj <<
-/D [8409 0 R /XYZ 100.892 388.575 null]
+/D [8396 0 R /XYZ 100.892 388.575 null]
 >> endobj
-8416 0 obj <<
-/D [8409 0 R /XYZ 100.892 363.129 null]
+8403 0 obj <<
+/D [8396 0 R /XYZ 100.892 363.129 null]
 >> endobj
 1362 0 obj <<
-/D [8409 0 R /XYZ 100.892 311.86 null]
+/D [8396 0 R /XYZ 100.892 311.86 null]
 >> endobj
-8417 0 obj <<
-/D [8409 0 R /XYZ 100.892 284.301 null]
+8404 0 obj <<
+/D [8396 0 R /XYZ 100.892 284.301 null]
 >> endobj
-8408 0 obj <<
+8395 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R /F4 5484 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8420 0 obj <<
+8407 0 obj <<
 /Length 1287      
 /Filter /FlateDecode
 >>
@@ -38846,30 +41518,30 @@
 ðå?"Q·°
 endstream
 endobj
-8419 0 obj <<
+8406 0 obj <<
 /Type /Page
-/Contents 8420 0 R
-/Resources 8418 0 R
+/Contents 8407 0 R
+/Resources 8405 0 R
 /MediaBox [0 0 612 792]
-/Parent 8425 0 R
+/Parent 8412 0 R
 >> endobj
-8421 0 obj <<
-/D [8419 0 R /XYZ 151.701 685.529 null]
+8408 0 obj <<
+/D [8406 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8422 0 obj <<
-/D [8419 0 R /XYZ 151.701 573.819 null]
+8409 0 obj <<
+/D [8406 0 R /XYZ 151.701 573.819 null]
 >> endobj
-8423 0 obj <<
-/D [8419 0 R /XYZ 151.701 574.396 null]
+8410 0 obj <<
+/D [8406 0 R /XYZ 151.701 574.396 null]
 >> endobj
-8424 0 obj <<
-/D [8419 0 R /XYZ 151.701 562.441 null]
+8411 0 obj <<
+/D [8406 0 R /XYZ 151.701 562.441 null]
 >> endobj
-8418 0 obj <<
+8405 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F4 5484 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8428 0 obj <<
+8415 0 obj <<
 /Length 2117      
 /Filter /FlateDecode
 >>
@@ -38894,27 +41566,27 @@
 Ò6èÚ‘ÚXðø‘ ㈬›]BÙZ`:Œt¦þGèË}¨´õ±4î|ÛG‰•¶|煏 Þ0ò„kÈƾ‘PiÛñžî"¼l5µÐ¡Àù§¿QP^´>±;Ç	BJËù‹kr	N	_MY=ÿˆ0дAJ¹Ä)j:{ï$€%³ùßUHü%}Ï_–ÿÇ—&‡
 endstream
 endobj
-8427 0 obj <<
+8414 0 obj <<
 /Type /Page
-/Contents 8428 0 R
-/Resources 8426 0 R
+/Contents 8415 0 R
+/Resources 8413 0 R
 /MediaBox [0 0 612 792]
-/Parent 8425 0 R
+/Parent 8412 0 R
 >> endobj
-8429 0 obj <<
-/D [8427 0 R /XYZ 100.892 685.529 null]
+8416 0 obj <<
+/D [8414 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5359 0 obj <<
-/D [8427 0 R /XYZ 100.892 659.13 null]
+/D [8414 0 R /XYZ 100.892 659.13 null]
 >> endobj
-8303 0 obj <<
-/D [8427 0 R /XYZ 100.892 644.381 null]
+8290 0 obj <<
+/D [8414 0 R /XYZ 100.892 644.381 null]
 >> endobj
-8426 0 obj <<
+8413 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8432 0 obj <<
+8419 0 obj <<
 /Length 1143      
 /Filter /FlateDecode
 >>
@@ -38932,27 +41604,27 @@
 ¬'U‡ñZ(ì—¥‘s~MøqW»…
 endstream
 endobj
-8431 0 obj <<
+8418 0 obj <<
 /Type /Page
-/Contents 8432 0 R
-/Resources 8430 0 R
+/Contents 8419 0 R
+/Resources 8417 0 R
 /MediaBox [0 0 612 792]
-/Parent 8425 0 R
+/Parent 8412 0 R
 >> endobj
-8433 0 obj <<
-/D [8431 0 R /XYZ 151.701 685.529 null]
+8420 0 obj <<
+/D [8418 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5360 0 obj <<
-/D [8431 0 R /XYZ 151.701 505.371 null]
+/D [8418 0 R /XYZ 151.701 505.371 null]
 >> endobj
-8392 0 obj <<
-/D [8431 0 R /XYZ 151.701 488.501 null]
+8379 0 obj <<
+/D [8418 0 R /XYZ 151.701 488.501 null]
 >> endobj
-8430 0 obj <<
+8417 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8436 0 obj <<
+8423 0 obj <<
 /Length 1321      
 /Filter /FlateDecode
 >>
@@ -38965,33 +41637,33 @@
 +&Ê›âùÄ3 &Hˆ:v&@d÷ý’‚—pôxŒ\8/ŸølŸŸþбó‹&,áé4X©&[%_O–âb¼ùÿhZ5¿
 endstream
 endobj
-8435 0 obj <<
+8422 0 obj <<
 /Type /Page
-/Contents 8436 0 R
-/Resources 8434 0 R
+/Contents 8423 0 R
+/Resources 8421 0 R
 /MediaBox [0 0 612 792]
-/Parent 8425 0 R
+/Parent 8412 0 R
 >> endobj
-8437 0 obj <<
-/D [8435 0 R /XYZ 100.892 685.529 null]
+8424 0 obj <<
+/D [8422 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1366 0 obj <<
-/D [8435 0 R /XYZ 100.892 660.623 null]
+/D [8422 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3816 0 obj <<
-/D [8435 0 R /XYZ 100.892 472.644 null]
+/D [8422 0 R /XYZ 100.892 472.644 null]
 >> endobj
 1370 0 obj <<
-/D [8435 0 R /XYZ 100.892 412.444 null]
+/D [8422 0 R /XYZ 100.892 412.444 null]
 >> endobj
-8438 0 obj <<
-/D [8435 0 R /XYZ 100.892 383.473 null]
+8425 0 obj <<
+/D [8422 0 R /XYZ 100.892 383.473 null]
 >> endobj
-8434 0 obj <<
+8421 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8441 0 obj <<
+8428 0 obj <<
 /Length 2310      
 /Filter /FlateDecode
 >>
@@ -39017,28 +41689,28 @@
 !œñhzÃÎç±×D«Úo’‡¼ùK¿,Ihc£6>¹®Ðž—ô·˜äÒ@ŸP­Ï¦;—=ïj–ìýøõýÍ®«8˜
 endstream
 endobj
-8440 0 obj <<
+8427 0 obj <<
 /Type /Page
-/Contents 8441 0 R
-/Resources 8439 0 R
+/Contents 8428 0 R
+/Resources 8426 0 R
 /MediaBox [0 0 612 792]
-/Parent 8425 0 R
+/Parent 8412 0 R
 >> endobj
-8442 0 obj <<
-/D [8440 0 R /XYZ 151.701 685.529 null]
+8429 0 obj <<
+/D [8427 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1374 0 obj <<
-/D [8440 0 R /XYZ 151.701 546.62 null]
+/D [8427 0 R /XYZ 151.701 546.62 null]
 >> endobj
-8443 0 obj <<
-/D [8440 0 R /XYZ 151.701 521.324 null]
+8430 0 obj <<
+/D [8427 0 R /XYZ 151.701 521.324 null]
 >> endobj
-8439 0 obj <<
+8426 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8446 0 obj <<
+8433 0 obj <<
 /Length 2070      
 /Filter /FlateDecode
 >>
@@ -39063,27 +41735,27 @@
 o̪ìä‚^†eêe½¢ÿ®bþ;,ÿ3Äù™«‘©‡þßÓJøÿÊâSÎódЇÀˆ“›e:ôDf‚~^V^úÆÞX€­?ý¸­j»à"V:ѳHTI>¹¯Þ¹'¼ëÙ #wÕ-ÔšÉg`ÂŽ9μÏn³’Ëû®ºQî³Ðz0‡ï£‘0Bæñôã©óëI{Íë±Óu1Þj"e<—ßBÔØäÔz&·õìüÔ³Ý0Âãüo Áέ
 endstream
 endobj
-8445 0 obj <<
+8432 0 obj <<
 /Type /Page
-/Contents 8446 0 R
-/Resources 8444 0 R
+/Contents 8433 0 R
+/Resources 8431 0 R
 /MediaBox [0 0 612 792]
-/Parent 8425 0 R
+/Parent 8412 0 R
 >> endobj
-8447 0 obj <<
-/D [8445 0 R /XYZ 100.892 685.529 null]
+8434 0 obj <<
+/D [8432 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1378 0 obj <<
-/D [8445 0 R /XYZ 100.892 582.183 null]
+/D [8432 0 R /XYZ 100.892 582.183 null]
 >> endobj
-8448 0 obj <<
-/D [8445 0 R /XYZ 100.892 553.742 null]
+8435 0 obj <<
+/D [8432 0 R /XYZ 100.892 553.742 null]
 >> endobj
-8444 0 obj <<
+8431 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F17 3698 0 R /F88 5678 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8451 0 obj <<
+8438 0 obj <<
 /Length 2165      
 /Filter /FlateDecode
 >>
@@ -39110,21 +41782,21 @@
 7-Æ1•·ÀäÉbÛ/šªÿ ™JÈ	^_±:üÇ_ž0†à_,jM#Y·ú®ãˆYè/1ñ6c¤š¡š£LN3Ÿ/Á|Ä‡gËõšÉðL lå2K¡¥ÿÔ”ÿ7Aù¿ºI%¨Íùc׿zø?¼êB
 endstream
 endobj
-8450 0 obj <<
+8437 0 obj <<
 /Type /Page
-/Contents 8451 0 R
-/Resources 8449 0 R
+/Contents 8438 0 R
+/Resources 8436 0 R
 /MediaBox [0 0 612 792]
-/Parent 8453 0 R
+/Parent 8440 0 R
 >> endobj
-8452 0 obj <<
-/D [8450 0 R /XYZ 151.701 685.529 null]
+8439 0 obj <<
+/D [8437 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8449 0 obj <<
+8436 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8456 0 obj <<
+8443 0 obj <<
 /Length 2284      
 /Filter /FlateDecode
 >>
@@ -39147,21 +41819,21 @@
 תAÂÆø:(Ⳙ ôý#ÊñD§œŽpöÍVF}›% „Ì”ÂM¹(æÍb]ÚÛ|\<|¬É~ëõ…J)TîéäÐáfuÅC5…ù%àjb‚ ժ³Œîû̪N0°h°&kÇ='ý»ï,™¨%×K*ÐBܦà€ÐM¨€NÎãøééá;Éw
 endstream
 endobj
-8455 0 obj <<
+8442 0 obj <<
 /Type /Page
-/Contents 8456 0 R
-/Resources 8454 0 R
+/Contents 8443 0 R
+/Resources 8441 0 R
 /MediaBox [0 0 612 792]
-/Parent 8453 0 R
+/Parent 8440 0 R
 >> endobj
-8457 0 obj <<
-/D [8455 0 R /XYZ 100.892 685.529 null]
+8444 0 obj <<
+/D [8442 0 R /XYZ 100.892 685.529 null]
 >> endobj
-8454 0 obj <<
+8441 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8460 0 obj <<
+8447 0 obj <<
 /Length 1748      
 /Filter /FlateDecode
 >>
@@ -39189,39 +41861,39 @@
 3—Ãõ—¹Š¯Jg˜1v:½õFž»xˆÀX\ŽÏ§‘¡ËWÌŽ…†þ\Àrt{)P×ívÎXûÈ §?EæïËÛÍ?È1¾¹
 endstream
 endobj
-8459 0 obj <<
+8446 0 obj <<
 /Type /Page
-/Contents 8460 0 R
-/Resources 8458 0 R
+/Contents 8447 0 R
+/Resources 8445 0 R
 /MediaBox [0 0 612 792]
-/Parent 8453 0 R
+/Parent 8440 0 R
 >> endobj
-8461 0 obj <<
-/D [8459 0 R /XYZ 151.701 685.529 null]
+8448 0 obj <<
+/D [8446 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1382 0 obj <<
-/D [8459 0 R /XYZ 151.701 600.786 null]
+/D [8446 0 R /XYZ 151.701 600.786 null]
 >> endobj
-8462 0 obj <<
-/D [8459 0 R /XYZ 151.701 571.957 null]
+8449 0 obj <<
+/D [8446 0 R /XYZ 151.701 571.957 null]
 >> endobj
 1386 0 obj <<
-/D [8459 0 R /XYZ 151.701 451.745 null]
+/D [8446 0 R /XYZ 151.701 451.745 null]
 >> endobj
-8463 0 obj <<
-/D [8459 0 R /XYZ 151.701 422.916 null]
+8450 0 obj <<
+/D [8446 0 R /XYZ 151.701 422.916 null]
 >> endobj
 1390 0 obj <<
-/D [8459 0 R /XYZ 151.701 262.057 null]
+/D [8446 0 R /XYZ 151.701 262.057 null]
 >> endobj
-8464 0 obj <<
-/D [8459 0 R /XYZ 151.701 235.358 null]
+8451 0 obj <<
+/D [8446 0 R /XYZ 151.701 235.358 null]
 >> endobj
-8458 0 obj <<
+8445 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8467 0 obj <<
+8454 0 obj <<
 /Length 1982      
 /Filter /FlateDecode
 >>
@@ -39239,39 +41911,39 @@
 ©¬Íÿ‚ùñíýêoGïOç
 endstream
 endobj
-8466 0 obj <<
+8453 0 obj <<
 /Type /Page
-/Contents 8467 0 R
-/Resources 8465 0 R
+/Contents 8454 0 R
+/Resources 8452 0 R
 /MediaBox [0 0 612 792]
-/Parent 8453 0 R
+/Parent 8440 0 R
 >> endobj
-8468 0 obj <<
-/D [8466 0 R /XYZ 100.892 685.529 null]
+8455 0 obj <<
+/D [8453 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1394 0 obj <<
-/D [8466 0 R /XYZ 100.892 660.623 null]
+/D [8453 0 R /XYZ 100.892 660.623 null]
 >> endobj
-8469 0 obj <<
-/D [8466 0 R /XYZ 100.892 641.288 null]
+8456 0 obj <<
+/D [8453 0 R /XYZ 100.892 641.288 null]
 >> endobj
 1398 0 obj <<
-/D [8466 0 R /XYZ 100.892 450.721 null]
+/D [8453 0 R /XYZ 100.892 450.721 null]
 >> endobj
-8470 0 obj <<
-/D [8466 0 R /XYZ 100.892 423.284 null]
+8457 0 obj <<
+/D [8453 0 R /XYZ 100.892 423.284 null]
 >> endobj
 1402 0 obj <<
-/D [8466 0 R /XYZ 100.892 308.096 null]
+/D [8453 0 R /XYZ 100.892 308.096 null]
 >> endobj
-8471 0 obj <<
-/D [8466 0 R /XYZ 100.892 280.659 null]
+8458 0 obj <<
+/D [8453 0 R /XYZ 100.892 280.659 null]
 >> endobj
-8465 0 obj <<
+8452 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8474 0 obj <<
+8461 0 obj <<
 /Length 2071      
 /Filter /FlateDecode
 >>
@@ -39291,39 +41963,39 @@
 Z §ÌÞå_ ¿°x<l<Êô¸Ðö'þAúû·ï„~ü~½ßüTð–”
 endstream
 endobj
-8473 0 obj <<
+8460 0 obj <<
 /Type /Page
-/Contents 8474 0 R
-/Resources 8472 0 R
+/Contents 8461 0 R
+/Resources 8459 0 R
 /MediaBox [0 0 612 792]
-/Parent 8453 0 R
+/Parent 8440 0 R
 >> endobj
-8475 0 obj <<
-/D [8473 0 R /XYZ 151.701 685.529 null]
+8462 0 obj <<
+/D [8460 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1406 0 obj <<
-/D [8473 0 R /XYZ 151.701 660.623 null]
+/D [8460 0 R /XYZ 151.701 660.623 null]
 >> endobj
-8476 0 obj <<
-/D [8473 0 R /XYZ 151.701 644.027 null]
+8463 0 obj <<
+/D [8460 0 R /XYZ 151.701 644.027 null]
 >> endobj
 1410 0 obj <<
-/D [8473 0 R /XYZ 151.701 430.335 null]
+/D [8460 0 R /XYZ 151.701 430.335 null]
 >> endobj
-8477 0 obj <<
-/D [8473 0 R /XYZ 151.701 404.068 null]
+8464 0 obj <<
+/D [8460 0 R /XYZ 151.701 404.068 null]
 >> endobj
 1414 0 obj <<
-/D [8473 0 R /XYZ 151.701 242.943 null]
+/D [8460 0 R /XYZ 151.701 242.943 null]
 >> endobj
-8478 0 obj <<
-/D [8473 0 R /XYZ 151.701 214.554 null]
+8465 0 obj <<
+/D [8460 0 R /XYZ 151.701 214.554 null]
 >> endobj
-8472 0 obj <<
+8459 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8481 0 obj <<
+8468 0 obj <<
 /Length 2198      
 /Filter /FlateDecode
 >>
@@ -39349,27 +42021,27 @@
 rŒÅm+½<z at 5”§ˆ¡VókŸµå3ã‚ëù0x_D"LØÇÜW˜ó Ûù‘Ðq˜Ê}t+õpAÏü-ŸŸ-¹±ß'Êyk2Iƒy|€\ôJϝýò칡Ýõ¥Ëo‚ØtK”ƒˆD<Ž®La??Óúÿ/¯»ÿKKï
 endstream
 endobj
-8480 0 obj <<
+8467 0 obj <<
 /Type /Page
-/Contents 8481 0 R
-/Resources 8479 0 R
+/Contents 8468 0 R
+/Resources 8466 0 R
 /MediaBox [0 0 612 792]
-/Parent 8453 0 R
+/Parent 8440 0 R
 >> endobj
-8482 0 obj <<
-/D [8480 0 R /XYZ 100.892 685.529 null]
+8469 0 obj <<
+/D [8467 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1418 0 obj <<
-/D [8480 0 R /XYZ 100.892 413.167 null]
+/D [8467 0 R /XYZ 100.892 413.167 null]
 >> endobj
-8483 0 obj <<
-/D [8480 0 R /XYZ 100.892 383.727 null]
+8470 0 obj <<
+/D [8467 0 R /XYZ 100.892 383.727 null]
 >> endobj
-8479 0 obj <<
+8466 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8486 0 obj <<
+8473 0 obj <<
 /Length 2140      
 /Filter /FlateDecode
 >>
@@ -39394,33 +42066,33 @@
 ¾fRßèáÁ;UF=HÞ¹üWj!~ÉGƒíÜÌl g^Õs³ås³M†û–ÒÍ£ZÝbÖR4Òߏîï—ò…¿ šÑ+ ÿJ‘æÿî%Âß&’™BFm(™™]ZxDžˆï/æúý#þÊã»û«ÿTŠµ²
 endstream
 endobj
-8485 0 obj <<
+8472 0 obj <<
 /Type /Page
-/Contents 8486 0 R
-/Resources 8484 0 R
+/Contents 8473 0 R
+/Resources 8471 0 R
 /MediaBox [0 0 612 792]
-/Parent 8490 0 R
+/Parent 8477 0 R
 >> endobj
-8487 0 obj <<
-/D [8485 0 R /XYZ 151.701 685.529 null]
+8474 0 obj <<
+/D [8472 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1422 0 obj <<
-/D [8485 0 R /XYZ 151.701 242.94 null]
+/D [8472 0 R /XYZ 151.701 242.94 null]
 >> endobj
-8488 0 obj <<
-/D [8485 0 R /XYZ 151.701 216.024 null]
+8475 0 obj <<
+/D [8472 0 R /XYZ 151.701 216.024 null]
 >> endobj
 1426 0 obj <<
-/D [8485 0 R /XYZ 151.701 169.033 null]
+/D [8472 0 R /XYZ 151.701 169.033 null]
 >> endobj
-8489 0 obj <<
-/D [8485 0 R /XYZ 151.701 140.19 null]
+8476 0 obj <<
+/D [8472 0 R /XYZ 151.701 140.19 null]
 >> endobj
-8484 0 obj <<
+8471 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8494 0 obj <<
+8481 0 obj <<
 /Length 2621      
 /Filter /FlateDecode
 >>
@@ -39449,51 +42121,51 @@
 â7§ÉÞ íùŸçî+4IÔA#»¬ZM"}oÁUŽ¢‚„åŒM˜A¹Âö¶äk–n²¾÷+|…Ãvi߀‰OûÅ0íÓà­~GãóªÊÇûV“q	¢ãÿÛ•q
 endstream
 endobj
-8493 0 obj <<
+8480 0 obj <<
 /Type /Page
-/Contents 8494 0 R
-/Resources 8492 0 R
+/Contents 8481 0 R
+/Resources 8479 0 R
 /MediaBox [0 0 612 792]
-/Parent 8490 0 R
+/Parent 8477 0 R
 >> endobj
-8495 0 obj <<
-/D [8493 0 R /XYZ 100.892 685.529 null]
+8482 0 obj <<
+/D [8480 0 R /XYZ 100.892 685.529 null]
 >> endobj
-8496 0 obj <<
-/D [8493 0 R /XYZ 100.892 660.623 null]
+8483 0 obj <<
+/D [8480 0 R /XYZ 100.892 660.623 null]
 >> endobj
-8497 0 obj <<
-/D [8493 0 R /XYZ 100.892 653.25 null]
+8484 0 obj <<
+/D [8480 0 R /XYZ 100.892 653.25 null]
 >> endobj
-8498 0 obj <<
-/D [8493 0 R /XYZ 100.892 641.295 null]
+8485 0 obj <<
+/D [8480 0 R /XYZ 100.892 641.295 null]
 >> endobj
-8499 0 obj <<
-/D [8493 0 R /XYZ 100.892 629.34 null]
+8486 0 obj <<
+/D [8480 0 R /XYZ 100.892 629.34 null]
 >> endobj
-8500 0 obj <<
-/D [8493 0 R /XYZ 100.892 542.672 null]
+8487 0 obj <<
+/D [8480 0 R /XYZ 100.892 542.672 null]
 >> endobj
-8501 0 obj <<
-/D [8493 0 R /XYZ 100.892 543.249 null]
+8488 0 obj <<
+/D [8480 0 R /XYZ 100.892 543.249 null]
 >> endobj
 1430 0 obj <<
-/D [8493 0 R /XYZ 100.892 456.163 null]
+/D [8480 0 R /XYZ 100.892 456.163 null]
 >> endobj
-8502 0 obj <<
-/D [8493 0 R /XYZ 100.892 429.48 null]
+8489 0 obj <<
+/D [8480 0 R /XYZ 100.892 429.48 null]
 >> endobj
-8503 0 obj <<
-/D [8493 0 R /XYZ 100.892 279.819 null]
+8490 0 obj <<
+/D [8480 0 R /XYZ 100.892 279.819 null]
 >> endobj
-8504 0 obj <<
-/D [8493 0 R /XYZ 100.892 280.396 null]
+8491 0 obj <<
+/D [8480 0 R /XYZ 100.892 280.396 null]
 >> endobj
-8492 0 obj <<
+8479 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F4 5484 0 R /F15 3700 0 R /F53 3738 0 R /F51 3736 0 R /F17 3698 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8508 0 obj <<
+8495 0 obj <<
 /Length 2736      
 /Filter /FlateDecode
 >>
@@ -39519,90 +42191,90 @@
 B±LïéUZ“üØèÇ«¼>>îgÚH!Tö'QÁŸ‚ßhm at 2Ù3­ž+Ø%vôÒÁeû^°
 endstream
 endobj
-8507 0 obj <<
+8494 0 obj <<
 /Type /Page
-/Contents 8508 0 R
-/Resources 8506 0 R
+/Contents 8495 0 R
+/Resources 8493 0 R
 /MediaBox [0 0 612 792]
-/Parent 8490 0 R
-/Annots [ 8491 0 R 8505 0 R ]
+/Parent 8477 0 R
+/Annots [ 8478 0 R 8492 0 R ]
 >> endobj
-8491 0 obj <<
+8478 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.038 632.997 329.212 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (far1) >>
 >> endobj
-8505 0 obj <<
+8492 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.038 326.206 329.212 337.895]
 /Subtype /Link
 /A << /S /GoTo /D (far3) >>
 >> endobj
-8509 0 obj <<
-/D [8507 0 R /XYZ 151.701 685.529 null]
+8496 0 obj <<
+/D [8494 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5089 0 obj <<
-/D [8507 0 R /XYZ 151.701 621.259 null]
+/D [8494 0 R /XYZ 151.701 621.259 null]
 >> endobj
-8510 0 obj <<
-/D [8507 0 R /XYZ 151.701 604.389 null]
+8497 0 obj <<
+/D [8494 0 R /XYZ 151.701 604.389 null]
 >> endobj
-8511 0 obj <<
-/D [8507 0 R /XYZ 151.701 598.412 null]
+8498 0 obj <<
+/D [8494 0 R /XYZ 151.701 598.412 null]
 >> endobj
-8512 0 obj <<
-/D [8507 0 R /XYZ 151.701 604.688 null]
+8499 0 obj <<
+/D [8494 0 R /XYZ 151.701 604.688 null]
 >> endobj
-8513 0 obj <<
-/D [8507 0 R /XYZ 151.701 592.733 null]
+8500 0 obj <<
+/D [8494 0 R /XYZ 151.701 592.733 null]
 >> endobj
-8514 0 obj <<
-/D [8507 0 R /XYZ 151.701 580.778 null]
+8501 0 obj <<
+/D [8494 0 R /XYZ 151.701 580.778 null]
 >> endobj
-8515 0 obj <<
-/D [8507 0 R /XYZ 151.701 568.823 null]
+8502 0 obj <<
+/D [8494 0 R /XYZ 151.701 568.823 null]
 >> endobj
-8516 0 obj <<
-/D [8507 0 R /XYZ 151.701 455.563 null]
+8503 0 obj <<
+/D [8494 0 R /XYZ 151.701 455.563 null]
 >> endobj
-8517 0 obj <<
-/D [8507 0 R /XYZ 151.701 454.019 null]
+8504 0 obj <<
+/D [8494 0 R /XYZ 151.701 454.019 null]
 >> endobj
 5090 0 obj <<
-/D [8507 0 R /XYZ 151.701 314.468 null]
+/D [8494 0 R /XYZ 151.701 314.468 null]
 >> endobj
-8518 0 obj <<
-/D [8507 0 R /XYZ 151.701 297.598 null]
+8505 0 obj <<
+/D [8494 0 R /XYZ 151.701 297.598 null]
 >> endobj
-8519 0 obj <<
-/D [8507 0 R /XYZ 151.701 291.62 null]
+8506 0 obj <<
+/D [8494 0 R /XYZ 151.701 291.62 null]
 >> endobj
-8520 0 obj <<
-/D [8507 0 R /XYZ 151.701 297.897 null]
+8507 0 obj <<
+/D [8494 0 R /XYZ 151.701 297.897 null]
 >> endobj
-8521 0 obj <<
-/D [8507 0 R /XYZ 151.701 285.942 null]
+8508 0 obj <<
+/D [8494 0 R /XYZ 151.701 285.942 null]
 >> endobj
-8522 0 obj <<
-/D [8507 0 R /XYZ 151.701 273.986 null]
+8509 0 obj <<
+/D [8494 0 R /XYZ 151.701 273.986 null]
 >> endobj
-8523 0 obj <<
-/D [8507 0 R /XYZ 151.701 262.031 null]
+8510 0 obj <<
+/D [8494 0 R /XYZ 151.701 262.031 null]
 >> endobj
 1434 0 obj <<
-/D [8507 0 R /XYZ 151.701 210.431 null]
+/D [8494 0 R /XYZ 151.701 210.431 null]
 >> endobj
-8524 0 obj <<
-/D [8507 0 R /XYZ 151.701 180.477 null]
+8511 0 obj <<
+/D [8494 0 R /XYZ 151.701 180.477 null]
 >> endobj
-8506 0 obj <<
+8493 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F4 5484 0 R /F51 3736 0 R /F59 4373 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8527 0 obj <<
+8514 0 obj <<
 /Length 2040      
 /Filter /FlateDecode
 >>
@@ -39626,22 +42298,22 @@
 =Àû”þó Ö÷ôìGUE?Öe#l«”ÑItf—Ëìô?|¢ò
 endstream
 endobj
-8526 0 obj <<
+8513 0 obj <<
 /Type /Page
-/Contents 8527 0 R
-/Resources 8525 0 R
+/Contents 8514 0 R
+/Resources 8512 0 R
 /MediaBox [0 0 612 792]
-/Parent 8490 0 R
+/Parent 8477 0 R
 >> endobj
-8528 0 obj <<
-/D [8526 0 R /XYZ 100.892 685.529 null]
+8515 0 obj <<
+/D [8513 0 R /XYZ 100.892 685.529 null]
 >> endobj
-8525 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F29 5413 0 R /F88 5678 0 R /F72 5679 0 R /F30 5441 0 R /F60 6223 0 R >>
+8512 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F29 5413 0 R /F88 5678 0 R /F72 5679 0 R /F30 5441 0 R /F60 6222 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8531 0 obj <<
+8518 0 obj <<
 /Length 1069      
 /Filter /FlateDecode
 >>
@@ -39658,22 +42330,22 @@
 Ž>'p¯ÁhòG üyR!0<H®ßÚ,Œ½…¾ÆvšÂe†¶ÒFd_)p–w†U´fKŠfÙ¾§±{O-‚++;ÞUåTÎê{ÖÀËÈcr %öoB7Êúè86ÙîÅÆ<†úë¿ô )#X‡zîz,ËsÀ©L·»~\Ø}«]#ƒs¢îu†*gO›vWð>˜T­-À¢l/CýÆ´lûïÜŽÐÂÿÂ+ +
 endstream
 endobj
-8530 0 obj <<
+8517 0 obj <<
 /Type /Page
-/Contents 8531 0 R
-/Resources 8529 0 R
+/Contents 8518 0 R
+/Resources 8516 0 R
 /MediaBox [0 0 612 792]
-/Parent 8490 0 R
+/Parent 8477 0 R
 >> endobj
-8532 0 obj <<
-/D [8530 0 R /XYZ 151.701 685.529 null]
+8519 0 obj <<
+/D [8517 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8529 0 obj <<
+8516 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R /F15 3700 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8535 0 obj <<
+8522 0 obj <<
 /Length 1450      
 /Filter /FlateDecode
 >>
@@ -39694,27 +42366,27 @@
 ýP„¾†°è,<̍e)‡!‡–/#(²u^ö¬‰ùm|?·t[ô:Åêb–/Qb­8Ù°^¥GŒá¸	¶÷—¤e¸A±ã]|˜vNÞ÷!ˆ¡.ëZ½¼ðƐ]»Ó–Fxéÿ0ÊE
 endstream
 endobj
-8534 0 obj <<
+8521 0 obj <<
 /Type /Page
-/Contents 8535 0 R
-/Resources 8533 0 R
+/Contents 8522 0 R
+/Resources 8520 0 R
 /MediaBox [0 0 612 792]
-/Parent 8490 0 R
+/Parent 8477 0 R
 >> endobj
-8536 0 obj <<
-/D [8534 0 R /XYZ 100.892 685.529 null]
+8523 0 obj <<
+/D [8521 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1438 0 obj <<
-/D [8534 0 R /XYZ 100.892 290.103 null]
+/D [8521 0 R /XYZ 100.892 290.103 null]
 >> endobj
-8537 0 obj <<
-/D [8534 0 R /XYZ 100.892 263.088 null]
+8524 0 obj <<
+/D [8521 0 R /XYZ 100.892 263.088 null]
 >> endobj
-8533 0 obj <<
+8520 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F51 3736 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8540 0 obj <<
+8527 0 obj <<
 /Length 1114      
 /Filter /FlateDecode
 >>
@@ -39734,27 +42406,27 @@
 *[}yO‘jwmIv¿*©1oÚµ@Û¤^7<²\«³FÐÜm<vÑB°Óä,=Ÿ^Œ›¢¿{å
 endstream
 endobj
-8539 0 obj <<
+8526 0 obj <<
 /Type /Page
-/Contents 8540 0 R
-/Resources 8538 0 R
+/Contents 8527 0 R
+/Resources 8525 0 R
 /MediaBox [0 0 612 792]
-/Parent 8543 0 R
+/Parent 8530 0 R
 >> endobj
-8541 0 obj <<
-/D [8539 0 R /XYZ 151.701 685.529 null]
+8528 0 obj <<
+/D [8526 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1442 0 obj <<
-/D [8539 0 R /XYZ 151.701 660.623 null]
+/D [8526 0 R /XYZ 151.701 660.623 null]
 >> endobj
-8542 0 obj <<
-/D [8539 0 R /XYZ 151.701 644.027 null]
+8529 0 obj <<
+/D [8526 0 R /XYZ 151.701 644.027 null]
 >> endobj
-8538 0 obj <<
+8525 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8547 0 obj <<
+8534 0 obj <<
 /Length 2009      
 /Filter /FlateDecode
 >>
@@ -39777,33 +42449,33 @@
 bquŽ¨.l÷µ±Žïé™èúUúô0%nÀÄòrY­=ȵ²üpïÞDߘ)ôŸ^Û´?ÊÚ²EÇË‹"= {§ÆºÃtåRl¾ÕŠíEa3_÷½¢‡0p!·TòÿQþÉQ>7]P& *“5 z5üìì®|'@D’⻘€væE I^ûp40Â_ÇvÂÀ¶êÒ…ˆô0À3$¿½#s.Â8rïU¦_üq9Gºø;…s¸Œ§m®Œ9ì,ïÖÂOëra)Q ƒóM'ãÒþûá¸ù¤?ƒ
 endstream
 endobj
-8546 0 obj <<
+8533 0 obj <<
 /Type /Page
-/Contents 8547 0 R
-/Resources 8545 0 R
+/Contents 8534 0 R
+/Resources 8532 0 R
 /MediaBox [0 0 612 792]
-/Parent 8543 0 R
+/Parent 8530 0 R
 >> endobj
-8548 0 obj <<
-/D [8546 0 R /XYZ 100.892 685.529 null]
+8535 0 obj <<
+/D [8533 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1446 0 obj <<
-/D [8546 0 R /XYZ 100.892 660.623 null]
+/D [8533 0 R /XYZ 100.892 660.623 null]
 >> endobj
-8549 0 obj <<
-/D [8546 0 R /XYZ 100.892 638.691 null]
+8536 0 obj <<
+/D [8533 0 R /XYZ 100.892 638.691 null]
 >> endobj
 1450 0 obj <<
-/D [8546 0 R /XYZ 100.892 459.109 null]
+/D [8533 0 R /XYZ 100.892 459.109 null]
 >> endobj
-8550 0 obj <<
-/D [8546 0 R /XYZ 100.892 429.626 null]
+8537 0 obj <<
+/D [8533 0 R /XYZ 100.892 429.626 null]
 >> endobj
-8545 0 obj <<
+8532 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8557 0 obj <<
+8544 0 obj <<
 /Length 1829      
 /Filter /FlateDecode
 >>
@@ -39817,58 +42489,58 @@
 ,Î}*üXðˆ×ò´ï/zÈçyÿ¤XàA~FÅ{	 ¦P“^Œ^L ðOuÚlîr€È;Ô£¿*àÿ*ø5€_ê"ž?pÂßG}<¹é ~þÃßËÙ«2Q"õ×þ®J­„NÿVé_ªŠ ]Y–Rv¦FËSØ‹O†Kh!wā-‘¨a>5¥ïN4\¾ÈŽÙ3!Ólú×¾†½{´\®üˆ+¨÷Š®ßÜqò"N½ª˜d|Ï:( Pà‰<8‡ç’“ÚòŸêª»q¿‡	^ì&¤ˆ²Û-ŸÔÕã»Â÷ECrÀiž|Ý’BÔ±%úÿ·dBñ¿±äÀ{ÿ˜ý}€ 
 endstream
 endobj
-8556 0 obj <<
+8543 0 obj <<
 /Type /Page
-/Contents 8557 0 R
-/Resources 8555 0 R
+/Contents 8544 0 R
+/Resources 8542 0 R
 /MediaBox [0 0 612 792]
-/Parent 8543 0 R
-/Annots [ 8544 0 R 8551 0 R 8552 0 R ]
+/Parent 8530 0 R
+/Annots [ 8531 0 R 8538 0 R 8539 0 R ]
 >> endobj
-8544 0 obj <<
+8531 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 138.879 298.842 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(https://bugzilla.samba.org)>>
 >> endobj
-8551 0 obj <<
+8538 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 127.92 360.037 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://support.microsoft.com/?id=812937)>>
 >> endobj
-8552 0 obj <<
+8539 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 360.037 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://support.microsoft.com/?id=811492)>>
 >> endobj
-8558 0 obj <<
-/D [8556 0 R /XYZ 151.701 685.529 null]
+8545 0 obj <<
+/D [8543 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1454 0 obj <<
-/D [8556 0 R /XYZ 151.701 507.983 null]
+/D [8543 0 R /XYZ 151.701 507.983 null]
 >> endobj
-8559 0 obj <<
-/D [8556 0 R /XYZ 151.701 480.689 null]
+8546 0 obj <<
+/D [8543 0 R /XYZ 151.701 480.689 null]
 >> endobj
 1458 0 obj <<
-/D [8556 0 R /XYZ 151.701 321.443 null]
+/D [8543 0 R /XYZ 151.701 321.443 null]
 >> endobj
-8560 0 obj <<
-/D [8556 0 R /XYZ 151.701 293.543 null]
+8547 0 obj <<
+/D [8543 0 R /XYZ 151.701 293.543 null]
 >> endobj
 1462 0 obj <<
-/D [8556 0 R /XYZ 151.701 241.126 null]
+/D [8543 0 R /XYZ 151.701 241.126 null]
 >> endobj
-8561 0 obj <<
-/D [8556 0 R /XYZ 151.701 213.226 null]
+8548 0 obj <<
+/D [8543 0 R /XYZ 151.701 213.226 null]
 >> endobj
-8555 0 obj <<
+8542 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F29 5413 0 R /F17 3698 0 R /F53 3738 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8567 0 obj <<
+8554 0 obj <<
 /Length 1104      
 /Filter /FlateDecode
 >>
@@ -39886,58 +42558,58 @@
 Û”pû>5pO5놭_õ?³ä÷§~%nÄó™XUÜ#À¼x&û±ø‹3±/ÉÓù™Löº‡+Œÿ96G¼
 endstream
 endobj
-8566 0 obj <<
+8553 0 obj <<
 /Type /Page
-/Contents 8567 0 R
-/Resources 8565 0 R
+/Contents 8554 0 R
+/Resources 8552 0 R
 /MediaBox [0 0 612 792]
-/Parent 8543 0 R
-/Annots [ 8553 0 R 8554 0 R 8562 0 R 8563 0 R 8564 0 R ]
+/Parent 8530 0 R
+/Annots [ 8540 0 R 8541 0 R 8549 0 R 8550 0 R 8551 0 R ]
 >> endobj
-8553 0 obj <<
+8540 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 160.797 262.155 173.748]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://support.microsoft.com/)>>
 >> endobj
-8554 0 obj <<
+8541 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 149.838 224.496 162.789]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.samba.org/)>>
 >> endobj
-8562 0 obj <<
+8549 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 138.879 309.228 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://support.microsoft.com/?id=224992)>>
 >> endobj
-8563 0 obj <<
+8550 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 127.92 309.228 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://support.microsoft.com/?id=296264)>>
 >> endobj
-8564 0 obj <<
+8551 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 309.228 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://support.microsoft.com/?id=129202)>>
 >> endobj
-8568 0 obj <<
-/D [8566 0 R /XYZ 100.892 685.529 null]
+8555 0 obj <<
+/D [8553 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1466 0 obj <<
-/D [8566 0 R /XYZ 100.892 660.623 null]
+/D [8553 0 R /XYZ 100.892 660.623 null]
 >> endobj
-8569 0 obj <<
-/D [8566 0 R /XYZ 100.892 638.691 null]
+8556 0 obj <<
+/D [8553 0 R /XYZ 100.892 638.691 null]
 >> endobj
-8565 0 obj <<
+8552 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F29 5413 0 R /F53 3738 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8572 0 obj <<
+8559 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -39945,20 +42617,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-8571 0 obj <<
+8558 0 obj <<
 /Type /Page
-/Contents 8572 0 R
-/Resources 8570 0 R
+/Contents 8559 0 R
+/Resources 8557 0 R
 /MediaBox [0 0 612 792]
-/Parent 8543 0 R
+/Parent 8530 0 R
 >> endobj
-8573 0 obj <<
-/D [8571 0 R /XYZ 151.701 685.529 null]
+8560 0 obj <<
+/D [8558 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8570 0 obj <<
+8557 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-8576 0 obj <<
+8563 0 obj <<
 /Length 1556      
 /Filter /FlateDecode
 >>
@@ -39979,39 +42651,39 @@
 ã
 endstream
 endobj
-8575 0 obj <<
+8562 0 obj <<
 /Type /Page
-/Contents 8576 0 R
-/Resources 8574 0 R
+/Contents 8563 0 R
+/Resources 8561 0 R
 /MediaBox [0 0 612 792]
-/Parent 8543 0 R
+/Parent 8530 0 R
 >> endobj
-8577 0 obj <<
-/D [8575 0 R /XYZ 100.892 685.529 null]
+8564 0 obj <<
+/D [8562 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1470 0 obj <<
-/D [8575 0 R /XYZ 100.892 660.623 null]
+/D [8562 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3817 0 obj <<
-/D [8575 0 R /XYZ 100.892 507.104 null]
+/D [8562 0 R /XYZ 100.892 507.104 null]
 >> endobj
 1474 0 obj <<
-/D [8575 0 R /XYZ 100.892 507.104 null]
+/D [8562 0 R /XYZ 100.892 507.104 null]
 >> endobj
-8578 0 obj <<
-/D [8575 0 R /XYZ 100.892 478.298 null]
+8565 0 obj <<
+/D [8562 0 R /XYZ 100.892 478.298 null]
 >> endobj
 1478 0 obj <<
-/D [8575 0 R /XYZ 100.892 183.952 null]
+/D [8562 0 R /XYZ 100.892 183.952 null]
 >> endobj
-8579 0 obj <<
-/D [8575 0 R /XYZ 100.892 155.146 null]
+8566 0 obj <<
+/D [8562 0 R /XYZ 100.892 155.146 null]
 >> endobj
-8574 0 obj <<
+8561 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8583 0 obj <<
+8570 0 obj <<
 /Length 2536      
 /Filter /FlateDecode
 >>
@@ -40039,54 +42711,54 @@
 Þ{1Ù3.šË±4ð¿Ö>DF8,5‚2Rõdד	˜`ö<®÷ý´¾åz'Š?ìzg¤~Ìõ~œ¯Á]žAžÖŒëAí’¢ËPËÇöî,5yŠ½ëÇöž²½'{?	ˍ`ªÿo:$Ï
 endstream
 endobj
-8582 0 obj <<
+8569 0 obj <<
 /Type /Page
-/Contents 8583 0 R
-/Resources 8581 0 R
+/Contents 8570 0 R
+/Resources 8568 0 R
 /MediaBox [0 0 612 792]
-/Parent 8591 0 R
-/Annots [ 8580 0 R 8586 0 R ]
+/Parent 8578 0 R
+/Annots [ 8567 0 R 8573 0 R ]
 >> endobj
-8580 0 obj <<
+8567 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [283.493 448.679 511.352 460.369]
 /Subtype /Link
 /A << /S /GoTo /D (AccessControls) >>
 >> endobj
-8586 0 obj <<
+8573 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 437.251 198.546 446.82]
 /Subtype /Link
 /A << /S /GoTo /D (AccessControls) >>
 >> endobj
-8584 0 obj <<
-/D [8582 0 R /XYZ 151.701 685.529 null]
+8571 0 obj <<
+/D [8569 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1482 0 obj <<
-/D [8582 0 R /XYZ 151.701 420.706 null]
+/D [8569 0 R /XYZ 151.701 420.706 null]
 >> endobj
-8587 0 obj <<
-/D [8582 0 R /XYZ 151.701 377.91 null]
+8574 0 obj <<
+/D [8569 0 R /XYZ 151.701 377.91 null]
 >> endobj
 1486 0 obj <<
-/D [8582 0 R /XYZ 151.701 286.781 null]
+/D [8569 0 R /XYZ 151.701 286.781 null]
 >> endobj
-8588 0 obj <<
-/D [8582 0 R /XYZ 151.701 260.15 null]
+8575 0 obj <<
+/D [8569 0 R /XYZ 151.701 260.15 null]
 >> endobj
-8589 0 obj <<
-/D [8582 0 R /XYZ 151.701 144.578 null]
+8576 0 obj <<
+/D [8569 0 R /XYZ 151.701 144.578 null]
 >> endobj
-8590 0 obj <<
-/D [8582 0 R /XYZ 151.701 145.155 null]
+8577 0 obj <<
+/D [8569 0 R /XYZ 151.701 145.155 null]
 >> endobj
-8581 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R /F96 8585 0 R /F17 3698 0 R /F53 3738 0 R /F4 5484 0 R /F51 3736 0 R /F52 3737 0 R >>
+8568 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R /F96 8572 0 R /F17 3698 0 R /F53 3738 0 R /F4 5484 0 R /F51 3736 0 R /F52 3737 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8594 0 obj <<
+8581 0 obj <<
 /Length 2671      
 /Filter /FlateDecode
 >>
@@ -40118,51 +42790,51 @@
 GØ<#«Áw4€¹Ùóõc›Q\]Š¹¡Úd¬Š¶x÷ˆpiI	 º}S­¹EÇu&áSFû¬ßÌ“èR™™i}° 6H-dGj,ë|^Œ™Õ*D´oy­°Ü*kÆá"q‰R=Cíåñf	㥏¶EµïøuÍwʘµŒnÆʾÉÛŒÊ	C͉÷C%*¡I—±»/¬wJ“sûvˆë–k—x‰Õ²O•ë"Ô&wÄ…ô±ZÂbÄ‹€Êÿ|t°Ï
 endstream
 endobj
-8593 0 obj <<
+8580 0 obj <<
 /Type /Page
-/Contents 8594 0 R
-/Resources 8592 0 R
+/Contents 8581 0 R
+/Resources 8579 0 R
 /MediaBox [0 0 612 792]
-/Parent 8591 0 R
+/Parent 8578 0 R
 >> endobj
-8595 0 obj <<
-/D [8593 0 R /XYZ 100.892 685.529 null]
+8582 0 obj <<
+/D [8580 0 R /XYZ 100.892 685.529 null]
 >> endobj
-8596 0 obj <<
-/D [8593 0 R /XYZ 100.892 661.619 null]
+8583 0 obj <<
+/D [8580 0 R /XYZ 100.892 661.619 null]
 >> endobj
 1490 0 obj <<
-/D [8593 0 R /XYZ 100.892 560.991 null]
+/D [8580 0 R /XYZ 100.892 560.991 null]
 >> endobj
-8597 0 obj <<
-/D [8593 0 R /XYZ 100.892 536.814 null]
+8584 0 obj <<
+/D [8580 0 R /XYZ 100.892 536.814 null]
 >> endobj
-8598 0 obj <<
-/D [8593 0 R /XYZ 100.892 492.952 null]
+8585 0 obj <<
+/D [8580 0 R /XYZ 100.892 492.952 null]
 >> endobj
-8599 0 obj <<
-/D [8593 0 R /XYZ 100.892 494.135 null]
+8586 0 obj <<
+/D [8580 0 R /XYZ 100.892 494.135 null]
 >> endobj
 1494 0 obj <<
-/D [8593 0 R /XYZ 100.892 420.909 null]
+/D [8580 0 R /XYZ 100.892 420.909 null]
 >> endobj
-8600 0 obj <<
-/D [8593 0 R /XYZ 100.892 394.104 null]
+8587 0 obj <<
+/D [8580 0 R /XYZ 100.892 394.104 null]
 >> endobj
-8601 0 obj <<
-/D [8593 0 R /XYZ 100.892 305.109 null]
+8588 0 obj <<
+/D [8580 0 R /XYZ 100.892 305.109 null]
 >> endobj
-8602 0 obj <<
-/D [8593 0 R /XYZ 100.892 305.686 null]
+8589 0 obj <<
+/D [8580 0 R /XYZ 100.892 305.686 null]
 >> endobj
-8603 0 obj <<
-/D [8593 0 R /XYZ 100.892 293.731 null]
+8590 0 obj <<
+/D [8580 0 R /XYZ 100.892 293.731 null]
 >> endobj
-8592 0 obj <<
+8579 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F4 5484 0 R /F53 3738 0 R /F17 3698 0 R /F59 4373 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8606 0 obj <<
+8593 0 obj <<
 /Length 2050      
 /Filter /FlateDecode
 >>
@@ -40191,39 +42863,39 @@
 1Ì”ñ¨÷¬²ŒÞÝ™GÉㆾ¯xã#»Û,²Œàpÿ½Ô‡
 endstream
 endobj
-8605 0 obj <<
+8592 0 obj <<
 /Type /Page
-/Contents 8606 0 R
-/Resources 8604 0 R
+/Contents 8593 0 R
+/Resources 8591 0 R
 /MediaBox [0 0 612 792]
-/Parent 8591 0 R
+/Parent 8578 0 R
 >> endobj
-8607 0 obj <<
-/D [8605 0 R /XYZ 151.701 685.529 null]
+8594 0 obj <<
+/D [8592 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1498 0 obj <<
-/D [8605 0 R /XYZ 151.701 565.879 null]
+/D [8592 0 R /XYZ 151.701 565.879 null]
 >> endobj
-8608 0 obj <<
-/D [8605 0 R /XYZ 151.701 539.291 null]
+8595 0 obj <<
+/D [8592 0 R /XYZ 151.701 539.291 null]
 >> endobj
 1502 0 obj <<
-/D [8605 0 R /XYZ 151.701 247.555 null]
+/D [8592 0 R /XYZ 151.701 247.555 null]
 >> endobj
-8609 0 obj <<
-/D [8605 0 R /XYZ 151.701 220.967 null]
+8596 0 obj <<
+/D [8592 0 R /XYZ 151.701 220.967 null]
 >> endobj
-8610 0 obj <<
-/D [8605 0 R /XYZ 151.701 132.623 null]
+8597 0 obj <<
+/D [8592 0 R /XYZ 151.701 132.623 null]
 >> endobj
-8611 0 obj <<
-/D [8605 0 R /XYZ 151.701 133.2 null]
+8598 0 obj <<
+/D [8592 0 R /XYZ 151.701 133.2 null]
 >> endobj
-8604 0 obj <<
+8591 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F4 5484 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8615 0 obj <<
+8602 0 obj <<
 /Length 1894      
 /Filter /FlateDecode
 >>
@@ -40245,33 +42917,33 @@
 z[`lLËç›qõEfø‹á+ˆ gF³í›ÒÜ2~œ°&%åmX»3(!/ayi.ª6O[l w}1Á‡ÛslHµ
 endstream
 endobj
-8614 0 obj <<
+8601 0 obj <<
 /Type /Page
-/Contents 8615 0 R
-/Resources 8613 0 R
+/Contents 8602 0 R
+/Resources 8600 0 R
 /MediaBox [0 0 612 792]
-/Parent 8591 0 R
+/Parent 8578 0 R
 >> endobj
-8616 0 obj <<
-/D [8614 0 R /XYZ 100.892 685.529 null]
+8603 0 obj <<
+/D [8601 0 R /XYZ 100.892 685.529 null]
 >> endobj
-8617 0 obj <<
-/D [8614 0 R /XYZ 100.892 661.619 null]
+8604 0 obj <<
+/D [8601 0 R /XYZ 100.892 661.619 null]
 >> endobj
-8618 0 obj <<
-/D [8614 0 R /XYZ 100.892 649.664 null]
+8605 0 obj <<
+/D [8601 0 R /XYZ 100.892 649.664 null]
 >> endobj
 1506 0 obj <<
-/D [8614 0 R /XYZ 100.892 431.071 null]
+/D [8601 0 R /XYZ 100.892 431.071 null]
 >> endobj
-8619 0 obj <<
-/D [8614 0 R /XYZ 100.892 401.278 null]
+8606 0 obj <<
+/D [8601 0 R /XYZ 100.892 401.278 null]
 >> endobj
-8613 0 obj <<
+8600 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F4 5484 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8623 0 obj <<
+8610 0 obj <<
 /Length 1966      
 /Filter /FlateDecode
 >>
@@ -40291,59 +42963,59 @@
 Kœ|@{Å$W¶aþ6k\›!ÖgÏh¹¡jÑM^¬yÙmA0¿m·Ýô}{?û?`“ýV
 endstream
 endobj
-8622 0 obj <<
+8609 0 obj <<
 /Type /Page
-/Contents 8623 0 R
-/Resources 8621 0 R
+/Contents 8610 0 R
+/Resources 8608 0 R
 /MediaBox [0 0 612 792]
-/Parent 8591 0 R
-/Annots [ 8612 0 R 8620 0 R ]
+/Parent 8578 0 R
+/Annots [ 8599 0 R 8607 0 R ]
 >> endobj
-8612 0 obj <<
+8599 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [282.715 616.83 404.979 628.822]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.samba.org/)>>
 >> endobj
-8620 0 obj <<
+8607 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.554 316.857 470.607 328.547]
 /Subtype /Link
 /A << /S /GoTo /D (firewallports) >>
 >> endobj
-8624 0 obj <<
-/D [8622 0 R /XYZ 151.701 685.529 null]
+8611 0 obj <<
+/D [8609 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1510 0 obj <<
-/D [8622 0 R /XYZ 151.701 660.623 null]
+/D [8609 0 R /XYZ 151.701 660.623 null]
 >> endobj
-8625 0 obj <<
-/D [8622 0 R /XYZ 151.701 638.691 null]
+8612 0 obj <<
+/D [8609 0 R /XYZ 151.701 638.691 null]
 >> endobj
 1514 0 obj <<
-/D [8622 0 R /XYZ 151.701 559.545 null]
+/D [8609 0 R /XYZ 151.701 559.545 null]
 >> endobj
-8626 0 obj <<
-/D [8622 0 R /XYZ 151.701 532.253 null]
+8613 0 obj <<
+/D [8609 0 R /XYZ 151.701 532.253 null]
 >> endobj
 1518 0 obj <<
-/D [8622 0 R /XYZ 151.701 427.014 null]
+/D [8609 0 R /XYZ 151.701 427.014 null]
 >> endobj
-8627 0 obj <<
-/D [8622 0 R /XYZ 151.701 401.278 null]
+8614 0 obj <<
+/D [8609 0 R /XYZ 151.701 401.278 null]
 >> endobj
 1522 0 obj <<
-/D [8622 0 R /XYZ 151.701 303.44 null]
+/D [8609 0 R /XYZ 151.701 303.44 null]
 >> endobj
-8628 0 obj <<
-/D [8622 0 R /XYZ 151.701 276.641 null]
+8615 0 obj <<
+/D [8609 0 R /XYZ 151.701 276.641 null]
 >> endobj
-8621 0 obj <<
+8608 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F52 3737 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8631 0 obj <<
+8618 0 obj <<
 /Length 1414      
 /Filter /FlateDecode
 >>
@@ -40366,33 +43038,33 @@
  UQçEN‹eìC¯>º &.ÀcËŠñUÖU7^4w³> Æb|–UY=<ÆõÞÿ46Ù}Áf±…ÿ‘t·”
 endstream
 endobj
-8630 0 obj <<
+8617 0 obj <<
 /Type /Page
-/Contents 8631 0 R
-/Resources 8629 0 R
+/Contents 8618 0 R
+/Resources 8616 0 R
 /MediaBox [0 0 612 792]
-/Parent 8591 0 R
+/Parent 8578 0 R
 >> endobj
-8632 0 obj <<
-/D [8630 0 R /XYZ 100.892 685.529 null]
+8619 0 obj <<
+/D [8617 0 R /XYZ 100.892 685.529 null]
 >> endobj
-8633 0 obj <<
-/D [8630 0 R /XYZ 100.892 485.749 null]
+8620 0 obj <<
+/D [8617 0 R /XYZ 100.892 485.749 null]
 >> endobj
-8634 0 obj <<
-/D [8630 0 R /XYZ 100.892 486.326 null]
+8621 0 obj <<
+/D [8617 0 R /XYZ 100.892 486.326 null]
 >> endobj
-8635 0 obj <<
-/D [8630 0 R /XYZ 100.892 436.384 null]
+8622 0 obj <<
+/D [8617 0 R /XYZ 100.892 436.384 null]
 >> endobj
-8636 0 obj <<
-/D [8630 0 R /XYZ 100.892 436.961 null]
+8623 0 obj <<
+/D [8617 0 R /XYZ 100.892 436.961 null]
 >> endobj
-8629 0 obj <<
+8616 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F4 5484 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8639 0 obj <<
+8626 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -40400,20 +43072,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-8638 0 obj <<
+8625 0 obj <<
 /Type /Page
-/Contents 8639 0 R
-/Resources 8637 0 R
+/Contents 8626 0 R
+/Resources 8624 0 R
 /MediaBox [0 0 612 792]
-/Parent 8641 0 R
+/Parent 8628 0 R
 >> endobj
-8640 0 obj <<
-/D [8638 0 R /XYZ 151.701 685.529 null]
+8627 0 obj <<
+/D [8625 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8637 0 obj <<
+8624 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-8644 0 obj <<
+8631 0 obj <<
 /Length 1741      
 /Filter /FlateDecode
 >>
@@ -40431,36 +43103,36 @@
 |¾,z_gÔ]q]	´E¶,-¾DGý´Ð"ap¨`ýý:=ZÁé_x6x
 endstream
 endobj
-8643 0 obj <<
+8630 0 obj <<
 /Type /Page
-/Contents 8644 0 R
-/Resources 8642 0 R
+/Contents 8631 0 R
+/Resources 8629 0 R
 /MediaBox [0 0 612 792]
-/Parent 8641 0 R
+/Parent 8628 0 R
 >> endobj
-8645 0 obj <<
-/D [8643 0 R /XYZ 100.892 685.529 null]
+8632 0 obj <<
+/D [8630 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1526 0 obj <<
-/D [8643 0 R /XYZ 100.892 660.623 null]
+/D [8630 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3818 0 obj <<
-/D [8643 0 R /XYZ 100.892 469.647 null]
+/D [8630 0 R /XYZ 100.892 469.647 null]
 >> endobj
-8646 0 obj <<
-/D [8643 0 R /XYZ 100.892 287.522 null]
+8633 0 obj <<
+/D [8630 0 R /XYZ 100.892 287.522 null]
 >> endobj
-8647 0 obj <<
-/D [8643 0 R /XYZ 100.892 288.099 null]
+8634 0 obj <<
+/D [8630 0 R /XYZ 100.892 288.099 null]
 >> endobj
-8648 0 obj <<
-/D [8643 0 R /XYZ 100.892 276.144 null]
+8635 0 obj <<
+/D [8630 0 R /XYZ 100.892 276.144 null]
 >> endobj
-8642 0 obj <<
+8629 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F50 3701 0 R /F53 3738 0 R /F4 5484 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8651 0 obj <<
+8638 0 obj <<
 /Length 1903      
 /Filter /FlateDecode
 >>
@@ -40485,34 +43157,34 @@
 Ið±ÖÔŸìl6)¥ÆQ:kÕÐ8Ha º~70T2°U“}tß2¦wôèâž·®ÒGø׃š?á˜È)@ápž”á°;}õà_Óß9Óúz½ø„ìæ±
 endstream
 endobj
-8650 0 obj <<
+8637 0 obj <<
 /Type /Page
-/Contents 8651 0 R
-/Resources 8649 0 R
+/Contents 8638 0 R
+/Resources 8636 0 R
 /MediaBox [0 0 612 792]
-/Parent 8641 0 R
+/Parent 8628 0 R
 >> endobj
-8652 0 obj <<
-/D [8650 0 R /XYZ 151.701 685.529 null]
+8639 0 obj <<
+/D [8637 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1530 0 obj <<
-/D [8650 0 R /XYZ 151.701 553.904 null]
+/D [8637 0 R /XYZ 151.701 553.904 null]
 >> endobj
-8653 0 obj <<
-/D [8650 0 R /XYZ 151.701 528.346 null]
+8640 0 obj <<
+/D [8637 0 R /XYZ 151.701 528.346 null]
 >> endobj
 1534 0 obj <<
-/D [8650 0 R /XYZ 151.701 359.269 null]
+/D [8637 0 R /XYZ 151.701 359.269 null]
 >> endobj
-8654 0 obj <<
-/D [8650 0 R /XYZ 151.701 329.755 null]
+8641 0 obj <<
+/D [8637 0 R /XYZ 151.701 329.755 null]
 >> endobj
-8649 0 obj <<
+8636 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F15 3700 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8657 0 obj <<
+8644 0 obj <<
 /Length 2183      
 /Filter /FlateDecode
 >>
@@ -40531,33 +43203,33 @@
 ¦ÖÙ¿bŽee¹é/Žf|äɆåáÙ¶N|øð‚|”Âýïš"¡…Äp.Ô½`8Ç“Ö^dFYin[=¨e”ù-·áÙ[ÏF|Ní¡qKêüEE¿Êá;8Œßïþ<Ð+
 endstream
 endobj
-8656 0 obj <<
+8643 0 obj <<
 /Type /Page
-/Contents 8657 0 R
-/Resources 8655 0 R
+/Contents 8644 0 R
+/Resources 8642 0 R
 /MediaBox [0 0 612 792]
-/Parent 8641 0 R
+/Parent 8628 0 R
 >> endobj
-8658 0 obj <<
-/D [8656 0 R /XYZ 100.892 685.529 null]
+8645 0 obj <<
+/D [8643 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1538 0 obj <<
-/D [8656 0 R /XYZ 100.892 342.198 null]
+/D [8643 0 R /XYZ 100.892 342.198 null]
 >> endobj
-8659 0 obj <<
-/D [8656 0 R /XYZ 100.892 312.02 null]
+8646 0 obj <<
+/D [8643 0 R /XYZ 100.892 312.02 null]
 >> endobj
 1542 0 obj <<
-/D [8656 0 R /XYZ 100.892 237.282 null]
+/D [8643 0 R /XYZ 100.892 237.282 null]
 >> endobj
-8660 0 obj <<
-/D [8656 0 R /XYZ 100.892 207.994 null]
+8647 0 obj <<
+/D [8643 0 R /XYZ 100.892 207.994 null]
 >> endobj
-8655 0 obj <<
+8642 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8664 0 obj <<
+8651 0 obj <<
 /Length 1597      
 /Filter /FlateDecode
 >>
@@ -40572,145 +43244,344 @@
 %õ£ïƒÊ
 endstream
 endobj
-8663 0 obj <<
+8650 0 obj <<
 /Type /Page
-/Contents 8664 0 R
-/Resources 8662 0 R
+/Contents 8651 0 R
+/Resources 8649 0 R
 /MediaBox [0 0 612 792]
-/Parent 8641 0 R
+/Parent 8628 0 R
 >> endobj
-8661 0 obj <<
+8648 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-HOWTO/images/trusts1.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 8669 0 R
+/PTEX.InfoDict 8656 0 R
 /BBox [0 0 612 194]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 8670 0 R
->>/Font << /R9 8671 0 R>>
+/R7 8657 0 R
+>>/Font << /R8 8658 0 R>>
 >>
-/Length 8672 0 R
+/Length 8659 0 R
 /Filter /FlateDecode
 >>
 stream
-xœÝZÉŽ$7½ÇWÄq|°¬Òц9»]?0Èoˆ´ánæ÷çQµDVg|)#ч.2ŸHQ7)þص2»æíÿËuûêí?}Ú´"mÙýö?mfÿeóΩä÷`²ÒÉîN'åµÝ	tÿã¶7“”ö)ìÿÛŠ–ýÃ?ß0ì‡Í*¢Žæ£WvcŒSÎíÖG•ŒÝ“UλTÑ‚ÑN«œVÑ‚É>©x–s¤U0ñ®®¤5äÐn‚WŸaD´£w^L¬iR:˜=y£²µûup\PÙ‡´U&gÐFéì÷˜£²fЗ-f­¬·‘‚ryHètӁC*ce»„`1õIG£/[ŸEãŒyW	g;.ØÙçµígl¡¹ÙBÓŒã9™©Ò:u3)'eBìSz˜ÙbD“0èªc2Óx•£fÂIøHv3=™Ù8}–MÂÙŽeŸÎ6ÙBÃ[gçì>ë¢Ê<ÌY•|¹ª7€àü˜ºE´ €ë‚	' äàö¨€±Ä‹ÔQÂYP©.Ø„jœ]Vž1PÂYPþãÌŒjœEÞ*çy	gFiHÏQçýö¬¥#Í»¤lŒ¼ -š',RÃqïÇPrË郒õPÒÅg=vèÝTóa²Vµ„d†x‚w¼ŠÂÁñQ8×&!¤8@€“v¿Ó—-p¨°P–ϵh¤h¸lÂ1^Å'¤	01’ò¦«#Ú$„#s	g+ªËÜÏù™€ÍTV“ϏƒÛeó„$OÉœþàs¢7ÖÛšèC(É×EÇÉ·êg´`p²•wƳ` ©$æ{Nô9†ûmTp¹$z¸ ¤šäâ)Ï‹²B£*Àéâ`qx¾CMÚ©šè‚GÙ`N× ±aÚ0!,œ4º©àÂIÊñV‹„ MÚ
-æu ³«œ"žÕ²%Ç÷Ÿ5JÐ8Ûgáš´‰ç—œíú…6D³ ºh˜L4AEö`1ÑjåóP!ô0±Ú»€Å†eïžÉ¬%³#2 抓²³sÞF¾öFº»¿³cºä‹Ë…KF4š¹Â‚ªœe,"NšQ³¢8ñ, ÂX0“Ô~5ΊJNyZP•3£îgóŒXKðR)É®#h'8+yÈ8‡ñcè¹åôQÆÅPÓj•|Üèâ”þ¾úg<ø¸¦®ÉÂpš¥B=%¼Çè%ßdf‹Ä‚ÆÎÅY¡jƒ¯áÄÆÖ‘ü2fW«(ã$¹û ¢2ðƒ»ê(ÛÒNw\‘JVRöÈzìV5§Gb¿Ž­õ®!ØŽ]H(Ÿ41©UŠBÂù	å³qãwø‚OÓðF7e@ã T¦¸wì(䆆Fóˆ6AôI7	'#Jà|NÃÖœ'?·~gØH8\…6ù¬Ø†Ôg ô0r ª
-]@3©i˜ŒÔ\oÑ0õ­æã&F6z2R}ÖMÂÉŠe÷žÌ²5ó«ëŽ
-ÏO„ÊL4Á±E¦‡öøDܐE†Ï¥¾kœ¹'4‘XšQ³¢Räl;£*gAFÚEVã¬(,`^@…±`øš'}5ÎÛûYã‘Éì}Äþ•[¬Åaàq֏¡æ–ÓeØÔå7š8ÿ½§ö’ýʝ,–á”4åïößåºó²}õ¡ª¥·̶"p$ÑLsáŽ?,¥ýåºýãÛ߯ÿúå·ýë/^~EnÛ¤ýKœÈÍÒË¿;à|÷²}?Ž²:”«YœtxÑ)–æU8ÇàDLÇN@­ïJt«}¼@b&å°¹ƒC§!3FTÝr†ªç^ÿï5µŸ—âo8¹¿vžp†T´ŽÛzTo¶œ§—ÿýôç§~Xî—iu‹rÍyäy?xˆxŒ^Þ¡åÇDp8×ëÄÂìg^(£Ð(RïJJèŠ8‚ÝNÃë#DüÌ#„÷hCB(·§|Ëq88
-(=A{Eåú48’ohl§/`¬"?!4*Â<	ºªàcCYkà4ÊØIE£y@C´)ÊøÕÎóÏi×R¤ÉÏ„4ZóÃà Žû &…r),ú…&D5`ºª&rÝÀŽÑ%d>t“ŽFw Í±X­˜7ïÙ,[Š4ïB¹Ð?m×ýÍáþïðs‹ù‚O˜¦·åÊ»qpµ‰eTÈåÚfBU΂rFó
-Ê„jœ-_sΨÊYPžïhýŒjœÅÙ‚Tą̊ûå™çæËá/ÍûµGï€6Þ”tuŠçGWsØÆ´´|Ûä7š¸xOíë£C4ùÚ÷´}í—û=_2ö	©§Ü£ñƒ4β5ÆY¶˜‡GÎñY	B‹ŽË&ý¿7Ñ{neDÐ—M¦ ™b~¶à-žk’MT¼«<  '~æ½á1zÉëÜ5PMë9¿þÐ1H‰îb8©Óg^$ùúÂøêËFÃp$Èi~l@è9çóLZr—׉ã×Û8z¡å=n|F8 7=‚ãêW‚ðIò^ ´<Ávòe·w	Èk‘ƒ­èh4¨“è€6Ç.`µ¢$…'µlÍéígâ6[ÏFâ”ò©#‰¸+v}B#¢š0]U#1¿’iº8KžTT²›Ønì£Wæ½{*³Ölžø_|”?$yõ3‚7€ØÙáÙ–C““µjœ€€ks½¸ð|õßÑT㬨`ÊL¨ÊYP½•™A•±buJV Ê™QA£ñËiB	gF=Èê|yÄÊWR®hª±;¾9(Is
-æG×r˃‚N©æÕ*÷¸ÑT²ú;jœó×n44ÕG„öaNÈ)é½>g½`àüžÀ9ÐëOB§¾<¿þTÐA8Ö„û ä\y—¹«Žb.	ûþ£CÖÕ–
-Ñ5ñíîàxeøî?öà˜€Ò\óq3;Íu
-J¾§ì”&9
-BV
-e@åð£¤áJ®
-àGKþDDTÍ#ê$¢Í±KX­àú¬–-ÙO~&Âî;ITj¦a%¸R^b›•ž¬ìˆjĐ tÕ1̤Äç0u3	k'•FößÛûðÕˆy÷žÌ°%ôšº£Î
-ì°%4=ÆðrüšÏŸb¢.X8sgw±´ *gA¡u*O5Õ8+
-Í-²gA¾¾›A•±b0Ýìªœ·wµÁ"sæ°ÌåæJÂxàÎ4_áŸûÑõÜr¦Q"}Eòq£‹3àûêç#õýöã# µ
+xœÝZËŽ,·
+Ý×WÔ2YDÖ›ÒÒF¯}3?tb;Fµ
+ßÿŸCIÔ£;SÝÈfŒÆ,¦É:"Å’ø’ê×]+³kþkÿ/×í«O´ÿðeÓŠ´1d÷ûŸؼs*ù=˜¬t²»ÓIywÁÿü¯íûÍ$¥}
+ûï[Ñ°úö‰a߬²!‚ùûæ£WvcŒSÎíÖG•ŒÝ“UÎU´`´Ó*§ãÒ‚É>©èèTNŠQÏ1Z«èÍn‚WŸÙ[1zç‰7Dš”fOÞ¨lã~Töa'm•É´Q:û=樬ôe‹Y+ëí@¤ \:Ýt`DçÊÚî]B°˜ú¤£Ñ—­Ï¢qƼ«„[;.XÙ×µíG,¡¹[BlÓŒí9™©Ò:u3)'eBìSz˜ÙbD“0èªc2Óx•cfÂI’:„žÌlœ>Ë&áÖŽe	_Î6YBÃK/F|ÖE•sÄ«²ƒ/—@õΏ©[D8§„&œ€8ƒÛ Æ¿¤Ž΂Jõ…M¨Æ™QÑeà%œ•á?Į̂ƙQä­òqž—pf”†ôuÞïà]:âмû@ÊFvz‰æ	¯
+iá¸
+ïÇPrÏ郒õPÒÅ·z¬Ð‡©æÍd­j	É:5ñ+ïØi„ƒí£°¯MB2H	p€à	©+¬~§/[àPa¡,'ÐHÑpÙ„c¼ŠwH`b$×BcD›„pdŽ"áÖŠê2çù>°™ÊÛd7sp»ì±Ÿä)™Û„ÿ|NôFÃz[}%ùºè8ùkZ0ØÙÊ»S4•Ä|†áDŸ±fL±uÆh£tq¢‡@ª¡L7yÞX”Uv‹ëàÀójÐNÕDWVÜ:ì®AcÁ,~Ú0!,œ4º©àÂIÊáu	š´:Í#ê$:@f-V+8E¼ªeKŽï5JÐèg#á-\”6ùœä’³}B#¢™Ð]ULFšP+I1ÒjåóÐ!ô0²Ú»€ÕŠeù^̲%¿ÃgsÅUÊ”÷Kj?ΞŽù’C^ò’' :"B–¼h4!~…U9ÊXĝ4£gEqúY@…±`,&©ýjœ•œò´ *gFçôŒˆKðà-™}¼‡î—%·Áüzî9}”q1ÔäZ%wº8±¬þÇyÏÞ¯©k²ðjjÝmÚ{Œ^²^@~¶)-{¸çe…Ú
+Þ†DÝ ‡@9ƒ\¤”±é)(…¨Œ£su”méƒ
+'=®ˆH%+‰{ä>v+‹J›Ó#½_ÇÖª	3ò*$Qš˜Ô*E!áý„"Ú¸ñ¾àÓ4¼ÑMAÐ8(˜ÓÞÇ#ºc‚CA£y@› úœ«€Jä|E³Ö¬'[Ç3,$ìE®C›xÖk£íz˜8Õ‚. Ô4L&j®¸h؈
+WóV=Ù(ˆ>ë&áÆŠeí^̲5벪ëN
+¯O„úÌÄÎZ£ÒC{{"îÈ"¿—è+œ¹+4‘[XšQ³¢RäL;£*gAFÚEVã¬(¼À¼€
+cÁðAÅÔ8Ïw´Æ#‹#Ðûˆõ+çX=‚#*ÂÀã.¤CÍ=§Ê¬©Ë=î4qîûHí%ó•SY¼†_QΔßíßåºó¶}õ‰ÃHMmo˜mE`K¢Ò–·(–-ío×íOýåúÿ¼ýç·ŸÐB£ßFúvHD¿¿ý³¾aÀßÞ¶ïÆV¶Q‡r8‹ÎåúuC¯XÚWáƒ1—àTû®D·Hq‚ÄL¥õŠØ
+™9¢êž3T}?wû¬©ý¸ÀÉýû	{HEG†'°Gy?½}þí˾ôÍòà*5‹rí9B*ÕKûÞ]Äðå  Z¾`@'zç‚¡ƒX˜}çö 2Š õ”Ðåð@áÕi¸`½ˆˆï\Dx&$„r‚Ê'׉ƒÍ(¼õŠÊjp¨õ<ŸÒØN_0ÀØzó!z0O„®*xDãØP^¶pE¬*Íê: MQƯ6p¦M»–2Mi̓£K]×Äq¯“º~¡‡‰Q
+„®*†‰\9°ct	™7:Ým€6Ç.`µb^¼W³l)Ó¼åPWüôöpâü9üÜb¾à¦Ù^Rãàj˨Ë±Í„ªœåJÉ8£gEEËG3ªr”çsZ?£gEq¾ U93ê¼@óÜãux‡h¤®=|4ñÆp‘wЏ®çž3
+hiùP·I>îtq1ð±úסh4²vèÉûÚ9.!þ#eäO…mYÒøbûÙšNc?[ÌÃŽ#çx?‰¡EÇeŽáî_†›è=74¢@èË&SŽL±¿µà™‹Ï•	œ;SÙDå"µý;÷ÑKnçށ¯N8·çvPºúé¾`€$RZ@ýÂ@@œÛù¢ùTRòõºñÄ1!×Ԯ˛FWïâmjϤ%}ðåèuâ8ÅxlÁÐR w>#2›nKÁq’+ÂãÇ4¾‘r+ä/ÊnïÃ7ªa(h4¨3è€6Á.`5¡$‡W4kMìí1q·
+w¹NSܪ|"nŽ]Ÿ€ÐÁ(Œñ¬
+º…˜\É5}8\%Oò+ÙíëÛìúèuþ󪽎Mk2Oü•ƒ/ŽÉ.>$àMk3ž ±‹Ã›-G%Eܺ	' ÖòIwIŸ|öÃ_ÒT㬨`JI3¡*gAe4WfUÆŠA¨)I}€*gFÎ/§	%œõ ©óé‘åKñPn•®¶CÈå4츍ãG×rσ‚æ(ºØãNQÉè§üq²\¸ÑPTïÆ—M7Ùî	øœî‚M€óUåðÎ-€Ðè£-Ïÿû– ƒ°¬	ç ä¸±Oçê(æÒïžß7TSŠ|¹L‰Ë±ÁñÊðÑíÁu¹áŠˆ;¹Øi.PPð1eG &Éi²j(*‡/$
+—pU _Xò7"¢BhQ'1mŽ]ÂjÏWµlÉzò˜«ìd$‘-ËÞ­ä/WÊ%l³²Ñ“•Q„®:†™”°“ífÖN**9ŒìÏÛûðÕˆyõ^Ì°%ÿäšº£Î÷	\ –ÐôÃ_ÈñM>‹‰ê×Åò…\åÌmapÜÂÒ‚ªœ…ž©ÜÔTã¬(t]´ÈjœøìnUÆŠÁ8På<ßÒ‹,ÎÍ™Ãk.ÇVÆu†×uÜö£ë¹çL£"D"°ŠäãN'ÀÕÏ[ê»í¿z¬!–
 endstream
 endobj
-8669 0 obj
+8656 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610111330)
-/ModDate (D:20080610111330)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528091006-05'00')
+/ModDate (D:20080528091006-05'00')
 >>
 endobj
-8670 0 obj
+8657 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-8671 0 obj
+8658 0 obj
 <<
-/BaseFont /WLOKNG#2BAlbanyAMT
-/FontDescriptor 8673 0 R
+/BaseFont /KDRKWH#2BDejaVuSans
+/FontDescriptor 8660 0 R
 /Type /Font
 /FirstChar 32
 /LastChar 117
-/Widths [ 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 0 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 600 0 0 0 600 600 600 0 0 600 600 600 600]
+/Widths [ 318 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 684 686 0 770 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 611 0 0 0 0 0 0 0 0 0 0 0 0 613 0 0 0 0 0 0 0 278 0 0 0 974 634 612 0 0 411 521 392 634]
 /Encoding /WinAnsiEncoding
-/Subtype /Type1
+/Subtype /TrueType
 >>
 endobj
-8672 0 obj
-2467
+8659 0 obj
+2474
 endobj
-8673 0 obj
+8660 0 obj
 <<
 /Type /FontDescriptor
-/FontName /WLOKNG#2BAlbanyAMT
-/FontBBox [ 0 -16 593 627]
-/Flags 5
-/Ascent 627
-/CapHeight 627
-/Descent -16
+/FontName /KDRKWH#2BDejaVuSans
+/FontBBox [ -2 -176 889 759]
+/Flags 4
+/Ascent 759
+/CapHeight 759
+/Descent -176
 /ItalicAngle 0
-/StemV 88
-/AvgWidth 600
-/MaxWidth 600
+/StemV 133
 /MissingWidth 600
-/CharSet (/A/n/B/o/D/r/s/t/i/u/T/a/m/space)
-/FontFile3 8674 0 R
+/FontFile2 8661 0 R
 >>
 endobj
-8674 0 obj
+8661 0 obj
 <<
-/Subtype /Type1C
 /Filter /FlateDecode
-/Length 8675 0 R
+/Length1 83568
+/Length 32439
 >>
 stream
-xœUTkPWÞ%ÉÝ"
-k¤St7ƒ X߈ˆSy‰A@”jQ#!A H„G‚­.TIHx4$‚ Q‹ŠÄRÇŽ­Uð1µÒ)ÓŽ3µ-ØNïvÖétŠ¤îÜǹç|çûÎ9("tAPu
-SÊRUÚ°˜Dþ´œñF™.ÌBUÄüô7&Zˆ„®UÍ®rC)7å&<¹ ›ç	Û=à±9P7 hauc„:G›«È</õÛ¿Ë? `ÙÌͪàà`©L;ý"”ç)2Uҥܦ@®TçdËUù!ÒÎZ©T¤I3•ÚœyÒÔôty:ÿ-)U)Ï’F)”ŠœuÔ/Â_ºzåÊUïrËêíŠl™&O£V©¥Û¤ñòL25÷—‚¸‡©ÂÕ‘¹yù
-Mbj¶A|Xd‡,ADd'$!H8²A‘9#ˆÑ£´íwñv9*ˆœ
-…rá%ÑFÑ3Ñ(óҝyIÑЗ†—iÔe0f˜P'd}E›€¶Â¨/©56‘p%°›M
-õS!™ØdÆ.b÷­ÁX¢7óÏn€ÝòZ#Rm9÷ÃÂ_€¦ZîG…IKn7¡¯ž %l)€¼,jS‘ÇèÚzÒ°µ×C˜@I(ïV_»íbÇR@á;	½f0¤ÀÐI[¬ŸZÅx_Ëé3–ï”ÝØRØVPŸKe‹YJÍ@q¶)(:RMàéæ/ÖÄdÞ¶ƒ˜QDC9Â¹<U´€ÛHv:%2~¹?úõþ«AäPG[uMü<ìî;kåJô¼Ñ  Y¹Êázlx0eGÌö}ëHÖ—m•À"èÝ¡ºŒ…=Í™T¦8&!9’\D3(>¤W.äM&BÂz.ñeç°~£dâ7èçùþÊÎ#eÂ?¿ß°È/hÃâÅAÏ&ÆGŸ½"'3š)Ô?NaV8É¥pþ8Bò}–B!;Ÿ`Õ¼A‰ž7èôk„ÑÀEØ ÕSÜ}€–Š¥’Äá˜Ï¿eÄ´8JNœÚ¿•œ2¬èÊ
-¥+6ò;0yÒ[6~lV³µ¡Ì¬#Ù(xà=ãÐ¥¯¥Ï»™r”Ê7?9ZC‰ëj-uµ•f]yè¤Æ¢¢vSqêåëÅ“däÂ…pôàÊá}¸v_ñ­L$#‘èHiŒ§Äx”øžè¬&U»–l×µGŒƒÆ6c[I[±-—ÊãÖ¤èôµë6÷\&LUg°”xt‰±\G®çÎ…&C«7™í¤ëÍè×Ý£ÄP4:øäìá.e3™uRn5­©­¬ÖÔs¾
-êËl¶·{;GßÈÞw‚À}ŠªM†:ïz“¥‰Ä­ßb¸O“±VOàÖÒ
-.ÂdðN½˜ÌQgaöJsqqe¹Ž`g…aoŠx„m¡wö¼ø‚óŸYÖò#ýÈHÈò6ë(qTêÙë$t at 5ö¦w¦¥øº °“Sz˜WbS}º²cìZ'íÿ6ËŸÙ@Â<—”
-Z2ãH¨#ZÁ$	·±&£Y?U‡¹¼O¾’N÷¦NxáùÌûóÏ´^¨`Ü8írh x_lBlöVïÝit?	o-›é¶îuãÍ]ßÝû²}`xS¨iÒƒ¹Ñ|á‡cEµeu
-5f;Áë½,À´¦ŠúSm1C^k|°™”Žg>&GÒð-Ú“ó:DË »®c‚æÿâº8:Àƒ-7–gD—h‰²#••T™¸Ü\a­>^UuœxÚÒn:G‰‡¯ü€ŒÄâ•5RbÖ#0n-‰÷oº»ëŃ¡¶Ûwˆ>áÖmIyœ4)]׿zpé¯Ï¯V–Ÿ#¦×Ëð½‹iãå¾S„œ>a pj†Ùù¦˜>Ù&G‘•ƒXÎe¢à âôíó­ÝÞ]Š4’½?2£;~…??t¦…CÙÝqPNâ5ìCgƒ
-Ø
-†ööï,HN'4W³ZöS©”J«Ø÷”ûa耞‡\r¥g]rs£Ýf#È¿F*I|
+xœì½|U÷>~§ÏÜ餳TAB۝M’²@H 	UT–d“,$ِlè‚HQ at QQ±!¢"bEDElˆ]±¡¨ØüffOH@ô뫾åÿùüÉËÞ;wî=Ï9ç–çœËÆ!ÍAšWÐݏÜ?DæLçsDQE¸*ñœ~•óñqÑä¸E[¦:-ï8ÏÇJªJ+&Ù“' D:ÏèŽÒòi%‰þÚ8„©,.>$?¶Y½œÖä2§AÚÒì BÔBç¹}YE|*à½ê|—NJ‰ç¦åuîXžZÕä¸àȧîtZ}•áŠH«	CnpžŸG¨/_«‰ÏY1¡þÎøçÚVUGªúp_;ãñQ„˜2"ˆ¶ ]ÎÏhZM¬wž\ý&9-kÉMh>ªuZ¶»ˆEdW§m=:Œö8= ]ÔƒPÀiEèM†Dß…h³##•°ˆTŽ¥Ko¦óé-ô'ôn”B×лéqt
+ nbF0띿©ÔÒ@Ï¢Öh±Õ ­ÔA*@m£3ií£vSÐG
+íÈß…–¡uh†£‹EÄÐlr™ï´ìdv£UÎOÌy¿›XCìq´ÛJÌC{ÑJŠ&¢5Ä^Ç®]èšG’³ŸÈGÿŽ¬ÝÎøU¨†FÌ^£cd§ÍÑÞÁï}¶¤º2{½ŸÃh¶ƒ\ˆÖ±[X‹kç ¸[Ol'±W¢µh5–šD½M̧ÛÑ·ÑѲ„¨qh™#{•;†-!¦9¶»?3\éäz±¤ÇqãÙ;\‹ÌÍd¾cQ	ÚæüÂjŽM}ˆùÔ"GS÷mK´›DwwÆ;¸YŽÕŨ šàÔf »Ñ&Ô•Z–9’<{Ùæˆ3r5½ß±y±„<‚vS™¨3*¡¿t|,„V ô Ç24E(ɧm$;doì?l”ï™Ñmº&òèÓ8ßF4t£<Í·åøñ¡£èæÌèL‹T~#Ý¡Ýþß{¹¿kÒà¡£|
+e‚ÔиL§­`”SuŸœf§=”é½sA72œÿeÛè+*ó-Ö·ë½X‹ôîê¬YÇîŠc-ÍøÁ¯ý4L®v[Nú3Úm±–S…¨*C"‘†ú#!ºSæ”îZjFô;1n%á‡:Dâ ÔID?BB"Ùê´Sï
+uIä8¨³“ó Î#ÝÙ7‰ºè¬"uÙ¸¾Ó¨+Èî3êûÜuÑ}v8ˆ-8Ãzxèn@‰]P'O|uÊi?u5&ÛBAMÈ,¨³È"+ Î£¶äR¨‹¨7ùÔ彩VPWPYï£P×Pã>×@]G|Ÿ‡Q†³ÖªÐ4T¢¨ÔñpùP'Tä¬*ò£ÎOÀ©wzøPºÓ'¸Ó;‚¨%9­Ù¨ÒéßÍ©¥¡rçLJòOȪñž"NqÆLv>‹žøO &Ÿ@-t&;Xtz»z„1ÿb¦S›àŒáœ>©Ì©»Ò"Þˆ°g‘sÎ;m>G³Z»Üy*ržŠÜ
+§‡û#”«šV--‹û:uöù{ôøÆOó¥Gã5ñêH¸"É—]YÔÍ—V^îËw{Õøò#5‘êÉ‘ânø7C“Ý¡…áÉb•¥¾ôpÙïÌŒL¨u6O¸²4RãWG|ÑJ_Uíøòh‘¯8VŽV:šlbg s,Àà‚p¥óîCJ,6ñÏ
+ù3}FxÞ®q|ó<èw|îwV©®‰Æ*}þnþÀÉ¢Nt:¬OZbNã°âêpKb•Ž‹âŽÇ‘7ïqgÖz£îÎO1ȘìÈè挍9eµ3“O^µ7çݹg*‹Ç«zwï^ì\Û­&V[])‰U—FºUFœ×Y
+4¨[#uëô·»Á}ç®»ˆ·v#Î
+Š¡)N_w¥þ3ëÏ•4Ày3ÍéS捌:ïª<»âÞZw½Vípw‡+uò)ž<ÕŽúýU{Òþú=k°ós:Ûk ìÔzí·;£®ãÿ©ÓãŸ?³N?ßõ6G7ثŽwVx¾žè´Åœø¿tq-êÉ«ð¤Õ令§S™÷.v•z(•0ëI0ï‰ÙJ %ÖXb½'yzżٯôÆWÁŽM Ä©qXcQXaOFÂÓdÆ=-N]OE^?w&¤×Ip{'tO¬åˆ·ák¯mƒUÒÖ›9wl±WÖxz9cÂ`övA‘³B+<)qïMJœZ9ì¤N't¬GpO-Wÿ¸³~«ßE¬÷‰ÛRåíšb¡È]§M±gAÜ[k㝷qïmÿBìæ"G³ZOJÂ'S¼5PæJqðL…×ÖТ:ªOZ•	mk=&5˜·^áÍgb®qƒ¤Æô;v$°³»w‚ø<ɉý¯ž<ûluçÚVXÑqO¯úUWoÑÏ
+¡n7”x§z%Xi€Xì}ºI^ézb‚ӣȓ—èS7î:.‡“­n†Š<ìbOã(hÚÛ۝… ]Ø‘óN†ú9hxÕ{à·'A¥Ó?»¡æ¤¾u{¥Þc
+Ï€†ã|žÍaOsìÍ'¯µ„7\þƒùŒy,胹¯ðÊúóãÏÌEÜc"—YÃ`Q·“<õGc]ŸLnI »>/ñt,†•Tî­Óê-	M]Ÿ7˜ó†«®ŽAÃ#F½3£Ü{Â',*ö4u竲7JOâÕRÝöVObíÖaœêŸšÿÓ¦:-1XP¿ÂÂÞýy
+NÆ9Õ§Ó-	æ»ÜýÓŸ˜jïœ
+{çJ½Üº–š+²n¿œÊ8ç"žuHS<«Š½ñmOÇmOØ}ê켫cÛ¶
+VYbÏäœÂ/ã½ýk k-샺u2Ùy=Ç"hªççJØÉUÎO‚½ÂÞ‰91¢á¼'t®kÁ§Ý)eÞ	ïóÊÐ1â­¤ß['ugÝéÎîb	*½yoè¯Óy7ð\Ã9ü«{µÆ;5븺~·Õí$7r(?{TÈ“%Vy+z¢óY
+3–àCwUá§ê¿ó¤ú}«ÆÉ–œðÔ@òpòP®óäâä9O…h¤Gæ{ﲝ6ŸÇå;oF8O™Nk¦7/iÞ÷}[o7Žtê®Ä<4Ü“•‘ï|º²G;-®lŸ÷ì>
+vúç:²Ü±!4ÊÃ9Ò
+Íòœº+{ˆÓšã”!èçŽÈpZ†;Ïn} r£Ð^®3ªÐÛ;î8W—„¦…N{=êÉZe{ˆuš
+qžòùámš#;Û“çêŸäÅGn=ôLx.ß“îúÈ•ìÊÌp4ÊñžÜÖáN9ÔéWàù3ͳ9¡m®gC–ó>aKÈÓ 1	2œr¨ƒíöàèUèyÁE*„žIÞ<ºödzã]ÔÁ^¯„fy0Ën½^J7ðeB×ÿ#N xöç8?>ÏþB§¥Ð››4G~Üºµ3À“àê=o÷ìKóüç!¤{ý\/ºþÌ9±âòÌJ†ç/wÞ\Í3=¤4Ï#§µ¤NZÃÙ9ÝêÀ'xö…<Oåx½?†œþÙ'Zë1Û³5|™X÷‰5‘ÓÀ»žîÌsPC°¦Ò<ߝl…;O#=ýë­HÌ@|f4ðYýìçÂìÖéSè!žÆ+#½½òz¥ys]pbdyûwh>üÄ
+«?†ÃúÌ;¡ÙÉþ­ÛGuýþÌÙ‘U‡}òfzë)4,8áDürgWÈáµ"/ωŸ8·Ofî†Qc}4Ú0îLjpÖ6Œ§ð ¯oÅ)ýê[ÙR‚³ês†±Ûé2ìºì8Ë×E½õÑGâìNäD
+£Þb/>OÄ€5'¢’˜ÆND&S¼·õœ^w'±“ò<9ìqÒ	¬:.ª—•ˆ+Ã^´à¢ÕœÆ›¿ÏPø7™a•Ç÷	”)^=‘‰k_-ôuÛ§Ÿ’
+×Ýÿüv|§ƒ:[N94ôµ7ßUKE=»ñd7[êò²zŸ¸HÜ»Uœ2ëõ«Ï•Öz«àú ´æÅž¯1JÜṘØ;¯êî¸þû·NÿôõÿÒ}>é>èÔÈëßw„O{äûßá?utr$_Ô@§ú»Žºžîõt7,ø¿v¯äûͽþÿï•Ü+Õß0üó^	ŸÄ°ÿ½{%|šlíá^	Ÿö^©Þ¢ÿ̽þƒû‚ÿ̽Fÿê½Rý¿:ý“÷Jõûíä{¥ßcßß¿]Jäç‰Hâív	£“o—N»ñŸ¹]Âà]_þoß2aoý6šùÏß2áÿá[&|Ê-S}®ûŸ¼eÂÿç-“ï?vË„ÿ…[&ß¿í–	{>áHäi›ðvšóþ?ww„O;çÿ­»#ü›»#ßíîÿîÝQýпÿîÿwG$÷ß{wTw²þ>£üöÆÿ…Ÿ†·4ÿäþ[7>¿ÍÙþڍnpãóG÷ÿÄ
+Mü7òû£ú›ìá¸OÝÊò¾ å~UÍý²Û‰ïÇù:ÕD"¾ñ‘òØ”ÎÝ|â‹mÝ|ʧU•Õø¢U±êx¤ØWR«ð¥UG&×Àê0¼/ÒÕ&¾H×ãzô‘ê°/¡Ú‰oãá®øÿö{{ú+¾S£58ì‹W‡‹#áꉾXÉ©R0©®ˆÖx_š‹ÖøÊ"Õ«´:\阞äØî˜ås<V]IòÅc¾på4_U¤ºÆw<u\ö9Jc§g¼,R秢¢XE•ÓÝí/s¤;^ŽTÖ8Þk빤mgGX±/\S+Š†<\+ª­ˆTÆÃqWŸ’h¹3I\‰Þ _A¬$>ÅqÛΞ&Õ‘ªêXqmQÄSu‹Ž¯G\ðI’œi.*¯-v5™—ÅjãŽ2Q rª®tÄÖÖ8ý]s’|×jì-š²¤I.f÷Xµ¯&ẫÓ;ê¨
+æŸí*爭rÇ	×y at SÊœ…õ›î4”ÔVW:€o`qÌWKòÕÔŽŸ)Š»-®}%±rg±¹Å*‹£®5½1.tÄ…ÇÇ&G<«ÈSàÄ"¨ŒÅi¨I´º³RU¿ï|5eáòr<>^sÔpvIø$;c•Îº¨öUĪ#§5ÛŸV)	;@ÝJü¶"<ÍÙ-ÎðâhIÔ]háò¸³ôœŠ#4\\ìYžp»AÃÕŽ^µåájìGj¢¥•ž¥‰½êrWh¸ÈR㎨ӧæT$W$v <‡…ËO/ ÆÔéQ/ÍQ¯²|š/Ú`™cלêˆûk^_·Rã:ҝ—ºíqÖ\¤Ú4%V]\ãk{b¶u±ë^à¶î¶më¹Ì™™Ø/ã#ÎNr¥Ö:sàúdr,zB±ÈÔ¸³c|áª*g{…Ç—GÜ	ÛÉn×OJY8î+×8#•'ùÄ]uõ«»ØW[Y
+׫Š=åþѬÖÄÊÝ]íM›;Ia_¹{z8{¥®cU¸hb¸Ô1ÌÙ‡•1ì.ÕmQåXŽŠ‘òW©!_V^n¡¯ /«pdZ~È—]àšŸ7";3”ék›Và<·MòÌ.˜7¼ÐçôÈOË-íËËò¥åŽö
+ÎÎÍLò…F
+Íà¼|_ö¡9Ù!§-;7#gxfvî _º3.7¯Ð—“=$»ÐZ˜ç
+QÙ¡WؐP~Æ@ç1-=;'»ptÎÊ.Ìud:ÊåûÒ|CÓò³3†ç¤åû†ÏšWrdd:bs³s³ò”Аc„#(#oèèüì“œA…Nc.ÌOË
+IËœäs„å9&çû¼.Ý-¾ÐwpÁÀ´œ_zvaAa~(mˆÛ×õ΀ܼ!!œ•7<73­0;/×—rLIKÏ	%tsLÉÈIË’äËL’6À5§Äí–0§ÞØ0 ”ÊOËIò
+ed»ǏÙù¡ŒB¯§ã{Ç9žºy¹¡aݧ_D90äA8¤9ÿËð4óÌÏuÌuåæåžPedvA(É—–Ÿ]àÎHV~ž£®;ŸyYÞ
+îøӝ¼\Ðם#·í·«ÃéåŽ3Ci9ŽÀW
+§ŸÔ×Y]¡©E‘ª¸»¶as'ŽFïMœIÞªMÎPélÜD›WuhÉÙYë$N·zÂvé8)qôzLJ³º&J½Å“#Î	Xã%±js“)Ño§;XKpž¯&\î€9£Ü]äõrÎÊp¹3¬æ„š'm(\G†UÕQgÈ”êhÜ9L|áZ§µ::h¸hʳÀWo‹R8$ô¯ŽÔT9,)ŸÖÍé[ír™§I´²$V]¦{î+Š÷®â¾ROxq,ŽcÕ¥Ý|{×ߝþì¯<ü3qNÄA¾¿áú8È÷ã üÛ8ù"ORMgœ&@­Xð߉•|u±þ߈•pbþm±NlØ¿+á0VÂõ±’ï/ÆJø¤¸à/ÄJø÷b%ߟ•pƒX©áö=)\røÜ9$þ©p	C¸äû[á>I]/oü§C&\óýí	ÿ£!†É÷×C&|jÈäû+!>mÈäûWB&\˜6bÈ <Wí´):Âõ–ÿè×EG¾¿á†Ñ‘ï/EGø´Ñ‘ïïDGîb=i£œ|ðï>¾!ðÁøøþDàƒ½ÀçäØáÿhâuýû{AîæÝþÎïv÷îí&:»{wgÅÞ¿êuóþ}µÊi;ù_ÿø7»O‰NŒv:‡ÕÔnUeUÝáÄüK¿ËI&~úø…h:Ík¹÷;Ñ$¢Ä"ñH@‰HB2RŠ4¤#™ÈBPctj‚š¢f¨9jZ¢V¨µ£HÔµCíQԝ‰:¡Îè,Ô%¡®ŽýÝQÔÓû­OQ2JA½Pªãß>èlÔõCç þÞ=w†wåý›G6„;âý‹ÇP4å{ßžî>B£[ÎEcÑyè|tç¸áNt3ºÍG èSt	ZŠ.E×£ÛÑ:‚D‹Ñ[hº}ƒ¾EKÐ5h!ÚŽÞC_£5hú}‡Ž ›Ð]èY´ݍÆ;st¹3w»G?ƒžC/¢çÑnô:ˆÜÿžÀKèet3ë‡Ñè5ô*ÚëÌíçè´È™wî+P¹3!k÷Oònmk¼ÛÙÉÎÊøÌYÓÑ44ÍB3Ñt#š.DsÐEèúm%(‚&‚%8‚G¿¢c„@`B$$tœ@„L(„J„Fè„A˜„E4"gMˆ¦D3¢9:Š~$Z-‰VDkÂG´!ÚíˆöD¢#q&щèLœEtA?¡×‰$¢+эèNô z~"@ØDH&Rˆ^D*Ñ}€}ˆ³‰¾D?â¢?‘F¤D&"²ˆÄ@"mD÷ƒˆÁD1„È%òˆ¡Ä0"Ÿ(@?£_Їè#¢NŒ F£ˆÑÄâ\b,qq>q1Žã‰"¢˜ˆ%D)QFDÑÃÄb"QNT Ñ'D%#ªˆID5QCĉZb21…˜JL#¦3ˆ™Ä,âBb61­'."æ󈋉ùÄ%Äb!±ˆXL\J\F,!–ˈˉ+ˆåÄ•ÄUÄÕÄ
+âb%q-±Š¸ŽXM\O¬!n Ö777ëˆ[ˆõÄ­ÄmÄíÄââNâ.ânâb#q/±‰¸ØLÜO<@<Hl!"¶ÛˆGˆG‰ÇˆÇ‰'ˆ'‰íÄSÄâib'ññ,ñ±‹xžØM¼@¼H¼D¼L¼Bì!^%ö¯¯ooooïïïûˆ÷‰ýÄÄâCâ#âcââSâ ññ9qˆø‚ø’øŠ8L|M|C|K|G|O!~ Ž???¿¿Ljã$"	’$)’&’%9’'“")‘2©*©‘:i&i‘ÈÆäd²)ÙŒlN¶ [’­ÈÖ¤lC¶%Û‘íÉdGòL²Ù™<‹ìB&‘]Éndw²Ù“ô“Ò&ƒd2™Bö"SÉÞdòl²/ُ<‡ìO¦‘éd™I†È,r 9Ì&‘ƒÉr™Kæ‘CÉad>Y@’ÃÉäHr9šCžKŽ%Ï#Ï'/ Ç‘ar<YD“²„,%ËÈ(9œH–“d%#«ÈId5YCÆÉZr29…œJN#§“3È™ä,òBr69‡¼ˆœKÎ#/&ç“—È…ä"r1y)y¹„\J.#/'¯ —“W’W‘W“+ÈkÈ•äµä*ò:r5y=¹†¼\KÞHÞDÞL®#o!ד·’·‘·“È;È;ɻȻÉ{ȍä½ä&ò>ôÚOn&ï' $·‘[ɇÉmä#ä£äcäãää“ävô6z½‹ÞGo¢}äSäòir'ùù,ù¹‹|žÜM¾@¾H¾D¾L¾Bî!_%÷’¯‘¯“oo’o‘o“ïï’ï‘ûÈ÷ÉýääòCò#òcòòSò ùù9yˆü‚ü’üŠ<L~M~C~K~G~O! ’?’?‘?“¿¿’ÇÈ㢊¤(Š¦Š¥8Š§
+S"%Q2¥P*¥Q:eP&eQ¨ÆÔTª)ÕŒjNµ ZR­¨Ö”jCµ¥ÚQí©TGêLªÕ™:‹êB%Q]©nTwªÕ“òSʦ‚T2•Bõ¢R©ÞTêlª/Տ:‡êO¥QéT•I…¨,j 5Ê¦Qƒ©j•KåQC©aT>U@RéÔHj5Ý@¡Î¥ÆRçQçSPã¨05ž*¢Š©UB•ReT”š@M¤Ê©
+ª’Š¡ë¨*jUMÕPqª–šLM¡¦RÓ¨éÔj&5‹ºšMÍ¡.¢æR󨋩ùÔ%Ôj!µˆZL]J]F-¡–R˨˩+¨åÔ•ÔUÔÕÔ
+êj%u-µŠºŽZM]O­¡n ÖR7R7Q7Së¨[¨õÔ­ÔmÔíÔêêNê.ênêj#u/µ‰ºÚLÝO=@=Hm¡¢¶RSÛ¨G¨G©Ç¨Ç©'¨'©íÔSÔêij'õõ,õµ‹zžÚM½@½H½D½L½Bí¡^¥öR¯Q¯SoPoRoQoSïPïRïQû¨÷©ýÔÔêCê#êcêêSê õõ9uˆú‚ú’úŠ:L}M}C}K}G}O¡~ ŽR?R?Q?S¿P¿RǨã4¢	š¤)š¦š¥9š§Ó"-Ñ2­Ð*­Ñ:mÐ&mэèÆôtº)ÝŒnN· [Ò­èÖ´nC·¥ÛÑíétGúLºÝ™>‹îB'Ñ]éntwºÝ“öÓÚ¦ƒt2B÷¢SéÞtúlº/ݏ>‡îO§ÑétI‡è,z =Î¦уézKçÑCéat>]@ÒÃéôHz=šCŸK¥Ï£Ï§/ ÇÑaz<]DÓº„.¥Ëè(=žH—Ót%£«èIt5]CÇéZz2=…žJO£§Ó3è™ô,úBz6=‡¾ˆžKÏ£/¦çÓ—Ðè…ô"z1})}½„^J/£/§¯ —ÓWÒWÑWÓ+èkè•ôµô*ú:z5}=½†¾^KßHßDßL¯£o¡×Ó·Ò·Ñ·Óè;è;é»è»é{èô½ô&ú>z3}?ý ý ½…~ˆÞJ?Lo£¡¥£§Ÿ Ÿ¤·ÓOÑ;è§éô3ô³ôsô.úyz7ýý"ýý2ý
+½‡~•ÞK¿F¿N¿A¿I¿E¿M¿C¿K¿Gï£ß§÷ÓÐèéèéOèOéƒôgôçô!úúKú+ú0ý5ý
+ý-ýý=}„þ>JÿHÿDÿLÿBÿJ£3ˆ!’¡ša–áž̈ŒÄȌ¨ŒÆèŒÁ˜ŒÅ4b3g0M˜¦L3¦9Ó‚iÉ´bZ3>¦
+Ó–iÇ´g:0™3™NLgæ,¦“Äteº1Ý™LOÆÏ›	2ÉL
+Ó‹Iez3}˜³™¾L?æ¦?“Ƥ3L&b²˜Ì@&›Äfr˜!L.“Çe†1ùLSÈgF0#™QÌhfs.3–99Ÿ¹€Ç„™ñLSÌD˜¦”)c¢Ìf"SÎT0•LŒ©b&1ÕL
+gj™ÉÌf*3™ÎÌ`f2³˜™ÙÌæ"f.3¹˜™Ï\Â,`2‹˜ÅÌ¥ÌeÌf)³Œ¹œ¹‚YÎ\É\Å\ͬ`®aV2×2«˜ë˜ÕÌõÌæf-s#ss3³Ž¹…YÏÜÊÜÆÜÎl`î`îdîbîfîa62÷2›˜û˜ÍÌýÌ̃Ìæ!f+ó0³y„y”yŒyœy‚y’ÙÎ<Åì`žfv2Ï0Ï2Ï1»˜ç™ÝÌÌ‹ÌKÌËÌ+ÌæUf/óó:óó&óó6óó.ó³yŸÙÏ|À`>d>b>f>a>e2Ÿ1Ÿ3‡˜/˜/™¯˜ÃÌ×Ì7Ì·ÌwÌ÷Ìææ(ó#óó3óó+sŒ9Î"–`I–bi–aY–cyV`1+²+³
+«²«³k²ÛˆmÌžÁ6a›²ÍØæl¶%ÛŠmÍúØ6l[¶ÛžíÀvdÏd;±Ù³Ø.lÛ•íÆvg{°=Y?`m6È&³)l/6•íÍöaÏfû²ýØsØþl›Îf°™lˆÍb°Ùlv;˜Ía‡°¹l;”Ææ³l!;œÁŽdG±£Ù1ì¹ìXö<ö|övfdzEl1aKØR¶Œ²؉l9[ÁV²1¶ŠÄV³5lœ­e'³SØ©ì4v:;ƒÉÎb/dg³s؋عì<öbv>{	»€]È.b³—²—±KØ¥ì2örö
+v9{%{{5»‚½†]É^Ë®b¯cW³×³kØصììMìÍì:öv={+{{;»½ƒ½“½‹½›½‡ÝÈÞËnbïc7³÷³°²[؇حìÃì6ööQö1öqö	öIv;û»ƒ}šÝÉ>Ã>Ë>ÇîbŸgw³/°/²/±/³¯°{ØWÙ½ìkìëìì›ì[ìÛì;ì»ì{ì>ö}v?û{€ýýˆý˜ý„ý”=È~Æ~Îb¿`¿d¿b³_³ß°ß²ß±ß³GØØ£ììOìÏì/ì¯ì1ö8‡8‚#9Š£9†c9Žã9ÃœÈIœÌ)œÊiœÎœÉY\#®1wׄkÊ5ãšs-¸–\+®5çãÚpm¹v\{®ב;“ëÄuæÎâºpI\W®םëÁõäü\€³¹ —Ì¥p½¸T®7ׇ;›ëËõãÎáúsi\:—Áer!.‹À
+ä²¹AÜ`.‡ÂåryÜPn—Ïp…Üpn7’ōæÆpçrc¹ó¸ó¹¸q\˜ÏqÅ\„+áJ¹2.ÊMà&rå\WÉŸ*nWÍÕpq®–›ÌMá¦rÓ¸éÜn&7‹»›ÍÍá.âær󸋹ùÜ%Ün!·ˆ[Ì]Ê]Æ-á–r˸˹+¸åÜ•ÜUÜÕÜ
+în%w-·Š»Ž[Í]Ï­ánàÖr7r7q7së¸[¸õÜ­ÜmÜíÜîîNî.înîn#w/·‰»ÛÌÝÏ=À=Èmáâ¶rsÛ¸G¸G¹Ç¸Ç¹'¸'¹íÜSÜîin'÷÷,÷·‹{žÛͽÀ½È½Ä½Ì½Âíá^åör¯q¯soporoqosïpïrïqû¸÷¹ýÜÜîCî#îcîîSî ÷÷9wˆû‚û’ûŠ;Ì}Í}Ã}Ë}Ç}Ïá~àŽr?r?q?s¿p¿rǸã<â	žä)žæžå9žçó"/ñ2¯ð*¯ñ:oð&oñøÆü|¾)ߌoηà[ò­øÖ¼o÷åÛñíù|GþL¾ß™?‹ïÂ'ñ]ùn|w¾ß“÷óÞæƒ|2ŸÂ÷âSùÞ|þl¾/ߏ?‡ïϧñé|ŸÉ‡ø,~ ?Ïæñƒù~ŸËçñCùa|>_ÀòÃùüH~?šßˏåÏãÏç/àÇña~<_Äó¾„/åËø(?ŸÈ—ó|%ã«øI|5_ÃÇùZ~2?…ŸÊOã§ó3ø™ü,þB~6?‡¿ˆŸËÏã/æçó—ðø…ü"~1)¿„_Ê/ã/ç¯à—óWòWñWó+økø•üµü*þ:~5=¿†¿_ËßÈßÄß̯ãoá×ó·ò·ñ·óø;ø;ù»ø»ù{øü½ü&þ>~3?ÿ ÿ ¿…ˆßÊ?ÌoãáåãçŸàŸä·óOñ;ø§ùü3ü³üsü.þy~7ÿÿ"ÿÿ2ÿ
+¿‡•ß˿ƿοÁ¿É¿Å¿Í¿Ã¿Ë¿Çïãßç÷óðøùøùOøOùƒügüçü!þþKþ+þ0ÿ5ÿ
+ÿ-ÿÿ=„ÿ?ÊÿÈÿÄÿÌÿÂÿÊãH R Z`Và^,ˆ‚$È‚"¨‚&è‚!˜‚%4gM„¦B3¡¹ÐBh)´Z>¡ÐVh'´:…3…NBgá,¡‹$tº	Ý…BOÁ/[
+ÉBŠÐKHz}„³…¾B?á¡¿&¤B¦²„Â@![$r„!B®'†	ùBP(F#…QÂhaŒp®0V8O8_¸@'„…ñB‘P,D„¡T(¢Âa¢P.T•BL¨&	ÕBj…ÉÂaª0M˜.Ìf
+³„…ÙÂá"a®0O¸X˜/\",
+‹„ÅÂ¥ÂeÂa©°L¸\¸BX.\)\%\-¬®V
+×
+«„ë„ÕÂõÂáa­p£p“p³°N¸EX/Ü*Ü&Ü.lîîîîî6
+÷
+›„û„ÍÂýƒÂá!a«ð°°MxDxTxLx\xBxRØ.<%ìžv
+ÏÏ
+Ï	»„ç…Ý‹ÂKÂËÂ+ÂáUa¯ðšðºð†ð¦ð–ð¶ðŽð®ðž°Ox_Ø/| >>>>>
+Ÿ	Ÿ‡„/„/…¯„ÃÂ×Â7·ÂwÂ÷Âáá¨ð£ð“ð³ð‹ð«pL8Ž&0‰)Lc³˜Ã<0Æ"–°Œ¬b
+ëØÀ&¶p#ÜŸ›à¦¸nŽ[à–¸n}¸
+n‹Ûáö¸îˆÏĝpg|î‚“pWÜ
+wÇ=pOìÇlã NÆ)¸NŽq|6î‹ûáspœ†ÓqÎÄ!œ…à8ƒq‚sqŠ‡á|\€ñp<Ä£ðh<Ÿ‹Çâóðùø<‡ñx\„‹q—àR\†£xžˆËq®Ä1\…'áj\ƒã¸OÆSðT<
+OÇ3ðL<_ˆgã9ø"<ÏÃãùø¼ /Ä‹ðb|)¾/ÁKñ2|9¾/ÇWâ«ðÕx¾¯Ä×âUø:¼_×àðZ|#¾	ߌ×á[ðz|+¾
+ߎ7à;ðø.|7¾oÄ÷âMø>¼ߏÀâ-ø!¼?Œ·áGð£hº?†ÇO Ѓè)ü$ÚŒîG;ðv4=‰à§ðü4ºïÄÏàgñsx~ïFOãð‹ø%ü2~ïÁ¯â½èQô~
+¿ŽßÀoâ·ðÛøü.~mÃûðûx?þ ÀâðÇøü)>ˆ?ßãCøü%þ
+Æ_ãoð·ø;ü=>‚ÀGñø'ü3þÿŠáã"	‘)‘‘9‘‹¢(‰²¨ˆª¨‰ºhˆ¦h‰ÄÆâb±©ØLl.¶[Š­ÄÖ¢Ol#¶Û‰íÅbGñL±úAì,ž%v“Ä®b7±»ØCì)úÅ€h‹A1YL{‰©bo±x¶ØWì'ž#öÓÄt1CÌCb–8@(f‹ƒÄÁbŽ8DÌóÄ¡â01_,Åáâq¤8J-ŽÏÇŠç‰ç‹ˆãÄ°8]&‰ÅbD,KÅ21*N'Šåb…X)ÆÄ*q’X-Öˆq±Vœ,N§ŠÓÄéâq¦8K¼Pœ-Î/çŠóÄ‹Åùâ%âq¡¸H\,^*^&.—ŠËÄËÅ+Äåâ•âUâÕâ
+ñq¥x­¸J¼N\-^/®o׊7Š7‰7‹ëÄ[Äõâ­âmâíâññNñ.ñnñq£x¯¸I¼OÜ,Þ/> >(n·Š‹ÛÄGÄGÅÇÄÇÅ'Ä'ÅíâSâñiq§øŒø¬øœ¸K|^Ü-¾ ¾(¾$¾,¾"î_÷Š¯‰¯‹oˆoŠo‰o‹ïˆïŠï‰ûÄ÷ÅýââñCñ#ñcññSñ ø™ø¹xHüBüRüJ<,~-~#~+~'~/Š?Š?‰?‹¿ˆ¿ŠÇÄã’‰”(‰–‰•8‰—	K¢$I²¤Hª¤IºdH¦dI¤ÆÒR©©ÔLj.µZJ­¤Ö’Oj#µ•ÚIí¥RGéL©“ÔY:Kê"%I]¥nRw´Rê!õ”üè6) ÙRPJ–R¤^RªÔ­’ú kÑWÒÙR_©ŸtŽÔ_J“ÒÑ-R†”)…Ðr)K 
+”²¥AÒ`)G"åJyÒPiZ-åKR¡4\!”FI£¥1Ò¹ÒXé<é|éiœ–ÆKER±‘J¤R©LŠJ¤‰R¹Tn•*¥˜T%M’ª¥).ÕJ“¥)ÒTiš4]š!Í”fIJ³¥9ÒEÒ\ižt1Z&Í—.‘ «ÐÕÒBi‘´XºTºLZ"-•–I—KWHË¥+¥«¤«¥Ò5ÒJéZi•t´Zº^Z#Ý ­•n”n’n–ÖI·Hë¥[¥Û¤Û¥
+ÒҝÒ]ÒÝÒ=ÒFé^i“tŸ´Yº_z at zPÚ"=$m•–¶IHJIKOHOJÛ¥§¤ÒÓÒNééYé9i—ô¼´[zAzQzIzYzEÚ#½*í•^“^—ސޔޒޖޑޕޓöIïKû¥¤Ò‡ÒGÒÇÒ'Ò§ÒAé3éséô…ô¥ô•tXúZúFúVúNú^:"ý •~”~’~–~‘~•ŽIÇe$2)S2-32+s2/2–EY’eY‘UY“uِMÙ’ɍå3ä&rS¹™Ü\n!·”[É­eŸÜFn+·“ÛËäŽò™r'¹³|–ÜEN’»ÊÝäîr¹§ì—²-åd9Eî%§Ê½å>òÙr_¹Ÿ|ŽÜ_N“Óå9SÉYò y œ-’Ë9ò9WΓ‡ÊÃä|¹@.”‡Ë#ä‘ò(y´<F>W+Ÿ'Ÿ/_ “Ãòx¹H.–#r‰\*—ÉQy‚<Q.—+äJ9&WÉ“äj¹FŽËµòdyŠ<Už&O—gÈ3åYò…òlyŽ|‘<Wž'_,Ï—/‘ÈåEòbùRù2y‰¼T^&_._!/—¯”¯’¯–WÈ×È+åkåUòuòjùzy|ƒ¼V¾Q¾I¾Y^'ß"¯—o•o“o—7ÈwÈwÊwÉwË÷Èå{åMò}òfù~ùùAy‹ü¼U~XÞ&?"?*?&?.?!?)o—Ÿ’wÈOË;ågägåçä]òóònùùEù%ùeùyüª¼W~M~]~C~S~K~[~G~W~OÞ'¿/ï—?ÈÊÉËŸÈŸÊåÏäÏåCòò—òWòaùkùù[ù;ù{ùˆüƒ|TþQþIþYþEþU>&WB(¤B)´Â(¬Â)¼"(XI‘EQMÑC1Ki¤4VÎPš(M•fJs¥…ÒRi¥´V|J¥­ÒNi¯tP:*g*”ÎÊYJ%	=¤tUº)Ý•JOů[	*ÉJŠÒKIUz+}”³•¾J?奿’¦¤+J¦R²”Ê@%[¤Vr”!J®’§U†)ùJR¨WF(#•QÊheŒr®2V9O9_¹@§„•ñJ‘R¬D”¥T)S¢Êe¢R®T(•JL©R&)ÕJWj•ÉÊeª2M™®ÌPf*³”•ÙÊå"e®2O¹X™¯\¢,P*‹”ÅÊ¥ÊeÊe©²L¹\¹BY®\©\¥\­¬P®QV*×*«”ë”ÕÊõÊåe­r£r“r³²N¹EY¯ÜªÜ¦Ü®lPîPîTîRîVîQ6*÷*›”û”ÍÊýÊʃÊå!e«ò°²MyDyTyLy\yByRÙ®<¥ìPžVv*Ï(Ï*Ï)»”ç•ÝÊÊ‹ÊKÊËÊ+ÊåUe¯òšòºò†ò¦ò–ò¶òŽò®òž²Oy_Ù¯| P>T>R>V>Q>U*Ÿ)Ÿ+‡”/”/•¯”ÃÊ×Ê7Ê·ÊwÊ÷Êåå¨ò£ò“ò³ò‹ò«rL9®"•PI•Ri•QY•SyUP±*ª’*«Šªªšª«†jª–ÚHm¬ž¡6Q›ªÍÔæjµ¥ÚJm­úÔ6j[µÚ^í vTÏT;©Õ³Ô.j’ÚUí¦vW{¨=U¿Pm5¨&«)j/5Uí­öQÏVûªýÔsÔþjšš®f¨™jHÍR¨Õlu:XÍQ‡¨¹jž:T¦æ«j¡:\¡ŽTG©£Õ1ê¹êXõ<õ|õuœVÇ«Ej±QKÔRµLªÔ‰j¹Z¡Vª1µJ¤V«5j\­U'«SÔ©ê4uº:C©ÎR/Tg«sÔ‹Ô¹ê<õbu¾z‰º@]¨.R«—ª—©KÔ¥ê2õrõ
+u¹z¥z•zµºB½F]©^«®R¯SW«×«kÔÔµêêMêÍê:õu½z«z›z»ºA½C½S½K½[½GݨޫnRïS7«÷«¨ª[Ô‡Ô­êÃê6õõQõ1õqõ	õIu»ú”ºC}ZÝ©>£>«>§îRŸWw«/¨/ª/©/«¯¨{ÔWÕ½êkêëêê›ê[êÛê;ê»ê{ê>õ}u¿úz@ýPýHýXýDýT=¨~¦~®R¿P¿T¿R«_«ß¨ßªß©ß«GÔÔ£êêOêÏê/ê¯ê1õ¸†4B#5J£5Fc5Nã5AÚ¨Iš¬)šªiš®š©YZ#­±v†ÖDkª5Óšk-´–Z+­µæÓÚhmµvZ{­ƒÖQ;Së¤uÖÎÒºhIZW­›Ö]ë¡õÔüZ@³µ –¬¥h½´T­·ÖG;[ë«õÓÎÑúkiZº–¡ej!-K 
+Ô²µAÚ`-G¢åjyÚPm˜–¯h…Úpm„6R¥ÖÆhçjcµó´óµ´qZX¯iÅZD+ÑJµ2-ªMÐ&jåZ…V©Å´*m’V­Õhq­V›¬MѦjÓ´éÚm¦6K»P›­ÍÑ.Òæjó´‹µùÚ%Úm¡¶H[¬]ª]¦-Ñ–j˴˵+´åÚ•ÚUÚÕÚ
+ím¥v­¶J»N[­]¯­ÑnÐÖj7j7i7kë´[´õÚ­ÚmÚíÚííNí.íním£v¯¶I»O۬ݯ= =¨mÑÒ¶jkÛ´G´GµÇ´Çµ'´'µíÚSÚíim§öŒö¬öœ¶K{^Û­½ ½¨½¤½¬½¢íÑ^Õöj¯i¯kohojoiokïhïjïiû´÷µýÚÚíCí#ícííSí ö™ö¹vHûBûRûJ;¬}­}£}«}§}¯Ñ~ÐŽj?j?i?k¿h¿jÇ´ã:Ò	Ô)ÖÕ9×ë¢.鲮誮éºnè¦néôÆúz½©ÞLo®·Ð[ê­ôÖºOo£·ÕÛéíõzGýL½“ÞY?Kï¢'é]õnzw½‡ÞS÷ëÝÖƒz²ž¢÷ÒSõÞzýl½¯ÞO?Gﯧééz†ž©‡ô,}€>PÏÖéƒõ}ˆž«çéCõaz¾^ êÃõúH}”>Z£Ÿ«ÕÏÓÏ×/ÐÇéa}¼^¤ë½D/ÕËô¨>AŸ¨—ëz¥Ó«ôIzµ^£ÇõZ}²>EŸªOÓ§ë3ô™ú,ýB}¶>G¿HŸ«ÏÓ/Öçë—èô…ú"}±~©~™¾D_ª/Ó/ׯЗëWêWéWë+ôkô•úµú*ý:}µ~½¾F¿A_«ß¨ß¤ß¬¯ÓoÑ×ë·ê·é·ëô;ô;õ»ô»õ{ôú½ú&ý>}³~¿þ€þ ¾EHߪ?¬oÓÑÕÓןПԷëOé;ô§õú3ú³úsú.ýy}·þ‚þ¢þ’þ²þŠ¾GUß«¿¦¿®¿¡¿©¿¥¿­¿£¿«¿‡GOèûô÷õýúúýCý#ýcýýSý þ™þ¹~HÿBÿRÿJ?¬­£«§¯ÑЏê?ê?é?ë¿è¿êÇôã2ƒ4(ƒ6ƒ58ƒ7¢!²¡ª¡ºa¦aŒÆÆF£©ÑÌhn´0Z­ŒÖ†Ïhc´5ÚíFGãL£“ÑÙ8Ëèb$]nFw£‡ÑÓðÃ6‚F²‘bô2RÞFãl£¯ÑÏ8Çèo¤éF†‘i„Œ,c€1ÐÈ6ƒcˆ‘käCaF¾Q`ÍÆHc”1ÚcœkŒ5Î3Î7.0Æac¼Qd£Ä(5ÊŒ¨1Á˜h”F¥3ªŒIFµQcčZc²1ŘjL3¦3Œ™Æ,ãBc¶1ǸȘkÌ3.6æ—Œ…Æ"c±q©q™±ÄXj,3.7®0–WWW+ŒkŒ•ÆµÆ*ã:cµq½±Æ¸ÁXkÜhÜdÜl¬3n1Ö···Œ;Œ;»Œ»{ŒÆ½Æ&ã>c³q¿ñ€ñ ±ÅxÈØj<ll31537ž0ž4¶O;Œ§Æ3ƳÆsÆ.ãyc·ñ‚ñ¢ñ’ñ²ñŠ±ÇxÕØk¼f¼n¼a¼i¼e¼m¼c¼k¼gì3Þ7öŒŒOŒOƒÆgÆçÆ!ããKã+ã°ñµññ­ññ½qÄøÁ8jühüdülübüj3Ž›È$LÒ¤LÚdLÖäLÞLlŠ¦dʦbª¦fê¦aš¦e62›g˜M̦f3³¹ÙÂli¶2[›>³ÙÖlg¶7;˜Í3ÍNfgó,³‹™dv5»™ÝÍfOÓoLÛšÉfŠÙËL5{›}̳;f?󳿙f¦›f¦2³Ìæ@3Ûd6sÌ!f®™g5‡™ùfYh7G˜#ÍQæhsŒy®9Ö<Ï<ß¼Àg†Íñf‘YlF̳Ô,3£æs¢YnV˜•f̬2'™Õf7kÍÉæsª9ÍœnÎ0gš³ÌÍÙæó"s®9ϼ؜o^b.0š‹ÌÅæ¥æeæs©¹Ì¼Ü¼Â\n^i^e^m®0¯1Wš×š«ÌëÌÕæõæós­y£y“y³¹Î¼Å\oÞjÞfÞnn0ï0ï4ï2ï6ï17š÷š›ÌûÌÍæýææƒæó!s«ù°¹Í|Ä|Ô|Ì|Ü|Â|ÒÜn>eî0Ÿ6wšÏ˜ÏšÏ™»ÌçÍÝææ‹æKæËæ+æóUs¯ùšùºù†ù¦ù–ù¶ùŽù®ùž¹Ï|ßÜo~`0?4?2?6?1?5šŸ™Ÿ›‡Ì/Ì/ͯÌÃæ×æ7æ·æwæ÷æóó¨ù£ù“ù³ù‹ù«yÌ<n!‹°H‹²h‹±X‹³xK°°%Z’%[Š¥Zš¥[†eZ–ÕÈjla5±šZͬæV«¥ÕÊjmù¬6V[«ÕÞê`u´Î´:Y­³¬.V’ÕÕêfu·zX=-¿°l+h%[)V/+Õêmõ±Î¶úZý¬s¬þVš•neX™VÈʲX­lk5Øʱ†X¹Vž5Ôfå[V¡5Üa´FY£­1Ö¹ÖXë<ë|ëkœ¶Æ[EV±±J¬R«ÌŠZ¬‰V¹UaUZ1«ÊšdU[5Vܪµ&[S¬©Ö4kº5ÚiͲ.´f[s¬‹¬¹Ö<ëbk¾u‰µÀZh-²[—Z—YK¬¥Ö2ërë
+k¹PS/›VU©äÒ*ÂEÕ±J.œ(Ù´ñÕ‘É6ì\Z¬4V™È…¥˜Q­.ª­()L‹êë8£8E*ã¸èD•Í,
+»"‹E¦#?çB ÀP0â8T/(r¢Ê…@H¢dC	‰¯4Pª´Rêe•ž¨JŠbax(mð l §¬¾N®¦Ëœ6;-/Ž°Q¯à²Á’(X’°$šp]6èM”dö 2:AÔ cB}]ÜP«‰'=”VG"•åáÊâh›.ªGØr¯rö+oðÀæ$TîtŽc=]î|°¹‰ñ•‰ñ¹
+ÇW6Ÿ›_™ppeØý¿ãªŽ9†
+U–R‘ÊR.Œñy	ãc^!ç•ÕV–†«k+Êõq9Öð‰ÍOèPÐ!¿¡Õ
+uÈOèP(
+£j¼B,hàÆšn,l(-ÞPZaBL<á‘BwJãî”OLimbJ‡ƒUµ`Õð„Uµ^Á¯ŽV–2µî§<ü$k>qÃaêka׌l í”õÑ
+êÓêë옄­Ó½©_ÆÓOT™òXei
+W[íѳW({Bé‡2 ¥
+eÊd(S ìe*”iP¦C™e&”!(³e*à§~*à¦n*à¦n*à¦n*à¦n*à¦n*à¦nj“W«®dbîg¢-
+lNì4ÀNì4ÀNì4ÀNì4ÀNì4ÀNì´3Üì­ÇL{Ó;°Ó;°Ó;°Ó;°Ó;°Ó;°ÓÁîtðwø;ð3 ?ð3 ?ð3 ?ð3 ?ð3 ?ð3 ?ð3 ?ð3?ð3?ð3?ð3?ð3?ð3?ð3?ð3?ðC€üà‡ ?ø¡ ; ±ëK½Z=è!@zÐC€ô gz gz gzXŸÖgõY€Ÿ•ŠÓÜ“$±ÉÃ'ª\Z(Q†#‰³.¯¦<\S–¨Çê랏Pö„Òe JÊ ”ÉP¦@ÙÊT(Ó L‡2ÊL(CP&¼áï	ø=¿'à÷üž€ßð{~Ï© áY]Óàz€&=A“ž IOФ'hÒ4ñƒ&~ÐÄšøA?hâMü ‰<áOøÁ~À÷¾ðý€ï|?à ? øÀ ~ ð€HæÓ¼<RS3@ (  @ €P  
+Ø €
+Ø €
+Ø €
+Øà `¾
+ø6àÛ€o¾
+ø6àÛ€ü à?øAÀ~ðƒ€ü à?øAÀ~ðƒ€ŸøÉ€ŸøÉ€ŸøÉ€ŸøÉ€ŸøÉ€ŸøÉ€ŸøÉ€ŸøÉ€Ÿø)€Ÿø)€Ÿø)€Ÿø)€Ÿø)€Ÿø)€Ÿø)€Ÿø)€a€ ?„~üø!ðCà‡0Àa€ ?„~üø!ðCà‡0Àa€ *àC8à‡pÀá€Â?„~üø!ðC8à‡pÀá€Â*à§~àCHà‡À!B?„~	üø!$ðCHà‡À!Bà§~:àCXà‡°ÀaÂ?„~üø!,ðCXà‡°ÀaÂ?„~üø!,ðCXà‡°ÀaÂ?„~üø!ðCà‡0Àa€ ?„~üø!ðCà‡0Àa€ ?„~ u?кhÝ´îZ÷­ûÖý!y!Äîb÷‘ûÈý@ä~ jVŠPZžìþÖöxÁ£T·æ½ôð^BРņ2e2”)Pö’Ëb±‰Þ/ö7•e:”PfB‚2რÐi è4 t :
+ €N@§ž EÏ^P¦B	ø@¢ Ñ h H4 $ 
+ ‰ü~É!)ï?0Vo0i ˜4 L &
+ “€IÀ¤`Ò 0i ˜4 L &
+ “€IÀ¤`Ò 0i ˜4 ü à‘€H@¤ Ò i ˆ4 D "
+ ‘€H@¤ Ò i ˆ4 D "
+ ‘€H@¤ Ò i ˆ4 D "
+ €@@  Ê e 1 „ B !€@ˆ Ä Q ˆ( D ¢	 Ñ€h)!&«ŒÕÈÅÑHu¤&Zã=á´òª²°W•±x¤<
+K¡ªš¨“šzÍ|(ï³cP“ò*¢nbxÞ 3Ϋˆ”&:éQ§ûIXŒ‡E§Gâaf@Ø	Š9Œxôçåà1…eNv™Á᪪0›®_&‡Ô’¹µä¨(C£T~YŒ)ˆ–V„©Âp-ÚPCË¢T†ówhMTÊn ‰
+êžqø„¤HC³#ufGë̶jOš0ÊOw*ubŠ#åñ0²èé®Iî˸g’+Œ™è™Tî™”ðAzYYKNr±„]TuYŒ­qêÉxwl|ªÊ±«Èùë<21×áRC_«§¨)ÅÎVmÃÙŠ˜­„™=XOÍž<x	֐A Ó¦재7®î¬gȐ @>€|0 ù` ˆ# Ä â q€8@ Ž G ˆ# Ä â q #@F "	 ‘€H #@F€Œ0 D€Œ0 a 2 d„ÈY€ŸøY€ŸøY€ŸøY	|r@r@r@r@¨Ë겁ºl .r@r@HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -2?2?øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+?xËÞ²·lHülHülHülà3ø̆ÄφÄφÄÏž³çlà9xΞ³çlà9?????????????????øÖ¾µ!ñ³!ñ³!ñ³!ñ³màcøØ>¶!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³!á³á؆{`@@@@@@@@@@@8߆ІІÐÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞï÷ƒÀûAàý ð~x?¼Þï÷ƒÀûAàý ð~x?¼Þï÷ƒÀûAàý ðaø0¨k½€ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aà¿ ð_ø/üþÿÿ‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼ÞÂ…gx/¼„ó<çyÎó œçA8σpžá<Ây„ó<çy0½N.ØçyÎó œçA8σpžá<Ây„ó<çwÎï œ¿A8ƒpþáü
+Âù„ó7ço0³nüÿkï\ ä:ê3ß=5=š—F3zÙ²–…,òÔ¿ûުƞÛ}« CXyv½x¤IF1š±ñdž¬mœ`, <ì !^! ã@â%°&É.19Iv³$Á,aW'1V¶¯·ºë×òÅg²g÷lΞ3nþ}{ªïW÷võ÷Õý®êý…ø7ø7ø7ø7ø7ø7ø7ø7ø7Wx5Wx5WSø)åº"åz!åº åz åz åz åz åz åz åz åz åz åz åz åz åz åz åz åz …ÿRø/…ÿRø/…ÿRø/…ÿRø/…ÿRø/…×Rx-…×Rx-…×Rx-…×Rx-…×Rx-môöËqÁk)¼–Âk)¼–Âk)¼–Âk)¼–Âk)¼–Âc)óóžJá©žJá©žJá©žJá©žJÓÞ~é7<•ÂS)<•ÂS)<”Â3)<“Â3)<“Â3)<“Â3)<“Â3)<“Â3)<“Â3)<“Â3)óã”ùqÊ|8eþ›2M™¯¦ÌSSæ¥)óÍÞIá•ÞHá…”ùZÊ<-å{Ÿò}Jù>¥|ŸR¾Oiïûä{íÙó””yJÊ<ÅÀSž2𔁧óNüÓÐ?o杦ÝÛ_FmQÛÔœê¨ñx
+¼gà=ïxÏÀ{†ã7ðž÷¼gà=ïxÏÀ{Þ3ðž÷¼gà=ïxÏÀ{Þ3ðž÷óKÃüÒ0¿4Ì/
+óKÃçføÜŸ›ás3|n†ÏÍð9™ÞçÄ|Ò1/rŒ_ÇøuŒ[Ç8u\:ôÐqÝ縎sŒ[Çuœã:Îqýæ¸~s\¿9®ß\³·G¥?Œ{Çu›ãºÍq½æ¸Ns\—9®Ë×cŽë1Ç÷áßývè·C¿úíø9ôÛ¡ßývè·C·ºíÐmÇøwŒÇøwŒÇøwŒ{ÇxwŒwÇxwŒwÇxwŒwÇøvŒoÇøvŒoÇøvŒoÇøvŒoÇøvŒoÇxvq<ëÉxݪ¦
+µNmPjJ5TKmR3j‹Ú¦öðÕÇÚ¿~üø-ð[à·Àoß¿~üø-ð[à·Àoß¿
+~ü6ømðÛàç´ÏiŸÓ>§}Nû¼×žþæô7§¿9ýÍéoNsúÛû|rú›Ó_¾߁ïÀwà;ðø|¾߁ïÀwà;ðø|¾߃ïÁ÷à{ð=ø|¾߃ïÁ×¹ÿZã_kük­ñ¯5þµÆ¿ÖøÖßZã[k|ko­ñ­5¾µÆ·ÖøÖßZã[k|ko­ñ­5¾µÆ·ÖøÖßZã[küj_­ñ«5~µÆ¯ÖøÕ¿ZãWküj_­ñ«5~µÆ¯ÖøÕ¿ZãWküj_­ñ«5~µÆ¯ÖøÕ¿ZãWküjO­ñ©5>µÆ§ÖøÔŸZãSk|jO­ñ©5>µÆ§ÖøÔŸZãSk|jO­ñ©5>µÆ§ÖøÓZãOküi?­ñ§5þ´Æ—ÖøÒ_ZãKk|i/­ñ¥5¾´Æ—ÖøÒ_ZãKk|i/­ñ¥5¾´Æ—ÖøÒ_ZãKk|i/­ñ¥5¾´Æ—ÖøÒ_ZãKk|i/­ñ¥5¾´Æ—ÖøÒ_ZãKk|i/­ñ¥5¾´Æ—ÖøÒ_ZãKk|i/­ñ¥5¾´Æ—ÖøÒ_:Tð-ø|¾ß‚oÁ·à[ð›à7Áo‚ß¿	~ü&øMð›à7Áo‚ß¿	~ü&øMðÑYüi?­ñ§5þ´ÆŸÖøÓZãOküi?­ñ§5þ´ÆŸÖøÓZãOküi?­ñ§5þ´ÆŸÖøÓZãOküi?­ñ§5þ´ÆŸÖøÑ?ZãGküh­ñ£5~´ÆÖøÑ?ZãGküh­ñ£5~´ÆÖøÑ?ZãGküh­ñ£5~´ÆÖøÑ?ZãGküh­ñ£5~´ÆÖøÑ?ZãGküh­ñ£5~´ÆÖøÑ?ZãGk|h­ñ¡5>´Æ‡ÖøÐZãCk|h­ñ¡5>´Æ‡ÖøÐZãCëFOŸ=øüèCk|h­ñ¡5>´Æ‡ÖøÐZãCk|d¬ñ‘5>r¨¼NÐáD÷Þo©MjFmQÛÔœê¨ô=NÐã=NÐã=NÐã=NÐã=NÐã=NÐã=NÐã=NÐã=Æ/×øå¿\ã—kür_®ñË5~¹Æ/×øå¿\ã—kür_®ñÉ5>¹Æ'×øäŸ\ã“k|rO®ñÉ5>¹Æ'×øäŸ\ã“k|rO®ñÉ5þ¸Æ×øã\㏇
+.ºŒ_®ñË5~¹Æ/×øå¿\ã—ë]Æ7×øæß\ã›k|so®ñÍ5¾¹Æ7×øæ¿[ãwkünß­ñ»5~·ÆïÖøÝ¿[ãwkünß­ñ»5~·ÆïÖøÝ¿[ãwk|íPÙ?z™ —	z™ —	z™ —	z™ —	z™ —	z™ s	:— s	:— s	:—d½÷q^йKйKйKйÃ—ÖøÐßSã{jü@¨SæE)ó¢”yQʼ¿0Ô„Êþ8ÿø€Pãj|@¨ñ5>`¨–Ú¤fÔµMÍ©ô›Ï'åóÁOÔø‰¡‚Ï烿*øÌgðCŸùLÊ|&e>“Ãç9|žÃç9|žÃç9|žÃç9|žÇûŠ¡6©µEíáäTGÇ™£9z£9z£9:£9:£9:£9:£9:£9:£9:£9¼ŸÃû9¼ŸÃû9¼ŸÃû9¼ŸÃû9¼ŸÃ÷9|ŸÃ÷9|ŸÃ÷9|ŸÃ÷9|ŸÃ÷9|ŸÃ÷9|ŸÃ÷9|Ÿ×{¸'¼ŸÃû9¼ŸÃû9¼ŸÃû9ߧœïSïçð~ïçð~ïçð~ïçð~ïç\åðÿçðÿçðÿçðÿçðÿçð~ïçð~ïçð~ïçð~ïçð~ïçð~ïçð~ïçð{¿çðyä|¿òÞ÷‹ë…œë…œë…ÍáÑÍáÑÍáÑÍáÑÍáÑÍáÑÍáÑÍáќ녜녜녜녜녜녜녜녜녜녜녜녜녜ë…_.Ǘ˹>ȹ>ȹ>ȹ>ȹ>ȹ>p𔃧<åà)O9xÊÁSžrð”›ìí/£¶¨mjNuÔØ_O9xÊÁSžrð”cÞêà+_9øÊÁW¾r𕃯|åà+_9øÊÁW¾rð•cÞ꘷:øËÁ_þr𗃿üåà/9øË1ouð˜ƒÇ<æà19xÌÁcsð˜ƒÇ<æà19xÌÁcÜÏÐsð˜ƒÇ<æà19xÌÁcsð˜ƒÇ<æà19xÌÁcsð˜ƒÇ<æà19xÌÁcsð˜ƒÇ<æ˜Ç:øÌÁg>sð™ƒÏ|æà3Ÿ9øÌÁg>sð™ƒÏ|æð—þ’Ã_rÌ£ó(Ç<Ê1rÌ£ó(Ç<Ê1rÌ£|éàKÇ|Ø1vð§c>ì˜;æÃÎøWuWî\Ë«âzùkºeèU½¿¾>tMïY|ó1îwiîw…
+>ó1Ç|Ì1ã>X¨à3sÌÇó1Ç|Ì1㾙澙澙æ¾Y¨à3ãþ™æþ™vè÷É4÷É4÷ÉBeÿèC¸o*ûG¸¦¹*LJp?Ms?Ms?Ms?Ms?Ms?Ms?Ms?Ms?Ms?Ms?Ms?-TðÑî«iî«…
+>zÀ}6Í}6Í}6Í}6Í}¶PÁG/zÁ}7ízzŸÄ}7Í}7Í}·PÁÇOâ>œæ>œæ>œæ>œæ>œæ>œæ>œæ>œæ>œæ>\¨àã'q_N÷îË9®c~’ÃOr\×8ü$‡Ÿäð“~’ÃOrøI?Éá'9ü$Ç}‡¯ä𕾒ÃWrøJÎëWÇ/ڵݫ ã*9\%‡«äp•®’G­=jíQkZ{ÔÚ£Öµö¨µG­ýdoµEmSsª£Æ£ñ¨µG­=jíQkZ{ÔÚ£Îuö¨³G=êìQg{ÔØ£Æ5ö¨±G=jìQc{ÔØ£Æ5ö¨±—LJ{ÔØ£Æ5ö¨±G=jìQc{ÔØ£Æ5ö¨±G=jìQc{ÔØ£Æ5ö¨±G=jìQ_úzÔ×£¾õõ¨¯Gm=jëQ[ÚzÔÖ£¶µõ¨­Ge=êê“Þ~é?jêQSšzÔÔ£¦5õ¨©GM=jêQSšzÔÔ£¦5õ¨©GM=jêQSšzÔÔ£¦5õ¨©GM=jêQSšzÔÔ£¦5õ¸7ÃãfxÜ›á¹Šñ¨§G==êéQOzzÔÓ£žÞöð8^ÔÓ£žõô¨§G==êéQOzzÔÓ£žõô¨§G==W[ž«-ÏÕ–çjË£®uõ¨«G]=êêQWºzÔÕ£®uõ¨«G]=êêQWºzÔÕ£®uõ¨«G]=êêQUªzTÕ£ªUõ¨ªGU=ªêQUªzTÕ£ªUõ¨ªGU=jêQSšzÔÔ£¦5õ¨©GM=jêQSšzÔÔ£¦5õ¨§G==êéQOzzÔÓ£šÕô¨¦G5=ªéQMjzTÓ£šÕô¨¦G5=ªéQMjzTÓ£šÕô¨¦çî‹çî‹G'=úèÑG>úž>r×Ås×Ås×Ås×ÅÇ».2u4TMjÚ &Ô”j¨–Ú¤fÔµMÍ©=\«_ëás—gg¦â% uººû/“Û¿~½o~õë—:ÿvüÕá¥ÙÚ°;©-éD½Í™Ÿo[ºf¡´I+:/tVè¬ÐY¡³Bg…½×õÀá¹#Ýà°ÙýGÀ®sŠêô·Î)ªƒRçÕ[C³oØ??}8¯€S§Nƒ“ÒàCið¡4øP 5 at j€Ô ©Á‡Ñàø_ƒãk€Û ·nnnnn‘&à'à'à'à'à'à'à'à'à'à'à§à§à§à§à§ì/e)ûKÙ_ÊþRögØŸa†þúoè¿¡ÿ†þúoÀ3àðx<žÏ‚gé¿¥ÿ|¾ß‚oÁ·à[ð-ø|¾¿	nÜ&¸Mp›àf“«÷/Ì/9¾#KÓ‹×òªôÏÏ-N³Aײtàèì±ÐŠMz–ѳ,ëŸY8r°ß-/.ð
+}ÊèSÆ9iÑ·}kÑ·}kÑ·À9ísÚ眣œs”s.rÎE$fÑ™žìmµNmPjJ5TKmR[Ô65§:j<>­'_x`qúuKË‹¼ °Xi
+°6#×ÌÎ[Zœ>vŒ× W¡¶_öã;ÏG.ÎÛ¿8w´óO¶ó"]Np
+„=z ô Ô¡èТ†5´¨%š=¶4wxz	ÚÕ£®ƒ\¹Î9¨Óƒz£6=?{ô[àC‚Ôuðëà×Á¯ƒ]jèRC—ºÔÐ¥†.5t©?´©¡M
+mjhSC›ºÔ
+7Øù¢š[œ
+2Ò}ÂjPÀÔ0 N²¡°‹Ù¹ƒ‡–.Zœåù±‘sW÷žZv„
+ÞÇ¡ÁˆFÔ0¢†uÊ¡¥ô'¥?)ýIéOJ`P
+ƒjTàÕ0¨†A5ª
+ø|UèFÕ0ª†Q5ŒªaT
+£jUèFÕ0*a”B¥F)„Q†Úš^\\¸f~öÀÒªî³å£ÃݺØ9ñ—3׉Ïö…qˆf3|{št¹I—›t¹I—›t¹I—›t¹I—›t¹I—3ºœÑåŒ.gt9ã”Á´dI†jFÏôlß±Y^¤ÈèDF'`]
+ëjXWú„J
+¡’B¨d¨±ýmnú`˜Hvá\´èK‹sÑâ\´èF‹n´èF‹n´èF‹n´èF›n´éF›n´éF›sÑæ\´Áoƒß¿
+~ü6ømðÛà·Áoûx.ÃL«32†{ËGW÷žvÇÇ™V!rf£3Jâ~rú…‘9)dN
+™“B椐9)dN
+™“B椐9)dNŠî‰—ã¼8΋ã¼8ðø|¾߁ïÀwà;ðø|¾߃ïÁ÷à{ð=ø|¾߃ïÁ÷à{ð¹Ú—C¡v&îÓq
+fî#³o˜;&èKsg^kÎ>ºtm˜~\ìäÉYZ5;?{¸Z³ìgƒÇ–÷æœî½Ð¦æÔˆM¶¤%)dI
+Y’¡¦£Ó¡‹sÇ^î/Zj“Ú¢¶ƒ/]Xì¨ðôüpxr¨Ï;=_›>rp>~{	Â#…ðH!<R5ž_88·º“Ë<ÄÓ…Åѹ#KkœýZh‰à)„G
+á‘Bx¤)„G
+á‘¡Ö‡–…/üp!Å+ô I$™ôH!=RH”Nzä±¹ÃsóÓ‹lÓ$™ôH!=RHÒ#…ôÈPCáêàâò™ÏQ&?Rȍr#…ÜH!7Rȍr#…ÜH!7Rȍr#…ÜH!7Rȍr#…ÜH!7Rȍr#…ÜH!7Rȍr#Cõ#³¯_ž»:ÌsŽìçì¢ÖdF
+‘BF¤)dD
+‘BF¤)dD
+‘BF¤)dD
+‘BF¤)dD
+‘BF¤)dD
+‘BF¤)dD
+‘BF¤ªî~ÂX]ʵ4ÖÛèü1»4¾²ñ´NFÃœŸ}­{±5mèWB¤G
+é‘Bz¤)¤G
+é‘Bz¤)¤G
+é‘¡6†;	ÙaN:¿|Œ—Ò±øÒáåù¥¹£ó×ò2=a:@Ž¤#)äH
+9’BŽ¤#)äH
+9’BŽ¤#jcu8𣳝@öå3ß+&¤I
+i’Bš¤&)¤I
+i’Bš¤&)¤I
+é‘Bz¤)¤G
+é‘Bz¤)¤G
+é‘Bz¤)¤G
+é‘Bz¤)¤G
+é‘Bz¤tÒ#g–žâY„ŸI!ERH‘R$…I!ERHR Cåý³ Ì‚0Â,yïýôa&5RHR#…ÔH!52TÎÂLj¤)¤F†
+>ÂLŠ¤")¤H†
+>Â,³ ̤L†
+>Â,³ Ì‚0Â,³ Ì‚0Â,³Ä¿|„c’ªk‡–™…Ö¹†&µRH­R+…ÔÊP-µIͨ-j›šSÕ¯^œ½Ýl_·Ö„J!…RHR'…ÔÉPýpG0ÃŒa~é虧ûØšK̤3)ÄL
+1“B¬¤+‘c‡K‰9b…Xà ˜ì¯¥?Ôá‡:üP‡êðC~¨Ãuø¡?Ô¹\¨s¹P‡ê0Cf¨Ãu˜¡3Ôa†:ÌP‡êí^¥Œð:#›edÂ22aù‘°üHX~$,?–	ˏ„åGÂò#aùQ¨ÍÁ˽žœì9ÏɤK/Ô©
+jBM©†j©MjFm…N–w˜SÕwÔŸjÀHc©@¨õN)5 x7‰6Rú€q“ènl©}`°²Z at X- ¬V„ÚíBó©0nY. ,–Ë„å¡v{–v@˜,²^@X/ ¬Ö„ÚíyjÌY0 ,„¡v{”v@˜,’°#¬V+„•ÂÊa倰r at X9 ¬V+„•ÂÊa倰r ÔÎ8htÇAx"
+ž$º÷DxRoöÚô^‘^Iz'yÒè5®Û^›3OLïIÚksæIïW„>ÚÛ³ôºÚ8Ó¸·çF¯?^½=7zoOÎà™ý”F0sLby„X!–Gˆåby„Xa™‚°LAX¦ ,S–)Ë„e
+Â2a™‚°LAX¦ Ýe
+G÷Í/ì]ÜÆb™‚t–)Ì)ÿ|<õÄšZù· 3ì,b˜?Pþ=èÌ#;‹—âïç—Žšž™­uÿ\5óºX»­àz–0KBåØ™;&ÌæŽ	ڐ 
+	ڐ 
+IÓ˜›ŸŸÙ·ð†„A×;Ùˆk!„µÂZa-„°BXjsàÚ†/T·${mÝ/†KKÐԁÅBˆ‘tBŒ–:nÑòQ¶é óHBŒ„#!ÄH1’NˆQ÷ý‹à…ydwŽ#!ÄH1BŒ„#!ÄH:!FÝ÷Ï`|æ‘„…
+~»9'÷lrâ™F&m×=1ØÕD!	QHB’…$D!	QHBR¨fhîÈÕû–ù]ê<+C2%IˆC␄e'B’‡$,C␄8$!)Ôd8\l‰ ¼ÄÁ3%IHD
+•.0M˜Œ&LF&£$'	ÉIBr’œ$$'…Êi`2š0M˜Œ&LF&£	“Ñ„ÉhÂd4a2š0M¡¦”[:)·tR&)„”	BÊ!e‚2AH™ ¤LR¦£$>…šS|£”éAÊô ÅAJqHŒ
+|
+>×”ÉAÊä€d©PÁgn27 qJRæ$O	ÉSBò”<%$O	ÉSBò”<%$O	ÉSBò”<%$O	ÉSBò”<%$O	ÉSBò”<%$O	ÉSBò”<jsèØá¹ùÙÓûgGÃ×â̆:¶|„&t©AZ÷fOóåIº¿´<Óª„…ZÂB-! J¨ª„€*! J¨ª„€*! J¨ª„€*! J¨
+|œ¤')ÅI"À*Tðq’Rœ¤')M|íØÑžÆsªôïŸ_ÞÇF£vhv:éÌÜôáÞ_D áJH¸
+µ9rxù×T³c¥ç½¿@Ø•v%,n·	‹Û„ÅmÂâ6aq›°¸MXÜ&,n•® þ„e	aYBX––%„e	aYBX–°HNX$',’É	‹ä„ErÂ"9a‘œ°HNX$',’É	‹ä„ErÂ"9a‘œ°HNX$',’É	‹ä„ErÂ"9a‘œ°HNX$',’É	‹ä$å*ð®PÁAè	ó
+„>EèS„ž¯PÁá*0Íz8':O˜¤è|Êý¢¿È@½f²·]§6¨)ÕP-µImSsª£F\Å(Ö@±Š5P¬b
+k XÅ(Ö@±Š5P¬b
+k XÅ(Ö@±Š5P¬b
+k Xµ¨Õ@­j5P«Z
+Ôj Vµ¨Õ@­j5P«Z
+Ôj VÃ5—ášËpËÜpËÜÀ«^5\r.¹—\†K.·¸ÕÀ­n5p«[
+ÜjàV·8ÕÀ¥.5p©K
+œiàJW¸ÒÀ•®4p¥+
+ìhp#n„Á0¸7Â@‘Š48ïçÝà¼xÑÀ‹&íáq<ð¢
+¼hàE/xÑÀ‹^4ð¢
+¼hàE/xÑÀ‹^4ð¢
+¼hàE/xÑÀ‹^4ð¢
+¼hàE/xÑÀ‹^4ð¢
+¼hàE/øÏÀþ3ðŸÿW@†+ ƒ;fàE/xÑÀ‹^4ð¢
+¼hàE/xÑÀ‹^4ð¢
+¼hàCÓãC®{×=†ëÃuáºÇpÝcðÏ
+þ¹Á?7øç†ëÃua€BÈŸò*ûc*o˜Êþ'„û	á~B¸Ÿî'„û	á~¡²¦ê„ý	aBØ_¨½ýÓ_¦ê†©ºaªn™ª[ô¢½°è…eªnÑ
+‹nXtâ–©ºeªnÑ‹ŽXtÄ¢#±èˆEG,:bÑ‹ŽXtÄ¢#±èˆEG,:bÑ‹ŽXtÄ¢#±èˆEG,:bÑ‹ŽXtÄ¢#–©ºEO,zbÑ‹žXôÄ¢'=±è‰EO,zbÑ‹žXôÄ¢'=±è‰EO,zbÑ‹žXôÄ¢'=±è‰EO,zbÑ‹žXôÄ¢'=±è‰EO,zbÑË\Ý¢+–¹ºE_,úbÑ‹¾Xæê–¹ºe®nÑË\Ý¢?ý±èE,úcÑ‹þXþž–Å·è‘E,zdÑ#‹YôÈ¢G=²è‘E,zdÑ#‹YôÈ¢G=²è‘E,zdÑ#‹YôÈ¢G=²è‘E,zdÑ#‹YôÈ¢G=²è‘E,zdÑ#‹YôÈ¢G=²è‘E,zdÑ#‹YôÈ¢G=²è‘E,zdÑ#Ë<Ý2O·ÌÓ-:eÑ)‹NYtÊ¢S²è”E§,:eÑ)‹NYtÊ¢S²è”E§,:eÑ)‹NYtÊ¢S²è”E§,ów‹^YôÊ¢W½²è•E¯,zeÑ+‹^YôÊ¢W½²è•E¯,>Å§³øtŸÎr¿×ò½,>Å§³øtŸÎrß×rß×rß×bØY;ËÝ+ËÝ+‹cgqì,ŽÅ±³8vÇÎâØYî[î[î[Ü:‹[gqë,nÅ­³¸uݶ¸u·ÎâÖYÜ:ËÝ5‹¾[ôÝ¢ï}·è»Eß-VÅª³Xu«Î¢ÿý·è¿Eÿ-úoÑ‹þ[ôߢÿý·è¿Eÿ-úoÑ‹þ[ô¿‰ž7Ñó&úÝD¿›èC}hÂMx¡ÉçÙäólòy6ù<›|žM>Ï&Ÿg“ϳÉyjÒï&ýΘ—dÌK2æ%ó‰ŒùDÆ|"c>‘1ŸÈ˜OdÌ'2æó‰ŒùDÆ|"c>‘1ŸÈ˜OdÌ'2æó‰ýÎàÕ^ÍàÕ^ÍàÕ^Í8ç/ƒW3x5ƒW3x5ƒW3x5ƒW3x5ƒW3x5ƒW3x5ƒW3x5ƒW3x5ƒW3x5ƒW3x5ƒW3x5ƒW3x5ƒW3x5ƒW3x5ƒï2ø.ƒï2ø.ƒï2ø.ƒï2ø.ƒï2ø.ƒï2ø.ƒï2ÆÆ8j1~ZŒŸã§Å¼¶Å¼¶Å¼¶Å÷ Å÷ Å¼¶Å¼¶5ÙÛo‹Ú¦æTGÇÙb¶‡-Æa‹qØb¶‡-Æa‹qØb¶‡-Æa‹ùj‹ùj‹ùj‹ùj›ùL›ùL›ùL;íý¾AM¨)ÕP-µIͨ-j<î6ó’6ó’6ó’6ó„p#!ÜH7„p#!ÜH7„p#!ÜH7„p#!ÜH7„p#!ÜH7„p#!ÜH7„p#!ÜH7„p#!ÜH7„p#!ÜH7„p#!ÜH7„p#!ÜH7
+|浄	!GBÈ‘r$„	!GBÈ‘rj÷}<ÎBÕT¡Ö©
+jBM©†j©MjFmQÛÔœê¨àçàçàçàçàçàçàçàçàçàçàçàçàçàçàçàçà;ðø|¾߁ïÀwà;ðø|¾߁ïÀwà{ð=ø|¾߃ïÁ÷à{ð=ø|¾߃ïÁóÏß*ð,+õyÐó¯«û4~î~õð©‡O=|êáSßyøÎÃw¾óð]¨9ÕQ#|çá;ßyø.Tö+ìWد°ßx}j“šQ[Ô6|_À¯ƒ_¿~ü:øuðëà×Á­ƒ[·nÜ:x
+pà4؃ý7Øoƒãj°ÿûo°ÿûo°ÿÇÕèáp\	Ç‘€“€“p	x	x	x	x	x	x	x	x	xŒ›VÊñ¥_
+~
+~
+~
+~
+~
+~
+~
+~
+~
+~
+~
+~
+~
+¾߀oÀ7àð
+ø|¾߀oÀ7àð
+ø|¾ß‚oy¿åý–÷[Þoy¿åýMÞßäýMúߤÿMúߤÿMÞßäý9ýÎÁuãu¾ßó~x5OÈš'dͲæ	Yó„¬yBÖ<!kž5OÈš'dͲæ	Yó„¬yBÖ<!kž3OÈ™'äÌræ	¡ò„PyB¨<!Tž*Oø”'|Ê>å	Ÿò„Oy§<áSžð)OøT¨ô‹Ï•TÅ󏪄
+®×r^,ø|¾ŸqAø”'|Ê>å	Ÿò„Oy§<áSžð)Oø”'|Ê>å	Ÿò„Oy§<áSžð)Oø”çoñüã-ž¼Åó·x©<áTžp*O8•'œÊNå	§ò„Sy©<áTžp*O8•'œÊNå	§ò„Sy©<áTžp*O8•'œÊNå	§ò„Sy©<áTžp*O8•'œÊNå	§ò„Sy©<áTžp*O8•'œÊNå	§ò„Sy©<áTžp*O8•'œÊNå	§ò„Sy©<áTžp*O8•'œÊNå	§ò„Sy©<áTžp*O8•'œÊNå	§ò„Sy©<áTžp*O8•'œÊNå	§ò„Sy©<áTžp*O8•'œÊNå	§ò„Sy©B߃ïÁ÷à{ð=ø|¾߃ïÁ‡<HL‡'¦ÃÓá‰é5XîD»NÆ¢c‘Xê±4bIbIc1±ØXš±d±´biÇ‚‹Åw‹Žx:â鈧#žŽx:â鈧#žŽx:â鈧#žŽx:â鈧#žD<‰xñ$âIÄ“ˆ'O"žD<‰xñ$âIÄ“ˆ'O"^=âÕ#^=âÕ#^=âÕ#^=âÕ#^=âÕ#^=âÕ#^=âÕ#^=âÕ#^#â5"^#â5"^#â5"^#â5"^#â5"^#â5"^#â5"^#â5"^ñ’ˆ—D¼$â%/‰xI/‰–ÄKâ%ñˆ’xDI<¢$J%‰‡’ÄCIâ¡$ñ’ØÝ$v7‰ÝMbw“;ëv7‰ÝMb?“ØÏ$ö3‰ýLègbb‰ÝMbw“”D $%(‰@IJ#P;ŸF¼4â¥/xiÄK#^ñÒˆ—F¼4âeqŸYÜg÷™Å}fqŸYÜg÷™Å}fqŸYÜg÷™±ÏxY<†,C¡ñZ¯ñZ¯ñZ¯ñZ¯ñZ¯ñZ¯ñZ¯ñZ¯ñÚ¯ñÚ¯ñÚ¯ñÚ¯ñÚ¯ñÚ¯ñÚ¯ñÚ/xyÄË#^ÞÅ3Nba«KK‹‰ÅÆÒŒ%‹¥543ÿâ¥ýÓ‹GsR<kY'ß³öò¹ù™ÙÚó;I„Ãí¹Åýˇ;«kíNÛÑÀÅ“
+÷ìŸ>6[ku"‡†ò…¥éýûg,¾`ùÈÁéÅåÃóÓËK#ùÂò¾ùÙndèðôâô¾¹ý¯Yè¬/ï>•ðüXo£ÞÙ+o¼vz¬ÜðµÓ½¦îû:½HS·çÀÜ‘é3sGæ–Îlž™‹™.5O5O5K}yo¾¼7_jÖÊJ¿	ßŒÐ·Å¹#ã/L»´³°ñÔ[ÂÆS;3y¹Y^n–—šÙòØòØòX)7“r3)7KÊÍ’r³¤| åóÑ*ŸV<½èàô×î›^\åŽÜ3=¿´¦ÓFR»'|Pó³ÇŽÅífÞÛ鎠I~<ot¶ynJ¯wÚèÒóÉR{]zÞ{½þ´÷¶K¯÷ößî`”^ïíGžö|²ô¼ÎóôiÏuéùdéy³ôÞÞsÝÁÞ·8Ý]f°°T»¬s²â	mÆOdãrœ‡w7öÌ/9xliz±wÒËŸZ«ü©µÊŸZ»üh—¿íòw¢‡Jmþ©Nä`¢³Ñ0vÏá…#§â•æS¯¬™ë,ìŸ}]ù#îdÆ<m»YÞî¤\ÿøv»ÕÛV3ûj/ìt%ÆRìÙÈ¥{ÞÒDwþùÜÒóø™†×:Û¥×]鹧+µi”ÚtžûîQ›vöÔùêlœ9E3'Ï„¾–šµÊÍZåfír³v¹Y»Ü,/7ËËÍòr3WnæÊÍ\¹™/7óåf¥o­É'KÍÂÆSÍÂF©™.7ÓåfºÜLÊͤÜLÊÍêåfõr³z¹Y£Ü¬QnÖ(7KÊÍ’r³¤Ü,-7KËÍÒr3SnfÊÍL¹™-7³åf¶Ü¬YnÖ,7k–›•Ç[^oyy¼ååñ–—Ç[^oyy¼ååñ–—Ç[^oyy¼ååñ–—Ç[^oyy¼ååñ–—Ç[^o®<Þ\y¼¹òxsåñæÊãÍ•Ç›+7Wo®<Þ\y¼¹òxsåñæÊãÍ•Ç›+7Wo®<Þ\y¼¹òxsåñæÊãÍ•Ç›+7ÇÛÐËÂüazßÂÕ]îë,6éP"Ïué¹”ž×KÏ¥çIéyZznÎ0~ø=3sÓû#¿ÛlϾÎl®ÃǼÒzê•î›¶{–]©œè»qêÉÇ
+uz½ú;ՏDýÝqõßÇÔõh¡þv§ú›1õ×ÇÕ#;Õ~>«ý PWß?®NVÿí´ú¯…úÞsÕ_µÔwõ_D}ç¡Ëkß9®
+
+º\}û//ª}û´úË‹Ô_êÏõ-Qÿy½ú³ãê?ê?®Uz½ú“/¨?.Ô…æt½úæƒÏ¯}ózõàóÕ~ãœÚêç¨ÿP¨_¨?(Ôïê÷Ž«¯?°¥öõB=°Eý;Q_+ÔWnš¨}e³ú·Õý…úBýv¡¾\¨/ê·
+u_¡¾X¨{õ…BÝ3¡NÞ¼³v²P'>ÿ…Ú‰B}þsWÖ>ÿõùû?÷›;kŸ»rêIõ¹©þßÜ©>[¨ß8®>S¨OêS…úd¡>1£~}LÝýñµ»gÔÇ?¶¶öñêckÕGC§?zZýZ¡~µP)Ô¯¬U.Ô‡>8Vû¨Ž©_žQw…&wWwêï­} PïUï{ï¦ÚûfÔ{i¼öÞMê—ÆÕ{†Õ»õ®ã«kï*ÔñÕêŽð¦;Ž«w¾c¬öÎÔ;ÆÔ¿9­Þ~ûjo/Ôío»²vûÔí7ö¿íwÖÞv¥zÛTÿ/îT¿P¨ÛÞº§v[¡ÞºGý|8ÌŸÏÔ­o©Ýº^½eDÝ^¸eFÝÎÔÍ;ÕMê_êçÞ<Qû¹B½yB½©P7ê†BM=ù³×__ûÙB]½z㌺îåj×íTÿªP×ê
+cêšQuõ°Z.ÔÒiuì´Z<­^Z-ÔB¡Žj~»z]¡~f¢Uû™ËÕ\¡]¯†…š-ÔL¡öj_¡¦Ÿ«®:­þ娺²Pÿ¼P¯)Ô«¯®½ú´ºbX½jã¦Ú«D½²P¯ȯh©—oP—WÇk—Ÿ­^¶^½ô²uµ—jïˆúg…zÉO×^R¨ŸW/.Ô‹Âo^T¨Ë^8^»lzṫk/W/X­ž_(\¹ã*/T»ï9µöiÕú‚Ê^¤¦
+ui¡ž÷SkkÏ[¯~ê’5µŸZ«.¹xuí’©'ר‹W«çªY(kÖ×ìieÒñšY¯Òd¤–Ž«dD5¶¨új%z¤&…Ò#jò¢‘ÚäjuшÚóœ¡Úžqõœ!õlQ>kgíÂõ¬ÝkkÏÚ©v¯UìÚY» S»vªgî©=sÚ9¢Î/ÔŽB·Fmǹ}­Ú6£¶žV[Â!l™Qç®V›ÃÜ\¨sN«g´Ô¦°±©PgϨ³Â™:«PÛ6nR
+µ¾Pë
+µ64X[¨‰p¬-5~½Z3£Æ
+µztcmu¡FCëэj¤PÃãj¨Pƒ¡Ù`¡V­W3ª?ü²?Œ€
+*¼ª
+Õ¶ûž£ªãªR¨ê‰êÌM¿P½ðÿ‡ÿ*ÿÔøÿ;·ÒW9Pï?PûpEUVUž15ÚÿXeà±ê`톾þÊE÷?xJWÆ<õà©ÉuÛ'vnŸØ~ ¿òø1uÎãß)Ž¯ûÑß,ìû¯Tj‡jßφ+¿=•U&ª•þZßD­Ö_VÕ‰¾ŠRë&jý‡&Ôð`ç­ŠZuGU½i¨64¸j ?|Ε¡ÚðÈøƒ÷ŸÕÔ•‹.yèÁSk›“/ºüŠUãµï¯
+ÿ÷Ê`|:Ÿ¿ú¼Ïl­V¯œj­©®é[³jÍàšÊ•«+G+·U†VUûÔPÿÆꦾWV¯èÛ;z°z¨ï
+Õ«ûÞ¨û¯Yõ†Á[ªoé»qôÝ}ïQÇûϺ²råPu{µ^Ý¡¶«}÷÷í,®ûN_óoyâµoùfmì‰Mê§/¬ÞP¼©R	gík•Jÿ©p샕‰Ê¶J{jǦÊÃCw¬}SõŽá_ß:12Ø·nÓÖZelóÆÚ¦Í{†*›×öoü”<ÎêÄYÍfç8OzôÔøÃÍÉϬ9/Eub{g¡ã3wœy²s»lÜ°~`Õ–ê†õý;¶WßQÍ?ôþ÷¨¸·zá;ßþöw#}ýß=}ãïø•â‘Çžø«¾¯=ñg·¼õ¶›úÏ[X|ýя|éÓ·~pý¶ÞýÕ?
+ŸPèoíSôwÏÔ†ÊC¡§ãƒ}ãÕڦÕRÙ<Ô¿6ôïÑSM:÷è©ÉÏ\µ®Û±ú¶ÊÄxeûÎíݺ»Z}Ç£Õ¤ºµø‹â¢U½³ú™êñâP±·˜®]ôØ5Õ³«{ªÏ®žõ‘â]ōÅÏÇÃùª>y:œ¯ïüU•Ë¦Æú©¿:¥6W¦jƒã>ôøCñÑS2Y}ѧ†_~ÅC7§*Õðçà“_²ƾzj]ehke¼:Þ·uÕøÐÔÐÑ¡;‡†®TÛ7lŸØ1±} ÿO<üÀ×¾ù±Ó߬]X	Ç{Ý“ßîNÿuadî¬Ü;µkÓÖ‘³†Æ*=kàäØĶ›·Þ³ù䎷5Z9K½zhpd«\ïžÎÀ×<%2Ñ=÷?ôèãáúÊÃãO4'šaHN™<wrËäÖÉm“Û'Ï»t×Ô¹S[¦¶Nm›Ú>uÞÞs÷nÙ»uﶽÛ÷ž·w×Ñ]7{Ë–[¶Þ²í–í7wû®»v=²kKï­½7õÞpÕ–«¶^µíªíG·ÝztÛÑí7n¹qëÛnÜ~ö•áìŸ7°aýƺ¤?U5;’±êŽóž™4ÒúöÎ9o`Uò¼j]6öÝ÷­»ß´ðž“'N\zï[î~à‰Çª}¿ú®«>÷òÙû^ó·ôÕ\·ïØŸ|v÷‹ŸxÓÇLùƒ_üÒÚÞºgÏÇvíz¼s®¾> kÖw¹àÂðéÜ×ÿéʽ}µê`ÅŽ?~É)	'ã¡ÇOMNtÎýÞ¡«Âù¯U¯\W'¿¾aÇ—O„ÿú¯z쮁õß»ªÜS©¬:7œûó*¯™zæÀÚ¡³×TÎ]µaô–s·©çÜ»i|UebÍààÀÞ‰Á5{7Ÿ=ø¿£ûÕxüñSk»pÉC^rÿ)™X{V8çë&Ïß{þÑóo?ÿ®ðø­ó¿uþ“ç…óÒ=î
+¡ÝóðcO꺿ìßí¾ôæOÞwrqùm9¹xÍ/|ääÉK?uí¿ú¸ºõWÿð/Ÿø}øå÷Ý÷á'néûÀßû[zâ–þ«>qpß+Ž¡&úJ:µI
+UÔXuà–±‰£÷Wû+/錿¾ÓíGOu)ëÑûOu»ûÙ«6üÁ†¾Î·æÑ¡™o|ãwŸ<Ùúå/¥ïÝ.ÜùNôìÌÂgñú0n—îHå¬ðMY7prmåä艵·=´vÍKÕÚ
+îìî·4ðóCò˜œÚqé¦ë*×
+Ü°ê†Á†n¾aäºÑVß0vÚÆo˜¸ní]›Ù4QEaÔì’ηxÇy?ûŽ½óîßñŽ»ï~Ç#ÕµÅÏüuñƒê„úÖw¿öµïþÕW÷{ï+¾Zœ*¾_ünµY]W]_µ½s£.}œ¨LN­	Ÿf˜ÜºwÕð@øÊú@$÷Ç1óè©ûüzøL'?»wݝë:geOõÇOÉYê²­/|öû~õäÉçÞsÓº=›Õg×N<pߟ	'äÀþZ­‹·ðä·Õï¼]•ïN]²z´oläò­[‡úV
+_¾uë–ÖðÈ–­ý*7Woí_ó†[Ï>9Ñrgør_°exdë9«*/;gplÕàúóܝ~=xê¡Ð¡.ÇuOañÇÇøpç“ëêÍØ÷;¯êþ䥲«#/‡7oÙ<ºgèÙÃÏyöèÅC_<rñèȶʶêù}_0ò¬u­¿hó6^°å‚­»·íÞ~þ®›‡o¹yôæÕk;GÐ×70<0¢FÕj5¦Ö¨qµI=C£6÷Ÿ;´ë¢Ý—î~íîv߸ûöÝwí~d÷ÙA‰^_ÝÏÓú[«ö_ú]É–jü /
+g±C²Q½õ%¿öš[oÝ÷ÎKïÿ•¿ûã×üÎü¯L¿ù¶ÙO}üÝþû>Ûé'.¸àå/Ÿzáö±g½çÖ÷}nÇŽû’äÕ/}Ñޝkοã͸{Kë&ÀßÔ>ƺÚ4V\£>´üÞÁ[†GÂYî¯Ž¯ëŒõKîÿêÐý~6ƒx}rC¯@Åë7^\ÝÐá§@Tõ‰ê5Õ늛^tì‹_üæo¹%\uüöÛž¸ëÖ—üҝßè»êmÕçu°û*ŸãýŠþ«öúÊÅS›Ÿú¦Ý6\½wý‰Ñð=[?ò’ðó:¿ÇÕCræ붰áK¯Ûº‰úDàá	4YýDçëöë'N´?½üå¯Vÿ zOßGž˜¾óÎû>ÜwÝcwÝ}`ÿ#ê×:½8ïÿÒã®Ê*?ªÚŸð8ú÷=úžöØÃãö¾¯«-ÝÇ+ûúóþ›W+•ÇÊcå±òXy¬<V+•ÇÊcå±òXy¬<V+•ÇÊcå±òXy¬<V+•ÇÊcå±òXy¬<V+•ÇÊcå±òXy¬<~ò£ÿ¶fµ[;S¼óGŸ~*?ñ?õ“œ¿³²ëi/™òFN}qøÙûÒ—U*¯xå«®øɸÿÏþë¯|½ûgçü<²üä“áÏm?Ãvåq~âçWv†?Ÿ~’žþŸù{“?mûÅÔ½•—V^Ö}öŠÊ++¯ªtÎj8†êí•Ú?ºoƒ?¾ùHå‘'ì…8f*ý¿W9Ðûé{kLÿÄ?µk+ãµë+_ëüìþ?ûéÿö“ýoÿ|·rÝ?ôÓ׬|¹ü³êÊ=µµ•{ú¿Sy}ïG]¶/¬,¨~÷‰î¹î{î_|úSŸ¼çµk.ùaeküp~çkïû\¯þÝ=ñÌÕ‹C¯(rÿŽoò 
 endstream
 endobj
-8675 0 obj
-1529
-endobj
-8665 0 obj <<
-/D [8663 0 R /XYZ 151.701 685.529 null]
+8652 0 obj <<
+/D [8650 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1546 0 obj <<
-/D [8663 0 R /XYZ 151.701 591.384 null]
+/D [8650 0 R /XYZ 151.701 591.384 null]
 >> endobj
-8666 0 obj <<
-/D [8663 0 R /XYZ 151.701 564.983 null]
+8653 0 obj <<
+/D [8650 0 R /XYZ 151.701 564.983 null]
 >> endobj
 1550 0 obj <<
-/D [8663 0 R /XYZ 151.701 447.819 null]
+/D [8650 0 R /XYZ 151.701 447.819 null]
 >> endobj
-8667 0 obj <<
-/D [8663 0 R /XYZ 151.701 423.137 null]
+8654 0 obj <<
+/D [8650 0 R /XYZ 151.701 423.137 null]
 >> endobj
 5244 0 obj <<
-/D [8663 0 R /XYZ 151.701 346.402 null]
+/D [8650 0 R /XYZ 151.701 346.402 null]
 >> endobj
-8668 0 obj <<
-/D [8663 0 R /XYZ 151.701 329.532 null]
+8655 0 obj <<
+/D [8650 0 R /XYZ 151.701 329.532 null]
 >> endobj
-8662 0 obj <<
+8649 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F51 3736 0 R /F85 5513 0 R >>
-/XObject << /Im35 8661 0 R >>
+/XObject << /Im35 8648 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8678 0 obj <<
+8664 0 obj <<
 /Length 1572      
 /Filter /FlateDecode
 >>
@@ -40731,27 +43602,27 @@
 ÿhËÃÄ9Ðí]ÀY›ÑÝñ ÐÁ©Œ›¤HäË›Þ2ã~'ÂÝÍô5‹ÑS	†¯(P6]VÈWí³Ôjð ®ÿuÜýlÐø
 endstream
 endobj
-8677 0 obj <<
+8663 0 obj <<
 /Type /Page
-/Contents 8678 0 R
-/Resources 8676 0 R
+/Contents 8664 0 R
+/Resources 8662 0 R
 /MediaBox [0 0 612 792]
-/Parent 8641 0 R
+/Parent 8628 0 R
 >> endobj
-8679 0 obj <<
-/D [8677 0 R /XYZ 100.892 685.529 null]
+8665 0 obj <<
+/D [8663 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1554 0 obj <<
-/D [8677 0 R /XYZ 100.892 305.897 null]
+/D [8663 0 R /XYZ 100.892 305.897 null]
 >> endobj
-8680 0 obj <<
-/D [8677 0 R /XYZ 100.892 273.737 null]
+8666 0 obj <<
+/D [8663 0 R /XYZ 100.892 273.737 null]
 >> endobj
-8676 0 obj <<
+8662 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F51 3736 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8683 0 obj <<
+8669 0 obj <<
 /Length 2132      
 /Filter /FlateDecode
 >>
@@ -40777,27 +43648,27 @@
 ÁŸÿ±—DDy<Épk¥Rxwïl’”p7O¼–Õ¶».ßZp¥²þ(âÀK§Ý jvk×FëYƒCÂÔs ÕSõ±<¸þ-tû‚S*bÒzëA‡¯ZKôÂT9øû%·×åGÒ7]q¦$n[uQ$Q*Õ5Çõ=d[ŠÊé¿Rÿýn»ú/ý[¾*
 endstream
 endobj
-8682 0 obj <<
+8668 0 obj <<
 /Type /Page
-/Contents 8683 0 R
-/Resources 8681 0 R
+/Contents 8669 0 R
+/Resources 8667 0 R
 /MediaBox [0 0 612 792]
-/Parent 8686 0 R
+/Parent 8672 0 R
 >> endobj
-8684 0 obj <<
-/D [8682 0 R /XYZ 151.701 685.529 null]
+8670 0 obj <<
+/D [8668 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1558 0 obj <<
-/D [8682 0 R /XYZ 151.701 660.623 null]
+/D [8668 0 R /XYZ 151.701 660.623 null]
 >> endobj
-8685 0 obj <<
-/D [8682 0 R /XYZ 151.701 644.027 null]
+8671 0 obj <<
+/D [8668 0 R /XYZ 151.701 644.027 null]
 >> endobj
-8681 0 obj <<
+8667 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8689 0 obj <<
+8675 0 obj <<
 /Length 2033      
 /Filter /FlateDecode
 >>
@@ -40822,28 +43693,28 @@
 Ía<µÄû¡(°ã^É>Ã[FŽ„¾`P;±•\3	Ð9•Ü´Í±Ëíà»Í/¨UñÕÕ·0–^-¯ÛRêNc÷ðÇDäf|£;UxÌ%'ršÎÿhÄLê,Ø“)üµf„µ—Ÿ) f¾J³(âj€x,âB	"™iÓŸô_½«yð¶˜ûyÚÚŽ·ng×:Ôb‚`VðpÀc@òH¼jADªÁ1çÐ…-­tCã\ï„KEëÞ¥õ˜é¸›÷ôuÍ`†¥©·a‘»wž '5{%`I´úÓØ	ºG¾{Ÿ9_¶/µ..Séô[«7EglÏlù@ÔK³$	KäÔr`‡}¦X[ÿÏf«?UxÆD,§Š4¿l¹Hà²O^:cð }Ô–©øŸ\1ªò\ñZ•ñŸÞøýå7ã
 endstream
 endobj
-8688 0 obj <<
+8674 0 obj <<
 /Type /Page
-/Contents 8689 0 R
-/Resources 8687 0 R
+/Contents 8675 0 R
+/Resources 8673 0 R
 /MediaBox [0 0 612 792]
-/Parent 8686 0 R
+/Parent 8672 0 R
 >> endobj
-8690 0 obj <<
-/D [8688 0 R /XYZ 100.892 685.529 null]
+8676 0 obj <<
+/D [8674 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1562 0 obj <<
-/D [8688 0 R /XYZ 100.892 660.623 null]
+/D [8674 0 R /XYZ 100.892 660.623 null]
 >> endobj
-8691 0 obj <<
-/D [8688 0 R /XYZ 100.892 641.703 null]
+8677 0 obj <<
+/D [8674 0 R /XYZ 100.892 641.703 null]
 >> endobj
-8687 0 obj <<
+8673 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8695 0 obj <<
+8681 0 obj <<
 /Length 2071      
 /Filter /FlateDecode
 >>
@@ -40864,47 +43735,47 @@
 "<Œ­õ<u}ƒð½^~ì´²[ãºîíÍøRL¹…Ðß`b«zÏ¿U=>oü» ­¼>­nØ_Žm­&E€¡Xåþûî¸û9Zð
 endstream
 endobj
-8694 0 obj <<
+8680 0 obj <<
 /Type /Page
-/Contents 8695 0 R
-/Resources 8693 0 R
+/Contents 8681 0 R
+/Resources 8679 0 R
 /MediaBox [0 0 612 792]
-/Parent 8686 0 R
-/Annots [ 8692 0 R ]
+/Parent 8672 0 R
+/Annots [ 8678 0 R ]
 >> endobj
-8692 0 obj <<
+8678 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [178.471 541.699 245.776 553.388]
 /Subtype /Link
 /A << /S /GoTo /D (samba-trusted-domain) >>
 >> endobj
-8696 0 obj <<
-/D [8694 0 R /XYZ 151.701 685.529 null]
+8682 0 obj <<
+/D [8680 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1566 0 obj <<
-/D [8694 0 R /XYZ 151.701 660.623 null]
+/D [8680 0 R /XYZ 151.701 660.623 null]
 >> endobj
-8697 0 obj <<
-/D [8694 0 R /XYZ 151.701 638.691 null]
+8683 0 obj <<
+/D [8680 0 R /XYZ 151.701 638.691 null]
 >> endobj
 1570 0 obj <<
-/D [8694 0 R /XYZ 151.701 336.863 null]
+/D [8680 0 R /XYZ 151.701 336.863 null]
 >> endobj
-8698 0 obj <<
-/D [8694 0 R /XYZ 151.701 307.311 null]
+8684 0 obj <<
+/D [8680 0 R /XYZ 151.701 307.311 null]
 >> endobj
 1574 0 obj <<
-/D [8694 0 R /XYZ 151.701 242.251 null]
+/D [8680 0 R /XYZ 151.701 242.251 null]
 >> endobj
-8699 0 obj <<
-/D [8694 0 R /XYZ 151.701 215.313 null]
+8685 0 obj <<
+/D [8680 0 R /XYZ 151.701 215.313 null]
 >> endobj
-8693 0 obj <<
+8679 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8702 0 obj <<
+8688 0 obj <<
 /Length 1652      
 /Filter /FlateDecode
 >>
@@ -40926,27 +43797,27 @@
 ?óÿ ¬KB
 endstream
 endobj
-8701 0 obj <<
+8687 0 obj <<
 /Type /Page
-/Contents 8702 0 R
-/Resources 8700 0 R
+/Contents 8688 0 R
+/Resources 8686 0 R
 /MediaBox [0 0 612 792]
-/Parent 8686 0 R
+/Parent 8672 0 R
 >> endobj
-8703 0 obj <<
-/D [8701 0 R /XYZ 100.892 685.529 null]
+8689 0 obj <<
+/D [8687 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1578 0 obj <<
-/D [8701 0 R /XYZ 100.892 505.463 null]
+/D [8687 0 R /XYZ 100.892 505.463 null]
 >> endobj
-8704 0 obj <<
-/D [8701 0 R /XYZ 100.892 467.943 null]
+8690 0 obj <<
+/D [8687 0 R /XYZ 100.892 467.943 null]
 >> endobj
-8700 0 obj <<
+8686 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F59 4373 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8707 0 obj <<
+8693 0 obj <<
 /Length 622       
 /Filter /FlateDecode
 >>
@@ -40958,21 +43829,21 @@
 m?€ÃÓÔv×úøU¶Û?Þ·k»P¯¡“…˜ééø:L¿õ´ú×â*æ=À
 endstream
 endobj
-8706 0 obj <<
+8692 0 obj <<
 /Type /Page
-/Contents 8707 0 R
-/Resources 8705 0 R
+/Contents 8693 0 R
+/Resources 8691 0 R
 /MediaBox [0 0 612 792]
-/Parent 8686 0 R
+/Parent 8672 0 R
 >> endobj
-8708 0 obj <<
-/D [8706 0 R /XYZ 151.701 685.529 null]
+8694 0 obj <<
+/D [8692 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8705 0 obj <<
+8691 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8713 0 obj <<
+8699 0 obj <<
 /Length 1710      
 /Filter /FlateDecode
 >>
@@ -40995,53 +43866,53 @@
 Éñã5÷ÃáWø&»ªj³x¾mªöõÞWLÛý#ÉFŠp¡XRžúݳíÙ,9OoN,šS†1Mªò±þŸÛÝ
 endstream
 endobj
-8712 0 obj <<
+8698 0 obj <<
 /Type /Page
-/Contents 8713 0 R
-/Resources 8711 0 R
+/Contents 8699 0 R
+/Resources 8697 0 R
 /MediaBox [0 0 612 792]
-/Parent 8686 0 R
-/Annots [ 8710 0 R 8709 0 R 8716 0 R ]
+/Parent 8672 0 R
+/Annots [ 8696 0 R 8695 0 R 8702 0 R ]
 >> endobj
-8710 0 obj <<
+8696 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.544 150.889 238.672 162.578]
 /Subtype /Link
 /A << /S /GoTo /D (dfscfg) >>
 >> endobj
-8709 0 obj <<
+8695 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 129.215 460.543 140.871]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.microsoft.com/NTServer/nts/downloads/winfeatures/NTSDistrFile/AdminGuide.asp)>>
 >> endobj
-8716 0 obj <<
+8702 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [99.895 116.961 228.985 128.468]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.microsoft.com/NTServer/nts/downloads/winfeatures/NTSDistrFile/AdminGuide.asp)>>
 >> endobj
-8714 0 obj <<
-/D [8712 0 R /XYZ 100.892 685.529 null]
+8700 0 obj <<
+/D [8698 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1582 0 obj <<
-/D [8712 0 R /XYZ 100.892 660.623 null]
+/D [8698 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3819 0 obj <<
-/D [8712 0 R /XYZ 100.892 445.337 null]
+/D [8698 0 R /XYZ 100.892 445.337 null]
 >> endobj
 1586 0 obj <<
-/D [8712 0 R /XYZ 100.892 445.337 null]
+/D [8698 0 R /XYZ 100.892 445.337 null]
 >> endobj
-8715 0 obj <<
-/D [8712 0 R /XYZ 100.892 415.535 null]
+8701 0 obj <<
+/D [8698 0 R /XYZ 100.892 415.535 null]
 >> endobj
-8711 0 obj <<
+8697 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F29 5413 0 R /F59 4373 0 R /F53 3738 0 R /F51 3736 0 R /F85 5513 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8720 0 obj <<
+8706 0 obj <<
 /Length 2213      
 /Filter /FlateDecode
 >>
@@ -41067,54 +43938,54 @@
 룕E»šâÏþJÐÍP€ÿõaF0ò)hAjìv<lâ»$þ•ÁÀ€9Ü™‘è`,…ðóÿõÀ®…
 endstream
 endobj
-8719 0 obj <<
+8705 0 obj <<
 /Type /Page
-/Contents 8720 0 R
-/Resources 8718 0 R
+/Contents 8706 0 R
+/Resources 8704 0 R
 /MediaBox [0 0 612 792]
-/Parent 8730 0 R
+/Parent 8716 0 R
 >> endobj
-8721 0 obj <<
-/D [8719 0 R /XYZ 151.701 685.529 null]
+8707 0 obj <<
+/D [8705 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5091 0 obj <<
-/D [8719 0 R /XYZ 151.701 519.106 null]
+/D [8705 0 R /XYZ 151.701 519.106 null]
 >> endobj
-8717 0 obj <<
-/D [8719 0 R /XYZ 151.701 502.236 null]
+8703 0 obj <<
+/D [8705 0 R /XYZ 151.701 502.236 null]
 >> endobj
-8722 0 obj <<
-/D [8719 0 R /XYZ 151.701 496.258 null]
+8708 0 obj <<
+/D [8705 0 R /XYZ 151.701 496.258 null]
 >> endobj
-8723 0 obj <<
-/D [8719 0 R /XYZ 151.701 502.535 null]
+8709 0 obj <<
+/D [8705 0 R /XYZ 151.701 502.535 null]
 >> endobj
-8724 0 obj <<
-/D [8719 0 R /XYZ 151.701 490.579 null]
+8710 0 obj <<
+/D [8705 0 R /XYZ 151.701 490.579 null]
 >> endobj
-8725 0 obj <<
-/D [8719 0 R /XYZ 151.701 478.624 null]
+8711 0 obj <<
+/D [8705 0 R /XYZ 151.701 478.624 null]
 >> endobj
-8726 0 obj <<
-/D [8719 0 R /XYZ 151.701 466.669 null]
+8712 0 obj <<
+/D [8705 0 R /XYZ 151.701 466.669 null]
 >> endobj
-8727 0 obj <<
-/D [8719 0 R /XYZ 151.701 454.714 null]
+8713 0 obj <<
+/D [8705 0 R /XYZ 151.701 454.714 null]
 >> endobj
-8728 0 obj <<
-/D [8719 0 R /XYZ 151.701 442.759 null]
+8714 0 obj <<
+/D [8705 0 R /XYZ 151.701 442.759 null]
 >> endobj
 1590 0 obj <<
-/D [8719 0 R /XYZ 151.701 236.471 null]
+/D [8705 0 R /XYZ 151.701 236.471 null]
 >> endobj
-8729 0 obj <<
-/D [8719 0 R /XYZ 151.701 205.975 null]
+8715 0 obj <<
+/D [8705 0 R /XYZ 151.701 205.975 null]
 >> endobj
-8718 0 obj <<
+8704 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F4 5484 0 R /F51 3736 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8733 0 obj <<
+8719 0 obj <<
 /Length 1895      
 /Filter /FlateDecode
 >>
@@ -41140,39 +44011,39 @@
 ì¨n•f¹Èëöͺ¯ºµcøJÈâ+¬såM7ÇŒ5¥io}¹™m4˜ì´*qÙß)_}×Sr¢¸¡MÊ›]‘l0=ÆqÁ©HG|(ꏃŠš^Ñ`G jr·k2jò‰ÓҌ吉ø47¾FÅ=ùœT[OÅ’Ûö¡%…ºÅʼÅ&6Vü¥SÞ†¢¾6‚û "¦PþãÕÑ€qïoà5s;
 endstream
 endobj
-8732 0 obj <<
+8718 0 obj <<
 /Type /Page
-/Contents 8733 0 R
-/Resources 8731 0 R
+/Contents 8719 0 R
+/Resources 8717 0 R
 /MediaBox [0 0 612 792]
-/Parent 8730 0 R
+/Parent 8716 0 R
 >> endobj
-8734 0 obj <<
-/D [8732 0 R /XYZ 100.892 685.529 null]
+8720 0 obj <<
+/D [8718 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1594 0 obj <<
-/D [8732 0 R /XYZ 100.892 607.528 null]
+/D [8718 0 R /XYZ 100.892 607.528 null]
 >> endobj
-8735 0 obj <<
-/D [8732 0 R /XYZ 100.892 583.689 null]
+8721 0 obj <<
+/D [8718 0 R /XYZ 100.892 583.689 null]
 >> endobj
-8736 0 obj <<
-/D [8732 0 R /XYZ 100.892 446.872 null]
+8722 0 obj <<
+/D [8718 0 R /XYZ 100.892 446.872 null]
 >> endobj
-8737 0 obj <<
-/D [8732 0 R /XYZ 100.892 447.449 null]
+8723 0 obj <<
+/D [8718 0 R /XYZ 100.892 447.449 null]
 >> endobj
-8738 0 obj <<
-/D [8732 0 R /XYZ 100.892 435.494 null]
+8724 0 obj <<
+/D [8718 0 R /XYZ 100.892 435.494 null]
 >> endobj
-8739 0 obj <<
-/D [8732 0 R /XYZ 100.892 423.539 null]
+8725 0 obj <<
+/D [8718 0 R /XYZ 100.892 423.539 null]
 >> endobj
-8731 0 obj <<
+8717 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F51 3736 0 R /F15 3700 0 R /F17 3698 0 R /F4 5484 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8742 0 obj <<
+8728 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -41180,20 +44051,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-8741 0 obj <<
+8727 0 obj <<
 /Type /Page
-/Contents 8742 0 R
-/Resources 8740 0 R
+/Contents 8728 0 R
+/Resources 8726 0 R
 /MediaBox [0 0 612 792]
-/Parent 8730 0 R
+/Parent 8716 0 R
 >> endobj
-8743 0 obj <<
-/D [8741 0 R /XYZ 151.701 685.529 null]
+8729 0 obj <<
+/D [8727 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8740 0 obj <<
+8726 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-8747 0 obj <<
+8733 0 obj <<
 /Length 1724      
 /Filter /FlateDecode
 >>
@@ -41212,33 +44083,33 @@
 "Å?—`Fœ]zµ[ýžªP†
 endstream
 endobj
-8746 0 obj <<
+8732 0 obj <<
 /Type /Page
-/Contents 8747 0 R
-/Resources 8745 0 R
+/Contents 8733 0 R
+/Resources 8731 0 R
 /MediaBox [0 0 612 792]
-/Parent 8730 0 R
+/Parent 8716 0 R
 >> endobj
-8748 0 obj <<
-/D [8746 0 R /XYZ 100.892 685.529 null]
+8734 0 obj <<
+/D [8732 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1598 0 obj <<
-/D [8746 0 R /XYZ 100.892 660.623 null]
+/D [8732 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3847 0 obj <<
-/D [8746 0 R /XYZ 100.892 474.324 null]
+/D [8732 0 R /XYZ 100.892 474.324 null]
 >> endobj
 1602 0 obj <<
-/D [8746 0 R /XYZ 100.892 474.324 null]
+/D [8732 0 R /XYZ 100.892 474.324 null]
 >> endobj
-8749 0 obj <<
-/D [8746 0 R /XYZ 100.892 444.072 null]
+8735 0 obj <<
+/D [8732 0 R /XYZ 100.892 444.072 null]
 >> endobj
-8745 0 obj <<
+8731 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8752 0 obj <<
+8738 0 obj <<
 /Length 1795      
 /Filter /FlateDecode
 >>
@@ -41260,43 +44131,43 @@
 ?]'>¼ñ<ëôÎ3øJ(g[Õm3Œyƒµà§‡›D§\çé4‰Bž'æñþ^[pöˆ?²ÆhÊw¬qnÊøRÿÿ‡¾
 endstream
 endobj
-8751 0 obj <<
+8737 0 obj <<
 /Type /Page
-/Contents 8752 0 R
-/Resources 8750 0 R
+/Contents 8738 0 R
+/Resources 8736 0 R
 /MediaBox [0 0 612 792]
-/Parent 8730 0 R
-/Annots [ 8744 0 R 8754 0 R ]
+/Parent 8716 0 R
+/Annots [ 8730 0 R 8740 0 R ]
 >> endobj
-8744 0 obj <<
+8730 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [480.269 619.448 511.352 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (CUPS-printing) >>
 >> endobj
-8754 0 obj <<
+8740 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 605.899 312.788 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (CUPS-printing) >>
 >> endobj
-8753 0 obj <<
-/D [8751 0 R /XYZ 151.701 685.529 null]
+8739 0 obj <<
+/D [8737 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1606 0 obj <<
-/D [8751 0 R /XYZ 151.701 417.222 null]
+/D [8737 0 R /XYZ 151.701 417.222 null]
 >> endobj
-8755 0 obj <<
-/D [8751 0 R /XYZ 151.701 391.903 null]
+8741 0 obj <<
+/D [8737 0 R /XYZ 151.701 391.903 null]
 >> endobj
-8750 0 obj <<
+8736 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F53 3738 0 R >>
-/XObject << /Im1 5672 0 R /Im27 7132 0 R >>
+/XObject << /Im1 5672 0 R /Im27 7131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8758 0 obj <<
+8744 0 obj <<
 /Length 1788      
 /Filter /FlateDecode
 >>
@@ -41327,54 +44198,54 @@
 ¾i—X¡[ª É/"RÄjyÅý,Õ龁‹ oV86Nv~®òFó™2R0î¨ìT»i5—Ж1p¶1åŽÖN„R`’jñ3')‚´ªÜE__³Ea~þßÓô|É$­‚,Oï¬s=Ã?%˜+Óìtž›qÎkjÍz—¢wJz_S0J³ *œð›kúåA˜`8‰ÉÌŽËJ龯¶«ÿ_Òöá
 endstream
 endobj
-8757 0 obj <<
+8743 0 obj <<
 /Type /Page
-/Contents 8758 0 R
-/Resources 8756 0 R
+/Contents 8744 0 R
+/Resources 8742 0 R
 /MediaBox [0 0 612 792]
-/Parent 8730 0 R
+/Parent 8716 0 R
 >> endobj
-8759 0 obj <<
-/D [8757 0 R /XYZ 100.892 685.529 null]
+8745 0 obj <<
+/D [8743 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1610 0 obj <<
-/D [8757 0 R /XYZ 100.892 502.476 null]
+/D [8743 0 R /XYZ 100.892 502.476 null]
 >> endobj
-8760 0 obj <<
-/D [8757 0 R /XYZ 100.892 475.29 null]
+8746 0 obj <<
+/D [8743 0 R /XYZ 100.892 475.29 null]
 >> endobj
-8761 0 obj <<
-/D [8757 0 R /XYZ 100.892 439.992 null]
+8747 0 obj <<
+/D [8743 0 R /XYZ 100.892 439.992 null]
 >> endobj
-8762 0 obj <<
-/D [8757 0 R /XYZ 100.892 419.251 null]
+8748 0 obj <<
+/D [8743 0 R /XYZ 100.892 419.251 null]
 >> endobj
-8763 0 obj <<
-/D [8757 0 R /XYZ 100.892 400.026 null]
+8749 0 obj <<
+/D [8743 0 R /XYZ 100.892 400.026 null]
 >> endobj
-8764 0 obj <<
-/D [8757 0 R /XYZ 100.892 363.009 null]
+8750 0 obj <<
+/D [8743 0 R /XYZ 100.892 363.009 null]
 >> endobj
-8765 0 obj <<
-/D [8757 0 R /XYZ 100.892 343.784 null]
+8751 0 obj <<
+/D [8743 0 R /XYZ 100.892 343.784 null]
 >> endobj
-8766 0 obj <<
-/D [8757 0 R /XYZ 100.892 306.768 null]
+8752 0 obj <<
+/D [8743 0 R /XYZ 100.892 306.768 null]
 >> endobj
-8767 0 obj <<
-/D [8757 0 R /XYZ 100.892 285.421 null]
+8753 0 obj <<
+/D [8743 0 R /XYZ 100.892 285.421 null]
 >> endobj
 1614 0 obj <<
-/D [8757 0 R /XYZ 100.892 221.65 null]
+/D [8743 0 R /XYZ 100.892 221.65 null]
 >> endobj
-8768 0 obj <<
-/D [8757 0 R /XYZ 100.892 194.464 null]
+8754 0 obj <<
+/D [8743 0 R /XYZ 100.892 194.464 null]
 >> endobj
-8756 0 obj <<
+8742 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8772 0 obj <<
+8758 0 obj <<
 /Length 2749      
 /Filter /FlateDecode
 >>
@@ -41405,68 +44276,68 @@
 N‚ÂfÙæà&(ùz*r{ÇW8Tÿ%çÌA
 endstream
 endobj
-8771 0 obj <<
+8757 0 obj <<
 /Type /Page
-/Contents 8772 0 R
-/Resources 8770 0 R
+/Contents 8758 0 R
+/Resources 8756 0 R
 /MediaBox [0 0 612 792]
-/Parent 8785 0 R
-/Annots [ 8769 0 R ]
+/Parent 8771 0 R
+/Annots [ 8755 0 R ]
 >> endobj
-8769 0 obj <<
+8755 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 466.04 226.106 477.73]
 /Subtype /Link
 /A << /S /GoTo /D (simpleprc) >>
 >> endobj
-8773 0 obj <<
-/D [8771 0 R /XYZ 151.701 685.529 null]
+8759 0 obj <<
+/D [8757 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1618 0 obj <<
-/D [8771 0 R /XYZ 151.701 515.532 null]
+/D [8757 0 R /XYZ 151.701 515.532 null]
 >> endobj
-8774 0 obj <<
-/D [8771 0 R /XYZ 151.701 486.963 null]
+8760 0 obj <<
+/D [8757 0 R /XYZ 151.701 486.963 null]
 >> endobj
 5092 0 obj <<
-/D [8771 0 R /XYZ 151.701 387.767 null]
+/D [8757 0 R /XYZ 151.701 387.767 null]
 >> endobj
-8775 0 obj <<
-/D [8771 0 R /XYZ 151.701 370.897 null]
+8761 0 obj <<
+/D [8757 0 R /XYZ 151.701 370.897 null]
 >> endobj
-8776 0 obj <<
-/D [8771 0 R /XYZ 151.701 364.919 null]
+8762 0 obj <<
+/D [8757 0 R /XYZ 151.701 364.919 null]
 >> endobj
-8777 0 obj <<
-/D [8771 0 R /XYZ 151.701 371.195 null]
+8763 0 obj <<
+/D [8757 0 R /XYZ 151.701 371.195 null]
 >> endobj
-8778 0 obj <<
-/D [8771 0 R /XYZ 151.701 359.24 null]
+8764 0 obj <<
+/D [8757 0 R /XYZ 151.701 359.24 null]
 >> endobj
-8779 0 obj <<
-/D [8771 0 R /XYZ 151.701 347.285 null]
+8765 0 obj <<
+/D [8757 0 R /XYZ 151.701 347.285 null]
 >> endobj
-8780 0 obj <<
-/D [8771 0 R /XYZ 151.701 335.33 null]
+8766 0 obj <<
+/D [8757 0 R /XYZ 151.701 335.33 null]
 >> endobj
-8781 0 obj <<
-/D [8771 0 R /XYZ 151.701 323.375 null]
+8767 0 obj <<
+/D [8757 0 R /XYZ 151.701 323.375 null]
 >> endobj
-8782 0 obj <<
-/D [8771 0 R /XYZ 151.701 311.42 null]
+8768 0 obj <<
+/D [8757 0 R /XYZ 151.701 311.42 null]
 >> endobj
-8783 0 obj <<
-/D [8771 0 R /XYZ 151.701 299.464 null]
+8769 0 obj <<
+/D [8757 0 R /XYZ 151.701 299.464 null]
 >> endobj
-8784 0 obj <<
-/D [8771 0 R /XYZ 151.701 287.509 null]
+8770 0 obj <<
+/D [8757 0 R /XYZ 151.701 287.509 null]
 >> endobj
-8770 0 obj <<
+8756 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F17 3698 0 R /F4 5484 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8789 0 obj <<
+8775 0 obj <<
 /Length 1532      
 /Filter /FlateDecode
 >>
@@ -41485,35 +44356,35 @@
 -1/iýï3«é¿¸É£ÍXݪ¥æÃ<¿‚g£OÊòî¤K6¾ÏR63G¾ªéQMAÄê0Ë{é©ú¨·UwhO‚3CÉy®‘Uå¼z®D¥5ª)=yGd¸pLú¸«ÿ’Cõœ¸j“ÝÍ\»o§8¿y2«¬Úºó0» ÎDzd¸èÛ·ï‰mÞ:iå×oD?ëí£:eŒ=iã1áÞ/xçs¬[S=ÉëÍ’]šÞ…e3­_½ì_Ñþ¥ñèØH^u_j¼8Aäö´C>/°yZá¯ÿßèÄL#
 endstream
 endobj
-8788 0 obj <<
+8774 0 obj <<
 /Type /Page
-/Contents 8789 0 R
-/Resources 8787 0 R
+/Contents 8775 0 R
+/Resources 8773 0 R
 /MediaBox [0 0 612 792]
-/Parent 8785 0 R
-/Annots [ 8786 0 R ]
+/Parent 8771 0 R
+/Annots [ 8772 0 R ]
 >> endobj
-8786 0 obj <<
+8772 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.865 463.963 318.04 475.652]
 /Subtype /Link
 /A << /S /GoTo /D (simpleprc) >>
 >> endobj
-8790 0 obj <<
-/D [8788 0 R /XYZ 100.892 685.529 null]
+8776 0 obj <<
+/D [8774 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1622 0 obj <<
-/D [8788 0 R /XYZ 100.892 593.199 null]
+/D [8774 0 R /XYZ 100.892 593.199 null]
 >> endobj
-8791 0 obj <<
-/D [8788 0 R /XYZ 100.892 566.705 null]
+8777 0 obj <<
+/D [8774 0 R /XYZ 100.892 566.705 null]
 >> endobj
-8787 0 obj <<
+8773 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F85 5513 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8794 0 obj <<
+8780 0 obj <<
 /Length 1388      
 /Filter /FlateDecode
 >>
@@ -41529,28 +44400,28 @@
 ÆØŸh»tOÔóÆ(¿éNyî·Dm7´.ÇvÍ qïhÅô»Þå –'2	Ÿ‚][ÅÅ¿iåª)?‘ˆ™„¸”ÃÀÕBÿì™ëòÓ¿Ó/týïß@F¸
 endstream
 endobj
-8793 0 obj <<
+8779 0 obj <<
 /Type /Page
-/Contents 8794 0 R
-/Resources 8792 0 R
+/Contents 8780 0 R
+/Resources 8778 0 R
 /MediaBox [0 0 612 792]
-/Parent 8785 0 R
+/Parent 8771 0 R
 >> endobj
-8795 0 obj <<
-/D [8793 0 R /XYZ 151.701 685.529 null]
+8781 0 obj <<
+/D [8779 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1626 0 obj <<
-/D [8793 0 R /XYZ 151.701 295.771 null]
+/D [8779 0 R /XYZ 151.701 295.771 null]
 >> endobj
-8796 0 obj <<
-/D [8793 0 R /XYZ 151.701 270.479 null]
+8782 0 obj <<
+/D [8779 0 R /XYZ 151.701 270.479 null]
 >> endobj
-8792 0 obj <<
+8778 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F59 4373 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8799 0 obj <<
+8785 0 obj <<
 /Length 1638      
 /Filter /FlateDecode
 >>
@@ -41571,21 +44442,21 @@
 Êtúé5—Ñu½o˜Æ=â·®Æf·¾g	¿[HK‰#N;½n™=ƒH²2]Vç·ŠñûòfñÞ°ž\
 endstream
 endobj
-8798 0 obj <<
+8784 0 obj <<
 /Type /Page
-/Contents 8799 0 R
-/Resources 8797 0 R
+/Contents 8785 0 R
+/Resources 8783 0 R
 /MediaBox [0 0 612 792]
-/Parent 8785 0 R
+/Parent 8771 0 R
 >> endobj
-8800 0 obj <<
-/D [8798 0 R /XYZ 100.892 685.529 null]
+8786 0 obj <<
+/D [8784 0 R /XYZ 100.892 685.529 null]
 >> endobj
-8797 0 obj <<
+8783 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R /F59 4373 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8803 0 obj <<
+8789 0 obj <<
 /Length 1225      
 /Filter /FlateDecode
 >>
@@ -41602,21 +44473,21 @@
 OdÝ3§[ÛQÉ|Ùøœø ?q³±”å_0tÁlç_×ÀiC ŠKP¯~el„ƒ¿@HV?*òM˜a8øJERöa3G0°Ñ¦3¶suT²7I¢jâuámY÷•¹Œ‰™®¬-[†Ûãt8æYãÕ0›%Ì’múú”£bŠo[¤1ÛBÜHi¯”ÓˆõÒ}gºïž›6“0´8ÄEWt(‡\èfYC9}¸‘쮇´ˆÄ€ÃcÑkx·‡M‹]˜wêAiÖ GCNg	Kêy|½†þ9üZÂT…
 endstream
 endobj
-8802 0 obj <<
+8788 0 obj <<
 /Type /Page
-/Contents 8803 0 R
-/Resources 8801 0 R
+/Contents 8789 0 R
+/Resources 8787 0 R
 /MediaBox [0 0 612 792]
-/Parent 8785 0 R
+/Parent 8771 0 R
 >> endobj
-8804 0 obj <<
-/D [8802 0 R /XYZ 151.701 685.529 null]
+8790 0 obj <<
+/D [8788 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8801 0 obj <<
+8787 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F51 3736 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8810 0 obj <<
+8796 0 obj <<
 /Length 2464      
 /Filter /FlateDecode
 >>
@@ -41649,71 +44520,71 @@
 aq²†·fRï ¥$W€r¥±ð&CÚ°Œ\–þyÃ5F,WLà	–nÎ ážUàåèÐ̱f4Á9‚?ÆdìLNEfhÎ.#BÃy~)0Lu ¿Áváãm×Ö— ç'_.àèòEÌxÝè"g[xÀòÜÿÚJ=
 endstream
 endobj
-8809 0 obj <<
+8795 0 obj <<
 /Type /Page
-/Contents 8810 0 R
-/Resources 8808 0 R
+/Contents 8796 0 R
+/Resources 8794 0 R
 /MediaBox [0 0 612 792]
-/Parent 8785 0 R
-/Annots [ 8805 0 R 8806 0 R 8807 0 R 8817 0 R ]
+/Parent 8771 0 R
+/Annots [ 8791 0 R 8792 0 R 8793 0 R 8803 0 R ]
 >> endobj
-8805 0 obj <<
+8791 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 389.592 174.21 401.281]
 /Subtype /Link
 /A << /S /GoTo /D (extbsdpr) >>
 >> endobj
-8806 0 obj <<
+8792 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [347.875 131.677 424.296 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (extbsdpr) >>
 >> endobj
-8807 0 obj <<
+8793 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [427.187 131.677 460.543 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (extbsdpr) >>
 >> endobj
-8817 0 obj <<
+8803 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 118.128 147.343 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (extbsdpr) >>
 >> endobj
-8811 0 obj <<
-/D [8809 0 R /XYZ 100.892 685.529 null]
+8797 0 obj <<
+/D [8795 0 R /XYZ 100.892 685.529 null]
 >> endobj
-8812 0 obj <<
-/D [8809 0 R /XYZ 100.892 557.32 null]
+8798 0 obj <<
+/D [8795 0 R /XYZ 100.892 557.32 null]
 >> endobj
-8813 0 obj <<
-/D [8809 0 R /XYZ 100.892 557.897 null]
+8799 0 obj <<
+/D [8795 0 R /XYZ 100.892 557.897 null]
 >> endobj
-8814 0 obj <<
-/D [8809 0 R /XYZ 100.892 545.942 null]
+8800 0 obj <<
+/D [8795 0 R /XYZ 100.892 545.942 null]
 >> endobj
 1630 0 obj <<
-/D [8809 0 R /XYZ 100.892 445.589 null]
+/D [8795 0 R /XYZ 100.892 445.589 null]
 >> endobj
-8815 0 obj <<
-/D [8809 0 R /XYZ 100.892 413.464 null]
+8801 0 obj <<
+/D [8795 0 R /XYZ 100.892 413.464 null]
 >> endobj
 1634 0 obj <<
-/D [8809 0 R /XYZ 100.892 184.856 null]
+/D [8795 0 R /XYZ 100.892 184.856 null]
 >> endobj
-8816 0 obj <<
-/D [8809 0 R /XYZ 100.892 155.743 null]
+8802 0 obj <<
+/D [8795 0 R /XYZ 100.892 155.743 null]
 >> endobj
-8808 0 obj <<
+8794 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F4 5484 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8821 0 obj <<
+8807 0 obj <<
 /Length 3498      
 /Filter /FlateDecode
 >>
@@ -41756,120 +44627,120 @@
 OÔ^Ï
 endstream
 endobj
-8820 0 obj <<
+8806 0 obj <<
 /Type /Page
-/Contents 8821 0 R
-/Resources 8819 0 R
+/Contents 8807 0 R
+/Resources 8805 0 R
 /MediaBox [0 0 612 792]
-/Parent 8853 0 R
+/Parent 8839 0 R
 >> endobj
-8822 0 obj <<
-/D [8820 0 R /XYZ 151.701 685.529 null]
+8808 0 obj <<
+/D [8806 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5093 0 obj <<
-/D [8820 0 R /XYZ 151.701 660.623 null]
+/D [8806 0 R /XYZ 151.701 660.623 null]
 >> endobj
+8804 0 obj <<
+/D [8806 0 R /XYZ 151.701 643.753 null]
+>> endobj
+8809 0 obj <<
+/D [8806 0 R /XYZ 151.701 637.775 null]
+>> endobj
+8810 0 obj <<
+/D [8806 0 R /XYZ 151.701 644.051 null]
+>> endobj
+8811 0 obj <<
+/D [8806 0 R /XYZ 151.701 632.096 null]
+>> endobj
+8812 0 obj <<
+/D [8806 0 R /XYZ 151.701 620.141 null]
+>> endobj
+8813 0 obj <<
+/D [8806 0 R /XYZ 151.701 608.186 null]
+>> endobj
+8814 0 obj <<
+/D [8806 0 R /XYZ 151.701 596.231 null]
+>> endobj
+8815 0 obj <<
+/D [8806 0 R /XYZ 151.701 584.276 null]
+>> endobj
+8816 0 obj <<
+/D [8806 0 R /XYZ 151.701 572.32 null]
+>> endobj
+8817 0 obj <<
+/D [8806 0 R /XYZ 151.701 560.365 null]
+>> endobj
 8818 0 obj <<
-/D [8820 0 R /XYZ 151.701 643.753 null]
+/D [8806 0 R /XYZ 151.701 548.41 null]
 >> endobj
+8819 0 obj <<
+/D [8806 0 R /XYZ 151.701 536.455 null]
+>> endobj
+8820 0 obj <<
+/D [8806 0 R /XYZ 151.701 524.5 null]
+>> endobj
+8821 0 obj <<
+/D [8806 0 R /XYZ 151.701 512.545 null]
+>> endobj
+8822 0 obj <<
+/D [8806 0 R /XYZ 151.701 500.589 null]
+>> endobj
 8823 0 obj <<
-/D [8820 0 R /XYZ 151.701 637.775 null]
+/D [8806 0 R /XYZ 151.701 488.634 null]
 >> endobj
 8824 0 obj <<
-/D [8820 0 R /XYZ 151.701 644.051 null]
+/D [8806 0 R /XYZ 151.701 476.679 null]
 >> endobj
 8825 0 obj <<
-/D [8820 0 R /XYZ 151.701 632.096 null]
+/D [8806 0 R /XYZ 151.701 464.724 null]
 >> endobj
 8826 0 obj <<
-/D [8820 0 R /XYZ 151.701 620.141 null]
+/D [8806 0 R /XYZ 151.701 452.769 null]
 >> endobj
 8827 0 obj <<
-/D [8820 0 R /XYZ 151.701 608.186 null]
+/D [8806 0 R /XYZ 151.701 440.814 null]
 >> endobj
 8828 0 obj <<
-/D [8820 0 R /XYZ 151.701 596.231 null]
+/D [8806 0 R /XYZ 151.701 428.858 null]
 >> endobj
 8829 0 obj <<
-/D [8820 0 R /XYZ 151.701 584.276 null]
+/D [8806 0 R /XYZ 151.701 416.903 null]
 >> endobj
 8830 0 obj <<
-/D [8820 0 R /XYZ 151.701 572.32 null]
+/D [8806 0 R /XYZ 151.701 404.948 null]
 >> endobj
 8831 0 obj <<
-/D [8820 0 R /XYZ 151.701 560.365 null]
+/D [8806 0 R /XYZ 151.701 392.993 null]
 >> endobj
 8832 0 obj <<
-/D [8820 0 R /XYZ 151.701 548.41 null]
+/D [8806 0 R /XYZ 151.701 381.038 null]
 >> endobj
 8833 0 obj <<
-/D [8820 0 R /XYZ 151.701 536.455 null]
+/D [8806 0 R /XYZ 151.701 369.083 null]
 >> endobj
 8834 0 obj <<
-/D [8820 0 R /XYZ 151.701 524.5 null]
+/D [8806 0 R /XYZ 151.701 357.127 null]
 >> endobj
 8835 0 obj <<
-/D [8820 0 R /XYZ 151.701 512.545 null]
+/D [8806 0 R /XYZ 151.701 345.172 null]
 >> endobj
 8836 0 obj <<
-/D [8820 0 R /XYZ 151.701 500.589 null]
+/D [8806 0 R /XYZ 151.701 333.217 null]
 >> endobj
 8837 0 obj <<
-/D [8820 0 R /XYZ 151.701 488.634 null]
+/D [8806 0 R /XYZ 151.701 321.262 null]
 >> endobj
-8838 0 obj <<
-/D [8820 0 R /XYZ 151.701 476.679 null]
->> endobj
-8839 0 obj <<
-/D [8820 0 R /XYZ 151.701 464.724 null]
->> endobj
-8840 0 obj <<
-/D [8820 0 R /XYZ 151.701 452.769 null]
->> endobj
-8841 0 obj <<
-/D [8820 0 R /XYZ 151.701 440.814 null]
->> endobj
-8842 0 obj <<
-/D [8820 0 R /XYZ 151.701 428.858 null]
->> endobj
-8843 0 obj <<
-/D [8820 0 R /XYZ 151.701 416.903 null]
->> endobj
-8844 0 obj <<
-/D [8820 0 R /XYZ 151.701 404.948 null]
->> endobj
-8845 0 obj <<
-/D [8820 0 R /XYZ 151.701 392.993 null]
->> endobj
-8846 0 obj <<
-/D [8820 0 R /XYZ 151.701 381.038 null]
->> endobj
-8847 0 obj <<
-/D [8820 0 R /XYZ 151.701 369.083 null]
->> endobj
-8848 0 obj <<
-/D [8820 0 R /XYZ 151.701 357.127 null]
->> endobj
-8849 0 obj <<
-/D [8820 0 R /XYZ 151.701 345.172 null]
->> endobj
-8850 0 obj <<
-/D [8820 0 R /XYZ 151.701 333.217 null]
->> endobj
-8851 0 obj <<
-/D [8820 0 R /XYZ 151.701 321.262 null]
->> endobj
 1638 0 obj <<
-/D [8820 0 R /XYZ 151.701 269.875 null]
+/D [8806 0 R /XYZ 151.701 269.875 null]
 >> endobj
-8852 0 obj <<
-/D [8820 0 R /XYZ 151.701 250.54 null]
+8838 0 obj <<
+/D [8806 0 R /XYZ 151.701 250.54 null]
 >> endobj
-8819 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F4 5484 0 R /F17 3698 0 R /F59 4373 0 R /F96 8585 0 R >>
+8805 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F4 5484 0 R /F17 3698 0 R /F59 4373 0 R /F96 8572 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8857 0 obj <<
+8843 0 obj <<
 /Length 2383      
 /Filter /FlateDecode
 >>
@@ -41896,49 +44767,49 @@
 JS%rX˜ÕñÄxZIè­ç2“óv†µ%Üß"ÍÒ×Ï'=þÔsÖŸi–0PF8ÐúÀ€³áeŒÎpuwìL˜ø	t?V³çà!´P¢ÿ?6
 endstream
 endobj
-8856 0 obj <<
+8842 0 obj <<
 /Type /Page
-/Contents 8857 0 R
-/Resources 8855 0 R
+/Contents 8843 0 R
+/Resources 8841 0 R
 /MediaBox [0 0 612 792]
-/Parent 8853 0 R
+/Parent 8839 0 R
 >> endobj
-8854 0 obj <<
+8840 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./xslt/figures/caution.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 8859 0 R
+/PTEX.InfoDict 8845 0 R
 /BBox [0 0 29 29]
 /Resources <<
 /ProcSet [ /PDF /ImageC ]
 /ExtGState <<
-/R7 8860 0 R
+/R7 8846 0 R
 >>/XObject <<
-/R8 8861 0 R
+/R8 8847 0 R
 >>>>
-/Length 8862 0 R
+/Length 8848 0 R
 /Filter /FlateDecode
 >>
 stream
-xœ+T0Ð3T0 A(œË¥d®^ÌU¨`daцzæÆ&æ ÚÈÌÔ¢ÎBÁ%Ÿ+L®
+xœ+T0Ð3T0 A(œË¥d®^ÌU¨`daцzæÆFFPÚ¢ÌBÁ%Ÿ+t
 endstream
 endobj
-8859 0 obj
+8845 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110837)
-/ModDate (D:20080610110837)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090356-05'00')
+/ModDate (D:20080528090356-05'00')
 >>
 endobj
-8860 0 obj
+8846 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-8861 0 obj
+8847 0 obj
 <<
 /Subtype /Image
 /ColorSpace /DeviceRGB
@@ -41958,18 +44829,18 @@
 ¬Õ+(Í-Xè ì»¾›|ßëPÕÀ+í‰Rõìô¿>È*øƒ{°lK,XsYÙ’ÌQáw®ÝìY¯¦ØT§ÅÆ{5tƒì-7sç‚dX¼e‚âáWN;mv¢ì’§EÐtË|l¬Gwe+È7ž18+áH`'‰4pJ¼ ÀN‘À
 endstream
 endobj
-8862 0 obj
-58
+8848 0 obj
+54
 endobj
-8858 0 obj <<
-/D [8856 0 R /XYZ 100.892 685.529 null]
+8844 0 obj <<
+/D [8842 0 R /XYZ 100.892 685.529 null]
 >> endobj
-8855 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F93 7030 0 R /F15 3700 0 R /F85 5513 0 R /F59 4373 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R /F53 3738 0 R /F17 3698 0 R /F96 8585 0 R >>
-/XObject << /Im36 8854 0 R >>
+8841 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F93 7029 0 R /F15 3700 0 R /F85 5513 0 R /F59 4373 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R /F53 3738 0 R /F17 3698 0 R /F96 8572 0 R >>
+/XObject << /Im36 8840 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8866 0 obj <<
+8852 0 obj <<
 /Length 2411      
 /Filter /FlateDecode
 >>
@@ -42000,35 +44871,35 @@
 ³ ˆ‚}ëú?¹dLkÂïøECz*Œ/¸/xµþ,ˆÂ®?ǃ=¹è¬é9ç¼°v9ñ9½Þ€o“Ä¿‰Í¡î™éó×­„»3^¢Gf à-l“‰Ø0‘‚¶t._Ü‚0»z¥Q^8ÍpÁðÿîöâ¿+uf¥
 endstream
 endobj
-8865 0 obj <<
+8851 0 obj <<
 /Type /Page
-/Contents 8866 0 R
-/Resources 8864 0 R
+/Contents 8852 0 R
+/Resources 8850 0 R
 /MediaBox [0 0 612 792]
-/Parent 8853 0 R
-/Annots [ 8863 0 R ]
+/Parent 8839 0 R
+/Annots [ 8849 0 R ]
 >> endobj
-8863 0 obj <<
+8849 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.751 413.559 504.08 426.46]
 /Subtype /Link
 /A << /S /GoTo /D (cups-msrpc) >>
 >> endobj
-8867 0 obj <<
-/D [8865 0 R /XYZ 151.701 685.529 null]
+8853 0 obj <<
+/D [8851 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1642 0 obj <<
-/D [8865 0 R /XYZ 151.701 208.1 null]
+/D [8851 0 R /XYZ 151.701 208.1 null]
 >> endobj
-8868 0 obj <<
-/D [8865 0 R /XYZ 151.701 180.499 null]
+8854 0 obj <<
+/D [8851 0 R /XYZ 151.701 180.499 null]
 >> endobj
-8864 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F93 7030 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F17 3698 0 R >>
+8850 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F93 7029 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8872 0 obj <<
+8858 0 obj <<
 /Length 2387      
 /Filter /FlateDecode
 >>
@@ -42060,21 +44931,21 @@
 ‚JÙüÂÿNB4¤ýÑðh†ÝcÝå¬&Lÿïžþ€qXË
 endstream
 endobj
-8871 0 obj <<
+8857 0 obj <<
 /Type /Page
-/Contents 8872 0 R
-/Resources 8870 0 R
+/Contents 8858 0 R
+/Resources 8856 0 R
 /MediaBox [0 0 612 792]
-/Parent 8853 0 R
+/Parent 8839 0 R
 >> endobj
-8873 0 obj <<
-/D [8871 0 R /XYZ 100.892 685.529 null]
+8859 0 obj <<
+/D [8857 0 R /XYZ 100.892 685.529 null]
 >> endobj
-8870 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F93 7030 0 R /F59 4373 0 R /F17 3698 0 R >>
+8856 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F93 7029 0 R /F59 4373 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8876 0 obj <<
+8862 0 obj <<
 /Length 1999      
 /Filter /FlateDecode
 >>
@@ -42087,27 +44958,27 @@
 Ïm]lÂIâ•DQ½LJKIT¹®|Ø)…ìÕAÆœ«Px,@Ä•–x”™ËN*Närt$¨?-ªœù‹ôð_Ï5
 endstream
 endobj
-8875 0 obj <<
+8861 0 obj <<
 /Type /Page
-/Contents 8876 0 R
-/Resources 8874 0 R
+/Contents 8862 0 R
+/Resources 8860 0 R
 /MediaBox [0 0 612 792]
-/Parent 8853 0 R
+/Parent 8839 0 R
 >> endobj
-8877 0 obj <<
-/D [8875 0 R /XYZ 151.701 685.529 null]
+8863 0 obj <<
+/D [8861 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1646 0 obj <<
-/D [8875 0 R /XYZ 151.701 417.839 null]
+/D [8861 0 R /XYZ 151.701 417.839 null]
 >> endobj
-8878 0 obj <<
-/D [8875 0 R /XYZ 151.701 391.26 null]
+8864 0 obj <<
+/D [8861 0 R /XYZ 151.701 391.26 null]
 >> endobj
-8874 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F93 7030 0 R /F15 3700 0 R /F59 4373 0 R /F85 5513 0 R /F17 3698 0 R /F53 3738 0 R >>
+8860 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F93 7029 0 R /F15 3700 0 R /F59 4373 0 R /F85 5513 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8883 0 obj <<
+8869 0 obj <<
 /Length 1896      
 /Filter /FlateDecode
 >>
@@ -42133,42 +45004,42 @@
 g_É„ð*8ÐÙÁlhwΝ³F`l‘¡â’åËœyqp=»°A&U±,¼½¾®vaFäÙ—Y’ºÏì\Ñc’{çÍ|7…•sI‰rÃg6Ð{`þ™ˆN•L9ðïõø:þÍ#ú$ØÁ€n¯åîøEþE`%%
 endstream
 endobj
-8882 0 obj <<
+8868 0 obj <<
 /Type /Page
-/Contents 8883 0 R
-/Resources 8881 0 R
+/Contents 8869 0 R
+/Resources 8867 0 R
 /MediaBox [0 0 612 792]
-/Parent 8853 0 R
-/Annots [ 8879 0 R 8880 0 R ]
+/Parent 8839 0 R
+/Annots [ 8865 0 R 8866 0 R ]
 >> endobj
-8879 0 obj <<
+8865 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.333 422.322 289.871 434.011]
 /Subtype /Link
 /A << /S /GoTo /D (ptrsect) >>
 >> endobj
-8880 0 obj <<
+8866 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.44 390.437 280.978 400.006]
 /Subtype /Link
 /A << /S /GoTo /D (ptrsect) >>
 >> endobj
-8884 0 obj <<
-/D [8882 0 R /XYZ 100.892 685.529 null]
+8870 0 obj <<
+/D [8868 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1650 0 obj <<
-/D [8882 0 R /XYZ 100.892 179.222 null]
+/D [8868 0 R /XYZ 100.892 179.222 null]
 >> endobj
-8885 0 obj <<
-/D [8882 0 R /XYZ 100.892 155.251 null]
+8871 0 obj <<
+/D [8868 0 R /XYZ 100.892 155.251 null]
 >> endobj
-8881 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F93 7030 0 R /F15 3700 0 R /F59 4373 0 R /F17 3698 0 R /F85 5513 0 R >>
+8867 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F93 7029 0 R /F15 3700 0 R /F59 4373 0 R /F17 3698 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8891 0 obj <<
+8877 0 obj <<
 /Length 2561      
 /Filter /FlateDecode
 >>
@@ -42192,55 +45063,55 @@
 #ÿ´ÂHüü±¤kFKÈØ“ìYrt¹ ¢/ÜڍOúòԍO-H‰¼Ï¥á!ùñ3%FĦáã,·èð3ye²ÎÉÈQ^HõÂKѦSå½w£¡É¼—¹Æì1&™%.(ÆʍŽÚ¼Ë$	uÂ9¡2r¶Ïfà«\Ë¥Ëwòšô,ãâµ@C›Å·[Sðn˜ã.6ÉuáßàŽ ;r°O°&?Ý^ÒEæCD>R=Ë2“ÔQXÍ1CèÓýËÒܐ§\Ü×v¤Íáÿ*Íÿ¿loþ%cÒ
 endstream
 endobj
-8890 0 obj <<
+8876 0 obj <<
 /Type /Page
-/Contents 8891 0 R
-/Resources 8889 0 R
+/Contents 8877 0 R
+/Resources 8875 0 R
 /MediaBox [0 0 612 792]
-/Parent 8895 0 R
-/Annots [ 8886 0 R 8887 0 R 8888 0 R ]
+/Parent 8881 0 R
+/Annots [ 8872 0 R 8873 0 R 8874 0 R ]
 >> endobj
-8886 0 obj <<
+8872 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [163.484 379.481 214.922 391.776]
 /Subtype /Link
 /A << /S /GoTo /D (printOptions) >>
 >> endobj
-8887 0 obj <<
+8873 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.618 352.382 468.542 364.072]
 /Subtype /Link
 /A << /S /GoTo /D (printOptions) >>
 >> endobj
-8888 0 obj <<
+8874 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.856 325.284 409.395 336.973]
 /Subtype /Link
 /A << /S /GoTo /D (CUPS-printing) >>
 >> endobj
-8892 0 obj <<
-/D [8890 0 R /XYZ 151.701 685.529 null]
+8878 0 obj <<
+/D [8876 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1654 0 obj <<
-/D [8890 0 R /XYZ 151.701 483.081 null]
+/D [8876 0 R /XYZ 151.701 483.081 null]
 >> endobj
-8893 0 obj <<
-/D [8890 0 R /XYZ 151.701 456.05 null]
+8879 0 obj <<
+/D [8876 0 R /XYZ 151.701 456.05 null]
 >> endobj
 1658 0 obj <<
-/D [8890 0 R /XYZ 151.701 208.179 null]
+/D [8876 0 R /XYZ 151.701 208.179 null]
 >> endobj
-8894 0 obj <<
-/D [8890 0 R /XYZ 151.701 183.278 null]
+8880 0 obj <<
+/D [8876 0 R /XYZ 151.701 183.278 null]
 >> endobj
-8889 0 obj <<
+8875 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R /F17 3698 0 R /F85 5513 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8900 0 obj <<
+8886 0 obj <<
 /Length 2348      
 /Filter /FlateDecode
 >>
@@ -42269,35 +45140,35 @@
 Ùuìzcûh»\ù„jl3>t^ÔI²Z‘¤?$Œ“oÀd ©òig¨náÑK樷Áá>@ïZhï~Õ2û}ãI:§¼‚È²SåÑ#×atZ)_[ À(ag5[(c¥ìõ±šm{S¶[¥â­…/bÑ"Ø*Ú"À6,@}ô"¸Î)oÇ‹þ3I+lâ‚GÐTõ&k¨ûÂï1mçÚeäYJŠ^¨ÜD·$ãu³bí¨pS¸8WØ+Û*¹Ã6Úø}žæ㧴î’*K²>¾’àš§Ë#SbmÏÜÿ)\ŸC%»«p{…Òÿ ûÜQ
 endstream
 endobj
-8899 0 obj <<
+8885 0 obj <<
 /Type /Page
-/Contents 8900 0 R
-/Resources 8898 0 R
+/Contents 8886 0 R
+/Resources 8884 0 R
 /MediaBox [0 0 612 792]
-/Parent 8895 0 R
-/Annots [ 8897 0 R ]
+/Parent 8881 0 R
+/Annots [ 8883 0 R ]
 >> endobj
-8897 0 obj <<
+8883 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [321.102 289.455 373.249 302.357]
 /Subtype /Link
 /A << /S /GoTo /D (printOptions) >>
 >> endobj
-8901 0 obj <<
-/D [8899 0 R /XYZ 100.892 685.529 null]
+8887 0 obj <<
+/D [8885 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5362 0 obj <<
-/D [8899 0 R /XYZ 100.892 660.623 null]
+/D [8885 0 R /XYZ 100.892 660.623 null]
 >> endobj
-8896 0 obj <<
-/D [8899 0 R /XYZ 100.892 643.753 null]
+8882 0 obj <<
+/D [8885 0 R /XYZ 100.892 643.753 null]
 >> endobj
-8898 0 obj <<
+8884 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F51 3736 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8904 0 obj <<
+8890 0 obj <<
 /Length 3039      
 /Filter /FlateDecode
 >>
@@ -42328,39 +45199,39 @@
 oâ1Ãï_7|YCzbèƒ*èð•½ö¦û¦ ÆšºvÄæàÛ ¾ó´Ñw” \Ó—03ë»»_¾çïjK´ÜÛæø߸Ä{¹˜hP«ÿ;&«_
 endstream
 endobj
-8903 0 obj <<
+8889 0 obj <<
 /Type /Page
-/Contents 8904 0 R
-/Resources 8902 0 R
+/Contents 8890 0 R
+/Resources 8888 0 R
 /MediaBox [0 0 612 792]
-/Parent 8895 0 R
+/Parent 8881 0 R
 >> endobj
-8905 0 obj <<
-/D [8903 0 R /XYZ 151.701 685.529 null]
+8891 0 obj <<
+/D [8889 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8907 0 obj <<
-/D [8903 0 R /XYZ 151.701 353.326 null]
+8893 0 obj <<
+/D [8889 0 R /XYZ 151.701 353.326 null]
 >> endobj
-8908 0 obj <<
-/D [8903 0 R /XYZ 151.701 354.509 null]
+8894 0 obj <<
+/D [8889 0 R /XYZ 151.701 354.509 null]
 >> endobj
-8909 0 obj <<
-/D [8903 0 R /XYZ 151.701 250.104 null]
+8895 0 obj <<
+/D [8889 0 R /XYZ 151.701 250.104 null]
 >> endobj
-8910 0 obj <<
-/D [8903 0 R /XYZ 151.701 250.681 null]
+8896 0 obj <<
+/D [8889 0 R /XYZ 151.701 250.681 null]
 >> endobj
 1662 0 obj <<
-/D [8903 0 R /XYZ 151.701 194.452 null]
+/D [8889 0 R /XYZ 151.701 194.452 null]
 >> endobj
-8869 0 obj <<
-/D [8903 0 R /XYZ 151.701 166.769 null]
+8855 0 obj <<
+/D [8889 0 R /XYZ 151.701 166.769 null]
 >> endobj
-8902 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F51 3736 0 R /F85 5513 0 R /F15 3700 0 R /F59 4373 0 R /F97 8906 0 R /F53 3738 0 R /F4 5484 0 R /F52 3737 0 R /F17 3698 0 R >>
+8888 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F51 3736 0 R /F85 5513 0 R /F15 3700 0 R /F59 4373 0 R /F97 8892 0 R /F53 3738 0 R /F4 5484 0 R /F52 3737 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8915 0 obj <<
+8901 0 obj <<
 /Length 2208      
 /Filter /FlateDecode
 >>
@@ -42377,34 +45248,34 @@
 TúrÁü¶÷ßrB€‚&i€§3ý­„îÒ.uº}9…'”ÿjÇHï˜fÚÑüpÝÒæûŒ™KÃéÆ彏´øb~š¸,+`LJΣm»‡¡Ü¶‚;è믐9awRѝzkQ[õ£[Öy5,Ì.Ìg­pÿ ÿMì¡'”nßX>iJмžªÚ<ÒAÎÇòï^=°íNœÖ9,Ø«‰ó‹V²p°Âˆ%ùø¹俸t.a™,Ñ2ƒƒômõزâÅ‹ήíy¨Ä(Ô#†[Åm1ù«óyˆý°øätž†U° (RÉØR9`Ë„u½þ¹uÏ‹×ò4ç’æí“é?w­Y|£Ê„ù¡à;bTÛÅp½÷ìê’KFyõf€cîÎF"™ù ¿ëÌž’æ¹âOþéöލ±ÿѽ‚<mÜE£›Ä¤òE ³‚²Ç´†^|î”Q(’$þÒ{§Œ”ˆ’ós'=sªÀ‹áº•&|uVB…™'UQÍ.ωœ¼ôFBÆtßʧö?]Uùé”=29?†áøõímE·x¸S°íCYühDk†Û«…fûÊ8€›ž—ú†E›a-	×ÀJWrvgü½ÐزMUôíQtÍ—…C¡./DßÌx¯ÿ ãOêÝ
 endstream
 endobj
-8914 0 obj <<
+8900 0 obj <<
 /Type /Page
-/Contents 8915 0 R
-/Resources 8913 0 R
+/Contents 8901 0 R
+/Resources 8899 0 R
 /MediaBox [0 0 612 792]
-/Parent 8895 0 R
-/Annots [ 8911 0 R 8912 0 R ]
+/Parent 8881 0 R
+/Annots [ 8897 0 R 8898 0 R ]
 >> endobj
-8911 0 obj <<
+8897 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 127.92 276.277 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://imprints.sourceforge.net/)>>
 >> endobj
-8912 0 obj <<
+8898 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 248.033 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://msdn.microsoft.com/)>>
 >> endobj
-8916 0 obj <<
-/D [8914 0 R /XYZ 100.892 685.529 null]
+8902 0 obj <<
+/D [8900 0 R /XYZ 100.892 685.529 null]
 >> endobj
-8913 0 obj <<
+8899 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F51 3736 0 R /F29 5413 0 R /F53 3738 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8919 0 obj <<
+8905 0 obj <<
 /Length 2377      
 /Filter /FlateDecode
 >>
@@ -42432,33 +45303,33 @@
 µ¼pÄ!À/÷·¡ÑHE”RGœ°íóga)ý"ðÕÖ¯o;[Í«µÁPwQÞoÞEËÎ]´l– òÂP+êdê¢4ÉÔ¤ïzž’ÇÓ;ÑÑ£ÃÍõìúi*3ü_Ý]ý‡‹
 endstream
 endobj
-8918 0 obj <<
+8904 0 obj <<
 /Type /Page
-/Contents 8919 0 R
-/Resources 8917 0 R
+/Contents 8905 0 R
+/Resources 8903 0 R
 /MediaBox [0 0 612 792]
-/Parent 8895 0 R
+/Parent 8881 0 R
 >> endobj
-8920 0 obj <<
-/D [8918 0 R /XYZ 151.701 685.529 null]
+8906 0 obj <<
+/D [8904 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1666 0 obj <<
-/D [8918 0 R /XYZ 151.701 660.623 null]
+/D [8904 0 R /XYZ 151.701 660.623 null]
 >> endobj
-8921 0 obj <<
-/D [8918 0 R /XYZ 151.701 644.027 null]
+8907 0 obj <<
+/D [8904 0 R /XYZ 151.701 644.027 null]
 >> endobj
 1670 0 obj <<
-/D [8918 0 R /XYZ 151.701 192.977 null]
+/D [8904 0 R /XYZ 151.701 192.977 null]
 >> endobj
-8922 0 obj <<
-/D [8918 0 R /XYZ 151.701 165.914 null]
+8908 0 obj <<
+/D [8904 0 R /XYZ 151.701 165.914 null]
 >> endobj
-8917 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F96 8585 0 R /F51 3736 0 R /F85 5513 0 R /F97 8906 0 R >>
+8903 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F96 8572 0 R /F51 3736 0 R /F85 5513 0 R /F97 8892 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8926 0 obj <<
+8912 0 obj <<
 /Length 2358      
 /Filter /FlateDecode
 >>
@@ -42481,41 +45352,41 @@
 òÇJ±ªdÞû눟¬à§ó¯‡9½™Åÿ«@“Ò¿VZ³|ƒWBESß{:€9kg‡ YT<ƒ!eÜ}hŒ²²î†Ã{Ĭ~ÖºÊq•©Œ2$@ìÛ.ÎCëÞgºšs‰ø€°¨h8_öIlxÎG°J8~ýûŒÆ¾ÆK„e«ù·eTorë%à˜÷Ý*YŠ¨Òá)ŠšS°!éßœ>Ù¯ÚŒw_ÔÄÔç]äÅW|/bue¦çk&Ûýe½$=˜	ÂÑ›#ùË)pø}³¿ûWÛ
 endstream
 endobj
-8925 0 obj <<
+8911 0 obj <<
 /Type /Page
-/Contents 8926 0 R
-/Resources 8924 0 R
+/Contents 8912 0 R
+/Resources 8910 0 R
 /MediaBox [0 0 612 792]
-/Parent 8895 0 R
-/Annots [ 8923 0 R ]
+/Parent 8881 0 R
+/Annots [ 8909 0 R ]
 >> endobj
-8923 0 obj <<
+8909 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [119.289 256.567 194.464 268.256]
 /Subtype /Link
 /A << /S /GoTo /D (prtdollar) >>
 >> endobj
-8927 0 obj <<
-/D [8925 0 R /XYZ 100.892 685.529 null]
+8913 0 obj <<
+/D [8911 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1674 0 obj <<
-/D [8925 0 R /XYZ 100.892 421.657 null]
+/D [8911 0 R /XYZ 100.892 421.657 null]
 >> endobj
-8928 0 obj <<
-/D [8925 0 R /XYZ 100.892 393.949 null]
+8914 0 obj <<
+/D [8911 0 R /XYZ 100.892 393.949 null]
 >> endobj
 1678 0 obj <<
-/D [8925 0 R /XYZ 100.892 207.817 null]
+/D [8911 0 R /XYZ 100.892 207.817 null]
 >> endobj
-8929 0 obj <<
-/D [8925 0 R /XYZ 100.892 180.108 null]
+8915 0 obj <<
+/D [8911 0 R /XYZ 100.892 180.108 null]
 >> endobj
-8924 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F96 8585 0 R /F85 5513 0 R /F17 3698 0 R /F53 3738 0 R >>
+8910 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F96 8572 0 R /F85 5513 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8933 0 obj <<
+8919 0 obj <<
 /Length 2923      
 /Filter /FlateDecode
 >>
@@ -42539,72 +45410,72 @@
 âsÕfÁý.ljÙ*—ŸzÃIçÛ¾ç™&ª×=¿…õ¥mØùkå‰Ñ\am1ÏüºXãüoaÅ8Íòí–ódâÐ¥$µbMí {Wl¸uJS9ÔÔ Y îf+zcIˆ!ÿ؃3
 endstream
 endobj
-8932 0 obj <<
+8918 0 obj <<
 /Type /Page
-/Contents 8933 0 R
-/Resources 8931 0 R
+/Contents 8919 0 R
+/Resources 8917 0 R
 /MediaBox [0 0 612 792]
-/Parent 8950 0 R
+/Parent 8936 0 R
 >> endobj
-8934 0 obj <<
-/D [8932 0 R /XYZ 151.701 685.529 null]
+8920 0 obj <<
+/D [8918 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5094 0 obj <<
-/D [8932 0 R /XYZ 151.701 660.623 null]
+/D [8918 0 R /XYZ 151.701 660.623 null]
 >> endobj
-8930 0 obj <<
-/D [8932 0 R /XYZ 151.701 642.541 null]
+8916 0 obj <<
+/D [8918 0 R /XYZ 151.701 642.541 null]
 >> endobj
-8935 0 obj <<
-/D [8932 0 R /XYZ 151.701 636.563 null]
+8921 0 obj <<
+/D [8918 0 R /XYZ 151.701 636.563 null]
 >> endobj
-8936 0 obj <<
-/D [8932 0 R /XYZ 151.701 642.839 null]
+8922 0 obj <<
+/D [8918 0 R /XYZ 151.701 642.839 null]
 >> endobj
-8937 0 obj <<
-/D [8932 0 R /XYZ 151.701 630.884 null]
+8923 0 obj <<
+/D [8918 0 R /XYZ 151.701 630.884 null]
 >> endobj
-8938 0 obj <<
-/D [8932 0 R /XYZ 151.701 606.974 null]
+8924 0 obj <<
+/D [8918 0 R /XYZ 151.701 606.974 null]
 >> endobj
-8939 0 obj <<
-/D [8932 0 R /XYZ 151.701 583.063 null]
+8925 0 obj <<
+/D [8918 0 R /XYZ 151.701 583.063 null]
 >> endobj
-8940 0 obj <<
-/D [8932 0 R /XYZ 151.701 571.108 null]
+8926 0 obj <<
+/D [8918 0 R /XYZ 151.701 571.108 null]
 >> endobj
-8941 0 obj <<
-/D [8932 0 R /XYZ 151.701 559.153 null]
+8927 0 obj <<
+/D [8918 0 R /XYZ 151.701 559.153 null]
 >> endobj
-8942 0 obj <<
-/D [8932 0 R /XYZ 151.701 547.198 null]
+8928 0 obj <<
+/D [8918 0 R /XYZ 151.701 547.198 null]
 >> endobj
-8943 0 obj <<
-/D [8932 0 R /XYZ 151.701 535.243 null]
+8929 0 obj <<
+/D [8918 0 R /XYZ 151.701 535.243 null]
 >> endobj
-8944 0 obj <<
-/D [8932 0 R /XYZ 151.701 523.288 null]
+8930 0 obj <<
+/D [8918 0 R /XYZ 151.701 523.288 null]
 >> endobj
-8945 0 obj <<
-/D [8932 0 R /XYZ 151.701 511.332 null]
+8931 0 obj <<
+/D [8918 0 R /XYZ 151.701 511.332 null]
 >> endobj
-8946 0 obj <<
-/D [8932 0 R /XYZ 151.701 499.377 null]
+8932 0 obj <<
+/D [8918 0 R /XYZ 151.701 499.377 null]
 >> endobj
-8947 0 obj <<
-/D [8932 0 R /XYZ 151.701 487.422 null]
+8933 0 obj <<
+/D [8918 0 R /XYZ 151.701 487.422 null]
 >> endobj
-8948 0 obj <<
-/D [8932 0 R /XYZ 151.701 475.467 null]
+8934 0 obj <<
+/D [8918 0 R /XYZ 151.701 475.467 null]
 >> endobj
-8949 0 obj <<
-/D [8932 0 R /XYZ 151.701 463.512 null]
+8935 0 obj <<
+/D [8918 0 R /XYZ 151.701 463.512 null]
 >> endobj
-8931 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F4 5484 0 R /F59 4373 0 R /F51 3736 0 R /F52 3737 0 R /F93 7030 0 R /F96 8585 0 R /F17 3698 0 R /F53 3738 0 R >>
+8917 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F4 5484 0 R /F59 4373 0 R /F51 3736 0 R /F52 3737 0 R /F93 7029 0 R /F96 8572 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8953 0 obj <<
+8939 0 obj <<
 /Length 2204      
 /Filter /FlateDecode
 >>
@@ -42632,22 +45503,22 @@
 ƒ4lq… é˜6Œ]C/€‰¹t%XÕ½ \G`”æhc'nÔT4°C5œ¸,l¨»8KÙp¤5!œ(ëÙYª>>y²	âñëùƒïþ‘÷Å•RøÌ(²ø¦¹=dmð—Z³™=X›”‘/ÿ‹(“¥%o¤d69dù$ ‰nÕd‰ÕD/õÊ;D¡9x6‹V)Êri'p£àFö¡Ú-(Ù®¡SBÙå/§©{äp‡ƒ0…Y?†þiKè67x¥óᯙ“§Ö1ðDXÝ0†ÿvšþ	ÓŽ‹2øknž;~‹4Å´nîñøöß‘Ž|q
 endstream
 endobj
-8952 0 obj <<
+8938 0 obj <<
 /Type /Page
-/Contents 8953 0 R
-/Resources 8951 0 R
+/Contents 8939 0 R
+/Resources 8937 0 R
 /MediaBox [0 0 612 792]
-/Parent 8950 0 R
+/Parent 8936 0 R
 >> endobj
-8954 0 obj <<
-/D [8952 0 R /XYZ 100.892 685.529 null]
+8940 0 obj <<
+/D [8938 0 R /XYZ 100.892 685.529 null]
 >> endobj
-8951 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F85 5513 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R /F93 7030 0 R /F59 4373 0 R /F96 8585 0 R /F53 3738 0 R >>
+8937 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F85 5513 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R /F93 7029 0 R /F59 4373 0 R /F96 8572 0 R /F53 3738 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8957 0 obj <<
+8943 0 obj <<
 /Length 1841      
 /Filter /FlateDecode
 >>
@@ -42679,28 +45550,28 @@
 ßañŒ©Ñ‰cweàÐÿÁD/ad`σ_¨n'’ó'ÐÅ9ÆøoïÝõÞþÖõ9^Èð.NS¾¤¦ÛÖ“Ë`øBÌÿLb,_
 endstream
 endobj
-8956 0 obj <<
+8942 0 obj <<
 /Type /Page
-/Contents 8957 0 R
-/Resources 8955 0 R
+/Contents 8943 0 R
+/Resources 8941 0 R
 /MediaBox [0 0 612 792]
-/Parent 8950 0 R
+/Parent 8936 0 R
 >> endobj
-8958 0 obj <<
-/D [8956 0 R /XYZ 151.701 685.529 null]
+8944 0 obj <<
+/D [8942 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1682 0 obj <<
-/D [8956 0 R /XYZ 151.701 660.623 null]
+/D [8942 0 R /XYZ 151.701 660.623 null]
 >> endobj
-8959 0 obj <<
-/D [8956 0 R /XYZ 151.701 641.039 null]
+8945 0 obj <<
+/D [8942 0 R /XYZ 151.701 641.039 null]
 >> endobj
-8955 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F96 8585 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R /F51 3736 0 R /F89 6121 0 R >>
-/XObject << /Im27 7132 0 R >>
+8941 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F96 8572 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R /F51 3736 0 R /F89 6121 0 R >>
+/XObject << /Im27 7131 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8962 0 obj <<
+8948 0 obj <<
 /Length 2494      
 /Filter /FlateDecode
 >>
@@ -42726,33 +45597,33 @@
 íÓ‡ÔeŠ™–¶ýï››«ÿÔ=±t
 endstream
 endobj
-8961 0 obj <<
+8947 0 obj <<
 /Type /Page
-/Contents 8962 0 R
-/Resources 8960 0 R
+/Contents 8948 0 R
+/Resources 8946 0 R
 /MediaBox [0 0 612 792]
-/Parent 8950 0 R
+/Parent 8936 0 R
 >> endobj
-8963 0 obj <<
-/D [8961 0 R /XYZ 100.892 685.529 null]
+8949 0 obj <<
+/D [8947 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1686 0 obj <<
-/D [8961 0 R /XYZ 100.892 588.463 null]
+/D [8947 0 R /XYZ 100.892 588.463 null]
 >> endobj
-8964 0 obj <<
-/D [8961 0 R /XYZ 100.892 557.722 null]
+8950 0 obj <<
+/D [8947 0 R /XYZ 100.892 557.722 null]
 >> endobj
 1690 0 obj <<
-/D [8961 0 R /XYZ 100.892 296.056 null]
+/D [8947 0 R /XYZ 100.892 296.056 null]
 >> endobj
-8965 0 obj <<
-/D [8961 0 R /XYZ 100.892 271.977 null]
+8951 0 obj <<
+/D [8947 0 R /XYZ 100.892 271.977 null]
 >> endobj
-8960 0 obj <<
-/Font << /F22 3706 0 R /F15 3700 0 R /F50 3701 0 R /F17 3698 0 R /F59 4373 0 R /F96 8585 0 R /F53 3738 0 R /F51 3736 0 R >>
+8946 0 obj <<
+/Font << /F22 3706 0 R /F15 3700 0 R /F50 3701 0 R /F17 3698 0 R /F59 4373 0 R /F96 8572 0 R /F53 3738 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8969 0 obj <<
+8955 0 obj <<
 /Length 2373      
 /Filter /FlateDecode
 >>
@@ -42774,47 +45645,47 @@
 ¹æÞ·ÈþËy¹/aÀ.~žéÖjNSBA|Ys¢8¡DƒÁ*VåPS%3õyg#^‹<g%Ûo•«¦þÇ	'“ͬµ2/™Î§OÆH³ ¤Ï(¡˜ž0,Äë5†*]u¡—#$ ¡§fÔˆØÐ=/€J½˜Î¶Uå$YïÛ¡™2,—Åq´ví‰ú$+Õ2NÔ³Ê[‘êq™ÿRg‚©rúÀ`Åìƒjs¨ãwªå³:Ù¼Ö<ÿº’À¡ø9оªœøÿýÝÕ¿Õ—
 endstream
 endobj
-8968 0 obj <<
+8954 0 obj <<
 /Type /Page
-/Contents 8969 0 R
-/Resources 8967 0 R
+/Contents 8955 0 R
+/Resources 8953 0 R
 /MediaBox [0 0 612 792]
-/Parent 8950 0 R
-/Annots [ 8966 0 R ]
+/Parent 8936 0 R
+/Annots [ 8952 0 R ]
 >> endobj
-8966 0 obj <<
+8952 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.159 316.049 268.213 325.618]
 /Subtype /Link
 /A << /S /GoTo /D (inst-rpc) >>
 >> endobj
-8970 0 obj <<
-/D [8968 0 R /XYZ 151.701 685.529 null]
+8956 0 obj <<
+/D [8954 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1694 0 obj <<
-/D [8968 0 R /XYZ 151.701 303.816 null]
+/D [8954 0 R /XYZ 151.701 303.816 null]
 >> endobj
-8971 0 obj <<
-/D [8968 0 R /XYZ 151.701 275.399 null]
+8957 0 obj <<
+/D [8954 0 R /XYZ 151.701 275.399 null]
 >> endobj
-8972 0 obj <<
-/D [8968 0 R /XYZ 151.701 228.048 null]
+8958 0 obj <<
+/D [8954 0 R /XYZ 151.701 228.048 null]
 >> endobj
-8973 0 obj <<
-/D [8968 0 R /XYZ 151.701 207.591 null]
+8959 0 obj <<
+/D [8954 0 R /XYZ 151.701 207.591 null]
 >> endobj
-8974 0 obj <<
-/D [8968 0 R /XYZ 151.701 172.98 null]
+8960 0 obj <<
+/D [8954 0 R /XYZ 151.701 172.98 null]
 >> endobj
-8975 0 obj <<
-/D [8968 0 R /XYZ 151.701 141.701 null]
+8961 0 obj <<
+/D [8954 0 R /XYZ 151.701 141.701 null]
 >> endobj
-8967 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R /F17 3698 0 R /F51 3736 0 R /F96 8585 0 R >>
+8953 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R /F17 3698 0 R /F51 3736 0 R /F96 8572 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8978 0 obj <<
+8964 0 obj <<
 /Length 2729      
 /Filter /FlateDecode
 >>
@@ -42843,27 +45714,27 @@
 4]ýè}jÚ¢ûEºáÏÝð…È÷daK
 endstream
 endobj
-8977 0 obj <<
+8963 0 obj <<
 /Type /Page
-/Contents 8978 0 R
-/Resources 8976 0 R
+/Contents 8964 0 R
+/Resources 8962 0 R
 /MediaBox [0 0 612 792]
-/Parent 8950 0 R
+/Parent 8936 0 R
 >> endobj
-8979 0 obj <<
-/D [8977 0 R /XYZ 100.892 685.529 null]
+8965 0 obj <<
+/D [8963 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1698 0 obj <<
-/D [8977 0 R /XYZ 100.892 618.289 null]
+/D [8963 0 R /XYZ 100.892 618.289 null]
 >> endobj
-8980 0 obj <<
-/D [8977 0 R /XYZ 100.892 588.116 null]
+8966 0 obj <<
+/D [8963 0 R /XYZ 100.892 588.116 null]
 >> endobj
-8976 0 obj <<
-/Font << /F22 3706 0 R /F15 3700 0 R /F50 3701 0 R /F17 3698 0 R /F53 3738 0 R /F59 4373 0 R /F94 8188 0 R >>
+8962 0 obj <<
+/Font << /F22 3706 0 R /F15 3700 0 R /F50 3701 0 R /F17 3698 0 R /F53 3738 0 R /F59 4373 0 R /F94 8177 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8983 0 obj <<
+8969 0 obj <<
 /Length 1482      
 /Filter /FlateDecode
 >>
@@ -42889,21 +45760,21 @@
 ´ñ?
 endstream
 endobj
-8982 0 obj <<
+8968 0 obj <<
 /Type /Page
-/Contents 8983 0 R
-/Resources 8981 0 R
+/Contents 8969 0 R
+/Resources 8967 0 R
 /MediaBox [0 0 612 792]
-/Parent 8985 0 R
+/Parent 8971 0 R
 >> endobj
-8984 0 obj <<
-/D [8982 0 R /XYZ 151.701 685.529 null]
+8970 0 obj <<
+/D [8968 0 R /XYZ 151.701 685.529 null]
 >> endobj
-8981 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R /F96 8585 0 R >>
+8967 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R /F96 8572 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8988 0 obj <<
+8974 0 obj <<
 /Length 1950      
 /Filter /FlateDecode
 >>
@@ -42930,28 +45801,28 @@
 s/Z(æI}·(£?Éx_{[Z›ú,Ê:§1ÐÁšf ¯KS„žµ(‹Ú.P#E¨UZ´õ3Ì­O/‰>uFåš÷þÕèð¯Ãã³ó“ÃÓñ5í8»Ø¿2Ã;öh$øLØ¥]A‹ßZ¦¹¡ãƒSN’"¹ÕÕu¯ÚØNÌ\ßF/©À€¼½².ù»3=±»ûvC^Ñ¥Û”`žÜ&ùÌ3¶„_i¿uþ·Ý	-ÒµîU¦g>ý‰³ÿ¿ ô)¢0ð=ïi#p+ÎÍíÿCµ_˜£ÿÖ:÷q
 endstream
 endobj
-8987 0 obj <<
+8973 0 obj <<
 /Type /Page
-/Contents 8988 0 R
-/Resources 8986 0 R
+/Contents 8974 0 R
+/Resources 8972 0 R
 /MediaBox [0 0 612 792]
-/Parent 8985 0 R
+/Parent 8971 0 R
 >> endobj
-8989 0 obj <<
-/D [8987 0 R /XYZ 100.892 685.529 null]
+8975 0 obj <<
+/D [8973 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1702 0 obj <<
-/D [8987 0 R /XYZ 100.892 406.91 null]
+/D [8973 0 R /XYZ 100.892 406.91 null]
 >> endobj
-8990 0 obj <<
-/D [8987 0 R /XYZ 100.892 380.343 null]
+8976 0 obj <<
+/D [8973 0 R /XYZ 100.892 380.343 null]
 >> endobj
-8986 0 obj <<
-/Font << /F22 3706 0 R /F15 3700 0 R /F50 3701 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F59 4373 0 R /F96 8585 0 R >>
+8972 0 obj <<
+/Font << /F22 3706 0 R /F15 3700 0 R /F50 3701 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F59 4373 0 R /F96 8572 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8993 0 obj <<
+8979 0 obj <<
 /Length 2119      
 /Filter /FlateDecode
 >>
@@ -42972,27 +45843,27 @@
 yÚ>%./ÄíSp÷ýázö_ûï”
 endstream
 endobj
-8992 0 obj <<
+8978 0 obj <<
 /Type /Page
-/Contents 8993 0 R
-/Resources 8991 0 R
+/Contents 8979 0 R
+/Resources 8977 0 R
 /MediaBox [0 0 612 792]
-/Parent 8985 0 R
+/Parent 8971 0 R
 >> endobj
-8994 0 obj <<
-/D [8992 0 R /XYZ 151.701 685.529 null]
+8980 0 obj <<
+/D [8978 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1706 0 obj <<
-/D [8992 0 R /XYZ 151.701 467.834 null]
+/D [8978 0 R /XYZ 151.701 467.834 null]
 >> endobj
-8995 0 obj <<
-/D [8992 0 R /XYZ 151.701 441.037 null]
+8981 0 obj <<
+/D [8978 0 R /XYZ 151.701 441.037 null]
 >> endobj
-8991 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F59 4373 0 R /F96 8585 0 R /F17 3698 0 R /F51 3736 0 R >>
+8977 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F59 4373 0 R /F96 8572 0 R /F17 3698 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-8998 0 obj <<
+8984 0 obj <<
 /Length 1535      
 /Filter /FlateDecode
 >>
@@ -43013,27 +45884,27 @@
  iµ­{`fy®ÛÓðWû=gõ!fõûz2øtyé
 endstream
 endobj
-8997 0 obj <<
+8983 0 obj <<
 /Type /Page
-/Contents 8998 0 R
-/Resources 8996 0 R
+/Contents 8984 0 R
+/Resources 8982 0 R
 /MediaBox [0 0 612 792]
-/Parent 8985 0 R
+/Parent 8971 0 R
 >> endobj
-8999 0 obj <<
-/D [8997 0 R /XYZ 100.892 685.529 null]
+8985 0 obj <<
+/D [8983 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1710 0 obj <<
-/D [8997 0 R /XYZ 100.892 192.561 null]
+/D [8983 0 R /XYZ 100.892 192.561 null]
 >> endobj
-9000 0 obj <<
-/D [8997 0 R /XYZ 100.892 168.998 null]
+8986 0 obj <<
+/D [8983 0 R /XYZ 100.892 168.998 null]
 >> endobj
-8996 0 obj <<
+8982 0 obj <<
 /Font << /F22 3706 0 R /F15 3700 0 R /F50 3701 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9003 0 obj <<
+8989 0 obj <<
 /Length 996       
 /Filter /FlateDecode
 >>
@@ -43050,21 +45921,21 @@
 LC@õxïÇsÿf™b¨B;^‘€k¯¾uí>])üê-Ñí½=}91Ϙçn>¿Ø"›’I~H˜Dù?QAíq€¡ØÜŠõdéƒ+BȃÌ#øÙÓÀò™⃠b\ÖÄgd’³2É)¡Ä5á{çAù:^1{Î&è£ãm뺪NĦÿcbn¾«·þÄüj€wF
 endstream
 endobj
-9002 0 obj <<
+8988 0 obj <<
 /Type /Page
-/Contents 9003 0 R
-/Resources 9001 0 R
+/Contents 8989 0 R
+/Resources 8987 0 R
 /MediaBox [0 0 612 792]
-/Parent 8985 0 R
+/Parent 8971 0 R
 >> endobj
-9004 0 obj <<
-/D [9002 0 R /XYZ 151.701 685.529 null]
+8990 0 obj <<
+/D [8988 0 R /XYZ 151.701 685.529 null]
 >> endobj
-9001 0 obj <<
+8987 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9007 0 obj <<
+8993 0 obj <<
 /Length 1852      
 /Filter /FlateDecode
 >>
@@ -43082,27 +45953,27 @@
 BoaŠB|õg&¸×ýH£~œŠã®Ã`žV¼`„ԏŸÅÉb9Àpˆ#¦üÀÊ]^Í—OŸ>›ÏŸ//•ôöW¥öÚüÆ«
 endstream
 endobj
-9006 0 obj <<
+8992 0 obj <<
 /Type /Page
-/Contents 9007 0 R
-/Resources 9005 0 R
+/Contents 8993 0 R
+/Resources 8991 0 R
 /MediaBox [0 0 612 792]
-/Parent 8985 0 R
+/Parent 8971 0 R
 >> endobj
-9008 0 obj <<
-/D [9006 0 R /XYZ 100.892 685.529 null]
+8994 0 obj <<
+/D [8992 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1714 0 obj <<
-/D [9006 0 R /XYZ 100.892 523.064 null]
+/D [8992 0 R /XYZ 100.892 523.064 null]
 >> endobj
-9009 0 obj <<
-/D [9006 0 R /XYZ 100.892 495.75 null]
+8995 0 obj <<
+/D [8992 0 R /XYZ 100.892 495.75 null]
 >> endobj
-9005 0 obj <<
-/Font << /F22 3706 0 R /F15 3700 0 R /F50 3701 0 R /F53 3738 0 R /F59 4373 0 R /F17 3698 0 R /F96 8585 0 R >>
+8991 0 obj <<
+/Font << /F22 3706 0 R /F15 3700 0 R /F50 3701 0 R /F53 3738 0 R /F59 4373 0 R /F17 3698 0 R /F96 8572 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9012 0 obj <<
+8998 0 obj <<
 /Length 1527      
 /Filter /FlateDecode
 >>
@@ -43120,27 +45991,27 @@
 WŒ€)‚É7È)Ñ]³fºÿçŒVÿEh¿ßŒ;ÿ 	(®
 endstream
 endobj
-9011 0 obj <<
+8997 0 obj <<
 /Type /Page
-/Contents 9012 0 R
-/Resources 9010 0 R
+/Contents 8998 0 R
+/Resources 8996 0 R
 /MediaBox [0 0 612 792]
-/Parent 9015 0 R
+/Parent 9001 0 R
 >> endobj
-9013 0 obj <<
-/D [9011 0 R /XYZ 151.701 685.529 null]
+8999 0 obj <<
+/D [8997 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1718 0 obj <<
-/D [9011 0 R /XYZ 151.701 593.199 null]
+/D [8997 0 R /XYZ 151.701 593.199 null]
 >> endobj
-9014 0 obj <<
-/D [9011 0 R /XYZ 151.701 566.899 null]
+9000 0 obj <<
+/D [8997 0 R /XYZ 151.701 566.899 null]
 >> endobj
-9010 0 obj <<
+8996 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9018 0 obj <<
+9004 0 obj <<
 /Length 2261      
 /Filter /FlateDecode
 >>
@@ -43166,27 +46037,27 @@
 mM¯ûȺQª¦G;jŒŽ9ø¦;9éBDÁfԐ‚ Ú§hu¶¯Eùó·í¤'ŒrÐ#ÌùðFjaL|’X¸¦¾BA›ÛÓ6³߈ÔgÀŒP~ÀRZÀgŸ…Pðˆ‚U€‡Kι»MSzAüŽÀ]P@‰zÖ€ÕlÓÉÕmÁ†²·£~Í#©FÝ̹‡ rð“ý7¿†TÚý¿ÑK$±ÐJ{	ÐõáIô\Ã`c1t\ýwÁ	ÑÆ	«Æݪ£IB.>ɱ:Ö§îàêû^_Uý³íNz‡˜ëZžQAŽ‚!)n»/r¿!¯ð{@Ë“c¥F5ó¦%=ƒ€ÅÖG.6uG;¼ž©JGøíØñ1oMqe]møÙ„ÖôßìiÄ"Bé{k<Ž,ÒúШ<c׏3úBaÏë)n/¦Ì]¼r†?=#ë1¸ß=òÄÏo¾{Ö ʧçxŠr{.Ž÷EFî¶ÏEb1ýXL e6£Xô™…Yòªbi	©YAƒ:`s쏊ªp‡`‘òס¯CüÙñ#’	X-)ÀðÄz¹Hô˜ÇõÆW@ü¦ã!Ç.fEZÖ¦ö´þáK›¹7¢x#.>^dÊL׿Üú2æ߆ðóù1ûÿ׋‹ÿ Áª%
 endstream
 endobj
-9017 0 obj <<
+9003 0 obj <<
 /Type /Page
-/Contents 9018 0 R
-/Resources 9016 0 R
+/Contents 9004 0 R
+/Resources 9002 0 R
 /MediaBox [0 0 612 792]
-/Parent 9015 0 R
+/Parent 9001 0 R
 >> endobj
-9019 0 obj <<
-/D [9017 0 R /XYZ 100.892 685.529 null]
+9005 0 obj <<
+/D [9003 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1722 0 obj <<
-/D [9017 0 R /XYZ 100.892 477.396 null]
+/D [9003 0 R /XYZ 100.892 477.396 null]
 >> endobj
-9020 0 obj <<
-/D [9017 0 R /XYZ 100.892 451.792 null]
+9006 0 obj <<
+/D [9003 0 R /XYZ 100.892 451.792 null]
 >> endobj
-9016 0 obj <<
+9002 0 obj <<
 /Font << /F22 3706 0 R /F15 3700 0 R /F50 3701 0 R /F53 3738 0 R /F17 3698 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9023 0 obj <<
+9009 0 obj <<
 /Length 1682      
 /Filter /FlateDecode
 >>
@@ -43205,27 +46076,27 @@
 ÿ¥Ù
 endstream
 endobj
-9022 0 obj <<
+9008 0 obj <<
 /Type /Page
-/Contents 9023 0 R
-/Resources 9021 0 R
+/Contents 9009 0 R
+/Resources 9007 0 R
 /MediaBox [0 0 612 792]
-/Parent 9015 0 R
+/Parent 9001 0 R
 >> endobj
-9024 0 obj <<
-/D [9022 0 R /XYZ 151.701 685.529 null]
+9010 0 obj <<
+/D [9008 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1726 0 obj <<
-/D [9022 0 R /XYZ 151.701 348.89 null]
+/D [9008 0 R /XYZ 151.701 348.89 null]
 >> endobj
-9025 0 obj <<
-/D [9022 0 R /XYZ 151.701 322.731 null]
+9011 0 obj <<
+/D [9008 0 R /XYZ 151.701 322.731 null]
 >> endobj
-9021 0 obj <<
+9007 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F85 5513 0 R /F53 3738 0 R /F51 3736 0 R /F59 4373 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9028 0 obj <<
+9014 0 obj <<
 /Length 1478      
 /Filter /FlateDecode
 >>
@@ -43243,27 +46114,27 @@
 )ó@S$ºwÕS¹ùêL²’Æ…*ªúy÷h’¼5AIi/O_à`ÇTŒu9ÍDZ‡ÃaQbÍÒÏ¥øsñà	ë€L)äŠò֐VÝ'i‹†Šù86ፚRGÄÐ<‡£–¡®ªöê4êÍ“(:—‡8ùÛ=ü*¥ïá¥ZÆfHð§=Y¶8y÷âÄyyù~ñ½öõqgüLÿĶÆß°ãZ<i£Õ>õ…pÓºïôdÏh¹NVÈ·:…ÊÎ"ð¨g9"5lzÍA³Å›KúŽ	5î`’UF†^…Âþ°a_s0oslµKÍZ·2*ê%Qu>…ì¾)3•M‚„ÿ\xÐøg ÃŒ‡PÏÿ@Í?Ëž5š¢­äždä=üîhJ¤}Y›ŠÝý¥ì¿ðOõ_Ÿ':
 endstream
 endobj
-9027 0 obj <<
+9013 0 obj <<
 /Type /Page
-/Contents 9028 0 R
-/Resources 9026 0 R
+/Contents 9014 0 R
+/Resources 9012 0 R
 /MediaBox [0 0 612 792]
-/Parent 9015 0 R
+/Parent 9001 0 R
 >> endobj
-9029 0 obj <<
-/D [9027 0 R /XYZ 100.892 685.529 null]
+9015 0 obj <<
+/D [9013 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1730 0 obj <<
-/D [9027 0 R /XYZ 100.892 421.238 null]
+/D [9013 0 R /XYZ 100.892 421.238 null]
 >> endobj
-9030 0 obj <<
-/D [9027 0 R /XYZ 100.892 391.51 null]
+9016 0 obj <<
+/D [9013 0 R /XYZ 100.892 391.51 null]
 >> endobj
-9026 0 obj <<
-/Font << /F22 3706 0 R /F15 3700 0 R /F50 3701 0 R /F53 3738 0 R /F59 4373 0 R /F96 8585 0 R /F17 3698 0 R >>
+9012 0 obj <<
+/Font << /F22 3706 0 R /F15 3700 0 R /F50 3701 0 R /F53 3738 0 R /F59 4373 0 R /F96 8572 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9033 0 obj <<
+9019 0 obj <<
 /Length 1962      
 /Filter /FlateDecode
 >>
@@ -43287,34 +46158,34 @@
 Éà³È
 endstream
 endobj
-9032 0 obj <<
+9018 0 obj <<
 /Type /Page
-/Contents 9033 0 R
-/Resources 9031 0 R
+/Contents 9019 0 R
+/Resources 9017 0 R
 /MediaBox [0 0 612 792]
-/Parent 9015 0 R
+/Parent 9001 0 R
 >> endobj
-9034 0 obj <<
-/D [9032 0 R /XYZ 151.701 685.529 null]
+9020 0 obj <<
+/D [9018 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1734 0 obj <<
-/D [9032 0 R /XYZ 151.701 403.162 null]
+/D [9018 0 R /XYZ 151.701 403.162 null]
 >> endobj
-9035 0 obj <<
-/D [9032 0 R /XYZ 151.701 377.819 null]
+9021 0 obj <<
+/D [9018 0 R /XYZ 151.701 377.819 null]
 >> endobj
 1738 0 obj <<
-/D [9032 0 R /XYZ 151.701 314.944 null]
+/D [9018 0 R /XYZ 151.701 314.944 null]
 >> endobj
-9036 0 obj <<
-/D [9032 0 R /XYZ 151.701 290.981 null]
+9022 0 obj <<
+/D [9018 0 R /XYZ 151.701 290.981 null]
 >> endobj
-9031 0 obj <<
+9017 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F59 4373 0 R /F85 5513 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9039 0 obj <<
+9025 0 obj <<
 /Length 2283      
 /Filter /FlateDecode
 >>
@@ -43341,42 +46212,42 @@
 g`¸sTh’ºl— ¢`€•\‘v¼ç¾ODé…Ea>¯ZüÖ §1ÞEQ(ÔåW¶#Õdä×¾hpDCò/{í¨Î[Ñ¥z×w,žX¾ŽDEßX¹<kº3ÏÚ.õÐÆ|9®ïWkr@¡éóˆë9ð£]FèÁã”põ™-ÓÙšA•š:o6ç˜4Í?ßì¯þ1"ð
 endstream
 endobj
-9038 0 obj <<
+9024 0 obj <<
 /Type /Page
-/Contents 9039 0 R
-/Resources 9037 0 R
+/Contents 9025 0 R
+/Resources 9023 0 R
 /MediaBox [0 0 612 792]
-/Parent 9015 0 R
+/Parent 9001 0 R
 >> endobj
-9040 0 obj <<
-/D [9038 0 R /XYZ 100.892 685.529 null]
+9026 0 obj <<
+/D [9024 0 R /XYZ 100.892 685.529 null]
 >> endobj
-9041 0 obj <<
-/D [9038 0 R /XYZ 100.892 541.27 null]
+9027 0 obj <<
+/D [9024 0 R /XYZ 100.892 541.27 null]
 >> endobj
-9042 0 obj <<
-/D [9038 0 R /XYZ 100.892 517.286 null]
+9028 0 obj <<
+/D [9024 0 R /XYZ 100.892 517.286 null]
 >> endobj
-9043 0 obj <<
-/D [9038 0 R /XYZ 100.892 497.545 null]
+9029 0 obj <<
+/D [9024 0 R /XYZ 100.892 497.545 null]
 >> endobj
-9044 0 obj <<
-/D [9038 0 R /XYZ 100.892 473.561 null]
+9030 0 obj <<
+/D [9024 0 R /XYZ 100.892 473.561 null]
 >> endobj
-9045 0 obj <<
-/D [9038 0 R /XYZ 100.892 451.698 null]
+9031 0 obj <<
+/D [9024 0 R /XYZ 100.892 451.698 null]
 >> endobj
 1742 0 obj <<
-/D [9038 0 R /XYZ 100.892 239.309 null]
+/D [9024 0 R /XYZ 100.892 239.309 null]
 >> endobj
-9046 0 obj <<
-/D [9038 0 R /XYZ 100.892 211.607 null]
+9032 0 obj <<
+/D [9024 0 R /XYZ 100.892 211.607 null]
 >> endobj
-9037 0 obj <<
+9023 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F17 3698 0 R /F85 5513 0 R /F52 3737 0 R /F53 3738 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9049 0 obj <<
+9035 0 obj <<
 /Length 2368      
 /Filter /FlateDecode
 >>
@@ -43399,36 +46270,36 @@
 ‚r•^ªjñ3ë¯Lí?NjmܨydÞ…÷´ó»bÉY¥\¦d«ìà}O_w¸îà£ÍLsBÒôjº¿ÿýaõ÷ I3
 endstream
 endobj
-9048 0 obj <<
+9034 0 obj <<
 /Type /Page
-/Contents 9049 0 R
-/Resources 9047 0 R
+/Contents 9035 0 R
+/Resources 9033 0 R
 /MediaBox [0 0 612 792]
-/Parent 9056 0 R
+/Parent 9042 0 R
 >> endobj
-9050 0 obj <<
-/D [9048 0 R /XYZ 151.701 685.529 null]
+9036 0 obj <<
+/D [9034 0 R /XYZ 151.701 685.529 null]
 >> endobj
-9051 0 obj <<
-/D [9048 0 R /XYZ 151.701 251.229 null]
+9037 0 obj <<
+/D [9034 0 R /XYZ 151.701 251.229 null]
 >> endobj
-9052 0 obj <<
-/D [9048 0 R /XYZ 151.701 227.517 null]
+9038 0 obj <<
+/D [9034 0 R /XYZ 151.701 227.517 null]
 >> endobj
-9053 0 obj <<
-/D [9048 0 R /XYZ 151.701 205.928 null]
+9039 0 obj <<
+/D [9034 0 R /XYZ 151.701 205.928 null]
 >> endobj
-9054 0 obj <<
-/D [9048 0 R /XYZ 151.701 180.095 null]
+9040 0 obj <<
+/D [9034 0 R /XYZ 151.701 180.095 null]
 >> endobj
-9055 0 obj <<
-/D [9048 0 R /XYZ 151.701 156.384 null]
+9041 0 obj <<
+/D [9034 0 R /XYZ 151.701 156.384 null]
 >> endobj
-9047 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R /F96 8585 0 R /F17 3698 0 R >>
+9033 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R /F96 8572 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9059 0 obj <<
+9045 0 obj <<
 /Length 2361      
 /Filter /FlateDecode
 >>
@@ -43454,42 +46325,42 @@
 W®,Üÿ]Òµ½*JDÂpLT禬kk¸¿ì¨W·?þèëÓí¡í˜NûÿüvnÞ~øÀçFå½g¬×>"#%v¬Ê¢üÄѯ…¶ 4IœŠÄ.øxÇð/Æ8[ÈøÕ·òww7ÿTá>
 endstream
 endobj
-9058 0 obj <<
+9044 0 obj <<
 /Type /Page
-/Contents 9059 0 R
-/Resources 9057 0 R
+/Contents 9045 0 R
+/Resources 9043 0 R
 /MediaBox [0 0 612 792]
-/Parent 9056 0 R
+/Parent 9042 0 R
 >> endobj
-9060 0 obj <<
-/D [9058 0 R /XYZ 100.892 685.529 null]
+9046 0 obj <<
+/D [9044 0 R /XYZ 100.892 685.529 null]
 >> endobj
-9061 0 obj <<
-/D [9058 0 R /XYZ 100.892 660.623 null]
+9047 0 obj <<
+/D [9044 0 R /XYZ 100.892 660.623 null]
 >> endobj
-9062 0 obj <<
-/D [9058 0 R /XYZ 100.892 619.838 null]
+9048 0 obj <<
+/D [9044 0 R /XYZ 100.892 619.838 null]
 >> endobj
-9063 0 obj <<
-/D [9058 0 R /XYZ 100.892 599.988 null]
+9049 0 obj <<
+/D [9044 0 R /XYZ 100.892 599.988 null]
 >> endobj
-9064 0 obj <<
-/D [9058 0 R /XYZ 100.892 578.925 null]
+9050 0 obj <<
+/D [9044 0 R /XYZ 100.892 578.925 null]
 >> endobj
-9065 0 obj <<
-/D [9058 0 R /XYZ 100.892 545.526 null]
+9051 0 obj <<
+/D [9044 0 R /XYZ 100.892 545.526 null]
 >> endobj
 1746 0 obj <<
-/D [9058 0 R /XYZ 100.892 335.436 null]
+/D [9044 0 R /XYZ 100.892 335.436 null]
 >> endobj
-9066 0 obj <<
-/D [9058 0 R /XYZ 100.892 311.464 null]
+9052 0 obj <<
+/D [9044 0 R /XYZ 100.892 311.464 null]
 >> endobj
-9057 0 obj <<
+9043 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R /F85 5513 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9070 0 obj <<
+9056 0 obj <<
 /Length 2157      
 /Filter /FlateDecode
 >>
@@ -43509,35 +46380,35 @@
 ÍøÖ”—®sþC†{l›µŠ|¾gÖ=ÿæ¥|MNg·{žAâPvݬ¾7w«ÿ köj+
 endstream
 endobj
-9069 0 obj <<
+9055 0 obj <<
 /Type /Page
-/Contents 9070 0 R
-/Resources 9068 0 R
+/Contents 9056 0 R
+/Resources 9054 0 R
 /MediaBox [0 0 612 792]
-/Parent 9056 0 R
-/Annots [ 9067 0 R ]
+/Parent 9042 0 R
+/Annots [ 9053 0 R ]
 >> endobj
-9067 0 obj <<
+9053 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.443 439.881 507.11 452.783]
 /Subtype /Link
 /A << /S /GoTo /D (prt-modeset) >>
 >> endobj
-9071 0 obj <<
-/D [9069 0 R /XYZ 151.701 685.529 null]
+9057 0 obj <<
+/D [9055 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1750 0 obj <<
-/D [9069 0 R /XYZ 151.701 569.773 null]
+/D [9055 0 R /XYZ 151.701 569.773 null]
 >> endobj
-9072 0 obj <<
-/D [9069 0 R /XYZ 151.701 528.476 null]
+9058 0 obj <<
+/D [9055 0 R /XYZ 151.701 528.476 null]
 >> endobj
-9068 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R /F96 8585 0 R /F51 3736 0 R >>
+9054 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R /F96 8572 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9075 0 obj <<
+9061 0 obj <<
 /Length 2188      
 /Filter /FlateDecode
 >>
@@ -43559,45 +46430,45 @@
 ×z'ånt¹¤ÖêxŠJ…·2íô¿ôÆIä—aá8ºoÔä/Þ‡AäA)ÚeÒίi÷ûZç’¼â—2"IÓeˆ?R.Êb&©Ÿ^ÿ_›vð¾Wƒ¶êė°ø¬ôêóÉ´ÚØUè…7 at X–N’`”«-	Uê‹hÜq«µ2x¶„/^‡¢ùqóÀðu^óDož"ZxBÞ=9ÌÔ±¯VÆ÷×Ë<§ò,wÛ¿rLøEú">ã5Çüz&Ê ë‡¡þÖ·Òt=<ôŽ®BèJ¡cçŽáöŘn0÷bì9õ£ˆvÿÅ-µwßî7ÿ Ä·è
 endstream
 endobj
-9074 0 obj <<
+9060 0 obj <<
 /Type /Page
-/Contents 9075 0 R
-/Resources 9073 0 R
+/Contents 9061 0 R
+/Resources 9059 0 R
 /MediaBox [0 0 612 792]
-/Parent 9056 0 R
+/Parent 9042 0 R
 >> endobj
-9076 0 obj <<
-/D [9074 0 R /XYZ 100.892 685.529 null]
+9062 0 obj <<
+/D [9060 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1754 0 obj <<
-/D [9074 0 R /XYZ 100.892 614.906 null]
+/D [9060 0 R /XYZ 100.892 614.906 null]
 >> endobj
-9077 0 obj <<
-/D [9074 0 R /XYZ 100.892 587.126 null]
+9063 0 obj <<
+/D [9060 0 R /XYZ 100.892 587.126 null]
 >> endobj
 1758 0 obj <<
-/D [9074 0 R /XYZ 100.892 466.093 null]
+/D [9060 0 R /XYZ 100.892 466.093 null]
 >> endobj
-9078 0 obj <<
-/D [9074 0 R /XYZ 100.892 439.412 null]
+9064 0 obj <<
+/D [9060 0 R /XYZ 100.892 439.412 null]
 >> endobj
-9079 0 obj <<
-/D [9074 0 R /XYZ 100.892 222.703 null]
+9065 0 obj <<
+/D [9060 0 R /XYZ 100.892 222.703 null]
 >> endobj
-9080 0 obj <<
-/D [9074 0 R /XYZ 100.892 199.135 null]
+9066 0 obj <<
+/D [9060 0 R /XYZ 100.892 199.135 null]
 >> endobj
-9081 0 obj <<
-/D [9074 0 R /XYZ 100.892 177.688 null]
+9067 0 obj <<
+/D [9060 0 R /XYZ 100.892 177.688 null]
 >> endobj
-9082 0 obj <<
-/D [9074 0 R /XYZ 100.892 142.692 null]
+9068 0 obj <<
+/D [9060 0 R /XYZ 100.892 142.692 null]
 >> endobj
-9073 0 obj <<
+9059 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9086 0 obj <<
+9072 0 obj <<
 /Length 2258      
 /Filter /FlateDecode
 >>
@@ -43620,54 +46491,54 @@
 RªÑæDþ'ŽÉŠcC}¢¯#‘k”ñCWæŠý#*ÍdïH0þ›±À‘€´ìÚÌÓC…‰ÇœÏ·f´ºÃwG%þyÙ¦[-Ö<ü·P"ðõh3|ÖñJüˆsj6CÕ6 .&N¥‚Cè#Τ®ð"’Í)z¸kl1üBKm¨ûVÐÏß•îÿÛÇ»ƒFˆ
 endstream
 endobj
-9085 0 obj <<
+9071 0 obj <<
 /Type /Page
-/Contents 9086 0 R
-/Resources 9084 0 R
+/Contents 9072 0 R
+/Resources 9070 0 R
 /MediaBox [0 0 612 792]
-/Parent 9056 0 R
+/Parent 9042 0 R
 >> endobj
-9087 0 obj <<
-/D [9085 0 R /XYZ 151.701 685.529 null]
+9073 0 obj <<
+/D [9071 0 R /XYZ 151.701 685.529 null]
 >> endobj
-9088 0 obj <<
-/D [9085 0 R /XYZ 151.701 660.623 null]
+9074 0 obj <<
+/D [9071 0 R /XYZ 151.701 660.623 null]
 >> endobj
-9089 0 obj <<
-/D [9085 0 R /XYZ 151.701 647.543 null]
+9075 0 obj <<
+/D [9071 0 R /XYZ 151.701 647.543 null]
 >> endobj
-9090 0 obj <<
-/D [9085 0 R /XYZ 151.701 626.603 null]
+9076 0 obj <<
+/D [9071 0 R /XYZ 151.701 626.603 null]
 >> endobj
-9091 0 obj <<
-/D [9085 0 R /XYZ 151.701 592.114 null]
+9077 0 obj <<
+/D [9071 0 R /XYZ 151.701 592.114 null]
 >> endobj
-9092 0 obj <<
-/D [9085 0 R /XYZ 151.701 573.296 null]
+9078 0 obj <<
+/D [9071 0 R /XYZ 151.701 573.296 null]
 >> endobj
-9093 0 obj <<
-/D [9085 0 R /XYZ 151.701 550.235 null]
+9079 0 obj <<
+/D [9071 0 R /XYZ 151.701 550.235 null]
 >> endobj
-9094 0 obj <<
-/D [9085 0 R /XYZ 151.701 515.746 null]
+9080 0 obj <<
+/D [9071 0 R /XYZ 151.701 515.746 null]
 >> endobj
-9095 0 obj <<
-/D [9085 0 R /XYZ 151.701 480.651 null]
+9081 0 obj <<
+/D [9071 0 R /XYZ 151.701 480.651 null]
 >> endobj
-9096 0 obj <<
-/D [9085 0 R /XYZ 151.701 446.162 null]
+9082 0 obj <<
+/D [9071 0 R /XYZ 151.701 446.162 null]
 >> endobj
-9097 0 obj <<
-/D [9085 0 R /XYZ 151.701 425.828 null]
+9083 0 obj <<
+/D [9071 0 R /XYZ 151.701 425.828 null]
 >> endobj
-9098 0 obj <<
-/D [9085 0 R /XYZ 151.701 404.889 null]
+9084 0 obj <<
+/D [9071 0 R /XYZ 151.701 404.889 null]
 >> endobj
-9084 0 obj <<
+9070 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9101 0 obj <<
+9087 0 obj <<
 /Length 1905      
 /Filter /FlateDecode
 >>
@@ -43688,51 +46559,50 @@
 (Â]²‡]Ïë'Áh¨Òé‘R”å׋‡8?gÂÌ=¶¬ÇŽ©p;j¶oëšÛ&ÕADQˆ€J“°¶Ÿ‹ã©öoÏ(IþˆuÙö\¥Ìéw¯J*# LэûÅüyª+w°O>8a4Œð3ºLÛöáçcwb—ö¼ä×àßßÞnx½~ëÉàÄ7Îî:ë	×;þ~k›áˆ†„¹â[º?çYº;–LüfGhôõ¿0Šÿ½3þ¤
 endstream
 endobj
-9100 0 obj <<
+9086 0 obj <<
 /Type /Page
-/Contents 9101 0 R
-/Resources 9099 0 R
+/Contents 9087 0 R
+/Resources 9085 0 R
 /MediaBox [0 0 612 792]
-/Parent 9056 0 R
+/Parent 9042 0 R
 >> endobj
-9083 0 obj <<
+9069 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./xslt/figures/tip.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 9104 0 R
+/PTEX.InfoDict 9090 0 R
 /BBox [0 0 28 28]
 /Resources <<
 /ProcSet [ /PDF /ImageC ]
 /ExtGState <<
-/R7 9105 0 R
+/R7 9091 0 R
 >>/XObject <<
-/R8 9106 0 R
+/R8 9092 0 R
 >>>>
-/Length 9107 0 R
+/Length 9093 0 R
 /Filter /FlateDecode
 >>
 stream
 xœ+T0Ð3T0 A(œË¥d®^ÌU¨`dn¬gjb‡±
-õ̍
-LÌ!´¡1D½…‚K>W  *
+õ̍Œ, ´9D½…‚K>W  ¬2
 endstream
 endobj
-9104 0 obj
+9090 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610110838)
-/ModDate (D:20080610110838)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528090357-05'00')
+/ModDate (D:20080528090357-05'00')
 >>
 endobj
-9105 0 obj
+9091 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-9106 0 obj
+9092 0 obj
 <<
 /Subtype /Image
 /ColorSpace /DeviceRGB
@@ -43752,24 +46622,24 @@
 ~;)ÉALþN€÷åˆÊ²ïR÷¥—Ä{Ÿj°ÃÝå¥ö±ª“Ç[Ïjjø1ÔùåE¶Š×þ;Z®H˜ÎjgZ«[–Yã´òÊÄ
 endstream
 endobj
-9107 0 obj
-61
+9093 0 obj
+60
 endobj
-9102 0 obj <<
-/D [9100 0 R /XYZ 100.892 685.529 null]
+9088 0 obj <<
+/D [9086 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1762 0 obj <<
-/D [9100 0 R /XYZ 100.892 380.979 null]
+/D [9086 0 R /XYZ 100.892 380.979 null]
 >> endobj
-9103 0 obj <<
-/D [9100 0 R /XYZ 100.892 356.716 null]
+9089 0 obj <<
+/D [9086 0 R /XYZ 100.892 356.716 null]
 >> endobj
-9099 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F88 5678 0 R /F72 5679 0 R /F53 3738 0 R /F85 5513 0 R /F17 3698 0 R /F52 3737 0 R /F15 3700 0 R /F59 4373 0 R /F96 8585 0 R >>
-/XObject << /Im37 9083 0 R >>
+9085 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F88 5678 0 R /F72 5679 0 R /F53 3738 0 R /F85 5513 0 R /F17 3698 0 R /F52 3737 0 R /F15 3700 0 R /F59 4373 0 R /F96 8572 0 R >>
+/XObject << /Im37 9069 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9110 0 obj <<
+9096 0 obj <<
 /Length 633       
 /Filter /FlateDecode
 >>
@@ -43778,21 +46648,21 @@
 1…n)Yb˜¥8ɳ¶ÿýì8@è ©]ÛHØçø~|÷Ý€À ðÉ8ŸgŒ |f€	†. ïùø˜% ì:–כϮÏ.,xÐï÷ZÕ÷ c{ÒS­4J£ªbq”öL›8ÝiÉ2Á²¥>«¢êæ=¹”¢gb»Ýѯ¨´Ô:VAŒ3㷁¥W‰«‡@Û17Â9‰¼»Ú¾îjMlâÁ>!RNA`|3ÐNŽönŽ.”)¾ãÃ:?üÁ²$¿«z&±Hw2Óû½×Ÿ+TÒ•‰mH_k×Ù)àJi\²?kù*[äZƒÚcèHXµ5ÑÆmýIÄé@‹!“¶‚Æ’DP÷*Я-ä-MG_´Ð`2×¾-"IÅ [çuÚx8ù<Üú	DI#¾…ÿš(.)Khú“–ËÆ1[2U›@>ÆHK·’Ái WüæT%\ÁxsnøCRßdòÝ‘œC(Ÿæž@×r©¦ÀÃúºÌsñN{,‹8NÍ„>ïçCst3mÚÒ¼iÔ¤ÅûŠÆ%mÍXïš­x¡s­:uÄ&`;˜'ZýƒÞÚF9X¤Ñ²„èÞCêÙ;¡Š‡Ax‹mG}¶èÕ©]¢Gf	­â’‚åÙqëÓS¹×°/Ù÷<]qÚu;-X	±ŒJ±­ù"ˆsÎ%ÁƒpÓ·OvhîãçP‘_¼ÆŠŽƒUêTT$­nÕ¼iùä9£|ÒÙ¦äíù¨‹ŽD~bàéXEÞ×)Á*ŽiU-Viú°‰úo<ÑŒtÏs’‡oPÎWYòâ»ùe_ïòÃ_WHú
 endstream
 endobj
-9109 0 obj <<
+9095 0 obj <<
 /Type /Page
-/Contents 9110 0 R
-/Resources 9108 0 R
+/Contents 9096 0 R
+/Resources 9094 0 R
 /MediaBox [0 0 612 792]
-/Parent 9112 0 R
+/Parent 9098 0 R
 >> endobj
-9111 0 obj <<
-/D [9109 0 R /XYZ 151.701 685.529 null]
+9097 0 obj <<
+/D [9095 0 R /XYZ 151.701 685.529 null]
 >> endobj
-9108 0 obj <<
+9094 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9115 0 obj <<
+9101 0 obj <<
 /Length 1328      
 /Filter /FlateDecode
 >>
@@ -43809,27 +46679,27 @@
 G„›Ö#œkÿ DÍGÃ-øi^5á6íÝPÇIȱ?¥ÙÚ®9ôµ`†aG+èËÆj¼cq·qcnåi‚ÀÉèé.tO(—”$f*>~„[_N9	‘ñè<î).†/üô7¡î€å
 endstream
 endobj
-9114 0 obj <<
+9100 0 obj <<
 /Type /Page
-/Contents 9115 0 R
-/Resources 9113 0 R
+/Contents 9101 0 R
+/Resources 9099 0 R
 /MediaBox [0 0 612 792]
-/Parent 9112 0 R
+/Parent 9098 0 R
 >> endobj
-9116 0 obj <<
-/D [9114 0 R /XYZ 100.892 685.529 null]
+9102 0 obj <<
+/D [9100 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1766 0 obj <<
-/D [9114 0 R /XYZ 100.892 286.142 null]
+/D [9100 0 R /XYZ 100.892 286.142 null]
 >> endobj
-9117 0 obj <<
-/D [9114 0 R /XYZ 100.892 256.894 null]
+9103 0 obj <<
+/D [9100 0 R /XYZ 100.892 256.894 null]
 >> endobj
-9113 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R /F51 3736 0 R /F95 8343 0 R /F59 4373 0 R >>
+9099 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R /F51 3736 0 R /F95 8330 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9120 0 obj <<
+9106 0 obj <<
 /Length 2180      
 /Filter /FlateDecode
 >>
@@ -43858,22 +46728,22 @@
 ó¶˜cwþ ¾×·«ÿ MÄ؉
 endstream
 endobj
-9119 0 obj <<
+9105 0 obj <<
 /Type /Page
-/Contents 9120 0 R
-/Resources 9118 0 R
+/Contents 9106 0 R
+/Resources 9104 0 R
 /MediaBox [0 0 612 792]
-/Parent 9112 0 R
+/Parent 9098 0 R
 >> endobj
-9121 0 obj <<
-/D [9119 0 R /XYZ 151.701 685.529 null]
+9107 0 obj <<
+/D [9105 0 R /XYZ 151.701 685.529 null]
 >> endobj
-9118 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F88 5678 0 R /F72 5679 0 R /F53 3738 0 R /F85 5513 0 R /F17 3698 0 R /F51 3736 0 R /F15 3700 0 R /F59 4373 0 R /F96 8585 0 R >>
-/XObject << /Im37 9083 0 R >>
+9104 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F88 5678 0 R /F72 5679 0 R /F53 3738 0 R /F85 5513 0 R /F17 3698 0 R /F51 3736 0 R /F15 3700 0 R /F59 4373 0 R /F96 8572 0 R >>
+/XObject << /Im37 9069 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9124 0 obj <<
+9110 0 obj <<
 /Length 2040      
 /Filter /FlateDecode
 >>
@@ -43897,27 +46767,27 @@
 k–<	óóTC_¾ýÆ}Nw¿þæ_v
 endstream
 endobj
-9123 0 obj <<
+9109 0 obj <<
 /Type /Page
-/Contents 9124 0 R
-/Resources 9122 0 R
+/Contents 9110 0 R
+/Resources 9108 0 R
 /MediaBox [0 0 612 792]
-/Parent 9112 0 R
+/Parent 9098 0 R
 >> endobj
-9125 0 obj <<
-/D [9123 0 R /XYZ 100.892 685.529 null]
+9111 0 obj <<
+/D [9109 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1770 0 obj <<
-/D [9123 0 R /XYZ 100.892 660.623 null]
+/D [9109 0 R /XYZ 100.892 660.623 null]
 >> endobj
-9126 0 obj <<
-/D [9123 0 R /XYZ 100.892 641.703 null]
+9112 0 obj <<
+/D [9109 0 R /XYZ 100.892 641.703 null]
 >> endobj
-9122 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F51 3736 0 R /F95 8343 0 R /F53 3738 0 R >>
+9108 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F51 3736 0 R /F95 8330 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9129 0 obj <<
+9115 0 obj <<
 /Length 2001      
 /Filter /FlateDecode
 >>
@@ -43949,27 +46819,27 @@
 Õíoá«MøÎÔÝoæÏvu7sw	—/U毕¡Ç¢«÷›—ã𻈫d÷šZÉ?X†­-û»¯¤Ä¿§|WÿKà™ÁJ=8)ó+§ïûÍÉ¿±œ£
 endstream
 endobj
-9128 0 obj <<
+9114 0 obj <<
 /Type /Page
-/Contents 9129 0 R
-/Resources 9127 0 R
+/Contents 9115 0 R
+/Resources 9113 0 R
 /MediaBox [0 0 612 792]
-/Parent 9112 0 R
+/Parent 9098 0 R
 >> endobj
-9130 0 obj <<
-/D [9128 0 R /XYZ 151.701 685.529 null]
+9116 0 obj <<
+/D [9114 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1774 0 obj <<
-/D [9128 0 R /XYZ 151.701 660.623 null]
+/D [9114 0 R /XYZ 151.701 660.623 null]
 >> endobj
-9131 0 obj <<
-/D [9128 0 R /XYZ 151.701 641.703 null]
+9117 0 obj <<
+/D [9114 0 R /XYZ 151.701 641.703 null]
 >> endobj
-9127 0 obj <<
+9113 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9134 0 obj <<
+9120 0 obj <<
 /Length 650       
 /Filter /FlateDecode
 >>
@@ -43978,21 +46848,21 @@
 ±äÙ[ÿ~´H¿°¼|³ý½Úì¯ç7WMØüÂÙõ<zÑ/é))ñ¦®ÓêÁÜvÖå«LÃJ\ªI¥ÙPÌø°ù~‡~‡_¯Ö×ÿÓ]‚0˜´â,Ù&ÎXû´UŇ“~¼ùì¾=º»ú¤ù¼•—â
 endstream
 endobj
-9133 0 obj <<
+9119 0 obj <<
 /Type /Page
-/Contents 9134 0 R
-/Resources 9132 0 R
+/Contents 9120 0 R
+/Resources 9118 0 R
 /MediaBox [0 0 612 792]
-/Parent 9112 0 R
+/Parent 9098 0 R
 >> endobj
-9135 0 obj <<
-/D [9133 0 R /XYZ 100.892 685.529 null]
+9121 0 obj <<
+/D [9119 0 R /XYZ 100.892 685.529 null]
 >> endobj
-9132 0 obj <<
+9118 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9138 0 obj <<
+9124 0 obj <<
 /Length 940       
 /Filter /FlateDecode
 >>
@@ -44009,21 +46879,21 @@
 (zYKº[YõY*0óîs8µÎœ,µîæàT>«'úMý­jªS%ïäŸb|+È®©ÿ§¬÷m³†tz´¡ ’Çá ²|,ã?¸hœ^Û‹²ïS¡4M'G¯«>ç¥öÝ·s–K“¢}¹8Fɲµvöð†àùò²¨d-;­2ݨïÍï%xŽKlI˜ƒÿ"/ÀøF¿'ñ’¹JWó鐁ˆ<OàèùÄQ2ª÷øÑ2<Í·ÐßÒMv‰
 endstream
 endobj
-9137 0 obj <<
+9123 0 obj <<
 /Type /Page
-/Contents 9138 0 R
-/Resources 9136 0 R
+/Contents 9124 0 R
+/Resources 9122 0 R
 /MediaBox [0 0 612 792]
-/Parent 9140 0 R
+/Parent 9126 0 R
 >> endobj
-9139 0 obj <<
-/D [9137 0 R /XYZ 151.701 685.529 null]
+9125 0 obj <<
+/D [9123 0 R /XYZ 151.701 685.529 null]
 >> endobj
-9136 0 obj <<
+9122 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9145 0 obj <<
+9131 0 obj <<
 /Length 1729      
 /Filter /FlateDecode
 >>
@@ -44042,27 +46912,27 @@
 ’ï0Ø‘Fõ«5<g˹øÞÚÚ6k_•Ðm]î äZ_4ÌFþe›ó9ÃY”SüáLw“Ÿêg²Òd#<øCép*k ‡&L¤÷í.ˆ$í	YLÆƯ¶iÇ»9Œu†‡Q}Æê}OƒVaXÄÍ8Øã> Rx`.ßׁ²7_šG$ÈqˆƝRlçüæà›Ìr3¨?âîX= °x:ƒ`ЄÑ›=ùTvÅøË ”Eq2^˜D1æ·kö»û؈c¢@‹¦ãn‡6ÏÔG‘'"Õ“ÁCA=¶ÕqŠƒ×ׄÎRNTðgéÉO Œ!ôTIAwõõæ+K¤*ÑÂœ7øvÓٝOCïUÜmĬ‡æFð‚ì—:NHcí³ˆÓa…Ò»™ÜÑÇŽŽÿëÿI1®¯V‹²bm®
 endstream
 endobj
-9144 0 obj <<
+9130 0 obj <<
 /Type /Page
-/Contents 9145 0 R
-/Resources 9143 0 R
+/Contents 9131 0 R
+/Resources 9129 0 R
 /MediaBox [0 0 612 792]
-/Parent 9140 0 R
+/Parent 9126 0 R
 >> endobj
-9146 0 obj <<
-/D [9144 0 R /XYZ 100.892 685.529 null]
+9132 0 obj <<
+/D [9130 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1778 0 obj <<
-/D [9144 0 R /XYZ 100.892 414.745 null]
+/D [9130 0 R /XYZ 100.892 414.745 null]
 >> endobj
-9147 0 obj <<
-/D [9144 0 R /XYZ 100.892 381.177 null]
+9133 0 obj <<
+/D [9130 0 R /XYZ 100.892 381.177 null]
 >> endobj
-9143 0 obj <<
+9129 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9152 0 obj <<
+9138 0 obj <<
 /Length 1973      
 /Filter /FlateDecode
 >>
@@ -44088,73 +46958,73 @@
 øîþ~|nq²@P ”פ/ž87÷Æê_.2(Iâ/ýç"” -žþr¡¿ZdèŐéiÂá¨!3OÈ$€ª7kqó_lƒ\ÏB§ñ7ϧ·ÛÓ@$éä÷Ó0œŸÝßWä#h¹¡—D´f¸_šÝ+â0H¤šD}˪ÍlØŠá ngxõ¿5á²w9ÂKÿ·ë$‘
 endstream
 endobj
-9151 0 obj <<
+9137 0 obj <<
 /Type /Page
-/Contents 9152 0 R
-/Resources 9150 0 R
+/Contents 9138 0 R
+/Resources 9136 0 R
 /MediaBox [0 0 612 792]
-/Parent 9140 0 R
-/Annots [ 9141 0 R 9155 0 R 9142 0 R 9148 0 R 9149 0 R ]
+/Parent 9126 0 R
+/Annots [ 9127 0 R 9141 0 R 9128 0 R 9134 0 R 9135 0 R ]
 >> endobj
-9141 0 obj <<
+9127 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.738 563.525 511.352 575.215]
 /Subtype /Link
 /A << /S /GoTo /D (CUPS-printing) >>
 >> endobj
-9155 0 obj <<
+9141 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 549.976 239.576 561.665]
 /Subtype /Link
 /A << /S /GoTo /D (CUPS-printing) >>
 >> endobj
-9142 0 obj <<
+9128 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.25 549.976 323.213 561.665]
 /Subtype /Link
 /A << /S /GoTo /D (cups-avoidps1) >>
 >> endobj
-9148 0 obj <<
+9134 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 127.92 327.086 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://imprints.sourceforge.net/)>>
 >> endobj
-9149 0 obj <<
+9135 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 327.086 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://imprints.sourceforge.net/)>>
 >> endobj
-9153 0 obj <<
-/D [9151 0 R /XYZ 151.701 685.529 null]
+9139 0 obj <<
+/D [9137 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1782 0 obj <<
-/D [9151 0 R /XYZ 151.701 660.623 null]
+/D [9137 0 R /XYZ 151.701 660.623 null]
 >> endobj
-9154 0 obj <<
-/D [9151 0 R /XYZ 151.701 641.703 null]
+9140 0 obj <<
+/D [9137 0 R /XYZ 151.701 641.703 null]
 >> endobj
 1786 0 obj <<
-/D [9151 0 R /XYZ 151.701 527.781 null]
+/D [9137 0 R /XYZ 151.701 527.781 null]
 >> endobj
-9156 0 obj <<
-/D [9151 0 R /XYZ 151.701 495.741 null]
+9142 0 obj <<
+/D [9137 0 R /XYZ 151.701 495.741 null]
 >> endobj
 1790 0 obj <<
-/D [9151 0 R /XYZ 151.701 281.053 null]
+/D [9137 0 R /XYZ 151.701 281.053 null]
 >> endobj
-9157 0 obj <<
-/D [9151 0 R /XYZ 151.701 252.025 null]
+9143 0 obj <<
+/D [9137 0 R /XYZ 151.701 252.025 null]
 >> endobj
-9150 0 obj <<
+9136 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F29 5413 0 R /F51 3736 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9161 0 obj <<
+9147 0 obj <<
 /Length 1802      
 /Filter /FlateDecode
 >>
@@ -44171,39 +47041,39 @@
 ú´¤´L\BDÒ4•y^Wv–cpգ礿Õþ$‚Ìxlq<i‘œ‘y¦=üzw8i©“0ŽœFˆ÷1¨„†égî–\õoHq¨È}2†ùPFÆÊ#V䙇c;»>²Ôƒ‘.Ïz€8óíÙìó…îOC§lH_$Õÿ¦í´¦Æ¤¾*ÕÿOŒ»Y–Ðòkº_ž<Ëœüë  EhïøVB¤=tì†üÿ½÷ ßyœ=겇ïóõâ¿P 
 endstream
 endobj
-9160 0 obj <<
+9146 0 obj <<
 /Type /Page
-/Contents 9161 0 R
-/Resources 9159 0 R
+/Contents 9147 0 R
+/Resources 9145 0 R
 /MediaBox [0 0 612 792]
-/Parent 9140 0 R
+/Parent 9126 0 R
 >> endobj
-9162 0 obj <<
-/D [9160 0 R /XYZ 100.892 685.529 null]
+9148 0 obj <<
+/D [9146 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1794 0 obj <<
-/D [9160 0 R /XYZ 100.892 606.835 null]
+/D [9146 0 R /XYZ 100.892 606.835 null]
 >> endobj
-9163 0 obj <<
-/D [9160 0 R /XYZ 100.892 580.377 null]
+9149 0 obj <<
+/D [9146 0 R /XYZ 100.892 580.377 null]
 >> endobj
 1798 0 obj <<
-/D [9160 0 R /XYZ 100.892 494.278 null]
+/D [9146 0 R /XYZ 100.892 494.278 null]
 >> endobj
-9164 0 obj <<
-/D [9160 0 R /XYZ 100.892 465.699 null]
+9150 0 obj <<
+/D [9146 0 R /XYZ 100.892 465.699 null]
 >> endobj
 1802 0 obj <<
-/D [9160 0 R /XYZ 100.892 363.929 null]
+/D [9146 0 R /XYZ 100.892 363.929 null]
 >> endobj
-9165 0 obj <<
-/D [9160 0 R /XYZ 100.892 339.796 null]
+9151 0 obj <<
+/D [9146 0 R /XYZ 100.892 339.796 null]
 >> endobj
-9159 0 obj <<
+9145 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F51 3736 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9169 0 obj <<
+9155 0 obj <<
 /Length 2162      
 /Filter /FlateDecode
 >>
@@ -44227,43 +47097,43 @@
 Lñüè©“³f¢%e¥JŒ§ýwÆ{Ú‚%ÿq¶{å
 endstream
 endobj
-9168 0 obj <<
+9154 0 obj <<
 /Type /Page
-/Contents 9169 0 R
-/Resources 9167 0 R
+/Contents 9155 0 R
+/Resources 9153 0 R
 /MediaBox [0 0 612 792]
-/Parent 9140 0 R
-/Annots [ 9166 0 R ]
+/Parent 9126 0 R
+/Annots [ 9152 0 R ]
 >> endobj
-9166 0 obj <<
+9152 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 468.803 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://support.microsoft.com/default.aspx?scid=kb;en-us;189105)>>
 >> endobj
-9170 0 obj <<
-/D [9168 0 R /XYZ 151.701 685.529 null]
+9156 0 obj <<
+/D [9154 0 R /XYZ 151.701 685.529 null]
 >> endobj
-9171 0 obj <<
-/D [9168 0 R /XYZ 151.701 660.623 null]
+9157 0 obj <<
+/D [9154 0 R /XYZ 151.701 660.623 null]
 >> endobj
-9172 0 obj <<
-/D [9168 0 R /XYZ 151.701 636.115 null]
+9158 0 obj <<
+/D [9154 0 R /XYZ 151.701 636.115 null]
 >> endobj
-9173 0 obj <<
-/D [9168 0 R /XYZ 151.701 613.005 null]
+9159 0 obj <<
+/D [9154 0 R /XYZ 151.701 613.005 null]
 >> endobj
 1806 0 obj <<
-/D [9168 0 R /XYZ 151.701 260.508 null]
+/D [9154 0 R /XYZ 151.701 260.508 null]
 >> endobj
-9174 0 obj <<
-/D [9168 0 R /XYZ 151.701 228.547 null]
+9160 0 obj <<
+/D [9154 0 R /XYZ 151.701 228.547 null]
 >> endobj
-9167 0 obj <<
+9153 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F51 3736 0 R /F53 3738 0 R /F17 3698 0 R /F59 4373 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9177 0 obj <<
+9163 0 obj <<
 /Length 1719      
 /Filter /FlateDecode
 >>
@@ -44287,21 +47157,21 @@
 ACù"GâóâdZµ§8ÐNÄ’4†ºñF»ÿ-Dì*†€´òpÅ\\5³ÛDÉö=×è~Êu9›f¡ÍY{|^W-W;\ã‰nÍ(fúõùjö?¡üÊä
 endstream
 endobj
-9176 0 obj <<
+9162 0 obj <<
 /Type /Page
-/Contents 9177 0 R
-/Resources 9175 0 R
+/Contents 9163 0 R
+/Resources 9161 0 R
 /MediaBox [0 0 612 792]
-/Parent 9140 0 R
+/Parent 9126 0 R
 >> endobj
-9178 0 obj <<
-/D [9176 0 R /XYZ 100.892 685.529 null]
+9164 0 obj <<
+/D [9162 0 R /XYZ 100.892 685.529 null]
 >> endobj
-9175 0 obj <<
+9161 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F51 3736 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9181 0 obj <<
+9167 0 obj <<
 /Length 2322      
 /Filter /FlateDecode
 >>
@@ -44331,27 +47201,27 @@
 ò^úïa«¾ìÿzÚý·_><
 endstream
 endobj
-9180 0 obj <<
+9166 0 obj <<
 /Type /Page
-/Contents 9181 0 R
-/Resources 9179 0 R
+/Contents 9167 0 R
+/Resources 9165 0 R
 /MediaBox [0 0 612 792]
-/Parent 9184 0 R
+/Parent 9170 0 R
 >> endobj
-9182 0 obj <<
-/D [9180 0 R /XYZ 151.701 685.529 null]
+9168 0 obj <<
+/D [9166 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1810 0 obj <<
-/D [9180 0 R /XYZ 151.701 209.849 null]
+/D [9166 0 R /XYZ 151.701 209.849 null]
 >> endobj
-9183 0 obj <<
-/D [9180 0 R /XYZ 151.701 180.489 null]
+9169 0 obj <<
+/D [9166 0 R /XYZ 151.701 180.489 null]
 >> endobj
-9179 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F51 3736 0 R /F59 4373 0 R /F53 3738 0 R /F96 8585 0 R /F17 3698 0 R >>
+9165 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F51 3736 0 R /F59 4373 0 R /F53 3738 0 R /F96 8572 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9189 0 obj <<
+9175 0 obj <<
 /Length 2498      
 /Filter /FlateDecode
 >>
@@ -44376,27 +47246,27 @@
 IÌ¡–©ƒ‚“‰uCùTôõIZ¸bç¯	^#
 endstream
 endobj
-9188 0 obj <<
+9174 0 obj <<
 /Type /Page
-/Contents 9189 0 R
-/Resources 9187 0 R
+/Contents 9175 0 R
+/Resources 9173 0 R
 /MediaBox [0 0 612 792]
-/Parent 9184 0 R
+/Parent 9170 0 R
 >> endobj
-9190 0 obj <<
-/D [9188 0 R /XYZ 100.892 685.529 null]
+9176 0 obj <<
+/D [9174 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1814 0 obj <<
-/D [9188 0 R /XYZ 100.892 561.095 null]
+/D [9174 0 R /XYZ 100.892 561.095 null]
 >> endobj
-9191 0 obj <<
-/D [9188 0 R /XYZ 100.892 530.96 null]
+9177 0 obj <<
+/D [9174 0 R /XYZ 100.892 530.96 null]
 >> endobj
-9187 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F51 3736 0 R /F85 5513 0 R /F53 3738 0 R /F59 4373 0 R /F96 8585 0 R >>
+9173 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F51 3736 0 R /F85 5513 0 R /F53 3738 0 R /F59 4373 0 R /F96 8572 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9196 0 obj <<
+9182 0 obj <<
 /Length 1982      
 /Filter /FlateDecode
 >>
@@ -44423,79 +47293,79 @@
 åÿMí“é™Öëó'÷oÈmÙÀ
 endstream
 endobj
-9195 0 obj <<
+9181 0 obj <<
 /Type /Page
-/Contents 9196 0 R
-/Resources 9194 0 R
+/Contents 9182 0 R
+/Resources 9180 0 R
 /MediaBox [0 0 612 792]
-/Parent 9184 0 R
-/Annots [ 9186 0 R 9192 0 R 9199 0 R 9185 0 R 9193 0 R ]
+/Parent 9170 0 R
+/Annots [ 9172 0 R 9178 0 R 9185 0 R 9171 0 R 9179 0 R ]
 >> endobj
-9186 0 obj <<
+9172 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.463 619.448 408.001 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (CUPS-printing) >>
 >> endobj
-9192 0 obj <<
+9178 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [329.742 539.49 511.352 551.179]
 /Subtype /Link
 /A << /S /GoTo /D (NetCommand) >>
 >> endobj
-9199 0 obj <<
+9185 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 525.94 302.019 537.63]
 /Subtype /Link
 /A << /S /GoTo /D (NetCommand) >>
 >> endobj
-9185 0 obj <<
+9171 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 127.92 327.086 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://imprints.sourceforge.net/)>>
 >> endobj
-9193 0 obj <<
+9179 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 270.598 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(mail://jht@samba.org)>>
 >> endobj
-9197 0 obj <<
-/D [9195 0 R /XYZ 151.701 685.529 null]
+9183 0 obj <<
+/D [9181 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1818 0 obj <<
-/D [9195 0 R /XYZ 151.701 603.535 null]
+/D [9181 0 R /XYZ 151.701 603.535 null]
 >> endobj
-9198 0 obj <<
-/D [9195 0 R /XYZ 151.701 563.13 null]
+9184 0 obj <<
+/D [9181 0 R /XYZ 151.701 563.13 null]
 >> endobj
 1822 0 obj <<
-/D [9195 0 R /XYZ 151.701 496.479 null]
+/D [9181 0 R /XYZ 151.701 496.479 null]
 >> endobj
-9200 0 obj <<
-/D [9195 0 R /XYZ 151.701 469.622 null]
+9186 0 obj <<
+/D [9181 0 R /XYZ 151.701 469.622 null]
 >> endobj
 1826 0 obj <<
-/D [9195 0 R /XYZ 151.701 469.622 null]
+/D [9181 0 R /XYZ 151.701 469.622 null]
 >> endobj
-9201 0 obj <<
-/D [9195 0 R /XYZ 151.701 441.139 null]
+9187 0 obj <<
+/D [9181 0 R /XYZ 151.701 441.139 null]
 >> endobj
 1830 0 obj <<
-/D [9195 0 R /XYZ 151.701 267.089 null]
+/D [9181 0 R /XYZ 151.701 267.089 null]
 >> endobj
-9202 0 obj <<
-/D [9195 0 R /XYZ 151.701 227.38 null]
+9188 0 obj <<
+/D [9181 0 R /XYZ 151.701 227.38 null]
 >> endobj
-9194 0 obj <<
+9180 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F29 5413 0 R /F17 3698 0 R /F53 3738 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9205 0 obj <<
+9191 0 obj <<
 /Length 752       
 /Filter /FlateDecode
 >>
@@ -44509,21 +47379,21 @@
 7¤|? '$×…NÃœ+ ¡^Êþþúñïâ'%ž^N±°³Ã#WK(@Qù</>ò`«;½5­™{GL÷}É?8ÀÌ]2ûÍz[ÂßB:;žÕä\¨à/g)X¯ñr¤xKÎ욀ÇÉL†0ª‚`=R¤ûÖ‰X at qK<üzI@¡e¨àç"g«Årˆõ“<Õ¬y鍣‘EIäÉøZÆ=Åð’^ÈŠ½¡:ó\ ðnLEð-ÏøšŠ{ýð(€AÉÎEêúõm8Ñ6]xØ™z.ð&ÔŒ’–U;¿õ‡GxþÃÛþwö®
 endstream
 endobj
-9204 0 obj <<
+9190 0 obj <<
 /Type /Page
-/Contents 9205 0 R
-/Resources 9203 0 R
+/Contents 9191 0 R
+/Resources 9189 0 R
 /MediaBox [0 0 612 792]
-/Parent 9184 0 R
+/Parent 9170 0 R
 >> endobj
-9206 0 obj <<
-/D [9204 0 R /XYZ 100.892 685.529 null]
+9192 0 obj <<
+/D [9190 0 R /XYZ 100.892 685.529 null]
 >> endobj
-9203 0 obj <<
+9189 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9209 0 obj <<
+9195 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -44531,20 +47401,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-9208 0 obj <<
+9194 0 obj <<
 /Type /Page
-/Contents 9209 0 R
-/Resources 9207 0 R
+/Contents 9195 0 R
+/Resources 9193 0 R
 /MediaBox [0 0 612 792]
-/Parent 9184 0 R
+/Parent 9170 0 R
 >> endobj
-9210 0 obj <<
-/D [9208 0 R /XYZ 151.701 685.529 null]
+9196 0 obj <<
+/D [9194 0 R /XYZ 151.701 685.529 null]
 >> endobj
-9207 0 obj <<
+9193 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-9216 0 obj <<
+9202 0 obj <<
 /Length 1675      
 /Filter /FlateDecode
 >>
@@ -44567,59 +47437,59 @@
 ­C{"ð’(šžßq((˜ÊŸNÉÉ@ÀE2hàÌÆö¦ÙŸÍì‹?tB‰8ãÿúC''éù¯˜â¬ëüZ⯸AÉþªtÌurö‘Š(‹4Mè'Bh?9NûíLCøW=%Ïb‘æ€ð”ë¾ßþz}½ÛíâÅ°íbëV×ß=>“U€0¯µýûéñ‰æ§µ-%ô•FS´xü#Lý½ÿ)”îë
 endstream
 endobj
-9215 0 obj <<
+9201 0 obj <<
 /Type /Page
-/Contents 9216 0 R
-/Resources 9214 0 R
+/Contents 9202 0 R
+/Resources 9200 0 R
 /MediaBox [0 0 612 792]
-/Parent 9184 0 R
-/Annots [ 9212 0 R 9211 0 R ]
+/Parent 9170 0 R
+/Annots [ 9198 0 R 9197 0 R ]
 >> endobj
-9212 0 obj <<
+9198 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [231.428 357.861 427.075 369.551]
 /Subtype /Link
 /A << /S /GoTo /D (classicalprinting) >>
 >> endobj
-9211 0 obj <<
+9197 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 219.789 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.cups.org/)>>
 >> endobj
-9217 0 obj <<
-/D [9215 0 R /XYZ 100.892 685.529 null]
+9203 0 obj <<
+/D [9201 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1834 0 obj <<
-/D [9215 0 R /XYZ 100.892 660.623 null]
+/D [9201 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3848 0 obj <<
-/D [9215 0 R /XYZ 100.892 505.81 null]
+/D [9201 0 R /XYZ 100.892 505.81 null]
 >> endobj
 1838 0 obj <<
-/D [9215 0 R /XYZ 100.892 505.81 null]
+/D [9201 0 R /XYZ 100.892 505.81 null]
 >> endobj
-9218 0 obj <<
-/D [9215 0 R /XYZ 100.892 476.358 null]
+9204 0 obj <<
+/D [9201 0 R /XYZ 100.892 476.358 null]
 >> endobj
 1842 0 obj <<
-/D [9215 0 R /XYZ 100.892 476.358 null]
+/D [9201 0 R /XYZ 100.892 476.358 null]
 >> endobj
-9219 0 obj <<
-/D [9215 0 R /XYZ 100.892 449.723 null]
+9205 0 obj <<
+/D [9201 0 R /XYZ 100.892 449.723 null]
 >> endobj
 1846 0 obj <<
-/D [9215 0 R /XYZ 100.892 228.508 null]
+/D [9201 0 R /XYZ 100.892 228.508 null]
 >> endobj
-9220 0 obj <<
-/D [9215 0 R /XYZ 100.892 203.995 null]
+9206 0 obj <<
+/D [9201 0 R /XYZ 100.892 203.995 null]
 >> endobj
-9214 0 obj <<
+9200 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9224 0 obj <<
+9210 0 obj <<
 /Length 2520      
 /Filter /FlateDecode
 >>
@@ -44647,46 +47517,46 @@
 õ¨	¸˜×ÐWÛ¾ª\2ÆõsY¦Ã¯ßÐc"¿a ¡®¨ÉËÌÕã=÷ üΧ¦šxãÝi!¿Ÿžxñýìf·,û§P®Eœñú 0NßÑq«‘D]®wßÁ%hž€É¿ð.&YßÁéý[GA‰(MèÚ#¤Î©ÁæR_½@&ró¶Ûb‰Yä£â/WÞ¾J·ÛS!“õÏÓÔ¿¸½]@ñ®t¢nŸ1¸:Oâ›@ºúÓßX¤+ُÛ„Ê!9ÂiñUý‹^wÐpœü_$ZÞ–Õ\«ˆóÔÔ_Ô$/Ë®5Y÷>ÿ‡‹þÁ¡ŒV
 endstream
 endobj
-9223 0 obj <<
+9209 0 obj <<
 /Type /Page
-/Contents 9224 0 R
-/Resources 9222 0 R
+/Contents 9210 0 R
+/Resources 9208 0 R
 /MediaBox [0 0 612 792]
-/Parent 9228 0 R
-/Annots [ 9213 0 R 9221 0 R ]
+/Parent 9214 0 R
+/Annots [ 9199 0 R 9207 0 R ]
 >> endobj
-9213 0 obj <<
+9199 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 127.92 289.428 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://printing.kde.org/)>>
 >> endobj
-9221 0 obj <<
+9207 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 360.037 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://localhost:631/documentation.html)>>
 >> endobj
-9225 0 obj <<
-/D [9223 0 R /XYZ 151.701 685.529 null]
+9211 0 obj <<
+/D [9209 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1850 0 obj <<
-/D [9223 0 R /XYZ 151.701 500.502 null]
+/D [9209 0 R /XYZ 151.701 500.502 null]
 >> endobj
-9226 0 obj <<
-/D [9223 0 R /XYZ 151.701 470.765 null]
+9212 0 obj <<
+/D [9209 0 R /XYZ 151.701 470.765 null]
 >> endobj
 1854 0 obj <<
-/D [9223 0 R /XYZ 151.701 289.118 null]
+/D [9209 0 R /XYZ 151.701 289.118 null]
 >> endobj
-9227 0 obj <<
-/D [9223 0 R /XYZ 151.701 260.273 null]
+9213 0 obj <<
+/D [9209 0 R /XYZ 151.701 260.273 null]
 >> endobj
-9222 0 obj <<
+9208 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F29 5413 0 R /F59 4373 0 R /F17 3698 0 R /F53 3738 0 R /F85 5513 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9232 0 obj <<
+9218 0 obj <<
 /Length 2028      
 /Filter /FlateDecode
 >>
@@ -44714,282 +47584,270 @@
 ÏëúáÄCÿ«ÇÊsqÑ8ðœƒjj§ø'ð€OÛ:¿!›ÂóõÆÿÞdòaäQ>ẜ^ÒVƒµI#Š¿Ô[q0u1œÔcñvŸãÅhÅŸnYd‚æh	ã-A;¿G1o^ƒÀà¥W=¹Õ/$uZécЪOð¦F ϼÞ}êýðõ?á  ¿'`ðšnÓõ»}[žAYúÕ†|ŠÝpS•=ù§·mSñèmYSLà¶ý±ô?tbM­	Ô  ùHЦ%m’2@íßNÑûéåQ¸e´íxížäbTªýO/0ø³öÇцÃ|ÂHSƒj¿™;çöãÊÝ_6aŽ
 endstream
 endobj
-9231 0 obj <<
+9217 0 obj <<
 /Type /Page
-/Contents 9232 0 R
-/Resources 9230 0 R
+/Contents 9218 0 R
+/Resources 9216 0 R
 /MediaBox [0 0 612 792]
-/Parent 9228 0 R
-/Annots [ 9229 0 R ]
+/Parent 9214 0 R
+/Annots [ 9215 0 R ]
 >> endobj
-9229 0 obj <<
+9215 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [172.66 179.099 247.299 190.788]
 /Subtype /Link
 /A << /S /GoTo /D (cups-exam-simple) >>
 >> endobj
-9233 0 obj <<
-/D [9231 0 R /XYZ 100.892 685.529 null]
+9219 0 obj <<
+/D [9217 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1858 0 obj <<
-/D [9231 0 R /XYZ 100.892 224.25 null]
+/D [9217 0 R /XYZ 100.892 224.25 null]
 >> endobj
-9234 0 obj <<
-/D [9231 0 R /XYZ 100.892 200.216 null]
+9220 0 obj <<
+/D [9217 0 R /XYZ 100.892 200.216 null]
 >> endobj
-9230 0 obj <<
+9216 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F52 3737 0 R /F59 4373 0 R /F85 5513 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R /F17 3698 0 R >>
-/XObject << /Im37 9083 0 R >>
+/XObject << /Im37 9069 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9239 0 obj <<
-/Length 3030      
+9225 0 obj <<
+/Length 3007      
 /Filter /FlateDecode
 >>
 stream
-xÚ­[[oÛ8~ϯ0ú2
-а/’ø0Àìv§ƒ°ƒî$Åî¢íƒl+±&²ä•ä¦ù÷{.”,«JXzï?Ò´¿¸[ø‹ß.þ~sñæñ/¬oƒÅÍí"0ˆü`ÆV«7ëÅ'OëøòËÍïoÞI¹ˆ…
-CU¥_€D•Þ~üp}y¥Œö>TYÑdŧ®÷»Ä|¯¼„OÕ\^:ˆ¼·›dפבñ/~½¹øß‚H=IŒPj±Ú^|úâ/ÖPöûÂÊÆ‹ª¹](‹Ðˆç‹ë‹]ønx#X¡/¤ÔC°ÈFO‚ýHGÐLÄÃÿõ[²Ýå)Œ'V0Ãô¤Xoé·#aZ­]gت­(¥Hs—2öP{W¦yÒ¤k,Ñ^½Åü¥X•Åít¥°ZŸ£,Oaƒ#ÕéHDAоСAh,Pa(BiJØØ,ªtqû¬NL-Å´=)&M‡^X`! àdtòi!›´úÙ÷£iI‹éè»NM ãÖê»N5uz<üc@Zle,Lð# v ,ñ$§Ï†zr¦cÒDG-ÀKçùÉiõeXŽ2áR™ X§åº?Š˜:îñ×(¡|Ÿ’·!SéLéÝ¡­”^N&ì'K’®k~y6ñ‚P£çaÞ˱NQï€8™{¨iä›.WG™&à|¬ïù'}ƒk
-°3eȸ@ãMTƒìDqh=ØÌc¼
-ƒÐË8Upªá =ªR_^…aèýô½GÈôcªâ[({.o}
-þˆ‡·/Ç:ÅÛâdÞ ¦ñvº\×f˜€ó±ÆykMX0±³›ÈM­‰xdãi™`aA»ÄM?ðV—WÖ÷öôÝÑ÷Ùü4VŠPÏcWÏÀ:ÁÏâT~¡&ñs¹ZNÍ1çcó3Š4`…BªàÀO?%SR§N­8H8DÊRÅ[¾·¥8ØO#g!nö?žÇ°žuŠ¸ÄÉÄ@M#ît¹:²Í0çc9¤VȈÃÙ&ê9¤ph?¹÷Þû™âª¹Ý³ÝSÆ"R3™Ñ—cbãq2PÓØ8]®ŽA3LÀùX#l´Ì(`FR(Édk¦¯¤ï¶÷Mé[ÐØh;ÊxCkªÉ­•
-ƒÒ|ªø •qªàTÃAzTåù6Õ„ ôL6õåX§X|@œÌâÔ4O—«cÞp>Ö¸3 +ÂÐtÎ@ìã¦߆¾ ­
-´&¼7ì°~…ýÜ`5ËV²°$ŠÑ¸’d”½ &ªGkÆtSäRÀ–ŠŠðržKh­E,Õ<„~9Ö)B'z 5ÐÓåêH8ÃœõÄ­D¬X´—x1øÄÑ€o« õÀAÍ™)§N¹9)ÞH"¿!WÇ ò\‚*)â0ž‡ /Ç:EÐâd‚ ¦tº\©f˜€ó±ž8~ˆ
-mœÅÅûÔÀâ9)>“Ѳ%EÒÖDÞ=Z`KÞÔ8óÊÊH(
-f2š/Ç:ÅÉâdN ¦qrº\f˜€ó±Æ9Û°´pŒDó¨b²™d4$,9È9 at +©í¹VҏéÎlF¾ë#ˆ“9€šÆÈéru,šaÎÇzâHa´éÝ¡šÖÕ¤cßQiÓÞ¡&œ¹äTÎ2ÓL½æ×6¾?Í<ëC{ˆS:„šÄÐäjY5Çœ5ÆÐ@ЂöaP¶ÇPËWL>3”¯H!h8H¹ªD|xÒþ~¥éü£éê
-r
-´¢oóü«Ï?zùš…x*Œ½×pŽ
-¤÷4 ;ø6ôM軦Y¯ø2TÔÚ±µÖ˜§éƾKÊÙQ¼¢oF9ÅŠ'_»VÏXGøB[j‹gy­¡-¸cö»i”S^k fÚîáDøôk
-¬jì
->û½Æ°[Ãúl1ÇʼnOþv5*Îñ ÍHHw¯uŸk<ªË[?ûÎS—Ù”øZÊ÷vÕ%Ь¸”ÑJ²fSî]¢>I0½?Á‚œ„ƒß>¾wéÝ.ÏVI“•… ^Yéýº.ñ…уëk•g)?E"Û
-c÷6	§»&-ða’tBA½M‚ò|Å&)—äxCy«$çô®}ÜD¯¾ c]e\¿ª9#+ê&ÉótýšÓI×ÉÆaò Mo?Õü1—û¦)\{–e“T´¸è(Š9G²aÆA6ÐPFÞ/c°
-ûŠ›ík´0N„ÃLòºäX•Tiþèz"=a¬›Il~[•[ÎÆ‘ˆ»*·[½B/ÏŠ¤mà},òìÞé‹>þñþ?3ý	íi!ô#—uA‹z¿Üf
-çßUÉn“­¨~cÿÖ¸hYõ…rŽÁ‡¼Ã×mÚ»-«mÒðÓ4H8
-‰uV¥«;Ñ#6nþ £fn23Êœ´kläݐ¬X£H“Š›ƒKñm•ïk7-槙{`ŠòûLqDÁÕâÊ8ãs ô1;¡ìÀ€W\kS²ì¬ÿ5×ZÒHˆ
-­*„™ Rè‡.=zr\.'GcÃF¢¶ËHZßi›Ëˆ!…béA”¿Nš„cuS¥É—7ôýþvÐl™¬°¥e¬ˆU€Y+R9ªì„öAʺ¹^UÙ®qÊK¿f«ôu«§‚ž°T‰„ÅËqìCœ”eV$Õ#®¼×¯\Í´¨³eî Ë‚X¡HK‡ÎÆ4œTw)m檿ؑ~Êx¦ÉšËÊ‚Cb.„9ÐÑeáYÍÃ	M™X‚$[×`C‚Cl› ø#×Y%d*0Ÿ­D6li¹BSŽ,5B ”™{ š5½%m];‰	´SèîºaJ)¤Pt¡æ{ÿ,/˜#ê>òÞ–øÒô›KðcÝìÁÖ=*¥üë´Á·§õѾ8ܼ Oã©‡/_mÈÈ£æ‹OPbx^-_CCPçÙ݆f¦r¶%‰
-Uñ7pÅåÕxß8×[uÏc-mö;ŽÞ²ñzóΨ¾ÐJé°}w‹Ã&Å_µ}ý·¯l‡#‡ÑA´Ålgß#À9L‹dÉv0¼»´H+Úù Äi;ŽFÀe5=Æ™®®ÃT†"Ø
-­`§Ä5f|¹w½®S´¿EÊÛô•“ðˆûe‘òó⁍s¼á5>ÀN€…Ç·š³ëÔ½M&ý*´ðСJ+·ÛÀìQ-‰%ø5{}ÃK"2­ÙOW©s°gŽ¶•ÜbŽ´Ó d5ií4‰Ý¾ršªÓZð
-éÊÖl›S…‹"UÖ¸nØ
-!Nß}ú~íýU¢M¶¡	|zÀ€·9šsIýbæ_ûÚÅòò®víØÈšÒ.©’mڐŸƒéû‚-@Ñï(ô®Ñ¶lQ®¥ëÓMWy e¶¾~ÇÊ7Ív÷¦¥6—±˜¿«
-òŽ1ȼߺÈ8fÜâœùÂÈ:Ía,8˜*,äÂ`¯*’¬O•–ÎŽÁY½ÆêÂ9ÄÖ
-PlÛ12•YêÃ:XoAcÂZaÂî)=úÌ(	Yb¿´0šÁðñÀée‹¤h§¹ßƒò«æ•ËñÏ‚jLˆ`½_xFH¤úçßUå~MôžüÈ»Ûóƒ~ JV«´®ûÝIGN,Dû^2¨‡Ýð{Ƕ.R±Q­èÒàê,~j8w·_æY½AKˆI"‹Ñ‡V¤­cWußf:ë»t¶§unȝY3j¡.¹Á#mF{.(ÒãÞ3‡1"FÃu…i\¥ºZ/+¸Š`÷­véN‰Æ»Åi"ÏvÃâh«4åè\4!|ƒ¶©t›¶L™ŒõÉ8oœ'郓Ävñž
-dd‡,¸thñ„îT¹RâDúî$aÅÔc{ç£Ëž¸ÂÎ2Š§Îaí–H;6)]ƒ´[Wƒ¹ØµÍYM<‡(jWÓÏÎü?Ö_ÙîãhG:0‘ÀXÝ®.ñbd7Ú‡2}ä;8±{3vÿ?½_šç
+xÚ­[IÛ8¾×¯0ribÄMËa€žÉti ™®
+fI²Í*«K–<’œåßÏ[(ÙV\qÙÒEÜ?>>~||¤épö0g¿^ýãîêÕÎd(Ò0•³»û™´RÄ¡œEI*ljfwËÙ‡À˜äúÓÝo¯Þ(5KDE«ª0¡–€D•^¿w{}£­	ÞÕyÙæå§n·›
+Ä º†OÝ^ßH#ãàõ*Û´®æ:J!þÕ/wWÿ»B@iO+´ž-ÖW>…³%”ý6…N“Ùª¹ži›ˆÈZˆ³Û«]…~xG°¢P(e†`q?	ö#Y@³1ÿ—¯ÙzS8O¢a<†(!YoÒî·Oba;­Ýæت­h­Is×*	P{7º"kÝKLЬ1.Uyÿ]+Rc.Qˆ§1ŠÁêL,bt(Ldt‰HÙ™ibgµ›Ý?«Ó©¢¡˜Ò¤'Ťé0³X 8½|F(À&­~ÃøGZ2â,}ש•0n£¿ëÔP§‡Ã?¤M
+‘J„•?’jK‘‚Orúb¨'g:ò &ZØ$î ΝçC$¯Õó°,,m£	¤²XgÔº¿Š˜:Þã¯ÕB‡0>­D˜FL¥h0Uð€¶R™L°ŸÌ9Èú2¬ùéÙÄ“‘°ÖLüó±NQo‡8š{¨qä/WO™	&àr¬ïù§Âƒk
+°7eÈ8©‰qÒÕ ;Q¥læÒÚ Æ 
+rN•œj9pUšë›(Š‚¿A Âàd†	U	S({.oCþH:
+oÏÇ:ÅÛâhÞ Æñv¼\=×&˜€Ë±Žó6µ	`Á$Þn"7!âAsPr@Ž§d‚…í7C,®oÒ0ØÒwCßgóÓ¦JDf»zÖ	~î!Žåçj?'«ãÔp9Öq~Ʊ¬H(-wüTñS1!UrªåÔ‚ƒŒ3¡A¬Sª¢yËÖûiÕ$ÄMÀþ'ÓÖ°Nw‡8š¸¨qÄ/WO¶	&àr¬ci*TÄMàlï9¤ph?¹÷[Þû™âj¸Ý³ÝS%"Ö™Ñó±N±q‡8š¨ql/WÏ 	&àr¬#lLS0£€+¡“¬˜¾Š¾ë½¯£oI_`£Õìtjü­©!·VipHßñAªæƒTΩ’S-î Êómª@è‰lêùX§X¼CÍâÔ8—«gÞp9Öqg@ËV„‘흁$ÄM¾-}W@ÚT"im$ƒWì°~†ýÜbµ”­*daIœ q•ŠdT{ABTS¬™Ð	L“K_X*:ÆKÊy.¡‰ÒÓú|¬S„Þ!Ž&ô j¡ÇËÕ“p‚	¸ë‰[…X‰è.
+ðbJ†ÄQÉ·UúÂAÙŽS§|ƒ‚‡÷ŠÈoÉã5	€<— Z‰$J¦!èùX§ºCMÐÔ8‚Ž—«'Õp9Öq‚&õ	cwWjç$©
+ÑO“7€AÎø‘ás•Lù²*å˪äŒý_A©œÈ\žuŠ;ÄÑl@cãx¹zM0—c=q ËÏE¼Û†!UȆ1坼8ŽÑ„Ú8xDo =`äùק6Lè¶lFžuŠ‘;ÄÑŒ@cäx¹zM0—c=aÓ0•°Æs7kÐAÎAËAÆÁœƒ‚ܳMzážmÒX„á4Vò¬œÜCËÉ!Ô(NN WÇ£)&àr¬'®ô’Ø$ݻѷÝÁ‡é|cjlw£ŸqæœSÈL;öG'“Xši¬æX§ºCÍÐÔ8†Ž—«gÕp9Ö1†JAêýh³ÇД/<Cf(_ØCÐrà¸ªÄ|”71þšjè4nè"rJ´¢1oôüVÈ?Á††x:J‚—pª—qð3zÔŒn_-ñỤy_'~ïñ-I`˜‘žä­I°è;µ«1o}3‘¦v=ýÖ‡†"õ$¯}†ÝZÖg§ˆAx\œøä/KGÅ9|@Ö£iRú+úǼ\âEð­ºçðc(Má|f[á[»0ØÔ×2Àgf1Ñ	J¾äíªÚúD|V`*K~À9¿¾ëÓ›M‘/²6¯JÄMUðoèºÂ÷i_|_‹"wü8cwüoÔ[Wâ³6å…‚z«åùŒM—x¿‹¬àô¦{Go!cYç\¿n8#/›6+
+·|Éé¬ïdå1yÐfo?5ücÏ·m[•PÓ@/øŠÑºÈÀœÙ0c'h(Žâà¿×	¬åmÍͶ
+Z„ 'ÂcfESq¬ÎjW|ó=‘ž0ÖÏ$6¿¯«5gãÈŽˆ»¨Ök½‘QPä¥)¢TïË"ô:Æ¢÷¼ýÆìþ„öŒŽú—õA‹f;_ç-ç?ÔÙf•/¨> ÷µõѪÞÊû–ïþùßFšà¾ª×YË!¹ã($–yí-v†)"GbýüAFÃÜdfTiצqpG²bÒe57àë¢Ø6~":ÌN3+vÇî3ÅW‹/㌏R›CvBÙŽ/¸ÖªbÙYÿK®5§‘ZZ?T3A¥Ð]™íÉqst9y«6µ[F*
+½¶¹Œ(R(–î´AùˬÍ8Ö´µËÖ¸¼¡ï·÷ƒfól­x((cŬÌÈ;‘ª£ÊÎx`ï¤jÚÛEoZ¯<÷9_¸—¼
+ö„¥J$,ÆXXŽc§â¤Ìó2«¿áÊ{ùÂ×te“ÏX•Ä
+MZÚuvLÃYýàhóÕû‹é§mð§Ë–\V•s!,€Ž>ÏVNhF8ÈÄ
+$Yû+bëÁ¿qEF¦óÙšAdÅ––+´Õ‘¥FD‚*÷χóVø—ȝ+¦p#v:qäop•JhºŽ
+ƒß«k
+戺ƒ×¾SþêüÔ;{°öO’)ÿÖµør¹9؇›ô©b…vøn:X uÐ|öJ,ÏkÊ?b@ÐùÊf¦rÖ‰
+UñE€âòê‘ÁWÎßì?®®ûÇÕˆæÚ톣÷l¼^½±z_h­­ˆMÔ½ÚÆa“âoº‚ýåGÚáÃð ځ6´o‘RÁBÊæl¥\éjÚú Ä«[ʃ!pYC¯ëqªë–ë0—¡öÂA+Ø*qQŸo}¯K‡¸t¼Oßx	FS•Ž_§ŒØãl
+/¹ðlX¸ò„k8»qþi;)X£‰‡µ«ývÓVYt,VÀÍÈ÷{Çk"¶Ýw‹œT‚9Ø3G»J~5ÇÆk ²Z×xMAb³­½¦×¾T#ÝCÙ’³óPh±(ò¥Î[ß
+›!ÄÙ÷ŸŽØŠ¿*´êÀ74Šý}x££IWÔ1fþµm|¬¨ߎͬÝ!m²:[»–<L?–lÊýŽ¢à­Ë›û>ý|U;à£ÜÁEîiùª]o^uäæ’ƒñ÷7u)@ÞcÇ?X |Ø9É8fÜä¼ÃÈÒ0
+Ìra°7;)ö§v•·d°GÖ/qŠö‘¸Äi*@±]ÇHU¦ia¹E66êÿŠ^3JB¶˜Ç¯RÍ`øžyàö²MÒ´×<nAùuûÂç„6dA5fD°ÞÏ<#$Ró‚óêj»&ý§0¶ü‡ Ê×4ûÝ)ÏN,D~2¨‡ð|m^¤b«;Ñ•ÅåYþÔrîf;/òf…¶“Dkv­þpk>WýØezû;÷ƧsoÈ¡Y2j¡©¸Á7ÚŽ¶\PºÃÞ43‡ñýn–Óh½Ea×®×Vçæc_ìƒ5>ÝëÐ÷8Kä䥽ÅHq°µs]/‚æ!yïÐ6U~÷À–Ž¹Ø»!PŸŒóÓ¾dnÆG¶D‘—²ä!Ò¡+ÄKÿþ TûRâDö HŠi8Æ/D§=ó…½i–š§Îc”ݦH{6©|×=ÎÂ1öÿ÷ŠÞa
 endstream
 endobj
-9238 0 obj <<
+9224 0 obj <<
 /Type /Page
-/Contents 9239 0 R
-/Resources 9237 0 R
+/Contents 9225 0 R
+/Resources 9223 0 R
 /MediaBox [0 0 612 792]
-/Parent 9228 0 R
-/Annots [ 9236 0 R ]
+/Parent 9214 0 R
+/Annots [ 9222 0 R ]
 >> endobj
-9236 0 obj <<
+9222 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [150.705 261.788 226.56 273.478]
+/Rect [150.705 248.49 226.56 260.179]
 /Subtype /Link
 /A << /S /GoTo /D (overridesettings) >>
 >> endobj
-9240 0 obj <<
-/D [9238 0 R /XYZ 151.701 685.529 null]
+9226 0 obj <<
+/D [9224 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5095 0 obj <<
-/D [9238 0 R /XYZ 151.701 660.623 null]
+/D [9224 0 R /XYZ 151.701 660.623 null]
 >> endobj
-9235 0 obj <<
-/D [9238 0 R /XYZ 151.701 643.753 null]
+9221 0 obj <<
+/D [9224 0 R /XYZ 151.701 643.753 null]
 >> endobj
-9241 0 obj <<
-/D [9238 0 R /XYZ 151.701 637.775 null]
+9227 0 obj <<
+/D [9224 0 R /XYZ 151.701 637.775 null]
 >> endobj
-9242 0 obj <<
-/D [9238 0 R /XYZ 151.701 644.051 null]
+9228 0 obj <<
+/D [9224 0 R /XYZ 151.701 644.051 null]
 >> endobj
-9243 0 obj <<
-/D [9238 0 R /XYZ 151.701 632.096 null]
+9229 0 obj <<
+/D [9224 0 R /XYZ 151.701 632.096 null]
 >> endobj
-9244 0 obj <<
-/D [9238 0 R /XYZ 151.701 620.141 null]
+9230 0 obj <<
+/D [9224 0 R /XYZ 151.701 620.141 null]
 >> endobj
-9245 0 obj <<
-/D [9238 0 R /XYZ 151.701 608.186 null]
+9231 0 obj <<
+/D [9224 0 R /XYZ 151.701 608.186 null]
 >> endobj
-9246 0 obj <<
-/D [9238 0 R /XYZ 151.701 596.231 null]
+9232 0 obj <<
+/D [9224 0 R /XYZ 151.701 596.231 null]
 >> endobj
-9247 0 obj <<
-/D [9238 0 R /XYZ 151.701 584.276 null]
+9233 0 obj <<
+/D [9224 0 R /XYZ 151.701 584.276 null]
 >> endobj
-9248 0 obj <<
-/D [9238 0 R /XYZ 151.701 572.32 null]
+9234 0 obj <<
+/D [9224 0 R /XYZ 151.701 572.32 null]
 >> endobj
-9249 0 obj <<
-/D [9238 0 R /XYZ 151.701 560.365 null]
+9235 0 obj <<
+/D [9224 0 R /XYZ 151.701 560.365 null]
 >> endobj
-9250 0 obj <<
-/D [9238 0 R /XYZ 151.701 548.41 null]
+9236 0 obj <<
+/D [9224 0 R /XYZ 151.701 548.41 null]
 >> endobj
-9251 0 obj <<
-/D [9238 0 R /XYZ 151.701 536.455 null]
+9237 0 obj <<
+/D [9224 0 R /XYZ 151.701 536.455 null]
 >> endobj
-9252 0 obj <<
-/D [9238 0 R /XYZ 151.701 524.5 null]
+9238 0 obj <<
+/D [9224 0 R /XYZ 151.701 524.5 null]
 >> endobj
-9253 0 obj <<
-/D [9238 0 R /XYZ 151.701 512.545 null]
+9239 0 obj <<
+/D [9224 0 R /XYZ 151.701 512.545 null]
 >> endobj
+9240 0 obj <<
+/D [9224 0 R /XYZ 151.701 500.589 null]
+>> endobj
 1862 0 obj <<
-/D [9238 0 R /XYZ 151.701 313.977 null]
+/D [9224 0 R /XYZ 151.701 301.18 null]
 >> endobj
-9254 0 obj <<
-/D [9238 0 R /XYZ 151.701 284.299 null]
+9241 0 obj <<
+/D [9224 0 R /XYZ 151.701 271.251 null]
 >> endobj
-9237 0 obj <<
+9223 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F4 5484 0 R /F17 3698 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9258 0 obj <<
-/Length 3361      
+9245 0 obj <<
+/Length 3511      
 /Filter /FlateDecode
 >>
 stream
-xÚÕ\moÛÈþî_!8”â;¿\ÑCsEz at pÈ¥HŠ~HT¶i[YòI²s¹_3;)Ñ”)r7½öƒ¸ÜåòÑpøÌììrH>¹žðÉ'ß¿;yþ)'ŽÇÅäÝÕDpÎ|ë3AOÞ]NÞoË‹Íl¹8ýøîUìîY°Vcw‡ÞœúIÉ;=ܪâÅåÃtqQ^žž)£‹¿/¸Ð×÷«iƒd8ü<ÄV°ï´Ùbi°×ÉËw'¿œh…Î;Ò¦ÔäâöäýG>¹„c¯&œ©à'ŸcÏÛ‰2žYƒhóÉÛ“žðêŠ;°,gRê6˜î XTÛ¾ô5š4ãè^þ:½½›— ¯P9•SHºzavÏ÷Žé¶ÿÓéôE¹ZÍ.g‹k8_©â‡ùò|:Ç}Pç¿Þ¼¥Ö·åf]ÖT»Z®hç§EI=߬fÄÚ”«'Ô©
-ZÑ'\Â],vµ,\šdδ5ˆŒíÊZf¥™(¼™¬ÊÉÕP”š	iÛR
-z¥Œ7LOð @ݵxšI$>*ýçî)i6HCþS[Å°¶ý§:þéþÕšXé™O‰  Ã!ΏF:t—SÜìàś̌wÛó‡Þã}¤J¥Ã°´×¥]©ðŽ)¼céš
+xÚÕ\moÛÈþî_!8”â;¿\q‡æŠô€àK‘ý¨lÓ¶.²ä“dç|¿¾3;)1”)r7½öƒ¸ÚåòápøÌììrH>¹žðɏ'?¼;yþw)'ŽÇÅäÝÕDpÎ|ë3AOÞ]NÞoË‹Íl¹8ýøîUìîY°Vcw‡ÞœúIÉ;=ܪâÅåÃtqQ^žž)£‹¿-¸Ð×÷«iƒd8œŽâ™üwÚl±´Øëä廓_O´BçéSjrq{òþ#Ÿ\¾WÎTð“ϱçíDϬA´ùäíÉ?NxuÅX–3)uÌw,ªm_úÍ šqt
+/›ÞÞÍKPW¨‰Ê)$]½0»Ç{ÇtÛ‹ÿùáTú¢\­f—³Å5¯Tñã|y>ãPç?ß¼¥Ö·åf]ÖT»Z®èÏÏ‹’z¾Y͈µ)WO¨S´£O¸…±ØÕn°pi9ÓÖ 2¶+k™•f¢Xðf²*'WG at 5Rj&¤mK)tè•2Þ0=	À[  u×âi&‘ø¨ôœ»§t¤Ù 
+}qNmÀÚöIu<éþÕšXé™O‰  Ã!ΏF:t—SÜìàś̌wÛã‡Þã}¤J¥Ã°´×¥]©ðŽ)¼céš
 i¾¢á‘à|\Ÿ’à|-ñè=˜;—ø
-¡e1ÇBK*Ω˜ÖÇ°çÇcY',3Fg¡Ýp¨Þ5€ÉÄkA¥1/]®š/Ô?«ƒ|†<®•XVN왥‹3*Tl°0­F )h·ø+\§g÷q{·ëcÉÉ5D)!9‡Cõ³L&g*œérÕ„Ê þñXäÔ¸¯Ë3ámCNi#9%ñjªm¨vAÅ”á§Q5¶©â6n!¤22kMÌê,.uÔÓ¬ÝLem*‰µäÚ2-‡úÇcu³ÖkÔ—eRU.Gp Žà¡“)oCd4xOd´±‘ÑP[PmCE¹×fÖÚH\É‹/8Có±Ç“Ös“Â,¤ÕCÚ0™´-¨4Ò¦ËU-ƒúÇcu¡ži§&3n'®ŸŸ†øINjk:ïؐÔXÏœÊã?‡CõP±L¦b*ŠérÕôÉ þñX]þ×£@_N2%‰‰08ÃH½ŒÛ۝m·‹¸*E^Q™âþ:ú]©°ðÖohÊ´¢bFó¨Õ6T”ÔXu9ڛ˜ËãM‡CõP¸L¦p*ÂérÕ´Ë þñXÝ!€`
-pž5uÜê9Žü°ÝÄí
-6$¬±¢xN«=
-väN¡	8^UHŠ Xî>ÒÜìécx bôÛÛ¸=‡­ƒ–#ɬ5óRe!óp¨27€ÉdnA¥‘9]®š€Ô?ëÀ,Œ#„U8‹ëR"àlI@ZRmM5 ·s™i\ñ	É¢S†#CU%™·>‡Cõð±Læc*érÕÊ þñXÝKVÜã%Z¦Må]?ãŒÞG	ÅŒŠ
-S*Ω˜S´:Ó˜¸8 =PöHBJ8(ò8ÈáP=„l “	Ù‚J#dº\5‰2¨<ց5T¼•š™Tš1iš1iš1i³]@Ò±sªÍ©@R‚ÓLó–0“&·ÕCÎ0™œ-¨4r¦ËU*ƒúÇcu“´%$\è.;MÖ9±³Z
-ÄÎ@óyŽ]E£Úáj•Ž%QZè<+ºÒã®cDÊÕ¶Ø`üé‹g˜
-Yü
-Nˆ.Ønâv·—q{·³>QH«âÙÜâÙZc›ŽÓ?؞ǖ»¸¿ŠÛYlYÄýMÜNcËeuÖq6¤¡ä<‹ƒõ´
-í ¦ÚP*Ɇ2ȵå}õÇzbqôf|hÇ”ŒA¯“Ѧœˆvãâ³lœQmJż#ÁÔ⺧ð$>ìç"ì‹SMÌÄرjEÅŒ„ZPm³'p•fr슝ö†qeŒÕc
-`²}´ Òì#]®šÓÔ?ëðŠö  ¥Ç,Ùi(^À8âi	NÿŽŠ’Š*Ã–žŸØ¸ªÙ
-V8t=ÏÍPiÈóZàd!D{Ñ`{”ÆBhú(@§ã‹ÁSâSFg	H+…–Ö
--Ù“%“·dd–Ò7¬8:tÓNÅô»f5ªÇ¬Àd³jA¥™Uº\µ)dPÿx¬ƒ«ˆÚYf]øï®"
-zˆWcd¦bÞQl¡dO±+©2Ìà Ëë$8^'E6½`õuJd‡•ë=+W•i=V0¡\ëÕc=
-`²õ´ Ò¬']®šñÔ?ëpf“¶š9©Ó3›${Bĉ¹¨kÇòÌYø<Þ}8T?Àd~¶ Òø™.WÍ©êu8¹IÉœ
-ã“›¬¢)8D&èÀMõÀ>>ÂZ•B2Ý>°?’­Ê1)óxÓáP=lm “ÙÚ‚Jckº\5Ã2¨<ցE÷hÝ 7±ãM·‹îa»è¾ >RØ*!ºÀŒ;úMO18Ž©O†{ʽ‹¡t <‰ñLˆ©Î"õ?
-aŠ×§¼„­)þ}ª‹o¡‹³ÅàŸeQÅXÇGñ1[JAŽK8û[\‰âdþŠ1ê!.SaíjïØœj¸(ÿö
-æYSr=‚$°ÓìAº
-‚ŒÜ‚¯_°9;Ö¥aÒå:†Cõc˜lŒ-¨4cL—«6 êEo'ɽÅ4hÀ”žyã‰KߝbÂÊwq·À|D¿åÜsœ(Ä™7†õÍÂÄÙA0ÖVãøBñ=ÀÜŠÊ:À pê ³ˆ“àA+ܵgѶç3%­9dº†L×’éFC÷
-Óq;¬
-õwôé)‡eÊëmŸo¢3éÓl*£á
-¸ë"Ï(:ªÇpÀdÃmA¥nº\µ±ePÿx¬®UÚÀ®°1¥¢š	?&¤Â+꧶j¨­â“ÏQ-r3FÍöp'÷!µ©»ÿŸyŸŽ%>€‡¯â¸`ÊfyÓoTh “@*Í	¤ËUnõÇêvÚã%jt5z?=Æ —ºî`®6Ìò!ÚöϘ§e‹W‡Ü…4@Y°ãß2!š PgN°å<.Íš>ûÿ-öøâxBáŒÔPg¤<°ÛÎhÔÓÎh0Õµ¡’œQ¹¶$‡úÇcu;£ ÂDÉBPÍËJŠ^7†1¶\Q@Ý	íLœWáÆ1ÄNë<ﻏ€ê!^˜L¼TñÒåªÉ’Aýã±g+/W~tZñðìMe
-Ó!ÕCÄ0™ˆ-¨4"¦ËU“'ƒúÇcN'Và	¹W@:±2 OÇ3‡ê!d˜LÈT!ÓåªI”Aý㱦+·Tº?>¡XiÚÍã/‡CõгL¦g*žérՔʠþñX‡ŠÌ:…“_1¡Øã /¸‹Ñ '_ÌÝÑÏ/•ÌfÉàŽÔÃÙ/™²ûHiŒM–ª&YºæGCˆ3ò SêʝÞÐ"@•öLzNN5bJºÕÑ*¤%l¿`äI© ^s¥8.Gbþ,§â@íHÆ
-Ǭ3Y(;ª‡³
-`2i[Pi¬M—«æZõÇz‚¸R0iåQÄõšÂS)èÅw¾-–ÔˆY¬JÐS÷Ï¿xãл†<WÅ­{âç#Qýôúg_¦º´nÞ¿®_ãßßáÇ%
-¾îÀÓ
-h8E2ŒjU£Ý9f·ÇLW£¤BÑcƒg]+ÿÂ0¾Êã?0–ç±ýp¤ƒ®ñ’íy)Íœ“¥ª-0]ó£¡:lÙÁÓ€
- ýj”aÈ)ÙœQMPÍîÓtL¿ë.Õ	–jýƒ}!SqÁœÊóOIJâ‘3	ðDH½ýÒ×ÎíáxÆ÷&Ë'<ÛkH›[=´ÊNqdè}<Ü)œ"Àe¡w?;+%¾Û,›ÏðâRç»_áµ®û+¼ûß¡åc˜1U~á÷åÕr…o`x
-ƒŒsAÜ¿,ç;Õê³KªMçsÜQÅæ¦:~Ñúãظ¼Ãýõ3ô´ª˜—j¾_Wç̧«ÙÕ—
-’ ¯ÊÏT¿Ã¢XVÿ»Þ>	­Kગ_—›ÏËÕ'|¢kŠ»Õl±¡/ëJ],ÊSƒo6á‹…kꀗ‚‡ÎéHl[®°r=]Ì~ƒ¾#>lž.ª5^žtG
-عZÕè›ù—.¥K‡©îõhÁðõY¼»™¡*‚/®Vå/÷%]+!LζçÄkÔÕíºŒw (׋?£,Â7Ó;ÒU¹ˆ°¾ø±¼ž^|¡£ë/ëMy3÷m¿Œ·ñâîùýz¶(×kªýøâ5í (®x˜­–‹ÛJ¬ªËòjSF^mµ¿•l>½À~Ÿè«Ä—§ô&Y±ž]/èU2R#ì\Ó5жj»YÞ¯ËO‘påÜ7Öio`g¿p¶®ß
+¡e1ÇBK*Ω˜Öû°çÇcY',3Fg¡Ýp¨Þ5€ÉÄkA¥1/]®š/Ô?«ƒ|†<®•XVN왥‹3*Tl°0­F )h·ø
+.Š‹Ó³À‹û¸½‹Ûõ±ä䢔…œÃ¡zÈÙ &“³•FÎt¹jBePÿx¬rjü¯Ë3ámCNi#9%ñjªm¨vAÅ”á §Q5¶©â6n!¤22kMÌê,.uÔÓ¬ÝLem*‰µäÚ2-‡úÇcu³ÖkÔ—eRU.Gp Žà¡“)oCd4xOd´±‘ÑP[PmCE¹×fÖÚH\É‹Gœ¡ùØ…‡ãIë9ƒIaÒ‡ê!m˜LÚTiÓ媉–Aý㱺‚PÏ´Ó€“·„
+×ÏOCü$§µ5wlHj¬gNåñŸÃ¡z¨Ø &S±•FÅt¹júdPÿx¬.ÿ‰ëQ /'™’ÄDœa¤^ÆííζŒÛE܍"¯¨Lñý®TXxkŠ74eZQ1£yÔ‚j*Jj¬ºíMeÎåñ¦Ã¡z(Ü &S¸•Fát¹jÚePÿx¬îÀ°8Κ:nõG~ØnâöÖXQ<§‰Õ„ž»r§Ð„{œG¯*$EP,w
+iîöô1<P1ú…ímÜžÃÖAË‘dÖšy©²y8T™Àd2· ÒÈœ.WMÀêÕ½DÀ5°üòî
+R8[JÇ),3j—
+‘ttÇ"P(HõÇ»U%™·>‡Cõ0±Lfb*‰érÕìÉ þñXÖ8bY¦MåWq‰†T„ÉPIµ5ÕÀÏ:çÐIW|B?ö9|Ö$a§Èã‡Cõ²L&d*érÕ$Ê þñX\£ÇKÔ¬¢ãgô~>ÝP̨ØP1¥âœŠ9%úÉHKcâ*•ö@Ø#鳶`òøÇáP=tl “éØ‚J£cº\5…2¨<ցÅ|¸•B•šµ|š¼kš¼kš¼k³]ËŸÒ¾sªÍ©@Z‚ÓLò–JγxËPOÓs0•žm¨$zfkK©êÕMO4f×vØh݈;«•ú@줐öAG#ípáTǹ
+QZè>+ºÒ“+®ã䈫m±Á©/žÁI¸â¯
+ÄÃâ"–‰&Ø^ÆímÜÎbÜ@}Žæ¼7-gqÉ# z8ß &s¾•Æùt¹jžfPÿx¬ÃëªÚƒ‚”nÖU•ŒAª“Ñœˆ<wñ16Ψ6¥bÞ‘Çbê qýÓn’öÓXöE´<&ñì‰X	µ¢bFB-¨¶Ù¸ÊP:v±W;SÌrØÇp¨ûh “í£•fér՜ΠþñX‡{µ³Ìº0fµWCñü¾§iŸU‘¼6>ßÅâ‚
+ä°¥Go6®UA¶Gƒ5_Ž?†f”4Dy-0¼ÑB´ØÞÀ¥±šÎât\3xHhœu$ -2[Zr¶dO–LÞ’‘YÊü}G;V0¡\³ÕcV
+`²Yµ ÒÌ*]®Ú2¨<ÖÁhm5sRÿw =ÿ‹Ð".@Ç”µØByÂbWRe˜‡À’×ù“¼Î§mzÁ êëlÚ+×{V®+?Òz@]Â甆CõXO˜l=-¨4ëI—«f|õÇ:œ§dΆô¤8IÁžq"-êÚñüTŽI™Ç»‡êág˜ÌÏT?Óåª9•Aýã±çÅi
+zz|^œU4e†È¸©r=â#D¬UÙGÓm®Ç‘l•†I—Ç›‡êak˜ÌÖT[Ó媖Aýã±,’G}ÁTÕøˆÕ2yØ.“/¨†Om”¶Jˆ.0Y“~ÓSŽcÖœážÒ6c((ySb<b–¼ƒHýO§B˜âõ)/akŠêâ[èâlño8S ¼ëøh#>&Ú)¨À~	G‹+Gœ¬"PÞH #P â²Ö®ööÍ©†‹¨p¶o0EŸz8ëË H;Ín¤« ÈȽ Hñúݬ³cQÀy†ŽáP=ÆØ &c*ÍÓåª
+(ƒúÇcÑ‹mro±‡À6>J\úþs¾ïˆ»¦²ú-çž×«¥Ö[4g!æüéØÛó¸…½/ÑÉmÁ ¨¬§0+€8	î`ñ´Â]{m{>SÒšC¦kÈt-™n4t¯0“»ÃÚЩÁ}zÊa™òzÛç›èL:Á4Û…Êh¸\0e³¼6ªÇpÀdÃmA¥nº\µ±ePÿx¬®UÚÀ.×,h¿	IH…WÔOmÕP[i´^ÏQ-r3FÍöp'÷!µ©»ÿŸyŸŽ%>€‡¯á”Ls›Ã	Œ€zÚ	ì ¦:6T’È ×Öps¨<V·Ðp5*HB5z?=Æ —ºé`®6Ìò!Úö/˜We‹W‡Ü…4@Y°ãß3!š PgN°å<.Íš>ûÿ-öåÅ9ð„8©ÁΠuž7ÖG@õ8£0Ùµ ÒœQº\µÉ þñXÝÎ(¨ ŽM0®|󞛢7ÕaŒmWgP7DB;gÄU¸qñ¬a:ä‡Cõ¯L&^*xérÕdÉ þñX‡Ò{5"#}x¦¥2 AÇ÷
+‡ê¡`˜LÁTÓåªi“Aýã±g¢+÷TºÑ™è#ˆ¨è1/ÕCÄ0™ˆ-¨4"¦ËU“'ƒúÇcÎ@WÊ'ÿ€t%³Yr|‡#õбÆKfã>R“¥ªù“®ùÑP“Ï
+æîO>WÂ1ëLb‡êaf˜LÍT7Ó媕Aýã±%Ÿ+)˜´ò+&Ÿ{Ýw1à䄹;úÙ9°ƒåyt>©‡³5^2e÷‘Ò›,UM²t͏†:`z¼‹´_¹ÓZ€ªRîbdI9TsA 9­ŽþS!-aûˆ!'¥!yYpÌÓ㸎¹ÛœŠµã+ƒbÎfñ³# žæì`*iÛPI¬Í ×–k9Ô?ë0q1¥Ayq½¦¸T
+ú^ßKjÄj%(ã#²ÁÆu9ô®!ÁUëEÁÕǯÞÆüŠ§—»úÞ’Ö­Óû×õ[<ý~×à‹E<½ €†S$èV5ڝ}v»Ït5J*=²zÖõÔIÂ|§NÒ泬uGê1è/Ùž÷‘ÒÌ9YªÚÓ5?ªÃ–L.m (V…”ÝÊéEF5A5»³OÓ>Eü®»TXªõ2ôa_éó2Ïw‡ë‹$™ðÕa4Ûof}àÜþêp<÷Ó‘ìÑßnŸÖ.·Zh•ÝâØÞg’ÝßÊ]ßÊ–Ê‚GªbëÕl²îú6¶–L¹Úq}G×ô‰ëéâ²rd{g1Žá?¾ƒqjD1½ë<ÎBMëó»õfº©šÁU€Ó7"~ø¿öĬW“3­â¢Lýt\Æã|÷ûçÖuÿ|_>9S˜ž[}1å‡òj¹Â˜¼†ñLÆé,þ¿,ç;ÕêëÞKªMçsü£ŠÍMµÿ¢uâظ¼Ãÿëg8XÀU–j¾_WÇ̧«ÙÕcI€WågªßaQ,«ó®Y—êáRh¥z£üu¹ù¼\}„ÓÜg¨ébQ≛Ë5uÀKÁ]ç´'¶-WX¹ž.f¿C_‰A+6㍏ÖxxÐý5Ľ\­jô‹Íü±KéÒá›"õ€Çðí0Y¼»™¡*‚/®Vå¯÷%]+!LζÇÄkÔ/ã(ÊõâÏ(‹0ÅÍôŽtU."¬/~*¯§´è»)oã‹/¶ˆ_mÇÆÛxñïùýz¶(×kªýôâ5ýAQ\ñ0[-·•XU—åÕ¦Œ¼Új+Ù|zý>‘±\žÒ‹˜Åzv½ –“áÏ5]m«¶›åýºü	WÞÁ}cNœÅ IÐã
 endstream
 endobj
-9257 0 obj <<
+9244 0 obj <<
 /Type /Page
-/Contents 9258 0 R
-/Resources 9256 0 R
+/Contents 9245 0 R
+/Resources 9243 0 R
 /MediaBox [0 0 612 792]
-/Parent 9228 0 R
+/Parent 9214 0 R
 >> endobj
-9259 0 obj <<
-/D [9257 0 R /XYZ 100.892 685.529 null]
+9246 0 obj <<
+/D [9244 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5096 0 obj <<
-/D [9257 0 R /XYZ 100.892 660.623 null]
+/D [9244 0 R /XYZ 100.892 660.623 null]
 >> endobj
+9242 0 obj <<
+/D [9244 0 R /XYZ 100.892 643.753 null]
+>> endobj
+9247 0 obj <<
+/D [9244 0 R /XYZ 100.892 637.775 null]
+>> endobj
+9248 0 obj <<
+/D [9244 0 R /XYZ 100.892 644.051 null]
+>> endobj
+9249 0 obj <<
+/D [9244 0 R /XYZ 100.892 632.096 null]
+>> endobj
+9250 0 obj <<
+/D [9244 0 R /XYZ 100.892 620.141 null]
+>> endobj
+9251 0 obj <<
+/D [9244 0 R /XYZ 100.892 608.186 null]
+>> endobj
+9252 0 obj <<
+/D [9244 0 R /XYZ 100.892 596.231 null]
+>> endobj
+9253 0 obj <<
+/D [9244 0 R /XYZ 100.892 584.276 null]
+>> endobj
+9254 0 obj <<
+/D [9244 0 R /XYZ 100.892 572.32 null]
+>> endobj
 9255 0 obj <<
-/D [9257 0 R /XYZ 100.892 643.753 null]
+/D [9244 0 R /XYZ 100.892 560.365 null]
 >> endobj
+9256 0 obj <<
+/D [9244 0 R /XYZ 100.892 548.41 null]
+>> endobj
+9257 0 obj <<
+/D [9244 0 R /XYZ 100.892 536.455 null]
+>> endobj
+9258 0 obj <<
+/D [9244 0 R /XYZ 100.892 524.5 null]
+>> endobj
+9259 0 obj <<
+/D [9244 0 R /XYZ 100.892 512.545 null]
+>> endobj
 9260 0 obj <<
-/D [9257 0 R /XYZ 100.892 637.775 null]
+/D [9244 0 R /XYZ 100.892 500.589 null]
 >> endobj
 9261 0 obj <<
-/D [9257 0 R /XYZ 100.892 644.051 null]
+/D [9244 0 R /XYZ 100.892 488.634 null]
 >> endobj
 9262 0 obj <<
-/D [9257 0 R /XYZ 100.892 632.096 null]
+/D [9244 0 R /XYZ 100.892 476.679 null]
 >> endobj
 9263 0 obj <<
-/D [9257 0 R /XYZ 100.892 620.141 null]
+/D [9244 0 R /XYZ 100.892 464.724 null]
 >> endobj
 9264 0 obj <<
-/D [9257 0 R /XYZ 100.892 608.186 null]
+/D [9244 0 R /XYZ 100.892 452.769 null]
 >> endobj
 9265 0 obj <<
-/D [9257 0 R /XYZ 100.892 596.231 null]
+/D [9244 0 R /XYZ 100.892 440.814 null]
 >> endobj
 9266 0 obj <<
-/D [9257 0 R /XYZ 100.892 584.276 null]
+/D [9244 0 R /XYZ 100.892 381.038 null]
 >> endobj
 9267 0 obj <<
-/D [9257 0 R /XYZ 100.892 572.32 null]
+/D [9244 0 R /XYZ 100.892 369.083 null]
 >> endobj
 9268 0 obj <<
-/D [9257 0 R /XYZ 100.892 560.365 null]
+/D [9244 0 R /XYZ 100.892 357.127 null]
 >> endobj
 9269 0 obj <<
-/D [9257 0 R /XYZ 100.892 548.41 null]
+/D [9244 0 R /XYZ 100.892 345.172 null]
 >> endobj
 9270 0 obj <<
-/D [9257 0 R /XYZ 100.892 536.455 null]
+/D [9244 0 R /XYZ 100.892 333.217 null]
 >> endobj
 9271 0 obj <<
-/D [9257 0 R /XYZ 100.892 524.5 null]
+/D [9244 0 R /XYZ 100.892 321.262 null]
 >> endobj
 9272 0 obj <<
-/D [9257 0 R /XYZ 100.892 512.545 null]
+/D [9244 0 R /XYZ 100.892 309.307 null]
 >> endobj
-9273 0 obj <<
-/D [9257 0 R /XYZ 100.892 500.589 null]
->> endobj
-9274 0 obj <<
-/D [9257 0 R /XYZ 100.892 488.634 null]
->> endobj
-9275 0 obj <<
-/D [9257 0 R /XYZ 100.892 476.679 null]
->> endobj
-9276 0 obj <<
-/D [9257 0 R /XYZ 100.892 464.724 null]
->> endobj
-9277 0 obj <<
-/D [9257 0 R /XYZ 100.892 452.769 null]
->> endobj
-9278 0 obj <<
-/D [9257 0 R /XYZ 100.892 392.993 null]
->> endobj
-9279 0 obj <<
-/D [9257 0 R /XYZ 100.892 381.038 null]
->> endobj
-9280 0 obj <<
-/D [9257 0 R /XYZ 100.892 369.083 null]
->> endobj
-9281 0 obj <<
-/D [9257 0 R /XYZ 100.892 357.127 null]
->> endobj
-9282 0 obj <<
-/D [9257 0 R /XYZ 100.892 345.172 null]
->> endobj
-9283 0 obj <<
-/D [9257 0 R /XYZ 100.892 333.217 null]
->> endobj
 1866 0 obj <<
-/D [9257 0 R /XYZ 100.892 237.411 null]
+/D [9244 0 R /XYZ 100.892 212.939 null]
 >> endobj
-9284 0 obj <<
-/D [9257 0 R /XYZ 100.892 215.479 null]
+9273 0 obj <<
+/D [9244 0 R /XYZ 100.892 181.731 null]
 >> endobj
-9256 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F4 5484 0 R /F51 3736 0 R /F52 3737 0 R /F17 3698 0 R /F59 4373 0 R >>
+9243 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F4 5484 0 R /F51 3736 0 R /F52 3737 0 R /F59 4373 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9287 0 obj <<
+9276 0 obj <<
 /Length 2216      
 /Filter /FlateDecode
 >>
@@ -45021,351 +47879,338 @@
 6ߍ¶˜õ/°ÿ‡IoÌ)+ÿ®› ð…dÊ°ù¼ ŽI	C]ó|„wh¾ƒÒǯ®_ii1ýUùÖŽÕÛêÒo×Øh|éíæÛD©"ͧmÓRèã¶â¿ßšRaúgˤÖÏ4^’å‚cJ Áö*{ÉF¬¢]dÉÇ‘z2à—µ¦ï»û›ÿ÷LÂè
 endstream
 endobj
-9286 0 obj <<
+9275 0 obj <<
 /Type /Page
-/Contents 9287 0 R
-/Resources 9285 0 R
+/Contents 9276 0 R
+/Resources 9274 0 R
 /MediaBox [0 0 612 792]
-/Parent 9228 0 R
+/Parent 9214 0 R
 >> endobj
-9288 0 obj <<
-/D [9286 0 R /XYZ 151.701 685.529 null]
+9277 0 obj <<
+/D [9275 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1870 0 obj <<
-/D [9286 0 R /XYZ 151.701 660.623 null]
+/D [9275 0 R /XYZ 151.701 660.623 null]
 >> endobj
-9289 0 obj <<
-/D [9286 0 R /XYZ 151.701 641.703 null]
+9278 0 obj <<
+/D [9275 0 R /XYZ 151.701 641.703 null]
 >> endobj
 1874 0 obj <<
-/D [9286 0 R /XYZ 151.701 476.79 null]
+/D [9275 0 R /XYZ 151.701 476.79 null]
 >> endobj
-9290 0 obj <<
-/D [9286 0 R /XYZ 151.701 444.914 null]
+9279 0 obj <<
+/D [9275 0 R /XYZ 151.701 444.914 null]
 >> endobj
-9291 0 obj <<
-/D [9286 0 R /XYZ 151.701 156.587 null]
+9280 0 obj <<
+/D [9275 0 R /XYZ 151.701 156.587 null]
 >> endobj
-9285 0 obj <<
+9274 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9294 0 obj <<
-/Length 2044      
+9283 0 obj <<
+/Length 2155      
 /Filter /FlateDecode
 >>
 stream
-xÚ­XKsÜ6¾ëW°6‡pª<<>ìÊ!‘Í¦œD±f+IÙ>pHHb‡¤IŽýûíFƒä@¢µ‡Ýƒj€f£Ýøú%Ü<øçÅû‹ÝR	Ë.‚ýM 8gi&ƒ8͘΢`_ÃkSŒUÛl>ï¶ì)Ëâ8Bv™1Üœø¤dŠm¶‚Ç*ü¾¼Ï›Â”›­ÒQxÙ6Ÿ¸ˆnO}¾HÒÔ±ŒgV³‚uéIV¤r]¼Û_|¹@æ³Ûi¦TP/>~æA	ß~8SY<XÎc tÊbÒêàúâ÷~n±V犅L™ sb3!4©ÿ&ﺺ*ìmwm1šq˳7šDí~æ39[¡X¦²`«–jç:éŸ	>n5çáÛÜ¢T8Þ\Dá
-‘nÚþÉ7t\mœËü›+ÎtO.Û™±Ø§nØ«£aEÛÜtÌ¿¨‹¦cOn¸•‘†GÅ_¦¸s‡Z5ãûž7Š²0ÇŸ4ìóLâu}Õàv4=NCÕÜ£µ
-ilRšQgþ›¼0€£$á’Z÷…Î<ZÒ©§C‡¾ÝÈ$|Œ#ä㺫èmàWGu7ŽÝëÝ®n‹¼¾k‡ñu¬Ä×ý¥mãH„ïëT–/ŽUS
-#üÜEè0oJúš—nA¯
-‹n#Bë¡ÄÊ µp9§È»åM[×­õ«uŸ’±‹®oÝ80´\ª€Ú´#-ªfóº¦Mnïûˆ–}uªM?`‡gF+M†—w ==8eèu-Àö’>/€÷ËÉœ|04?BVW1œ¥LFjòí‡Уá>¿[+¡…ÿ>vE¬X"^ƒÑ*xÿÕàý„uæʽ¢˜)9g¶áxÀxºY»Q”±Hͼ­	øk¾ùGŒxùáóšÌò\šÌÚ]þ…ûJ€8´t
-2Ï5  ›œì[è8,êÊ4#­ñÝ	mO5¦jÀ|ø;òÍ_6<‡WO™e,•©O‚xaôÚ߯øSäb¶þ¶ny½j»æŒsýÜva´fxÊnwÂ:ceí­$ËÀ‚3+Aê忯®_Ѳ«OÚ†D1ž¤ž†b£Øݪ aœ,Z¬÷ MP»R?n@ó3»LuŽ`ýÏáÍ!9ŠÒ÷S/rŒr‘…Õ
-í«Ñí÷~jŒâ$„tøLúGJxÜ|t"Gºš˜\z‚«´k P`X¼àÿýÕ^¼^sTc¨Ä_p/(Ñ«Nñª{Þ•ÖLŧRÊÃÓP‹ÉëF,ÖO
-–AŽ~9FLü8–,YBå­óª^³DáCϠ󉥈™nÓOJóÑ]2_ó„g"fHÙ’E‰²kûqM9<díŒð£Õ½ ·£„íÞn âغ_ë0M·Ëm}u§<daJôö2;ñx¨=ᆇwVÄ=t¼ÅÜR‡{íÂéšÉ€wçÇ®69Z<)
-q2§˜¦YMÂv¹$—~N‡¾,ðŠç¤¾*J³hs…ëY»*£Jƒ"Å$K^ìW1ž»Õ•.U‚u)$”%à Õúe5Ú
-¸4+‰JŸLo°'ÑÚõ^€³{εŠ,˜ñ‹†©8WgÿÃTÂmÛýß
-ƒe$ç‹aîŠ\ý^ì±$×!ºª¥a*I/ïÞÚVf¤Š¦¡„ýËiŠÏ“c°unéÏ•MâÄlìÉûªo›#­G¶d(°ZK›L&2ØB“OIÌO
-4‰%µOé)ŽÃSwœ„TMÙnÀȇ—Sy‡õ[[ÞW›~Žõ›e‘ m{ë5ž>iÓy-X|Ö"^ÇéÝ‚š}:.ÛhLé	G÷´9Ø„ãλ΃Ÿ¶N>‰´yÀnNM±]ËèðHOPVM`üüépmúqxýdróƒ]Ä6ؽš“Ç=?“üBíõ‰îAÈÍÍ7nHc×x§S!ßCM
-t±œ·>‡_“xàŽv‹1œc	l†¾\{OgÍX¥8oTÚÿ+S— [Ú¢nhÑÖ%.Tø>oÐ Kì£<ÖŽ§óÊ=Rl=ÃSÐq:‰«%LJð—æë“PþÁè{È)ãvj‹ïòÞ¬×5'Ƈƒ½c7A1a` ¥¦¡’½‚­{Ðÿo+«¶Rf8ua·n×]o:´ÊnœÓSCÂ'®¹ǐ
-R€qKlOhÖmê6/MЁ¶ñDfç9¿£sIÃPÝ5hÀxÈQ蛩û¡îÐaÕŽq‡ÚXÚ4ÇÊ'Ao¿´ôæ´^õÊÆ´»Õ·Í·sÓøâ™Ýš‘¤ÌqÒ¯Âw0Çj›ŸÆö)ҍŒ¼¼"#vHÇf£FÚ`«\¹‰tbsçó¢0ÃàØîÜç³ù›x
-šçc0¹‡ç£ÝH\Òlþë~'9ÿ{÷ç1ø¹Ö]ȹÌOÞ"y°Ÿ‘v}õÛoﯯw¿\o?\]®WKyþÿ4?Bh"Á‚šD¾gýøÆ@B÷ÌSW¸Î‡“=5‹GµÖö¶ZÍHBG°`¦˜ŽPKjü¤ûσ–ÓÀªÂv)Îî“ëGÕòŽH͝ÈjœD—§ÂT«ÉO^(?û/Í\þ%Tn¬ÐI´¥]b7`(tÎ ÍS_x’Чp†”3Åæ"9u°8‡7iìÍÎÁ'%½ ³*,+ØåÀpîç´éšµÿ ÑHr²
+xÚ­ËrÛFò®¯`%‡@U&8O<äÊ!‘•Ý¤œD±´•Ý²} ¡„Z P²þ~û1 Ö’3=Ý=Ý=ý¤XÝ­Äêg?Þžm~Rj‡i,äêv·’B„IªVQ’†65«Ûbõ>¸qy_6õùÇÛ_=	Ó(2ˆ®ÒP ¶`<¥Bž¯¥ˆtðCñÕ¹+Î×ښ಩?iîŽm6q²®S‘ÒÍÖ±±/c%b]Ýž}:“ äél¨õ*ߟ½ÿ(Vœý²¡N“Õ#aîWÚ&ad‘[µº9ûãLœjlõéÅR%¡u"…RZ¾þÛìp¨Êœ¤Ý4yïúu†$ÑÀjó ŸðYK¦:]­µ	Eâù¨9ÍêýÚ
+¼iÀ,Zý½Ã…	ºlï´kÚggh¸Êy“Í%×"´&L¶q}¾É‡n³/÷.Ì›ú¡c²¹ R 3Ù3	×ÊXxTøs1Ž^T㇞ט4Èð“mv®’à‘a‡¶¬qÛ»–Ç®¬ï‘tCØŸç‰Ü–¡#þ.ËøQœÊàA?aš'[&ڶ͹ŠƒÇÎy@Ö/›Šß¾Ö¤¬Ô}ß.6›ªÉ³ê¾éú‹H˯ÛËNöZGFW“v:MÁû².»žüÈ"mÕŸf…_ð«Ââp.²PL<àZÎ_4“r×TUCv%óiy&°8´ÍþÐw!j.Ù« Z7=/ʺ볪âMFò>áÆE[>àÕ®íÀn‡4=qSÁå=°CKwþ²wüºä	`Ò{ùœ÷ÓѽûÖ h¶‡¬,úpš„ÊèÁ¶ï2ðòüAÃÊù[Ì}WF:ŒUì×Kg÷çå“d̹Lj5f¶n¿ÅxÚ-IdÒÐèQƒ¢5{’¿Çø€—ï>.ñŒ Ï%ñx»Ï¿ ¯Wƒþ‚tf¸ /8Ò[Ø(È«ÒÕ=¯ñÝÙ۞ߘH¨#ñ÷l›ÿPxv¯Ø=Uš†‰JæîÉ.žŒ^ú~ÅžÖ„:‘£öwU³ÍªEÝ­…°_ê¼1Œ–O‚ÛSa1V–ÞJ…)hp¢%p½ü×õÍ+^ªc·tC¬C'³òsŽ}X¼œ0Š§[ÈzàMP»’yÜÀÍ_¸°ÏT§l¿âÁcxHŽ2à´ æ©F¹LƒrÇû²÷ûΟó§Â(ŽH‡_ðAû(›õžEçA×’OO J³ä ‹&ÿ{}+/–ŒÕ*ñ×\Ã*@œU§hÑ<W©©ÅPJEcj0#ͺòõcå£ÈXÀxÇ*Œ§Pyãú¬¬–4ÑøУÓôÙ–ÙrÄÒ´Ã¥Yï…Ì–¬áËÑ¥¨dq¢<4m¿t9<¤vFΣտx»Ž}ã¿d0ËÒeT_=Õ̳ 0$z"BdÏþ	‰š#nDpO,Ðãæc?È"nÉ÷š	sVh®>gûCå¼çXù¬4Dñ˜bêz1	ÓrJ.í˜ç¼ ‡ÓјÔYÙÐLîÜBáú¢]U&Ò !ëX(rêÅ~£±[]èRh—@RA^
+&Ýúi1Rœš•XÇÁ?]ë°'±Ö÷^àg5öœKY†JF/*¦£Lþ-ŠéXPÛýÿƒ¥Q£`˜»Œ¯ß“>ò¢¯Z¦’8žåÝ;jeF‡ÔfHzòp†:ñyôTç¦þ\SgdG”eÛÔ{^÷á”A ÀZ«|l†*VÍ ׃ßMÓ†›ä”Ú‡ôEAƒ©;Šƒ?˺hÎAÉÇŽ—Cy‡õ*ï‹M?Ä‘‚ùn¥ÛnÉj"yÖ¦‹ZÐø¤;D$¿ý@ÅRp³/EÆN°§¸âÍ–Ž§÷)?o=fIy€ »c¯N´Ð?ñ%$
+.~úr¸¦w~ê.ž
+nóX—Åú¬âÃøÅiožH~åîúÈ2ˆ¸±÷ƍ÷ÑÈ÷ÝÉPfØt€PqÿœOôdrøº,G‚{ÞM&ÆhŽ 9>ÙúîžiÝkX%8n”Ý‚ùžJWpµ¢’îxÑT.tð6«Qvô$O•Ç9ÌŠ=B¨š!ô›žãbS`Ýxj½>Hmðƒï6ã4ŒÛ¡)¾ÏZ·\Õ<›yU#ƒƒ¡KP¸€@¡©¹ƒ_ôµÏ¿âoœ/ª6J¥8sa¯NëCë¨m¼Ñ“ù †€Â
+Æ
+€óKlNxÒ­«&+ M2ASÏX¦§ÏѸ|Â#àm70Þ6Cž¯‡Ö‡[Cï©4Ãm+G°aˆUÏ"žN>àáՁG½¦€öB}W7vŒß0Î@tçzæ2FIÛ-õ Û—ëìØ7{ȏ>d”™%e|Ð!;¶ëyƒ}réÇÑÍÓgyîºÎ£Ýûã“üø;x€:±Øf8:ï]ïâ‚'óßn7JˆÏ›_3Â<S€ì…˜Óô4›?”ˆÁíGO»¹þý÷·77›_oÖï®/—k¥:ý7m!<`9Í\‡y|c ¡}»Ð—R_¶N{ïÛ¡ Öpgkæ ¢Ùñ·¤=ÔÆÂyÌñï®ãð×AãK3yì¼Òú‡\¬©ÂWSuRM¯¦WŸñ¿¼²§zalpU£3ãڐƒ¶ÔSQý†1®‡’v;*¸íâÃÝÒØ(ò¿†4ò?‡¸¤»¾Åµ£³ýrnó¼f…úçæt5ö4´awÑj(,jòqÜ4îøÀŠÓx" å!\œÖa$¬Ÿ±•÷]Y8LÔKRìpž~ôÞqÊåIÇ	Ö9P¾÷6}ÐFŸýwhÃ`—“dD¹»€GÛ¡½Pí\ÑͩǦ‚XQ£cs Vúow߇ӌþPÙæ4·_htÿZfÁ"
 endstream
 endobj
-9293 0 obj <<
+9282 0 obj <<
 /Type /Page
-/Contents 9294 0 R
-/Resources 9292 0 R
+/Contents 9283 0 R
+/Resources 9281 0 R
 /MediaBox [0 0 612 792]
-/Parent 9228 0 R
+/Parent 9214 0 R
 >> endobj
-9295 0 obj <<
-/D [9293 0 R /XYZ 100.892 685.529 null]
+9284 0 obj <<
+/D [9282 0 R /XYZ 100.892 685.529 null]
 >> endobj
-9296 0 obj <<
-/D [9293 0 R /XYZ 100.892 622.565 null]
+9285 0 obj <<
+/D [9282 0 R /XYZ 100.892 622.565 null]
 >> endobj
-9297 0 obj <<
-/D [9293 0 R /XYZ 100.892 595.836 null]
+9286 0 obj <<
+/D [9282 0 R /XYZ 100.892 599.605 null]
 >> endobj
-9298 0 obj <<
-/D [9293 0 R /XYZ 100.892 531.187 null]
+9287 0 obj <<
+/D [9282 0 R /XYZ 100.892 538.725 null]
 >> endobj
-9299 0 obj <<
-/D [9293 0 R /XYZ 100.892 481.905 null]
+9288 0 obj <<
+/D [9282 0 R /XYZ 100.892 493.212 null]
 >> endobj
-9300 0 obj <<
-/D [9293 0 R /XYZ 100.892 455.479 null]
+9289 0 obj <<
+/D [9282 0 R /XYZ 100.892 470.555 null]
 >> endobj
 1878 0 obj <<
-/D [9293 0 R /XYZ 100.892 368.226 null]
+/D [9282 0 R /XYZ 100.892 395.956 null]
 >> endobj
-9301 0 obj <<
-/D [9293 0 R /XYZ 100.892 340.407 null]
+9290 0 obj <<
+/D [9282 0 R /XYZ 100.892 371.905 null]
 >> endobj
-9292 0 obj <<
+1882 0 obj <<
+/D [9282 0 R /XYZ 100.892 181.502 null]
+>> endobj
+5690 0 obj <<
+/D [9282 0 R /XYZ 100.892 152.603 null]
+>> endobj
+9281 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R /F59 4373 0 R /F17 3698 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9304 0 obj <<
-/Length 1826      
+9293 0 obj <<
+/Length 1779      
 /Filter /FlateDecode
 >>
 stream
-xÚ­WKoÜ6¾ûW9iˆæSÜúpŠH‘ÔrH{W\¯à]iKqãúßw†C)’£º-Ú‹DÉáÌð›OîžütñýÍÅåkÃÁYÅ+‘Üìa+¸Hò²b¦ÒÉM“|Nµ‘›ßnÞ^¾–2)Y•ç·J^2®p
-›~øøþz“)£Ó÷®í|ÛÝÑìú|:Áˆ§ý>Îo2¡E‘þ°¯OÞ:Ú#ÿ‹«›‹ß/!ˆ4“Ä0¥’íñâóo<i`ím™ªÊä!ì<&Ê”,7Ƈäúâß«'ŠDV#êéŠ5Pr)™b䜧Wœí¶õ‡GM›ôª«oÇ:ýU(Ü–ºz£Dúð‚vÌÔ…Ù®Ç5Gö2ÕܶRk&…
-VŸð¦iíÛ¾»ìq¸õÖgƒw8¶#ÓúH¬„™³ÊF^™ÌY^Ã7»M¦•L7²Lû3M΃¥ßÇÁ¯\h7xšô'¼{\0¼qí<nÝ@ÄÚÅcm7øúp°M<Ø=a»=´¶Ã£‘óÐ68Š—05îN 
-¨Ÿ	ÅŒ®Hê.RE-
-ë£9`ÖÑ×÷A,šmƒTáÔîÕ&3ÊŒðRgmyÒé2½Ýd_ûþÐDæûÚ­ÿaߟiµJAٍ ÔÊ"}XÑ H ƈY–é	,ÄGJ¿£cmÂÕÞí}Ûvµ{D;4¡q}×»cí”Uz³ä*j:nq¿H¢‘N8B;¬ÉŒ¢ÔÌ(0ÙöÎÙ-òñ¨5‚_i|
-ZQh€
-£=ÂäØMä1©ÀƒçÇ«"Ý=Íàñ^E,‚PÎTŽØ`¢“‚®ÅÓCjq(G纴~{¹=Ÿ†Ëc{´Ì?žìðìY<O—ªÿãÒmß}Ö½·`²PË»¾ïýÍÉá-ÈŒ5˜3¢_¹Ö†G9ôÌ|ƒ¡"ÐmבpÇÉ;qàì QžÎn=zx‘ÆÜ0"O âéo=q6Á'çnÛ³9ºiqŒ²b˜P•"Àœ©®BÓ_¾Û!ÒO4qDŠ ¥?MÎá	< —*}ÓŨºx	á½(õß=üÓ7BƒKLÇ0Jñ2=Ža5ËW%Ë¥ûgñî÷mÄù¡í"(èv at S@à{µ&5XM ¥œç‚˜Æ`×cÿx4âfÝ* q®òL2Š™uÙ‡ 7‚f®¹
-š¯*˜	Y2QŠ¨g&LaË_º†¡È™«â2ÿ쟘e£}t6F}Â!h³Ctõ]ÜÖõ~ÊGD9Ÿbö	±’*„¢Œ±è1ÐäSÛ5„ø¶ÅüX¤‘Û<Y¼\‹ÓSÇ ¼ibÁûÎc¨%’³Cæl(ðƒ	(~J;ñu?ÆÊÆHÜÿˆ‹5Nví¸ÌWÁ¢9ËùÄŽ‚U5ŠífÉj
-²’LùReë\ïVJÁâ¤Ô	úc%ªgkA¦ì©¤wi„R3‹À«ˆ¨<ôwk
-JÎJQŽúJm,ËyU™i€:‘AU	°§ý?÷ÞŽª|­iÆÁ'¤‚—€Š€–Œ©%m™i1žŒ„Ë7G‘ü؃j¦¥läšÍØÍA¿¹æD30ŽÔ4ñúªi©ZÑœ²ÅÊ[^(ÚáiY^’ˆ;ÅTâb>z†³ª°x3žÅëçeòn({Ð1Ì©%Ó•Z™®Z‚º€‰©ívÁcÝÖ®I röíËâsÀ)¥V Î6VO}±bíz®a“e§¹j h,¦½­gÝ2É
-ŽŠžóQ1iÔä)K&dUX=Â'%gR‹o8èÎBAð_xLªü=§ª<ÓÕŠÚW$…‚«Þn O¹¿sL¶
-ôëéÍo¨]0|êu9å{ø×ô;ö!}Àh júÙÇ î?f1?À§·-[†pðqðöˆcAÉ«îØQ˜e-ïjtྫXÝ•ØE
-4
-nQ¤ã4¤3z¡˜HpÝÕçC\˜•haJ?è|OÿªÌb­«)¨«¡R³†ö–ÿ4·Í۝iSûšFxþ—†	{ì—vk±*¡Ï¾	%Ò·Ô²ápªQqbë¡Åãúôh–7j¨bñŠýš„(¼úù¡|èà)Z4³†‡Áú—¯­C¡^µö¾ï㮎v}M‰HÍ6ÈKëÐ\ÃØ'‡Öö<Ê!18€.žHÔo#
-Ì»R€£dà(ª˜ªœè§:ö.îë´Ý=ÖÙª:ìî;BC÷‚Ö鉐'·ÂåîÎÆã#¬pÝ·ÆPV.ÜJ)È@zªNß½ywÄ8¤hòG7ûu2V
-†‹E.R¹Š…].g€G{4D
-캋ÿqìŽf].[ô†ãBòŸuÓº
+xÚ­XKoÜ6¾ûW9iˆæCÔ#·:"R$µƒ’èm^I[Ikcÿ}g8¤"9ʶA{Y‘Ãá3ó̓ˣۈG¿Ÿ]\¿Ñ<œ•¼ÑÕM$´`9QV”L—itUE_âTËÍ·«wço¤Œ
+VfYŠ¬’Œ+’ÓËO.7‰Òiü¡¯Û±noivyØïaÄãn?ý¸ID*òøåÙ¶'é䟽¾:ûë•f7ÑL©hÛœ}ùÆ£
+ÖÞEœ©²ˆg)]°Lkï¢Ë³g|®žÐ«ê¥%sjàÍ¿
+•öf#‹øñÙ&‘EïAœ“Hénè[Ù]}ÃØöf´DüÊ5¿®[Óa$M¤;¿~Óõ¶IRYÆWwŽ\z‹捈‘_ÄÑÆ;3Ò¨µ¶Bû€R‰PL§%Ý{ìÀzJÅþ>4Ùv}o·(g܁È#RÓx°#-ÃUh€
+çñ#MšÎ‰¨¼ŒI}Û´?õˆä®¿§™éíç¸`q@“X˜;c
+¬œHÉÒRzks‘?ݤ›Ü0ÀêÜŽÛóía?œ7ucÙxÜÛá䙉ßO‡ŠÿãÐm×>K8%2g2W˳.ºñÍÉÁdFætKó¾¶ÎÉÂ!‡ÜÌÁáà/KtÛVD$ÜᢥAo'pÝŽõúÐ/à†€@>ˆÇ
+žzül‚Ní¶k’5t5þ²€½D•Š  _³Ûu.Vhúço!Dü™fH¤	Rºý-u×BdRÅo[²æÒR at pé?yþ‡˜)ÜzÚö¢Œqcî7NMT-Q(‹¥†Ã¡÷€ïjô]ÝzQ0쀦ÈãñÅÚ­Ál*c<õÞ7ûý®Þ:eÏ»íhÇd{kšµ›‡­´sÝ(páLe¿
+L²‰žÙU¹sI.€f®¸rŠ¯ê—Y0QˆÅ]ªe"t®ËmÅðÆIoý2÷ßä”Q¼=ßB ¨¼œ¢ò#Þ=d
+A™Ž>ˆßôž­íF¢PÊaOJ•ãîHdJ@÷µ€&Ÿë¶"¼ĶÝÕ4Ÿ×Šçktt9ó@9¿q²4±|‡i‰4†âP9+Êû?@ŠXYÇ;÷Sk®±rh©]âa±Öâä¦Ë|+)gŸÄQ®*õûY­ZC‡,!õåÙReÛ÷`ÌKz!—i¤rÎÒBž¬é,u¨§ŠNÊÒEÊÒL8Y²Ptî®»]ÓPrVˆ"(H0aÄX+¬ÔZ:mR€:Ü"Ñœé"#þ?ºÑ]¾7'9ãü¡*QP“q!SI,³1-úžpþ¶Ñ«tû8-%Aj2ëTÏåBõ’XG9+”“×UMÝJÊ©Z¬8Kkç"o‡§dyH& ïä×`=:!YA;•/ÏÒõ)Á¡MBÙÚFUEÈÒÄŽÁL~+—`€nn’iÛ±ýÖ®] ³Ë„öeï‡`ï¶Rëóf훧®…\±v<O`“a§
+¹ª¿0æo=²Ÿ·¾p&$Âüdœˆ’I­¦HY
+)#©%+xvJ
+!È·O%¤Z9Xþ¿ÈªüOU9ñ:‘ð¦|²¹0ۍ’ñýmÉ´bk	 Ç°ž|~å#¥ùôfáTíákèÓt®|Àh fú Õ§@Þ?&¾>À	l˃ÛxFÛàXPñ2-áÚ_fë±7¾]kvØÛAÞm]‡#y¦®šáà:Ôä±7æ°ó³þÌMés\…Á²ÙÑw 3_{Óäô¦¡F³†úš€ÿ´´Í=i–Ç•
+ðü.íâxìC½µø*R
+¾@Ë#JᮢáÔ¡âÄš¡Æcs
+zTËvzX<âní†xp†ù+×=´à‰Íœ‚_°»ÆåKÛ㥞ÕŒ£qï=WK\ß+"RA³
+ŠÃNÀöh.×{cû‰½…9¤²Hv ËH$Wç
+Ì»vq¼D‡d	Zº.¦,&úÞøg@ïùÚŠu{]¶ÊÒŸÚû–àÐ>£uòÊ$ð–ø@¹½µ~{ÀŽ}x «OeÅ"¬”Ò,O§æôýÛ÷¯}»í–ÏU¨/ÀÃìºdì4‹R¤2å»LΏö¨ˆèž+Àuë¿aî³G.£[‡ƒ·¾@[è,ÄØsÚ<õtJr!²«nDÁ…‹ð¤92R“7(hìÌæF”^öSÀãþYbàA- µ­[3Ôø<B¾•ÐZ?ùO(ƒ¿Aü»\’…"¬ù"`ÒMø#H>å@sÙý £¯ß>¸‡V?©¡QoˆËPžÑ Ùa°^(X¥9õŸ¹	Ëñw7ÑŠo˜»½¥Œ?=ìÃ
+êß°½²
 endstream
 endobj
-9303 0 obj <<
+9292 0 obj <<
 /Type /Page
-/Contents 9304 0 R
-/Resources 9302 0 R
+/Contents 9293 0 R
+/Resources 9291 0 R
 /MediaBox [0 0 612 792]
-/Parent 9306 0 R
+/Parent 9295 0 R
 >> endobj
-9305 0 obj <<
-/D [9303 0 R /XYZ 151.701 685.529 null]
+9294 0 obj <<
+/D [9292 0 R /XYZ 151.701 685.529 null]
 >> endobj
-1882 0 obj <<
-/D [9303 0 R /XYZ 151.701 660.623 null]
->> endobj
-5690 0 obj <<
-/D [9303 0 R /XYZ 151.701 641.3 null]
->> endobj
-9302 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F59 4373 0 R /F15 3700 0 R /F51 3736 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R /F85 5513 0 R >>
+9291 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F51 3736 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R /F85 5513 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9310 0 obj <<
-/Length 1831      
+9299 0 obj <<
+/Length 1996      
 /Filter /FlateDecode
 >>
 stream
-xÚ­WëoÛ6ÿî¿BTjUE=ö­ÍÚ":d‹ƒHû±èXˆž(ÅËþú݃²%Gël_¤ãñx$ïñ»£ï<8¾óqñn½xó!ÄË?pÖ['ð}/ÍB'N3Of‘³Î;÷Foº¢©—ßÖŸH<õ²8ŽP<Ì<¤}–COxËUàÇÂ}›?©z£óåJÈȽlê¯~=ô­:i’>lçe~F; “Hº")Pjñ~½ø} „G§“žΦZÜ}óæ>9¾'²Ô9då™z±Dm¥s³øeáoÈñÆG¥QæѵpûwÏxðØÍõVõe÷Fqè>/ÃÔmzœJ܍ªY¦©K+mtódÓ햁«ÁnËs_}é?Ö
-j8€1dÀìÏWŸß3Õ-ÃÄ}Þ/WðÓ†Õ|
-DÔ*Zã],W2àŒ:/ê4ÜhOF:WÂår¼î‚9•VµA6Ú©Ž™—·×7LåÍq_©+ѵϖhø¿ïÚ'üèvÚéŠ*4 ²öÊÖf§Gç•|\T)„Ài$"wߤ¼Ó-Ïô<lú
-þw:÷5aâÅ"a=ë]e±;üUY2qtêÁ#•afïƒ[x4ptgx>$Ð\onT…Â÷Šy›†‡0‚˜w¼ú‰8¼´æF‰ÖŠR«õ^µxFÝã¢g¦¿uÎ'%ÑÈÝ”…æD¨}÷°+6G;^±S'g1‡iÐÓò8oëK«³äHØ€
-í¶E½š‹6Ӂºd•¤™{µá(;Y<ŠR®ÁÅh˜¬MGWdýï¹ùñ¡mú:gu:mÛ´ãñÔ=°é;W
-l3s@•?-%†$ÃP¼p òÆÎÂ4¤kŠjO)
-Óæ±Ø3Åa
-D«+UÔä[ -Hú
-U…#–i¶Ã"ˆÉ™³q@«=XÂc4'¼LÊA	Äeâ%™!«„m ¬ÜŸÀe”!qâÞîËFáíb€Ýí0¥77Vçè@§^˜Dã´A%Æâ;R@<³i‹û¯ÛµZ³ìVUEY(»}Å[Â]rŒ@°/{«¶©íšZXpHJbX'Ö8Í1æ˜ÉŒpŒW‚VÃÌJÙ,Á§¢…”~nAý
-v`Ø
-Z; ;|ïË‚*ø÷F[ÜáóÍê×ëËÕ¼Yä<°ÂlºEaoìýàÈ“òt’œ3AÔXxDáhX<;®â)£[«‡Çˆ7-ï,¨0Ù‚œMꢈ¡„õø¯Ó±\åB£Aî‡9UÒ‹äQâÛ\l¦žÒav X"=LðÀý°jZ>®½R^˜Mo‡-Œùˆ7 at 9™¤af®ÁVA{	dØ$ĺMöò<äâ)D"ƒör(\±;†àï²­à¢o¦­´œÂ8ÎŒ`Ü2”ÝÁÊÍ0L”¦\u‘ øŒ Ž¹"#ë©PL`
-ºÆÀh
-ˆÆáWõ«ë‹‡htª$	ä±V¬-ÄÛê–I4©Ý€ú³¡±rîhú’1eCÐ5sn<Èe	ýAEîéÇîõ¤b"ç¦ß[Ç´ÝÅùN(@ëÇŒ°Dj0ÜñcL¹Þi,B8Ê>ŠÒîÉ@mЊŒû¡U}‘wÔÒI6‹†òÂCŠ6ü[´”r‚Ì¡cKi«<_W¡Ä)x<
->TPŸ­8ß\‘>fþ#B†“d=‹é±+IΝwÎHY»¦6)ݏ·W¯‘äé·9ÄWÎãëqj¡è—âOÕæ³ð##OÆÁ ñq)ÑòÕ¶E¢©VjE©t0+°6w@3’ž¥ƒ¦‘O¼ïÚ«»'ƒôÿ±
-4ŠwÇ`:.Ã0ânÝŒÚÈS¼i9	6'Ö«ãz¶ ;Üþ|õÛê@ÉÝ>‚jC	ôL@ÏÇð¿·‚½Ï6Öæ«ŠÑ5±P'¸Û†´,yhtgKúÙùhÿ0	Ï[ÊcÊä,ëpRí©¡ÃIÚXöí~-H[w‘cTEýbHÑñg^¬aì{axŒ«M¿7*ÏÁ‘"GÎbœÁ«5>FtTǍ]:ˆøhRœÛ ’٪ǝŽ	±€ æ—¨ÓËZz„"0ÇÍÐ$+£tKî;$µ°ÜDP‘¼mPÛÁbŠEÀ(&
-ÈwˆŽ¥Ñc·FõOE®‡É-ÿOP=œ±Ñƒ.óæ<qÖÔý³'ú£çØÈÁÐSÐaB*Šô§nÊ>A­ îTQ2]*nFlIŠßb¶Í‡^ÆwßõOl+ ™‡~ŒÂÀžmúÈvzK‰äè%¤9ˆ#ÁU¬„m¨¢à”y†VÅ4÷‚^«{uTÄZâ³wåXqeΛÓ.úFµöÝ	fè(y6]ß/n3Řáÿ~½øÔ¼
+xÚ¥ÙŽÛ6ðÝ_!,
+TbE"E}KÒ[ Ŷë -Ò<p-z­®®ŠÒºé×wÊ–·EÑkf8œç¢CïѽïV¯·«—ß
+á¥Až†‘·Ý{QY.¼$Ë•ÇÞ¶ð>ø÷f7”m³þ¸ýžØ³ O’ÙE„À2ŸA¬7Q˜HÿUñ¬›)Ö©bÿ¶LU•¦˜p×—ÍP6ŒËáàèk‘û­îw}Ù9Þ¯ûòÙôn‘áØT­.Ø‚ÑAæd¿8ÕdQ¬$r­¾Ù®~_E@æÙU ¥·«W>†^kß{a óÌ;gíI•‰Bi•w¿úqÎý©¹â“Ð8È9¨~{(íz#òÄŸ¾ºªø´™ßŽŒ4ëÈ7à8ý%rå-/<5-ò›¨fp„ƒaàÍ»»û—÷ºFæÍ´]Ë(` ‰i¸‰ìz¤üɸפä]çÛD2PqÎGø5ŒâÊ€õq&a»étF"ö€»>1ü¾l
+6•XcW•†UÙ덡<”»µHýï8Ògü1LaäôŒpïDêÌ
+O‘ú;p¢S[6›¹ÑŠm¶p˜B1Írÿv¼q~öxg>œ‚¦@Ǥþ`zc:!Óèû w¸ùé±oǦ`q%^Ú¾íkM¹A4ý@¶ãÀxÝ‚š+NÕÅóZA0¸‰¢Ï.ióËz$åÛ²îðì¸lŸÊŽ!
+zSë²á´ŠBßšÕ †‚‰–yÚý´	bòŠmtÒƒîÀgX”zQäJ	t`—1dý)åa/hø?'j’úï:JQ€ÿ­-jõëD.rDŠ$‘œg
+±®ð ’ù…±PØÃÆ2m8ôÆ0ï^×eUj§¾f•p”ãO¦ûÕèĶÛÓ˜#Ë
+q)ꃗ9bÁ×ütº:±œ…+úC‰µvI‚§"ê–±?vp-è#T'_„JS–a+i¯[I… ~4ëe
+ÖüŽÖ8âíý槻7›Ô±Û˜å2°D¾ÔBQ8Z§aœnò,<[äæç´,Ÿl‹§]Ò§ OÁ‘¯yÉšÞÉaËMÏš% *tE>_ÔZ™@Yžjü<ÎÀ|y2烠JD<ñ}qM”
+buâøx-8³ <Ë°(`V`‚Gþ·k(BmÏæº#¥ÝÖrÜÎ_(xS)'—´L,°M”&A
+¶Œ1®Ý¶D‡HusɲD"”'»óšôCKÎ…t®mvÜjYÆqeVÆA;
+ŽoY€'Ã9bâƒÕ 1ÔcPV3é¹Ô`ºÃÈhK
+.Ä_6_ÞõX¹½A¯S'I!“fi”¼½éDŸ:Ôô§ní} å7\Ô˜W€¬ÏÚñ¦ÒpyÐcà˜aBƒÊ¹c"å~ìܽôÃÍ¥"d 
+&\a	:÷`8âÆxr{0Ø„pýœ}€ËÊéÆd@÷!¬ùÃE°›Æ±ÏòŽÆ$Å^1Ð^¥hï+— Î$SÈl¥\“w³ÙI œCñeì¡€æbÇ9ö®˜zÎü¯N„Éž2‘ËÚŽI/6]NcNY»¥1Iÿ»w·/’tÓ¯
+¯‚ñ»yf!ëûòOÝ7WˏŠ•D“t¬k­Øì{Úz£7”IG»¯áp7¨3c„q6IšÝIð>Áî¨(s^IþŸW`P¬)MÑd.uC+r“‘çxÙsìΤÇý|A~x÷ÃíÏ›#åvÿ¢-M$03¼Œaõ_àŽó¿}€­ù¶æÚšºB'y؆¬¬µfpýÂ>П"ËÁX¡„:Í(B¥I‡‹º£yI!pd
+?”k»H±º¦ñKH”“ùWA"	!Naµ;«‹îQ
+¸Ç+q˜äðJN=À 5ðÜB„>^æ/Õ6èd®ëñ(…8U, hø%hÇãÀ3º×4³*k<ÑLCÒ©3*¿Â á¹CÑËCõ(ÌÛ¥ËZ„r1€\-D.ÞØ^¸X:fv’þ\fZÜó÷\©q„³.zðÊ‚k7.£óßo"
+aÜ8Ýû8šF
+2FPK¤/
+S£Q™Ñº¬®4	³
+®#Ä/17åÃ(ú¯Ç—Žnˆ•ËÓ8Faàl›;ÏüÉNO)™ž.	aâXr«@
+5\²ŸàU3ÌӁ¤Çj§O‚XJrñªœócYùÇ©œû܍îÝ«Ü0Pò솱ŸÜvöÆðƉâ鍓I$Îÿk¸'Îùo
+|.þÖ@Âùo
+Äøo
+¢¯e8ÿ[i‡_éE~}Ý®áÁ4ÿ§c)›iþ#¥ïqŻ˔ßp†0ò´Às„’$K\…`ìø«y{@1ÖÝ
+SOžvMm_9N_Ú-•Ö‘œ Ë/#p=W‚ÞéÇ
+ׄî45avey®ÐßÚ—¶ó?2^ð"Œ‰Tw\,L‘Ï¥zÐ.¥]ÝpYõ7o³_hìÇ¿BÈÂòñàd!ÚŠ€h…/9t,~]r at 8Ñ!½†ˆ³Ö=¨!åa:UFHÓ$θcár30=êÙµcå´NÌ+…._îÛªX\Ó÷›íê/êu#p
 endstream
 endobj
-9309 0 obj <<
+9298 0 obj <<
 /Type /Page
-/Contents 9310 0 R
-/Resources 9308 0 R
+/Contents 9299 0 R
+/Resources 9297 0 R
 /MediaBox [0 0 612 792]
-/Parent 9306 0 R
-/Annots [ 9307 0 R 9313 0 R ]
+/Parent 9295 0 R
+/Annots [ 9296 0 R 9302 0 R ]
 >> endobj
-9307 0 obj <<
+9296 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [400.466 364.104 460.543 377.005]
+/Rect [400.466 456.667 460.543 469.569]
 /Subtype /Link
 /A << /S /GoTo /D (classicalprinting) >>
 >> endobj
-9313 0 obj <<
+9302 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [99.895 351.16 238.596 362.85]
+/Rect [99.895 443.724 238.596 455.413]
 /Subtype /Link
 /A << /S /GoTo /D (classicalprinting) >>
 >> endobj
-9311 0 obj <<
-/D [9309 0 R /XYZ 100.892 685.529 null]
+9300 0 obj <<
+/D [9298 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1886 0 obj <<
-/D [9309 0 R /XYZ 100.892 508.452 null]
+/D [9298 0 R /XYZ 100.892 579.833 null]
 >> endobj
-9312 0 obj <<
-/D [9309 0 R /XYZ 100.892 474.975 null]
+9301 0 obj <<
+/D [9298 0 R /XYZ 100.892 553.416 null]
 >> endobj
-9308 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R /F96 8585 0 R /F51 3736 0 R >>
+1890 0 obj <<
+/D [9298 0 R /XYZ 100.892 229.956 null]
+>> endobj
+9303 0 obj <<
+/D [9298 0 R /XYZ 100.892 189.497 null]
+>> endobj
+9297 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R /F96 8572 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9316 0 obj <<
-/Length 2025      
+9306 0 obj <<
+/Length 1967      
 /Filter /FlateDecode
 >>
 stream
-xÚ½XK“Ûƾï¯@éb°J„ñ„..G²¹E©¥JIY>̳äx5,³þõéHbCï)ågº§1~|ÝÍ4ÚEiôÓÍ_67ßþX¦Q–&uZgÑæ>ÊÊ,©Ò,Z­ë¤¬U´i¢_bUªÅ¯›Ÿ¿ý1Ï£uR¯V
-Eót¤E;‘ÐÛOoË¢TñGoûÁö;¦nÇÃfiìðã‡Å2SY¿ÝëÃ`<Ëä9îóÃææë
-nWº¸I™E´ín~ù5Xû9J“¢^GG’좢\'«²„yÝÞüó&½|^VEYžÔe¦fÏSuBÏÀ›çy¢àVYšÆß7ºßšf±Tk¿ïÓ¶vgúç—!u´Ã^øø4†Û­·‘}çí#¼Þ ËJEˬHJUó¡ï@Y|ì[§VnV^b9}”×I^üÑçźˆ
-èl]ƽ[äU|dâaFí/‰ÁḊƒx2xÔ¼þ%+T3v‡WÌ=Àù:¦¯ü#’Æ¿F]ÇÃ^Ë’
-Â’\,‹'q9¥Qéüõî bŽÛ ÒE1;ÈßÜ-(º£×¸t|õš[Cô#ûÈ{su—Fš%Ff»q‹ãÞ4Étµ<MÖÅš¯öoÔ±Áˆiwv·—½ì
-¹ÌP«8’Vq‚ZÅ‘Ã gvðT‹p§=ù<G´½á	OLË•ªâ
-¾—½ÑÁõ‰­[9øŽTf®)µÓ½½wmó†‚iŠˆðl᫤X©ù›¿¤Yõ죹7òt
-õ¿óµ§«,‹ª†G %GÏ/¹˜<â¢fõ‹Üƹ%L:Çëûö‰aЃ
-ƒÝ†7‹eY¬âÏ{Ë–ãõ“ÚØæšZ0Ö
-9¨¹ã[<!•Ç½3á;P,°>“c#—-˜ ·Â/ÙÝعá3f²s¡\°¿ÏÝ3G3	^L'T§
-ÑG¸v[vã²üßóyéÛ@zpiP'†ÓnEo„cËtzmée9‚†v«[^Ùƒ	É xlZÅF?¦áè+>]	"ª”ª"Cašø}g.£’¿ªØ€>	‰W$J¿{Ñ™—â˜ÿOoÎ×'oFbÍjC®d†ÉÁñ:a 2ƃ|Àä…±ü::vøâ)¦{ƒn‘ÇŸ c‹„=:Êôî*ržƒMßµ2£p‚q~
-‚Ê‹ÀL$8œ‘<1oámÌ	£?èð­t;ûˆ¶1=“­í¬œtòÀk."kÖ‘G1îþ©6UY†6­¡:xóh݈ ›å ìûšÝ?L"â£0dñŽ%ÁØõ°nåcÍCgBàÝ7ÂÂýÆ00ûèöféüðûwVxß{×]¨¾ˆ·ñzžÊF;Û÷t¾6ó:¿ˆ 8Bj¨Mþ# á­é·”›q}p§tapEæö»v”mÃÖÓ‡WL9oá‘z8mDZùC“S<X«ÇnÌݸÛMJ§„&/í‡ Q{))
-<?lÎe#€ïM+XŇ6æ!è¹Jòª˜ë²:VGªÈãÓXîàt«{r˜Ÿ}ƒ4CŸ5Ü ÷NIð 5¡ä¹rƒÒ¢Ri¼Y at Uêd¯Ñ¶Íl«³øÕÒ©èsJ‰K=ä7_GëÍ„ïTæåä ß´-‹Ï)¡Pä…R´™cx·ï™uÎÀ—¶"ÏOÁxƒì¥l;9)Ð>¦?㦝нÑÃèM¸ZJ
-Mëê«–OÌ°2àt”Ua¾ud<õÓXà\'÷cßèIc”{é3@æ]Òö½óÌþlûf:òʃ	lŠ´Š?}xÿ/þô2%£52²YÏ‹š¥¨Y±|ÉJ.¹–Ú ¢y˜¡éZˆö `ù)‡Éög­Ãv–¸J¾æÉz¯ÕúæJæŒ~f°	›©‘Ðéš ¿Ë ¿+sÄ-8³PØ¡ž;»$“Þî§wïáÛìÛ®V¢XèÜŽt)à<ïãÇÒ¢Þ+ºÊ*Q•4“Ìù¶„D˜LT6³	rRN°âzÃ´ 2ÈÈ襕‘GµP¥
-°Ä)&ÜtÁ9ÞùåÁËfÙT.·¼æ5²OSàPØžžÊc$Æ@8©ˆe¹élE¹×ÃÄê.wÐwã±€;ªÊ ü¬l>ƒG¸Ç;9\WL ç·Wñ½ÕÈvAº?ñ%a79\à"ŒOÝǸøŒ„zp/7~EY£ï}3ð”s ãVY8îýÉwWiü\…r=g=‚ ŏá9¾BËF§‘¿™g'äÓ+aò¬<Y+ŸbûôRQŽMîr
-(ò=
-þé*
-êùé*8ßr÷%) * ÿ¢‚Á¾A?Ȑ£llÏ}+v"Þ¸v,A.^þñß ƒ˜.gÑ"Wø·Ñàñ…Ì¡¸ô
-K°Ïäóf(??
-—øi	½õ܉‚û0¥ïõq߇+˜u
-²™e(D¹oâZ#0`’]•Øú´½	ñ.þÞ—´L!xÓi/À°7­œrJð
-ÿˆrRÀ'Ù)æÁý`xàÕL€}p	;HfyÍÿÂ||û7\QϏGa>gÓñ(øWsÄWµ‹ŒŸ7KzW&‹r±ÖðÕh—¹ƒ§‘â¥u=rŠ(ÒÍÊÏiüasó_{4J¿
+xÚ½X[“Û¶~ß_¡ÉKå™XÑ]v_:mÚô2mºgÖ™œ3M¸m³+‰)e»ýõÅM²¼uût¦/‚H @ÇÁ!ˆƒoo¾ÚݼzSÄAGÛx›»}ITÅIPn¶Q±Íƒ]üæE¾úu÷ë7il¢mYæ(šÆ›(Î؉„^¿»½[­³"oéÓ˜ºO'Å¡]ÁVë$OªðõQíX&Mqÿ›ov7opC0iaIeYPw7¿ü
+ÌýÄQ¶Ý$ÙY±‰Ê¢€qÜÝüç&–ãÅÇL.ŽY‚íe”ù6¢ãà	>ÄIEvL_½IŠ‹U4œü“Z¥›ðé~µ††ƒTÛð	YvtLñ”õžÉGœT=þÂ,zàAgyþØ>1Ãj0~0µÿ|µ.²2|45Šyþ—M+´(mLƒ‡ +×Iù–­=Z”zD‹²°c+žJÓ:hÿÅjëýQ
+Ìk«Py&†£æ•tæOø£,cf£ÅrÞü!<»gŽbò7{OªYC&÷á—Öl,©ËŠâ¯ê9™I7öE'ö„cvÃî­E<‹¶t²(Éa<™Zµ<sÒý£2Ø´
+µzðLƒê+·;›açÌsñSE~ÊàŽôI¹¡Ó³åÀãUGгèpfdWñ,,/ƒy-q¹NË(Û$ÿ—`N7s0#±ákC®ò䏆IŒ`œ÷z`Æx’L.œ…äÇÑr¬ÀŠ'?èîsŒŠ4|çµó,âáúÛ†ez;\	sÊey¨î[Q2Áw@vÖ‰ ¡ç‘íkâQ<1ï¸6æøѝ”÷xTÒÄŸƒù„®Ñ=“­éŒhšðZ„Èœ±PMô¯»4OtiÅø„ÔÉéOÆŽ©4ìõÀá‡^w“ˆ„(|’ðÀ’àkô2ÎY¬øÓiïyBõ°p¿ÑÌž¬ù«S^[wP= Hðw¶[Ü|Ö­V=eŸƒé{H¹ÿ2ÓmºÈ 8?¶Y¨ÈpF÷5•Aœç<	-SÀ0P’,¿oGÙÖ×NëÞ¿`Ê:‡TüÝÊߘhqà¬VâºÑ÷ãá0]êe½@`rÏNPð´çê
+„‘û~»ãÍÐTÎ×ëVŠ•6úáÜs¥U&÷²y»£ö„Y¬j=kÕcŠÃø4¡øŒþ4
+rï¥j‘œÌDb‘ùH¦HíˆVë*ÃÝj“ãÑ^£i›‹­Îâ×î·ÓZšš”ê!œ !  Ò鏣qzBwÿÙÅ Ÿµ-‹AÌå3!K3H7rIÊ¡ˆn×3ë\	€/UšÎ¹éysìŸJ=:lRJ )}t†M3•Ÿ½VÃ贏¦M—þ“oým[Öà™aä;@ÐQM…qm;¨wÆÛžilðëm'û±oÔtcTyi ó‰‚¢½·ŽÙïMßL*¯˜°&‹«ðÝÛïÿËK—½‘ÏzžT,ÝhH5sY‰‘é€!7#t]9à r?U0Ùþ|ë°ƒ®Ù9»ï¥ÀZß\)ü‚ÑÏ<6a3õ"’›CÄmyRIm‹"Eà¥(­6¬4M£<JÀÚ$ŽÃo¿þÖ–°?n[–r³Ð˜?’QÀ¹EÊúáŽî†y,-÷Ë*/°Tfi'¢ò­>[KP„Å$O.œ‚œ˜ËÌØ^3]€r2:K¥XR-4i¡Lq‰F_ gÝúäd³dj׃]_s‡LÃÑrˆèk<çæ‰ÑPæˆÄ2Ýt¦‡–Ü©abu˝ õí8a, O^%€~F6Ÿ¾ƒC¼ÇG9˜«'€óóÝ•úxjÕ ¢O6O.i7õ8ÜÞ"ŒkÙ秗‘T÷ö2É¥(þo…;†^±ÅÐûlà!×4@ÆZYø=º9tË8ü
+L¡RÄùAòGóO¡d£ùËk.«òé”0x֝¬‘¥øvú§–\C¯µÞ Š|	¾€v2%‡n~2Ç5?½¤xBä/|5¨±)pJ­eû…,¾CœpíX‚"œ^j¸þÒ!‡¥,™¥9ô¼LC¼w”x0†W  ¥kX‚#&½|	¥ç“áŸÌ3¡jǯPâ(¦<ǽªöÝßC+æØ…g(CùÕĽ& Ç"[øði%yo	ðÎX‚¼qCî4ºSNpá¨[Ñ2xÙXi	`I2§<„PxÕ\|°ƒTÌ–MÞ¾þgòçêQ˜ÕãhR‚ßéG<U»Jøxð¦ãpgò°*Jȵ†M£].84/­•ì-r‘WàugÖYÖ‹b^$ÔsM€m!òî¥}ä1ù€Aµ˜°³H'ìÖ£it+â#=hpt¢'5Ž–¥ðŠU­ê#þK€èÁ.¼…{ùúGª‚x/yfçíD1Ä®áÛ.ÚÞ™º@’<ZžÇs;Kkykãx‚!§q%ŸÈ½"™—bÒåâ
+™áØ«º&/ŸàXƒôF õZq!öZËNÙ%Ü%70\$ÈZfˆŠ¦ÑWÛ´çÉ!í6>¶´ƒ§ü>ÃzÄíéýŠ—~ù왾ßìnþµ%	
 endstream
 endobj
-9315 0 obj <<
+9305 0 obj <<
 /Type /Page
-/Contents 9316 0 R
-/Resources 9314 0 R
+/Contents 9306 0 R
+/Resources 9304 0 R
 /MediaBox [0 0 612 792]
-/Parent 9306 0 R
+/Parent 9295 0 R
 >> endobj
-9317 0 obj <<
-/D [9315 0 R /XYZ 151.701 685.529 null]
+9307 0 obj <<
+/D [9305 0 R /XYZ 151.701 685.529 null]
 >> endobj
-1890 0 obj <<
-/D [9315 0 R /XYZ 151.701 660.623 null]
->> endobj
-9318 0 obj <<
-/D [9315 0 R /XYZ 151.701 627.66 null]
->> endobj
 1894 0 obj <<
-/D [9315 0 R /XYZ 151.701 268.569 null]
+/D [9305 0 R /XYZ 151.701 339.397 null]
 >> endobj
-9319 0 obj <<
-/D [9315 0 R /XYZ 151.701 241.891 null]
+9308 0 obj <<
+/D [9305 0 R /XYZ 151.701 307.176 null]
 >> endobj
-9314 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F51 3736 0 R >>
+9304 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F51 3736 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9324 0 obj <<
-/Length 2165      
+9313 0 obj <<
+/Length 2244      
 /Filter /FlateDecode
 >>
 stream
-xÚ¥X[oÜÆ~÷¯XôåhH•F£ÛS‘ǁ‹¦qaIôA–Æ^5ºìÑh½uýùHŽÖZwè‹4CRïT¸º_…«7g¯nÎ~¼Pj•EF«›»U†A^¨UšARèÕM½úä]›jj†~ýÇÍÏLžEšj"WE‚::¥¬ý(LcïeýPö•©×~œhﲟLÛ6÷¦Ÿp56ýÔô÷²Û7ÓÆÁתð;]Wc³u´çcó`F·ˆ`ß·CY‹<I¡ƒ",XþëL'³D:IˆêìõÍÙÿÎ"@A¼¸cÄñªêÎ>ý®jà~^…A\ä«=Sv«8Ƀ4!níêúì·³p©·(Y|`ª‹€•CÇ[Ó5þð9ŒÒª)Ûµ¯“ÈûÅÚNe_—cmØíZåÞ#­Ö¾Ê<ú!Ü´1²è YRìöMmÚGYï,é™VÛòÞQ×Ʋ
-Ý ¶ÅA¢‘¬-ûûˆ-Ô
-…~“ðêü‹wô ˜Ï`K^Ä¡g§¦mÖ•ýr>.v¹·»+«i7šÑ
-ý~38þ¸ô8ð· ƒu3
-b ÏöýK‘dš)uꍦ´CoeÓ•Nc´!å‰¨o×—Ue¶SyÛA·Mezë6wÆ8wƒc¼³â‡Xná•Äx2£o:Z9ÞumêSj¼"š¥»Æ±×°bÀb;®#+¢}!X^–Tkö‰è®Q þe«(
-Š$QäV8/ÖA§‹S`	wóÞ7}=¬aª=])Í\ ðIؽ9¿äUêÎèõÛwÈ‘ïâ•JerÈeê"uüÉ>Ŀȼwôú…¬Ù-‰
-zìÊIÖÕÀê{ !ßcâ?‡[!h¬¼ë¡wŸÏ®OkÇ3[ÚÁÑãfŽipÂUÞájïíµ¼$'À;‡Ø¶åD;pIÉ‹ínRr´á8܏e×±+`S>ÝŒ ‰G—&Œøè	稻e÷,˜y%½àU»¦ü¦àË+2Á%ÖÂÙÛ
-j^›8±¬šA¬9jŠXÛ/•VÞÛrœÜÉýIAe8,!杼ÅqÁZ#@3YÓÎÈAÞ·¥uT ï€ÕXǪ(
-Þ͆M2(¸jt’{3j¿²'\.b_ؘSBWC×±ke
-ñÞ ¿jþ2‹ ¸aÇÞ”D8€lf‚{4 ÎÌnÇw}=–Â{ÙmÎiV9¸BØAB Òq´i
-«
-lýj×±™u«X_–qTÌ‹ýåÉ{Pö G*hº<ž¿cƒãÌ=[ÝZ³Oœ˜(T¨èù‰[:ªä§O¨Ó Ï‚’ÏÂTÒ—Ÿå9Ž²ÍòÄì8”IY¾R¨©ZÅïSx“Üù»Üc ’(¢*IZd깂6Áð5´Dð{¨‘]DžO«zNÇä0X÷\5u&®ÉLvÓv7	ö~5¾]í‚„E~t…ÖôàDA€Tÿ²"̦AS¥!ôû×—ï?¾‘oI—ï7”OõqÇD6×ÆÍ¥u:ºœè´£Ë½7†pJLŠ2)P$?Ýw€¡¦>Òqd¬XÍÕ®*wÜD )‚@½Ÿ4¦¸KP‚ƒ»fr÷·Ž{$Œž Ä÷”J{[Î6§Ôï‚‘†ëDÕ$I½?Ñ–òi!UžŽkâs:GÖ;Ð!_`m‡2“FÈNÄtWº4cϯÈ(uU+p7±>TH‰„¥®wå@•BDÎF­­É§\#ÇÕTÈñ-û!Яûë™	óÖLåE3J>‚òí"ð7Çâ¹P¢ÏÑXy‹dc9–éÖµoj.æB¼(¼ÿtë\’-ŽJ=ñE¡qáå lJ”§˜û®2šŠ³wuJϳâ¨Y’&ÃuHy¾ìÐÃ#+ùY%w:øu˜ÌÜö?5ýèp²h¥2ä8]?&‚ Œ”VB²XÒ}é ?^vÑê|ÀðÛåÏ\ý[2u4è$HÐ^Åa‚Üçz¹Žs¨A»&§K*"ÈÕ1א¢éN-í¥Þ¨ÒÐ{‰ÆцŒ¨ªÍ`ÍÉ€­“£å¥|Ç‹EÜÑ^,Åö*JgɈP^sÑz!ü‰£ïXn:µ½…,ÈÁ_]Ÿû¿ÿzùÁ§î¢æ{圶›ZˆÉi9çaó¥üÄ™i%óÞ–•à¨u¡÷y•”îO6@çœ]Æ=é7V0Ȭ…RÆÓØG;¡Ç¡¸ƒrYÏÿq•5?ª¬Qš£(ë¹FVrQ#œ)“6¦¿o¤¹yî+þÌäHL$dëˆSÇQ§‡s¯Î/NqV:H‹l&ª
-B›
-Â!ÄœUh(‘Ž	PêaÛð§s!ý|}¶Ž©=Çk¸ŽŠ@%ña¸^2A0Bf¥Š È’o1¹ÂIHÏ™h°/tòï˜Ì×ù&ϯó*„…C7mÝlœÌ_e·•„§)ÜI·ó‡Õ'&¹hîw£#Ç(ý“_R¿ÓîìŸÑ^ë:ÑÒYõ¸Žc—š‘³šFï¿{Ý(JA+#&ÿØáÔ-å€`ÿú‡Ã8˜fOóè›ß/eB}UÚ¦²ß9›ª|>PeÅœ§Bï©.»¿(oáüƒP\ñîù¹
-ƒü" øìá‡ôʈ&ÔN5î[IÕ àÀî¨ÆÞ´”Âìó6ÌÕ$™Eæ‹òâo\†¥ý"à$­КÑUaä $‹½×nû(ø£ñ• ÜÏdôÓ„-µÇ¶‘?"ÙüëƒÈd°ûJyÐ:ñ ÜHÖœªõò7‰À¥(pÿzÜ•ŽÓ®Çwí¡¹„̝ü»¢4Ü]‚Ñóß'„tãSM•3h:rôùÄó0¨Q
+xÚ¥XKsÛF¾ëWà¶`•‰ ƒ÷iË^Y*¥Ö±S’Ëv99@ÀD JQ~ý~ý HÊT*©½pÝ===ýnúÎÚñë‹7w?\ã¤^žús·rß÷²Ü8I–{q9w•óÕ½µåXwíâ×»™<óò$‰ˆÜäžj_èŒñ"o±ü$t_WE[Új±ãȽiGÛ4õÚ¶£ >ôu;ÖíZ¾ëq£ð…ÉÝno˾Þ)íe_?Ø^÷<¶MWT"OìCh/÷s–?Ä>âI¢(Ž‰êâíÝÅï  >zcì…¡Sn/¾þê;p?:¾æ™óÈ”['Œ3/‰‰[ãÜ^ü|áë-H ðò86'Š‹r•3+Ä@#ÀºŸê¶êaà>xK’껆Wòu}yûÄ-ÚJ at oß]Ƀøø¾³4©dzÉMê<Qþ&þyê¾_îí+ُ+T«®ß£ìKØôôAÈÄLü[w/õ kÕµzüžhŸd¯<Swc|d+=^¦L=z‰„^å"ò{\ù‘ûîVÖÑ	ð^»¦IbM£›Ý®©Ë‚½RûnÝÛ-nÀ¦8< ±K¯&Ä®ûsRUõ°[,q 
+¾'uZ2÷~_7ã²nøúYŠà¬áîÝ5¯ìC]ZÙϪY¥RÿâÇ>̍%PFÅ ë®èG½¹­ÎÉ‚Òâ–0„˜+YÅaÎZ#@=¶™¬÷Å T ß/ª”U‹¸âܽ۰ÍAWv½U¾ŠÚñ°
+\ïPÄ6öXèXd.»í–]+5î¾­ñƒˆ¦ôÖíÙہ‚ÈV&È©G VÖ/~諶NÝGùÚÕå¸ï-‡U®•Ü! Ѝr´EŒÖ±ñËýÖŠÉM0ùqð¥™ù”_Øýí†²_ÄÐÿ´ç‚6F^ÊÂéÛw>²Ø«#Vã™cƒ„<¿qGWükûsF‰—¥³ ärs˜’ãÁÞi–ÁÞ¶·Ð¼%GLOC™”µ4)02Ï"eŽo<%—‡t@…@”‰%î0BÏE_ÕZÁð;"‰0à5PÊÜ%íªE  òì[[ÉvMf²wûQ8°ûðÅøW½&ÏNž`Ãêœ(BÔ®’0›QLŠÐŸ¾ÜÞ|úr-gI™Ÿ6”Oõe‘…D>n­š›A*]Ft‘Òeîµe+œ“¢,
+ŒÛ[$?2…bŸf‹á‰®#k…Ù˜µ]{
+n"Œ@ v	§´¶¸&(ÁÁÈÛzÔ÷Ê‹]È#—Pâû}dã’]1™œR¿#96ìÖ
+ˆªIœ¸¿¡‹àË|ª<[®ˆÏ¾Û*Y« 9_`?t{$<Ø%	œˆéž uiÂ*Ïg"Nꔺ\°YƧDÂRWû’R 
+!"_k¬ìÉ¥wK·rñ R|ÃnôÛv£-aÞÙ±¸ª§£ä"(ßi„¿;/ÕxöˆzUDCèØaαäH÷äO²g+ñQåýÞ­3Én´9©õÄ…FÃK/ tJ”ç˜/µ2Ú’Ówyî%“æBDtžä¥,;n”Ðs!--©MBZá“?u£Ú´C“–x&
+œ0J½ÔP“†Îó¡8ÚR*à‡›mà\vhÚ~žQˉéòÀ•[9l2gÅ^lR'D®Ñ屌wåPB¨†"#‰ˆ +*cÚŽ¢nN
+}U28£I|÷5:+D
+2¢*7Ý Õã¹nÙ6Yâr¶ãÍQØÑ·Ø›)èMvHgɈP–)Æh$ü™«W,7]ƒRƒÎB6äßon/—ºù¼¤Þ¢âweœ´ëJˆžÈe9ãáã[+
+ø7ç=$•Ô}W”‚£Æ…Öϲ”ì϶?—œ\úGÒoh`I…9$ž†…”Ëzþ—Ö줰I†šM%²”‡Zá<'Lú°íº–Ö湯,'&ÇiÙx8(ÎÝ^˜Ì×~¸¼:ÇØD^’§Qe×T
+æøR£„¡vÅ¥¶)¦ÎåBúÍ{yŠdÇØóW“P{&çIè˜	B2‡¾ñ2L^ÁämòÀs&Øç8ü1™ž#L’òèNú§‰›É|/1fÀþQlw’í"ŠvÒí4:_™äª^ï{%Ç |Oƒ“Ôì4ûa„‹ÏDn£}h¡V=í‚ÃPó26´ÐšeOÇQÄM˜za”
+¢¡¢³2`òÎy[jÁþÓµó0˜¤‡iôúãÌ§oŠ¡.‡¿9™B}z¡Ió)Mùìÿ ´‘û”RIW„âBˆµíäR¦žâ¾Qüäásöóe>jUž•L
+Î0 |ãvªomClx©“Qdq±ù,ÒKßG'i€ƒíµ#Åiè¾ÕÏ'ÁŸ¯àv+¦–×þ®j~/AW“0:Ö½P¢(v!üHöœª©1žË¸À¥(pûï»WÜ“öã¾Å¹fn-!ó¶ô€ô–`ô³Éá¿BêôCSÅωؠu¥¿pߺ>Ìžø¤Ännüˆˆ'CR`ž¸Û•
+9õ,$käþÜà@ƒôE¯¼¶E«
++j[BP‰wœPg˜AÛÑ•¬¿ï‹¦ç¿=µGNm@­´§šán5u_sà +Y¸XðWògÄ$r>5³TõxÙp\¬y¼<×€“?j‹‡€¡QW¶syÇ^[ÝNlsiO$êdÃ"N•ã€éPl•æ»ùXÀ®ù
+©†f%àI
+š—ð-ѦÓɁ>êQ×AÖ‚CïµJ/Ê?ê…È]LtÖŽlåoìX§I¹oô
+þk1}ü€³ÿ\Éÿ#ü—¨ƒÇL÷t:E~‘Y¤¢ù¢±ÞòœbbÔò²¨¬r)֝‚7¶}vo1怮WrrJZ?{]¿~uRQ¦þ»t–
 endstream
 endobj
-9323 0 obj <<
+9312 0 obj <<
 /Type /Page
-/Contents 9324 0 R
-/Resources 9322 0 R
+/Contents 9313 0 R
+/Resources 9311 0 R
 /MediaBox [0 0 612 792]
-/Parent 9306 0 R
-/Annots [ 9320 0 R ]
+/Parent 9295 0 R
+/Annots [ 9309 0 R ]
 >> endobj
-9320 0 obj <<
+9309 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [177.774 205.59 233.585 217.279]
+/Rect [177.774 277.504 233.585 289.194]
 /Subtype /Link
 /A << /S /GoTo /D (1small) >>
 >> endobj
-9325 0 obj <<
-/D [9323 0 R /XYZ 100.892 685.529 null]
+9314 0 obj <<
+/D [9312 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1898 0 obj <<
-/D [9323 0 R /XYZ 100.892 592.743 null]
+/D [9312 0 R /XYZ 100.892 660.623 null]
 >> endobj
-9326 0 obj <<
-/D [9323 0 R /XYZ 100.892 567.981 null]
+9315 0 obj <<
+/D [9312 0 R /XYZ 100.892 642.766 null]
 >> endobj
 1902 0 obj <<
-/D [9323 0 R /XYZ 100.892 193.04 null]
+/D [9312 0 R /XYZ 100.892 262.699 null]
 >> endobj
-9327 0 obj <<
-/D [9323 0 R /XYZ 100.892 168.934 null]
+9316 0 obj <<
+/D [9312 0 R /XYZ 100.892 237.637 null]
 >> endobj
-9322 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R >>
+9311 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9331 0 obj <<
-/Length 1921      
+9320 0 obj <<
+/Length 1864      
 /Filter /FlateDecode
 >>
 stream
-xڝXÝoÛ6÷_!ä‰jU”%aOk·¶¡CR4E»Ú’-.²¨RTÒü÷»JvRuÀö‘wÇãñ>~wNƒ(øeõêfõòMq–Q7‡ Îâ0â`[”aVÊà¦
->	™m×ÝüúòM’EXn·E“¨£4M$ôúý»ëõ&ͤxguçtwäÝõØ÷°Š„YÃëÖ›XƹxݨÞÕ–e’õ¯~¾Y}Y¡B0éÂ’,LÓ`Z}ú+
-*àýDaZÁIž‚4+Âm–Áº
-®W®"ÿ¼]Û(Lù\Y^æßUöo>Ê@[–óóßèãhkxN‘Âs˜g—·¨.'‡}Ð]eÖI!8–¦ä·u’ðÝ:è¾T
-g˜©øóláÈ^µÌæ3… W†ÿâC™…¥”ÿljϿÏUË"
-sp¨þ²
-³ˆØÓ—ˆyÁ›4.&âË·§´~2pÏR¸¢`ga.ãÿbðtx3Y¶¹0¢ø4óÒ8ÌbŶVƒÃ JqÔ÷èØzàí`N5¯öæt2²fìªp½ÉÊ­xߌuc§\Ý>®û„JˆgS[VYˆ¬_ŸEû‘s¦ÒŸ£8ANŒ%ù!
-3YNƱE-šTÆÂøûeT­vÈzd˜Á×h/ûÙfp×{«{o¡ì*æ>àmq0—Q6“ÅŸՍGÏ<Û¾¯—ÿe‘»’2ep9»i–³Ú8Œ™­=làÅ^©ü+ÏÔÉËT¾:ÆSÍUÁd4+=ô­b§£#+&OV{[ù…ñé6
-,o´ó߁¿½­oíå)O¥z²«t“%R|øxýöÃÇ_ž*8r7¬È£ÛýØú+à«ö¨¾Ñ>ÂKc3¶õ†b.£\Ù5m·b‡‡sqÇ;ÔˆBäEZèÅ=ÉDUïUU{-êh<ù¡×==OázŒõ☔ø½
-=¾Xr&hÖÇŽû‚ºRȶ÷¼½eÒ‹J9mº	ìé­q>Ʀ&iË‹#&°êÍè”q¨=oFɃsí²õä颔Ž_uGžæ˜ã–靾¨:`z;ñ9Nå9àÌ4£ëGw…ˆ•B
-Lõ «Fù‹+ˆáa^W¬X-‚w`2E0ŠÉa1ZŒ
-h²zïÎÚ ¤ÝP·ÔœM7ÝÆW‰™Á,á:ó$ðsãù‰¯*eÞv\,Þ$4s	àÆÛ~êbWs˜¡L2ñw½wLiØe™Ø±[ÙºLŒØ*+ö2&V,Z`˜þDkVŽ†ÄPCÎÕ§Þ(ˆrÆkuK®‘b¶…¾-±FLg’<žÒËðŽ‘	·øIÄÁB~{÷O¦pbߎ"Š<…i¦1ræñ,óú7>SY
-o¼Ç¢®­W»sDŒ„e	¡ñ™cªòMaæ=2‘ÒEÁ)Œ³eZÈX-a(ùHé02o¯:^p+™N4|5tî@(~?÷µkk¾KwÐq´Sßé##’qÉK|@Âò2§šrwÓ-…H˜;?PΡ#Õ“Êû5䟲ڌ0Q朦x‹¶ ÆêÚËÜÃ÷‘Þ6Ú¥Gäß8¾Ås‡…¥â´¡ºWV9¿3)‡ã-xFðtZ—·ü™ú¿>õ©4«(f<dFSq-úÞß’ò#ârá'ÏçS2œO`ˆKýùWÐ}ÒDÜMÓÂx\JøÉ‘Nãñ
-Q¶ý¶&2ˆ#Õ‰ë„ZÕGu¬™M¹–aßà=ÆŽgkÆ_ܦ»¢§nüÍO<eM§~¬Œw
-–™,¨Ìˆ£Ñ…¸ð¡Þcç–û©{!«9ç{Í”;Îc‘ú*a×ê¡¡±Ù_ðcÙ¹Úy¼±Ó–âíl!ý\Äô#Â5øÕRÂJÄlè¥<®ñ”Cýë0¶ÌRÔðæ£4@ÀQhç˜)sˆ¡™º0nÑwÌýYì!s
-‚K³¦¸fj™Ëí¹GܶŠK ¿Vw5¯S˜÷¬ŸÕ=“ò\JhÆ
-ˆSžå¦-s@X=:zŽä¶3…±^'êЕk.Ž£Úï5`™lŸŽ¨H Áz¹îÇ–Š÷xÙ þ¡KÒ`
-0‚
-JfÁ°qŠ£ï%†FütLŠ›yL€,È“D¼‚™
-j”Ù4„Áú`°ñŽ¦á4]L]ì•Ô{xZŽ=4ðìU!œl¥xÐ`©`ØÒp§Û–iÔˆæ”uþ ûüëöüû„\p¨¡VŽJÁÅi\Ÿú¶ž&|²ŽÈˆA&)Þ>Ç
-¤Íc tþïÊ*JBR/æ˜C¸(Ÿé·º¿-1ôd˹•bJ¹~`0Í2Íøý%šnò"¿ü%Š"—å„')pšä-Ì<z?ÝDMÏìᵿý»I¹7ÐmÑ?j”ˆ˜~
-£‹p¯O€­ÃoÈtª½þ
-¿G=Óúo`ÄàÆŽ¢õW¼ƒ"EêþÎyˆÿ¹xþŸ†ŸoVÿ “ÑÔ
+xڝXKÛ6¾ûW{¢Xу²%ôÔ¤M‘"mÓfƒ¦hz %ÚfWŠÊfûë;JëÝ(Ú‹I‡ÃáÌ79‰ŽQý°zv½zú¢H¢4‰«¤J£ëC”i¼KÒh[VqQÉ躉þ²Ø®ÿºþñé‹,‹Ê¸Ún%²fI'y
+’ˆéùÛ×oÖ›¼âµ37Ý‘Woƾ‡Y"ì~œ_oR™îÄó“ê½vÌ“e(õýõêÃ
+‚JšqžGõyõç_IÔÀޏQçUÝç9Ê‹2ÞÌÛèÍê×Už· k›ÄY&ÛU»/
+ûš
+Vìøù/ÌqtžSæðœ8eƒ¥ÅåÁm¢«É`¿›®±ë¬·Ës²Û:Û	°Ý:h¾\
+oySñð
+–p¤V-oó™R€)ã¯ØPq%åÿ1âãñ±hYæñŒ ¢?¬â"¡íi$â®äEž–ñéËs^FßY¸gÉ]I´I‹x'Óÿ¢ðtx3i¶¹P¼øÐó2	Wåì“FæØ1v“­ð'ôhRˆ·?¿|Ǥƒ»Fyc»	ªk˜§wÖïØv˜¸OŽ\ªú“aÏetØ›=xPµž ÉyÏ#µœ> ;Ý“3"pT7xNóÊ顧ËA1³7­ñ¸yÇ›AL¼OsÙ+fäësaGߏþê	®*¡¦ö$ŸT¸¸' -g|s˜7,XùKµeÅzûe 鳦ÊÉ^)jŒ<Hr¦ö÷ÒRaü ÛC8jïU·Ýf¨Ö³Ù®½[C¼ÅW덄`xŸÉ$ðsÓù_¬ÜÀËŽ/¨„j.h7¾ë§ »š½¼Þ…ø[מ)'6Y!ölVÖ®#FqÃV.`ò1x+-lØþLsŽŠ¤	XÑësr'â·ƒäÑ´d)f}iAéÒ-â Sm¶K'xY^‘Kpò‡Lœ:ëÛ5¸y‚'s8Q·cCZ ‹â¯‰iðojgú ›œI“ÀóüŸiœG~Ät¦]»AbPVU
+3àXo}æ™ê&À)„Þ	×È
+VAsâ¡RÄD.þ <Œ¼W«Ž'„<=8ñÕ%¸ì ðRÒÛRÈî[Íw™î¤ñª«õB„ŽXãÒŠ=–%ù@èæš=À;šv÷Ó6Zò°7ì~ Ü{ŽDO"?®Ê;L@ ì=Lñã  ÖxlÇã=mt‹Ø¹ ß`e! P=ƒ©âI"Ý+§|XÙŽ„ÃŒóM¸‚zHZ—ïxhÌз³%ò€¤YD9‹àú—LÁµ¤ötKΏ„DÀ)¡s~XÀá|žÅEÚ›gª^癸9:ÌíñRå®$tCùT¹¯)†Šíç!QP‚8BL9|€©UÝqTGÍ۵˯Ñw\ö9?„à¶Ý=un~ðà	5œú¶±Á4e²¤(£ƒ&ÄI(º6ï“TÖSñ­Ó=Ü5Söl¸›ˆÔûÖ'´3Rô'R¥û`ÇŒ,EÁÅäå¬eú9†©¿ñ§%g¶„X‰ù Ã1¼	!¯Qæ&[¹ÃØò–¢Š7EÐàQ(çà™	:´¾™ª0.Ñx!›‡³XDf‚M‹¼Ãiª™Ëó¤t‰ÛuÈ.!ùµ¦Ó<ÏE=:vì´I@—*‚õæ©@‡x3Žw@h=zzŽäº=…uA&Ê¿5?]G±_ªÀ2۲Ŧ€CÙF(æ¦[Šj\ãeØñ$e…‘
+y+”,JÃÖ+vàNæàCÆEÁ§¹O ì²L<Óµ‚ åm{àݺ °
+†ÆHÞæ‹ØÅbIµw‡ØÀÀßóÉVŠ[zΛ@nLÛ2
+ѼÂ:I' »Ï7¬©*à„R:Q-GA°[(æÜ·ú‚˜”…2¡Gç $ÅËÇyisƒ?ŒŸ²¢¤LØ<ïP^”éç²—ú°dËØÚQÊ”r+¦¾ŠhŽi6¬/ÓéfWâ'Ï,—á„'1U`;ÉKhzL=ÝDUÏì%ìpûAI²¶PmÑ@b”€D̘N
+d#\›3$×ኤzH«½ù¤Ûia
+‹ÐbpaGVý	ï W‘¸Ç‡KñÞZx
+ߘáüËM„½ÿèÊÅeÅ5»©ù€IËHµ7¼T>Œ<|Þf•Ác<7A
+§÷Bæ“Ѹ€:{â–¬Rž$évJû¼pZ5s$¤ªÄÿnV‡¸£þþ¾M).ê®L7x7ÖÓ‡PüIy–ßiÝ,A¼¬æÒz>6&øÝ §/ˆùëX榪䀃ñbþ!oÓTü6æ ¾߁®©=di„"æa¤aÖƒ¯¡[€=^´XÅÎ÷­¼°-,.ã_õ¨s™?o€¶¿>ÿ?J_htÐÔo𚻬I\.|ë±È‹œÿQèÿƒðø‹ÿûëÕ¿ƒK±u
 endstream
 endobj
-9330 0 obj <<
+9319 0 obj <<
 /Type /Page
-/Contents 9331 0 R
-/Resources 9329 0 R
+/Contents 9320 0 R
+/Resources 9318 0 R
 /MediaBox [0 0 612 792]
-/Parent 9306 0 R
+/Parent 9295 0 R
 >> endobj
-9321 0 obj <<
+9310 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 780
 /Height 318
 /BitsPerComponent 8
-/ColorSpace [/Indexed /DeviceRGB 31 9333 0 R]
+/ColorSpace [/Indexed /DeviceRGB 31 9322 0 R]
 /Length 20521
 /Filter /FlateDecode
 /DecodeParms << /Colors 1 /Columns 780 /BitsPerComponent 8 /Predictor 10 >>
@@ -45515,7 +48360,7 @@
 ,Ò°¸(-mBÚøÇÎMK‹øGkÜ@œ‡„=äåe ¬™aPFk†! h43Ъ76Z39 @£™a´fP @£™a´fP @£™a´fP @£™a´fP @£™a´fP @£™a´fP @£™a´fP @£™a´fP @£™a´fP @£™a´fP @£™a´fP @£™a´fP @£™a´fP @£™a´fP @£™a´fP @Ì|\£€ê@u´fz  €X¥ùF!õ!óh…;ä @€ ¹´<6
 endstream
 endobj
-9333 0 obj <<
+9322 0 obj <<
 /Length 107       
 /Filter /FlateDecode
 >>
@@ -45526,110 +48371,55 @@
 ííí|||•••………«««ÞÞÞÙÙÙœœœýýýúúúrrr---âââÕÕÕåååÿÿÿŠ”>­
 endstream
 endobj
-9332 0 obj <<
-/D [9330 0 R /XYZ 151.701 685.529 null]
+9321 0 obj <<
+/D [9319 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5246 0 obj <<
-/D [9330 0 R /XYZ 151.701 660.623 null]
+/D [9319 0 R /XYZ 151.701 660.623 null]
 >> endobj
-9328 0 obj <<
-/D [9330 0 R /XYZ 151.701 643.753 null]
+9317 0 obj <<
+/D [9319 0 R /XYZ 151.701 643.753 null]
 >> endobj
-9329 0 obj <<
+9318 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R >>
-/XObject << /Im38 9321 0 R >>
+/XObject << /Im38 9310 0 R >>
 /ProcSet [ /PDF /Text /ImageC /ImageI ]
 >> endobj
-9339 0 obj <<
-/Length 2093      
+9327 0 obj <<
+/Length 1609      
 /Filter /FlateDecode
 >>
 stream
-xڝXKã6¾÷¯rY5ÐVô~lNIz“ ÈvÒì39°eÚÖ¶,yIª=^äǧ^’l·fäb‘UÅbU±øUÑ¡·õBïû›ožn¾ü.Ž½"¨Š0òž6^†AYÅ^^VAV¥ÞÓÚ{ï?êÚ5}wûÛÓ$^Už§(WAÒ!ËÅq·«(Ìÿëõ«êj½¾]%Yê¿ëœnÛf«;Ç„Ót®é¶<;6n'ôÛ¸ò{ëkÓDöÞ4¯ÚȸGc×öjÍöd!TaEö'0.Òl´(Í
-”ºùÇÓÍÿn" ‚ð™Y$^½¿yÿ[譁÷ƒIUzG’Ü{IVy†ÚZïñæç›ð<nQv¾ñ¤4­
-nh{ç´±Â,‚À¤qîÿks»Š‹Ò¯ûÁX}“²òO·qé÷ƒpTǃ¶G®ß¿ðT9ùòçÖÌ‘BÚ‡0J[ÍãF´4ÎòÀénP-O6½Ù‹ºŽ	~­¢$ÈÒŠMŸLJ¢Χmq”ûϸÈ×<1Z­›Ûȧc„9m…ò׶!­foÖèsU¾Ûif´ªÛj+³¦³Î”o¢Ìí”cýÖ¶flªÍ	Dq¶
-&à~Œ>C:úl<í(IX'+þeá šÿkç”G‘ÿËD°,q0â (jÙåÐ|Ô­l¸,8—†‰Ü55n²[
-í^û'é™Ñ0Y7öÐ
-~ÈÞ$ñáêÛÖFëŽiÏg:“^}¤e†ç`ñÖ¨=Ëôæ\0ՁÜ…A_Áú’QßÁŒA„ Ð]‹
-/Š‚*ËbLyp+Mg·èö§o¸
-It‘yA™FƒïwÀ±Ìa½W	ô®$q)èƒÇ›þ¯?½ûŽ ¥-SZEA~aIJ6¼€TÛïÙÏÒßš~ }¾á ³gÓJ/®Â2Úƒñh H°6ò·K'KZ yø ðÆÃÊ{m£ô!™Éxº
-ô+Ý£ž[ÍŒVoU}bq¶ˆèüŸ•…ä"ö•ÀµoTcÚÓ’ZÙBQâ7þNW'»Ù(͹Ìx‘Ü#x^WŠ%ÎÅ2E¹Iuª
-ÎbŠ!CšU-D§ˆÿi'Û ˜XŒY&jèê/\ø¶¬"8ymjmyri;Rž‡¦u+DDœ½A§â„`ö!JÒÉ%Bs÷^óÜW­íY¨Vm«±S¡õ¥`
-	x8	˜m{aCy÷€uân¦Ì(B¤½z!×,O!
-{aôFt돒¾mæ3DYÕ-&,(AB!@‘å–iý†¿|ÀðW at J•Á
-=²ÄôSÒ(ð£ÌZh`4y(WKh'1µ°¢`¹IÃÊÇ›³h÷@˜RŽ¹kx6'âZˆÉiYZr¦!̓uÏàkyª¨È奔&ìÈnù–¾ðã‚ߺïæŒ3rEÁ‚Õo/„6”´G^æ^Ëlñ§ç™b‘g‘Ûc°®shj7`˜,žk8,²Z¸ìL`…K'È»[2šnMÄE>FÛ¾¨d²åïºï4¦ÊeçÇœ‹‚؈gÒÈúñÛõ¢¯f&ÑFó
-&RÓè*ßÞbÄ5ÄKUK§	IÓï/˜ÿ&l‡¼ íG+Ó4Û¦“
-X–çúÇ¢òVÐÜeÎûþÔ;=¶œsÙqyÐn}%vœÐa§1‹œ™)+…ðå»}äÝ÷Ёþ<±V£ÖÕ™ZjL‹ø¢1M³ ‹/ššr¨O·% .totFØf¹ÔØ8ƒ¬Ààqa™G÷UX iá‘kO v£èï,øÕ.^„Áʺèm›Å¼Œ"4O¸öâ®[êé ¸½ë(z¸_©pHZcšEòì¥Î£ôßÜвà§
-õ%sbAؾ`
-ç‚L—鉰麓’^ÓE\Ø•®6p¥2êºÙœ˜Â­GL(ãLØc¿Êèˆãþ0¶É1÷>X]ÈÁÑbT<¤èÇÙ¿#€C1VKצÕál°Õ¨ ~©èã–‡–©)ôvlÔÂÃÐÕ; “ïTʍÞð6Zd¥iáÁbw°Yò•N «¶Çü@‚köšiðbj×ÝßÓ라Ž¬°4OÌ⪕3Œ#á:ËU›[	t<«Ôÿoÿ̉õª¡k›—±Ï¨7Ö\í,FŸpéׇC+z)ÁÒîßPE¸éƲŠx„åY°Š›ÞÔÿöׇÇ@@K
-^g¼š”
-ûé¹ê½§•ß5ÛaÔÍz|%ãŸ~*'EùgŸÊQÄY2=•Ïu ¼ÅànòY GAúFC
-º+xÔÿu
-£®áڏÏ<õ£²*$áùýsnvô+‚–S€æd<Ã8Ã6ˆÕØw!íºï"ö†y—5R¨ñAÒJðVáų¢˜ZX„ÇÑ”OÈÞÉäS at TÆóž8M®ð[©*šPŽš—=á!ïÑÉúûqôx¥=zØF;eNXˆF­8~cÅ'LMãlê€sy0dþ×5Æ'éñ©€}ÃUGþcÓÕšÛTƘ…t7·©• ,«³nù]5ý?ÀäùUè0
-E:?‚-o‚ã{†ó{Dð0‘H‡‰xÉB&8Ññv‡·x>·€Ð–Òÿ'Ü ö
-ìø®sW]ðyFäãŸLöR‘âþ­¤D΍“ÈœÏwìBèß)làþspñÇɦ7òçÉì*ÈÑŸhôŸ‰îFPtc«Çµð埖2è±püþa¿zM
+xÚ¥WKÛ6¾ûW¹TÖŠH½ÛSÒm‚älºZ Ɂ+Ó6»²èŠÒ:úã;Êö®EÑ\Dr^šç#ã`ÄÁÛÉëùäå)ƒ"ªŠXóe â8*+äeeUÌÁçðV×½±íôëü=‰—Q•ç)ŠË*ŠA:f9)£4šÎDœ'á«Åƒjk½˜Î’,
+ßµ½n³ÒmÏ„›Î´½iW¼Ú™~íéSY…Öõ·ug¶^öº3ºós‹»¶±jÁþd18UqEþ'0/Òlô(Í
+”šü6Ÿü=@ᓳ(I‚z3ùü5À{ÄQR•ÁŽ$7A’•Qž¡µ&¸|œÄ§yE DTe™|”¸´Š(9‡„¤àBh‰xZ^„ª]ðäí8Ž9–ÈNʃ™Ì£87Ä‚VR„Ÿ>¼ûgehSUOeÞsj¡˜^ÛÍvH«Îô_ /mÇ“-ljöMŽÚNgÀÑ^Rº㶍šÊ"܃®Wè9º*’’Fž’!BMëŠ#Åkí¶¦×ȉÃ~M¾ƒÌÐ.ºð€Û©»F3£Ñ+UïYœ"Æ~ÅÓ;åLÍì'a s´¾T¦kö§.¦û¨•ã©LB³äqO¼XÒL¹!6Øa×8ë`BûŠ7t瘢úƒéLw¸’”BJ®uªì"	çkÿ›Ãü‘gÞL¿Vý¥úµv˜­"úÁÔÚñâ±óHQ<Ü
+¦ég¦å•èX›@kT»ÔÊ«}IzˆiÛiø^½ V™‡ªq–…jÕ4zqÉ?…î—a§\¯;ž›
+Ç鶳”pÛYÏþgñïïn`WGÊnm¨À×LÚ¨{
+Íñ²°ñÛyÛú›/ßÖ™ã&¢¬j/yjÁºƒŠï½ºcš]òÈ;\Ðÿ¤4‹ˆîXâ†vú˜S²èࣺ…§Ó¡?Zž¶çÙkË@m5
+ªÎ¥ƒ6PK)ÇÚíxu,Ä…'@ÒTZ––\iH„<ódûPP°¸TøSœô£äšÜÆÙŽOé=¯0-8Ö¶=\çO¡7p!ÙguCývT³;֍sê]Çlå•b‘;ÌP¿Á\a·BÎÖÔý€E at b^ùp°QÉiÏ5þÏÔ¬PõÐñ®.9M‡F¤ôo:íl3@2Ùñ¸°­æÙÕγÓíÎIŸ Þˆ{b¼þ8¶ÖÛ3_b‘èN³©Šiö¤Ü.øý´Å'),‘R¯Ò²³›GÌ?¨·Ca€ùc–íÌÊ@7'¤*ËSH-ª`––Qš'ü߶×#
+18d!‚¤ˆ£4– ÐQ,d*YädÎL¯é	/ßmDpm”?X³ÑêìÄ,au!OÑT¤Y”É"H¥€Ñcê|ZBËUC;	u¥/³Üc¬Ì ,0y]ujã˜GçÕ³
+F «A®ÛC³EÿaAè_ÍÅ“08¯'Î…Ì$«ƒSä‚æc/þû(¬÷Lomï
+Ý\ÏԱᐴÆ:òÜc›ç={þÙ	-¾¼Ñu $0'díS¸œ°Éäp˜æÔʐ®[é0â%(Ãz®GF]›åž)|óÔeúÎbo‚Ë òÍç–üp^œÞ¶Ñc4<l=è§w?cÿ0fM£¿ÁÞà]£‚öK¨ÿÜ6LMánÇžn‡¶^‚',ïô’ÿ£½¬¿´ðàðzpá—^å‚NèVÅú@Bo6šiµšEûSÏôzmý]³¡kî™Å¨•sGÂÓ\Fm¾J`à‰±JÿìS|²¯¨†¶1÷ã=£¢¾±`´sLcBÕWÛmãíR¢Õ÷š
+ºM;¢*¶#DgߪøΛ†¿~º¹|Ïò
+Ê4ÍàúN1ì!°þp>“æ³FkpW—OdÂèû‡4Ï£îãϽDÉ,9¼N@{ƒ^`É獀x.¢ôÌD
+Æ+xèü€‰1”ÿ`â¹P؈,‹Hdg¯©¢*¾ûš¢Îüøùv°V€µ2çB8ìRyÜ¥§¤<Óåøì»9C:j*	cv’œß;v¼Ñ=³ï²QYü¯WãÓñ©i‘`ÐÃ]”ÅÄG"%/džà`R@8Z>EË™ÈàE,~Äá•A
 endstream
 endobj
-9338 0 obj <<
+9326 0 obj <<
 /Type /Page
-/Contents 9339 0 R
-/Resources 9337 0 R
+/Contents 9327 0 R
+/Resources 9325 0 R
 /MediaBox [0 0 612 792]
-/Parent 9306 0 R
-/Annots [ 9334 0 R ]
+/Parent 9295 0 R
+/Annots [ 9323 0 R ]
 >> endobj
-9334 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [331.667 231.717 385.175 243.407]
-/Subtype /Link
-/A << /S /GoTo /D (2small) >>
->> endobj
-9340 0 obj <<
-/D [9338 0 R /XYZ 100.892 685.529 null]
->> endobj
-1906 0 obj <<
-/D [9338 0 R /XYZ 100.892 586.038 null]
->> endobj
-9341 0 obj <<
-/D [9338 0 R /XYZ 100.892 556.507 null]
->> endobj
-9337 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F88 5678 0 R /F72 5679 0 R >>
-/XObject << /Im1 5672 0 R >>
-/ProcSet [ /PDF /Text ]
->> endobj
-9346 0 obj <<
-/Length 921       
-/Filter /FlateDecode
->>
-stream
-xÚµUKÛF¾ëWÌqT³óԣǦÝtsܬØä ØòJˆ,yGòù÷%‡ÒV+¸.R¤q†ÃáßG‘’=2ÉÞF¿l¢›['™’"—¹b›=SN‰T*–d¹p¹e›{àÖe«Ï›w7·Z³LäIbÑTËLH£ÀS0zóq}¿Š³|íëv¨ÛGÚÝŸŽGXIÞ­àã‡U¬¬Jù›ª8¥'­ÑôÛ&zŠÐ!„4‹Ä	cØö=|–lgï˜&ÏØ9X˜q™HœƒuÃî£?"9¦wÁW"…Övé,ÍÓtv
-#Þ\Jéß֏'_B:™t„&À”›_L¸Î'À¦•Îø•1|èPZ^Ðv§]?Üo}}FÝt	žRܯW ³NäÖþì–réÚ)Ê\?EÂÉp<É L3ÚèÄMÊ›»ƒÉÙ¯¼s‰%ÉbåDjÕ÷<]Ž§ÈâYh<•2¥D“g].¤Îˆ
- Ì
-ˆ*)ùÛ
-0ïæ?¯b›f|S!±jAïöÃÊ(~ÆOj:œ:þánMf{*uÚ¼ïZ¼UkTÏ	…K@(œ´CŒ42›ˆÔeŒÎæ\éûKÅO¶ JÆ?õ÷ƒÑ¹âuOò\ªW‰ÑÙ×z‹µôu4­[ùš†“³¡½¾ØAØõPwmѐî“t²hw´y:ÕP¢˜’¤l­ ‹Ÿ=ã§ôûS7è-"¤Ó9B¨›
-Þ}:*O}‰/YÍ^Ô||÷'­ŽM1ì;è1eùÝ䨧m]ãAß#³ÈÔ,쉄láËŸ€5¥ù¶8_ä]B¼{’»Žþd™À1øÙç}CaÃ4ÓÿßtÃ%^¶;7M¾?Ie齄cnÅ@úmÐyFÜ P€Žþň,
-Ï„ö7Ú}ñ{¢¤ÜRސµzZÔààOÌ<£€@V…ßM fW>×Û²§M1Ês¬i^kÒS	¼8xÉÖ”c`Ð.
-‡2Tnu‘«¶kºÇoÈ=8Ç‚Äy³ó5AúfOÊð4š+WeKÄâzÙ€Qw„
-	=87úÁƍ‡m×Æ‹Kâ›CtÐa°8±ÁO²¯ÆŸÂmÇ£6´ú©q²‡ }<&³°¹6ŒÎ„Íò4á´¹8Í¿Ã×C2¡Xþž†Ô]aA•mBg¯ÏHß_Ë^Y¡Õÿ1UŠHèïŽVþàá¸ô/šûb5
-endstream
-endobj
-9345 0 obj <<
-/Type /Page
-/Contents 9346 0 R
-/Resources 9344 0 R
-/MediaBox [0 0 612 792]
-/Parent 9350 0 R
-/Annots [ 9336 0 R ]
->> endobj
-9335 0 obj <<
+9324 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 780
 /Height 265
 /BitsPerComponent 8
-/ColorSpace [/Indexed /DeviceRGB 31 9351 0 R]
+/ColorSpace [/Indexed /DeviceRGB 31 9331 0 R]
 /Length 14798
 /Filter /FlateDecode
 /DecodeParms << /Colors 1 /Columns 780 /BitsPerComponent 8 /Predictor 10 >>
@@ -45727,7 +48517,7 @@
 ':9~€ b`âãt|2„2ûh¬Ð?VD ¬kôn
 endstream
 endobj
-9351 0 obj <<
+9331 0 obj <<
 /Length 104       
 /Filter /FlateDecode
 >>
@@ -45737,13 +48527,70 @@
 !œsµÖÖƸ÷ xïýÄð:Æ
 endstream
 endobj
-9343 0 obj <<
+9323 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [331.667 323.562 385.175 335.251]
+/Subtype /Link
+/A << /S /GoTo /D (2small) >>
+>> endobj
+9328 0 obj <<
+/D [9326 0 R /XYZ 100.892 685.529 null]
+>> endobj
+1906 0 obj <<
+/D [9326 0 R /XYZ 100.892 660.623 null]
+>> endobj
+9329 0 obj <<
+/D [9326 0 R /XYZ 100.892 641.703 null]
+>> endobj
+5247 0 obj <<
+/D [9326 0 R /XYZ 100.892 287.551 null]
+>> endobj
+9330 0 obj <<
+/D [9326 0 R /XYZ 100.892 270.681 null]
+>> endobj
+9325 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F88 5678 0 R /F72 5679 0 R >>
+/XObject << /Im1 5672 0 R /Im39 9324 0 R >>
+/ProcSet [ /PDF /Text /ImageC /ImageI ]
+>> endobj
+9336 0 obj <<
+/Length 1212      
+/Filter /FlateDecode
+>>
+stream
+xÚ¥VKoÜ6¾ï¯ÐQ²4)ŠzäؤNÁ¶Þ œä•Ö+X+Éecÿ}çAí+JíE‡óž’Þ“'½O‹ßÖ‹›[#=%E&3å­·ž2J$Ryqš	“EÞºðüȤÁ÷õç›Û0ôR‘Åq„¢¡L…Ô
+4‘Ї¯«û`©Mä¯úª±UóÄ»û±ë€’~À§·ÁRE*ñ?ìòΖ=Ë„!ê_ü¾^¼,P!¸tæ‰Z{›ýâá»ô
+8ûìI¡³Ô{#ɽ§M*bc€®½ûÅ_yž2³áE™ 0Ðó?Ú Lý7ü”àÿJTÿ.X†‰öí®ìšÔÏ™Èü™Ì³(|€ñÎàŽ·|ÖA"ðâ˜ÓŽ–EH«–‘Êüõ®œâ¢e¹¦µL<7à\ÎÑnç<…dA„K¥…‰2ÂÂM†'›¸Õþ
+év°÷›¾ê,4™Bƒ>Ñ0^ªžIgÑ0cõñÏwîhkËf²Ó‚©Òæý! E“f¤ðäÌ]sò6
+
+šÝ#ûÕÀœ=^7ôÎqZL;RE¹Ï›:¬%¡òï«fãŽçس²¯_îþa~ÞuuµÉmÕ6“ÈF}˜K!„De,FÔªãø*{˜„T6òHü=@YËUD²(_«
+6Š`I‘I%Ebl
+è‘Ì™ñÌE‡òÐeY0E5‡uÓR¢_1ieoÙ.øç\‡„:¶ß¤Š €šýËœ’ÄÏùxÛöû܉ceóǺ<ž0qÊõI=593À™¹þ$w´†P½ŽüG0¿ÜR}‘q
+ä6yÃÜ¡¤L«²¼æn^¦\B©ÄSJdÆ„8îàCš‡ìCŠHèl%¥ÿ	(çï¡3’ÇôG YØüÐëV`>9AÿﻋmÑxó†[KHí
+ÙÇ‚ò%ÀD8iì’rÅ"1ée‚#8„ÄZN²Q( 8b1$ÁÀáØàúæP*»ŒÏž«
+¦éÙ‰V
+⎞œ”Q­ˆèóÜ®p|òšyߤ‘Ô»¸y)gg‰&éXûíXÃUüSÅ;KòŽmÔõ%52 ÐTb[‡g©®Î-¶ë@8ùw“¢oä¼¥z9Ä°´Xª¿ÉYÀyœuBvn dB°ŽkÑòã&c0A%3ÙÅ#£ðaÔÓÃX·v®°
+Ÿ53	Mºq:Ù^|Eà_ŽøÀpæ„X"çÅ=^Þ=öm^°ààÞ¨
+Ç
+Qkãz5¥ý¸ÇÈSvÖ]ÞSR˜sB7Øän¥i,ëú’K™žZà¨à£šà†*]u$Û’Zw7[«¦­Û§Ö”cGâEÑW¯Ç—Ÿ]d’i{ÛaB‘*.,Ò—̼:dN*7ê¡gKáóÜ,¯.ýøƝgŽâ3€0Ø›env—Ï-~ÿb¼âÞVOcï pL_É0þÍÿAéHŠ06׿PI–üôê†Zƒ¶Ì•àèUzòêºÑcª³©Ñ/KŒ`>0Ìç¼et‚[²^'›VgW¿Š>4"Kãÿòy½^«V¦"EÕ/a$O+1“”7˜~Ǽ¹ÛGÒûØ‚“¥“ÛØCF$€ôÿÃá´éÿ	
+endstream
+endobj
+9335 0 obj <<
+/Type /Page
+/Contents 9336 0 R
+/Resources 9334 0 R
+/MediaBox [0 0 612 792]
+/Parent 9340 0 R
+/Annots [ 9332 0 R ]
+>> endobj
+9333 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 780
 /Height 265
 /BitsPerComponent 8
-/ColorSpace [/Indexed /DeviceRGB 31 9352 0 R]
+/ColorSpace [/Indexed /DeviceRGB 31 9341 0 R]
 /Length 15567
 /Filter /FlateDecode
 /DecodeParms << /Colors 1 /Columns 780 /BitsPerComponent 8 /Predictor 10 >>
@@ -45836,7 +48683,7 @@
 ½œ@ 1°ðJŒ:^)B™k4Vè+B  ã³u
 endstream
 endobj
-9352 0 obj <<
+9341 0 obj <<
 /Length 105       
 /Filter /FlateDecode
 >>
@@ -45844,81 +48691,75 @@
 xÚÁ¡@  PKXBÔÕ †0ƒ(Š’$ü¦‰¢¤‹Šàœ;Eÿ½½wιÖzï圏1J)k­9ç÷}Zk¥”!$¥dŒcbŒ„Â9‡RšRòÞC­µcç\k­÷ xïý`;/
 endstream
 endobj
-9336 0 obj <<
+9332 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [284.281 344.251 340.091 355.941]
+/Rect [284.281 367.803 340.091 379.492]
 /Subtype /Link
 /A << /S /GoTo /D (3small) >>
 >> endobj
-9347 0 obj <<
-/D [9345 0 R /XYZ 151.701 685.529 null]
+9337 0 obj <<
+/D [9335 0 R /XYZ 151.701 685.529 null]
 >> endobj
-5247 0 obj <<
-/D [9345 0 R /XYZ 151.701 660.623 null]
->> endobj
-9342 0 obj <<
-/D [9345 0 R /XYZ 151.701 643.753 null]
->> endobj
 1910 0 obj <<
-/D [9345 0 R /XYZ 151.701 469.987 null]
+/D [9335 0 R /XYZ 151.701 528.739 null]
 >> endobj
-9348 0 obj <<
-/D [9345 0 R /XYZ 151.701 439.843 null]
+9338 0 obj <<
+/D [9335 0 R /XYZ 151.701 475.17 null]
 >> endobj
 5248 0 obj <<
-/D [9345 0 R /XYZ 151.701 328.888 null]
+/D [9335 0 R /XYZ 151.701 340.664 null]
 >> endobj
-9349 0 obj <<
-/D [9345 0 R /XYZ 151.701 312.018 null]
+9339 0 obj <<
+/D [9335 0 R /XYZ 151.701 323.794 null]
 >> endobj
-9344 0 obj <<
+9334 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R >>
-/XObject << /Im39 9335 0 R /Im40 9343 0 R >>
+/XObject << /Im40 9333 0 R >>
 /ProcSet [ /PDF /Text /ImageC /ImageI ]
 >> endobj
-9355 0 obj <<
-/Length 2119      
+9344 0 obj <<
+/Length 2113      
 /Filter /FlateDecode
 >>
 stream
-xÚ¥XYÛF~Ÿ_Aø‰,†÷`8žñÄÁÄP¢ñæ!ÉCØ’:¦H.Iͱ¿~ë«jRÒ„ë,°««ë꺺Z¾³s|çöêûû«o>„¡“yEæÎýÖ	|ßË‹ÐIóÂKŠØ¹/ßܵÞ¦©ÜÿÈä¹W¤iò°ð|¢ö….½Ø[,?Üw壪7º\,£$v?Öƒ®*³Óõ ˆUgêÁÔ;Y=™aoñ‹°p›~Xo:ÓZÚëÎ<êÎÂ
-žêªQ¥Ø“ød´WøÛœÅÉhQœ ºº¹¿ú×U at X">;câE‘³9\ýö‡ï”´÷£ã{Q‘;OLyp¢$÷ÒÒ*g}õó•î·<w‚À+’$Ç¥^˜NgžŸYÇÝ›vTR.t19ªH;YæùA‡Br˦崈o>¢Ì¹nÈœŸ§½å(vy&—­ÌÂs÷qâ%aæ¤=ŽÄÊϽ&çæ™;ì-ð{Å»^àåþ ›æpPuiI‹ÜëÍ·‹À¥èdn'kEëªøáhªaiê“øR/á²~D^bË£ÙèÞ*l˜<u_aî6G+övOéяéAÛ”=e'%^êS¦m/˜„§oKZêÙ¾È¶’O«f­èÔAœr±ï6[I´<9÷dxA1åÙ²¿¾ùçÇ÷7ÿhë]˜¤ÂpézŠKL¥Âg‹
-˜™Ù³Ñêòl¤›|..ƒ˜’ÖÏÄÎD„H8B*ˆÊÔú-‰:8ð
-‹NÛEÿ…+ð…& P|7MM‘{Ëjêö8ÌyŠªŒ){ŸÕ§[~÷ƒ¸Ò•8ÝOê ªÓl$”$@¼ß.ÁW”0%¸*CéTëYzœ<·ŒIáèl‚2‰|Ã~T=EOÖTZhZqÒrló™ Q#9÷׌	úYm†
-¹Eîž«àI‘Œb·ß7ÇŠŽPʲÓuÉ	F$Rv„d/Ãcqì~ÒO‚üÍ6û{pe§xÇ1¾•V=Z0o
-òÝ*ÓÁRÀÞ+á
-§îUÕS2ÅYâÖãQ@ý —9#DÄÐl7
-»»Ä(ïîÞ{Ýïõ‹@“‰X˜ÚFU•ÝC’1p´ÞIòyMŒœy÷au÷æÜ[eRÝ£
-b? †3HéwzyòC”ç“èó~wûé³lÞ®îló²Ý¯—5õ„ž9>ËI¢”òóy ”¹°Rp6@²P­íDâ…žoKºÖØ \Ô%™Y-³7êC&b€I¦îr/ç@(%´ µ:<(û—~Ð2iFß÷pgH2ö»‡ƒ ố΀ aUj”ýÆèš~=ØwzÛŒq\tª"soÖ+áú›'ë£Ì –¡«Æz½!.¦=UËZ×{Ì-åN-œçl±£:Óùv&›d"‰IIÕ½œƒ.Æ<wKóYs™$¡«ÊÒ`BR•PH_›vëRÐèF·ÇùË‹Ó"÷#LOsinôý³¡ÚD°±8(ZЏ@k[™_8¨³ÜÛaôþójývNùíqеØGÂߢùäîOd{§¾ «×ÍvD¯ë3÷®+~PƒEɐ@Àµ~0ªžM(>^Œ‹…ª{ƒ¤¨ŽèŽœ0:û9¡ì7Çsðâ]»å'¾î{rœó™
-"§óõ`ÑuS/Wëÿ^XÜ{é¿kØ{XÀ{¤2ð¾2U¦¾GüêX^˜DÓXy.„Æ?š¢˜¦¸,ýšŸÄqœýEHL⚁ÿ/!ãqþ!¯Ãsg]NÇVšŸy4ƒž=RŠíÒàƒ?Ýù+	„,®µT+æ nÇ„CôW«kDDkÊûÈÇ Ç}Hž-ÁÅôFQsϧ·[òëÞ`ˆó üÜŽ8‘¤¼Ç‰¶ÑÙRY¾ë;cØïtÛi¢‡¼Ání-o«vVÜ¾vf{¥NÍ%¨$?Ò¥¶5NФ$ôm·©y„^Ç”ÁZUKÞjºªÊ–Ü{Æøgó€#ÔOy‚ ”ªÎ¤õ‚#}<Ê>¶Âð – ?c2Œ/v|÷ª+E¶è*¦Ž[ŒG<
-íKÙÛj5;¾Z2J˜{±‘­Áö)Ym&ÁÒ¶éTUe	÷z¦ã—PÑMEFéÓÀÃï•8}e,v¤ÅÑ¿ƒ€¨*¾àžd¹m:Ù7uÍøÇE’¸œŽ¸0â¼+‘ÈÖsÂÅ—*¸.Î–‡»çö/Cõ{Ù„”=2LæÔ lZ8“éØ\)¡-ÑTu<—Üù.U'8¨’›‹®õGC7;)¾VŠùwÊCnþv(î÷¦í´ÿÔÔvRFLíè̏W'#¬Vê.ô³ZW×ìY~Þˆ»$¶6+ È0ÈW¿dá1>5SIœ¸D±ÞéZwÊrÚd($lÂ6né*+¶:þKŽ¾Ùñ<Q“ÀÅÏd6Y@ƒ›¯«oQy:×L{á9%±-l0‘þ¦:òJ Õ†%Ú1–‚Æ¥²Òß!~ü'_ÿš–ˆ…óo ê¨xm¥Ÿå±W`Ú6äR€~ßÀÓëYµjœWDÈÐM-K.;Æc’´â~ÝsFö KcµÌÖž@ž¹Â1ÿæ¸Ð¬UžNŒ%?Ùè;6”串~à^ÓÉžV£Û…CPÖ˜¸-3½¡jzYZÉ’c¼ÊÂోôWµ}$‚jè^µTÛ«ä͝¹S÷À¢ç9|
-|šY2,)|Zàö¢ÂíŠ÷À8[Ò“Á”V¤}Šg(Ûì¢W0#
-ÎvTº%4]9ÊíÔ5=TæßRã?kã—F«ÿ ϧ[y
+xÚ¥ÙŽãDð}¾ÂÚ'GÚí	¡egvX4¬™…à¡cwâfí¶±9øzêh;É`$"WW×Õuuu|çàøÎíÕ7÷W_¼C'õòÔœû½ø¾—å¡“d¹ç¹/_Ü­*FÝšÕo÷ßyæåI"<Ì=¨}¦COx«uà'‘û¦|¦PåjÅÂ}oFU×ú ÌȈM¯Í¨ÍWz¬,~æn;ŒÛ¢×¥½îõƒê-Ü"Á£©[Y²=±F{¹Ÿ“ýÀ©ˆ'‹Dœ#ÕÕÍýÕW`ø쌱ENÑ\ýò›ï”°÷ã{Qž9DÙ8QœyIŒÒjg{õÕî·,s‚ÀËã8dÇ%^˜N"RÏO­ãîu7©?)g:FU ,óü !“œÁ¼i9-â‹÷M”:×-˜óü·žÄ®Ïä’•ixîž@Ä^¦NÀÑEÄV~87Kݱ²À¯A$ÃëêEÛ4Ò”–´µÈJŸܯ¢“º=¯%¬ëšáÝQ×ãZ›“øR­Ñ5`ý:ˆ¼Xäl˃.Ô`¶Dž¸Ï«0sÛ£{[AzSzÀ6äÆ Ù	‰—øiû&æºÕ–ªÐûgÞ–üé䢽lÔH)'|·Ýs¢eñ¹'ãÀò9ÏÖÃõÍOïßÞ|Õ™C'ÌpézˆKÌ¥Bg‹r43µgƒÕåÙ@7øœ
+\’ÖOÙΘ…p8B(ˆZõÀØ?ñ½²‹áUšÅoÑp脬,«6Ýq\òT12&äQül>Ü2ð«ˆZATDºdê“t"ä$Àx¿bº¿¬€9ᐫ֐NF-Ú0àÉ3Ëçngc”n8ò-ùa”fdŠ¬©Ótì¤)ä¸MgB‰
+1çþZ0A=Éb¬1·¢È­¨
+y¡1’‘p‡ª=Öp„’—½2%%pÙ’¼ŒÂý ù/šmöÈ•žâ-~k%lÁ´5òw/u–"ܫñffpªþAÖ$“Hc×LGAê>/Á"Æv_´äî¹xw÷Öcè¾RÏÍ&âB=jY×v“Œ€£õN€wÀkŠaÌ™7ï6w¯Î°ÅPC&™«@ø4œ‘K¿Wë“¢,›EŸ÷»Ûyóvsg›—í~¨53záø$'ŽÈϧ¡ÔE+gÄÙÙNÄ^趄k@‚‹ºDAzQcGìíNî(”aÌ6 0ëÃ…6ÃÄÍ‚ÐV6;Éàð<Œª“ô}ƒîÁAÚ~+tCÛÀ0@¸*–}¡•ß@ÅŸcì{µo§¸.vª<uo¶æú—DNÒ™-CÕ­õ"ö‘Ï{ÒðZ™
+gFq¹C§ù·Èш:Óùz!›x" ¤nǁÏavÇÏù¤¨LâЕe©qB’5Sp_›wMÉhìF·‡åË
+f§Eî{4=ɸ¹Á÷÷jƒ‹FÂ~ä XÛÊ$øÂA½åÞ÷&„Þ~Ül_/)¿ëÖ4–Ù‘Ÿ¹ßƒÝ½ü„¢Õ¶ÝOèíq{C`èþH5À·rÚåP×j§¥YL&:šÀK*»À„¨Ø)7Ð`1õr Â’/ŽÎˆgÏÚ-?öÕ0€Ó4:žØPDË0ûZ«m´hÓšõfûÏEE-pàÞ‹#
+yè9PxŸ™(߃à}v¤r/Œ£y¤<£Ì
+‘€	.M>'Ä1@,Ò¿	 >‡ù÷	™Žó„¼<ÍœAz9[i~êÁüyöTH Z°C\ýpßo8¼¸V\©8P+F³¹Æˆ0bÛaæáG=Hžž,ÁÅäQ3χwYòs¥qY€ìÜ‘…˜¤´G‰V(‹)-ßõ˜c¸ß«®W@òF»UYÞN¬:¾yí¼öB\JPN~£Keë YIèÛNÉR³û¬ÁJÖkÚjûºdÊÜ{Æø{»Ã#ÐKiz ”¬Ï¤
+Œ}4Æ!|ì˜aÇ– ~Ád8]êÔ?
++Ù—,›uås·Í§#žvŠ%ï핏=]+)$Ì=±å­Ñö)^³`nÙpªº¶„•Zèö%ª‰à–‚céðCo‘¼0w¸ÅÁ½Q×t¹=òrßö¼¯!üÃ*Ž]JG¼p¼ySb"[Ï1]¨Èuytê°4Ø-8wxæÊ'd±MÙó7Ã`N#G& ÓÂ…LÇÍÍ”ÊÍUG“9PPÉ­0߹ꇪøÖ‚+ýÂÐ/N‰/•âì;ç!5;•îí? µÆNÉS;6ÓÃÀÙ«º¼î¬ÖÍ5y–ž6ì.Ž­Í
+x¤+‰^±è1:5Qqœ¨Dq}PFõÒrÚdÈ9l)†mÚšÒ•Wdµø[N¾9höz:…&z&µáHÚìl]‰•aç*©bžSÛÂF&ÐßÖÇ‘_HUА;ÚRÀ¨TÖêkŒý½BÉ7¼¤AKØÂåù:(ÞcW«'~èå8iëåB€¾Þˆ‡G®žyÕÉiVa!c?·\RÙ§H+îçŠ2°*µÕ>[w:@ÎãÈRáè?).0g•§ã’žkðÊ×ÜBßQ¯éyOÉÉíÌ¡,kœ¶-3¼ŸZ†¼*­dÎ1 ^d
+`ð¡‹é/} "ÕØ¿h©¶Wñ{;uçfð9ðIjÉp	áSwnïP|Ls%<tiEÚgxŠe›^ô
+bÄ‚³] án‰Ú¾œdOv*”åwûÈ£Ôô¯Úô…Ñê/ëÙZ5
 endstream
 endobj
-9354 0 obj <<
+9343 0 obj <<
 /Type /Page
-/Contents 9355 0 R
-/Resources 9353 0 R
+/Contents 9344 0 R
+/Resources 9342 0 R
 /MediaBox [0 0 612 792]
-/Parent 9350 0 R
+/Parent 9340 0 R
 >> endobj
-9356 0 obj <<
-/D [9354 0 R /XYZ 100.892 685.529 null]
+9345 0 obj <<
+/D [9343 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1914 0 obj <<
-/D [9354 0 R /XYZ 100.892 325.945 null]
+/D [9343 0 R /XYZ 100.892 325.945 null]
 >> endobj
-9357 0 obj <<
-/D [9354 0 R /XYZ 100.892 298.52 null]
+9346 0 obj <<
+/D [9343 0 R /XYZ 100.892 298.52 null]
 >> endobj
-9353 0 obj <<
+9342 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F88 5678 0 R /F72 5679 0 R /F85 5513 0 R /F17 3698 0 R /F15 3700 0 R >>
-/XObject << /Im37 9083 0 R >>
+/XObject << /Im37 9069 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9361 0 obj <<
+9350 0 obj <<
 /Length 1583      
 /Filter /FlateDecode
 >>
@@ -45935,28 +48776,28 @@
 ãNo¾ó:“9¿ÞŸÎ -J“GŒÂ}5ÏxØo¶²–²È<Û‘ëé’Z¤`ôÊåËÒíËÍC9z´'¶\î,NÓàq¶Ûüç¹Lk´î# O (L.¡v"îÉ î¦ê‡{f¢qÐN|ý(œFL¹UíƒÀC?šÁ‚týÏ’ô./#"ópþ…ºb¥î@#‡u›‰ñÛ%|×1ªùóVÖ/^ù£!sÖù¥Ï…@|€jd²Fc§ù4z£Ên§ÀWÛ]ËÎ)}>ó—Ë{á¿Šýi£ÿ eÌ´£ØŽ¨@Rzn²Ü¢‰£°>ðà1Zê‘çq;´[ÚG ¶ùdó/–åÑïð!V†Ï¤ý¶µõO܆§ŸÍi¥¶ü/\Áß»
 endstream
 endobj
-9360 0 obj <<
+9349 0 obj <<
 /Type /Page
-/Contents 9361 0 R
-/Resources 9359 0 R
+/Contents 9350 0 R
+/Resources 9348 0 R
 /MediaBox [0 0 612 792]
-/Parent 9350 0 R
+/Parent 9340 0 R
 >> endobj
-9362 0 obj <<
-/D [9360 0 R /XYZ 151.701 685.529 null]
+9351 0 obj <<
+/D [9349 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1918 0 obj <<
-/D [9360 0 R /XYZ 151.701 312.736 null]
+/D [9349 0 R /XYZ 151.701 312.736 null]
 >> endobj
-9363 0 obj <<
-/D [9360 0 R /XYZ 151.701 272.756 null]
+9352 0 obj <<
+/D [9349 0 R /XYZ 151.701 272.756 null]
 >> endobj
-9359 0 obj <<
+9348 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F59 4373 0 R >>
-/XObject << /Im3 6520 0 R >>
+/XObject << /Im3 6519 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9366 0 obj <<
+9355 0 obj <<
 /Length 1844      
 /Filter /FlateDecode
 >>
@@ -45976,35 +48817,35 @@
 p^—4m¬Š§õ*Ò;Pɨ&;‡…+[sÁu8á ²ÇðÛ÷{§”涌=FèmÇ~VÕØÙÕ~ÀI¤[Û3ˆìœdL”ˆ4êý„l9ËHÐzf͏g‘›ÐY"ÜgŸ­`7³§×å"ÅæFøfŽ~š,mfâu?’å	¿Gµ£mk³kQÖ4o¦¼Ìüñ¡û.ªÔ0
 endstream
 endobj
-9365 0 obj <<
+9354 0 obj <<
 /Type /Page
-/Contents 9366 0 R
-/Resources 9364 0 R
+/Contents 9355 0 R
+/Resources 9353 0 R
 /MediaBox [0 0 612 792]
-/Parent 9350 0 R
-/Annots [ 9358 0 R ]
+/Parent 9340 0 R
+/Annots [ 9347 0 R ]
 >> endobj
-9358 0 obj <<
+9347 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [169.494 605.148 349.03 617.14]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.cups.org/testppd.php)>>
 >> endobj
-9367 0 obj <<
-/D [9365 0 R /XYZ 100.892 685.529 null]
+9356 0 obj <<
+/D [9354 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1922 0 obj <<
-/D [9365 0 R /XYZ 100.892 190.732 null]
+/D [9354 0 R /XYZ 100.892 190.732 null]
 >> endobj
-9368 0 obj <<
-/D [9365 0 R /XYZ 100.892 166.52 null]
+9357 0 obj <<
+/D [9354 0 R /XYZ 100.892 166.52 null]
 >> endobj
-9364 0 obj <<
+9353 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F88 5678 0 R /F72 5679 0 R /F52 3737 0 R /F53 3738 0 R /F89 6121 0 R /F17 3698 0 R /F51 3736 0 R /F15 3700 0 R >>
-/XObject << /Im37 9083 0 R /Im3 6520 0 R >>
+/XObject << /Im37 9069 0 R /Im3 6519 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9373 0 obj <<
+9362 0 obj <<
 /Length 2290      
 /Filter /FlateDecode
 >>
@@ -46032,34 +48873,34 @@
 ÀÈQ¹GûÛnÌ–ìY$ÒÌ_|‡qì¿¿»;ŸÏn½çn¿H=ý¡¿’µZuÌôŒZþ¾â½þ‚¥þ³dð-
 endstream
 endobj
-9372 0 obj <<
+9361 0 obj <<
 /Type /Page
-/Contents 9373 0 R
-/Resources 9371 0 R
+/Contents 9362 0 R
+/Resources 9360 0 R
 /MediaBox [0 0 612 792]
-/Parent 9350 0 R
-/Annots [ 9369 0 R ]
+/Parent 9340 0 R
+/Annots [ 9358 0 R ]
 >> endobj
-9369 0 obj <<
+9358 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 341.208 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.cups.org/ghostscript.php)>>
 >> endobj
-9374 0 obj <<
-/D [9372 0 R /XYZ 151.701 685.529 null]
+9363 0 obj <<
+/D [9361 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1926 0 obj <<
-/D [9372 0 R /XYZ 151.701 600.743 null]
+/D [9361 0 R /XYZ 151.701 600.743 null]
 >> endobj
-9375 0 obj <<
-/D [9372 0 R /XYZ 151.701 570.184 null]
+9364 0 obj <<
+/D [9361 0 R /XYZ 151.701 570.184 null]
 >> endobj
-9371 0 obj <<
+9360 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F51 3736 0 R /F53 3738 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9378 0 obj <<
+9367 0 obj <<
 /Length 2024      
 /Filter /FlateDecode
 >>
@@ -46082,79 +48923,82 @@
 “xpàsrÈÑT!œú¾ùv»=ŸÏ¬È+z•_ä¶w\n6Åψ[¨œhï¿à=ÿâú?*
 endstream
 endobj
-9377 0 obj <<
+9366 0 obj <<
 /Type /Page
-/Contents 9378 0 R
-/Resources 9376 0 R
+/Contents 9367 0 R
+/Resources 9365 0 R
 /MediaBox [0 0 612 792]
-/Parent 9350 0 R
-/Annots [ 9370 0 R ]
+/Parent 9340 0 R
+/Annots [ 9359 0 R ]
 >> endobj
-9370 0 obj <<
+9359 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 262.155 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/)>>
 >> endobj
-9379 0 obj <<
-/D [9377 0 R /XYZ 100.892 685.529 null]
+9368 0 obj <<
+/D [9366 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1930 0 obj <<
-/D [9377 0 R /XYZ 100.892 566.401 null]
+/D [9366 0 R /XYZ 100.892 566.401 null]
 >> endobj
-9380 0 obj <<
-/D [9377 0 R /XYZ 100.892 540.844 null]
+9369 0 obj <<
+/D [9366 0 R /XYZ 100.892 540.844 null]
 >> endobj
-9376 0 obj <<
+9365 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F29 5413 0 R /F59 4373 0 R /F17 3698 0 R /F53 3738 0 R /F85 5513 0 R /F52 3737 0 R /F88 5678 0 R /F72 5679 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
-/XObject << /Im3 6520 0 R >>
+/XObject << /Im3 6519 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9383 0 obj <<
+9372 0 obj <<
 /Length 1828      
 /Filter /FlateDecode
 >>
 stream
-xÚ¥X[wÛ6~ϯУ¼1¼êÒ=­M›¹gí¼ÆÛº=¨Sk³$O¢öß (Çv•œìì%†@ø~ ÁðèsÄ£›‹—Ë‹«7†G‚³‚"ZÞE–q¥yÁL¡£e}Œuªg.ß^½‘2ÊY‘¦M%ÏWVòF¯~]ÜÎet¼èëÖÕígúºÝm· ñ¸›ÁŸÞÍ¡E¿Z—[g{²‘׿x½¼øçHGHS*Z5ÿäQco#ÎT‘G÷Þ²‰”ÉYjÈ›èöâ—~¼½<„`…1’¶—1žÃ¢R0“„ü}çìèÿÁ;êB2eRtÐRK29’i0ÌŠ«y#¢ëàürJÆU“£e=ÊLžB‘–ÓÈÀ!ä* \®mo!x<OãzBÙzÁÄuA–9þô®l]°¨ê?¸P0µ]³?yKëÐôÿXÛ†¡Q—ÁB@ÅŒ†º©7¥w1Kr°7÷š$?ó+°éê–~‘/HìZÆ¢TnŽw.AÎÒ|äT¹ÝnêU™x,É8è!²pu×^m»Á
-«¾Þ:Zó4šÀÇ%/gI–ËØ­GZ¨¸©GQ>)+×â‘w»o+FÈDªb§±Zí¶Cò_±YR¨,þ}]oì­YšåS@žö¨83yv
-)”f&n¬ç
-Š®£_äG[ú¨ì¾^Ù¤n+¤ÖaSÿÕ}"³n‹HšwÄÂ)ù¸keb`¥ÞxYÇ%®ƒ«7²évn¨«0Á­g"2VšóEV]ë˜`¶	,¯*[MAnÀºêš¦l+üÐñ¦Fz¢:ìÀkm»¯û®m,
-÷”uùiƒT7>fH²Gº_N ?¡î9•žAŒ1rä@S¯Y&âu¹·$aŒ‰–ÁüdãþÈ °>YƁûí`{¡òCP¿;’üy¡Á]¸[ç«Ò•a‚ìæn*ÎpÃï©tṄMCà`@ ås©±´Á¨)b×—í€ì:4>2¤ïîh6±„϶µ}½šrxTåALˆI™ÔéO)!!°Å!q+äÃæiGjLŸñ<$øÓg55¤Õ
-µ^aî©xoûÁï^fòQô™fùcué9dÊ2@¡N6AuÖÀåÇdÅr¡y6Bop Pý©ÞÔ.pýy¬§æ`bx!êÁvpÝv˜‚ªr–Ëô)d=ô«<šˆáæ”`yáÝ€Yš	¼BiÉ…J,%$>r“:¨‰ù ,×(@‚K2îHYuVSen$òÁ{¢ÃQp{ˆâÉGLuhqN) @p5éSKðHÍ„Tß,¡3˜ý¿7óŒEÎ7ã; a¦ÚPü0"?î05œÄ
-û
-á_CéÞ„{>¸}5÷¤œ“³_ü… ÒøÇEróÓ%©×o.iÂi±¦×¨ümŒýå€\X˜¾NÞ&Mù1hßœ} oÌÞ›¹w¨U¼xsIúåüͨ|»x=jëÎuÉ«ë0rûëûäC9 ÙQµ}ñþÝå1€ž‹— N$\‰·7óäâ¼y4~öÕt½¥Ru¢
-×}Ð
-Cçã·ªKàø;ØЩÂë0ç¬ÛÃÉ÷5\Ñ~´vA5fêÀ(«EvÜŒÃ4gyŽWJf˜G‚óÐXª4—³BxWðz°¨‚·C×
-$~Øá=LÎ/\™3©N$sl6Ê
-1æ9å9êB3á—v-EE ôP~®¬[]a}½jêÆ2(ûIç0¶â¨¾rŠ9ø*±ÅAï¡ý|ðPµë²Á¨Û0Ň7ôÁʧØ	ËIà,Ë ¾{*´–ú¡¾;€’~ØT!y)L¨Ê&HUÝÛ•ëú¯D*´Úm}ïØ…Iƒ+{·Ûb¡ZÀ5?X8ì×XH',´A(1RœµÓØšù;(‹Û²ñ¯K”}!à9ÀÜ:(°H¦aB†½åsgÐНOj’q2‘…{ÿ˜‰©ÿá$>½°TânË äË
-ÛžÒ®Úá#
-gR¸ahĉò]ß5ãÁ.ìÛëΰ+Q’ã t°nWn¦j×
-»°R
-òqúj€‚æšrMܺÆáØöXlhÓŒjØÏØD£…ýR6ۍ¥%¨·FuH>7õß3zkŒk¿˜â1 VƒFL4jö™4µoøè6±RA û‡.ã›jqìeéwªÃ)ˆtx:;Üüßt4<…ËüP,žp§¡Úeú¼©!7÷ôB‡åßžU4€E6ݾVwS.Áxqx>”aOÄ!ŸyJ@¹4ÅYiñ7 W§4À¯`¨TÏi§Ï*¥Â¡8Áîˆúßã¥|h<ՁÉþ¹‹’-gà'¶ZãÆ_h½þ÷\Õê
+xÚ¥X[wÛ6~÷¯à#Õc¸òÒ}jâÄ«œMVÕ݇¶´ElERKBròïwÊ’Bû¸§/Öp0À||3˜G_"Ý]½Y^ݼ7<œ¼Ñr	#XÆE”æ3…Ž–Uôk¬S=û}ùáæ½”QΊ4Õh*yθ°’7zûËâ~–(£ãE_·®n¿Ð×ý~·‰ÇÝþôn–-²øí¦Ü9Û“”¸þÕ»åÕÿ®pA€t‚Ä0¥¢Usõëï<ª`ìCÄ™*òèÑ[6‘29KyÝ_ý|ÅO·—瑬0FÒö2ÆsXT
+fÒ‚êœý?y'C]H¦LŠîãBjI&'2
+†™Aq3oDtÛœŸCɸjr²¬G™É³C(RØr8„\”ˍí-çi\A([/˜¸n È2‡ ßޕ­Uý
+¦¶«qöƒ·´Mñµmu,Ô‰PÌè€a¨›z[z³$ûóïHò3¿;®né©ñ#‰]kÃØ@”ÊÍéÎ%ÈYšœ*w»m½*%=$C®îÚ›]7¸aÕ×;GkžGøâ¸äõ,Ér»
+àHw õ(Êg eãZ\ ònmÅ™H5Pì<V«ýnHþ
+26K
+•ÅÿÝÔ[;Dk–fù—½ *ÎLžÃC
+¥™‰빂¢ëèù‘Å–>*{¨W6©ÛʆéuÆ”ÇtdÖíIXsM,œb»V&Vê­—u\"áúð1¸z»%›n
+Üf&â c¥¹\dÕµŽ€i f›Àòª²Õäf*Lkš²­’mÌL…Æʐß(ÛöP÷]ÛX#0?ûëòa‹,GÕƒg>ÉÈôë©Ããg¬½dÑ+¸",FŽÇß”Ák–‰xS,I^bd0?Û³?-¨©O§•q };ØÞA”ü”îŽ$Th°@W îžÀùÁªte˜à»]O…ø7nø#U-<’°i`{.5V55Eìú²ÖûÆG†ôÝšfq@øb[Û׫)‡—@µQÄԁ˜”Iþõl[Ó·BŽ0lþ—v¤ÆÌÏC‚?}QNCF­°F릝Š¶üîe&ŸEŸi–?W’^C¦,êlTb
+ÜK0pJV¬šac ô6 
+Õõ¶v‹8èÏëh-8õ[À»PvƒëvÃT•³\¦OH!á¡m`XhäÉ4@—¦˳ïÌÒLà]ªÒH.TbÍ(!ñ‘ûГÔAMÌa±¸EŠ܏qGʪ{²šªp#‘¾Ø͍‚‹C/v7¢`Ò¨cws¾H‚[±H_Z‚GÒh&¤ún	Ád8迵ȸ™W,r¹ßü3Ձ*à‡ùis©±^cË£!ü¨ÚÛp%ÀçO÷oçž”s²sö«¿Tÿs‘ÜýëšÔ‹Û÷×4á¼XÓ[TþgŒÁ	pC`aú6y‘4åÄ u¼8ú@ߘ½wsïP«xñéîšôËùûQùañnÔ.6ë’··aäþ—OÉçr ²£jûâÓÇëS !=o@H¸
+ïïæÉgÄy÷&hü$ì«ézK¥êL
+®û †ÎÇoU—þ2Àñ°¡9R…waÎE£‡“k¸ýhí‚jÌԁQV‹ì´‡-hÎò<¯”Ì0	Ž硧Ti/g…ð®àá`Qφ®=Hüþ¼Ç{˜<\^¸2gRHæØg”bÌsÊsÔ…>Â/ì<YŠŠ è¡üÜX·ºÁúzÓԍeP>“Îa
+ôjÅI}åsðUbwƒÞCçùä? j!ÖeƒQ·aŠoh•O±3–“ÀY–üð<Tè*õS}ö %ý
+±-¨BòR˜P1”Mªº·+×õ߈Thµßù¶±“Wön¿ÃB
+´€k~°4pÜ+®°NX„iƒPb¤¸è¤±5ówP·eã–(ûBÀs€¹Û;RuP:c)&LÄÛÊ×Π¡µOj’q2‘…ÿŽ‰©ÿá$¾º°TânƒË äË
+»žÒ®ÚãûgR¸ahĉòºïšq`öíuØ•Î(Éq:X·/·Sµk…]X)ù8}
+ÈŽ5 at A_M¹&nSãpl,6´iF5ìßØD£…ýZ6»­¥%¨·FuH>·õŸ3zfŒkÿ8Åc@¬ ˜hÔ*ì52ižkßð½mb¥‚ öO]ÆwÕâÔËÒïT‡çQéðtv¼ù¿ëhx
+—ù±X¼àNCµËôeSCnéùƒË?=«ži ‹lº}­ÖS.Áxq|>”aOÄ!ŸyJ@¹4ÅEiñ7 Wç4À`¨T¯i§/*¥Â¡8ÃîˆúÿÀKùØxª#“ýr%ZÎÀOlµÆ ¿Ðzýô¦ÔÚ
 endstream
 endobj
-9382 0 obj <<
+9371 0 obj <<
 /Type /Page
-/Contents 9383 0 R
-/Resources 9381 0 R
+/Contents 9372 0 R
+/Resources 9370 0 R
 /MediaBox [0 0 612 792]
-/Parent 9386 0 R
+/Parent 9375 0 R
 >> endobj
-9384 0 obj <<
-/D [9382 0 R /XYZ 151.701 685.529 null]
+9373 0 obj <<
+/D [9371 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1934 0 obj <<
-/D [9382 0 R /XYZ 151.701 309.406 null]
+/D [9371 0 R /XYZ 151.701 309.406 null]
 >> endobj
-9385 0 obj <<
-/D [9382 0 R /XYZ 151.701 281.57 null]
+9374 0 obj <<
+/D [9371 0 R /XYZ 151.701 281.57 null]
 >> endobj
-9381 0 obj <<
+9370 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F88 5678 0 R /F72 5679 0 R /F85 5513 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9389 0 obj <<
+9378 0 obj <<
 /Length 1548      
 /Filter /FlateDecode
 >>
@@ -46176,92 +49020,88 @@
 ˜pòÌGÁ‡åfaãçŒê{ïÆf(Þ˜¹­Cqzì{´s&í•vÑÞÂ9ê¡S‰˜öR"¦¤Èí©:8MèkÀŒ]ïíiÚö³ã§ÚÓDp2ÏúÛnÖµ ª'’ž¼üä>‘¼|¹ºÀ3ß.¦™e\ü–=ͲÉŸNúäöìš¶Ò¬ýk¶Á1ûœ´¬Ãõ=|_Ï¢7i3Gîc“ÓŸš±}õOøTþß${
 endstream
 endobj
-9388 0 obj <<
+9377 0 obj <<
 /Type /Page
-/Contents 9389 0 R
-/Resources 9387 0 R
+/Contents 9378 0 R
+/Resources 9376 0 R
 /MediaBox [0 0 612 792]
-/Parent 9386 0 R
+/Parent 9375 0 R
 >> endobj
-9390 0 obj <<
-/D [9388 0 R /XYZ 100.892 685.529 null]
+9379 0 obj <<
+/D [9377 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1938 0 obj <<
-/D [9388 0 R /XYZ 100.892 371.099 null]
+/D [9377 0 R /XYZ 100.892 371.099 null]
 >> endobj
-9391 0 obj <<
-/D [9388 0 R /XYZ 100.892 344.885 null]
+9380 0 obj <<
+/D [9377 0 R /XYZ 100.892 344.885 null]
 >> endobj
 1942 0 obj <<
-/D [9388 0 R /XYZ 100.892 230.47 null]
+/D [9377 0 R /XYZ 100.892 230.47 null]
 >> endobj
-9392 0 obj <<
-/D [9388 0 R /XYZ 100.892 201.722 null]
+9381 0 obj <<
+/D [9377 0 R /XYZ 100.892 201.722 null]
 >> endobj
-9387 0 obj <<
+9376 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F85 5513 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9398 0 obj <<
-/Length 1647      
+9387 0 obj <<
+/Length 1651      
 /Filter /FlateDecode
 >>
 stream
-xڝVKsÛ6¾ëWpz¢f"  >NÄ‰SwšŽ;R:Ir )Èb#‘ÚÑ¿ï.”(›q’^ÈÅâõíî·‹eÁ]À‚·³W«ÙÅ•bgQÎr¬6W<J’,T.ƒÕ:øÊ$™Zý~qÇAåI"qi̲ˆ	'¹E—ïo–ó…P2¼éªÚVõ–}Û‚ÄÂfŸÎÎ\ò4¼Ü­Õ­‰c<öf5û2ÃÒ‰Š„ÊýìÃ'¬aî÷€E"Ï‚·r•E‰R ï‚åì¯óæ±03†­™ þmnŒaßÅWãMq)1˜»ÚjÀ.DXÏã4ì÷º«JRà1N¸~MÿMƒf
-ÚaÏq	üâ,Ôä,·àº9h¬^G°œ° 0!#ç©7àÏg
-È¢8ËŸX`lçÈpÓ5{ÒÁ6]uWÕFtW,êb¯iuam7çauÛ[ý=¼t÷`[ٝ~qå"þYÄàÞÿ	’®s =)ʦ­´y¤È"©’onx<<ñã~®’°Øõú›øú=îG‚¤°yáq-ús<°3Ÿ7­­šúyƒ¤ŠbÅŸäY+‡3¾s»?eì̏ŒËv¡yî~ÅÆQÿÈ£‹Ýî #($ó¸$?%
-é;ý¥×ÆÒÝHxPµ!ý¾2(ôG1­‚jdhRmÉí¥?e]ØC” 1‘’Þ¥½†å	 ØvM·¥Z	6MJ£$?rÄØ5 at vËždh"’‘å<š/dµ¤¦+ö
-Z†RYm^`ý n{]eè¯sðú?t•Õ$ô3Õ¾Ýéa¶À"¥¨#;³Šn|n§)»ªµÄ…,­×$kä÷WL1ƒ’­@²sìY¤xCÿ}ñÙ­Ä÷)ð€Ú¦ûìG•Ý’„Kä–œG¹Rñ²qŠ…PER*Šµ1’€…3¯‘>˜p9ƒ3’(á	í}	Há½RéûªéÍî@cc(Êào™çá
-Ò
-"±ô‘‰rÆãB—Å(”šXÙ;R\DÞ„}aýŽ†þ…[ïï{ÿçõ?v…[ˆ;8^*x-ÀÑŽûiHï­TqhÆê=Ð&cqx5ÏDè
-NÃF[2áßmœ¾ÓµîÀJC§w…q4N¹pZ ;¥†ОuS/ü5Ž€pY¢äJ0±GŽž¹Žªˆ‹Ä$£ó^õèš\†[ç¤\…[b(p¦6¤ÁTÆ5w]OJ£‘•¨njí…
-MQ`@azOö¦³Ú¯v¸—$Sl
-Îí‚p4àWð³TX‹jŒ[:¸"Øõ)è>r!Û
-!uã· 0£I¬jŒ©³F' ¸ª¡ÿ¥)Xy‰½ÞÚ„P,A ¦‰bÆÐPãÓfÊNãMÔÕMœíß.^./¯O¯ilõW ØÄ×WXtY¾FÞþ}íG®G‚ÿo7‹· XÁ‡
-“½-÷žƒã‰Jï6TáÃLåÿÅÎÕ“Â¥•×¹Ý°åÝõ»7þ7íËUˆìq…qx¸«Êߣ‹üá«âDeáúT5®æl¯‹š:—
-pä†uÌ|T¯¡ð”za<¢²BëJšk‡t§áè1GŒtÝ™»)ÈY·$\áõ¨»p‡ïB×k—Å öäFäp'5ÉOX «oð _b®¿¿Á´§
-EíÏ$kI0IHrœ,wT‚„$þ5€%e	-Kaá0c›Öø·3•YølßÇŒÈN
-Ú¦0])4¨t©	J8žjÆÐj_Ü¡]©ò™Ñƒ0Áª\F	S9ÜnÄ=E$¥ +ÈN<"ø˜Ñ)¯±@à­§$IÉ"M(²Q
-àÂ
-ý}
-€d‘__§À.8ôd±È5J…ûz•}kßɉŒ¹Æb”Ž™1öÄ-¿Sr‘¿‡Ó0 Øî¤Ð¼ù,"ÚûÇ9Šýäøh`pùð(ƒfÔ+¢~H 7Wì Ü­43‘¸æ”gÇÒÓIre«ò×Vþd³mpÛCíÕõYûû˜IWÕ]ßùÖZy¾øC8Ù1ßÉQ¤|DáÛÒ|ªùIý³f¾EAÁ¡MlÅ>3Ž]+ŸÚg	Ÿè¨–õ®cAɵ£ð/WÆîç®å´S”ã22~dýO”]h¢¡e6Òþäô8â1Ÿ:‰|æñáÿf5ûT)mê
+xڝVKsÛ6¾ëWpz¢f"  >NÄ‰SwšŽ;R:Ir )Èb#‘ÚÑ¿ï.”(›q’^ˆåâõíâÛ½ZÍ.®8‹r–ó`µ	¸âQÊxdy¤r¬ÖÁ‡P&ÉüÓê÷‹«8²(O‰Kc–ELp8É-º|³œ/„’áMWÕ¶ªïèoÙ·-H,læðéì|Á%OÃËmÑZÝÑš8ÆógoV³/3< ¨Hˆ ÜÏ>|bÁæ~X$ò,xp+÷PY”(ò.XÎþš1oû3cØš	²àßæÖÁö]\q5ÞÇ‘ƒ¹«­ìB„õ<NÃ~¯»ª$ã„ë×4n4SÈÐ{ŽK`ˆ³P“³à¿×ÍAcõ:z„åÜ€Y©8'H½>k@ÅYþÄc;@†›®Ù“ö¶éª»ª.ðExÅ¢.öšVÖvsV·½ÕßÃKwŸ¶•Ýéç§Q.âŸEîýŸ é:Ò“¢lÚJ›gAŠ,’*ù1àf€ÇÃ?îç*	‹]¯¿‰ßQ ßã~$H
+›ÇÑ¢1Ç;óyÓÚª©Ÿ7Hª(Vü‰Ažµr8ã;·ûSÆÎüȸÜi÷4ÏݯØøÕ?2ÅèÆb·;ÀŸ€S.ŽAƒ¿YØé/èu^7––ÐѬXµ!y_Lz2§U”Mê¯-…g	áHªua„Ts€Ï\DJzßnܲl»¦¿ÛRÒãǶ¥Q’Ébì°»eOB5ÉÈ<š/dI¥¦+ö³
+¤²0Ú Üë*C£.ÌÁCjh|è*«I,h0Õ¾Ýéa¶h½ÑÙ™%}ãs;MÙU­%R`i½&Ù¹ü+ÆšAÉV a:ò­ãzCã¾øŒ4×Çð±ð€Ú¦ûìÿ*»%	«Lä–œG¹Rñ»qŠQER*ŠI2’€…3eIŸ@L¸œÁI”ð„ö¾¤Pø€]ú¾jz³;п±Ðü-ó<¼AÞÁK,½Gd¢œñ¸Ð…3
+¥&zvÅŽQ†â°/¬ßÑÐX¸õþ¾÷^ÿ³poÁÎ_áÞ/”
+p´‚4¤Â+Ušƒ±z´ÉX^Í3ºLƒSç°Ñ–LøŽÓwºÖXièô®0®Rã” §°#Pjˆ í¹P7õÂ_㸠—%J.{ä¨Þu”NÜ+À›dtÞ«]“Ëða뜔«pKÎÔ†4̸æà®ëIi4²ÕM­½°¡)zP˜Þ“½é\„£Îá^’LocèçÜÞáŽü
+~–
+“Rï–î„ìz‡t¹íˆ†¿ºñ[ ˜Ñ$V5¾©³þN at pUCãðJS°ó›,¼µ3¡X‚@;MÅ Œ¡¡Æ‡)Ì”Æ›¨½›8Û1^./¯O¯éßê¯@°)ˆ¯¯^`_˜‡¯‘·_û?×,ÁøÛÍâí VpæKNö¶l\a-¾'*½ÛP5†3•‹Ë'…+¯s»aË»ëwoü9nÚ§?ÊÙã1â:ðpW•¦‹üá³âDfáV5Îæl¯‹šZ˜
+pä†uŒ|T¯!ñ”za†*T¡u%͵C¸Ó飯#FºîÌÝôÈY·$\âõ?wáߎ®×.ŠAíɍ,ÈऺŠòÀêÛ<È—ëïo0ìiCQû3ÉZ’L@’ÜN¦;JABÿ…À’²„ÞÀ…°ð	“‹±Mk|íLe¾Û·Ã1#²“‚¶)WzTºÐ%OŠG9chµ/îЮT
+q‹ÌΨ L°*—QÂÔ@·qOI)è
+²>FtÊÂkLxë)HRr†H
+l¸pC£,râàóë؇æ,–â¹F¡p_¯£²oÍâ;1‘1×XŒbÂ13Ææ¸Åäw
+.ò÷p>(¶;)tÖ>ŠˆöþÄqŒb?$9
+|\>eÐŒšFÔä护»õf&"ל"ãìX*íð"IÎ!mUþÚÊŸl¶
+n{¨½º>ëƒ3骺ë;ßA+#Ï'!æ[ 9j”o("|[šO5?©/kæ[ú×ôÈV×*Ç®•„áPq,| £~XÖj¤cjGa,—Æîç®å´S”ã22~dýO¤]h¢¡e6Rrzñ˜OŽD>óø0¾YÍþyp
 endstream
 endobj
-9397 0 obj <<
+9386 0 obj <<
 /Type /Page
-/Contents 9398 0 R
-/Resources 9396 0 R
+/Contents 9387 0 R
+/Resources 9385 0 R
 /MediaBox [0 0 612 792]
-/Parent 9386 0 R
-/Annots [ 9393 0 R ]
+/Parent 9375 0 R
+/Annots [ 9382 0 R ]
 >> endobj
-9393 0 obj <<
+9382 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 180.189 206.516 191.757]
 /Subtype /Link
 /A << /S /GoTo /D (4small) >>
 >> endobj
-9399 0 obj <<
-/D [9397 0 R /XYZ 151.701 685.529 null]
+9388 0 obj <<
+/D [9386 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1946 0 obj <<
-/D [9397 0 R /XYZ 151.701 412.352 null]
+/D [9386 0 R /XYZ 151.701 412.352 null]
 >> endobj
-9400 0 obj <<
-/D [9397 0 R /XYZ 151.701 387.857 null]
+9389 0 obj <<
+/D [9386 0 R /XYZ 151.701 387.857 null]
 >> endobj
 1950 0 obj <<
-/D [9397 0 R /XYZ 151.701 166.721 null]
+/D [9386 0 R /XYZ 151.701 166.721 null]
 >> endobj
-9401 0 obj <<
-/D [9397 0 R /XYZ 151.701 139.901 null]
+9390 0 obj <<
+/D [9386 0 R /XYZ 151.701 139.901 null]
 >> endobj
-9396 0 obj <<
+9385 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R /F85 5513 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9407 0 obj <<
+9396 0 obj <<
 /Length 1328      
 /Filter /FlateDecode
 >>
@@ -46282,21 +49122,21 @@
 –#)‹¸$°™Nþ½Äð÷ 6l{ˆÿ.ïñ½ãtL_†D³LÆþqŽ…Oæ¦`qr˜›îÇPZ)y@®QrÙÇ-HƸKï}¤&	Ñ?ÂÍ; úØÄáµW;^ÓYÿB„¡[ÞûLäMšT‚{ÀM,›ºÞ+„7ÙæÔ¾Q|/¿Q•9VÛZ¶ï¦y›Ê€S3G•ï¯ß¿Ç9ä'Ô¤ÁÆÊíw©ÜŽÃ
 endstream
 endobj
-9406 0 obj <<
+9395 0 obj <<
 /Type /Page
-/Contents 9407 0 R
-/Resources 9405 0 R
+/Contents 9396 0 R
+/Resources 9394 0 R
 /MediaBox [0 0 612 792]
-/Parent 9386 0 R
-/Annots [ 9395 0 R ]
+/Parent 9375 0 R
+/Annots [ 9384 0 R ]
 >> endobj
-9394 0 obj <<
+9383 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 780
 /Height 412
 /BitsPerComponent 8
-/ColorSpace [/Indexed /DeviceRGB 31 9411 0 R]
+/ColorSpace [/Indexed /DeviceRGB 31 9400 0 R]
 /Length 22152
 /Filter /FlateDecode
 /DecodeParms << /Colors 1 /Columns 780 /BitsPerComponent 8 /Predictor 10 >>
@@ -46496,7 +49336,7 @@
 ¨ø°f€ ™aŒj,™ €F3Ã(™@3¥ÐÈìl£`P`¹£ À uCà¿
 endstream
 endobj
-9411 0 obj <<
+9400 0 obj <<
 /Length 105       
 /Filter /FlateDecode
 >>
@@ -46504,13 +49344,13 @@
 xÚÁ¡   PS˜ÁEQ5(Kš¨]ÖAÖ4UÓAÏýß{Ç眵֭µ”c¬Öº÷.¥|ßg­sžsBÞ{)¥sBÈ9WJc!÷Þ‚bŒ±ÖŠ1RJ ï½sÆ:{
 endstream
 endobj
-9403 0 obj <<
+9392 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 780
 /Height 418
 /BitsPerComponent 8
-/ColorSpace [/Indexed /DeviceRGB 31 9412 0 R]
+/ColorSpace [/Indexed /DeviceRGB 31 9401 0 R]
 /Length 27639
 /Filter /FlateDecode
 /DecodeParms << /Colors 1 /Columns 780 /BitsPerComponent 8 /Predictor 10 >>
@@ -46748,7 +49588,7 @@
 F43 Ðhf£ š ˜YGÁ(ñ ˜ ˆAPnŒ‚Q Zþ@Œ‚£`Œ `0 ï:/‘
 endstream
 endobj
-9412 0 obj <<
+9401 0 obj <<
 /Length 107       
 /Filter /FlateDecode
 >>
@@ -46756,40 +49596,40 @@
 xÚ` ŸÿÛÛÛttt•••ÃÃÃ"""‚‚‚®®®gggWWW±±±¸¸¸ùùùõõõèèèýýýÍÍÍCCC444ñññµµµìììÑÑÑ£££áááåååÉÉÉÕÕÕ½½½²²²   ÿÿÿ`a?[
 endstream
 endobj
-9395 0 obj <<
+9384 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [175.805 462.747 231.615 474.437]
 /Subtype /Link
 /A << /S /GoTo /D (5small) >>
 >> endobj
-9408 0 obj <<
-/D [9406 0 R /XYZ 100.892 685.529 null]
+9397 0 obj <<
+/D [9395 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5249 0 obj <<
-/D [9406 0 R /XYZ 100.892 660.623 null]
+/D [9395 0 R /XYZ 100.892 660.623 null]
 >> endobj
-9402 0 obj <<
-/D [9406 0 R /XYZ 100.892 643.753 null]
+9391 0 obj <<
+/D [9395 0 R /XYZ 100.892 643.753 null]
 >> endobj
 5250 0 obj <<
-/D [9406 0 R /XYZ 100.892 450.823 null]
+/D [9395 0 R /XYZ 100.892 450.823 null]
 >> endobj
-9409 0 obj <<
-/D [9406 0 R /XYZ 100.892 433.953 null]
+9398 0 obj <<
+/D [9395 0 R /XYZ 100.892 433.953 null]
 >> endobj
 1954 0 obj <<
-/D [9406 0 R /XYZ 100.892 180.584 null]
+/D [9395 0 R /XYZ 100.892 180.584 null]
 >> endobj
-9410 0 obj <<
-/D [9406 0 R /XYZ 100.892 153.759 null]
+9399 0 obj <<
+/D [9395 0 R /XYZ 100.892 153.759 null]
 >> endobj
-9405 0 obj <<
+9394 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F85 5513 0 R /F51 3736 0 R /F53 3738 0 R /F17 3698 0 R >>
-/XObject << /Im41 9394 0 R /Im42 9403 0 R >>
+/XObject << /Im41 9383 0 R /Im42 9392 0 R >>
 /ProcSet [ /PDF /Text /ImageC /ImageI ]
 >> endobj
-9419 0 obj <<
+9408 0 obj <<
 /Length 1992      
 /Filter /FlateDecode
 >>
@@ -46811,21 +49651,21 @@
 £»N÷Ë÷ÉxE@»çôíûž×ÿaS-ó
 endstream
 endobj
-9418 0 obj <<
+9407 0 obj <<
 /Type /Page
-/Contents 9419 0 R
-/Resources 9417 0 R
+/Contents 9408 0 R
+/Resources 9406 0 R
 /MediaBox [0 0 612 792]
-/Parent 9386 0 R
-/Annots [ 9404 0 R 9414 0 R ]
+/Parent 9375 0 R
+/Annots [ 9393 0 R 9403 0 R ]
 >> endobj
-9413 0 obj <<
+9402 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 780
 /Height 418
 /BitsPerComponent 8
-/ColorSpace [/Indexed /DeviceRGB 31 9422 0 R]
+/ColorSpace [/Indexed /DeviceRGB 31 9411 0 R]
 /Length 32394
 /Filter /FlateDecode
 /DecodeParms << /Colors 1 /Columns 780 /BitsPerComponent 8 /Predictor 10 >>
@@ -47125,7 +49965,7 @@
 ` pÜOí
 endstream
 endobj
-9422 0 obj <<
+9411 0 obj <<
 /Length 107       
 /Filter /FlateDecode
 >>
@@ -47133,66 +49973,69 @@
 xÚ` ŸÿÓÓÓCCC‚‚‚ÛÛÛËËËgggµµµ°°°Â£££ñññççç‹‹‹¸¸¸WWW›››!!!­­­|||“““tttììì555ùùùáááõõõêêê²²²   åååÿÿÿ$<î
 endstream
 endobj
-9404 0 obj <<
+9393 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [448.614 605.899 504.425 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (cups-raster) >>
 >> endobj
-9414 0 obj <<
+9403 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.614 294.952 282.425 306.642]
 /Subtype /Link
 /A << /S /GoTo /D (cups-raster2) >>
 >> endobj
-9420 0 obj <<
-/D [9418 0 R /XYZ 151.701 685.529 null]
+9409 0 obj <<
+/D [9407 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5251 0 obj <<
-/D [9418 0 R /XYZ 151.701 581.048 null]
+/D [9407 0 R /XYZ 151.701 581.048 null]
 >> endobj
-9421 0 obj <<
-/D [9418 0 R /XYZ 151.701 564.178 null]
+9410 0 obj <<
+/D [9407 0 R /XYZ 151.701 564.178 null]
 >> endobj
-9417 0 obj <<
+9406 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R /F85 5513 0 R /F51 3736 0 R >>
-/XObject << /Im43 9413 0 R >>
+/XObject << /Im43 9402 0 R >>
 /ProcSet [ /PDF /Text /ImageC /ImageI ]
 >> endobj
-9429 0 obj <<
-/Length 1446      
+9418 0 obj <<
+/Length 1452      
 /Filter /FlateDecode
 >>
 stream
-xÚµWÍrÛ6¾ë)x+4cBd{j›&ã\êÖÎôàä@“Å„‚²G}úîbAYR˜4v§q±X|Ø?쮢à>ˆ‚7‹_n«×qhžëH7ë@DÏò8H³œ'¹
-nªà–]›r¬»íòÃÍ['žñ<MŠÇ9@:"¹8æ	_†"J%»Ù˜e(Å~}wuMÔëºÍPoïiùóPnê wƒ!è$‚ûyåN	´Vɮҥ¿Ý,>/pAøHÝ„K”íâöCT°÷6ˆ¸Ì³àÑI¶L2ž&ˆÖ׋?‘wÁVñ8Vç`:×_s~<Õþ€– Z¢É†×õ=ÊL¢³4™-’ãƒiÐÙd5z/ü³°à88&%»ºeg¬ÚQLó%¯JÅÞl:;Úr¨û‘Ã_*á¹R/qØù÷Z¥×`0@^ð$rÛÓ×1uF©²‰¹ºlA›WÜ3š(EÉ ž£ðt8œ4Ts:‚çIGL	ÉÓ(=Ji
-9
-»¬n‹{3v½W§)+¶zâ/¥`%Á
-»#6^0E*g>#.!‚JelÄç¢TάkŽ[ܹXw»‘Öý`ÞGBá3²ÀÒš=.cÍm·f»q<o*‚ó¸'G§‹‘dîÍÖÅh,êë|-9øÑéw…€Q×.£@›4cë¡k‰r†{f7´Åháù«˜^¿3>;1^héÒÎ'·÷Û@é=ã,­¹Ô‡·ð¤¿»ÛÒwgÑV¤ÆŽ¾eçÜðà<3ŒÎª0N—P»œq*'ĪÀÝÍÂ(b¶†¨9ÓpáMCq¥€=§ç.RöX'ኈÔ[¼¤ZSÕàRâz'bjŒ×pI‰Ô „s)ØnCßIÍ.Çã8Lª¢¹ ¿7WÆ‚µ+%ÀëÖ£Ù¢º%&éDf¼ò¯ìvÖ;gùℏ2õQûk	ÕÊcÙ]ÛCý·™UÑW£‚*à$â?âO‰?›bisUœ‚@O®†£îns8¯@ªÍÁ]S‘«]/:ŠàÖ>TWéªkv&øO±“W6¤‚‹üø½gþ½SÀ]øá•ß‚ýR»Þ¢{ˆk{øFÌ”5ê[~øŽ7O1V’¹”ظDÀlVÊ¥QŸw5ZŽbq–	¡6#&Ùžöº5múGäèj¨ÐÝNI‚ÇI;½ï¥±Ô2ù¤ð¹àþŽÁ9kxO´ÝSN›ö‚Òã’øè	W®ý¹ÕΫ¦¾[•»Þ®¦[Ѧ?9(Ú4”3 Ýs%$ÎR¨Ò‡š0…¨hz;ÛM¡âÇé$}1‡Ã´\høÇuo½û8‡šhëø›¨)OE~®¥éí4F:ÅU¢^ hËþ…f^|×—Í,ZÌó<¾v0Ù…¾úÂ8™ÇÙiJÝu=>¥¹Uså7/Ô0R|™}õé…î˜Å«öm÷ðô³Â¥Ÿ·é¿šò	-T"rÃÊlòKˆˆ>닇| R7w	Üù“àU¤0Ò¿ê¶?àPIšKºaØÓ²^ÓwïZ᎛…¨Tgm©pá
-¶®Ú7rK"ÔሪíOØ33f»–ZRèõ:1k¤L,3ÖY¸FCÔ'Aux,šh×m*’º›ŠÐe׶f(ë¢ñUv[ë‘;Bóv€ó>J¢¦þD¶ÍÖ1zÿÏ“ÛÖä\û)5S¬ó]×ÊÔ¿j—žHõEyøÞtÀë颃†x
+xÚµWKsÛ6¾ëWðVhÆ„| =µM“q.ukgzpr IÈbBŠAÙ£þúîbAYR˜4v§q±X|ØvWQpDÁ›Å/7‹Õë82®³H7ë@DÏu¤¹æ‰VÁMܲkSŽu·]~¸yëÄs®ÓT¡x¬yÒÉÅ1Oø2Q*ÙÍÆ,C™(ö뻫k¢^×Íh†z{OËŸ‡rS ½A'ÜÏu¤*èL%¸J5J-~»Y|^à‚ð‘º	—2(ÛÅí‡(¨`ïmq©óàÑI¶Lrž&ˆÖ׋?‘wÁVñ8Vç`™Î¾
+æüxªý-´$#^×÷hl(s‰ÎÊÈl‘L€Î'«Ñ{ៅÇÁ1)ÙÕÐ-Ã8gÕŽbâ˜ï,yU*öfÓÙÑ–CݏüþR	×J½Äaçßsh•æ<ƒúó‚'‘Ûž¾Ž™å´*Ÿ˜«Ë´yÕÁ=s¡‰‚P$â9
+O‡ÃI³ðH51‘Bp$ñqÄ”<Ò£”Î §a—ÕmqoÆ®·àê4eŶB"›øK)DI°Â.È̈́L‘ŠÇ¹ÏˆKˆ R9ñ¹(¥™õoÍq‹;ën7ÒºÌûH(|FöXYÆ—qÆm·f»q<o*‚ó¸'G§‹‘dîÍÖÅh,êë|-9øÑéw…€Q×.£@›4gë¡k‰r†{f7´Åháù«˜^¿3>?1^dÒ¥OnﷁÒ{ÆYYÆevxOú»»-}wmEjìè[vÎ
+Î3Ãè¬
+ãDp	µË§4!Võ înöF³5DÍ™†o’ˆ+ì9=/p‘²Çzܸ¸8	Wì@¤Þ⥠՚ª—×;Sc¼†KJ¤ œKÀŽpúNfìr<ŽÃ¤*šú{se,XÛ¹R¼n=š-1!ª[b’N@ôh–Á+ðÊngÁ°s–/Nø(ÃP±¿–P­<–ݵm1Ô›Y}5*¨NÒ!þ#þ”ø³)†‘6GPÅ)ôäj8êî6‡ó
+¤šÑÜ5¹Úõ¢C¡nÝáCu•®ºæg2Œû;yõ`C*¸ÐÇï=÷ïî¯ü4è—ØõÝC\ÛÃ7b¦¬QßòÃw¼yꈱ’Ì¥ÄÆ%f³R.­ˆú¼«Ñr+ˆó°L èµ1Éö´×­iÓ?"GWCý€îvJ¢<NÚé}÷(¥–Ì'}„Ï÷w®Ð¬Eà=ÑvO9mÚJKâ£'\mºöçV;;¬šúnUîz»šrlE›þýhP´i(g@»çJHœ§P¥5a
+QÑôv¶›BŏÓIúb†h¹ÐðëÞ„{÷q5ÉxœÅßDMy*ô¹–¦·ÓuVèW‰z -ûš
+xñ9\_6³h1×Z?_;˜ìB_}aœÔq~šRw]OiîFÁ\ùÍ3)¾Ì‚¾úôBwÌâUû¶ûxٳ•=oÓ5;åZ¨D䆕Ùä—‘ì¬/òJÝÜ%0pë'‡A«Ha¤ÕmÀ¡"’4—tð§e½¦ïÞµÂ-6
+Q©"ÎÚ<RáÂ%2l]µoä–D¨ÃUÛŸ°gæÌv-µ¤ÐëubÖH™&Xf¬!²p†8¨O‚êðX4
+ЮÛT$u7; Ë®mÍPÖEãª*ì¶Ö#w„æÿì ç}”DMý‰l›­cô"þŸ'·¬É:óSj®Xæ»®•«ÕNžHõEyøÞtÀë颃†x
 UØãðÄ|êU~í'd5“+d¿ŒO
-t×OÓN)š:[’°0ÐYb¡‘vGƒq
-¿ófZã H[ä»ä+üP„í™[¥RH Æ{÷qó1*458[yæL¥³4ß»ÆO*Ôñ‘Âäá4à\óN>;á|ñ
-þþcñÿY
+t×OÓNœš:[’°0ÐYb¡‘vGƒq
+¿ó¦nûðj¨!Ü4°‘Š†ôÍEØ!‘‰áÅs%uÏz>MÝ4—¸Aï¿l:kpÊòÌ™~Ú´á»ÆÏ,Ôû‘Â4â4ê\󳎞u¾ø¯ÿÿn™ ¯
 endstream
 endobj
-9428 0 obj <<
+9417 0 obj <<
 /Type /Page
-/Contents 9429 0 R
-/Resources 9427 0 R
+/Contents 9418 0 R
+/Resources 9416 0 R
 /MediaBox [0 0 612 792]
-/Parent 9386 0 R
-/Annots [ 9416 0 R 9425 0 R ]
+/Parent 9375 0 R
+/Annots [ 9405 0 R 9414 0 R ]
 >> endobj
-9415 0 obj <<
+9404 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 780
 /Height 348
 /BitsPerComponent 8
-/ColorSpace [/Indexed /DeviceRGB 31 9433 0 R]
+/ColorSpace [/Indexed /DeviceRGB 31 9422 0 R]
 /Length 29132
 /Filter /FlateDecode
 /DecodeParms << /Colors 1 /Columns 780 /BitsPerComponent 8 /Predictor 10 >>
@@ -47457,7 +50300,7 @@
 Ž¡WöÐnê¦:9]wRŸƒ%´9êîƒS;×Èž)¤àÙI¡çF¿r™ÄWFH³8¾2¡Ìð)ô<Î&  0EUš
 endstream
 endobj
-9433 0 obj <<
+9422 0 obj <<
 /Length 107       
 /Filter /FlateDecode
 >>
@@ -47465,47 +50308,47 @@
 xÚ` ŸÿÁÁÁéééÒÒÒ±±±fffîîº›››ËËËVVVÙÙÙ£££FFF666µµµ&&&ñññùùù‚‚‚­­­õõõýýýŒŒŒ“““uuuçççÞÞÞ©©©åååÿÿÿ >Œ
 endstream
 endobj
-9416 0 obj <<
+9405 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [289.956 322.004 345.767 333.694]
 /Subtype /Link
 /A << /S /GoTo /D (small8) >>
 >> endobj
-9425 0 obj <<
+9414 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.38 118.128 277.191 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (small9) >>
 >> endobj
-9430 0 obj <<
-/D [9428 0 R /XYZ 100.892 685.529 null]
+9419 0 obj <<
+/D [9417 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5252 0 obj <<
-/D [9428 0 R /XYZ 100.892 660.623 null]
+/D [9417 0 R /XYZ 100.892 660.623 null]
 >> endobj
-9423 0 obj <<
-/D [9428 0 R /XYZ 100.892 643.753 null]
+9412 0 obj <<
+/D [9417 0 R /XYZ 100.892 643.753 null]
 >> endobj
 1958 0 obj <<
-/D [9428 0 R /XYZ 100.892 424.564 null]
+/D [9417 0 R /XYZ 100.892 424.564 null]
 >> endobj
-9431 0 obj <<
-/D [9428 0 R /XYZ 100.892 405.645 null]
+9420 0 obj <<
+/D [9417 0 R /XYZ 100.892 405.645 null]
 >> endobj
 1962 0 obj <<
-/D [9428 0 R /XYZ 100.892 290.455 null]
+/D [9417 0 R /XYZ 100.892 290.455 null]
 >> endobj
-9432 0 obj <<
-/D [9428 0 R /XYZ 100.892 255.301 null]
+9421 0 obj <<
+/D [9417 0 R /XYZ 100.892 255.301 null]
 >> endobj
-9427 0 obj <<
+9416 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F85 5513 0 R >>
-/XObject << /Im44 9415 0 R >>
+/XObject << /Im44 9404 0 R >>
 /ProcSet [ /PDF /Text /ImageC /ImageI ]
 >> endobj
-9438 0 obj <<
+9427 0 obj <<
 /Length 1145      
 /Filter /FlateDecode
 >>
@@ -47522,20 +50365,20 @@
 ä82õÖóÓǐk}ŸLwûj9y•¥ðé<¤êý\-XV>waâÜ‚MR;þá%õNwÅ|
 endstream
 endobj
-9437 0 obj <<
+9426 0 obj <<
 /Type /Page
-/Contents 9438 0 R
-/Resources 9436 0 R
+/Contents 9427 0 R
+/Resources 9425 0 R
 /MediaBox [0 0 612 792]
-/Parent 9441 0 R
+/Parent 9430 0 R
 >> endobj
-9424 0 obj <<
+9413 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 780
 /Height 575
 /BitsPerComponent 8
-/ColorSpace [/Indexed /DeviceRGB 31 9442 0 R]
+/ColorSpace [/Indexed /DeviceRGB 31 9431 0 R]
 /Length 45041
 /Filter /FlateDecode
 /DecodeParms << /Colors 1 /Columns 780 /BitsPerComponent 8 /Predictor 10 >>
@@ -47931,7 +50774,7 @@
    €F3Ã(P ` ­?
 endstream
 endobj
-9442 0 obj <<
+9431 0 obj <<
 /Length 107       
 /Filter /FlateDecode
 >>
@@ -47939,27 +50782,27 @@
 xÚ` Ÿÿ£££ÊÊÊùùù•••fff:::GGGýýýVVV»»»¬¬¬³³³ìììõõõ}}}ððð&&&éé阘˜ÑÑÑää䃃ƒÙÙÙ‹‹‹rrr’’’ÞÞÞ   ™™™ÿÿÿ¹¡<Ž
 endstream
 endobj
-9439 0 obj <<
-/D [9437 0 R /XYZ 151.701 685.529 null]
+9428 0 obj <<
+/D [9426 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5253 0 obj <<
-/D [9437 0 R /XYZ 151.701 660.623 null]
+/D [9426 0 R /XYZ 151.701 660.623 null]
 >> endobj
-9434 0 obj <<
-/D [9437 0 R /XYZ 151.701 643.753 null]
+9423 0 obj <<
+/D [9426 0 R /XYZ 151.701 643.753 null]
 >> endobj
 1966 0 obj <<
-/D [9437 0 R /XYZ 151.701 317.588 null]
+/D [9426 0 R /XYZ 151.701 317.588 null]
 >> endobj
-9440 0 obj <<
-/D [9437 0 R /XYZ 151.701 300.992 null]
+9429 0 obj <<
+/D [9426 0 R /XYZ 151.701 300.992 null]
 >> endobj
-9436 0 obj <<
+9425 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R >>
-/XObject << /Im45 9424 0 R >>
+/XObject << /Im45 9413 0 R >>
 /ProcSet [ /PDF /Text /ImageC /ImageI ]
 >> endobj
-9445 0 obj <<
+9434 0 obj <<
 /Length 1234      
 /Filter /FlateDecode
 >>
@@ -47976,20 +50819,20 @@
 òžÒ)úÃóèúYè7¸†tO‡î ;¾;ènwÈÅ«ÁŒ³ðb睦Ž‡Ã‹‡ŽŽ†Ò~‰¦û^Ñià‡^ Nõwï!Sû®¼«Ë'×@C ÆㄉËNŒbΚãyÓ~!Ãÿ'˜l
 endstream
 endobj
-9444 0 obj <<
+9433 0 obj <<
 /Type /Page
-/Contents 9445 0 R
-/Resources 9443 0 R
+/Contents 9434 0 R
+/Resources 9432 0 R
 /MediaBox [0 0 612 792]
-/Parent 9441 0 R
+/Parent 9430 0 R
 >> endobj
-9426 0 obj <<
+9415 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 780
 /Height 369
 /BitsPerComponent 8
-/ColorSpace [/Indexed /DeviceRGB 31 9447 0 R]
+/ColorSpace [/Indexed /DeviceRGB 31 9436 0 R]
 /Length 30291
 /Filter /FlateDecode
 /DecodeParms << /Colors 1 /Columns 780 /BitsPerComponent 8 /Predictor 10 >>
@@ -48262,7 +51105,7 @@
 ¨‰BLDE¢ ™5,‚ìÒè¢b n1º  6•üA|b:¨¢ ?òcCC›J¬‚ÞãŠH‹  }Vzh
 endstream
 endobj
-9447 0 obj <<
+9436 0 obj <<
 /Length 107       
 /Filter /FlateDecode
 >>
@@ -48270,21 +51113,21 @@
 xÚ` ŸÿõõõšššÛÛÛ‹‹‹éééËËËIIIñññçççXXXÓÓÓºººíí탃ƒsss'''¤¤¤{{{ùùù«««³³³üüüiii‘‘‘•••999ááá   åååÿÿÿ=Œ=±
 endstream
 endobj
-9446 0 obj <<
-/D [9444 0 R /XYZ 100.892 685.529 null]
+9435 0 obj <<
+/D [9433 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5254 0 obj <<
-/D [9444 0 R /XYZ 100.892 660.623 null]
+/D [9433 0 R /XYZ 100.892 660.623 null]
 >> endobj
-9435 0 obj <<
-/D [9444 0 R /XYZ 100.892 643.753 null]
+9424 0 obj <<
+/D [9433 0 R /XYZ 100.892 643.753 null]
 >> endobj
-9443 0 obj <<
+9432 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R >>
-/XObject << /Im46 9426 0 R >>
+/XObject << /Im46 9415 0 R >>
 /ProcSet [ /PDF /Text /ImageC /ImageI ]
 >> endobj
-9450 0 obj <<
+9439 0 obj <<
 /Length 2266      
 /Filter /FlateDecode
 >>
@@ -48315,71 +51158,59 @@
 Ñx¾=:wÂùzLsK§’tÏ..¥®@QÎ[Hñ dâÄ™éÆ]Õu½Ï×ç»J©jP)n\ë¤jåD9Ý…R5¢ÔOvþb u)\?Çúi_5ÛöV9£ ©OÓº„cÎY~êGÍT¥ÎõÎoîÜ2{®Û–Ÿo—P,V§êzŸ6-ÊÆPŽïº†i˜0ÛÚºêøš˜×ÎFò¥Wïg7Ûñ—÷ÿÀsq©
 endstream
 endobj
-9449 0 obj <<
+9438 0 obj <<
 /Type /Page
-/Contents 9450 0 R
-/Resources 9448 0 R
+/Contents 9439 0 R
+/Resources 9437 0 R
 /MediaBox [0 0 612 792]
-/Parent 9441 0 R
+/Parent 9430 0 R
 >> endobj
-9451 0 obj <<
-/D [9449 0 R /XYZ 151.701 685.529 null]
+9440 0 obj <<
+/D [9438 0 R /XYZ 151.701 685.529 null]
 >> endobj
-9448 0 obj <<
+9437 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F85 5513 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9454 0 obj <<
-/Length 1929      
+9443 0 obj <<
+/Length 1935      
 /Filter /FlateDecode
 >>
 stream
-xÚ¥XKoÜ6¾ï¯‚¢ÑCŠzæ–ÖI“ ·qI²Ä]©ÕŠ[=⺿¾ó ´kWôÄápDçñÍPÒÛ{ÒûyóãÕæùë0ôR‘§RyW;OI)²<ô’,qyW•÷Éoʱ±ÝöËÕ;ÏDž$Š‡¹ -Y.E,¶’‰ö¯j³
-tù?ý~ùž©×M;š¾éö<}Ù—u3ÂÖSoxëXÂù"—9©¢N£xÞ<J5Jm^]mþÚ(à‚𙺱ÐÚ+›O_¤WÁÚ;O
-gÞ
-I<g"‰q·Ö{¿ùu#ÏMëóƒ•Ê„Lµ—èD(óñßmƒ8ŒýöØt;Ëtð•ÕV)|"ò8ñë@¥BeÊ"°`rf%Á4 °3M’ú¿Ù–¨Ä·;æ”Óq°‡blÊçxŠ–>Ïø ,>WSzA˜ˆ4s
-ž>uZÝN¤Y2Ûò³TúbØaœù‡bfþ-O®aÈ|Ó±vÄÁ#S7MeZ';
-¦b
-¢ƒFö6RM7ŒEÛ‚B[ËFJÿã6‹|;¡Ž^à´
-”q”³nÔe¢Ó"EÚ¤¤
-LÊÖ=’+Æ™2ƒ[¿ÁOMox¡³nÊ|¥…Öùn\Ï·æ]XØ] XNØ[ƒº+Šé[–*æC
-ºˆä+8OŒuÓWÁ±èÇù 
-_TU at Fz´<ÒYÊ<s»5MÛücœp=}Q5˜‡EËŒŸkpÊPöÍqd\´)Íp®ÒlU<2҉ߛ®2=Ò©ÿ‡½˜»³Ž…	æ}¨MÇÌtìítÝš¡¶d;B?ƒÕ$„ûƒÀ¡ôLmÅôŸÅ¥žWvWÕ£”‰_5›|Ø•duûoÈ£¸è¤`ÏÚ¶ ”›áxzb´€ü±guÁ&s7V¶s{6cÀmÆboà~Z)Œcˆø5¥Ïì²aCغ…Ü}Å~q-Ž}SŒ†ì$"»#ÁN†Õ±è÷fd&|ÕaA¢Š5 ÐR	é9©¿
- Á,}ç
-Àˆiä_^^8Ê¥PåiìïMgz¸AÅü]o³¬aâõ6Ó¾¥du:Ї—:x‹oÁ¢ßópÑ7œ–Ž}QŒÅu1˜•„B}´Öþ/léïÅ2`naû½˜?
-•PQÆ_}$•&þ´D Ñ›Òî;Ê.­£=p…-€ßÏ-3«m:3ïÔ¶\ÃhoÅ9a’
--éœÉì>:¿pUQßõc˜‰PA}Ñ‘Hrw×p®¯/¸8=Àk›²@Àxþµ«JÇ3ÄP2–¾tãI¿'k
-Jw\~ß´pÒR=p‚ºC6¸QSÆaádU,™%jsú¬GÌÇI$yÄäÀq°§-ÜnT/Ï7 ç!±ñ:¢ÐëÄn·=kI\“ö‰˜ÄʦãµÆ<1i$\Y3ƒ”sÐÚñN¨ÃÇ„%(ÀH8°Øtœ·b)N¢|©=@}@›ëEŽQ`W”«@tÓ€pѐËÑpBƒçÒ9ºvöá8„–E륝늃¡*F[ïØálsíW=Ü“8¥$ƵÊptAЭB–Jcèé²GgEš-zs ái¸äc[n$´Âf+ºk–9йt€®…›ôSçêÀªe<›–ÀÉÌZjSiœRˆƒ¸Œz°Š/¹8ÇŠrœ[Ÿ5ŸÓ芌ýTò®*Ñ(>Yeþ`ZsàXvÑ9*²Lœ°nɳ÷n;^ƒÓ¬Ã€rÂ2ÎA«pcü‹BÜw¹@x¶æw,¥t{(’09w{Iй“hR™#à8:=W‰ÿvtbâH}X3ƒkâÊÜyËtÇònŠ -|šê;uÇ•=|ú°=wÎvµ9`ú‡.á]G·¼Ø8áÚ0²Üòtf§Lã²Ko at KåœI]8ŠúV䌹Ҩì/+;·è+<]oÇð­wœÄKëh(·‡f_ÏÆRßʦà;0æS?–”S;6„½ pC!.ΰJ챿eîè6ªôºÖÕ±†q.õ’tÚÿ¬ttI»ºð{Ú=½œCñ	ËÐþ0~hºŠƒb`FÙ6†%é±aû’œ½FÂedp®ÈЧôµÜ_†®ãŸCƒy7µ«VžJì)©{ËCŠÑð<F‘éêJHÒ´4Ï/ðùÍèPÝ}TR5YË\D™ºÜ ÕjÞd"
-—#À[sîË@£	‚”âuµa‰ þÃÇžvÊEf÷0m8ÕÌ,_úf²“‘Â2÷ŒE–ÇN:C
-æ©"ÂÎÜðÚˆ‚·Çå5k˜8bÊSÿ
-¦¯RÀìî ûµÝUsÈÚæ >é×\{=¹fóô9ÃAÄÖÕ¶ì^ƒô¿û±s|³#s
-àòOá[î‹`O¯¡nyØŒ1˜€éö\$€¦¢˜$7×,V£sQÎ%a@‚/ŽñÃü¶F°‰"RhżäP
-×mg®¬Þ2
-A‚M#Oò€8ƒ<š/ g%·ürÖøÚbËøí‡ÎÇ·1
-¨h-­+Gqù14¯®6ÿ©¥Ä
+xÚ¥XYÜ¸~ï_!A–X2)êô›¯÷@&ñÆb½‰ÝR"‰žL~}ê 5ÝŽìÈ‹ÅY¬ã«¢dpdðÃá÷‡Wïâ8È£2—*¸?Jʨ(ã +Ê(-“à¾	~ïM½tv<þvÿ3‰Q™e	ŠÇe$AZ²\Git•Ì´¸oÍ1Ôi"þô·»÷L½ëúÅLÝxæ雩n»¶^'Ã[§ΏJY’*è<IýæI®QêðýýáŸ\¾R7´êáðëo2h`íç@Fº,‚G’Q–ân}ðþ𗃼6Aª¯Vªˆd®ƒLg‘R)ÿ»c˜Æ©è/Ýx²L‡ŸXm•Ã'Q™¦1~ª<R…
+Â,˜]FI0
+(ìL“å⯶'*öÄœz½Ìv¨–®~…§h)xÆ鵚2ã,ʧàó§N«áLF²È¼-?J• /æc§…ªc\ˆ'ž<ÀPÓ¥uÄ`ç…©Ç®1½“]gÓ0ÑA#{©nœ—ªïA¡£‚å#‰¥øåX$®¨c:­B¥£4)Y·uYé´D‘69i“º7Õ„¤ŪÅSfvëø©™/ŒÖíјO´ÐÛß­akÞ……Ý€å„í¥7¨»¢˜~b©ÊRÑE$_Áybi»©	/Õ´ø4|Ñ4!	èÅòHg)ñÌíÔºt}÷oã„[OLUÓaV=3~hÁ)s=u—…pÑ®6óµJÞªxd¢31™±1Ò¹ø»}˜™{²Ž…EÌûК‘™è8Ùõ¡7skÉ(v,~	«Y÷Cé#Xû†éŒ—yVq\ÙuÙURBf¢é 65øp¬Éê:?’GqÑIÁž­íA)7Ã;ñôÄh#„ùËÄê‚MfætnlìèöìF7ÆŒÛ,ÕÙÀý´RÇñ{J_Ùdã2…°%t‹¸/úºHEu-.SW-†ì$"»#ÁN†Õ¥šÎfa&|5bA¢F{  ¥Št¡}R B/}sH`Ä€<wwoåR(Žò<g3š	nÐ0ÿ4ÙÁË&Þ-,%«Ó>¼ÃÐÁ[äxý=o§ŽÓÒ±ßVKõPÍf'¡P­µø3Ûcý×f0wd§sä?ŠU¤’‚¿ú…TZùÓýÄdj{)»´N<zà
+[ )¾Ÿ[fVߍÆïÔ÷\ÃhoÇ9q–GZ~£s2$‹ÏÑùµ«Šú֏qÅ
+ê‹N¢¬twýîÏõõ5§x}WW¯>M„áå
+1”L¥n|ÖïÅž‚ÒW~nZ8i«8AÝ!‰FÜh)ã°p²ªKæC‰Ö<6!æã$‘<brà8Ûç-ÜnT/¯7 ç!‘°ñ:’XüäÄžŽ={IÜ’ö‰˜ÄJÌkñÚâž˜´?®¬™áAJ´v¹	uø˜°	g[/~+–â$*·ÚÔ4°yØäNU½Dh¹ýNhð\î£ëd¿‡Ð²h½µsc5ªb´õ‰Ý{›kÑLp3L✒×ÃÑA·Y*O¡§+¾9+òbÓ›	¯HÃÛs#¡6[É­Y| k;Pƒ„Ó:ÎÌ»©Ÿ¸äìKàaf¹’‹ÚœO‚¸Œ¡›Ð6ˆXº÷nù­ÖÅ•"X¦µæmò
+krTsÔ˜Þ<qtÃR5:Ž;'N ¼
+49w>¬i{ûå°¶A*ô· êä´(č–óüË=GC$©$ÿF?ÇQg×~N êGwMsàFãCf—*?-NŒQ©€cfv][݁Ÿxî˜@¢y”¡Qг繾)4®Îá[Bª`˜QÔ˜ï±KièÏ ô{^ìœpkJžxºR]QÜòø]&Z*žRuÕ*çF9ƒ1—åZo$Þ4Ö÷ä;|¾0ÞŽñ{í4K·^üŸˆ¡;·ÞÁXÛ{‚UŒyå–‹ùÔ€eõÚ/qqôH .z倚ž˜»¸F¹±·Uó…XnM‹J'w´«¿ïÆïî|(¾p9hyüЍ
+ÅìR°ïKÒëÂö
+/8{-ÄÈàTÐ}vr˶ó!Á|Zû]+¯56‘èò™Ç-F¯ã âÊÄCï<ìõ©BŸ‘ÐAQ0a´)ñš{ín¹=¡¦Z³Û`¤*’2þÖC€³Ý$+¢ü9ÉÈ\¥¸w]›×cZ󸸵Çÿ:-WQ¦·§{……^·XKá±ëûfr, ËßKfn†“ÑPã™ù6™XLðë²½YÝ[—p»BBò€DË©ï´ûJ€X10ÎÝÐõøìÄÉÃêðñù²&ãðnÓöYûôwk×æÿj¿æÚÃíÃ6äoÃ3Eà¸=š*lÕy@ÈŒg.(è²…P|±õf±]Œr.Ò	02|š}:¦ðüË‘)IH¡4#·jxú¸^(ª»OL;Ø(|߬+p¤ù‡pPΏjüÄ^ÁÏBô5>ëˆQñ°NåmëjñyFµsûgäÇïïÿ£
+2
 endstream
 endobj
-9453 0 obj <<
+9442 0 obj <<
 /Type /Page
-/Contents 9454 0 R
-/Resources 9452 0 R
+/Contents 9443 0 R
+/Resources 9441 0 R
 /MediaBox [0 0 612 792]
-/Parent 9441 0 R
+/Parent 9430 0 R
 >> endobj
-9455 0 obj <<
-/D [9453 0 R /XYZ 100.892 685.529 null]
+9444 0 obj <<
+/D [9442 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1970 0 obj <<
-/D [9453 0 R /XYZ 100.892 607.704 null]
+/D [9442 0 R /XYZ 100.892 607.704 null]
 >> endobj
-9456 0 obj <<
-/D [9453 0 R /XYZ 100.892 577.93 null]
+9445 0 obj <<
+/D [9442 0 R /XYZ 100.892 577.93 null]
 >> endobj
-9452 0 obj <<
+9441 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F17 3698 0 R /F85 5513 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9459 0 obj <<
+9448 0 obj <<
 /Length 1996      
 /Filter /FlateDecode
 >>
@@ -48404,34 +51235,34 @@
 ý‘ kôIQâ+Š)Ò3A2ê¡XÓ	Ø?µQWÌ«dA:ùsÒ<kôç“ñ4x.Âß¿4¼ŸaÎÏû0tÂáÂHØKšæ—ƒZÂàˆ}åŸÿÍu‘Ôpû;'k)<ÿs­¤…|®’¦ýW \À`YfÏTušÔžÿ—’Ù˜ïPò­1óSó÷oÀ¨út
 endstream
 endobj
-9458 0 obj <<
+9447 0 obj <<
 /Type /Page
-/Contents 9459 0 R
-/Resources 9457 0 R
+/Contents 9448 0 R
+/Resources 9446 0 R
 /MediaBox [0 0 612 792]
-/Parent 9441 0 R
+/Parent 9430 0 R
 >> endobj
-9460 0 obj <<
-/D [9458 0 R /XYZ 151.701 685.529 null]
+9449 0 obj <<
+/D [9447 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1974 0 obj <<
-/D [9458 0 R /XYZ 151.701 535.364 null]
+/D [9447 0 R /XYZ 151.701 535.364 null]
 >> endobj
-9461 0 obj <<
-/D [9458 0 R /XYZ 151.701 507.326 null]
+9450 0 obj <<
+/D [9447 0 R /XYZ 151.701 507.326 null]
 >> endobj
 1978 0 obj <<
-/D [9458 0 R /XYZ 151.701 454.448 null]
+/D [9447 0 R /XYZ 151.701 454.448 null]
 >> endobj
-9462 0 obj <<
-/D [9458 0 R /XYZ 151.701 428.734 null]
+9451 0 obj <<
+/D [9447 0 R /XYZ 151.701 428.734 null]
 >> endobj
-9457 0 obj <<
+9446 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R /F88 5678 0 R /F72 5679 0 R /F85 5513 0 R >>
-/XObject << /Im37 9083 0 R >>
+/XObject << /Im37 9069 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9465 0 obj <<
+9454 0 obj <<
 /Length 1992      
 /Filter /FlateDecode
 >>
@@ -48464,33 +51295,33 @@
 ü"¾ôqÒÁ„Y3ý,O Œ/|ódòㇻÕ.ËCÌ
 endstream
 endobj
-9464 0 obj <<
+9453 0 obj <<
 /Type /Page
-/Contents 9465 0 R
-/Resources 9463 0 R
+/Contents 9454 0 R
+/Resources 9452 0 R
 /MediaBox [0 0 612 792]
-/Parent 9441 0 R
+/Parent 9430 0 R
 >> endobj
-9466 0 obj <<
-/D [9464 0 R /XYZ 100.892 685.529 null]
+9455 0 obj <<
+/D [9453 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1982 0 obj <<
-/D [9464 0 R /XYZ 100.892 660.623 null]
+/D [9453 0 R /XYZ 100.892 660.623 null]
 >> endobj
-9467 0 obj <<
-/D [9464 0 R /XYZ 100.892 641.703 null]
+9456 0 obj <<
+/D [9453 0 R /XYZ 100.892 641.703 null]
 >> endobj
 1986 0 obj <<
-/D [9464 0 R /XYZ 100.892 369.067 null]
+/D [9453 0 R /XYZ 100.892 369.067 null]
 >> endobj
-9468 0 obj <<
-/D [9464 0 R /XYZ 100.892 339.393 null]
+9457 0 obj <<
+/D [9453 0 R /XYZ 100.892 339.393 null]
 >> endobj
-9463 0 obj <<
+9452 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F85 5513 0 R /F53 3738 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9471 0 obj <<
+9460 0 obj <<
 /Length 1790      
 /Filter /FlateDecode
 >>
@@ -48507,88 +51338,76 @@
 Y^Ï<ƒÓ±Oö& €ÒW8—¶ÊG“º–i|ä#ÁÁ°¿	ÿñ„/ô;ä³
 endstream
 endobj
-9470 0 obj <<
+9459 0 obj <<
 /Type /Page
-/Contents 9471 0 R
-/Resources 9469 0 R
+/Contents 9460 0 R
+/Resources 9458 0 R
 /MediaBox [0 0 612 792]
-/Parent 9473 0 R
+/Parent 9462 0 R
 >> endobj
-9472 0 obj <<
-/D [9470 0 R /XYZ 151.701 685.529 null]
+9461 0 obj <<
+/D [9459 0 R /XYZ 151.701 685.529 null]
 >> endobj
-9469 0 obj <<
+9458 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F85 5513 0 R /F59 4373 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9477 0 obj <<
-/Length 2030      
+9466 0 obj <<
+/Length 2022      
 /Filter /FlateDecode
 >>
 stream
-xڍXK“Û6¾ëWðHmY0|ø–llï¤*ŽvG›ª”“MaF\S$CžØ¿~ûHâ˜Nå"6
- »ÑJ¢Ç(‰Þn¾?l^¾Q*ÊE™'2:<D2IDQª(+JaJŽÑûøÞÖSÓwÛß?’x!Ê,Ó(®J‘€tÂrJ	#¶;™di|8Ùí.5:þç÷÷L½iÚÉŽM÷ÈÃïÆúÔL°õ<ZÞÚ$p¾(“’TIÎµ	›ë<G©ÍëÃ揍.ߨkDšFõyóþ÷$:Â܏Q"Ò²ˆžHò¥¦™ÁÝÚè~óïMrë™GRŠÒµð.Ùy±M°¦ãý6•qï¦ûzl†i»SÚÄ{0
-ìÁŽ°Ž¦ÀmŽ9ý6Mb?ý®ïv{/öмÇíŒL
-¥ÑN¦Âè’•°£cOIsë©]M!³Œe›Ç¦«Úö3¸[ñ~ÿƒCªŒŸ¶ª€­,ó϶ê¶*'N=?€B Å+fgÌ~èG¿nÒÃŽ2žî·2®‘ †‰
-`
-M¨5­é;P¦Hcˆ]&ñ¿@‡dk²4s:YRZÅ'ÛH¥^/;Û™:ÚOMmwn`Mëæ·DêšçêþŒúœÁ4oQ…•ÎN„¡ãïœâ©ÌøÏݵ|Á£§SS£§5M‡±§ÓkëœÅ‹Î5ï£rÿ¯ÿÀT¬µhµ2>}ªÚ?'°
-]ÌëÏwu?„kÀr>|—(‚Ê#§îñ?ñÍ2«ƒ»ÕÙ°Êþâ.a‡6>¿*v7Ê¡Ò¹„ln¼·(x*/…Þí'¦èÿ¬žÛ‰§CÕD¯m¼hØ«ò×1ÁÍTã±ù.Xq2»dÓ]p®&ÔÊäñ]ÇLÜ'-¼jøó™tÌ_ufÛ?6uÕòL0ón˜†Z'P©µŽ{ôí­ËðL
-& f¼ø­Q)U|½x`@”`™IÞž`–‹%KPLªÒÇWNñÅŽR (ºP–ÝãÐ':Ô]响$éfRH¶®¶kšÒuࡧŠÌot_†
-Lq¨ä1U:dPórËoԐ*þ®é^ðkn	¢žœèº|”;^ß?ðÜ"*×Ë^A߸Úk 3ãÜ9¦úŽ¿~d¬a‹a†CD8DiaRŸ-œi&óÉD…ŸœÒ빃púFk<QHrj.vx°O<n›ÎúSøp¶½ôÜ5Ìž¦x…/ªXóÉ!øäìÍÓqs(†úqºVzòˆm}|ô®r͹i«‘WS$’ß÷Ê·éô¶ù€i!’¼`þQσãNIe àUÃÐBÆa+|ù©;
-؍•#IÈ€8Ë€0P͘;õƒo¥+½.çí½£Æ©(†•–¾ø£­ÜĬ¡±µgÂÍÐ×KÉPŒEYà	-›¿|á¢-µ¯´oÓùµ“m[÷ÍýŽ•Ý­]Й±ôm¾\ <*¹*–Á ¤‚jìŽbá‰-_g$ý
-R*“", û2•„ú~{Ü©ŸÛ#ÓWD€väˆæŠ½S2‰ÑÏJ ì©3	n‡üb²ê֬Ȥ(äéýUÀ¬$
-Ã4¿ú§»Ÿ^óY‹Ú¬K'.  WFiíAÈN))4Ö†kK¸ø«ÿì;G
-ønçzºéDù2˜Qo©R6Ø0±¦å
-® ‰£mß¾}×	
-«™<ÃGPý<­¹9
-‰%:"\ö	Þúüb²<Ìò×àv—¯>’’~XÁîztYó
-V`	QþF—‰ÈÔå΃¿Á€²ð»
-`ʽNC:!up ö…ì#ÕC¤Èá8G¸¡?†u&YÓ])x>éeòíìRY“=ËŠ¿´Ëõ&lFþ7†Â
-^Lo¡Ku—þÂSÁÄYYâ=æü3ì½ÀìùKWeôuÁ‡ŠBò#F+âlVØò	Ñô	Æ
-G2›ç•]X‡øÜ÷‘fzÞB|ÁðåpšQ<n¿h¿j‘~àb(?ì|Žö¡ ÉîÔŽIÆ<Š` 1¸Åñh;HÇš'±©¿À2eb¿9P”/®ñ}‘~~CB0vÖg+@É•L<áäÜGL9½„ØÌ83²ƒ¼wlý.ÏÊøW|yô³	`m$èQA
-!ô‡ÖSèeMO>gì[f\áŸR§bPÀQø²ùdòRYÆdt)AôÇ̃‹v
-Þrvb. ‡GB>À¤7 	ÃKÔñ< œn±™—ýêGG\|Äc7,X† /¼ ï­]yåЏìŒ2¨ì’þ=Ïþõ•ñµB»ù|®ÆÏ>¶;~‰@>ÿ!€6:©)oÿ=È<~*ÏowŸñØëzÜ·~ùÐo
-<¯h°|¹vŒT‰Èó<¬þÿ– X;ðúìÖÔ€ÒbxÛ¢ô/8ÙVNÉ
-¡ÕeýGmíŸU(‘åÊÿanÎðø=	ç€v÷<à‚Ù|!_²sCÝuÀèŽlžó72فAéåÒÀX¹ ™H³té!¾ògkž
-"ƒ¹oš‘XÁå¸ä—ÎJ#0à¦üR»7õß-€x2)ƒ,‚Hºý?‹ž•þ4p–eúš%ô‚-‹€OÊâRIÓÊÔØŸ¹Fc„$ ç"¿_ßï¿ñrÊʼn?y²ºÔqw-äXe[±ð_ø¾>lþ&Eï
+xڍXKs䶾ëWðÈIi¸¾|sâݍ\egMR•r| 8†YIäÊ»¿>ý5ÔR)_†FènôãÃÄÁSoþ|¼y÷Aë Ê<VÁñ1Pq¥²¢ŒÒÒÇSðKxoë©é»Ý¯ÇI¼ˆÊ,3(®Ë(é˜å´ŽÒh·Wq–„dzÝí“Ô„ùçáž©M;Ù±éžxøýXŸ›	¶žGË[§1œ•qIª$@ç&õ››<G©›÷Ç›ßnpAøJÝ4J’ ¾Üüòkœ`îÇ Ž’²žIò$ie)îÖ÷7¿‰¯] ò@©¨LS½ò)#²s±M¥`L‡‡]¢ÂÞM÷õØÓn¯MÀ4°&üÁ:š·9æ<ö»$eúç¾Ûp¼ÚÃð{´3H°(	ö*‰RS²vtì)•^{jïe“8RYƲ›§¦«Úö¸ÛááðƒCªŸwº€­,ó/¶êv:'N=@!â³³'f?ö£l‡›ô°£
+§û
+k¤Æ¨aâEØ‚BjMkú”)’bÄ”qøWÐá–l×fNgKJëðlÛ©DôÒ¡³Ý‰©“ýÜÔvïÖ´nþ+Só\Ý_PŸ˜¦Â“ã-*¿ÒÙi‚0t<â<•ÿ¸; –·<z>75šqÞÒt{:½¶ÎY¼èÜð>:OÃÿöÌAÅZ‹VëTòÙçʱ ý}«Ðż¾¾«ûÁ_ΐó‘à»DT9uwø™o–YÄصÎ)«,·„ÚøúªØÝ(‡Jç
+²¹oQðT"…Þí'¦Oèÿ¬žÛ‰g|ÕD¯mDÔïUÉuLp3Õxj¾‚6œÌîÙ$G\ª	µJóð®c&î“¢þ|aó/:³íŸšºjyÆ›ùn˜øZgP©µŽôíµËðL
+& f¼ø
+­Q)]|»x`@”`Y<Ã,*– ˜Ô¥ÄWNñÅŽR (ºP–ÝãÐ'Æ×]-ÉF’t3	$[WÛ-Mé:ðÐsE
+æWº¯C¦8Tò*2(Šy¹eŽ˜5d†Š¿oº[ríÀ-ATȉ®K¢Üñúþ‘çVQ¹]&ð
+’ðÊ…È0¢ÌŒsç˜ê;þÊ"È>XÃ,(Ã‡Dþm¢4‘láLK3I> *üä”^¯„ÓWZ³à™B’SsµÃ£}æqÛtVNá;ÀÙjé¹k~›…¦x…/j´å“£÷ÉEÌ3as(†úqz©ôäm%	>‰«\siÚjäÕ‰ä·Æ}'m:¹n> @RDq^°ªçÁq§‡¤J¡àUÃÐBÆa+|÷¹;E(°+GRa–‘B5cîÔÒJ7z?N콣Ʃ)†µQR|ÑVnbÖÐØZ˜p3ô)å‹1°(‹<<¡eóׯ\´•‘úGû6¬lÛº7÷;Uv¿uA
+ÄRÚ|¹:AyTrU,½HyÕØÅÊ
+[¾É<Hú¤TÆ…_ öe:öõýú0¹s?·'¦_NØ‘#š+ö^«,ŠSóªž&SàvÈ/&«nËŠLE…ZÞÿ˜
+ƒTÊ0MVÿt÷Ó{>kU[˜µtâò re´ÖBöZ«È@`­lxi	‹/°úÏÒ9jÀwÓ8×ÓU'Ê×Á„ŒzG•²Á†‰Õ0)¯pIœlÛHû–®ãV3	C"¨~ž6ƒ‹Üœx‚ÄŠ.ûˆ¯}~I³ÜÌò7Åí:‘¯>‘’2¬¼`÷rt¿¬yC… XC”?Åp繿rïn+eøý#ǯñJ ßë*ÀaÄ݈—C Øß°æ™Z÷øɯKã-ÕµÊ#c^' _ ò<Rê5f|Ó*c¢\-¹‰Þ7Ú`P!pü…| ˆíË8Îz{<Ü"ÈÙêeNh¾H?õ¼åÔóxYðPQL~Âý’Ò~™„j.x/Z®ŒBX.í£™^wé3µ%@3xGŒ¾êºz•uÎ|<§ás²àKžpçfpL2ÔÑ„þˆÁˆ'ÛAÖ<‰½ü«3"“‰yüÔ@Qî·¸FÚ!ýždCjþ0vV’äFžqrîN#fšY#kf\ÐAº;¶~Ÿgeøo|pô³ˆx‹ƒñ5ô– :†Èù¡Š®^<|ÎØ·ÌxA}Äu*Æ~ß ª‘O&/•eHF—
+TAÌ<X´Óð„{²s/<à&=½ ?¨ Žç×t«ÍDö›×±øˆÇnX á\x8ß[»ñ¸9¢Ù9ePÐýià_û"úâ3X…0vóåR_$¶;~€@kŠ$W€6&’´¼þÓ ØT^§º<Ù%Õ±Åõ¸oýî±ß¥ðª¢Á`åÖ1JÇQž/õï_øo¡©Ð×g·u  ,@ágØþ3ýCSp²mœ’‘ÑË
+úkÚÖºÐPµü‘^!°=é[i"U²ùJŽd½Ñ Ø:­®#›çä:&;0]n,U+@EI–¬`<WþjÍ+A¤·õC32ø*¸–üºÙ¨þ)ø(_ªÿà¦þm ('SÊË¢!ˆ¾ ÃßÉYô””Óà-Ó/)B¯Ö²ðŽ,‹¥Œ&%Ô¨±¿pÆðˆAÏUr¿¿?¼ñZʹE¿ódµq÷RűĶÑÊþûþxó?ƒ€C~
 endstream
 endobj
-9476 0 obj <<
+9465 0 obj <<
 /Type /Page
-/Contents 9477 0 R
-/Resources 9475 0 R
+/Contents 9466 0 R
+/Resources 9464 0 R
 /MediaBox [0 0 612 792]
-/Parent 9473 0 R
-/Annots [ 9474 0 R ]
+/Parent 9462 0 R
+/Annots [ 9463 0 R ]
 >> endobj
-9474 0 obj <<
+9463 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [149.289 233.731 200.676 245.42]
 /Subtype /Link
 /A << /S /GoTo /D (cups-ppds) >>
 >> endobj
-9478 0 obj <<
-/D [9476 0 R /XYZ 100.892 685.529 null]
+9467 0 obj <<
+/D [9465 0 R /XYZ 100.892 685.529 null]
 >> endobj
 1990 0 obj <<
-/D [9476 0 R /XYZ 100.892 660.623 null]
+/D [9465 0 R /XYZ 100.892 660.623 null]
 >> endobj
-9479 0 obj <<
-/D [9476 0 R /XYZ 100.892 630.478 null]
+9468 0 obj <<
+/D [9465 0 R /XYZ 100.892 630.478 null]
 >> endobj
 1994 0 obj <<
-/D [9476 0 R /XYZ 100.892 211.897 null]
+/D [9465 0 R /XYZ 100.892 211.897 null]
 >> endobj
-9480 0 obj <<
-/D [9476 0 R /XYZ 100.892 181.125 null]
+9469 0 obj <<
+/D [9465 0 R /XYZ 100.892 181.125 null]
 >> endobj
-9475 0 obj <<
+9464 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F85 5513 0 R /F59 4373 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9487 0 obj <<
+9476 0 obj <<
 /Length 2570      
 /Filter /FlateDecode
 >>
@@ -48610,41 +51429,41 @@
 øÛq
 endstream
 endobj
-9486 0 obj <<
+9475 0 obj <<
 /Type /Page
-/Contents 9487 0 R
-/Resources 9485 0 R
+/Contents 9476 0 R
+/Resources 9474 0 R
 /MediaBox [0 0 612 792]
-/Parent 9473 0 R
-/Annots [ 9482 0 R 9484 0 R ]
+/Parent 9462 0 R
+/Annots [ 9471 0 R 9473 0 R ]
 >> endobj
-9482 0 obj <<
+9471 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [309.16 357.022 370.425 368.712]
 /Subtype /Link
 /A << /S /GoTo /D (cupsomatic-dia) >>
 >> endobj
-9484 0 obj <<
+9473 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [209.332 116.961 371.87 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.cups.org/cups-help.html)>>
 >> endobj
-9488 0 obj <<
-/D [9486 0 R /XYZ 151.701 685.529 null]
+9477 0 obj <<
+/D [9475 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5363 0 obj <<
-/D [9486 0 R /XYZ 151.701 660.623 null]
+/D [9475 0 R /XYZ 151.701 660.623 null]
 >> endobj
-9481 0 obj <<
-/D [9486 0 R /XYZ 151.701 643.753 null]
+9470 0 obj <<
+/D [9475 0 R /XYZ 151.701 643.753 null]
 >> endobj
-9485 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F51 3736 0 R /F85 5513 0 R /F59 4373 0 R /F29 5413 0 R /F30 5441 0 R /F60 6223 0 R /F61 5442 0 R /F71 5443 0 R >>
+9474 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F51 3736 0 R /F85 5513 0 R /F59 4373 0 R /F29 5413 0 R /F30 5441 0 R /F60 6222 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9493 0 obj <<
+9482 0 obj <<
 /Length 1054      
 /Filter /FlateDecode
 >>
@@ -48665,21 +51484,21 @@
 ÝëÅ•(83BŸ³5á€-hB&Ú#5Åšæà<U’{ÀÍÇ4^9Žé¥[£ái³ÝŽaè©´¤,fîÝI;¬üütì_¾û‡VOZÏE:iFw¯ÔrœòSƒWo•CAólBù¶›~"Þ§FÉ´Ñó­“¹tÔü…ˆïQ¹—
 endstream
 endobj
-9492 0 obj <<
+9481 0 obj <<
 /Type /Page
-/Contents 9493 0 R
-/Resources 9491 0 R
+/Contents 9482 0 R
+/Resources 9480 0 R
 /MediaBox [0 0 612 792]
-/Parent 9473 0 R
-/Annots [ 9490 0 R ]
+/Parent 9462 0 R
+/Annots [ 9479 0 R ]
 >> endobj
-9483 0 obj <<
+9472 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 780
 /Height 546
 /BitsPerComponent 8
-/ColorSpace [/Indexed /DeviceRGB 31 9495 0 R]
+/ColorSpace [/Indexed /DeviceRGB 31 9484 0 R]
 /Length 46448
 /Filter /FlateDecode
 /DecodeParms << /Colors 1 /Columns 780 /BitsPerComponent 8 /Predictor 10 >>
@@ -49067,7 +51886,7 @@
 ð‰Š‘=šoBL`” E€3@ Ö£}5í‘ç&	pÒ83 Ðhfí3¨èˆ«ø¡Cž¬4Ê 4šFûC¥f - f€ í3Œö†JÍ@óÌ @£5ÃhŸa´f€f€ b`a%€6Ô’¤^´aÀÉÂKŠrfÐΊ¸4•”¡†1TDŠ›¦2IIˆÒœ8h8¥åˆALœ<ÀI[õ46ž††P͘±…>n”@D À *‰¹F
 endstream
 endobj
-9495 0 obj <<
+9484 0 obj <<
 /Length 107       
 /Filter /FlateDecode
 >>
@@ -49075,413 +51894,806 @@
 xÚ` ŸÿÛÛÛDDDwww™™™555ñññíííËËËÓÓÓ'''»»»•••ÃÃꪪ³³³ùùùèèè‹‹‹õõõýýýkkk¡¡¡]]]ƒƒƒ’’’QQQááácccåååÿÿÿzÔ;¹
 endstream
 endobj
-9490 0 obj <<
+9479 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.918 131.677 238.042 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (cupsomatic-dia) >>
 >> endobj
-9494 0 obj <<
-/D [9492 0 R /XYZ 100.892 685.529 null]
+9483 0 obj <<
+/D [9481 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5255 0 obj <<
-/D [9492 0 R /XYZ 100.892 660.623 null]
+/D [9481 0 R /XYZ 100.892 660.623 null]
 >> endobj
-9489 0 obj <<
-/D [9492 0 R /XYZ 100.892 642.541 null]
+9478 0 obj <<
+/D [9481 0 R /XYZ 100.892 642.541 null]
 >> endobj
-9491 0 obj <<
+9480 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F85 5513 0 R >>
-/XObject << /Im47 9483 0 R >>
+/XObject << /Im47 9472 0 R >>
 /ProcSet [ /PDF /Text /ImageC /ImageI ]
 >> endobj
-9500 0 obj <<
-/Length 1741      
+9489 0 obj <<
+/Length 1735      
 /Filter /FlateDecode
 >>
 stream
-xÚíXK“Ó8¾çW¸¸¬SE4–dY6{Z˜™ª¨š­	‡-à`ÍÄKb?æßo·Zò#d`ª¸ì^"©eµú¡þº;QpDÁëÅÙ¥Š±,Êx°¾	¸âLG<HÒŒ©,ÖÛàM§ÑòÝúåÙ¥Aʲ$‰ñS¥,’8ُž½¾º^®¤ŠÃ«¦(»¢¼¥Õu_×0‹Âj	?M·\ñ˜ëðÙ.¯;ÓÐ7B ÿÅÅzñqA¤‰$ŠIl‹7ï¢`{/ƒˆÉ,
-îì—‡@ª”%JÁ|\/þXDSõ¸8g™Rb¦^œ1«J.SŒkŒGQxñ9?Ô{Ó‚dIÞ %ç!Ššèð²ØƒØ¤ìƒEÙ’u¸šZ2
-V"eqä.ynƒfàaNæ´¾1w´6ãÍ@®nˆº©‡ªÜß;긆›Mß8€ö6âñ(6K¡CÌ®»ŠÆb¿ïÛ®É;ƒ£„\2g$a·C¹¤ïðxÕ|(Ê%o‘‡ŒIØD73,§MÇkÛþ „á½åÐÓØ¥a^âoG”GÖM7”ø±ÛÉi¸:¿¤‰UÍÌO+»~~EãKӝÙt«MU–0š­ã‚WVmw½iŠº;¥2@r™æ1¨—ñð}’È4BR«.æ* ÅšƁƒ[æ·Ö:åJYž"ÔŽw^né+ÎA
-š‚gÁ÷ËT†Ç_=,Á)çUäž©<à5ðé6Þrw¸CÞ]õ5Üûˆ¾¢+ÝGÛÞàçGOlDúP˜à3˜H˜„ð™= ð•>:4šz¼øu®z«`"w¬TXÕ]QáóŽ·‘ŠÐ°´Õš=øvi3o‰Ü˜=¼‚-X1NUèUM­ªŽHª;îÎ6'¡ÎÛÖ8‹]cn@Á‹í…Klt°à¾(
-ûªéVÎ?b»µ½›+k¸Ôêé…T>´Máƒó¢¥±5>àpeõƒÑé3R'}WY3Þ~Ã	ƒPè÷ä¥3!@µ‚gá¤Ìëz_lò•µñÊoZS+÷jÁgõöæ~ÆŠ¥<õ¼¾aS•0-ôÛ4H÷FÃyA²³È
-8
-óªq4€éx¤ñ|>îôÎœ2O!qŠ!q‚þ]U·Ø€ëñÃÆx¨Çeáݮؠ ;wsSycKÉx&æïzÛoœb-¡ÑÒ^½xuA³ÑëixZƒ2n’9š¼	\Ûp¿0¹äŒ«á >ßœîå>	I|±T¤sñÉc‚ê÷.æÚ››î*
-|Â5Oö°Œá{3 £#4ÅmQæîKŒ£ŸÂZ1
-sª¤™Å v žt‡ZLÈáu´½"	eˆV£Íé	yÞyG3ëÄé•v2‚›N,¸‘ƒ¸Ò¶›9ȁöphxãRÅkŒŒ%WLþ€ÒÒ$ÌôãY6Š)M:â¦1P¶´3ßÅaq GZ9¼ŽÃ}nß.¥Î“™ršÓÐÂ{:
-¤¾ãhh¯ÝÓ=zL'œ¡¸2MçÎ8 0«¬Dˆ:ɦDðÆœH¥& Ìd²­òÒV1*‹ˆlïÀ	¥JEË/îÈÕÕ9¡?.\"­èøp¬Ä2)DZ›ôEcrdDB˵=eÌrn¾D<¾ i.6o¢ìCJ9	.šeú¶|*·lÓ×íê £5H(ÿaê2a146?ž;8sÌo©V·Ë©|EòCÑAS3b}[m>˜îhN‡`~Ÿ[üÿ€?¦´Å´*Ó´€77K,+ÛÓxY¼¼UïTséÐː¤ª—[æ¡š	-çÖ[{lmLÛï]+(ã)ôÀ&‰]Êã¡ jÌ
-dXò…C켝`»ï\ý’L¼±ÔËâ¶÷iDâüè#÷Nvš"L¦_´šãC­æW:h¡‹yBÄJ'b{VCŸ:öÓTÄMJÐëÊÆŒmîÈá.¶lú5½’”ñè»ZèãѳFS%±œƒgƒ¬?.˜Šì¶-ÑŸp„³‡8
-Î+¸c¼eü
-^Ø#†‰°õË¿y`áe[M„£¿ÔI?	 é䨉…Nè¿paKŽ±‰ŠX'‹%ïÜñ6÷ŒÆg?=gÛX__?5®@º¨ÛÊí^S-}û)ø½ÚU–LìŸ.T×sªÔ¢Cžê ²¬ayWt;œyAdKû•œ—©ÞãPÍ·]·	V×ÛS¯–àèZ YÓ%z¬ñFû‡§ú.Mø.9BP`(ßèψ†ÒäýSdlŤ³9ÿƒÍ«ú¿wýI½ëð—Ëw6¯~¬þ/R*
+xÚíXK“Ó8¾çW¸¸¬RE4–dY6{Z˜™ª¨š­	‡-à`gâ%±óï·[-ÅvH`ª¸ì^b©õêç×Ý	ƒ» ~Ÿ=]Î.®uˆ§a*‚å&ZpŠ NR®Ó(X®ƒ7,JÂù»åË‹k)ƒ„§qáV&<Tn²›ž½¾¹/”ŽØMS”]QÞÑ춯k…¬šÃOÓÍ"†=Ûfu—7´GJ¼vµœ}œá…À҈͕
+VûÙ›wa°†µ—AÈUš÷vç>P:á±Ö0Þ·³?fáX<a!xªµœˆ¥ÜŠœKÉ5aÈ®>gûz—·ÀY³
+P‘sÁÕØ°ëbl“t°beKÚz¬É0XÈ„G¡{äyÞä¨Á2H–Ñ|“ßÓ<^rµ!êªÚï«r÷à¨s¸•­V}ãx ÚÛPDS at XÍ¥aʝw}‹Ý®o»&ërd9Šë(%»-ò¥»ÇãUó¡(ç‚Ýá*"v`ÍÌýqÐœ‰
+ÿ­mû=Ü ¥dö†ž&p]²;¢ ?R*V7¼Pâf·’ÑçæòšV´|z
+®²óç7ô}™w—E“¯ºÅª*Køækw>YµÝíª)êî”ÈÀ ñ•7A¼T°÷=p¢’EH¬8™Š€«RønpÓìÎÚϤL-´½S2ãîÎÊ5í¸ !XTð0O;ÞužƒSÆ«È<c~Àj`Ó=-¼*êp…¬»èkx÷í¢'ݦu>øùÑ‘>” &Ä&b® |& ¶2G‡¦AC¢ÌUaŒøŽ´fUݺ/®½
+uˆŠ¥¥6߁a•³–ÈMþ±/Xƒ£D3/jbEuD
+®îls2ê¬ms§ÒkäÑ
+(ø°]¡p‰l€4¸+ÊœUu§†ÑÝÒ¾-´U
+¼bu9É…T>´Láƒã¢¥o›û€Ã™•¾N>‘(8è»ÊªñðNä…~ÍA^2aRTkpÇeV×»b•-¬Ž~ѪZ;¯3^ÔëÍ)üŒ4ODâïú†Nu̍4?®Ó Ý+
+ÇÉÖ"7à4Œ«Æ-ìQ1 ¦Ã‘ÆOÐ}Üém~JM"Ä)‰ä諸=£a†Mî¡:MÙý¶X!#[÷rSye+ÅE*§~½îWN‘QÇÐhi¯^¼º¢Ñ`õ„– ‚Œ§G†&k­íp¿P¹\èÃAtߌÞá>	‰}“òD&SöÉC‚êw.æÚ›n+
+|Â5Oö°Œá»9 £#4Å]Qfn'„ÆÑÏ
+áD1šHdª$ªÅ –ÆçÜH¤\ăw´ç¼H%\K5èœ\Èߝu4²F¤'¥ÓP¸-×È6B'ÑÔ6¯Ÿ€-#€—},Tcètí‘ ä£ô#óx’…"JŽ¸jr(WÚ‰Í"VìÉ9+‡ÓÛeÖg)ežÌã˜0ëÉÀq¸ŽßœÖÚmžwÓÄ1gUyÓ¹3Ž!(Ȫ+¢Ž²(|†q¥G —IÈ`kÝ¥­^tÙ¾J‘‹•_Ü‘››KB}œ¸ZÑññËK¤Ç<.’óýŠÊþÈ€€öÖö”2Ëq˜ùÒðø¤¨XãMRÉIP1<5§0åS¹æ«¾nß c€CõS†R1 ¡ùñœ!† Ž„dwÉØÒ
+‚[ÎEqÍÌ€ñmµúwg¢8Ñ~ÛûÌâþüÉK[ô@‹2Nør3Çr²ÝäçÅóûWõÞq5å­œr	Éé\ÜrÑ\5ÕÞÒcj“·ýε€*C,‹Ð<>RM¾ÌêB¾p`‘µ#L7ìÞÕ]ÀÉØ@ÁK½.îzŸ€%!Ž69o8ÙaÊDr•|ÑbpÆs-æW:gi$DL9°•ŒØ:¶¬þt裩x•ž·äO¶©#ƒ»Ø²½ç×äŠ.Âïj¿þjTUÉ@Â9p¼úãŒëÐ.û¯%úŽpñb%Áeo¯»ÀÛ@¤­[þˇ+<o‹sô€>i'	45¯Ðáú.œØRch^b¾£ŽÅ’·îx›ù‹·Ÿ³í+|_ß>4¬@ºªÛÊ­Þ\B¿~
+~o¶•½NÅöϪçUè
+Ñ!OuPÿØ«az_t[yFdK~ëŽZMËSþx¨âÛ®Æ×$¯ëõ)ï'ÃÒû ºh–ôˆ*c|ÑþÓá©þB
+¶‹P8”mô§	DC™gý3dhÁ”Ó¹`ÿÁ¦Uÿß³þ¤žõðWËw6­þXý7ðP…
 endstream
 endobj
-9499 0 obj <<
+9488 0 obj <<
 /Type /Page
-/Contents 9500 0 R
-/Resources 9498 0 R
+/Contents 9489 0 R
+/Resources 9487 0 R
 /MediaBox [0 0 612 792]
-/Parent 9473 0 R
-/Annots [ 9496 0 R ]
+/Parent 9462 0 R
+/Annots [ 9485 0 R ]
 >> endobj
-9497 0 obj <<
+9486 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-HOWTO/images/pdftosocket.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 9504 0 R
+/PTEX.InfoDict 9493 0 R
 /BBox [0 0 179 15]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 9505 0 R
->>/Font << /R9 9506 0 R>>
+/R7 9494 0 R
+>>/Font << /R8 9495 0 R>>
 >>
-/Length 9507 0 R
+/Length 9496 0 R
 /Filter /FlateDecode
 >>
 stream
-xœÍ”ËNÃ0E÷ó³„Íà±=¶g‹„X·äBS D}¤¿Ó&MÚ"@]E^8ººö9Ê(Ù¢!FÓ®n/kx˜G\6 ”›€_Àø‡ΟA(	K@ïˆ#+zÔ¼GMdLL¸[ÀK×Þ-a||ÆÇ"c>e’`QÁ‘̨ä½W‹lŒÎcQÃÝæµÚ¯7Í}ñOÌr·]ùæ,±•±FõÎ­ª1‘“àÎU›ŸMÙeÖošnudŸò•zæجËÕbíè%PPEfÍoL±O‘ù”|‰Ò”ƒ –Zå3!†Šu$ѸQ"BÞr{MºNT55¡·v
-Ò}´cv–4Ž”غy蝒^)ŸI¤c¥¾2(õÉ Ð£®“ñGÿi©]Ìr‚v3øäV
+xœÍ”ÏNÃ0Æï~
+ábâ$Ž“+â¼Ñ7ëPíO'ñú¤[»t‰S•C¢OŸýý+Ù¢!FÓ­~_4ð0W\µÀØ­Ý
+„¢°ôŽX9¡7LÑ{L‘³ân	5$Š†MÀ/8tÃùó-u/½;§lç~[4øXe–ˆš«L¬j822&ò^c «ê<V
+Üm^ëýzÓÞWïðTÁ¬ð‡h‰­\ç¿Áô_Xä$„sØöwVv¯ƒþåø/%û˜{¦3Êv½øXî/)½
+)!sÊ—–°OÊ|R>‹"†RôY	bI­Ã¨‡ˆ‘Ç:5cE„¼å®Ïu©”¬zrDoÝrJÿ&¦ˆÇì,%1±u]ôÈwRNL¹(RîU˜Oa”B0d]*ã!–?djl?Æ9E¼|ƒ‹)¾
 endstream
 endobj
-9504 0 obj
+9493 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610111330)
-/ModDate (D:20080610111330)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528091007-05'00')
+/ModDate (D:20080528091007-05'00')
 >>
 endobj
-9505 0 obj
+9494 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-9506 0 obj
+9495 0 obj
 <<
-/BaseFont /KURRAW#2BAlbanyAMT
-/FontDescriptor 9508 0 R
+/BaseFont /SOUAPR#2BDejaVuSans
+/FontDescriptor 9497 0 R
 /Type /Font
 /FirstChar 99
 /LastChar 116
-/Widths [ 600 600 600 600 0 0 0 0 600 0 0 0 600 600 0 0 600 600]
+/Widths [ 550 635 615 352 0 0 0 0 579 0 0 0 612 635 0 0 521 392]
 /Encoding /WinAnsiEncoding
-/Subtype /Type1
+/Subtype /TrueType
 >>
 endobj
-9507 0 obj
-309
+9496 0 obj
+308
 endobj
-9508 0 obj
+9497 0 obj
 <<
 /Type /FontDescriptor
-/FontName /KURRAW#2BAlbanyAMT
-/FontBBox [ 0 -186 567 604]
-/Flags 5
-/Ascent 604
-/CapHeight 604
-/Descent -186
+/FontName /SOUAPR#2BDejaVuSans
+/FontBBox [ 22 -208 580 759]
+/Flags 4
+/Ascent 759
+/CapHeight 759
+/Descent -208
 /ItalicAngle 0
-/StemV 85
-/AvgWidth 600
-/MaxWidth 600
+/StemV 87
 /MissingWidth 600
-/CharSet (/c/o/d/p/e/f/s/t/k)
-/FontFile3 9509 0 R
+/FontFile2 9498 0 R
 >>
 endobj
-9509 0 obj
+9498 0 obj
 <<
-/Subtype /Type1C
 /Filter /FlateDecode
-/Length 9510 0 R
+/Length1 82888
+/Length 31888
 >>
 stream
-xœU“{LSwÇï¥å¶£±—ÚM¤·qL¨àxLç„-òºù`ŽIçFâV £Ð†‡Òum/8¼2g_íÿ`,S	f£¸1Ëb²é¢Óe&N	3àÜÎÍ~,Ù‰’ýssϹçw¾¿ó9ßKâ(‚$ɘ<S™¡Îš·mÇ\”.$Âò(!QÄ¡"á{a::‘È]S·è œää"N.î]¥€ž%бZâI6w)0[¬õÕ•Uš”’âw´©©i™Ìõë×kʬO¾h6ª+ë4+ñË£Él©5Ö5æh
-pµÉT]®©4Y-U
-CE…±bî˜Þ`2ÖhtÕ¦j‹Å¼G“R Õdedd®Æ¬¢êÚ²¦Í6sY³USl¬l2êÿ—$â™rs…Ÿ»¡±† 6Û‰Bâ-BGl"v%ÄV"3 ÄDqŽÌ$ûɣ̢ÑA±R˜Š¦Zx8 +-¼â6¯¢…¹Ò0 qR´,5
-=‹â遼jt420Â|>âR¯ÃëtupºÔ;K·4àʨ
-ׁh|¢n]3è1ô[×a¶'¡Ûí
-3ôà]	}%Äz÷©éÁVÖieË
-$O^ã…^ç…%R¼Œ£%3)  Å̈…øä?P<S&~ôKöó)벓’ÖMÌLßžx8¾ž‡Ä‘Þˆbx„/Ë!VEÛ«0­\MY¬½Íˆ˜ÈA½w­øÄ|KÙ*¬ÀÐ#hñÔJ7puXM·eMJB^wOÀé¶2´}…Ì0£œ¾™„+“s²µÉ¯aÕ›ÔX
-Á‹<Üä1¯‡<Ù$	k•i”́}l¹0,Á‘Ën÷¹‚”P!¯'pz¬Œ>¡†ß¸X{ƒ“BÜýßAÆÐ [}Ååî´èôjÐ]TÎŒçiÓsrµ)¯^ŸœüiìÁü¬ÏÃ*žŽB©’;Ûi=^u+g$ÏŸœŽbÑÒ¿“ á.Èϝô9}Îöý,S^“ß´C—óCÛ_R^¾÷ã·SÜ7¶ýh†wåx¸Ã“°ó?„—¥ÔS¨ô2õõ™Ñ^~gŸú\;ÇuqÒn<†·ÝcïbL‡un#'ÍÜ¢ÏgŠÖHšçY‡™ßÐ-Õì‘Gð3ôá†.w3ƒ¶Só;ƒDH‡%éí=Ã*Ú/l”ʪ/v)椴N›_º¹&T×oeúmýì{‰ícûÚúZƒõ\£”öë7W¬y¹pð¬Ú-¡uÝ.¶Ôæ6Öac^Áq³ÛÕ£¦Üž0ã—íþÊ6ŠIGß¾tãÄÞ“¦cLM¯Ñÿ¦û%o{WS ÷Úø(\6téøØø7µïª¦W´t¹]Ý	·/ÄÐþ«z6­]Mû÷9±Âü"þÄÈÒ‡Dð.^:È$ávOkk»Ã¦F²¼cè•{¹ôÞ¯@úÜçò;:>îÜϪË
-mosRáÄ0/øîÉ:@1ggxnâ`+J„"=ðºòì)Ø„
-£-ýÏS£Š
-Ívà»(T@&¨¢‡)z6ìy~é¯pŒBy(9Z¥IžæÎφõ“TìÞˆ°6‚¯‰P§cxÙi¹œ—/"ˆÿ ÏMcc
+xœì½|U÷>~§ÏÜé…"u©‚„¶;K’²@H 	UD–d“,$ِlè‚HQŠ¨ˆˆˆŠ¨ØQ±"¢"6Ä®ˆØPTlˆ
+~3³'$ úõUßòÿ|þäeï;÷žçœsËsÎeã‹„Œæ 
+
+ÉÍïêGî"õ
+çsxay¸2ñÜoªó1¶pr܇¢ÍSœ–wœçãÅ•%å“ìÉ"gtGIÙ´âDmBì‘ÒH¸è°üØND¤/wZ{”:
+ÒÖ&¢:ÏmKËãSýÓº9ãÊb…áÄs£!ul_žZÙø„àȧîtZ}áòH‹	ƒopžŸG¨_«ŽÏY>¡~¯"ô\ëʪHeoîkg<>†SJÑV´ÛùymDkˆ
+Γ«ß$§e¹ÍG5NËb7±ˆìì´m at GÐ^§ç´›ÚH#b 
+8­½Éè;¢ mqd¤‘±4¢sè-t½•þ„Þƒ’éjz=Ž®&ÔMÌpfƒó7…ÚIèYÔm%ö£j´:D¨ít­ ýÔj#úÈA¡ù»Ñ2´Ípt±ˆšMÎ óœ–]Ì´Úù‰9ï÷k‰½ŽvÛˆyhZEÑä ´–ØçصEó¨r¶ã“ Yìè¿Ë‘µÇ¿UÓˆÙG`tœìä´9Ú;Xã½ÏæTgfŸ÷sÍvÐzv+kqm×cˆÄaöJ´í¥ÆP“¨·‰ùtú6z Z–ð 5-sd¯vÇ°ÅÄ4Çv÷g†+œB#6¢Cô8n¼#{§k‘ƒ¹…Ìs,*F۝¿SXͱ©71ŸZähê¾mŽöpé®ÎxG7˱¡DœÚt7ÚŒ:S+Ñ2G’g/›ÌuF®¡86/#–GÑ*uDÅô—Ž¯‘…ÐJ„äX†¦H%ù´Md»¬¢Mý†Žô=3ªUç¤Ó}çÛ„†l’§ù¶ž81d$Ý”µ‰i¶‰jÇo¢Ûµ9ð{/tN4d¤oÓ¯¡—á´åtªî“Óì´‡2¼w.è&¦ó¿¬q›|…¥¾ÅÚâ6½k‘^5ëØ]~¼¹³?øᵟ†ÊUnË)Fº-Ö
+ª uB¥HB$ÒP?Ä#D7`JÒ]KMˆ¾'Ç­"üP'H„:‰hâG¨SH$Bvê½ Î ‰uarÔy¤;û&QU„ .×w
+uÙ½ÇC]Cbï{ ®#º÷N‘ gX7Ý­¨!±ê$≯ N9íÇ¡N£†dk¨3¨1™	uYd9ÔyÔš\
+uõ"Ÿ‚ºÜ®Õê
+*íuêjØû¨ëˆïý0JwÖZ%š†ªP•8Ž#ê€
+UåC~ÔÍù	8µñNJsúĝ•wzGP•£$§5U8ý»8µTTæüøPÞIYÕÞSÄ)#ΘÉÎg‘Óÿ	Ô'Q¤É–»+*œÞ®agÌ¿†˜áÔ&8ã†;çŸÏA*uê®´ˆ7"ìYäœóN›ÏѬÆÁ.sž
+§"·Üéá¾Ã¥Ç*§UEKJã¾…}þnݾñÓ|iÑxu¼*.OòeUvñ¥–•ùòÜ^Õ¾¼Hu¤jr¤¨þÍÐîЂðäò	±Š_Z¸ôwfD&„‡×8›'\Q©ö…«"¾h…¯²f|Y´ÐW+G+ÍN51ß3Ð9`p~¸ÂyHsŒ‰¡‰N%›øç†ü™>Ã=oW;>Šyô;>÷;+
+TUGc>àTQ§	:V±'-1§qXqµ¸Å±
+ÇEqÇãÈ›÷¸3k½PWç§dLvdtqÆÆœ²Ê™Éˆ'¯Ê›ó.ŽÜˆ3•Æ㕽ºv-r„N®éR«©*ŒǪJ"]*"ÎëÌzÔ®‘ÚuúÛÝà¾s×]Ä[»gÅЧ¯»Rÿ™õçJêï¼™æô)õFFw•ž]qo­»^«òF¸»Ã•:ù4OžnGÝþª9eýž5Øù9“í‰5vjõ½ö۝ŽQç¿ñƒÿÔéñÏŸYgžï:›£ÎìÕâ^‹»
+Ë=_OtÚbÎü_º¸–
+ñä•{ÒêvSÔÓ©Ô{»J<”
+˜õ$˜÷Äl%Ðk,±Þ“<½bÞìWxã+aÇ&bŽÔ8¬±(¬‚°'#ái2㞧¯§B¯Ÿ»Òk%¸½º'ÖrÄÛð‰µ×ºÞ*iíÍœ;¶È+«=½
+1a°{» ÐY¡åž”¸÷¦Ö?ÅN­vR‡“:Ö!¸§–«ÜY¿‰Õï"ÖùÄm©ôvM‘ƒP荮զȳ î­µñÎÛ¸÷6ÿ !	vs¡£Y'%á“)Þ(õN¥8x¦Ük«oQ­
+U§¬Ê„¶5ž“êÍŽ[/÷æ31׸Þ	RíŒNú;’NÚÙÕ;A|žäÄ~HÈŽ‚WOý?¶ºÖs	m+O®è¸§Wݪ«³hŠçò?…P»Š½S½,ŒÔC,ò>]Œ$¯t=1ÁéQèÉKô©?w—ÁÉV;C…v‘§q4íåíÎÐ.ìHŒy'CÝÔ?‹ê<ðÛ“ Âé‡ÝP}JßÚ½Rç±úg@ýq>Ïæ°§9öÎæS×ZÂ	.	ÿÁ|Æ<ôÁÜ—{eÝùñgæ"î1‘ˬa°¨Ë)žú£±®O¦·$Ð]Ÿ{:ÁJ*óÖiÕÉ–„¦®O‹êÍyýUWË a£Þ™Qæ=á“yšºóUQÏ%§ðj©ö
+{«'±vk1N÷OõÿiS­–,¨[aaoŽþ¼§âœî3é–ó]捋þÎiŽOÎN•wΆ½s¥NnmKõÉY»_NgœsÏŠZ¤)žUEÞøÖgàÃÖ'í>}vÞÕ²mëz«,±g²Oã—ñÞ~ÕÓµöAí:™ì¼žÁc4ÕósìäJç'Á^aïDœQÞ:׶à3î”Rï„÷ye5èñVÒï­“Ú³îLgw‘ÇÞ¼×÷×™¼Šëy®þþÕ½Z흚µ\]·Ûjw’9”Œ=ª`Ä©+½=Ñù,K𡻪ðÉSõßyRý¾UãaÄ‹Ozj 
+y8¹(Çyrqr§4‰#ó¼wYN›Ï‰ãòœ7ݧ§5Û—Tïû¾µ·G8uWb.æÉJÈÈs>]Ù£œW¶Ï{vŸ9ýsYîØéa„iùŽf¹NÝ•=ØiÍvÊôsG¤;-Ãœg·Þ¹Qh/ÇUàíwœ«KBÓ§½õT­²<ÄZÍ;OyŽüð6Õ‘åÉsõOòâ#·žz&<—çIw}äJve¦;e{Onë0§âôË÷ü™êÙœÐ6dz!ÓyŸ°%äi˜‰„FéN9ÄÁv{ôwô*ð¼à"@Ï$o]{2¼ñ.ê ¯WB³\˜e·^'¥ø2¡‡ëÿá'‘ó=û³ŸgÓRàÍMª#¿VníÚéïIpõÆž7†yö¥z~ÈõÒ¼~®]fŸ\qyõf%Ýó—;o®æRªç‘ü3ZR+­þìœiuà“ý=ûBž§²½ÞùŽCNÿ¬“-‰õ˜åÙš¾NÈL¬ûĚȮçÝtÏFwf‡:¨!XS©žïNµÂ§žþuV$f >Óëù¬nös`vkõ)ðÎà•Þ^y½R½¹Î?¹G2½ý;4vr…՝Ã`}æžÔìTÿÖî£Ú~æìHȪÅ>u3¼õ”
+æŸôF¢þ¹‰³+äðZ¡—çÄOžÛ§2wý¨±.­w&Õ;këG‰S¸¿×·ü´~u­‰l)ÁYu¹NýØíLvmvœˆåk£Þºè#qv'r¢úQo‘Ÿ'bÀê“QIÌ‹c'#“)ÞÛ:N¯„»“Ø)yž‹ö¸?é$V-ÕÉJÄ•a/ZpѪÏàÍßg(ü›Ì°Òãûʯ‡Èĵ¯úºíÓOˆkï~;¾3ÎA­-gŠêû¿Ê›ïJÈ¥¢ž‡Ýx²È­BµyYO\$îÝÊO›õºÕçJë…N¿Up}PROó"Ï×%îð\LìWµw\ÿý[§úÎúé>Ÿrtzäõï»Âg¼òý‡ïƒðŸº:5’/¬§SÝ]GmÏ?wƒz¦ü_»Wòýæ^	ÿÿ÷Jõî•ênþ¿y¯„OaØÿÞ½>C¶ö¿p¯„Ïx¯TgÑæ^	ÿÁ}Áæ^	£õ^©î_þÉ{¥ºývê½Òï±ïïß.%òóD$ñ¿v»„Ñ©·Kg¾ÝøÏÜ.á?𮯞ÿ·o™°·Æ~Íüço™ðÿð->í–©.×ýOÞ2áÿó–É÷»eÂÿÂ-“ïßvË„=w¤ô´Mx;ÕyÿŸ»;ÂgœóÿÖÝþÍÝ‘ï¿vw„÷î¨îèßw„ÿ…»£?’ûï½;ª=YŸQ~{ãƒÿOý[šòÆÿ­ŸßælíÆ×»ñù£{‡â†&þùýPÝMöpܧ.ez_Ðr¿ªæ~Ùíä÷ã|ª#ßøHYlJÇ.¾?ñŶ.¾þeÓ*K«}ÑòÊXU<Rä+®Š•ûR«"“áK`µÞéj_¤«ƒqúðHUØ—Píä·ñpç?üƒû½½?ý•?ßiÈÑjöÅ«ÂE‘òpÕD_¬øt)‰T•G«½/ÍE«}¥‘ªˆƒUR®pLOrlwÌr†9«*‰$ùâ1_¸bš¯2RUíˆ;‹:.û
+¥±Ó3^©õSaa¬¼Òéîvˆ—:Ò/G*ªïµö\Òº£#¬È®®ŽFÃ.ŠÖ”G*âḫOq´Ì™¤®Do€/?VŸâ¸¿uGO“ªHeU¬¨¦0â‰)Š:†EÇ×Ä#®ø”IÎ4–Õ¹šL‰ÆKc5qG™ò( ¹U	W:bkªþ®9I¾òˆk5öHuiR=Œ$³k¬ÊWqæÁéuTóOƒv•sÄVºŽŽã„ë< )¥ÎÂúÍ wŠkª*Àˆ7°(æ«Ž%ùªkÆOˆÆÝ×¾âX™³Ø\ƒ
+cEQ׎ê^8âÂãc“#ž‰Uä)prTÄâÎ4T'ZÝY©¬[‰w¾êÒpY¯9j8»$|Š±
+g]TùÊcU‘3ší‹O«Œ‡ .	¥N}[žæìgxQ´8ê.´pYÜYzNÅ.*ò,O¸ÎÝ á*G¯š²pvŠ"ÕÑ’
+O’Ä^u¹+4\è©vGÔêS}:’+; žÃÂeg cjõ¨“æ¨WQ6Í­·Ì±kNUÄýµ	¯¯[©véÎKíöˆ8k.Rå
+š«*ªöµ>¹[»Øµ/pkwÛ¶ö\æÌL6ì—ñg'¹Rkœ9p}29=©XdjÜÙ1¾pe¥³½ÂãË"î‹„íŽd·‚ë&¥4÷•†«‰‘ŠS|⮺ºÕ]ä«©(…ëTÅžr	ÿhV«ceî®ö¦Í¤°¯Ì==œ½RÛ±2\81\âæìÊv—꿶¨Nr,GÅHY±«Ô€/37§À—Ÿ›Y0"5/äËÊ÷
+ÉËž•ÊðµNÍwž['ùFdÈVàszä¥æŒòåfúRsFùeåd$ùB#‡ä…òóqnž/kðì¬Ó–•“ž=,#+§¿/Í—“[àËÎœUà-Èõ†‚¨¬P¾+lp(/}€ó˜š–•U0*	gfä82åò|©¾!©yYéòSó|C†å
+ÉÍ922±9Y9™yJhpÈ1”ž;dT^VÿIΠ§1	ä¥f„§æ
+Jò9Âr“ó|^—.Ž–Ž_h¸;8@jv¶/-« ¿ /”:Øíëz§NîàÎÌ–“‘Z•›ãK9¦¤¦e‡º9¦¤g§f
+Nòe¤NíïšSâvK˜SçìèÊ	å¥f'ùò‡„ҳ܊ãǬ¼Pz×Óñ½ã‰lOÝôÜœüÐÐaNƒÓ¯"	ò Rÿ¥{šyæç8æºr
+ró
+Nª2"+?”äKÍËÊwg$3/×QםÏÜLosüéN^èëΑÛöÛÕáôrGƒ¡ÔlG`¾«†Ó€Oé묮ÐÔÂHeÜ]Û°¹G£wŒ&ÎÎ$oÕ&g	÷¯p6n¢Í«:´äì,u§[a»tœ”8z½ãÃYÝ%ŽÞ¢Éç¬v’XŽ¹‡É”hµ·Ó
+,%8ÏW.sÀœQî.òz9ge¸ÌV}RÍS6®%Ãʪ¨3dJU4î&¾pÓZ4\4åY૳ÀE©;úWEª+–ŠNŽ”Mëâô­r¹ÌÓ$ZQ«*Ó=÷Æ{Õ†
+q_‰'¼(DZª’.>Œ½ˆëo‡NöWþ™8'â ß_‰ƒp]äû‹qþm‡|¡'©º–3ΠÖ,øïÄJ¾ÚX	ÿoÄJ81ÿ¶X	'6ìߊ•ð?+áºXÉ÷c%|J\ðb%ü{±’ïÏÇJ¸^¬Tûž.9|îÿT¸„!\òý­p	Ÿ¢®—7þÓ!®ˆùþvÈ„ÿѐ	CÈäûë!>=dòý•	Ÿ1dòý+!.H>x`®«vꀿá:ËÿNt„k£#ß߉ŽpýèÈ÷—¢#|ÆèÈ÷w¢#w±ž²QN>øwß¿øà?||"ðÁ^àsjìð4ñÚþý¼ wqŠ.çw»z÷v¿]½»³"ï_õºxÿ¾Z鴝ú¯…ü†]§D'F»FÃjj—ÊÒÊ®pbþ¥ßå$¿ }â"4áµÂûhQˆFb‡x$ ŒD$!)HEÒ‘Ld¡¨!j„£³PÔ5CÍQÔÒQ¤jÚ ¶¨jÎFPGtê„’PgÇþ®¨êîýÖ§‚¨JF=QŠãßÞè\ÔõEç¡~Þ=wºwéý›Gˆ9ìý‹Ç4åyßžæ>D£[ÎGcÐh,ºsÜp'º]‚æ£GÐJô)º-E—¡ëÑíh=A¢Åè-4]‰¾Aߢ%è´í@ÑZ´}¾CGÑMè.ô,Ú…îFã9ZîÌÝnÇÑÏ çЋèy´½€!÷¿'ðzÝãÌútz
+½Šö9sû9ú-r&ŝûrTæLÈ:Çý“¼[Ûjïvv²³2>sÖÂt4
+Í@³ÐL´݈f£‹Ðt1:Œ¾DÛŠ 	†`	Žàѯè8!˜		 !
+¡¡:a&a
+ˆ†D#¢1qÑ„hŠŽ¡‰fDs¢Ñ’ð­ˆÖD¢-ÑŽhOœMt :çÐOèu"‰èLt!º݈6$zÉDO"…è…>@‰ÞĹD¢/qяH%Òˆt"ƒ™Db ‘…6¡{‰Ä "›Lä¹Äb(‘G䣟Ñ/èCôQ@#†#ˆ‘Ä(b4q>1†¸€K\HŒ#ÂÄx¢(""D1QB”Qô01˜H”åècô	QAĈJbQETq¢†˜LL!¦ÓˆéÄb&1‹¸ˆ˜MÌAˆ‹‰¹Ä<âb>q)±€XH,"——Kˆ¥Ä2b9q±‚¸’¸Š¸šXI\C¬"®%V×kˆë‰µÄ
+Ä:âFâ&âfb=q±¸•¸¸ØHÜAÜIÜEÜMÜCl"î%6÷[ˆû‰ˆ‰­ÄCÄ6âab;ññ(ññ8ññ$±ƒxŠØI<Mì"ž!ž%ž#vÏ{ˆˆ‰—ˆ—‰Wˆ½Ä«Ä>â5âuâ
+âMâ-âmââ]â=b?ñ>q€ø€8H|H|D|L|B|J">#>'___Gˆ¯‰oˆo‰ïˆï‰£ÄÄ1âGâ'âgââWâ8q‚D$A’$EÒ$C²$Gò¤@bR$%R&R%5R'
+Ò$-²ِlD6&Ï"›MÉfds²Ù’ô‘­ÈÖd²-ÙŽlOžMv ;’琝È$²3Ù…ìJv#»“~2@ÚdìA&“=ɲٛ<—ìCö%Ï#û‘©d™Nf!2“ìO ³Èä 2›L搹är(™Gæ“ä0r89‚IŽ"G“ç“cÈȱä…ä82LŽ'É"2B“%d)%'É2²œ¬ cd%9‰¬"«É8YCN&§SÉiätr9“œE^DÎ&琓sÉyä%ä|òRr¹\D.&/#/'—KÉeärò
+ry%yy5¹’¼†\E^K®&¯#אדkÉÈuääMäÍäzòry+yy;¹‘¼ƒ¼“¼‹¼›¼‡ÜDÞKn&ïCo äò~òòAr+ù¹|˜ÜN>B>J>F>N>A>Iî@o£wлè}ô&ÚO>Eî$Ÿ&w‘ϐϒϑ»ÉçÉ=ää‹äKäËä+ä^òUrùù:ùù&ùù6ùù.ù¹Ÿ|Ÿ<@~@$?$?"?&?!?%‘Ÿ‘Ÿ“‡É/È/ɯÈ#ä×ä7ä·äwä÷äQòòù#ùù3ùù+yœ<A!Š HŠ¢hŠ¡XŠ£xJ 0%R%S
+¥R¥SeRÕ€jH5¢SgQM¨¦T3ª9Õ‚jIù¨VTkª
+Õ–jGµ§Î¦:P©s¨NTÕ™êBu¥ºQÝ)? l*Hõ ’©žT
+Õ‹êMKõ¡úRçQý¨T*J§2¨•Iõ§PYÔ@j•M
+¦r¨\j5”Ê£ò©j5œA¤F¡¨ÑÔùÔêj,u!5Ž
+Sã©BªˆŠPÅT	UJE©	ÔDªŒ*§*¨ºŽª¤&QUT5§j¨ÉÔj*5šNÍ fR³¨‹¨ÙÔêbj.5º„šO]J- R‹¨ÅÔeÔåÔj)µŒZN]A­ ®¤®¢®¦VR×P«¨k©ÕÔuÔêzj-uµŽº‘º‰º™ZOÝBm n¥n£n§6RwPwRwQwS÷P›¨{©ÍÔ}Ôê~êêAj+õµz˜ÚN=B=J=F=N=A=Ií ž¢vROS»¨g¨g©ç¨ÝÔóÔêêEê%êeêj/õ*µzzzƒz“z‹z›z‡z—zÚO½O > RRQSŸPŸR‡¨Ï¨Ï©ÃÔÔ—ÔWÔêkêê[ê;ê{ê(õuŒú‘ú‰ú™ú…ú•:N MÐ$MÑ4ÍÐ,ÍÑ<-Иi‰–i…ViÖiƒ6i‹n at 7¤эé³è&tSºÝœnA·¤}t+º5݆nK·£ÛÓgÓèŽô9t':‰îLw¡»ÒÝèî´ŸÐ6¤{ÐÉtO:…îE÷¦Ï¥ûÐ}éóè~t*F§ÓtˆÎ¤ûÓè,z =ˆÎ¦Ó9t.=„JçÑùt=ŒN GÒ£èÑôùôúz,}!=ŽÓãéBºˆŽÐÅt	]JGé	ôDºŒ.§+è]IO¢«èj:N×Гé)ôTz=žAϤgÑѳé9ôÅô\z}	=Ÿ¾”^@/¤Ñ‹éËèËé%ôRz½œ¾‚^A_I_E_M¯¤¯¡WÑ×Ò«éëè5ôõôZúz}#}}3½ž¾…Þ@ßJßFßNo¤ï ï¤ï¢ï¦ï¡7Ñ÷Ò›éûè-ôýôôƒôVú!zý0½~„~”~Œ~œ~‚~’ÞA?E蘭¦wÑÏÐÏÒÏÑ»éçé=ôô‹ôKôËô+ô^úUzýý:ýý&ýý6ýý.ý½Ÿ~Ÿ>@@¤?¤?¢?¦?¡?¥ÑŸÑŸÓ‡é/è/é¯è#ô×ô7ô·ôwô÷ôQúúý#ýý3ýý+}œ>Á †`H†bh†aX†cxF`0#2#3
+£2£3c2Ó€iÈ4b3g1M˜¦L3¦9Ó‚iÉø˜VLk¦
+Ó–iÇ´gÎf:0™s˜NLÓ™éÂteº1Ý?`l&Èô`’™žL
+Ó‹éÍœËôaú2ç1ý˜T&Ig2˜“Éôg0YÌ@f“Ífr˜\f3”Écò™f3œÁŒdF1£™ó™1ÌÌXæBffÆ3…LaŠ™¦”‰2˜‰LSÎT01¦’™ÄT1ÕLœ©a&3S˜©Ì4f:3ƒ™ÉÌb.bf3s˜‹™¹Ì<æf>s)³€YÈ,b3—1—3K˜¥Ì2f9s³‚¹’¹Š¹šYÉ\ìb®eV3×1k˜ë™µÌ
+Ì:æFæ&æff=s³¹•¹¹ÙÈÜÁÜÉÜÅÜÍÜÃlbîe63÷1[˜û™˜™­ÌCÌ6æaf;óó(óó8óó$³ƒyŠÙÉ<Íìbžažežcv3Ï3{˜˜™—˜—™W˜½Ì«Ì>æ5æuæ
+æMæ-æmææ]æ=f?ó>s€ù€9È|È|Ä|Ì|Â|Êb>c>g3_0_2_1G˜¯™o˜o™ï˜ï™£ÌÌ1æGæ'ægææWæ8s‚E,Á’,ÅÒ,ò,Çò¬ÀbVd%VfVe5Vg
+Öd-¶ېmÄ6fÏb›°MÙfls¶Û’õ±­ØÖl¶-ÛŽmÏžÍv`;²ç°Ø$¶3Û…íÊvc»³~6ÀÚlíÁ&³=Ù¶Û›=—íÃöeÏcû±©l›Îf°!6“íÏ`³Øì 6›Ìæ°¹ìv(›Çæ³ì0v8;‚ÉŽbG³ç³cØرì…ì86ÌŽgÙ"6³%l)e'°Ù2¶œ­`cl%;‰­b«Ù8[ÃNf§°SÙiìtv;“Å^ÄÎfç°³sÙyì%ì|öRv»]Ä.f/c/g—°KÙeìrö
+v{%{{5»’½†]Å^Ë®f¯cװ׳kÙØuììMìÍìzöv{+{{;»‘½ƒ½“½‹½›½‡ÝÄÞËnfïc·°÷³°²[Ù‡ØmìÃìvööQö1öqö	öIvû»“}šÝÅ>Ã>Ë>ÇîfŸg÷°/°/²/±/³¯°{ÙWÙ}ìkìëìì›ì[ìÛì;ì»ì{ì~ö}ö û{ýýˆý˜ý„ý”=Ä~Æ~Îf¿`¿d¿b°_³ß°ß²ß±ß³GÙØcììOìÏì/ì¯ìqö‡8‚#9Š£9†c9Žã9ÃœÈIœÌ)œÊiœÎœÉY\®!׈k̝Å5ášr͸æ\®%çãZq­¹6\[®מ;›ëÀuäÎá:qI\g®וëÆuçü\€³¹ ׃Kæzr)\/®7w.ׇë˝ÇõãR¹4.ËàB\&ןÀeq¹A\67˜Ëár¹!ÜP.Ëç
+¸aÜpn7’ōæÎçÆppc¹¹q\˜ÏrE\„+æJ¸R.ÊMà&re\9WÁŸJnWÅUsq®†›ÌMá¦rÓ¸éÜn&7‹»ˆ›ÍÍá.ææró¸K¸ùÜ¥Ün!·ˆ[Ì]Æ]Î-á–r˸åÜÜ
+îJî*îjn%w
+·Š»–[Í]Ç­á®çÖr7p븹›¸›¹õÜ-ÜîVî6îvn#ww'ww7w·‰»—ÛÌÝÇmáîçàä¶rqÛ¸‡¹íÜ#Ü£ÜcÜãÜÜ“Üî)n'÷4·‹{†{–{ŽÛÍ=Ïíá^à^ä^â^æ^áör¯rû¸×¸×¹7¸7¹·¸·¹w¸w¹÷¸ýÜûÜîî ÷!÷÷1÷	÷)wˆûŒûœ;Ì}Á}É}Åá¾æ¾á¾å¾ã¾çŽr?pǸ¹Ÿ¸Ÿ¹_¸_¹ãÜ	ñOòOóÏòÏóy‘—x™Wx•×x7x“·ø|C¾ߘ?‹oÂ7å›ñÍù|KÞÇ·â[ómø¶|;¾=6߁ïÈŸÃwâ“øÎ|¾+ߍïÎûù oóA¾ŸÌ÷äSø^|oþ\¾ß—?ïǧòi|:ŸÁ‡øL¾??€Ïâòƒøl~0ŸÃçòCø¡|ŸÏðÃøáü~$?Š͟Ϗá/àÇòòãø0?ž/ä‹ø_Ì—ð¥|”ŸÀOäËør¾‚ñ•ü$¾Š¯æã|
+?™ŸÂOå§ñÓùüL~?›ŸÃ_ÌÏåçñ—ðóùKùüB~¿˜¿Œ¿œ_Â/å—ñËù+øü•üUüÕüJþ~-¿š¿Ž_Ã_ϯåoà×ñ7ò7ñ7óëù[ø
+ü­ümüíüFþþNþ.þnþ~/¿™¿ßÂßÏ?À?Èoåâ·ñóÛùGøGùÇøÇù'ø'ùüSüNþi~ÿÿ,ÿ¿›žßÿÀ¿È¿Ä¿Ì¿Âïå_å÷ñ¯ñ¯óoðoòoñoóïðïòïñûù÷ùüüAþCþ#þcþþSþÿÿ9˜ÿ‚ÿ’ÿŠ?ÂÍÃËÇÏåàñ?ò?ñ?ó¿ð¿òÇù(8¢ 	² ª 	º`¦`	
+„†B#¡±p–ÐDh*4š-„–‚Oh%´Úm…vB{ál¡ƒÐQ8Gè$$	….BW¡›Ð]ðÁ‚B!Yè)¤½„Þ¹B¡¯pžÐOHÒ„t!C	™Ba€%	ÙÂ`!GȆC…<!_(†	Ã…ÂHa”0Z8_#\ Œ.Æ	aa¼P(	¡X(J…¨0A˜(”	åB…*…IB•P-Ä…a²0E˜*L¦3„™Â,á"a¶0G¸X˜+Ì.æ—
+„…Â"a±p™p¹°DX*,–W+„+…«„«…•Â5Â*áZaµp°F¸^X+Ü ¬nnnÖ·„[…Û„Û…ÂÂ]ÂÝÂ=Â&á^a³pŸ°E¸_x at xPØ*<$l¶
+	OO
+;„§„ÂÓÂ.ááYá9a·ð¼°GxAxQxIxYxEØ+¼*ì^^ÞÞÞÞÞÞÞöï„„ƒÂ‡ÂGÂÇÂ'§Â!á3ásá°ð…ð¥ð•pDøZøFøVøNø^8*ü ~~~~~Ž'0Â&1…iÌ`s˜ÇÆXÄ–±‚U¬aØÄn€âF¸1>7ÁMq3Ü·À-±·Â­qÜ·ÃíñÙ¸îˆÏÁpஸîŽý8€mÄ=p2î‰Sp/ÜŸ‹ûà¾ø<ܧâ4œŽ3pgâþx ÎÂñ œãœ‹‡à¡8çã<Ç#ðH<
+Æçã1ø<_ˆÇá0qŽàb\‚KqOÀq.Ç8†+ñ$\…«q×àÉx
+žŠ§áéxž‰gá‹ðl<_Œçâyø<_Šà…x^Œ/×ã%x)^†—ã+ð
+|%¾
+_Wâkð*|-^¯Ãkðõx-¾¯Ã7â›ðÍx=¾oÀ·âÛðíx#¾߉ïÂwã{ð&|/ÞŒïÃ[ðýøü ÞŠÂÛðÃx;~?Š6£ûðcøqüz =ˆžÂO¢-è~´ï@sÑ“h~
+ïÄO£;ð.ü~?‡wãçñô4~¿ˆ_Â/ãWð^ü*Þ‡Eá×ðëø
+ü&~¿ßÁïâ÷Ðv¼¿àðAü!þŒ?ÁŸâCø3ü9>Œ¿À_â¯ðü5þ‹¿Ãßã£ø|ÿˆÂ?ã_ð¯ø8>!"‘I‘i‘Y‘yQ±(Š’(‹Š¨Šš¨‹†hŠ–Ø@l(6‹g‰MĦb3±¹ØBl)úÄVbk±ØVl'¶Ï; ÄŽâ9b'1Iì,v»ŠÝÄî¢_ˆ¶{ˆÉbO1Eì%öÏûˆ}ÅóÄ~bª˜&¦‹bHÌû‹Ä,q 8HÌ‹9b®8D*æ‰ùb8L.ŽGŠ£ÄÑâùâñq¬x¡8N‹ãÑåb¡X$FÄb±D,£âq¢X&–‹bL¬'‰UbµkÄÉâqª8Mœ.ÎgŠ³Ä‹ÄÙâñbq®8O¼Dœ/^*.Š‹ÄÅâeâåâq©¸L\.^!®¯¯¯WŠ×ˆ«ÄkÅÕâuâñzq­xƒ¸N¼Q¼I¼Y\/Þ"nooo7ŠwˆwŠw‰w‹÷ˆ›Ä{ÅÍâ}âñ~ññAq«ø¸M|XÜ.>">*>&>.>!>)îŸwŠO‹»ÄgÄgÅçÄÝâóâññEñ%ñeñq¯øª¸O|M|]|C|S|K|[|G|W|OÜ/¾/?ŠŠ‰‹ŸˆŸŠ‡ÄÏÄÏÅÃââ—âWâñkññ[ñ;ñ{ñ¨øƒxLüQüIüYüEüU<.žDH¤DI´ÄH¬ÄI¼$HX%I’%ER%MÒ%C2%Kj 5”I¥³¤&RS©™Ô\j!µ”|R+©µÔFj+µ“ÚKgK¤ŽÒ9R')Iê,u‘º¢UR7©»äG·IÉ–‚R)Yê)¥H½Ðj©7º}%+õ‘úJçIý¤T)
+Ý"¥KR­2¥þÒ )K(
+’²¥ÁRŽ”+
+‘†¢5Rž”/HäáÒi¤4J-/‘.ÆJJ㤰4^*”Š¤ˆT,•H¥RTš M”ʤrt«T!ŤJi’T%UKq©Fš,M‘¦JÓ¤éÒi¦4KºHš-Í‘.–æJó¤KÐ2i¾t©´ ]…®–J‹¤ÅÒeÒåÒi©´LZ.]!­®”®’®–VJ×H«¤k¥ÕÒuÒézi­tƒ´NºQºIºYZ/Ý"mn•n“n—6JwHwJwIwK÷H›¤{¥ÍÒ}Òé~ééAi«ô´MzXÚ.="=*=&=.=!=)퐞’vJOK»¤g¤g¥ç¤ÝÒóÒééEé%éeéi¯ôª´OzMz]zCzSzKz[zGzWzOÚ/½/>JJIKŸHŸJ‡¤Ï¤Ï¥ÃÒÒ—ÒWÒékéé[é;é{é¨ôƒtLúQúIúYúEúU:.‘LȤLÉ´ÌȬÌɼ,ÈXeI–eEVeMÖeC6eKn 7”ɍå³ä&rS¹™Ü\n!·”}r+¹µÜFn+·“ÛËgËäŽò9r'9Iî,w‘»ÊÝäî²_ȶ”{ÈÉrO9Eî%÷–Ï•ûÈ}åóä~rªœ&§ËrHΔûËä,y <HΖË9r®<D*çÉùr<L.GÊ£äÑòùòùy¬|¡<NËãåB¹HŽÈÅr‰\*Gå	òD¹L.—+ä˜\)O’«äj9.×È“å)òTyš<]ž!Ï”gÉɳå9òÅò\yž|‰<_¾T^ /”É‹åËäËå%òRy™¼\¾B^!_)_%_-¯”¯‘WÉ×Ê«åëä5òõòZùy|£|“|³¼^¾EÞ ß*ß&ß.o”ïï”ï’ï–ï‘7É÷Ê›åûä-òýòòƒòVù!y›ü°¼]~D~T~L~\~B~RÞ!?%–wÉÏÈÏÊÏÉ»åçå=òò‹òKòËò+ò^ùUyŸüšüºü†ü¦ü–ü¶üŽü®üž¼_~_>  ”?”?’?–?‘?•ɟɟˇå/ä/å¯ä#ò×ò7ò·òwò÷òQùù˜ü£ü“ü³ü‹ü«|\>¡ …PH…Rh…QX…SxEP°"*’"+Š¢*š¢+†b*–Ò@i¨4R+g)M”¦J3¥¹ÒBi©ø”VJk¥ÒVi§´WÎV:(•s”NJzHé¬tQº*Ý”îŠ_	(¶Tz(ÉJO%Eé¥ôVÎUú(}•ó”~Jª’¦¤+JHÉTú+”,e 2HÉV+9J®2Dªä)ùJ2L®ŒPF*£”ÑÊùÊåe¬r¡2N	+ã•B¥H‰(ÅJ‰RªD•	ÊD¥L)W*”˜R©LRª”j%®Ô(“•)ÊTeš2]™¡ÌTf))³•9ÊÅÊ\ežr‰2_¹TY ,T)‹•Ë”Ë•%ÊRe™²\¹BY¡\©\¥\­¬T®QV)×*«•ë”5ÊõÊZåer£r“r³²^¹E٠ܪܦܮlTîPîTîRîVîQ6)÷*›•û”-ÊýÊʃÊVå!e›ò°²]yDyTyLy\yByRÙ¡<¥ìTžVv)Ï(Ï*Ï)»•ç•=ÊÊ‹ÊKÊËÊ+Ê^åUeŸòšòºò†ò¦ò–ò¶òŽò®òž²_y_9 | T>T>R>V>Q>U)Ÿ)Ÿ+‡•/”/•¯”#Ê×Ê7Ê·ÊwÊ÷ÊQåå˜ò£ò“ò³ò‹ò«r\9¡"•PI•Ri•QY•SyUP±*ª’*«Šªªšª«†jª–Ú@m¨6R«g©MÔ¦j3µ¹ÚBm©úÔVjkµÚVm§¶WÏV;¨ÕsÔNj’ÚYí¢vU»©ÝU¿Pm5¨öP“ÕžjŠÚKí­ž«öQûªç©ýÔT5MMW3Ԑš©öW¨Yê@uš­VsÔ\uˆ:TÍSóÕu˜:\¡ŽTG©£ÕóÕ1êêXõBuœVÇ«…j‘Q‹ÕµTªÔ‰j™Z®V¨1µR¤V©Õj\­Q'«SÔ©ê4uº:C©ÎR/Rg«sÔ‹Õ¹ê<õu¾z©º@]¨.R«—©—«KÔ¥ê2u¹z…ºB½R½J½Z]©^£®R¯UW«×©kÔëÕµê
+ê:õFõ&õfu½z‹ºA½U½M½]ݨޡީޥޭޣnRïU7«÷©[ÔûÕÔÕ­êCê6õau»úˆú¨ú˜ú¸ú„ú¤ºC}JÝ©>­îRŸQŸUŸSw«Ï«{ÔÔÕ—Ô—ÕWÔ½ê«ê>õ5õuõ
+õMõ-õmõõ]õ=u¿ú¾z@ý@=¨~¨~¤~¬~¢~ªR?S?W«_¨_ª_©GÔ¯ÕoÔoÕïÔïÕ£êê1õGõ'õgõõWõ¸zBC¡‘¥Ñ£±§ñš aMÔ$MÖMÕ4M×ÍÔ,­ÖPk¤5ÖÎÒšhMµfZs­…ÖRói­´ÖZ­­ÖNk¯­uÐ:jçh´$­³ÖEëªuÓºk~- ÙZPë¡%k=µ­—Ö[;Wë£õÕÎÓúi©Zš–®eh!-Së¯
+в´Ú -[¬åh¹Úm¨–§åkÚ0m¸6B©ÒFkçkc´´±Ú…Ú8-¬×
+µ"-¢k%Z©Õ&hµ2­\«ÐbZ¥6I«Òªµ¸V£MÖ¦hSµiÚtm†6S›¥]¤ÍÖæhksµyÚ%Ú|íRm¶P[¤-Ö.Ó.×–hKµeÚrí
+m…v¥v•vµ¶R»F[¥]«­Ö®ÓÖh×kkµ´uڍÚMÚÍÚzímƒv«v›v»¶Q»C»S»K»[»GۤݫmÖîÓ¶h÷khj[µ‡´mÚÃÚvííQí1íqí	íIm‡ö”¶S{ZÛ¥=£=«=§íÖž×öh/h/j/i/k¯h{µWµ}ÚkÚëÚÚ›Ú[ÚÛÚ;Ú»Ú{Ú~í}í€övPûPûHûXûDûT;¤}¦}®־оԾҎh_kßhßjßißkGµ´cڏÚOÚÏÚ/Ú¯Úqí„ŽtB'uJ§uFguNçuAǺ¨Kº¬+ºªkº®º©[z½¡ÞHo¬Ÿ¥7Ñ›êÍôæz½¥îÓ[é­õ6z[½Þ^?[ï wÔÏÑ;éIzg½‹ÞUï¦w×ýz@·õ ÞCOÖ{ê)z/½·~®ÞGï«Ÿ§÷ÓSõ4=]ÏÐCz¦Þ_ géõAz¶>XÏÑsõ!úP=OÏ×ôaúp}„>R¥ÖÏ×ÇèècõõqzX¯êEzD/ÖKôR=ªOÐ'êez¹^¡ÇôJ}’^¥Wëq½FŸ¬OѧêÓôéú}¦>K¿HŸ­ÏÑ/ÖçêóôKôùú¥ú}¡¾H_¬_¦_®/Ñ—êËôåúú
+ýJý*ýj}¥~¾J¿V_­_§¯Ñ¯××ê7èëôõ›ô›õõú-úýVý6ýv}£~‡~§~—~·~¾I¿W߬ߧoÑï×ÐÔ·êéÛô‡õíú#ú£úcúãúú“úý)}§þ´¾KFVNß­?¯ïÑ_Ð_Ô_Ò_Ö_Ñ÷ê¯êûô×ô×õ7ô7õ·ô·õwôwõ÷Ðãè	}¿þ¾~@ÿ@?¨¨¤¬¢ªÒ?Ó?×ë_è_ê_éGô¯õoôoõïôïõ£úú1ýGý'ýgýýWý¸~Â@aeÐc°gð†``C4$C6C54C7Ã4,£ÑÐhd46Î2šMfFs£…ÑÒð­ŒÖF£­ÑÎhoœmt0:睌$£³ÑÅèjt3º~#`ØFÐèa$=£—ÑÛ8×ècô5Î3ú©Fš‘nd!#Óèo0²ŒÆ #Ûlä¹Æc¨‘gäÆ0c¸1ÂiŒ2FçcŒŒ±Æ…Æ8#lŒ7
+"#b%F©5&2£Ü¨0bF¥1ɨ2ª¸QcL6¦SiÆtc†1Ó˜e\dÌ6æsyÆ%Æ|ãRc±ÐXd,6.3.7–KeÆrã
+c…q¥q•qµ±Ò¸ÆXe\k¬6®3Ö×kŒuƍÆMÆÍÆzãcƒq«q›q»±Ñ¸Ã¸Ó¸Ë¸Û¸ÇØdÜkl6î3¶÷[‡ŒmÆÃÆvããQã1ãqã	ãIc‡ñ”±ÓxÚØe<c<k<gì6ž7ö////¯{W}ÆkÆëÆÆ›Æ[ÆÛÆ;Æ»Æ{Æ~ã}ã€ñqÐøÐøÈøØøÄøÔ8d|f|n6¾0¾4¾2Ž_ßßßßGŒcƏÆOÆÏÆ/ƯÆqㄉLÂ$MʤMÆdMÎäMÁĦhJ¦l*¦jj¦n¦iZf³¡ÙÈllže61›šÍÌæf³¥é3[™­Í6f[³ÙÞ<Ûì`v4Ï1;™Ifg³‹ÙÕìfv7ýfÀ´Í ÙÃL6{š)f/³·y®ÙÇìkžgö3SÍ43ÝÌ0Cf¦Ùß`f™ÍAf¶9ØÌ1sÍ!æP3ÏÌ7Ìaæps„9ÒeŽ6Ï7ǘ˜cÍÍqfØošEfÄ,6KÌR3jN0'šef¹YaÆÌJs’YeV›q³ÆœlN1§šÓÌéæs¦9˼ȜmÎ1/6çšóÌKÌùæ¥æs¡¹È\l^f^n.1—šËÌåææ
+óJó*ójs¥y¹Ê¼Ö\m^g®1¯7ך7˜ëÌ̛͛Íõæ-æóVó6óvs£y‡y§y—y·y¹É¼×ÜlÞgn1ï704·š™Û̇Ííæ#æ£æcæãææ“æó)s§ù´¹Ë|Æ|Ö|ÎÜm>oî1_0_4_2_6_1÷š¯šûÌ×Ì×Í7Ì7Í·Ì·ÍwÌwÍ÷Ìýæûæóó ù¡ù‘ù±ù‰ù©yÈüÌüÜ<l~a~i~e1¿6¿1¿5¿3¿7š?˜ÇÌÍŸÌŸÍ_Ì_Íãæ	Y„EZ”E[ŒÅZœÅ[‚…-Ñ’,ÙR,ÕÒ,Ý2,Ó²¬VC«‘ÕØ:Ëjb5µšYÍ­VKËgµ²Z[m¬¶V;«½u¶ÕÁêhcu²’¬ÎV««ÕÍênù­€e[A«‡•lõ´R¬^Voë\«Õ×:Ïêg¥ZiVº•a…¬L«¿5ÀʲZƒ¬lk°•cåZC¬¡Vž•oXìáÖk¤5Êmo±.°ÆZZ㬰5Þ*´Š¬ˆUl•X¥VÔš`M´Ê¬r«ÂŠY•Ö$«Êª¶âV5ÙšbMµ¦YÓ­ÖLk–u‘5Ûšc]l͵æY—Xó­K­ÖBk‘µØºÌºÜZb-µ–YË­+¬Buq¼tZei¤‚K-VÅ*¸p¢dSÇWE&GØ°Wp©±’XEd"N”bza´ª°¦¼¸,2U,¬«ãô¢X<\X©ˆã“U6£0ìŠ,JŽüpœ` C	ÀˆWàP ÈÉ*5"‰’
+%$F¼Bì_O©’zJõ¯“Ur²*õ/Œ•—‡á¡¤Þƒ8 žœÒº:=`|¸Š.u>جx´¬(ÂF½‚ËK¢`IVÂ’hÂuY s4Q’YÉèq`=Œ	uuiP}­&žòPR‰T”…+Š¢…lv¸°&a˼Bʮ߯¬Þ›pP™WÐÙŽõt™óÁæ$ÆW$ÆçÔ_Q|Nb|EÂÁa÷ÿŽ«*æ,*TQBE*J¸\0>Æç&Œy…œ[ZSQ®ª)/×ÄåXý'6/¡CUB‡¼ú:TÕ×!/¡CU¢ÈOŒªö
+1¿ž«ë¹± ¾´x}i	1ñ„G
+Ü)»S:,1¥5‰)VÕ€UÃVÕx3¬*ZQÂÔ¸Ÿò°S,¬©ÿÄ
+ƒ©¯]3¢ž¶SêÕGÕ«O««³£¶N÷
+<ºnO?YeÊb%Õ\ME´[÷žÝ ì¥Ê ”6”A({@™eO(S L…2
+Êt(3 A™™(S ?ðS 7pS 7pS 7pS 7pS 7pS 7pS2™ÜÒXUs?m©`s*`§v*`§v*`§v*`§v*`§v*`§†˜afMfØ›Øi€Øi€Øi€Øi€Øi€Øi€v§¿ÓÁß速ø速ø速ø速ø速ø速ø速ø速ø€Ÿø€Ÿø€Ÿø€Ÿø€Ÿø€Ÿø€Ÿø€üà‡ ?ø!ÀÙþ‰]_âÐ
+è!@zÐC€ô ‡ =Ð3=Ð3=Ð3ÁúL°>¬ÏüÌœêž$‰M>YåRC‰2Iœu¹ÕeáêÒD=VW÷¤ø»uƒ²;”~(PÚP¡ìe2”=¡L2Ê4(Ó¡Ì€2eÂþî€ßð»~wÀïøÝ¿;àwO–òëŸÕÕõ hÒ4éštMºƒ&ÝA?hâMü ‰4ñƒ&~ÐÄšøÁ~ð„<á|?àûßø~À÷~ ð€ ü à ? ø¼sš—Eª«'@(  @ €P  
+@°A°A°A`ƒlÀ·ß|ðmÀ·ß|ðƒ€ü à?øAÀ~ðƒ€ü à?øAÀ~ð{ ~Àïø= ¿à÷ ü€ßð{ ~Àïø= ¿à÷ ü€ßð“?ð“?ð“?ð“?ð“?ð“?ð“?ð“?ð!ðCà‡0Àa€ ?„~üø!ðCà‡0Àa€ ?„~üø!ðCàO|üø!ðC8à‡pÀá€Â?„~üø!ðC8àOüTÀO|	üø!$ðCHà‡À!B?„~	üø!$ðCHàOüTÀO|üø!,ðCXà‡°ÀaÂ?„~üø!,ðCXà‡°ÀaÂ?„~üø!,ðCXà‡°Àa€ ?„~üø!ðCà‡0Àa€ ?„~üø!ðCà‡0À´îZ÷­ûÖý@ë~ u?к?òB /ò€Øý@ì~ r?¹ˆÜDíÏLJªÂ“ÝßÚ/x”êÖ¼wn~ÁKêµØP¡ìe2”=åÒXl¢÷‹ýõF¥B™e:”P† Lø  t :
+ €N@§ Ó Ði ;hѽ'”)P>h H4 $ 
+ ‰€D@¢¿_rHÊûŒÕL &
+ “€IÀ¤`Ò 0i ˜4 L &
+ “€IÀ¤`Ò 0i ˜4 L &
+ ? ø@¤ Ò i ˆ4 D "
+ ‘€H@¤ Ò i ˆ4 D "
+ ‘€H@¤ Ò i ˆ4 D "
+ ‘€H@  Ð h ˆ2 D B !€@ˆ Ä b 1 D "
+ Ñ€h@4 š@rˆ‰Ç*bÕrQ4R©ŽV{O8µ¬²4ìU…pE,)‹DÃR¨²:ꤦ^3ŠÃû¬Ô¤Üò¨›X'†ÕëŒsË#%‰NzÔé~
+ãaÑi‘x˜évÅ„b£ =ÚyE9xLA©S£]@fP¸²2Ìf‡ËÇ…ÉÁ5dN
+92ʁä(•Wcò£%åaª \Á6ԐÒ(•îüR•²êi¢B‡Úg>é )RßìH­ÙÑZ³­šS‡&ŒòÆÓã]£J\£˜¢HY<́,zºk’û2î™ä
+c&z&•y&%|–NVԐS£\,aUUc«]£º3^AÅÛ Ÿªtì*tþ:LÌu¸Tß×êijJ±ú³US¶b'g+¡FF7ÖS³;^‚5dÈ°i»;덫}ëòÁ äƒÈ @> â q€8@ Ž G ˆ# Ä â q€8@Ȑ€H@$ ’ d„Ȑ # Ñ #@F€Œ0 a 2Â@&àg~&àg~&àg~f߆ІІІÐ겁ºl .¨Ë†ІÐÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -HˆÌφÌϾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʆÄÏÞ²·là-???øÌ>³!ñ³!ñ³!ñ³çlà9xΞ³çlà9xΆÄφÄφÄφÄφÄφÄφÄφÄφÄφÄφÄφÄφÄφÄφÄφÄφÄϾµomHülHülHülHülàcøØ>¶mHülHülHülHülHülHülHülHülHülHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHølHøl¸¶á؆ІІІІІІІІІІÐη!´!´!´÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷ƒÀûAàý ð~x?¼Þï÷ƒÀûAàý ð~x?¼Þï÷ƒÀûAàý ð~x?|>jÛA/àà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø/üþÿÿ‚ÀAà¿ ð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚páÞïá<Ây„ó<çyÎó œçA8σpžá<ÂyL«•öÀy„ó<çyÎó œçA8σpžá<Âù„ó;çoÎß œ¿A8ƒpþáü
+ÂùûÿÚ;÷(¹ŽúÎwOMæ¥ÑŒ,lÙ2ƶ0Hóûuß[ÕÆÁºÝUeŒƒ0/³Ç‘f$M<ÒÈ3#ëxÍ’Å`âÄ„‡œ ^–—— IŒe›l6q ,
+	ádÙ<0ëd#'ë,D±Û{{êÓò…³gOþÊîž3ê3úõí©¾ßº·«¿ßºß«ú*óƒ÷Ó_ø7ƒ3ø7ƒ3ø7ƒ3ø7ƒ3ø7ƒ3ø7ƒ3ø7ƒ3ø7ƒ3ø7ƒ3x5ƒW3x5ƒW3x5‡Ÿr®+r®r®r®r®r®r®r®r®r®r®r®r®r®r®r®r®r®r®rø/‡ÿrø/‡ÿrø/‡ÿrø/‡ÿrø/‡ÿrx-‡×rx-‡×rx-‡×rx-‡×rx-‡×òÖ`¿¼–Ãk9¼–Ãk9¼–Ãk9¼–Ãk9¼–Ãk9<–3?Ïá©žÊá©žÊá©žÊá©žÊá©<ì—~ÃS9<•ÃS9<•ÃC9<“Ã39<“Ã39<“Ã39<“Ã39<“Ã39<“Ã39<“Ã39<“3?Ιç̇sæ¿9óלùjÎ<5g^š3ßÌá^Éá^È™¯åÌÓr¾÷9ߧœïSÎ÷)çû”¾OqОý1OÉ™§äÌS,<eá)OYxÊ2ï´Ì;-ý³ð–eÞi»ƒýÔµKõÔ@MÇká=ïYxÏÂ{Þ³¿…÷,¼gá=ïYxÏÂ{Þ³ðž…÷,¼gá=ïYxÏÂ{Þ³ðž…÷,¼g™_Zæ—–ù¥e~i™_Z>7ËçfùÜ,Ÿ›ås³|n–ÏÉ>'擁yQ`üÆo`ÜÆiàz0 ‡ë¾Àu\`Ü®ã×që·Àõ[àú-pýÚƒý*ýaÜ®Û×mëµÀuZàº,p]¸\¾ýèw@¿úÐïÀ÷( ßýèw@¿ºÐí€nÆ`üÆ`üÆ`ÜÆ{`¼Æ{`¼Æ{`¼Æw`|Æw`|Æw`|Æw`|Æw`|ÆsHãYfÓusY…ªÔ&µEͨ9ÕRµM-¨j—:ÀÔ˜jüøð;àwÀï€ß¿~üøð;àwÀï€ß¿~ü.ø]ð»àwÁï‚ïiïiïiïiïiïí鯧¿žþzúë鯧¿žþ>O=ý
+àðøü ~ ?€Ààðøü ~ ?€ÀàGð#øü~?‚ÁàGð#øüt+øׂ-øׂ-øׂ-øׂo-øÖ‚o-øÖ‚o-øÖ‚o-øÖ‚o-øÖ‚o-øÖ‚o-øÖ‚o-øÖ‚o-øÖ‚o-øÕ‚_-øÕ‚_-øÕ‚_-øÕ‚_-øÕ‚_-øÕ‚_-øÕ‚_-øÕ‚_-øÕ‚_-øÕ‚_-øÕ‚_-øÕ‚_-øÕ‚O-øÔ‚O-øÔ‚O-øÔ‚O-øÔ‚O-øÔ‚O-øÔ‚O-øÔ‚O-øÔ‚O-øÔ‚O-øÔ‚?-øÓ‚?-øÓ‚?-øÓ‚?-øÒ‚/-øÒ‚/-øÒ‚/-øÒ‚/-øÒ‚/-øÒ‚/-øÒ‚/-øÒ‚/-øÒ‚/-øÒ‚/-øÒ‚/-øÒ‚/-øÒ‚/-øÒ‚/-øÒ‚/-øÒ‚/-øÒ‚/-øÒ‚/-øÒ‚/-øÒ‚/-øÒ‚/-øÒ‚/-øÒ‚/-øÒ‚/-øÒ‚/-øÒe߁ïÀwà;ðø|¾¿
+~ü6ømðÛà·Áoƒß¿
+~ü6ømðÛà·ÁoƒßÅŸüiÁŸüiÁŸüiÁŸüiÁŸüiÁŸüiÁŸüiÁŸüiÁŸüiÁŸüiÁŸüiÁŸüiÁŸüiÁŸüiÁŸühÁühÁühÁühÁühÁühÁühÁühÁühÁühÁühÁühÁühÁühÁühÁühÁühÁühÁühÁühÁühÁühÁ‡|hÁ‡|hÁ‡|hÁ‡|hÁ‡|hÁ‡|hÁ‡|hÁ‡|hi
+ô9‚ÁO>´àC>´àC>´àC>´àC>´à#>²à#>rYy?:œ¡Ã™Þï¨mjAíP»TO
+Túgèq†gèq†gèq†gèq†gèq†gèq†gèq†gèq†ã—~¹à—~¹à—~¹à—~¹à—~¹à—~¹à—~¹à“>¹à“>¹à“>¹à“>¹à“>¹à“>¹à“>¹à“>¹à“þ¸àþ¸àþxYÁE—ñË¿\ðË¿\ðË¿\ðË%C—ñÍß\ðÍß\ðÍß\ðÍß\ðÍß\ð»¿[ð»¿[ð»¿[ð»¿[ð»¿[ð»¿[ð»¿[ð»¿[ð»¿[ðµËÊþÑË½ÌÐË½ÌÐË½ÌÐË½ÌÐË½ÌÐËËйËйËй¬¼ó‚Îeè\†Îeè\†Îeè\†Îeè¾´àC¾§à{
+~ àJμ(g^”3/Ê™á–5£²?Î?> à
+> à
+> à
+>`YµM-¨j—ê©ô›Ï'çóÁOüIJ‚Ï烿XVð™Ïà7–|æ39ó™œùŒ‡Ï=|îásŸ{øÜÃç>÷ð¹O÷ËÚ¦Ôu€ã©šŽÓ£=ðèG<zàяxtÀ£ðè€G<:àяxtÀ£ð耇÷=¼ïá}ï{xßÃûÞ÷ð¾‡÷=|ïá{ß{øÞÃ÷¾÷ð½‡ï=|ïá{ß{øÞÃ÷¾÷Í.Ç	ï{xßÃûÞ÷ð¾‡÷=ß'Ï÷ÉÃûÞ÷ð¾‡÷=¼ïá}ï{xßÃûžë1ÿ{øßÃÿþ÷ð¿‡ÿ=üïáÿ{øßÃûÞ÷ð¾‡÷=¼ïá}ï{xßÃûÞ÷ð¾‡÷=¼ïá}¿{øÝÃçð|¿üàûÅõ‚çzÁs½àáQzxÔãõð¨‡G=<êáQzxÔãõð¨‡G=<ê¹^ð\/x®<מëÏõ‚çzÁs½à¹^ð\/x®<מëÏõ‚Ç—óøržëÏõçúÀs}à¹>ð\x*ÀSž
+ðT€§<à© Ox*ÌöWP;Ô.ÕS5õ7ÀSž
+ðT€§<˜·ø*ÀW¾
+ðU€¯|à« _ø*ÀW¾
+ðU€¯|˜·æ­þ
+ðW€¿ü௠ø+À_þ
+Ì[<à± x,ÀcðX€Ç<à± x,Àcð÷3$ÀcðX€Ç<à± x,ÀcðX€Ç<à± x,ÀcðX€Ç<à± x,ÀcðX€ÇóØ Ÿø,Àg>ðY€Ï|à³ Ÿø,Àg>ðY€ÏþRÀ_
+øKyT`˜GæQyT`˜GæQyT€/|˜æÃþ̇óáÀ|8Ø8òÚõ•;#7§òÚ´^þæõ2öÚÁ?_»yð,½ù÷»„û]eŸùX`>˜q¬¬à3ÌÇó±À|,0ã¾™pßL¸o&Ü7++øÌǸ&Ü?“€pŸL¸O&Ü'++ûGzÀ}³²²ô€ûhÂ}´²r|è÷Ó„ûiÂý4á~šp?M¸Ÿ&ÜOî§	÷Ó„ûiÂý4á~ZYÁG¸¯&ÜW++øè÷Ù„ûlÂ}6á>›pŸ­¬à£½à¾›„^à'qßM¸ï&Üw++øøI܇îÃ	÷á„ûpÂ}8á>œpN¸'܇îÕ|ü$îËÉà¾\à:&à'ü¤ÀuMÀO
+øI?)à'ü¤€Ÿð“~RÀO
+Ü÷	øJ_)à+|¥€¯¢Œ\Ÿ¾hoY/¼
+:®RÀU
+¸JW)à*EÔ:¢ÖµŽ¨uD­#jQëˆZGÔ:ÎöWP;Ô.ÕS5MD­#jQëˆZGÔ:¢ÖuŽ¨sD#êQçˆ:GÔ8¢Æ5Ž¨qD#jQãˆGÔ8¢Æ5Ž¨qD£ð8>Ô8¢Æ5Ž¨qD#jQãˆGÔ8¢Æ5Ž¨qD#jQãˆGÔ8¢Æ5Ž¨qD#jQãˆúFÔ7¢¾õ¨oD}#jQÛˆÚFÔ6¢¶µ¨mDm#*Qט
+öKÿQÓˆšFÔ4¢¦5¨iDM#jQÓˆšFÔ4¢¦5¨iDM#jQÓˆšFÔ4¢¦5¨iDM#jQÓˆšFÔ4¢¦5¨iÄ͈¸7#âfDÜŒÈULD=#êQψzFÔ3¢žõŒn€Çñ¢žõŒ¨gD=#êQψzFÔ3¢žõŒ¨gD=#ê¹ÚŠ\mE®¶"W[u¨kD]#êQ׈ºFÔ5¢®u¨kD]#êQ׈ºFÔ5¢®u¨kD]#êQ׈ªFT5¢ªU¨jDU#ªQÕˆªFT5¢ªU¨jDU#ªQÓˆšFÔ4¢¦5¨iDM#jQÓˆšFÔ4¢¦5¨iD=#êQψzFÔ3¢žÕŒ¨fD5#ªQ͈jFT3¢šÕŒ¨fD5#ªQ͈jFT3¢šÕŒ¨fD5#w_"w_":ÑLj>Fô1ô‘».‘».‘».‘».1ÝuÑÙ¤£eªR›Ô5£æTKuÔ6µ v¨]ª§pcª¾ÈøÁÅCÇWæçVó’o^ÿŸÉW,—¿Þ¿´ù¦ãËýÿ;þMåKó´awÚœZ>ڏz[8º´0W¾ijíæåÊ&­è¼ÒY¥³Jg•Î*UöÞ”‘#‹G׃Ã,»É)jÒß&§¨	J“SÔìŒ-¼ùÀÒÜ‘òxœ&8MpZœ”J‹¥Å‡Ò©R¤H->ŒÇ×âøZ_ܸ-p3p3p3p3p3Ž4???????????????g9ûËÙ_Îþrö—³?Ëþ,û³ôßÒKÿ-ý·ôßҞςgÁ³àYðx<Gÿýwà;ðø|¾߁ïÀwà;ðømpÛà¶ÁmƒÛ·˜Ý|`yiùè‘ò;²6·ò^Õá¥Å•96èZ‘[X-[±IÏ
+zVÃóËG
+‡ã+˼BŸ
+úTpN:ô­Cß:ô­Cß:ô­°§½§½çyΑç\xÎE"fˆLfÛJmR[ÔŒšS-ÕQÛÔµKõÔ@MÇ'2;zõÁ•¹׎¯ðÀ° ‰ ,vâæ…Å’ÃÖVæVWy
+ðtuPÖÎè+¿ç~òØÊÂꁕÅcýÿ²éŠr
+”S ô@éÒ¥Р(‡® C‹-
+´(êÇV׏̭A»1Jä&ÈMÎA“4[¹¥…c‡Ù‚Ršà7Áo‚ߺèR K.ºèR KiqüЦ@›m
+´)Ц@—Ò
+£ý/ÊáÅ•ù±RFÖŸðAÁ€
+(0 À€’cå.^;<¹vxeç«ß4x>¹ZjÙQ6x‡#
+Œ(0¢Àˆ’sh9ýÉéONrú“ÓT`PAT`PA¾FU`TQFU`TQFU`TQ	£TÂ(•0J%Œ²¬­±¹••å›—®mZvüØøz]éŸÎôËù囏¦gûËqŒfó|{Út¹M—Ût¹M—Ût¹M—Ût¹M—Ût¹M—º\Ðå‚.t¹à”Á´dI–ÕNžéÙþÕ^¤(èDA'`]uÖX—PI%TR	•,kkê@‰¶8w¨œH•ì¹èЗç¢Ã¹èЍÝèЍÝèЍÝèЍ.Ýèҍ.Ýèҍ.ç¢Ë¹è‚ß¿~ü.ø]ð»àwÁï‚ߍé\–3­þÈl?¶yðt}|œiÕ"g6ú£$íÇÓ/DˆÌI%sRÉœT2'•ÌI%sRÉœT2'•ÌI%sRe ^ó8/óÀàðøü ~ ?€Ààð#øü~?‚ÁàGð#øü~?‚Áçj£¼ì+kâ>—¦ÀåÌ}báÍ‹«å}mñÌk­Ñ…#ÇÖÞRN?F­ôódŽ®mZXZ8Ò­MÙ@Gv,£«Ç”Ì97x¡KõÔ„M¶¤’%©dI*Y’eÍ'çÊ~¬,®ÞX*Üa^tÔ6µCí–:¼|ly¥¯ÂsKãå“ÃýxÞ¹¥ÆÜÑCKéÛKx¤©„G*á‘JxdYóñ¥åC‹æú¹Ìc<]^™\<ºÖ¿Æ9Ði”-|Â#•ðH%<R	TÂ#•ðH%<²¬Í±µÃåþ`y!Å+ô IV$™ôH%=RIÔ~zäêâ‘Å¥¹¶é’Lz¤’©¤G*é‘JzdY[cåÔ¡•ãg>GD™üH%7RɍTr#•ÜH%7RɍTr#•ÜH%7RɍTr#•ÜH%7RɍTr#•ÜH%7RɍTr#•ÜH%7Rɍ,kœX¸éøâ›ÊyÎÑœ]ÔšÌH%#RɈT2"•ŒH%#RɈT2"•ŒH%#RɈT2"•ŒH%#RɈT2"•ŒH%#RɈT2"•ŒH%#RɈT2"•ŒH%#RɈT2"Ë*ë߆r¬/•kmj°Ñÿkam¬üʦ_Ð:›,‡àÒ›i=ØH­iCϸ"=RITÒ#•ôH%=RITÒ#•ôH%=RI,kk¼Ÿ]ÎI—Ž¯òR>•^:r|imñØÒ[x™ž0 GRÉ‘Tr$•I%GRÉ‘Tr$•I%GRÉ‘,kksyàÇúìÇÏ|¯˜&©¤I*i’Jš¤’&©¤I*i’Jš¤’&©¤G*é‘Jz¤’©¤G*é‘Jz¤’©¤G*é‘Jz¤’©¤G*é‘Jz¤’©¤G*é‘ÚOœ_^{†g~R$•I%ERI‘TR$•I%RI,+ïG˜aV„Yfõƒ÷Óo„™ÔH%5RITR#•ÔȲrÞfR#•ÔH%5²¬à#̤H*)’JŠdYÁG˜aV„™”ɲ‚0+¬³"ÌŠ0+¬³"ÌŠ0+¬é_—Â1K•ÆáåãÌB›\C“Z©¤V*©•JjeYµM-¨j—ꩁ7¯,¼	Ý+Ù"½šn­))”J
+¥’:©¤N*©“eã}Á,gKkÇÎ<ÝÏÞÐ\b&•˜I%fR‰™Tb%•XÉR9v¸”˜C%æP‰5,“ýàµ4á‡&üЄšðC~hÂMø¡	?4á‡&—M.š0CfhÂM˜¡	34a†&ÌЄš0C³;¨ôƒÞdd³ŒLYF¦,?R–)ˏ”åGÊò#eù‘²üHY~¤,?*k{ôº(³³ç9›•þRy¡ImQ3jNµTGmSj§Üálu‡ž¨±ß ùLFKÊÚì7ÐJº€w“‰í7hUÐŒ›LÖûà*
+胕ÕÊjeµ€²Z ¬ë]h?³Æ-Ë”åÊre¹€²\ ¬ë=È+; LY/ ¬PÖ(ëʺÞû̘+²`@Y0 ,P(ʺރ¬²zÀd‘„e倲r at Y9 ¬PV(+”•ÊÊe倲r at Y9 ¬PV(+”•e폃Öú8(Ÿh‹'™ž(OšíA›Á+:h£Ù ñ,OZƒÆM7hsæ‰<ÉmÎ<üª5€3 ƒ=ë «­3{n
+úÓô§5ØskðöìÌžÙOe3Ç$–G‰åQby”X%–G‰åQ–)(Ë”e
+Ê2e™‚²LAY¦ ,SP–)(Ë”e
+º¾LáØþ¥å7¦m –)h™ÂüÑêïÁÇSÏœmT:óÈþ"†¥ƒÕ߃Î<²¿ˆae-ý~imõðÜüBcýïMó7¦ºÞ
+®g	ƒ²„¡¬;sÇŒ¹cÆÜ1C2´!C2´!kDZƒ‹KKóû—ß<ò’rÐ
+N6âÀZe-„²BY¡¬…PÖB”µ=òqåj½dý{mýݯ”—–4 ¨‹!”#퇭õÝ¢ãÇئÌ#	1RBŒ”#%ÄHû!Fëï_¯œG®ocÂb¤„)!FJˆ‘b¤„i?ÄhýýKÙŸy$¡Fe¿ÛI“{69ñL#³nX?1ØÕD!)QHJ’…¤D!)QHJRYíØâÑ7í?^žÛµþ³*$3Q␔8$%IYv¢Ä!)qHÊ2%I‰CRâÊš—[G(/qðLFIDR‘ÊJ˜ŒfLF3&£“Q’“”ä$%9IINR’“ÊÊi`2š1͘ŒfLF3&£“ÑŒÉhÆd4c2š1Í¡¦œ[:9·tr&9„œ	BÎ!g‚3AÈ™ äLr¦£$>•ÕS|£œéAÎô ÇAÊqHŒ*+ø>לÉAÎä€d©²‚ÏÜ gn@â”æÌ
+HžR’§”ä)%yJIžR’§”ä)%yJIžR’§”ä)%yJIžR’§”ä)%yJIžR’§”ä)%yJIžR’§”ä)%yª¬í±Õ#‹Kç,L–_‹3fõøQšÐ¦y3Ž\82Ç—'oÉpex¦T)µ”…ZJ@•P¥T)UJ@•P¥T)UJ@•P¥T)UJ@•PUVðq’rœ¤'‰ «²‚“”ã$å8Iy«ÇCÌUYuøÀÒñýl´‡æJ2_œ;2ø‡$\)	WemO9¾Ê5ÕÂTåùà_ v¥„])‹Û”ÅmÊâ6eq›²¸MYܦ,nS·)‹ÛÊJWP²”°,%,K	ËR²”°,%,KY$§,’SÉ)‹ä”ErÊ"9e‘œ²HNY$§,’SÉ)‹ä”ErÊ"9e‘œ²HNY$§,’SÉ)‹ä”ErÊ"9e‘œ²HNY$§,’SÉ)‹ä”EršsHxWYÁAè	ó*+8}ŽÐç=!_e‡«À¼àpœè<a`š£ó9÷‹rü"õÚÙÁv“Ú¢æTKuÔ6µKõÔ@M¸ŠµP¬…b-k¡XÅZ(ÖB±ŠµP¬…b-k¡XÅZ(ÖB±ŠµP¬…b-k¡XÅZ(ÖB±jµP«…Z-Ôj¡VµZ¨ÕB­jµP«…Z-Ôj¡VµZ¨ÕB­–k.Ë5—喹喹…W-¼j¹ä²\rY.¹,—\nµp«…[-ÜjáV·Z¸Õ­nµpª…K-\jáR—Z8Ó•®´p¥…+-\iáJWZØÑâFXÜ‹aq#,n„…"-iqÞ-λÅy·ð¢…m>ÀãxàE/ZxÑ‹^´ð¢…-¼háE/ZxÑ‹^´ð¢…-¼háE/ZxÑ‹^´ð¢…-¼háE/ZxÑ‹^´ð¢…-¼háE/ZxÑ‹^´ðŸ…ÿ,ügá?ÿY®€,W@wÌ‹^´ð¢…-¼háE/ZxÑ‹^´ð¢…-¼háE/ZxчvÀ‡\÷X®{,×=–ëËuåºÇâŸ[üs‹nñÏ-×=–ë •?%䯬쏩¼e*OøŸû)á~J¸Ÿû••ý3U'ìO	ûSÂþÊ:Ø?ýeªn™ª[¦êŽ©ºC/záЇ^8¦êÝpè†C7ºá˜ª;¦êqèˆCG:âЇŽ8tÄ¡#qèˆCG:âЇŽ8tÄ¡#qèˆCG:âЇŽ8tÄ¡#qèˆCG:☪;ôÄ¡'=qè‰COzâЇž8ôÄ¡'=qè‰COzâЇž8ôÄ¡'=qè‰COzâЇž8ôÄ¡'=qè‰COzâЇž8ôÄ¡'=qÌպ☫;ôÅ¡/}qè‹c®î˜«;æêÝqÌÕúãЇþ8ôÇ¡?ýqèãßi9Üq‡9ôÈ¡G=rè‘CzäÐ#‡9ôÈ¡G=rè‘CzäÐ#‡9ôÈ¡G=rè‘CzäÐ#‡9ôÈ¡G=rè‘CzäÐ#‡9ôÈ¡G=rè‘CzäÐ#‡9ôÈ¡G=rè‘CzäÐ#‡9ôÈ¡G=rÌÓótÇ<Ý¡Srè”C§:åÐ)‡N9tÊ¡Srè”C§:åÐ)‡N9tÊ¡Srè”C§:åÐ)‡N9tÊ1wè•C¯zåÐ+‡^9ôÊ¡W½rè•C¯zåÐ+‡^9ôÊáÓ9|:‡Oçðé÷{ÿÐËáÓ9|:‡Oçðé÷}÷}÷}†Ã°sܽrܽr8vÇÎáØ9;‡cçp쎝㾱㾱㾱ís¸u·ÎáÖ9Ü:‡[çÐm‡[çpënÃ­sÜ]sè»CßúîÐw‡¾;ôÝaÕ9¬:‡Uç°êúïЇþ;ôß¡ÿýwè¿CÿúïЇþ;ôß¡ÿýwè¿CÿÛèy=o£ßmô»>´Ñ‡6¼Ð†Ú|žm>Ï6Ÿg›Ï³ÍçÙæólóy¶ù<Ûœ§6ýnÓï‚yIÁ¼¤`^R0Ÿ(˜OÌ'
+æó‰‚ùDÁ|¢`>Q0Ÿ(˜OÌ'
+æó‰‚ùDÁ|¢`>Q0Ÿ(Ðï^-àÕ^-àÕ^-àÕ‚óWpþ
+xµ€Wxµ€Wxµ€Wxµ€Wxµ€Wxµ€Wxµ€Wxµ€Wxµ€Wxµ€Wxµ€Wxµ€Wxµ€Wxµ€Wø®€ï
+ø®€ï
+ø®€ï
+ø®€ï
+ø®€ï
+ø®€ï
+ø®`üŒ£ã§Ãøé0~:Ìk;Ìk;Ìk;|:|:Ìk;Ìk;³ƒýv¨]ª§j:Îã°Ã8ì0;ŒÃã°Ã8ì0;ŒÃã°Ã8ì0;ÌW;ÌW;ÌW;ÌW»ÌgºÌgºÌgºùà÷-jFÍ©–ê¨mjAíPÓqw™—t™—t™—t™—n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸‘n¤„)áFJ¸QYÁg^KÈ‘r¤„)!GJÈ‘r¤„)!Ge]_˧ù@Y…ªÔ&µEͨ9ÕRµM-¨j—ꩁ
+¾߃ïÁ÷à{ð=ø|¾߃ïÁ÷à{ð=ø|~ ?€Ààðøü ~ ?€Ààðøü ~?‚ÁàGð#øü~?‚ÁàGð#øü4ˆü«‚ȲҨ‰#ÿ»zÌÓçáןFø4§>ð]„ï"|á»ß•ÕS5áÁw¾‹ð]„ïÊÊ~•ý*ûUö›®ÏËÚ¦ÔµK_ÁWð›à7Áo‚ß¿	~ü&øMp›à6Ám‚Û·	^œ8-ößbÿ-öÛâ¸Zì¿Åþ[ì¿Åþ[ì¿Åqµ8WÆqdàdàdG^^^^^^^^㦓s|9Ç—ƒŸƒŸƒŸƒŸƒŸƒŸƒŸƒŸƒŸƒŸƒŸƒŸƒŸƒoÁ·à[ð-ø|¾ß‚oÁ·à[ð-ø|¾ß‚ïÀwà;Þïx¿ãýŽ÷;Þïx›÷·y›þ·é›þ·é›÷·y¿§ßÜÀñ^àGð#ï‡Y‹„¬EBÖ"!k‘µHÈZ$d-²	Y‹„¬EBÖ"!k‘µHÈZ$d-²	9‹„œEBÎ"!g‘ªHU$„*B	¡Š„OE§"áS‘ð©HøT$|*>	ŸŠ„O••~ñ¹òŸªDþS•²‚ëÀuœ¾߁ïÀg\>	ŸŠ„OE§"áS‘ð©HøT$|*>	ŸŠ„OE§"áS‘ð©HøT$|*>ùÏ["ÿyKä?o‰üç-‘pªH8U$œ*N	§Š„SE©"áT‘pªH8U$œ*N	§Š„SE©"áT‘pªH8U$œ*N	§Š„SE©"áT‘pªH8U$œ*N	§Š„SE©"áT‘pªH8U$œ*N	§Š„SE©"áT‘pªH8U$œ*N	§Š„SE©"áT‘pªH8U$œ*N	§Š„SE©"áT‘pªH8U$œ*N	§Š„SE©"áT‘pªH8U$œ*N	§Š„SE©"áT‘pªH8U$œ*N	§Š„SE©"áT‘pª²‚ÁàGð#øü~?‚ÁàË$¦#Ó‰éˆÄt”ՏïG»Î¦"©h*ÍTZ©d©ä©ØT\*íTŠT:©tS!¤׋$<Ix’ð$áI“„'	Ož$<Ix’ð$áI“„'	Ož&<Mxšð4áiÂÓ„§	Ož&<Mxšð4áiÂÓ„§	O^3á5^3á5^3á5^3á5^3á5^3á5^3á5^3á5^+áµ^+áµ^+áµ^+áµ^+áµ^+áµ^+áµ^+áµ^–𲄗%¼,áe	/KxÙ:^–,K–¥#ÊÒe鈲tDY:”,J–%K‡’¥CÉÒ1d©»Yên–º›¥îf-v¶ÞÝ,u7KýÌR?³ÔÏ,õ3£Ÿ™M%u7KÝÍP–€²”% ,e	(O at yê|žðò„—'¼<áå	/OxyÂË^žðò„W¤}iŸEÚg‘öY¤}iŸEÚg‘öY¤}iŸEÚgÁ>Ó1éŠtE:†NÂë$¼NÂë$¼NÂë$¼NÂë$¼NÂë$¼NÂë$¼NÂë$¼NÂë$¼nÂë&¼nÂë&¼nÂë&¼nÂë&¼nÂë&¼nÂë&¼nÂë&¼nÂë&<Ÿð|Âó	ϯãÙ ©°ÕJ%K%OŦâRi§R¤Ò›_úáµs+ËGG=)ž¢ŸïÙxÕâÒüBãª~áxwqåÀñ#ýÕˆn¿ídÉų%î90·ºÐèô#‡ÆüòÚ܁G×&_rü衹•ãG–掯Møåãû—Ö#CÇçVæö/xÃür}ùúS-Ÿ¯6šý©êÆ榪
+ß07hÚZ_¿yö\<:wfcñèâÚ™#ó‹i£J³rã™fåÆ3ÍòXÝ[¬î-VšuŠÊoʍþo&èÛÊâÑCé¶[ÙY¹ñÌ[ʍgvf}µ™¯6ó•f®z®z®zN«Í´ÚL«Í²j³¬Ú,«hõ|tªç£“ÎÇà:4wð
+ûçV6…£‡öÌ-­mé·ÑÜí)?¨¥…ÕÕ´Ýöƒí‰õ4ëÊŸÏ[ýmžÛÊëý6Ry>[i/•çƒ×›?ðÞnåõÁþ»}ŒÊëƒýè<Ÿ­<oò<ÿçRy>[yÞ®¼wð\ú¸ãûWæÖ—,¯5^Ú?Y鄶Ó'röñ4_ßس´|ôÐêÚÜÊà¤W?µNõSëT?µnõ;Ñ­~'ºÕïD;
+•ÆÒ3ð	`¦¿Ñ²nÏ‘å£Ë‡VæŽæ•ö3¯lYì/ì_¸±ú÷3c~`»]Ýî§\ÿv·3Ø6ó–W÷»’b)öì/Éeý¼å™ôÿûÜÊóô™–¯õ·+¯‡ÊóH›PiÓª´é?ëGm»Å3ç«¿qæõ7Îœ<[öµÒ¬SmÖ©6ëV›u«ÍºÕf¾ÚÌW›ùj³PmªÍBµY¬6‹Õf•o­õ³•fåÆ3ÍʍJ3©6“j3©6Ój3­6Ój³fµY³Ú¬YmÖª6kU›µªÍ²j³¬Ú,«6Ë«Íòj³¼ÚÌV›Ùj3[mæªÍ\µ™«6kW›µ«ÍÚÕfÕñæ«ãÍWÇ›¯Ž7_o¾:Þ|u¼ùêxóÕñæ«ãÍWÇ›¯Ž7_o¾:Þ|u¼ùêxóÕñæ«ã-TÇ[¨Ž·Po¡:ÞBu¼…êxÕñªã-TÇ[¨Ž·Po¡:ÞBu¼…êxÕñªã-TÇ[¨Ž·Po¡:ÞBu¼…êxÕñÒx{e9˜Û¿ü¦uîë/6éS"Ï¥ò\+Ï›•ç­Êó¬ò<¯<·g¿eÞùŹ‰ß]±g6×çc^é<óÊú›ƒ¸=Ç3©Õîz뾧ÿ¾gNo3·Ë|OÍwO˜ÿ9eþ¶gžè™ÿ±ËüÍ”ùëæñ]æ¯ÞU4þªg;a¾sÂœ:mþò´ùï=ó—›?ï˜G{æ¿©ùö#×5¾}Â<R6|ä:ó­?ÛÛøÖióg{ÍŸöÌŸôÌ«ù¯Û̝0ÿ¥gþóVóŸn5ÿñAó‡=óͲù7o5ð«p«ùÆUæ÷oGã÷{æ÷v˜¯÷ÌïöÌè™ß陯0_ýÊÎÆW{æ+;Í¿WóåžùâÛg_<ÏüÖÙæážùÍžùžùw=óë=óo{æ×zæ=óPÏ<Ø3̘“·ïjœì™û?ÿ`ãþžùü}74>ÿ ùü[‡ïûÕ]ûnØ÷´¹oßð¯î2¿Ò3¿|Â|®g>Û3Ÿé™_ê™OÏ›3eîýԮƽóæSŸÜÚøÔ.óÉ­æe§?qÚ|¼g>Ö3ÿºg>ºÕübÏüÂG¦¿ æ#Sæ_Í›{Ê&÷œ0?ß3þÐdãÃ=ó¡IóÁŸ;§ñÁyós˜nüÜ9æÓægÇÍÏôÌÝ'67îî™›ÍûË7½ÿ„yß{§ï»Ô¼wʼç´ùéw?Øøéžy÷]74Þý y÷[‡ïú©]»n0wíþ©]æ'{æΟØÓ¸³g~byWy˜ï*Ìïœhܱͼs¼£|áóæöòLݾ˼}ÆüËžùñ·Í4~¼gÞ6cþEϼµgnë™}Oÿó[omüóž¹õVócóæ–WmoܲËü³žyKϼyÊÜ<iÞ4nŽ÷ÌÚi³zÚ¬œ676Çzf¹gŽöÌÒ…æÆžùÑ™NãG¯3‹=søVs¨Ü8Ø3=3ß3zfÏÌ]nÞxÚüȤ¹¡gþiϼ¾g®ÝxãúÓæuãæµgŸÓx­š×ôÌ«KäWwÌ«¶›ëêӍëžm^¹Í¼â¥g5^Ñ3/Ÿ0ÿ¤g®}ÙtãÚžyÙ´ùáž¹¦üÍ5=óÒ«§/=Ë\}þæÆÕÓæ%›ÍU=O˜pÂøžé½°Ñ=m:šâ³¯g®ì™ÿÐÖÆ‹·™ºbKㇶš+^´¹qž§·˜m6—÷L»gœÝÖp§Í§v›É³‰F>m²	ÓÚiš›ÊDC{F&ÌìÞ‰Æìf³wÂìyáXcÏ´yá˜yšËž¿«qÙ¼yþçï2»·šK/ÙÕ¸´0—ì2ÏÛ5ÑxÞ³kÂ\Ü3õÌs·˜Ëã¼p«yμ¹à´ÙYÂÎysþfs^yÏ뙧͹sN¹qNÏ<{Þ<«<SÏ꙳Ë7}ŽÙÞ3Ûz欞ÙZ6ØÚ33å±ÎtÌô­f˼™ê™Í“g76÷ÌdÙzòl3Ñ3ãÓf¬gFËf£=³i›™7Ãå/‡Ë°Ý”¯šž*·‡^hêÓ¦Ö3õûëóoÿÉúeÿ?ü©ýßîÀÿñÏùµ¡ÚÁމჍ_¬™Ú¦Ú¹û&‡ÿ¾6ò÷õÑÆmCõ½ã”Ô¦¿qê§fÏš¹pf×…3®=¹jv<ùíÞ‰MSßû›•‘ݵzí¦§¿e¾¥vNíÊ};j·×ß9<uûæwŽŸœ>ù¬ûgî<wÓÖ͵—lçN?ùˆö÷øȧ¦{O<6ý·Íî›Ø²czÇ[w¼{Ç=;õêÛ÷Ô/zîÈömg75·Û§ÊÚÌtíB=Û<zí‡^þË_üâ/¿üC×¾ì£7<Õûfý…õ‘Wd8»÷²Ë¾õµ¯}ë²Ë>yñÅõקê[ë—_T«•ÇVökøõ#ÛjÓµójnß9瞬Mm;Ù½sêþúÝæYõѡ«f¶N„ó§Ÿ<õÄ)U©í=õÈŸš~ø±ÙûÞ¸ó­;ïÙiÊ.Í4g.Êú=*{ÒÔ³ëëËZÏ+;j>rÿý—öǾòtíé¯üØgŸúÒÇÞóžü=ïù˜¹oèGþîÔÇççê¾>Z>ü\oûW}ô+åýº­<_Ûj;jÇö]\Û^»}ôíŸ¨7NNÖ|öÉ­÷OÞyÞŽíC£ÛGk×mÝÎ[ïâÃ3[Ûéô=2ýXùxâ±ò…Ù}»¯<ÿØù÷œÿ»ç?~~ãÊÚ•õ+‡®Ü~åŽÆ6íÝ;ö‚ñåÚr}yhyûòŽ±nêŸâwÖg÷9µõcªmZ?훆o{òs“_ûü~iÿß½±÷DïKõÝOþY}ÓýC}çNN
+ýÈëíK­Ö§Ÿÿ‚º«×Ϫw{ôðÝ¿òé×Ê1°·<áß+ÏõYµë÷×˜®OŽ~b¤þŽÚÝS#µ©¶i¬1ºyËÄo›~òšÏŒ¿êu'kµ}îúk>3µþüé_w×_ñð“W<üðÖvyŒ{Ñ'OM?¦åÆlý¾}Û_¾ýží¦ìzÙÉóën¿pæ¢ò3if­¼9ô½ÏxY}oïë'?ó™OadÛϾüð»žÜk¾~×µ~ªì×µÚðË~×Ú·{t¦1ÒØ432Ò03ÍᡙFc¸3Ú2æ¡ÚÝc#úðHùiÕâDyºõÏô{rÅ©GžÕž½æº×mšþΦé?Ãß¹þ¹Ÿ›ž¬×oØ÷†á¡ñѳ‡.Úݸlô5C‡®ÝÜxÛЍŸ}ïЉÆÝ£¿0´u¬1624aÆ7]j.¾´qÙÈe›öM6oœ¼Ã¼}øŽÆOŽÜµéæîMŸ4kÜ·é·6}sÓwÍãæ»ÃŸ{ÃMµÎjÎÔ›cõ‹ê3=prh×_>õé¡êK'G¶=¹XÿÖSO<uïÐEOýcëx9¶&jϪ½tßY#'·ÖNNÞ¿õÎgmÝò
+³u{xöúPâ[X~/ºòœ[j·ŒÜ¶é¶ÑÛÆn¿mâ–ÉÛ6ß6uÛ–Û¦o›¹eë=ç<~ÎL9j_ÊrÜ_¢ýQ“¾™C«ï»÷Sïï½÷¾÷ñúÖÞcÿuï¯ê3æýò—ýóßþÒ_|°÷Û½S½ï”©]Ž—mu·þ½| ÷šá_,ûØÿ^¾xߎÁ÷òþ©;ë_0_~'¯ZÿvÆþ7S5õö‘ÁWsßXúnþÉÎáú
+»Ê‘ÐÜþâr@—½ºè¹Ï«¯/S_ë«'O^þÙ[¾Z{úé¯ÞòÙ!W~;?ÖÿùøSŸÿäü\ï¡Þ÷ÊÇCsõ¿|9ký±¼\òÙ—Êþ]R{tß›'‡¦&®»`çèØЦñë.¸`gg|bçÃÛKž»cxÛíÛïxvŸçv•<wéÎñ‰vlª½rÇèÔ¦ÑmÏ
+—N?ùpIž”ßÒv»= ¾¿íßÖÁ˜šúÎ̳ڛÖÿ.Tí’þ€:rÞøyçMî)¿¼/˜xÁä‹Æ^4þ¢‰MN<§öœúÅC—Ž_:ñü³önÛ»ýùg_ºóÒv?g÷…_rûøí·OÞ¾ykÿ††FÆG&̤Ùl¦Ì3mÎ1çšæ¼áóÇ.Ù»ûÊÝoØ}Ûî·î~÷î{v?¾ûÙ7ÔJZ8ûÔwÖ·o)Ïä%Ù:O”øÞúžzÿ»V²ðO\ûñ×ßqÇþ÷]ùðG¿û‡¯ÿÍ¥ƒ_œ{۝ŸÚ÷©Ÿù“ß9ø+ÃW~úÒK_õª}W_8õüŸ½ãƒ÷]tѯeÙõ¯¸æ延\üþ·}øޝéüÚrüMãÃ%W”¬<ÕÝb>Q›©?4úŽñ‰ò,—ŸüôÖ©XÅ:!è:œz⊇OéLIŸû¥íõ>+÷Y`ÛÙ/êsÂó²>ÌÔo®ßÒ{û5«_øÂ|äï(g·¿q×S÷Üqí~þ÷†ÞxWýŵõ?Ïýèq´ö@ýâú±3?O¡Ë‡ÞÕ˜ËÍ›7ÇÆcã±ñØxl<6ÇÆcã±ñØxl<6ÇÆcã±ñØxl<6ÇÆcã±ñØxl<6ÇÆcã±ñØxl<þ!õ'9T«¯×m5³þ6Ï-FjÿâU/¹º_¯-^y]­öš×þ£Àþÿ×üúßÃýóóøÚÓO—èÿ]n—ÇÚUµ—Ô®>ÓþZê+k×­××Ô^»Þ¶Vw­ñFýþÍÇk?ý}/ÔéÜ×j7~þ7?k75¶Õn>U»ièëµ½?ø3ü‘Úß÷óíõö~†/«-›‹jvý<]þ§ŸýÌ/=ð†-Wümí‚ôÁüæ—?xß ~÷›O=oóÊØ««ŸÚÿë0 at .
 endstream
 endobj
-9510 0 obj
-1219
-endobj
-9496 0 obj <<
+9485 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [395.008 296.183 456.273 307.873]
 /Subtype /Link
 /A << /S /GoTo /D (pdftosocket) >>
 >> endobj
-9501 0 obj <<
-/D [9499 0 R /XYZ 151.701 685.529 null]
+9490 0 obj <<
+/D [9488 0 R /XYZ 151.701 685.529 null]
 >> endobj
 1998 0 obj <<
-/D [9499 0 R /XYZ 151.701 660.623 null]
+/D [9488 0 R /XYZ 151.701 660.623 null]
 >> endobj
-9502 0 obj <<
-/D [9499 0 R /XYZ 151.701 641.703 null]
+9491 0 obj <<
+/D [9488 0 R /XYZ 151.701 641.703 null]
 >> endobj
 5256 0 obj <<
-/D [9499 0 R /XYZ 151.701 282.781 null]
+/D [9488 0 R /XYZ 151.701 282.781 null]
 >> endobj
-9503 0 obj <<
-/D [9499 0 R /XYZ 151.701 265.911 null]
+9492 0 obj <<
+/D [9488 0 R /XYZ 151.701 265.911 null]
 >> endobj
-9498 0 obj <<
+9487 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F51 3736 0 R /F85 5513 0 R /F53 3738 0 R >>
-/XObject << /Im48 9497 0 R >>
+/XObject << /Im48 9486 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9517 0 obj <<
-/Length 2145      
+9505 0 obj <<
+/Length 2151      
 /Filter /FlateDecode
 >>
 stream
-xÚ­koäÆí»…/ÑÖX£yHJ‹¹‡S½Äíú€—|µ²WVÒi$oôÇ—ÎhÖÝ5½~ñRÉᛎƒÇ ~¸xuwqu$AÊò4æÁÝCÀã˜eyè,g*—ÁÝ&ø®«r¬»võëݏ–<c¹ÖÉ“œÅ@]’0ÅVµï¶Õ*J†¯ßß®	º®›±êö‘>¿Êm=ëi¨ˆµŠA>Ëãܪ" N¥òÌeÆ‘êâíÝÅÇX >RW1!‚rwñá×8ØÀُAÌDž{K¹„ʘVÈ­	Ö¿ˆ	âcS(~¬ ç)KàŠ–9³ïE5~‰yjõ𯮹:¹eA¯µ5C’$xO6Þ­’4œÌx8üG_CиuVÉNÙ'’e|æßoÆ®7Dyªˆop9•U<p	¤÷ÛºDE¶NòА†›©¬¬
-"¼]%YØ™q]u?¢Œ â:K S2'æïnÞ½]EJ¨pÄ+Ï=ÜÏÂEýµ`¹Ì¼VEß7uY`t]õ ÉÌ’^˜Up–‰ùâ/±Š	/{ª«=}l+&€t¸·ÊO͆ÌX7{B®Xšiz‚"~fÛ!=pB† Àh»:m`#b¨ë¶p”·o®A'ÎÎbã4¢"Q3™‰ÿ=¢ÏçˆB”j	êW<, at e«9ÏœÆxƒÙŒ—oŽX at Dx&ÅHuË‹ëe·Ûí†>šºµþµNB¡ëÑ™æ»U$¹
-këTƒ.
-$:†Uªˆ!bu—D
-Ã2KÃÔýZIxÄ9pÈr¨Š‘îhϤì(à:S¹;M‘ý-j8á+ujÍ1’×ñ2!½Çµ»–P][Âl«j¼Dہ²×­©†ÑÝ!c¶ì†žLX”´™ú¦úýº;ÑÍE!™7Q©ïŽÕBý›~Æmí=ÔRÔÜ:óíÛÛ7l:úm»‘ 3õÎVƒÃ^gm‘¶,Ç%B~ C”
-‰×
- 
- „E¸Çœ³Ø{WìGýØvCµÁ|qˆÝ5μ]‹Y|Î
-‘=¤ðÿ|x³#å\f‘«YÒ½=NtJê—GEͦü\ÔÒå¢Æ%vÐ¥¢öÔnX9õ&úBuKSÐp.Ö_¨"Bh&ñ(#™<”‘Lø2Øó2B‡‹oç9K@	ßg ¾…Á˜\x§æL*íiÍÉFò(›@ŠH/×ù!“_n.Ï`fùIR»ÃºâÓêa“Iý_ºC‡ÕB}•®±ƒ4Ï+x'd””Ÿ4³Ž?„=aìªÞø¹ìTJ
-ƒ™‡néë¼L8° ÁOH“Ñ~IØ
-¿Ñ—í°ž¤Ý ±ºâ¤«E;UÑÚê4ÏŽªÓ·vžPX–0ç/éËÖr*4‰o
-‰t÷R¼—se/(‰Ò¹Ï›b,¢Ú@µC©.Œ6°TÁ¬nϔ߻ui;¾Ôöÿ×ò©¹Ñ-wÒÑ‘(sü舔DÈŒðæÝ™ä×ÌÉÑŒÀÃǃÛñÈ*èOÄ[.Y.æ šÌýR”Š*ãžè¾(Ñ"¿áŸªÝ\"íÆÌÇL+v(ZóP
-æ ÝâÿÕÝ;LçýI?¬¸ï‘‹7®ìl{âRàÉè8¹=MNóòΏmCe¦†âÝE©*€hHáãÜùv¨ºÁy¸vaá~í옆{G]·'ž
->Xìuý8
-NØ“xrFäŠÍâvU©”Ÿ¯7)ÔƒO­7´Îħ!⸥‚éXúúãÔÊŽÔzQL8ÄÂìf˜tY:²Çûõ+B¼F“}îÊDοfMó¿3ëLÃZ Êkdüñ‚©Øú_‹ôôqu³ƒ°yӁ„ƒŒUëd.á,zÿ}g^±hÖ̺„§Ð0Y®TrìèŸÜr´EóÂŽÃu7
-%M¤)+00o†ú	ÿ
-Jëâe/ÑàVbý3Îe™Ûa’L…7¾D·ÕHGÏ´6ÑqY¸óЄXL[má`7R<·Ýd :DuñՍh&uכʑ`—Ù×ãv©Fƒ–5&$ìª0ôEkçJüôý̸v"dj›’€þ¹Ã<>”w nmï·‹|5Eûˆߎ¶î#ÖÍÅØÿ\m äŽR^¢ÁŠvIE~Ç1ÛµÑË1™ÐZ]5¶Å|¾øsÍ„_Uûß®o¡;ƒo}ºÅŽÔ¹ÿÞäGÿìÑ‹¡êÃF®Ü{ÒÅ©(f1¤tD‡nÃu°ʺÀ]@%ÒZàa¨*šëQ¬”2ÃEÏu¥ÐîÂZ¿[:24âfCGiÆ8קæÎÜÒÎÆz>ƒŠ^l¬«uEšŽÍTBÖ˜‡©¡ïÉTà*F Û|’nø@€ÆìvUÅœ
-ÿFÖœ~wRßÁ›"âç5.YøÏKú½yõ.úþÆýõ6zïáõÔFë®)†Ú\Ò²µþá&ºùÇLüƒþ#Áw+H–aÒÒ‘¾©—Ûz´qžÇáûŸ,#Ýp‡v2¼çÈÛšÊÀè]Üܶͮî‡zív È{Ÿ] “í °EiA¥Mõd'‚¦s“»íý¹µúÆ­'4kåp¤j®h*EÀ
-êp[5=!m	*Ú²š9ð0
-þ‰Š§Vðâ²]F»Ã&ˆ¯¸<îï˜ü~<x¦ƒ‡Êχ¾DáÌ0X’g‰n°¹ná<å;£]<bý¹NÃ¥`RŸ6xШÒTÓ"M$Éž(˜ýåIBk~ôO[ɸ²éœÅÎE>«/é1yʸžÿï¶Çþ»««ý~ϪÂ<›=ƒ@ºÂ1yì‡îêŒÏ‰X.A×Ãrõ—Úó_°Ò í±´
+xÚ¥]oã6ò=¿BèËÉ@Ĉ"©öP »Ù´)nÛÜ9°íƒb)±ZYÒŠRÜîÇw>(ÙN´»íåŇÃá|CïÁ½ïÏ^Ýž]\E‘—ˆ,	¥w{ïÉ0iyqš	“iï¶ðÞûër3Tm³úõöG"OEÇÉ£L„@2]	#VcåßnËU Œö_¿»Y3tUÕCÙWÍ/¿ë7Ûj Öc_2kÂý"3Eœh31שDª³7·gÎ$`øH\#”ò6»³÷¿†^{?z¡PYêí‰rç)“ŠØ ·Ú[Ÿýû,t*Uaä± R&"‚#±Î½Åø%”	É1¼¸’æ䁓Ԥ†(Šðœ®¼[E‰?Úá°ÓO‹.·–¡aë´’ž²´HåÌ¿+³Ly*ˆkH=ö%‰ 8‡´ö÷Ûjƒ‚lÝÍ}@âã¦$”³ŠR¿µÃzÓWÝ€wxŒд@	£3fþöúí›U`”ñ<ò±ƒó©¿(¬D¦ÓIª¼ëêj“£w]tp“oz¦V%Eªæƒ¿„&ÌùJxÙcUîy±-Á™ Šý=	?ÖoØ¡ªk÷„̈$ù	†ùÙm‹ôÀE)íç@
+€s< 2lïyo ÇFD_=TMî(o.¯@&)žøÆ©GÎ9‚(:Uÿ¿GéDÍ…0Õ0„„";¬#•Jwå«£³à
+]>0öXI¿®žqØ´»D¶Ÿ7°_¤ÈðÔ	êªAÿNC¿íРök8*S¿B×N¥oË‚ÝòbØŸ’a§d£À wfÒOÜ7o
+f*%Ü搛¾Ì‡rfå®­vìw­-‹EsrNöÊ°f¶<¢ÍÁ>d=Bµô6 ì¶,‡sPc§N8 «P-TöôD9¹ Ø´}/ç^XŒ]]þñÕ´»;Q§sȝ㝐«·ü°Î2êü¶•CtVñdRḐon.(Zþ6íÀ€;§¯ÞaX®')_ËaI©*笋¨h’
+ ö„•¿Çð#ìK´¨š¶/‡h0'
+3/G×`€#Ÿ'9‰69¾A›ÄÓ‘C|W»${sóßÏ/@ç7Šþ9¿%ËùMj,¦Kùí±)Äfìlð…D—$ ᜷¿P”Š…ŽÔË3ŠJõ¬1•N±˜ròmJ,nsñí21•È8}nÑ'ÞK¡M<ÑÚbŽï#×Å[œ£@€L÷:;¤úËu&)´*;	ªcs)>-Ö›$Šÿ¢$ÛX™™á
+‹IýqÒú“jŽC!.ÆOÚ²³S‹vzK=šQ‡Â9gþHrR 
+bº‡ ,ã÷„mÿ;¯¨ØN$M„K[UÃh'*j|ÀœÆÙQvúµÓÆü9¯(Ÿs¢Gp¤Ý¹ÏÖÅܦÂl˜Ò™à"r†8÷PîðVçFE,e°†ËÅ÷xÈã,|)µÓ#\õçǧÜNË[®CàÈ™žÀ[,$Bv€7ïþN»ð‚TÉCª¤ôfÇ-\ÊOù[¦E¦fíÝ’—ˆ&•Ñ]¾AüŽ?eSœ#ÿØuœ)vœtmŸ7ö¾ìíávÂÿÖÞ9L망®_É©BÎߤ¡6÷ĤÀSðv-|ÆåíÔÁõ¥kö;4‡÷%`8¦asôsgÛ¾¼o{gáÊ5‡¹ûR™ø{G]5'–òÞöªz{'ŒL2zBä’Íâ YP˜D>tÈŸštx²	O]ÄqK”ˆC=å'Vz$Ö³d"Áf3CÓëÔÒ²>Þ­_1â5ªìsïˆ!Mdò%ÛôY§1LÊS |ŒŒ?œ	Òæô%äDï×;p›Ën8Üq 
+`²Ì4|A# ÷ߐwæ0	Ì’‘IdSdÆDÇ&ú)À,GµLÁaÛ_·cO³™ŠnW Ýqã5`.ûêÿRëâ<i/ŠÁ¬ÌúgìËR=uÏÆ¿žRtS¼å:eÞÞäîÀÜ4!C†t«K¤¸3lÛÑB&¶¼‰ââÅ
+¸'uÇëÒ‘`•ÙW0,äh²Â€„±ځ.o¨¯ÄåTϬ+'J'T”ÔÏibq騪ý4³ÁªÎ›LøÔzPÞG¬ë‹±þ¹Ü ȇ¼F…åÍ’ˆò<Cvþ¦m‚çm$2á	»¬©Ä|>ùËX¨X½(÷¿Yß@u=ßLUè+RëþÈÉŽþ÷‰SBÖ‡áܸ÷$‹]Q(Bÿàˆ͆ÓaÙoªgiÒÀ}_–Ü×£˜)uÃlå*ƒ1¨÷‚±dw¢cE#nVt¤BÊøTÝÊ©[S/aÉò)dô¼ SÇ>$iÞ¶ã¢Æޏ5¯G[2€£
+‚HNñ¤]ó ·
+äì8ª!Š}ÎøÿbmŽ¸[ß›<âç5©ÿßsþ^¿z|w=­~¸	ÞMðzl‚u[ç}eÏyØZ\ÿg&~NÿáÛK?ÆÚ‘^V‹óx5Ÿg¡ÿî'b„ k®3¿ÅJƸƒõySqš­‹<ÂTìà辯†¦@ÞMÑ0ë JJ"å#uuë:wªýi}íÖ#ªµt8 êJ°yÍ›±¿-뎑”‚òfSÎœ¸û鉆/NèâÅa»<´v‡I_q~\ßõü·…ä~Qù÷åÔN)
+{†žHrì%ÚžbáiÈ/VF<Âøs•Fj%t|ZàUèA¡J’˜1("QêÉÈ@ï¯O:–Gÿßj!
+…s:ýóI~IŽÉ!ãù/¸í0t__\ì÷{Qæö£Ýp¤l“‡®o/žð9¹Vjõ0\}{BûôZúÄçŸ.
 endstream
 endobj
-9516 0 obj <<
+9504 0 obj <<
 /Type /Page
-/Contents 9517 0 R
-/Resources 9515 0 R
+/Contents 9505 0 R
+/Resources 9503 0 R
 /MediaBox [0 0 612 792]
-/Parent 9473 0 R
-/Annots [ 9511 0 R 9513 0 R ]
+/Parent 9462 0 R
+/Annots [ 9499 0 R 9501 0 R ]
 >> endobj
-9512 0 obj <<
+9500 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-HOWTO/images/pdftoepsonusb.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 9521 0 R
+/PTEX.InfoDict 9509 0 R
 /BBox [0 0 359 89]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 9522 0 R
->>/Font << /R9 9523 0 R>>
+/R7 9510 0 R
+>>/Font << /R8 9511 0 R>>
 >>
-/Length 9524 0 R
+/Length 9512 0 R
 /Filter /FlateDecode
 >>
 stream
-xœÍ–ÏŽ1ÆïyŠábbÇq’+â¼K_ –íji·SÄëóMçO§
-Ðîe4‡i?}²qgž} ö¡}ú÷ÃÖ½»Ïþ©q\ˆS¨þ·cÿݝ<þþ£c&IÞJ$SöY•¸Ï…)±øãûÔ{OîÙq÷»=lýûâWÏJIBö«µëò²çL)Fó™©V„^mÝ›ý×õq·oÞ®~¸+woû 2‹À®8tʱþÓ‹a5¡:r	ÛÜf•”„bù[͸’–̨6쑂®Qÿb°'ƒ{”í5Ô‚PšmF}øÜsò¢F\Ù
-H·H&™ò(lFk‹[AB%Á*-Qœ8L3E=ÿÏÁ(žC–¹rN³ž´ãr¨¾a'˜Ê"¹¸M`DÚšÚFeÄ5&“3Î`y᜾O4noÞ‚°.woa`¢¹RF«(&Ž*f‰J74B醆ôNŠ-½"Mñ%‘Uj$ÄbQM¯šIÛ²P¨ÖŒn\wûf÷óƼ+¨b€áª±¶¥ìE™J·æ\J[ ‰Rc¤¤>bQ†fãbÈ…ršxb@Ñø–2äÚ̲_µßÂØ®zp‰tý„ñâqò­ðoûËï\LB\çÓVüÕ|¹Ñ€ÑJ{¹1>Og™q at yT6£r.šÃ5íÙ2lj(Ø&JEÚ+y3¦š+çTë¥]5ÝòàîÜÇY
+xœÍ•Mn1…÷:…–í†)‰¢¶Š®“úm§(ìÚñ¸èõûÆöüØ3@‚d3˜ÅØÏ´ø‰¢Ÿ} ö¡}.ût_üSãØ·ÏáÉ1“äX½Z$MìKJÄ–<Sæní؈s¨þŸ;­æ￾æß.ÑÈòìøüùòzØúÏ+°˜çDYBñ+d9Gx.”cT_˜jÅÒ«­û°ÿ¹>îöÍÇÕo÷eåîFü¢ лá9èÍ°)£6ñ¶™g•œ…¢½ÀZ)YaÔá‘BBx¢ˆê›"<+ÂqžEÞC-X*•2¡>|oŽ‡)¹%%®Ù› …Åo‘L
+•^Øôö·‚„J‚]j¦8ŠÐT(¦á{	Šß
+B—eªiÆ͸ª_8	&[$6Rш´Ä£¸^éy$)“ÊÀÓ…ô@0äï2M•ùó[Ùõ.MR©„;7ÐÖ=`$I®ÝCšv„
+$$2o™´BàP#a-Æ")åw™GZ•…BÕ|2³qwûf÷gÆùLUXÆFÀÔØöJB¥ì\ªbÖÖh¤Ô)g±+•%†bTò(&”ç”.×f’ý¦ÆvÓ‡K¤»xU׉ós¬/ð+Âß>}á‰ìãVüÛü˜iÀ¨(Qô‚Ü0ÒÓuæÓí”M¯E“ Øžµà:ÆQP4°Ž”ŠµÃyÓ§š*CªõÒ€nšnypwî?ÔÝ(‚
 endstream
 endobj
-9521 0 obj
+9509 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610111331)
-/ModDate (D:20080610111331)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528091008-05'00')
+/ModDate (D:20080528091008-05'00')
 >>
 endobj
-9522 0 obj
+9510 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-9523 0 obj
+9511 0 obj
 <<
-/BaseFont /SOZALR#2BAlbanyAMT
-/FontDescriptor 9525 0 R
+/BaseFont /IXZCQV#2BDejaVuSans
+/FontDescriptor 9513 0 R
 /Type /Font
 /FirstChar 97
 /LastChar 117
-/Widths [ 600 600 0 600 600 600 0 0 0 0 0 0 0 600 600 600 0 600 600 600 600]
+/Widths [ 613 635 0 635 615 352 0 0 0 0 0 0 0 634 612 635 0 411 521 392 634]
 /Encoding /WinAnsiEncoding
-/Subtype /Type1
+/Subtype /TrueType
 >>
 endobj
-9524 0 obj
-542
+9512 0 obj
+537
 endobj
-9525 0 obj
+9513 0 obj
 <<
 /Type /FontDescriptor
-/FontName /SOZALR#2BAlbanyAMT
-/FontBBox [ 0 -186 567 604]
-/Flags 5
-/Ascent 604
-/CapHeight 604
-/Descent -186
+/FontName /IXZCQV#2BDejaVuSans
+/FontBBox [ 22 -208 580 759]
+/Flags 4
+/Ascent 759
+/CapHeight 759
+/Descent -208
 /ItalicAngle 0
-/StemV 85
-/AvgWidth 600
-/MaxWidth 600
+/StemV 87
 /MissingWidth 600
-/CharSet (/n/o/d/p/e/f/r/s/t/u/a/b)
-/FontFile3 9526 0 R
+/FontFile2 9514 0 R
 >>
 endobj
-9526 0 obj
+9514 0 obj
 <<
-/Subtype /Type1C
 /Filter /FlateDecode
-/Length 9527 0 R
+/Length1 83320
+/Length 32212
 >>
 stream
-xœeTkPWÞ@ÜdLx®‘NÑlF©AñUÀŽ<£Eyˆ€¦txH	IäH"¥+Z‚‚´H[Am»±ˆŠ"ÖGÇ
-E@±vJÇZL5ØÖ»3Û½˜"vúggϹ÷Üïœï|ç0¦Â`0æGJ³2eÊÈø”+˜òeP‹\¨Å®@ݤó#!2·ƒ\Áu%¸ÌöEh7èðõ`Ÿ'âÊ`T4‰–+”E’¼üA at jòNa``Ðœguhh¨ K9{"ˆKòd‚eð§L,•+
-Ų’pA4¼-•J²yR¥"¿X™“#Ι	KË”Š"‰T¢PÈËÑBÁšU«V¯€Ÿ5	’¬ÒbA¼\&l$‹óJ¥™Eÿq"•ÉsâÜ¢â’ÒÌ,ID’Xd;"B6#;$IC¢hÄ
-’0‘zäcÃæÂq©ryâÚÍd3%ÌgóÒ)»;e'H0I*HoàM‚Om>اÖñ"P¥F«®2h[ñz2­¨…V“¶
->h›AßbÖè+ðЈž ¦£&6ÖÛqüsãi߯ˆ6mGEg™¹ˆ(dÓ„„¥¬FøpA-M0°V¯Â%@ŽÇ~»6>¯|Ûv>LbI1HÆ0IÍ']Á%*šG{¿åO{Ð^Ó f6ý¸ƒþ¿Óð,柖¬óó[?1íx8ñ_D‚i0­íVï> ¾Îî>˜šRRÞ
-Té̾ kÐ=ÃÉÝ›6ÍYp¬Ÿö°/œÑ«'ïôñ±ª5S¬VgšJS§ ´Lóãa~ð¦x˜Ðÿˆ:>ñt&k:ÁV’`|†¾ç$ HÌü {A¨ÊY¶øÛ’
--ZmÔXpŠ¶6ÌæZƒ‚Chß»—Ç6ðüíWÀÁ±	ÀYñˆöŒØ¥¥ñè2oz4R!ØxwjêÞÈSg­ ŠËIu¤óˆ³õÖÊù?†÷šøÓîôÂ~À÷àžë1Ökuuõ´xvATi<A#Døíª¿Ø$³íñÐ;a'F’Ž®bÏÊ€r!ÿ‡).¤£¯h Ó¯£zOÞj'ëê;ùçtÑ@°›aM:ƒº—6Šôb‚½zkZžÂz¥”ŸéI!ZáTÔÍ}ÔbüW7t:‹(…‹†¼}¤7š=CÕþ—ÄÝ¥'_ZNân£“ÁÔRmPá´ìE±ÓàÒÛÑë{Œ°VR¢×ªoœÉÊØ³Rµà{ÛK2b‘$_¹íTX‚×Ë^•÷‚“}>˜‰Š¡x¼ü/2Ž$lL$ŒJ+h•u)ñ.U—vD;¨íÔvVuVZŠˆ6fJ‹Ë	y;öôY¾ž…‰š5Æý|,®J[£Â7@»B¯iác™õ†6ÜIJåžWÝ‚}÷pp¬»¼Gz/h›õk›t
-¥føV™¹ÚbyÓ6xbdôbáûó±%ûôšf_³ÞØŠc¦;,lI«¶IÍÇLûk!‚³íÀÛ\ÁnHà°Út†ÊJ]ŠOs"çh¡¡×ÓÿÐ/?3jL5>¬¯Óò³ŠcU;¶(³»V ŸSùìøLÂVx’à¸-sÚ+¡¶.X¬BBqaw^CiA±Þĉ…[|we“çqp9hnÖàéÆK;ïߺÖ50ÈŸˆ!Á¤÷0	®’Y3Ó©¢Ö/|òFe
-°¢C›/®Ì«R¦ð«ètD5»ÆPkj8|ðàaþxG—þÁþáÂ{ðVÒiã{Pò^ë’Bpìü¦ïv>ºÚyå:¿—¹e[Zq4¬5£§ÿæЙßœÓÕœúß– $ pßõƒ
-pG½¶#PLýw[*ë•cêëé»&önvðžAvÚ#2¥ f7D7xÏÆ–
-ÃC—l|àpÜ›€SZn¥ÖY·ÕjEÏÌ'9g¸\’ë† ÿ w8
-û
+xœì½|U÷>~§ÏÜéDêR	mw6! HÊ!$TQY’M²dC²¡#H‘¢€¢"""*¢bCDEÄŠˆŠØ»"bCQ±!6øÍÌž€è×W}Ëÿóù“—½wîÜ{žsÎ-Ï9—/"B2š(4$¯ ›¹ˆŒyÎçð¢ŠpUâ9Ýç|MŠûP´EªÓòŽó|¬¤ª´b¢=i<B¤óŒî(-ŸZ’词Eˆ_Y	’ہˆP?§5¹Ìi¶4=€µÐynWVŸx®¼âòXQ8ñÜä(B:T„§T59.8ò©;V_e¸"ÒrüàœççêÃWÅjâsfTÌD¨ß«=צª:RÕ›ûڏñLD[Ð.çç	´­&Ö;O®~–µä&4Õ:-Û‰]Ä"²‹Ó¶F{œžÐ.jˆ(à´"ô&C¢ïˆB´Ù‘‘JXD*Ç҈Υ7Óùôúz7J¡kèÝôXº†P71ÙõÎßTji gQ+´…؇jÐVê  ¶Ñ™´‚öQ»©
+è#…väïBËÐ:4ÝÑÅ"bh9ÌwZv2»Ñ*ç'æ¼ßM¬!ö8Úm%梽h%E“Ðb¯c×.tÍ¥
+ÉYŽOd‰£ÿNGÖngü*TC#f/Ñ1²³Óæhï`ó>[P]˜½ÞÏa4ËA.DëØ-¬ÅµuP\­'¶‡Ø+ÑZ´‡CM¤Þ&æÓméÛèhYÂÔX´Ì‘½ÊÖSÛÝŸé®tr2=–Ø€Òc¹qŽì®Eæf2ß±¨msþNf5ǦÞÄ|j‘£©û¶ÚÍ
+¤»9ã	ÜLÇj„bTwjÓÑÝhêB­@ËIž½l
+sĹšÞïؼŒXBA»©LÔ	•Ð_:¾FB+zcš"	”äÓ6’í³‹7ö:Ò÷̨Ö]’Nyôiœo#²QžêÛrüø‘t3fÔF¦ùFª=¿‘nßvÿï½Üß%iА‘¾¿†2Ajhl¦ÓV0Ò©ºON³ÓÊôÞ¹ ™öÎÿ²Çnô•ùk‹ÛöZ¬EzuqÖ¬cwűÎfüà‡×~*W»-'ýå¶XË©BÔ•!	‘HCý݈)sJw-5%úž·’ðC@"q ê$¢‰¡N!‘luÚ©÷‚:ƒ$r,ÔY„ɹPç‘îì›D]tV‚ºl\ßq4Ôd÷u
+‰½ïºŽèÞ;D‚œaÝ=t·N ÆÄ.¨“ˆ'¾‚:å´ƒ:“m Î &dÔYd‘PçQr)ÔEÔ‹|
+êrû^TK¨+¨¬×Q¨k¨qïk ®#¾÷Ã(ÃYkUh*ªFQTêx8Ž|¨#*rV•ùQwç'àÔÆ9=|(ÝéwVZÜéAaT’œÖlTéôïêÔÒP¹óãCù'dÕxO§Œ8c&9ŸÅNOü'P“O :H“,wWT:½]=ÂΘ
+1Ó©wÆ
+wÎ?ŸƒTæÔ]ioDسÈ9ç6Ÿ£Y­ƒ]î<9OÅn…ÓÃ}‡ʈUM­Ž––Å}‹:ùüÝ»|ã¦úÒ£ñšxu$\‘äË®,êêK+/÷廽j|ù‘šHõ¤HqWü›¡ÉîÐÂð¤Šñ±ÊR_z¸ìwfFƇ‡×:›'\Y©ñ…«#¾h¥¯ªv\y´ÈW«G+ÍN6±À3Ð9`pA¸ÒyHwŒ‰¡	N%›ðç†ü™>Ã=o×8>Šyô;>÷;+
+T×Dc•>WàdQ§:V‰'-1§qXqu¸%±JÇEqÇãÈ›÷¸3k½P7ç§dLrdtuÆÆœ²Ú™Éˆ'¯Ú›ó®ŽÜˆ3•ÅãU½ºu+v„NªíZ«­.Š”ĪK#]+#Îë¬Ô­‘ºuúÛÝà¾s×]Ä[»gÅÐd§¯»Rÿ™õçJêï¼™êô)óFFwUž]qo­»^«öF¸»Ã•:éOžjGýþª=iýž5Øù9í‰5vj
+½ö۝ŽQ—¿ñƒÿÔéñÏŸY§Ÿïz›£ÎìÕâ^‹»
++<_OpÚbÎü_º¸–
+ñäUxÒêwSÔÓ©Ì{»J=”J˜õ$˜÷Äl%Ðk,±Þ“<½bÞìWzã«`Ç&bŽÔ8¬±(¬‚°'#ái2㞧®§"¯Ÿ»Òë$¸½º'ÖrÄÛð‰µ×¦Á*iãÍœ;¶Ø+k<½Šœ1a°{» ÈY¡ž”¸÷¦Î?%N­vRÇ:Ö#¸§–«ÜY¿‰Õï"ÖûÄm©òvM±ƒP䍮Ӧس î­µqÎÛ¸÷6ÿ !	vs‘£Y­'%á“ÉÞ(óN¥8x¦ÂkkhQ
+Õ'­Ê„¶µž“ÌŽ[¯ðæ31׸Á	RãŒNú;’NØÙÍ;A|žäÄ~HÈŽ‚WOžý?¶ºÎs	m«N¬è¸§Wýª«·h²çŠ?…P·J¼S½,Œ4@,ö>]Œ$¯t=1ÞéQäÉKô©›?w—ÃÉV7CEv±§q4íåíÎBÐ.ìHŒy'Cý4<‹ê=ðÛ“ Òé‡ÝPsRߺ½Rﱆg@Ãq>Ïæ°§9öÎæ“×ZÂ	.	ÿÁ|Æ<ôÁÜWxeýùñgæ"î1‘ˬa°¨ëIžú£±®O¦·$Ð]Ÿ—x:ÃJ*÷Öiõ‰–„¦®O‹ÌyÃUWÇ a£Þ™Qî=á{šºóUÙÀ¥'ñj©î
+{«'±vë0NõOÍÿiS–,¨_aaoŽþ¼'ãœêÓé–ó]þÎiŽOÌNµwΆ½s¥^n]K͉Y·_NeœsÏŠ:¤ÉžUÅÞø6§áÃ6'ì>uvÞÕ±m›«,±grNá—qÞ~5еöAÝ:™ä¼žÆc4Åós%ìä*ç'Á^aïDœÑpÞ:×µàÓî”2ï„÷ye
+èñVÒï­“º³îtgw±Ç•Þ¼7ô×鼊x®áþÕ½Z㝚u\]¿Ûêv’9”Ÿˆ=ªaÄÉ«¼=Áù,…K𡻪ð‰SõßyRý¾Uã`ÄKNxj 
+y8y(×yrqòœ§B4‰#ó½wÙN›Ï‰ãò7ݧL§5Ó›—4ïû¾·G8uWbæÉJÈÈw>]Ù£œW¶Ï{vŸ9ýsYîØéa„iŽfyNÝ•=ØiÍqÊôsGd8-Ãœg·Þ¹Qh/×Uèíwœ«KBÓB§½õd­²=Ä:Í;OùŽüð6Í‘íÉsõOòâ#·žz&<—ïIw}äJvef8åxOnë0§âô+ðü™æÙœÐ6׳!ËyŸ°%äi˜‰„FN9ÄÁv{ôwô*ô¼à"BÏ$o]{2½ñ.ê ¯WB³<˜e·^/¥+ø2¡‡ëÿá'<ûsœŸg¡ÓRèÍMš#¿NnÝÚéïIpõÆž7†yö¥y~ÈóÒ½~®]æœXqù
+f%Ãó—;o®æ™Ršç‘‚ÓZR'­áìœnuàý=ûBž§r¼ÞŽCNÿì-‰õ˜íÙš¾NÈL¬ûÄšÈiàÝÏFwf‡:¨!XSižïN¶Â§žþõV$f 
+>3ø¬~ösavëô)ôOã•Þ^y½Ò¼¹.8±G²¼ý;4vb…ÕŸÃ`}æÐìdÿÖí£º~æìHȪÃ>y3½õ”œðF¢þ¹‰³+äðZ‘—çÄOœÛ'3wè±>mw&58kF‰S¸¿×·â”~õ­‰l)ÁYõ¹NÃØítv]vœˆåë¢Þúè#qv'r¢†Qo±Ÿ'bÀšQIÌ‹c'"“ÉÞÛzN¯‚»“ØIyž‹ö¸?éVÕËJÄ•a/ZpÑjNãÍßg(ü›Ì°ÊãûÊd¯‡Èĵ¯úºíÓNɆëî~;¾ÓÎA-§‹ú¿Ú›ï*È¥¢ž‡Ýx²+È­FuyY½O\$îÝ*N™õúÕçJë…N½Up}PÚ@óbÏ×%îð\LìWuw\ÿý[§úÎúé>Ÿttjäõﻧ½òý‡ïƒðŸº:9’/j Sý]G]Ï?wƒzºü_»Wòýæ^	ÿÿ÷J
+î•êoþ¿y¯„ObØÿÞ½>M¶ö¿p¯„O{¯ToÑæ^	ÿÁ}Áæ^	£õ^©þ_þÉ{¥úývò½Òï±ïïß.%òóD$ñ¿v»„ÑÉ·K§¿ÝøÏÜ.á?𮯁ÿ·o™°·Æ~Íüço™ðÿð->å–©>×ýOÞ2áÿó–É÷»eÂÿÂ-“ïßvË„=w¤ô´Mx;ÍyÿŸ»;§óÿÖÝþÍÝ‘ï¿vw„÷î¨þèßw„ÿ…»£?’ûï½;ª;YŸQ~{ãƒÿOÃ[šòÆÿ­ŸßælíÆ7¸ñù£{‡â†&þùýPýMöpܧ®ey_Ðr¿ªæ~ÙíÄ÷ã|k"߸Hylr§®¾?ñŶ®¾þåS«Êj|ÑŠªXu<Rì+©ŽUøÒª#“àK`uÞéj_¤kƒq=úðHuØ—PíÄ·ñp—?üƒû½½?ý•?ß)ÈÑöÅ«ÃÅ‘Špõ_¬äT)‰TWDk¼/ÍEk|e‘ꈃUZ®tLOrlwÌr†9«.$ùâ1_¸rª¯*R]ãˆ‹;‹:.ûŠ¥±Ó3^©óSQQ¬¢Êéîvˆ—9Ò/G*kïµñ\Ò¦“#¬Ø®©‰EÃ.ŽÕVD*ãḫOI´Ü™¤Ž®Do€¯ VŸì¸¿M'O“êHUu¬¸¶(â‰)Ž:†EÇÕÆ#®ø¤IÎ4•×»šLŽÆËbµqG™Š( ¹Õ	W:bkkœþ®9I¾Šˆk5öHMYRŒ$³[¬ÚWqæÁéuTóOv•sÄV¹ŽŽã„ë< ÉeÎÂúÍ wJj«+Àˆ7°8櫉%ùjjǍÅÝ×¾’X¹³Ø\ƒŠb•ÅQ׎š^:âÂãb“"ž‰Uä)pbTÆâÎ4Ô$ZÝY©ª_‰w¾š²py9¯9j8»$|’±Jg]Tû*bÕ‘Óší‹O­Š”„ ®	¥N~[žêìgxq´$ê.´pyÜYzNÅ..ö,O¸ÎÝ ájG¯Úòp5vŠ#5ÑÒJOÒÄ^u¹+4\ä©qGÔéSs*’+; žÃÂå§ cêô¨—æ¨WY>Õm°Ì±kNuÄýµ	¯¯[©qéÎKÝöˆ8k.Rí
+š«.®ñµ9±Û¸Øu/pwÛ¶ñ\æÌLì—qg'¹Rk9p}2)=¡XdJÜÙ1¾pU•³½ÂãÊ#î‹„íŽd·‚ë'¥,÷•…k‰‘Ê“|⮺úÕ]ì«­,…ëUÅžr	ÿhVkbåî®ö¦Í¤°¯Ü==œ½R×±*\4!\êæìÃÊv—꿶¨N‚r,GÅHy‰«Ô€/+/·ÐW—U8"-?äË.ð
+ÉÏžÊôµI+pžÛ$ùFdÈVèszä§åŽòåeùÒrGùeçf&ùB#‡ä‡
+
+p^¾/{ðœìÓ–›‘3,3;·¿/Ý—›WèËÉœ]è-Ì󆂨ìP+lp(?c€ó˜–ž“]8*	geæ:2åò}i¾!iù…ÙÃrÒò}C†åÉ+922±¹Ù¹YùJhpÈ1”‘7dT~vÿ…IΠB§1	æ§e†§åJò9Âò“ó}^—®Ž–Ž_h¸;¸`@ZNŽ/=»° 0?”6Øíëz§nÞàÎÊ–›™V˜—ëK9¦¤¥ç„º9¦dä¤eNòe¦
+NëïšSâvK˜SïìèÊ
+å§å$ù
+†„2²ÝŠãÇìüPF¡×Óñ½ã‰OÝŒ¼Ü‚ÐÐaNƒÓ¯"	ò Òœÿexšyæç:æºr
+óòO¨2"» ”äKËÏ.pg$+?ÏQםϼ,osüéN^.èëΑÛöÛÕáôrGƒ™¡´G`«†Ó€Oê묮Д¢HUÜ]Û°¹G£wŒ&ÎÎ$oÕ&g	÷¯t6n¢Í«:´äì,u§[=a»tœ”8z½ãÃYÝ%ŽÞâIç¬q’X5Ž¹‡Éäh·Ó
+¬ˆ%8ÏW.wÀœQî.òz9ge¸ÜVsBÍ“6®#êê¨3dru4î&¾p­ÓZ4\
+4åYà«·ÀE©?úWGjª–ŠNŠ”Oíêô­v¹ÌÓ$ZY«® Ó=÷Å{Õ…
+q_©'¼8DZêÒ®>Œ½ˆëo‡NöWþ™8'â ß_‰ƒp}äû‹qþm‡|‘'©¦Ž3N Ö,øïÄJ¾ºX	ÿoÄJ81ÿ¶X	'6ìߊ•ð?+áúXÉ÷c%|R\ðb%ü{±’ïÏÇJ¸A¬Ôpûž.9|îÿT¸„!\òý­p	Ÿ¤®—7þÓ!®ŒùþvÈ„ÿѐ	CÈäûë!>5dòý•	Ÿ6dòý+!.L>x`ž«vÚ€¿ázËÿNt„ë¢#ß߉ŽpÃèÈ÷—¢#|ÚèÈ÷w¢#w±ž´QN>øwß¿øà?||"ðÁ^àsrìð4ñºþý¼ wuŠ®çw»y÷vœ¿Ý¼»³bï_õºzÿ¾Z崝ü¯…ü†Ý&G'D»EÃjJת²ªnpbþ¥ßå$¿ }ü"4æµÜûhQˆFb‡x$ ŒD$!)HEÒ‘Ld¡F¨1:5Ag¢¦¨jŽZ –¨•£HkÔµEíP{ԝ…:¢NèlÔ%¡.ŽýÝPwÔÃû­OQ2JA=QªãßÞèÔõEç¢~Þ=w†wåý›G6ˆ9ìý‹Ç4å{ßžæ>D£[ÎCcÐùèt!ë¸áNt3š‡æ£GÐ
+ô)º-E—¢ëÑíhA¢Åè-4]‰¾Aߢ%è´mGÑ´}¾CGÐMè.ô,Ú‰îFãœ9ºÜ™»]Ž£ŸAÏ¡Ñóh7zDîOà%ô2ºÇ™õÃè
+ôzíuæösôZäLŠ;÷¨Ü™µŽû'z·¶5Þíì$ge|欅ih*šŽf¢hºÍB¡Ùèbt}‰¶AÁÁ£_Ñ1B 0!:N B&B%B#t LÂ"‰3ˆ&Ä™DS¢:Š~$š-ˆ–D+ÂG´&Úm‰vD{¢qÑ‘èDœMtF?¡×‰$¢Ñ•èFt'z~"@ØDH&RˆžD*Ñ}€½‰sˆ>D_â\¢‘F¤D&"²ˆþÄ "mD÷‰AD1˜È%òˆ!ÄP"Ÿ(@?£_Їè#¢F'F#‰QÄhâ<bq>qq!1–ãˆ"¢˜ˆ%D)QFDÑÃÄxbQNT Ñ'D%#ªˆ‰D5QCĉZb1™˜BL%¦Ó‰ÄLâ"b1­'.&æs‰yÄ|âb±XD,&.%.#–K‰eÄåÄÄrâJâ*âjbq
+±’¸–XE\G¬&®'Ö7k‰‰›ˆ›‰uÄ-ÄzâVâ6âvbqq'qq7q±‘¸—ØDÜGl&î' $¶[‰‡‰mÄ#Ä£ÄcÄãÄÄ“Ävâ)bñ4±“x†x–xŽØE<Oì&^ ^$^"^&^!ö¯{‰×ˆ×‰7ˆ7‰·ˆ·‰wˆw‰÷ˆ}ÄûÄ~ââ ñ!ññ1ñ	ñ)qøŒøœ8D|A|I|E&¾&¾!¾%¾#¾'Ž?G‰‰ŸˆŸ‰_ˆ_‰cÄq‘I’I“É’É“‰I‘”H™TH•ÔH4H“´ÈFdcò²	y&Ù”lF6'[-ÉV¤lM¶!Û’íÈödò,²#Ù‰<›ìL&‘]È®d7²;Ùƒô“Ò&ƒd2™Bö$SÉ^doò²Ù—<—ìG¦‘éd™I†È,²?9€Ì&’ƒÈr0™Kæ‘CÈ¡d>Y@’ÃÈáär$9ŠMžGŽ!Ï'/ /$Ç’arYD“²„,%ËÈ(9žœ@–“d%#«È‰d5YCÆÉZr9™œBN%§‘ÓÉäLò"r9›¼˜œCÎ%ç‘óÉKÈäBr¹˜¼”¼Œ\B.%—‘—“WËÉ+É«È«Éä5äJòZry¹š¼ž\CÞ@®%o$o"o&ב·ëÉ[ÉÛÈÛÉ
+äää]äÝä=äFò^ryzí'7“÷“’[ȇȭäÃä6òòQò1òqò	òIr;z½ƒÞEï£7Ñ>ò)rù4¹“|†|–|ŽÜE>Oî&_ _$_"_&_!÷¯’{É×È×É7È7É·È·ÉwÈwÉ÷È}äûä~òò ù!ùù1ù	ù)yüŒüœ<D~A~I~E&¿&¿!¿%¿#¿'?GÉÉŸÈŸÉ_È_Écäq
+QERESÅRÅS…)‘’(™R(•Ò(2(“²¨FTcêª	u&Õ”jF5§ZP-©V”jMµ¡ÚRí¨öTê,ª#Õ‰:›êL%Q]¨®T7ª;ÕƒòSʦ‚T2•Bõ¤R©^ToêªÕ—:—êG¥QéT•I…¨,ª?5€Ê¦Rƒ¨j0•KåQC¨¡T>U@RèáÔj$5
+Ý@¦Î£ÆPçSPRc©05Ž*¢Š©UB•ReT”OM Ê©
+ª’Š¡ë¨*j"UMÕPqª–šDM¦¦PS©iÔtj5“ºˆšEͦ.¦æPs©yÔ|êjµZD-¦.¥.£–PK©eÔåÔÔrêJê*êjju
+µ’º–ZE]G­¦®§ÖP7Pk©©›¨›©uÔ-ÔzêVê6êvjuu'uu7uµ‘º—ÚDÝGm¦î§ ¤¶PQ[©‡©mÔ#Ô£ÔcÔãÔÔ“Ôvê)jõ4µ“z†z–zŽÚE=Oí¦^ ^¤^¢^¦^¡öP¯R{©×¨×©7¨7©·¨·©w¨w©÷¨}ÔûÔ~êê õ!õõ1õ	õ)uúŒúœ:D}A}I}E¦¾¦¾¡¾¥¾£¾§ŽP?PG©©Ÿ¨Ÿ©_¨_©cÔqÑMÒMÓÍÒÍӍi‘–h™Vh•Öh6h“¶èFtcúº	}&Ý”nF7§[Ð-éV´nM·¡ÛÒíèötú,º#݉>›îL'Ñ]è®t7º;݃öÓÚ¦ƒt2B÷¤Sé^toúºÝ—>—îG§ÑétI‡è,º?=€Î¦Òƒèz0KçÑCè¡t>]@ÒÃèáôz$=ŠMŸG¡Ï§/ /¤ÇÒaz]DÓº„.¥Ëè(=žž@—Ót%£«è‰t5]CÇéZz=™žBO¥§ÑÓéôLú"z=›¾˜žCÏ¥çÑóéKèôBz½˜¾”¾Œ^B/¥—Ñ—ÓWÐËé+é«è«éô5ôJúZz}½š¾ž^Cß@¯¥o¤o¢o¦×Ñ·Ðëé[éÛèÛé
+ôôô]ôÝô=ôFú^z}½™¾Ÿ~€~ÞB?Do¥¦·ÑÐÒÑÓOÐOÒÛé§èôÓôNúúYú9zý<½›~~‘~‰~™~…ÞC¿Jï¥_£_§ß ß¤ß¢ß¦ß¡ß¥ß£÷ÑïÓûéèô‡ôGôÇô'ô§ôAú3úsúýý%ý}˜þšþ†þ–þŽþž>Bÿ@¥¤¢¦¡¥ÑÇÄÉPÍ0ËpÏfDFbdFaTFctÆ`LÆb1™3˜&Ì™LS¦ÓœiÁ´dZ1>¦5Ó†iË´cÚ3˜³˜ŽL'æl¦3“Ätaº2ݘîLÆÏ›	2ÉL
+Ó“Iez1½™s˜>L_æ\¦“Ƥ3L&b²˜þÌ &›Èbr˜ÁL.“Ça†2ùLSÈc†3#˜‘Ì(f4s3†9Ÿ¹€¹Ë„™qLSÌD˜¦”)c¢ÌxfSÎT0•LŒ©b&2ÕL
+gj™IÌdf
+3•™ÆLgf03™‹˜YÌlæbf3—™ÇÌg.a0™EÌbæRæ2f	³”YÆ\Î\Á,g®d®b®fV0×0+™k™UÌuÌjæzf
+s³–¹‘¹‰¹™YÇܬgnencng60w0w2w1w3÷0™{™MÌ}Ìfæ~ææAfó³•y˜ÙÆ<Â<Ê<Æ<Î<Á<Élgžbv0O3;™g˜g™ç˜]ÌóÌnææEæ%æeæfó*³—yyyƒy“y‹y›y‡y—yÙǼÏìg>`0213Ÿ0Ÿ2™Ï˜Ï™CÌÌ—ÌWÌaækææ[æ;æ{æós”ù‘ù‰ù™ù…ù•9ÆgK°$K±4Ë°,˱<+°˜Y‰•Y…UYÕYƒ5Y‹mÄ6fÏ`›°g²MÙfls¶Û’mÅúØÖl¶-ÛŽmÏv`Ïb;²Ø³ÙÎlÛ…íÊvc»³=X?`m6È&³)lO6•íÅöfÏaû°}ÙsÙ~l›Îf°™lˆÍbû³Ølv ;ˆÍa³¹l;„Êæ³l!;ŒÎŽ`G²£ØÑìyìö|ööBv,fDZEl1aKØR¶Œ²ãÙ	l9[ÁV²1¶ŠÈV³5lœ­e'±“Ù)ìTv;ÁÎd/bg±³Ù‹Ù9ì\v;Ÿ½„]À.d±‹ÙKÙËØ%ìRv{9{»œ½’½Š½š]Á^îd¯eW±×±«ÙëÙ5ì
+ìZöFö&öfv{»ž½•½½ÝÀÞÁÞÉÞÅÞÍÞÃndïe7±÷±›ÙûÙØÙ-ìCìVöavûû(ûû8ûû$»}ŠÝÁ>ÍîdŸaŸeŸcw±Ï³»ÙØٗؗÙWØ=ì«ì^ö5öuö
+öMö-ömöö]ö=vû>»Ÿý€=À~È~Ä~Ì~Â~Êd?c?g±_°_²_±‡Ù¯ÙoØoÙïØïÙ#ììQöGö'ögööWö{œCÁ‘ÅÑñÇñœÀaNä$NæNå4NçÎä,®ט;ƒkÉ5åšq͹\K®çãZsm¸¶\;®=ׁ;‹ëÈuâÎæ:sI\®+׍ëÎõàü\€³¹ —Ì¥p=¹T®×›;‡ëÃõåÎåúqi\:—Áer!.‹ëÏ
+ಹÜ .‡ÌåryÜn(—Ïp…Ü0n87‚ɍâFsçqc¸ó¹¸¹±\˜ÇqÅ\„+áJ¹2.ʍç&på\WÉŸ*n"WÍÕpq®–›ÄMæ¦pS¹iÜtn7“»ˆ›ÅÍæ.ææps¹yÜ|în·[Ä-æ.å.ã–pK¹eÜåÜÜrîJî*îjnw
+·’»–[Å]Ç­æ®çÖp7pk¹¹›¸›¹uÜ-ÜzîVî6îvnww'ww7w·‘»—ÛÄÝÇmæîçàä¶pq[¹‡¹mÜ#Ü£ÜcÜãÜÜ“Üvî)n÷4·“{†{–{ŽÛÅ=Ïíæ^à^ä^â^æ^áöp¯r{¹×¸×¹7¸7¹·¸·¹w¸w¹÷¸}ÜûÜ~îî ÷!÷÷1÷	÷)wûŒûœ;Ä}Á}É}Åæ¾æ¾á¾å¾ã¾çŽp?pG¹¹Ÿ¸Ÿ¹_¸_¹cÜqñOòOóÏòÏóy‘—x™Wx•×x7x“·øF|cþ¾	&ß”oÆ7ç[ð-ùV¼oÍ·áÛòíøö|þ,¾#߉?›ïÌ'ñ]ø®|7¾;߃÷óÞæƒ|2ŸÂ÷äSù^|oþ¾ß—?—ïǧñé|ŸÉ‡ø,¾??€Ïæòƒø~0ŸËçñCø¡|>_ÀòÃøáü~$?Š͟ǏáÏç/à/äÇòa~_Äó¾„/åËø(?žŸÀ—ó|%ã«ø‰|5_ÃÇùZ~?™ŸÂOå§ñÓùüLþ"~?›¿˜ŸÃÏåçñóùKøüB~¿˜¿”¿Œ_Â/å—ñ—óWðËù+ù«ø«ùü5üJþZ~¿š¿ž_ÃßÀ¯åoäoâoæ×ñ·ðëù[ùÛøÛù
+üüü]üÝü=üFþ^~¿™¿Ÿ€ßÂ?Äoåæ·ñðòñóOðOòÛù§øüÓüNþþYþ9~ÿ<¿›‘‰™…ßÿÊïå_ã_çßàßäßâßæßáßåßã÷ñïóûùøü‡üGüÇü'ü§üAþ3þsþÿÿ%ÿ˜ÿšÿ†ÿ–ÿŽÿž?ÂÿÀåäâæáåñÇ$)P-0+p/DAdATAtÁLÁ	…3„&™BS¡™Ð\h!´Z	>¡µÐFh+´Ú„³„ŽB'ál¡³$tº
+Ý„îBÁ/[
+ÉBŠÐSHz	½…s„>B_á\¡Ÿ&¤B¦²„þ ![(r„ÁB®'†
+ùBP(†#„‘Â(a´pž0F8_¸@¸P+„…qB‘P,D„¡T(¢Âxa‚P.T•BL¨&
+ÕBj…IÂdaŠ0U˜&Lf3…‹„YÂlábaŽ0W˜'Ì.…EÂbáRá2a‰°TX&\.\!,®®®V×+…k…UÂuÂjázapƒ°V¸Q¸I¸YX'Ü"¬nnn6ww
+w	w÷…{…MÂ}Âfá~ááAa‹ð°UxXØ&<"<*<&<.<!<)lžvO;…g„g…ç„]ÂóÂnááEá%áeáaðª°WxMx]xCxSxKx[xGxWxOØ'¼/ì>
+	ŸŸ
+…Ï„Ï…C—ÂWÂaákáá[á;á{áˆðƒpTøQøIøYøEøU8&ǘĦ1ƒYÌacKXÆ
+V±†ul`[¸nŒÏÀMð™¸)n†›ã¸%n…}¸5nƒÛâv¸=î€ÏÂq'|6pÜwÃÝqìÇlã NÆ)¸'NŽpo|îƒûâsq?œ†ÓqÎÄ!œ…ûã8ăpŒsq‚‡â|\€ñ0<À#ñ(<Ÿ‡ÇàóñøB<‡ñ8\„‹q—àR\†£x<ž€Ëq®Ä1\…'âj\ƒã¸O“ñ<OÃÓñ<_„gáÙøb<ÏÅóð||	^€âEx1¾_†—à¥x¾_—ã+ñUøj¼_ƒWâkñ*|^¯Çkð
+x-¾ß„oÆëð-x=¾߆oÇðøN|¾߃7â{ñ&|ÞŒïÇàñüÞŠÆÛð#øQ´	݇Ïã'ÐèAô~mF÷£x;šƒžDðSx~݁wâgð³ø9¼?w£§ñøEü~¿‚÷àWñ^ô(z¿†_Çoà7ñ[ømü~¿‡¶á}ø}¼€àñGøcü	þÄŸáÏñ!üþ…ã¯ñ7ø[üþÁ?à£øGüþÿ‚ÅÇðq‰„HŠ”H‹ŒÈŠœÈ‹‚ˆEQ”DYTDUÔD]4DS´ÄFbcñ±‰x¦ØTl&6[ˆ-ÅV¢Ol-¶ÛŠíÄöbñ,±#úAì$ž-v“Ä.bW±›Ø]ì!úÅ€h‹A1YL{Š©b/±·xŽØGì+ž+öÓÄt1CÌCb–Ø_ f‹ÅAbŽ8XÌóÄ!âP1_,Åaâpq„8R%ŽÏLj狈ŠcÅ°8]&‰ÅbD,KÅ21*Ž'ˆåb…X)ÆÄ*q¢X-Öˆq±Vœ$N§ˆSÅiâtq†8S¼Hœ%Î/çˆsÅyâ|ñq¸P\$.//—ˆKÅeâåâârñJñ*ñjq…x¸R¼V\%^'®¯׈7ˆkÅśěÅuâ-âzñVñ6ñvqƒx‡x§x—x·x¸Q¼WÜ$Þ'nï·ˆ‰[ŇÅmâ#â£âcâãââ“âvñ)q‡ø´¸S|F|V|NÜ%>/î_____÷ˆ¯Š{Å×Ä×Å7Ä7Å·Ä·ÅwÄwÅ÷Ä}âûâ~ññ€ø¡ø‘ø±ø‰ø©xPüLü\<$~!~)~%¿¿¿¿¿ˆ?ˆGÅÅŸÄŸÅ_Ä_Åcâq	I„DJ”DKŒÄJœÄK‚„%Q’$YR$UÒ$]2$S²¤FRcé©‰t¦ÔTj&5—ZH-¥V’Oj-µ‘ÚJí¤öRé,©£ÔI:[ê,%I]¤®R7´Rê.õüè6) ÙRPJ–R¤žRªÔ­’z£kÑWÒ9R©¯t®ÔOJ“ÒÑ-R†”)…Ðr)Kê/
+²¥Ò )G,åJyÒi(Z-åKR¡4L.FJ£¤ÑÒyÒé|ééBi¬–ÆIER±‘J¤R©LŠJã¥	R¹Tn•*¥˜T%M”ª¥).ÕJ“¤ÉÒiª4Mš.͐fJI³¤ÙÒÅÒi®4-“æK—HÐUèji¡´HZ,]*]&-‘–Jˤ˥+¤åÒ•ÒUÒÕÒ
+éi¥t­´JºNZ-]/­‘nÖJ7J7I7Kë¤[¤õÒ­ÒmÒíÒééNé.énéi£t¯´IºOÚ,Ý/= =(m‘’¶JKÛ¤G¤G¥Ç¤Ç¥'¤'¥íÒSÒéii§ôŒô¬ôœ´Kz^Ú-½ ½(½$½,½"í‘^•öJ¯I¯KoHoJoIoKïHïJïIû¤÷¥ýÒÒéCé#écééSé ô™ô¹tHúBúRúJ:,}-}#}+}'}/‘~ŽJ?J?I?K¿H¿JǤã2’	™”)™–™•9™—Ë¢,ɲ¬Èª¬ÉºlȦlɍäÆòrùL¹©ÜLn.·[Ê­dŸÜZn#·•ÛÉíåòYrG¹“|¶ÜYN’»È]ånrw¹‡ì—²-åd9Eî)§Ê½äÞò9r¹¯|®ÜON“Óå9SÉYry€œ-”É9ò`9WΓ‡ÈCå|¹@.”‡ÉÃåòHy”<Z>O#Ÿ/_ _(•Ãò8¹H.–#r‰\*—ÉQy¼<A.—+äJ9&WÉåj¹FŽËµò$y²<Ež*O“§Ë3ä™òEò,y¶|±<Gž+Ï“çË—Èä…ò"y±|©|™¼D^*/“/—¯—ËWÊWÉWË+äkä•òµò*ù:yµ|½¼F¾A^+ß(ß$ß,¯“o‘×Ë·Ê·É·Ëä;ä;å»ä»å{äò½ò&ù>y³|¿ü€ü ¼E~HÞ*?,o“‘•“—ŸŸ”·ËOÉ;ä§åò3ò³òsò.ùyy·ü‚ü¢ü’ü²üŠ¼G~UÞ+¿&¿.¿!¿)¿%¿-¿#¿+¿'ï“ß—÷ËÈäåäåOäOåƒògòçò!ùùKù+ù°üµüü­üü½|DþA>*ÿ(ÿ$ÿ,ÿ"ÿ*“+H!R¡ZaVá^¬ˆŠ¤ÈŠ¢¨Š¦èŠ¡˜Š¥4R+g(M”3•¦J3¥¹ÒBi©´R|Jk¥ÒVi§´W:(g)•NÊÙJg%	=¤tQº*Ý”îJů[	*ÉJŠÒSIUz)½•s”>J_å\¥Ÿ’¦¤+J¦R²”þÊ %[¨Rr”ÁJ®’§Q†*ùJR¨S†+#”‘Ê(e´rž2F9_¹@¹P«„•qJ‘R¬D”¥T)S¢Êxe‚R®T(•JL©R&*ÕJWj•IÊdeŠ2U™¦LWf(3•‹”YÊlåbeŽ2W™§ÌW.Q(•EÊbåRå2e‰²TY¦\®\¡,W®T®R®VV(×(+•k•UÊuÊjåzerƒ²V¹Q¹I¹YY§Ü¢¬WnUnSnW6(w(w*w)w+÷(•{•MÊ}Êfå~ååAe‹ò²UyXÙ¦<¢<ª<¦<®<¡<©lWžRv(O+;•g”g•ç”]ÊóÊnååEå%åeåeòª²WyMy]yCySyKy[yGyWyOÙ§¼¯ìW>P(*)+Ÿ(Ÿ*•Ï”Ï•CÊÊ—ÊWÊaåkåå[å;å{åˆòƒrTùQùIùYùEùU9¦W‘J¨¤J©´Ê¨¬Ê©¼*¨XUI•UEUUMÕUC5UKm¤6VÏP›¨gªMÕfjsµ…ÚRm¥úÔÖjµ­ÚNm¯vPÏR;ªÔ³ÕÎj’ÚEíªvS»«=T¿Pm5¨&«)jO5Uí¥öVÏQû¨}ÕsÕ~jšš®f¨™jHÍRû«Ôlu :HÍQ«¹jž:Dªæ«j¡:L®ŽPGª£ÔÑêyêõ|õõBu¬VÇ©Ej±QKÔRµLªãÕ	j¹Z¡Vª1µJ¨V«5j\­U'©“Õ)êTuš:]¡ÎT/Rg©³Õ‹Õ9ê\už:_½D] .T©‹ÕKÕËÔ%êRu™z¹z…º\½R½J½Z]¡^£®T¯UW©×©«ÕëÕ5ê
+êZõFõ&õfuz‹º^½U½M½]Ý Þ¡Þ©Þ¥Þ­Þ£nTïU7©÷©›ÕûÕÔÕ-êCêVõau›úˆú¨ú˜ú¸ú„ú¤º]}JÝ¡>­îTŸQŸUŸSw©Ï«»ÕÔÕ—Ô—ÕWÔ=ê«ê^õ5õuõ
+õMõ-õmõõ]õ=uŸú¾º_ý@= ~¨~¤~¬~¢~ªT?S?W©_¨_ª_©‡Õ¯ÕoÔoÕïÔïÕ#êêQõGõ'õgõõWõ˜z\C¡‘¥Ñ£±§ñš aMÔ$MÖMÕ4M×ÍÔ,­‘ÖX;Ck¢©5Õši͵ZK­•æÓZkm´¶Z;­½ÖA;Kë¨uÒÎÖ:kIZ­«ÖMë®õÐüZ@³µ –¬¥h=µT­—Ö[;Gë£õÕÎÕúiiZº–¡ej!-Kë¯
+вµÚ -G¬åjyÚm¨–¯h…Ú0m¸6B©ÒFkçic´óµ´µ±ZX§iÅZD+ÑJµ2-ª×&håZ…V©Å´*m¢V­Õhq­V›¤MÖ¦hSµiÚtm†6S»H›¥ÍÖ.ÖæhsµyÚ|ím¶P[¤-Ö.Õ.Ó–hKµeÚåÚÚríJí*íjm…v¶R»V[¥]§­Ö®×Öh7hkµµ›´›µuÚ-ÚzíVí6ívmƒv‡v§v—v·v¶Q»WۤݧmÖî×ÐÔ¶hi[µ‡µmÚ#Ú£ÚcÚãÚÚ“Úví)m‡ö´¶S{F{V{NÛ¥=¯íÖ^Ð^Ô^Ò^Ö^Ñöh¯j{µ×´×µ7´7µ·´·µw´wµ÷´}ÚûÚ~íí€ö¡ö‘ö±ö‰ö©vPûLû\;¤}¡}©}¥־־ѾվӾ׎h?hGµµŸ´Ÿµ_´_µcÚqé„Nê”NëŒÎêœÎë‚ŽuQ—tYWtU×t]7tS·ôFzcý½‰~¦ÞTo¦7×[è-õVºOo­·ÑÛêíôözý,½£ÞI?[ï¬'é]ô®z7½»ÞC÷ëÝÖƒz²ž¢÷ÔSõ^zoý½ÞW?W裏ééz†ž©‡ô,½¿>@ÏÖêƒô}°ž«çéCô¡z¾^ êÃôáú}¤>J­Ÿ§ÑÏ×/Ð/ÔÇêa}œ^¤ë½D/ÕËô¨>^Ÿ —ëz¥Ó«ô‰zµ^£ÇõZ}’>YŸ¢OÕ§éÓõúLý"}–>[¿XŸ£ÏÕçéóõKôúB}‘¾X¿T¿L_¢/Õ—é—ëWèËõ+õ«ô«õú5úJýZ}•~¾Z¿^_£ß ¯ÕoÔoÒoÖ×é·èëõ[õÛôÛõ
+úúú]úÝú=úFý^}“~Ÿ¾Y¿_@Pߢ?¤oÕÖ·éèêéëOèOêÛõ§ôúÓúNýýYý9}—þ¼¾[AQIYEߣ¿ªïÕ_Ó_×ßÐßÔßÒßÖßÑßÕßC£'ô}úûú~ýý€þ¡þ‘þ±þ‰þ©~PÿLÿ\?¤¡©¥ֿֿѿտӿ׏è?èGõõŸôŸõ_ô_õcúq„A”AŒÁœÁ‚
+ѐÙPÕÐÝ0Ó°ŒFFcã£‰q¦ÑÔhf47Z-V†Ïhm´1ÚíŒöFã,££ÑÉ8Ûèl$]Œ®F7£»ÑÃðÃ6‚F²‘bô4R^Fo㣏Ñ×8×èg¤éF†‘i„Œ,£¿1ÀÈ6ƒŒc°‘käCŒ¡F¾Q`ÃŒáÆc¤1ÊmœgŒ1Î7.0.4ÆacœQd£Ä(5ÊŒ¨1Þ˜`”F¥3ªŒ‰FµQcčZc’1Ù˜bL5¦ӍÆLã"c–1۸ؘcÌ5æóKŒÆBc‘±Ø¸Ô¸ÌXb,5–—Wˍ+«Œ«Æ5ÆJãZc•q±Ú¸ÞXcÜ`¬5n4n2n6Ö·ë[ÛŒÛ
+ÆƝÆ]ÆÝÆ=ÆFã^c“qŸ±Ù¸ßxÀxÐØb<dl56¶OOۍ§ŒÆÓÆNããYã9c—ñ¼±ÛxÁxÑxÉxÙxÅØc¼jì5^3^7Þ0Þ4Þ2Þ6Þ1Þ5Þ3öïûŒƇÆGÆÇÆ'ƧÆAã3ãsãñ…ñ¥ñ•qØøÚøÆøÖøÎøÞ8bü`5~4~2~6~1~5ŽÇMd&iR&m2&kr&o
+&6ES2eS1US3uÓ0MÓ2™Í3Ì&æ™fS³™ÙÜla¶4[™>³µÙÆlk¶3Û›̳̎f'ól³³™dv1»šÝÌîfÓoLÛšÉfŠÙÓL5{™½ÍsÌ>f_ó\³Ÿ™f¦›f¦2³Ìþæ 3Ûh2sÌÁf®™g1‡šùfYh3‡›#Ì‘æ(s´yž9Æ<ß¼À¼Ðk†Íqf‘YlF̳Ô,3£æxs‚YnV˜•f̬2'šÕf7kÍIædsŠ9ÕœfN7g˜3Í‹ÌYælóbsŽ9לgÎ7/1˜ÍEæbóRó2s‰¹Ô\f^n^a.7¯4¯2¯6W˜×˜+ÍkÍUæuæjózsyƒ¹Ö¼Ñ¼É¼Ù\gÞb®7o5o3o77˜w˜wšw™w›÷˜Í{ÍMæ}æfó~óóAs‹ù¹Õ|ØÜf>b>j>f>n>a>in7Ÿ2w˜O›;ÍgÌgÍçÌ]æóænóóEó%óeósùª¹×|Í|Ý|Ã|Ó|Ë|Û|Ç|×|ÏÜg¾oî7?0˜š™›Ÿ˜ŸšÍÏÌÏÍCææ—æWæaókóó[ó;ó{óˆùƒyÔüÑüÉüÙüÅüÕ<f·EX¤EY´ÅX¬ÅY¼%XØ-É’-ÅR-ÍÒ-Ã2-Ëjd5¶Î°šXgZM­fVs«…ÕÒjeù¬ÖV«­ÕÎjou°Î²:Z¬³­ÎV’ÕÅêju³º[=,¿°l+h%[)VO+Õêeõ¶Î±úX}­s­~Vš•neX™VÈʲú[¬lk 5Èʱ[¹Vž5Äjå[V¡5Ìn°FZ£¬ÑÖyÖë|ëëBk¬¶ÆYEV±±J¬R«ÌŠZã­	V¹UaUZ1«ÊšhU[5Vܪµ&Y“­)ÖTkš5ÝšaÍ´.²fY³­‹­9Ö\kž5ߺÄZ`-´Y‹­K­Ë¬%ÖRk™u¹u…µ\¨)‰—M­*‹Triá¢êX%N”lÚ¸êȤö
+.-V«ŒLà‰RÌ(ŠVÕV””G¦ˆEõuœQ‹‡‹Š"•q\t¢Êf…]‘ʼn"Ó‘Žs! Œ `(ñ
+ª9QåB F$Q²¡„ĈWˆý(UÚ@©þõ²JOT¥þE±ŠŠ0<”6x4SV_§ŒWÓeˏ–GبWpÙ`I,ÉNXM¸.tŽ&J2{ /l€1¾¾.
+j¨Õ„“J«#‘Êòpeq´ˆÍ	ÕÆ#l¹WH9
+û•7x`s*÷
+:DZž.w>ØÜÄøÊÄø܆ã+ŽÏMŒ¯L8¸2ìþßqUÇœC…*K©He)—ÆÇÀø¼„ñ1¯óÊj+KÃÕµåáÚ¸køÄæ't¨NèßP‡ê†:ä't¨N‰Q5^!4pcM76”o(­0!&žðH¡;¥qwJ‡%¦´61¥ÃÀªZ°jXªZ¯`†UG+K™Z÷Sv’…µ
+Ÿ¸a0õµ°kF4Ðvrƒú¨õ©õuvtÂÖi^G×/ãi'ªLy¬²´†«­Œvïѳ;”= ôC€Ò†2e2”)Pö„2Ê4(Ó¡Ì€2Ê”Y‰2ðS?pS7pS7pS7pS7pS7pS75‹É+‹UW21÷3Ñ–6§v`§v`§v`§v`§v`§vZˆæaÖÖc¦ƒ½é€Ø逝Ø逝Ø逝Ø逝Ø逝Øé`w:ø;üø€Ÿø€Ÿø€Ÿø€Ÿø€Ÿø€Ÿø€Ÿø™€Ÿ	ø™€Ÿ	ø™€Ÿ	ø™€Ÿ	ø™€Ÿ	ø™€Ÿ	ø™€Ÿ	ø™€Ÿ	ø!À~ðC€üPíŸØõ¥^­€ô ‡ =è!@zг =г =г =¬Ïë³Àú,ÀÏJÅiîI’ØäáU.-”(ÑÄY—WS®)KÔcõuOŠ¿{w({@é‡2 ¥
+eÊd(S ì	e*”iP¦C™e&”!(Þð÷ ü€ßð{ ~Àïø= ¿GŠTÐð¬®ið =@“ IФhÒ4éšøA?hâMü ‰4ñƒ&~ÐÄžðƒ'üà	?àûßø~À÷¾ð€ ü à ? øÀ$óÎi^©©
+ @ €P  
+@ ( lPÀlPÀlPÀlp€
+°ß|ðmÀ·ß|ðmÀ~ðƒ€ü à?øAÀ~ðƒ€ü à?øAÀOüdÀOüdÀOüdÀOüdÀOüdÀOüdÀOüdÀOüdÀOüÀOüÀOüÀOüÀOüÀOüÀOüÀOüÀ‡0Àa€ ?„~üø!ðCà‡0Àa€ ?„~üø!ðCà‡0Àa€?ð!ðC8à‡pÀá€Â?„~üø!ðC8à‡pÀá€?ðÓ ?
+ð!$ðCHà‡À!B?„~	üø!$ðCHà‡À!?
+ðÓ ?ð!,ðCXà‡°ÀaÂ?„~üø!,ðCXà‡°ÀaÂ?„~üø!,ðCXà‡°ÀaÂ?„~üø!ðCà‡0Àa€ ?„~üø!ðCà‡0Àa€ ?кhÝ´îZ÷­ûÖý@ëþȁ¼Èb÷±ûÈý@ä~ r?µ?+E(­Ork{œàQª[óÞºû/!hÐbC„2Ê({Êe±ØïûŒJƒ2Ê(3¡A™ðA è4 t :
+ €N@§ Ó@ТGO(S¡| Ñ h H4 $ 
+ ‰€D~¿ä”÷«7
+˜4 L &
+ “€IÀ¤`Ò 0i ˜4 L &
+ “€IÀ¤`Ò 0i ˜4 L ~ ðH@¤ Ò i ˆ4 D "
+ ‘€H@¤ Ò i ˆ4 D "
+ ‘€H@¤ Ò i ˆ4 D "
+ ‘€@@  Ð e ˆ2 „ B !€@ˆ Ä b ˆ( D ¢	 Ñ€h@4”UÆjäâh¤:R­ñžpZyUYØ«
+áÊX<R‰†¥PUMÔIM½f>‡÷Ù1¨IyQ7±N<kÐçUDJô¨Óý$,ÆâÓ#ñ0Ó?ìŠ	ÅF<z´óŠrð˜Â2§F»€Ì pUU˜Í	WŒ+“ƒkÉÜZrd”
+È!Q*¿,ÆDK+ÂTa¸–m¨!eQ*Ãù;¤&*e7ÐD…uÏ8|ÂR¤¡Ù‘:³£uf[µ'M卧ǹF•ºF1Å‘òx˜Yô4×$÷eÜ3ÉÆLðL*÷LJø =ƒ¬¬%§D¹XÂ.ªº,ÆÖ¸Fõ`¼‚Š;¶>UåØUäüu™˜ëp©¡¯ÕSÔ”b
+g«¶álÅNÌVBÌf¼kÈ iÓvÖW÷Ö3äƒÈ @>€|0 Ä â q€8@ Ž G ˆ# Ä â q€8 # ‘€H@$Ȑ #@F ¢	@F€Œ0 a 2 d„,ÀÏü,ÀÏü,ÀÏü¬¾
+9 
+9 
+9 
+9 
+ÔeuÙ@]6P—
+9 
+9 
+¤eiÙ@Z6–
+¤eiÙ@Z6–
+¤eiÙ@Z6–
+¤eiÙ@Z6–
+¤eiÙ@Z6–
+¤eiÙ@Z6–
+™Ÿ
+™Ÿ
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+‰Ÿ
+¼eoÙÀ[6$~6$~6$~6ð™
+|fCâgCâgCâgÏÙÀs6ðœ
+<gÏÙÀs6ðœ
+‰Ÿ
+‰Ÿ
+‰Ÿ
+‰Ÿ
+‰Ÿ
+‰Ÿ
+‰Ÿ
+‰Ÿ
+‰Ÿ
+‰Ÿ
+‰Ÿ
+‰Ÿ
+‰Ÿ
+‰Ÿ
+‰Ÿ
+‰Ÿ
+‰Ÿ
+|kßڐøِøِøِøÙÀÇ6ð±
+|lېøِøِøِøِøِøِøِøِøِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðِðÙplÃ=°
+	 
+	 
+	 
+	 
+	 
+	 
+	 
+	 
+	 
+	 
+	 
+œoChChChïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oï÷ƒÀûAàý ð~x?¼Þï÷ƒÀûAàý ð~x?¼Þï÷ƒÀûAàý ð~ø0|Ôµƒ^À‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ð_ø/üþÿÿ‚ÀAའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼ÞïáÂ3¼ÞÂy„ó<çyÎó œçA8σpžá<Ây„ó<˜^'ìó<çyÎó œçA8σpžá<Ây„ó;çwÎß œ¿A8ƒpþáü
+Âù„ó7˜Y7ôýí{˜\Åy滧¦GsÓhf˜ábtA`!dciêë>§ª›9ݧ
+Ž|Á»ÄŒ4#iâ‘FÌÅØ‹‰ˆ³€‰I ±-bDZYlj±!Äv– ³vÂÚñâ\œ<Éîfs1^’‚I‚7ŽMª»~-ûlþÙÛóŒú‘¾îžêóÖ9]ç}ë¼Gõü›À¿	ü›À¿	ü›À¿	ü›À¿	ü›À¿	ü›À¿	ü›À¿	ü›À¿	ü›À¿	¼šÀ«	¼šÀ«	¼šÂO)×)×)×)×)×)×)×)×)×)×)×)×)×)×)×)×)×)×)×)ü—Â)ü—Â)ü—Â)ü—Â)ü—Â)¼–Âk)¼–Âk)¼–Âk)¼–Âk)¼–Âki­»]ö^Káµ^Káµ^Káµ^Káµ^KáµK™Ÿ§ðT
+O¥ðT
+O¥ðT
+O¥ðT
+O¥ðTšv·K¿á©žJá©žJá¡žIᙞIᙞIᙞIᙞIᙞIᙞIᙞI™§ÌSæÃ)óß”ùkÊ|5ežš2/M™o¦ðN
+¯¤ðF
+/¤Ì×Ræi)ç}Êù”r>¥œO)çSÚ=Ÿ|·=Ûcž’2OI™§xÊÀSž2ð”aÞi˜wúgà-üÓ4»Û˨
+j“šS5÷¼gà=ïxÏ°ÿÞ3ðž÷¼gà=ïxÏÀ{Þ3ðž÷¼gà=ïxÏÀ{Þ3ðža~i˜_æ—†ù¥a~iøÞß›á{3|o†ïÍð½¾'Óýž˜O:æEŽñë¿Žq많ëA‡:®û×qŽq븎s\Ç9®ß×oŽë7Çõ›«w·ã¨ô‡qï¸ns\·9®××iŽë2Çu™ãzÌq=æ8?úíÐo‡~;ôۡߎóÈ¡ßývè·C¿ºíÐm‡n;Æ¿cü;Æ¿cü;Æ¿cÜ;Æ»c¼;Æ»c¼;Æ»c¼;Æ·c|;Æ·c|;Æ·c|;Æ·c|;Æ·c|;Ƴ‹ãYOÅëæP5U¨UjšPSª¡ZjšQÔ&µ‹ç¨>Öø
+ðà7Ào€ß ¿~üø
+ðà7Ào€ß ¿~ü&øMð›à7Áo‚ß?§}Nûœö9ísÚçÝöô7§¿9ýÍéoNsú›Óßî÷“Óßœþ:ðø|¾߁ïÀwà;ðø|¾߁ïÀwà{ð=ø|¾߃ïÁ÷à{ð=ø|~¼ÎÕø×ÿZã_kük­ñ¯5þµÆ·ÖøÖßZã[k|ko­ñ­5¾µÆ·ÖøÖßZã[k|ko­ñ­5¾µÆ·ÖøÖßZãWküj_­ñ«5~µÆ¯ÖøÕ¿ZãWküj_­ñ«5~µÆ¯ÖøÕ¿ZãWküj_­ñ«5~µÆ¯ÖøÕ¿ZãWk|jO­ñ©5>µÆ§ÖøÔŸZãSk|jO­ñ©5>µÆ§ÖøÔŸZãSk|jO­ñ©5>µÆŸÖøÓZãOküi?­ñ§5¾´Æ—ÖøÒ_ZãKk|i/­ñ¥5¾´Æ—ÖøÒ_ZãKk|i/­ñ¥5¾´Æ—ÖøÒ_ZãKk|i/­ñ¥5¾´Æ—ÖøÒ_ZãKk|i/­ñ¥5¾´Æ—ÖøÒ_ZãKk|i/­ñ¥5¾´Æ—ÖøÒ_ZãKk|i/­ñ¥5¾´Æ—ÖøÒ¡‚oÁ·à[ð-ø|¾ß‚_¿~ü:øuðëà×Á¯ƒ_¿~ü:øuðëà×Á¯ƒÎâOküi?­ñ§5þ´ÆŸÖøÓZãOküi?­ñ§5þ´ÆŸÖøÓZãOküi?­ñ§5þ´ÆŸÖøÓZãOküi?­ñ§5þ´ÆÖøÑ?ZãGküh­ñ£5~´ÆÖøÑ?ZãGküh­ñ£5~´ÆÖøÑ?ZãGküh­ñ£5~´ÆÖøÑ?ZãGküh­ñ£5~´ÆÖøÑ?ZãGküh­ñ£5~´ÆÖøÑ?ZãCk|h­ñ¡5>´Æ‡ÖøÐZãCk|h­ñ¡5>´Æ‡ÖøÐZ׺úìÁ÷àGZãCk|h­ñ¡5>´Æ‡ÖøÐZã#k|d¬ñ‘Cåóèp‚'ºûyK­S3jƒÚ¤æTG¥ÿèq‚'èq‚'èq‚'èq‚'èq‚'èq‚'èq‚'èq‚'è1~¹Æ/×øå¿\ã—kür_®ñË5~¹Æ/×øå¿\ã—kürO®ñÉ5>¹Æ'×øäŸ\ã“k|rO®ñÉ5>¹Æ'×øäŸ\ã“k|rO®ñÇ5þ¸Æ×øã<TpÑeür_®ñË5~¹Æ/×øå¿\'è2¾¹Æ7×øæß\ã›k|so®ñÍ5¾¹Æ7×øÝ¿[ãwkünß­ñ»5~·ÆïÖøÝ¿[ãwkünß­ñ»5~·ÆïÖøÝ¿[ãk‡ÊöÑ˽LÐ˽LÐ˽LÐ˽LÐ˽LÐ˝KйKйKй$ë~Žã‚Î%è\‚Î%è\‚Î%è\‚Î%辴ƇÖøžßSãjü@2/J™¥Ì‹RæEø…¡&T¶ÇñÇÔø€Pãj|@¨ñCµÔ:5£6¨MjN¥ß|?)ß~¢ÆO|¾üÅPÁg>ƒß*øÌgRæ3)ó™>Ïáó>Ïáó>Ïáó>Ïáó<ÞWµNͨ
+j'§:jÜÏ=Èу=Èу=ÈсÈсÈсÈсÈсÈсÈсÈáýÞÏáýÞÏáýÞÏáýÞÏáý¾Ïáû¾Ïáû¾Ïáû¾Ïáû¾Ïáû¾Ïáû¾Ïáû¼ÚÅe?áýÞÏáýÞÏáýÞÏ9ŸrΧÞÏáýÞÏáýÞÏáýÞÏáýÞϹËáÿþÏáÿþÏáÿþÏáÿþÏáÿþÏáýÞÏáýÞÏáýÞÏáýÞÏáýÞÏáýÞÏáýÞÏá÷~ÏáóÈ9¿òîùÅõBÎõBÎõBæðhæðhæðhæðhæðhæðhæðhæðhÎõBÎõBÎõBÎõBÎõBÎõBÎõBÎõBÎõBÎõBÎõBÎõBÎõBÎõBŽ/—ãËå\ä\ä\ä\ä\ä\8xÊÁSžr𔃧<åà)O9xÊMu·—QÔ&5§:j쯃§<åà)O9xÊ1ou𕃯|åà+_9øÊÁW¾r𕃯|åà+_9øÊ1ouÌ[üåà/9øËÁ_þr𗃿ü嘷:xÌÁcsð˜ƒÇ<æà19xÌÁcsð˜ƒÇ<æà1îgh9xÌÁcsð˜ƒÇ<æà19xÌÁcsð˜ƒÇ<æà19xÌÁcsð˜ƒÇ<æà19xÌÁcsÌc|æà3Ÿ9øÌÁg>sð™ƒÏ|æà3Ÿ9øÌÁg>søKÉá/9æQŽy”cå˜G9æQŽy”cå˜G9æQ¾tð¥c>ì˜;øÓ1v̇óag|ß[:+wúnŒå-q½ü2ð–î_¸±û,~Žù÷»4÷»BŸù˜c>昏q,Tð™9æcŽù˜c>昏qßLsßLsßLsß,Tð™qÿLsÿL;ô€ûdšûdšûd¡²}ôÀ¡Ü7•í£ÜGÓÜG•ýC¸Ÿ¦¹Ÿ¦¹Ÿ¦¹Ÿ¦¹Ÿ¦¹Ÿ¦¹Ÿ¦¹Ÿ¦¹Ÿ¦¹Ÿ¦¹Ÿ¦¹Ÿ*øè÷Õ4÷ÕB=à>›æ>›æ>›æ>›æ>[¨à£½à¾›v]½ÀO⾛澛æ¾[¨àã'qNsNsNsNsNsNsNsNsNs.Tðñ“¸/§»÷å×1?Éá'9®k~’ÃOrøI?Éá'9ü$‡Ÿäð“~’㾏ÃWrøJ_Éá+9|%çußµñD{w§ð.è¸JWÉá*9\%‡«äQkZ{ÔÚ£Öµö¨µG­=jíQk?ÕÝ^FmP›Ôœê¨qo<jíQkZ{ÔÚ£Öµö¨³G=êìQg:{ÔÙ£Æ5ö¨±G=jìQc{ÔØ£Æ5ö¨±G=j쥋Çþ¡Æ5ö¨±G=jìQc{ÔØ£Æ5ö¨±G=jìQc{ÔØ£Æ5ö¨±G=jìQc{Ô×£¾õõ¨¯G}=êëQ[ÚzÔÖ£¶µõ¨­Gm=jëQYºú¤»]úšzÔÔ£¦5õ¨©GM=jêQSšzÔÔ£¦5õ¨©GM=jêQSšzÔÔ£¦5õ¨©GM=jêQSšzÔÔ£¦5õ¨©GM=n†ÇÍð¸7Ããfx®b<êéQOzzÔÓ£žõô¨§·]<öõô¨§G==êéQOzzÔÓ£žõô¨§G==êéQOÏÕ–çjËsµå¹Úò¨«G]=êêQWºzÔÕ£®uõ¨«G]=êêQWºzÔÕ£®uõ¨«G]=êêQWºzTÕ£ªUõ¨ªGU=ªêQUªzTÕ£ªUõ¨ªGU=ªêQUšzÔÔ£¦5õ¨©GM=jêQSšzÔÔ£¦5õ¨©GM=êéQOzzÔÓ£žõô¨¦G5=ªéQMjzTÓ£šÕô¨¦G5=ªéQMjzTÓ£šÕô¨¦G5=ªé¹ûâ¹ûâÑI>zôÑ£¾«ÜuñÜuñÜuñÜuññ®‹LE
+US…Z¥Ö¨	5¥ª¥Ö©µAmRsj×ǪÁ×zpïü¾Õ¥¹Ù™åý¼¤N×w~3ùòžÅðãÝëoX]lÿîøw†·æfiÃæ¤:²x°õ6wpan&|hdåÆÅÂKZÑy¡³Bg…Î
+:+l½ªûÌì‡ÍíY<v•CT¥¿UQ”*‡¨Ú˜{מ…™axœ*8Upj”_J/¥Æ—R©R
+¤H5¾ŒûWcÿjì_
+ܸ5pppppö4???????????????e{)ÛKÙ^ÊöR¶—²=ÃöÛ3ôßÐCÿ
+ý7ôßОπgÀ3àð,x<Kÿ-ý·à[ð-ø|¾ß‚oÁ·à[ð-øupëàÖÁ­ƒ[7›Z¿gqañàpŽ¬Ì,½›w¥wa~i†t-KûÍ-‡V¼¤g=˲ÞÙŃûzÝêÒ"ïЧŒ>e“}kз}kз}k œÓ>§}Î1Ê9F9Ç"çXDb
+‘é©îk¡V©5jBM©†j©ujƒÚ¤æTGû§õTÿå{—fÞ±²ºÄ k€5ÀÐ™Ö k3tãÜ|à°•¥™åeÞ<^„Úèã÷o<>´4·¼giþPûW¶ó&]p„=z ô Ô®èТ†5´¨%˜[^™?0³íjˆQWA®‚\åTéAµV™Y˜;´ŸWàC‚ÔUð«àWÁ¯‚]jèRC—ºÔÐ¥†.5t©kì?´©¡M
+mjhSC›ºÔ5×ß>QöÏ/Íé<á‹‚5¨a@
+jP'Ù@ØÄÜü¾ý+û‡Wö/Íñ|yhïü;»Ï‡—ƒ–äŸc×`D
+#jQÈ:e×Rú“ÒŸ”þ¤ô'¥?0¨†A5ªaP
+ƒjTàÕ|>ŒªaT
+£jUèFÕ0ª†Q5ŒªaT
+£j•0J!ŒR£Â(C­
+Ì,--Þ¸0·we]çÙê¡ÁN]jÎøÃÙÅÆg»Ã—8@³YΞ:]®Óå:]®Óå:]®Óå:]®Óå:]®ÓåŒ.gt9£Ë]Î8d0-Y’¡šá“=Û½<Ç›t"£È謫a]
+ëjX—PI!TR•µ6²' ÍÏì©À.‹}ip,‹ÝhЍÝhЍÝhЍÝhҍ&Ýhҍ&Ýhr,š‹&øMð›à7Áo‚ß¿	~ü&øMe˜iµGÆ`÷Åê¡õݧñq²U{ˆœ|Ñ%q;9ýB„Èœ2'…ÌI!sRÈœ2'…ÌI!sRÈœ2'EwÅËq\ÇÅq\ø|¾߁ïÀwà;ðø|¾߃ïÁ÷à{ð=ø|¾߃ïÁ÷à{ð=ø\m„ËŽPÛ÷™83÷¡¹wÍ/‡	úÊüÉ÷jýs­¼;L?ú÷-µód®¬›[˜;ЭÙ@v³þåÕ=9gºo4©95b“-)dI
+Y’B–d¨éðLèÇÒüò;‚ÂíçMK­SÔfÐáÅC‹KmžYOö·ãyg*3÷-ij—ðH!<RÂ#…ðÈPÓÁ…Å}ó{fÚ¹Ì<]\ž?¸Ò¾ÆÙÓ©„–>á‘Bx¤)„G
+á‘Bx¤ju`e8á÷†)Þ¡H² ɤG
+é‘Bz¤´Ó#—çÌ/Ì,ñš ɤG
+é‘Bz¤)¤G†ZPû–VO~ˆ2ù‘Bn¤)äF
+¹‘Bn¤)äF
+¹‘Bn¤)äF
+¹‘Bn¤)äF
+¹‘Bn¤)äF
+¹‘Bn¤ªš»auþažspGµ&3RȈ2"…ŒH!#RȈ2"…ŒH!#RȈ2"…ŒH!#RȈ2"…ŒH!#RȈ2"…ŒH!#RȈ2"…ŒH!#RȈ2"…ŒÈPuçlcu5(×ÊH÷EûŸ¹•pÊÆÐ:Cpaî]´î¾ˆ­iCϸ"=RHÒ#…ôH!=RHÒ#…ôH!=RHµ6ØNÈsÒ…ÕeÞJGâ[VVæ-¼›·é	Ór$…I!GRÈ‘r$…I!GRÈ‘r$…ÉPkëÃŽšk²¯ž<¯˜&)¤I
+i’Bš¤&)¤I
+i’Bš¤&)¤G
+é‘Bz¤)¤G
+é‘Bz¤)¤G
+é‘Bz¤)¤G
+é‘Bz¤)¤G
+é‘ÒNœ]\9ų?)’BŠ¤")¤H
+)’BŠ¤)¤@†ÊçfA˜a„Yòîçé7ÂLj¤)¤F
+©‘Bjd¨7„™ÔH!5RH|„™I!ERH‘|„YfA˜I™|„YfA˜a„YfA˜a„Yf‰ÿù:ÇUWö/®2­r
+Mj¥Z)¤V
+©•¡ZjšQÔ&5§:ª_¿4÷Nt/°E|7ÞZR(…J!uRHR'CõƒmÁ3†…•C'Ÿîfkh.1“B̤3)ÄL
+±’B¬dDö.%æPˆ9b
+ƒ`²¼–*üP…ªðC~¨ÂUø¡
+?Tá‡*üPår¡ÊåBf¨ÂU˜¡
+3Ta†*ÌP…ª0Cf¨6»•~0«Œl–‘	ËÈ„åGÂò#aù‘°üHX~$,?–	ˏ„åG¡Öû¯özjªë<'Sºý†.¼Q¥Ö¨	5¥ª¥Ö©µ68UÜ`NuTßnP=Õ€‘ÆRP«íRh@ðnmÚ
+j…ôã&ѝ>ØBúÀ`eµ€°Z at X- ¬µÓ…ú©
+0nY. ,–Ë„å¡vz6@˜,²^@X/ ¬Ö„Úé9µæŠ,„‚P;=H
+ LIØV+„•ÂÊa倰r at X9 ¬V+„•ÂÊa倰r at X9j{Ô:ã <‘OÝ}"<©Ö»mºïH·$ÝÆS<©uWm·ÍÉ'¦û$í¶9ù¤û£ZBŸínYº]­lÜÝr­ÛŸZ·?µî–kݏ''wðäv
+#˜9&±<B,Ë#Äò±<B,°LAX¦ ,S–)Ë„e
+Â2a™‚°LAX¦ ,SÎ2…C»÷¼#¾Æb™‚´—)Ì,þ|<õÄšJñ§ 3l/bXØ[ü9èÌ#Û‹–VâÏV–÷ÏÌÎU:ÿ®›}G¬Vp=K„%¡²ïÌæŽ	sÇmHІmHІ¤îöÎ/,ÌÍî^|WßkàëlāµÂZa-„°BX!¬…µÞ÷ZmÃ	Õ)Iû^[{óKáÒ’ô u`1„b$í£•¶[´zˆ×t€y$!FBˆ‘b$„I;Ĩóù%ðÂ<²óŽ#!ÄH1BŒ„#!ÄHÚ!FÏ/ìå5øÌ#	5
+üf½/NîyɁg™4]çÀ`W…$D!	QHB’…$D!	QH¡šùƒïܽŽíJûY’™(qHB’‡$,;␄8$aŠ‡$Ä!	qH¡&ƒábë`å-vžÉ(‰HB"R¨tÉhÂd4a2š0%9IHN’“„ä$!9)T“Ñ„ÉhÂd4a2š0M˜Œ&LF&£	“Ñ„Éh
+5¥ÜÒI¹¥“2AH™ ¤LR&)„”	BÊ!e‚2%ñ)Ôœê¨àã¥LR¦)RŠƒDbT¨àk𙸦LR&$K…
+>sƒ”¹‰S’27 yJHž’§„ä)!yJHž’§„ä)!yJHž’§„ä)!yJHž’§„ä)!yJHž’§„ä)!yJHž’§„ä©PëËææöÎ왧ÅÉjyõ MèSƒ´êûöΘáäIkº·ðx¦T	µ„…ZB@•P%T	UB@•P%T	UB@•P%T	UB@•P*ø8I)NRŠ“D€U¨àã$¥8I)NRšøÊò¡®ÆsªôîYXÝÍ‹ZeÿÜL ÓÙù™Ýÿˆ@•pj}èÀê2×Ts#…çÝÿ@Ø•v%,n·	‹Û„ÅmÂâ6aq›°¸MXÜ&,n•® þ„e	aYBX––%„e	aYBX–°HNX$',’É	‹ä„ErÂ"9a‘œ°HNX$',’É	‹ä„ErÂ"9a‘œ°HNX$',’É	‹ä„ErÂ"9a‘œ°HNX$',’É	‹ä$å*ð®PÁAè	ó
+„>EèS„ž¯PÁá*0ͺ8ì':O˜¤è|Êý¢¿È@½fªûºJ­QSª¡ZjÚ¤æTG¸Š5P¬b
+k XÅ(Ö@±Š5P¬b
+k XÅ(Ö@±Š5P¬b
+k XÅ(Ö@±j5P«Z
+Ôj Vµ¨Õ@­j5P«Z
+Ôj Vµ¨Õ@­†k.Ã5—ᖹᖹW
+¼j¸ä2\r.¹—\n5p«[
+ÜjàV·¸ÕÀ­n5pªK
+\jàR—8ÓÀ•®4p¥+
+\iàJWØÑàF܃ap#n„"
+ipÞ
+λÁy7ð¢MÚÅcàE/xÑÀ‹^4ð¢
+¼hàE/xÑÀ‹^4ð¢
+¼hàE/xÑÀ‹^4ð¢
+¼hàE/xÑÀ‹^4ð¢
+¼hàE/xÑÀ‹^4ðŸÿügà?ÿ®€W@wÌÀ‹^4ð¢
+¼hàE/xÑÀ‹^4ð¢
+¼hàE/xÑÀ‡¦Ë‡\÷®{×=†ëÃuáºÇàŸüsƒnðÏ
+×=†ë …?!ä/T¶ÇTÞ0•'üO÷Âý„p?!ÜO÷ÂýBeûLÕ	ûÂþ„°¿P»Û§¿LÕ
+SuÃTÝ2U·è…E/,zaÑËTݢݰè†E7,SuËTÝ¢#±èˆEG,:bÑ‹ŽXtÄ¢#±èˆEG,:bÑ‹ŽXtÄ¢#±èˆEG,:bÑ‹ŽXtÄ¢#±èˆEG,Su‹žXôÄ¢'=±è‰EO,zbÑ‹žXôÄ¢'=±è‰EO,zbÑ‹žXôÄ¢'=±è‰EO,zbÑ‹žXôÄ¢'=±è‰EO,zbÑ‹žXôÄ¢'–¹ºEW,su‹¾XôÅ¢/}±ÌÕ-suË\Ý¢;–¹ºE,úcÑ‹þXôÇ¢?ý±ü?-‹;nÑ#‹YôÈ¢G=²è‘E,zdÑ#‹YôÈ¢G=²è‘E,zdÑ#‹YôÈ¢G=²è‘E,zdÑ#‹YôÈ¢G=²è‘E,zdÑ#‹YôÈ¢G=²è‘E,zdÑ#‹YôÈ¢G=²è‘E,zdÑ#‹YôÈ¢G–yºežn™§[tÊ¢S²è”E§,:eÑ)‹NYtÊ¢S²è”E§,:eÑ)‹NYtÊ¢S²è”E§,:eÑ)‹NYæï½²è•E¯,zeÑ+‹^YôÊ¢W½²è•E¯,zeÑ+‹^Y|:‹Ogñé,>å~¯å?zY|:‹Ogñé,>å¾¯å¾¯å¾¯Å°³v–»W–»WÇÎâØY;‹cgqì,ŽÅ±³Ü7¶Ü7¶Ü7¶¸u·ÎâÖYÜ:‹[gqë,ºmqë,nÅ­³¸u–»k}·è»Eß-únÑw‹¾[¬:‹Ug±ê,VEÿ-úoÑ‹þ[ôߢÿý·è¿Eÿ-úoÑ‹þ[ôߢÿý·è=¯£çuô»Ž~×ч:úP‡êðBï³Î÷Yçû¬ó}Öù>ë|Ÿu¾Ï:ßgãT§ßuú1/ɘ—dÌK2æó‰ŒùDÆ|"c>‘1ŸÈ˜OdÌ'2æó‰ŒùDÆ|"c>‘1ŸÈ˜OdÌ'2æúÁ«¼šÁ«¼šÁ«¼šqü2Ž_¯fðj¯fðj¯fðj¯fðj¯fðj¯fðj¯fðj¯fðj¯fðj¯fðj¯fðj¯fðj¯fðj¯fðjßeð]ßeð]ßeð]ßeð]ßeð]ßeð]ßeŒÿŒqÔ`ü4?
+ÆOƒymƒymƒymƒó ÁyÐ`^Û`^Û˜ên·AmRsª£Æýl0ŒÃã°Á8l0ŒÃã°Á8l0ŒÃã°Á|µÁ|µÁ|µÁ|µÉ|¦É|¦É|¦™v^£&Ô”j¨–Z§fÔ5îw“yI“yI“yI“y	áFB¸‘n$„	áFB¸‘n$„	áFB¸‘n$„	áFB¸‘n$„	áFB¸‘n$„	áFB¸‘n$„	áFB¸‘n$„	áFB¸‘n$„	áFB¸‘n$„	áFB¸‘n$„	áFB¸‘n$„…
+>óZBŽ„#!äH9BŽ„#!äH9
+µó¹Zç¡jªP«Ô5¡¦TCµÔ:5£6¨MjNuTðsðsðsðsðsðsðsðsðsðsðsðsðsðsðsðsðø|¾߁ïÀwà;ðø|¾߁ïÀwà;ð=ø|¾߃ïÁ÷à{ð=ø|¾߃ïÁ÷àÇù€çx–•z‰<èùíê>ß»‡_=|êáSŸzøÔÃw¾óð‡ï<|jNuÔˆßyøÎÃw¾•í
+Û¶+l7^Ÿ‡Z§fÔµI_Àð«àWÁ¯‚_¿
+~ü*øUp«àVÁ­‚[·
+^
+œ85¶_cû5¶[c¿jl¿Æökl¿Æökl¿Æ~Õº8ìWÂ~$à$à$ìG^^^^^^^^㦑²)û—‚Ÿ‚Ÿ‚Ÿ‚Ÿ‚Ÿ‚Ÿ‚Ÿ‚Ÿ‚Ÿ‚Ÿ‚Ÿ‚Ÿ‚Ÿ‚oÀ7àð
+ø|¾߀oÀ7àð
+ø|¾߀oÁ·à[>où¼åó–Ï[>où|Ï×ù|þ×éþ×éÏ×ù|N¿spûãx߃ïÁ÷|^ dͲæ	Yó„¬yBÖ<!kž5OÈš'dͲæ	Yó„¬yBÖ<!kž5OÈš'äÌræ	9ó„œyB¨<!Tž*O•'„Ê>å	Ÿò„Oy§<áSžð)Oø”'|Ê>*ýâ{å—ªx~©J¨àZp-ÇÅ‚oÁ·à[ð„Oy§<áSžð)Oø”'|Ê>å	Ÿò„Oy§<áSžð)Oø”'|Ê>å	Ÿò„Oy~y‹ç—·x~y‹ç—·x©<áTžp*O8•'œÊNå	§ò„Sy©<áTžp*O8•'œÊNå	§ò„Sy©<áTžp*O8•'œÊNå	§ò„Sy©<áTžp*O8•'œÊNå	§ò„Sy©<áTžp*O8•'œÊNå	§ò„Sy©<áTžp*O8•'œÊNå	§ò„Sy©<áTžp*O8•'œÊNå	§ò„Sy©<áTžp*O8•'œÊNå	§ò„Sy©<áTžp*O8•'œÊNå	§ò„Sy©<áTžp*O8•'œÊNå	§ò„Sy©B߃ïÁ÷à{ð=ø|¾߃ïÁ‡<HL‡'¦ÃÓá‰é5ï[mG»NÅ¢c‘Xª±ÔbIbIc1±ØXê±d±4biÆ‚‹ÅwŠŽx:â鈧#žŽx:â鈧#žŽx:â鈧#žŽx:â鈧#žD<‰xñ$âIÄ“ˆ'O"žD<‰xñ$âIÄ“ˆ'O"^5âU#^5âU#^5âU#^5âU#^5âU#^5âU#^5âU#^5âU#^-âÕ"^-âÕ"^-âÕ"^-âÕ"^-âÕ"^-âÕ"^-âÕ"^-âÕ"^ñ’ˆ—D¼$â%/‰xI/‰;–ÄKâ%q’¸GIÜ£$îJw%‰»’Ä]Iâ®$q’ØÝ$v7‰ÝMbw“ët7‰ÝMb?“ØÏ$ö3‰ýLègbb‰ÝMbw“”D $%(‰@IJ#P;ŸF¼4â¥/xiÄK#^ñÒˆ—F¼4âeq›YÜf·™Åmfq›YÜf·™Åmfq›YÜf·™±Í¸Y܇,îC÷¡ñ¯ñ¯ñ¯ñ¯ñ¯ñ¯ñ¯ñ¯ñš¯ñš¯ñš¯ñš¯ñš¯ñš¯ñš¯ñš/xyÄË#^ÞÁ3NbáU-–$–4‹¥KKc`váu+{f–öç¤xV²v¾gåšù…Ù¹Êeí$ÂÁæüÒžÕíÕˆ•f»ípàâ©À†;÷Ì,ÏUíÈ¡|qefÏž¹ƒ+ï]=¸ofiõÀÂÌêÊP¾¸º{a®:8³4³{~ÏÛgÛëË;O%<_¶_Œ_¼}f¤Øðí3ݦµÎçÚ½HS·sïüÁ™“/æίœ|q`nv>¾Èt¡YxqªYxqªYê‹[óÅ­ùB³FVøIxÑþÉ}[š?¸/þÀ4/N}$¼8µ1“›åÅfy¡™-î-î-b3)6“b³¤Ø,)6KŠ;Z<âñhÄãÑý‚öÍì}ûuîྜྷ3+Úm$µ;õ0·¼_×óîë¡Îš²áoçµökž›Âûí6ºð|ªÐ^žw߯þÀg›…÷»Ûo¶1
+ïw·#?ð|ªð¼ÊóôžëÂó©Âózá³Ý纍;¸{i¦³Ì`q¥rEû`ÅZßÈé«qÞy±sañà¾å•™¥îA/~kâ·Ö(~kÍâ9Ñ,žÍâ9QC¥²pªyk¿¨»óÀâÁÅ}K3‡öóNýÔ;æÛûçÞQüŠÛ™1?ðº^|ÝN¹þþ×ÍF÷µšÝ³X¹¼Ý•K±sw —ÎqKÝþõ¹…çñ;
+ïµ_Þw…çž6®Ð¦VhÓ~î;{mšÙ©ãÕ~qòµ_œ<x&ôµÐ¬QlÖ(6k›5‹ÍšÅfy±Y^l–›¹b3WlæŠÍ|±™/6+œµ&Ÿ*4/N5/
+Ít±™.6ÓÅfRl&ÅfRlV-6«›U‹ÍjÅfµb³Z±YRl–›%Åfi±YZl–›™b3SlfŠÍl±™-6³Åfõb³z±Y½Ø¬8ÞòâxË‹ã-/Ž·¼8ÞòâxË‹ã-/Ž·¼8ÞòâxË‹ã-/Ž·¼8ÞòâxË‹ã-/Ž·¼8ÞòâxsÅñæŠãÍÇ›+Ž7Wo®8Þ\q¼¹âxsÅñæŠãÍÇ›+Ž7Wo®8Þ\q¼¹âxsÅñæŠãÍÇ›+Ž7Wo®8Þ\q¼¹8ÞÞæ3»ßÙá¾öb“6%ò\žKáyµð¼Vxžž§…çæ$ã׌Û9;?³'ò»ÍvînÏæÚ|Ì;Sït>ì´Ý¹šèRéhÏ-Ó/}¯¥NL¨ܦ¾+ꎨÿ9¢¾ÓRÏ·ÔßoS7¢þöˆzn›úöOd•o·Ô³GÔßQÇO¨¿>¡þGKýÕEê/ê™–úõôÕ•oQO‡†O_­¾ù»*ß<¡þb—úó–ú³–úSQÿmBýÉõ_[ê¿Œ«ÿ|³úãGÕµÔ†æx³úƒ§.«üÁÍê©ËÔïÿÞÙ•ßo©ß;[}£¥~·¥~§¥~»¥~ëˆúú“›+_o©'7«ÿ$êk-õ•[Ç*_Ù¨þãéꉖú–úõ–úrK}©¥þCK=ÞR_l©ÇZêÑ–zdL»m[åXKý£•£-õ…‡¯«|áQõ…[zþµm•‡¯›~I=<ÝûkÛÔC-õ«GÔç[ês-õÙ–ú•–zpVýòˆzàþm•fÕýŸ¯Ü¿M}f\}:túÓ'Ô}-õ©–ú¥–úÅqõÉ–ú…OŒT~AÔ'FÔ¿ŸU÷†&÷Qo©ýüpåc-õóÃê£?wV壳êç>2Zù¹³ÔGFÕ‡Õ϶Ô=GÖWîi©#ëՇ‡>tD}ð#•^ >0¢~æ„úé»­ütKÝ}×u•»UwßÒ{×Om«Üuºkº÷§¶©Ÿl©;ß¿³rgK½§ú‰°›?‘©;Þ7T¹cB½oHÝÞ¸}VÝŽÔmÛÔ­cêߵԏ¿w¬òã-õÞ1õc-uKKn©é—~ôæ›+?ÚR7߬Þ3«nºf²rÓ6õo[êÝ-õ®uã°zç Zm©•jù„Z:¡n8¡µÔbKl©…­ê-õ#cÊ\­æ[jÿÍj_x±·¥æZj¶¥ö´Ôî–š¹H]Bý𰺮¥þuK½­¥®}ë`åÚê­ƒê-§ŸUy‹¨7·Ô›ò›êšIuuy´rõ™êê
+WœVyCK]5¤þUK½þ‡F+¯o©U¯k©+ÃO®l©+.­\qšº|ÓúÊå£êµëÕe-å(wDå-ÕìyU¥yB5UÙ•jº¥.m©×¼z¼òš	õêK6T^=®.¹x}å’é—6¨‹×«‹ZªÞRÖLTì	eÒÑŠ™Pi2TIGU2¤j›Uu½=T‘–ÒCjj×Pej½Ú5¤v¾j ²sT½j@](ꕯØVyå¬zÅŽñÊ+¶©ãê‚íÛ*djû6uþ¶¡ÊùÔ¶!õò–:¯¥ÎÝ ¶†ýÜ:®Î™U[N¨Ía6ϪMëÕÆp7¶ÔÙ'ÔËê¬ð⬖:sVŽÔ-uzøÐég©É–šh©ÓZj<4o©±°¯c
+5z³Ú0«FZjýðé•õ-5ZŸ®†ZjpT
+´ThÖßRë&T߬ê
+?ì
+#`R…wUKõ„×=¯RåQUj©òÑòì­?Y~åÿJÿ·;ðÏþÙTê)íméÝ[ùdI•Ö•^6=Üû½Rß÷Êý•Ã=½¥]O<u\—FŸ:þÔñ©ÓƶŽmÛ:¶uooé…euößjY7òÝ¿[êÛ¶qÓKßì}UïM¥ÁÒ¶ÒcÓÛÏÚ2tÆÀHéÓgô;ç¶-l<vÞѱ;Ï.¡Î\?Ð?´EõO¸óG_8þõ§Ž‹ŒÕë:`=ýüÏýʳ£ÏŽÕÇêãõ©éƒS›¦6Om™:gjëÔ¹—nŸÞ4½yzËô9Ó[§Ï½jÓU›¯ÚrÕ9Wm½êÜ«¶Ú~ë¦Û7ß¾åösnßzë¹wo¿wûsÛ7w?ÚýP÷×o¾~Ëõç\¿õÐæC[shë-›oÙrË9·l=óºòuåsû&'N¯Júê²;/)ŸwîùI-­nMjçŸwnߺä5媜ÞóøŸ>ðc‹>vô襏½ï'_ü^¹çS÷\ÿð5s¿íïŸë©î½i÷ò?´ãu/þØgöÎ|ù_üÒøá÷ïÜù™íÛ_(…cõH8VŸì›(
+•6–ìôYêØð†cgNÞ¹áèÙ÷œU¿ìÌá¾þ—ùMáèˆ<Žÿ®ãO?ÿDûÀL=|ýæ[6ß»Y…~vº»Zn÷©46Úúº}ò¼±ªúÖ§~æg>ÕþûâO]ô¹›¾^z饯ßô¹‹ŽëÙõä3Ï<þö¼qv¦õXë»áñØÌì}¡7=¥B¿ÞžÆ~½ìXidâX¥ÿΑ£å{Ô½¥þžËÆƇ\»_χžì×ßׯ±*‡­gl´U¹ÓÅxôÔ'Ž½èsïyò¥ÒKO¾çs/~5ôð¾ûB/ÕÃ=?üÇ)çåþðÈgZ“t”~ck¢tvéÐôËK“åÛúßW™üt¹rl¸üè™ÇƏß¹ñìÉžþÉþÒ•=ãÜÆNŸÃjôéç?=ÆÔèóÏŽµÇÔŽK7Útï¦ßÝôܦʥ¥KË—ö\:yéÙ•×íêß5páàbi±¼Ø³8¹xöÀu7„ý™Üº9ÝÔL†}:§ÔÙ§ÒºåöXè=üÂç‡ë?òÕÝ{~÷­ç[_-ïxá/ÊëŽöüâû>rl¤ç‡ßöøWkµ_qaÙ–˧•›­?y➇üX©T.í
+á»áXŸVºvzce´<Üÿé¾òí¥{Fúì9m]iÝ@¥ý†¡×MŒ¾påg¯yë±0Z¦íµW~v¤óü¥/Ùk/yâ…Kžxb¼sê<-/}V‹©òÃÓ“WMÞ;©B×C'7•·Nn;/|'Õö0îùîg÷üPyWëÇ>ûÙ¿Ø7ñá«öï¹ë…]êw½þÑûC¿)•zgñ>­”†‘9PR#å¾ÛGÆŽ?6Xîé/½¾}îú‰öÈìÌKÚ`lüŒúÔC×OþÎdOûû?o,Íð¤:Ù9[zg¾ç=zàرƯ®~ù+=Ÿ|ñßô|ìã{ü“/ÞÞ{ýƒs³ßæ;^
+¸C¥3JWLŸÖwl¼tløèøgŒoxƒŸtgv¾ÒøuŽ>;5}Þ¥gÝTº©ïðºÃý‡ºiøðúÃ#‡7=<vÓø½g=wÖXálão{û)wnûßžå>pÿ‡>ðÀx®<Þzö¹¿m}»<¦þô™¯}홿üͯþÕG[¿Ù:Þú›ð…ÖÃ÷6Q¶¥ÎyÛzsï'CÛçÇk¦ÏîžGGî,Q=¶)œ—uΒ™;úôÓÝSdz ž#¶¹·|ݶ“‡ÓöûNçåcÇNµ=¶{.ß÷âƒ}ƒŸ)œ·å¿îž$¥RüîÔ¡c¥©é‰¾¡u¥±0Ñ9:ðغÁ¾þR¿}á‰ãíÓ6Â'žúzûdxèªÓ>~Zû[ëèÂWv†ºbËå~ôS¡'ÜzÚ΍ê¡ñ±'ñóáÛ»§Réà-¾ôMõÕ€·½ôÌô%ë‡{F†®Þ²¹ gÝàÕ[¶lnmÞÒ;Yº­|GïÄm“wœyl¬÷ض lÚröºÒÏîY×?q®» Ý¯§Ž?:T¯sÆŽ¶¾óìèwžm¬+¯~ëºÑ‘¿;£¾®óïµç~¾´½\¾núÀÆÁC‡w†“ö¡‡/¸xðâ¡‹‡‡Î)S~yσ½â´]»&_qú›/زãœ[_¾ý¶ÁÛ†n¾mýx{zzúû†Ô°Z¯FÔ5ªÎR/Sg«½›¶ïÚq鎷ï8¼ã–wï¸wÇs;μ®è`2§‰Ó·”7—''úÚ„›tø!°]á(¶Ï19]½ÿõ÷½íŽ;vðÒ'~ñþèm¿±°÷+3ï½sîþéûöÏ~{ïC½—>xÁ×\3}ùÖ‘W|øŽ>|Þy'ɵo¸òªm^þ¡÷~ìÍñû4aÐý]åcá\l<Réß >]+?ÖûàP8Êa¤Ž´ÏÅH‡Ž?IøŠƒœN}þW&Ëí³±}öOœ~q›ÎOÚ,0V¾±|SëÖ+—¿øÅ?øÄí·‡+€_¿ëÅ{ïxýG>þ{=×ßU~M©3Öçã[{¯Ø¥‹§7žb‚;ˏM<01ôúÀ~²}bÖã¸zZNÒÁâä—ÚtpZƒxžÔ…ó˶éà—m~nõË¿Yþò#=¿ôâÌÇ?þø'{núÞ½ìÝ󜺯݋sÿy-÷†ÇU¡›}?ðhô|°ç鞧ÕFõõÞÁÞ×­=ÖkµÇÚcí±öX{¬=ÖkµÇÚcí±öX{¬=ÖkµÇÚcí±öX{¬=ÖkµÇÚcí±öX{¬=ÖkµÇÚcí±öX{ü¯¥ø¿5˝:QRÿ8ú²ð·¯ô¿ÿOîJ—½ör^¼áW—Þôæ·¼õÿ î¿ôOoéŠÎ¿½íãóÜêK/…gÚÿ†×½á߼俗•^[ºü>ù†ÒKW‡ú¦Ò›Ko)½µýùòݥʿ¹ÿû_>Wzî¥ï{£L«´wíoáï3¥›*¥Gø{CïñÒ
+=ß(íúçþVÆKô~«tC÷sêŠðú•¥Eu^É„Ÿ=Ø9Ö=ýùç>û+¼}Ã%ß)m‰_Îo|í£wë?üá‹ç¯_xSñ›û'ʵm2
 endstream
 endobj
-9527 0 obj
-1477
-endobj
-9511 0 obj <<
+9499 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [338.138 395.088 399.403 406.778]
 /Subtype /Link
 /A << /S /GoTo /D (pdftoepsonusb) >>
 >> endobj
-9513 0 obj <<
+9501 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 271.569 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.easysw.com/printpro/)>>
 >> endobj
-9518 0 obj <<
-/D [9516 0 R /XYZ 100.892 685.529 null]
+9506 0 obj <<
+/D [9504 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5257 0 obj <<
-/D [9516 0 R /XYZ 100.892 383.97 null]
+/D [9504 0 R /XYZ 100.892 383.97 null]
 >> endobj
-9519 0 obj <<
-/D [9516 0 R /XYZ 100.892 367.1 null]
+9507 0 obj <<
+/D [9504 0 R /XYZ 100.892 367.1 null]
 >> endobj
 2002 0 obj <<
-/D [9516 0 R /XYZ 100.892 301.735 null]
+/D [9504 0 R /XYZ 100.892 301.735 null]
 >> endobj
-9520 0 obj <<
-/D [9516 0 R /XYZ 100.892 274.748 null]
+9508 0 obj <<
+/D [9504 0 R /XYZ 100.892 274.748 null]
 >> endobj
-9515 0 obj <<
+9503 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F51 3736 0 R /F15 3700 0 R /F85 5513 0 R /F17 3698 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
-/XObject << /Im49 9512 0 R >>
+/XObject << /Im49 9500 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9535 0 obj <<
-/Length 2263      
+9522 0 obj <<
+/Length 2262      
 /Filter /FlateDecode
 >>
 stream
-xÚ½XYÜÆ~ß_AÄ@ž>Ø<„ €%[ähŒ]	,?pgzg¨%ÙÉÑîþ{Wu5Gä,½(/dÕÕu|u<Ø<xuñüêbýRó@p–ó\W7Ð‚¥\I–3ÇÁÕ.ø9Œ3¹úåêíú¥”AÆò$‰‘TòŒq%€“#zñÓær)‡›®l†²ÙÓìòض0â¡]Á£V‘ˆE¾8í`:¢‘ŽÿÅ÷WŸ.!ˆ4‘D3¥‚m}ñó/<ØÁÞÛ€3•gÁ£¬¥3–h
-ã*¸¼øñ‚{õøLM1S3Ù$qÎœ:¨Á.R'ÇxpýRèÙ)7¾:˜Uk¾:¦iAé•ÌÂ×Ðvé$üh¶ƒ·]¤,G“HX–ê@±\çÄ.#²ù ].ƒhBökþjóî¯tõMg]ØÛ›ï¿[É4,:t‚vZÖ>—»•Z„=m=6;b$bŽ÷‘	ÓI
-Åtì/Ýl¾ƒ3*ÕîúÞyw3l4¦èªǜӀŒ’†àè$V™ë­xÊ]W~F©MCóÁúƒKÃ$üt±‹ªè
-ÉI:MÂÙãÐÔ¯PŠ˜ÀûÚ	ip‡ÇÞìh¹¨l³ï˝ñÔOAn„ËF¡ißãF€¸BUØJæØŠ<L") >äÃÖ*Sá±C
-ÒÐnNØzŒ$­XgS åK@¸çúú åYí'TØØ&BX€ÏCïïý0àYÈÙœ»aBD¢6´äÄ=Öøô^è^‰`y¬æè²7dßS‰É%eC;æ~kªÊŒ†[ŸŽ„‰0‘Åáïq‰úC.yÿÃ?Þ,Ø_q–ðdjÁ— b¦„xäw›W.–s~1:ÎÊžÞ½Úb‹˜¼]AN)ö†ëbçG×d7~óüϱqG“­%óeƒAë¼Ç,g±>n0µÁ,¦i‘‡µí-
-‡¢¡Å:¦ÞC(Iöƒ©kÊȦ³õxš2ŽËæ`ºr(š­_ 4Lb|”
-”¡’<|¹–FÞ¢zð¢½iÿ$;†;.Pò[Ý
-ædðŽ>ÞÓ2ºƒ‚gs3à
-z!(q^ÐËã{(–Äîç,—v<pÛÎôÉèí¯ŸK^oÞ¼½\B®`RH‡ÜÌ#W,"ëpFÈ; ÷ùåwQOXŠRË°*·¦é
-º_&éиy–Ep©h]mÊÂû².ƒùDj
-Íi.¼Þü¥÷€•ëá4û;ß#Ñù]	È:•\„Ô†5Î
-ªÞŽtî”Dã‰0Ã`i¬à|åF§d»“âŽÇÏJ’#iF*¥í±ë¼Ÿ«‡%lN„ߢ¬ŠëÊãÄ6.¯ÂèsYœ•¨—˜ê,Á,Vn=¤
-Qÿ8½ÄÒdÉ“N†õÍ…&i{Œp0Í€nØ.õ=ϲ¥\ĐåÙoeK4ñ¤D¥§Ü2
-ê“Ï 1ÛíyÞ÷;B³\e‹ýôH”û4¶2Å”-*çØ1”SPß´} ²WÛý¶+ہÈƦ¶ÇœÕЦëT`™®{³]µk^6ÑBÓ³­Ž;ʬ€÷uSúÞgÒ‹BøEŠ ¸Tp‚	=Åèε–2e2…â¬4K„7…”L3‘ƒš‚óik~ ÂMÞ4 åMáÒ8L/
-ú%ç‚&Ðd&I6ýpˆeì4–ú<Yà’³RA'G+˜páƒPñ©öŽIð'Ï»§÷­/Š
-M	88º|Àrµ`ê¾ÊÂo1ö®þ|E³)ºh¥wç¡7ŒRâǁS¹ÖŠСcŸ«Ôw£¸è †ƒÍ‹w´wVHãÄK¹”BÚr.„›m\Ž©ÂÕ™T†{Êb¦ƒÌJ+î$š¦3˜~´×(¶N8qfFÜõf¤‰ÓÅ­’{Œ‹ýAî"žd°K²NÔÂ/,t©‚ÉÎT(A"8îö>Aâ5´RЫ³.WfP¤ËR§çç‚	7 	Å/L(~awƒÌ 6/ÇØÌò™¥Ùb×qf	W:]!«(ìÃ|û…eã¾ùܘâß÷Û¢=}Ž äb\!ñÕÆ™f=þÝQÙ¹oÇÜ	d§ìÕ¤÷ZRbWتä)t#)j—X[óìÔ‹áPÙaÊà>ï!¹/ê¶rbÊT \O[žëÖtØTÒ¤ÕôLJÎÛŠ†gMœ3PW¢“›½é¢nÊ(Ʋؕ¾š:¸»ïß,´~$ïiô­¢÷—ó‘ñ#h#Í	Ú8ñaªæ™Þ1ŸgàÑ®Ó\ÍnéßÞçjÚ^âL_Õ K‹ð½§}½‰~ú
-ÛªÀèuâò@£¢›eåCf²àS
-1¥,‚øß®`ñfpöí8 ,c{4~;Äø­à:Þ[Êj°{žWf¬n¸m=7ŸÃa4øö­ž%áÛc?Œœ ®*Ou0ÿ9G€é¡Â¨Çñ'ÎÿW¥9K¡+õ½ITþF«¸il‹øy晩Y{”C[”àGZÌtæÛ£ÎÚáÈŽPQª¶ØÕègœD-½Ûm…b;‘Ýúgz÷v{k†gë5\í¨)âg¹ÀÏ%ÜÆ¢åL ±èʹ@G´ÆÎn=Øu9×È[Ú¯-þ6©~ò©ÿf"V,NN¿ÍÜo2Åè‡Ò4¡¿d1ȝ¹¿eÙü7XéËŸ@ ÒîÓ6ãžêog
-e:%O™HÒчahÁHû²n#÷ǬExƒ¾¬·Çnk &ö†5fXŸ±œI Ú&#Ó¿“3e"‘
-–y÷ëÙ¯’ÿµ2wwwl8v×ÖƒíÌÚ4ûªìì0ÔÕÓŠ¤`ê4}Z‘œþùLÿ9$sÑ2ÿךW„Œúåºf[[¯w泩lkº;HýÚöýº*›ãýúk,°=é“šÊ\2¥Å“š*ž2%åLSñu4=´esûÑüNØiÎ?í­ºi®g:ȯæ-æÜÐú6¿{žV@%L9SàÑÿóIžùáÿ
+xÚ½XYÜÆ~ß_AÄ@ž>Ø<„ €%{WähŒ]	,?pgzg¨%ÙÉÙãß»ª«9KÎŽ7°å…죺XÇW›Û€g¯¯Î–çš‚³œç"¸º	„,å"H²œé<®6ÁÏaœÉÅ/Wï—çRË“$FRÉ3Æ• NŽèÍO«ËE¤t®º²ÊfK³Ë}Ûˆ‡vnXD"iøfW´ƒéˆF:þgß_}9C† ÒDÍ”
+ÖõÙÏ¿ð`{ïÎTž÷Ž²”ÎX¢5Œ«àòìÇ3îÕã35ÅLÍdOtÄ9sê Ÿ¸HãÁå¹Ð³Sn8*|µ3‹(V2¼(ë6B¥2Z[uvé$ülÖƒ·]¤,G“ȘÒ2P,×9±ËˆlþÅœÅqD²O\ó‹Õ‡¿Ògn:ã…èí̀߿_È4,:t‚vZ6îʍéi¥èì¾ÙÐXÄ?DB¦,«FB1û¯­VßÁ•j÷ÝÞ¹xÙÎû6StÕ#cÎiÐ:k¤!x¸QU¦Ãºp+žrÓ•w(•ih>Xpgi˜„_öU9Ð1’“tš„³û¡Ý¨(~B)bïk'¤ÁIî{³¡å¢²Í¶3xꝧðþƒ¯y¡ißF Œ¸BUØ<æ Š<>") 0äÕ"Sá¾C
+ÒÐ>ê9„´bYœM”ŸBà<×ÏÔï "÷ÈÞh=¡ÂÆ6≐£xz§èo„ÏB@ÎvçÜ
+² µ¡%'î¾Æ§÷BGðJËc5G—½!û¶£š`brIÙÐŽyX›ª2cdáÖ—=a"Ldqø{\¢þK>þðw'ì¯8Kx2µ¿à§ b¦„x恫Ä9ŸŒŽ³²§wA¯¶X#&oLŠ­¡ÅºØøÑ5߽þÁsl,ž¹§ÉÚ’ùŠ²Á uÞˆc–‹tîitƒ©%f1?‹<¬mghiØ
+(Öa0õBIª°L]S†@6­ÇÓdžSÙìLWE³ö€†IŒRR T’‡/—ÁÈÃÛÆ%´ûhGoÚ?ÈŽáŽÎ”d:ZÁü€>ÀûZFwP°ãln\Aà1%Îzy|Å)±ûÁ9Ë¥ܶ3½G2zûëç’·«wï/O!W0)¨öd¹â$r± g„Üì	¹¯/¿‹z
+À
+T”Z†U¹6MoÐý2I'€ÆÍ£,‚KEë‹ÒCYƒÁ|"µ…洏‰Þ®þÒ{ÀJ–Ëyöw¾G0¢ó»u(9¸©
+kœT½馵÷0Ã@KVp¾r£C²Ýö©ªãñ£’äHš„ÊCi½ï:ïçêñ6
+'ÂBë°(«âºò8±Ë«0º+‹£uŽ©Î,ÁbåÚCªpõÿÓ9–&Kžt2,×h.4IÛc„ƒitÃúTÃÃÁñ,[Ê“˜²<û­l‰&ž”¨ô[¦A}ð$ f»í3Ïû~Gh–«Óý´¤”û4¶2Å”-*çØ1”SP_ì‰ìbgû¡_we;ÙØ4Ðö˜³Út
+,“ƒaÁµm¶«6ãaÍË&:Ñô¬«ý†2+àãcÝ”¾÷&%jA"ß‹B(ø=
+¸Œp@Ø>Å Ï5t¢è e
+5Zi–o)™f"Þ‚óikq~ ÂMÞ5 ìMá²9L/)úS>…dmw6ýqˆeìã4–ú8gà’3RACG+˜%pá“Pñ¡‘ŽIð'Ï»§÷­¯
+M	?8º|ĪuÂâÿÄF9¿Å¼úóͦ £•Þ‡1JuŠ?NLå:,@‡Žín¬Rß”â¢ÃVo>ÐÞQ=/å©LÒ¶z!êlãÚt̮ܤ2ÜR23$XZq_@¢iVƒég{bëDgfÄ]oFš8]Ü*¹Ç¸P"Ö]à“ö”¬µð‡ ^)ŸlL…$‚£áiçó$~†V
+zuÖ¥ÌjuYCõü\LÁâ
+$¡0†	…1쮐„èå¢Y>³4;Ù|™CÂ'Æ®ÜU¶c¾C‚²qÿ|nLá
+ƒïûuÑþJ
+r1®žø¢ã̳ž
+ÿìÜ/Œcî²SöjÒ‚RbSرä)4%)j—XbóìÐ’áPÙaÊà>ý!y(ê¶rÿbÊT \O[žëÚtØ[Ò¤ÕôLJÎÛj‡gMœ3PW¢“›­éODÝ”QŒÕ±+}QupÇÀÐYhý.HÞÓè[Eï§ó‘ñ3h#ÍÚ8ñaªæ	ß1Ÿ'âѮӔ=oéßÞçjÚeâL_Õ K‹ð£§}»Š~ú
+ÛªÀèuàòH£¢{fåCf²àS
+1¥œñ¿]ÝÞã—ÁYؾ〲hŒ]Òøã/ƒk|o)«Áîq^š±Èá¶õÜ|‡Ñà»´z–„ï÷ý0r‚ž¸ª<ÕÎü禇
+³£VÇŸ8¾¯Js–Bsê[”¨ü>Vq5ÒØñóÊ3S³.)‡î(Áµ˜éÌwIµÃ7¡¢Tm±©ÑÏ8‰Zz·ë
+Åv"»õ;z÷v}k†WË%|ºPSįrM¸EË™@cÑ•s;€Žh‰
+Þr°Ër,®‘·þ´m;ym&R
+üäK÷f"V,N×fîšLñ Ú¢4Mè–,¹3w[–ͯ©ÀJO7@¥ÝnÆ=ÕߎúÊtJž2‘¤£;vÃЂ‘¶xãnÌZºˆXo÷ÝÚ@Ll
+kÌ°<b9“@$´MF¦'!gÊD",ò¾¯g7&ÿkeîïïÙ°ï®­Û˜¥i¶UÙïØn¨«—IÁÔiú²"9]ýL¯’¹hÿkMÈ+BÆýr]³µ­—sg*Ûšî’E¿´}¿¬Êfÿ°„6Ë,Akú¢¦2—Liñ¢¦Š§LI9ÓT|MwmÙÜ~6¿vš³DÅ/{+nšë™ò«y‹97´¾MÇߟ—P	ÓBÎxv>É3¿ª¢
 endstream
 endobj
-9534 0 obj <<
+9521 0 obj <<
 /Type /Page
-/Contents 9535 0 R
-/Resources 9533 0 R
+/Contents 9522 0 R
+/Resources 9520 0 R
 /MediaBox [0 0 612 792]
-/Parent 9538 0 R
-/Annots [ 9514 0 R 9528 0 R 9529 0 R 9530 0 R 9531 0 R ]
+/Parent 9525 0 R
+/Annots [ 9502 0 R 9515 0 R 9516 0 R 9517 0 R 9518 0 R ]
 >> endobj
-9514 0 obj <<
+9502 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 160.797 336.999 173.748]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://gimp-print.sourceforge.net/)>>
 >> endobj
-9528 0 obj <<
+9515 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 149.838 355.33 162.789]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.turboprint.de/english.html/)>>
 >> endobj
-9529 0 obj <<
+9516 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 138.879 468.803 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www-124.ibm.com/developerworks/oss/linux/projects/omni/)>>
 >> endobj
-9530 0 obj <<
+9517 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 127.92 327.086 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://hpinkjet.sourceforge.net/)>>
 >> endobj
-9531 0 obj <<
+9518 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 312.964 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/)>>
 >> endobj
-9536 0 obj <<
-/D [9534 0 R /XYZ 151.701 685.529 null]
+9523 0 obj <<
+/D [9521 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2006 0 obj <<
-/D [9534 0 R /XYZ 151.701 412.728 null]
+/D [9521 0 R /XYZ 151.701 412.728 null]
 >> endobj
-9537 0 obj <<
-/D [9534 0 R /XYZ 151.701 386.462 null]
+9524 0 obj <<
+/D [9521 0 R /XYZ 151.701 386.462 null]
 >> endobj
-9533 0 obj <<
+9520 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F51 3736 0 R /F15 3700 0 R /F29 5413 0 R /F17 3698 0 R /F53 3738 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9546 0 obj <<
+9533 0 obj <<
 /Length 1957      
 /Filter /FlateDecode
 >>
@@ -49499,74 +52711,74 @@
 %ÖA¨“õ£7†aIðÍ;·šo®Æ£lM¥¹Ž.ó~ëý.owz¶ÏOöù¹.Oõ…œ•Zq‘BŠÍcØ·+Úë/¸ñOv$¿
 endstream
 endobj
-9545 0 obj <<
+9532 0 obj <<
 /Type /Page
-/Contents 9546 0 R
-/Resources 9544 0 R
+/Contents 9533 0 R
+/Resources 9531 0 R
 /MediaBox [0 0 612 792]
-/Parent 9538 0 R
-/Annots [ 9539 0 R 9540 0 R 9550 0 R 9541 0 R 9532 0 R ]
+/Parent 9525 0 R
+/Annots [ 9526 0 R 9527 0 R 9537 0 R 9528 0 R 9519 0 R ]
 >> endobj
-9539 0 obj <<
+9526 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [346.443 317.231 409.467 328.92]
 /Subtype /Link
 /A << /S /GoTo /D (small11) >>
 >> endobj
-9540 0 obj <<
+9527 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.308 317.231 460.543 328.92]
 /Subtype /Link
 /A << /S /GoTo /D (small12) >>
 >> endobj
-9550 0 obj <<
+9537 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 305.803 145.555 314.826]
 /Subtype /Link
 /A << /S /GoTo /D (small12) >>
 >> endobj
-9541 0 obj <<
+9528 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [316.29 141.581 377.555 153.27]
 /Subtype /Link
 /A << /S /GoTo /D (small11) >>
 >> endobj
-9532 0 obj <<
+9519 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 422.203 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://playground.sun.com/printing/documentation/interface.html)>>
 >> endobj
-9547 0 obj <<
-/D [9545 0 R /XYZ 100.892 685.529 null]
+9534 0 obj <<
+/D [9532 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2010 0 obj <<
-/D [9545 0 R /XYZ 100.892 585.491 null]
+/D [9532 0 R /XYZ 100.892 585.491 null]
 >> endobj
-9548 0 obj <<
-/D [9545 0 R /XYZ 100.892 554.353 null]
+9535 0 obj <<
+/D [9532 0 R /XYZ 100.892 554.353 null]
 >> endobj
 2014 0 obj <<
-/D [9545 0 R /XYZ 100.892 475.375 null]
+/D [9532 0 R /XYZ 100.892 475.375 null]
 >> endobj
-9549 0 obj <<
-/D [9545 0 R /XYZ 100.892 449.687 null]
+9536 0 obj <<
+/D [9532 0 R /XYZ 100.892 449.687 null]
 >> endobj
 2018 0 obj <<
-/D [9545 0 R /XYZ 100.892 289.524 null]
+/D [9532 0 R /XYZ 100.892 289.524 null]
 >> endobj
-9551 0 obj <<
-/D [9545 0 R /XYZ 100.892 261.715 null]
+9538 0 obj <<
+/D [9532 0 R /XYZ 100.892 261.715 null]
 >> endobj
-9544 0 obj <<
+9531 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F29 5413 0 R /F17 3698 0 R /F51 3736 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9557 0 obj <<
+9544 0 obj <<
 /Length 953       
 /Filter /FlateDecode
 >>
@@ -49583,21 +52795,21 @@
 „â
 endstream
 endobj
-9556 0 obj <<
+9543 0 obj <<
 /Type /Page
-/Contents 9557 0 R
-/Resources 9555 0 R
+/Contents 9544 0 R
+/Resources 9542 0 R
 /MediaBox [0 0 612 792]
-/Parent 9538 0 R
-/Annots [ 9543 0 R ]
+/Parent 9525 0 R
+/Annots [ 9530 0 R ]
 >> endobj
-9542 0 obj <<
+9529 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 780
 /Height 299
 /BitsPerComponent 8
-/ColorSpace [/Indexed /DeviceRGB 31 9560 0 R]
+/ColorSpace [/Indexed /DeviceRGB 31 9547 0 R]
 /Length 27599
 /Filter /FlateDecode
 /DecodeParms << /Colors 1 /Columns 780 /BitsPerComponent 8 /Predictor 10 >>
@@ -49811,7 +53023,7 @@
  h43ŒÖ£5 Ðhf­Fk(  ÑÌ0Z3ŒÖP @£™a´f­   €@™m4S)0)¯¤kF	5@ 2Ëh2¦N3‰yøÖ,#¡f  `fÔÜ”×ƒÕor# 3 (3Œê-Š§43bÀ<ì«v€ bb`àfÅTÂ"59™˜³÷„†}Í ` Ùúº
 endstream
 endobj
-9560 0 obj <<
+9547 0 obj <<
 /Length 105       
 /Filter /FlateDecode
 >>
@@ -49819,13 +53031,13 @@
 xÚÁ¡@  P[˜Àª¬ K¢(Š¢(þª‰¢*Jw‚ ‚óßC•RÖZãsNJiïsöÞ;çæœÂ£Öº÷nŒcÜ{)¥RJBˆ¢Öú}cL)e­åœ‡Zk €÷Þð<Ù
 endstream
 endobj
-9554 0 obj <<
+9541 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 780
 /Height 299
 /BitsPerComponent 8
-/ColorSpace [/Indexed /DeviceRGB 31 9561 0 R]
+/ColorSpace [/Indexed /DeviceRGB 31 9548 0 R]
 /Length 29290
 /Filter /FlateDecode
 /DecodeParms << /Colors 1 /Columns 780 /BitsPerComponent 8 /Predictor 10 >>
@@ -50081,7 +53293,7 @@
  h´f­F3 ÐhÍ0šF3 Ðhf Ef1!*=¬2@ 2ëhÚ§rŸaÄ„¨È°Ê Ìr2⣠0SR3Œ •N™ €@™a`d†‘†Qf  qæQ€›xFVˆÊŸÌ ` èØè
 endstream
 endobj
-9561 0 obj <<
+9548 0 obj <<
 /Length 107       
 /Filter /FlateDecode
 >>
@@ -50089,40 +53301,40 @@
 xÚ` ŸÿÛÛÛeeeÊÊÊ%%%¢¢¢ùùù444¼¼¼ÃÃó³³sssyyy„„„AAAìììèèèýýý“““ªªªõõõÑÑÑ›››TTTðððÕÕÕ‹‹‹òòòKKKååå   ÿÿÿ	+<
 endstream
 endobj
-9543 0 obj <<
+9530 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [163.432 337.476 224.697 349.045]
 /Subtype /Link
 /A << /S /GoTo /D (small12) >>
 >> endobj
-9558 0 obj <<
-/D [9556 0 R /XYZ 151.701 685.529 null]
+9545 0 obj <<
+/D [9543 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5258 0 obj <<
-/D [9556 0 R /XYZ 151.701 660.623 null]
+/D [9543 0 R /XYZ 151.701 660.623 null]
 >> endobj
-9552 0 obj <<
-/D [9556 0 R /XYZ 151.701 643.753 null]
+9539 0 obj <<
+/D [9543 0 R /XYZ 151.701 643.753 null]
 >> endobj
 2022 0 obj <<
-/D [9556 0 R /XYZ 151.701 458.808 null]
+/D [9543 0 R /XYZ 151.701 458.808 null]
 >> endobj
-9559 0 obj <<
-/D [9556 0 R /XYZ 151.701 442.213 null]
+9546 0 obj <<
+/D [9543 0 R /XYZ 151.701 442.213 null]
 >> endobj
 5259 0 obj <<
-/D [9556 0 R /XYZ 151.701 327.226 null]
+/D [9543 0 R /XYZ 151.701 327.226 null]
 >> endobj
-9553 0 obj <<
-/D [9556 0 R /XYZ 151.701 310.356 null]
+9540 0 obj <<
+/D [9543 0 R /XYZ 151.701 310.356 null]
 >> endobj
-9555 0 obj <<
+9542 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R >>
-/XObject << /Im50 9542 0 R /Im51 9554 0 R >>
+/XObject << /Im50 9529 0 R /Im51 9541 0 R >>
 /ProcSet [ /PDF /Text /ImageC /ImageI ]
 >> endobj
-9566 0 obj <<
+9553 0 obj <<
 /Length 2322      
 /Filter /FlateDecode
 >>
@@ -50155,50 +53367,50 @@
 —>dÂT_Œ#Õ¨¹ ÓûpõmN8äË®mΩõ\ÌÒZ¢Æ ¿uçZo­³ ¼qVÛBz¶•Y‡œ*ôÐý¥BdA¡9œ,]gÇe§è¤gí§‚éñÓMko®k]åöÒæØ'}¤Ú|ѽY1Œr8>Æeâ¦?(ê>ü)³Ûá!Wssìkëãxë:0:4œ`aþÖõqœ†br²¦¾ÁòµŽ>¸m請ãà[Jo}¶)f«o<¤¿×LÀø
 endstream
 endobj
-9565 0 obj <<
+9552 0 obj <<
 /Type /Page
-/Contents 9566 0 R
-/Resources 9564 0 R
+/Contents 9553 0 R
+/Resources 9551 0 R
 /MediaBox [0 0 612 792]
-/Parent 9538 0 R
-/Annots [ 9562 0 R ]
+/Parent 9525 0 R
+/Annots [ 9549 0 R ]
 >> endobj
-9562 0 obj <<
+9549 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [395.442 117.522 456.707 130.423]
 /Subtype /Link
 /A << /S /GoTo /D (13small) >>
 >> endobj
-9567 0 obj <<
-/D [9565 0 R /XYZ 100.892 685.529 null]
+9554 0 obj <<
+/D [9552 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2026 0 obj <<
-/D [9565 0 R /XYZ 100.892 660.623 null]
+/D [9552 0 R /XYZ 100.892 660.623 null]
 >> endobj
-9568 0 obj <<
-/D [9565 0 R /XYZ 100.892 624.422 null]
+9555 0 obj <<
+/D [9552 0 R /XYZ 100.892 624.422 null]
 >> endobj
 2030 0 obj <<
-/D [9565 0 R /XYZ 100.892 536.996 null]
+/D [9552 0 R /XYZ 100.892 536.996 null]
 >> endobj
-9569 0 obj <<
-/D [9565 0 R /XYZ 100.892 505.804 null]
+9556 0 obj <<
+/D [9552 0 R /XYZ 100.892 505.804 null]
 >> endobj
-9570 0 obj <<
-/D [9565 0 R /XYZ 100.892 304.836 null]
+9557 0 obj <<
+/D [9552 0 R /XYZ 100.892 304.836 null]
 >> endobj
-9571 0 obj <<
-/D [9565 0 R /XYZ 100.892 305.716 null]
+9558 0 obj <<
+/D [9552 0 R /XYZ 100.892 305.716 null]
 >> endobj
-9572 0 obj <<
-/D [9565 0 R /XYZ 100.892 293.761 null]
+9559 0 obj <<
+/D [9552 0 R /XYZ 100.892 293.761 null]
 >> endobj
-9564 0 obj <<
+9551 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F51 3736 0 R /F53 3738 0 R /F85 5513 0 R /F4 5484 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9576 0 obj <<
+9563 0 obj <<
 /Length 1360      
 /Filter /FlateDecode
 >>
@@ -50220,20 +53432,20 @@
 6à;}û Ÿ& 3à’…çx„Q³M3¤„A†B¢G½	éѾèå~ýÒ†—ü?¸tZC
 endstream
 endobj
-9575 0 obj <<
+9562 0 obj <<
 /Type /Page
-/Contents 9576 0 R
-/Resources 9574 0 R
+/Contents 9563 0 R
+/Resources 9561 0 R
 /MediaBox [0 0 612 792]
-/Parent 9538 0 R
+/Parent 9525 0 R
 >> endobj
-9563 0 obj <<
+9550 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 780
 /Height 425
 /BitsPerComponent 8
-/ColorSpace [/Indexed /DeviceRGB 31 9579 0 R]
+/ColorSpace [/Indexed /DeviceRGB 31 9566 0 R]
 /Length 30288
 /Filter /FlateDecode
 /DecodeParms << /Colors 1 /Columns 780 /BitsPerComponent 8 /Predictor 10 >>
@@ -50455,7 +53667,7 @@
 –Ì @£5Ã@×££Iƒ&3 (3Œ&m2 ÕjÙ¡è{¶áX3 03ðq‰’Õ2£ÌÐó½ŒÈp¬ ˜F™€J™a¨‚áW3 ÐhfÍtÎƒ·f  1¶Q@&¡Bˆ]ïË»š €k6ÃvnðÖ 4šF3Ãà­ h43Œ‚Ñšš h43Œ‚Ñšš h43Œ‚Ñšš h43Œ‚Ñšš h43Œ‚Ñšš h43Œ‚Ñšš h43Œ‚Ñšš h43Œ‚Ñšš h43Œ‚Ñšš h43Œ‚Ñšš h43Œ‚Ñšš h43Œ‚Ñšš h43Œ‚Ñšš h43Œ‚Ñšš h43Œ‚Ñšš h43Œ‚Ñšš h43Œ‚ÑÌ Œ| 4šF3ƒÓà’| 4šF}ßà<|Ò  u3‘<
 endstream
 endobj
-9579 0 obj <<
+9566 0 obj <<
 /Length 107       
 /Filter /FlateDecode
 >>
@@ -50463,89 +53675,85 @@
 xÚ` Ÿÿxxx«««£££555hhhøøøºººíííñññ´´´ÂÂÂééé&&&õõõ“““üüüÚÚÚƒƒƒ›››‹‹‹ÞÞÞÉÉÉÒÒÒ×××[[[PPPAAAÌÌÌååå   ÿÿÿÄ =
 endstream
 endobj
-9577 0 obj <<
-/D [9575 0 R /XYZ 151.701 685.529 null]
+9564 0 obj <<
+/D [9562 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5260 0 obj <<
-/D [9575 0 R /XYZ 151.701 660.623 null]
+/D [9562 0 R /XYZ 151.701 660.623 null]
 >> endobj
-9573 0 obj <<
-/D [9575 0 R /XYZ 151.701 642.541 null]
+9560 0 obj <<
+/D [9562 0 R /XYZ 151.701 642.541 null]
 >> endobj
 2034 0 obj <<
-/D [9575 0 R /XYZ 151.701 371.296 null]
+/D [9562 0 R /XYZ 151.701 371.296 null]
 >> endobj
-9578 0 obj <<
-/D [9575 0 R /XYZ 151.701 352.376 null]
+9565 0 obj <<
+/D [9562 0 R /XYZ 151.701 352.376 null]
 >> endobj
-9574 0 obj <<
+9561 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R /F53 3738 0 R /F85 5513 0 R >>
-/XObject << /Im52 9563 0 R >>
+/XObject << /Im52 9550 0 R >>
 /ProcSet [ /PDF /Text /ImageC /ImageI ]
 >> endobj
-9583 0 obj <<
-/Length 2245      
+9570 0 obj <<
+/Length 2246      
 /Filter /FlateDecode
 >>
 stream
-xڍXݏÛ6ß¿Âè“|ˆµ¢¨Ï¢(¦m°AšÛ»uК>h%z-D¶|¢”íýão¾(K¶¸‹É™á|üÆÁêi¬Þßü´½¹ý5W©Ÿ§Zmw+~–‡«$Ëý8VÛjõ‡÷`ʾnë?·ˆ=óó$‰=Ìý ¸æC?ó×$Úûdúµ¼güi×aîu_×GÞ=NZÛ?”]}ê™öï»{><@?rFÃ8bw|”¥ÈuóËöæ¿7
-¨À<8öµ^•‡›?þV¬}X¾Î³Õ3qV:Îü$ÆÓšÕÃÍ¿n‚©TºR¡ŸÇ*šY!Ê}ÒÔiÊÁ+§œr0"å’”ƒÉT9 Ê©xª\°Úh
-i>}»¯ízæ™gÅÚ0ɽª¶å`­‘µ~ox0XÃíŽ	ï>ß?ðèK ¢¦7lq'[­é¾­ÃÌ3Ïÿæõ²=âΧ¡+Üc£ŒJûq”³ŒÏ{ÓÁ!Zk¯ljs\‡©×[&Š¯t(Î"oX+”'ì(%~^¾GÖ©™`©êêQ,œ?×ýž¹QµÍýýÏÖwB…±¯r
-Ö›(Œ½²8â AUð¤¾k^)œºš—˜±2ßêÒðR{BµáŽM*xó"{;aì ç¼ðÎ(صh€oue*æxÄ£_–,GƏâÌD÷»¢ì‡uEêßü©wü}!ó<¡Kž<)øsi?¤ª™î
-P2t–BÖjT+S1‹)ä$àU²ŠÂ	Xí,H++41u{À×=ë€„G35*¾5~¯„ퟢL8¿º\ÐÊþöÀ¿×ǪEŽgÇÐ-	ýötjPì$ó~ƒ§)Jÿó¿öÅöæ@VˆR÷¸@g]!Hß>¼»e2ïŽçÎ>Äåü©¨õñ‰i€ÝÆš‚µx„«'2Å,ÒÄ×tš8ÿ‚·ÑY~pbã´c…,±×·Ì
-k]ÛQ‘Þ0mnM9åþÝÇ7rz'l>òYðBàkÕâï;‚LÅn‰ƒ¢ƒËžH|*Èk˜Ðàug
-,Îß¾“…ºhÚ'+gwÅÑ6¤žwºÌ€S1Ë’˜_”ŽÐ0¤˜àaâ—ï˜(â´<{úO"6PÝ¥•ö´’³šÚöÂF–˜œ¯é]y­‹´<äwž§ŸŒ…伫“ˆÓš¶¨èYBJbíÐ3CÿE¸[
-çüÎ5`‹,¬8`gäñ®Ãл:NÂ$Å0¹vÅ/A|Ú‚ÁƒÐÃ2ƒßΠ‹ÐK€­”sD…Ì
-YôuöٛÜÌ{ôÖcEQˆA‘áœW“˜òjgFA–²êz¿¯3í™Gœ(ï±Õèi`uôCH£†IäÉh½ÐãøálÖ„+ÎÑ*–Ônœþe/8$œ–ê0†Ò¤‡ü@(ÄÁ`ÖSæ̏²²ìûþôýímÓ–E³K~O*oÂDù!à‹™æ‰V·tXºo/¯˜É“F~—Ê?.¡ 3
-°Œ°ŒÑ e»DÓ}•²Lb—CÒ™*ÊWÙxÈ» …ʘ®Ï?ŒF	92ù*­ÖHÀÕ=;ÉÓ1S!fŠ˜™IŠC(
-®\"—÷5KÈRéÌ‚Ü	x`ä ¡IY‡Ó¤t©Yúiš¸$0\ÅÚ ;þŽ%'{*¡6KÒd™ð[ÎlN{r,Ü­SÀ‹ã{FÛè(õÕ…‘äzDxt\ýÐÌ…‘J]âZ1Û
-{{ZUËkàu…‰”åq ©ˆéƒ…†h„6áû‘ßcøëöó§»ÿ¼YF“싈ò¢@Òg„…ÇX3Æ-8FçZAr$øbÂÆìó’“TÔ$ƒ«å<D„Š’'Ц¯SçX]ˆÏšoëQå U­rë’Œ±r¸b²„s± ®‹Ò¦!#ÍëøxVÇ`Uг@rà~»• ™ôbJúÆÈØŒì¸]áɧö¸áê5³°‘lðÅÇ{­yIG³"’W-ÛIê+fÛ¶çqSjÖ=TԝKj,V{´Àw¯™ šš@ߏãÒxXÁ	®ã˜õ
-“wÝ¢Õã0Ù㐋UŽÔ¦ ´ŽË²Í¢™(æ¯" =ìÝÉsÊó)ÈŠb͘Èeq AiPSZnk#…(tÅиX°ËÙ'ƒa:‰àcÝ$Nnqˆ…Ò&§½–š†Lû݃ŸpáØ tÆàGQÁüQ[Ÿ®žöü¯´rÙ´Æ@v_@‘5”NlhòÔÅ`YÐ+ã:?í8–ÍPÙWðg7pÆCS`ÃUI¢¸D6t‚t&›E0oöb>ÁºQ,ù),8Ž8ºaà…¥IéÈéæ="K7KÞºë¯r ÇQi¬KbØÂâînÄ*F±Z2û¥†1t(8ù@¬ÀKª
-><·µH<Œ ù[ðÒÎmeŠLà ‡¢·\¶q‘1)ŽäoŒþP¨—ç÷d_qtă	t¿ORR@ÚÄ'(4½ÈÈ)x{4&îz²’¼!Ãb=²ÐõÔß…Y*?àˆÿ8É4¡µ_¨)n»Šóbv»b_Ÿ!Ó?Êád­›WPR¼AúB˜»?‚²TÀ
-ÞÜ›¦±3iR÷‡O–NMd†jϼQ ,t¦/âÑ`ÿ ¢YýU³äº±'‰4¬ÿQÉî%žQÚV.á*×J)WýÔ$ N£ÏöENG‘ $IŸ·Äžð•xÑÿáÔØ–FFHƒºMí2€¸FºYJܸÄÿäÊ…!Ï´-/:>©Å+OÄþ’ò«}9DÐÏñm0 ÜÙÔÎ'Ûâ€s\K<Åôï3>BN §†AQE³hHàÏ•„© \䶟:ÌÖÊÉS,FÅ4Qp\@øœ‰^=Øï’‚•÷¤u/ÄiÅñ¤+ï
-ÛKùc žr"òg½’ûþ²½ùàö’
+xڍXmoã6þž_aô“|X+¢¨×¢(°Ý¶‹,¶{¹K= ÛŠDÇÂÊ–O’75Ðó̐Šä(À}1ÉሜÎË3V«`õþê§û«ë_Ãp•úy¨Õýv¥‚ÀÏòp•d¹çÑê¾ZýáÝ™r¨ÛÃúÏûÌžùy’D`s? î@øÂÐÏüõF‰ö>™a­ï	?í:̽îëz£ãȻŢ퇻²«ƒÐþ}s+‡ÇIàçAÎÂhš§Q쎏²\W¿Ü_ý÷J•˜'Ǿ֫rõÇŸÁª¢½«À×y¶zbÎýJÇ™ŸÄ8­YÝ]ýë*˜A¥+úy¬¢™¢ÜgMv¤í‰rÊ)G3V.II9ZL•#Ú¨œŠ§Ê«Ö$–Óïwu¿Þ„yæõÖڴȽªîËSß»7ìŒLN½†v+„wŸoïdö%PQ3˜Î~âN?íM÷mfžédý·ì—í_>žºÂ=6dTڏ£\d|Ú™ŽÑZ{eS›Ã:L½¡¾øʇby§µòhCy–Rb,dû¬S3ÑVÕÕ£XX?ÕÃN¸¡ÚæööçÞwB…±¯r+6Ö›(Œ½²8`’@œ4tm#;Ec'Ç®–-a¬Ì·º4²Õ¡6ݱICEÏaÎöÛÎ2œús–/¤`× ßêÊTÂñ€£ÏK–cãGqJfâûOÛ¢Ntõoê­Œg6ÏI|ÉÓA…—ömTÍtoˆ’ÁY
+»WC­LÅ0–PØIÈ«dµ
+'dµ'X°V½¥YS·{¼î‘\‡$<˜©QñÖ_9Ú?…Bx~u{Akßð·;aø½>T-8žC·$ôÛ㱁ØIæýFOS”2ÿ睌ý¹Ìž­¥îq‰.ºR¾½{wCÊdލ¬}˜ËùSQêãÐ( »Mo
+֞ȋH_Óiâü‹ÞFg	ùÁQŒg`Ç
+,±7´ÂJ{]KŸC‘ÁmnM{Êí»oìéeûðQ΢"_«_xîˆ2•¸%&EG—=²0x*ÊkBLhòºgŠ|5
+Y¬ß¾±uÑ´½=»+}Êà\ºÓe,­Y–Äü¢tw at 6`I‘èaâówB´â´²z8
+Nb6RÝ¥•ö¸±dÏjê~°ll‰ÉùšßUö²H+SyçyúÉDHÉ»:‰$ý`Ò´EÅÏrkOƒÐ%ôÏ–»å@pÎï\ƒ¾Qˆ…ƒqF™o;„Þ‹ãl˜¤“—®ø%ˆƒO÷dð ôPf0v.Â/A¶RΘXô˦ÏfoNk64˜wðÖCÅQXƒ‚á9¯&1çÕÎŒ‚,eèz¿¯3í™,”÷ÐYÕøihwôCJ£FHìÉh½Ð“ø‘l#‘D*Ö°JÏj7Nÿr°8$œ–ê0¦Ò¤‡üÀ(ÄÁbÖSæ̏²²ì†áøýõuÓ–E³#K~Ï*oÂDù!á‹™æ‰V×:”îëË+fò¤‘Ñ¥öŽ—ЁEXƲŒÑ@e»„é¾Ú²Ì"ƒÛCÒ™*ÊWÙxÈ» °…ÎÈ×çF£„™r•‹ÖÞØ€«q8–§¦Âš)&`J tf&›Ø6M}00—ސj~Ú‚˜%l©tê§áøP{Á™×PZÖá4-]ê–‘3ÄÊ}(‰7´ú@š­ŒgxŠ8;.¢8KÒd™Ÿ¥£0ÍqgHŽ…»IhBæãÝ‚Ò6:J}ua&‹!€ñ(ì¤þÁЇ‘J]b¯'MßZövoiUMo®‰×•29ÏcBÉHèƒRÃ4Æ›4~”g9ýuýùÓÍÞ,ãIñFà¼(°	4Bé1½#—’	£çjÁv%‘²‘_¢1g^r²Š:¢tТÎqÖ+ô€s ïMa|™<ÇúÂøÀz­ù¶Ž+OT×*·oÓ1j‡+'KH
+s]7M9™¤z!Ï*ò®ŠºJÒQ _	’I7¦lÇ"(íÈVY|j©_c8[6–F<Þkí5I:š•A’¼jÅN¶Â"߶ƒÌ›z_Ûi=PMÝZcÙ*‹z|÷š	¢©	ìùõa<ж½E
+®ç˜u“w½‡Õã0°²Ç¡”?®©M;Áhä°Í¢™)毁" ž€w2çŸòù°B¬»,v”šòv»X9D©/¦Ö¥'»<ûd¨PÄ ë†A©å”&‡Y¸€8í¶Ô4\h!¨ˆØpyF†wdƒÒCEóGYl~ºöô¸“×x¥™Ë¦]0ٍ„#k*žhiòÔÅ`Yð+c_¿8”Í©2ö»B†íIZ6LM–«²‰âÛð	¶7Ù,ÂyÃÀùå…¢ØæSPDpÌ$ºiâEÏ)Ié éæ=°@Ï7Û¼u3¼ÈG¥é]C‹I'PÅج–l~©^Lͤfˆ¹HUáÕ¥«q?bJð·ä¢ûT(˜È;öÅÐKÕƦ@RÌì¿ÿ+ <Ò-Ïï-	¾ âè	€ƒ	5…<NrF mâš^¤pZ8M…IOQR>lX,F=õ@·wa–Ú0“ÿM2`&XûÌ=qÛU’³Ôûú1ý£<û_ë搔„„nÆbGs÷?P&’Ê̓iš~&MêþïÉÒiŸ	f*õâ¾E¨Bgú"
+ÚÍŠ¯šeÖM´a†â•ÂàþV’çlå²­r”r¥OM¢éع´:œŽÃ@ÙýüIìõ'ü¯r$/ú?œ]i¤É`3¸ÙÔ.‚kÌ`iòïCMK¹ððLÛñ¢“#
+»ùÂÑWrVí_Á€ ßFΘMíŒ`„2ZHF£k™§˜þm&GØØ›iR”LÑ"2¼0µ0›ÒîsgÙööä©Ãaš8*.€
+üœ‚^;èsYÁÊŒåzҲشÖãl7Þý`‹îùÈR2?ë‘ÜøËýÕÿ Îõ
 endstream
 endobj
-9582 0 obj <<
+9569 0 obj <<
 /Type /Page
-/Contents 9583 0 R
-/Resources 9581 0 R
+/Contents 9570 0 R
+/Resources 9568 0 R
 /MediaBox [0 0 612 792]
-/Parent 9538 0 R
-/Annots [ 9580 0 R 9586 0 R ]
+/Parent 9525 0 R
+/Annots [ 9567 0 R 9573 0 R ]
 >> endobj
-9580 0 obj <<
+9567 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [361.188 439.948 460.543 452.849]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://localhost:631/printers/)>>
 >> endobj
-9586 0 obj <<
+9573 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [99.895 426.399 176.342 439.3]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://localhost:631/printers/)>>
 >> endobj
-9584 0 obj <<
-/D [9582 0 R /XYZ 100.892 685.529 null]
+9571 0 obj <<
+/D [9569 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2038 0 obj <<
-/D [9582 0 R /XYZ 100.892 660.623 null]
+/D [9569 0 R /XYZ 100.892 660.623 null]
 >> endobj
-9585 0 obj <<
-/D [9582 0 R /XYZ 100.892 638.691 null]
+9572 0 obj <<
+/D [9569 0 R /XYZ 100.892 638.691 null]
 >> endobj
 2042 0 obj <<
-/D [9582 0 R /XYZ 100.892 349.397 null]
+/D [9569 0 R /XYZ 100.892 349.397 null]
 >> endobj
-9587 0 obj <<
-/D [9582 0 R /XYZ 100.892 320.683 null]
+9574 0 obj <<
+/D [9569 0 R /XYZ 100.892 320.683 null]
 >> endobj
-9581 0 obj <<
+9568 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F52 3737 0 R /F53 3738 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9590 0 obj <<
+9577 0 obj <<
 /Length 2124      
 /Filter /FlateDecode
 >>
@@ -50561,39 +53769,39 @@
 šˆœkXt r(¼áëUí™bæ뜕`eEâwݦ\“óóœÝo×n¬5TLcÁˆËÜÁ¾˜/³}÷EJ)¤B2ëA†FÓó”ÞVÄ”n(ëpÚÔŽÍ8Õ†%xlÒÅž}ÙJ¬Vüç|Ä ÍÑÌa„¨Ä}pH‘_7aä1u㘷ˆþ?3çË&ÅòÕpssa&„ßšsö9_‘¹ÈQft´! _; #¤âk_1}ö6*ß’¸„îbòäLØ£2¾9<ð·CÇL3„s¯S9£ÆbÅnØ7Xý›ñ¶ËùöU…9…3Ο“&ó{ŠKp•„o®Îdü8õ=‡”RÈÄ2ôãzÓ2ÿ_–ޏ5<Rh|¯©C'‘î/ä•EyZ°{Rÿzˆ¤à[É«í¬Oo²|õå àåÀß›+BÇLŽ1ó’»ÿ'<Ù	a BÁ‰õ(fhüÆ­.ywçp¼—Ü¡63D2*ÿÑ<åÔ@Wµ®>ƒ†H¨Œ áŸZÈ¡Û¤«ä2"|,Üè\†éæÀ_/\.ÿC=g>=F& ‚ÚöÂBܱõ+sk'|×lÚö+ü€F¦Æ W"|M3¤äIßs"Oó¸¥m¥ä“ c¯ý¤›¬F‰F&8/âO¸U¾]$Y/éHÖaøÛÉ/±ž„䉥à«î5±òQÊ—r–ŠðáþŸÌ¹Íw<Ó\4õȪ']3K÷ÌÐuM­7úЧC›_³hF©5«‘1'šÌåÒàˆÍáÂ<H)@	€¬™ å+íê%ŒÉg ”Ô²öÍpb°”á'ô×~Æ­7–¹ïøÃؽ4€Ðž{Æu×¢'ûV6IJ|z3‹û́þñ”›ÿrhñî  /̯ 4øÉLÃ};^r Ü3½_‰"I!ÚèñôbÞÓïâ·0Ç©Õ«mÚ^Íð×Y²ì±¾m“¢ø&HÁñ]”áÑôÆùX,Šç¤¹fH—PÌåf^áóˆÏþ?™ž‡ôW|+‚Îïí¥"¼cäÄUqƒÊÏŽ'~Ó1mü¾ ló”Ç<ü.ñŽ:‡¹¾Á1àtmj 	Ö¸2âpþËeÙÀÏ_x½ýC…X(
 endstream
 endobj
-9589 0 obj <<
+9576 0 obj <<
 /Type /Page
-/Contents 9590 0 R
-/Resources 9588 0 R
+/Contents 9577 0 R
+/Resources 9575 0 R
 /MediaBox [0 0 612 792]
-/Parent 9595 0 R
+/Parent 9582 0 R
 >> endobj
-9591 0 obj <<
-/D [9589 0 R /XYZ 151.701 685.529 null]
+9578 0 obj <<
+/D [9576 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2046 0 obj <<
-/D [9589 0 R /XYZ 151.701 660.623 null]
+/D [9576 0 R /XYZ 151.701 660.623 null]
 >> endobj
-9592 0 obj <<
-/D [9589 0 R /XYZ 151.701 644.027 null]
+9579 0 obj <<
+/D [9576 0 R /XYZ 151.701 644.027 null]
 >> endobj
 2050 0 obj <<
-/D [9589 0 R /XYZ 151.701 399.348 null]
+/D [9576 0 R /XYZ 151.701 399.348 null]
 >> endobj
-9593 0 obj <<
-/D [9589 0 R /XYZ 151.701 369.106 null]
+9580 0 obj <<
+/D [9576 0 R /XYZ 151.701 369.106 null]
 >> endobj
 2054 0 obj <<
-/D [9589 0 R /XYZ 151.701 295.168 null]
+/D [9576 0 R /XYZ 151.701 295.168 null]
 >> endobj
-9594 0 obj <<
-/D [9589 0 R /XYZ 151.701 257.432 null]
+9581 0 obj <<
+/D [9576 0 R /XYZ 151.701 257.432 null]
 >> endobj
-9588 0 obj <<
+9575 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F51 3736 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9598 0 obj <<
+9585 0 obj <<
 /Length 2164      
 /Filter /FlateDecode
 >>
@@ -50614,39 +53822,39 @@
 Œ(»£_‹ì+Ñ¿n¦o§ß)WsȺ7r"½e5	úC¥©Ñ]‹	È̍\*íL]ÚäíËË_̱4¸,ÿ/ ì‹¢ ºWΡMŒ,F(|‰žÒva¦Cäs›»î%¦¬:7¹ùóÖ%¦Te Á6–æåRçÊë?F×ƒÈ•›hXðõ?F’ôÊÀÒ#‹$/Ï}3iw+øëiã"º¨/N©›IJeuVŒŽ[±Òíí,À˜¿¥¢D'ºÿÝøn}ó“eŠq
 endstream
 endobj
-9597 0 obj <<
+9584 0 obj <<
 /Type /Page
-/Contents 9598 0 R
-/Resources 9596 0 R
+/Contents 9585 0 R
+/Resources 9583 0 R
 /MediaBox [0 0 612 792]
-/Parent 9595 0 R
+/Parent 9582 0 R
 >> endobj
-9599 0 obj <<
-/D [9597 0 R /XYZ 100.892 685.529 null]
+9586 0 obj <<
+/D [9584 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2058 0 obj <<
-/D [9597 0 R /XYZ 100.892 593.92 null]
+/D [9584 0 R /XYZ 100.892 593.92 null]
 >> endobj
-9600 0 obj <<
-/D [9597 0 R /XYZ 100.892 564.71 null]
+9587 0 obj <<
+/D [9584 0 R /XYZ 100.892 564.71 null]
 >> endobj
 2062 0 obj <<
-/D [9597 0 R /XYZ 100.892 460.823 null]
+/D [9584 0 R /XYZ 100.892 460.823 null]
 >> endobj
-9601 0 obj <<
-/D [9597 0 R /XYZ 100.892 433.735 null]
+9588 0 obj <<
+/D [9584 0 R /XYZ 100.892 433.735 null]
 >> endobj
 2066 0 obj <<
-/D [9597 0 R /XYZ 100.892 262.102 null]
+/D [9584 0 R /XYZ 100.892 262.102 null]
 >> endobj
-9602 0 obj <<
-/D [9597 0 R /XYZ 100.892 223.789 null]
+9589 0 obj <<
+/D [9584 0 R /XYZ 100.892 223.789 null]
 >> endobj
-9596 0 obj <<
+9583 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9606 0 obj <<
+9593 0 obj <<
 /Length 2219      
 /Filter /FlateDecode
 >>
@@ -50674,181 +53882,184 @@
 z¬nÐ	»”¥‘ý÷ÛÝÍ¿ yäc
 endstream
 endobj
-9605 0 obj <<
+9592 0 obj <<
 /Type /Page
-/Contents 9606 0 R
-/Resources 9604 0 R
+/Contents 9593 0 R
+/Resources 9591 0 R
 /MediaBox [0 0 612 792]
-/Parent 9595 0 R
-/Annots [ 9603 0 R ]
+/Parent 9582 0 R
+/Annots [ 9590 0 R ]
 >> endobj
-9603 0 obj <<
+9590 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [257.105 446.091 456.922 457.781]
 /Subtype /Link
 /A << /S /GoTo /D (classicalprinting) >>
 >> endobj
-9607 0 obj <<
-/D [9605 0 R /XYZ 151.701 685.529 null]
+9594 0 obj <<
+/D [9592 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2070 0 obj <<
-/D [9605 0 R /XYZ 151.701 542.791 null]
+/D [9592 0 R /XYZ 151.701 542.791 null]
 >> endobj
-9608 0 obj <<
-/D [9605 0 R /XYZ 151.701 510.639 null]
+9595 0 obj <<
+/D [9592 0 R /XYZ 151.701 510.639 null]
 >> endobj
 2074 0 obj <<
-/D [9605 0 R /XYZ 151.701 400.056 null]
+/D [9592 0 R /XYZ 151.701 400.056 null]
 >> endobj
-9609 0 obj <<
-/D [9605 0 R /XYZ 151.701 370.915 null]
+9596 0 obj <<
+/D [9592 0 R /XYZ 151.701 370.915 null]
 >> endobj
-9604 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R /F85 5513 0 R /F96 8585 0 R /F53 3738 0 R /F51 3736 0 R >>
+9591 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R /F85 5513 0 R /F96 8572 0 R /F53 3738 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9614 0 obj <<
-/Length 2976      
+9601 0 obj <<
+/Length 2989      
 /Filter /FlateDecode
 >>
 stream
-xÚ­\ߏã¶~ß¿Âhû ·\þ–´EÓ\š6@ƒ-nMqwÚµÖkœWv$ùö’¿¾3Z²{m‹zшõi8ü8‘óÉ|Â'?\ýýîêæRNRæR.&wÁ9ËœœØÌ1ãôän6ù¼+šÅªœ~ºûÑ7Ϙ³Vcsé‡ÖœÚIÉgÓkÁ­L¾[•¹ÐóMµ(çÓkeLòÝûÛwx¦“ÇÕTñ¤¢ÂÛjñ¥¨¨É[á¥\®ò=ÏpPŠ9î¼~
-ÎSm¶OÔN`««ïï®~¹Pwú`˜R“‡ç«Ÿød×~œp¦\6yñ-Ÿ'ÊdÌD[NÞ]ýçŠïÚE˜Ý· Ú1ßy|ü?WS™%/x(¾LešÕêÇ檊/4Ë_±Š'«’ÎDòßE9£;kªøéî
-µ‘œó€—3ºøó-]Ë«‚*êÍz=½†ÛWUSÌèâ=Âøæ©@£@O®…bF;R6X?SÉîu®j-ãLò¿)T¯6tùe±\â™Nòe½¢º²ðO‚º&ÔÌ‹&T<TS5é…t¡P‹õT€ö¡ùê‘Z‡Ûtòílu·ñvµ6¤t§*4V*YàÝJCW±ÿªÊ© Ô옞ÝÐÅ}³C+gÞЗ½¡2:œü» +ËEF0•ç£H'B0gŒDZ€¶Z2™™Ý a
- _’ÛªXçS%?r63;	ZWTªŸïÙê|¤N	‘„K›uÏfÐ"<t‹ðPIÄõ½­ÐM°`êû/Ó,Á^oÊgށI”Š2ÛΡöYS%“ƒÏ³–Ùι7hX׍ >—FÀk€ÃŠ*ÔEÓÀókª^ïaÔÞ¤’0©¤Ø"·9 ƒÎX¦Õ¶e`ë§N»>¹VÂ2
-´Ç{zt;·'ü ÿ5^/Ã(Ç%Ñkš°ãîÅHÔ.íû—Ô¥Gý‹÷+ûcÑ¢a]p+n0OZ§JÊõíâKSÙYG¥¥tízµª™Û‘ÆFDô÷u>/^é$·ÌÊtˆž¢øaÚYo6ÃÚ#c½²ø 3QÌÁdªŠÉãP–šeÜõµ@³\½ž8x¥Ië
-ºU ³0 9O_³‘a<»èEó»§j«˜€—Uÿ±š¹×ÿ=%\
-ô°0= Ë+:ðà·zêØH§Lq³èGš™lëC/è>T0ëe`Ú@lÌA/6˜E£˜8Ö6\éè$¸d‘vÜCp„`Æs™@0&´L–(À7¸'‘·×°å§sÉ—¦Lªtò]u‚|`4ùzPqä‹×«%ÌæŽu€|"g'+¾Ýƒ/Cº	åé&´ç” fȬƒøðZ@Ä[¡°É‚J%•Å^xû[k“¿€Ã^Á}°)¸ƒkg’ÖˆÛÆñ˜—C mMÚTiãõj‰6‚ù‡c ­¡xA[4mð˜HL­=ë@,H”$˜Úô*Á·‚u=1¹H¦×Ž'\ûãÙä4Ð39ŽG½ê9;Àhrö âȯWK¨Ì?ë°GuV§Buä”Ö“S¡TR©¡Ò‰œ*á†T9¢ª¯Sɳ?‚ç„ï»X«Sé8.õr¨¬í £YÛƒŠcm¼^-ÓF0ÿp¬CAhÆt
-¬ÕÚe]*ÒÓ¯|C¯|â7”jºïìT:¦……Š—C bMÅTãõjé3‚ù‡cr ¸f
-öRŠq(8:ðz+|Þ9þXú#pÑ(Š4•I¾EGª},+ŠÌšä–¾™*ú*©Ô(¨249۝Š”i+FáðåP'8ÜFs¸Çáx½Zލ`þáX‡ƒ R0®³6È8¾ËáØøã.è$¬±"¹¡ õ¼Æ
-6säO¡
-¯à*-R™¾À@¬vDæiž:l™ùO.å#	8>û#. ¦Ps&™¹a†ã/‡:Aæ0šÌ=¨82ÇëÕpóÇ:²F Ð^¸ƒò½ß7ñ´2¥5UTÊ©nX’(p9 at zêæê@Σ§r¸ç4Š¯ õ:=w céÙ‡Š¢çzm)5†ù‡cѶŒÛ]
-K34=Ω
-ÎöøqO.ÓÒr“Mý¾%5™£çÔ¸ÊåpwëóÒéjMßfÀyJ,\×Ê|7þX¡‹w4AÍ—ü‚ÞÚ°aiA¥ý&ÏTJ%•*¨L0ãFqà N̐0z†ô âfH¼^-«G0ÿp¬#K±™¤2'JmöèV·tKÓélÒä3†'·ÕÂ
-\ÀUÖ1«ÇqÙ—C dMÈT!ãõjI4‚ù‡c^ÀåЕ*&eJ„ÄàAeÞ‚XhHä$îI,I`¡ÝÀ¤ÌÂKcB^u‚`4!{Pq„Œ×«%ÑæŽudG}‹`2•;
-´ì¥iÙKÓ²—6Û
-…œ®ÝSiIi	n3Î_jˆiÔ(ì¼é9[¼hnî#ÅQ3Z«–Mñ–u˜—h)Ç”HwhIq¥áDË°Oàˆ–IW¦´” }èªýj qYûÖž*¢¹Ô´œÐŠæ\º*üeÓ8Þôr¨„í £ÛƒŠ£l¼^-ÑF0ÿp¬ã›	JÁXÙn&H§=}•¢·¼¢·¼òôѐøµ<wû@IÁÆùmÀåH'¨×âE3o)ŽxÑZµ\‰·ü`¨ãûJ¦y:hß@ӁÒ{¥Ÿ(½%hÑ6É,OÞîìíÚíÞîÅÞµ³ßþܱ̎ãN/‡:Áé0šÔ=¨8VÇëÕrqóÇ:º™ „bäÙ›	-Á*Z>Rþ×Zâ&Azd“À×dÛH.1j†öË헁@nšݵs¹-AºQ.GzÙ^,±{HQ¼Ž×jKÅ,?êø¦‚â‚igGÞTh¿¼(æÙùüÌè­G!èåP'ÚFS´ÇÑx½Zf`þáXÇ—N%æØi1xéôò*™*朅ˆ—C bMÄTãõjÉ3‚ù‡c&b*q,SèUð—è(9ýd…SB ½³qãiE~¯$±$ñ+¹Æ¨µ)i%ãzy9Ô	bv€ÑÄìAÅ3^¯–L#˜8ÖÁ%*À1Ì*Ñ­ãKZ ’a“V¦”÷•Nd£>žDùÂý§R7éû‹ÓBW[É¡6ìƌÛäoàO5Þ­ýWï}ÍÚŸWþ|áÏKl|MîÏgá®S”§3	ƒÏ%ÿMˆÔï¾dDþBf¢ÍC³ÇÓß|G¸%ý­÷T³—ŽÙ—‡µÑ'·’j³ŸÖÛ¢qÍø6’¤LL’{C:µM“ðá~‹É»«ºy÷P-Ö
-Õ·yíÖî$¼C‘1Ͻ¦–?ÝÝHοÞü|û‡×ò}õn"·4"ÙÔEUÓés2À±às³¥á!jŠ¯ùCC§uþ*×ùÞôyŠéæóPùX­žC®®ÜUB*˜0Z!ÓôÏ{CÓOì͘Îô¶éSÓ¬¿¹¹yyya˜ÊVÕü†òu¥ÖLˆýtÝzõؼäUÁžšçeÿ!{¥¾]۔࿲êÑ&.c®;Ìôáð¤0k’ø¹šš¤.Öy•7UzÓ`°e,™+½i|cJ^‡*‹ëû¼ö	èˆÚ·ÿ	€û¾Ÿ™„é™í%¶ã#,‹“©-ŒS>ŸûjÌÁ«I†a†3ÁûJ§{9ìXÑQ‡Ê·Õ‚òÕ‘yXñv'ƒ^j	LÞ唜ú³€Üð&¯Øü7ÐP;•'?C¥ #fp×@[úQzNa3ÐQÎBb¶ÿ#_³¨¥€K©`¦¹Ýdôk`è}~í{ÍH‰Cc+”€èegt)Ü Mõ~oÞ‡?()çyCÊ«½¤
-õ¿-ÖëÅT$å<ü3À¢¡6á?p•9üÓCÊ@…º Ó0¦ßôZà­þyá
+xÚ­\mã¶þ¾¿ÂhûAn¹|	Úi®M Á·ASÜåƒvWë3âµI{{ɯïG–,Å>Û¢¾hDŠ~8>H“|¶˜ñÙ·W»»ºù‡”3Ç‚ãbv÷4œ3äÌúÀLг»ÇÙûì]ñP/7ëùOwßÅâžk5—q(Í©œ”Lp6¿ÜÊì›ÍúzñR.׋ùµ2&ûæ‡Ûwx§³§Í\ñ¬¤ÄÛrù©(©ÈÛøàu½ÚäTŸá <DýÜ;mv5ê °ÔÕßï®~¹…÷Ú`˜R³‡ç«÷?ñÙ#<ûnÆ™
+~öK>Ï”ñÌD[ÍÞ]ýçŠïÛE˜ýŠ[PXl<VÿÏÍ\úì/ŧ¹tYQ¾¡v<¼”e±ÆõêWÌâÙfMw"ûïrýH¿¬(ãû»7TFr΄|ýH¼¥gyYPFõ²Ýίá盲.éá=Â5ðõǍ-¹ŠHÙÆú^e`ð¨sYAo™`²ÿÍ!{óB_—«Þé,_UÊ[±&È«›œEQ7Ê)‹ŠôBºPTb; }S|óD¥›ŸéìëÇÍ=üŒ·¯µ!¥;U¡°RÙ­44ÛÿB™rªQröLu×ô°ov(ÌzüÊ!£ÃÍ¿zò°Z6ݦŠ|n&ÆH¤h«<Fï 	C ø’Ý–Å6Ÿ+‘Åž³Ì$h]Rªz¾g›õ¥pHˆ¬yôð²­òÇG(ÑTÚã"T*Ó²©ô¶\B3!ËÅöKç3lõËz#ïÀ ò ¢ô»1ÔÖ5W2;XŸµÌÈv̽AÆ®°^ꁨv+ªPu
+õW”½l¼‡Q½A%aPI±Cn
+r@í™×jW2o`«v¯ºBX¦¡ƒz¼§ªÛ±={;øïŸóçíªéåÆq‰LŠfì¸{1Ðfè]\pG½Kô*ýžh±`¯Š
+wªÁ0i}*é64KPÌ9Ù;¥e´ì	µ).·…ˆç?Tù¢øBÁàðG¸PPQá-Šo÷ƒÝÝÌp~1[Ã,0L±àͬ,fOg u:
+¦ùï”Ðÿgùy=ð>“6š³Ñ!%£~àÜ}ÉB‚Y(z‰~W«¶Š	èýaµšØØkO‰à€v¦ƒaΛ/éÀ§50ÀPÇ:Ú1ÅÍ>`ìifü΁^ÚÑC¨Æ¬—ivSè…ÝchóÇÚÅ*—Llb`
+œC¤Ó{ï\f‰	-³
+ð$îIäí3,ùÓ¹äóŠy5	÷.F:A½/™y}¤4â%kÕr%Ýò£¡°c¯ÑV.¾ƒ#ëgBEž		)ˆ¼
+^ˆsK6[RjM©šDÑ+ï|kmö’c°+x1ðìL¶:Á¼›ÆU^u‚¯`2aPiŒM׫åÙæu€´†íÓVi‘˜ZGցX’X“@bj3ȧ
+֍Ää"{˜_ž½Äë6^Ï&'<ÈI¸y1Ò	j¶xÉÌì#¥3Y«–Ké–
+uØ•«#¤á¶c¥´‘•’©5¥jJ=È)~àT ŽÆ<•=Ç+¸Løœ›€®ÚšÓøÒË¡N¶Lfì *²ézµD›Àüã±…¾^€µF0cDv
+wú]oè]Oü†TE¿;;U–q&¡âåP'¨Ø&Sq •FÅt½ZúL`þñX‡(NQ£½p»q àèÀëmâõyïZÄë:^‹FQˆ©Lö5:RƒX©Pxk²[úJ*I,éÓiM©šDA™M‘³Ý©ÔŒ=	‡/‡:Áá0™Ã¨4§ëÕònóÇ:€ÕÒ1«»ÈÔs|—õŽ×8/°ÆŠì†¢ÓOð7X,?…,|‚“²Heúô±Ù>ÒÜ,éã·–Š‘\Ÿã'äœIf!Ó8äË¡N¹L&ó *ÌézµœÀü㱎L´—aÖ7ù>.“D†
+š‹‚Ô+‰Š2Jå”j~°"Qà<€ŒÔ71ÌÕ@Τ'Çï¾i|íåP'èÙ&Ós •FÏt½ZJM`þñX‡§88YÍsªûÞR
+?Œ„Ò‘z*Æ (–”	……ÏŒD 	©@Rþì·¾òž	?‰£õe&î¦2q•ÄÄ	ôÚ±g
+óÇ¢ÁÐûˆ¢ùs®Yÿ#Î/ÑËÛÒŒ§u1ÖìÄ’ÄšŠ,ð®q¢5à²:^·{÷ëx¥§Í€÷…Pu	Lö1®/ñZb°ÈUÅAü‚qCœ:ÀÔ’Rý"ϔ٤֔ª)uöq–I5‰¯ub„t€É#d •6BÒõjY=ùÇc™ãˆ!E³¸µ F½ôØVµlsÎ!›Ë~Æ89ô<öÅKÊj&Ÿ„—Càc˜ÌÇTÓõj94ùÇc‰<6Ñ1oQ¬òÑ‚X’¨Iä$îI¬H`0«Ã¸`VÉ”œd	vÔ	Bv€É„@¥2]¯–D˜<Ö‘5-ìJÃÂþŠM¿jš~Õ4ýªÍnE+§g÷”Z‘@V‚×Ls—ô·Ó¸ËË¡N°³Lfç *ézµŒšÀüã±³­¥b©Ž\Nìl–­±“ÂIƒKG3[:Ư:NN¥uŒkMCWEl—šf·ZQŸËZé™ÓøÔË¡N°¶Lfí *µézµL›Àü㱎¯m)åBh׶d뉂roj at Eú‚¨Iü‰Jž»šÿÆj¦q™—C _˜L¾TùÒõj	3ùÇc_ÍRg©ô¨Õ,MWJ÷xJÿ`QzÇÓ¢-â-ÏÞîýãÀîþqð‰DÑ{vv,À53|¯z9Ô	bw€ÉÄ@¥;]¯–Œ˜<ÖÑ%.Εûpþ—§…ESI*þ‡E at I\ºrG–®bŽ·XFr‰Áƒ0´ŠkhrÛÐ(螝Ëmdì¯	¸=êËÜÞLåö*‰Ûèµããæu|ÅKËÀ§N¼â5~½AzÎÌ42u‚¦`2MPi4M׫¥Öæu|6UzÍ„£§S/Ÿµ’ºDMã//‡:AÄ0™ˆ¨4"¦ëÕ’góÇ:LD·ÒI&w;ÑQrú?§ý)ôêƵ¨
+ù½5‰‰_É5&MXIc™õÓxÈË¡N³L&æ *˜ézµdšÀüã±NXÁ9’wsû’¦«d³ìIóT*úÊ ²QŠV¢À½ª"Î8©g§h¢4’Ùà&Ù>‰XÆýÎF2aû$BjíÛ}ŒöøöÉØ’/‡ZgoŸVkz›y‡ò°:úä‚ÐAuú›Â[4.™·vk¸j¶†7›ñ­Ë>@tx‹[¿7Uýî¡\nkÊoOE°vï¸HÐ6v<%¡¢’ßßÝHÎ?ßüxû‡3v‹SÍÒˆì¥*ÊŠnŸóæü LĝýÒðf/7äŸó‡šn«ü¹ÉÜæø£ŸçxXÁ¢É|*7ÏÍNo¹¯„T†aw5•ÿÜëšá¶pÏ´×»¢ëzûÕÍÍëë+Ã
+ÌlS.nh·7v–ýÍÞÕæ©~ÍË‚}¬ŸWÃJz9Í´i7”ÿõåPvÛ;ž”`}ö/짳eE¿3Éªb›—y]Pf4
+†GÆ’i03š&¦£ ûâú>¯âñˆÚ·'Jày±^ÂØõývâÑ«¢Â½ø:*_,â|ÜÅY‘lúîì3ÝöŽ@ÀŒŽ;”¾-—tÜR3ÞîÀ µ*6Þ崏<?pjÃnx—lñ(¨ƒÊD?C¦ #zøÑ@Ã×<5c9…i<¿ åc³­?s–Õ¡¤T0ÒÂþQ×ÀÐûü:6š‘‡úV(ñÆ^ïÒiªû¶þ¡9JbM[æ_È@yÙ;2BCþoËív9ÙzÑœ+±¬©Ls¢Î7ç„äM¨PtÛtéW½x«ÿ5‹ 
 endstream
 endobj
-9613 0 obj <<
+9600 0 obj <<
 /Type /Page
-/Contents 9614 0 R
-/Resources 9612 0 R
+/Contents 9601 0 R
+/Resources 9599 0 R
 /MediaBox [0 0 612 792]
-/Parent 9595 0 R
-/Annots [ 9610 0 R 9611 0 R 9640 0 R ]
+/Parent 9582 0 R
+/Annots [ 9597 0 R 9598 0 R 9628 0 R ]
 >> endobj
-9610 0 obj <<
+9597 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [112.623 534.958 193.252 546.648]
+/Rect [112.623 540.321 193.252 552.01]
 /Subtype /Link
 /A << /S /GoTo /D (cupsadd-ex) >>
 >> endobj
-9611 0 obj <<
+9598 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [344.006 172.021 460.543 184.014]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.cups.org/software.html)>>
 >> endobj
-9640 0 obj <<
+9628 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [99.895 158.775 176.342 170.465]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.cups.org/software.html)>>
 >> endobj
-9615 0 obj <<
-/D [9613 0 R /XYZ 100.892 685.529 null]
+9602 0 obj <<
+/D [9600 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2078 0 obj <<
-/D [9613 0 R /XYZ 100.892 601.176 null]
+/D [9600 0 R /XYZ 100.892 604.077 null]
 >> endobj
-9616 0 obj <<
-/D [9613 0 R /XYZ 100.892 572.319 null]
+9603 0 obj <<
+/D [9600 0 R /XYZ 100.892 576.45 null]
 >> endobj
 5097 0 obj <<
-/D [9613 0 R /XYZ 100.892 521.305 null]
+/D [9600 0 R /XYZ 100.892 527.898 null]
 >> endobj
-9617 0 obj <<
-/D [9613 0 R /XYZ 100.892 504.435 null]
+9604 0 obj <<
+/D [9600 0 R /XYZ 100.892 511.028 null]
 >> endobj
-9618 0 obj <<
-/D [9613 0 R /XYZ 100.892 498.458 null]
+9605 0 obj <<
+/D [9600 0 R /XYZ 100.892 505.051 null]
 >> endobj
-9619 0 obj <<
-/D [9613 0 R /XYZ 100.892 504.734 null]
+9606 0 obj <<
+/D [9600 0 R /XYZ 100.892 511.327 null]
 >> endobj
-9620 0 obj <<
-/D [9613 0 R /XYZ 100.892 492.779 null]
+9607 0 obj <<
+/D [9600 0 R /XYZ 100.892 499.372 null]
 >> endobj
-9621 0 obj <<
-/D [9613 0 R /XYZ 100.892 480.824 null]
+9608 0 obj <<
+/D [9600 0 R /XYZ 100.892 487.417 null]
 >> endobj
-9622 0 obj <<
-/D [9613 0 R /XYZ 100.892 468.869 null]
+9609 0 obj <<
+/D [9600 0 R /XYZ 100.892 475.461 null]
 >> endobj
-9623 0 obj <<
-/D [9613 0 R /XYZ 100.892 456.913 null]
+9610 0 obj <<
+/D [9600 0 R /XYZ 100.892 463.506 null]
 >> endobj
-9624 0 obj <<
-/D [9613 0 R /XYZ 100.892 444.958 null]
+9611 0 obj <<
+/D [9600 0 R /XYZ 100.892 451.551 null]
 >> endobj
-9625 0 obj <<
-/D [9613 0 R /XYZ 100.892 433.003 null]
+9612 0 obj <<
+/D [9600 0 R /XYZ 100.892 439.596 null]
 >> endobj
-9626 0 obj <<
-/D [9613 0 R /XYZ 100.892 421.048 null]
+9613 0 obj <<
+/D [9600 0 R /XYZ 100.892 427.641 null]
 >> endobj
-9627 0 obj <<
-/D [9613 0 R /XYZ 100.892 409.093 null]
+9614 0 obj <<
+/D [9600 0 R /XYZ 100.892 415.686 null]
 >> endobj
-9628 0 obj <<
-/D [9613 0 R /XYZ 100.892 397.138 null]
+9615 0 obj <<
+/D [9600 0 R /XYZ 100.892 403.73 null]
 >> endobj
-9629 0 obj <<
-/D [9613 0 R /XYZ 100.892 385.182 null]
+9616 0 obj <<
+/D [9600 0 R /XYZ 100.892 391.775 null]
 >> endobj
-9630 0 obj <<
-/D [9613 0 R /XYZ 100.892 373.227 null]
+9617 0 obj <<
+/D [9600 0 R /XYZ 100.892 379.82 null]
 >> endobj
-9631 0 obj <<
-/D [9613 0 R /XYZ 100.892 361.272 null]
+9618 0 obj <<
+/D [9600 0 R /XYZ 100.892 367.865 null]
 >> endobj
-9632 0 obj <<
-/D [9613 0 R /XYZ 100.892 349.317 null]
+9619 0 obj <<
+/D [9600 0 R /XYZ 100.892 355.91 null]
 >> endobj
-9633 0 obj <<
-/D [9613 0 R /XYZ 100.892 337.362 null]
+9620 0 obj <<
+/D [9600 0 R /XYZ 100.892 343.955 null]
 >> endobj
-9634 0 obj <<
-/D [9613 0 R /XYZ 100.892 325.407 null]
+9621 0 obj <<
+/D [9600 0 R /XYZ 100.892 331.999 null]
 >> endobj
-9635 0 obj <<
-/D [9613 0 R /XYZ 100.892 313.451 null]
+9622 0 obj <<
+/D [9600 0 R /XYZ 100.892 320.044 null]
 >> endobj
-9636 0 obj <<
-/D [9613 0 R /XYZ 100.892 301.496 null]
+9623 0 obj <<
+/D [9600 0 R /XYZ 100.892 308.089 null]
 >> endobj
-9637 0 obj <<
-/D [9613 0 R /XYZ 100.892 289.541 null]
+9624 0 obj <<
+/D [9600 0 R /XYZ 100.892 296.134 null]
 >> endobj
-9638 0 obj <<
-/D [9613 0 R /XYZ 100.892 277.586 null]
+9625 0 obj <<
+/D [9600 0 R /XYZ 100.892 284.179 null]
 >> endobj
+9626 0 obj <<
+/D [9600 0 R /XYZ 100.892 272.224 null]
+>> endobj
 2082 0 obj <<
-/D [9613 0 R /XYZ 100.892 224.993 null]
+/D [9600 0 R /XYZ 100.892 222.532 null]
 >> endobj
-9639 0 obj <<
-/D [9613 0 R /XYZ 100.892 195.471 null]
+9627 0 obj <<
+/D [9600 0 R /XYZ 100.892 194.241 null]
 >> endobj
-9612 0 obj <<
+9599 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F4 5484 0 R /F59 4373 0 R /F52 3737 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9643 0 obj <<
+9631 0 obj <<
 /Length 973       
 /Filter /FlateDecode
 >>
@@ -50864,21 +54075,21 @@
 Äð±•Î>‹J«Üvúy¹¬{©ªò×£Àæ‹=vxÞá#k^áÛí'#b´Å
 endstream
 endobj
-9642 0 obj <<
+9630 0 obj <<
 /Type /Page
-/Contents 9643 0 R
-/Resources 9641 0 R
+/Contents 9631 0 R
+/Resources 9629 0 R
 /MediaBox [0 0 612 792]
-/Parent 9595 0 R
+/Parent 9582 0 R
 >> endobj
-9644 0 obj <<
-/D [9642 0 R /XYZ 151.701 685.529 null]
+9632 0 obj <<
+/D [9630 0 R /XYZ 151.701 685.529 null]
 >> endobj
-9641 0 obj <<
+9629 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9647 0 obj <<
+9635 0 obj <<
 /Length 1635      
 /Filter /FlateDecode
 >>
@@ -50897,28 +54108,28 @@
 2ÙþÊÚ?éÀG¼tåáãUh`ðù7z^ßWÅŸôv¸MM8Ê0õº…ug÷Ü|ŽµÖZtòüŠ	.Ü µÙ³¸ *ßuHk¶2¶ Týš S7–³«g]Ú'þÇ¢Ê	†VOÓd|­±àJÑü4gp®ž©Öî=Ö9~;‹ Æ¿Om%ÊBÓèÞÍ[¸ë#eÁzr>„ó¤µ\œà”J; €q®Î4ðó³¹ÈÝs^aüèæŠYã#W lêäÐéu‡¤{n>O¿igdϐ!ù݆òfÓ°œ^AÿÐØ÷GÕÎ]G*Ÿåõ¾ý¤:A¥Lly@öf¯Ô¬(m—J7¤›5rMàYD(B06­JËÝšÑiƬ²v¯ù\P&àÌ!J ~ÒÇ´ˆ¨ûP´Õ¶qanJåþeXeæµJrè}3w͉“‡‰.šzETçôÓ¨6ó"êÎtx˜vت=î ùJ#ÛAirÚ?×—ÿŸþy6¹BCïÞÎnÙõÕõGö³É»ç—Ó[É&7ðŸœûþ;‹¯ÞL¸±ÉåÕôŸÀ³Á¦ÓÉÑQ÷…ÿ5Š)\ù
 endstream
 endobj
-9646 0 obj <<
+9634 0 obj <<
 /Type /Page
-/Contents 9647 0 R
-/Resources 9645 0 R
+/Contents 9635 0 R
+/Resources 9633 0 R
 /MediaBox [0 0 612 792]
-/Parent 9595 0 R
+/Parent 9582 0 R
 >> endobj
-9648 0 obj <<
-/D [9646 0 R /XYZ 100.892 685.529 null]
+9636 0 obj <<
+/D [9634 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2086 0 obj <<
-/D [9646 0 R /XYZ 100.892 424.306 null]
+/D [9634 0 R /XYZ 100.892 424.306 null]
 >> endobj
-9649 0 obj <<
-/D [9646 0 R /XYZ 100.892 396.892 null]
+9637 0 obj <<
+/D [9634 0 R /XYZ 100.892 396.892 null]
 >> endobj
-9645 0 obj <<
+9633 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F88 5678 0 R /F72 5679 0 R /F53 3738 0 R /F17 3698 0 R /F15 3700 0 R /F51 3736 0 R >>
-/XObject << /Im3 6520 0 R >>
+/XObject << /Im3 6519 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9653 0 obj <<
+9641 0 obj <<
 /Length 1636      
 /Filter /FlateDecode
 >>
@@ -50936,34 +54147,34 @@
 썴œHêò%Øó£±#ÑI‘èt8p,œWWð°Ô1ÿ=FÒ Y3ogP¸ÙOÜ_ÑŸgZvÁŸ!È<]ÿ~8}h©á`à[X'yd@Ìúì—5I¶õªã×VJ=€Ü¼é\ÒHŽ¬C÷Ÿ¼j{|¡BâQáDì·¹OþïccÂüuY퇈¶øï–¿%´¢$˜EÊHÎ[dyH!qô ‡õãnDÞ ¦ü«Þƒ8ÊXÕ’¿mýŒ†o㺦p|ëðŸbÿ…7ÜŸ7GU7
 endstream
 endobj
-9652 0 obj <<
+9640 0 obj <<
 /Type /Page
-/Contents 9653 0 R
-/Resources 9651 0 R
+/Contents 9641 0 R
+/Resources 9639 0 R
 /MediaBox [0 0 612 792]
-/Parent 9657 0 R
+/Parent 9645 0 R
 >> endobj
-9654 0 obj <<
-/D [9652 0 R /XYZ 151.701 685.529 null]
+9642 0 obj <<
+/D [9640 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2090 0 obj <<
-/D [9652 0 R /XYZ 151.701 345.343 null]
+/D [9640 0 R /XYZ 151.701 345.343 null]
 >> endobj
-9655 0 obj <<
-/D [9652 0 R /XYZ 151.701 321.164 null]
+9643 0 obj <<
+/D [9640 0 R /XYZ 151.701 321.164 null]
 >> endobj
 2094 0 obj <<
-/D [9652 0 R /XYZ 151.701 181.368 null]
+/D [9640 0 R /XYZ 151.701 181.368 null]
 >> endobj
-9656 0 obj <<
-/D [9652 0 R /XYZ 151.701 152.274 null]
+9644 0 obj <<
+/D [9640 0 R /XYZ 151.701 152.274 null]
 >> endobj
-9651 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F51 3736 0 R /F15 3700 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F59 4373 0 R /F96 8585 0 R >>
+9639 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F51 3736 0 R /F15 3700 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F59 4373 0 R /F96 8572 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9660 0 obj <<
+9648 0 obj <<
 /Length 2236      
 /Filter /FlateDecode
 >>
@@ -50981,35 +54192,35 @@
 äçÓÇ’ñ…#^?(߇ÆÅô}åKƒßßo%ç_·?߆‡•±Ê¡¼||‘\ô‰u‰ç3æ# ~ëxn=Šƒè]’Äd<PBÒ0nôüI/“·Þ„Y§H´xÙßfW ˜“‹ØºÛ÷ýá¯ÛíétbÅÏ݉íšj‹”'PÛ÷Uyµ×ìh ’\låï3Úë/ˆê_l¡8
 endstream
 endobj
-9659 0 obj <<
+9647 0 obj <<
 /Type /Page
-/Contents 9660 0 R
-/Resources 9658 0 R
+/Contents 9648 0 R
+/Resources 9646 0 R
 /MediaBox [0 0 612 792]
-/Parent 9657 0 R
-/Annots [ 9650 0 R ]
+/Parent 9645 0 R
+/Annots [ 9638 0 R ]
 >> endobj
-9650 0 obj <<
+9638 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 290.398 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.easysw.com/software.html)>>
 >> endobj
-9661 0 obj <<
-/D [9659 0 R /XYZ 100.892 685.529 null]
+9649 0 obj <<
+/D [9647 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2098 0 obj <<
-/D [9659 0 R /XYZ 100.892 515.759 null]
+/D [9647 0 R /XYZ 100.892 515.759 null]
 >> endobj
-9662 0 obj <<
-/D [9659 0 R /XYZ 100.892 488.341 null]
+9650 0 obj <<
+/D [9647 0 R /XYZ 100.892 488.341 null]
 >> endobj
-9658 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F29 5413 0 R /F17 3698 0 R /F59 4373 0 R /F96 8585 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
-/XObject << /Im37 9083 0 R >>
+9646 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F29 5413 0 R /F17 3698 0 R /F59 4373 0 R /F96 8572 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
+/XObject << /Im37 9069 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9665 0 obj <<
+9653 0 obj <<
 /Length 828       
 /Filter /FlateDecode
 >>
@@ -51018,22 +54229,22 @@
 ¹ DM‰ä—¥ÈáÀ|’â9ˆCÊpℽA‘5DZõi(k}Æ”Ê/`<LåÂkÐ,¨áÿÿš„€krüw¿¦ì…×$´$ŒéÄòm²t¸êÓßJ0v«(ýv¨ÇˆmQçCšLZŽîÊdýDºÌRÂÝI—¤«à†á™tã›Ì¹%:)“u		h¡ð¶k÷Éšk;yª´]×+_µÍÉ•Fh?NÛÁQöD¦ú®èw«®,£iýŒÒz8ôÅøäŠÇ24†8cNV]¹ö©33+0	•dxš’àÅ}BafŽz§‚†3W›M¿ÿü؁Z+O±©¢±R§¢2ý ªà'²ð×çmUP‰Wƒo÷PË5”ô˜b±ý•Ûø?ƒyzrˆ©Ý7É;Ö%­Y¥Ð4—Ùlúyž}Îò =¿»Ð›$åЛøSzw”(­/÷Ïß*ýÓæô$)™_ y˜ÌôÏŸÆïÉ!o
 endstream
 endobj
-9664 0 obj <<
+9652 0 obj <<
 /Type /Page
-/Contents 9665 0 R
-/Resources 9663 0 R
+/Contents 9653 0 R
+/Resources 9651 0 R
 /MediaBox [0 0 612 792]
-/Parent 9657 0 R
+/Parent 9645 0 R
 >> endobj
-9666 0 obj <<
-/D [9664 0 R /XYZ 151.701 685.529 null]
+9654 0 obj <<
+/D [9652 0 R /XYZ 151.701 685.529 null]
 >> endobj
-9663 0 obj <<
+9651 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F88 5678 0 R /F72 5679 0 R /F53 3738 0 R /F17 3698 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9670 0 obj <<
+9658 0 obj <<
 /Length 1781      
 /Filter /FlateDecode
 >>
@@ -51057,37 +54268,37 @@
 ø
 endstream
 endobj
-9669 0 obj <<
+9657 0 obj <<
 /Type /Page
-/Contents 9670 0 R
-/Resources 9668 0 R
+/Contents 9658 0 R
+/Resources 9656 0 R
 /MediaBox [0 0 612 792]
-/Parent 9657 0 R
-/Annots [ 9667 0 R 9672 0 R ]
+/Parent 9645 0 R
+/Annots [ 9655 0 R 9660 0 R ]
 >> endobj
-9667 0 obj <<
+9655 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [373.995 197.332 403.108 209.021]
 /Subtype /Link
 /A << /S /GoTo /D (classicalprinting) >>
 >> endobj
-9672 0 obj <<
+9660 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [144.531 183.783 316.104 195.472]
 /Subtype /Link
 /A << /S /GoTo /D (classicalprinting) >>
 >> endobj
-9671 0 obj <<
-/D [9669 0 R /XYZ 100.892 685.529 null]
+9659 0 obj <<
+/D [9657 0 R /XYZ 100.892 685.529 null]
 >> endobj
-9668 0 obj <<
+9656 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F88 5678 0 R /F72 5679 0 R /F53 3738 0 R /F17 3698 0 R /F52 3737 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9675 0 obj <<
+9663 0 obj <<
 /Length 2354      
 /Filter /FlateDecode
 >>
@@ -51117,27 +54328,27 @@
 gï7†ÄâêÖc=êû¶¸zÛ-¸ËkÀxC õ)0ÿ¡$ÿÜL³
 endstream
 endobj
-9674 0 obj <<
+9662 0 obj <<
 /Type /Page
-/Contents 9675 0 R
-/Resources 9673 0 R
+/Contents 9663 0 R
+/Resources 9661 0 R
 /MediaBox [0 0 612 792]
-/Parent 9657 0 R
+/Parent 9645 0 R
 >> endobj
-9676 0 obj <<
-/D [9674 0 R /XYZ 151.701 685.529 null]
+9664 0 obj <<
+/D [9662 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2102 0 obj <<
-/D [9674 0 R /XYZ 151.701 660.623 null]
+/D [9662 0 R /XYZ 151.701 660.623 null]
 >> endobj
-9677 0 obj <<
-/D [9674 0 R /XYZ 151.701 641.703 null]
+9665 0 obj <<
+/D [9662 0 R /XYZ 151.701 641.703 null]
 >> endobj
-9673 0 obj <<
+9661 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F51 3736 0 R /F52 3737 0 R /F85 5513 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9680 0 obj <<
+9668 0 obj <<
 /Length 2137      
 /Filter /FlateDecode
 >>
@@ -51158,33 +54369,33 @@
 æz×0øwÍ«µVþº”ðPæ§<[4KÿÜwç¾ûWm¬´E}î$CpO-iXìW—'™å´XóàÁ¼7<>"%‡Þ‘gM|uö–MʾT"PCM<}©,Ód®(à&6*óŽÜÉç–ÚÀËZœdš'~af¡%Ö“…ã҆↦g™ýWÍ å±Í®ÊR1É8R†'zXj`l;¤aWÇVƒ …:V»²*‰f??›P!aæ’ŠÊÆ.¼ylˆx`ºz¶ï„FpÐøŠ£ÈmûƒM°–[jƒÅÓª¬­4q®¡|„ô^¹e Wöw×öž¶+GÿHøà>àÍMÿw®z[„¦9Ùç!Ø`["jy;ÖYJ¼!Šÿˆ!'œ( G øNˆ?>óâù_Φ€ÿ¿Œœq]ÍÀ'j¯íqëõpþš^˜HßXß8ïïÑàßYÒe¡K¸ú§èÛ»_ÉU³W
 endstream
 endobj
-9679 0 obj <<
+9667 0 obj <<
 /Type /Page
-/Contents 9680 0 R
-/Resources 9678 0 R
+/Contents 9668 0 R
+/Resources 9666 0 R
 /MediaBox [0 0 612 792]
-/Parent 9657 0 R
+/Parent 9645 0 R
 >> endobj
-9681 0 obj <<
-/D [9679 0 R /XYZ 100.892 685.529 null]
+9669 0 obj <<
+/D [9667 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2106 0 obj <<
-/D [9679 0 R /XYZ 100.892 529.876 null]
+/D [9667 0 R /XYZ 100.892 529.876 null]
 >> endobj
-9682 0 obj <<
-/D [9679 0 R /XYZ 100.892 502.902 null]
+9670 0 obj <<
+/D [9667 0 R /XYZ 100.892 502.902 null]
 >> endobj
 2110 0 obj <<
-/D [9679 0 R /XYZ 100.892 269.283 null]
+/D [9667 0 R /XYZ 100.892 269.283 null]
 >> endobj
-9683 0 obj <<
-/D [9679 0 R /XYZ 100.892 242.368 null]
+9671 0 obj <<
+/D [9667 0 R /XYZ 100.892 242.368 null]
 >> endobj
-9678 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F51 3736 0 R /F15 3700 0 R /F85 5513 0 R /F17 3698 0 R /F59 4373 0 R /F96 8585 0 R /F53 3738 0 R >>
+9666 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F51 3736 0 R /F15 3700 0 R /F85 5513 0 R /F17 3698 0 R /F59 4373 0 R /F96 8572 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9686 0 obj <<
+9674 0 obj <<
 /Length 960       
 /Filter /FlateDecode
 >>
@@ -51198,21 +54409,21 @@
 	f—9/öÜûX_&z-ƒØ¯N.꫈Áp¤ÏÌʧŸE°ö³,˸?Õ&ã0˜LXcþèléÆÝT;Œ¿7^]ÍýÏsNÍsN>{¿ù1§¶œá	 ÒªTÖåÀÃ^PGd|Έܷ†Èܧ¶7¼‡XíUbÉçãEVzF•Èºäï»»ÕÝ/yÿý^=M—
 endstream
 endobj
-9685 0 obj <<
+9673 0 obj <<
 /Type /Page
-/Contents 9686 0 R
-/Resources 9684 0 R
+/Contents 9674 0 R
+/Resources 9672 0 R
 /MediaBox [0 0 612 792]
-/Parent 9688 0 R
+/Parent 9676 0 R
 >> endobj
-9687 0 obj <<
-/D [9685 0 R /XYZ 151.701 685.529 null]
+9675 0 obj <<
+/D [9673 0 R /XYZ 151.701 685.529 null]
 >> endobj
-9684 0 obj <<
+9672 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9691 0 obj <<
+9679 0 obj <<
 /Length 1537      
 /Filter /FlateDecode
 >>
@@ -51230,31 +54441,31 @@
 sØ.—6áf*þŽæ±gœì|×ÛÖžy¶„ÑݦøPI¡›Y{27Š¨Æpí°Céê×ûc“VõÚ$\½–ÏšûFÜI±í'{Y æeSÔ"×…˜4±~b¯ÿ6þçÓ•
 endstream
 endobj
-9690 0 obj <<
+9678 0 obj <<
 /Type /Page
-/Contents 9691 0 R
-/Resources 9689 0 R
+/Contents 9679 0 R
+/Resources 9677 0 R
 /MediaBox [0 0 612 792]
-/Parent 9688 0 R
+/Parent 9676 0 R
 >> endobj
-9692 0 obj <<
-/D [9690 0 R /XYZ 100.892 685.529 null]
+9680 0 obj <<
+/D [9678 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2114 0 obj <<
-/D [9690 0 R /XYZ 100.892 186.499 null]
+/D [9678 0 R /XYZ 100.892 186.499 null]
 >> endobj
-9693 0 obj <<
-/D [9690 0 R /XYZ 100.892 157.928 null]
+9681 0 obj <<
+/D [9678 0 R /XYZ 100.892 157.928 null]
 >> endobj
-9694 0 obj <<
-/D [9690 0 R /XYZ 100.892 121.245 null]
+9682 0 obj <<
+/D [9678 0 R /XYZ 100.892 121.245 null]
 >> endobj
-9689 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R /F15 3700 0 R /F59 4373 0 R /F96 8585 0 R /F17 3698 0 R >>
-/XObject << /Im3 6520 0 R >>
+9677 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R /F15 3700 0 R /F59 4373 0 R /F96 8572 0 R /F17 3698 0 R >>
+/XObject << /Im3 6519 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9697 0 obj <<
+9685 0 obj <<
 /Length 1768      
 /Filter /FlateDecode
 >>
@@ -51281,43 +54492,43 @@
 Þý(Lj
 endstream
 endobj
-9696 0 obj <<
+9684 0 obj <<
 /Type /Page
-/Contents 9697 0 R
-/Resources 9695 0 R
+/Contents 9685 0 R
+/Resources 9683 0 R
 /MediaBox [0 0 612 792]
-/Parent 9688 0 R
+/Parent 9676 0 R
 >> endobj
-9698 0 obj <<
-/D [9696 0 R /XYZ 151.701 685.529 null]
+9686 0 obj <<
+/D [9684 0 R /XYZ 151.701 685.529 null]
 >> endobj
-9699 0 obj <<
-/D [9696 0 R /XYZ 151.701 633.993 null]
+9687 0 obj <<
+/D [9684 0 R /XYZ 151.701 633.993 null]
 >> endobj
-9700 0 obj <<
-/D [9696 0 R /XYZ 151.701 597.312 null]
+9688 0 obj <<
+/D [9684 0 R /XYZ 151.701 597.312 null]
 >> endobj
-9701 0 obj <<
-/D [9696 0 R /XYZ 151.701 547.688 null]
+9689 0 obj <<
+/D [9684 0 R /XYZ 151.701 547.688 null]
 >> endobj
-9702 0 obj <<
-/D [9696 0 R /XYZ 151.701 512.219 null]
+9690 0 obj <<
+/D [9684 0 R /XYZ 151.701 512.219 null]
 >> endobj
 2118 0 obj <<
-/D [9696 0 R /XYZ 151.701 230.856 null]
+/D [9684 0 R /XYZ 151.701 230.856 null]
 >> endobj
-9703 0 obj <<
-/D [9696 0 R /XYZ 151.701 191.071 null]
+9691 0 obj <<
+/D [9684 0 R /XYZ 151.701 191.071 null]
 >> endobj
-9704 0 obj <<
-/D [9696 0 R /XYZ 151.701 155.199 null]
+9692 0 obj <<
+/D [9684 0 R /XYZ 151.701 155.199 null]
 >> endobj
-9695 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R /F96 8585 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R >>
+9683 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R /F96 8572 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9707 0 obj <<
+9695 0 obj <<
 /Length 1850      
 /Filter /FlateDecode
 >>
@@ -51345,34 +54556,34 @@
 QD;ø¢e~«0–²÷‚7Œÿú¨o0kA–Z¥Ðã}ôœoúÚbê{OzXiPº+]ìŸíÞ¼–]Û_úÒ8Ã"®×ohüñúòêüæî{l'ð?ñ4úÇb•¥›xîŒïi¼=sóïWóÜO~"\õ?ù”2
 endstream
 endobj
-9706 0 obj <<
+9694 0 obj <<
 /Type /Page
-/Contents 9707 0 R
-/Resources 9705 0 R
+/Contents 9695 0 R
+/Resources 9693 0 R
 /MediaBox [0 0 612 792]
-/Parent 9688 0 R
+/Parent 9676 0 R
 >> endobj
-9708 0 obj <<
-/D [9706 0 R /XYZ 100.892 685.529 null]
+9696 0 obj <<
+/D [9694 0 R /XYZ 100.892 685.529 null]
 >> endobj
-9709 0 obj <<
-/D [9706 0 R /XYZ 100.892 660.623 null]
+9697 0 obj <<
+/D [9694 0 R /XYZ 100.892 660.623 null]
 >> endobj
-9710 0 obj <<
-/D [9706 0 R /XYZ 100.892 633.387 null]
+9698 0 obj <<
+/D [9694 0 R /XYZ 100.892 633.387 null]
 >> endobj
 2122 0 obj <<
-/D [9706 0 R /XYZ 100.892 240.245 null]
+/D [9694 0 R /XYZ 100.892 240.245 null]
 >> endobj
-9711 0 obj <<
-/D [9706 0 R /XYZ 100.892 215.395 null]
+9699 0 obj <<
+/D [9694 0 R /XYZ 100.892 215.395 null]
 >> endobj
-9705 0 obj <<
+9693 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F85 5513 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9716 0 obj <<
+9704 0 obj <<
 /Length 767       
 /Filter /FlateDecode
 >>
@@ -51386,21 +54597,21 @@
 lœxEãˆÿà?çt£5
 endstream
 endobj
-9715 0 obj <<
+9703 0 obj <<
 /Type /Page
-/Contents 9716 0 R
-/Resources 9714 0 R
+/Contents 9704 0 R
+/Resources 9702 0 R
 /MediaBox [0 0 612 792]
-/Parent 9688 0 R
-/Annots [ 9712 0 R ]
+/Parent 9676 0 R
+/Annots [ 9700 0 R ]
 >> endobj
-9713 0 obj <<
+9701 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 780
 /Height 667
 /BitsPerComponent 8
-/ColorSpace [/Indexed /DeviceRGB 31 9720 0 R]
+/ColorSpace [/Indexed /DeviceRGB 31 9708 0 R]
 /Length 55824
 /Filter /FlateDecode
 /DecodeParms << /Colors 1 /Columns 780 /BitsPerComponent 8 /Predictor 10 >>
@@ -51830,7 +55041,7 @@
 ` ˆNn"
 endstream
 endobj
-9720 0 obj <<
+9708 0 obj <<
 /Length 107       
 /Filter /FlateDecode
 >>
@@ -51838,93 +55049,88 @@
 xÚ` ŸÿVVVÌÌÌ777úúúGGGÓÓÓææ溺º&&&ôôôsssÃÃÃèèè«««£££ââ⌌Œ³³³ëëë›››ÝÝÝØØØ“““îîîñññkkkbbb{{{ÿÿÿååå=c?^
 endstream
 endobj
-9712 0 obj <<
+9700 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 533.068 211.68 544.758]
 /Subtype /Link
 /A << /S /GoTo /D (small14) >>
 >> endobj
-9717 0 obj <<
-/D [9715 0 R /XYZ 151.701 685.529 null]
+9705 0 obj <<
+/D [9703 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2126 0 obj <<
-/D [9715 0 R /XYZ 151.701 582.302 null]
+/D [9703 0 R /XYZ 151.701 582.302 null]
 >> endobj
-9718 0 obj <<
-/D [9715 0 R /XYZ 151.701 555.465 null]
+9706 0 obj <<
+/D [9703 0 R /XYZ 151.701 555.465 null]
 >> endobj
 5261 0 obj <<
-/D [9715 0 R /XYZ 151.701 493.731 null]
+/D [9703 0 R /XYZ 151.701 493.731 null]
 >> endobj
-9719 0 obj <<
-/D [9715 0 R /XYZ 151.701 476.861 null]
+9707 0 obj <<
+/D [9703 0 R /XYZ 151.701 476.861 null]
 >> endobj
-9714 0 obj <<
+9702 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R >>
-/XObject << /Im53 9713 0 R >>
+/XObject << /Im53 9701 0 R >>
 /ProcSet [ /PDF /Text /ImageC /ImageI ]
 >> endobj
-9723 0 obj <<
-/Length 2350      
+9711 0 obj <<
+/Length 2340      
 /Filter /FlateDecode
 >>
 stream
-xÚ¥XÝsܶ×_Áé‹y39˜ Á/=tÆ•›Ö™Ê¹ZÊ$3q(§cÅ#Ï)Uÿ}÷ä‘Úé´w‹Å»øí.ïѼ¿]ýåþêí÷Jy‰È’@z÷{OH3åÅi&¢L{÷¥÷«gŠ¾j›Ío÷?{*²8ÖÈ®2 wÀ|J	ˆÍV±òoÚæs õãÐUÍãfF‘óÓî[Úß·›0ð;î¼ïªgÓ1Ë{xiê6/y½( ¥Dd¤_íDGãŠQ!×Õ_ﯾ\I ól‘C¯8^ýú[à•0öƒˆ0K½â<za”Š8BiµwwõÏ«`~.2ñ¤Y©ÅÁèLÐæÏ–lÆýíóºæýƱß6·	¥ßÚþ®èªSÏ´i×І³¥	9woêÊ4=o_FóíÞVÅBf1¯ÿn߃ˆ•cR°/`r§T'›—¥=nBå?¬ÉMà\t8òWøE{<Õ¦7åwl¨×Jývèx´„
- Á¸þ8ëÔ™SÞ™’{ûÖ
-óa TÜNìÝ„¾E•¼mÎfÞV†"Ò«2X•¨Ðÿ»é@€VpJÜHX$RloN–›NGf8bg°=6[RT:2V¦oÙ"£ó:^£)YDÅ6ejå$=W9©,•ÝÑÚoîMóf×¹6lAëÈÿ~“j¿kañ0Ôdì0ô®·¼eúù|¾cŽ‡Îf@­‘Î'
-
-¼WoïrÚíCÎLÖtÎ:×tCF×O‘sËËX„qnˆ(rû€{›\LZº7GwùÑlsV‹],™ÏÑ©éx4à»v͵™œ¤ÛÙ%·{ÞÛb«!˜ˆ¿M¿‹½º§‘X=ˆ›”l»CË
-ú/Å7L	 F:ø:œOnù~v-°õÄ›h›+žÈ[À«7Ò’$xœmïË`,ÂðªLËÿ??
-ÙOµo™„#íL ‡CEË›÷L8"ܳ¦†È±æ2“"UŒ;àB¬úC" uGÞ¶[¨…Jõȱ§•¿"@?
-“‘÷s¥Ù2…RAØ‹–×zÜvÉÀŽŽ¸´¦KfkÉÿ,ºëg+æÖghÂQ 6XY
-^W%B%ji4÷­Ž	*tú{óÂ}kàäKø 3
-3„ˆ8ph‡ºä6:|â›™í7£„h;ú¯ÂŽ†cg˜ÇÞŽÞ¸Û
-
-Î#r˜ŠàlʺÝDÒ/ð/¯×,µ',¡ó[x Á&“ý÷m]š5ÿGT9M– ªÓÔÿeÇ„ØЩÁókfå‘œÉM~d·N'·fòÞɈ8´r[§#í)Zléc~¨Œ½Fe_t>w€Ñcü¾¸ZŠHŽ[Æð¡$yꔶ:¢‚¯Ü.†®sj"L–c¨À¡ªw_Ë#U³o{Sü>g
-³Ò	w-7}3iW
-§”‰S¥¥½ U’"¡,ºÓPR5Ò…Žtyšn‚ÈOî?÷ˆ‡ªo>ñ%Ùê$õ? ükòÏ„ïtísœD¡ðѶ7ÖQªž)Ô‘`
-·¢yJtLX;ë¸ÿÕ>0uÏ!›0%? Ìó1)¾Ìêê‰\ö©”[]kÛ=šò˜Ÿ1	h;Ì©jyplt5±q³¼—H€ÕòÎ2o*8_¹_%§HûY†èuÎã°;÷ÎÜŽRs^Ö½Î#“>‡°²kOÛ1™bR]ÑybÀÛ3%Çáç
-$ûyUçõ"üѶ­XËiƒ%<þI­A0“C 	(Ýԯ؂ÄÔhðÊôsâ€c/‚+€ÉþÀÃ\½`kìÈ+…¤*€¤wü=`àŸ"9ù¹Shì’1,^á:!Nóì&¾XÇ•PBcj§´2ÕyO˜©Œ¯	ÐÈëá[rªc,OoZG·K¢²IT妻âœlÀCh·kž~„;Pà—n‹—¤ì`–	—À³Ì³‘—uŒ¤Z_T<gRº¬>4ìP†K=Kûq¨À3ç»
-|=~UwZg€Ä@§³\:œö@ÃÙ]'«Òw»÷ÌJþ€s1U"ÂþBØ»²=ÇeèsÉ0U†+jÎË,•ÆŸi4hc)>¤þýÁ4ÌÃx1V"ÌÏ@ƒ‹€ÎìĤšƒqÓZ&MÓgîy9wEûYöΕà¹ðùéãË¢pþ«Ã¸%VœÈï_¯A,j(ÁÝb7׈lÆkžöÜ0b£>õòš›#(ZE;âÉe!¬42¾…ÙÝuÓç%¤_©ÈI…tܯKÀ¢y)%~ilEYZäÊNø’f8ÈîçkÐBõ)Iq˜„.ãä^øÑ>}ر¨=øæÐБ1Œ^Z³ˆ f°rÞs7Ê-<	¶)íúOLmà²Y7©åïÃh2ìäü`‡ê¹®Jîνe±ã«à$tæËPáÃÁLk“`˜çª6ˆ*KXøæ€oâH'YY²ˆ&hMyœÄŠûeCY
-i@ïæ
-§¯ÏgÞ³'2Cµù§HØwyY!7$ÁDøGÞÜæ.^rÎB^σh6ìTgÜÞm?ín¦:áòMŠ}/åâ5*v¯QïžÛŠK¸zӁ:jƒYÇåƒrŒR8~gú¦Z¡=O¹
-
-ûêYÌù3m	d¼PòM6“>á78Èà².WÌP¶ÅØA8ÑN]Ñ /
-üÛ–³µ³5;²L¸7-hêÚ-dÛ£_¶k$3ÐkÑY=Ñ”‚2¤ N“$ãµ±upÉ
+xÚ¥XÝ“Û¶¿¿‚ÓS3L€à—:㞛֙عø.ÓÎÄyà‰Ð‰=Š”	ò®÷ßw? ŠTh§Ó>H‹Å»øí.¢à!ˆ‚¿]ýåîêõ÷J™(²Hwû@F‘Ȥy!’BwUðkxkvCݵ›ßî~ ö\iª‘]"îˆù”2›­ŒR^wíçHꇱ¯Û‡Í6N’ðú—›[lépßmâ(ì¹ó®¯ŸLÏ,ïhà¹mº²âõ’”ET~1´3ø“(A®«¿Þ]}¹’@æÙÇÁîxõëoQPÁØA$â"ž‰óÄI.Ò¥5ÁíÕÏWÑü\dH)Š$Q‹ƒÑ… ÍŸ7,Ø2Œ‡ï[;”MÃûMÓp8ldáÍ&–ag‡Û]_Ÿ¦M»†6œ-M(¹{ÝÔ¦xû2™o?
+¶*²Hyý·ûD¬“‚}“;¥Ýx²eUÙã&VáýšÜÎEÇž¿¶hŒ(ÜuÇScS}džzÙ¨<ìÆžG+Ø ŒëûY§ÞœÊÞTÜÛwn˜¥âîpâà&ªlp¦¸¶2‰.X•Ñp¨LÅáßM´‚SâFÆ"‘bs²Üt:2Ã;£xè´Ù’º Ò‘)°2}«×ñmÅ"j¶)Sk'é©.Iåh©ì
+­]óæ^µ¯nz׆-h„ßorö,ÇšŒÇá?êÖ-o™~>Ÿï˜ã¾wã†Pk¤ó‰BïÕëÛ’v{_2“5½³Îº!ÞµÁSäÜò2qƒ[E"IÜ>àÞf“–îÂMï.?¹ƒmÏj±‹eó9:2Ÿ |×®9£V¢“t{ {£änÏ{[l5ñ÷£6`±g²Bÿè‰õÁ¸IÉ®?tÜ ÿJ|óp É” `¤ÓIÿ§Ãùä–¶`׶y]{aÅyxõF†@’³í}EþC•iùÿÇ à§1û©–þ–I82og8Úu¬±ù÷À„£!ÂÈ=kˆkÎ )r5Á¸N!Ī?dP×óvýª@-T®=ÄžVþŠ< ý<Î<ïç(‰*³eŠ¥‚°—,¯µßvÅÀŽŽ¸´¦KfëÈÿ,ºëgkæÖghÂQ 6XY
+^WeBeji4÷­N	*t‡{óÌ}kàä+ø 
+3„ˆ8pèƦâ6:|š™¶^Â	´õþÆ«°£áØæ±w†£W‚óˆç":›²é6‰wøW6k–Úú	Kèüh°Édÿ}×T¦D-¢,ü	Uγ%ˆê<ÿyÄØЮ	Áófå‘’Émyd·Î'·fòÞɈ8´r[§#í)Ylécy¨‚½F_÷t>·€Ñ>~_ÜG-E"ý–1|(Ižúe€­Ž¨à·wcß;5‘ &+1TàP=¸¯å‘ºÝwƒÙý>gŠ‹Ò	w-7}3iW§”‰S¥¥½ U’"¡,»ÓPR5Ò…Žtyœn‚ÈOî?÷ˆûz o>ñ%Ùê,ß#ükòÏŒïtíKœD¡ðÑv0ÖQê)Ô‘`
+·’yJtLX{ë¸ÿÕÝ3uÏ!›0¥< ÌKŸ_æMýH®ÌE¾ÉîFás)-}nXä|%‘ïä³J¨€ «0ò”½e
+…q>/r>™MøYÆèmÎÓ°;÷ÊÇÛz)‹
+9ïê_æIŸCWÕw§­O¢˜ÔÔtŽèöL)qøiI~Y7å}³{´m+ÖrÙh	‹ÿE2+EM€än¾tn›lAáaš4xaú9aÀ±g½5Àãpàa®Z°µ@tä•BRöOÒ{þ0àOœüÛ)4vůq
+¦yV“^,†ãJ(¡1%LsZ™šr ,LTÁ×häíð­8Å1–§·£ûí’¨bU»é®hQa9â!tÛ5?‚ïïð.Än—£êa–—À³Ì¯‘—ÔGP­/ªž3©]VvÜí—$z–îãÐÏœï(ð
+høUÝit Ïr|èpº
+gw­ffH¿¹yǬä8S$"ì/„½­ºs<†>—
+SE¸¢æ¼¼RyÊ°™'þ @Kq!ï¦eÆ_0?©€ƒ‹@ÎìsÓ!RÌѸi“¦é3÷¼œ»¢ý,kç
+ð\ðüòñÚeO8ÿÅaÜ+vœÀï¿Yƒ:X,ÖPz»Å®ß ²ý¯Ax:pcÄ ˆæ4È7Üô híŠ'—}°ÒÈøf÷oÚ¡¬ -øJ%N*ä~¿.ñJæ%h’…•±5eg‰+7áKšá »Pœ¯AÕ?G‹GºENî…ÏíÓûµß[:2†ÑK‹`öð‚?za+—·p£Ü“`›Ò®ÿÄÔ.›u“:þÞ{“a§ä ;TÍM]qwî-‹EïX'¡7_ÆfZ;˜Ã<Սy@PEÆÀ·°x=dÙ"š 5æpB+î”AȵfpóÆÓ×ç3ïÙ™¡^øS$ú²ª‘’_"üX¶J/9W!¯çA´	ŒŽvª/>Ün?Ý\OõÁå[û^ËÅ+Tê^¡Þ>u5—*
+põºuv¨‚æò!
+9üCŽßša€©–GhÏÚC
+ûÇ©YîËy3m	d<SÒM6“!á78Èè²-WÄP–ōÔA8ÑN}Ñ /Âgi)fiÖ³L¸7-hšÆ-d»£_uk$3Ð+ÑY=Ñ”‚ò¢ N“$ãµ±upÉ
 _Ã
-s½åì]éLEœN9ÝÀ„	ßq•îjÒªv¯Okº»8Ñô{¼xè€ôCNJ‡“Òj¹Såïs~0ÇG0å
-[îí
-²ÉË­u•”~Ëy¸[Ÿb|Á¢Ö¬ÞéñdT@ÍBKžËVì<v&ï1<#@ÃP b§íøKqx¬ÔX’{µ§AŽ(	RÉ21ÁAúÏØ™U…+‹2+ª¿±ñ8T%ˆmù!$ŸÌÑϯL¦£§»€“)˜0+3 7÷Pè–æ¹*·é¾ŒÐX‚ýÖ4˜1CÖ3Í¿PÑý&®ë
+s½åì]ÉLÅ›Î9ÝÀ„²ÐqUîajÒªq¯kº»8Ñô{¸xà€ôCNJÇ“Òj¹SîK~(‹ýã—r‡†-÷æaÙ”ÕÖº
+Ê	ÿÀù·[Ÿb|Á¢Ö¬Þi2ªˆ V¡‹%Ïå*vzSž‘ aÜ!b§ëùKqØWh,ɽVúiãŠA‚T±LLp>Á3vfÕàÊÁbÄ‚ÌŠênl<Œub[C~IÆ's4Çóë’ééÉ.âd
+&ÌÊU,<º•yªw†Ûôx
+_Fh,Á~kZ̘!뙿âø/Trÿœëš
 endstream
 endobj
-9722 0 obj <<
+9710 0 obj <<
 /Type /Page
-/Contents 9723 0 R
-/Resources 9721 0 R
+/Contents 9711 0 R
+/Resources 9709 0 R
 /MediaBox [0 0 612 792]
-/Parent 9688 0 R
+/Parent 9676 0 R
 >> endobj
-9724 0 obj <<
-/D [9722 0 R /XYZ 100.892 685.529 null]
+9712 0 obj <<
+/D [9710 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2130 0 obj <<
-/D [9722 0 R /XYZ 100.892 660.623 null]
+/D [9710 0 R /XYZ 100.892 660.623 null]
 >> endobj
-9725 0 obj <<
-/D [9722 0 R /XYZ 100.892 641.703 null]
+9713 0 obj <<
+/D [9710 0 R /XYZ 100.892 641.703 null]
 >> endobj
 2134 0 obj <<
-/D [9722 0 R /XYZ 100.892 219.469 null]
+/D [9710 0 R /XYZ 100.892 219.469 null]
 >> endobj
-9158 0 obj <<
-/D [9722 0 R /XYZ 100.892 193.676 null]
+9144 0 obj <<
+/D [9710 0 R /XYZ 100.892 193.676 null]
 >> endobj
-9721 0 obj <<
+9709 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F51 3736 0 R /F59 4373 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9728 0 obj <<
+9716 0 obj <<
 /Length 1936      
 /Filter /FlateDecode
 >>
@@ -51947,39 +55153,39 @@
 QõïÙRBF¬rÕ1â¿e:¹v*ò‘r %ÕŒ!8€ºðšíCå²æQÖ‚+1ýÕjSDÂÃ?-kLÝoJæñ{u³ùMæ|D
 endstream
 endobj
-9727 0 obj <<
+9715 0 obj <<
 /Type /Page
-/Contents 9728 0 R
-/Resources 9726 0 R
+/Contents 9716 0 R
+/Resources 9714 0 R
 /MediaBox [0 0 612 792]
-/Parent 9735 0 R
+/Parent 9723 0 R
 >> endobj
-9729 0 obj <<
-/D [9727 0 R /XYZ 151.701 685.529 null]
+9717 0 obj <<
+/D [9715 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2138 0 obj <<
-/D [9727 0 R /XYZ 151.701 374.352 null]
+/D [9715 0 R /XYZ 151.701 374.352 null]
 >> endobj
-9730 0 obj <<
-/D [9727 0 R /XYZ 151.701 333.285 null]
+9718 0 obj <<
+/D [9715 0 R /XYZ 151.701 333.285 null]
 >> endobj
-9731 0 obj <<
-/D [9727 0 R /XYZ 151.701 284.396 null]
+9719 0 obj <<
+/D [9715 0 R /XYZ 151.701 284.396 null]
 >> endobj
-9732 0 obj <<
-/D [9727 0 R /XYZ 151.701 246.328 null]
+9720 0 obj <<
+/D [9715 0 R /XYZ 151.701 246.328 null]
 >> endobj
-9733 0 obj <<
-/D [9727 0 R /XYZ 151.701 224.538 null]
+9721 0 obj <<
+/D [9715 0 R /XYZ 151.701 224.538 null]
 >> endobj
-9734 0 obj <<
-/D [9727 0 R /XYZ 151.701 189.198 null]
+9722 0 obj <<
+/D [9715 0 R /XYZ 151.701 189.198 null]
 >> endobj
-9726 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F51 3736 0 R /F17 3698 0 R /F59 4373 0 R /F96 8585 0 R /F85 5513 0 R >>
+9714 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F51 3736 0 R /F17 3698 0 R /F59 4373 0 R /F96 8572 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9738 0 obj <<
+9726 0 obj <<
 /Length 1932      
 /Filter /FlateDecode
 >>
@@ -52001,27 +55207,27 @@
 käñ‡×°>ß­þ,2N
 endstream
 endobj
-9737 0 obj <<
+9725 0 obj <<
 /Type /Page
-/Contents 9738 0 R
-/Resources 9736 0 R
+/Contents 9726 0 R
+/Resources 9724 0 R
 /MediaBox [0 0 612 792]
-/Parent 9735 0 R
+/Parent 9723 0 R
 >> endobj
-9739 0 obj <<
-/D [9737 0 R /XYZ 100.892 685.529 null]
+9727 0 obj <<
+/D [9725 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2142 0 obj <<
-/D [9737 0 R /XYZ 100.892 577.522 null]
+/D [9725 0 R /XYZ 100.892 577.522 null]
 >> endobj
-9740 0 obj <<
-/D [9737 0 R /XYZ 100.892 547.104 null]
+9728 0 obj <<
+/D [9725 0 R /XYZ 100.892 547.104 null]
 >> endobj
-9736 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F85 5513 0 R /F17 3698 0 R /F94 8188 0 R /F53 3738 0 R >>
+9724 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F85 5513 0 R /F17 3698 0 R /F94 8177 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9743 0 obj <<
+9731 0 obj <<
 /Length 2224      
 /Filter /FlateDecode
 >>
@@ -52051,33 +55257,33 @@
 a˜4LâÀ Á’í(Ô;	DùéíÀÉ4N5·2	7àÜ–æYBã¼,ñ]o܇népá‚°Λ“w¼ådp¿;yÁˆÝÆg¬,Ȥ+º¸»—Œé­âúQò)„/wø0óÄŒqOÜÃ9y o)y€ð=½å<þŽ—Žãµ/¿£ëˆqfÆîÜÞfi†ñÿ¹·a•s>LwcW	Ï?GA§“ðöu&iù8_xèìxIsE*š	{ÑèTcË3»:ŒvÇ'øÞÜ!åZ‚›åIÆ´$â»TáÇøWºcÈ°¾~pí-÷ó(&·n–'ü—þ‡q"Íï=–õ9äèÜj'%ùÏÕ¾((8(þ‘Oœñ‘ÉÏ áÅB?½ì/ðé£ÕЦkºÐÛhÃvüÕôÈ º^ :ïÁ¥¾m¹gâ$ÇZã€ÿž×Ó÷öüj`öó+ N×·Wp˜?ª2Ê^1ñÓf}sýåŸ×_œLÅÿW.é¦G‰=?/pŸŠ„øŠžC§wÌéÿzsñ”•.
 endstream
 endobj
-9742 0 obj <<
+9730 0 obj <<
 /Type /Page
-/Contents 9743 0 R
-/Resources 9741 0 R
+/Contents 9731 0 R
+/Resources 9729 0 R
 /MediaBox [0 0 612 792]
-/Parent 9735 0 R
+/Parent 9723 0 R
 >> endobj
-9744 0 obj <<
-/D [9742 0 R /XYZ 151.701 685.529 null]
+9732 0 obj <<
+/D [9730 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2146 0 obj <<
-/D [9742 0 R /XYZ 151.701 660.623 null]
+/D [9730 0 R /XYZ 151.701 660.623 null]
 >> endobj
-9745 0 obj <<
-/D [9742 0 R /XYZ 151.701 641.703 null]
+9733 0 obj <<
+/D [9730 0 R /XYZ 151.701 641.703 null]
 >> endobj
 2150 0 obj <<
-/D [9742 0 R /XYZ 151.701 243.033 null]
+/D [9730 0 R /XYZ 151.701 243.033 null]
 >> endobj
-9746 0 obj <<
-/D [9742 0 R /XYZ 151.701 215.835 null]
+9734 0 obj <<
+/D [9730 0 R /XYZ 151.701 215.835 null]
 >> endobj
-9741 0 obj <<
+9729 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F51 3736 0 R /F53 3738 0 R /F52 3737 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9749 0 obj <<
+9737 0 obj <<
 /Length 1390      
 /Filter /FlateDecode
 >>
@@ -52088,27 +55294,27 @@
 н$ë¾$*Me *Ž^#z)àÖ€>XG® Ro7—hþù…¬k>iÅŽ+®E1äŽGÞ4<n'8«a"›-A*ë\yiœžÔEFñÅÍrEÐÒ¸Öâê¤W°;å) ÌŠ…Q?«ç@‰m8„=•$§‘ÚL67á9ß³F*:éÅÓ¢‰k-Ût<hëÐX(¤-Z*¬ý_–B ‘Å RVÿg"‚<%@º8?âD&Ià¯è΂ÈeU'o¸½ kqsuõŒ¨‚ª@0úžÍVâÀV›ÅqÐí5‰—À²Ó[y#лž{->íK%j¨^\°¦Swƒ–Èqˆy B‚§Ûðœ*èí—­QSˆp¾Úç¹®j!ûv­L2‘”¹µYñ€²ã÷–„é#½€l°>Ì-@Ž·>í%V«¹(÷z·×D—›¡ý:ˆ§^”ë?ßïZp³­Ç!®­¦'Öá¤ã·ÝAbè©:1Õ¶òÁE?:)|ZŽS³C]˜"‡>f6Ú·b$ÐfŒŸ[öÕ)!TØ™@ã–c•}¶¯Or¡4/+V6ÔôZ:$:T¦Ýõ%Õü#½Š§ g¾I¨2Ë!âû]%yAÿi ¥ô P6ø'H—¼*ÿ>žBÌ÷(í˳&üØ‘i©„ ¯LýÔ]wwôøØÍ¿¡îoL÷…Gÿ ƒ‚·s
 endstream
 endobj
-9748 0 obj <<
+9736 0 obj <<
 /Type /Page
-/Contents 9749 0 R
-/Resources 9747 0 R
+/Contents 9737 0 R
+/Resources 9735 0 R
 /MediaBox [0 0 612 792]
-/Parent 9735 0 R
+/Parent 9723 0 R
 >> endobj
-9750 0 obj <<
-/D [9748 0 R /XYZ 100.892 685.529 null]
+9738 0 obj <<
+/D [9736 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2154 0 obj <<
-/D [9748 0 R /XYZ 100.892 194.589 null]
+/D [9736 0 R /XYZ 100.892 194.589 null]
 >> endobj
-9751 0 obj <<
-/D [9748 0 R /XYZ 100.892 167.687 null]
+9739 0 obj <<
+/D [9736 0 R /XYZ 100.892 167.687 null]
 >> endobj
-9747 0 obj <<
+9735 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F85 5513 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9754 0 obj <<
+9742 0 obj <<
 /Length 2341      
 /Filter /FlateDecode
 >>
@@ -52135,30 +55341,30 @@
 )z>â—í@Yq|^À)7z\ãÚ2$ŠmEÓ´-Trû•€„iF·mªþ~;tÇíó¾q+ZP(ËÊ¿"[5ðçN1_ë]Z”$I˜a†J„Þ p7ßͺTzòLIõž2)û¼`¿ŒO¤ô&Jݾ¶U|ˆëKë~<µ˜81ÜÓŒÊ`Á4ïzüª4­\åéƒÍÍÑB‡„3vã Ù$DÞ’Z	6û1ðJHS 4“cWU÷p}¡ü]MO€¶³¬©ÝÚý¦k»º¾PÛVÙgÓ]]^r,ô¦8ã’_%àÜnâ[j±è´ê€*TsZ~ 9YZVåͯ±buO$3´çü`Dì
 endstream
 endobj
-9753 0 obj <<
+9741 0 obj <<
 /Type /Page
-/Contents 9754 0 R
-/Resources 9752 0 R
+/Contents 9742 0 R
+/Resources 9740 0 R
 /MediaBox [0 0 612 792]
-/Parent 9735 0 R
+/Parent 9723 0 R
 >> endobj
-9755 0 obj <<
-/D [9753 0 R /XYZ 151.701 685.529 null]
+9743 0 obj <<
+/D [9741 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2158 0 obj <<
-/D [9753 0 R /XYZ 151.701 292.746 null]
+/D [9741 0 R /XYZ 151.701 292.746 null]
 >> endobj
-9756 0 obj <<
-/D [9753 0 R /XYZ 151.701 265.234 null]
+9744 0 obj <<
+/D [9741 0 R /XYZ 151.701 265.234 null]
 >> endobj
-9757 0 obj <<
-/D [9753 0 R /XYZ 151.701 203.117 null]
+9745 0 obj <<
+/D [9741 0 R /XYZ 151.701 203.117 null]
 >> endobj
-9752 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F51 3736 0 R /F59 4373 0 R /F53 3738 0 R /F95 8343 0 R /F96 8585 0 R /F17 3698 0 R >>
+9740 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F51 3736 0 R /F59 4373 0 R /F53 3738 0 R /F95 8330 0 R /F96 8572 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9760 0 obj <<
+9748 0 obj <<
 /Length 1463      
 /Filter /FlateDecode
 >>
@@ -52177,27 +55383,27 @@
 "`YžÌ‘qÁA¿³¼âh>HEº﨟2_‘eð…;aߟ•P“tg;K$¢ýdýÙp¹—Èøxº‰¾Ýt³›Ox‰‹$@Ž&WdtT7€qœ}8Ÿ¾Õ¬³Ò֍:Ÿ(´^솀pxº“¹è³Ñ§âÿ¦´îz˜Ák¥A…ãÌn¶ †ü›št2ÅýÃfWñÞÂ'íìîì;3j§œî_5ãíòxü•ÿiØ
 endstream
 endobj
-9759 0 obj <<
+9747 0 obj <<
 /Type /Page
-/Contents 9760 0 R
-/Resources 9758 0 R
+/Contents 9748 0 R
+/Resources 9746 0 R
 /MediaBox [0 0 612 792]
-/Parent 9735 0 R
+/Parent 9723 0 R
 >> endobj
-9761 0 obj <<
-/D [9759 0 R /XYZ 100.892 685.529 null]
+9749 0 obj <<
+/D [9747 0 R /XYZ 100.892 685.529 null]
 >> endobj
-9762 0 obj <<
-/D [9759 0 R /XYZ 100.892 619.838 null]
+9750 0 obj <<
+/D [9747 0 R /XYZ 100.892 619.838 null]
 >> endobj
-9763 0 obj <<
-/D [9759 0 R /XYZ 100.892 296.593 null]
+9751 0 obj <<
+/D [9747 0 R /XYZ 100.892 296.593 null]
 >> endobj
-9758 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F85 5513 0 R /F53 3738 0 R /F59 4373 0 R /F96 8585 0 R >>
+9746 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F85 5513 0 R /F53 3738 0 R /F59 4373 0 R /F96 8572 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9766 0 obj <<
+9754 0 obj <<
 /Length 1567      
 /Filter /FlateDecode
 >>
@@ -52212,27 +55418,27 @@
 Š/Äçqð>¼W‹ßH<Ván1¶HY âa¥‰ ßhIÖwùEӐÙk3×ÒTî À…\—¢ãÂ}º&P}ZŒ¼Nv)Ï’TLsp@ÙK‘FÜJ·5;ÝÃæW՝ƒNEíÓ€9˜i4¼çQ¢âúÚ1\皀itä‹øx`žÎÙÂ3"®ær›°Ä¦”!AÐ÷o¦}1í…´?ÃÔq×p´‰‡*dÉý¾œ³’j5ðBÚ]ÂN ß^D×'NeŒJ¶©$Íã∽IœÕè\j²džíz»ï"°„m7b®kTíû"8á8ªçª[Ã	7]…iœj’°»ði2Ùy·;*î¼O-ÊúOô¥34ebhÊPxhr9·j¯mÓŽIšaãûóeŠ\Ð'AŸõFð@Ò1ñ£2¶Þe>¡ÛB±™nC¤¶Ý°~»Ý€%ö\½[Àq—ª¼¾£aï¤þRñ­ž#àM‹˜ýw6•ý<XVyhã•EÀj&¿º…lѺ(JçNM¡ö_Ô²WKøÊá¾ç¹üþãÛJµ)ü(ÝPXÄŸÙ	<´OñÜK¬8Iðð„Oà_•ñ
 endstream
 endobj
-9765 0 obj <<
+9753 0 obj <<
 /Type /Page
-/Contents 9766 0 R
-/Resources 9764 0 R
+/Contents 9754 0 R
+/Resources 9752 0 R
 /MediaBox [0 0 612 792]
-/Parent 9770 0 R
+/Parent 9758 0 R
 >> endobj
-9767 0 obj <<
-/D [9765 0 R /XYZ 151.701 685.529 null]
+9755 0 obj <<
+/D [9753 0 R /XYZ 151.701 685.529 null]
 >> endobj
-9768 0 obj <<
-/D [9765 0 R /XYZ 151.701 439.651 null]
+9756 0 obj <<
+/D [9753 0 R /XYZ 151.701 439.651 null]
 >> endobj
-9769 0 obj <<
-/D [9765 0 R /XYZ 151.701 200.419 null]
+9757 0 obj <<
+/D [9753 0 R /XYZ 151.701 200.419 null]
 >> endobj
-9764 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F51 3736 0 R /F59 4373 0 R /F96 8585 0 R >>
+9752 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F51 3736 0 R /F59 4373 0 R /F96 8572 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9773 0 obj <<
+9761 0 obj <<
 /Length 1489      
 /Filter /FlateDecode
 >>
@@ -52251,97 +55457,97 @@
 ÁMÁ=4,ÈE¾#“†KGÎÁœœÆó¨0Ƚ-îƒÖÁ¶GCô˜Îá7êÚr±ã¾`»,ú΀û[‹à:8\Ü7ÐʁÌö‘AeßöIÅãeÑe—Áóô’ß<sÉÍß幋êH)ûrnýÑ_7VŸi†íšú*ª÷!¥"ø¶M¾ |êâx:9'r#àwû¿úžƒ/n;Ný_~Ï}Bñá{nÚ~|6ýoËT
 endstream
 endobj
-9772 0 obj <<
+9760 0 obj <<
 /Type /Page
-/Contents 9773 0 R
-/Resources 9771 0 R
+/Contents 9761 0 R
+/Resources 9759 0 R
 /MediaBox [0 0 612 792]
-/Parent 9770 0 R
+/Parent 9758 0 R
 >> endobj
-9774 0 obj <<
-/D [9772 0 R /XYZ 100.892 685.529 null]
+9762 0 obj <<
+/D [9760 0 R /XYZ 100.892 685.529 null]
 >> endobj
-9775 0 obj <<
-/D [9772 0 R /XYZ 100.892 556.609 null]
+9763 0 obj <<
+/D [9760 0 R /XYZ 100.892 556.609 null]
 >> endobj
-9776 0 obj <<
-/D [9772 0 R /XYZ 100.892 313.329 null]
+9764 0 obj <<
+/D [9760 0 R /XYZ 100.892 313.329 null]
 >> endobj
-9771 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R /F59 4373 0 R /F96 8585 0 R >>
+9759 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R /F59 4373 0 R /F96 8572 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9779 0 obj <<
-/Length 1431      
+9767 0 obj <<
+/Length 1432      
 /Filter /FlateDecode
 >>
 stream
-xÚµWÛnÜ6}߯ÐÑ‘¢©KÞ§i ©[o’‰h‰ë%ª[tñÆE?¾3jWÚU’"A
-Û‡3‡äÌÑȳn-Ïúiõt³zôœ{–﹩—úÖfkùÜwcÏ·¢$uyʬMn½³¹ÏÖ×›—ž•¸i14
-¼ÄõB<i£‹×—Wk'ä̾lUÕ«ê–FWCÓ€äÙõþµýÚñ™Û;Ñô²%› @ÿ«7«+t&H¸†VV®Þ]{Vs/-Ï
-ÓÄÚkËÒ
-yâFœƒ\XW«ßVÞl{ál{1à™±ÔÕÛ@äN»ÿØ:ü®À÷<Û_;<àv[×€6ˆ@¬z‘—ª磔ñ„Œ~÷$Ü<ÃǁqPÞwåMßõM[¹——Ïè}>äYNÈÜ(ˆÊ«ºW™ÄCáö®^‰½§A׈¤ˆ¢èj’J°‹í;4–9©úñ‘·Š&Z¿÷|VÈÎXÕ'Ö¢iÚºi•è¢nD0ýÐå,%˜¹jeÖ×íý:	mwí0Æ싺lD‹Ã\*2{¯úݨ3“êÑ«º"±]û6FôíÖÐfAâ®NŒñF5
-ÈJ¸׋c“ÌmÎ2Z¯0IúÞãÞ¯
-Æ…¼(߷߬ÓÎHmá.ÄÙj‹Ïоå:ìAêªÆÑžæàêÛJý­O3·VúÌÁN¶.Ýø<Çç„“ì;“oM–JV=
-×8÷ÃGø1ŠŒžd5”E¶iÂô|R!Ï]?	èÒL ¢ÎD±«;ãýzܶxÔÚûÓÀOø˜¾¤¥Ô^©Û1tµc~á’gzÉ/ªmmà=^J¢7 .â1Ù¼®—Œ¦_ŽÑzŠmqá“6Û©²th‹Þª*¯÷æÌ^mèù1‰føyàKÑïFxÄø÷W.Õw»ºÁaƒ§ð=JoÃà$B)ÀÙÐty{׺yQ,ïPôb«
-ùµNHf1ÆE]mÕí·DÁmê“›øYÍ·ºwwEsý8òwYÊIíè©í!Ô1ðŒokÚñ¸Õe)ªœ˜äF¿­‘c<fÊ4:»µtNëæ3$U(IC³Ž×M¨uá@T5§2fG†'7†CYOT <'+½±‹T¯²LjfÌIa¶h—1£Ca(hcû°Ø·—ˆ4LçLš~™Ia‰¡ÒæÌ¢€]ñxÊ”ŒGö~§2ïh÷Ž8*Ti®@%$ÅPä$xÎ莗Äh£4uxwá$y'ûå·Óa!2ügI8úz†èù„#&exΞŸ£çõ‘Ÿ?IµW˜]·ŠÂ4 âá{ýsŒsBÿB¡]©
-{‘€EÇ4ÁN3n°à°Èp J°¹§:õe£‚ª%¼¹Ã4©>rô6A?óx,·‡Ø“±c¹ã,<A`PgÚ-¯ànÇÐ1¾ÌAcPèà±O'‹Š¡!Ey„Z
-¹3K‰Í1}I+'Ú:¨Ž{@.˜ýçú8Ö¥$F	ÔŒîAÏ®$vw¨êÍ”~uC•K«Q[èØ°¨i坪‡ŽÔHFFÔ|F¦ ^šyJé±aDÕÈ£©}I*‡-qéM’º®0IQj°Uªr…mWG*j9vM¢7:ãšÀg)ÉFjê ®‡J»[JàØw™‹&\
-‘>ÌF`gÜM9;ÙÏ؟ΚflPiÙ)DÆãè¡Nm¢¹eˆ‘Ëüd"Bˆp•y MªéŒÆ£Ø
-“dÎãîóDžÂ÷ÓbOLEÆ|ÞǦ%ý´%õNt¤?´Ã9M˜/ ˜þR:Tºëÿ¿ùVöÍ´=£ÄÀÐðI'|deÈžÓ¤8k“
-ŸNw|Âçë¿öôš
+xÚµWmoÜ6þ~¿ÂÀ6Ôjײ-¿ä[›®Û
+¬Ë–k»!Íå¬Ë	ó[ýÒk†ýø‘¢|gß9öbEQE>’ÈÇŒoÝ[¾õÝêÅzõì÷-æ{™Ÿ1k½µg^â3+N3g‘µÎ­›³È¹]¿~ö*¬ÔËâ8BÓÀO=?dàI]¾½ºvܐGöU«ª^U÷4»š$ß®øÕöŽË"–Ø—;Ñô²%› @ÿ«o׫+t&H¸†Ö¦\ÝÜúVk¯-ß³ÔÚkËÒ
+yêÅœƒ\X׫ŸWþìxáìx	àO"+Ž2O‘»íþsëºðã¸ó}›9.¸ÝÖ5 
+b«^䥪Æõ8‹xJF?ŠnÆð"0ʇ®¼ë»¾i+ïêê%Ý!ãS@¾å†‘1AyS÷j#ñR¸½« µ÷4ézِÓ Š®&©»Äþ„Æ2'U¿3>òVÑBKó>‹
+Ù«úÄZ4M[7­½QtÝ‹¨&=e3W­Üôuûडí9nEöe]6¢Åa.	#{¯úݨ3‹êÑ«º"±u˜™Ý:,HÜÓ‰1¾¨FY	ÏàùIB`Ò¹ÍYFë&I?øÜÿ©ÁØ¢ð`‚ŘýÎÉb¸#µ…·ÓÈV[CûZ”NØw‚ÔU³=­Á
+Ô÷•úCßf:¬ôƒl=zñy
+Ž/Î	&ÙW&ߚͦP²êiê¾Åµo>Ã?£ØÐøDVC‰QdÛ‘&|BãêJ…<÷XУ™@E½Å®îŒ÷?i¸oñªµ÷žó1})H%J©½ºS·c.èjÇüÂ-/õ’¨¶µw±”Dï ><ÄÙÜ·KFS‡o Çh=Ŷ¸ñy»Ù©²th›Þ«*¯÷æÎÞ¬iüœÆ3ü<ð•èw£¼büÿ{.Ý;Õw»ºÁiƒ·ð5JïÃà×4F)À_›¡éòöSëåE±|BÑ‹­*ä
+pB2‹1.ëj«î¿$
+cPâ{Y4_êÞÛÍí?àÈ_d)K$µ; c¤¶§PwPÄÀ3ÌÖ´ãs{S—¥¨rš`’ý¶FŽñ#S® ÑÙ­¥tZ´¾AR…r‘45ûøqß„Z.DUs*‹ìØðäÚPc¨1"ë‰
+€çd¥6`‘êÝÃf#53æ¤0G4†K˜Ñ¡0”
+4†‰}ØÌì%"
+³9“f'F7.‡¯ÝI^Å@JÄ»4ÝïÝMñq™¾ìx‚]=ælCwø:ÈQ¤[LìÑþøÒîw²?Þ42ö"©Ž§ùRf5ÑÆŸÔÖ9%þ+Î}”>¯ñ‰»n;…i$ Ã#Ñ{çsˆs’~¬x¢kUaDñ1up¢S…;,",œý˜4™½-*¨rP‡:,“êã I_Ø "ègûû¬èX¸
+ã9-Ìë JGû¡Ý¼ì9Áï3Èb
+;at±¨R”G4 Õˆ;³ˆÑ“•´Òx¢“ƒêx,ï ²s €[]êšGÊ @Ç©oW6TõfI±tlP¬;m¡c榕ŸT=t¤F~1¢¦(2ðÒ¬OˇT#5. ¤Žp䝎Ä}d,IêºÂE©Áî§ÊvR©¨÷ãXÝ¢75:kÄA¤tlÅàÍ I¢F†Ú¥n)æE~<nšÐ#'²0“q/ãÑÉyv3š1}0öœ´í"ãI|ŠPg6Hýcc/béD„á5*C@“b:cæ8ñÂ4S3„ûû.7ƒ?‰Û\ªÁ0áó.71].è§].¨w¢#ý¡ÃÍiÁ4õ°":ýÇԡҍüÿÕèÞ˾™¶—gŒ>inœÙ3&…ÁqÖø6%†žØÊöÀ¯çmçáAÆþ†ýOX
+^
 endstream
 endobj
-9778 0 obj <<
+9766 0 obj <<
 /Type /Page
-/Contents 9779 0 R
-/Resources 9777 0 R
+/Contents 9767 0 R
+/Resources 9765 0 R
 /MediaBox [0 0 612 792]
-/Parent 9770 0 R
+/Parent 9758 0 R
 >> endobj
-9780 0 obj <<
-/D [9778 0 R /XYZ 151.701 685.529 null]
+9768 0 obj <<
+/D [9766 0 R /XYZ 151.701 685.529 null]
 >> endobj
-9781 0 obj <<
-/D [9778 0 R /XYZ 151.701 599.368 null]
+9769 0 obj <<
+/D [9766 0 R /XYZ 151.701 599.368 null]
 >> endobj
-9782 0 obj <<
-/D [9778 0 R /XYZ 151.701 373.548 null]
+9770 0 obj <<
+/D [9766 0 R /XYZ 151.701 373.548 null]
 >> endobj
-9783 0 obj <<
-/D [9778 0 R /XYZ 151.701 188.375 null]
+9771 0 obj <<
+/D [9766 0 R /XYZ 151.701 201.925 null]
 >> endobj
-9777 0 obj <<
+9765 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9786 0 obj <<
-/Length 926       
+9774 0 obj <<
+/Length 921       
 /Filter /FlateDecode
 >>
 stream
-xÚµV[oÛ6~÷¯vAe b%R’¥¼uM³µ@wq—^T‰¶ˆI”JÒq
-ìÇ÷ð"Wnd[° Éï\¾Ã#ò„ÞÖ½_g¿¬f/n0ö(_„‘·ÚxQ¢,Ç^šå(ÉcoUykÿ––Šu|~¿zkàÊÓ4Öpœ£СÅaŒ¢̓(L±ÿ†ƒàK5üBK
-
-ãÛy@’Ä_ÎIèwRÝ–‚õJ¯Åþµ`TXùF«0­B¥ÕxWð]Ñ4»ÿQ:S±/zC¿,F¹²A&!0Ay˜RäEœa&Q¢Q³×«ÙçY« O!^ÙÎÖ÷¡WÁÞ[/D$ϼ½A¶I2”&ÚZãÝÎ>ÌÂq22váE©4Αɘv_š¼héÕº=|›Ýë ÀR€ÔÜ‚EשçA‚à9P4Óà£Þûùü¹…Ҏ϶Tõ‚q¥s©Úƒl?)	‹Ü.àgvlº²hj8;ý+"±‰1‚ADP»@þ±˜­ ½s÷*¶‚f`Ô‚)=IÅ‘­v W4øÄ”¬»þHz¬ã¢?«¤§#R“6d]:$yš8oPxÝq:iì⑍Áe׶pJçý@~ý]]­§Ð~ÃúÝn2JQ/º’JÙ‰«õžq³tZDÙå"rËçK©r_åw•ô¨„&¬ï¯º½´Ð÷+;~ÉÒI¾ËqÍ^¼¾á›ÎJäÊ(ÂW•’ô$P!u*-n'=Œ¾×‡éЏô¥(k¦à܉£Ò¿â6ö¼,T=9SÜæ(ÒÒÁf©–°þWîzY‰ª¦™vT¨ÂTÍt0:a´\^OúxÕñ
-Û>Å‹¦±cH¸³ü6ýS­£º™¾[Þuœ©Î~ËÎþt"é¦Ø5ª‚|ªCÄþþòî5µýÔG€ò]ëîQyéº_ (îûñ#r|#âS¥']Ø•¦0âeÏÇíóWüÙ+ùÅM”Œìcú“Ey:Ô{ÛÃc]F„}USéDA%¥´“=SµC@×R;<(n#ºÖJRÑÞ-b;¼²æ)&ÿõÃg>‡£'l&ȹˆpšž`LÚdM›ÙÛ™ªȼ×Ƽ3g\*h°h¥ƒÀd‚SŸh­°n†Âhh­ M°o+OKºú¦óìô½œ6„ø‚_èàõ¤aÒ$DÐø„‡Þ€õ +fTU?¦8E¦ÿ·a„~ð+ŒžÝ
+xÚ­V[Ó8~﯈XV¤5‰¤É¼Ãp‘@e§ì •y‰ÛX›8Áv§ŒÄçø’’î¤*0TJ}lç~lŸÀÛx÷ròl9yr±7GÙ<½åÚƒ ¥ö’4CqyËÒ[ù—´P¬åÓëåOQ–$‘†ã€,c†h:ƒû¯9¾TÓÐÏ5UQ3¾™ÎHû‹)	üVªËB°NéµÈ?ì†
+K_h¦Y¨´os¾ÍëúÖîNTä‹ÆÀ/ŠšQ®¬‘q ž ,ÈŒSèy÷fÆa¬Q“ËÉ—I« 8#B¼¢™¬®¯„½7^€H–z;ƒl<§(‰µ´Ú»œ¼ŸÃ`Æd¨8Ä)
+!R	I 2±U/ÚVý5Å8Ó{«ÍtöAïýý~n¡°ã£
+U`\éðè…æV6Ÿ•„Enð#;Öm‘×ÖN?…$Ò¾z—lž…ÅÎŽo²´sÚžG–(!†k6d‹2Ë'©€4ñ¼¡g+-_ÿ•tö™)YµÝµáyœñG™ôtàÓ¨Yå‚Z	§ ]+”Ež·œ@œó¥©µ^ڏ٨¸¢mHÒi½:úú¤œ­Æ= ÝšÕôÈ®‰Q'Ú‚JÙŠ³ÕŽq³´ã9¶ìt¹åã¥Tºƒö¿JºSB#F®®/۝´ÐwK;~M“Q—Ú=h}Í×­¥È™a„ƒ‡äû_*¤¦®ðX‡Bßél:ðÉœ>EÅ\l[±gú%߆š¹ªz!GªÛ¤ò¡¦®þ˜&šÂú¯Øv²7•u=®(W¹)›ßT0È0Z,ÎGu<oùšmî£E»±eGxEëî¾âQUwc5ð¶åLµö0;ñつë|[«â©n»=öŸ§W£ð?%vÖ×öÏžßc'—òmã.Ry꺟£0Ňv޹Èþˆ™îuc—TšçÝ܈§e<Úǧ„½”Ÿ\ÀK;x„÷ñOæÐ$}Á7<'Ð9„ØW•ŽTB.¥ì˜ª:‘ÊAàEqûkÑ6–’ŠvnÛ!ç¥%4D™û/n¦8õ©¸ÝKqÄz¤¤E8ÉŒŸ LÚ„M‹ÙÙ™ªȼØF¼3g\*hšh©À¤7‚ÿ`i—°np‚°o— M°oKOSºüÆãìøî¤ÉÆ‚Ÿƒñsm¼žÔLš@iü $:ðCo@ÓyÐ%3(«½(N‘ééúf¬¡Çûµ	g
 endstream
 endobj
-9785 0 obj <<
+9773 0 obj <<
 /Type /Page
-/Contents 9786 0 R
-/Resources 9784 0 R
+/Contents 9774 0 R
+/Resources 9772 0 R
 /MediaBox [0 0 612 792]
-/Parent 9770 0 R
+/Parent 9758 0 R
 >> endobj
-9787 0 obj <<
-/D [9785 0 R /XYZ 100.892 685.529 null]
+9775 0 obj <<
+/D [9773 0 R /XYZ 100.892 685.529 null]
 >> endobj
-9784 0 obj <<
+9772 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9790 0 obj <<
+9778 0 obj <<
 /Length 2009      
 /Filter /FlateDecode
 >>
@@ -52366,33 +55572,33 @@
 ±‘/SªÏ¸áîèÒ¸Ú[Ož-_‡ó%)dî~Ï÷›¥Né
 endstream
 endobj
-9789 0 obj <<
+9777 0 obj <<
 /Type /Page
-/Contents 9790 0 R
-/Resources 9788 0 R
+/Contents 9778 0 R
+/Resources 9776 0 R
 /MediaBox [0 0 612 792]
-/Parent 9770 0 R
+/Parent 9758 0 R
 >> endobj
-9791 0 obj <<
-/D [9789 0 R /XYZ 151.701 685.529 null]
+9779 0 obj <<
+/D [9777 0 R /XYZ 151.701 685.529 null]
 >> endobj
-9792 0 obj <<
-/D [9789 0 R /XYZ 151.701 660.623 null]
+9780 0 obj <<
+/D [9777 0 R /XYZ 151.701 660.623 null]
 >> endobj
-9793 0 obj <<
-/D [9789 0 R /XYZ 151.701 361.504 null]
+9781 0 obj <<
+/D [9777 0 R /XYZ 151.701 361.504 null]
 >> endobj
-9794 0 obj <<
-/D [9789 0 R /XYZ 151.701 259.748 null]
+9782 0 obj <<
+/D [9777 0 R /XYZ 151.701 259.748 null]
 >> endobj
-9795 0 obj <<
-/D [9789 0 R /XYZ 151.701 153.75 null]
+9783 0 obj <<
+/D [9777 0 R /XYZ 151.701 153.75 null]
 >> endobj
-9788 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F59 4373 0 R /F96 8585 0 R >>
+9776 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F59 4373 0 R /F96 8572 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9798 0 obj <<
+9786 0 obj <<
 /Length 1663      
 /Filter /FlateDecode
 >>
@@ -52408,30 +55614,30 @@
 ˜’J}ÑÈΨ9Ï•Šd´5<‚E®l©±KÝiµLñ	ռĴ3·§§”k=@¸­v„¢ûL «Úä;˜ ¯Êu›1`[BŸ3ð.r n p¢í‘ ­jZ•Ô=(æ¶ÙømzG€žÊ®;²’¡wáËMí‹ÀYzÈV’F†—íI\؈n›šÏ6„c—ä	ºFSÌJÖNðBi¼›ÅÞ÷=¢¥–4ò4© ¿Ê´mäNë+³¹·+ø]¿µ?Œ:½‡ngì‘ÔÚ´af-~B€ÏÁoi7Eo, PàÆ™=£µç*D?¹Ü‡ÜWG¦	ƒª…iȽ¸8ýw³Z½ê>T4ÚÔ¢TKÙBG·f£ÌÏ_áwlH)­Ç²„a’ú»iÎñ·y-W¦ok„åCMu£—I§%KøH8} Þǃvî„ûï83Œ(´ŠÆXcÏúiÕ¤•Ýä’«ÿÕVJ¦µl^Zk.›U¢'¿jŸt™ã/´–?”l³BÌÕéƒó5vð÷x œÕ1®ðoûDz®x©8“J%C9û¡ð[³\Ü]<î}Ìt+4ñ¿*¤Õ
 endstream
 endobj
-9797 0 obj <<
+9785 0 obj <<
 /Type /Page
-/Contents 9798 0 R
-/Resources 9796 0 R
+/Contents 9786 0 R
+/Resources 9784 0 R
 /MediaBox [0 0 612 792]
-/Parent 9770 0 R
+/Parent 9758 0 R
 >> endobj
-9799 0 obj <<
-/D [9797 0 R /XYZ 100.892 685.529 null]
+9787 0 obj <<
+/D [9785 0 R /XYZ 100.892 685.529 null]
 >> endobj
-9800 0 obj <<
-/D [9797 0 R /XYZ 100.892 620.444 null]
+9788 0 obj <<
+/D [9785 0 R /XYZ 100.892 620.444 null]
 >> endobj
 2162 0 obj <<
-/D [9797 0 R /XYZ 100.892 534.112 null]
+/D [9785 0 R /XYZ 100.892 534.112 null]
 >> endobj
-9801 0 obj <<
-/D [9797 0 R /XYZ 100.892 504.039 null]
+9789 0 obj <<
+/D [9785 0 R /XYZ 100.892 504.039 null]
 >> endobj
-9796 0 obj <<
+9784 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9804 0 obj <<
+9792 0 obj <<
 /Length 2263      
 /Filter /FlateDecode
 >>
@@ -52453,39 +55659,39 @@
 ‘œ†ìàß	„9I„àp¼œƒÃ}:¥àÎáÆþ@¸³+›ÃÎ5½XÒ„ž/[Ÿ£®ZãƒuøCé¦N˜àï›äpê&ŽÏþÃÿ¯««ÿ-GX
 endstream
 endobj
-9803 0 obj <<
+9791 0 obj <<
 /Type /Page
-/Contents 9804 0 R
-/Resources 9802 0 R
+/Contents 9792 0 R
+/Resources 9790 0 R
 /MediaBox [0 0 612 792]
-/Parent 9809 0 R
+/Parent 9797 0 R
 >> endobj
-9805 0 obj <<
-/D [9803 0 R /XYZ 151.701 685.529 null]
+9793 0 obj <<
+/D [9791 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2166 0 obj <<
-/D [9803 0 R /XYZ 151.701 577.461 null]
+/D [9791 0 R /XYZ 151.701 577.461 null]
 >> endobj
-9806 0 obj <<
-/D [9803 0 R /XYZ 151.701 546.433 null]
+9794 0 obj <<
+/D [9791 0 R /XYZ 151.701 546.433 null]
 >> endobj
 2170 0 obj <<
-/D [9803 0 R /XYZ 151.701 453.173 null]
+/D [9791 0 R /XYZ 151.701 453.173 null]
 >> endobj
-9807 0 obj <<
-/D [9803 0 R /XYZ 151.701 427.482 null]
+9795 0 obj <<
+/D [9791 0 R /XYZ 151.701 427.482 null]
 >> endobj
 2174 0 obj <<
-/D [9803 0 R /XYZ 151.701 277.507 null]
+/D [9791 0 R /XYZ 151.701 277.507 null]
 >> endobj
-9808 0 obj <<
-/D [9803 0 R /XYZ 151.701 249.49 null]
+9796 0 obj <<
+/D [9791 0 R /XYZ 151.701 249.49 null]
 >> endobj
-9802 0 obj <<
+9790 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9812 0 obj <<
+9800 0 obj <<
 /Length 1452      
 /Filter /FlateDecode
 >>
@@ -52503,33 +55709,33 @@
 xñLç‰ì)¢à'™ð×3a‡ÈXÂ&L¿”“À¯åÙgTƒ«Wqüu@úß/uIÀ¿ŠÓ¼i…¿Žÿ‘Ù›
 endstream
 endobj
-9811 0 obj <<
+9799 0 obj <<
 /Type /Page
-/Contents 9812 0 R
-/Resources 9810 0 R
+/Contents 9800 0 R
+/Resources 9798 0 R
 /MediaBox [0 0 612 792]
-/Parent 9809 0 R
+/Parent 9797 0 R
 >> endobj
-9813 0 obj <<
-/D [9811 0 R /XYZ 100.892 685.529 null]
+9801 0 obj <<
+/D [9799 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2178 0 obj <<
-/D [9811 0 R /XYZ 100.892 660.623 null]
+/D [9799 0 R /XYZ 100.892 660.623 null]
 >> endobj
-9814 0 obj <<
-/D [9811 0 R /XYZ 100.892 641.703 null]
+9802 0 obj <<
+/D [9799 0 R /XYZ 100.892 641.703 null]
 >> endobj
 2182 0 obj <<
-/D [9811 0 R /XYZ 100.892 528.323 null]
+/D [9799 0 R /XYZ 100.892 528.323 null]
 >> endobj
-9815 0 obj <<
-/D [9811 0 R /XYZ 100.892 499.69 null]
+9803 0 obj <<
+/D [9799 0 R /XYZ 100.892 499.69 null]
 >> endobj
-9810 0 obj <<
+9798 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9820 0 obj <<
+9808 0 obj <<
 /Length 1458      
 /Filter /FlateDecode
 >>
@@ -52546,34 +55752,34 @@
 0BB×çvÎl)Eo<¶s)β‚\;I?OÜn´VÏÐBÁÍŒc ©bh­î´›,„vdì'âBÁ÷:LW¤~©ûaj2áÁ‰²0ÿ]¶¿Â<´5¹äÌ­G`nÁ)F"…"v“„f)ˆ0»vMäõè÷!^°„.ͺԑ/žÜB嬏s:XŽM¹Üml;,¶å”)~zŒ¾íZ¦¸†Ó+xñQÍ3üæÿõªæ2c2?=ªÃc:K#…QäïyÊd	n	ÅR%/K#çgÿ`†¤£L'P|wábòº¸Tçyq9ÞÏ“äááuí*f®–$0ÚþյγÝ]ûÄê…곧˜}¡ûôAûƒ^b	
 endstream
 endobj
-9819 0 obj <<
+9807 0 obj <<
 /Type /Page
-/Contents 9820 0 R
-/Resources 9818 0 R
+/Contents 9808 0 R
+/Resources 9806 0 R
 /MediaBox [0 0 612 792]
-/Parent 9809 0 R
-/Annots [ 9816 0 R ]
+/Parent 9797 0 R
+/Annots [ 9804 0 R ]
 >> endobj
-9816 0 obj <<
+9804 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 388.281 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/printer_list.cgi)>>
 >> endobj
-9821 0 obj <<
-/D [9819 0 R /XYZ 151.701 685.529 null]
+9809 0 obj <<
+/D [9807 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2186 0 obj <<
-/D [9819 0 R /XYZ 151.701 580.014 null]
+/D [9807 0 R /XYZ 151.701 580.014 null]
 >> endobj
-9822 0 obj <<
-/D [9819 0 R /XYZ 151.701 531.893 null]
+9810 0 obj <<
+/D [9807 0 R /XYZ 151.701 531.893 null]
 >> endobj
-9818 0 obj <<
+9806 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9829 0 obj <<
+9817 0 obj <<
 /Length 2289      
 /Filter /FlateDecode
 >>
@@ -52601,59 +55807,59 @@
 §#4UŠ…pŧî¦ç¤&vÓ¾}ÒTe.rù;Ò ½eùZšòSJóÿš}¯ˆÏß Âó@
 endstream
 endobj
-9828 0 obj <<
+9816 0 obj <<
 /Type /Page
-/Contents 9829 0 R
-/Resources 9827 0 R
+/Contents 9817 0 R
+/Resources 9815 0 R
 /MediaBox [0 0 612 792]
-/Parent 9809 0 R
-/Annots [ 9817 0 R 9823 0 R 9824 0 R 9825 0 R 9826 0 R ]
+/Parent 9797 0 R
+/Annots [ 9805 0 R 9811 0 R 9812 0 R 9813 0 R 9814 0 R ]
 >> endobj
-9817 0 obj <<
+9805 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [168.286 443.76 377.399 456.712]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/driver_list.cgi)>>
 >> endobj
-9823 0 obj <<
+9811 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 149.838 262.155 162.789]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/)>>
 >> endobj
-9824 0 obj <<
+9812 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 138.879 393.959 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/printer_list.cgi?make=Anyone)>>
 >> endobj
-9825 0 obj <<
+9813 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 127.92 323.349 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/foomatic.html)>>
 >> endobj
-9826 0 obj <<
+9814 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 332.764 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/driver_list.cgi)>>
 >> endobj
-9830 0 obj <<
-/D [9828 0 R /XYZ 100.892 685.529 null]
+9818 0 obj <<
+/D [9816 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2190 0 obj <<
-/D [9828 0 R /XYZ 100.892 409.557 null]
+/D [9816 0 R /XYZ 100.892 409.557 null]
 >> endobj
-9831 0 obj <<
-/D [9828 0 R /XYZ 100.892 380.667 null]
+9819 0 obj <<
+/D [9816 0 R /XYZ 100.892 380.667 null]
 >> endobj
-9827 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F90 6229 0 R /F91 6230 0 R /F61 5442 0 R /F71 5443 0 R /F15 3700 0 R /F29 5413 0 R /F30 5441 0 R >>
+9815 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F90 6228 0 R /F91 6229 0 R /F61 5442 0 R /F71 5443 0 R /F15 3700 0 R /F29 5413 0 R /F30 5441 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9836 0 obj <<
+9824 0 obj <<
 /Length 2455      
 /Filter /FlateDecode
 >>
@@ -52688,52 +55894,52 @@
 ÜÏ[§ÿí!íð¹ó9ö‰—û–³<zylï\ûM–¢º~­f,M¸ÿ òÿ ò)
 endstream
 endobj
-9835 0 obj <<
+9823 0 obj <<
 /Type /Page
-/Contents 9836 0 R
-/Resources 9834 0 R
+/Contents 9824 0 R
+/Resources 9822 0 R
 /MediaBox [0 0 612 792]
-/Parent 9809 0 R
-/Annots [ 9832 0 R 9833 0 R ]
+/Parent 9797 0 R
+/Annots [ 9820 0 R 9821 0 R ]
 >> endobj
-9832 0 obj <<
+9820 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 127.92 289.428 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www2.picante.com/)>>
 >> endobj
-9833 0 obj <<
+9821 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 397.695 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/foomatic2.9/howto/)>>
 >> endobj
-9837 0 obj <<
-/D [9835 0 R /XYZ 151.701 685.529 null]
+9825 0 obj <<
+/D [9823 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2194 0 obj <<
-/D [9835 0 R /XYZ 151.701 660.623 null]
+/D [9823 0 R /XYZ 151.701 660.623 null]
 >> endobj
-9838 0 obj <<
-/D [9835 0 R /XYZ 151.701 644.027 null]
+9826 0 obj <<
+/D [9823 0 R /XYZ 151.701 644.027 null]
 >> endobj
 2198 0 obj <<
-/D [9835 0 R /XYZ 151.701 496.084 null]
+/D [9823 0 R /XYZ 151.701 496.084 null]
 >> endobj
-9839 0 obj <<
-/D [9835 0 R /XYZ 151.701 468.867 null]
+9827 0 obj <<
+/D [9823 0 R /XYZ 151.701 468.867 null]
 >> endobj
 2202 0 obj <<
-/D [9835 0 R /XYZ 151.701 309.505 null]
+/D [9823 0 R /XYZ 151.701 309.505 null]
 >> endobj
-9840 0 obj <<
-/D [9835 0 R /XYZ 151.701 282.288 null]
+9828 0 obj <<
+/D [9823 0 R /XYZ 151.701 282.288 null]
 >> endobj
-9834 0 obj <<
+9822 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F29 5413 0 R /F85 5513 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9854 0 obj <<
+9842 0 obj <<
 /Length 2369      
 /Filter /FlateDecode
 >>
@@ -52756,70 +55962,70 @@
 "2M~dæ"êåÀ3|4ê'ÑůÙö©úf¡3Ïï=_Ó9y”dþñz†öó››Óé$jú5;ý–íö7¥=5µ-J±ÝWÜUµÁä‹ó[á³þ`O_„.›É&¡ †yâ¯û‹?SÿŠDÚ€dzÞþþ—zÖmùËÕŒ´YöÔ„HfZªÿ-õ¯©å ýòæ9%¢"R=¯D”BDÆ3%’O§Ä‘;–éínPž_Ftë³âCIGøRþôÓÉ¿«‡÷dûçäΕˆÔóu +^Íë@öiÄÆ&z;v[SêÞˆÆ7?µíó¦×0ÜI9Óa¢}ü…¾ð36Ôý
 endstream
 endobj
-9853 0 obj <<
+9841 0 obj <<
 /Type /Page
-/Contents 9854 0 R
-/Resources 9852 0 R
+/Contents 9842 0 R
+/Resources 9840 0 R
 /MediaBox [0 0 612 792]
-/Parent 9809 0 R
-/Annots [ 9841 0 R 9842 0 R 9843 0 R 9844 0 R 9845 0 R 9846 0 R 9847 0 R ]
+/Parent 9797 0 R
+/Annots [ 9829 0 R 9830 0 R 9831 0 R 9832 0 R 9833 0 R 9834 0 R 9835 0 R ]
 >> endobj
-9841 0 obj <<
+9829 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 182.715 445.739 195.666]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/download.cgi?filename=cupsomatic&show=0)>>
 >> endobj
-9842 0 obj <<
+9830 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 171.756 441.032 184.707]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/download.cgi?filename=lpdomatic&show=0)>>
 >> endobj
-9843 0 obj <<
+9831 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 160.797 441.032 173.748]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/download.cgi?filename=lpdomatic&show=0)>>
 >> endobj
-9844 0 obj <<
+9832 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 149.838 285.691 162.789]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/till/)>>
 >> endobj
-9845 0 obj <<
+9833 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 138.879 257.447 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.mandrakesoft.com/)>>
 >> endobj
-9846 0 obj <<
+9834 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 127.92 219.789 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.fltk.org/)>>
 >> endobj
-9847 0 obj <<
+9835 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 276.277 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://cups.sourceforge.net/xpp/)>>
 >> endobj
-9855 0 obj <<
-/D [9853 0 R /XYZ 100.892 685.529 null]
+9843 0 obj <<
+/D [9841 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2206 0 obj <<
-/D [9853 0 R /XYZ 100.892 462.728 null]
+/D [9841 0 R /XYZ 100.892 462.728 null]
 >> endobj
-9856 0 obj <<
-/D [9853 0 R /XYZ 100.892 437.004 null]
+9844 0 obj <<
+/D [9841 0 R /XYZ 100.892 437.004 null]
 >> endobj
-9852 0 obj <<
+9840 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F51 3736 0 R /F17 3698 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9862 0 obj <<
+9850 0 obj <<
 /Length 2398      
 /Filter /FlateDecode
 >>
@@ -52847,154 +56053,157 @@
 è«âXÌl9Ò¾üC‰ü×xó’
 endstream
 endobj
-9861 0 obj <<
+9849 0 obj <<
 /Type /Page
-/Contents 9862 0 R
-/Resources 9860 0 R
+/Contents 9850 0 R
+/Resources 9848 0 R
 /MediaBox [0 0 612 792]
-/Parent 9869 0 R
-/Annots [ 9848 0 R 9849 0 R 9850 0 R 9851 0 R 9865 0 R 9857 0 R 9866 0 R 9858 0 R 9867 0 R 9859 0 R 9868 0 R ]
+/Parent 9857 0 R
+/Annots [ 9836 0 R 9837 0 R 9838 0 R 9839 0 R 9853 0 R 9845 0 R 9854 0 R 9846 0 R 9855 0 R 9847 0 R 9856 0 R ]
 >> endobj
-9848 0 obj <<
+9836 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 226.55 303.55 239.502]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://ppr.sourceforge.net/)>>
 >> endobj
-9849 0 obj <<
+9837 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 215.591 345.915 228.543]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://sourceforge.net/projects/lpr/)>>
 >> endobj
-9850 0 obj <<
+9838 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 204.632 275.306 217.584]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.lprng.org/)>>
 >> endobj
-9851 0 obj <<
+9839 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 194.969 511.352 206.625]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/download.cgi?filename=directomatic&show=0)>>
 >> endobj
-9865 0 obj <<
+9853 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [150.705 182.715 157.405 193.474]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/download.cgi?filename=directomatic&show=0)>>
 >> endobj
-9857 0 obj <<
+9845 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 173.051 511.352 184.707]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/foomatic2.9/download.cgi?filename=foomatic-rip&show=0)>>
 >> endobj
-9866 0 obj <<
+9854 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [150.705 160.797 242.634 171.556]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/foomatic2.9/download.cgi?filename=foomatic-rip&show=0)>>
 >> endobj
-9858 0 obj <<
+9846 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 151.133 511.352 162.789]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/download/foomatic/foomatic-db-engine-3.0.0beta1.tar.gz)>>
 >> endobj
-9867 0 obj <<
+9855 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [150.705 138.879 213.892 149.639]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/download/foomatic/foomatic-db-engine-3.0.0beta1.tar.gz)>>
 >> endobj
-9859 0 obj <<
+9847 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 129.215 511.352 140.871]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/kpfeifle/LinuxKongress2002/Tutorial/II.Foomatic-User/II.tutorial-handout-foomatic-user.html)>>
 >> endobj
-9868 0 obj <<
+9856 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [150.705 116.961 399.469 128.468]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/kpfeifle/LinuxKongress2002/Tutorial/II.Foomatic-User/II.tutorial-handout-foomatic-user.html)>>
 >> endobj
-9863 0 obj <<
-/D [9861 0 R /XYZ 151.701 685.529 null]
+9851 0 obj <<
+/D [9849 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2210 0 obj <<
-/D [9861 0 R /XYZ 151.701 527.104 null]
+/D [9849 0 R /XYZ 151.701 527.104 null]
 >> endobj
-9864 0 obj <<
-/D [9861 0 R /XYZ 151.701 499.386 null]
+9852 0 obj <<
+/D [9849 0 R /XYZ 151.701 499.386 null]
 >> endobj
-9860 0 obj <<
+9848 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F29 5413 0 R /F17 3698 0 R /F59 4373 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9879 0 obj <<
-/Length 2374      
+9867 0 obj <<
+/Length 2378      
 /Filter /FlateDecode
 >>
 stream
-xÚ½XëÛ¸ÿ¾…¿•X–D=E»æ.·iÒlo÷pîîƒV¢meõpHj
-úÇw”,y•-
-´ýb‡Ãápø›å­ö+oõæê»»«íA°JÜ,ñüÕÝnå{ž›fÁ*N37ÊÂÕ]¹úÕ¹•…©ºvýûÝ[OÝ,ŽC2×iå‚Àõ…»Þø^8ùùæv½Qäܨª5H†ÎkU=J¥y°S]ÃÔ»ªí?×Aæ hÕîÝn-<GíyËÈ»ÜÌËÈDtFæQ¡ÔÕ÷wWŸ®|à‚ðä‘+Īh®~ýÝ[•0÷vå¹"KW'’lV"JÝ8BmõêöêïWÞÔ5~4ÝxTf.·ßuëM:]“›ªØ¨ê¸Þ„^æTÿS'çáã:H©ž˜YÔÒ2xö¤Ö¾“¤i`æªëÛ’isL´R–¬ÃtÌQ}ËÄ›C§.Àƒþ€Clà2¢0c;O•9€`˜Iaê”Õož/¤’ív5<§ŸZ4ÌäŸ_#‰îh*0®kµe”ò±*$«Ð²fd“y[n;Ū@{Xºl”Ý
-|™¸áajdÄ6>3)„sHЃŒŽþG³¿¬ÿk©\tDâ|K'`r.Òyc)S5Ì
-ÂÈÁ“Ù]Š¼eBɼ¼X{sóš‰\kÜ-q
-À8­ÎD²üºÇƒ„<ŽpXÒæçŒ{ÙK+†×DÃg*«Ý3Øp0;Ý½]Z*!p¬|7[—8=l¤ÑRr"¬Ä«Ã1¶t—Žq·NÁç{	º`­ ·ñÁDƒ~Ä9òŠ®!}vH£ÄÌF‰c]åmagºÝ C²@+OÌùv$GsX1®A¿„l«*Uß–ä&ž°P‘@$I}疬řªm;D×ãìõ¸>¯ÚÉÜôJjÖ‰öN6!3CgýÌ.:8âr69jÇ$ G#ã½(¸T:a®×0hd;׆OU]_,±©¢SV¤èµÁ\Š*Žù‘\GyƺúBG Ç MN(²–L"L/D%ÁRø5DøpËýÔœu‘°"ÙF–UάR‘N-mþljËÀ'•“ƒàØðê'=Xèk—Ü̈Êôí9Põ›yUË4C¤#0ƒL‘kI‰ÌŽd´<sè[•f SJñÈ ñns§dÖß(jãYx曩ڒ€xÒ›{0].„­0¥x<K†È(ÕY@ÒÈpJßåÚé'T¢4û†P=£tZ°}7†E©¶<ƒæ8q^ËGYwÇFRíŽcçCotUJ«vVAmº~fó*úÑ;›§ìØ:–…&*ig…8¨µ0l;+sK¤-y4ùŽmĉn§ö‹IíõhlajÇ[ ëŸTen€ƒ{%HÃÉaûr´gšÜîÿ¾¾ ýªE¼ê#Äì’içªé¯FØ$ÐFPä
-‰ªtaÚ¡8C
-S˜T at I‹¤Oäil'ÊÜäˆ306‚ᵝÏ˲B•"Mír`×Pø–lUœ<¨7­}@ŒIüœ‘½¯{+€5
-ÿ@ïÓ™ÊS”1qTN/mXšŒŠf²C	•j1E`bª–û¼xÁqx™Ê@B?i#¦°^$œÃ`H›ã?™«OkÊ u9â‚,Š…í¤-‚òR
-[WÄPW€xÞ˜!“z‡s×KÛDÎc	d÷Ð9b‘ dxÃá(b»WtÞËZûÀ£j)ý½L©ŸlÒéZ{ÚjpÃAI9¤(pI½	´†új͇ž:yÖPÇ® Ï°‡‚áfüäbÑeŽäÐýhÚʾK²É3&ˆ¡COVŠx)qÁ9³Õf"öOðDP	ÈÖàGJ­’ùºÛÊÒøC9ÅŽ(v>5‹Þµ®¿{ÏLsÈí´Q%8$;–‚΁[¸•ÃˆÅKÁ¼Á‘¦W3«aÎÓ-Œ¸¹9Õ²ÜKfqÑEjosʦ«ÿÈü·Û€)l•5“v£ŽG9ÿ5¬ƒìÕb¿cu÷u® ‹‘9};ÆpŽ]M’͍NðáÄʀ/{ò1p¹wTöŽ£¾ÿ¼ýùo×ÿ`†³6Ü'¬íýL>ÖÁgM-d€ë oÈ#5ÜâãzRËñ ™Š„Ù¥Öî‹ßX´Î’Àño®ßÞ.`\ønà¸=•H1¸Y0ʳå"Žð1Wî8vñÞÈ刎,¶‘s?É´?Þ0oHÓš`'†l~Ñ Á^*ƒ;t}@õ쎨VÔcÛ¦1€’¢ò¡Lü³&·Á©'æ4ÔÉã³/	>`t[M˜)‘CÍ Ô<9<Ïwè†Lñó-åx²U9FõÖæã¡£Ç0?õy]‘»Ÿ§Ô®32É„±§(ýœó/®œ:Òî âÌžôÿ	Í7=´J£;0Aw)’FÓ¯`4ꣂ21FÜŽ\aKÌL+±l‚G^ñBmre¸>'c”{_q~ÉeÍ“·¤GJÃ󈞱áÙÄ‘›éü¦kúFÆÙ´Ÿ=¼‰‡¯ €_Áðv_1ß6<(+P’VÕX/€þ‰ßõ¶
- ã¯öåT™/˜H=o’êùw”ÁÀC®yüÖ’€ŒïT„#¶¶´“­ýoò/ÜŽÀ`ø4Uó:ø·¸%r¼o0æçdÌÉøܸ!çû£îÚ…Ö‚^»øšƒÌÃw+rDŠ;V >aO3ÙJøš87$|~ñúv ¸„#=¼¦°Z[ÁyOéGÓôµøUg¼&xsð¹ˆä?Õ`¦:B*
-un°c×6ÖãDØXÇÙ‹&YAŽºáÙðR™}ò‹ŸD}ˆÉ8_ú&ê‡Â
-ãñ“(}
-Þ*‚°NbΙ'Áa¼`ÞaÅþäqâ¦^ˆqzÖÚ?]ä—d.îÇé]Æ¿ÙnO§Ó†ê„nu߸E×lK~Ju‚îUo;­·5~DÞÂýQç¹í 3Ü^ì53-ÈWŒŸ‘ÿÌÆÏŽ¹^⊠j'ØÍkìû”‡cÕ>|”ÆÕ;·•æEË}/uƒ³†EÓý@¸pËSËÓÿåûª9òaf€t½*$`}/ÿýIbèj	jç“Œ²—ÿ ç¿I]y
+xÚ½XëÛÆÿ~…¾¥ ‹"¹|E¤Nœsíúš» ’|à‘+‰>>dryòýã;/R¤Ž>´@Û/ÒììììììoKgµ_9«7WßÝ]mð¼Ud'‘ã®îv+×qì8ñVaœØAâ¯îòÕ¯Ö­ÎLÑÔëßïÞ’xl'a裸—ØH;,çy¶«ìõÆuBÏúËÏ7·ë
+ë¦-jƒ¤o½n‹GÝv<صMÅÔ»¢î?×^b¡hQïíf­«Ýó–vÙ‰“‰
+èȆM/@©«ïï®>]¹ÀáÉ1[©UV]ýú»³ÊaîíʱU¯N$Y­TÛa€ÚÊÕíÕ߯œ©kÜ`ºñ¨ÔOl:?n¿kÖ/¶š*5E¶i‹ãzã;‰Utø[)×^déö‰™Y©…Á³§víZéñHšfÚ6}3mš‰Zëœu˜†9m_3ñæÐt¦ËÀƒþ€Clà2?a;O…9€ ‘I~låÅoŽ«t«ë5ìjx®{ªÑ0“~~Œ(´š£)À¸¦î„‘ëÇ"Ó¬¢Ó%#c˜Lë|Û´¬
+´û¥¡ËFÙÝÀ×i†¦Flã3“<OYG€
+Ñ1Èhèß³:ö—ø¿Ô­Žˆ¬oé,CŽÃE]Z	eŠJƒ¹žXx2Ù%Kk&Zækon^3‘vîY`œV§F#™Ýã^DÇ?8	,©ó€ó	ƽáu#Qñ™òb÷Ä6Ìΐõ¡õ±¹—¥YÖ´9ŽÈ7³u‘ÕÃFZJN„•xu8æÀ–I{éwë|¾× Ö*pLù!èGœ#/k*Ò'CÚ% fþ0JË"­3™ivƒÍµ>1çÚ‘ÍaÅl¸†î%d‹*T}›“c ˜xB ¢3€H»Ö-Y‹3E]7ˆ®Ç5$*Øëq}^µÓ©é[ݱN´w²	™é[ÓègvÖÀ—c°JQ;&8y聾KíP'Ìõé…ÖµaÁSQ–K$U4­ˆd}g0—¢Šcz$×QqW|¡# ‹cˆ*%‰%“뢒`©\OQ.Ür?µ çF„Aä ¬H¶Òy‘2+oɧš‡’ÿqâ2ðIåä 86¼ú©¬ôÕKnfD%‘=d{dýæNQ3ÍiÌ “¥¦Dæ*K3jž9ôE¥ȘR<² @¼ÛÜ)‰øE%N…g^°ù—¢Î	ˆ§ns† Ë•’ºS-gÉy;B42œÒµ¹vº•° N°„Á®>TÏ žl×aDª”gÐFÖký¨ËæXiªÝah}èMWäZÔÎ*#¨õbÛMä0ï¡¡³y­ŒÅ±¬x(<0QÈH;â "Ô°nDæ0–H)yš|ÇŽ6b‚D»i÷‹Iíõhl`jÇ[
+ ëŸÚÂÜ ÷%HÃéaû|´gªTv„_×€~Õ"^õbvÉ´sUƒôW"l"h#(ò†ŒŽDQº0íPœ¡…)Ì@* ¤ER†'	ò4–‰<5)âŒ
+`x-óiž¨Â@ű,v	…oÉÖ–“'Àõ†¾ØĘÄÏÙÙû²¬Qø? zßR1)¡<EGùôÒ†¥Ñ¨h&;”PÝ.¦LCL•zŸfO28ö/SHtOÑÓX/"Îa0¤ÍñŸL†Õ§5e€2qA„J:iAPú@Ê}%uE
+uˆç2©w8w°0—&rK »‡Î‹%3èÄ+GÊ^Áy/±öGÅRúÏúv0¥|’¤ÓÔrÚbpáÕzHQà’ zh
+»o¨5zjèäÝYCÚ
+<Ãò†›q£‹E—]8’C÷ÿ¡ªy—$“gŒB‡­&>TáRâ‚s&«ÍDìŸà‰À£9P­Á”Z5ó»fg(Kãå;¢ØùÔ,z?Ôz¸þî=3Í!•iÓ”àlX
+:nEã"‡‹—‚y;€#M¯fV
+üØŸ§[?pss*u¾×Ì⢋Ô^rʦ)ÿÈü·[)l•;&e£†G)ÿU¬ƒìÕb¿#ºû2m‹X}=ÆpŠ]M”̍ŽðáÄ€/{ò1p¹wTöŽ£¾ÿ¼ýùo×ÿ`†sg¸OYéýL:ÖÁgM-d€ë oÈ#%ÜâãzRËñÐ1×W/³KÙÙ/"|#h%ÿâ?Þ\¿½]À¸rmÏU„q9•Š1îÙ‰ï1Ê“å*ð1Wî8vñÞÈåˆÛȹŸdÚo˜7¤áIM‰!›_4H0…—ÊàömP=»#ªUõØÒ4zPRÚ´F(ǬÉmðÂA õÄœŠ:y|ö%ê"Á{ŒnÑ„™9ÔÊdÇ“Ãó|‡nXÀ?ßb΀€'©ŠÈ1m/6
+=΀ù©OË‚ÜýÄ8¥v‘I&ôˆ½–ÒÏ9ÿâÊ©#e&rÒÿ'4ßÕqs3¸s£A`»N8ÃhüŒ* .1êRªÁ?Á(´æÔàÂÕãÓñª ¦±t‚W°qáícÒÖP/
+‡fé÷ЏÀèê’·'ª¥Ú°D>ïKލAF¶ŸDóK/és&ÓÖöü'>|€ ~Ë~Å|é#x- J‹ª±t ý?ñ¥  ã¯òˆ*ÌÌ©Ž‚çIñü“Ê`à!íx‹”O§*Rlm.“µüWéîL`0|¥*yHÍü„‰¯ž†¢ùer^>÷pÈùþØ5õB—A_ô=$!ºR¶<ä’‰7¯@|êénÆ­ðÆ
+™r?¿x}=P\Í‘VX¸EpÞ^ºÁ4“-~à¯	ž|."ùÂǯvÀ´µ
+åVËÔ`óÞI؇‘’°ÇÙ‹~YñŽºáñRÅ}ý‹_GÝ@Ù¡ç¿ôyÔõ•í‡ã×Qú*ªœU …œ;Œ ˜ýxÞ¼Ù
+ÝÉ·âÈŽC<vÄÚ?]¤šh.î†ñhÆ¿ÙnO§Ó†J‘ëùvq_ÙYSms~¨êöl·mºn[â÷ä-Ü5¡ÛšÄíÅ^3Ó¼òÏøEùÏlüì˜åD¶ò Œ‚]Á¼Üþ·Oy8õÃGmìng×Ú¼h¹ëĶwÖ°hºë)nyjyü¿±|õ€.3ÿw 7¶Ý¹ý£èå?€ø_¥5Zê
 endstream
 endobj
-9878 0 obj <<
+9866 0 obj <<
 /Type /Page
-/Contents 9879 0 R
-/Resources 9877 0 R
+/Contents 9867 0 R
+/Resources 9865 0 R
 /MediaBox [0 0 612 792]
-/Parent 9869 0 R
-/Annots [ 9870 0 R 9871 0 R 9872 0 R ]
+/Parent 9857 0 R
+/Annots [ 9858 0 R 9859 0 R 9860 0 R ]
 >> endobj
-9870 0 obj <<
+9858 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 138.879 417.993 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www-124.ibm.com/developerworks/oss/linux/projects/omni/)>>
 >> endobj
-9871 0 obj <<
+9859 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 127.92 233.911 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://hpinkjet.sf.net/)>>
 >> endobj
-9872 0 obj <<
+9860 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
-/Rect [123.651 116.961 286.189 129.913]
-/Subtype/Link/A<</Type/Action/S/URI/URI(http://gimp-print.sourceforge.net/)>>
+/Rect [123.651 116.961 243.824 129.913]
+/Subtype/Link/A<</Type/Action/S/URI/URI(http://gimp-print.sf.net/)>>
 >> endobj
-9880 0 obj <<
-/D [9878 0 R /XYZ 100.892 685.529 null]
+9868 0 obj <<
+/D [9866 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2214 0 obj <<
-/D [9878 0 R /XYZ 100.892 506.799 null]
+/D [9866 0 R /XYZ 100.892 506.799 null]
 >> endobj
-9881 0 obj <<
-/D [9878 0 R /XYZ 100.892 479.196 null]
+9869 0 obj <<
+/D [9866 0 R /XYZ 100.892 479.196 null]
 >> endobj
-9877 0 obj <<
+9865 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F51 3736 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9886 0 obj <<
+9874 0 obj <<
 /Length 2183      
 /Filter /FlateDecode
 >>
@@ -53025,65 +56234,65 @@
 Ø“—jºì¯¬üÌJ<eu´½²ù‹ÿ±Þ¹Ã§Åçm‘e)”yÞ-Bås[äiKk7~øô¼¹¼ÓÏÚ!ËT¤:Ù¡þO1w½³•Øïöúo<Zþ2çÿtÒÔç—Ôhƒ*ìÁˆÚ<ç@M2ì‘õé/”ûïv²³Q
 endstream
 endobj
-9885 0 obj <<
+9873 0 obj <<
 /Type /Page
-/Contents 9886 0 R
-/Resources 9884 0 R
+/Contents 9874 0 R
+/Resources 9872 0 R
 /MediaBox [0 0 612 792]
-/Parent 9869 0 R
-/Annots [ 9873 0 R 9874 0 R 9875 0 R 9876 0 R 9890 0 R ]
+/Parent 9857 0 R
+/Annots [ 9861 0 R 9862 0 R 9863 0 R 9864 0 R 9878 0 R ]
 >> endobj
-9873 0 obj <<
+9861 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 160.797 487.134 173.748]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org//kpfeifle/LinuxKongress2002/Tutorial/)>>
 >> endobj
-9874 0 obj <<
+9862 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 149.838 364.744 162.789]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/newsportal/)>>
 >> endobj
-9875 0 obj <<
+9863 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 138.879 345.915 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/macosx/)>>
 >> endobj
-9876 0 obj <<
+9864 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 129.215 511.352 140.871]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/newsportal/thread.php3?name=linuxprinting.macosx.general)>>
 >> endobj
-9890 0 obj <<
+9878 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [150.705 116.961 218.599 127.721]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/newsportal/thread.php3?name=linuxprinting.macosx.general)>>
 >> endobj
-9887 0 obj <<
-/D [9885 0 R /XYZ 151.701 685.529 null]
+9875 0 obj <<
+/D [9873 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2218 0 obj <<
-/D [9885 0 R /XYZ 151.701 660.623 null]
+/D [9873 0 R /XYZ 151.701 660.623 null]
 >> endobj
-9888 0 obj <<
-/D [9885 0 R /XYZ 151.701 627.739 null]
+9876 0 obj <<
+/D [9873 0 R /XYZ 151.701 627.739 null]
 >> endobj
 2222 0 obj <<
-/D [9885 0 R /XYZ 151.701 283.435 null]
+/D [9873 0 R /XYZ 151.701 283.435 null]
 >> endobj
-9889 0 obj <<
-/D [9885 0 R /XYZ 151.701 261.803 null]
+9877 0 obj <<
+/D [9873 0 R /XYZ 151.701 261.803 null]
 >> endobj
-9884 0 obj <<
+9872 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F29 5413 0 R /F88 5678 0 R /F72 5679 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9896 0 obj <<
+9884 0 obj <<
 /Length 2315      
 /Filter /FlateDecode
 >>
@@ -53111,52 +56320,52 @@
 ˆôp(ƒ…† ‹#öÔbPTCàÉpZBGáè9òG 0Ê’À‰ýÛ¯‹§ìa4<íº®þúúºî_P÷™ÅDx]=Ûæ9·§k*óÁ¬~½ëÅź1ÚªT·òïYÒ‰N+zë­@=­ÈÿÛ*ѝÀo!ø7¼òvi»ë·A8†o*‚ýXv¬€þß(p:ü‚ž¸‡çm0Œ3Ç?0æýÍ6Ó"PP'çÇ¿y‹ˆÈO&êDÿOuþp0{û»?–/.ÖQ5¸^Ê0š¨6ð^¶£ÿ¤T©
 endstream
 endobj
-9895 0 obj <<
+9883 0 obj <<
 /Type /Page
-/Contents 9896 0 R
-/Resources 9894 0 R
+/Contents 9884 0 R
+/Resources 9882 0 R
 /MediaBox [0 0 612 792]
-/Parent 9869 0 R
-/Annots [ 9882 0 R 9883 0 R 9891 0 R 9892 0 R ]
+/Parent 9857 0 R
+/Annots [ 9870 0 R 9871 0 R 9879 0 R 9880 0 R ]
 >> endobj
-9882 0 obj <<
+9870 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 149.838 346.886 162.789]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://printing.kde.org/overview/kprinter.phtml)>>
 >> endobj
-9883 0 obj <<
+9871 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 138.879 262.155 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://gtklp.sourceforge.net/)>>
 >> endobj
-9891 0 obj <<
+9879 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 127.92 337.471 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/printer_list.cgi)>>
 >> endobj
-9892 0 obj <<
+9880 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 393.959 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/printer_list.cgi?make=Anyone)>>
 >> endobj
-9897 0 obj <<
-/D [9895 0 R /XYZ 100.892 685.529 null]
+9885 0 obj <<
+/D [9883 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2226 0 obj <<
-/D [9895 0 R /XYZ 100.892 425.179 null]
+/D [9883 0 R /XYZ 100.892 425.179 null]
 >> endobj
-9898 0 obj <<
-/D [9895 0 R /XYZ 100.892 382.135 null]
+9886 0 obj <<
+/D [9883 0 R /XYZ 100.892 382.135 null]
 >> endobj
-9894 0 obj <<
+9882 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F85 5513 0 R /F29 5413 0 R /F17 3698 0 R /F51 3736 0 R /F59 4373 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9910 0 obj <<
+9898 0 obj <<
 /Length 1945      
 /Filter /FlateDecode
 >>
@@ -53175,106 +56384,106 @@
 \Wn; ÐD¹Ù~×(»õÍÔM¶ÀlmW—{ôÜ=jMÖ8¯øÛ&ð`®*þÁ'ëE(÷àe—š°N/G<¼ £ÛzçϝŸJ~Áœ·çKœ®Ýl	ð÷1¼-¸ÉU8ÀòÂmçFJ75¤Cçi^…(²²ÞÌ£çïEï««ïƒàø–PC³ºýûÈcœÚR1áÁV”°@âPƒ¿.™á—Ò<EÈïWóŽxnRœ?èêÚLGón£8Ð(ŽÚÅ^;Ní[#wëìÎëå*?2|ä—PAK3u2";”÷òÇå÷Øù=žCæ‚ó}ãZàDE´o{ÃX ãá¦ÍvÓ Í~ñ‘É\÷ÉÁ@GÇ/>îâ7Æ}àáñ¤Ò,Òjü½âôa$FŸ±b Q~Lx:¤ñT\Dñ% GKÄ´—H¶v]íw÷Âh„‰‹¡DbŠèxI‰ö"a‰L' xɸװ-h>r¸ÎÞ¡#hB¸2,\g›ŒmõZãd¢˜DœuÌôp7Æ­÷MGñÌë5Ûö»òÚp¥ áÜ\o”œ zdÒpù¸“šü¯÷±*1M®·¸õN,wiQé×[¶HÞiŒšöö-RwiQ^@ìßÝ(Éc‰ë[Ÿ¬7S›ôÝFÉç^˜LôN¦Y Ìß› hGW'~mø$D"n ‰ vÒG‡±ãÿ$®üh4nüÖð±ã
 endstream
 endobj
-9909 0 obj <<
+9897 0 obj <<
 /Type /Page
-/Contents 9910 0 R
-/Resources 9908 0 R
+/Contents 9898 0 R
+/Resources 9896 0 R
 /MediaBox [0 0 612 792]
-/Parent 9869 0 R
-/Annots [ 9905 0 R 9912 0 R 9913 0 R 9893 0 R 9914 0 R 9899 0 R 9900 0 R 9901 0 R 9902 0 R 9903 0 R 9904 0 R 9906 0 R 9915 0 R 9907 0 R ]
+/Parent 9857 0 R
+/Annots [ 9893 0 R 9900 0 R 9901 0 R 9881 0 R 9902 0 R 9887 0 R 9888 0 R 9889 0 R 9890 0 R 9891 0 R 9892 0 R 9894 0 R 9903 0 R 9895 0 R ]
 >> endobj
-9905 0 obj <<
+9893 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [469.269 415.017 511.352 427.01]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/ppd-o-matic.cgi?driver=ljet4&printer=HP-LaserJet_4_Plus&show=1)>>
 >> endobj
-9912 0 obj <<
+9900 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [177.978 401.468 511.352 413.46]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/ppd-o-matic.cgi?driver=ljet4&printer=HP-LaserJet_4_Plus&show=1)>>
 >> endobj
-9913 0 obj <<
+9901 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [177.978 388.707 323.649 399.002]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/ppd-o-matic.cgi?driver=ljet4&printer=HP-LaserJet_4_Plus&show=1)>>
 >> endobj
-9893 0 obj <<
+9881 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 227.846 511.352 239.502]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/show_printer.cgi?recnum=HP-LaserJet_4_Plus)>>
 >> endobj
-9914 0 obj <<
+9902 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [150.705 215.592 171.527 226.351]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/show_printer.cgi?recnum=HP-LaserJet_4_Plus)>>
 >> endobj
-9899 0 obj <<
+9887 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 204.633 444.768 217.584]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/show_driver.cgi?driver=ljet4)>>
 >> endobj
-9900 0 obj <<
+9888 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 193.674 374.657 206.625]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/cups-doc.html)>>
 >> endobj
-9901 0 obj <<
+9889 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 182.715 369.95 195.666]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/pdq-doc.html)>>
 >> endobj
-9902 0 obj <<
+9890 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 171.756 369.95 184.707]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/lpd-doc.html)>>
 >> endobj
-9903 0 obj <<
+9891 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 160.797 369.95 173.748]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/ppr-doc.html)>>
 >> endobj
-9904 0 obj <<
+9892 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 149.838 384.072 162.789]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/direct-doc.html)>>
 >> endobj
-9906 0 obj <<
+9894 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 140.174 511.352 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/ppd-o-matic.cgi?driver=ljet4&printer=HP-LaserJet_4_Plus&show=0)>>
 >> endobj
-9915 0 obj <<
+9903 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [150.705 127.92 270.878 138.68]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/ppd-o-matic.cgi?driver=ljet4&printer=HP-LaserJet_4_Plus&show=0)>>
 >> endobj
-9907 0 obj <<
+9895 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 444.768 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/show_driver.cgi?driver=ljet4)>>
 >> endobj
-9911 0 obj <<
-/D [9909 0 R /XYZ 151.701 685.529 null]
+9899 0 obj <<
+/D [9897 0 R /XYZ 151.701 685.529 null]
 >> endobj
-9908 0 obj <<
+9896 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F51 3736 0 R /F15 3700 0 R /F29 5413 0 R /F52 3737 0 R /F53 3738 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9919 0 obj <<
+9907 0 obj <<
 /Length 2282      
 /Filter /FlateDecode
 >>
@@ -53298,34 +56507,34 @@
 ·,30°b‰ðdÿößÇÝJH^q6©¦Š3BÏê6˜ýþ£Ù·Ø³?¢üÑh*Ò³„«¥i"8ŒüQ4¥Àp%¢±ÇÈ~6¹=¬~› zã(üÜO°	|¾9~Óǯ¯7!8/U¤ÐTEqH%˜6þÒ#3û!m轉éþñ…©ÄKrM-þyÚ×»ÝõzU%}‹O_âÝiR¤§Ò]ÞðO®:œŠ?ƒ¢-FåoÄE}‡!î@nFà†!ªûý¹¹~óòûdñ$U©¬ýiAúr¹ÿ-‚&
 endstream
 endobj
-9918 0 obj <<
+9906 0 obj <<
 /Type /Page
-/Contents 9919 0 R
-/Resources 9917 0 R
+/Contents 9907 0 R
+/Resources 9905 0 R
 /MediaBox [0 0 612 792]
-/Parent 9869 0 R
-/Annots [ 9916 0 R 9921 0 R ]
+/Parent 9857 0 R
+/Annots [ 9904 0 R 9909 0 R ]
 >> endobj
-9916 0 obj <<
+9904 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 129.215 460.543 140.871]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/foomatic2.9/download.cgi?filename=foomatic-rip&show=1)>>
 >> endobj
-9921 0 obj <<
+9909 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [99.895 116.961 191.825 127.721]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/foomatic2.9/download.cgi?filename=foomatic-rip&show=1)>>
 >> endobj
-9920 0 obj <<
-/D [9918 0 R /XYZ 100.892 685.529 null]
+9908 0 obj <<
+/D [9906 0 R /XYZ 100.892 685.529 null]
 >> endobj
-9917 0 obj <<
+9905 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F51 3736 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9924 0 obj <<
+9912 0 obj <<
 /Length 1987      
 /Filter /FlateDecode
 >>
@@ -53350,27 +56559,27 @@
 ²;L÷ºÒ9âÛ[B ìϧ,Œ½Ûu¨*óêcÜÐð3“Ü›±úŸ¯ÊEa¸ « <\7́w©…=¾–õá!C^ü–¤¿q‰´€ÀÖÕÐ"áWöY‘}‰ŽæL+ €{¢lr§Ê½ZÏmlÝ"¶ Q´É¯¼À&ÈŒQVpN¥!00eîÙ—Òê•ýcØK7õÒß	á¥*°¿•æwžÄ–¥€"„°Jäx	/üÓâuž›qúÝ} ŠIl˜.(/•?!á-Šn”X€lQy2Ás àiؤ;™€Þô%ë 8áYàZo†¬'úéÆï>£šÑ&æ¼ÈÂûk6lÝÞúÈýWÙü#…|UNï–¾ŸÁ/Ð( á׌©”ŸhËçƘÁ^M‘Ù0»Œæ0øAø×Ê&:	-ŸMü&¿Üúc–³7é7´ŒE¾jª±Ö4ÓÞÚuæàᨗ”+ŸÖÜÖœ¯€µŒŸèßpÖ<Á˜{Ér,².+uÀSûö´û5Ùf;
 endstream
 endobj
-9923 0 obj <<
+9911 0 obj <<
 /Type /Page
-/Contents 9924 0 R
-/Resources 9922 0 R
+/Contents 9912 0 R
+/Resources 9910 0 R
 /MediaBox [0 0 612 792]
-/Parent 9927 0 R
+/Parent 9915 0 R
 >> endobj
-9925 0 obj <<
-/D [9923 0 R /XYZ 151.701 685.529 null]
+9913 0 obj <<
+/D [9911 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2230 0 obj <<
-/D [9923 0 R /XYZ 151.701 195.025 null]
+/D [9911 0 R /XYZ 151.701 195.025 null]
 >> endobj
-9926 0 obj <<
-/D [9923 0 R /XYZ 151.701 166.303 null]
+9914 0 obj <<
+/D [9911 0 R /XYZ 151.701 166.303 null]
 >> endobj
-9922 0 obj <<
+9910 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F51 3736 0 R /F53 3738 0 R /F59 4373 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9931 0 obj <<
+9919 0 obj <<
 /Length 1941      
 /Filter /FlateDecode
 >>
@@ -53391,40 +56600,40 @@
 UêM,µ˜ø·3oßçì&/ç»qÜu{{8TÛôìðÙÙ·Ò·ÿŠ.T›§æBê™	ôme²ÈýûïåNûA^åN
 endstream
 endobj
-9930 0 obj <<
+9918 0 obj <<
 /Type /Page
-/Contents 9931 0 R
-/Resources 9929 0 R
+/Contents 9919 0 R
+/Resources 9917 0 R
 /MediaBox [0 0 612 792]
-/Parent 9927 0 R
-/Annots [ 9928 0 R ]
+/Parent 9915 0 R
+/Annots [ 9916 0 R ]
 >> endobj
-9928 0 obj <<
+9916 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 337.471 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linuxprinting.org/printer_list.cgi)>>
 >> endobj
-9932 0 obj <<
-/D [9930 0 R /XYZ 100.892 685.529 null]
+9920 0 obj <<
+/D [9918 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2234 0 obj <<
-/D [9930 0 R /XYZ 100.892 554.046 null]
+/D [9918 0 R /XYZ 100.892 554.046 null]
 >> endobj
-9933 0 obj <<
-/D [9930 0 R /XYZ 100.892 526.078 null]
+9921 0 obj <<
+/D [9918 0 R /XYZ 100.892 526.078 null]
 >> endobj
 2238 0 obj <<
-/D [9930 0 R /XYZ 100.892 360.824 null]
+/D [9918 0 R /XYZ 100.892 360.824 null]
 >> endobj
-9934 0 obj <<
-/D [9930 0 R /XYZ 100.892 333.462 null]
+9922 0 obj <<
+/D [9918 0 R /XYZ 100.892 333.462 null]
 >> endobj
-9929 0 obj <<
+9917 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F17 3698 0 R /F53 3738 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9937 0 obj <<
+9925 0 obj <<
 /Length 1763      
 /Filter /FlateDecode
 >>
@@ -53447,33 +56656,33 @@
 )©÷`A:ºÂ ë¡Nd¨:Œ½øµ¹ÿ‡ÍÒÏëRë¡Û”ÁHœeÏ=cÞtŸ¨íÓ|¼ñÿ5Ú^¿zöéY&ÉTçvŽ÷ÃgÖî/N*öjÔ¶i?uÏêïŸè›„bÓ´íÈÏ„/Ãò‹J¸’c+"<“Léz7¾ÄABëœÝc£žè~¡«ü	Ó¥í
 endstream
 endobj
-9936 0 obj <<
+9924 0 obj <<
 /Type /Page
-/Contents 9937 0 R
-/Resources 9935 0 R
+/Contents 9925 0 R
+/Resources 9923 0 R
 /MediaBox [0 0 612 792]
-/Parent 9927 0 R
+/Parent 9915 0 R
 >> endobj
-9938 0 obj <<
-/D [9936 0 R /XYZ 151.701 685.529 null]
+9926 0 obj <<
+/D [9924 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2242 0 obj <<
-/D [9936 0 R /XYZ 151.701 660.623 null]
+/D [9924 0 R /XYZ 151.701 660.623 null]
 >> endobj
-9939 0 obj <<
-/D [9936 0 R /XYZ 151.701 641.703 null]
+9927 0 obj <<
+/D [9924 0 R /XYZ 151.701 641.703 null]
 >> endobj
 2246 0 obj <<
-/D [9936 0 R /XYZ 151.701 315.137 null]
+/D [9924 0 R /XYZ 151.701 315.137 null]
 >> endobj
-9940 0 obj <<
-/D [9936 0 R /XYZ 151.701 288.683 null]
+9928 0 obj <<
+/D [9924 0 R /XYZ 151.701 288.683 null]
 >> endobj
-9935 0 obj <<
+9923 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9943 0 obj <<
+9931 0 obj <<
 /Length 1888      
 /Filter /FlateDecode
 >>
@@ -53493,27 +56702,27 @@
 ›ïñlèñ>©9®«Ò}Äõ˜øá/¹€	° `bøolÒîOÓ }ÈCÒ
 endstream
 endobj
-9942 0 obj <<
+9930 0 obj <<
 /Type /Page
-/Contents 9943 0 R
-/Resources 9941 0 R
+/Contents 9931 0 R
+/Resources 9929 0 R
 /MediaBox [0 0 612 792]
-/Parent 9927 0 R
+/Parent 9915 0 R
 >> endobj
-9944 0 obj <<
-/D [9942 0 R /XYZ 100.892 685.529 null]
+9932 0 obj <<
+/D [9930 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2250 0 obj <<
-/D [9942 0 R /XYZ 100.892 408.858 null]
+/D [9930 0 R /XYZ 100.892 408.858 null]
 >> endobj
-9945 0 obj <<
-/D [9942 0 R /XYZ 100.892 380.113 null]
+9933 0 obj <<
+/D [9930 0 R /XYZ 100.892 380.113 null]
 >> endobj
-9941 0 obj <<
+9929 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F51 3736 0 R /F15 3700 0 R /F53 3738 0 R /F85 5513 0 R /F17 3698 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9948 0 obj <<
+9936 0 obj <<
 /Length 1937      
 /Filter /FlateDecode
 >>
@@ -53535,39 +56744,39 @@
 ]ñÛÔ
 endstream
 endobj
-9947 0 obj <<
+9935 0 obj <<
 /Type /Page
-/Contents 9948 0 R
-/Resources 9946 0 R
+/Contents 9936 0 R
+/Resources 9934 0 R
 /MediaBox [0 0 612 792]
-/Parent 9927 0 R
+/Parent 9915 0 R
 >> endobj
-9949 0 obj <<
-/D [9947 0 R /XYZ 151.701 685.529 null]
+9937 0 obj <<
+/D [9935 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2254 0 obj <<
-/D [9947 0 R /XYZ 151.701 605.894 null]
+/D [9935 0 R /XYZ 151.701 605.894 null]
 >> endobj
-9950 0 obj <<
-/D [9947 0 R /XYZ 151.701 579.038 null]
+9938 0 obj <<
+/D [9935 0 R /XYZ 151.701 579.038 null]
 >> endobj
 2258 0 obj <<
-/D [9947 0 R /XYZ 151.701 391.862 null]
+/D [9935 0 R /XYZ 151.701 391.862 null]
 >> endobj
-9951 0 obj <<
-/D [9947 0 R /XYZ 151.701 365.006 null]
+9939 0 obj <<
+/D [9935 0 R /XYZ 151.701 365.006 null]
 >> endobj
 2262 0 obj <<
-/D [9947 0 R /XYZ 151.701 299.022 null]
+/D [9935 0 R /XYZ 151.701 299.022 null]
 >> endobj
-9952 0 obj <<
-/D [9947 0 R /XYZ 151.701 271.672 null]
+9940 0 obj <<
+/D [9935 0 R /XYZ 151.701 271.672 null]
 >> endobj
-9946 0 obj <<
+9934 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F51 3736 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R /F85 5513 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9955 0 obj <<
+9943 0 obj <<
 /Length 1789      
 /Filter /FlateDecode
 >>
@@ -53590,21 +56799,21 @@
 R&øyÁý{•Hriìþï¡ÙßtÅ>¾Ã˜fù±fŽžðøžÔùÿÙÉ» ó…ûWhø;gø¾¹Züà;ó|
 endstream
 endobj
-9954 0 obj <<
+9942 0 obj <<
 /Type /Page
-/Contents 9955 0 R
-/Resources 9953 0 R
+/Contents 9943 0 R
+/Resources 9941 0 R
 /MediaBox [0 0 612 792]
-/Parent 9927 0 R
+/Parent 9915 0 R
 >> endobj
-9956 0 obj <<
-/D [9954 0 R /XYZ 100.892 685.529 null]
+9944 0 obj <<
+/D [9942 0 R /XYZ 100.892 685.529 null]
 >> endobj
-9953 0 obj <<
+9941 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F85 5513 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9959 0 obj <<
+9947 0 obj <<
 /Length 2193      
 /Filter /FlateDecode
 >>
@@ -53636,33 +56845,33 @@
 ûQÊÀZÒ'<çʱØ"¦¦ñõãÝÿ hNŠq
 endstream
 endobj
-9958 0 obj <<
+9946 0 obj <<
 /Type /Page
-/Contents 9959 0 R
-/Resources 9957 0 R
+/Contents 9947 0 R
+/Resources 9945 0 R
 /MediaBox [0 0 612 792]
-/Parent 9963 0 R
+/Parent 9951 0 R
 >> endobj
-9960 0 obj <<
-/D [9958 0 R /XYZ 151.701 685.529 null]
+9948 0 obj <<
+/D [9946 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2266 0 obj <<
-/D [9958 0 R /XYZ 151.701 402.152 null]
+/D [9946 0 R /XYZ 151.701 402.152 null]
 >> endobj
-9961 0 obj <<
-/D [9958 0 R /XYZ 151.701 370.93 null]
+9949 0 obj <<
+/D [9946 0 R /XYZ 151.701 370.93 null]
 >> endobj
 2270 0 obj <<
-/D [9958 0 R /XYZ 151.701 274.681 null]
+/D [9946 0 R /XYZ 151.701 274.681 null]
 >> endobj
-9962 0 obj <<
-/D [9958 0 R /XYZ 151.701 246.168 null]
+9950 0 obj <<
+/D [9946 0 R /XYZ 151.701 246.168 null]
 >> endobj
-9957 0 obj <<
+9945 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F85 5513 0 R /F17 3698 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9966 0 obj <<
+9954 0 obj <<
 /Length 1967      
 /Filter /FlateDecode
 >>
@@ -53694,34 +56903,34 @@
 ×óì£éŸ¢î+¬ý3lŒU¬äó$N—X†Ý.Ða#§¥k¥ð¥8Ö‡³µý¾·÷Ÿ®úçßÑt•‘¾néÖ=¬Úq„ÿ%‘X„Ç!Õûõ/¨‡VŸºu,|á°Â5è5ŽÈø…÷ö_A/Y
 endstream
 endobj
-9965 0 obj <<
+9953 0 obj <<
 /Type /Page
-/Contents 9966 0 R
-/Resources 9964 0 R
+/Contents 9954 0 R
+/Resources 9952 0 R
 /MediaBox [0 0 612 792]
-/Parent 9963 0 R
+/Parent 9951 0 R
 >> endobj
-9967 0 obj <<
-/D [9965 0 R /XYZ 100.892 685.529 null]
+9955 0 obj <<
+/D [9953 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2274 0 obj <<
-/D [9965 0 R /XYZ 100.892 468.792 null]
+/D [9953 0 R /XYZ 100.892 468.792 null]
 >> endobj
-9968 0 obj <<
-/D [9965 0 R /XYZ 100.892 444.953 null]
+9956 0 obj <<
+/D [9953 0 R /XYZ 100.892 444.953 null]
 >> endobj
 2278 0 obj <<
-/D [9965 0 R /XYZ 100.892 178.038 null]
+/D [9953 0 R /XYZ 100.892 178.038 null]
 >> endobj
-9969 0 obj <<
-/D [9965 0 R /XYZ 100.892 153.399 null]
+9957 0 obj <<
+/D [9953 0 R /XYZ 100.892 153.399 null]
 >> endobj
-9964 0 obj <<
+9952 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F85 5513 0 R /F17 3698 0 R /F51 3736 0 R /F53 3738 0 R /F59 4373 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9972 0 obj <<
+9960 0 obj <<
 /Length 1625      
 /Filter /FlateDecode
 >>
@@ -53740,27 +56949,27 @@
 ßæIžiµmß7>µ~¦±€ÿ­îgÉ¿43QƒU_¿õ]ª£{990 W¸ß\6›“°Ü¢‰uü0Ôá1y2ž±Ï–—ÙPn~ƒTg—H³¹Ü@7* ³=-i„Lýp7‡ž2dkHݺ¨–¸¶À¶tJQƒ€—ßÃÞîò®8Ýê!;’àèbpðó€´[O6¯šÓ"ž¤B~ƒÍ54üþt´”Ú¾[P2a<M¼žÞ_o‹|{ðšóÍûÓJC¢c%£»÷‚4^áè,J¿—©o£Ëöù%}ñð¯C^þ;	^îþJå÷xDòÖfø¦G~Ñ»þðáhŸ­fÿ ÷ÌΆ
 endstream
 endobj
-9971 0 obj <<
+9959 0 obj <<
 /Type /Page
-/Contents 9972 0 R
-/Resources 9970 0 R
+/Contents 9960 0 R
+/Resources 9958 0 R
 /MediaBox [0 0 612 792]
-/Parent 9963 0 R
+/Parent 9951 0 R
 >> endobj
-9973 0 obj <<
-/D [9971 0 R /XYZ 151.701 685.529 null]
+9961 0 obj <<
+/D [9959 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2282 0 obj <<
-/D [9971 0 R /XYZ 151.701 625.262 null]
+/D [9959 0 R /XYZ 151.701 625.262 null]
 >> endobj
-9974 0 obj <<
-/D [9971 0 R /XYZ 151.701 593.608 null]
+9962 0 obj <<
+/D [9959 0 R /XYZ 151.701 593.608 null]
 >> endobj
-9970 0 obj <<
+9958 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9980 0 obj <<
+9968 0 obj <<
 /Length 2267      
 /Filter /FlateDecode
 >>
@@ -53779,231 +56988,442 @@
 Õsõ™«ä½*ûÁªy…–6÷ô4šü5„ƒJAìp$8ÎþJ«)>c÷•bÃúküK®ÉnF[yÊÀéð!Eœ÷½Ü^ü>“ý©
 endstream
 endobj
-9979 0 obj <<
+9967 0 obj <<
 /Type /Page
-/Contents 9980 0 R
-/Resources 9978 0 R
+/Contents 9968 0 R
+/Resources 9966 0 R
 /MediaBox [0 0 612 792]
-/Parent 9963 0 R
+/Parent 9951 0 R
 >> endobj
-9981 0 obj <<
-/D [9979 0 R /XYZ 100.892 685.529 null]
+9969 0 obj <<
+/D [9967 0 R /XYZ 100.892 685.529 null]
 >> endobj
-9978 0 obj <<
+9966 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R /F85 5513 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-9985 0 obj <<
-/Length 761       
+9973 0 obj <<
+/Length 758       
 /Filter /FlateDecode
 >>
 stream
-xڝTMoÛ0½ûW»LE’%ËÆnk›¡
-tH†ÚÜ؍=ø#•¥û÷£>¼8E`»X”L>>Šz¤hƒ(ú|Y󅤈Q’Ò”¡Õ3b’EŠ“”ÈT UŽî±4|\ÝÌœ£„¤q,Œ+§	¡$ëtñýnÎ")ð®Ú¡j7n·Üm·`QÜ…ðÑC8c‚)|Qfۡзsƒ\­‚—À ¥	I¢­›àþ‘¢þÝ J¢4A{ëÙ H&$–ì-ƒo–Çbœ¤’‰£òDJl†9ç„%@‹QŠo%ú ^±kkQÕÀÖdž}ÕöîR˜œ^ E3ž¥R‡½*Jp‰ó*Ûè¬éÍNવLѽõYT›öþ@*d˜©S~Y›Ÿ¾¦N}Ù…<Á{—åhãª5Ñ%d¨[Ÿ)ˆED
-_Ð.ÁÄ@£(Â?»§ž¼ß<™F„
-ñ¶{*UïvïÌ£”	 )刌ÕFId«U§º¡IOtÚDàn›èLv®ýŒÅÿ¼À·ë[hq
-è—€Hj«=#üÁüº‘]vãeê5c’(Áþ…ì<YÍ&´ÎhˆSèFÂJ½†.º¦éZ§›+­¢F± ôDJ>K2!ÌÃü¨ÚÜÆî{‡•¾ÎoGaÖUÑ^‹YûqpÇ×m?duíÎ/uõÌ;•0Çü«áu0‰x<&5šè݁Mú	l%ñÚdµßÿÔÅË®2Ç%ÖÛURxÜ6k
-4tn}‚%qÕ¦¹2²2Ûµ	.3­áH‡Ò‘~ ’Î"aøE"qæ¶ÞõΊÜ2ùÓ~÷@Yüú™;i²×ÏáLÂÐûªFCŦô`Ǹåp™ªsR&Ì„°›}eîÜXm78cS§¦Ç ³¶.´.r'¼}YX	
-üÛÀw;l6ÙaÐ{kæïN[wYîÿø{‡ZœË³î¼µÌãý”‘£Q8® ÷?¾ªv
+xڝTÉnÛ0½ë+ˆ^J5ÍUzk	 …]ôä XŠ¥B‹CÉuú÷.ªåÀ1Ð^Ä!5óæ
+‡o(Ú Š¾_VÁ|¡(b”¤4ehõŒ˜b$¦EIJT*Ñ*G÷XI>®næÎQBÒ(’Æ•Ó„PÁ É:]|¿[†3¡$¾ÓU;TíÆí–»í,Š»>zgL²_”Ùv(´óáÜàW«à%0€@iÂD!к	î)Êáß
+¢D¤	Ú[Ï	•H)°k´¾tZ‹ã$UL•'SbË0Ì9',ZŒR|,ÖðŠâ±&°U
+l]QQdØWmï.…©éR4ã	‰ãÔa¯J€’\á¼Ê6:kz³“¸jmÁ#Sto}Õf§½?
+fñ)¿¬ÍχK_Ó	§¾ìBžà½Ër´qÕšè2Ô…­ÏÄQÒ´…K01ÐG!þÙ=õäýæ©T.£·Ý‹ÓøÝîy”*´ñfÇjE"lµñ©nÄŒ¤‡':m"p·Mt&;WClßüÿ¼À·ë[hq¦ €~	ˆ¢ö÷¸ÚÃ1Â̯%Ñe9Y¦^3¦H,Ù¿ƒg#«Ù„Ö
+q*MøAC©×ÐE×4]ëts¥µSÔ(€‚ž(ŧbI& „y˜U›ÛØ}ï°Ò×ùí(̺*ÚÁk1k?îøºí‡¬®Ýù¥®~Á€yG£
+zê_E/¨ƒIÄ£1©ÑDïlÒO`Ç
+¯MVûøýO]¼ì*óyÄðP‚`½ýW%…Çm³¦ðACçÖ'X@qQmʐÇFVf»6Áe¦³5 éP9ÒTQÃY&?0!gnë]ï,á–ÈŸö»Ê¢×ÎÜI“½~g
+†p7”…ÞW=0b*V0¥;¾À-‡Ë4PŘ“2i&„Ýì+sçÆj»Á›b85=µýs¡u‘;áíËÂJPâß¾Ûùc³ÉƒFÚ[3|wÚºËrÿÇß;Ôâ\žuç­eÖ琉Âq¹ÿ®Yª€
 endstream
 endobj
-9984 0 obj <<
+9972 0 obj <<
 /Type /Page
-/Contents 9985 0 R
-/Resources 9983 0 R
+/Contents 9973 0 R
+/Resources 9971 0 R
 /MediaBox [0 0 612 792]
-/Parent 9963 0 R
-/Annots [ 9975 0 R 9976 0 R ]
+/Parent 9951 0 R
+/Annots [ 9963 0 R 9964 0 R ]
 >> endobj
-9977 0 obj <<
+9965 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-HOWTO/images/cups1.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 9991 0 R
-/BBox [0 0 788 634]
+/PTEX.InfoDict 9979 0 R
+/BBox [0 0 855 635]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 9992 0 R
->>/Font << /R9 9993 0 R>>
+/R7 9980 0 R
+>>/Font << /R8 9981 0 R>>
 >>
-/Length 9994 0 R
+/Length 9982 0 R
 /Filter /FlateDecode
 >>
 stream
 xœÍXKoã6¾ëWr©
-D\¾I-ÐK‹4hÑm³÷T÷ Ø´­®di%%Aþ}‡zY¶´È¥‚(
-g>¿!‡ó
-(a@ý¯{n²àÃû*h¤ðå¾û§ÜßÖþß=6ü°Bõ8#Ö«]КaÞ „Q ™%LIXeÁâÇ?!9B|ÜB¾ƒ¤®\ºƒC\A}H*X/öîèÊ8]/a—¤µ+asˆQ½Hê8M6º¥ÕrõwÐú„Õ¯Á".×wá./³¸® /áÓÏŸî ~+\uy}@S–‡Iµü.XÔå3~Á1EéBFð§<:ÿ&‰€äÇÊËš	xôwðP&Çú¡Ì×ˏhF(¢¤°*F"i-¬¶Á¢Ê3‡žŽûÐãkáyðw«à3†Êÿ0°­Ô$E… ²þ]ZJ‰…4ˆ%†Š“€1-c •¶DD^""Ä0Òà&"bòÞ¹H/\¦Á.à†É$¼ÎÎ!x81óô¾d at nh…"!¡:jr!.
-dt\#µ>yUW›2)®‘ƒI¸Á˜G—
-n­‡‡SW–P)NÔ¤D¢†V'ŒÉ9±£!LPM´œ
-:/é¥ÛKvÌÓ%E惪§'£‚¨èÄWa
-î/ш°'IÏX¡…%fÄØ‘JKщ ÷“^:¾šÕ3 at u5¹g‚ë}9Ž2ç yDdd›¶ÿ:/šCk8$XĈ°QsHUÿùzæs.ñ²cBS†‡Œ3zô”fçªÌ˜Ó'žÔSIç+x¿¾ÌÛõ`NèÞÇ*ô‚ŧD¨ÉÁñrÜ’ÍsQ…ç'ˆ@Â[œøUÆ>þ[ˆéeY"yGÁ«6OcºZk<¢ýXçÅÛ\M
-`ê#‰ŠŽj ­{I6.¬
-·IvÉfb}H(e‹§xóÕ·Ë¿V¿\ä ·CK"‘¸Ž‚ãaMe/HO«*¢@)üb€iLD>Ö‘nÎùA ˜ß®{ço½ý1éÿw0ç,ŸÉ'ÚI“
-N#¯$új2¦}õknpI‘MÞªÔH/ÜÀ{Ü<‰Q—¯§¤¼ôx¾FsÀs¾LsA4x5BÅG8U”Dje$éСU»™õhF:‚©¤÷•N¼__µ¹`»¾‚sB7 0Ò߯G˜$Õœ(;Â4’t˜ðiF€F
-û©¤w”N\__ÊY »¾Ž³¦Œ¡„aͨ¥ð#³@3Ž%¢$éIbTÔÖ¹ZZ­õ!?Sà‘lK’A"±|`^28šJGãEœ°óEœ4…ÉKÇÆš>ÒXö1<%_háµ£tç¡ýwõw_AüMHH%Âom›Á‘=û$+¦]ÕwÀ.:hYüOŠôy¿w[ߢ;¸ÒùæØzñ=Ü´ÅlËäÅ•7ë%~Þv¥ÕrŸ0Ú4Uá¸-Öôõ|ñîxˆ´{3©o†–*oò¬ˆKÔ«s¯iÞ6í¶8­rˆk¯‡¸œO™¿x‹§â¶7E§‹Àu
-%ÖÏŒ³Üo¿¯î>Žcá-7 Û¡(·áC\ÖoáOC›0M¾:X=—Oy3d½c›t› †½W>˜Ì’
-Žyí¶ãy¡‹¡4ÃÉž£Ü`Í&ñçx5¥¼eÑPz/wddˆÁë+Ç¢ƒ
-ÑÞ4pýIQ`œ_“úÐt?oOÌ‘
-u’ãÖX¼;O®2Ï0(ož8÷¼’<6WäSUÇiÚÜ/ ÿ0Ü^¥zÃødËNw€+JW÷tk‚õ9øéƒþ€
+¬¸â›Z —iТ»ÍnÜÓºŦmu%K+)	òï;¤–--r©à ŠFCÎÇá7äÌ|‡ˆPˆÜ¯{nòàý
+û:ðRør×ýSíƒïmÿï›~Z¡ºF‰ÑœÂj´ÓP7ak¥@QC¨°ÊƒÅÏÞ?@z„丅biSÛl‡¤†æÖ°^ìíÑVI¶^Â.Í[Á搠þz‘6I–n ³
+J—«¿ƒÖ$¬~Ieº
+wE•'M
+EýxÍkiëwP4œ©ÓÂáΐ··ü!X4ÕÊqDYِüIͽ	ÂáÕÓâX;™Gï ß>ÜÃ}•›ûªX/?à4\)¸PRƒ«Ý‹ºÈ-Ú9îC‡ÎƒsÈoWÁgt“û¡Si$‰AFœyÿ.LYóˆèˆŸ”*N(!•!<v£y:Ra:&|òÞÙÈ.lfÁ.`špA¼ÌÏ!xÑ3Cô¶8 at f(É%pNI¤}$e‰\NäÕû²¨›zS¥esZ†C)uàòAÀŒqèpéҐHð“ 5#"PCIA¤ƈ
+¡<Rˆh*è¬d—f/é1L—™ªžž4âDÆ'¾r£ñp‰G„=IzÆrÅ
+ÑcÆŽtZŠN½¡ìÒòÕ¸ž¬«á=`o‹r䐎™Áb"bãÃ|8þ›¢¬]t—©;—ÜQÖý×ë±Ï˜ÀkÈŒ)Q¼c̘Ӄ¤'5Õ¸TiƬ>éô´žJ:[ÙÄúõ3`.Ø®ŸsB÷6R¡d(>%'xƒ §¾žÝÏÇ-Ù<•u8ºDB#$aT{bUIí²¥¿V¿/2‰HcC3-÷®ÎՍ9eXãíǦ¨íôB&ˆÂeF Š…×ü:J~¶ö9ÝØ°.í&ݥː¤¿Z<&›oö¸õèιÏúNáVàRîgxKG¢d'Q8“H‰_4P…ñÇÆ<Vþ‚’ºƒº7qþÖÏ?&ûÿæœÝ³€#˜dD™!XòA¢Ø)	Š¶”^¹–DS`"B2¹Y…BváÁÝ+à™I´¼|=ã¥Åó=šžómš¢ÁªæŠH6ÂÁ#‘XŽ Œ$Εl±ÍH§C0•ô¶²‰õë»6l×wpNèZ`M­F˜D¤XǃÓHÒa§&aét¦’ÞV6±~}7ç‚íúnÎ	Ô:"”P¢Ë|e˜"ªA’$ZÆm¢«„q•­s¼+°X´9É ˜?P'M%ƒ¡ñVÎ
+Øù>ΚÄ(&œa0cR+Ìû¨p¡Æ„aÙQÙs×þ»ú›KW
+qáj"üûÄ’=»4/Cß®êú_í³<y…Geö´ßÛ­kÏle]ol½ønÚœ¶Uúl«›õ?„ë]a„Ì…2Û%‡ã®˜ïé¹ìñ78ïÍ$y¼úq¨¼)ò2©PÏ7B|§ðo¶%Y]@â'{9$
+àjªâÙMxJqû™›çŠ+²fÏ”QíÓ«ÛcG¸‰=¼¶7È«mxŸTÍkøËÐ!ÌÒoVOÕcᇬ—дIл/Dß½8çÁd­Öp,»%ˆñ<ÝEGj‚Τ”qGP¦1sx“3¬K#ÖRè?(½•8"ÖD3WaQÄyÛ¢ÂÝ;¤e‰n~I›ƒo}¾»àMzÜÚ3xëˆU9úäÕ±æî€åȃ/GLu“d™¯1 ÿÐÛN¥~E÷äÅNõ@¿••mz®y_}þûŠ
 endstream
 endobj
-9991 0 obj
+9979 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610111331)
-/ModDate (D:20080610111331)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528091009-05'00')
+/ModDate (D:20080528091009-05'00')
 >>
 endobj
-9992 0 obj
+9980 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-9993 0 obj
+9981 0 obj
 <<
-/BaseFont /JSMOVR#2BAlbanyAMT
-/FontDescriptor 9995 0 R
+/BaseFont /TJGFTB#2BDejaVuSans
+/FontDescriptor 9983 0 R
+/ToUnicode 9984 0 R
 /Type /Font
 /FirstChar 32
 /LastChar 121
-/Widths [ 600 0 600 0 0 0 0 0 600 600 0 0 600 600 600 600 0 600 0 600 600 600 0 0 0 0 600 0 0 600 0 0 0 0 0 600 0 600 600 600 0 600 0 0 0 600 600 600 600 0 0 600 600 600 0 0 0 0 0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 0 600 600 600 600 600 600 0 600]
-/Encoding 9996 0 R
-/Subtype /Type1
+/Widths [ 318 0 460 0 0 0 0 0 390 390 0 0 318 838 318 337 0 636 0 636 636 636 0 0 0 0 337 0 0 838 0 0 0 0 0 698 0 632 575 775 0 295 0 0 0 863 748 787 603 0 0 635 611 732 0 0 0 0 0 0 0 0 0 0 0 613 635 550 635 615 352 635 634 278 0 579 278 974 634 612 635 0 411 521 392 634 592 818 0 592]
+/Encoding 9985 0 R
+/Subtype /TrueType
 >>
 endobj
-9994 0 obj
-1337
+9982 0 obj
+1332
 endobj
-9995 0 obj
+9983 0 obj
 <<
 /Type /FontDescriptor
-/FontName /JSMOVR#2BAlbanyAMT
-/FontBBox [ 0 -186 593 667]
-/Flags 5
-/Ascent 667
-/CapHeight 667
-/Descent -186
+/FontName /TJGFTB#2BDejaVuSans
+/FontBBox [ -2 -208 889 759]
+/Flags 4
+/Ascent 759
+/CapHeight 759
+/Descent -208
 /ItalicAngle 0
-/StemV 88
-/AvgWidth 600
-/MaxWidth 600
+/StemV 133
 /MissingWidth 600
-/CharSet (/y/n/c/comma/M/o/d/N/C/p/e/period/O/colon/slash/f/P/E/r/g/F/s/h/one/G/equal/t/i/S/u/three/T/I/four/v/minus/k/U/five/w/l/a/m/b/space/quotedbl/parenleft/parenright)
-/FontFile3 9997 0 R
+/FontFile2 9986 0 R
 >>
 endobj
-9996 0 obj
+9984 0 obj
 <<
+/Filter /FlateDecode
+/Length 281
+>>
+stream
+xœ]‘1rà E{‚IHØ3»q‘L&ÉZ<*Œ,¹}þ®ì)þOü¶>]Η´lªþ(kø¢MÅ%Í…îë£R]—T5­š—°=Ij¸ù\Õ§7Ÿ¿2)(îüîoT6|iöLXgºg¨øt¥jÔڍ1ºŠÒüo«9î‰)>­-¬,­Q­[Æð(x`NŒ³ÛÕ6b&,£ì°kœHkT`ì;FïD@ψcXÀh`fimØl3V°gDGFºB"×Ëg{äzùQÏÙ-b¸ar£3VÕhqW+'[¾‚…ÑŠ•ŸïõNü’<’×Tx”Bi“¹É\xK¢¿Ñæ5sJAÕ/;¡
+endstream
+endobj
+9985 0 obj
+<<
 /Type /Encoding
 /BaseEncoding /WinAnsiEncoding
 /Differences [ 45/minus]
 >>
 endobj
-9997 0 obj
+9986 0 obj
 <<
-/Subtype /Type1C
 /Filter /FlateDecode
-/Length 9998 0 R
+/Length1 100996
+/Length 37081
 >>
 stream
-xœ}WXTU»ÞÃ0{‚rÙXÔÞü†yÁþ‰—_‘‹WÂ(T’›
-Êp“¹¸¹ÎA‡Á^PQ‰MšÒLó¯,©,ÔŠ²ôx
-+ûöÿ9gÍ2SÏé<ÏkÍZßZß»Þïý¾OD¸º"‘hdxÖÚÔyxL¼u"ø‰„ç\„çÅŠ¾ÿWˆäyb~hΨjwç.æÜ]÷<7f·0ÚÚ= Ø“‹D…5»"róä›3×oÈ÷JX¹:x„‰Ž™©aaaþkåOñÌØ’¹>ÇÿEüÏÖŒ¬Ü¼ìŒœüÙþxuVVfšÿú,yÞ†-þ©éééÖm‰©Yý£3³2óòr·úEûO›2eê$ü1-63{mÁÿ˜Üœ\ÿeþ+3Öd¥nþÃ$ASä9i1¹é±yË×ÅEm^½eÃÂüÌUñ‹·nLØ–•š½Ö\PðÄɳB¦Î:iA¼J,'"‰ÉDE„Ä
-"š˜B,$¦/«ˆED O,&‚ˆb	J$3ˆ—ˆÕÄ2âïDC, b‰BDˆ‰ÄHbáAøž„7Ácqð!¦bà	Wb1(Ú"úÉe²K«˜o?q]êÚ"ñ’äI“¯“÷©ÕÒ±RÓˆñ##îlù‹[„[µÛî›Ü{FÍ%õ?£[<Ü<F{DzÔ{ôyüÛó9Ï$Ï
-Ͻ(¯Ý^¿zÓÞ£ÑÂ#Û%˜yQ7Ì…0˜)†ã>‘(@‚hR®T••éUÍ,”’Í:É¤ÒÉÙ%$賤‰lÖk›LJ­œEb²H©.+Õ«Íì{$šî¡™pOò®Ó
-Š,Tá:µ…ÝEâ#9úù<Þ¼yhíò¥¿€ÙÂÙ|Rn_Õ̶£þ²ÐnÕ‚/iÑa[*m!›
-äQÞ`Üm”Ò§÷l3œô{‹³¨÷ØjÚÌeK—IÉx£›Òl¿D›	ZòvÔåé1ë·-[ÁàKó°^Ä·¸ÇûÒ'…7wYêñÄ–XNŠž0Ec„€ïµk-ǻك–ÝÍœIªW蕪ªJ“”¼tK^é2ï³ß@üy/¸ÜíIM¬céëE5
-ê&¿F­ÞÂÒ'ïSôõfµ~;CŸ,Q+å¬Íw¡€õð‚G§¾„¹2˜
-O$úÁì¾Ýa|ï`x™BA«udj²Ž‚H‚ÐT‘ØÏÒ2«Ÿ­ƒ™ˆ­»
-¶Ý…l¸P #a:z"±y,ˆlGäÅpAˆ!ïñÈy=ü‚Ñ0&ð?Ñv­ëowf½ôò¬€€—ûÜëû…µíßÌÃc\[ö´xŸé¡3
-FûÒe‚\Mr\ÿ"R¯ö¬<6äö>¥»‘Ç£Áíó+ÇoœaèÒi©aé²xåÂcÙÀíYxeàìYÁsñ©·û~b†û…‡ë¼X¨ò,íÔ0(ØÊ’Ò2+KzÓHtY¨–ü,²cf/Zq†Õl&„˃ÕC¸hyчØüf¡N¶æôòý‹¹EÜòM)É©¯åFq±Ò™òäÏ}tuÿ™śýfÎ 5*u
-UE•JÃ$,Mڍ½øF±7)pûþˆ¿ëKŒ­eª‹T&NÚ¤5˜Yp¥ÌjCY©ZQÄØC&ópÛØAñàP˜huÁÊa«æ<¡hPa	˜8•8ƒ¡–<³ø½ì/8)x>øÜXºÜ&ÝGžó“ò¢ˆ~OöøóðàÙóƒƒæ|öðá—½?ÙŸðð/vC²Œ{§ª¥ä膻³»'`Ɔ ÑÈç÷ ð»îgÛ
-JƒRSYU¡fÓ6.(ˆáÁÍþ´ô‰”wµüxóýGÜ#®7n÷é0ˆÝ¼j#×-b‘òEa(ð7°ð<¸‚/„Â|D€ý
-“¤?  ç'"
-I9	(ðÿð—”}ª"X‡-Öáð„d'MI¾Jž?}üÚ¾²ê sVÃq5œ´C£×èÊjج†hm'º4qJ
-KÉ·¨?Ø)R¾"͆!aAqCÊ´’‡Z|¨'wð¹aP,ƒ9$ý½?>xùæ8vĦWéP›RÒ¢¢bH(v…Zˆ¡n_[µ0:be¨Ý¡µ°ük2°öáº~ç·uúÒçñ1­2H!å:eS£NßÌ€/Õ¬Òo/U)åL
-
-€Šî†w‚É"­Âd¥ì`8õ7¡K…%›5ú²
-6@ŸGnèê)¢Yøô̵됅¹†¤Vzm·‘í3Ô?Á6²“íS/:cS¹®ˆEÑ°‰¤O€Ëé}§ýör-åûóµêÚª+ê†FŒzQ»iO!‡Kââr'Ï”þ‰ßòð=Ö‹Q˜âB|+£û®­Y}dr4	Iõ`¸ö\8rí‹dÔÂø„…‹-á«Pd7wÂ|üdÛQÓŽ—b#A)úá0&‘tš›'{Ø‹	?oþäIá˜ð½½†hTlÅ\dÇÆtŠ7™€—•
-ŸSE
-Š¦¦;Ú	…öŸÞÝ.”˜í!àe‹ëm§áø_Ú(D
-2Ù†#)»VrR::xAò’Í9‡äì¡¢Cê^õ%õõÒ%æÍ\¾”6&.Iý{ÔÉw-EG7ª8…,±Ê;µª&†ÞiÒê,¬‘êZw®èÖ É½K_ÛÖžµ—ݸ'ø\;]¯©)0a[[Måfó³]—Žö~þnöëõ=®¸F«jô3i
-˜+Æ='©2†6nWâìˆ
-é¼
-³Vk `Ÿèpúâ å5{ Yyc)'t¤ÑôÞGÍ—¸g:¹½87·>ÍÍ)”CŒ}¨¥`%»³èrHlj~lÒPn^ÆC‡U”·N1ªÙ.ëú]6”­¢¾½Äf‡E/‘ñ›Ö«Vcù
-˜~žcoQÜ•CŸêì8yÊ|™ëçzÖÖ'I‹ðC7š™û”¥RWR¢Á\J¥œˆo^Ì-áâòSR“Öd‡sÒp
-M{2f^ý¤¹ýòÐe~ÅÜ	éÃ+8^À²h† ·p‡¶ô¢½äü«É?~
-dÇaƒÊ¨¨ØQU©fÖn‰*ZÅI£Su³Ð¹ŽÌ÷4Åß²†ãt'fDý(Ô)ý·]¯l8ƒLîʶ«Urv%…ÑÈ´’6F¼O5«ueÌg¦äòÞ?ðòSpù”/=NX!4Éh#ŸšÒç7nÎÂÐÔæôö|¶­àÄöÛo–µhZK™7r¤áQ	“1ï¦páÝ;®í܍••“â Áj ¡
-uªÆ&|s˜¢Éü•-×ýÀý›ëºóOeìg³,¹º˜b[´yæ-æ’6®MúñÕówn_MY^gã_ƒÚägjÐ5³¿Pf¡Ì†æӣ߮Ž»RûÒùÂRŸÏe]˜)¸cÉrB½‰¤O/_µ<{‘_RŽ…÷&:*À‹ø×9VuíƒC/1NåÌî‚0ùg¼L(€°T±¾¼±©ûäàDRr­-†[0{°`œqëÈ?¾ ÕàÐóYdÀZij­N0M{•Ä:Ò:ô8"Ï[
-íàEm
-2X+†ï|`–à.étÒ–	&|J¢@Ô/ÙF¢`è—|쨏ñ$Ìt—<¥x[ë6x¦<azb}éAˆ€E²w:`!Š’ä‘ô9îçk¿Ÿ{™B¢4xש¾’3$=è8ËÇqÖ^…£@‰à6сԅAK¢cÅC»2
-^4`/æ*1^í¸µÐšv©
-­q,WiJ0\»q"ºON‹Šš>-úÆwÜïýCÉ'WâUz[›pŸD®ßL	ˆûûÁ•q‚1ÖA˜Xˆñ¹‹QlvBÑÅq¥ód4º5
-t’$rÒEÀ-ܵüŸ-ä=d7ùï#£Qa§Mí?`Ûá6FZþŸ¸}ÊóHÆòÞ˜‹WpY€é"áeŸÿp¢zI<´7¾;yÝ’Ry<S^¡ÑpåR…Ni¬©«®®cnï;¤=ÁIoóU6’ŠÛ•ÕðÖ@¯q¡,}nÞ‡«¼yåÀûW™Ó®‹–%Z»•è”öîn¾ýû©³Å	Ö©ëé„t¦
-€XËW¬CáŽ2	wcÃí…ÙÖT‡˜‘‰/Hóïwm=î×~$3E×{*û3Öß;®´í÷<~äÍ–n@=ÎÞÊ„ãä•5çV¬}së+éLÁٍûÞàR¹yf²ôÏ
-xð ¸Y솙öT4ÜntÙ %ÁÁ»‡ß‘twä™2{ü`Ô£ðωGxüÆÈWXˆþ§ìç/f½<;쥠9w¾ì³UÅøOèÃïù"6ÞŽj7ëÍÜ3ÍœÞPÛÚ
-cßõ±ÍfçY¼ö^Sñ.§VåE"—t4‚䎽ð)rÝ—›FNjÒëu;kªêÙ(ðÊà~ç~oûõŒ®©¯®áêp'¡/gl¶þ)†8l«\¡,¯äªj+ØÈëp µîöÏ~!ÞQÁUq•Òr½ÒhÐjš™› zFr?s¿lüm!¸æw(ô
-Î
-¤C€,ÕîܱsWñL‰iûn“¶®ÅÈÀx0[)\²Gga„,=;7c}[ö[¬ì8r¨£#ëP†s`ì_¯QÀ<Ÿ³n][Ž}þðÉ“Y‡m{…­ÿ%«ÕÕÔrõRƒB§Pªw”jôÕ¿—UªwVp•Ï(pca¨¯7iíš,‚c8»~&2W\Y¡æx‰BW««åêÛ%4!Ö©±ïqêl%„ò»D‚.ÉpƒÔÔ¤l³ƒq˜µšÒRÊÂ
-qèÙðÛ/C춺Ú	¼·ÆÚªb}²êêÚêj\§}ýÁŽî÷ŸývÞ'«_)ÎNc¶—Ê9…£lÔÕÖ6ꙶös–Kœô‹+ÉKßÈMO•³[Å;_å¤EåCŠ¾þðîâ9óæ-‰_Õrb
-«®¯¬ÕpR…R¡(k,m/b»óƝÃõàÎÏŸ®¹:÷èPlŽáá«Æ>X,}`®™â”‡[¥ÓªÄröUsÎ&¤M¶‘À¼L¢ÂÁ±’5ìçe¨„Ädx"Ùoª˜ýŒ‹ßá*ŒÿC>ÃXÜ鄹{8¸VÞƒå-Vø@²Å~Ú6À•Nf`}}mC#ӵ由““Þ»3mÜ¢Á+öŸJf5ÚŠìd¹R©(k*9º•=ÿæùâØI·¯¿opß7þõuª­Iìèm-ÂŒœ›ZZÈ·Gòno»»óî£âéWì`
+xœì½|U÷>~§ÏÜéDêR	mw6! HÊ!$TQY’M$²:‚ RPTDDDETlˆ¨ˆXQbWDl(*6Ä¿™Ùýúªoù>ò²÷Ν{Ïsιå9ç²ñEBHF³…†ätó#÷1ª»ó9¼¨2\x±ÀùXW4)îCå-R–wœçc%Õ¥•íIã"gtgiÅÔ’Dm,B-QY$\|H~|"å8­ÉeNƒ´¹é„(GjWVŸxÎs÷íÑ¢p⹫3¾S‡Êð”ê&ÇG>u—Óê«
+WFZŽ|£óü<B}øêh,>gFåL„ú½ŠÐsmªk"Õ½¹¯ñø(BLD›Ñ.ççI´­"Ö9O®~–5äF4Õ:-Ûˆ]ÄB²‹Ó¶F{œžóÑ.j=ˆ(à´"ô&C¢ïˆB´É‘‘JXD*Ç҈Υ7Ñùôfúz7J¡cônz,#ÔÍÌpfó7•ÚAèYÔ
+m&ö¡ÚB¤ÔV:“VÐ>j7µ}ä ÐŽü]h)Z‹¦;ºXDÍ"§“ùNËNf7ZéüD÷»‰ÕÄG»-Ä\´­ hr ZMìuìÚ…Ž ¹T!9ËñI€,qôßéÈÚíŒ_‰b4bö#;;mŽöÖ8ï³Õ…ÙëýF³äB´–ÝÌZ\[ÅõØ:bqˆ½
+­A{¨1ÔDêmbÝ–¾€–&<@EKÙ+Ý1l	1Õ±Ýý™îJ''Óc‰õè =–çÈÞáZä`n"ó‹JÐVçïdVslêMÌ£:šºo[ ÝÜ@º›3Þ‘ÀÍt¬F(JÑx§6݃6¢.Ôr´Ô‘äÙ˦0Gœ‘«èýŽÍK‰Åä´›ÊDP	ý¥ãkd!´¡‡8–¡)’@I>mÙ>»xC¿¡#}ÏŒjÝ%é”GŸÆù6 !䩾ÍǏI7cFm`šo Úóèöm÷ÿÞËý]’
+éÛðk(¤†Æf:m#ªûä4;í¡Liïü/{ì_Q™o‘¶¨m¯EZ¤WgÍ:vWkálÆ~xí§¡rÛÒðÔÃm±–Q…¨3*C"‘†ú!!ºSæ”îZjJô=1ná‡:Dâ ÔID?BB"Ùê´SïuIäX¨³“s¡Î#ÝÙ7‰ºè¬"uÙ¸¡ãh¨+Èî=ê{ßuѽw8ˆ-8ú{èn@‰]P'O|uÊi?u5&Û@AMÈ,¨³È"+¡Î£6䨋¨¹êrû^TK¨+¨¬×Q¨k¨qïk¡®#¾÷#(ÃYkÕh*ªAå¨ÔñpùPGTä¬*ò£îÎOÀ©szøPºÓ'¸Ó;‚¨%9­Ù¨ÊéßÕ©¥¡
+çLJòOÈŠyO§Œ8c&9ŸÅNOü'P“O :H“,wWT9½]=ÂΘ
+1Ó©wÆ
+wÎ?ŸƒTæÔ]ioDسÈ9ç6Ÿ£Y­ƒ]á<9OÅn¥ÓÃ}‡ʈVO­)/-‹û:uòù»wøÆMõ¥—ÇcñšH¸2É—]UÔÕ—VQáËw{Å|ù‘X¤fR¤¸+þÍÐdwhaxRåøhU©/=\ö;3#ãÃÃkÍ®*Ä|ᚈ¯¼ÊW];®¢¼ÈW­—W9šlbg s,Àà‚p•óîEœJ4:áÏ
+ù3}†{ÞŽ9>Šzô;>÷;+
+ÔÄÊ£U>WàdQ§:V‰'-1§qXqu¸%Ñ*ÇEqÇãÈ›÷¸3k½P7ç§dLrdtuÆF²Æ™Éˆ'¯Æ›ó®ŽÜˆ3•ÅãÕ½ºu+v„Nªí‹ÖÖEJ¢5¥‘®UçuV
+êÖHÝ:ýínpß¹ë.â­Ýˆ³‚¢h²Ó×]©ÿÌús%õwÞLuú”y#˝wÕž]qo­»^«ñF¸»Ã•:éOžjGýþª=iýž5Øù9í‰5vj
+½ö۝ŽQ—¿ñƒÿÔéñÏŸY§Ÿïz›Ë7ثŽwVz¾žà´Eø¿tq-âÉ«ô¤Õï¦rO§2ï]ì*õPª`Ö“`Þ³•@K¬±ÄzOòôŠz³_卯†›@ˆ:Rã°ÆÊa„=	Oc÷´8u=yýÜu˜^'ÁíÐ=±–#Þ†O¬½6
+VIoæܱÅ^óô*rÆ„Á>ìí‚"g…VzRâÞ›:ÿ”8µ
+ØIOèXàžZ®þqgý&V¿‹Xï·¥ÚÛ5ÅB‘7ºN›bÏ‚¸·ÖÆ9oãÞÛþ„$ØÍEŽfµž”„O&{k Ì;•âà™J¯­¡Eu6Ôœ´*ÚÖz>Lj0;n½Ò›ÏÄ\ã'H̝ô;v$°³›w‚ø<ɉý]^=yöÿØê:Ï%´­>±¢ãž^õ«®Þ¢Éž?*ÿBÝn(ñNõ*°0Ò ±Øût1’¼ÒõÄx§G‘'/ѧnþÜu\'[ÝyØÅžÆå i/ow‚vaGbÔ;êç áYTïßžUNÿ8ì†ØI}ëöJ½Çž
+Çù<›ÃžæØ;›O^k	o$¸$üóõXÐs_é•õçÇŸ™‹¸ÇD.³†Á¢®'yêÆº>™
+Ü’@w}^âéX+©Â[§5'Zšº>-n0ç
+W]ƒ†=F,÷ÎŒ
+ï	Ÿ°¨ØÓԝ¯ªÞ(=‰WHughØ[=‰µ[‡qªbÿ§MuZb° ~……½9úóœŒsª?N§[Ìw…7®üwNs|bvj¼s6ì+õrëZb'VdÝ~9•="pÎE<+ê&{V{ãÛœ†Ûœ°ûÔØyWǶm¬²ÄžÉ9…_Æyû=Ú@×ZØuëd’ó¶ü4‹ )žŸ«`'W;?	ö
+{'jäĈ†óžÐ¹®Ÿv§”y'¼Ï+c cÄ[I¿·NêκӝÝÅTyóÞÐ_§ó*nๆsøW÷jÌ;5븺~·Õí$7r¨8{ÔÀˆ“%V{+z‚óY
+3–àCwUá§ê¿ó¤ú}«ÆÁ‰–œðÔ òpòP®óäâä9O…h„Gæ{ﲝ6ŸÇå;o†;O™Nk¦7/iÞ÷}o7Žpê®Ä<4Ì“•‘ï|º²G9-®lŸ÷ì>
+rúç:²Ü±!4ÒÃ9Ò
+Íòœº+{°Óšã”!èçŽÈpZ†9Ïn½?r£Ð^®3ªÐÛ;î8W—„¦…N{=êÉZe{ˆuš
+vžòùàmš#;Û“çêŸäÅGn=ôLx.ß“îúÈ•ìÊÌp4ÊñžÜÖaN9ÄéWàù3ͳ9¡m®gC–ó>aKÈÓ 1	2œrˆƒíöèïèUèyÁE*„žIÞ<ºödzã]ÔA^¯„fy0Ën½^JWðeB×ÿÃO xöç8?>ÏþB§¥Ð››4G~ÜºµÓß“àê=oóìKóüç!¤{ý\/ºþÌ9±âòÌJ†ç/wÞ\Í3=¤4Ï#§µ¤NZÃÙ9ÝêÀ'ú{ö…<Oåx½?†œþÙ'Zë1Û³5|™X÷‰5‘ÓÀ»žîÌuPC°¦Ò<ߝl…;O#<ýë­HÌ@|f4ðYýìçÂìÖéSè!žÆ+#¼½òz¥ys]pbdyûw0h>ìÄ
+«?†ÁúÌ;¡ÙÉþ­ÛGuýþÌÙ‘U‡}òfzë)4,8áDürgWÈáµ"/ωŸ8·Ofî†Qc}4Ú0îLjpÖ6Œ§p¯oå)ýê[ÙR‚³ês†±Ûé2ìºì8Ë×E½õÑGâìNäD
+£Þb/>OÄ€±QIÔ‹£'"“ÉÞÛzN¯†»“èIyž‹ö¸?éVÕËJÄ•a/ZpÑb§ñæï3þMfXíñ}e²WCdâÚW}Ýöi§dÃu÷?¿ßiç Î–ÓE
+ý_ãÍw5äR垇Ýx²+È­AuyY½O\$îÝ*O™õúÕçJë…N½Up}PÚ@óbÏ×%îð\LìWuw\ÿý[§úÎúé>Ÿttjäõﻧ½òý‡ïƒðŸº:9’/j Sý]G]Ï?wƒzºü_»Wòýæ^	ÿÿ÷J
+î•êoþ¿y¯„ObØÿÞ½>M¶ö¿p¯„O{¯ToÑæ^	ÿÁ}Áæ^	£õ^©þ_þÉ{¥úývò½Òï±ïïß.%òóD$ñ¿v»„ÑÉ·K§¿ÝøÏÜ.á?𮯁ÿ·o™°·Æ~Íüço™ðÿð->å–©>×ýOÞ2áÿó–É÷»eÂÿÂ-“ïßvË„=w¤ô´Mx;ÍyÿŸ»;§óÿÖÝþÍÝ‘ï¿vw„÷î¨þèßw„ÿ…»£?’ûï½;ª;YŸQ~{ãƒÿOÃ[šòÆÿ­ŸßælíÆ7¸ñù£{‡â†&þùýPýMöpܧ®ey_Ðr¿ªæ~ÙíÄ÷ã|c‘ˆo\¤":¹SWߟøb[W_ÿŠ©Õe1_yeu´&)ö•ÔD+}i5‘Ið%°:ï‹tµ‰/Ò5„Á¸}x¤&ìK¨vâÛx¸ËþÁ¿ýÞÞŸþÊŸïäòûâ5áâHe¸f‚/ZrªŒ‡Dj*ËcÞ—æÊc¾²HMÄÁ*­	W9¦'9¶;f9ÏՔF’|ñ¨/\5ÕW©‰9¢ãâŽÇÊ„}EŽÒØé/‹Ôù©¨(ZYítw;ÄË鎗#U1Ç{m<—´éä+ö…c±hQyØÁÃÅÑ¢ÚÊHU<wõ))¯p&©£+Ñà+ˆ–Ä';îoÓÉÓ¤&R]-®-ŠxbŠËÃÊÇÕÆ#®ø¤IÎ4UÔ»šL.—EkãŽ2•å ä"Ô$\鈭9ý]s’|•×jì-XYRŒ$³[´Æ‹8óàô.wTóOv•sÄV»ŽŽã„ë< ÉeÎÂúÍ wJjkªÀˆ7°8ê‹E“|±Úqã#Eq·Åµ¯$Zá,6× ¢hUq¹kG¬Æ…Ž¸ð¸è¤ˆgAby
+œXUѸ3
+±D«;+Õõ+ ñÎ+WTàq𚣆³KÂ'Ù­rÖE¯2Z9­Ù¾øÔêHIØêšPêä·•á©Înq†——”»-\w–žSq„†‹‹=Ë®s7h¸ÆÑ«¶"\ƒ] âH¬¼´ÊS£4±WAî
+
+9Bbîˆ:}b§"¹"±à9,\qz0¦NziŽzUS}å
+–9vÍ©‰¸¿6áõu+1בî¼Ômˆ³æ"5Þ Éњ☯͉}ØÆÅ®{Û¸Û¶ç2gfr`¿Œ‹8;É•Zë́ë“IÑòŠE¦ÄãWW;Û+<®"â¾HØîHv+¸~RÊÂq_Y8æHŒTäwÕÕ¯îb_mU1(\¯*ö”KXøG³‹V¸»Ú›6w’¾
+÷ôpöJ]ÇêpÑ„p©c˜³«¢Ø]ªÿÚ¢:	Ê9°#%®RB¾¬¼ÜB_A^Vሴü/»À7$?oxvf(Ó×&­Àyn“ä‘]8 oX¡Ïé‘Ÿ–[8Ê——åKË唝›™ä’*(Àyù¾ìÁCr²CN[vnFΰÌìÜþ¾tg\n^¡/'{pv¡#´0Ï
+¢²C®°Á¡üŒÎcZzvNvá¨$œ•]˜ëÈt”Ë÷¥ù†¤åfgËIË÷
+–?$¯ äÈÈtÄæfçfå;(¡Á!ÇGPFސQùÙý&9ƒ
+Æ$\˜Ÿ–œ–?(ÉçËsLÎ÷y]º:Z:2|¡áîà‚i99¾ôì‚ÂüPÚ`·¯ëþ¹yƒC8+oXnfZav^®/=䘒–žJè昒‘“–=8É—™68­¿kNˆÛ-aN½;°; (7”Ÿ–“ä+ÊÈv+Ž³óC…^OÇ÷Ž'r<u3òrBC‡9
+N¿:ˆ$<b@ȃpHsþ—ái晟ë˜ëÊ)ÌË/<¡Êˆì‚P’/-?»À‘¬ü<G]w>ó²¼0Ìñ§;y¹ ¯;GnÛoW‡ÓË
+f†Òr®N>©¯³ºBSŠ"ÕqwmÃæNÞ1š8;“¼U›8œ%Ü¿ÊÙ¸‰6¯êÐ’³³<ÖIœnõ„íÒqRâèõŽgu;L”8z‹'Eœ0æ%Ñu“Éå1o§;XMpž/®pÀœQî.òz9ge¸Â;¡æI
+בauM¹3drMyÜ9L|áZ§µ¦|Ðp
+Дg¯Þ¥þpHè_‰U;,U>)R1µ«Ó·Æå2O“òª’hM%˜î¹¯(Þ«.TˆûJ=áÅÑ8ŽÖ”võaìE\;tú³¿òðÏÄA8ùþJ„ëã ß_Œƒðoã 8ä‹<I±:Î8M€Z°à¿+ùêb%ü¿+áÄ<üÛb%œØ°+VÂÿ`¬„ëc%ß_Œ•ðIqÁ_ˆ•ðïÅJ¾?+á±RÃí{R¸äð¹sHüSá†pÉ÷·Â%|’º^ÞøO‡L¸*êûÛ!þGC&!“﯇LøԐÉ÷WB&|ڐÉ÷¯„L¸0møày®ÚiþRt„ë-ÿ;Ñ®‹Ž|':Â
+£#ß_ŠŽði£#ß߉ŽÜÅzÒF9øàß
+||ÿBàƒÿ8ðñý‰À{ÏɱÃÿÐÄëú÷ó‚ÜÕ)ºþßìæÝÛMpþvóîΊ½ÕëêýûjµÓvò¿þñov›\>¡¼[¹sXMéZ]VÝ
+NÌ¿ô»œd⠏_„F£Óü±–y¿M"
+шA,⏄‘ˆ$$#©HC:2‰,Ô5Fg &èLÔ5CÍQÔµriÚ ¶¨j: ³PGÔ	:£$Ôű¿êŽzx¿õi£ JF)¨'Juü۝ƒú ¾è\ÔÏ»çÎð¼óÈFÑ Çcƒ½ñ‚†¢|ïÛ³ÃÃG ‘h”cËyh:]€.Dc7Ü…nA— yèQ´}Š.EKÐeètZKhzÍEW¡oзh1º-@ÛÐ{èk´­GߣïÐt3º=‹v¢{Ð8gŽ®pæn—ãègÐsèEô<ڍ^@‘ûßx	½Œîufý0º½†^E{¹ý}:“âÎ}%ªp&dãþ‰Þ­mÌ»ä¬ŒÏœµ0
+MEÓÑL4mF7¡Yè"4]Œ¡/Ñ‚"h‚!X‚#xô+:F&DBBÇ	DÈ„B¨Ah„N„IXD#¢1qÑ„8“hJ4CGяDs¢Ñ’hEøˆÖD¢-ÑŽhOt Î":ˆ³‰Îè'ô:‘Dt!º݈îDÂO›ÉD
+Ñ“H%z¡Ð¢7qчèKœKô#Òˆt"ƒÈ$BDÑŸ@d£
+è>b 1ˆÈ!¹D1„Jäègôú}DÈáÄb$1ŠMœGŒ!Î'. .$ÆabQD¢„(%ʈrô1ž˜@T•ècô	QED‰jb"QCĈ8QKL"&Sˆ©Ä4b:1ƒ˜I\DÌ"f£uÄÅÄb.q	1¸”˜O, ‹ˆËˆË‰ÅÄb)qq%±Œ¸Š¸š¸†XN\K¬ ®#V׫ˆˆÕčÄâ&âfâb-q+±Ž¸¸¸ƒXOÜIÜEÜMÜCÜKl î#6÷›ˆˆ‰‡ˆÍÄÃÄâb+ñ(ññ8ññ$ñ±ØNì ž&vÏÏÏ»ˆç‰ÝÄÄ‹ÄKÄËÄ+ÄâUb/ññ:ññ&ññ6ññ.ñ±xŸØO|@ >$>">&>!>%ŸŸ‡ˆ/ˆ/‰¯ˆÃÄ×Ä7Ä·ÄwÄ÷Äââ(ñ#ññ3ññ+qŒ8N"’ I’"i’!Y’#yR 1)’)“
+©’©“i’ÙˆlLžA6!Ï$›’ÍÈæd²%ÙŠô‘­É6d[²Ùžì@žEv$;‘g“É$²Ù•ìFv'{~2@ÚdL&SÈžd*Ù‹ìMžCö!û’ç’ýÈ42Ì 3É™Eö'Ùä@r™C&sÉ<r9”Ì'ÈBr9œAŽ$G‘£ÉóÈ1äùää…äX2LŽ#‹Èb2B–¥dYNŽ''d%YEFÉjr"YCÆÈ8YKN"'“SÈ©ä4r:9ƒœI^DÎ"g““sȹä%ä<òRr>¹€\H."/#/'“KÈ¥ää•ä2ò*òjòr9y-¹‚¼Ž\I^O®"o W“7’kțțÉ[ȵä­ä:ò6òvòr=y'yy7yy/¹¼ÜHޏÞ@ûÉMääƒäCäfòarù¹•|”|Œ|œ|‚|’|ŠÜ†ÞFï wÑûèM´ÜNî Ÿ&w’ϐϒϑ»ÈçÉÝää‹äKäËä+äòUr/ùù:ùù&ùù6ùù.ù¹|ŸÜO~@ ?$?"?&?!?%’Ÿ‘Ÿ“‡È/È/ɯÈÃä×ä7ä·äwä÷äòò(ù#ùù3ùù+yŒ<N!Š HŠ¢hŠ¡XŠ£xJ 0%R%S
+¥R¥SeRÕˆjLA5¡Î¤šRͨæTª%ÕŠòQ­©6T[ªÕžê@Eu¤:QgS©$ªÕ•êFu§zP~*@ÙTJ¦R¨žT*Õ‹êMCõ¡úRçRý¨4*Ê 2©•Eõ§PÙÔ@j•C
+¦r©<j5”ʧ
+¨Bj5œA¤F¡©ÑÔyÔê|êêBj,¦ÆQET1¡J¨RªŒ*§ÆS¨
+ª’ª¢¢èzªššHÕP1*NÕR“¨ÉÔj*5šNÍ fRQ³¨ÙÔÅÔj.u	5º”šO- R‹¨Ë¨Ë©ÅÔj)uu%µŒºŠºšº†ZN]K­ ®£VR×S«¨¨ÕԍÔê&êfêj-u+µŽºººƒZOÝIÝEÝMÝCÝKm î£6R÷S›¨¨©‡¨ÍÔÃÔêj+õ(õõ8õõ$õµÚNí ž¦vRÏPÏRÏQ»¨ç©ÝÔÔ‹ÔKÔËÔ+ÔêUj/õõ:õõ&õõ6õõ.õµzŸÚO}@ >¤>¢>¦>¡>¥RŸQŸS‡¨/¨/©¯¨ÃÔ×Ô7Ô·ÔwÔ÷Ôêê(õ#õõ3õõ+uŒ:N#š Iš¢iš¡Yš£yZ 1-Ò-Ó
+­Ò­ÓmÒ݈nLŸA7¡Ï¤›ÒÍèætº%ÝŠöÑ­é6t[ºÝžî@ŸEw¤;Ñgӝé$ºÝ•îFw§{Ð~:@ÛtN¦Sèžt*Ý‹îMŸC÷¡ûÒçÒýè4:Î 3éE÷§ÐÙô@zC¦sé<z=”ΧèBz=œA¤GÑ£éóè1ôùôô…ôX:L£‹èb:B—Ð¥t]N§'Ðt%]EGéjz"]CÇè8]KO¢'ÓSè©ô4z:=ƒžI_DÏ¢gÓÓsè¹ô%ô<úRz>½€^H/¢/£/§ÓKè¥ôô•ô2ú*újúz9}-½‚¾Ž^I_O¯¢o WÓ7Òkè›è›é[èµô­ô:ú6úvúz=}'}}7}}/½¾ÞHßOo¢ ¤¢7ÓÓ[èGè­ô£ôcôãôô“ôSô6z;½ƒ~šÞI?C?K?G§wÓ/Ð/Ò/Ñ/Ó¯Ð{èWé½ôkôëôô›ô[ôÛô;ô»ô{ô>ú}z?ý}€þþˆþ˜þ„þ”>HFN¢¿ ¿¤¿¢Ó_ÓßÐßÒßÑßÓGèè£ôôOôÏô/ô¯ô1ú8ƒ‚!Š¡†aŽáÁŒÈHŒÌ(ŒÊhŒÎŒÉXL#¦1sÓ„9“iÊ4cš3-˜–L+ÆÇ´fÚ0m™vL{¦sÓ‘éÄœÍtf’˜.LW¦ӝéÁø™ c3A&™Iaz2©L/¦7sÓ‡éËœËôcÒ˜t&ƒÉdBLÓŸÀd3™AL3˜Éeò˜!ÌP&Ÿ)`
+™aÌpf3’ÅŒfÎcÆ0ç302c™03Ž)bŠ™S”2eL93ž™ÀT0•Leª™‰L
+câL-3‰™ÌLa¦2Ó˜éÌf&s3‹™Í\ÌÌaæ2—0ó˜K™ùÌf!³ˆ¹Œ¹œYÌ,a–2W0W2˘«˜«™k˜å̵Ì
+æ:f%s=³Š¹YÍÜȬanbnfnaÖ2·2ë˜Û˜Û™;˜õ̝Ì]ÌÝÌ=̽Ìæ>f#s?³‰y€yyˆÙÌ<Ìlaa¶2213O0O2O1Û˜íÌæif'óó,ó³‹yžÙͼÀ¼È¼Ä¼Ì¼Âìa^eö2¯1¯3o0o2o1o3ï0ï2ï1û˜÷™ýÌÌæCæ#æcææSæ óó9sˆù‚ù’ùŠ9Ì|Í|Ã|Ë|Ç|Ïa~`Ž2?2?1?3¿0¿2ǘã,b	–d)–f–e9–g³"+±2«°*«±:k°&k±ØÆìlöL¶)ÛŒmζ`[²­XÛšmöeÛ±íÙìYlG¶{6Û™Mb»°]Ùnlw¶ëg¬ÍÙd6…íɦ²½ØÞì9l¶/{.ۏMcÓÙ6“
+±Ylv ›Íd±9ì`6—Íc‡°CÙ|¶€-d‡±ÃÙìHv;š=ÞÏ^À^ÈŽeÃì8¶ˆ-f#l	[Ê–±åìxv[ÁV²Ul”­f'²5lŒ³µì$v2;…ÊNc§³3Ø™ìEì,v6{1;‡Ë^ÂÎc/eç³Ø…ì"ö2örv1»„]Ê^Á^É.c¯b¯f¯a—³×²+ØëØ•ìõì*öv5{#»†½‰½™½…]ËÞÊ®cocogï`׳w²w±w³÷°÷²Øû؍ìýì&ööAö!v3û0»…}„ÝÊ>Ê>Æ>Î>Á>É>Ånc·³;اٝì3ì³ìsì.öyv7ûû"ûû2û
+»‡}•Ý˾ƾξÁ¾É¾Å¾Í¾Ã¾Ë¾Çîcßg÷³°Øُ؏ÙOØOÙƒìgìçì!ööKö+ö0û5û
+û-ûû={„ý=ÊþÈþÄþÌþÂþÊcsˆ#8’£8šc8–ã8ž8̉œÄɜ©œÆéœÁ™œÅ5âsgpM¸3¹¦\3®9ׂkɵâ|\k®
+×–kǵç:pgq¹NÜÙ\g.‰ëÂuåºqݹœŸp6ä’¹®'—Êõâzsçp}¸¾Ü¹\?.Kç2¸L.Äeqý¹\67Äåpƒ¹\.Â
+åò¹®Æ
+çFp#¹QÜhî<nw>ww!7–sã¸"®˜‹p%\)WÆ•sã¹	\WÉUqQ®š›ÈÕp1.ÎÕr“¸ÉÜn*7›ÎÍàfrq³¸ÙÜÅÜn.w	7»”›Ï-àr‹¸Ë¸Ë¹ÅÜn)ww%·Œ»Š»š»†[Î]Ë­à®ãVr×s«¸¸Õ܍Üî&îfîn-w+·Ž»»»ƒ[ÏÝÉÝÅÝÍÝÃÝËmàîã6r÷s›¸¸¹‡¸ÍÜÃÜîn+÷(÷÷8÷÷$÷·ÛÎíàžævrÏpÏrÏq»¸ç¹ÝÜÜ‹ÜKÜËÜ+ÜîUn/÷÷:÷÷&÷÷6÷÷.÷·{ŸÛÏ}Àà>ä>â>æ>á>årŸqŸs‡¸/¸/¹¯¸ÃÜ×Ü7Ü·ÜwÜ÷Üîî(÷#÷÷3÷÷+wŒ;Î#žàIžâižáYžãy^à1/ò/ó
+¯ò¯óoò߈oÌŸÁ7áÏä›òÍøæ|¾%ߊ÷ñ­ù6|[¾ßžïÀŸÅwä;ñgóù$¾ß•ïÆwç{ð~>ÀÛ|OæSøž|*ß‹ïÍŸÃ÷áûòçòýø4>Ïà3ùŸÅ÷çðÙü@~ŸÃæsù<~?”ÏçøB~?œÁäGñ£ùóø1üùüü…üX>̏ã‹øb>—ð¥|_Ώç'ð|%_ÅGùj~"_ÃÇø8_ËOâ'óSø©ü4~:?ƒŸÉ_ÄÏâgóósø¹ü%ü<þR~>¿€_È/â/ã/çóKø¥üü•ü2þ*þjþ~9-¿‚¿Ž_É_ϯâoàWó7òkø›ø›ù[øµü­ü:þ6þvþ~='7/¿¿ßÈßÏoâàäâ7óó[øGø­ü£ücüãüü“üSü6~;¿ƒšßÉ?Ã?Ë?ÇïâŸçwó/ð/ò/ñ/ó¯ð{øWù½üküëüü›ü[üÛü;ü»ü{ü>þ}~?ÿ€ÿÿˆÿ˜ÿ„ÿ”?ÈÆÎâ¿à¿ä¿âó_óßðßòßñßóGøø£üüOüÏü/ü¯ü1þ¸€B J F`NàAÀ‚(H‚,(‚*h‚.‚)XB#¡±p†ÐD8Sh*4š-„–B+Á'´Úm…vB{¡ƒp–ÐQè$œ-t’„.BW¡›Ð]è!ø…€`A!YHz
+©B/¡·pŽÐGè+œ+ôÒ„t!CÈBB–Ð_ d…ABŽ0XÈò„!ÂP!_(
+…aÂpa„0R%ŒÎÆç
+c…°0N(Š…ˆP"”
+eB¹0^˜ T•B•ª…‰BâB­0I˜,L¦
+Ó„éÂa¦p‘0K˜-\,Ìæ
+—ó„K…ùÂa¡°H¸L¸\X,,–
+WW
+Ë„«„«…k„åµÂ
+á:a¥p½°J¸AX-Ü(¬nnnÖ
+·
+ë„Û„Û…;„õÂ]ÂÝÂ=½Âá>a£p¿°Ix at xPxHØ,<,l¶
+
+	OO
+O	Û„íÂáia§ðŒð¬ðœ°Kx^Ø-¼ ¼(¼$¼,¼"ì^ö
+¯	¯oo
+o	oïï
+ï	û„÷…ýÂÂáCá#ácááSá ð™ð¹pHøBøRøJ8,|-|#|+|'|/~Ž
+?
+?	?¿¿
+Ç„ãa“˜Â4f0‹9Ìcc,b	ËXÁ*Ö°Ž
+lb7ñ¸	>7ÅÍpsÜ·Ä­°·Æmp[Ü·ÇðY¸#î„ÏƝqî‚»ân¸;îý8€mÄÉ8÷Ä©¸îÏÁ}p_|.î‡Óp:ÎÀ™8„³p< gãxÎÁƒq.ÎÃCðPœp!†‡ãx$…Gãóð|>¾ _ˆÇâ0‡‹p1Žà\ŠËp9'à
+\‰«pW㉸Çp×âIx2ž‚§âix:žgâ‹ð,<_Œçà¹ø<_Šçãx!^„/×ãÅx	^Š¯ÀWâeø*|5¾/Ç×âø:¼_Wáðj|#^ƒoÂ7ã[ðZ|+^‡o÷ã;ðz|'¾ߍïÁ÷â
+ø>¼ߏ7áðƒø!¼?Œ·àGðVü(~mD÷ãÇñøIô zmÇO¡Mè´oCsÐSh>ÞŽwà§Ñx'~?‹ŸÃ»ðóx7z¿€_Ä/á—ñ+x~ïE¡Çñkøuü~¿…ßÆïàwñ{h+Þ‡ßÇûñø þ„?ÆŸàOñAüþÂ_à/ñWø0þƒ¿Åßáïñü>ŠÄ?áŸñ/øW|‘Hˆ¤H‰´Èˆ¬È‰¼(ˆXEI”EETEMÔEC4EKl$6Ï›ˆgŠMÅfbs±…ØRl%úÄÖb±­ØNl/vÏ;¢ÄNâÙbg1Iì"v»‰ÝÅ¢_ˆ¶“ű§˜*ö{‹çˆ}ľâ¹b?1ML3ÄL1$f‰ýÅb¶8P$戃Å\1O"óűP&Gˆ#ÅQâhñ<qŒx¾xx¡8V‹ãÐåb‘X,FıT,ËÅñâ±B¬«Ä¨X-NkĘkÅIâdqŠ8Uœ&Ngˆ3Å‹ÄYâlñbqŽ8W¼Dœ'^*ΈÅEâeâåâbq‰¸T¼B¼R\&^%^-^#.¯Wˆ×‰+ÅëÅUâ
+âjñFqx“x³x‹¸V¼U\'Þ&Þ.Þ!®ïïïïï7ˆ÷‰ÅûÅMââƒâCâfñaq‹øˆ¸U|T|L|\|B|R|JÜ&nwˆO‹;ÅgÄgÅçÄ]âóânññEñ%ñeñqøª¸W|M|]|C|S|K|[|G|W|OÜ'¾/î?ˆŠ‰‹ŸˆŸŠÅÏÄÏÅCââ—âWâañkññ[ñ;ñ{ñˆøƒxTüQüIüYüEüU<&—DH¤DI´ÄH¬ÄI¼$HX%I’%ER%MÒ%C2%Kj$5–ΐšHgJM¥fRs©…ÔRj%ù¤ÖR©­ÔNj/uÎ’:J¤³¥ÎR’ÔEê*uC+¤îRɏn—’-¥d)Eê)¥J½ÐJ©7º}%#õ‘úJçJý¤4)Ý*eH™R-“²¤þÒ )[(
+’r¤ÁR®”'
+‘†¢UR¾T JäáÒi¤4J-'‘Η..”ÆJaiœT$K©D*•Ê¤ri¼4Aª*ÑmR••ª¥‰R“âR­4Iš,M‘¦JÓ¤éÒi¦t‘4Kš-],Í‘æJ— ¥Ò<éRi>º]#-J‹¤Ë¤Ë¥ÅÒi©t…t¥´LºJºZºFZ.]+­®“VJ×K«¤¤ÕҍÒé&éféi­t«´NºMº]ºCZ/Ý)Ý%Ý-Ý#Ý+mî“6J÷K›¤¤¥‡¤ÍÒÃÒéi«ô¨ô˜ô¸ô„ô¤ô”´MÚ.퐞–vJÏHÏJÏI»¤ç¥ÝÒÒ‹ÒKÒËÒ+ÒéUi¯ôšôºô†ô¦ô–ô¶ôŽô®ôž´Oz_Ú/} >”>’>–>‘>•JŸIŸK‡¤/¤/¥¯¤ÃÒ×Ò7Ò·ÒwÒ÷Òéé¨ô£ô“ô³ô‹ô«tL:.#™I™’i™‘Y™“yY±,Ê’,ËŠ¬Êš¬Ë†lÊ–ÜHn,Ÿ!7‘Ï”›ÊÍäær¹¥ÜJöÉ­å6r[¹Ü^î Ÿ%w”;Ég˝å$¹‹ÜUî&w—{È~9 ÛrPN–SäžrªÜKî-Ÿ#÷‘ûÊçÊýä49]ΐ3吜%÷—ÈÙò@yœ#–så<yˆ<TΗäBy˜<\!”GÉ£åóä1òùòò…òX9,“‹äb9"—È¥r™\.—'Èr¥\%Gåjy¢\#Çä¸\+O’'ËSä©ò4yº<Cž)_$Ï’gËËsä¹ò%ò<ùRy¾¼@^(/’/“/—ËKä¥òò•ò2ù*ùjùy¹|­¼B¾N^)_/¯’oWË7Êkä›ä›å[äµò­ò:ù6ùvùy½|§|—|·||¯¼A¾OÞ(ß/o’”’7ËË[äGä­ò£òcòãòò“òSò6y»¼C~ZÞ)?#?+?'ï’Ÿ—wË/È/Ê/É/˯È{äWå½òkòëòò›ò[òÛò;ò»ò{ò>ù}y¿ü|@þPþHþXþDþT>(&.’¿¿”¿’Ë_ËßÈßÊßÉßËGää£òòOòÏò/ò¯ò1ù¸‚B!J¡FaNáAÁŠ¨HŠ¬(ŠªhŠ®Š©XJ#¥±r†ÒD9Siª4Sš+-”–J+ŧ´VÚ(m•vJ{¥ƒr–ÒQ餜­tV’ÐÃJ¥«ÒMé®ôPüJ@±• ’¬¤(=•T¥—Ò[9Gé£ôUÎUú)iJº’¡d*!%Ké¯P²•Ê %G¬ä*yÊe¨’¯(…Ê0e¸2B©ŒRF+ç)c”ó•”•±JX§)ÅJD)QJ•2¥\¯LP*”J¥J‰*ÕÊD¥F‰)q¥V™¤LV¦(S•iÊte†2S¹H™¥ÌV.Væ(s•K”yÊ¥Ê|e²PY¤\¦\®,V–(K•+”+•eÊUÊÕÊ5ÊråZe…r²R¹^Y¥Ü ¬VnTÖ(7)7+·(k•[•uÊmÊíÊÊzåNå.ånåå^eƒrŸ²Q¹_Ù¤< <¨<¤lVV¶(([•G•Ç”Ç•'”'•§”mÊve‡ò´²SyFyVyNÙ¥<¯ìV^P^T^R^V^Qö(¯*{•×”ו7”7•·”·•w”w•÷”}ÊûÊ~åå€ò¡ò‘ò±ò‰ò©rPùLù\9¤|¡|©|¥V¾V¾Q¾U¾S¾WŽ(?(G••Ÿ”Ÿ•_”_•cÊq©„Jª”J«ŒÊªœÊ«‚ŠUQ•TYUTUÕT]5TSµÔFjcõµ‰z¦ÚTm¦6W[¨-ÕVªOm­¶QÛªíÔöjõ,µ£ÚI=[í¬&©]Ô®j7µ»ÚCõ«ÕVƒj²š¢öTSÕ^joõµÚW=Wí§¦©éj†š©†Ô,µ¿:@ÍVªƒÔu°š«æ©CÔ¡j¾Z ªÃÔáêu¤:J­ž§ŽQÏW/P/TǪauœZ¤«µD-UËÔru¼:A­P+Õ*5ªV«Õ5¦ÆÕZu’:Y¢NU§©ÓÕêLõ"u–:[½X£ÎU/Qç©—ªóÕêBu‘z™z¹ºX]¢.U¯P¯T—©W©W«×¨ËÕkÕêuêJõzu•zƒºZ½Q]£Þ¤Þ¬Þ¢®UoUש·©·«w¨ëÕ;Õ»Ô»Õ{Ô{Õ
+ê}êFõ~u“ú€ú úºY}XÝ¢>¢nUUSWŸPŸTŸR·©ÛÕêÓêNõõYõ9u—ú¼º[}A}Q}I}Y}EÝ£¾ªîU_S_WßPßTßRßVßQßUßS÷©ï«ûÕÔê‡êGêÇê'ê§êAõ3õsõú…ú¥ú•zXýZýFýVýNý^=¢þ UTRVQU©Ç5¤©Q­1«q¯	ÖDMÒdMÑTMÓtÍÐLÍÒiµ3´&Ú™ZS­™Ö\k¡µÔZi>­µÖFk«µÓÚk´³´ŽZ'íl­³–¤uѺjÝ´îZͯ4[jÉZŠÖSKÕzi½µs´>Z_í\­Ÿ–¦¥kZ¦Ò²´þÚ -[¨
+Òr´ÁZ®–§
+цjùZV¨
+Ó†k#´‘Ú(m´vž6F;_»@»P«…µqZ‘V¬E´­T+ÓʵñÚ­B«Ôª´¨V­MÔj´˜×jµIÚdmŠ6U›¦M×fh3µ‹´YÚlíbmŽ6W»D›§]ªÍ×hµEÚeÚåÚbm‰¶T»B»R[¦]¥]­]£-×®ÕVh×i+µëµUÚ
+ÚjíFmv“v³v‹¶V»U[§Ý¦Ý®Ý¡­×îÔîÒîÖîÑîÕ6h÷iµûµMÚÚƒÚCÚfíam‹öˆ¶U{T{L{\{B{R{JÛ¦m×vhOk;µg´gµç´]ÚóÚnííEí%íeímöª¶W{M{]{C{S{K{[{G{W{OÛ§½¯í×>ÐhjikŸhŸjµÏ´ÏµCÚÚ—ÚWÚaíkíí[í;í{íˆöƒvTûQûIûYûEûU;¦בNè¤Né´Îè¬Îé¼.èXuI—uEWuM×uC7uKo¤7ÖÏЛègêMõfzs½…ÞRo¥ûôÖz½­ÞNo¯wÐÏÒ;êô³õÎz’ÞEïªwÓ»ë=t¿Ðm=¨'ë)zO=Uï¥÷ÖÏÑûè}õsõ~zšž®gè™zHÏÒûëôl} >HÏÑë¹zž>Dªçëz¡>L®ÐGê£ôÑúyúý|ýýB}¬ÖÇéEz±ÑKôR½L/×Çëô
+½R¯Ò£zµ>Q¯Ñcz\¯Õ'é“õ)úT}š>]Ÿ¡ÏÔ/Ògé³õ‹õ9ú\ý}ž~©>__ /Ôé—é—ë‹õ%úRý
+ýJ}™~•~µ~¾\¿V_¡_§¯Ô¯×Wé7è«õõ5úMúÍú-úZýV}~›~»~‡¾^¿S¿K¿[¿G¿WߠߧoÔï×7éèêé›õ‡õ-ú#úVýQý1ýqý	ýIý)}›¾]ß¡?­ïÔŸÑŸÕŸÓwéÏë»õôõ—ô—õWô=ú«ú^ý5ýuý
+ýMý-ýmýý]ý=ôzRߧ¿¯ï×?ÐèêéëŸèŸêõÏôÏõCúú—úWúaýkýý[ý;ý{ýˆþƒ~TÿQÿIÿYÿEÿU?¦7A¤A´Á¬Á¼!Ø
+ɐ
+ÅP
+ÍÐ
+Ã0
+Ëhd46Î0šgMfFs£…ÑÒheøŒÖF£­ÑÎhot0Î2:Œ³ÎF’ÑÅèjt3º=¿0l#h$)FO#Õèeô6Î1ú}s~Fš‘nd™FÈÈ2úŒlc 1ÈÈ1¹Fž1ÄjäF¡1ÌnŒ0F£ŒÑÆyÆã|ããBc¬6ÆEF±1JŒR£Ì(7ÆŒ
+£Ò¨2¢Fµ1Ѩ1bFܨ5&“)ÆTcš1ݘaÌ4.2f³‹9Æ\ãcžq©1ßX`,4——‹%ÆRã
+ãJc™q•qµq±Ü¸ÖXa\g¬4®7V7«5ÆMÆÍÆ-ÆZãVcq›q»q‡±Þ¸Ó¸Ë¸Û¸Ç¸×Ø`Ügl4î76›‡-Æ#ÆVãQã1ãqã	ãIã)c›±ÝØa<mì4ž1ž5ž3vÏ»Œ—Œ—WŒ=Æ«Æ^ã5ãuã
+ãMã-ãmãã]ã=cŸñ¾±ßøÀ8`|h|d|l|b|j4>3>7___‡¯oŒoïŒï#ÆÆQãGã'ãgããWã˜qÜD&a’&eÒ&c²&gò¦`bS4%S6S55S7
+Ó4-³‘ÙØ<Ãlbži65›™ÍÍfK³•é3[›m̶f;³½ÙÁ<Ëìhv2Ï6;›If³«ÙÍìnö0ýfÀ´Í ™l¦˜=ÍT³—ÙÛ<Çìcö5Ï5û™ifº™afš!3Ëìo0³Íæ 3Çlæšyæs¨™o˜…æ0s¸9ÂiŽ2G›ç™cÌóÍÌͱfØg™ÅfÄ,1KÍ2³ÜoN0+ÌJ³ÊŒšÕæD³ÆŒ™q³ÖœdN6§˜SÍiæts†9ӼȜeÎ6/6ç˜sÍKÌyæ¥æ|s¹Ð\d^f^n.6—˜KÍ+Ì+ÍeæUæÕæ5æróZs…y¹Ò¼Þ\eÞ`®6o4ט7™7›·˜kÍ[ÍuæmæíææzóNó.ónóó^sƒyŸ¹Ñ¼ßÜd>`>h>dn66·˜˜[ÍGÍÇÌÇÍ'Ì'ͧÌmævs‡ù´¹Ó|Æ|Ö|ÎÜe>oî6_0_4_2_6_1÷˜¯š{Í×Ì×Í7Ì7Í·Ì·ÍwÌwÍ÷Ì}æûæ~óó€ù¡ù‘ù±ù‰ù©yÐüÌüÜ<d~a~i~e6¿6¿1¿5¿3¿7˜?˜GÍÍŸÌŸÍ_Ì_ÍcæqY„EZ”E[ŒÅZœÅ[‚…-Ñ’,ÙR,ÕÒ,Ý2,Ó²¬FVcë«‰u¦ÕÔjf5·ZX-­V–Ïjmµ±ÚZí¬öVë,«£ÕÉ:Ûêl%Y]¬®V7«»ÕÃò[˶‚V²•bõ´R­^Vo뫏Õ×:×êg¥YéV†•i…¬,«¿5ÀʶZƒ¬k°•kåYC¬¡V¾U`ZìáÖk¤5Êmg±Î·.°.´ÆZakœUd[«Ä*µÊ¬rk¼5Áª°*­*+jU[­+fÅ­Zk’5ÙšbMµ¦YÓ­ÖLë"k–5ۺؚc͵.±æY—Zó­ÖBk‘u™u¹µØZb-µ®°®´–	±’xÙÔê²H—V.ª‰VqáDɦ«‰LŠ°a¯àÒ¢¥ÑªÈ.œ(ÅŒ¢òš¢ÚÊ’ŠÈ±¨¾Ž3Š£ñpQQ¤*Ž‹NTÙÌ¢°+²8Qd:òÃq.€ % #^Cõ‚"'ª\Ôˆ$J6”ñ
+±¥J(Õ¿^V鉪Կ(ZY†‡Òâ€rÊêëô€qáºÌù`³ãåŶÜ+¸l°¤,ÉNXRžp]6è\ž(Éìdùxq`ŒñõuiPC­&œôPZ‰TU„«ŠË‹ØœpQm<ÂVx…”Ó°_Eƒ6'á 
+¯ sëé
+çƒÍMŒ¯JŒÏm8¾ªáøÜÄøª„ƒ«ÂîÿWMÔY0T¨ª”ŠT•ry`|ŒÏKõ
+9¯¬¶ª4\S[Y®ËцOl~B‡š„ù
+u¨i¨C~B‡šDQó
+± c
+ÜXØPZ¼¡´Â„˜xÂ#…î”ÆÝ)–˜ÒÚÄ”«jÁªa	«j½‚VS^UÊÔºŸò°“,¬møÄ
+ƒ©¯…]3¢¶“ÔG5¨O­¯³£¶Nó
+<º~O;Qe*¢U¥1®¶ª¼{žÝ¡ì¥Ê ”6”A(“¡L²'”©P¦A™e”™P† ÌJ”©€Ÿ
+ø©€›
+¸©€›
+¸©€›
+¸©€›
+¸©€›
+¸©€›
+¸©YL^Y´¦Š‰ºŸ‰¶4°9
+°Ó ;
+°Ó ;
+°Ó ;
+°Ó ;
+°Ó ;
+°ÓBÌ0³¶3ìMìtÀNìtÀNìtÀNìtÀNìtÀNìtÀN»ÓÁßàïÀÏ üÀÏ üÀÏ üÀÏ üÀÏ üÀÏ üÀÏ üÀÏüLÀÏüLÀÏüLÀÏüLÀÏüLÀÏüLÀÏüLÀÏüLÀ~ðC€üà‡‚lÿÄ®/õ
+hô ‡ =è!@zÐC€žèY€žèY€žèY`}XŸÖg~V*NsO’Ä&Ÿ¨ri¡DŽ$κ¼XE8V–¨Gëëž÷îPö€Òe JÊ ”ÉP¦@ÙÊT(Ó L‡2ÊL(CP&¼áïø= ¿à÷ ü€ßð{ ~© áYkð =@“ IФhÒ4éšøA?hâMü ‰4ñƒ&~ÐÄžðƒ'üà	?àûßø~À÷¾ð€ ü à ? øÀ$óÎi^‰ÅÆC(  @ €P  
+@°A°A°A`ƒlÀ·ß|ðmÀ·ß|ðƒ€ü à?øAÀ~ðƒ€ü à?øAÀ~ð“?ð“?ð“?ð“?ð“?ð“?ð“?ð“?ðS ?ðS ?ðS ?ðS ?ðS ?ðS ?ðS ?ðS ?ð!ðCà‡0Àa€ ?„~üø!ðCà‡0Àa€ ?„~üø!ðCàO|üø!ðC8à‡pÀá€Â?„~üø!ðC8àOü4ÀO|	üø!$ðCHà‡À!B?„~	üø!$ðCHàOü4ÀO|üø!,ðCXà‡°ÀaÂ?„~üø!,ðCXà‡°ÀaÂ?„~üø!,ðCXà‡°Àa€ ?„~üø!ðCà‡0Àa€ ?„~üø!ðCà‡0À´îZ÷­ûÖý@ë~ u?к?òB /ò€Øý@ì~ r?¹ˆÜDíÏJJk“ÜßÚ'x”êÖ¼wî~ÁK´ØP¡L†2ÊžrY4:ÁûÅþ£Ò L‡2ÊL(CP&| :
+ €N@§ Ó Ði è4дèÑÊT(H4 $ 
+ ‰€D@¢ Ñ€ß/9$åýÆê&
+ “€IÀ¤`Ò 0i ˜4 L &
+ “€IÀ¤`Ò 0i ˜4 L &
+ “€ | Ò i ˆ4 D "
+ ‘€H@¤ Ò i ˆ4 D "
+ ‘€H@¤ Ò i ˆ4 D "
+ ‘€H@¤ Ð h 4 D ¢ !€@ˆ Ä b 1 „ "
+ €h@4 š M %ÄÄ£Uј\\©‰ÄÊcÞN«¨.{U!\G*"åa)T+wRS¯™Åá}vjR^e¹›X'†5èŒó*#¥‰Nz¹Óý$,ÆâÓ#ñ0Ó?ìŠ	ÅF<z´óŠrð˜Â2§F»€Ì puu˜Í	WŽ+“ƒkÉÜZrd9CÊ©ü²(SP^Z¦
+õhC
+)+§2œ¿CbåRvMTèP÷ŒÃ' Eš©3»¼Îl«öä¡	£¼ñô8רR×(¦8Rs ‹žæšä¾Œ{&¹Â˜	žIžI	¤gUµä”r.š°‹ª)‹²1רŒWPqÇ6À§ª»Šœ¿Î#u.5ôµzŠšR´álÕ6œ­è‰ÙJ¨‘ٝõÔìÁƒ—`Í2mÚÁîÁzãêÞÁz†|0 ù` òÁ äƒÈ€8@ Ž G ˆ# Ä â q€8@ Ž G 2 d„ ’ I ˆ$ a 2 d„È@4Ȑ #@F€Œ0øY€ŸøY€ŸøY€Ÿ•À·!´!´!´!´ºl .¨Ëê²!´!´´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²´l -HËÒ²!ó³!󳁯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²¯là+øʾ²!ñ³·là-xˆÄφÄφÄÏ>³ÏlHülHülHülà9xΞ³çlà9xΞ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³!ñ³omà[????øØ>¶màc?????????>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>îm¸¶!´!´!´!´!´!´!´!´!´!´!´ómH mH mH mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷mà}xßÞ·÷màý ð~x?¼Þï÷ƒÀûAàý ð~x?¼Þï÷ƒÀûAàý ð~x?¼ÞƒºvÐø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|þÿÿ‚ÀAà¿ ð_ø/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའ\x÷‚À{A8σpžá<Ây„ó<çyÎó œçA8σpžÓëä‚=pžá<Ây„ó<çyÎó œçA8σp~áüÂù„ó7çoÎß œ¿A8ƒpþ3ÿ_{ï/GU§{WõêêÝ—}ÏÞ	¹'$!„K²×ê®K#ÊîÞU‹›ƒA.ìØ’˜‹ˆ	àˆ   È@Ä€ˆˆ&¨C/ã3Ã_/™#f<xÆ	Iå¬êúvÒø:çý¼÷|ÞMSüº;Õõ¬Zµêy~ëW¬'ÍßÓ^ø×…]ø×…]ø×…]ø×…]ø×…]ø×…]ø×…]ø×…]ø×…]xÕ…W]xÕ…W]xÕƒŸ<æóyÇ|Àc>à1ð˜xÌ<æóù€Ç|Àc>à1ð˜xÌ<æóù€ÿyðŸÿyðŸÿyðŸÿyðŸÿyðŸ¯yðš¯yðš¯yðš¯yðš¯yðšWi—ó‚×<x̓×<x̓×<x̓×<x̓×<x̓Ç<òsžòà)žòà)žòà)žòà)žò¼æqi7<åÁS<åÁS<äÁ3<ãÁ3<ãÁ3<ãÁ3<ãÁ3<ãÁ3<ãÁ3<ãÁ3ù±G~ì‘{ä¿ù«G¾ê‘§zä¥ù¦ïxðŠoxð‚G¾æ‘§yÜ÷÷“Çýäq?yÜO^ó~ÒÍý9yŠGžâ‘§øð”Oùð”Oùä>y§Oû|xË'ïô‡šÇ«ëÄ!bHŒˆéùúðžïùðžïùðžÏùûðžïùðžïùðžïùðžïùðžïùðžïùðžïùðžïùðžïùä—>ù¥O~é“_úä—>×Íçºù\7ŸëæsÝ|®›Ïuò›×‰|2"/Š¿ã7bÜFŒÓˆù`„FÌû"æqã6b1‹˜¿EÌß"æoó·¨Ú<ND¤=Œûˆy[ļ-b¾1O‹˜—EÌË"æcó±ˆû#B¿#ô;B¿#ô;B¿#î£ýŽÐïýŽÐïÝŽÐíÝŽÿã?büGŒÿˆñ1î#Æ{Äxïã=b¼GŒ÷ˆñ1¾#ÆwÄøŽßã;b|GŒïˆñ1¾#Æs”Žg9Î›M”DE,+D—è}b@¬kÄ:qˆØÄ‹ˆ:uðëà×Á¯ƒ_¿~ü:øuðëà×Á¯ƒ_¿~ü:øCà?þøCà²Èþ!û‡ì²ØÜŸö†´7¤½!í
+ioH{CÚÛ¼>!í
+io~~~~~~~~~~~~~~~¾_ƒ¯Á×àkð5ø|
+¾_ƒ¯Á×à§ó\IýZR¿–Ô¯%õkIýZR¿–Ô¯%ukIÝZR·–Ô­%ukIÝZR·–Ô­%ukIÝZR·–Ô­%ukIÝZR·–Ô­%ukIÝZR·–Ô«%õjI½ZR¯–Ô«%õjI½ZR¯–Ô«%õjI½ZR¯–Ô«%õjI½ZR¯–Ô«%õjI½ZR¯–Ô«%õjI½ZR¯–Ô«%ujIZR§–Ô©%ujIZR§–Ô©%ujIZR§–Ô©%ujIZR§–Ô©%ujIZR§–Ô©%õiI}ZRŸ–Ô§%õiI}ZRŸ–Ô¥%uiI]ZR—–Ô¥%uiI]ZR—–Ô¥%uiI]ZR—–Ô¥%uiI]ZR—–Ô¥%uiI]ZR—–Ô¥%uiI]ZR—–Ô¥%uiI]ZR—–Ô¥%uiI]ZR—–Ô¥%uiI]ZR—–Ô¥%uiI]ZR—–Ô¥%uiI]ZR—–Ô¥%uiI]ZR—–Ô¥%uiI]ÚDððððððððð«àWÁ¯‚_¿
+~ü*øUð«àWÁ¯‚_¿
+~ü*øUðÑYêÓ’ú´¤>-©OKêÓ’ú´¤>-©OKêÓ’ú´¤>-©OKêÓ’ú´¤>-©OKêÓ’ú´¤>-©OKêÓ’ú´¤>-©OKêÓ’ú´¤>-©OKêÓ’z´¤-©GKêÑ’z´¤-©GKêÑ’z´¤-©GKêÑ’z´¤-©GKêÑ’z´¤-©GKêÑ’z´¤-©GKêÑ’z´¤-©GKêÑ’z´¤-©GKêÑ’z´¤-©GKêÑ’z´¤-©GKêÑ’z´¤-©GKêÐ’:´¤-©CKêÐ’:´¤-©CKêÐ’:´¤-©CKêÐ’:´¤-©CËJSŸ5øü´-©CKêÐ’:´¤-©CKêÐ’:´¤-©#KêÈ’:²¤Žl"¿G‡]tØ•ÍßÄ*±F¬‡ˆ!1"Ò~ôØE]ôØE]ôØE]ôØE]ôØE]ôØE]ôØE]ôØE]ô˜z¹¤^.©—Kêå’z¹¤^.©—Kêå’z¹¤^.©—Kêå’z¹¤^.©“Kêä’:¹¤N.©“Kêä’:¹¤N.©“Kêä’:¹¤N.©“Kêä’:¹¤N.©“Kêã’ú¸¤>.©Kêã&‚‹.S/—ÔË%õrI½\R/—ÔË%õré¢ËÔÍ%usIÝ\R7—ÔÍ%usIÝ\R7—ÔÍ%usI½[Rï–Ô»%õnI½[Rï–Ô»%õnI½[Rï–Ô»%õnI½[Rï–Ô»%õnI½[Rï–ÔµMäø襋^ºè¥‹^ºè¥‹^ºè¥‹^ºè¥‹^ºè¥‹Î¹èœ‹Î¹èœ‹Î¹èœ[kþŽ~Aç\tÎEç\tÎEç\tÎEç\tŽº´¤-©{Jêž’z ¤(=ò"¼È#/òÈ‹¨šè9ýOPR”Ô%u at IPR”ÔMˆUbX'C"íæúx\ꉒz¢‰às}¨/š>ùõFÁ'ŸñÈg<ò™>áó>áó>áó>áó0}®hb•X#Ö‰MœÓóу=у=усссссссÞáýÞáýÞáýÞáýÞáû¾áû¾áû¾áû¾áû¾áû¾áû¾ËM\ÎÞáýÞáýÞáýû)ä~
+áýÞáýÞáýÞáýÞáýùXÿ‡ðÿ‡ðÿ‡ðÿ‡ðÿ‡ðï‡ð~ï‡ð~ï‡ð~ï‡ð~ï‡ð~ï‡ð~ï‡ð~¿‡ð{Ÿ‡ð@Èý6ï/æ!ó…ùB†ðh†ðh†ðh†ðh†ðh†ðh†ðh†ðhÈ|!d¾2_™/„ÌBæ!ó…ùBÈ|!d¾2_™/„ÌBæ!u¹º\Èü d~2?™„ÌBæ<ÁS<ÁS<ÁS<ÁS<
+4W#Ö‰CĐÓöFðTOEðTOEðTDÞÁW|ÁW|ÁW|ÁW|ÁW|ÁW|ÁW|‘·Fä­üÁ_üÁ_üÁ_üÁ_ü‘·FðXEðXEðXEðXEðXEðXEðXEðÏ3dEðXEðXEðXEðXEðXEðXEðXEðXEðXEðXEðXEðXEðXEðXDÁg|Ág|Ág|Ág|Ág|Ág|Ág|Q_Š¨/EÔ—"ò¨ˆ<*"ŠÈ£"ò¨ˆ<*"ŠÈ£"ò¨¾Œàˈ|8"Žàψ|8"ŽÈ‡#_çÞ×X¹“»"
+ïK×Ë_Ñ…÷5ÿ÷õÂÍwéïÈÇxÞ%yÞe"øäcùXD>Æs0Á'‹ÈÇ"ò±ˆ|,"㹙乙乙乙‰à“ñüLòüLFèÏÉ$ÏÉ$ÏÉLäøèA„ðÜÌDŽðMòÍDÎ=àyšäyšäyšäyšäyšäyšäyšäyšäyšäyšäyšäyš‰à£<W“<W3|ô€çl’çl’çl’çl’çl&‚^DèÏÝdÔÔêI<w“<w“<w3|êI<‡“<‡“<‡“<‡“<‡“<‡“<‡“<‡“<‡“<‡3|êI<—“Íçró˜ˆzRD=)b^QOŠ¨'EÔ“"êIõ¤ˆzRD=)¢žQOŠxîQWŠ¨+EÔ•"êJu¥HËÜùéve#ð-èT•"ªJU¥ˆªRDUI£ÖµÖ¨µF­5j­QkZkÔZ£Öz y¼±N"†Äˆ˜žF­5j­QkZkÔZ£ÖuÖ¨³F5ê¬Qg:kÔX£Æ5Ö¨±F5j¬QckÔX£Æ5Ö¨±Fµjâq~¨±F5j¬QckÔX£Æ5Ö¨±F5j¬QckÔX£Æ5Ö¨±F5j¬QckÔX£ÆõÕ¨¯F}5ê«Q_újÔV£¶µÕ¨­Fm5j«Q[ÚjTV£®Úm—ö£¦5Õ¨©FM5jªQSšjÔT£¦5Õ¨©FM5jªQSšjÔT£¦5Õ¨©FM5jªQSšjÔT£¦5Õ¨©FM5jªQSM5CSÍÐT34ÕM5C3‹Ñ¨§F=5ê©QOzjÔS£ž:hâq¾¨§F=5ê©QOzjÔS£žõÔ¨§F=5ê©QOzjf[šÙ–f¶¥™miÔU£®uÕ¨«F]5êªQWºjÔU£®uÕ¨«F]5êªQWºjÔU£®uÕ¨«F]5ªªQUªjTU£ªUÕ¨ªFU5ªªQUªjTU£ªUÕ¨ªFM5jªQSšjÔT£¦5Õ¨©FM5jªQSšjÔT£¦õÔ¨§F=5ê©QOzjTS£šÕÔ¨¦F55ª©QMjjTS£šÕÔ¨¦F55ª©QMjjTS£šÕÔ<}Ñ<}Ñè¤F5ú¨ÑGÝÔGžºhžºhžºhžºèô©‹HuÔDITÄ2±Bt‰Ñ'Ä*±F¬‡ˆ!±‰«Ó(Á—²¸|ì’õkFG†×^ÊW at J¯£ñ7“¯]¶ÊüñÒ\¿*ù»ã?d¾a§Ê«V&Vo£+WŒ›u®»bUËGö¢ñŠÆ*«h¬¢±ŠÆ*Ž^–¹ËÇV6ŒÃF—­Z	v™.*ÓÞ2]T¥L•ë…Ñ/[1|¹9¾§Nœ
+Rá¢T¸(.J¤
+H* U¸ίÂùU8¿
+¸p+àºàºàºàºàºœ©¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾Çñ<Žçq<ãyÏãx>Çó9žOû}ÚïÓ~Ÿöû´ß§ý>x>x>x>x>x>xxxíh ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~Ü*¸Up«àVÁ­
+t,[µbÕÊËÍ=²nxÍ•|«²+ÆÖó¦Õ¼Üêѵf/>Ò²-«Õ²#«V^’Ö¯YÅ7´©F›jôI¶Õi[¶Õi[¶ÕÙ?dÿ>
+飐¾é‹”˜•„Èä@ó³"–‰¢Kôˆ>1 V‰uâ1$FÄôü¤ÈŸº|ÍðÖ­_à K€%ÀЙ” K¿tÅè˜á°uk†×®å;ÀÓف‰õü{ß~ð°}õšÑµËÖŒ­NþÊv¾¤)Š.Pt¢Š(Z h4(§®@‡%´(¡E©ÂÂèÚuc—¯ƒv%Ä(Ë —A.ÓeZP®8Ã+FW_Ê'ð!H	AÊ2øeðËà—Á‡.%t)¡K	]JèRB—º”ÎڔЦ„6%´)¡M	]ÊJ”On”KÇÖŒŒŒ4Þp¡`@	JP€”n­`1:vÉ¥ë.m_wéšQÞ¯--ûPó}ûZ£e+ùÀï85QˆF”0¢ô85öx´Ç£=íñh*aP	ƒJT •0¨„A¥¾>Œ*aT	£JU¨F•0ª„Q%Œ*aT	£J3J…¥ÂŒRaFib¥0¼fͪ+VŒ._×Öx·~u±×$Ý™þáȪ+V¦ï–š‹X`·îž*M®Òä*M®Òä*M®Òä*M®Òä*M®ÒäM®ÑäM®Ñä]Óâ%i¢ß~¨eK׎ò%¨Ñˆ¨ÑXWºÖ•°.¦’
+SI…©¤‰•Îemlø“Hv¡/ê´¥N_Ôé‹:ͨӌ:ͨӌ:ͨӌ:Í¢C4cˆfÑŒ!úbˆ¾ü!ð‡Àü!ð‡ÀH§}i2­dd›Ö¯îh¾mŒC{%CäЇd”¤Ç	i"„ç¤ÂsRá9©ðœTxN*<'ž“
+ÏI…ç¤ÂsRɦxEôKD¿DôK~~~~~~~~~~¾_ƒ¯Á×àkð5ø|
+¾_ƒ¯Á×àkð5øÌ6Ì´£`b’¸§)°ÉÜK£[kôuc‡¾«äG/_½îJ“~ä/Y“øɬ\×6ºbôòÄ´6õºcG³s-¿vý2ÃœÃÍ/†ˆ!1ÅÆ[Rá%©ð’TxIšèµ›v¬[û£p—òe@¬ëÄ!£Ã«V¯Z“¨ððŠ¢ysibÏ;¼Â^yÉŠôîÅ<Ra©0T˜G*Ì#MôŠ+V]2¶l8ñe.ðvÕšö±•ë’9βÄ1{"ø˜G*Ì#æ‘
+óH…y¤Â<Raib¹°îRsÃ/7)¾¡H²B’qT¸G*Ü#Uâ¹vìò±ÃkøLdÜ#î‘
+÷H…{¤Â=ÒÄJÁL .Y³þÐuD”ñTøF*|#¾‘
+ßH…o¤Â7Rá©ðTøF*|#¾‘
+ßH…o¤Â7Rá©ðTøF*|#¾‘
+ßH…o¤Â7ÒD]ýàú±™<gå2zµÆ3Rá©ðˆTxD*<"‘
+H…G¤Â#Rá©ðˆTxD*<"‘
+H…G¤Â#Rá©ðˆTxD*<"‘
+H…G¤Â#Rá©ðˆTxDš(wƒ«ër­ël~Hþ3º®`nÙôØÛm7CpÅè‡Ù»ù!Ý›}h3!Ü#î‘
+÷H…{¤Â=Rá©pT¸G*Ü#î‘&VŠ‰C¶ÉIW¬_ËW^gúÕåëW¬[½âJ¾¦%¤øH*|$>’
+I…¤ÂGRá#©ð‘TøH*|$M¬t˜_=š²¯?t_‘à&©p“T¸I*Ü$n’
+7I…›¤ÂMRá&©pT¸G*Ü#î‘
+÷H…{¤Â=Rá©pT¸G*Ü#î‘
+÷H…{¤Â=Rá©pT¸GªÄ=rdÕºÃ<‹ðã"©p‘T¸H*\$.’
+I…¤ÂÒD~0+„Y!Ì
+aVaó÷´aÆ5Rá©pT¸F*\#M¤ßf\#®‘
+×HÁG˜q‘T¸H*\$MaV³B˜q™4|„Y!Ì
+aV³B˜¬f…0+„Y!Ì*ýŸ¯p¥séªõd¡eæиV*\+®•
+×Jb•X#Ö‰CĐuǚѡ{†-ÒoÓGk
+J…¥ÂuRá:©p4QÁ4Êu«½]ÊÑÐ\l&6“
+›I…ͤÂVRa+i‘s‡K±9TØ*l
+`rj-eø¡?”á‡2üP†ÊðC~(Ãeø¡Ìt¡Ìt¡3”a†2ÌP†Ê0Cf(Ãe˜¡3”‡š‘v0ÂËŒl–‘)–‘)–)–)–)–)–)–)–)–)–™XÍŸ¥åÀ@³òìÈäÙòE™X!ºDèb•X#ÖÍZ#¢Nv(ށ‘ÆRËɪeš@íÆ•~²C¥eÚ@áÆ•6-;Ð+««««Ll4¡zø Œ[–(–(–(–(–˜Øh×r Z@²ÈzÅzÅzÅz-ð€\‘ŠŠŠŠ&6Z඀,â°£X9 X9 X9 X9 X9 X9 X9 X9 X9 X9 X9 X9 X9 X9 X9`b2*q`Þ¨
+o\Ù|£xS®6÷i~£šû(·¹ó o*͝ËAsŸCoü毹ϡ7Í?ª4!ä!Ðæ‘U³©•C;7\i¶§ÒlO¥yäJóçî¡<tœ–LŽ‰-Â–GaË£°åQØò(lyËËËËËËËËËËËTc™Âê¥+V-û@ú™
+ËT²Lade럃OMÝ
+|§õOA'L1¬XÞúç “G&‹Ö¬Kÿ|źµ—Œ:ÿ¶| ½àz–0(–0˜È¹“;ºäŽ.¹£‹6¸hƒ‹6¸hƒ[Õ…åc+VŒŽ,]õáÜ)fÐ5;q`-„b-„b-„b-„b-„b-„‰ÕÜ)207T#¸É³¶äðkÌÔ’hêÀb…‰‘JLŒÖ%Õ¢õ«ùLÈ#11R˜)LŒ&F*11jü~
+x&l|¦‡‰‘ÂÄHab¤01R˜)LŒTbbÔøýŠå|Ÿ<S#ÁªæÒ䞏t<i¤;5:†r5VH
++$…’Â
+Ia…¤°BRX!™èÆV~hézÓ·ë’w­d¢Ø!)ìvHŠe'
+;$…’bŠÂIa‡¤°C2Ñ-šÉÖÊ”¯8y’Q‘ŽH&Ò’Q—dÔ%uIFqNR8')œ“ÎI
+ç$é’Q—dÔ%uIF]’Q—dÔ%uIF]’Q—dÔƒš<éx<ÒñH<Á#AðH<Á#AðHGq|21$FDð©y¤éGÉ£‚„c”‰àKðI\=’ä g)Á'7ðÈ
+pœR¹ÎS
+ç)…ó”ÂyJá<¥pžR8O)œ§ÎS
+ç)…ó”ÂyJá<¥pžR8O)œ§ÎS
+ç)…ó”ÂyJá<¥pžR8O)œ§L¬Ö^>¶btùð²Ñvs[ú Ö®_É.4ÔÀ+ëÜòÑˇ¹y¼ŠÌ¶| ž´ ƒ*ÅB-ÅB-…A•Â JaP¥0¨RT)ªU
+ƒ*…A•Â JaP¥0¨RT)ªLŸJ’G%É£’„•‰àSIò¨$yT’<W;kW75›+UvÙŠõKùPq.6d:26|yóDÀáJápebµtùúµÌ©F;[Þ7ÿÌ®fWŠÅmŠÅmŠÅmŠÅmŠÅmŠÅmŠÅmŠÅmŠÅm&ÒÔ³,…Y–Â,Ka–¥0ËR˜e)̲‹ä‹ä‹ä‹ä‹ä‹ä‹ä‹ä‹ä‹ä‹ä‹ä‹ä‹ä‹ä‹ä‹ä‹ä‹ä‹ä‹ä‹ä‹ä‹ä‹ä‹ä‹ä‹ä‹ä”Ç,ó.ÁAè1ó2„ÞCè=„“/ÁaèÕš8œ':˜òÐyçEõ"êõšŸËÄ
+Ñ#úÄ€X%CbDLq}(Ö‡b}(Ö‡b}(Ö‡b}(Ö‡b}(Ö‡b}(Ö‡b}(Ö‡b}(Ö‡b}(Ö‡b}(Ö‡b}(Ö‡b}(Ö‡b}¨Õ‡Z}¨Õ‡Z}¨Õ‡Z}¨Õ‡Z}¨Õ‡Z}¨Õ‡Z}¨Õ‡Z}¨Õ‡Z}æ\>s.ŸGæ>Ì}xÕ‡W}¦\>S.Ÿ)—ϔˇ[}¸Õ‡[}¸Õ‡[}¸Õ‡[}¸Õ‡[}8Õ‡K}¸Ô‡K}¸Ô‡3}¸Ò‡+}¸Ò‡+}¸Ò‡+}¸Ò‡}ª>ÕŸj„O5§áC‘>éSy÷©¼ûTÞ}xч}¯‰ÇùÀ‹>¼èË>¼èË>¼èË>¼èË>¼èË>¼èË>¼èË>¼èË>¼èË>¼èË>¼èË>¼èË>¼èË>¼èË>¼èË>¼èË>¼èË>¼èË>üçÃ>üçÃ>üç3ò™ùTÇ|xч}xч}xч}xч}xч}xч}xч}xч}øÐoò!óŸyÏ¼ÇgÞã3ïñ™÷øÔÏ}êç>õsŸú¹Ï¼ÇgÞƒ ÂäOaòg"Ç#•÷Iå1ÿS˜û)Ìýæ~
+s?…¹ŸÂÜÏDŽOªŽÙŸÂìOaögbóø´—TÝ'U÷IÕRõ ½Ћ ½Ћ€T=@7t#@7t# UHÕt$@Gt$@Gt$@Gt$@Gt$@Gt$@Gt$@Gt$@Gt$@Gt$@Gt$@Gt$@Gt$@Gt$@GRõ =	Г =	Г =	Г =	Г =	Г =	Г =	Г =	Г =	Г =	Г =	Г =	Г =	Г =	Г =	Г =	Г =	Г =	ÈÕt% WЗ }	З }	ÈÕrõ€\=@wrõ ý	П ý	П ý	П ý	øÿ´ªãz Gz Gz Gz Gz Gz Gz Gz Gz Gz Gz Gz Gz Gz Gz Gz Gz Gz Gz Gz Gz Gz Gz Gz Gz Gz Gyz@ž§èT€NèT€NèT€NèT€NèT€NèT€NèT€NèT€NèT€NèT€NèT€NèT€Näïz Wz Wz Wz Wz Wz Wz Wuº€:]@. Nð¼7àô
+¨ÓÔéêtuº€ç¾Ï}žûì
+vO¯ž^Tì*v»€Š]@Å. bP±xnðÜ8à¹q@µ. ZP­¨ÖTëªuºP­¨ÖTëªuO×ô=@ßô=@ßô=@ßJu¥º€R]@©.@ÿô?@ÿô?@ÿô?@ÿô?@ÿô?@ÿô?@ÿô?@ÿô¿ŠžWÑó*ú]E¿«èC}¨ÂUx¡Êõ¬r=«\Ï*׳Êõ¬r=«\Ï*׳J?Uiw•v×ÈKjä%5ò’ùD|¢F>Q#Ÿ¨‘OÔÈ'jä5ò‰ùD|¢F>Q#Ÿ¨‘OÔÈ'jä5ò‰ùD
+ý®Á«5xµ¯ÖàÕ¼ZƒWkô_þ«Á«5xµ¯ÖàÕ¼ZƒWkðj
+^­Á«5xµ¯ÖàÕ¼ZƒWkðj
+^­Á«5xµ¯ÖàÕ¼ZƒWkðj
+^­Á«5xµ¯ÖàÕ|Wƒïjð]
+¾«Áw5ø®ßÕà»|Wƒïjð]
+¾«Áw5ƍqTgüÔ?uÆO¼¶N^['¯­sÔ¹êäµuòÚú@ó¸uâ1$FÄô<ëŒÃ:ã°Î8¬3ëŒÃ:ã°Î8¬3ëŒÃ:ã°Î8¬“¯ÖÉWëä«uòÕ!ò™!ò™!ò™!¯ùç¢Kôˆ>1 V‰5b˜ž÷yÉyÉyÉy	æF
+s#…¹‘ÂÜHan¤07R˜)̍æF
+s#…¹‘ÂÜHan¤07R˜)̍æF
+s#…¹‘ÂÜHan¤07R˜)̍æF
+s#…¹‘ÂÜHan¤07R˜)̍æF
+s#…¹‘ÂÜHan¤07R˜)̍æF
+s#…¹‘ÂÜÈDðÉk19R˜)LŽ&G
+“#…É‘ÂäHardbãw•0ÍL”DE,+D—è}b@¬kÄ:qˆ#"ø!ø!ø!ø!ø!ø!ø!ø!ø!ø!ø!ø!ø!ø!ø!ø!øøøøøøøøøøøøøøøøø|
+¾_ƒ¯Á×àkð5ø|
+¾_ƒ¯Á×àkðÓ|@óh–•j•ò æoW×^zÝ5üªáS
+ŸjøTç¾Óð†ï4|§á;CbDLñà;
+ßiøNÃw&r\ÅqÇU7Ÿ›X%Öˆuâ|¾¿~ü2øeðËà—Á/ƒ_·nÜ2¸epËàUÀ©€SáøŽ_á¸ΫÂñ+¿Âñ+¿Âñ+œW¥‰Ãy¹œ‡ŽŽËy¸à¹à¹à¹à¹à¹à¹à¹à¹à1nêççq~øøøøøøøøøøøøøø>ø>ø>ø>ø>ø>ø>ø>ø>ø>ø>ø>ø>ø>ø>ø>øøø¿ø}Àï~ðû€ßWù}•ßWi•öWi•öWù}•ß‡´;7â|"¾×àkð5¿‡0YÓ˜¬iLÖ4&k“5ÉšÆdMc²¦1YÓ˜¬iLÖ4&k“5ÉšÆdMc²¦19Ó˜œiLÎ4&g*	•Æ„JcB¥1¡Ò˜Oi̧4æSó)ù”Æ|Jc>¥1ŸÒ˜O™H»¸®ü¥*š¿TÅDppú% ? ? ? Ÿqù”Æ|Jc>¥1ŸÒ˜Oi̧4æSó)ù”Æ|Jc>¥1ŸÒ˜Oi̧4æSó)ù”æ/oÑüå-š¿¼Eó—·hÌ©4æTs*9•ÆœJcN¥1§Ò˜SiÌ©4æTs*9•ÆœJcN¥1§Ò˜SiÌ©4æTs*9•ÆœJcN¥1§Ò˜SiÌ©4æTs*9•ÆœJcN¥1§Ò˜SiÌ©4æTs*9•ÆœJcN¥1§Ò˜SiÌ©4æTs*9•ÆœJcN¥1§Ò˜SiÌ©4æTs*9•ÆœJcN¥1§Ò˜SiÌ©4æTs*9•ÆœJcN¥1§Ò˜SiÌ©4æTs*9•ÆœJcN¥1§Ò˜SiÌ©4æTs*9•ÆœJcN¥1§Ò˜SiÌ©L_ƒ¯Á×àkð5ø|
+¾_ƒ¯Á‡#x›M‡Æ¦CcÓab˜[ŸX»¤A¦A¥¡œ†JÜ4xiðÓ¤¡š†ZêiJQt#ÈO¦x2Å“)žLñdŠ'S<™âÉO¦x2Å“)žLñdŠ'S<™â©O¥x*ÅS)žJñTŠ§R<•â©O¥x*ÅS)žJñTŠ§R<•â•S¼rŠWNñÊ)^9Å+§x寜â•S¼rŠWNñÊ)^9Å+§x寜âUR¼JŠWIñ*)^%Å«¤x•¯’âUR¼JŠWIñ*)^%Å«¤x•¯’â¹)ž›â¹)ž›â¹)ž›â¹
+<7=17=17=#7=#7=#7=#7=7=7=7=7=7=7m®›6×M›ë¦Íu+¬Ñ\7m®›¶ÓMÛé¦ítÓvº´ÓõӐ6×M›ë¦@n
+ä¦@n
+ä¦@n
+ä¥@^Úx/ÅóR</ÅóR</ÅóR</ÅóR</ÅóR¼ZzÌZzÌZzÌZzÌZzÌZzÌZzÌZzÌZzÌZzÌZzÌÇLÏ¡–žC-=‡Zzõ¯žâÕS¼zŠWOñê)^=Å«§xõ¯žâÕS¼zŠWOñê)^=Å«§xC)ÞPŠ7”â
+¥xC)ÞPŠ7”â
+¥xC)ÞPŠ7”â
+¥xC)ÞPŠ7”â
+¥xaŠ¦xaŠ6ðüH¥O•4¸iðÒà§!HC5
+µ4Ô#+Þ½nÙðšU+ó!.žN-ñ÷tÎ[12ꜜ8‡ÆÖ,[y²ÑJöm7\<`Øpá²áµ£N=±*„«Ö
+/[6ºr]û)ëW^2¼fýå+†×¯+…«Ö/]1Ú°-¯^:¶ìâ‘UÉúòÆ[eÞ¯m~(':[?\<ÜÙºãÅÃÍ]+ß%­ð¼háò±•Ã‡>Œ­[wèÃå£#c釚lÙÍ|8¼›ùpx7O·M·M·ìV¯µü‰ùüI‰¶­[yIúþPËÁ̇Ã?1Ì[w[w[vZÏ h=ƒ õÕº›jÝMµîæ¶îæ¶î涞hkÔ[û£žöGó]2¼üâ¥ÃkÚ¢•—,^±®+ÙGyÁBs¡VŒ®]›~®†ÍÏ¥ÆÌVá}%ùÌ{¿åûdÙò~ eÙò¾ù}ùO~;Ôò}óøC	FË÷Íã¨?y?Ðò¾Ì{ïOÞË–÷-ï«-¿m¾—	nqéšáÆ2ƒUëœÓ’ÎJ;´š^‘‰ëÓ<¼ñaáŠU+/Y»nxM³Ó[¯Z½õªÕ[¯ÚPë=1ÔzOµÞÕt¨8+7"Lz’?Xxùª•«.Y3¼úR¾©þ¦k,YØ?úÖKœxÆüÉçjëçÄåú퟇êÍÏbdÙ*çÔ¤)©-ÅÂ¥†\ýæ¹2ùës[Þ§×Ô|—|nù>jy¯Ù'jÙ§Ò²Oò^7ÎÚªî¯äá.J>ê<ß´µe·zënõÖ݆ZwjÝm¨u·°u·°u·°u·¨u·¨u·¨u7ݺ›nÝ­å®õÁ–Ý̇û™-»ÉÖÝdën²u7Õº›jÝMµîVnݭܺ[¹u·Jën•ÖÝ*­»¹­»¹­»¹­»y­»y­»y­»ù­»ù­»ù­»­»­»­»U[w«¶îVmÝ­u¼…­ã-loaëx[Ç[Ø:ÞÂÖñ¶Ž·°u¼…­ã-loaëx[Ç[Ø:ÞÂÖñ¶Ž·°u¼…­ã-joQëx‹ZÇ[Ô:Þ¢ÖñµŽ·¨u¼E­ã-joQëx‹ZÇ[Ô:Þ¢ÖñµŽ·¨u¼E­ã-joQëx‹ZÇ[Ô:Þ¢ÖñµŽ·¨u¼Eéx+¼×äÃKW}¨Á}Éb“„y/[Þ«–÷å–÷•–÷nË{¯å½ˆñ+~´pdlxYÊïAmáÒ$›Kø˜oꇿiü8’ÁÂõ®´¬™k¾‹}}â?ç‰?*ñ[ÅÿèˆÅ›±øïóÄï;Å¿o{ç‰ß}¼æü.ol¿Ý*öì¿Ù'þ-ÿz‚ø—ºx=¿VâµÝg9¯m»ÍŽ»Ï¯þj‘óê>ñ«Eâ—±øE,~®ÄÿÕ'~¶U¼‹ŸöŠÿvµxùâŸcñf÷¼Z¼ôâÉÎKW‹O?ù‡©ÎObñSŏcñ÷±øQ,~‹lßa†óýX¼0C|O‰çcñìõ=γÓÄw&Š]±x&‹oÇâ[±øf,žŽÅS±x2߈Å=bç¦yÎÎXìøú7œ±øúã:_ÿ†øú5ÙÇÿvžóø…ƒÅãƒÙ¿'‹Å׶ŠGcñÕX<‹¯ÄâáñåNñЃóœ‡Făô:ÎôŠ/™FiŸ¸?_ŒÅ}±¸·WlÅîét¾ Ä=âó#b›ÙeÛVqw,îú›vç®XüM»¸ós“;GÄçîèv>7YÜÑ->[Ÿ‰Åí[;œÛc±µCl1?Ú²UÜvk§sÛÑâÖNñé}âS·|ÃùT,n¹ùBç–oˆ[®ÉÞüÉyÎÍŠ›³Ÿœ'>‹›n\èÜ‹Š›ÓüxMÜð±’sCŸøXIl6_l›LOmš'®ï‹^×ã|4×õˆkcqM,6Æbðà_]}µóW±¸újqÕˆØpv¿³ažøH,®ŒÅ‡;ÅíâCE±>ëö‰µûÄš}âƒûÄêX¬ŠÅÊX¬˜->‹ËzêÎeg‰±X\zµ¸Ä|X‹ÑXŒÄbY,–Æbø±dŸ¸¨]\‹÷Çâ‚Xœ^Ñ9Ÿ8¯(Þ7q²ó>%΍Å9ùœº8»_œew;g!ÞÛ'Î<m‚sf,—Ä{bqÆ_t;gÄâ/ºÅ»cqºù“ÓcqÚ©ÝÎiÄ©Ó;œS»Å)âäXè­"Ú*ÂXeŽw†ö‰ú7Dít1‹“bñ®wö:ïêï<±Ëyg¯8ñΉƒ»Ä;:Ä	±¨Æ"ðûœ`Ÿð½nÇïž[r¼ná–De†(w%KŽŠ…,‰E%g C,*‰…Çœ…Ýâø‚8N‰c™ç;"ŽYÐë3O,èGÏŸç]ó牣敜£ºÄ¼’˜‹9±8²KÌ6ç9»WÌ3÷‰æfŒˆébšéÁi±˜ºOL©‹ÉæÃäX1"&™žš‹‰æG'‹þXôÅbB,zͽ±è1çÚSÝW‹®Ñ‹Žö‰NG,ÚÍÞíE)ÅnQˆEÞ얏E[ŸÈˆ¬ùìýÂ|+b‘1Ÿ3Ç»[X±°wØ#×Â>öÿ„¬ÿÝ
+ø_þ3ÝÊXËã­ÙåÎvKXmÖ”Áöì[Vî-;ïlÌd­E»^Ü#­î÷¼¸g`BÏìžy³{f/ÏZû׊©û_‹·¶uþñ÷krÌ1¾#Èü«óRãõÁ.Çþë¬um>ëä,'“Íwï?ý‘Þ³OdÂÙï?o§•9ø­àüý¯$~óÄ=jÀì(–V¶¾Yh»Ðî™cÐæôØ«ÈÌ}ÀyéÀK™c“Ͳ,Ûz$þ}fC®×ê°üÁ®Üg¬Û;;Ú,Ñ›³&;»_IPH19ý‘®Æ{k08·ÚÓS­Ìý{ì\¦¿¯wÒœ£2n¥×ÏlØtÝG¯ß¶uËm·çz¿ëõ×ãw¼öûÙ_üÜÞµÇàm7x«x3»Ú¼6Û*õf'ä-ƒw⛇;¡<±·¿/Ó6Çëu+™íæ[¶n»þ£Íõî‰Oüù/â~óšý×_·ÿ®qw쵟±b˱&¶‹»¬æ̨Ÿl‘3‡zñûéýr¿˜3aïO¶_ûÞø¡ø[ö ùÝO͏6¿VÏ×­f’Ÿd;ÒZÔØÎOò“86ûYë™G×äøÁ>kŠ±3S„%ê™»­k³Ë‹v5þ极ÓÏ:¯­Ûùm²¤]¶çdòø£éøÿ¼Üj´õ—–•½ÀËtå`]lËf¶9׶YÛ
+ù™¹iši—º_¤·í¤·÷ìJ¤ÞL†Ž9¼9ìc]¢+›¹ÐŸÝã¸óÊ=³ûgÇöiñgíÑïÙ§íßþ@ví);NÙ÷Ò
+¼;¾š]ë쵎¶V.´ú'7fnš5a[Ƕ­¹iÛfÝ:çS¹›ú¿°`â´	–è›<í¨YÝÓDßÌBnA2Ø&šÁÖ×l…dì2ÃØ\¦IÓݳûÍÝ{ºýFwãÕÓ[5°02cxæð¬‘ÙYëB{†Ýß—}äQóÝv9YpzÔ±¶›¾™sd®Í}—ù6Ûß—'}êñßÇÿrÑs—ýÝËŸ~nç½?¾å®/|欧׬}þü_ÛíŸófîºåg¿Ÿ7勇Þü×[î»bõÚ
+szlÖ¬?zÕƒ–¹oFL¿n7ýš1£ëÚÁév‡è°„è¨[¢Ô¶Í±Åµ»½hMËå³í±]2'ÖÑ8±öäÄ^<q×ÕcÎjÑîÍ­dÎ¥q%³Ï›+ù¼éòÁcJÖ1Ö)ÖùÖ˜u…õq«m¢}¬u”}¬ðì3ì÷´¿§ã\{¹½Þþˆ¸Þî¸Ðº°`Ïå3„’ÛϹ8cÇnüÒKϸș·ÿUñƒýåûãmö’g¿¯fGLÛ§[
+ÎÉNiëÙÔ=}ʶ¶¾mÝ7td¶Y×vÜÔ¶}ƤivQL³ŠÝ¹ÝûíÖ+ÓÝr‡v'cÆ\¤î]o˜+´{÷›ïJ¯Ï3Tz’^·úû¬·]˜äzüLL>°í¸óŽÛgύ_ŒwÑ3—^ð­|ù{ßûò™Ÿ?ÛyéøÓ]]ñÿöïñfÍzA<~睏Ï=ÊJú~¯9‰g²sœ5m°3÷Ñì}æv2žµŽ0”eú3Áo¦7UÒ+{ò“äÖÊΉ¿Ù^âüTÜÃï;¬;3¹;³yÇÎZs’ŸïR‡˜Ó´?y½ìdöÅÉ&î¹o:Î×|Õ™oÆùdËœÒñù·‹[zìÏ[g·LúTÏMSÚ&wX}ÝSÌí­¾4cºæÿñÆÀc]SgNÍØÚýí9³¬žnk¶òüþÎC&:ó—¿~ÝA+ÞkwÛÖu¯/¿ì·9þˆ½É>kÓo¥/]|Qü\üÏñËñs]ü“SN±ï¶/±/µï>¹Ñ®ç͸¼Ñ\Û’µp°?·%›Ùbè|KöËEÇ.´™ë™mOšôâ®]I5Ú4ðèÌÛ¾°q­Øž˜’yî@5óÇýïJ.…~àÀ«:þsü‚µ`°—ãg¿l:¯qðbzð´û“Cw•Z=çyqÁÕ™Åù^rÔS8à7ûòFÓ—Ó­êà,Ë™joS·ä{?ßópÿ–ÎOåoš‘±¦õT²å#&—ºÍ`ܳ÷þ]‡ú4~ñ
+Cãó̸ŸÝ“Ë6{1;©µ³Ïďgz×Ç¿Þ߯·o´/ú´Ý¶jõþã7âßÚìÞÜÿ’ý©ûl<ëû³öåöJû³§èºxIüÃøÇñ?Ä?œ×<wûÖ//üºõ•ŒmN8›Vwr'X
+ölp¹=Ø1à:‹%ÎÍÎÝNîÂ	esêß3ç¼ïXŽ“›iŽÓn}s°"zÚòm™;“O‚ÈŠ»§X,Ô‹m‘ÖWò%§7i”SÌM˾«h@;’>HXÑ 5xdRõ°äÙAxtu§éþÁsE[W¾«)ögúÚ&ÊÕ6«í¨â¬b¥Í-Že®Êlh»²xM溶늷d&fí’˜`OsìãÄüüÑ…Š}¢87~a4YáCù+×ÚŸ[ìω>Ã;fæIä~Žþçíãí«íöñ߉7¾oÜå¼´?/þ¸ïXgæ~+kíûe³rcü\98£­'Ѷž\[®nNÖœª“³Û2Ó²^ci*Ñ‹Ì-]mRäo“ÍœÛÌdh
+x™ í”ÌÉmc™åm×dÚrv!×oOÉiûÔÜûìór£öXîÊÜõöÇs[ì;rw—º­¶{ŒŒ5šÜÙº+Þ{à2ÓÚ·ff¹ïØì/ßši8"“/›1Y²&Ys'ä¶ôZ[Ú?Õ{Ó…É]e1¹¿ûˆFóÒahFº}d2ÔÓ™ÿÎO‡]ã¿bþ+ñ[¼òŠmÇ_±O°?,~6þN¼Ù¾Òyw¼#~-þu¼Ã>ÅžbOµOÙ¿?¾+¾;~¿½Ý^j^÷6ø*¹ç>aú,oM°N<ÂÞÒmm)\ÛÛ]Ì›LÏ™ÜqR5­íKî½æ°h¨÷`©«fÿIý÷¥ß1ŒÓ÷˝È`öXÓö­ñ'î¸ãq`÷­¤…oÅßsøѧ7oúô}¯þôg¿:p¿¹f›^Ücúb¾õWƒ'v´g:K™3g䙶bfæÌõbiÆÌl¿mõ¾ï¶#¶ôd·X·Í3$xôŒbiæÔ6ëÈ©“;o›ÜwäÑݯì2}¶ÛHCµ¡è
+A7¤Øýì¡!Üù[ó–`.r×s‘Ÿ¹`Ñ‚÷,)g™ëï›8óψý"{¡íVæ–ÕÄì)k¿ñ½_»â¾üêŸâŸÅ¯_ö»k6ìYóå'7ß±áWß³'ýaì¿9Û¿ã{×|hÙèÌÉǾüøË¿Xô÷‘þØ_­¼jæÇëÁgw¡±î3ýžäÆmÖiFeLgštòÝ/îÞ¿»ÑÏ&
+>ý‘âÙç=e.O’äå­¼ÑÇ?8p‚U˜iu›!6³­ÛäÉ«w
+ŠöÌÎewà¼aˆpßKNƒ5cnÁë1¹ÚÄ|¦§d9[:o*X×öæ§C7µÞÃt“ˆ0P52YsƒØÏœpó„»'ˆ„qú&&Ýbz:}áágþîá⟛ñöZüsss®7²¸Wܸÿ/ãWⴏ±ç&cmƒ¹ÖÇg7˜|qžõäàüÉ3K“
+Ö—&åvvöÌÚ4ó‰i;çìè¹iR»5IÑQÈ—fŠ|_t”zßqRéݺk÷›ûÍMñl’¥U{ª&\90}`ÆÀ́Y³Ž<iþàôÁƒ3g
+Î<rñôÅ3Ï\<kñìÅG.ž¿zþõÓ7ÏØ<só¬Í³¯?ò–ùÛæï?£ùÓ揚?X2cÉÌ%³–Ì^=cõÌÕ³VϾfÆ53¯™uÍì#.4£½1NL¼Óö{æ¸F_<Ê­xåÙ­ÙàÄÌÓ?èÚUŸÝ¹cÇIO~졼eg¾xû’ÇÏ}ú‚ÿ¾7S^¾aéÚ—[ðî×>°|øÛ÷<õ­Þ7.\øÀüùû“¾zÂôÕö\ŸáˆiV08Yìlï*ì<¢ÿ¦®SoŸlõöž|D{.?EOOnLsmØý殤c_2ãšÛfÓÎFsҦڍ\©§;cÚ:?I]Äk_üô§¿˜l>yÂW7|ß:xðû¾zÂΝ™E/¼þúf˼wd8~2þ£y=9<r¿im}ðà«âus
+'['
+Nµ6ÙËvnêøXqgOvç¤IrÒÛaÒ™ädw39éŽß|£ûo$”1µ{ê5So™ºmªc·Üpe’”#IRÄëgüÍâ¯=ûì×ÿÍqï…Ì:ÞΝsOÖ}èØc_ýÁ^=öØæÎ5'Ôi÷Ú'Ìið˜iWöÓÂî´¿¦ì´:ûv:ù›:wØ·‹IY+Ÿ9¹§·%ýeî+u¨¿v½­¿ÌˆN/g¦A¸ít 7ºQܳcÇ	_½ê…ƒÖÁ®úêçLÏÝ¿é=ñxæ¢ÿÜsÿÈ°Úyó
+‡ã~:vm4ýÕgM5³–¹V¿]Ø”ÿ˜Óÿ%ÛÙÙn㈝½;Úoš6µ?“ïÏ[§gz»¢i&î2D–vßîÆœäÍFÒ;¸à¤é«§o›þ÷Ó÷NwN²N²OÊœÔÒT縶EùE…㊫¬UöªÌªþUS~0éâÙ
+;œš!ÐÖèö¶ìÆý¶ÿàë—=·tÙß ~3~Î^°ÿWvێ̽»cgg梞~®Ryø˜ãìÀ.š,f(þÙ®Û{ø®„K™ÿ£éë	ÖùƒÓœn»=ÿ¥œ½ÙLsO3Ú¬¶‚“ïè*½»/a”bÂ(¥$9ý‘ÎÆû„]NÜerá]½[z·Q–î7Ì<%!™ÁþÅýÛú:6œn§„6Ç-'·W描,û{Qü㝏<òðS¹¾Ï.¾tÙÍû‰ß|Æ7Lú:>7{éë’™!ž68grûôBï¦	wv‰GÍÙ1ÿÉÂή§¦L?j²•o?9×Û;+2ÓÂ]Íá°kw: â—’ž®šQqÌ5Çl;æOî¢IݙúðN›¡Òk†Ê$·,î¹wËm÷Þ{Û–{wÄñ¾á‡Î<ó®÷þícÕG¯úáþý?¼êÑêŽÌ;¿ûÊ+ß}î•W~ÿ*þ×é3¾vÜ1O}óýË–évÖ>aé²’þ}ÂhÃH£+æÎ/X¢ÓÎmîìÙÑ~{ѤrÖ	7ê†$7nü÷˜v÷ô•{tI¿m7ê$i“Í›rcŽ41;²ãª«¶<´sgýkë¿ýlfû¿ÌÜu÷]Oo?°9×wà®Ñ‘ß%÷з
+ø•7™»kTééìW­'ÍÜ'Ÿµô¡¹Ïîý‰øwªÍ˜;9IA“©Ð·w˜²KÞÚ–ëû×æyÜiŽW4l¿ ßã䜶ž\Î=Y'›éqœl=ïd„xÒº½33¤œ¹{,]JÓüž45Û=©%5sØ)Zw{’¢]œÍó3ó3œcóçf–g.ɯÍ\á\—¹ÁùdþÖÌVçöü2½§Ë”D±íh1?{´slîضÁöKÅ’öÄõÙœOänn»CÜÞö€ø¢óxÛwÚþ±í?Ä^ñÙ½Ù)~ÐJNÏ.iè;3ó~sàáÌöxng®oÿ˜ýê7<”™sàgæ|÷ß‘_·nÏ$gs¨3ØÑMÚ¾ÚÙkRÑF§™Ëõýçúªmº»GZ•ë-Ñe妷õ·ož>Kì˜úääî6«§+ŸÏ-îÉw-žv„¡þ9œl¿ÉÊz}uâî7	{2'Ì]<wõÜ[æn3¯oÎýù܃sfd4ÆBëø8<PúӁ² úÖu_yzçšõ7ß·sÍŸ¸oçΓ¹ò#Š®úÐ~•›Ïß™›Ì]÷|î›_8°9»äáK–^•ÖƒãÖœÃ3o}Û¸}òϏÛÝÍqûØ’þõgþtäöÿ?Œ\Ü”c×7îûI澟ÛÙkílß‘äÓ½]gŠÞþ舥ʧçœ4yƒµ!·±mc~cacqciCûÆŽ»6voìÙлmòÞÉ=-*oø~#ùN*³ö¶‡ÜrëCݺ×îßØûïñïìñóןþõùîsÿzgüÝxOü[C¨UÛ}vÐЧ'7m7mLôé]ƒS›ú´£ó&û)ñät£M'7TªEÑ»wïnJÔ`!Õ¨_ÌÈÚÎ;Ô9ÈùÛd~íΝ‡Õ<45þþ犴è¹ý›¦H5¯8Í´¯ÇìË•Ìh+‰Í;
+O¶s&íÔ½	U6î£M/~?£Ç›t0¹j©Ž¾d“Äi3O=îÎ/š–<qý„…ÓÄc½=/<}àQsÁ–/sœÞ*“G<gðæ[¯“÷ŸEÚÖá´ßä7dû6õßpD’_ÌÛq8ïïÔ|g[¾ïÈèè¤]/¾-ï7þ‡$áè}{ÞßLû­ù	q\>­8­4­}¡ÍãJǵ¿£ðŽâ;Jïh/ͲfÙs3G.3aQߢþc&=ãè™f-˜=wþ¦â¦Ò¦öM½Éd2¹b®$ÚE‡è]¢[LSÄT1-;½0Ñ‚“\¼`ã‚kܲ`Û‚½Ž0Ãþé#7çÿ>ÁðLï‰ϸÿ‚nXzÛI»îý¾à™ËŸ¾î¦ÑüÌ/~¸ü±ìI}ôÙgž:»ó˜ÏÞpçãsæ<íºçŸyúây]s·\w×C3Òëé›A÷{ç.s/šl¨ÓÉw‰/Y=ö“ùÍÅ’ée3Òº{;“{±!Ī¡Ã{Rþ0Ú÷èWRIÔ·oâ;->ÊMT¸Ç¾ÂÞ_úÚ§žzéžÍ›»â¿»ùÀ¶θãîÈ,¹Ù~—Õë›ûñ¼ìƒÝg½cpÚa&¸©h?Ù·£Ýð@_éú?¹1«é¸2S&¬êÿVBzZf¤ÙöÃ	|yÇŽ¡¯®ÿöwíÙOdî;0|÷ÝOoÏlxkÛCË—í÷'çÿNÃEMrÖ[ƒóQ;ã$AdrVÎ\=#¬oYJ* Y«-©VÕ[’’äéô7Ê’Ñ®Æìwú/
+"öà'OÉ\–ِ٘ٔ¹&ó©ÌöL>*ˆ‚Éýö1%{”u”½@,ÈÎÊ»–kŸ NÈäµ¥íSÅ©Y휒ÌŸkkŸ/ÎÏ.Î/·–Ûcb,{‰sinI~½µÎÞ 6d×;É]o]oß n0ʵ)·ÕÚjßž¹C|&ûçöÜýÎsä¿•ÿyþ`þ]I5ÂèVÙžóÎgì‹ì‹ž‰ÿr_vÉþ³ÅComkŒ‘sM¸¦Úíßžêœ“s
+ÅBöœbAœS,3çØ™R©˜KJHŽé?JHífoÓuíõ¢‘îœé¾R¾½T,äsNÖô¢áŽ´O¤çì÷'xÞßx“©ßßìY3©mOKÖÉ„óPÿ~åõçkN‡bú6éñƒNfbf¢sdÑ-žš9ÕÑÅÁâû3ïwÎ)..®Ì¬t–¯4WãJg£³9óÙÌgœÛŠOfžt~˜yNüÈ™îd
+"—-9Å|©`B{f²˜˜âLÍO-ô•úÛçYóì9™ùbvvžsdîȶyùù…¹ÅÙ¥9íUáe½|µ} SgN:;˜­;ƒ¹Á¶Á|X‹ai°s°3¹ŽçfgÏtÞ›{oÛâüY…³‹ç”–Y#öhæ21š½Ì¹,wYÛÊÂpé’öUë­õö•™«Å‡³W›ë»1÷‘¶mÎ_YØXØPüPéêöÍ™97wÞnÝnß–¹UÜ™ýœó™ÜgÚ>›\´µýîÎû¬ûìí™íâÁìƒÎ—r_j{0¿½ý+›ùªx*û
+gGᛝ»2ψïg¿ç\ÙSíä_{NÉžsîŽ_¿öò¯_ÛÿôåÿýËftl—%Û[ÛÄÖý—%÷‘Ñ­ä>ê²ojËg
+=VW±§T´¬®Îž.««£§½ÃJBg‡4í=fÈÔ;J…n«älOu–žìîìh/ÌHÉwe»JÝÍÑ‘o\÷RóFkÎvíjÔ˜¨;4æ÷ÿÕHp~;I%c`oÎrò¹‚è˜XœÔÑÝ1§Ãí8µøžâ.(^VÜÜqMÇ­½EË4Â\åRg©k’ÝŸéÎv;“Š}¥¾ö)Sºæ[s
+ëÏÊÎrä.Ì+Î-ÍmŸßqLç1]³z|s§º™ì€½’×tT;«]=5kÐÌŠÁì W¿^ˆŠ'wœÚyj×`ÏÙÖ™ö™™sÄâìbçÜÜ9mçæßWxŸç´Ÿßy~×âžåöò̥űα®%=òîüp×
+ÖÇ×—®o¿¡ã†Îº>[ØRÚÒ~Gç]ÛKÛÛì|°ë‘žõü¼ç`Ϩ¹†N§>~:ÉNRÓræÖ3n»êÖï>»<;~Gz³_úݏÜqʦ³³gì¿M¬H5áåÌñÎO3ÿ”<#|ܺ3“µ­lwRPïæqDãQD柒b¼ÉC›¯óZ^·XO6^ÿl^{Ìä»×>ͼžÎLË\uèugãõôá—(š×	bDì0¯WÒ—™§=œ}Ó©4^8ÿ’;æ¿x}«­½í¼¶íùÎüù§óû
+Gš×…Å)Ås‹÷ÿXüci ô‹öíKÚß™5¯¿Æ_ã¯ñ×økü5þ¿Æ_ã¯ñ×økü5þ¿Æ_ã¯ñ×øküõ¿ëÕe¿Æ_ã¯ñ×økü5þ¿Æ_ã¯ñ×økü5þýÿe¥ÿ·»ÝˆÉªŸäŸ°rÖÓ&β.h|ãX‡ÿ)YíØÕ>`õX½_YÖDk’uÄ¡}¦7þ;«åW‰/ÅÑÖëã»KZÊ*7Þ{–oÖŸÿ'´"K['[§X§Z§Y§[ï6ߝa½ÇZli½×:Ë|:Ç:×zŸužu¾i¯eý¥•µ^41k^æ¼ö^yð ùï¬ä¿æsÖü÷ÿÄsJÚnÙ·¼­Ýÿëòoÿ¸×Ú{ðm_¤×ÜÊþÀZÞÜ27šÁ`6ñ°õ?»Í´1Ûöæfö½‹í§™GÍoÍæL²~Év§ÙFÌvןnf¿½Í-÷˜õòŸÛœ­ÖÚÆÖi=Ÿ½Ãz>W¶Ö&[æ/­ç[·ÜëÖóÎ~ßm­ÍþÄìËæôY›³¯|Ëù©õèÿ›-ûºµÁüö‰ìrëƒ&~0»Çú`æÇÖ¢ä½Ók=‘©ZßN¶ì=éû¶¬'’ﳯ5ö"ÙÄiæó±Ö*1ÇòÍŸ=œ}ÒzgîFëÜdKޏoãÛø6¾oãÛø6¾oãÛø6¾oãÛø6¾oãÛø6¾oãÛø6¾oãÛø6¾oãÛø6¾oãÛø6¾oãÛø6¾oãÛø6¾oãÛÿ߶d­@c-Cæ„_~õ‘¯<qq׉°f¦‹žyþÎÇ›ñ?þñÀQk
+ç´®ŒøŸ'ÐéÈ
 endstream
 endobj
-9998 0 obj
-3993
-endobj
-9975 0 obj <<
+9963 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [235.603 617.768 297.864 629.457]
 /Subtype /Link
 /A << /S /GoTo /D (cups1) >>
 >> endobj
-9976 0 obj <<
+9964 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [322.713 617.768 384.974 629.457]
 /Subtype /Link
 /A << /S /GoTo /D (cups2) >>
 >> endobj
-9986 0 obj <<
-/D [9984 0 R /XYZ 151.701 685.529 null]
+9974 0 obj <<
+/D [9972 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2286 0 obj <<
-/D [9984 0 R /XYZ 151.701 660.623 null]
+/D [9972 0 R /XYZ 151.701 660.623 null]
 >> endobj
-9987 0 obj <<
-/D [9984 0 R /XYZ 151.701 638.691 null]
+9975 0 obj <<
+/D [9972 0 R /XYZ 151.701 638.691 null]
 >> endobj
 5262 0 obj <<
-/D [9984 0 R /XYZ 151.701 593.442 null]
+/D [9972 0 R /XYZ 151.701 593.644 null]
 >> endobj
-9988 0 obj <<
-/D [9984 0 R /XYZ 151.701 576.572 null]
+9976 0 obj <<
+/D [9972 0 R /XYZ 151.701 576.774 null]
 >> endobj
 2290 0 obj <<
-/D [9984 0 R /XYZ 151.701 221.285 null]
+/D [9972 0 R /XYZ 151.701 221.285 null]
 >> endobj
-9989 0 obj <<
-/D [9984 0 R /XYZ 151.701 194.627 null]
+9977 0 obj <<
+/D [9972 0 R /XYZ 151.701 194.627 null]
 >> endobj
 2294 0 obj <<
-/D [9984 0 R /XYZ 151.701 194.627 null]
+/D [9972 0 R /XYZ 151.701 194.627 null]
 >> endobj
-9990 0 obj <<
-/D [9984 0 R /XYZ 151.701 165.678 null]
+9978 0 obj <<
+/D [9972 0 R /XYZ 151.701 165.678 null]
 >> endobj
-9983 0 obj <<
+9971 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R >>
-/XObject << /Im54 9977 0 R >>
+/XObject << /Im54 9965 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10003 0 obj <<
+9991 0 obj <<
 /Length 2014      
 /Filter /FlateDecode
 >>
@@ -54032,53 +57452,53 @@
 /†<†õkÄM]Q¦üUõ]}ùeύ<yùw}ÙڠÏÙä˜ÄcÛº’ûÏ4õ’fiˆíPï(a™´lu0/QoüåiGô·Gƒ%+O{šCB€í}å`á`E1=ŽWáqôÑ‘gG¿¥BKu·º‡Jã©ÄÑûÙg5¼BŽþLE;’6%äMeÇ¿C>øJ‚ÀÕŽ3–ÉQ.ô%>ÅN¸¢ã9BA'Ždnh®þuÆ[å
 endstream
 endobj
-10002 0 obj <<
+9990 0 obj <<
 /Type /Page
-/Contents 10003 0 R
-/Resources 10001 0 R
+/Contents 9991 0 R
+/Resources 9989 0 R
 /MediaBox [0 0 612 792]
-/Parent 9963 0 R
-/Annots [ 10000 0 R ]
+/Parent 9951 0 R
+/Annots [ 9988 0 R ]
 >> endobj
-10000 0 obj <<
+9988 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [138.441 425.754 211.949 435.323]
 /Subtype /Link
 /A << /S /GoTo /D (root-ask-loop) >>
 >> endobj
-10004 0 obj <<
-/D [10002 0 R /XYZ 100.892 685.529 null]
+9992 0 obj <<
+/D [9990 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2298 0 obj <<
-/D [10002 0 R /XYZ 100.892 660.623 null]
+/D [9990 0 R /XYZ 100.892 660.623 null]
 >> endobj
-10005 0 obj <<
-/D [10002 0 R /XYZ 100.892 628.154 null]
+9993 0 obj <<
+/D [9990 0 R /XYZ 100.892 628.154 null]
 >> endobj
 2302 0 obj <<
-/D [10002 0 R /XYZ 100.892 491.568 null]
+/D [9990 0 R /XYZ 100.892 491.568 null]
 >> endobj
-10006 0 obj <<
-/D [10002 0 R /XYZ 100.892 461.852 null]
+9994 0 obj <<
+/D [9990 0 R /XYZ 100.892 461.852 null]
 >> endobj
 2306 0 obj <<
-/D [10002 0 R /XYZ 100.892 405.46 null]
+/D [9990 0 R /XYZ 100.892 405.46 null]
 >> endobj
-10007 0 obj <<
-/D [10002 0 R /XYZ 100.892 373.623 null]
+9995 0 obj <<
+/D [9990 0 R /XYZ 100.892 373.623 null]
 >> endobj
 2310 0 obj <<
-/D [10002 0 R /XYZ 100.892 188.183 null]
+/D [9990 0 R /XYZ 100.892 188.183 null]
 >> endobj
-10008 0 obj <<
-/D [10002 0 R /XYZ 100.892 158.671 null]
+9996 0 obj <<
+/D [9990 0 R /XYZ 100.892 158.671 null]
 >> endobj
-10001 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F85 5513 0 R /F96 8585 0 R >>
+9989 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F85 5513 0 R /F96 8572 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10011 0 obj <<
+9999 0 obj <<
 /Length 2373      
 /Filter /FlateDecode
 >>
@@ -54103,39 +57523,39 @@
  SN²z;Ë'RŠ"|‘óM>0ç{åÉtÆB]|Zy™Ä µØ£'XbwMM³MÓ¦}Ödq¨R5þÔ9p&›!лÍí«\šý¾_(çH…‚Å8v&‡ !vÙˆÆÖÎþ˸ÿ}ûpõ_n¦'‹
 endstream
 endobj
-10010 0 obj <<
+9998 0 obj <<
 /Type /Page
-/Contents 10011 0 R
-/Resources 10009 0 R
+/Contents 9999 0 R
+/Resources 9997 0 R
 /MediaBox [0 0 612 792]
-/Parent 10016 0 R
+/Parent 10004 0 R
 >> endobj
-10012 0 obj <<
-/D [10010 0 R /XYZ 151.701 685.529 null]
+10000 0 obj <<
+/D [9998 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2314 0 obj <<
-/D [10010 0 R /XYZ 151.701 660.623 null]
+/D [9998 0 R /XYZ 151.701 660.623 null]
 >> endobj
-10013 0 obj <<
-/D [10010 0 R /XYZ 151.701 630.478 null]
+10001 0 obj <<
+/D [9998 0 R /XYZ 151.701 630.478 null]
 >> endobj
 2318 0 obj <<
-/D [10010 0 R /XYZ 151.701 383.438 null]
+/D [9998 0 R /XYZ 151.701 383.438 null]
 >> endobj
-10014 0 obj <<
-/D [10010 0 R /XYZ 151.701 341.998 null]
+10002 0 obj <<
+/D [9998 0 R /XYZ 151.701 341.998 null]
 >> endobj
 2322 0 obj <<
-/D [10010 0 R /XYZ 151.701 246.929 null]
+/D [9998 0 R /XYZ 151.701 246.929 null]
 >> endobj
-10015 0 obj <<
-/D [10010 0 R /XYZ 151.701 218.432 null]
+10003 0 obj <<
+/D [9998 0 R /XYZ 151.701 218.432 null]
 >> endobj
-10009 0 obj <<
+9997 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10019 0 obj <<
+10007 0 obj <<
 /Length 1925      
 /Filter /FlateDecode
 >>
@@ -54157,139 +57577,127 @@
 õ険®ŠŽÂ÷(Hz³f­î‘÷	ÿµÝÃY7­DŒ¯_†#GÙowãwèø;Ï0¾Ý,þ¯²Ø
 endstream
 endobj
-10018 0 obj <<
+10006 0 obj <<
 /Type /Page
-/Contents 10019 0 R
-/Resources 10017 0 R
+/Contents 10007 0 R
+/Resources 10005 0 R
 /MediaBox [0 0 612 792]
-/Parent 10016 0 R
+/Parent 10004 0 R
 >> endobj
-10020 0 obj <<
-/D [10018 0 R /XYZ 100.892 685.529 null]
+10008 0 obj <<
+/D [10006 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2326 0 obj <<
-/D [10018 0 R /XYZ 100.892 660.623 null]
+/D [10006 0 R /XYZ 100.892 660.623 null]
 >> endobj
-10021 0 obj <<
-/D [10018 0 R /XYZ 100.892 630.478 null]
+10009 0 obj <<
+/D [10006 0 R /XYZ 100.892 630.478 null]
 >> endobj
 2330 0 obj <<
-/D [10018 0 R /XYZ 100.892 560.978 null]
+/D [10006 0 R /XYZ 100.892 560.978 null]
 >> endobj
-10022 0 obj <<
-/D [10018 0 R /XYZ 100.892 535.828 null]
+10010 0 obj <<
+/D [10006 0 R /XYZ 100.892 535.828 null]
 >> endobj
 2334 0 obj <<
-/D [10018 0 R /XYZ 100.892 426.286 null]
+/D [10006 0 R /XYZ 100.892 426.286 null]
 >> endobj
-10023 0 obj <<
-/D [10018 0 R /XYZ 100.892 397.542 null]
+10011 0 obj <<
+/D [10006 0 R /XYZ 100.892 397.542 null]
 >> endobj
 2338 0 obj <<
-/D [10018 0 R /XYZ 100.892 333.758 null]
+/D [10006 0 R /XYZ 100.892 333.758 null]
 >> endobj
-10024 0 obj <<
-/D [10018 0 R /XYZ 100.892 305.881 null]
+10012 0 obj <<
+/D [10006 0 R /XYZ 100.892 305.881 null]
 >> endobj
 2342 0 obj <<
-/D [10018 0 R /XYZ 100.892 196.339 null]
+/D [10006 0 R /XYZ 100.892 196.339 null]
 >> endobj
-10025 0 obj <<
-/D [10018 0 R /XYZ 100.892 168.259 null]
+10013 0 obj <<
+/D [10006 0 R /XYZ 100.892 168.259 null]
 >> endobj
-10017 0 obj <<
+10005 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F85 5513 0 R /F52 3737 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10028 0 obj <<
-/Length 1880      
+10016 0 obj <<
+/Length 1881      
 /Filter /FlateDecode
 >>
 stream
-xÚíXKÛ6¾ûW½Tb†I=rh‘l“4iºÝ
-š"éA¶¸¶º²èJr6ûï;ádk­]¤í©@/æð5œç7#ó`ðàõìÅÕìé+ÍÁYÆ3\]B–pÄiÆt¦‚«"øj¥æ¿_½}ú*Š‚”eq¬ðhÄSÆ¥ NîÐÅ»åå|!µ
-—MYwe½¡Ùåa¿Š‡v?M7_%’ðb›ï;ÓЙ(Bþ³—W³?gÈD:‘D3)ƒõnöáw°÷6àLfipëNî©Sk
-t\Î~žñSõDÁ2­£‘z*cN
-”<Š˜È˜P ™à<üµ¬U„·-H'áû%—KAfúÔd<XD1X%!nt=JÝu•Jw]¥‘»îˆ²Æí®±óŒÅam
-ÚÈé·­?EKy=aá·›“­(üÅ´]S®»Ò֧׫r}G>rÍ»mÙ¢ì(¬L«Œ„mF—Aç‚„2-Mk‹¯H
-œ(ÂêŽf¥íBªçÅ®¬K`“w¶ùŠÖmsÜq’‚?Æo½k
-ŽÂMc{ÿ ½žó ‡[ÐC°ù"†àyÒÊL„¯ñ&‘§Zãü§Õ|¡uø‡Yw´ð²(AÀ'ð×áÆÒ"(BMN=E’eYÒG6ŠŠÒñðÂÖ¹P›(ëMÆñ€ ;Í#.™Œ‡äøfêÐP$qäyá©8ÓR-0ظüdàÙ(¯æ ¿Ùí«¼sÞ‚¥iI ¼“£2JgC&Û‚³"žKÌÚ¼6Õ#O$	„ÿßxÀxt*›dÆ¢4êO:kÐu!Â- !·í]ÞæaÙÒ˜¼£8f2IÆFìì¸Î+ŒcÉ“°5<â@ËSYÒ˜%©ìeyYç«
-RuBh%™RÃÁ¼.ˆ}·5SlAEuÄMŒ.^G:\Cš;ÂÖ(!RKÀŽHÇÖ­5ÃÉ
-ZÆ€gúžº»|½-kã™—ž7U6D¾²˜ÿS
-	ˆÁ8INÜ€‰úÛàÅÀø™÷]AîhV±(‹6à¸Æ„ÜæõÆЉ²ö'l" á!†¾+Ûm½"b©ôºjº €3ÅT1~tË¿5to½Ö	ì>=ÄQ‘éþåΡM¹qH³¢€.?!<šÆGmš@ê§c7újRW6/0Ì¥¯»C
-ªk¾ÃÝUN>1Ú¶ó±c&+  «ŒY,ÒQíÓ¾öy•  Ý#ĵ4¹v±¡Éóª"Â[É‹¼þÚ_|ah¼4~Á%Œ¾°r¬Œ¨®ÎÐ`#?Fœ~
-sÊïýqWlc:ÿ½/,¥“0ow®hRX׊(C~;_¤€'ohJ¿£f«#nÛ߸EïäÈîŽö°˜–g×ÒI LÞúc®@¬M¸fÝ“©âÖmía³õÕM)^m
-j"EF*!ÑmãÉ¢®Žô] .žÚú–ÆUC­ƒ]†ýˆcÓA\óÊnúÇr
-:—Њ©>¬!4– v:Mýá{ŒšðF)äÂ'Ÿ]"¼ƒF¥Þ0*¬.ÎðW/’˜í”t"NXš¸ZY”ÎÞLæ§ ‘Ò!=·žy›ïÌD)B$dæQ‚(C"AŸâàîŽVŽ!24ÐP0Çêߢa¡ã•'®€I	š×èÀÎÔ(¯ù	ÖJytÅ£Îk0®è1Úµ`´ßK`íúÅÄEÊôa_Eø(Q„×::¬¹vça)GÇ áú2µ:üž‚VKR[‹ÏÞÒä
-
-ÄU¹j€sÄß/Ÿ¹O€¾wÇ?ÁdÇ ò
-ÒøÀ0“Ëb€™Ö´q÷Œë®é¤ÄxF‚²1‘²HE£—0ÉsLÈ©"Œ5uo3Õð@,êco÷Xã"–‰!¯mU˜æžˆ€Í‚‰3W‰øK¹Ù:lX¬¡EBê„ŨE¡SuHìûo	÷%–¾M6p€N±R¿1;Û™½+
-N5ìcBz×ÐÏoí­…ŒàËrèîij›RìÊ*ìÚ}§XU}”F¥·ýÚúÀ„ Ÿ}PíSŠ¤Ž9†ð>𖍹F\]›–±±Îà-ƒ†ºêû>Y?ä“	ìO¡î~v
- ŒŠUŒpç:»À	0º¡jOè³Ñƒ
-&žÿʺÂfo<몤¾ã,¬RøŽV#^<šd­33˜½ðOŸçYâóLåYÍtúžý‡ò¬ëýÞ'šù¢ƒþ,9zÄâ:$hÓ•fÒ1 ±ÈÄñSãžK4°SÙ—'Úʼn+ öíãñpó!~^›Ú4y5>‚©ôØÑç«3A#øâçòLÐâêˆÕ¡ë`q*HÄyÔÿ#¾’cu&³yHæ琓
-û‘[$ä Z¸hû„uPáÆìi‹PîÁ4uq‰þ9ƒgWyoÇïR·û|h1„̾Œ>Ük÷=%Pv쨋GaÄo<÷Ä!½¶MC/ÝÇ¿Sfýøòjö)R
+xÚíXKsÛF¾óW ö²`U8ž'>$e+¶ã$Uf"¹Ö[v 9"±1 ZÑ¿O÷ô "DÈ«8×\8=ƒFO?¿nGÛˆGof/¯fÏ^	Îrž‹èê:F°”‹(Érfr]m¢±ÑzþÛՏÏ^Ke,O¬’gŒ+’<ÓÅûåå|¡ŒŽ—MYwe½¥Ýåñp ŠÇn?M7_-ÒøbW:ۏ”(öêjöû‚J'š¦T´ÞÏ>þÆ£
+<û1âLåYtë9÷‘2KŒºŠ.g¿Ìø©y"„`¹1rdžÎ™75—’‰œ	
+š	Îãÿ”5h•¤ñ‡åâr)ÈraN½Ä£…LÀ)	 7ÌðÐIg2»ÆÍ°nŽk»!¦‚–å\f±C®,î“:° Oεm×”ë®tõé»U¹¾£ý'nx·+[º¹±@¸z.ârä@­…bFç¤u—ÉxC:âk¸­]GDq8TxCÂ}J¿Øì˺•ŠÎ5ÿ¢s×>_¢áU¼Åd`yßÚž{۸㴺kZÀÑ‚-‚MéûµMeüÆ¿ìÉ‘R¿[ÍÆÄÿ³ëŽ^mJÐñ›p«£C°…bšŽ2?Ó,•ªOgÔv¾Ð</\ý‰½=‚½ÞeZpò(‰à’åb¨ˆo'¯3°Ü»’Bu™ÉÌÃH}¶ ºÖñÕ<±Ý*p^Ñù€i3­Ld–ÿ?]¤ê×Ր¬ݳÄZ-j¶“¤	\<ýà©‚R9“™ì9øXeñÕ­*>øôìã>Óa-ŽÛCTÖE‰ê(%g(:r`k;Œe:„Þ¨Ñí épû«ºXUP¬jjÍŒ}¹z© è„X-X³ӄµ4ñº¨‰p5ÖRK@‚ŽH/ÖŸ5Ö®ûb½+kÛ’­BdLˆ¶–A6(U6D¾v 	Ý”A€ò©2§~ÏÓø¿óLÇîˆ`"âCãVà;ÚÕ–P, ‚áñ‹}‰xkéQÙ
+,^iÊx–ôw~_¶»@Zù3%L7zìdª$Å99ÇÐã¯w<x³µDŸIc©R–æCMtWDíÆ!í6Mù¹ÇE™zôÞÖ•+6A÷^Î(°×Ûƒc•Š/‹=¾²BÀí+°mKð%»/ÅûÎ`ª–ˆlÔóLèyÁb-Düî€(×Ò暶ˆÚ¼¨*"B*#yQÔÿ/¾´´^Úp at X)°=n|ó¿%óLŽFrþdzË)Ÿ.zvßqâÿ!´—…ƶÙX"î|;8Òfãü¢±wßÍ™0ñ[z´¢v×ѫ׷ë߸Eÿ(a‡-» ®¥3ß'‘°EØ0âÈ‚
+㜹c÷ÍdÿݹãvGín¡5G¼k<âådÝ®±Ü” UË0ÀቢmxÃѺjhrðËð\rŸ9^jQ¹mYPÂä#|€„,ëÓ
+Á`š,EÏ<¶+!Ë	ˆeÉÿ9Tf—ˆï`z©·÷9å2ãñER³ÒN$)˲¡è*‡Ú¹›Éú Ò€È>ð^«boaFyH!R2(A”%•pTÁxwO'~xÊâ“RµÌÇæߢcÕI(`S‚å4%ÚzÆ.|U`ܪ ·Ê§®÷>
+bô¼_— º	#è£ÌÐ}^†RD{dÂ<	àríùá¨ÀÀ á5Ÿµ&þ’V…®ëŽ 6oi!©Úw'Ü»°~X>÷£?³ãhŸb±c…iÌðÜÄÃl °Òš¶#é¡‚ñ܏žTÏIQ6–½Sj9º	‹¼À‚œºña¬­{÷Ø©‰rѤÉSF³â‹×®ÚØ恊€Í‚‰3W©øk¹ÝylX¬aVBê'ߌ¼¨CâÐ`ÐpNø69Á:%÷ýµ±{×Ùƒo
+Þ4p­Léa]íÎMBIø¢Roƒ¿š¾z€hm…ƒ;uÀD3	þl´A߯]HlAòGGç{‚Æã”!™'G!|LðsË^#®®mËØ8gð–ÃL’§g1Y?“Ÿ	ÜM(¡îau
+ Œ†UœpX½_€œ`BBñ‡j ‚…Ò¿¢ï8wDW%Ígi•Á÷³Ùðò‹EÖz7ƒÛ7áêó:KCé³:ƒQ&Ëþ©³§Ô™šª3t½ï¹Ü’¿Sl]ü¾Úì“Ê†´ô>,?Ô¡J›®´“ѳÅýÀ|âtþôj»8‰€ûr&$|pÒ[Û¦¨&sH0
+ŸI]±:ST*¦¸:StóŠzbuì:8œÊqžú_…dB$L%úLgû˜Î/ 05%·H¨¹ðÐõUëǡ㟬=Ð#‚ºG_ ­ÏK$ðOä]½¼ŒpJ#ŠaÆDó sšÀtÛÃHÁ—øwdôűÔoû¯Ü@¯]ÓÐßLAðTX¿¾ºšý	]LO«
 endstream
 endobj
-10027 0 obj <<
+10015 0 obj <<
 /Type /Page
-/Contents 10028 0 R
-/Resources 10026 0 R
+/Contents 10016 0 R
+/Resources 10014 0 R
 /MediaBox [0 0 612 792]
-/Parent 10016 0 R
+/Parent 10004 0 R
 >> endobj
-10029 0 obj <<
-/D [10027 0 R /XYZ 151.701 685.529 null]
+10017 0 obj <<
+/D [10015 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2346 0 obj <<
-/D [10027 0 R /XYZ 151.701 660.623 null]
+/D [10015 0 R /XYZ 151.701 660.623 null]
 >> endobj
-10030 0 obj <<
-/D [10027 0 R /XYZ 151.701 644.027 null]
+10018 0 obj <<
+/D [10015 0 R /XYZ 151.701 644.027 null]
 >> endobj
 2350 0 obj <<
-/D [10027 0 R /XYZ 151.701 510.443 null]
+/D [10015 0 R /XYZ 151.701 510.443 null]
 >> endobj
-10031 0 obj <<
-/D [10027 0 R /XYZ 151.701 469.06 null]
+10019 0 obj <<
+/D [10015 0 R /XYZ 151.701 469.06 null]
 >> endobj
-10032 0 obj <<
-/D [10027 0 R /XYZ 151.701 396.522 null]
+10020 0 obj <<
+/D [10015 0 R /XYZ 151.701 396.522 null]
 >> endobj
-10033 0 obj <<
-/D [10027 0 R /XYZ 151.701 373.071 null]
+10021 0 obj <<
+/D [10015 0 R /XYZ 151.701 373.071 null]
 >> endobj
-10034 0 obj <<
-/D [10027 0 R /XYZ 151.701 351.135 null]
+10022 0 obj <<
+/D [10015 0 R /XYZ 151.701 351.135 null]
 >> endobj
-10035 0 obj <<
-/D [10027 0 R /XYZ 151.701 316.862 null]
+10023 0 obj <<
+/D [10015 0 R /XYZ 151.701 316.862 null]
 >> endobj
-10036 0 obj <<
-/D [10027 0 R /XYZ 151.701 294.926 null]
+10024 0 obj <<
+/D [10015 0 R /XYZ 151.701 294.926 null]
 >> endobj
-10037 0 obj <<
-/D [10027 0 R /XYZ 151.701 274.202 null]
+10025 0 obj <<
+/D [10015 0 R /XYZ 151.701 274.202 null]
 >> endobj
-10038 0 obj <<
-/D [10027 0 R /XYZ 151.701 252.266 null]
+10026 0 obj <<
+/D [10015 0 R /XYZ 151.701 252.266 null]
 >> endobj
-10039 0 obj <<
-/D [10027 0 R /XYZ 151.701 217.993 null]
+10027 0 obj <<
+/D [10015 0 R /XYZ 151.701 217.993 null]
 >> endobj
-10040 0 obj <<
-/D [10027 0 R /XYZ 151.701 196.057 null]
+10028 0 obj <<
+/D [10015 0 R /XYZ 151.701 196.057 null]
 >> endobj
-10041 0 obj <<
-/D [10027 0 R /XYZ 151.701 174.727 null]
+10029 0 obj <<
+/D [10015 0 R /XYZ 151.701 174.727 null]
 >> endobj
-10042 0 obj <<
-/D [10027 0 R /XYZ 151.701 140.454 null]
+10030 0 obj <<
+/D [10015 0 R /XYZ 151.701 140.454 null]
 >> endobj
-10026 0 obj <<
+10014 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F52 3737 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10045 0 obj <<
+10033 0 obj <<
 /Length 2591      
 /Filter /FlateDecode
 >>
@@ -54319,51 +57727,51 @@
 FûX¦«+
 endstream
 endobj
-10044 0 obj <<
+10032 0 obj <<
 /Type /Page
-/Contents 10045 0 R
-/Resources 10043 0 R
+/Contents 10033 0 R
+/Resources 10031 0 R
 /MediaBox [0 0 612 792]
-/Parent 10016 0 R
+/Parent 10004 0 R
 >> endobj
-10046 0 obj <<
-/D [10044 0 R /XYZ 100.892 685.529 null]
+10034 0 obj <<
+/D [10032 0 R /XYZ 100.892 685.529 null]
 >> endobj
-10047 0 obj <<
-/D [10044 0 R /XYZ 100.892 660.623 null]
+10035 0 obj <<
+/D [10032 0 R /XYZ 100.892 660.623 null]
 >> endobj
-10048 0 obj <<
-/D [10044 0 R /XYZ 100.892 646.937 null]
+10036 0 obj <<
+/D [10032 0 R /XYZ 100.892 646.937 null]
 >> endobj
-10049 0 obj <<
-/D [10044 0 R /XYZ 100.892 612.508 null]
+10037 0 obj <<
+/D [10032 0 R /XYZ 100.892 612.508 null]
 >> endobj
-10050 0 obj <<
-/D [10044 0 R /XYZ 100.892 576.868 null]
+10038 0 obj <<
+/D [10032 0 R /XYZ 100.892 576.868 null]
 >> endobj
-10051 0 obj <<
-/D [10044 0 R /XYZ 100.892 555.382 null]
+10039 0 obj <<
+/D [10032 0 R /XYZ 100.892 555.382 null]
 >> endobj
-10052 0 obj <<
-/D [10044 0 R /XYZ 100.892 533.897 null]
+10040 0 obj <<
+/D [10032 0 R /XYZ 100.892 533.897 null]
 >> endobj
 2354 0 obj <<
-/D [10044 0 R /XYZ 100.892 393.977 null]
+/D [10032 0 R /XYZ 100.892 393.977 null]
 >> endobj
-10053 0 obj <<
-/D [10044 0 R /XYZ 100.892 356.033 null]
+10041 0 obj <<
+/D [10032 0 R /XYZ 100.892 356.033 null]
 >> endobj
 2358 0 obj <<
-/D [10044 0 R /XYZ 100.892 235.477 null]
+/D [10032 0 R /XYZ 100.892 235.477 null]
 >> endobj
-10054 0 obj <<
-/D [10044 0 R /XYZ 100.892 208.152 null]
+10042 0 obj <<
+/D [10032 0 R /XYZ 100.892 208.152 null]
 >> endobj
-10043 0 obj <<
+10031 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R /F53 3738 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10059 0 obj <<
+10047 0 obj <<
 /Length 2332      
 /Filter /FlateDecode
 >>
@@ -54387,228 +57795,526 @@
 CÞÚA¬`?®ºX³$–}°í#픏¹=S—†A{=fÒÕß]/G™á®¦±PÈ5öÉÆ|.ñºÜ {¢ú	gz”š¼Àã„€"雀DûbOñ7IºÄü0è¾#¹ÉkUÒ÷›þ»uðÁ]ó2‡¸›,¨NµO|.O]m¦»'tÿ/fÿ®1O
 endstream
 endobj
-10058 0 obj <<
+10046 0 obj <<
 /Type /Page
-/Contents 10059 0 R
-/Resources 10057 0 R
+/Contents 10047 0 R
+/Resources 10045 0 R
 /MediaBox [0 0 612 792]
-/Parent 10016 0 R
-/Annots [ 10055 0 R 10065 0 R ]
+/Parent 10004 0 R
+/Annots [ 10043 0 R 10053 0 R ]
 >> endobj
-10055 0 obj <<
+10043 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [490.117 131.787 511.352 143.476]
 /Subtype /Link
 /A << /S /GoTo /D (a_small) >>
 >> endobj
-10065 0 obj <<
+10053 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 120.359 196.364 129.382]
 /Subtype /Link
 /A << /S /GoTo /D (a_small) >>
 >> endobj
-10060 0 obj <<
-/D [10058 0 R /XYZ 151.701 685.529 null]
+10048 0 obj <<
+/D [10046 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2362 0 obj <<
-/D [10058 0 R /XYZ 151.701 660.623 null]
+/D [10046 0 R /XYZ 151.701 660.623 null]
 >> endobj
-10061 0 obj <<
-/D [10058 0 R /XYZ 151.701 630.478 null]
+10049 0 obj <<
+/D [10046 0 R /XYZ 151.701 630.478 null]
 >> endobj
 2366 0 obj <<
-/D [10058 0 R /XYZ 151.701 513.821 null]
+/D [10046 0 R /XYZ 151.701 513.821 null]
 >> endobj
-10062 0 obj <<
-/D [10058 0 R /XYZ 151.701 487.658 null]
+10050 0 obj <<
+/D [10046 0 R /XYZ 151.701 487.658 null]
 >> endobj
 2370 0 obj <<
-/D [10058 0 R /XYZ 151.701 312.354 null]
+/D [10046 0 R /XYZ 151.701 312.354 null]
 >> endobj
-10063 0 obj <<
-/D [10058 0 R /XYZ 151.701 274.966 null]
+10051 0 obj <<
+/D [10046 0 R /XYZ 151.701 274.966 null]
 >> endobj
 2374 0 obj <<
-/D [10058 0 R /XYZ 151.701 184.006 null]
+/D [10046 0 R /XYZ 151.701 184.006 null]
 >> endobj
-10064 0 obj <<
-/D [10058 0 R /XYZ 151.701 152.71 null]
+10052 0 obj <<
+/D [10046 0 R /XYZ 151.701 152.71 null]
 >> endobj
-10057 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F85 5513 0 R /F53 3738 0 R /F59 4373 0 R /F52 3737 0 R /F95 8343 0 R >>
+10045 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F85 5513 0 R /F53 3738 0 R /F59 4373 0 R /F52 3737 0 R /F95 8330 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10069 0 obj <<
-/Length 349       
+10057 0 obj <<
+/Length 342       
 /Filter /FlateDecode
 >>
 stream
-xÚ¥Q=oÂ0Ýý+<†!Çù+¶×ÒR•¥T¤ê€B K$)!À߯DíÐ*Ã=_žß½{Fº¦HŸÉCJ†cΩ«‘ÑtE"Ëib,(+iº¤óh–g«ÊÁG:éèl’È–Î- gcàqa3LxôzÌ=Šê£ËOƒX(U«P›MÀè}:hZ»²qåº?U`”åû}¾czo`Ñv6…ÇZª~°’ºe‘§”ìó]O¾ZE4+ÈüéÒÿ›Pa
-=û
-e Q­Ú–ÎÈÁs<w´Îå­˜¶úG±.ãïî/jÊ«)v»õ¡nƒ1¢
-’™°7S×75+X¿öØm›¼±	6WxrͦE2ÊŸûªX4.û%!©ÀJù—ˆnëEšIPFúª Q·Ò;‚Ð=™ÿzеû;çÆð¥ðƒ+?åÞSÄL@âMÇ>#Ê?<gx«(
+xÚ¥Q=oÂ0Ýý+nÇù+‰×ÒR•¥T¤b@!€%’”$À߯“Š"Ú¡•?Ÿß½»{G°‚gö°ÑDˆÐDÄ!Ù 'ÂØcƒÚ(HÖ°æYÚز,“iGÑ„¡jé 96yž(CN¡^O™CAu²Ùy0”ZåÆßÍ.ó`ü>›{4«lÑØbÛ¿J(H³ºÎj_V“ë
+
+™®Mép¤t_X«¨e±§„wQG¾E£”æl±$X»¿)Jùcæ uŒ¡nÕö0goŒ.öÜÑ
+	…P·b‘‰~ë<þÞý—švj:ò3LìöXµÆIJ5’Ç~n®¯3#ŽFò~ì‰Ý7Yåm“2ïV¶ððl›]‹T?ê2_56ýÅ!¥Ñ(õ‹nï[iÎ%ꐷÒFح̝tá>ç½ä®ÐcéªÜ[Ák·|þŸv?-ª-
 endstream
 endobj
-10068 0 obj <<
+10056 0 obj <<
 /Type /Page
-/Contents 10069 0 R
-/Resources 10067 0 R
+/Contents 10057 0 R
+/Resources 10055 0 R
 /MediaBox [0 0 612 792]
-/Parent 10016 0 R
+/Parent 10004 0 R
 >> endobj
-9982 0 obj <<
+9970 0 obj <<
 /Type /XObject
 /Subtype /Form
 /FormType 1
 /PTEX.FileName (./Samba3-HOWTO/images/cups2.pdf)
 /PTEX.PageNumber 1
-/PTEX.InfoDict 10071 0 R
-/BBox [0 0 720 1175]
+/PTEX.InfoDict 10059 0 R
+/BBox [0 0 815 1176]
 /Resources <<
 /ProcSet [ /PDF /Text ]
 /ExtGState <<
-/R7 10072 0 R
->>/Font << /R9 10073 0 R>>
+/R7 10060 0 R
+>>/Font << /R8 10061 0 R>>
 >>
-/Length 10074 0 R
+/Length 10062 0 R
 /Filter /FlateDecode
 >>
 stream
-xœÍYMoÜ6½ëW{‰xi‘âg^šA€ h·'_d­ìU£•I‰ëþú¾‘v%­vÛ›C¶w<ä<’3ãÏ,ä‚…ôµÿ™ì‚›–=6AgeÞ쩃ρèßÿHvì§[¸{&%—ÖEìö!è§LxîB­™Úq/Øí.¸jÊ]Ún³âqýåéCYïâöåíÁëÛà=Ò–.¹
-
-F+)ÙnòYÅËcWÆO,^z	t>4ÜÁ"„3ÜLG‰P»Ó#ŸÅ̃‡@Zî”õìix¶ÁÇ@r»0D—±#ò\z‡™Cê˜mY5D‹µã‘V[{‹…XÃn7ÁU\Uy–ÄmV7UÙ´MRgÕ9ž·”²<¢,Âyni‡¼ç‘0‹×†Èê}$¹´~)×:ÍÝyK)?‰=ãÒ¢ÍXµ8l—ñËxî	£³
-A\ǯª9ë<S¼– œœ¬ÙKrMÖ<ZkEÄE4®yô8¬ðŒe)?‰}ž)Ë@vž)ËÁæ4ܤb8oäOˆ–HFÜÃÍb 2ÛhðNq~¸ÐÞãQYgô@*Œ¸gû0ùIàÙ!.Öì—첋‚`õŒY‹œá»‹>-_‹
-O¾TÍúßj…t*âF0ë-a#"‰²bí
-ù`p #;‹±(¦ŠY«åÄÇjÅc§+—–!Ò©åjʝE;fÏâ ](DÑÆ°Õˆ/%¤i–œR%"
-eÜ°(é¥âaÄH'qˆ¢:=:Àÿà~)rE¹Ô9‡C‘ò»«¤,š¶þ’´
-KÊ]Ò
-­£Ÿ+|\½Ù·Üvq±É³"}ù"¸jK–§-k·)#‘ÎîSVÕe’6Mºa÷Ï,&§Õºùùõïo_½^7¼ÝòKâ<çœß½Ä_gÕÕá¨ìx»ÑIœ4ŸEBÅԝ »M„Õu‰õàÈE(Áµ:gÈ4N·ka€f9yyà.`Ð]! Ônåå Àê¸iÓºS÷Fˆ±lݝ¼¿»ú‘­Æ\ͲîUâû
-ì:¹9™Äh带v0HOBÒÁ>BZ⣙	£®&ÑFy\L=8(GHØùÇýôù<ÞqºþßÁ“ip.ì(.#Ì¡¡ßÅ?õ‘M3Và}i°­•á!]£Á"‘.ñ)™£¢L,xŒBN2F!w!’¨/~ê"ð…t9cÙ‡ÊO‚Ï8²,h3Æ,Ü÷õôªw¶cPO–¶úóªØåžÞ‹mêìkŸræM,·Â*c¹¦=,z6$Y£µU¢©ÅZ¼xpÙœWô3thBúÛÄÇÓ¥ñSË>V~ý˜\KÃvÌ®%¢óø …fˆk鑹-þÒã#ä3$£Ñ‚‡áð‰¼•Ô>#Êk”^5õ‘¸¡?gÙÇÊO¢ÏRÅ°ÍrÅÑ}_«:‚frbÖªf›ôk–¤¬©Ò${8÷$8@‰455ìd#5×n²£å°Ò#z?Ùˆ‰Ï~Ùg,ûXùIôóZ
-¶óZºË(DiÇ¢fỈ|ÕQè>N>¥ÅæÌR@¦;Ó?-Ýé ¸¡¹–|°D!f4¤·¤öµŒIÒmÂL|¤Â†X9µ@jÏ¡NC¤£çꢐ“eyØ"ÇM„C×ÔSL†®¾°KjTœô¾é~q/@X®@;¥ýˤ£ßô·ì©¬?á…λ§W„M	±+k©^ÿŸ•_Ê6½ÆÃÎc„­>e›"®šUרj<Ⱥ¾@ü@2	¶QE‰NE}£ûÆš6~ÄðbÓeÖ¸M–µìqÛ5âÕo¿~\§bö"ίYó=¶{Ê6)›®(+0Ožwa®Ùýs7
-ekD
-Šñ­¹¢>a½£ékú·#ÂçMy<ªÛY÷ê¯éf:‘«ëýßšndï‘ý•nú–É&«Ó¤ÍŸY[3ÓTû„@‡ðBi
-¶l²ÝYʲe»ë½†Ó^¥yYgo[r‹lÂ&­0cZ´˜q*e“²hëìþmÁèÎm_Íhž†\Qª´¬€û¡.w„ó]V|ùó0‚—õ#ÇÞ5é~׶m[ýpsóôôÔ-ýý¦;ãmšW|ÛîòQ4¿þ•¼š’
+xœÍYKÛ6¾ëW¾d¬¹|?
+ôÒ4E“l{Ú‹VÖ®ÕèIÉvûë;CÉ–,¹Má*°­ñó‘ü8ü8þLå„ákøLŠèæƒ%m¬äÛáKó}Žxÿ}øH
+òÓ-¸;"ÖIrûõÝpÂuL{¹vÔsr[DWmU¤Ý>+·Yž>TM¿¼ý#z}½‡vø‚(Ö3ª˜†JRLž¹QT‘<2†SeåÄ⹧Ì 晡,œ[CÍ´gÊ-1F>‹™G‘°Ô)ëÉÓ*ð죏‘ veˆ.#†tTxH¤:%FWÕ-Rbë¨ÔJ’­·TkÈí.ºŠë:Ï’¸Ëªò¦®Ú®Mš¬î–rÜRo-DPÊR	34Z¸óÔâÁ§ƒWiê½”s¾`Šê‰gVSwÞÒÊ¡O©´*`§œZ´ËÈe × DgÄp[u{ Õy–x-k±–Q+Ǐ†Ãˆ—”ËqÄ£Ça|g,C |ú<KVì<KVÍ)pŠÀbC2ñè`‘BR™rãFƒrXH…ŽC{<À_©GΙ¤Jœ1aòEàÙ®Öl×ì²M¾eÔ8ë€SÖBÂða›O‡¯åŽ&_êvûo§„pRR}x¤Ì„šS)†ühpœ9Ê‚Å8Fé”T‹‰ÕR™Z,çTàAzŒ´´BMɳ*`§ôY´K%Ù;€²×êÀäKU ’%U$ª'Üà„Š2W´-È¡&=YÀÿà~)rÅ`ì@|ç,ŠÈï®’ªl»æKÒµ$©Š~¤;GߨïwÑÕ›ýq7 [—»<+Ó—/¢«®"yÚ‘nŸTæä>%uS%iÛ¦;rÿLÐg³m~ýûÛW¯·-íötC’8Ï)¥w/á×ÙÑja¥¬8.p1Z¤€…ÆÕ³7gL„fFÂàB¢1ŒNq.9ÕêœåÈ¥ypÜ\+4ËÉëw¡ø’på(ÆiHñ⨾š¸íÒ&Èz£ˆ±dÛ7×A×ß]ýH6cª&Y	îu“Âûص؎ $0‘­Õx†£µVPgäáŽ"¸ºbäÕ«TØ=L¸ö(_çC÷ù<Þi¶þßÁœ’ip.¬H*$ô¡Aoð>ÓG6ÍX! é*M´½É,ý`Á1)ä¿c /ÿh	9Yá‚Ar
+fâÁÅèŒeˆ”/bÏ(²*d3¾¬Û÷U”SÔ;èÓ3¥«ŽÕ…ù‰OïEvMöµÏ7óÓLÁpKXe,Õ8EG1ËPÒÀÍÕPØW‹…tÈ=$C¯ð34Ó›ø`-søÒ2ÄÊÑO©µ6l§äZ#:¯…\¥€Žp £E ›…FÂÃSC&- äé!rÖN[qè„2Î2ÄÊÑg‰beØf©b…辯6--¤/>«M“]ú5KRÒÖi’=dgš‰ÔXа“y€kŒ¦ÚMæa´æ²”…5™‡‰Ï0ê3–!V¾ˆ~žAkÁvžAkBwƒàâÈðHZ¬•A÷qò)-wg®\ƒ26ý=ÐâÆÎ8¬,ùÑ"ôhPk	íBÊÍÄG(o¨S‹‘>”fŽ¡†c¤“›êª’e}Ø$V¤%Bc!LÁ\½ÒC,H[‹2À7Ý/.pC•UDi…ÿ“úM¯÷qGžªæÜÎi¸vI/`/8¸v)„×ÿòKÕ¥×pçç±øA6Ÿ²]×í&Tê.c¡$? Jêö£†ÒAC}£îFÚ.~„Öå.äÕ¸K[’uäqÊáÕo¿~ܦBçeœ_“öÔXñ”íR2PVB?yÂ\“ûç:n[ÌÕÐC¨MŒ×Ì
+V0êvßà¿Œ>o«ÓV}ܾɶ×~¡£…fÜ\ð{xkCÃÞ#û+Ýõµ’]Ö¤I—?“®:tŒ=
+Ù WàˆÈipøá„Mæ:kIYu¤ˆa´÷ÏGX8Si^ÕiÓRò¶C·¸„)Ø¥5ô˜–ô8•±IUvMvÿ'Q„EN2지&×Ç(uZÕ û¡©
+Äù.+¿üyhA«æ‘Â̵é0gû®«¸¹yzz
+‹¿ß„Þ§yM÷]‘‚ù}ô7…
+”‘
 endstream
 endobj
-10071 0 obj
+10059 0 obj
 <<
-/Producer (ESP Ghostscript 8.15)
-/CreationDate (D:20080610111332)
-/ModDate (D:20080610111332)
+/Producer (GPL Ghostscript 8.61)
+/CreationDate (D:20080528091010-05'00')
+/ModDate (D:20080528091010-05'00')
 >>
 endobj
-10072 0 obj
+10060 0 obj
 <<
 /Type /ExtGState
 /OPM 1
 >>
 endobj
-10073 0 obj
+10061 0 obj
 <<
-/BaseFont /JIYUCT#2BAlbanyAMT
-/FontDescriptor 10075 0 R
+/BaseFont /LNPISG#2BDejaVuSans
+/FontDescriptor 10063 0 R
+/ToUnicode 10064 0 R
 /Type /Font
 /FirstChar 32
 /LastChar 122
-/Widths [ 600 0 600 0 0 0 0 0 600 600 0 0 600 600 600 600 0 0 0 0 0 0 0 0 0 0 600 0 0 600 0 0 0 0 0 600 600 600 0 600 0 600 0 0 600 0 600 0 600 0 0 600 0 600 600 0 0 0 0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600]
-/Encoding 10076 0 R
-/Subtype /Type1
+/Widths [ 318 0 460 0 0 0 0 0 390 390 0 0 318 838 318 337 0 0 0 0 0 0 0 0 0 0 337 0 0 838 0 0 0 0 0 698 770 632 0 775 0 295 0 0 557 0 748 0 603 0 0 635 0 732 684 0 0 0 0 0 0 0 0 0 0 613 635 550 635 615 352 635 634 278 0 579 278 974 634 612 635 0 411 521 392 634 592 818 592 592 525]
+/Encoding 10065 0 R
+/Subtype /TrueType
 >>
 endobj
-10074 0 obj
-1629
+10062 0 obj
+1621
 endobj
-10075 0 obj
+10063 0 obj
 <<
 /Type /FontDescriptor
-/FontName /JIYUCT#2BAlbanyAMT
-/FontBBox [ 0 -186 593 667]
-/Flags 5
-/Ascent 667
-/CapHeight 667
-/Descent -186
+/FontName /LNPISG#2BDejaVuSans
+/FontBBox [ 0 -208 889 759]
+/Flags 4
+/Ascent 759
+/CapHeight 759
+/Descent -208
 /ItalicAngle 0
-/StemV 88
-/AvgWidth 600
-/MaxWidth 600
+/StemV 133
 /MissingWidth 600
-/CharSet (/L/y/n/c/comma/z/o/d/N/C/p/e/period/D/colon/slash/f/P/E/r/g/s/h/G/equal/t/i/S/u/I/v/minus/k/U/w/l/a/V/x/m/b/space/quotedbl/parenleft/parenright)
-/FontFile3 10077 0 R
+/FontFile2 10066 0 R
 >>
 endobj
-10076 0 obj
+10064 0 obj
 <<
+/Filter /FlateDecode
+/Length 282
+>>
+stream
+xœ]‘Arà E÷œ‚l°“›d“E;¶ÀXÎxì!΢·ï—œtÑÅ×èÄT.çKž7]}”%}Ѧ§9…îË£$Ò]ç¬l­Ç9mO’˜nqUÕé-®ß?+iдó{¼QõiY±{OZFº¯1Q‰ùJª7&ôÓåñß–=îÃô,­QÊ2X°f< ‚ÆDÀÄ8†]µ•bB:É.›DÆ QÈŽ@ׄÞyFdÀ.ˆ€#<ø"áéÄ×±¯ƒÈF×÷òÏOð8™ä“=L|+聭
+}+'#¡ï¤™ê;<½“;#ãï{ýÿ$ä5¥PÞdn2žÇœéo´ë²r—†Ô/Ø5Žˆ
+endstream
+endobj
+10065 0 obj
+<<
 /Type /Encoding
 /BaseEncoding /WinAnsiEncoding
 /Differences [ 45/minus]
 >>
 endobj
-10077 0 obj
+10066 0 obj
 <<
-/Subtype /Type1C
 /Filter /FlateDecode
-/Length 10078 0 R
+/Length1 100700
+/Length 36786
 >>
 stream
-xœ}W	TTW¶}EU½*})ÐëÑŠŠâ€qL+2©aŠ
-’ÐaR‰L
-(…€Ö€ŠO at j¢ÀªÂÁ€QQq¶í$tT$jâÐŒ­6?Áž×ÿòÿú÷UE÷úÝk±jqï;÷Ü{ÏÙ{Ÿs„ȉÎÁ™)ÉÙŠà¨Õü(ópo9qã…Šæ~øG x<±$({äWã*d\EûߢƍáÄ£¡É
-¶ºB °¢.$'W±)cÝú|o¿¸•kü§N
-pÌÌœ?¾wŠbè‹whz^ƺlïÉøŸÍé™9¹YéÙù½C°uffFª÷ºLEîú<ïä´´ô4~Y|rfúïðŒÌŒÜÜœÍÞ~!þÞ³f̘9
-ÿÌŠÎÈJ)ÈóŽÊÉÎñŽô^™¾® 3yÓ?M1-R‘Z”“’›º66lÓº¼õù«
-–oÞ·%39¾0+Å{‚ŸÀôïLÃöÄDJ$±DHøïáÄ$"‚˜IL&VˈÕÄrˆ#VAD<1…XCDo	D±”˜K¼OD!„€#gb$áFxî„œ8JLÇñ&DØÝUÁrÁE§N˝.'¬¹‹ÖŠ®‰çŠ¤'Y&q•tI£¤ßŽx{„Þ9ܹÁ¹ß%Ò¥Çu®«ÕõáÈÔ‘çF¥¹‰ÜrÝòÜÝ~svOqWºŸwÿûh¿Ñ˸¾Q\Ãr¬ ´CãI!¤qVÙ7¤E§5Õªµ
-Å‘
-•¦¤T¯±Ðw
-ó£Ò~ÄEÀG¤¹ÌPZ¢QÉQj”`g(º3³‚NxæÃ<!´x„"1¢ð:ui©^m¡¡{×™Lj‚^A‚ž3‹kI‹^[kRñû	É"ûfú2‰æ Çh<_f!!ÕØB§±Òu¤íüÐËæ²c`‡Û=©{°›#[B*ìVºõ&‘…v¯V<I«ûRké$¨&³ã>£”:}ðh£¡Õë3ƪ9Xxd³i“%EL†D¡Ä
-Ø
-8‘fû!ŠèÐ’÷î͎Z·%ò=9>ÄVvÃd|ŠÇ¬'ÕÊ}¹ʒ[âë£)zsj ‹Þxž]]õ-ôQë>c’ê•z•º|·J-OH|7/[:-þæWÞí§GÝÉñU4u³¨¢ZSëU£Õ[iªõ©„ºiÑè·É©ÖbJAÛîžî°_ޝ…xëB._ý@jU¦Z¼P~	ª$èz&^Ç9÷I°ƒ’R¼ZN^…SWá™Øv~NÀ
-ºYΙÂE.D†ÆLòEnhôK?À‘}ù#Œ‚7|ÿ½A§ˆ~}¸`¢ßÜ>>s¼ìüàgÚ¶~/YÕï¯ÓÑÜÉTåI•r
-®_6́šKHI~нòÓÅøº.Sð4Õ‰Üú&ƒËÝë-·:äTɬ’×¹¦JW“(^Êúï/ðÁ–¾øû¾ƒw½ÿàGùkèþÌÂMVÈ•{pÖf~­©Ö†>ç<r­tÏ@*‰®q{Ä¿#‹”x΀Ñui  Ãq.ð'ÍFÛ®…t0—Jµ=ƒqѲ‚/°ûM\•ìÃÓ1‡–3˘˜I‰Éå„1ÑÒyänÈ
-ÞúòÆ¡Žsò#‡jÌŒAjTé”êåê2yÜ»	Ãñm}_ÂHú¶\~èá“ñÑ•ò=[«Õ&FZ«5˜iIÌšA6Ù‰ÓY¸Ï#_Ã¹íœÛ þ
-<"ù+˜ãðË Æâ0I0±T˜XþPIv,¿œu‘‚ûó¿M= —iO‘û’„Üðx9„_–½¼ì¸p‰¿ß¢o^¼ø¶çG{a)SX·eÌ™òúâãë-윊/ð†o …<^ù€×Sp=ÛlPTe;ËwhèÔ
-K¢D0¿.ùMÊŠ¬Ïn_ícú˜žØ}3¤…Áý£Ë•
-|	ý ‚	ôe	L˜"ä!G9Õi&فW %—˜Öâ–õlÊ¡&^ºT2a¶_€|H °û®Â¼ƒÄab‘xƒ<º¥k?»³üˆülÃT0Ò%}™®´‚άצ3Ò™ïÆ/¥£ƒ$¯5â{ÔëïPøŽ4ÅJÎJ*íwzˆ÷[e°ˆ²·çÙó¹·'Ðè©°#ÍÂ#-ŽtÈH	iÕ"
-ÉIØ*‚Jˆ’ÜïZ²2hˆÕ1a!ÝÎkŸöWì–“žÔy¼Íaø$‘
-ª¶F§·ÈÁSbQë·•¨1¡“¤K¨N8ãOi•&Ur ‚%ÿæ$T	A¤¥L_Z\Æ+Âyä‚þ,Šh&Þ=Ãî&dò’"呶͆»oPïTÛÈŽ»¯1utÆÚíº"…ÃF’jí§ÓO{`ê·Ê×j*Ë«ù¨jpÔ‹jéûÙL›3}žô_ þ?`é‰ÑÎEÁ÷2êAׇkš–z!Ñ´iHŠ$ϧ‚¨ûbSWd’ˆÕqr4W[mÁG‘Ì	sKkãqSÃJ±¿KêÅk<L#©è\Ù‹ŒýÅK¦OÆØïéy>(a0a´q[NCK‡'eäB9™l}SRÝJFJ…û/M\±Á’Ý  Š4=š+š#š#%GŠÍ›˜|)eŒ_‘ôvXë¹VB…ר
-XªWð„¦çáq¡V]+§v›´:+m”´¯=WÔ…Ù)~|åÞ§[š3Ðö§c´³õe&ìk³i»Ùüfû•ã=w/dýa¯œš°µB«®ñ2i
-8uÆ[jÖòR9eܦÂ;س6¨À6\æq‰Õ7À‘ñK֏ì¸æÓcI‹a‰I #¦Ë_5_aƝdàxx¨&Ilõt€7	kÌÃe×£“ó£k`$m¼\r.'…XBÒeu¼}]
-ìñ<©·ÛüÐh
-¹zã:õ,,>³Á[ô	s½á«S'ÛZO™¯1½LwÊÞiQµÊdª6XäO%֝ºââ2,Ž%’¤«-Ë™Ll~Rr‡YÁLˆ4X‚fý6	æÝø³¥ùÚàa~ÁülÂû¾à"±–
-:@.Áª÷ ä’‰ÏþdÛ1ƒÚ¨Ü±«|§Fž’V´Š‘†'ÚIC=ä8jÒ=~'Ç1¾Ã³cö0‚;£^4Láþ×.6=šC&qdÛ4j½R‚Q#?LÚqWf]©|‡ fä°cþÆ*NÁµSžÔî=®VFÙä$K¬×„EAÉ–´æ|º±àĶ[Ûn—Ö—.n(2o`ÖKƒÃâ¦cÜÍ`‚;wuíÞ‡…Ž‘–ªU˜œbI¡N]S‹·““PÆDözÞM/pýë;ÎüSé‡èLkŽî÷¦(Cž6לg.nd¥_Ý8ÿðþ¤˜*þª5&/SµÎBÿ,á;?[4‡Š¯]¬Ž¶'¿ô¤ò¹w=î:Ú%ª0ƒsÅ
-2,êµ$u:fULÖ2¯„Tö
-—Ö%üuÑÅ5ßuý±áÒGŒ¶U4*¾ÌcTu;J:»D;ê#t; ŽçyGûXA#$ƒR„ðÄp®â“Ãyª#q_“ÈõŠ·ÈzÅ_9ÚÆáF,	‹\ÅC¨€1|ãÚq[‰ÆC´'5 !°Lv¦
-"P˜8—¤þÛq>Oûù”I$J…a&xŠ;HjÀ±—‡c¯$
-F¾bÎ%ÀÁÈ‹Öx‡ÅÒÞ³”±‚~{W´Ç«ÙÖÏ×iªyÚ)ÔeÅ8\û°Œ?%g……Íž~뉞öüSï¤Pa+[ýÅVHô×Ù ao/ˆäÃÂ8ÖÂ|!åñGÑ2,ŠNŽ#'ÃѝY 's.îàfþÿ5´’q ;É'`|ŠŒöˆr»mjfO|?O³×¯p°þš
-Á2”…±ì˜n®ã¢Š;Ò"n®Ç߇!³x5Ô“·#.L_»¢D±Z¾}GY³]ªÔ©ŒU{öTÉïlО`¤wÎò*‰­Ë¬þKÖè9±A4unñkžÝ¾~äê
-ùiѲÈx¾‰Ojîüòöç¯N-Sž°‰Å~®œè ‚ác!Ô{\%!³Š›x<™êÔö¤lÑ¶;÷I7P ÞEâÇtøßʘêTÕ
-蔶ÌYè¦×ïž1ƒ_HóÁ
-梷y¸=‡-ƒ¹0K¬%©{;ðzƒ~$<Лà!>cƒu­íBG4µ$ö7EbȪHꉣçh®"H×)ˆ¦ˆW#ÝX‡…jøû¬û$üþdj?ðßUˆ°n;º,üJË™m-ã 52p†(öjÛñÃ-^ÍM©4ºÙ3ìÐÁo»Þx§©¥é“tšªFÝÃ
->Ë€òú‡çÞKùdóûiò‚³~Ì$3ÙŠŒDé¿>]ÀÀÈN˜g/¯.$U:`sïÅ’êíøcF·Œìë‡ÑàЇ܂Wo}Ÿ†ð?É~º·`¢ÿÂùSü=ìïÿö­¿ÆÜèÉØy3ª®Ü¤WZ˜qFo¨<ÜÕc/xØf
-JóðY¼
-Ür3ñ*%£Ñå†"§44‚ñe|>ø5LǏIFjÒëU»+Ê÷Òa0:«Ÿyżjü匪ػ§‚©Âoýv¹Íן„‹}mWª¶ïdÊ+wзÐèc¾|ï51Úµƒ)gvJ·ëUFƒV{Ô,¿
-‚ÏÀ™ù‰ùyï ÊoSê•<HY(ªÜ½k÷.fǸbÓ¶}&mU½Q“ÀÌs¸x¿ ÎÂYZVNúºÆ¬ÏhÙÖÔÐِ֖ΤÆÂ"ûïm”pÏg¯]Û˜mŸ?ÖÚšy̶–Ûü‘²J]E%³WjPê”*Í®’29úî"wjvï`vŽSâ'Šaï^“Övë öe»€³Â~&ÕÖòœˆÅˆ++)Ñ©­4‹&Ê^ƒÆöe™üâ­¬à'Ü|¿f7ɁòQ[ê¹9õXùëëÉϝY—Ï]]Yבñ@!>
+xœì½|U÷>~§ÏÜéDêR	mw–$e@ª¨,ɦ@’
+Ù
+½	"EEEDDTDņˆŠˆ±vEĆ¢bClð›™=!ѯ¯ú–ÿçó'/{ïܹ÷<çœ[žs._D „d4Qhpn~?rÿ#xçsXaE¸*ñ<l´ó±¾pb܇ʚ¥8-ï8ÏÇ‹«J*&ØÇ!D:Ïè®’ò)ʼnþÚ„šî-„‹ËOì@ÄÂ6Nk÷R§AÚÜø BÔç¹MiE|2à9ý»n/†ϝl„:´«O®jtBpäSw;­¾ÊpE¤ù¸A79Ï/ Ô›¯ŠÆâs¦WÌ@¨ï^„žoUU©êÅ}íŒÇÇbJ‰ ÚŒv9?O¡õh±Îyrõ›à´¬!7¢y¨ÆiÙFì"’œ¶uèÚãôœvQëiD@§¡7}G MŽŒÂ"R8–Ft½‰Î£7ӟлQ2£wÓcè na†1뜿)ÔÒ@Ï¡h3±ÅÐê ¶Ò´‚öS»©õè#…väïBKÑZ4ÍÑÅ"¢h9ÌsZv2»ÑJç'ê¼ßM¬&ö8Úm!æ¢}hE“ýÑjbŸc×.tÍ¥
+ÈYŽOd±£ÿNGÖngüJ£³Àè8ÙÑis´w°ÆzŸÍ¨NÌ>ïçšå  µìfÖâZ;(®ÇÖÛˆÃìÕh
+ÚC¦&PoóèÖôt´4ájZêÈ^éŽa‹‰)ŽíîÏ4W:9‰C¬G‡è1ÜXGö×"s™çXTŒ¶:'±šcS/bµÐÑÔ}ÛíæÐ]œñŽn†c5BQ*ˆÆ9µiè^´u¢–£¥Ž$Ï^6™9êŒ\Epl^J,&¢ÝTꀊé/_#¡å=̱M‘JòiȶYEúá{vdËNI§=ú4η
+Þ Oñm>qbðº	3rÓtÕ–ß@·m}à÷^è”4pð߆_C 54&ÃiËáTÝ'§Ùiexï\Ð
+L[çYc6ø
+K}‹´E­{.Ò"=;9kÖ±»âx3g3~ðÃk?
+‘«Ý–ú¤nn‹µŒ*@Q)’‰4Ô9;•nÀ”:¥»–}NŽ[Aø¡N ‘8uÑďP§H6„:íÔ{BA9ê,Âä\¨óHwöM¢.:«A]6nl?
+ê
+²{…º†Ä^÷A]Gt¯"Aΰ®º['PCbÔIÄ_ArڏCF
+ÉVPgP#2ê,²È
+¨ó¨¹ê"êIn‡ºÜ¶'Õê
+*íyêjØë:¨ëˆïõ(JwÖZš‚ªQ*q<G>Ô:«Ê‡ü¨«ópjc>”æô‰;+-îôŽ 0ª@INkªtúwvj©¨Üùñ¡¼“²bÞSÄ)#Θ‰Îg‘Óÿ	Ôî'Q¤‰–»+*Þ®agÌ¿†˜áÔÆ9ã†9çŸÏA*uê®´ˆ7"ìYäœóN›ÏѬÆÁ.wž
+§"·Âéá¾Ã¥G«¦T—•”Æ}í;øü]»|c§øÒÊâ±xu$\‘ä˪,ììK-/÷å¹½b¾¼H,R=1RÔÿfhwwhAxbŸhe‰/-\ú;3"ãÂÃjœÍ®,‰Ä|áꈯ¬ÒWU3¶¼¬ÐW­—U:šjb¾g s,Ààüp¥óæEãJ4:þÏ
+ù3}†yÞŽ9>Šzô;>÷;+
+‹TÇÊ¢•>gàTQ§	:V±'-1§qXqµ¸ÅÑJÇEqÇãÈ›÷¸3k=Qç§dLtdtvÆF²Ú™Éˆ'¯Ú›óΎ܈3•ÆãU=»t)r„N¬é‹ÖTFŠ£Õ%‘Εçuf=
+j×Hí:ýínpß¹ë.â­Ýˆ³‚¢h’Ó×]©ÿÌús%õsÞLqú”z#ËœwUž]qo­»^«öF¸»Ã•:ñ4OžnGÝþª9eýž5Øù9“í‰5vjõ½ö۝ŽQ§¿ñƒÿÔéñÏŸYgžï:›Ëœ7ثŽwVx¾ï´Eø¿tq-ìÉ«ð¤Õí¦2O§Rï]ì*ñP*aÖ“`Þ³•@K¬±ÄzOòôŠz³_鍯‚›@ˆ:Rã°ÆÊ`„=	Oc÷´8}=zýÜu˜^+ÁíÐ=±–#Þ†O¬½VõVI+oæܱE^óô*tÆ„Á>ìí‚Bg…VxRâÞ›Zÿ;µrØIíOêX‡àžZ®þqgý&V¿‹Xç·¥ÊÛ5EB¡7ºV›"Ï‚¸·ÖÆ:oãÞÛþ„$ØÍ…Žf5ž”„O&yk Ô;•âà™
+¯­¾Eµ6TŸ²*ÚÖx>Lª7;n½Â›ÏÄ\ãz'H̝ô;v$´³‹w‚ø<ɉý]^=uöÿØêZÏ%´­:¹¢ãž^u«®Î¢Iž?*þBín(öNõJ°0R±Èût1’¼ÒõÄ8§G¡'/ѧvþÜu\'[ízØEžÆe iOow€vaGbÔ;êæ þYTçßž•Nÿ8ì†Ø)}k÷JÇêŸõÇù<›ÃžæØ;›O]k	o$¸$üóõXÐs_á•uçÇŸ™‹¸ÇD.³†Á¢Î§xêÆº>™Ü’@w}^ìéX+©Ü[§Õ'[šº>-ª7çõW]-ƒ†=F,óÎŒrï	Ÿ´¨ÈÓԝ¯ÊzÞ(9…WHµghØ[=‰µ[‹qºbÿ§MµZb° n……½9úóœŠsº?Τ[Ìw¹7®ìwNs|rvª½s6ì+urk[b'Wdí~9="pÎE<+j‘&yVyã[[´ûôØyW˶­ê­²ÄžÉ>_Æzû=ZO×صëd¢ó¶ì‹ ÉžŸ+a'W9?	ö
+{'jääˆúóžÐ¹¶Ÿq§”z'¼Ï+c cÄ[I¿·NjϺ3ÝETzó^ß_gò*®ç¹úsøW÷jÌ;5k¹ºn·Õî$7r(?{TÈS%Vy+z¼óY3–àCwUᓧê¿ó¤ú}«Æ‰ŸôTòprQŽóäâä:Oh¸Gæyﲜ6ŸÇå9o†9ONk†7/©Þ÷}+o7wê®Ä\4Ô“•‘ç|º²G:-®lŸ÷ì>
+túç8²Ü±!4ÂÃ9ÒòÍrº+{Óší”!èçŽHwZ†:Ïn½r£Ð^Ž3ªÀÛ;î8W—„¦N{ê©Zeyˆµš
+ržòùýámª#;Ë“çêŸäÅGn=ôLx.Ï“îúÈ•ìÊLw4ÊöžÜÖ¡N9Øé—ïù3Õ³9¡mŽgC¦ó>aKÈÓ 1	Òr°ƒíöèçèUàyÁE*€žIÞ<ºödxã]ԁ^¯„f¹0Ën½NJgðeB×ÿÃN"ç{ög;?>Ïþ§¥À››TG~­ÜÚµÓÏ“àê=oõìKõüë!¤yý\/ºþÌ>¹âòêÍJºç/wÞ\Í3<¤TÏ#ùg´¤VZýÙ9ÓêÀ'úyö…<Oe{½ó?†œþY'[ë1˳5|™X÷‰5‘]ϻ鞍îÌqPC°¦R=ߝj…;OÃ=ýë¬HÌ@*|¦×óYÝìçÀìÖêSà!œÁ+ý½òz¥zsrdzûwh>ôä
+«;†ÂúÌ=©Ù©þ­ÝGµýþÌÙ‘U‹}êfxë)4Ì?éDürgWÈáµB/ωŸ<·OeîúQc]4Z?îLªwÖ֏§p?¯oÅiýêZÙR‚³êrú±Û™2ìÚì8Ë×F½uÑGâìNäDõ£Þ"/>OÄ€±“QIÔ‹£'#“IÞÛ:N¯‚»“è)yž‹ö¸?é$V-ÕÉJÄ•a/ZpÑbgðæï3þMfXåñ}e’WCdâÚW}Ýö©§eõ÷?¿ßç Ö–3Eõý_íÍwäRež‡Ýx²3È­FµyYO\$îÝ*N›õºÕçJë‰N¿Up}PROó"Ï×%îð\LìWµw\ÿý[§úÎúé>Ÿrtzäõï»Âg¼òý‡ïƒðŸº:5’/¬§SÝ]GmÏ?wƒz¦ü_»Wòýæ^	ÿÿ÷Jõî•ênþ¿y¯„OaØÿÞ½>C¶ö¿p¯„Ïx¯TgÑæ^	ÿÁ}Áæ^	£õ^©î_þÉ{¥ºývê½Òï±ïïß.%òóD$ñ¿v»„Ñ©·Kg¾ÝøÏÜ.á?𮯞ÿ·o™°·Æ~Íüço™ðÿð->í–©.×ýOÞ2áÿó–É÷»eÂÿÂ-“ïßvË„=s¤ð´Mx;ÕyÿŸ»;ÂgœóÿÖÝþÍÝ‘ï¿vw„÷î¨îèßw„ÿ…»£?’ûï½;ª=YŸQ~{ãƒÿOý[šòÆÿ­ŸßælíÆ×»ñù£{‡â†&þù}QÝMöpܧÎez_Ðr¿ªæ~Ùíä÷ã|íc‘ˆol¤<:©Cgߟøb[g_¿ò)U¥1_YEU´:)òWG+|©Õ‘‰ð%°Zï‹t5‰/ÒÕ‡Á¸}X¤:ìK¨vòÛx¸ÓþÁ¿ýÞÞŸþÊŸï4ä²ûâÕá¢HE¸z¼/Z|ºŒGª+ÊbÞ—æÊb¾ÒHuÄÁ*©W:¦'9¶;f9ÏU—D’|ñ¨/\9ÅW©Ž9¢cãŽÇÊ„}…ŽÒØé/Ôú©°0ZQåtw;ÄK鎗#•1Ç{­<—´êà+ò…c±haYØÁÃEÑšŠHe<wõ).+w&©½+ÑàˏÇ'9îoÕÁÓ¤:RU-ª)ŒxbŠÊÃÊÆÖÄ#®ø”IÎ4–×¹šL*‹—FkâŽ2e ä"T'\鈭‰9ý]s’|×jì-XiR=Œ$³K´Ú‹8óàô.sTóOƒv•sÄV¹ŽŽã„ë< I¥ÎÂúÍ wŠkª+Àˆ7°(ê‹E“|±š±ã"…q·Åµ¯8Zî,6× ÂheQ™kG¬'ÆŽ¸ðØèĈgAby
+œ\•Ñ¸3
+±D«;+Uu+ ñÎ+
+——ã±𚣆³K§Ø­tÖEµ¯"Z9£Ù¾ø”ªHqØêœPêÔ·á)Înq†•—¹-\w–žSq„†‹Š<Ë®s7h¸ÚÑ«¦<\] ¢H¬¬¤ÒS£$±WAî
+
+:BbîˆZ}b§#¹"±à9,\~f0¦V:iŽz•åS|eõ–9vÍ©Ž¸¿6áõu+1בî¼Ônˆ³æ"ÕÞ IÑꢘ¯ÕÉ}ØÊÅ®}[¹Û¶•ç2gf²a¿Œ8;É•Zã́듉Ѳ“ŠE&ǝãWU9Û+<¶<â¾HØîHv+¸nRJÃq_i8æHŒTžâwÕÕ­î"_Me(\§*ö”KXøG³‹–»»Ú›6w’¾r÷ôpöJmǪpáøp‰c˜³+£Ø]ªÿÚ¢:Ê9°#åÅ®RýC¾ÌÜœ_~nfÁðÔ¼/+ß78/wXVF(Ã×*5ßyn•äžUÐ?whÏé‘—šS0Ò—›éKÍ阕“‘䍜ÊÏǹy¾¬Aƒ³³BN[VNzöÐŒ¬œ~¾4g\Nn/;kPV#´ ×
+¢²Bù®°A¡¼ôþÎcjZVvVÁÈ$œ™UãÈt”Ëó¥ú§æd¥ÍNÍó
+š787?äÈÈpÄædådæ9(¡A!ÇGPzîà‘yYýú$9ƒ
+œÆ$\—š”š70ÉçËuLÎóy]:;Z:2|¡aîàüþ©ÙÙ¾´¬‚ü‚¼Pê ·¯ë~9¹ƒB83whNFjAVnŽ/-䘒š–Jè昒žš5(É—‘:(µŸkN-ˆÛ-aN;°; _('”—šäËJÏr+Ž³òBé^OÇ÷Ž'²=uÓssòCC†:
+N¿Zˆ$<¼ȃpHuþ—îi晟ã˜ëÊ)ÈÍ+8©Êð¬üP’/5/+ߝ‘̼\G]w>s3½0Ôñ§;y9 ¯;GnÛoW‡ÓË
+f„R³ù®N>¥¯³ºB“#UqwmÃæNÞ1š8;“¼U›8œ%ܯÒÙ¸‰6¯êÐ’³³<ÖIœnu„íÒqRâèõŽgu;L”8z‹&Fœ0æ%Ñju“Ie1o§;XMpž/.wÀœQî.òz9ge¸Ü;©æ)
+×’aUu™3dRuYÜ9L|᧵ºl*Ðp5Дg¯Î¥îpHè_‰U9,U61R>¥³Ó·Úå2O“²Êâhu˜î¹¯0Þ³6TˆûJ<áEÑ8ŽV—töaìE\;tú³¿òðÏÄA8ùþJ„ëâ ß_Œƒðoã 8ä=I±ZÎ8C€Z°à¿+ùjc%ü¿+áÄ<üÛb%œØ°+VÂÿ`¬„ëb%ß_Œ•ð)qÁ_ˆ•ðïÅJ¾?+áz±Rýí{J¸äð¹sHüSá†pÉ÷·Â%|Šº^ÞøO‡L¸2êûÛ!þGC&!“﯇LøôÉ÷WB&|ƐÉ÷¯„L¸ uØ ¹®Ú©ýÿRt„ë,ÿ;Ñ®Ž|':Âõ£#ß_ŠŽð£#ß߉ŽÜÅzÊF9øàß
+||ÿBàƒÿ8ðñý‰À{Ï©±ÃÿÐÄkû÷õ‚ÜÙ):ÿßìâÝۍwþvñîΊ¼Õëìýûj•Óvê¿þñov™T6¾¬K™sXMî\UZÕNÌ¿ô»œdâ OÌD£ÐþX˼߉&…hÄ qˆGÂHD’‘‚T¤!ÈDj€¢³P#t6jŒš ¦¨jŽZ8Š´D­PkÔµEíÐ9¨=ê€ÎEQêäØßuEݼßú´QuGɨJqü۝‡z£>è|Ô×»çN÷î£3½óÈBÐ@Çcƒ¼ñŒ† <ïÛ³CÇ£h¤cËh4º]„.Fc7܍nE—¢yè1´}Š.CKÐåèFt'ZKhzÍEW£oзh1º-@ÛÐ{èk´­GߣïÐQtº=‡v¢{ÑXgŽ®tæn—ãègÑóè%ôڍ^D‡ûßx½‚îsfýº
+½†ö¢}ÎÜ~Ž¾@Iq羕;²ÆqÿïÖ6æÝÎNtVÆgÎZ˜Š¦ ihšŽ6£›Ñ,4ÍF— ÃèK´… š`–àýŠŽ	‘Ð	2¡*A¡aÑ€hHœE4"Î&MÐ1ô#Ñ”hF4'Z>¢%ÑŠhM´!ÚíˆsˆöDâ\¢#ú	½N$ˆÎD¢+эðÂ&‚Dw"™èA¤=Ñè Ñ‹8èMô!Î'ú©D‘Nd!"“èGô'²Ðt?1€Hdƒˆ"—L!òˆ|ô3ú}ˆ>"
+ˆ¡Ä0b81‚IŒ". Fcˆ01–($ŠˆQL”¥Dz”GŒ'ʉ
+ô1ú„¨$¢D1¨&bDœ¨!&“ˆÉÄb*1˜NÌ f³ˆÙhq	1‡˜K\JÌ#.#戅Ä"ârâ
+b1±„XJ\I\E,#®&®!®%–×+ˆë‰•Ä
+Ä*âFb5q±†¸™¸…¸•XKÜF¬#n'î î$Öww÷÷÷ˆû‰ÄÄ&âAâ!âab3ñ±…x”ØJ<F<N<A<I<E<Ml#¶;ˆgˆÄ³ÄsÄóÄ.âb7ñ"ññ2ñ
+ñ*±‡ØKì#^#^'Þ Þ$Þ"Þ&Þ!Þ%Þ#öƒÄ‡ÄGÄÇÄ'ħÄ!â3âsâ0ññ%ñq„øšø†ø–øŽøž8Jü@#~$~"~&~!~%Ž'HD$IR$M2$Kr$O
+$&ER"eR!UR#uÒ MÒ"
+ɳÈFäÙdc²	Ù”lF6'[>²%ÙŠlM¶!Û’íÈsÈödò\²#™Dv";“]È®d7ÒOH›’ÝÉd²™Bö${‘瑽É>äùd_2•L#ÓÉ2Df’ýÈþd9€Hf“ƒÈ2—L!óÈ|²€J#‡“#È‘ä(òr4y!yy19†“cÉB²ˆŒÅd	YJ–‘ãÈñd9YAV’Q²Šœ@V“12N֐ÉIädr
+9•œFN'g3ÉYälòr9—¼”œG^FÎ'ÉEäåääbr	¹”¼’¼Š\F^M^C^K.'¯#W×“+ÉÈUääjò&r
+y3yy+¹–¼\GÞNÞAÞI®'ï"ï&ï!ï%ï#7÷“ÉÐè ¹‰||ˆ|˜ÜL>Bn!%·’‘“OO’O‘O“ÛÐÛèô.z½‰ö“ÛÉä3äNòYò9òyrù¹›|‘|‰|™|…|•ÜCî%÷‘¯‘¯“oo’o‘o“ïï’ï‘ûÉ÷ÉääAòCò#òcòòSòùù9y˜ü‚ü’üŠ<B~M~C~K~G~O% ‘?’?‘?“¿¿’ÇÉ¢Š¤(Š¦Š¥8Š§
+S"%Q2¥P*¥Q:eP&eQ
+¨†ÔYT#êlª1Õ„jJ5£šS-(Õ’jEµ¦ÚPm©vÔ9T{ªu.Õ‘J¢:Q©.TWªå§”M©îT2ÕƒJ¡zR½¨ó¨ÞTê|ª/•J¥QéT¢2©~T*‹@
+¤²©AT•K
+¦†PyT>U@
+¥†QéÔHt5Šº€M]H]D]L¡ÂÔXª*¢"T1UB•ReÔ8j<UNUP•TÝ@UQ¨j*FÅ©j"5‰šLM¡¦RÓ¨éÔj&5‹šM]BÍ¡æR—Ró¨Ë¨ùÔj!µˆºœº‚ZL-¡–RWRWQ˨«©k¨k©åÔuÔ
+êzj%uµŠº‘ZMÝD­¡n¦n¡n¥ÖR·Që¨Û©;¨;©õÔ]ÔÝÔ=Ô½Ô}Ôê~j#õ µ‰zzˆz˜ÚL=Bm¡¥¶RQSOPOROQOSÛ¨íÔêj'õ,õõ<µ‹zÚM½H½D½L½B½Jí¡öRû¨×¨×©7¨7©·¨·©w¨w©÷¨ýÔûÔêê õ!õõ1õ	õ)uˆúŒúœ:L}A}I}E¡¾¦¾¡¾¥¾£¾§ŽR?PǨ©Ÿ¨Ÿ©_¨_©ãÔ	ÑMÒMÓÍÒÍӍi‘–h™Vh•Öh6h“¶ètCú,º}6ݘnB7¥›ÑÍ鴏nI·¢[Ómè¶t;úº=݁>—îH'ѝèÎtº+ݍöÓÚ¦ƒtw:™îA§Ð=é^ôytoº}>Ý—N¥Óèt:ƒÑ™t?º?E ÒÙô :‡Î¥ÓCè<:Ÿ. ‡ÒÃèáôz$=Š¾€M_H_D_L¡ÃôXº.¢#t1]B—Òeô8z<]NWЕt”®¢'ÐÕtŒŽÓ5ôDz=™žBO¥§ÑÓéôLz=›¾„žCÏ¥/¥çÑ—ÑóéôBz}9}½˜^B/¥¯¤¯¢—ÑWÓ×Ð×ÒËéëèôõôJúz}#½š¾‰^CßLßBßJ¯¥o£×Ñ·ÓwÐwÒëé»è»é{è{éûè
+ôýôFúzý ýý0½™~„ÞB?Jo¥£§Ÿ Ÿ¤Ÿ¢Ÿ¦·ÑÛéô3ôNúYú9úyzý½›~‘~‰~™~…~•ÞCï¥÷ѯѯÓoÐoÒoÑoÓïÐïÒïÑûé÷éôôAúCú#úcúúSúýý9}˜þ‚þ’þŠ>BMCKGO¥ Ñ?Ò?Ñ?ӿпÒÇéb†d(†f†e8†g3"#12£0*£1:c0&c1
+˜†ÌYL#æl¦1Ó„iÊ4cš3-Ó’iÅ´fÚ0m™vÌ9L{¦s.Ó‘Ib:1™.LW¦ãgŒÍ™îL2ÓƒIaz2½˜ó˜ÞLæ|¦/“ʤ1éLb2™~L&‹Àd²™AL“Ëf†0yL>SÀe†1ÙÌHfs3š¹¹ˆ¹˜Ä™±L!SÄD˜b¦„)eʘqÌx¦œ©`*™(SÅL`ª™gj˜‰Ì$f23…™ÊLc¦33˜™Ì,f6s	3‡™Ë\ÊÌc.cæ3˜…Ì"æræ
+f1³„YÊ\É\Å,c®f®a®e–3×1+˜ë™•Ì
+Ì*æFf5s³†¹™¹…¹•YËÜƬcngî`îdÖ3w1w3÷0÷2÷1˜û™ÌÌ&æAæ!æaf3ó³…y”ÙÊ<Æ<Î<Á<É<Å<Ílc¶3;˜g˜Ì³ÌsÌóÌ.æf7ó"óó2ó
+ó*³‡ÙËìc^c^gÞ`ÞdÞbÞfÞaÞeÞcö3ï3˜˜ƒÌ‡ÌGÌÇÌ'̧Ì!æ3æsæ0óó%ós„ùšù†ù–ùŽùž9ÊüÀc~d~b~f~a~eŽ3'XÄ,ÉR,Í2,Ër,Ï
+,fEVbeVaUVcuÖ`MÖb°
+Ù³ØFìÙlc¶	Û”mÆ6g[°>¶%ÛŠmͶaÛ²íØsØölö\¶#›Ävb;³]Ø®l7ÖÏX›
+²ÝÙd¶›Âöd{±ç±½Ù>ìùl_6•McÓÙ6Äf²ýØþl;€Èf³ƒØ6—ÌaóØ|¶€Êc‡³#Ø‘ì(öv4{!{{1;†
+³cÙB¶ˆ°Ål	[Ê–±ãØñl9[ÁV²Q¶ŠÀV³16ÎÖ°ÙIìdv
+;•ÆNgg°3ÙYìlöv;—½”Ç^ÆÎg°ÙEìåììbv	»”½’½Š]Æ^Í^Ã^Ë.g¯cW°×³+ÙØUììjö&v
+{3{{+»–½]ÇÞÎÞÁÞÉ®gïbïfïaïeïc7°÷³ÙØMìƒìCìÃìfövû(»•}Œ}œ}‚}’}Š}šÝÆngw°Ï°;ÙgÙçØçÙ]ììnöEö%öeööUv»—ÝǾƾξÁ¾É¾Å¾Í¾Ã¾Ë¾Çîgßg°°Ùُ؏ÙOØOÙCìgìçìaööKö+öû5û
+û-ûû={”ý=ÆþÈþÄþÌþÂþÊgOpˆ#8’£8šc8–ã8ž8̉œÄɜ©œÆéœÁ™œÅ5àrgq¸³¹Æ\®)׌kεà|\K®ךkõåÚqçpí¹ܹ\G.‰ëÄuæºp]¹nœŸp6äºsÉ\.…ëÉõâÎãzs}¸ó¹¾\*—Æ¥s\ˆËäúqý¹,n 7Ëæq9\.7˜Âåqù\7”Æ
+çFp#¹QÜÜhîBî"îbnæÆr…\ኹ®”+ãÆqã¹r®‚«ä¢\7«æb\œ«á&r“¸ÉÜn*7›ÎÍàfr³¸ÙÜ%Ün.w)7»Œ›Ï-àr‹¸Ë¹+¸ÅÜn)w%w·Œ»š»†»–[Î]Ç­à®çVr7p«¸¹ÕÜMÜîfîîVn-w·Ž»»ƒ»“[ÏÝÅÝÍÝÃÝËÝÇmàîç6rp›¸¹‡¸‡¹ÍÜ#ÜîQn+÷÷8÷÷$÷÷4·ÛÎíàžávrÏrÏqÏs»¸¸ÝÜ‹ÜKÜËÜ+Ü«Ün/·{{{ƒ{“{‹{›{‡{—{ÛϽÏà>àrrqsŸpŸr‡¸Ï¸Ï¹ÃÜÜ—ÜWÜîkîî[î;î{î(÷wŒû‘û‰û™û…û•;ΝàOð$Oñ4Ïð,Ïñ</ð˜y‰—y…Wy×yƒ7y‹oÀ7äÏâñgóù&|S¾ßœoÁûø–|+¾5߆oË·ãÏáÛóøsùŽ|߉ïÌwá»òÝx?àm>Èwç“ù|
+ß“ïÅŸÇ÷æûðçó}ùT>Oç3øŸÉ÷ãûóYü ~ ŸÍâsø\~0?„Ïãóù~(?ŒΏàGò£øøÑü…üEüÅü>̏åù">Âó%|)_ƏãÇóå|_ÉGù*~_ÍÇø8_ÃOä'ñ“ù)üT~?ŸÁÏägñ³ùKø9ü\þR~?Ÿ_À/äñ—óWð‹ù%üRþJþ*~5
+-¿œ¿Ž_Á_ϯäoàWñ7ò«ù›ø5üÍü-ü­üZþ6~;'¿ž¿‹¿›¿‡¿—¿ßÀßÏoäà7ñòñó›ùGø-ü£üVþ1þqþ	þIþ)þi~¿ßÁ?ÃïäŸåŸãŸçwñ/ð»ùù—ø—ùWøWù=ü^~ÿÿ:ÿÿ&ÿÿ6ÿÿ.ÿ¿ŸŸ?ÀÀä?ä?â?æ?á?åñŸñŸó‡ù/ø/ù¯ø#ü×ü7ü·üwü÷üQþþÿ#ÿÿ3ÿÿ+œ?! HhXxA° 
+’ Š 
+š †`
+–Ð@h(œ%4ÎM„¦B3¡¹ÐBð	-…VBk¡ÐVh'œ#´:ç
+…$¡“ÐYè"tº	~! ØBPè.$=„¡§ÐK8Oè-ôÎú
+©Bš.d!!Sè'ô²„Â@![$ä¹Â`aˆ'äÂPa˜0\!ŒF	£……‹„‹…1BX+
+EBD(J„R¡L'ŒÊ…
+¡Rˆ
+U¡Zˆ	q¡F˜(L&S„©Â4aº0C˜)Ìf—s„¹Â¥Â<á2a¾°@X(,.®K„¥Â•ÂUÂ2ájááZa¹p°B¸^X)Ü ¬nV7	k„›…[„[…µÂmÂ:ávááNa½p—p·pp¯pŸ°A¸_Ø(< l6[„G…­ÂcÂã“ÂSÂÓÂ6a»°CxFØ)<+<'</ì^v/
+/	/¯¯
+{„½Â>á5áuá
+áMá-ámáá]á=a¿ð¾p@ø@8(|(|$|,|"|*>>__
+_	G„¯…o„o…ï„ï…£ÂÂ1áGá'ágááWá¸p#L`S˜Æf1‡y,`ŒE,a+XÅÖ±Mlá¸!>7ÂgãƸ	nŠ›áæ¸öá–¸nÛම>·Çð¹¸#NpgÜwÅÝ°°ƒ¸;NÆ=p
+î‰{áópoÜŸûâTœ†ÓqáLÜ÷ÇYx ˆ³ñ œƒsñ`<çá|\€‡âax8GâQø<_ˆ/Âã18ŒÇâB\„#¸—àR\†Çáñ¸WàJÅUx®Æ1Ç5x"ž„'ã)x*ž†§ãx&ž…gãKð<_ŠçáËð|¼ /Ä‹ðåø
+¼/ÁKñ•ø*¼_¯Á×âåø:¼_Wâð*|#^oÂkðÍø|+^‹oÃëðíø|'^ïÂwã{ð½ø>¼ߏ7âð&ü ~?Œ7ãGðü(ÞŠÏ£èü~?…B£íøi´	=ˆvàmhzÍÇÛñüºïÄÏâçðóx~ïFÏàñKøeü
+~ïÁ{ñ>ô8z¿†_Çoà7ñ[ømü~¿‡¶âýø}| €âñGøcü	þŸáÏñaüþ…à¯ñ7ø[üþÅ?àcøGüþÿ‚ÅÇñ	‰„HŠ”H‹ŒÈŠœÈ‹‚ˆEQ”DYTDUÔD]4DS´ÄbCñ,±‘x¶ØXl"6›‰ÍÅ¢Ol)¶[‹mĶb;ñ±=úAì ž+v“ÄNbg±‹ØUì&úÅ€h‹A±»˜,öSÄžb/ñ<±·ØG<_ì+¦Šibº˜!†ÄL±ŸØ_̈Ålq˜#抃Å!bž˜/ˆCÅaâpq„8R%^ Ž///Ljaq,ºB,‹ÄˆX,–ˆ¥b™8N/–‹b¥«Ä	bµãb8Qœ$N§ˆSÅiâtq†8Sœ%Î/çˆsÅKÅyâeâ|q¸P\$^.^!.—ˆKÅ+Å«ÄeâÕâ5âµârñ:q…x½¸R¼A\%Þ(®o׈7‹·ˆ·ŠkÅÛÄuâíâââzñ.ñnññ^ñ>qƒx¿¸Q|@Ü$>(>$>,n·ˆŠ[ÅÇÄÇÅ'Ä'ŧħÅmâvq‡øŒ¸S|V|N|^Ü%¾ î_____÷ˆ{Å}âkâëââ›â[âÛâ;â»â{â~ñ}ñ€øxPüPüHüXüDüT<$~&~.¿¿¿ˆ_‹ßˆßŠß‰ß‹GÅÄcââOâÏâ/â¯âqñ„„$B"%J¢%Fb%Nâ%AÂ’(I’,)’*i’.’)YR©¡t–ÔH:[j,5‘šJͤæRÉ'µ”ZI­¥6R[©tŽÔ^ê +u”’¤NRg©Z!u•ºI~t‡l)(u—’¥RŠÔ­”z¡ëÑWÒyRo©t¾ÔWJ•ÒÐmRº”!…Ð2)Sê'õ—²¤Ò@)[$åH¹Ò`iZ%åIùR4T&
+—FH#¥QÒÒhéBé"ébiŒ–ÆJ…R‘‘Š¥©T*“ÆIã¥r©Ý.UJQ©Jš UK1).ÕH¥IÒdiŠ4Uš&M—fH3¥YÒléiŽ4Wº-•æI—IóÑ5èZi´PZ$].]!-––HK¥+¥«¤eÒÕÒ5ÒµÒré:i…t½´RºAZ%Ý(­–n’ÖH7K·H·Jk¥Û¤uÒíÒҝÒzé.énéé^é>iƒt¿´Qz@Ú$=(=$=,m–‘¶HJ[¥Ç¤Ç¥'¤'¥§¤§¥mÒvi‡ôŒ´SzVzNz^Ú%½ í–^”^’^–^‘^•öH{¥}ÒkÒëÒÒ›Ò[ÒÛÒ;Ò»Ò{Ò~é}é€ôtPúPúHúXúDúT:$}&}.–¾¾”¾’ŽH_KßHßJßIßKG¥¤cҏÒOÒÏÒ/Ò¯Òqé„ŒdB&eJ¦eFfeNæeAƲ(K²,+²*k².²)[r¹¡|–ÜH>[n,7‘›ÊÍäærÙ'·”[É­å6r[¹|ŽÜ^î Ÿ+w”“äNrg¹‹ÜUî&ûå€lËA¹»œ,÷Säžr/ù<¹·ÜG>_î+§Êirºœ!‡äL¹ŸÜ_Î’Èålyœ#çʃå!ržœ/ÈCåaòpy„<R%_ –/”/’/–ÇÈay¬\(ɹX.‘Kå2yœ<^.—+äJ9*WÉäj9&Çåy¢<Iž,O‘§ÊÓäéòy¦<Kž-_"Ï‘çÊ—ÊóäËäùòy¡¼H¾\¾B^,/‘—ÊWÊWÉËä«åkäkååòuò
+ùzy¥|ƒ¼J¾Q^-ß$¯‘o–o‘o•×Ê·ÉëäÛå;ä;åõò]òÝò=ò½ò}òù~y£ü€¼I~P~H~XÞ,?"o‘•·ÊÉËOÈOÊOÉOËÛäíòùy§ü¬üœü¼¼K~AÞ-¿(¿$¿,¿"¿*ï‘÷Êûä×ä×å7ä7å·ä·åwäwå÷äýòûòùù ü¡ü‘ü±ü‰ü©|HþLþ\>,!)%‘¿–¿‘¿•¿“¿—Ê?ÈÇäåŸäŸå_ä_åãò	)„B*”B+ŒÂ*œÂ+‚‚Q‘YQUÑ]1S±”JCå,¥‘r¶ÒXi¢4Uš)Í•ŠOi©´RZ+m”¶J;好ÒA9Wé¨$¡G”NJg¥‹ÒUé¦ø•€b+A¥»’¬ôPR”žJ/å<¥·ÒG9_髤*iJº’¡„”L¥ŸÒ_ÉR(•le’£ä*ƒ•!Jž’¯(C•aÊpe„2R¥\ ŒV.T.R.VÆ(ae¬R¨)¥X)QJ•2eœ2^)W*”J%ªT)”j%¦Ä•e¢2I™¬LQ¦*Ó”éÊe¦2K™­\¢ÌQæ*—*ó”Ë”ùÊe¡²H¹\¹BY¬,Q–*W*W)Ë”«•k”k•åÊuÊ
+åze¥rƒ²J¹QY­Ü¤¬QnVnQnUÖ*·)ë”Û•;”;•õÊ]ÊÝÊ=ʽÊ}Êå~e£ò€²IyPyHyXÙ¬<¢lQU¶*)+O(O*O)O+Û”íÊåe§ò¬òœò¼²KyAÙ­¼¨¼¤¼¬¼¢¼ªìQö*û”הו7”7•·”·•w”w•÷”ýÊûÊåå ò¡ò‘ò±ò‰ò©rHùLù\9¬|¡|©|¥Q¾V¾Q¾U¾S¾WŽ*?(Ç”•Ÿ”Ÿ•_”_•ãÊ	©„Jª”J«ŒÊªœÊ«‚ŠUQ•TYUTUÕT]5TSµÔjCõ,µ‘z¶ÚXm¢6U›©ÍÕªOm©¶R[«mÔ¶j;õµ½ÚA=Wí¨&©ÔÎjµ«ÚMõ«ÕVƒjw5Yí¡¦¨=Õ^êyjoµz¾ÚWMUÓÔt5C
+©™j?µ¿š¥PªÙê 5GÍU«CÔ<5_-P‡ªÃÔáêu¤:J½@­^¨^¤^¬ŽQÃêXµP-R#j±Z¢–ªeê8u¼Z®V¨•jT­R'¨ÕjL«5êDu’:Y¢NU§©ÓÕêLu–:[½D£ÎU/Uç©—©óÕêBu‘z¹z…ºX]¢.U¯T¯R—©W«×¨×ªËÕëÔêõêJõu•z£ºZ½I]£Þ¬Þ¢Þª®UoSש·«w¨wªëÕ»Ô»Õ{Ô{ÕûÔ
+êýêFõu“ú úú°ºY}DÝ¢>ªnUSWŸPŸTŸRŸV·©ÛÕê3êNõYõ9õyu—ú‚º[}Q}I}Y}E}UÝ£îU÷©¯©¯«o¨oªo©o«ï¨ïªï©ûÕ÷ÕêêAõCõ#õcõõSõú™ú¹zXýBýRýJ=¢~­~£~«~§~¯UP©?ª?©?«¿¨¿ªÇÕҍÔ(ÖÕ8×
+k¢&i²¦hª¦iºfh¦fi
+´†ÚYZ#íl­±ÖDkª5Óšk-4ŸÖRk¥µÖÚhmµvÚ9Z{­ƒv®ÖQKÒ:iµ.ZW­›æך­µîZ²ÖCKÑzj½´ó´ÞZí|­¯–ª¥iéZ†Ò2µ~Z-K 
+Ô²µAZŽ–«
+Ö†hyZ¾V 
+Õ†iõÚHm”v6Z»P»H»X£…µ±Z¡V¤E´b­D+ÕÊ´qÚx­\«Ð*µ¨V¥MЪµ˜×j´‰Ú$m²6E›ªMÓ¦k3´™Ú,m¶v‰6G›«]ªÍÓ.Óæk´…Ú"írí
+m±¶D[ª]©]¥-Ӯ֮ѮՖk×i+´ëµ•Ú
+Ú*íFmµv“¶F»Y»E»U[«Ý¦­Ón×îÐîÔÖkwiwk÷h÷j÷i´ûµÚÚ&íAí!íam³öˆ¶E{TÛª=¦=®=¡=©=¥=­mÓ¶k;´g´Ú³ÚsÚóÚ.ím·ö¢ö’ö²öŠöª¶GÛ«íÓ^Ó^×ÞÐÞÔÞÒÞÖÞÑÞÕÞÓökïk´´ƒÚ‡ÚGÚÇÚ'Ú§Ú!í3ísí°ö…ö¥ö•vDûZûFûVûNû^;ªý Ó~Ô~Ò~Ö~Ñ~ÕŽk't¤:©S:­3:«s:¯:ÖE]Òe]ÑU]ÓuÝÐMÝÒè
+õ³ôFúÙzc½‰ÞTo¦7×[è>½¥ÞJo­·ÑÛêíôsôözý\½£ž¤wÒ;ë]ô®z7ݯt[êÝõd½‡ž¢÷Ô{éçé½õ>úùz_=UOÓÓõ=¤gêýôþz–>@¨gëƒô=W¬Ñóô|½@ªÓ‡ë#ô‘ú(ý}´~¡~‘~±>FëcõB½HèÅz‰^ª—éãôñz¹^¡WêQ½JŸ Wë1=®×èõIúd}Š>UŸ¦O×gè3õYúlý}Ž>W¿TŸ§_¦Ï×èõEúåúúb}‰¾T¿R¿J_¦_­_£_«/ׯÓWè×ë+õôUúújý&}~³~‹~«¾V¿M_§ß®ß¡ß©¯×ïÒïÖïÑïÕïÓ7è÷ëõôMúƒúCúÃúfý}‹þ¨¾UL\BRJZߦo×wèÏè;õgõçôçõ]úúnýEý%ýeýýU}¾Wߧ¿¦¿®¿¡¿©¿¥¿­¿£¿«¿‡žDOéûõ÷õúúAýCý#ýcýýSýþ™þ¹~XÿBÿRÿJ?¢­£«§¯ÕЏé?ê?é?ë¿è¿êÇõ2ƒ4(ƒ6ƒ58ƒ7¢!²¡ª¡ºa¦a
+Œ†ÆYF#ãl£±ÑÄhj43š-ŸÑÒhe´6ÚmvÆ9F{£ƒq®ÑÑH2:.FW£›á7†mîF²ÑÃH1z½ŒóŒÞFã|£¯‘j¤éF†22~F#Ë`4²AFŽ‘k6†yF¾Q`5†ÍÆHc”q1ڸиȸØc„±F¡QdDŒb£Ä(5ÊŒqÆx£Ü¨0*¨QeL0ª˜7jŒ‰Æ$c²1ŘjL3¦3Œ™Æ,c¶q‰1ǘk\jÌ3.3挅Æ"ãrã
+c±±ÄXj\i\e,3®6®1®5–×+Œë•Æ
+Æ*ãFcµq“±Æ¸Ù¸Å¸ÕXkÜf¬3n7î0î4Öww÷÷÷ŒûÆÆ&ãAã!ãac³ñˆ±ÅxÔØj<f<n<a<i<e<ml3¶;ŒgŒÆ³ÆsÆóÆ.ãc·ñ¢ñ’ñ²ñŠñª±ÇØkì3^3^7Þ0Þ4Þ2Þ6Þ1Þ5Þ3öƒÆ‡ÆGÆÇÆ'ƧÆ!ã3ãsã°ñ…ñ¥ñ•qÄøÚøÆøÖøÎøÞ8jü`3~4~2~6~1~5Ž'Ld&iR&m2&kr&o
+&6ES2eS1US3uÓ0MÓ2˜
+ͳÌFæÙfc³‰ÙÔlf67[˜>³¥ÙÊlm¶1ÛšíÌsÌöfó\³£™dv2;›]Ì®f7ÓoLÛšÝÍd³‡™bö4{™ç™½Í>æùf_3ÕL3ÓÍ3dfšýÌþf–9Àhf›ƒÌ3×l1óÌ|³Àj3‡›#Ì‘æ(ós´y¡y‘y±9Æ›cÍB³ÈŒ˜Åf‰Yj–™ãÌñf¹YaVšQ³Êœ`V›13nÖ˜ÍIædsŠ9ÕœfN7g˜3ÍYælósŽ9×¼Ôœg^fÎ7˜ÍEæåææbs‰¹Ô¼Ò¼Ê\f^m^c^k.7¯3W˜×›+ÍÌUææjó&sy³y‹y«¹Ö¼Í\gÞnÞaÞi®7ï2ï6ï1ï5ï37˜÷›ÍÌMæƒæCæÃæfós‹ù¨¹Õ|Ì|Ü|Â|Ò|Ê|ÚÜfn7w˜Ï˜;ÍgÍçÌçÍ]æænóEó%óeóóUs¹×Üg¾f¾n¾a¾i¾e¾m¾c¾k¾gî7ß7˜˜Í͏̏ÍOÌOÍCægæçæaóóKó+óˆùµùù­ùù½yÔüÁ<fþhþdþlþbþj7OXÈ",Ò¢,Úb,Öâ,Þ,l‰–dÉ–b©–fé–a™–e5°ZgY¬³­ÆV«©ÕÌjnµ°|VK«•ÕÚjcµµÚYçXí­Ö¹VG+Éêdu¶ºX]­n–ß
+X¶´º[ÉV+Åêiõ²Î³z[}¬ó­¾Vª•f¥[VÈÊ´úYý­,k€5ÐʶY9V®5ØbåYùV5Ôf
+·FX#­QÖÖhëBë"ëbkŒ¶ÆZ…V‘±Š­«Ô*³ÆYã­r«Âª´¢V•5Áª¶bVܪ±&Z“¬ÉÖkª5ÍšnÍ°fZ³¬ÙÖ%Ök®u©5Ϻ̚o-°Z‹¬Ë­+¬ÅÖk©u¥u•µLˆÇK§T•F*¹ÔŠpau´’'J6uludb„
+{—-‰VFÆsáD)¦–UÖT—G&‹…uuœ^‡#•q\x²Êf†]‘E‰"ÑŽs! Œ `(ñ
+ª9YåB F$Q²¡„ĈWˆýê)URO©~u²JNV¥~…ÑŠŠ0<”Ô{ûדSZW§û
+WӥΛ/+/Š°e^Áe%e`IVÂ’²„ë²@ç²DIf
+ ËƉêaŒ««Këk5þ”‡’êH¤²<\YTVÈf‡kâ¶Ü+¤ìúýÊë=°Ù	•{íXO—;lNb|eb|Nýñ•õÇç$ÆW&\vÿ︪£Î‚¡B•%T¤²„Ëã£`|nÂø¨Wȹ¥5•%áꚊòpM\ŽÖbó:T'tÈ«¯Cu}ò:T'ŠüĨ˜WˆùõÜ«çÆ‚úÒâõ¥$ÄÄ)p§4îNéÐÄ”Ö$¦t(XUV
+MXUãÌÐê²Ê¦Æý”‡žbaMý'n(L}
+ìšáõ´T¯>²^}J]•°uªWàQuËxêÉ*S­,‰q5•e]»õè
+e7(ýP ´¡BÙÊd({@™e*”iP¦C™eÊÌD™ø)€Ÿ¸)€›¸)€›¸)€›¸)€›¸)€›¸)€›’Éä–F«+™¨û™hK›S;°S;°S;°S;°S;°S;5Äõ0kê0ÓÀÞ4ÀNì4ÀNì4ÀNì4ÀNì4ÀNì4ÀNì4°;
+üþNütÀOütÀOütÀOütÀOütÀOütÀOütÀOüÀÏ üÀÏ üÀÏ üÀÏ üÀÏ üÀÏ üÀÏ üÀÏ üà‡ ?ø!À~(ÈöKìú¯€V@zÐC€ô ‡ =虀ž	虀ž	虀ž	Ög‚õ™`}&àg¦àT÷$IlòðÉ*—J”áHâ¬Ë•‡c¥‰z´®îIñwí
+e7(ýP ´¡BÙÊd({@™e*”iP¦C™eÊ„7üÝ ¿àwün€ß
+ð»~7Àï–,å×?«cõ hÒ
+4éštMº&Ý@?hâMü ‰4ñƒ&~ÐÄšøÁ~ð„<á|?àûßø~À÷~ ð€ ü à ? øî¼sš—Gb±qÐ 
+@ (  @ €PÀlPÀlPÀlPÀØà ðmÀ·ß|ðmÀ·ßü à?øAÀ~ðƒ€ü à?øAÀ~ðƒ€üî€ßð»~wÀïøÝ¿;àwüî€ßð»~wÀïøÝ¿;àwüdÀOüdÀOüdÀOüdÀOüdÀOüdÀOüdÀOüdÀO|üø!ðCà‡0Àa€ ?„~üø!ðCà‡0Àa€ ?„~üøS Â?„~üø!ðC8à‡pÀá€Â?„~üøS ?ðSB?„~	üø!$ðCHà‡À!B?„~	üøS?ðÓ Â?„~üø!,ðCXà‡°ÀaÂ?„~üø!,ðCXà‡°ÀaÂ?„~üø!,ðCà‡0Àa€ ?„~üø!ðCà‡0Àa€ ?„~üø!ð­ûÖý@ë~ u?кhݴȁ< v?»ˆÜDî"÷Qû3“…’êðD÷·¶Ç
+¥º5ï] «_ð‚z-6”A(»C™e¹4ïýb½Q©P¦A™e”!(> €N@§ Ó Ði è4 tèZtëe
+”€$ 
+ ‰€D@¢ Ñ hÀï—’òþcuF“€IÀ¤`Ò 0i ˜4 L &
+ “€IÀ¤`Ò 0i ˜4 L &
+ “€IÀ >i ˆ4 D "
+ ‘€H@¤ Ò i ˆ4 D "
+ ‘€H@¤ Ò i ˆ4 D "
+ ‘€H@¤ Ò h 4  ¢ Q€@ˆ Ä b 1 „ B €ˆ@4 š M ˆ&bâÑÊhL.*‹TGbe1ï	§–W•†½ª®ŒÆ#呲°ªŠ•9©©×̇âð>+
+5)·¢ÌM¬Cëuƹ‘’D'½Ìé~
+ãaÑi‘x˜évÅ„b£ =ÊyE9xLA©S£]@f`¸ª*Ìf‡+Æ…ÉA5dN
+9¢Œ
+ÈÁeT^i”É/+©Sá´¡—–QéÎßÁ±2)«ž&*t¨}Æᓐ"õÍŽÔš]Vk¶UsêЄQÞxz¬kT‰kS)‡9EOuMr_Æ=“\aÌxϤrϤ„ÒÒÉÊrrMØEU—FÙ˜kT7Æ+¨¸càSUŽ]…Î_瑉º—êûZ=MM)Z¶jêÏVôäl%ÔÈèÊzjvãÁK°æ€6í`wc½qµï`=C>€|0 ù` òÁ äƒÈ@ Ž G ˆ# Ä â q€8@ Ž G ˆ# a 2 I ˆ$ D€Œ0 a 2 d„ š d„Ȑ #@FÈüLÀÏüLÀÏüLÀÏLàېڐڐڐÚ@]6P—
+ÔeuِڐÚ@Z6–
+¤eiÙ@Z6–
+¤eiÙ@Z6–
+¤eiÙ@Z6–
+¤eiÙ@Z6–
+¤eiÙ@Z6–
+¤eiِùِùÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ÙÀW6ð•
+|e_ِøÙÀ[6ð–
+¼eCâgCâgCâgŸÙÀg6$~6$~6$~6ðœ
+<gÏÙÀs6ðœ
+<gÏِøِøِøِøِøِøِøِøِøِøِøِøِøِøِøِøِøÙÀ·6ð­
+‰Ÿ
+‰Ÿ
+‰Ÿ
+‰Ÿ
+|lÛÀÇ6ð±
+‰Ÿ
+‰Ÿ
+‰Ÿ
+‰Ÿ
+‰Ÿ
+‰Ÿ
+‰Ÿ
+‰Ÿ
+‰Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+	Ÿ
+÷À6Üې ڐ ڐ ڐ ڐ ڐ ڐ ڐ ڐ ڐ ڐ ÚÀù6$€6$€6$€6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð¾
+¼oïÛÀû6ð~x?¼Þï÷ƒÀûAàý ð~x?¼Þï÷ƒÀûAàý ð~x?¼ÞÀ‡Á@m;è|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ƒÀ‡Aàà ðaø0|>ÿÿ‚ÀAà¿ ð_ø/üÞï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^x/¼Þï÷‚À{Aའð^.<ƒÀ{AའœçA8σpžá<Ây„ó<çyÎó œçA8σiµrÁ8σpžá<Ây„ó<çyÎó œçA8¿ƒp~áü
+Âù„ó7çoÎß œ¿A8ƒÿ¯½·—£¨óý»»¦çÌÃyÎ9	yN!49U3ý0€rfNwñä²QžQ$'É		†œ›¨‘Yˆ,"Oˆ,&ŸÖ*®î®à.‹{q5ÊõŠlv/ÞuCÒùUO¿'¼Þ‡ÿîï¾î¡i¾Ó“šþTWW>Uߦ>iýžú¿üëÁ¿üëÁ¿üëÁ¿üëÁ¿üëÁ¿üëÁ¿üëÁ¿üëÁ¿üëÁ«¼êÁ«¼êÁ«>üä3¯ð™/øÌ|æ>óŸù€Ï|Àg>à3ð™øÌ|æ>óŸù€Ï|Àg>à3ð™øÌ|øχÿ|øχÿ|øχÿ|øχÿ|øχÿ|x͇×|x͇×|x͇×|x͇×|x͇×üjë¼\¼æÃk>¼æÃk>¼æÃk>¼æÃk>¼æÃk><æ3>÷á)žòá)žòá)žòá)žòá)ßo—zÃS><åÃS><åÃC><ãÃ3><ãÃ3><ãÃ3><ãÃ3><ãÃ3><ãÃ3><ãÃ3><ã3>öûŒ‡}Æ¿>ãWŸñªÏ8Õg\ê3Þôá^ñá
+^ð¯ùŒÓ|ž{ŸçÉçyòyž|ž'¿õ<éVyÎÇ8Ågœâ3N	à© ž
+à© ž
+wŒ;êÀ[ãÎ`¤u¾:±A!FĘ˜]o ïð^ ïð^ ï\ ïð^ ïð^ ïð^ ïð^ ïð^ ïð^ ïð^ ïð^ ïð^Àø2`|0¾_Œ/î[À}¸o÷-à¾Ü·€û´îãɘqQLÿé¿1ý6¦ŸÆÌcô0fÞ3‹é·1ó¸˜y\Ìü-fþ3‹™¿ÅµÖyb"õ¡ßÇÌÛbæm1óµ˜yZ̼,f^3‹™Å<1ú£ß1ú£ß1úóÅèwŒ~ÇèwŒ~ÇèvŒnÇèvLÿéÿ1ý?¦ÿÇôÿ˜~Óßcú{Léï1ý=¦¿Çôï˜þÓ¿cúwLÿŽéß1ý;¦Çôï˜þÓŸã¬?Ë¡lÞl¢$*b…X%zDŸCbX'6ˆ#Ä^LÔYl€ß ¿~üø
+ðà7Ào€ß ¿~üø
+ðà7ÀüðGÀüˆòå#ÊG”(µÊS߈úFÔ7¢¾õ¨oD}[÷'¢¾õÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁ×àkð5ø|
+¾_ƒ¯Á×àkð5øülž+É_Kò×’üµ$-É_Kò×’üµ$o-É[KòÖ’¼µ$o-É[KòÖ’¼µ$o-É[KòÖ’¼µ$o-É[KòÖ’¼µ$o-É[KòÖ’|µ$_-ÉWKòÕ’|µ$_-ÉWKòÕ’|µ$_-ÉWKòÕ’|µ$_-ÉWKòÕ’|µ$_-ÉWKòÕ’|µ$_-ÉWKòÕ’|µ$O-ÉSKòÔ’<µ$O-ÉSKòÔ’<µ$O-ÉSKòÔ’<µ$O-ÉSKòÔ’<µ$O-ÉSKòÔ’<µ$?-ÉOKòÓ’ü´$?-ÉOKòÓ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉKKòÒ’¼´$/-ÉK›~~~~~~~~~
+üø5ðkà×À¯_¿~
+üø5ðkà×À¯_¿>:K~Z’Ÿ–ä§%ùiI~Z’Ÿ–ä§%ùiI~Z’Ÿ–ä§%ùiI~Z’Ÿ–ä§%ùiI~Z’Ÿ–ä§%ùiI~Z’Ÿ–ä§%ùiI~Z’Ÿ–ä§%ùiI~Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhI>Z’–ä£%ùhIZ’‡–ä¡%yhIZ’‡–ä¡%yhIZ’‡–ä¡%yhIZ’‡–ä¡%yhYmé³_ƒŸå¡%yhIZ’‡–ä¡%yhIZ’‡–ä¡%ydIY’G–ä‘Mä÷è°‡{²õûX#Ö‰
+â1"ÆDê{豇{豇{豇{豇{豇{豇{豇{豇“/—äË%ùrI¾\’/—äË%ùrI¾\’/—äË%ùrI¾\’/—äË%yrIž\’'—äÉ%yrIž\’'—äÉ%yrIž\’'—äÉ%yrIž\’'—äÉ%yrI~\’—äÇ%ùqI~ÜDpÑeòå’|¹$_.É—Kòå’|¹$_.=t™¼¹$o.É›Kòæ’¼¹$o.É›Kòæ’¼¹$o.ÉwKòÝ’|·$ß-ÉwKòÝ’|·$ß-ÉwKòÝ’|·$ß-ÉwKòÝ’|·$ß-ÉwKòÝ’¼¶‰œ½ôÐK½ôÐK½ôÐK½ôÐK½ôÐK½ôÐ9óÐ9óÐ9óê­ßÑ.蜇Îy蜇Îy蜇Îy蜇Α—–ä¡%yOIÞS’”ä¥Ï¸Èg\ä3.ò‘/4Ñ#r>ÚŸ< $(ÉJò€’< $(ÉškÄ:±A!FDêÍýñ¹?ä%ùDÁçþ_4|Æ3äMŸñŒÏxÆg<Áç|Áç|Áç|Áç|eïM¬ëı…cbvz¡z¡z¡:¡:¡:¡:¡:¡:¡:Áû¼Áû¼Áû¼Áû¼Áû|Á÷|Á÷|Á÷|Á÷|Á÷|Á÷|Á÷Q¥…ËuÂû¼Áû¼Áû¼ñ<E<O¼Áû¼Áû¼Áû¼Áû¼1‹àÿþàÿþàÿþàÿþàÿþàýޏàýޏàýޏàýޏàýޏàýޏàýޏà÷~àóˆx¾¢ÖóÅ|!b¾1_ˆàэàэàэàэàэàэàэàэ˜/DÌ"æó…ˆùBÄ|!b¾1_ˆ˜/DÌ"æó…ˆùBÄ|!"/‘—‹˜DÌ"æóƒˆùAÄü †§bx*†§bx*†§bx*†§bx*†§â¡ÖùêÄq„cbVßžŠá©žŠá©žŠ·ÆðU_ÅðU_ÅðU_ÅðU_ÅðU_ÅðU_ÅðU_ÅŒ[cÆ­1üÃ_1üÃ_1üÃ_1üÃ_1ü3ná±‹á±‹á±‹á±‹á±‹á±‹á±‹á1Þgȋ᱋᱋᱋᱋᱋᱋᱋᱋᱋᱋᱋᱋᱋᱘qlŸÅðYŸÅðYŸÅðYŸÅðYŸÅðYŸÅðYŸÅðYL~)&¿“_ŠGÅŒ£bÆQ1㨘qTÌ8*f3ŽŠGÅðe_ÆŒ‡cÆÃ1ü3ŽÇŒ‡ã@ç/l®ÜÉ_“…³õò×4CñÂÖÿ¾^¼¦õ)ûã1ÞwIÞw™>㱘ñXÌxŒ÷`&‚Ïx,f<3‹ÅŒÇxo&yo&yo&yof"øŒÇx&y&cô€÷d’÷d’÷d&r~ô Fxof"çGx&yf"ׇð>Mò>Mò>Mò>Mò>Mò>Mò>Mò>Mò>Mò>Mò>Mò>ÍDðÑÞ«IÞ«™>zÀ{6É{6É{6É{6É{6ÁG/bô‚÷n2néù$Þ»IÞ»IÞ»™>ù$ÞÃIÞÃIÞÃIÞÃIÞÃIÞÃIÞÃIÞÃIÞÃIÞÙ>ù$ÞËÉÖ{¹˜yLL>)&Ÿ3¯‰É'Åä“bòI1ù¤˜|RL>)&Ÿ“OŠÉ'ż÷‰É+Åä•bòJ1y¥˜¼R¬eþâìA»¶øt²J1Y¥˜¬RLV)&«¤QkZkÔZ£ÖµÖ¨µF­5j­Qk=Ô:_Ø Ž#bLÌ®F£ÖµÖ¨µF­5j­Qk:kÔY£ÎuÖ¨³F5j¬QckÔX£Æ5Ö¨±F5j¬QckÔX£ÆZµð¸>ÔX£Æ5Ö¨±F5j¬QckÔX£Æ5Ö¨±F5j¬QckÔX£Æ5Ö¨±F5j¬QcújÔW£¾õÕ¨¯F}5j«Q[ÚjÔV£¶µÕ¨­Fm5*«QWíµÎKýQSšjÔT£¦5Õ¨©FM5jªQSšjÔT£¦5Õ¨©FM5jªQSšjÔT£¦5Õ¨©FM5jªQSšjÔT£¦5Õ¨©&›¡Éfh²šl†&›¡™ÅhÔS£žõÔ¨§F=5ê©QO¶ð¸^ÔS£žõÔ¨§F=5ê©QOzjÔS£žõÔ¨§F=5³-ÍlK3ÛÒ̶4êªQWºjÔU£®uÕ¨«F]5êªQWºjÔU£®uÕ¨«F]5êªQWºjÔU£®UÕ¨ªFU5ªªQUªjTU£ªUÕ¨ªFU5ªªQUªjTU£¦5Õ¨©FM5jªQSšjÔT£¦5Õ¨©FM5jªQSzjÔS£žõÔ¨§F=5ª©QMjjTS£šÕÔ¨¦F55ª©QMjjTS£šÕÔ¨¦F55ª©QMjjÞ¾hÞ¾htR£}Ôè£né#o]4o]4o]4o]töÖE
+e:j¢$*b…X%zDŸCbX'6ˆ#ĈØÂÕY”àKYZ¹úòMëÇVŒnXÅW at J¿«ù7“oX>nþxÙš®«6§wüÕ櫱”átªÒ=¾6µz[»flÔü¨{ã5ãm‡”¢òŠÊ**«¨¬¢²ŠÊ*Î^‘ù+W¯m‡-_v…&ªPß
+MT¥BUű._3z¥¹¾§Nœ*Rå¦T¹)UnJ¤*HUª U¹U®¯ÊõU¹¾*¸Up«àzàzàzàzàz\©¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾Ïù|Îçs>ŸóùœÏç|ç8_@ýêPÿ€úÔ? þxxxxxx!x!x!õ©~~~~~~~~~~~
+ܸ5pkàÖÀ­u-_3¾öJóŒl]-ߪܚÕëG9 ju?¿nlƒ)Å!5«S³z=·b|íå¹xÓúq¾¡NuêT§MÔ­AÝÔ­AÝÔ­pDùˆòmÑFmÑ1+	‘É¡Ö±"VˆU¢Gô‰1$Öˆ
+â1"ÆÄìú¤*œ¹rýè6nZÏ K€%ÀЙ” Ë |ÍØjÃa׏nØÀw€g³…÷¼õäQçºõc–¯_½.ý+Ûù’ª(š@ÑŠ(j ¨¢РT\ºZ”Т„¥ŠŠc6®¾rt#´+!FY¹r…6¨PƒJÕ]3¶nGàC‚”ð+àWÀ¯€]JèRB—º”Ð¥„.%t)«\?´)¡M	mJhSB›º”Õ¸>(«V¯_Q42ÒüÀ‚%(a@	JPzõ¢9ÅØêËWm\Õ¹qÕú1>o(¯\}uësç£ek9àw\Œ(aD	#JQú\šO}|êãSŸúøÔ•0¨„A%*aP	ƒJT 2 ? F•0ª„Q%Œ*aT	£JU¨F•0ª„Q%ŒŠ¥ÂŒRaF©0£4±Z]¿~üš5c+7v4?mZWjÆõisf¸büšµÙ§eæ&)¶‚§§F•kT¹F•kT¹F•kT¹F•kT¹F•kT¹N•ëT¹N•ëT¹N“Á´xIšt©Ù²
+c|I%êT¢N%êTÖ•°®„u%¬‹©¤ÂTRa*ibµ{¹A[=z¹Hv¡-Ô¥A[4h‹ÕhPÕhPÕhPÕ¡#Tc„jŒPÚb„¶üðGÀüðGÀDgmiFZiÏ(µ6­ëj}lö#¥Ò.rä í%Ùy"ê…á9©ðœTxN*<'ž“
+ÏI…ç¤ÂsRá9©ðœT²%^1íÓ.1탃ƒƒƒƒƒƒƒƒƒ¯Á×àkð5ø|
+¾_ƒ¯Á×àkð5ø|
+>³
+3í(š˜ÜG³!°¹—Ç>¸zƒ o\}ä»jaìÊu¯5ÏÂåëS?™µ;ÆÖŒ]™šÖfÞ@Wbìh
+×6-7Ì9Úúb„3l¼%^’
+/I…—¤‰~稩ÇúÕ>`n_†Ä±A1:<¾n|}ªÂ£kJæêԞwt;ºöò5ÙÓ‹y¤Â<Ra©0T˜Gšè—ÖŒ_¾zùhêË\äãøúÎÕk7¦sœå)ˆkJ"ø˜G*Ì#æ‘
+óH…y¤Â<Raib¥¸q•yàWš‰ßP$Y!ɸG*Ü#î‘*uÜ°úÊÕkF×sL
+dÜ#î‘
+÷H…{¤Â=ÒÄjÑL ._¿éÈ}D”ñTøF*|#¾‘
+ßH…o¤Â7Rá©ðTøF*|#¾‘
+ßH…o¤Â7Rá©ðTøF*|#¾‘
+ßH…o¤Â7ÒD]»jÓê«Í8gírZµÆ3Rá©ðˆTxD*<"‘
+H…G¤Â#Rá©ðˆTxD*<"‘
+H…G¤Â#Rá©ðˆTxD*<"‘
+H…G¤Â#Rá©ðˆTxDš(›Oƒé«›Œrmìn¤ÿÛX4lö”ö:M\3öAJ·²Ò”¡fÌ„pT¸G*Ü#î‘
+÷H…{¤Â=Rá©pT¸GšX-¥ÙfLºfÓ¾ò»³¯®Ü´fãêuk®åkjÂp I…¤ÂGRá#©ð‘TøH*|$>’
+I…¤‰Õ.sáëÆRCöMGž+¸I*Ü$n’
+7I…›¤ÂMRá&©p“T¸I*Ü#î‘
+÷H…{¤Â=Rá©pT¸G*Ü#î‘
+÷H…{¤Â=Rá©pT¸G*Ü#î‘*u\1¾ñ(Ï"ü¸H*\$.’
+I…‹¤ÂERá©p4‘ß#Ì
+aV³B˜UÔú=õF˜qT¸F*\#®‘
+×Hi7„×H…k¤Â5ÒDðf\$.’
+IÁG˜¬f\&MaV³B˜¬f…0+„Y!Ì
+aV³Êþçk#CDé®ßÄ(´Â×J…k¥ÂµRáZibH¬ëÄq„c¢îZ?v5ºgØ"û6{µ¦p¡T¸P*\'®“
+×Iu)L3bX³qÝ‘Ë8š‹Í¤ÂfRa3©°™TØJ*l% ríp)6‡
+›C…­¡LÎC®¥?Tà‡
+üP*ðC~¨Àø¡?T˜.T˜.T`†
+ÌP*0Cf¨À˜¡3T`†ÊH+Rzx…žÍ22Å22Åò#Åò#Åò#Åò#Åò#Åò#Åò#Åò#Åò#k…sµjež½!™~!Û¾¨«DèbH¬ëĆ9áPû	#bLÔiÊÑô4–
+˜XI¨¶TÜ'ƒ´@µ­ u qãÉf¶ԁÎÊjÅjÅjÅj›U¨=ý–åŠåŠåŠåŠå&6kෝ€0Xd½€b½€b½€b½€‰ÍGOÀX‘ŠŠŠŠ&6k൝€0XÄaG±r@±r@±r@±r@±r@±r@±r@±r@±r@±r@±r@±r@±r@±r@±rÀÄ´T›ýÀ|PU>x²õAñ¡Rk•i}£Ze”×*<ćj«p%l•9ò!h}ð[eŽ|hýQµ!€¶Î¬ZU­)Ü:sµUŸj«>ÕÖ™«­Ÿ{G.ðÈyÚz0cLly¶<
+[…-Â–GaË£X¦ X¦ X¦ X¦ X¦ X¦ X¦ X¦ X¦ X¦ X¦ šËÖ-[3¾üÙ1 –)¨t™ÂŠµí>9u/Üö?qdºˆaÍÊö?qdºˆaýÆìÏ×lÜ°jtŘÛüoÇŠd±Y
+®g	ƒb	ƒ‰\;cG±£ÇØÑC<´ÁC<´Á«éâÊÕkÖŒ­X6þÁü¦Óµq`-„b-„b-„b-„b-„b-„‰µü24T3x黶ôôëÍÔ’Ô u`1„ÂÄH¥&FÓlѦuSÆ‘˜)LŒ&F
+#•š5¿<3Žl“„ÃÄHab¤01R˜)LŒ&F*51jþ~ÍJŽÁg‰©‘‰àÔòÙàžCža¤77†t5VH
++$…’Â
+Ia…¤°BRX!™W¯½zÙ&Ó¶ÓO퐌D±CRØ!)ìËNvH
+;$Å2…’ÂIa‡d¢W2“­µ(_qñFqDR8"™HŒzF=£ƒQœ“ÎI
+ç$…s’Â9ÉDšÁ¨Ç`Ôc0ê1õŒzF=£ƒQÁ¨Ç`Ô‡š|^éø¼Òñ ø|>Ÿ‚Ï Ág€à3@ðŽâødbDŒ‰à“1òø|2H>$£L_‚ÏÀÕgpà38ÀYÊDðøŒ
+pœR>cœ§ÎS
+ç)…ó”ÂyJá<¥pžR8O)œ§ÎS
+ç)…ó”ÂyJá<¥pžR8O)œ§ÎS
+ç)…ó”ÂyJá<¥pžR8O™X+n¸rõš±•£ËÇ:Ícqä@lØ´–"T¡_Ñù•cWŽòðøU™k; žaUŠ…ZŠ…Z
+ƒ*…A•Â JaP¥0¨RT)ªU
+ƒ*…A•Â JaP¥0¨RT™>™$ŸL’O&	+Á'“ä“IòÉ$ùžv7¬ki6W&ªÜò5›–qPuW2]±zôÊÖÿˆ€Ã•ÂáÊÄZùÊM˜Su·}ný˜])Ì®‹Û‹Û‹Û‹Û‹Û‹Û‹Û‹Û‹ÛL¤*¨?fY
+³,…Y–Â,Ka–¥0ËR˜e)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)É)ŸY æ]&‚ƒÐcæe"8½Ðû=&_&‚Ã,Я·p¸Nt30å£ó>ï‹|òEÔµŽ+Ä*Ñ'ĐX#Ž#bLÌp(6€b(6€b(6€b(6€b(6€b(6€b(6€b(6€b(6€b(6€b(6€b(6€b¨5€Z¨5€Z¨5€Z¨5€Z¨5€Z¨5€Z¨5€Z¨5€Zæ\s®€Wæ¯Ìx5€W¦\S®€)WÀ”+€[¸5€[¸5€[¸5€[¸5€[85€K¸4€K¸4€3¸2€+¸2€+¸2€+¸2€²Ùˆ€lD at 6" @‘yȼdÞx1€¿…ÇõÀ‹¼À‹¼À‹¼À‹¼À‹¼À‹¼À‹¼À‹¼À‹¼À‹¼À‹¼À‹¼À‹¼À‹¼À‹¼À‹¼À‹¼À‹¼À‹üÀüÀü0
+˜dÇx1€x1€x1€x1€x1€x1€x1€x1€ø0hñ!óž€yOÀ¼'`Þ0ï	˜÷äÏòçùó€üyÀ¼'`Þƒ ÂäOaòg"çc(0”ÇüOaî§0÷S˜û)Ìýæ~
+s?9?CuÌþf
+³?[秾Õ†êCõ¡zˆ^„èEˆ^„èEÈP=D7Bt#D7Bt#d¨2TÑ‘	Ñ‘	Ñ‘	Ñ‘	Ñ‘	Ñ‘	Ñ‘	Ñ‘	Ñ‘	Ñ‘	Ñ‘	Ñ‘	Ñ‘	Ñ‘	ª‡èIˆž„èIˆž„èIˆž„èIˆž„èIˆž„èIˆž„èIˆž„èIˆž„èIˆž„èIˆž„èIˆž„èIˆž„èIˆž„èIˆž„èIˆž„èIˆž„èIˆž„èIÈX=DWBÆê!ú¢/!ú¢/!cõ±zÈX=DwBÆê!ú¢?!ú¢?!ú¢?!úòÿi…dÇCô(DBô(DBô(DBô(DBô(DBô(DBô(DBô(DBô(DBô(DBô(DBô(DBô(DBô(DBô(DBô(DBô(DBô(DBô(DBô(DBô(DBô(DBô(DBô(DBô(DBô(DBÆé!ãôqzˆN…èTˆN…èTˆN…èTˆN…èTˆN…èTˆN…èTˆN…èTˆN…èTˆN…èTˆN…èTˆN…èTˆN…èTÈø=D¯Bô*D¯Bô*D¯Bô*D¯Bô*D¯Bô*D¯Bô*D¯Bô*$O’§ÉÓ…äéBÞ÷†ü^!yº<]Hž.$OòÞ7ä½oÈ{ߐ„]HÂ.äíUÈÛ«Œ]HÆ.$c’±ÉØ…dìB2v!ïCÞ‡¼7ÉÖ…dëB²u!Ùºl]H¶.D·C²u!Ùºl]H¶.äíZˆ¾‡è{ˆ¾‡è{ˆ¾‡è{Hª.$U’ªIÕ…èˆþ‡èˆþ‡èˆþ‡èˆþ‡èˆþ‡èˆþ‡èˆþ‡èˆþ×Ðóz^C¿kèw
+}¨¡5x¡/Ô¸Ÿ5îgûYã~Ö¸Ÿ5îgûYã~Öh§õ®Qï:ã’:ã’:ã’:ã‰:ã‰:ã‰:ã‰:ã‰:ã‰:ã‰:ã‰:ã‰:ã‰:ã‰:ã‰:ã‰:ã‰:ã‰:ã‰:ã‰:ú]‡Wëðj^­Ã«uxµ¯Öi¿:íW‡Wëðj^­Ã«uxµ¯ÖáÕ:¼Z‡Wëðj^­Ã«uxµ¯ÖáÕ:¼Z‡Wëðj^­Ã«uxµ¯ÖáÕ:¼Z‡Wëðj^­Ã«uø®ßÕá»:|W‡ïêð]¾«Ãwuø®ßÕá»:|W‡ïêôÿ:ý¨AÿiÐôŸãÚãÚãÚÏAƒç Á¸¶Á¸¶1Ô:oƒ8BŒˆ11»Îý°A?lÐôÃý°A?lÐôÃý°A?lÐŒWŒWŒWŒWGÏŒ0ža<3â·þ¼Jôˆ>1 †Ä±Nl³ëa\2¸d„qÉã̍æF
+s#…¹‘ÂÜHan¤07R˜)̍æF
+s#…¹‘ÂÜHan¤07R˜)̍æF
+s#…¹‘ÂÜHan¤07R˜)̍æF
+s#…¹‘ÂÜHan¤07R˜)̍æF
+s#…¹‘ÂÜHan¤07R˜)̍æF
+s#…¹‘‰à3®ÅäHar¤09R˜)LŽ&G
+“#…É‘‰ÍßU£l<`¢$*b…X%zDŸCbX'6ˆ#ĈÁÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁ×àkð5ø|
+¾_ƒ¯Á×àkð5ø|
+¾_ƒŸ4ÿWfY©Vjþvuíg÷]ï>Õð©†O5|ªá;
+ßiøNÃw¾31"ÆÄ¾Óð†ï4|g"çUœWq^Åy³ù¹‰5bØ ŽÁWà+ð+àWÀ¯€_¿~ü
+øp+àVÀ­€[·^œ*8UÎ_åüUÎ[庪œ¿Êù«œ¿Êù«œ¿ÊuU[8\—Çuxàxàx\‡žžžžžžžžý¦ás}>×çƒïƒïƒïƒïƒïƒïƒïƒïƒïƒïƒïƒïƒïƒ€€€€€€€€€€€€€€€€‚‚òûß‡ü>ä÷!¿ù}ß×ø}úרúרß×ø}D½#pc®'æ{
+¾_ó{x“5ÉšÆdMc²¦1YÓ˜¬iLÖ4&k“5ÉšÆdMc²¦1YÓ˜¬iLÖ4&k“3É™ÆäLcr¦1¡Ò˜PiL¨4&T*ù”Æ|Jc>¥1ŸÒ˜Oi̧4æSó)ù”‰Ô‹ûÊ_ª¢ùKUL77¤]BðCðCðCðé˜Oi̧4æSó)ù”Æ|Jc>¥1ŸÒ˜Oi̧4æSó)ù”Æ|Jc>¥1ŸÒ˜OiþòÍ_Þ¢ùË[4y‹ÆœJcN¥1§Ò˜SiÌ©4æTs*9•ÆœJcN¥1§Ò˜SiÌ©4æTs*9•ÆœJcN¥1§Ò˜SiÌ©4æTs*9•ÆœJcN¥1§Ò˜SiÌ©4æTs*9•ÆœJcN¥1§Ò˜SiÌ©4æTs*9•ÆœJcN¥1§Ò˜SiÌ©4æTs*9•ÆœJcN¥1§Ò˜SiÌ©4æTs*9•ÆœJcN¥1§Ò˜SiÌ©4æTs*9•ÆœJcN¥1§Ò˜SiÌ©4æTs*9•ÆœJcN¥1§Ò˜SiÌ©4æTs*9•ÆœÊDð5ø|
+¾_ƒ¯Á×àkð5ø|x1†±éÐØthl:46&FùM©µëPdT*Y¨fÁË‚Ÿ… ajY¨g¡‘…‘,€gA7ƒÌðd†'3<™áÉOfx2ÓžÌðd†'3<™áÉOfx2ÓžÊðT†§2<•á©Oex*ÃSžÊðT†§2<•á©Oex*ÃS^%ëdx•¯’áU2¼J†WÉð*^%ëdx•¯’áU2¼J†WÉð*^5ëfxÕ¯šáU3¼j†WÍðª^5ëfxÕ¯šáU3¼j†WÍ𪞗áyž—áyž—áyž×Äó²ó²ó²+ò²+ò²+ò²+ò²Kñ²Kñ²Kñ²Kñ²Kñ²kð²êzYu½¬º^V]¯ÊÉšÕõ²êzY=½¬ž^VO/«§G=½ Yu½¬º^äe@^äe@^äe@~äg•÷3<?Ãó3<?Ãó3<?Ãó3<?Ãó3<?ëgç¬gç¬gç¬gç¬gç¬gç¬gç¬gç¬gç¬gç¬gç¬sÎìêÙ5Ô³k¨g×ÐÈð^#Ãkdx¯‘á52¼F†×Èð^#Ãkdx¯‘á52¼F†7’ádx#ÞH†7’ádx#ÞH†7’ádx#ÞH†7’ádx#ÞH†exQ†exQ/ˆU8ªfÁË‚Ÿ… ajY¨g¡Q\±æ]—®_[ˆpñtë©¿§{Þê5+ÆÜÓS'ÂÒÈêõË7]™®FtGÒ²†‹‡.Z>ºaÌm¤–CÅh|ãèòåck7vž±iíå£ë7]¹ftÓÆr4¾iÙš±¦ehitýè²ÕË/[1ž®/o~Tæó†ÖA%=èn?¸l´»½àe£­¢ÕæïÒZø~¼håêµ£GV¯]½ñÈÁ•c+VguÙVÌ-fŽóuûÙtûÙt[±F½íOÌAú'eê¶~õÚ˳?FÚNfŽþÄ=Yµ‹Ú‹EmÅÂö+Û¯ l¿‚PµSíÅT{1¯½˜×^Ìk¿Ðööh´·G#kÖ
+º|tåeËF×wÄk/_4ºfcOZFùá"s£ÖŒmؐ×¢Öq¹Ùƒ†B³Wù\Mù´}Ÿ–‘mŸ‡ÚÊ˶ϭï+¿óÛ‘¶ï[çI1Ú¾oGýÎ硶Ï>û¿óY¶}jû\kûmë³LqKË֏6—ŒotÏJ+kÐZvG&oÊÆá̓EkÆ×^¾aãèúV£·ßµFû]k´ßµ‘ögb¤ý™i&jYWq×­D”ô¥Õ \tåøÚñË׏®[Å7µ£ßô¬Nö} ý§ž1¿s\k?N]®ßz<Òh‹ËÇÝ3Óªd¶‹–ri¶›ïÉô¯ÏmûœÝSó]zÜö}ÜöYS&n+Sm+“~ÖÍ«FêGÛ+=8ÒDéÁ‘ÆL]ÛŠ5Ú‹5Ú‹´i/6Ò^,j/µ‹Ú‹ÅíÅâöbq{1Ý^L·k{jƒh¨­˜98ZÌ´“íÅd{1Ù^LµSíÅT{±J{±J{±J{±j{±j{±j{1¯½˜×^Ìk/æ·óÛ‹ùíÅ‚öbA{± ½XØ^,l/¶«µ«µ«µkïoQ{‹Úû[ÔÞߢöþµ÷·¨½¿Eíý-jïoQ{‹Úû[ÔÞߢöþµ÷·¨½¿Eíý-jïoQ{‹Ûû[ÜÞßâöþ·÷·¸½¿Åíý-nïoq{‹Ûû[ÜÞßâöþ·÷·¸½¿Åíý-nïoq{‹Ûû[ÜÞßâöþ·÷·¸½¿Åíý-nïoqÖߊï1ã‡ÑeãW7¹/]l’R"ŸeÛgÕö¹Òö¹ÚöÙkûì·}Ž0~5ˆ­X=º<ã÷°¾hY:šKù˜oG¿iþ8–á¢Mž´¬]ÎÖáÃo&âÀ€øùâ·JüûñߺÅoñF"þë|ñoÝâ_wˆýóÅ¿üIÝý—D¼¾Cüz‡xí€øÕñ_ñË“ÅnˆWñ%~¾ï\÷ç;Ä>Spß¹âg?]ìþì€øébñωøI"^Qâ?
+ˆÚ!~œˆ—ûÅ?^/^ú²ø‡DüÈÿÑõâÅNw_¼^¼pºøáßMw˜ˆ¿›.þ6“ˆ$âû‰øëâ{ÏÏr¿—ˆçg‰ï*ñD<{CŸûìñ­Ébo"¾™ˆ¿JÄ7ñõD|-_MÄW±'_NÄ3}b÷óÝ݉Øõ¥/»»ñ¥§/u¿ôeñ¥­¹§ÿr¾ûô¥Ã‡ÅÓù¿œ/žJÄwˆ'ñ…D<‘ˆÇñØ
+ñÝâÑG滏®<Üï>2_<Ü/2•~è€x0ŸOĉø\¿¸?~_·ûçJÜ×->»Bì4Evî÷&âž?ëtïIÄŸuŠ»?3Õ½{…øÌ]½îg¦Š»zŧKâS‰¸sG—{g"vt‰íæGÛwˆ;nïvï8AÜÞ->y@|â¶/»ŸHÄm·^êÞöeqÛÖÜ­:ß½õRqëpîO狏'â–›¹·$âæEâOÌeþI]Üô±²{Ó€øXYl3_l[!n4-uã|qCŸøãD|ô#}îGñ‘>ñáDlMÄ–Dþ£ë¯wÿ(×_/®[!6Ÿ7ènž/>”ˆkñÁnqM§¸º$6%bã±á€X@\u@¬KÄx"Ö&bÍ\ñD\Ñ×p¯8W¬NĪëÅåæ`e"Ʊ"˱,£'‹¥Äû;Å¥‰xo".IÄÅ•Ü‹ˆ‹JâÂÉSÝ•¸ çäóâ¼Aq®Ýëž{ŒxÏ€x÷Y“Üw'bIYüa"Îùƒ^÷œDüA¯xW"Î6rv"Î:³×=k’8sf—{f¯8£Kœž½CÄ;D”ˆçíîÈÑø²¨Ÿ-†qZ"ÞùŽ~÷â§ö¸ï觞Òåž:|¸GœÒ%NND-a0à†Dà÷ºÁ€ð½²ë÷
+¯,ª³D¥K(YvU"dY-.»C]bqY,z{Ñ]Ô+Þ^oSâ¤ç»'­'.ìwOœ/ö‹ÌwO¨‹óÅñóËîñ=b~Y—ˆy‰8¶GÌ5×9·_ÌY!f³Ì%ÌZ!fv‰¦g$bú1­!¦šƒ©‰8f…˜bZjJ"&›Mž*1ˆI‰è7úÑg®µ¯!z¯=+Dw"º:'»]‰è4¥;'‹r"J½¢˜ˆ‚)VHDǀȯ9ó‡9Ó…ùV$Â1ÇÎÛ…Ý+¬DØ»ì7|Ü>éÿ†¬ÿÓøŸþ3Ór¬•ÉŽÜJ÷~KXÖ´áÎÜ›VþM»ànqrÖâ½/¼&­Þ^{ᵡI}sûæÏí›»2gÜ ¦üy²££û·ÿ¶>¿Ðœã[âaç—î‹Ís4†{\ûsÖ‡97o¹N®Ð{ðì'úÏ;û‰Iç½÷¢Ý–søëáÅœžøS_SCöpÏPq¸¸¤¸´¸®¸³øµbÇ¥vß<ƒ6¯ÏØ9îa÷ÅC/:'¥»eY¶õDòoÎæ|¿ÕeÃ=ùOYwvwuX¢?oM*u÷þ8E1 ¥äì'zšŸ­áðâ}êµ¾ZÍ`|mÈÎ;ƒýSæïxÕþÀÙ|ãG>zÃÎÛï¸3ßÿ‹ä¯¾šœòó_ÙÏþä{ïkï~ƒ7ÞÄ›=ÜÓ‘âuØV¹?7©`¼Sß8zÞI•ÉýƒNÇ<¿ß«:÷›Snß±ó†~4ßÿZrê+?INþÕÏío½úªýWÍë¸çp¿ýM+±\kêp§¸ÇúhÞôú©Ö1ysª¾—1¨Šy“öÿðþ¿'y4ùº=l~÷²ùñcæwÂêû’õQ'ýIΔ•Öâfùy/ÿð‡IbÊY‡ΓÍ{òöákšíØÎ4a‰†s¯õáœcÙbñÞfÅßxmèìs/êèuîkWìyNááC¿5
+ÿWšªšû»ß`~37¯ygwç?š{À@»¶ÈYǘÛknc
+ÿFV>³ïÿáÓjäæ%Íß¿d/u_÷ñû.ën'w®àÚ9k^úó½êH/›;ØÜ^rIº‹ûÜÿp³½6þ™»ÀÝoMµüái]Ÿí~¬´½Ïþ¬õXnû”OôÝ2­cj—54Ð;Í4…JûÖ¾7L}z_ÿo¯=Õ3}ötǾÔ\dÏ›cõõZs•v9˜ì.XùêG[É~»×¶>òêÊ+~ýÇÉ_$²o´Ï½ñ×î²/{ò\òÉKÉsï¿ì‡gœaßk_n¯²ï=½ymß±,÷	ÓΫÏZ4<hm/~ØÞÞ[pzK–;µKY3Š¹~S©f?I¼ÙNO.d›õU²*ÌŸÛŒmûö7lÏžüsò|Ò08OÚ;’UÉ’dÔ]üæ5ö1ö"ûmö”’;“­É%;šíbðs7ürŠžßžs¶›Go{î/J®]ì3¬\gÚ$/ìÝ›B7ÛdèÉÙ]=më>öïˆ'Msž;Ts~{ðî‹'úáC?;Úî7›vŸiÕ†çXît{»˜¾½ÐÿپǷw¢pË,ÇšÑWÍUŽ™Zîe î;¸÷Hû'/¼n.{h~ß\on_>×jñÜ”ö{‘ûfò´Ó¿)ùÅÎä¾d“}³ýþOÚãëÞœ¼žüÚžd÷àÁíO<ph˹çÛŸ¶¯´×ÚŸ>CÿýeK“ï'›ü]òýù­v°ooö÷E_²wlså¹”yzS°RÈž{¸kÈv—¸KÝ[Ý{Ýü¥“*}ó¾óÝïº/8©ÕžW˜ó¸Öüáδ1söq²•KŸËôû^.u,éØ*¶ærvúó´¿ëüýÁËÌ9^|8;‡[1ç(Z×ÏêèKŸ½¾|G¾Ñáëñ‚›·;œ9¿ÃT±”¶XF!‹ÍcdÚªù0æ~îûäì²¹SÃC¾vœáœÞ±ÚYÙ±ÕéÈÛÅü =-¯í3óÚåÇìÕùkó7Ø’ßnß•¿·Ü{©en¯é^}æ?ó¾c÷:;ö&û]±×}ñÍÙ¹>pRîŸßœõÝÜÇ›}w’uòð1¦ß¦Ý·¿·T0ìozïi}i÷H;©ä”´’o¤ép¹gpöàiƒ—
+>>è6ûqº2ûøyóÍ­ȝd@íÛ“ßu×Ç“Ðþö›¶˜ÁüwÝŇ~ðÉm7~òŸ½üO?=ô i§m‡–»Ïô­Ö
+ŸÚÕét—Y³gŠNGÉ™={V£Tž5;7h[ƒŸ¸ã˜í}¹íÖóÍÃ~¬RyöôëØéS»ßÞ1uàØz¼×4ã¾¾þì3½o_óáï}ÖÔ:kÒî_›Ó°=æa»ôéÙ/üÃ…"ã†cóƒ“gÛ³ls	s=~7Ëήk±yî¼êq59wƆï]ö¹/^óÀ‡~ú÷É?%¯^ñ/[7¿¶þ/öl»kóO¿kOùÍêtïÿVào½zùØì©'½ôôK?Zü7±þØ­½nö1oÿú#Ïî;>ícOšgj¡i÷>kxxrÁé+[îöî[ŠÖ‡û3J¡éºõþ£]7•²×69MÁ"CöÓ³'Ý:éÞI"í~“Ójš›mž&óL=ùücßü«ÇžO^I~‘ü<yÅ}ñà&CÇûÅÍß—ü8ù‘}¢}\Z‡^ÓGW™:ä­/
+/Èõ¹y׌ÔD>
+9aþÜé³m«a4éq+ŸŽåºvGï{›ÀtÔ£¢Q`OÅãÉ%…´¿.³Ä‰âôÜéî%âzñQÑ‘·:œB.í³δÜ4÷Dëxûxgan¡;??§Z»âœš;Õ
+ògX±;gæÎtOÏ_l]_é¬Î­v?d]m_í\›»ÖÝ”ßZ0œ_hzø\»R4jåœuèÙÚ/Ùÿøw‡ž3ý{Jî—æAv¬Í¦o½=·ÙÈÿ|kÏð‚©³ËSŠÝÖCSò»»ûæÜ8û™»çíê»eJ§5EÓU,”g‹Â@|¼éêß{á5¥²'rï¾7{öõ^Cc}µþÚÐðÚ¡™C³†fÍš;tìi†gÏž=<gxîð±Kf.™µdö’9Kæ.9vÉ‚un˜¹mÖ¶ÙÛæl›{ñ·-ع`ÿ‚Y­Ÿ¶~ÔúÁÒYKg/³tîºYëf¯›³nîÖY[go³uî1—š§«Ù/Í-~‡ôÍóŒn{¼Wõ+sÓ'îØ|‡÷NÓM';_}åяz÷®]§íùØ£ÏzÓv>çÒ§Ïûê%ÿu¿SY¹yÙ†—žZø®C~xåè7îûÊ×û·Ü¼hÑÃL5ìÓV÷猆̰Âá©bwgOq÷1ƒ·ôìš~çT«¿ÿôc:ó…izfJ¦¦=`ß{Ó†zz鬭³vΦžÍêdUµÓ:zwL]¤CñóÏò“ŸO÷Czò6Ï:|ø{›¿pòîÝÎâç_}õy³;ïY1šìI~k¶=£+4µ±­«ÿL¼jîáTë´áé֍öÇrÝ7v}¬´»/·{Ê®Tôû»¬3b#úûZ¢ß›¼ñzïo^O)jzïô­Óo›¾sºk·=àÄÿXÄ_¼zΟ-ùâ³Ï~qÉŸóŸ»ôyBÞnçÏ¿/ç=zÒI?ûë¿þÙI'=|Üq悺í~ûäyMÍ7õÊ]bjØ›µ×´ÝV÷Àn·pK÷.ûN1%gœÓûúËñ̦î+u¤½ö¾¥½Ì›ÝNÇÔÄÜB;{›Í(îÛµëä/\÷üaëðó×}áÐs¦å|дžxÚyÿ¼öàŠQ;²f‹F“Azm1í5`M·Ö
+g
+ÚÅs²Ýݝö—ÙÝ¿«ó–ӝÂ`Á:Ûéï‰g4«¸×gÖ|ûzM_ï}ãõ¾´¯/<m溙;gþÍÌý3ÝÓ¬ÓìÓœÓO›î¾­cqaqñm¥qkÜwÆǧ/½*mâ¹MÂ<:´2] £Ùì¹-Ÿìüë/]ñܲåóää9{áÁŸÚ»œÏ}ì®ÝÝÎû/ùêsÕêc'¾Íí’Qü‘äŸöÞùÔc÷¤<µØ4øoM[O².žáöڝ…‡òö63Ïï)9“:¬Ž¢[èê)¿k eÌRʘåTìÏ~¢»ù9eÏS÷š1æÞþæ#½Ï(Yï몿I¢ÃƒKw¦ôo*9ÓNCóÌ=©¤—óÛ'–ÿ½8ùÛÝO<ñØWòŸ^²jù­‹¿½õœ/?’¶urAîÓÖeëë¬áyS;gûoœ4ywØ}ü¼]öw÷|eÚÌã§Z…ÎÓóýýsâ…½÷¶ºÃÞ}Y‡H^L[ºfzʼn[OÜyâï<ESz£:ô›®ÒoºÊ¯"îûÜö;>÷¹;¶nW’}ôÝï¾ç=ùTíÉë¾ðà÷¯{²¶ËyÇ·üão?÷ãÿ*ùiòË™³¾ø¶¿òµ÷._fŸl;gŸ¼lùÃiû>cÆ +ší[5O~ÑÝv~[wß®Î;K¶S°ÎI¹Q7‡ ÍÿÔ×L½ûúª>¹t°9†×—UÙ|¨ô5¹(·b×u×mt÷îÆ7}ãYçþCïsî¹÷ž¯Þh[~àÐ=c+þ%}†¾aÀ¯5¸éœà$3§øjîÖ3§(ä,}dN±ï`:Øè=2?t›ã­æã»Ì?¹¥oîÌü²uw›ó•Û/,¤zÖÑ—©™›sú\7×(¸Ž{¬;‹y3óÈ›§ÇÒållÜ—
+¿öMi~¹ìÍaXog*k—åœRa²³ÀYèžT¸ÀYé\^Øà\ã~ĹÉýÓÂíÎ÷Ο;ýE·˜wÊ¢Ôq‚X;Á=)RÇpç*±´ó&qCî&÷ãù[;îwv<,>ï>Ýñ­Žuü»Ø/þ=·?7íÒ«¬ôòRY›gÚõ™ÝÎü_zÌùÀþCÏíÎ\mÿìЇuæú's½GÛïØ/Yw:éÕ™wõ2Ä]çî7ÃÍf£™ËüÇk´UÇLÓwµ.>>ß_<¦ÇÊÏììÜ6sŽØ5}ÏÔÞ«¯§PÈ/é+ô,™qŒ¡þyÍ1àA3
+ìo¶Õ©ûÞ8uïkªÙ†'
+·ä¸uÇÝvÜN³}í¸WŽ;|\ÑôŒf_lïG;Ê`ÖQÆ_ÿÈã_ݽ~Ó­ì^ÍÇؽû´'®ýÐ#â¦ë®þÍOÓnóÙ»ÓnãÜsßg¾ö燶å–>vù²ë,ëH¿5×0ÉÌßÒo÷üþ~»¯ÕoŸZ:øƒAçw{îàÿ¢çè´ãf»©ùÜO1Ïý¤üî~kwç®þ[Ž)ö÷¼[ôÆÇ4)52B4ï´©›­Íù-[
+[Š[J[Ê›;·tméÞÒ³¥wKßæþS÷OíkSyÃÿRé´2…r6Üñè#ÛoôÑÛ÷ÛýÉëûÿ5ù»O¼òêw¾óêþös¿¼;ùvòZòkC¨5ÛvØÔ§g7Ýoê˜êÓ;‡§·ôiW÷-öWÄž™F›NoªT›¢÷îÛ×’¨áb¦Q?™e¦7ó4rþ™ß°{÷Q5w–Æ?xè±|éá6=·Õ©Ö½g™úõYCÃù²éme±­{WqOG)_°
+º?¥Êæóo´é…ï¥bôÔ3ÜMïZ¦ãGoÙqÖì3ßv÷çMMž¹aÒ¢â©þ¾ç¿zèIsÃV.wÝ&Þ¸G<gðX¯2Ï8—iƹG§f|qSnàÆÁ›ŽIÇówg¼gz¡»£0pl|BZ¯Þ2Ï0þ›tÀÑÿÖyFkša-H‰ãʥ坋Œh¾­ü¶ÎSŠ§”N)ŸÒYžcͱsN(P>qÒâÅƒ'N>aÖ	³ÎY8÷¸7–n,ßØycWzŽ“/åË¢St‰nÑ#zÅT1ML3r3‹/<máe·,ܺð¶…;î_xŒ_õ»šü¼ÿ~Bã›Ö7Ÿóà%7Ý´ìŽÓö~îßÿá’o®YùìèGn{dø‘Oýäû+ŸÊöØ	'œwÞð™s»OüôMw?=oÞW=ïâwŸ½d~ÏqÛ?rÏ£³²û˜N÷oî=æY4£¡n·Ð#²úì=…m¥²ieÓÓzû»Óg±)ÄŠ,H“?Œö=ùx¦#©úL>%Õâã½T…ûìkìÍÉ
+goøÊW^¼oÛ6÷žä¯n=´ó¦sîº÷·ÚïÌrS™çñ¢ÜRƒ=`2<ã(ÜR²÷ìê4<0P>Ç0‚LÌZÖ¯ÌTªEãƒ_Oé`R_ÛLŠa¶ýXJ±k×È6}ãÛöìgœÞ{ïWïw6¿¹óÑ•Ë÷‹Óë‡á¢-¦yëÍá(Ží¸iNÞÊÛ}–•o˜Éÿ×Òi–c»9ËÌ¥®XÙpe༳ŸlfH›3¾ÿÅDËþÓ3œ+œÍÎçFg«ó	ç~§EÑôäA{š˜–;Þ̲Š…¹9Ïòì“Åɹ¡‚¶´}¦83§Ý3òÃ…¬ì‹ÅŹ%…•ÖJ{µX»Ü]•_ZØdm´7‹Í¹Mî‡ò7X7Ø7‰›Œrݘßaí°ïtîŸÊ}ʽ3ÿ ûùü…¯^).¼3Í84§cóÞñMûýöû¿™¼ï@néÁóÄ£oîlö‘Lx¦:í_
+ŸéžŸw‹¥bîüRQœ_*—œóm§\.åû:
+®i¿B¡#mºNSÚ4]g£d¤;oš¯\è,—Š…¼kf¤¶á®¬Ï~¢ï¼÷¦Iæ÷6³Ìg?QÎ2mYûì':M®ôëÞ£íû½)¤\Ô”ßÛÄGbö1mñî3Ù™ì[òJg:gºº4\z¯ó^÷üÒ’ÒZg­»²t­¹׺[ÜmםO¹w”ö8{Üï;ω¸3]§(ò¹²[*”‹&t:SÅd3ž^˜^(vηæÛóœbnn¾{lþØŽù…ÅãJsËó:kÂÏù…ZçP·vÎ:7œk¸ÃùáŽáBTŒJQy¸{¸;½8Krïvß“Oǒ¹ÅóJç——[+ì1ç
+1–»Â½"EÇÚâhùòÎñîMÖ&ûZçzñÁÜõæþnɨcKÇ×·7—®._ß¹Íù˜{k÷ÖöÎíâîÜgÜOå?ÕñéÂðâ÷v?`=`ßïÜ/É=â>”¨ã‘Âýwÿ¥óñ•Ü—Ý]ůuïu¾)¾—û®{m³OL·Óíye{Þ»~ñó—~ñó]ÉË/ý뿽dzÇqEº¿¹Sì8x…é#§˜çèZÓGÊöÈ°vÓ”Y®Oä:ÒàælÇ}Ž¹í}¦d©¯X²ÓP.™.Sì3¦QêÈÙ¹‚yÆ>™G¢³ÕAz¸ÿÍ®b:A¾õÔ¥Ÿ›œ¶úÄÿ¨Kü÷Oá§J¹\iZn°t|é9Y:?waÇE¥•¥«íå®îØXúxî#¥OçîÍÝÙñÉÒm¥ì‡rç>×ñ祝¥%‘sÍ3Pž&ÝÁâ´òBq¼;¿xbyN×ÉvMnµÃ/ÖÊC]g
+íÆųÊÃ]§O«s±¸Ð½ qÇ…Š——tw}ÐÞÒõûŽŽGìû;žèúA×+]‡»›¶/:óÌ@²˜'s+’Ø¿”<“<ó’ýÅdýKöB{ané¡W}ÃÞ•œáœåLN®²omr™;¤\Öcß<<ÒQpŠ}VOÚÌ–ÕÓÝ×cõtõuvYièî2ngŸyl]åb¯Uv·‰¯t—÷ôvwu–Šæi-ôäzʽ­Ph6{¹­Ù›s³½Y«“ÛjæXþGO£ûë)*móýyË-ä‹¢kriJWo×¼.¯ëÌÒ–Î麤xIéŠÒ¶®­]·wõ—,S	󤕻Ë=SìA§7×ëN)
+”:§uOëY`g”wNnŽ»°pBq~é¸òqºNì>±gN_`ØÒs†rCnXòË~gØUë®õõÕ­a{ØùažÀF1.Þuf÷™=Ã}çYï¶ßíœ/–ä–˜ûs¾¹?/4Oáùw_ܳ¤o¥½ÒYUZݽºgißæ»?Øs“õ'ÅÊ7tÞÔuS÷M=Ÿ.n/oKû®žûË÷w>ÒýHÏ}?è{¥ïpߘ¹—n·}’íu:Ínf½œÛϹãºÛ×¼ë¼ÊÜ䔌pW}ûCwqãy¹sÞ!Ödº|‘g½lîeÑú³ái…>G8"eØFá!kxÈ-ÛÊÙùRúÚ¬|^Ê“ïm=
+¼Gk>%{ÕÞ¾#o.Þú®h¸‘râñÎéΙn¹ÐS>FL/œT˜SöE­0TNÛ+n¶×HáBqqá²òR{©³R,Í-u—¶”·–/OoæªÓÉ·gϽJ\qè]ÎS¯wž:4–[úàÁ—oPÌO¯å%çíîËÎߧ~¶îvr¦ê½/ìm¾8j¾6j¾2rþ>}iaæ5­í¢¶í6kOsû³½f÷ÿÞM5·óÚ¶öOœ^³­0ÛÇšÛÃfKœD¼³¹=c¶ƒ¹5¿os÷÷.÷ù%ù»;¬ŽS;V˜íÇ
+ï+|ªð_Š'›m}éØÒÒÒ}åj§î*t½Þ}ÞÄ6±MlÛÄ6±MlÛÄ6±MlÛÄ6±MlÛÄ6±MlÛÄ6±Mlÿ‡¶+&¶‰mb›Ø&¶‰mb›Ø&¶‰mb›Ø&¶‰mb›Øþÿ¿YÙê	»ÓUdé?/Xyëë&αÞÛüƵŽþS¶:›±§sÈê³ú­ß÷ÏÌæç´}s¼µÀ:ÁÄÍþ¶æ7‹Í.Í^iùf­Úï=[dÅ–¶N·Î°Î´Î²Î¶Þe¾;ÇúCk‰õnë=Ö¹æè|ëëBë"ëbëSã÷Y—Z9ëGæûœÙÌ•íÿÐáÃæ¿sÒÿšãœùïÿW•ÖÞ²o{KÍÿçÿÞz¸ßÚø-_d÷ÝÊýµµ²µ;7›avñ˜õ­ß»Ï¶ž0ûý­Ý”½‡ýeçIóÛÿý}kÏ?e½ôûvw‡µ!¿ÐúŽÛíùŠ96»ó>ë;­=·)Û݃ٞûáÑÝ°¶5÷—­'Ýk­ÞÿÝ=÷ªµÙüî™ÜJë*¯Ê½f]åü­µ8ýìö[Ï85ëéž»/ûÜñ¼õLú}îçÍòϤ»8ËŸd‹yV`þì±Üëù›­L<%ýœ«XMìûÄ>±OìûÄ>±OìûÄ>±OìûÄ>±OìûÄ>±OìûÄ>±OìûÄ>±OìûÄ>±OìûÄ>±OìûÄ>±OìûÄ>±OìûÿK{ºV ¹–Á9ùŸ¿ðÄãÏ\Ösêo¬ÙÙâ‡o~çî§[ñßtèø®õÅóÛWFüÇI¯!
 endstream
 endobj
-10078 0 obj
-3740
-endobj
-10070 0 obj <<
-/D [10068 0 R /XYZ 100.892 685.529 null]
+10058 0 obj <<
+/D [10056 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5263 0 obj <<
-/D [10068 0 R /XYZ 100.892 660.623 null]
+/D [10056 0 R /XYZ 100.892 660.623 null]
 >> endobj
-9999 0 obj <<
-/D [10068 0 R /XYZ 100.892 643.753 null]
+9987 0 obj <<
+/D [10056 0 R /XYZ 100.892 643.753 null]
 >> endobj
-10067 0 obj <<
+10055 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R >>
-/XObject << /Im55 9982 0 R >>
+/XObject << /Im55 9970 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10081 0 obj <<
+10069 0 obj <<
 /Length 309       
 /Filter /FlateDecode
 >>
@@ -54618,20 +58324,20 @@
 û˘v
 endstream
 endobj
-10080 0 obj <<
+10068 0 obj <<
 /Type /Page
-/Contents 10081 0 R
-/Resources 10079 0 R
+/Contents 10069 0 R
+/Resources 10067 0 R
 /MediaBox [0 0 612 792]
-/Parent 10083 0 R
+/Parent 10071 0 R
 >> endobj
-10056 0 obj <<
+10044 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 780
 /Height 1135
 /BitsPerComponent 8
-/ColorSpace [/Indexed /DeviceRGB 31 10084 0 R]
+/ColorSpace [/Indexed /DeviceRGB 31 10072 0 R]
 /Length 115086
 /Filter /FlateDecode
 /DecodeParms << /Colors 1 /Columns 780 /BitsPerComponent 8 /Predictor 10 >>
@@ -55555,7 +59261,7 @@
 ùE‰û€½3H a ¥B¤¼l•âÿ¹•î#öЄ<  ™Cn®þ­î>kd,\ã	¯Á1R$·*hÉX3L·eÀšLÁ¤W{4ÝÊÓþ™€Ã'êdÅ ”…v(Ä+€F3Ã(ä}Ød3‰:f!AôÞ7)›ê  10á"
 endstream
 endobj
-10084 0 obj <<
+10072 0 obj <<
 /Length 107       
 /Filter /FlateDecode
 >>
@@ -55563,21 +59269,21 @@
 xÚ` ŸÿFFFÌÌÌšššÂÂÂõõõ666»»»úúú%%%ñññ³³³«««ééé“““íííýýý¢¢¢ŠŠŠ[[[ÕÕÕ‚‚‚ssskkk{{{bbbÚÚÚáááRRRååå   ÿÿÿ¡ò;P
 endstream
 endobj
-10082 0 obj <<
-/D [10080 0 R /XYZ 151.701 685.529 null]
+10070 0 obj <<
+/D [10068 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5264 0 obj <<
-/D [10080 0 R /XYZ 151.701 655.937 null]
+/D [10068 0 R /XYZ 151.701 655.937 null]
 >> endobj
-10066 0 obj <<
-/D [10080 0 R /XYZ 151.701 639.067 null]
+10054 0 obj <<
+/D [10068 0 R /XYZ 151.701 639.067 null]
 >> endobj
-10079 0 obj <<
+10067 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R >>
-/XObject << /Im56 10056 0 R >>
+/XObject << /Im56 10044 0 R >>
 /ProcSet [ /PDF /Text /ImageC /ImageI ]
 >> endobj
-10088 0 obj <<
+10076 0 obj <<
 /Length 1460      
 /Filter /FlateDecode
 >>
@@ -55598,47 +59304,47 @@
 #Àú[¸)ð`°OªÍ$²‹š&º9¯×âMÍQ(|8$Ž|î¡åP®vFxÒeùZcÎÜ©_èÂGÌݦîxo«ñø—+¢gV€c°i˜&i'Ÿ‚?´ Æ‘j
 endstream
 endobj
-10087 0 obj <<
+10075 0 obj <<
 /Type /Page
-/Contents 10088 0 R
-/Resources 10086 0 R
+/Contents 10076 0 R
+/Resources 10074 0 R
 /MediaBox [0 0 612 792]
-/Parent 10083 0 R
-/Annots [ 10085 0 R ]
+/Parent 10071 0 R
+/Annots [ 10073 0 R ]
 >> endobj
-10085 0 obj <<
+10073 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [256.714 196.6 331.888 208.29]
 /Subtype /Link
 /A << /S /GoTo /D (vfsrecyc) >>
 >> endobj
-10089 0 obj <<
-/D [10087 0 R /XYZ 100.892 685.529 null]
+10077 0 obj <<
+/D [10075 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2378 0 obj <<
-/D [10087 0 R /XYZ 100.892 660.623 null]
+/D [10075 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3849 0 obj <<
-/D [10087 0 R /XYZ 100.892 499.255 null]
+/D [10075 0 R /XYZ 100.892 499.255 null]
 >> endobj
 2382 0 obj <<
-/D [10087 0 R /XYZ 100.892 499.255 null]
+/D [10075 0 R /XYZ 100.892 499.255 null]
 >> endobj
-10090 0 obj <<
-/D [10087 0 R /XYZ 100.892 466.524 null]
+10078 0 obj <<
+/D [10075 0 R /XYZ 100.892 466.524 null]
 >> endobj
 2386 0 obj <<
-/D [10087 0 R /XYZ 100.892 362.296 null]
+/D [10075 0 R /XYZ 100.892 362.296 null]
 >> endobj
-10091 0 obj <<
-/D [10087 0 R /XYZ 100.892 329.565 null]
+10079 0 obj <<
+/D [10075 0 R /XYZ 100.892 329.565 null]
 >> endobj
-10086 0 obj <<
+10074 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10096 0 obj <<
+10084 0 obj <<
 /Length 2353      
 /Filter /FlateDecode
 >>
@@ -55659,104 +59365,104 @@
 t˜hð]?ßvüÐÎS±út0½þ^8öB€%¼:ð!¾˜ÉGSŸ—œœ/ȇÜv`+vV+Ëz³)–íݪlºäMÎëØØÉ9™tƒ½iî–Û"o‹»m±öÓósá½]Ž-#X>ÿ9S
 endstream
 endobj
-10095 0 obj <<
+10083 0 obj <<
 /Type /Page
-/Contents 10096 0 R
-/Resources 10094 0 R
+/Contents 10084 0 R
+/Resources 10082 0 R
 /MediaBox [0 0 612 792]
-/Parent 10083 0 R
-/Annots [ 10093 0 R ]
+/Parent 10071 0 R
+/Annots [ 10081 0 R ]
 >> endobj
-10093 0 obj <<
+10081 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.675 461.031 434.849 472.72]
 /Subtype /Link
 /A << /S /GoTo /D (multimodule) >>
 >> endobj
-10097 0 obj <<
-/D [10095 0 R /XYZ 151.701 685.529 null]
+10085 0 obj <<
+/D [10083 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5098 0 obj <<
-/D [10095 0 R /XYZ 151.701 660.623 null]
+/D [10083 0 R /XYZ 151.701 660.623 null]
 >> endobj
-10092 0 obj <<
-/D [10095 0 R /XYZ 151.701 643.753 null]
+10080 0 obj <<
+/D [10083 0 R /XYZ 151.701 643.753 null]
 >> endobj
-10098 0 obj <<
-/D [10095 0 R /XYZ 151.701 637.775 null]
+10086 0 obj <<
+/D [10083 0 R /XYZ 151.701 637.775 null]
 >> endobj
-10099 0 obj <<
-/D [10095 0 R /XYZ 151.701 644.051 null]
+10087 0 obj <<
+/D [10083 0 R /XYZ 151.701 644.051 null]
 >> endobj
-10100 0 obj <<
-/D [10095 0 R /XYZ 151.701 632.096 null]
+10088 0 obj <<
+/D [10083 0 R /XYZ 151.701 632.096 null]
 >> endobj
-10101 0 obj <<
-/D [10095 0 R /XYZ 151.701 620.141 null]
+10089 0 obj <<
+/D [10083 0 R /XYZ 151.701 620.141 null]
 >> endobj
-10102 0 obj <<
-/D [10095 0 R /XYZ 151.701 608.186 null]
+10090 0 obj <<
+/D [10083 0 R /XYZ 151.701 608.186 null]
 >> endobj
-10103 0 obj <<
-/D [10095 0 R /XYZ 151.701 596.231 null]
+10091 0 obj <<
+/D [10083 0 R /XYZ 151.701 596.231 null]
 >> endobj
-10104 0 obj <<
-/D [10095 0 R /XYZ 151.701 584.276 null]
+10092 0 obj <<
+/D [10083 0 R /XYZ 151.701 584.276 null]
 >> endobj
 5099 0 obj <<
-/D [10095 0 R /XYZ 151.701 450.008 null]
+/D [10083 0 R /XYZ 151.701 450.008 null]
 >> endobj
-10105 0 obj <<
-/D [10095 0 R /XYZ 151.701 433.138 null]
+10093 0 obj <<
+/D [10083 0 R /XYZ 151.701 433.138 null]
 >> endobj
-10106 0 obj <<
-/D [10095 0 R /XYZ 151.701 427.161 null]
+10094 0 obj <<
+/D [10083 0 R /XYZ 151.701 427.161 null]
 >> endobj
-10107 0 obj <<
-/D [10095 0 R /XYZ 151.701 433.437 null]
+10095 0 obj <<
+/D [10083 0 R /XYZ 151.701 433.437 null]
 >> endobj
-10108 0 obj <<
-/D [10095 0 R /XYZ 151.701 421.482 null]
+10096 0 obj <<
+/D [10083 0 R /XYZ 151.701 421.482 null]
 >> endobj
-10109 0 obj <<
-/D [10095 0 R /XYZ 151.701 409.527 null]
+10097 0 obj <<
+/D [10083 0 R /XYZ 151.701 409.527 null]
 >> endobj
-10110 0 obj <<
-/D [10095 0 R /XYZ 151.701 397.572 null]
+10098 0 obj <<
+/D [10083 0 R /XYZ 151.701 397.572 null]
 >> endobj
-10111 0 obj <<
-/D [10095 0 R /XYZ 151.701 385.617 null]
+10099 0 obj <<
+/D [10083 0 R /XYZ 151.701 385.617 null]
 >> endobj
-10112 0 obj <<
-/D [10095 0 R /XYZ 151.701 373.661 null]
+10100 0 obj <<
+/D [10083 0 R /XYZ 151.701 373.661 null]
 >> endobj
-10113 0 obj <<
-/D [10095 0 R /XYZ 151.701 349.751 null]
+10101 0 obj <<
+/D [10083 0 R /XYZ 151.701 349.751 null]
 >> endobj
-10114 0 obj <<
-/D [10095 0 R /XYZ 151.701 337.796 null]
+10102 0 obj <<
+/D [10083 0 R /XYZ 151.701 337.796 null]
 >> endobj
-10115 0 obj <<
-/D [10095 0 R /XYZ 151.701 325.841 null]
+10103 0 obj <<
+/D [10083 0 R /XYZ 151.701 325.841 null]
 >> endobj
 2390 0 obj <<
-/D [10095 0 R /XYZ 151.701 269.088 null]
+/D [10083 0 R /XYZ 151.701 269.088 null]
 >> endobj
-10116 0 obj <<
-/D [10095 0 R /XYZ 151.701 242.368 null]
+10104 0 obj <<
+/D [10083 0 R /XYZ 151.701 242.368 null]
 >> endobj
 2394 0 obj <<
-/D [10095 0 R /XYZ 151.701 242.368 null]
+/D [10083 0 R /XYZ 151.701 242.368 null]
 >> endobj
-10117 0 obj <<
-/D [10095 0 R /XYZ 151.701 216.344 null]
+10105 0 obj <<
+/D [10083 0 R /XYZ 151.701 216.344 null]
 >> endobj
-10094 0 obj <<
+10082 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F4 5484 0 R /F53 3738 0 R /F51 3736 0 R /F52 3737 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10120 0 obj <<
+10108 0 obj <<
 /Length 1639      
 /Filter /FlateDecode
 >>
@@ -55772,27 +59478,27 @@
 †+«éW‰+C…ÕPÞÌŸ“27:r’°xƒKH1Ç´¦ë³Au>_óyª¶K˜€#J¯÷Uùâ˜k5P´k&`#åñüòYñTï‹ÈfÓV†J9Ii®ܝWCyw·ß†$’dÀ“‡—³LõÁvà‚àIff†'¼(	â;6ŒdGñH‹€Úª®iýT- ¦(IL"äݪ¹;;`¼°nÑcDà¦xë…)Šj]M™`Co‚C¯›Ó§×OÜðç9Ö²«6ñ/¡™¸Ç|»;~¨lÈÜ‘ŸÁü,¿ì—b0ï´É§ob>à”þÞ¡%TånÒšI^ºmÛôCXO’aÜRä}x‚¾Ý¹Óê%𭫏{/µ0àQ}ú,|@_òpt»E²(_0'd?`€_ ~Ê2ã0e¦3‘™¬¦Ïˆ™nã1‰O4kM–&ã‡. ÊÒøMséÞð¹mó=÷^ºóa`Î1cý^hÅ'*T³‰ÛˆOó\(|·"nÂ<D.³£Â³\ö¿ëzFbç>®Amc_(î'ÿM ÛüÑñw®
 endstream
 endobj
-10119 0 obj <<
+10107 0 obj <<
 /Type /Page
-/Contents 10120 0 R
-/Resources 10118 0 R
+/Contents 10108 0 R
+/Resources 10106 0 R
 /MediaBox [0 0 612 792]
-/Parent 10083 0 R
+/Parent 10071 0 R
 >> endobj
-10121 0 obj <<
-/D [10119 0 R /XYZ 100.892 685.529 null]
+10109 0 obj <<
+/D [10107 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2398 0 obj <<
-/D [10119 0 R /XYZ 100.892 633.707 null]
+/D [10107 0 R /XYZ 100.892 633.707 null]
 >> endobj
-10122 0 obj <<
-/D [10119 0 R /XYZ 100.892 608.017 null]
+10110 0 obj <<
+/D [10107 0 R /XYZ 100.892 608.017 null]
 >> endobj
-10118 0 obj <<
+10106 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F51 3736 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10125 0 obj <<
+10113 0 obj <<
 /Length 1256      
 /Filter /FlateDecode
 >>
@@ -55806,21 +59512,21 @@
 ¢Ó.°@ÿg¾^}ÙxˆÀ樆æ»kH‰tqødýr¼øt
 endstream
 endobj
-10124 0 obj <<
+10112 0 obj <<
 /Type /Page
-/Contents 10125 0 R
-/Resources 10123 0 R
+/Contents 10113 0 R
+/Resources 10111 0 R
 /MediaBox [0 0 612 792]
-/Parent 10083 0 R
+/Parent 10071 0 R
 >> endobj
-10126 0 obj <<
-/D [10124 0 R /XYZ 151.701 685.529 null]
+10114 0 obj <<
+/D [10112 0 R /XYZ 151.701 685.529 null]
 >> endobj
-10123 0 obj <<
+10111 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F85 5513 0 R /F52 3737 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10130 0 obj <<
+10118 0 obj <<
 /Length 2031      
 /Filter /FlateDecode
 >>
@@ -55848,54 +59554,54 @@
 =²/Ýb yÆݪ{u?u7…Þ-æ™RA¼¢H¨3—ÞãËsl΢à<G˜©‡+”Ú\vpålv8º/O¯ËJÉzφ‘~¸‰ÈÀÇ· !bÜͬK‹>ÚoÀ÷F8‹Q'	pœØ8²yfWõnšéGfb'/D!=æ	ôÙÅûfQ!jzçÑÿF-¯':-Wï Â‚(|oøášpûk‚fÛø§áÜpEnù"õÀ6 äG´ÛȪ®b瘿7ß\Àˆè²_ˆ©{ˆW^BÐÿ´ƒ¢&~±6apÒ¦àNíº¢-q›zôãns„>Æ&˜Ùu4PŒ´?ji‡ë¶Â:ûÈwVÕàj'ÝöᇑdC?róð†¬ñÿPÂJ¥
 endstream
 endobj
-10129 0 obj <<
+10117 0 obj <<
 /Type /Page
-/Contents 10130 0 R
-/Resources 10128 0 R
+/Contents 10118 0 R
+/Resources 10116 0 R
 /MediaBox [0 0 612 792]
-/Parent 10083 0 R
-/Annots [ 10127 0 R 10133 0 R ]
+/Parent 10071 0 R
+/Annots [ 10115 0 R 10121 0 R ]
 >> endobj
-10127 0 obj <<
+10115 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.49 470.068 460.543 481.757]
 /Subtype /Link
 /A << /S /GoTo /D (xtdaudit) >>
 >> endobj
-10133 0 obj <<
+10121 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 458.64 138.858 468.208]
 /Subtype /Link
 /A << /S /GoTo /D (xtdaudit) >>
 >> endobj
-10131 0 obj <<
-/D [10129 0 R /XYZ 100.892 685.529 null]
+10119 0 obj <<
+/D [10117 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2402 0 obj <<
-/D [10129 0 R /XYZ 100.892 568.073 null]
+/D [10117 0 R /XYZ 100.892 568.073 null]
 >> endobj
-10132 0 obj <<
-/D [10129 0 R /XYZ 100.892 541.719 null]
+10120 0 obj <<
+/D [10117 0 R /XYZ 100.892 541.719 null]
 >> endobj
 5365 0 obj <<
-/D [10129 0 R /XYZ 100.892 447.287 null]
+/D [10117 0 R /XYZ 100.892 447.287 null]
 >> endobj
-10134 0 obj <<
-/D [10129 0 R /XYZ 100.892 430.417 null]
+10122 0 obj <<
+/D [10117 0 R /XYZ 100.892 430.417 null]
 >> endobj
 2406 0 obj <<
-/D [10129 0 R /XYZ 100.892 338.863 null]
+/D [10117 0 R /XYZ 100.892 338.863 null]
 >> endobj
-10135 0 obj <<
-/D [10129 0 R /XYZ 100.892 310.378 null]
+10123 0 obj <<
+/D [10117 0 R /XYZ 100.892 310.378 null]
 >> endobj
-10128 0 obj <<
+10116 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F51 3736 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10138 0 obj <<
+10126 0 obj <<
 /Length 2143      
 /Filter /FlateDecode
 >>
@@ -55925,33 +59631,33 @@
 .¶_Í6–l¾è&P at TÔÜà ÿž¿²À
 endstream
 endobj
-10137 0 obj <<
+10125 0 obj <<
 /Type /Page
-/Contents 10138 0 R
-/Resources 10136 0 R
+/Contents 10126 0 R
+/Resources 10124 0 R
 /MediaBox [0 0 612 792]
-/Parent 10142 0 R
+/Parent 10130 0 R
 >> endobj
-10139 0 obj <<
-/D [10137 0 R /XYZ 151.701 685.529 null]
+10127 0 obj <<
+/D [10125 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2410 0 obj <<
-/D [10137 0 R /XYZ 151.701 569.934 null]
+/D [10125 0 R /XYZ 151.701 569.934 null]
 >> endobj
-10140 0 obj <<
-/D [10137 0 R /XYZ 151.701 539.909 null]
+10128 0 obj <<
+/D [10125 0 R /XYZ 151.701 539.909 null]
 >> endobj
 2414 0 obj <<
-/D [10137 0 R /XYZ 151.701 446.833 null]
+/D [10125 0 R /XYZ 151.701 446.833 null]
 >> endobj
-10141 0 obj <<
-/D [10137 0 R /XYZ 151.701 418.929 null]
+10129 0 obj <<
+/D [10125 0 R /XYZ 151.701 418.929 null]
 >> endobj
-10136 0 obj <<
+10124 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F17 3698 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10145 0 obj <<
+10133 0 obj <<
 /Length 1804      
 /Filter /FlateDecode
 >>
@@ -55974,21 +59680,21 @@
 rüø'ÅÌj=©¢ùk½JÑmyþoØÐüÑm{
 endstream
 endobj
-10144 0 obj <<
+10132 0 obj <<
 /Type /Page
-/Contents 10145 0 R
-/Resources 10143 0 R
+/Contents 10133 0 R
+/Resources 10131 0 R
 /MediaBox [0 0 612 792]
-/Parent 10142 0 R
+/Parent 10130 0 R
 >> endobj
-10146 0 obj <<
-/D [10144 0 R /XYZ 100.892 685.529 null]
+10134 0 obj <<
+/D [10132 0 R /XYZ 100.892 685.529 null]
 >> endobj
-10143 0 obj <<
+10131 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F85 5513 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10151 0 obj <<
+10139 0 obj <<
 /Length 1966      
 /Filter /FlateDecode
 >>
@@ -56008,53 +59714,53 @@
 FÌz}@Äzê‚EÊ5l›ªÍŠ~m£ø Ñúlá30׈J[–í˜<ÆXÝï~?Qf¡;Oa¾=NÇ'ën`ø€- µÕâ™þ>ô¡€ãuû„UÉÖ}Þ±/)§a´°òÈ{úxú/&{ìŽ
 endstream
 endobj
-10150 0 obj <<
+10138 0 obj <<
 /Type /Page
-/Contents 10151 0 R
-/Resources 10149 0 R
+/Contents 10139 0 R
+/Resources 10137 0 R
 /MediaBox [0 0 612 792]
-/Parent 10142 0 R
-/Annots [ 10147 0 R 10155 0 R 10148 0 R ]
+/Parent 10130 0 R
+/Annots [ 10135 0 R 10143 0 R 10136 0 R ]
 >> endobj
-10147 0 obj <<
+10135 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 140.174 511.352 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.microsoft.com/windowsserver2003/downloads/shadowcopyclient.mspx)>>
 >> endobj
-10155 0 obj <<
+10143 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [150.705 127.92 171.527 138.141]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.microsoft.com/windowsserver2003/downloads/shadowcopyclient.mspx)>>
 >> endobj
-10148 0 obj <<
+10136 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 501.256 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.microsoft.com/windowsserver2003/techinfo/overview/scr.mspx)>>
 >> endobj
-10152 0 obj <<
-/D [10150 0 R /XYZ 151.701 685.529 null]
+10140 0 obj <<
+/D [10138 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2418 0 obj <<
-/D [10150 0 R /XYZ 151.701 660.623 null]
+/D [10138 0 R /XYZ 151.701 660.623 null]
 >> endobj
-10153 0 obj <<
-/D [10150 0 R /XYZ 151.701 644.027 null]
+10141 0 obj <<
+/D [10138 0 R /XYZ 151.701 644.027 null]
 >> endobj
 2422 0 obj <<
-/D [10150 0 R /XYZ 151.701 503.999 null]
+/D [10138 0 R /XYZ 151.701 503.999 null]
 >> endobj
-10154 0 obj <<
-/D [10150 0 R /XYZ 151.701 477.356 null]
+10142 0 obj <<
+/D [10138 0 R /XYZ 151.701 477.356 null]
 >> endobj
-10149 0 obj <<
+10137 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F51 3736 0 R /F53 3738 0 R /F88 5678 0 R /F89 6121 0 R /F72 5679 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
-/XObject << /Im3 6520 0 R >>
+/XObject << /Im3 6519 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10165 0 obj <<
+10153 0 obj <<
 /Length 2354      
 /Filter /FlateDecode
 >>
@@ -56083,77 +59789,77 @@
 þ¨ >¶q¢rÝò÷RKx.ºÊ>ÚL*=eß|ö»2ßà{ùöbeùîýÝ<ݼ½*‡‘Däu9 „Ef*FüÍüŠù–a,ŠÕŽœ+wO®¬÷®9@^m—ÐôŸáwÕØæyY"~€ß]•ÊŠevÝÙè»}:3ùŠy. Â€*¯JÃD(Õ¯HŠì=‘2ývI"§æ…<“ä[2€¥/|_Õ\7T×â¡FÜóÈ®ÿL\yT
 endstream
 endobj
-10164 0 obj <<
+10152 0 obj <<
 /Type /Page
-/Contents 10165 0 R
-/Resources 10163 0 R
+/Contents 10153 0 R
+/Resources 10151 0 R
 /MediaBox [0 0 612 792]
-/Parent 10142 0 R
-/Annots [ 10162 0 R 10156 0 R 10157 0 R 10158 0 R 10159 0 R 10160 0 R 10161 0 R ]
+/Parent 10130 0 R
+/Annots [ 10150 0 R 10144 0 R 10145 0 R 10146 0 R 10147 0 R 10148 0 R 10149 0 R ]
 >> endobj
-10162 0 obj <<
+10150 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [326.306 207.727 358.087 219.416]
 /Subtype /Link
 /A << /S /GoTo /D (introduction) >>
 >> endobj
-10156 0 obj <<
+10144 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 171.756 351.593 184.707]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.sistina.com/products_lvm_download.htm)>>
 >> endobj
-10157 0 obj <<
+10145 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 160.797 257.447 173.748]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://evms.sourceforge.net/)>>
 >> endobj
-10158 0 obj <<
+10146 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 149.838 276.775 162.789]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://tldp.org/HOWTO/LVM-HOWTO/)>>
 >> endobj
-10159 0 obj <<
+10147 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 138.879 399.662 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www-106.ibm.com/developerworks/linux/library/l-lvm/)>>
 >> endobj
-10160 0 obj <<
+10148 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 127.92 394.955 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www-106.ibm.com/developerworks/library/l-lvm2.html)>>
 >> endobj
-10161 0 obj <<
+10149 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 337.969 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.debian.org/devel/debian-installer/)>>
 >> endobj
-10166 0 obj <<
-/D [10164 0 R /XYZ 100.892 685.529 null]
+10154 0 obj <<
+/D [10152 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2426 0 obj <<
-/D [10164 0 R /XYZ 100.892 424.84 null]
+/D [10152 0 R /XYZ 100.892 424.84 null]
 >> endobj
-10167 0 obj <<
-/D [10164 0 R /XYZ 100.892 397.06 null]
+10155 0 obj <<
+/D [10152 0 R /XYZ 100.892 397.06 null]
 >> endobj
-10168 0 obj <<
-/D [10164 0 R /XYZ 100.892 293.64 null]
+10156 0 obj <<
+/D [10152 0 R /XYZ 100.892 293.64 null]
 >> endobj
-10169 0 obj <<
-/D [10164 0 R /XYZ 100.892 230.858 null]
+10157 0 obj <<
+/D [10152 0 R /XYZ 100.892 230.858 null]
 >> endobj
-10163 0 obj <<
+10151 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F51 3736 0 R /F29 5413 0 R /F17 3698 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10172 0 obj <<
+10160 0 obj <<
 /Length 2027      
 /Filter /FlateDecode
 >>
@@ -56178,24 +59884,24 @@
 éÍ6¦°eÌõ0R‚_ÿ`uÚÐtˆ…|SÊaWi<úuë¨XY4ÿ‰A ²{óRš+Â8VCÿ¬57$j›[ø™‡#M­\Áy+“ ŠÞå-ùçÿ8†ÉâM²!s8	N T›ul	N‚ œÒT	%AU%’«j¶]UÃ4	òxöMåioÃÇ’—ýwαýg%Ä„•¿o†Ëퟅa®ð…'CÀÌõ݃4Qó…ÿ€†yH“¬P¹ÌÐc<‹6bzé·‚vÿeâh0
 endstream
 endobj
-10171 0 obj <<
+10159 0 obj <<
 /Type /Page
-/Contents 10172 0 R
-/Resources 10170 0 R
+/Contents 10160 0 R
+/Resources 10158 0 R
 /MediaBox [0 0 612 792]
-/Parent 10142 0 R
+/Parent 10130 0 R
 >> endobj
-10173 0 obj <<
-/D [10171 0 R /XYZ 151.701 685.529 null]
+10161 0 obj <<
+/D [10159 0 R /XYZ 151.701 685.529 null]
 >> endobj
-10174 0 obj <<
-/D [10171 0 R /XYZ 151.701 633.993 null]
+10162 0 obj <<
+/D [10159 0 R /XYZ 151.701 633.993 null]
 >> endobj
-10170 0 obj <<
+10158 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F51 3736 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10177 0 obj <<
+10165 0 obj <<
 /Length 2317      
 /Filter /FlateDecode
 >>
@@ -56222,27 +59928,27 @@
 LÐLãÖ‹`üôÈ7™ÄKFW_¿ å>>ýÐ#ÔGï/Pk!6—Šß˜ Dû"ù<Ÿ×ýoí(ˆ¡J¬ˆ¼ÜÔ—nE\÷ü"çîKV]äO’Hà™û˜v¡pÀÙit^Ħqv™†T¿"•çÖà†ÐÁȧê1«õ_püÿ u
 endstream
 endobj
-10176 0 obj <<
+10164 0 obj <<
 /Type /Page
-/Contents 10177 0 R
-/Resources 10175 0 R
+/Contents 10165 0 R
+/Resources 10163 0 R
 /MediaBox [0 0 612 792]
-/Parent 10142 0 R
+/Parent 10130 0 R
 >> endobj
-10178 0 obj <<
-/D [10176 0 R /XYZ 100.892 685.529 null]
+10166 0 obj <<
+/D [10164 0 R /XYZ 100.892 685.529 null]
 >> endobj
-10179 0 obj <<
-/D [10176 0 R /XYZ 100.892 284.424 null]
+10167 0 obj <<
+/D [10164 0 R /XYZ 100.892 284.424 null]
 >> endobj
-10180 0 obj <<
-/D [10176 0 R /XYZ 100.892 208.549 null]
+10168 0 obj <<
+/D [10164 0 R /XYZ 100.892 208.549 null]
 >> endobj
-10175 0 obj <<
+10163 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10184 0 obj <<
+10172 0 obj <<
 /Length 2279      
 /Filter /FlateDecode
 >>
@@ -56269,64 +59975,64 @@
 ‰¤tàMñ7dç"_,«Ò¨jò¬f/ðÒ’ð§+ªSww ›àôÜÈ,­©1A=WúÅÝ´–.†*hnsqÐ!¯¡,DnYFCyCué×·Dî¨Ù‹wUv›—7Þ§þ‚.*«ê¼,êm6&?ënÚÈf‡1\å…¿¦®íuá3æÁD+WàL÷Âd¸û¦hn.pÚ†E\v\ˆá[eÚy$òÌÿu爷—ÃsaâÖuÏšfùíh´Z­Ø¢urlR.FŽÝU]gÕmVÁ59‚n1/ÓiíßèI¹¼sÆLoh‰ϤÑ-o|Ù¢^~Ý!¦C;„ñàZjþöدŠ? ‡¿ái
 endstream
 endobj
-10183 0 obj <<
+10171 0 obj <<
 /Type /Page
-/Contents 10184 0 R
-/Resources 10182 0 R
+/Contents 10172 0 R
+/Resources 10170 0 R
 /MediaBox [0 0 612 792]
-/Parent 10196 0 R
-/Annots [ 10181 0 R 10195 0 R ]
+/Parent 10184 0 R
+/Annots [ 10169 0 R 10183 0 R ]
 >> endobj
-10181 0 obj <<
+10169 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 129.215 511.352 140.871]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.microsoft.com/windowsserver2003/downloads/shadowcopyclient.mspx)>>
 >> endobj
-10195 0 obj <<
+10183 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [150.705 116.961 171.527 127.182]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.microsoft.com/windowsserver2003/downloads/shadowcopyclient.mspx)>>
 >> endobj
-10185 0 obj <<
-/D [10183 0 R /XYZ 151.701 685.529 null]
+10173 0 obj <<
+/D [10171 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5100 0 obj <<
-/D [10183 0 R /XYZ 151.701 660.623 null]
+/D [10171 0 R /XYZ 151.701 660.623 null]
 >> endobj
-10186 0 obj <<
-/D [10183 0 R /XYZ 151.701 643.753 null]
+10174 0 obj <<
+/D [10171 0 R /XYZ 151.701 643.753 null]
 >> endobj
-10187 0 obj <<
-/D [10183 0 R /XYZ 151.701 637.775 null]
+10175 0 obj <<
+/D [10171 0 R /XYZ 151.701 637.775 null]
 >> endobj
-10188 0 obj <<
-/D [10183 0 R /XYZ 151.701 644.051 null]
+10176 0 obj <<
+/D [10171 0 R /XYZ 151.701 644.051 null]
 >> endobj
-10189 0 obj <<
-/D [10183 0 R /XYZ 151.701 632.096 null]
+10177 0 obj <<
+/D [10171 0 R /XYZ 151.701 632.096 null]
 >> endobj
-10190 0 obj <<
-/D [10183 0 R /XYZ 151.701 620.141 null]
+10178 0 obj <<
+/D [10171 0 R /XYZ 151.701 620.141 null]
 >> endobj
-10191 0 obj <<
-/D [10183 0 R /XYZ 151.701 608.186 null]
+10179 0 obj <<
+/D [10171 0 R /XYZ 151.701 608.186 null]
 >> endobj
-10192 0 obj <<
-/D [10183 0 R /XYZ 151.701 596.231 null]
+10180 0 obj <<
+/D [10171 0 R /XYZ 151.701 596.231 null]
 >> endobj
-10193 0 obj <<
-/D [10183 0 R /XYZ 151.701 584.276 null]
+10181 0 obj <<
+/D [10171 0 R /XYZ 151.701 584.276 null]
 >> endobj
-10194 0 obj <<
-/D [10183 0 R /XYZ 151.701 272.074 null]
+10182 0 obj <<
+/D [10171 0 R /XYZ 151.701 272.074 null]
 >> endobj
-10182 0 obj <<
+10170 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F4 5484 0 R /F53 3738 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10202 0 obj <<
+10190 0 obj <<
 /Length 1830      
 /Filter /FlateDecode
 >>
@@ -56346,58 +60052,58 @@
 	ñ/ȸ¯É
 endstream
 endobj
-10201 0 obj <<
+10189 0 obj <<
 /Type /Page
-/Contents 10202 0 R
-/Resources 10200 0 R
+/Contents 10190 0 R
+/Resources 10188 0 R
 /MediaBox [0 0 612 792]
-/Parent 10196 0 R
-/Annots [ 10197 0 R 10198 0 R 10199 0 R ]
+/Parent 10184 0 R
+/Annots [ 10185 0 R 10186 0 R 10187 0 R ]
 >> endobj
-10197 0 obj <<
+10185 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 138.879 393.959 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.css.tayloru.edu/~elorimer/databasefs/index.php)>>
 >> endobj
-10198 0 obj <<
+10186 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 127.92 271.569 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(mailto:elorimer at css.tayloru.edu)>>
 >> endobj
-10199 0 obj <<
+10187 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 375.628 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.openantivirus.org/projects.php#samba-vscan)>>
 >> endobj
-10203 0 obj <<
-/D [10201 0 R /XYZ 100.892 685.529 null]
+10191 0 obj <<
+/D [10189 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2430 0 obj <<
-/D [10201 0 R /XYZ 100.892 660.623 null]
+/D [10189 0 R /XYZ 100.892 660.623 null]
 >> endobj
-10204 0 obj <<
-/D [10201 0 R /XYZ 100.892 641.209 null]
+10192 0 obj <<
+/D [10189 0 R /XYZ 100.892 641.209 null]
 >> endobj
 2434 0 obj <<
-/D [10201 0 R /XYZ 100.892 532.296 null]
+/D [10189 0 R /XYZ 100.892 532.296 null]
 >> endobj
-10205 0 obj <<
-/D [10201 0 R /XYZ 100.892 505.57 null]
+10193 0 obj <<
+/D [10189 0 R /XYZ 100.892 505.57 null]
 >> endobj
 2438 0 obj <<
-/D [10201 0 R /XYZ 100.892 268.939 null]
+/D [10189 0 R /XYZ 100.892 268.939 null]
 >> endobj
-10206 0 obj <<
-/D [10201 0 R /XYZ 100.892 242.213 null]
+10194 0 obj <<
+/D [10189 0 R /XYZ 100.892 242.213 null]
 >> endobj
-10200 0 obj <<
+10188 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10209 0 obj <<
+10197 0 obj <<
 /Length 1107      
 /Filter /FlateDecode
 >>
@@ -56410,27 +60116,27 @@
 pÛ˜Œâ[ õÓ­“uÕÖÐåfsƒÕ©çwãÊWðª¯`	l“¾ÑÁÌ8mÇl°º«ff¦zª³ù°*óªÎ-jÜZ…Ã×]#ìì…s3X̃Øc8÷ Ì @¡Áz¢€Æ5“¹€1æÐÕÉfŒ¹óž¹[•v7ÎÕÂ'ã¢)Qo¥#Øîzƒì²9¶‡&Êïó+¨¨]>QN@Ù›x›þ´@¤h»žo¯ÌŠÆþèÝD’'08çË|D2Œ>¼ç»îFñårt0Å|¹ i/À+½ÁâTi*›æü(›y¥з’–o¬$d}|îîP@¸+~j#Oà¶2ûV°J_)™mÆJÄïïU³?éç2\¯´A=‚ptÂËzc>[—9ÅfþÊ®¨x!Ç/ñO#?ï:ÌïN–z/«+£àüèúy‚ÆlŽ—)ä¯fóÿ§J7§äÒrù !ÔµGõœº”cüNÿ®ûþ´Õi7È
 endstream
 endobj
-10208 0 obj <<
+10196 0 obj <<
 /Type /Page
-/Contents 10209 0 R
-/Resources 10207 0 R
+/Contents 10197 0 R
+/Resources 10195 0 R
 /MediaBox [0 0 612 792]
-/Parent 10196 0 R
+/Parent 10184 0 R
 >> endobj
-10210 0 obj <<
-/D [10208 0 R /XYZ 151.701 685.529 null]
+10198 0 obj <<
+/D [10196 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2442 0 obj <<
-/D [10208 0 R /XYZ 151.701 660.623 null]
+/D [10196 0 R /XYZ 151.701 660.623 null]
 >> endobj
-10211 0 obj <<
-/D [10208 0 R /XYZ 151.701 644.027 null]
+10199 0 obj <<
+/D [10196 0 R /XYZ 151.701 644.027 null]
 >> endobj
-10207 0 obj <<
+10195 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10214 0 obj <<
+10202 0 obj <<
 /Length 975       
 /Filter /FlateDecode
 >>
@@ -56449,21 +60155,21 @@
 õ¹‚wí÷0æ¢léSï&0‡w½ØªeJ,À*}¾˜µì6Ÿ¨^¾¾€s,áVg‘à\ °ì³Þ¿Çýhžùß æ¹b
 endstream
 endobj
-10213 0 obj <<
+10201 0 obj <<
 /Type /Page
-/Contents 10214 0 R
-/Resources 10212 0 R
+/Contents 10202 0 R
+/Resources 10200 0 R
 /MediaBox [0 0 612 792]
-/Parent 10196 0 R
+/Parent 10184 0 R
 >> endobj
-10215 0 obj <<
-/D [10213 0 R /XYZ 100.892 685.529 null]
+10203 0 obj <<
+/D [10201 0 R /XYZ 100.892 685.529 null]
 >> endobj
-10212 0 obj <<
+10200 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10218 0 obj <<
+10206 0 obj <<
 /Length 891       
 /Filter /FlateDecode
 >>
@@ -56476,21 +60182,21 @@
 ÅȨÆòŒ“_Ó‚‹lp“ÞæµfiÀ2\~ú€;ƒsNzÈ{ŽÇðz4Ž‹Ó¿S·^e7@5¢È<WuìʱÁÂñs[<å.¸À»üç­=Ÿð3ð?žCò
 endstream
 endobj
-10217 0 obj <<
+10205 0 obj <<
 /Type /Page
-/Contents 10218 0 R
-/Resources 10216 0 R
+/Contents 10206 0 R
+/Resources 10204 0 R
 /MediaBox [0 0 612 792]
-/Parent 10196 0 R
+/Parent 10184 0 R
 >> endobj
-10219 0 obj <<
-/D [10217 0 R /XYZ 151.701 685.529 null]
+10207 0 obj <<
+/D [10205 0 R /XYZ 151.701 685.529 null]
 >> endobj
-10216 0 obj <<
+10204 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10222 0 obj <<
+10210 0 obj <<
 /Length 1459      
 /Filter /FlateDecode
 >>
@@ -56507,33 +60213,33 @@
 °­§BÍ7N,~ŽèOœÑ5O|ñ’ æy;ª™í︺WŠ­:JWA7›Ò·oÜËnz%‰9ш,Œ³Ø6¡ÏBžù‹MÏىĉžÎuRœqjU=·‚TÂÙM–²qï&j€{-É⯩‹+손4„”ZùÝßMtGd¾˜0z>´ûÈ0Øæg‚Ý ¯9d)ðÚwÑxµ¤!üú7â«ñoÒÆH­»Áp?åæö:: ÁßNW–f|zº€fß›ög7gö¢ÉQ±Ý%$à)é®lÆŠnOP9Î,æ,Z÷lñ¤{P±¸zø*H_Ÿ‹rvÛÃüîU9˜þñç—eø¯XZy\ü0mN yzàplÓŒZŸa&ž=Cš^ˆq¢ýH¤ B¥örlš< lIzÖhÓFQ°Îœ½` ìÕgÁçYÅð/"ÍàªLbø¯âÿrâÙ&ø»õJŒ
 endstream
 endobj
-10221 0 obj <<
+10209 0 obj <<
 /Type /Page
-/Contents 10222 0 R
-/Resources 10220 0 R
+/Contents 10210 0 R
+/Resources 10208 0 R
 /MediaBox [0 0 612 792]
-/Parent 10196 0 R
+/Parent 10184 0 R
 >> endobj
-10223 0 obj <<
-/D [10221 0 R /XYZ 100.892 685.529 null]
+10211 0 obj <<
+/D [10209 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2446 0 obj <<
-/D [10221 0 R /XYZ 100.892 660.623 null]
+/D [10209 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3850 0 obj <<
-/D [10221 0 R /XYZ 100.892 476.812 null]
+/D [10209 0 R /XYZ 100.892 476.812 null]
 >> endobj
 2450 0 obj <<
-/D [10221 0 R /XYZ 100.892 476.812 null]
+/D [10209 0 R /XYZ 100.892 476.812 null]
 >> endobj
-10224 0 obj <<
-/D [10221 0 R /XYZ 100.892 447.804 null]
+10212 0 obj <<
+/D [10209 0 R /XYZ 100.892 447.804 null]
 >> endobj
-10220 0 obj <<
+10208 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F51 3736 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10228 0 obj <<
+10216 0 obj <<
 /Length 1329      
 /Filter /FlateDecode
 >>
@@ -56552,21 +60258,21 @@
 (Pž;qÞ½øš~å/Ð	S6èuýp at VP…‚÷<—º¥5àú…4ëM|¼xœJyƍü™¿ÃxîZh Gk©åp¦Mœ…¨.­‚&sԍŒÚÑàû¸gAk‚ë/~&äÿ l¤L—
 endstream
 endobj
-10227 0 obj <<
+10215 0 obj <<
 /Type /Page
-/Contents 10228 0 R
-/Resources 10226 0 R
+/Contents 10216 0 R
+/Resources 10214 0 R
 /MediaBox [0 0 612 792]
-/Parent 10231 0 R
+/Parent 10219 0 R
 >> endobj
-10225 0 obj <<
+10213 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 851
 /Height 430
 /BitsPerComponent 8
 /ColorSpace /DeviceRGB
-/SMask 10232 0 R
+/SMask 10220 0 R
 /Length 6685      
 /Filter /FlateDecode
 >>
@@ -56634,7 +60340,7 @@
  ¿8¸›¶»i×F °Yðû}П~ÉGw7íânÚ À{‚Ÿ»iÏĶ%ÁÏÝ´€Of?wÓv7mwÓ žeŸþl]s  uÜMÛG± À	ÙÏÝ´¥>  €Œÿõá†
 endstream
 endobj
-10232 0 obj <<
+10220 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 851
@@ -56648,21 +60354,21 @@
 xÚíÁ!    ÿŸÖ6                                                                                                                                                                                                                                                                                                                                                                  €‡                                                                                                                                                                                                                                                                                                                                                                  ÀÅ ýŒ(
 endstream
 endobj
-10229 0 obj <<
-/D [10227 0 R /XYZ 151.701 685.529 null]
+10217 0 obj <<
+/D [10215 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5273 0 obj <<
-/D [10227 0 R /XYZ 151.701 353.73 null]
+/D [10215 0 R /XYZ 151.701 353.73 null]
 >> endobj
-10230 0 obj <<
-/D [10227 0 R /XYZ 151.701 336.86 null]
+10218 0 obj <<
+/D [10215 0 R /XYZ 151.701 336.86 null]
 >> endobj
-10226 0 obj <<
+10214 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F51 3736 0 R /F15 3700 0 R /F85 5513 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R >>
-/XObject << /Im1 5672 0 R /Im57 10225 0 R >>
+/XObject << /Im1 5672 0 R /Im57 10213 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-10235 0 obj <<
+10223 0 obj <<
 /Length 1913      
 /Filter /FlateDecode
 >>
@@ -56686,33 +60392,33 @@
 \ qx¶p¦å‰>"þ+€Z„Û;Xè{TýX¿¤M€Ü	âƒ}M¢#nL[Ë’ñúTA{i±Û/¾()G©,%ðÖ§·¯ÊRÚylR˜>ík99«Ê“‰yTØ2y!ÁðAŠÊø¦ë[Ís)·|*€Z#•·“<›ó‘¦ÛoÍÿm˜Gb…ß\†ö‘ÊkÊWÚ-$ñA‹ð wŽ[>i|—#	0¯‘ŠG,Ü%xÏÔ켨p’-€Î©å~¤³ï™ÅJK;¤¡§»ëu´Äã>ç:pe›§_¬Ã)y³ÆË~_oWÿ™÷>é
 endstream
 endobj
-10234 0 obj <<
+10222 0 obj <<
 /Type /Page
-/Contents 10235 0 R
-/Resources 10233 0 R
+/Contents 10223 0 R
+/Resources 10221 0 R
 /MediaBox [0 0 612 792]
-/Parent 10231 0 R
+/Parent 10219 0 R
 >> endobj
-10236 0 obj <<
-/D [10234 0 R /XYZ 100.892 685.529 null]
+10224 0 obj <<
+/D [10222 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2454 0 obj <<
-/D [10234 0 R /XYZ 100.892 660.623 null]
+/D [10222 0 R /XYZ 100.892 660.623 null]
 >> endobj
-10237 0 obj <<
-/D [10234 0 R /XYZ 100.892 641.209 null]
+10225 0 obj <<
+/D [10222 0 R /XYZ 100.892 641.209 null]
 >> endobj
 2458 0 obj <<
-/D [10234 0 R /XYZ 100.892 271.617 null]
+/D [10222 0 R /XYZ 100.892 271.617 null]
 >> endobj
-10238 0 obj <<
-/D [10234 0 R /XYZ 100.892 244.369 null]
+10226 0 obj <<
+/D [10222 0 R /XYZ 100.892 244.369 null]
 >> endobj
-10233 0 obj <<
+10221 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10241 0 obj <<
+10229 0 obj <<
 /Length 2087      
 /Filter /FlateDecode
 >>
@@ -56739,33 +60445,33 @@
 Íå}p	~y)ùK	„Ç縥0¹ü=œÆ_·«ÿˆ7Ê
 endstream
 endobj
-10240 0 obj <<
+10228 0 obj <<
 /Type /Page
-/Contents 10241 0 R
-/Resources 10239 0 R
+/Contents 10229 0 R
+/Resources 10227 0 R
 /MediaBox [0 0 612 792]
-/Parent 10231 0 R
+/Parent 10219 0 R
 >> endobj
-10242 0 obj <<
-/D [10240 0 R /XYZ 151.701 685.529 null]
+10230 0 obj <<
+/D [10228 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2462 0 obj <<
-/D [10240 0 R /XYZ 151.701 395.417 null]
+/D [10228 0 R /XYZ 151.701 395.417 null]
 >> endobj
-10243 0 obj <<
-/D [10240 0 R /XYZ 151.701 369.581 null]
+10231 0 obj <<
+/D [10228 0 R /XYZ 151.701 369.581 null]
 >> endobj
 2466 0 obj <<
-/D [10240 0 R /XYZ 151.701 206.613 null]
+/D [10228 0 R /XYZ 151.701 206.613 null]
 >> endobj
-10244 0 obj <<
-/D [10240 0 R /XYZ 151.701 180.17 null]
+10232 0 obj <<
+/D [10228 0 R /XYZ 151.701 180.17 null]
 >> endobj
-10239 0 obj <<
+10227 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F51 3736 0 R /F17 3698 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10247 0 obj <<
+10235 0 obj <<
 /Length 2059      
 /Filter /FlateDecode
 >>
@@ -56791,33 +60497,33 @@
 3¢S0|sz±nîßß]ò3„([ÿ°ÿ‡!Zþó„‹<¹€á$àÐt=CÔ\§C—¸nu%9‡ñÖ3½ÏðW)Ï­%Ï}:ûN&ý("n7¼ŽGYœ’=èéë¢:–Ô>yu…-ÆÔµÚ±S öˆ^ú–ã©c¿·ƒO ˆ™8ÓꄱîÅ-93•Y¹©@4l8þÙÙí™ÌÔFJl1x!•iÆ÷o#„꘮ljÍhˆ0üëhÚõåfñ¤œŽª
 endstream
 endobj
-10246 0 obj <<
+10234 0 obj <<
 /Type /Page
-/Contents 10247 0 R
-/Resources 10245 0 R
+/Contents 10235 0 R
+/Resources 10233 0 R
 /MediaBox [0 0 612 792]
-/Parent 10231 0 R
+/Parent 10219 0 R
 >> endobj
-10248 0 obj <<
-/D [10246 0 R /XYZ 100.892 685.529 null]
+10236 0 obj <<
+/D [10234 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2470 0 obj <<
-/D [10246 0 R /XYZ 100.892 348.209 null]
+/D [10234 0 R /XYZ 100.892 348.209 null]
 >> endobj
-10249 0 obj <<
-/D [10246 0 R /XYZ 100.892 321.313 null]
+10237 0 obj <<
+/D [10234 0 R /XYZ 100.892 321.313 null]
 >> endobj
 2474 0 obj <<
-/D [10246 0 R /XYZ 100.892 221.296 null]
+/D [10234 0 R /XYZ 100.892 221.296 null]
 >> endobj
-10250 0 obj <<
-/D [10246 0 R /XYZ 100.892 196.611 null]
+10238 0 obj <<
+/D [10234 0 R /XYZ 100.892 196.611 null]
 >> endobj
-10245 0 obj <<
+10233 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F51 3736 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10253 0 obj <<
+10241 0 obj <<
 /Length 1937      
 /Filter /FlateDecode
 >>
@@ -56837,33 +60543,33 @@
 5ý?š¾o·«ç" 
 endstream
 endobj
-10252 0 obj <<
+10240 0 obj <<
 /Type /Page
-/Contents 10253 0 R
-/Resources 10251 0 R
+/Contents 10241 0 R
+/Resources 10239 0 R
 /MediaBox [0 0 612 792]
-/Parent 10231 0 R
+/Parent 10219 0 R
 >> endobj
-10254 0 obj <<
-/D [10252 0 R /XYZ 151.701 685.529 null]
+10242 0 obj <<
+/D [10240 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2478 0 obj <<
-/D [10252 0 R /XYZ 151.701 509.857 null]
+/D [10240 0 R /XYZ 151.701 509.857 null]
 >> endobj
-10255 0 obj <<
-/D [10252 0 R /XYZ 151.701 480.834 null]
+10243 0 obj <<
+/D [10240 0 R /XYZ 151.701 480.834 null]
 >> endobj
 2482 0 obj <<
-/D [10252 0 R /XYZ 151.701 370.45 null]
+/D [10240 0 R /XYZ 151.701 370.45 null]
 >> endobj
-10256 0 obj <<
-/D [10252 0 R /XYZ 151.701 343.752 null]
+10244 0 obj <<
+/D [10240 0 R /XYZ 151.701 343.752 null]
 >> endobj
-10251 0 obj <<
+10239 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10260 0 obj <<
+10248 0 obj <<
 /Length 2357      
 /Filter /FlateDecode
 >>
@@ -56888,27 +60594,27 @@
 ¢x+Pc§ä_÷ýÓ 	ž{S
 endstream
 endobj
-10259 0 obj <<
+10247 0 obj <<
 /Type /Page
-/Contents 10260 0 R
-/Resources 10258 0 R
+/Contents 10248 0 R
+/Resources 10246 0 R
 /MediaBox [0 0 612 792]
-/Parent 10231 0 R
+/Parent 10219 0 R
 >> endobj
-10261 0 obj <<
-/D [10259 0 R /XYZ 100.892 685.529 null]
+10249 0 obj <<
+/D [10247 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2486 0 obj <<
-/D [10259 0 R /XYZ 100.892 382.952 null]
+/D [10247 0 R /XYZ 100.892 382.952 null]
 >> endobj
-10262 0 obj <<
-/D [10259 0 R /XYZ 100.892 356.599 null]
+10250 0 obj <<
+/D [10247 0 R /XYZ 100.892 356.599 null]
 >> endobj
-10258 0 obj <<
+10246 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10265 0 obj <<
+10253 0 obj <<
 /Length 2090      
 /Filter /FlateDecode
 >>
@@ -56937,48 +60643,48 @@
 Œo2ȳq~Q€^Å“GxxØSqÂ~Ê9é~4?Cð {oŽ&¾Ô÷ž"`|Ãó{`|pb»«oƒ„²èB?=à“ZxÜg¿íkîøt¯Ô©¿pÓÉ^)Ù+EÝæ$¦ÂR‡w XݹÈÆv6Iàiéž`Rv;è÷¬|Hêi¦§&q_srÑþït£tÓÄ8ø}6œÅ<ËCnßƇûõÕ楮öᛞ„란ù:ìÊr”öŠ÷D çIwQÌïL«Ú•E_ÈÄFú öË¡[Vû´ž™:ŠùaA¢?c;é Íè 2J¼é_‚qüyµøCðŠ¿
 endstream
 endobj
-10264 0 obj <<
+10252 0 obj <<
 /Type /Page
-/Contents 10265 0 R
-/Resources 10263 0 R
+/Contents 10253 0 R
+/Resources 10251 0 R
 /MediaBox [0 0 612 792]
-/Parent 10270 0 R
-/Annots [ 10257 0 R 10267 0 R ]
+/Parent 10258 0 R
+/Annots [ 10245 0 R 10255 0 R ]
 >> endobj
-10257 0 obj <<
+10245 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [480.269 605.899 511.352 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (pam) >>
 >> endobj
-10267 0 obj <<
+10255 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 592.35 388.182 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (pam) >>
 >> endobj
-10266 0 obj <<
-/D [10264 0 R /XYZ 151.701 685.529 null]
+10254 0 obj <<
+/D [10252 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2490 0 obj <<
-/D [10264 0 R /XYZ 151.701 571.35 null]
+/D [10252 0 R /XYZ 151.701 571.35 null]
 >> endobj
-10268 0 obj <<
-/D [10264 0 R /XYZ 151.701 541.335 null]
+10256 0 obj <<
+/D [10252 0 R /XYZ 151.701 541.335 null]
 >> endobj
 2494 0 obj <<
-/D [10264 0 R /XYZ 151.701 308.603 null]
+/D [10252 0 R /XYZ 151.701 308.603 null]
 >> endobj
-10269 0 obj <<
-/D [10264 0 R /XYZ 151.701 278.588 null]
+10257 0 obj <<
+/D [10252 0 R /XYZ 151.701 278.588 null]
 >> endobj
-10263 0 obj <<
+10251 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10275 0 obj <<
+10263 0 obj <<
 /Length 2106      
 /Filter /FlateDecode
 >>
@@ -57001,46 +60707,46 @@
 ËÂDß^lüEGI¥t»Z]"P ÂÀŠëLCPëÌý^Afäqüΐ³åàaøԐˆ¶+©ZóÝòz‡dà¼`ÞGnrc¦èOŒblKZœÒòèÝ2ïºVÿËJDiœ|íÏ<¡TM×ÿòüx*Ämšø¸)™Bš(6z¹‰˜ý©#í"n³=ÿvצsv¨nÅÚqÎ}|ìíéÙFmwx¼Û¹8(‹£øV%ý}Ázÿ³ü—uƒ«
 endstream
 endobj
-10274 0 obj <<
+10262 0 obj <<
 /Type /Page
-/Contents 10275 0 R
-/Resources 10273 0 R
+/Contents 10263 0 R
+/Resources 10261 0 R
 /MediaBox [0 0 612 792]
-/Parent 10270 0 R
-/Annots [ 10271 0 R ]
+/Parent 10258 0 R
+/Annots [ 10259 0 R ]
 >> endobj
-10271 0 obj <<
+10259 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 205.667 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://samba.org/)>>
 >> endobj
-10276 0 obj <<
-/D [10274 0 R /XYZ 100.892 685.529 null]
+10264 0 obj <<
+/D [10262 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2498 0 obj <<
-/D [10274 0 R /XYZ 100.892 660.623 null]
+/D [10262 0 R /XYZ 100.892 660.623 null]
 >> endobj
-10277 0 obj <<
-/D [10274 0 R /XYZ 100.892 638.691 null]
+10265 0 obj <<
+/D [10262 0 R /XYZ 100.892 638.691 null]
 >> endobj
 2502 0 obj <<
-/D [10274 0 R /XYZ 100.892 638.691 null]
+/D [10262 0 R /XYZ 100.892 638.691 null]
 >> endobj
-10278 0 obj <<
-/D [10274 0 R /XYZ 100.892 614.691 null]
+10266 0 obj <<
+/D [10262 0 R /XYZ 100.892 614.691 null]
 >> endobj
 2506 0 obj <<
-/D [10274 0 R /XYZ 100.892 371.984 null]
+/D [10262 0 R /XYZ 100.892 371.984 null]
 >> endobj
-10279 0 obj <<
-/D [10274 0 R /XYZ 100.892 345.263 null]
+10267 0 obj <<
+/D [10262 0 R /XYZ 100.892 345.263 null]
 >> endobj
-10273 0 obj <<
+10261 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F51 3736 0 R /F59 4373 0 R /F85 5513 0 R /F53 3738 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10282 0 obj <<
+10270 0 obj <<
 /Length 1932      
 /Filter /FlateDecode
 >>
@@ -57067,46 +60773,46 @@
 ¯)è’ÿE#c§ê%i„Z,ïðÚ‡®VÎmû¦ÆGy»öŽ„è;z§æôçå=Sî±yNì' —øO@ÇÏ ýÌ…Ø_-÷È/®C«µôÌý®Zºgú¿bü‚{ÿMÞ
 endstream
 endobj
-10281 0 obj <<
+10269 0 obj <<
 /Type /Page
-/Contents 10282 0 R
-/Resources 10280 0 R
+/Contents 10270 0 R
+/Resources 10268 0 R
 /MediaBox [0 0 612 792]
-/Parent 10270 0 R
-/Annots [ 10272 0 R 10284 0 R ]
+/Parent 10258 0 R
+/Annots [ 10260 0 R 10272 0 R ]
 >> endobj
-10272 0 obj <<
+10260 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [360.452 632.694 511.352 644.687]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.kernel.org/pub/linux/libs/pam/)>>
 >> endobj
-10284 0 obj <<
+10272 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [150.705 619.145 238.606 631.137]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.kernel.org/pub/linux/libs/pam/)>>
 >> endobj
-10283 0 obj <<
-/D [10281 0 R /XYZ 151.701 685.529 null]
+10271 0 obj <<
+/D [10269 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2510 0 obj <<
-/D [10281 0 R /XYZ 151.701 604.487 null]
+/D [10269 0 R /XYZ 151.701 604.487 null]
 >> endobj
-10285 0 obj <<
-/D [10281 0 R /XYZ 151.701 577.465 null]
+10273 0 obj <<
+/D [10269 0 R /XYZ 151.701 577.465 null]
 >> endobj
 2514 0 obj <<
-/D [10281 0 R /XYZ 151.701 445.684 null]
+/D [10269 0 R /XYZ 151.701 445.684 null]
 >> endobj
-10286 0 obj <<
-/D [10281 0 R /XYZ 151.701 407.134 null]
+10274 0 obj <<
+/D [10269 0 R /XYZ 151.701 407.134 null]
 >> endobj
-10280 0 obj <<
+10268 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F52 3737 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10289 0 obj <<
+10277 0 obj <<
 /Length 1641      
 /Filter /FlateDecode
 >>
@@ -57129,21 +60835,21 @@
 ª% º`Nâ>×ØmCòȇ)…]D¾â,ý‚³¦Dž0žyåÞº®múuÀyß'D}x‚š:Ï«OÞ½O9xµ„?æ›>l¸¦‡þô…ì?¬i[
 endstream
 endobj
-10288 0 obj <<
+10276 0 obj <<
 /Type /Page
-/Contents 10289 0 R
-/Resources 10287 0 R
+/Contents 10277 0 R
+/Resources 10275 0 R
 /MediaBox [0 0 612 792]
-/Parent 10270 0 R
+/Parent 10258 0 R
 >> endobj
-10290 0 obj <<
-/D [10288 0 R /XYZ 100.892 685.529 null]
+10278 0 obj <<
+/D [10276 0 R /XYZ 100.892 685.529 null]
 >> endobj
-10287 0 obj <<
+10275 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10296 0 obj <<
+10284 0 obj <<
 /Length 1846      
 /Filter /FlateDecode
 >>
@@ -57168,52 +60874,52 @@
 Ha‰yvú§0}ÆúþÚåx—>`ß}(ë‚íºò̸‰/œ'fºµæýFîN₏fОD£”ü?²†gùw¢²–ð`,ÊÊÓxQšÒùaLü”Á°0‰ÉQöüàø7º¾
 endstream
 endobj
-10295 0 obj <<
+10283 0 obj <<
 /Type /Page
-/Contents 10296 0 R
-/Resources 10294 0 R
+/Contents 10284 0 R
+/Resources 10282 0 R
 /MediaBox [0 0 612 792]
-/Parent 10270 0 R
-/Annots [ 10291 0 R 10299 0 R 10292 0 R 10300 0 R ]
+/Parent 10258 0 R
+/Annots [ 10279 0 R 10287 0 R 10280 0 R 10288 0 R ]
 >> endobj
-10291 0 obj <<
+10279 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 151.133 511.352 162.789]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/aixprggd/kernextc/sec_load_mod.htm)>>
 >> endobj
-10299 0 obj <<
+10287 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [150.705 138.879 270.38 150.386]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/aixprggd/kernextc/sec_load_mod.htm)>>
 >> endobj
-10292 0 obj <<
+10280 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 129.215 511.352 140.871]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/aixbman/baseadmn/iandaadmin.htm)>>
 >> endobj
-10300 0 obj <<
+10288 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [150.705 116.961 260.965 128.468]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/aixbman/baseadmn/iandaadmin.htm)>>
 >> endobj
-10297 0 obj <<
-/D [10295 0 R /XYZ 151.701 685.529 null]
+10285 0 obj <<
+/D [10283 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2518 0 obj <<
-/D [10295 0 R /XYZ 151.701 520.946 null]
+/D [10283 0 R /XYZ 151.701 520.946 null]
 >> endobj
-10298 0 obj <<
-/D [10295 0 R /XYZ 151.701 493.514 null]
+10286 0 obj <<
+/D [10283 0 R /XYZ 151.701 493.514 null]
 >> endobj
-10294 0 obj <<
+10282 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10303 0 obj <<
+10291 0 obj <<
 /Length 3296      
 /Filter /FlateDecode
 >>
@@ -57253,89 +60959,89 @@
 I(µgÃ^Ÿ³Ù¦ÌU´öÝИ?þñ6+þ€ÛÔëiõ´›}j?÷8‡þ}Ù
 endstream
 endobj
-10302 0 obj <<
+10290 0 obj <<
 /Type /Page
-/Contents 10303 0 R
-/Resources 10301 0 R
+/Contents 10291 0 R
+/Resources 10289 0 R
 /MediaBox [0 0 612 792]
-/Parent 10270 0 R
-/Annots [ 10293 0 R ]
+/Parent 10258 0 R
+/Annots [ 10281 0 R ]
 >> endobj
-10293 0 obj <<
+10281 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [247.92 590.575 322.957 602.264]
 /Subtype /Link
 /A << /S /GoTo /D (winbindcfg) >>
 >> endobj
-10304 0 obj <<
-/D [10302 0 R /XYZ 100.892 685.529 null]
+10292 0 obj <<
+/D [10290 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2522 0 obj <<
-/D [10302 0 R /XYZ 100.892 660.623 null]
+/D [10290 0 R /XYZ 100.892 660.623 null]
 >> endobj
-10305 0 obj <<
-/D [10302 0 R /XYZ 100.892 641.897 null]
+10293 0 obj <<
+/D [10290 0 R /XYZ 100.892 641.897 null]
 >> endobj
 5114 0 obj <<
-/D [10302 0 R /XYZ 100.892 562.547 null]
+/D [10290 0 R /XYZ 100.892 562.547 null]
 >> endobj
-10306 0 obj <<
-/D [10302 0 R /XYZ 100.892 545.677 null]
+10294 0 obj <<
+/D [10290 0 R /XYZ 100.892 545.677 null]
 >> endobj
-10307 0 obj <<
-/D [10302 0 R /XYZ 100.892 539.7 null]
+10295 0 obj <<
+/D [10290 0 R /XYZ 100.892 539.7 null]
 >> endobj
-10308 0 obj <<
-/D [10302 0 R /XYZ 100.892 545.976 null]
+10296 0 obj <<
+/D [10290 0 R /XYZ 100.892 545.976 null]
 >> endobj
-10309 0 obj <<
-/D [10302 0 R /XYZ 100.892 534.021 null]
+10297 0 obj <<
+/D [10290 0 R /XYZ 100.892 534.021 null]
 >> endobj
-10310 0 obj <<
-/D [10302 0 R /XYZ 100.892 510.111 null]
+10298 0 obj <<
+/D [10290 0 R /XYZ 100.892 510.111 null]
 >> endobj
-10311 0 obj <<
-/D [10302 0 R /XYZ 100.892 498.156 null]
+10299 0 obj <<
+/D [10290 0 R /XYZ 100.892 498.156 null]
 >> endobj
-10312 0 obj <<
-/D [10302 0 R /XYZ 100.892 486.2 null]
+10300 0 obj <<
+/D [10290 0 R /XYZ 100.892 486.2 null]
 >> endobj
-10313 0 obj <<
-/D [10302 0 R /XYZ 100.892 474.245 null]
+10301 0 obj <<
+/D [10290 0 R /XYZ 100.892 474.245 null]
 >> endobj
-10314 0 obj <<
-/D [10302 0 R /XYZ 100.892 462.29 null]
+10302 0 obj <<
+/D [10290 0 R /XYZ 100.892 462.29 null]
 >> endobj
-10315 0 obj <<
-/D [10302 0 R /XYZ 100.892 450.335 null]
+10303 0 obj <<
+/D [10290 0 R /XYZ 100.892 450.335 null]
 >> endobj
-10316 0 obj <<
-/D [10302 0 R /XYZ 100.892 438.38 null]
+10304 0 obj <<
+/D [10290 0 R /XYZ 100.892 438.38 null]
 >> endobj
-10317 0 obj <<
-/D [10302 0 R /XYZ 100.892 426.425 null]
+10305 0 obj <<
+/D [10290 0 R /XYZ 100.892 426.425 null]
 >> endobj
-10318 0 obj <<
-/D [10302 0 R /XYZ 100.892 414.469 null]
+10306 0 obj <<
+/D [10290 0 R /XYZ 100.892 414.469 null]
 >> endobj
-10319 0 obj <<
-/D [10302 0 R /XYZ 100.892 390.559 null]
+10307 0 obj <<
+/D [10290 0 R /XYZ 100.892 390.559 null]
 >> endobj
-10320 0 obj <<
-/D [10302 0 R /XYZ 100.892 378.604 null]
+10308 0 obj <<
+/D [10290 0 R /XYZ 100.892 378.604 null]
 >> endobj
 2526 0 obj <<
-/D [10302 0 R /XYZ 100.892 325.495 null]
+/D [10290 0 R /XYZ 100.892 325.495 null]
 >> endobj
-10321 0 obj <<
-/D [10302 0 R /XYZ 100.892 299.349 null]
+10309 0 obj <<
+/D [10290 0 R /XYZ 100.892 299.349 null]
 >> endobj
-10301 0 obj <<
+10289 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F4 5484 0 R /F59 4373 0 R /F51 3736 0 R /F52 3737 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10324 0 obj <<
+10312 0 obj <<
 /Length 1326      
 /Filter /FlateDecode
 >>
@@ -57347,28 +61053,28 @@
 LoMPsü5ŸWøóø¶t F
 endstream
 endobj
-10323 0 obj <<
+10311 0 obj <<
 /Type /Page
-/Contents 10324 0 R
-/Resources 10322 0 R
+/Contents 10312 0 R
+/Resources 10310 0 R
 /MediaBox [0 0 612 792]
-/Parent 10327 0 R
+/Parent 10315 0 R
 >> endobj
-10325 0 obj <<
-/D [10323 0 R /XYZ 151.701 685.529 null]
+10313 0 obj <<
+/D [10311 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2530 0 obj <<
-/D [10323 0 R /XYZ 151.701 350.424 null]
+/D [10311 0 R /XYZ 151.701 350.424 null]
 >> endobj
-10326 0 obj <<
-/D [10323 0 R /XYZ 151.701 315.904 null]
+10314 0 obj <<
+/D [10311 0 R /XYZ 151.701 315.904 null]
 >> endobj
-10322 0 obj <<
+10310 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F88 5678 0 R /F72 5679 0 R /F15 3700 0 R /F53 3738 0 R /F85 5513 0 R /F17 3698 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10330 0 obj <<
+10318 0 obj <<
 /Length 1216      
 /Filter /FlateDecode
 >>
@@ -57385,22 +61091,22 @@
 ‚a¡_jNŠn®)|ÑB	_;›apIŸÒ±UÁCœS)ø9^>À?u÷¼V“‡öÚ&^ã¸Ç3¼ð§göô‡ÀîÚQ
 endstream
 endobj
-10329 0 obj <<
+10317 0 obj <<
 /Type /Page
-/Contents 10330 0 R
-/Resources 10328 0 R
+/Contents 10318 0 R
+/Resources 10316 0 R
 /MediaBox [0 0 612 792]
-/Parent 10327 0 R
+/Parent 10315 0 R
 >> endobj
-10331 0 obj <<
-/D [10329 0 R /XYZ 100.892 685.529 null]
+10319 0 obj <<
+/D [10317 0 R /XYZ 100.892 685.529 null]
 >> endobj
-10328 0 obj <<
+10316 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F88 5678 0 R /F72 5679 0 R /F53 3738 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F51 3736 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10334 0 obj <<
+10322 0 obj <<
 /Length 1396      
 /Filter /FlateDecode
 >>
@@ -57418,33 +61124,33 @@
 ?¼(xPá6bà9œÿo™†m?žRú´üº€;þiõNkñµ|ëX„ñ¤oœXØÄé¸;ÎSåc­(ª•k+–”	üO™ê€;ÓµÖs7›Ä¦¥^#¬á^†iË1àHŸÎz¢YK»(fáyò4M¦ÿDã/üÕú ¦é
 endstream
 endobj
-10333 0 obj <<
+10321 0 obj <<
 /Type /Page
-/Contents 10334 0 R
-/Resources 10332 0 R
+/Contents 10322 0 R
+/Resources 10320 0 R
 /MediaBox [0 0 612 792]
-/Parent 10327 0 R
+/Parent 10315 0 R
 >> endobj
-10335 0 obj <<
-/D [10333 0 R /XYZ 151.701 685.529 null]
+10323 0 obj <<
+/D [10321 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2534 0 obj <<
-/D [10333 0 R /XYZ 151.701 264.024 null]
+/D [10321 0 R /XYZ 151.701 264.024 null]
 >> endobj
-10336 0 obj <<
-/D [10333 0 R /XYZ 151.701 235.107 null]
+10324 0 obj <<
+/D [10321 0 R /XYZ 151.701 235.107 null]
 >> endobj
-10337 0 obj <<
-/D [10333 0 R /XYZ 151.701 235.107 null]
+10325 0 obj <<
+/D [10321 0 R /XYZ 151.701 235.107 null]
 >> endobj
-10338 0 obj <<
-/D [10333 0 R /XYZ 151.701 235.107 null]
+10326 0 obj <<
+/D [10321 0 R /XYZ 151.701 235.107 null]
 >> endobj
-10332 0 obj <<
+10320 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10341 0 obj <<
+10329 0 obj <<
 /Length 755       
 /Filter /FlateDecode
 >>
@@ -57459,21 +61165,21 @@
 ,Q8ipfþ˜pylz_mËñƒÞϠɊ˪·‡“´ê}O¾]§öhqs‘ÞíìîTþ¾7™
 endstream
 endobj
-10340 0 obj <<
+10328 0 obj <<
 /Type /Page
-/Contents 10341 0 R
-/Resources 10339 0 R
+/Contents 10329 0 R
+/Resources 10327 0 R
 /MediaBox [0 0 612 792]
-/Parent 10327 0 R
+/Parent 10315 0 R
 >> endobj
-10342 0 obj <<
-/D [10340 0 R /XYZ 100.892 685.529 null]
+10330 0 obj <<
+/D [10328 0 R /XYZ 100.892 685.529 null]
 >> endobj
-10339 0 obj <<
+10327 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10346 0 obj <<
+10334 0 obj <<
 /Length 1040      
 /Filter /FlateDecode
 >>
@@ -57486,35 +61192,35 @@
 Ç7•5†Õ˜µmzÙT¢Û!ÕM[·ÚAÀJ”zN"Á$¦ªT7pûzON&hV› ÅG=w,$û`a_}æÍna%ËÊëgVÈr+dš?Í™•Ä‰´Š$e&~àûède¿bZô¤ÒQðf‘ñ[ѧ‡Æáˆu1Uùð]¹RG«ƒ~w!Û—¢`f.ÓÔ”VÂÂÓáBJAH“㸾¡„m‘Ÿ}Øð¶røfÀø‡‰£êßG¸"nZ±µ1;«åä0öˆÔ‡89”:õBz¿ÝèsÏ{ñȬmGÚ9Œê¿à_#+ª
 endstream
 endobj
-10345 0 obj <<
+10333 0 obj <<
 /Type /Page
-/Contents 10346 0 R
-/Resources 10344 0 R
+/Contents 10334 0 R
+/Resources 10332 0 R
 /MediaBox [0 0 612 792]
-/Parent 10327 0 R
-/Annots [ 10343 0 R ]
+/Parent 10315 0 R
+/Annots [ 10331 0 R ]
 >> endobj
-10343 0 obj <<
+10331 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [386.806 375.9 454.859 387.589]
 /Subtype /Link
 /A << /S /GoTo /D (winbind-solaris9) >>
 >> endobj
-10347 0 obj <<
-/D [10345 0 R /XYZ 151.701 685.529 null]
+10335 0 obj <<
+/D [10333 0 R /XYZ 151.701 685.529 null]
 >> endobj
-10348 0 obj <<
-/D [10345 0 R /XYZ 151.701 399.51 null]
+10336 0 obj <<
+/D [10333 0 R /XYZ 151.701 399.51 null]
 >> endobj
-10349 0 obj <<
-/D [10345 0 R /XYZ 151.701 399.51 null]
+10337 0 obj <<
+/D [10333 0 R /XYZ 151.701 399.51 null]
 >> endobj
-10344 0 obj <<
+10332 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F17 3698 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10353 0 obj <<
+10341 0 obj <<
 /Length 718       
 /Filter /FlateDecode
 >>
@@ -57528,21 +61234,21 @@
 ƒ0ñuZZ™5,·˜Ì`´ìÒmڏ“qǤ⛜¥º†öËÚû9Ð~nÌ_ßP'õïöç÷E
 endstream
 endobj
-10352 0 obj <<
+10340 0 obj <<
 /Type /Page
-/Contents 10353 0 R
-/Resources 10351 0 R
+/Contents 10341 0 R
+/Resources 10339 0 R
 /MediaBox [0 0 612 792]
-/Parent 10327 0 R
+/Parent 10315 0 R
 >> endobj
-10354 0 obj <<
-/D [10352 0 R /XYZ 100.892 685.529 null]
+10342 0 obj <<
+/D [10340 0 R /XYZ 100.892 685.529 null]
 >> endobj
-10351 0 obj <<
+10339 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10357 0 obj <<
+10345 0 obj <<
 /Length 1658      
 /Filter /FlateDecode
 >>
@@ -57568,39 +61274,39 @@
 ”7Trâͪ<T‚¡¯qúËÿsÃôÝ=>áÿ«47×
 endstream
 endobj
-10356 0 obj <<
+10344 0 obj <<
 /Type /Page
-/Contents 10357 0 R
-/Resources 10355 0 R
+/Contents 10345 0 R
+/Resources 10343 0 R
 /MediaBox [0 0 612 792]
-/Parent 10364 0 R
+/Parent 10352 0 R
 >> endobj
-10358 0 obj <<
-/D [10356 0 R /XYZ 151.701 685.529 null]
+10346 0 obj <<
+/D [10344 0 R /XYZ 151.701 685.529 null]
 >> endobj
-10359 0 obj <<
-/D [10356 0 R /XYZ 151.701 594.335 null]
+10347 0 obj <<
+/D [10344 0 R /XYZ 151.701 594.335 null]
 >> endobj
-10360 0 obj <<
-/D [10356 0 R /XYZ 151.701 594.335 null]
+10348 0 obj <<
+/D [10344 0 R /XYZ 151.701 594.335 null]
 >> endobj
 2538 0 obj <<
-/D [10356 0 R /XYZ 151.701 529.839 null]
+/D [10344 0 R /XYZ 151.701 529.839 null]
 >> endobj
-10361 0 obj <<
-/D [10356 0 R /XYZ 151.701 503.263 null]
+10349 0 obj <<
+/D [10344 0 R /XYZ 151.701 503.263 null]
 >> endobj
-10362 0 obj <<
-/D [10356 0 R /XYZ 151.701 217.302 null]
+10350 0 obj <<
+/D [10344 0 R /XYZ 151.701 217.302 null]
 >> endobj
-10363 0 obj <<
-/D [10356 0 R /XYZ 151.701 217.302 null]
+10351 0 obj <<
+/D [10344 0 R /XYZ 151.701 217.302 null]
 >> endobj
-10355 0 obj <<
+10343 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10367 0 obj <<
+10355 0 obj <<
 /Length 1733      
 /Filter /FlateDecode
 >>
@@ -57627,22 +61333,22 @@
 ´®Ò%Á¶ÁØB¹¦§ï1A?äÅýY?Ê^õ§,±q„°ZrŒ+T¯ÿ Í
 endstream
 endobj
-10366 0 obj <<
+10354 0 obj <<
 /Type /Page
-/Contents 10367 0 R
-/Resources 10365 0 R
+/Contents 10355 0 R
+/Resources 10353 0 R
 /MediaBox [0 0 612 792]
-/Parent 10364 0 R
+/Parent 10352 0 R
 >> endobj
-10368 0 obj <<
-/D [10366 0 R /XYZ 100.892 685.529 null]
+10356 0 obj <<
+/D [10354 0 R /XYZ 100.892 685.529 null]
 >> endobj
-10365 0 obj <<
+10353 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10371 0 obj <<
+10359 0 obj <<
 /Length 1218      
 /Filter /FlateDecode
 >>
@@ -57664,27 +61370,27 @@
 ídüKPqH·Ã”7õ"²» Ë”ø"Ôž‘ñù»äè½´¹ÆÎVpO½®é†¥ƒ==ôîˆ{ÈGö]7Œeëb¢à!·dqâþñóM´±Tpüÿðãøw\Ë
 endstream
 endobj
-10370 0 obj <<
+10358 0 obj <<
 /Type /Page
-/Contents 10371 0 R
-/Resources 10369 0 R
+/Contents 10359 0 R
+/Resources 10357 0 R
 /MediaBox [0 0 612 792]
-/Parent 10364 0 R
+/Parent 10352 0 R
 >> endobj
-10372 0 obj <<
-/D [10370 0 R /XYZ 151.701 685.529 null]
+10360 0 obj <<
+/D [10358 0 R /XYZ 151.701 685.529 null]
 >> endobj
-10373 0 obj <<
-/D [10370 0 R /XYZ 151.701 195.362 null]
+10361 0 obj <<
+/D [10358 0 R /XYZ 151.701 195.362 null]
 >> endobj
-10374 0 obj <<
-/D [10370 0 R /XYZ 151.701 195.362 null]
+10362 0 obj <<
+/D [10358 0 R /XYZ 151.701 195.362 null]
 >> endobj
-10369 0 obj <<
+10357 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10377 0 obj <<
+10365 0 obj <<
 /Length 632       
 /Filter /FlateDecode
 >>
@@ -57694,21 +61400,21 @@
 Ö	«ZÕûi2—ØEÆþ*`X·Ròíbɸ‹M Äu\ʱ YèÀ³H;卤šrŸ‹(–K²Ý€œ£é»¡wuòu.¤hUzØ9þÑ­ëT1’iô¡â+Ð]!ë×Sxsu=ðƒÁîC¿ùÂÔû¯¹Ã0/šZθýHÇå׆jËäàÎÓp\§ö)kƒ—R	&ããmΓX4ø$üóZqÙTö¦9†Þ—dGþh/&±÷SÖžÆ>%#'À÷£×îß³y«_ÚjRVg
 endstream
 endobj
-10376 0 obj <<
+10364 0 obj <<
 /Type /Page
-/Contents 10377 0 R
-/Resources 10375 0 R
+/Contents 10365 0 R
+/Resources 10363 0 R
 /MediaBox [0 0 612 792]
-/Parent 10364 0 R
+/Parent 10352 0 R
 >> endobj
-10378 0 obj <<
-/D [10376 0 R /XYZ 100.892 685.529 null]
+10366 0 obj <<
+/D [10364 0 R /XYZ 100.892 685.529 null]
 >> endobj
-10375 0 obj <<
+10363 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10381 0 obj <<
+10369 0 obj <<
 /Length 1118      
 /Filter /FlateDecode
 >>
@@ -57723,27 +61429,27 @@
 Q×ÇYîüý¯ü*,jœºšA‚QØ[u‹_0íôdYy­DSÃmëgHSm͐aÄ*û	'£¹,}9Z/¸Yùo©ýƒÇ@›qË<ÔƒHøÏ»›ëßýÈ'€Lg)pèR…R¨î¾LI{P}\v[S	|wfTʾðQÄð³!•»L¡@”TÒvêgÇ™ßPh; `rq§é•rg…ÂËù9F‰÷ÝAªAÁŸ¡LÁ¥á¬;Ô]=_¸eÿò°€
 endstream
 endobj
-10380 0 obj <<
+10368 0 obj <<
 /Type /Page
-/Contents 10381 0 R
-/Resources 10379 0 R
+/Contents 10369 0 R
+/Resources 10367 0 R
 /MediaBox [0 0 612 792]
-/Parent 10364 0 R
+/Parent 10352 0 R
 >> endobj
-10382 0 obj <<
-/D [10380 0 R /XYZ 151.701 685.529 null]
+10370 0 obj <<
+/D [10368 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2542 0 obj <<
-/D [10380 0 R /XYZ 151.701 244.429 null]
+/D [10368 0 R /XYZ 151.701 244.429 null]
 >> endobj
-10383 0 obj <<
-/D [10380 0 R /XYZ 151.701 206.769 null]
+10371 0 obj <<
+/D [10368 0 R /XYZ 151.701 206.769 null]
 >> endobj
-10379 0 obj <<
+10367 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F85 5513 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10386 0 obj <<
+10374 0 obj <<
 /Length 1938      
 /Filter /FlateDecode
 >>
@@ -57769,40 +61475,40 @@
 ž>±wÄtö¼µí9$ì‚ûG8T‹.à ,Ó鬷RP³µ²J˜Öñp£¯¡xxg«ç÷´±íÈ°:W-¡ÿÂÿײ
 endstream
 endobj
-10385 0 obj <<
+10373 0 obj <<
 /Type /Page
-/Contents 10386 0 R
-/Resources 10384 0 R
+/Contents 10374 0 R
+/Resources 10372 0 R
 /MediaBox [0 0 612 792]
-/Parent 10364 0 R
+/Parent 10352 0 R
 >> endobj
-10387 0 obj <<
-/D [10385 0 R /XYZ 100.892 685.529 null]
+10375 0 obj <<
+/D [10373 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2546 0 obj <<
-/D [10385 0 R /XYZ 100.892 660.623 null]
+/D [10373 0 R /XYZ 100.892 660.623 null]
 >> endobj
-10388 0 obj <<
-/D [10385 0 R /XYZ 100.892 641.209 null]
+10376 0 obj <<
+/D [10373 0 R /XYZ 100.892 641.209 null]
 >> endobj
 2550 0 obj <<
-/D [10385 0 R /XYZ 100.892 382.082 null]
+/D [10373 0 R /XYZ 100.892 382.082 null]
 >> endobj
-10389 0 obj <<
-/D [10385 0 R /XYZ 100.892 355.887 null]
+10377 0 obj <<
+/D [10373 0 R /XYZ 100.892 355.887 null]
 >> endobj
 2554 0 obj <<
-/D [10385 0 R /XYZ 100.892 179.021 null]
+/D [10373 0 R /XYZ 100.892 179.021 null]
 >> endobj
-10390 0 obj <<
-/D [10385 0 R /XYZ 100.892 152.825 null]
+10378 0 obj <<
+/D [10373 0 R /XYZ 100.892 152.825 null]
 >> endobj
-10384 0 obj <<
+10372 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F51 3736 0 R /F88 5678 0 R /F72 5679 0 R /F53 3738 0 R /F59 4373 0 R >>
-/XObject << /Im3 6520 0 R >>
+/XObject << /Im3 6519 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10393 0 obj <<
+10381 0 obj <<
 /Length 878       
 /Filter /FlateDecode
 >>
@@ -57818,21 +61524,21 @@
 #(=
 endstream
 endobj
-10392 0 obj <<
+10380 0 obj <<
 /Type /Page
-/Contents 10393 0 R
-/Resources 10391 0 R
+/Contents 10381 0 R
+/Resources 10379 0 R
 /MediaBox [0 0 612 792]
-/Parent 10395 0 R
+/Parent 10383 0 R
 >> endobj
-10394 0 obj <<
-/D [10392 0 R /XYZ 151.701 685.529 null]
+10382 0 obj <<
+/D [10380 0 R /XYZ 151.701 685.529 null]
 >> endobj
-10391 0 obj <<
+10379 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10398 0 obj <<
+10386 0 obj <<
 /Length 1246      
 /Filter /FlateDecode
 >>
@@ -57845,39 +61551,39 @@
 § Ê^ZÙíN#f…Ù»¼éÐîÕÈN‰un¯S#‚z]f0ÜÉiïeI~¹ÄXérsú  Zx<¯0VÀøÀ–­6½Àzq8<¡9DãHÛ€Ý"b3JD‰S30dÎa¬®Z_çÞw¢Ýp-¯§;lWãa8xœR®¼+8Ö‡Ã|÷æÆÈ-ÎÔÿ8ê³0ê?ûVÀ)³„*Ädq^³.`ÿ>ë¿Q–ÿŒ-ƒ–mÂ.ü®þ~Z‚¾ñÌ«¥·ô½àþWT?ýpY)E­K5àšF=<¨…ë í´ä}Ïð°Ná\Ža³ˆx\券êCøÂA_àVòd“è 	=â,t5?¹ÆÏ®Ý(…Sïà‹ †£rÞùÓgay²)¦8ø¿íô=†’^&…1ø²Ò§vjä5½b‚ñßÃÄõ!
 endstream
 endobj
-10397 0 obj <<
+10385 0 obj <<
 /Type /Page
-/Contents 10398 0 R
-/Resources 10396 0 R
+/Contents 10386 0 R
+/Resources 10384 0 R
 /MediaBox [0 0 612 792]
-/Parent 10395 0 R
+/Parent 10383 0 R
 >> endobj
-10399 0 obj <<
-/D [10397 0 R /XYZ 100.892 685.529 null]
+10387 0 obj <<
+/D [10385 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2558 0 obj <<
-/D [10397 0 R /XYZ 100.892 660.623 null]
+/D [10385 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3851 0 obj <<
-/D [10397 0 R /XYZ 100.892 473.118 null]
+/D [10385 0 R /XYZ 100.892 473.118 null]
 >> endobj
 2562 0 obj <<
-/D [10397 0 R /XYZ 100.892 400.164 null]
+/D [10385 0 R /XYZ 100.892 400.164 null]
 >> endobj
-10400 0 obj <<
-/D [10397 0 R /XYZ 100.892 371.43 null]
+10388 0 obj <<
+/D [10385 0 R /XYZ 100.892 371.43 null]
 >> endobj
 2566 0 obj <<
-/D [10397 0 R /XYZ 100.892 208.329 null]
+/D [10385 0 R /XYZ 100.892 208.329 null]
 >> endobj
-10401 0 obj <<
-/D [10397 0 R /XYZ 100.892 179.595 null]
+10389 0 obj <<
+/D [10385 0 R /XYZ 100.892 179.595 null]
 >> endobj
-10396 0 obj <<
+10384 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10407 0 obj <<
+10395 0 obj <<
 /Length 1886      
 /Filter /FlateDecode
 >>
@@ -57897,46 +61603,46 @@
 4¤5ÜÉbñP‰øìÿ`ƒ7LЉg­ù׫Ç[<gâéñÞŸÞìvð˪qºgà‹Ý6¥~ØÝí?~¸ýx³ßÝß|úqÏn>ݼ½ÐÄ02Dá(ü+Rva<œ"%ð=ÂÅ»àŸ7jÿÃO‡ï¾ûøÿí‚Ç^Ä»&Þ×+$ÄèpÈ
 endstream
 endobj
-10406 0 obj <<
+10394 0 obj <<
 /Type /Page
-/Contents 10407 0 R
-/Resources 10405 0 R
+/Contents 10395 0 R
+/Resources 10393 0 R
 /MediaBox [0 0 612 792]
-/Parent 10395 0 R
-/Annots [ 10402 0 R 10403 0 R ]
+/Parent 10383 0 R
+/Annots [ 10390 0 R 10391 0 R ]
 >> endobj
-10402 0 obj <<
+10390 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 127.92 411.817 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(ftp://ftp.microsoft.com/Softlib/MSLFILES/NEXUS.EXE)>>
 >> endobj
-10403 0 obj <<
+10391 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 425.939 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTOOLS.EXE)>>
 >> endobj
-10408 0 obj <<
-/D [10406 0 R /XYZ 151.701 685.529 null]
+10396 0 obj <<
+/D [10394 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2570 0 obj <<
-/D [10406 0 R /XYZ 151.701 485.355 null]
+/D [10394 0 R /XYZ 151.701 485.355 null]
 >> endobj
-10409 0 obj <<
-/D [10406 0 R /XYZ 151.701 453.864 null]
+10397 0 obj <<
+/D [10394 0 R /XYZ 151.701 453.864 null]
 >> endobj
 2574 0 obj <<
-/D [10406 0 R /XYZ 151.701 361.174 null]
+/D [10394 0 R /XYZ 151.701 361.174 null]
 >> endobj
-10410 0 obj <<
-/D [10406 0 R /XYZ 151.701 330.574 null]
+10398 0 obj <<
+/D [10394 0 R /XYZ 151.701 330.574 null]
 >> endobj
-10405 0 obj <<
+10393 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F51 3736 0 R /F29 5413 0 R /F17 3698 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10414 0 obj <<
+10402 0 obj <<
 /Length 2409      
 /Filter /FlateDecode
 >>
@@ -57962,34 +61668,34 @@
 '$¼üJÂɁq\„ÐÙM2þÄw:¹ü6ƯÚPlá¸ì¤øÿß}ByÇß}HQ†eQœ<dæýzCÿð¥-Ë
 endstream
 endobj
-10413 0 obj <<
+10401 0 obj <<
 /Type /Page
-/Contents 10414 0 R
-/Resources 10412 0 R
+/Contents 10402 0 R
+/Resources 10400 0 R
 /MediaBox [0 0 612 792]
-/Parent 10395 0 R
-/Annots [ 10404 0 R 10411 0 R ]
+/Parent 10383 0 R
+/Annots [ 10392 0 R 10399 0 R ]
 >> endobj
-10404 0 obj <<
+10392 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 127.92 243.325 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.nomachine.com/)>>
 >> endobj
-10411 0 obj <<
+10399 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 304.52 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.nomachine.com/testdrive.php)>>
 >> endobj
-10415 0 obj <<
-/D [10413 0 R /XYZ 100.892 685.529 null]
+10403 0 obj <<
+/D [10401 0 R /XYZ 100.892 685.529 null]
 >> endobj
-10412 0 obj <<
+10400 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10418 0 obj <<
+10406 0 obj <<
 /Length 1985      
 /Filter /FlateDecode
 >>
@@ -58010,27 +61716,27 @@
 ÒƵp•Fæ@Îßé¼Ð=jhÕ”Ÿÿé*Ïê#PMk™zà§H¦œ4ò°ÆÆYšªcyšÉÓ5?zèk³â¶Jô6ï‘ã‚Kg8æwŒý3ykåv謋¼ÈTMøµ%©E?,bpÛÐFô;PRœ €<Eñçä¬IéÇ—ËÑߪP`
 endstream
 endobj
-10417 0 obj <<
+10405 0 obj <<
 /Type /Page
-/Contents 10418 0 R
-/Resources 10416 0 R
+/Contents 10406 0 R
+/Resources 10404 0 R
 /MediaBox [0 0 612 792]
-/Parent 10395 0 R
+/Parent 10383 0 R
 >> endobj
-10419 0 obj <<
-/D [10417 0 R /XYZ 151.701 685.529 null]
+10407 0 obj <<
+/D [10405 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2578 0 obj <<
-/D [10417 0 R /XYZ 151.701 296.495 null]
+/D [10405 0 R /XYZ 151.701 296.495 null]
 >> endobj
-10420 0 obj <<
-/D [10417 0 R /XYZ 151.701 270.342 null]
+10408 0 obj <<
+/D [10405 0 R /XYZ 151.701 270.342 null]
 >> endobj
-10416 0 obj <<
+10404 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F51 3736 0 R /F17 3698 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10429 0 obj <<
+10417 0 obj <<
 /Length 1707      
 /Filter /FlateDecode
 >>
@@ -58058,64 +61764,64 @@
 Rž8|Ä÷ái2Ö<}Í[órÊÍˉ4rÿõS&{8‡·ö-öUÔUÂIžôï«xªHDÿ_ïþ¡÷)Íçe =ÿ…þõ‘S  
 endstream
 endobj
-10428 0 obj <<
+10416 0 obj <<
 /Type /Page
-/Contents 10429 0 R
-/Resources 10427 0 R
+/Contents 10417 0 R
+/Resources 10415 0 R
 /MediaBox [0 0 612 792]
-/Parent 10395 0 R
-/Annots [ 10421 0 R 10422 0 R 10423 0 R 10424 0 R 10425 0 R 10426 0 R ]
+/Parent 10383 0 R
+/Annots [ 10409 0 R 10410 0 R 10411 0 R 10412 0 R 10413 0 R 10414 0 R ]
 >> endobj
-10421 0 obj <<
+10409 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 171.756 224.496 184.707]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.cendio.com)>>
 >> endobj
-10422 0 obj <<
+10410 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 160.797 271.569 173.748]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.cendio.com/testdrive)>>
 >> endobj
-10423 0 obj <<
+10411 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 149.838 233.911 162.789]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.tightvnc.com)>>
 >> endobj
-10424 0 obj <<
+10412 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 138.879 224.496 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://pulseaudio.org)>>
 >> endobj
-10425 0 obj <<
+10413 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 127.92 224.496 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.python.org)>>
 >> endobj
-10426 0 obj <<
+10414 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 233.911 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.rdesktop.org)>>
 >> endobj
-10430 0 obj <<
-/D [10428 0 R /XYZ 100.892 685.529 null]
+10418 0 obj <<
+/D [10416 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2582 0 obj <<
-/D [10428 0 R /XYZ 100.892 535.18 null]
+/D [10416 0 R /XYZ 100.892 535.18 null]
 >> endobj
-10431 0 obj <<
-/D [10428 0 R /XYZ 100.892 505.757 null]
+10419 0 obj <<
+/D [10416 0 R /XYZ 100.892 505.757 null]
 >> endobj
-10427 0 obj <<
+10415 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F29 5413 0 R /F17 3698 0 R /F51 3736 0 R /F53 3738 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10434 0 obj <<
+10422 0 obj <<
 /Length 1102      
 /Filter /FlateDecode
 >>
@@ -58134,21 +61840,21 @@
 Eý7B´ôßÉwË)|
 endstream
 endobj
-10433 0 obj <<
+10421 0 obj <<
 /Type /Page
-/Contents 10434 0 R
-/Resources 10432 0 R
+/Contents 10422 0 R
+/Resources 10420 0 R
 /MediaBox [0 0 612 792]
-/Parent 10436 0 R
+/Parent 10424 0 R
 >> endobj
-10435 0 obj <<
-/D [10433 0 R /XYZ 151.701 685.529 null]
+10423 0 obj <<
+/D [10421 0 R /XYZ 151.701 685.529 null]
 >> endobj
-10432 0 obj <<
+10420 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10441 0 obj <<
+10429 0 obj <<
 /Length 1108      
 /Filter /FlateDecode
 >>
@@ -58165,40 +61871,40 @@
 ‰ î`¦­-­H½˜»ÊÄܺmÔãÍhGøTøxy;\
 endstream
 endobj
-10440 0 obj <<
+10428 0 obj <<
 /Type /Page
-/Contents 10441 0 R
-/Resources 10439 0 R
+/Contents 10429 0 R
+/Resources 10427 0 R
 /MediaBox [0 0 612 792]
-/Parent 10436 0 R
-/Annots [ 10437 0 R 10438 0 R ]
+/Parent 10424 0 R
+/Annots [ 10425 0 R 10426 0 R ]
 >> endobj
-10437 0 obj <<
+10425 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [135.653 212.188 378.188 224.18]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.craigelachie.org/rhacer/ntlogon)>>
 >> endobj
-10438 0 obj <<
+10426 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [135.653 191.623 263.644 203.616]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.kixtart.org)>>
 >> endobj
-10442 0 obj <<
-/D [10440 0 R /XYZ 100.892 685.529 null]
+10430 0 obj <<
+/D [10428 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2586 0 obj <<
-/D [10440 0 R /XYZ 100.892 179.135 null]
+/D [10428 0 R /XYZ 100.892 179.135 null]
 >> endobj
-10443 0 obj <<
-/D [10440 0 R /XYZ 100.892 153.034 null]
+10431 0 obj <<
+/D [10428 0 R /XYZ 100.892 153.034 null]
 >> endobj
-10439 0 obj <<
+10427 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R /F51 3736 0 R /F52 3737 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10448 0 obj <<
+10436 0 obj <<
 /Length 1366      
 /Filter /FlateDecode
 >>
@@ -58219,41 +61925,41 @@
 û¯¥qzŠì½C„šÏŹþ±8ﶞtBŸºÖ‰(¸(“óƒ8ç—2{)~ü2ôaӝé·}E¿[í;/â÷7ðÌXÝZÄëÄÖŸ—É<;†|±Uÿùõª"•ð®[UߢÊ8‚Þ¦(rϾ<æ)pŽ³ô¼)ËÅI^ð2N±'+ãàäg.n¯‹su‘ùypnx¾ÝNó0ØÑñÎÔÔYòÚvÛFïÔ®¦áõT›æå_w/t¿|2 ×‹Çnòä¨3Ï’²ày*—Ã^é>ý’ÿ AÉ
 endstream
 endobj
-10447 0 obj <<
+10435 0 obj <<
 /Type /Page
-/Contents 10448 0 R
-/Resources 10446 0 R
+/Contents 10436 0 R
+/Resources 10434 0 R
 /MediaBox [0 0 612 792]
-/Parent 10436 0 R
-/Annots [ 10445 0 R 10444 0 R ]
+/Parent 10424 0 R
+/Annots [ 10433 0 R 10432 0 R ]
 >> endobj
-10445 0 obj <<
+10433 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 357.009 225.879 368.699]
 /Subtype /Link
 /A << /S /GoTo /D (Tpees) >>
 >> endobj
-10444 0 obj <<
+10432 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 464.096 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://support.microsoft.com/default.asp?scid=kb;en-us;189105)>>
 >> endobj
-10449 0 obj <<
-/D [10447 0 R /XYZ 151.701 685.529 null]
+10437 0 obj <<
+/D [10435 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2590 0 obj <<
-/D [10447 0 R /XYZ 151.701 587.204 null]
+/D [10435 0 R /XYZ 151.701 587.204 null]
 >> endobj
-10450 0 obj <<
-/D [10447 0 R /XYZ 151.701 561.04 null]
+10438 0 obj <<
+/D [10435 0 R /XYZ 151.701 561.04 null]
 >> endobj
-10446 0 obj <<
+10434 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F29 5413 0 R /F17 3698 0 R /F85 5513 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10454 0 obj <<
+10442 0 obj <<
 /Length 527       
 /Filter /FlateDecode
 >>
@@ -58262,27 +61968,27 @@
 Ú*΀¦J¶ Þ sÓ}†Á_:pÓïÞÔ2Iñøœ«»Ô}XĬÙR÷ž>eMCJŸ$­Êô?Ø{	œEæ6«Ýˆ“Æ-†T}fÃZü¸!•
 endstream
 endobj
-10453 0 obj <<
+10441 0 obj <<
 /Type /Page
-/Contents 10454 0 R
-/Resources 10452 0 R
+/Contents 10442 0 R
+/Resources 10440 0 R
 /MediaBox [0 0 612 792]
-/Parent 10436 0 R
+/Parent 10424 0 R
 >> endobj
-10455 0 obj <<
-/D [10453 0 R /XYZ 100.892 685.529 null]
+10443 0 obj <<
+/D [10441 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5115 0 obj <<
-/D [10453 0 R /XYZ 100.892 481.86 null]
+/D [10441 0 R /XYZ 100.892 481.86 null]
 >> endobj
-10451 0 obj <<
-/D [10453 0 R /XYZ 100.892 464.99 null]
+10439 0 obj <<
+/D [10441 0 R /XYZ 100.892 464.99 null]
 >> endobj
-10452 0 obj <<
+10440 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10458 0 obj <<
+10446 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -58290,20 +61996,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-10457 0 obj <<
+10445 0 obj <<
 /Type /Page
-/Contents 10458 0 R
-/Resources 10456 0 R
+/Contents 10446 0 R
+/Resources 10444 0 R
 /MediaBox [0 0 612 792]
-/Parent 10436 0 R
+/Parent 10424 0 R
 >> endobj
-10459 0 obj <<
-/D [10457 0 R /XYZ 151.701 685.529 null]
+10447 0 obj <<
+/D [10445 0 R /XYZ 151.701 685.529 null]
 >> endobj
-10456 0 obj <<
+10444 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-10462 0 obj <<
+10450 0 obj <<
 /Length 1550      
 /Filter /FlateDecode
 >>
@@ -58322,33 +62028,33 @@
 |^†â±kYˆž%$2I—Q‰pêÜwè–¶”Wõ2§¾ ¤;ÞºW³—.sðW–€Ðt$óO¦Ÿä8ýˆ½Ïn¥þ:4žAÒà÷šäÈY’ÇáÁ5âÙe†¨OÒB*®qû8Á‰YFm¥i_´¤ûàMÇ£vK£%.õ"Þ¶ ÿ{ìéý1pë’¼<Í–T©4S˜qXÞÃǍ-c{¯çv˺¡ŒŸT¢y¾"ÂHLEC+j\Ø{/ôÐx²×-H`‚7?)¾ÆLØôs”C@âG@,šq±%ù´ÿÚrw.{é†I¼É}ørU€h‘9—чÞ5™ã §«B©Ëà€•{n©IäÇrLëoþ6@ͨ{­ø‡AÅòAÓ£Â<ß㿹'/òøtÊ‚Õ¨Â_8À%Ê–¿rêìtþÆý=W¬Æ
 endstream
 endobj
-10461 0 obj <<
+10449 0 obj <<
 /Type /Page
-/Contents 10462 0 R
-/Resources 10460 0 R
+/Contents 10450 0 R
+/Resources 10448 0 R
 /MediaBox [0 0 612 792]
-/Parent 10436 0 R
+/Parent 10424 0 R
 >> endobj
-10463 0 obj <<
-/D [10461 0 R /XYZ 100.892 685.529 null]
+10451 0 obj <<
+/D [10449 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2594 0 obj <<
-/D [10461 0 R /XYZ 100.892 660.623 null]
+/D [10449 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3882 0 obj <<
-/D [10461 0 R /XYZ 100.892 474.551 null]
+/D [10449 0 R /XYZ 100.892 474.551 null]
 >> endobj
 2598 0 obj <<
-/D [10461 0 R /XYZ 100.892 376.904 null]
+/D [10449 0 R /XYZ 100.892 376.904 null]
 >> endobj
-10464 0 obj <<
-/D [10461 0 R /XYZ 100.892 348.887 null]
+10452 0 obj <<
+/D [10449 0 R /XYZ 100.892 348.887 null]
 >> endobj
-10460 0 obj <<
+10448 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10468 0 obj <<
+10456 0 obj <<
 /Length 2418      
 /Filter /FlateDecode
 >>
@@ -58366,40 +62072,40 @@
 :§øªs‚fü=}ð_£û£ÐµOìWŒ¸=/pí(÷ĵ2®s¥/¦«ÎèŸûL”ÓT,¨k_Óæڽ¯Œ±Á·ôAHN"&ì?ÄкÕqփϘ€hÀ 4°ë•w[€ßPïx7ªÿŒ(À3Ak¤{Zp.ö§„>¸¹˜¿‰D~è¡ÑgúØ݁‹ü…^jüš»øqX@Ý‘¦ê¿}*µtü8L…“h¥À•²”êŸT†"ÉW"ÊQ$3g‚^ýòÙØ”@_Ê#w¡¿Í4¼{ŸMÙ³P¤™¯“öÃpüëÝÝù|Þ^!ÀÜ];`Áoú;ÈeûÞõönÌÅàèöß®ÌJÂŒºýèâÏGg®PÛã•:3íöù¬.Y¯ÿÁÖÿú'?(
 endstream
 endobj
-10467 0 obj <<
+10455 0 obj <<
 /Type /Page
-/Contents 10468 0 R
-/Resources 10466 0 R
+/Contents 10456 0 R
+/Resources 10454 0 R
 /MediaBox [0 0 612 792]
-/Parent 10472 0 R
-/Annots [ 10465 0 R 10471 0 R ]
+/Parent 10460 0 R
+/Annots [ 10453 0 R 10459 0 R ]
 >> endobj
-10465 0 obj <<
+10453 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 129.215 511.352 140.871]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.microsoft.com/ntserver/techresources/management/prof_policies.asp)>>
 >> endobj
-10471 0 obj <<
+10459 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [150.705 116.961 209.185 127.721]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.microsoft.com/ntserver/techresources/management/prof_policies.asp)>>
 >> endobj
-10469 0 obj <<
-/D [10467 0 R /XYZ 151.701 685.529 null]
+10457 0 obj <<
+/D [10455 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2602 0 obj <<
-/D [10467 0 R /XYZ 151.701 614.791 null]
+/D [10455 0 R /XYZ 151.701 614.791 null]
 >> endobj
-10470 0 obj <<
-/D [10467 0 R /XYZ 151.701 584.444 null]
+10458 0 obj <<
+/D [10455 0 R /XYZ 151.701 584.444 null]
 >> endobj
-10466 0 obj <<
+10454 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F59 4373 0 R /F52 3737 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10475 0 obj <<
+10463 0 obj <<
 /Length 2273      
 /Filter /FlateDecode
 >>
@@ -58425,33 +62131,33 @@
 tô	î^û‰;ô¦âv]ªÔ/8Bºìkî•ö$šïOϝViÏ/ìt#Ö7‚÷ÅñX»¾HLë,²Ô¨µ~d¢üIêÄÌͧ!`úƒ×ï6WÿÁ*ù"
 endstream
 endobj
-10474 0 obj <<
+10462 0 obj <<
 /Type /Page
-/Contents 10475 0 R
-/Resources 10473 0 R
+/Contents 10463 0 R
+/Resources 10461 0 R
 /MediaBox [0 0 612 792]
-/Parent 10472 0 R
+/Parent 10460 0 R
 >> endobj
-10476 0 obj <<
-/D [10474 0 R /XYZ 100.892 685.529 null]
+10464 0 obj <<
+/D [10462 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2606 0 obj <<
-/D [10474 0 R /XYZ 100.892 617.908 null]
+/D [10462 0 R /XYZ 100.892 617.908 null]
 >> endobj
-10477 0 obj <<
-/D [10474 0 R /XYZ 100.892 589.736 null]
+10465 0 obj <<
+/D [10462 0 R /XYZ 100.892 589.736 null]
 >> endobj
 2610 0 obj <<
-/D [10474 0 R /XYZ 100.892 248.785 null]
+/D [10462 0 R /XYZ 100.892 248.785 null]
 >> endobj
-10478 0 obj <<
-/D [10474 0 R /XYZ 100.892 221.884 null]
+10466 0 obj <<
+/D [10462 0 R /XYZ 100.892 221.884 null]
 >> endobj
-10473 0 obj <<
+10461 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10481 0 obj <<
+10469 0 obj <<
 /Length 2462      
 /Filter /FlateDecode
 >>
@@ -58485,33 +62191,33 @@
 Ý*K_•Ÿ¿ç~=á·–Øû{“Vý"j’ЏÎßu8C¼#ÖwU_Nßøû0KG–µugóŽÆÜáq}“DQEü0PÏB!àö1}G¡Ôþ/Ó7Eu
 endstream
 endobj
-10480 0 obj <<
+10468 0 obj <<
 /Type /Page
-/Contents 10481 0 R
-/Resources 10479 0 R
+/Contents 10469 0 R
+/Resources 10467 0 R
 /MediaBox [0 0 612 792]
-/Parent 10472 0 R
+/Parent 10460 0 R
 >> endobj
-10482 0 obj <<
-/D [10480 0 R /XYZ 151.701 685.529 null]
+10470 0 obj <<
+/D [10468 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2614 0 obj <<
-/D [10480 0 R /XYZ 151.701 491.524 null]
+/D [10468 0 R /XYZ 151.701 491.524 null]
 >> endobj
-10483 0 obj <<
-/D [10480 0 R /XYZ 151.701 462.552 null]
+10471 0 obj <<
+/D [10468 0 R /XYZ 151.701 462.552 null]
 >> endobj
 2618 0 obj <<
-/D [10480 0 R /XYZ 151.701 345.07 null]
+/D [10468 0 R /XYZ 151.701 345.07 null]
 >> endobj
-10484 0 obj <<
-/D [10480 0 R /XYZ 151.701 317.362 null]
+10472 0 obj <<
+/D [10468 0 R /XYZ 151.701 317.362 null]
 >> endobj
-10479 0 obj <<
+10467 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10487 0 obj <<
+10475 0 obj <<
 /Length 2258      
 /Filter /FlateDecode
 >>
@@ -58539,33 +62245,33 @@
 z¥Ó`ÞGTØÿÛÝê?óñë
 endstream
 endobj
-10486 0 obj <<
+10474 0 obj <<
 /Type /Page
-/Contents 10487 0 R
-/Resources 10485 0 R
+/Contents 10475 0 R
+/Resources 10473 0 R
 /MediaBox [0 0 612 792]
-/Parent 10472 0 R
+/Parent 10460 0 R
 >> endobj
-10488 0 obj <<
-/D [10486 0 R /XYZ 100.892 685.529 null]
+10476 0 obj <<
+/D [10474 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2622 0 obj <<
-/D [10486 0 R /XYZ 100.892 249.219 null]
+/D [10474 0 R /XYZ 100.892 249.219 null]
 >> endobj
-10489 0 obj <<
-/D [10486 0 R /XYZ 100.892 220.251 null]
+10477 0 obj <<
+/D [10474 0 R /XYZ 100.892 220.251 null]
 >> endobj
-10490 0 obj <<
-/D [10486 0 R /XYZ 100.892 170.451 null]
+10478 0 obj <<
+/D [10474 0 R /XYZ 100.892 170.451 null]
 >> endobj
-10491 0 obj <<
-/D [10486 0 R /XYZ 100.892 121.245 null]
+10479 0 obj <<
+/D [10474 0 R /XYZ 100.892 121.245 null]
 >> endobj
-10485 0 obj <<
+10473 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R /F52 3737 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10494 0 obj <<
+10482 0 obj <<
 /Length 2080      
 /Filter /FlateDecode
 >>
@@ -58598,34 +62304,34 @@
  k¦#OHTïùðÚ L|9Àû/”†ÿi®-¸
 endstream
 endobj
-10493 0 obj <<
+10481 0 obj <<
 /Type /Page
-/Contents 10494 0 R
-/Resources 10492 0 R
+/Contents 10482 0 R
+/Resources 10480 0 R
 /MediaBox [0 0 612 792]
-/Parent 10472 0 R
+/Parent 10460 0 R
 >> endobj
-10495 0 obj <<
-/D [10493 0 R /XYZ 151.701 685.529 null]
+10483 0 obj <<
+/D [10481 0 R /XYZ 151.701 685.529 null]
 >> endobj
-10496 0 obj <<
-/D [10493 0 R /XYZ 151.701 620.444 null]
+10484 0 obj <<
+/D [10481 0 R /XYZ 151.701 620.444 null]
 >> endobj
-10497 0 obj <<
-/D [10493 0 R /XYZ 151.701 586.232 null]
+10485 0 obj <<
+/D [10481 0 R /XYZ 151.701 586.232 null]
 >> endobj
 2626 0 obj <<
-/D [10493 0 R /XYZ 151.701 251.674 null]
+/D [10481 0 R /XYZ 151.701 251.674 null]
 >> endobj
-10498 0 obj <<
-/D [10493 0 R /XYZ 151.701 228.187 null]
+10486 0 obj <<
+/D [10481 0 R /XYZ 151.701 228.187 null]
 >> endobj
-10492 0 obj <<
+10480 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F88 5678 0 R /F72 5679 0 R /F53 3738 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10502 0 obj <<
+10490 0 obj <<
 /Length 2341      
 /Filter /FlateDecode
 >>
@@ -58653,34 +62359,34 @@
 £T®^¤²xñú,Ã8ñEªð8\Ixÿ._’çaœ>&Nãxþîþþùù9<WÕ²_,Ÿ-ï+èÞlûï³m4¸sxÛæjó•,	F‚ŒýöZÑ^ÿÁt¿F/#}
 endstream
 endobj
-10501 0 obj <<
+10489 0 obj <<
 /Type /Page
-/Contents 10502 0 R
-/Resources 10500 0 R
+/Contents 10490 0 R
+/Resources 10488 0 R
 /MediaBox [0 0 612 792]
-/Parent 10472 0 R
-/Annots [ 10499 0 R ]
+/Parent 10460 0 R
+/Annots [ 10487 0 R ]
 >> endobj
-10499 0 obj <<
+10487 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 347.384 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.pcc-services.com/custom_poledit.html)>>
 >> endobj
-10503 0 obj <<
-/D [10501 0 R /XYZ 100.892 685.529 null]
+10491 0 obj <<
+/D [10489 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2630 0 obj <<
-/D [10501 0 R /XYZ 100.892 551.937 null]
+/D [10489 0 R /XYZ 100.892 551.937 null]
 >> endobj
-10504 0 obj <<
-/D [10501 0 R /XYZ 100.892 520.658 null]
+10492 0 obj <<
+/D [10489 0 R /XYZ 100.892 520.658 null]
 >> endobj
-10500 0 obj <<
+10488 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F29 5413 0 R /F17 3698 0 R /F53 3738 0 R /F59 4373 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10507 0 obj <<
+10495 0 obj <<
 /Length 1874      
 /Filter /FlateDecode
 >>
@@ -58707,33 +62413,33 @@
 . at Fº}UÇŒü–Šn£«ÃÔ_{Ë`ÍžÖçCs!§5L/ϳ—íŸ&Ж@¿hIYrD¼Gµ0ò5s,¾òwÄÀî~jÎY超G]IJâÐ	re(ñ½=M-‹vøbsàšËÁÿ±©æ’ûsòý'†)µ(ó…/Vocÿ}wØüè
 endstream
 endobj
-10506 0 obj <<
+10494 0 obj <<
 /Type /Page
-/Contents 10507 0 R
-/Resources 10505 0 R
+/Contents 10495 0 R
+/Resources 10493 0 R
 /MediaBox [0 0 612 792]
-/Parent 10511 0 R
+/Parent 10499 0 R
 >> endobj
-10508 0 obj <<
-/D [10506 0 R /XYZ 151.701 685.529 null]
+10496 0 obj <<
+/D [10494 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2634 0 obj <<
-/D [10506 0 R /XYZ 151.701 384.821 null]
+/D [10494 0 R /XYZ 151.701 384.821 null]
 >> endobj
-10509 0 obj <<
-/D [10506 0 R /XYZ 151.701 352.456 null]
+10497 0 obj <<
+/D [10494 0 R /XYZ 151.701 352.456 null]
 >> endobj
 2638 0 obj <<
-/D [10506 0 R /XYZ 151.701 280.787 null]
+/D [10494 0 R /XYZ 151.701 280.787 null]
 >> endobj
-10510 0 obj <<
-/D [10506 0 R /XYZ 151.701 251.131 null]
+10498 0 obj <<
+/D [10494 0 R /XYZ 151.701 251.131 null]
 >> endobj
-10505 0 obj <<
+10493 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F51 3736 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10514 0 obj <<
+10502 0 obj <<
 /Length 1862      
 /Filter /FlateDecode
 >>
@@ -58760,54 +62466,54 @@
 ÇŸ$¡7:î>N˜S*S³±œ¹§;ÑÇŠ«XؾMáë@i4¿¼T,Kà嬂ó„súnËpàóíUÝ÷n5ùç	ÒJ
 endstream
 endobj
-10513 0 obj <<
+10501 0 obj <<
 /Type /Page
-/Contents 10514 0 R
-/Resources 10512 0 R
+/Contents 10502 0 R
+/Resources 10500 0 R
 /MediaBox [0 0 612 792]
-/Parent 10511 0 R
+/Parent 10499 0 R
 >> endobj
-10515 0 obj <<
-/D [10513 0 R /XYZ 100.892 685.529 null]
+10503 0 obj <<
+/D [10501 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2642 0 obj <<
-/D [10513 0 R /XYZ 100.892 660.623 null]
+/D [10501 0 R /XYZ 100.892 660.623 null]
 >> endobj
-10516 0 obj <<
-/D [10513 0 R /XYZ 100.892 641.039 null]
+10504 0 obj <<
+/D [10501 0 R /XYZ 100.892 641.039 null]
 >> endobj
 2646 0 obj <<
-/D [10513 0 R /XYZ 100.892 540.002 null]
+/D [10501 0 R /XYZ 100.892 540.002 null]
 >> endobj
-10517 0 obj <<
-/D [10513 0 R /XYZ 100.892 515.89 null]
+10505 0 obj <<
+/D [10501 0 R /XYZ 100.892 515.89 null]
 >> endobj
 2650 0 obj <<
-/D [10513 0 R /XYZ 100.892 437.562 null]
+/D [10501 0 R /XYZ 100.892 437.562 null]
 >> endobj
-10518 0 obj <<
-/D [10513 0 R /XYZ 100.892 405.992 null]
+10506 0 obj <<
+/D [10501 0 R /XYZ 100.892 405.992 null]
 >> endobj
-10519 0 obj <<
-/D [10513 0 R /XYZ 100.892 372.243 null]
+10507 0 obj <<
+/D [10501 0 R /XYZ 100.892 372.243 null]
 >> endobj
-10520 0 obj <<
-/D [10513 0 R /XYZ 100.892 337.491 null]
+10508 0 obj <<
+/D [10501 0 R /XYZ 100.892 337.491 null]
 >> endobj
-10521 0 obj <<
-/D [10513 0 R /XYZ 100.892 196.585 null]
+10509 0 obj <<
+/D [10501 0 R /XYZ 100.892 196.585 null]
 >> endobj
-10522 0 obj <<
-/D [10513 0 R /XYZ 100.892 173.261 null]
+10510 0 obj <<
+/D [10501 0 R /XYZ 100.892 173.261 null]
 >> endobj
-10523 0 obj <<
-/D [10513 0 R /XYZ 100.892 152.664 null]
+10511 0 obj <<
+/D [10501 0 R /XYZ 100.892 152.664 null]
 >> endobj
-10512 0 obj <<
+10500 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10526 0 obj <<
+10514 0 obj <<
 /Length 1806      
 /Filter /FlateDecode
 >>
@@ -58834,45 +62540,45 @@
 º«8ÒT큟yA NúñÞ¸aà>‹q28Š“9 4ŒÀk8¾]BÛåì;”ìz½˜üñN—¥
 endstream
 endobj
-10525 0 obj <<
+10513 0 obj <<
 /Type /Page
-/Contents 10526 0 R
-/Resources 10524 0 R
+/Contents 10514 0 R
+/Resources 10512 0 R
 /MediaBox [0 0 612 792]
-/Parent 10511 0 R
+/Parent 10499 0 R
 >> endobj
-10527 0 obj <<
-/D [10525 0 R /XYZ 151.701 685.529 null]
+10515 0 obj <<
+/D [10513 0 R /XYZ 151.701 685.529 null]
 >> endobj
-10528 0 obj <<
-/D [10525 0 R /XYZ 151.701 660.623 null]
+10516 0 obj <<
+/D [10513 0 R /XYZ 151.701 660.623 null]
 >> endobj
-10529 0 obj <<
-/D [10525 0 R /XYZ 151.701 525.6 null]
+10517 0 obj <<
+/D [10513 0 R /XYZ 151.701 525.6 null]
 >> endobj
-10530 0 obj <<
-/D [10525 0 R /XYZ 151.701 491.727 null]
+10518 0 obj <<
+/D [10513 0 R /XYZ 151.701 491.727 null]
 >> endobj
-10531 0 obj <<
-/D [10525 0 R /XYZ 151.701 432.877 null]
+10519 0 obj <<
+/D [10513 0 R /XYZ 151.701 432.877 null]
 >> endobj
 2654 0 obj <<
-/D [10525 0 R /XYZ 151.701 366.894 null]
+/D [10513 0 R /XYZ 151.701 366.894 null]
 >> endobj
-10532 0 obj <<
-/D [10525 0 R /XYZ 151.701 340.237 null]
+10520 0 obj <<
+/D [10513 0 R /XYZ 151.701 340.237 null]
 >> endobj
 2658 0 obj <<
-/D [10525 0 R /XYZ 151.701 291.326 null]
+/D [10513 0 R /XYZ 151.701 291.326 null]
 >> endobj
-10533 0 obj <<
-/D [10525 0 R /XYZ 151.701 265.162 null]
+10521 0 obj <<
+/D [10513 0 R /XYZ 151.701 265.162 null]
 >> endobj
-10524 0 obj <<
+10512 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F51 3736 0 R /F17 3698 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10536 0 obj <<
+10524 0 obj <<
 /Length 1161      
 /Filter /FlateDecode
 >>
@@ -58887,40 +62593,40 @@
 Ïbó'¤ PÇ¿`h@Ï´ù_Ggþã¥3Ï^ªFLs®ñ…ª² Ix*üÃ-–ÒÅrƒ˜þC¼~
 endstream
 endobj
-10535 0 obj <<
+10523 0 obj <<
 /Type /Page
-/Contents 10536 0 R
-/Resources 10534 0 R
+/Contents 10524 0 R
+/Resources 10522 0 R
 /MediaBox [0 0 612 792]
-/Parent 10511 0 R
+/Parent 10499 0 R
 >> endobj
-10537 0 obj <<
-/D [10535 0 R /XYZ 100.892 685.529 null]
+10525 0 obj <<
+/D [10523 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2662 0 obj <<
-/D [10535 0 R /XYZ 100.892 660.623 null]
+/D [10523 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3883 0 obj <<
-/D [10535 0 R /XYZ 100.892 476.879 null]
+/D [10523 0 R /XYZ 100.892 476.879 null]
 >> endobj
 2666 0 obj <<
-/D [10535 0 R /XYZ 100.892 476.879 null]
+/D [10523 0 R /XYZ 100.892 476.879 null]
 >> endobj
-10538 0 obj <<
-/D [10535 0 R /XYZ 100.892 447.905 null]
+10526 0 obj <<
+/D [10523 0 R /XYZ 100.892 447.905 null]
 >> endobj
 2670 0 obj <<
-/D [10535 0 R /XYZ 100.892 258.929 null]
+/D [10523 0 R /XYZ 100.892 258.929 null]
 >> endobj
-10539 0 obj <<
-/D [10535 0 R /XYZ 100.892 229.557 null]
+10527 0 obj <<
+/D [10523 0 R /XYZ 100.892 229.557 null]
 >> endobj
-10534 0 obj <<
+10522 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F88 5678 0 R /F72 5679 0 R /F50 3701 0 R >>
-/XObject << /Im3 6520 0 R >>
+/XObject << /Im3 6519 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10542 0 obj <<
+10530 0 obj <<
 /Length 2230      
 /Filter /FlateDecode
 >>
@@ -58945,45 +62651,45 @@
 ­»Çîž±É\á/	\È
 endstream
 endobj
-10541 0 obj <<
+10529 0 obj <<
 /Type /Page
-/Contents 10542 0 R
-/Resources 10540 0 R
+/Contents 10530 0 R
+/Resources 10528 0 R
 /MediaBox [0 0 612 792]
-/Parent 10511 0 R
+/Parent 10499 0 R
 >> endobj
-10543 0 obj <<
-/D [10541 0 R /XYZ 151.701 685.529 null]
+10531 0 obj <<
+/D [10529 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2674 0 obj <<
-/D [10541 0 R /XYZ 151.701 490.495 null]
+/D [10529 0 R /XYZ 151.701 490.495 null]
 >> endobj
-10544 0 obj <<
-/D [10541 0 R /XYZ 151.701 462.348 null]
+10532 0 obj <<
+/D [10529 0 R /XYZ 151.701 462.348 null]
 >> endobj
 2678 0 obj <<
-/D [10541 0 R /XYZ 151.701 409.106 null]
+/D [10529 0 R /XYZ 151.701 409.106 null]
 >> endobj
-10545 0 obj <<
-/D [10541 0 R /XYZ 151.701 380.544 null]
+10533 0 obj <<
+/D [10529 0 R /XYZ 151.701 380.544 null]
 >> endobj
-10546 0 obj <<
-/D [10541 0 R /XYZ 151.701 336.741 null]
+10534 0 obj <<
+/D [10529 0 R /XYZ 151.701 336.741 null]
 >> endobj
-10547 0 obj <<
-/D [10541 0 R /XYZ 151.701 337.924 null]
+10535 0 obj <<
+/D [10529 0 R /XYZ 151.701 337.924 null]
 >> endobj
-10548 0 obj <<
-/D [10541 0 R /XYZ 151.701 270.078 null]
+10536 0 obj <<
+/D [10529 0 R /XYZ 151.701 270.078 null]
 >> endobj
-10549 0 obj <<
-/D [10541 0 R /XYZ 151.701 270.655 null]
+10537 0 obj <<
+/D [10529 0 R /XYZ 151.701 270.655 null]
 >> endobj
-10540 0 obj <<
+10528 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F4 5484 0 R /F51 3736 0 R /F52 3737 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10552 0 obj <<
+10540 0 obj <<
 /Length 2264      
 /Filter /FlateDecode
 >>
@@ -59006,49 +62712,49 @@
 #Øu¦ÙЍ¹‘Œ›	™øÿhåv"<sÇ$WçÀëþH_ÓAŽ‰ÑOéŽ ©0gÂGb§»#ÇOPëOýõº 
 endstream
 endobj
-10551 0 obj <<
+10539 0 obj <<
 /Type /Page
-/Contents 10552 0 R
-/Resources 10550 0 R
+/Contents 10540 0 R
+/Resources 10538 0 R
 /MediaBox [0 0 612 792]
-/Parent 10511 0 R
+/Parent 10499 0 R
 >> endobj
-10553 0 obj <<
-/D [10551 0 R /XYZ 100.892 685.529 null]
+10541 0 obj <<
+/D [10539 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2682 0 obj <<
-/D [10551 0 R /XYZ 100.892 504.196 null]
+/D [10539 0 R /XYZ 100.892 504.196 null]
 >> endobj
-10554 0 obj <<
-/D [10551 0 R /XYZ 100.892 477.987 null]
+10542 0 obj <<
+/D [10539 0 R /XYZ 100.892 477.987 null]
 >> endobj
-10555 0 obj <<
-/D [10551 0 R /XYZ 100.892 371.649 null]
+10543 0 obj <<
+/D [10539 0 R /XYZ 100.892 371.649 null]
 >> endobj
-10556 0 obj <<
-/D [10551 0 R /XYZ 100.892 372.832 null]
+10544 0 obj <<
+/D [10539 0 R /XYZ 100.892 372.832 null]
 >> endobj
 2686 0 obj <<
-/D [10551 0 R /XYZ 100.892 231.558 null]
+/D [10539 0 R /XYZ 100.892 231.558 null]
 >> endobj
-10557 0 obj <<
-/D [10551 0 R /XYZ 100.892 203.137 null]
+10545 0 obj <<
+/D [10539 0 R /XYZ 100.892 203.137 null]
 >> endobj
-10558 0 obj <<
-/D [10551 0 R /XYZ 100.892 160.219 null]
+10546 0 obj <<
+/D [10539 0 R /XYZ 100.892 160.219 null]
 >> endobj
-10559 0 obj <<
-/D [10551 0 R /XYZ 100.892 160.796 null]
+10547 0 obj <<
+/D [10539 0 R /XYZ 100.892 160.796 null]
 >> endobj
-10560 0 obj <<
-/D [10551 0 R /XYZ 100.892 148.841 null]
+10548 0 obj <<
+/D [10539 0 R /XYZ 100.892 148.841 null]
 >> endobj
-10550 0 obj <<
+10538 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F85 5513 0 R /F4 5484 0 R /F51 3736 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10563 0 obj <<
+10551 0 obj <<
 /Length 1665      
 /Filter /FlateDecode
 >>
@@ -59063,27 +62769,27 @@
 |M=Ò`í=Eð¢Ê/öi2cA’²ä	hÔ~Ã4H¢gˆŒ=MµWÆ…³zŠI.Gñ‰ÿcê,rJ1P¸4Íœ4p‚¿YéÔuCÊÁ¨õ2÷¹õßi¤äÖÓ‰¢ÿÂ_ú»'ú
 endstream
 endobj
-10562 0 obj <<
+10550 0 obj <<
 /Type /Page
-/Contents 10563 0 R
-/Resources 10561 0 R
+/Contents 10551 0 R
+/Resources 10549 0 R
 /MediaBox [0 0 612 792]
-/Parent 10566 0 R
+/Parent 10554 0 R
 >> endobj
-10564 0 obj <<
-/D [10562 0 R /XYZ 151.701 685.529 null]
+10552 0 obj <<
+/D [10550 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2690 0 obj <<
-/D [10562 0 R /XYZ 151.701 599.415 null]
+/D [10550 0 R /XYZ 151.701 599.415 null]
 >> endobj
-10565 0 obj <<
-/D [10562 0 R /XYZ 151.701 570.004 null]
+10553 0 obj <<
+/D [10550 0 R /XYZ 151.701 570.004 null]
 >> endobj
-10561 0 obj <<
+10549 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10569 0 obj <<
+10557 0 obj <<
 /Length 2213      
 /Filter /FlateDecode
 >>
@@ -59111,40 +62817,40 @@
 [Kký±{´Jè3(0;m\àr%@sJ8G@Ê‘éõ *ùÅPŸ –dZŒzbÿz:À§Ù$–%*Í¿1ö–쟛‹¤6<}ô*Ðdôç3šÎ†Ãße<ûv+i£Îï‘!$®¼”rÆGχôõ!Šèèæøc¯7°ÿÛôÿ§ýÝ*TÅ¡ãÌ']ï·/ú–þEée>V‡iìjD§Â2ÜýÏS‰½vÑõ£°ô¾© ðl|…<Ó2(é°Â°šĮ́Dœ_Q½_¹ÖÞ¯©ÿù“³_CË%“T]´©ÞÙ):›}ÖÙ™J8ŸXRxk>OAs§”úRžJÒ”]ä*Jô>Aª¾îV{ûÿOWý÷‡ÕÍÿ òC
 endstream
 endobj
-10568 0 obj <<
+10556 0 obj <<
 /Type /Page
-/Contents 10569 0 R
-/Resources 10567 0 R
+/Contents 10557 0 R
+/Resources 10555 0 R
 /MediaBox [0 0 612 792]
-/Parent 10566 0 R
+/Parent 10554 0 R
 >> endobj
-10570 0 obj <<
-/D [10568 0 R /XYZ 100.892 685.529 null]
+10558 0 obj <<
+/D [10556 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2694 0 obj <<
-/D [10568 0 R /XYZ 100.892 440.344 null]
+/D [10556 0 R /XYZ 100.892 440.344 null]
 >> endobj
-10571 0 obj <<
-/D [10568 0 R /XYZ 100.892 413.977 null]
+10559 0 obj <<
+/D [10556 0 R /XYZ 100.892 413.977 null]
 >> endobj
 2698 0 obj <<
-/D [10568 0 R /XYZ 100.892 413.977 null]
+/D [10556 0 R /XYZ 100.892 413.977 null]
 >> endobj
-10572 0 obj <<
-/D [10568 0 R /XYZ 100.892 385.27 null]
+10560 0 obj <<
+/D [10556 0 R /XYZ 100.892 385.27 null]
 >> endobj
-10573 0 obj <<
-/D [10568 0 R /XYZ 100.892 234.303 null]
+10561 0 obj <<
+/D [10556 0 R /XYZ 100.892 234.303 null]
 >> endobj
-10574 0 obj <<
-/D [10568 0 R /XYZ 100.892 182.428 null]
+10562 0 obj <<
+/D [10556 0 R /XYZ 100.892 182.428 null]
 >> endobj
-10567 0 obj <<
+10555 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F53 3738 0 R /F59 4373 0 R /F52 3737 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10577 0 obj <<
+10565 0 obj <<
 /Length 2413      
 /Filter /FlateDecode
 >>
@@ -59164,27 +62870,27 @@
 öÃ%ò¯šØ‰ß^UYIöѝùŸgv¹ßîoþ£—–±
 endstream
 endobj
-10576 0 obj <<
+10564 0 obj <<
 /Type /Page
-/Contents 10577 0 R
-/Resources 10575 0 R
+/Contents 10565 0 R
+/Resources 10563 0 R
 /MediaBox [0 0 612 792]
-/Parent 10566 0 R
+/Parent 10554 0 R
 >> endobj
-10578 0 obj <<
-/D [10576 0 R /XYZ 151.701 685.529 null]
+10566 0 obj <<
+/D [10564 0 R /XYZ 151.701 685.529 null]
 >> endobj
-10579 0 obj <<
-/D [10576 0 R /XYZ 151.701 172.715 null]
+10567 0 obj <<
+/D [10564 0 R /XYZ 151.701 172.715 null]
 >> endobj
-10580 0 obj <<
-/D [10576 0 R /XYZ 151.701 139.448 null]
+10568 0 obj <<
+/D [10564 0 R /XYZ 151.701 139.448 null]
 >> endobj
-10575 0 obj <<
+10563 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10583 0 obj <<
+10571 0 obj <<
 /Length 2001      
 /Filter /FlateDecode
 >>
@@ -59211,34 +62917,34 @@
 SoiZ…ÏžŠÊYTÏk0ºî®®Ž}8¸¯q°ÂÕñ#ç¹árä M
 endstream
 endobj
-10582 0 obj <<
+10570 0 obj <<
 /Type /Page
-/Contents 10583 0 R
-/Resources 10581 0 R
+/Contents 10571 0 R
+/Resources 10569 0 R
 /MediaBox [0 0 612 792]
-/Parent 10566 0 R
+/Parent 10554 0 R
 >> endobj
-10584 0 obj <<
-/D [10582 0 R /XYZ 100.892 685.529 null]
+10572 0 obj <<
+/D [10570 0 R /XYZ 100.892 685.529 null]
 >> endobj
-10585 0 obj <<
-/D [10582 0 R /XYZ 100.892 597.438 null]
+10573 0 obj <<
+/D [10570 0 R /XYZ 100.892 597.438 null]
 >> endobj
-10586 0 obj <<
-/D [10582 0 R /XYZ 100.892 575.038 null]
+10574 0 obj <<
+/D [10570 0 R /XYZ 100.892 575.038 null]
 >> endobj
-10587 0 obj <<
-/D [10582 0 R /XYZ 100.892 538.785 null]
+10575 0 obj <<
+/D [10570 0 R /XYZ 100.892 538.785 null]
 >> endobj
-10588 0 obj <<
-/D [10582 0 R /XYZ 100.892 515.476 null]
+10576 0 obj <<
+/D [10570 0 R /XYZ 100.892 515.476 null]
 >> endobj
-10581 0 obj <<
+10569 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R /F85 5513 0 R /F59 4373 0 R /F88 5678 0 R /F72 5679 0 R >>
-/XObject << /Im3 6520 0 R >>
+/XObject << /Im3 6519 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10591 0 obj <<
+10579 0 obj <<
 /Length 2097      
 /Filter /FlateDecode
 >>
@@ -59254,39 +62960,39 @@
 &.íïÔáÿÛÍâ¬ÿž
 endstream
 endobj
-10590 0 obj <<
+10578 0 obj <<
 /Type /Page
-/Contents 10591 0 R
-/Resources 10589 0 R
+/Contents 10579 0 R
+/Resources 10577 0 R
 /MediaBox [0 0 612 792]
-/Parent 10566 0 R
+/Parent 10554 0 R
 >> endobj
-10592 0 obj <<
-/D [10590 0 R /XYZ 151.701 685.529 null]
+10580 0 obj <<
+/D [10578 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2702 0 obj <<
-/D [10590 0 R /XYZ 151.701 621.65 null]
+/D [10578 0 R /XYZ 151.701 621.65 null]
 >> endobj
-10593 0 obj <<
-/D [10590 0 R /XYZ 151.701 595.034 null]
+10581 0 obj <<
+/D [10578 0 R /XYZ 151.701 595.034 null]
 >> endobj
 2706 0 obj <<
-/D [10590 0 R /XYZ 151.701 222.231 null]
+/D [10578 0 R /XYZ 151.701 222.231 null]
 >> endobj
-10594 0 obj <<
-/D [10590 0 R /XYZ 151.701 194.995 null]
+10582 0 obj <<
+/D [10578 0 R /XYZ 151.701 194.995 null]
 >> endobj
-10595 0 obj <<
-/D [10590 0 R /XYZ 151.701 163.206 null]
+10583 0 obj <<
+/D [10578 0 R /XYZ 151.701 163.206 null]
 >> endobj
-10596 0 obj <<
-/D [10590 0 R /XYZ 151.701 140.104 null]
+10584 0 obj <<
+/D [10578 0 R /XYZ 151.701 140.104 null]
 >> endobj
-10589 0 obj <<
+10577 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10599 0 obj <<
+10587 0 obj <<
 /Length 1770      
 /Filter /FlateDecode
 >>
@@ -59301,52 +63007,52 @@
 & Å¾Ÿ”X)þá€>òž÷|)×.'W­k«k^}®ž„áîп’\vëòáÌÎÀý û	iLü¢> ì["´T©Vã.#;ËN!-¶îû	œ#2ëÿf®²
 endstream
 endobj
-10598 0 obj <<
+10586 0 obj <<
 /Type /Page
-/Contents 10599 0 R
-/Resources 10597 0 R
+/Contents 10587 0 R
+/Resources 10585 0 R
 /MediaBox [0 0 612 792]
-/Parent 10566 0 R
+/Parent 10554 0 R
 >> endobj
-10600 0 obj <<
-/D [10598 0 R /XYZ 100.892 685.529 null]
+10588 0 obj <<
+/D [10586 0 R /XYZ 100.892 685.529 null]
 >> endobj
-10601 0 obj <<
-/D [10598 0 R /XYZ 100.892 660.623 null]
+10589 0 obj <<
+/D [10586 0 R /XYZ 100.892 660.623 null]
 >> endobj
-10602 0 obj <<
-/D [10598 0 R /XYZ 100.892 649.664 null]
+10590 0 obj <<
+/D [10586 0 R /XYZ 100.892 649.664 null]
 >> endobj
-10603 0 obj <<
-/D [10598 0 R /XYZ 100.892 625.079 null]
+10591 0 obj <<
+/D [10586 0 R /XYZ 100.892 625.079 null]
 >> endobj
-10604 0 obj <<
-/D [10598 0 R /XYZ 100.892 603.827 null]
+10592 0 obj <<
+/D [10586 0 R /XYZ 100.892 603.827 null]
 >> endobj
-10605 0 obj <<
-/D [10598 0 R /XYZ 100.892 581.969 null]
+10593 0 obj <<
+/D [10586 0 R /XYZ 100.892 581.969 null]
 >> endobj
-10606 0 obj <<
-/D [10598 0 R /XYZ 100.892 427.554 null]
+10594 0 obj <<
+/D [10586 0 R /XYZ 100.892 427.554 null]
 >> endobj
-10607 0 obj <<
-/D [10598 0 R /XYZ 100.892 397.124 null]
+10595 0 obj <<
+/D [10586 0 R /XYZ 100.892 397.124 null]
 >> endobj
-10608 0 obj <<
-/D [10598 0 R /XYZ 100.892 375.266 null]
+10596 0 obj <<
+/D [10586 0 R /XYZ 100.892 375.266 null]
 >> endobj
-10609 0 obj <<
-/D [10598 0 R /XYZ 100.892 165.224 null]
+10597 0 obj <<
+/D [10586 0 R /XYZ 100.892 165.224 null]
 >> endobj
-10610 0 obj <<
-/D [10598 0 R /XYZ 100.892 165.224 null]
+10598 0 obj <<
+/D [10586 0 R /XYZ 100.892 165.224 null]
 >> endobj
-10597 0 obj <<
+10585 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F88 5678 0 R /F72 5679 0 R /F85 5513 0 R /F51 3736 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10613 0 obj <<
+10601 0 obj <<
 /Length 1546      
 /Filter /FlateDecode
 >>
@@ -59364,66 +63070,66 @@
 Nk¹/t¥29Íߟ¹*ø<[pùßé2Žñž’//}˜f*P}_‚ãCN|	ÃŒÈz£P+ÿi,]O„[À›ð+)vp¡êº°¡ÛiZ‰ÚUa§¶ÛÍÛ7 ¹k ljš}tàšÚÂEÖÛ2QÃÏtgV4 ¢ FLºNÙA¦ÕãÝ8>Ê1ŽI{ÁIªûž—Ž] ÿ%po¹æ1­Öf	¸ùgy´Å>pÅxÑ{g¨¦¾ÕžõTÝï‹Åäo2‰¼–
 endstream
 endobj
-10612 0 obj <<
+10600 0 obj <<
 /Type /Page
-/Contents 10613 0 R
-/Resources 10611 0 R
+/Contents 10601 0 R
+/Resources 10599 0 R
 /MediaBox [0 0 612 792]
-/Parent 10630 0 R
+/Parent 10618 0 R
 >> endobj
-10614 0 obj <<
-/D [10612 0 R /XYZ 151.701 685.529 null]
+10602 0 obj <<
+/D [10600 0 R /XYZ 151.701 685.529 null]
 >> endobj
-10615 0 obj <<
-/D [10612 0 R /XYZ 151.701 512.051 null]
+10603 0 obj <<
+/D [10600 0 R /XYZ 151.701 512.051 null]
 >> endobj
-10616 0 obj <<
-/D [10612 0 R /XYZ 151.701 489.469 null]
+10604 0 obj <<
+/D [10600 0 R /XYZ 151.701 489.469 null]
 >> endobj
-10617 0 obj <<
-/D [10612 0 R /XYZ 151.701 468.581 null]
+10605 0 obj <<
+/D [10600 0 R /XYZ 151.701 468.581 null]
 >> endobj
-10618 0 obj <<
-/D [10612 0 R /XYZ 151.701 444.305 null]
+10606 0 obj <<
+/D [10600 0 R /XYZ 151.701 444.305 null]
 >> endobj
-10619 0 obj <<
-/D [10612 0 R /XYZ 151.701 423.844 null]
+10607 0 obj <<
+/D [10600 0 R /XYZ 151.701 423.844 null]
 >> endobj
-10620 0 obj <<
-/D [10612 0 R /XYZ 151.701 399.141 null]
+10608 0 obj <<
+/D [10600 0 R /XYZ 151.701 399.141 null]
 >> endobj
-10621 0 obj <<
-/D [10612 0 R /XYZ 151.701 375.953 null]
+10609 0 obj <<
+/D [10600 0 R /XYZ 151.701 375.953 null]
 >> endobj
-10622 0 obj <<
-/D [10612 0 R /XYZ 151.701 353.977 null]
+10610 0 obj <<
+/D [10600 0 R /XYZ 151.701 353.977 null]
 >> endobj
-10623 0 obj <<
-/D [10612 0 R /XYZ 151.701 333.089 null]
+10611 0 obj <<
+/D [10600 0 R /XYZ 151.701 333.089 null]
 >> endobj
-10624 0 obj <<
-/D [10612 0 R /XYZ 151.701 310.934 null]
+10612 0 obj <<
+/D [10600 0 R /XYZ 151.701 310.934 null]
 >> endobj
-10625 0 obj <<
-/D [10612 0 R /XYZ 151.701 260.827 null]
+10613 0 obj <<
+/D [10600 0 R /XYZ 151.701 260.827 null]
 >> endobj
-10626 0 obj <<
-/D [10612 0 R /XYZ 151.701 225.122 null]
+10614 0 obj <<
+/D [10600 0 R /XYZ 151.701 225.122 null]
 >> endobj
-10627 0 obj <<
-/D [10612 0 R /XYZ 151.701 202.54 null]
+10615 0 obj <<
+/D [10600 0 R /XYZ 151.701 202.54 null]
 >> endobj
-10628 0 obj <<
-/D [10612 0 R /XYZ 151.701 179.958 null]
+10616 0 obj <<
+/D [10600 0 R /XYZ 151.701 179.958 null]
 >> endobj
-10629 0 obj <<
-/D [10612 0 R /XYZ 151.701 141.1 null]
+10617 0 obj <<
+/D [10600 0 R /XYZ 151.701 141.1 null]
 >> endobj
-10611 0 obj <<
+10599 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R /F52 3737 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10633 0 obj <<
+10621 0 obj <<
 /Length 2061      
 /Filter /FlateDecode
 >>
@@ -59448,39 +63154,39 @@
 º¬úHCnÀÊÛ_?n²ÿç«n?¾ÿž¿Yò!y{ˆ-a3O"•aáb÷×hügÛw*eÐQÇ)û >ä‹?ʾ«4ês«tsúÞ4ï=~Á›ÿùž[a
 endstream
 endobj
-10632 0 obj <<
+10620 0 obj <<
 /Type /Page
-/Contents 10633 0 R
-/Resources 10631 0 R
+/Contents 10621 0 R
+/Resources 10619 0 R
 /MediaBox [0 0 612 792]
-/Parent 10630 0 R
+/Parent 10618 0 R
 >> endobj
-10634 0 obj <<
-/D [10632 0 R /XYZ 100.892 685.529 null]
+10622 0 obj <<
+/D [10620 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2710 0 obj <<
-/D [10632 0 R /XYZ 100.892 660.623 null]
+/D [10620 0 R /XYZ 100.892 660.623 null]
 >> endobj
-10635 0 obj <<
-/D [10632 0 R /XYZ 100.892 641.703 null]
+10623 0 obj <<
+/D [10620 0 R /XYZ 100.892 641.703 null]
 >> endobj
 2714 0 obj <<
-/D [10632 0 R /XYZ 100.892 510.25 null]
+/D [10620 0 R /XYZ 100.892 510.25 null]
 >> endobj
-10636 0 obj <<
-/D [10632 0 R /XYZ 100.892 470.488 null]
+10624 0 obj <<
+/D [10620 0 R /XYZ 100.892 470.488 null]
 >> endobj
 2718 0 obj <<
-/D [10632 0 R /XYZ 100.892 246.267 null]
+/D [10620 0 R /XYZ 100.892 246.267 null]
 >> endobj
-10637 0 obj <<
-/D [10632 0 R /XYZ 100.892 217.065 null]
+10625 0 obj <<
+/D [10620 0 R /XYZ 100.892 217.065 null]
 >> endobj
-10631 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F29 5413 0 R /F53 3738 0 R /F59 4373 0 R /F30 5441 0 R /F60 6223 0 R >>
+10619 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F29 5413 0 R /F53 3738 0 R /F59 4373 0 R /F30 5441 0 R /F60 6222 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10642 0 obj <<
+10630 0 obj <<
 /Length 1802      
 /Filter /FlateDecode
 >>
@@ -59503,77 +63209,77 @@
 ÊFR¹nÒŸâ,ŒÅ¨®¾ÉÖ†ý6EÔ»rËÎ×4Ç_­ È”hͶÚçkW·­Mã8&@ÀàæòÂíÞÑwoaFùT`çñC&]én°0‡7(€c¿›½c—ÆÖ/Ò¯Ñq€œë¢Ü©±ŸÒ Ô¿1-xè‹e”í¸AXcŽa‰'ú_*8á4ÐÖUþ2ûvÃö*ª?]››æ´Ñÿΰ¶Ê€ÛÜãîµi‡Y&Gò@—Y Ù“#¦üÓc.P7Ð%¹^[—Œ«©S=x‹ªvЭeºcÇì¾PEýØ>’ä
 endstream
 endobj
-10641 0 obj <<
+10629 0 obj <<
 /Type /Page
-/Contents 10642 0 R
-/Resources 10640 0 R
+/Contents 10630 0 R
+/Resources 10628 0 R
 /MediaBox [0 0 612 792]
-/Parent 10630 0 R
-/Annots [ 10638 0 R 10653 0 R 10639 0 R ]
+/Parent 10618 0 R
+/Annots [ 10626 0 R 10641 0 R 10627 0 R ]
 >> endobj
-10638 0 obj <<
+10626 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.618 131.677 511.352 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (NetCommand) >>
 >> endobj
-10653 0 obj <<
+10641 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 118.128 207.243 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (NetCommand) >>
 >> endobj
-10639 0 obj <<
+10627 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [211.917 118.128 276.94 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (netmisc1) >>
 >> endobj
-10643 0 obj <<
-/D [10641 0 R /XYZ 151.701 685.529 null]
+10631 0 obj <<
+/D [10629 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2722 0 obj <<
-/D [10641 0 R /XYZ 151.701 660.623 null]
+/D [10629 0 R /XYZ 151.701 660.623 null]
 >> endobj
-10644 0 obj <<
-/D [10641 0 R /XYZ 151.701 641.897 null]
+10632 0 obj <<
+/D [10629 0 R /XYZ 151.701 641.897 null]
 >> endobj
-10645 0 obj <<
-/D [10641 0 R /XYZ 151.701 582.681 null]
+10633 0 obj <<
+/D [10629 0 R /XYZ 151.701 582.681 null]
 >> endobj
-10646 0 obj <<
-/D [10641 0 R /XYZ 151.701 546.293 null]
+10634 0 obj <<
+/D [10629 0 R /XYZ 151.701 546.293 null]
 >> endobj
-10647 0 obj <<
-/D [10641 0 R /XYZ 151.701 377.651 null]
+10635 0 obj <<
+/D [10629 0 R /XYZ 151.701 377.651 null]
 >> endobj
-10648 0 obj <<
-/D [10641 0 R /XYZ 151.701 357.669 null]
+10636 0 obj <<
+/D [10629 0 R /XYZ 151.701 357.669 null]
 >> endobj
-10649 0 obj <<
-/D [10641 0 R /XYZ 151.701 320.978 null]
+10637 0 obj <<
+/D [10629 0 R /XYZ 151.701 320.978 null]
 >> endobj
-10650 0 obj <<
-/D [10641 0 R /XYZ 151.701 298.443 null]
+10638 0 obj <<
+/D [10629 0 R /XYZ 151.701 298.443 null]
 >> endobj
-10651 0 obj <<
-/D [10641 0 R /XYZ 151.701 264.177 null]
+10639 0 obj <<
+/D [10629 0 R /XYZ 151.701 264.177 null]
 >> endobj
 2726 0 obj <<
-/D [10641 0 R /XYZ 151.701 197.535 null]
+/D [10629 0 R /XYZ 151.701 197.535 null]
 >> endobj
-10652 0 obj <<
-/D [10641 0 R /XYZ 151.701 171.182 null]
+10640 0 obj <<
+/D [10629 0 R /XYZ 151.701 171.182 null]
 >> endobj
-10640 0 obj <<
+10628 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F88 5678 0 R /F72 5679 0 R /F85 5513 0 R /F53 3738 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10658 0 obj <<
+10646 0 obj <<
 /Length 1669      
 /Filter /FlateDecode
 >>
@@ -59594,47 +63300,47 @@
 >´BÁ¡›Ò©l˜®‘Ã}''kûµ3 G&·…f‹ú¶hL]¹Åè7Ѐ]Ïí#èÖ-† o¿)¬¨Øß’a=MÆTBctLÓwV\ãÞLÌù:2U¶É‰e«à„½cÏÇÌ–¦…e&Hå_l(\Òp€Ec›fÒsÌ÷¸ÁO3§¤P;N ÐMƒÂ5†pì&¨y4Þ1÷1¾1ÅNÚ.ä)‚.“8†²ÛxoG%Ðïg`Œ°®Ý[·oL¿Û“ÌÁBÆ”ÅúH„6ï: b‹ÿh \çÖÔñOíC›Ï÷Ù¡ÖJýB-ÇîÇ¥]NÁ¾¼r½ŠþVHÿìáßž+ÛåÀŠ"oš_èÚÌHž°'ýl&Ö
 endstream
 endobj
-10657 0 obj <<
+10645 0 obj <<
 /Type /Page
-/Contents 10658 0 R
-/Resources 10656 0 R
+/Contents 10646 0 R
+/Resources 10644 0 R
 /MediaBox [0 0 612 792]
-/Parent 10630 0 R
-/Annots [ 10654 0 R ]
+/Parent 10618 0 R
+/Annots [ 10642 0 R ]
 >> endobj
-10654 0 obj <<
+10642 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 158.795 310.676 170.485]
 /Subtype /Link
 /A << /S /GoTo /D (PolicyMgmt) >>
 >> endobj
-10659 0 obj <<
-/D [10657 0 R /XYZ 100.892 685.529 null]
+10647 0 obj <<
+/D [10645 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2730 0 obj <<
-/D [10657 0 R /XYZ 100.892 660.623 null]
+/D [10645 0 R /XYZ 100.892 660.623 null]
 >> endobj
-10660 0 obj <<
-/D [10657 0 R /XYZ 100.892 644.027 null]
+10648 0 obj <<
+/D [10645 0 R /XYZ 100.892 644.027 null]
 >> endobj
 2734 0 obj <<
-/D [10657 0 R /XYZ 100.892 531.638 null]
+/D [10645 0 R /XYZ 100.892 531.638 null]
 >> endobj
-10661 0 obj <<
-/D [10657 0 R /XYZ 100.892 501.005 null]
+10649 0 obj <<
+/D [10645 0 R /XYZ 100.892 501.005 null]
 >> endobj
 2738 0 obj <<
-/D [10657 0 R /XYZ 100.892 289.925 null]
+/D [10645 0 R /XYZ 100.892 289.925 null]
 >> endobj
-10662 0 obj <<
-/D [10657 0 R /XYZ 100.892 254.259 null]
+10650 0 obj <<
+/D [10645 0 R /XYZ 100.892 254.259 null]
 >> endobj
-10656 0 obj <<
+10644 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10666 0 obj <<
+10654 0 obj <<
 /Length 1808      
 /Filter /FlateDecode
 >>
@@ -59654,43 +63360,43 @@
 ´ÕäK×4uãžÿ¼dˆè
 endstream
 endobj
-10665 0 obj <<
+10653 0 obj <<
 /Type /Page
-/Contents 10666 0 R
-/Resources 10664 0 R
+/Contents 10654 0 R
+/Resources 10652 0 R
 /MediaBox [0 0 612 792]
-/Parent 10630 0 R
-/Annots [ 10655 0 R 10663 0 R ]
+/Parent 10618 0 R
+/Annots [ 10643 0 R 10651 0 R ]
 >> endobj
-10655 0 obj <<
+10643 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [274.916 518.896 341.818 528.465]
 /Subtype /Link
 /A << /S /GoTo /D (fakeperms) >>
 >> endobj
-10663 0 obj <<
+10651 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [434.112 468.624 511.352 481.525]
 /Subtype /Link
 /A << /S /GoTo /D (profilemigrn) >>
 >> endobj
-10667 0 obj <<
-/D [10665 0 R /XYZ 151.701 685.529 null]
+10655 0 obj <<
+/D [10653 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2742 0 obj <<
-/D [10665 0 R /XYZ 151.701 357.157 null]
+/D [10653 0 R /XYZ 151.701 357.157 null]
 >> endobj
-10668 0 obj <<
-/D [10665 0 R /XYZ 151.701 321.397 null]
+10656 0 obj <<
+/D [10653 0 R /XYZ 151.701 321.397 null]
 >> endobj
-10664 0 obj <<
+10652 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10671 0 obj <<
+10659 0 obj <<
 /Length 2159      
 /Filter /FlateDecode
 >>
@@ -59717,40 +63423,40 @@
 ÷W¡ÇòøD+eN»ö[NS)ÒÇfÜ÷ÔZˆÝ·ÁÓñùyA_·oèy’~ÂÇ]b Õ‰(§>˜Sâkýï7 ¸m2€HQF|\¥2 ’dUÀ'  ¿‹x㩇¿ÀáÎý;yÃÁŠ
 endstream
 endobj
-10670 0 obj <<
+10658 0 obj <<
 /Type /Page
-/Contents 10671 0 R
-/Resources 10669 0 R
+/Contents 10659 0 R
+/Resources 10657 0 R
 /MediaBox [0 0 612 792]
-/Parent 10630 0 R
+/Parent 10618 0 R
 >> endobj
-10672 0 obj <<
-/D [10670 0 R /XYZ 100.892 685.529 null]
+10660 0 obj <<
+/D [10658 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2746 0 obj <<
-/D [10670 0 R /XYZ 100.892 550.633 null]
+/D [10658 0 R /XYZ 100.892 550.633 null]
 >> endobj
-10673 0 obj <<
-/D [10670 0 R /XYZ 100.892 525.324 null]
+10661 0 obj <<
+/D [10658 0 R /XYZ 100.892 525.324 null]
 >> endobj
 2750 0 obj <<
-/D [10670 0 R /XYZ 100.892 421.914 null]
+/D [10658 0 R /XYZ 100.892 421.914 null]
 >> endobj
-10674 0 obj <<
-/D [10670 0 R /XYZ 100.892 394.996 null]
+10662 0 obj <<
+/D [10658 0 R /XYZ 100.892 394.996 null]
 >> endobj
 2754 0 obj <<
-/D [10670 0 R /XYZ 100.892 226.649 null]
+/D [10658 0 R /XYZ 100.892 226.649 null]
 >> endobj
-10675 0 obj <<
-/D [10670 0 R /XYZ 100.892 199.981 null]
+10663 0 obj <<
+/D [10658 0 R /XYZ 100.892 199.981 null]
 >> endobj
-10669 0 obj <<
+10657 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F15 3700 0 R /F52 3737 0 R /F53 3738 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10678 0 obj <<
+10666 0 obj <<
 /Length 2101      
 /Filter /FlateDecode
 >>
@@ -59778,30 +63484,30 @@
 *àÏÞ½FîËÔR¿n“ÜWþ‹¯93­S37œçÁ0¾Ú¬þêÌ
 endstream
 endobj
-10677 0 obj <<
+10665 0 obj <<
 /Type /Page
-/Contents 10678 0 R
-/Resources 10676 0 R
+/Contents 10666 0 R
+/Resources 10664 0 R
 /MediaBox [0 0 612 792]
-/Parent 10682 0 R
+/Parent 10670 0 R
 >> endobj
-10679 0 obj <<
-/D [10677 0 R /XYZ 151.701 685.529 null]
+10667 0 obj <<
+/D [10665 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2758 0 obj <<
-/D [10677 0 R /XYZ 151.701 487.831 null]
+/D [10665 0 R /XYZ 151.701 487.831 null]
 >> endobj
-10680 0 obj <<
-/D [10677 0 R /XYZ 151.701 462.643 null]
+10668 0 obj <<
+/D [10665 0 R /XYZ 151.701 462.643 null]
 >> endobj
-10681 0 obj <<
-/D [10677 0 R /XYZ 151.701 222.092 null]
+10669 0 obj <<
+/D [10665 0 R /XYZ 151.701 222.092 null]
 >> endobj
-10676 0 obj <<
+10664 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10685 0 obj <<
+10673 0 obj <<
 /Length 2302      
 /Filter /FlateDecode
 >>
@@ -59822,30 +63528,30 @@
 Èåê‰C<ã`;\äͰ؈^[/6Œä›i‡½…~v—BÇŒ''$lHBFßWÜî¯ÿÁL.
 endstream
 endobj
-10684 0 obj <<
+10672 0 obj <<
 /Type /Page
-/Contents 10685 0 R
-/Resources 10683 0 R
+/Contents 10673 0 R
+/Resources 10671 0 R
 /MediaBox [0 0 612 792]
-/Parent 10682 0 R
+/Parent 10670 0 R
 >> endobj
-10686 0 obj <<
-/D [10684 0 R /XYZ 100.892 685.529 null]
+10674 0 obj <<
+/D [10672 0 R /XYZ 100.892 685.529 null]
 >> endobj
-10687 0 obj <<
-/D [10684 0 R /XYZ 100.892 660.623 null]
+10675 0 obj <<
+/D [10672 0 R /XYZ 100.892 660.623 null]
 >> endobj
-10688 0 obj <<
-/D [10684 0 R /XYZ 100.892 606.895 null]
+10676 0 obj <<
+/D [10672 0 R /XYZ 100.892 606.895 null]
 >> endobj
-10689 0 obj <<
-/D [10684 0 R /XYZ 100.892 545.924 null]
+10677 0 obj <<
+/D [10672 0 R /XYZ 100.892 545.924 null]
 >> endobj
-10683 0 obj <<
+10671 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10694 0 obj <<
+10682 0 obj <<
 /Length 1661      
 /Filter /FlateDecode
 >>
@@ -59866,48 +63572,48 @@
 |`T—SGŽÚÌÀØÍ÷Ï2§yÓŽeÓ½>×0¤tÇÍ«Qôá®áÔlZ˜C¸'"„ôÄ=I ¿Ë½–óŠ‚|}ØQ’¯jÇÏH¾æx—ìëïöAMiÚe<Ä>pŒHÖû8¤ªwÙWV¦¼mKU±“J"VMú‰¸×–¯ädçÐ×p’Sd$?„“PS"zâ$ìå)¹jKÆ}XQÒ°bÅÿ,üq[S½¿¬FB”“£3!j&ÈÀDv˜-e/•HRqHMý/ ê'ù
 endstream
 endobj
-10693 0 obj <<
+10681 0 obj <<
 /Type /Page
-/Contents 10694 0 R
-/Resources 10692 0 R
+/Contents 10682 0 R
+/Resources 10680 0 R
 /MediaBox [0 0 612 792]
-/Parent 10682 0 R
-/Annots [ 10690 0 R 10691 0 R ]
+/Parent 10670 0 R
+/Annots [ 10678 0 R 10679 0 R ]
 >> endobj
-10690 0 obj <<
+10678 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [286.341 540.152 337.728 549.72]
 /Subtype /Link
 /A << /S /GoTo /D (ProfileLocs) >>
 >> endobj
-10691 0 obj <<
+10679 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [308.766 220.728 360.152 230.296]
 /Subtype /Link
 /A << /S /GoTo /D (regkeys) >>
 >> endobj
-10695 0 obj <<
-/D [10693 0 R /XYZ 151.701 685.529 null]
+10683 0 obj <<
+/D [10681 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5367 0 obj <<
-/D [10693 0 R /XYZ 151.701 522.297 null]
+/D [10681 0 R /XYZ 151.701 522.297 null]
 >> endobj
-10696 0 obj <<
-/D [10693 0 R /XYZ 151.701 505.427 null]
+10684 0 obj <<
+/D [10681 0 R /XYZ 151.701 505.427 null]
 >> endobj
 5368 0 obj <<
-/D [10693 0 R /XYZ 151.701 202.872 null]
+/D [10681 0 R /XYZ 151.701 202.872 null]
 >> endobj
-10697 0 obj <<
-/D [10693 0 R /XYZ 151.701 186.002 null]
+10685 0 obj <<
+/D [10681 0 R /XYZ 151.701 186.002 null]
 >> endobj
-10692 0 obj <<
+10680 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10700 0 obj <<
+10688 0 obj <<
 /Length 1851      
 /Filter /FlateDecode
 >>
@@ -59932,28 +63638,28 @@
 Õ#e"ÕéA?5Ýôke  ô÷5ýJa˜Å/÷ë6‘LŸíù¿G†Wæd<VÆÿ]òã¿k©Ý.
 endstream
 endobj
-10699 0 obj <<
+10687 0 obj <<
 /Type /Page
-/Contents 10700 0 R
-/Resources 10698 0 R
+/Contents 10688 0 R
+/Resources 10686 0 R
 /MediaBox [0 0 612 792]
-/Parent 10682 0 R
+/Parent 10670 0 R
 >> endobj
-10701 0 obj <<
-/D [10699 0 R /XYZ 100.892 685.529 null]
+10689 0 obj <<
+/D [10687 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2762 0 obj <<
-/D [10699 0 R /XYZ 100.892 660.623 null]
+/D [10687 0 R /XYZ 100.892 660.623 null]
 >> endobj
-10702 0 obj <<
-/D [10699 0 R /XYZ 100.892 641.039 null]
+10690 0 obj <<
+/D [10687 0 R /XYZ 100.892 641.039 null]
 >> endobj
-10698 0 obj <<
+10686 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F88 5678 0 R /F72 5679 0 R /F15 3700 0 R /F53 3738 0 R /F89 6121 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10706 0 obj <<
+10694 0 obj <<
 /Length 2007      
 /Filter /FlateDecode
 >>
@@ -59975,29 +63681,29 @@
 »þ¶X…á§ùËñ#Å …ŒÒú(o¹BÆÿ °*¤Ž
 endstream
 endobj
-10705 0 obj <<
+10693 0 obj <<
 /Type /Page
-/Contents 10706 0 R
-/Resources 10704 0 R
+/Contents 10694 0 R
+/Resources 10692 0 R
 /MediaBox [0 0 612 792]
-/Parent 10682 0 R
-/Annots [ 10703 0 R ]
+/Parent 10670 0 R
+/Annots [ 10691 0 R ]
 >> endobj
-10703 0 obj <<
+10691 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.675 287.356 301.061 296.924]
 /Subtype /Link
 /A << /S /GoTo /D (defregpthkeys) >>
 >> endobj
-10707 0 obj <<
-/D [10705 0 R /XYZ 151.701 685.529 null]
+10695 0 obj <<
+/D [10693 0 R /XYZ 151.701 685.529 null]
 >> endobj
-10704 0 obj <<
+10692 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10711 0 obj <<
+10699 0 obj <<
 /Length 2191      
 /Filter /FlateDecode
 >>
@@ -60016,27 +63722,27 @@
 ç8X—*±Øz­ÚÊujŸ~ÔGóSY>žÖÛÇi•A¢\˜JbÄlãOµÝ?Þ½UUÍì¿ ,åV´Sqçª3ƒÙ8ÞÎÛ«MÝxÃÉõë ¾Êa’o,É#ÖßX”ï»×ßaí‹ÃeeÞIAk¹‚ÇÄr`AÞt1mÑÌÉš¡bü׋_®Me«Û>\%Žd¨¼×¤2 $ÆHà- E9$HÕ?æ³ìSd(Gl;6ÊÊ+’ÁŠv›+%KKMVùúÎ'“E?®¥TÞ”QpbL¯JõݝªÓà~ªÚ,ÌzlP5…|2ò-%ibrZ¶0õb{^WØ°Yfõ“Á É­0X+“õ³ªs›ûƒ’šÙÊV™‰Yo27‹ÀÎXyõýùÛß/~8=¹øýòäôÕë«sÙßÎæç—ºTÞ66£_æiUÖР*:T¨ùèj®šN7U•­›Ÿ #çåZµhpÑ«Ô4àRQÞ™N_eEÖd7ä»Ó$]f_ý{ñPV‹o±ùcþ+ÀÓ;æ°tù«’
 endstream
 endobj
-10710 0 obj <<
+10698 0 obj <<
 /Type /Page
-/Contents 10711 0 R
-/Resources 10709 0 R
+/Contents 10699 0 R
+/Resources 10697 0 R
 /MediaBox [0 0 612 792]
-/Parent 10682 0 R
+/Parent 10670 0 R
 >> endobj
-10712 0 obj <<
-/D [10710 0 R /XYZ 100.892 685.529 null]
+10700 0 obj <<
+/D [10698 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5369 0 obj <<
-/D [10710 0 R /XYZ 100.892 660.623 null]
+/D [10698 0 R /XYZ 100.892 660.623 null]
 >> endobj
-10708 0 obj <<
-/D [10710 0 R /XYZ 100.892 643.753 null]
+10696 0 obj <<
+/D [10698 0 R /XYZ 100.892 643.753 null]
 >> endobj
-10709 0 obj <<
+10697 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F51 3736 0 R /F53 3738 0 R /F85 5513 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10715 0 obj <<
+10703 0 obj <<
 /Length 1652      
 /Filter /FlateDecode
 >>
@@ -60052,39 +63758,39 @@
 yçw(¸Ÿo‡~É…ƒ—€Kܙ銣Ž<4¾:°öšãÈ#|)|ú­œ¯'Ýœý§LG?ܽrö+õå¢à_‹vàOz_”ÇñÕãêTûF 
 endstream
 endobj
-10714 0 obj <<
+10702 0 obj <<
 /Type /Page
-/Contents 10715 0 R
-/Resources 10713 0 R
+/Contents 10703 0 R
+/Resources 10701 0 R
 /MediaBox [0 0 612 792]
-/Parent 10720 0 R
+/Parent 10708 0 R
 >> endobj
-10716 0 obj <<
-/D [10714 0 R /XYZ 151.701 685.529 null]
+10704 0 obj <<
+/D [10702 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2766 0 obj <<
-/D [10714 0 R /XYZ 151.701 628.041 null]
+/D [10702 0 R /XYZ 151.701 628.041 null]
 >> endobj
-10717 0 obj <<
-/D [10714 0 R /XYZ 151.701 600.086 null]
+10705 0 obj <<
+/D [10702 0 R /XYZ 151.701 600.086 null]
 >> endobj
 2770 0 obj <<
-/D [10714 0 R /XYZ 151.701 546.814 null]
+/D [10702 0 R /XYZ 151.701 546.814 null]
 >> endobj
-10718 0 obj <<
-/D [10714 0 R /XYZ 151.701 519.352 null]
+10706 0 obj <<
+/D [10702 0 R /XYZ 151.701 519.352 null]
 >> endobj
 2774 0 obj <<
-/D [10714 0 R /XYZ 151.701 243.219 null]
+/D [10702 0 R /XYZ 151.701 243.219 null]
 >> endobj
-10719 0 obj <<
-/D [10714 0 R /XYZ 151.701 216.363 null]
+10707 0 obj <<
+/D [10702 0 R /XYZ 151.701 216.363 null]
 >> endobj
-10713 0 obj <<
+10701 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10723 0 obj <<
+10711 0 obj <<
 /Length 1871      
 /Filter /FlateDecode
 >>
@@ -60098,21 +63804,21 @@
 /@/†R6Çù¾ÞKr•Þ2V$V/øG½€LkØzë y®AFZˈ%¡ìâÍ6-0+µ½¿7ºi¬{F™é¡6Zµ.KaE^5áÅPÑG§_÷vÐ’íb‘Ž ‰Þ^ÓÀ–X4Ý;›ÐC0sòçÐn0öY9ùxÅ%ÛKÁ5^ PºÁ±Ø¤Æg'Cý¥îªÎúBÆ^«9£‘¢‚³“ÚÖ>Ëúˆ©©VÔˆó9=ÕŸTHpƒ®Bï‰rñ#!ô4à,zuMƒ#Ü1$Ë$gBÞê}¥¶ÃÎÙâÛ‚ÐÖØÐã¸R9¬î	é%µ¶ÁÒôÉ8M+ô¸àü„±ÜÁÓ¦0‘`ŸOþ–ƒíæW¼ºÙ9t ;sª{ÿ¾Û9L7¾}B¦‚I½WÚHUÚg¶Q:^gïšdp¯Åï>|o¯…òÔuµoù<NM:ÄÙÁ?f-zðýƨŸþú•:°;ò댹æn5«ˆ@Ì™¹ëÇàÞåyì‹#J™ù(‘Xt\dî´s¼'Ђ{ô’5\Ce€«ƒŸMë<†f6´ìßx×}nªvµ3•o`꾚5ÑÛº4ºƒ|úê+‡ÇêÎM€!Ì ÿÖž0 DN¨šÉmûKKÒ¦8Àð	é†6:ìDóöŽæ7_fm2©£`»;ÿ(ÂüïjŽëU©/¾ÄP@±Å NR×>[·©Zí2CF‘ÇçHP•!ìüóBҏ„6®Ãj}3êñ¿öJìt¤š>æüÿf³ø…V
 endstream
 endobj
-10722 0 obj <<
+10710 0 obj <<
 /Type /Page
-/Contents 10723 0 R
-/Resources 10721 0 R
+/Contents 10711 0 R
+/Resources 10709 0 R
 /MediaBox [0 0 612 792]
-/Parent 10720 0 R
+/Parent 10708 0 R
 >> endobj
-10724 0 obj <<
-/D [10722 0 R /XYZ 100.892 685.529 null]
+10712 0 obj <<
+/D [10710 0 R /XYZ 100.892 685.529 null]
 >> endobj
-10721 0 obj <<
+10709 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10727 0 obj <<
+10715 0 obj <<
 /Length 2194      
 /Filter /FlateDecode
 >>
@@ -60139,40 +63845,40 @@
 "öù^<”D±g±¨û¶Ä?æ	øÁ‚Ú>Ê–œûöNû†?»¢¿0<ŽñÛ3Á^ßø[’žôئ¤QàFß<õQ"qr³‰þbèŒÓōoZåeaut‡f,¾ü*~jL^´„ÜT6<‡ÇH€!iáe´_ËàÉ„Gç…‰#SFø$3@rÊÌécý?KhŽ¬
 endstream
 endobj
-10726 0 obj <<
+10714 0 obj <<
 /Type /Page
-/Contents 10727 0 R
-/Resources 10725 0 R
+/Contents 10715 0 R
+/Resources 10713 0 R
 /MediaBox [0 0 612 792]
-/Parent 10720 0 R
+/Parent 10708 0 R
 >> endobj
-10728 0 obj <<
-/D [10726 0 R /XYZ 151.701 685.529 null]
+10716 0 obj <<
+/D [10714 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2778 0 obj <<
-/D [10726 0 R /XYZ 151.701 474.561 null]
+/D [10714 0 R /XYZ 151.701 474.561 null]
 >> endobj
-10729 0 obj <<
-/D [10726 0 R /XYZ 151.701 447.82 null]
+10717 0 obj <<
+/D [10714 0 R /XYZ 151.701 447.82 null]
 >> endobj
-10730 0 obj <<
-/D [10726 0 R /XYZ 151.701 372.568 null]
+10718 0 obj <<
+/D [10714 0 R /XYZ 151.701 372.568 null]
 >> endobj
-10731 0 obj <<
-/D [10726 0 R /XYZ 151.701 373.145 null]
+10719 0 obj <<
+/D [10714 0 R /XYZ 151.701 373.145 null]
 >> endobj
-10732 0 obj <<
-/D [10726 0 R /XYZ 151.701 361.189 null]
+10720 0 obj <<
+/D [10714 0 R /XYZ 151.701 361.189 null]
 >> endobj
-10733 0 obj <<
-/D [10726 0 R /XYZ 151.701 349.234 null]
+10721 0 obj <<
+/D [10714 0 R /XYZ 151.701 349.234 null]
 >> endobj
-10725 0 obj <<
+10713 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F51 3736 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F4 5484 0 R /F59 4373 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10738 0 obj <<
+10726 0 obj <<
 /Length 1637      
 /Filter /FlateDecode
 >>
@@ -60199,55 +63905,55 @@
 ׸ãp÷è&ûßX%ì €PÁ¦_jÿE®q}‡E^cÙZþæ1
 endstream
 endobj
-10737 0 obj <<
+10725 0 obj <<
 /Type /Page
-/Contents 10738 0 R
-/Resources 10736 0 R
+/Contents 10726 0 R
+/Resources 10724 0 R
 /MediaBox [0 0 612 792]
-/Parent 10720 0 R
-/Annots [ 10734 0 R 10735 0 R ]
+/Parent 10708 0 R
+/Annots [ 10722 0 R 10723 0 R ]
 >> endobj
-10734 0 obj <<
+10722 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 127.92 417.993 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://support.microsoft.com/default.aspx?scid=kb;en-us;221833)>>
 >> endobj
-10735 0 obj <<
+10723 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 417.993 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://support.microsoft.com/default.aspx?scid=kb;en-us;154120)>>
 >> endobj
-10739 0 obj <<
-/D [10737 0 R /XYZ 100.892 685.529 null]
+10727 0 obj <<
+/D [10725 0 R /XYZ 100.892 685.529 null]
 >> endobj
-10740 0 obj <<
-/D [10737 0 R /XYZ 100.892 607.692 null]
+10728 0 obj <<
+/D [10725 0 R /XYZ 100.892 607.692 null]
 >> endobj
-10741 0 obj <<
-/D [10737 0 R /XYZ 100.892 608.269 null]
+10729 0 obj <<
+/D [10725 0 R /XYZ 100.892 608.269 null]
 >> endobj
-10742 0 obj <<
-/D [10737 0 R /XYZ 100.892 596.314 null]
+10730 0 obj <<
+/D [10725 0 R /XYZ 100.892 596.314 null]
 >> endobj
-10743 0 obj <<
-/D [10737 0 R /XYZ 100.892 584.359 null]
+10731 0 obj <<
+/D [10725 0 R /XYZ 100.892 584.359 null]
 >> endobj
-10744 0 obj <<
-/D [10737 0 R /XYZ 100.892 572.403 null]
+10732 0 obj <<
+/D [10725 0 R /XYZ 100.892 572.403 null]
 >> endobj
 2782 0 obj <<
-/D [10737 0 R /XYZ 100.892 533.733 null]
+/D [10725 0 R /XYZ 100.892 533.733 null]
 >> endobj
-10745 0 obj <<
-/D [10737 0 R /XYZ 100.892 498.458 null]
+10733 0 obj <<
+/D [10725 0 R /XYZ 100.892 498.458 null]
 >> endobj
-10736 0 obj <<
+10724 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F4 5484 0 R /F51 3736 0 R /F59 4373 0 R /F17 3698 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10748 0 obj <<
+10736 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -60255,20 +63961,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-10747 0 obj <<
+10735 0 obj <<
 /Type /Page
-/Contents 10748 0 R
-/Resources 10746 0 R
+/Contents 10736 0 R
+/Resources 10734 0 R
 /MediaBox [0 0 612 792]
-/Parent 10720 0 R
+/Parent 10708 0 R
 >> endobj
-10749 0 obj <<
-/D [10747 0 R /XYZ 151.701 685.529 null]
+10737 0 obj <<
+/D [10735 0 R /XYZ 151.701 685.529 null]
 >> endobj
-10746 0 obj <<
+10734 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-10753 0 obj <<
+10741 0 obj <<
 /Length 1379      
 /Filter /FlateDecode
 >>
@@ -60283,49 +63989,49 @@
 »¨"hÛâÜÍØ®CçÄß;;ÒñÃ?ñ¬2¨
 endstream
 endobj
-10752 0 obj <<
+10740 0 obj <<
 /Type /Page
-/Contents 10753 0 R
-/Resources 10751 0 R
+/Contents 10741 0 R
+/Resources 10739 0 R
 /MediaBox [0 0 612 792]
-/Parent 10720 0 R
-/Annots [ 10750 0 R 10755 0 R ]
+/Parent 10708 0 R
+/Annots [ 10738 0 R 10743 0 R ]
 >> endobj
-10750 0 obj <<
+10738 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [272.57 248.547 403.108 260.236]
 /Subtype /Link
 /A << /S /GoTo /D (winbind) >>
 >> endobj
-10755 0 obj <<
+10743 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [144.531 234.998 246.334 246.687]
 /Subtype /Link
 /A << /S /GoTo /D (winbind) >>
 >> endobj
-10754 0 obj <<
-/D [10752 0 R /XYZ 100.892 685.529 null]
+10742 0 obj <<
+/D [10740 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2786 0 obj <<
-/D [10752 0 R /XYZ 100.892 660.623 null]
+/D [10740 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3884 0 obj <<
-/D [10752 0 R /XYZ 100.892 475.995 null]
+/D [10740 0 R /XYZ 100.892 475.995 null]
 >> endobj
 2790 0 obj <<
-/D [10752 0 R /XYZ 100.892 181.614 null]
+/D [10740 0 R /XYZ 100.892 181.614 null]
 >> endobj
-10756 0 obj <<
-/D [10752 0 R /XYZ 100.892 155.756 null]
+10744 0 obj <<
+/D [10740 0 R /XYZ 100.892 155.756 null]
 >> endobj
-10751 0 obj <<
+10739 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R /F50 3701 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10759 0 obj <<
+10747 0 obj <<
 /Length 2310      
 /Filter /FlateDecode
 >>
@@ -60350,21 +64056,21 @@
 P™º$0|8R³L4¬ß ¥‡ÜXû–x”|KãWщ¾éƒ5®ÂˆÕ䁤ð<¶>z–![³ü„åk<Þ$Øcì‰h⠝,?ª‰hZÒÒóÖ‹Ã?\ï_ƒ9¿9
 endstream
 endobj
-10758 0 obj <<
+10746 0 obj <<
 /Type /Page
-/Contents 10759 0 R
-/Resources 10757 0 R
+/Contents 10747 0 R
+/Resources 10745 0 R
 /MediaBox [0 0 612 792]
-/Parent 10761 0 R
+/Parent 10749 0 R
 >> endobj
-10760 0 obj <<
-/D [10758 0 R /XYZ 151.701 685.529 null]
+10748 0 obj <<
+/D [10746 0 R /XYZ 151.701 685.529 null]
 >> endobj
-10757 0 obj <<
+10745 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10764 0 obj <<
+10752 0 obj <<
 /Length 2008      
 /Filter /FlateDecode
 >>
@@ -60394,33 +64100,33 @@
 ¼MˆM •ó‰z¨­cfúr]Ç!ëCšGsA™$¡˜²F€`9ò£ÆvþPª§RNˆlÄà³cCü:¦KJÆ*Å4ãàôz¬H¾9è¿¿¼þ«g3žèíÅùÔû¸‚¾Iö+܆§j!h%†Ø"Œ°’–éߎ§í˜®æ—gDP!½ÿpLìLk™ÎžÒ`)Õ`Êø(¤WIPc¹Ëê*ËmYá»'ä'Çž¹äLwØlñt.ô˧çô…†õw¼5~‚
 endstream
 endobj
-10763 0 obj <<
+10751 0 obj <<
 /Type /Page
-/Contents 10764 0 R
-/Resources 10762 0 R
+/Contents 10752 0 R
+/Resources 10750 0 R
 /MediaBox [0 0 612 792]
-/Parent 10761 0 R
+/Parent 10749 0 R
 >> endobj
-10765 0 obj <<
-/D [10763 0 R /XYZ 100.892 685.529 null]
+10753 0 obj <<
+/D [10751 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2794 0 obj <<
-/D [10763 0 R /XYZ 100.892 330.394 null]
+/D [10751 0 R /XYZ 100.892 330.394 null]
 >> endobj
-10766 0 obj <<
-/D [10763 0 R /XYZ 100.892 302.459 null]
+10754 0 obj <<
+/D [10751 0 R /XYZ 100.892 302.459 null]
 >> endobj
 2798 0 obj <<
-/D [10763 0 R /XYZ 100.892 208.308 null]
+/D [10751 0 R /XYZ 100.892 208.308 null]
 >> endobj
-10767 0 obj <<
-/D [10763 0 R /XYZ 100.892 181.17 null]
+10755 0 obj <<
+/D [10751 0 R /XYZ 100.892 181.17 null]
 >> endobj
-10762 0 obj <<
+10750 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10771 0 obj <<
+10759 0 obj <<
 /Length 2013      
 /Filter /FlateDecode
 >>
@@ -60446,34 +64152,34 @@
 XvS¥v<¡ªÈ§#˟˱”(K_¥£)ƒŽc¶`*~†÷šòÍÆ÷€ŽÁ?HsÉz'r5¨HEÎÔûpšæð€œdYðn`ªl*‹çhŒ¿íÛli½L	M­ó‡Ý?ÞükÍÊЛ<½vË2͈ðØÜÐÂÎJC;M?SXý·G*üMïï©•ÐéôoýË£"scRR+ÕBªl#ãDD‰^´3©¼ú[Ø`H…n&‹¼±ÿ|“¦Ì5»rF÷iί¶[ˆñÙu«DÛ·çË#Ì+Íå+N-=Ö‡í͍d“F>õ'YðÞþ‚½þ™ó>
 endstream
 endobj
-10770 0 obj <<
+10758 0 obj <<
 /Type /Page
-/Contents 10771 0 R
-/Resources 10769 0 R
+/Contents 10759 0 R
+/Resources 10757 0 R
 /MediaBox [0 0 612 792]
-/Parent 10761 0 R
-/Annots [ 10768 0 R ]
+/Parent 10749 0 R
+/Annots [ 10756 0 R ]
 >> endobj
-10768 0 obj <<
+10756 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 369.452 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://ftp.kernel.org/pub/linux/libs/pam/)>>
 >> endobj
-10772 0 obj <<
-/D [10770 0 R /XYZ 151.701 685.529 null]
+10760 0 obj <<
+/D [10758 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2802 0 obj <<
-/D [10770 0 R /XYZ 151.701 452.96 null]
+/D [10758 0 R /XYZ 151.701 452.96 null]
 >> endobj
-10773 0 obj <<
-/D [10770 0 R /XYZ 151.701 424.097 null]
+10761 0 obj <<
+/D [10758 0 R /XYZ 151.701 424.097 null]
 >> endobj
-10769 0 obj <<
+10757 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F51 3736 0 R /F53 3738 0 R /F17 3698 0 R /F29 5413 0 R /F85 5513 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10776 0 obj <<
+10764 0 obj <<
 /Length 2213      
 /Filter /FlateDecode
 >>
@@ -60508,21 +64214,21 @@
 žß„hÐ`v ê4+dts0º«ðãCÁ…€æE|€¹ŽH™³¨a!u7×—˜$Ï®ð®îdu?ºâÄøjêy’+Ÿ†¬#æûr6]ªv:º§àÒ1©k_´éž3a7âO”—¯…lâ"Åš¶“ä'}çÈ‹a4JG7‰¬²êÖ¿Øbn»ùýø™1âÜF^֍וq¾”¿zr©E™PóˆàP¶Í¬ÛÕ±®¸«dÄŽnqW	îª;T fzUEQÂß/Ì}q•†PœsßYw!düÓáE¨ªx9ùjUðÌîF7üð‡ev7ýYª5Ĭ62ÇÍ?nî:JZ~àט‚\€«<X¬lŽCÇ+î•`ñ“åþuïÙá}^yª 4É”t@$Ê?’XÇ¡¬òØ*ÿÂÀ/ç‚õ½¯ǝñÂ"ÛTzº¨¼{MŽ½ù»pδ(¾N•†yšÿïѬä/á›h~ÈO!0zl-uðµÅ˜( `Ó3BÃOËv´È¡½À¼¿­þ÷ãaóKÑç
 endstream
 endobj
-10775 0 obj <<
+10763 0 obj <<
 /Type /Page
-/Contents 10776 0 R
-/Resources 10774 0 R
+/Contents 10764 0 R
+/Resources 10762 0 R
 /MediaBox [0 0 612 792]
-/Parent 10761 0 R
+/Parent 10749 0 R
 >> endobj
-10777 0 obj <<
-/D [10775 0 R /XYZ 100.892 685.529 null]
+10765 0 obj <<
+/D [10763 0 R /XYZ 100.892 685.529 null]
 >> endobj
-10774 0 obj <<
+10762 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F85 5513 0 R /F51 3736 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10780 0 obj <<
+10768 0 obj <<
 /Length 2273      
 /Filter /FlateDecode
 >>
@@ -60547,21 +64253,21 @@
 ݼxÜhPlÑ_ ¦+ªBtˆGÉ‹Æ#!µ/ÊpÐiÇIép½	O”dØY°÷4f8¾é¯ ¬øÉßcž5~€]pí›D!ÐBµË%nE©ƒG~Wü-öy=ŒÞ½j”„^:;"´ýÑÀ=Ë_Ú©õEäô±òâã¼JKÀH at 7‡iš¾ùu>TE2}›_ø&¯ð»!@^*…|üöÇŸ~ýfØþ$ù]Kr
 endstream
 endobj
-10779 0 obj <<
+10767 0 obj <<
 /Type /Page
-/Contents 10780 0 R
-/Resources 10778 0 R
+/Contents 10768 0 R
+/Resources 10766 0 R
 /MediaBox [0 0 612 792]
-/Parent 10761 0 R
+/Parent 10749 0 R
 >> endobj
-10781 0 obj <<
-/D [10779 0 R /XYZ 151.701 685.529 null]
+10769 0 obj <<
+/D [10767 0 R /XYZ 151.701 685.529 null]
 >> endobj
-10778 0 obj <<
+10766 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F85 5513 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10784 0 obj <<
+10772 0 obj <<
 /Length 1919      
 /Filter /FlateDecode
 >>
@@ -60580,21 +64286,21 @@
 ÄòÜ÷Ýóæÿ8°qÉ
 endstream
 endobj
-10783 0 obj <<
+10771 0 obj <<
 /Type /Page
-/Contents 10784 0 R
-/Resources 10782 0 R
+/Contents 10772 0 R
+/Resources 10770 0 R
 /MediaBox [0 0 612 792]
-/Parent 10761 0 R
+/Parent 10749 0 R
 >> endobj
-10785 0 obj <<
-/D [10783 0 R /XYZ 100.892 685.529 null]
+10773 0 obj <<
+/D [10771 0 R /XYZ 100.892 685.529 null]
 >> endobj
-10782 0 obj <<
+10770 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F85 5513 0 R /F53 3738 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10788 0 obj <<
+10776 0 obj <<
 /Length 2292      
 /Filter /FlateDecode
 >>
@@ -60620,21 +64326,21 @@
 ˆÒc³@šl&Dì9õí†uòiŸÈHÌ^­/·Ø‰†ªã—-s…–_LRš¶c*'×@¬¡#q¾~øÁt}˜!s±¤ÙNôoR›Ë?…ã§èƇOLYÁ} SHø<EÌèl$8ûá”B¹x¾Ø„vÅ'åp¨Âz8r÷á³µk}P&õÑfpù±Ï³
 endstream
 endobj
-10787 0 obj <<
+10775 0 obj <<
 /Type /Page
-/Contents 10788 0 R
-/Resources 10786 0 R
+/Contents 10776 0 R
+/Resources 10774 0 R
 /MediaBox [0 0 612 792]
-/Parent 10790 0 R
+/Parent 10778 0 R
 >> endobj
-10789 0 obj <<
-/D [10787 0 R /XYZ 151.701 685.529 null]
+10777 0 obj <<
+/D [10775 0 R /XYZ 151.701 685.529 null]
 >> endobj
-10786 0 obj <<
+10774 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F51 3736 0 R /F85 5513 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10793 0 obj <<
+10781 0 obj <<
 /Length 1885      
 /Filter /FlateDecode
 >>
@@ -60653,27 +64359,27 @@
 “ËÏü³ÄÛó‚0vƒ,cY(‹æÔSµ¥¶pé1ïA=«gŠËv„®ÿ*´·
 endstream
 endobj
-10792 0 obj <<
+10780 0 obj <<
 /Type /Page
-/Contents 10793 0 R
-/Resources 10791 0 R
+/Contents 10781 0 R
+/Resources 10779 0 R
 /MediaBox [0 0 612 792]
-/Parent 10790 0 R
+/Parent 10778 0 R
 >> endobj
-10794 0 obj <<
-/D [10792 0 R /XYZ 100.892 685.529 null]
+10782 0 obj <<
+/D [10780 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2806 0 obj <<
-/D [10792 0 R /XYZ 100.892 223.265 null]
+/D [10780 0 R /XYZ 100.892 223.265 null]
 >> endobj
-10795 0 obj <<
-/D [10792 0 R /XYZ 100.892 195.574 null]
+10783 0 obj <<
+/D [10780 0 R /XYZ 100.892 195.574 null]
 >> endobj
-10791 0 obj <<
+10779 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F51 3736 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10798 0 obj <<
+10786 0 obj <<
 /Length 949       
 /Filter /FlateDecode
 >>
@@ -60691,33 +64397,33 @@
 ~ {‘ÆÄS.ëiª%z¬ñ×ðLñ_•íê¹
 endstream
 endobj
-10797 0 obj <<
+10785 0 obj <<
 /Type /Page
-/Contents 10798 0 R
-/Resources 10796 0 R
+/Contents 10786 0 R
+/Resources 10784 0 R
 /MediaBox [0 0 612 792]
-/Parent 10790 0 R
+/Parent 10778 0 R
 >> endobj
-10799 0 obj <<
-/D [10797 0 R /XYZ 151.701 685.529 null]
+10787 0 obj <<
+/D [10785 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2810 0 obj <<
-/D [10797 0 R /XYZ 151.701 660.623 null]
+/D [10785 0 R /XYZ 151.701 660.623 null]
 >> endobj
-10800 0 obj <<
-/D [10797 0 R /XYZ 151.701 641.897 null]
+10788 0 obj <<
+/D [10785 0 R /XYZ 151.701 641.897 null]
 >> endobj
 2814 0 obj <<
-/D [10797 0 R /XYZ 151.701 403.13 null]
+/D [10785 0 R /XYZ 151.701 403.13 null]
 >> endobj
-10801 0 obj <<
-/D [10797 0 R /XYZ 151.701 373.723 null]
+10789 0 obj <<
+/D [10785 0 R /XYZ 151.701 373.723 null]
 >> endobj
-10796 0 obj <<
+10784 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10804 0 obj <<
+10792 0 obj <<
 /Length 1822      
 /Filter /FlateDecode
 >>
@@ -60738,21 +64444,21 @@
 ò3ä>sÅ`ü£:>QþÌè­s
 endstream
 endobj
-10803 0 obj <<
+10791 0 obj <<
 /Type /Page
-/Contents 10804 0 R
-/Resources 10802 0 R
+/Contents 10792 0 R
+/Resources 10790 0 R
 /MediaBox [0 0 612 792]
-/Parent 10790 0 R
+/Parent 10778 0 R
 >> endobj
-10805 0 obj <<
-/D [10803 0 R /XYZ 100.892 685.529 null]
+10793 0 obj <<
+/D [10791 0 R /XYZ 100.892 685.529 null]
 >> endobj
-10802 0 obj <<
+10790 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10808 0 obj <<
+10796 0 obj <<
 /Length 1870      
 /Filter /FlateDecode
 >>
@@ -60778,28 +64484,28 @@
 Üåö4j§Í\G¹ü?›±Ãé
 endstream
 endobj
-10807 0 obj <<
+10795 0 obj <<
 /Type /Page
-/Contents 10808 0 R
-/Resources 10806 0 R
+/Contents 10796 0 R
+/Resources 10794 0 R
 /MediaBox [0 0 612 792]
-/Parent 10790 0 R
+/Parent 10778 0 R
 >> endobj
-10809 0 obj <<
-/D [10807 0 R /XYZ 151.701 685.529 null]
+10797 0 obj <<
+/D [10795 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2818 0 obj <<
-/D [10807 0 R /XYZ 151.701 265.069 null]
+/D [10795 0 R /XYZ 151.701 265.069 null]
 >> endobj
-10810 0 obj <<
-/D [10807 0 R /XYZ 151.701 240.977 null]
+10798 0 obj <<
+/D [10795 0 R /XYZ 151.701 240.977 null]
 >> endobj
-10806 0 obj <<
+10794 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10813 0 obj <<
+10801 0 obj <<
 /Length 1981      
 /Filter /FlateDecode
 >>
@@ -60827,27 +64533,27 @@
 Èêz
 endstream
 endobj
-10812 0 obj <<
+10800 0 obj <<
 /Type /Page
-/Contents 10813 0 R
-/Resources 10811 0 R
+/Contents 10801 0 R
+/Resources 10799 0 R
 /MediaBox [0 0 612 792]
-/Parent 10790 0 R
+/Parent 10778 0 R
 >> endobj
-10814 0 obj <<
-/D [10812 0 R /XYZ 100.892 685.529 null]
+10802 0 obj <<
+/D [10800 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2822 0 obj <<
-/D [10812 0 R /XYZ 100.892 557.401 null]
+/D [10800 0 R /XYZ 100.892 557.401 null]
 >> endobj
-10815 0 obj <<
-/D [10812 0 R /XYZ 100.892 522.36 null]
+10803 0 obj <<
+/D [10800 0 R /XYZ 100.892 522.36 null]
 >> endobj
-10811 0 obj <<
+10799 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F17 3698 0 R /F53 3738 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10819 0 obj <<
+10807 0 obj <<
 /Length 2134      
 /Filter /FlateDecode
 >>
@@ -60873,42 +64579,42 @@
 (0bƒýnÑdž9cÎÞ*‚-¾<…ƒºè-D"¢ŠÿèÞüåÃÍû5\³„ZސWƒµÀRë /QØ›¥o†â¡¡¿¤ì+D€‹äã¿›vßn«&6—©#¤êÿ ÓŠy
 endstream
 endobj
-10818 0 obj <<
+10806 0 obj <<
 /Type /Page
-/Contents 10819 0 R
-/Resources 10817 0 R
+/Contents 10807 0 R
+/Resources 10805 0 R
 /MediaBox [0 0 612 792]
-/Parent 10823 0 R
-/Annots [ 10816 0 R ]
+/Parent 10811 0 R
+/Annots [ 10804 0 R ]
 >> endobj
-10816 0 obj <<
+10804 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [384.281 343.576 435.667 355.265]
 /Subtype /Link
 /A << /S /GoTo /D (smbpassoptions) >>
 >> endobj
-10820 0 obj <<
-/D [10818 0 R /XYZ 151.701 685.529 null]
+10808 0 obj <<
+/D [10806 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2826 0 obj <<
-/D [10818 0 R /XYZ 151.701 526.519 null]
+/D [10806 0 R /XYZ 151.701 526.519 null]
 >> endobj
-10821 0 obj <<
-/D [10818 0 R /XYZ 151.701 501.91 null]
+10809 0 obj <<
+/D [10806 0 R /XYZ 151.701 501.91 null]
 >> endobj
 2830 0 obj <<
-/D [10818 0 R /XYZ 151.701 282.302 null]
+/D [10806 0 R /XYZ 151.701 282.302 null]
 >> endobj
-10822 0 obj <<
-/D [10818 0 R /XYZ 151.701 255.757 null]
+10810 0 obj <<
+/D [10806 0 R /XYZ 151.701 255.757 null]
 >> endobj
-10817 0 obj <<
+10805 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F53 3738 0 R /F15 3700 0 R >>
-/XObject << /Im3 6520 0 R >>
+/XObject << /Im3 6519 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10827 0 obj <<
+10815 0 obj <<
 /Length 2374      
 /Filter /FlateDecode
 >>
@@ -60937,33 +64643,33 @@
 à(/YÏ =i‚ëzë¯ëã}ªˆQ}õÔ]².Ï}qU9B&‚Ô8Rù	Jþ7]R÷Ñîß>{üÿðÁÿ#—¿®
 endstream
 endobj
-10826 0 obj <<
+10814 0 obj <<
 /Type /Page
-/Contents 10827 0 R
-/Resources 10825 0 R
+/Contents 10815 0 R
+/Resources 10813 0 R
 /MediaBox [0 0 612 792]
-/Parent 10823 0 R
+/Parent 10811 0 R
 >> endobj
-10828 0 obj <<
-/D [10826 0 R /XYZ 100.892 685.529 null]
+10816 0 obj <<
+/D [10814 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5371 0 obj <<
-/D [10826 0 R /XYZ 100.892 660.623 null]
+/D [10814 0 R /XYZ 100.892 660.623 null]
 >> endobj
-10824 0 obj <<
-/D [10826 0 R /XYZ 100.892 643.753 null]
+10812 0 obj <<
+/D [10814 0 R /XYZ 100.892 643.753 null]
 >> endobj
 2834 0 obj <<
-/D [10826 0 R /XYZ 100.892 228.735 null]
+/D [10814 0 R /XYZ 100.892 228.735 null]
 >> endobj
-10829 0 obj <<
-/D [10826 0 R /XYZ 100.892 197.139 null]
+10817 0 obj <<
+/D [10814 0 R /XYZ 100.892 197.139 null]
 >> endobj
-10825 0 obj <<
+10813 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F85 5513 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10832 0 obj <<
+10820 0 obj <<
 /Length 1125      
 /Filter /FlateDecode
 >>
@@ -60984,33 +64690,33 @@
 à+øâÇøâf»IÚþÞÆÊÕÖœH#/D@>ƒ`RžÏŠB0BÁ`*"Hõåa‘ìGE3"ë0ëJYdâýX¸$žÉÁ¼Ç`õ€‰<bÇå×ÖkÈ„PÆyÄå 4Cê%"nS2ïoñ˜	ô…FV8ü<5K9æ.cH¶‘©'…1• .À™%—æQöâO¥MÀŠUøûþã²ÿ|xwkûú jž=6A7PÓ“pî–Êʳê1Ôt®ìaÏc	ŸÛH°…ƒL,üДH™bÿ/1¬„ ÆB
 endstream
 endobj
-10831 0 obj <<
+10819 0 obj <<
 /Type /Page
-/Contents 10832 0 R
-/Resources 10830 0 R
+/Contents 10820 0 R
+/Resources 10818 0 R
 /MediaBox [0 0 612 792]
-/Parent 10823 0 R
+/Parent 10811 0 R
 >> endobj
-10833 0 obj <<
-/D [10831 0 R /XYZ 151.701 685.529 null]
+10821 0 obj <<
+/D [10819 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2838 0 obj <<
-/D [10831 0 R /XYZ 151.701 458.104 null]
+/D [10819 0 R /XYZ 151.701 458.104 null]
 >> endobj
-10834 0 obj <<
-/D [10831 0 R /XYZ 151.701 428.951 null]
+10822 0 obj <<
+/D [10819 0 R /XYZ 151.701 428.951 null]
 >> endobj
 2842 0 obj <<
-/D [10831 0 R /XYZ 151.701 196.751 null]
+/D [10819 0 R /XYZ 151.701 196.751 null]
 >> endobj
-10835 0 obj <<
-/D [10831 0 R /XYZ 151.701 167.598 null]
+10823 0 obj <<
+/D [10819 0 R /XYZ 151.701 167.598 null]
 >> endobj
-10830 0 obj <<
+10818 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F17 3698 0 R /F15 3700 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10838 0 obj <<
+10826 0 obj <<
 /Length 1323      
 /Filter /FlateDecode
 >>
@@ -61029,33 +64735,33 @@
 5…PÀ°X”‹£PO…“QLS6½‘ï¥8Ôövê6²¦ƒüÿ=è?„HF)h]& ¬}tü±8|C°ômüå¾àЍíûŠ
 endstream
 endobj
-10837 0 obj <<
+10825 0 obj <<
 /Type /Page
-/Contents 10838 0 R
-/Resources 10836 0 R
+/Contents 10826 0 R
+/Resources 10824 0 R
 /MediaBox [0 0 612 792]
-/Parent 10823 0 R
+/Parent 10811 0 R
 >> endobj
-10839 0 obj <<
-/D [10837 0 R /XYZ 100.892 685.529 null]
+10827 0 obj <<
+/D [10825 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2846 0 obj <<
-/D [10837 0 R /XYZ 100.892 469.834 null]
+/D [10825 0 R /XYZ 100.892 469.834 null]
 >> endobj
-10840 0 obj <<
-/D [10837 0 R /XYZ 100.892 440.716 null]
+10828 0 obj <<
+/D [10825 0 R /XYZ 100.892 440.716 null]
 >> endobj
 2850 0 obj <<
-/D [10837 0 R /XYZ 100.892 390.666 null]
+/D [10825 0 R /XYZ 100.892 390.666 null]
 >> endobj
-10841 0 obj <<
-/D [10837 0 R /XYZ 100.892 364.163 null]
+10829 0 obj <<
+/D [10825 0 R /XYZ 100.892 364.163 null]
 >> endobj
-10836 0 obj <<
+10824 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F51 3736 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10844 0 obj <<
+10832 0 obj <<
 /Length 1180      
 /Filter /FlateDecode
 >>
@@ -61070,27 +64776,27 @@
 î˜3æHF$Ž”ÇJ §¶oèœ÷ïàºðë7~ìÆ¿"Ãü¦atž•µ©`CUö¾	‘FØ›Bhn"À8·~‹‡$ÕHQòíXÃAg‚³$¼“Ö˜î;¼T¸ŒkãåY?FéÛ›«Wo—?a;×Yû`žSú+Ë?®žSÊj]Ø1%BÈé²úÜ£TxeK¾Œjó\,W¦Î àNÛ3þ?\uÙØgB>5¸îµí¾ú˜ç‹<7}óhþþîàcÅË»ÌÚ}1 ê/þYPø9qºù*³Û±P`,üPš'õŸ@äÚZR÷‹[Xóÿ—ZUéÅ|kj=ÐϽ‘s·Î*«Ÿ˜À§}Ž»t7°>ˆ„ÉM]ûqË묬ì⋬QŸå7ßšý¡œžNÌþ\—•ìô^ë…³xqx+›û¬‚qæ^àæn¿Öò€F„ª¢-ï3£Öþß} ôýÆßwîÛ	7üåÂÊßþŒ}kp’l~ÀQârrüþáûö_–ï
 endstream
 endobj
-10843 0 obj <<
+10831 0 obj <<
 /Type /Page
-/Contents 10844 0 R
-/Resources 10842 0 R
+/Contents 10832 0 R
+/Resources 10830 0 R
 /MediaBox [0 0 612 792]
-/Parent 10823 0 R
+/Parent 10811 0 R
 >> endobj
-10845 0 obj <<
-/D [10843 0 R /XYZ 151.701 685.529 null]
+10833 0 obj <<
+/D [10831 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2854 0 obj <<
-/D [10843 0 R /XYZ 151.701 591.265 null]
+/D [10831 0 R /XYZ 151.701 591.265 null]
 >> endobj
-10846 0 obj <<
-/D [10843 0 R /XYZ 151.701 564.382 null]
+10834 0 obj <<
+/D [10831 0 R /XYZ 151.701 564.382 null]
 >> endobj
-10842 0 obj <<
+10830 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10849 0 obj <<
+10837 0 obj <<
 /Length 392       
 /Filter /FlateDecode
 >>
@@ -61102,21 +64808,21 @@
 ­lrm'\•”´‚ÔÑ]†P…0¦Ý0ßûfœ¶~J·ítJ-CK”cÛu	½0®\ð)Tç¢O?¼ua°³æÐ}Ç™Öw¿,m9ñ/ü Á¦§Y
 endstream
 endobj
-10848 0 obj <<
+10836 0 obj <<
 /Type /Page
-/Contents 10849 0 R
-/Resources 10847 0 R
+/Contents 10837 0 R
+/Resources 10835 0 R
 /MediaBox [0 0 612 792]
-/Parent 10823 0 R
+/Parent 10811 0 R
 >> endobj
-10850 0 obj <<
-/D [10848 0 R /XYZ 100.892 685.529 null]
+10838 0 obj <<
+/D [10836 0 R /XYZ 100.892 685.529 null]
 >> endobj
-10847 0 obj <<
+10835 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10853 0 obj <<
+10841 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -61124,20 +64830,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-10852 0 obj <<
+10840 0 obj <<
 /Type /Page
-/Contents 10853 0 R
-/Resources 10851 0 R
+/Contents 10841 0 R
+/Resources 10839 0 R
 /MediaBox [0 0 612 792]
-/Parent 10855 0 R
+/Parent 10843 0 R
 >> endobj
-10854 0 obj <<
-/D [10852 0 R /XYZ 151.701 685.529 null]
+10842 0 obj <<
+/D [10840 0 R /XYZ 151.701 685.529 null]
 >> endobj
-10851 0 obj <<
+10839 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-10858 0 obj <<
+10846 0 obj <<
 /Length 1208      
 /Filter /FlateDecode
 >>
@@ -61156,34 +64862,34 @@
 #?‡3ü0¤‚‰$_}•d¬a(ø¥_	Sxì|åbò~ãv,þè! 81Á½‹ñð?A¥<Õ~Ì]ån@‡„ðqÁm‹'n[ìU¬\¸Hûi°1/VU¥Öæ½m½`™ïàº]ˆÞºn6¸5ÏkW}–6NT‰ýy önó®ZR¯ìþ#pÁØ­*Ð:0û‡¶’n8ì÷b……¼2.½û# ³ñJt|žM¿]ÒÎÜ<Í®)ˆïÀÊ~½Gç‘ØO·ÖðÓ	ìÍCíß1Ž’WJÐÿ ×¥Á+
 endstream
 endobj
-10857 0 obj <<
+10845 0 obj <<
 /Type /Page
-/Contents 10858 0 R
-/Resources 10856 0 R
+/Contents 10846 0 R
+/Resources 10844 0 R
 /MediaBox [0 0 612 792]
-/Parent 10855 0 R
+/Parent 10843 0 R
 >> endobj
-10859 0 obj <<
-/D [10857 0 R /XYZ 100.892 685.529 null]
+10847 0 obj <<
+/D [10845 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2858 0 obj <<
-/D [10857 0 R /XYZ 100.892 660.623 null]
+/D [10845 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3885 0 obj <<
-/D [10857 0 R /XYZ 100.892 447.274 null]
+/D [10845 0 R /XYZ 100.892 447.274 null]
 >> endobj
 2862 0 obj <<
-/D [10857 0 R /XYZ 100.892 180.447 null]
+/D [10845 0 R /XYZ 100.892 180.447 null]
 >> endobj
-10860 0 obj <<
-/D [10857 0 R /XYZ 100.892 155.173 null]
+10848 0 obj <<
+/D [10845 0 R /XYZ 100.892 155.173 null]
 >> endobj
-10856 0 obj <<
+10844 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F88 5678 0 R /F72 5679 0 R /F50 3701 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10863 0 obj <<
+10851 0 obj <<
 /Length 1806      
 /Filter /FlateDecode
 >>
@@ -61204,34 +64910,34 @@
 ‰Š
 endstream
 endobj
-10862 0 obj <<
+10850 0 obj <<
 /Type /Page
-/Contents 10863 0 R
-/Resources 10861 0 R
+/Contents 10851 0 R
+/Resources 10849 0 R
 /MediaBox [0 0 612 792]
-/Parent 10855 0 R
+/Parent 10843 0 R
 >> endobj
-10864 0 obj <<
-/D [10862 0 R /XYZ 151.701 685.529 null]
+10852 0 obj <<
+/D [10850 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2866 0 obj <<
-/D [10862 0 R /XYZ 151.701 567.679 null]
+/D [10850 0 R /XYZ 151.701 567.679 null]
 >> endobj
-10865 0 obj <<
-/D [10862 0 R /XYZ 151.701 537.773 null]
+10853 0 obj <<
+/D [10850 0 R /XYZ 151.701 537.773 null]
 >> endobj
 2870 0 obj <<
-/D [10862 0 R /XYZ 151.701 190.742 null]
+/D [10850 0 R /XYZ 151.701 190.742 null]
 >> endobj
-10866 0 obj <<
-/D [10862 0 R /XYZ 151.701 160.116 null]
+10854 0 obj <<
+/D [10850 0 R /XYZ 151.701 160.116 null]
 >> endobj
-10861 0 obj <<
+10849 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F88 5678 0 R /F72 5679 0 R /F51 3736 0 R /F53 3738 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10869 0 obj <<
+10857 0 obj <<
 /Length 1877      
 /Filter /FlateDecode
 >>
@@ -61249,27 +64955,27 @@
 ™´<ùŸêÎ#ñ£æéùÀ€tüI8¼,E#*6ÛpnUŒ%³`w¼_IžØϯü5[Èánʯ>M™6àÍtËerQS@òðêþ®[ý‚è° G§çØZÈå@â/wjá`þ?èW¾<qº\ûcýÓÁüêÓSNEG³K/žï¯~õ˜ÖׇͿó@ÿ
 endstream
 endobj
-10868 0 obj <<
+10856 0 obj <<
 /Type /Page
-/Contents 10869 0 R
-/Resources 10867 0 R
+/Contents 10857 0 R
+/Resources 10855 0 R
 /MediaBox [0 0 612 792]
-/Parent 10855 0 R
+/Parent 10843 0 R
 >> endobj
-10870 0 obj <<
-/D [10868 0 R /XYZ 100.892 685.529 null]
+10858 0 obj <<
+/D [10856 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2874 0 obj <<
-/D [10868 0 R /XYZ 100.892 587.4 null]
+/D [10856 0 R /XYZ 100.892 587.4 null]
 >> endobj
-10871 0 obj <<
-/D [10868 0 R /XYZ 100.892 557.572 null]
+10859 0 obj <<
+/D [10856 0 R /XYZ 100.892 557.572 null]
 >> endobj
-10867 0 obj <<
+10855 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F51 3736 0 R /F53 3738 0 R /F17 3698 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10874 0 obj <<
+10862 0 obj <<
 /Length 1786      
 /Filter /FlateDecode
 >>
@@ -61295,33 +65001,33 @@
 )@x¨˜rRKÂa~Æ äùbÀ6*4ŽlÏù·y…CÞÚð¢3<êPGÕ0W Ýßl¿ ¾¢ØÝ
 endstream
 endobj
-10873 0 obj <<
+10861 0 obj <<
 /Type /Page
-/Contents 10874 0 R
-/Resources 10872 0 R
+/Contents 10862 0 R
+/Resources 10860 0 R
 /MediaBox [0 0 612 792]
-/Parent 10855 0 R
+/Parent 10843 0 R
 >> endobj
-10875 0 obj <<
-/D [10873 0 R /XYZ 151.701 685.529 null]
+10863 0 obj <<
+/D [10861 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2878 0 obj <<
-/D [10873 0 R /XYZ 151.701 449.934 null]
+/D [10861 0 R /XYZ 151.701 449.934 null]
 >> endobj
-10876 0 obj <<
-/D [10873 0 R /XYZ 151.701 419.823 null]
+10864 0 obj <<
+/D [10861 0 R /XYZ 151.701 419.823 null]
 >> endobj
 2882 0 obj <<
-/D [10873 0 R /XYZ 151.701 291.997 null]
+/D [10861 0 R /XYZ 151.701 291.997 null]
 >> endobj
-10877 0 obj <<
-/D [10873 0 R /XYZ 151.701 264.007 null]
+10865 0 obj <<
+/D [10861 0 R /XYZ 151.701 264.007 null]
 >> endobj
-10872 0 obj <<
+10860 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10880 0 obj <<
+10868 0 obj <<
 /Length 1476      
 /Filter /FlateDecode
 >>
@@ -61346,27 +65052,27 @@
 ÷‚d½Qv½$Å?·É߯û³‚ßP(Ÿò±.ð?Çuïé¿n|C%ÿ¶ü
 endstream
 endobj
-10879 0 obj <<
+10867 0 obj <<
 /Type /Page
-/Contents 10880 0 R
-/Resources 10878 0 R
+/Contents 10868 0 R
+/Resources 10866 0 R
 /MediaBox [0 0 612 792]
-/Parent 10855 0 R
+/Parent 10843 0 R
 >> endobj
-10881 0 obj <<
-/D [10879 0 R /XYZ 100.892 685.529 null]
+10869 0 obj <<
+/D [10867 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2886 0 obj <<
-/D [10879 0 R /XYZ 100.892 660.623 null]
+/D [10867 0 R /XYZ 100.892 660.623 null]
 >> endobj
-10882 0 obj <<
-/D [10879 0 R /XYZ 100.892 641.039 null]
+10870 0 obj <<
+/D [10867 0 R /XYZ 100.892 641.039 null]
 >> endobj
-10878 0 obj <<
+10866 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10889 0 obj <<
+10877 0 obj <<
 /Length 2203      
 /Filter /FlateDecode
 >>
@@ -61392,68 +65098,68 @@
 ÄÕ~kQöSñHà^v«í‡düöÞ{oÆæØk5ÒG^«ñã<Œ‡£·_«}6™Â…Å}Ý|íüöKÿíDA^m¿kuVÚ34UG¡?<€¦/ÞŸ_¼oÇÖMšOsµ%€òáe¼
 endstream
 endobj
-10888 0 obj <<
+10876 0 obj <<
 /Type /Page
-/Contents 10889 0 R
-/Resources 10887 0 R
+/Contents 10877 0 R
+/Resources 10875 0 R
 /MediaBox [0 0 612 792]
-/Parent 10894 0 R
-/Annots [ 10883 0 R 10884 0 R 10885 0 R 10886 0 R ]
+/Parent 10882 0 R
+/Annots [ 10871 0 R 10872 0 R 10873 0 R 10874 0 R ]
 >> endobj
-10883 0 obj <<
+10871 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 384.655 203.224 397.557]
 /Subtype /Link
 /A << /S /GoTo /D (uniqnetbiosnames) >>
 >> endobj
-10884 0 obj <<
+10872 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.344 384.655 280.863 397.557]
 /Subtype /Link
 /A << /S /GoTo /D (netbiosnamesgrp) >>
 >> endobj
-10885 0 obj <<
+10873 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [170.338 117.522 222.237 130.423]
 /Subtype /Link
 /A << /S /GoTo /D (uniqnetbiosnames) >>
 >> endobj
-10886 0 obj <<
+10874 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.118 117.522 298.017 130.423]
 /Subtype /Link
 /A << /S /GoTo /D (netbiosnamesgrp) >>
 >> endobj
-10890 0 obj <<
-/D [10888 0 R /XYZ 151.701 685.529 null]
+10878 0 obj <<
+/D [10876 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2890 0 obj <<
-/D [10888 0 R /XYZ 151.701 604.725 null]
+/D [10876 0 R /XYZ 151.701 604.725 null]
 >> endobj
-10891 0 obj <<
-/D [10888 0 R /XYZ 151.701 562 null]
+10879 0 obj <<
+/D [10876 0 R /XYZ 151.701 562 null]
 >> endobj
 5373 0 obj <<
-/D [10888 0 R /XYZ 151.701 362.28 null]
+/D [10876 0 R /XYZ 151.701 362.28 null]
 >> endobj
-10892 0 obj <<
-/D [10888 0 R /XYZ 151.701 345.41 null]
+10880 0 obj <<
+/D [10876 0 R /XYZ 151.701 345.41 null]
 >> endobj
 5374 0 obj <<
-/D [10888 0 R /XYZ 151.701 245.65 null]
+/D [10876 0 R /XYZ 151.701 245.65 null]
 >> endobj
-10893 0 obj <<
-/D [10888 0 R /XYZ 151.701 228.78 null]
+10881 0 obj <<
+/D [10876 0 R /XYZ 151.701 228.78 null]
 >> endobj
-10887 0 obj <<
+10875 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F29 5413 0 R /F52 3737 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10897 0 obj <<
+10885 0 obj <<
 /Length 2416      
 /Filter /FlateDecode
 >>
@@ -61477,21 +65183,21 @@
 -†A“ÊøŽU†±äÝžeÉ›OWYršùõž%\ùм”²‚³VÓ*ÞÒÇ Xåñ=û\NçJu :¾ô9ꞟB¼^ÜÇ|xZx~¯q\‰½¤Êi. ÖEÿä/¬ø’˜ŒqÉÎѸ© ù´ôeš¥TÑDr³è;ñÂÏMò¨¢¨Õ¤Ìô%Ý­7Û‹ÿŠ|.
 endstream
 endobj
-10896 0 obj <<
+10884 0 obj <<
 /Type /Page
-/Contents 10897 0 R
-/Resources 10895 0 R
+/Contents 10885 0 R
+/Resources 10883 0 R
 /MediaBox [0 0 612 792]
-/Parent 10894 0 R
+/Parent 10882 0 R
 >> endobj
-10898 0 obj <<
-/D [10896 0 R /XYZ 100.892 685.529 null]
+10886 0 obj <<
+/D [10884 0 R /XYZ 100.892 685.529 null]
 >> endobj
-10895 0 obj <<
+10883 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F52 3737 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10901 0 obj <<
+10889 0 obj <<
 /Length 1804      
 /Filter /FlateDecode
 >>
@@ -61520,33 +65226,33 @@
 4Áw’³?®»oDå"¥îÎÀÜBö0šfl;w¡P¾ïçâëqË*5`çMíbæÑμ˜Xo“âļoøŽsÎkÙCcdÎ=ìs#…>\ŒÛÒ^ÌcÅFÜžþäé6Ñu^ß±ÌÅöNvr ª:}Á.L7ºHy<´ÁL£]ài'ïYËóÍð5 ±]×wâüVÂec„?ž¿§¸ñj½øUQÊ
 endstream
 endobj
-10900 0 obj <<
+10888 0 obj <<
 /Type /Page
-/Contents 10901 0 R
-/Resources 10899 0 R
+/Contents 10889 0 R
+/Resources 10887 0 R
 /MediaBox [0 0 612 792]
-/Parent 10894 0 R
+/Parent 10882 0 R
 >> endobj
-10902 0 obj <<
-/D [10900 0 R /XYZ 151.701 685.529 null]
+10890 0 obj <<
+/D [10888 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2894 0 obj <<
-/D [10900 0 R /XYZ 151.701 660.623 null]
+/D [10888 0 R /XYZ 151.701 660.623 null]
 >> endobj
-10903 0 obj <<
-/D [10900 0 R /XYZ 151.701 644.027 null]
+10891 0 obj <<
+/D [10888 0 R /XYZ 151.701 644.027 null]
 >> endobj
 2898 0 obj <<
-/D [10900 0 R /XYZ 151.701 426.982 null]
+/D [10888 0 R /XYZ 151.701 426.982 null]
 >> endobj
-10904 0 obj <<
-/D [10900 0 R /XYZ 151.701 402.108 null]
+10892 0 obj <<
+/D [10888 0 R /XYZ 151.701 402.108 null]
 >> endobj
-10899 0 obj <<
+10887 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10907 0 obj <<
+10895 0 obj <<
 /Length 1404      
 /Filter /FlateDecode
 >>
@@ -61565,21 +65271,21 @@
 ~ITv Œþ1«˜#ŒWÆüÊ¢,äß^ºhJ ßy™xyÿõò¯ycVn}A)tå`³±•¤ñ¢iH¦±,Üœ·Þ"ÕŒed—ö3ÜPú@whyaÄ«à>¯÷ò‘"¦î /°ÑsÄî	íëßžÀkKóö¦Xb”´ORà+È7&ÀK)Ã[ëN=Iä{@L×œ‡‘YÎ8¾=+0žËxHôs—{)KÍlÓ#ÉUãÚD^cLõ‘!ù½ø¥OeAê«õqòó"Q„Ì$êÝA˜Ëä‚(ð§©Ó«Þ€jò0W­¤`Ln1¡2%)æP”Ÿu¡UmHHELÕo0"åIʁ:cªD"ç•¿Kz4ÝPhÂàJF™Ï‘$ÍΫŽ.ÓŽTACŒdïuæ=þ}E±ET_,<Uöî&@[I(^“FÃs,M [š$AÈ“Fyˆ9.Š+F‹QDAWPmQ»íÒ\¸Ô„Cbß'¸H›TÉ¿¸~.x%N™xKév“ùUoÎÌùâäõÊܦMæ_À|	ÓÚÍÃÑDn®M7efHÃeb(ÞXëvÃÎI`‚1æ~T†L±þÌN$F†ÕÔoæGóœ.Zÿz¨¾¨
 endstream
 endobj
-10906 0 obj <<
+10894 0 obj <<
 /Type /Page
-/Contents 10907 0 R
-/Resources 10905 0 R
+/Contents 10895 0 R
+/Resources 10893 0 R
 /MediaBox [0 0 612 792]
-/Parent 10894 0 R
+/Parent 10882 0 R
 >> endobj
-10908 0 obj <<
-/D [10906 0 R /XYZ 100.892 685.529 null]
+10896 0 obj <<
+/D [10894 0 R /XYZ 100.892 685.529 null]
 >> endobj
-10905 0 obj <<
+10893 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10911 0 obj <<
+10899 0 obj <<
 /Length 1513      
 /Filter /FlateDecode
 >>
@@ -61600,33 +65306,33 @@
 VáÊõÍnï ’"íª’AV•iA¬iÊÅ^#äð„¯Ox&~ˆþábWy» it*èJ½úhóüÐ\“toíÄåÃl-·)ÃË _9ž›D¢pk‹râøõ$iªLavX%¸e	(¡,U" ¨œçÂÌîkTð‘û^«í
 endstream
 endobj
-10910 0 obj <<
+10898 0 obj <<
 /Type /Page
-/Contents 10911 0 R
-/Resources 10909 0 R
+/Contents 10899 0 R
+/Resources 10897 0 R
 /MediaBox [0 0 612 792]
-/Parent 10894 0 R
+/Parent 10882 0 R
 >> endobj
-10912 0 obj <<
-/D [10910 0 R /XYZ 151.701 685.529 null]
+10900 0 obj <<
+/D [10898 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2902 0 obj <<
-/D [10910 0 R /XYZ 151.701 310.608 null]
+/D [10898 0 R /XYZ 151.701 310.608 null]
 >> endobj
-10913 0 obj <<
-/D [10910 0 R /XYZ 151.701 284.242 null]
+10901 0 obj <<
+/D [10898 0 R /XYZ 151.701 284.242 null]
 >> endobj
 2906 0 obj <<
-/D [10910 0 R /XYZ 151.701 179.164 null]
+/D [10898 0 R /XYZ 151.701 179.164 null]
 >> endobj
-10914 0 obj <<
-/D [10910 0 R /XYZ 151.701 153.2 null]
+10902 0 obj <<
+/D [10898 0 R /XYZ 151.701 153.2 null]
 >> endobj
-10909 0 obj <<
+10897 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F17 3698 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10918 0 obj <<
+10906 0 obj <<
 /Length 2082      
 /Filter /FlateDecode
 >>
@@ -61644,63 +65350,63 @@
 ¶®5ÉÆâr{»ñz]Ag`!ˍßÀÞ*ôô¦*„wk"°¬wMë_á‹+Ä÷ˆº…*6‡%nú¬½ W~SÆöÛoîÉåú3ÿr2ž@TûNÚ³ 
 endstream
 endobj
-10917 0 obj <<
+10905 0 obj <<
 /Type /Page
-/Contents 10918 0 R
-/Resources 10916 0 R
+/Contents 10906 0 R
+/Resources 10904 0 R
 /MediaBox [0 0 612 792]
-/Parent 10894 0 R
-/Annots [ 10915 0 R 10926 0 R ]
+/Parent 10882 0 R
+/Annots [ 10903 0 R 10914 0 R ]
 >> endobj
-10915 0 obj <<
+10903 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.93 250.667 460.543 262.357]
 /Subtype /Link
 /A << /S /GoTo /D (NetworkBrowsing) >>
 >> endobj
-10926 0 obj <<
+10914 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 237.118 200.343 248.808]
 /Subtype /Link
 /A << /S /GoTo /D (NetworkBrowsing) >>
 >> endobj
-10919 0 obj <<
-/D [10917 0 R /XYZ 100.892 685.529 null]
+10907 0 obj <<
+/D [10905 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2910 0 obj <<
-/D [10917 0 R /XYZ 100.892 546.405 null]
+/D [10905 0 R /XYZ 100.892 546.405 null]
 >> endobj
-10920 0 obj <<
-/D [10917 0 R /XYZ 100.892 517.304 null]
+10908 0 obj <<
+/D [10905 0 R /XYZ 100.892 517.304 null]
 >> endobj
-10921 0 obj <<
-/D [10917 0 R /XYZ 100.892 409.993 null]
+10909 0 obj <<
+/D [10905 0 R /XYZ 100.892 409.993 null]
 >> endobj
-10922 0 obj <<
-/D [10917 0 R /XYZ 100.892 408.448 null]
+10910 0 obj <<
+/D [10905 0 R /XYZ 100.892 408.448 null]
 >> endobj
-10923 0 obj <<
-/D [10917 0 R /XYZ 100.892 338.265 null]
+10911 0 obj <<
+/D [10905 0 R /XYZ 100.892 338.265 null]
 >> endobj
-10924 0 obj <<
-/D [10917 0 R /XYZ 100.892 336.721 null]
+10912 0 obj <<
+/D [10905 0 R /XYZ 100.892 336.721 null]
 >> endobj
-10925 0 obj <<
-/D [10917 0 R /XYZ 100.892 324.765 null]
+10913 0 obj <<
+/D [10905 0 R /XYZ 100.892 324.765 null]
 >> endobj
 2914 0 obj <<
-/D [10917 0 R /XYZ 100.892 214.749 null]
+/D [10905 0 R /XYZ 100.892 214.749 null]
 >> endobj
-10927 0 obj <<
-/D [10917 0 R /XYZ 100.892 185.154 null]
+10915 0 obj <<
+/D [10905 0 R /XYZ 100.892 185.154 null]
 >> endobj
-10916 0 obj <<
+10904 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F4 5484 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10930 0 obj <<
+10918 0 obj <<
 /Length 1499      
 /Filter /FlateDecode
 >>
@@ -61719,39 +65425,39 @@
 ¢_ÍË~¸«Ÿð±R0¥q×ÈxöÛÔ}võ¶›zdŸ¯ÝtCÜ
 endstream
 endobj
-10929 0 obj <<
+10917 0 obj <<
 /Type /Page
-/Contents 10930 0 R
-/Resources 10928 0 R
+/Contents 10918 0 R
+/Resources 10916 0 R
 /MediaBox [0 0 612 792]
-/Parent 10935 0 R
+/Parent 10923 0 R
 >> endobj
-10931 0 obj <<
-/D [10929 0 R /XYZ 151.701 685.529 null]
+10919 0 obj <<
+/D [10917 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2918 0 obj <<
-/D [10929 0 R /XYZ 151.701 660.623 null]
+/D [10917 0 R /XYZ 151.701 660.623 null]
 >> endobj
-10932 0 obj <<
-/D [10929 0 R /XYZ 151.701 641.703 null]
+10920 0 obj <<
+/D [10917 0 R /XYZ 151.701 641.703 null]
 >> endobj
 2922 0 obj <<
-/D [10929 0 R /XYZ 151.701 483.891 null]
+/D [10917 0 R /XYZ 151.701 483.891 null]
 >> endobj
-10933 0 obj <<
-/D [10929 0 R /XYZ 151.701 454.681 null]
+10921 0 obj <<
+/D [10917 0 R /XYZ 151.701 454.681 null]
 >> endobj
 2926 0 obj <<
-/D [10929 0 R /XYZ 151.701 285.199 null]
+/D [10917 0 R /XYZ 151.701 285.199 null]
 >> endobj
-10934 0 obj <<
-/D [10929 0 R /XYZ 151.701 258.111 null]
+10922 0 obj <<
+/D [10917 0 R /XYZ 151.701 258.111 null]
 >> endobj
-10928 0 obj <<
+10916 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10938 0 obj <<
+10926 0 obj <<
 /Length 1058      
 /Filter /FlateDecode
 >>
@@ -61764,21 +65470,21 @@
 Ê£„rÊ݇%ԍã2dÆ°çbŽóP0,¸Oð¤ÿΫ‡7¥„qÌ11Îáõ ³£……$\s2ZZÈ3ã³²M_=éâOº~b‹Ä-‘Y< %qKp¸aZ¬5bwЩe}ooºíH¡tøEcwŒ[5Î^sw »€I)0VG|¶§„´+Ï´©!¯¡ª%ÕÔä7"åÆ™*{üûŽ Ëí®i+“•þ]¦¤YʈÄÜÀm°FûÎÞd,ò7Ç|´[…¥V«døÚ€8æ(E#Lúô"a÷,Šâ>~	—<âR»c²§5¦k&#S³#.:9XƒÜ@ºBåeí^#=h´·Š´nn ²r‚%¾5´­mpng÷Í°^Ëîå'͏Bxkþ À»"
 endstream
 endobj
-10937 0 obj <<
+10925 0 obj <<
 /Type /Page
-/Contents 10938 0 R
-/Resources 10936 0 R
+/Contents 10926 0 R
+/Resources 10924 0 R
 /MediaBox [0 0 612 792]
-/Parent 10935 0 R
+/Parent 10923 0 R
 >> endobj
-10939 0 obj <<
-/D [10937 0 R /XYZ 100.892 685.529 null]
+10927 0 obj <<
+/D [10925 0 R /XYZ 100.892 685.529 null]
 >> endobj
-10936 0 obj <<
+10924 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F51 3736 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10942 0 obj <<
+10930 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -61786,20 +65492,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-10941 0 obj <<
+10929 0 obj <<
 /Type /Page
-/Contents 10942 0 R
-/Resources 10940 0 R
+/Contents 10930 0 R
+/Resources 10928 0 R
 /MediaBox [0 0 612 792]
-/Parent 10935 0 R
+/Parent 10923 0 R
 >> endobj
-10943 0 obj <<
-/D [10941 0 R /XYZ 151.701 685.529 null]
+10931 0 obj <<
+/D [10929 0 R /XYZ 151.701 685.529 null]
 >> endobj
-10940 0 obj <<
+10928 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-10947 0 obj <<
+10935 0 obj <<
 /Length 1573      
 /Filter /FlateDecode
 >>
@@ -61821,46 +65527,46 @@
 Ffgߟé¾ì±ò´üµ4BÉ,ZcØ&<ÓL½ÆòoÂÎÊ
 endstream
 endobj
-10946 0 obj <<
+10934 0 obj <<
 /Type /Page
-/Contents 10947 0 R
-/Resources 10945 0 R
+/Contents 10935 0 R
+/Resources 10933 0 R
 /MediaBox [0 0 612 792]
-/Parent 10935 0 R
-/Annots [ 10944 0 R ]
+/Parent 10923 0 R
+/Annots [ 10932 0 R ]
 >> endobj
-10944 0 obj <<
+10932 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 238.618 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.openi18n.org/)>>
 >> endobj
-10948 0 obj <<
-/D [10946 0 R /XYZ 100.892 685.529 null]
+10936 0 obj <<
+/D [10934 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2930 0 obj <<
-/D [10946 0 R /XYZ 100.892 660.623 null]
+/D [10934 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3886 0 obj <<
-/D [10946 0 R /XYZ 100.892 498.121 null]
+/D [10934 0 R /XYZ 100.892 498.121 null]
 >> endobj
 2934 0 obj <<
-/D [10946 0 R /XYZ 100.892 498.121 null]
+/D [10934 0 R /XYZ 100.892 498.121 null]
 >> endobj
-10949 0 obj <<
-/D [10946 0 R /XYZ 100.892 472.169 null]
+10937 0 obj <<
+/D [10934 0 R /XYZ 100.892 472.169 null]
 >> endobj
 2938 0 obj <<
-/D [10946 0 R /XYZ 100.892 280.319 null]
+/D [10934 0 R /XYZ 100.892 280.319 null]
 >> endobj
-10950 0 obj <<
-/D [10946 0 R /XYZ 100.892 252.93 null]
+10938 0 obj <<
+/D [10934 0 R /XYZ 100.892 252.93 null]
 >> endobj
-10945 0 obj <<
+10933 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F29 5413 0 R /F59 4373 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10954 0 obj <<
+10942 0 obj <<
 /Length 2103      
 /Filter /FlateDecode
 >>
@@ -61877,34 +65583,34 @@
 Á91ç¥S“d"Žü…ß [Aù3°,š.øŒþ’jÇnæ}÷á‡åÜ}Ê„¾Ýä!ž¹è~agšxÆ÷áuþÌe×Ê~À‘'Jg3Ìøö§ì®u€˜ÌÚ$ä¯7M'ý¾`¡½ïi+(ͨzâl^=ý^>60×c?35Úâw\☾÷çW2QéøߝÿÏN²HÃë.Ký?©J¸4Оè„i5{ߥ|ò_$°iŽÏ;ÃBL}áÖlÊE'£i×÷‡¯nnN§Sâ›…Kšöùæâüìsœ™D¤ã£à3Þˬó?ëAw¡
 endstream
 endobj
-10953 0 obj <<
+10941 0 obj <<
 /Type /Page
-/Contents 10954 0 R
-/Resources 10952 0 R
+/Contents 10942 0 R
+/Resources 10940 0 R
 /MediaBox [0 0 612 792]
-/Parent 10935 0 R
-/Annots [ 10951 0 R ]
+/Parent 10923 0 R
+/Annots [ 10939 0 R ]
 >> endobj
-10951 0 obj <<
+10939 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 284.72 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.unicode.org/)>>
 >> endobj
-10955 0 obj <<
-/D [10953 0 R /XYZ 151.701 685.529 null]
+10943 0 obj <<
+/D [10941 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2942 0 obj <<
-/D [10953 0 R /XYZ 151.701 389.51 null]
+/D [10941 0 R /XYZ 151.701 389.51 null]
 >> endobj
-10956 0 obj <<
-/D [10953 0 R /XYZ 151.701 362.735 null]
+10944 0 obj <<
+/D [10941 0 R /XYZ 151.701 362.735 null]
 >> endobj
-10952 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F29 5413 0 R /F85 5513 0 R /F17 3698 0 R /F93 7030 0 R /F53 3738 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
+10940 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F29 5413 0 R /F85 5513 0 R /F17 3698 0 R /F93 7029 0 R /F53 3738 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10960 0 obj <<
+10948 0 obj <<
 /Length 2048      
 /Filter /FlateDecode
 >>
@@ -61928,40 +65634,40 @@
 \
 endstream
 endobj
-10959 0 obj <<
+10947 0 obj <<
 /Type /Page
-/Contents 10960 0 R
-/Resources 10958 0 R
+/Contents 10948 0 R
+/Resources 10946 0 R
 /MediaBox [0 0 612 792]
-/Parent 10935 0 R
-/Annots [ 10957 0 R ]
+/Parent 10923 0 R
+/Annots [ 10945 0 R ]
 >> endobj
-10957 0 obj <<
+10945 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 252.74 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://j3e.de/linux/convmv/)>>
 >> endobj
-10961 0 obj <<
-/D [10959 0 R /XYZ 100.892 685.529 null]
+10949 0 obj <<
+/D [10947 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2946 0 obj <<
-/D [10959 0 R /XYZ 100.892 602.122 null]
+/D [10947 0 R /XYZ 100.892 602.122 null]
 >> endobj
-10962 0 obj <<
-/D [10959 0 R /XYZ 100.892 574.666 null]
+10950 0 obj <<
+/D [10947 0 R /XYZ 100.892 574.666 null]
 >> endobj
 2950 0 obj <<
-/D [10959 0 R /XYZ 100.892 471.33 null]
+/D [10947 0 R /XYZ 100.892 471.33 null]
 >> endobj
-10963 0 obj <<
-/D [10959 0 R /XYZ 100.892 441.356 null]
+10951 0 obj <<
+/D [10947 0 R /XYZ 100.892 441.356 null]
 >> endobj
-10958 0 obj <<
+10946 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F51 3736 0 R /F17 3698 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10966 0 obj <<
+10954 0 obj <<
 /Length 2434      
 /Filter /FlateDecode
 >>
@@ -61986,27 +65692,27 @@
 hÆ5#êÜÇ[Y4à~Ý1UW›Ððˆ{Š&jÙù«Í™N„.€´ëë@´üHX`•¢‹ |B—}‹nÔðæÀë¥.¢”™’%åqëÞØE”&30¤š x;ÎüÐEÀ˜bŒØË÷°©bœÏ•´™•î·XW=F ü/àÀxË ’Z_ut3F¤›^""Æ"î]:®¶~åÛ¶}j ^˜hÓQ_ˆNx.ô®±MÍmßüµ<clÁÅ@ŽÕ½|æ	5ÎMû?N\ K½dFhÊs4#àMYš·™±ÐPe(âåú?p8€QPÂkt\ãOÁð¹xÎÇuM*@.YLµ¸óžÛëÃe»«ž\wê#ã6fN ° ,LLpÙ—@ôRM þoœK¤‚§y›âø¿³ÄJ;)	NþU!þT©Æ-
 endstream
 endobj
-10965 0 obj <<
+10953 0 obj <<
 /Type /Page
-/Contents 10966 0 R
-/Resources 10964 0 R
+/Contents 10954 0 R
+/Resources 10952 0 R
 /MediaBox [0 0 612 792]
-/Parent 10969 0 R
+/Parent 10957 0 R
 >> endobj
-10967 0 obj <<
-/D [10965 0 R /XYZ 151.701 685.529 null]
+10955 0 obj <<
+/D [10953 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2954 0 obj <<
-/D [10965 0 R /XYZ 151.701 532.483 null]
+/D [10953 0 R /XYZ 151.701 532.483 null]
 >> endobj
-10968 0 obj <<
-/D [10965 0 R /XYZ 151.701 506.164 null]
+10956 0 obj <<
+/D [10953 0 R /XYZ 151.701 506.164 null]
 >> endobj
-10964 0 obj <<
+10952 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F51 3736 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10972 0 obj <<
+10960 0 obj <<
 /Length 2183      
 /Filter /FlateDecode
 >>
@@ -62030,21 +65736,21 @@
 ¸)É|tlm Î˱/ˆ…&/ V/*‹åì™.ÿˆSl¯§|Jõ+‰Ö &3k¹ìïý@Òÿóž¼k
 endstream
 endobj
-10971 0 obj <<
+10959 0 obj <<
 /Type /Page
-/Contents 10972 0 R
-/Resources 10970 0 R
+/Contents 10960 0 R
+/Resources 10958 0 R
 /MediaBox [0 0 612 792]
-/Parent 10969 0 R
+/Parent 10957 0 R
 >> endobj
-10973 0 obj <<
-/D [10971 0 R /XYZ 100.892 685.529 null]
+10961 0 obj <<
+/D [10959 0 R /XYZ 100.892 685.529 null]
 >> endobj
-10970 0 obj <<
+10958 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F51 3736 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10976 0 obj <<
+10964 0 obj <<
 /Length 2251      
 /Filter /FlateDecode
 >>
@@ -62079,21 +65785,21 @@
 ;\ëi£>žŸßñK0|)Uø¬ AË|ÜÝÖá~†ÑqC9‹:a„øø_ìíx
 endstream
 endobj
-10975 0 obj <<
+10963 0 obj <<
 /Type /Page
-/Contents 10976 0 R
-/Resources 10974 0 R
+/Contents 10964 0 R
+/Resources 10962 0 R
 /MediaBox [0 0 612 792]
-/Parent 10969 0 R
+/Parent 10957 0 R
 >> endobj
-10977 0 obj <<
-/D [10975 0 R /XYZ 151.701 685.529 null]
+10965 0 obj <<
+/D [10963 0 R /XYZ 151.701 685.529 null]
 >> endobj
-10974 0 obj <<
+10962 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10982 0 obj <<
+10970 0 obj <<
 /Length 2309      
 /Filter /FlateDecode
 >>
@@ -62122,62 +65828,62 @@
 •ÿï“} “"*2¤7<øµ÷|S¤7íô¼Š|°Ÿ”Ë1Ýg¿J2ÒݶIϵȇoBC•¾^=OzO)௢ˆFóŽá„¬ƒÎÆ6PEµù—	þ%e~ÑLëûzzGGpª¼ÀëÙEÕå@O£.fA!cº©ù¥êÒk<[Ǧg0º¯žNk”CÒéÞ6`A¢™ÐU·e—žáËš´©<)„¤¤?Í‘R9V éÿ ¸Œ¶í
 endstream
 endobj
-10981 0 obj <<
+10969 0 obj <<
 /Type /Page
-/Contents 10982 0 R
-/Resources 10980 0 R
+/Contents 10970 0 R
+/Resources 10968 0 R
 /MediaBox [0 0 612 792]
-/Parent 10969 0 R
-/Annots [ 10978 0 R ]
+/Parent 10957 0 R
+/Annots [ 10966 0 R ]
 >> endobj
-10978 0 obj <<
+10966 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [251.683 386.157 326.858 397.846]
 /Subtype /Link
 /A << /S /GoTo /D (vfscap-intl) >>
 >> endobj
-10983 0 obj <<
-/D [10981 0 R /XYZ 100.892 685.529 null]
+10971 0 obj <<
+/D [10969 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5116 0 obj <<
-/D [10981 0 R /XYZ 100.892 371.072 null]
+/D [10969 0 R /XYZ 100.892 371.072 null]
 >> endobj
-10984 0 obj <<
-/D [10981 0 R /XYZ 100.892 354.202 null]
+10972 0 obj <<
+/D [10969 0 R /XYZ 100.892 354.202 null]
 >> endobj
-10985 0 obj <<
-/D [10981 0 R /XYZ 100.892 348.224 null]
+10973 0 obj <<
+/D [10969 0 R /XYZ 100.892 348.224 null]
 >> endobj
-10986 0 obj <<
-/D [10981 0 R /XYZ 100.892 354.501 null]
+10974 0 obj <<
+/D [10969 0 R /XYZ 100.892 354.501 null]
 >> endobj
-10987 0 obj <<
-/D [10981 0 R /XYZ 100.892 342.546 null]
+10975 0 obj <<
+/D [10969 0 R /XYZ 100.892 342.546 null]
 >> endobj
-10988 0 obj <<
-/D [10981 0 R /XYZ 100.892 330.59 null]
+10976 0 obj <<
+/D [10969 0 R /XYZ 100.892 330.59 null]
 >> endobj
-10989 0 obj <<
-/D [10981 0 R /XYZ 100.892 318.635 null]
+10977 0 obj <<
+/D [10969 0 R /XYZ 100.892 318.635 null]
 >> endobj
-10990 0 obj <<
-/D [10981 0 R /XYZ 100.892 306.68 null]
+10978 0 obj <<
+/D [10969 0 R /XYZ 100.892 306.68 null]
 >> endobj
-10991 0 obj <<
-/D [10981 0 R /XYZ 100.892 294.725 null]
+10979 0 obj <<
+/D [10969 0 R /XYZ 100.892 294.725 null]
 >> endobj
 2958 0 obj <<
-/D [10981 0 R /XYZ 100.892 187.209 null]
+/D [10969 0 R /XYZ 100.892 187.209 null]
 >> endobj
-10992 0 obj <<
-/D [10981 0 R /XYZ 100.892 156.919 null]
+10980 0 obj <<
+/D [10969 0 R /XYZ 100.892 156.919 null]
 >> endobj
-10980 0 obj <<
+10968 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F51 3736 0 R /F4 5484 0 R /F59 4373 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-10997 0 obj <<
+10985 0 obj <<
 /Length 1982      
 /Filter /FlateDecode
 >>
@@ -62202,59 +65908,59 @@
 o&Y{Jä‚ð .ˆazs½ÿ}àPm:9§í›é)à¨:wï¿»öfE
 endstream
 endobj
-10996 0 obj <<
+10984 0 obj <<
 /Type /Page
-/Contents 10997 0 R
-/Resources 10995 0 R
+/Contents 10985 0 R
+/Resources 10983 0 R
 /MediaBox [0 0 612 792]
-/Parent 10969 0 R
-/Annots [ 10994 0 R 10979 0 R 10993 0 R ]
+/Parent 10957 0 R
+/Annots [ 10982 0 R 10967 0 R 10981 0 R ]
 >> endobj
-10994 0 obj <<
+10982 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [427.784 168.913 479.595 180.603]
 /Subtype /Link
 /A << /S /GoTo /D (japancharsets) >>
 >> endobj
-10979 0 obj <<
+10967 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 127.92 464.096 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www2d.biglobe.ne.jp/~msyk/software/libiconv-patch.html)>>
 >> endobj
-10993 0 obj <<
+10981 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 402.403 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www2d.biglobe.ne.jp/~msyk/software/glibc/)>>
 >> endobj
-10998 0 obj <<
-/D [10996 0 R /XYZ 151.701 685.529 null]
+10986 0 obj <<
+/D [10984 0 R /XYZ 151.701 685.529 null]
 >> endobj
-10999 0 obj <<
-/D [10996 0 R /XYZ 151.701 357.788 null]
+10987 0 obj <<
+/D [10984 0 R /XYZ 151.701 357.788 null]
 >> endobj
-11000 0 obj <<
-/D [10996 0 R /XYZ 178.974 358.365 null]
+10988 0 obj <<
+/D [10984 0 R /XYZ 178.974 358.365 null]
 >> endobj
-11001 0 obj <<
-/D [10996 0 R /XYZ 178.974 346.41 null]
+10989 0 obj <<
+/D [10984 0 R /XYZ 178.974 346.41 null]
 >> endobj
-11002 0 obj <<
-/D [10996 0 R /XYZ 178.974 334.455 null]
+10990 0 obj <<
+/D [10984 0 R /XYZ 178.974 334.455 null]
 >> endobj
 2962 0 obj <<
-/D [10996 0 R /XYZ 151.701 249.814 null]
+/D [10984 0 R /XYZ 151.701 249.814 null]
 >> endobj
-11003 0 obj <<
-/D [10996 0 R /XYZ 151.701 220.39 null]
+10991 0 obj <<
+/D [10984 0 R /XYZ 151.701 220.39 null]
 >> endobj
-10995 0 obj <<
+10983 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F29 5413 0 R /F53 3738 0 R /F4 5484 0 R /F51 3736 0 R /F17 3698 0 R /F59 4373 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11007 0 obj <<
+10995 0 obj <<
 /Length 1723      
 /Filter /FlateDecode
 >>
@@ -62277,39 +65983,39 @@
 ã²½ÐA`ë.™N@¦áì	·ÆaùO~¹oBR¼sºþÁü«
 endstream
 endobj
-11006 0 obj <<
+10994 0 obj <<
 /Type /Page
-/Contents 11007 0 R
-/Resources 11005 0 R
+/Contents 10995 0 R
+/Resources 10993 0 R
 /MediaBox [0 0 612 792]
-/Parent 10969 0 R
+/Parent 10957 0 R
 >> endobj
-11008 0 obj <<
-/D [11006 0 R /XYZ 100.892 685.529 null]
+10996 0 obj <<
+/D [10994 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5376 0 obj <<
-/D [11006 0 R /XYZ 100.892 660.623 null]
+/D [10994 0 R /XYZ 100.892 660.623 null]
 >> endobj
-11004 0 obj <<
-/D [11006 0 R /XYZ 100.892 643.753 null]
+10992 0 obj <<
+/D [10994 0 R /XYZ 100.892 643.753 null]
 >> endobj
 2966 0 obj <<
-/D [11006 0 R /XYZ 100.892 463.33 null]
+/D [10994 0 R /XYZ 100.892 463.33 null]
 >> endobj
-11009 0 obj <<
-/D [11006 0 R /XYZ 100.892 443.917 null]
+10997 0 obj <<
+/D [10994 0 R /XYZ 100.892 443.917 null]
 >> endobj
 2970 0 obj <<
-/D [11006 0 R /XYZ 100.892 443.917 null]
+/D [10994 0 R /XYZ 100.892 443.917 null]
 >> endobj
-11010 0 obj <<
-/D [11006 0 R /XYZ 100.892 417.957 null]
+10998 0 obj <<
+/D [10994 0 R /XYZ 100.892 417.957 null]
 >> endobj
-11005 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F90 6229 0 R /F91 6230 0 R /F60 6223 0 R /F17 3698 0 R /F53 3738 0 R /F59 4373 0 R >>
+10993 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F90 6228 0 R /F91 6229 0 R /F60 6222 0 R /F17 3698 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11013 0 obj <<
+11001 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -62317,20 +66023,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-11012 0 obj <<
+11000 0 obj <<
 /Type /Page
-/Contents 11013 0 R
-/Resources 11011 0 R
+/Contents 11001 0 R
+/Resources 10999 0 R
 /MediaBox [0 0 612 792]
-/Parent 11015 0 R
+/Parent 11003 0 R
 >> endobj
-11014 0 obj <<
-/D [11012 0 R /XYZ 151.701 685.529 null]
+11002 0 obj <<
+/D [11000 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11011 0 obj <<
+10999 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-11019 0 obj <<
+11007 0 obj <<
 /Length 1430      
 /Filter /FlateDecode
 >>
@@ -62351,39 +66057,39 @@
 ôÊ“!U|@†SòÇŸŸtN¶a&_QêÀŒ‚îc(svpƒQê˜^»gŸù¦‹èdèÄpP¦Ñ²÷¹vúOõâužœOy!ê¸%¼"Dœ‰ðO¢¨øÅ!ø3õ_öÓ
 endstream
 endobj
-11018 0 obj <<
+11006 0 obj <<
 /Type /Page
-/Contents 11019 0 R
-/Resources 11017 0 R
+/Contents 11007 0 R
+/Resources 11005 0 R
 /MediaBox [0 0 612 792]
-/Parent 11015 0 R
+/Parent 11003 0 R
 >> endobj
-11020 0 obj <<
-/D [11018 0 R /XYZ 100.892 685.529 null]
+11008 0 obj <<
+/D [11006 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2974 0 obj <<
-/D [11018 0 R /XYZ 100.892 660.623 null]
+/D [11006 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3887 0 obj <<
-/D [11018 0 R /XYZ 100.892 499.255 null]
+/D [11006 0 R /XYZ 100.892 499.255 null]
 >> endobj
 2978 0 obj <<
-/D [11018 0 R /XYZ 100.892 499.255 null]
+/D [11006 0 R /XYZ 100.892 499.255 null]
 >> endobj
-11021 0 obj <<
-/D [11018 0 R /XYZ 100.892 470.449 null]
+11009 0 obj <<
+/D [11006 0 R /XYZ 100.892 470.449 null]
 >> endobj
 2982 0 obj <<
-/D [11018 0 R /XYZ 100.892 354.942 null]
+/D [11006 0 R /XYZ 100.892 354.942 null]
 >> endobj
-11022 0 obj <<
-/D [11018 0 R /XYZ 100.892 323.122 null]
+11010 0 obj <<
+/D [11006 0 R /XYZ 100.892 323.122 null]
 >> endobj
-11017 0 obj <<
+11005 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11026 0 obj <<
+11014 0 obj <<
 /Length 2139      
 /Filter /FlateDecode
 >>
@@ -62402,46 +66108,46 @@
 *‰Ç‹bÅžcg ‰9CE…×X͐+!W-<Ò–ʼn0ÇüÖ“Œ®-£Ù™9Ï`t“j†Eý<–J²ßŸ¨kJ1päÖ)×mÏ@"?â*˜´·õúHm..±…ÜÚa¦y¸y÷£'ÞÏDSCßî€QÎïçð>œõ½ÜK-í±Eõ ­ÔD$ɹ®°Ü­PÒ¶~bžsØøCl8Åm¬\¶u°Þƒ­(¾|!§"óÜ—Õá|}˜”VUFaù´zk/åeÝE¤!ÔÞ² ÝòÓ£*Šž>9é÷>¼ÇÿB¯x¢ÉÐL¿E#ñŸ»³(+žûbƒ]\4ØÊ7Ø?`EùL¼ì®í™oZxb%J9ÖÉ!Ãh†( 25Oµï è?ăÕûáωõ%	M¬Y5èÁ]FßçÏcûG0Ëoís*D°ÂßEˆ¶'l—˜SoéåžÊç•k«|P’AV`–'qñAðN‡»`Çsª¸&ùÆPÁú´«¹0ðôœõ€ÿTS˼<Ô] ç@ìÌáêð3m/ç´RŠÈR–'K/nÇE«[ÿz­Ù@´¦IÞö¼³×ƒnY6T9ž¹rƒ6ÌJöÀ±õcãÿ)Ó??×äJä£e·ý[…­6ôxý8uÕa¶ëQ¢ ï¾›b#¤©ÈT:µÂ|‹%§mÛü#2¹[+ßAEùÜßî$J=Ž˜4û®7Ë#WDè¯<DBïK}×ðÒe©H¢ìòêÖ£³·xöûÛZ^ÞÔÔØØå\ž€?Iˆµœì1pNù”)qgXʱ|'1·÷‡°|ã8¢'÷:Kb ñIW‚‹Ð<¢;AÜ"Òyÿ®™$ úJ5|^šýZ%%²,ýÒç*™Äàœñk}¥Š£ …ëà:ôl– ƒL€Ù&ß_à/òù›°¥ÿ®‘·åW	WoòKvÈ›Ù9[ Šÿ¹Z]|Úé–?­î êž @Wüã·qþâö‰0*)ERŒ÷ÍòN[ª,Y!@”tòâïÖkM’*ả­Ì?Œôÿ4	ˆª²‰#ï˼ÿ*ƒi@
 endstream
 endobj
-11025 0 obj <<
+11013 0 obj <<
 /Type /Page
-/Contents 11026 0 R
-/Resources 11024 0 R
+/Contents 11014 0 R
+/Resources 11012 0 R
 /MediaBox [0 0 612 792]
-/Parent 11015 0 R
-/Annots [ 11016 0 R 11023 0 R ]
+/Parent 11003 0 R
+/Annots [ 11004 0 R 11011 0 R ]
 >> endobj
-11016 0 obj <<
+11004 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 127.92 425.939 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.allmerchants.com/Software/Backup_Software/)>>
 >> endobj
-11023 0 obj <<
+11011 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 322.379 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://backuppc.sourceforge.net)>>
 >> endobj
-11027 0 obj <<
-/D [11025 0 R /XYZ 151.701 685.529 null]
+11015 0 obj <<
+/D [11013 0 R /XYZ 151.701 685.529 null]
 >> endobj
 2986 0 obj <<
-/D [11025 0 R /XYZ 151.701 596.915 null]
+/D [11013 0 R /XYZ 151.701 596.915 null]
 >> endobj
-11028 0 obj <<
-/D [11025 0 R /XYZ 151.701 569.609 null]
+11016 0 obj <<
+/D [11013 0 R /XYZ 151.701 569.609 null]
 >> endobj
 2990 0 obj <<
-/D [11025 0 R /XYZ 151.701 286.397 null]
+/D [11013 0 R /XYZ 151.701 286.397 null]
 >> endobj
-11029 0 obj <<
-/D [11025 0 R /XYZ 151.701 256.969 null]
+11017 0 obj <<
+/D [11013 0 R /XYZ 151.701 256.969 null]
 >> endobj
-11024 0 obj <<
+11012 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F29 5413 0 R /F17 3698 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11034 0 obj <<
+11022 0 obj <<
 /Length 1753      
 /Filter /FlateDecode
 >>
@@ -62461,46 +66167,46 @@
 /ŒÁÎ0ž@NþLI ­C´°¬…ß]ýò©xάp¿Ý0쟜€¨ÉöÙia ÙÍÜþïÈž™á€&	+r¸‘ÂQé,´ÿ·Ý›©~Üz@¼"HfædŸÚ¿ ºŸÇ®
 endstream
 endobj
-11033 0 obj <<
+11021 0 obj <<
 /Type /Page
-/Contents 11034 0 R
-/Resources 11032 0 R
+/Contents 11022 0 R
+/Resources 11020 0 R
 /MediaBox [0 0 612 792]
-/Parent 11015 0 R
-/Annots [ 11030 0 R 11031 0 R ]
+/Parent 11003 0 R
+/Annots [ 11018 0 R 11019 0 R ]
 >> endobj
-11030 0 obj <<
+11018 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 127.92 229.204 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.amanda.org/)>>
 >> endobj
-11031 0 obj <<
+11019 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 257.447 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://bobs.sourceforge.net/)>>
 >> endobj
-11035 0 obj <<
-/D [11033 0 R /XYZ 100.892 685.529 null]
+11023 0 obj <<
+/D [11021 0 R /XYZ 100.892 685.529 null]
 >> endobj
 2994 0 obj <<
-/D [11033 0 R /XYZ 100.892 430.782 null]
+/D [11021 0 R /XYZ 100.892 430.782 null]
 >> endobj
-11036 0 obj <<
-/D [11033 0 R /XYZ 100.892 407.549 null]
+11024 0 obj <<
+/D [11021 0 R /XYZ 100.892 407.549 null]
 >> endobj
 2998 0 obj <<
-/D [11033 0 R /XYZ 100.892 272.69 null]
+/D [11021 0 R /XYZ 100.892 272.69 null]
 >> endobj
-11037 0 obj <<
-/D [11033 0 R /XYZ 100.892 244.405 null]
+11025 0 obj <<
+/D [11021 0 R /XYZ 100.892 244.405 null]
 >> endobj
-11032 0 obj <<
+11020 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F51 3736 0 R /F17 3698 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11040 0 obj <<
+11028 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -62508,20 +66214,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-11039 0 obj <<
+11027 0 obj <<
 /Type /Page
-/Contents 11040 0 R
-/Resources 11038 0 R
+/Contents 11028 0 R
+/Resources 11026 0 R
 /MediaBox [0 0 612 792]
-/Parent 11015 0 R
+/Parent 11003 0 R
 >> endobj
-11041 0 obj <<
-/D [11039 0 R /XYZ 151.701 685.529 null]
+11029 0 obj <<
+/D [11027 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11038 0 obj <<
+11026 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-11044 0 obj <<
+11032 0 obj <<
 /Length 1636      
 /Filter /FlateDecode
 >>
@@ -62541,33 +66247,33 @@
 ªqÂ—œÌËìlüYþ›âa
 endstream
 endobj
-11043 0 obj <<
+11031 0 obj <<
 /Type /Page
-/Contents 11044 0 R
-/Resources 11042 0 R
+/Contents 11032 0 R
+/Resources 11030 0 R
 /MediaBox [0 0 612 792]
-/Parent 11015 0 R
+/Parent 11003 0 R
 >> endobj
-11045 0 obj <<
-/D [11043 0 R /XYZ 100.892 685.529 null]
+11033 0 obj <<
+/D [11031 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3002 0 obj <<
-/D [11043 0 R /XYZ 100.892 660.623 null]
+/D [11031 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3888 0 obj <<
-/D [11043 0 R /XYZ 100.892 500.864 null]
+/D [11031 0 R /XYZ 100.892 500.864 null]
 >> endobj
 3006 0 obj <<
-/D [11043 0 R /XYZ 100.892 500.864 null]
+/D [11031 0 R /XYZ 100.892 500.864 null]
 >> endobj
-11046 0 obj <<
-/D [11043 0 R /XYZ 100.892 468.938 null]
+11034 0 obj <<
+/D [11031 0 R /XYZ 100.892 468.938 null]
 >> endobj
-11042 0 obj <<
+11030 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11049 0 obj <<
+11037 0 obj <<
 /Length 1417      
 /Filter /FlateDecode
 >>
@@ -62589,39 +66295,39 @@
 xðÙsgvðSȼۆ™'”nÑA¥¶'ïû©:Ÿñf¿ßˆÂ÷Ùvñ7²ñ+$
 endstream
 endobj
-11048 0 obj <<
+11036 0 obj <<
 /Type /Page
-/Contents 11049 0 R
-/Resources 11047 0 R
+/Contents 11037 0 R
+/Resources 11035 0 R
 /MediaBox [0 0 612 792]
-/Parent 11054 0 R
+/Parent 11042 0 R
 >> endobj
-11050 0 obj <<
-/D [11048 0 R /XYZ 151.701 685.529 null]
+11038 0 obj <<
+/D [11036 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3010 0 obj <<
-/D [11048 0 R /XYZ 151.701 660.623 null]
+/D [11036 0 R /XYZ 151.701 660.623 null]
 >> endobj
-11051 0 obj <<
-/D [11048 0 R /XYZ 151.701 641.209 null]
+11039 0 obj <<
+/D [11036 0 R /XYZ 151.701 641.209 null]
 >> endobj
 3014 0 obj <<
-/D [11048 0 R /XYZ 151.701 563.018 null]
+/D [11036 0 R /XYZ 151.701 563.018 null]
 >> endobj
-11052 0 obj <<
-/D [11048 0 R /XYZ 151.701 538.53 null]
+11040 0 obj <<
+/D [11036 0 R /XYZ 151.701 538.53 null]
 >> endobj
 3018 0 obj <<
-/D [11048 0 R /XYZ 151.701 235.753 null]
+/D [11036 0 R /XYZ 151.701 235.753 null]
 >> endobj
-11053 0 obj <<
-/D [11048 0 R /XYZ 151.701 208.94 null]
+11041 0 obj <<
+/D [11036 0 R /XYZ 151.701 208.94 null]
 >> endobj
-11047 0 obj <<
+11035 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F51 3736 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11057 0 obj <<
+11045 0 obj <<
 /Length 1782      
 /Filter /FlateDecode
 >>
@@ -62640,33 +66346,33 @@
 5‘ÚÑØN!d1f9ã¡¥s  âîy9&ýúHÆ=˜«7褞”¾™?%¦ÓŒÏ~â‚ÚÊO(áÊ?”èåcü_î7ÿʞ˒
 endstream
 endobj
-11056 0 obj <<
+11044 0 obj <<
 /Type /Page
-/Contents 11057 0 R
-/Resources 11055 0 R
+/Contents 11045 0 R
+/Resources 11043 0 R
 /MediaBox [0 0 612 792]
-/Parent 11054 0 R
+/Parent 11042 0 R
 >> endobj
-11058 0 obj <<
-/D [11056 0 R /XYZ 100.892 685.529 null]
+11046 0 obj <<
+/D [11044 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3022 0 obj <<
-/D [11056 0 R /XYZ 100.892 459.859 null]
+/D [11044 0 R /XYZ 100.892 459.859 null]
 >> endobj
-11059 0 obj <<
-/D [11056 0 R /XYZ 100.892 430.746 null]
+11047 0 obj <<
+/D [11044 0 R /XYZ 100.892 430.746 null]
 >> endobj
 3026 0 obj <<
-/D [11056 0 R /XYZ 100.892 242.996 null]
+/D [11044 0 R /XYZ 100.892 242.996 null]
 >> endobj
-11060 0 obj <<
-/D [11056 0 R /XYZ 100.892 216.004 null]
+11048 0 obj <<
+/D [11044 0 R /XYZ 100.892 216.004 null]
 >> endobj
-11055 0 obj <<
+11043 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F51 3736 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11063 0 obj <<
+11051 0 obj <<
 /Length 1601      
 /Filter /FlateDecode
 >>
@@ -62684,33 +66390,33 @@
 µ²®Ò8‚	ÎáÆç‚Y‰wÿëÅ_ZÏZ
 endstream
 endobj
-11062 0 obj <<
+11050 0 obj <<
 /Type /Page
-/Contents 11063 0 R
-/Resources 11061 0 R
+/Contents 11051 0 R
+/Resources 11049 0 R
 /MediaBox [0 0 612 792]
-/Parent 11054 0 R
+/Parent 11042 0 R
 >> endobj
-11064 0 obj <<
-/D [11062 0 R /XYZ 151.701 685.529 null]
+11052 0 obj <<
+/D [11050 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3030 0 obj <<
-/D [11062 0 R /XYZ 151.701 550.447 null]
+/D [11050 0 R /XYZ 151.701 550.447 null]
 >> endobj
-11065 0 obj <<
-/D [11062 0 R /XYZ 151.701 521.6 null]
+11053 0 obj <<
+/D [11050 0 R /XYZ 151.701 521.6 null]
 >> endobj
 3034 0 obj <<
-/D [11062 0 R /XYZ 151.701 298.858 null]
+/D [11050 0 R /XYZ 151.701 298.858 null]
 >> endobj
-11066 0 obj <<
-/D [11062 0 R /XYZ 151.701 270.012 null]
+11054 0 obj <<
+/D [11050 0 R /XYZ 151.701 270.012 null]
 >> endobj
-11061 0 obj <<
+11049 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11069 0 obj <<
+11057 0 obj <<
 /Length 1869      
 /Filter /FlateDecode
 >>
@@ -62733,39 +66439,39 @@
 §¯¢ª¦sЦÖ`=,=<=_ìWÿ ŠÜ#
 endstream
 endobj
-11068 0 obj <<
+11056 0 obj <<
 /Type /Page
-/Contents 11069 0 R
-/Resources 11067 0 R
+/Contents 11057 0 R
+/Resources 11055 0 R
 /MediaBox [0 0 612 792]
-/Parent 11054 0 R
+/Parent 11042 0 R
 >> endobj
-11070 0 obj <<
-/D [11068 0 R /XYZ 100.892 685.529 null]
+11058 0 obj <<
+/D [11056 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3038 0 obj <<
-/D [11068 0 R /XYZ 100.892 660.623 null]
+/D [11056 0 R /XYZ 100.892 660.623 null]
 >> endobj
-11071 0 obj <<
-/D [11068 0 R /XYZ 100.892 644.027 null]
+11059 0 obj <<
+/D [11056 0 R /XYZ 100.892 644.027 null]
 >> endobj
 3042 0 obj <<
-/D [11068 0 R /XYZ 100.892 520.544 null]
+/D [11056 0 R /XYZ 100.892 520.544 null]
 >> endobj
-11072 0 obj <<
-/D [11068 0 R /XYZ 100.892 494.085 null]
+11060 0 obj <<
+/D [11056 0 R /XYZ 100.892 494.085 null]
 >> endobj
 3046 0 obj <<
-/D [11068 0 R /XYZ 100.892 333.112 null]
+/D [11056 0 R /XYZ 100.892 333.112 null]
 >> endobj
-11073 0 obj <<
-/D [11068 0 R /XYZ 100.892 306.643 null]
+11061 0 obj <<
+/D [11056 0 R /XYZ 100.892 306.643 null]
 >> endobj
-11067 0 obj <<
+11055 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F85 5513 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11078 0 obj <<
+11066 0 obj <<
 /Length 2077      
 /Filter /FlateDecode
 >>
@@ -62789,52 +66495,52 @@
 “´ó—òcþ)Ó™üWÞ·_ÀÙ ]kcˆ
 endstream
 endobj
-11077 0 obj <<
+11065 0 obj <<
 /Type /Page
-/Contents 11078 0 R
-/Resources 11076 0 R
+/Contents 11066 0 R
+/Resources 11064 0 R
 /MediaBox [0 0 612 792]
-/Parent 11054 0 R
-/Annots [ 11074 0 R 11082 0 R 11075 0 R ]
+/Parent 11042 0 R
+/Annots [ 11062 0 R 11070 0 R 11063 0 R ]
 >> endobj
-11074 0 obj <<
+11062 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 140.174 511.352 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.redhat.com/docs/manuals/enterprise/RHEL-AS-2.1-Manual/cluster-manager/s1-service-samba.html)>>
 >> endobj
-11082 0 obj <<
+11070 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [150.705 127.92 328.362 139.427]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.redhat.com/docs/manuals/enterprise/RHEL-AS-2.1-Manual/cluster-manager/s1-service-samba.html)>>
 >> endobj
-11075 0 obj <<
+11063 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 289.926 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.linux-ha.org/)>>
 >> endobj
-11079 0 obj <<
-/D [11077 0 R /XYZ 151.701 685.529 null]
+11067 0 obj <<
+/D [11065 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3050 0 obj <<
-/D [11077 0 R /XYZ 151.701 660.623 null]
+/D [11065 0 R /XYZ 151.701 660.623 null]
 >> endobj
-11080 0 obj <<
-/D [11077 0 R /XYZ 151.701 641.703 null]
+11068 0 obj <<
+/D [11065 0 R /XYZ 151.701 641.703 null]
 >> endobj
 3054 0 obj <<
-/D [11077 0 R /XYZ 151.701 442.987 null]
+/D [11065 0 R /XYZ 151.701 442.987 null]
 >> endobj
-11081 0 obj <<
-/D [11077 0 R /XYZ 151.701 411.189 null]
+11069 0 obj <<
+/D [11065 0 R /XYZ 151.701 411.189 null]
 >> endobj
-11076 0 obj <<
+11064 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11085 0 obj <<
+11073 0 obj <<
 /Length 994       
 /Filter /FlateDecode
 >>
@@ -62848,33 +66554,33 @@
 øP¾’K_Ö#Šln£‚ÆôOªʾ	¾ýx©³Õ´n͵}•Mxž3e¬:›µÁ	¤×šˆzg†šx.ž–r¸ÁÎþ$yWZ܈WàÙ‡ØþÄ.¯dUöjáùlHí$´ótm0ÛP~E,†ÛŠ–lÒþj—ƒß ÷ú{„„uÂò…ÿ9ÿ¦‘jú
 endstream
 endobj
-11084 0 obj <<
+11072 0 obj <<
 /Type /Page
-/Contents 11085 0 R
-/Resources 11083 0 R
+/Contents 11073 0 R
+/Resources 11071 0 R
 /MediaBox [0 0 612 792]
-/Parent 11054 0 R
+/Parent 11042 0 R
 >> endobj
-11086 0 obj <<
-/D [11084 0 R /XYZ 100.892 685.529 null]
+11074 0 obj <<
+/D [11072 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3058 0 obj <<
-/D [11084 0 R /XYZ 100.892 660.623 null]
+/D [11072 0 R /XYZ 100.892 660.623 null]
 >> endobj
-11087 0 obj <<
-/D [11084 0 R /XYZ 100.892 644.027 null]
+11075 0 obj <<
+/D [11072 0 R /XYZ 100.892 644.027 null]
 >> endobj
 3062 0 obj <<
-/D [11084 0 R /XYZ 100.892 533.539 null]
+/D [11072 0 R /XYZ 100.892 533.539 null]
 >> endobj
-11088 0 obj <<
-/D [11084 0 R /XYZ 100.892 510.306 null]
+11076 0 obj <<
+/D [11072 0 R /XYZ 100.892 510.306 null]
 >> endobj
-11083 0 obj <<
+11071 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11091 0 obj <<
+11079 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -62882,20 +66588,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-11090 0 obj <<
+11078 0 obj <<
 /Type /Page
-/Contents 11091 0 R
-/Resources 11089 0 R
+/Contents 11079 0 R
+/Resources 11077 0 R
 /MediaBox [0 0 612 792]
-/Parent 11093 0 R
+/Parent 11081 0 R
 >> endobj
-11092 0 obj <<
-/D [11090 0 R /XYZ 151.701 685.529 null]
+11080 0 obj <<
+/D [11078 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11089 0 obj <<
+11077 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-11096 0 obj <<
+11084 0 obj <<
 /Length 1967      
 /Filter /FlateDecode
 >>
@@ -62927,51 +66633,51 @@
 Á&pÿùX	 L’Šc=Ë2ÿ	@P™*ü…ÎéïTY*ÆÑYå8:ÓÇ9.!Ø´™äÓ!XS?]ZbÄ·C„ÌX¶ùˆ—>üíÐ[ÂÌ$ß·Õä̓ÿÚg¯5ÛýË8þe at 1Í´ „ÔÊ= Ðÿ?ãª.÷
 endstream
 endobj
-11095 0 obj <<
+11083 0 obj <<
 /Type /Page
-/Contents 11096 0 R
-/Resources 11094 0 R
+/Contents 11084 0 R
+/Resources 11082 0 R
 /MediaBox [0 0 612 792]
-/Parent 11093 0 R
+/Parent 11081 0 R
 >> endobj
-11097 0 obj <<
-/D [11095 0 R /XYZ 100.892 685.529 null]
+11085 0 obj <<
+/D [11083 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3066 0 obj <<
-/D [11095 0 R /XYZ 100.892 660.623 null]
+/D [11083 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3889 0 obj <<
-/D [11095 0 R /XYZ 100.892 472.1 null]
+/D [11083 0 R /XYZ 100.892 472.1 null]
 >> endobj
-11098 0 obj <<
-/D [11095 0 R /XYZ 100.892 220.738 null]
+11086 0 obj <<
+/D [11083 0 R /XYZ 100.892 220.738 null]
 >> endobj
-11099 0 obj <<
-/D [11095 0 R /XYZ 100.892 221.315 null]
+11087 0 obj <<
+/D [11083 0 R /XYZ 100.892 221.315 null]
 >> endobj
-11100 0 obj <<
-/D [11095 0 R /XYZ 100.892 209.36 null]
+11088 0 obj <<
+/D [11083 0 R /XYZ 100.892 209.36 null]
 >> endobj
-11101 0 obj <<
-/D [11095 0 R /XYZ 100.892 197.405 null]
+11089 0 obj <<
+/D [11083 0 R /XYZ 100.892 197.405 null]
 >> endobj
-11102 0 obj <<
-/D [11095 0 R /XYZ 100.892 185.449 null]
+11090 0 obj <<
+/D [11083 0 R /XYZ 100.892 185.449 null]
 >> endobj
-11103 0 obj <<
-/D [11095 0 R /XYZ 100.892 173.494 null]
+11091 0 obj <<
+/D [11083 0 R /XYZ 100.892 173.494 null]
 >> endobj
-11104 0 obj <<
-/D [11095 0 R /XYZ 100.892 161.539 null]
+11092 0 obj <<
+/D [11083 0 R /XYZ 100.892 161.539 null]
 >> endobj
-11105 0 obj <<
-/D [11095 0 R /XYZ 100.892 149.584 null]
+11093 0 obj <<
+/D [11083 0 R /XYZ 100.892 149.584 null]
 >> endobj
-11094 0 obj <<
+11082 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F4 5484 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11108 0 obj <<
+11096 0 obj <<
 /Length 1649      
 /Filter /FlateDecode
 >>
@@ -62990,21 +66696,21 @@
 *|¥…†s`ýäç1§	Öë²½.d¡õScÒý°ŽÁ£”/o´Ì!}3ñ4-Âïj.¨2™—?¿±£îù¯Ëíì•¥š jašc$žñ ¶}ø‘ÌÁˆ¡i5ü¢Ð`_Yø÷ñM]j=†g0•3\<Ó¸…;"Iî’$Y@ûÇÆøТÖo#n¸Ï)äà+ag\Zý‹ä‡5á2üBŒè+ÍEÔóß"þÊûp¿Â¯ýÿ\—?s
 endstream
 endobj
-11107 0 obj <<
+11095 0 obj <<
 /Type /Page
-/Contents 11108 0 R
-/Resources 11106 0 R
+/Contents 11096 0 R
+/Resources 11094 0 R
 /MediaBox [0 0 612 792]
-/Parent 11093 0 R
+/Parent 11081 0 R
 >> endobj
-11109 0 obj <<
-/D [11107 0 R /XYZ 151.701 685.529 null]
+11097 0 obj <<
+/D [11095 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11106 0 obj <<
+11094 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11112 0 obj <<
+11100 0 obj <<
 /Length 1602      
 /Filter /FlateDecode
 >>
@@ -63035,27 +66741,27 @@
 ó*;»ÿ“ÿ¦Ù
 endstream
 endobj
-11111 0 obj <<
+11099 0 obj <<
 /Type /Page
-/Contents 11112 0 R
-/Resources 11110 0 R
+/Contents 11100 0 R
+/Resources 11098 0 R
 /MediaBox [0 0 612 792]
-/Parent 11093 0 R
+/Parent 11081 0 R
 >> endobj
-11113 0 obj <<
-/D [11111 0 R /XYZ 100.892 685.529 null]
+11101 0 obj <<
+/D [11099 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3070 0 obj <<
-/D [11111 0 R /XYZ 100.892 660.623 null]
+/D [11099 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3890 0 obj <<
-/D [11111 0 R /XYZ 100.892 438.687 null]
+/D [11099 0 R /XYZ 100.892 438.687 null]
 >> endobj
-11110 0 obj <<
+11098 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11116 0 obj <<
+11104 0 obj <<
 /Length 2389      
 /Filter /FlateDecode
 >>
@@ -63089,33 +66795,33 @@
 "ÑÁb6¬zäèÞlíÁa*5x»XzH‚KÍT/ ¹â‡SHuÇqÙKG¹›f/×Þž-ìg.)€\K2§ýKb#Ñó£åz™§¦¬^;Ågñô`Ç€GO¹V¥¤=ÏHë¹õ£J~q.û™5ψÙUr?PRìªt5Íy—ÞÏѤº~‘ׄfZCRóëûèÿ2€6óiƒé¸D()É >(]#Z›B< :«DœÚûºeõ‰Ã›Å/ÛÍKߏ°näqzèÖlNho<8ÚNüxeçìz¾×Ÿ 3Çè^ógË{¯–ݽ~´<<檞!Üü—ajßþ©i—H
 endstream
 endobj
-11115 0 obj <<
+11103 0 obj <<
 /Type /Page
-/Contents 11116 0 R
-/Resources 11114 0 R
+/Contents 11104 0 R
+/Resources 11102 0 R
 /MediaBox [0 0 612 792]
-/Parent 11093 0 R
+/Parent 11081 0 R
 >> endobj
-11117 0 obj <<
-/D [11115 0 R /XYZ 151.701 685.529 null]
+11105 0 obj <<
+/D [11103 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3074 0 obj <<
-/D [11115 0 R /XYZ 151.701 555.383 null]
+/D [11103 0 R /XYZ 151.701 555.383 null]
 >> endobj
-11118 0 obj <<
-/D [11115 0 R /XYZ 151.701 525.851 null]
+11106 0 obj <<
+/D [11103 0 R /XYZ 151.701 525.851 null]
 >> endobj
 3078 0 obj <<
-/D [11115 0 R /XYZ 151.701 525.851 null]
+/D [11103 0 R /XYZ 151.701 525.851 null]
 >> endobj
-11119 0 obj <<
-/D [11115 0 R /XYZ 151.701 499.727 null]
+11107 0 obj <<
+/D [11103 0 R /XYZ 151.701 499.727 null]
 >> endobj
-11114 0 obj <<
+11102 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11123 0 obj <<
+11111 0 obj <<
 /Length 2725      
 /Filter /FlateDecode
 >>
@@ -63143,27 +66849,27 @@
 ‘à&ÝU›ô\XÛ­Hßä¼!“ÍÒEÆÓí:Xã$üv°¿òú‚éïàŒ =/d†Ç0ž{r¦—FܨÏ2´³Ž§\á͏U¾ã†¯É¢Û¦€Þ#=4þ	³ÉŸ²©<›h€¾±Z6žÒ×ôŠ†Ÿ¦xâÁ‡ëEbfå“7eƒ±„¨K\c°7óÂ!P/4ƒ$~î6eãjͱçº=zÂQÍ+‡‡°><Õnhy£±SåÆí5¦¦A9·Eä3|¨Ðþ]°WBÍÖùLÆ}['Ù]ÿÏ…ÏÈЛÁÒ¾¸ÃÔ•ú¯x£öYÓ¼ÿ¨}j…Ô»¼‚|}µÔVØœƒþͯ¯î¶·×g3ÛY$àâcÊK µ«A0ŒÝ«ï_ß¾»{ws·]­ðÏ«‘6tԍ‰­4ûâ¶' îõ›ÈÓû·\³,ÛÙ±¬ù†j´†X9èë7w7»ùx¦{’Ée¬¢;ɉv¨¬¢ÞëÚµ‰Š¥E}õq{÷ææÃöLpNE:)…îzåu±\z5ÝœœMaש*¸†–¼®8,þX8ýŠˆ¬sü{3üÞl/þ*¹¢á
 endstream
 endobj
-11122 0 obj <<
+11110 0 obj <<
 /Type /Page
-/Contents 11123 0 R
-/Resources 11121 0 R
+/Contents 11111 0 R
+/Resources 11109 0 R
 /MediaBox [0 0 612 792]
-/Parent 11093 0 R
+/Parent 11081 0 R
 >> endobj
-11124 0 obj <<
-/D [11122 0 R /XYZ 100.892 685.529 null]
+11112 0 obj <<
+/D [11110 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3082 0 obj <<
-/D [11122 0 R /XYZ 100.892 660.623 null]
+/D [11110 0 R /XYZ 100.892 660.623 null]
 >> endobj
-11125 0 obj <<
-/D [11122 0 R /XYZ 100.892 641.703 null]
+11113 0 obj <<
+/D [11110 0 R /XYZ 100.892 641.703 null]
 >> endobj
-11121 0 obj <<
+11109 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11129 0 obj <<
+11117 0 obj <<
 /Length 3506      
 /Filter /FlateDecode
 >>
@@ -63212,129 +66918,129 @@
 e<
 endstream
 endobj
-11128 0 obj <<
+11116 0 obj <<
 /Type /Page
-/Contents 11129 0 R
-/Resources 11127 0 R
+/Contents 11117 0 R
+/Resources 11115 0 R
 /MediaBox [0 0 612 792]
-/Parent 11161 0 R
-/Annots [ 11120 0 R 11126 0 R ]
+/Parent 11149 0 R
+/Annots [ 11108 0 R 11114 0 R ]
 >> endobj
-11120 0 obj <<
+11108 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.431 646.546 465.757 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (elastic) >>
 >> endobj
-11126 0 obj <<
+11114 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [432.209 158.775 508.322 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (cdserver) >>
 >> endobj
-11130 0 obj <<
-/D [11128 0 R /XYZ 151.701 685.529 null]
+11118 0 obj <<
+/D [11116 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5117 0 obj <<
-/D [11128 0 R /XYZ 151.701 560.311 null]
+/D [11116 0 R /XYZ 151.701 560.311 null]
 >> endobj
+11119 0 obj <<
+/D [11116 0 R /XYZ 151.701 543.441 null]
+>> endobj
+11120 0 obj <<
+/D [11116 0 R /XYZ 151.701 537.464 null]
+>> endobj
+11121 0 obj <<
+/D [11116 0 R /XYZ 151.701 543.74 null]
+>> endobj
+11122 0 obj <<
+/D [11116 0 R /XYZ 151.701 531.785 null]
+>> endobj
+11123 0 obj <<
+/D [11116 0 R /XYZ 151.701 519.83 null]
+>> endobj
+11124 0 obj <<
+/D [11116 0 R /XYZ 151.701 507.874 null]
+>> endobj
+11125 0 obj <<
+/D [11116 0 R /XYZ 151.701 495.919 null]
+>> endobj
+11126 0 obj <<
+/D [11116 0 R /XYZ 151.701 483.964 null]
+>> endobj
+11127 0 obj <<
+/D [11116 0 R /XYZ 151.701 472.009 null]
+>> endobj
+11128 0 obj <<
+/D [11116 0 R /XYZ 151.701 460.054 null]
+>> endobj
+11129 0 obj <<
+/D [11116 0 R /XYZ 151.701 448.099 null]
+>> endobj
+11130 0 obj <<
+/D [11116 0 R /XYZ 151.701 436.143 null]
+>> endobj
 11131 0 obj <<
-/D [11128 0 R /XYZ 151.701 543.441 null]
+/D [11116 0 R /XYZ 151.701 424.188 null]
 >> endobj
 11132 0 obj <<
-/D [11128 0 R /XYZ 151.701 537.464 null]
+/D [11116 0 R /XYZ 151.701 412.233 null]
 >> endobj
 11133 0 obj <<
-/D [11128 0 R /XYZ 151.701 543.74 null]
+/D [11116 0 R /XYZ 151.701 400.278 null]
 >> endobj
 11134 0 obj <<
-/D [11128 0 R /XYZ 151.701 531.785 null]
+/D [11116 0 R /XYZ 151.701 388.323 null]
 >> endobj
 11135 0 obj <<
-/D [11128 0 R /XYZ 151.701 519.83 null]
+/D [11116 0 R /XYZ 151.701 376.368 null]
 >> endobj
 11136 0 obj <<
-/D [11128 0 R /XYZ 151.701 507.874 null]
+/D [11116 0 R /XYZ 151.701 364.412 null]
 >> endobj
 11137 0 obj <<
-/D [11128 0 R /XYZ 151.701 495.919 null]
+/D [11116 0 R /XYZ 151.701 352.457 null]
 >> endobj
 11138 0 obj <<
-/D [11128 0 R /XYZ 151.701 483.964 null]
+/D [11116 0 R /XYZ 151.701 340.502 null]
 >> endobj
 11139 0 obj <<
-/D [11128 0 R /XYZ 151.701 472.009 null]
+/D [11116 0 R /XYZ 151.701 328.547 null]
 >> endobj
 11140 0 obj <<
-/D [11128 0 R /XYZ 151.701 460.054 null]
+/D [11116 0 R /XYZ 151.701 316.592 null]
 >> endobj
 11141 0 obj <<
-/D [11128 0 R /XYZ 151.701 448.099 null]
+/D [11116 0 R /XYZ 151.701 304.637 null]
 >> endobj
 11142 0 obj <<
-/D [11128 0 R /XYZ 151.701 436.143 null]
+/D [11116 0 R /XYZ 151.701 292.681 null]
 >> endobj
 11143 0 obj <<
-/D [11128 0 R /XYZ 151.701 424.188 null]
+/D [11116 0 R /XYZ 151.701 280.726 null]
 >> endobj
 11144 0 obj <<
-/D [11128 0 R /XYZ 151.701 412.233 null]
+/D [11116 0 R /XYZ 151.701 268.771 null]
 >> endobj
 11145 0 obj <<
-/D [11128 0 R /XYZ 151.701 400.278 null]
+/D [11116 0 R /XYZ 151.701 256.816 null]
 >> endobj
 11146 0 obj <<
-/D [11128 0 R /XYZ 151.701 388.323 null]
+/D [11116 0 R /XYZ 151.701 244.861 null]
 >> endobj
 11147 0 obj <<
-/D [11128 0 R /XYZ 151.701 376.368 null]
+/D [11116 0 R /XYZ 151.701 232.906 null]
 >> endobj
 11148 0 obj <<
-/D [11128 0 R /XYZ 151.701 364.412 null]
+/D [11116 0 R /XYZ 151.701 220.95 null]
 >> endobj
-11149 0 obj <<
-/D [11128 0 R /XYZ 151.701 352.457 null]
->> endobj
-11150 0 obj <<
-/D [11128 0 R /XYZ 151.701 340.502 null]
->> endobj
-11151 0 obj <<
-/D [11128 0 R /XYZ 151.701 328.547 null]
->> endobj
-11152 0 obj <<
-/D [11128 0 R /XYZ 151.701 316.592 null]
->> endobj
-11153 0 obj <<
-/D [11128 0 R /XYZ 151.701 304.637 null]
->> endobj
-11154 0 obj <<
-/D [11128 0 R /XYZ 151.701 292.681 null]
->> endobj
-11155 0 obj <<
-/D [11128 0 R /XYZ 151.701 280.726 null]
->> endobj
-11156 0 obj <<
-/D [11128 0 R /XYZ 151.701 268.771 null]
->> endobj
-11157 0 obj <<
-/D [11128 0 R /XYZ 151.701 256.816 null]
->> endobj
-11158 0 obj <<
-/D [11128 0 R /XYZ 151.701 244.861 null]
->> endobj
-11159 0 obj <<
-/D [11128 0 R /XYZ 151.701 232.906 null]
->> endobj
-11160 0 obj <<
-/D [11128 0 R /XYZ 151.701 220.95 null]
->> endobj
-11127 0 obj <<
+11115 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F4 5484 0 R /F59 4373 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11168 0 obj <<
+11156 0 obj <<
 /Length 2527      
 /Filter /FlateDecode
 >>
@@ -63363,91 +67069,91 @@
 	Ih³¢ÝdæƒI, ߧžÛŽìÊêm|QÏ΁¯·½±…Á¤}&¶è‹æ!Šÿoäò
 endstream
 endobj
-11167 0 obj <<
+11155 0 obj <<
 /Type /Page
-/Contents 11168 0 R
-/Resources 11166 0 R
+/Contents 11156 0 R
+/Resources 11154 0 R
 /MediaBox [0 0 612 792]
-/Parent 11161 0 R
-/Annots [ 11163 0 R 11164 0 R 11165 0 R ]
+/Parent 11149 0 R
+/Annots [ 11151 0 R 11152 0 R 11153 0 R ]
 >> endobj
-11163 0 obj <<
+11151 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [287.283 260.887 363.214 272.576]
 /Subtype /Link
 /A << /S /GoTo /D (mastersmbc) >>
 >> endobj
-11164 0 obj <<
+11152 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.072 247.337 457.513 259.027]
 /Subtype /Link
 /A << /S /GoTo /D (merlinsmbc) >>
 >> endobj
-11165 0 obj <<
+11153 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [121.108 233.788 196.282 245.478]
 /Subtype /Link
 /A << /S /GoTo /D (sauronsmbc) >>
 >> endobj
-11169 0 obj <<
-/D [11167 0 R /XYZ 100.892 685.529 null]
+11157 0 obj <<
+/D [11155 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5118 0 obj <<
-/D [11167 0 R /XYZ 100.892 660.623 null]
+/D [11155 0 R /XYZ 100.892 660.623 null]
 >> endobj
-11162 0 obj <<
-/D [11167 0 R /XYZ 100.892 643.753 null]
+11150 0 obj <<
+/D [11155 0 R /XYZ 100.892 643.753 null]
 >> endobj
-11170 0 obj <<
-/D [11167 0 R /XYZ 100.892 637.775 null]
+11158 0 obj <<
+/D [11155 0 R /XYZ 100.892 637.775 null]
 >> endobj
-11171 0 obj <<
-/D [11167 0 R /XYZ 100.892 644.051 null]
+11159 0 obj <<
+/D [11155 0 R /XYZ 100.892 644.051 null]
 >> endobj
-11172 0 obj <<
-/D [11167 0 R /XYZ 100.892 632.096 null]
+11160 0 obj <<
+/D [11155 0 R /XYZ 100.892 632.096 null]
 >> endobj
-11173 0 obj <<
-/D [11167 0 R /XYZ 100.892 620.141 null]
+11161 0 obj <<
+/D [11155 0 R /XYZ 100.892 620.141 null]
 >> endobj
-11174 0 obj <<
-/D [11167 0 R /XYZ 100.892 608.186 null]
+11162 0 obj <<
+/D [11155 0 R /XYZ 100.892 608.186 null]
 >> endobj
-11175 0 obj <<
-/D [11167 0 R /XYZ 100.892 596.231 null]
+11163 0 obj <<
+/D [11155 0 R /XYZ 100.892 596.231 null]
 >> endobj
-11176 0 obj <<
-/D [11167 0 R /XYZ 100.892 584.276 null]
+11164 0 obj <<
+/D [11155 0 R /XYZ 100.892 584.276 null]
 >> endobj
-11177 0 obj <<
-/D [11167 0 R /XYZ 100.892 572.32 null]
+11165 0 obj <<
+/D [11155 0 R /XYZ 100.892 572.32 null]
 >> endobj
-11178 0 obj <<
-/D [11167 0 R /XYZ 100.892 560.365 null]
+11166 0 obj <<
+/D [11155 0 R /XYZ 100.892 560.365 null]
 >> endobj
-11179 0 obj <<
-/D [11167 0 R /XYZ 100.892 548.41 null]
+11167 0 obj <<
+/D [11155 0 R /XYZ 100.892 548.41 null]
 >> endobj
-11180 0 obj <<
-/D [11167 0 R /XYZ 100.892 536.455 null]
+11168 0 obj <<
+/D [11155 0 R /XYZ 100.892 536.455 null]
 >> endobj
-11181 0 obj <<
-/D [11167 0 R /XYZ 100.892 524.5 null]
+11169 0 obj <<
+/D [11155 0 R /XYZ 100.892 524.5 null]
 >> endobj
 3086 0 obj <<
-/D [11167 0 R /XYZ 100.892 368.532 null]
+/D [11155 0 R /XYZ 100.892 368.532 null]
 >> endobj
-11182 0 obj <<
-/D [11167 0 R /XYZ 100.892 342.975 null]
+11170 0 obj <<
+/D [11155 0 R /XYZ 100.892 342.975 null]
 >> endobj
-11166 0 obj <<
+11154 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F4 5484 0 R /F59 4373 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11188 0 obj <<
+11176 0 obj <<
 /Length 2912      
 /Filter /FlateDecode
 >>
@@ -63479,102 +67185,102 @@
 @ùtÏW«86ö5Yâبsqð“§-‰SÌ(þMJFùI[ÄzúW ™ó¶iÚŸ[A	Ùã?iÃ/áºÈOÚú¯5Tœm9ôä°:btæóèõùE’y
 endstream
 endobj
-11187 0 obj <<
+11175 0 obj <<
 /Type /Page
-/Contents 11188 0 R
-/Resources 11186 0 R
+/Contents 11176 0 R
+/Resources 11174 0 R
 /MediaBox [0 0 612 792]
-/Parent 11161 0 R
+/Parent 11149 0 R
 >> endobj
-11189 0 obj <<
-/D [11187 0 R /XYZ 151.701 685.529 null]
+11177 0 obj <<
+/D [11175 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5119 0 obj <<
-/D [11187 0 R /XYZ 151.701 562.731 null]
+/D [11175 0 R /XYZ 151.701 562.731 null]
 >> endobj
+11171 0 obj <<
+/D [11175 0 R /XYZ 151.701 545.861 null]
+>> endobj
+11178 0 obj <<
+/D [11175 0 R /XYZ 151.701 539.884 null]
+>> endobj
+11179 0 obj <<
+/D [11175 0 R /XYZ 151.701 546.16 null]
+>> endobj
+11180 0 obj <<
+/D [11175 0 R /XYZ 151.701 534.205 null]
+>> endobj
+11181 0 obj <<
+/D [11175 0 R /XYZ 151.701 522.25 null]
+>> endobj
+11182 0 obj <<
+/D [11175 0 R /XYZ 151.701 510.295 null]
+>> endobj
 11183 0 obj <<
-/D [11187 0 R /XYZ 151.701 545.861 null]
+/D [11175 0 R /XYZ 151.701 498.339 null]
 >> endobj
+11184 0 obj <<
+/D [11175 0 R /XYZ 151.701 486.384 null]
+>> endobj
+11185 0 obj <<
+/D [11175 0 R /XYZ 151.701 474.429 null]
+>> endobj
+11186 0 obj <<
+/D [11175 0 R /XYZ 151.701 462.474 null]
+>> endobj
+11187 0 obj <<
+/D [11175 0 R /XYZ 151.701 450.519 null]
+>> endobj
+11188 0 obj <<
+/D [11175 0 R /XYZ 151.701 438.564 null]
+>> endobj
+11189 0 obj <<
+/D [11175 0 R /XYZ 151.701 426.608 null]
+>> endobj
 11190 0 obj <<
-/D [11187 0 R /XYZ 151.701 539.884 null]
+/D [11175 0 R /XYZ 151.701 414.653 null]
 >> endobj
 11191 0 obj <<
-/D [11187 0 R /XYZ 151.701 546.16 null]
+/D [11175 0 R /XYZ 151.701 402.698 null]
 >> endobj
 11192 0 obj <<
-/D [11187 0 R /XYZ 151.701 534.205 null]
+/D [11175 0 R /XYZ 151.701 390.743 null]
 >> endobj
 11193 0 obj <<
-/D [11187 0 R /XYZ 151.701 522.25 null]
+/D [11175 0 R /XYZ 151.701 378.788 null]
 >> endobj
 11194 0 obj <<
-/D [11187 0 R /XYZ 151.701 510.295 null]
+/D [11175 0 R /XYZ 151.701 354.877 null]
 >> endobj
 11195 0 obj <<
-/D [11187 0 R /XYZ 151.701 498.339 null]
+/D [11175 0 R /XYZ 151.701 330.967 null]
 >> endobj
 11196 0 obj <<
-/D [11187 0 R /XYZ 151.701 486.384 null]
+/D [11175 0 R /XYZ 151.701 319.012 null]
 >> endobj
 11197 0 obj <<
-/D [11187 0 R /XYZ 151.701 474.429 null]
+/D [11175 0 R /XYZ 151.701 307.057 null]
 >> endobj
 11198 0 obj <<
-/D [11187 0 R /XYZ 151.701 462.474 null]
+/D [11175 0 R /XYZ 151.701 295.102 null]
 >> endobj
 11199 0 obj <<
-/D [11187 0 R /XYZ 151.701 450.519 null]
+/D [11175 0 R /XYZ 151.701 283.146 null]
 >> endobj
 11200 0 obj <<
-/D [11187 0 R /XYZ 151.701 438.564 null]
+/D [11175 0 R /XYZ 151.701 271.191 null]
 >> endobj
 11201 0 obj <<
-/D [11187 0 R /XYZ 151.701 426.608 null]
+/D [11175 0 R /XYZ 151.701 259.236 null]
 >> endobj
 11202 0 obj <<
-/D [11187 0 R /XYZ 151.701 414.653 null]
+/D [11175 0 R /XYZ 151.701 247.281 null]
 >> endobj
-11203 0 obj <<
-/D [11187 0 R /XYZ 151.701 402.698 null]
->> endobj
-11204 0 obj <<
-/D [11187 0 R /XYZ 151.701 390.743 null]
->> endobj
-11205 0 obj <<
-/D [11187 0 R /XYZ 151.701 378.788 null]
->> endobj
-11206 0 obj <<
-/D [11187 0 R /XYZ 151.701 354.877 null]
->> endobj
-11207 0 obj <<
-/D [11187 0 R /XYZ 151.701 330.967 null]
->> endobj
-11208 0 obj <<
-/D [11187 0 R /XYZ 151.701 319.012 null]
->> endobj
-11209 0 obj <<
-/D [11187 0 R /XYZ 151.701 307.057 null]
->> endobj
-11210 0 obj <<
-/D [11187 0 R /XYZ 151.701 295.102 null]
->> endobj
-11211 0 obj <<
-/D [11187 0 R /XYZ 151.701 283.146 null]
->> endobj
-11212 0 obj <<
-/D [11187 0 R /XYZ 151.701 271.191 null]
->> endobj
-11213 0 obj <<
-/D [11187 0 R /XYZ 151.701 259.236 null]
->> endobj
-11214 0 obj <<
-/D [11187 0 R /XYZ 151.701 247.281 null]
->> endobj
-11186 0 obj <<
+11174 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F4 5484 0 R /F59 4373 0 R /F51 3736 0 R /F52 3737 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11217 0 obj <<
+11205 0 obj <<
 /Length 2736      
 /Filter /FlateDecode
 >>
@@ -63603,135 +67309,135 @@
 üSåfR€õ‚lÀR<ÀøvuPTp¹Öøœ¶ŠZ¨àŠVâp¶ýyE+g8šUñÐ%úqgNñ=¥kJçöuŽr˜*?+šÀ´dc:âaÊ·«C«‚û˵F§­UBëù³ÖAç¹éüÕ„Ö4Wð˜í‚'%6Ÿï"Š(™ÿ±ÙÛœm>ļȥÙ;+|¨j—KM0ܲHñæÛÕqWÁýåZãŸÿeB{÷{þ}-Ôb;Øï,lÂHF-çcÍ©”´ÖΙ:¡'±¦Ê@òð¶S'Êj¡ƒ+ûßäÿ·1üŠ
 endstream
 endobj
-11216 0 obj <<
+11204 0 obj <<
 /Type /Page
-/Contents 11217 0 R
-/Resources 11215 0 R
+/Contents 11205 0 R
+/Resources 11203 0 R
 /MediaBox [0 0 612 792]
-/Parent 11161 0 R
+/Parent 11149 0 R
 >> endobj
-11218 0 obj <<
-/D [11216 0 R /XYZ 100.892 685.529 null]
+11206 0 obj <<
+/D [11204 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5120 0 obj <<
-/D [11216 0 R /XYZ 100.892 639.792 null]
+/D [11204 0 R /XYZ 100.892 639.792 null]
 >> endobj
-11184 0 obj <<
-/D [11216 0 R /XYZ 100.892 622.922 null]
+11172 0 obj <<
+/D [11204 0 R /XYZ 100.892 622.922 null]
 >> endobj
+11207 0 obj <<
+/D [11204 0 R /XYZ 100.892 616.945 null]
+>> endobj
+11208 0 obj <<
+/D [11204 0 R /XYZ 100.892 623.221 null]
+>> endobj
+11209 0 obj <<
+/D [11204 0 R /XYZ 100.892 611.266 null]
+>> endobj
+11210 0 obj <<
+/D [11204 0 R /XYZ 100.892 599.311 null]
+>> endobj
+11211 0 obj <<
+/D [11204 0 R /XYZ 100.892 587.356 null]
+>> endobj
+11212 0 obj <<
+/D [11204 0 R /XYZ 100.892 575.4 null]
+>> endobj
+11213 0 obj <<
+/D [11204 0 R /XYZ 100.892 563.445 null]
+>> endobj
+11214 0 obj <<
+/D [11204 0 R /XYZ 100.892 551.49 null]
+>> endobj
+11215 0 obj <<
+/D [11204 0 R /XYZ 100.892 539.535 null]
+>> endobj
+11216 0 obj <<
+/D [11204 0 R /XYZ 100.892 527.58 null]
+>> endobj
+11217 0 obj <<
+/D [11204 0 R /XYZ 100.892 515.625 null]
+>> endobj
+11218 0 obj <<
+/D [11204 0 R /XYZ 100.892 503.669 null]
+>> endobj
 11219 0 obj <<
-/D [11216 0 R /XYZ 100.892 616.945 null]
+/D [11204 0 R /XYZ 100.892 491.714 null]
 >> endobj
 11220 0 obj <<
-/D [11216 0 R /XYZ 100.892 623.221 null]
+/D [11204 0 R /XYZ 100.892 479.759 null]
 >> endobj
 11221 0 obj <<
-/D [11216 0 R /XYZ 100.892 611.266 null]
+/D [11204 0 R /XYZ 100.892 467.804 null]
 >> endobj
 11222 0 obj <<
-/D [11216 0 R /XYZ 100.892 599.311 null]
+/D [11204 0 R /XYZ 100.892 455.849 null]
 >> endobj
 11223 0 obj <<
-/D [11216 0 R /XYZ 100.892 587.356 null]
+/D [11204 0 R /XYZ 100.892 443.894 null]
 >> endobj
 11224 0 obj <<
-/D [11216 0 R /XYZ 100.892 575.4 null]
+/D [11204 0 R /XYZ 100.892 431.938 null]
 >> endobj
 11225 0 obj <<
-/D [11216 0 R /XYZ 100.892 563.445 null]
+/D [11204 0 R /XYZ 100.892 419.983 null]
 >> endobj
 11226 0 obj <<
-/D [11216 0 R /XYZ 100.892 551.49 null]
+/D [11204 0 R /XYZ 100.892 408.028 null]
 >> endobj
 11227 0 obj <<
-/D [11216 0 R /XYZ 100.892 539.535 null]
+/D [11204 0 R /XYZ 100.892 396.073 null]
 >> endobj
 11228 0 obj <<
-/D [11216 0 R /XYZ 100.892 527.58 null]
+/D [11204 0 R /XYZ 100.892 384.118 null]
 >> endobj
 11229 0 obj <<
-/D [11216 0 R /XYZ 100.892 515.625 null]
+/D [11204 0 R /XYZ 100.892 372.163 null]
 >> endobj
 11230 0 obj <<
-/D [11216 0 R /XYZ 100.892 503.669 null]
+/D [11204 0 R /XYZ 100.892 360.207 null]
 >> endobj
 11231 0 obj <<
-/D [11216 0 R /XYZ 100.892 491.714 null]
+/D [11204 0 R /XYZ 100.892 348.252 null]
 >> endobj
+5121 0 obj <<
+/D [11204 0 R /XYZ 100.892 270.477 null]
+>> endobj
+11173 0 obj <<
+/D [11204 0 R /XYZ 100.892 253.607 null]
+>> endobj
 11232 0 obj <<
-/D [11216 0 R /XYZ 100.892 479.759 null]
+/D [11204 0 R /XYZ 100.892 247.63 null]
 >> endobj
 11233 0 obj <<
-/D [11216 0 R /XYZ 100.892 467.804 null]
+/D [11204 0 R /XYZ 100.892 253.906 null]
 >> endobj
 11234 0 obj <<
-/D [11216 0 R /XYZ 100.892 455.849 null]
+/D [11204 0 R /XYZ 100.892 241.951 null]
 >> endobj
 11235 0 obj <<
-/D [11216 0 R /XYZ 100.892 443.894 null]
+/D [11204 0 R /XYZ 100.892 229.996 null]
 >> endobj
 11236 0 obj <<
-/D [11216 0 R /XYZ 100.892 431.938 null]
+/D [11204 0 R /XYZ 100.892 218.04 null]
 >> endobj
 11237 0 obj <<
-/D [11216 0 R /XYZ 100.892 419.983 null]
+/D [11204 0 R /XYZ 100.892 206.085 null]
 >> endobj
 11238 0 obj <<
-/D [11216 0 R /XYZ 100.892 408.028 null]
+/D [11204 0 R /XYZ 100.892 194.13 null]
 >> endobj
 11239 0 obj <<
-/D [11216 0 R /XYZ 100.892 396.073 null]
+/D [11204 0 R /XYZ 100.892 182.175 null]
 >> endobj
 11240 0 obj <<
-/D [11216 0 R /XYZ 100.892 384.118 null]
+/D [11204 0 R /XYZ 100.892 170.22 null]
 >> endobj
-11241 0 obj <<
-/D [11216 0 R /XYZ 100.892 372.163 null]
->> endobj
-11242 0 obj <<
-/D [11216 0 R /XYZ 100.892 360.207 null]
->> endobj
-11243 0 obj <<
-/D [11216 0 R /XYZ 100.892 348.252 null]
->> endobj
-5121 0 obj <<
-/D [11216 0 R /XYZ 100.892 270.477 null]
->> endobj
-11185 0 obj <<
-/D [11216 0 R /XYZ 100.892 253.607 null]
->> endobj
-11244 0 obj <<
-/D [11216 0 R /XYZ 100.892 247.63 null]
->> endobj
-11245 0 obj <<
-/D [11216 0 R /XYZ 100.892 253.906 null]
->> endobj
-11246 0 obj <<
-/D [11216 0 R /XYZ 100.892 241.951 null]
->> endobj
-11247 0 obj <<
-/D [11216 0 R /XYZ 100.892 229.996 null]
->> endobj
-11248 0 obj <<
-/D [11216 0 R /XYZ 100.892 218.04 null]
->> endobj
-11249 0 obj <<
-/D [11216 0 R /XYZ 100.892 206.085 null]
->> endobj
-11250 0 obj <<
-/D [11216 0 R /XYZ 100.892 194.13 null]
->> endobj
-11251 0 obj <<
-/D [11216 0 R /XYZ 100.892 182.175 null]
->> endobj
-11252 0 obj <<
-/D [11216 0 R /XYZ 100.892 170.22 null]
->> endobj
-11215 0 obj <<
+11203 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F4 5484 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11255 0 obj <<
+11243 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -63739,20 +67445,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-11254 0 obj <<
+11242 0 obj <<
 /Type /Page
-/Contents 11255 0 R
-/Resources 11253 0 R
+/Contents 11243 0 R
+/Resources 11241 0 R
 /MediaBox [0 0 612 792]
-/Parent 11161 0 R
+/Parent 11149 0 R
 >> endobj
-11256 0 obj <<
-/D [11254 0 R /XYZ 151.701 685.529 null]
+11244 0 obj <<
+/D [11242 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11253 0 obj <<
+11241 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-11259 0 obj <<
+11247 0 obj <<
 /Length 137       
 /Filter /FlateDecode
 >>
@@ -63763,21 +67469,21 @@
 ‚E´‹@pÙ&ʲÿ»D­ÎÀp†!€àÀèËmf›½ 	½×ò´%äÁzƒÑB®pça/Ó,¤	Žoâ‘OݳbP«'%LIt]ŒÝ<ÃTæñÕºZZíáú^¨x]º6¬sÿK?î2û 4é(B
 endstream
 endobj
-11258 0 obj <<
+11246 0 obj <<
 /Type /Page
-/Contents 11259 0 R
-/Resources 11257 0 R
+/Contents 11247 0 R
+/Resources 11245 0 R
 /MediaBox [0 0 612 792]
-/Parent 11161 0 R
+/Parent 11149 0 R
 >> endobj
 3090 0 obj <<
-/D [11258 0 R /XYZ 100.892 495.521 null]
+/D [11246 0 R /XYZ 100.892 495.521 null]
 >> endobj
-11257 0 obj <<
+11245 0 obj <<
 /Font << /F27 3691 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11262 0 obj <<
+11250 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -63785,17 +67491,17 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-11261 0 obj <<
+11249 0 obj <<
 /Type /Page
-/Contents 11262 0 R
-/Resources 11260 0 R
+/Contents 11250 0 R
+/Resources 11248 0 R
 /MediaBox [0 0 612 792]
-/Parent 11263 0 R
+/Parent 11251 0 R
 >> endobj
-11260 0 obj <<
+11248 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-11266 0 obj <<
+11254 0 obj <<
 /Length 1366      
 /Filter /FlateDecode
 >>
@@ -63814,36 +67520,36 @@
 Uƒã….Á„ëƒò-Ó?ùÆiñ1”ñðJÙ”íNbÄÏÚ'L+ô†«OªÓûèÕ¥ZË0mN·40Ðå¡lŽ^E@\:üx·’‚‚ɨéá$pfãxóSêø×òî&gó7‰ðne´ÊD’‰ðÓR2qf?,ÿj»X®
 endstream
 endobj
-11265 0 obj <<
+11253 0 obj <<
 /Type /Page
-/Contents 11266 0 R
-/Resources 11264 0 R
+/Contents 11254 0 R
+/Resources 11252 0 R
 /MediaBox [0 0 612 792]
-/Parent 11263 0 R
+/Parent 11251 0 R
 >> endobj
-11267 0 obj <<
-/D [11265 0 R /XYZ 100.892 685.529 null]
+11255 0 obj <<
+/D [11253 0 R /XYZ 100.892 685.529 null]
 >> endobj
-11268 0 obj <<
-/D [11265 0 R /XYZ 100.892 660.623 null]
+11256 0 obj <<
+/D [11253 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3094 0 obj <<
-/D [11265 0 R /XYZ 100.892 660.623 null]
+/D [11253 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3891 0 obj <<
-/D [11265 0 R /XYZ 100.892 462.877 null]
+/D [11253 0 R /XYZ 100.892 462.877 null]
 >> endobj
 3098 0 obj <<
-/D [11265 0 R /XYZ 100.892 361.304 null]
+/D [11253 0 R /XYZ 100.892 361.304 null]
 >> endobj
-11269 0 obj <<
-/D [11265 0 R /XYZ 100.892 322.81 null]
+11257 0 obj <<
+/D [11253 0 R /XYZ 100.892 322.81 null]
 >> endobj
-11264 0 obj <<
+11252 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11273 0 obj <<
+11261 0 obj <<
 /Length 1939      
 /Filter /FlateDecode
 >>
@@ -63865,68 +67571,68 @@
 Y-ƒ×ªãú{ Ï¿ìäó!†”ºäòÖûX?„¦„s¼ö^Âýüö®ç‚ª±Ò\øBÆúƒí	
 endstream
 endobj
-11272 0 obj <<
+11260 0 obj <<
 /Type /Page
-/Contents 11273 0 R
-/Resources 11271 0 R
+/Contents 11261 0 R
+/Resources 11259 0 R
 /MediaBox [0 0 612 792]
-/Parent 11263 0 R
-/Annots [ 11270 0 R ]
+/Parent 11251 0 R
+/Annots [ 11258 0 R ]
 >> endobj
-11270 0 obj <<
+11258 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 275.576 218.758 285.023]
 /Subtype /Link
 /A << /S /GoTo /D (pdbeditthing) >>
 >> endobj
-11274 0 obj <<
-/D [11272 0 R /XYZ 151.701 685.529 null]
+11262 0 obj <<
+/D [11260 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3102 0 obj <<
-/D [11272 0 R /XYZ 151.701 660.623 null]
+/D [11260 0 R /XYZ 151.701 660.623 null]
 >> endobj
-11275 0 obj <<
-/D [11272 0 R /XYZ 151.701 641.703 null]
+11263 0 obj <<
+/D [11260 0 R /XYZ 151.701 641.703 null]
 >> endobj
 3106 0 obj <<
-/D [11272 0 R /XYZ 151.701 641.703 null]
+/D [11260 0 R /XYZ 151.701 641.703 null]
 >> endobj
-6964 0 obj <<
-/D [11272 0 R /XYZ 151.701 615.2 null]
+6963 0 obj <<
+/D [11260 0 R /XYZ 151.701 615.2 null]
 >> endobj
 3110 0 obj <<
-/D [11272 0 R /XYZ 151.701 553.243 null]
+/D [11260 0 R /XYZ 151.701 553.243 null]
 >> endobj
-11276 0 obj <<
-/D [11272 0 R /XYZ 151.701 526.536 null]
+11264 0 obj <<
+/D [11260 0 R /XYZ 151.701 526.536 null]
 >> endobj
 3114 0 obj <<
-/D [11272 0 R /XYZ 151.701 258.854 null]
+/D [11260 0 R /XYZ 151.701 258.854 null]
 >> endobj
-11277 0 obj <<
-/D [11272 0 R /XYZ 151.701 229.533 null]
+11265 0 obj <<
+/D [11260 0 R /XYZ 151.701 229.533 null]
 >> endobj
 3118 0 obj <<
-/D [11272 0 R /XYZ 151.701 229.533 null]
+/D [11260 0 R /XYZ 151.701 229.533 null]
 >> endobj
-11278 0 obj <<
-/D [11272 0 R /XYZ 151.701 203.03 null]
+11266 0 obj <<
+/D [11260 0 R /XYZ 151.701 203.03 null]
 >> endobj
 3122 0 obj <<
-/D [11272 0 R /XYZ 151.701 203.03 null]
+/D [11260 0 R /XYZ 151.701 203.03 null]
 >> endobj
-11279 0 obj <<
-/D [11272 0 R /XYZ 151.701 176.527 null]
+11267 0 obj <<
+/D [11260 0 R /XYZ 151.701 176.527 null]
 >> endobj
-11280 0 obj <<
-/D [11272 0 R /XYZ 151.701 153.54 null]
+11268 0 obj <<
+/D [11260 0 R /XYZ 151.701 153.54 null]
 >> endobj
-11271 0 obj <<
+11259 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11283 0 obj <<
+11271 0 obj <<
 /Length 1614      
 /Filter /FlateDecode
 >>
@@ -63948,60 +67654,60 @@
 rtÙëÁ쐵íÊÓeæ®îÍPR¬§;(×$Pu¢º„˜ß&ß7ëÙO«vä
 endstream
 endobj
-11282 0 obj <<
+11270 0 obj <<
 /Type /Page
-/Contents 11283 0 R
-/Resources 11281 0 R
+/Contents 11271 0 R
+/Resources 11269 0 R
 /MediaBox [0 0 612 792]
-/Parent 11263 0 R
+/Parent 11251 0 R
 >> endobj
-11284 0 obj <<
-/D [11282 0 R /XYZ 100.892 685.529 null]
+11272 0 obj <<
+/D [11270 0 R /XYZ 100.892 685.529 null]
 >> endobj
-11285 0 obj <<
-/D [11282 0 R /XYZ 100.892 660.623 null]
+11273 0 obj <<
+/D [11270 0 R /XYZ 100.892 660.623 null]
 >> endobj
-11286 0 obj <<
-/D [11282 0 R /XYZ 100.892 622.565 null]
+11274 0 obj <<
+/D [11270 0 R /XYZ 100.892 622.565 null]
 >> endobj
-11287 0 obj <<
-/D [11282 0 R /XYZ 100.892 568.332 null]
+11275 0 obj <<
+/D [11270 0 R /XYZ 100.892 568.332 null]
 >> endobj
-11288 0 obj <<
-/D [11282 0 R /XYZ 100.892 516.22 null]
+11276 0 obj <<
+/D [11270 0 R /XYZ 100.892 516.22 null]
 >> endobj
-11289 0 obj <<
-/D [11282 0 R /XYZ 100.892 452.679 null]
+11277 0 obj <<
+/D [11270 0 R /XYZ 100.892 452.679 null]
 >> endobj
-11290 0 obj <<
-/D [11282 0 R /XYZ 100.892 411.995 null]
+11278 0 obj <<
+/D [11270 0 R /XYZ 100.892 411.995 null]
 >> endobj
-11291 0 obj <<
-/D [11282 0 R /XYZ 100.892 373.432 null]
+11279 0 obj <<
+/D [11270 0 R /XYZ 100.892 373.432 null]
 >> endobj
-11292 0 obj <<
-/D [11282 0 R /XYZ 100.892 348.418 null]
+11280 0 obj <<
+/D [11270 0 R /XYZ 100.892 348.418 null]
 >> endobj
-11293 0 obj <<
-/D [11282 0 R /XYZ 100.892 323.404 null]
+11281 0 obj <<
+/D [11270 0 R /XYZ 100.892 323.404 null]
 >> endobj
-11294 0 obj <<
-/D [11282 0 R /XYZ 100.892 284.841 null]
+11282 0 obj <<
+/D [11270 0 R /XYZ 100.892 284.841 null]
 >> endobj
-11295 0 obj <<
-/D [11282 0 R /XYZ 100.892 248.399 null]
+11283 0 obj <<
+/D [11270 0 R /XYZ 100.892 248.399 null]
 >> endobj
-11296 0 obj <<
-/D [11282 0 R /XYZ 100.892 207.109 null]
+11284 0 obj <<
+/D [11270 0 R /XYZ 100.892 207.109 null]
 >> endobj
-11297 0 obj <<
-/D [11282 0 R /XYZ 100.892 182.701 null]
+11285 0 obj <<
+/D [11270 0 R /XYZ 100.892 182.701 null]
 >> endobj
-11281 0 obj <<
+11269 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11301 0 obj <<
+11289 0 obj <<
 /Length 1342      
 /Filter /FlateDecode
 >>
@@ -64021,40 +67727,40 @@
 K¨k¼¿¾°6ž“Ç„E§ûo©uÿËõõñx$#¾¸I7×fvý‚ÇB$bBÓ—ß´/G@è_’òD
 endstream
 endobj
-11300 0 obj <<
+11288 0 obj <<
 /Type /Page
-/Contents 11301 0 R
-/Resources 11299 0 R
+/Contents 11289 0 R
+/Resources 11287 0 R
 /MediaBox [0 0 612 792]
-/Parent 11263 0 R
-/Annots [ 11298 0 R ]
+/Parent 11251 0 R
+/Annots [ 11286 0 R ]
 >> endobj
-11298 0 obj <<
+11286 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 303.55 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.samba.org/samba/)>>
 >> endobj
-11302 0 obj <<
-/D [11300 0 R /XYZ 151.701 685.529 null]
+11290 0 obj <<
+/D [11288 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3126 0 obj <<
-/D [11300 0 R /XYZ 151.701 660.623 null]
+/D [11288 0 R /XYZ 151.701 660.623 null]
 >> endobj
-11303 0 obj <<
-/D [11300 0 R /XYZ 151.701 641.897 null]
+11291 0 obj <<
+/D [11288 0 R /XYZ 151.701 641.897 null]
 >> endobj
 3130 0 obj <<
-/D [11300 0 R /XYZ 151.701 496.367 null]
+/D [11288 0 R /XYZ 151.701 496.367 null]
 >> endobj
-11304 0 obj <<
-/D [11300 0 R /XYZ 151.701 471.799 null]
+11292 0 obj <<
+/D [11288 0 R /XYZ 151.701 471.799 null]
 >> endobj
-11299 0 obj <<
+11287 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R /F29 5413 0 R /F51 3736 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11307 0 obj <<
+11295 0 obj <<
 /Length 770       
 /Filter /FlateDecode
 >>
@@ -64071,27 +67777,27 @@
 ÿH~'yó
 endstream
 endobj
-11306 0 obj <<
+11294 0 obj <<
 /Type /Page
-/Contents 11307 0 R
-/Resources 11305 0 R
+/Contents 11295 0 R
+/Resources 11293 0 R
 /MediaBox [0 0 612 792]
-/Parent 11263 0 R
+/Parent 11251 0 R
 >> endobj
-11308 0 obj <<
-/D [11306 0 R /XYZ 100.892 685.529 null]
+11296 0 obj <<
+/D [11294 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3134 0 obj <<
-/D [11306 0 R /XYZ 100.892 282.845 null]
+/D [11294 0 R /XYZ 100.892 282.845 null]
 >> endobj
-11309 0 obj <<
-/D [11306 0 R /XYZ 100.892 258.682 null]
+11297 0 obj <<
+/D [11294 0 R /XYZ 100.892 258.682 null]
 >> endobj
-11305 0 obj <<
+11293 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F51 3736 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11312 0 obj <<
+11300 0 obj <<
 /Length 662       
 /Filter /FlateDecode
 >>
@@ -64099,21 +67805,21 @@
 xÚÅWËr›0ÝóZⅉěeÛi:“ésâ¬Ò,dA$QINš¿ïÂILÛ™$Ѝ¹Ð9G÷iŒZ„чàí&89Í0"8ªpEÐf‡HF¢”—U”U)Ú4è2,p¹ºÚœœÆ1*£*ÏÓñÕ"‰Rï\«u‚ÆZ.[0³4¤²ñÆÅÐjÚܯŸS±¥«5II¾ëè`™ö’ÌÁï7ÁÀmÌ~#”EI‚j\^aÔÀ³3„£¤*Ñíø¦@IVFy–Ý£óà[€'•øH-9R›—Î3”§U4ªrJ¾cRŒ<žœ’ìè«Ñ<§S™$¡ õ*.ÂnEB.™[KCSk>ØG»sXOÛ­c¿ÃÞŒg	ÈVù•V«ýàÍ¥Èô­ÒÜv‚×Wó‰Ý–6;|ÃzfÙ#ñÏðDòbôgì´ÿË5¦Ù0†èõ*.CÙ97¶f’Š'§±pìG4Tßyðåà„?ƒ Ov/¢¸HŽïÍÞvL:OY^CUUò¯LI%PÁ^”¸€8‘d¶ƒú؍™ý|ú†Nq¡zëTi(¢ÍtNw²^4IØÏÁw. »wõ*ü‚eÈÚ‹?‡ÅW­¬wM­zOøËà¢Ã̇&3ŒðJOéU+!èńêÚ	$ÇxÛó³\ÌßYêžO	郣§"B¸Ð —1…–æñyóñÓMü,É«0µ»é¨”¬_\½á­äÎíâÐPÙ§N2HÖªF›ï¡€ØQíjàqÕ«RôßeàUXpC·ý¤\2»åÊÌ?WAßä“ôýðPæ̽V˜#nxÏZf–˜<¦¯tZÓxUÆ{ÜOpw–n6=\áÔ/¡é9·
 endstream
 endobj
-11311 0 obj <<
+11299 0 obj <<
 /Type /Page
-/Contents 11312 0 R
-/Resources 11310 0 R
+/Contents 11300 0 R
+/Resources 11298 0 R
 /MediaBox [0 0 612 792]
-/Parent 11314 0 R
+/Parent 11302 0 R
 >> endobj
-11313 0 obj <<
-/D [11311 0 R /XYZ 151.701 685.529 null]
+11301 0 obj <<
+/D [11299 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11310 0 obj <<
+11298 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F51 3736 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11317 0 obj <<
+11305 0 obj <<
 /Length 680       
 /Filter /FlateDecode
 >>
@@ -64129,21 +67835,21 @@
 õ}æÛ(2yÝ:â;³úϵè<¾bÄ'ïZ/µ¸ÿr­±ZË™ä™Î 1¯Lœ©im-/‡¾þYªAÖWÀwò2v÷O¿úïÔo(=:­
 endstream
 endobj
-11316 0 obj <<
+11304 0 obj <<
 /Type /Page
-/Contents 11317 0 R
-/Resources 11315 0 R
+/Contents 11305 0 R
+/Resources 11303 0 R
 /MediaBox [0 0 612 792]
-/Parent 11314 0 R
+/Parent 11302 0 R
 >> endobj
-11318 0 obj <<
-/D [11316 0 R /XYZ 100.892 685.529 null]
+11306 0 obj <<
+/D [11304 0 R /XYZ 100.892 685.529 null]
 >> endobj
-11315 0 obj <<
+11303 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F51 3736 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11321 0 obj <<
+11309 0 obj <<
 /Length 665       
 /Filter /FlateDecode
 >>
@@ -64152,21 +67858,21 @@
 fg„Ò0ŽAÕz·wóíÀ0.ðdW¶ N‹0KS3nÀÆûêÁA%œ¨EµYÂ,YR†VU¯äD¹å1þxµFéä/;…¢Â§’Óƈˆ¿êç5æÚÏcŸÍö/oNi¬‹«È(Š.£ÑÄf€ì$5'Ï€vWƒzÆk*™^YRL´àÍ{Ü_ˆûìp•Æz8v!œ¯Ø:¿|Eöj¶¢Ü?–	ãõ>ݹÃ¡Súx‡u^©±ªtˆ¢Ú¡=…ÆC`DÛö{ÐìØZÈ!øD(‡µ–lwÔÆ9s§äQ™G9q™]²Á”ªÆ£lÜ46	ŸÜôp¤J«¥I¥™øöÝâðÎÜžeýô}»Ñ?¡Ða]/‘nÌñ¬qio¡¡aJ/î„	!b¶*ÃçåÿñÑ´í¬éYnÎNáq<Ä.X¥™O+WÆjFy<µþE2ë%ÛºýŽÊÂØ´I“>Õ±¹uš	>¾"šÀ<öUjjtnнÕ)!ïš&·óŸ W}êŽ$u‚š’7np…p/vó'Ìjlm³–Ÿš5Í\@~]7œUÂê ãAÇ5æÞ"qån.F͆þá¼›TÎeÎ%L™äl7sJ°ì{Ÿs3ãÓÜ£~ Ú;
 endstream
 endobj
-11320 0 obj <<
+11308 0 obj <<
 /Type /Page
-/Contents 11321 0 R
-/Resources 11319 0 R
+/Contents 11309 0 R
+/Resources 11307 0 R
 /MediaBox [0 0 612 792]
-/Parent 11314 0 R
+/Parent 11302 0 R
 >> endobj
-11322 0 obj <<
-/D [11320 0 R /XYZ 151.701 685.529 null]
+11310 0 obj <<
+/D [11308 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11319 0 obj <<
+11307 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F51 3736 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11325 0 obj <<
+11313 0 obj <<
 /Length 666       
 /Filter /FlateDecode
 >>
@@ -64181,21 +67887,21 @@
 ÃEüdãfú„ä3D/îƒ8ñM)„<pŸæÃO½JüÇ
 endstream
 endobj
-11324 0 obj <<
+11312 0 obj <<
 /Type /Page
-/Contents 11325 0 R
-/Resources 11323 0 R
+/Contents 11313 0 R
+/Resources 11311 0 R
 /MediaBox [0 0 612 792]
-/Parent 11314 0 R
+/Parent 11302 0 R
 >> endobj
-11326 0 obj <<
-/D [11324 0 R /XYZ 100.892 685.529 null]
+11314 0 obj <<
+/D [11312 0 R /XYZ 100.892 685.529 null]
 >> endobj
-11323 0 obj <<
+11311 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F51 3736 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11329 0 obj <<
+11317 0 obj <<
 /Length 823       
 /Filter /FlateDecode
 >>
@@ -64207,27 +67913,27 @@
 êºâäÎÔPûðQAõZ1êZ®¦açvÿrTA«÷ë¶é¢÷	h[ÕW«5ß0W¨×fþ…ÇâNdï¥,ÛiþìÁsÍô¤­­§l“\÷C²}Ú…¥¦Ñž†üò†«£úÔ!ªµ<¿·AfàﶥËð¼Y:ÿ?'¸
 endstream
 endobj
-11328 0 obj <<
+11316 0 obj <<
 /Type /Page
-/Contents 11329 0 R
-/Resources 11327 0 R
+/Contents 11317 0 R
+/Resources 11315 0 R
 /MediaBox [0 0 612 792]
-/Parent 11314 0 R
+/Parent 11302 0 R
 >> endobj
-11330 0 obj <<
-/D [11328 0 R /XYZ 151.701 685.529 null]
+11318 0 obj <<
+/D [11316 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3138 0 obj <<
-/D [11328 0 R /XYZ 151.701 660.623 null]
+/D [11316 0 R /XYZ 151.701 660.623 null]
 >> endobj
-11331 0 obj <<
-/D [11328 0 R /XYZ 151.701 641.288 null]
+11319 0 obj <<
+/D [11316 0 R /XYZ 151.701 641.288 null]
 >> endobj
-11327 0 obj <<
+11315 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F51 3736 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11337 0 obj <<
+11325 0 obj <<
 /Length 1969      
 /Filter /FlateDecode
 >>
@@ -64255,67 +67961,67 @@
 ò垱р#CM*kìn#º¥mòñßSlPš+|ê.,&£h^ZZ˜1ãfv$=?&hï–Ç¡ã6Ãäç/®kÏÀ¯ã^0˜Î×üÉn7ã3ÌÑß?Ów=÷‹é|ãI„3!ì?O’qPú?+Rð
 endstream
 endobj
-11336 0 obj <<
+11324 0 obj <<
 /Type /Page
-/Contents 11337 0 R
-/Resources 11335 0 R
+/Contents 11325 0 R
+/Resources 11323 0 R
 /MediaBox [0 0 612 792]
-/Parent 11314 0 R
-/Annots [ 11332 0 R 11333 0 R 11334 0 R ]
+/Parent 11302 0 R
+/Annots [ 11320 0 R 11321 0 R 11322 0 R ]
 >> endobj
-11332 0 obj <<
+11320 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [143.775 503.86 374.209 515.55]
 /Subtype /Link
 /A << /S /GoTo /D (install) >>
 >> endobj
-11333 0 obj <<
+11321 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [379.671 503.86 443.058 515.55]
 /Subtype /Link
 /A << /S /GoTo /D (tdbdocs) >>
 >> endobj
-11334 0 obj <<
+11322 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [323.411 377.738 374.797 387.306]
 /Subtype /Link
 /A << /S /GoTo /D (oldtdbfiledesc) >>
 >> endobj
-11338 0 obj <<
-/D [11336 0 R /XYZ 100.892 685.529 null]
+11326 0 obj <<
+/D [11324 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3142 0 obj <<
-/D [11336 0 R /XYZ 100.892 660.623 null]
+/D [11324 0 R /XYZ 100.892 660.623 null]
 >> endobj
-11339 0 obj <<
-/D [11336 0 R /XYZ 100.892 641.703 null]
+11327 0 obj <<
+/D [11324 0 R /XYZ 100.892 641.703 null]
 >> endobj
 3146 0 obj <<
-/D [11336 0 R /XYZ 100.892 557.441 null]
+/D [11324 0 R /XYZ 100.892 557.441 null]
 >> endobj
-11340 0 obj <<
-/D [11336 0 R /XYZ 100.892 530.452 null]
+11328 0 obj <<
+/D [11324 0 R /XYZ 100.892 530.452 null]
 >> endobj
 3150 0 obj <<
-/D [11336 0 R /XYZ 100.892 358.391 null]
+/D [11324 0 R /XYZ 100.892 358.391 null]
 >> endobj
-11341 0 obj <<
-/D [11336 0 R /XYZ 100.892 327.15 null]
+11329 0 obj <<
+/D [11324 0 R /XYZ 100.892 327.15 null]
 >> endobj
-11342 0 obj <<
-/D [11336 0 R /XYZ 100.892 290.136 null]
+11330 0 obj <<
+/D [11324 0 R /XYZ 100.892 290.136 null]
 >> endobj
-11343 0 obj <<
-/D [11336 0 R /XYZ 100.892 201.037 null]
+11331 0 obj <<
+/D [11324 0 R /XYZ 100.892 201.037 null]
 >> endobj
-11335 0 obj <<
+11323 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11347 0 obj <<
+11335 0 obj <<
 /Length 2501      
 /Filter /FlateDecode
 >>
@@ -64338,39 +68044,39 @@
 ¤4¨eï«àP†)üP|€;„	7Wm­¨ý¡qoKæ%«µÛ6…³`DºÀbJãC£ë@£Xh r£ÕÚje^)ÚBa3±C³~²²ú&Ø@EÌvó̾ÀÚb[dE‹{uøžk<m(Qi|-ܬ–üŬíWìÖ$«ÊÛ) ¤qPîfóÄW21!Æh°ÉypYfÛC·1»Ië	°VÁd(oxªþ.z£—’Ù¡.Ú§I)á´/ý“­95óEíÛ^l·²Át7+îêô¹@Gy좷8øœµ.5«{‚óù÷p«1
 endstream
 endobj
-11346 0 obj <<
+11334 0 obj <<
 /Type /Page
-/Contents 11347 0 R
-/Resources 11345 0 R
+/Contents 11335 0 R
+/Resources 11333 0 R
 /MediaBox [0 0 612 792]
-/Parent 11352 0 R
+/Parent 11340 0 R
 >> endobj
-11348 0 obj <<
-/D [11346 0 R /XYZ 151.701 685.529 null]
+11336 0 obj <<
+/D [11334 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5387 0 obj <<
-/D [11346 0 R /XYZ 151.701 660.623 null]
+/D [11334 0 R /XYZ 151.701 660.623 null]
 >> endobj
-11344 0 obj <<
-/D [11346 0 R /XYZ 151.701 643.753 null]
+11332 0 obj <<
+/D [11334 0 R /XYZ 151.701 643.753 null]
 >> endobj
 3154 0 obj <<
-/D [11346 0 R /XYZ 151.701 273.589 null]
+/D [11334 0 R /XYZ 151.701 273.589 null]
 >> endobj
-11349 0 obj <<
-/D [11346 0 R /XYZ 151.701 256.993 null]
+11337 0 obj <<
+/D [11334 0 R /XYZ 151.701 256.993 null]
 >> endobj
-11350 0 obj <<
-/D [11346 0 R /XYZ 151.701 218.655 null]
+11338 0 obj <<
+/D [11334 0 R /XYZ 151.701 218.655 null]
 >> endobj
-11351 0 obj <<
-/D [11346 0 R /XYZ 151.701 143.913 null]
+11339 0 obj <<
+/D [11334 0 R /XYZ 151.701 143.913 null]
 >> endobj
-11345 0 obj <<
+11333 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11356 0 obj <<
+11344 0 obj <<
 /Length 1724      
 /Filter /FlateDecode
 >>
@@ -64391,48 +68097,48 @@
 âå»|?®´Ng×Ç®6sü’œeù8ó.æøq˜7ñ¸Á–ÃãdzßM¶¸e¸JàÒíÿÍ ¦ëÛëu&úÐXÎóÙðãuÀ².áïÔ4—Wïß_¾{}ñÄP˜òÓí£¼ýa«ú°yE€4„÷PÛÙlþ§W¶Ó¾ØýÍÆ"Šcøã:xÞaî:1q]ªïªìqÍÖN4ë7øƒáJ›y§Ûüð…ÿûÿRDŽ
 endstream
 endobj
-11355 0 obj <<
+11343 0 obj <<
 /Type /Page
-/Contents 11356 0 R
-/Resources 11354 0 R
+/Contents 11344 0 R
+/Resources 11342 0 R
 /MediaBox [0 0 612 792]
-/Parent 11352 0 R
-/Annots [ 11353 0 R 11358 0 R ]
+/Parent 11340 0 R
+/Annots [ 11341 0 R 11346 0 R ]
 >> endobj
-11353 0 obj <<
+11341 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [309.401 585.415 460.543 597.104]
 /Subtype /Link
 /A << /S /GoTo /D (passdb) >>
 >> endobj
-11358 0 obj <<
+11346 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 571.866 179.201 583.555]
 /Subtype /Link
 /A << /S /GoTo /D (passdb) >>
 >> endobj
-11357 0 obj <<
-/D [11355 0 R /XYZ 100.892 685.529 null]
+11345 0 obj <<
+/D [11343 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3158 0 obj <<
-/D [11355 0 R /XYZ 100.892 484.888 null]
+/D [11343 0 R /XYZ 100.892 484.888 null]
 >> endobj
-11359 0 obj <<
-/D [11355 0 R /XYZ 100.892 460.889 null]
+11347 0 obj <<
+/D [11343 0 R /XYZ 100.892 460.889 null]
 >> endobj
-11360 0 obj <<
-/D [11355 0 R /XYZ 100.892 431.429 null]
+11348 0 obj <<
+/D [11343 0 R /XYZ 100.892 431.429 null]
 >> endobj
-11361 0 obj <<
-/D [11355 0 R /XYZ 100.892 431.429 null]
+11349 0 obj <<
+/D [11343 0 R /XYZ 100.892 431.429 null]
 >> endobj
-11354 0 obj <<
+11342 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F17 3698 0 R /F52 3737 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11364 0 obj <<
+11352 0 obj <<
 /Length 2081      
 /Filter /FlateDecode
 >>
@@ -64454,27 +68160,27 @@
 
 endstream
 endobj
-11363 0 obj <<
+11351 0 obj <<
 /Type /Page
-/Contents 11364 0 R
-/Resources 11362 0 R
+/Contents 11352 0 R
+/Resources 11350 0 R
 /MediaBox [0 0 612 792]
-/Parent 11352 0 R
+/Parent 11340 0 R
 >> endobj
-11365 0 obj <<
-/D [11363 0 R /XYZ 151.701 685.529 null]
+11353 0 obj <<
+/D [11351 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11366 0 obj <<
-/D [11363 0 R /XYZ 151.701 335.001 null]
+11354 0 obj <<
+/D [11351 0 R /XYZ 151.701 335.001 null]
 >> endobj
-11367 0 obj <<
-/D [11363 0 R /XYZ 151.701 335.001 null]
+11355 0 obj <<
+/D [11351 0 R /XYZ 151.701 335.001 null]
 >> endobj
-11362 0 obj <<
+11350 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F85 5513 0 R /F51 3736 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11370 0 obj <<
+11358 0 obj <<
 /Length 1522      
 /Filter /FlateDecode
 >>
@@ -64501,45 +68207,45 @@
 EÔVz?§bjÊXz½!¿û¢ì¦ÎªŽõŸó¾úº­„*¬ÁZZ`Øfj4W
 endstream
 endobj
-11369 0 obj <<
+11357 0 obj <<
 /Type /Page
-/Contents 11370 0 R
-/Resources 11368 0 R
+/Contents 11358 0 R
+/Resources 11356 0 R
 /MediaBox [0 0 612 792]
-/Parent 11352 0 R
+/Parent 11340 0 R
 >> endobj
-11371 0 obj <<
-/D [11369 0 R /XYZ 100.892 685.529 null]
+11359 0 obj <<
+/D [11357 0 R /XYZ 100.892 685.529 null]
 >> endobj
-11372 0 obj <<
-/D [11369 0 R /XYZ 100.892 628.122 null]
+11360 0 obj <<
+/D [11357 0 R /XYZ 100.892 628.122 null]
 >> endobj
-11373 0 obj <<
-/D [11369 0 R /XYZ 100.892 628.122 null]
+11361 0 obj <<
+/D [11357 0 R /XYZ 100.892 628.122 null]
 >> endobj
-11374 0 obj <<
-/D [11369 0 R /XYZ 100.892 561.173 null]
+11362 0 obj <<
+/D [11357 0 R /XYZ 100.892 561.173 null]
 >> endobj
-11375 0 obj <<
-/D [11369 0 R /XYZ 100.892 561.75 null]
+11363 0 obj <<
+/D [11357 0 R /XYZ 100.892 561.75 null]
 >> endobj
-11376 0 obj <<
-/D [11369 0 R /XYZ 100.892 549.795 null]
+11364 0 obj <<
+/D [11357 0 R /XYZ 100.892 549.795 null]
 >> endobj
-11377 0 obj <<
-/D [11369 0 R /XYZ 100.892 537.84 null]
+11365 0 obj <<
+/D [11357 0 R /XYZ 100.892 537.84 null]
 >> endobj
-11378 0 obj <<
-/D [11369 0 R /XYZ 100.892 525.885 null]
+11366 0 obj <<
+/D [11357 0 R /XYZ 100.892 525.885 null]
 >> endobj
-11379 0 obj <<
-/D [11369 0 R /XYZ 100.892 513.93 null]
+11367 0 obj <<
+/D [11357 0 R /XYZ 100.892 513.93 null]
 >> endobj
-11368 0 obj <<
+11356 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R /F59 4373 0 R /F4 5484 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11382 0 obj <<
+11370 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -64547,20 +68253,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-11381 0 obj <<
+11369 0 obj <<
 /Type /Page
-/Contents 11382 0 R
-/Resources 11380 0 R
+/Contents 11370 0 R
+/Resources 11368 0 R
 /MediaBox [0 0 612 792]
-/Parent 11352 0 R
+/Parent 11340 0 R
 >> endobj
-11383 0 obj <<
-/D [11381 0 R /XYZ 151.701 685.529 null]
+11371 0 obj <<
+/D [11369 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11380 0 obj <<
+11368 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-11386 0 obj <<
+11374 0 obj <<
 /Length 1263      
 /Filter /FlateDecode
 >>
@@ -64571,39 +68277,39 @@
 Õ£ÕôYš=´“©ƒUnueŸcx KZxZåv¼Äáª*‹ø^wÖ8øLÿ¤A‚<ŒàžnÎGî”ó¬gÇFþLEacî™ï¦…Ÿ`èpü^O_ôw·e:_ð0'M^ÃêÉ“Î Y‹öBþæÿÖÜ2
 endstream
 endobj
-11385 0 obj <<
+11373 0 obj <<
 /Type /Page
-/Contents 11386 0 R
-/Resources 11384 0 R
+/Contents 11374 0 R
+/Resources 11372 0 R
 /MediaBox [0 0 612 792]
-/Parent 11352 0 R
+/Parent 11340 0 R
 >> endobj
-11387 0 obj <<
-/D [11385 0 R /XYZ 100.892 685.529 null]
+11375 0 obj <<
+/D [11373 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3162 0 obj <<
-/D [11385 0 R /XYZ 100.892 660.623 null]
+/D [11373 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3923 0 obj <<
-/D [11385 0 R /XYZ 100.892 472.86 null]
+/D [11373 0 R /XYZ 100.892 472.86 null]
 >> endobj
 3166 0 obj <<
-/D [11385 0 R /XYZ 100.892 415.142 null]
+/D [11373 0 R /XYZ 100.892 415.142 null]
 >> endobj
-11388 0 obj <<
-/D [11385 0 R /XYZ 100.892 381.639 null]
+11376 0 obj <<
+/D [11373 0 R /XYZ 100.892 381.639 null]
 >> endobj
 3170 0 obj <<
-/D [11385 0 R /XYZ 100.892 251.115 null]
+/D [11373 0 R /XYZ 100.892 251.115 null]
 >> endobj
-11389 0 obj <<
-/D [11385 0 R /XYZ 100.892 222.745 null]
+11377 0 obj <<
+/D [11373 0 R /XYZ 100.892 222.745 null]
 >> endobj
-11384 0 obj <<
+11372 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11392 0 obj <<
+11380 0 obj <<
 /Length 1556      
 /Filter /FlateDecode
 >>
@@ -64622,21 +68328,21 @@
 ÎŽ$¼i´»¸zózq|"íöŸSIùû»7\ÜPjî¾²‡öö1Òõs[ý<p|ÕÈŠ9§gÐœgpVÂÁ®ž@²%<{äþ«jüàzê °WòHÁþÿÕròæöóŽ
 endstream
 endobj
-11391 0 obj <<
+11379 0 obj <<
 /Type /Page
-/Contents 11392 0 R
-/Resources 11390 0 R
+/Contents 11380 0 R
+/Resources 11378 0 R
 /MediaBox [0 0 612 792]
-/Parent 11394 0 R
+/Parent 11382 0 R
 >> endobj
-11393 0 obj <<
-/D [11391 0 R /XYZ 151.701 685.529 null]
+11381 0 obj <<
+/D [11379 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11390 0 obj <<
+11378 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11397 0 obj <<
+11385 0 obj <<
 /Length 2043      
 /Filter /FlateDecode
 >>
@@ -64664,27 +68370,27 @@
 x_ҏ‚¸6ÍÙéï%ã÷ýÓêw·µ»
 endstream
 endobj
-11396 0 obj <<
+11384 0 obj <<
 /Type /Page
-/Contents 11397 0 R
-/Resources 11395 0 R
+/Contents 11385 0 R
+/Resources 11383 0 R
 /MediaBox [0 0 612 792]
-/Parent 11394 0 R
+/Parent 11382 0 R
 >> endobj
-11398 0 obj <<
-/D [11396 0 R /XYZ 100.892 685.529 null]
+11386 0 obj <<
+/D [11384 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3174 0 obj <<
-/D [11396 0 R /XYZ 100.892 441.787 null]
+/D [11384 0 R /XYZ 100.892 441.787 null]
 >> endobj
-11399 0 obj <<
-/D [11396 0 R /XYZ 100.892 414.469 null]
+11387 0 obj <<
+/D [11384 0 R /XYZ 100.892 414.469 null]
 >> endobj
-11395 0 obj <<
+11383 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F51 3736 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11402 0 obj <<
+11390 0 obj <<
 /Length 2077      
 /Filter /FlateDecode
 >>
@@ -64696,33 +68402,33 @@
 ÀC<rÆôlÌ[]W£^H‡ÔÂ.—x掤Ø;d³­Ö·u7£QqÖÒ¯Ö}s½û–ýòùF9c\“>þ7_1–©à‚ª…±GþÎM§™`Ç~@v`RKŒËÁ‡§–ÒRz>6®zƒ*!—¹@w¬gŠx½[	ÏE.ÓàÞ‰ ±gØñ¨I*3ä&ÃŒºS]¥qf†ŽàƒVt›¹À`%JƉs1&NSþN´ç.Ä1.,€—¡×kÊTìZ.ÔçӐ2UÓ8Eä÷œ|¹dÔhõ’ûbH+™ºgÂE¾oI™ù‚S¶µdõbÕ§mšASsC„ý\S8—‡•{\ö}ÍY±rÙYF!Q4ØôÕâÖ®è€ç,ÆN.ùõ<<×5T }Ý·«9ø¿è…H3exIce¸Hc˜‡~·2º«žZ‘#OÙæs+Jbpþjeïç-XúhßeQ¼3œ„¬kZ¬¹¥"e$y8·wI¹–€p’Š(mÒôe'ÖOÔ5(†åVÄ*—Zc-ÊÕÓ4=ÝåBZ3YÍ$±!¥]E“ʼnEgêïìÿ2㿘ÊÍjÎì¾hDÀáok\ƒÖ֝ìd§;ë›&£¨œ¸Eßïìƒt’4«%úY{Œòàc]oy*ƒˆŽ¾Oµ'îFNä:«Nõ¾ÓŸ½NFˆ‘ÓìËN”ª¦Ìƒ–Iá–qý=’Èl#:ŽóÈxÝø¬0¸"ܨ9”;ó÷u­™îI8KU€€Ù{¢lé&‚!óÐÈÊ#gHâli‡ÉYž¬d±ë5wÃròs°ö¬©WOV[S4Ðä…aé»$Õ"u‹0g„ÂuՍnåeäßEÀsð‚¹–GÕ´¨ËcÖÂÐZÆœù>ÃPVžs_“Òà?/ÊDÌuÎå„ÖT»üT>+É |!“»„ìyÝóNøà–TºV=HËÅ¥aN"<>Äè…dI‚.§‡œgô¹ƒ ȝH”ò% â¾rä´!s<ƒþ]•|48)ƒ¿ú»•@tMôå…ÓkiáxâÉ,?MfåS°s¦tðÅèÅÅè’4æm+咁MÏ¡_Èóóª#jþzBÌ¡ï1 Ô¾ýFwÎIȵ°¡Œ“TZåFßwÑéG¡,ŸQ(àƒ?Ž÷Ê‚iëŽ!îŽÍª±.”ÇÁŒEÁ“âá&Á“/>äÉ‹˜'ê¹ÿ† ¶¯iꊙŒ®RqŸ+;ð+%Ù¹V¤ôJ¡šÌ­)’oç߬L¸´ÓTÁùÚ³¿‘ÃMç‘‹D^o]ÄÖÝ(æM¼Ï<{…íWŽX¾r|菽|¸©síW|²ð‹JäYä&•ìI7g†¸c ï	¢·Ò%AÊi§,f•<*Óy>YàkQés€óà›Öáÿ¼ú;]y§æ/LOÞô2¤zþkœßÞ^ý	 z9
 endstream
 endobj
-11401 0 obj <<
+11389 0 obj <<
 /Type /Page
-/Contents 11402 0 R
-/Resources 11400 0 R
+/Contents 11390 0 R
+/Resources 11388 0 R
 /MediaBox [0 0 612 792]
-/Parent 11394 0 R
+/Parent 11382 0 R
 >> endobj
-11403 0 obj <<
-/D [11401 0 R /XYZ 151.701 685.529 null]
+11391 0 obj <<
+/D [11389 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3178 0 obj <<
-/D [11401 0 R /XYZ 151.701 616.274 null]
+/D [11389 0 R /XYZ 151.701 616.274 null]
 >> endobj
-11404 0 obj <<
-/D [11401 0 R /XYZ 151.701 588.267 null]
+11392 0 obj <<
+/D [11389 0 R /XYZ 151.701 588.267 null]
 >> endobj
 3182 0 obj <<
-/D [11401 0 R /XYZ 151.701 183.031 null]
+/D [11389 0 R /XYZ 151.701 183.031 null]
 >> endobj
-11405 0 obj <<
-/D [11401 0 R /XYZ 151.701 155.024 null]
+11393 0 obj <<
+/D [11389 0 R /XYZ 151.701 155.024 null]
 >> endobj
-11400 0 obj <<
+11388 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11408 0 obj <<
+11396 0 obj <<
 /Length 2047      
 /Filter /FlateDecode
 >>
@@ -64753,39 +68459,39 @@
 TœÀ»xôÚÕ_|0z?ûøÌà­ýmkpfÂ=öçfèM‰KÂqÉ»û·ÿbµæJ-œQâ'·Ò!Š1ä”:w=Féïø³iç,Tö“]ÂéißwÛÅÛQBö
 endstream
 endobj
-11407 0 obj <<
+11395 0 obj <<
 /Type /Page
-/Contents 11408 0 R
-/Resources 11406 0 R
+/Contents 11396 0 R
+/Resources 11394 0 R
 /MediaBox [0 0 612 792]
-/Parent 11394 0 R
+/Parent 11382 0 R
 >> endobj
-11409 0 obj <<
-/D [11407 0 R /XYZ 100.892 685.529 null]
+11397 0 obj <<
+/D [11395 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3186 0 obj <<
-/D [11407 0 R /XYZ 100.892 506.396 null]
+/D [11395 0 R /XYZ 100.892 506.396 null]
 >> endobj
-11410 0 obj <<
-/D [11407 0 R /XYZ 100.892 479.817 null]
+11398 0 obj <<
+/D [11395 0 R /XYZ 100.892 479.817 null]
 >> endobj
 3190 0 obj <<
-/D [11407 0 R /XYZ 100.892 375.283 null]
+/D [11395 0 R /XYZ 100.892 375.283 null]
 >> endobj
-11411 0 obj <<
-/D [11407 0 R /XYZ 100.892 347.192 null]
+11399 0 obj <<
+/D [11395 0 R /XYZ 100.892 347.192 null]
 >> endobj
 3194 0 obj <<
-/D [11407 0 R /XYZ 100.892 246.703 null]
+/D [11395 0 R /XYZ 100.892 246.703 null]
 >> endobj
-11412 0 obj <<
-/D [11407 0 R /XYZ 100.892 220.539 null]
+11400 0 obj <<
+/D [11395 0 R /XYZ 100.892 220.539 null]
 >> endobj
-11406 0 obj <<
+11394 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F17 3698 0 R /F53 3738 0 R /F51 3736 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11416 0 obj <<
+11404 0 obj <<
 /Length 1344      
 /Filter /FlateDecode
 >>
@@ -64804,53 +68510,53 @@
 …èrNâ(¶›ˆ@Ï :(ÇOü(vŸ×„Y¡ªvÎ_ †Aëg6Ind'Àa<ø*Œ™ž²ÔÕ2ZMìðP(Í6š¢7øJS×À~ƒä²*pZ[É楯‰¡6µ¼\áß”F•S€l¦nÆ?]éú?X«ÊPÑr}°P‚àÝ;½åÆ›’ÿ’(äëvxâdŽdVmU#­ÿ QJÝõRÿÝÙ”e€ÿé”í¤üÚÝèƒi–`Ða<md)»Ïà†þIþØÜl
 endstream
 endobj
-11415 0 obj <<
+11403 0 obj <<
 /Type /Page
-/Contents 11416 0 R
-/Resources 11414 0 R
+/Contents 11404 0 R
+/Resources 11402 0 R
 /MediaBox [0 0 612 792]
-/Parent 11394 0 R
-/Annots [ 11413 0 R ]
+/Parent 11382 0 R
+/Annots [ 11401 0 R ]
 >> endobj
-11413 0 obj <<
+11401 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [459.072 131.677 511.352 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (majtypes) >>
 >> endobj
-11417 0 obj <<
-/D [11415 0 R /XYZ 151.701 685.529 null]
+11405 0 obj <<
+/D [11403 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11418 0 obj <<
-/D [11415 0 R /XYZ 151.701 647.543 null]
+11406 0 obj <<
+/D [11403 0 R /XYZ 151.701 647.543 null]
 >> endobj
-11419 0 obj <<
-/D [11415 0 R /XYZ 151.701 608.009 null]
+11407 0 obj <<
+/D [11403 0 R /XYZ 151.701 608.009 null]
 >> endobj
-11420 0 obj <<
-/D [11415 0 R /XYZ 151.701 581.721 null]
+11408 0 obj <<
+/D [11403 0 R /XYZ 151.701 581.721 null]
 >> endobj
-11421 0 obj <<
-/D [11415 0 R /XYZ 151.701 555.737 null]
+11409 0 obj <<
+/D [11403 0 R /XYZ 151.701 555.737 null]
 >> endobj
-11422 0 obj <<
-/D [11415 0 R /XYZ 151.701 529.752 null]
+11410 0 obj <<
+/D [11403 0 R /XYZ 151.701 529.752 null]
 >> endobj
-11423 0 obj <<
-/D [11415 0 R /XYZ 151.701 290.519 null]
+11411 0 obj <<
+/D [11403 0 R /XYZ 151.701 290.519 null]
 >> endobj
 3198 0 obj <<
-/D [11415 0 R /XYZ 151.701 206.646 null]
+/D [11403 0 R /XYZ 151.701 206.646 null]
 >> endobj
-11424 0 obj <<
-/D [11415 0 R /XYZ 151.701 171.81 null]
+11412 0 obj <<
+/D [11403 0 R /XYZ 151.701 171.81 null]
 >> endobj
-11414 0 obj <<
+11402 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F85 5513 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11429 0 obj <<
+11417 0 obj <<
 /Length 1623      
 /Filter /FlateDecode
 >>
@@ -64866,47 +68572,47 @@
 d)Î^¥™–¸Ñ?šü†X'ÀCƒ9"1€)Š­Wt£¯_L;¯ý„¸kESiŠ1³åÍ	#—ê)¤ÆpéÎp]ÆÀV ƒëÍü‘zFMþ”$údùãBVùŽ|vÇ0õ8jìÿ,ÀøÎvѸ(ý˜ôíÈDºÛ]{§éÙu`Юïl_÷µ²Ösod#²¶nîÇÇõ3y]÷ñgåÔ´šXÀ?¼ÝÀͺ3¸Äùw*Ýëm÷.71âp©ÑºæÒ¶¼¹†;k.¤êqGMi§Gpÿo⵹ࠐRìÿþ	çø…Ä9Á
 endstream
 endobj
-11428 0 obj <<
+11416 0 obj <<
 /Type /Page
-/Contents 11429 0 R
-/Resources 11427 0 R
+/Contents 11417 0 R
+/Resources 11415 0 R
 /MediaBox [0 0 612 792]
-/Parent 11394 0 R
-/Annots [ 11426 0 R ]
+/Parent 11382 0 R
+/Annots [ 11414 0 R ]
 >> endobj
-11426 0 obj <<
+11414 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 282.615 152.62 294.305]
 /Subtype /Link
 /A << /S /GoTo /D (natconchoices) >>
 >> endobj
-11430 0 obj <<
-/D [11428 0 R /XYZ 100.892 685.529 null]
+11418 0 obj <<
+/D [11416 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5389 0 obj <<
-/D [11428 0 R /XYZ 100.892 660.623 null]
+/D [11416 0 R /XYZ 100.892 660.623 null]
 >> endobj
-11425 0 obj <<
-/D [11428 0 R /XYZ 100.892 643.753 null]
+11413 0 obj <<
+/D [11416 0 R /XYZ 100.892 643.753 null]
 >> endobj
 3202 0 obj <<
-/D [11428 0 R /XYZ 100.892 524.101 null]
+/D [11416 0 R /XYZ 100.892 524.101 null]
 >> endobj
-11431 0 obj <<
-/D [11428 0 R /XYZ 100.892 505.181 null]
+11419 0 obj <<
+/D [11416 0 R /XYZ 100.892 505.181 null]
 >> endobj
 3206 0 obj <<
-/D [11428 0 R /XYZ 100.892 255.97 null]
+/D [11416 0 R /XYZ 100.892 255.97 null]
 >> endobj
-11432 0 obj <<
-/D [11428 0 R /XYZ 100.892 229.308 null]
+11420 0 obj <<
+/D [11416 0 R /XYZ 100.892 229.308 null]
 >> endobj
-11427 0 obj <<
+11415 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F52 3737 0 R /F17 3698 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11436 0 obj <<
+11424 0 obj <<
 /Length 2036      
 /Filter /FlateDecode
 >>
@@ -64922,27 +68628,27 @@
 çLÈz[‹Å…¦ÅgÖæ~Î7½ÝË:¿ë]2#i”ð"ù’·Yá:eŒ…[ËÖ’ð@î ÛuÌ`|ëj(»¨ÒþÅ‹¤º‡¤.|øÞ¶èL×~ÅQfd纋®pÍOðBÅx‚°þ/C·± â]œqÈ+Ö%.p1n_­:å8ÐC½nv,:“ŸÇùÊþÃ5¶Wÿ„rã_+_±
 endstream
 endobj
-11435 0 obj <<
+11423 0 obj <<
 /Type /Page
-/Contents 11436 0 R
-/Resources 11434 0 R
+/Contents 11424 0 R
+/Resources 11422 0 R
 /MediaBox [0 0 612 792]
-/Parent 11438 0 R
+/Parent 11426 0 R
 >> endobj
-11437 0 obj <<
-/D [11435 0 R /XYZ 151.701 685.529 null]
+11425 0 obj <<
+/D [11423 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5390 0 obj <<
-/D [11435 0 R /XYZ 151.701 660.623 null]
+/D [11423 0 R /XYZ 151.701 660.623 null]
 >> endobj
-11433 0 obj <<
-/D [11435 0 R /XYZ 151.701 645.874 null]
+11421 0 obj <<
+/D [11423 0 R /XYZ 151.701 645.874 null]
 >> endobj
-11434 0 obj <<
+11422 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R /F51 3736 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11441 0 obj <<
+11429 0 obj <<
 /Length 1707      
 /Filter /FlateDecode
 >>
@@ -64959,21 +68665,21 @@
 µoþÂ~·<ù®J®:SHpL3¶÷©‹ct€;JÖgSØ=Œ7™3$¶ ŒU×Ûm‚$ZVr3¼6¾Žü[ÙJÍéé{rÏA/X,¤ŽÁ	<hÀònvN·š°¢rƒÓA–‚ ‹±õžìëÆz°ÙU‹g?zb^Õõåµh„ôxA\¨žgÂпëi—A	Òiƒ¾RDcR˜çŽüÛ~‹áFn®¸ƒÀÿ–šÀS³UП}:êâœ÷öãƽa]+‰S{`Û3æžBýœìØ[,C”Kz@Ñ¡ÓÒ0ö¯6›FšÂó¾CÐ@‚È̵\vD·Ðàë…źŠ8Í“<ÿìž%<‡òlb«Õ‘Xx’¸;ia¢fTµó(£C^!öü9nü‘ˏ.îÿf>ùhÝQ
 endstream
 endobj
-11440 0 obj <<
+11428 0 obj <<
 /Type /Page
-/Contents 11441 0 R
-/Resources 11439 0 R
+/Contents 11429 0 R
+/Resources 11427 0 R
 /MediaBox [0 0 612 792]
-/Parent 11438 0 R
+/Parent 11426 0 R
 >> endobj
-11442 0 obj <<
-/D [11440 0 R /XYZ 100.892 685.529 null]
+11430 0 obj <<
+/D [11428 0 R /XYZ 100.892 685.529 null]
 >> endobj
-11439 0 obj <<
+11427 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F51 3736 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11445 0 obj <<
+11433 0 obj <<
 /Length 674       
 /Filter /FlateDecode
 >>
@@ -64987,21 +68693,21 @@
 ÕùÏÛ•¦Ã¦¾Âºc-
 endstream
 endobj
-11444 0 obj <<
+11432 0 obj <<
 /Type /Page
-/Contents 11445 0 R
-/Resources 11443 0 R
+/Contents 11433 0 R
+/Resources 11431 0 R
 /MediaBox [0 0 612 792]
-/Parent 11438 0 R
+/Parent 11426 0 R
 >> endobj
-11446 0 obj <<
-/D [11444 0 R /XYZ 151.701 685.529 null]
+11434 0 obj <<
+/D [11432 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11443 0 obj <<
+11431 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F51 3736 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11450 0 obj <<
+11438 0 obj <<
 /Length 1652      
 /Filter /FlateDecode
 >>
@@ -65024,41 +68730,41 @@
 DÚw¾à%<P0ñ&¼7ËÒó¯ï°Ö‘K#ˆSŸ„ÕÎÁ´±^IÛžØǝîHþ~ð«d²2ð+ïDVùŸž‰þØ£à0œ34#$´µ}Ä—ä0²‚9ž&‡ý…]oÃÝË1"ÇfŠ€‰Àè1 óñx+œ±fíø¼àÕÅ%øÿý×ÐË
 endstream
 endobj
-11449 0 obj <<
+11437 0 obj <<
 /Type /Page
-/Contents 11450 0 R
-/Resources 11448 0 R
+/Contents 11438 0 R
+/Resources 11436 0 R
 /MediaBox [0 0 612 792]
-/Parent 11438 0 R
-/Annots [ 11447 0 R ]
+/Parent 11426 0 R
+/Annots [ 11435 0 R ]
 >> endobj
-11447 0 obj <<
+11435 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 272.01 167.949 281.578]
 /Subtype /Link
 /A << /S /GoTo /D (xinetd) >>
 >> endobj
-11451 0 obj <<
-/D [11449 0 R /XYZ 100.892 685.529 null]
+11439 0 obj <<
+/D [11437 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3210 0 obj <<
-/D [11449 0 R /XYZ 100.892 660.623 null]
+/D [11437 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3924 0 obj <<
-/D [11449 0 R /XYZ 100.892 474.551 null]
+/D [11437 0 R /XYZ 100.892 474.551 null]
 >> endobj
 3214 0 obj <<
-/D [11449 0 R /XYZ 100.892 349.806 null]
+/D [11437 0 R /XYZ 100.892 349.806 null]
 >> endobj
-11452 0 obj <<
-/D [11449 0 R /XYZ 100.892 321.789 null]
+11440 0 obj <<
+/D [11437 0 R /XYZ 100.892 321.789 null]
 >> endobj
-11448 0 obj <<
+11436 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11456 0 obj <<
+11444 0 obj <<
 /Length 1938      
 /Filter /FlateDecode
 >>
@@ -65081,34 +68787,34 @@
 :!_-ó2ûygIÆ~fªü°HÔu”as@Ÿ-†M¤.°®§)%þ³(þÂÔò–ê›
 endstream
 endobj
-11455 0 obj <<
+11443 0 obj <<
 /Type /Page
-/Contents 11456 0 R
-/Resources 11454 0 R
+/Contents 11444 0 R
+/Resources 11442 0 R
 /MediaBox [0 0 612 792]
-/Parent 11438 0 R
+/Parent 11426 0 R
 >> endobj
-11457 0 obj <<
-/D [11455 0 R /XYZ 151.701 685.529 null]
+11445 0 obj <<
+/D [11443 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3218 0 obj <<
-/D [11455 0 R /XYZ 151.701 441.744 null]
+/D [11443 0 R /XYZ 151.701 441.744 null]
 >> endobj
-11458 0 obj <<
-/D [11455 0 R /XYZ 151.701 412.509 null]
+11446 0 obj <<
+/D [11443 0 R /XYZ 151.701 412.509 null]
 >> endobj
 3222 0 obj <<
-/D [11455 0 R /XYZ 151.701 347.539 null]
+/D [11443 0 R /XYZ 151.701 347.539 null]
 >> endobj
-11459 0 obj <<
-/D [11455 0 R /XYZ 151.701 322.202 null]
+11447 0 obj <<
+/D [11443 0 R /XYZ 151.701 322.202 null]
 >> endobj
-11454 0 obj <<
+11442 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11462 0 obj <<
+11450 0 obj <<
 /Length 1537      
 /Filter /FlateDecode
 >>
@@ -65128,33 +68834,33 @@
 Æá[ï8x6c€CÐ*c¹å¥¾¯¹MßgYÿã![Ù]¬Úâ”È ´{ HA`úûÑ‚‡ßC0­ŒŒ$È ›ô't¢í@NOU5;+hz§ZåiÑvšÍ$cѵÔʧ?‘öÿMÿÂnòó
 endstream
 endobj
-11461 0 obj <<
+11449 0 obj <<
 /Type /Page
-/Contents 11462 0 R
-/Resources 11460 0 R
+/Contents 11450 0 R
+/Resources 11448 0 R
 /MediaBox [0 0 612 792]
-/Parent 11438 0 R
+/Parent 11426 0 R
 >> endobj
-11463 0 obj <<
-/D [11461 0 R /XYZ 100.892 685.529 null]
+11451 0 obj <<
+/D [11449 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3226 0 obj <<
-/D [11461 0 R /XYZ 100.892 660.623 null]
+/D [11449 0 R /XYZ 100.892 660.623 null]
 >> endobj
-11464 0 obj <<
-/D [11461 0 R /XYZ 100.892 641.897 null]
+11452 0 obj <<
+/D [11449 0 R /XYZ 100.892 641.897 null]
 >> endobj
 3230 0 obj <<
-/D [11461 0 R /XYZ 100.892 198.165 null]
+/D [11449 0 R /XYZ 100.892 198.165 null]
 >> endobj
-11465 0 obj <<
-/D [11461 0 R /XYZ 100.892 168.305 null]
+11453 0 obj <<
+/D [11449 0 R /XYZ 100.892 168.305 null]
 >> endobj
-11460 0 obj <<
+11448 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11468 0 obj <<
+11456 0 obj <<
 /Length 1169      
 /Filter /FlateDecode
 >>
@@ -65173,21 +68879,21 @@
 xycã8ãø³þ¶ÝaÁÁ§Ã“}úÂÿñTVJ
 endstream
 endobj
-11467 0 obj <<
+11455 0 obj <<
 /Type /Page
-/Contents 11468 0 R
-/Resources 11466 0 R
+/Contents 11456 0 R
+/Resources 11454 0 R
 /MediaBox [0 0 612 792]
-/Parent 11470 0 R
+/Parent 11458 0 R
 >> endobj
-11469 0 obj <<
-/D [11467 0 R /XYZ 151.701 685.529 null]
+11457 0 obj <<
+/D [11455 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11466 0 obj <<
+11454 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11473 0 obj <<
+11461 0 obj <<
 /Length 1093      
 /Filter /FlateDecode
 >>
@@ -65203,27 +68909,27 @@
 |ey¬FH¸]pÏÕÜ€ð$i<¦vŽ‰¬Â)¼ðaŽXúºÐãœË,Å-Ž¦/º„Ê)Jvr¹æÆ’eýú[û¦²¬(¦…BHq^„R^YÎhU!ŧÝd?*Á”Ô;®¡–ÝôåTzãm¦ÓAKveÉ.=ÙVùŒl¯öÿê(ÝLÎö€êwú~9Wb„Ü/ÀȉK+ËᾃP6üäò´u?‚¿ËP£]!L£îýßaŽržêñRo at E¼ÂÿÃìâ°JeAq(ÛÔ\ÊîJŒÐc<Oð£ÙŽV®â15‰#CΛ9¦ë3RØÄanˆU^<måC³†ž7·fÐxØ£¸·w6ôm{‡gkŒ¤Wç"ó¡m»ôqýkº¤L¾ÅcŒ ;¾ Ïà9¦lÏ+ÒvPíIõ¼B~¹q¼Ñpg÷õ­qŒ+ʃ£™²3å°5Èmçù­µï>oÜ8œÃ_ïÿï[z8
 endstream
 endobj
-11472 0 obj <<
+11460 0 obj <<
 /Type /Page
-/Contents 11473 0 R
-/Resources 11471 0 R
+/Contents 11461 0 R
+/Resources 11459 0 R
 /MediaBox [0 0 612 792]
-/Parent 11470 0 R
+/Parent 11458 0 R
 >> endobj
-11474 0 obj <<
-/D [11472 0 R /XYZ 100.892 685.529 null]
+11462 0 obj <<
+/D [11460 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3234 0 obj <<
-/D [11472 0 R /XYZ 100.892 276.885 null]
+/D [11460 0 R /XYZ 100.892 276.885 null]
 >> endobj
-11453 0 obj <<
-/D [11472 0 R /XYZ 100.892 248.36 null]
+11441 0 obj <<
+/D [11460 0 R /XYZ 100.892 248.36 null]
 >> endobj
-11471 0 obj <<
+11459 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11477 0 obj <<
+11465 0 obj <<
 /Length 1693      
 /Filter /FlateDecode
 >>
@@ -65243,21 +68949,21 @@
 ±™¼}fJÓôû9þus}7:oaý9Næoh³cˆ é`¢þá4½…bqøþÃë1!©<ÝÓ fæ+ê/ԁ]¦3Ø7ÔƒÇQ(G‰¥lé|š/HYªº§ŒÁ‚s4UÓs©ú[Êzú~ã<³,=k‡?jþÒèÿEôÏëùäà{¨
 endstream
 endobj
-11476 0 obj <<
+11464 0 obj <<
 /Type /Page
-/Contents 11477 0 R
-/Resources 11475 0 R
+/Contents 11465 0 R
+/Resources 11463 0 R
 /MediaBox [0 0 612 792]
-/Parent 11470 0 R
+/Parent 11458 0 R
 >> endobj
-11478 0 obj <<
-/D [11476 0 R /XYZ 151.701 685.529 null]
+11466 0 obj <<
+/D [11464 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11475 0 obj <<
+11463 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F85 5513 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11482 0 obj <<
+11470 0 obj <<
 /Length 1604      
 /Filter /FlateDecode
 >>
@@ -65282,58 +68988,58 @@
 
 endstream
 endobj
-11481 0 obj <<
+11469 0 obj <<
 /Type /Page
-/Contents 11482 0 R
-/Resources 11480 0 R
+/Contents 11470 0 R
+/Resources 11468 0 R
 /MediaBox [0 0 612 792]
-/Parent 11470 0 R
-/Annots [ 11479 0 R 11489 0 R ]
+/Parent 11458 0 R
+/Annots [ 11467 0 R 11477 0 R ]
 >> endobj
-11479 0 obj <<
+11467 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [372.642 245.214 460.543 257.206]
 /Subtype/Link/A<</Type/Action/S/URI/URI(https://myhost:901)>>
 >> endobj
-11489 0 obj <<
+11477 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [99.895 231.968 119.07 243.657]
 /Subtype/Link/A<</Type/Action/S/URI/URI(https://myhost:901)>>
 >> endobj
-11483 0 obj <<
-/D [11481 0 R /XYZ 100.892 685.529 null]
+11471 0 obj <<
+/D [11469 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3238 0 obj <<
-/D [11481 0 R /XYZ 100.892 592.924 null]
+/D [11469 0 R /XYZ 100.892 592.924 null]
 >> endobj
-11484 0 obj <<
-/D [11481 0 R /XYZ 100.892 563.292 null]
+11472 0 obj <<
+/D [11469 0 R /XYZ 100.892 563.292 null]
 >> endobj
-11485 0 obj <<
-/D [11481 0 R /XYZ 100.892 493.055 null]
+11473 0 obj <<
+/D [11469 0 R /XYZ 100.892 493.055 null]
 >> endobj
-11486 0 obj <<
-/D [11481 0 R /XYZ 100.892 471.384 null]
+11474 0 obj <<
+/D [11469 0 R /XYZ 100.892 471.384 null]
 >> endobj
-11487 0 obj <<
-/D [11481 0 R /XYZ 100.892 375.966 null]
+11475 0 obj <<
+/D [11469 0 R /XYZ 100.892 375.966 null]
 >> endobj
-11488 0 obj <<
-/D [11481 0 R /XYZ 100.892 351.568 null]
+11476 0 obj <<
+/D [11469 0 R /XYZ 100.892 351.568 null]
 >> endobj
 3242 0 obj <<
-/D [11481 0 R /XYZ 100.892 216.872 null]
+/D [11469 0 R /XYZ 100.892 216.872 null]
 >> endobj
-11490 0 obj <<
-/D [11481 0 R /XYZ 100.892 189.361 null]
+11478 0 obj <<
+/D [11469 0 R /XYZ 100.892 189.361 null]
 >> endobj
-11480 0 obj <<
+11468 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F17 3698 0 R /F53 3738 0 R /F52 3737 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11494 0 obj <<
+11482 0 obj <<
 /Length 2017      
 /Filter /FlateDecode
 >>
@@ -65356,33 +69062,33 @@
 	nRJë|Gc'‰ºvg¨†|Ÿ$j„]o¬äg!= ×£m Üwø³æ•Ÿè¥£_–2ʽ}Óð:N¥<{ëB¾Èž°Ô—}åwÜðÔâ31·ìèÏØ6Û-ä%ÏÕúïxr˜¡f­ð91# ãô…·è¯%1gI/(BHSñ|mô¨ƒÎ	–ÅEðàtÛŽPo¦ç5®á˺”\GñTþc¦ÈFÀú;ß̤U¤âz°ÒÁ'9ôê§Oh…¯ëO¸#!á%‘?è^¶¥?×1òû0Ó­ýxӧﳐӟyÆùfŠ®Ûâã‹óàÔ““@v#n.þ¾¿Ö‹ÿ‹ï-¿
 endstream
 endobj
-11493 0 obj <<
+11481 0 obj <<
 /Type /Page
-/Contents 11494 0 R
-/Resources 11492 0 R
+/Contents 11482 0 R
+/Resources 11480 0 R
 /MediaBox [0 0 612 792]
-/Parent 11470 0 R
+/Parent 11458 0 R
 >> endobj
-11495 0 obj <<
-/D [11493 0 R /XYZ 151.701 685.529 null]
+11483 0 obj <<
+/D [11481 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3246 0 obj <<
-/D [11493 0 R /XYZ 151.701 319.22 null]
+/D [11481 0 R /XYZ 151.701 319.22 null]
 >> endobj
-11496 0 obj <<
-/D [11493 0 R /XYZ 151.701 289.544 null]
+11484 0 obj <<
+/D [11481 0 R /XYZ 151.701 289.544 null]
 >> endobj
 3250 0 obj <<
-/D [11493 0 R /XYZ 151.701 209.358 null]
+/D [11481 0 R /XYZ 151.701 209.358 null]
 >> endobj
-11497 0 obj <<
-/D [11493 0 R /XYZ 151.701 181.543 null]
+11485 0 obj <<
+/D [11481 0 R /XYZ 151.701 181.543 null]
 >> endobj
-11492 0 obj <<
+11480 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F51 3736 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11500 0 obj <<
+11488 0 obj <<
 /Length 1883      
 /Filter /FlateDecode
 >>
@@ -65415,35 +69121,35 @@
 ¯hèÃÕÝ‚Ùy$öc?Ídï!<ÿ ×Ì®
 endstream
 endobj
-11499 0 obj <<
+11487 0 obj <<
 /Type /Page
-/Contents 11500 0 R
-/Resources 11498 0 R
+/Contents 11488 0 R
+/Resources 11486 0 R
 /MediaBox [0 0 612 792]
-/Parent 11470 0 R
-/Annots [ 11491 0 R ]
+/Parent 11458 0 R
+/Annots [ 11479 0 R ]
 >> endobj
-11491 0 obj <<
+11479 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 238.618 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.ethereal.com/)>>
 >> endobj
-11501 0 obj <<
-/D [11499 0 R /XYZ 100.892 685.529 null]
+11489 0 obj <<
+/D [11487 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3254 0 obj <<
-/D [11499 0 R /XYZ 100.892 405.814 null]
+/D [11487 0 R /XYZ 100.892 405.814 null]
 >> endobj
-11502 0 obj <<
-/D [11499 0 R /XYZ 100.892 378.62 null]
+11490 0 obj <<
+/D [11487 0 R /XYZ 100.892 378.62 null]
 >> endobj
-11498 0 obj <<
+11486 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F29 5413 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R /F53 3738 0 R /F17 3698 0 R /F51 3736 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
-/XObject << /Im3 6520 0 R >>
+/XObject << /Im3 6519 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11505 0 obj <<
+11493 0 obj <<
 /Length 1933      
 /Filter /FlateDecode
 >>
@@ -65470,40 +69176,40 @@
 ¾óÂa$Ʋ©³ñ|·l…F"f[ïE²Ë˜ÐÁΟ­sÌ	—o×…ÁHPàÙÕà@tW3³Öþ+?ç–ý3þõϯö›¿V‚{
 endstream
 endobj
-11504 0 obj <<
+11492 0 obj <<
 /Type /Page
-/Contents 11505 0 R
-/Resources 11503 0 R
+/Contents 11493 0 R
+/Resources 11491 0 R
 /MediaBox [0 0 612 792]
-/Parent 11510 0 R
+/Parent 11498 0 R
 >> endobj
-11506 0 obj <<
-/D [11504 0 R /XYZ 151.701 685.529 null]
+11494 0 obj <<
+/D [11492 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3258 0 obj <<
-/D [11504 0 R /XYZ 151.701 551.538 null]
+/D [11492 0 R /XYZ 151.701 551.538 null]
 >> endobj
-11507 0 obj <<
-/D [11504 0 R /XYZ 151.701 526.104 null]
+11495 0 obj <<
+/D [11492 0 R /XYZ 151.701 526.104 null]
 >> endobj
 3262 0 obj <<
-/D [11504 0 R /XYZ 151.701 401.019 null]
+/D [11492 0 R /XYZ 151.701 401.019 null]
 >> endobj
-11508 0 obj <<
-/D [11504 0 R /XYZ 151.701 371.334 null]
+11496 0 obj <<
+/D [11492 0 R /XYZ 151.701 371.334 null]
 >> endobj
 3266 0 obj <<
-/D [11504 0 R /XYZ 151.701 246.249 null]
+/D [11492 0 R /XYZ 151.701 246.249 null]
 >> endobj
-11509 0 obj <<
-/D [11504 0 R /XYZ 151.701 218.889 null]
+11497 0 obj <<
+/D [11492 0 R /XYZ 151.701 218.889 null]
 >> endobj
-11503 0 obj <<
+11491 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11513 0 obj <<
+11501 0 obj <<
 /Length 1832      
 /Filter /FlateDecode
 >>
@@ -65521,39 +69227,39 @@
 ®5ÿ´PLÒ±»AvD?–¨dJ	Ø#€¢Æ?ör›>M…µÊ	…Þ‰¨§$Šž|/ƒn€O20ÊøóÖ0&dÂÍE1<ƒÀŽ82Ÿ4dôÂc+ƒŸ8"©rrL”_Ò¶ïe .¯ ¸L Vç’¸5Žèôçî?""€‹„¯º–¡Œ_H‚ÂZ1„즛ž'èºz¶V1g¾ŒðÍÄ­oþ/Ëôûf»ú+’Ê 
 endstream
 endobj
-11512 0 obj <<
+11500 0 obj <<
 /Type /Page
-/Contents 11513 0 R
-/Resources 11511 0 R
+/Contents 11501 0 R
+/Resources 11499 0 R
 /MediaBox [0 0 612 792]
-/Parent 11510 0 R
+/Parent 11498 0 R
 >> endobj
-11514 0 obj <<
-/D [11512 0 R /XYZ 100.892 685.529 null]
+11502 0 obj <<
+/D [11500 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3270 0 obj <<
-/D [11512 0 R /XYZ 100.892 554.458 null]
+/D [11500 0 R /XYZ 100.892 554.458 null]
 >> endobj
-11515 0 obj <<
-/D [11512 0 R /XYZ 100.892 527.399 null]
+11503 0 obj <<
+/D [11500 0 R /XYZ 100.892 527.399 null]
 >> endobj
 3274 0 obj <<
-/D [11512 0 R /XYZ 100.892 350.825 null]
+/D [11500 0 R /XYZ 100.892 350.825 null]
 >> endobj
-11516 0 obj <<
-/D [11512 0 R /XYZ 100.892 323.16 null]
+11504 0 obj <<
+/D [11500 0 R /XYZ 100.892 323.16 null]
 >> endobj
 3278 0 obj <<
-/D [11512 0 R /XYZ 100.892 257.983 null]
+/D [11500 0 R /XYZ 100.892 257.983 null]
 >> endobj
-11517 0 obj <<
-/D [11512 0 R /XYZ 100.892 230.317 null]
+11505 0 obj <<
+/D [11500 0 R /XYZ 100.892 230.317 null]
 >> endobj
-11511 0 obj <<
+11499 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11520 0 obj <<
+11508 0 obj <<
 /Length 341       
 /Filter /FlateDecode
 >>
@@ -65563,21 +69269,21 @@
 Àc9ääÁV§æw”ŒQ;wEa“­….âú`»Ç‘hÿºÍ18äe¥”aÁU¼Ü6½™ƒ1ø^†×ÿF7Ô&쾺ø½ß!o¬Ã³Íwý2‰‹
 endstream
 endobj
-11519 0 obj <<
+11507 0 obj <<
 /Type /Page
-/Contents 11520 0 R
-/Resources 11518 0 R
+/Contents 11508 0 R
+/Resources 11506 0 R
 /MediaBox [0 0 612 792]
-/Parent 11510 0 R
+/Parent 11498 0 R
 >> endobj
-11521 0 obj <<
-/D [11519 0 R /XYZ 151.701 685.529 null]
+11509 0 obj <<
+/D [11507 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11518 0 obj <<
+11506 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11524 0 obj <<
+11512 0 obj <<
 /Length 132       
 /Filter /FlateDecode
 >>
@@ -65586,21 +69292,21 @@
 N‡‹8(jJµ~[ªNÿåùÁã [å¾]‰ZlB†àlJ!‚Ü!p´Ž8‘-r…#î5y<÷ƒ6”#ôIv3c›Kö3ãœLL6–23ÑKƾ¾/ííõ¨#öX‡g×Lþá×µ¨ÀÁ$=
 endstream
 endobj
-11523 0 obj <<
+11511 0 obj <<
 /Type /Page
-/Contents 11524 0 R
-/Resources 11522 0 R
+/Contents 11512 0 R
+/Resources 11510 0 R
 /MediaBox [0 0 612 792]
-/Parent 11510 0 R
+/Parent 11498 0 R
 >> endobj
 3282 0 obj <<
-/D [11523 0 R /XYZ 100.892 495.521 null]
+/D [11511 0 R /XYZ 100.892 495.521 null]
 >> endobj
-11522 0 obj <<
+11510 0 obj <<
 /Font << /F27 3691 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11527 0 obj <<
+11515 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -65608,17 +69314,17 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-11526 0 obj <<
+11514 0 obj <<
 /Type /Page
-/Contents 11527 0 R
-/Resources 11525 0 R
+/Contents 11515 0 R
+/Resources 11513 0 R
 /MediaBox [0 0 612 792]
-/Parent 11510 0 R
+/Parent 11498 0 R
 >> endobj
-11525 0 obj <<
+11513 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-11531 0 obj <<
+11519 0 obj <<
 /Length 1424      
 /Filter /FlateDecode
 >>
@@ -65633,50 +69339,50 @@
 Ê ‹d*%¥ãj)ƒdoš…^„ü  ¸Á[q现çZ©,Ýe5]Q1è6#&ÇçK3uþ¼Œ?@Þ'ZsÉYg<ðoŸ•&äÞ¤r™Á°“<‡9ƒ,¾µLØ„g`
 endstream
 endobj
-11530 0 obj <<
+11518 0 obj <<
 /Type /Page
-/Contents 11531 0 R
-/Resources 11529 0 R
+/Contents 11519 0 R
+/Resources 11517 0 R
 /MediaBox [0 0 612 792]
-/Parent 11510 0 R
-/Annots [ 11528 0 R ]
+/Parent 11498 0 R
+/Annots [ 11516 0 R ]
 >> endobj
-11528 0 obj <<
+11516 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [281.592 118.128 356.767 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (tmpshare) >>
 >> endobj
-11532 0 obj <<
-/D [11530 0 R /XYZ 100.892 685.529 null]
+11520 0 obj <<
+/D [11518 0 R /XYZ 100.892 685.529 null]
 >> endobj
-11533 0 obj <<
-/D [11530 0 R /XYZ 100.892 660.623 null]
+11521 0 obj <<
+/D [11518 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3286 0 obj <<
-/D [11530 0 R /XYZ 100.892 660.623 null]
+/D [11518 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3925 0 obj <<
-/D [11530 0 R /XYZ 100.892 500.534 null]
+/D [11518 0 R /XYZ 100.892 500.534 null]
 >> endobj
 3290 0 obj <<
-/D [11530 0 R /XYZ 100.892 500.534 null]
+/D [11518 0 R /XYZ 100.892 500.534 null]
 >> endobj
-11534 0 obj <<
-/D [11530 0 R /XYZ 100.892 468.443 null]
+11522 0 obj <<
+/D [11518 0 R /XYZ 100.892 468.443 null]
 >> endobj
 3294 0 obj <<
-/D [11530 0 R /XYZ 100.892 262.771 null]
+/D [11518 0 R /XYZ 100.892 262.771 null]
 >> endobj
-11535 0 obj <<
-/D [11530 0 R /XYZ 100.892 230.283 null]
+11523 0 obj <<
+/D [11518 0 R /XYZ 100.892 230.283 null]
 >> endobj
-11529 0 obj <<
+11517 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11539 0 obj <<
+11527 0 obj <<
 /Length 2272      
 /Filter /FlateDecode
 >>
@@ -65698,52 +69404,52 @@
 ¸Ïÿ4jH‡‰±´°‚RÌ'8ÿFøogNÆþÖzÂ"0_	f\Püc‘mê¦; ç¿X°ûzßÿ›‘>iwóXҝzQ€òôR!¼
 endstream
 endobj
-11538 0 obj <<
+11526 0 obj <<
 /Type /Page
-/Contents 11539 0 R
-/Resources 11537 0 R
+/Contents 11527 0 R
+/Resources 11525 0 R
 /MediaBox [0 0 612 792]
-/Parent 11548 0 R
+/Parent 11536 0 R
 >> endobj
-11540 0 obj <<
-/D [11538 0 R /XYZ 151.701 685.529 null]
+11528 0 obj <<
+/D [11526 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5129 0 obj <<
-/D [11538 0 R /XYZ 151.701 660.623 null]
+/D [11526 0 R /XYZ 151.701 660.623 null]
 >> endobj
-11536 0 obj <<
-/D [11538 0 R /XYZ 151.701 642.541 null]
+11524 0 obj <<
+/D [11526 0 R /XYZ 151.701 642.541 null]
 >> endobj
-11541 0 obj <<
-/D [11538 0 R /XYZ 151.701 636.563 null]
+11529 0 obj <<
+/D [11526 0 R /XYZ 151.701 636.563 null]
 >> endobj
-11542 0 obj <<
-/D [11538 0 R /XYZ 151.701 642.839 null]
+11530 0 obj <<
+/D [11526 0 R /XYZ 151.701 642.839 null]
 >> endobj
-11543 0 obj <<
-/D [11538 0 R /XYZ 151.701 630.884 null]
+11531 0 obj <<
+/D [11526 0 R /XYZ 151.701 630.884 null]
 >> endobj
-11544 0 obj <<
-/D [11538 0 R /XYZ 151.701 618.929 null]
+11532 0 obj <<
+/D [11526 0 R /XYZ 151.701 618.929 null]
 >> endobj
-11545 0 obj <<
-/D [11538 0 R /XYZ 151.701 606.974 null]
+11533 0 obj <<
+/D [11526 0 R /XYZ 151.701 606.974 null]
 >> endobj
 3298 0 obj <<
-/D [11538 0 R /XYZ 151.701 178.309 null]
+/D [11526 0 R /XYZ 151.701 178.309 null]
 >> endobj
-11546 0 obj <<
-/D [11538 0 R /XYZ 151.701 146.61 null]
+11534 0 obj <<
+/D [11526 0 R /XYZ 151.701 146.61 null]
 >> endobj
-11547 0 obj <<
-/D [11538 0 R /XYZ 151.701 121.245 null]
+11535 0 obj <<
+/D [11526 0 R /XYZ 151.701 121.245 null]
 >> endobj
-11537 0 obj <<
+11525 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F4 5484 0 R /F88 5678 0 R /F72 5679 0 R /F53 3738 0 R /F85 5513 0 R /F17 3698 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11551 0 obj <<
+11539 0 obj <<
 /Length 2252      
 /Filter /FlateDecode
 >>
@@ -65766,25 +69472,25 @@
 }m^õåXbQ^¨…0JÂ’…A.F®Þí#ɇΕŠIç\h2 MÂ#ÓtÕpú3ZîÓú{ü24@´þãì‘áÔý° ê^
 endstream
 endobj
-11550 0 obj <<
+11538 0 obj <<
 /Type /Page
-/Contents 11551 0 R
-/Resources 11549 0 R
+/Contents 11539 0 R
+/Resources 11537 0 R
 /MediaBox [0 0 612 792]
-/Parent 11548 0 R
+/Parent 11536 0 R
 >> endobj
-11552 0 obj <<
-/D [11550 0 R /XYZ 100.892 685.529 null]
+11540 0 obj <<
+/D [11538 0 R /XYZ 100.892 685.529 null]
 >> endobj
-11553 0 obj <<
-/D [11550 0 R /XYZ 100.892 519.145 null]
+11541 0 obj <<
+/D [11538 0 R /XYZ 100.892 519.145 null]
 >> endobj
-11549 0 obj <<
+11537 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R /F85 5513 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11556 0 obj <<
+11544 0 obj <<
 /Length 1573      
 /Filter /FlateDecode
 >>
@@ -65805,24 +69511,24 @@
 PŸ]‹%ÔY@{Ÿ$­Õ\¢Õ°»“×úVÛiƒgÒç)ËÔ¬ËâCà5‡S®´un zõ˜gÞvæ> ¸èª•]Ý1T®d2ÕcO ÀÙó¬¬'u]à™¶Âµ²j/«ÀyŠ|Ú̦ïþñßBœs_P0,D¿‚öÜ4MÒÁ ³(‘Œ÷í8þ¢áÁ 
 endstream
 endobj
-11555 0 obj <<
+11543 0 obj <<
 /Type /Page
-/Contents 11556 0 R
-/Resources 11554 0 R
+/Contents 11544 0 R
+/Resources 11542 0 R
 /MediaBox [0 0 612 792]
-/Parent 11548 0 R
+/Parent 11536 0 R
 >> endobj
-11557 0 obj <<
-/D [11555 0 R /XYZ 151.701 685.529 null]
+11545 0 obj <<
+/D [11543 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11558 0 obj <<
-/D [11555 0 R /XYZ 151.701 351.581 null]
+11546 0 obj <<
+/D [11543 0 R /XYZ 151.701 351.581 null]
 >> endobj
-11554 0 obj <<
+11542 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11564 0 obj <<
+11552 0 obj <<
 /Length 2706      
 /Filter /FlateDecode
 >>
@@ -65845,68 +69551,68 @@
 çº/aHAuÿž§Ö‚µíð_,Zæå%-½×mã—ß"¿LÐuEßÃ¥taˆÄƒî²^4m[,0—“#ñ¡*|7™ŒÙå-%¾ì¢ãZÁ•ƒ…hgmÁÞ®è?U°ëý.ƒŒ—{¢ïucšéö=“ñúŸø¼þ*óˆÖ
 endstream
 endobj
-11563 0 obj <<
+11551 0 obj <<
 /Type /Page
-/Contents 11564 0 R
-/Resources 11562 0 R
+/Contents 11552 0 R
+/Resources 11550 0 R
 /MediaBox [0 0 612 792]
-/Parent 11548 0 R
-/Annots [ 11559 0 R 11560 0 R 11561 0 R ]
+/Parent 11536 0 R
+/Annots [ 11547 0 R 11548 0 R 11549 0 R ]
 >> endobj
-11559 0 obj <<
+11547 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [377.786 408.659 452.738 420.348]
 /Subtype /Link
 /A << /S /GoTo /D (modif1) >>
 >> endobj
-11560 0 obj <<
+11548 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [141.991 260.411 218.353 272.1]
 /Subtype /Link
 /A << /S /GoTo /D (modif1) >>
 >> endobj
-11561 0 obj <<
+11549 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [127.168 219.763 202.343 231.453]
 /Subtype /Link
 /A << /S /GoTo /D (modif2) >>
 >> endobj
-11565 0 obj <<
-/D [11563 0 R /XYZ 100.892 685.529 null]
+11553 0 obj <<
+/D [11551 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5130 0 obj <<
-/D [11563 0 R /XYZ 100.892 397.683 null]
+/D [11551 0 R /XYZ 100.892 397.683 null]
 >> endobj
-11566 0 obj <<
-/D [11563 0 R /XYZ 100.892 369.385 null]
+11554 0 obj <<
+/D [11551 0 R /XYZ 100.892 369.385 null]
 >> endobj
-11567 0 obj <<
-/D [11563 0 R /XYZ 100.892 363.408 null]
+11555 0 obj <<
+/D [11551 0 R /XYZ 100.892 363.408 null]
 >> endobj
-11568 0 obj <<
-/D [11563 0 R /XYZ 100.892 369.684 null]
+11556 0 obj <<
+/D [11551 0 R /XYZ 100.892 369.684 null]
 >> endobj
-11569 0 obj <<
-/D [11563 0 R /XYZ 100.892 357.729 null]
+11557 0 obj <<
+/D [11551 0 R /XYZ 100.892 357.729 null]
 >> endobj
-11570 0 obj <<
-/D [11563 0 R /XYZ 100.892 345.774 null]
+11558 0 obj <<
+/D [11551 0 R /XYZ 100.892 345.774 null]
 >> endobj
-11571 0 obj <<
-/D [11563 0 R /XYZ 100.892 333.818 null]
+11559 0 obj <<
+/D [11551 0 R /XYZ 100.892 333.818 null]
 >> endobj
-11572 0 obj <<
-/D [11563 0 R /XYZ 100.892 321.863 null]
+11560 0 obj <<
+/D [11551 0 R /XYZ 100.892 321.863 null]
 >> endobj
-11562 0 obj <<
+11550 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F4 5484 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11576 0 obj <<
+11564 0 obj <<
 /Length 2836      
 /Filter /FlateDecode
 >>
@@ -65936,54 +69642,54 @@
 =PwŒy‹HƒÿU:ù9_R€6!0}Ž#¦ç’‡”p/Áø%FßCOΏþc¤±‡
 endstream
 endobj
-11575 0 obj <<
+11563 0 obj <<
 /Type /Page
-/Contents 11576 0 R
-/Resources 11574 0 R
+/Contents 11564 0 R
+/Resources 11562 0 R
 /MediaBox [0 0 612 792]
-/Parent 11548 0 R
+/Parent 11536 0 R
 >> endobj
-11577 0 obj <<
-/D [11575 0 R /XYZ 151.701 685.529 null]
+11565 0 obj <<
+/D [11563 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5131 0 obj <<
-/D [11575 0 R /XYZ 151.701 660.623 null]
+/D [11563 0 R /XYZ 151.701 660.623 null]
 >> endobj
-11573 0 obj <<
-/D [11575 0 R /XYZ 151.701 632.325 null]
+11561 0 obj <<
+/D [11563 0 R /XYZ 151.701 632.325 null]
 >> endobj
-11578 0 obj <<
-/D [11575 0 R /XYZ 151.701 626.347 null]
+11566 0 obj <<
+/D [11563 0 R /XYZ 151.701 626.347 null]
 >> endobj
-11579 0 obj <<
-/D [11575 0 R /XYZ 151.701 632.623 null]
+11567 0 obj <<
+/D [11563 0 R /XYZ 151.701 632.623 null]
 >> endobj
-11580 0 obj <<
-/D [11575 0 R /XYZ 151.701 620.668 null]
+11568 0 obj <<
+/D [11563 0 R /XYZ 151.701 620.668 null]
 >> endobj
-11581 0 obj <<
-/D [11575 0 R /XYZ 151.701 608.713 null]
+11569 0 obj <<
+/D [11563 0 R /XYZ 151.701 608.713 null]
 >> endobj
-11582 0 obj <<
-/D [11575 0 R /XYZ 151.701 596.758 null]
+11570 0 obj <<
+/D [11563 0 R /XYZ 151.701 596.758 null]
 >> endobj
-11583 0 obj <<
-/D [11575 0 R /XYZ 151.701 518.242 null]
+11571 0 obj <<
+/D [11563 0 R /XYZ 151.701 518.242 null]
 >> endobj
-11584 0 obj <<
-/D [11575 0 R /XYZ 151.701 401.984 null]
+11572 0 obj <<
+/D [11563 0 R /XYZ 151.701 401.984 null]
 >> endobj
-11585 0 obj <<
-/D [11575 0 R /XYZ 151.701 323.95 null]
+11573 0 obj <<
+/D [11563 0 R /XYZ 151.701 323.95 null]
 >> endobj
-11586 0 obj <<
-/D [11575 0 R /XYZ 151.701 121.245 null]
+11574 0 obj <<
+/D [11563 0 R /XYZ 151.701 121.245 null]
 >> endobj
-11574 0 obj <<
+11562 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F4 5484 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11589 0 obj <<
+11577 0 obj <<
 /Length 2340      
 /Filter /FlateDecode
 >>
@@ -66006,40 +69712,40 @@
 Ê‹í}-¶çÏ—€‡'¬³Ü‹½y¸V;Ø؃q.:!SfÄ؝'‘à)Šª(3ßqÅ!º9i†šFßÙþͽ»	èЖØå4kïb<˳O™4Y;þ©(Óf¬‹ú€!2N!͈†ÿ¹;“oÂŽ«_rjoaQ;£ ®¤ò­@¦’ÉT.¦S‘ZöÃÿíææ?­% 
 endstream
 endobj
-11588 0 obj <<
+11576 0 obj <<
 /Type /Page
-/Contents 11589 0 R
-/Resources 11587 0 R
+/Contents 11577 0 R
+/Resources 11575 0 R
 /MediaBox [0 0 612 792]
-/Parent 11548 0 R
+/Parent 11536 0 R
 >> endobj
-11590 0 obj <<
-/D [11588 0 R /XYZ 100.892 685.529 null]
+11578 0 obj <<
+/D [11576 0 R /XYZ 100.892 685.529 null]
 >> endobj
-11591 0 obj <<
-/D [11588 0 R /XYZ 100.892 413.95 null]
+11579 0 obj <<
+/D [11576 0 R /XYZ 100.892 413.95 null]
 >> endobj
-11592 0 obj <<
-/D [11588 0 R /XYZ 100.892 377.639 null]
+11580 0 obj <<
+/D [11576 0 R /XYZ 100.892 377.639 null]
 >> endobj
-11593 0 obj <<
-/D [11588 0 R /XYZ 100.892 354.271 null]
+11581 0 obj <<
+/D [11576 0 R /XYZ 100.892 354.271 null]
 >> endobj
-11594 0 obj <<
-/D [11588 0 R /XYZ 100.892 318.566 null]
+11582 0 obj <<
+/D [11576 0 R /XYZ 100.892 318.566 null]
 >> endobj
-11595 0 obj <<
-/D [11588 0 R /XYZ 100.892 295.198 null]
+11583 0 obj <<
+/D [11576 0 R /XYZ 100.892 295.198 null]
 >> endobj
-11596 0 obj <<
-/D [11588 0 R /XYZ 100.892 196.083 null]
+11584 0 obj <<
+/D [11576 0 R /XYZ 100.892 196.083 null]
 >> endobj
-11587 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F59 4373 0 R /F95 8343 0 R >>
+11575 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F59 4373 0 R /F95 8330 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11599 0 obj <<
+11587 0 obj <<
 /Length 2564      
 /Filter /FlateDecode
 >>
@@ -66068,39 +69774,39 @@
 ÕÈ*BÑg=1š›bÐN&Rº2‹¸¹z´B´¦'ƒ>ÍŠ“€BN>±•–Ž…É<ètîšz퉟èo¯{éQÝ„¼`•¢žJcn\¨Ï3W¾ÌõiÍ2ÖæäëüЉ%W6…ãbÙäÝwλX[_zXδsåMØÕ@L#_MùB¦H!·Íã´µøNâž – T¸¼1µ³°EBס«V1Ú?Ï€*ž±cð	=kîËáiŒé6=†õB·§§«ÿiJ÷z)&_žª*÷ìÑ‚¢¶	«z™n&zxÒDWÐ3ôÇuÖ	æÕÑÄù¡§¦‡×>à[§ò¿û¸	$Ì)cá#Ï}אµS±~¬ì€N§ÿ‡ÆÛ„ÚøYb–D®´XÂ÷LÄSÓð>Âó‘Hb&™³,¬Í®ÛXçP¬s,€îŶܼ[»QJ ×-y8UߢwÅÉø ҉³b¾_ƒð./ŠF2ŠéUPé	¾ÒË ø8þŸu²RN†—ðAT[“k±MÂ¥Á|æeô–šè‰lc¥hùËô_5™¾êÁS±PÖCŠCÝ'¤üà•ÓúQxÈ÷ÝgU°>áûþöê¿£gï–
 endstream
 endobj
-11598 0 obj <<
+11586 0 obj <<
 /Type /Page
-/Contents 11599 0 R
-/Resources 11597 0 R
+/Contents 11587 0 R
+/Resources 11585 0 R
 /MediaBox [0 0 612 792]
-/Parent 11607 0 R
+/Parent 11595 0 R
 >> endobj
-11600 0 obj <<
-/D [11598 0 R /XYZ 151.701 685.529 null]
+11588 0 obj <<
+/D [11586 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11601 0 obj <<
-/D [11598 0 R /XYZ 151.701 633.387 null]
+11589 0 obj <<
+/D [11586 0 R /XYZ 151.701 633.387 null]
 >> endobj
-11602 0 obj <<
-/D [11598 0 R /XYZ 151.701 612.096 null]
+11590 0 obj <<
+/D [11586 0 R /XYZ 151.701 612.096 null]
 >> endobj
-11603 0 obj <<
-/D [11598 0 R /XYZ 151.701 577.255 null]
+11591 0 obj <<
+/D [11586 0 R /XYZ 151.701 577.255 null]
 >> endobj
-11604 0 obj <<
-/D [11598 0 R /XYZ 151.701 542.414 null]
+11592 0 obj <<
+/D [11586 0 R /XYZ 151.701 542.414 null]
 >> endobj
-11605 0 obj <<
-/D [11598 0 R /XYZ 151.701 350.79 null]
+11593 0 obj <<
+/D [11586 0 R /XYZ 151.701 350.79 null]
 >> endobj
-11606 0 obj <<
-/D [11598 0 R /XYZ 151.701 181.063 null]
+11594 0 obj <<
+/D [11586 0 R /XYZ 151.701 181.063 null]
 >> endobj
-11597 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F95 8343 0 R /F85 5513 0 R /F59 4373 0 R >>
+11585 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F95 8330 0 R /F85 5513 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11610 0 obj <<
+11598 0 obj <<
 /Length 1259      
 /Filter /FlateDecode
 >>
@@ -66119,24 +69825,24 @@
 p]þëSŠÉRR7P°Z˜2d)VéŠì€B}«æ/ŠÿG©¥Ê^+ýêâÀ9Ô­§0`E©ÂÐ^íâÊ¿51+ɤµÿñî˜Òûîã žâ2Liâ–Å1‚û÷xy…àîÅ¥~£Àsy§>Ãtõ¦4Â-;,gBœ¡ÝŸž^hDœ€ÀÁç‘®7ûtBîþì£ 
 endstream
 endobj
-11609 0 obj <<
+11597 0 obj <<
 /Type /Page
-/Contents 11610 0 R
-/Resources 11608 0 R
+/Contents 11598 0 R
+/Resources 11596 0 R
 /MediaBox [0 0 612 792]
-/Parent 11607 0 R
+/Parent 11595 0 R
 >> endobj
-11611 0 obj <<
-/D [11609 0 R /XYZ 100.892 685.529 null]
+11599 0 obj <<
+/D [11597 0 R /XYZ 100.892 685.529 null]
 >> endobj
-11612 0 obj <<
-/D [11609 0 R /XYZ 100.892 606.895 null]
+11600 0 obj <<
+/D [11597 0 R /XYZ 100.892 606.895 null]
 >> endobj
-11608 0 obj <<
+11596 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11615 0 obj <<
+11603 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -66144,20 +69850,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-11614 0 obj <<
+11602 0 obj <<
 /Type /Page
-/Contents 11615 0 R
-/Resources 11613 0 R
+/Contents 11603 0 R
+/Resources 11601 0 R
 /MediaBox [0 0 612 792]
-/Parent 11607 0 R
+/Parent 11595 0 R
 >> endobj
-11616 0 obj <<
-/D [11614 0 R /XYZ 151.701 685.529 null]
+11604 0 obj <<
+/D [11602 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11613 0 obj <<
+11601 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-11619 0 obj <<
+11607 0 obj <<
 /Length 1630      
 /Filter /FlateDecode
 >>
@@ -66179,39 +69885,39 @@
 nI&­|Ie“öO,}ÆØRh¼_ÒèsðÁö§$x0wت‘¤0~B¸ú‘ÉŸ¶4ÖúŠøc=üœ?5Oä^#à‰^%ÃÿeJUêÄåÿ º”
 endstream
 endobj
-11618 0 obj <<
+11606 0 obj <<
 /Type /Page
-/Contents 11619 0 R
-/Resources 11617 0 R
+/Contents 11607 0 R
+/Resources 11605 0 R
 /MediaBox [0 0 612 792]
-/Parent 11607 0 R
+/Parent 11595 0 R
 >> endobj
-11620 0 obj <<
-/D [11618 0 R /XYZ 100.892 685.529 null]
+11608 0 obj <<
+/D [11606 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3302 0 obj <<
-/D [11618 0 R /XYZ 100.892 660.623 null]
+/D [11606 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3926 0 obj <<
-/D [11618 0 R /XYZ 100.892 477.122 null]
+/D [11606 0 R /XYZ 100.892 477.122 null]
 >> endobj
 3306 0 obj <<
-/D [11618 0 R /XYZ 100.892 397.34 null]
+/D [11606 0 R /XYZ 100.892 397.34 null]
 >> endobj
-11621 0 obj <<
-/D [11618 0 R /XYZ 100.892 368.09 null]
+11609 0 obj <<
+/D [11606 0 R /XYZ 100.892 368.09 null]
 >> endobj
 3310 0 obj <<
-/D [11618 0 R /XYZ 100.892 282.921 null]
+/D [11606 0 R /XYZ 100.892 282.921 null]
 >> endobj
-11622 0 obj <<
-/D [11618 0 R /XYZ 100.892 254.562 null]
+11610 0 obj <<
+/D [11606 0 R /XYZ 100.892 254.562 null]
 >> endobj
-11617 0 obj <<
+11605 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11630 0 obj <<
+11618 0 obj <<
 /Length 1931      
 /Filter /FlateDecode
 >>
@@ -66232,59 +69938,59 @@
 b™ÂB^Èh¼?O4¼¾q—âN¨——Ö.„Ã××קÓI„õ{YÑõÛëWë'Ç)	Mk~Nxa&ªC–"+ hÃaÙ¤ùh>æ-ì—UWtÌ&ªŸe_ÿƒcÿö8Ω
 endstream
 endobj
-11629 0 obj <<
+11617 0 obj <<
 /Type /Page
-/Contents 11630 0 R
-/Resources 11628 0 R
+/Contents 11618 0 R
+/Resources 11616 0 R
 /MediaBox [0 0 612 792]
-/Parent 11607 0 R
-/Annots [ 11626 0 R 11623 0 R 11624 0 R ]
+/Parent 11595 0 R
+/Annots [ 11614 0 R 11611 0 R 11612 0 R ]
 >> endobj
-11626 0 obj <<
+11614 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [455.614 271.979 511.352 283.85]
 /Subtype /Link
 /A << /S /GoTo /D (ethereal1) >>
 >> endobj
-11623 0 obj <<
+11611 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 127.92 284.72 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.tcpdump.org/)>>
 >> endobj
-11624 0 obj <<
+11612 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 289.428 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.ethereal.com/)>>
 >> endobj
-11631 0 obj <<
-/D [11629 0 R /XYZ 151.701 685.529 null]
+11619 0 obj <<
+/D [11617 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3314 0 obj <<
-/D [11629 0 R /XYZ 151.701 472.221 null]
+/D [11617 0 R /XYZ 151.701 472.221 null]
 >> endobj
-11632 0 obj <<
-/D [11629 0 R /XYZ 151.701 443.492 null]
+11620 0 obj <<
+/D [11617 0 R /XYZ 151.701 443.492 null]
 >> endobj
 3318 0 obj <<
-/D [11629 0 R /XYZ 151.701 383.987 null]
+/D [11617 0 R /XYZ 151.701 383.987 null]
 >> endobj
-11633 0 obj <<
-/D [11629 0 R /XYZ 151.701 357.583 null]
+11621 0 obj <<
+/D [11617 0 R /XYZ 151.701 357.583 null]
 >> endobj
 3322 0 obj <<
-/D [11629 0 R /XYZ 151.701 227.118 null]
+/D [11617 0 R /XYZ 151.701 227.118 null]
 >> endobj
-11634 0 obj <<
-/D [11629 0 R /XYZ 151.701 200.714 null]
+11622 0 obj <<
+/D [11617 0 R /XYZ 151.701 200.714 null]
 >> endobj
-11628 0 obj <<
+11616 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F85 5513 0 R /F53 3738 0 R /F17 3698 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11638 0 obj <<
+11626 0 obj <<
 /Length 1106      
 /Filter /FlateDecode
 >>
@@ -66304,14 +70010,14 @@
 YÚ¹ËÅÀ‹8¾,°%žiú±:á\]ÃÆQïî¼Â¸¹å?!oÿ4ÀŸ’?œ
 endstream
 endobj
-11637 0 obj <<
+11625 0 obj <<
 /Type /Page
-/Contents 11638 0 R
-/Resources 11636 0 R
+/Contents 11626 0 R
+/Resources 11624 0 R
 /MediaBox [0 0 612 792]
-/Parent 11607 0 R
+/Parent 11595 0 R
 >> endobj
-11625 0 obj <<
+11613 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 349
@@ -66459,27 +70165,27 @@
 ¹zÁO+N×€œ@´Y]¶Tƒ%KhƒÚRC¥Õ¼3\Ý1I'ílÏIb+€/TÇð!:ÖeË¡©³t/ŒŒxadïô×­.[úë=]ƒ:KÁø~ÄôXÛ~ºlÙ¢Ýu–‚À[Œö¹:×eËÜQ{ô¯³¼ ^譽Ǭ˖ÞZ׌_g)x¼Pm[ï“Ë–p~/¶oïÉùØfP`ßqë™»¬þ2>Øu;û“¢éᅝ™¯Þ.™‹0|ŸrÙÜYºgÞYÿ9ºyxaŽü­÷/l݃õúƒê±Û{OðÂÞ=œ·¼p\ß—,/”Úïçà…ýúv®eà…¹n·à…ÿcÑ´í:nÍÁ+€Œ!€ÀÆ /lÌaP¬€ xa1Øà…9ê /¬ 2† C Ëñ@ å{S‡Å† Àë…Àx  "'''g…x  (ÿç<¬º
 endstream
 endobj
-11639 0 obj <<
-/D [11637 0 R /XYZ 100.892 685.529 null]
+11627 0 obj <<
+/D [11625 0 R /XYZ 100.892 685.529 null]
 >> endobj
 5275 0 obj <<
-/D [11637 0 R /XYZ 100.892 660.623 null]
+/D [11625 0 R /XYZ 100.892 660.623 null]
 >> endobj
-11635 0 obj <<
-/D [11637 0 R /XYZ 100.892 643.753 null]
+11623 0 obj <<
+/D [11625 0 R /XYZ 100.892 643.753 null]
 >> endobj
 3326 0 obj <<
-/D [11637 0 R /XYZ 100.892 237.362 null]
+/D [11625 0 R /XYZ 100.892 237.362 null]
 >> endobj
-11640 0 obj <<
-/D [11637 0 R /XYZ 100.892 208.227 null]
+11628 0 obj <<
+/D [11625 0 R /XYZ 100.892 208.227 null]
 >> endobj
-11636 0 obj <<
+11624 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R >>
-/XObject << /Im58 11625 0 R >>
+/XObject << /Im58 11613 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-11643 0 obj <<
+11631 0 obj <<
 /Length 1306      
 /Filter /FlateDecode
 >>
@@ -66499,14 +70205,14 @@
 vÒ²G´5@ç6ªò¡n´&• ±Ií…Aõn÷Š¾Ï¸Ø3wpHOùÿñ_%ˆ/ÁÒþSüPþÈôÿhôp7¤bã­x4ýƒ€Õš:DH Àö<výÏP¿ìE©_÷=ŠG3…‘
 endstream
 endobj
-11642 0 obj <<
+11630 0 obj <<
 /Type /Page
-/Contents 11643 0 R
-/Resources 11641 0 R
+/Contents 11631 0 R
+/Resources 11629 0 R
 /MediaBox [0 0 612 792]
-/Parent 11646 0 R
+/Parent 11634 0 R
 >> endobj
-11627 0 obj <<
+11615 0 obj <<
 /Type /XObject
 /Subtype /Image
 /Width 758
@@ -66733,21 +70439,21 @@
 %ŽºÔÛ¬v$%Îxâ•$°Gâ”É’”•8òAÒœ¬ÞV«Ê°ÄiûhÇ]%άR>ÝÎZ\`	ÓÃzosg:”8›5)&q¾ÄQ+C(qv¨'Ëá›ÆU7ÔLJœ}Š̂ıÃ1ç%@‰3^ôy%	ÜJœî!“Uô)qŽÓ)qŽ‹[yB‰s?MŠ+%q”8¡ÄQ_trÞ_Tݪ'q^˜H€g¼èóJ¸÷&qfYJœY$i‡PâÜO“âJI`œ %Î@yí^	¤¾8iÌ,¯"@ gÙœ»}9¿ÌF–Ä1$@[(ú¨´mðK¾"kœÈÖº±¿Ö{»¶ˆm’ 	´b‰Ó~0Ànß·..ÅküÞ“W’ 	Ì#0Pº‚;`aÊ%Ս)Ö²FÊì,eó2‘–H %°l½7¼þ¹åxüøñ£GžZ¾[.-§¨I€H€H€Hà¼L‰S~ÀƒH€H€H€ÎK at yŠsÞÅÐs   èŸâ,b‡_$@$@$@$p¯ÅYþã	 	 	 	\ŒÀÿµhá3
 endstream
 endobj
-11644 0 obj <<
-/D [11642 0 R /XYZ 151.701 685.529 null]
+11632 0 obj <<
+/D [11630 0 R /XYZ 151.701 685.529 null]
 >> endobj
 5276 0 obj <<
-/D [11642 0 R /XYZ 151.701 660.623 null]
+/D [11630 0 R /XYZ 151.701 660.623 null]
 >> endobj
-11645 0 obj <<
-/D [11642 0 R /XYZ 151.701 643.753 null]
+11633 0 obj <<
+/D [11630 0 R /XYZ 151.701 643.753 null]
 >> endobj
-11641 0 obj <<
+11629 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F51 3736 0 R /F17 3698 0 R /F52 3737 0 R /F53 3738 0 R >>
-/XObject << /Im59 11627 0 R >>
+/XObject << /Im59 11615 0 R >>
 /ProcSet [ /PDF /Text /ImageC ]
 >> endobj
-11653 0 obj <<
+11641 0 obj <<
 /Length 1830      
 /Filter /FlateDecode
 >>
@@ -66769,76 +70475,76 @@
 ŠÐÇqDÿ((¦d1.Ô¬’Ãëã(ÚE<ò„§ËOÙ!¯FÉR\`Wò~èF\'ò ab4®áðÍÆäÞ™ë«h˜©´’z	!̬îþo}¢5Xh>®LÌbÍ”ùào 	þ2þ¿À
 endstream
 endobj
-11652 0 obj <<
+11640 0 obj <<
 /Type /Page
-/Contents 11653 0 R
-/Resources 11651 0 R
+/Contents 11641 0 R
+/Resources 11639 0 R
 /MediaBox [0 0 612 792]
-/Parent 11646 0 R
-/Annots [ 11649 0 R 11658 0 R 11650 0 R 11659 0 R 11647 0 R 11648 0 R ]
+/Parent 11634 0 R
+/Annots [ 11637 0 R 11646 0 R 11638 0 R 11647 0 R 11635 0 R 11636 0 R ]
 >> endobj
-11649 0 obj <<
+11637 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [384.097 262.843 460.543 274.836]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://samba.org)>>
 >> endobj
-11658 0 obj <<
+11646 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [99.895 249.294 119.07 261.287]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://samba.org)>>
 >> endobj
-11650 0 obj <<
+11638 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [337.781 213.943 460.543 225.936]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.samba-tng.org/)>>
 >> endobj
-11659 0 obj <<
+11647 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [99.895 200.394 124.797 212.387]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.samba-tng.org/)>>
 >> endobj
-11647 0 obj <<
+11635 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 127.92 323.848 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.skippy.net/linux/smb-howto.html)>>
 >> endobj
-11648 0 obj <<
+11636 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 323.349 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(ftp://ftp.microsoft.com/developr/drg/CIFS/)>>
 >> endobj
-11654 0 obj <<
-/D [11652 0 R /XYZ 100.892 685.529 null]
+11642 0 obj <<
+/D [11640 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3330 0 obj <<
-/D [11652 0 R /XYZ 100.892 570.814 null]
+/D [11640 0 R /XYZ 100.892 570.814 null]
 >> endobj
-11655 0 obj <<
-/D [11652 0 R /XYZ 100.892 540.637 null]
+11643 0 obj <<
+/D [11640 0 R /XYZ 100.892 540.637 null]
 >> endobj
 3334 0 obj <<
-/D [11652 0 R /XYZ 100.892 447.455 null]
+/D [11640 0 R /XYZ 100.892 447.455 null]
 >> endobj
-11656 0 obj <<
-/D [11652 0 R /XYZ 100.892 417.199 null]
+11644 0 obj <<
+/D [11640 0 R /XYZ 100.892 417.199 null]
 >> endobj
 3338 0 obj <<
-/D [11652 0 R /XYZ 100.892 315.594 null]
+/D [11640 0 R /XYZ 100.892 315.594 null]
 >> endobj
-11657 0 obj <<
-/D [11652 0 R /XYZ 100.892 285.547 null]
+11645 0 obj <<
+/D [11640 0 R /XYZ 100.892 285.547 null]
 >> endobj
-11651 0 obj <<
+11639 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F51 3736 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R /F29 5413 0 R /F52 3737 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11663 0 obj <<
+11651 0 obj <<
 /Length 2132      
 /Filter /FlateDecode
 >>
@@ -66864,21 +70570,21 @@
 dÃúõÇ?ß Ùÿ½½ûj”Öè
 endstream
 endobj
-11662 0 obj <<
+11650 0 obj <<
 /Type /Page
-/Contents 11663 0 R
-/Resources 11661 0 R
+/Contents 11651 0 R
+/Resources 11649 0 R
 /MediaBox [0 0 612 792]
-/Parent 11646 0 R
+/Parent 11634 0 R
 >> endobj
-11664 0 obj <<
-/D [11662 0 R /XYZ 151.701 685.529 null]
+11652 0 obj <<
+/D [11650 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11661 0 obj <<
+11649 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F51 3736 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11667 0 obj <<
+11655 0 obj <<
 /Length 843       
 /Filter /FlateDecode
 >>
@@ -66890,34 +70596,34 @@
 ‡4ȱª¿.nßû9Ü•…{ƒ_½ôbl_ý~A§àíÐ?3ü¶À¾^¡:ÿÂKÒ»
 endstream
 endobj
-11666 0 obj <<
+11654 0 obj <<
 /Type /Page
-/Contents 11667 0 R
-/Resources 11665 0 R
+/Contents 11655 0 R
+/Resources 11653 0 R
 /MediaBox [0 0 612 792]
-/Parent 11646 0 R
-/Annots [ 11660 0 R ]
+/Parent 11634 0 R
+/Annots [ 11648 0 R ]
 >> endobj
-11660 0 obj <<
+11648 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 233.911 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://lists.samba.org/)>>
 >> endobj
-11668 0 obj <<
-/D [11666 0 R /XYZ 100.892 685.529 null]
+11656 0 obj <<
+/D [11654 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3342 0 obj <<
-/D [11666 0 R /XYZ 100.892 660.623 null]
+/D [11654 0 R /XYZ 100.892 660.623 null]
 >> endobj
-11669 0 obj <<
-/D [11666 0 R /XYZ 100.892 638.691 null]
+11657 0 obj <<
+/D [11654 0 R /XYZ 100.892 638.691 null]
 >> endobj
-11665 0 obj <<
+11653 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11672 0 obj <<
+11660 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -66925,20 +70631,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-11671 0 obj <<
+11659 0 obj <<
 /Type /Page
-/Contents 11672 0 R
-/Resources 11670 0 R
+/Contents 11660 0 R
+/Resources 11658 0 R
 /MediaBox [0 0 612 792]
-/Parent 11646 0 R
+/Parent 11634 0 R
 >> endobj
-11673 0 obj <<
-/D [11671 0 R /XYZ 151.701 685.529 null]
+11661 0 obj <<
+/D [11659 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11670 0 obj <<
+11658 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-11678 0 obj <<
+11666 0 obj <<
 /Length 1639      
 /Filter /FlateDecode
 >>
@@ -66957,58 +70663,58 @@
 «ÊsW at iÂ3Ž?;%«–;¢˜³	ÏËyCX舍ÿçJ.[c&ãB%ü4&¬*.*ÿÄ;ë6/L^‚ h†5z.ý^dÕu8ÿ˜­ùN
 endstream
 endobj
-11677 0 obj <<
+11665 0 obj <<
 /Type /Page
-/Contents 11678 0 R
-/Resources 11676 0 R
+/Contents 11666 0 R
+/Resources 11664 0 R
 /MediaBox [0 0 612 792]
-/Parent 11646 0 R
-/Annots [ 11675 0 R 11681 0 R 11674 0 R ]
+/Parent 11634 0 R
+/Annots [ 11663 0 R 11669 0 R 11662 0 R ]
 >> endobj
-11675 0 obj <<
+11663 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [361.188 230.627 460.543 242.619]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://samba.org/samba/)>>
 >> endobj
-11681 0 obj <<
+11669 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [99.895 218.593 136.251 229.07]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://samba.org/samba/)>>
 >> endobj
-11674 0 obj <<
+11662 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 252.74 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(https://bugzilla.samba.org/)>>
 >> endobj
-11679 0 obj <<
-/D [11677 0 R /XYZ 100.892 685.529 null]
+11667 0 obj <<
+/D [11665 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3346 0 obj <<
-/D [11677 0 R /XYZ 100.892 660.623 null]
+/D [11665 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3927 0 obj <<
-/D [11677 0 R /XYZ 100.892 507.031 null]
+/D [11665 0 R /XYZ 100.892 507.031 null]
 >> endobj
 3350 0 obj <<
-/D [11677 0 R /XYZ 100.892 507.031 null]
+/D [11665 0 R /XYZ 100.892 507.031 null]
 >> endobj
-11680 0 obj <<
-/D [11677 0 R /XYZ 100.892 478.189 null]
+11668 0 obj <<
+/D [11665 0 R /XYZ 100.892 478.189 null]
 >> endobj
 3354 0 obj <<
-/D [11677 0 R /XYZ 100.892 202.999 null]
+/D [11665 0 R /XYZ 100.892 202.999 null]
 >> endobj
-11682 0 obj <<
-/D [11677 0 R /XYZ 100.892 175.065 null]
+11670 0 obj <<
+/D [11665 0 R /XYZ 100.892 175.065 null]
 >> endobj
-11676 0 obj <<
+11664 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F29 5413 0 R /F52 3737 0 R /F53 3738 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11686 0 obj <<
+11674 0 obj <<
 /Length 2600      
 /Filter /FlateDecode
 >>
@@ -67034,47 +70740,47 @@
 5HkçÀ¤ô;:×÷µ<³Š~—æ‹ ¥4ðNŒ¦[@/éËÎý‘Pè,üË[,î“£6°²¤…ø™×¾k¼°Ñ·ÞÖǹ´ÚŸ%ç•ã	Ø"!-S*=UÓ> …J&C”ÑÒA VÌŒßiþ¡ÍñŸ'6-bÑÎGöé¯vΣçíÎÏ%«iʁ~;²“ò,‚Íñ¯FÞçb1ýƒ$ôÿ€ª@
 endstream
 endobj
-11685 0 obj <<
+11673 0 obj <<
 /Type /Page
-/Contents 11686 0 R
-/Resources 11684 0 R
+/Contents 11674 0 R
+/Resources 11672 0 R
 /MediaBox [0 0 612 792]
-/Parent 11692 0 R
-/Annots [ 11683 0 R ]
+/Parent 11680 0 R
+/Annots [ 11671 0 R ]
 >> endobj
-11683 0 obj <<
+11671 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [280.773 623.75 462.405 635.44]
 /Subtype /Link
 /A << /S /GoTo /D (diagnosis) >>
 >> endobj
-11687 0 obj <<
-/D [11685 0 R /XYZ 151.701 685.529 null]
+11675 0 obj <<
+/D [11673 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3358 0 obj <<
-/D [11685 0 R /XYZ 151.701 541.158 null]
+/D [11673 0 R /XYZ 151.701 541.158 null]
 >> endobj
-8119 0 obj <<
-/D [11685 0 R /XYZ 151.701 507.389 null]
+8108 0 obj <<
+/D [11673 0 R /XYZ 151.701 507.389 null]
 >> endobj
-11688 0 obj <<
-/D [11685 0 R /XYZ 151.701 361.021 null]
+11676 0 obj <<
+/D [11673 0 R /XYZ 151.701 361.021 null]
 >> endobj
-11689 0 obj <<
-/D [11685 0 R /XYZ 151.701 359.477 null]
+11677 0 obj <<
+/D [11673 0 R /XYZ 151.701 359.477 null]
 >> endobj
-11690 0 obj <<
-/D [11685 0 R /XYZ 151.701 347.522 null]
+11678 0 obj <<
+/D [11673 0 R /XYZ 151.701 347.522 null]
 >> endobj
-11691 0 obj <<
-/D [11685 0 R /XYZ 151.701 335.567 null]
+11679 0 obj <<
+/D [11673 0 R /XYZ 151.701 335.567 null]
 >> endobj
-11684 0 obj <<
+11672 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R /F53 3738 0 R /F4 5484 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11696 0 obj <<
+11684 0 obj <<
 /Length 2632      
 /Filter /FlateDecode
 >>
@@ -67104,59 +70810,59 @@
 㸜€ª¬ŠÝ(HÖD(øWå7Pî¶÷ôªÚ¯ã,4É;=Úèø†^;¡Þ¶ˆ'×ÚžLþ‚àþ©Š"
 endstream
 endobj
-11695 0 obj <<
+11683 0 obj <<
 /Type /Page
-/Contents 11696 0 R
-/Resources 11694 0 R
+/Contents 11684 0 R
+/Resources 11682 0 R
 /MediaBox [0 0 612 792]
-/Parent 11692 0 R
-/Annots [ 11693 0 R ]
+/Parent 11680 0 R
+/Annots [ 11681 0 R ]
 >> endobj
-11693 0 obj <<
+11681 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [144.192 464.141 194.818 475.831]
 /Subtype /Link
 /A << /S /GoTo /D (dbgclass) >>
 >> endobj
-11697 0 obj <<
-/D [11695 0 R /XYZ 100.892 685.529 null]
+11685 0 obj <<
+/D [11683 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3362 0 obj <<
-/D [11695 0 R /XYZ 100.892 660.623 null]
+/D [11683 0 R /XYZ 100.892 660.623 null]
 >> endobj
-11698 0 obj <<
-/D [11695 0 R /XYZ 100.892 641.703 null]
+11686 0 obj <<
+/D [11683 0 R /XYZ 100.892 641.703 null]
 >> endobj
-11699 0 obj <<
-/D [11695 0 R /XYZ 100.892 587.569 null]
+11687 0 obj <<
+/D [11683 0 R /XYZ 100.892 587.569 null]
 >> endobj
-11700 0 obj <<
-/D [11695 0 R /XYZ 100.892 588.146 null]
+11688 0 obj <<
+/D [11683 0 R /XYZ 100.892 588.146 null]
 >> endobj
-11701 0 obj <<
-/D [11695 0 R /XYZ 100.892 576.191 null]
+11689 0 obj <<
+/D [11683 0 R /XYZ 100.892 576.191 null]
 >> endobj
-11702 0 obj <<
-/D [11695 0 R /XYZ 100.892 564.236 null]
+11690 0 obj <<
+/D [11683 0 R /XYZ 100.892 564.236 null]
 >> endobj
 5392 0 obj <<
-/D [11695 0 R /XYZ 100.892 439.164 null]
+/D [11683 0 R /XYZ 100.892 439.164 null]
 >> endobj
-11703 0 obj <<
-/D [11695 0 R /XYZ 100.892 422.294 null]
+11691 0 obj <<
+/D [11683 0 R /XYZ 100.892 422.294 null]
 >> endobj
 3366 0 obj <<
-/D [11695 0 R /XYZ 100.892 271.251 null]
+/D [11683 0 R /XYZ 100.892 271.251 null]
 >> endobj
-11704 0 obj <<
-/D [11695 0 R /XYZ 100.892 244.125 null]
+11692 0 obj <<
+/D [11683 0 R /XYZ 100.892 244.125 null]
 >> endobj
-11694 0 obj <<
+11682 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F4 5484 0 R /F85 5513 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11707 0 obj <<
+11695 0 obj <<
 /Length 1966      
 /Filter /FlateDecode
 >>
@@ -67174,27 +70880,27 @@
 uçÎ_ EhæjëDßþ4õÓd)¬Ý’ˆçÍoH§,âŸÈêÚ'¼ƒºÖ‰‚W3n›ÑŽqþ'ÇF5oKÙ¹}‹“-úc*ôãÄíp¢×µÀ2f«Ø¦c?¦[¡rëØÜWy:Ÿ*½1´Gü¸À1àJògB¼-Ä,¯%ß«2óƒ£9LÁoäšÚà4Oœ§yF J-Ê*} Êü¶DK6Tõ8©¿×Sã2%Š7á¦i6zô¹˜KÖ›Þh£—ùL©g¬[‰ÅTaaš¸§‰ò:Ã(FÕ&6ò¨¢t^‹âÄzx Q¢¯»EÚ½°ÄÕg¢†š×Ìý ËÂXQöu•DúÆEòB¥¯vcy{«ØkâËó˜gøV<óðÄ^/JÈþ·qÓtýt­°æ¡¶ñ$ -oéZÚVÆyµwáaUG÷”LÑTg­^hbÒ&å™F*éÖI¹÷ë›*Ëí×	òvóÉÿ}ßÞj¹<½j$ƒn¥¥ÂO–NóxÝÌ2ôVËÂuàñ†¦³0âúÉăåQä j˧û€¾·†ÜÌ«Âûö|? qé›Ì˜#ÿ*†®hÐç®lîšÜ·÷U‘ŸEËï”}}Ê —­k'dµ˜f)œtĵéOºÁ1Ö”ìï͇ò1"IÐïå›î¨jJò×%°Âôßñùæ=…Õ{ÛÈÏÌ(úûF~$›Ýš¿žvÿ0ÿ
 endstream
 endobj
-11706 0 obj <<
+11694 0 obj <<
 /Type /Page
-/Contents 11707 0 R
-/Resources 11705 0 R
+/Contents 11695 0 R
+/Resources 11693 0 R
 /MediaBox [0 0 612 792]
-/Parent 11692 0 R
+/Parent 11680 0 R
 >> endobj
-11708 0 obj <<
-/D [11706 0 R /XYZ 151.701 685.529 null]
+11696 0 obj <<
+/D [11694 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3370 0 obj <<
-/D [11706 0 R /XYZ 151.701 374.607 null]
+/D [11694 0 R /XYZ 151.701 374.607 null]
 >> endobj
-11709 0 obj <<
-/D [11706 0 R /XYZ 151.701 343.448 null]
+11697 0 obj <<
+/D [11694 0 R /XYZ 151.701 343.448 null]
 >> endobj
-11705 0 obj <<
+11693 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11712 0 obj <<
+11700 0 obj <<
 /Length 906       
 /Filter /FlateDecode
 >>
@@ -67206,27 +70912,27 @@
 ¡+‘>=ªËØYã0ƒYvöQ{k¸*9¯—¦=¨¥7—G©R’奚µa¡œºoc_ƨ'âþƒ”þ‚8´/š Kº»ËxMŸ‹ÞüÔvtÀôÒ:ûDöÿƒbS)–gÅÝŒ/°Ôê!ÍJh¡–¶ÖEú»y^ÇÑ(`¸.S¼]«D3ÐI퉌Nÿ³£i{l:j(DO×û” #¤déÌAújKÛ7ÆxWÕëòêhFUzŽSòÜèý…(‹}ñÅÔ¾{G1Tnoê¢ð$¶˜mˆ]ÿ‘ó	¿ÞÄ‚†
 endstream
 endobj
-11711 0 obj <<
+11699 0 obj <<
 /Type /Page
-/Contents 11712 0 R
-/Resources 11710 0 R
+/Contents 11700 0 R
+/Resources 11698 0 R
 /MediaBox [0 0 612 792]
-/Parent 11692 0 R
+/Parent 11680 0 R
 >> endobj
-11713 0 obj <<
-/D [11711 0 R /XYZ 100.892 685.529 null]
+11701 0 obj <<
+/D [11699 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3374 0 obj <<
-/D [11711 0 R /XYZ 100.892 522.71 null]
+/D [11699 0 R /XYZ 100.892 522.71 null]
 >> endobj
-11714 0 obj <<
-/D [11711 0 R /XYZ 100.892 496.053 null]
+11702 0 obj <<
+/D [11699 0 R /XYZ 100.892 496.053 null]
 >> endobj
-11710 0 obj <<
+11698 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11717 0 obj <<
+11705 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -67234,20 +70940,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-11716 0 obj <<
+11704 0 obj <<
 /Type /Page
-/Contents 11717 0 R
-/Resources 11715 0 R
+/Contents 11705 0 R
+/Resources 11703 0 R
 /MediaBox [0 0 612 792]
-/Parent 11692 0 R
+/Parent 11680 0 R
 >> endobj
-11718 0 obj <<
-/D [11716 0 R /XYZ 151.701 685.529 null]
+11706 0 obj <<
+/D [11704 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11715 0 obj <<
+11703 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-11721 0 obj <<
+11709 0 obj <<
 /Length 129       
 /Filter /FlateDecode
 >>
@@ -67257,21 +70963,21 @@
 *:‰qšŠK…Ò÷GJÔéŸ>ø	ž@°Sôíº¨Õ–0¡G(p L$„‘½‡ò€«>ïô}šõ)êËÞÜÊ¡Á€)'·@+ºNÀFÁ˜sƒ§:Ô©Ž}mò\ûùõþøuSÔç®$‹
 endstream
 endobj
-11720 0 obj <<
+11708 0 obj <<
 /Type /Page
-/Contents 11721 0 R
-/Resources 11719 0 R
+/Contents 11709 0 R
+/Resources 11707 0 R
 /MediaBox [0 0 612 792]
-/Parent 11692 0 R
+/Parent 11680 0 R
 >> endobj
 3378 0 obj <<
-/D [11720 0 R /XYZ 100.892 493.914 null]
+/D [11708 0 R /XYZ 100.892 493.914 null]
 >> endobj
-11719 0 obj <<
+11707 0 obj <<
 /Font << /F27 3691 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11724 0 obj <<
+11712 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -67279,17 +70985,17 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-11723 0 obj <<
+11711 0 obj <<
 /Type /Page
-/Contents 11724 0 R
-/Resources 11722 0 R
+/Contents 11712 0 R
+/Resources 11710 0 R
 /MediaBox [0 0 612 792]
-/Parent 11725 0 R
+/Parent 11713 0 R
 >> endobj
-11722 0 obj <<
+11710 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-11730 0 obj <<
+11718 0 obj <<
 /Length 1217      
 /Filter /FlateDecode
 >>
@@ -67304,61 +71010,61 @@
 À	Çô£óçCÂ?~Æé¾ì‚±, 멘wm?xاÃÙ	O!„ûÜp¦b#âä|63’Y(6˜5q6ÏŒN™2‰Êœ)0b¤"K’˜¦eN)©qüpæ!¯Sq'T’¾íÝ0ÜuŠ¦Û^]hž]”âÔT$WÎ|Ž2%LlX—سñÿyìwWý±5ˆÝPïŸC¹T¤ÎÅq”=éœOEÊÀô/-4'x6š“Kì%þäX
 endstream
 endobj
-11729 0 obj <<
+11717 0 obj <<
 /Type /Page
-/Contents 11730 0 R
-/Resources 11728 0 R
+/Contents 11718 0 R
+/Resources 11716 0 R
 /MediaBox [0 0 612 792]
-/Parent 11725 0 R
-/Annots [ 11726 0 R 11727 0 R ]
+/Parent 11713 0 R
+/Annots [ 11714 0 R 11715 0 R ]
 >> endobj
-11726 0 obj <<
+11714 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 127.92 205.667 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://samba.org/)>>
 >> endobj
-11727 0 obj <<
+11715 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 304.52 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://samba.org/samba/subversion.html)>>
 >> endobj
-11731 0 obj <<
-/D [11729 0 R /XYZ 100.892 685.529 null]
+11719 0 obj <<
+/D [11717 0 R /XYZ 100.892 685.529 null]
 >> endobj
-11732 0 obj <<
-/D [11729 0 R /XYZ 100.892 660.623 null]
+11720 0 obj <<
+/D [11717 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3382 0 obj <<
-/D [11729 0 R /XYZ 100.892 660.623 null]
+/D [11717 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3928 0 obj <<
-/D [11729 0 R /XYZ 100.892 501.556 null]
+/D [11717 0 R /XYZ 100.892 501.556 null]
 >> endobj
 3386 0 obj <<
-/D [11729 0 R /XYZ 100.892 426.167 null]
+/D [11717 0 R /XYZ 100.892 426.167 null]
 >> endobj
-11733 0 obj <<
-/D [11729 0 R /XYZ 100.892 396.708 null]
+11721 0 obj <<
+/D [11717 0 R /XYZ 100.892 396.708 null]
 >> endobj
 3390 0 obj <<
-/D [11729 0 R /XYZ 100.892 396.708 null]
+/D [11717 0 R /XYZ 100.892 396.708 null]
 >> endobj
-11734 0 obj <<
-/D [11729 0 R /XYZ 100.892 367.946 null]
+11722 0 obj <<
+/D [11717 0 R /XYZ 100.892 367.946 null]
 >> endobj
 3394 0 obj <<
-/D [11729 0 R /XYZ 100.892 247.977 null]
+/D [11717 0 R /XYZ 100.892 247.977 null]
 >> endobj
-11735 0 obj <<
-/D [11729 0 R /XYZ 100.892 216.89 null]
+11723 0 obj <<
+/D [11717 0 R /XYZ 100.892 216.89 null]
 >> endobj
-11728 0 obj <<
+11716 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F29 5413 0 R /F50 3701 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11740 0 obj <<
+11728 0 obj <<
 /Length 1903      
 /Filter /FlateDecode
 >>
@@ -67376,52 +71082,52 @@
 «XCü:ZÊp$Á—ÿAR>PüÁ¼AA´G“J&Ì™OǪß}ã”nl|kz‹O|‰CÛ4=½§÷µ^VÖÝ_p=þç«ò0}!Fÿ„ÿ ï
 endstream
 endobj
-11739 0 obj <<
+11727 0 obj <<
 /Type /Page
-/Contents 11740 0 R
-/Resources 11738 0 R
+/Contents 11728 0 R
+/Resources 11726 0 R
 /MediaBox [0 0 612 792]
-/Parent 11725 0 R
-/Annots [ 11736 0 R 11737 0 R ]
+/Parent 11713 0 R
+/Annots [ 11724 0 R 11725 0 R ]
 >> endobj
-11736 0 obj <<
+11724 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [225.614 554.455 370.787 566.448]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://viewcvs.samba.org/)>>
 >> endobj
-11737 0 obj <<
+11725 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [241.493 380.626 409.574 392.619]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://subversion.tigris.org/)>>
 >> endobj
-11741 0 obj <<
-/D [11739 0 R /XYZ 151.701 685.529 null]
+11729 0 obj <<
+/D [11727 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3398 0 obj <<
-/D [11739 0 R /XYZ 151.701 660.623 null]
+/D [11727 0 R /XYZ 151.701 660.623 null]
 >> endobj
-11742 0 obj <<
-/D [11739 0 R /XYZ 151.701 644.027 null]
+11730 0 obj <<
+/D [11727 0 R /XYZ 151.701 644.027 null]
 >> endobj
 3402 0 obj <<
-/D [11739 0 R /XYZ 151.701 536.81 null]
+/D [11727 0 R /XYZ 151.701 536.81 null]
 >> endobj
-11743 0 obj <<
-/D [11739 0 R /XYZ 151.701 510.846 null]
+11731 0 obj <<
+/D [11727 0 R /XYZ 151.701 510.846 null]
 >> endobj
-11744 0 obj <<
-/D [11739 0 R /XYZ 151.701 345.624 null]
+11732 0 obj <<
+/D [11727 0 R /XYZ 151.701 345.624 null]
 >> endobj
-11745 0 obj <<
-/D [11739 0 R /XYZ 151.701 309.323 null]
+11733 0 obj <<
+/D [11727 0 R /XYZ 151.701 309.323 null]
 >> endobj
-11738 0 obj <<
+11726 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F52 3737 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11751 0 obj <<
+11739 0 obj <<
 /Length 1775      
 /Filter /FlateDecode
 >>
@@ -67440,55 +71146,55 @@
 G½L41Öeß[Ãx(Mq;yÙ(œ¼;cààdô\ÁuhÇ*§5§M´ã7PÐuï8ú¬!‹¨$TìOÚïH‹¤EÛUîãº^Mv¾^<.ºÓ»?ÿ&ÊÝý[¢SÚŠ¦ƒmµÌmúw•ÎÜI6ÁA¨qùÌ;–MQ1ŒÛÁ”f4îâSØ؍¿š?CC=	¬”KÌŽ·tÔ¾uˆÕaŠÅœÖæŽ^¨Ž[a_c_‡¹Öžà7\í΃ecþµåÏûÂÐè`LÏ«qà?=­ ó ˆÉ€Ý3=d‹çÑÕW"—‚©0zé™È#Áàé7½íëPž„R+ÛqD˜ £Z¸è9Ÿ=ž#Æ%>á _:Èü~ñè‹çìðZìâòêÎ*ÿSß¿éÆíÆV¨ïZ–‡-îæ*-N/÷?H¼…kžÀó:	áf¹è3™¶Š\U}8)²yQ“b.‰^Ö$ Wb®‰üÅš88R×qVãEɃÄŒ¹ä'ÞË?Àõ•š‡›
 endstream
 endobj
-11750 0 obj <<
+11738 0 obj <<
 /Type /Page
-/Contents 11751 0 R
-/Resources 11749 0 R
+/Contents 11739 0 R
+/Resources 11737 0 R
 /MediaBox [0 0 612 792]
-/Parent 11725 0 R
-/Annots [ 11746 0 R 11747 0 R 11748 0 R ]
+/Parent 11713 0 R
+/Annots [ 11734 0 R 11735 0 R 11736 0 R ]
 >> endobj
-11746 0 obj <<
+11734 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 138.879 295.106 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(ftp://pserver.samba.org/pub/unpacked)>>
 >> endobj
-11747 0 obj <<
+11735 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 127.92 309.228 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(rsync://pserver.samba.org/ftp/unpacked/)>>
 >> endobj
-11748 0 obj <<
+11736 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 233.911 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://rsync.samba.org/)>>
 >> endobj
-11752 0 obj <<
-/D [11750 0 R /XYZ 100.892 685.529 null]
+11740 0 obj <<
+/D [11738 0 R /XYZ 100.892 685.529 null]
 >> endobj
-11753 0 obj <<
-/D [11750 0 R /XYZ 100.892 622.565 null]
+11741 0 obj <<
+/D [11738 0 R /XYZ 100.892 622.565 null]
 >> endobj
 3406 0 obj <<
-/D [11750 0 R /XYZ 100.892 518.341 null]
+/D [11738 0 R /XYZ 100.892 518.341 null]
 >> endobj
-11754 0 obj <<
-/D [11750 0 R /XYZ 100.892 485.555 null]
+11742 0 obj <<
+/D [11738 0 R /XYZ 100.892 485.555 null]
 >> endobj
 3410 0 obj <<
-/D [11750 0 R /XYZ 100.892 316.104 null]
+/D [11738 0 R /XYZ 100.892 316.104 null]
 >> endobj
-11755 0 obj <<
-/D [11750 0 R /XYZ 100.892 283.318 null]
+11743 0 obj <<
+/D [11738 0 R /XYZ 100.892 283.318 null]
 >> endobj
-11749 0 obj <<
+11737 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R /F85 5513 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11758 0 obj <<
+11746 0 obj <<
 /Length 1430      
 /Filter /FlateDecode
 >>
@@ -67500,27 +71206,27 @@
 -?*뺗ÿ†[ˆ|ðýLX:r_ŒÏÎœ£®ÚhJ÷Ÿ$änÆáME…ò<®Õyxܧœ\7àZ¶Hxya.¿Èjð¥0½éº¦é0;…]·aæ¾F»Îþ•ÏSV3³~ý¸nÒÇ_²5â.3süÞ@÷‡nqºl¥#}£|dê Eb{¼A@òPí•Ahw5Þ” {Ì„(Š„Á¯ÅXTl¹SߪÀ,cœg£±jør¾å‚òÒ) G1_k)gÙ&½‚f{t×]hòæHce„Ú•¦¹G•¸ðo’tÓ[6|E×ð˜Oz"Z¹ž˜_z"ê¨'"éw]pòÙ\•Kß׋‘§½ÊÆOm)÷æ¡EØ>÷ØØ‘yçµ9Ng{â~0Hw-5äÔÑóü5>áßì¦Ìµ¿
 endstream
 endobj
-11757 0 obj <<
+11745 0 obj <<
 /Type /Page
-/Contents 11758 0 R
-/Resources 11756 0 R
+/Contents 11746 0 R
+/Resources 11744 0 R
 /MediaBox [0 0 612 792]
-/Parent 11725 0 R
+/Parent 11713 0 R
 >> endobj
-11759 0 obj <<
-/D [11757 0 R /XYZ 151.701 685.529 null]
+11747 0 obj <<
+/D [11745 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3414 0 obj <<
-/D [11757 0 R /XYZ 151.701 351.586 null]
+/D [11745 0 R /XYZ 151.701 351.586 null]
 >> endobj
-11760 0 obj <<
-/D [11757 0 R /XYZ 151.701 319.015 null]
+11748 0 obj <<
+/D [11745 0 R /XYZ 151.701 319.015 null]
 >> endobj
-11756 0 obj <<
+11744 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11763 0 obj <<
+11751 0 obj <<
 /Length 917       
 /Filter /FlateDecode
 >>
@@ -67531,21 +71237,21 @@
 /}Ú˜v”D§–ÄÒ/žÓÆSqnûÁxú{Ï³MtÙЦAâ,ÙèÙòÞì~³‹ì)üëxß»ÆßU1çöõ¤èìÖv¸—TèÎuÒ×r¤ƒ/Bj¨²ö•L•Qƒ¨øFƒàË"ƒÞîMªóL3œÙ<g¶t8à%r¥½UèÛ›åp˜;jë¡êË7OȨÎéÁ9¦WO]¸+{dÌ>ÌÀקAV@ý‰o@rº”ÕTBcߦÆÝšýØŸu(§®BÿoZaV¯ñÉáDi™Bx­ã®ÚÒzCLìÆý®3ôŠj¸Î·k‚-@Èï•{’¾£ÛõøT{…ÎïMƒGk3Eî]½¹Æ©?Ø'yG¸“tL¦æái›óê^ ÆC ³éQ€Ö/RiYüA¢ý1ØÃ"ù³œý‹ƒàï&pUP§dý×ËÚ8_ÂîóύB.<içüFÝFíYÁl7ø—écZáGæ'Ÿ«t‹
 endstream
 endobj
-11762 0 obj <<
+11750 0 obj <<
 /Type /Page
-/Contents 11763 0 R
-/Resources 11761 0 R
+/Contents 11751 0 R
+/Resources 11749 0 R
 /MediaBox [0 0 612 792]
-/Parent 11725 0 R
+/Parent 11713 0 R
 >> endobj
-11764 0 obj <<
-/D [11762 0 R /XYZ 100.892 685.529 null]
+11752 0 obj <<
+/D [11750 0 R /XYZ 100.892 685.529 null]
 >> endobj
-11761 0 obj <<
+11749 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11767 0 obj <<
+11755 0 obj <<
 /Length 1336      
 /Filter /FlateDecode
 >>
@@ -67569,39 +71275,39 @@
 JÖlüt:d¡ÓPa9p““,òA†ܯÜâ¾ò"GF uX¾€­Í˜øê#ä÷LAÊ\‘Âõfè²#('PÕå.Êz5P„dÒËÚ÷îm·ÉÖ¹js·FMˆ¡i¶QøÞéÓ²}Ÿ‡›Ã$¥© .©Àµ{qØy8”D‘Ëhã×úKÍ='îÃTBZ,6ØÒ¡>7$¼¤ïF}[dÕtû÷.éÀ	™³ïÍry¤tШ¡åÖ(˜¾êJ ¼#ýApßH"«èOtâç5ˆ,s3l?Þ°ž×õíCÐ:ͨ»û.ôt¸cÁ¿îíë^ö‹%WEÕÝÏýÇÞ§Àct¬Àèºîþd_ÏHd«³ª9š¶Üh±®;œaÜM8œ.ú†­aþÏCÁºçÎ*h6 ´m–.³C¾¬Ýˆ¸)ª¢Å	çÿ‰Ð扶l†¬Áný“ýˆ†¹j¯–›ˆÙ0„ÌS‰ý>ïUßOœ4h>1£ÿÂÉo©?µø
 endstream
 endobj
-11766 0 obj <<
+11754 0 obj <<
 /Type /Page
-/Contents 11767 0 R
-/Resources 11765 0 R
+/Contents 11755 0 R
+/Resources 11753 0 R
 /MediaBox [0 0 612 792]
-/Parent 11772 0 R
+/Parent 11760 0 R
 >> endobj
-11768 0 obj <<
-/D [11766 0 R /XYZ 151.701 685.529 null]
+11756 0 obj <<
+/D [11754 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3418 0 obj <<
-/D [11766 0 R /XYZ 151.701 622.678 null]
+/D [11754 0 R /XYZ 151.701 622.678 null]
 >> endobj
-11769 0 obj <<
-/D [11766 0 R /XYZ 151.701 594.172 null]
+11757 0 obj <<
+/D [11754 0 R /XYZ 151.701 594.172 null]
 >> endobj
 3422 0 obj <<
-/D [11766 0 R /XYZ 151.701 328.431 null]
+/D [11754 0 R /XYZ 151.701 328.431 null]
 >> endobj
-11770 0 obj <<
-/D [11766 0 R /XYZ 151.701 302.543 null]
+11758 0 obj <<
+/D [11754 0 R /XYZ 151.701 302.543 null]
 >> endobj
 3426 0 obj <<
-/D [11766 0 R /XYZ 151.701 229.604 null]
+/D [11754 0 R /XYZ 151.701 229.604 null]
 >> endobj
-11771 0 obj <<
-/D [11766 0 R /XYZ 151.701 201.292 null]
+11759 0 obj <<
+/D [11754 0 R /XYZ 151.701 201.292 null]
 >> endobj
-11765 0 obj <<
+11753 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R /F51 3736 0 R /F53 3738 0 R /F85 5513 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11775 0 obj <<
+11763 0 obj <<
 /Length 1698      
 /Filter /FlateDecode
 >>
@@ -67629,39 +71335,39 @@
 ]É
 endstream
 endobj
-11774 0 obj <<
+11762 0 obj <<
 /Type /Page
-/Contents 11775 0 R
-/Resources 11773 0 R
+/Contents 11763 0 R
+/Resources 11761 0 R
 /MediaBox [0 0 612 792]
-/Parent 11772 0 R
+/Parent 11760 0 R
 >> endobj
-11776 0 obj <<
-/D [11774 0 R /XYZ 100.892 685.529 null]
+11764 0 obj <<
+/D [11762 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3430 0 obj <<
-/D [11774 0 R /XYZ 100.892 567.5 null]
+/D [11762 0 R /XYZ 100.892 567.5 null]
 >> endobj
-11777 0 obj <<
-/D [11774 0 R /XYZ 100.892 536.943 null]
+11765 0 obj <<
+/D [11762 0 R /XYZ 100.892 536.943 null]
 >> endobj
 3434 0 obj <<
-/D [11774 0 R /XYZ 100.892 387.83 null]
+/D [11762 0 R /XYZ 100.892 387.83 null]
 >> endobj
 5627 0 obj <<
-/D [11774 0 R /XYZ 100.892 356.189 null]
+/D [11762 0 R /XYZ 100.892 356.189 null]
 >> endobj
 3438 0 obj <<
-/D [11774 0 R /XYZ 100.892 183.887 null]
+/D [11762 0 R /XYZ 100.892 183.887 null]
 >> endobj
-11778 0 obj <<
-/D [11774 0 R /XYZ 100.892 155.259 null]
+11766 0 obj <<
+/D [11762 0 R /XYZ 100.892 155.259 null]
 >> endobj
-11773 0 obj <<
+11761 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11781 0 obj <<
+11769 0 obj <<
 /Length 1292      
 /Filter /FlateDecode
 >>
@@ -67680,22 +71386,22 @@
 IqØÕÙ¦:,ß6^.9\ø–—AÅÊË»j?n,ú×}÷¿KÝxV©ã?Úøüåà†©
 endstream
 endobj
-11780 0 obj <<
+11768 0 obj <<
 /Type /Page
-/Contents 11781 0 R
-/Resources 11779 0 R
+/Contents 11769 0 R
+/Resources 11767 0 R
 /MediaBox [0 0 612 792]
-/Parent 11772 0 R
+/Parent 11760 0 R
 >> endobj
-11782 0 obj <<
-/D [11780 0 R /XYZ 151.701 685.529 null]
+11770 0 obj <<
+/D [11768 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11779 0 obj <<
+11767 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F88 5678 0 R /F72 5679 0 R /F15 3700 0 R /F53 3738 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11785 0 obj <<
+11773 0 obj <<
 /Length 1545      
 /Filter /FlateDecode
 >>
@@ -67711,28 +71417,28 @@
 ‚Þ¡Ôœ(4^ˆ8z&ÆT|]é½ç-lÚæjòÈjì_È#å€+©Ž7>繋腀AŸÈhvRÈçÚY*ÀŒ}òÃ"Ën{Á‘å¡k—»,]vy½Î—­×e ЋK=âò_ÇþùüÛÿ´gç]ÀÊí¯ó±FD\¹ÇÍSú|½ås_õÛKÏ/J3¢ÆÆUÌ9‹·µCó8(þôÅ}Ő'q1+4¥Ò'id3t¡` Œ#ƒÙ{ˆд"·GÒ·h}{ Oì%{3E cŸäªI’’”ÓAz^Bî„휎ͧiÑ ÚÙ­uì:çx~PÇv²4}±lâ3zÉ%ˆâ,:\ÀãÞàuF `…ã°ÁžP]#}æç2]ukóŠõÍY+݇—Ü:êÒÖ.&ãí~lÉ lº‡ÝrxN_èžÿ^Æ
 endstream
 endobj
-11784 0 obj <<
+11772 0 obj <<
 /Type /Page
-/Contents 11785 0 R
-/Resources 11783 0 R
+/Contents 11773 0 R
+/Resources 11771 0 R
 /MediaBox [0 0 612 792]
-/Parent 11772 0 R
+/Parent 11760 0 R
 >> endobj
-11786 0 obj <<
-/D [11784 0 R /XYZ 100.892 685.529 null]
+11774 0 obj <<
+/D [11772 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3442 0 obj <<
-/D [11784 0 R /XYZ 100.892 330.316 null]
+/D [11772 0 R /XYZ 100.892 330.316 null]
 >> endobj
-11787 0 obj <<
-/D [11784 0 R /XYZ 100.892 301.999 null]
+11775 0 obj <<
+/D [11772 0 R /XYZ 100.892 301.999 null]
 >> endobj
-11783 0 obj <<
+11771 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R /F53 3738 0 R /F17 3698 0 R /F15 3700 0 R >>
-/XObject << /Im1 5672 0 R /Im3 6520 0 R >>
+/XObject << /Im1 5672 0 R /Im3 6519 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11790 0 obj <<
+11778 0 obj <<
 /Length 1418      
 /Filter /FlateDecode
 >>
@@ -67757,28 +71463,28 @@
 %‰2€§¤×ððS5|áuü/Sä˜
 endstream
 endobj
-11789 0 obj <<
+11777 0 obj <<
 /Type /Page
-/Contents 11790 0 R
-/Resources 11788 0 R
+/Contents 11778 0 R
+/Resources 11776 0 R
 /MediaBox [0 0 612 792]
-/Parent 11772 0 R
+/Parent 11760 0 R
 >> endobj
-11791 0 obj <<
-/D [11789 0 R /XYZ 151.701 685.529 null]
+11779 0 obj <<
+/D [11777 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3446 0 obj <<
-/D [11789 0 R /XYZ 151.701 527.737 null]
+/D [11777 0 R /XYZ 151.701 527.737 null]
 >> endobj
-11792 0 obj <<
-/D [11789 0 R /XYZ 151.701 503.911 null]
+11780 0 obj <<
+/D [11777 0 R /XYZ 151.701 503.911 null]
 >> endobj
-11788 0 obj <<
+11776 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F88 5678 0 R /F72 5679 0 R /F53 3738 0 R /F17 3698 0 R /F15 3700 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11795 0 obj <<
+11783 0 obj <<
 /Length 831       
 /Filter /FlateDecode
 >>
@@ -67791,27 +71497,27 @@
  •m‡AÃù$r‚ð­;Øf\;r· ü©}ÿFû“íœÞ¼° 4ŽG¼äé0j<…(‡AiàÜ÷¤èÛÑÀí%èç[ŠaËAñ´åÀ<m9ØœŽñBmÏÚ!ü|¸ÓÚ??”ÿyÍòe\Âûu7õ/ß~T·8²qx‚{*ZÀé«…êšš±ÏÈfzx5¶5g×E;Øgê…z¯rR>ÿ”_‘¥{<}°Çÿð;à/GöR;
 endstream
 endobj
-11794 0 obj <<
+11782 0 obj <<
 /Type /Page
-/Contents 11795 0 R
-/Resources 11793 0 R
+/Contents 11783 0 R
+/Resources 11781 0 R
 /MediaBox [0 0 612 792]
-/Parent 11772 0 R
+/Parent 11760 0 R
 >> endobj
-11796 0 obj <<
-/D [11794 0 R /XYZ 100.892 685.529 null]
+11784 0 obj <<
+/D [11782 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3450 0 obj <<
-/D [11794 0 R /XYZ 100.892 539.782 null]
+/D [11782 0 R /XYZ 100.892 539.782 null]
 >> endobj
-11797 0 obj <<
-/D [11794 0 R /XYZ 100.892 513.812 null]
+11785 0 obj <<
+/D [11782 0 R /XYZ 100.892 513.812 null]
 >> endobj
-11793 0 obj <<
+11781 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11800 0 obj <<
+11788 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -67819,20 +71525,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-11799 0 obj <<
+11787 0 obj <<
 /Type /Page
-/Contents 11800 0 R
-/Resources 11798 0 R
+/Contents 11788 0 R
+/Resources 11786 0 R
 /MediaBox [0 0 612 792]
-/Parent 11802 0 R
+/Parent 11790 0 R
 >> endobj
-11801 0 obj <<
-/D [11799 0 R /XYZ 151.701 685.529 null]
+11789 0 obj <<
+/D [11787 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11798 0 obj <<
+11786 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-11805 0 obj <<
+11793 0 obj <<
 /Length 1527      
 /Filter /FlateDecode
 >>
@@ -67859,33 +71565,33 @@
 `åi‚T at TŽë|²»®íÌôB¥ŠÒMë¹mÉA-z¿ÜøÏ?_¡†£‹Ò„Ž˜Ê$€­	šYB6$IrÁýñ_%ÎÓ
 endstream
 endobj
-11804 0 obj <<
+11792 0 obj <<
 /Type /Page
-/Contents 11805 0 R
-/Resources 11803 0 R
+/Contents 11793 0 R
+/Resources 11791 0 R
 /MediaBox [0 0 612 792]
-/Parent 11802 0 R
+/Parent 11790 0 R
 >> endobj
-11806 0 obj <<
-/D [11804 0 R /XYZ 100.892 685.529 null]
+11794 0 obj <<
+/D [11792 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3454 0 obj <<
-/D [11804 0 R /XYZ 100.892 660.623 null]
+/D [11792 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3929 0 obj <<
-/D [11804 0 R /XYZ 100.892 495.006 null]
+/D [11792 0 R /XYZ 100.892 495.006 null]
 >> endobj
 3458 0 obj <<
-/D [11804 0 R /XYZ 100.892 408.622 null]
+/D [11792 0 R /XYZ 100.892 408.622 null]
 >> endobj
-11807 0 obj <<
-/D [11804 0 R /XYZ 100.892 375.888 null]
+11795 0 obj <<
+/D [11792 0 R /XYZ 100.892 375.888 null]
 >> endobj
-11803 0 obj <<
+11791 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11811 0 obj <<
+11799 0 obj <<
 /Length 1835      
 /Filter /FlateDecode
 >>
@@ -67908,40 +71614,40 @@
 :át4tÁ¬è¦P¦c£¢¯§´Á3¿axA@­òe"*(pÐ;üÇßÁ}©ÈdvêÙ A7S›æÑ}}&5á+Î‹h*B …C>\¯àÏÜþHê¨KÎ9Q%#MŸ n‹ÐÜÊÉÄ´v;\›¿ý'ÿ• ~“ŸÁ¢ÔJèäUx£Ó„’˜h!U¸‘Ñ'¿¨9úoˆ‰?¨²È[ûˉ…oÓ±x*drø×	ü¢{}q1ú]wñìèÉMÿvóg=}þ…¸üǍC
 endstream
 endobj
-11810 0 obj <<
+11798 0 obj <<
 /Type /Page
-/Contents 11811 0 R
-/Resources 11809 0 R
+/Contents 11799 0 R
+/Resources 11797 0 R
 /MediaBox [0 0 612 792]
-/Parent 11802 0 R
-/Annots [ 11808 0 R ]
+/Parent 11790 0 R
+/Annots [ 11796 0 R ]
 >> endobj
-11808 0 obj <<
+11796 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 261.184 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(ftp://ftp.sco.com/)>>
 >> endobj
-11812 0 obj <<
-/D [11810 0 R /XYZ 151.701 685.529 null]
+11800 0 obj <<
+/D [11798 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3462 0 obj <<
-/D [11810 0 R /XYZ 151.701 660.623 null]
+/D [11798 0 R /XYZ 151.701 660.623 null]
 >> endobj
-11813 0 obj <<
-/D [11810 0 R /XYZ 151.701 641.209 null]
+11801 0 obj <<
+/D [11798 0 R /XYZ 151.701 641.209 null]
 >> endobj
 3466 0 obj <<
-/D [11810 0 R /XYZ 151.701 425.843 null]
+/D [11798 0 R /XYZ 151.701 425.843 null]
 >> endobj
-11814 0 obj <<
-/D [11810 0 R /XYZ 151.701 399.122 null]
+11802 0 obj <<
+/D [11798 0 R /XYZ 151.701 399.122 null]
 >> endobj
-11809 0 obj <<
+11797 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F29 5413 0 R /F53 3738 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11817 0 obj <<
+11805 0 obj <<
 /Length 775       
 /Filter /FlateDecode
 >>
@@ -67953,21 +71659,21 @@
 Š‰0‹ŸÊïêR	<µ‘Bo$tJ)SÝj+ýÓn@]>²‘û1­Ä>NNfz,ÏJƒÊÊíD=p:\êVc^™.^-ž³ýêáY¬íkÝ/â{ÅWjýábŒÙ_ÒlŒ}{2Ð4d`ãž²<7cjOÁº÷fÛ«B½ªÝ®fÜ«rÛíΚñïkHš’ʁo÷Xí{Øtݼ|…AͲÏUïKç¸Õ²¨”[Ò½ÞÀ^­~üŠóv”ÊE'”¢6ýt{69í^èþiíÿðbÿMèÅ
 endstream
 endobj
-11816 0 obj <<
+11804 0 obj <<
 /Type /Page
-/Contents 11817 0 R
-/Resources 11815 0 R
+/Contents 11805 0 R
+/Resources 11803 0 R
 /MediaBox [0 0 612 792]
-/Parent 11802 0 R
+/Parent 11790 0 R
 >> endobj
-11818 0 obj <<
-/D [11816 0 R /XYZ 100.892 685.529 null]
+11806 0 obj <<
+/D [11804 0 R /XYZ 100.892 685.529 null]
 >> endobj
-11815 0 obj <<
+11803 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11821 0 obj <<
+11809 0 obj <<
 /Length 1543      
 /Filter /FlateDecode
 >>
@@ -67998,33 +71704,33 @@
 OòhÌó…þq燽ßj =‘M·ËïOQŠ(ÎÅñKÂ9ÕÿC³>ì)ó?|¶ð?àNþpøò»À?.|à¥Ue@‘øÏþö/ÊÒüø}Ç_©gë§|1•’b%Ù|˜î•Úk|+\}ÉÙñópþP·´ß 
 endstream
 endobj
-11820 0 obj <<
+11808 0 obj <<
 /Type /Page
-/Contents 11821 0 R
-/Resources 11819 0 R
+/Contents 11809 0 R
+/Resources 11807 0 R
 /MediaBox [0 0 612 792]
-/Parent 11802 0 R
+/Parent 11790 0 R
 >> endobj
-11822 0 obj <<
-/D [11820 0 R /XYZ 151.701 685.529 null]
+11810 0 obj <<
+/D [11808 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3470 0 obj <<
-/D [11820 0 R /XYZ 151.701 606.572 null]
+/D [11808 0 R /XYZ 151.701 606.572 null]
 >> endobj
-11823 0 obj <<
-/D [11820 0 R /XYZ 151.701 575.909 null]
+11811 0 obj <<
+/D [11808 0 R /XYZ 151.701 575.909 null]
 >> endobj
 3474 0 obj <<
-/D [11820 0 R /XYZ 151.701 369.225 null]
+/D [11808 0 R /XYZ 151.701 369.225 null]
 >> endobj
-11824 0 obj <<
-/D [11820 0 R /XYZ 151.701 338.164 null]
+11812 0 obj <<
+/D [11808 0 R /XYZ 151.701 338.164 null]
 >> endobj
-11819 0 obj <<
+11807 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11828 0 obj <<
+11816 0 obj <<
 /Length 1572      
 /Filter /FlateDecode
 >>
@@ -68047,52 +71753,52 @@
 ™ä‘€f™Í[p1GCŠ	-ÐÃœ:ñðòUv¬ž1‘æãïϦïw?\^º¡qm}g¤Û¥³EWn.‹åØ²ý¥lëš~É®®Ÿ/^ü~Ñïwö*Ôh	U\|ü1Núîb[<\i~QÍz(ÖöÊ6_ÛíßÙ½¾"˜~„:w%ÔEßþÖ–¶ìW{ëëÕéeNîy×–ãu~>Ñ}ú¨þaz¥Ç
 endstream
 endobj
-11827 0 obj <<
+11815 0 obj <<
 /Type /Page
-/Contents 11828 0 R
-/Resources 11826 0 R
+/Contents 11816 0 R
+/Resources 11814 0 R
 /MediaBox [0 0 612 792]
-/Parent 11802 0 R
-/Annots [ 11825 0 R 11832 0 R ]
+/Parent 11790 0 R
+/Annots [ 11813 0 R 11820 0 R ]
 >> endobj
-11825 0 obj <<
+11813 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 129.215 460.543 140.871]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://sunsolve.sun.com/search/advsearch.do?collection=PATCH&type=collections&max=50&language=en&queryKey5=112960;rev=14&toDocument=yes)>>
 >> endobj
-11832 0 obj <<
+11820 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [99.895 116.961 426.691 127.721]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://sunsolve.sun.com/search/advsearch.do?collection=PATCH&type=collections&max=50&language=en&queryKey5=112960;rev=14&toDocument=yes)>>
 >> endobj
-11829 0 obj <<
-/D [11827 0 R /XYZ 100.892 685.529 null]
+11817 0 obj <<
+/D [11815 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3478 0 obj <<
-/D [11827 0 R /XYZ 100.892 619.675 null]
+/D [11815 0 R /XYZ 100.892 619.675 null]
 >> endobj
-11830 0 obj <<
-/D [11827 0 R /XYZ 100.892 590.897 null]
+11818 0 obj <<
+/D [11815 0 R /XYZ 100.892 590.897 null]
 >> endobj
 3482 0 obj <<
-/D [11827 0 R /XYZ 100.892 590.897 null]
+/D [11815 0 R /XYZ 100.892 590.897 null]
 >> endobj
-11831 0 obj <<
-/D [11827 0 R /XYZ 100.892 562.612 null]
+11819 0 obj <<
+/D [11815 0 R /XYZ 100.892 562.612 null]
 >> endobj
 3486 0 obj <<
-/D [11827 0 R /XYZ 100.892 353.436 null]
+/D [11815 0 R /XYZ 100.892 353.436 null]
 >> endobj
-10350 0 obj <<
-/D [11827 0 R /XYZ 100.892 329.597 null]
+10338 0 obj <<
+/D [11815 0 R /XYZ 100.892 329.597 null]
 >> endobj
-11826 0 obj <<
+11814 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11835 0 obj <<
+11823 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -68100,20 +71806,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-11834 0 obj <<
+11822 0 obj <<
 /Type /Page
-/Contents 11835 0 R
-/Resources 11833 0 R
+/Contents 11823 0 R
+/Resources 11821 0 R
 /MediaBox [0 0 612 792]
-/Parent 11837 0 R
+/Parent 11825 0 R
 >> endobj
-11836 0 obj <<
-/D [11834 0 R /XYZ 151.701 685.529 null]
+11824 0 obj <<
+/D [11822 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11833 0 obj <<
+11821 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-11845 0 obj <<
+11833 0 obj <<
 /Length 1594      
 /Filter /FlateDecode
 >>
@@ -68135,64 +71841,64 @@
 Z?Œ„¯–¡:|/$þE	puXÝ‘nƒ…Õ;ûGÇ1ŠÓƒ…½G#ρð•­£9~œŒÞ‘ßÚs¸PÝ]ºXgŸ-Ù òŒ%…oƒ4}0N%Ìcß.–¾ÌWb×½«A”Bé•€„Ýk¯ü— ÿ_–›¶¿ZTá¾z°€	]ô`ý…oC6ŒY~»˜áN({RÿI²~‘á[Î…àùj9åD2ñp¡‘ÜmyúvÑù¾ÿò¨÷£#¯AQC©µrнݣ萙 º¥ð¾@.Ù#Aq— þ‰`$©
 endstream
 endobj
-11844 0 obj <<
+11832 0 obj <<
 /Type /Page
-/Contents 11845 0 R
-/Resources 11843 0 R
+/Contents 11833 0 R
+/Resources 11831 0 R
 /MediaBox [0 0 612 792]
-/Parent 11837 0 R
-/Annots [ 11838 0 R 11839 0 R 11840 0 R 11841 0 R 11842 0 R ]
+/Parent 11825 0 R
+/Annots [ 11826 0 R 11827 0 R 11828 0 R 11829 0 R 11830 0 R ]
 >> endobj
-11838 0 obj <<
+11826 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 160.797 233.911 173.748]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.thursby.com/)>>
 >> endobj
-11839 0 obj <<
+11827 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 149.838 318.642 162.789]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.thursby.com/products/dave.html)>>
 >> endobj
-11840 0 obj <<
+11828 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 138.879 295.106 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.umich.edu/~rsug/netatalk/)>>
 >> endobj
-11841 0 obj <<
+11829 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 127.92 328.057 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.cs.mu.oz.au/appletalk/atalk.html)>>
 >> endobj
-11842 0 obj <<
+11830 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 304.52 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.eats.com/linux_mac_win.html)>>
 >> endobj
-11846 0 obj <<
-/D [11844 0 R /XYZ 100.892 685.529 null]
+11834 0 obj <<
+/D [11832 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3490 0 obj <<
-/D [11844 0 R /XYZ 100.892 660.623 null]
+/D [11832 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3930 0 obj <<
-/D [11844 0 R /XYZ 100.892 469.633 null]
+/D [11832 0 R /XYZ 100.892 469.633 null]
 >> endobj
 3494 0 obj <<
-/D [11844 0 R /XYZ 100.892 417.927 null]
+/D [11832 0 R /XYZ 100.892 417.927 null]
 >> endobj
-11847 0 obj <<
-/D [11844 0 R /XYZ 100.892 387.451 null]
+11835 0 obj <<
+/D [11832 0 R /XYZ 100.892 387.451 null]
 >> endobj
-11843 0 obj <<
+11831 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11851 0 obj <<
+11839 0 obj <<
 /Length 2124      
 /Filter /FlateDecode
 >>
@@ -68226,46 +71932,46 @@
 qUÙ¹`!¡‹MNµöð.Çfê-™¤£zkÊ¥¥¢»aîEÙè›ö@Sç:@ÅäÇzFÔ&PŽlzÎç1x0°ýW¨ÛKWQ8>‘PRÜC–iôÙæüÁÚh\HH‡`*øs‡Í“°ßìä+Ãì9©ñ?zï‹œ„ c¢ã9÷!N^Ø€zÕ}3UêÔB´0tDrô±ÈB‰àHÀŸÎ¾ƒÄcr(^£c­5À{À6ø‚š Ý-ù{ä9ŠGWO$QÒJ—ÿeB{þŠû½pIð
 endstream
 endobj
-11850 0 obj <<
+11838 0 obj <<
 /Type /Page
-/Contents 11851 0 R
-/Resources 11849 0 R
+/Contents 11839 0 R
+/Resources 11837 0 R
 /MediaBox [0 0 612 792]
-/Parent 11837 0 R
-/Annots [ 11848 0 R ]
+/Parent 11825 0 R
+/Annots [ 11836 0 R ]
 >> endobj
-11848 0 obj <<
+11836 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 411.817 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(ftp://ftp.microsoft.com/BusSys/Clients/LANMAN.OS2/)>>
 >> endobj
-11852 0 obj <<
-/D [11850 0 R /XYZ 151.701 685.529 null]
+11840 0 obj <<
+/D [11838 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3498 0 obj <<
-/D [11850 0 R /XYZ 151.701 660.623 null]
+/D [11838 0 R /XYZ 151.701 660.623 null]
 >> endobj
-11853 0 obj <<
-/D [11850 0 R /XYZ 151.701 641.209 null]
+11841 0 obj <<
+/D [11838 0 R /XYZ 151.701 641.209 null]
 >> endobj
 3502 0 obj <<
-/D [11850 0 R /XYZ 151.701 641.209 null]
+/D [11838 0 R /XYZ 151.701 641.209 null]
 >> endobj
-11854 0 obj <<
-/D [11850 0 R /XYZ 151.701 612.169 null]
+11842 0 obj <<
+/D [11838 0 R /XYZ 151.701 612.169 null]
 >> endobj
 3506 0 obj <<
-/D [11850 0 R /XYZ 151.701 293.802 null]
+/D [11838 0 R /XYZ 151.701 293.802 null]
 >> endobj
-11855 0 obj <<
-/D [11850 0 R /XYZ 151.701 267.489 null]
+11843 0 obj <<
+/D [11838 0 R /XYZ 151.701 267.489 null]
 >> endobj
-11849 0 obj <<
+11837 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F51 3736 0 R /F53 3738 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11859 0 obj <<
+11847 0 obj <<
 /Length 1920      
 /Filter /FlateDecode
 >>
@@ -68288,46 +71994,46 @@
 7ïÍœÝp‘N­Øÿx‘¿œ½Äg'ž) , ôáÌ?Ÿñ^~Á^ÿÄÿÀÈ
 endstream
 endobj
-11858 0 obj <<
+11846 0 obj <<
 /Type /Page
-/Contents 11859 0 R
-/Resources 11857 0 R
+/Contents 11847 0 R
+/Resources 11845 0 R
 /MediaBox [0 0 612 792]
-/Parent 11837 0 R
-/Annots [ 11856 0 R ]
+/Parent 11825 0 R
+/Annots [ 11844 0 R ]
 >> endobj
-11856 0 obj <<
+11844 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 318.642 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(ftp://ftp.cdrom.com/pub/os2/network/ndis/)>>
 >> endobj
-11860 0 obj <<
-/D [11858 0 R /XYZ 100.892 685.529 null]
+11848 0 obj <<
+/D [11846 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3510 0 obj <<
-/D [11858 0 R /XYZ 100.892 559.992 null]
+/D [11846 0 R /XYZ 100.892 559.992 null]
 >> endobj
-11861 0 obj <<
-/D [11858 0 R /XYZ 100.892 530.377 null]
+11849 0 obj <<
+/D [11846 0 R /XYZ 100.892 530.377 null]
 >> endobj
 3514 0 obj <<
-/D [11858 0 R /XYZ 100.892 265.357 null]
+/D [11846 0 R /XYZ 100.892 265.357 null]
 >> endobj
-11862 0 obj <<
-/D [11858 0 R /XYZ 100.892 235.516 null]
+11850 0 obj <<
+/D [11846 0 R /XYZ 100.892 235.516 null]
 >> endobj
 3518 0 obj <<
-/D [11858 0 R /XYZ 100.892 235.516 null]
+/D [11846 0 R /XYZ 100.892 235.516 null]
 >> endobj
-11863 0 obj <<
-/D [11858 0 R /XYZ 100.892 208.42 null]
+11851 0 obj <<
+/D [11846 0 R /XYZ 100.892 208.42 null]
 >> endobj
-11857 0 obj <<
+11845 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R /F29 5413 0 R /F17 3698 0 R /F59 4373 0 R /F85 5513 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11867 0 obj <<
+11855 0 obj <<
 /Length 2077      
 /Filter /FlateDecode
 >>
@@ -68355,46 +72061,46 @@
 ÖúG’H_
 endstream
 endobj
-11866 0 obj <<
+11854 0 obj <<
 /Type /Page
-/Contents 11867 0 R
-/Resources 11865 0 R
+/Contents 11855 0 R
+/Resources 11853 0 R
 /MediaBox [0 0 612 792]
-/Parent 11837 0 R
-/Annots [ 11864 0 R ]
+/Parent 11825 0 R
+/Annots [ 11852 0 R ]
 >> endobj
-11864 0 obj <<
+11852 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 360.037 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://support.microsoft.com/kb/q99891/)>>
 >> endobj
-11868 0 obj <<
-/D [11866 0 R /XYZ 151.701 685.529 null]
+11856 0 obj <<
+/D [11854 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3522 0 obj <<
-/D [11866 0 R /XYZ 151.701 554.841 null]
+/D [11854 0 R /XYZ 151.701 554.841 null]
 >> endobj
-11869 0 obj <<
-/D [11866 0 R /XYZ 151.701 524.357 null]
+11857 0 obj <<
+/D [11854 0 R /XYZ 151.701 524.357 null]
 >> endobj
 3526 0 obj <<
-/D [11866 0 R /XYZ 151.701 357.592 null]
+/D [11854 0 R /XYZ 151.701 357.592 null]
 >> endobj
-11870 0 obj <<
-/D [11866 0 R /XYZ 151.701 329.229 null]
+11858 0 obj <<
+/D [11854 0 R /XYZ 151.701 329.229 null]
 >> endobj
 3530 0 obj <<
-/D [11866 0 R /XYZ 151.701 234.61 null]
+/D [11854 0 R /XYZ 151.701 234.61 null]
 >> endobj
-11871 0 obj <<
-/D [11866 0 R /XYZ 151.701 206.246 null]
+11859 0 obj <<
+/D [11854 0 R /XYZ 151.701 206.246 null]
 >> endobj
-11865 0 obj <<
+11853 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F29 5413 0 R /F17 3698 0 R /F59 4373 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11875 0 obj <<
+11863 0 obj <<
 /Length 1815      
 /Filter /FlateDecode
 >>
@@ -68419,47 +72125,47 @@
 5.9ˆ`Bâ©$ÃÞ‰ Óˆ¨ï[Ù%0ÂlG€~i¸TÓî8J•\‘Jï‚kõKÖ0çìÞ7º&8§ãYïeðÜwzVXÅ3ªŠ°NøWgÛ‚s19vWÛ8f6BLOFÊ4Õuý‹—Vƒ*BrT?8QmwԁÌÔ°c­Y3)Ôºzé¨ë8ƒ²ßý§«ÑþÂqÁ
 endstream
 endobj
-11874 0 obj <<
+11862 0 obj <<
 /Type /Page
-/Contents 11875 0 R
-/Resources 11873 0 R
+/Contents 11863 0 R
+/Resources 11861 0 R
 /MediaBox [0 0 612 792]
-/Parent 11837 0 R
-/Annots [ 11872 0 R ]
+/Parent 11825 0 R
+/Annots [ 11860 0 R ]
 >> endobj
-11872 0 obj <<
+11860 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 306.46 167.949 318.149]
 /Subtype /Link
 /A << /S /GoTo /D (speedimpr) >>
 >> endobj
-11876 0 obj <<
-/D [11874 0 R /XYZ 100.892 685.529 null]
+11864 0 obj <<
+/D [11862 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3534 0 obj <<
-/D [11874 0 R /XYZ 100.892 660.623 null]
+/D [11862 0 R /XYZ 100.892 660.623 null]
 >> endobj
-11877 0 obj <<
-/D [11874 0 R /XYZ 100.892 641.039 null]
+11865 0 obj <<
+/D [11862 0 R /XYZ 100.892 641.039 null]
 >> endobj
 3538 0 obj <<
-/D [11874 0 R /XYZ 100.892 557.5 null]
+/D [11862 0 R /XYZ 100.892 557.5 null]
 >> endobj
-11878 0 obj <<
-/D [11874 0 R /XYZ 100.892 528.203 null]
+11866 0 obj <<
+/D [11862 0 R /XYZ 100.892 528.203 null]
 >> endobj
 3542 0 obj <<
-/D [11874 0 R /XYZ 100.892 389.923 null]
+/D [11862 0 R /XYZ 100.892 389.923 null]
 >> endobj
-11879 0 obj <<
-/D [11874 0 R /XYZ 100.892 356.895 null]
+11867 0 obj <<
+/D [11862 0 R /XYZ 100.892 356.895 null]
 >> endobj
-11873 0 obj <<
+11861 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F85 5513 0 R /F59 4373 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11883 0 obj <<
+11871 0 obj <<
 /Length 2612      
 /Filter /FlateDecode
 >>
@@ -68490,68 +72196,68 @@
 =4¾ûøë»p/†K­ Z(n·wñ‡niñ±½¦¥T1òìõºT"ai¢ÇêJÊâ>Ë’f”]I-%® >+ðË×lÂÆyS¯h™š|ºÜ§QÚ¶XTøىﯩ•R.‡ô’‰MåëÔú7e—®šúdZfû%RÁ´6£ÜÙÌ' Âu<ŒÌî`"÷×OåDÀã4D¸aJÄšâ¹”ì<2}(%’†$3”³¢ÅÜÓÛ™$°MgÕ:ÿ¡RÕà¯ôÌ¥ŠqÐj´Ö»|²á&ø2ìäGˆÅžœš=fEø§®ð£ìÅEÅn?+6üµqÍãÝÀ§¯ÞìG6yÕJŒßÞ¼90!PþY¢1
 endstream
 endobj
-11882 0 obj <<
+11870 0 obj <<
 /Type /Page
-/Contents 11883 0 R
-/Resources 11881 0 R
+/Contents 11871 0 R
+/Resources 11869 0 R
 /MediaBox [0 0 612 792]
-/Parent 11895 0 R
-/Annots [ 11880 0 R ]
+/Parent 11883 0 R
+/Annots [ 11868 0 R ]
 >> endobj
-11880 0 obj <<
+11868 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 349.208 225.879 360.898]
 /Subtype /Link
 /A << /S /GoTo /D (minimalprofile) >>
 >> endobj
-11884 0 obj <<
-/D [11882 0 R /XYZ 151.701 685.529 null]
+11872 0 obj <<
+/D [11870 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3546 0 obj <<
-/D [11882 0 R /XYZ 151.701 660.623 null]
+/D [11870 0 R /XYZ 151.701 660.623 null]
 >> endobj
-11885 0 obj <<
-/D [11882 0 R /XYZ 151.701 641.703 null]
+11873 0 obj <<
+/D [11870 0 R /XYZ 151.701 641.703 null]
 >> endobj
 3550 0 obj <<
-/D [11882 0 R /XYZ 151.701 576.859 null]
+/D [11870 0 R /XYZ 151.701 576.859 null]
 >> endobj
-11886 0 obj <<
-/D [11882 0 R /XYZ 151.701 549.849 null]
+11874 0 obj <<
+/D [11870 0 R /XYZ 151.701 549.849 null]
 >> endobj
 5132 0 obj <<
-/D [11882 0 R /XYZ 151.701 337.896 null]
+/D [11870 0 R /XYZ 151.701 337.896 null]
 >> endobj
-11887 0 obj <<
-/D [11882 0 R /XYZ 151.701 321.026 null]
+11875 0 obj <<
+/D [11870 0 R /XYZ 151.701 321.026 null]
 >> endobj
-11888 0 obj <<
-/D [11882 0 R /XYZ 151.701 315.048 null]
+11876 0 obj <<
+/D [11870 0 R /XYZ 151.701 315.048 null]
 >> endobj
-11889 0 obj <<
-/D [11882 0 R /XYZ 151.701 321.325 null]
+11877 0 obj <<
+/D [11870 0 R /XYZ 151.701 321.325 null]
 >> endobj
-11890 0 obj <<
-/D [11882 0 R /XYZ 151.701 309.37 null]
+11878 0 obj <<
+/D [11870 0 R /XYZ 151.701 309.37 null]
 >> endobj
-11891 0 obj <<
-/D [11882 0 R /XYZ 151.701 297.414 null]
+11879 0 obj <<
+/D [11870 0 R /XYZ 151.701 297.414 null]
 >> endobj
-11892 0 obj <<
-/D [11882 0 R /XYZ 151.701 285.459 null]
+11880 0 obj <<
+/D [11870 0 R /XYZ 151.701 285.459 null]
 >> endobj
-11893 0 obj <<
-/D [11882 0 R /XYZ 151.701 273.504 null]
+11881 0 obj <<
+/D [11870 0 R /XYZ 151.701 273.504 null]
 >> endobj
-11894 0 obj <<
-/D [11882 0 R /XYZ 151.701 261.549 null]
+11882 0 obj <<
+/D [11870 0 R /XYZ 151.701 261.549 null]
 >> endobj
-11881 0 obj <<
+11869 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R /F53 3738 0 R /F4 5484 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11899 0 obj <<
+11887 0 obj <<
 /Length 958       
 /Filter /FlateDecode
 >>
@@ -68569,35 +72275,35 @@
 OåQƒSØMf0Rõñ'ò¤º…à¸}Nk«í¹"džœ³£ 0?Jbs“¸Ñg!Z1ûójØ—1Bϧl~!öž9܁°þØC·}ÿðââ¢bÛÃþ˜[ÀÒ_Lÿ*(º‡?êÊzý×»ïnWΚG'œ$­%ìYŸ>a˜¿¿â>
 endstream
 endobj
-11898 0 obj <<
+11886 0 obj <<
 /Type /Page
-/Contents 11899 0 R
-/Resources 11897 0 R
+/Contents 11887 0 R
+/Resources 11885 0 R
 /MediaBox [0 0 612 792]
-/Parent 11895 0 R
-/Annots [ 11896 0 R ]
+/Parent 11883 0 R
+/Annots [ 11884 0 R ]
 >> endobj
-11896 0 obj <<
+11884 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 393.959 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://support.microsoft.com/default.aspx?scid=kb;Q103765)>>
 >> endobj
-11900 0 obj <<
-/D [11898 0 R /XYZ 100.892 685.529 null]
+11888 0 obj <<
+/D [11886 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3554 0 obj <<
-/D [11898 0 R /XYZ 100.892 479.449 null]
+/D [11886 0 R /XYZ 100.892 479.449 null]
 >> endobj
-11901 0 obj <<
-/D [11898 0 R /XYZ 100.892 454.23 null]
+11889 0 obj <<
+/D [11886 0 R /XYZ 100.892 454.23 null]
 >> endobj
-11897 0 obj <<
+11885 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F51 3736 0 R /F52 3737 0 R /F88 5678 0 R /F72 5679 0 R /F17 3698 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11904 0 obj <<
+11892 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -68605,20 +72311,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-11903 0 obj <<
+11891 0 obj <<
 /Type /Page
-/Contents 11904 0 R
-/Resources 11902 0 R
+/Contents 11892 0 R
+/Resources 11890 0 R
 /MediaBox [0 0 612 792]
-/Parent 11895 0 R
+/Parent 11883 0 R
 >> endobj
-11905 0 obj <<
-/D [11903 0 R /XYZ 151.701 685.529 null]
+11893 0 obj <<
+/D [11891 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11902 0 obj <<
+11890 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-11908 0 obj <<
+11896 0 obj <<
 /Length 1424      
 /Filter /FlateDecode
 >>
@@ -68637,39 +72343,39 @@
 N[”F8˜§‡äÌaríÀíŽùpû„—g^¬c ¨÷á)ü%m@ÚÃf1°¤–Þ­Òñpwùztʦœ¬84ã(9æ,K7;7Û­R}PȇŸ¨Oix.˜vAgŒxøEp2+ÄÍ%ø{úÚdyv
 endstream
 endobj
-11907 0 obj <<
+11895 0 obj <<
 /Type /Page
-/Contents 11908 0 R
-/Resources 11906 0 R
+/Contents 11896 0 R
+/Resources 11894 0 R
 /MediaBox [0 0 612 792]
-/Parent 11895 0 R
+/Parent 11883 0 R
 >> endobj
-11909 0 obj <<
-/D [11907 0 R /XYZ 100.892 685.529 null]
+11897 0 obj <<
+/D [11895 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3558 0 obj <<
-/D [11907 0 R /XYZ 100.892 660.623 null]
+/D [11895 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3946 0 obj <<
-/D [11907 0 R /XYZ 100.892 476.519 null]
+/D [11895 0 R /XYZ 100.892 476.519 null]
 >> endobj
 3562 0 obj <<
-/D [11907 0 R /XYZ 100.892 476.519 null]
+/D [11895 0 R /XYZ 100.892 476.519 null]
 >> endobj
-11910 0 obj <<
-/D [11907 0 R /XYZ 100.892 444.846 null]
+11898 0 obj <<
+/D [11895 0 R /XYZ 100.892 444.846 null]
 >> endobj
 3566 0 obj <<
-/D [11907 0 R /XYZ 100.892 182.527 null]
+/D [11895 0 R /XYZ 100.892 182.527 null]
 >> endobj
-11911 0 obj <<
-/D [11907 0 R /XYZ 100.892 152.976 null]
+11899 0 obj <<
+/D [11895 0 R /XYZ 100.892 152.976 null]
 >> endobj
-11906 0 obj <<
+11894 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11914 0 obj <<
+11902 0 obj <<
 /Length 2198      
 /Filter /FlateDecode
 >>
@@ -68694,27 +72400,27 @@
 wøB»ÿ_€3Ô>
 endstream
 endobj
-11913 0 obj <<
+11901 0 obj <<
 /Type /Page
-/Contents 11914 0 R
-/Resources 11912 0 R
+/Contents 11902 0 R
+/Resources 11900 0 R
 /MediaBox [0 0 612 792]
-/Parent 11895 0 R
+/Parent 11883 0 R
 >> endobj
-11915 0 obj <<
-/D [11913 0 R /XYZ 151.701 685.529 null]
+11903 0 obj <<
+/D [11901 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3570 0 obj <<
-/D [11913 0 R /XYZ 151.701 360.915 null]
+/D [11901 0 R /XYZ 151.701 360.915 null]
 >> endobj
-11916 0 obj <<
-/D [11913 0 R /XYZ 151.701 330.121 null]
+11904 0 obj <<
+/D [11901 0 R /XYZ 151.701 330.121 null]
 >> endobj
-11912 0 obj <<
+11900 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F59 4373 0 R /F85 5513 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11919 0 obj <<
+11907 0 obj <<
 /Length 1878      
 /Filter /FlateDecode
 >>
@@ -68733,45 +72439,45 @@
 »eîhΓ1“á¯þ£­y…!yÀ$Zˆc—Ä°‡ÄÅš ³¿¡#Ô_K=!ށ)™˜ØÜ‘f•¿P -{ œ¿$µ„¦4!r!#µ8!.Z>2G¦Ì‘	…™BräJœ6›/tñ™ð7þ+Ú›4È#2,ldž .L…/5BTq¸IÉ<A&Ü¡ö²‹È4eʏ&v…ÔÅ‹…\&jÉÿ“Žÿ‹›¾o6«ÿ Mû7N
 endstream
 endobj
-11918 0 obj <<
+11906 0 obj <<
 /Type /Page
-/Contents 11919 0 R
-/Resources 11917 0 R
+/Contents 11907 0 R
+/Resources 11905 0 R
 /MediaBox [0 0 612 792]
-/Parent 11895 0 R
+/Parent 11883 0 R
 >> endobj
-11920 0 obj <<
-/D [11918 0 R /XYZ 100.892 685.529 null]
+11908 0 obj <<
+/D [11906 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3574 0 obj <<
-/D [11918 0 R /XYZ 100.892 660.623 null]
+/D [11906 0 R /XYZ 100.892 660.623 null]
 >> endobj
-11921 0 obj <<
-/D [11918 0 R /XYZ 100.892 641.209 null]
+11909 0 obj <<
+/D [11906 0 R /XYZ 100.892 641.209 null]
 >> endobj
 3578 0 obj <<
-/D [11918 0 R /XYZ 100.892 468.597 null]
+/D [11906 0 R /XYZ 100.892 468.597 null]
 >> endobj
-11922 0 obj <<
-/D [11918 0 R /XYZ 100.892 438.271 null]
+11910 0 obj <<
+/D [11906 0 R /XYZ 100.892 438.271 null]
 >> endobj
 3582 0 obj <<
-/D [11918 0 R /XYZ 100.892 370.946 null]
+/D [11906 0 R /XYZ 100.892 370.946 null]
 >> endobj
-11923 0 obj <<
-/D [11918 0 R /XYZ 100.892 343.139 null]
+11911 0 obj <<
+/D [11906 0 R /XYZ 100.892 343.139 null]
 >> endobj
 3586 0 obj <<
-/D [11918 0 R /XYZ 100.892 197.624 null]
+/D [11906 0 R /XYZ 100.892 197.624 null]
 >> endobj
-11924 0 obj <<
-/D [11918 0 R /XYZ 100.892 169.817 null]
+11912 0 obj <<
+/D [11906 0 R /XYZ 100.892 169.817 null]
 >> endobj
-11917 0 obj <<
+11905 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F85 5513 0 R /F59 4373 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11928 0 obj <<
+11916 0 obj <<
 /Length 1807      
 /Filter /FlateDecode
 >>
@@ -68795,54 +72501,54 @@
 0jñWcÅl¸øœŠlçWŸÓ;f§OiÐõÃ?t	œI»zˆg+è—Õâ_–g`ò
 endstream
 endobj
-11927 0 obj <<
+11915 0 obj <<
 /Type /Page
-/Contents 11928 0 R
-/Resources 11926 0 R
+/Contents 11916 0 R
+/Resources 11914 0 R
 /MediaBox [0 0 612 792]
-/Parent 11934 0 R
-/Annots [ 11925 0 R 11932 0 R ]
+/Parent 11922 0 R
+/Annots [ 11913 0 R 11920 0 R ]
 >> endobj
-11925 0 obj <<
+11913 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.742 455.157 511.352 466.847]
 /Subtype /Link
 /A << /S /GoTo /D (Other-Clients) >>
 >> endobj
-11932 0 obj <<
+11920 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.705 443.729 219.879 453.298]
 /Subtype /Link
 /A << /S /GoTo /D (Other-Clients) >>
 >> endobj
-11929 0 obj <<
-/D [11927 0 R /XYZ 151.701 685.529 null]
+11917 0 obj <<
+/D [11915 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3590 0 obj <<
-/D [11927 0 R /XYZ 151.701 615.901 null]
+/D [11915 0 R /XYZ 151.701 615.901 null]
 >> endobj
-11930 0 obj <<
-/D [11927 0 R /XYZ 151.701 586.025 null]
+11918 0 obj <<
+/D [11915 0 R /XYZ 151.701 586.025 null]
 >> endobj
 3594 0 obj <<
-/D [11927 0 R /XYZ 151.701 533.756 null]
+/D [11915 0 R /XYZ 151.701 533.756 null]
 >> endobj
-11931 0 obj <<
-/D [11927 0 R /XYZ 151.701 503.88 null]
+11919 0 obj <<
+/D [11915 0 R /XYZ 151.701 503.88 null]
 >> endobj
 3598 0 obj <<
-/D [11927 0 R /XYZ 151.701 426.634 null]
+/D [11915 0 R /XYZ 151.701 426.634 null]
 >> endobj
-11933 0 obj <<
-/D [11927 0 R /XYZ 151.701 383.605 null]
+11921 0 obj <<
+/D [11915 0 R /XYZ 151.701 383.605 null]
 >> endobj
-11926 0 obj <<
+11914 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11937 0 obj <<
+11925 0 obj <<
 /Length 2004      
 /Filter /FlateDecode
 >>
@@ -68864,33 +72570,33 @@
 åù2hHà¡öriZýÅ¥Q¨jáYOWÔ‰àÔøÕð}µ]ü	àÖú
 endstream
 endobj
-11936 0 obj <<
+11924 0 obj <<
 /Type /Page
-/Contents 11937 0 R
-/Resources 11935 0 R
+/Contents 11925 0 R
+/Resources 11923 0 R
 /MediaBox [0 0 612 792]
-/Parent 11934 0 R
+/Parent 11922 0 R
 >> endobj
-11938 0 obj <<
-/D [11936 0 R /XYZ 100.892 685.529 null]
+11926 0 obj <<
+/D [11924 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3602 0 obj <<
-/D [11936 0 R /XYZ 100.892 660.623 null]
+/D [11924 0 R /XYZ 100.892 660.623 null]
 >> endobj
-11939 0 obj <<
-/D [11936 0 R /XYZ 100.892 638.691 null]
+11927 0 obj <<
+/D [11924 0 R /XYZ 100.892 638.691 null]
 >> endobj
 3606 0 obj <<
-/D [11936 0 R /XYZ 100.892 399.087 null]
+/D [11924 0 R /XYZ 100.892 399.087 null]
 >> endobj
-11940 0 obj <<
-/D [11936 0 R /XYZ 100.892 369.911 null]
+11928 0 obj <<
+/D [11924 0 R /XYZ 100.892 369.911 null]
 >> endobj
-11935 0 obj <<
+11923 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11943 0 obj <<
+11931 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -68898,20 +72604,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-11942 0 obj <<
+11930 0 obj <<
 /Type /Page
-/Contents 11943 0 R
-/Resources 11941 0 R
+/Contents 11931 0 R
+/Resources 11929 0 R
 /MediaBox [0 0 612 792]
-/Parent 11934 0 R
+/Parent 11922 0 R
 >> endobj
-11944 0 obj <<
-/D [11942 0 R /XYZ 151.701 685.529 null]
+11932 0 obj <<
+/D [11930 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11941 0 obj <<
+11929 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-11949 0 obj <<
+11937 0 obj <<
 /Length 1220      
 /Filter /FlateDecode
 >>
@@ -68927,40 +72633,40 @@
 x±.ðµ·G”\&/ó<#žH#‘'…ˆþÿzà!¼÷Õ-îø²ž¦Í󓿪9üÀpDÒòõtÛ}cãàJ©,åc»ÿí@÷éŒý¹ …çD®ã[Õ–öÛtþMØ·
 endstream
 endobj
-11948 0 obj <<
+11936 0 obj <<
 /Type /Page
-/Contents 11949 0 R
-/Resources 11947 0 R
+/Contents 11937 0 R
+/Resources 11935 0 R
 /MediaBox [0 0 612 792]
-/Parent 11934 0 R
-/Annots [ 11945 0 R ]
+/Parent 11922 0 R
+/Annots [ 11933 0 R ]
 >> endobj
-11945 0 obj <<
+11933 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 252.74 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://rfc.net/rfc2830.html)>>
 >> endobj
-11950 0 obj <<
-/D [11948 0 R /XYZ 100.892 685.529 null]
+11938 0 obj <<
+/D [11936 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3610 0 obj <<
-/D [11948 0 R /XYZ 100.892 660.623 null]
+/D [11936 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3947 0 obj <<
-/D [11948 0 R /XYZ 100.892 453.632 null]
+/D [11936 0 R /XYZ 100.892 453.632 null]
 >> endobj
 3614 0 obj <<
-/D [11948 0 R /XYZ 100.892 453.632 null]
+/D [11936 0 R /XYZ 100.892 453.632 null]
 >> endobj
-11951 0 obj <<
-/D [11948 0 R /XYZ 100.892 413.034 null]
+11939 0 obj <<
+/D [11936 0 R /XYZ 100.892 413.034 null]
 >> endobj
-11947 0 obj <<
+11935 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F29 5413 0 R /F59 4373 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11959 0 obj <<
+11947 0 obj <<
 /Length 2027      
 /Filter /FlateDecode
 >>
@@ -68982,77 +72688,77 @@
 ƒ®@Œ¬cõ H”„C¡[šD-dÙ®êŠÿrc—v œ°KCÖi•ÚÙ|–ß#r„¤ZZ7H %Z‡6Ö æõzƒfÅ*+0£ÚH\ ‚v´¯àÔW=Íw-´¨¡@ût¿­ò¾¢O€!sÙ&á _Béÿʶ1jc)¶ðFƒ7ÇÄ;˜‰e[ôWÿøðãêëI	OJËý[(ö,ÇŸÉ9Ñ2¥—piÒg†0A5­ïç_¨÷ÿîƒF—
 endstream
 endobj
-11958 0 obj <<
+11946 0 obj <<
 /Type /Page
-/Contents 11959 0 R
-/Resources 11957 0 R
+/Contents 11947 0 R
+/Resources 11945 0 R
 /MediaBox [0 0 612 792]
-/Parent 11934 0 R
-/Annots [ 11946 0 R 11952 0 R 11953 0 R 11954 0 R 11955 0 R 11956 0 R 11963 0 R ]
+/Parent 11922 0 R
+/Annots [ 11934 0 R 11940 0 R 11941 0 R 11942 0 R 11943 0 R 11944 0 R 11951 0 R ]
 >> endobj
-11946 0 obj <<
+11934 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [219.095 511.506 348.185 524.457]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://rfc.net/rfc2830.html)>>
 >> endobj
-11952 0 obj <<
+11940 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [209.34 184.01 314.893 194.222]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.thawte.com/)>>
 >> endobj
-11953 0 obj <<
+11941 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [386.658 184.01 501.625 194.222]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.verisign.com/)>>
 >> endobj
-11954 0 obj <<
+11942 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [350.777 171.756 456.33 183.263]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.cacert.org/)>>
 >> endobj
-11955 0 obj <<
+11943 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 160.797 280.013 173.748]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.openssl.org)>>
 >> endobj
-11956 0 obj <<
+11944 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [419.921 129.215 511.352 140.871]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.openssl.org/docs/HOWTO/)>>
 >> endobj
-11963 0 obj <<
+11951 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [150.705 116.961 223.307 128.468]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.openssl.org/docs/HOWTO/)>>
 >> endobj
-11960 0 obj <<
-/D [11958 0 R /XYZ 151.701 685.529 null]
+11948 0 obj <<
+/D [11946 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3618 0 obj <<
-/D [11958 0 R /XYZ 151.701 457.881 null]
+/D [11946 0 R /XYZ 151.701 457.881 null]
 >> endobj
-11961 0 obj <<
-/D [11958 0 R /XYZ 151.701 423.01 null]
+11949 0 obj <<
+/D [11946 0 R /XYZ 151.701 423.01 null]
 >> endobj
 3622 0 obj <<
-/D [11958 0 R /XYZ 151.701 378.167 null]
+/D [11946 0 R /XYZ 151.701 378.167 null]
 >> endobj
-11962 0 obj <<
-/D [11958 0 R /XYZ 151.701 348.429 null]
+11950 0 obj <<
+/D [11946 0 R /XYZ 151.701 348.429 null]
 >> endobj
-11957 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F88 5678 0 R /F72 5679 0 R /F53 3738 0 R /F90 6229 0 R /F91 6230 0 R /F61 5442 0 R /F71 5443 0 R /F15 3700 0 R /F17 3698 0 R /F29 5413 0 R /F30 5441 0 R /F60 6223 0 R >>
-/XObject << /Im37 9083 0 R >>
+11945 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F88 5678 0 R /F72 5679 0 R /F53 3738 0 R /F90 6228 0 R /F91 6229 0 R /F61 5442 0 R /F71 5443 0 R /F15 3700 0 R /F17 3698 0 R /F29 5413 0 R /F30 5441 0 R /F60 6222 0 R >>
+/XObject << /Im37 9069 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11966 0 obj <<
+11954 0 obj <<
 /Length 1242      
 /Filter /FlateDecode
 >>
@@ -69067,22 +72773,22 @@
 ´ó¼w.z¼àA]X£á¼ÙW&S*0ø·«ŽÑ ³Û©"€"Qƒ©N¢:ÍXƒÞ³4sÉ lŒu7!&øX&Çl@€72çx8È;|Òž>¡9üÎ>
 endstream
 endobj
-11965 0 obj <<
+11953 0 obj <<
 /Type /Page
-/Contents 11966 0 R
-/Resources 11964 0 R
+/Contents 11954 0 R
+/Resources 11952 0 R
 /MediaBox [0 0 612 792]
-/Parent 11934 0 R
+/Parent 11922 0 R
 >> endobj
-11967 0 obj <<
-/D [11965 0 R /XYZ 100.892 685.529 null]
+11955 0 obj <<
+/D [11953 0 R /XYZ 100.892 685.529 null]
 >> endobj
-11964 0 obj <<
-/Font << /F22 3706 0 R /F50 3701 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R /F15 3700 0 R /F53 3738 0 R /F29 5413 0 R /F30 5441 0 R /F60 6223 0 R /F71 5443 0 R /F98 11968 0 R /F99 11969 0 R >>
+11952 0 obj <<
+/Font << /F22 3706 0 R /F50 3701 0 R /F88 5678 0 R /F72 5679 0 R /F89 6121 0 R /F15 3700 0 R /F53 3738 0 R /F29 5413 0 R /F30 5441 0 R /F60 6222 0 R /F71 5443 0 R /F98 11956 0 R /F99 11957 0 R >>
 /XObject << /Im1 5672 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11972 0 obj <<
+11960 0 obj <<
 /Length 1209      
 /Filter /FlateDecode
 >>
@@ -69096,33 +72802,33 @@
 ;ÀìhE©6m;–öÖwjïƇäõõk:õ÷é™"¶e¾ën§ᅣ³õŸßÛǦýËç}‰{Ó;[:¯½A<˜^<td“ùÿ|ýŸ™¯»ælÞð—ë/æt¬/
 endstream
 endobj
-11971 0 obj <<
+11959 0 obj <<
 /Type /Page
-/Contents 11972 0 R
-/Resources 11970 0 R
+/Contents 11960 0 R
+/Resources 11958 0 R
 /MediaBox [0 0 612 792]
-/Parent 11977 0 R
+/Parent 11965 0 R
 >> endobj
-11973 0 obj <<
-/D [11971 0 R /XYZ 151.701 685.529 null]
+11961 0 obj <<
+/D [11959 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11974 0 obj <<
-/D [11971 0 R /XYZ 151.701 409.409 null]
+11962 0 obj <<
+/D [11959 0 R /XYZ 151.701 409.409 null]
 >> endobj
-11975 0 obj <<
-/D [11971 0 R /XYZ 151.701 376.635 null]
+11963 0 obj <<
+/D [11959 0 R /XYZ 151.701 376.635 null]
 >> endobj
 3626 0 obj <<
-/D [11971 0 R /XYZ 151.701 323.685 null]
+/D [11959 0 R /XYZ 151.701 323.685 null]
 >> endobj
-11976 0 obj <<
-/D [11971 0 R /XYZ 151.701 297.105 null]
+11964 0 obj <<
+/D [11959 0 R /XYZ 151.701 297.105 null]
 >> endobj
-11970 0 obj <<
+11958 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F59 4373 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11980 0 obj <<
+11968 0 obj <<
 /Length 1221      
 /Filter /FlateDecode
 >>
@@ -69136,27 +72842,27 @@
 æb_ÔVwW˜—MµÅl¦>Ü×¥¿¹fè.¯ÿ-š?“És#àƽ½¤:Ø7XdkåÓýjkñÌófžþò õöƺ`;­ó¼+ãÿVž«÷Ý6yn¶ÿˆm?ûiX©zÎ)lŠâ(þ®ÚœžùoýÂÒB?
 endstream
 endobj
-11979 0 obj <<
+11967 0 obj <<
 /Type /Page
-/Contents 11980 0 R
-/Resources 11978 0 R
+/Contents 11968 0 R
+/Resources 11966 0 R
 /MediaBox [0 0 612 792]
-/Parent 11977 0 R
+/Parent 11965 0 R
 >> endobj
-11981 0 obj <<
-/D [11979 0 R /XYZ 100.892 685.529 null]
+11969 0 obj <<
+/D [11967 0 R /XYZ 100.892 685.529 null]
 >> endobj
-11982 0 obj <<
-/D [11979 0 R /XYZ 100.892 395.527 null]
+11970 0 obj <<
+/D [11967 0 R /XYZ 100.892 395.527 null]
 >> endobj
-11983 0 obj <<
-/D [11979 0 R /XYZ 100.892 373.849 null]
+11971 0 obj <<
+/D [11967 0 R /XYZ 100.892 373.849 null]
 >> endobj
-11978 0 obj <<
+11966 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11986 0 obj <<
+11974 0 obj <<
 /Length 1133      
 /Filter /FlateDecode
 >>
@@ -69178,27 +72884,27 @@
 -·?dgF훑4égð¹jŒ:…ðÀÏœY)üIè‘„¾0¤®Õ[^nĉ_¿N~ä¾Â9¶[YÛØevæ×Aç	Þ™³·}B\ Ñ²}{\ÿ@û/üZý5$«H
 endstream
 endobj
-11985 0 obj <<
+11973 0 obj <<
 /Type /Page
-/Contents 11986 0 R
-/Resources 11984 0 R
+/Contents 11974 0 R
+/Resources 11972 0 R
 /MediaBox [0 0 612 792]
-/Parent 11977 0 R
+/Parent 11965 0 R
 >> endobj
-11987 0 obj <<
-/D [11985 0 R /XYZ 151.701 685.529 null]
+11975 0 obj <<
+/D [11973 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3630 0 obj <<
-/D [11985 0 R /XYZ 151.701 230.412 null]
+/D [11973 0 R /XYZ 151.701 230.412 null]
 >> endobj
-11988 0 obj <<
-/D [11985 0 R /XYZ 151.701 202.904 null]
+11976 0 obj <<
+/D [11973 0 R /XYZ 151.701 202.904 null]
 >> endobj
-11984 0 obj <<
+11972 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11992 0 obj <<
+11980 0 obj <<
 /Length 802       
 /Filter /FlateDecode
 >>
@@ -69214,35 +72920,35 @@
 Û›R躡}Â??lTj1
 endstream
 endobj
-11991 0 obj <<
+11979 0 obj <<
 /Type /Page
-/Contents 11992 0 R
-/Resources 11990 0 R
+/Contents 11980 0 R
+/Resources 11978 0 R
 /MediaBox [0 0 612 792]
-/Parent 11977 0 R
-/Annots [ 11989 0 R ]
+/Parent 11965 0 R
+/Annots [ 11977 0 R ]
 >> endobj
-11989 0 obj <<
+11977 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [270.35 302.099 329.918 311.667]
 /Subtype /Link
 /A << /S /GoTo /D (s1-test-ldap-tls) >>
 >> endobj
-11993 0 obj <<
-/D [11991 0 R /XYZ 100.892 685.529 null]
+11981 0 obj <<
+/D [11979 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3634 0 obj <<
-/D [11991 0 R /XYZ 100.892 286.154 null]
+/D [11979 0 R /XYZ 100.892 286.154 null]
 >> endobj
-11994 0 obj <<
-/D [11991 0 R /XYZ 100.892 254.644 null]
+11982 0 obj <<
+/D [11979 0 R /XYZ 100.892 254.644 null]
 >> endobj
-11990 0 obj <<
+11978 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-11997 0 obj <<
+11985 0 obj <<
 /Length 873       
 /Filter /FlateDecode
 >>
@@ -69257,21 +72963,21 @@
 TDRŠë]Ù晟ù(ÁÖ/\M<Âú™©½‡SØÞ–UðàªZ¶~QÌù`¸nLÕØÌÛ|qg«n+¸?R0n:-¨—Aôå±÷æpÌíl}èÿ^˜(rÁ¦ŒžZ^¢^ŸÞË™ÇØûÆ™SÇ­ÖW¿\ωp6¿ÙÛ¬Þ|ä' [S[?ûþ?ú/ÎÍê´<ö‡u»=áävŸÃƒ¶ìå‰Ëíß6mÒÜÔõåw°ÁÆÆrb[Ù-<ðøôö«õúd–NjâãQß9ìèÿGUg¨yú/ýGÛߺ½¹ ÿF—՝)öŸ{;f-†TYÎér”Ù$ó©ò¯MaîüW«ée;)FZ\¶ß Ë·¥jò?ÊÜÎÙ¥CØ>扌V/^¯nΟRWx{¶æª<˜}ñ+<C—ÞòúÊÁrD¤kÎCWmÒŒ»1>Õ¥™àDďMºkÎœ"	í)‰»ö¸B,’„J1éP1ý¢ L2× í¹ßؾ+B¼Ñ¯L†–xèZ®3½û1µ¯GHõ:^E
 endstream
 endobj
-11996 0 obj <<
+11984 0 obj <<
 /Type /Page
-/Contents 11997 0 R
-/Resources 11995 0 R
+/Contents 11985 0 R
+/Resources 11983 0 R
 /MediaBox [0 0 612 792]
-/Parent 11977 0 R
+/Parent 11965 0 R
 >> endobj
-11998 0 obj <<
-/D [11996 0 R /XYZ 151.701 685.529 null]
+11986 0 obj <<
+/D [11984 0 R /XYZ 151.701 685.529 null]
 >> endobj
-11995 0 obj <<
-/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F29 5413 0 R /F30 5441 0 R /F60 6223 0 R /F98 11968 0 R >>
+11983 0 obj <<
+/Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R /F29 5413 0 R /F30 5441 0 R /F60 6222 0 R /F98 11956 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12004 0 obj <<
+11992 0 obj <<
 /Length 1091      
 /Filter /FlateDecode
 >>
@@ -69287,49 +72993,49 @@
 u<µê‰S?Z%rfþÜÒ†Ý×+tü᪶PG¡®zb߁éþRý†{Ô
 endstream
 endobj
-12003 0 obj <<
+11991 0 obj <<
 /Type /Page
-/Contents 12004 0 R
-/Resources 12002 0 R
+/Contents 11992 0 R
+/Resources 11990 0 R
 /MediaBox [0 0 612 792]
-/Parent 11977 0 R
-/Annots [ 11999 0 R 12000 0 R 12001 0 R ]
+/Parent 11965 0 R
+/Annots [ 11987 0 R 11988 0 R 11989 0 R ]
 >> endobj
-11999 0 obj <<
+11987 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [283.411 544.927 342.979 556.617]
 /Subtype /Link
 /A << /S /GoTo /D (s1-int-ldap-tls) >>
 >> endobj
-12000 0 obj <<
+11988 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 451.681 168.586 464.583]
 /Subtype /Link
 /A << /S /GoTo /D (s1-config-ldap-tls-server) >>
 >> endobj
-12001 0 obj <<
+11989 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [99.895 379.888 167.949 389.335]
 /Subtype /Link
 /A << /S /GoTo /D (s1-config-ldap-tls-install) >>
 >> endobj
-12005 0 obj <<
-/D [12003 0 R /XYZ 100.892 685.529 null]
+11993 0 obj <<
+/D [11991 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3638 0 obj <<
-/D [12003 0 R /XYZ 100.892 529.484 null]
+/D [11991 0 R /XYZ 100.892 529.484 null]
 >> endobj
-12006 0 obj <<
-/D [12003 0 R /XYZ 100.892 500.309 null]
+11994 0 obj <<
+/D [11991 0 R /XYZ 100.892 500.309 null]
 >> endobj
-12002 0 obj <<
+11990 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12009 0 obj <<
+11997 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -69337,20 +73043,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-12008 0 obj <<
+11996 0 obj <<
 /Type /Page
-/Contents 12009 0 R
-/Resources 12007 0 R
+/Contents 11997 0 R
+/Resources 11995 0 R
 /MediaBox [0 0 612 792]
-/Parent 12011 0 R
+/Parent 11999 0 R
 >> endobj
-12010 0 obj <<
-/D [12008 0 R /XYZ 151.701 685.529 null]
+11998 0 obj <<
+/D [11996 0 R /XYZ 151.701 685.529 null]
 >> endobj
-12007 0 obj <<
+11995 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-12014 0 obj <<
+12002 0 obj <<
 /Length 1685      
 /Filter /FlateDecode
 >>
@@ -69377,27 +73083,27 @@
 ŸÌÅ ÏÊ`ãJré§ÈÔQ0Œº›¹ƒ>¦UŠ¿Ö8ª­=P2æ]˜Äw…dþwáé«*½üa]Û¤)6üIJøÒ¡Mº¹Rz¹[ý<Dc®
 endstream
 endobj
-12013 0 obj <<
+12001 0 obj <<
 /Type /Page
-/Contents 12014 0 R
-/Resources 12012 0 R
+/Contents 12002 0 R
+/Resources 12000 0 R
 /MediaBox [0 0 612 792]
-/Parent 12011 0 R
+/Parent 11999 0 R
 >> endobj
-12015 0 obj <<
-/D [12013 0 R /XYZ 100.892 685.529 null]
+12003 0 obj <<
+/D [12001 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3642 0 obj <<
-/D [12013 0 R /XYZ 100.892 660.623 null]
+/D [12001 0 R /XYZ 100.892 660.623 null]
 >> endobj
-12016 0 obj <<
-/D [12013 0 R /XYZ 100.892 505.525 null]
+12004 0 obj <<
+/D [12001 0 R /XYZ 100.892 505.525 null]
 >> endobj
-12012 0 obj <<
+12000 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12022 0 obj <<
+12010 0 obj <<
 /Length 2328      
 /Filter /FlateDecode
 >>
@@ -69424,46 +73130,46 @@
 ¡úovaGñ
 endstream
 endobj
-12021 0 obj <<
+12009 0 obj <<
 /Type /Page
-/Contents 12022 0 R
-/Resources 12020 0 R
+/Contents 12010 0 R
+/Resources 12008 0 R
 /MediaBox [0 0 612 792]
-/Parent 12011 0 R
-/Annots [ 12017 0 R 12018 0 R 12019 0 R ]
+/Parent 11999 0 R
+/Annots [ 12005 0 R 12006 0 R 12007 0 R ]
 >> endobj
-12017 0 obj <<
+12005 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 138.879 327.086 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(https://lists.samba.org/mailman/)>>
 >> endobj
-12018 0 obj <<
+12006 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 127.92 341.208 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.samba.org/samba.irc.html)>>
 >> endobj
-12019 0 obj <<
+12007 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 303.55 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(https://bugzilla.samba.org/)>>
 >> endobj
-12023 0 obj <<
-/D [12021 0 R /XYZ 151.701 685.529 null]
+12011 0 obj <<
+/D [12009 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3646 0 obj <<
-/D [12021 0 R /XYZ 151.701 660.623 null]
+/D [12009 0 R /XYZ 151.701 660.623 null]
 >> endobj
-12024 0 obj <<
-/D [12021 0 R /XYZ 151.701 638.691 null]
+12012 0 obj <<
+/D [12009 0 R /XYZ 151.701 638.691 null]
 >> endobj
-12020 0 obj <<
+12008 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F29 5413 0 R /F53 3738 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12028 0 obj <<
+12016 0 obj <<
 /Length 1794      
 /Filter /FlateDecode
 >>
@@ -69488,34 +73194,34 @@
 ú‡±ïnø-®JðF™N¿[ÐÞ~ÁZSnû
 endstream
 endobj
-12027 0 obj <<
+12015 0 obj <<
 /Type /Page
-/Contents 12028 0 R
-/Resources 12026 0 R
+/Contents 12016 0 R
+/Resources 12014 0 R
 /MediaBox [0 0 612 792]
-/Parent 12011 0 R
-/Annots [ 12025 0 R ]
+/Parent 11999 0 R
+/Annots [ 12013 0 R ]
 >> endobj
-12025 0 obj <<
+12013 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [123.651 116.961 309.228 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.samba.org/samba/support.html)>>
 >> endobj
-12029 0 obj <<
-/D [12027 0 R /XYZ 100.892 685.529 null]
+12017 0 obj <<
+/D [12015 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3650 0 obj <<
-/D [12027 0 R /XYZ 100.892 660.623 null]
+/D [12015 0 R /XYZ 100.892 660.623 null]
 >> endobj
-12030 0 obj <<
-/D [12027 0 R /XYZ 100.892 638.691 null]
+12018 0 obj <<
+/D [12015 0 R /XYZ 100.892 638.691 null]
 >> endobj
-12026 0 obj <<
+12014 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R /F51 3736 0 R /F29 5413 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12033 0 obj <<
+12021 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -69523,20 +73229,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-12032 0 obj <<
+12020 0 obj <<
 /Type /Page
-/Contents 12033 0 R
-/Resources 12031 0 R
+/Contents 12021 0 R
+/Resources 12019 0 R
 /MediaBox [0 0 612 792]
-/Parent 12011 0 R
+/Parent 11999 0 R
 >> endobj
-12034 0 obj <<
-/D [12032 0 R /XYZ 151.701 685.529 null]
+12022 0 obj <<
+/D [12020 0 R /XYZ 151.701 685.529 null]
 >> endobj
-12031 0 obj <<
+12019 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-12040 0 obj <<
+12028 0 obj <<
 /Length 1486      
 /Filter /FlateDecode
 >>
@@ -69552,33 +73258,33 @@
 ™pE©äߐBˆ!øgû	fh¬Ò
 endstream
 endobj
-12039 0 obj <<
+12027 0 obj <<
 /Type /Page
-/Contents 12040 0 R
-/Resources 12038 0 R
+/Contents 12028 0 R
+/Resources 12026 0 R
 /MediaBox [0 0 612 792]
-/Parent 12011 0 R
+/Parent 11999 0 R
 >> endobj
-12041 0 obj <<
-/D [12039 0 R /XYZ 100.892 685.529 null]
+12029 0 obj <<
+/D [12027 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3654 0 obj <<
-/D [12039 0 R /XYZ 100.892 660.623 null]
+/D [12027 0 R /XYZ 100.892 660.623 null]
 >> endobj
 3948 0 obj <<
-/D [12039 0 R /XYZ 100.892 475.061 null]
+/D [12027 0 R /XYZ 100.892 475.061 null]
 >> endobj
 3658 0 obj <<
-/D [12039 0 R /XYZ 100.892 475.061 null]
+/D [12027 0 R /XYZ 100.892 475.061 null]
 >> endobj
-12042 0 obj <<
-/D [12039 0 R /XYZ 100.892 445.177 null]
+12030 0 obj <<
+/D [12027 0 R /XYZ 100.892 445.177 null]
 >> endobj
-12038 0 obj <<
+12026 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12045 0 obj <<
+12033 0 obj <<
 /Length 2275      
 /Filter /FlateDecode
 >>
@@ -69607,55 +73313,55 @@
 ±ú,UÕ
 endstream
 endobj
-12044 0 obj <<
+12032 0 obj <<
 /Type /Page
-/Contents 12045 0 R
-/Resources 12043 0 R
+/Contents 12033 0 R
+/Resources 12031 0 R
 /MediaBox [0 0 612 792]
-/Parent 12051 0 R
-/Annots [ 12035 0 R 12036 0 R 12037 0 R ]
+/Parent 12039 0 R
+/Annots [ 12023 0 R 12024 0 R 12025 0 R ]
 >> endobj
-12035 0 obj <<
+12023 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 138.879 261.184 151.83]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.isc.org)>>
 >> endobj
-12036 0 obj <<
+12024 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 127.92 383.573 140.872]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.oreilly.com/catalog/dns/index.htm)>>
 >> endobj
-12037 0 obj <<
+12025 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [174.46 116.961 322.877 129.913]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.bind9.net/books-dhcp)>>
 >> endobj
-12046 0 obj <<
-/D [12044 0 R /XYZ 151.701 685.529 null]
+12034 0 obj <<
+/D [12032 0 R /XYZ 151.701 685.529 null]
 >> endobj
-12047 0 obj <<
-/D [12044 0 R /XYZ 151.701 568.369 null]
+12035 0 obj <<
+/D [12032 0 R /XYZ 151.701 568.369 null]
 >> endobj
-12048 0 obj <<
-/D [12044 0 R /XYZ 151.701 545.223 null]
+12036 0 obj <<
+/D [12032 0 R /XYZ 151.701 545.223 null]
 >> endobj
-12049 0 obj <<
-/D [12044 0 R /XYZ 151.701 524.199 null]
+12037 0 obj <<
+/D [12032 0 R /XYZ 151.701 524.199 null]
 >> endobj
 3662 0 obj <<
-/D [12044 0 R /XYZ 151.701 473.657 null]
+/D [12032 0 R /XYZ 151.701 473.657 null]
 >> endobj
-12050 0 obj <<
-/D [12044 0 R /XYZ 151.701 441.66 null]
+12038 0 obj <<
+/D [12032 0 R /XYZ 151.701 441.66 null]
 >> endobj
-12043 0 obj <<
+12031 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F29 5413 0 R /F17 3698 0 R /F30 5441 0 R /F61 5442 0 R /F71 5443 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12054 0 obj <<
+12042 0 obj <<
 /Length 1357      
 /Filter /FlateDecode
 >>
@@ -69678,27 +73384,27 @@
 ßcͪmVÏÉ Ú.²9]õ}6Ž¦íõÆiÚY½GiÊ`Óõ?ƒùòClÑkð†s±|ŸBzqTúݪùV¶µÔ.å'ÕÙã_‹a…,ÿê{4
 endstream
 endobj
-12053 0 obj <<
+12041 0 obj <<
 /Type /Page
-/Contents 12054 0 R
-/Resources 12052 0 R
+/Contents 12042 0 R
+/Resources 12040 0 R
 /MediaBox [0 0 612 792]
-/Parent 12051 0 R
+/Parent 12039 0 R
 >> endobj
-12055 0 obj <<
-/D [12053 0 R /XYZ 100.892 685.529 null]
+12043 0 obj <<
+/D [12041 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3666 0 obj <<
-/D [12053 0 R /XYZ 100.892 543.123 null]
+/D [12041 0 R /XYZ 100.892 543.123 null]
 >> endobj
-12056 0 obj <<
-/D [12053 0 R /XYZ 100.892 515.937 null]
+12044 0 obj <<
+/D [12041 0 R /XYZ 100.892 515.937 null]
 >> endobj
-12052 0 obj <<
+12040 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12059 0 obj <<
+12047 0 obj <<
 /Length 656       
 /Filter /FlateDecode
 >>
@@ -69714,21 +73420,21 @@
 ŽÁ{5ix9Ãíßø™#‡&ðrrNU_dgž¢RÙ)-/uª\¥ÿE›ñ÷²s–Ü¿ jÂý6øÆô9VbñbPO=R-Gç&åûºô0'ÏDM̯A'{hDÙŒs‰Yy‘ŽUý¹ÍëC_®^|¼y‡’lýVÑ”~È—@œn÷óÝš’–½òúØ]rþ©ïÎßIi
 endstream
 endobj
-12058 0 obj <<
+12046 0 obj <<
 /Type /Page
-/Contents 12059 0 R
-/Resources 12057 0 R
+/Contents 12047 0 R
+/Resources 12045 0 R
 /MediaBox [0 0 612 792]
-/Parent 12051 0 R
+/Parent 12039 0 R
 >> endobj
-12060 0 obj <<
-/D [12058 0 R /XYZ 151.701 685.529 null]
+12048 0 obj <<
+/D [12046 0 R /XYZ 151.701 685.529 null]
 >> endobj
-12057 0 obj <<
+12045 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12063 0 obj <<
+12051 0 obj <<
 /Length 718       
 /Filter /FlateDecode
 >>
@@ -69742,21 +73448,21 @@
 GRg´g¿¼šëü¶ªÜmÁHT„XÑ°¯ÀÍæí¨XÌúM’|q÷M/Æ|q4	"Iÿó¹C;·/IÚ•±Uո܄;X˜ˆ…ÓDŽ:lml¦óݹ»gê¢† +†}’X³°¦¾ƒŠOO¡»î§Àðb4Ël	êË¥“ äd{¦ÈʬXÎö\`òá;¬ŸÞùþ#Úј@:Þ°Ó–~tìâ·:O7gÌÒ&ž;zÚ+¼è.oþý‘»`"õî‚â±[k3¼}Ñq[ü'ËÉWsÜö»ÙÿÃçøþ
 endstream
 endobj
-12062 0 obj <<
+12050 0 obj <<
 /Type /Page
-/Contents 12063 0 R
-/Resources 12061 0 R
+/Contents 12051 0 R
+/Resources 12049 0 R
 /MediaBox [0 0 612 792]
-/Parent 12051 0 R
+/Parent 12039 0 R
 >> endobj
-12064 0 obj <<
-/D [12062 0 R /XYZ 100.892 685.529 null]
+12052 0 obj <<
+/D [12050 0 R /XYZ 100.892 685.529 null]
 >> endobj
-12061 0 obj <<
+12049 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12067 0 obj <<
+12055 0 obj <<
 /Length 687       
 /Filter /FlateDecode
 >>
@@ -69766,21 +73472,21 @@
 yH|VU¯	Bø0Bß6ø"¹¬°=:dªOsA£PX˜d¢­×¦8Ô&Û>žS3š¥…ÎFOK={Miih•b(Si®ƒ«.Nõ§¡,>%ÎFô–ÒÎùåñQ+‹¶ëkßI’¯öZD ÏÔºÐìsR.ÍÜ%¬{°\èùd§«Ak	\ïá˜ZŠÔ<ë)íUÀz˜²\l[q N4Ô< €³HpëÜPŸk“§Ó>=Õ4¢M™Fß=ŸtÉDOv=~*EPáê`æµaÈ{Èš:âúå17zf¥õÏw©lw®ýD:˜[ùúÚŽ#FYÄßT³Þ:l¸£X§?÷–N‘æÛA>î%ÕÆ öGùƒ4÷¦ÌJϏclÎ^Ó$sÊp€TiùcŒDvÛ1|`’v‡qò©rpÇg{§ø¢BÕâD¬V+ôa€²†~óÚéD5úùŸY;̪BuùÌO³ÌÐÔ<¦ÍÂù#+ˆËÿ+èï[Ao“áÉ©£×-í†~+9^Ê
 endstream
 endobj
-12066 0 obj <<
+12054 0 obj <<
 /Type /Page
-/Contents 12067 0 R
-/Resources 12065 0 R
+/Contents 12055 0 R
+/Resources 12053 0 R
 /MediaBox [0 0 612 792]
-/Parent 12051 0 R
+/Parent 12039 0 R
 >> endobj
-12068 0 obj <<
-/D [12066 0 R /XYZ 151.701 685.529 null]
+12056 0 obj <<
+/D [12054 0 R /XYZ 151.701 685.529 null]
 >> endobj
-12065 0 obj <<
+12053 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F53 3738 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12071 0 obj <<
+12059 0 obj <<
 /Length 1171      
 /Filter /FlateDecode
 >>
@@ -69795,27 +73501,27 @@
 ã¡ñNUU¦˜Õ€IjöNj×ÝwfßEESënÎÄ…·¯×j׌Q£Õ £±ž²ÊÓ„ÒYû­zx&Í2žŸˆóÞùüyöºè±;Ñ~†b=ÞÕføFf«è­”¥·ñã&:S‡íû,†ÃîäŸ:¡GK­îÝ‚L?þµÈ2Ârv†K¯ºw럝èΘqûÔOJŸ¥'’Wt1G/„öªzovã›kóÚ•N³Ÿ”þ}ÃVewXGÇÊÎR ´ÛRqHa§¸q\Ø)z=Úù}d´£yy\MÄi&ÌkvåÓ!ýQï—á^GsYÓŒFYâwŒ,¶3øA—‘Ê~¡‚¦mMg-ÝtgÆ$‡W‹I6ÒJõe´¯ûIø2¯Y?¾–‚9óp|ÄŸŠTاõiÞþaqÿnË5£
 endstream
 endobj
-12070 0 obj <<
+12058 0 obj <<
 /Type /Page
-/Contents 12071 0 R
-/Resources 12069 0 R
+/Contents 12059 0 R
+/Resources 12057 0 R
 /MediaBox [0 0 612 792]
-/Parent 12051 0 R
+/Parent 12039 0 R
 >> endobj
-12072 0 obj <<
-/D [12070 0 R /XYZ 100.892 685.529 null]
+12060 0 obj <<
+/D [12058 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3670 0 obj <<
-/D [12070 0 R /XYZ 100.892 525.713 null]
+/D [12058 0 R /XYZ 100.892 525.713 null]
 >> endobj
-6776 0 obj <<
-/D [12070 0 R /XYZ 100.892 500.095 null]
+6775 0 obj <<
+/D [12058 0 R /XYZ 100.892 500.095 null]
 >> endobj
-12069 0 obj <<
+12057 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F53 3738 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12075 0 obj <<
+12063 0 obj <<
 /Length 298       
 /Filter /FlateDecode
 >>
@@ -69824,21 +73530,21 @@
 \ÆɔʠV*à#¬Ø÷¶Iýk[ZíEGµsï{ßgya%ÿÅp?dá½ÄÇû&1d$mP‹Ô3øKJ^¹Î_ÁñØŽ;·õà¯ó»¶KÀý4!¡úÊYmcA~N1u›ž{cB7k·û,p
 endstream
 endobj
-12074 0 obj <<
+12062 0 obj <<
 /Type /Page
-/Contents 12075 0 R
-/Resources 12073 0 R
+/Contents 12063 0 R
+/Resources 12061 0 R
 /MediaBox [0 0 612 792]
-/Parent 12077 0 R
+/Parent 12065 0 R
 >> endobj
-12076 0 obj <<
-/D [12074 0 R /XYZ 151.701 685.529 null]
+12064 0 obj <<
+/D [12062 0 R /XYZ 151.701 685.529 null]
 >> endobj
-12073 0 obj <<
+12061 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12081 0 obj <<
+12069 0 obj <<
 /Length 1480      
 /Filter /FlateDecode
 >>
@@ -69859,37 +73565,37 @@
 jÚ<¶u±³£…lLí¡ì¦$÷zêBíž^9ów8ã)øgLUBDŠÿ·R‘	Á/ã¿a¤®Ù
 endstream
 endobj
-12080 0 obj <<
+12068 0 obj <<
 /Type /Page
-/Contents 12081 0 R
-/Resources 12079 0 R
+/Contents 12069 0 R
+/Resources 12067 0 R
 /MediaBox [0 0 612 792]
-/Parent 12077 0 R
-/Annots [ 12078 0 R ]
+/Parent 12065 0 R
+/Annots [ 12066 0 R ]
 >> endobj
-12078 0 obj <<
+12066 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [351.502 428.721 439.402 440.714]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://fsf.org/)>>
 >> endobj
-12082 0 obj <<
-/D [12080 0 R /XYZ 100.892 685.529 null]
+12070 0 obj <<
+/D [12068 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3674 0 obj <<
-/D [12080 0 R /XYZ 100.892 660.623 null]
+/D [12068 0 R /XYZ 100.892 660.623 null]
 >> endobj
-12083 0 obj <<
-/D [12080 0 R /XYZ 100.892 475.03 null]
+12071 0 obj <<
+/D [12068 0 R /XYZ 100.892 475.03 null]
 >> endobj
-12084 0 obj <<
-/D [12080 0 R /XYZ 100.892 348.168 null]
+12072 0 obj <<
+/D [12068 0 R /XYZ 100.892 348.168 null]
 >> endobj
-12079 0 obj <<
+12067 0 obj <<
 /Font << /F76 5472 0 R /F17 3698 0 R /F15 3700 0 R /F51 3736 0 R /F52 3737 0 R /F53 3738 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12087 0 obj <<
+12075 0 obj <<
 /Length 2167      
 /Filter /FlateDecode
 >>
@@ -69907,24 +73613,24 @@
 5H×ù6ß…;úÞá8Ø~äÎðé¿ÿ~¤WHê}øöQ^+ÿúõÛǯû¯¿~{äo ÃÇËáÿÓ~õ7ñÕo
 endstream
 endobj
-12086 0 obj <<
+12074 0 obj <<
 /Type /Page
-/Contents 12087 0 R
-/Resources 12085 0 R
+/Contents 12075 0 R
+/Resources 12073 0 R
 /MediaBox [0 0 612 792]
-/Parent 12077 0 R
+/Parent 12065 0 R
 >> endobj
-12088 0 obj <<
-/D [12086 0 R /XYZ 151.701 685.529 null]
+12076 0 obj <<
+/D [12074 0 R /XYZ 151.701 685.529 null]
 >> endobj
-12089 0 obj <<
-/D [12086 0 R /XYZ 151.701 146.009 null]
+12077 0 obj <<
+/D [12074 0 R /XYZ 151.701 146.009 null]
 >> endobj
-12085 0 obj <<
+12073 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12092 0 obj <<
+12080 0 obj <<
 /Length 1897      
 /Filter /FlateDecode
 >>
@@ -69952,27 +73658,27 @@
 ÒÓ±ÌJÖ –_%¿³­ÅÝ_Sëý~™ÐS$+x.„KFÅ£þ?A:¥.Ó¯A…Hÿç‡âFzÓÓä.:ÞAÎ*ŠëÎëÄëoÚ›Uü4ngn™˜Â¿v Œ‚A'çÇíÏð††áåO˜LyÃZ?b)svš_;>ýÐßy» ÌjàŠÛXÎY°üäòß·÷‡ :¡)¼
 endstream
 endobj
-12091 0 obj <<
+12079 0 obj <<
 /Type /Page
-/Contents 12092 0 R
-/Resources 12090 0 R
+/Contents 12080 0 R
+/Resources 12078 0 R
 /MediaBox [0 0 612 792]
-/Parent 12077 0 R
+/Parent 12065 0 R
 >> endobj
-12093 0 obj <<
-/D [12091 0 R /XYZ 100.892 685.529 null]
+12081 0 obj <<
+/D [12079 0 R /XYZ 100.892 685.529 null]
 >> endobj
-12094 0 obj <<
-/D [12091 0 R /XYZ 100.892 641.209 null]
+12082 0 obj <<
+/D [12079 0 R /XYZ 100.892 641.209 null]
 >> endobj
-12095 0 obj <<
-/D [12091 0 R /XYZ 100.892 155.709 null]
+12083 0 obj <<
+/D [12079 0 R /XYZ 100.892 155.709 null]
 >> endobj
-12090 0 obj <<
+12078 0 obj <<
 /Font << /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12098 0 obj <<
+12086 0 obj <<
 /Length 2139      
 /Filter /FlateDecode
 >>
@@ -70003,24 +73709,24 @@
 3¦¾!OÀÐ÷÷Åò[XÁ™|u-7[´RD ¥v<"_¦_Œ¯ë¬Èl0(UYòWÍãBXqñ#%ÆR´Áy/™Xê%ˆ`Ÿ‹…Ôp§UÊç ³=³FT`Bp·_F|§¡;Ýgð:’yT¸øT¨ %×ÏxŒ™‘Š8Ð~ÿ²ˆ^IÃÉòÜÔ·¦3¬¾äŠg™I]!¬¤ö˜ë%r¥œ'…òfÃ÷Üñxæ¶3) éÆ}3€±D"ÈÃ1=ÇUÁ5àÈÁeÒTù—orùÊPP<PÏâEñs¨ÿŽéÿß7ÿ×gØ
 endstream
 endobj
-12097 0 obj <<
+12085 0 obj <<
 /Type /Page
-/Contents 12098 0 R
-/Resources 12096 0 R
+/Contents 12086 0 R
+/Resources 12084 0 R
 /MediaBox [0 0 612 792]
-/Parent 12077 0 R
+/Parent 12065 0 R
 >> endobj
-12099 0 obj <<
-/D [12097 0 R /XYZ 151.701 685.529 null]
+12087 0 obj <<
+/D [12085 0 R /XYZ 151.701 685.529 null]
 >> endobj
-12100 0 obj <<
-/D [12097 0 R /XYZ 151.701 183.176 null]
+12088 0 obj <<
+/D [12085 0 R /XYZ 151.701 183.176 null]
 >> endobj
-12096 0 obj <<
+12084 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12103 0 obj <<
+12091 0 obj <<
 /Length 1946      
 /Filter /FlateDecode
 >>
@@ -70050,27 +73756,27 @@
 x„Wƒ
 endstream
 endobj
-12102 0 obj <<
+12090 0 obj <<
 /Type /Page
-/Contents 12103 0 R
-/Resources 12101 0 R
+/Contents 12091 0 R
+/Resources 12089 0 R
 /MediaBox [0 0 612 792]
-/Parent 12077 0 R
+/Parent 12065 0 R
 >> endobj
-12104 0 obj <<
-/D [12102 0 R /XYZ 100.892 685.529 null]
+12092 0 obj <<
+/D [12090 0 R /XYZ 100.892 685.529 null]
 >> endobj
-12105 0 obj <<
-/D [12102 0 R /XYZ 100.892 368.995 null]
+12093 0 obj <<
+/D [12090 0 R /XYZ 100.892 368.995 null]
 >> endobj
-12106 0 obj <<
-/D [12102 0 R /XYZ 100.892 167.104 null]
+12094 0 obj <<
+/D [12090 0 R /XYZ 100.892 167.104 null]
 >> endobj
-12101 0 obj <<
+12089 0 obj <<
 /Font << /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12109 0 obj <<
+12097 0 obj <<
 /Length 2134      
 /Filter /FlateDecode
 >>
@@ -70091,36 +73797,36 @@
 s‚ŒJ_½jå½B†|GYם7||Øü¾6Äþ
 endstream
 endobj
-12108 0 obj <<
+12096 0 obj <<
 /Type /Page
-/Contents 12109 0 R
-/Resources 12107 0 R
+/Contents 12097 0 R
+/Resources 12095 0 R
 /MediaBox [0 0 612 792]
-/Parent 12116 0 R
+/Parent 12104 0 R
 >> endobj
-12110 0 obj <<
-/D [12108 0 R /XYZ 151.701 685.529 null]
+12098 0 obj <<
+/D [12096 0 R /XYZ 151.701 685.529 null]
 >> endobj
-12111 0 obj <<
-/D [12108 0 R /XYZ 151.701 520.78 null]
+12099 0 obj <<
+/D [12096 0 R /XYZ 151.701 520.78 null]
 >> endobj
-12112 0 obj <<
-/D [12108 0 R /XYZ 151.701 472.234 null]
+12100 0 obj <<
+/D [12096 0 R /XYZ 151.701 472.234 null]
 >> endobj
-12113 0 obj <<
-/D [12108 0 R /XYZ 151.701 436.84 null]
+12101 0 obj <<
+/D [12096 0 R /XYZ 151.701 436.84 null]
 >> endobj
-12114 0 obj <<
-/D [12108 0 R /XYZ 151.701 387.896 null]
+12102 0 obj <<
+/D [12096 0 R /XYZ 151.701 387.896 null]
 >> endobj
-12115 0 obj <<
-/D [12108 0 R /XYZ 151.701 298.306 null]
+12103 0 obj <<
+/D [12096 0 R /XYZ 151.701 298.306 null]
 >> endobj
-12107 0 obj <<
+12095 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12119 0 obj <<
+12107 0 obj <<
 /Length 2177      
 /Filter /FlateDecode
 >>
@@ -70141,39 +73847,39 @@
 4ˆêŒå)?Lw~~}ù?û1ö
 endstream
 endobj
-12118 0 obj <<
+12106 0 obj <<
 /Type /Page
-/Contents 12119 0 R
-/Resources 12117 0 R
+/Contents 12107 0 R
+/Resources 12105 0 R
 /MediaBox [0 0 612 792]
-/Parent 12116 0 R
+/Parent 12104 0 R
 >> endobj
-12120 0 obj <<
-/D [12118 0 R /XYZ 100.892 685.529 null]
+12108 0 obj <<
+/D [12106 0 R /XYZ 100.892 685.529 null]
 >> endobj
-12121 0 obj <<
-/D [12118 0 R /XYZ 100.892 638.691 null]
+12109 0 obj <<
+/D [12106 0 R /XYZ 100.892 638.691 null]
 >> endobj
-12122 0 obj <<
-/D [12118 0 R /XYZ 100.892 588.559 null]
+12110 0 obj <<
+/D [12106 0 R /XYZ 100.892 588.559 null]
 >> endobj
-12123 0 obj <<
-/D [12118 0 R /XYZ 100.892 524.48 null]
+12111 0 obj <<
+/D [12106 0 R /XYZ 100.892 524.48 null]
 >> endobj
-12124 0 obj <<
-/D [12118 0 R /XYZ 100.892 379.106 null]
+12112 0 obj <<
+/D [12106 0 R /XYZ 100.892 379.106 null]
 >> endobj
-12125 0 obj <<
-/D [12118 0 R /XYZ 100.892 315.027 null]
+12113 0 obj <<
+/D [12106 0 R /XYZ 100.892 315.027 null]
 >> endobj
-12126 0 obj <<
-/D [12118 0 R /XYZ 100.892 156.104 null]
+12114 0 obj <<
+/D [12106 0 R /XYZ 100.892 156.104 null]
 >> endobj
-12117 0 obj <<
+12105 0 obj <<
 /Font << /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12129 0 obj <<
+12117 0 obj <<
 /Length 2374      
 /Filter /FlateDecode
 >>
@@ -70193,21 +73899,21 @@
 ߤ&†ŠåÅUë†ïV|¦{/RÁû¢þžpò¡šS:–µé$¼ß¾Cª€D‹_F\´„¢J#sêBkhŒD¯¾ãÖI•qv¡ŒÞ µô!N’0&¥¯¿Í€ãïîcÿî.Äßþ{¿}|ø?šÕ¥£
 endstream
 endobj
-12128 0 obj <<
+12116 0 obj <<
 /Type /Page
-/Contents 12129 0 R
-/Resources 12127 0 R
+/Contents 12117 0 R
+/Resources 12115 0 R
 /MediaBox [0 0 612 792]
-/Parent 12116 0 R
+/Parent 12104 0 R
 >> endobj
-12130 0 obj <<
-/D [12128 0 R /XYZ 151.701 685.529 null]
+12118 0 obj <<
+/D [12116 0 R /XYZ 151.701 685.529 null]
 >> endobj
-12127 0 obj <<
+12115 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12133 0 obj <<
+12121 0 obj <<
 /Length 1912      
 /Filter /FlateDecode
 >>
@@ -70227,33 +73933,33 @@
 EW‰)iô“‰y?OFB~´Ãµ•[åŸð+éì^æ¨)à!TÉ#ÖvŒ)dvüNÿÁKIŒ„/^’?Wš5/¡;ÛƒPS¨ÆìàŒwÖòÑŒ!vV¨´I€ûí1¡GÍ4è1$M³¼¯³cÉ°´ŸP׺x"LB6¼“"	i$¤øÉ®„*H¼sáÿÎ=/­àÞ½ ðCîU\áûV餝d*)¤¹N…pùº	Ìz¸ÅìVqÕ3X^(7g§Z¿yáûÃóæ¿)!MS
 endstream
 endobj
-12132 0 obj <<
+12120 0 obj <<
 /Type /Page
-/Contents 12133 0 R
-/Resources 12131 0 R
+/Contents 12121 0 R
+/Resources 12119 0 R
 /MediaBox [0 0 612 792]
-/Parent 12116 0 R
+/Parent 12104 0 R
 >> endobj
-12134 0 obj <<
-/D [12132 0 R /XYZ 100.892 685.529 null]
+12122 0 obj <<
+/D [12120 0 R /XYZ 100.892 685.529 null]
 >> endobj
-12135 0 obj <<
-/D [12132 0 R /XYZ 100.892 509.749 null]
+12123 0 obj <<
+/D [12120 0 R /XYZ 100.892 509.749 null]
 >> endobj
-12136 0 obj <<
-/D [12132 0 R /XYZ 100.892 251.798 null]
+12124 0 obj <<
+/D [12120 0 R /XYZ 100.892 251.798 null]
 >> endobj
-12137 0 obj <<
-/D [12132 0 R /XYZ 100.892 217.01 null]
+12125 0 obj <<
+/D [12120 0 R /XYZ 100.892 217.01 null]
 >> endobj
-12138 0 obj <<
-/D [12132 0 R /XYZ 100.892 168.067 null]
+12126 0 obj <<
+/D [12120 0 R /XYZ 100.892 168.067 null]
 >> endobj
-12131 0 obj <<
+12119 0 obj <<
 /Font << /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12141 0 obj <<
+12129 0 obj <<
 /Length 2091      
 /Filter /FlateDecode
 >>
@@ -70273,33 +73979,33 @@
 …:wçlßÞ¹gï,<+ÓÏòÛ;§fKU®ö\òJºãï‡,½2Þ˜ÿõáэ×4ìp3¦¿µà±(CàÕ7ΑD°[Æ2.rŸ×¸:/ÚÞý=ƒçoÝàÆß?þ)a´
 endstream
 endobj
-12140 0 obj <<
+12128 0 obj <<
 /Type /Page
-/Contents 12141 0 R
-/Resources 12139 0 R
+/Contents 12129 0 R
+/Resources 12127 0 R
 /MediaBox [0 0 612 792]
-/Parent 12116 0 R
+/Parent 12104 0 R
 >> endobj
-12142 0 obj <<
-/D [12140 0 R /XYZ 151.701 685.529 null]
+12130 0 obj <<
+/D [12128 0 R /XYZ 151.701 685.529 null]
 >> endobj
-12143 0 obj <<
-/D [12140 0 R /XYZ 151.701 660.623 null]
+12131 0 obj <<
+/D [12128 0 R /XYZ 151.701 660.623 null]
 >> endobj
-12144 0 obj <<
-/D [12140 0 R /XYZ 151.701 633.993 null]
+12132 0 obj <<
+/D [12128 0 R /XYZ 151.701 633.993 null]
 >> endobj
-12145 0 obj <<
-/D [12140 0 R /XYZ 151.701 598.599 null]
+12133 0 obj <<
+/D [12128 0 R /XYZ 151.701 598.599 null]
 >> endobj
-12146 0 obj <<
-/D [12140 0 R /XYZ 151.701 273.328 null]
+12134 0 obj <<
+/D [12128 0 R /XYZ 151.701 273.328 null]
 >> endobj
-12139 0 obj <<
+12127 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12149 0 obj <<
+12137 0 obj <<
 /Length 1945      
 /Filter /FlateDecode
 >>
@@ -70320,27 +74026,27 @@
 ßÉçΏ”SP¯œˆAש	3Š›øƒ½¤ˆ½,(¸¦±ð*BÅ—ùÏåLPý;¸C ,ÿ"@þÑRÅþ±˜X+£jGã#ïL܃JBÓ¾âØÁ¡wLgøÉ.0›ÿŒá¡™ƒò”güW\ø#Ë•ÿ°Úë>Ö’Hš°û!|ã©áÏ!TÒi&¬ózø/´o7³ÿy
 endstream
 endobj
-12148 0 obj <<
+12136 0 obj <<
 /Type /Page
-/Contents 12149 0 R
-/Resources 12147 0 R
+/Contents 12137 0 R
+/Resources 12135 0 R
 /MediaBox [0 0 612 792]
-/Parent 12116 0 R
+/Parent 12104 0 R
 >> endobj
-12150 0 obj <<
-/D [12148 0 R /XYZ 100.892 685.529 null]
+12138 0 obj <<
+/D [12136 0 R /XYZ 100.892 685.529 null]
 >> endobj
-12151 0 obj <<
-/D [12148 0 R /XYZ 100.892 473.947 null]
+12139 0 obj <<
+/D [12136 0 R /XYZ 100.892 473.947 null]
 >> endobj
-12152 0 obj <<
-/D [12148 0 R /XYZ 100.892 300.748 null]
+12140 0 obj <<
+/D [12136 0 R /XYZ 100.892 300.748 null]
 >> endobj
-12147 0 obj <<
+12135 0 obj <<
 /Font << /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12155 0 obj <<
+12143 0 obj <<
 /Length 2162      
 /Filter /FlateDecode
 >>
@@ -70365,24 +74071,24 @@
 £
 endstream
 endobj
-12154 0 obj <<
+12142 0 obj <<
 /Type /Page
-/Contents 12155 0 R
-/Resources 12153 0 R
+/Contents 12143 0 R
+/Resources 12141 0 R
 /MediaBox [0 0 612 792]
-/Parent 12158 0 R
+/Parent 12146 0 R
 >> endobj
-12156 0 obj <<
-/D [12154 0 R /XYZ 151.701 685.529 null]
+12144 0 obj <<
+/D [12142 0 R /XYZ 151.701 685.529 null]
 >> endobj
-12157 0 obj <<
-/D [12154 0 R /XYZ 151.701 522.265 null]
+12145 0 obj <<
+/D [12142 0 R /XYZ 151.701 522.265 null]
 >> endobj
-12153 0 obj <<
+12141 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12161 0 obj <<
+12149 0 obj <<
 /Length 2259      
 /Filter /FlateDecode
 >>
@@ -70418,24 +74124,24 @@
 $0!ËËžÇöhFÖ¶ÿ'œÅgMrÎR€.DoRÝ­¥.ºìêiPp„ÈðQÂ3Xgݵò`$WÖ"x†AÛêZø˶6VîíZç.ÿÅ»ïÏOÿ ›yeÎ
 endstream
 endobj
-12160 0 obj <<
+12148 0 obj <<
 /Type /Page
-/Contents 12161 0 R
-/Resources 12159 0 R
+/Contents 12149 0 R
+/Resources 12147 0 R
 /MediaBox [0 0 612 792]
-/Parent 12158 0 R
+/Parent 12146 0 R
 >> endobj
-12162 0 obj <<
-/D [12160 0 R /XYZ 100.892 685.529 null]
+12150 0 obj <<
+/D [12148 0 R /XYZ 100.892 685.529 null]
 >> endobj
-12163 0 obj <<
-/D [12160 0 R /XYZ 100.892 210.535 null]
+12151 0 obj <<
+/D [12148 0 R /XYZ 100.892 210.535 null]
 >> endobj
-12159 0 obj <<
+12147 0 obj <<
 /Font << /F50 3701 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12166 0 obj <<
+12154 0 obj <<
 /Length 1883      
 /Filter /FlateDecode
 >>
@@ -70464,27 +74170,27 @@
 ü÷†\nñ\Üða´.-mùÀ¼˜à/tÙïëÃî?œ°E²
 endstream
 endobj
-12165 0 obj <<
+12153 0 obj <<
 /Type /Page
-/Contents 12166 0 R
-/Resources 12164 0 R
+/Contents 12154 0 R
+/Resources 12152 0 R
 /MediaBox [0 0 612 792]
-/Parent 12158 0 R
+/Parent 12146 0 R
 >> endobj
-12167 0 obj <<
-/D [12165 0 R /XYZ 151.701 685.529 null]
+12155 0 obj <<
+/D [12153 0 R /XYZ 151.701 685.529 null]
 >> endobj
-12168 0 obj <<
-/D [12165 0 R /XYZ 151.701 566.376 null]
+12156 0 obj <<
+/D [12153 0 R /XYZ 151.701 566.376 null]
 >> endobj
-12169 0 obj <<
-/D [12165 0 R /XYZ 151.701 405.301 null]
+12157 0 obj <<
+/D [12153 0 R /XYZ 151.701 405.301 null]
 >> endobj
-12164 0 obj <<
+12152 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F17 3698 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12172 0 obj <<
+12160 0 obj <<
 /Length 1684      
 /Filter /FlateDecode
 >>
@@ -70501,33 +74207,33 @@
 ?HWц¢«ê\߁x–w,8_7­©j‹Éœê¿gøtÈ	†$Æÿ~É\àç£üØ8ý}?®¼ýè³â›
 endstream
 endobj
-12171 0 obj <<
+12159 0 obj <<
 /Type /Page
-/Contents 12172 0 R
-/Resources 12170 0 R
+/Contents 12160 0 R
+/Resources 12158 0 R
 /MediaBox [0 0 612 792]
-/Parent 12158 0 R
+/Parent 12146 0 R
 >> endobj
-12173 0 obj <<
-/D [12171 0 R /XYZ 100.892 685.529 null]
+12161 0 obj <<
+/D [12159 0 R /XYZ 100.892 685.529 null]
 >> endobj
-12174 0 obj <<
-/D [12171 0 R /XYZ 100.892 638.691 null]
+12162 0 obj <<
+/D [12159 0 R /XYZ 100.892 638.691 null]
 >> endobj
-12175 0 obj <<
-/D [12171 0 R /XYZ 100.892 436.447 null]
+12163 0 obj <<
+/D [12159 0 R /XYZ 100.892 436.447 null]
 >> endobj
-12176 0 obj <<
-/D [12171 0 R /XYZ 100.892 220.653 null]
+12164 0 obj <<
+/D [12159 0 R /XYZ 100.892 220.653 null]
 >> endobj
-12177 0 obj <<
-/D [12171 0 R /XYZ 100.892 139.726 null]
+12165 0 obj <<
+/D [12159 0 R /XYZ 100.892 139.726 null]
 >> endobj
-12170 0 obj <<
+12158 0 obj <<
 /Font << /F50 3701 0 R /F17 3698 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12180 0 obj <<
+12168 0 obj <<
 /Length 1644      
 /Filter /FlateDecode
 >>
@@ -70549,24 +74255,24 @@
 Äú¢þ;Ãþa×ëiç/Ý6¡^
 endstream
 endobj
-12179 0 obj <<
+12167 0 obj <<
 /Type /Page
-/Contents 12180 0 R
-/Resources 12178 0 R
+/Contents 12168 0 R
+/Resources 12166 0 R
 /MediaBox [0 0 612 792]
-/Parent 12158 0 R
+/Parent 12146 0 R
 >> endobj
-12181 0 obj <<
-/D [12179 0 R /XYZ 151.701 685.529 null]
+12169 0 obj <<
+/D [12167 0 R /XYZ 151.701 685.529 null]
 >> endobj
 3678 0 obj <<
-/D [12179 0 R /XYZ 151.701 638.691 null]
+/D [12167 0 R /XYZ 151.701 638.691 null]
 >> endobj
-12178 0 obj <<
+12166 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F17 3698 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12186 0 obj <<
+12174 0 obj <<
 /Length 1018      
 /Filter /FlateDecode
 >>
@@ -70577,40 +74283,40 @@
 „°múÊ:ò±^´?’ýuv0>àgs*ÀR"~°¤!?BgôˆðZlèîh;¾cï„	ÇD»@n §ÓÓªhñ§Œ	ìazM¦Ö¼¸€ß‡{õ]&¯Ô)š~P$eïM­]èBèF€8HÀ_‡SKòÚÐJdŽnqoMÿõÒ1ú&„£1nªyJîrõdÆg¥HárŸç1ÅÜ&rÁn ´¬S£F’^o™Ä[ªü0µ´Ö‡'O‰›oòÜ@xB˜›‚FÝoîWøšñ”àOR‘zA$*¦÷£V5)óG‘Ëp‰+_$,goO#9À')u~DžJ°ßðÂZÑ·Ƽ3ø2q&ÓeÆ~tði$¥ä1åí+ÝrÂИÖz;4çíÔœ7PTÎz5ÁHnC7c×þ/g$)V[þ g\Â-+üüüVG]o
 endstream
 endobj
-12185 0 obj <<
+12173 0 obj <<
 /Type /Page
-/Contents 12186 0 R
-/Resources 12184 0 R
+/Contents 12174 0 R
+/Resources 12172 0 R
 /MediaBox [0 0 612 792]
-/Parent 12158 0 R
-/Annots [ 12182 0 R 12183 0 R 12188 0 R ]
+/Parent 12146 0 R
+/Annots [ 12170 0 R 12171 0 R 12176 0 R ]
 >> endobj
-12182 0 obj <<
+12170 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [108.38 558.173 270.735 570.166]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.gnu.org/licenses/)>>
 >> endobj
-12183 0 obj <<
+12171 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [429.914 483.653 460.543 495.645]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.gnu.org/philosophy/why-not-lgpl.html)>>
 >> endobj
-12188 0 obj <<
+12176 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [99.895 470.104 343.427 482.096]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.gnu.org/philosophy/why-not-lgpl.html)>>
 >> endobj
-12187 0 obj <<
-/D [12185 0 R /XYZ 100.892 685.529 null]
+12175 0 obj <<
+/D [12173 0 R /XYZ 100.892 685.529 null]
 >> endobj
-12184 0 obj <<
+12172 0 obj <<
 /Font << /F50 3701 0 R /F15 3700 0 R /F52 3737 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12191 0 obj <<
+12179 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -70618,20 +74324,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-12190 0 obj <<
+12178 0 obj <<
 /Type /Page
-/Contents 12191 0 R
-/Resources 12189 0 R
+/Contents 12179 0 R
+/Resources 12177 0 R
 /MediaBox [0 0 612 792]
-/Parent 12193 0 R
+/Parent 12181 0 R
 >> endobj
-12192 0 obj <<
-/D [12190 0 R /XYZ 151.701 685.529 null]
+12180 0 obj <<
+/D [12178 0 R /XYZ 151.701 685.529 null]
 >> endobj
-12189 0 obj <<
+12177 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-12199 0 obj <<
+12187 0 obj <<
 /Length 1688      
 /Filter /FlateDecode
 >>
@@ -70652,48 +74358,48 @@
 ?†¸ŠõÁ>¦ä#,ÎIWó§ÿ;C}×XƒÔŽ6bíú¶´ux4oŒJ€$†;öŠgöÎ};þî<uôB”zĨv›û¯arInÁéØ4®ðÆŸ³>ˆÍs+Þg¬óºÔÖ1Ö;Ýò&pÖ)Ä(kÓrýÄXH!^DSçü.?ïì‡×*T”yÎ@ÆŠw¥±ÚÛôëÍÑx¿ˆÂ
 endstream
 endobj
-12198 0 obj <<
+12186 0 obj <<
 /Type /Page
-/Contents 12199 0 R
-/Resources 12197 0 R
+/Contents 12187 0 R
+/Resources 12185 0 R
 /MediaBox [0 0 612 792]
-/Parent 12193 0 R
-/Annots [ 12194 0 R 12202 0 R 12195 0 R ]
+/Parent 12181 0 R
+/Annots [ 12182 0 R 12190 0 R 12183 0 R ]
 >> endobj
-12194 0 obj <<
+12182 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [320.647 519.409 460.543 531.098]
 /Subtype /Link
 /A << /S /GoTo /D (AccessControls) >>
 >> endobj
-12202 0 obj <<
+12190 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [127.168 505.859 261.524 517.549]
 /Subtype /Link
 /A << /S /GoTo /D (AccessControls) >>
 >> endobj
-12195 0 obj <<
+12183 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[0 1 1]
 /Rect [202.363 196.442 330.354 208.435]
 /Subtype/Link/A<</Type/Action/S/URI/URI(http://www.easysw.com/)>>
 >> endobj
-12200 0 obj <<
-/D [12198 0 R /XYZ 100.892 685.529 null]
+12188 0 obj <<
+/D [12186 0 R /XYZ 100.892 685.529 null]
 >> endobj
 3682 0 obj <<
-/D [12198 0 R /XYZ 100.892 584.917 null]
+/D [12186 0 R /XYZ 100.892 584.917 null]
 >> endobj
-12201 0 obj <<
-/D [12198 0 R /XYZ 100.892 584.917 null]
+12189 0 obj <<
+/D [12186 0 R /XYZ 100.892 584.917 null]
 >> endobj
-12197 0 obj <<
+12185 0 obj <<
 /Font << /F17 3698 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R /F52 3737 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12206 0 obj <<
+12194 0 obj <<
 /Length 1830      
 /Filter /FlateDecode
 >>
@@ -70713,36 +74419,36 @@
 ’nkô4 2:„(ÕV³Éz|qi³5â»àæçB2£dÉ¥Le1»ã¨õž=–îô{¤ÀÏ}$‰ÿóH}(УŽ`?W|RjÆ÷Ÿ ¦O{ ]]ÏO~’8Â}ò>â§xè*xÔ>BÑÃþ"ôl|¡BvØò¬ècÂÜç•€(ØØ”9½×Qzîvrs©*î5¸aIŸ­ŠŽyw5V} ÂgxªµÒ/85H¹t*~kõÀXâ)kßò$5<Ã4>Ç}YYce"d‹àZ—yÚ#M‡iñF½oâjVüÐBô+»Ø˜`„!mPÐïƒÜîÀ€þ	ÌJÅbˆiÆÙ´5ÛLuº)"YÙ˜ŸyÔáLãŽàÇ~O@…áI¨½^,NJ×B:2yÒÒõÅò’#ºí )V²|zø·ãYË5oL|èwè3Ï?,L³Åïjú¥3>ñ4PŒuzJxK¯n¬‹øL-V»Žªcÿ¾:W½C¾oëÀuÄhƲõÛùùÛz8¹ÿ^,'ÿ]i.’
 endstream
 endobj
-12205 0 obj <<
+12193 0 obj <<
 /Type /Page
-/Contents 12206 0 R
-/Resources 12204 0 R
+/Contents 12194 0 R
+/Resources 12192 0 R
 /MediaBox [0 0 612 792]
-/Parent 12193 0 R
-/Annots [ 12196 0 R 12203 0 R ]
+/Parent 12181 0 R
+/Annots [ 12184 0 R 12191 0 R ]
 >> endobj
-12196 0 obj <<
+12184 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.978 621.569 246.031 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (DMB) >>
 >> endobj
-12203 0 obj <<
+12191 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.372 261.994 265.425 271.563]
 /Subtype /Link
 /A << /S /GoTo /D (gdipost) >>
 >> endobj
-12207 0 obj <<
-/D [12205 0 R /XYZ 151.701 685.529 null]
+12195 0 obj <<
+/D [12193 0 R /XYZ 151.701 685.529 null]
 >> endobj
-12204 0 obj <<
+12192 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12211 0 obj <<
+12199 0 obj <<
 /Length 1911      
 /Filter /FlateDecode
 >>
@@ -70759,29 +74465,29 @@
 ¸ÂòH§ëFÝ ©pföœ’¬Cã$°1tæýÕÄ·òmJ|{¶ñy¿™ý¦åH"
 endstream
 endobj
-12210 0 obj <<
+12198 0 obj <<
 /Type /Page
-/Contents 12211 0 R
-/Resources 12209 0 R
+/Contents 12199 0 R
+/Resources 12197 0 R
 /MediaBox [0 0 612 792]
-/Parent 12193 0 R
-/Annots [ 12208 0 R ]
+/Parent 12181 0 R
+/Annots [ 12196 0 R ]
 >> endobj
-12208 0 obj <<
+12196 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [326.229 313.623 394.282 325.313]
 /Subtype /Link
 /A << /S /GoTo /D (DMB) >>
 >> endobj
-12212 0 obj <<
-/D [12210 0 R /XYZ 100.892 685.529 null]
+12200 0 obj <<
+/D [12198 0 R /XYZ 100.892 685.529 null]
 >> endobj
-12209 0 obj <<
+12197 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12216 0 obj <<
+12204 0 obj <<
 /Length 2057      
 /Filter /FlateDecode
 >>
@@ -70807,29 +74513,29 @@
 u=%m³ªiåh²,©Ã1µ =@}Kx¶Ú%gKeRò;Ù¸æWÐÃ$¬2‹‹Þ|¬ƒqü²g…ï^ð¬0<~¼¿ú²µ
 endstream
 endobj
-12215 0 obj <<
+12203 0 obj <<
 /Type /Page
-/Contents 12216 0 R
-/Resources 12214 0 R
+/Contents 12204 0 R
+/Resources 12202 0 R
 /MediaBox [0 0 612 792]
-/Parent 12193 0 R
-/Annots [ 12213 0 R ]
+/Parent 12181 0 R
+/Annots [ 12201 0 R ]
 >> endobj
-12213 0 obj <<
+12201 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [409.013 574.284 477.873 585.973]
 /Subtype /Link
 /A << /S /GoTo /D (post-and-ghost) >>
 >> endobj
-12217 0 obj <<
-/D [12215 0 R /XYZ 151.701 685.529 null]
+12205 0 obj <<
+/D [12203 0 R /XYZ 151.701 685.529 null]
 >> endobj
-12214 0 obj <<
+12202 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F53 3738 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12220 0 obj <<
+12208 0 obj <<
 /Length 397       
 /Filter /FlateDecode
 >>
@@ -70841,21 +74547,21 @@
 ù¾\Mjÿ&CeW“Ãfëp=¸š¢†¤º¾+[\‡¬W,Mÿn;¿>&ô£÷£Ÿ¥WQjZØÎç_´{þÝ	¿êÚ>©j
 endstream
 endobj
-12219 0 obj <<
+12207 0 obj <<
 /Type /Page
-/Contents 12220 0 R
-/Resources 12218 0 R
+/Contents 12208 0 R
+/Resources 12206 0 R
 /MediaBox [0 0 612 792]
-/Parent 12193 0 R
+/Parent 12181 0 R
 >> endobj
-12221 0 obj <<
-/D [12219 0 R /XYZ 100.892 685.529 null]
+12209 0 obj <<
+/D [12207 0 R /XYZ 100.892 685.529 null]
 >> endobj
-12218 0 obj <<
+12206 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12224 0 obj <<
+12212 0 obj <<
 /Length 19        
 /Filter /FlateDecode
 >>
@@ -70863,20 +74569,20 @@
 xÚ3PHW0Ppç2ÀA c(á
 endstream
 endobj
-12223 0 obj <<
+12211 0 obj <<
 /Type /Page
-/Contents 12224 0 R
-/Resources 12222 0 R
+/Contents 12212 0 R
+/Resources 12210 0 R
 /MediaBox [0 0 612 792]
-/Parent 12226 0 R
+/Parent 12214 0 R
 >> endobj
-12225 0 obj <<
-/D [12223 0 R /XYZ 151.701 685.529 null]
+12213 0 obj <<
+/D [12211 0 R /XYZ 151.701 685.529 null]
 >> endobj
-12222 0 obj <<
+12210 0 obj <<
 /ProcSet [ /PDF ]
 >> endobj
-12360 0 obj <<
+12348 0 obj <<
 /Length 1333      
 /Filter /FlateDecode
 >>
@@ -70891,1647 +74597,1650 @@
 1™@Ü,çþ†•ÚSø¹:ž‡7”Ÿï®í q:ÞÖÍfþ~š©ñ#øûcÏ@+Çž®ù\íˆã¸øë<Y¤US¿4†Æ5†ûÞní冠ö¼ç—g7/ I“æîÓy8Ï»0Šª	ŒGl¸ òlÞþ¸Y¨³»º;xÆ…!ÀtÄ(#†ŠÁW`„i~ôì̓.ÁÝ`;,å°:ïéól]æ)©\?7•œ8±8#0–0ñ>!´XT컍ý–óBP8-ÚVÙnâþ£ôpûìÙO¡es -ó@Ÿ«ù0J³öŸ†Uw[WÝË¢×!ÍUy€€ö>"H®%=Ü_œPí¶Æ]ß¿f5GOy]výfÄĈ
 endstream
 endobj
-12359 0 obj <<
+12347 0 obj <<
 /Type /Page
-/Contents 12360 0 R
-/Resources 12358 0 R
+/Contents 12348 0 R
+/Resources 12346 0 R
 /MediaBox [0 0 612 792]
-/Parent 12226 0 R
-/Annots [ 12227 0 R 12228 0 R 12229 0 R 12230 0 R 12231 0 R 12232 0 R 12233 0 R 12234 0 R 12235 0 R 12236 0 R 12237 0 R 12238 0 R 12239 0 R 12240 0 R 12241 0 R 12242 0 R 12243 0 R 12244 0 R 12245 0 R 12246 0 R 12247 0 R 12248 0 R 12249 0 R 12250 0 R 12251 0 R 12252 0 R 12253 0 R 12254 0 R 12255 0 R 12256 0 R 12257 0 R 12258 0 R 12259 0 R 12260 0 R 12261 0 R 12262 0 R 12263 0 R 12264 0 R 12265 0 R 12266 0 R 12267 0 R 12268 0 R 12269 0 R 12270 0 R 12271 0 R 12272 0 R 12273 0 R 12274 0 R 12275 0 R 12276 0 R 12277 0 R 12278 0 R 12279 0 R 12280 0 R 12281 0 R 12282 0 R 12283 0 R 12284 0 R 12285 0 R 12286 0 R 12287 0 R 12288 0 R 12289 0 R 12290 0 R 12291 0 R 12292 0 R 12293 0 R 12294 0 R 12295 0 R 12296 0 R 12297 0 R 12298 0 R 12299 0 R 12300 0 R 12301 0 R 12302 0 R 12303 0 R 12304 0 R 12305 0 R 12306 0 R 12307 0 R 12308 0 R 12309 0 R 12310 0 R 12311 0 R 12312 0 R 12313 0 R 12314 0 R 12315 0 R 12316 0 R 12317 0 R 12318 0 R 12319 0 R 12320 0 R 12321 0 R 12322 0 R 12323 0 R 12324 0 R 12325 0 R 12326 0 R 12327 0 R 12328 0 R 12329 0 R 12330 0 R 12331 0 R 12332 0 R 12333 0 R 12334 0 R 12335 0 R 12336 0 R 12337 0 R 12338 0 R 12339 0 R 12340 0 R 12341 0 R 12342 0 R 12343 0 R 12344 0 R 12345 0 R 12346 0 R 12347 0 R 12348 0 R 12349 0 R 12350 0 R 12351 0 R 12352 0 R 12353 0 R 12354 0 R 12355 0 R 12356 0 R ]
+/Parent 12214 0 R
+/Annots [ 12215 0 R 12216 0 R 12217 0 R 12218 0 R 12219 0 R 12220 0 R 12221 0 R 12222 0 R 12223 0 R 12224 0 R 12225 0 R 12226 0 R 12227 0 R 12228 0 R 12229 0 R 12230 0 R 12231 0 R 12232 0 R 12233 0 R 12234 0 R 12235 0 R 12236 0 R 12237 0 R 12238 0 R 12239 0 R 12240 0 R 12241 0 R 12242 0 R 12243 0 R 12244 0 R 12245 0 R 12246 0 R 12247 0 R 12248 0 R 12249 0 R 12250 0 R 12251 0 R 12252 0 R 12253 0 R 12254 0 R 12255 0 R 12256 0 R 12257 0 R 12258 0 R 12259 0 R 12260 0 R 12261 0 R 12262 0 R 12263 0 R 12264 0 R 12265 0 R 12266 0 R 12267 0 R 12268 0 R 12269 0 R 12270 0 R 12271 0 R 12272 0 R 12273 0 R 12274 0 R 12275 0 R 12276 0 R 12277 0 R 12278 0 R 12279 0 R 12280 0 R 12281 0 R 12282 0 R 12283 0 R 12284 0 R 12285 0 R 12286 0 R 12287 0 R 12288 0 R 12289 0 R 12290 0 R 12291 0 R 12292 0 R 12293 0 R 12294 0 R 12295 0 R 12296 0 R 12297 0 R 12298 0 R 12299 0 R 12300 0 R 12301 0 R 12302 0 R 12303 0 R 12304 0 R 12305 0 R 12306 0 R 12307 0 R 12308 0 R 12309 0 R 12310 0 R 12311 0 R 12312 0 R 12313 0 R 12314 0 R 12315 0 R 12316 0 R 12317 0 R 12318 0 R 12319 0 R 12320 0 R 12321 0 R 12322 0 R 12323 0 R 12324 0 R 12325 0 R 12326 0 R 12327 0 R 12328 0 R 12329 0 R 12330 0 R 12331 0 R 12332 0 R 12333 0 R 12334 0 R 12335 0 R 12336 0 R 12337 0 R 12338 0 R 12339 0 R 12340 0 R 12341 0 R 12342 0 R 12343 0 R 12344 0 R ]
 >> endobj
-12227 0 obj <<
+12215 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [186.259 592.671 204.615 604.36]
 /Subtype /Link
 /A << /S /GoTo /D (page.499) >>
 >> endobj
-12228 0 obj <<
+12216 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [209.289 592.671 227.646 604.36]
 /Subtype /Link
 /A << /S /GoTo /D (page.507) >>
 >> endobj
-12229 0 obj <<
+12217 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.32 592.671 250.676 604.36]
 /Subtype /Link
 /A << /S /GoTo /D (page.518) >>
 >> endobj
-12230 0 obj <<
+12218 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.744 578.053 212.1 590.955]
 /Subtype /Link
 /A << /S /GoTo /D (page.586) >>
 >> endobj
-12231 0 obj <<
+12219 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.562 564.647 189.918 576.337]
 /Subtype /Link
 /A << /S /GoTo /D (page.558) >>
 >> endobj
-12232 0 obj <<
+12220 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [179.653 550.636 198.009 562.204]
 /Subtype /Link
 /A << /S /GoTo /D (page.620) >>
 >> endobj
-12233 0 obj <<
+12221 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [118.077 536.624 136.433 548.024]
 /Subtype /Link
 /A << /S /GoTo /D (page.465) >>
 >> endobj
-12234 0 obj <<
+12222 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [124.804 522.613 143.161 533.757]
 /Subtype /Link
 /A << /S /GoTo /D (page.465) >>
 >> endobj
-12235 0 obj <<
+12223 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [125.35 508.601 143.706 520.291]
 /Subtype /Link
 /A << /S /GoTo /D (page.465) >>
 >> endobj
-12236 0 obj <<
+12224 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [143.623 494.59 161.979 506.279]
 /Subtype /Link
 /A << /S /GoTo /D (page.615) >>
 >> endobj
-12237 0 obj <<
+12225 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [119.956 480.578 138.312 491.722]
 /Subtype /Link
 /A << /S /GoTo /D (page.465) >>
 >> endobj
-12238 0 obj <<
+12226 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [142.047 466.567 160.403 478.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.556) >>
 >> endobj
-12239 0 obj <<
+12227 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [153.592 451.949 166.494 464.851]
 /Subtype /Link
 /A << /S /GoTo /D (page.50) >>
 >> endobj
-12240 0 obj <<
+12228 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.168 451.949 189.524 464.851]
 /Subtype /Link
 /A << /S /GoTo /D (page.303) >>
 >> endobj
-12241 0 obj <<
+12229 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [152.017 437.938 170.373 450.839]
 /Subtype /Link
 /A << /S /GoTo /D (page.303) >>
 >> endobj
-12242 0 obj <<
+12230 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.986 423.926 201.343 436.828]
 /Subtype /Link
 /A << /S /GoTo /D (page.560) >>
 >> endobj
-12243 0 obj <<
+12231 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [158.138 409.915 176.494 422.816]
 /Subtype /Link
 /A << /S /GoTo /D (page.465) >>
 >> endobj
-12244 0 obj <<
+12232 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.38 395.903 230.737 408.805]
 /Subtype /Link
 /A << /S /GoTo /D (page.453) >>
 >> endobj
-12245 0 obj <<
+12233 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.441 395.903 252.797 408.805]
 /Subtype /Link
 /A << /S /GoTo /D (page.454) >>
 >> endobj
-12246 0 obj <<
+12234 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [256.502 395.903 274.858 408.805]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-12247 0 obj <<
+12235 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 385.081 158.102 394.104]
 /Subtype /Link
 /A << /S /GoTo /D (page.478) >>
 >> endobj
-12248 0 obj <<
+12236 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [211.471 368.342 229.827 381.244]
 /Subtype /Link
 /A << /S /GoTo /D (page.452) >>
 >> endobj
-12249 0 obj <<
+12237 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [233.532 368.342 251.888 381.244]
 /Subtype /Link
 /A << /S /GoTo /D (page.454) >>
 >> endobj
-12250 0 obj <<
+12238 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.593 368.342 273.949 381.244]
 /Subtype /Link
 /A << /S /GoTo /D (page.477) >>
 >> endobj
-12251 0 obj <<
+12239 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 357.52 158.102 366.543]
 /Subtype /Link
 /A << /S /GoTo /D (page.478) >>
 >> endobj
-12252 0 obj <<
+12240 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.805 340.782 173.161 353.683]
 /Subtype /Link
 /A << /S /GoTo /D (page.561) >>
 >> endobj
-12253 0 obj <<
+12241 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [158.116 326.77 171.018 339.672]
 /Subtype /Link
 /A << /S /GoTo /D (page.48) >>
 >> endobj
-12254 0 obj <<
+12242 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [175.095 326.77 193.451 339.672]
 /Subtype /Link
 /A << /S /GoTo /D (page.234) >>
 >> endobj
-12255 0 obj <<
+12243 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.528 326.77 215.884 339.672]
 /Subtype /Link
 /A << /S /GoTo /D (page.237) >>
 >> endobj
-12256 0 obj <<
+12244 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.961 326.77 238.317 339.672]
 /Subtype /Link
 /A << /S /GoTo /D (page.241) >>
 >> endobj
-12257 0 obj <<
+12245 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 326.77 260.751 339.672]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-12258 0 obj <<
+12246 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 313.827 158.102 324.971]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-12259 0 obj <<
+12247 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 313.827 181.132 324.971]
 /Subtype /Link
 /A << /S /GoTo /D (page.568) >>
 >> endobj
-12260 0 obj <<
+12248 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.807 313.827 204.163 324.971]
 /Subtype /Link
 /A << /S /GoTo /D (page.779) >>
 >> endobj
-12261 0 obj <<
+12249 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [163.017 299.209 181.373 312.111]
 /Subtype /Link
 /A << /S /GoTo /D (page.643) >>
 >> endobj
-12262 0 obj <<
+12250 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [174.199 285.198 192.555 298.099]
 /Subtype /Link
 /A << /S /GoTo /D (page.660) >>
 >> endobj
-12263 0 obj <<
+12251 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.229 285.198 215.585 298.099]
 /Subtype /Link
 /A << /S /GoTo /D (page.662) >>
 >> endobj
-12264 0 obj <<
+12252 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.805 271.186 173.161 284.088]
 /Subtype /Link
 /A << /S /GoTo /D (page.114) >>
 >> endobj
-12265 0 obj <<
+12253 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [176.865 271.186 195.221 284.088]
 /Subtype /Link
 /A << /S /GoTo /D (page.163) >>
 >> endobj
-12266 0 obj <<
+12254 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [198.926 271.186 217.282 284.088]
 /Subtype /Link
 /A << /S /GoTo /D (page.660) >>
 >> endobj
-12267 0 obj <<
+12255 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.986 271.186 239.343 284.088]
 /Subtype /Link
 /A << /S /GoTo /D (page.662) >>
 >> endobj
-12268 0 obj <<
+12256 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [243.047 271.186 261.403 284.088]
 /Subtype /Link
 /A << /S /GoTo /D (page.665) >>
 >> endobj
-12269 0 obj <<
+12257 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 260.364 158.102 269.387]
 /Subtype /Link
 /A << /S /GoTo /D (page.745) >>
 >> endobj
-12270 0 obj <<
+12258 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [164.259 243.625 182.615 256.527]
 /Subtype /Link
 /A << /S /GoTo /D (page.661) >>
 >> endobj
-12271 0 obj <<
+12259 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [178.38 229.614 196.737 242.515]
 /Subtype /Link
 /A << /S /GoTo /D (page.587) >>
 >> endobj
-12272 0 obj <<
+12260 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.411 229.614 219.767 242.515]
 /Subtype /Link
 /A << /S /GoTo /D (page.774) >>
 >> endobj
-12273 0 obj <<
+12261 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.38 215.602 210.737 228.504]
 /Subtype /Link
 /A << /S /GoTo /D (page.110) >>
 >> endobj
-12274 0 obj <<
+12262 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.411 215.602 233.767 228.504]
 /Subtype /Link
 /A << /S /GoTo /D (page.582) >>
 >> endobj
-12275 0 obj <<
+12263 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.411 201.591 241.767 214.492]
 /Subtype /Link
 /A << /S /GoTo /D (page.584) >>
 >> endobj
-12276 0 obj <<
+12264 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [181.471 187.579 199.827 200.481]
 /Subtype /Link
 /A << /S /GoTo /D (page.582) >>
 >> endobj
-12277 0 obj <<
+12265 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [175.683 173.568 194.04 186.469]
 /Subtype /Link
 /A << /S /GoTo /D (page.112) >>
 >> endobj
-12278 0 obj <<
+12266 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [198.714 173.568 217.07 186.469]
 /Subtype /Link
 /A << /S /GoTo /D (page.116) >>
 >> endobj
-12279 0 obj <<
+12267 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.744 173.568 240.1 186.469]
 /Subtype /Link
 /A << /S /GoTo /D (page.293) >>
 >> endobj
-12280 0 obj <<
+12268 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.774 173.568 263.131 186.469]
 /Subtype /Link
 /A << /S /GoTo /D (page.297) >>
 >> endobj
-12281 0 obj <<
+12269 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [174.744 159.556 193.1 172.458]
 /Subtype /Link
 /A << /S /GoTo /D (page.299) >>
 >> endobj
-12282 0 obj <<
+12270 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.774 159.556 216.13 172.458]
 /Subtype /Link
 /A << /S /GoTo /D (page.302) >>
 >> endobj
-12283 0 obj <<
+12271 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [181.744 145.545 200.1 158.446]
 /Subtype /Link
 /A << /S /GoTo /D (page.779) >>
 >> endobj
-12284 0 obj <<
+12272 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.32 131.533 200.676 144.435]
 /Subtype /Link
 /A << /S /GoTo /D (page.125) >>
 >> endobj
-12285 0 obj <<
+12273 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.714 117.522 204.07 130.423]
 /Subtype /Link
 /A << /S /GoTo /D (page.125) >>
 >> endobj
-12286 0 obj <<
+12274 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.915 592.065 410.271 604.966]
 /Subtype /Link
 /A << /S /GoTo /D (page.288) >>
 >> endobj
-12287 0 obj <<
+12275 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.536 592.065 433.892 604.966]
 /Subtype /Link
 /A << /S /GoTo /D (page.291) >>
 >> endobj
-12288 0 obj <<
+12276 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 592.065 457.513 604.966]
 /Subtype /Link
 /A << /S /GoTo /D (page.295) >>
 >> endobj
-12289 0 obj <<
+12277 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 579.121 354.864 590.265]
 /Subtype /Link
 /A << /S /GoTo /D (page.301) >>
 >> endobj
-12290 0 obj <<
+12278 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.17 579.121 380.526 590.265]
 /Subtype /Link
 /A << /S /GoTo /D (page.572) >>
 >> endobj
-12291 0 obj <<
+12279 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.832 579.121 406.188 590.265]
 /Subtype /Link
 /A << /S /GoTo /D (page.573) >>
 >> endobj
-12292 0 obj <<
+12280 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.494 579.121 431.851 590.265]
 /Subtype /Link
 /A << /S /GoTo /D (page.576) >>
 >> endobj
-12293 0 obj <<
+12281 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 579.121 457.513 590.265]
 /Subtype /Link
 /A << /S /GoTo /D (page.577) >>
 >> endobj
-12294 0 obj <<
+12282 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 565.572 354.864 576.716]
 /Subtype /Link
 /A << /S /GoTo /D (page.660) >>
 >> endobj
-12295 0 obj <<
+12283 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.538 565.572 377.895 576.716]
 /Subtype /Link
 /A << /S /GoTo /D (page.663) >>
 >> endobj
-12296 0 obj <<
+12284 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.9 551.406 437.802 564.308]
 /Subtype /Link
 /A << /S /GoTo /D (page.35) >>
 >> endobj
-12297 0 obj <<
+12285 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.597 537.846 442.953 550.748]
 /Subtype /Link
 /A << /S /GoTo /D (page.223) >>
 >> endobj
-12298 0 obj <<
+12286 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [371.506 524.286 389.862 537.188]
 /Subtype /Link
 /A << /S /GoTo /D (page.588) >>
 >> endobj
-12299 0 obj <<
+12287 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.536 524.286 412.893 537.188]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-12300 0 obj <<
+12288 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.355 524.286 434.711 537.188]
 /Subtype /Link
 /A << /S /GoTo /D (page.642) >>
 >> endobj
-12301 0 obj <<
+12289 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [357.87 510.727 376.226 523.628]
 /Subtype /Link
 /A << /S /GoTo /D (page.575) >>
 >> endobj
-12302 0 obj <<
+12290 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [380.9 510.727 399.256 523.628]
 /Subtype /Link
 /A << /S /GoTo /D (page.576) >>
 >> endobj
-12303 0 obj <<
+12291 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.93 510.727 422.287 523.628]
 /Subtype /Link
 /A << /S /GoTo /D (page.586) >>
 >> endobj
-12304 0 obj <<
+12292 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.961 510.727 445.317 523.628]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-12305 0 obj <<
+12293 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [363.324 497.167 381.68 510.068]
 /Subtype /Link
 /A << /S /GoTo /D (page.573) >>
 >> endobj
-12306 0 obj <<
+12294 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [386.355 497.167 404.711 510.068]
 /Subtype /Link
 /A << /S /GoTo /D (page.641) >>
 >> endobj
-12307 0 obj <<
+12295 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [376.961 483.607 395.317 496.508]
 /Subtype /Link
 /A << /S /GoTo /D (page.587) >>
 >> endobj
-12308 0 obj <<
+12296 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [386.355 470.047 404.711 482.948]
 /Subtype /Link
 /A << /S /GoTo /D (page.588) >>
 >> endobj
-12309 0 obj <<
+12297 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [393.385 456.487 411.741 469.389]
 /Subtype /Link
 /A << /S /GoTo /D (page.586) >>
 >> endobj
-12310 0 obj <<
+12298 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [363.072 442.927 375.974 455.829]
 /Subtype /Link
 /A << /S /GoTo /D (page.47) >>
 >> endobj
-12311 0 obj <<
+12299 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [381.487 442.927 394.389 455.829]
 /Subtype /Link
 /A << /S /GoTo /D (page.48) >>
 >> endobj
-12312 0 obj <<
+12300 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.902 442.927 412.804 455.829]
 /Subtype /Link
 /A << /S /GoTo /D (page.50) >>
 >> endobj
-12313 0 obj <<
+12301 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.317 442.927 431.219 455.829]
 /Subtype /Link
 /A << /S /GoTo /D (page.81) >>
 >> endobj
-12314 0 obj <<
+12302 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [436.732 442.927 455.088 455.829]
 /Subtype /Link
 /A << /S /GoTo /D (page.101) >>
 >> endobj
-12315 0 obj <<
+12303 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 429.984 354.864 441.128]
 /Subtype /Link
 /A << /S /GoTo /D (page.103) >>
 >> endobj
-12316 0 obj <<
+12304 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.17 429.984 380.526 441.128]
 /Subtype /Link
 /A << /S /GoTo /D (page.106) >>
 >> endobj
-12317 0 obj <<
+12305 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.832 429.984 406.188 441.128]
 /Subtype /Link
 /A << /S /GoTo /D (page.119) >>
 >> endobj
-12318 0 obj <<
+12306 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.494 429.984 431.851 441.128]
 /Subtype /Link
 /A << /S /GoTo /D (page.122) >>
 >> endobj
-12319 0 obj <<
+12307 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 429.984 457.513 441.128]
 /Subtype /Link
 /A << /S /GoTo /D (page.124) >>
 >> endobj
-12320 0 obj <<
+12308 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 416.435 354.864 427.579]
 /Subtype /Link
 /A << /S /GoTo /D (page.190) >>
 >> endobj
-12321 0 obj <<
+12309 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.17 416.435 380.526 427.579]
 /Subtype /Link
 /A << /S /GoTo /D (page.214) >>
 >> endobj
-12322 0 obj <<
+12310 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.832 416.435 406.188 427.579]
 /Subtype /Link
 /A << /S /GoTo /D (page.218) >>
 >> endobj
-12323 0 obj <<
+12311 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.494 416.435 431.851 427.579]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-12324 0 obj <<
+12312 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 416.435 457.513 427.579]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-12325 0 obj <<
+12313 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 402.885 354.864 414.03]
 /Subtype /Link
 /A << /S /GoTo /D (page.376) >>
 >> endobj
-12326 0 obj <<
+12314 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.538 402.885 377.895 414.03]
 /Subtype /Link
 /A << /S /GoTo /D (page.568) >>
 >> endobj
-12327 0 obj <<
+12315 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.569 402.885 400.925 414.03]
 /Subtype /Link
 /A << /S /GoTo /D (page.582) >>
 >> endobj
-12328 0 obj <<
+12316 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.599 402.885 423.955 414.03]
 /Subtype /Link
 /A << /S /GoTo /D (page.639) >>
 >> endobj
-12329 0 obj <<
+12317 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.629 402.885 446.986 414.03]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-12330 0 obj <<
+12318 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [367.9 388.72 386.256 401.621]
 /Subtype /Link
 /A << /S /GoTo /D (page.448) >>
 >> endobj
-12331 0 obj <<
+12319 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.567 375.16 396.923 388.061]
 /Subtype /Link
 /A << /S /GoTo /D (page.660) >>
 >> endobj
-12332 0 obj <<
+12320 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.597 375.16 419.953 388.061]
 /Subtype /Link
 /A << /S /GoTo /D (page.744) >>
 >> endobj
-12333 0 obj <<
+12321 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.627 375.16 442.984 388.061]
 /Subtype /Link
 /A << /S /GoTo /D (page.745) >>
 >> endobj
-12334 0 obj <<
+12322 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [358.233 361.6 376.59 374.501]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-12335 0 obj <<
+12323 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [381.264 361.6 399.62 374.501]
 /Subtype /Link
 /A << /S /GoTo /D (page.701) >>
 >> endobj
-12336 0 obj <<
+12324 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.294 361.6 422.65 374.501]
 /Subtype /Link
 /A << /S /GoTo /D (page.745) >>
 >> endobj
-12337 0 obj <<
+12325 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.749 348.04 413.105 360.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.257) >>
 >> endobj
-12338 0 obj <<
+12326 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.749 334.48 433.105 347.382]
 /Subtype /Link
 /A << /S /GoTo /D (page.109) >>
 >> endobj
-12339 0 obj <<
+12327 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.567 320.92 413.014 333.822]
 /Subtype /Link
 /A << /S /GoTo /D (page.3) >>
 >> endobj
-12340 0 obj <<
+12328 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.9 307.36 435.256 320.262]
 /Subtype /Link
 /A << /S /GoTo /D (page.214) >>
 >> endobj
-12341 0 obj <<
+12329 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.627 293.8 424.983 306.702]
 /Subtype /Link
 /A << /S /GoTo /D (page.260) >>
 >> endobj
-12342 0 obj <<
+12330 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [363.082 280.24 381.438 293.142]
 /Subtype /Link
 /A << /S /GoTo /D (page.122) >>
 >> endobj
-12343 0 obj <<
+12331 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [386.112 280.24 404.468 293.142]
 /Subtype /Link
 /A << /S /GoTo /D (page.190) >>
 >> endobj
-12344 0 obj <<
+12332 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [381.385 266.68 399.741 279.582]
 /Subtype /Link
 /A << /S /GoTo /D (page.214) >>
 >> endobj
-12345 0 obj <<
+12333 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [421.779 253.121 434.681 266.022]
 /Subtype /Link
 /A << /S /GoTo /D (page.90) >>
 >> endobj
-12346 0 obj <<
+12334 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [367.264 239.561 385.62 252.462]
 /Subtype /Link
 /A << /S /GoTo /D (page.587) >>
 >> endobj
-12347 0 obj <<
+12335 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.991 226.001 418.347 238.902]
 /Subtype /Link
 /A << /S /GoTo /D (page.587) >>
 >> endobj
-12348 0 obj <<
+12336 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [339.718 212.441 358.074 225.342]
 /Subtype /Link
 /A << /S /GoTo /D (page.122) >>
 >> endobj
-12349 0 obj <<
+12337 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [408.949 198.881 427.305 211.783]
 /Subtype /Link
 /A << /S /GoTo /D (page.573) >>
 >> endobj
-12350 0 obj <<
+12338 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.1 185.321 406.456 198.223]
 /Subtype /Link
 /A << /S /GoTo /D (page.573) >>
 >> endobj
-12351 0 obj <<
+12339 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.506 171.761 380.862 184.663]
 /Subtype /Link
 /A << /S /GoTo /D (page.586) >>
 >> endobj
-12352 0 obj <<
+12340 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.536 171.761 403.893 184.663]
 /Subtype /Link
 /A << /S /GoTo /D (page.642) >>
 >> endobj
-12353 0 obj <<
+12341 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [368.87 158.201 387.226 171.103]
 /Subtype /Link
 /A << /S /GoTo /D (page.573) >>
 >> endobj
-12354 0 obj <<
+12342 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [380.658 144.641 399.014 157.543]
 /Subtype /Link
 /A << /S /GoTo /D (page.733) >>
 >> endobj
-12355 0 obj <<
+12343 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [328.173 131.081 346.529 143.983]
 /Subtype /Link
 /A << /S /GoTo /D (page.319) >>
 >> endobj
-12356 0 obj <<
+12344 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.839 117.522 402.196 130.423]
 /Subtype /Link
 /A << /S /GoTo /D (page.737) >>
 >> endobj
-12361 0 obj <<
-/D [12359 0 R /XYZ 100.892 685.529 null]
+12349 0 obj <<
+/D [12347 0 R /XYZ 100.892 685.529 null]
 >> endobj
-12358 0 obj <<
+12346 0 obj <<
 /Font << /F17 3698 0 R /F15 3700 0 R /F52 3737 0 R /F50 3701 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12461 0 obj <<
-/Length 1716      
+12449 0 obj <<
+/Length 1718      
 /Filter /FlateDecode
 >>
 stream
-xÚ­YËrÛ6Ýë+¸¨g¨NáM`Ó'±;Í8Öqºq³ HZf#‘
-I9Éß (E¤
-R¼2-ç>ppϽ–~Ÿ¼¾›Ì¯JÜ=ˆ!Ap!“4¸KƒûPP:ýt÷n~q €äœê¥R©%Ð,ú°]ü—%ÍtF
-ÿ(Òì›~gru7ù2Aj‘2s€Î !A²žÜ‚Aª¾{@@¤¾¶+×apÆÔó*ø0ù{]FÌê2• uM{3ßÖÕ|•/æu¼žb.âùÓCýªui‡ÜÏ!!c¨ÿ1fˆ ŽÄ*K¶UÞh¸ïSAB;Z$;Ö	n·X¯³æ±œÎÔsZƒäaùSúÜ+´I╶â%:	gŸjGÀ>i¶ ÍyaSࣩƔ©uÔc
-#B΋יÁˆ²ó’°6ÔM•?Mã&Ó¼šÎPXMQ˜é‡¦MªþFB$µ•Æ‚²¿hv°Ê#ºú«~ˆKxzø™I3±UVT‚™×¹Œ(=3¹õý—úãϵÕy0­¶ñ¾uqÈSk(ž‰¬ã*lMdßâFÜ%Çžƒù¯ŠZ»òHù¸4^F®ãܹ!Tµ-Ž@ÝŸT½iã4Ñ–«y²ÝÔsû¡%Â/uCȱªª˜„©ŸÜqM¸_®ÊE¼úd}™K9úò/ö$B2ñÅÍYÆ.þz{m}‘òñb{ñá{ÝdëÛ.³Í…éiTÕ:h&"d´ki
-³¢ßn0@ُ¦§…$ØEÀˆøc%eñ/Dt¨é3‰¦ýú+ÄXùÝå7Ÿ¶yYÇIUZÉ3Lõ WÀ0`¡þ<Ú¬‘}«fmÑàX´XH5~­Ÿ5­³jÑnGV•5¸½º¼yþ¼|e'Âîr"eýEÜUXq—»–þVJz'0Ä€BÚwb›n©‰<R£Â‚Ê…I
-£@ÈŽi«4ÞزI ‘|»‚ $qßn“üL6(ô…’¡ °@~Éx³»\šU¹ F9ÒÄbc}ŠÑK˜ÇXE­‰yh~]§I
-¾l³ÂŒGº½eµ´6ä²/ÃÂ9‹ˆz&ýê]X¨yÜWã«Û)B(üçêÖ!ëbÜpw²á‹›  v¸Æ) lòÑŠuâ)#`S•ZGV™}zàˆ
-“€{IPõtä7›I¡X´wüm¹Žó¨ÍÇ:«¦­º¼‹x™UV'È°ÁšÀ^æ1ƒ³mGÂU¾ÎíFãÂO Ùý@p´G¡¯„ÆþvXœ$å¶åycO1F㍷ Ä`š}2¨E¼vì±ÀaÚ
-ŒqK*y„%säº?.ÿ*Õâ â8`XmêZŒx±¨²§\MŠ©ñÕèŸêwªò³nÎ"lm4÷­Kl´¬š¼XäúQCo›´Ô¿öù
-ZÖå@íI¶ižj¤Š,iò²°O_ÄÞ(î]¼TXµãUÈÇ£s¿ŠìSûàÕŽaÛæq7—¢åI¬²§Ü>C
-â1ÈoJƒW•+;–}N8L³†bë4;¡—ªÐLXC~|.×hc¯uäè@d»Ð`’¸;êg‰¤”&Ò|pÕýŸwCÕUÙ«ãHõ†ïjfM™Þa›¶HÀÄ^7.5ì›+½PÍÞwŠpj¾óx°õæœÜäuã(8ć4‚Y–Ú+C„é94ua¯Ó„#tèãs0,ÔÑ„ðø¡ÐMx­Ãø­cð®ä7ò=8}¸™iVäYjã‘wõÒmh–«<ɳڡØØ—`U¾|‘ZŸ­k%™r¯;3åÕNûí÷Y^Þp?§ä~ptÀ7UA$f}ϱ¹keÜ
-Sû½ ö3;N‰4nâE\göËšÁIRs2âp‘Ú™4¼ó›aÅq!†tÚíÙ¾ëøEÆ‹C«Ûù2¢Co”è‹ôm㢿„§Az¤B±EÈÓPw¡«Þ=«,>ÁS¼k
-¢Nô‹ÞU°]¡`0õQÆ AûÊøÚØÁæ'	åžšt9<€g²¥:q/IþÚá¨Ác×÷â¨ÊqÏÛR'"‚'²¹=ÅŠÍq­kFæ˜w艠Ù*kJƒ6ú}¬¬HÊVpÒìùµÅÊÚË´ˆþÔµÅLM‘¢…bݯ̋¼ñ¤Ì,âíïÙãy1,4Œ,«Ô1<ŸÌ³ë•›Úü´;éœË×]«P5óìÛf7:À‰ç!$þôA"Ì‹‡²Z;†+ŒBá¡èªü<;WÖuH¹'Îhù0£#¼âüÿÚ¬X
+xÚ­YËrÛ6Ýë+¸¨g¨NáI ›Î8‰ÝiÆ鴎Ӎ›EÒ2‰TH*¿/@P²H¤xe™Ï=¸÷à> ,ü>y}7™_3 $”(¸{C€CDB&ip—÷¡ túéîÝüã@ ET/%®–@³èÃvñ_–4Óa4ü£H³ïúÉÕÝäË©EÊÌ:„Ézrÿ	©úî] ‘"øÖ®\„	1¦>¯‚“¿'ð2bVÊT‚–šf3ßÖÕ|•/æu¼žb.âùׇúUKi‡ÜÏ!!c¨ÿ3D€ÄÑ*K¶UÞh¸SAB;ƒÇŽu"²[e#Vçë¬y,§3õ9­Aò°|)}NÁº!“Ä+műîAñ	gïjdžÑI¬ž·Èû>>êjL™ZG=Öѐr&C—9eçy°üÏ	Ö†º©ò¯S…q“i]Mg(¬¦(Ìô‡¦Mªþî„H j-0*eÑì`•ú›þ7–íé0Dg:Íì­²¢̼Î%§ôLçvÖ÷_êÇŸk+ÄÉñ-Ö6Ý·‡:µneÄ‘‡[©ã*„†ÛCCŽ‡Æîƒù¯JZ;GÉÇ9>!.
+KîJ0ÎÈ
+ÉUÛâ”3>CVõ¦Ý§Ùm¹š'ÛM=·Z"΃˪JI˜ú•—ùÎ9÷ËU¹ˆWŸ¬/GRŽrÿÅîD8.ò‹›³Œ]üõöÚú"Æ“íŇu“­o;Ï6¦§QYë ™àH¾ki
+³¢ßn0@ÙSÓÓBlƒ¢`Dü±’²ø":¬é3‰¦&ÿv;b,ûO[·¬ã¤*­ÚzzЪa at X`NA¤|?Ö«ÌɾS³vhLaˆ‹îâøY«:«m4²ª¬ÁíÕåÍ{ðçåû+»žö AÀ_†¬Bbª­tµ4·RDÐPÀ
+iŸÂ6Ý8ÜÂ=ÜB#À9}Ç(,Æ;•­Òxcó—@"ù2vHâ¾Ý&ùo„êe^Ä
++òtÆK˜Ý9ãÀ¬ò0E#M,æ1V»Öº|ó«]ke˜_×iRƒ/Û¬0“‘îì@Y-­½¸ìׄaÎœq•Á égüš;ÍÇ}"¾º"„®n]ŒîàN6|qcËýˆ®qæ~¶GùhEá]<<+ØT¥.!«Ì>8Dˆ
+€{NP„z5ä7›I¨Ø[®ã¼0•æcUÓ¶²¼‹x™UVdØ[Í`Ïó˜ÁÙ¶ƒ#á*_çöY£ñšO Ùy 8ÚgÐWBc»ßXœ$å¶Õycw1Fã2ŒʈcÉÎí †’	³!UÄkGÀÉ€Íð¯ªY*?G8`XuÓ]¼XTÙ×\
+‰©1fªŸjuªò³îšÖ¶ö˜û©16峬š¼XäúQCo›´Ô¿öÑ
+Zg„]7¤b’mƒ§z¨"Kš¼,샱÷ˆ{Š—
+«v¼
+£ñݹ_Eö}ðj§°mó¸ɍÐò$Ö²»Ü>>
+öcß”¯*Wv,ûˆpèf
+Å0ÖnvB±HªDst(a†Ññ‘\£!Œ½Ö‘£³í.ƒIâ9’RrèHóàªû?ï†Ê«²—Ç‘ê1ÞåÌ:›2a[m‘€‰}ݸ԰o®ôB5 ¢>)QóÝãAèÍ9¹ÉëÆ‘1ˆ4h2-²,µgŽé92ua¯Ó„9:äøu4!<~7(ôA^ë0$~ë<C«ùMûCM3ÍŠ<Kí`÷•„îByX®ò$ÏjGÁÆÞ©°Ê—#¥Ö'tmI¦‘×uáG©íj¿ý*Ë‹MäGÁÈŽô¦2ˆn6ẕ¹ˆk˸),(LíwØÏìxÙIã&^Äuf¿§œ$E8"#„‹Ô.¥áuß+1ç.fû®ÓOmÝ–ÈWz£Š€¾Cß6.ýKx¤‡+”Z„<
+u·uÕ»g•£“Å'0Å»¦€wõ@?Xôní•ªSŸÊÈ´__;Øü¡è©I7‚Gð¬l©VšÅK‡†?t8rFðXë³8Zå"Ï©ÁÕÜžb¥æ¸Ö9#sÌ;ôDÐl•5ŽJƒ6ú}¬¬Hʶâ¤ÙókŠ”µ—i?yE1SS¤h¡X÷ó"o<%3ãQûSö¸_Œ
+"Ë*uÏ'ëìzå–vtZäN:'ÇÀòu×+TÍ<û¾Ù
+†pây‰¿|ó⡬֎á
+£PxTt•~ž+ë:¤è‰3Z>ÌÄè¯4ÿ?Ž®«‹
 endstream
 endobj
-12460 0 obj <<
+12448 0 obj <<
 /Type /Page
-/Contents 12461 0 R
-/Resources 12459 0 R
+/Contents 12449 0 R
+/Resources 12447 0 R
 /MediaBox [0 0 612 792]
-/Parent 12226 0 R
-/Annots [ 12357 0 R 12362 0 R 12363 0 R 12364 0 R 12365 0 R 12366 0 R 12367 0 R 12368 0 R 12369 0 R 12370 0 R 12371 0 R 12372 0 R 12373 0 R 12374 0 R 12375 0 R 12376 0 R 12377 0 R 12378 0 R 12379 0 R 12380 0 R 12381 0 R 12382 0 R 12383 0 R 12384 0 R 12385 0 R 12386 0 R 12387 0 R 12388 0 R 12389 0 R 12390 0 R 12391 0 R 12392 0 R 12393 0 R 12394 0 R 12395 0 R 12396 0 R 12397 0 R 12398 0 R 12399 0 R 12400 0 R 12401 0 R 12402 0 R 12403 0 R 12404 0 R 12405 0 R 12406 0 R 12407 0 R 12408 0 R 12409 0 R 12410 0 R 12411 0 R 12412 0 R 12413 0 R 12414 0 R 12415 0 R 12416 0 R 12417 0 R 12418 0 R 12419 0 R 12420 0 R 12421 0 R 12422 0 R 12423 0 R 12424 0 R 12425 0 R 12426 0 R 12427 0 R 12428 0 R 12429 0 R 12430 0 R 12431 0 R 12432 0 R 12433 0 R 12434 0 R 12435 0 R 12436 0 R 12437 0 R 12438 0 R 12439 0 R 12440 0 R 12441 0 R 12442 0 R 12443 0 R 12444 0 R 12445 0 R 12446 0 R 12447 0 R 12448 0 R 12449 0 R 12450 0 R 12451 0 R 12452 0 R 12453 0 R 12454 0 R 12455 0 R 12456 0 R 12457 0 R ]
+/Parent 12214 0 R
+/Annots [ 12345 0 R 12350 0 R 12351 0 R 12352 0 R 12353 0 R 12354 0 R 12355 0 R 12356 0 R 12357 0 R 12358 0 R 12359 0 R 12360 0 R 12361 0 R 12362 0 R 12363 0 R 12364 0 R 12365 0 R 12366 0 R 12367 0 R 12368 0 R 12369 0 R 12370 0 R 12371 0 R 12372 0 R 12373 0 R 12374 0 R 12375 0 R 12376 0 R 12377 0 R 12378 0 R 12379 0 R 12380 0 R 12381 0 R 12382 0 R 12383 0 R 12384 0 R 12385 0 R 12386 0 R 12387 0 R 12388 0 R 12389 0 R 12390 0 R 12391 0 R 12392 0 R 12393 0 R 12394 0 R 12395 0 R 12396 0 R 12397 0 R 12398 0 R 12399 0 R 12400 0 R 12401 0 R 12402 0 R 12403 0 R 12404 0 R 12405 0 R 12406 0 R 12407 0 R 12408 0 R 12409 0 R 12410 0 R 12411 0 R 12412 0 R 12413 0 R 12414 0 R 12415 0 R 12416 0 R 12417 0 R 12418 0 R 12419 0 R 12420 0 R 12421 0 R 12422 0 R 12423 0 R 12424 0 R 12425 0 R 12426 0 R 12427 0 R 12428 0 R 12429 0 R 12430 0 R 12431 0 R 12432 0 R 12433 0 R 12434 0 R 12435 0 R 12436 0 R 12437 0 R 12438 0 R 12439 0 R 12440 0 R 12441 0 R 12442 0 R 12443 0 R 12444 0 R 12445 0 R ]
 >> endobj
-12357 0 obj <<
+12345 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.402 645.94 267.758 658.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.551) >>
 >> endobj
-12362 0 obj <<
+12350 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [236.644 632.323 255.001 645.225]
+/Rect [236.644 632.015 255.001 644.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.578) >>
 >> endobj
-12363 0 obj <<
+12351 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [259.675 632.323 278.031 645.225]
+/Rect [259.675 632.015 278.031 644.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.586) >>
 >> endobj
-12364 0 obj <<
+12352 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [299.069 618.706 317.425 631.607]
+/Rect [299.069 618.089 317.425 630.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.578) >>
 >> endobj
-12365 0 obj <<
+12353 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [222.614 605.088 240.97 617.99]
+/Rect [222.614 604.164 240.97 617.065]
 /Subtype /Link
 /A << /S /GoTo /D (page.577) >>
 >> endobj
-12366 0 obj <<
+12354 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [240.553 591.471 258.91 604.373]
+/Rect [240.553 590.238 258.91 603.14]
 /Subtype /Link
 /A << /S /GoTo /D (page.581) >>
 >> endobj
-12367 0 obj <<
+12355 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [260.19 577.854 278.546 590.755]
+/Rect [260.19 576.312 278.546 589.214]
 /Subtype /Link
 /A << /S /GoTo /D (page.582) >>
 >> endobj
-12368 0 obj <<
+12356 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [282.25 577.854 300.607 590.755]
+/Rect [282.25 576.312 300.607 589.214]
 /Subtype /Link
 /A << /S /GoTo /D (page.584) >>
 >> endobj
-12369 0 obj <<
+12357 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [304.311 577.854 322.667 590.755]
+/Rect [304.311 576.312 322.667 589.214]
 /Subtype /Link
 /A << /S /GoTo /D (page.733) >>
 >> endobj
-12370 0 obj <<
+12358 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [258.129 564.236 276.485 577.138]
+/Rect [258.129 562.387 276.485 575.288]
 /Subtype /Link
 /A << /S /GoTo /D (page.745) >>
 >> endobj
-12371 0 obj <<
+12359 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [276.978 550.619 295.334 563.521]
+/Rect [276.978 548.461 295.334 561.363]
 /Subtype /Link
 /A << /S /GoTo /D (page.551) >>
 >> endobj
-12372 0 obj <<
+12360 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [190.555 526.18 208.912 535.203]
+/Rect [190.555 523.714 208.912 532.737]
 /Subtype /Link
 /A << /S /GoTo /D (page.109) >>
 >> endobj
-12373 0 obj <<
+12361 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [267.584 509.835 285.94 522.737]
+/Rect [267.584 507.061 285.94 519.963]
 /Subtype /Link
 /A << /S /GoTo /D (page.736) >>
 >> endobj
-12374 0 obj <<
+12362 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [260.887 496.218 279.243 509.12]
+/Rect [260.887 493.135 279.243 506.037]
 /Subtype /Link
 /A << /S /GoTo /D (page.325) >>
 >> endobj
-12375 0 obj <<
+12363 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [283.917 496.218 302.273 509.12]
+/Rect [283.917 493.135 302.273 506.037]
 /Subtype /Link
 /A << /S /GoTo /D (page.744) >>
 >> endobj
-12376 0 obj <<
+12364 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [289.735 482.601 308.091 495.502]
+/Rect [289.735 479.21 308.091 492.111]
 /Subtype /Link
 /A << /S /GoTo /D (page.173) >>
 >> endobj
-12377 0 obj <<
+12365 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [202.372 468.983 220.728 481.885]
+/Rect [202.372 465.284 220.728 478.186]
 /Subtype /Link
 /A << /S /GoTo /D (page.733) >>
 >> endobj
-12378 0 obj <<
+12366 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [225.402 468.983 243.758 481.885]
+/Rect [225.402 465.284 243.758 478.186]
 /Subtype /Link
 /A << /S /GoTo /D (page.736) >>
 >> endobj
-12379 0 obj <<
+12367 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [270.402 455.366 288.758 468.268]
+/Rect [270.402 451.359 288.758 464.26]
 /Subtype /Link
 /A << /S /GoTo /D (page.736) >>
 >> endobj
-12380 0 obj <<
+12368 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [236.856 441.749 255.213 454.65]
+/Rect [236.856 437.433 255.213 450.335]
 /Subtype /Link
 /A << /S /GoTo /D (page.797) >>
 >> endobj
-12381 0 obj <<
+12369 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [232.614 428.132 250.97 441.033]
+/Rect [232.614 423.508 250.97 436.409]
 /Subtype /Link
 /A << /S /GoTo /D (page.744) >>
 >> endobj
-12382 0 obj <<
+12370 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [235.069 414.514 253.425 427.416]
+/Rect [235.069 409.582 253.425 422.484]
 /Subtype /Link
 /A << /S /GoTo /D (page.173) >>
 >> endobj
-12383 0 obj <<
+12371 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [240.25 400.897 258.607 413.799]
+/Rect [240.25 395.656 258.607 408.558]
 /Subtype /Link
 /A << /S /GoTo /D (page.538) >>
 >> endobj
-12384 0 obj <<
+12372 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [243.584 387.28 261.94 400.181]
+/Rect [243.584 381.731 261.94 394.633]
 /Subtype /Link
 /A << /S /GoTo /D (page.124) >>
 >> endobj
-12385 0 obj <<
+12373 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [266.614 387.28 284.97 400.181]
+/Rect [266.614 381.731 284.97 394.633]
 /Subtype /Link
 /A << /S /GoTo /D (page.538) >>
 >> endobj
-12386 0 obj <<
+12374 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [191.917 373.662 210.273 386.564]
+/Rect [191.917 367.805 210.273 380.707]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-12387 0 obj <<
+12375 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [162.826 360.651 181.182 372.947]
+/Rect [162.826 354.486 181.182 366.781]
 /Subtype /Link
 /A << /S /GoTo /D (page.103) >>
 >> endobj
-12388 0 obj <<
+12376 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [173.281 347.034 191.637 359.329]
+/Rect [173.281 340.56 191.637 352.856]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-12389 0 obj <<
+12377 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [189.341 333.417 207.697 345.712]
+/Rect [189.341 326.635 207.697 338.93]
 /Subtype /Link
 /A << /S /GoTo /D (page.465) >>
 >> endobj
-12390 0 obj <<
+12378 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [190.555 308.371 203.457 317.394]
+/Rect [190.555 301.281 203.457 310.304]
 /Subtype /Link
 /A << /S /GoTo /D (page.88) >>
 >> endobj
-12391 0 obj <<
+12379 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [202.25 292.633 220.607 304.928]
+/Rect [202.25 285.234 220.607 297.53]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-12392 0 obj <<
+12380 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [281.42 279.016 299.776 290.705]
+/Rect [281.42 271.309 299.776 282.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.112) >>
 >> endobj
-12393 0 obj <<
+12381 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [226.256 265.398 244.613 277.088]
+/Rect [226.256 257.383 244.613 269.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-12394 0 obj <<
+12382 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [204.014 251.781 222.37 263.47]
+/Rect [204.014 243.458 222.37 255.147]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-12395 0 obj <<
+12383 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [313.487 238.164 326.388 249.853]
+/Rect [313.487 229.532 326.388 241.222]
 /Subtype /Link
 /A << /S /GoTo /D (page.93) >>
 >> endobj
-12396 0 obj <<
+12384 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [212.22 223.94 230.576 236.842]
+/Rect [212.22 215.001 230.576 227.902]
 /Subtype /Link
 /A << /S /GoTo /D (page.178) >>
 >> endobj
-12397 0 obj <<
+12385 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [249.432 210.323 267.788 223.225]
+/Rect [249.432 201.075 267.788 213.977]
 /Subtype /Link
 /A << /S /GoTo /D (page.615) >>
 >> endobj
-12398 0 obj <<
+12386 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [273.705 197.312 292.061 208.88]
+/Rect [273.705 187.755 292.061 199.324]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-12399 0 obj <<
+12387 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [222.917 183.694 241.273 195.384]
+/Rect [222.917 173.83 241.273 185.519]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-12400 0 obj <<
+12388 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [185.25 170.077 203.607 181.221]
+/Rect [185.25 159.904 203.607 171.048]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-12401 0 obj <<
+12389 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [249.947 156.46 268.304 167.604]
+/Rect [249.947 145.979 268.304 157.123]
 /Subtype /Link
 /A << /S /GoTo /D (page.216) >>
 >> endobj
-12402 0 obj <<
+12390 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [222.281 142.843 240.637 154.532]
+/Rect [211.917 132.053 230.273 143.197]
 /Subtype /Link
-/A << /S /GoTo /D (page.316) >>
+/A << /S /GoTo /D (page.371) >>
 >> endobj
-12403 0 obj <<
+12391 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [211.917 118.128 230.273 129.272]
+/Rect [222.281 118.128 240.637 129.817]
 /Subtype /Link
-/A << /S /GoTo /D (page.371) >>
+/A << /S /GoTo /D (page.316) >>
 >> endobj
-12404 0 obj <<
+12392 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [462.8 646.546 481.157 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.128) >>
 >> endobj
-12405 0 obj <<
+12393 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.619 632.997 461.975 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.307) >>
 >> endobj
-12406 0 obj <<
+12394 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.285 619.448 461.641 630.847]
 /Subtype /Link
 /A << /S /GoTo /D (page.365) >>
 >> endobj
-12407 0 obj <<
+12395 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.467 605.899 403.823 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.306) >>
 >> endobj
-12408 0 obj <<
+12396 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.74 592.35 401.096 603.494]
 /Subtype /Link
 /A << /S /GoTo /D (page.151) >>
 >> endobj
-12409 0 obj <<
+12397 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [455.164 578.8 473.52 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-12410 0 obj <<
+12398 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [425.194 565.251 443.55 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.138) >>
 >> endobj
-12411 0 obj <<
+12399 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.067 551.702 436.969 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.61) >>
 >> endobj
-12412 0 obj <<
+12400 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.215 551.702 457.117 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.65) >>
 >> endobj
-12413 0 obj <<
+12401 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.363 551.702 482.719 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.122) >>
 >> endobj
-12414 0 obj <<
+12402 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 551.702 508.322 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.324) >>
 >> endobj
-12415 0 obj <<
+12403 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 540.274 405.674 549.297]
 /Subtype /Link
 /A << /S /GoTo /D (page.593) >>
 >> endobj
-12416 0 obj <<
+12404 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [447.225 497.505 465.581 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.313) >>
 >> endobj
-12417 0 obj <<
+12405 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [449.194 483.956 467.551 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.724) >>
 >> endobj
-12418 0 obj <<
+12406 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.497 470.407 447.854 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-12419 0 obj <<
+12407 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.512 456.858 440.868 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-12420 0 obj <<
+12408 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.997 456.858 463.353 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-12421 0 obj <<
+12409 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [467.481 456.858 485.837 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.203) >>
 >> endobj
-12422 0 obj <<
+12410 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 456.858 508.322 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.250) >>
 >> endobj
-12423 0 obj <<
+12411 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 443.308 405.674 454.452]
 /Subtype /Link
 /A << /S /GoTo /D (page.314) >>
 >> endobj
-12424 0 obj <<
+12412 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.348 443.308 428.704 454.452]
 /Subtype /Link
 /A << /S /GoTo /D (page.320) >>
 >> endobj
-12425 0 obj <<
+12413 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.285 429.759 435.641 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.367) >>
 >> endobj
-12426 0 obj <<
+12414 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [421.285 416.21 439.641 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.212) >>
 >> endobj
-12427 0 obj <<
+12415 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.437 402.661 431.793 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-12428 0 obj <<
+12416 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [436.467 402.661 454.823 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-12429 0 obj <<
+12417 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [459.497 402.661 477.854 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-12430 0 obj <<
+12418 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [390.8 389.112 398.247 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.7) >>
 >> endobj
-12431 0 obj <<
+12419 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.922 389.112 415.823 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.60) >>
 >> endobj
-12432 0 obj <<
+12420 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.497 389.112 438.854 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.106) >>
 >> endobj
-12433 0 obj <<
+12421 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.528 389.112 461.884 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.643) >>
 >> endobj
-12434 0 obj <<
+12422 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.544 375.562 425.445 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-12435 0 obj <<
+12423 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.12 375.562 443.021 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.67) >>
 >> endobj
-12436 0 obj <<
+12424 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.938 362.013 428.839 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.48) >>
 >> endobj
-12437 0 obj <<
+12425 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.809 348.464 439.711 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.44) >>
 >> endobj
-12438 0 obj <<
+12426 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.043 334.915 482.399 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-12439 0 obj <<
+12427 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.194 321.366 459.551 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-12440 0 obj <<
+12428 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [437.225 307.816 455.581 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.189) >>
 >> endobj
-12441 0 obj <<
+12429 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.709 294.267 461.066 305.667]
 /Subtype /Link
 /A << /S /GoTo /D (page.220) >>
 >> endobj
-12442 0 obj <<
+12430 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [452.406 267.169 470.763 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.209) >>
 >> endobj
-12443 0 obj <<
+12431 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [475.437 267.169 493.793 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.210) >>
 >> endobj
-12444 0 obj <<
+12432 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [437.558 253.62 455.914 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.610) >>
 >> endobj
-12445 0 obj <<
+12433 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.8 240.07 450.157 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.101) >>
 >> endobj
-12446 0 obj <<
+12434 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [436.316 226.521 454.672 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.214) >>
 >> endobj
-12447 0 obj <<
+12435 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.376 212.972 446.732 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.207) >>
 >> endobj
-12448 0 obj <<
+12436 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [448.425 199.423 466.781 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.209) >>
 >> endobj
-12449 0 obj <<
+12437 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.952 185.874 458.308 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.210) >>
 >> endobj
-12450 0 obj <<
+12438 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.528 172.324 440.884 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.206) >>
 >> endobj
-12451 0 obj <<
+12439 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.709 158.775 434.066 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.209) >>
 >> endobj
-12452 0 obj <<
+12440 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [463.285 144.62 481.642 157.522]
 /Subtype /Link
 /A << /S /GoTo /D (page.203) >>
 >> endobj
-12453 0 obj <<
+12441 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [486.316 144.62 504.672 157.522]
 /Subtype /Link
 /A << /S /GoTo /D (page.213) >>
 >> endobj
-12454 0 obj <<
+12442 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [449.624 131.677 462.526 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.87) >>
 >> endobj
-12455 0 obj <<
+12443 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [467.068 131.677 485.424 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.101) >>
 >> endobj
-12456 0 obj <<
+12444 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 131.677 508.322 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.218) >>
 >> endobj
-12457 0 obj <<
+12445 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 120.249 405.674 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.258) >>
 >> endobj
-12462 0 obj <<
-/D [12460 0 R /XYZ 151.701 685.529 null]
+12450 0 obj <<
+/D [12448 0 R /XYZ 151.701 685.529 null]
 >> endobj
-12459 0 obj <<
+12447 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F51 3736 0 R /F52 3737 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12617 0 obj <<
+12605 0 obj <<
 /Length 1636      
 /Filter /FlateDecode
 >>
@@ -72546,2581 +76255,2597 @@
 [í÷]ˆöé0¼Í7r¶wwx%•ÆS¦ žá7|##rSºV(HéÁœB 	ÄxùáóÕÝâÙkø§
 endstream
 endobj
-12616 0 obj <<
+12604 0 obj <<
 /Type /Page
-/Contents 12617 0 R
-/Resources 12615 0 R
+/Contents 12605 0 R
+/Resources 12603 0 R
 /MediaBox [0 0 612 792]
-/Parent 12226 0 R
-/Annots [ 12458 0 R 12463 0 R 12464 0 R 12465 0 R 12466 0 R 12467 0 R 12468 0 R 12469 0 R 12470 0 R 12471 0 R 12472 0 R 12473 0 R 12474 0 R 12475 0 R 12476 0 R 12477 0 R 12478 0 R 12479 0 R 12480 0 R 12481 0 R 12482 0 R 12483 0 R 12484 0 R 12485 0 R 12486 0 R 12487 0 R 12488 0 R 12489 0 R 12490 0 R 12491 0 R 12492 0 R 12493 0 R 12494 0 R 12495 0 R 12496 0 R 12497 0 R 12498 0 R 12499 0 R 12500 0 R 12501 0 R 12502 0 R 12503 0 R 12504 0 R 12505 0 R 12506 0 R 12507 0 R 12508 0 R 12509 0 R 12510 0 R 12511 0 R 12512 0 R 12513 0 R 12514 0 R 12515 0 R 12516 0 R 12517 0 R 12518 0 R 12519 0 R 12520 0 R 12521 0 R 12522 0 R 12523 0 R 12524 0 R 12525 0 R 12526 0 R 12527 0 R 12528 0 R 12529 0 R 12530 0 R 12531 0 R 12532 0 R 12533 0 R 12534 0 R 12535 0 R 12536 0 R 12537 0 R 12538 0 R 12539 0 R 12540 0 R 12541 0 R 12542 0 R 12543 0 R 12544 0 R 12545 0 R 12546 0 R 12547 0 R 12548 0 R 12549 0 R 12550 0 R 12551 0 R 12552 0 R 12553 0 R 12554 0 R 12555 0 R 12556 0 R 12557 0 R 12558 0 R 12559 0 R 12560 0 R 12561 0 R 12562 0 R 12563 0 R 12564 0 R 12565 0 R 12566 0 R 12567 0 R 12568 0 R 12569 0 R 12570 0 R 12571 0 R 12572 0 R 12573 0 R 12574 0 R 12575 0 R 12576 0 R 12577 0 R 12578 0 R 12579 0 R 12580 0 R 12581 0 R 12582 0 R 12583 0 R 12584 0 R 12585 0 R 12586 0 R 12587 0 R 12588 0 R 12589 0 R 12590 0 R 12591 0 R 12592 0 R 12593 0 R 12594 0 R 12595 0 R 12596 0 R 12597 0 R 12598 0 R 12599 0 R 12600 0 R 12601 0 R 12602 0 R 12603 0 R 12604 0 R 12605 0 R ]
+/Parent 12214 0 R
+/Annots [ 12446 0 R 12451 0 R 12452 0 R 12453 0 R 12454 0 R 12455 0 R 12456 0 R 12457 0 R 12458 0 R 12459 0 R 12460 0 R 12461 0 R 12462 0 R 12463 0 R 12464 0 R 12465 0 R 12466 0 R 12467 0 R 12468 0 R 12469 0 R 12470 0 R 12471 0 R 12472 0 R 12473 0 R 12474 0 R 12475 0 R 12476 0 R 12477 0 R 12478 0 R 12479 0 R 12480 0 R 12481 0 R 12482 0 R 12483 0 R 12484 0 R 12485 0 R 12486 0 R 12487 0 R 12488 0 R 12489 0 R 12490 0 R 12491 0 R 12492 0 R 12493 0 R 12494 0 R 12495 0 R 12496 0 R 12497 0 R 12498 0 R 12499 0 R 12500 0 R 12501 0 R 12502 0 R 12503 0 R 12504 0 R 12505 0 R 12506 0 R 12507 0 R 12508 0 R 12509 0 R 12510 0 R 12511 0 R 12512 0 R 12513 0 R 12514 0 R 12515 0 R 12516 0 R 12517 0 R 12518 0 R 12519 0 R 12520 0 R 12521 0 R 12522 0 R 12523 0 R 12524 0 R 12525 0 R 12526 0 R 12527 0 R 12528 0 R 12529 0 R 12530 0 R 12531 0 R 12532 0 R 12533 0 R 12534 0 R 12535 0 R 12536 0 R 12537 0 R 12538 0 R 12539 0 R 12540 0 R 12541 0 R 12542 0 R 12543 0 R 12544 0 R 12545 0 R 12546 0 R 12547 0 R 12548 0 R 12549 0 R 12550 0 R 12551 0 R 12552 0 R 12553 0 R 12554 0 R 12555 0 R 12556 0 R 12557 0 R 12558 0 R 12559 0 R 12560 0 R 12561 0 R 12562 0 R 12563 0 R 12564 0 R 12565 0 R 12566 0 R 12567 0 R 12568 0 R 12569 0 R 12570 0 R 12571 0 R 12572 0 R 12573 0 R 12574 0 R 12575 0 R 12576 0 R 12577 0 R 12578 0 R 12579 0 R 12580 0 R 12581 0 R 12582 0 R 12583 0 R 12584 0 R 12585 0 R 12586 0 R 12587 0 R 12588 0 R 12589 0 R 12590 0 R 12591 0 R 12592 0 R 12593 0 R ]
 >> endobj
-12458 0 obj <<
+12446 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [245.425 646.546 263.781 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-12463 0 obj <<
+12451 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [207.168 632.997 225.524 644.141]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-12464 0 obj <<
+12452 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [172.32 619.448 190.676 630.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-12465 0 obj <<
+12453 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.35 619.448 213.706 630.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.303) >>
 >> endobj
-12466 0 obj <<
+12454 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.38 619.448 236.737 630.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.376) >>
 >> endobj
-12467 0 obj <<
+12455 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [181.774 605.899 194.676 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.72) >>
 >> endobj
-12468 0 obj <<
+12456 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [174.441 592.35 192.797 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.202) >>
 >> endobj
-12469 0 obj <<
+12457 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.774 578.8 218.13 590.2]
 /Subtype /Link
 /A << /S /GoTo /D (page.609) >>
 >> endobj
-12470 0 obj <<
+12458 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.017 565.251 201.373 576.651]
 /Subtype /Link
 /A << /S /GoTo /D (page.203) >>
 >> endobj
-12471 0 obj <<
+12459 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.32 551.702 245.676 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.717) >>
 >> endobj
-12472 0 obj <<
+12460 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.32 538.153 259.676 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.189) >>
 >> endobj
-12473 0 obj <<
+12461 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.077 524.604 235.434 535.748]
 /Subtype /Link
 /A << /S /GoTo /D (page.189) >>
 >> endobj
-12474 0 obj <<
+12462 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [194.744 511.054 213.1 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-12475 0 obj <<
+12463 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [172.623 497.505 190.979 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.203) >>
 >> endobj
-12476 0 obj <<
+12464 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [147.532 483.956 165.888 495.1]
 /Subtype /Link
 /A << /S /GoTo /D (page.575) >>
 >> endobj
-12477 0 obj <<
+12465 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [128.759 470.407 147.115 481.975]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-12478 0 obj <<
+12466 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [151.486 470.407 169.842 481.975]
 /Subtype /Link
 /A << /S /GoTo /D (page.225) >>
 >> endobj
-12479 0 obj <<
+12467 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [174.213 470.407 192.569 481.975]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-12480 0 obj <<
+12468 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.94 470.407 215.296 481.975]
 /Subtype /Link
 /A << /S /GoTo /D (page.307) >>
 >> endobj
-12481 0 obj <<
+12469 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.667 470.407 238.023 481.975]
 /Subtype /Link
 /A << /S /GoTo /D (page.364) >>
 >> endobj
-12482 0 obj <<
+12470 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 470.407 260.751 481.975]
 /Subtype /Link
 /A << /S /GoTo /D (page.403) >>
 >> endobj
-12483 0 obj <<
+12471 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 458.979 158.102 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.799) >>
 >> endobj
-12484 0 obj <<
+12472 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [133.441 443.308 151.797 454.877]
 /Subtype /Link
 /A << /S /GoTo /D (page.313) >>
 >> endobj
-12485 0 obj <<
+12473 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [156.471 443.308 174.827 454.877]
 /Subtype /Link
 /A << /S /GoTo /D (page.405) >>
 >> endobj
-12486 0 obj <<
+12474 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.457 429.759 200.813 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.318) >>
 >> endobj
-12487 0 obj <<
+12475 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [160.578 416.21 178.934 427.778]
 /Subtype /Link
 /A << /S /GoTo /D (page.313) >>
 >> endobj
-12488 0 obj <<
+12476 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.609 416.21 201.965 427.778]
 /Subtype /Link
 /A << /S /GoTo /D (page.315) >>
 >> endobj
-12489 0 obj <<
+12477 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [151.427 402.661 169.783 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.314) >>
 >> endobj
-12490 0 obj <<
+12478 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [170.184 389.112 188.541 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.315) >>
 >> endobj
-12491 0 obj <<
+12479 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.168 375.562 195.524 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.325) >>
 >> endobj
-12492 0 obj <<
+12480 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [181.471 362.013 199.827 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.314) >>
 >> endobj
-12493 0 obj <<
+12481 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.229 348.464 241.585 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.158) >>
 >> endobj
-12494 0 obj <<
+12482 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.774 334.915 195.676 346.483]
 /Subtype /Link
 /A << /S /GoTo /D (page.91) >>
 >> endobj
-12495 0 obj <<
+12483 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.38 334.915 217.737 346.483]
 /Subtype /Link
 /A << /S /GoTo /D (page.111) >>
 >> endobj
-12496 0 obj <<
+12484 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.441 334.915 239.797 346.483]
 /Subtype /Link
 /A << /S /GoTo /D (page.247) >>
 >> endobj
-12497 0 obj <<
+12485 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [243.502 334.915 261.858 346.483]
 /Subtype /Link
 /A << /S /GoTo /D (page.286) >>
 >> endobj
-12498 0 obj <<
+12486 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 321.366 158.102 332.51]
 /Subtype /Link
 /A << /S /GoTo /D (page.295) >>
 >> endobj
-12499 0 obj <<
+12487 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 321.366 181.132 332.51]
 /Subtype /Link
 /A << /S /GoTo /D (page.371) >>
 >> endobj
-12500 0 obj <<
+12488 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [179.956 307.816 192.858 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.44) >>
 >> endobj
-12501 0 obj <<
+12489 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.532 307.816 210.433 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-12502 0 obj <<
+12490 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.895 307.816 226.797 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.64) >>
 >> endobj
-12503 0 obj <<
+12491 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [231.471 307.816 244.373 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.72) >>
 >> endobj
-12504 0 obj <<
+12492 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.047 307.816 261.949 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.75) >>
 >> endobj
-12505 0 obj <<
+12493 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.259 294.267 237.615 305.835]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-12506 0 obj <<
+12494 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.017 280.718 175.373 292.286]
 /Subtype /Link
 /A << /S /GoTo /D (page.289) >>
 >> endobj
-12507 0 obj <<
+12495 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [140.956 267.169 159.312 278.737]
 /Subtype /Link
 /A << /S /GoTo /D (page.296) >>
 >> endobj
-12508 0 obj <<
+12496 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.653 253.62 215.009 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.206) >>
 >> endobj
-12509 0 obj <<
+12497 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.562 240.07 218.918 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.305) >>
 >> endobj
-12510 0 obj <<
+12498 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.473 212.972 217.829 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-12511 0 obj <<
+12499 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [160.017 199.423 178.373 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-12512 0 obj <<
+12500 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.471 185.874 203.827 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.243) >>
 >> endobj
-12513 0 obj <<
+12501 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.502 185.874 226.858 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.249) >>
 >> endobj
-12514 0 obj <<
+12502 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [202.902 172.324 215.804 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.83) >>
 >> endobj
-12515 0 obj <<
+12503 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [222.648 172.324 235.55 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.91) >>
 >> endobj
-12516 0 obj <<
+12504 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 172.324 260.751 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.104) >>
 >> endobj
-12517 0 obj <<
+12505 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 158.775 158.102 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.105) >>
 >> endobj
-12518 0 obj <<
+12506 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [165.408 158.775 183.764 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.118) >>
 >> endobj
-12519 0 obj <<
+12507 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.07 158.775 209.426 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.119) >>
 >> endobj
-12520 0 obj <<
+12508 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.732 158.775 235.088 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.139) >>
 >> endobj
-12521 0 obj <<
+12509 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 158.775 260.751 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.306) >>
 >> endobj
-12522 0 obj <<
+12510 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 147.347 158.102 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.715) >>
 >> endobj
-12523 0 obj <<
+12511 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [209.956 131.677 228.312 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-12524 0 obj <<
+12512 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.637 118.128 218.993 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-12525 0 obj <<
+12513 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.031 118.128 241.387 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.395) >>
 >> endobj
-12526 0 obj <<
+12514 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [245.425 118.128 263.781 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.403) >>
 >> endobj
-12527 0 obj <<
+12515 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.203 646.546 410.559 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.455) >>
 >> endobj
-12528 0 obj <<
+12516 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.173 632.545 417.529 644.235]
 /Subtype /Link
 /A << /S /GoTo /D (page.272) >>
 >> endobj
-12529 0 obj <<
+12517 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [374.415 618.545 392.771 630.234]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-12530 0 obj <<
+12518 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.445 618.545 415.802 630.234]
 /Subtype /Link
 /A << /S /GoTo /D (page.203) >>
 >> endobj
-12531 0 obj <<
+12519 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.476 618.545 438.832 630.234]
 /Subtype /Link
 /A << /S /GoTo /D (page.715) >>
 >> endobj
-12532 0 obj <<
+12520 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.688 603.938 439.044 616.839]
 /Subtype /Link
 /A << /S /GoTo /D (page.307) >>
 >> endobj
-12533 0 obj <<
+12521 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [348.479 590.543 366.835 602.232]
 /Subtype /Link
 /A << /S /GoTo /D (page.415) >>
 >> endobj
-12534 0 obj <<
+12522 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [371.148 590.543 389.504 602.232]
 /Subtype /Link
 /A << /S /GoTo /D (page.417) >>
 >> endobj
-12535 0 obj <<
+12523 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [393.818 590.543 412.174 602.232]
 /Subtype /Link
 /A << /S /GoTo /D (page.420) >>
 >> endobj
-12536 0 obj <<
+12524 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.487 590.543 434.843 602.232]
 /Subtype /Link
 /A << /S /GoTo /D (page.421) >>
 >> endobj
-12537 0 obj <<
+12525 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 590.543 457.513 602.232]
 /Subtype /Link
 /A << /S /GoTo /D (page.509) >>
 >> endobj
-12538 0 obj <<
+12526 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 579.115 354.864 588.138]
 /Subtype /Link
 /A << /S /GoTo /D (page.519) >>
 >> endobj
-12539 0 obj <<
+12527 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.779 562.993 401.135 574.682]
 /Subtype /Link
 /A << /S /GoTo /D (page.425) >>
 >> endobj
-12540 0 obj <<
+12528 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.476 548.992 417.832 560.682]
 /Subtype /Link
 /A << /S /GoTo /D (page.307) >>
 >> endobj
-12541 0 obj <<
+12529 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [343.93 534.991 362.286 546.681]
 /Subtype /Link
 /A << /S /GoTo /D (page.237) >>
 >> endobj
-12542 0 obj <<
+12530 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [396.173 520.384 414.529 533.286]
 /Subtype /Link
 /A << /S /GoTo /D (page.509) >>
 >> endobj
-12543 0 obj <<
+12531 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [360.445 506.99 378.802 518.679]
 /Subtype /Link
 /A << /S /GoTo /D (page.323) >>
 >> endobj
-12544 0 obj <<
+12532 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.476 506.99 401.832 518.679]
 /Subtype /Link
 /A << /S /GoTo /D (page.339) >>
 >> endobj
-12545 0 obj <<
+12533 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [365.142 492.989 383.499 504.678]
 /Subtype /Link
 /A << /S /GoTo /D (page.788) >>
 >> endobj
-12546 0 obj <<
+12534 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [408.93 478.988 427.287 490.677]
 /Subtype /Link
 /A << /S /GoTo /D (page.305) >>
 >> endobj
-12547 0 obj <<
+12535 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.082 464.987 422.438 476.677]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-12548 0 obj <<
+12536 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.469 450.986 437.825 462.676]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-12549 0 obj <<
+12537 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.187 450.986 460.543 462.676]
 /Subtype /Link
 /A << /S /GoTo /D (page.579) >>
 >> endobj
-12550 0 obj <<
+12538 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.567 436.985 461.923 448.675]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-12551 0 obj <<
+12539 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.597 422.985 420.953 434.674]
 /Subtype /Link
 /A << /S /GoTo /D (page.307) >>
 >> endobj
-12552 0 obj <<
+12540 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [425.627 422.985 443.984 434.674]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-12553 0 obj <<
+12541 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 397.556 354.864 406.579]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-12554 0 obj <<
+12542 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [427.112 381.434 445.468 393.123]
 /Subtype /Link
 /A << /S /GoTo /D (page.606) >>
 >> endobj
-12555 0 obj <<
+12543 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [371.021 367.433 389.377 379.122]
 /Subtype /Link
 /A << /S /GoTo /D (page.234) >>
 >> endobj
-12556 0 obj <<
+12544 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.052 367.433 412.408 379.122]
 /Subtype /Link
 /A << /S /GoTo /D (page.238) >>
 >> endobj
-12557 0 obj <<
+12545 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.082 367.433 435.438 379.122]
 /Subtype /Link
 /A << /S /GoTo /D (page.579) >>
 >> endobj
-12558 0 obj <<
+12546 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.324 353.432 429.681 365.121]
 /Subtype /Link
 /A << /S /GoTo /D (page.115) >>
 >> endobj
-12559 0 obj <<
+12547 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [408.597 339.431 426.953 351.121]
 /Subtype /Link
 /A << /S /GoTo /D (page.106) >>
 >> endobj
-12560 0 obj <<
+12548 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.415 325.43 433.771 337.12]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-12561 0 obj <<
+12549 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.597 311.429 441.953 323.725]
 /Subtype /Link
 /A << /S /GoTo /D (page.109) >>
 >> endobj
-12562 0 obj <<
+12550 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [334.233 297.429 352.59 309.118]
 /Subtype /Link
 /A << /S /GoTo /D (page.456) >>
 >> endobj
-12563 0 obj <<
+12551 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [357.264 297.429 375.62 309.118]
 /Subtype /Link
 /A << /S /GoTo /D (page.491) >>
 >> endobj
-12564 0 obj <<
+12552 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [380.294 297.429 398.65 309.118]
 /Subtype /Link
 /A << /S /GoTo /D (page.526) >>
 >> endobj
-12565 0 obj <<
+12553 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [365.809 283.428 384.165 295.117]
 /Subtype /Link
 /A << /S /GoTo /D (page.500) >>
 >> endobj
-12566 0 obj <<
+12554 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.688 269.427 406.044 281.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.496) >>
 >> endobj
-12567 0 obj <<
+12555 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.506 255.426 405.862 267.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.499) >>
 >> endobj
-12568 0 obj <<
+12556 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.536 255.426 428.893 267.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.534) >>
 >> endobj
-12569 0 obj <<
+12557 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.082 241.425 437.438 253.115]
 /Subtype /Link
 /A << /S /GoTo /D (page.507) >>
 >> endobj
-12570 0 obj <<
+12558 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [361.052 227.424 379.408 239.114]
 /Subtype /Link
 /A << /S /GoTo /D (page.523) >>
 >> endobj
-12571 0 obj <<
+12559 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.718 213.424 419.074 225.113]
 /Subtype /Link
 /A << /S /GoTo /D (page.475) >>
 >> endobj
-12572 0 obj <<
+12560 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [325.364 199.423 338.266 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.51) >>
 >> endobj
-12573 0 obj <<
+12561 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [342.511 199.423 355.413 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.66) >>
 >> endobj
-12574 0 obj <<
+12562 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.659 199.423 372.56 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.69) >>
 >> endobj
-12575 0 obj <<
+12563 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [376.806 199.423 389.707 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.99) >>
 >> endobj
-12576 0 obj <<
+12564 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [393.953 199.423 412.309 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-12577 0 obj <<
+12565 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.555 199.423 434.911 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.107) >>
 >> endobj
-12578 0 obj <<
+12566 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 199.423 457.513 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.109) >>
 >> endobj
-12579 0 obj <<
+12567 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 185.874 354.864 197.442]
 /Subtype /Link
 /A << /S /GoTo /D (page.111) >>
 >> endobj
-12580 0 obj <<
+12568 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [358.569 172.324 376.925 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.112) >>
 >> endobj
-12581 0 obj <<
+12569 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [380.629 172.324 398.986 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.114) >>
 >> endobj
-12582 0 obj <<
+12570 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.448 172.324 420.804 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.116) >>
 >> endobj
-12583 0 obj <<
+12571 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.508 172.324 442.864 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.154) >>
 >> endobj
-12584 0 obj <<
+12572 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.569 172.324 464.925 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.159) >>
 >> endobj
-12585 0 obj <<
+12573 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 158.775 354.864 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.160) >>
 >> endobj
-12586 0 obj <<
+12574 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.17 158.775 380.526 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.179) >>
 >> endobj
-12587 0 obj <<
+12575 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.832 158.775 406.188 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.189) >>
 >> endobj
-12588 0 obj <<
+12576 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.494 158.775 431.851 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-12589 0 obj <<
+12577 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 158.775 457.513 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-12590 0 obj <<
+12578 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 145.226 354.864 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.223) >>
 >> endobj
-12591 0 obj <<
+12579 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.17 145.226 380.526 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-12592 0 obj <<
+12580 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.832 145.226 406.188 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-12593 0 obj <<
+12581 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.494 145.226 431.851 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.288) >>
 >> endobj
-12594 0 obj <<
+12582 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 145.226 457.513 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-12595 0 obj <<
+12583 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 131.677 354.864 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.296) >>
 >> endobj
-12596 0 obj <<
+12584 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [358.569 131.677 376.925 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.303) >>
 >> endobj
-12597 0 obj <<
+12585 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [380.629 131.677 398.986 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.371) >>
 >> endobj
-12598 0 obj <<
+12586 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.448 131.677 420.804 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-12599 0 obj <<
+12587 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.508 131.677 442.864 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.378) >>
 >> endobj
-12600 0 obj <<
+12588 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.569 131.677 464.925 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.403) >>
 >> endobj
-12601 0 obj <<
+12589 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 118.128 354.864 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.567) >>
 >> endobj
-12602 0 obj <<
+12590 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.17 118.128 380.526 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.574) >>
 >> endobj
-12603 0 obj <<
+12591 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.832 118.128 406.188 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.603) >>
 >> endobj
-12604 0 obj <<
+12592 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.494 118.128 431.851 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.607) >>
 >> endobj
-12605 0 obj <<
+12593 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 118.128 457.513 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.609) >>
 >> endobj
-12618 0 obj <<
-/D [12616 0 R /XYZ 100.892 685.529 null]
+12606 0 obj <<
+/D [12604 0 R /XYZ 100.892 685.529 null]
 >> endobj
-12615 0 obj <<
+12603 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12718 0 obj <<
-/Length 1425      
+12707 0 obj <<
+/Length 1431      
 /Filter /FlateDecode
 >>
 stream
 xڝX[s£6~÷¯àÏ‚Ð
-=¦Éfë^ÒĝéÌvdÐÚ´`\³ÙþúJ'Ž#ìÇãHŸ>ËwÎQ¬ƒ$ø8ûq9»ºÃI ’˜%˯À ¦	HÆbÌP°,‚Ïa†ÈüËòÓÕ]šYÌAz)LPLÕ’Ä,zܯþ¹œG£p±-ijÞ3û°œý;j‘:æÇy=ûü%	
-õ¿OAC–ßú•u qŒÕ÷*xœý>KÊÉ1u€ßPg Æ8
-bqOQ³" ô4ûÔO?œüaŠC}Ö!µŽùá¡ÄL­K‚À#f.D2	!)ðY‡Bš¦^x€oŽ ‹3zvRÃîúöqÞ/¿½±žNÝ‘ûÉÉþ¢©y¹µb¤õbœ2xÎYó¼õ<ÍÂÕ<RŸ¢íìȶ#ŸZ¡æ[¾­Ã؏^—ÏSnDÍ×LÆqŠ§9&!ß梘GÑpysµ¸×ßI˜7Û¿€Öû–˲95ø‘‹U.öp ecq0ʇjêRÙÀnÈwÁw+nЈŠZ½ïÄ<a;a§¿X!I‚¦!›¶à«JØ]ïëF»ý›þx9Äê6’e㾿»ÿÙJ‘‰ÐW
-¡›¦“]Þ–;i¥€è„Çïí¦qEʁúâOë>À¨—”@†¼ÓlÜEÕºiK¹©ËüF»]¹]_þ¼*yg`Öm³ßÙ%ÒQËðªâ£_Îó\töˆ†d"üÞ"Évˆf©¾ô¡W«’C€ØÔ)­àÅw$žKN
-Ê&î-E»UÊð4$F¯GšdSiâÉpT•ÓUÊXØõŒd㺨$µúþŸ|ZpÉí0¿Ú¶ÙêK}¯›½ÝÈ =12`1Kñ[6»¶ìa‰zU¨'­|VéWîYí»è›Ê€ƒÁE{Zô†§íº–çš«3’ÁT–¾GԕĨ*Hg.Ò„±sÑû¸›BÏãë_,oê]Y9J3¥Säz——y¹ãr¸ïWås^VûV8ÊOˆû…ݹS]Ân§NÕöÎ!µã’Ïõö¼/ýDZæj}”b$rû
-x•ïw]ü´-"]aiØ™s¶¡ŸÞôU;—BFTS[ž.I)ª8O•8K+„(õi…ŽH›V£øêj.Á^‘·Íýé_%U$¦$
-pšÅ0wŸÑσYG<œaäÃÀó.("‹+Ž¯¦".Ö¡ùÝ1·¬À-ï¤C]:¦ðú–Àˆ‘7àsÔmDU9B†NàÈh-¤]Eˆ5/Æ¿~Ðôoîôço<D?ýr­ËÕMôË-¶—–ÓÙô”K›k¬ª€¹t)*`ãž»~¸¿zPó:&{Cþ
-ðx³è#hᕃ®\%zuÏ„O:F©¥x–bÙ˜·xוëAíÛr½é'´Ñ‘
-&xÜ]=¢úևŭ£ÇžFé¤.eŽ÷‡djûPÊ>3÷9—’›Ø3U}]¬\Zíh0_Ì,e[®öR8Ê:›âav;æf0‘Ìû¢”ï{²‘¹ãÔ±6v.ö•p at M8z/7öLAãUûBn7§™ßãפåFš=.…_Kädgf|ö2º£Î…-’œžƒ¢¦ñs’²³ÐmS%UÅÚã}*ôp¾~zõC#~hô‚€Äë10ìõ˜ü®$:ðR ½ðRDÎ{œÆ™gMDÀ=³¾ ­ŒÿÓÏ#Û‘|Ô†D¦âk×¼PvŽą́P[ób;Ò¾8±ñ8to:fý¨
-/¢7ÆmS9fI|®~¢YñÎ.ž¦š—õºWóoçËlQãB¾-»º;Ëx
-y´v¡Ë)¿–eS9®ï•*/gd£óã‡åìÖû|Ž
+=¦Éfë^ÒĝéÌvÐÚ´`\³ÙþúJ'Ž#È‹ãq¤OŸÎå;ç(	6A|\ü¸^\Üà$ IÌ‚õ× `Ó$c1f(XÁç0Cdùeýéâ&Mƒ,f„ ½&(¦jIbÝþ¹\F£pµ+Ä“Þ³ø°^ü» j‘:æÇy½øü%	
+õ¿OAC–ßú•u qŒÕ÷*¸_ü¾HÊÉ)u€_Qg Æ8
+bqOQ³" ô4ŽûÔO?œýaŠC}Ö!µŽùá¡ÄL­K‚À#f.D2	!)ðY‡Bš¦^x€¯Ž ‹3zvRÃîòú~Ù/¿¾²žÎÝ‘ûÉÙþ¢©y¹³b¤õbœ28ç¬e^‹z™fáÃ2RŸ¢íìȶ#Ÿ[¡æ;¾­Ã؏^—/SnEÍ×LÆqŠÇ%&!ßå¢XFÑp}u{±ºÕßI˜7»¿€6‡–˲97ø‰‹U.öp ecq0ʏ‡jêRÙÀnÈ7ÁwƝ+nЈŠZ}èÄ2a»a§¿X!I‚¦!›¶à•0°ûÞ׍vû7ýñ|ˆÕm$ËÆ}sû³•"¡¯6B·M'»¼-÷ÒJÑ	ßÜÛM㊔#õÕŸÖ}€Q/)y%&¦Ù¸‹ªMÓ–r[—ù1öûr·yWøóªäÙ´Íao—HG-ëjˆ~9ÏsÑÙ#’‰ð{$ÛÃ1š¥úÒ‡^qªJbS§´‚ß
+x*U894(›¸·íN)Ã㐽i’M¥‰[$ÃQUÎCT)ca×3’ë¢’ÔêûbðiÁ%·3Àpüj»f§/õ½nv#ƒôÌÈ€Å,ůÙìÛ²‡$êE¡µòY¥_¹o<dµï¢o*Ží´èOÛu
+,Ï5Wg$ƒ©,}‹¨+‰QU4Î\¤	csÑû¸›BÏãË_ïW,oê}Y9J3¥Säz——y¹çr¸ïWås^V‡V8ÊOˆÛ•Ý¹S]Â~¯NÕöÎ!µã’Ïõö¼/ý§±æj}”b$rûx‘ö]ü¸+"]aiØ™s¶¡Ï oúªK!£NªŒ©­ˆè\,%)EX­›*]–V¿FQêÓ2\δ$ÅWW‚ö;™¼Îÿ*I#1%i€Ó,F€¹˜¸û‘ÞÈlÌ:âç’ÍpÆq0z<‘Åe§WS‘ëüŽeVà–wÒ¡TÈ.1Sx}ë`ÄÈð)궢ª!C'pd´Ò®6Äš¿Gã_ÞiúW7úó·?~¹Ôeí*úåÛKÐù{Î¥Í5ÖVUÊ\º”°qÏ]ÞÝ^Ü©e…½q¸¿Zõ´òÊAW®
+½ºlB‰'£èR<I±lÌ[¼ëÊÍPÚr³í'¹ÑÑ&xÜ]=¢úÛ»Õµ£ŸFé¤.yŽwŠdjûP:Ê>
+6÷9—’›Ø3ÕS<¸´Úш>›Yʶ|8Há(ÿlŠ‡Ù혯ÁD2ŠR¾íÝFæŒS_ÄÚع8TÂ5áèƒÜÚ3[Tí¹H8Üœf~d“v”[ql
+¹~­“C@’Í:ÌøìyŽt=ZÍ…-’œÎAQSûœÁˆ¤lºmú¤ªX{¼CP%€Î×O´~hčÒù& ‰×£3`ØëÑùMItॠz᥈Ì{ÄÆ™gMDÀ=Û>£=)þ§Ÿ[v…#ù¨
+‰LÅ×0*o„yÉìĄ̂P[ó²;Ò¾8±ñ8to:fýø
+ßE;oŒ-Ú¦rÌœø]¸ú)çwvñ„4}¨y¯{õ1ÿvp~Ÿ-ja\ÈweWw³Ì§Gkz?å—²l*Çå­Rå•ãŒlt~ü°^ü`G„®
 endstream
 endobj
-12717 0 obj <<
+12706 0 obj <<
 /Type /Page
-/Contents 12718 0 R
-/Resources 12716 0 R
+/Contents 12707 0 R
+/Resources 12705 0 R
 /MediaBox [0 0 612 792]
-/Parent 12226 0 R
-/Annots [ 12606 0 R 12607 0 R 12608 0 R 12609 0 R 12610 0 R 12611 0 R 12612 0 R 12613 0 R 12614 0 R 12619 0 R 12620 0 R 12621 0 R 12622 0 R 12623 0 R 12624 0 R 12625 0 R 12626 0 R 12627 0 R 12628 0 R 12629 0 R 12630 0 R 12631 0 R 12632 0 R 12633 0 R 12634 0 R 12635 0 R 12636 0 R 12637 0 R 12638 0 R 12639 0 R 12640 0 R 12641 0 R 12642 0 R 12643 0 R 12644 0 R 12645 0 R 12646 0 R 12647 0 R 12648 0 R 12649 0 R 12650 0 R 12651 0 R 12652 0 R 12653 0 R 12654 0 R 12655 0 R 12656 0 R 12657 0 R 12658 0 R 12659 0 R 12660 0 R 12661 0 R 12662 0 R 12663 0 R 12664 0 R 12665 0 R 12666 0 R 12667 0 R 12668 0 R 12669 0 R 12670 0 R 12671 0 R 12672 0 R 12673 0 R 12674 0 R 12675 0 R 12676 0 R 12677 0 R 12678 0 R 12679 0 R 12680 0 R 12681 0 R 12682 0 R 12683 0 R 12684 0 R 12685 0 R 12686 0 R 12687 0 R 12688 0 R 12689 0 R 12690 0 R 12691 0 R 12692 0 R 12693 0 R 12694 0 R 12695 0 R 12696 0 R 12697 0 R 12698 0 R 12699 0 R 12700 0 R 12701 0 R 12702 0 R 12703 0 R 12704 0 R 12705 0 R 12706 0 R 12707 0 R 12708 0 R 12709 0 R 12710 0 R 12711 0 R 12712 0 R 12713 0 R 12714 0 R ]
+/Parent 12214 0 R
+/Annots [ 12594 0 R 12595 0 R 12596 0 R 12597 0 R 12598 0 R 12599 0 R 12600 0 R 12601 0 R 12602 0 R 12607 0 R 12608 0 R 12609 0 R 12610 0 R 12611 0 R 12612 0 R 12613 0 R 12614 0 R 12615 0 R 12616 0 R 12617 0 R 12618 0 R 12619 0 R 12620 0 R 12621 0 R 12622 0 R 12623 0 R 12624 0 R 12625 0 R 12626 0 R 12627 0 R 12628 0 R 12629 0 R 12630 0 R 12631 0 R 12632 0 R 12633 0 R 12634 0 R 12635 0 R 12636 0 R 12637 0 R 12638 0 R 12639 0 R 12640 0 R 12641 0 R 12642 0 R 12643 0 R 12644 0 R 12645 0 R 12646 0 R 12647 0 R 12648 0 R 12649 0 R 12650 0 R 12651 0 R 12652 0 R 12653 0 R 12654 0 R 12655 0 R 12656 0 R 12657 0 R 12658 0 R 12659 0 R 12660 0 R 12661 0 R 12662 0 R 12663 0 R 12664 0 R 12665 0 R 12666 0 R 12667 0 R 12668 0 R 12669 0 R 12670 0 R 12671 0 R 12672 0 R 12673 0 R 12674 0 R 12675 0 R 12676 0 R 12677 0 R 12678 0 R 12679 0 R 12680 0 R 12681 0 R 12682 0 R 12683 0 R 12684 0 R 12685 0 R 12686 0 R 12687 0 R 12688 0 R 12689 0 R 12690 0 R 12691 0 R 12692 0 R 12693 0 R 12694 0 R 12695 0 R 12696 0 R 12697 0 R 12698 0 R 12699 0 R 12700 0 R 12701 0 R 12702 0 R 12703 0 R ]
 >> endobj
-12606 0 obj <<
+12594 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 646.546 208.912 657.69]
 /Subtype /Link
 /A << /S /GoTo /D (page.611) >>
 >> endobj
-12607 0 obj <<
+12595 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.218 646.546 234.574 657.69]
 /Subtype /Link
 /A << /S /GoTo /D (page.631) >>
 >> endobj
-12608 0 obj <<
+12596 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.88 646.546 260.236 657.69]
 /Subtype /Link
 /A << /S /GoTo /D (page.639) >>
 >> endobj
-12609 0 obj <<
+12597 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [267.542 646.546 285.898 657.69]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-12610 0 obj <<
+12598 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.204 646.546 311.56 657.69]
 /Subtype /Link
 /A << /S /GoTo /D (page.660) >>
 >> endobj
-12611 0 obj <<
+12599 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 632.997 208.912 644.141]
 /Subtype /Link
 /A << /S /GoTo /D (page.706) >>
 >> endobj
-12612 0 obj <<
+12600 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.586 632.997 231.942 644.141]
 /Subtype /Link
 /A << /S /GoTo /D (page.716) >>
 >> endobj
-12613 0 obj <<
+12601 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.616 632.997 254.972 644.141]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-12614 0 obj <<
+12602 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.646 632.997 278.003 644.141]
 /Subtype /Link
 /A << /S /GoTo /D (page.813) >>
 >> endobj
-12619 0 obj <<
+12607 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.796 619.061 218.152 630.629]
 /Subtype /Link
 /A << /S /GoTo /D (page.111) >>
 >> endobj
-12620 0 obj <<
+12608 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.735 605.124 237.091 616.814]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-12621 0 obj <<
+12609 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.766 605.124 260.122 616.814]
 /Subtype /Link
 /A << /S /GoTo /D (page.293) >>
 >> endobj
-12622 0 obj <<
+12610 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [264.887 591.188 283.243 602.878]
 /Subtype /Link
 /A << /S /GoTo /D (page.285) >>
 >> endobj
-12623 0 obj <<
+12611 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.22 577.252 242.576 588.82]
 /Subtype /Link
 /A << /S /GoTo /D (page.115) >>
 >> endobj
-12624 0 obj <<
+12612 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.887 563.316 236.243 575.005]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-12625 0 obj <<
+12613 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 537.951 208.912 546.974]
 /Subtype /Link
 /A << /S /GoTo /D (page.129) >>
 >> endobj
-12626 0 obj <<
+12614 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [209.553 521.894 227.91 533.583]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-12627 0 obj <<
+12615 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.553 507.957 228.91 519.647]
 /Subtype /Link
 /A << /S /GoTo /D (page.604) >>
 >> endobj
-12628 0 obj <<
+12616 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.22 494.021 254.576 505.711]
 /Subtype /Link
 /A << /S /GoTo /D (page.688) >>
 >> endobj
-12629 0 obj <<
+12617 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [186.917 480.085 205.273 491.653]
 /Subtype /Link
 /A << /S /GoTo /D (page.461) >>
 >> endobj
-12630 0 obj <<
+12618 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [245.932 466.148 264.288 477.838]
 /Subtype /Link
 /A << /S /GoTo /D (page.470) >>
 >> endobj
-12631 0 obj <<
+12619 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [178.735 452.212 197.091 463.78]
 /Subtype /Link
 /A << /S /GoTo /D (page.690) >>
 >> endobj
-12632 0 obj <<
+12620 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.675 438.276 196.031 449.844]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-12633 0 obj <<
+12621 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.705 438.276 219.061 449.844]
 /Subtype /Link
 /A << /S /GoTo /D (page.394) >>
 >> endobj
-12634 0 obj <<
+12622 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.735 438.276 242.091 449.844]
 /Subtype /Link
 /A << /S /GoTo /D (page.578) >>
 >> endobj
-12635 0 obj <<
+12623 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [256.19 424.339 274.546 436.029]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-12636 0 obj <<
+12624 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [209.584 410.403 227.94 422.093]
 /Subtype /Link
 /A << /S /GoTo /D (page.237) >>
 >> endobj
-12637 0 obj <<
+12625 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [214.159 396.467 232.516 408.156]
 /Subtype /Link
 /A << /S /GoTo /D (page.364) >>
 >> endobj
-12638 0 obj <<
+12626 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [262.675 382.531 281.031 394.22]
 /Subtype /Link
 /A << /S /GoTo /D (page.294) >>
 >> endobj
-12639 0 obj <<
+12627 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [222.372 368.594 240.728 380.284]
 /Subtype /Link
 /A << /S /GoTo /D (page.118) >>
 >> endobj
-12640 0 obj <<
+12628 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.584 354.658 267.94 366.347]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-12641 0 obj <<
+12629 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.675 340.722 216.031 352.411]
 /Subtype /Link
 /A << /S /GoTo /D (page.685) >>
 >> endobj
-12642 0 obj <<
+12630 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.978 326.785 240.334 338.475]
 /Subtype /Link
 /A << /S /GoTo /D (page.753) >>
 >> endobj
-12643 0 obj <<
+12631 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.766 312.849 229.122 323.993]
 /Subtype /Link
 /A << /S /GoTo /D (page.124) >>
 >> endobj
-12644 0 obj <<
+12632 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.297 298.913 245.198 310.312]
 /Subtype /Link
 /A << /S /GoTo /D (page.20) >>
 >> endobj
-12645 0 obj <<
+12633 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [257.479 284.976 270.38 296.666]
 /Subtype /Link
 /A << /S /GoTo /D (page.20) >>
 >> endobj
-12646 0 obj <<
+12634 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [243.008 271.04 261.364 282.184]
 /Subtype /Link
 /A << /S /GoTo /D (page.178) >>
 >> endobj
-12647 0 obj <<
+12635 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.978 257.104 278.334 268.793]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-12648 0 obj <<
+12636 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.402 243.167 260.758 254.311]
 /Subtype /Link
 /A << /S /GoTo /D (page.697) >>
 >> endobj
-12649 0 obj <<
+12637 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.008 229.231 246.364 240.921]
 /Subtype /Link
 /A << /S /GoTo /D (page.779) >>
 >> endobj
-12650 0 obj <<
+12638 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [238.008 215.295 256.364 226.984]
 /Subtype /Link
 /A << /S /GoTo /D (page.687) >>
 >> endobj
-12651 0 obj <<
+12639 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [176.917 201.358 195.273 212.927]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-12652 0 obj <<
+12640 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [209.25 187.422 227.607 199.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.570) >>
 >> endobj
-12653 0 obj <<
+12641 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.038 173.486 264.394 185.175]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-12654 0 obj <<
+12642 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [307.523 158.943 325.879 171.845]
 /Subtype /Link
 /A << /S /GoTo /D (page.500) >>
 >> endobj
-12655 0 obj <<
+12643 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [274.372 145.007 292.728 157.909]
 /Subtype /Link
-/A << /S /GoTo /D (page.454) >>
+/A << /S /GoTo /D (page.453) >>
 >> endobj
-12656 0 obj <<
+12644 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [296.432 145.007 314.788 157.909]
 /Subtype /Link
+/A << /S /GoTo /D (page.454) >>
+>> endobj
+12645 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [190.555 132.064 208.912 143.208]
+/Subtype /Link
 /A << /S /GoTo /D (page.467) >>
 >> endobj
-12657 0 obj <<
+12646 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [190.555 134.185 208.912 143.208]
+/Rect [213.586 132.064 231.942 143.208]
 /Subtype /Link
 /A << /S /GoTo /D (page.477) >>
 >> endobj
-12658 0 obj <<
+12647 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [231.311 117.522 249.667 130.423]
 /Subtype /Link
 /A << /S /GoTo /D (page.465) >>
 >> endobj
-12659 0 obj <<
+12648 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.341 117.522 272.698 130.423]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-12660 0 obj <<
+12649 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [458.467 645.94 476.823 658.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.465) >>
 >> endobj
-12661 0 obj <<
+12650 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [480.528 645.94 498.884 658.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-12662 0 obj <<
+12651 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [502.588 645.94 520.945 658.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-12663 0 obj <<
+12652 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 635.118 405.674 644.141]
 /Subtype /Link
 /A << /S /GoTo /D (page.500) >>
 >> endobj
-12664 0 obj <<
+12653 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [504.285 618.842 522.642 631.743]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-12665 0 obj <<
+12654 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [485.528 605.293 503.884 618.194]
 /Subtype /Link
 /A << /S /GoTo /D (page.479) >>
 >> endobj
-12666 0 obj <<
+12655 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [475.437 591.743 493.793 604.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.454) >>
 >> endobj
-12667 0 obj <<
+12656 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.982 578.194 461.338 591.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.467) >>
 >> endobj
-12668 0 obj <<
+12657 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.073 565.251 406.429 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.560) >>
 >> endobj
-12669 0 obj <<
+12658 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [474.437 551.702 492.793 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.116) >>
 >> endobj
-12670 0 obj <<
+12659 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.861 538.153 429.217 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-12671 0 obj <<
+12660 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.982 523.997 432.338 536.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.661) >>
 >> endobj
-12672 0 obj <<
+12661 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [384.437 511.054 402.793 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-12673 0 obj <<
+12662 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.467 511.054 425.823 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.673) >>
 >> endobj
-12674 0 obj <<
+12663 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.497 511.054 448.854 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.676) >>
 >> endobj
-12675 0 obj <<
+12664 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.164 497.505 425.52 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-12676 0 obj <<
+12665 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.437 483.956 431.793 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.305) >>
 >> endobj
-12677 0 obj <<
+12666 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.588 470.407 435.944 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.235) >>
 >> endobj
-12678 0 obj <<
+12667 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.982 456.858 419.338 468.257]
 /Subtype /Link
 /A << /S /GoTo /D (page.810) >>
 >> endobj
-12679 0 obj <<
+12668 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.376 443.308 428.732 454.708]
 /Subtype /Link
 /A << /S /GoTo /D (page.231) >>
 >> endobj
-12680 0 obj <<
+12669 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.346 429.759 423.702 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.753) >>
 >> endobj
-12681 0 obj <<
+12670 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [396.588 416.21 414.944 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.219) >>
 >> endobj
-12682 0 obj <<
+12671 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.891 402.661 419.247 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.717) >>
 >> endobj
-12683 0 obj <<
+12672 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.8 389.112 447.157 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.552) >>
 >> endobj
-12684 0 obj <<
+12673 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.467 375.562 435.823 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.555) >>
 >> endobj
-12685 0 obj <<
+12674 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [375.952 362.013 394.308 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.643) >>
 >> endobj
-12686 0 obj <<
+12675 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.952 348.464 438.308 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.228) >>
 >> endobj
-12687 0 obj <<
+12676 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.982 348.464 461.338 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.717) >>
 >> endobj
-12688 0 obj <<
+12677 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.225 334.915 431.581 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-12689 0 obj <<
+12678 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [436.255 334.915 454.611 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.108) >>
 >> endobj
-12690 0 obj <<
+12679 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [440.649 321.366 459.005 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.108) >>
 >> endobj
-12691 0 obj <<
+12680 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.285 307.816 437.641 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.112) >>
 >> endobj
-12692 0 obj <<
+12681 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [454.558 294.267 472.914 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.629) >>
 >> endobj
-12693 0 obj <<
+12682 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.361 280.718 436.262 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.44) >>
 >> endobj
-12694 0 obj <<
+12683 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.376 280.718 454.277 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.48) >>
 >> endobj
-12695 0 obj <<
+12684 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [459.391 280.718 472.292 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.64) >>
 >> endobj
-12696 0 obj <<
+12685 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [477.406 280.718 490.307 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.68) >>
 >> endobj
-12697 0 obj <<
+12686 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [495.42 280.718 508.322 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.77) >>
 >> endobj
-12698 0 obj <<
+12687 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 267.169 405.674 278.313]
 /Subtype /Link
 /A << /S /GoTo /D (page.110) >>
 >> endobj
-12699 0 obj <<
+12688 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.98 267.169 431.336 278.313]
 /Subtype /Link
 /A << /S /GoTo /D (page.195) >>
 >> endobj
-12700 0 obj <<
+12689 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.642 267.169 456.998 278.313]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-12701 0 obj <<
+12690 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.304 267.169 482.66 278.313]
 /Subtype /Link
 /A << /S /GoTo /D (page.213) >>
 >> endobj
-12702 0 obj <<
+12691 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 267.169 508.322 278.313]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-12703 0 obj <<
+12692 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 253.62 405.674 264.764]
 /Subtype /Link
 /A << /S /GoTo /D (page.586) >>
 >> endobj
-12704 0 obj <<
+12693 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.348 253.62 428.704 264.764]
 /Subtype /Link
 /A << /S /GoTo /D (page.641) >>
 >> endobj
-12705 0 obj <<
+12694 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.544 240.07 430.9 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.107) >>
 >> endobj
-12706 0 obj <<
+12695 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [456.619 226.521 469.52 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.66) >>
 >> endobj
-12707 0 obj <<
+12696 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [483.285 212.972 496.187 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.66) >>
 >> endobj
-12708 0 obj <<
+12697 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [465.043 199.423 483.399 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.723) >>
 >> endobj
-12709 0 obj <<
+12698 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [459.619 185.874 477.975 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.575) >>
 >> endobj
-12710 0 obj <<
+12699 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [468.437 172.324 486.793 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-12711 0 obj <<
+12700 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [486.861 158.775 505.217 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.573) >>
 >> endobj
-12712 0 obj <<
+12701 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [483.346 145.226 501.702 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.575) >>
 >> endobj
-12713 0 obj <<
+12702 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [466.922 131.677 485.278 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.573) >>
 >> endobj
-12714 0 obj <<
+12703 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [484.588 118.128 502.945 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.578) >>
 >> endobj
-12719 0 obj <<
-/D [12717 0 R /XYZ 151.701 685.529 null]
+12708 0 obj <<
+/D [12706 0 R /XYZ 151.701 685.529 null]
 >> endobj
-12716 0 obj <<
+12705 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12831 0 obj <<
-/Length 1488      
+12820 0 obj <<
+/Length 1487      
 /Filter /FlateDecode
 >>
 stream
 xڝYÛŽÛ6}÷WèQb…II|Œ»I±A‘´´H”–¸^ueÉ¡äM¶ýùŽ.öÚ2iRûb4uæv8œ!oã!ïçÙr5{ý.½$àQD½Õ‡
-zQÂÆa)ó>ûŸöëdÚÌ„Qÿ¶Ìäù×Õû×ï‚ýG·ƒ„Ä Ü=”иÝ5{»š}›aX…Í'ð, ÄK·³Ï_‘—Áï=žxß»[°$ˆƒß…÷iöÛªŒÙ©à#(åAgF+^ì›{YÎÃÄoòT4yU‚ú„øJnò­|Õ©vÀô>Ã_ÔÇ(>_FÞ“ iÈ]ñ4Oˆ¯A%>ÆøE¨µTó0ö¥ÒÂ&ñ‹QóTo?3aZ\Z?ՍÜÎXŽVõÛâ©Þ×û%²£T*o à±Å’ú˜%Ø	å*FD\0þí©E`1±Å£Z(™Ve	§S¯g6%ª,ƒú^“¹<.•hdÖ“a§ò>H©ØiYF‘sNI{<‘¦Õ¾lBÓ/¤Jš]†¾»]^n´Pa’L:Æ¡ÖçYcy†–íËL”镼bgzµ›/ UïSÕ€)Ú!³#6-Ì“Ñi4ºÎ·7íãüyûËí›ß[ËþÒ+‚m®ÿ‘¹POC!ù ìº3V*} BbIn-Äãœ1_ä…XçÅûyÓòB@}-f4N˜¦Ô†×í9—]JH§¡²ç€Ò'JâN¹T™—˜ø~Wå›û·Ö£"æÄŽbÓaÒg]{}ê ìRãQŒ{ìõ¢¬:Wf†ðXNÏZ¤­½R{ —>?²˜¹á´VfÚÎÀ;êUfzŽs4£×ç²R˜v.èìL4b-j}¢Äé@b„öAÖÆ|ºñwÀè½’zG<œŽøaz8!‡bëäh÷Ÿ…AÞ¤ð./:¹•Q7aºF	qŠŠ‘Öt,¦wS7k^ö®„Kº£¥ªŠÂPYÇ!q´bˆHUì
-§—6À–G°_28åÜØñ·•EG¡ÇÂ$ ˜tʱ{¡²îêÊÐô$ÚtÃب¨6‡z_4l«ýíΐ¦C¤½¿å£ÐRv7l§`¥ ªpÒšµ¦cûw¢®¿·2*WŸâbYÀ °S¼Ô6®kM‡a‹4¥r} ¾©`G65î{²܁ÍEŸÒÖ	zP‹ýË›KjRÂ|jO¶4Â`°Ó¶(vÛæ&tÌÓ¶ÈmÛ…ÐÿÎÚÑ;÷·_1”!Ÿ4 9x†r¸Ô'‰#7<«#ž\ô8`¨n`_ì°JvÌœðB¹áY£=2(äŽG:æN㎣8î9h¡á!œÞzÊ=wÌü};uß×Ô9äÏEÈC:fÕ5”?rèWeñÔ/×B7TC؏‘%¹öbšçUWumò`lÉÿ¹¨
-]³E¼<ö•w•ûß«›¥¡¯¿žÍ—·nôó;r·}	zŒR^7ݱ!»©¬ûµª¼6˜Œ¸Ë"ž8îãVWpƒ&ÈþdðáíÊàIbi&ÕÓB–mŸ™f”×5X?ߢCe¥4NR‰%h´¼L«íP AÏzZ–›ša•——Ÿ%%s8’Õf¯—ˈËÓð	EW3å¼~øې:-º¨<Ûèk@‚¯ç¯îÉú¤ÐìL[	>ÔS&¶'ºœÅ-h²õ«áE?}ÁX@vxRË9Ã~Û½1¨g‹ºê9…AQÀ¢ã«H6½Ú,ìhé- ÆG,«S‰,µ~°ÃC·W?µ¸2”þY­¡KŒÝòDL“)"sè¯ãeê×û5ÄrÊ@ô™g°[0Ctü0¼¶Àl’š=ž~.J}}×ÿ|Tϱ,ƒ¦˜NQLÉo{©%	t>“‚ß(ñá(5DŸ»a-ÚáM6e„vÁb¥9óKhqD÷òI¶ì54äšÚh\2¿ß®fÿJ¯µˆ
+zQÂÆa)ó>ûŸöëdÚÌ„Qÿ¶Ìäù×Õû×ï‚ýG·ƒ„Ä Ü=”иÝ5{»š}›aX…Í'ð, ÄK·³Ï_‘—Áï=žxß»[°$ˆƒß…÷iöÛªŒÙ©à#(åAgF+^ì›{YÎÃÄoòT4yU‚ú„øJnò­|Õ©vÀô>Ã_ÔÇ(>_FÞ“ iÈ]ñ4Oˆ¯A%>ÆøE¨µTó0ö¥ÒÂ&ñ‹QóTo?3aZ\Z?ՍÜÎXŽVõÛâ©Þ×û%²£T*o à±Å’ú˜%Ø	å*FD\0þí©E`1±Å£Z(™Ve	§S¯g6%ª,ƒú^“¹<.•hdÖ“a§ò>H©ØiYF‘sNI{<‘¦Õ¾lBÓ/¤Jš]†¾»]^n´Pa’L:Æ¡ÖçYcy†–íËL”镼bgzµ›/ UïSÕ€)Ú!³#6-Ì“Ñi4ºÎ·7íãüyûËí›ß[ËþÒ+‚m®ÿ‘¹POC!ù ìº3V*} BbIn-Äãœ1_ä…XçÅûyÓòB@}-f4N˜¦Ô†×í9—]JH§¡²ç€Ò'JâN¹T™—˜ø~Wå›û·Ö£"æÄŽbÓaÒg]{}ê ì;¤Aã{½(«Î•™!<–Ó³i«ÅC¯Ôè¥Ï,fn8­•Ù€¶3ðŽºC•™žãMÁèõ¹¬¦z;X‹Z„(q:a‡}µ1Ÿnü0z¯¤žÁ§#~A˜NÈ¡Ø:9Úýga7)|†Ë‹…NneÔM˜®QBœ¢b¤5‹éÝ”ÁÍš—½+á’îh©ª¢0TÖqH­"R{Åé¥M#°åìןN97vüíAeÄQè±0	(æ‡rì^¨¬»ú…24=‰6Ý06*ªÍ¡ÞM#Ûj»3¤éiïoFùÁè´”Ý
+Û)X©¨*œ´&F­éØþ¨ëï­ŒJAÆÕ§¸˜F0(ìÔo#õ‡„ëZÓ!AØ"M©\_ÅÀ¨o*Ø‘MMG§ûžìw`sÑ燴uƒÔbÿòæ’š”0ŸÚ“-0ì´-ŠÝ¶¹	óô-rÛv!ô¿ó…vôÁνÆíWeÈçÄ
+Hž¡.µÄI"ÆÈ
+ÏjÁˆ'=ŽªØ;샒3'¼FnxÖh
+¹ã‘Ž¹ÓÅŸã($$ŽûFZhx§·žrÏ3ßNÝ÷5uùsòЇŽYu
+åúUY<õ˵Ð
+ÕöcdI®½˜æ¹G•ÃUÝ_Û†<[ò.jC×lQ'/}å]¥ÀÄþ÷êfièë¯góåí‡ýü΁ܭ€D_‚£”—ÃMwlÈîD*ë~­*¯
+&#îIJˆ'Žû¸ÕÜ 	²?|x»2x’ØBšIõ´eÛgf†åu
+ÖÏ·èÐÂAY)“Tb	š-/Ój;@гž–å¦fØBååÇå'CIÉŽdµÙëå2âò4|BÑÕG9¯þ6¤N‹.*Ï6úàëù«{²>)4»ÓV‚õ”‰í‰.gqšlýjxÂOßG0ЄÞƒÔrΰßvoêÙ¢®úGÎ_aP°èøê’M¯6;Zz¨ñÇêT"KE­ìðЭÃÕO-.…¥–Agkèc·<ÓdŠÈú«Ãx™úõ~
+±œ2}æÃìÌ?¯-0›¤f§Ÿ‹R_ßõ?Õs,Ë )¦SSòÛ^jIÏ¤à7J|A8J
+ÑçnX‹vx“M¡]D°‡˜CiÎüZѽ|’í{
+
+¹¦6—Ìãï·«Ùÿ6šµ‡
 endstream
 endobj
-12830 0 obj <<
+12819 0 obj <<
 /Type /Page
-/Contents 12831 0 R
-/Resources 12829 0 R
+/Contents 12820 0 R
+/Resources 12818 0 R
 /MediaBox [0 0 612 792]
-/Parent 12226 0 R
-/Annots [ 12715 0 R 12720 0 R 12721 0 R 12722 0 R 12723 0 R 12724 0 R 12725 0 R 12726 0 R 12727 0 R 12728 0 R 12729 0 R 12730 0 R 12731 0 R 12732 0 R 12733 0 R 12734 0 R 12735 0 R 12736 0 R 12737 0 R 12738 0 R 12739 0 R 12740 0 R 12741 0 R 12742 0 R 12743 0 R 12744 0 R 12745 0 R 12746 0 R 12747 0 R 12748 0 R 12749 0 R 12750 0 R 12751 0 R 12752 0 R 12753 0 R 12754 0 R 12755 0 R 12756 0 R 12757 0 R 12758 0 R 12759 0 R 12760 0 R 12761 0 R 12762 0 R 12763 0 R 12764 0 R 12765 0 R 12766 0 R 12767 0 R 12768 0 R 12769 0 R 12770 0 R 12771 0 R 12772 0 R 12773 0 R 12774 0 R 12775 0 R 12776 0 R 12777 0 R 12778 0 R 12779 0 R 12780 0 R 12781 0 R 12782 0 R 12783 0 R 12784 0 R 12785 0 R 12786 0 R 12787 0 R 12788 0 R 12789 0 R 12790 0 R 12791 0 R 12792 0 R 12793 0 R 12794 0 R 12795 0 R 12796 0 R 12797 0 R 12798 0 R 12799 0 R 12800 0 R 12801 0 R 12802 0 R 12803 0 R 12804 0 R 12805 0 R 12806 0 R 12807 0 R 12808 0 R 12809 0 R 12810 0 R 12811 0 R 12812 0 R 12813 0 R 12814 0 R 12815 0 R 12816 0 R 12817 0 R 12818 0 R 12819 0 R 12820 0 R 12821 0 R 12822 0 R 12823 0 R 12824 0 R 12825 0 R 12826 0 R ]
+/Parent 12214 0 R
+/Annots [ 12704 0 R 12709 0 R 12710 0 R 12711 0 R 12712 0 R 12713 0 R 12714 0 R 12715 0 R 12716 0 R 12717 0 R 12718 0 R 12719 0 R 12720 0 R 12721 0 R 12722 0 R 12723 0 R 12724 0 R 12725 0 R 12726 0 R 12727 0 R 12728 0 R 12729 0 R 12730 0 R 12731 0 R 12732 0 R 12733 0 R 12734 0 R 12735 0 R 12736 0 R 12737 0 R 12738 0 R 12739 0 R 12740 0 R 12741 0 R 12742 0 R 12743 0 R 12744 0 R 12745 0 R 12746 0 R 12747 0 R 12748 0 R 12749 0 R 12750 0 R 12751 0 R 12752 0 R 12753 0 R 12754 0 R 12755 0 R 12756 0 R 12757 0 R 12758 0 R 12759 0 R 12760 0 R 12761 0 R 12762 0 R 12763 0 R 12764 0 R 12765 0 R 12766 0 R 12767 0 R 12768 0 R 12769 0 R 12770 0 R 12771 0 R 12772 0 R 12773 0 R 12774 0 R 12775 0 R 12776 0 R 12777 0 R 12778 0 R 12779 0 R 12780 0 R 12781 0 R 12782 0 R 12783 0 R 12784 0 R 12785 0 R 12786 0 R 12787 0 R 12788 0 R 12789 0 R 12790 0 R 12791 0 R 12792 0 R 12793 0 R 12794 0 R 12795 0 R 12796 0 R 12797 0 R 12798 0 R 12799 0 R 12800 0 R 12801 0 R 12802 0 R 12803 0 R 12804 0 R 12805 0 R 12806 0 R 12807 0 R 12808 0 R 12809 0 R 12810 0 R 12811 0 R 12812 0 R 12813 0 R 12814 0 R 12815 0 R ]
 >> endobj
-12715 0 obj <<
+12704 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.532 646.546 228.888 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.107) >>
 >> endobj
-12720 0 obj <<
+12709 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [202.047 632.931 220.403 644.621]
 /Subtype /Link
 /A << /S /GoTo /D (page.111) >>
 >> endobj
-12721 0 obj <<
+12710 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.986 619.317 219.888 631.006]
 /Subtype /Link
 /A << /S /GoTo /D (page.87) >>
 >> endobj
-12722 0 obj <<
+12711 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.896 605.702 229.252 617.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.587) >>
 >> endobj
-12723 0 obj <<
+12712 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [211.532 592.087 224.434 603.777]
 /Subtype /Link
 /A << /S /GoTo /D (page.64) >>
 >> endobj
-12724 0 obj <<
+12713 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [229.108 592.087 247.464 603.777]
 /Subtype /Link
 /A << /S /GoTo /D (page.707) >>
 >> endobj
-12725 0 obj <<
+12714 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.562 578.472 186.464 590.162]
 /Subtype /Link
 /A << /S /GoTo /D (page.67) >>
 >> endobj
-12726 0 obj <<
+12715 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [168.411 564.857 186.767 576.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.181) >>
 >> endobj
-12727 0 obj <<
+12716 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [158.714 551.243 177.07 562.932]
 /Subtype /Link
 /A << /S /GoTo /D (page.163) >>
 >> endobj
-12728 0 obj <<
+12717 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [170.229 537.628 188.585 549.317]
 /Subtype /Link
 /A << /S /GoTo /D (page.573) >>
 >> endobj
-12729 0 obj <<
+12718 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [176.895 524.013 195.252 535.157]
 /Subtype /Link
 /A << /S /GoTo /D (page.195) >>
 >> endobj
-12730 0 obj <<
+12719 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.532 510.398 175.888 522.088]
 /Subtype /Link
 /A << /S /GoTo /D (page.770) >>
 >> endobj
-12731 0 obj <<
+12720 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.229 496.783 235.585 508.473]
 /Subtype /Link
 /A << /S /GoTo /D (page.400) >>
 >> endobj
-12732 0 obj <<
+12721 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.592 483.169 254.949 494.568]
 /Subtype /Link
 /A << /S /GoTo /D (page.104) >>
 >> endobj
-12733 0 obj <<
+12722 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.289 469.554 217.646 480.953]
 /Subtype /Link
 /A << /S /GoTo /D (page.288) >>
 >> endobj
-12734 0 obj <<
+12723 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [207.865 455.939 226.221 467.338]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-12735 0 obj <<
+12724 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.653 442.324 231.009 454.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.167) >>
 >> endobj
-12736 0 obj <<
+12725 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [188.865 428.709 207.221 440.399]
 /Subtype /Link
 /A << /S /GoTo /D (page.257) >>
 >> endobj
-12737 0 obj <<
+12726 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [158.077 415.095 176.433 426.494]
 /Subtype /Link
 /A << /S /GoTo /D (page.465) >>
 >> endobj
-12738 0 obj <<
+12727 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [168.986 401.48 187.342 413.048]
 /Subtype /Link
 /A << /S /GoTo /D (page.218) >>
 >> endobj
-12739 0 obj <<
+12728 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [194.562 387.865 212.918 399.554]
 /Subtype /Link
 /A << /S /GoTo /D (page.237) >>
 >> endobj
-12740 0 obj <<
+12729 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.774 374.25 176.13 385.94]
 /Subtype /Link
 /A << /S /GoTo /D (page.687) >>
 >> endobj
-12741 0 obj <<
+12730 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [180.805 374.25 199.161 385.94]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-12742 0 obj <<
+12731 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [147.774 360.635 166.13 372.325]
 /Subtype /Link
 /A << /S /GoTo /D (page.124) >>
 >> endobj
-12743 0 obj <<
+12732 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.744 347.021 190.1 358.71]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-12744 0 obj <<
+12733 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [189.956 333.406 208.312 345.095]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-12745 0 obj <<
+12734 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [178.471 319.791 196.827 331.48]
 /Subtype /Link
 /A << /S /GoTo /D (page.305) >>
 >> endobj
-12746 0 obj <<
+12735 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [189.077 306.176 207.433 317.576]
 /Subtype /Link
-/A << /S /GoTo /D (page.456) >>
+/A << /S /GoTo /D (page.455) >>
 >> endobj
-12747 0 obj <<
+12736 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [138.986 281.505 157.343 293.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-12748 0 obj <<
+12737 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [144.138 267.89 162.494 279.58]
 /Subtype /Link
 /A << /S /GoTo /D (page.575) >>
 >> endobj
-12749 0 obj <<
+12738 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.744 254.276 173.1 265.965]
 /Subtype /Link
 /A << /S /GoTo /D (page.724) >>
 >> endobj
-12750 0 obj <<
+12739 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [145.047 240.661 163.403 252.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.690) >>
 >> endobj
-12751 0 obj <<
+12740 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.471 227.046 235.827 238.736]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-12752 0 obj <<
+12741 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.562 213.431 203.464 225.121]
 /Subtype /Link
 /A << /S /GoTo /D (page.68) >>
 >> endobj
-12753 0 obj <<
+12742 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.138 213.431 226.494 225.121]
 /Subtype /Link
 /A << /S /GoTo /D (page.101) >>
 >> endobj
-12754 0 obj <<
+12743 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [231.168 213.431 249.524 225.121]
 /Subtype /Link
 /A << /S /GoTo /D (page.119) >>
 >> endobj
-12755 0 obj <<
+12744 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.017 199.816 201.373 211.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.692) >>
 >> endobj
-12756 0 obj <<
+12745 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.047 186.202 241.403 197.891]
 /Subtype /Link
 /A << /S /GoTo /D (page.690) >>
 >> endobj
-12757 0 obj <<
+12746 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [149.35 172.587 167.706 184.276]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-12758 0 obj <<
+12747 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [172.38 172.587 190.736 184.276]
 /Subtype /Link
 /A << /S /GoTo /D (page.540) >>
 >> endobj
-12759 0 obj <<
+12748 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [140.501 158.972 158.858 170.662]
 /Subtype /Link
 /A << /S /GoTo /D (page.683) >>
 >> endobj
-12760 0 obj <<
+12749 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [163.532 158.972 181.888 170.662]
 /Subtype /Link
 /A << /S /GoTo /D (page.724) >>
 >> endobj
-12761 0 obj <<
+12750 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.138 145.357 246.494 157.047]
 /Subtype /Link
 /A << /S /GoTo /D (page.723) >>
 >> endobj
-12762 0 obj <<
+12751 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [181.774 131.742 200.13 143.432]
 /Subtype /Link
 /A << /S /GoTo /D (page.683) >>
 >> endobj
-12763 0 obj <<
+12752 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.471 118.128 175.827 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.684) >>
 >> endobj
-12764 0 obj <<
+12753 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [368.536 646.546 386.893 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.185) >>
 >> endobj
-12765 0 obj <<
+12754 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [396.112 632.997 414.468 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.208) >>
 >> endobj
-12766 0 obj <<
+12755 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.294 619.448 444.65 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.185) >>
 >> endobj
-12767 0 obj <<
+12756 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [368.021 605.899 386.377 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.746) >>
 >> endobj
-12768 0 obj <<
+12757 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [365.839 592.35 384.196 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.500) >>
 >> endobj
-12769 0 obj <<
+12758 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.87 592.35 407.226 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.501) >>
 >> endobj
-12770 0 obj <<
+12759 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [339.839 578.8 358.196 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.363) >>
 >> endobj
-12771 0 obj <<
+12760 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [368.627 565.251 386.983 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.346) >>
 >> endobj
-12772 0 obj <<
+12761 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [328.378 551.702 341.279 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.48) >>
 >> endobj
-12773 0 obj <<
+12762 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [347.346 551.702 360.247 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.50) >>
 >> endobj
-12774 0 obj <<
+12763 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [366.314 551.702 379.216 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.67) >>
 >> endobj
-12775 0 obj <<
+12764 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.282 551.702 398.184 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.68) >>
 >> endobj
-12776 0 obj <<
+12765 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.25 551.702 417.152 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.85) >>
 >> endobj
-12777 0 obj <<
+12766 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.219 551.702 436.12 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.86) >>
 >> endobj
-12778 0 obj <<
+12767 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.187 551.702 455.088 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.88) >>
 >> endobj
-12779 0 obj <<
+12768 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 538.153 349.41 549.297]
 /Subtype /Link
 /A << /S /GoTo /D (page.91) >>
 >> endobj
-12780 0 obj <<
+12769 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [355.352 538.153 368.254 549.297]
 /Subtype /Link
 /A << /S /GoTo /D (page.93) >>
 >> endobj
-12781 0 obj <<
+12770 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [371.716 538.153 384.617 549.297]
 /Subtype /Link
 /A << /S /GoTo /D (page.97) >>
 >> endobj
-12782 0 obj <<
+12771 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [390.56 538.153 408.916 549.297]
 /Subtype /Link
 /A << /S /GoTo /D (page.108) >>
 >> endobj
-12783 0 obj <<
+12772 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.858 538.153 433.214 549.297]
 /Subtype /Link
 /A << /S /GoTo /D (page.110) >>
 >> endobj
-12784 0 obj <<
+12773 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 538.153 457.513 549.297]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-12785 0 obj <<
+12774 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 524.604 354.864 535.748]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-12786 0 obj <<
+12775 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.17 524.604 380.526 535.748]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-12787 0 obj <<
+12776 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.832 524.604 406.188 535.748]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-12788 0 obj <<
+12777 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.494 524.604 431.851 535.748]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-12789 0 obj <<
+12778 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 524.604 457.513 535.748]
 /Subtype /Link
 /A << /S /GoTo /D (page.286) >>
 >> endobj
-12790 0 obj <<
+12779 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 511.054 354.864 522.198]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-12791 0 obj <<
+12780 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.538 511.054 377.895 522.198]
 /Subtype /Link
 /A << /S /GoTo /D (page.579) >>
 >> endobj
-12792 0 obj <<
+12781 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.569 511.054 400.925 522.198]
 /Subtype /Link
 /A << /S /GoTo /D (page.594) >>
 >> endobj
-12793 0 obj <<
+12782 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.599 511.054 423.955 522.198]
 /Subtype /Link
 /A << /S /GoTo /D (page.723) >>
 >> endobj
-12794 0 obj <<
+12783 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.629 511.054 446.986 522.198]
 /Subtype /Link
 /A << /S /GoTo /D (page.725) >>
 >> endobj
-12795 0 obj <<
+12784 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [331.567 497.505 349.923 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.723) >>
 >> endobj
-12796 0 obj <<
+12785 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.187 483.956 460.543 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.706) >>
 >> endobj
-12797 0 obj <<
+12786 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [384.9 470.407 403.256 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.375) >>
 >> endobj
-12798 0 obj <<
+12787 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [322.173 456.858 340.529 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.166) >>
 >> endobj
-12799 0 obj <<
+12788 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.021 443.308 415.377 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-12800 0 obj <<
+12789 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [331.506 429.759 349.862 441.327]
 /Subtype /Link
 /A << /S /GoTo /D (page.815) >>
 >> endobj
-12801 0 obj <<
+12790 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [354.536 429.759 372.893 441.327]
 /Subtype /Link
 /A << /S /GoTo /D (page.819) >>
 >> endobj
-12802 0 obj <<
+12791 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [396.132 416.21 414.488 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.169) >>
 >> endobj
-12803 0 obj <<
+12792 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.159 416.21 437.516 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.698) >>
 >> endobj
-12804 0 obj <<
+12793 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.187 416.21 460.543 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-12805 0 obj <<
+12794 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.961 402.661 355.317 414.229]
 /Subtype /Link
 /A << /S /GoTo /D (page.160) >>
 >> endobj
-12806 0 obj <<
+12795 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [363.476 389.112 381.832 400.68]
 /Subtype /Link
 /A << /S /GoTo /D (page.813) >>
 >> endobj
-12807 0 obj <<
+12796 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [379.415 375.562 397.771 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-12808 0 obj <<
+12797 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [361.506 362.013 379.862 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.319) >>
 >> endobj
-12809 0 obj <<
+12798 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.688 348.464 432.044 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.366) >>
 >> endobj
-12810 0 obj <<
+12799 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [333.324 334.915 351.68 346.483]
 /Subtype /Link
 /A << /S /GoTo /D (page.685) >>
 >> endobj
-12811 0 obj <<
+12800 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [330.961 321.366 343.862 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.53) >>
 >> endobj
-12812 0 obj <<
+12801 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [350.961 307.816 369.317 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.575) >>
 >> endobj
-12813 0 obj <<
+12802 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [333.052 294.267 351.408 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.313) >>
 >> endobj
-12814 0 obj <<
+12803 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.203 280.718 401.559 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.163) >>
 >> endobj
-12815 0 obj <<
+12804 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [349.476 253.62 362.377 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.92) >>
 >> endobj
-12816 0 obj <<
+12805 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [367.052 253.62 385.408 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-12817 0 obj <<
+12806 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.415 240.07 406.771 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.178) >>
 >> endobj
-12818 0 obj <<
+12807 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.446 240.07 429.802 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.748) >>
 >> endobj
-12819 0 obj <<
+12808 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.749 226.521 443.105 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.167) >>
 >> endobj
-12820 0 obj <<
+12809 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [395.718 212.972 414.074 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.158) >>
 >> endobj
-12821 0 obj <<
+12810 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.112 199.423 414.014 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.92) >>
 >> endobj
-12822 0 obj <<
+12811 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [377.506 185.874 395.862 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.174) >>
 >> endobj
-12823 0 obj <<
+12812 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.445 172.324 400.347 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.77) >>
 >> endobj
-12824 0 obj <<
+12813 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [381.021 158.775 399.377 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.179) >>
 >> endobj
-12825 0 obj <<
+12814 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [379.839 145.226 398.196 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-12826 0 obj <<
+12815 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 120.249 354.864 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.108) >>
 >> endobj
-12832 0 obj <<
-/D [12830 0 R /XYZ 100.892 685.529 null]
+12821 0 obj <<
+/D [12819 0 R /XYZ 100.892 685.529 null]
 >> endobj
-12829 0 obj <<
+12818 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-12940 0 obj <<
+12929 0 obj <<
 /Length 1564      
 /Filter /FlateDecode
 >>
@@ -75142,764 +78867,764 @@
 ‘©/úºbč@´·¬U%!ÔOìgTÁE˜ó;dÏl-jOWÎ`?MœÝ@̨ÌÕ˜‡}/ý“4r8Tþélÿ”b€:¶®Ø±IÒn¸–fâ!O-ýÆKÑZËá•2äà—Rkr;›0à\Yd|!òøStÿ?5[;
 endstream
 endobj
-12939 0 obj <<
+12928 0 obj <<
 /Type /Page
-/Contents 12940 0 R
-/Resources 12938 0 R
+/Contents 12929 0 R
+/Resources 12927 0 R
 /MediaBox [0 0 612 792]
-/Parent 12942 0 R
-/Annots [ 12827 0 R 12828 0 R 12833 0 R 12834 0 R 12835 0 R 12836 0 R 12837 0 R 12838 0 R 12839 0 R 12840 0 R 12841 0 R 12842 0 R 12843 0 R 12844 0 R 12845 0 R 12846 0 R 12847 0 R 12848 0 R 12849 0 R 12850 0 R 12851 0 R 12852 0 R 12853 0 R 12854 0 R 12855 0 R 12856 0 R 12857 0 R 12858 0 R 12859 0 R 12860 0 R 12861 0 R 12862 0 R 12863 0 R 12864 0 R 12865 0 R 12866 0 R 12867 0 R 12868 0 R 12869 0 R 12870 0 R 12871 0 R 12872 0 R 12873 0 R 12874 0 R 12875 0 R 12876 0 R 12877 0 R 12878 0 R 12879 0 R 12880 0 R 12881 0 R 12882 0 R 12883 0 R 12884 0 R 12885 0 R 12886 0 R 12887 0 R 12888 0 R 12889 0 R 12890 0 R 12891 0 R 12892 0 R 12893 0 R 12894 0 R 12895 0 R 12896 0 R 12897 0 R 12898 0 R 12899 0 R 12900 0 R 12901 0 R 12902 0 R 12903 0 R 12904 0 R 12905 0 R 12906 0 R 12907 0 R 12908 0 R 12909 0 R 12910 0 R 12911 0 R 12912 0 R 12913 0 R 12914 0 R 12915 0 R 12916 0 R 12917 0 R 12918 0 R 12919 0 R 12920 0 R 12921 0 R 12922 0 R 12923 0 R 12924 0 R 12925 0 R 12926 0 R 12927 0 R 12928 0 R 12929 0 R 12930 0 R 12931 0 R 12932 0 R 12933 0 R 12934 0 R 12935 0 R 12936 0 R ]
+/Parent 12931 0 R
+/Annots [ 12816 0 R 12817 0 R 12822 0 R 12823 0 R 12824 0 R 12825 0 R 12826 0 R 12827 0 R 12828 0 R 12829 0 R 12830 0 R 12831 0 R 12832 0 R 12833 0 R 12834 0 R 12835 0 R 12836 0 R 12837 0 R 12838 0 R 12839 0 R 12840 0 R 12841 0 R 12842 0 R 12843 0 R 12844 0 R 12845 0 R 12846 0 R 12847 0 R 12848 0 R 12849 0 R 12850 0 R 12851 0 R 12852 0 R 12853 0 R 12854 0 R 12855 0 R 12856 0 R 12857 0 R 12858 0 R 12859 0 R 12860 0 R 12861 0 R 12862 0 R 12863 0 R 12864 0 R 12865 0 R 12866 0 R 12867 0 R 12868 0 R 12869 0 R 12870 0 R 12871 0 R 12872 0 R 12873 0 R 12874 0 R 12875 0 R 12876 0 R 12877 0 R 12878 0 R 12879 0 R 12880 0 R 12881 0 R 12882 0 R 12883 0 R 12884 0 R 12885 0 R 12886 0 R 12887 0 R 12888 0 R 12889 0 R 12890 0 R 12891 0 R 12892 0 R 12893 0 R 12894 0 R 12895 0 R 12896 0 R 12897 0 R 12898 0 R 12899 0 R 12900 0 R 12901 0 R 12902 0 R 12903 0 R 12904 0 R 12905 0 R 12906 0 R 12907 0 R 12908 0 R 12909 0 R 12910 0 R 12911 0 R 12912 0 R 12913 0 R 12914 0 R 12915 0 R 12916 0 R 12917 0 R 12918 0 R 12919 0 R 12920 0 R 12921 0 R 12922 0 R 12923 0 R 12924 0 R 12925 0 R ]
 >> endobj
-12827 0 obj <<
+12816 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [207.826 646.546 226.182 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.166) >>
 >> endobj
-12828 0 obj <<
+12817 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.856 646.546 249.213 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.180) >>
 >> endobj
-12833 0 obj <<
+12822 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.432 632.93 222.788 644.62]
 /Subtype /Link
 /A << /S /GoTo /D (page.389) >>
 >> endobj
-12834 0 obj <<
+12823 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [257.372 619.314 275.728 631.004]
 /Subtype /Link
 /A << /S /GoTo /D (page.179) >>
 >> endobj
-12835 0 obj <<
+12824 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [207.556 605.698 220.458 617.388]
 /Subtype /Link
 /A << /S /GoTo /D (page.72) >>
 >> endobj
-12836 0 obj <<
+12825 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.877 605.698 243.233 617.388]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-12837 0 obj <<
+12826 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [247.653 605.698 266.009 617.388]
 /Subtype /Link
 /A << /S /GoTo /D (page.163) >>
 >> endobj
-12838 0 obj <<
+12827 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [270.428 605.698 288.784 617.388]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-12839 0 obj <<
+12828 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.204 605.698 311.56 617.388]
 /Subtype /Link
 /A << /S /GoTo /D (page.176) >>
 >> endobj
-12840 0 obj <<
+12829 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 594.27 208.912 603.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.180) >>
 >> endobj
-12841 0 obj <<
+12830 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [252.978 578.533 271.334 590.222]
 /Subtype /Link
 /A << /S /GoTo /D (page.153) >>
 >> endobj
-12842 0 obj <<
+12831 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [267.311 564.917 285.667 576.606]
 /Subtype /Link
 /A << /S /GoTo /D (page.163) >>
 >> endobj
-12843 0 obj <<
+12832 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [272.069 551.301 284.97 562.99]
 /Subtype /Link
 /A << /S /GoTo /D (page.80) >>
 >> endobj
-12844 0 obj <<
+12833 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [289.644 551.301 308.001 562.99]
 /Subtype /Link
 /A << /S /GoTo /D (page.155) >>
 >> endobj
-12845 0 obj <<
+12834 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.432 537.685 230.788 549.374]
 /Subtype /Link
 /A << /S /GoTo /D (page.167) >>
 >> endobj
-12846 0 obj <<
+12835 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [235.462 537.685 253.819 549.374]
 /Subtype /Link
 /A << /S /GoTo /D (page.179) >>
 >> endobj
-12847 0 obj <<
+12836 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [258.493 537.685 276.849 549.374]
 /Subtype /Link
 /A << /S /GoTo /D (page.181) >>
 >> endobj
-12848 0 obj <<
+12837 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [281.523 537.685 299.879 549.374]
 /Subtype /Link
 /A << /S /GoTo /D (page.182) >>
 >> endobj
-12849 0 obj <<
+12838 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.735 524.069 255.091 535.758]
 /Subtype /Link
 /A << /S /GoTo /D (page.178) >>
 >> endobj
-12850 0 obj <<
+12839 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [268.372 510.453 286.728 522.142]
 /Subtype /Link
 /A << /S /GoTo /D (page.178) >>
 >> endobj
-12851 0 obj <<
+12840 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [222.765 496.837 241.122 508.526]
 /Subtype /Link
 /A << /S /GoTo /D (page.367) >>
 >> endobj
-12852 0 obj <<
+12841 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.675 483.221 227.031 494.91]
 /Subtype /Link
 /A << /S /GoTo /D (page.178) >>
 >> endobj
-12853 0 obj <<
+12842 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [209.281 469.605 216.728 481.294]
 /Subtype /Link
 /A << /S /GoTo /D (page.4) >>
 >> endobj
-12854 0 obj <<
+12843 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.402 469.605 239.758 481.294]
 /Subtype /Link
 /A << /S /GoTo /D (page.389) >>
 >> endobj
-12855 0 obj <<
+12844 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.432 469.605 262.788 481.294]
 /Subtype /Link
 /A << /S /GoTo /D (page.397) >>
 >> endobj
-12856 0 obj <<
+12845 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [267.463 469.605 285.819 481.294]
 /Subtype /Link
 /A << /S /GoTo /D (page.399) >>
 >> endobj
-12857 0 obj <<
+12846 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [290.493 469.605 308.849 481.294]
 /Subtype /Link
 /A << /S /GoTo /D (page.406) >>
 >> endobj
-12858 0 obj <<
+12847 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.159 455.989 252.516 467.678]
 /Subtype /Link
 /A << /S /GoTo /D (page.165) >>
 >> endobj
-12859 0 obj <<
+12848 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [238.462 442.373 256.819 454.062]
 /Subtype /Link
 /A << /S /GoTo /D (page.166) >>
 >> endobj
-12860 0 obj <<
+12849 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [261.493 442.373 279.849 454.062]
 /Subtype /Link
 /A << /S /GoTo /D (page.167) >>
 >> endobj
-12861 0 obj <<
+12850 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.523 428.757 267.879 440.446]
 /Subtype /Link
 /A << /S /GoTo /D (page.548) >>
 >> endobj
-12862 0 obj <<
+12851 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.584 415.141 212.485 426.83]
 /Subtype /Link
 /A << /S /GoTo /D (page.77) >>
 >> endobj
-12863 0 obj <<
+12852 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.159 415.141 235.516 426.83]
 /Subtype /Link
 /A << /S /GoTo /D (page.155) >>
 >> endobj
-12864 0 obj <<
+12853 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [240.19 415.141 258.546 426.83]
 /Subtype /Link
 /A << /S /GoTo /D (page.167) >>
 >> endobj
-12865 0 obj <<
+12854 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [263.22 415.141 281.576 426.83]
 /Subtype /Link
 /A << /S /GoTo /D (page.177) >>
 >> endobj
-12866 0 obj <<
+12855 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [271.372 401.525 289.728 413.214]
 /Subtype /Link
 /A << /S /GoTo /D (page.153) >>
 >> endobj
-12867 0 obj <<
+12856 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [294.402 401.525 312.758 413.214]
 /Subtype /Link
 /A << /S /GoTo /D (page.179) >>
 >> endobj
-12868 0 obj <<
+12857 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [274.826 387.909 293.182 399.598]
 /Subtype /Link
 /A << /S /GoTo /D (page.177) >>
 >> endobj
-12869 0 obj <<
+12858 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.099 374.293 264.455 385.982]
 /Subtype /Link
 /A << /S /GoTo /D (page.163) >>
 >> endobj
-12870 0 obj <<
+12859 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.341 360.677 264.697 372.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.174) >>
 >> endobj
-12871 0 obj <<
+12860 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [269.372 360.677 287.728 372.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.183) >>
 >> endobj
-12872 0 obj <<
+12861 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [292.402 360.677 310.758 372.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.184) >>
 >> endobj
-12873 0 obj <<
+12862 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [179.493 347.061 192.394 358.629]
 /Subtype /Link
 /A << /S /GoTo /D (page.81) >>
 >> endobj
-12874 0 obj <<
+12863 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.069 347.061 215.425 358.629]
 /Subtype /Link
 /A << /S /GoTo /D (page.102) >>
 >> endobj
-12875 0 obj <<
+12864 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.099 347.061 238.455 358.629]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-12876 0 obj <<
+12865 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [222.402 333.444 240.758 345.013]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-12877 0 obj <<
+12866 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.553 319.828 264.91 331.518]
 /Subtype /Link
 /A << /S /GoTo /D (page.393) >>
 >> endobj
-12878 0 obj <<
+12867 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.038 306.212 226.394 317.902]
 /Subtype /Link
 /A << /S /GoTo /D (page.810) >>
 >> endobj
-12879 0 obj <<
+12868 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.341 292.596 230.697 304.286]
 /Subtype /Link
 /A << /S /GoTo /D (page.761) >>
 >> endobj
-12880 0 obj <<
+12869 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.008 278.98 214.364 290.67]
 /Subtype /Link
 /A << /S /GoTo /D (page.761) >>
 >> endobj
-12881 0 obj <<
+12870 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.523 265.364 264.879 277.054]
 /Subtype /Link
 /A << /S /GoTo /D (page.401) >>
 >> endobj
-12882 0 obj <<
+12871 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.129 251.748 260.485 263.438]
 /Subtype /Link
 /A << /S /GoTo /D (page.306) >>
 >> endobj
-12883 0 obj <<
+12872 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.008 238.132 230.364 249.822]
 /Subtype /Link
 /A << /S /GoTo /D (page.344) >>
 >> endobj
-12884 0 obj <<
+12873 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.432 224.516 248.788 236.206]
 /Subtype /Link
 /A << /S /GoTo /D (page.344) >>
 >> endobj
-12885 0 obj <<
+12874 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.978 210.9 263.334 222.59]
 /Subtype /Link
 /A << /S /GoTo /D (page.344) >>
 >> endobj
-12886 0 obj <<
+12875 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [268.008 210.9 286.364 222.59]
 /Subtype /Link
 /A << /S /GoTo /D (page.345) >>
 >> endobj
-12887 0 obj <<
+12876 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.553 185.602 233.91 198.503]
 /Subtype /Link
 /A << /S /GoTo /D (page.605) >>
 >> endobj
-12888 0 obj <<
+12877 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [294.099 171.986 307.001 184.887]
 /Subtype /Link
 /A << /S /GoTo /D (page.88) >>
 >> endobj
-12889 0 obj <<
+12878 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.782 145.36 233.683 157.049]
 /Subtype /Link
 /A << /S /GoTo /D (page.54) >>
 >> endobj
-12890 0 obj <<
+12879 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [286.947 131.744 305.304 143.433]
 /Subtype /Link
 /A << /S /GoTo /D (page.195) >>
 >> endobj
-12891 0 obj <<
+12880 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [243.159 118.128 261.516 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-12892 0 obj <<
+12881 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.285 646.546 447.641 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.345) >>
 >> endobj
-12893 0 obj <<
+12882 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.588 632.997 437.944 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.618) >>
 >> endobj
-12894 0 obj <<
+12883 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [436.073 619.448 454.429 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.186) >>
 >> endobj
-12895 0 obj <<
+12884 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [389.588 605.899 407.944 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.345) >>
 >> endobj
-12896 0 obj <<
+12885 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.619 605.899 430.975 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.346) >>
 >> endobj
-12897 0 obj <<
+12886 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.164 592.35 436.52 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.347) >>
 >> endobj
-12898 0 obj <<
+12887 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.922 578.8 445.278 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.574) >>
 >> endobj
-12899 0 obj <<
+12888 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [421.8 565.251 440.157 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.347) >>
 >> endobj
-12900 0 obj <<
+12889 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.497 551.702 428.854 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.365) >>
 >> endobj
-12901 0 obj <<
+12890 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.558 538.153 464.914 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.139) >>
 >> endobj
-12902 0 obj <<
+12891 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [432.982 524.604 451.338 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.695) >>
 >> endobj
-12903 0 obj <<
+12892 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [376.709 511.054 395.066 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.675) >>
 >> endobj
-12904 0 obj <<
+12893 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.74 511.054 418.096 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.678) >>
 >> endobj
-12905 0 obj <<
+12894 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.77 511.054 441.126 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.785) >>
 >> endobj
-12906 0 obj <<
+12895 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.073 497.505 417.429 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.679) >>
 >> endobj
-12907 0 obj <<
+12896 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [490.019 483.956 508.375 495.524]
 /Subtype /Link
 /A << /S /GoTo /D (page.320) >>
 >> endobj
-12908 0 obj <<
+12897 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [445.649 470.407 464.005 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.320) >>
 >> endobj
-12909 0 obj <<
+12898 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.831 456.858 430.187 468.257]
 /Subtype /Link
 /A << /S /GoTo /D (page.695) >>
 >> endobj
-12910 0 obj <<
+12899 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.346 443.308 435.702 454.708]
 /Subtype /Link
 /A << /S /GoTo /D (page.341) >>
 >> endobj
-12911 0 obj <<
+12900 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [440.376 443.308 458.732 454.708]
 /Subtype /Link
 /A << /S /GoTo /D (page.617) >>
 >> endobj
-12912 0 obj <<
+12901 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [463.406 443.308 481.763 454.708]
 /Subtype /Link
 /A << /S /GoTo /D (page.696) >>
 >> endobj
-12913 0 obj <<
+12902 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.619 429.759 442.975 441.159]
 /Subtype /Link
 /A << /S /GoTo /D (page.641) >>
 >> endobj
-12914 0 obj <<
+12903 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.437 416.21 439.338 427.609]
 /Subtype /Link
 /A << /S /GoTo /D (page.46) >>
 >> endobj
-12915 0 obj <<
+12904 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.013 416.21 462.369 427.609]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-12916 0 obj <<
+12905 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [467.043 416.21 485.399 427.609]
 /Subtype /Link
 /A << /S /GoTo /D (page.696) >>
 >> endobj
-12917 0 obj <<
+12906 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.134 402.661 439.035 414.06]
 /Subtype /Link
 /A << /S /GoTo /D (page.46) >>
 >> endobj
-12918 0 obj <<
+12907 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [449.346 389.112 467.702 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-12919 0 obj <<
+12908 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.847 362.013 455.749 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.65) >>
 >> endobj
-12920 0 obj <<
+12909 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 337.036 400.219 346.059]
 /Subtype /Link
 /A << /S /GoTo /D (page.65) >>
 >> endobj
-12921 0 obj <<
+12910 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.437 321.366 459.793 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.641) >>
 >> endobj
-12922 0 obj <<
+12911 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.831 307.816 419.187 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.737) >>
 >> endobj
-12923 0 obj <<
+12912 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [381.467 280.718 399.823 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.560) >>
 >> endobj
-12924 0 obj <<
+12913 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [490.406 266.563 508.763 279.464]
 /Subtype /Link
 /A << /S /GoTo /D (page.195) >>
 >> endobj
-12925 0 obj <<
+12914 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.588 253.62 461.944 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.202) >>
 >> endobj
-12926 0 obj <<
+12915 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [445.71 240.07 464.066 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.721) >>
 >> endobj
-12927 0 obj <<
+12916 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.679 226.521 452.035 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-12928 0 obj <<
+12917 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [437.982 212.972 456.338 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.201) >>
 >> endobj
-12929 0 obj <<
+12918 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.831 199.423 483.187 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.272) >>
 >> endobj
-12930 0 obj <<
+12919 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [449.103 185.874 467.46 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.706) >>
 >> endobj
-12931 0 obj <<
+12920 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [437.982 172.324 456.338 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.104) >>
 >> endobj
-12932 0 obj <<
+12921 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.164 158.775 449.52 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.319) >>
 >> endobj
-12933 0 obj <<
+12922 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.164 145.226 433.52 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.673) >>
 >> endobj
-12934 0 obj <<
+12923 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.467 131.677 437.823 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.674) >>
 >> endobj
-12935 0 obj <<
+12924 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.497 131.677 460.854 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.707) >>
 >> endobj
-12936 0 obj <<
+12925 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.861 118.128 406.217 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.673) >>
 >> endobj
-12941 0 obj <<
-/D [12939 0 R /XYZ 151.701 685.529 null]
+12930 0 obj <<
+/D [12928 0 R /XYZ 151.701 685.529 null]
 >> endobj
-12938 0 obj <<
+12927 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F51 3736 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-13038 0 obj <<
+13027 0 obj <<
 /Length 1477      
 /Filter /FlateDecode
 >>
@@ -75920,673 +79645,673 @@
 uin¬KEr‹U„"è¹¾ü{|»=êDäðïÌgÖH¸pnH¡ÇIAç_nÕy1U&4 at aô«±ë*H²RÏÈÀJ0»@x|§*¢ºhYPÿѐv­¾·ÿXpC¯\<Ž™%´v¹al•O¬Üty©µÞ™=ÛZ#Vðý¯…Z•”‡ò>Iõ‚F§€×Í6©òŸI§¿óCØÍ–: B6ÅyR¥¦žÂAÑÏwÜPœÅÌuý«…«•¿u-!ÁþÌ«6ŸZ'„Ÿ©Hè§ä£×¹ÈÜ‚ÔF›»þÐü™¦u?d=ýC{><BKlh0²RfHÔ-§Cæ–¬÷R3ñ®’J”œƒ=LÇÅÎ7€Ñ	_‹0ÖßÖ`r‚­*3Œã}ddé?ë*í›fv³‘¥KÊ[Ó54YN~©óÇšD~¢¿µEÔ&“dÄm05õ@‹An®/.?·7ŸõùȁJÓú¸ù=ŽõÍ@C¾†,`ˆÌÔêH.C58Ü£™v=ÊC†	ÓŽa!Y—z@ؾªÃïõä@éé˜Ýø/Çs•ï¹é2ÃÒ¬é`GƒÕê~jL¢†ÿ ¢Å¦ëÃýê?C’{ç
 endstream
 endobj
-13037 0 obj <<
+13026 0 obj <<
 /Type /Page
-/Contents 13038 0 R
-/Resources 13036 0 R
+/Contents 13027 0 R
+/Resources 13025 0 R
 /MediaBox [0 0 612 792]
-/Parent 12942 0 R
-/Annots [ 12937 0 R 12943 0 R 12944 0 R 12945 0 R 12946 0 R 12947 0 R 12948 0 R 12949 0 R 12950 0 R 12951 0 R 12952 0 R 12953 0 R 12954 0 R 12955 0 R 12956 0 R 12957 0 R 12958 0 R 12959 0 R 12960 0 R 12961 0 R 12962 0 R 12963 0 R 12964 0 R 12965 0 R 12966 0 R 12967 0 R 12968 0 R 12969 0 R 12970 0 R 12971 0 R 12972 0 R 12973 0 R 12974 0 R 12975 0 R 12976 0 R 12977 0 R 12978 0 R 12979 0 R 12980 0 R 12981 0 R 12982 0 R 12983 0 R 12984 0 R 12985 0 R 12986 0 R 12987 0 R 12988 0 R 12989 0 R 12990 0 R 12991 0 R 12992 0 R 12993 0 R 12994 0 R 12995 0 R 12996 0 R 12997 0 R 12998 0 R 12999 0 R 13000 0 R 13001 0 R 13002 0 R 13003 0 R 13004 0 R 13005 0 R 13006 0 R 13007 0 R 13008 0 R 13009 0 R 13010 0 R 13011 0 R 13012 0 R 13013 0 R 13014 0 R 13015 0 R 13016 0 R 13017 0 R 13018 0 R 13019 0 R 13020 0 R 13021 0 R 13022 0 R 13023 0 R 13024 0 R 13025 0 R 13026 0 R 13027 0 R 13028 0 R 13029 0 R 13030 0 R 13031 0 R 13032 0 R 13033 0 R 13034 0 R ]
+/Parent 12931 0 R
+/Annots [ 12926 0 R 12932 0 R 12933 0 R 12934 0 R 12935 0 R 12936 0 R 12937 0 R 12938 0 R 12939 0 R 12940 0 R 12941 0 R 12942 0 R 12943 0 R 12944 0 R 12945 0 R 12946 0 R 12947 0 R 12948 0 R 12949 0 R 12950 0 R 12951 0 R 12952 0 R 12953 0 R 12954 0 R 12955 0 R 12956 0 R 12957 0 R 12958 0 R 12959 0 R 12960 0 R 12961 0 R 12962 0 R 12963 0 R 12964 0 R 12965 0 R 12966 0 R 12967 0 R 12968 0 R 12969 0 R 12970 0 R 12971 0 R 12972 0 R 12973 0 R 12974 0 R 12975 0 R 12976 0 R 12977 0 R 12978 0 R 12979 0 R 12980 0 R 12981 0 R 12982 0 R 12983 0 R 12984 0 R 12985 0 R 12986 0 R 12987 0 R 12988 0 R 12989 0 R 12990 0 R 12991 0 R 12992 0 R 12993 0 R 12994 0 R 12995 0 R 12996 0 R 12997 0 R 12998 0 R 12999 0 R 13000 0 R 13001 0 R 13002 0 R 13003 0 R 13004 0 R 13005 0 R 13006 0 R 13007 0 R 13008 0 R 13009 0 R 13010 0 R 13011 0 R 13012 0 R 13013 0 R 13014 0 R 13015 0 R 13016 0 R 13017 0 R 13018 0 R 13019 0 R 13020 0 R 13021 0 R 13022 0 R 13023 0 R ]
 >> endobj
-12937 0 obj <<
+12926 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.411 646.546 211.767 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.675) >>
 >> endobj
-12943 0 obj <<
+12932 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [135.38 632.997 153.736 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.320) >>
 >> endobj
-12944 0 obj <<
+12933 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [176.047 619.448 194.403 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.344) >>
 >> endobj
-12945 0 obj <<
+12934 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.198 605.899 172.555 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.118) >>
 >> endobj
-12946 0 obj <<
+12935 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.895 592.35 203.252 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.684) >>
 >> endobj
-12947 0 obj <<
+12936 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [138.077 578.8 156.433 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.124) >>
 >> endobj
-12948 0 obj <<
+12937 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [161.108 578.8 179.464 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.561) >>
 >> endobj
-12949 0 obj <<
+12938 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [136.259 565.251 154.615 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.124) >>
 >> endobj
-12950 0 obj <<
+12939 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [159.289 565.251 177.646 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.328) >>
 >> endobj
-12951 0 obj <<
+12940 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.32 565.251 200.676 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.639) >>
 >> endobj
-12952 0 obj <<
+12941 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [137.289 551.702 155.646 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.102) >>
 >> endobj
-12953 0 obj <<
+12942 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [131.562 538.153 149.918 549.721]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-12954 0 obj <<
+12943 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [198.592 524.604 216.949 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-12955 0 obj <<
+12944 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [160.805 510.448 179.161 523.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.687) >>
 >> endobj
-12956 0 obj <<
+12945 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.835 510.448 202.191 523.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.689) >>
 >> endobj
-12957 0 obj <<
+12946 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [134.774 497.505 153.13 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.596) >>
 >> endobj
-12958 0 obj <<
+12947 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.774 483.956 201.13 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.487) >>
 >> endobj
-12959 0 obj <<
+12948 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.471 470.407 234.827 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.683) >>
 >> endobj
-12960 0 obj <<
+12949 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [151.744 456.858 164.646 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.55) >>
 >> endobj
-12961 0 obj <<
+12950 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [169.32 456.858 187.676 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.195) >>
 >> endobj
-12962 0 obj <<
+12951 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.35 456.858 210.706 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.225) >>
 >> endobj
-12963 0 obj <<
+12952 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [203.168 443.308 221.524 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.192) >>
 >> endobj
-12964 0 obj <<
+12953 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.259 429.759 239.615 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.127) >>
 >> endobj
-12965 0 obj <<
+12954 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [245.425 416.21 263.781 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.137) >>
 >> endobj
-12966 0 obj <<
+12955 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [233.35 402.661 251.706 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.618) >>
 >> endobj
-12967 0 obj <<
+12956 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [186.986 389.112 205.343 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.119) >>
 >> endobj
-12968 0 obj <<
+12957 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.35 375.562 211.706 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.201) >>
 >> endobj
-12969 0 obj <<
+12958 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.289 362.013 211.646 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.346) >>
 >> endobj
-12970 0 obj <<
+12959 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.138 348.464 236.494 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.346) >>
 >> endobj
-12971 0 obj <<
+12960 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.168 348.464 259.524 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.349) >>
 >> endobj
-12972 0 obj <<
+12961 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [156.623 334.915 174.979 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.114) >>
 >> endobj
-12973 0 obj <<
+12962 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [174.108 321.366 192.464 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.689) >>
 >> endobj
-12974 0 obj <<
+12963 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [198.289 307.816 216.646 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.688) >>
 >> endobj
-12975 0 obj <<
+12964 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.562 294.267 203.918 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.691) >>
 >> endobj
-12976 0 obj <<
+12965 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.683 280.718 232.04 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.688) >>
 >> endobj
-12977 0 obj <<
+12966 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [152.653 267.169 171.009 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.763) >>
 >> endobj
-12978 0 obj <<
+12967 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [126.562 253.62 144.918 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.185) >>
 >> endobj
-12979 0 obj <<
+12968 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [149.592 253.62 167.949 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-12980 0 obj <<
+12969 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [151.471 240.07 169.827 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-12981 0 obj <<
+12970 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [122.623 226.521 135.524 238.089]
 /Subtype /Link
 /A << /S /GoTo /D (page.90) >>
 >> endobj
-12982 0 obj <<
+12971 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [140.198 226.521 158.555 238.089]
 /Subtype /Link
 /A << /S /GoTo /D (page.800) >>
 >> endobj
-12983 0 obj <<
+12972 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.956 212.972 201.312 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.810) >>
 >> endobj
-12984 0 obj <<
+12973 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.198 199.423 172.555 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.673) >>
 >> endobj
-12985 0 obj <<
+12974 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [147.168 185.874 165.524 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.167) >>
 >> endobj
-12986 0 obj <<
+12975 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [149.108 172.324 167.464 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.796) >>
 >> endobj
-12987 0 obj <<
+12976 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [129.623 158.775 147.979 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.458) >>
 >> endobj
-12988 0 obj <<
+12977 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [141.411 145.226 159.767 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-12989 0 obj <<
+12978 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.229 131.677 191.585 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.245) >>
 >> endobj
-12990 0 obj <<
+12979 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.047 118.128 223.403 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.305) >>
 >> endobj
-12991 0 obj <<
+12980 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [346.658 646.546 365.014 657.69]
 /Subtype /Link
 /A << /S /GoTo /D (page.397) >>
 >> endobj
-12992 0 obj <<
+12981 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [369.688 646.546 388.044 657.69]
 /Subtype /Link
 /A << /S /GoTo /D (page.399) >>
 >> endobj
-12993 0 obj <<
+12982 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.718 646.546 411.074 657.69]
 /Subtype /Link
 /A << /S /GoTo /D (page.406) >>
 >> endobj
-12994 0 obj <<
+12983 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.415 632.997 434.771 644.397]
 /Subtype /Link
 /A << /S /GoTo /D (page.391) >>
 >> endobj
-12995 0 obj <<
+12984 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.597 619.448 451.953 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.313) >>
 >> endobj
-12996 0 obj <<
+12985 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.688 605.899 416.044 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.809) >>
 >> endobj
-12997 0 obj <<
+12986 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.718 605.899 439.074 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.811) >>
 >> endobj
-12998 0 obj <<
+12987 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.991 592.35 416.347 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.131) >>
 >> endobj
-12999 0 obj <<
+12988 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.9 551.702 421.256 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.609) >>
 >> endobj
-13000 0 obj <<
+12989 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [366.961 511.054 385.317 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.605) >>
 >> endobj
-13001 0 obj <<
+12990 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.415 497.505 415.771 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.761) >>
 >> endobj
-13002 0 obj <<
+12991 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [355.445 483.956 373.802 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.193) >>
 >> endobj
-13003 0 obj <<
+12992 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.476 483.956 396.832 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.779) >>
 >> endobj
-13004 0 obj <<
+12993 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [339.688 470.407 347.135 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.3) >>
 >> endobj
-13005 0 obj <<
+12994 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.779 456.858 421.135 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.392) >>
 >> endobj
-13006 0 obj <<
+12995 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.233 443.308 436.59 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.692) >>
 >> endobj
-13007 0 obj <<
+12996 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.87 429.759 423.226 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.723) >>
 >> endobj
-13008 0 obj <<
+12997 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [354.233 416.21 372.59 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.122) >>
 >> endobj
-13009 0 obj <<
+12998 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [356.052 402.661 374.408 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.203) >>
 >> endobj
-13010 0 obj <<
+12999 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [360.294 389.112 378.65 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.179) >>
 >> endobj
-13011 0 obj <<
+13000 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.749 375.562 421.105 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.689) >>
 >> endobj
-13012 0 obj <<
+13001 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.87 362.013 463.226 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.698) >>
 >> endobj
-13013 0 obj <<
+13002 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.264 348.464 412.62 360.032]
 /Subtype /Link
 /A << /S /GoTo /D (page.106) >>
 >> endobj
-13014 0 obj <<
+13003 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.506 334.915 406.862 346.059]
 /Subtype /Link
 /A << /S /GoTo /D (page.116) >>
 >> endobj
-13015 0 obj <<
+13004 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.809 321.366 411.165 332.51]
 /Subtype /Link
 /A << /S /GoTo /D (page.189) >>
 >> endobj
-13016 0 obj <<
+13005 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.839 321.366 434.196 332.51]
 /Subtype /Link
 /A << /S /GoTo /D (page.199) >>
 >> endobj
-13017 0 obj <<
+13006 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.87 321.366 457.226 332.51]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-13018 0 obj <<
+13007 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.082 307.816 434.438 319.385]
 /Subtype /Link
 /A << /S /GoTo /D (page.324) >>
 >> endobj
-13019 0 obj <<
+13008 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.112 307.816 457.468 319.385]
 /Subtype /Link
 /A << /S /GoTo /D (page.326) >>
 >> endobj
-13020 0 obj <<
+13009 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.445 294.267 400.802 305.835]
 /Subtype /Link
 /A << /S /GoTo /D (page.135) >>
 >> endobj
-13021 0 obj <<
+13010 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [377.294 280.718 395.65 291.862]
 /Subtype /Link
 /A << /S /GoTo /D (page.138) >>
 >> endobj
-13022 0 obj <<
+13011 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.324 280.718 418.68 291.862]
 /Subtype /Link
 /A << /S /GoTo /D (page.664) >>
 >> endobj
-13023 0 obj <<
+13012 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [386.233 267.169 404.59 278.313]
 /Subtype /Link
 /A << /S /GoTo /D (page.345) >>
 >> endobj
-13024 0 obj <<
+13013 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [350.294 253.62 368.65 265.188]
 /Subtype /Link
 /A << /S /GoTo /D (page.528) >>
 >> endobj
-13025 0 obj <<
+13014 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.991 240.07 378.347 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.116) >>
 >> endobj
-13026 0 obj <<
+13015 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [373.249 226.521 386.15 238.089]
 /Subtype /Link
 /A << /S /GoTo /D (page.78) >>
 >> endobj
-13027 0 obj <<
+13016 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.991 212.972 378.347 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.604) >>
 >> endobj
-13028 0 obj <<
+13017 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.021 212.972 401.377 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.605) >>
 >> endobj
-13029 0 obj <<
+13018 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.159 185.874 401.606 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.8) >>
 >> endobj
-13030 0 obj <<
+13019 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.658 172.324 406.014 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.731) >>
 >> endobj
-13031 0 obj <<
+13020 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [408.233 158.775 426.59 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.761) >>
 >> endobj
-13032 0 obj <<
+13021 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.688 145.226 419.044 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-13033 0 obj <<
+13022 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.173 131.677 437.529 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.697) >>
 >> endobj
-13034 0 obj <<
+13023 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [427.597 118.128 445.953 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.126) >>
 >> endobj
-13039 0 obj <<
-/D [13037 0 R /XYZ 100.892 685.529 null]
+13028 0 obj <<
+/D [13026 0 R /XYZ 100.892 685.529 null]
 >> endobj
-13036 0 obj <<
+13025 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-13153 0 obj <<
+13142 0 obj <<
 /Length 1555      
 /Filter /FlateDecode
 >>
@@ -76602,799 +80327,799 @@
 •*"ó-x”œ8“;~XÎþ‡{Ç
 endstream
 endobj
-13152 0 obj <<
+13141 0 obj <<
 /Type /Page
-/Contents 13153 0 R
-/Resources 13151 0 R
+/Contents 13142 0 R
+/Resources 13140 0 R
 /MediaBox [0 0 612 792]
-/Parent 12942 0 R
-/Annots [ 13035 0 R 13040 0 R 13041 0 R 13042 0 R 13043 0 R 13044 0 R 13045 0 R 13046 0 R 13047 0 R 13048 0 R 13049 0 R 13050 0 R 13051 0 R 13052 0 R 13053 0 R 13054 0 R 13055 0 R 13056 0 R 13057 0 R 13058 0 R 13059 0 R 13060 0 R 13061 0 R 13062 0 R 13063 0 R 13064 0 R 13065 0 R 13066 0 R 13067 0 R 13068 0 R 13069 0 R 13070 0 R 13071 0 R 13072 0 R 13073 0 R 13074 0 R 13075 0 R 13076 0 R 13077 0 R 13078 0 R 13079 0 R 13080 0 R 13081 0 R 13082 0 R 13083 0 R 13084 0 R 13085 0 R 13086 0 R 13087 0 R 13088 0 R 13089 0 R 13090 0 R 13091 0 R 13092 0 R 13093 0 R 13094 0 R 13095 0 R 13096 0 R 13097 0 R 13098 0 R 13099 0 R 13100 0 R 13101 0 R 13102 0 R 13103 0 R 13104 0 R 13105 0 R 13106 0 R 13107 0 R 13108 0 R 13109 0 R 13110 0 R 13111 0 R 13112 0 R 13113 0 R 13114 0 R 13115 0 R 13116 0 R 13117 0 R 13118 0 R 13119 0 R 13120 0 R 13121 0 R 13122 0 R 13123 0 R 13124 0 R 13125 0 R 13126 0 R 13127 0 R 13128 0 R 13129 0 R 13130 0 R 13131 0 R 13132 0 R 13133 0 R 13134 0 R 13135 0 R 13136 0 R 13137 0 R 13138 0 R 13139 0 R 13140 0 R 13141 0 R 13142 0 R 13143 0 R 13144 0 R 13145 0 R 13146 0 R 13147 0 R 13148 0 R 13149 0 R ]
+/Parent 12931 0 R
+/Annots [ 13024 0 R 13029 0 R 13030 0 R 13031 0 R 13032 0 R 13033 0 R 13034 0 R 13035 0 R 13036 0 R 13037 0 R 13038 0 R 13039 0 R 13040 0 R 13041 0 R 13042 0 R 13043 0 R 13044 0 R 13045 0 R 13046 0 R 13047 0 R 13048 0 R 13049 0 R 13050 0 R 13051 0 R 13052 0 R 13053 0 R 13054 0 R 13055 0 R 13056 0 R 13057 0 R 13058 0 R 13059 0 R 13060 0 R 13061 0 R 13062 0 R 13063 0 R 13064 0 R 13065 0 R 13066 0 R 13067 0 R 13068 0 R 13069 0 R 13070 0 R 13071 0 R 13072 0 R 13073 0 R 13074 0 R 13075 0 R 13076 0 R 13077 0 R 13078 0 R 13079 0 R 13080 0 R 13081 0 R 13082 0 R 13083 0 R 13084 0 R 13085 0 R 13086 0 R 13087 0 R 13088 0 R 13089 0 R 13090 0 R 13091 0 R 13092 0 R 13093 0 R 13094 0 R 13095 0 R 13096 0 R 13097 0 R 13098 0 R 13099 0 R 13100 0 R 13101 0 R 13102 0 R 13103 0 R 13104 0 R 13105 0 R 13106 0 R 13107 0 R 13108 0 R 13109 0 R 13110 0 R 13111 0 R 13112 0 R 13113 0 R 13114 0 R 13115 0 R 13116 0 R 13117 0 R 13118 0 R 13119 0 R 13120 0 R 13121 0 R 13122 0 R 13123 0 R 13124 0 R 13125 0 R 13126 0 R 13127 0 R 13128 0 R 13129 0 R 13130 0 R 13131 0 R 13132 0 R 13133 0 R 13134 0 R 13135 0 R 13136 0 R 13137 0 R 13138 0 R ]
 >> endobj
-13035 0 obj <<
+13024 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.947 646.546 260.304 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.731) >>
 >> endobj
-13040 0 obj <<
+13029 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.008 632.997 273.364 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.135) >>
 >> endobj
-13041 0 obj <<
+13030 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.432 619.448 218.788 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.770) >>
 >> endobj
-13042 0 obj <<
+13031 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [257.129 605.899 275.485 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.366) >>
 >> endobj
-13043 0 obj <<
+13032 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.099 592.35 250.455 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.365) >>
 >> endobj
-13044 0 obj <<
+13033 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.069 578.8 277.425 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.377) >>
 >> endobj
-13045 0 obj <<
+13034 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [238.705 565.251 257.061 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.376) >>
 >> endobj
-13046 0 obj <<
+13035 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [260.22 551.702 278.576 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.688) >>
 >> endobj
-13047 0 obj <<
+13036 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.129 538.153 273.485 549.552]
 /Subtype /Link
 /A << /S /GoTo /D (page.110) >>
 >> endobj
-13048 0 obj <<
+13037 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.584 524.604 220.031 536.003]
 /Subtype /Link
 /A << /S /GoTo /D (page.7) >>
 >> endobj
-13049 0 obj <<
+13038 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.553 497.505 245.91 508.905]
 /Subtype /Link
 /A << /S /GoTo /D (page.696) >>
 >> endobj
-13050 0 obj <<
+13039 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.372 483.956 209.728 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.587) >>
 >> endobj
-13051 0 obj <<
+13040 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.159 470.407 259.516 481.551]
 /Subtype /Link
 /A << /S /GoTo /D (page.809) >>
 >> endobj
-13052 0 obj <<
+13041 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.341 456.858 219.697 468.257]
 /Subtype /Link
 /A << /S /GoTo /D (page.115) >>
 >> endobj
-13053 0 obj <<
+13042 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [253.22 443.308 271.576 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.692) >>
 >> endobj
-13054 0 obj <<
+13043 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.19 429.759 224.546 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.698) >>
 >> endobj
-13055 0 obj <<
+13044 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.614 416.21 241.97 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.135) >>
 >> endobj
-13056 0 obj <<
+13045 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [194.735 402.661 213.091 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.364) >>
 >> endobj
-13057 0 obj <<
+13046 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [285.933 375.562 298.835 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.69) >>
 >> endobj
-13058 0 obj <<
+13047 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [203.159 362.013 221.516 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.192) >>
 >> endobj
-13059 0 obj <<
+13048 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.22 348.464 234.576 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.595) >>
 >> endobj
-13060 0 obj <<
+13049 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [198.675 334.915 217.031 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.764) >>
 >> endobj
-13061 0 obj <<
+13050 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.553 321.366 267.91 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.457) >>
 >> endobj
-13062 0 obj <<
+13051 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [209.281 307.816 227.637 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-13063 0 obj <<
+13052 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.069 294.267 239.425 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.288) >>
 >> endobj
-13064 0 obj <<
+13053 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.25 280.718 241.607 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.219) >>
 >> endobj
-13065 0 obj <<
+13054 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [237.129 267.169 255.485 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.811) >>
 >> endobj
-13066 0 obj <<
+13055 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [189.038 253.62 207.394 265.188]
 /Subtype /Link
 /A << /S /GoTo /D (page.674) >>
 >> endobj
-13067 0 obj <<
+13056 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [189.038 240.07 207.394 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.676) >>
 >> endobj
-13068 0 obj <<
+13057 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.069 240.07 230.425 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.679) >>
 >> endobj
-13069 0 obj <<
+13058 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.068 226.521 209.425 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.365) >>
 >> endobj
-13070 0 obj <<
+13059 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.887 212.972 204.243 224.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.317) >>
 >> endobj
-13071 0 obj <<
+13060 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [292.584 199.423 310.94 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.106) >>
 >> endobj
-13072 0 obj <<
+13061 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 174.446 208.912 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.107) >>
 >> endobj
-13073 0 obj <<
+13062 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [266.523 158.775 284.879 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.106) >>
 >> endobj
-13074 0 obj <<
+13063 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [295.675 145.226 314.031 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.109) >>
 >> endobj
-13075 0 obj <<
+13064 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [214.129 131.677 232.485 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.324) >>
 >> endobj
-13076 0 obj <<
+13065 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [237.159 131.677 255.516 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.332) >>
 >> endobj
-13077 0 obj <<
+13066 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [231.372 118.128 249.728 129.527]
 /Subtype /Link
 /A << /S /GoTo /D (page.560) >>
 >> endobj
-13078 0 obj <<
+13067 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [494.437 646.546 512.793 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.114) >>
 >> endobj
-13079 0 obj <<
+13068 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [450.376 632.925 468.732 644.069]
 /Subtype /Link
 /A << /S /GoTo /D (page.122) >>
 >> endobj
-13080 0 obj <<
+13069 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.225 619.303 438.581 630.993]
 /Subtype /Link
 /A << /S /GoTo /D (page.560) >>
 >> endobj
-13081 0 obj <<
+13070 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.706 605.682 419.608 617.372]
 /Subtype /Link
 /A << /S /GoTo /D (page.46) >>
 >> endobj
-13082 0 obj <<
+13071 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.157 605.682 439.059 617.372]
 /Subtype /Link
 /A << /S /GoTo /D (page.65) >>
 >> endobj
-13083 0 obj <<
+13072 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [445.609 605.682 458.51 617.372]
 /Subtype /Link
 /A << /S /GoTo /D (page.90) >>
 >> endobj
-13084 0 obj <<
+13073 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [465.06 605.682 483.416 617.372]
 /Subtype /Link
 /A << /S /GoTo /D (page.114) >>
 >> endobj
-13085 0 obj <<
+13074 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 605.682 508.322 617.372]
 /Subtype /Link
 /A << /S /GoTo /D (page.135) >>
 >> endobj
-13086 0 obj <<
+13075 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 592.133 405.674 603.277]
 /Subtype /Link
 /A << /S /GoTo /D (page.261) >>
 >> endobj
-13087 0 obj <<
+13076 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.348 592.133 428.704 603.277]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-13088 0 obj <<
+13077 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [455.437 578.511 468.338 590.201]
 /Subtype /Link
 /A << /S /GoTo /D (page.92) >>
 >> endobj
-13089 0 obj <<
+13078 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [498.801 564.89 517.157 576.58]
 /Subtype /Link
 /A << /S /GoTo /D (page.127) >>
 >> endobj
-13090 0 obj <<
+13079 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [371.134 551.269 389.49 562.958]
 /Subtype /Link
 /A << /S /GoTo /D (page.577) >>
 >> endobj
-13091 0 obj <<
+13080 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [374.77 537.647 387.672 548.791]
 /Subtype /Link
 /A << /S /GoTo /D (page.94) >>
 >> endobj
-13092 0 obj <<
+13081 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.316 524.026 419.672 535.17]
 /Subtype /Link
 /A << /S /GoTo /D (page.758) >>
 >> endobj
-13093 0 obj <<
+13082 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [465.346 510.404 483.702 522.094]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-13094 0 obj <<
+13083 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [456.194 496.783 474.551 508.472]
 /Subtype /Link
 /A << /S /GoTo /D (page.163) >>
 >> endobj
-13095 0 obj <<
+13084 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [478.255 496.783 496.611 508.472]
 /Subtype /Link
 /A << /S /GoTo /D (page.164) >>
 >> endobj
-13096 0 obj <<
+13085 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [500.316 496.783 518.672 508.472]
 /Subtype /Link
 /A << /S /GoTo /D (page.172) >>
 >> endobj
-13097 0 obj <<
+13086 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 485.355 405.674 494.378]
 /Subtype /Link
 /A << /S /GoTo /D (page.179) >>
 >> endobj
-13098 0 obj <<
+13087 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.346 469.612 417.702 481.302]
 /Subtype /Link
 /A << /S /GoTo /D (page.341) >>
 >> endobj
-13099 0 obj <<
+13088 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.467 455.991 400.823 467.559]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-13100 0 obj <<
+13089 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.528 455.991 422.884 467.559]
 /Subtype /Link
 /A << /S /GoTo /D (page.386) >>
 >> endobj
-13101 0 obj <<
+13090 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.588 455.991 444.944 467.559]
 /Subtype /Link
 /A << /S /GoTo /D (page.393) >>
 >> endobj
-13102 0 obj <<
+13091 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [448.649 455.991 467.005 467.559]
 /Subtype /Link
 /A << /S /GoTo /D (page.394) >>
 >> endobj
-13103 0 obj <<
+13092 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [470.71 455.991 489.066 467.559]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-13104 0 obj <<
+13093 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [492.77 455.991 511.126 467.559]
 /Subtype /Link
 /A << /S /GoTo /D (page.447) >>
 >> endobj
-13105 0 obj <<
+13094 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 442.442 405.674 453.586]
 /Subtype /Link
 /A << /S /GoTo /D (page.448) >>
 >> endobj
-13106 0 obj <<
+13095 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.348 442.442 428.704 453.586]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-13107 0 obj <<
+13096 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [454.514 428.82 472.87 440.389]
 /Subtype /Link
 /A << /S /GoTo /D (page.532) >>
 >> endobj
-13108 0 obj <<
+13097 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.332 415.199 423.688 426.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.533) >>
 >> endobj
-13109 0 obj <<
+13098 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.861 401.578 414.308 413.146]
 /Subtype /Link
 /A << /S /GoTo /D (page.4) >>
 >> endobj
-13110 0 obj <<
+13099 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.982 401.578 437.338 413.146]
 /Subtype /Link
 /A << /S /GoTo /D (page.400) >>
 >> endobj
-13111 0 obj <<
+13100 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.103 387.956 448.46 399.646]
 /Subtype /Link
 /A << /S /GoTo /D (page.474) >>
 >> endobj
-13112 0 obj <<
+13101 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.316 374.335 442.672 386.024]
 /Subtype /Link
 /A << /S /GoTo /D (page.463) >>
 >> endobj
-13113 0 obj <<
+13102 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [447.346 374.335 465.702 386.024]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-13114 0 obj <<
+13103 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.103 360.713 471.46 372.403]
 /Subtype /Link
 /A << /S /GoTo /D (page.472) >>
 >> endobj
-13115 0 obj <<
+13104 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [447.831 347.092 466.187 358.781]
 /Subtype /Link
 /A << /S /GoTo /D (page.125) >>
 >> endobj
-13116 0 obj <<
+13105 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [436.952 333.471 455.308 345.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.499) >>
 >> endobj
-13117 0 obj <<
+13106 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [468.528 319.849 486.884 331.539]
 /Subtype /Link
 /A << /S /GoTo /D (page.500) >>
 >> endobj
-13118 0 obj <<
+13107 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.073 306.228 459.429 317.917]
 /Subtype /Link
 /A << /S /GoTo /D (page.125) >>
 >> endobj
-13119 0 obj <<
+13108 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.709 292.606 433.066 304.175]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-13120 0 obj <<
+13109 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [437.74 292.606 456.096 304.175]
 /Subtype /Link
 /A << /S /GoTo /D (page.470) >>
 >> endobj
-13121 0 obj <<
+13110 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.497 278.985 428.854 290.553]
 /Subtype /Link
 /A << /S /GoTo /D (page.525) >>
 >> endobj
-13122 0 obj <<
+13111 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [393.588 265.363 411.944 277.053]
 /Subtype /Link
 /A << /S /GoTo /D (page.497) >>
 >> endobj
-13123 0 obj <<
+13112 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.319 251.742 432.675 263.432]
 /Subtype /Link
 /A << /S /GoTo /D (page.455) >>
 >> endobj
-13124 0 obj <<
+13113 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.535 251.742 457.891 263.432]
 /Subtype /Link
 /A << /S /GoTo /D (page.492) >>
 >> endobj
-13125 0 obj <<
+13114 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.75 251.742 483.106 263.432]
 /Subtype /Link
 /A << /S /GoTo /D (page.497) >>
 >> endobj
-13126 0 obj <<
+13115 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 251.742 508.322 263.432]
 /Subtype /Link
 /A << /S /GoTo /D (page.501) >>
 >> endobj
-13127 0 obj <<
+13116 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 238.193 405.674 249.337]
 /Subtype /Link
 /A << /S /GoTo /D (page.503) >>
 >> endobj
-13128 0 obj <<
+13117 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.348 238.193 428.704 249.337]
 /Subtype /Link
 /A << /S /GoTo /D (page.505) >>
 >> endobj
-13129 0 obj <<
+13118 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [432.166 238.193 450.522 249.337]
 /Subtype /Link
 /A << /S /GoTo /D (page.507) >>
 >> endobj
-13130 0 obj <<
+13119 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [455.196 238.193 473.553 249.337]
 /Subtype /Link
 /A << /S /GoTo /D (page.511) >>
 >> endobj
-13131 0 obj <<
+13120 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.194 224.571 422.551 236.261]
 /Subtype /Link
 /A << /S /GoTo /D (page.400) >>
 >> endobj
-13132 0 obj <<
+13121 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [427.225 224.571 445.581 236.261]
 /Subtype /Link
 /A << /S /GoTo /D (page.448) >>
 >> endobj
-13133 0 obj <<
+13122 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [450.255 224.571 468.611 236.261]
 /Subtype /Link
 /A << /S /GoTo /D (page.476) >>
 >> endobj
-13134 0 obj <<
+13123 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [473.285 224.571 491.641 236.261]
 /Subtype /Link
 /A << /S /GoTo /D (page.538) >>
 >> endobj
-13135 0 obj <<
+13124 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.258 210.95 428.615 222.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.463) >>
 >> endobj
-13136 0 obj <<
+13125 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [436.02 210.95 454.376 222.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-13137 0 obj <<
+13126 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [461.781 210.95 480.137 222.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.475) >>
 >> endobj
-13138 0 obj <<
+13127 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [487.542 210.95 505.898 222.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.479) >>
 >> endobj
-13139 0 obj <<
+13128 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 197.401 405.674 208.545]
 /Subtype /Link
 /A << /S /GoTo /D (page.481) >>
 >> endobj
-13140 0 obj <<
+13129 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.348 197.401 428.704 208.545]
 /Subtype /Link
 /A << /S /GoTo /D (page.523) >>
 >> endobj
-13141 0 obj <<
+13130 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.378 197.401 451.734 208.545]
 /Subtype /Link
 /A << /S /GoTo /D (page.525) >>
 >> endobj
-13142 0 obj <<
+13131 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.831 183.779 441.187 195.179]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-13143 0 obj <<
+13132 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.71 170.158 461.066 181.848]
 /Subtype /Link
 /A << /S /GoTo /D (page.809) >>
 >> endobj
-13144 0 obj <<
+13133 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.558 156.537 419.914 167.681]
 /Subtype /Link
 /A << /S /GoTo /D (page.809) >>
 >> endobj
-13145 0 obj <<
+13134 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [487.922 142.915 506.278 154.605]
 /Subtype /Link
 /A << /S /GoTo /D (page.401) >>
 >> endobj
-13146 0 obj <<
+13135 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.103 118.128 398.55 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.5) >>
 >> endobj
-13147 0 obj <<
+13136 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.225 118.128 421.581 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.371) >>
 >> endobj
-13148 0 obj <<
+13137 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.255 118.128 444.611 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.575) >>
 >> endobj
-13149 0 obj <<
+13138 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [449.285 118.128 467.641 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.775) >>
 >> endobj
-13154 0 obj <<
-/D [13152 0 R /XYZ 151.701 685.529 null]
+13143 0 obj <<
+/D [13141 0 R /XYZ 151.701 685.529 null]
 >> endobj
-13151 0 obj <<
+13140 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-13247 0 obj <<
+13236 0 obj <<
 /Length 1330      
 /Filter /FlateDecode
 >>
@@ -77409,645 +81134,645 @@
 Šö?Rüyóövùœ¹ÍÊV€òNˆc¦q86ŒÃtº¿Ù¥ª}¥…ed€Q4"m«Ùür>›ß´U`¹·#'Œ_ÔÌ"·×½pø§Y§•Xgû§Ìv–SÕíè©þ·ÑÃþáo6–6ùàõQ¥âÿÁQSº
 endstream
 endobj
-13246 0 obj <<
+13235 0 obj <<
 /Type /Page
-/Contents 13247 0 R
-/Resources 13245 0 R
+/Contents 13236 0 R
+/Resources 13234 0 R
 /MediaBox [0 0 612 792]
-/Parent 12942 0 R
-/Annots [ 13150 0 R 13155 0 R 13156 0 R 13157 0 R 13158 0 R 13159 0 R 13160 0 R 13161 0 R 13162 0 R 13163 0 R 13164 0 R 13165 0 R 13166 0 R 13167 0 R 13168 0 R 13169 0 R 13170 0 R 13171 0 R 13172 0 R 13173 0 R 13174 0 R 13175 0 R 13176 0 R 13177 0 R 13178 0 R 13179 0 R 13180 0 R 13181 0 R 13182 0 R 13183 0 R 13184 0 R 13185 0 R 13186 0 R 13187 0 R 13188 0 R 13189 0 R 13190 0 R 13191 0 R 13192 0 R 13193 0 R 13194 0 R 13195 0 R 13196 0 R 13197 0 R 13198 0 R 13199 0 R 13200 0 R 13201 0 R 13202 0 R 13203 0 R 13204 0 R 13205 0 R 13206 0 R 13207 0 R 13208 0 R 13209 0 R 13210 0 R 13211 0 R 13212 0 R 13213 0 R 13214 0 R 13215 0 R 13216 0 R 13217 0 R 13218 0 R 13219 0 R 13220 0 R 13221 0 R 13222 0 R 13223 0 R 13224 0 R 13225 0 R 13226 0 R 13227 0 R 13228 0 R 13229 0 R 13230 0 R 13231 0 R 13232 0 R 13233 0 R 13234 0 R 13235 0 R 13236 0 R 13237 0 R 13238 0 R 13239 0 R 13240 0 R 13241 0 R 13242 0 R ]
+/Parent 12931 0 R
+/Annots [ 13139 0 R 13144 0 R 13145 0 R 13146 0 R 13147 0 R 13148 0 R 13149 0 R 13150 0 R 13151 0 R 13152 0 R 13153 0 R 13154 0 R 13155 0 R 13156 0 R 13157 0 R 13158 0 R 13159 0 R 13160 0 R 13161 0 R 13162 0 R 13163 0 R 13164 0 R 13165 0 R 13166 0 R 13167 0 R 13168 0 R 13169 0 R 13170 0 R 13171 0 R 13172 0 R 13173 0 R 13174 0 R 13175 0 R 13176 0 R 13177 0 R 13178 0 R 13179 0 R 13180 0 R 13181 0 R 13182 0 R 13183 0 R 13184 0 R 13185 0 R 13186 0 R 13187 0 R 13188 0 R 13189 0 R 13190 0 R 13191 0 R 13192 0 R 13193 0 R 13194 0 R 13195 0 R 13196 0 R 13197 0 R 13198 0 R 13199 0 R 13200 0 R 13201 0 R 13202 0 R 13203 0 R 13204 0 R 13205 0 R 13206 0 R 13207 0 R 13208 0 R 13209 0 R 13210 0 R 13211 0 R 13212 0 R 13213 0 R 13214 0 R 13215 0 R 13216 0 R 13217 0 R 13218 0 R 13219 0 R 13220 0 R 13221 0 R 13222 0 R 13223 0 R 13224 0 R 13225 0 R 13226 0 R 13227 0 R 13228 0 R 13229 0 R 13230 0 R 13231 0 R ]
 >> endobj
-13150 0 obj <<
+13139 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.168 646.546 202.524 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.581) >>
 >> endobj
-13155 0 obj <<
+13144 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [147.835 632.997 166.191 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.586) >>
 >> endobj
-13156 0 obj <<
+13145 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.835 619.448 192.191 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.209) >>
 >> endobj
-13157 0 obj <<
+13146 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [166.865 605.899 185.221 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.346) >>
 >> endobj
-13158 0 obj <<
+13147 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [181.168 592.35 199.524 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.185) >>
 >> endobj
-13159 0 obj <<
+13148 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.199 592.35 222.555 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.348) >>
 >> endobj
-13160 0 obj <<
+13149 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.986 578.8 204.343 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.313) >>
 >> endobj
-13161 0 obj <<
+13150 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [163.623 565.251 181.979 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.387) >>
 >> endobj
-13162 0 obj <<
+13151 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [148.441 551.702 166.797 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.101) >>
 >> endobj
-13163 0 obj <<
+13152 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.471 551.702 189.827 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.706) >>
 >> endobj
-13164 0 obj <<
+13153 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [163.895 538.153 182.252 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.563) >>
 >> endobj
-13165 0 obj <<
+13154 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [137.168 524.604 155.524 536.172]
 /Subtype /Link
 /A << /S /GoTo /D (page.785) >>
 >> endobj
-13166 0 obj <<
+13155 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [124.138 511.054 142.494 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.764) >>
 >> endobj
-13167 0 obj <<
+13156 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.168 497.505 175.524 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.579) >>
 >> endobj
-13168 0 obj <<
+13157 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [131.714 483.956 150.07 495.524]
 /Subtype /Link
 /A << /S /GoTo /D (page.491) >>
 >> endobj
-13169 0 obj <<
+13158 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.744 483.956 173.1 495.524]
 /Subtype /Link
 /A << /S /GoTo /D (page.495) >>
 >> endobj
-13170 0 obj <<
+13159 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [137.471 470.407 155.827 481.975]
 /Subtype /Link
 /A << /S /GoTo /D (page.159) >>
 >> endobj
-13171 0 obj <<
+13160 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [160.501 470.407 178.858 481.975]
 /Subtype /Link
 /A << /S /GoTo /D (page.160) >>
 >> endobj
-13172 0 obj <<
+13161 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.532 470.407 201.888 481.975]
 /Subtype /Link
 /A << /S /GoTo /D (page.660) >>
 >> endobj
-13173 0 obj <<
+13162 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [165.956 456.858 184.312 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.689) >>
 >> endobj
-13174 0 obj <<
+13163 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [180.502 443.308 198.858 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.690) >>
 >> endobj
-13175 0 obj <<
+13164 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [140.35 429.759 158.706 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.560) >>
 >> endobj
-13176 0 obj <<
+13165 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [170.077 416.21 188.433 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.559) >>
 >> endobj
-13177 0 obj <<
+13166 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [135.047 402.661 153.403 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.764) >>
 >> endobj
-13178 0 obj <<
+13167 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [159.895 389.112 178.252 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.753) >>
 >> endobj
-13179 0 obj <<
+13168 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.926 389.112 201.282 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.762) >>
 >> endobj
-13180 0 obj <<
+13169 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.956 389.112 224.312 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.795) >>
 >> endobj
-13181 0 obj <<
+13170 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [155.047 375.562 173.403 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.753) >>
 >> endobj
-13182 0 obj <<
+13171 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [178.077 375.562 196.433 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.763) >>
 >> endobj
-13183 0 obj <<
+13172 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.471 362.013 224.827 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.753) >>
 >> endobj
-13184 0 obj <<
+13173 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.805 348.464 220.161 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.753) >>
 >> endobj
-13185 0 obj <<
+13174 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [156.259 334.915 174.615 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.762) >>
 >> endobj
-13186 0 obj <<
+13175 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.441 321.366 219.797 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.692) >>
 >> endobj
-13187 0 obj <<
+13176 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.653 307.816 229.009 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-13188 0 obj <<
+13177 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.198 294.267 197.1 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-13189 0 obj <<
+13178 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.653 280.718 192.009 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-13190 0 obj <<
+13179 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.168 267.169 202.524 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.285) >>
 >> endobj
-13191 0 obj <<
+13180 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.683 253.62 181.04 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.341) >>
 >> endobj
-13192 0 obj <<
+13181 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.653 240.07 204.009 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.425) >>
 >> endobj
-13193 0 obj <<
+13182 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [194.956 226.521 213.312 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-13194 0 obj <<
+13183 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [186.017 212.972 204.373 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.129) >>
 >> endobj
-13195 0 obj <<
+13184 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [174.835 199.423 193.191 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-13196 0 obj <<
+13185 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.441 185.874 202.797 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-13197 0 obj <<
+13186 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [188.744 172.324 207.1 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.250) >>
 >> endobj
-13198 0 obj <<
+13187 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.289 158.775 234.646 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.400) >>
 >> endobj
-13199 0 obj <<
+13188 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.592 145.226 238.949 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.394) >>
 >> endobj
-13200 0 obj <<
+13189 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [175.714 131.677 194.07 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.402) >>
 >> endobj
-13201 0 obj <<
+13190 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [181.138 118.128 199.494 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.447) >>
 >> endobj
-13202 0 obj <<
+13191 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [369.718 646.546 388.074 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.627) >>
 >> endobj
-13203 0 obj <<
+13192 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.749 646.546 411.105 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.636) >>
 >> endobj
-13204 0 obj <<
+13193 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [376.476 632.997 394.832 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.211) >>
 >> endobj
-13205 0 obj <<
+13194 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [365.567 619.448 383.923 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.582) >>
 >> endobj
-13206 0 obj <<
+13195 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [363.87 605.899 382.226 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.631) >>
 >> endobj
-13207 0 obj <<
+13196 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [363.779 592.35 382.135 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-13208 0 obj <<
+13197 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.476 578.8 410.832 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.185) >>
 >> endobj
-13209 0 obj <<
+13198 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [368.233 565.251 386.59 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.345) >>
 >> endobj
-13210 0 obj <<
+13199 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [370.142 551.702 388.499 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.368) >>
 >> endobj
-13211 0 obj <<
+13200 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 526.725 354.864 535.748]
 /Subtype /Link
 /A << /S /GoTo /D (page.261) >>
 >> endobj
-13212 0 obj <<
+13201 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [348.173 511.054 366.529 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.238) >>
 >> endobj
-13213 0 obj <<
+13202 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [351.809 497.505 370.165 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-13214 0 obj <<
+13203 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [331.203 483.956 349.559 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.317) >>
 >> endobj
-13215 0 obj <<
+13204 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [357.87 470.407 376.226 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.320) >>
 >> endobj
-13216 0 obj <<
+13205 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.021 456.858 435.377 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-13217 0 obj <<
+13206 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.324 443.308 429.68 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.633) >>
 >> endobj
-13218 0 obj <<
+13207 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [409.476 429.759 427.832 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.272) >>
 >> endobj
-13219 0 obj <<
+13208 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [384.718 416.21 403.074 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.207) >>
 >> endobj
-13220 0 obj <<
+13209 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.142 402.661 377.499 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.556) >>
 >> endobj
-13221 0 obj <<
+13210 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [393.749 389.112 412.105 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.708) >>
 >> endobj
-13222 0 obj <<
+13211 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [340.294 375.562 358.65 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.237) >>
 >> endobj
-13223 0 obj <<
+13212 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [337.87 362.013 350.771 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.68) >>
 >> endobj
-13224 0 obj <<
+13213 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [343.93 348.464 356.832 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.89) >>
 >> endobj
-13225 0 obj <<
+13214 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [379.779 334.915 398.135 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.365) >>
 >> endobj
-13226 0 obj <<
+13215 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [324.839 321.366 343.196 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.366) >>
 >> endobj
-13227 0 obj <<
+13216 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [357.991 307.816 376.347 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.366) >>
 >> endobj
-13228 0 obj <<
+13217 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.445 294.267 377.802 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.344) >>
 >> endobj
-13229 0 obj <<
+13218 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [351.809 280.718 370.165 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.345) >>
 >> endobj
-13230 0 obj <<
+13219 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [361.191 267.169 379.547 278.737]
 /Subtype /Link
 /A << /S /GoTo /D (page.344) >>
 >> endobj
-13231 0 obj <<
+13220 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.252 253.62 380.608 265.188]
 /Subtype /Link
 /A << /S /GoTo /D (page.344) >>
 >> endobj
-13232 0 obj <<
+13221 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [361.797 240.07 380.153 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.344) >>
 >> endobj
-13233 0 obj <<
+13222 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [371.645 226.521 390.002 238.089]
 /Subtype /Link
 /A << /S /GoTo /D (page.344) >>
 >> endobj
-13234 0 obj <<
+13223 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [371.342 212.972 389.699 224.54]
 /Subtype /Link
 /A << /S /GoTo /D (page.344) >>
 >> endobj
-13235 0 obj <<
+13224 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [377.858 199.423 396.214 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.344) >>
 >> endobj
-13236 0 obj <<
+13225 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [358.173 185.874 376.529 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.810) >>
 >> endobj
-13237 0 obj <<
+13226 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [408.536 172.324 426.893 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.199) >>
 >> endobj
-13238 0 obj <<
+13227 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [379.385 158.775 397.741 170.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.112) >>
 >> endobj
-13239 0 obj <<
+13228 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [379.688 145.226 398.044 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.112) >>
 >> endobj
-13240 0 obj <<
+13229 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.718 145.226 421.074 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.116) >>
 >> endobj
-13241 0 obj <<
+13230 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [386.506 131.677 404.862 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-13242 0 obj <<
+13231 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [369.445 118.128 387.802 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.618) >>
 >> endobj
-13248 0 obj <<
-/D [13246 0 R /XYZ 100.892 685.529 null]
+13237 0 obj <<
+/D [13235 0 R /XYZ 100.892 685.529 null]
 >> endobj
-13245 0 obj <<
+13234 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-13372 0 obj <<
+13361 0 obj <<
 /Length 1597      
 /Filter /FlateDecode
 >>
@@ -78062,834 +81787,834 @@
 ÏËsÛì·™xÀ£î<ƒ] `|Xº=XÆm@‹ûoXäæ…É€˜Ý{8ƒ‹ÀJîþã¥2(d1aIŠ	¤þŽ:!Œ<GâÎ÷ù[îÓÈå>‰\îk<Jâðh(áLL©ˆd@Æ1ÑöxÇá…’öøù°šýÌ X-
 endstream
 endobj
-13371 0 obj <<
+13360 0 obj <<
 /Type /Page
-/Contents 13372 0 R
-/Resources 13370 0 R
+/Contents 13361 0 R
+/Resources 13359 0 R
 /MediaBox [0 0 612 792]
-/Parent 12942 0 R
-/Annots [ 13243 0 R 13244 0 R 13249 0 R 13250 0 R 13251 0 R 13252 0 R 13253 0 R 13254 0 R 13255 0 R 13256 0 R 13257 0 R 13258 0 R 13259 0 R 13260 0 R 13261 0 R 13262 0 R 13263 0 R 13264 0 R 13265 0 R 13266 0 R 13267 0 R 13268 0 R 13269 0 R 13270 0 R 13271 0 R 13272 0 R 13273 0 R 13274 0 R 13275 0 R 13276 0 R 13277 0 R 13278 0 R 13279 0 R 13280 0 R 13281 0 R 13282 0 R 13283 0 R 13284 0 R 13285 0 R 13286 0 R 13287 0 R 13288 0 R 13289 0 R 13290 0 R 13291 0 R 13292 0 R 13293 0 R 13294 0 R 13295 0 R 13296 0 R 13297 0 R 13298 0 R 13299 0 R 13300 0 R 13301 0 R 13302 0 R 13303 0 R 13304 0 R 13305 0 R 13306 0 R 13307 0 R 13308 0 R 13309 0 R 13310 0 R 13311 0 R 13312 0 R 13313 0 R 13314 0 R 13315 0 R 13316 0 R 13317 0 R 13318 0 R 13319 0 R 13320 0 R 13321 0 R 13322 0 R 13323 0 R 13324 0 R 13325 0 R 13326 0 R 13327 0 R 13328 0 R 13329 0 R 13330 0 R 13331 0 R 13332 0 R 13333 0 R 13334 0 R 13335 0 R 13336 0 R 13337 0 R 13338 0 R 13339 0 R 13340 0 R 13341 0 R 13342 0 R 13343 0 R 13344 0 R 13345 0 R 13346 0 R 13347 0 R 13348 0 R 13349 0 R 13350 0 R 13351 0 R 13352 0 R 13353 0 R 13354 0 R 13355 0 R 13356 0 R 13357 0 R 13358 0 R 13359 0 R 13360 0 R 13361 0 R 13362 0 R ]
+/Parent 12931 0 R
+/Annots [ 13232 0 R 13233 0 R 13238 0 R 13239 0 R 13240 0 R 13241 0 R 13242 0 R 13243 0 R 13244 0 R 13245 0 R 13246 0 R 13247 0 R 13248 0 R 13249 0 R 13250 0 R 13251 0 R 13252 0 R 13253 0 R 13254 0 R 13255 0 R 13256 0 R 13257 0 R 13258 0 R 13259 0 R 13260 0 R 13261 0 R 13262 0 R 13263 0 R 13264 0 R 13265 0 R 13266 0 R 13267 0 R 13268 0 R 13269 0 R 13270 0 R 13271 0 R 13272 0 R 13273 0 R 13274 0 R 13275 0 R 13276 0 R 13277 0 R 13278 0 R 13279 0 R 13280 0 R 13281 0 R 13282 0 R 13283 0 R 13284 0 R 13285 0 R 13286 0 R 13287 0 R 13288 0 R 13289 0 R 13290 0 R 13291 0 R 13292 0 R 13293 0 R 13294 0 R 13295 0 R 13296 0 R 13297 0 R 13298 0 R 13299 0 R 13300 0 R 13301 0 R 13302 0 R 13303 0 R 13304 0 R 13305 0 R 13306 0 R 13307 0 R 13308 0 R 13309 0 R 13310 0 R 13311 0 R 13312 0 R 13313 0 R 13314 0 R 13315 0 R 13316 0 R 13317 0 R 13318 0 R 13319 0 R 13320 0 R 13321 0 R 13322 0 R 13323 0 R 13324 0 R 13325 0 R 13326 0 R 13327 0 R 13328 0 R 13329 0 R 13330 0 R 13331 0 R 13332 0 R 13333 0 R 13334 0 R 13335 0 R 13336 0 R 13337 0 R 13338 0 R 13339 0 R 13340 0 R 13341 0 R 13342 0 R 13343 0 R 13344 0 R 13345 0 R 13346 0 R 13347 0 R 13348 0 R 13349 0 R 13350 0 R 13351 0 R ]
 >> endobj
-13243 0 obj <<
+13232 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.463 646.546 240.364 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.74) >>
 >> endobj
-13244 0 obj <<
+13233 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [245.038 646.546 257.94 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.87) >>
 >> endobj
-13249 0 obj <<
+13238 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [231.766 632.997 250.122 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-13250 0 obj <<
+13239 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.796 632.997 273.152 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-13251 0 obj <<
+13240 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.796 619.448 219.152 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.363) >>
 >> endobj
-13252 0 obj <<
+13241 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.008 605.899 277.364 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.575) >>
 >> endobj
-13253 0 obj <<
+13242 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.341 592.35 246.697 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.560) >>
 >> endobj
-13254 0 obj <<
+13243 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.159 578.8 234.516 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.423) >>
 >> endobj
-13255 0 obj <<
+13244 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [278.705 565.251 297.061 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.479) >>
 >> endobj
-13256 0 obj <<
+13245 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.675 551.702 196.031 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.381) >>
 >> endobj
-13257 0 obj <<
+13246 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.614 524.604 239.97 536.172]
 /Subtype /Link
 /A << /S /GoTo /D (page.381) >>
 >> endobj
-13258 0 obj <<
+13247 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.705 511.054 223.061 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.381) >>
 >> endobj
-13259 0 obj <<
+13248 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [202.25 497.505 220.607 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.382) >>
 >> endobj
-13260 0 obj <<
+13249 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.523 483.956 228.879 495.524]
 /Subtype /Link
 /A << /S /GoTo /D (page.381) >>
 >> endobj
-13261 0 obj <<
+13250 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.735 470.407 219.091 481.975]
 /Subtype /Link
 /A << /S /GoTo /D (page.381) >>
 >> endobj
-13262 0 obj <<
+13251 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.766 470.407 242.122 481.975]
 /Subtype /Link
 /A << /S /GoTo /D (page.382) >>
 >> endobj
-13263 0 obj <<
+13252 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [209.826 456.858 228.182 468.426]
 /Subtype /Link
 /A << /S /GoTo /D (page.381) >>
 >> endobj
-13264 0 obj <<
+13253 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [243.523 443.308 261.879 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.382) >>
 >> endobj
-13265 0 obj <<
+13254 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.414 429.759 208.77 441.327]
 /Subtype /Link
 /A << /S /GoTo /D (page.128) >>
 >> endobj
-13266 0 obj <<
+13255 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.112 429.759 234.468 441.327]
 /Subtype /Link
 /A << /S /GoTo /D (page.129) >>
 >> endobj
-13267 0 obj <<
+13256 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.809 429.759 260.165 441.327]
 /Subtype /Link
 /A << /S /GoTo /D (page.131) >>
 >> endobj
-13268 0 obj <<
+13257 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [267.506 429.759 285.863 441.327]
 /Subtype /Link
 /A << /S /GoTo /D (page.133) >>
 >> endobj
-13269 0 obj <<
+13258 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.204 429.759 311.56 441.327]
 /Subtype /Link
 /A << /S /GoTo /D (page.179) >>
 >> endobj
-13270 0 obj <<
+13259 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 416.21 208.912 427.354]
 /Subtype /Link
 /A << /S /GoTo /D (page.660) >>
 >> endobj
-13271 0 obj <<
+13260 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.586 416.21 231.942 427.354]
 /Subtype /Link
 /A << /S /GoTo /D (page.813) >>
 >> endobj
-13272 0 obj <<
+13261 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [225.129 402.661 243.485 414.229]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-13273 0 obj <<
+13262 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [229.19 389.112 247.546 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.131) >>
 >> endobj
-13274 0 obj <<
+13263 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [278.008 375.562 296.364 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.128) >>
 >> endobj
-13275 0 obj <<
+13264 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.311 362.013 223.667 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.300) >>
 >> endobj
-13276 0 obj <<
+13265 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [231.735 348.464 250.091 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.753) >>
 >> endobj
-13277 0 obj <<
+13266 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [172.826 334.915 191.182 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.765) >>
 >> endobj
-13278 0 obj <<
+13267 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.856 321.366 225.213 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.684) >>
 >> endobj
-13279 0 obj <<
+13268 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [243.644 307.816 262 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.700) >>
 >> endobj
-13280 0 obj <<
+13269 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [304.25 294.267 322.607 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.192) >>
 >> endobj
-13281 0 obj <<
+13270 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [239.25 280.718 257.607 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.706) >>
 >> endobj
-13282 0 obj <<
+13271 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [170.735 267.169 189.091 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.749) >>
 >> endobj
-13283 0 obj <<
+13272 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [257.856 253.62 276.213 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.363) >>
 >> endobj
-13284 0 obj <<
+13273 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.25 240.07 212.152 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.91) >>
 >> endobj
-13285 0 obj <<
+13274 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.826 240.07 235.182 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.124) >>
 >> endobj
-13286 0 obj <<
+13275 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [239.856 240.07 258.213 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-13287 0 obj <<
+13276 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [269.099 226.521 287.455 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-13288 0 obj <<
+13277 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [291.099 212.972 309.455 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.313) >>
 >> endobj
-13289 0 obj <<
+13278 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.159 199.423 259.516 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.313) >>
 >> endobj
-13290 0 obj <<
+13279 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.402 158.775 246.758 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.324) >>
 >> endobj
-13291 0 obj <<
+13280 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [258.856 145.226 277.213 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.313) >>
 >> endobj
-13292 0 obj <<
+13281 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [281.887 145.226 300.243 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.320) >>
 >> endobj
-13293 0 obj <<
+13282 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [238.099 131.677 256.455 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-13294 0 obj <<
+13283 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [269.099 118.128 287.455 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.332) >>
 >> endobj
-13295 0 obj <<
+13284 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [292.129 118.128 310.485 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.333) >>
 >> endobj
-13296 0 obj <<
+13285 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.255 646.546 471.611 658.115]
 /Subtype /Link
 /A << /S /GoTo /D (page.316) >>
 >> endobj
-13297 0 obj <<
+13286 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.558 632.997 446.914 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.216) >>
 >> endobj
-13298 0 obj <<
+13287 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.606 619.448 444.963 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.556) >>
 >> endobj
-13299 0 obj <<
+13288 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.103 605.899 433.46 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.165) >>
 >> endobj
-13300 0 obj <<
+13289 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.194 592.35 442.551 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.344) >>
 >> endobj
-13301 0 obj <<
+13290 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [467.043 578.8 485.399 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.616) >>
 >> endobj
-13302 0 obj <<
+13291 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [435.164 565.251 453.52 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.349) >>
 >> endobj
-13303 0 obj <<
+13292 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [381.588 551.702 399.944 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.764) >>
 >> endobj
-13304 0 obj <<
+13293 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [432.831 538.153 451.187 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.724) >>
 >> endobj
-13305 0 obj <<
+13294 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [467.528 524.604 485.884 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.615) >>
 >> endobj
-13306 0 obj <<
+13295 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [373.285 511.054 391.641 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.195) >>
 >> endobj
-13307 0 obj <<
+13296 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.437 497.505 420.793 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.724) >>
 >> endobj
-13308 0 obj <<
+13297 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [497.467 483.956 510.369 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.65) >>
 >> endobj
-13309 0 obj <<
+13298 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.891 470.407 443.247 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.674) >>
 >> endobj
-13310 0 obj <<
+13299 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [447.922 470.407 466.278 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.676) >>
 >> endobj
-13311 0 obj <<
+13300 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [470.952 470.407 489.308 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.738) >>
 >> endobj
-13312 0 obj <<
+13301 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [440.8 456.858 459.157 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.458) >>
 >> endobj
-13313 0 obj <<
+13302 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.103 443.308 433.46 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.219) >>
 >> endobj
-13314 0 obj <<
+13303 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.74 429.759 404.096 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.458) >>
 >> endobj
-13315 0 obj <<
+13304 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 404.782 405.674 413.805]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-13316 0 obj <<
+13305 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.346 389.112 419.247 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-13317 0 obj <<
+13306 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.922 389.112 436.823 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-13318 0 obj <<
+13307 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.649 375.562 465.005 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-13319 0 obj <<
+13308 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [451.861 334.915 470.217 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.107) >>
 >> endobj
-13320 0 obj <<
+13309 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.348 307.816 428.704 318.96]
 /Subtype /Link
 /A << /S /GoTo /D (page.688) >>
 >> endobj
-13321 0 obj <<
+13310 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [472.528 294.267 490.884 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.690) >>
 >> endobj
-13322 0 obj <<
+13311 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.407 280.718 482.763 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.690) >>
 >> endobj
-13323 0 obj <<
+13312 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [486.376 267.169 504.732 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.692) >>
 >> endobj
-13324 0 obj <<
+13313 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [409.982 253.62 417.429 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.7) >>
 >> endobj
-13325 0 obj <<
+13314 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.103 253.62 440.46 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.110) >>
 >> endobj
-13326 0 obj <<
+13315 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.922 240.07 465.278 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.475) >>
 >> endobj
-13327 0 obj <<
+13316 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [379.118 226.521 392.02 238.089]
 /Subtype /Link
 /A << /S /GoTo /D (page.72) >>
 >> endobj
-13328 0 obj <<
+13317 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [395.833 226.521 408.735 238.089]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-13329 0 obj <<
+13318 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.548 226.521 425.45 238.089]
 /Subtype /Link
 /A << /S /GoTo /D (page.79) >>
 >> endobj
-13330 0 obj <<
+13319 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.263 226.521 442.165 238.089]
 /Subtype /Link
 /A << /S /GoTo /D (page.92) >>
 >> endobj
-13331 0 obj <<
+13320 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [445.978 226.521 464.334 238.089]
 /Subtype /Link
 /A << /S /GoTo /D (page.163) >>
 >> endobj
-13332 0 obj <<
+13321 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [467.796 226.521 486.153 238.089]
 /Subtype /Link
 /A << /S /GoTo /D (page.165) >>
 >> endobj
-13333 0 obj <<
+13322 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 226.521 508.322 238.089]
 /Subtype /Link
 /A << /S /GoTo /D (page.167) >>
 >> endobj
-13334 0 obj <<
+13323 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 212.972 405.674 224.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.168) >>
 >> endobj
-13335 0 obj <<
+13324 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.348 212.972 428.704 224.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-13336 0 obj <<
+13325 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.378 212.972 451.734 224.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.174) >>
 >> endobj
-13337 0 obj <<
+13326 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [456.409 212.972 474.765 224.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.180) >>
 >> endobj
-13338 0 obj <<
+13327 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [478.227 212.972 496.583 224.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.182) >>
 >> endobj
-13339 0 obj <<
+13328 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [459.982 199.423 478.338 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.177) >>
 >> endobj
-13340 0 obj <<
+13329 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [380.346 185.874 398.702 197.442]
 /Subtype /Link
 /A << /S /GoTo /D (page.291) >>
 >> endobj
-13341 0 obj <<
+13330 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.528 172.324 391.429 183.893]
 /Subtype /Link
 /A << /S /GoTo /D (page.49) >>
 >> endobj
-13342 0 obj <<
+13331 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [396.103 172.324 414.46 183.893]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-13343 0 obj <<
+13332 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.134 172.324 437.49 183.893]
 /Subtype /Link
 /A << /S /GoTo /D (page.291) >>
 >> endobj
-13344 0 obj <<
+13333 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.164 172.324 460.52 183.893]
 /Subtype /Link
 /A << /S /GoTo /D (page.697) >>
 >> endobj
-13345 0 obj <<
+13334 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [370.649 158.775 383.55 170.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.90) >>
 >> endobj
-13346 0 obj <<
+13335 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.225 158.775 406.581 170.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.800) >>
 >> endobj
-13347 0 obj <<
+13336 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.705 145.226 391.607 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.72) >>
 >> endobj
-13348 0 obj <<
+13337 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [398.775 145.226 411.677 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.92) >>
 >> endobj
-13349 0 obj <<
+13338 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.846 145.226 431.747 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.93) >>
 >> endobj
-13350 0 obj <<
+13339 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.916 145.226 457.272 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.111) >>
 >> endobj
-13351 0 obj <<
+13340 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.441 145.226 482.797 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.114) >>
 >> endobj
-13352 0 obj <<
+13341 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 145.226 508.322 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.128) >>
 >> endobj
-13353 0 obj <<
+13342 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 131.677 405.674 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.129) >>
 >> endobj
-13354 0 obj <<
+13343 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.98 131.677 431.336 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.131) >>
 >> endobj
-13355 0 obj <<
+13344 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.642 131.677 456.998 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.133) >>
 >> endobj
-13356 0 obj <<
+13345 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.304 131.677 482.66 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.154) >>
 >> endobj
-13357 0 obj <<
+13346 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 131.677 508.322 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.155) >>
 >> endobj
-13358 0 obj <<
+13347 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 118.128 405.674 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.158) >>
 >> endobj
-13359 0 obj <<
+13348 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.98 118.128 431.336 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.159) >>
 >> endobj
-13360 0 obj <<
+13349 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.642 118.128 456.998 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.162) >>
 >> endobj
-13361 0 obj <<
+13350 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.304 118.128 482.66 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.163) >>
 >> endobj
-13362 0 obj <<
+13351 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 118.128 508.322 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.179) >>
 >> endobj
-13373 0 obj <<
-/D [13371 0 R /XYZ 151.701 685.529 null]
+13362 0 obj <<
+/D [13360 0 R /XYZ 151.701 685.529 null]
 >> endobj
-13370 0 obj <<
+13359 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-13509 0 obj <<
+13498 0 obj <<
 /Length 1486      
 /Filter /FlateDecode
 >>
@@ -78906,1002 +82631,1002 @@
 Œõ¹ölʈ¦ =]™ÀaEµuÛ…2îê­ïÚ°¢$aIEÁ–XøŠèë©ÓÌìîÃØ+,Ø£¶ •¯ªÀŠ†Êi&_¦UºÍ¥ix6.B|{Œžc5nÌ.ë´à±»7 o±hšƒÐÂßÚ8š,`‹l¹}aÇАðÁ®Ïd¿>“¾m™Æ‹kN›‹¦S3$B{JÆdY͘6É2,fÐ C®—Ó|Ù`¿°Æö…5¬„z<ˆÓJÈŠi2F@û6.1,cO*ÿô÷›ûÅ7 fé
 endstream
 endobj
-13508 0 obj <<
+13497 0 obj <<
 /Type /Page
-/Contents 13509 0 R
-/Resources 13507 0 R
+/Contents 13498 0 R
+/Resources 13496 0 R
 /MediaBox [0 0 612 792]
-/Parent 12942 0 R
-/Annots [ 13363 0 R 13364 0 R 13365 0 R 13366 0 R 13367 0 R 13368 0 R 13369 0 R 13374 0 R 13375 0 R 13376 0 R 13377 0 R 13378 0 R 13379 0 R 13380 0 R 13381 0 R 13382 0 R 13383 0 R 13384 0 R 13385 0 R 13386 0 R 13387 0 R 13388 0 R 13389 0 R 13390 0 R 13391 0 R 13392 0 R 13393 0 R 13394 0 R 13395 0 R 13396 0 R 13397 0 R 13398 0 R 13399 0 R 13400 0 R 13401 0 R 13402 0 R 13403 0 R 13404 0 R 13405 0 R 13406 0 R 13407 0 R 13408 0 R 13409 0 R 13410 0 R 13411 0 R 13412 0 R 13413 0 R 13414 0 R 13415 0 R 13416 0 R 13417 0 R 13418 0 R 13419 0 R 13420 0 R 13421 0 R 13422 0 R 13423 0 R 13424 0 R 13425 0 R 13426 0 R 13427 0 R 13428 0 R 13429 0 R 13430 0 R 13431 0 R 13432 0 R 13433 0 R 13434 0 R 13435 0 R 13436 0 R 13437 0 R 13438 0 R 13439 0 R 13440 0 R 13441 0 R 13442 0 R 13443 0 R 13444 0 R 13445 0 R 13446 0 R 13447 0 R 13448 0 R 13449 0 R 13450 0 R 13451 0 R 13452 0 R 13453 0 R 13454 0 R 13455 0 R 13456 0 R 13457 0 R 13458 0 R 13459 0 R 13460 0 R 13461 0 R 13462 0 R 13463 0 R 13464 0 R 13465 0 R 13466 0 R 13467 0 R 13468 0 R 13469 0 R 13470 0 R 13471 0 R 13472 0 R 13473 0 R 13474 0 R 13475 0 R 13476 0 R 13477 0 R 13478 0 R 13479 0 R 13480 0 R 13481 0 R 13482 0 R 13483 0 R 13484 0 R 13485 0 R 13486 0 R 13487 0 R 13488 0 R 13489 0 R 13490 0 R 13491 0 R 13492 0 R 13493 0 R 13494 0 R 13495 0 R 13496 0 R 13497 0 R 13498 0 R 13499 0 R 13500 0 R 13501 0 R 13502 0 R 13503 0 R 13504 0 R 13505 0 R 13506 0 R ]
+/Parent 12931 0 R
+/Annots [ 13352 0 R 13353 0 R 13354 0 R 13355 0 R 13356 0 R 13357 0 R 13358 0 R 13363 0 R 13364 0 R 13365 0 R 13366 0 R 13367 0 R 13368 0 R 13369 0 R 13370 0 R 13371 0 R 13372 0 R 13373 0 R 13374 0 R 13375 0 R 13376 0 R 13377 0 R 13378 0 R 13379 0 R 13380 0 R 13381 0 R 13382 0 R 13383 0 R 13384 0 R 13385 0 R 13386 0 R 13387 0 R 13388 0 R 13389 0 R 13390 0 R 13391 0 R 13392 0 R 13393 0 R 13394 0 R 13395 0 R 13396 0 R 13397 0 R 13398 0 R 13399 0 R 13400 0 R 13401 0 R 13402 0 R 13403 0 R 13404 0 R 13405 0 R 13406 0 R 13407 0 R 13408 0 R 13409 0 R 13410 0 R 13411 0 R 13412 0 R 13413 0 R 13414 0 R 13415 0 R 13416 0 R 13417 0 R 13418 0 R 13419 0 R 13420 0 R 13421 0 R 13422 0 R 13423 0 R 13424 0 R 13425 0 R 13426 0 R 13427 0 R 13428 0 R 13429 0 R 13430 0 R 13431 0 R 13432 0 R 13433 0 R 13434 0 R 13435 0 R 13436 0 R 13437 0 R 13438 0 R 13439 0 R 13440 0 R 13441 0 R 13442 0 R 13443 0 R 13444 0 R 13445 0 R 13446 0 R 13447 0 R 13448 0 R 13449 0 R 13450 0 R 13451 0 R 13452 0 R 13453 0 R 13454 0 R 13455 0 R 13456 0 R 13457 0 R 13458 0 R 13459 0 R 13460 0 R 13461 0 R 13462 0 R 13463 0 R 13464 0 R 13465 0 R 13466 0 R 13467 0 R 13468 0 R 13469 0 R 13470 0 R 13471 0 R 13472 0 R 13473 0 R 13474 0 R 13475 0 R 13476 0 R 13477 0 R 13478 0 R 13479 0 R 13480 0 R 13481 0 R 13482 0 R 13483 0 R 13484 0 R 13485 0 R 13486 0 R 13487 0 R 13488 0 R 13489 0 R 13490 0 R 13491 0 R 13492 0 R 13493 0 R 13494 0 R 13495 0 R ]
 >> endobj
-13363 0 obj <<
+13352 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 646.546 158.102 657.69]
 /Subtype /Link
 /A << /S /GoTo /D (page.220) >>
 >> endobj
-13364 0 obj <<
+13353 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [165.408 646.546 183.764 657.69]
 /Subtype /Link
 /A << /S /GoTo /D (page.572) >>
 >> endobj
-13365 0 obj <<
+13354 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.07 646.546 209.426 657.69]
 /Subtype /Link
 /A << /S /GoTo /D (page.660) >>
 >> endobj
-13366 0 obj <<
+13355 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.732 646.546 235.088 657.69]
 /Subtype /Link
 /A << /S /GoTo /D (page.668) >>
 >> endobj
-13367 0 obj <<
+13356 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 646.546 260.751 657.69]
 /Subtype /Link
 /A << /S /GoTo /D (page.745) >>
 >> endobj
-13368 0 obj <<
+13357 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 632.997 158.102 644.141]
 /Subtype /Link
 /A << /S /GoTo /D (page.813) >>
 >> endobj
-13369 0 obj <<
+13358 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 632.997 181.132 644.141]
 /Subtype /Link
 /A << /S /GoTo /D (page.814) >>
 >> endobj
-13374 0 obj <<
+13363 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.881 619.448 223.238 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.160) >>
 >> endobj
-13375 0 obj <<
+13364 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [169.063 605.899 187.419 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.660) >>
 >> endobj
-13376 0 obj <<
+13365 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.093 605.899 210.45 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.815) >>
 >> endobj
-13377 0 obj <<
+13366 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.245 592.35 203.601 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.160) >>
 >> endobj
-13378 0 obj <<
+13367 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [198.259 578.8 216.615 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.185) >>
 >> endobj
-13379 0 obj <<
+13368 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [164.895 565.251 183.252 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.113) >>
 >> endobj
-13380 0 obj <<
+13369 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.623 551.702 226.979 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.108) >>
 >> endobj
-13381 0 obj <<
+13370 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [152.714 538.153 171.07 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-13382 0 obj <<
+13371 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [175.744 538.153 194.1 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.744) >>
 >> endobj
-13383 0 obj <<
+13372 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [160.774 524.604 179.13 536.172]
 /Subtype /Link
 /A << /S /GoTo /D (page.183) >>
 >> endobj
-13384 0 obj <<
+13373 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.017 511.054 211.373 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.744) >>
 >> endobj
-13385 0 obj <<
+13374 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.895 497.505 219.252 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.129) >>
 >> endobj
-13386 0 obj <<
+13375 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.926 497.505 242.282 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.131) >>
 >> endobj
-13387 0 obj <<
+13376 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [165.077 483.956 183.433 495.524]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-13388 0 obj <<
+13377 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [149.138 470.407 167.494 481.975]
 /Subtype /Link
 /A << /S /GoTo /D (page.112) >>
 >> endobj
-13389 0 obj <<
+13378 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.077 456.251 211.433 469.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.176) >>
 >> endobj
-13390 0 obj <<
+13379 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [186.623 443.308 204.979 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.724) >>
 >> endobj
-13391 0 obj <<
+13380 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.471 429.759 195.827 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.200) >>
 >> endobj
-13392 0 obj <<
+13381 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.502 429.759 218.858 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.731) >>
 >> endobj
-13393 0 obj <<
+13382 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.532 429.759 241.888 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.753) >>
 >> endobj
-13394 0 obj <<
+13383 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [141.714 416.21 154.615 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.77) >>
 >> endobj
-13395 0 obj <<
+13384 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [159.289 416.21 177.646 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.206) >>
 >> endobj
-13396 0 obj <<
+13385 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.32 416.21 200.676 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.665) >>
 >> endobj
-13397 0 obj <<
+13386 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [159.548 402.661 172.45 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.45) >>
 >> endobj
-13398 0 obj <<
+13387 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.056 389.112 166.958 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.69) >>
 >> endobj
-13399 0 obj <<
+13388 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.699 375.562 184.601 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.44) >>
 >> endobj
-13400 0 obj <<
+13389 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [189.275 375.562 202.177 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.48) >>
 >> endobj
-13401 0 obj <<
+13390 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.851 375.562 219.753 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.59) >>
 >> endobj
-13402 0 obj <<
+13391 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.427 375.562 237.328 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-13403 0 obj <<
+13392 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.329 362.013 184.23 373.157]
 /Subtype /Link
 /A << /S /GoTo /D (page.68) >>
 >> endobj
-13404 0 obj <<
+13393 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [179.541 348.464 192.443 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.67) >>
 >> endobj
-13405 0 obj <<
+13394 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [176.003 334.915 188.904 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.48) >>
 >> endobj
-13406 0 obj <<
+13395 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [158.093 321.366 176.45 332.51]
 /Subtype /Link
 /A << /S /GoTo /D (page.247) >>
 >> endobj
-13407 0 obj <<
+13396 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.238 294.267 186.14 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.72) >>
 >> endobj
-13408 0 obj <<
+13397 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [164.699 280.718 177.601 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.45) >>
 >> endobj
-13409 0 obj <<
+13398 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.275 280.718 195.177 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-13410 0 obj <<
+13399 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [164.45 267.169 177.352 278.313]
 /Subtype /Link
 /A << /S /GoTo /D (page.67) >>
 >> endobj
-13411 0 obj <<
+13400 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.026 267.169 194.927 278.313]
 /Subtype /Link
 /A << /S /GoTo /D (page.86) >>
 >> endobj
-13412 0 obj <<
+13401 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.336 253.62 209.237 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-13413 0 obj <<
+13402 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.639 240.07 175.54 251.47]
 /Subtype /Link
 /A << /S /GoTo /D (page.48) >>
 >> endobj
-13414 0 obj <<
+13403 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [179.874 226.521 192.776 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.60) >>
 >> endobj
-13415 0 obj <<
+13404 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [189.912 212.972 202.813 224.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-13416 0 obj <<
+13405 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.956 199.423 192.312 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.286) >>
 >> endobj
-13417 0 obj <<
+13406 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [248.199 185.874 266.555 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.212) >>
 >> endobj
-13418 0 obj <<
+13407 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.986 172.324 224.343 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.231) >>
 >> endobj
-13419 0 obj <<
+13408 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.047 158.775 231.403 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.309) >>
 >> endobj
-13420 0 obj <<
+13409 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.168 145.226 200.524 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-13421 0 obj <<
+13410 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.229 145.226 222.585 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.234) >>
 >> endobj
-13422 0 obj <<
+13411 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.289 145.226 244.646 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-13423 0 obj <<
+13412 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [248.35 145.226 266.706 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.238) >>
 >> endobj
-13424 0 obj <<
+13413 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 131.677 158.102 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.250) >>
 >> endobj
-13425 0 obj <<
+13414 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 131.677 181.132 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.306) >>
 >> endobj
-13426 0 obj <<
+13415 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.289 118.128 233.646 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.235) >>
 >> endobj
-13427 0 obj <<
+13416 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.9 646.546 429.256 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-13428 0 obj <<
+13417 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [377.264 632.545 395.62 644.235]
 /Subtype /Link
 /A << /S /GoTo /D (page.723) >>
 >> endobj
-13429 0 obj <<
+13418 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [372.991 618.545 385.893 630.234]
 /Subtype /Link
 /A << /S /GoTo /D (page.67) >>
 >> endobj
-13430 0 obj <<
+13419 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [389.597 618.545 402.499 630.234]
 /Subtype /Link
 /A << /S /GoTo /D (page.80) >>
 >> endobj
-13431 0 obj <<
+13420 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.203 618.545 419.105 630.234]
 /Subtype /Link
 /A << /S /GoTo /D (page.96) >>
 >> endobj
-13432 0 obj <<
+13421 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.809 618.545 435.711 630.234]
 /Subtype /Link
 /A << /S /GoTo /D (page.99) >>
 >> endobj
-13433 0 obj <<
+13422 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.415 618.545 457.771 630.234]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-13434 0 obj <<
+13423 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 607.117 354.864 616.139]
 /Subtype /Link
 /A << /S /GoTo /D (page.721) >>
 >> endobj
-13435 0 obj <<
+13424 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [357.189 590.995 370.091 602.684]
 /Subtype /Link
 /A << /S /GoTo /D (page.45) >>
 >> endobj
-13436 0 obj <<
+13425 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [360.28 576.994 373.181 588.393]
 /Subtype /Link
 /A << /S /GoTo /D (page.45) >>
 >> endobj
-13437 0 obj <<
+13426 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.627 535.443 410.984 547.132]
 /Subtype /Link
 /A << /S /GoTo /D (page.497) >>
 >> endobj
-13438 0 obj <<
+13427 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [389.034 521.442 401.936 533.132]
 /Subtype /Link
 /A << /S /GoTo /D (page.79) >>
 >> endobj
-13439 0 obj <<
+13428 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.56 521.442 420.461 533.132]
 /Subtype /Link
 /A << /S /GoTo /D (page.86) >>
 >> endobj
-13440 0 obj <<
+13429 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.085 521.442 438.987 533.132]
 /Subtype /Link
 /A << /S /GoTo /D (page.87) >>
 >> endobj
-13441 0 obj <<
+13430 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.611 521.442 457.513 533.132]
 /Subtype /Link
 /A << /S /GoTo /D (page.91) >>
 >> endobj
-13442 0 obj <<
+13431 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 507.893 349.41 519.037]
 /Subtype /Link
 /A << /S /GoTo /D (page.92) >>
 >> endobj
-13443 0 obj <<
+13432 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [353.114 507.893 371.47 519.037]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-13444 0 obj <<
+13433 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [375.175 507.893 393.531 519.037]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-13445 0 obj <<
+13434 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.235 507.893 415.592 519.037]
 /Subtype /Link
 /A << /S /GoTo /D (page.569) >>
 >> endobj
-13446 0 obj <<
+13435 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.296 507.893 437.652 519.037]
 /Subtype /Link
 /A << /S /GoTo /D (page.570) >>
 >> endobj
-13447 0 obj <<
+13436 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.357 507.893 459.713 519.037]
 /Subtype /Link
 /A << /S /GoTo /D (page.579) >>
 >> endobj
-13448 0 obj <<
+13437 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 494.344 354.864 505.488]
 /Subtype /Link
 /A << /S /GoTo /D (page.580) >>
 >> endobj
-13449 0 obj <<
+13438 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.538 494.344 377.895 505.488]
 /Subtype /Link
 /A << /S /GoTo /D (page.604) >>
 >> endobj
-13450 0 obj <<
+13439 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.569 494.344 400.925 505.488]
 /Subtype /Link
 /A << /S /GoTo /D (page.641) >>
 >> endobj
-13451 0 obj <<
+13440 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.599 494.344 423.955 505.488]
 /Subtype /Link
 /A << /S /GoTo /D (page.723) >>
 >> endobj
-13452 0 obj <<
+13441 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.629 494.344 446.986 505.488]
 /Subtype /Link
 /A << /S /GoTo /D (page.725) >>
 >> endobj
-13453 0 obj <<
+13442 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.907 480.343 407.808 492.032]
 /Subtype /Link
 /A << /S /GoTo /D (page.75) >>
 >> endobj
-13454 0 obj <<
+13443 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.304 480.343 432.66 492.032]
 /Subtype /Link
 /A << /S /GoTo /D (page.108) >>
 >> endobj
-13455 0 obj <<
+13444 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 480.343 457.513 492.032]
 /Subtype /Link
 /A << /S /GoTo /D (page.607) >>
 >> endobj
-13456 0 obj <<
+13445 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 466.794 354.864 477.938]
 /Subtype /Link
 /A << /S /GoTo /D (page.697) >>
 >> endobj
-13457 0 obj <<
+13446 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.538 466.794 377.895 477.938]
 /Subtype /Link
 /A << /S /GoTo /D (page.707) >>
 >> endobj
-13458 0 obj <<
+13447 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.233 452.793 419.59 464.482]
 /Subtype /Link
 /A << /S /GoTo /D (page.193) >>
 >> endobj
-13459 0 obj <<
+13448 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [370.597 438.792 388.953 450.481]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-13460 0 obj <<
+13449 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.536 424.791 419.893 436.481]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-13461 0 obj <<
+13450 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.567 424.791 442.923 436.481]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-13462 0 obj <<
+13451 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.839 410.79 424.196 422.48]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-13463 0 obj <<
+13452 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [393.718 396.789 412.074 408.479]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-13464 0 obj <<
+13453 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [398.021 382.789 416.377 394.478]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-13465 0 obj <<
+13454 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [369.415 368.788 387.771 380.477]
 /Subtype /Link
 /A << /S /GoTo /D (page.567) >>
 >> endobj
-13466 0 obj <<
+13455 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [409.536 354.787 427.893 366.476]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-13467 0 obj <<
+13456 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [379.097 340.786 397.453 352.354]
 /Subtype /Link
 /A << /S /GoTo /D (page.223) >>
 >> endobj
-13468 0 obj <<
+13457 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [373.718 326.785 392.074 338.475]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-13469 0 obj <<
+13458 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [396.749 326.785 415.105 338.475]
 /Subtype /Link
 /A << /S /GoTo /D (page.231) >>
 >> endobj
-13470 0 obj <<
+13459 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.779 326.785 438.135 338.475]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-13471 0 obj <<
+13460 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [376.703 312.784 395.059 324.353]
 /Subtype /Link
 /A << /S /GoTo /D (page.250) >>
 >> endobj
-13472 0 obj <<
+13461 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.597 298.784 415.953 310.473]
 /Subtype /Link
 /A << /S /GoTo /D (page.718) >>
 >> endobj
-13473 0 obj <<
+13462 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.991 284.783 378.347 296.472]
 /Subtype /Link
 /A << /S /GoTo /D (page.293) >>
 >> endobj
-13474 0 obj <<
+13463 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.021 284.783 401.377 296.472]
 /Subtype /Link
 /A << /S /GoTo /D (page.579) >>
 >> endobj
-13475 0 obj <<
+13464 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [374.536 270.782 392.893 282.471]
 /Subtype /Link
 /A << /S /GoTo /D (page.134) >>
 >> endobj
-13476 0 obj <<
+13465 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [367.567 256.781 380.468 268.471]
 /Subtype /Link
 /A << /S /GoTo /D (page.74) >>
 >> endobj
-13477 0 obj <<
+13466 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.142 256.781 398.044 268.471]
 /Subtype /Link
 /A << /S /GoTo /D (page.76) >>
 >> endobj
-13478 0 obj <<
+13467 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.718 256.781 415.62 268.471]
 /Subtype /Link
 /A << /S /GoTo /D (page.89) >>
 >> endobj
-13479 0 obj <<
+13468 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.294 256.781 438.65 268.471]
 /Subtype /Link
 /A << /S /GoTo /D (page.136) >>
 >> endobj
-13480 0 obj <<
+13469 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.203 242.78 417.559 254.47]
 /Subtype /Link
 /A << /S /GoTo /D (page.618) >>
 >> endobj
-13481 0 obj <<
+13470 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [371.87 228.779 384.771 240.469]
 /Subtype /Link
 /A << /S /GoTo /D (page.72) >>
 >> endobj
-13482 0 obj <<
+13471 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [389.445 228.779 402.347 240.469]
 /Subtype /Link
 /A << /S /GoTo /D (page.77) >>
 >> endobj
-13483 0 obj <<
+13472 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.021 228.779 425.377 240.469]
 /Subtype /Link
 /A << /S /GoTo /D (page.177) >>
 >> endobj
-13484 0 obj <<
+13473 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.052 228.779 448.408 240.469]
 /Subtype /Link
 /A << /S /GoTo /D (page.195) >>
 >> endobj
-13485 0 obj <<
+13474 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.839 214.779 447.196 226.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.104) >>
 >> endobj
-13486 0 obj <<
+13475 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.864 200.778 391.765 212.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-13487 0 obj <<
+13476 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [398.961 200.778 411.863 212.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.76) >>
 >> endobj
-13488 0 obj <<
+13477 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.059 200.778 431.96 212.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.95) >>
 >> endobj
-13489 0 obj <<
+13478 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 200.778 457.513 212.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-13490 0 obj <<
+13479 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 187.229 354.864 198.373]
 /Subtype /Link
 /A << /S /GoTo /D (page.166) >>
 >> endobj
-13491 0 obj <<
+13480 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.538 187.229 377.895 198.373]
 /Subtype /Link
 /A << /S /GoTo /D (page.167) >>
 >> endobj
-13492 0 obj <<
+13481 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.569 187.229 400.925 198.373]
 /Subtype /Link
 /A << /S /GoTo /D (page.177) >>
 >> endobj
-13493 0 obj <<
+13482 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.506 173.228 401.862 184.917]
 /Subtype /Link
 /A << /S /GoTo /D (page.289) >>
 >> endobj
-13494 0 obj <<
+13483 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [355.674 159.227 368.575 170.626]
 /Subtype /Link
 /A << /S /GoTo /D (page.49) >>
 >> endobj
-13495 0 obj <<
+13484 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.614 145.226 395.515 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.48) >>
 >> endobj
-13496 0 obj <<
+13485 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.461 145.226 414.363 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.71) >>
 >> endobj
-13497 0 obj <<
+13486 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.309 145.226 433.21 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.99) >>
 >> endobj
-13498 0 obj <<
+13487 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 145.226 457.513 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-13499 0 obj <<
+13488 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 131.677 354.864 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.106) >>
 >> endobj
-13500 0 obj <<
+13489 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.17 131.677 380.526 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.118) >>
 >> endobj
-13501 0 obj <<
+13490 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.832 131.677 406.188 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.134) >>
 >> endobj
-13502 0 obj <<
+13491 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.494 131.677 431.851 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.195) >>
 >> endobj
-13503 0 obj <<
+13492 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 131.677 457.513 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.234) >>
 >> endobj
-13504 0 obj <<
+13493 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 118.128 354.864 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-13505 0 obj <<
+13494 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.538 118.128 377.895 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.571) >>
 >> endobj
-13506 0 obj <<
+13495 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.569 118.128 400.925 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.723) >>
 >> endobj
-13510 0 obj <<
-/D [13508 0 R /XYZ 100.892 685.529 null]
+13499 0 obj <<
+/D [13497 0 R /XYZ 100.892 685.529 null]
 >> endobj
-13507 0 obj <<
+13496 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-13618 0 obj <<
+13607 0 obj <<
 /Length 1653      
 /Filter /FlateDecode
 >>
@@ -79918,750 +83643,750 @@
 N+¯Ò‘É’þÃa×MÙ6ݍl¢äacµX,׸Æ^ölB†_÷•d³ó¥«Ñõ¡YUYì7天Ǹ-ø¿¶9ؼÌ7á4Xuò¨ê‘G3Pϯ.ÜÛå^”á×o!ƒ6ãð÷üfñ/ä]ZX
 endstream
 endobj
-13617 0 obj <<
+13606 0 obj <<
 /Type /Page
-/Contents 13618 0 R
-/Resources 13616 0 R
+/Contents 13607 0 R
+/Resources 13605 0 R
 /MediaBox [0 0 612 792]
-/Parent 13620 0 R
-/Annots [ 13511 0 R 13512 0 R 13513 0 R 13514 0 R 13515 0 R 13516 0 R 13517 0 R 13518 0 R 13519 0 R 13520 0 R 13521 0 R 13522 0 R 13523 0 R 13524 0 R 13525 0 R 13526 0 R 13527 0 R 13528 0 R 13529 0 R 13530 0 R 13531 0 R 13532 0 R 13533 0 R 13534 0 R 13535 0 R 13536 0 R 13537 0 R 13538 0 R 13539 0 R 13540 0 R 13541 0 R 13542 0 R 13543 0 R 13544 0 R 13545 0 R 13546 0 R 13547 0 R 13548 0 R 13549 0 R 13550 0 R 13551 0 R 13552 0 R 13553 0 R 13554 0 R 13555 0 R 13556 0 R 13557 0 R 13558 0 R 13559 0 R 13560 0 R 13561 0 R 13562 0 R 13563 0 R 13564 0 R 13565 0 R 13566 0 R 13567 0 R 13568 0 R 13569 0 R 13570 0 R 13571 0 R 13572 0 R 13573 0 R 13574 0 R 13575 0 R 13576 0 R 13577 0 R 13578 0 R 13579 0 R 13580 0 R 13581 0 R 13582 0 R 13583 0 R 13584 0 R 13585 0 R 13586 0 R 13587 0 R 13588 0 R 13589 0 R 13590 0 R 13591 0 R 13592 0 R 13593 0 R 13594 0 R 13595 0 R 13596 0 R 13597 0 R 13598 0 R 13599 0 R 13600 0 R 13601 0 R 13602 0 R 13603 0 R 13604 0 R 13605 0 R 13606 0 R 13607 0 R 13608 0 R 13609 0 R 13610 0 R 13611 0 R 13612 0 R 13613 0 R 13614 0 R ]
+/Parent 13609 0 R
+/Annots [ 13500 0 R 13501 0 R 13502 0 R 13503 0 R 13504 0 R 13505 0 R 13506 0 R 13507 0 R 13508 0 R 13509 0 R 13510 0 R 13511 0 R 13512 0 R 13513 0 R 13514 0 R 13515 0 R 13516 0 R 13517 0 R 13518 0 R 13519 0 R 13520 0 R 13521 0 R 13522 0 R 13523 0 R 13524 0 R 13525 0 R 13526 0 R 13527 0 R 13528 0 R 13529 0 R 13530 0 R 13531 0 R 13532 0 R 13533 0 R 13534 0 R 13535 0 R 13536 0 R 13537 0 R 13538 0 R 13539 0 R 13540 0 R 13541 0 R 13542 0 R 13543 0 R 13544 0 R 13545 0 R 13546 0 R 13547 0 R 13548 0 R 13549 0 R 13550 0 R 13551 0 R 13552 0 R 13553 0 R 13554 0 R 13555 0 R 13556 0 R 13557 0 R 13558 0 R 13559 0 R 13560 0 R 13561 0 R 13562 0 R 13563 0 R 13564 0 R 13565 0 R 13566 0 R 13567 0 R 13568 0 R 13569 0 R 13570 0 R 13571 0 R 13572 0 R 13573 0 R 13574 0 R 13575 0 R 13576 0 R 13577 0 R 13578 0 R 13579 0 R 13580 0 R 13581 0 R 13582 0 R 13583 0 R 13584 0 R 13585 0 R 13586 0 R 13587 0 R 13588 0 R 13589 0 R 13590 0 R 13591 0 R 13592 0 R 13593 0 R 13594 0 R 13595 0 R 13596 0 R 13597 0 R 13598 0 R 13599 0 R 13600 0 R 13601 0 R 13602 0 R 13603 0 R ]
 >> endobj
-13511 0 obj <<
+13500 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [263.766 619.448 282.122 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.238) >>
 >> endobj
-13512 0 obj <<
+13501 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [272.956 578.8 285.857 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.96) >>
 >> endobj
-13513 0 obj <<
+13502 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.204 578.8 311.56 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.107) >>
 >> endobj
-13514 0 obj <<
+13503 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 565.251 208.912 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.159) >>
 >> endobj
-13515 0 obj <<
+13504 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.586 565.251 231.942 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-13516 0 obj <<
+13505 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.616 565.251 254.972 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-13517 0 obj <<
+13506 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.646 565.251 278.003 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-13518 0 obj <<
+13507 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [274.151 551.702 287.053 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.96) >>
 >> endobj
-13519 0 obj <<
+13508 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.204 551.702 311.56 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-13520 0 obj <<
+13509 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 538.153 208.912 549.297]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-13521 0 obj <<
+13510 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.586 538.153 231.942 549.297]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-13522 0 obj <<
+13511 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [296.234 524.604 314.59 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-13523 0 obj <<
+13512 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [238.675 511.054 257.031 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-13524 0 obj <<
+13513 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [261.705 511.054 280.061 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.166) >>
 >> endobj
-13525 0 obj <<
+13514 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [284.735 511.054 303.091 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.575) >>
 >> endobj
-13526 0 obj <<
+13515 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [253.826 497.505 266.728 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.70) >>
 >> endobj
-13527 0 obj <<
+13516 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [271.402 497.505 284.304 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.74) >>
 >> endobj
-13528 0 obj <<
+13517 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [288.978 497.505 301.879 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.99) >>
 >> endobj
-13529 0 obj <<
+13518 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.614 483.956 239.97 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.137) >>
 >> endobj
-13530 0 obj <<
+13519 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.584 443.308 273.94 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.571) >>
 >> endobj
-13531 0 obj <<
+13520 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [231.069 429.759 249.425 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.605) >>
 >> endobj
-13532 0 obj <<
+13521 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [256.19 416.21 274.546 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.135) >>
 >> endobj
-13533 0 obj <<
+13522 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [235.373 402.661 248.275 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.60) >>
 >> endobj
-13534 0 obj <<
+13523 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.65 402.661 267.552 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.89) >>
 >> endobj
-13535 0 obj <<
+13524 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.927 402.661 286.829 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.99) >>
 >> endobj
-13536 0 obj <<
+13525 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.204 402.661 311.56 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.107) >>
 >> endobj
-13537 0 obj <<
+13526 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 389.112 208.912 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.110) >>
 >> endobj
-13538 0 obj <<
+13527 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.218 389.112 234.574 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.134) >>
 >> endobj
-13539 0 obj <<
+13528 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.88 389.112 260.236 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.193) >>
 >> endobj
-13540 0 obj <<
+13529 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [267.542 389.112 285.898 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-13541 0 obj <<
+13530 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.204 389.112 311.56 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-13542 0 obj <<
+13531 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 375.562 208.912 386.706]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-13543 0 obj <<
+13532 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.586 375.562 231.942 386.706]
 /Subtype /Link
 /A << /S /GoTo /D (page.579) >>
 >> endobj
-13544 0 obj <<
+13533 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.616 375.562 254.972 386.706]
 /Subtype /Link
 /A << /S /GoTo /D (page.631) >>
 >> endobj
-13545 0 obj <<
+13534 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.523 362.013 291.879 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.101) >>
 >> endobj
-13546 0 obj <<
+13535 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.372 348.464 291.728 360.032]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-13547 0 obj <<
+13536 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [214.493 334.915 227.394 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.93) >>
 >> endobj
-13548 0 obj <<
+13537 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.069 334.915 250.425 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-13549 0 obj <<
+13538 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.281 321.366 232.182 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.86) >>
 >> endobj
-13550 0 obj <<
+13539 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.856 321.366 255.213 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-13551 0 obj <<
+13540 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.644 307.816 234 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.138) >>
 >> endobj
-13552 0 obj <<
+13541 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [238.675 307.816 257.031 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.567) >>
 >> endobj
-13553 0 obj <<
+13542 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [261.705 307.816 280.061 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.570) >>
 >> endobj
-13554 0 obj <<
+13543 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [260.25 294.267 278.607 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.247) >>
 >> endobj
-13555 0 obj <<
+13544 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [268.798 280.718 287.154 292.286]
 /Subtype /Link
 /A << /S /GoTo /D (page.237) >>
 >> endobj
-13556 0 obj <<
+13545 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.204 280.718 311.56 292.286]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-13557 0 obj <<
+13546 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 269.29 208.912 278.313]
 /Subtype /Link
 /A << /S /GoTo /D (page.610) >>
 >> endobj
-13558 0 obj <<
+13547 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.917 253.62 278.273 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.203) >>
 >> endobj
-13559 0 obj <<
+13548 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.341 240.07 242.697 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.237) >>
 >> endobj
-13560 0 obj <<
+13549 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [247.372 240.07 265.728 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.250) >>
 >> endobj
-13561 0 obj <<
+13550 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.947 226.521 238.304 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.575) >>
 >> endobj
-13562 0 obj <<
+13551 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.978 226.521 261.334 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.587) >>
 >> endobj
-13563 0 obj <<
+13552 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [266.008 226.521 284.364 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.590) >>
 >> endobj
-13564 0 obj <<
+13553 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.281 212.972 273.637 224.54]
 /Subtype /Link
 /A << /S /GoTo /D (page.243) >>
 >> endobj
-13565 0 obj <<
+13554 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.372 199.423 235.728 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.110) >>
 >> endobj
-13566 0 obj <<
+13555 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [257.159 185.874 275.516 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.110) >>
 >> endobj
-13567 0 obj <<
+13556 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [272.372 172.324 290.728 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.168) >>
 >> endobj
-13568 0 obj <<
+13557 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.644 158.775 247.546 170.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.79) >>
 >> endobj
-13569 0 obj <<
+13558 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.796 145.226 247.698 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.78) >>
 >> endobj
-13570 0 obj <<
+13559 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [252.372 145.226 265.273 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.79) >>
 >> endobj
-13571 0 obj <<
+13560 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [235.25 131.677 248.152 143.245]
 /Subtype /Link
 /A << /S /GoTo /D (page.80) >>
 >> endobj
-13572 0 obj <<
+13561 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.553 118.128 237.91 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.341) >>
 >> endobj
-13573 0 obj <<
+13562 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.316 646.546 425.672 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.674) >>
 >> endobj
-13574 0 obj <<
+13563 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.346 646.546 448.702 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.676) >>
 >> endobj
-13575 0 obj <<
+13564 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.376 646.546 471.732 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.681) >>
 >> endobj
-13576 0 obj <<
+13565 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.285 632.928 431.641 644.617]
 /Subtype /Link
 /A << /S /GoTo /D (page.324) >>
 >> endobj
-13577 0 obj <<
+13566 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [459.134 619.309 477.49 630.999]
 /Subtype /Link
 /A << /S /GoTo /D (page.341) >>
 >> endobj
-13578 0 obj <<
+13567 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.043 605.69 431.399 617.38]
 /Subtype /Link
 /A << /S /GoTo /D (page.341) >>
 >> endobj
-13579 0 obj <<
+13568 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [377.497 592.072 395.854 603.761]
 /Subtype /Link
 /A << /S /GoTo /D (page.475) >>
 >> endobj
-13580 0 obj <<
+13569 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.74 578.453 465.096 590.143]
 /Subtype /Link
 /A << /S /GoTo /D (page.316) >>
 >> endobj
-13581 0 obj <<
+13570 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.073 564.835 400.429 576.524]
 /Subtype /Link
 /A << /S /GoTo /D (page.389) >>
 >> endobj
-13582 0 obj <<
+13571 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.134 551.216 446.49 562.905]
 /Subtype /Link
 /A << /S /GoTo /D (page.411) >>
 >> endobj
-13583 0 obj <<
+13572 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.861 537.597 449.217 549.287]
 /Subtype /Link
 /A << /S /GoTo /D (page.405) >>
 >> endobj
-13584 0 obj <<
+13573 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.013 523.979 424.369 535.668]
 /Subtype /Link
 /A << /S /GoTo /D (page.412) >>
 >> endobj
-13585 0 obj <<
+13574 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.952 510.36 422.308 522.05]
 /Subtype /Link
 /A << /S /GoTo /D (page.411) >>
 >> endobj
-13586 0 obj <<
+13575 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.861 496.742 429.217 508.431]
 /Subtype /Link
 /A << /S /GoTo /D (page.412) >>
 >> endobj
-13587 0 obj <<
+13576 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [462.922 483.123 481.278 494.812]
 /Subtype /Link
 /A << /S /GoTo /D (page.707) >>
 >> endobj
-13588 0 obj <<
+13577 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.952 469.504 434.308 481.194]
 /Subtype /Link
 /A << /S /GoTo /D (page.683) >>
 >> endobj
-13589 0 obj <<
+13578 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.952 455.886 404.308 467.575]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-13590 0 obj <<
+13579 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [427.497 442.267 445.854 453.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.483) >>
 >> endobj
-13591 0 obj <<
+13580 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.77 428.648 410.672 440.338]
 /Subtype /Link
 /A << /S /GoTo /D (page.90) >>
 >> endobj
-13592 0 obj <<
+13581 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [479.013 415.03 497.369 426.719]
 /Subtype /Link
 /A << /S /GoTo /D (page.569) >>
 >> endobj
-13593 0 obj <<
+13582 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [374.285 401.411 392.641 412.98]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-13594 0 obj <<
+13583 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.315 401.411 415.672 412.98]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-13595 0 obj <<
+13584 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [448.71 333.457 467.066 345.146]
 /Subtype /Link
 /A << /S /GoTo /D (page.577) >>
 >> endobj
-13596 0 obj <<
+13585 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [474.619 319.838 492.975 331.528]
 /Subtype /Link
 /A << /S /GoTo /D (page.819) >>
 >> endobj
-13597 0 obj <<
+13586 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [460.073 306.22 478.429 317.788]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-13598 0 obj <<
+13587 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.227 279.052 430.583 290.741]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-13599 0 obj <<
+13588 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.77 254.314 419.672 265.882]
 /Subtype /Link
 /A << /S /GoTo /D (page.67) >>
 >> endobj
-13600 0 obj <<
+13589 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.346 254.314 442.702 265.882]
 /Subtype /Link
 /A << /S /GoTo /D (page.107) >>
 >> endobj
-13601 0 obj <<
+13590 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [374.043 240.695 392.399 252.263]
 /Subtype /Link
 /A << /S /GoTo /D (page.318) >>
 >> endobj
-13602 0 obj <<
+13591 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.74 227.077 457.096 238.766]
 /Subtype /Link
 /A << /S /GoTo /D (page.687) >>
 >> endobj
-13603 0 obj <<
+13592 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.134 213.458 421.49 225.026]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-13604 0 obj <<
+13593 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [386.891 199.839 405.247 211.529]
 /Subtype /Link
 /A << /S /GoTo /D (page.610) >>
 >> endobj
-13605 0 obj <<
+13594 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [463.225 186.221 481.581 197.91]
 /Subtype /Link
 /A << /S /GoTo /D (page.641) >>
 >> endobj
-13606 0 obj <<
+13595 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [390.497 172.602 403.399 184.292]
 /Subtype /Link
 /A << /S /GoTo /D (page.79) >>
 >> endobj
-13607 0 obj <<
+13596 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [408.073 172.602 426.429 184.292]
 /Subtype /Link
 /A << /S /GoTo /D (page.163) >>
 >> endobj
-13608 0 obj <<
+13597 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.103 172.602 449.46 184.292]
 /Subtype /Link
 /A << /S /GoTo /D (page.166) >>
 >> endobj
-13609 0 obj <<
+13598 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.134 158.983 446.49 170.673]
 /Subtype /Link
 /A << /S /GoTo /D (page.163) >>
 >> endobj
-13610 0 obj <<
+13599 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.74 145.365 443.096 157.054]
 /Subtype /Link
 /A << /S /GoTo /D (page.166) >>
 >> endobj
-13611 0 obj <<
+13600 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.528 131.746 446.884 143.436]
 /Subtype /Link
 /A << /S /GoTo /D (page.166) >>
 >> endobj
-13612 0 obj <<
+13601 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.679 118.128 397.035 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.457) >>
 >> endobj
-13613 0 obj <<
+13602 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.709 118.128 420.066 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.485) >>
 >> endobj
-13614 0 obj <<
+13603 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.74 118.128 443.096 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.486) >>
 >> endobj
-13619 0 obj <<
-/D [13617 0 R /XYZ 151.701 685.529 null]
+13608 0 obj <<
+/D [13606 0 R /XYZ 151.701 685.529 null]
 >> endobj
-13616 0 obj <<
+13605 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R /F52 3737 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-13722 0 obj <<
+13711 0 obj <<
 /Length 1599      
 /Filter /FlateDecode
 >>
@@ -80685,715 +84410,715 @@
 óù:3úÈMæ kQÍ̪Ü64QYO¶•aÒfy¬È2ûôú«ï
 endstream
 endobj
-13721 0 obj <<
+13710 0 obj <<
 /Type /Page
-/Contents 13722 0 R
-/Resources 13720 0 R
+/Contents 13711 0 R
+/Resources 13709 0 R
 /MediaBox [0 0 612 792]
-/Parent 13620 0 R
-/Annots [ 13615 0 R 13621 0 R 13622 0 R 13623 0 R 13624 0 R 13625 0 R 13626 0 R 13627 0 R 13628 0 R 13629 0 R 13630 0 R 13631 0 R 13632 0 R 13633 0 R 13634 0 R 13635 0 R 13636 0 R 13637 0 R 13638 0 R 13639 0 R 13640 0 R 13641 0 R 13642 0 R 13643 0 R 13644 0 R 13645 0 R 13646 0 R 13647 0 R 13648 0 R 13649 0 R 13650 0 R 13651 0 R 13652 0 R 13653 0 R 13654 0 R 13655 0 R 13656 0 R 13657 0 R 13658 0 R 13659 0 R 13660 0 R 13661 0 R 13662 0 R 13663 0 R 13664 0 R 13665 0 R 13666 0 R 13667 0 R 13668 0 R 13669 0 R 13670 0 R 13671 0 R 13672 0 R 13673 0 R 13674 0 R 13675 0 R 13676 0 R 13677 0 R 13678 0 R 13679 0 R 13680 0 R 13681 0 R 13682 0 R 13683 0 R 13684 0 R 13685 0 R 13686 0 R 13687 0 R 13688 0 R 13689 0 R 13690 0 R 13691 0 R 13692 0 R 13693 0 R 13694 0 R 13695 0 R 13696 0 R 13697 0 R 13698 0 R 13699 0 R 13700 0 R 13701 0 R 13702 0 R 13703 0 R 13704 0 R 13705 0 R 13706 0 R 13707 0 R 13708 0 R 13709 0 R 13710 0 R 13711 0 R 13712 0 R 13713 0 R 13714 0 R 13715 0 R 13716 0 R 13717 0 R 13718 0 R ]
+/Parent 13609 0 R
+/Annots [ 13604 0 R 13610 0 R 13611 0 R 13612 0 R 13613 0 R 13614 0 R 13615 0 R 13616 0 R 13617 0 R 13618 0 R 13619 0 R 13620 0 R 13621 0 R 13622 0 R 13623 0 R 13624 0 R 13625 0 R 13626 0 R 13627 0 R 13628 0 R 13629 0 R 13630 0 R 13631 0 R 13632 0 R 13633 0 R 13634 0 R 13635 0 R 13636 0 R 13637 0 R 13638 0 R 13639 0 R 13640 0 R 13641 0 R 13642 0 R 13643 0 R 13644 0 R 13645 0 R 13646 0 R 13647 0 R 13648 0 R 13649 0 R 13650 0 R 13651 0 R 13652 0 R 13653 0 R 13654 0 R 13655 0 R 13656 0 R 13657 0 R 13658 0 R 13659 0 R 13660 0 R 13661 0 R 13662 0 R 13663 0 R 13664 0 R 13665 0 R 13666 0 R 13667 0 R 13668 0 R 13669 0 R 13670 0 R 13671 0 R 13672 0 R 13673 0 R 13674 0 R 13675 0 R 13676 0 R 13677 0 R 13678 0 R 13679 0 R 13680 0 R 13681 0 R 13682 0 R 13683 0 R 13684 0 R 13685 0 R 13686 0 R 13687 0 R 13688 0 R 13689 0 R 13690 0 R 13691 0 R 13692 0 R 13693 0 R 13694 0 R 13695 0 R 13696 0 R 13697 0 R 13698 0 R 13699 0 R 13700 0 R 13701 0 R 13702 0 R 13703 0 R 13704 0 R 13705 0 R 13706 0 R 13707 0 R ]
 >> endobj
-13615 0 obj <<
+13604 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.138 646.546 203.494 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-13621 0 obj <<
+13610 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.198 632.997 233.555 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-13622 0 obj <<
+13611 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.531 618.842 267.887 631.743]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-13623 0 obj <<
+13612 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.471 605.899 189.827 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-13624 0 obj <<
+13613 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [148.683 592.35 167.039 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.116) >>
 >> endobj
-13625 0 obj <<
+13614 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.744 578.8 209.646 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-13626 0 obj <<
+13615 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.146 565.251 213.502 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.108) >>
 >> endobj
-13627 0 obj <<
+13616 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.77 565.251 237.126 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.214) >>
 >> endobj
-13628 0 obj <<
+13617 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 565.251 260.751 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.650) >>
 >> endobj
-13629 0 obj <<
+13618 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 551.702 158.102 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.706) >>
 >> endobj
-13630 0 obj <<
+13619 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 551.702 181.132 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.750) >>
 >> endobj
-13631 0 obj <<
+13620 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.807 551.702 204.163 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.751) >>
 >> endobj
-13632 0 obj <<
+13621 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [153.562 538.153 166.464 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.44) >>
 >> endobj
-13633 0 obj <<
+13622 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.138 538.153 184.04 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.54) >>
 >> endobj
-13634 0 obj <<
+13623 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [188.714 538.153 207.07 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.195) >>
 >> endobj
-13635 0 obj <<
+13624 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.683 524.604 219.04 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-13636 0 obj <<
+13625 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [203.293 511.054 216.195 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.54) >>
 >> endobj
-13637 0 obj <<
+13626 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.117 511.054 238.473 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.190) >>
 >> endobj
-13638 0 obj <<
+13627 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 511.054 260.751 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.192) >>
 >> endobj
-13639 0 obj <<
+13628 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 497.505 158.102 508.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.193) >>
 >> endobj
-13640 0 obj <<
+13629 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 497.505 181.132 508.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.195) >>
 >> endobj
-13641 0 obj <<
+13630 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.807 497.505 204.163 508.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-13642 0 obj <<
+13631 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.837 497.505 227.193 508.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.623) >>
 >> endobj
-13643 0 obj <<
+13632 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [231.867 497.505 250.223 508.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.716) >>
 >> endobj
-13644 0 obj <<
+13633 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [189.502 483.956 207.858 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.225) >>
 >> endobj
-13645 0 obj <<
+13634 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.199 470.407 170.1 481.806]
 /Subtype /Link
 /A << /S /GoTo /D (page.52) >>
 >> endobj
-13646 0 obj <<
+13635 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [175.986 456.858 194.343 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.106) >>
 >> endobj
-13647 0 obj <<
+13636 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [186.047 443.308 204.403 454.708]
 /Subtype /Link
 /A << /S /GoTo /D (page.112) >>
 >> endobj
-13648 0 obj <<
+13637 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [209.077 443.308 227.434 454.708]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-13649 0 obj <<
+13638 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [149.926 429.759 168.282 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.102) >>
 >> endobj
-13650 0 obj <<
+13639 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [141.926 416.21 160.282 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.676) >>
 >> endobj
-13651 0 obj <<
+13640 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [164.956 416.21 183.312 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.738) >>
 >> endobj
-13652 0 obj <<
+13641 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.653 402.661 215.009 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-13653 0 obj <<
+13642 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [153.047 375.562 171.403 386.962]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-13654 0 obj <<
+13643 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [164.562 362.013 182.918 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.411) >>
 >> endobj
-13655 0 obj <<
+13644 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [187.592 362.013 205.949 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.509) >>
 >> endobj
-13656 0 obj <<
+13645 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.017 348.464 248.373 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.572) >>
 >> endobj
-13657 0 obj <<
+13646 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [222.199 334.915 240.555 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.572) >>
 >> endobj
-13658 0 obj <<
+13647 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [164.805 320.76 183.161 333.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.403) >>
 >> endobj
-13659 0 obj <<
+13648 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.653 307.816 225.009 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-13660 0 obj <<
+13649 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [169.108 294.267 187.464 305.667]
 /Subtype /Link
 /A << /S /GoTo /D (page.509) >>
 >> endobj
-13661 0 obj <<
+13650 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.926 280.718 229.282 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.402) >>
 >> endobj
-13662 0 obj <<
+13651 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [168.653 253.62 187.009 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-13663 0 obj <<
+13652 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.562 240.07 217.918 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.528) >>
 >> endobj
-13664 0 obj <<
+13653 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [160.501 226.521 178.858 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.309) >>
 >> endobj
-13665 0 obj <<
+13654 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [250.32 212.972 268.676 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-13666 0 obj <<
+13655 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.623 199.423 189.979 210.567]
 /Subtype /Link
 /A << /S /GoTo /D (page.294) >>
 >> endobj
-13667 0 obj <<
+13656 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [194.653 199.423 213.009 210.567]
 /Subtype /Link
 /A << /S /GoTo /D (page.417) >>
 >> endobj
-13668 0 obj <<
+13657 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [175.926 185.874 194.282 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.744) >>
 >> endobj
-13669 0 obj <<
+13658 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [207.926 172.324 226.282 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.138) >>
 >> endobj
-13670 0 obj <<
+13659 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.895 158.169 158.252 171.071]
 /Subtype /Link
 /A << /S /GoTo /D (page.486) >>
 >> endobj
-13671 0 obj <<
+13660 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [126.562 145.226 144.918 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.461) >>
 >> endobj
-13672 0 obj <<
+13661 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [181.866 131.677 200.222 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-13673 0 obj <<
+13662 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.897 131.677 223.253 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.465) >>
 >> endobj
-13674 0 obj <<
+13663 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.927 131.677 246.283 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.479) >>
 >> endobj
-13675 0 obj <<
+13664 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.003 118.128 213.359 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.494) >>
 >> endobj
-13676 0 obj <<
+13665 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [368.765 646.546 387.121 658.115]
 /Subtype /Link
 /A << /S /GoTo /D (page.483) >>
 >> endobj
-13677 0 obj <<
+13666 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.795 646.546 410.151 658.115]
 /Subtype /Link
 /A << /S /GoTo /D (page.496) >>
 >> endobj
-13678 0 obj <<
+13667 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.249 632.931 401.605 644.621]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-13679 0 obj <<
+13668 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [355.567 619.317 373.923 631.006]
 /Subtype /Link
 /A << /S /GoTo /D (page.376) >>
 >> endobj
-13680 0 obj <<
+13669 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [340.93 605.702 359.286 617.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.619) >>
 >> endobj
-13681 0 obj <<
+13670 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [363.961 605.702 382.317 617.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.754) >>
 >> endobj
-13682 0 obj <<
+13671 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [389.658 592.087 408.014 603.777]
 /Subtype /Link
 /A << /S /GoTo /D (page.365) >>
 >> endobj
-13683 0 obj <<
+13672 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [342.567 578.472 360.923 590.041]
 /Subtype /Link
 /A << /S /GoTo /D (page.675) >>
 >> endobj
-13684 0 obj <<
+13673 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [364.385 578.472 382.741 590.041]
 /Subtype /Link
 /A << /S /GoTo /D (page.677) >>
 >> endobj
-13685 0 obj <<
+13674 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [379.748 564.857 398.105 576.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.677) >>
 >> endobj
-13686 0 obj <<
+13675 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [367.445 551.243 385.802 562.811]
 /Subtype /Link
 /A << /S /GoTo /D (page.593) >>
 >> endobj
-13687 0 obj <<
+13676 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.112 537.628 434.468 549.317]
 /Subtype /Link
 /A << /S /GoTo /D (page.323) >>
 >> endobj
-13688 0 obj <<
+13677 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.082 524.013 396.438 535.581]
 /Subtype /Link
 /A << /S /GoTo /D (page.403) >>
 >> endobj
-13689 0 obj <<
+13678 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [334.991 510.398 353.347 521.967]
 /Subtype /Link
 /A << /S /GoTo /D (page.558) >>
 >> endobj
-13690 0 obj <<
+13679 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [346.718 496.783 354.165 508.473]
 /Subtype /Link
 /A << /S /GoTo /D (page.7) >>
 >> endobj
-13691 0 obj <<
+13680 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [381.718 482.563 400.074 495.464]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-13692 0 obj <<
+13681 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [338.779 469.554 357.135 480.698]
 /Subtype /Link
 /A << /S /GoTo /D (page.319) >>
 >> endobj
-13693 0 obj <<
+13682 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.93 455.939 416.287 467.507]
 /Subtype /Link
 /A << /S /GoTo /D (page.199) >>
 >> endobj
-13694 0 obj <<
+13683 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.233 442.324 437.59 454.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-13695 0 obj <<
+13684 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.324 428.709 403.68 440.399]
 /Subtype /Link
 /A << /S /GoTo /D (page.208) >>
 >> endobj
-13696 0 obj <<
+13685 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [364.93 415.095 383.287 426.784]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-13697 0 obj <<
+13686 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [363.991 401.48 382.347 413.169]
 /Subtype /Link
 /A << /S /GoTo /D (page.391) >>
 >> endobj
-13698 0 obj <<
+13687 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.809 387.865 421.165 399.554]
 /Subtype /Link
 /A << /S /GoTo /D (page.603) >>
 >> endobj
-13699 0 obj <<
+13688 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.991 374.25 378.347 385.94]
 /Subtype /Link
 /A << /S /GoTo /D (page.365) >>
 >> endobj
-13700 0 obj <<
+13689 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [398.93 360.635 417.287 372.325]
 /Subtype /Link
 /A << /S /GoTo /D (page.692) >>
 >> endobj
-13701 0 obj <<
+13690 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [340.961 347.021 359.317 358.71]
 /Subtype /Link
 /A << /S /GoTo /D (page.366) >>
 >> endobj
-13702 0 obj <<
+13691 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.494 333.406 409.85 345.095]
 /Subtype /Link
 /A << /S /GoTo /D (page.555) >>
 >> endobj
-13703 0 obj <<
+13692 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.446 319.791 419.802 331.48]
 /Subtype /Link
 /A << /S /GoTo /D (page.313) >>
 >> endobj
-13704 0 obj <<
+13693 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [396.446 306.176 414.802 317.866]
 /Subtype /Link
 /A << /S /GoTo /D (page.320) >>
 >> endobj
-13705 0 obj <<
+13694 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.294 292.561 435.65 304.251]
 /Subtype /Link
 /A << /S /GoTo /D (page.393) >>
 >> endobj
-13706 0 obj <<
+13695 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.991 278.947 416.347 290.636]
 /Subtype /Link
 /A << /S /GoTo /D (page.674) >>
 >> endobj
-13707 0 obj <<
+13696 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.809 265.332 407.165 277.021]
 /Subtype /Link
 /A << /S /GoTo /D (page.175) >>
 >> endobj
-13708 0 obj <<
+13697 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [373.93 251.717 392.287 263.406]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-13709 0 obj <<
+13698 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [370.627 238.102 388.983 249.792]
 /Subtype /Link
 /A << /S /GoTo /D (page.701) >>
 >> endobj
-13710 0 obj <<
+13699 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [318.173 213.431 336.529 225.121]
 /Subtype /Link
 /A << /S /GoTo /D (page.687) >>
 >> endobj
-13711 0 obj <<
+13700 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [350.597 199.816 368.953 211.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.292) >>
 >> endobj
-13712 0 obj <<
+13701 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [373.627 199.816 391.983 211.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.296) >>
 >> endobj
-13713 0 obj <<
+13702 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [360.052 186.202 378.408 197.891]
 /Subtype /Link
 /A << /S /GoTo /D (page.200) >>
 >> endobj
-13714 0 obj <<
+13703 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.961 172.587 432.317 184.276]
 /Subtype /Link
 /A << /S /GoTo /D (page.692) >>
 >> endobj
-13715 0 obj <<
+13704 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [375.93 158.972 394.286 170.662]
 /Subtype /Link
 /A << /S /GoTo /D (page.692) >>
 >> endobj
-13716 0 obj <<
+13705 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [373.839 145.357 392.196 157.047]
 /Subtype /Link
 /A << /S /GoTo /D (page.692) >>
 >> endobj
-13717 0 obj <<
+13706 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [322.476 131.742 340.832 143.432]
 /Subtype /Link
 /A << /S /GoTo /D (page.118) >>
 >> endobj
-13718 0 obj <<
+13707 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [333.355 118.128 351.711 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.294) >>
 >> endobj
-13723 0 obj <<
-/D [13721 0 R /XYZ 100.892 685.529 null]
+13712 0 obj <<
+/D [13710 0 R /XYZ 100.892 685.529 null]
 >> endobj
-13720 0 obj <<
+13709 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-13828 0 obj <<
+13817 0 obj <<
 /Length 1500      
 /Filter /FlateDecode
 >>
@@ -81410,2284 +85135,2293 @@
 Õ’»NóÛíÓÔL„º­SØdh˜~¾Þ­¾ý¾™è
 endstream
 endobj
-13827 0 obj <<
+13816 0 obj <<
 /Type /Page
-/Contents 13828 0 R
-/Resources 13826 0 R
+/Contents 13817 0 R
+/Resources 13815 0 R
 /MediaBox [0 0 612 792]
-/Parent 13620 0 R
-/Annots [ 13719 0 R 13724 0 R 13725 0 R 13726 0 R 13727 0 R 13728 0 R 13729 0 R 13730 0 R 13731 0 R 13732 0 R 13733 0 R 13734 0 R 13735 0 R 13736 0 R 13737 0 R 13738 0 R 13739 0 R 13740 0 R 13741 0 R 13742 0 R 13743 0 R 13744 0 R 13745 0 R 13746 0 R 13747 0 R 13748 0 R 13749 0 R 13750 0 R 13751 0 R 13752 0 R 13753 0 R 13754 0 R 13755 0 R 13756 0 R 13757 0 R 13758 0 R 13759 0 R 13760 0 R 13761 0 R 13762 0 R 13763 0 R 13764 0 R 13765 0 R 13766 0 R 13767 0 R 13768 0 R 13769 0 R 13770 0 R 13771 0 R 13772 0 R 13773 0 R 13774 0 R 13775 0 R 13776 0 R 13777 0 R 13778 0 R 13779 0 R 13780 0 R 13781 0 R 13782 0 R 13783 0 R 13784 0 R 13785 0 R 13786 0 R 13787 0 R 13788 0 R 13789 0 R 13790 0 R 13791 0 R 13792 0 R 13793 0 R 13794 0 R 13795 0 R 13796 0 R 13797 0 R 13798 0 R 13799 0 R 13800 0 R 13801 0 R 13802 0 R 13803 0 R 13804 0 R 13805 0 R 13806 0 R 13807 0 R 13808 0 R 13809 0 R 13810 0 R 13811 0 R 13812 0 R 13813 0 R 13814 0 R 13815 0 R 13816 0 R 13817 0 R 13818 0 R 13819 0 R 13820 0 R 13821 0 R 13822 0 R 13823 0 R ]
+/Parent 13609 0 R
+/Annots [ 13708 0 R 13713 0 R 13714 0 R 13715 0 R 13716 0 R 13717 0 R 13718 0 R 13719 0 R 13720 0 R 13721 0 R 13722 0 R 13723 0 R 13724 0 R 13725 0 R 13726 0 R 13727 0 R 13728 0 R 13729 0 R 13730 0 R 13731 0 R 13732 0 R 13733 0 R 13734 0 R 13735 0 R 13736 0 R 13737 0 R 13738 0 R 13739 0 R 13740 0 R 13741 0 R 13742 0 R 13743 0 R 13744 0 R 13745 0 R 13746 0 R 13747 0 R 13748 0 R 13749 0 R 13750 0 R 13751 0 R 13752 0 R 13753 0 R 13754 0 R 13755 0 R 13756 0 R 13757 0 R 13758 0 R 13759 0 R 13760 0 R 13761 0 R 13762 0 R 13763 0 R 13764 0 R 13765 0 R 13766 0 R 13767 0 R 13768 0 R 13769 0 R 13770 0 R 13771 0 R 13772 0 R 13773 0 R 13774 0 R 13775 0 R 13776 0 R 13777 0 R 13778 0 R 13779 0 R 13780 0 R 13781 0 R 13782 0 R 13783 0 R 13784 0 R 13785 0 R 13786 0 R 13787 0 R 13788 0 R 13789 0 R 13790 0 R 13791 0 R 13792 0 R 13793 0 R 13794 0 R 13795 0 R 13796 0 R 13797 0 R 13798 0 R 13799 0 R 13800 0 R 13801 0 R 13802 0 R 13803 0 R 13804 0 R 13805 0 R 13806 0 R 13807 0 R 13808 0 R 13809 0 R 13810 0 R 13811 0 R 13812 0 R ]
 >> endobj
-13719 0 obj <<
+13708 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.917 646.546 255.273 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.691) >>
 >> endobj
-13724 0 obj <<
+13713 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.008 632.997 233.364 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.341) >>
 >> endobj
-13725 0 obj <<
+13714 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.644 619.448 292.001 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.626) >>
 >> endobj
-13726 0 obj <<
+13715 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [235.45 605.899 248.352 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.74) >>
 >> endobj
-13727 0 obj <<
+13716 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [209.269 592.35 227.625 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.556) >>
 >> endobj
-13728 0 obj <<
+13717 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.299 592.35 250.655 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.626) >>
 >> endobj
-13729 0 obj <<
+13718 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [179.856 578.8 198.213 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.560) >>
 >> endobj
-13730 0 obj <<
+13719 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [268.099 538.153 281.001 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.65) >>
 >> endobj
-13731 0 obj <<
+13720 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [240.735 524.604 253.637 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.65) >>
 >> endobj
-13732 0 obj <<
+13721 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.038 511.054 244.394 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.692) >>
 >> endobj
-13733 0 obj <<
+13722 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [181.614 497.505 199.97 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.154) >>
 >> endobj
-13734 0 obj <<
+13723 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [169.493 483.956 187.849 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.689) >>
 >> endobj
-13735 0 obj <<
+13724 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [262.25 470.407 280.607 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.313) >>
 >> endobj
-13736 0 obj <<
+13725 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [278.19 456.858 296.546 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.317) >>
 >> endobj
-13737 0 obj <<
+13726 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [222.614 443.308 240.97 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-13738 0 obj <<
+13727 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.675 429.759 227.031 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-13739 0 obj <<
+13728 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.341 416.21 231.697 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.315) >>
 >> endobj
-13740 0 obj <<
+13729 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [247.782 402.661 266.138 414.06]
 /Subtype /Link
 /A << /S /GoTo /D (page.316) >>
 >> endobj
-13741 0 obj <<
+13730 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [268.024 389.112 286.38 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.315) >>
 >> endobj
-13742 0 obj <<
+13731 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.782 375.562 224.138 387.131]
 /Subtype /Link
 /A << /S /GoTo /D (page.315) >>
 >> endobj
-13743 0 obj <<
+13732 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.994 362.013 239.35 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.315) >>
 >> endobj
-13744 0 obj <<
+13733 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [264.523 348.464 282.879 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.320) >>
 >> endobj
-13745 0 obj <<
+13734 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.705 334.915 204.061 346.483]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-13746 0 obj <<
+13735 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [211.947 321.366 230.304 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.178) >>
 >> endobj
-13747 0 obj <<
+13736 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.038 307.816 262.394 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.707) >>
 >> endobj
-13748 0 obj <<
+13737 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [179.826 294.267 198.182 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-13749 0 obj <<
+13738 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.19 280.718 239.546 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.346) >>
 >> endobj
-13750 0 obj <<
+13739 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.129 267.169 228.485 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.476) >>
 >> endobj
-13751 0 obj <<
+13740 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.129 253.62 202.485 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-13752 0 obj <<
+13741 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [178.432 240.07 191.334 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.66) >>
 >> endobj
-13753 0 obj <<
+13742 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.008 240.07 214.364 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-13754 0 obj <<
+13743 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.644 226.521 210 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.363) >>
 >> endobj
-13755 0 obj <<
+13744 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [214.675 226.521 233.031 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.365) >>
 >> endobj
-13756 0 obj <<
+13745 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [237.705 226.521 256.061 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.745) >>
 >> endobj
-13757 0 obj <<
+13746 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.159 212.972 241.516 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.366) >>
 >> endobj
-13758 0 obj <<
+13747 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [225.099 199.423 243.455 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.366) >>
 >> endobj
-13759 0 obj <<
+13748 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.038 185.874 252.394 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.129) >>
 >> endobj
-13760 0 obj <<
+13749 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [257.069 185.874 275.425 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.131) >>
 >> endobj
-13761 0 obj <<
+13750 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [243.19 172.324 261.546 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.128) >>
 >> endobj
-13762 0 obj <<
+13751 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.644 158.775 251 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.345) >>
 >> endobj
-13763 0 obj <<
+13752 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [238.341 145.226 256.697 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.183) >>
 >> endobj
-13764 0 obj <<
+13753 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.083 131.677 217.44 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.463) >>
 >> endobj
-13765 0 obj <<
+13754 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [222.614 131.677 240.97 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-13766 0 obj <<
+13755 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.144 131.677 264.5 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.475) >>
 >> endobj
-13767 0 obj <<
+13756 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [269.674 131.677 288.03 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.480) >>
 >> endobj
-13768 0 obj <<
+13757 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.204 131.677 311.56 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.523) >>
 >> endobj
-13769 0 obj <<
+13758 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 120.249 208.912 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.524) >>
 >> endobj
-13770 0 obj <<
+13759 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.74 646.546 462.096 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.528) >>
 >> endobj
-13771 0 obj <<
+13760 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [435.709 632.929 454.066 644.497]
 /Subtype /Link
 /A << /S /GoTo /D (page.475) >>
 >> endobj
-13772 0 obj <<
+13761 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [437.649 619.312 456.005 631.001]
 /Subtype /Link
 /A << /S /GoTo /D (page.526) >>
 >> endobj
-13773 0 obj <<
+13762 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.478 605.694 432.834 617.384]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-13774 0 obj <<
+13763 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.641 605.694 457.997 617.384]
 /Subtype /Link
 /A << /S /GoTo /D (page.475) >>
 >> endobj
-13775 0 obj <<
+13764 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.803 605.694 483.16 617.384]
 /Subtype /Link
 /A << /S /GoTo /D (page.479) >>
 >> endobj
-13776 0 obj <<
+13765 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 605.694 508.322 617.384]
 /Subtype /Link
 /A << /S /GoTo /D (page.523) >>
 >> endobj
-13777 0 obj <<
+13766 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 594.266 405.674 603.289]
 /Subtype /Link
 /A << /S /GoTo /D (page.526) >>
 >> endobj
-13778 0 obj <<
+13767 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [457.073 577.922 475.429 590.823]
 /Subtype /Link
 /A << /S /GoTo /D (page.481) >>
 >> endobj
-13779 0 obj <<
+13768 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [432.043 564.911 450.399 576.6]
 /Subtype /Link
 /A << /S /GoTo /D (page.167) >>
 >> endobj
-13780 0 obj <<
+13769 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.437 551.293 456.793 562.983]
 /Subtype /Link
 /A << /S /GoTo /D (page.324) >>
 >> endobj
-13781 0 obj <<
+13770 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [461.467 551.293 479.823 562.983]
 /Subtype /Link
 /A << /S /GoTo /D (page.332) >>
 >> endobj
-13782 0 obj <<
+13771 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [452.71 537.676 471.066 549.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.324) >>
 >> endobj
-13783 0 obj <<
+13772 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [475.74 537.676 494.096 549.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.333) >>
 >> endobj
-13784 0 obj <<
+13773 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 524.059 508.322 535.748]
 /Subtype /Link
 /A << /S /GoTo /D (page.324) >>
 >> endobj
-13785 0 obj <<
+13774 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 512.631 405.674 521.654]
 /Subtype /Link
 /A << /S /GoTo /D (page.332) >>
 >> endobj
-13786 0 obj <<
+13775 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.891 496.892 435.247 508.582]
 /Subtype /Link
 /A << /S /GoTo /D (page.167) >>
 >> endobj
-13787 0 obj <<
+13776 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.831 483.275 426.187 494.964]
 /Subtype /Link
 /A << /S /GoTo /D (page.322) >>
 >> endobj
-13788 0 obj <<
+13777 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.861 483.275 449.217 494.964]
 /Subtype /Link
 /A << /S /GoTo /D (page.323) >>
 >> endobj
-13789 0 obj <<
+13778 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.982 469.658 465.338 481.347]
 /Subtype /Link
 /A << /S /GoTo /D (page.324) >>
 >> endobj
-13790 0 obj <<
+13779 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [470.013 469.658 488.369 481.347]
 /Subtype /Link
 /A << /S /GoTo /D (page.332) >>
 >> endobj
-13791 0 obj <<
+13780 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [463.649 456.04 482.005 467.73]
 /Subtype /Link
 /A << /S /GoTo /D (page.277) >>
 >> endobj
-13792 0 obj <<
+13781 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.012 442.423 418.369 454.113]
 /Subtype /Link
 /A << /S /GoTo /D (page.322) >>
 >> endobj
-13793 0 obj <<
+13782 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.043 442.423 441.399 454.113]
 /Subtype /Link
 /A << /S /GoTo /D (page.323) >>
 >> endobj
-13794 0 obj <<
+13783 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.073 442.423 464.429 454.113]
 /Subtype /Link
 /A << /S /GoTo /D (page.339) >>
 >> endobj
-13795 0 obj <<
+13784 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [469.103 442.423 487.46 454.113]
 /Subtype /Link
 /A << /S /GoTo /D (page.350) >>
 >> endobj
-13796 0 obj <<
+13785 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [461.225 428.806 479.581 440.495]
 /Subtype /Link
 /A << /S /GoTo /D (page.163) >>
 >> endobj
-13797 0 obj <<
+13786 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [425.376 415.188 443.732 426.878]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-13798 0 obj <<
+13787 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [448.406 415.188 466.763 426.878]
 /Subtype /Link
 /A << /S /GoTo /D (page.238) >>
 >> endobj
-13799 0 obj <<
+13788 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [408.558 401.571 426.914 413.261]
 /Subtype /Link
 /A << /S /GoTo /D (page.570) >>
 >> endobj
-13800 0 obj <<
+13789 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [409.709 387.954 428.066 399.643]
 /Subtype /Link
 /A << /S /GoTo /D (page.571) >>
 >> endobj
-13801 0 obj <<
+13790 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.952 374.337 404.308 385.905]
 /Subtype /Link
 /A << /S /GoTo /D (page.800) >>
 >> endobj
-13802 0 obj <<
+13791 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.588 360.719 435.944 372.409]
 /Subtype /Link
 /A << /S /GoTo /D (page.796) >>
 >> endobj
-13803 0 obj <<
+13792 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.831 347.102 430.187 358.791]
 /Subtype /Link
 /A << /S /GoTo /D (page.809) >>
 >> endobj
-13804 0 obj <<
+13793 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [434.861 347.102 453.217 358.791]
 /Subtype /Link
 /A << /S /GoTo /D (page.810) >>
 >> endobj
-13805 0 obj <<
+13794 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [396.437 333.485 409.338 345.053]
 /Subtype /Link
 /A << /S /GoTo /D (page.81) >>
 >> endobj
-13806 0 obj <<
+13795 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.013 333.485 432.369 345.053]
 /Subtype /Link
 /A << /S /GoTo /D (page.677) >>
 >> endobj
-13807 0 obj <<
+13796 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [390.831 319.867 409.187 331.557]
 /Subtype /Link
 /A << /S /GoTo /D (page.561) >>
 >> endobj
-13808 0 obj <<
+13797 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [386.134 306.25 404.49 317.94]
 /Subtype /Link
 /A << /S /GoTo /D (page.738) >>
 >> endobj
-13809 0 obj <<
+13798 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.922 292.633 483.278 304.322]
 /Subtype /Link
 /A << /S /GoTo /D (page.689) >>
 >> endobj
-13810 0 obj <<
+13799 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [458.225 279.016 476.581 290.705]
 /Subtype /Link
 /A << /S /GoTo /D (page.199) >>
 >> endobj
-13811 0 obj <<
+13800 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [375.649 265.398 394.005 276.966]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-13812 0 obj <<
+13801 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [367.77 251.781 386.126 263.47]
 /Subtype /Link
 /A << /S /GoTo /D (page.684) >>
 >> endobj
-13813 0 obj <<
+13802 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [390.8 251.781 409.157 263.47]
 /Subtype /Link
 /A << /S /GoTo /D (page.769) >>
 >> endobj
-13814 0 obj <<
+13803 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.012 238.164 418.369 249.853]
 /Subtype /Link
 /A << /S /GoTo /D (page.587) >>
 >> endobj
-13815 0 obj <<
+13804 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.316 224.546 421.672 236.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.587) >>
 >> endobj
-13816 0 obj <<
+13805 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.619 210.929 425.975 222.619]
 /Subtype /Link
 /A << /S /GoTo /D (page.587) >>
 >> endobj
-13817 0 obj <<
+13806 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [374.134 197.312 392.49 209.001]
 /Subtype /Link
 /A << /S /GoTo /D (page.642) >>
 >> endobj
-13818 0 obj <<
+13807 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.285 183.694 418.641 195.384]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-13819 0 obj <<
+13808 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [461.77 170.077 480.126 181.767]
 /Subtype /Link
 /A << /S /GoTo /D (page.763) >>
 >> endobj
-13820 0 obj <<
+13809 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.528 156.46 431.884 168.149]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-13821 0 obj <<
+13810 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.558 131.745 449.914 143.434]
 /Subtype /Link
 /A << /S /GoTo /D (page.129) >>
 >> endobj
-13822 0 obj <<
+13811 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [369.285 118.128 387.641 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.753) >>
 >> endobj
-13823 0 obj <<
+13812 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.315 118.128 410.672 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.779) >>
 >> endobj
-13829 0 obj <<
-/D [13827 0 R /XYZ 151.701 685.529 null]
+13818 0 obj <<
+/D [13816 0 R /XYZ 151.701 685.529 null]
 >> endobj
-13826 0 obj <<
+13815 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-13942 0 obj <<
-/Length 1611      
+13932 0 obj <<
+/Length 1617      
 /Filter /FlateDecode
 >>
 stream
-xڝYIsÛ6¾ëWðHÍDöåØ&ŽÇ™4VGê)Ɂ¦hš-·’T–ÉŸ/@R)@zðØ‚¾·/x^âï~õû~õúBž$cÄÛ?{€@Hä1!*ÕÑÁûäïŽOÇQ»Þ`Jü‡â_Ù¿ýŽEH ¡¾Š±æ
-¸»$(×T«»ýêßT§Šø
-ž{Q¾úôxõ¿÷°Þ·Ž2÷0£Týy»ÕŸ+p-2¤×ŒÏ Dš}rxzÕñ?]ô>m0Æ>§xrìèˆÏoq@‰ìñïß>ñ	eNød0Ï2ÂÔ‘Ž奃9â"®Ãl½AùMë´]#áÿÐ'XÔ_Ó(îÿVU–Fa›–…†ô´_éXûª.“:Ìó´Hú;i¡ÑÚ¸~£øÕrä%ˆÒ9´Châ5…~ÜSŽý¹9‘Ž
-¾Ûý¶}XwʲNWoc¬S4zºíq¿lÚ]T§kèW­ÙŒ.ºzY‡ÒҌÁÕc˜uw﹬ó°5{Õ…
-3+“²ªÌxŸJ¾Åqï·RyQø¥9c$³`(ñ‹>˜6G'¢‡YNä²IÛC~Õ¼>Q„Ð-¡ÍÐWœ©™Ò2ØÛ(š*;“êHº•*£8}&uyÔYÒ:Ĺ9¶úòEåÜSE˜ÇŸêö•âùXD]ié>Eav¹ˆPrK=k+Íà›b`6&nÆܦ͙ÑEÍÁ(z´Z¦Ý=¼
-âï±9WåúËPцr6-´©6Œ§uvƒ(õì)M‹ ‘Ӎ­V÷Ì¢w¡r"ë†Á@uŽ±h„M* ©Bwò7ù­5o.eù$] $¢£0¹ÛmÏ5ij'D±C?‚<@ ž5¤²	¹öC@ìÛ’ò •r¢õÃÛ- ¾C.È}ð!nx»ÑQG<j“Ï	PÚ… œªŠƒèTÎcì†G˜žUùIj"‡a
-,˜TܱŸÓ$OÊ„OÊá¯)}Óf®“žž£¿Ÿ{
-=‘é.“ë?žTâpÕP›õΕçåfs®Ã"‰uOºx7S‡–çž$+ŸôD­i«:½î¤Q™«‘è`†È¶N“—ùy¾Ø"¯€Ôį{®FZ^:×8ǪêGÅzf`C.Úm²¸¥Ì
-[zòýÇÇ?îfæ]ˬúñ¯^‘å&D›¶Íü~ÛF>L7Û°ž—œéoÕYÀò(Ø×ú=~7[’Z²f{o &-÷>ÌxŽ.óvYž&ó“°‹ícs[ó(S퍣§cŽtÜ‘NºÑ9¼b::¼ì4õf׏ü.žÒÜ\.‘ň
-ãRêN%ŠûmcNe at mhÕKêK©:‚ÒCo›š™õŠX“\öc½Qó˜ŸfÙ±i밍ú@=8²ôüèé>—ÅfnËñ@’ëp¦tb"nŸw•LÝS¨QbÅ3“¬ÍHq8lT	V0áSšéý
-×Onb®LPBÐfpcž6møFŒg4]~ŽÕqeNkny^©7§ù¦ã#×e@íÃ8áa¸ðª8IFQy\xÉs¼¨tVUZ$æ6¹º1ñï¬Ö;Î&ÊÍk}v©°¼¼ê9vëÁÇÆütÇÂi"…RºMÁã7Ucúëo›÷¿9…ÏöVs]˜Äùò‡¹™œ8äƉë|ĸf ¤ÐM,k™ŠÕÌÈ…Ü2#g~ñøÙð’V3Ì!˜»†Óïv°(söR?£Äµ*¦jsfqÛHrd™/|ûM–Fiܘ‡D€M‡y0l3	¶°ÔÑUÉæѸ›Í ¸M}†þ›²Ïè0-†Uòíª0æ²0$çÍÒýöM¿’ê˜OÖBäh^”
-5ó‘´ª¢ûw‡´-ë™™ÒaA¹óLÉ‘t±)Ep$¥þü8ænMÊÉ…ƒI¡“>&ååx1*<Ý^¦…^·¹ëpëN³éº[§BV) à¸W„â*L›žÑ`ú{0 ˆÍ1ÌØ8†õ÷:/â¼ÊÔ`7ÂH@·æD\dÛÿ¿¾Nß:ýšfq2SU&®u .õ`žÍ•§É¤:ý}·_ý4_
+xÚ•YÉrÛ6¾ë)x¤f"ûrlÇãL«#õ”ä@K´Ì–Y’Ê2}ùµQ 21aàû÷Õ ÚE ºŸý¾ž½ý€P$ɉÖÏ ELÈ„Ju´¾Ä«ÃÓßÙ¦›/0%ñÃ~›ýœ[|ûu?‘@Býc™ÌpÿHP®oÍîÖ³gPªËð4Á8Ú”³/ß@´U¿ûKýèo–¦"a”ªŸ‹h5ûs.Y†ô’ð	”ȤC“ßmŸÞôô£/ŒqÌ)Ç–{$æŒ\ƒhqB‰4ø÷ï¬ø„² |2¨gúžÂ4ð³òKudû¬I‹ù!·ÙæÐä݉ø—>Áê¤ùžo2óë´®‹|“vyµ×‘¶+½–¾nª]“–e¾ß™7ù^£uYóœn²7ƒ{È++A”Þ =B›Í)Œ3sóÚž‹ãÕk…¯V¿-æ½°¬—5ZX8ëÍ7æÞrŽx\µÝjÓäsםÝŒNšú
+²I[%¥‡¯	®aæý»çª)ÓÎnU*Ì¢ÚUû¤.¬ï©äÓ^œ»UÊŠ"®ì#™C±¿7Î$°Ý;™9ìòs"§UÚm›ü»¦mµ‰R „aá}Š¾ ´ÍíÄ(>AßVÐXXG¨#–¨@ì?Ü5ÕAG‰ùÚf¥ÝöÚòEÅÜSïû´Ì¾
+Ô?h2Åóa¿éSKÿµI‹[ÏE„Ɛ{òYWk?»2¡S¦à>iN„΂h
+VÖ{§…Ô0Ýêá}’ýÌ챂<Ï_†Œ6¤³q¢eH•a<γDiœme˸X$ˆ_,µ¸'ÆL„ʯU9®Y#l”mºç¿=óïÍy®å£p2‘ˆ^¹ÉÝjyÊIc=!šŽêä	ðxQC*K;˜ )KÊTÊ‘Ôïo¤  ıL !@÷D!Ã<ì
+Ä£>þ,ž ¥Ÿ	Ê©Ê8(àžŠyŒÃðÃó
+?
+MЬ!¢€¸§7Iì¿ñ’ ˆ&e"ˆ&åðuBß”™Ë §'ï7}Ï^wdºÊ”ú‡'8\Ôv¾€®ô<]lNÀMºßeÖ<ÇÝ@|pä!Oß“—õbÙäΊ® xX÷A‘§Õ“nÞ5f}¤8T¡ªTÝ×ÖN ÉzÚä»wg‚A8j¸ÐåÝŽ#=CÕ%Ρ®MWÚ8zC„˜Z™éÚìµ{ÊÿýçÇ?î­õdƒrÿù/#Çt¹#å;§‹3§G‚ËOVBL\ÿ¯ê'K8CE"!pÛ¥–úøzûɸìá§]“Ô Ë{»°ÉáÀ®m8ϸ7¸]Qæ;w“<yiùØÞ¦WÊÔC2÷Xà=xO†Ý˜ú{xÚh»&Õû„ÞsòÒž™‘G‰
+ãœêŽ9ŠÇ]ke@'³]“Ö/ùæ˜^*U{”z¯Õ:9^æ^ñk¾P­_œš횴˶ú@Í6E~š¯úïj¿p-T¾Hv‡&u¤NÃq‰°.?š´ŸºZÅVæhš=Îßdé°˜P)XÁ¤Oy¡WE\O÷Äžš „Ӛטí`Å2o»ô
+˜9e>k{\sO‘Rã­ýeà<Ò·AxN0G®Óͦ:L,
+8žºLë:ßïì9lôta z¥Ãù8¹Ù8×Ào§ay&ÙÚ·X5¿PÊ°†;`ÒèxL_?îܬì!|R¸êëÒ]VN¯ŒX˜Î	ѹ¡êö˜Ð€†±å-"c¶Z_(,2ñtC|A.»P^òځÈB%¨ÌiŒ²`+™%kT6mUÉp©%lüàÈÓ–ŸéšåP‘oò¬µ·ƒ ¿N7v‚Q7_;h at _Ï™Ž‡é‚KÞÔ7ŒßU&¢Ó|?l­oÿV¢ƒ`!»)‘@rZbÝ/ß™
+”TÇ|´:EûNnȹ˜_q«Rz|·Í»ªqô”ëʃ{JŽd€¹)‚WLêïÇq7w«Q–H.4Š@B=kôqÐ(O(Çcâ°Ét"Ñë2wénýÁ±9÷›[;¥ +L(.Üä±5„† Órã	‚ØîÃŒ]û0£ñZÇEVÖ…êìœ.ŒsaNÄ™·õë\ø6w×Mþ=/²#© <=ß­gÿ*k
+å
 endstream
 endobj
-13941 0 obj <<
+13931 0 obj <<
 /Type /Page
-/Contents 13942 0 R
-/Resources 13940 0 R
+/Contents 13932 0 R
+/Resources 13930 0 R
 /MediaBox [0 0 612 792]
-/Parent 13620 0 R
-/Annots [ 13824 0 R 13825 0 R 13830 0 R 13831 0 R 13832 0 R 13833 0 R 13834 0 R 13835 0 R 13836 0 R 13837 0 R 13838 0 R 13839 0 R 13840 0 R 13841 0 R 13842 0 R 13843 0 R 13844 0 R 13845 0 R 13846 0 R 13847 0 R 13848 0 R 13849 0 R 13850 0 R 13851 0 R 13852 0 R 13853 0 R 13854 0 R 13855 0 R 13856 0 R 13857 0 R 13858 0 R 13859 0 R 13860 0 R 13861 0 R 13862 0 R 13863 0 R 13864 0 R 13865 0 R 13866 0 R 13867 0 R 13868 0 R 13869 0 R 13870 0 R 13871 0 R 13872 0 R 13873 0 R 13874 0 R 13875 0 R 13876 0 R 13877 0 R 13878 0 R 13879 0 R 13880 0 R 13881 0 R 13882 0 R 13883 0 R 13884 0 R 13885 0 R 13886 0 R 13887 0 R 13888 0 R 13889 0 R 13890 0 R 13891 0 R 13892 0 R 13893 0 R 13894 0 R 13895 0 R 13896 0 R 13897 0 R 13898 0 R 13899 0 R 13900 0 R 13901 0 R 13902 0 R 13903 0 R 13904 0 R 13905 0 R 13906 0 R 13907 0 R 13908 0 R 13909 0 R 13910 0 R 13911 0 R 13912 0 R 13913 0 R 13914 0 R 13915 0 R 13916 0 R 13917 0 R 13918 0 R 13919 0 R 13920 0 R 13921 0 R 13922 0 R 13923 0 R 13924 0 R 13925 0 R 13926 0 R 13927 0 R 13928 0 R 13929 0 R 13930 0 R 13931 0 R 13932 0 R 13933 0 R 13934 0 R 13935 0 R 13936 0 R 13937 0 R 13938 0 R ]
+/Parent 13609 0 R
+/Annots [ 13813 0 R 13814 0 R 13819 0 R 13820 0 R 13821 0 R 13822 0 R 13823 0 R 13824 0 R 13825 0 R 13826 0 R 13827 0 R 13828 0 R 13829 0 R 13830 0 R 13831 0 R 13832 0 R 13833 0 R 13834 0 R 13835 0 R 13836 0 R 13837 0 R 13838 0 R 13839 0 R 13840 0 R 13841 0 R 13842 0 R 13843 0 R 13844 0 R 13845 0 R 13846 0 R 13847 0 R 13848 0 R 13849 0 R 13850 0 R 13851 0 R 13852 0 R 13853 0 R 13854 0 R 13855 0 R 13856 0 R 13857 0 R 13858 0 R 13859 0 R 13860 0 R 13861 0 R 13862 0 R 13863 0 R 13864 0 R 13865 0 R 13866 0 R 13867 0 R 13868 0 R 13869 0 R 13870 0 R 13871 0 R 13872 0 R 13873 0 R 13874 0 R 13875 0 R 13876 0 R 13877 0 R 13878 0 R 13879 0 R 13880 0 R 13881 0 R 13882 0 R 13883 0 R 13884 0 R 13885 0 R 13886 0 R 13887 0 R 13888 0 R 13889 0 R 13890 0 R 13891 0 R 13892 0 R 13893 0 R 13894 0 R 13895 0 R 13896 0 R 13897 0 R 13898 0 R 13899 0 R 13900 0 R 13901 0 R 13902 0 R 13903 0 R 13904 0 R 13905 0 R 13906 0 R 13907 0 R 13908 0 R 13909 0 R 13910 0 R 13911 0 R 13912 0 R 13913 0 R 13914 0 R 13915 0 R 13916 0 R 13917 0 R 13918 0 R 13919 0 R 13920 0 R 13921 0 R 13922 0 R 13923 0 R 13924 0 R 13925 0 R 13926 0 R 13927 0 R 13928 0 R ]
 >> endobj
-13824 0 obj <<
+13813 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [124.138 646.546 142.494 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.753) >>
 >> endobj
-13825 0 obj <<
+13814 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [147.168 646.546 165.524 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.764) >>
 >> endobj
-13830 0 obj <<
+13819 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [127.395 632.997 145.752 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.456) >>
 >> endobj
-13831 0 obj <<
+13820 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.426 632.997 168.782 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.457) >>
 >> endobj
-13832 0 obj <<
+13821 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.456 632.997 191.812 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.485) >>
 >> endobj
-13833 0 obj <<
+13822 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.486 632.997 214.843 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.486) >>
 >> endobj
-13834 0 obj <<
+13823 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.198 578.8 211.555 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.465) >>
 >> endobj
-13835 0 obj <<
+13824 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [170.956 565.251 189.312 576.651]
 /Subtype /Link
 /A << /S /GoTo /D (page.470) >>
 >> endobj
-13836 0 obj <<
+13825 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.441 551.702 224.797 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-13837 0 obj <<
+13826 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [160.502 538.153 178.858 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.597) >>
 >> endobj
-13838 0 obj <<
+13827 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [141.183 524.604 159.539 536.172]
 /Subtype /Link
 /A << /S /GoTo /D (page.796) >>
 >> endobj
-13839 0 obj <<
+13828 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [149.395 511.054 167.752 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.688) >>
 >> endobj
-13840 0 obj <<
+13829 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [121.108 497.505 139.464 508.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.749) >>
 >> endobj
-13841 0 obj <<
+13830 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [149.047 483.956 167.403 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.411) >>
 >> endobj
-13842 0 obj <<
+13831 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [172.077 483.956 190.433 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.414) >>
 >> endobj
-13843 0 obj <<
+13832 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.411 470.407 180.767 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.509) >>
 >> endobj
-13844 0 obj <<
+13833 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [135.956 456.858 154.312 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.249) >>
 >> endobj
-13845 0 obj <<
+13834 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [158.986 456.858 177.343 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.295) >>
 >> endobj
-13846 0 obj <<
+13835 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.017 456.858 200.373 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.582) >>
 >> endobj
-13847 0 obj <<
+13836 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.986 443.308 214.343 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.238) >>
 >> endobj
-13848 0 obj <<
+13837 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [245.956 429.153 264.312 442.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.176) >>
 >> endobj
-13849 0 obj <<
+13838 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [155.35 416.21 173.706 427.354]
 /Subtype /Link
 /A << /S /GoTo /D (page.218) >>
 >> endobj
-13850 0 obj <<
+13839 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [178.38 416.21 196.736 427.354]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-13851 0 obj <<
+13840 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.835 402.055 202.191 414.956]
 /Subtype /Link
 /A << /S /GoTo /D (page.715) >>
 >> endobj
-13852 0 obj <<
+13841 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [161.032 389.112 179.388 400.68]
 /Subtype /Link
 /A << /S /GoTo /D (page.625) >>
 >> endobj
-13853 0 obj <<
+13842 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 364.134 158.102 373.157]
 /Subtype /Link
 /A << /S /GoTo /D (page.460) >>
 >> endobj
-13854 0 obj <<
+13843 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [161.941 348.464 180.297 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-13855 0 obj <<
+13844 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.971 348.464 203.327 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.479) >>
 >> endobj
-13856 0 obj <<
+13845 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [128.127 321.366 141.028 332.934]
 /Subtype /Link
 /A << /S /GoTo /D (page.95) >>
 >> endobj
-13857 0 obj <<
+13846 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [146.617 321.366 164.973 332.934]
 /Subtype /Link
 /A << /S /GoTo /D (page.102) >>
 >> endobj
-13858 0 obj <<
+13847 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [170.561 321.366 188.917 332.934]
 /Subtype /Link
 /A << /S /GoTo /D (page.110) >>
 >> endobj
-13859 0 obj <<
+13848 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [194.505 321.366 212.862 332.934]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-13860 0 obj <<
+13849 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.45 321.366 236.806 332.934]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-13861 0 obj <<
+13850 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 321.366 260.751 332.934]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-13862 0 obj <<
+13851 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 307.816 158.102 318.96]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-13863 0 obj <<
+13852 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [165.408 307.816 183.764 318.96]
 /Subtype /Link
 /A << /S /GoTo /D (page.232) >>
 >> endobj
-13864 0 obj <<
+13853 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.07 307.816 209.426 318.96]
 /Subtype /Link
 /A << /S /GoTo /D (page.233) >>
 >> endobj
-13865 0 obj <<
+13854 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.732 307.816 235.088 318.96]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-13866 0 obj <<
+13855 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 307.816 260.751 318.96]
 /Subtype /Link
 /A << /S /GoTo /D (page.250) >>
 >> endobj
-13867 0 obj <<
+13856 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 294.267 158.102 305.411]
 /Subtype /Link
 /A << /S /GoTo /D (page.285) >>
 >> endobj
-13868 0 obj <<
+13857 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [161.807 294.267 180.163 305.411]
 /Subtype /Link
 /A << /S /GoTo /D (page.286) >>
 >> endobj
-13869 0 obj <<
+13858 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.867 294.267 202.223 305.411]
 /Subtype /Link
 /A << /S /GoTo /D (page.288) >>
 >> endobj
-13870 0 obj <<
+13859 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.685 294.267 224.042 305.411]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-13871 0 obj <<
+13860 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.746 294.267 246.102 305.411]
 /Subtype /Link
 /A << /S /GoTo /D (page.568) >>
 >> endobj
-13872 0 obj <<
+13861 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.807 294.267 268.163 305.411]
 /Subtype /Link
 /A << /S /GoTo /D (page.571) >>
 >> endobj
-13873 0 obj <<
+13862 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 282.839 158.102 291.862]
 /Subtype /Link
 /A << /S /GoTo /D (page.582) >>
 >> endobj
-13874 0 obj <<
+13863 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.426 267.169 189.782 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.288) >>
 >> endobj
-13875 0 obj <<
+13864 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.123 253.62 175.479 265.188]
 /Subtype /Link
 /A << /S /GoTo /D (page.371) >>
 >> endobj
-13876 0 obj <<
+13865 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [126.183 240.07 144.539 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-13877 0 obj <<
+13866 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [211.744 226.521 230.1 238.211]
+/Rect [161.668 226.521 180.024 238.089]
 /Subtype /Link
+/A << /S /GoTo /D (page.471) >>
+>> endobj
+13867 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [184.698 226.521 203.055 238.089]
+/Subtype /Link
+/A << /S /GoTo /D (page.527) >>
+>> endobj
+13868 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [211.744 212.972 230.1 224.661]
+/Subtype /Link
 /A << /S /GoTo /D (page.402) >>
 >> endobj
-13878 0 obj <<
+13869 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [161.441 212.972 179.797 224.661]
+/Rect [161.441 199.423 179.797 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.307) >>
 >> endobj
-13879 0 obj <<
+13870 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [171.471 199.423 189.827 211.112]
+/Rect [171.471 185.874 189.827 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.394) >>
 >> endobj
-13880 0 obj <<
+13871 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [178.547 185.874 196.903 197.563]
+/Rect [178.547 172.324 196.903 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-13881 0 obj <<
+13872 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [159.895 172.324 178.252 184.014]
+/Rect [159.895 158.775 178.252 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.387) >>
 >> endobj
-13882 0 obj <<
+13873 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [149.214 158.775 167.57 170.343]
+/Rect [149.214 145.226 167.57 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.596) >>
 >> endobj
-13883 0 obj <<
+13874 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [190.502 145.226 208.858 156.916]
+/Rect [190.502 131.677 208.858 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-13884 0 obj <<
+13875 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [213.532 145.226 231.888 156.916]
+/Rect [213.532 131.677 231.888 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.470) >>
 >> endobj
-13885 0 obj <<
+13876 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [157.926 131.677 176.282 143.245]
+/Rect [157.926 118.128 176.282 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.684) >>
 >> endobj
-13886 0 obj <<
+13877 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [149.092 118.128 167.449 129.696]
+/Rect [345.855 646.546 364.211 658.115]
 /Subtype /Link
 /A << /S /GoTo /D (page.685) >>
 >> endobj
-13887 0 obj <<
+13878 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [361.127 645.94 379.483 658.842]
+/Rect [361.127 632.391 379.483 645.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.551) >>
 >> endobj
-13888 0 obj <<
+13879 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [327.87 632.997 346.226 644.565]
+/Rect [327.87 619.448 346.226 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.769) >>
 >> endobj
-13889 0 obj <<
+13880 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [326.127 619.448 344.483 631.016]
+/Rect [326.127 605.899 344.483 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.595) >>
 >> endobj
-13890 0 obj <<
+13881 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [359.688 605.899 378.044 617.588]
+/Rect [359.688 592.35 378.044 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.608) >>
 >> endobj
-13891 0 obj <<
+13882 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [331.253 592.35 349.61 603.918]
+/Rect [331.253 578.8 349.61 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.603) >>
 >> endobj
-13892 0 obj <<
+13883 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [353.44 592.35 371.796 603.918]
+/Rect [353.44 578.8 371.796 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.606) >>
 >> endobj
-13893 0 obj <<
+13884 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [375.627 592.35 393.983 603.918]
+/Rect [375.627 578.8 393.983 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.607) >>
 >> endobj
-13894 0 obj <<
+13885 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [397.813 592.35 416.17 603.918]
+/Rect [397.813 578.8 416.17 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.609) >>
 >> endobj
-13895 0 obj <<
+13886 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [420 592.35 438.356 603.918]
+/Rect [420 578.8 438.356 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.611) >>
 >> endobj
-13896 0 obj <<
+13887 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [442.187 592.35 460.543 603.918]
+/Rect [442.187 578.8 460.543 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.631) >>
 >> endobj
-13897 0 obj <<
+13888 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [353.052 578.8 371.408 590.2]
+/Rect [353.052 565.251 371.408 576.651]
 /Subtype /Link
 /A << /S /GoTo /D (page.208) >>
 >> endobj
-13898 0 obj <<
+13889 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [359.203 565.251 377.559 576.941]
+/Rect [359.203 551.702 377.559 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.305) >>
 >> endobj
-13899 0 obj <<
+13890 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [384.324 551.702 402.68 563.391]
+/Rect [384.324 538.153 402.68 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.458) >>
 >> endobj
-13900 0 obj <<
+13891 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [389.266 524.604 407.622 536.293]
+/Rect [389.266 511.054 407.622 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.127) >>
 >> endobj
-13901 0 obj <<
+13892 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [346.445 511.054 364.802 522.744]
+/Rect [346.445 497.505 364.802 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.475) >>
 >> endobj
-13902 0 obj <<
+13893 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [387.385 497.505 405.741 509.195]
+/Rect [387.385 483.956 405.741 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-13903 0 obj <<
+13894 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [381.052 483.956 399.408 495.645]
+/Rect [381.052 470.407 399.408 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.126) >>
 >> endobj
-13904 0 obj <<
+13895 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [323.961 470.407 342.317 481.551]
+/Rect [323.961 456.858 342.317 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.577) >>
 >> endobj
-13905 0 obj <<
+13896 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [330.627 456.858 343.529 468.002]
+/Rect [330.627 443.308 343.529 454.452]
 /Subtype /Link
 /A << /S /GoTo /D (page.95) >>
 >> endobj
-13906 0 obj <<
+13897 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [348.203 456.858 366.559 468.002]
+/Rect [348.203 443.308 366.559 454.452]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-13907 0 obj <<
+13898 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [371.233 456.858 389.59 468.002]
+/Rect [371.233 443.308 389.59 454.452]
 /Subtype /Link
 /A << /S /GoTo /D (page.200) >>
 >> endobj
-13908 0 obj <<
+13899 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [394.264 456.858 412.62 468.002]
+/Rect [394.264 443.308 412.62 454.452]
 /Subtype /Link
 /A << /S /GoTo /D (page.319) >>
 >> endobj
-13909 0 obj <<
+13900 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [359.916 443.308 372.818 454.452]
+/Rect [359.916 429.759 372.818 440.903]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-13910 0 obj <<
+13901 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [364.462 429.759 377.363 441.159]
+/Rect [364.462 416.21 377.363 427.609]
 /Subtype /Link
 /A << /S /GoTo /D (page.63) >>
 >> endobj
-13911 0 obj <<
+13902 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [370.93 416.21 389.286 427.354]
+/Rect [370.93 402.661 389.286 413.805]
 /Subtype /Link
 /A << /S /GoTo /D (page.238) >>
 >> endobj
-13912 0 obj <<
+13903 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [393.961 416.21 412.317 427.354]
+/Rect [393.961 402.661 412.317 413.805]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-13913 0 obj <<
+13904 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [373.052 402.661 391.408 413.805]
+/Rect [373.052 389.112 391.408 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.138) >>
 >> endobj
-13914 0 obj <<
+13905 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [395.112 402.661 413.468 413.805]
+/Rect [395.112 389.112 413.468 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.199) >>
 >> endobj
-13915 0 obj <<
+13906 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [417.173 402.661 435.529 413.805]
+/Rect [417.173 389.112 435.529 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.232) >>
 >> endobj
-13916 0 obj <<
+13907 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [439.233 402.661 457.59 413.805]
+/Rect [439.233 389.112 457.59 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.235) >>
 >> endobj
-13917 0 obj <<
+13908 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [336.508 391.233 354.864 400.256]
+/Rect [336.508 377.684 354.864 386.706]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-13918 0 obj <<
+13909 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [394.567 375.562 412.923 386.706]
+/Rect [394.567 362.013 412.923 373.157]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-13919 0 obj <<
+13910 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [417.597 375.562 435.953 386.706]
+/Rect [417.597 362.013 435.953 373.157]
 /Subtype /Link
 /A << /S /GoTo /D (page.247) >>
 >> endobj
-13920 0 obj <<
+13911 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [375.476 362.013 393.832 373.413]
+/Rect [375.476 348.464 393.832 359.863]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-13921 0 obj <<
+13912 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [398.506 362.013 416.862 373.413]
+/Rect [398.506 348.464 416.862 359.863]
 /Subtype /Link
 /A << /S /GoTo /D (page.151) >>
 >> endobj
-13922 0 obj <<
+13913 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [421.536 362.013 439.893 373.413]
+/Rect [421.536 348.464 439.893 359.863]
 /Subtype /Link
 /A << /S /GoTo /D (page.231) >>
 >> endobj
-13923 0 obj <<
+13914 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [379.779 348.464 398.135 359.863]
+/Rect [379.779 334.915 398.135 346.314]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-13924 0 obj <<
+13915 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [402.809 348.464 421.165 359.863]
+/Rect [402.809 334.915 421.165 346.314]
 /Subtype /Link
 /A << /S /GoTo /D (page.232) >>
 >> endobj
-13925 0 obj <<
+13916 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [391.93 334.915 410.287 346.604]
+/Rect [391.93 321.366 410.287 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-13926 0 obj <<
+13917 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [381.93 321.366 400.287 333.055]
+/Rect [381.93 307.816 400.287 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.567) >>
 >> endobj
-13927 0 obj <<
+13918 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [389.324 307.816 407.68 319.216]
+/Rect [389.324 294.267 407.68 305.667]
 /Subtype /Link
 /A << /S /GoTo /D (page.151) >>
 >> endobj
-13928 0 obj <<
+13919 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [412.355 307.816 430.711 319.216]
+/Rect [412.355 294.267 430.711 305.667]
 /Subtype /Link
 /A << /S /GoTo /D (page.724) >>
 >> endobj
-13929 0 obj <<
+13920 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [373.036 294.267 391.393 305.957]
+/Rect [373.036 280.718 391.393 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.603) >>
 >> endobj
-13930 0 obj <<
+13921 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [369.173 280.718 387.529 292.407]
+/Rect [369.173 267.169 387.529 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.603) >>
 >> endobj
-13931 0 obj <<
+13922 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [365.703 267.169 384.059 278.858]
+/Rect [365.703 253.62 384.059 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.605) >>
 >> endobj
-13932 0 obj <<
+13923 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [361.839 253.62 374.741 265.309]
+/Rect [361.839 240.07 374.741 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.74) >>
 >> endobj
-13933 0 obj <<
+13924 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [397.802 212.972 416.158 224.661]
+/Rect [397.802 199.423 416.158 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.605) >>
 >> endobj
-13934 0 obj <<
+13925 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [419.994 212.972 438.35 224.661]
+/Rect [419.994 199.423 438.35 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.611) >>
 >> endobj
-13935 0 obj <<
+13926 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [442.187 212.972 460.543 224.661]
+/Rect [442.187 199.423 460.543 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.729) >>
 >> endobj
-13936 0 obj <<
+13927 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [359.538 185.874 377.895 197.018]
+/Rect [359.538 172.324 377.895 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-13937 0 obj <<
+13928 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [378.9 131.677 397.256 143.366]
+/Rect [378.9 118.128 397.256 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.234) >>
 >> endobj
-13938 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [368.294 118.128 386.65 129.817]
-/Subtype /Link
-/A << /S /GoTo /D (page.626) >>
+13933 0 obj <<
+/D [13931 0 R /XYZ 100.892 685.529 null]
 >> endobj
-13943 0 obj <<
-/D [13941 0 R /XYZ 100.892 685.529 null]
->> endobj
-13940 0 obj <<
+13930 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-14048 0 obj <<
-/Length 1484      
+14037 0 obj <<
+/Length 1476      
 /Filter /FlateDecode
 >>
 stream
-xÚ­YÉrÛ6¾ë)x”f*âè&Š%×MÜHž¦“æ@‹°Äš‹Â%N¦/_€¤m- »>Ɇðÿ¾AÀÛxÀ;ýº½y Ÿ½Õ­è3 =r?àÄ[ÅÞ—q„“¯«‹7ïòBŸSJÔUˆÏäÐ]Z67ÿˆu=™â€Œy,~(šÑl5ú6‚ò’d³‡ø{ëlôå+ðbùÝ…|ÌCï¾½™y8}òïÔ[Žþ}‘a ™p¿MI³)‹f'eÁx¼\¼û¥åÃûÒž#7…اîADq¬'Æèèx¬¿G Ã="ïa'a:•Ò$Kê¨NŠ¼rãªC›LQ8ŽEꦟ!‹vböYÑ	ðröEê'ùíêíJA`2‘9¹Ž‚#×Aîsò‰‹,Jrƒ®Ã"J+ï’|ó"K碪…ÉÄôðxª“»³OuÅí¤U¸©Di0µ:~"]voR'°ÐŸ/—gW-)¥Ãœë»T¬
-õ”¬§l¤
-µ”;ÅD–ÔVTÙdãh½.š\™HÑ"	Eì,)C:Ü“x¡æ¶TÀÜØ*Þ)F€[dä8÷ÐN̤ñNkhŒ°?6ÿ`Ν°Ž»ók}¸’ãârL×Ô"ß•‰)sk-:e…ˆO9êXm§y_Š…–†EÝFåw%¥tÌëÎC»¨’EŽïÕEÙ·­mTm…¡r ÀÂD’ÆOà˜=‹oMò}Ðq”
-£Åd&ò᮲Q,K[‡ù7€$ÕJ+à°×ç"ÉâHßY!DÖ胐¸M
-Ü-â).òvŠß)ÓŠòFÆ„ú,ªÿÅqKôC]!°v¯‹,‹òX+&#Ü‚RK7"ES=ÂíšZߢd6Q6Ø.æ³Ïz0K€'ÓRôì¶E]h¹+J,:Œ¸¨»nÝƱ„ÊG}òa˸ø„:”î(M^ÊL‹nR}ÁÁÇ]n ¨'ʤ
-mOaC™±Co¶t¤eM	ÆQ’F7IšÔêäç$Ć™#´,[¢ìdݵIV”µÁ¤–©FaN$•®î„eJX26øêPØãO9ÃRŸQäÉéÈ'›Ù%’ß#»V=9~OÖPS	öXTÝd/TÁGµˆm‡)»ÿUWdc™¸ë"ÏåÎyÂ	âÄ©sÃœC8>ÿmö×éú+©ä’+7UÀ} :´ÿúˆáÇíW³õâP¶pŠ%Vè‡z{ýéÓìÃê”3!’‘WáLñ!g‡œ¯—³Oz‡££<åÏ0éíE\ìHÈ«ØKa!лéòãÛ³Kµœb_…+A2:äúû™
-®·óŇ™a¡<ž‡YècÀâ·Hû„Û”2jŸ×¬1²‡v‘”2‘Š21M<:µû DÏähN2Ü,ƒgól	k‘íÒ¨M¶#'¨eÒ•'Õaõ³·ø°ÙdU|kh–Š³‡¡Šc“ÖÉN•æ¾)>•PS]v±릴öŠ­pÓ›¨zéË¢–žIŠÜ G¬py”öH,Ž¬ê~ðŠÒ´PŠÝë‹>%Žû%wŠÛ“½W£U/X,r›Á_S6ì [S‰é]Rbg–1®?ó
-àÏÕÇ.Hc°Ý*ºn²NãZ®Ð®ó«În¢~×æ¼~š6+rˆr¥æñ*‹ÊÚ°`‡a¦ç—úžR;¥o fºÝmÒº0<mK_˜_-.–†×2f1ÙõgCàYR¸]Ûëa¶v þyS&ñó^0ÔmI;_[ÞBѾ¥0Ø!-Î>œkÀ ‹w}ñ6>ö’1§n©†]tĪO½¨nW‡¨}¶1tDFœt(£|#ô#ÂììR?ûp÷/?‰ÚÿÖ‘¡—HâáÄInÍ£	âÃ=å	IJH :JÓµvLòÛ¢ÌZ?|¼7‹òh#21ðêHÝ^¦ ^0å¼ý|epŸ
+xÚ­YÉrÛ6¾ë)x”f*Aâè:Š%×MÜHž¦ãæ ‹°Äš‹Â%N¦/_€¤e[ØõI‰ÿû÷
+ÞÆÞÙè×Õè݇ xø0è­n=@?УóF¼Uì]£ š|]¿û€ùŒR¢Žb@üPÝ¡esóXד)Èx‘Ç⇢ÍV£o#(I6OÐco®¿/–ïÎ=àcy÷íÉÌÃAäÓ ßSo9úcžŠ­È„ù­hJšMY4;)Æã]Yü
+ IEõK+Ñ”wݾ¦ˆ>¼)Ä>…ôi¹x¯…@!°Cð8Öctðx¬?G Ã9"Ïa'a:•Ò$Kj^'E^¹qÕ[EãX¤núé2¾3;°ÏŠN€×³ï4(R?Éo'PoW
+;Éˆ¡“ë(8pd>CÁs>q‘ñ$7è:,¢´ò.É7¯²t.ªZ˜L|ASÜ}º¨+n'­ÂM%JƒÉ¨Õñé²{“:…þl¹<¹\è‚¡„=çú.Õk€¢a™iC-eˆâ"lg 
+p8æëuÑäÊDŽI(bgIñ†‘Ã9‰¹áafKÌü(€­bab¸ÕȐFâ´#3©@¼Ó#ìÄO£Í¿‡0cNX÷¡³+}¸’Ãâ"éñ)CÝvš÷õQhéaòÝòò»Š#i3™l}Kå•Ìd8¾W/Š²ï%[^m
+M¡ÀÂD’Əà8|ßšäû$ cž
+SL«ô`Ã¥~+x,ëM‡i	$vÅ\$YÌõíBd
+	‰[+gnaH	p‘·SüN™V”72&ÔgQý/ÖˆY¢GŠe•°x]dÏc­˜!a”Zª¸¹(šj·kj}ß ²o„ƒÕ>û¢wAh	ðdZŠ^‚ݶ¨-wbE‰E‡u×BÛ8–3‹Pù¨O>l™áQ‡’Â¥ÉK™iü&Õ|Øz€Ú_&µPhO6”;ôfÛAs…,kJ0æIÊo’4©Õ“Ÿ“r,
+¡eÙe'ë®M²¢¬
+&¥ÔŠ9=Tºº6TÂ’±ÁWÏ…=ü”ƒ%õCŠ<9²ø23»DòÛ³kÕ“#Û÷dmZ¦L%8x¢êÆm¡
+>B¨El;LÙýNrÅN&îºÈs¹RqB„8qêÜð
+gã‚Ï›ýu¼ÝJ*¹ÃÊE0H£­·>
+ñ~¹Õ,µ8’-œb‰ùуƒN¯>ž}\s&DR"ò&œ	!>dásÎWËÙgÃö|P€§,ðCLz{{’„ ò&öRXônºøtzr¡±’£å›p%H¦QˆžsýýD×é|ñqfØò‡Ô0ò1`ñ[¤}ÂmJµ/kV{Œì¡]$¥L¤¢LLƒNí>ˆÐ9š“·­ÁàÅ<[ÂZd»”× ‰ÁväµLºò¤:¬~–a֍¬Šo
+­ÀRqž`¨âؤu²S¥¹oŠ%ÔT—]E¬Äº)­ý…b+Üô†Wû‘¾,j除È
+pÄ
+—óÌ°¿@bqdU÷ƒOÓB)v¯/ú”8.}Ì)n–QV½`±ÈmKÙ°ƒlM%¦wmH‰iXÆ`¸þÌ?)€?WŸº eÀv«èºÉ:k}¸BK¸Î/;»‹ú}›óúiÚT¬Ès”K5W/õ0Æk½0Ó³ýjN©Ò73Ýî6i]/Ì/çKÃVh1ÙÕCàYR¸]Ûëa¶v þyS&ñËn0ÔmI;_[îBB¢½K	a‡´8ùx¢·¸é€^„Åû¾xo`ɘQ·ÔÃ.:`Õ§¯ÛՁ·×6†Ž'Jžo„¾ScdA˜\èãÁa.âþæ'Qûßšz‰t!NœdtkMî) –EEÔQš¨µc’ßeÖêhü7â5¸ÏùFdæ;4u•äv
+†L9oÿÕj]
 endstream
 endobj
-14047 0 obj <<
+14036 0 obj <<
 /Type /Page
-/Contents 14048 0 R
-/Resources 14046 0 R
+/Contents 14037 0 R
+/Resources 14035 0 R
 /MediaBox [0 0 612 792]
-/Parent 13620 0 R
-/Annots [ 13939 0 R 13944 0 R 13945 0 R 13946 0 R 13947 0 R 13948 0 R 13949 0 R 13950 0 R 13951 0 R 13952 0 R 13953 0 R 13954 0 R 13955 0 R 13956 0 R 13957 0 R 13958 0 R 13959 0 R 13960 0 R 13961 0 R 13962 0 R 13963 0 R 13964 0 R 13965 0 R 13966 0 R 13967 0 R 13968 0 R 13969 0 R 13970 0 R 13971 0 R 13972 0 R 13973 0 R 13974 0 R 13975 0 R 13976 0 R 13977 0 R 13978 0 R 13979 0 R 13980 0 R 13981 0 R 13982 0 R 13983 0 R 13984 0 R 13985 0 R 13986 0 R 13987 0 R 13988 0 R 13989 0 R 13990 0 R 13991 0 R 13992 0 R 13993 0 R 13994 0 R 13995 0 R 13996 0 R 13997 0 R 13998 0 R 13999 0 R 14000 0 R 14001 0 R 14002 0 R 14003 0 R 14004 0 R 14005 0 R 14006 0 R 14007 0 R 14008 0 R 14009 0 R 14010 0 R 14011 0 R 14012 0 R 14013 0 R 14014 0 R 14015 0 R 14016 0 R 14017 0 R 14018 0 R 14019 0 R 14020 0 R 14021 0 R 14022 0 R 14023 0 R 14024 0 R 14025 0 R 14026 0 R 14027 0 R 14028 0 R 14029 0 R 14030 0 R 14031 0 R 14032 0 R 14033 0 R 14034 0 R 14035 0 R 14036 0 R 14037 0 R 14038 0 R 14039 0 R 14040 0 R 14041 0 R 14042 0 R 14043 0 R 14044 0 R ]
+/Parent 13609 0 R
+/Annots [ 13929 0 R 13934 0 R 13935 0 R 13936 0 R 13937 0 R 13938 0 R 13939 0 R 13940 0 R 13941 0 R 13942 0 R 13943 0 R 13944 0 R 13945 0 R 13946 0 R 13947 0 R 13948 0 R 13949 0 R 13950 0 R 13951 0 R 13952 0 R 13953 0 R 13954 0 R 13955 0 R 13956 0 R 13957 0 R 13958 0 R 13959 0 R 13960 0 R 13961 0 R 13962 0 R 13963 0 R 13964 0 R 13965 0 R 13966 0 R 13967 0 R 13968 0 R 13969 0 R 13970 0 R 13971 0 R 13972 0 R 13973 0 R 13974 0 R 13975 0 R 13976 0 R 13977 0 R 13978 0 R 13979 0 R 13980 0 R 13981 0 R 13982 0 R 13983 0 R 13984 0 R 13985 0 R 13986 0 R 13987 0 R 13988 0 R 13989 0 R 13990 0 R 13991 0 R 13992 0 R 13993 0 R 13994 0 R 13995 0 R 13996 0 R 13997 0 R 13998 0 R 13999 0 R 14000 0 R 14001 0 R 14002 0 R 14003 0 R 14004 0 R 14005 0 R 14006 0 R 14007 0 R 14008 0 R 14009 0 R 14010 0 R 14011 0 R 14012 0 R 14013 0 R 14014 0 R 14015 0 R 14016 0 R 14017 0 R 14018 0 R 14019 0 R 14020 0 R 14021 0 R 14022 0 R 14023 0 R 14024 0 R 14025 0 R 14026 0 R 14027 0 R 14028 0 R 14029 0 R 14030 0 R 14031 0 R 14032 0 R 14033 0 R ]
 >> endobj
-13939 0 obj <<
+13929 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [206.644 646.546 225 658.115]
+/Rect [222.341 646.546 240.697 658.236]
 /Subtype /Link
+/A << /S /GoTo /D (page.626) >>
+>> endobj
+13934 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [206.644 632.93 225 644.499]
+/Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-13944 0 obj <<
+13935 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [202.25 632.93 220.607 644.62]
+/Rect [202.25 619.314 220.607 631.004]
 /Subtype /Link
 /A << /S /GoTo /D (page.232) >>
 >> endobj
-13945 0 obj <<
+13936 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [225.281 632.93 243.637 644.62]
+/Rect [225.281 619.314 243.637 631.004]
 /Subtype /Link
 /A << /S /GoTo /D (page.241) >>
 >> endobj
-13946 0 obj <<
+13937 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [248.311 632.93 266.667 644.62]
+/Rect [248.311 619.314 266.667 631.004]
 /Subtype /Link
 /A << /S /GoTo /D (page.243) >>
 >> endobj
-13947 0 obj <<
+13938 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [256.857 619.314 275.213 631.004]
+/Rect [256.857 605.698 275.213 617.388]
 /Subtype /Link
 /A << /S /GoTo /D (page.241) >>
 >> endobj
-13948 0 obj <<
+13939 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [198.917 605.698 217.273 617.388]
+/Rect [198.917 592.082 217.273 603.772]
 /Subtype /Link
 /A << /S /GoTo /D (page.232) >>
 >> endobj
-13949 0 obj <<
+13940 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [205.281 592.082 223.637 603.226]
+/Rect [205.281 578.466 223.637 589.61]
 /Subtype /Link
 /A << /S /GoTo /D (page.231) >>
 >> endobj
-13950 0 obj <<
+13941 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [205.584 578.466 223.94 590.156]
+/Rect [205.584 564.85 223.94 576.54]
 /Subtype /Link
 /A << /S /GoTo /D (page.232) >>
 >> endobj
-13951 0 obj <<
+13942 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [214.978 564.85 233.334 576.54]
+/Rect [214.978 551.234 233.334 562.924]
 /Subtype /Link
 /A << /S /GoTo /D (page.605) >>
 >> endobj
-13952 0 obj <<
+13943 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [188.978 551.234 207.334 562.378]
+/Rect [188.978 537.618 207.334 548.762]
 /Subtype /Link
 /A << /S /GoTo /D (page.247) >>
 >> endobj
-13953 0 obj <<
+13944 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [212.008 551.234 230.364 562.378]
+/Rect [212.008 537.618 230.364 548.762]
 /Subtype /Link
 /A << /S /GoTo /D (page.603) >>
 >> endobj
-13954 0 obj <<
+13945 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [212.448 537.618 230.805 549.308]
+/Rect [212.448 524.002 230.805 535.692]
 /Subtype /Link
 /A << /S /GoTo /D (page.235) >>
 >> endobj
-13955 0 obj <<
+13946 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [218.509 524.002 236.865 535.402]
+/Rect [218.509 510.386 236.865 521.785]
 /Subtype /Link
 /A << /S /GoTo /D (page.231) >>
 >> endobj
-13956 0 obj <<
+13947 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [207.66 510.386 226.017 522.076]
+/Rect [207.66 496.77 226.017 508.459]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-13957 0 obj <<
+13948 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [228.826 496.77 247.182 508.459]
+/Rect [228.826 483.154 247.182 494.843]
 /Subtype /Link
 /A << /S /GoTo /D (page.261) >>
 >> endobj
-13958 0 obj <<
+13949 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [194.675 483.154 213.031 494.553]
+/Rect [194.675 469.538 213.031 480.937]
 /Subtype /Link
 /A << /S /GoTo /D (page.561) >>
 >> endobj
-13959 0 obj <<
+13950 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [197.599 469.538 210.5 481.106]
+/Rect [197.599 455.922 210.5 467.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.66) >>
 >> endobj
-13960 0 obj <<
+13951 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [181.917 455.922 200.273 467.611]
+/Rect [181.917 442.306 200.273 453.995]
 /Subtype /Link
 /A << /S /GoTo /D (page.528) >>
 >> endobj
-13961 0 obj <<
+13952 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [182.281 442.306 195.182 453.45]
+/Rect [182.281 428.69 195.182 439.834]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-13962 0 obj <<
+13953 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [199.856 442.306 218.213 453.45]
+/Rect [199.856 428.69 218.213 439.834]
 /Subtype /Link
 /A << /S /GoTo /D (page.123) >>
 >> endobj
-13963 0 obj <<
+13954 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [223.157 428.69 241.513 439.834]
+/Rect [223.157 415.074 241.513 426.218]
 /Subtype /Link
 /A << /S /GoTo /D (page.124) >>
 >> endobj
-13964 0 obj <<
+13955 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [246.506 428.69 264.862 439.834]
+/Rect [246.506 415.074 264.862 426.218]
 /Subtype /Link
 /A << /S /GoTo /D (page.178) >>
 >> endobj
-13965 0 obj <<
+13956 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [269.855 428.69 288.211 439.834]
+/Rect [269.855 415.074 288.211 426.218]
 /Subtype /Link
 /A << /S /GoTo /D (page.184) >>
 >> endobj
-13966 0 obj <<
+13957 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [293.204 428.69 311.56 439.834]
+/Rect [293.204 415.074 311.56 426.218]
 /Subtype /Link
 /A << /S /GoTo /D (page.397) >>
 >> endobj
-13967 0 obj <<
+13958 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [190.555 415.141 208.912 426.285]
+/Rect [190.555 401.525 208.912 412.669]
 /Subtype /Link
 /A << /S /GoTo /D (page.402) >>
 >> endobj
-13968 0 obj <<
+13959 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [213.586 415.141 231.942 426.285]
+/Rect [213.586 401.525 231.942 412.669]
 /Subtype /Link
 /A << /S /GoTo /D (page.746) >>
 >> endobj
-13969 0 obj <<
+13960 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [197.129 401.525 215.485 413.214]
+/Rect [197.129 387.909 215.485 399.598]
 /Subtype /Link
 /A << /S /GoTo /D (page.323) >>
 >> endobj
-13970 0 obj <<
+13961 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [220.159 401.525 238.516 413.214]
+/Rect [220.159 387.909 238.516 399.598]
 /Subtype /Link
 /A << /S /GoTo /D (page.397) >>
 >> endobj
-13971 0 obj <<
+13962 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [241.978 401.525 260.334 413.214]
+/Rect [241.978 387.909 260.334 399.598]
 /Subtype /Link
 /A << /S /GoTo /D (page.399) >>
 >> endobj
-13972 0 obj <<
+13963 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [265.008 401.525 283.364 413.214]
+/Rect [265.008 387.909 283.364 399.598]
 /Subtype /Link
 /A << /S /GoTo /D (page.406) >>
 >> endobj
-13973 0 obj <<
+13964 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [178.053 387.909 196.41 399.477]
+/Rect [178.053 374.293 196.41 385.861]
 /Subtype /Link
 /A << /S /GoTo /D (page.447) >>
 >> endobj
-13974 0 obj <<
+13965 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [210.508 374.293 228.864 385.861]
-/Subtype /Link
-/A << /S /GoTo /D (page.471) >>
->> endobj
-13975 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [233.538 374.293 251.894 385.861]
-/Subtype /Link
-/A << /S /GoTo /D (page.527) >>
->> endobj
-13976 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
 /Rect [189.796 349.6 208.152 361.29]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-13977 0 obj <<
+13966 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [288.341 335.984 306.698 347.674]
 /Subtype /Link
 /A << /S /GoTo /D (page.225) >>
 >> endobj
-13978 0 obj <<
+13967 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [289.099 322.368 307.455 334.058]
 /Subtype /Link
 /A << /S /GoTo /D (page.192) >>
 >> endobj
-13979 0 obj <<
+13968 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.099 308.752 233.455 320.441]
 /Subtype /Link
 /A << /S /GoTo /D (page.116) >>
 >> endobj
-13980 0 obj <<
+13969 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.069 295.136 215.425 306.825]
 /Subtype /Link
 /A << /S /GoTo /D (page.112) >>
 >> endobj
-13981 0 obj <<
+13970 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.887 295.136 237.243 306.825]
 /Subtype /Link
 /A << /S /GoTo /D (page.114) >>
 >> endobj
-13982 0 obj <<
+13971 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.917 295.136 260.273 306.825]
 /Subtype /Link
 /A << /S /GoTo /D (page.293) >>
 >> endobj
-13983 0 obj <<
+13972 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [264.947 295.136 283.304 306.825]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-13984 0 obj <<
+13973 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [240.523 281.52 258.879 293.209]
 /Subtype /Link
 /A << /S /GoTo /D (page.293) >>
 >> endobj
-13985 0 obj <<
+13974 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [263.553 281.52 281.91 293.209]
 /Subtype /Link
 /A << /S /GoTo /D (page.297) >>
 >> endobj
-13986 0 obj <<
+13975 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.372 267.904 195.728 279.593]
 /Subtype /Link
 /A << /S /GoTo /D (page.810) >>
 >> endobj
-13987 0 obj <<
+13976 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.069 254.288 245.425 265.977]
 /Subtype /Link
 /A << /S /GoTo /D (page.749) >>
 >> endobj
-13988 0 obj <<
+13977 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [278.069 240.672 296.425 252.361]
 /Subtype /Link
 /A << /S /GoTo /D (page.567) >>
 >> endobj
-13989 0 obj <<
+13978 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [181.159 227.056 199.516 238.624]
 /Subtype /Link
 /A << /S /GoTo /D (page.675) >>
 >> endobj
-13990 0 obj <<
+13979 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [214.432 213.44 232.788 225.129]
 /Subtype /Link
 /A << /S /GoTo /D (page.475) >>
 >> endobj
-13991 0 obj <<
+13980 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.644 199.824 237 211.513]
 /Subtype /Link
 /A << /S /GoTo /D (page.341) >>
 >> endobj
-13992 0 obj <<
+13981 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.25 186.208 217.607 197.897]
 /Subtype /Link
 /A << /S /GoTo /D (page.341) >>
 >> endobj
-13993 0 obj <<
+13982 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [233.159 172.592 251.516 184.281]
 /Subtype /Link
 /A << /S /GoTo /D (page.324) >>
 >> endobj
-13994 0 obj <<
+13983 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [258.372 158.976 276.728 170.665]
 /Subtype /Link
 /A << /S /GoTo /D (page.324) >>
 >> endobj
-13995 0 obj <<
+13984 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.826 145.36 251.182 157.049]
 /Subtype /Link
 /A << /S /GoTo /D (page.687) >>
 >> endobj
-13996 0 obj <<
+13985 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.796 131.744 253.152 143.433]
 /Subtype /Link
 /A << /S /GoTo /D (page.366) >>
 >> endobj
-13997 0 obj <<
+13986 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.826 118.128 251.182 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.347) >>
 >> endobj
-13998 0 obj <<
+13987 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [470.346 646.546 488.702 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.692) >>
 >> endobj
-13999 0 obj <<
+13988 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [495.194 632.931 513.551 644.621]
 /Subtype /Link
 /A << /S /GoTo /D (page.692) >>
 >> endobj
-14000 0 obj <<
+13989 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.709 619.317 457.066 631.006]
 /Subtype /Link
 /A << /S /GoTo /D (page.381) >>
 >> endobj
-14001 0 obj <<
+13990 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [479.564 605.702 497.92 617.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.629) >>
 >> endobj
-14002 0 obj <<
+13991 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [485.928 592.087 504.284 603.655]
 /Subtype /Link
 /A << /S /GoTo /D (page.606) >>
 >> endobj
-14003 0 obj <<
+13992 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.316 578.472 417.672 590.162]
 /Subtype /Link
 /A << /S /GoTo /D (page.567) >>
 >> endobj
-14004 0 obj <<
+13993 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [432.437 564.857 450.793 576.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-14005 0 obj <<
+13994 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [455.467 564.857 473.823 576.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.582) >>
 >> endobj
-14006 0 obj <<
+13995 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [425.103 551.243 443.46 562.932]
 /Subtype /Link
 /A << /S /GoTo /D (page.103) >>
 >> endobj
-14007 0 obj <<
+13996 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [448.134 551.243 466.49 562.932]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-14008 0 obj <<
+13997 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [471.467 537.628 489.823 549.317]
 /Subtype /Link
 /A << /S /GoTo /D (page.587) >>
 >> endobj
-14009 0 obj <<
+13998 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.891 524.013 419.793 535.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.89) >>
 >> endobj
-14010 0 obj <<
+13999 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.922 510.398 423.278 522.088]
 /Subtype /Link
 /A << /S /GoTo /D (page.381) >>
 >> endobj
-14011 0 obj <<
+14000 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [452.861 496.783 471.217 508.473]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-14012 0 obj <<
+14001 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.982 483.169 432.338 494.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.363) >>
 >> endobj
-14013 0 obj <<
+14002 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [456.71 469.554 475.066 481.243]
 /Subtype /Link
 /A << /S /GoTo /D (page.364) >>
 >> endobj
-14014 0 obj <<
+14003 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.649 455.939 418.005 467.629]
 /Subtype /Link
 /A << /S /GoTo /D (page.114) >>
 >> endobj
-14015 0 obj <<
+14004 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.679 442.324 425.035 454.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.364) >>
 >> endobj
-14016 0 obj <<
+14005 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.709 442.324 448.066 454.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.399) >>
 >> endobj
-14017 0 obj <<
+14006 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [452.74 442.324 471.096 454.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.746) >>
 >> endobj
-14018 0 obj <<
+14007 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.649 428.709 422.005 440.399]
 /Subtype /Link
 /A << /S /GoTo /D (page.364) >>
 >> endobj
-14019 0 obj <<
+14008 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.679 428.709 445.035 440.399]
 /Subtype /Link
 /A << /S /GoTo /D (page.399) >>
 >> endobj
-14020 0 obj <<
+14009 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [449.709 428.709 468.066 440.399]
 /Subtype /Link
 /A << /S /GoTo /D (page.746) >>
 >> endobj
-14021 0 obj <<
+14010 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.255 415.095 438.611 426.784]
 /Subtype /Link
 /A << /S /GoTo /D (page.307) >>
 >> endobj
-14022 0 obj <<
+14011 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [452.679 401.48 471.035 413.169]
 /Subtype /Link
 /A << /S /GoTo /D (page.199) >>
 >> endobj
-14023 0 obj <<
+14012 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.649 387.865 436.005 399.433]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-14024 0 obj <<
+14013 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.376 374.25 447.732 385.94]
 /Subtype /Link
 /A << /S /GoTo /D (page.528) >>
 >> endobj
-14025 0 obj <<
+14014 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.755 360.635 407.111 372.204]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-14026 0 obj <<
+14015 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.785 347.021 410.141 358.589]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-14027 0 obj <<
+14016 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.8 333.406 413.157 345.095]
 /Subtype /Link
 /A << /S /GoTo /D (page.467) >>
 >> endobj
-14028 0 obj <<
+14017 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.346 319.791 403.702 331.359]
 /Subtype /Link
 /A << /S /GoTo /D (page.527) >>
 >> endobj
-14029 0 obj <<
+14018 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [386.103 306.176 404.46 317.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.394) >>
 >> endobj
-14030 0 obj <<
+14019 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [374.437 292.561 392.793 304.251]
 /Subtype /Link
 /A << /S /GoTo /D (page.684) >>
 >> endobj
-14031 0 obj <<
+14020 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.073 278.947 403.429 290.636]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-14032 0 obj <<
+14021 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.861 265.332 432.217 277.021]
 /Subtype /Link
 /A << /S /GoTo /D (page.174) >>
 >> endobj
-14033 0 obj <<
+14022 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.619 240.661 400.975 252.229]
 /Subtype /Link
 /A << /S /GoTo /D (page.470) >>
 >> endobj
-14034 0 obj <<
+14023 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.255 227.046 424.157 238.614]
 /Subtype /Link
 /A << /S /GoTo /D (page.96) >>
 >> endobj
-14035 0 obj <<
+14024 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.831 227.046 447.187 238.614]
 /Subtype /Link
 /A << /S /GoTo /D (page.707) >>
 >> endobj
-14036 0 obj <<
+14025 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [456.77 213.431 475.126 225.121]
 /Subtype /Link
 /A << /S /GoTo /D (page.574) >>
 >> endobj
-14037 0 obj <<
+14026 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [396.134 199.816 414.49 211.385]
 /Subtype /Link
 /A << /S /GoTo /D (page.232) >>
 >> endobj
-14038 0 obj <<
+14027 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.012 186.202 415.369 197.77]
 /Subtype /Link
 /A << /S /GoTo /D (page.217) >>
 >> endobj
-14039 0 obj <<
+14028 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.164 172.587 435.52 184.276]
 /Subtype /Link
 /A << /S /GoTo /D (page.138) >>
 >> endobj
-14040 0 obj <<
+14029 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [389.285 158.972 407.641 170.662]
 /Subtype /Link
 /A << /S /GoTo /D (page.294) >>
 >> endobj
-14041 0 obj <<
+14030 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [389.891 145.357 408.247 157.047]
 /Subtype /Link
 /A << /S /GoTo /D (page.286) >>
 >> endobj
-14042 0 obj <<
+14031 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [449.922 131.742 462.823 143.432]
 /Subtype /Link
 /A << /S /GoTo /D (page.66) >>
 >> endobj
-14043 0 obj <<
+14032 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [454.74 118.128 467.641 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.64) >>
 >> endobj
-14044 0 obj <<
+14033 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [472.316 118.128 490.672 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.107) >>
 >> endobj
-14049 0 obj <<
-/D [14047 0 R /XYZ 151.701 685.529 null]
+14038 0 obj <<
+/D [14036 0 R /XYZ 151.701 685.529 null]
 >> endobj
-14046 0 obj <<
+14035 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-14169 0 obj <<
+14158 0 obj <<
 /Length 1590      
 /Filter /FlateDecode
 >>
@@ -83708,799 +87442,799 @@
 «iÞ˜ÿ³$ßY8Óq_ÿ½Ý,þýãD
 endstream
 endobj
-14168 0 obj <<
+14157 0 obj <<
 /Type /Page
-/Contents 14169 0 R
-/Resources 14167 0 R
+/Contents 14158 0 R
+/Resources 14156 0 R
 /MediaBox [0 0 612 792]
-/Parent 13620 0 R
-/Annots [ 14045 0 R 14050 0 R 14051 0 R 14052 0 R 14053 0 R 14054 0 R 14055 0 R 14056 0 R 14057 0 R 14058 0 R 14059 0 R 14060 0 R 14061 0 R 14062 0 R 14063 0 R 14064 0 R 14065 0 R 14066 0 R 14067 0 R 14068 0 R 14069 0 R 14070 0 R 14071 0 R 14072 0 R 14073 0 R 14074 0 R 14075 0 R 14076 0 R 14077 0 R 14078 0 R 14079 0 R 14080 0 R 14081 0 R 14082 0 R 14083 0 R 14084 0 R 14085 0 R 14086 0 R 14087 0 R 14088 0 R 14089 0 R 14090 0 R 14091 0 R 14092 0 R 14093 0 R 14094 0 R 14095 0 R 14096 0 R 14097 0 R 14098 0 R 14099 0 R 14100 0 R 14101 0 R 14102 0 R 14103 0 R 14104 0 R 14105 0 R 14106 0 R 14107 0 R 14108 0 R 14109 0 R 14110 0 R 14111 0 R 14112 0 R 14113 0 R 14114 0 R 14115 0 R 14116 0 R 14117 0 R 14118 0 R 14119 0 R 14120 0 R 14121 0 R 14122 0 R 14123 0 R 14124 0 R 14125 0 R 14126 0 R 14127 0 R 14128 0 R 14129 0 R 14130 0 R 14131 0 R 14132 0 R 14133 0 R 14134 0 R 14135 0 R 14136 0 R 14137 0 R 14138 0 R 14139 0 R 14140 0 R 14141 0 R 14142 0 R 14143 0 R 14144 0 R 14145 0 R 14146 0 R 14147 0 R 14148 0 R 14149 0 R 14150 0 R 14151 0 R 14152 0 R 14153 0 R 14154 0 R 14155 0 R 14156 0 R 14157 0 R 14158 0 R 14159 0 R ]
+/Parent 13609 0 R
+/Annots [ 14034 0 R 14039 0 R 14040 0 R 14041 0 R 14042 0 R 14043 0 R 14044 0 R 14045 0 R 14046 0 R 14047 0 R 14048 0 R 14049 0 R 14050 0 R 14051 0 R 14052 0 R 14053 0 R 14054 0 R 14055 0 R 14056 0 R 14057 0 R 14058 0 R 14059 0 R 14060 0 R 14061 0 R 14062 0 R 14063 0 R 14064 0 R 14065 0 R 14066 0 R 14067 0 R 14068 0 R 14069 0 R 14070 0 R 14071 0 R 14072 0 R 14073 0 R 14074 0 R 14075 0 R 14076 0 R 14077 0 R 14078 0 R 14079 0 R 14080 0 R 14081 0 R 14082 0 R 14083 0 R 14084 0 R 14085 0 R 14086 0 R 14087 0 R 14088 0 R 14089 0 R 14090 0 R 14091 0 R 14092 0 R 14093 0 R 14094 0 R 14095 0 R 14096 0 R 14097 0 R 14098 0 R 14099 0 R 14100 0 R 14101 0 R 14102 0 R 14103 0 R 14104 0 R 14105 0 R 14106 0 R 14107 0 R 14108 0 R 14109 0 R 14110 0 R 14111 0 R 14112 0 R 14113 0 R 14114 0 R 14115 0 R 14116 0 R 14117 0 R 14118 0 R 14119 0 R 14120 0 R 14121 0 R 14122 0 R 14123 0 R 14124 0 R 14125 0 R 14126 0 R 14127 0 R 14128 0 R 14129 0 R 14130 0 R 14131 0 R 14132 0 R 14133 0 R 14134 0 R 14135 0 R 14136 0 R 14137 0 R 14138 0 R 14139 0 R 14140 0 R 14141 0 R 14142 0 R 14143 0 R 14144 0 R 14145 0 R 14146 0 R 14147 0 R 14148 0 R ]
 >> endobj
-14045 0 obj <<
+14034 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.73 646.546 190.631 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.65) >>
 >> endobj
-14050 0 obj <<
+14039 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.623 632.997 211.979 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.567) >>
 >> endobj
-14051 0 obj <<
+14040 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [144.655 619.448 163.011 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-14052 0 obj <<
+14041 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [169.09 619.448 187.446 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.232) >>
 >> endobj
-14053 0 obj <<
+14042 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.525 619.448 211.881 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.285) >>
 >> endobj
-14054 0 obj <<
+14043 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.96 619.448 236.316 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.286) >>
 >> endobj
-14055 0 obj <<
+14044 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 619.448 260.751 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.288) >>
 >> endobj
-14056 0 obj <<
+14045 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 608.02 158.102 617.043]
 /Subtype /Link
 /A << /S /GoTo /D (page.294) >>
 >> endobj
-14057 0 obj <<
+14046 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [136.259 592.35 154.615 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.718) >>
 >> endobj
-14058 0 obj <<
+14047 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [186.562 578.8 204.918 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-14059 0 obj <<
+14048 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [180.567 565.251 193.469 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.95) >>
 >> endobj
-14060 0 obj <<
+14049 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.358 565.251 212.26 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.96) >>
 >> endobj
-14061 0 obj <<
+14050 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.149 565.251 236.505 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-14062 0 obj <<
+14051 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 565.251 260.751 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.288) >>
 >> endobj
-14063 0 obj <<
+14052 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 551.702 158.102 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.289) >>
 >> endobj
-14064 0 obj <<
+14053 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 551.702 181.132 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.568) >>
 >> endobj
-14065 0 obj <<
+14054 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.807 551.702 204.163 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.719) >>
 >> endobj
-14066 0 obj <<
+14055 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [160.729 538.153 179.085 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.718) >>
 >> endobj
-14067 0 obj <<
+14056 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [152.94 524.604 171.297 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-14068 0 obj <<
+14057 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [175.304 524.604 193.66 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.232) >>
 >> endobj
-14069 0 obj <<
+14058 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.667 524.604 216.024 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.288) >>
 >> endobj
-14070 0 obj <<
+14059 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.031 524.604 238.387 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.289) >>
 >> endobj
-14071 0 obj <<
+14060 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 524.604 260.751 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.294) >>
 >> endobj
-14072 0 obj <<
+14061 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 511.054 158.102 522.198]
 /Subtype /Link
 /A << /S /GoTo /D (page.568) >>
 >> endobj
-14073 0 obj <<
+14062 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 511.054 181.132 522.198]
 /Subtype /Link
 /A << /S /GoTo /D (page.591) >>
 >> endobj
-14074 0 obj <<
+14063 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.807 511.054 204.163 522.198]
 /Subtype /Link
 /A << /S /GoTo /D (page.656) >>
 >> endobj
-14075 0 obj <<
+14064 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.38 497.505 231.737 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.285) >>
 >> endobj
-14076 0 obj <<
+14065 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [160.35 483.956 178.706 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.718) >>
 >> endobj
-14077 0 obj <<
+14066 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [153.328 470.407 171.685 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-14078 0 obj <<
+14067 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [175.595 470.407 193.951 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.232) >>
 >> endobj
-14079 0 obj <<
+14068 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.861 470.407 216.218 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.288) >>
 >> endobj
-14080 0 obj <<
+14069 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.128 470.407 238.484 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.289) >>
 >> endobj
-14081 0 obj <<
+14070 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 470.407 260.751 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.294) >>
 >> endobj
-14082 0 obj <<
+14071 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 456.858 158.102 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.568) >>
 >> endobj
-14083 0 obj <<
+14072 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 456.858 181.132 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.591) >>
 >> endobj
-14084 0 obj <<
+14073 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.807 456.858 204.163 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.656) >>
 >> endobj
-14085 0 obj <<
+14074 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [151.702 443.308 170.058 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-14086 0 obj <<
+14075 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.277 429.759 217.634 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.718) >>
 >> endobj
-14087 0 obj <<
+14076 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [153.55 416.21 171.906 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.288) >>
 >> endobj
-14088 0 obj <<
+14077 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [176.58 416.21 194.936 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.294) >>
 >> endobj
-14089 0 obj <<
+14078 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [132.926 402.661 151.282 414.229]
 /Subtype /Link
 /A << /S /GoTo /D (page.447) >>
 >> endobj
-14090 0 obj <<
+14079 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [140.805 389.112 159.161 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.775) >>
 >> endobj
-14091 0 obj <<
+14080 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [163.835 389.112 182.191 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.796) >>
 >> endobj
-14092 0 obj <<
+14081 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.229 375.562 208.585 386.962]
 /Subtype /Link
 /A << /S /GoTo /D (page.365) >>
 >> endobj
-14093 0 obj <<
+14082 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.532 362.013 189.888 373.413]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-14094 0 obj <<
+14083 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.744 348.464 173.1 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.320) >>
 >> endobj
-14095 0 obj <<
+14084 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [164.532 334.915 182.888 346.314]
 /Subtype /Link
 /A << /S /GoTo /D (page.225) >>
 >> endobj
-14096 0 obj <<
+14085 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [209.653 321.366 228.009 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.350) >>
 >> endobj
-14097 0 obj <<
+14086 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [181.592 307.816 199.949 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.548) >>
 >> endobj
-14098 0 obj <<
+14087 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [231.199 294.267 249.555 305.667]
 /Subtype /Link
 /A << /S /GoTo /D (page.368) >>
 >> endobj
-14099 0 obj <<
+14088 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [147.259 280.718 165.615 292.286]
 /Subtype /Link
 /A << /S /GoTo /D (page.438) >>
 >> endobj
-14100 0 obj <<
+14089 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [146.35 267.169 164.706 278.568]
 /Subtype /Link
 /A << /S /GoTo /D (page.455) >>
 >> endobj
-14101 0 obj <<
+14090 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [140.501 253.62 158.858 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.697) >>
 >> endobj
-14102 0 obj <<
+14091 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [164.744 240.07 183.1 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.122) >>
 >> endobj
-14103 0 obj <<
+14092 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [187.774 240.07 206.13 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.698) >>
 >> endobj
-14104 0 obj <<
+14093 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.047 226.521 234.403 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-14105 0 obj <<
+14094 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.562 212.972 208.918 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.394) >>
 >> endobj
-14106 0 obj <<
+14095 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [130.805 199.423 149.161 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.732) >>
 >> endobj
-14107 0 obj <<
+14096 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [153.835 199.423 172.191 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.747) >>
 >> endobj
-14108 0 obj <<
+14097 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [176.865 199.423 195.221 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.773) >>
 >> endobj
-14109 0 obj <<
+14098 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [153.532 185.874 171.888 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.746) >>
 >> endobj
-14110 0 obj <<
+14099 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [176.562 185.874 194.918 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.748) >>
 >> endobj
-14111 0 obj <<
+14100 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.562 172.324 226.918 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.219) >>
 >> endobj
-14112 0 obj <<
+14101 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [136.562 158.775 154.918 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.411) >>
 >> endobj
-14113 0 obj <<
+14102 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.865 145.226 190.221 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-14114 0 obj <<
+14103 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [194.895 145.226 213.252 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.570) >>
 >> endobj
-14115 0 obj <<
+14104 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [159.32 131.677 177.676 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.320) >>
 >> endobj
-14116 0 obj <<
+14105 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.108 118.128 191.464 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.234) >>
 >> endobj
-14117 0 obj <<
+14106 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [350.294 646.546 363.196 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.36) >>
 >> endobj
-14118 0 obj <<
+14107 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [367.794 632.587 380.696 644.276]
 /Subtype /Link
 /A << /S /GoTo /D (page.33) >>
 >> endobj
-14119 0 obj <<
+14108 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.37 632.587 403.726 644.276]
 /Subtype /Link
 /A << /S /GoTo /D (page.242) >>
 >> endobj
-14120 0 obj <<
+14109 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [408.4 632.587 426.756 644.276]
 /Subtype /Link
 /A << /S /GoTo /D (page.726) >>
 >> endobj
-14121 0 obj <<
+14110 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [339.082 618.627 357.438 630.316]
 /Subtype /Link
 /A << /S /GoTo /D (page.475) >>
 >> endobj
-14122 0 obj <<
+14111 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [341.597 604.667 359.953 616.066]
 /Subtype /Link
 /A << /S /GoTo /D (page.121) >>
 >> endobj
-14123 0 obj <<
+14112 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [364.627 604.667 382.983 616.066]
 /Subtype /Link
 /A << /S /GoTo /D (page.364) >>
 >> endobj
-14124 0 obj <<
+14113 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.779 590.707 402.135 602.397]
 /Subtype /Link
 /A << /S /GoTo /D (page.122) >>
 >> endobj
-14125 0 obj <<
+14114 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.779 576.747 406.135 588.437]
 /Subtype /Link
 /A << /S /GoTo /D (page.688) >>
 >> endobj
-14126 0 obj <<
+14115 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [368.355 562.788 386.711 574.477]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-14127 0 obj <<
+14116 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.385 562.788 409.741 574.477]
 /Subtype /Link
 /A << /S /GoTo /D (page.404) >>
 >> endobj
-14128 0 obj <<
+14117 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [376.991 548.828 395.347 560.517]
 /Subtype /Link
 /A << /S /GoTo /D (page.810) >>
 >> endobj
-14129 0 obj <<
+14118 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [369.879 506.949 382.78 518.093]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-14130 0 obj <<
+14119 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [354.946 492.989 367.848 504.133]
 /Subtype /Link
 /A << /S /GoTo /D (page.44) >>
 >> endobj
-14131 0 obj <<
+14120 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.173 479.029 433.529 490.718]
 /Subtype /Link
 /A << /S /GoTo /D (page.377) >>
 >> endobj
-14132 0 obj <<
+14121 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.385 465.069 405.741 476.759]
 /Subtype /Link
 /A << /S /GoTo /D (page.375) >>
 >> endobj
-14133 0 obj <<
+14122 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.415 465.069 428.771 476.759]
 /Subtype /Link
 /A << /S /GoTo /D (page.378) >>
 >> endobj
-14134 0 obj <<
+14123 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 451.109 457.513 462.799]
 /Subtype /Link
 /A << /S /GoTo /D (page.189) >>
 >> endobj
-14135 0 obj <<
+14124 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 439.681 354.864 448.704]
 /Subtype /Link
 /A << /S /GoTo /D (page.199) >>
 >> endobj
-14136 0 obj <<
+14125 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [395.324 423.6 413.68 435.29]
 /Subtype /Link
 /A << /S /GoTo /D (page.371) >>
 >> endobj
-14137 0 obj <<
+14126 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.401 409.641 396.757 421.33]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-14138 0 obj <<
+14127 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [361.462 395.681 379.818 407.08]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-14139 0 obj <<
+14128 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [365.28 381.721 383.636 393.411]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-14140 0 obj <<
+14129 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.688 367.761 410.044 379.451]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-14141 0 obj <<
+14130 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.718 367.761 433.074 379.451]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-14142 0 obj <<
+14131 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [343.961 353.802 362.317 365.491]
 /Subtype /Link
 /A << /S /GoTo /D (page.128) >>
 >> endobj
-14143 0 obj <<
+14132 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.658 339.842 397.014 351.531]
 /Subtype /Link
 /A << /S /GoTo /D (page.203) >>
 >> endobj
-14144 0 obj <<
+14133 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [421.355 325.882 439.711 337.571]
 /Subtype /Link
 /A << /S /GoTo /D (page.364) >>
 >> endobj
-14145 0 obj <<
+14134 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [348.018 311.922 366.374 323.612]
 /Subtype /Link
 /A << /S /GoTo /D (page.168) >>
 >> endobj
-14146 0 obj <<
+14135 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [370.803 311.922 389.159 323.612]
 /Subtype /Link
 /A << /S /GoTo /D (page.179) >>
 >> endobj
-14147 0 obj <<
+14136 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [393.587 311.922 411.943 323.612]
 /Subtype /Link
 /A << /S /GoTo /D (page.365) >>
 >> endobj
-14148 0 obj <<
+14137 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.372 311.922 434.728 323.612]
 /Subtype /Link
 /A << /S /GoTo /D (page.698) >>
 >> endobj
-14149 0 obj <<
+14138 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 311.922 457.513 323.612]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-14150 0 obj <<
+14139 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 298.373 354.864 309.517]
 /Subtype /Link
 /A << /S /GoTo /D (page.748) >>
 >> endobj
-14151 0 obj <<
+14140 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.538 298.373 377.895 309.517]
 /Subtype /Link
 /A << /S /GoTo /D (page.775) >>
 >> endobj
-14152 0 obj <<
+14141 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.173 284.413 440.529 296.103]
 /Subtype /Link
 /A << /S /GoTo /D (page.199) >>
 >> endobj
-14153 0 obj <<
+14142 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [389.476 270.453 407.832 282.143]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-14154 0 obj <<
+14143 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.112 256.494 401.468 268.183]
 /Subtype /Link
 /A << /S /GoTo /D (page.731) >>
 >> endobj
-14155 0 obj <<
+14144 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [436.779 242.534 455.135 254.223]
 /Subtype /Link
 /A << /S /GoTo /D (page.732) >>
 >> endobj
-14156 0 obj <<
+14145 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [341.536 228.574 359.893 240.142]
 /Subtype /Link
 /A << /S /GoTo /D (page.364) >>
 >> endobj
-14157 0 obj <<
+14146 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [364.567 228.574 382.923 240.142]
 /Subtype /Link
 /A << /S /GoTo /D (page.365) >>
 >> endobj
-14158 0 obj <<
+14147 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.385 158.99 446.741 171.892]
 /Subtype /Link
 /A << /S /GoTo /D (page.132) >>
 >> endobj
-14159 0 obj <<
+14148 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.627 118.128 462.984 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.731) >>
 >> endobj
-14170 0 obj <<
-/D [14168 0 R /XYZ 100.892 685.529 null]
+14159 0 obj <<
+/D [14157 0 R /XYZ 100.892 685.529 null]
 >> endobj
-14167 0 obj <<
+14156 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-14280 0 obj <<
+14269 0 obj <<
 /Length 1296      
 /Filter /FlateDecode
 >>
@@ -84516,813 +88250,813 @@
 ÑÝ0媚mfìiV¥“¦¬¾;¯j˜§kÙs÷ô(¥h-³ÒvY´í!Äcý	Æm`Õ&hËg#Û^Fºn䘧gÛÛ²¬fªÈþQî[VìI…\ÕÍfªkY¿´ÞÞ=ÙÂ4Ç>þ½õþhò
 endstream
 endobj
-14279 0 obj <<
+14268 0 obj <<
 /Type /Page
-/Contents 14280 0 R
-/Resources 14278 0 R
+/Contents 14269 0 R
+/Resources 14267 0 R
 /MediaBox [0 0 612 792]
-/Parent 14282 0 R
-/Annots [ 14160 0 R 14161 0 R 14162 0 R 14163 0 R 14164 0 R 14165 0 R 14166 0 R 14171 0 R 14172 0 R 14173 0 R 14174 0 R 14175 0 R 14176 0 R 14177 0 R 14178 0 R 14179 0 R 14180 0 R 14181 0 R 14182 0 R 14183 0 R 14184 0 R 14185 0 R 14186 0 R 14187 0 R 14188 0 R 14189 0 R 14190 0 R 14191 0 R 14192 0 R 14193 0 R 14194 0 R 14195 0 R 14196 0 R 14197 0 R 14198 0 R 14199 0 R 14200 0 R 14201 0 R 14202 0 R 14203 0 R 14204 0 R 14205 0 R 14206 0 R 14207 0 R 14208 0 R 14209 0 R 14210 0 R 14211 0 R 14212 0 R 14213 0 R 14214 0 R 14215 0 R 14216 0 R 14217 0 R 14218 0 R 14219 0 R 14220 0 R 14221 0 R 14222 0 R 14223 0 R 14224 0 R 14225 0 R 14226 0 R 14227 0 R 14228 0 R 14229 0 R 14230 0 R 14231 0 R 14232 0 R 14233 0 R 14234 0 R 14235 0 R 14236 0 R 14237 0 R 14238 0 R 14239 0 R 14240 0 R 14241 0 R 14242 0 R 14243 0 R 14244 0 R 14245 0 R 14246 0 R 14247 0 R 14248 0 R 14249 0 R 14250 0 R 14251 0 R 14252 0 R 14253 0 R 14254 0 R 14255 0 R 14256 0 R 14257 0 R 14258 0 R 14259 0 R 14260 0 R 14261 0 R 14262 0 R 14263 0 R 14264 0 R 14265 0 R 14266 0 R 14267 0 R 14268 0 R 14269 0 R 14270 0 R 14271 0 R 14272 0 R 14273 0 R 14274 0 R 14275 0 R 14276 0 R ]
+/Parent 14271 0 R
+/Annots [ 14149 0 R 14150 0 R 14151 0 R 14152 0 R 14153 0 R 14154 0 R 14155 0 R 14160 0 R 14161 0 R 14162 0 R 14163 0 R 14164 0 R 14165 0 R 14166 0 R 14167 0 R 14168 0 R 14169 0 R 14170 0 R 14171 0 R 14172 0 R 14173 0 R 14174 0 R 14175 0 R 14176 0 R 14177 0 R 14178 0 R 14179 0 R 14180 0 R 14181 0 R 14182 0 R 14183 0 R 14184 0 R 14185 0 R 14186 0 R 14187 0 R 14188 0 R 14189 0 R 14190 0 R 14191 0 R 14192 0 R 14193 0 R 14194 0 R 14195 0 R 14196 0 R 14197 0 R 14198 0 R 14199 0 R 14200 0 R 14201 0 R 14202 0 R 14203 0 R 14204 0 R 14205 0 R 14206 0 R 14207 0 R 14208 0 R 14209 0 R 14210 0 R 14211 0 R 14212 0 R 14213 0 R 14214 0 R 14215 0 R 14216 0 R 14217 0 R 14218 0 R 14219 0 R 14220 0 R 14221 0 R 14222 0 R 14223 0 R 14224 0 R 14225 0 R 14226 0 R 14227 0 R 14228 0 R 14229 0 R 14230 0 R 14231 0 R 14232 0 R 14233 0 R 14234 0 R 14235 0 R 14236 0 R 14237 0 R 14238 0 R 14239 0 R 14240 0 R 14241 0 R 14242 0 R 14243 0 R 14244 0 R 14245 0 R 14246 0 R 14247 0 R 14248 0 R 14249 0 R 14250 0 R 14251 0 R 14252 0 R 14253 0 R 14254 0 R 14255 0 R 14256 0 R 14257 0 R 14258 0 R 14259 0 R 14260 0 R 14261 0 R 14262 0 R 14263 0 R 14264 0 R 14265 0 R ]
 >> endobj
-14160 0 obj <<
+14149 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.511 646.546 245.413 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.44) >>
 >> endobj
-14161 0 obj <<
+14150 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [252.742 646.546 265.644 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-14162 0 obj <<
+14151 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [272.973 646.546 285.875 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.66) >>
 >> endobj
-14163 0 obj <<
+14152 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.204 646.546 311.56 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.285) >>
 >> endobj
-14164 0 obj <<
+14153 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 632.997 208.912 644.141]
 /Subtype /Link
 /A << /S /GoTo /D (page.313) >>
 >> endobj
-14165 0 obj <<
+14154 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.586 632.997 231.942 644.141]
 /Subtype /Link
 /A << /S /GoTo /D (page.567) >>
 >> endobj
-14166 0 obj <<
+14155 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.616 632.997 254.972 644.141]
 /Subtype /Link
 /A << /S /GoTo /D (page.690) >>
 >> endobj
-14171 0 obj <<
+14160 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [209.22 619.381 227.576 631.071]
 /Subtype /Link
 /A << /S /GoTo /D (page.687) >>
 >> endobj
-14172 0 obj <<
+14161 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.796 605.765 226.697 617.455]
 /Subtype /Link
 /A << /S /GoTo /D (page.50) >>
 >> endobj
-14173 0 obj <<
+14162 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.311 592.149 234.667 603.838]
 /Subtype /Link
 /A << /S /GoTo /D (page.322) >>
 >> endobj
-14174 0 obj <<
+14163 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [239.341 592.149 257.697 603.838]
 /Subtype /Link
 /A << /S /GoTo /D (page.323) >>
 >> endobj
-14175 0 obj <<
+14164 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [262.372 592.149 280.728 603.838]
 /Subtype /Link
 /A << /S /GoTo /D (page.746) >>
 >> endobj
-14176 0 obj <<
+14165 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [207.675 578.533 226.031 590.222]
 /Subtype /Link
 /A << /S /GoTo /D (page.748) >>
 >> endobj
-14177 0 obj <<
+14166 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.726 564.917 292.082 576.606]
 /Subtype /Link
 /A << /S /GoTo /D (page.128) >>
 >> endobj
-14178 0 obj <<
+14167 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [296.234 564.917 314.59 576.606]
 /Subtype /Link
 /A << /S /GoTo /D (page.131) >>
 >> endobj
-14179 0 obj <<
+14168 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.826 551.301 235.182 562.99]
 /Subtype /Link
 /A << /S /GoTo /D (page.661) >>
 >> endobj
-14180 0 obj <<
+14169 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [202.796 537.685 221.152 549.374]
 /Subtype /Link
 /A << /S /GoTo /D (page.129) >>
 >> endobj
-14181 0 obj <<
+14170 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.068 524.069 194.97 536.364]
 /Subtype /Link
 /A << /S /GoTo /D (page.78) >>
 >> endobj
-14182 0 obj <<
+14171 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.644 524.069 218 536.364]
 /Subtype /Link
 /A << /S /GoTo /D (page.178) >>
 >> endobj
-14183 0 obj <<
+14172 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [222.675 524.069 241.031 536.364]
 /Subtype /Link
 /A << /S /GoTo /D (page.366) >>
 >> endobj
-14184 0 obj <<
+14173 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [245.705 524.069 264.061 536.364]
 /Subtype /Link
 /A << /S /GoTo /D (page.367) >>
 >> endobj
-14185 0 obj <<
+14174 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [240.917 510.453 259.273 522.748]
 /Subtype /Link
 /A << /S /GoTo /D (page.689) >>
 >> endobj
-14186 0 obj <<
+14175 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.22 496.837 214.576 508.526]
 /Subtype /Link
 /A << /S /GoTo /D (page.745) >>
 >> endobj
-14187 0 obj <<
+14176 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [194.644 483.221 213 494.91]
 /Subtype /Link
 /A << /S /GoTo /D (page.159) >>
 >> endobj
-14188 0 obj <<
+14177 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.462 469.605 209.819 481.294]
 /Subtype /Link
 /A << /S /GoTo /D (page.107) >>
 >> endobj
-14189 0 obj <<
+14178 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [175.25 455.989 193.606 467.557]
 /Subtype /Link
 /A << /S /GoTo /D (page.503) >>
 >> endobj
-14190 0 obj <<
+14179 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.553 442.373 223.91 454.062]
 /Subtype /Link
 /A << /S /GoTo /D (page.545) >>
 >> endobj
-14191 0 obj <<
+14180 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [194.402 428.757 212.758 440.446]
 /Subtype /Link
 /A << /S /GoTo /D (page.745) >>
 >> endobj
-14192 0 obj <<
+14181 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [176.917 415.141 195.273 426.709]
 /Subtype /Link
 /A << /S /GoTo /D (page.175) >>
 >> endobj
-14193 0 obj <<
+14182 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [176.917 401.525 195.273 413.093]
 /Subtype /Link
 /A << /S /GoTo /D (page.810) >>
 >> endobj
-14194 0 obj <<
+14183 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [181.462 387.909 199.819 399.477]
 /Subtype /Link
 /A << /S /GoTo /D (page.551) >>
 >> endobj
-14195 0 obj <<
+14184 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.493 387.909 222.849 399.477]
 /Subtype /Link
 /A << /S /GoTo /D (page.677) >>
 >> endobj
-14196 0 obj <<
+14185 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.206 360.677 226.562 372.245]
 /Subtype /Link
 /A << /S /GoTo /D (page.813) >>
 >> endobj
-14197 0 obj <<
+14186 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.873 347.061 218.229 358.629]
 /Subtype /Link
 /A << /S /GoTo /D (page.813) >>
 >> endobj
-14198 0 obj <<
+14187 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.341 333.444 260.697 345.013]
 /Subtype /Link
 /A << /S /GoTo /D (page.128) >>
 >> endobj
-14199 0 obj <<
+14188 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [265.372 333.444 283.728 345.013]
 /Subtype /Link
 /A << /S /GoTo /D (page.133) >>
 >> endobj
-14200 0 obj <<
+14189 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [247.796 319.828 266.152 331.518]
 /Subtype /Link
 /A << /S /GoTo /D (page.164) >>
 >> endobj
-14201 0 obj <<
+14190 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.644 306.212 203 317.781]
 /Subtype /Link
 /A << /S /GoTo /D (page.660) >>
 >> endobj
-14202 0 obj <<
+14191 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.008 281.52 218.364 293.088]
 /Subtype /Link
 /A << /S /GoTo /D (page.675) >>
 >> endobj
-14203 0 obj <<
+14192 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.038 281.52 241.394 293.088]
 /Subtype /Link
 /A << /S /GoTo /D (page.738) >>
 >> endobj
-14204 0 obj <<
+14193 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.614 267.904 248.97 279.593]
 /Subtype /Link
 /A << /S /GoTo /D (page.677) >>
 >> endobj
-14205 0 obj <<
+14194 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.129 254.288 250.485 265.856]
 /Subtype /Link
 /A << /S /GoTo /D (page.677) >>
 >> endobj
-14206 0 obj <<
+14195 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [178.735 240.672 197.091 252.24]
 /Subtype /Link
 /A << /S /GoTo /D (page.596) >>
 >> endobj
-14207 0 obj <<
+14196 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.765 240.672 220.122 252.24]
 /Subtype /Link
 /A << /S /GoTo /D (page.678) >>
 >> endobj
-14208 0 obj <<
+14197 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.25 227.056 228.607 238.624]
 /Subtype /Link
 /A << /S /GoTo /D (page.675) >>
 >> endobj
-14209 0 obj <<
+14198 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [175.25 213.44 193.607 224.839]
 /Subtype /Link
 /A << /S /GoTo /D (page.292) >>
 >> endobj
-14210 0 obj <<
+14199 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.644 199.824 223 211.513]
 /Subtype /Link
 /A << /S /GoTo /D (page.307) >>
 >> endobj
-14211 0 obj <<
+14200 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [214.038 186.208 226.94 197.897]
 /Subtype /Link
 /A << /S /GoTo /D (page.81) >>
 >> endobj
-14212 0 obj <<
+14201 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.038 172.592 277.394 184.281]
 /Subtype /Link
 /A << /S /GoTo /D (page.109) >>
 >> endobj
-14213 0 obj <<
+14202 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.826 158.976 251.182 170.665]
 /Subtype /Link
 /A << /S /GoTo /D (page.107) >>
 >> endobj
-14214 0 obj <<
+14203 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.856 158.976 274.213 170.665]
 /Subtype /Link
 /A << /S /GoTo /D (page.109) >>
 >> endobj
-14215 0 obj <<
+14204 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.766 145.36 255.122 157.049]
 /Subtype /Link
 /A << /S /GoTo /D (page.106) >>
 >> endobj
-14216 0 obj <<
+14205 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.553 131.744 233.91 143.433]
 /Subtype /Link
 /A << /S /GoTo /D (page.102) >>
 >> endobj
-14217 0 obj <<
+14206 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.22 118.128 245.576 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.109) >>
 >> endobj
-14218 0 obj <<
+14207 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [425.346 646.546 443.702 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.579) >>
 >> endobj
-14219 0 obj <<
+14208 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.134 632.894 462.49 644.583]
 /Subtype /Link
 /A << /S /GoTo /D (page.109) >>
 >> endobj
-14220 0 obj <<
+14209 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.149 619.241 401.505 630.809]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-14221 0 obj <<
+14210 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.709 593.901 425.066 605.47]
 /Subtype /Link
 /A << /S /GoTo /D (page.361) >>
 >> endobj
-14222 0 obj <<
+14211 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.709 580.249 425.066 591.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.361) >>
 >> endobj
-14223 0 obj <<
+14212 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.709 566.596 425.066 578.164]
 /Subtype /Link
 /A << /S /GoTo /D (page.361) >>
 >> endobj
-14224 0 obj <<
+14213 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.709 552.943 425.066 564.512]
 /Subtype /Link
 /A << /S /GoTo /D (page.360) >>
 >> endobj
-14225 0 obj <<
+14214 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.709 539.291 425.066 550.859]
 /Subtype /Link
 /A << /S /GoTo /D (page.360) >>
 >> endobj
-14226 0 obj <<
+14215 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.831 525.638 397.187 537.206]
 /Subtype /Link
 /A << /S /GoTo /D (page.111) >>
 >> endobj
-14227 0 obj <<
+14216 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.861 525.638 420.217 537.206]
 /Subtype /Link
 /A << /S /GoTo /D (page.112) >>
 >> endobj
-14228 0 obj <<
+14217 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.891 525.638 443.247 537.206]
 /Subtype /Link
 /A << /S /GoTo /D (page.114) >>
 >> endobj
-14229 0 obj <<
+14218 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.376 511.985 396.732 523.554]
 /Subtype /Link
 /A << /S /GoTo /D (page.596) >>
 >> endobj
-14230 0 obj <<
+14219 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.649 498.333 448.005 510.022]
 /Subtype /Link
 /A << /S /GoTo /D (page.595) >>
 >> endobj
-14231 0 obj <<
+14220 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.316 484.68 432.672 496.248]
 /Subtype /Link
 /A << /S /GoTo /D (page.595) >>
 >> endobj
-14232 0 obj <<
+14221 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.103 471.027 421.46 482.596]
 /Subtype /Link
 /A << /S /GoTo /D (page.447) >>
 >> endobj
-14233 0 obj <<
+14222 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.155 457.375 415.511 469.064]
 /Subtype /Link
 /A << /S /GoTo /D (page.111) >>
 >> endobj
-14234 0 obj <<
+14223 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.357 457.375 438.714 469.064]
 /Subtype /Link
 /A << /S /GoTo /D (page.114) >>
 >> endobj
-14235 0 obj <<
+14224 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.56 457.375 461.916 469.064]
 /Subtype /Link
 /A << /S /GoTo /D (page.116) >>
 >> endobj
-14236 0 obj <<
+14225 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [466.763 457.375 485.119 469.064]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-14237 0 obj <<
+14226 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 457.375 508.322 469.064]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-14238 0 obj <<
+14227 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 443.826 405.674 454.97]
 /Subtype /Link
 /A << /S /GoTo /D (page.572) >>
 >> endobj
-14239 0 obj <<
+14228 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.348 443.826 428.704 454.97]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-14240 0 obj <<
+14229 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.378 443.826 451.734 454.97]
 /Subtype /Link
 /A << /S /GoTo /D (page.716) >>
 >> endobj
-14241 0 obj <<
+14230 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.18 429.567 461.536 442.469]
 /Subtype /Link
 /A << /S /GoTo /D (page.112) >>
 >> endobj
-14242 0 obj <<
+14231 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [393.952 416.52 406.854 428.21]
 /Subtype /Link
 /A << /S /GoTo /D (page.63) >>
 >> endobj
-14243 0 obj <<
+14232 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.528 416.52 429.884 428.21]
 /Subtype /Link
 /A << /S /GoTo /D (page.112) >>
 >> endobj
-14244 0 obj <<
+14233 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [434.558 416.52 452.914 428.21]
 /Subtype /Link
 /A << /S /GoTo /D (page.293) >>
 >> endobj
-14245 0 obj <<
+14234 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [469.407 402.868 487.763 414.557]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-14246 0 obj <<
+14235 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [380.497 389.215 398.854 400.905]
 /Subtype /Link
 /A << /S /GoTo /D (page.775) >>
 >> endobj
-14247 0 obj <<
+14236 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [376.255 375.562 394.611 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.112) >>
 >> endobj
-14248 0 obj <<
+14237 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.285 375.562 417.641 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.114) >>
 >> endobj
-14249 0 obj <<
+14238 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [421.103 375.562 439.46 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.116) >>
 >> endobj
-14250 0 obj <<
+14239 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.194 361.91 409.551 373.599]
 /Subtype /Link
 /A << /S /GoTo /D (page.725) >>
 >> endobj
-14251 0 obj <<
+14240 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.376 348.257 410.732 359.947]
 /Subtype /Link
 /A << /S /GoTo /D (page.528) >>
 >> endobj
-14252 0 obj <<
+14241 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.376 334.604 396.732 346.173]
 /Subtype /Link
 /A << /S /GoTo /D (page.293) >>
 >> endobj
-14253 0 obj <<
+14242 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.831 320.952 402.187 332.52]
 /Subtype /Link
 /A << /S /GoTo /D (page.113) >>
 >> endobj
-14254 0 obj <<
+14243 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [398.406 307.299 416.763 318.989]
 /Subtype /Link
 /A << /S /GoTo /D (page.113) >>
 >> endobj
-14255 0 obj <<
+14244 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [377.316 281.959 395.672 293.528]
 /Subtype /Link
 /A << /S /GoTo /D (page.167) >>
 >> endobj
-14256 0 obj <<
+14245 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.346 281.959 418.702 293.528]
 /Subtype /Link
 /A << /S /GoTo /D (page.596) >>
 >> endobj
-14257 0 obj <<
+14246 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.376 281.959 441.732 293.528]
 /Subtype /Link
 /A << /S /GoTo /D (page.692) >>
 >> endobj
-14258 0 obj <<
+14247 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.406 281.959 464.763 293.528]
 /Subtype /Link
 /A << /S /GoTo /D (page.753) >>
 >> endobj
-14259 0 obj <<
+14248 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [393.982 268.307 406.884 279.875]
 /Subtype /Link
 /A << /S /GoTo /D (page.63) >>
 >> endobj
-14260 0 obj <<
+14249 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.558 268.307 424.46 279.875]
 /Subtype /Link
 /A << /S /GoTo /D (page.86) >>
 >> endobj
-14261 0 obj <<
+14250 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.134 268.307 447.49 279.875]
 /Subtype /Link
 /A << /S /GoTo /D (page.101) >>
 >> endobj
-14262 0 obj <<
+14251 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [452.164 268.307 470.52 279.875]
 /Subtype /Link
 /A << /S /GoTo /D (page.192) >>
 >> endobj
-14263 0 obj <<
+14252 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [475.194 268.307 493.551 279.875]
 /Subtype /Link
 /A << /S /GoTo /D (page.402) >>
 >> endobj
-14264 0 obj <<
+14253 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [458.619 254.654 471.52 266.344]
 /Subtype /Link
 /A << /S /GoTo /D (page.72) >>
 >> endobj
-14265 0 obj <<
+14254 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [445.406 241.002 463.763 252.691]
 /Subtype /Link
 /A << /S /GoTo /D (page.190) >>
 >> endobj
-14266 0 obj <<
+14255 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.013 227.349 426.914 238.917]
 /Subtype /Link
 /A << /S /GoTo /D (page.46) >>
 >> endobj
-14267 0 obj <<
+14256 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.588 227.349 449.944 238.917]
 /Subtype /Link
 /A << /S /GoTo /D (page.136) >>
 >> endobj
-14268 0 obj <<
+14257 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [454.619 227.349 472.975 238.917]
 /Subtype /Link
 /A << /S /GoTo /D (page.137) >>
 >> endobj
-14269 0 obj <<
+14258 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [469.77 213.696 488.126 225.386]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-14270 0 obj <<
+14259 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [455.679 200.044 474.035 211.733]
 /Subtype /Link
 /A << /S /GoTo /D (page.206) >>
 >> endobj
-14271 0 obj <<
+14260 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.74 186.391 407.096 198.08]
 /Subtype /Link
 /A << /S /GoTo /D (page.684) >>
 >> endobj
-14272 0 obj <<
+14261 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.709 172.738 441.066 184.428]
 /Subtype /Link
 /A << /S /GoTo /D (page.695) >>
 >> endobj
-14273 0 obj <<
+14262 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.982 159.086 434.338 170.775]
 /Subtype /Link
 /A << /S /GoTo /D (page.295) >>
 >> endobj
-14274 0 obj <<
+14263 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [455.528 145.433 473.884 157.122]
 /Subtype /Link
 /A << /S /GoTo /D (page.695) >>
 >> endobj
-14275 0 obj <<
+14264 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.952 131.78 462.308 143.47]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-14276 0 obj <<
+14265 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [432.073 118.128 450.429 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.206) >>
 >> endobj
-14281 0 obj <<
-/D [14279 0 R /XYZ 151.701 685.529 null]
+14270 0 obj <<
+/D [14268 0 R /XYZ 151.701 685.529 null]
 >> endobj
-14278 0 obj <<
+14267 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-14416 0 obj <<
+14405 0 obj <<
 /Length 1577      
 /Filter /FlateDecode
 >>
@@ -85337,939 +89071,939 @@
 …„…ÿçooÿÖOò„©ßÆIRïM'm~¬â2lÌð  W–Cë̔ԛó»îÝWªy7‹ck;-гaNSGHr	›3•á͇µÝÏðôÅ"75)Ùïìl®š‹„‡„‚¶þq LöëüX…;m†ƒß¿(Š<®{üÌ9}¾ÉUvé×-ö ‰ä@Õ¶–üOX€$WA‚ˆ§åUq(—=!·yÏõ&wLX„º¨Qú\QD˜](f$É#¦Ââb$¥ËóXD‚ò!(ŸýX–SAaŠO‚:c‹s:Á9;1ÞÄîM'¦3nœdU›W[Po4¾]æ]?ÄÙ©ÖÕ£ûUv›§½»Ù\j©¾˜LPÔqj†ýyLBÙ¸¯®Û½Ù.ÂB`˜uª/½Gx¶õéMÜؐΔÿ¶¾î`­kÛµ‰Œý÷'ÍPLrP‰àÀ®œÏ4c'®Í:í—|{cž^|[2æÇyoò"?¦÷~ܨ˸¯¿:[7d\(MÍâz‰1öÿúÕ®Žf\Áeš]Üt¹ò7·Ÿqcô}]m›¬m	Bö:ɇ!íóÔ©ÐêÆÞaÄ`ÎÜ]³™½T‘¿a××Fui]ÆÇO‡rÜ5uQd#!1K!;à]ׇµ…®”¹³ŸÂ`ö{åÛãʪ6ÍýÒÓ×|nÓ¼~åèÛåädªêÔÿ^Ñx·
 endstream
 endobj
-14415 0 obj <<
+14404 0 obj <<
 /Type /Page
-/Contents 14416 0 R
-/Resources 14414 0 R
+/Contents 14405 0 R
+/Resources 14403 0 R
 /MediaBox [0 0 612 792]
-/Parent 14282 0 R
-/Annots [ 14277 0 R 14283 0 R 14284 0 R 14285 0 R 14286 0 R 14287 0 R 14288 0 R 14289 0 R 14290 0 R 14291 0 R 14292 0 R 14293 0 R 14294 0 R 14295 0 R 14296 0 R 14297 0 R 14298 0 R 14299 0 R 14300 0 R 14301 0 R 14302 0 R 14303 0 R 14304 0 R 14305 0 R 14306 0 R 14307 0 R 14308 0 R 14309 0 R 14310 0 R 14311 0 R 14312 0 R 14313 0 R 14314 0 R 14315 0 R 14316 0 R 14317 0 R 14318 0 R 14319 0 R 14320 0 R 14321 0 R 14322 0 R 14323 0 R 14324 0 R 14325 0 R 14326 0 R 14327 0 R 14328 0 R 14329 0 R 14330 0 R 14331 0 R 14332 0 R 14333 0 R 14334 0 R 14335 0 R 14336 0 R 14337 0 R 14338 0 R 14339 0 R 14340 0 R 14341 0 R 14342 0 R 14343 0 R 14344 0 R 14345 0 R 14346 0 R 14347 0 R 14348 0 R 14349 0 R 14350 0 R 14351 0 R 14352 0 R 14353 0 R 14354 0 R 14355 0 R 14356 0 R 14357 0 R 14358 0 R 14359 0 R 14360 0 R 14361 0 R 14362 0 R 14363 0 R 14364 0 R 14365 0 R 14366 0 R 14367 0 R 14368 0 R 14369 0 R 14370 0 R 14371 0 R 14372 0 R 14373 0 R 14374 0 R 14375 0 R 14376 0 R 14377 0 R 14378 0 R 14379 0 R 14380 0 R 14381 0 R 14382 0 R 14383 0 R 14384 0 R 14385 0 R 14386 0 R 14387 0 R 14388 0 R 14389 0 R 14390 0 R 14391 0 R 14392 0 R 14393 0 R 14394 0 R 14395 0 R 14396 0 R 14397 0 R 14398 0 R 14399 0 R 14400 0 R 14401 0 R 14402 0 R 14403 0 R 14404 0 R 14405 0 R 14406 0 R 14407 0 R 14408 0 R 14409 0 R 14410 0 R 14411 0 R 14412 0 R ]
+/Parent 14271 0 R
+/Annots [ 14266 0 R 14272 0 R 14273 0 R 14274 0 R 14275 0 R 14276 0 R 14277 0 R 14278 0 R 14279 0 R 14280 0 R 14281 0 R 14282 0 R 14283 0 R 14284 0 R 14285 0 R 14286 0 R 14287 0 R 14288 0 R 14289 0 R 14290 0 R 14291 0 R 14292 0 R 14293 0 R 14294 0 R 14295 0 R 14296 0 R 14297 0 R 14298 0 R 14299 0 R 14300 0 R 14301 0 R 14302 0 R 14303 0 R 14304 0 R 14305 0 R 14306 0 R 14307 0 R 14308 0 R 14309 0 R 14310 0 R 14311 0 R 14312 0 R 14313 0 R 14314 0 R 14315 0 R 14316 0 R 14317 0 R 14318 0 R 14319 0 R 14320 0 R 14321 0 R 14322 0 R 14323 0 R 14324 0 R 14325 0 R 14326 0 R 14327 0 R 14328 0 R 14329 0 R 14330 0 R 14331 0 R 14332 0 R 14333 0 R 14334 0 R 14335 0 R 14336 0 R 14337 0 R 14338 0 R 14339 0 R 14340 0 R 14341 0 R 14342 0 R 14343 0 R 14344 0 R 14345 0 R 14346 0 R 14347 0 R 14348 0 R 14349 0 R 14350 0 R 14351 0 R 14352 0 R 14353 0 R 14354 0 R 14355 0 R 14356 0 R 14357 0 R 14358 0 R 14359 0 R 14360 0 R 14361 0 R 14362 0 R 14363 0 R 14364 0 R 14365 0 R 14366 0 R 14367 0 R 14368 0 R 14369 0 R 14370 0 R 14371 0 R 14372 0 R 14373 0 R 14374 0 R 14375 0 R 14376 0 R 14377 0 R 14378 0 R 14379 0 R 14380 0 R 14381 0 R 14382 0 R 14383 0 R 14384 0 R 14385 0 R 14386 0 R 14387 0 R 14388 0 R 14389 0 R 14390 0 R 14391 0 R 14392 0 R 14393 0 R 14394 0 R 14395 0 R 14396 0 R 14397 0 R 14398 0 R 14399 0 R 14400 0 R 14401 0 R ]
 >> endobj
-14277 0 obj <<
+14266 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.895 646.546 158.252 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.349) >>
 >> endobj
-14283 0 obj <<
+14272 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [126.926 632.997 145.282 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.203) >>
 >> endobj
-14284 0 obj <<
+14273 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [136.847 605.899 149.749 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-14285 0 obj <<
+14274 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [155.347 605.899 168.249 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.66) >>
 >> endobj
-14286 0 obj <<
+14275 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.848 605.899 186.749 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.67) >>
 >> endobj
-14287 0 obj <<
+14276 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.348 605.899 205.25 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.90) >>
 >> endobj
-14288 0 obj <<
+14277 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.848 605.899 223.75 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.94) >>
 >> endobj
-14289 0 obj <<
+14278 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [229.349 605.899 242.25 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.97) >>
 >> endobj
-14290 0 obj <<
+14279 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [247.849 605.899 260.751 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.98) >>
 >> endobj
-14291 0 obj <<
+14280 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 592.35 158.102 603.494]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-14292 0 obj <<
+14281 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [165.408 592.35 183.764 603.494]
 /Subtype /Link
 /A << /S /GoTo /D (page.107) >>
 >> endobj
-14293 0 obj <<
+14282 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.07 592.35 209.426 603.494]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-14294 0 obj <<
+14283 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.732 592.35 235.088 603.494]
 /Subtype /Link
 /A << /S /GoTo /D (page.189) >>
 >> endobj
-14295 0 obj <<
+14284 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 592.35 260.751 603.494]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-14296 0 obj <<
+14285 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 578.8 158.102 589.944]
 /Subtype /Link
 /A << /S /GoTo /D (page.192) >>
 >> endobj
-14297 0 obj <<
+14286 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [161.807 578.8 180.163 589.944]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-14298 0 obj <<
+14287 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.625 578.8 201.981 589.944]
 /Subtype /Link
 /A << /S /GoTo /D (page.200) >>
 >> endobj
-14299 0 obj <<
+14288 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.685 578.8 224.042 589.944]
 /Subtype /Link
 /A << /S /GoTo /D (page.216) >>
 >> endobj
-14300 0 obj <<
+14289 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.504 578.8 245.86 589.944]
 /Subtype /Link
 /A << /S /GoTo /D (page.218) >>
 >> endobj
-14301 0 obj <<
+14290 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.564 578.8 267.92 589.944]
 /Subtype /Link
 /A << /S /GoTo /D (page.222) >>
 >> endobj
-14302 0 obj <<
+14291 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 565.251 158.102 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-14303 0 obj <<
+14292 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [161.807 565.251 180.163 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.285) >>
 >> endobj
-14304 0 obj <<
+14293 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.867 565.251 202.223 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-14305 0 obj <<
+14294 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.685 565.251 224.042 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-14306 0 obj <<
+14295 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.746 565.251 246.102 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.371) >>
 >> endobj
-14307 0 obj <<
+14296 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.807 565.251 268.163 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-14308 0 obj <<
+14297 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 551.702 158.102 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.403) >>
 >> endobj
-14309 0 obj <<
+14298 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [165.408 551.702 183.764 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.568) >>
 >> endobj
-14310 0 obj <<
+14299 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.07 551.702 209.426 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.572) >>
 >> endobj
-14311 0 obj <<
+14300 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.732 551.702 235.088 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-14312 0 obj <<
+14301 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 551.702 260.751 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.716) >>
 >> endobj
-14313 0 obj <<
+14302 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 540.274 158.102 549.297]
 /Subtype /Link
 /A << /S /GoTo /D (page.723) >>
 >> endobj
-14314 0 obj <<
+14303 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [175.7 524.604 194.056 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-14315 0 obj <<
+14304 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [158.699 511.054 171.601 522.198]
 /Subtype /Link
 /A << /S /GoTo /D (page.90) >>
 >> endobj
-14316 0 obj <<
+14305 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.487 497.505 167.389 508.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.90) >>
 >> endobj
-14317 0 obj <<
+14306 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [149.275 483.956 162.177 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.85) >>
 >> endobj
-14318 0 obj <<
+14307 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [166.851 483.956 179.753 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.90) >>
 >> endobj
-14319 0 obj <<
+14308 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [176.259 470.407 189.161 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.93) >>
 >> endobj
-14320 0 obj <<
+14309 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.835 470.407 212.191 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-14321 0 obj <<
+14310 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.167 456.858 267.069 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.93) >>
 >> endobj
-14322 0 obj <<
+14311 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [252.955 443.308 271.311 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-14323 0 obj <<
+14312 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [179.138 429.759 197.494 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.122) >>
 >> endobj
-14324 0 obj <<
+14313 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [202.168 429.759 220.524 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-14325 0 obj <<
+14314 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [225.198 429.759 243.555 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.706) >>
 >> endobj
-14326 0 obj <<
+14315 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.441 416.21 201.797 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-14327 0 obj <<
+14316 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.532 402.661 195.433 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.95) >>
 >> endobj
-14328 0 obj <<
+14317 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.108 402.661 218.464 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.220) >>
 >> endobj
-14329 0 obj <<
+14318 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.138 402.661 241.494 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.723) >>
 >> endobj
-14330 0 obj <<
+14319 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.502 389.112 213.858 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-14331 0 obj <<
+14320 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [180.349 375.562 198.705 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-14332 0 obj <<
+14321 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [202.409 375.562 220.766 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.209) >>
 >> endobj
-14333 0 obj <<
+14322 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.47 375.562 242.826 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.216) >>
 >> endobj
-14334 0 obj <<
+14323 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.531 375.562 264.887 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.707) >>
 >> endobj
-14335 0 obj <<
+14324 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [186.956 362.013 205.312 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.718) >>
 >> endobj
-14336 0 obj <<
+14325 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [214.138 348.464 232.494 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-14337 0 obj <<
+14326 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [189.35 334.915 202.252 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.93) >>
 >> endobj
-14338 0 obj <<
+14327 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.926 334.915 225.282 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-14339 0 obj <<
+14328 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [229.956 334.915 248.312 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.718) >>
 >> endobj
-14340 0 obj <<
+14329 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [198.744 321.366 217.1 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.718) >>
 >> endobj
-14341 0 obj <<
+14330 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [189.471 307.816 207.827 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.227) >>
 >> endobj
-14342 0 obj <<
+14331 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.774 294.267 192.13 305.835]
 /Subtype /Link
 /A << /S /GoTo /D (page.718) >>
 >> endobj
-14343 0 obj <<
+14332 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [181.38 280.718 199.736 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.289) >>
 >> endobj
-14344 0 obj <<
+14333 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [207.865 267.169 220.767 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.91) >>
 >> endobj
-14345 0 obj <<
+14334 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [174.956 253.62 193.312 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-14346 0 obj <<
+14335 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [168.653 240.07 187.009 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.289) >>
 >> endobj
-14347 0 obj <<
+14336 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [142.441 226.521 160.797 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.225) >>
 >> endobj
-14348 0 obj <<
+14337 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [156.017 212.972 168.918 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.93) >>
 >> endobj
-14349 0 obj <<
+14338 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.592 212.972 191.949 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.718) >>
 >> endobj
-14350 0 obj <<
+14339 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [179.138 199.423 197.494 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.718) >>
 >> endobj
-14351 0 obj <<
+14340 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [167.38 185.874 185.736 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-14352 0 obj <<
+14341 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.411 185.874 208.767 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.371) >>
 >> endobj
-14353 0 obj <<
+14342 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.138 172.324 157.494 183.893]
 /Subtype /Link
 /A << /S /GoTo /D (page.199) >>
 >> endobj
-14354 0 obj <<
+14343 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.32 158.169 203.676 171.071]
 /Subtype /Link
 /A << /S /GoTo /D (page.706) >>
 >> endobj
-14355 0 obj <<
+14344 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [143.077 145.226 161.433 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.225) >>
 >> endobj
-14356 0 obj <<
+14345 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [148.747 131.677 161.649 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-14357 0 obj <<
+14346 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [169.054 131.677 187.41 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.101) >>
 >> endobj
-14358 0 obj <<
+14347 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [194.815 131.677 213.171 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.189) >>
 >> endobj
-14359 0 obj <<
+14348 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.576 131.677 238.932 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-14360 0 obj <<
+14349 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 131.677 260.751 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.217) >>
 >> endobj
-14361 0 obj <<
+14350 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 118.128 158.102 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-14362 0 obj <<
+14351 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 118.128 181.132 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-14363 0 obj <<
+14352 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.807 118.128 204.163 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.718) >>
 >> endobj
-14364 0 obj <<
+14353 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.837 118.128 227.193 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-14365 0 obj <<
+14354 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [381.858 646.546 400.214 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.190) >>
 >> endobj
-14366 0 obj <<
+14355 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.888 646.546 423.244 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.718) >>
 >> endobj
-14367 0 obj <<
+14356 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [353.415 632.997 371.771 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.717) >>
 >> endobj
-14368 0 obj <<
+14357 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [344.991 619.448 363.347 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.225) >>
 >> endobj
-14369 0 obj <<
+14358 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [340.294 605.899 358.65 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.577) >>
 >> endobj
-14370 0 obj <<
+14359 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [318.476 592.35 336.832 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.448) >>
 >> endobj
-14371 0 obj <<
+14360 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [329.536 578.8 347.893 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.222) >>
 >> endobj
-14372 0 obj <<
+14361 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [352.567 578.8 370.923 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.717) >>
 >> endobj
-14373 0 obj <<
+14362 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [347.112 565.251 365.468 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.220) >>
 >> endobj
-14374 0 obj <<
+14363 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [373.203 551.702 386.105 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.65) >>
 >> endobj
-14375 0 obj <<
+14364 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 526.725 354.864 535.748]
 /Subtype /Link
 /A << /S /GoTo /D (page.119) >>
 >> endobj
-14376 0 obj <<
+14365 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [371.052 511.054 389.408 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.345) >>
 >> endobj
-14377 0 obj <<
+14366 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [368.021 497.505 386.377 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.346) >>
 >> endobj
-14378 0 obj <<
+14367 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [371.052 483.956 389.408 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.346) >>
 >> endobj
-14379 0 obj <<
+14368 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [332.945 470.407 351.302 481.975]
 /Subtype /Link
 /A << /S /GoTo /D (page.216) >>
 >> endobj
-14380 0 obj <<
+14369 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [337.021 456.858 355.377 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.400) >>
 >> endobj
-14381 0 obj <<
+14370 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [360.052 456.858 378.408 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.448) >>
 >> endobj
-14382 0 obj <<
+14371 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [349.809 443.308 368.165 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.448) >>
 >> endobj
-14383 0 obj <<
+14372 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [358.294 429.759 376.65 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.449) >>
 >> endobj
-14384 0 obj <<
+14373 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [380.476 416.21 393.377 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.65) >>
 >> endobj
-14385 0 obj <<
+14374 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [340.294 402.661 358.65 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.679) >>
 >> endobj
-14386 0 obj <<
+14375 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [371.918 389.112 390.274 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.237) >>
 >> endobj
-14387 0 obj <<
+14376 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.949 389.112 413.305 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.577) >>
 >> endobj
-14388 0 obj <<
+14377 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [384.706 375.562 403.062 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.573) >>
 >> endobj
-14389 0 obj <<
+14378 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.736 375.562 426.093 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.576) >>
 >> endobj
-14390 0 obj <<
+14379 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [368.1 362.013 386.456 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.663) >>
 >> endobj
-14391 0 obj <<
+14380 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [341.627 348.464 359.983 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.113) >>
 >> endobj
-14392 0 obj <<
+14381 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [343.991 334.915 362.347 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-14393 0 obj <<
+14382 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [354.294 321.366 372.65 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-14394 0 obj <<
+14383 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [347.567 307.816 365.923 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.458) >>
 >> endobj
-14395 0 obj <<
+14384 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.052 294.267 438.408 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.577) >>
 >> endobj
-14396 0 obj <<
+14385 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [345.098 267.169 363.454 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.317) >>
 >> endobj
-14397 0 obj <<
+14386 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [340.583 253.62 358.939 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.317) >>
 >> endobj
-14398 0 obj <<
+14387 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [330.748 240.07 349.105 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-14399 0 obj <<
+14388 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [353.779 240.07 372.135 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.596) >>
 >> endobj
-14400 0 obj <<
+14389 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [376.809 240.07 395.165 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.639) >>
 >> endobj
-14401 0 obj <<
+14390 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.839 240.07 418.196 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.677) >>
 >> endobj
-14402 0 obj <<
+14391 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [448.597 226.521 466.953 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.692) >>
 >> endobj
-14403 0 obj <<
+14392 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [358.173 212.972 376.529 224.54]
 /Subtype /Link
 /A << /S /GoTo /D (page.560) >>
 >> endobj
-14404 0 obj <<
+14393 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.658 199.423 422.014 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.560) >>
 >> endobj
-14405 0 obj <<
+14394 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [395.749 185.874 414.105 197.442]
 /Subtype /Link
 /A << /S /GoTo /D (page.526) >>
 >> endobj
-14406 0 obj <<
+14395 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [386.87 172.324 405.226 183.893]
 /Subtype /Link
 /A << /S /GoTo /D (page.475) >>
 >> endobj
-14407 0 obj <<
+14396 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [409.9 172.324 428.256 183.893]
 /Subtype /Link
 /A << /S /GoTo /D (page.522) >>
 >> endobj
-14408 0 obj <<
+14397 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [432.93 172.324 451.287 183.893]
 /Subtype /Link
 /A << /S /GoTo /D (page.527) >>
 >> endobj
-14409 0 obj <<
+14398 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.294 158.775 440.65 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.108) >>
 >> endobj
-14410 0 obj <<
+14399 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.385 145.226 422.741 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.365) >>
 >> endobj
-14411 0 obj <<
+14400 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [384.355 131.677 402.711 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.698) >>
 >> endobj
-14412 0 obj <<
+14401 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [324.839 118.128 343.196 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.659) >>
 >> endobj
-14417 0 obj <<
-/D [14415 0 R /XYZ 100.892 685.529 null]
+14406 0 obj <<
+/D [14404 0 R /XYZ 100.892 685.529 null]
 >> endobj
-14414 0 obj <<
+14403 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-14522 0 obj <<
+14511 0 obj <<
 /Length 1627      
 /Filter /FlateDecode
 >>
@@ -86289,736 +90023,736 @@
 ^^~º¯´k(à㽶Rˆ ±Á‹"¢—Tó©m¹h¦¼våV‹»½å¡XÌKèß—&æqPWj‡7+‡æ1ÍsË5€àÓ3db›6ùôþúf·úP%&á
 endstream
 endobj
-14521 0 obj <<
+14510 0 obj <<
 /Type /Page
-/Contents 14522 0 R
-/Resources 14520 0 R
+/Contents 14511 0 R
+/Resources 14509 0 R
 /MediaBox [0 0 612 792]
-/Parent 14282 0 R
-/Annots [ 14413 0 R 14418 0 R 14419 0 R 14420 0 R 14421 0 R 14422 0 R 14423 0 R 14424 0 R 14425 0 R 14426 0 R 14427 0 R 14428 0 R 14429 0 R 14430 0 R 14431 0 R 14432 0 R 14433 0 R 14434 0 R 14435 0 R 14436 0 R 14437 0 R 14438 0 R 14439 0 R 14440 0 R 14441 0 R 14442 0 R 14443 0 R 14444 0 R 14445 0 R 14446 0 R 14447 0 R 14448 0 R 14449 0 R 14450 0 R 14451 0 R 14452 0 R 14453 0 R 14454 0 R 14455 0 R 14456 0 R 14457 0 R 14458 0 R 14459 0 R 14460 0 R 14461 0 R 14462 0 R 14463 0 R 14464 0 R 14465 0 R 14466 0 R 14467 0 R 14468 0 R 14469 0 R 14470 0 R 14471 0 R 14472 0 R 14473 0 R 14474 0 R 14475 0 R 14476 0 R 14477 0 R 14478 0 R 14479 0 R 14480 0 R 14481 0 R 14482 0 R 14483 0 R 14484 0 R 14485 0 R 14486 0 R 14487 0 R 14488 0 R 14489 0 R 14490 0 R 14491 0 R 14492 0 R 14493 0 R 14494 0 R 14495 0 R 14496 0 R 14497 0 R 14498 0 R 14499 0 R 14500 0 R 14501 0 R 14502 0 R 14503 0 R 14504 0 R 14505 0 R 14506 0 R 14507 0 R 14508 0 R 14509 0 R 14510 0 R 14511 0 R 14512 0 R 14513 0 R 14514 0 R 14515 0 R 14516 0 R 14517 0 R 14518 0 R ]
+/Parent 14271 0 R
+/Annots [ 14402 0 R 14407 0 R 14408 0 R 14409 0 R 14410 0 R 14411 0 R 14412 0 R 14413 0 R 14414 0 R 14415 0 R 14416 0 R 14417 0 R 14418 0 R 14419 0 R 14420 0 R 14421 0 R 14422 0 R 14423 0 R 14424 0 R 14425 0 R 14426 0 R 14427 0 R 14428 0 R 14429 0 R 14430 0 R 14431 0 R 14432 0 R 14433 0 R 14434 0 R 14435 0 R 14436 0 R 14437 0 R 14438 0 R 14439 0 R 14440 0 R 14441 0 R 14442 0 R 14443 0 R 14444 0 R 14445 0 R 14446 0 R 14447 0 R 14448 0 R 14449 0 R 14450 0 R 14451 0 R 14452 0 R 14453 0 R 14454 0 R 14455 0 R 14456 0 R 14457 0 R 14458 0 R 14459 0 R 14460 0 R 14461 0 R 14462 0 R 14463 0 R 14464 0 R 14465 0 R 14466 0 R 14467 0 R 14468 0 R 14469 0 R 14470 0 R 14471 0 R 14472 0 R 14473 0 R 14474 0 R 14475 0 R 14476 0 R 14477 0 R 14478 0 R 14479 0 R 14480 0 R 14481 0 R 14482 0 R 14483 0 R 14484 0 R 14485 0 R 14486 0 R 14487 0 R 14488 0 R 14489 0 R 14490 0 R 14491 0 R 14492 0 R 14493 0 R 14494 0 R 14495 0 R 14496 0 R 14497 0 R 14498 0 R 14499 0 R 14500 0 R 14501 0 R 14502 0 R 14503 0 R 14504 0 R 14505 0 R 14506 0 R 14507 0 R ]
 >> endobj
-14413 0 obj <<
+14402 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.978 646.546 236.334 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-14418 0 obj <<
+14407 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.917 632.997 227.273 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-14419 0 obj <<
+14408 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [274.157 618.842 292.513 631.743]
 /Subtype /Link
 /A << /S /GoTo /D (page.214) >>
 >> endobj
-14420 0 obj <<
+14409 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [296.234 618.842 314.59 631.743]
 /Subtype /Link
 /A << /S /GoTo /D (page.225) >>
 >> endobj
-14421 0 obj <<
+14410 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [180.705 605.899 193.607 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.72) >>
 >> endobj
-14422 0 obj <<
+14411 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.616 592.35 230.972 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.163) >>
 >> endobj
-14423 0 obj <<
+14412 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.434 592.35 252.79 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.168) >>
 >> endobj
-14424 0 obj <<
+14413 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [270.73 578.8 289.086 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-14425 0 obj <<
+14414 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.204 578.8 311.56 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.174) >>
 >> endobj
-14426 0 obj <<
+14415 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 565.251 208.912 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.175) >>
 >> endobj
-14427 0 obj <<
+14416 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.586 565.251 231.942 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.177) >>
 >> endobj
-14428 0 obj <<
+14417 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.616 565.251 254.972 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.180) >>
 >> endobj
-14429 0 obj <<
+14418 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [258.434 565.251 276.79 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.182) >>
 >> endobj
-14430 0 obj <<
+14419 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.856 551.702 229.213 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.162) >>
 >> endobj
-14431 0 obj <<
+14420 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [233.887 551.702 252.243 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.163) >>
 >> endobj
-14432 0 obj <<
+14421 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [256.917 551.702 275.273 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.666) >>
 >> endobj
-14433 0 obj <<
+14422 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.856 538.153 212.213 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-14434 0 obj <<
+14423 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.463 524.604 244.819 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.381) >>
 >> endobj
-14435 0 obj <<
+14424 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.796 511.054 236.152 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.390) >>
 >> endobj
-14436 0 obj <<
+14425 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [240.826 511.054 259.182 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.391) >>
 >> endobj
-14437 0 obj <<
+14426 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [263.856 511.054 282.213 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.395) >>
 >> endobj
-14438 0 obj <<
+14427 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [231.069 497.505 249.425 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.551) >>
 >> endobj
-14439 0 obj <<
+14428 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [263.917 483.956 282.273 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.398) >>
 >> endobj
-14440 0 obj <<
+14429 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.903 456.858 227.259 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.247) >>
 >> endobj
-14441 0 obj <<
+14430 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.047 429.759 236.949 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.72) >>
 >> endobj
-14442 0 obj <<
+14431 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [270.432 416.21 288.788 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.238) >>
 >> endobj
-14443 0 obj <<
+14432 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.099 402.661 242.455 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-14444 0 obj <<
+14433 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [296.584 389.112 314.94 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-14445 0 obj <<
+14434 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [267.25 375.562 285.607 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.128) >>
 >> endobj
-14446 0 obj <<
+14435 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 350.585 208.912 359.608]
 /Subtype /Link
 /A << /S /GoTo /D (page.130) >>
 >> endobj
-14447 0 obj <<
+14436 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [251.917 334.915 270.273 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.122) >>
 >> endobj
-14448 0 obj <<
+14437 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [296.234 321.366 314.59 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.122) >>
 >> endobj
-14449 0 obj <<
+14438 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.887 307.816 227.243 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.666) >>
 >> endobj
-14450 0 obj <<
+14439 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [202.281 294.267 220.637 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.684) >>
 >> endobj
-14451 0 obj <<
+14440 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.281 280.718 236.637 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.570) >>
 >> endobj
-14452 0 obj <<
+14441 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.432 267.169 228.788 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-14453 0 obj <<
+14442 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [214.735 253.62 233.091 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-14454 0 obj <<
+14443 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [237.766 253.62 256.122 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.237) >>
 >> endobj
-14455 0 obj <<
+14444 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [260.796 253.62 279.152 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-14456 0 obj <<
+14445 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [283.826 253.62 302.182 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.572) >>
 >> endobj
-14457 0 obj <<
+14446 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [299.432 240.07 312.334 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.96) >>
 >> endobj
-14458 0 obj <<
+14447 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.341 226.521 233.697 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-14459 0 obj <<
+14448 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [238.372 226.521 256.728 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.165) >>
 >> endobj
-14460 0 obj <<
+14449 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [261.402 226.521 279.758 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.166) >>
 >> endobj
-14461 0 obj <<
+14450 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [267.939 212.972 286.295 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-14462 0 obj <<
+14451 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.204 212.972 311.56 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.165) >>
 >> endobj
-14463 0 obj <<
+14452 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 201.544 208.912 210.567]
 /Subtype /Link
 /A << /S /GoTo /D (page.169) >>
 >> endobj
-14464 0 obj <<
+14453 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.887 172.324 231.243 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.158) >>
 >> endobj
-14465 0 obj <<
+14454 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [238.069 158.775 256.425 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.405) >>
 >> endobj
-14466 0 obj <<
+14455 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.856 145.226 231.213 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.616) >>
 >> endobj
-14467 0 obj <<
+14456 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [235.887 145.226 254.243 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.618) >>
 >> endobj
-14468 0 obj <<
+14457 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.159 131.677 235.516 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.613) >>
 >> endobj
-14469 0 obj <<
+14458 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [251.796 118.128 270.152 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.607) >>
 >> endobj
-14470 0 obj <<
+14459 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [459.285 646.546 477.641 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.545) >>
 >> endobj
-14471 0 obj <<
+14460 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [450.679 632.997 469.035 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.122) >>
 >> endobj
-14472 0 obj <<
+14461 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.467 619.448 446.823 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.387) >>
 >> endobj
-14473 0 obj <<
+14462 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.467 605.899 429.823 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.167) >>
 >> endobj
-14474 0 obj <<
+14463 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.982 592.35 472.338 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.387) >>
 >> endobj
-14475 0 obj <<
+14464 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.619 578.8 461.975 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-14476 0 obj <<
+14465 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.376 565.251 417.732 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.286) >>
 >> endobj
-14477 0 obj <<
+14466 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.406 565.251 440.763 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.586) >>
 >> endobj
-14478 0 obj <<
+14467 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.679 551.702 458.035 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-14479 0 obj <<
+14468 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.679 538.153 422.035 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-14480 0 obj <<
+14469 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.709 538.153 445.066 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.572) >>
 >> endobj
-14481 0 obj <<
+14470 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [381.103 524.604 399.46 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.738) >>
 >> endobj
-14482 0 obj <<
+14471 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [396.316 511.054 414.672 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.365) >>
 >> endobj
-14483 0 obj <<
+14472 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.679 497.505 462.035 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.250) >>
 >> endobj
-14484 0 obj <<
+14473 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [469.952 483.956 482.854 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.92) >>
 >> endobj
-14485 0 obj <<
+14474 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.103 470.407 434.46 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.345) >>
 >> endobj
-14486 0 obj <<
+14475 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.74 456.858 437.096 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.698) >>
 >> endobj
-14487 0 obj <<
+14476 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.346 443.308 438.702 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.124) >>
 >> endobj
-14488 0 obj <<
+14477 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [432.316 429.759 450.672 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.208) >>
 >> endobj
-14489 0 obj <<
+14478 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.77 416.21 406.126 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.343) >>
 >> endobj
-14490 0 obj <<
+14479 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.8 416.21 429.157 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.344) >>
 >> endobj
-14491 0 obj <<
+14480 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.831 416.21 452.187 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.690) >>
 >> endobj
-14492 0 obj <<
+14481 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.528 402.661 448.884 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.343) >>
 >> endobj
-14493 0 obj <<
+14482 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [437.285 389.112 455.641 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.343) >>
 >> endobj
-14494 0 obj <<
+14483 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [460.316 389.112 478.672 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.344) >>
 >> endobj
-14495 0 obj <<
+14484 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.679 362.013 401.581 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.53) >>
 >> endobj
-14496 0 obj <<
+14485 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.649 348.464 404.005 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.556) >>
 >> endobj
-14497 0 obj <<
+14486 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [389.952 334.915 408.308 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.744) >>
 >> endobj
-14498 0 obj <<
+14487 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.211 321.366 444.567 332.765]
 /Subtype /Link
 /A << /S /GoTo /D (page.744) >>
 >> endobj
-14499 0 obj <<
+14488 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.449 307.816 412.806 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.119) >>
 >> endobj
-14500 0 obj <<
+14489 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.329 307.816 436.685 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.178) >>
 >> endobj
-14501 0 obj <<
+14490 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.208 307.816 460.564 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.294) >>
 >> endobj
-14502 0 obj <<
+14491 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [466.087 307.816 484.443 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.555) >>
 >> endobj
-14503 0 obj <<
+14492 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 307.816 508.322 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.619) >>
 >> endobj
-14504 0 obj <<
+14493 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 294.267 405.674 305.411]
 /Subtype /Link
 /A << /S /GoTo /D (page.753) >>
 >> endobj
-14505 0 obj <<
+14494 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.348 294.267 428.704 305.411]
 /Subtype /Link
 /A << /S /GoTo /D (page.762) >>
 >> endobj
-14506 0 obj <<
+14495 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [398.376 280.718 416.732 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.178) >>
 >> endobj
-14507 0 obj <<
+14496 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [421.406 280.718 439.763 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.748) >>
 >> endobj
-14508 0 obj <<
+14497 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.073 267.169 406.429 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.555) >>
 >> endobj
-14509 0 obj <<
+14498 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.103 267.169 429.46 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.763) >>
 >> endobj
-14510 0 obj <<
+14499 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [437.285 253.62 455.641 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.381) >>
 >> endobj
-14511 0 obj <<
+14500 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.013 226.521 440.369 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.561) >>
 >> endobj
-14512 0 obj <<
+14501 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [380.952 185.874 399.308 197.442]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-14513 0 obj <<
+14502 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [377.164 172.324 395.52 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.587) >>
 >> endobj
-14514 0 obj <<
+14503 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.194 172.324 418.55 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.639) >>
 >> endobj
-14515 0 obj <<
+14504 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [389.891 158.775 408.247 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.206) >>
 >> endobj
-14516 0 obj <<
+14505 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.255 145.226 413.702 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.7) >>
 >> endobj
-14517 0 obj <<
+14506 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.376 131.677 424.732 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-14518 0 obj <<
+14507 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [393.225 118.128 411.581 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-14523 0 obj <<
-/D [14521 0 R /XYZ 151.701 685.529 null]
+14512 0 obj <<
+/D [14510 0 R /XYZ 151.701 685.529 null]
 >> endobj
-14520 0 obj <<
+14509 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-14655 0 obj <<
+14644 0 obj <<
 /Length 1446      
 /Filter /FlateDecode
 >>
@@ -87038,918 +90772,918 @@
 4Ÿ´dåx™lM&üÏYÑ-ÍÁ£!땘þ§ñÉÿ *m
 endstream
 endobj
-14654 0 obj <<
+14643 0 obj <<
 /Type /Page
-/Contents 14655 0 R
-/Resources 14653 0 R
+/Contents 14644 0 R
+/Resources 14642 0 R
 /MediaBox [0 0 612 792]
-/Parent 14282 0 R
-/Annots [ 14519 0 R 14524 0 R 14525 0 R 14526 0 R 14527 0 R 14528 0 R 14529 0 R 14530 0 R 14531 0 R 14532 0 R 14533 0 R 14534 0 R 14535 0 R 14536 0 R 14537 0 R 14538 0 R 14539 0 R 14540 0 R 14541 0 R 14542 0 R 14543 0 R 14544 0 R 14545 0 R 14546 0 R 14547 0 R 14548 0 R 14549 0 R 14550 0 R 14551 0 R 14552 0 R 14553 0 R 14554 0 R 14555 0 R 14556 0 R 14557 0 R 14558 0 R 14559 0 R 14560 0 R 14561 0 R 14562 0 R 14563 0 R 14564 0 R 14565 0 R 14566 0 R 14567 0 R 14568 0 R 14569 0 R 14570 0 R 14571 0 R 14572 0 R 14573 0 R 14574 0 R 14575 0 R 14576 0 R 14577 0 R 14578 0 R 14579 0 R 14580 0 R 14581 0 R 14582 0 R 14583 0 R 14584 0 R 14585 0 R 14586 0 R 14587 0 R 14588 0 R 14589 0 R 14590 0 R 14591 0 R 14592 0 R 14593 0 R 14594 0 R 14595 0 R 14596 0 R 14597 0 R 14598 0 R 14599 0 R 14600 0 R 14601 0 R 14602 0 R 14603 0 R 14604 0 R 14605 0 R 14606 0 R 14607 0 R 14608 0 R 14609 0 R 14610 0 R 14611 0 R 14612 0 R 14613 0 R 14614 0 R 14615 0 R 14616 0 R 14617 0 R 14618 0 R 14619 0 R 14620 0 R 14621 0 R 14622 0 R 14623 0 R 14624 0 R 14625 0 R 14626 0 R 14627 0 R 14628 0 R 14629 0 R 14630 0 R 14631 0 R 14632 0 R 14633 0 R 14634 0 R 14635 0 R 14636 0 R 14637 0 R 14638 0 R 14639 0 R 14640 0 R 14641 0 R 14642 0 R 14643 0 R 14644 0 R 14645 0 R 14646 0 R 14647 0 R 14648 0 R 14649 0 R 14650 0 R ]
+/Parent 14271 0 R
+/Annots [ 14508 0 R 14513 0 R 14514 0 R 14515 0 R 14516 0 R 14517 0 R 14518 0 R 14519 0 R 14520 0 R 14521 0 R 14522 0 R 14523 0 R 14524 0 R 14525 0 R 14526 0 R 14527 0 R 14528 0 R 14529 0 R 14530 0 R 14531 0 R 14532 0 R 14533 0 R 14534 0 R 14535 0 R 14536 0 R 14537 0 R 14538 0 R 14539 0 R 14540 0 R 14541 0 R 14542 0 R 14543 0 R 14544 0 R 14545 0 R 14546 0 R 14547 0 R 14548 0 R 14549 0 R 14550 0 R 14551 0 R 14552 0 R 14553 0 R 14554 0 R 14555 0 R 14556 0 R 14557 0 R 14558 0 R 14559 0 R 14560 0 R 14561 0 R 14562 0 R 14563 0 R 14564 0 R 14565 0 R 14566 0 R 14567 0 R 14568 0 R 14569 0 R 14570 0 R 14571 0 R 14572 0 R 14573 0 R 14574 0 R 14575 0 R 14576 0 R 14577 0 R 14578 0 R 14579 0 R 14580 0 R 14581 0 R 14582 0 R 14583 0 R 14584 0 R 14585 0 R 14586 0 R 14587 0 R 14588 0 R 14589 0 R 14590 0 R 14591 0 R 14592 0 R 14593 0 R 14594 0 R 14595 0 R 14596 0 R 14597 0 R 14598 0 R 14599 0 R 14600 0 R 14601 0 R 14602 0 R 14603 0 R 14604 0 R 14605 0 R 14606 0 R 14607 0 R 14608 0 R 14609 0 R 14610 0 R 14611 0 R 14612 0 R 14613 0 R 14614 0 R 14615 0 R 14616 0 R 14617 0 R 14618 0 R 14619 0 R 14620 0 R 14621 0 R 14622 0 R 14623 0 R 14624 0 R 14625 0 R 14626 0 R 14627 0 R 14628 0 R 14629 0 R 14630 0 R 14631 0 R 14632 0 R 14633 0 R 14634 0 R 14635 0 R 14636 0 R 14637 0 R 14638 0 R 14639 0 R ]
 >> endobj
-14519 0 obj <<
+14508 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [132.017 646.546 144.918 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.48) >>
 >> endobj
-14524 0 obj <<
+14513 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.441 632.997 217.343 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.93) >>
 >> endobj
-14525 0 obj <<
+14514 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [159.32 619.448 172.221 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-14526 0 obj <<
+14515 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [176.895 619.448 195.252 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.620) >>
 >> endobj
-14527 0 obj <<
+14516 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [159.171 605.899 172.072 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-14528 0 obj <<
+14517 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [175.886 605.899 194.242 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.226) >>
 >> endobj
-14529 0 obj <<
+14518 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [198.055 605.899 216.411 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.615) >>
 >> endobj
-14530 0 obj <<
+14519 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.225 605.899 238.581 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.616) >>
 >> endobj
-14531 0 obj <<
+14520 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 605.899 260.751 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.620) >>
 >> endobj
-14532 0 obj <<
+14521 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 594.471 158.102 603.494]
 /Subtype /Link
 /A << /S /GoTo /D (page.623) >>
 >> endobj
-14533 0 obj <<
+14522 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [161.108 578.8 179.464 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.260) >>
 >> endobj
-14534 0 obj <<
+14523 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [155.971 565.251 168.872 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-14535 0 obj <<
+14524 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [172.88 565.251 191.236 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.229) >>
 >> endobj
-14536 0 obj <<
+14525 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.243 565.251 213.599 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.615) >>
 >> endobj
-14537 0 obj <<
+14526 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.607 565.251 235.963 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.616) >>
 >> endobj
-14538 0 obj <<
+14527 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [239.97 565.251 258.326 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.618) >>
 >> endobj
-14539 0 obj <<
+14528 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 551.702 158.102 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.620) >>
 >> endobj
-14540 0 obj <<
+14529 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 551.702 181.132 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.623) >>
 >> endobj
-14541 0 obj <<
+14530 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.592 538.153 197.494 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.74) >>
 >> endobj
-14542 0 obj <<
+14531 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [174.289 524.604 187.191 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.86) >>
 >> endobj
-14543 0 obj <<
+14532 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.865 524.604 204.767 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.92) >>
 >> endobj
-14544 0 obj <<
+14533 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [209.441 524.604 222.343 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.97) >>
 >> endobj
-14545 0 obj <<
+14534 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.411 511.054 175.312 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-14546 0 obj <<
+14535 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [179.986 511.054 198.343 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-14547 0 obj <<
+14536 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [203.017 511.054 221.373 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.229) >>
 >> endobj
-14548 0 obj <<
+14537 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [172.259 497.505 190.615 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-14549 0 obj <<
+14538 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [170.502 483.956 188.858 495.524]
 /Subtype /Link
 /A << /S /GoTo /D (page.724) >>
 >> endobj
-14550 0 obj <<
+14539 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [163.653 470.407 176.555 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.78) >>
 >> endobj
-14551 0 obj <<
+14540 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [181.229 470.407 199.585 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.629) >>
 >> endobj
-14552 0 obj <<
+14541 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [136.32 456.858 154.676 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.615) >>
 >> endobj
-14553 0 obj <<
+14542 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [142.986 443.308 161.343 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-14554 0 obj <<
+14543 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [188.714 429.759 207.07 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.747) >>
 >> endobj
-14555 0 obj <<
+14544 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.956 416.21 211.312 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.365) >>
 >> endobj
-14556 0 obj <<
+14545 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.986 416.21 234.343 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.782) >>
 >> endobj
-14557 0 obj <<
+14546 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.532 402.661 167.433 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.46) >>
 >> endobj
-14558 0 obj <<
+14547 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [198.229 389.112 216.585 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.696) >>
 >> endobj
-14559 0 obj <<
+14548 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [115.653 375.562 134.009 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.389) >>
 >> endobj
-14560 0 obj <<
+14549 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [138.683 375.562 157.039 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.548) >>
 >> endobj
-14561 0 obj <<
+14550 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [145.35 362.013 163.706 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.477) >>
 >> endobj
-14562 0 obj <<
+14551 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [168.38 362.013 186.736 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.484) >>
 >> endobj
-14563 0 obj <<
+14552 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.411 362.013 209.767 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.522) >>
 >> endobj
-14564 0 obj <<
+14553 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [214.441 362.013 232.797 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.533) >>
 >> endobj
-14565 0 obj <<
+14554 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [129.138 348.464 147.494 360.032]
 /Subtype /Link
 /A << /S /GoTo /D (page.394) >>
 >> endobj
-14566 0 obj <<
+14555 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [133.532 334.915 151.888 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.474) >>
 >> endobj
-14567 0 obj <<
+14556 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.077 321.366 210.433 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.449) >>
 >> endobj
-14568 0 obj <<
+14557 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.108 321.366 233.464 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.487) >>
 >> endobj
-14569 0 obj <<
+14558 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [238.138 321.366 256.494 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.539) >>
 >> endobj
-14570 0 obj <<
+14559 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [175.956 307.816 194.312 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-14571 0 obj <<
+14560 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.411 294.267 189.767 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-14572 0 obj <<
+14561 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [194.441 294.267 212.797 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.449) >>
 >> endobj
-14573 0 obj <<
+14562 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.471 294.267 235.827 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.539) >>
 >> endobj
-14574 0 obj <<
+14563 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [198.774 280.718 217.13 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.449) >>
 >> endobj
-14575 0 obj <<
+14564 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.805 280.718 240.161 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.539) >>
 >> endobj
-14576 0 obj <<
+14565 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [178.714 267.169 197.07 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.449) >>
 >> endobj
-14577 0 obj <<
+14566 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.744 267.169 220.1 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.539) >>
 >> endobj
-14578 0 obj <<
+14567 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [145.577 253.62 163.933 265.188]
 /Subtype /Link
 /A << /S /GoTo /D (page.394) >>
 >> endobj
-14579 0 obj <<
+14568 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [133.895 240.07 141.343 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.4) >>
 >> endobj
-14580 0 obj <<
+14569 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [146.017 240.07 164.373 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.519) >>
 >> endobj
-14581 0 obj <<
+14570 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [137.168 226.521 155.524 238.089]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-14582 0 obj <<
+14571 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [229.956 212.972 248.312 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.753) >>
 >> endobj
-14583 0 obj <<
+14572 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [132.926 199.423 151.282 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.596) >>
 >> endobj
-14584 0 obj <<
+14573 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [137.108 185.874 155.464 197.442]
 /Subtype /Link
 /A << /S /GoTo /D (page.690) >>
 >> endobj
-14585 0 obj <<
+14574 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [143.562 172.324 161.918 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.560) >>
 >> endobj
-14586 0 obj <<
+14575 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [130.35 158.775 148.706 170.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.558) >>
 >> endobj
-14587 0 obj <<
+14576 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [153.38 158.775 171.736 170.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.561) >>
 >> endobj
-14588 0 obj <<
+14577 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [180.229 145.226 198.585 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.561) >>
 >> endobj
-14589 0 obj <<
+14578 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [167.926 131.677 186.282 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.560) >>
 >> endobj
-14590 0 obj <<
+14579 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.956 131.677 209.312 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.561) >>
 >> endobj
-14591 0 obj <<
+14580 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [175.956 118.128 194.312 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.560) >>
 >> endobj
-14592 0 obj <<
+14581 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [338.779 646.546 357.135 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-14593 0 obj <<
+14582 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [368.021 632.997 386.377 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.661) >>
 >> endobj
-14594 0 obj <<
+14583 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [379.9 619.448 398.256 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.661) >>
 >> endobj
-14595 0 obj <<
+14584 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [353.627 605.899 371.983 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.678) >>
 >> endobj
-14596 0 obj <<
+14585 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [342.415 592.35 360.771 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.200) >>
 >> endobj
-14597 0 obj <<
+14586 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.916 578.8 372.818 589.944]
 /Subtype /Link
 /A << /S /GoTo /D (page.48) >>
 >> endobj
-14598 0 obj <<
+14587 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [386.155 565.251 399.057 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-14599 0 obj <<
+14588 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.641 565.251 418.542 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.64) >>
 >> endobj
-14600 0 obj <<
+14589 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [425.126 565.251 438.027 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.67) >>
 >> endobj
-14601 0 obj <<
+14590 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.611 565.251 457.513 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.90) >>
 >> endobj
-14602 0 obj <<
+14591 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 551.702 354.864 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.209) >>
 >> endobj
-14603 0 obj <<
+14592 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.538 551.702 377.895 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-14604 0 obj <<
+14593 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.569 551.702 400.925 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.303) >>
 >> endobj
-14605 0 obj <<
+14594 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [398.431 524.604 416.788 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.109) >>
 >> endobj
-14606 0 obj <<
+14595 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [389.899 511.054 408.255 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.102) >>
 >> endobj
-14607 0 obj <<
+14596 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.528 511.054 432.884 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.199) >>
 >> endobj
-14608 0 obj <<
+14597 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 511.054 457.513 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.200) >>
 >> endobj
-14609 0 obj <<
+14598 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 499.626 354.864 508.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.303) >>
 >> endobj
-14610 0 obj <<
+14599 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [432.536 483.956 445.438 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.87) >>
 >> endobj
-14611 0 obj <<
+14600 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.839 470.407 433.196 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.107) >>
 >> endobj
-14612 0 obj <<
+14601 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [371.506 456.858 389.862 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.661) >>
 >> endobj
-14613 0 obj <<
+14602 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.536 456.858 412.893 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.664) >>
 >> endobj
-14614 0 obj <<
+14603 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.567 443.308 434.923 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-14615 0 obj <<
+14604 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [364.385 429.759 382.741 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-14616 0 obj <<
+14605 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.177 416.21 432.533 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-14617 0 obj <<
+14606 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [436.732 416.21 455.088 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.102) >>
 >> endobj
-14618 0 obj <<
+14607 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 402.661 354.864 413.805]
 /Subtype /Link
 /A << /S /GoTo /D (page.104) >>
 >> endobj
-14619 0 obj <<
+14608 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.538 402.661 377.895 413.805]
 /Subtype /Link
 /A << /S /GoTo /D (page.106) >>
 >> endobj
-14620 0 obj <<
+14609 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [361.462 389.112 379.818 400.511]
 /Subtype /Link
 /A << /S /GoTo /D (page.105) >>
 >> endobj
-14621 0 obj <<
+14610 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [366.734 375.562 385.091 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.103) >>
 >> endobj
-14622 0 obj <<
+14611 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.037 362.013 410.394 373.581]
 /Subtype /Link
 /A << /S /GoTo /D (page.105) >>
 >> endobj
-14623 0 obj <<
+14612 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [409.465 348.464 422.367 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.64) >>
 >> endobj
-14624 0 obj <<
+14613 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [427.038 348.464 439.94 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.70) >>
 >> endobj
-14625 0 obj <<
+14614 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.611 348.464 457.513 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.79) >>
 >> endobj
-14626 0 obj <<
+14615 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 334.915 349.41 346.059]
 /Subtype /Link
 /A << /S /GoTo /D (page.99) >>
 >> endobj
-14627 0 obj <<
+14616 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [354.084 334.915 372.44 346.059]
 /Subtype /Link
 /A << /S /GoTo /D (page.106) >>
 >> endobj
-14628 0 obj <<
+14617 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [377.114 334.915 395.47 346.059]
 /Subtype /Link
 /A << /S /GoTo /D (page.115) >>
 >> endobj
-14629 0 obj <<
+14618 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.144 334.915 418.501 346.059]
 /Subtype /Link
 /A << /S /GoTo /D (page.118) >>
 >> endobj
-14630 0 obj <<
+14619 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [395.734 321.366 414.091 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.106) >>
 >> endobj
-14631 0 obj <<
+14620 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [361.462 307.816 379.818 319.216]
 /Subtype /Link
 /A << /S /GoTo /D (page.102) >>
 >> endobj
-14632 0 obj <<
+14621 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [366.734 294.267 379.636 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.70) >>
 >> endobj
-14633 0 obj <<
+14622 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [384.31 294.267 402.666 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-14634 0 obj <<
+14623 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.142 280.718 433.044 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.96) >>
 >> endobj
-14635 0 obj <<
+14624 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [437.718 280.718 456.074 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-14636 0 obj <<
+14625 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [361.462 267.169 379.818 278.568]
 /Subtype /Link
 /A << /S /GoTo /D (page.102) >>
 >> endobj
-14637 0 obj <<
+14626 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.414 253.62 432.315 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.97) >>
 >> endobj
-14638 0 obj <<
+14627 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 253.62 457.513 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.104) >>
 >> endobj
-14639 0 obj <<
+14628 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 240.07 354.864 251.214]
 /Subtype /Link
 /A << /S /GoTo /D (page.118) >>
 >> endobj
-14640 0 obj <<
+14629 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.538 240.07 377.895 251.214]
 /Subtype /Link
 /A << /S /GoTo /D (page.189) >>
 >> endobj
-14641 0 obj <<
+14630 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.569 240.07 400.925 251.214]
 /Subtype /Link
 /A << /S /GoTo /D (page.199) >>
 >> endobj
-14642 0 obj <<
+14631 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [371.797 226.521 390.153 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.103) >>
 >> endobj
-14643 0 obj <<
+14632 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.191 212.972 409.547 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.103) >>
 >> endobj
-14644 0 obj <<
+14633 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [352.476 199.423 370.832 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.678) >>
 >> endobj
-14645 0 obj <<
+14634 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.748 185.874 355.105 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.401) >>
 >> endobj
-14646 0 obj <<
+14635 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [323.93 172.324 342.286 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-14647 0 obj <<
+14636 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [356.718 158.775 375.074 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.810) >>
 >> endobj
-14648 0 obj <<
+14637 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [361.021 145.226 379.377 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.810) >>
 >> endobj
-14649 0 obj <<
+14638 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [377.021 131.677 395.377 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.707) >>
 >> endobj
-14650 0 obj <<
+14639 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [371.9 118.128 390.256 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.715) >>
 >> endobj
-14656 0 obj <<
-/D [14654 0 R /XYZ 100.892 685.529 null]
+14645 0 obj <<
+/D [14643 0 R /XYZ 100.892 685.529 null]
 >> endobj
-14653 0 obj <<
+14642 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-14740 0 obj <<
+14729 0 obj <<
 /Length 1482      
 /Filter /FlateDecode
 >>
@@ -87963,1342 +91697,1344 @@
 ¨‡0ÛÎ’‹±ãWXIŸM>,gÿŸJ:Ï
 endstream
 endobj
-14739 0 obj <<
+14728 0 obj <<
 /Type /Page
-/Contents 14740 0 R
-/Resources 14738 0 R
+/Contents 14729 0 R
+/Resources 14727 0 R
 /MediaBox [0 0 612 792]
-/Parent 14282 0 R
-/Annots [ 14651 0 R 14652 0 R 14657 0 R 14658 0 R 14659 0 R 14660 0 R 14661 0 R 14662 0 R 14663 0 R 14664 0 R 14665 0 R 14666 0 R 14667 0 R 14668 0 R 14669 0 R 14670 0 R 14671 0 R 14672 0 R 14673 0 R 14674 0 R 14675 0 R 14676 0 R 14677 0 R 14678 0 R 14679 0 R 14680 0 R 14681 0 R 14682 0 R 14683 0 R 14684 0 R 14685 0 R 14686 0 R 14687 0 R 14688 0 R 14689 0 R 14690 0 R 14691 0 R 14692 0 R 14693 0 R 14694 0 R 14695 0 R 14696 0 R 14697 0 R 14698 0 R 14699 0 R 14700 0 R 14701 0 R 14702 0 R 14703 0 R 14704 0 R 14705 0 R 14706 0 R 14707 0 R 14708 0 R 14709 0 R 14710 0 R 14711 0 R 14712 0 R 14713 0 R 14714 0 R 14715 0 R 14716 0 R 14717 0 R 14718 0 R 14719 0 R 14720 0 R 14721 0 R 14722 0 R 14723 0 R 14724 0 R 14725 0 R 14726 0 R 14727 0 R 14728 0 R 14729 0 R 14730 0 R 14731 0 R 14732 0 R 14733 0 R 14734 0 R 14735 0 R 14736 0 R ]
+/Parent 14271 0 R
+/Annots [ 14640 0 R 14641 0 R 14646 0 R 14647 0 R 14648 0 R 14649 0 R 14650 0 R 14651 0 R 14652 0 R 14653 0 R 14654 0 R 14655 0 R 14656 0 R 14657 0 R 14658 0 R 14659 0 R 14660 0 R 14661 0 R 14662 0 R 14663 0 R 14664 0 R 14665 0 R 14666 0 R 14667 0 R 14668 0 R 14669 0 R 14670 0 R 14671 0 R 14672 0 R 14673 0 R 14674 0 R 14675 0 R 14676 0 R 14677 0 R 14678 0 R 14679 0 R 14680 0 R 14681 0 R 14682 0 R 14683 0 R 14684 0 R 14685 0 R 14686 0 R 14687 0 R 14688 0 R 14689 0 R 14690 0 R 14691 0 R 14692 0 R 14693 0 R 14694 0 R 14695 0 R 14696 0 R 14697 0 R 14698 0 R 14699 0 R 14700 0 R 14701 0 R 14702 0 R 14703 0 R 14704 0 R 14705 0 R 14706 0 R 14707 0 R 14708 0 R 14709 0 R 14710 0 R 14711 0 R 14712 0 R 14713 0 R 14714 0 R 14715 0 R 14716 0 R 14717 0 R 14718 0 R 14719 0 R 14720 0 R 14721 0 R 14722 0 R 14723 0 R 14724 0 R 14725 0 R ]
 >> endobj
-14651 0 obj <<
+14640 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.22 646.546 200.576 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.663) >>
 >> endobj
-14652 0 obj <<
+14641 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.25 646.546 223.607 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.771) >>
 >> endobj
-14657 0 obj <<
+14646 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.978 632.997 196.334 644.141]
 /Subtype /Link
 /A << /S /GoTo /D (page.731) >>
 >> endobj
-14658 0 obj <<
+14647 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [203.432 619.448 221.788 630.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.579) >>
 >> endobj
-14659 0 obj <<
+14648 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [207.735 605.899 226.091 617.043]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-14660 0 obj <<
+14649 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [245.25 592.35 263.607 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.303) >>
 >> endobj
-14661 0 obj <<
+14650 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [238.341 578.8 256.697 589.944]
 /Subtype /Link
 /A << /S /GoTo /D (page.203) >>
 >> endobj
-14662 0 obj <<
+14651 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [229.614 565.251 247.97 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-14663 0 obj <<
+14652 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.978 551.702 247.334 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.261) >>
 >> endobj
-14664 0 obj <<
+14653 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.159 538.153 252.516 549.552]
 /Subtype /Link
 /A << /S /GoTo /D (page.261) >>
 >> endobj
-14665 0 obj <<
+14654 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.008 524.604 260.364 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-14666 0 obj <<
+14655 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.856 511.054 292.213 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.613) >>
 >> endobj
-14667 0 obj <<
+14656 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [281.008 497.505 299.364 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.325) >>
 >> endobj
-14668 0 obj <<
+14657 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.372 483.956 291.728 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-14669 0 obj <<
+14658 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.614 470.407 244.97 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.261) >>
 >> endobj
-14670 0 obj <<
+14659 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.159 456.858 239.516 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.261) >>
 >> endobj
-14671 0 obj <<
+14660 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.038 443.308 242.394 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-14672 0 obj <<
+14661 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.129 429.759 241.485 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-14673 0 obj <<
+14662 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.311 416.21 273.667 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.687) >>
 >> endobj
-14674 0 obj <<
+14663 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [270.705 402.661 289.061 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.349) >>
 >> endobj
-14675 0 obj <<
+14664 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.463 389.112 262.819 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-14676 0 obj <<
+14665 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [267.766 375.562 280.667 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.64) >>
 >> endobj
-14677 0 obj <<
+14666 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [272.644 362.013 285.546 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.65) >>
 >> endobj
-14678 0 obj <<
+14667 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.099 348.464 262.455 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.200) >>
 >> endobj
-14679 0 obj <<
+14668 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.129 334.915 252.485 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.305) >>
 >> endobj
-14680 0 obj <<
+14669 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.887 321.366 265.243 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.625) >>
 >> endobj
-14681 0 obj <<
+14670 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.978 307.816 223.334 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.528) >>
 >> endobj
-14682 0 obj <<
+14671 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [202.856 294.267 221.213 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.528) >>
 >> endobj
-14683 0 obj <<
+14672 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [301.886 280.718 320.242 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.102) >>
 >> endobj
-14684 0 obj <<
+14673 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.204 267.169 311.56 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.129) >>
 >> endobj
-14685 0 obj <<
+14674 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 255.741 208.912 264.764]
 /Subtype /Link
 /A << /S /GoTo /D (page.132) >>
 >> endobj
-14686 0 obj <<
+14675 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [253.766 240.07 272.122 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.134) >>
 >> endobj
-14687 0 obj <<
+14676 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 215.093 208.912 224.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.129) >>
 >> endobj
-14688 0 obj <<
+14677 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.978 199.423 196.334 210.567]
 /Subtype /Link
 /A << /S /GoTo /D (page.106) >>
 >> endobj
-14689 0 obj <<
+14678 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.008 199.423 219.364 210.567]
 /Subtype /Link
 /A << /S /GoTo /D (page.725) >>
 >> endobj
-14690 0 obj <<
+14679 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.856 185.874 238.213 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.407) >>
 >> endobj
-14691 0 obj <<
+14680 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.887 185.874 261.243 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-14692 0 obj <<
+14681 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [265.917 185.874 284.273 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.544) >>
 >> endobj
-14693 0 obj <<
+14682 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.25 172.324 213.607 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.238) >>
 >> endobj
-14694 0 obj <<
+14683 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.281 172.324 236.637 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-14695 0 obj <<
+14684 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.311 172.324 259.667 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.250) >>
 >> endobj
-14696 0 obj <<
+14685 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [198.584 158.775 216.94 170.175]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-14697 0 obj <<
+14686 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.614 158.775 239.97 170.175]
 /Subtype /Link
 /A << /S /GoTo /D (page.250) >>
 >> endobj
-14698 0 obj <<
+14687 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.19 145.226 291.546 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.368) >>
 >> endobj
-14699 0 obj <<
+14688 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [266.281 131.677 284.637 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.421) >>
 >> endobj
-14700 0 obj <<
+14689 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [202.887 118.128 221.243 129.527]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-14701 0 obj <<
+14690 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [492.996 646.546 511.352 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-14702 0 obj <<
+14691 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.77 632.997 445.126 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.166) >>
 >> endobj
-14703 0 obj <<
+14692 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.073 619.448 449.429 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.180) >>
 >> endobj
-14704 0 obj <<
+14693 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.982 605.899 436.338 617.043]
 /Subtype /Link
 /A << /S /GoTo /D (page.723) >>
 >> endobj
-14705 0 obj <<
+14694 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.861 592.35 450.217 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.701) >>
 >> endobj
-14706 0 obj <<
+14695 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [458.77 578.8 477.126 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.181) >>
 >> endobj
-14707 0 obj <<
+14696 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.619 565.251 424.975 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.695) >>
 >> endobj
-14708 0 obj <<
+14697 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.679 551.702 431.035 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.556) >>
 >> endobj
-14709 0 obj <<
+14698 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.225 538.153 442.581 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-14710 0 obj <<
+14699 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.194 524.604 418.551 536.003]
 /Subtype /Link
 /A << /S /GoTo /D (page.795) >>
 >> endobj
-14711 0 obj <<
+14700 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.588 511.054 447.944 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.371) >>
 >> endobj
-14712 0 obj <<
+14701 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [447.225 497.505 465.581 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.797) >>
 >> endobj
-14713 0 obj <<
+14702 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.679 483.956 431.035 495.524]
 /Subtype /Link
 /A << /S /GoTo /D (page.683) >>
 >> endobj
-14714 0 obj <<
+14703 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.619 470.407 424.975 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.108) >>
 >> endobj
-14715 0 obj <<
+14704 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.164 456.858 425.52 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.475) >>
 >> endobj
-14716 0 obj <<
+14705 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.346 443.308 405.247 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.70) >>
 >> endobj
-14717 0 obj <<
+14706 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [409.922 443.308 428.278 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.306) >>
 >> endobj
-14718 0 obj <<
+14707 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [435.073 429.759 453.429 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-14719 0 obj <<
+14708 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.74 416.21 410.096 427.354]
 /Subtype /Link
 /A << /S /GoTo /D (page.195) >>
 >> endobj
-14720 0 obj <<
+14709 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.619 389.112 460.975 400.511]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-14721 0 obj <<
+14710 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.043 375.562 423.399 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.174) >>
 >> endobj
-14722 0 obj <<
+14711 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.285 362.013 436.187 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.65) >>
 >> endobj
-14723 0 obj <<
+14712 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.316 348.464 420.763 359.863]
 /Subtype /Link
 /A << /S /GoTo /D (page.4) >>
 >> endobj
-14724 0 obj <<
+14713 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.619 334.915 435.975 346.314]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-14725 0 obj <<
+14714 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [481.104 321.366 499.46 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-14726 0 obj <<
+14715 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 296.388 405.674 305.411]
 /Subtype /Link
 /A << /S /GoTo /D (page.754) >>
 >> endobj
-14727 0 obj <<
+14716 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.649 280.718 449.005 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.491) >>
 >> endobj
-14728 0 obj <<
+14717 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [481.558 212.366 499.914 225.268]
 /Subtype /Link
 /A << /S /GoTo /D (page.104) >>
 >> endobj
-14729 0 obj <<
+14718 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.649 199.423 465.005 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.692) >>
 >> endobj
-14730 0 obj <<
+14719 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.043 185.874 430.399 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-14731 0 obj <<
+14720 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [390.528 172.324 403.429 183.724]
 /Subtype /Link
 /A << /S /GoTo /D (page.43) >>
 >> endobj
-14732 0 obj <<
+14721 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [408.103 172.324 426.46 183.724]
 /Subtype /Link
 /A << /S /GoTo /D (page.721) >>
 >> endobj
-14733 0 obj <<
+14722 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [470.952 158.775 489.308 170.175]
 /Subtype /Link
 /A << /S /GoTo /D (page.725) >>
 >> endobj
-14734 0 obj <<
+14723 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [421.467 145.226 439.823 156.625]
 /Subtype /Link
 /A << /S /GoTo /D (page.725) >>
 >> endobj
-14735 0 obj <<
+14724 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.649 131.677 432.005 143.076]
 /Subtype /Link
 /A << /S /GoTo /D (page.725) >>
 >> endobj
-14736 0 obj <<
+14725 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.225 118.128 418.581 129.527]
 /Subtype /Link
 /A << /S /GoTo /D (page.707) >>
 >> endobj
-14741 0 obj <<
-/D [14739 0 R /XYZ 151.701 685.529 null]
+14730 0 obj <<
+/D [14728 0 R /XYZ 151.701 685.529 null]
 >> endobj
-14738 0 obj <<
+14727 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-14846 0 obj <<
-/Length 1483      
+14835 0 obj <<
+/Length 1484      
 /Filter /FlateDecode
 >>
 stream
 xÚ­XÉrã6½ë+x”ªBšX	^ã%åIÙ匔äà́¦`
 #.
 —±\ùù )K@B®œLCÀëF¯í;Çw~™ý¼š]ÝAè0/¤;«Wø¾ÇBèPz$Kkçy¾l^þæq½pÁóû|Í÷‹o«/WwÄû½Ð<ŠPè1àö£DîšÝ®fÿÌ€X›à‰‡g³ço¾³¿}q|…Ìykwf"Ì£„ˆïÔYÎ~›ùÇ*r,ø ŠC¯½†Ÿ%›2ª“"ÿ©Õ¢?î<»¡y áé²ï¸ y‡ƒÓ‹vû.L8@‹Cô0e±p!›Ç¼ª.‚ëÕz¸¸Õĝ±?–çÿ0
-†Kz¬€.ƒÐ!9Õä/à´æee§Îàe´fxÓœÅsˆ¬´Ø݆àÓeWwiXå£X8Kèöcƒ¹¸ÞÁwe“rÓeñX|@—<.6ybJй’µTñ}×·»¶Ö<ø\¦ÉŒ”}.xÎ+ãÞ‰úŸ‹ ,É“,Jåm|
-7ÊÝ4#E`,0È©˜>4.ÅÔi-/ßd‹Öü›2Qö8‰¿º,R­ÃÀD‰È’j §ÞÀÌ…¯•j¯ë$ßTZ½›DLò×¢Ì̶ÃñZZÉltca¯$ŽR-UØ#F&Rm¥¯: Zá`WÅ`ˆ¦ôP¶ÿ•—/*_ÊBïPŠ};¨­*m.0ÁásÍŒ7&ü¾ïã'SÝo­¯XØyn²Àä‰vÛ¶)®¢€Œ†Ûv”†ÎcWZ	ÈÔíkåí_õÞœ:üðp}~Îsjá5Ÿ‰&íö±Ðb_ ¢À·ÂC6¶k÷щ}’lj>õízv¡FÁ@	W#T8¢«Žy´s“\ä£±Ö'Fvu¿¼yÔD8Ñ{QôyúÞWlÑ^ôé†(²ÂIÔU
-CûV0MÊ?çGç
-‰bU7ä>8î‚’wÜê{”«æ\äüPHꎹú¾‚‰Æ_4ª­HÓÿSPŠ¦ânqD_?I
-A4¸pÁ¼\€¹×~íÅWû¡Ï,8ÑV—Ê 7×·ÊÄ_ŸÞµ£” ‡û3É×­Òo•‚…¾ïë)°Òïðq…¯è^ïüê勺Ô(tdS²–÷7úN˨Ny
-‚àýãROJÖ°À½¹[ê«ç)G²Ý¯O×úàöí(ö'EÈ›õO©]*H ‘JÂF¯šUë×JA¥I¾5QZ8ªÑH÷°/ôù˜ ÚèLjMSâGhŽãàt“ãH0qýö!“ÖÉKû|©¹
-ßXþ÷=*£¸æåáá ·p ï‹¶"¸"\ƒñH?àîҮĿD±,™Û¶êåk=,ØNÝìºÈ¢$7\¢Ѿ•|€é)F\ˆ6ÑZ±©eŽX1çµ´â›ü¡(·j1Q—¯Ql(»Py­¤Šo2žËõÚ4_»Ôäݐ¢¬Š<Jû‡:C†ö§ÁŽ¬’­—ªÙ–S^–.5”NÂàR‰Z]R§Â,QM,ý¢«Â ˜7y¢$·”¥’c¹œG™0§úþ˜îÉ4wÛñÑ©ïx…šØBÛ‰­ÜŸ¬;2uuGÂãÙ3¥¢¸Ÿy¶D$?j7†Ôê7>üþ¤to!"…Á”…ÿ¸[^–«F¤IY7j´%çPSN»$²1ñ[Z#¸]Ñf©ˆŒC™­ÈV±¼Ý”E³«ÔV±2ðCÏÇÌåS´x„¯³‘k÷búÎFщ+r—T먎^¢ÊPá¶1`ï4ª6—’ªŽòXÿtbÀ·p¹„쟃|§M•¨ÇZ*væ! „³ƒ}ÔÕâ§ÔPí¥ç,‡hÁ„ÞËDôCÀžS.ˆ½ t)ž=“VýÁü•ïõÀ€¢QGænÆÅc²C{i5CÚ‡˜hÙtܾ¢pñãÉ3IâZ\¥ò(íxê¶ÙéÍÆì&#&ÍÙˆ@S…vÁ@áè#ëv5û¸ Q
+†Kz¬€.ƒÐ!9Õä/à´æee§Îàe´fxÓœÅsˆ¬´Ø݆ð\Ýu¤a•bá,¡Ûæâzß•MÊM—Åc1ð]ò¸Øä‰1(M@çJÖRÅ÷]LÜpmla|.ÓdFÊ><g‰•qïDýÏEP–äI¥r6>…eˆnš‘"€GƒœŠéCãRLÖòòM¶hÍ_ñ¸)e“ø«Ë"Õ:L”ˆ,©zê
+ÌìQøZ©VñºNòM¥Õ±IÄ$-ÊÌl»0¯¥•ÌF7öJâ(ÕB X…=bd"ÕVúª > vU†hJeû_yù¢ò¥,ô¥Ø·ƒÚªÒ&á>×Ìxƒ`Âïû>~2ÕýÖúŠE€ç&ÌAžh·m›âZ 
+Èh¸m×Iiè<v¥•Ð‰LݾVÞþUïÍ©Ã×çç|0§^ó™h²Ðn-ö"
+|+<dc»vØ'Éæ æSß®—Q`j”p5B…#ºê˜G;7ÉõH~0k}bdW÷Ë›G}@„
+±ÇEŸ§ï}ÅíEŸnˆ"+<‘D]¥0¹oÓ¤üSq~tސ(VuCîƒã.(yÇ­¾G¹jÎEÎ…¤î˜{¡ï; ˜hüE£Úº4ý?¥h*îGôõ³‘¤D³€Ì˘{í×^|µúÌ‚mu©zs}«LüõIà]ñH0J	z¸?“|Ý*ýV)Xèû¾žb +ýÎ WøJ€îõΠÿ
+‚J½€B‡@æa0%ky£ï´Œê”§  Þ?.õ¤„`= ëÜ›»¥Þ±zžr$Ûýút­nߎ2aR„¼Yÿ”Ú¥‚©$ lôªYµ~­Tšä[¥…£tûBŸßˆ	 ~€ØÔ9%~„æ1N79Ž×o2i¼´Ï—š«ðåߣ2Šk^zú¾h+€+Â5ôî.íJüKË’¹m«^¾ÖÃB€íÔ=À®‹,JrÃå!ºí{Qɘžb„Á…h­›Zæˆs^K+¾ÉŠr«ÕùxùÅI€²•×Jªø&ã¹\¯MóµKMÞ
+)ʪȣ´¨3dhúìˆÁ*Ùúx©šm9åe)áRCé$.•¨Õå!u*ÌÕÄÒ/º*‚y“'JrKY*9¶‘Ëy”	sªïéžLs·‘úŽW¨‰-„°ØÊýɺ#SWw$<ž=Sê!Šû™·`KDò£vã`Hx€¡~ãÃïOJ@÷â!òPLYø»åe¹jDú‘”u£F[r5å´K"¿¥5‚Ûm–Š¸À8”ÙˆlËÛMY4»Jm+?ô|Ì\>E‹GØø:¹vÏ!¦ïlä=!‘¸‚ wIµŽêè%ªaöAó¨js)©ê(õO'|—KÈþ9È÷qÚT‰z¨¥bg2A8;ØG]-~J
+Õ^zÎrˆL8à½LD0ì9å‚Ø@—âùÑ9iÕÌ_ù^(udîf\<&;´—FP3¤}ˆ‰–MÇí+
+?ž<“$®õÁ5Q*?€ÒŽ§n›ÞlÌn2bÒœ4YhŽ>²nW³ÿ ž¦ P
 endstream
 endobj
-14845 0 obj <<
+14834 0 obj <<
 /Type /Page
-/Contents 14846 0 R
-/Resources 14844 0 R
+/Contents 14835 0 R
+/Resources 14833 0 R
 /MediaBox [0 0 612 792]
-/Parent 14282 0 R
-/Annots [ 14737 0 R 14742 0 R 14743 0 R 14744 0 R 14745 0 R 14746 0 R 14747 0 R 14748 0 R 14749 0 R 14750 0 R 14751 0 R 14752 0 R 14753 0 R 14754 0 R 14755 0 R 14756 0 R 14757 0 R 14758 0 R 14759 0 R 14760 0 R 14761 0 R 14762 0 R 14763 0 R 14764 0 R 14765 0 R 14766 0 R 14767 0 R 14768 0 R 14769 0 R 14770 0 R 14771 0 R 14772 0 R 14773 0 R 14774 0 R 14775 0 R 14776 0 R 14777 0 R 14778 0 R 14779 0 R 14780 0 R 14781 0 R 14782 0 R 14783 0 R 14784 0 R 14785 0 R 14786 0 R 14787 0 R 14788 0 R 14789 0 R 14790 0 R 14791 0 R 14792 0 R 14793 0 R 14794 0 R 14795 0 R 14796 0 R 14797 0 R 14798 0 R 14799 0 R 14800 0 R 14801 0 R 14802 0 R 14803 0 R 14804 0 R 14805 0 R 14806 0 R 14807 0 R 14808 0 R 14809 0 R 14810 0 R 14811 0 R 14812 0 R 14813 0 R 14814 0 R 14815 0 R 14816 0 R 14817 0 R 14818 0 R 14819 0 R 14820 0 R 14821 0 R 14822 0 R 14823 0 R 14824 0 R 14825 0 R 14826 0 R 14827 0 R 14828 0 R 14829 0 R 14830 0 R 14831 0 R 14832 0 R 14833 0 R 14834 0 R 14835 0 R 14836 0 R 14837 0 R 14838 0 R 14839 0 R 14840 0 R 14841 0 R 14842 0 R ]
+/Parent 14271 0 R
+/Annots [ 14726 0 R 14731 0 R 14732 0 R 14733 0 R 14734 0 R 14735 0 R 14736 0 R 14737 0 R 14738 0 R 14739 0 R 14740 0 R 14741 0 R 14742 0 R 14743 0 R 14744 0 R 14745 0 R 14746 0 R 14747 0 R 14748 0 R 14749 0 R 14750 0 R 14751 0 R 14752 0 R 14753 0 R 14754 0 R 14755 0 R 14756 0 R 14757 0 R 14758 0 R 14759 0 R 14760 0 R 14761 0 R 14762 0 R 14763 0 R 14764 0 R 14765 0 R 14766 0 R 14767 0 R 14768 0 R 14769 0 R 14770 0 R 14771 0 R 14772 0 R 14773 0 R 14774 0 R 14775 0 R 14776 0 R 14777 0 R 14778 0 R 14779 0 R 14780 0 R 14781 0 R 14782 0 R 14783 0 R 14784 0 R 14785 0 R 14786 0 R 14787 0 R 14788 0 R 14789 0 R 14790 0 R 14791 0 R 14792 0 R 14793 0 R 14794 0 R 14795 0 R 14796 0 R 14797 0 R 14798 0 R 14799 0 R 14800 0 R 14801 0 R 14802 0 R 14803 0 R 14804 0 R 14805 0 R 14806 0 R 14807 0 R 14808 0 R 14809 0 R 14810 0 R 14811 0 R 14812 0 R 14813 0 R 14814 0 R 14815 0 R 14816 0 R 14817 0 R 14818 0 R 14819 0 R 14820 0 R 14821 0 R 14822 0 R 14823 0 R 14824 0 R 14825 0 R 14826 0 R 14827 0 R 14828 0 R 14829 0 R 14830 0 R 14831 0 R ]
 >> endobj
-14737 0 obj <<
+14726 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [152.653 646.546 171.009 657.946]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-14742 0 obj <<
+14731 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [176.895 632.997 195.252 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.721) >>
 >> endobj
-14743 0 obj <<
+14732 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.683 619.448 209.04 630.847]
 /Subtype /Link
 /A << /S /GoTo /D (page.721) >>
 >> endobj
-14744 0 obj <<
+14733 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [137.926 605.899 156.282 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.465) >>
 >> endobj
-14745 0 obj <<
+14734 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [159.744 605.899 178.1 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.467) >>
 >> endobj
-14746 0 obj <<
+14735 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.774 605.899 201.13 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.478) >>
 >> endobj
-14747 0 obj <<
+14736 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [153.245 592.35 171.601 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.465) >>
 >> endobj
-14748 0 obj <<
+14737 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [143.79 578.8 156.692 589.944]
 /Subtype /Link
 /A << /S /GoTo /D (page.23) >>
 >> endobj
-14749 0 obj <<
+14738 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [161.366 578.8 179.722 589.944]
 /Subtype /Link
 /A << /S /GoTo /D (page.125) >>
 >> endobj
-14750 0 obj <<
+14739 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.396 578.8 202.753 589.944]
 /Subtype /Link
-/A << /S /GoTo /D (page.454) >>
+/A << /S /GoTo /D (page.453) >>
 >> endobj
-14751 0 obj <<
+14740 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.199 565.251 235.555 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-14752 0 obj <<
+14741 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [194.32 551.702 212.676 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-14753 0 obj <<
+14742 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.471 538.153 180.827 549.721]
 /Subtype /Link
 /A << /S /GoTo /D (page.454) >>
 >> endobj
-14754 0 obj <<
+14743 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.502 538.153 203.858 549.721]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-14755 0 obj <<
+14744 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.532 538.153 226.888 549.721]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-14756 0 obj <<
+14745 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [231.562 538.153 249.918 549.721]
 /Subtype /Link
 /A << /S /GoTo /D (page.478) >>
 >> endobj
-14757 0 obj <<
+14746 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [160.865 524.604 179.221 536.003]
 /Subtype /Link
 /A << /S /GoTo /D (page.465) >>
 >> endobj
-14758 0 obj <<
+14747 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [188.942 497.505 196.389 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.4) >>
 >> endobj
-14759 0 obj <<
+14748 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [211.441 483.956 218.888 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.4) >>
 >> endobj
-14760 0 obj <<
+14749 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [229.108 470.407 247.464 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.121) >>
 >> endobj
-14761 0 obj <<
+14750 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [189.744 456.858 197.191 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.8) >>
 >> endobj
-14762 0 obj <<
+14751 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.229 443.308 230.585 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-14763 0 obj <<
+14752 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [178.471 429.759 191.373 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.99) >>
 >> endobj
-14764 0 obj <<
+14753 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [178.229 416.21 196.585 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.347) >>
 >> endobj
-14765 0 obj <<
+14754 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.259 416.21 219.615 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-14766 0 obj <<
+14755 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [128.38 402.661 146.736 414.229]
 /Subtype /Link
 /A << /S /GoTo /D (page.112) >>
 >> endobj
-14767 0 obj <<
+14756 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [151.411 402.661 169.767 414.229]
 /Subtype /Link
 /A << /S /GoTo /D (page.113) >>
 >> endobj
-14768 0 obj <<
+14757 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [174.441 402.661 192.797 414.229]
 /Subtype /Link
 /A << /S /GoTo /D (page.293) >>
 >> endobj
-14769 0 obj <<
+14758 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [174.865 389.112 193.221 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-14770 0 obj <<
+14759 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.835 375.562 190.191 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.293) >>
 >> endobj
-14771 0 obj <<
+14760 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [194.865 375.562 213.221 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.297) >>
 >> endobj
-14772 0 obj <<
+14761 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [164.744 362.013 177.646 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.51) >>
 >> endobj
-14773 0 obj <<
+14762 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.32 362.013 200.676 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.378) >>
 >> endobj
-14774 0 obj <<
+14763 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [168.714 348.464 187.07 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.615) >>
 >> endobj
-14775 0 obj <<
+14764 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [134.774 334.915 153.13 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.124) >>
 >> endobj
-14776 0 obj <<
+14765 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.805 334.915 176.161 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.561) >>
 >> endobj
-14777 0 obj <<
+14766 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [145.471 321.366 163.827 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.561) >>
 >> endobj
-14778 0 obj <<
+14767 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [134.092 307.816 146.994 319.385]
 /Subtype /Link
 /A << /S /GoTo /D (page.63) >>
 >> endobj
-14779 0 obj <<
+14768 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [151.389 307.816 169.745 319.385]
 /Subtype /Link
 /A << /S /GoTo /D (page.232) >>
 >> endobj
-14780 0 obj <<
+14769 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [174.14 307.816 192.496 319.385]
 /Subtype /Link
 /A << /S /GoTo /D (page.289) >>
 >> endobj
-14781 0 obj <<
+14770 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.892 307.816 215.248 319.385]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-14782 0 obj <<
+14771 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.643 307.816 237.999 319.385]
 /Subtype /Link
 /A << /S /GoTo /D (page.324) >>
 >> endobj
-14783 0 obj <<
+14772 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 307.816 260.751 319.385]
 /Subtype /Link
 /A << /S /GoTo /D (page.326) >>
 >> endobj
-14784 0 obj <<
+14773 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 294.267 158.102 305.411]
 /Subtype /Link
 /A << /S /GoTo /D (page.604) >>
 >> endobj
-14785 0 obj <<
+14774 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 294.267 181.132 305.411]
 /Subtype /Link
 /A << /S /GoTo /D (page.611) >>
 >> endobj
-14786 0 obj <<
+14775 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.807 294.267 204.163 305.411]
 /Subtype /Link
 /A << /S /GoTo /D (page.616) >>
 >> endobj
-14787 0 obj <<
+14776 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [172.683 280.718 191.04 292.286]
 /Subtype /Link
 /A << /S /GoTo /D (page.607) >>
 >> endobj
-14788 0 obj <<
+14777 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.38 266.563 191.736 279.464]
 /Subtype /Link
 /A << /S /GoTo /D (page.595) >>
 >> endobj
-14789 0 obj <<
+14778 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.744 253.62 211.1 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.363) >>
 >> endobj
-14790 0 obj <<
+14779 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.471 240.07 172.827 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.560) >>
 >> endobj
-14791 0 obj <<
+14780 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [141.411 226.521 159.767 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.561) >>
 >> endobj
-14792 0 obj <<
+14781 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [145.714 212.972 164.07 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.551) >>
 >> endobj
-14793 0 obj <<
+14782 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [168.744 212.972 187.1 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.552) >>
 >> endobj
-14794 0 obj <<
+14783 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.441 199.423 236.797 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.174) >>
 >> endobj
-14795 0 obj <<
+14784 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [137.168 185.874 150.07 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.47) >>
 >> endobj
-14796 0 obj <<
+14785 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.744 185.874 173.1 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.561) >>
 >> endobj
-14797 0 obj <<
+14786 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [159.683 172.324 178.039 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.595) >>
 >> endobj
-14798 0 obj <<
+14787 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [169.077 158.775 187.433 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.625) >>
 >> endobj
-14799 0 obj <<
+14788 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [176.865 145.226 195.221 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.579) >>
 >> endobj
-14800 0 obj <<
+14789 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.411 131.677 208.312 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.91) >>
 >> endobj
-14801 0 obj <<
+14790 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [222.683 117.522 241.04 130.423]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-14802 0 obj <<
+14791 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.688 646.546 407.044 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.286) >>
 >> endobj
-14803 0 obj <<
+14792 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [352.415 632.929 370.771 644.497]
 /Subtype /Link
 /A << /S /GoTo /D (page.154) >>
 >> endobj
-14804 0 obj <<
+14793 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [344.536 619.312 362.893 630.88]
 /Subtype /Link
 /A << /S /GoTo /D (page.693) >>
 >> endobj
-14805 0 obj <<
+14794 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [346.355 605.694 364.711 617.263]
 /Subtype /Link
 /A << /S /GoTo /D (page.402) >>
 >> endobj
-14806 0 obj <<
+14795 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [369.385 605.694 387.741 617.263]
 /Subtype /Link
 /A << /S /GoTo /D (page.403) >>
 >> endobj
-14807 0 obj <<
+14796 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.385 592.077 424.741 603.767]
 /Subtype /Link
 /A << /S /GoTo /D (page.158) >>
 >> endobj
-14808 0 obj <<
+14797 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [356.233 578.46 374.59 590.149]
 /Subtype /Link
 /A << /S /GoTo /D (page.382) >>
 >> endobj
-14809 0 obj <<
+14798 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [353.779 564.843 372.135 576.532]
 /Subtype /Link
 /A << /S /GoTo /D (page.381) >>
 >> endobj
-14810 0 obj <<
+14799 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [322.173 551.225 340.529 562.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.738) >>
 >> endobj
-14811 0 obj <<
+14800 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [339.748 537.608 358.105 549.297]
 /Subtype /Link
 /A << /S /GoTo /D (page.738) >>
 >> endobj
-14812 0 obj <<
+14801 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [342.718 523.991 361.074 535.559]
 /Subtype /Link
 /A << /S /GoTo /D (page.572) >>
 >> endobj
-14813 0 obj <<
+14802 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.052 510.373 436.408 522.063]
 /Subtype /Link
 /A << /S /GoTo /D (page.707) >>
 >> endobj
-14814 0 obj <<
+14803 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [390.749 496.756 409.105 508.446]
 /Subtype /Link
 /A << /S /GoTo /D (page.674) >>
 >> endobj
-14815 0 obj <<
+14804 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.839 483.139 407.196 494.828]
 /Subtype /Link
 /A << /S /GoTo /D (page.214) >>
 >> endobj
-14816 0 obj <<
+14805 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.506 469.521 403.862 481.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.723) >>
 >> endobj
-14817 0 obj <<
+14806 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [380.658 455.904 399.014 467.594]
 /Subtype /Link
 /A << /S /GoTo /D (page.697) >>
 >> endobj
-14818 0 obj <<
+14807 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.203 442.287 403.559 453.976]
 /Subtype /Link
 /A << /S /GoTo /D (page.552) >>
 >> endobj
-14819 0 obj <<
+14808 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [432.536 428.67 450.893 440.359]
 /Subtype /Link
 /A << /S /GoTo /D (page.168) >>
 >> endobj
-14820 0 obj <<
+14809 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.446 415.052 448.802 426.742]
 /Subtype /Link
 /A << /S /GoTo /D (page.723) >>
 >> endobj
-14821 0 obj <<
+14810 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.658 401.435 416.014 413.124]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-14822 0 obj <<
+14811 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.294 387.818 430.65 399.507]
 /Subtype /Link
 /A << /S /GoTo /D (page.698) >>
 >> endobj
-14823 0 obj <<
+14812 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [436.93 374.2 455.287 385.89]
 /Subtype /Link
 /A << /S /GoTo /D (page.697) >>
 >> endobj
-14824 0 obj <<
+14813 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.355 360.583 396.711 372.273]
 /Subtype /Link
 /A << /S /GoTo /D (page.697) >>
 >> endobj
-14825 0 obj <<
+14814 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.385 360.583 419.741 372.273]
 /Subtype /Link
 /A << /S /GoTo /D (page.698) >>
 >> endobj
-14826 0 obj <<
+14815 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [367.415 319.799 385.771 331.489]
 /Subtype /Link
 /A << /S /GoTo /D (page.552) >>
 >> endobj
-14827 0 obj <<
+14816 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.839 306.182 432.196 317.871]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-14828 0 obj <<
+14817 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.629 279.016 400.986 290.705]
 /Subtype /Link
 /A << /S /GoTo /D (page.134) >>
 >> endobj
-14829 0 obj <<
+14818 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.385 265.398 429.741 277.088]
 /Subtype /Link
 /A << /S /GoTo /D (page.158) >>
 >> endobj
-14830 0 obj <<
+14819 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [398.991 251.781 417.347 263.47]
 /Subtype /Link
 /A << /S /GoTo /D (page.349) >>
 >> endobj
-14831 0 obj <<
+14820 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.445 238.164 405.802 249.853]
 /Subtype /Link
 /A << /S /GoTo /D (page.810) >>
 >> endobj
-14832 0 obj <<
+14821 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.809 224.546 448.165 236.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-14833 0 obj <<
+14822 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [396.294 210.929 414.65 222.619]
 /Subtype /Link
 /A << /S /GoTo /D (page.132) >>
 >> endobj
-14834 0 obj <<
+14823 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.324 210.929 437.68 222.619]
 /Subtype /Link
 /A << /S /GoTo /D (page.178) >>
 >> endobj
-14835 0 obj <<
+14824 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [341.536 197.312 359.893 208.88]
 /Subtype /Link
 /A << /S /GoTo /D (page.691) >>
 >> endobj
-14836 0 obj <<
+14825 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.87 172.597 407.226 183.996]
 /Subtype /Link
 /A << /S /GoTo /D (page.163) >>
 >> endobj
-14837 0 obj <<
+14826 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.779 158.98 401.135 170.669]
 /Subtype /Link
 /A << /S /GoTo /D (page.666) >>
 >> endobj
-14838 0 obj <<
+14827 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [366.961 145.362 385.317 157.052]
 /Subtype /Link
 /A << /S /GoTo /D (page.398) >>
 >> endobj
-14839 0 obj <<
+14828 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [364.536 131.745 377.438 143.434]
 /Subtype /Link
 /A << /S /GoTo /D (page.68) >>
 >> endobj
-14840 0 obj <<
+14829 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.112 131.745 400.468 143.434]
 /Subtype /Link
 /A << /S /GoTo /D (page.666) >>
 >> endobj
-14841 0 obj <<
+14830 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [368.839 118.128 387.196 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.159) >>
 >> endobj
-14842 0 obj <<
+14831 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.87 118.128 410.226 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.162) >>
 >> endobj
-14847 0 obj <<
-/D [14845 0 R /XYZ 100.892 685.529 null]
+14836 0 obj <<
+/D [14834 0 R /XYZ 100.892 685.529 null]
 >> endobj
-14844 0 obj <<
+14833 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-14968 0 obj <<
+14957 0 obj <<
 /Length 1408      
 /Filter /FlateDecode
 >>
@@ -89317,841 +93053,841 @@
 %(¿	s¶b§¦·iÇça}l»²©gҁ‰H„YjìÉý÷ˆšþqmåð¥ç–‡×'Æ#¯‡Äê´êÿÕ|›¸á“}öؾŸ éTNãîÖ‹g¦Ï±
 endstream
 endobj
-14967 0 obj <<
+14956 0 obj <<
 /Type /Page
-/Contents 14968 0 R
-/Resources 14966 0 R
+/Contents 14957 0 R
+/Resources 14955 0 R
 /MediaBox [0 0 612 792]
-/Parent 14970 0 R
-/Annots [ 14843 0 R 14848 0 R 14849 0 R 14850 0 R 14851 0 R 14852 0 R 14853 0 R 14854 0 R 14855 0 R 14856 0 R 14857 0 R 14858 0 R 14859 0 R 14860 0 R 14861 0 R 14862 0 R 14863 0 R 14864 0 R 14865 0 R 14866 0 R 14867 0 R 14868 0 R 14869 0 R 14870 0 R 14871 0 R 14872 0 R 14873 0 R 14874 0 R 14875 0 R 14876 0 R 14877 0 R 14878 0 R 14879 0 R 14880 0 R 14881 0 R 14882 0 R 14883 0 R 14884 0 R 14885 0 R 14886 0 R 14887 0 R 14888 0 R 14889 0 R 14890 0 R 14891 0 R 14892 0 R 14893 0 R 14894 0 R 14895 0 R 14896 0 R 14897 0 R 14898 0 R 14899 0 R 14900 0 R 14901 0 R 14902 0 R 14903 0 R 14904 0 R 14905 0 R 14906 0 R 14907 0 R 14908 0 R 14909 0 R 14910 0 R 14911 0 R 14912 0 R 14913 0 R 14914 0 R 14915 0 R 14916 0 R 14917 0 R 14918 0 R 14919 0 R 14920 0 R 14921 0 R 14922 0 R 14923 0 R 14924 0 R 14925 0 R 14926 0 R 14927 0 R 14928 0 R 14929 0 R 14930 0 R 14931 0 R 14932 0 R 14933 0 R 14934 0 R 14935 0 R 14936 0 R 14937 0 R 14938 0 R 14939 0 R 14940 0 R 14941 0 R 14942 0 R 14943 0 R 14944 0 R 14945 0 R 14946 0 R 14947 0 R 14948 0 R 14949 0 R 14950 0 R 14951 0 R 14952 0 R 14953 0 R 14954 0 R 14955 0 R 14956 0 R 14957 0 R 14958 0 R 14959 0 R 14960 0 R 14961 0 R 14962 0 R 14963 0 R ]
+/Parent 14959 0 R
+/Annots [ 14832 0 R 14837 0 R 14838 0 R 14839 0 R 14840 0 R 14841 0 R 14842 0 R 14843 0 R 14844 0 R 14845 0 R 14846 0 R 14847 0 R 14848 0 R 14849 0 R 14850 0 R 14851 0 R 14852 0 R 14853 0 R 14854 0 R 14855 0 R 14856 0 R 14857 0 R 14858 0 R 14859 0 R 14860 0 R 14861 0 R 14862 0 R 14863 0 R 14864 0 R 14865 0 R 14866 0 R 14867 0 R 14868 0 R 14869 0 R 14870 0 R 14871 0 R 14872 0 R 14873 0 R 14874 0 R 14875 0 R 14876 0 R 14877 0 R 14878 0 R 14879 0 R 14880 0 R 14881 0 R 14882 0 R 14883 0 R 14884 0 R 14885 0 R 14886 0 R 14887 0 R 14888 0 R 14889 0 R 14890 0 R 14891 0 R 14892 0 R 14893 0 R 14894 0 R 14895 0 R 14896 0 R 14897 0 R 14898 0 R 14899 0 R 14900 0 R 14901 0 R 14902 0 R 14903 0 R 14904 0 R 14905 0 R 14906 0 R 14907 0 R 14908 0 R 14909 0 R 14910 0 R 14911 0 R 14912 0 R 14913 0 R 14914 0 R 14915 0 R 14916 0 R 14917 0 R 14918 0 R 14919 0 R 14920 0 R 14921 0 R 14922 0 R 14923 0 R 14924 0 R 14925 0 R 14926 0 R 14927 0 R 14928 0 R 14929 0 R 14930 0 R 14931 0 R 14932 0 R 14933 0 R 14934 0 R 14935 0 R 14936 0 R 14937 0 R 14938 0 R 14939 0 R 14940 0 R 14941 0 R 14942 0 R 14943 0 R 14944 0 R 14945 0 R 14946 0 R 14947 0 R 14948 0 R 14949 0 R 14950 0 R 14951 0 R 14952 0 R ]
 >> endobj
-14843 0 obj <<
+14832 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.129 646.546 254.031 657.946]
 /Subtype /Link
 /A << /S /GoTo /D (page.92) >>
 >> endobj
-14848 0 obj <<
+14837 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [231.038 632.997 249.394 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.155) >>
 >> endobj
-14849 0 obj <<
+14838 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [253.099 632.997 271.455 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-14850 0 obj <<
+14839 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [275.16 632.997 293.516 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.163) >>
 >> endobj
-14851 0 obj <<
+14840 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [297.22 632.997 315.576 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.176) >>
 >> endobj
-14852 0 obj <<
+14841 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 619.448 208.912 630.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.183) >>
 >> endobj
-14853 0 obj <<
+14842 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.586 619.448 231.942 630.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.661) >>
 >> endobj
-14854 0 obj <<
+14843 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.616 619.448 254.972 630.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.744) >>
 >> endobj
-14855 0 obj <<
+14844 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.586 592.35 242.942 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.162) >>
 >> endobj
-14856 0 obj <<
+14845 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [247.22 578.8 265.576 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-14857 0 obj <<
+14846 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [270.25 578.8 288.607 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.176) >>
 >> endobj
-14858 0 obj <<
+14847 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [235.099 551.702 253.455 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.171) >>
 >> endobj
-14859 0 obj <<
+14848 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [207.662 538.153 226.019 549.297]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-14860 0 obj <<
+14849 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.693 538.153 249.049 549.297]
 /Subtype /Link
 /A << /S /GoTo /D (page.175) >>
 >> endobj
-14861 0 obj <<
+14850 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [211.099 524.604 229.455 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.174) >>
 >> endobj
-14862 0 obj <<
+14851 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.978 511.054 235.334 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.315) >>
 >> endobj
-14863 0 obj <<
+14852 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.372 497.505 235.728 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.685) >>
 >> endobj
-14864 0 obj <<
+14853 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.311 483.956 241.213 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.69) >>
 >> endobj
-14865 0 obj <<
+14854 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [245.887 483.956 258.788 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.99) >>
 >> endobj
-14866 0 obj <<
+14855 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.856 470.407 228.758 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.51) >>
 >> endobj
-14867 0 obj <<
+14856 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [233.432 470.407 251.788 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.572) >>
 >> endobj
-14868 0 obj <<
+14857 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [181.159 456.858 199.516 468.426]
 /Subtype /Link
 /A << /S /GoTo /D (page.665) >>
 >> endobj
-14869 0 obj <<
+14858 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.675 443.308 210.031 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.118) >>
 >> endobj
-14870 0 obj <<
+14859 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [214.705 443.308 233.061 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.666) >>
 >> endobj
-14871 0 obj <<
+14860 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.766 429.759 251.122 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.306) >>
 >> endobj
-14872 0 obj <<
+14861 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.008 416.21 219.364 427.609]
 /Subtype /Link
 /A << /S /GoTo /D (page.195) >>
 >> endobj
-14873 0 obj <<
+14862 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [266.856 402.661 285.213 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.674) >>
 >> endobj
-14874 0 obj <<
+14863 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.675 389.112 237.031 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-14875 0 obj <<
+14864 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [266.053 375.562 284.41 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-14876 0 obj <<
+14865 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [222.978 362.013 241.334 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.236) >>
 >> endobj
-14877 0 obj <<
+14866 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.008 362.013 264.364 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.237) >>
 >> endobj
-14878 0 obj <<
+14867 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [180.856 348.464 199.213 360.032]
 /Subtype /Link
 /A << /S /GoTo /D (page.611) >>
 >> endobj
-14879 0 obj <<
+14868 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [172.523 334.915 190.879 346.059]
 /Subtype /Link
 /A << /S /GoTo /D (page.200) >>
 >> endobj
-14880 0 obj <<
+14869 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.553 334.915 213.91 346.059]
 /Subtype /Link
 /A << /S /GoTo /D (page.231) >>
 >> endobj
-14881 0 obj <<
+14870 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.584 334.915 236.94 346.059]
 /Subtype /Link
 /A << /S /GoTo /D (page.245) >>
 >> endobj
-14882 0 obj <<
+14871 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [240.402 334.915 258.758 346.059]
 /Subtype /Link
 /A << /S /GoTo /D (page.247) >>
 >> endobj
-14883 0 obj <<
+14872 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [263.432 334.915 281.788 346.059]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-14884 0 obj <<
+14873 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.115 321.366 211.471 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.247) >>
 >> endobj
-14885 0 obj <<
+14874 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.138 307.816 223.494 319.216]
 /Subtype /Link
 /A << /S /GoTo /D (page.109) >>
 >> endobj
-14886 0 obj <<
+14875 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.169 307.816 246.525 319.216]
 /Subtype /Link
 /A << /S /GoTo /D (page.115) >>
 >> endobj
-14887 0 obj <<
+14876 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [251.199 307.816 269.555 319.216]
 /Subtype /Link
 /A << /S /GoTo /D (page.266) >>
 >> endobj
-14888 0 obj <<
+14877 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [274.229 307.816 292.585 319.216]
 /Subtype /Link
 /A << /S /GoTo /D (page.293) >>
 >> endobj
-14889 0 obj <<
+14878 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.593 294.267 228.949 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.267) >>
 >> endobj
-14890 0 obj <<
+14879 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.259 280.718 259.616 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.281) >>
 >> endobj
-14891 0 obj <<
+14880 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [257.987 267.169 276.343 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.282) >>
 >> endobj
-14892 0 obj <<
+14881 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [257.047 253.62 275.404 265.019]
 /Subtype /Link
 /A << /S /GoTo /D (page.282) >>
 >> endobj
-14893 0 obj <<
+14882 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [252.866 240.07 271.222 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.282) >>
 >> endobj
-14894 0 obj <<
+14883 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.866 226.521 234.222 237.665]
 /Subtype /Link
 /A << /S /GoTo /D (page.267) >>
 >> endobj
-14895 0 obj <<
+14884 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [222.775 212.972 241.131 224.371]
 /Subtype /Link
 /A << /S /GoTo /D (page.265) >>
 >> endobj
-14896 0 obj <<
+14885 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.357 199.423 245.714 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-14897 0 obj <<
+14886 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [250.388 199.423 268.744 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-14898 0 obj <<
+14887 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.418 199.423 291.774 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.717) >>
 >> endobj
-14899 0 obj <<
+14888 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.296 185.874 239.198 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.33) >>
 >> endobj
-14900 0 obj <<
+14889 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.962 185.874 263.319 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-14901 0 obj <<
+14890 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [269.083 185.874 287.439 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.232) >>
 >> endobj
-14902 0 obj <<
+14891 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.204 185.874 311.56 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.234) >>
 >> endobj
-14903 0 obj <<
+14892 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 172.324 208.912 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.240) >>
 >> endobj
-14904 0 obj <<
+14893 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.586 172.324 231.942 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.726) >>
 >> endobj
-14905 0 obj <<
+14894 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.835 158.775 223.191 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.250) >>
 >> endobj
-14906 0 obj <<
+14895 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.138 145.226 233.494 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.250) >>
 >> endobj
-14907 0 obj <<
+14896 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.866 131.677 220.222 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.240) >>
 >> endobj
-14908 0 obj <<
+14897 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.896 131.677 243.252 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.250) >>
 >> endobj
-14909 0 obj <<
+14898 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.381 118.128 237.737 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.250) >>
 >> endobj
-14910 0 obj <<
+14899 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.483 646.546 441.839 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-14911 0 obj <<
+14900 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [389.847 632.997 408.203 644.141]
 /Subtype /Link
 /A << /S /GoTo /D (page.247) >>
 >> endobj
-14912 0 obj <<
+14901 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.325 619.448 434.681 630.847]
 /Subtype /Link
 /A << /S /GoTo /D (page.281) >>
 >> endobj
-14913 0 obj <<
+14902 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [389.544 605.899 402.445 617.043]
 /Subtype /Link
 /A << /S /GoTo /D (page.28) >>
 >> endobj
-14914 0 obj <<
+14903 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.12 605.899 420.021 617.043]
 /Subtype /Link
 /A << /S /GoTo /D (page.49) >>
 >> endobj
-14915 0 obj <<
+14904 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.695 605.899 437.597 617.043]
 /Subtype /Link
 /A << /S /GoTo /D (page.86) >>
 >> endobj
-14916 0 obj <<
+14905 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.271 605.899 460.627 617.043]
 /Subtype /Link
 /A << /S /GoTo /D (page.247) >>
 >> endobj
-14917 0 obj <<
+14906 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.961 592.35 424.863 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.93) >>
 >> endobj
-14918 0 obj <<
+14907 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.537 592.35 447.893 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.271) >>
 >> endobj
-14919 0 obj <<
+14908 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.325 578.8 429.681 589.944]
 /Subtype /Link
 /A << /S /GoTo /D (page.237) >>
 >> endobj
-14920 0 obj <<
+14909 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [434.355 578.8 452.711 589.944]
 /Subtype /Link
 /A << /S /GoTo /D (page.248) >>
 >> endobj
-14921 0 obj <<
+14910 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [432.537 565.251 450.893 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.249) >>
 >> endobj
-14922 0 obj <<
+14911 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [455.567 551.702 473.923 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.254) >>
 >> endobj
-14923 0 obj <<
+14912 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [478.597 551.702 496.954 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.257) >>
 >> endobj
-14924 0 obj <<
+14913 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.84 538.153 461.196 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.252) >>
 >> endobj
-14925 0 obj <<
+14914 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [451.931 524.604 470.287 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.254) >>
 >> endobj
-14926 0 obj <<
+14915 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.567 511.054 447.923 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.248) >>
 >> endobj
-14927 0 obj <<
+14916 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [457.476 497.505 475.832 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.255) >>
 >> endobj
-14928 0 obj <<
+14917 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [449.537 483.956 467.893 495.1]
 /Subtype /Link
 /A << /S /GoTo /D (page.253) >>
 >> endobj
-14929 0 obj <<
+14918 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.9 470.407 420.257 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.283) >>
 >> endobj
-14930 0 obj <<
+14919 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.931 470.407 443.287 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.624) >>
 >> endobj
-14931 0 obj <<
+14920 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.18 456.858 415.082 468.257]
 /Subtype /Link
 /A << /S /GoTo /D (page.50) >>
 >> endobj
-14932 0 obj <<
+14921 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.036 456.858 438.392 468.257]
 /Subtype /Link
 /A << /S /GoTo /D (page.109) >>
 >> endobj
-14933 0 obj <<
+14922 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.346 456.858 461.702 468.257]
 /Subtype /Link
 /A << /S /GoTo /D (page.265) >>
 >> endobj
-14934 0 obj <<
+14923 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [466.656 456.858 485.012 468.257]
 /Subtype /Link
 /A << /S /GoTo /D (page.579) >>
 >> endobj
-14935 0 obj <<
+14924 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 456.858 508.322 468.257]
 /Subtype /Link
 /A << /S /GoTo /D (page.580) >>
 >> endobj
-14936 0 obj <<
+14925 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 445.43 405.674 454.452]
 /Subtype /Link
 /A << /S /GoTo /D (page.726) >>
 >> endobj
-14937 0 obj <<
+14926 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.809 429.759 441.166 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.266) >>
 >> endobj
-14938 0 obj <<
+14927 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.749 416.21 462.105 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.266) >>
 >> endobj
-14939 0 obj <<
+14928 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [398.628 402.661 416.984 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.305) >>
 >> endobj
-14940 0 obj <<
+14929 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [492.416 389.112 510.772 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.280) >>
 >> endobj
-14941 0 obj <<
+14930 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [486.628 375.562 504.984 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.280) >>
 >> endobj
-14942 0 obj <<
+14931 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [493.567 362.013 511.923 373.413]
 /Subtype /Link
 /A << /S /GoTo /D (page.280) >>
 >> endobj
-14943 0 obj <<
+14932 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [492.996 348.464 511.352 359.863]
 /Subtype /Link
 /A << /S /GoTo /D (page.280) >>
 >> endobj
-14944 0 obj <<
+14933 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [493.264 334.915 511.62 346.314]
 /Subtype /Link
 /A << /S /GoTo /D (page.280) >>
 >> endobj
-14945 0 obj <<
+14934 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [469.628 321.366 487.984 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.275) >>
 >> endobj
-14946 0 obj <<
+14935 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.9 307.816 458.257 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.263) >>
 >> endobj
-14947 0 obj <<
+14936 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [462.931 307.816 481.287 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.306) >>
 >> endobj
-14948 0 obj <<
+14937 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.325 294.267 447.681 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.262) >>
 >> endobj
-14949 0 obj <<
+14938 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [473.931 280.718 492.287 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.263) >>
 >> endobj
-14950 0 obj <<
+14939 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.173 267.169 448.529 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.272) >>
 >> endobj
-14951 0 obj <<
+14940 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [440.476 253.62 458.832 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.273) >>
 >> endobj
-14952 0 obj <<
+14941 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [448.991 240.07 467.348 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.275) >>
 >> endobj
-14953 0 obj <<
+14942 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.143 226.521 482.499 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.278) >>
 >> endobj
-14954 0 obj <<
+14943 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [470.87 212.972 489.226 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.277) >>
 >> endobj
-14955 0 obj <<
+14944 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [488.779 199.423 507.135 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.278) >>
 >> endobj
-14956 0 obj <<
+14945 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.537 185.874 437.893 197.273]
 /Subtype /Link
 /A << /S /GoTo /D (page.265) >>
 >> endobj
-14957 0 obj <<
+14946 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [448.961 172.324 467.317 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.268) >>
 >> endobj
-14958 0 obj <<
+14947 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [470.813 158.775 489.169 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.269) >>
 >> endobj
-14959 0 obj <<
+14948 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [492.996 158.775 511.352 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.377) >>
 >> endobj
-14960 0 obj <<
+14949 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [445.991 145.226 464.348 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.267) >>
 >> endobj
-14961 0 obj <<
+14950 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [469.022 145.226 487.378 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.268) >>
 >> endobj
-14962 0 obj <<
+14951 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [461.719 131.677 480.075 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-14963 0 obj <<
+14952 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.719 118.128 443.075 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.259) >>
 >> endobj
-14969 0 obj <<
-/D [14967 0 R /XYZ 151.701 685.529 null]
+14958 0 obj <<
+/D [14956 0 R /XYZ 151.701 685.529 null]
 >> endobj
-14966 0 obj <<
+14955 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-15079 0 obj <<
+15068 0 obj <<
 /Length 1377      
 /Filter /FlateDecode
 >>
@@ -90167,771 +93903,771 @@
 ì•g¾—Ú+{i«×´VÝû`ßæÒ7Ú®²©-æfocý+ýݵóÖÙÞ¼TE ãö¶iÚÝWÞå*Ê-ùÌ?Þlè|M9SE™±\ìwÛΊ4Èq¼U qÑÈé²ÈÌÂ>ÀÃ_Mç‹ÉMc9Ó
 endstream
 endobj
-15078 0 obj <<
+15067 0 obj <<
 /Type /Page
-/Contents 15079 0 R
-/Resources 15077 0 R
+/Contents 15068 0 R
+/Resources 15066 0 R
 /MediaBox [0 0 612 792]
-/Parent 14970 0 R
-/Annots [ 14964 0 R 14965 0 R 14971 0 R 14972 0 R 14973 0 R 14974 0 R 14975 0 R 14976 0 R 14977 0 R 14978 0 R 14979 0 R 14980 0 R 14981 0 R 14982 0 R 14983 0 R 14984 0 R 14985 0 R 14986 0 R 14987 0 R 14988 0 R 14989 0 R 14990 0 R 14991 0 R 14992 0 R 14993 0 R 14994 0 R 14995 0 R 14996 0 R 14997 0 R 14998 0 R 14999 0 R 15000 0 R 15001 0 R 15002 0 R 15003 0 R 15004 0 R 15005 0 R 15006 0 R 15007 0 R 15008 0 R 15009 0 R 15010 0 R 15011 0 R 15012 0 R 15013 0 R 15014 0 R 15015 0 R 15016 0 R 15017 0 R 15018 0 R 15019 0 R 15020 0 R 15021 0 R 15022 0 R 15023 0 R 15024 0 R 15025 0 R 15026 0 R 15027 0 R 15028 0 R 15029 0 R 15030 0 R 15031 0 R 15032 0 R 15033 0 R 15034 0 R 15035 0 R 15036 0 R 15037 0 R 15038 0 R 15039 0 R 15040 0 R 15041 0 R 15042 0 R 15043 0 R 15044 0 R 15045 0 R 15046 0 R 15047 0 R 15048 0 R 15049 0 R 15050 0 R 15051 0 R 15052 0 R 15053 0 R 15054 0 R 15055 0 R 15056 0 R 15057 0 R 15058 0 R 15059 0 R 15060 0 R 15061 0 R 15062 0 R 15063 0 R 15064 0 R 15065 0 R 15066 0 R 15067 0 R 15068 0 R 15069 0 R 15070 0 R 15071 0 R 15072 0 R 15073 0 R 15074 0 R 15075 0 R ]
+/Parent 14959 0 R
+/Annots [ 14953 0 R 14954 0 R 14960 0 R 14961 0 R 14962 0 R 14963 0 R 14964 0 R 14965 0 R 14966 0 R 14967 0 R 14968 0 R 14969 0 R 14970 0 R 14971 0 R 14972 0 R 14973 0 R 14974 0 R 14975 0 R 14976 0 R 14977 0 R 14978 0 R 14979 0 R 14980 0 R 14981 0 R 14982 0 R 14983 0 R 14984 0 R 14985 0 R 14986 0 R 14987 0 R 14988 0 R 14989 0 R 14990 0 R 14991 0 R 14992 0 R 14993 0 R 14994 0 R 14995 0 R 14996 0 R 14997 0 R 14998 0 R 14999 0 R 15000 0 R 15001 0 R 15002 0 R 15003 0 R 15004 0 R 15005 0 R 15006 0 R 15007 0 R 15008 0 R 15009 0 R 15010 0 R 15011 0 R 15012 0 R 15013 0 R 15014 0 R 15015 0 R 15016 0 R 15017 0 R 15018 0 R 15019 0 R 15020 0 R 15021 0 R 15022 0 R 15023 0 R 15024 0 R 15025 0 R 15026 0 R 15027 0 R 15028 0 R 15029 0 R 15030 0 R 15031 0 R 15032 0 R 15033 0 R 15034 0 R 15035 0 R 15036 0 R 15037 0 R 15038 0 R 15039 0 R 15040 0 R 15041 0 R 15042 0 R 15043 0 R 15044 0 R 15045 0 R 15046 0 R 15047 0 R 15048 0 R 15049 0 R 15050 0 R 15051 0 R 15052 0 R 15053 0 R 15054 0 R 15055 0 R 15056 0 R 15057 0 R 15058 0 R 15059 0 R 15060 0 R 15061 0 R 15062 0 R 15063 0 R 15064 0 R ]
 >> endobj
-14964 0 obj <<
+14953 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [187.45 646.546 205.806 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.260) >>
 >> endobj
-14965 0 obj <<
+14954 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.48 646.546 228.837 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.267) >>
 >> endobj
-14971 0 obj <<
+14960 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.45 632.621 195.806 644.31]
 /Subtype /Link
 /A << /S /GoTo /D (page.260) >>
 >> endobj
-14972 0 obj <<
+14961 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [203.056 618.695 221.412 630.385]
 /Subtype /Link
 /A << /S /GoTo /D (page.259) >>
 >> endobj
-14973 0 obj <<
+14962 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [194.147 604.77 212.503 615.914]
 /Subtype /Link
 /A << /S /GoTo /D (page.260) >>
 >> endobj
-14974 0 obj <<
+14963 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [174.359 590.844 192.715 602.244]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-14975 0 obj <<
+14964 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.389 590.844 215.746 602.244]
 /Subtype /Link
 /A << /S /GoTo /D (page.273) >>
 >> endobj
-14976 0 obj <<
+14965 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.42 590.844 238.776 602.244]
 /Subtype /Link
 /A << /S /GoTo /D (page.726) >>
 >> endobj
-14977 0 obj <<
+14966 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [175.396 576.918 193.753 588.608]
 /Subtype /Link
 /A << /S /GoTo /D (page.271) >>
 >> endobj
-14978 0 obj <<
+14967 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [147.699 562.993 166.056 574.392]
 /Subtype /Link
 /A << /S /GoTo /D (page.284) >>
 >> endobj
-14979 0 obj <<
+14968 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [149.844 549.067 168.2 560.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.284) >>
 >> endobj
-14980 0 obj <<
+14969 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [168.995 535.142 187.352 546.286]
 /Subtype /Link
 /A << /S /GoTo /D (page.284) >>
 >> endobj
-14981 0 obj <<
+14970 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.662 521.216 176.018 532.36]
 /Subtype /Link
 /A << /S /GoTo /D (page.284) >>
 >> endobj
-14982 0 obj <<
+14971 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [141.699 507.291 160.056 518.435]
 /Subtype /Link
 /A << /S /GoTo /D (page.116) >>
 >> endobj
-14983 0 obj <<
+14972 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.411 493.365 189.767 505.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.707) >>
 >> endobj
-14984 0 obj <<
+14973 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [175.411 479.44 193.767 491.129]
 /Subtype /Link
 /A << /S /GoTo /D (page.309) >>
 >> endobj
-14985 0 obj <<
+14974 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.259 465.514 191.615 476.658]
 /Subtype /Link
 /A << /S /GoTo /D (page.718) >>
 >> endobj
-14986 0 obj <<
+14975 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.168 451.588 203.524 463.278]
 /Subtype /Link
 /A << /S /GoTo /D (page.307) >>
 >> endobj
-14987 0 obj <<
+14976 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [143.835 437.663 162.191 449.352]
 /Subtype /Link
 /A << /S /GoTo /D (page.717) >>
 >> endobj
-14988 0 obj <<
+14977 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [140.562 423.737 158.918 434.881]
 /Subtype /Link
 /A << /S /GoTo /D (page.433) >>
 >> endobj
-14989 0 obj <<
+14978 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [175.108 409.206 193.464 422.107]
 /Subtype /Link
 /A << /S /GoTo /D (page.615) >>
 >> endobj
-14990 0 obj <<
+14979 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [166.017 395.886 184.373 407.576]
 /Subtype /Link
 /A << /S /GoTo /D (page.507) >>
 >> endobj
-14991 0 obj <<
+14980 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [146.865 381.961 165.221 393.36]
 /Subtype /Link
 /A << /S /GoTo /D (page.395) >>
 >> endobj
-14992 0 obj <<
+14981 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [169.895 381.961 188.252 393.36]
 /Subtype /Link
 /A << /S /GoTo /D (page.749) >>
 >> endobj
-14993 0 obj <<
+14982 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.198 368.035 168.555 379.725]
 /Subtype /Link
 /A << /S /GoTo /D (page.678) >>
 >> endobj
-14994 0 obj <<
+14983 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [147.774 354.109 166.13 365.799]
 /Subtype /Link
 /A << /S /GoTo /D (page.785) >>
 >> endobj
-14995 0 obj <<
+14984 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [145.653 340.184 164.009 351.873]
 /Subtype /Link
 /A << /S /GoTo /D (page.558) >>
 >> endobj
-14996 0 obj <<
+14985 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [151.108 326.258 169.464 337.827]
 /Subtype /Link
 /A << /S /GoTo /D (page.659) >>
 >> endobj
-14997 0 obj <<
+14986 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [149.85 312.333 162.751 323.901]
 /Subtype /Link
 /A << /S /GoTo /D (page.48) >>
 >> endobj
-14998 0 obj <<
+14987 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [167.268 312.333 180.169 323.901]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-14999 0 obj <<
+14988 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.686 312.333 197.587 323.901]
 /Subtype /Link
 /A << /S /GoTo /D (page.92) >>
 >> endobj
-15000 0 obj <<
+14989 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [202.104 312.333 215.005 323.901]
 /Subtype /Link
 /A << /S /GoTo /D (page.95) >>
 >> endobj
-15001 0 obj <<
+14990 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.522 312.333 237.878 323.901]
 /Subtype /Link
 /A << /S /GoTo /D (page.154) >>
 >> endobj
-15002 0 obj <<
+14991 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 312.333 260.751 323.901]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-15003 0 obj <<
+14992 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 298.784 158.102 309.928]
 /Subtype /Link
 /A << /S /GoTo /D (page.159) >>
 >> endobj
-15004 0 obj <<
+14993 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 298.784 181.132 309.928]
 /Subtype /Link
 /A << /S /GoTo /D (page.176) >>
 >> endobj
-15005 0 obj <<
+14994 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.807 298.784 204.163 309.928]
 /Subtype /Link
 /A << /S /GoTo /D (page.659) >>
 >> endobj
-15006 0 obj <<
+14995 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.837 298.784 227.193 309.928]
 /Subtype /Link
 /A << /S /GoTo /D (page.664) >>
 >> endobj
-15007 0 obj <<
+14996 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.655 298.784 249.011 309.928]
 /Subtype /Link
 /A << /S /GoTo /D (page.666) >>
 >> endobj
-15008 0 obj <<
+14997 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [178.396 284.858 191.298 296.548]
 /Subtype /Link
 /A << /S /GoTo /D (page.72) >>
 >> endobj
-15009 0 obj <<
+14998 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [151.942 270.932 164.844 282.076]
 /Subtype /Link
 /A << /S /GoTo /D (page.48) >>
 >> endobj
-15010 0 obj <<
+14999 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [165.471 257.007 183.827 268.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-15011 0 obj <<
+15000 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [174.623 243.081 192.979 254.771]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-15012 0 obj <<
+15001 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.835 229.156 218.191 240.845]
 /Subtype /Link
 /A << /S /GoTo /D (page.109) >>
 >> endobj
-15013 0 obj <<
+15002 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.532 215.23 210.888 226.92]
 /Subtype /Link
 /A << /S /GoTo /D (page.155) >>
 >> endobj
-15014 0 obj <<
+15003 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [174.956 201.305 193.312 212.994]
 /Subtype /Link
 /A << /S /GoTo /D (page.174) >>
 >> endobj
-15015 0 obj <<
+15004 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [178.975 187.379 191.877 198.947]
 /Subtype /Link
 /A << /S /GoTo /D (page.79) >>
 >> endobj
-15016 0 obj <<
+15005 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.478 187.379 214.835 198.947]
 /Subtype /Link
 /A << /S /GoTo /D (page.103) >>
 >> endobj
-15017 0 obj <<
+15006 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.436 187.379 237.793 198.947]
 /Subtype /Link
 /A << /S /GoTo /D (page.104) >>
 >> endobj
-15018 0 obj <<
+15007 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 187.379 260.751 198.947]
 /Subtype /Link
 /A << /S /GoTo /D (page.109) >>
 >> endobj
-15019 0 obj <<
+15008 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 173.83 158.102 184.974]
 /Subtype /Link
 /A << /S /GoTo /D (page.664) >>
 >> endobj
-15020 0 obj <<
+15009 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 173.83 181.132 184.974]
 /Subtype /Link
 /A << /S /GoTo /D (page.665) >>
 >> endobj
-15021 0 obj <<
+15010 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.807 173.83 204.163 184.974]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-15022 0 obj <<
+15011 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [169.653 159.904 188.009 171.594]
 /Subtype /Link
 /A << /S /GoTo /D (page.698) >>
 >> endobj
-15023 0 obj <<
+15012 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.683 159.904 211.04 171.594]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-15024 0 obj <<
+15013 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.532 145.979 226.888 157.668]
 /Subtype /Link
 /A << /S /GoTo /D (page.118) >>
 >> endobj
-15025 0 obj <<
+15014 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [231.562 145.979 249.918 157.668]
 /Subtype /Link
 /A << /S /GoTo /D (page.183) >>
 >> endobj
-15026 0 obj <<
+15015 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.471 132.053 230.827 143.743]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-15027 0 obj <<
+15016 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [229.532 118.128 247.888 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.183) >>
 >> endobj
-15028 0 obj <<
+15017 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.446 619.448 418.802 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.163) >>
 >> endobj
-15029 0 obj <<
+15018 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [380.203 605.899 398.559 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.175) >>
 >> endobj
-15030 0 obj <<
+15019 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.233 605.899 421.59 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.663) >>
 >> endobj
-15031 0 obj <<
+15020 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [432.627 592.35 450.984 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.175) >>
 >> endobj
-15032 0 obj <<
+15021 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.9 578.8 421.256 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.154) >>
 >> endobj
-15033 0 obj <<
+15022 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.177 564.645 433.533 577.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.154) >>
 >> endobj
-15034 0 obj <<
+15023 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 564.645 457.513 577.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.155) >>
 >> endobj
-15035 0 obj <<
+15024 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 551.702 354.864 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.159) >>
 >> endobj
-15036 0 obj <<
+15025 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.538 551.702 377.895 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.176) >>
 >> endobj
-15037 0 obj <<
+15026 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.569 551.702 400.925 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.179) >>
 >> endobj
-15038 0 obj <<
+15027 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.599 551.702 423.955 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.660) >>
 >> endobj
-15039 0 obj <<
+15028 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 526.725 354.864 535.748]
 /Subtype /Link
 /A << /S /GoTo /D (page.185) >>
 >> endobj
-15040 0 obj <<
+15029 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [366.93 511.054 385.287 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.159) >>
 >> endobj
-15041 0 obj <<
+15030 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [389.961 511.054 408.317 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-15042 0 obj <<
+15031 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.355 497.505 412.711 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-15043 0 obj <<
+15032 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 472.528 354.864 481.551]
 /Subtype /Link
 /A << /S /GoTo /D (page.158) >>
 >> endobj
-15044 0 obj <<
+15033 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.203 456.858 354.559 468.426]
 /Subtype /Link
 /A << /S /GoTo /D (page.665) >>
 >> endobj
-15045 0 obj <<
+15034 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [366.127 443.308 379.029 454.877]
 /Subtype /Link
 /A << /S /GoTo /D (page.72) >>
 >> endobj
-15046 0 obj <<
+15035 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.733 443.308 395.635 454.877]
 /Subtype /Link
 /A << /S /GoTo /D (page.74) >>
 >> endobj
-15047 0 obj <<
+15036 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.339 443.308 417.696 454.877]
 /Subtype /Link
 /A << /S /GoTo /D (page.604) >>
 >> endobj
-15048 0 obj <<
+15037 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [421.4 443.308 439.756 454.877]
 /Subtype /Link
 /A << /S /GoTo /D (page.607) >>
 >> endobj
-15049 0 obj <<
+15038 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.461 443.308 461.817 454.877]
 /Subtype /Link
 /A << /S /GoTo /D (page.609) >>
 >> endobj
-15050 0 obj <<
+15039 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 429.759 354.864 440.903]
 /Subtype /Link
 /A << /S /GoTo /D (page.629) >>
 >> endobj
-15051 0 obj <<
+15040 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.538 429.759 377.895 440.903]
 /Subtype /Link
 /A << /S /GoTo /D (page.631) >>
 >> endobj
-15052 0 obj <<
+15041 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [346.052 416.21 358.953 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.86) >>
 >> endobj
-15053 0 obj <<
+15042 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [343.93 402.661 356.832 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.68) >>
 >> endobj
-15054 0 obj <<
+15043 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.385 389.112 403.741 400.68]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-15055 0 obj <<
+15044 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [372.506 375.562 385.408 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.94) >>
 >> endobj
-15056 0 obj <<
+15045 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [390.082 375.562 408.438 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.725) >>
 >> endobj
-15057 0 obj <<
+15046 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [341.203 362.013 359.559 373.581]
 /Subtype /Link
 /A << /S /GoTo /D (page.754) >>
 >> endobj
-15058 0 obj <<
+15047 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [344.233 348.464 362.59 360.032]
 /Subtype /Link
 /A << /S /GoTo /D (page.755) >>
 >> endobj
-15059 0 obj <<
+15048 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [357.567 334.915 375.923 346.059]
 /Subtype /Link
 /A << /S /GoTo /D (page.619) >>
 >> endobj
-15060 0 obj <<
+15049 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [374.082 321.366 392.438 332.934]
 /Subtype /Link
 /A << /S /GoTo /D (page.614) >>
 >> endobj
-15061 0 obj <<
+15050 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [435.839 307.816 454.196 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.217) >>
 >> endobj
-15062 0 obj <<
+15051 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [384.142 294.267 402.499 305.835]
 /Subtype /Link
 /A << /S /GoTo /D (page.181) >>
 >> endobj
-15063 0 obj <<
+15052 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.642 280.718 391.544 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.78) >>
 >> endobj
-15064 0 obj <<
+15053 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [396.218 280.718 414.574 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.614) >>
 >> endobj
-15065 0 obj <<
+15054 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [345.476 267.169 363.832 278.737]
 /Subtype /Link
 /A << /S /GoTo /D (page.665) >>
 >> endobj
-15066 0 obj <<
+15055 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.961 253.62 404.317 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-15067 0 obj <<
+15056 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 228.642 354.864 237.665]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-15068 0 obj <<
+15057 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.415 212.972 415.317 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.78) >>
 >> endobj
-15069 0 obj <<
+15058 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [365.462 185.874 378.363 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-15070 0 obj <<
+15059 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [348.704 172.324 361.606 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-15071 0 obj <<
+15060 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [365.121 158.775 378.023 170.175]
 /Subtype /Link
 /A << /S /GoTo /D (page.80) >>
 >> endobj
-15072 0 obj <<
+15061 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.697 158.775 395.599 170.175]
 /Subtype /Link
 /A << /S /GoTo /D (page.86) >>
 >> endobj
-15073 0 obj <<
+15062 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.098 145.226 395 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.67) >>
 >> endobj
-15074 0 obj <<
+15063 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [368.734 131.677 381.636 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.88) >>
 >> endobj
-15075 0 obj <<
+15064 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.476 118.128 432.832 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.313) >>
 >> endobj
-15080 0 obj <<
-/D [15078 0 R /XYZ 100.892 685.529 null]
+15069 0 obj <<
+/D [15067 0 R /XYZ 100.892 685.529 null]
 >> endobj
-15077 0 obj <<
+15066 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-15194 0 obj <<
+15183 0 obj <<
 /Length 1595      
 /Filter /FlateDecode
 >>
@@ -90950,799 +94686,799 @@
 ôë{õõ·7­ØHóãÓîµÚSŠÔüŠðÄ3:íä&LgÑïy‘vwïnWÝNWÝ´i_7·I•o-ïÈOéÐ<}vÜIqhGJ¿®D–îFšXÿe•gU\u1ŸÄkË 2Tß´äU\ÔyO„Q@xGYV›xÝñ×rm¼¤T&fÎ(»:3ƒà¹§(;Ǥå&ÎãÕ¬¥Þâ~£ãZOŒzÇþëÅä_(S~k
 endstream
 endobj
-15193 0 obj <<
+15182 0 obj <<
 /Type /Page
-/Contents 15194 0 R
-/Resources 15192 0 R
+/Contents 15183 0 R
+/Resources 15181 0 R
 /MediaBox [0 0 612 792]
-/Parent 14970 0 R
-/Annots [ 15076 0 R 15081 0 R 15082 0 R 15083 0 R 15084 0 R 15085 0 R 15086 0 R 15087 0 R 15088 0 R 15089 0 R 15090 0 R 15091 0 R 15092 0 R 15093 0 R 15094 0 R 15095 0 R 15096 0 R 15097 0 R 15098 0 R 15099 0 R 15100 0 R 15101 0 R 15102 0 R 15103 0 R 15104 0 R 15105 0 R 15106 0 R 15107 0 R 15108 0 R 15109 0 R 15110 0 R 15111 0 R 15112 0 R 15113 0 R 15114 0 R 15115 0 R 15116 0 R 15117 0 R 15118 0 R 15119 0 R 15120 0 R 15121 0 R 15122 0 R 15123 0 R 15124 0 R 15125 0 R 15126 0 R 15127 0 R 15128 0 R 15129 0 R 15130 0 R 15131 0 R 15132 0 R 15133 0 R 15134 0 R 15135 0 R 15136 0 R 15137 0 R 15138 0 R 15139 0 R 15140 0 R 15141 0 R 15142 0 R 15143 0 R 15144 0 R 15145 0 R 15146 0 R 15147 0 R 15148 0 R 15149 0 R 15150 0 R 15151 0 R 15152 0 R 15153 0 R 15154 0 R 15155 0 R 15156 0 R 15157 0 R 15158 0 R 15159 0 R 15160 0 R 15161 0 R 15162 0 R 15163 0 R 15164 0 R 15165 0 R 15166 0 R 15167 0 R 15168 0 R 15169 0 R 15170 0 R 15171 0 R 15172 0 R 15173 0 R 15174 0 R 15175 0 R 15176 0 R 15177 0 R 15178 0 R 15179 0 R 15180 0 R 15181 0 R 15182 0 R 15183 0 R 15184 0 R 15185 0 R 15186 0 R 15187 0 R 15188 0 R 15189 0 R 15190 0 R ]
+/Parent 14959 0 R
+/Annots [ 15065 0 R 15070 0 R 15071 0 R 15072 0 R 15073 0 R 15074 0 R 15075 0 R 15076 0 R 15077 0 R 15078 0 R 15079 0 R 15080 0 R 15081 0 R 15082 0 R 15083 0 R 15084 0 R 15085 0 R 15086 0 R 15087 0 R 15088 0 R 15089 0 R 15090 0 R 15091 0 R 15092 0 R 15093 0 R 15094 0 R 15095 0 R 15096 0 R 15097 0 R 15098 0 R 15099 0 R 15100 0 R 15101 0 R 15102 0 R 15103 0 R 15104 0 R 15105 0 R 15106 0 R 15107 0 R 15108 0 R 15109 0 R 15110 0 R 15111 0 R 15112 0 R 15113 0 R 15114 0 R 15115 0 R 15116 0 R 15117 0 R 15118 0 R 15119 0 R 15120 0 R 15121 0 R 15122 0 R 15123 0 R 15124 0 R 15125 0 R 15126 0 R 15127 0 R 15128 0 R 15129 0 R 15130 0 R 15131 0 R 15132 0 R 15133 0 R 15134 0 R 15135 0 R 15136 0 R 15137 0 R 15138 0 R 15139 0 R 15140 0 R 15141 0 R 15142 0 R 15143 0 R 15144 0 R 15145 0 R 15146 0 R 15147 0 R 15148 0 R 15149 0 R 15150 0 R 15151 0 R 15152 0 R 15153 0 R 15154 0 R 15155 0 R 15156 0 R 15157 0 R 15158 0 R 15159 0 R 15160 0 R 15161 0 R 15162 0 R 15163 0 R 15164 0 R 15165 0 R 15166 0 R 15167 0 R 15168 0 R 15169 0 R 15170 0 R 15171 0 R 15172 0 R 15173 0 R 15174 0 R 15175 0 R 15176 0 R 15177 0 R 15178 0 R 15179 0 R ]
 >> endobj
-15076 0 obj <<
+15065 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [260.887 646.546 273.788 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.87) >>
 >> endobj
-15081 0 obj <<
+15070 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [263.887 632.997 282.243 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.313) >>
 >> endobj
-15082 0 obj <<
+15071 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [307.22 619.448 325.576 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.245) >>
 >> endobj
-15083 0 obj <<
+15072 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [268.19 605.899 286.546 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.724) >>
 >> endobj
-15084 0 obj <<
+15073 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [238.644 592.35 257.001 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.753) >>
 >> endobj
-15085 0 obj <<
+15074 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.826 578.8 268.182 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.167) >>
 >> endobj
-15086 0 obj <<
+15075 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [272.856 578.8 291.213 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.723) >>
 >> endobj
-15087 0 obj <<
+15076 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.432 497.505 250.788 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.128) >>
 >> endobj
-15088 0 obj <<
+15077 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [298.16 483.956 316.516 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.128) >>
 >> endobj
-15089 0 obj <<
+15078 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.204 470.407 311.56 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.167) >>
 >> endobj
-15090 0 obj <<
+15079 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 458.979 208.912 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.185) >>
 >> endobj
-15091 0 obj <<
+15080 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.675 443.308 243.031 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.127) >>
 >> endobj
-15092 0 obj <<
+15081 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [247.705 443.308 266.061 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.285) >>
 >> endobj
-15093 0 obj <<
+15082 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.978 429.759 247.334 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.131) >>
 >> endobj
-15094 0 obj <<
+15083 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [304.735 416.21 323.092 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.128) >>
 >> endobj
-15095 0 obj <<
+15084 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [239.826 402.661 258.182 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.127) >>
 >> endobj
-15096 0 obj <<
+15085 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [258.038 389.112 276.394 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.594) >>
 >> endobj
-15097 0 obj <<
+15086 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.311 375.562 231.667 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.135) >>
 >> endobj
-15098 0 obj <<
+15087 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [239.553 362.013 257.91 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.365) >>
 >> endobj
-15099 0 obj <<
+15088 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [262.584 362.013 280.94 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.748) >>
 >> endobj
-15100 0 obj <<
+15089 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.372 348.464 237.273 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.77) >>
 >> endobj
-15101 0 obj <<
+15090 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.947 348.464 260.304 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-15102 0 obj <<
+15091 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [264.978 348.464 283.334 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.137) >>
 >> endobj
-15103 0 obj <<
+15092 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [264.22 334.915 277.122 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.79) >>
 >> endobj
-15104 0 obj <<
+15093 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [256.584 321.366 274.94 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.127) >>
 >> endobj
-15105 0 obj <<
+15094 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [239.553 307.816 257.91 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.754) >>
 >> endobj
-15106 0 obj <<
+15095 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 282.839 208.912 291.862]
 /Subtype /Link
 /A << /S /GoTo /D (page.755) >>
 >> endobj
-15107 0 obj <<
+15096 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [269.411 267.169 287.767 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.155) >>
 >> endobj
-15108 0 obj <<
+15097 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.204 267.169 311.56 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.178) >>
 >> endobj
-15109 0 obj <<
+15098 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 253.62 208.912 264.764]
 /Subtype /Link
 /A << /S /GoTo /D (page.181) >>
 >> endobj
-15110 0 obj <<
+15099 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.586 253.62 231.942 264.764]
 /Subtype /Link
 /A << /S /GoTo /D (page.183) >>
 >> endobj
-15111 0 obj <<
+15100 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.616 253.62 254.972 264.764]
 /Subtype /Link
 /A << /S /GoTo /D (page.395) >>
 >> endobj
-15112 0 obj <<
+15101 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.646 253.62 278.003 264.764]
 /Subtype /Link
 /A << /S /GoTo /D (page.419) >>
 >> endobj
-15113 0 obj <<
+15102 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [263.796 240.07 282.152 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.181) >>
 >> endobj
-15114 0 obj <<
+15103 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [233.826 226.521 252.182 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.604) >>
 >> endobj
-15115 0 obj <<
+15104 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [235.069 212.972 253.425 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.723) >>
 >> endobj
-15116 0 obj <<
+15105 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [237.462 199.423 255.819 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-15117 0 obj <<
+15106 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [260.493 199.423 278.849 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.163) >>
 >> endobj
-15118 0 obj <<
+15107 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [283.523 199.423 301.879 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.723) >>
 >> endobj
-15119 0 obj <<
+15108 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [237.523 185.874 255.879 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.179) >>
 >> endobj
-15120 0 obj <<
+15109 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.796 172.324 246.152 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.195) >>
 >> endobj
-15121 0 obj <<
+15110 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.947 158.775 251.304 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.684) >>
 >> endobj
-15122 0 obj <<
+15111 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.826 145.226 245.182 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-15123 0 obj <<
+15112 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [265.372 131.677 283.728 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.572) >>
 >> endobj
-15124 0 obj <<
+15113 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.887 118.128 278.243 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.683) >>
 >> endobj
-15125 0 obj <<
+15114 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [469.346 646.546 487.702 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.199) >>
 >> endobj
-15126 0 obj <<
+15115 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [447.073 632.997 465.429 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.138) >>
 >> endobj
-15127 0 obj <<
+15116 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.588 619.448 446.944 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.797) >>
 >> endobj
-15128 0 obj <<
+15117 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [451.164 605.899 469.52 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.137) >>
 >> endobj
-15129 0 obj <<
+15118 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.225 592.35 431.581 603.494]
 /Subtype /Link
 /A << /S /GoTo /D (page.376) >>
 >> endobj
-15130 0 obj <<
+15119 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.406 578.8 447.763 589.944]
 /Subtype /Link
 /A << /S /GoTo /D (page.709) >>
 >> endobj
-15131 0 obj <<
+15120 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.528 565.251 422.884 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.761) >>
 >> endobj
-15132 0 obj <<
+15121 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.437 551.702 436.793 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.102) >>
 >> endobj
-15133 0 obj <<
+15122 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.77 538.153 414.672 549.721]
 /Subtype /Link
 /A << /S /GoTo /D (page.63) >>
 >> endobj
-15134 0 obj <<
+15123 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.346 538.153 437.702 549.721]
 /Subtype /Link
 /A << /S /GoTo /D (page.104) >>
 >> endobj
-15135 0 obj <<
+15124 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.376 538.153 460.732 549.721]
 /Subtype /Link
 /A << /S /GoTo /D (page.593) >>
 >> endobj
-15136 0 obj <<
+15125 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [375.497 524.604 393.854 536.172]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-15137 0 obj <<
+15126 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [398.528 524.604 416.884 536.172]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-15138 0 obj <<
+15127 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [421.558 524.604 439.914 536.172]
 /Subtype /Link
 /A << /S /GoTo /D (page.596) >>
 >> endobj
-15139 0 obj <<
+15128 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.588 524.604 462.944 536.172]
 /Subtype /Link
 /A << /S /GoTo /D (page.690) >>
 >> endobj
-15140 0 obj <<
+15129 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [467.619 524.604 485.975 536.172]
 /Subtype /Link
 /A << /S /GoTo /D (page.719) >>
 >> endobj
-15141 0 obj <<
+15130 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [409.194 511.054 427.55 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.348) >>
 >> endobj
-15142 0 obj <<
+15131 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [372.315 497.505 385.217 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.48) >>
 >> endobj
-15143 0 obj <<
+15132 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [389.891 497.505 402.793 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.93) >>
 >> endobj
-15144 0 obj <<
+15133 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.467 497.505 425.823 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.218) >>
 >> endobj
-15145 0 obj <<
+15134 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.497 497.505 448.854 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-15146 0 obj <<
+15135 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.528 497.505 471.884 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.572) >>
 >> endobj
-15147 0 obj <<
+15136 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.831 483.956 436.187 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.573) >>
 >> endobj
-15148 0 obj <<
+15137 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.126 470.407 389.573 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.6) >>
 >> endobj
-15149 0 obj <<
+15138 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.967 470.407 402.414 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.8) >>
 >> endobj
-15150 0 obj <<
+15139 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.807 470.407 420.709 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.25) >>
 >> endobj
-15151 0 obj <<
+15140 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.103 470.407 439.004 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.29) >>
 >> endobj
-15152 0 obj <<
+15141 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.398 470.407 462.754 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.155) >>
 >> endobj
-15153 0 obj <<
+15142 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [466.216 470.407 484.572 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-15154 0 obj <<
+15143 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 470.407 508.322 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.177) >>
 >> endobj
-15155 0 obj <<
+15144 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 456.858 405.674 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.183) >>
 >> endobj
-15156 0 obj <<
+15145 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.98 456.858 431.336 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.292) >>
 >> endobj
-15157 0 obj <<
+15146 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.642 456.858 456.998 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.576) >>
 >> endobj
-15158 0 obj <<
+15147 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.304 456.858 482.66 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.582) >>
 >> endobj
-15159 0 obj <<
+15148 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 456.858 508.322 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.584) >>
 >> endobj
-15160 0 obj <<
+15149 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 443.308 405.674 454.452]
 /Subtype /Link
 /A << /S /GoTo /D (page.698) >>
 >> endobj
-15161 0 obj <<
+15150 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.98 443.308 431.336 454.452]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-15162 0 obj <<
+15151 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.642 443.308 456.998 454.452]
 /Subtype /Link
 /A << /S /GoTo /D (page.748) >>
 >> endobj
-15163 0 obj <<
+15152 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.304 443.308 482.66 454.452]
 /Subtype /Link
 /A << /S /GoTo /D (page.749) >>
 >> endobj
-15164 0 obj <<
+15153 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 443.308 508.322 454.452]
 /Subtype /Link
 /A << /S /GoTo /D (page.753) >>
 >> endobj
-15165 0 obj <<
+15154 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 431.88 405.674 440.903]
 /Subtype /Link
 /A << /S /GoTo /D (page.797) >>
 >> endobj
-15166 0 obj <<
+15155 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.164 416.21 425.52 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.666) >>
 >> endobj
-15167 0 obj <<
+15156 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.194 416.21 448.551 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.748) >>
 >> endobj
-15168 0 obj <<
+15157 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.285 402.661 459.641 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.159) >>
 >> endobj
-15169 0 obj <<
+15158 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [471.831 389.112 490.187 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.122) >>
 >> endobj
-15170 0 obj <<
+15159 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.588 375.562 444.944 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.125) >>
 >> endobj
-15171 0 obj <<
+15160 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.679 362.013 407.035 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.124) >>
 >> endobj
-15172 0 obj <<
+15161 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.891 348.464 448.248 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.402) >>
 >> endobj
-15173 0 obj <<
+15162 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [452.922 348.464 471.278 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.700) >>
 >> endobj
-15174 0 obj <<
+15163 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.406 334.915 419.763 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-15175 0 obj <<
+15164 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.77 321.366 426.126 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.596) >>
 >> endobj
-15176 0 obj <<
+15165 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.225 307.816 451.581 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.594) >>
 >> endobj
-15177 0 obj <<
+15166 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [454.287 280.718 472.643 291.862]
 /Subtype /Link
 /A << /S /GoTo /D (page.643) >>
 >> endobj
-15178 0 obj <<
+15167 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [437.194 267.169 455.551 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.181) >>
 >> endobj
-15179 0 obj <<
+15168 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.544 240.07 425.445 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.86) >>
 >> endobj
-15180 0 obj <<
+15169 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [490.285 226.521 508.641 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-15181 0 obj <<
+15170 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.982 212.972 443.338 224.54]
 /Subtype /Link
 /A << /S /GoTo /D (page.463) >>
 >> endobj
-15182 0 obj <<
+15171 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [448.013 212.972 466.369 224.54]
 /Subtype /Link
 /A << /S /GoTo /D (page.479) >>
 >> endobj
-15183 0 obj <<
+15172 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [465.406 199.423 483.763 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-15184 0 obj <<
+15173 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [488.437 199.423 506.793 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.528) >>
 >> endobj
-15185 0 obj <<
+15174 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.619 185.874 444.975 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-15186 0 obj <<
+15175 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.346 172.324 434.702 183.724]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-15187 0 obj <<
+15176 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.194 158.775 432.551 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.475) >>
 >> endobj
-15188 0 obj <<
+15177 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.619 145.226 428.975 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.261) >>
 >> endobj
-15189 0 obj <<
+15178 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [450.528 131.677 468.884 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.122) >>
 >> endobj
-15190 0 obj <<
+15179 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [454.831 118.128 473.187 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.121) >>
 >> endobj
-15195 0 obj <<
-/D [15193 0 R /XYZ 151.701 685.529 null]
+15184 0 obj <<
+/D [15182 0 R /XYZ 151.701 685.529 null]
 >> endobj
-15192 0 obj <<
+15181 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-15319 0 obj <<
+15308 0 obj <<
 /Length 1795      
 /Filter /FlateDecode
 >>
@@ -91765,869 +95501,869 @@
 ùC_ÒªSs˜t AVÏUlºgS×’¸loÏÚwÛØ6!#"±NÆý_=Âý;üÓÎ
 endstream
 endobj
-15318 0 obj <<
+15307 0 obj <<
 /Type /Page
-/Contents 15319 0 R
-/Resources 15317 0 R
+/Contents 15308 0 R
+/Resources 15306 0 R
 /MediaBox [0 0 612 792]
-/Parent 14970 0 R
-/Annots [ 15191 0 R 15196 0 R 15197 0 R 15198 0 R 15199 0 R 15200 0 R 15201 0 R 15202 0 R 15203 0 R 15204 0 R 15205 0 R 15206 0 R 15207 0 R 15208 0 R 15209 0 R 15210 0 R 15211 0 R 15212 0 R 15213 0 R 15214 0 R 15215 0 R 15216 0 R 15217 0 R 15218 0 R 15219 0 R 15220 0 R 15221 0 R 15222 0 R 15223 0 R 15224 0 R 15225 0 R 15226 0 R 15227 0 R 15228 0 R 15229 0 R 15230 0 R 15231 0 R 15232 0 R 15233 0 R 15234 0 R 15235 0 R 15236 0 R 15237 0 R 15238 0 R 15239 0 R 15240 0 R 15241 0 R 15242 0 R 15243 0 R 15244 0 R 15245 0 R 15246 0 R 15247 0 R 15248 0 R 15249 0 R 15250 0 R 15251 0 R 15252 0 R 15253 0 R 15254 0 R 15255 0 R 15256 0 R 15257 0 R 15258 0 R 15259 0 R 15260 0 R 15261 0 R 15262 0 R 15263 0 R 15264 0 R 15265 0 R 15266 0 R 15267 0 R 15268 0 R 15269 0 R 15270 0 R 15271 0 R 15272 0 R 15273 0 R 15274 0 R 15275 0 R 15276 0 R 15277 0 R 15278 0 R 15279 0 R 15280 0 R 15281 0 R 15282 0 R 15283 0 R 15284 0 R 15285 0 R 15286 0 R 15287 0 R 15288 0 R 15289 0 R 15290 0 R 15291 0 R 15292 0 R 15293 0 R 15294 0 R 15295 0 R 15296 0 R 15297 0 R 15298 0 R 15299 0 R 15300 0 R 15301 0 R 15302 0 R 15303 0 R 15304 0 R 15305 0 R 15306 0 R 15307 0 R 15308 0 R 15309 0 R 15310 0 R 15311 0 R 15312 0 R 15313 0 R 15314 0 R 15315 0 R ]
+/Parent 14959 0 R
+/Annots [ 15180 0 R 15185 0 R 15186 0 R 15187 0 R 15188 0 R 15189 0 R 15190 0 R 15191 0 R 15192 0 R 15193 0 R 15194 0 R 15195 0 R 15196 0 R 15197 0 R 15198 0 R 15199 0 R 15200 0 R 15201 0 R 15202 0 R 15203 0 R 15204 0 R 15205 0 R 15206 0 R 15207 0 R 15208 0 R 15209 0 R 15210 0 R 15211 0 R 15212 0 R 15213 0 R 15214 0 R 15215 0 R 15216 0 R 15217 0 R 15218 0 R 15219 0 R 15220 0 R 15221 0 R 15222 0 R 15223 0 R 15224 0 R 15225 0 R 15226 0 R 15227 0 R 15228 0 R 15229 0 R 15230 0 R 15231 0 R 15232 0 R 15233 0 R 15234 0 R 15235 0 R 15236 0 R 15237 0 R 15238 0 R 15239 0 R 15240 0 R 15241 0 R 15242 0 R 15243 0 R 15244 0 R 15245 0 R 15246 0 R 15247 0 R 15248 0 R 15249 0 R 15250 0 R 15251 0 R 15252 0 R 15253 0 R 15254 0 R 15255 0 R 15256 0 R 15257 0 R 15258 0 R 15259 0 R 15260 0 R 15261 0 R 15262 0 R 15263 0 R 15264 0 R 15265 0 R 15266 0 R 15267 0 R 15268 0 R 15269 0 R 15270 0 R 15271 0 R 15272 0 R 15273 0 R 15274 0 R 15275 0 R 15276 0 R 15277 0 R 15278 0 R 15279 0 R 15280 0 R 15281 0 R 15282 0 R 15283 0 R 15284 0 R 15285 0 R 15286 0 R 15287 0 R 15288 0 R 15289 0 R 15290 0 R 15291 0 R 15292 0 R 15293 0 R 15294 0 R 15295 0 R 15296 0 R 15297 0 R 15298 0 R 15299 0 R 15300 0 R 15301 0 R 15302 0 R 15303 0 R 15304 0 R ]
 >> endobj
-15191 0 obj <<
+15180 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.199 646.546 215.555 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.172) >>
 >> endobj
-15196 0 obj <<
+15185 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [203.653 632.997 222.009 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.195) >>
 >> endobj
-15197 0 obj <<
+15186 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [170.895 619.448 189.252 630.847]
 /Subtype /Link
 /A << /S /GoTo /D (page.378) >>
 >> endobj
-15198 0 obj <<
+15187 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [136.259 605.899 154.615 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.107) >>
 >> endobj
-15199 0 obj <<
+15188 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [159.289 605.899 177.646 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.618) >>
 >> endobj
-15200 0 obj <<
+15189 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.441 592.35 239.797 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-15201 0 obj <<
+15190 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [126.917 578.8 145.273 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.122) >>
 >> endobj
-15202 0 obj <<
+15191 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.013 578.8 168.369 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-15203 0 obj <<
+15192 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.108 578.8 191.464 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.200) >>
 >> endobj
-15204 0 obj <<
+15193 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.203 578.8 214.56 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.216) >>
 >> endobj
-15205 0 obj <<
+15194 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.299 578.8 237.655 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.218) >>
 >> endobj
-15206 0 obj <<
+15195 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 578.8 260.751 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.223) >>
 >> endobj
-15207 0 obj <<
+15196 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 565.251 158.102 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.237) >>
 >> endobj
-15208 0 obj <<
+15197 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [164.802 565.251 183.158 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.285) >>
 >> endobj
-15209 0 obj <<
+15198 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [189.858 565.251 208.214 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-15210 0 obj <<
+15199 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [214.914 565.251 233.27 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.295) >>
 >> endobj
-15211 0 obj <<
+15200 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [239.97 565.251 258.326 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.567) >>
 >> endobj
-15212 0 obj <<
+15201 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 551.702 158.102 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.569) >>
 >> endobj
-15213 0 obj <<
+15202 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 551.702 181.132 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.571) >>
 >> endobj
-15214 0 obj <<
+15203 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.594 551.702 202.951 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.573) >>
 >> endobj
-15215 0 obj <<
+15204 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [207.625 551.702 225.981 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.586) >>
 >> endobj
-15216 0 obj <<
+15205 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.655 551.702 249.011 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.590) >>
 >> endobj
-15217 0 obj <<
+15206 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [147.755 538.153 160.657 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.95) >>
 >> endobj
-15218 0 obj <<
+15207 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [167.324 538.153 185.68 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-15219 0 obj <<
+15208 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.347 538.153 210.704 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.200) >>
 >> endobj
-15220 0 obj <<
+15209 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.371 538.153 235.727 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.285) >>
 >> endobj
-15221 0 obj <<
+15210 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 538.153 260.751 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.289) >>
 >> endobj
-15222 0 obj <<
+15211 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 524.604 158.102 535.748]
 /Subtype /Link
 /A << /S /GoTo /D (page.301) >>
 >> endobj
-15223 0 obj <<
+15212 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 524.604 181.132 535.748]
 /Subtype /Link
 /A << /S /GoTo /D (page.302) >>
 >> endobj
-15224 0 obj <<
+15213 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.308 511.054 202.664 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.576) >>
 >> endobj
-15225 0 obj <<
+15214 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [169.714 497.505 182.615 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.47) >>
 >> endobj
-15226 0 obj <<
+15215 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.926 483.956 192.282 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.324) >>
 >> endobj
-15227 0 obj <<
+15216 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.956 483.956 215.312 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.328) >>
 >> endobj
-15228 0 obj <<
+15217 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.774 483.956 237.13 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.330) >>
 >> endobj
-15229 0 obj <<
+15218 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.805 483.956 260.161 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.790) >>
 >> endobj
-15230 0 obj <<
+15219 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [161.411 470.407 179.767 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.569) >>
 >> endobj
-15231 0 obj <<
+15220 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.865 456.858 176.221 468.426]
 /Subtype /Link
 /A << /S /GoTo /D (page.111) >>
 >> endobj
-15232 0 obj <<
+15221 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [180.895 456.858 199.252 468.426]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-15233 0 obj <<
+15222 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [207.047 443.308 225.403 454.877]
 /Subtype /Link
 /A << /S /GoTo /D (page.217) >>
 >> endobj
-15234 0 obj <<
+15223 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [169.744 429.759 188.1 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.206) >>
 >> endobj
-15235 0 obj <<
+15224 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.199 416.21 219.555 427.778]
 /Subtype /Link
 /A << /S /GoTo /D (page.325) >>
 >> endobj
-15236 0 obj <<
+15225 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.047 402.661 230.403 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.377) >>
 >> endobj
-15237 0 obj <<
+15226 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.38 389.112 238.737 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.101) >>
 >> endobj
-15238 0 obj <<
+15227 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.683 375.562 243.04 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.190) >>
 >> endobj
-15239 0 obj <<
+15228 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [128.077 362.013 146.433 373.581]
 /Subtype /Link
 /A << /S /GoTo /D (page.286) >>
 >> endobj
-15240 0 obj <<
+15229 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [151.108 362.013 169.464 373.581]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-15241 0 obj <<
+15230 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [169.138 348.464 187.494 360.032]
 /Subtype /Link
 /A << /S /GoTo /D (page.286) >>
 >> endobj
-15242 0 obj <<
+15231 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [166.865 334.915 185.221 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-15243 0 obj <<
+15232 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [189.895 334.915 208.252 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.567) >>
 >> endobj
-15244 0 obj <<
+15233 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.017 321.366 231.373 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.285) >>
 >> endobj
-15245 0 obj <<
+15234 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.683 307.816 245.04 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.609) >>
 >> endobj
-15246 0 obj <<
+15235 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 282.839 158.102 291.862]
 /Subtype /Link
 /A << /S /GoTo /D (page.305) >>
 >> endobj
-15247 0 obj <<
+15236 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [153.592 267.169 171.949 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.378) >>
 >> endobj
-15248 0 obj <<
+15237 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.38 253.62 210.737 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.371) >>
 >> endobj
-15249 0 obj <<
+15238 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.683 240.07 215.04 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-15250 0 obj <<
+15239 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [167.229 226.521 185.585 238.089]
 /Subtype /Link
 /A << /S /GoTo /D (page.606) >>
 >> endobj
-15251 0 obj <<
+15240 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 201.544 158.102 210.567]
 /Subtype /Link
 /A << /S /GoTo /D (page.715) >>
 >> endobj
-15252 0 obj <<
+15241 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.72 185.874 278.076 197.442]
 /Subtype /Link
 /A << /S /GoTo /D (page.417) >>
 >> endobj
-15253 0 obj <<
+15242 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [179.484 172.324 192.386 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.74) >>
 >> endobj
-15254 0 obj <<
+15243 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.303 172.324 215.659 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-15255 0 obj <<
+15244 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.576 172.324 238.932 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.605) >>
 >> endobj
-15256 0 obj <<
+15245 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 172.324 260.751 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.610) >>
 >> endobj
-15257 0 obj <<
+15246 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 158.775 158.102 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.628) >>
 >> endobj
-15258 0 obj <<
+15247 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 158.775 181.132 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.629) >>
 >> endobj
-15259 0 obj <<
+15248 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.807 158.775 204.163 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.728) >>
 >> endobj
-15260 0 obj <<
+15249 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.32 145.226 180.676 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.605) >>
 >> endobj
-15261 0 obj <<
+15250 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [169.91 131.677 188.266 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.424) >>
 >> endobj
-15262 0 obj <<
+15251 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [358.203 646.546 376.559 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.424) >>
 >> endobj
-15263 0 obj <<
+15252 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [332.567 632.929 350.923 644.497]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-15264 0 obj <<
+15253 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [355.597 632.929 373.953 644.497]
 /Subtype /Link
 /A << /S /GoTo /D (page.151) >>
 >> endobj
-15265 0 obj <<
+15254 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.627 632.929 396.983 644.497]
 /Subtype /Link
 /A << /S /GoTo /D (page.315) >>
 >> endobj
-15266 0 obj <<
+15255 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [351.191 619.312 364.093 631.001]
 /Subtype /Link
 /A << /S /GoTo /D (page.66) >>
 >> endobj
-15267 0 obj <<
+15256 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [347.415 605.694 365.771 617.263]
 /Subtype /Link
 /A << /S /GoTo /D (page.367) >>
 >> endobj
-15268 0 obj <<
+15257 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [369.932 592.077 388.289 603.767]
 /Subtype /Link
 /A << /S /GoTo /D (page.424) >>
 >> endobj
-15269 0 obj <<
+15258 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [367.203 564.911 385.559 576.479]
 /Subtype /Link
 /A << /S /GoTo /D (page.610) >>
 >> endobj
-15270 0 obj <<
+15259 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [390.233 564.911 408.59 576.479]
 /Subtype /Link
 /A << /S /GoTo /D (page.626) >>
 >> endobj
-15271 0 obj <<
+15260 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.264 564.911 431.62 576.479]
 /Subtype /Link
 /A << /S /GoTo /D (page.729) >>
 >> endobj
-15272 0 obj <<
+15261 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [364.173 551.293 382.529 562.862]
 /Subtype /Link
 /A << /S /GoTo /D (page.620) >>
 >> endobj
-15273 0 obj <<
+15262 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.203 551.293 405.559 562.862]
 /Subtype /Link
 /A << /S /GoTo /D (page.623) >>
 >> endobj
-15274 0 obj <<
+15263 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.233 551.293 428.59 562.862]
 /Subtype /Link
 /A << /S /GoTo /D (page.725) >>
 >> endobj
-15275 0 obj <<
+15264 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [370.385 537.676 388.741 549.244]
 /Subtype /Link
 /A << /S /GoTo /D (page.626) >>
 >> endobj
-15276 0 obj <<
+15265 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [367.355 524.059 385.711 535.627]
 /Subtype /Link
 /A << /S /GoTo /D (page.620) >>
 >> endobj
-15277 0 obj <<
+15266 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [346.112 510.441 364.468 522.131]
 /Subtype /Link
 /A << /S /GoTo /D (page.103) >>
 >> endobj
-15278 0 obj <<
+15267 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [319.688 496.824 338.044 508.392]
 /Subtype /Link
 /A << /S /GoTo /D (page.595) >>
 >> endobj
-15279 0 obj <<
+15268 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.536 472.109 424.893 483.799]
 /Subtype /Link
 /A << /S /GoTo /D (page.650) >>
 >> endobj
-15280 0 obj <<
+15269 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.567 472.109 447.923 483.799]
 /Subtype /Link
 /A << /S /GoTo /D (page.651) >>
 >> endobj
-15281 0 obj <<
+15270 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [358.294 458.492 376.65 470.181]
 /Subtype /Link
 /A << /S /GoTo /D (page.717) >>
 >> endobj
-15282 0 obj <<
+15271 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.688 444.875 433.044 456.564]
 /Subtype /Link
 /A << /S /GoTo /D (page.718) >>
 >> endobj
-15283 0 obj <<
+15272 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [437.021 431.257 455.377 442.947]
 /Subtype /Link
 /A << /S /GoTo /D (page.577) >>
 >> endobj
-15284 0 obj <<
+15273 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [360.718 417.64 379.074 429.33]
 /Subtype /Link
 /A << /S /GoTo /D (page.218) >>
 >> endobj
-15285 0 obj <<
+15274 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [369.87 404.023 388.226 415.712]
 /Subtype /Link
 /A << /S /GoTo /D (page.218) >>
 >> endobj
-15286 0 obj <<
+15275 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.9 404.023 411.256 415.712]
 /Subtype /Link
 /A << /S /GoTo /D (page.219) >>
 >> endobj
-15287 0 obj <<
+15276 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.839 390.405 407.196 402.095]
 /Subtype /Link
 /A << /S /GoTo /D (page.724) >>
 >> endobj
-15288 0 obj <<
+15277 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.203 376.788 372.105 388.478]
 /Subtype /Link
 /A << /S /GoTo /D (page.23) >>
 >> endobj
-15289 0 obj <<
+15278 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [324.082 363.171 342.438 374.739]
 /Subtype /Link
 /A << /S /GoTo /D (page.218) >>
 >> endobj
-15290 0 obj <<
+15279 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [390.961 349.554 409.317 361.243]
 /Subtype /Link
 /A << /S /GoTo /D (page.718) >>
 >> endobj
-15291 0 obj <<
+15280 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [329.991 335.936 348.347 347.505]
 /Subtype /Link
 /A << /S /GoTo /D (page.527) >>
 >> endobj
-15292 0 obj <<
+15281 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [348.173 322.319 366.529 334.008]
 /Subtype /Link
 /A << /S /GoTo /D (page.106) >>
 >> endobj
-15293 0 obj <<
+15282 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [348.173 308.702 366.529 320.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-15294 0 obj <<
+15283 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.87 295.084 431.226 306.774]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-15295 0 obj <<
+15284 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.082 281.467 421.438 293.157]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-15296 0 obj <<
+15285 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [365.173 267.85 383.529 279.539]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-15297 0 obj <<
+15286 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [358.476 254.232 376.832 265.922]
 /Subtype /Link
 /A << /S /GoTo /D (page.286) >>
 >> endobj
-15298 0 obj <<
+15287 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [368.567 240.615 386.923 251.759]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-15299 0 obj <<
+15288 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [408.294 226.998 426.65 238.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.172) >>
 >> endobj
-15300 0 obj <<
+15289 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [346.748 213.381 365.105 225.07]
 /Subtype /Link
 /A << /S /GoTo /D (page.323) >>
 >> endobj
-15301 0 obj <<
+15290 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [369.779 213.381 388.135 225.07]
 /Subtype /Link
 /A << /S /GoTo /D (page.369) >>
 >> endobj
-15302 0 obj <<
+15291 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [350.824 199.763 369.18 211.332]
 /Subtype /Link
 /A << /S /GoTo /D (page.690) >>
 >> endobj
-15303 0 obj <<
+15292 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [358.465 186.146 371.366 197.714]
 /Subtype /Link
 /A << /S /GoTo /D (page.66) >>
 >> endobj
-15304 0 obj <<
+15293 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [375.91 186.146 388.812 197.714]
 /Subtype /Link
 /A << /S /GoTo /D (page.90) >>
 >> endobj
-15305 0 obj <<
+15294 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [393.356 186.146 411.712 197.714]
 /Subtype /Link
 /A << /S /GoTo /D (page.107) >>
 >> endobj
-15306 0 obj <<
+15295 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.256 186.146 434.612 197.714]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-15307 0 obj <<
+15296 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 186.146 457.513 197.714]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-15308 0 obj <<
+15297 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 172.597 354.864 183.741]
 /Subtype /Link
 /A << /S /GoTo /D (page.217) >>
 >> endobj
-15309 0 obj <<
+15298 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.538 172.597 377.895 183.741]
 /Subtype /Link
 /A << /S /GoTo /D (page.218) >>
 >> endobj
-15310 0 obj <<
+15299 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.569 172.597 400.925 183.741]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-15311 0 obj <<
+15300 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.658 158.98 420.014 170.669]
 /Subtype /Link
 /A << /S /GoTo /D (page.190) >>
 >> endobj
-15312 0 obj <<
+15301 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [348.021 145.362 366.377 156.93]
 /Subtype /Link
 /A << /S /GoTo /D (page.737) >>
 >> endobj
-15313 0 obj <<
+15302 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [371.052 145.362 389.408 156.93]
 /Subtype /Link
 /A << /S /GoTo /D (page.800) >>
 >> endobj
-15314 0 obj <<
+15303 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [375.294 131.745 393.65 143.144]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-15315 0 obj <<
+15304 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.187 118.128 460.543 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.733) >>
 >> endobj
-15320 0 obj <<
-/D [15318 0 R /XYZ 100.892 685.529 null]
+15309 0 obj <<
+/D [15307 0 R /XYZ 100.892 685.529 null]
 >> endobj
-15317 0 obj <<
+15306 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-15442 0 obj <<
+15431 0 obj <<
 /Length 1811      
 /Filter /FlateDecode
 >>
@@ -92644,856 +96380,856 @@
 SÜnšm–M54žϲ©†–[³ËMMYs72ã£Ø=Psí¢ð<º,®:Ú‡f@ˆ6¯éŸT„’y¸SÓý“ãð°­‹¸jfœæÄ`LÞo“_ ¼!ÔLB S´"5ô76‡%‚Ig–a†C’_î<í±ý¾ŽÉ@`r‹Æ0†è˜)¼Í3Ê.4vËÒNŸ9–ÿY¼›h	ÑÄfÓ`QÅb>E£‚ìt.€Kf!ŠADñyø+HŒ´ÛµÎ’oÎùŠöAßœœÍ"`‘ã)œ‘¼bÚ$\4'³,I»Þ¯.ãâU>aÜxžîÏ`áãñÖSÒŒ_›$³aÌi'Ìmpnð<ÕàMâ³Ú&OíèÏq\„YžŒLFêÚ|V–ÑÆúªo¬£Ô)ì‡Í…}7óXÈhá‡Ë!X&Ý–a„ÝÖqò‚£ìpöÊ›ƒ+âtÔ‚µrÂ#R<‚¨ÛÑÍQ ‚¤ìvvDˆ£@T»á)y£@G†† En¨ÄNx.‡`Op|ÓášDnw˜K§CÙ¿/9ïÂØüñÒeÛ³ÁnW²Mß @øü«_
 endstream
 endobj
-15441 0 obj <<
+15430 0 obj <<
 /Type /Page
-/Contents 15442 0 R
-/Resources 15440 0 R
+/Contents 15431 0 R
+/Resources 15429 0 R
 /MediaBox [0 0 612 792]
-/Parent 14970 0 R
-/Annots [ 15316 0 R 15321 0 R 15322 0 R 15323 0 R 15324 0 R 15325 0 R 15326 0 R 15327 0 R 15328 0 R 15329 0 R 15330 0 R 15331 0 R 15332 0 R 15333 0 R 15334 0 R 15335 0 R 15336 0 R 15337 0 R 15338 0 R 15339 0 R 15340 0 R 15341 0 R 15342 0 R 15343 0 R 15344 0 R 15345 0 R 15346 0 R 15347 0 R 15348 0 R 15349 0 R 15350 0 R 15351 0 R 15352 0 R 15353 0 R 15354 0 R 15355 0 R 15356 0 R 15357 0 R 15358 0 R 15359 0 R 15360 0 R 15361 0 R 15362 0 R 15363 0 R 15364 0 R 15365 0 R 15366 0 R 15367 0 R 15368 0 R 15369 0 R 15370 0 R 15371 0 R 15372 0 R 15373 0 R 15374 0 R 15375 0 R 15376 0 R 15377 0 R 15378 0 R 15379 0 R 15380 0 R 15381 0 R 15382 0 R 15383 0 R 15384 0 R 15385 0 R 15386 0 R 15387 0 R 15388 0 R 15389 0 R 15390 0 R 15391 0 R 15392 0 R 15393 0 R 15394 0 R 15395 0 R 15396 0 R 15397 0 R 15398 0 R 15399 0 R 15400 0 R 15401 0 R 15402 0 R 15403 0 R 15404 0 R 15405 0 R 15406 0 R 15407 0 R 15408 0 R 15409 0 R 15410 0 R 15411 0 R 15412 0 R 15413 0 R 15414 0 R 15415 0 R 15416 0 R 15417 0 R 15418 0 R 15419 0 R 15420 0 R 15421 0 R 15422 0 R 15423 0 R 15424 0 R 15425 0 R 15426 0 R 15427 0 R 15428 0 R 15429 0 R 15430 0 R 15431 0 R 15432 0 R 15433 0 R 15434 0 R 15435 0 R 15436 0 R 15437 0 R 15438 0 R ]
+/Parent 14959 0 R
+/Annots [ 15305 0 R 15310 0 R 15311 0 R 15312 0 R 15313 0 R 15314 0 R 15315 0 R 15316 0 R 15317 0 R 15318 0 R 15319 0 R 15320 0 R 15321 0 R 15322 0 R 15323 0 R 15324 0 R 15325 0 R 15326 0 R 15327 0 R 15328 0 R 15329 0 R 15330 0 R 15331 0 R 15332 0 R 15333 0 R 15334 0 R 15335 0 R 15336 0 R 15337 0 R 15338 0 R 15339 0 R 15340 0 R 15341 0 R 15342 0 R 15343 0 R 15344 0 R 15345 0 R 15346 0 R 15347 0 R 15348 0 R 15349 0 R 15350 0 R 15351 0 R 15352 0 R 15353 0 R 15354 0 R 15355 0 R 15356 0 R 15357 0 R 15358 0 R 15359 0 R 15360 0 R 15361 0 R 15362 0 R 15363 0 R 15364 0 R 15365 0 R 15366 0 R 15367 0 R 15368 0 R 15369 0 R 15370 0 R 15371 0 R 15372 0 R 15373 0 R 15374 0 R 15375 0 R 15376 0 R 15377 0 R 15378 0 R 15379 0 R 15380 0 R 15381 0 R 15382 0 R 15383 0 R 15384 0 R 15385 0 R 15386 0 R 15387 0 R 15388 0 R 15389 0 R 15390 0 R 15391 0 R 15392 0 R 15393 0 R 15394 0 R 15395 0 R 15396 0 R 15397 0 R 15398 0 R 15399 0 R 15400 0 R 15401 0 R 15402 0 R 15403 0 R 15404 0 R 15405 0 R 15406 0 R 15407 0 R 15408 0 R 15409 0 R 15410 0 R 15411 0 R 15412 0 R 15413 0 R 15414 0 R 15415 0 R 15416 0 R 15417 0 R 15418 0 R 15419 0 R 15420 0 R 15421 0 R 15422 0 R 15423 0 R 15424 0 R 15425 0 R 15426 0 R 15427 0 R ]
 >> endobj
-15316 0 obj <<
+15305 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [187.978 646.546 206.334 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.690) >>
 >> endobj
-15321 0 obj <<
+15310 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.008 632.659 236.364 644.348]
 /Subtype /Link
 /A << /S /GoTo /D (page.345) >>
 >> endobj
-15322 0 obj <<
+15311 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [239.826 632.659 258.182 644.348]
 /Subtype /Link
 /A << /S /GoTo /D (page.347) >>
 >> endobj
-15323 0 obj <<
+15312 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [262.856 632.659 281.213 644.348]
 /Subtype /Link
 /A << /S /GoTo /D (page.350) >>
 >> endobj
-15324 0 obj <<
+15313 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [266.796 618.771 285.152 630.461]
 /Subtype /Link
 /A << /S /GoTo /D (page.350) >>
 >> endobj
-15325 0 obj <<
+15314 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [289.826 618.771 308.182 630.461]
 /Subtype /Link
 /A << /S /GoTo /D (page.354) >>
 >> endobj
-15326 0 obj <<
+15315 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [267.372 604.884 285.728 616.574]
 /Subtype /Link
 /A << /S /GoTo /D (page.350) >>
 >> endobj
-15327 0 obj <<
+15316 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.826 590.997 251.182 602.686]
 /Subtype /Link
 /A << /S /GoTo /D (page.690) >>
 >> endobj
-15328 0 obj <<
+15317 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.099 577.109 262.455 588.799]
 /Subtype /Link
 /A << /S /GoTo /D (page.350) >>
 >> endobj
-15329 0 obj <<
+15318 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.22 563.222 252.576 574.911]
 /Subtype /Link
 /A << /S /GoTo /D (page.691) >>
 >> endobj
-15330 0 obj <<
+15319 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.463 549.334 262.819 561.024]
 /Subtype /Link
 /A << /S /GoTo /D (page.350) >>
 >> endobj
-15331 0 obj <<
+15320 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.281 535.447 210.637 547.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.345) >>
 >> endobj
-15332 0 obj <<
+15321 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [214.099 535.447 232.455 547.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.347) >>
 >> endobj
-15333 0 obj <<
+15322 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.766 521.56 253.122 533.249]
 /Subtype /Link
 /A << /S /GoTo /D (page.349) >>
 >> endobj
-15334 0 obj <<
+15323 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [256.22 507.672 274.576 519.362]
 /Subtype /Link
 /A << /S /GoTo /D (page.349) >>
 >> endobj
-15335 0 obj <<
+15324 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [261.099 493.785 279.455 505.474]
 /Subtype /Link
 /A << /S /GoTo /D (page.346) >>
 >> endobj
-15336 0 obj <<
+15325 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [258.069 479.897 276.425 491.587]
 /Subtype /Link
 /A << /S /GoTo /D (page.343) >>
 >> endobj
-15337 0 obj <<
+15326 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [281.099 479.897 299.455 491.587]
 /Subtype /Link
 /A << /S /GoTo /D (page.345) >>
 >> endobj
-15338 0 obj <<
+15327 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.159 466.01 214.516 477.7]
 /Subtype /Link
 /A << /S /GoTo /D (page.644) >>
 >> endobj
-15339 0 obj <<
+15328 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [252.281 452.123 270.637 463.812]
 /Subtype /Link
 /A << /S /GoTo /D (page.377) >>
 >> endobj
-15340 0 obj <<
+15329 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [270.19 397.249 288.546 408.939]
 /Subtype /Link
 /A << /S /GoTo /D (page.115) >>
 >> endobj
-15341 0 obj <<
+15330 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [251.105 383.362 269.461 395.052]
 /Subtype /Link
 /A << /S /GoTo /D (page.115) >>
 >> endobj
-15342 0 obj <<
+15331 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.978 355.925 204.879 367.615]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-15343 0 obj <<
+15332 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [209.553 355.925 227.91 367.615]
 /Subtype /Link
 /A << /S /GoTo /D (page.155) >>
 >> endobj
-15344 0 obj <<
+15333 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.584 355.925 250.94 367.615]
 /Subtype /Link
 /A << /S /GoTo /D (page.165) >>
 >> endobj
-15345 0 obj <<
+15334 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.614 355.925 273.97 367.615]
 /Subtype /Link
 /A << /S /GoTo /D (page.166) >>
 >> endobj
-15346 0 obj <<
+15335 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [278.644 355.925 297.001 367.615]
 /Subtype /Link
 /A << /S /GoTo /D (page.168) >>
 >> endobj
-15347 0 obj <<
+15336 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.402 342.038 246.758 353.728]
 /Subtype /Link
 /A << /S /GoTo /D (page.787) >>
 >> endobj
-15348 0 obj <<
+15337 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [248.19 327.545 266.546 340.446]
 /Subtype /Link
 /A << /S /GoTo /D (page.596) >>
 >> endobj
-15349 0 obj <<
+15338 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.25 314.263 200.607 325.953]
 /Subtype /Link
 /A << /S /GoTo /D (page.319) >>
 >> endobj
-15350 0 obj <<
+15339 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [239.493 300.376 257.849 312.065]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-15351 0 obj <<
+15340 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.129 286.488 242.485 298.178]
 /Subtype /Link
 /A << /S /GoTo /D (page.364) >>
 >> endobj
-15352 0 obj <<
+15341 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [251.069 272.601 269.425 284.291]
 /Subtype /Link
 /A << /S /GoTo /D (page.368) >>
 >> endobj
-15353 0 obj <<
+15342 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.038 258.714 223.394 270.403]
 /Subtype /Link
 /A << /S /GoTo /D (page.328) >>
 >> endobj
-15354 0 obj <<
+15343 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.523 244.826 245.879 256.516]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-15355 0 obj <<
+15344 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [235.735 230.939 254.091 242.628]
 /Subtype /Link
 /A << /S /GoTo /D (page.618) >>
 >> endobj
-15356 0 obj <<
+15345 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [189.796 201.452 208.152 213.142]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-15357 0 obj <<
+15346 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [194.341 187.565 201.788 199.254]
 /Subtype /Link
 /A << /S /GoTo /D (page.7) >>
 >> endobj
-15358 0 obj <<
+15347 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [198.644 173.677 206.091 185.367]
 /Subtype /Link
 /A << /S /GoTo /D (page.3) >>
 >> endobj
-15359 0 obj <<
+15348 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.493 159.79 238.849 171.479]
 /Subtype /Link
 /A << /S /GoTo /D (page.619) >>
 >> endobj
-15360 0 obj <<
+15349 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.281 145.902 233.637 157.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.619) >>
 >> endobj
-15361 0 obj <<
+15350 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [187.22 132.015 205.576 143.583]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-15362 0 obj <<
+15351 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.25 132.015 228.607 143.583]
 /Subtype /Link
 /A << /S /GoTo /D (page.200) >>
 >> endobj
-15363 0 obj <<
+15352 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [233.281 132.015 251.637 143.583]
 /Subtype /Link
 /A << /S /GoTo /D (page.289) >>
 >> endobj
-15364 0 obj <<
+15353 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [256.311 132.015 274.667 143.583]
 /Subtype /Link
 /A << /S /GoTo /D (page.299) >>
 >> endobj
-15365 0 obj <<
+15354 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [231.796 118.128 250.152 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-15366 0 obj <<
+15355 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [393.819 619.448 412.175 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.534) >>
 >> endobj
-15367 0 obj <<
+15356 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.922 605.899 442.278 617.043]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-15368 0 obj <<
+15357 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.831 592.35 450.187 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.809) >>
 >> endobj
-15369 0 obj <<
+15358 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.027 578.8 396.384 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.122) >>
 >> endobj
-15370 0 obj <<
+15359 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.415 578.8 418.771 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.190) >>
 >> endobj
-15371 0 obj <<
+15360 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.803 578.8 441.159 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-15372 0 obj <<
+15361 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [445.191 578.8 463.547 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.214) >>
 >> endobj
-15373 0 obj <<
+15362 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [467.578 578.8 485.934 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.216) >>
 >> endobj
-15374 0 obj <<
+15363 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 578.8 508.322 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.571) >>
 >> endobj
-15375 0 obj <<
+15364 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 565.251 405.674 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.573) >>
 >> endobj
-15376 0 obj <<
+15365 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.98 565.251 431.336 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.575) >>
 >> endobj
-15377 0 obj <<
+15366 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.642 565.251 456.998 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.576) >>
 >> endobj
-15378 0 obj <<
+15367 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.304 565.251 482.66 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.586) >>
 >> endobj
-15379 0 obj <<
+15368 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 565.251 508.322 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.590) >>
 >> endobj
-15380 0 obj <<
+15369 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 551.702 405.674 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-15381 0 obj <<
+15370 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.348 551.702 428.704 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.641) >>
 >> endobj
-15382 0 obj <<
+15371 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.74 538.153 508.096 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.642) >>
 >> endobj
-15383 0 obj <<
+15372 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.922 524.604 463.278 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.575) >>
 >> endobj
-15384 0 obj <<
+15373 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.77 511.054 461.126 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.639) >>
 >> endobj
-15385 0 obj <<
+15374 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.316 497.505 435.672 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.578) >>
 >> endobj
-15386 0 obj <<
+15375 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [421.619 483.956 439.975 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-15387 0 obj <<
+15376 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.225 470.407 436.581 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.641) >>
 >> endobj
-15388 0 obj <<
+15377 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.619 456.858 420.975 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.576) >>
 >> endobj
-15389 0 obj <<
+15378 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.831 443.308 437.187 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.570) >>
 >> endobj
-15390 0 obj <<
+15379 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.861 443.308 460.217 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.639) >>
 >> endobj
-15391 0 obj <<
+15380 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.891 443.308 483.247 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-15392 0 obj <<
+15381 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [450.77 429.759 469.126 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.641) >>
 >> endobj
-15393 0 obj <<
+15382 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413 416.21 431.357 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-15394 0 obj <<
+15383 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.273 402.661 417.629 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-15395 0 obj <<
+15384 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.061 389.112 430.417 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-15396 0 obj <<
+15385 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [432.334 375.562 450.69 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.587) >>
 >> endobj
-15397 0 obj <<
+15386 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [434.17 362.013 452.526 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-15398 0 obj <<
+15387 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.213 348.464 435.569 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-15399 0 obj <<
+15388 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.667 334.915 452.023 346.059]
 /Subtype /Link
 /A << /S /GoTo /D (page.588) >>
 >> endobj
-15400 0 obj <<
+15389 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [436.352 321.366 454.708 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.641) >>
 >> endobj
-15401 0 obj <<
+15390 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.728 307.816 449.084 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.639) >>
 >> endobj
-15402 0 obj <<
+15391 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.758 307.816 472.114 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-15403 0 obj <<
+15392 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.667 294.267 463.023 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.641) >>
 >> endobj
-15404 0 obj <<
+15393 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.364 280.718 430.72 292.117]
 /Subtype /Link
 /A << /S /GoTo /D (page.588) >>
 >> endobj
-15405 0 obj <<
+15394 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [435.394 280.718 453.751 292.117]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-15406 0 obj <<
+15395 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.819 267.169 436.175 278.568]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-15407 0 obj <<
+15396 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.061 253.62 441.417 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-15408 0 obj <<
+15397 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.364 240.07 446.72 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.573) >>
 >> endobj
-15409 0 obj <<
+15398 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [450.425 240.07 468.781 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.586) >>
 >> endobj
-15410 0 obj <<
+15399 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [472.485 240.07 490.841 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.588) >>
 >> endobj
-15411 0 obj <<
+15400 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [494.546 240.07 512.902 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.641) >>
 >> endobj
-15412 0 obj <<
+15401 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.982 226.521 425.338 237.665]
 /Subtype /Link
 /A << /S /GoTo /D (page.390) >>
 >> endobj
-15413 0 obj <<
+15402 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [395.982 212.972 414.338 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.581) >>
 >> endobj
-15414 0 obj <<
+15403 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [386.376 199.423 399.278 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.96) >>
 >> endobj
-15415 0 obj <<
+15404 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.73 185.874 442.631 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.23) >>
 >> endobj
-15416 0 obj <<
+15405 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [447.99 185.874 460.892 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-15417 0 obj <<
+15406 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [466.251 185.874 484.607 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.101) >>
 >> endobj
-15418 0 obj <<
+15407 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 185.874 508.322 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-15419 0 obj <<
+15408 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 172.324 405.674 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.189) >>
 >> endobj
-15420 0 obj <<
+15409 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.98 172.324 431.336 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.192) >>
 >> endobj
-15421 0 obj <<
+15410 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.642 172.324 456.998 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-15422 0 obj <<
+15411 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.304 172.324 482.66 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.201) >>
 >> endobj
-15423 0 obj <<
+15412 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 172.324 508.322 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.203) >>
 >> endobj
-15424 0 obj <<
+15413 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 158.775 405.674 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.207) >>
 >> endobj
-15425 0 obj <<
+15414 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.98 158.775 431.336 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.216) >>
 >> endobj
-15426 0 obj <<
+15415 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.642 158.775 456.998 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.228) >>
 >> endobj
-15427 0 obj <<
+15416 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.304 158.775 482.66 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-15428 0 obj <<
+15417 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 158.775 508.322 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-15429 0 obj <<
+15418 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 145.226 405.674 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-15430 0 obj <<
+15419 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.98 145.226 431.336 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.309) >>
 >> endobj
-15431 0 obj <<
+15420 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.642 145.226 456.998 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.371) >>
 >> endobj
-15432 0 obj <<
+15421 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.304 145.226 482.66 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-15433 0 obj <<
+15422 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 145.226 508.322 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.651) >>
 >> endobj
-15434 0 obj <<
+15423 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 131.677 405.674 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.706) >>
 >> endobj
-15435 0 obj <<
+15424 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.348 131.677 428.704 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.717) >>
 >> endobj
-15436 0 obj <<
+15425 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.378 131.677 451.734 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.718) >>
 >> endobj
-15437 0 obj <<
+15426 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [432.8 118.128 451.157 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-15438 0 obj <<
+15427 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [455.831 118.128 474.187 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.707) >>
 >> endobj
-15443 0 obj <<
-/D [15441 0 R /XYZ 151.701 685.529 null]
+15432 0 obj <<
+/D [15430 0 R /XYZ 151.701 685.529 null]
 >> endobj
-15440 0 obj <<
+15429 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-15616 0 obj <<
-/Length 1611      
+15605 0 obj <<
+/Length 1612      
 /Filter /FlateDecode
 >>
 stream
@@ -93506,3048 +97242,3037 @@
 D.ÎÔ󣟄Ýv8³Ûýråb9+þF˜ŠŒ§èsßš6WåÙW×/ó¾ÇÄÙT·¾xëÐn2+l™b at 9 Þ©"«÷F~빟” Š#ÂE¢©8{AKˆ¤×3ßµŒÐ„"ÖcI{/ìU—yº÷×V#â­I&…¯l¡iòâéFét"%Ì{óòÂyn_žê@99?4á¸´asõ!â1Ôû8üàätú%`S~‰% ñˆ†Ùst¤h:k®//žR‚ØóA˜c#©e,$L¦Tjšâ 4%`hj",=›«ˆz:â5qDÃ(‡,$ñdžQÎS²>1R¡º¤„±%L,`ÉÃÓx¦ÑZ ̉6ü`xÀÄA(›•mPÀô+ ~c%Ñ0VN7úF‚tüC8‚1„KƒŸ\•=Ñ`
 êÔç±ÆŸ‘¥e"‰8Q¶´9lWä®Ùÿ|ÈQW3¹qÊ;=䎅õå•¿Àö[À…µ @9”SÀœB
 𻀒‰ËÌåÕp«Ê‹¶+ʲðö¤=Ƈpܝ¬ì<–¡cÌA¦tõ¾ý¹½
-ìëië¾ü?i6wÀ)ûöv§¤Áëð_N)ƒÜâŒil¨wiQÒç}¸^þ bq5ìonüÝÁÀhâ‘›L³j·icŽã·ÌÇoY=t2›Úߘ¥9¦¹«›]ZeþŽ£ÐÀö.!³”ÌÉ¿,¹ˆÓÊ°K7&à=úìÜlš4µì=–PMµu?Ît‘íΞƒ\ìöMí@‡^í®oÜžéU‡8ÍýJVnãï…†¾õ>́Ûᳩû?ց5"B.v¦;ŸK¡éÛ£iYú7XÀa
-?ìà Ýç97(q#°68›zrõÆøÝ{êÚŸó#\Ѷ–«þ~0%0±Þ°Ž$°Ò³±oúÛŸˆæE^4&ë§S½Š_ÍoÃ> äüÉÝçÄÀ›dú͇UH·ŠYéóàµ?ß]ÿuræ›Ã(ºÊÅÑÞÐ4ŽŽ[=þáùȱ‡è;ªéÏ ÙŸ-L˘˯×áɯ€ÊRNLì·ik+«aÅõý!ßõ“ÅîåõïïýQÃÏçŽõ¶îêÕÅåsºÑûm?ón‹,-‡Õ”CËúó"ƒ
-O˜y
-jKÏñÿÅ»&­ú&¾{Ö
-ÏÊÔ‰|÷é<­! s«õõeÀ«éLa¡ÕÙ]•Óô¯n42‘õŠCxOü/E Œ¡£ÈøóÕÍâ?uCQW
+ìëië¾ü?i6wÀ)ûòv'4xbþË)e[œ1́
+õ.-ª@Cú¼×Ë@,®†ý͍¿;M<r“iVí6mÌqü–™ãø-«‡NfSû³”@"Ç4wu³K«ÌßqØÞ%d–²ƒ9ù—%qZ9véƼGŸ›M“æ¡–½Ç2ª©¶îÇ™.²=ÃÙs‹Ý¾©èЫÝõÛ3½ê§¹_ÉʍcüÝ¢Ðð·އ9p;|6uÿÇ:°F$@ÈÅÎtÇàs)´1}{4-Kÿ!¬á‡ û<ç%nÖgSO.£Þ¡Û`OC]ûóq~„+ÚÖrÕߦæ¢3 ÖÖ‘¤V:ðq6öMûѼȋÆdýtªWñ«³ùâmØ”œ?¹ûœx“L¿ù°
+éV1+}¼öç»ë¿NÎ|sEWù± 8ÚšÆÑq«Ç?<9ö}G5ý û3 …isùõ:<ùñÀÊɉ‰ý6mme5¬¸¾?ã»~²Ø½¼þý½?jøùܱÞÖ]½º¸|N7z¿ígÞm‘¥å°šrÈcY^bPá	3OAmé9þ¿˜áaפUßÄwϺáY™:‘ïÞ!§õ"`nµ¾¾xub8U€),´:»Ë¡rZ‚þuF&²^qã‰ÿ¥”1t4¾ºYü!4QO
 endstream
 endobj
-15615 0 obj <<
+15604 0 obj <<
 /Type /Page
-/Contents 15616 0 R
-/Resources 15614 0 R
+/Contents 15605 0 R
+/Resources 15603 0 R
 /MediaBox [0 0 612 792]
-/Parent 14970 0 R
-/Annots [ 15439 0 R 15444 0 R 15445 0 R 15446 0 R 15447 0 R 15448 0 R 15449 0 R 15450 0 R 15451 0 R 15452 0 R 15453 0 R 15454 0 R 15455 0 R 15456 0 R 15457 0 R 15458 0 R 15459 0 R 15460 0 R 15461 0 R 15462 0 R 15463 0 R 15464 0 R 15465 0 R 15466 0 R 15467 0 R 15468 0 R 15469 0 R 15470 0 R 15471 0 R 15472 0 R 15473 0 R 15474 0 R 15475 0 R 15476 0 R 15477 0 R 15478 0 R 15479 0 R 15480 0 R 15481 0 R 15482 0 R 15483 0 R 15484 0 R 15485 0 R 15486 0 R 15487 0 R 15488 0 R 15489 0 R 15490 0 R 15491 0 R 15492 0 R 15493 0 R 15494 0 R 15495 0 R 15496 0 R 15497 0 R 15498 0 R 15499 0 R 15500 0 R 15501 0 R 15502 0 R 15503 0 R 15504 0 R 15505 0 R 15506 0 R 15507 0 R 15508 0 R 15509 0 R 15510 0 R 15511 0 R 15512 0 R 15513 0 R 15514 0 R 15515 0 R 15516 0 R 15517 0 R 15518 0 R 15519 0 R 15520 0 R 15521 0 R 15522 0 R 15523 0 R 15524 0 R 15525 0 R 15526 0 R 15527 0 R 15528 0 R 15529 0 R 15530 0 R 15531 0 R 15532 0 R 15533 0 R 15534 0 R 15535 0 R 15536 0 R 15537 0 R 15538 0 R 15539 0 R 15540 0 R 15541 0 R 15542 0 R 15543 0 R 15544 0 R 15545 0 R 15546 0 R 15547 0 R 15548 0 R 15549 0 R 15550 0 R 15551 0 R 15552 0 R 15553 0 R 15554 0 R 15555 0 R 15556 0 R 15557 0 R 15558 0 R 15559 0 R 15560 0 R 15561 0 R 15562 0 R 15563 0 R 15564 0 R 15565 0 R 15566 0 R 15567 0 R 15568 0 R 15569 0 R 15570 0 R 15571 0 R 15572 0 R 15573 0 R 15574 0 R 15575 0 R 15576 0 R 15577 0 R 15578 0 R 15579 0 R 15580 0 R 15581 0 R 15582 0 R 15583 0 R 15584 0 R 15585 0 R 15586 0 R 15587 0 R 15588 0 R 15589 0 R 15590 0 R 15591 0 R 15592 0 R 15593 0 R 15594 0 R 15595 0 R 15596 0 R 15597 0 R 15598 0 R 15599 0 R 15600 0 R 15601 0 R 15602 0 R 15603 0 R 15604 0 R 15605 0 R 15606 0 R 15607 0 R 15608 0 R 15609 0 R 15610 0 R ]
+/Parent 14959 0 R
+/Annots [ 15428 0 R 15433 0 R 15434 0 R 15435 0 R 15436 0 R 15437 0 R 15438 0 R 15439 0 R 15440 0 R 15441 0 R 15442 0 R 15443 0 R 15444 0 R 15445 0 R 15446 0 R 15447 0 R 15448 0 R 15449 0 R 15450 0 R 15451 0 R 15452 0 R 15453 0 R 15454 0 R 15455 0 R 15456 0 R 15457 0 R 15458 0 R 15459 0 R 15460 0 R 15461 0 R 15462 0 R 15463 0 R 15464 0 R 15465 0 R 15466 0 R 15467 0 R 15468 0 R 15469 0 R 15470 0 R 15471 0 R 15472 0 R 15473 0 R 15474 0 R 15475 0 R 15476 0 R 15477 0 R 15478 0 R 15479 0 R 15480 0 R 15481 0 R 15482 0 R 15483 0 R 15484 0 R 15485 0 R 15486 0 R 15487 0 R 15488 0 R 15489 0 R 15490 0 R 15491 0 R 15492 0 R 15493 0 R 15494 0 R 15495 0 R 15496 0 R 15497 0 R 15498 0 R 15499 0 R 15500 0 R 15501 0 R 15502 0 R 15503 0 R 15504 0 R 15505 0 R 15506 0 R 15507 0 R 15508 0 R 15509 0 R 15510 0 R 15511 0 R 15512 0 R 15513 0 R 15514 0 R 15515 0 R 15516 0 R 15517 0 R 15518 0 R 15519 0 R 15520 0 R 15521 0 R 15522 0 R 15523 0 R 15524 0 R 15525 0 R 15526 0 R 15527 0 R 15528 0 R 15529 0 R 15530 0 R 15531 0 R 15532 0 R 15533 0 R 15534 0 R 15535 0 R 15536 0 R 15537 0 R 15538 0 R 15539 0 R 15540 0 R 15541 0 R 15542 0 R 15543 0 R 15544 0 R 15545 0 R 15546 0 R 15547 0 R 15548 0 R 15549 0 R 15550 0 R 15551 0 R 15552 0 R 15553 0 R 15554 0 R 15555 0 R 15556 0 R 15557 0 R 15558 0 R 15559 0 R 15560 0 R 15561 0 R 15562 0 R 15563 0 R 15564 0 R 15565 0 R 15566 0 R 15567 0 R 15568 0 R 15569 0 R 15570 0 R 15571 0 R 15572 0 R 15573 0 R 15574 0 R 15575 0 R 15576 0 R 15577 0 R 15578 0 R 15579 0 R 15580 0 R 15581 0 R 15582 0 R 15583 0 R 15584 0 R 15585 0 R 15586 0 R 15587 0 R 15588 0 R 15589 0 R 15590 0 R 15591 0 R 15592 0 R 15593 0 R 15594 0 R 15595 0 R 15596 0 R 15597 0 R 15598 0 R 15599 0 R ]
 >> endobj
-15439 0 obj <<
+15428 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.199 646.546 248.555 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.195) >>
 >> endobj
-15444 0 obj <<
+15433 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [140.623 632.997 158.979 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.124) >>
 >> endobj
-15445 0 obj <<
+15434 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [163.653 632.997 182.009 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.200) >>
 >> endobj
-15446 0 obj <<
+15435 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.471 632.997 203.827 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.202) >>
 >> endobj
-15447 0 obj <<
+15436 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.502 632.997 226.858 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.572) >>
 >> endobj
-15448 0 obj <<
+15437 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [231.532 632.997 249.888 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.639) >>
 >> endobj
-15449 0 obj <<
+15438 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.047 619.448 162.949 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.87) >>
 >> endobj
-15450 0 obj <<
+15439 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [167.623 619.448 185.979 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.376) >>
 >> endobj
-15451 0 obj <<
+15440 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.653 619.448 209.009 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.377) >>
 >> endobj
-15452 0 obj <<
+15441 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.683 619.448 232.04 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.643) >>
 >> endobj
-15453 0 obj <<
+15442 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [168.912 605.899 181.813 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.79) >>
 >> endobj
-15454 0 obj <<
+15443 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [179.138 592.35 197.494 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.200) >>
 >> endobj
-15455 0 obj <<
+15444 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.198 578.8 211.555 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-15456 0 obj <<
+15445 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.168 565.251 210.524 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.123) >>
 >> endobj
-15457 0 obj <<
+15446 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.198 565.251 233.555 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.205) >>
 >> endobj
-15458 0 obj <<
+15447 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.471 551.702 214.827 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.189) >>
 >> endobj
-15459 0 obj <<
+15448 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.259 538.153 239.615 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.736) >>
 >> endobj
-15460 0 obj <<
+15449 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.562 524.604 208.464 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.94) >>
 >> endobj
-15461 0 obj <<
+15450 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.138 524.604 231.494 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.376) >>
 >> endobj
-15462 0 obj <<
+15451 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.32 511.054 222.676 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.214) >>
 >> endobj
-15463 0 obj <<
+15452 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.895 497.505 220.252 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-15464 0 obj <<
+15453 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [188.562 483.956 206.918 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.208) >>
 >> endobj
-15465 0 obj <<
+15454 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.895 470.407 198.797 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.64) >>
 >> endobj
-15466 0 obj <<
+15455 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [174.895 456.858 187.797 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.55) >>
 >> endobj
-15467 0 obj <<
+15456 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.471 456.858 210.827 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.749) >>
 >> endobj
-15468 0 obj <<
+15457 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.502 456.858 233.858 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.788) >>
 >> endobj
-15469 0 obj <<
+15458 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [238.532 456.858 256.888 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.796) >>
 >> endobj
-15470 0 obj <<
+15459 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.986 443.308 232.343 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.573) >>
 >> endobj
-15471 0 obj <<
+15460 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [188.865 429.759 207.221 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-15472 0 obj <<
+15461 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [187.38 416.21 205.736 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.193) >>
 >> endobj
-15473 0 obj <<
+15462 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.677 402.661 197.579 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.52) >>
 >> endobj
-15474 0 obj <<
+15463 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [203.916 402.661 216.818 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.53) >>
 >> endobj
-15475 0 obj <<
+15464 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.155 402.661 236.057 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.80) >>
 >> endobj
-15476 0 obj <<
+15465 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 402.661 260.751 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.108) >>
 >> endobj
-15477 0 obj <<
+15466 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 389.112 158.102 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.111) >>
 >> endobj
-15478 0 obj <<
+15467 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 389.112 181.132 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.112) >>
 >> endobj
-15479 0 obj <<
+15468 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.807 389.112 204.163 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.751) >>
 >> endobj
-15480 0 obj <<
+15469 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.017 375.562 217.918 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.64) >>
 >> endobj
-15481 0 obj <<
+15470 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.35 362.013 172.706 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.569) >>
 >> endobj
-15482 0 obj <<
+15471 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [132.926 348.464 151.282 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.765) >>
 >> endobj
-15483 0 obj <<
+15472 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [128.191 334.915 146.547 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.397) >>
 >> endobj
-15484 0 obj <<
+15473 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [151.031 334.915 169.388 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.399) >>
 >> endobj
-15485 0 obj <<
+15474 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.872 334.915 192.228 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.400) >>
 >> endobj
-15486 0 obj <<
+15475 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.713 334.915 215.069 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.405) >>
 >> endobj
-15487 0 obj <<
+15476 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.554 334.915 237.91 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.406) >>
 >> endobj
-15488 0 obj <<
+15477 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 334.915 260.751 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.408) >>
 >> endobj
-15489 0 obj <<
+15478 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 321.366 158.102 332.51]
 /Subtype /Link
 /A << /S /GoTo /D (page.488) >>
 >> endobj
-15490 0 obj <<
+15479 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 321.366 181.132 332.51]
 /Subtype /Link
 /A << /S /GoTo /D (page.538) >>
 >> endobj
-15491 0 obj <<
+15480 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.807 321.366 204.163 332.51]
 /Subtype /Link
 /A << /S /GoTo /D (page.548) >>
 >> endobj
-15492 0 obj <<
+15481 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.837 321.366 227.193 332.51]
 /Subtype /Link
 /A << /S /GoTo /D (page.749) >>
 >> endobj
-15493 0 obj <<
+15482 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [172.38 307.816 190.736 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.119) >>
 >> endobj
-15494 0 obj <<
+15483 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [137.592 294.267 155.949 305.411]
 /Subtype /Link
 /A << /S /GoTo /D (page.797) >>
 >> endobj
-15495 0 obj <<
+15484 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [131.714 280.718 150.07 292.286]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-15496 0 obj <<
+15485 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [128.683 267.169 147.039 278.737]
 /Subtype /Link
 /A << /S /GoTo /D (page.456) >>
 >> endobj
-15497 0 obj <<
+15486 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [151.714 267.169 170.07 278.737]
 /Subtype /Link
 /A << /S /GoTo /D (page.457) >>
 >> endobj
-15498 0 obj <<
+15487 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [174.744 267.169 193.1 278.737]
 /Subtype /Link
 /A << /S /GoTo /D (page.484) >>
 >> endobj
-15499 0 obj <<
+15488 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.774 267.169 216.13 278.737]
 /Subtype /Link
 /A << /S /GoTo /D (page.486) >>
 >> endobj
-15500 0 obj <<
+15489 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.805 267.169 239.161 278.737]
 /Subtype /Link
 /A << /S /GoTo /D (page.489) >>
 >> endobj
-15501 0 obj <<
+15490 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [149.58 253.62 162.482 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.98) >>
 >> endobj
-15502 0 obj <<
+15491 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [142.562 240.07 155.464 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.32) >>
 >> endobj
-15503 0 obj <<
+15492 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [159.168 240.07 177.524 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.200) >>
 >> endobj
-15504 0 obj <<
+15493 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [181.229 240.07 199.585 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.202) >>
 >> endobj
-15505 0 obj <<
+15494 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [203.047 240.07 221.403 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.204) >>
 >> endobj
-15506 0 obj <<
+15495 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [225.108 240.07 243.464 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.206) >>
 >> endobj
-15507 0 obj <<
+15496 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [247.168 240.07 265.524 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.207) >>
 >> endobj
-15508 0 obj <<
+15497 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 226.521 158.102 237.665]
 /Subtype /Link
 /A << /S /GoTo /D (page.209) >>
 >> endobj
-15509 0 obj <<
+15498 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [165.408 226.521 183.764 237.665]
 /Subtype /Link
 /A << /S /GoTo /D (page.210) >>
 >> endobj
-15510 0 obj <<
+15499 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.07 226.521 209.426 237.665]
 /Subtype /Link
 /A << /S /GoTo /D (page.213) >>
 >> endobj
-15511 0 obj <<
+15500 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.732 226.521 235.088 237.665]
 /Subtype /Link
 /A << /S /GoTo /D (page.214) >>
 >> endobj
-15512 0 obj <<
+15501 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 226.521 260.751 237.665]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-15513 0 obj <<
+15502 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 212.972 158.102 224.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.611) >>
 >> endobj
-15514 0 obj <<
+15503 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [165.408 212.972 183.764 224.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.706) >>
 >> endobj
-15515 0 obj <<
+15504 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.07 212.972 209.426 224.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.717) >>
 >> endobj
-15516 0 obj <<
+15505 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.732 212.972 235.088 224.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.726) >>
 >> endobj
-15517 0 obj <<
+15506 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 212.972 260.751 224.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.729) >>
 >> endobj
-15518 0 obj <<
+15507 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 201.544 158.102 210.567]
 /Subtype /Link
 /A << /S /GoTo /D (page.730) >>
 >> endobj
-15519 0 obj <<
+15508 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [129.016 185.874 141.918 197.442]
 /Subtype /Link
 /A << /S /GoTo /D (page.48) >>
 >> endobj
-15520 0 obj <<
+15509 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [145.646 185.874 158.547 197.442]
 /Subtype /Link
 /A << /S /GoTo /D (page.50) >>
 >> endobj
-15521 0 obj <<
+15510 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.276 185.874 175.177 197.442]
 /Subtype /Link
 /A << /S /GoTo /D (page.67) >>
 >> endobj
-15522 0 obj <<
+15511 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [178.905 185.874 191.807 197.442]
 /Subtype /Link
 /A << /S /GoTo /D (page.68) >>
 >> endobj
-15523 0 obj <<
+15512 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.535 185.874 208.437 197.442]
 /Subtype /Link
 /A << /S /GoTo /D (page.79) >>
 >> endobj
-15524 0 obj <<
+15513 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.165 185.874 225.067 197.442]
 /Subtype /Link
 /A << /S /GoTo /D (page.85) >>
 >> endobj
-15525 0 obj <<
+15514 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.795 185.874 241.696 197.442]
 /Subtype /Link
 /A << /S /GoTo /D (page.86) >>
 >> endobj
-15526 0 obj <<
+15515 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [245.425 185.874 258.326 197.442]
 /Subtype /Link
 /A << /S /GoTo /D (page.88) >>
 >> endobj
-15527 0 obj <<
+15516 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 172.324 152.648 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.90) >>
 >> endobj
-15528 0 obj <<
+15517 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [159.953 172.324 172.855 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.92) >>
 >> endobj
-15529 0 obj <<
+15518 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [176.317 172.324 189.219 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.95) >>
 >> endobj
-15530 0 obj <<
+15519 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.525 172.324 209.426 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.97) >>
 >> endobj
-15531 0 obj <<
+15520 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.732 172.324 235.088 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-15532 0 obj <<
+15521 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 172.324 260.751 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.104) >>
 >> endobj
-15533 0 obj <<
+15522 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 158.775 158.102 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.108) >>
 >> endobj
-15534 0 obj <<
+15523 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [161.564 158.775 179.92 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.111) >>
 >> endobj
-15535 0 obj <<
+15524 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.625 158.775 201.981 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.118) >>
 >> endobj
-15536 0 obj <<
+15525 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.685 158.775 224.042 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.164) >>
 >> endobj
-15537 0 obj <<
+15526 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.746 158.775 246.102 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.165) >>
 >> endobj
-15538 0 obj <<
+15527 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.807 158.775 268.163 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-15539 0 obj <<
+15528 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 145.226 158.102 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-15540 0 obj <<
+15529 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [165.408 145.226 183.764 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-15541 0 obj <<
+15530 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.07 145.226 209.426 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.225) >>
 >> endobj
-15542 0 obj <<
+15531 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.732 145.226 235.088 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.226) >>
 >> endobj
-15543 0 obj <<
+15532 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 145.226 260.751 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.234) >>
 >> endobj
-15544 0 obj <<
+15533 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 131.677 158.102 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-15545 0 obj <<
+15534 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [165.408 131.677 183.764 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.286) >>
 >> endobj
-15546 0 obj <<
+15535 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.07 131.677 209.426 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-15547 0 obj <<
+15536 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.732 131.677 235.088 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-15548 0 obj <<
+15537 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 131.677 260.751 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.376) >>
 >> endobj
-15549 0 obj <<
+15538 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 118.128 158.102 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.377) >>
 >> endobj
-15550 0 obj <<
+15539 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [161.807 118.128 180.163 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.505) >>
 >> endobj
-15551 0 obj <<
+15540 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.867 118.128 202.223 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.571) >>
 >> endobj
-15552 0 obj <<
+15541 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.928 118.128 224.284 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.573) >>
 >> endobj
-15553 0 obj <<
+15542 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.746 118.128 246.102 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.575) >>
 >> endobj
-15554 0 obj <<
+15543 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.807 118.128 268.163 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.579) >>
 >> endobj
-15555 0 obj <<
+15544 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 646.546 354.864 657.69]
 /Subtype /Link
 /A << /S /GoTo /D (page.582) >>
 >> endobj
-15556 0 obj <<
+15545 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.17 646.546 380.526 657.69]
 /Subtype /Link
 /A << /S /GoTo /D (page.594) >>
 >> endobj
-15557 0 obj <<
+15546 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.832 646.546 406.188 657.69]
 /Subtype /Link
 /A << /S /GoTo /D (page.717) >>
 >> endobj
-15558 0 obj <<
+15547 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.494 646.546 431.851 657.69]
 /Subtype /Link
 /A << /S /GoTo /D (page.723) >>
 >> endobj
-15559 0 obj <<
+15548 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 646.546 457.513 657.69]
 /Subtype /Link
 /A << /S /GoTo /D (page.758) >>
 >> endobj
-15560 0 obj <<
+15549 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 635.118 354.864 644.141]
 /Subtype /Link
 /A << /S /GoTo /D (page.797) >>
 >> endobj
-15561 0 obj <<
+15550 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [326.203 619.448 344.559 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.449) >>
 >> endobj
-15562 0 obj <<
+15551 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [349.233 619.448 367.59 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.457) >>
 >> endobj
-15563 0 obj <<
+15552 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [372.264 619.448 390.62 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-15564 0 obj <<
+15553 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [395.294 619.448 413.65 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-15565 0 obj <<
+15554 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.324 619.448 436.68 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-15566 0 obj <<
+15555 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.355 619.448 459.711 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.483) >>
 >> endobj
-15567 0 obj <<
+15556 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [319.082 605.899 337.438 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.467) >>
 >> endobj
-15568 0 obj <<
+15557 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [371.112 592.35 389.468 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-15569 0 obj <<
+15558 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [352.294 578.8 370.65 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.125) >>
 >> endobj
-15570 0 obj <<
+15559 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [339.142 565.251 357.499 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-15571 0 obj <<
+15560 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.173 565.251 380.529 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.483) >>
 >> endobj
-15572 0 obj <<
+15561 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [357.93 551.702 376.286 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-15573 0 obj <<
+15562 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [325.9 538.153 344.256 549.721]
 /Subtype /Link
 /A << /S /GoTo /D (page.456) >>
 >> endobj
-15574 0 obj <<
+15563 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [348.93 538.153 367.286 549.721]
 /Subtype /Link
-/A << /S /GoTo /D (page.459) >>
+/A << /S /GoTo /D (page.460) >>
 >> endobj
-15575 0 obj <<
+15564 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [371.961 538.153 390.317 549.721]
 /Subtype /Link
 /A << /S /GoTo /D (page.461) >>
 >> endobj
-15576 0 obj <<
+15565 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [329.082 524.604 347.438 536.172]
 /Subtype /Link
 /A << /S /GoTo /D (page.349) >>
 >> endobj
-15577 0 obj <<
+15566 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.445 511.054 380.802 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.375) >>
 >> endobj
-15578 0 obj <<
+15567 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [350.779 497.505 369.135 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.174) >>
 >> endobj
-15579 0 obj <<
+15568 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.324 483.956 434.68 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.323) >>
 >> endobj
-15580 0 obj <<
+15569 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.173 470.407 380.529 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.695) >>
 >> endobj
-15581 0 obj <<
+15570 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.203 470.407 403.559 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-15582 0 obj <<
+15571 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.688 456.858 432.044 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.343) >>
 >> endobj
-15583 0 obj <<
+15572 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.203 443.308 440.559 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.695) >>
 >> endobj
-15584 0 obj <<
+15573 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [427.93 429.759 446.287 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.345) >>
 >> endobj
-15585 0 obj <<
+15574 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [427.658 416.21 446.014 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.349) >>
 >> endobj
-15586 0 obj <<
+15575 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.536 402.661 410.893 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-15587 0 obj <<
+15576 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.627 389.112 406.984 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.306) >>
 >> endobj
-15588 0 obj <<
+15577 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.052 375.562 405.408 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.363) >>
 >> endobj
-15589 0 obj <<
+15578 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.627 362.013 412.983 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.729) >>
 >> endobj
-15590 0 obj <<
+15579 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [384.112 348.464 402.468 360.032]
 /Subtype /Link
 /A << /S /GoTo /D (page.174) >>
 >> endobj
-15591 0 obj <<
+15580 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.142 334.915 377.499 346.483]
 /Subtype /Link
 /A << /S /GoTo /D (page.325) >>
 >> endobj
-15592 0 obj <<
+15581 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [358.385 321.366 376.741 332.765]
 /Subtype /Link
 /A << /S /GoTo /D (page.368) >>
 >> endobj
-15593 0 obj <<
+15582 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [381.415 321.366 399.771 332.765]
 /Subtype /Link
 /A << /S /GoTo /D (page.369) >>
 >> endobj
-15594 0 obj <<
+15583 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.446 321.366 422.802 332.765]
 /Subtype /Link
 /A << /S /GoTo /D (page.561) >>
 >> endobj
-15595 0 obj <<
+15584 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.947 307.21 434.303 320.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.327) >>
 >> endobj
-15596 0 obj <<
+15585 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [348.189 294.267 366.545 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.322) >>
 >> endobj
-15597 0 obj <<
+15586 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.704 280.718 397.06 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.323) >>
 >> endobj
-15598 0 obj <<
+15587 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [436.037 267.169 454.394 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.314) >>
 >> endobj
-15599 0 obj <<
+15588 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.597 253.62 438.953 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.314) >>
 >> endobj
-15600 0 obj <<
+15589 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [325.824 240.07 344.18 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.769) >>
 >> endobj
-15601 0 obj <<
+15590 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [348.855 240.07 367.211 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.770) >>
 >> endobj
-15602 0 obj <<
+15591 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.264 226.521 424.62 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-15603 0 obj <<
+15592 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [351.809 212.972 370.165 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-15604 0 obj <<
+15593 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.385 199.423 405.741 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.381) >>
 >> endobj
-15605 0 obj <<
+15594 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 174.446 354.864 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.661) >>
 >> endobj
-15606 0 obj <<
+15595 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [323.021 158.775 341.377 170.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.764) >>
 >> endobj
-15607 0 obj <<
+15596 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [363.991 145.226 382.347 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.698) >>
 >> endobj
-15608 0 obj <<
+15597 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [323.93 131.677 342.286 143.076]
 /Subtype /Link
 /A << /S /GoTo /D (page.723) >>
 >> endobj
-15609 0 obj <<
+15598 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [346.961 131.677 365.317 143.076]
 /Subtype /Link
 /A << /S /GoTo /D (page.745) >>
 >> endobj
-15610 0 obj <<
+15599 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [356.658 118.128 375.014 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.319) >>
 >> endobj
-15617 0 obj <<
-/D [15615 0 R /XYZ 100.892 685.529 null]
+15606 0 obj <<
+/D [15604 0 R /XYZ 100.892 685.529 null]
 >> endobj
-15614 0 obj <<
+15603 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-15741 0 obj <<
+15729 0 obj <<
 /Length 1502      
 /Filter /FlateDecode
 >>
 stream
-xÚ­YËrÛ6Ýë+¸9SÒÄXºqâqÆIÔJ™v&Í‚‘`…
-%ª$•8ÓŸ/@HŠD$èz%}yîç>˜« 
-n'¿Î'W¯I€4© Áü! $,å"!óeð1äFŸæo®^CðDPŠµ(Jq”Hj„f»ÏËEňàðn³”úÉ«ùäŸ	PBJÍ	:I
-ëÉÇOi°Tÿ{¤	<øÞJ®DxB	QÁlòÛ$=5«ÉX$­iÚšé›û_Zý‡ƒ1B(Ä\t‡9’4õC!AøüqÄ %‹£ñ™-e5êubÞÞÙj'£Vt#›òð{YXV_ÍÃ]-«ÚŠ ï5LA相‘€H$‘¬®¿keµ¬íQêX[a´&
-£•Ùmé°­ãx¶k¾ÈŽE“/²&/7£‰xï´ŽñÒ
-É„Wb6Ê¥”œjŽ@h‹8 Ê!8¬¾•CžrdÈÎ桬Öö$cÝ`t³ÿ~qd7§Ø­VÙçB¥?„0¼Þ8?¸yþ¶T¿<\î
-ilTŒ&N鉄pv쵌¥‘>'˜*)~à´Öúë·QL	eV„&ŠÃ+£±õí‹KîÜŠ„ùç©Çè¼»µó^ü†)íþ»·üþ÷¶íi”ûÜ6WêÅæÅþnU¹¹²vh‚ü(7~r€÷Ýýitb¨2qZíÿ¶Æq⥧ÈSûoåƶÇ
-c⧖ϳè§9äB.s»=tàý½{-@"¥ä"–ÿvP?CóE.í¥Žz˜6FxyäÒ¤Hzä­zÿGÔöJ‹¼)+‡ÙÄÓlêiös—¥K§å<†°þJ.äÿç–£'JÓq`µlš|³²£ÁîUïô¬Ú“ @Än‰y‚r5Å@—ì(¬~ý’ùæ 
-†ù(ØÕ‡›ž®`¬ñ|TT‰Ý&þ¼6‰g9iñÜ'ñs¤ By²aÝ«a¿XˆûµØŒtïgwÚ›s¿â„Ÿ!ú}ˆÏñº¿j
-£	£0 'œº±Ÿz‹r×Ó¥@Ï"	ŽœQy­µ½¼×ç=S•ÆNð)pŽÃïvmììNTæËÃÜÐèæó‡#k-Çív£0SÇBã~u4ø¢ÕrfY{TF€é•€éN²Åk|ø£Î¯{O%”ש©ƒ”ÂÛªÜmªžx)­¬V7³E•o/½‚˜(ªV±ê–	µÊu'E!Üî´Î&ÅfE]ÚfFÄx\±Ý~QöÖ­½Ç±‘c|î—2Æa$ì’1ñq˜xM™­N
-=ñè€\çð0Î7°Ƕ†0e(‡~xœz≑	¿¡w÷:g+·ý5úýÎÝÌ\± }—Ã˲ʿi’r¬21 #îÛžš
-ëÉj[ÉÆ…KÄ(\½:Îòš
-„7Ò\›Ãž°{3æ	Ôc‰ƒ”'”vv5ÓéMtjíùÒ†¸#p\‰¸ö¸{qts¨qYa€×YÝ
-ÁçªlWÇîe1eOR²ýgû!õɉãZÛØ‹ÂNCðŠÆ‘+ć]a¯¨û€éÍ%Sqv™å6F̏Iµœ“
-ªä'õ“cl@Î’À>lÚÒþ%û]–¼JÃņɡóâKŠ¯{Ÿ¬ß,^~˜ÎìÛdš@ =xð‰c­×xñ‘$$†$NB™gÇÎ*i¿YC¬8½©\ø¼@8°Hžö
-Ö¤·¬äBªæ}!¤50ýVòAV•\šš`Ñšy¥ Ô+Å %ƒéÛÖŸ‘nòÚ¤”ãíÌYQ‡ÚþŸï»rˆœ›"ðo-ÿš´ÈjÇzž*_gÕ~·,×ú£™A,Má©Ê¢p¸ÉRà½rÎ …ý	~
-s_®¬_"Õ8¸?ÌwïfÆO=sK=-ëo‚}í`°ÿLú>t7.ÝßWóÉ›L(ä
+xÚ­Y[sÚF~çWè­b¦ÈÚËÙË£'gœ”2íLšÖD
+ *‰Ä™þùîjƒØ•×Oxä£ï\öìw.J£E”F·ƒ_¦ƒ«7F(Md*Q4}ˆ „§(bB& i4GcÁñðÓôíÕŒ#‘Hƨ%)M¸I­Ðdûùo5«‡#4¾[ÏÕ£ygðz:øg€´Vs„	!Ñl5øø)æúo£4!RDßÉUD@$@ÿ½Œ&ƒßé±Éœ&S™4¦kÆoïnôï_Œ>Ž!1²õ8vÈÑÒ4@ŽÄ@èéã4!’ •;F_T6WåE¯ƒ}{³Ì[5lDתbbåWûp[©²r"#,:
+ÓÐùzT«ÇÚˆEH&CK$«ªïFgQÎ+w”Z֏œ0F“1ÊܶʴßÖ=‚u<ÛÖ_ÔÚÄ¢ÎgY닐Á¼sÚÄxî„ä2(1$¿È¥Ž5QìŠ8BÚ!ܯ¾‘#rÐggýP”+w’ñv0ÚÙ?
+â‘=7g¹],²ÏKþãøzwàâpàöù»BÿŠx¾]*k£f4yLD&ÐɱWj(VVú”Lpª¥ÄžÓë¯ß
+G at PŒ; K0–ûW.Æ6·o$yBhëÞ0"í?=8Dçý­›ß
+â7ÊXwôß¿óàw¿·iN£Ø嶽R?­ÚÝ­2·WÖ
+
+$ŒrS&‡D×ݏÕ&ŽËÝßÎxAJiJåhØ9¡Kâ­ÝØt¸abaj9žE7ÍÙ /Õ<wÛÃzÞß¹× $êQy@Îbùoû34ŸåÊ]êXЁcdG>MšTq@Þê÷Ã^›b‘×Eé1Íffÿ°wYùt:Σë¯Ñ¥úŸá<ÁòôDizX¥ê:_/Üh¸}Õ[½…+w$ˆ¸mb2 1P®¦¯†#dÊõÖ0Š~‚äa†y¨‚Sq‘üêÃMGWp©ñ⢨‚Û&ñ²6É9iùÒ'MéK¤ Fy¶aí«á¾XD„µØz:È_'wº›ó°â‹d˜!‡}LOñÚ¿z
+c	g8,ŠŽÝØM=³Y±íèRp`‘ ú#gU^m¯îÍyOt¥qS ~œçðÛ]›Ç‚;'»#•ù|?7Ô¦ùüáÉZÇqûÝXÚ©cfp¿z‰BÑ*µÊö³¬;*€™•€íŽ²ÅkŽBø£Ê¯;O'TЩéE2€´ÂÛ²Øn<ªžy)¬VÕ“Y™oνÂ4Õ¹Uµ'@®§·§EØ~a€8[V…k$"Á‡7n¿h;ªÆ;ñqH¸ §öêÖÝa¤nՁõv¿úcÖ80=6:Äc=r­C¡¬?€kà€-pm¨Àax‚âÉ’aÃ*mïkNVi»ëñû¿I9;bÀº’ÞƼ̿òñ¬()‚îÑŽr-›©rSªÚ‡ò"\³ì9Ìè†âôo”½6ûý_ûf"*@,`93B©Hkí`Æã›á±µ§ËðGà°êðígqo½¯]ÙÒ¯²ªÞüç²hVÂþ%0ãÏR²yŠ³{=†äÄa]mí%ñ¯¡Ec‡(4âÃvé®”=sþø朩?Ïr£IƤF.„I%Ór$…ÉqÞ#çHà6mhÿœýÎKDA¥álsäÑyö…ć׾OÎo¯>Œ'î-1K0Â<„®õ°4x£I †]ý¦	r–y£ìÀY©Ü7«Ç7•g1‹_v³‡{Ä㮁:»¼RÍ”nÊgÊCZ=Sm©TYª¹­	–9ÁIPŠ!`A)†ô¦?êm`\Û|íäuIiǛ햷¢öµóOïûrHôœ›&ðo
+ÿÚ4Ë*ÏÚõž2_eånË6/Væc˜E,lá)‹åÒã&OQ8öÂ;G w'ø1Ì}±p~aÔcá0ܽŸX?Í,­Ìl¾õuµ_ˆãî3éZ÷·7)íß×ÓÁÂq º
 endstream
 endobj
-15740 0 obj <<
+15728 0 obj <<
 /Type /Page
-/Contents 15741 0 R
-/Resources 15739 0 R
+/Contents 15729 0 R
+/Resources 15727 0 R
 /MediaBox [0 0 612 792]
-/Parent 15743 0 R
-/Annots [ 15611 0 R 15612 0 R 15613 0 R 15618 0 R 15619 0 R 15620 0 R 15621 0 R 15622 0 R 15623 0 R 15624 0 R 15625 0 R 15626 0 R 15627 0 R 15628 0 R 15629 0 R 15630 0 R 15631 0 R 15632 0 R 15633 0 R 15634 0 R 15635 0 R 15636 0 R 15637 0 R 15638 0 R 15639 0 R 15640 0 R 15641 0 R 15642 0 R 15643 0 R 15644 0 R 15645 0 R 15646 0 R 15647 0 R 15648 0 R 15649 0 R 15650 0 R 15651 0 R 15652 0 R 15653 0 R 15654 0 R 15655 0 R 15656 0 R 15657 0 R 15658 0 R 15659 0 R 15660 0 R 15661 0 R 15662 0 R 15663 0 R 15664 0 R 15665 0 R 15666 0 R 15667 0 R 15668 0 R 15669 0 R 15670 0 R 15671 0 R 15672 0 R 15673 0 R 15674 0 R 15675 0 R 15676 0 R 15677 0 R 15678 0 R 15679 0 R 15680 0 R 15681 0 R 15682 0 R 15683 0 R 15684 0 R 15685 0 R 15686 0 R 15687 0 R 15688 0 R 15689 0 R 15690 0 R 15691 0 R 15692 0 R 15693 0 R 15694 0 R 15695 0 R 15696 0 R 15697 0 R 15698 0 R 15699 0 R 15700 0 R 15701 0 R 15702 0 R 15703 0 R 15704 0 R 15705 0 R 15706 0 R 15707 0 R 15708 0 R 15709 0 R 15710 0 R 15711 0 R 15712 0 R 15713 0 R 15714 0 R 15715 0 R 15716 0 R 15717 0 R 15718 0 R 15719 0 R 15720 0 R 15721 0 R 15722 0 R 15723 0 R 15724 0 R 15725 0 R 15726 0 R 15727 0 R 15728 0 R 15729 0 R 15730 0 R 15731 0 R 15732 0 R 15733 0 R 15734 0 R 15735 0 R 15736 0 R 15737 0 R ]
+/Parent 15731 0 R
+/Annots [ 15600 0 R 15601 0 R 15602 0 R 15607 0 R 15608 0 R 15609 0 R 15610 0 R 15611 0 R 15612 0 R 15613 0 R 15614 0 R 15615 0 R 15616 0 R 15617 0 R 15618 0 R 15619 0 R 15620 0 R 15621 0 R 15622 0 R 15623 0 R 15624 0 R 15625 0 R 15626 0 R 15627 0 R 15628 0 R 15629 0 R 15630 0 R 15631 0 R 15632 0 R 15633 0 R 15634 0 R 15635 0 R 15636 0 R 15637 0 R 15638 0 R 15639 0 R 15640 0 R 15641 0 R 15642 0 R 15643 0 R 15644 0 R 15645 0 R 15646 0 R 15647 0 R 15648 0 R 15649 0 R 15650 0 R 15651 0 R 15652 0 R 15653 0 R 15654 0 R 15655 0 R 15656 0 R 15657 0 R 15658 0 R 15659 0 R 15660 0 R 15661 0 R 15662 0 R 15663 0 R 15664 0 R 15665 0 R 15666 0 R 15667 0 R 15668 0 R 15669 0 R 15670 0 R 15671 0 R 15672 0 R 15673 0 R 15674 0 R 15675 0 R 15676 0 R 15677 0 R 15678 0 R 15679 0 R 15680 0 R 15681 0 R 15682 0 R 15683 0 R 15684 0 R 15685 0 R 15686 0 R 15687 0 R 15688 0 R 15689 0 R 15690 0 R 15691 0 R 15692 0 R 15693 0 R 15694 0 R 15695 0 R 15696 0 R 15697 0 R 15698 0 R 15699 0 R 15700 0 R 15701 0 R 15702 0 R 15703 0 R 15704 0 R 15705 0 R 15706 0 R 15707 0 R 15708 0 R 15709 0 R 15710 0 R 15711 0 R 15712 0 R 15713 0 R 15714 0 R 15715 0 R 15716 0 R 15717 0 R 15718 0 R 15719 0 R 15720 0 R 15721 0 R 15722 0 R 15723 0 R 15724 0 R 15725 0 R ]
 >> endobj
-15611 0 obj <<
+15600 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.22 646.546 195.576 658.115]
 /Subtype /Link
 /A << /S /GoTo /D (page.489) >>
 >> endobj
-15612 0 obj <<
+15601 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.25 646.546 218.607 658.115]
 /Subtype /Link
 /A << /S /GoTo /D (page.500) >>
 >> endobj
-15613 0 obj <<
+15602 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.281 646.546 241.637 658.115]
 /Subtype /Link
 /A << /S /GoTo /D (page.534) >>
 >> endobj
-15618 0 obj <<
+15607 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.402 632.997 230.758 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.534) >>
 >> endobj
-15619 0 obj <<
+15608 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [257.25 619.448 275.607 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.128) >>
 >> endobj
-15620 0 obj <<
+15609 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [225.085 592.35 237.986 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.54) >>
 >> endobj
-15621 0 obj <<
+15610 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.796 578.8 218.152 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.190) >>
 >> endobj
-15622 0 obj <<
+15611 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [272.22 565.251 290.576 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.190) >>
 >> endobj
-15623 0 obj <<
+15612 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.917 551.702 259.819 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.79) >>
 >> endobj
-15624 0 obj <<
+15613 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [264.493 551.702 277.394 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.97) >>
 >> endobj
-15625 0 obj <<
+15614 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [250.666 538.153 269.022 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.192) >>
 >> endobj
-15626 0 obj <<
+15615 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.45 538.153 291.806 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.193) >>
 >> endobj
-15627 0 obj <<
+15616 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [296.234 538.153 314.59 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.195) >>
 >> endobj
-15628 0 obj <<
+15617 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [202.614 524.604 220.97 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.779) >>
 >> endobj
-15629 0 obj <<
+15618 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [178.129 511.054 196.485 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.394) >>
 >> endobj
-15630 0 obj <<
+15619 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [181.538 456.858 199.894 468.426]
 /Subtype /Link
 /A << /S /GoTo /D (page.461) >>
 >> endobj
-15631 0 obj <<
+15620 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.569 456.858 222.925 468.426]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-15632 0 obj <<
+15621 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.978 443.308 201.334 454.877]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-15633 0 obj <<
+15622 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.978 429.759 243.334 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.453) >>
 >> endobj
-15634 0 obj <<
+15623 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [248.008 429.759 266.364 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.501) >>
 >> endobj
-15635 0 obj <<
+15624 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [271.038 429.759 289.394 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.518) >>
 >> endobj
-15636 0 obj <<
+15625 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.826 416.21 238.182 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-15637 0 obj <<
+15626 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.856 416.21 261.213 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.403) >>
 >> endobj
-15638 0 obj <<
+15627 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [265.887 416.21 284.243 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.404) >>
 >> endobj
-15639 0 obj <<
+15628 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [288.917 416.21 307.273 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.416) >>
 >> endobj
-15640 0 obj <<
+15629 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.705 402.661 236.061 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.455) >>
 >> endobj
-15641 0 obj <<
+15630 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [240.735 402.661 259.091 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.475) >>
 >> endobj
-15642 0 obj <<
+15631 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [263.766 402.661 282.122 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.507) >>
 >> endobj
-15643 0 obj <<
+15632 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.159 389.112 209.516 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.607) >>
 >> endobj
-15644 0 obj <<
+15633 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.887 375.562 227.243 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.604) >>
 >> endobj
-15645 0 obj <<
+15634 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.705 375.562 249.061 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.607) >>
 >> endobj
-15646 0 obj <<
+15635 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.038 362.013 211.394 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.604) >>
 >> endobj
-15647 0 obj <<
+15636 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.069 362.013 234.425 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.609) >>
 >> endobj
-15648 0 obj <<
+15637 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.281 348.464 210.637 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.728) >>
 >> endobj
-15649 0 obj <<
+15638 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.735 334.915 239.091 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.605) >>
 >> endobj
-15650 0 obj <<
+15639 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [243.766 334.915 262.122 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.606) >>
 >> endobj
-15651 0 obj <<
+15640 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.402 321.366 235.758 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.604) >>
 >> endobj
-15652 0 obj <<
+15641 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [203.432 307.816 221.788 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.609) >>
 >> endobj
-15653 0 obj <<
+15642 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [207.735 294.267 226.091 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-15654 0 obj <<
+15643 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [225.978 280.718 244.334 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.203) >>
 >> endobj
-15655 0 obj <<
+15644 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.705 267.169 216.061 278.313]
 /Subtype /Link
 /A << /S /GoTo /D (page.169) >>
 >> endobj
-15656 0 obj <<
+15645 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.19 253.014 244.546 265.915]
 /Subtype /Link
 /A << /S /GoTo /D (page.366) >>
 >> endobj
-15657 0 obj <<
+15646 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.705 240.07 216.061 251.214]
 /Subtype /Link
 /A << /S /GoTo /D (page.169) >>
 >> endobj
-15658 0 obj <<
+15647 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.735 240.07 239.091 251.214]
 /Subtype /Link
 /A << /S /GoTo /D (page.748) >>
 >> endobj
-15659 0 obj <<
+15648 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.947 225.915 245.303 238.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.366) >>
 >> endobj
-15660 0 obj <<
+15649 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.705 212.972 216.061 224.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.169) >>
 >> endobj
-15661 0 obj <<
+15650 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.947 198.817 245.303 211.718]
 /Subtype /Link
 /A << /S /GoTo /D (page.366) >>
 >> endobj
-15662 0 obj <<
+15651 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.705 185.874 216.061 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.169) >>
 >> endobj
-15663 0 obj <<
+15652 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.19 171.718 244.546 184.62]
 /Subtype /Link
 /A << /S /GoTo /D (page.366) >>
 >> endobj
-15664 0 obj <<
+15653 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.705 158.775 216.061 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.169) >>
 >> endobj
-15665 0 obj <<
+15654 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.19 144.62 244.546 157.522]
 /Subtype /Link
 /A << /S /GoTo /D (page.366) >>
 >> endobj
-15666 0 obj <<
+15655 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.008 131.677 200.364 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.389) >>
 >> endobj
-15667 0 obj <<
+15656 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.038 131.677 223.394 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.754) >>
 >> endobj
-15668 0 obj <<
+15657 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.462 118.128 204.364 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.94) >>
 >> endobj
-15669 0 obj <<
+15658 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [209.038 118.128 227.394 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.199) >>
 >> endobj
-15670 0 obj <<
+15659 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.069 118.128 250.425 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.223) >>
 >> endobj
-15671 0 obj <<
+15660 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.099 118.128 273.455 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.249) >>
 >> endobj
-15672 0 obj <<
+15661 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.528 646.546 446.884 658.115]
 /Subtype /Link
 /A << /S /GoTo /D (page.204) >>
 >> endobj
-15673 0 obj <<
+15662 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [451.558 646.546 469.914 658.115]
 /Subtype /Link
 /A << /S /GoTo /D (page.258) >>
 >> endobj
-15674 0 obj <<
+15663 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.497 632.997 438.854 644.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.728) >>
 >> endobj
-15675 0 obj <<
+15664 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.74 619.448 437.096 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.318) >>
 >> endobj
-15676 0 obj <<
+15665 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.77 619.448 460.126 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.320) >>
 >> endobj
-15677 0 obj <<
+15666 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [427.619 605.899 445.975 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.199) >>
 >> endobj
-15678 0 obj <<
+15667 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.255 592.35 433.611 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.691) >>
 >> endobj
-15679 0 obj <<
+15668 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [437.74 578.8 456.096 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.691) >>
 >> endobj
-15680 0 obj <<
+15669 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [455.952 565.251 474.308 576.819]
 /Subtype /Link
 /A << /S /GoTo /D (page.371) >>
 >> endobj
-15681 0 obj <<
+15670 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.437 551.702 436.793 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.218) >>
 >> endobj
-15682 0 obj <<
+15671 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.467 551.702 459.823 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.219) >>
 >> endobj
-15683 0 obj <<
+15672 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [409.452 538.153 427.808 549.721]
 /Subtype /Link
 /A << /S /GoTo /D (page.219) >>
 >> endobj
-15684 0 obj <<
+15673 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [432.482 538.153 450.838 549.721]
 /Subtype /Link
 /A << /S /GoTo /D (page.223) >>
 >> endobj
-15685 0 obj <<
+15674 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.8 524.604 421.157 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.449) >>
 >> endobj
-15686 0 obj <<
+15675 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [424.861 524.604 443.217 536.293]
+/Rect [409.378 511.054 427.734 522.198]
 /Subtype /Link
 /A << /S /GoTo /D (page.456) >>
 >> endobj
-15687 0 obj <<
+15676 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [409.378 511.054 427.734 522.198]
-/Subtype /Link
-/A << /S /GoTo /D (page.457) >>
->> endobj
-15688 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.196 511.054 449.553 522.198]
 /Subtype /Link
 /A << /S /GoTo /D (page.459) >>
 >> endobj
-15689 0 obj <<
+15677 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.257 511.054 471.613 522.198]
 /Subtype /Link
 /A << /S /GoTo /D (page.461) >>
 >> endobj
-15690 0 obj <<
+15678 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [475.318 511.054 493.674 522.198]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-15691 0 obj <<
+15679 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [497.378 511.054 515.734 522.198]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-15692 0 obj <<
+15680 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 497.505 405.674 508.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-15693 0 obj <<
+15681 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.98 497.505 431.336 508.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.479) >>
 >> endobj
-15694 0 obj <<
+15682 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.642 497.505 456.998 508.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-15695 0 obj <<
+15683 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.304 497.505 482.66 508.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.486) >>
 >> endobj
-15696 0 obj <<
+15684 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 497.505 508.322 508.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.489) >>
 >> endobj
-15697 0 obj <<
+15685 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 483.956 405.674 495.1]
 /Subtype /Link
 /A << /S /GoTo /D (page.491) >>
 >> endobj
-15698 0 obj <<
+15686 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.348 483.956 428.704 495.1]
 /Subtype /Link
 /A << /S /GoTo /D (page.493) >>
 >> endobj
-15699 0 obj <<
+15687 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.544 470.407 410.9 481.975]
 /Subtype /Link
 /A << /S /GoTo /D (page.459) >>
 >> endobj
-15700 0 obj <<
+15688 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [435.346 456.858 453.702 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.415) >>
 >> endobj
-15701 0 obj <<
+15689 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [458.103 443.308 476.46 454.877]
 /Subtype /Link
 /A << /S /GoTo /D (page.459) >>
 >> endobj
-15702 0 obj <<
+15690 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.194 402.661 462.551 414.229]
 /Subtype /Link
 /A << /S /GoTo /D (page.541) >>
 >> endobj
-15703 0 obj <<
+15691 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [477.134 389.112 495.49 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.167) >>
 >> endobj
-15704 0 obj <<
+15692 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [432.679 375.562 451.035 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.405) >>
 >> endobj
-15705 0 obj <<
+15693 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.649 362.013 431.005 373.581]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-15706 0 obj <<
+15694 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.77 348.464 407.672 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.67) >>
 >> endobj
-15707 0 obj <<
+15695 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [376.815 334.915 395.171 346.483]
 /Subtype /Link
 /A << /S /GoTo /D (page.415) >>
 >> endobj
-15708 0 obj <<
+15696 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.445 334.915 417.802 346.483]
 /Subtype /Link
 /A << /S /GoTo /D (page.459) >>
 >> endobj
-15709 0 obj <<
+15697 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.076 334.915 440.432 346.483]
 /Subtype /Link
 /A << /S /GoTo /D (page.461) >>
 >> endobj
-15710 0 obj <<
+15698 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.706 334.915 463.062 346.483]
 /Subtype /Link
 /A << /S /GoTo /D (page.463) >>
 >> endobj
-15711 0 obj <<
+15699 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [467.336 334.915 485.692 346.483]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-15712 0 obj <<
+15700 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 334.915 508.322 346.483]
 /Subtype /Link
 /A << /S /GoTo /D (page.477) >>
 >> endobj
-15713 0 obj <<
+15701 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 321.366 405.674 332.51]
 /Subtype /Link
 /A << /S /GoTo /D (page.479) >>
 >> endobj
-15714 0 obj <<
+15702 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [409.378 321.366 427.734 332.51]
 /Subtype /Link
 /A << /S /GoTo /D (page.489) >>
 >> endobj
-15715 0 obj <<
+15703 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.196 321.366 449.553 332.51]
 /Subtype /Link
 /A << /S /GoTo /D (page.491) >>
 >> endobj
-15716 0 obj <<
+15704 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.257 321.366 471.613 332.51]
 /Subtype /Link
 /A << /S /GoTo /D (page.507) >>
 >> endobj
-15717 0 obj <<
+15705 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [475.318 321.366 493.674 332.51]
 /Subtype /Link
 /A << /S /GoTo /D (page.534) >>
 >> endobj
-15718 0 obj <<
+15706 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [497.378 321.366 515.734 332.51]
 /Subtype /Link
 /A << /S /GoTo /D (page.541) >>
 >> endobj
-15719 0 obj <<
+15707 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [408.255 294.267 426.611 305.835]
 /Subtype /Link
 /A << /S /GoTo /D (page.459) >>
 >> endobj
-15720 0 obj <<
+15708 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [381.619 280.718 399.975 292.286]
 /Subtype /Link
 /A << /S /GoTo /D (page.462) >>
 >> endobj
-15721 0 obj <<
+15709 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.649 280.718 423.005 292.286]
 /Subtype /Link
 /A << /S /GoTo /D (page.475) >>
 >> endobj
-15722 0 obj <<
+15710 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [427.679 280.718 446.035 292.286]
 /Subtype /Link
 /A << /S /GoTo /D (page.526) >>
 >> endobj
-15723 0 obj <<
+15711 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [375.497 267.169 393.853 278.737]
 /Subtype /Link
 /A << /S /GoTo /D (page.365) >>
 >> endobj
-15724 0 obj <<
+15712 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.679 253.62 424.035 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.166) >>
 >> endobj
-15725 0 obj <<
+15713 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.619 240.07 443.52 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-15726 0 obj <<
+15714 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [447.225 240.07 465.581 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-15727 0 obj <<
+15715 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [469.285 240.07 487.641 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.165) >>
 >> endobj
-15728 0 obj <<
+15716 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [491.104 240.07 509.46 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.168) >>
 >> endobj
-15729 0 obj <<
+15717 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 228.642 405.674 237.665]
 /Subtype /Link
 /A << /S /GoTo /D (page.751) >>
 >> endobj
-15730 0 obj <<
+15718 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.77 212.972 410.126 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-15731 0 obj <<
+15719 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [396.073 199.423 414.429 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-15732 0 obj <<
+15720 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.134 185.874 434.49 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.617) >>
 >> endobj
-15733 0 obj <<
+15721 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [479.71 172.324 498.066 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.701) >>
 >> endobj
-15734 0 obj <<
+15722 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.013 158.775 441.369 170.175]
 /Subtype /Link
 /A << /S /GoTo /D (page.102) >>
 >> endobj
-15735 0 obj <<
+15723 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.316 145.226 444.672 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.618) >>
 >> endobj
-15736 0 obj <<
+15724 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [459.861 131.677 478.217 143.245]
 /Subtype /Link
 /A << /S /GoTo /D (page.172) >>
 >> endobj
-15737 0 obj <<
+15725 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [377.497 118.128 395.854 129.527]
 /Subtype /Link
 /A << /S /GoTo /D (page.389) >>
 >> endobj
-15742 0 obj <<
-/D [15740 0 R /XYZ 151.701 685.529 null]
+15730 0 obj <<
+/D [15728 0 R /XYZ 151.701 685.529 null]
 >> endobj
-15739 0 obj <<
+15727 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-15876 0 obj <<
-/Length 1472      
+15865 0 obj <<
+/Length 1467      
 /Filter /FlateDecode
 >>
 stream
-xÚ­YMsÛ6½ëWðÐ5SÑÄ'‰cÓØ­3ÓŽ:öÍ́"™	EÊå$“?€”IÄ…‹%ÁË·ìb÷í2ÖAü5{s?»ºÁ8H#Á9
-î?(Ž£Tà€§"bB/ÁCx·[}”y7_FÃÛº_æïïß]Ý°XËG"È<JˆˆR’hàþ¡4!Fjv}?{š!½ª…àYDHofïã Ðÿ{Äið¹—Ü„¥gL¯‚»Ù³øØdÄŽ#¬AQp*¢~FýÓNîägGƒ‡!$¤§‹q°@$bTÏ©í|Ó°þV²…`,ˆf€¶mYÏ5†96ýD–çÍN/$aWÖk+(IÙEÓŽ1ÆaÞl6Y]Œ 0e!gP¡EŽj9c!cñ„œ	vº/J§è=M r4d†ÇèÙ¦ãÎܸ?teU<Ú}<Uÿ#ºÞµYW6µ#&`{&©°ª¶£ìñ¹l›zŽÂÍ|ú%ý‡©Ï¾Ì¦ªN¶ö8§ã=]†ûج§ÃÂÆÏ+ZÝ»£;ugÛ9$—Jùž„Ýk®”fŽ‚ÂŽq˜F ¨£‰×Ñ>íš.³1î¤dûl"Ø‘†‡GÂ=h-séð¤Ôi•qU– øƒî׿ªNnìçN½®¢êt¦R]™«_âÅÝê‚i$…Åꨄ]VÚIÕ£á6[;&0ÄlUI‡M£¬ýí|aÊîåAKžmífÒ¶çûZ
-ªüp&Á-“8ߝÅ/`ŒÀÂ9“¸ÈôA1Vg{–@˜cšƒcãfž’°i7Yç%#ëe«§I˜›ÒÂE
-Ià"F
-ƒœ ÉÑI½G^ÙG?EÓaÆ>ät8JʀǁxSá}æ'J¬t³F’’äÄã
-ôAdº®kËÕN'Û}®Ý­*Í4Ke¨æ£ùæ`DIœx„«ÖTÈÙ®:¤t]ú+Ø”šs5µ‹¥Omùl¤1ÞÑB	XK £–È‘Ûí&î×2+Ùò¨o—Ð{’/a›|9¾‚ÑX?êU.dØSy™[{;ˆÈÏɺñÔ”eÓoâB·†©§cÜ	ÞHF¼ñü3@‚G	ÇÃi¤÷éÒ\®½/}ÁFšºìšÖžX„gbiVóã¡|¹†\rßòpi:–¦ÏP.Ưc‚xšy©)ô¼æê1kݍà/€R°I…“³ÈoSöî¶ÓU굶(ȼÐQ“F`5û:k'kæ˜'
-érŒUCÕŒ’†Ù‡ÿ\Yë‚‘ý°i®/SVVΞ	1̆êÐŽ›„•»GgРµÝEJR
-0í6J¨E2x–ÖgÔNP–öè íNÌ@íõl~Ì#Vý€B>ffù¹t$lð”ðnžU•åc.¨º1¿?› ³ž¸šüÂì¶ûñLÛÁ†QÎI/÷Uí1d‚)çÉ ‘‚­¬²N‡ûÜ™Eå5߶ÁF]±²ÏMÜÕ
-Ç/”RÅ^dé<£›Pl0caV©fxäôI#LÄá‘û·o†w4÷7NÛŠIDìEgÙ6V+hª·Çέ°èFi¤sÝAðún¹çǃ/ª궫¾Ó”fq	ŠFG9$ëNÒEiozø´«OÖm³ÛÚ$&ÌëSÏç¿šá‡ý†N©SÀZvÝïïè'ûåSyä"¦ƒ\pðÖ¯þùÃÔÒ?ÿ¾ý÷:ºÓþ¼}k½-‚€•Ì[Ùõ÷9ê4b±z)bYIÇ@“–Ú¦›ÿAËiß2¼U}…f-ǧí'Š‡{!+»Cc
-ÛÆBw?GéÕ$Œl»­Ê¼ï‰”uÞÉ)‚§ïµGfîÖÀñãº9€û $D1ÈqÃ9ÒK&»ze
-:£{MvN?ãåÏcÞûM©r]Ëä³óÏëûÙw³»
+xÚµYMsÛ6½ëWðÐ5SÑÄ'‰cÓØ­3ÓŽ:öÍ́"™	EÊå$“?_€”IÄ…^,	^¾]`»o—q°âàÙ›ûÙÕ
+ÆA	Îipÿ!@q¥<z©»Ýê£Ì»ù‚0ÞÖ…ü2ÿîê†ÅZ>±@æQBD”’D÷¥	1R³ëûÙÓéU-|Ï"B‚|3{x…þß» ŽˆHƒÏ½ä& ,8cú{ÜÍþ™ÅÇ&#v¬a
+Š’€SõÛ0êŸvr'í-8<<,!!=]Œƒ"£bxNm眆Íð·’-cD$0Ø ´mËz®1̱é'²<ovz!	»²^[AIÊ.šv„ˆ1óf³Éêb…)‰8ƒz-rTË	€iƒðhŒ'äL°Ó}Q:mDèi£!#0<FÏ6µ°wæÆý¡+«âÑîã	¬úßÑõ®Íº²©1Û3I…Uµ=eˆÏeÛÔsnæÔ/éÿ;ŒH}öe6Uu²µÇ9ïé2ÜÇfå8í6~^ÑêìÞÝ©Ë8ÛvÈ!¹TÊ÷$ì^s¥4svˆÃä0EM¼Žöi×t™ˆy­’í³‰`GvFv	÷ µÌ¥Ã“~P§UÆUX‚<âcº_ÿª:¹±Ÿ;õºŠªÓ™Jue®~Šw«¦‘«£vYi'Uÿ†Ûlí ˜À³U%6²ö·ó…)»—-y¶µ›ISPpØžïk5¨òÙÿ¹Lâ|w.<†^À81„s&q‘!èƒb¬Î6ö,0Æ4ÇÆÍ<%aÓn²Î+JFÖËVO“0+6¥…‹0’ÀEŒ 9’£“z¼²~Š¦ÃŒ%:|0Èép””ñ¦ÂûÌO” Xéf1Œ$#$ɉÇèƒÈt;]×–«N¶û\»[Uši–ÊPÍGóÍÁˆ’8ñW­©²]uHéºôV°)5çjjK'ž*ÚòÙ,Hc¼£„°– F-‘#·ÛMܯeV²åQß.¡÷$_Â6ùr|£±~
+Ô«\È°§ò2·öv:‘Ÿ“uã©)˦ßÄ…n
+SOǸ¼‘Œxãùg€Ž†ÓHïÓ¥¹\;{_ú‚4uÙ5­=±ÏÄÒ¬æÆC3ør¹ä¾å9àÒt,MŸ¡\Œ_Çñ4óRSèyÍÕcÖ:ºÁ_ ¥`“
+'g‘_¦ìÝm§«ÔkmQy¡£&#ŒÀjöuÖNÖÌ1OÒå«.†*ª%
+³/ÿ¹²Ö#ûaÓ\_¦¬¬œ=r4Ì«ú„•»GgРµÝE*LÔO»mc 9Kë3ê
+§¨{¬Éöè5ƒVÿü/mÔ÷¹ÅªdÈÇÌ,?—ŽÄž&~Çͳªò£†ÌU7æ÷gˆÖƒ«ÎaÍn»ã´lhåœs_Õà ˜rž)qÑÊ*ëdq¸÷YT^splÔ+ûìÁÑì]Ý0qüâ)eQÌÑá…—ÎGºYÕI	3f•j†GNßU‘4ÂD¹ûfx—ÃpŸ´­˜DÄ^œ–mcµ‚¦z{ìÜ
+‹n”F:'¯ï–{^r< £ú§nÏšá;MÉ`ç‘ ht”CRïä ]”öæˆO»úhÝ6»­½bÂü°>õ¼ÿ«’Øoè4á:¬e7ÜùþŽ~²ßQ>•G.b:Hoýê¯ßLÍýýÏÛ¿¯£;íÏÛ·ÖÛ"Qɼ•]Ÿ£N#«—"–•t^1Ia©mzH0h9ío†·¯¯Ð¬åøÔ@þDñ0Š/dewhLaÛXè.é(½š„‘m·U™÷½“²ÎE9E0ðâôý´VâȬÓ]ý 8~\÷ë!p$”„(æ 9rØ '@zÉd÷o¡, ¨qt‚a|êœ~,ƃÍǼ÷›R庖ÈgçŸ×÷³ÿ -ÎÂê
 endstream
 endobj
-15875 0 obj <<
+15864 0 obj <<
 /Type /Page
-/Contents 15876 0 R
-/Resources 15874 0 R
+/Contents 15865 0 R
+/Resources 15863 0 R
 /MediaBox [0 0 612 792]
-/Parent 15743 0 R
-/Annots [ 15738 0 R 15744 0 R 15745 0 R 15746 0 R 15747 0 R 15748 0 R 15749 0 R 15750 0 R 15751 0 R 15752 0 R 15753 0 R 15754 0 R 15755 0 R 15756 0 R 15757 0 R 15758 0 R 15759 0 R 15760 0 R 15761 0 R 15762 0 R 15763 0 R 15764 0 R 15765 0 R 15766 0 R 15767 0 R 15768 0 R 15769 0 R 15770 0 R 15771 0 R 15772 0 R 15773 0 R 15774 0 R 15775 0 R 15776 0 R 15777 0 R 15778 0 R 15779 0 R 15780 0 R 15781 0 R 15782 0 R 15783 0 R 15784 0 R 15785 0 R 15786 0 R 15787 0 R 15788 0 R 15789 0 R 15790 0 R 15791 0 R 15792 0 R 15793 0 R 15794 0 R 15795 0 R 15796 0 R 15797 0 R 15798 0 R 15799 0 R 15800 0 R 15801 0 R 15802 0 R 15803 0 R 15804 0 R 15805 0 R 15806 0 R 15807 0 R 15808 0 R 15809 0 R 15810 0 R 15811 0 R 15812 0 R 15813 0 R 15814 0 R 15815 0 R 15816 0 R 15817 0 R 15818 0 R 15819 0 R 15820 0 R 15821 0 R 15822 0 R 15823 0 R 15824 0 R 15825 0 R 15826 0 R 15827 0 R 15828 0 R 15829 0 R 15830 0 R 15831 0 R 15832 0 R 15833 0 R 15834 0 R 15835 0 R 15836 0 R 15837 0 R 15838 0 R 15839 0 R 15840 0 R 15841 0 R 15842 0 R 15843 0 R 15844 0 R 15845 0 R 15846 0 R 15847 0 R 15848 0 R 15849 0 R 15850 0 R 15851 0 R 15852 0 R 15853 0 R 15854 0 R 15855 0 R 15856 0 R 15857 0 R 15858 0 R 15859 0 R 15860 0 R 15861 0 R 15862 0 R 15863 0 R 15864 0 R 15865 0 R 15866 0 R 15867 0 R 15868 0 R 15869 0 R 15870 0 R 15871 0 R 15872 0 R ]
+/Parent 15731 0 R
+/Annots [ 15726 0 R 15732 0 R 15733 0 R 15734 0 R 15735 0 R 15736 0 R 15737 0 R 15738 0 R 15739 0 R 15740 0 R 15741 0 R 15742 0 R 15743 0 R 15744 0 R 15745 0 R 15746 0 R 15747 0 R 15748 0 R 15749 0 R 15750 0 R 15751 0 R 15752 0 R 15753 0 R 15754 0 R 15755 0 R 15756 0 R 15757 0 R 15758 0 R 15759 0 R 15760 0 R 15761 0 R 15762 0 R 15763 0 R 15764 0 R 15765 0 R 15766 0 R 15767 0 R 15768 0 R 15769 0 R 15770 0 R 15771 0 R 15772 0 R 15773 0 R 15774 0 R 15775 0 R 15776 0 R 15777 0 R 15778 0 R 15779 0 R 15780 0 R 15781 0 R 15782 0 R 15783 0 R 15784 0 R 15785 0 R 15786 0 R 15787 0 R 15788 0 R 15789 0 R 15790 0 R 15791 0 R 15792 0 R 15793 0 R 15794 0 R 15795 0 R 15796 0 R 15797 0 R 15798 0 R 15799 0 R 15800 0 R 15801 0 R 15802 0 R 15803 0 R 15804 0 R 15805 0 R 15806 0 R 15807 0 R 15808 0 R 15809 0 R 15810 0 R 15811 0 R 15812 0 R 15813 0 R 15814 0 R 15815 0 R 15816 0 R 15817 0 R 15818 0 R 15819 0 R 15820 0 R 15821 0 R 15822 0 R 15823 0 R 15824 0 R 15825 0 R 15826 0 R 15827 0 R 15828 0 R 15829 0 R 15830 0 R 15831 0 R 15832 0 R 15833 0 R 15834 0 R 15835 0 R 15836 0 R 15837 0 R 15838 0 R 15839 0 R 15840 0 R 15841 0 R 15842 0 R 15843 0 R 15844 0 R 15845 0 R 15846 0 R 15847 0 R 15848 0 R 15849 0 R 15850 0 R 15851 0 R 15852 0 R 15853 0 R 15854 0 R 15855 0 R 15856 0 R 15857 0 R 15858 0 R 15859 0 R 15860 0 R 15861 0 R ]
 >> endobj
-15738 0 obj <<
+15726 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.063 646.546 161.51 657.69]
 /Subtype /Link
 /A << /S /GoTo /D (page.4) >>
 >> endobj
-15744 0 obj <<
+15732 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [160.518 632.997 167.965 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.4) >>
 >> endobj
-15745 0 obj <<
+15733 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.774 619.448 203.13 630.847]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-15746 0 obj <<
+15734 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.441 605.899 195.797 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.395) >>
 >> endobj
-15747 0 obj <<
+15735 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.502 605.899 217.858 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.399) >>
 >> endobj
-15748 0 obj <<
+15736 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.562 605.899 239.918 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.400) >>
 >> endobj
-15749 0 obj <<
+15737 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [243.623 605.899 261.979 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.402) >>
 >> endobj
-15750 0 obj <<
+15738 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 592.35 158.102 603.494]
 /Subtype /Link
 /A << /S /GoTo /D (page.449) >>
 >> endobj
-15751 0 obj <<
+15739 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 592.35 181.132 603.494]
 /Subtype /Link
 /A << /S /GoTo /D (page.487) >>
 >> endobj
-15752 0 obj <<
+15740 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.807 592.35 204.163 603.494]
 /Subtype /Link
 /A << /S /GoTo /D (page.539) >>
 >> endobj
-15753 0 obj <<
+15741 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.837 592.35 227.193 603.494]
 /Subtype /Link
 /A << /S /GoTo /D (page.540) >>
 >> endobj
-15754 0 obj <<
+15742 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.926 578.8 202.282 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.402) >>
 >> endobj
-15755 0 obj <<
+15743 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.017 565.251 214.373 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.387) >>
 >> endobj
-15756 0 obj <<
+15744 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.047 565.251 237.403 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.389) >>
 >> endobj
-15757 0 obj <<
+15745 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.683 551.702 211.04 563.101]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-15758 0 obj <<
+15746 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [170.562 538.153 188.918 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.387) >>
 >> endobj
-15759 0 obj <<
+15747 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [148.411 524.604 166.767 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.400) >>
 >> endobj
-15760 0 obj <<
+15748 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.441 524.604 189.797 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.402) >>
 >> endobj
-15761 0 obj <<
+15749 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [152.714 511.054 171.07 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.395) >>
 >> endobj
-15762 0 obj <<
+15750 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.502 497.505 200.858 508.905]
 /Subtype /Link
 /A << /S /GoTo /D (page.387) >>
 >> endobj
-15763 0 obj <<
+15751 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [161.138 483.956 179.494 495.355]
 /Subtype /Link
 /A << /S /GoTo /D (page.404) >>
 >> endobj
-15764 0 obj <<
+15752 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.168 483.956 202.524 495.355]
 /Subtype /Link
 /A << /S /GoTo /D (page.416) >>
 >> endobj
-15765 0 obj <<
+15753 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [207.198 483.956 225.555 495.355]
 /Subtype /Link
 /A << /S /GoTo /D (page.421) >>
 >> endobj
-15766 0 obj <<
+15754 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.229 483.956 248.585 495.355]
 /Subtype /Link
 /A << /S /GoTo /D (page.472) >>
 >> endobj
-15767 0 obj <<
+15755 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [160.532 470.407 178.888 481.806]
 /Subtype /Link
-/A << /S /GoTo /D (page.456) >>
+/A << /S /GoTo /D (page.455) >>
 >> endobj
-15768 0 obj <<
+15756 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [161.562 456.858 179.918 468.257]
 /Subtype /Link
 /A << /S /GoTo /D (page.124) >>
 >> endobj
-15769 0 obj <<
+15757 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.592 456.858 202.949 468.257]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-15770 0 obj <<
+15758 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [165.471 443.308 183.827 454.708]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-15771 0 obj <<
+15759 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.017 429.759 191.373 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.571) >>
 >> endobj
-15772 0 obj <<
+15760 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [209.199 416.21 227.555 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.447) >>
 >> endobj
-15773 0 obj <<
+15761 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [175.562 402.661 193.918 414.06]
 /Subtype /Link
-/A << /S /GoTo /D (page.456) >>
+/A << /S /GoTo /D (page.455) >>
 >> endobj
-15774 0 obj <<
+15762 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.532 389.112 200.888 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.386) >>
 >> endobj
-15775 0 obj <<
+15763 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.562 389.112 223.918 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.399) >>
 >> endobj
-15776 0 obj <<
+15764 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [176.653 375.562 195.009 386.962]
 /Subtype /Link
 /A << /S /GoTo /D (page.423) >>
 >> endobj
-15777 0 obj <<
+15765 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [149.32 362.013 167.676 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.397) >>
 >> endobj
-15778 0 obj <<
+15766 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.138 362.013 189.494 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.399) >>
 >> endobj
-15779 0 obj <<
+15767 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [147.653 348.464 166.009 360.032]
 /Subtype /Link
 /A << /S /GoTo /D (page.448) >>
 >> endobj
-15780 0 obj <<
+15768 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [145.32 334.915 152.767 346.314]
 /Subtype /Link
 /A << /S /GoTo /D (page.4) >>
 >> endobj
-15781 0 obj <<
+15769 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [156.471 334.915 174.827 346.314]
 /Subtype /Link
 /A << /S /GoTo /D (page.395) >>
 >> endobj
-15782 0 obj <<
+15770 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [178.532 334.915 196.888 346.314]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-15783 0 obj <<
+15771 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.592 334.915 218.949 346.314]
 /Subtype /Link
 /A << /S /GoTo /D (page.400) >>
 >> endobj
-15784 0 obj <<
+15772 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [222.653 334.915 241.009 346.314]
 /Subtype /Link
 /A << /S /GoTo /D (page.448) >>
 >> endobj
-15785 0 obj <<
+15773 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.714 334.915 263.07 346.314]
 /Subtype /Link
-/A << /S /GoTo /D (page.450) >>
+/A << /S /GoTo /D (page.451) >>
 >> endobj
-15786 0 obj <<
+15774 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 321.366 158.102 332.51]
 /Subtype /Link
 /A << /S /GoTo /D (page.453) >>
 >> endobj
-15787 0 obj <<
+15775 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 321.366 181.132 332.51]
 /Subtype /Link
 /A << /S /GoTo /D (page.539) >>
 >> endobj
-15788 0 obj <<
+15776 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [175.38 307.816 193.736 319.216]
 /Subtype /Link
 /A << /S /GoTo /D (page.125) >>
 >> endobj
-15789 0 obj <<
+15777 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [198.411 307.816 216.767 319.216]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-15790 0 obj <<
+15778 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.38 294.267 200.736 305.835]
 /Subtype /Link
 /A << /S /GoTo /D (page.448) >>
 >> endobj
-15791 0 obj <<
+15779 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [172.726 280.718 191.083 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.307) >>
 >> endobj
-15792 0 obj <<
+15780 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.949 280.718 214.305 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-15793 0 obj <<
+15781 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.172 280.718 237.528 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.399) >>
 >> endobj
-15794 0 obj <<
+15782 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 280.718 260.751 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.407) >>
 >> endobj
-15795 0 obj <<
+15783 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 267.169 158.102 278.313]
 /Subtype /Link
 /A << /S /GoTo /D (page.410) >>
 >> endobj
-15796 0 obj <<
+15784 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [165.408 267.169 183.764 278.313]
 /Subtype /Link
 /A << /S /GoTo /D (page.422) >>
 >> endobj
-15797 0 obj <<
+15785 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.07 267.169 209.426 278.313]
 /Subtype /Link
 /A << /S /GoTo /D (page.424) >>
 >> endobj
-15798 0 obj <<
+15786 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.732 267.169 235.088 278.313]
 /Subtype /Link
 /A << /S /GoTo /D (page.426) >>
 >> endobj
-15799 0 obj <<
+15787 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 267.169 260.751 278.313]
 /Subtype /Link
 /A << /S /GoTo /D (page.428) >>
 >> endobj
-15800 0 obj <<
+15788 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 253.62 158.102 264.764]
 /Subtype /Link
 /A << /S /GoTo /D (page.431) >>
 >> endobj
-15801 0 obj <<
+15789 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 253.62 181.132 264.764]
 /Subtype /Link
 /A << /S /GoTo /D (page.450) >>
 >> endobj
-15802 0 obj <<
+15790 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.807 253.62 204.163 264.764]
 /Subtype /Link
 /A << /S /GoTo /D (page.512) >>
 >> endobj
-15803 0 obj <<
+15791 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.837 253.62 227.193 264.764]
 /Subtype /Link
 /A << /S /GoTo /D (page.547) >>
 >> endobj
-15804 0 obj <<
+15792 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.229 240.07 260.585 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.707) >>
 >> endobj
-15805 0 obj <<
+15793 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.411 226.521 252.767 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.403) >>
 >> endobj
-15806 0 obj <<
+15794 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [170.623 212.972 188.979 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.404) >>
 >> endobj
-15807 0 obj <<
+15795 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.653 212.972 212.009 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.405) >>
 >> endobj
-15808 0 obj <<
+15796 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.683 212.972 235.04 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.449) >>
 >> endobj
-15809 0 obj <<
+15797 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.471 199.423 213.827 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.423) >>
 >> endobj
-15810 0 obj <<
+15798 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [188.198 185.874 206.555 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.405) >>
 >> endobj
-15811 0 obj <<
+15799 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.502 172.324 210.858 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.416) >>
 >> endobj
-15812 0 obj <<
+15800 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [174.926 158.775 193.282 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.404) >>
 >> endobj
-15813 0 obj <<
+15801 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.956 158.775 216.312 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.526) >>
 >> endobj
-15814 0 obj <<
+15802 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.077 145.226 180.433 156.625]
 /Subtype /Link
 /A << /S /GoTo /D (page.419) >>
 >> endobj
-15815 0 obj <<
+15803 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [202.986 131.677 221.343 143.076]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-15816 0 obj <<
+15804 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [239.168 118.128 257.524 129.527]
 /Subtype /Link
 /A << /S /GoTo /D (page.447) >>
 >> endobj
-15817 0 obj <<
+15805 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.536 646.546 403.893 657.946]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-15818 0 obj <<
+15806 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [377.052 632.997 395.408 644.397]
 /Subtype /Link
 /A << /S /GoTo /D (page.797) >>
 >> endobj
-15819 0 obj <<
+15807 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [373.142 619.448 391.499 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.403) >>
 >> endobj
-15820 0 obj <<
+15808 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [376.718 605.899 395.074 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.437) >>
 >> endobj
-15821 0 obj <<
+15809 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [367.021 592.35 385.377 603.749]
 /Subtype /Link
 /A << /S /GoTo /D (page.403) >>
 >> endobj
-15822 0 obj <<
+15810 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [364.385 578.8 382.741 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-15823 0 obj <<
+15811 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [368.688 565.251 387.044 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.389) >>
 >> endobj
-15824 0 obj <<
+15812 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.718 565.251 410.074 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.395) >>
 >> endobj
-15825 0 obj <<
+15813 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [369.839 551.702 388.196 563.997]
 /Subtype /Link
 /A << /S /GoTo /D (page.404) >>
 >> endobj
-15826 0 obj <<
+15814 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [341.476 538.153 359.832 549.721]
 /Subtype /Link
 /A << /S /GoTo /D (page.395) >>
 >> endobj
-15827 0 obj <<
+15815 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [340.112 524.604 347.559 536.003]
 /Subtype /Link
 /A << /S /GoTo /D (page.4) >>
 >> endobj
-15828 0 obj <<
+15816 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [352.233 524.604 370.59 536.003]
 /Subtype /Link
 /A << /S /GoTo /D (page.121) >>
 >> endobj
-15829 0 obj <<
+15817 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [373.445 511.054 391.802 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.307) >>
 >> endobj
-15830 0 obj <<
+15818 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.9 497.505 411.256 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.419) >>
 >> endobj
-15831 0 obj <<
+15819 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [384.961 483.956 403.317 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.155) >>
 >> endobj
-15832 0 obj <<
+15820 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [376.536 470.407 394.893 481.806]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-15833 0 obj <<
+15821 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [342.381 456.858 360.737 468.257]
+/Rect [342.987 456.858 361.343 468.257]
 /Subtype /Link
 /A << /S /GoTo /D (page.394) >>
 >> endobj
-15834 0 obj <<
+15822 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [366.559 456.858 384.915 468.257]
+/Rect [367.771 456.858 386.127 468.257]
 /Subtype /Link
 /A << /S /GoTo /D (page.395) >>
 >> endobj
-15835 0 obj <<
+15823 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [390.736 456.858 409.092 468.257]
+/Rect [392.554 456.858 410.911 468.257]
 /Subtype /Link
 /A << /S /GoTo /D (page.400) >>
 >> endobj
-15836 0 obj <<
+15824 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [412.554 456.858 430.911 468.257]
+/Rect [414.373 456.858 432.729 468.257]
 /Subtype /Link
 /A << /S /GoTo /D (page.402) >>
 >> endobj
-15837 0 obj <<
+15825 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
-/Rect [436.732 456.858 455.088 468.257]
+/Rect [439.156 456.858 457.513 468.257]
 /Subtype /Link
 /A << /S /GoTo /D (page.448) >>
 >> endobj
-15838 0 obj <<
+15826 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 443.308 354.864 454.452]
 /Subtype /Link
-/A << /S /GoTo /D (page.450) >>
+/A << /S /GoTo /D (page.449) >>
 >> endobj
-15839 0 obj <<
+15827 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.538 443.308 377.895 454.452]
 /Subtype /Link
-/A << /S /GoTo /D (page.453) >>
+/A << /S /GoTo /D (page.451) >>
 >> endobj
-15840 0 obj <<
+15828 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.569 443.308 400.925 454.452]
 /Subtype /Link
+/A << /S /GoTo /D (page.453) >>
+>> endobj
+15829 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [405.599 443.308 423.955 454.452]
+/Subtype /Link
 /A << /S /GoTo /D (page.539) >>
 >> endobj
-15841 0 obj <<
+15830 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.809 429.759 404.165 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.387) >>
 >> endobj
-15842 0 obj <<
+15831 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [365.536 416.21 383.893 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.403) >>
 >> endobj
-15843 0 obj <<
+15832 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [363.961 402.661 382.317 414.06]
 /Subtype /Link
 /A << /S /GoTo /D (page.797) >>
 >> endobj
-15844 0 obj <<
+15833 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [381.627 389.112 399.984 400.511]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-15845 0 obj <<
+15834 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.658 389.112 423.014 400.511]
 /Subtype /Link
 /A << /S /GoTo /D (page.386) >>
 >> endobj
-15846 0 obj <<
+15835 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [377.415 375.562 395.771 386.962]
 /Subtype /Link
 /A << /S /GoTo /D (page.386) >>
 >> endobj
-15847 0 obj <<
+15836 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [381.718 362.013 400.074 373.413]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-15848 0 obj <<
+15837 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.749 348.464 436.105 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.389) >>
 >> endobj
-15849 0 obj <<
+15838 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.658 334.915 378.014 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.424) >>
 >> endobj
-15850 0 obj <<
+15839 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [353.385 307.816 371.741 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.698) >>
 >> endobj
-15851 0 obj <<
+15840 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [371.627 294.267 389.983 305.667]
 /Subtype /Link
 /A << /S /GoTo /D (page.235) >>
 >> endobj
-15852 0 obj <<
+15841 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [355.173 280.718 373.529 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.737) >>
 >> endobj
-15853 0 obj <<
+15842 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [377.93 267.169 396.287 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.363) >>
 >> endobj
-15854 0 obj <<
+15843 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.233 253.62 400.59 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.365) >>
 >> endobj
-15855 0 obj <<
+15844 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.688 239.464 429.59 252.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.93) >>
 >> endobj
-15856 0 obj <<
+15845 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.9 225.915 405.802 238.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.93) >>
 >> endobj
-15857 0 obj <<
+15846 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [343.658 212.972 362.014 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.238) >>
 >> endobj
-15858 0 obj <<
+15847 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [366.688 212.972 385.044 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.307) >>
 >> endobj
-15859 0 obj <<
+15848 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.597 199.423 425.953 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.238) >>
 >> endobj
-15860 0 obj <<
+15849 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.627 199.423 448.984 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.261) >>
 >> endobj
-15861 0 obj <<
+15850 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [376.082 185.874 394.438 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-15862 0 obj <<
+15851 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [445.506 172.324 463.862 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.641) >>
 >> endobj
-15863 0 obj <<
+15852 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.324 158.775 412.68 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.305) >>
 >> endobj
-15864 0 obj <<
+15853 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [348.866 145.226 361.768 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.65) >>
 >> endobj
-15865 0 obj <<
+15854 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [367.348 145.226 385.704 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.106) >>
 >> endobj
-15866 0 obj <<
+15855 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.284 145.226 409.64 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.238) >>
 >> endobj
-15867 0 obj <<
+15856 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.22 145.226 433.576 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-15868 0 obj <<
+15857 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 145.226 457.513 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-15869 0 obj <<
+15858 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 131.677 354.864 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.307) >>
 >> endobj
-15870 0 obj <<
+15859 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.538 131.677 377.895 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-15871 0 obj <<
+15860 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.569 131.677 400.925 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.403) >>
 >> endobj
-15872 0 obj <<
+15861 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.112 118.128 409.468 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.305) >>
 >> endobj
-15877 0 obj <<
-/D [15875 0 R /XYZ 100.892 685.529 null]
+15866 0 obj <<
+/D [15864 0 R /XYZ 100.892 685.529 null]
 >> endobj
-15874 0 obj <<
+15863 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-15980 0 obj <<
+15969 0 obj <<
 /Length 1324      
 /Filter /FlateDecode
 >>
@@ -96563,726 +100288,726 @@
 5Žcµ÷íÓ¥è_è
 „w&…
 E“	ñ<×±ª6bQJ 'xð(<m3‹#ªc6öá%&é”ð›ÁüÉøwË…tuéqKÜ]/kKŒ“	AìÝå‚f§RÁƒÅ0<µ¥®ºÃ·®Á¿Qô…˜WW>k—ö}\•µ¾mèc®Ñip¸›àƪW7„ývwXôr…¤’@%»&<¹äI"˜¢=áÝíÒ0ÄD+¡$ŠAŒÜ–Ñ¢9ú!ñqYù+s\úøÚŸ
-VN’g•käJü ÕòEÃoΐò„1+E#\j'~&gà(;‘7oÒ}û¶ãf(È«·¼ŒLo¼.¤{îñ'ÙµfÔ»lô‘ª?û<Ü.öîJì»xa‰?TÓWªÒtOû„b2æZõ0N_'žË±ßŠcâW(ˆß®Ž	ö×ãþO¥Ç{gC ñåPý3?̳¦ÖâpõÇòJUèÛ•ƒ„ùpÏ!sÔ‘ÉQj]ˆï*…»
-ñ:|u÷Á=†L‚™}²EM<½ÂÕ¶,ɇk´¢½ÜõÏ ©5Ññ³EŒ<!ø®rK‚0ôJ—³ýØ•.Àï— Bèèâóq5ûcQHK
+VN’g•käJü ÕòEÃoΐò„1+E#\j'~&gà(;‘7oÒ}û¶ãf(È«·¼ŒLo¼.¤{îñ'ÙµfÔ»lô‘ª?û<Ü.öîJì»xa‰?TÓWªÒtOû„b2æZõ0N_'žË±ßŠcâW(ˆß®Ž	ò×ãþO¥Ç{gC ñåPý3?̳¦ÖâpõÇòJUèÛ•ƒ„ùpÏ!sÔ‘ÉQj]ˆï*…»
+ñ:|u÷Á=†L‚™}²EM<½ÂÕ¶,ɇk´¢½ÜõÏ ©5Ññ³EŒ<!ø®rK‚0ôJ—³ýØ•.Àï— Bèèâóq5û_ÙHJ
 endstream
 endobj
-15979 0 obj <<
+15968 0 obj <<
 /Type /Page
-/Contents 15980 0 R
-/Resources 15978 0 R
+/Contents 15969 0 R
+/Resources 15967 0 R
 /MediaBox [0 0 612 792]
-/Parent 15743 0 R
-/Annots [ 15873 0 R 15878 0 R 15879 0 R 15880 0 R 15881 0 R 15882 0 R 15883 0 R 15884 0 R 15885 0 R 15886 0 R 15887 0 R 15888 0 R 15889 0 R 15890 0 R 15891 0 R 15892 0 R 15893 0 R 15894 0 R 15895 0 R 15896 0 R 15897 0 R 15898 0 R 15899 0 R 15900 0 R 15901 0 R 15902 0 R 15903 0 R 15904 0 R 15905 0 R 15906 0 R 15907 0 R 15908 0 R 15909 0 R 15910 0 R 15911 0 R 15912 0 R 15913 0 R 15914 0 R 15915 0 R 15916 0 R 15917 0 R 15918 0 R 15919 0 R 15920 0 R 15921 0 R 15922 0 R 15923 0 R 15924 0 R 15925 0 R 15926 0 R 15927 0 R 15928 0 R 15929 0 R 15930 0 R 15931 0 R 15932 0 R 15933 0 R 15934 0 R 15935 0 R 15936 0 R 15937 0 R 15938 0 R 15939 0 R 15940 0 R 15941 0 R 15942 0 R 15943 0 R 15944 0 R 15945 0 R 15946 0 R 15947 0 R 15948 0 R 15949 0 R 15950 0 R 15951 0 R 15952 0 R 15953 0 R 15954 0 R 15955 0 R 15956 0 R 15957 0 R 15958 0 R 15959 0 R 15960 0 R 15961 0 R 15962 0 R 15963 0 R 15964 0 R 15965 0 R 15966 0 R 15967 0 R 15968 0 R 15969 0 R 15970 0 R 15971 0 R 15972 0 R 15973 0 R 15974 0 R 15975 0 R 15976 0 R ]
+/Parent 15731 0 R
+/Annots [ 15862 0 R 15867 0 R 15868 0 R 15869 0 R 15870 0 R 15871 0 R 15872 0 R 15873 0 R 15874 0 R 15875 0 R 15876 0 R 15877 0 R 15878 0 R 15879 0 R 15880 0 R 15881 0 R 15882 0 R 15883 0 R 15884 0 R 15885 0 R 15886 0 R 15887 0 R 15888 0 R 15889 0 R 15890 0 R 15891 0 R 15892 0 R 15893 0 R 15894 0 R 15895 0 R 15896 0 R 15897 0 R 15898 0 R 15899 0 R 15900 0 R 15901 0 R 15902 0 R 15903 0 R 15904 0 R 15905 0 R 15906 0 R 15907 0 R 15908 0 R 15909 0 R 15910 0 R 15911 0 R 15912 0 R 15913 0 R 15914 0 R 15915 0 R 15916 0 R 15917 0 R 15918 0 R 15919 0 R 15920 0 R 15921 0 R 15922 0 R 15923 0 R 15924 0 R 15925 0 R 15926 0 R 15927 0 R 15928 0 R 15929 0 R 15930 0 R 15931 0 R 15932 0 R 15933 0 R 15934 0 R 15935 0 R 15936 0 R 15937 0 R 15938 0 R 15939 0 R 15940 0 R 15941 0 R 15942 0 R 15943 0 R 15944 0 R 15945 0 R 15946 0 R 15947 0 R 15948 0 R 15949 0 R 15950 0 R 15951 0 R 15952 0 R 15953 0 R 15954 0 R 15955 0 R 15956 0 R 15957 0 R 15958 0 R 15959 0 R 15960 0 R 15961 0 R 15962 0 R 15963 0 R 15964 0 R 15965 0 R ]
 >> endobj
-15873 0 obj <<
+15862 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [229.281 646.546 247.637 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.810) >>
 >> endobj
-15878 0 obj <<
+15867 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.584 632.931 264.94 644.621]
 /Subtype /Link
 /A << /S /GoTo /D (page.809) >>
 >> endobj
-15879 0 obj <<
+15868 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [240.766 619.317 259.122 631.006]
 /Subtype /Link
 /A << /S /GoTo /D (page.387) >>
 >> endobj
-15880 0 obj <<
+15869 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [281.917 605.702 300.273 617.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.349) >>
 >> endobj
-15881 0 obj <<
+15870 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [253.372 592.087 271.728 603.777]
 /Subtype /Link
 /A << /S /GoTo /D (page.810) >>
 >> endobj
-15882 0 obj <<
+15871 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [187.099 578.472 200 590.162]
 /Subtype /Link
 /A << /S /GoTo /D (page.74) >>
 >> endobj
-15883 0 obj <<
+15872 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.675 578.472 217.576 590.162]
 /Subtype /Link
 /A << /S /GoTo /D (page.78) >>
 >> endobj
-15884 0 obj <<
+15873 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [222.25 578.472 235.152 590.162]
 /Subtype /Link
 /A << /S /GoTo /D (page.87) >>
 >> endobj
-15885 0 obj <<
+15874 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [239.826 578.472 258.182 590.162]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-15886 0 obj <<
+15875 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [262.856 578.472 281.213 590.162]
 /Subtype /Link
 /A << /S /GoTo /D (page.192) >>
 >> endobj
-15887 0 obj <<
+15876 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [250.038 564.857 268.394 576.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.626) >>
 >> endobj
-15888 0 obj <<
+15877 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.19 551.243 248.546 562.932]
 /Subtype /Link
 /A << /S /GoTo /D (page.623) >>
 >> endobj
-15889 0 obj <<
+15878 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.614 537.628 250.97 549.317]
 /Subtype /Link
 /A << /S /GoTo /D (page.618) >>
 >> endobj
-15890 0 obj <<
+15879 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [258.947 524.013 277.304 535.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.626) >>
 >> endobj
-15891 0 obj <<
+15880 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.553 510.398 225.455 522.088]
 /Subtype /Link
 /A << /S /GoTo /D (page.89) >>
 >> endobj
-15892 0 obj <<
+15881 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.129 510.398 248.485 522.088]
 /Subtype /Link
 /A << /S /GoTo /D (page.618) >>
 >> endobj
-15893 0 obj <<
+15882 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [253.159 510.398 271.516 522.088]
 /Subtype /Link
 /A << /S /GoTo /D (page.620) >>
 >> endobj
-15894 0 obj <<
+15883 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [225.372 496.783 243.728 508.473]
 /Subtype /Link
 /A << /S /GoTo /D (page.623) >>
 >> endobj
-15895 0 obj <<
+15884 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [211.341 483.169 229.697 494.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.619) >>
 >> endobj
-15896 0 obj <<
+15885 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.765 469.554 211.122 481.243]
 /Subtype /Link
 /A << /S /GoTo /D (page.604) >>
 >> endobj
-15897 0 obj <<
+15886 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.402 455.939 204.303 467.629]
 /Subtype /Link
 /A << /S /GoTo /D (page.78) >>
 >> endobj
-15898 0 obj <<
+15887 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.038 442.324 209.394 453.724]
 /Subtype /Link
 /A << /S /GoTo /D (page.810) >>
 >> endobj
-15899 0 obj <<
+15888 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [245.705 428.709 264.061 440.399]
 /Subtype /Link
 /A << /S /GoTo /D (page.754) >>
 >> endobj
-15900 0 obj <<
+15889 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.796 415.095 209.697 426.239]
 /Subtype /Link
 /A << /S /GoTo /D (page.68) >>
 >> endobj
-15901 0 obj <<
+15890 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [214.372 415.095 227.273 426.239]
 /Subtype /Link
 /A << /S /GoTo /D (page.69) >>
 >> endobj
-15902 0 obj <<
+15891 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [202.856 401.48 215.758 413.169]
 /Subtype /Link
 /A << /S /GoTo /D (page.89) >>
 >> endobj
-15903 0 obj <<
+15892 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.675 387.865 217.576 399.009]
 /Subtype /Link
 /A << /S /GoTo /D (page.86) >>
 >> endobj
-15904 0 obj <<
+15893 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.432 374.25 224.788 385.818]
 /Subtype /Link
 /A << /S /GoTo /D (page.132) >>
 >> endobj
-15905 0 obj <<
+15894 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [229.462 374.25 247.819 385.818]
 /Subtype /Link
 /A << /S /GoTo /D (page.137) >>
 >> endobj
-15906 0 obj <<
+15895 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.19 360.635 262.546 372.325]
 /Subtype /Link
 /A << /S /GoTo /D (page.320) >>
 >> endobj
-15907 0 obj <<
+15896 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.22 347.021 231.576 358.71]
 /Subtype /Link
 /A << /S /GoTo /D (page.320) >>
 >> endobj
-15908 0 obj <<
+15897 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [289.978 333.406 308.334 345.095]
 /Subtype /Link
 /A << /S /GoTo /D (page.367) >>
 >> endobj
-15909 0 obj <<
+15898 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [264.553 319.791 282.91 331.48]
 /Subtype /Link
 /A << /S /GoTo /D (page.131) >>
 >> endobj
-15910 0 obj <<
+15899 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [238.463 306.176 256.819 317.866]
 /Subtype /Link
 /A << /S /GoTo /D (page.809) >>
 >> endobj
-15911 0 obj <<
+15900 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [211.402 292.561 224.304 304.251]
 /Subtype /Link
 /A << /S /GoTo /D (page.65) >>
 >> endobj
-15912 0 obj <<
+15901 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [187.796 278.947 206.152 290.091]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-15913 0 obj <<
+15902 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.826 278.947 229.182 290.091]
 /Subtype /Link
 /A << /S /GoTo /D (page.483) >>
 >> endobj
-15914 0 obj <<
+15903 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [233.856 278.947 252.213 290.091]
 /Subtype /Link
 /A << /S /GoTo /D (page.534) >>
 >> endobj
-15915 0 obj <<
+15904 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.683 265.332 223.04 276.476]
 /Subtype /Link
 /A << /S /GoTo /D (page.469) >>
 >> endobj
-15916 0 obj <<
+15905 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.571 265.332 245.927 276.476]
 /Subtype /Link
 /A << /S /GoTo /D (page.470) >>
 >> endobj
-15917 0 obj <<
+15906 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [250.459 265.332 268.815 276.476]
 /Subtype /Link
 /A << /S /GoTo /D (page.479) >>
 >> endobj
-15918 0 obj <<
+15907 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.346 265.332 291.703 276.476]
 /Subtype /Link
 /A << /S /GoTo /D (page.481) >>
 >> endobj
-15919 0 obj <<
+15908 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [296.234 265.332 314.59 276.476]
 /Subtype /Link
 /A << /S /GoTo /D (page.534) >>
 >> endobj
-15920 0 obj <<
+15909 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [186.462 251.717 204.819 263.406]
 /Subtype /Link
 /A << /S /GoTo /D (page.398) >>
 >> endobj
-15921 0 obj <<
+15910 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.402 238.102 250.758 249.792]
 /Subtype /Link
 /A << /S /GoTo /D (page.403) >>
 >> endobj
-15922 0 obj <<
+15911 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.947 224.487 265.304 236.177]
 /Subtype /Link
 /A << /S /GoTo /D (page.391) >>
 >> endobj
-15923 0 obj <<
+15912 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [211.826 210.873 230.182 222.562]
 /Subtype /Link
 /A << /S /GoTo /D (page.596) >>
 >> endobj
-15924 0 obj <<
+15913 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.705 197.258 219.061 208.947]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-15925 0 obj <<
+15914 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [239.372 183.643 257.728 195.332]
 /Subtype /Link
 /A << /S /GoTo /D (page.810) >>
 >> endobj
-15926 0 obj <<
+15915 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.735 170.028 192.091 181.172]
 /Subtype /Link
 /A << /S /GoTo /D (page.749) >>
 >> endobj
-15927 0 obj <<
+15916 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.099 156.413 215.455 167.557]
 /Subtype /Link
 /A << /S /GoTo /D (page.560) >>
 >> endobj
-15928 0 obj <<
+15917 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.22 131.742 200.576 143.311]
 /Subtype /Link
 /A << /S /GoTo /D (page.394) >>
 >> endobj
-15929 0 obj <<
+15918 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [240.129 118.128 258.485 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.810) >>
 >> endobj
-15930 0 obj <<
+15919 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.406 646.546 436.763 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.394) >>
 >> endobj
-15931 0 obj <<
+15920 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [468.467 632.93 486.823 644.62]
 /Subtype /Link
 /A << /S /GoTo /D (page.449) >>
 >> endobj
-15932 0 obj <<
+15921 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [458.134 619.314 476.49 631.004]
 /Subtype /Link
 /A << /S /GoTo /D (page.449) >>
 >> endobj
-15933 0 obj <<
+15922 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.103 605.698 440.46 617.388]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-15934 0 obj <<
+15923 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.619 581.006 400.975 592.574]
 /Subtype /Link
 /A << /S /GoTo /D (page.684) >>
 >> endobj
-15935 0 obj <<
+15924 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 555.962 405.674 564.985]
 /Subtype /Link
 /A << /S /GoTo /D (page.109) >>
 >> endobj
-15936 0 obj <<
+15925 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [380.225 540.224 398.581 551.368]
 /Subtype /Link
 /A << /S /GoTo /D (page.258) >>
 >> endobj
-15937 0 obj <<
+15926 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.649 526.608 439.005 538.298]
 /Subtype /Link
 /A << /S /GoTo /D (page.364) >>
 >> endobj
-15938 0 obj <<
+15927 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [376.861 512.992 395.217 524.561]
 /Subtype /Link
 /A << /S /GoTo /D (page.247) >>
 >> endobj
-15939 0 obj <<
+15928 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [381.528 499.376 399.884 510.52]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-15940 0 obj <<
+15929 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.558 499.376 422.914 510.52]
 /Subtype /Link
 /A << /S /GoTo /D (page.528) >>
 >> endobj
-15941 0 obj <<
+15930 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.103 485.76 431.46 497.45]
 /Subtype /Link
 /A << /S /GoTo /D (page.464) >>
 >> endobj
-15942 0 obj <<
+15931 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.406 472.144 435.763 483.834]
 /Subtype /Link
 /A << /S /GoTo /D (page.469) >>
 >> endobj
-15943 0 obj <<
+15932 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [440.437 472.144 458.793 483.834]
 /Subtype /Link
 /A << /S /GoTo /D (page.470) >>
 >> endobj
-15944 0 obj <<
+15933 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.346 444.912 435.702 456.312]
 /Subtype /Link
 /A << /S /GoTo /D (page.458) >>
 >> endobj
-15945 0 obj <<
+15934 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.649 431.296 432.005 442.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.469) >>
 >> endobj
-15946 0 obj <<
+15935 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [436.679 431.296 455.035 442.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.481) >>
 >> endobj
-15947 0 obj <<
+15936 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.073 417.68 428.429 429.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-15948 0 obj <<
+15937 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.225 404.064 419.581 415.754]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-15949 0 obj <<
+15938 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.255 390.448 436.611 401.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-15950 0 obj <<
+15939 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.285 390.448 459.641 401.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.483) >>
 >> endobj
-15951 0 obj <<
+15940 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.588 376.832 429.944 387.976]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-15952 0 obj <<
+15941 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.346 363.216 421.702 374.906]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-15953 0 obj <<
+15942 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.467 349.6 423.823 361.29]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-15954 0 obj <<
+15943 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.71 335.984 442.066 347.384]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-15955 0 obj <<
+15944 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.77 322.368 458.126 334.058]
 /Subtype /Link
 /A << /S /GoTo /D (page.481) >>
 >> endobj
-15956 0 obj <<
+15945 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [440.982 308.752 459.338 320.441]
 /Subtype /Link
 /A << /S /GoTo /D (page.471) >>
 >> endobj
-15957 0 obj <<
+15946 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.831 295.136 419.187 306.825]
 /Subtype /Link
 /A << /S /GoTo /D (page.477) >>
 >> endobj
-15958 0 obj <<
+15947 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [398.437 281.52 416.793 292.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.506) >>
 >> endobj
-15959 0 obj <<
+15948 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.861 267.904 430.217 279.303]
 /Subtype /Link
 /A << /S /GoTo /D (page.448) >>
 >> endobj
-15960 0 obj <<
+15949 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.982 254.288 425.884 265.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.23) >>
 >> endobj
-15961 0 obj <<
+15950 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.558 254.288 448.914 265.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.125) >>
 >> endobj
-15962 0 obj <<
+15951 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.588 254.288 471.944 265.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.452) >>
 >> endobj
-15963 0 obj <<
+15952 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [476.619 254.288 494.975 265.687]
 /Subtype /Link
-/A << /S /GoTo /D (page.454) >>
+/A << /S /GoTo /D (page.453) >>
 >> endobj
-15964 0 obj <<
+15953 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [398.861 240.672 411.763 252.24]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-15965 0 obj <<
+15954 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.952 226.45 483.308 239.351]
 /Subtype /Link
 /A << /S /GoTo /D (page.159) >>
 >> endobj
-15966 0 obj <<
+15955 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.922 213.44 422.278 224.839]
 /Subtype /Link
 /A << /S /GoTo /D (page.477) >>
 >> endobj
-15967 0 obj <<
+15956 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [369.315 199.824 387.672 210.968]
 /Subtype /Link
 /A << /S /GoTo /D (page.684) >>
 >> endobj
-15968 0 obj <<
+15957 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [395.134 186.208 413.49 197.897]
 /Subtype /Link
 /A << /S /GoTo /D (page.595) >>
 >> endobj
-15969 0 obj <<
+15958 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.467 171.986 441.823 184.887]
 /Subtype /Link
 /A << /S /GoTo /D (page.595) >>
 >> endobj
-15970 0 obj <<
+15959 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [374.77 158.976 393.126 170.665]
 /Subtype /Link
 /A << /S /GoTo /D (page.319) >>
 >> endobj
-15971 0 obj <<
+15960 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [484.558 145.36 502.914 157.049]
 /Subtype /Link
 /A << /S /GoTo /D (page.695) >>
 >> endobj
-15972 0 obj <<
+15961 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [393.012 131.744 411.369 143.433]
 /Subtype /Link
 /A << /S /GoTo /D (page.323) >>
 >> endobj
-15973 0 obj <<
+15962 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.8 118.128 416.157 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.341) >>
 >> endobj
-15974 0 obj <<
+15963 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.831 118.128 439.187 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.398) >>
 >> endobj
-15975 0 obj <<
+15964 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.861 118.128 462.217 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.407) >>
 >> endobj
-15976 0 obj <<
+15965 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [466.891 118.128 485.248 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.556) >>
 >> endobj
-15981 0 obj <<
-/D [15979 0 R /XYZ 151.701 685.529 null]
+15970 0 obj <<
+/D [15968 0 R /XYZ 151.701 685.529 null]
 >> endobj
-15978 0 obj <<
+15967 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-16090 0 obj <<
+16079 0 obj <<
 /Length 1607      
 /Filter /FlateDecode
 >>
@@ -97300,757 +101025,757 @@
 |#i˜÷ž„i	ìeØÛ®@ÓX:s½Ý[f7eõçêw³-¯_¡M?Ÿ_.þD?ý
 endstream
 endobj
-16089 0 obj <<
+16078 0 obj <<
 /Type /Page
-/Contents 16090 0 R
-/Resources 16088 0 R
+/Contents 16079 0 R
+/Resources 16077 0 R
 /MediaBox [0 0 612 792]
-/Parent 15743 0 R
-/Annots [ 15977 0 R 15982 0 R 15983 0 R 15984 0 R 15985 0 R 15986 0 R 15987 0 R 15988 0 R 15989 0 R 15990 0 R 15991 0 R 15992 0 R 15993 0 R 15994 0 R 15995 0 R 15996 0 R 15997 0 R 15998 0 R 15999 0 R 16000 0 R 16001 0 R 16002 0 R 16003 0 R 16004 0 R 16005 0 R 16006 0 R 16007 0 R 16008 0 R 16009 0 R 16010 0 R 16011 0 R 16012 0 R 16013 0 R 16014 0 R 16015 0 R 16016 0 R 16017 0 R 16018 0 R 16019 0 R 16020 0 R 16021 0 R 16022 0 R 16023 0 R 16024 0 R 16025 0 R 16026 0 R 16027 0 R 16028 0 R 16029 0 R 16030 0 R 16031 0 R 16032 0 R 16033 0 R 16034 0 R 16035 0 R 16036 0 R 16037 0 R 16038 0 R 16039 0 R 16040 0 R 16041 0 R 16042 0 R 16043 0 R 16044 0 R 16045 0 R 16046 0 R 16047 0 R 16048 0 R 16049 0 R 16050 0 R 16051 0 R 16052 0 R 16053 0 R 16054 0 R 16055 0 R 16056 0 R 16057 0 R 16058 0 R 16059 0 R 16060 0 R 16061 0 R 16062 0 R 16063 0 R 16064 0 R 16065 0 R 16066 0 R 16067 0 R 16068 0 R 16069 0 R 16070 0 R 16071 0 R 16072 0 R 16073 0 R 16074 0 R 16075 0 R 16076 0 R 16077 0 R 16078 0 R 16079 0 R 16080 0 R 16081 0 R 16082 0 R 16083 0 R 16084 0 R 16085 0 R ]
+/Parent 15731 0 R
+/Annots [ 15966 0 R 15971 0 R 15972 0 R 15973 0 R 15974 0 R 15975 0 R 15976 0 R 15977 0 R 15978 0 R 15979 0 R 15980 0 R 15981 0 R 15982 0 R 15983 0 R 15984 0 R 15985 0 R 15986 0 R 15987 0 R 15988 0 R 15989 0 R 15990 0 R 15991 0 R 15992 0 R 15993 0 R 15994 0 R 15995 0 R 15996 0 R 15997 0 R 15998 0 R 15999 0 R 16000 0 R 16001 0 R 16002 0 R 16003 0 R 16004 0 R 16005 0 R 16006 0 R 16007 0 R 16008 0 R 16009 0 R 16010 0 R 16011 0 R 16012 0 R 16013 0 R 16014 0 R 16015 0 R 16016 0 R 16017 0 R 16018 0 R 16019 0 R 16020 0 R 16021 0 R 16022 0 R 16023 0 R 16024 0 R 16025 0 R 16026 0 R 16027 0 R 16028 0 R 16029 0 R 16030 0 R 16031 0 R 16032 0 R 16033 0 R 16034 0 R 16035 0 R 16036 0 R 16037 0 R 16038 0 R 16039 0 R 16040 0 R 16041 0 R 16042 0 R 16043 0 R 16044 0 R 16045 0 R 16046 0 R 16047 0 R 16048 0 R 16049 0 R 16050 0 R 16051 0 R 16052 0 R 16053 0 R 16054 0 R 16055 0 R 16056 0 R 16057 0 R 16058 0 R 16059 0 R 16060 0 R 16061 0 R 16062 0 R 16063 0 R 16064 0 R 16065 0 R 16066 0 R 16067 0 R 16068 0 R 16069 0 R 16070 0 R 16071 0 R 16072 0 R 16073 0 R 16074 0 R ]
 >> endobj
-15977 0 obj <<
+15966 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.487 646.546 167.389 657.69]
 /Subtype /Link
 /A << /S /GoTo /D (page.17) >>
 >> endobj
-15982 0 obj <<
+15971 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [148.138 632.997 166.494 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.795) >>
 >> endobj
-15983 0 obj <<
+15972 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [147.865 619.448 166.221 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.794) >>
 >> endobj
-15984 0 obj <<
+15973 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.471 605.899 180.827 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.345) >>
 >> endobj
-15985 0 obj <<
+15974 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.229 592.35 168.585 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.121) >>
 >> endobj
-15986 0 obj <<
+15975 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.259 592.35 191.615 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.122) >>
 >> endobj
-15987 0 obj <<
+15976 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.38 578.8 201.736 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-15988 0 obj <<
+15977 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.411 578.8 224.767 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.700) >>
 >> endobj
-15989 0 obj <<
+15978 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.017 565.251 191.373 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.121) >>
 >> endobj
-15990 0 obj <<
+15979 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [187.35 551.702 205.706 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.405) >>
 >> endobj
-15991 0 obj <<
+15980 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [133.259 538.153 146.161 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.51) >>
 >> endobj
-15992 0 obj <<
+15981 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.835 538.153 163.736 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.93) >>
 >> endobj
-15993 0 obj <<
+15982 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [168.411 538.153 186.767 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.111) >>
 >> endobj
-15994 0 obj <<
+15983 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.441 538.153 209.797 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.114) >>
 >> endobj
-15995 0 obj <<
+15984 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [214.471 538.153 232.827 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.294) >>
 >> endobj
-15996 0 obj <<
+15985 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [237.502 538.153 255.858 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.297) >>
 >> endobj
-15997 0 obj <<
+15986 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [148.411 524.604 166.767 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.136) >>
 >> endobj
-15998 0 obj <<
+15987 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.441 524.604 189.797 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.164) >>
 >> endobj
-15999 0 obj <<
+15988 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.683 511.054 202.04 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.307) >>
 >> endobj
-16000 0 obj <<
+15989 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [161.744 497.505 180.1 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.698) >>
 >> endobj
-16001 0 obj <<
+15990 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [178.138 483.956 191.04 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.89) >>
 >> endobj
-16002 0 obj <<
+15991 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.592 470.407 191.949 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.344) >>
 >> endobj
-16003 0 obj <<
+15992 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.017 456.858 157.373 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.556) >>
 >> endobj
-16004 0 obj <<
+15993 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.805 443.308 176.161 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.551) >>
 >> endobj
-16005 0 obj <<
+15994 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.532 429.759 202.888 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.556) >>
 >> endobj
-16006 0 obj <<
+15995 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.502 416.21 195.858 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.557) >>
 >> endobj
-16007 0 obj <<
+15996 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [194.792 402.661 213.149 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.557) >>
 >> endobj
-16008 0 obj <<
+15997 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [181.471 389.112 199.827 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.556) >>
 >> endobj
-16009 0 obj <<
+15998 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.502 389.112 222.858 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.557) >>
 >> endobj
-16010 0 obj <<
+15999 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [179.38 375.562 197.737 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.557) >>
 >> endobj
-16011 0 obj <<
+16000 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.986 362.013 209.343 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.557) >>
 >> endobj
-16012 0 obj <<
+16001 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [189.138 348.464 207.494 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.556) >>
 >> endobj
-16013 0 obj <<
+16002 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.823 334.915 220.179 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.557) >>
 >> endobj
-16014 0 obj <<
+16003 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [168.411 321.366 186.767 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.557) >>
 >> endobj
-16015 0 obj <<
+16004 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [179.774 307.816 198.13 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.557) >>
 >> endobj
-16016 0 obj <<
+16005 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.471 294.267 248.827 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.692) >>
 >> endobj
-16017 0 obj <<
+16006 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [178.077 280.718 190.979 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.90) >>
 >> endobj
-16018 0 obj <<
+16007 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.653 280.718 214.009 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.105) >>
 >> endobj
-16019 0 obj <<
+16008 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.683 280.718 237.04 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.235) >>
 >> endobj
-16020 0 obj <<
+16009 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [142.986 267.169 155.888 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.95) >>
 >> endobj
-16021 0 obj <<
+16010 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.532 253.62 175.888 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.569) >>
 >> endobj
-16022 0 obj <<
+16011 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [152.714 240.07 171.07 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.345) >>
 >> endobj
-16023 0 obj <<
+16012 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [161.138 226.521 179.494 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.158) >>
 >> endobj
-16024 0 obj <<
+16013 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [203.35 212.972 221.706 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.122) >>
 >> endobj
-16025 0 obj <<
+16014 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [198.471 199.423 216.827 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.365) >>
 >> endobj
-16026 0 obj <<
+16015 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.805 185.874 176.161 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.627) >>
 >> endobj
-16027 0 obj <<
+16016 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [147.198 172.324 165.555 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.629) >>
 >> endobj
-16028 0 obj <<
+16017 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [165.683 158.775 184.04 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.611) >>
 >> endobj
-16029 0 obj <<
+16018 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.289 145.226 213.646 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.417) >>
 >> endobj
-16030 0 obj <<
+16019 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [222.35 131.677 240.706 143.245]
 /Subtype /Link
 /A << /S /GoTo /D (page.162) >>
 >> endobj
-16031 0 obj <<
+16020 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [152.744 118.128 171.1 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-16032 0 obj <<
+16021 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [175.774 118.128 194.13 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.419) >>
 >> endobj
-16033 0 obj <<
+16022 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [342.9 646.546 361.256 657.946]
 /Subtype /Link
 /A << /S /GoTo /D (page.165) >>
 >> endobj
-16034 0 obj <<
+16023 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [337.627 632.997 350.529 644.397]
 /Subtype /Link
 /A << /S /GoTo /D (page.68) >>
 >> endobj
-16035 0 obj <<
+16024 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [354.233 632.997 372.59 644.397]
 /Subtype /Link
 /A << /S /GoTo /D (page.192) >>
 >> endobj
-16036 0 obj <<
+16025 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [376.294 632.997 394.65 644.397]
 /Subtype /Link
 /A << /S /GoTo /D (page.343) >>
 >> endobj
-16037 0 obj <<
+16026 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [398.355 632.997 416.711 644.397]
 /Subtype /Link
 /A << /S /GoTo /D (page.604) >>
 >> endobj
-16038 0 obj <<
+16027 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.173 632.997 438.529 644.397]
 /Subtype /Link
 /A << /S /GoTo /D (page.606) >>
 >> endobj
-16039 0 obj <<
+16028 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.233 632.997 460.59 644.397]
 /Subtype /Link
 /A << /S /GoTo /D (page.627) >>
 >> endobj
-16040 0 obj <<
+16029 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [375.567 619.448 393.923 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.195) >>
 >> endobj
-16041 0 obj <<
+16030 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [363.506 605.899 381.862 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.627) >>
 >> endobj
-16042 0 obj <<
+16031 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [379.627 592.35 397.984 603.749]
 /Subtype /Link
 /A << /S /GoTo /D (page.609) >>
 >> endobj
-16043 0 obj <<
+16032 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [355.536 578.8 373.893 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.203) >>
 >> endobj
-16044 0 obj <<
+16033 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [330.324 565.251 348.68 576.651]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-16045 0 obj <<
+16034 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.294 551.702 424.65 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.376) >>
 >> endobj
-16046 0 obj <<
+16035 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 524.604 457.513 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-16047 0 obj <<
+16036 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [347.9 483.956 360.802 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-16048 0 obj <<
+16037 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [365.476 483.956 383.832 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-16049 0 obj <<
+16038 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.607 443.308 406.963 454.452]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-16050 0 obj <<
+16039 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.882 443.308 432.238 454.452]
 /Subtype /Link
 /A << /S /GoTo /D (page.158) >>
 >> endobj
-16051 0 obj <<
+16040 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 443.308 457.513 454.452]
 /Subtype /Link
 /A << /S /GoTo /D (page.162) >>
 >> endobj
-16052 0 obj <<
+16041 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 429.759 354.864 440.903]
 /Subtype /Link
 /A << /S /GoTo /D (page.169) >>
 >> endobj
-16053 0 obj <<
+16042 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.538 429.759 377.895 440.903]
 /Subtype /Link
 /A << /S /GoTo /D (page.178) >>
 >> endobj
-16054 0 obj <<
+16043 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.569 429.759 400.925 440.903]
 /Subtype /Link
 /A << /S /GoTo /D (page.179) >>
 >> endobj
-16055 0 obj <<
+16044 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.457 416.21 412.813 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-16056 0 obj <<
+16045 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.807 416.21 435.163 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.158) >>
 >> endobj
-16057 0 obj <<
+16046 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 416.21 457.513 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.163) >>
 >> endobj
-16058 0 obj <<
+16047 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 402.661 354.864 413.805]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-16059 0 obj <<
+16048 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.538 402.661 377.895 413.805]
 /Subtype /Link
 /A << /S /GoTo /D (page.179) >>
 >> endobj
-16060 0 obj <<
+16049 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.476 389.112 451.832 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.594) >>
 >> endobj
-16061 0 obj <<
+16050 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [440.385 375.562 458.741 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.594) >>
 >> endobj
-16062 0 obj <<
+16051 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [374.87 362.013 393.226 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-16063 0 obj <<
+16052 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.9 362.013 416.256 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-16064 0 obj <<
+16053 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.93 362.013 439.287 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.376) >>
 >> endobj
-16065 0 obj <<
+16054 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.749 348.464 381.105 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.594) >>
 >> endobj
-16066 0 obj <<
+16055 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.021 334.915 418.377 346.059]
 /Subtype /Link
 /A << /S /GoTo /D (page.245) >>
 >> endobj
-16067 0 obj <<
+16056 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.052 334.915 441.408 346.059]
 /Subtype /Link
 /A << /S /GoTo /D (page.571) >>
 >> endobj
-16068 0 obj <<
+16057 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [369.445 267.169 387.802 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.618) >>
 >> endobj
-16069 0 obj <<
+16058 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.264 253.62 396.62 264.764]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-16070 0 obj <<
+16059 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.294 253.62 419.65 264.764]
 /Subtype /Link
 /A << /S /GoTo /D (page.723) >>
 >> endobj
-16071 0 obj <<
+16060 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [351.658 240.07 370.014 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.595) >>
 >> endobj
-16072 0 obj <<
+16061 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.415 226.521 412.771 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.595) >>
 >> endobj
-16073 0 obj <<
+16062 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.506 212.972 433.862 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.684) >>
 >> endobj
-16074 0 obj <<
+16063 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [337.9 199.423 356.256 210.567]
 /Subtype /Link
 /A << /S /GoTo /D (page.317) >>
 >> endobj
-16075 0 obj <<
+16064 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [333.688 185.874 352.044 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.452) >>
 >> endobj
-16076 0 obj <<
+16065 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [348.233 172.324 366.59 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.481) >>
 >> endobj
-16077 0 obj <<
+16066 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.991 158.775 406.347 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.158) >>
 >> endobj
-16078 0 obj <<
+16067 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [343.961 145.226 356.862 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.94) >>
 >> endobj
-16079 0 obj <<
+16068 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [361.536 145.226 379.893 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-16080 0 obj <<
+16069 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [350.021 131.677 362.923 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.44) >>
 >> endobj
-16081 0 obj <<
+16070 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [367.597 131.677 380.499 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-16082 0 obj <<
+16071 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.173 131.677 398.074 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.91) >>
 >> endobj
-16083 0 obj <<
+16072 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.749 131.677 415.65 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.94) >>
 >> endobj
-16084 0 obj <<
+16073 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.324 131.677 438.68 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.607) >>
 >> endobj
-16085 0 obj <<
+16074 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.142 118.128 415.499 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.607) >>
 >> endobj
-16091 0 obj <<
-/D [16089 0 R /XYZ 100.892 685.529 null]
+16080 0 obj <<
+/D [16078 0 R /XYZ 100.892 685.529 null]
 >> endobj
-16088 0 obj <<
+16077 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-16249 0 obj <<
+16238 0 obj <<
 /Length 1468      
 /Filter /FlateDecode
 >>
@@ -98067,1093 +101792,1093 @@
 È­‹¤“Ùe¯n·!i=⑶ J[úØ…XK©Q¬]Éw¬RŽŸå0…´Æ%ÊÃÇ9v]ôSQÏ1Ñ·W‡7þ„ˆ#þÀ¯ÿ‘ù™Œ°Yé1ónÒäBÚXXÄpìä0	ÉË	¤œ9+nÙyæ{8ôÞœî6P;§ëT÷½†Û!ä„o‘s$RŽQ\A<ºVha ììõó³·­Ó.PƒÕÌÁ¼ª8œ•È:o‘/YV€%n¬æá¯K‡-â«]!IŒè<…°±9ûçðcQHV¡xY¯£1µKÃlþüÓÀe[jÕy»4¨|åEÕ§¾kž×Íd›0û½¿=ëKòÐcºøÛ/äÆ¡zfñ‹ÍIf¶¹ýíÅ éix­bäävêåÕâ_lâoV
 endstream
 endobj
-16248 0 obj <<
+16237 0 obj <<
 /Type /Page
-/Contents 16249 0 R
-/Resources 16247 0 R
+/Contents 16238 0 R
+/Resources 16236 0 R
 /MediaBox [0 0 612 792]
-/Parent 15743 0 R
-/Annots [ 16086 0 R 16087 0 R 16092 0 R 16093 0 R 16094 0 R 16095 0 R 16096 0 R 16097 0 R 16098 0 R 16099 0 R 16100 0 R 16101 0 R 16102 0 R 16103 0 R 16104 0 R 16105 0 R 16106 0 R 16107 0 R 16108 0 R 16109 0 R 16110 0 R 16111 0 R 16112 0 R 16113 0 R 16114 0 R 16115 0 R 16116 0 R 16117 0 R 16118 0 R 16119 0 R 16120 0 R 16121 0 R 16122 0 R 16123 0 R 16124 0 R 16125 0 R 16126 0 R 16127 0 R 16128 0 R 16129 0 R 16130 0 R 16131 0 R 16132 0 R 16133 0 R 16134 0 R 16135 0 R 16136 0 R 16137 0 R 16138 0 R 16139 0 R 16140 0 R 16141 0 R 16142 0 R 16143 0 R 16144 0 R 16145 0 R 16146 0 R 16147 0 R 16148 0 R 16149 0 R 16150 0 R 16151 0 R 16152 0 R 16153 0 R 16154 0 R 16155 0 R 16156 0 R 16157 0 R 16158 0 R 16159 0 R 16160 0 R 16161 0 R 16162 0 R 16163 0 R 16164 0 R 16165 0 R 16166 0 R 16167 0 R 16168 0 R 16169 0 R 16170 0 R 16171 0 R 16172 0 R 16173 0 R 16174 0 R 16175 0 R 16176 0 R 16177 0 R 16178 0 R 16179 0 R 16180 0 R 16181 0 R 16182 0 R 16183 0 R 16184 0 R 16185 0 R 16186 0 R 16187 0 R 16188 0 R 16189 0 R 16190 0 R 16191 0 R 16192 0 R 16193 0 R 16194 0 R 16195 0 R 16196 0 R 16197 0 R 16198 0 R 16199 0 R 16200 0 R 16201 0 R 16202 0 R 16203 0 R 16204 0 R 16205 0 R 16206 0 R 16207 0 R 16208 0 R 16209 0 R 16210 0 R 16211 0 R 16212 0 R 16213 0 R 16214 0 R 16215 0 R 16216 0 R 16217 0 R 16218 0 R 16219 0 R 16220 0 R 16221 0 R 16222 0 R 16223 0 R 16224 0 R 16225 0 R 16226 0 R 16227 0 R 16228 0 R 16229 0 R 16230 0 R 16231 0 R 16232 0 R 16233 0 R 16234 0 R 16235 0 R 16236 0 R 16237 0 R 16238 0 R 16239 0 R 16240 0 R 16241 0 R 16242 0 R ]
+/Parent 15731 0 R
+/Annots [ 16075 0 R 16076 0 R 16081 0 R 16082 0 R 16083 0 R 16084 0 R 16085 0 R 16086 0 R 16087 0 R 16088 0 R 16089 0 R 16090 0 R 16091 0 R 16092 0 R 16093 0 R 16094 0 R 16095 0 R 16096 0 R 16097 0 R 16098 0 R 16099 0 R 16100 0 R 16101 0 R 16102 0 R 16103 0 R 16104 0 R 16105 0 R 16106 0 R 16107 0 R 16108 0 R 16109 0 R 16110 0 R 16111 0 R 16112 0 R 16113 0 R 16114 0 R 16115 0 R 16116 0 R 16117 0 R 16118 0 R 16119 0 R 16120 0 R 16121 0 R 16122 0 R 16123 0 R 16124 0 R 16125 0 R 16126 0 R 16127 0 R 16128 0 R 16129 0 R 16130 0 R 16131 0 R 16132 0 R 16133 0 R 16134 0 R 16135 0 R 16136 0 R 16137 0 R 16138 0 R 16139 0 R 16140 0 R 16141 0 R 16142 0 R 16143 0 R 16144 0 R 16145 0 R 16146 0 R 16147 0 R 16148 0 R 16149 0 R 16150 0 R 16151 0 R 16152 0 R 16153 0 R 16154 0 R 16155 0 R 16156 0 R 16157 0 R 16158 0 R 16159 0 R 16160 0 R 16161 0 R 16162 0 R 16163 0 R 16164 0 R 16165 0 R 16166 0 R 16167 0 R 16168 0 R 16169 0 R 16170 0 R 16171 0 R 16172 0 R 16173 0 R 16174 0 R 16175 0 R 16176 0 R 16177 0 R 16178 0 R 16179 0 R 16180 0 R 16181 0 R 16182 0 R 16183 0 R 16184 0 R 16185 0 R 16186 0 R 16187 0 R 16188 0 R 16189 0 R 16190 0 R 16191 0 R 16192 0 R 16193 0 R 16194 0 R 16195 0 R 16196 0 R 16197 0 R 16198 0 R 16199 0 R 16200 0 R 16201 0 R 16202 0 R 16203 0 R 16204 0 R 16205 0 R 16206 0 R 16207 0 R 16208 0 R 16209 0 R 16210 0 R 16211 0 R 16212 0 R 16213 0 R 16214 0 R 16215 0 R 16216 0 R 16217 0 R 16218 0 R 16219 0 R 16220 0 R 16221 0 R 16222 0 R 16223 0 R 16224 0 R 16225 0 R 16226 0 R 16227 0 R 16228 0 R 16229 0 R 16230 0 R 16231 0 R ]
 >> endobj
-16086 0 obj <<
+16075 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [207.705 646.546 220.607 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.63) >>
 >> endobj
-16087 0 obj <<
+16076 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [225.281 646.546 238.182 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.90) >>
 >> endobj
-16092 0 obj <<
+16081 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.357 632.997 250.714 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.179) >>
 >> endobj
-16093 0 obj <<
+16082 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.539 619.448 214.441 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.69) >>
 >> endobj
-16094 0 obj <<
+16083 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.115 619.448 232.017 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.86) >>
 >> endobj
-16095 0 obj <<
+16084 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.691 619.448 249.592 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.88) >>
 >> endobj
-16096 0 obj <<
+16085 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.267 619.448 267.168 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.93) >>
 >> endobj
-16097 0 obj <<
+16086 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [271.842 619.448 284.744 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.97) >>
 >> endobj
-16098 0 obj <<
+16087 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.691 605.899 225.047 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.158) >>
 >> endobj
-16099 0 obj <<
+16088 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [229.721 605.899 248.077 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.172) >>
 >> endobj
-16100 0 obj <<
+16089 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [252.751 605.899 271.108 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.173) >>
 >> endobj
-16101 0 obj <<
+16090 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.766 592.35 273.122 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.172) >>
 >> endobj
-16102 0 obj <<
+16091 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.462 578.8 222.819 590.2]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-16103 0 obj <<
+16092 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [250.796 565.251 269.152 576.651]
 /Subtype /Link
 /A << /S /GoTo /D (page.810) >>
 >> endobj
-16104 0 obj <<
+16093 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.523 551.702 214.879 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.644) >>
 >> endobj
-16105 0 obj <<
+16094 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.765 538.153 216.122 549.552]
 /Subtype /Link
 /A << /S /GoTo /D (page.644) >>
 >> endobj
-16106 0 obj <<
+16095 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.978 524.604 214.334 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.683) >>
 >> endobj
-16107 0 obj <<
+16096 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.22 511.054 211.576 522.454]
 /Subtype /Link
 /A << /S /GoTo /D (page.561) >>
 >> endobj
-16108 0 obj <<
+16097 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.129 497.505 222.485 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.475) >>
 >> endobj
-16109 0 obj <<
+16098 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [296.234 483.956 314.59 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.153) >>
 >> endobj
-16110 0 obj <<
+16099 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [270.099 470.407 288.455 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.168) >>
 >> endobj
-16111 0 obj <<
+16100 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [240.887 456.858 259.243 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.573) >>
 >> endobj
-16112 0 obj <<
+16101 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.493 443.308 252.849 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.692) >>
 >> endobj
-16113 0 obj <<
+16102 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.947 429.759 231.304 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.608) >>
 >> endobj
-16114 0 obj <<
+16103 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [235.978 429.759 254.334 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.624) >>
 >> endobj
-16115 0 obj <<
+16104 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.675 416.21 292.031 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.364) >>
 >> endobj
-16116 0 obj <<
+16105 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.826 402.661 216.182 413.805]
 /Subtype /Link
 /A << /S /GoTo /D (page.295) >>
 >> endobj
-16117 0 obj <<
+16106 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.644 389.112 236 400.68]
 /Subtype /Link
 /A << /S /GoTo /D (page.176) >>
 >> endobj
-16118 0 obj <<
+16107 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.129 375.562 219.485 386.962]
 /Subtype /Link
 /A << /S /GoTo /D (page.697) >>
 >> endobj
-16119 0 obj <<
+16108 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [235.978 362.013 254.334 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.306) >>
 >> endobj
-16120 0 obj <<
+16109 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.553 348.464 223.91 360.032]
 /Subtype /Link
 /A << /S /GoTo /D (page.814) >>
 >> endobj
-16121 0 obj <<
+16110 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.553 334.915 223.91 346.483]
 /Subtype /Link
 /A << /S /GoTo /D (page.814) >>
 >> endobj
-16122 0 obj <<
+16111 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.553 321.366 223.91 332.934]
 /Subtype /Link
 /A << /S /GoTo /D (page.394) >>
 >> endobj
-16123 0 obj <<
+16112 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.553 307.816 223.91 319.385]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-16124 0 obj <<
+16113 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.584 294.267 226.94 305.835]
 /Subtype /Link
 /A << /S /GoTo /D (page.218) >>
 >> endobj
-16125 0 obj <<
+16114 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.553 280.718 223.91 292.286]
 /Subtype /Link
 /A << /S /GoTo /D (page.799) >>
 >> endobj
-16126 0 obj <<
+16115 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.038 267.169 223.394 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.301) >>
 >> endobj
-16127 0 obj <<
+16116 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.917 253.62 214.819 265.188]
 /Subtype /Link
 /A << /S /GoTo /D (page.90) >>
 >> endobj
-16128 0 obj <<
+16117 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.402 240.07 202.758 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.753) >>
 >> endobj
-16129 0 obj <<
+16118 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [262.917 226.521 281.273 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-16130 0 obj <<
+16119 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [263.826 212.972 282.182 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-16131 0 obj <<
+16120 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [178.479 199.423 191.381 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.61) >>
 >> endobj
-16132 0 obj <<
+16121 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.06 199.423 215.416 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.103) >>
 >> endobj
-16133 0 obj <<
+16122 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.096 199.423 239.452 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-16134 0 obj <<
+16123 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [245.132 199.423 263.488 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.235) >>
 >> endobj
-16135 0 obj <<
+16124 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [269.168 199.423 287.524 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-16136 0 obj <<
+16125 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.204 199.423 311.56 210.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.288) >>
 >> endobj
-16137 0 obj <<
+16126 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 185.874 208.912 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-16138 0 obj <<
+16127 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.586 185.874 231.942 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.294) >>
 >> endobj
-16139 0 obj <<
+16128 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.616 185.874 254.972 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-16140 0 obj <<
+16129 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.646 185.874 278.003 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.574) >>
 >> endobj
-16141 0 obj <<
+16130 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [282.677 185.874 301.033 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.718) >>
 >> endobj
-16142 0 obj <<
+16131 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.675 172.324 216.031 183.893]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-16143 0 obj <<
+16132 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.978 158.775 220.334 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-16144 0 obj <<
+16133 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [253.766 145.226 272.122 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.307) >>
 >> endobj
-16145 0 obj <<
+16134 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.432 131.677 197.334 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.65) >>
 >> endobj
-16146 0 obj <<
+16135 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [202.008 131.677 214.91 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.77) >>
 >> endobj
-16147 0 obj <<
+16136 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.584 131.677 237.94 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.116) >>
 >> endobj
-16148 0 obj <<
+16137 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.614 131.677 260.97 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-16149 0 obj <<
+16138 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.614 118.128 267.97 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.261) >>
 >> endobj
-16150 0 obj <<
+16139 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [450.679 646.546 469.035 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.238) >>
 >> endobj
-16151 0 obj <<
+16140 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [473.71 646.546 492.066 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-16152 0 obj <<
+16141 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.346 632.926 442.702 644.616]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-16153 0 obj <<
+16142 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [447.376 632.926 465.732 644.616]
 /Subtype /Link
 /A << /S /GoTo /D (page.305) >>
 >> endobj
-16154 0 obj <<
+16143 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [372.618 619.306 390.975 630.875]
 /Subtype /Link
 /A << /S /GoTo /D (page.479) >>
 >> endobj
-16155 0 obj <<
+16144 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.497 605.686 405.854 617.376]
 /Subtype /Link
 /A << /S /GoTo /D (page.642) >>
 >> endobj
-16156 0 obj <<
+16145 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.437 592.066 449.793 603.756]
 /Subtype /Link
 /A << /S /GoTo /D (page.556) >>
 >> endobj
-16157 0 obj <<
+16146 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.079 578.446 442.981 590.136]
 /Subtype /Link
 /A << /S /GoTo /D (page.72) >>
 >> endobj
-16158 0 obj <<
+16147 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [447.415 578.446 465.771 590.136]
 /Subtype /Link
 /A << /S /GoTo /D (page.613) >>
 >> endobj
-16159 0 obj <<
+16148 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [470.206 578.446 488.562 590.136]
 /Subtype /Link
 /A << /S /GoTo /D (page.616) >>
 >> endobj
-16160 0 obj <<
+16149 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [492.996 578.446 511.352 590.136]
 /Subtype /Link
 /A << /S /GoTo /D (page.619) >>
 >> endobj
-16161 0 obj <<
+16150 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.952 564.826 441.308 576.516]
 /Subtype /Link
 /A << /S /GoTo /D (page.183) >>
 >> endobj
-16162 0 obj <<
+16151 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.346 551.206 421.702 562.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-16163 0 obj <<
+16152 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [373.861 537.586 392.217 548.73]
 /Subtype /Link
 /A << /S /GoTo /D (page.106) >>
 >> endobj
-16164 0 obj <<
+16153 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [396.891 537.586 415.247 548.73]
 /Subtype /Link
 /A << /S /GoTo /D (page.136) >>
 >> endobj
-16165 0 obj <<
+16154 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.922 537.586 438.278 548.73]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-16166 0 obj <<
+16155 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.164 523.966 432.52 535.11]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-16167 0 obj <<
+16156 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [437.194 523.966 455.551 535.11]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-16168 0 obj <<
+16157 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.982 510.346 431.338 521.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.725) >>
 >> endobj
-16169 0 obj <<
+16158 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [396.982 496.726 415.338 507.87]
 /Subtype /Link
 /A << /S /GoTo /D (page.306) >>
 >> endobj
-16170 0 obj <<
+16159 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.649 483.106 401.005 494.251]
 /Subtype /Link
 /A << /S /GoTo /D (page.458) >>
 >> endobj
-16171 0 obj <<
+16160 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [377.467 469.486 395.823 481.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.110) >>
 >> endobj
-16172 0 obj <<
+16161 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.497 469.486 418.854 481.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.567) >>
 >> endobj
-16173 0 obj <<
+16162 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.528 469.486 441.884 481.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.579) >>
 >> endobj
-16174 0 obj <<
+16163 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.558 469.486 464.914 481.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.614) >>
 >> endobj
-16175 0 obj <<
+16164 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.77 455.867 420.126 467.556]
 /Subtype /Link
 /A << /S /GoTo /D (page.590) >>
 >> endobj
-16176 0 obj <<
+16165 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.8 455.867 443.157 467.556]
 /Subtype /Link
 /A << /S /GoTo /D (page.689) >>
 >> endobj
-16177 0 obj <<
+16166 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.255 442.247 438.611 453.936]
 /Subtype /Link
 /A << /S /GoTo /D (page.707) >>
 >> endobj
-16178 0 obj <<
+16167 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.8 428.627 416.157 440.316]
 /Subtype /Link
 /A << /S /GoTo /D (page.344) >>
 >> endobj
-16179 0 obj <<
+16168 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [395.376 415.007 413.732 426.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.245) >>
 >> endobj
-16180 0 obj <<
+16169 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.406 415.007 436.763 426.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.411) >>
 >> endobj
-16181 0 obj <<
+16170 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.437 415.007 459.793 426.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.421) >>
 >> endobj
-16182 0 obj <<
+16171 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.467 415.007 482.823 426.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.519) >>
 >> endobj
-16183 0 obj <<
+16172 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [487.497 415.007 505.854 426.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.611) >>
 >> endobj
-16184 0 obj <<
+16173 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.899 401.387 438.256 413.076]
 /Subtype /Link
 /A << /S /GoTo /D (page.501) >>
 >> endobj
-16185 0 obj <<
+16174 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.255 401.387 461.611 413.076]
 /Subtype /Link
 /A << /S /GoTo /D (page.504) >>
 >> endobj
-16186 0 obj <<
+16175 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [466.61 401.387 484.967 413.076]
 /Subtype /Link
 /A << /S /GoTo /D (page.508) >>
 >> endobj
-16187 0 obj <<
+16176 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 401.387 508.322 413.076]
 /Subtype /Link
 /A << /S /GoTo /D (page.510) >>
 >> endobj
-16188 0 obj <<
+16177 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 387.837 405.674 398.981]
 /Subtype /Link
 /A << /S /GoTo /D (page.511) >>
 >> endobj
-16189 0 obj <<
+16178 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.348 387.837 428.704 398.981]
 /Subtype /Link
 /A << /S /GoTo /D (page.515) >>
 >> endobj
-16190 0 obj <<
+16179 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [432.059 374.217 450.415 385.907]
 /Subtype /Link
 /A << /S /GoTo /D (page.508) >>
 >> endobj
-16191 0 obj <<
+16180 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [455.089 374.217 473.445 385.907]
 /Subtype /Link
 /A << /S /GoTo /D (page.516) >>
 >> endobj
-16192 0 obj <<
+16181 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.453 360.597 442.809 371.741]
 /Subtype /Link
 /A << /S /GoTo /D (page.508) >>
 >> endobj
-16193 0 obj <<
+16182 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.038 346.977 457.394 358.377]
 /Subtype /Link
 /A << /S /GoTo /D (page.508) >>
 >> endobj
-16194 0 obj <<
+16183 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.502 346.977 482.858 358.377]
 /Subtype /Link
 /A << /S /GoTo /D (page.512) >>
 >> endobj
-16195 0 obj <<
+16184 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 346.977 508.322 358.377]
 /Subtype /Link
 /A << /S /GoTo /D (page.513) >>
 >> endobj
-16196 0 obj <<
+16185 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 333.428 405.674 344.572]
 /Subtype /Link
 /A << /S /GoTo /D (page.516) >>
 >> endobj
-16197 0 obj <<
+16186 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.348 333.428 428.704 344.572]
 /Subtype /Link
 /A << /S /GoTo /D (page.517) >>
 >> endobj
-16198 0 obj <<
+16187 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.378 333.428 451.734 344.572]
 /Subtype /Link
 /A << /S /GoTo /D (page.519) >>
 >> endobj
-16199 0 obj <<
+16188 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.544 319.808 434.9 331.498]
 /Subtype /Link
 /A << /S /GoTo /D (page.510) >>
 >> endobj
-16200 0 obj <<
+16189 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.574 319.808 457.93 331.498]
 /Subtype /Link
 /A << /S /GoTo /D (page.511) >>
 >> endobj
-16201 0 obj <<
+16190 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [462.604 319.808 480.961 331.498]
 /Subtype /Link
 /A << /S /GoTo /D (page.513) >>
 >> endobj
-16202 0 obj <<
+16191 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [485.635 319.808 503.991 331.498]
 /Subtype /Link
 /A << /S /GoTo /D (page.516) >>
 >> endobj
-16203 0 obj <<
+16192 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [421.089 306.188 439.445 317.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.510) >>
 >> endobj
-16204 0 obj <<
+16193 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.12 306.188 462.476 317.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.513) >>
 >> endobj
-16205 0 obj <<
+16194 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [467.15 306.188 485.506 317.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.516) >>
 >> endobj
-16206 0 obj <<
+16195 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [490.18 306.188 508.536 317.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.519) >>
 >> endobj
-16207 0 obj <<
+16196 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.763 292.568 435.119 304.258]
 /Subtype /Link
 /A << /S /GoTo /D (page.499) >>
 >> endobj
-16208 0 obj <<
+16197 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.164 292.568 459.52 304.258]
 /Subtype /Link
 /A << /S /GoTo /D (page.501) >>
 >> endobj
-16209 0 obj <<
+16198 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [465.565 292.568 483.921 304.258]
 /Subtype /Link
 /A << /S /GoTo /D (page.504) >>
 >> endobj
-16210 0 obj <<
+16199 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 292.568 508.322 304.258]
 /Subtype /Link
 /A << /S /GoTo /D (page.508) >>
 >> endobj
-16211 0 obj <<
+16200 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 279.019 405.674 290.163]
 /Subtype /Link
 /A << /S /GoTo /D (page.512) >>
 >> endobj
-16212 0 obj <<
+16201 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.348 279.019 428.704 290.163]
 /Subtype /Link
 /A << /S /GoTo /D (page.516) >>
 >> endobj
-16213 0 obj <<
+16202 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [368.77 265.399 387.126 277.089]
 /Subtype /Link
 /A << /S /GoTo /D (page.684) >>
 >> endobj
-16214 0 obj <<
+16203 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [379.376 251.779 392.278 262.923]
 /Subtype /Link
 /A << /S /GoTo /D (page.94) >>
 >> endobj
-16215 0 obj <<
+16204 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [396.952 251.779 409.854 262.923]
 /Subtype /Link
 /A << /S /GoTo /D (page.97) >>
 >> endobj
-16216 0 obj <<
+16205 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.528 251.779 432.884 262.923]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-16217 0 obj <<
+16206 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [437.558 251.779 455.914 262.923]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-16218 0 obj <<
+16207 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [460.588 251.779 478.944 262.923]
 /Subtype /Link
 /A << /S /GoTo /D (page.684) >>
 >> endobj
-16219 0 obj <<
+16208 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [483.619 251.779 501.975 262.923]
 /Subtype /Link
 /A << /S /GoTo /D (page.769) >>
 >> endobj
-16220 0 obj <<
+16209 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.437 238.159 403.793 249.849]
 /Subtype /Link
 /A << /S /GoTo /D (page.684) >>
 >> endobj
-16221 0 obj <<
+16210 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [380.285 224.539 398.641 235.683]
 /Subtype /Link
 /A << /S /GoTo /D (page.426) >>
 >> endobj
-16222 0 obj <<
+16211 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [393.558 210.919 411.914 222.609]
 /Subtype /Link
 /A << /S /GoTo /D (page.425) >>
 >> endobj
-16223 0 obj <<
+16212 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.588 210.919 434.944 222.609]
 /Subtype /Link
 /A << /S /GoTo /D (page.429) >>
 >> endobj
-16224 0 obj <<
+16213 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.619 210.919 457.975 222.609]
 /Subtype /Link
 /A << /S /GoTo /D (page.518) >>
 >> endobj
-16225 0 obj <<
+16214 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [462.649 210.919 481.005 222.609]
 /Subtype /Link
 /A << /S /GoTo /D (page.599) >>
 >> endobj
-16226 0 obj <<
+16215 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [379.39 186.157 392.291 197.725]
 /Subtype /Link
 /A << /S /GoTo /D (page.63) >>
 >> endobj
-16227 0 obj <<
+16216 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [398.232 186.157 411.134 197.725]
 /Subtype /Link
 /A << /S /GoTo /D (page.67) >>
 >> endobj
-16228 0 obj <<
+16217 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.075 186.157 429.976 197.725]
 /Subtype /Link
 /A << /S /GoTo /D (page.87) >>
 >> endobj
-16229 0 obj <<
+16218 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.438 186.157 446.34 197.725]
 /Subtype /Link
 /A << /S /GoTo /D (page.89) >>
 >> endobj
-16230 0 obj <<
+16219 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [452.281 186.157 465.182 197.725]
 /Subtype /Link
 /A << /S /GoTo /D (page.96) >>
 >> endobj
-16231 0 obj <<
+16220 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [471.123 186.157 484.025 197.725]
 /Subtype /Link
 /A << /S /GoTo /D (page.97) >>
 >> endobj
-16232 0 obj <<
+16221 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 186.157 508.322 197.725]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-16233 0 obj <<
+16222 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 172.608 405.674 183.752]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-16234 0 obj <<
+16223 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.348 172.608 428.704 183.752]
 /Subtype /Link
 /A << /S /GoTo /D (page.190) >>
 >> endobj
-16235 0 obj <<
+16224 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.378 172.608 451.734 183.752]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-16236 0 obj <<
+16225 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [456.409 172.608 474.765 183.752]
 /Subtype /Link
 /A << /S /GoTo /D (page.574) >>
 >> endobj
-16237 0 obj <<
+16226 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.271 158.988 428.173 170.677]
 /Subtype /Link
 /A << /S /GoTo /D (page.88) >>
 >> endobj
-16238 0 obj <<
+16227 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.392 145.368 437.294 157.057]
 /Subtype /Link
 /A << /S /GoTo /D (page.69) >>
 >> endobj
-16239 0 obj <<
+16228 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.968 145.368 454.87 157.057]
 /Subtype /Link
 /A << /S /GoTo /D (page.88) >>
 >> endobj
-16240 0 obj <<
+16229 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.497 131.748 438.854 143.437]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-16241 0 obj <<
+16230 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.528 131.748 461.884 143.437]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-16242 0 obj <<
+16231 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.604 118.128 416.506 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.85) >>
 >> endobj
-16250 0 obj <<
-/D [16248 0 R /XYZ 151.701 685.529 null]
+16239 0 obj <<
+/D [16237 0 R /XYZ 151.701 685.529 null]
 >> endobj
-16247 0 obj <<
+16236 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-16368 0 obj <<
+16357 0 obj <<
 /Length 1524      
 /Filter /FlateDecode
 >>
@@ -99169,736 +102894,736 @@
 §ñx' òÊ,æÁëÏÅÓ"xñcmÞqÀˆ§<o*]9w#ê!œÖíåõe—³ûæ.’6ƒœVKèIõsä¶6”;ŒÆÂK÷/ÿêé_4†·cj´mïEwN³„+ûI„ÓöG¿PohÛrÚœó¢Ð#º«¶¥h%äOuª/r½ç´þï›åäu_¯
 endstream
 endobj
-16367 0 obj <<
+16356 0 obj <<
 /Type /Page
-/Contents 16368 0 R
-/Resources 16366 0 R
+/Contents 16357 0 R
+/Resources 16355 0 R
 /MediaBox [0 0 612 792]
-/Parent 15743 0 R
-/Annots [ 16243 0 R 16244 0 R 16245 0 R 16246 0 R 16251 0 R 16252 0 R 16253 0 R 16254 0 R 16255 0 R 16256 0 R 16257 0 R 16258 0 R 16259 0 R 16260 0 R 16261 0 R 16262 0 R 16263 0 R 16264 0 R 16265 0 R 16266 0 R 16267 0 R 16268 0 R 16269 0 R 16270 0 R 16271 0 R 16272 0 R 16273 0 R 16274 0 R 16275 0 R 16276 0 R 16277 0 R 16278 0 R 16279 0 R 16280 0 R 16281 0 R 16282 0 R 16283 0 R 16284 0 R 16285 0 R 16286 0 R 16287 0 R 16288 0 R 16289 0 R 16290 0 R 16291 0 R 16292 0 R 16293 0 R 16294 0 R 16295 0 R 16296 0 R 16297 0 R 16298 0 R 16299 0 R 16300 0 R 16301 0 R 16302 0 R 16303 0 R 16304 0 R 16305 0 R 16306 0 R 16307 0 R 16308 0 R 16309 0 R 16310 0 R 16311 0 R 16312 0 R 16313 0 R 16314 0 R 16315 0 R 16316 0 R 16317 0 R 16318 0 R 16319 0 R 16320 0 R 16321 0 R 16322 0 R 16323 0 R 16324 0 R 16325 0 R 16326 0 R 16327 0 R 16328 0 R 16329 0 R 16330 0 R 16331 0 R 16332 0 R 16333 0 R 16334 0 R 16335 0 R 16336 0 R 16337 0 R 16338 0 R 16339 0 R 16340 0 R 16341 0 R 16342 0 R 16343 0 R 16344 0 R 16345 0 R 16346 0 R 16347 0 R 16348 0 R ]
+/Parent 15731 0 R
+/Annots [ 16232 0 R 16233 0 R 16234 0 R 16235 0 R 16240 0 R 16241 0 R 16242 0 R 16243 0 R 16244 0 R 16245 0 R 16246 0 R 16247 0 R 16248 0 R 16249 0 R 16250 0 R 16251 0 R 16252 0 R 16253 0 R 16254 0 R 16255 0 R 16256 0 R 16257 0 R 16258 0 R 16259 0 R 16260 0 R 16261 0 R 16262 0 R 16263 0 R 16264 0 R 16265 0 R 16266 0 R 16267 0 R 16268 0 R 16269 0 R 16270 0 R 16271 0 R 16272 0 R 16273 0 R 16274 0 R 16275 0 R 16276 0 R 16277 0 R 16278 0 R 16279 0 R 16280 0 R 16281 0 R 16282 0 R 16283 0 R 16284 0 R 16285 0 R 16286 0 R 16287 0 R 16288 0 R 16289 0 R 16290 0 R 16291 0 R 16292 0 R 16293 0 R 16294 0 R 16295 0 R 16296 0 R 16297 0 R 16298 0 R 16299 0 R 16300 0 R 16301 0 R 16302 0 R 16303 0 R 16304 0 R 16305 0 R 16306 0 R 16307 0 R 16308 0 R 16309 0 R 16310 0 R 16311 0 R 16312 0 R 16313 0 R 16314 0 R 16315 0 R 16316 0 R 16317 0 R 16318 0 R 16319 0 R 16320 0 R 16321 0 R 16322 0 R 16323 0 R 16324 0 R 16325 0 R 16326 0 R 16327 0 R 16328 0 R 16329 0 R 16330 0 R 16331 0 R 16332 0 R 16333 0 R 16334 0 R 16335 0 R 16336 0 R 16337 0 R ]
 >> endobj
-16243 0 obj <<
+16232 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [165.942 646.546 178.844 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.86) >>
 >> endobj
-16244 0 obj <<
+16233 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.518 646.546 201.874 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-16245 0 obj <<
+16234 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.548 646.546 224.904 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-16246 0 obj <<
+16235 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [229.578 646.546 247.935 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.216) >>
 >> endobj
-16251 0 obj <<
+16240 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.021 632.997 223.377 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.190) >>
 >> endobj
-16252 0 obj <<
+16241 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.245 619.448 190.147 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.86) >>
 >> endobj
-16253 0 obj <<
+16242 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [179.699 605.899 198.056 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.190) >>
 >> endobj
-16254 0 obj <<
+16243 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [202.73 605.899 221.086 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.214) >>
 >> endobj
-16255 0 obj <<
+16244 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [161.7 592.35 174.601 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.86) >>
 >> endobj
-16256 0 obj <<
+16245 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [179.275 592.35 197.631 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-16257 0 obj <<
+16246 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [202.306 592.35 220.662 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-16258 0 obj <<
+16247 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [169.895 578.8 188.252 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.171) >>
 >> endobj
-16259 0 obj <<
+16248 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [178.683 565.251 197.039 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.103) >>
 >> endobj
-16260 0 obj <<
+16249 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.986 551.702 225.343 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.575) >>
 >> endobj
-16261 0 obj <<
+16250 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.017 538.153 244.373 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.119) >>
 >> endobj
-16262 0 obj <<
+16251 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.289 524.604 201.646 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.110) >>
 >> endobj
-16263 0 obj <<
+16252 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.502 511.054 209.858 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.706) >>
 >> endobj
-16264 0 obj <<
+16253 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.714 497.505 218.07 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.683) >>
 >> endobj
-16265 0 obj <<
+16254 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.592 483.956 238.949 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.115) >>
 >> endobj
-16266 0 obj <<
+16255 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [166.259 470.407 184.615 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-16267 0 obj <<
+16256 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.562 456.858 224.918 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.119) >>
 >> endobj
-16268 0 obj <<
+16257 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [231.471 443.308 249.827 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.209) >>
 >> endobj
-16269 0 obj <<
+16258 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [176.32 429.759 194.676 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-16270 0 obj <<
+16259 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [178.168 416.21 196.524 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.363) >>
 >> endobj
-16271 0 obj <<
+16260 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.774 402.661 255.13 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.190) >>
 >> endobj
-16272 0 obj <<
+16261 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [163.382 375.562 181.739 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.706) >>
 >> endobj
-16273 0 obj <<
+16262 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.108 362.013 264.464 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.217) >>
 >> endobj
-16274 0 obj <<
+16263 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [214.714 348.464 233.07 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.371) >>
 >> endobj
-16275 0 obj <<
+16264 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [166.683 334.915 185.04 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.563) >>
 >> endobj
-16276 0 obj <<
+16265 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.956 321.366 192.312 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.218) >>
 >> endobj
-16277 0 obj <<
+16266 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.986 321.366 215.343 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.219) >>
 >> endobj
-16278 0 obj <<
+16267 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [220.017 321.366 238.373 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.718) >>
 >> endobj
-16279 0 obj <<
+16268 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [174.047 307.816 192.403 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.718) >>
 >> endobj
-16280 0 obj <<
+16269 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [209.153 294.267 227.509 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.718) >>
 >> endobj
-16281 0 obj <<
+16270 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.138 280.718 208.494 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.226) >>
 >> endobj
-16282 0 obj <<
+16271 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [187.077 267.169 205.433 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.226) >>
 >> endobj
-16283 0 obj <<
+16272 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.774 253.62 212.13 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.718) >>
 >> endobj
-16284 0 obj <<
+16273 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [194.38 240.07 212.737 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.226) >>
 >> endobj
-16285 0 obj <<
+16274 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [198.986 226.521 217.343 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.225) >>
 >> endobj
-16286 0 obj <<
+16275 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.592 212.972 208.949 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.226) >>
 >> endobj
-16287 0 obj <<
+16276 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.941 199.423 214.842 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.94) >>
 >> endobj
-16288 0 obj <<
+16277 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.44 199.423 237.796 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.200) >>
 >> endobj
-16289 0 obj <<
+16278 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 199.423 260.751 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.206) >>
 >> endobj
-16290 0 obj <<
+16279 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 185.874 158.102 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.207) >>
 >> endobj
-16291 0 obj <<
+16280 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 185.874 181.132 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.209) >>
 >> endobj
-16292 0 obj <<
+16281 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.807 185.874 204.163 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.216) >>
 >> endobj
-16293 0 obj <<
+16282 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.259 172.324 218.615 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.225) >>
 >> endobj
-16294 0 obj <<
+16283 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.526 158.775 214.883 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.199) >>
 >> endobj
-16295 0 obj <<
+16284 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.46 158.775 237.817 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.218) >>
 >> endobj
-16296 0 obj <<
+16285 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 158.775 260.751 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.219) >>
 >> endobj
-16297 0 obj <<
+16286 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 145.226 158.102 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.223) >>
 >> endobj
-16298 0 obj <<
+16287 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 145.226 181.132 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.225) >>
 >> endobj
-16299 0 obj <<
+16288 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.807 145.226 204.163 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.226) >>
 >> endobj
-16300 0 obj <<
+16289 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.837 145.226 227.193 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.717) >>
 >> endobj
-16301 0 obj <<
+16290 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.956 131.677 173.312 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-16302 0 obj <<
+16291 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.471 118.128 214.827 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.718) >>
 >> endobj
-16303 0 obj <<
+16292 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.809 646.546 422.165 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.688) >>
 >> endobj
-16304 0 obj <<
+16293 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.567 632.621 396.923 644.31]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-16305 0 obj <<
+16294 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [421.627 618.089 439.984 630.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.701) >>
 >> endobj
-16306 0 obj <<
+16295 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [376.446 604.77 394.802 616.459]
 /Subtype /Link
 /A << /S /GoTo /D (page.202) >>
 >> endobj
-16307 0 obj <<
+16296 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [350.355 590.844 363.256 602.534]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-16308 0 obj <<
+16297 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [367.93 590.844 380.832 602.534]
 /Subtype /Link
 /A << /S /GoTo /D (page.85) >>
 >> endobj
-16309 0 obj <<
+16298 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.506 590.844 403.862 602.534]
 /Subtype /Link
 /A << /S /GoTo /D (page.189) >>
 >> endobj
-16310 0 obj <<
+16299 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [408.536 590.844 426.893 602.534]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-16311 0 obj <<
+16300 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.567 590.844 449.923 602.534]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-16312 0 obj <<
+16301 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [340.355 576.918 358.711 588.608]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-16313 0 obj <<
+16302 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.476 562.993 400.832 574.682]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-16314 0 obj <<
+16303 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [325.809 521.593 344.165 533.282]
 /Subtype /Link
 /A << /S /GoTo /D (page.458) >>
 >> endobj
-16315 0 obj <<
+16304 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [377.658 507.667 396.014 519.357]
 /Subtype /Link
 /A << /S /GoTo /D (page.551) >>
 >> endobj
-16316 0 obj <<
+16305 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [343.688 493.741 356.589 505.431]
 /Subtype /Link
 /A << /S /GoTo /D (page.84) >>
 >> endobj
-16317 0 obj <<
+16306 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [337.627 479.816 355.983 491.505]
 /Subtype /Link
 /A << /S /GoTo /D (page.301) >>
 >> endobj
-16318 0 obj <<
+16307 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [355.203 465.89 373.559 477.58]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-16319 0 obj <<
+16308 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [318.536 451.965 336.893 463.109]
 /Subtype /Link
 /A << /S /GoTo /D (page.684) >>
 >> endobj
-16320 0 obj <<
+16309 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [330.082 438.039 348.438 449.439]
 /Subtype /Link
 /A << /S /GoTo /D (page.119) >>
 >> endobj
-16321 0 obj <<
+16310 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [377.688 424.114 396.044 435.803]
 /Subtype /Link
 /A << /S /GoTo /D (page.245) >>
 >> endobj
-16322 0 obj <<
+16311 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [334.385 410.188 352.741 421.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.177) >>
 >> endobj
-16323 0 obj <<
+16312 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [357.415 410.188 375.771 421.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.199) >>
 >> endobj
-16324 0 obj <<
+16313 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [327.264 396.263 345.62 407.831]
 /Subtype /Link
 /A << /S /GoTo /D (page.692) >>
 >> endobj
-16325 0 obj <<
+16314 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.173 382.337 419.529 394.026]
 /Subtype /Link
 /A << /S /GoTo /D (page.262) >>
 >> endobj
-16326 0 obj <<
+16315 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.233 382.337 441.59 394.026]
 /Subtype /Link
 /A << /S /GoTo /D (page.305) >>
 >> endobj
-16327 0 obj <<
+16316 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [445.294 382.337 463.65 394.026]
 /Subtype /Link
 /A << /S /GoTo /D (page.307) >>
 >> endobj
-16328 0 obj <<
+16317 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [454.385 368.411 472.741 380.101]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16329 0 obj <<
+16318 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.506 354.486 401.862 366.175]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16330 0 obj <<
+16319 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.536 340.56 409.893 352.25]
 /Subtype /Link
 /A << /S /GoTo /D (page.262) >>
 >> endobj
-16331 0 obj <<
+16320 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.567 340.56 432.923 352.25]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16332 0 obj <<
+16321 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [421.688 326.635 440.044 338.324]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16333 0 obj <<
+16322 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [331.203 312.709 349.559 324.399]
 /Subtype /Link
 /A << /S /GoTo /D (page.328) >>
 >> endobj
-16334 0 obj <<
+16323 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.233 298.784 417.59 310.473]
 /Subtype /Link
 /A << /S /GoTo /D (page.723) >>
 >> endobj
-16335 0 obj <<
+16324 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.067 284.858 437.423 296.548]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16336 0 obj <<
+16325 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.294 270.932 442.65 282.622]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16337 0 obj <<
+16326 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.173 257.007 457.529 268.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16338 0 obj <<
+16327 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.264 243.081 434.62 254.771]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16339 0 obj <<
+16328 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [330.688 229.156 349.044 240.3]
 /Subtype /Link
 /A << /S /GoTo /D (page.192) >>
 >> endobj
-16340 0 obj <<
+16329 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [355.29 215.23 368.192 226.92]
 /Subtype /Link
 /A << /S /GoTo /D (page.93) >>
 >> endobj
-16341 0 obj <<
+16330 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [373.771 215.23 392.127 226.92]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-16342 0 obj <<
+16331 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.707 215.23 416.063 226.92]
 /Subtype /Link
 /A << /S /GoTo /D (page.222) >>
 >> endobj
-16343 0 obj <<
+16332 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [365.203 187.755 372.65 199.155]
 /Subtype /Link
 /A << /S /GoTo /D (page.3) >>
 >> endobj
-16344 0 obj <<
+16333 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [332.506 173.83 350.862 184.974]
 /Subtype /Link
 /A << /S /GoTo /D (page.121) >>
 >> endobj
-16345 0 obj <<
+16334 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [364.748 159.904 377.65 171.048]
 /Subtype /Link
 /A << /S /GoTo /D (page.65) >>
 >> endobj
-16346 0 obj <<
+16335 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.93 145.979 423.287 157.668]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-16347 0 obj <<
+16336 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.87 132.053 431.226 143.453]
 /Subtype /Link
 /A << /S /GoTo /D (page.225) >>
 >> endobj
-16348 0 obj <<
+16337 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [384.415 118.128 402.771 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.363) >>
 >> endobj
-16369 0 obj <<
-/D [16367 0 R /XYZ 100.892 685.529 null]
+16358 0 obj <<
+/D [16356 0 R /XYZ 100.892 685.529 null]
 >> endobj
-16366 0 obj <<
+16355 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-16462 0 obj <<
+16451 0 obj <<
 /Length 1519      
 /Filter /FlateDecode
 >>
@@ -99913,764 +103638,764 @@
 Øý|!pú[B£ÉÒØ|‘Åô.ːç,ºX«±û—cº=—•Ú\7`OI‘går±½1·¸/ãðy·ÜëÕì_b—h
 endstream
 endobj
-16461 0 obj <<
+16450 0 obj <<
 /Type /Page
-/Contents 16462 0 R
-/Resources 16460 0 R
+/Contents 16451 0 R
+/Resources 16449 0 R
 /MediaBox [0 0 612 792]
-/Parent 16464 0 R
-/Annots [ 16349 0 R 16350 0 R 16351 0 R 16352 0 R 16353 0 R 16354 0 R 16355 0 R 16356 0 R 16357 0 R 16358 0 R 16359 0 R 16360 0 R 16361 0 R 16362 0 R 16363 0 R 16364 0 R 16365 0 R 16370 0 R 16371 0 R 16372 0 R 16373 0 R 16374 0 R 16375 0 R 16376 0 R 16377 0 R 16378 0 R 16379 0 R 16380 0 R 16381 0 R 16382 0 R 16383 0 R 16384 0 R 16385 0 R 16386 0 R 16387 0 R 16388 0 R 16389 0 R 16390 0 R 16391 0 R 16392 0 R 16393 0 R 16394 0 R 16395 0 R 16396 0 R 16397 0 R 16398 0 R 16399 0 R 16400 0 R 16401 0 R 16402 0 R 16403 0 R 16404 0 R 16405 0 R 16406 0 R 16407 0 R 16408 0 R 16409 0 R 16410 0 R 16411 0 R 16412 0 R 16413 0 R 16414 0 R 16415 0 R 16416 0 R 16417 0 R 16418 0 R 16419 0 R 16420 0 R 16421 0 R 16422 0 R 16423 0 R 16424 0 R 16425 0 R 16426 0 R 16427 0 R 16428 0 R 16429 0 R 16430 0 R 16431 0 R 16432 0 R 16433 0 R 16434 0 R 16435 0 R 16436 0 R 16437 0 R 16438 0 R 16439 0 R 16440 0 R 16441 0 R 16442 0 R 16443 0 R 16444 0 R 16445 0 R 16446 0 R 16447 0 R 16448 0 R 16449 0 R 16450 0 R 16451 0 R 16452 0 R 16453 0 R 16454 0 R 16455 0 R 16456 0 R 16457 0 R 16458 0 R ]
+/Parent 16453 0 R
+/Annots [ 16338 0 R 16339 0 R 16340 0 R 16341 0 R 16342 0 R 16343 0 R 16344 0 R 16345 0 R 16346 0 R 16347 0 R 16348 0 R 16349 0 R 16350 0 R 16351 0 R 16352 0 R 16353 0 R 16354 0 R 16359 0 R 16360 0 R 16361 0 R 16362 0 R 16363 0 R 16364 0 R 16365 0 R 16366 0 R 16367 0 R 16368 0 R 16369 0 R 16370 0 R 16371 0 R 16372 0 R 16373 0 R 16374 0 R 16375 0 R 16376 0 R 16377 0 R 16378 0 R 16379 0 R 16380 0 R 16381 0 R 16382 0 R 16383 0 R 16384 0 R 16385 0 R 16386 0 R 16387 0 R 16388 0 R 16389 0 R 16390 0 R 16391 0 R 16392 0 R 16393 0 R 16394 0 R 16395 0 R 16396 0 R 16397 0 R 16398 0 R 16399 0 R 16400 0 R 16401 0 R 16402 0 R 16403 0 R 16404 0 R 16405 0 R 16406 0 R 16407 0 R 16408 0 R 16409 0 R 16410 0 R 16411 0 R 16412 0 R 16413 0 R 16414 0 R 16415 0 R 16416 0 R 16417 0 R 16418 0 R 16419 0 R 16420 0 R 16421 0 R 16422 0 R 16423 0 R 16424 0 R 16425 0 R 16426 0 R 16427 0 R 16428 0 R 16429 0 R 16430 0 R 16431 0 R 16432 0 R 16433 0 R 16434 0 R 16435 0 R 16436 0 R 16437 0 R 16438 0 R 16439 0 R 16440 0 R 16441 0 R 16442 0 R 16443 0 R 16444 0 R 16445 0 R 16446 0 R 16447 0 R ]
 >> endobj
-16349 0 obj <<
+16338 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.477 646.546 206.379 657.946]
 /Subtype /Link
 /A << /S /GoTo /D (page.45) >>
 >> endobj
-16350 0 obj <<
+16339 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [211.008 646.546 223.909 657.946]
 /Subtype /Link
 /A << /S /GoTo /D (page.48) >>
 >> endobj
-16351 0 obj <<
+16340 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.538 646.546 241.439 657.946]
 /Subtype /Link
 /A << /S /GoTo /D (page.52) >>
 >> endobj
-16352 0 obj <<
+16341 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.068 646.546 258.97 657.946]
 /Subtype /Link
 /A << /S /GoTo /D (page.56) >>
 >> endobj
-16353 0 obj <<
+16342 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [263.598 646.546 276.5 657.946]
 /Subtype /Link
 /A << /S /GoTo /D (page.70) >>
 >> endobj
-16354 0 obj <<
+16343 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [281.128 646.546 294.03 657.946]
 /Subtype /Link
 /A << /S /GoTo /D (page.71) >>
 >> endobj
-16355 0 obj <<
+16344 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [298.658 646.546 311.56 657.946]
 /Subtype /Link
 /A << /S /GoTo /D (page.80) >>
 >> endobj
-16356 0 obj <<
+16345 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 632.997 208.912 644.141]
 /Subtype /Link
 /A << /S /GoTo /D (page.107) >>
 >> endobj
-16357 0 obj <<
+16346 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.616 632.997 230.972 644.141]
 /Subtype /Link
 /A << /S /GoTo /D (page.110) >>
 >> endobj
-16358 0 obj <<
+16347 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.434 632.997 252.79 644.141]
 /Subtype /Link
 /A << /S /GoTo /D (page.112) >>
 >> endobj
-16359 0 obj <<
+16348 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [256.495 632.997 274.851 644.141]
 /Subtype /Link
 /A << /S /GoTo /D (page.363) >>
 >> endobj
-16360 0 obj <<
+16349 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [278.555 632.997 296.912 644.141]
 /Subtype /Link
 /A << /S /GoTo /D (page.501) >>
 >> endobj
-16361 0 obj <<
+16350 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [300.616 632.997 318.972 644.141]
 /Subtype /Link
 /A << /S /GoTo /D (page.543) >>
 >> endobj
-16362 0 obj <<
+16351 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 619.448 208.912 630.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-16363 0 obj <<
+16352 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.586 619.448 231.942 630.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.716) >>
 >> endobj
-16364 0 obj <<
+16353 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.616 619.448 254.972 630.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.751) >>
 >> endobj
-16365 0 obj <<
+16354 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.646 619.448 278.003 630.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.788) >>
 >> endobj
-16370 0 obj <<
+16359 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.812 605.899 239.714 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.48) >>
 >> endobj
-16371 0 obj <<
+16360 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [207.357 592.35 220.259 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.44) >>
 >> endobj
-16372 0 obj <<
+16361 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.782 578.8 221.229 590.2]
 /Subtype /Link
 /A << /S /GoTo /D (page.8) >>
 >> endobj
-16373 0 obj <<
+16362 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [229.675 565.251 248.031 576.651]
 /Subtype /Link
 /A << /S /GoTo /D (page.107) >>
 >> endobj
-16374 0 obj <<
+16363 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.735 551.702 253.091 563.101]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-16375 0 obj <<
+16364 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [233.22 483.956 251.576 495.355]
 /Subtype /Link
 /A << /S /GoTo /D (page.107) >>
 >> endobj
-16376 0 obj <<
+16365 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [237.523 470.407 255.879 481.806]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-16377 0 obj <<
+16366 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [248.766 456.858 267.122 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-16378 0 obj <<
+16367 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [271.796 456.858 290.152 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-16379 0 obj <<
+16368 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [233.22 443.308 251.576 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-16380 0 obj <<
+16369 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [237.523 429.759 255.879 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-16381 0 obj <<
+16370 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [260.553 429.759 278.91 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-16382 0 obj <<
+16371 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.159 416.21 235.516 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.368) >>
 >> endobj
-16383 0 obj <<
+16372 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.462 402.661 235.819 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.366) >>
 >> endobj
-16384 0 obj <<
+16373 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [296.234 389.112 314.59 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-16385 0 obj <<
+16374 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.281 375.562 232.182 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.52) >>
 >> endobj
-16386 0 obj <<
+16375 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.584 362.013 236.485 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.45) >>
 >> endobj
-16387 0 obj <<
+16376 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [222.675 348.464 241.031 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.324) >>
 >> endobj
-16388 0 obj <<
+16377 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [245.705 348.464 264.061 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.332) >>
 >> endobj
-16389 0 obj <<
+16378 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.493 334.915 239.394 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.45) >>
 >> endobj
-16390 0 obj <<
+16379 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.826 321.366 236.728 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.43) >>
 >> endobj
-16391 0 obj <<
+16380 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.402 321.366 254.304 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.79) >>
 >> endobj
-16392 0 obj <<
+16381 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.129 307.816 241.031 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.45) >>
 >> endobj
-16393 0 obj <<
+16382 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [252.675 294.267 271.031 305.667]
 /Subtype /Link
 /A << /S /GoTo /D (page.285) >>
 >> endobj
-16394 0 obj <<
+16383 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.978 280.718 251.334 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.369) >>
 >> endobj
-16395 0 obj <<
+16384 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.553 267.169 252.91 278.568]
 /Subtype /Link
 /A << /S /GoTo /D (page.707) >>
 >> endobj
-16396 0 obj <<
+16385 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.22 253.62 259.576 265.019]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-16397 0 obj <<
+16386 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [257.493 240.07 275.849 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.368) >>
 >> endobj
-16398 0 obj <<
+16387 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [225.372 226.521 243.728 237.921]
 /Subtype /Link
 /A << /S /GoTo /D (page.478) >>
 >> endobj
-16399 0 obj <<
+16388 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [240.735 212.972 259.091 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16400 0 obj <<
+16389 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.826 199.423 292.182 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.262) >>
 >> endobj
-16401 0 obj <<
+16390 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [295.887 199.423 314.243 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.305) >>
 >> endobj
-16402 0 obj <<
+16391 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 187.995 208.912 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.307) >>
 >> endobj
-16403 0 obj <<
+16392 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.614 172.324 311.97 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16404 0 obj <<
+16393 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [268.857 158.775 287.213 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16405 0 obj <<
+16394 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [307.099 145.226 325.455 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16406 0 obj <<
+16395 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [278.25 131.677 296.607 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16407 0 obj <<
+16396 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [263.978 118.128 282.334 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16408 0 obj <<
+16397 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [469.043 646.546 487.399 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16409 0 obj <<
+16398 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [485.164 632.997 503.52 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.262) >>
 >> endobj
-16410 0 obj <<
+16399 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [507.225 632.997 525.581 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.305) >>
 >> endobj
-16411 0 obj <<
+16400 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 619.448 405.674 630.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.307) >>
 >> endobj
-16412 0 obj <<
+16401 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.348 619.448 428.704 630.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16413 0 obj <<
+16402 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [479.77 605.899 498.126 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16414 0 obj <<
+16403 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [440.406 592.35 458.763 603.749]
 /Subtype /Link
 /A << /S /GoTo /D (page.698) >>
 >> endobj
-16415 0 obj <<
+16404 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [429.558 578.8 447.914 589.944]
 /Subtype /Link
 /A << /S /GoTo /D (page.698) >>
 >> endobj
-16416 0 obj <<
+16405 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.497 565.251 444.854 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.395) >>
 >> endobj
-16417 0 obj <<
+16406 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [451.922 551.702 470.278 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.700) >>
 >> endobj
-16418 0 obj <<
+16407 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [473.891 538.153 492.248 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.262) >>
 >> endobj
-16419 0 obj <<
+16408 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [495.952 538.153 514.308 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.305) >>
 >> endobj
-16420 0 obj <<
+16409 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 526.725 405.674 535.748]
 /Subtype /Link
 /A << /S /GoTo /D (page.307) >>
 >> endobj
-16421 0 obj <<
+16410 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [501.104 511.054 519.46 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16422 0 obj <<
+16411 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 497.505 508.322 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.262) >>
 >> endobj
-16423 0 obj <<
+16412 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 483.956 405.674 495.1]
 /Subtype /Link
 /A << /S /GoTo /D (page.305) >>
 >> endobj
-16424 0 obj <<
+16413 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.348 483.956 428.704 495.1]
 /Subtype /Link
 /A << /S /GoTo /D (page.307) >>
 >> endobj
-16425 0 obj <<
+16414 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.378 483.956 451.734 495.1]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16426 0 obj <<
+16415 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.74 470.407 461.096 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.262) >>
 >> endobj
-16427 0 obj <<
+16416 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [465.77 470.407 484.126 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16428 0 obj <<
+16417 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.8 456.858 434.157 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.689) >>
 >> endobj
-16429 0 obj <<
+16418 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.891 443.308 445.248 454.877]
 /Subtype /Link
 /A << /S /GoTo /D (page.102) >>
 >> endobj
-16430 0 obj <<
+16419 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [448.952 443.308 467.308 454.877]
 /Subtype /Link
 /A << /S /GoTo /D (page.104) >>
 >> endobj
-16431 0 obj <<
+16420 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [471.013 443.308 489.369 454.877]
 /Subtype /Link
 /A << /S /GoTo /D (page.593) >>
 >> endobj
-16432 0 obj <<
+16421 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [493.073 443.308 511.429 454.877]
 /Subtype /Link
 /A << /S /GoTo /D (page.594) >>
 >> endobj
-16433 0 obj <<
+16422 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [491.134 429.759 509.49 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.104) >>
 >> endobj
-16434 0 obj <<
+16423 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.376 402.661 424.732 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.690) >>
 >> endobj
-16435 0 obj <<
+16424 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.073 389.112 424.975 400.68]
 /Subtype /Link
 /A << /S /GoTo /D (page.44) >>
 >> endobj
-16436 0 obj <<
+16425 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [463.362 375.562 476.264 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.31) >>
 >> endobj
-16437 0 obj <<
+16426 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [454.241 362.013 467.142 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.27) >>
 >> endobj
-16438 0 obj <<
+16427 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [471.817 362.013 484.718 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.96) >>
 >> endobj
-16439 0 obj <<
+16428 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.392 362.013 502.294 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.99) >>
 >> endobj
-16440 0 obj <<
+16429 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.423 348.464 443.324 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.17) >>
 >> endobj
-16441 0 obj <<
+16430 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.679 334.915 425.035 346.059]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-16442 0 obj <<
+16431 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [451.059 321.366 463.961 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.49) >>
 >> endobj
-16443 0 obj <<
+16432 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.376 307.816 434.732 319.385]
 /Subtype /Link
 /A << /S /GoTo /D (page.286) >>
 >> endobj
-16444 0 obj <<
+16433 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.528 294.267 424.429 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.56) >>
 >> endobj
-16445 0 obj <<
+16434 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.134 280.718 422.581 292.117]
 /Subtype /Link
 /A << /S /GoTo /D (page.7) >>
 >> endobj
-16446 0 obj <<
+16435 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.891 267.169 429.247 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.387) >>
 >> endobj
-16447 0 obj <<
+16436 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.922 267.169 452.278 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.395) >>
 >> endobj
-16448 0 obj <<
+16437 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [435.225 253.62 453.581 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.809) >>
 >> endobj
-16449 0 obj <<
+16438 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [445.558 240.07 463.914 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16450 0 obj <<
+16439 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [454.013 226.521 472.369 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16451 0 obj <<
+16440 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [386.437 212.972 404.793 224.371]
 /Subtype /Link
 /A << /S /GoTo /D (page.643) >>
 >> endobj
-16452 0 obj <<
+16441 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.285 199.423 439.187 210.822]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-16453 0 obj <<
+16442 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.588 185.874 428.49 197.273]
 /Subtype /Link
 /A << /S /GoTo /D (page.46) >>
 >> endobj
-16454 0 obj <<
+16443 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.164 185.874 446.066 197.273]
 /Subtype /Link
 /A << /S /GoTo /D (page.52) >>
 >> endobj
-16455 0 obj <<
+16444 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.952 158.775 462.308 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-16456 0 obj <<
+16445 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [457.952 145.226 476.308 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16457 0 obj <<
+16446 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [501.77 131.677 520.126 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16458 0 obj <<
+16447 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [472.134 118.128 490.49 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16463 0 obj <<
-/D [16461 0 R /XYZ 151.701 685.529 null]
+16452 0 obj <<
+/D [16450 0 R /XYZ 151.701 685.529 null]
 >> endobj
-16460 0 obj <<
+16449 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-16574 0 obj <<
+16563 0 obj <<
 /Length 1638      
 /Filter /FlateDecode
 >>
@@ -100688,771 +104413,771 @@
 K÷w›C“ujðtÃkº9”¹ûb„Oˆz„P|s¿L(‹íÏVúÃE9¡Ÿo›ºëorëÊÙÕC"S¥LÀ	R)£Æ}u£½{qkMbtº‹?±¼>–æi7B	ƒ9t¶'›ÒtÛƒCã= »óR±Z¶¦1VóG*ÑÈ+/Ȩąc6*×¾™×7 ®žÂ˜5ekÝúmêpzÐnstèå/ïn„}'þ´)l:ÕmÙÕÍŒñBcZõø”z̵:Z)^KnÜ¡%’©¤Ï²æǤO‘³Ù\¨Ù\„ü’ÈS(†‘|¥N¯ÁfÀ	«Ž1Ã4ŸÂÆü>qza<”ºéC{"¹7‰Ù§/ý¦¦æ¶˜q'³wjVý+ÔGƒ
 endstream
 endobj
-16573 0 obj <<
+16562 0 obj <<
 /Type /Page
-/Contents 16574 0 R
-/Resources 16572 0 R
+/Contents 16563 0 R
+/Resources 16561 0 R
 /MediaBox [0 0 612 792]
-/Parent 16464 0 R
-/Annots [ 16459 0 R 16465 0 R 16466 0 R 16467 0 R 16468 0 R 16469 0 R 16470 0 R 16471 0 R 16472 0 R 16473 0 R 16474 0 R 16475 0 R 16476 0 R 16477 0 R 16478 0 R 16479 0 R 16480 0 R 16481 0 R 16482 0 R 16483 0 R 16484 0 R 16485 0 R 16486 0 R 16487 0 R 16488 0 R 16489 0 R 16490 0 R 16491 0 R 16492 0 R 16493 0 R 16494 0 R 16495 0 R 16496 0 R 16497 0 R 16498 0 R 16499 0 R 16500 0 R 16501 0 R 16502 0 R 16503 0 R 16504 0 R 16505 0 R 16506 0 R 16507 0 R 16508 0 R 16509 0 R 16510 0 R 16511 0 R 16512 0 R 16513 0 R 16514 0 R 16515 0 R 16516 0 R 16517 0 R 16518 0 R 16519 0 R 16520 0 R 16521 0 R 16522 0 R 16523 0 R 16524 0 R 16525 0 R 16526 0 R 16527 0 R 16528 0 R 16529 0 R 16530 0 R 16531 0 R 16532 0 R 16533 0 R 16534 0 R 16535 0 R 16536 0 R 16537 0 R 16538 0 R 16539 0 R 16540 0 R 16541 0 R 16542 0 R 16543 0 R 16544 0 R 16545 0 R 16546 0 R 16547 0 R 16548 0 R 16549 0 R 16550 0 R 16551 0 R 16552 0 R 16553 0 R 16554 0 R 16555 0 R 16556 0 R 16557 0 R 16558 0 R 16559 0 R 16560 0 R 16561 0 R 16562 0 R 16563 0 R 16564 0 R 16565 0 R 16566 0 R 16567 0 R 16568 0 R 16569 0 R 16570 0 R ]
+/Parent 16453 0 R
+/Annots [ 16448 0 R 16454 0 R 16455 0 R 16456 0 R 16457 0 R 16458 0 R 16459 0 R 16460 0 R 16461 0 R 16462 0 R 16463 0 R 16464 0 R 16465 0 R 16466 0 R 16467 0 R 16468 0 R 16469 0 R 16470 0 R 16471 0 R 16472 0 R 16473 0 R 16474 0 R 16475 0 R 16476 0 R 16477 0 R 16478 0 R 16479 0 R 16480 0 R 16481 0 R 16482 0 R 16483 0 R 16484 0 R 16485 0 R 16486 0 R 16487 0 R 16488 0 R 16489 0 R 16490 0 R 16491 0 R 16492 0 R 16493 0 R 16494 0 R 16495 0 R 16496 0 R 16497 0 R 16498 0 R 16499 0 R 16500 0 R 16501 0 R 16502 0 R 16503 0 R 16504 0 R 16505 0 R 16506 0 R 16507 0 R 16508 0 R 16509 0 R 16510 0 R 16511 0 R 16512 0 R 16513 0 R 16514 0 R 16515 0 R 16516 0 R 16517 0 R 16518 0 R 16519 0 R 16520 0 R 16521 0 R 16522 0 R 16523 0 R 16524 0 R 16525 0 R 16526 0 R 16527 0 R 16528 0 R 16529 0 R 16530 0 R 16531 0 R 16532 0 R 16533 0 R 16534 0 R 16535 0 R 16536 0 R 16537 0 R 16538 0 R 16539 0 R 16540 0 R 16541 0 R 16542 0 R 16543 0 R 16544 0 R 16545 0 R 16546 0 R 16547 0 R 16548 0 R 16549 0 R 16550 0 R 16551 0 R 16552 0 R 16553 0 R 16554 0 R 16555 0 R 16556 0 R 16557 0 R 16558 0 R 16559 0 R ]
 >> endobj
-16459 0 obj <<
+16448 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [214.38 646.546 232.737 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16465 0 obj <<
+16454 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [176.168 632.997 194.524 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.124) >>
 >> endobj
-16466 0 obj <<
+16455 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [207.411 605.899 225.767 617.298]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-16467 0 obj <<
+16456 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [231.926 578.8 250.282 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.262) >>
 >> endobj
-16468 0 obj <<
+16457 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [253.986 578.8 272.343 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.305) >>
 >> endobj
-16469 0 obj <<
+16458 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 565.251 158.102 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.307) >>
 >> endobj
-16470 0 obj <<
+16459 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 565.251 181.132 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16471 0 obj <<
+16460 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.956 551.702 196.312 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16472 0 obj <<
+16461 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [147.895 538.153 166.252 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.509) >>
 >> endobj
-16473 0 obj <<
+16462 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [170.926 538.153 189.282 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.511) >>
 >> endobj
-16474 0 obj <<
+16463 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [164.047 523.997 182.403 536.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.509) >>
 >> endobj
-16475 0 obj <<
+16464 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [207.35 511.054 225.706 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.319) >>
 >> endobj
-16476 0 obj <<
+16465 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.532 497.505 213.888 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.308) >>
 >> endobj
-16477 0 obj <<
+16466 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [189.411 483.956 207.767 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.159) >>
 >> endobj
-16478 0 obj <<
+16467 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [127.926 470.407 146.282 481.975]
 /Subtype /Link
 /A << /S /GoTo /D (page.302) >>
 >> endobj
-16479 0 obj <<
+16468 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [145.501 456.858 163.858 468.426]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-16480 0 obj <<
+16469 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [152.774 443.308 171.13 454.877]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-16481 0 obj <<
+16470 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [133.456 429.759 151.812 441.327]
 /Subtype /Link
 /A << /S /GoTo /D (page.319) >>
 >> endobj
-16482 0 obj <<
+16471 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [141.471 416.21 159.827 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.200) >>
 >> endobj
-16483 0 obj <<
+16472 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.653 402.661 192.009 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.560) >>
 >> endobj
-16484 0 obj <<
+16473 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.168 389.112 224.524 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.110) >>
 >> endobj
-16485 0 obj <<
+16474 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [180.926 375.562 199.282 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.232) >>
 >> endobj
-16486 0 obj <<
+16475 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [166.308 362.013 184.664 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.558) >>
 >> endobj
-16487 0 obj <<
+16476 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [189.338 362.013 207.694 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.561) >>
 >> endobj
-16488 0 obj <<
+16477 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.702 348.464 224.058 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.558) >>
 >> endobj
-16489 0 obj <<
+16478 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [131.501 334.915 138.949 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.4) >>
 >> endobj
-16490 0 obj <<
+16479 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [143.623 334.915 161.979 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.313) >>
 >> endobj
-16491 0 obj <<
+16480 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [166.653 334.915 185.009 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.394) >>
 >> endobj
-16492 0 obj <<
+16481 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [163.744 321.366 182.1 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.323) >>
 >> endobj
-16493 0 obj <<
+16482 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.017 307.816 180.373 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.728) >>
 >> endobj
-16494 0 obj <<
+16483 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.441 294.267 213.797 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-16495 0 obj <<
+16484 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [165.198 280.718 183.555 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.690) >>
 >> endobj
-16496 0 obj <<
+16485 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.714 267.169 211.07 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.326) >>
 >> endobj
-16497 0 obj <<
+16486 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.198 253.62 208.555 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.325) >>
 >> endobj
-16498 0 obj <<
+16487 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.623 240.07 189.979 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.314) >>
 >> endobj
-16499 0 obj <<
+16488 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.502 226.521 224.858 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.728) >>
 >> endobj
-16500 0 obj <<
+16489 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [156.35 212.972 169.252 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.45) >>
 >> endobj
-16501 0 obj <<
+16490 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.926 212.972 186.827 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.47) >>
 >> endobj
-16502 0 obj <<
+16491 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.502 212.972 209.858 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.381) >>
 >> endobj
-16503 0 obj <<
+16492 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [186.865 199.423 205.221 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-16504 0 obj <<
+16493 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [160.895 185.874 179.252 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.121) >>
 >> endobj
-16505 0 obj <<
+16494 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.683 172.324 213.585 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.79) >>
 >> endobj
-16506 0 obj <<
+16495 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.532 158.775 210.888 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.121) >>
 >> endobj
-16507 0 obj <<
+16496 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.14 145.226 191.496 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.325) >>
 >> endobj
-16508 0 obj <<
+16497 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [168.562 118.128 186.918 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-16509 0 obj <<
+16498 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [332.567 646.546 350.923 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.155) >>
 >> endobj
-16510 0 obj <<
+16499 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [375.658 632.997 394.014 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.575) >>
 >> endobj
-16511 0 obj <<
+16500 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [339.718 619.448 358.074 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.325) >>
 >> endobj
-16512 0 obj <<
+16501 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.294 605.899 377.65 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.399) >>
 >> endobj
-16513 0 obj <<
+16502 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [324.294 592.35 342.65 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.458) >>
 >> endobj
-16514 0 obj <<
+16503 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [345.585 578.8 363.941 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.675) >>
 >> endobj
-16515 0 obj <<
+16504 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [367.403 578.8 385.759 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.677) >>
 >> endobj
-16516 0 obj <<
+16505 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [393.294 565.251 411.65 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.341) >>
 >> endobj
-16517 0 obj <<
+16506 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.324 565.251 434.68 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.617) >>
 >> endobj
-16518 0 obj <<
+16507 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [348.87 551.702 367.226 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.317) >>
 >> endobj
-16519 0 obj <<
+16508 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [347.112 538.153 365.468 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.128) >>
 >> endobj
-16520 0 obj <<
+16509 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [370.142 538.153 388.499 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.618) >>
 >> endobj
-16521 0 obj <<
+16510 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.17 524.604 437.526 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.395) >>
 >> endobj
-16522 0 obj <<
+16511 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.187 524.604 460.543 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.432) >>
 >> endobj
-16523 0 obj <<
+16512 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [390.445 511.054 408.802 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.721) >>
 >> endobj
-16524 0 obj <<
+16513 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [321.435 497.505 334.337 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.61) >>
 >> endobj
-16525 0 obj <<
+16514 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [338.833 497.505 351.735 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.82) >>
 >> endobj
-16526 0 obj <<
+16515 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [356.231 497.505 369.133 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.93) >>
 >> endobj
-16527 0 obj <<
+16516 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [373.629 497.505 386.531 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.95) >>
 >> endobj
-16528 0 obj <<
+16517 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.027 497.505 409.383 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.111) >>
 >> endobj
-16529 0 obj <<
+16518 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.88 497.505 432.236 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-16530 0 obj <<
+16519 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [436.732 497.505 455.088 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-16531 0 obj <<
+16520 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 483.956 354.864 495.1]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-16532 0 obj <<
+16521 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.17 483.956 380.526 495.1]
 /Subtype /Link
 /A << /S /GoTo /D (page.192) >>
 >> endobj
-16533 0 obj <<
+16522 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.832 483.956 406.188 495.1]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-16534 0 obj <<
+16523 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.494 483.956 431.851 495.1]
 /Subtype /Link
 /A << /S /GoTo /D (page.200) >>
 >> endobj
-16535 0 obj <<
+16524 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 483.956 457.513 495.1]
 /Subtype /Link
 /A << /S /GoTo /D (page.231) >>
 >> endobj
-16536 0 obj <<
+16525 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 470.407 354.864 481.551]
 /Subtype /Link
 /A << /S /GoTo /D (page.233) >>
 >> endobj
-16537 0 obj <<
+16526 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [361.564 470.407 379.92 481.551]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-16538 0 obj <<
+16527 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [386.62 470.407 404.976 481.551]
 /Subtype /Link
 /A << /S /GoTo /D (page.285) >>
 >> endobj
-16539 0 obj <<
+16528 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.676 470.407 430.032 481.551]
 /Subtype /Link
 /A << /S /GoTo /D (page.286) >>
 >> endobj
-16540 0 obj <<
+16529 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [436.732 470.407 455.088 481.551]
 /Subtype /Link
 /A << /S /GoTo /D (page.288) >>
 >> endobj
-16541 0 obj <<
+16530 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 456.858 354.864 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-16542 0 obj <<
+16531 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.17 456.858 380.526 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.294) >>
 >> endobj
-16543 0 obj <<
+16532 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.832 456.858 406.188 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-16544 0 obj <<
+16533 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.494 456.858 431.851 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.309) >>
 >> endobj
-16545 0 obj <<
+16534 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 456.858 457.513 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.568) >>
 >> endobj
-16546 0 obj <<
+16535 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 443.308 354.864 454.452]
 /Subtype /Link
 /A << /S /GoTo /D (page.571) >>
 >> endobj
-16547 0 obj <<
+16536 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.17 443.308 380.526 454.452]
 /Subtype /Link
 /A << /S /GoTo /D (page.624) >>
 >> endobj
-16548 0 obj <<
+16537 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.832 443.308 406.188 454.452]
 /Subtype /Link
 /A << /S /GoTo /D (page.625) >>
 >> endobj
-16549 0 obj <<
+16538 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.494 443.308 431.851 454.452]
 /Subtype /Link
 /A << /S /GoTo /D (page.698) >>
 >> endobj
-16550 0 obj <<
+16539 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 443.308 457.513 454.452]
 /Subtype /Link
 /A << /S /GoTo /D (page.707) >>
 >> endobj
-16551 0 obj <<
+16540 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 431.88 354.864 440.903]
 /Subtype /Link
 /A << /S /GoTo /D (page.725) >>
 >> endobj
-16552 0 obj <<
+16541 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.597 416.21 403.953 427.778]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-16553 0 obj <<
+16542 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.461 402.661 377.817 414.229]
 /Subtype /Link
 /A << /S /GoTo /D (page.232) >>
 >> endobj
-16554 0 obj <<
+16543 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [325.961 389.112 344.317 400.68]
 /Subtype /Link
 /A << /S /GoTo /D (page.729) >>
 >> endobj
-16555 0 obj <<
+16544 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.718 375.562 349.62 386.962]
 /Subtype /Link
 /A << /S /GoTo /D (page.84) >>
 >> endobj
-16556 0 obj <<
+16545 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.93 362.013 425.287 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.724) >>
 >> endobj
-16557 0 obj <<
+16546 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.779 348.464 407.226 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.7) >>
 >> endobj
-16558 0 obj <<
+16547 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.779 334.915 381.135 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.706) >>
 >> endobj
-16559 0 obj <<
+16548 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.506 294.267 400.862 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-16560 0 obj <<
+16549 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.324 280.718 410.68 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.123) >>
 >> endobj
-16561 0 obj <<
+16550 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [375.233 267.169 393.59 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-16562 0 obj <<
+16551 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.704 240.07 393.151 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.7) >>
 >> endobj
-16563 0 obj <<
+16552 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [348.536 226.521 366.893 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.121) >>
 >> endobj
-16564 0 obj <<
+16553 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [386.112 212.972 404.468 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.724) >>
 >> endobj
-16565 0 obj <<
+16554 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.142 199.423 415.499 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.134) >>
 >> endobj
-16566 0 obj <<
+16555 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [380.779 185.874 399.135 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.189) >>
 >> endobj
-16567 0 obj <<
+16556 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [361.688 172.324 380.044 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.689) >>
 >> endobj
-16568 0 obj <<
+16557 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [374.233 158.775 392.59 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.497) >>
 >> endobj
-16569 0 obj <<
+16558 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [354.084 131.677 366.985 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.99) >>
 >> endobj
-16570 0 obj <<
+16559 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [395.961 118.128 414.317 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.674) >>
 >> endobj
-16575 0 obj <<
-/D [16573 0 R /XYZ 100.892 685.529 null]
+16564 0 obj <<
+/D [16562 0 R /XYZ 100.892 685.529 null]
 >> endobj
-16572 0 obj <<
+16561 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-16721 0 obj <<
+16710 0 obj <<
 /Length 1432      
 /Filter /FlateDecode
 >>
@@ -101471,1023 +105196,1023 @@
 o³ÉÛªóÌÍd,&9,*LŽƒ¢\×ýs¬›½5å¡Nþ±o‹Ò"“o0§ª]þ‚b2ïCÞæEïÛЀïºÞ¢Ê73/Šfï[˜<¨ßÎ’<¹+Ï–‹Æ±·¡y’] Bp}^ÿ—_č±t*£Åóî¶ëÛjŠ!™6Üâõþé`¸Ú~Þ|gœe“¥ËÙO­E
 endstream
 endobj
-16720 0 obj <<
+16709 0 obj <<
 /Type /Page
-/Contents 16721 0 R
-/Resources 16719 0 R
+/Contents 16710 0 R
+/Resources 16708 0 R
 /MediaBox [0 0 612 792]
-/Parent 16464 0 R
-/Annots [ 16571 0 R 16576 0 R 16577 0 R 16578 0 R 16579 0 R 16580 0 R 16581 0 R 16582 0 R 16583 0 R 16584 0 R 16585 0 R 16586 0 R 16587 0 R 16588 0 R 16589 0 R 16590 0 R 16591 0 R 16592 0 R 16593 0 R 16594 0 R 16595 0 R 16596 0 R 16597 0 R 16598 0 R 16599 0 R 16600 0 R 16601 0 R 16602 0 R 16603 0 R 16604 0 R 16605 0 R 16606 0 R 16607 0 R 16608 0 R 16609 0 R 16610 0 R 16611 0 R 16612 0 R 16613 0 R 16614 0 R 16615 0 R 16616 0 R 16617 0 R 16618 0 R 16619 0 R 16620 0 R 16621 0 R 16622 0 R 16623 0 R 16624 0 R 16625 0 R 16626 0 R 16627 0 R 16628 0 R 16629 0 R 16630 0 R 16631 0 R 16632 0 R 16633 0 R 16634 0 R 16635 0 R 16636 0 R 16637 0 R 16638 0 R 16639 0 R 16640 0 R 16641 0 R 16642 0 R 16643 0 R 16644 0 R 16645 0 R 16646 0 R 16647 0 R 16648 0 R 16649 0 R 16650 0 R 16651 0 R 16652 0 R 16653 0 R 16654 0 R 16655 0 R 16656 0 R 16657 0 R 16658 0 R 16659 0 R 16660 0 R 16661 0 R 16662 0 R 16663 0 R 16664 0 R 16665 0 R 16666 0 R 16667 0 R 16668 0 R 16669 0 R 16670 0 R 16671 0 R 16672 0 R 16673 0 R 16674 0 R 16675 0 R 16676 0 R 16677 0 R 16678 0 R 16679 0 R 16680 0 R 16681 0 R 16682 0 R 16683 0 R 16684 0 R 16685 0 R 16686 0 R 16687 0 R 16688 0 R 16689 0 R 16690 0 R 16691 0 R 16692 0 R 16693 0 R 16694 0 R 16695 0 R 16696 0 R 16697 0 R 16698 0 R 16699 0 R 16700 0 R 16701 0 R 16702 0 R 16703 0 R 16704 0 R 16705 0 R 16706 0 R 16707 0 R 16708 0 R 16709 0 R 16710 0 R 16711 0 R 16712 0 R 16713 0 R 16714 0 R 16715 0 R 16716 0 R 16717 0 R ]
+/Parent 16453 0 R
+/Annots [ 16560 0 R 16565 0 R 16566 0 R 16567 0 R 16568 0 R 16569 0 R 16570 0 R 16571 0 R 16572 0 R 16573 0 R 16574 0 R 16575 0 R 16576 0 R 16577 0 R 16578 0 R 16579 0 R 16580 0 R 16581 0 R 16582 0 R 16583 0 R 16584 0 R 16585 0 R 16586 0 R 16587 0 R 16588 0 R 16589 0 R 16590 0 R 16591 0 R 16592 0 R 16593 0 R 16594 0 R 16595 0 R 16596 0 R 16597 0 R 16598 0 R 16599 0 R 16600 0 R 16601 0 R 16602 0 R 16603 0 R 16604 0 R 16605 0 R 16606 0 R 16607 0 R 16608 0 R 16609 0 R 16610 0 R 16611 0 R 16612 0 R 16613 0 R 16614 0 R 16615 0 R 16616 0 R 16617 0 R 16618 0 R 16619 0 R 16620 0 R 16621 0 R 16622 0 R 16623 0 R 16624 0 R 16625 0 R 16626 0 R 16627 0 R 16628 0 R 16629 0 R 16630 0 R 16631 0 R 16632 0 R 16633 0 R 16634 0 R 16635 0 R 16636 0 R 16637 0 R 16638 0 R 16639 0 R 16640 0 R 16641 0 R 16642 0 R 16643 0 R 16644 0 R 16645 0 R 16646 0 R 16647 0 R 16648 0 R 16649 0 R 16650 0 R 16651 0 R 16652 0 R 16653 0 R 16654 0 R 16655 0 R 16656 0 R 16657 0 R 16658 0 R 16659 0 R 16660 0 R 16661 0 R 16662 0 R 16663 0 R 16664 0 R 16665 0 R 16666 0 R 16667 0 R 16668 0 R 16669 0 R 16670 0 R 16671 0 R 16672 0 R 16673 0 R 16674 0 R 16675 0 R 16676 0 R 16677 0 R 16678 0 R 16679 0 R 16680 0 R 16681 0 R 16682 0 R 16683 0 R 16684 0 R 16685 0 R 16686 0 R 16687 0 R 16688 0 R 16689 0 R 16690 0 R 16691 0 R 16692 0 R 16693 0 R 16694 0 R 16695 0 R 16696 0 R 16697 0 R 16698 0 R 16699 0 R 16700 0 R 16701 0 R 16702 0 R 16703 0 R 16704 0 R 16705 0 R 16706 0 R ]
 >> endobj
-16571 0 obj <<
+16560 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.19 646.546 226.091 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.77) >>
 >> endobj
-16576 0 obj <<
+16565 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.735 632.621 240.091 644.31]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-16577 0 obj <<
+16566 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.614 618.695 254.97 630.385]
 /Subtype /Link
 /A << /S /GoTo /D (page.575) >>
 >> endobj
-16578 0 obj <<
+16567 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.796 604.77 212.152 616.459]
 /Subtype /Link
 /A << /S /GoTo /D (page.222) >>
 >> endobj
-16579 0 obj <<
+16568 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.584 590.844 200.94 602.534]
 /Subtype /Link
 /A << /S /GoTo /D (page.218) >>
 >> endobj
-16580 0 obj <<
+16569 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.311 576.918 223.667 588.608]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-16581 0 obj <<
+16570 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.341 576.918 246.697 588.608]
 /Subtype /Link
 /A << /S /GoTo /D (page.219) >>
 >> endobj
-16582 0 obj <<
+16571 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [251.372 576.918 269.728 588.608]
 /Subtype /Link
 /A << /S /GoTo /D (page.225) >>
 >> endobj
-16583 0 obj <<
+16572 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [205.917 562.993 218.819 574.682]
 /Subtype /Link
 /A << /S /GoTo /D (page.90) >>
 >> endobj
-16584 0 obj <<
+16573 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.978 549.067 220.334 560.757]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-16585 0 obj <<
+16574 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.281 535.142 228.637 546.831]
 /Subtype /Link
 /A << /S /GoTo /D (page.222) >>
 >> endobj
-16586 0 obj <<
+16575 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.099 521.216 234.455 532.906]
 /Subtype /Link
 /A << /S /GoTo /D (page.723) >>
 >> endobj
-16587 0 obj <<
+16576 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.584 507.291 241.94 518.98]
 /Subtype /Link
 /A << /S /GoTo /D (page.184) >>
 >> endobj
-16588 0 obj <<
+16577 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.281 493.365 237.637 505.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.796) >>
 >> endobj
-16589 0 obj <<
+16578 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [265.129 479.44 283.485 491.129]
 /Subtype /Link
 /A << /S /GoTo /D (page.186) >>
 >> endobj
-16590 0 obj <<
+16579 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [240.22 465.514 258.576 477.203]
 /Subtype /Link
 /A << /S /GoTo /D (page.797) >>
 >> endobj
-16591 0 obj <<
+16580 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [225.159 451.588 243.516 462.988]
 /Subtype /Link
 /A << /S /GoTo /D (page.448) >>
 >> endobj
-16592 0 obj <<
+16581 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [181.483 437.663 194.385 449.231]
 /Subtype /Link
 /A << /S /GoTo /D (page.52) >>
 >> endobj
-16593 0 obj <<
+16582 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.464 437.663 217.82 449.231]
 /Subtype /Link
 /A << /S /GoTo /D (page.119) >>
 >> endobj
-16594 0 obj <<
+16583 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [222.899 437.663 241.255 449.231]
 /Subtype /Link
 /A << /S /GoTo /D (page.122) >>
 >> endobj
-16595 0 obj <<
+16584 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [246.334 437.663 264.69 449.231]
 /Subtype /Link
 /A << /S /GoTo /D (page.154) >>
 >> endobj
-16596 0 obj <<
+16585 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [269.769 437.663 288.125 449.231]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-16597 0 obj <<
+16586 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.204 437.663 311.56 449.231]
 /Subtype /Link
 /A << /S /GoTo /D (page.176) >>
 >> endobj
-16598 0 obj <<
+16587 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 424.114 208.912 435.258]
 /Subtype /Link
 /A << /S /GoTo /D (page.365) >>
 >> endobj
-16599 0 obj <<
+16588 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.218 424.114 234.574 435.258]
 /Subtype /Link
 /A << /S /GoTo /D (page.403) >>
 >> endobj
-16600 0 obj <<
+16589 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.88 424.114 260.236 435.258]
 /Subtype /Link
 /A << /S /GoTo /D (page.665) >>
 >> endobj
-16601 0 obj <<
+16590 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [267.542 424.114 285.898 435.258]
 /Subtype /Link
 /A << /S /GoTo /D (page.684) >>
 >> endobj
-16602 0 obj <<
+16591 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.204 424.114 311.56 435.258]
 /Subtype /Link
 /A << /S /GoTo /D (page.689) >>
 >> endobj
-16603 0 obj <<
+16592 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 410.564 208.912 421.708]
 /Subtype /Link
 /A << /S /GoTo /D (page.691) >>
 >> endobj
-16604 0 obj <<
+16593 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.586 410.564 231.942 421.708]
 /Subtype /Link
 /A << /S /GoTo /D (page.753) >>
 >> endobj
-16605 0 obj <<
+16594 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [235.432 396.639 253.788 408.207]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-16606 0 obj <<
+16595 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.19 382.713 226.546 394.403]
 /Subtype /Link
 /A << /S /GoTo /D (page.691) >>
 >> endobj
-16607 0 obj <<
+16596 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.25 368.788 228.607 380.356]
 /Subtype /Link
 /A << /S /GoTo /D (page.664) >>
 >> endobj
-16608 0 obj <<
+16597 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [237.25 354.862 255.607 366.552]
 /Subtype /Link
 /A << /S /GoTo /D (page.753) >>
 >> endobj
-16609 0 obj <<
+16598 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [229.341 340.937 247.697 352.626]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-16610 0 obj <<
+16599 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.281 327.011 246.637 338.701]
 /Subtype /Link
 /A << /S /GoTo /D (page.202) >>
 >> endobj
-16611 0 obj <<
+16600 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [282.553 313.086 300.91 324.775]
 /Subtype /Link
 /A << /S /GoTo /D (page.192) >>
 >> endobj
-16612 0 obj <<
+16601 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.796 299.16 223.152 310.849]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-16613 0 obj <<
+16602 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.584 285.234 239.94 296.803]
 /Subtype /Link
 /A << /S /GoTo /D (page.545) >>
 >> endobj
-16614 0 obj <<
+16603 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.432 271.309 241.788 282.877]
 /Subtype /Link
 /A << /S /GoTo /D (page.689) >>
 >> endobj
-16615 0 obj <<
+16604 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.675 257.383 249.031 268.952]
 /Subtype /Link
 /A << /S /GoTo /D (page.690) >>
 >> endobj
-16616 0 obj <<
+16605 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [214.553 243.458 232.91 255.026]
 /Subtype /Link
 /A << /S /GoTo /D (page.641) >>
 >> endobj
-16617 0 obj <<
+16606 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.796 229.532 231.152 241.1]
 /Subtype /Link
 /A << /S /GoTo /D (page.195) >>
 >> endobj
-16618 0 obj <<
+16607 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.008 215.607 239.364 227.175]
 /Subtype /Link
 /A << /S /GoTo /D (page.690) >>
 >> endobj
-16619 0 obj <<
+16608 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.19 201.681 236.546 213.249]
 /Subtype /Link
 /A << /S /GoTo /D (page.119) >>
 >> endobj
-16620 0 obj <<
+16609 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.22 201.681 259.576 213.249]
 /Subtype /Link
 /A << /S /GoTo /D (page.707) >>
 >> endobj
-16621 0 obj <<
+16610 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [267.008 187.755 285.364 199.445]
 /Subtype /Link
 /A << /S /GoTo /D (page.689) >>
 >> endobj
-16622 0 obj <<
+16611 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [263.16 173.83 281.516 185.519]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-16623 0 obj <<
+16612 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [241.796 159.904 260.152 171.594]
 /Subtype /Link
 /A << /S /GoTo /D (page.700) >>
 >> endobj
-16624 0 obj <<
+16613 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.25 145.979 217.607 157.668]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-16625 0 obj <<
+16614 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [211.614 131.447 224.516 144.349]
 /Subtype /Link
 /A << /S /GoTo /D (page.92) >>
 >> endobj
-16626 0 obj <<
+16615 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [229.19 131.447 247.546 144.349]
 /Subtype /Link
 /A << /S /GoTo /D (page.119) >>
 >> endobj
-16627 0 obj <<
+16616 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [252.22 131.447 270.576 144.349]
 /Subtype /Link
 /A << /S /GoTo /D (page.195) >>
 >> endobj
-16628 0 obj <<
+16617 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [275.25 131.447 293.607 144.349]
 /Subtype /Link
 /A << /S /GoTo /D (page.674) >>
 >> endobj
-16629 0 obj <<
+16618 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [243.25 117.522 261.607 130.423]
 /Subtype /Link
 /A << /S /GoTo /D (page.214) >>
 >> endobj
-16630 0 obj <<
+16619 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.046 646.546 417.402 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-16631 0 obj <<
+16620 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [421.776 646.546 440.132 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.414) >>
 >> endobj
-16632 0 obj <<
+16621 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.506 646.546 462.862 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.415) >>
 >> endobj
-16633 0 obj <<
+16622 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [467.236 646.546 485.592 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.684) >>
 >> endobj
-16634 0 obj <<
+16623 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 646.546 508.322 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.747) >>
 >> endobj
-16635 0 obj <<
+16624 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 632.997 405.674 644.141]
 /Subtype /Link
 /A << /S /GoTo /D (page.748) >>
 >> endobj
-16636 0 obj <<
+16625 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.348 632.997 428.704 644.141]
 /Subtype /Link
 /A << /S /GoTo /D (page.754) >>
 >> endobj
-16637 0 obj <<
+16626 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [380.661 619.448 388.108 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.6) >>
 >> endobj
-16638 0 obj <<
+16627 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.57 619.448 399.017 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.8) >>
 >> endobj
-16639 0 obj <<
+16628 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.704 619.448 417.606 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.25) >>
 >> endobj
-16640 0 obj <<
+16629 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.292 619.448 436.194 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.29) >>
 >> endobj
-16641 0 obj <<
+16630 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.88 619.448 460.237 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-16642 0 obj <<
+16631 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [465.923 619.448 484.279 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.218) >>
 >> endobj
-16643 0 obj <<
+16632 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 619.448 508.322 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.222) >>
 >> endobj
-16644 0 obj <<
+16633 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 605.899 405.674 617.043]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-16645 0 obj <<
+16634 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.98 605.899 431.336 617.043]
 /Subtype /Link
 /A << /S /GoTo /D (page.292) >>
 >> endobj
-16646 0 obj <<
+16635 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.642 605.899 456.998 617.043]
 /Subtype /Link
 /A << /S /GoTo /D (page.307) >>
 >> endobj
-16647 0 obj <<
+16636 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.304 605.899 482.66 617.043]
 /Subtype /Link
 /A << /S /GoTo /D (page.389) >>
 >> endobj
-16648 0 obj <<
+16637 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 605.899 508.322 617.043]
 /Subtype /Link
 /A << /S /GoTo /D (page.391) >>
 >> endobj
-16649 0 obj <<
+16638 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 592.35 405.674 603.494]
 /Subtype /Link
 /A << /S /GoTo /D (page.555) >>
 >> endobj
-16650 0 obj <<
+16639 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.98 592.35 431.336 603.494]
 /Subtype /Link
 /A << /S /GoTo /D (page.568) >>
 >> endobj
-16651 0 obj <<
+16640 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.642 592.35 456.998 603.494]
 /Subtype /Link
 /A << /S /GoTo /D (page.576) >>
 >> endobj
-16652 0 obj <<
+16641 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.304 592.35 482.66 603.494]
 /Subtype /Link
 /A << /S /GoTo /D (page.579) >>
 >> endobj
-16653 0 obj <<
+16642 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 592.35 508.322 603.494]
 /Subtype /Link
 /A << /S /GoTo /D (page.582) >>
 >> endobj
-16654 0 obj <<
+16643 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 578.8 405.674 589.944]
 /Subtype /Link
 /A << /S /GoTo /D (page.584) >>
 >> endobj
-16655 0 obj <<
+16644 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.98 578.8 431.336 589.944]
 /Subtype /Link
 /A << /S /GoTo /D (page.691) >>
 >> endobj
-16656 0 obj <<
+16645 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.642 578.8 456.998 589.944]
 /Subtype /Link
 /A << /S /GoTo /D (page.696) >>
 >> endobj
-16657 0 obj <<
+16646 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.304 578.8 482.66 589.944]
 /Subtype /Link
 /A << /S /GoTo /D (page.698) >>
 >> endobj
-16658 0 obj <<
+16647 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 578.8 508.322 589.944]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-16659 0 obj <<
+16648 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 567.372 405.674 576.395]
 /Subtype /Link
 /A << /S /GoTo /D (page.753) >>
 >> endobj
-16660 0 obj <<
+16649 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.073 551.702 437.429 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.245) >>
 >> endobj
-16661 0 obj <<
+16650 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.043 538.153 438.399 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.241) >>
 >> endobj
-16662 0 obj <<
+16651 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.861 524.604 419.217 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.226) >>
 >> endobj
-16663 0 obj <<
+16652 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.406 511.054 460.763 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.249) >>
 >> endobj
-16664 0 obj <<
+16653 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.316 497.505 438.672 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.217) >>
 >> endobj
-16665 0 obj <<
+16654 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.469 483.956 419.371 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.50) >>
 >> endobj
-16666 0 obj <<
+16655 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.169 483.956 436.07 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-16667 0 obj <<
+16656 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.868 483.956 452.77 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.93) >>
 >> endobj
-16668 0 obj <<
+16657 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [456.567 483.956 469.469 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.94) >>
 >> endobj
-16669 0 obj <<
+16658 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [473.267 483.956 486.168 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.97) >>
 >> endobj
-16670 0 obj <<
+16659 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 483.956 508.322 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.101) >>
 >> endobj
-16671 0 obj <<
+16660 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 470.407 405.674 481.551]
 /Subtype /Link
 /A << /S /GoTo /D (page.112) >>
 >> endobj
-16672 0 obj <<
+16661 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.98 470.407 431.336 481.551]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-16673 0 obj <<
+16662 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.642 470.407 456.998 481.551]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-16674 0 obj <<
+16663 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.304 470.407 482.66 481.551]
 /Subtype /Link
 /A << /S /GoTo /D (page.189) >>
 >> endobj
-16675 0 obj <<
+16664 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 470.407 508.322 481.551]
 /Subtype /Link
 /A << /S /GoTo /D (page.190) >>
 >> endobj
-16676 0 obj <<
+16665 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 456.858 405.674 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.200) >>
 >> endobj
-16677 0 obj <<
+16666 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [409.136 456.858 427.492 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.203) >>
 >> endobj
-16678 0 obj <<
+16667 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.196 456.858 449.553 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.214) >>
 >> endobj
-16679 0 obj <<
+16668 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.015 456.858 471.371 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.216) >>
 >> endobj
-16680 0 obj <<
+16669 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [475.075 456.858 493.431 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.218) >>
 >> endobj
-16681 0 obj <<
+16670 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [497.136 456.858 515.492 468.002]
 /Subtype /Link
 /A << /S /GoTo /D (page.222) >>
 >> endobj
-16682 0 obj <<
+16671 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 443.308 405.674 454.452]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-16683 0 obj <<
+16672 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.348 443.308 428.704 454.452]
 /Subtype /Link
 /A << /S /GoTo /D (page.376) >>
 >> endobj
-16684 0 obj <<
+16673 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.378 443.308 451.734 454.452]
 /Subtype /Link
 /A << /S /GoTo /D (page.611) >>
 >> endobj
-16685 0 obj <<
+16674 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [456.409 443.308 474.765 454.452]
 /Subtype /Link
 /A << /S /GoTo /D (page.717) >>
 >> endobj
-16686 0 obj <<
+16675 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.831 429.759 461.187 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.205) >>
 >> endobj
-16687 0 obj <<
+16676 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [495.528 416.21 513.884 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-16688 0 obj <<
+16677 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [425.073 402.661 437.975 414.229]
 /Subtype /Link
 /A << /S /GoTo /D (page.78) >>
 >> endobj
-16689 0 obj <<
+16678 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [398.194 389.112 416.55 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.540) >>
 >> endobj
-16690 0 obj <<
+16679 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [421.225 389.112 439.581 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.541) >>
 >> endobj
-16691 0 obj <<
+16680 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.891 375.562 420.247 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.544) >>
 >> endobj
-16692 0 obj <<
+16681 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.922 375.562 443.278 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.764) >>
 >> endobj
-16693 0 obj <<
+16682 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.71 362.013 419.611 373.581]
 /Subtype /Link
 /A << /S /GoTo /D (page.78) >>
 >> endobj
-16694 0 obj <<
+16683 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.073 348.464 415.429 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.365) >>
 >> endobj
-16695 0 obj <<
+16684 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [376.255 334.915 394.611 346.483]
 /Subtype /Link
 /A << /S /GoTo /D (page.754) >>
 >> endobj
-16696 0 obj <<
+16685 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.134 321.366 420.49 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.560) >>
 >> endobj
-16697 0 obj <<
+16686 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.012 307.816 395.914 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.79) >>
 >> endobj
-16698 0 obj <<
+16687 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.588 307.816 418.944 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.753) >>
 >> endobj
-16699 0 obj <<
+16688 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.285 294.267 401.641 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.698) >>
 >> endobj
-16700 0 obj <<
+16689 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.225 280.718 440.581 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.698) >>
 >> endobj
-16701 0 obj <<
+16690 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [421.528 267.169 439.884 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.794) >>
 >> endobj
-16702 0 obj <<
+16691 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [469.891 253.62 488.248 265.188]
 /Subtype /Link
 /A << /S /GoTo /D (page.395) >>
 >> endobj
-16703 0 obj <<
+16692 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.74 240.07 404.096 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-16704 0 obj <<
+16693 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [408.77 240.07 427.126 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.586) >>
 >> endobj
-16705 0 obj <<
+16694 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.8 240.07 450.157 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.596) >>
 >> endobj
-16706 0 obj <<
+16695 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [454.831 240.07 473.187 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-16707 0 obj <<
+16696 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [477.861 240.07 496.217 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.677) >>
 >> endobj
-16708 0 obj <<
+16697 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.831 226.521 413.187 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.584) >>
 >> endobj
-16709 0 obj <<
+16698 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [409.073 212.972 416.52 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.7) >>
 >> endobj
-16710 0 obj <<
+16699 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [427.285 199.423 445.641 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.243) >>
 >> endobj
-16711 0 obj <<
+16700 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.316 185.874 444.672 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.303) >>
 >> endobj
-16712 0 obj <<
+16701 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [449.346 185.874 467.702 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.376) >>
 >> endobj
-16713 0 obj <<
+16702 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.437 172.324 440.793 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.405) >>
 >> endobj
-16714 0 obj <<
+16703 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [426.74 158.775 445.096 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.394) >>
 >> endobj
-16715 0 obj <<
+16704 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.013 145.226 438.369 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.405) >>
 >> endobj
-16716 0 obj <<
+16705 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.982 131.677 463.338 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.323) >>
 >> endobj
-16717 0 obj <<
+16706 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [457.467 118.128 475.823 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.133) >>
 >> endobj
-16722 0 obj <<
-/D [16720 0 R /XYZ 151.701 685.529 null]
+16711 0 obj <<
+/D [16709 0 R /XYZ 151.701 685.529 null]
 >> endobj
-16719 0 obj <<
+16708 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-16835 0 obj <<
+16824 0 obj <<
 /Length 1347      
 /Filter /FlateDecode
 >>
@@ -102505,792 +106230,792 @@
 ÂÈóö›Óq2:Dœ.&ÿþŠ6ý
 endstream
 endobj
-16834 0 obj <<
+16823 0 obj <<
 /Type /Page
-/Contents 16835 0 R
-/Resources 16833 0 R
+/Contents 16824 0 R
+/Resources 16822 0 R
 /MediaBox [0 0 612 792]
-/Parent 16464 0 R
-/Annots [ 16718 0 R 16723 0 R 16724 0 R 16725 0 R 16726 0 R 16727 0 R 16728 0 R 16729 0 R 16730 0 R 16731 0 R 16732 0 R 16733 0 R 16734 0 R 16735 0 R 16736 0 R 16737 0 R 16738 0 R 16739 0 R 16740 0 R 16741 0 R 16742 0 R 16743 0 R 16744 0 R 16745 0 R 16746 0 R 16747 0 R 16748 0 R 16749 0 R 16750 0 R 16751 0 R 16752 0 R 16753 0 R 16754 0 R 16755 0 R 16756 0 R 16757 0 R 16758 0 R 16759 0 R 16760 0 R 16761 0 R 16762 0 R 16763 0 R 16764 0 R 16765 0 R 16766 0 R 16767 0 R 16768 0 R 16769 0 R 16770 0 R 16771 0 R 16772 0 R 16773 0 R 16774 0 R 16775 0 R 16776 0 R 16777 0 R 16778 0 R 16779 0 R 16780 0 R 16781 0 R 16782 0 R 16783 0 R 16784 0 R 16785 0 R 16786 0 R 16787 0 R 16788 0 R 16789 0 R 16790 0 R 16791 0 R 16792 0 R 16793 0 R 16794 0 R 16795 0 R 16796 0 R 16797 0 R 16798 0 R 16799 0 R 16800 0 R 16801 0 R 16802 0 R 16803 0 R 16804 0 R 16805 0 R 16806 0 R 16807 0 R 16808 0 R 16809 0 R 16810 0 R 16811 0 R 16812 0 R 16813 0 R 16814 0 R 16815 0 R 16816 0 R 16817 0 R 16818 0 R 16819 0 R 16820 0 R 16821 0 R 16822 0 R 16823 0 R 16824 0 R 16825 0 R 16826 0 R 16827 0 R 16828 0 R 16829 0 R 16830 0 R 16831 0 R ]
+/Parent 16453 0 R
+/Annots [ 16707 0 R 16712 0 R 16713 0 R 16714 0 R 16715 0 R 16716 0 R 16717 0 R 16718 0 R 16719 0 R 16720 0 R 16721 0 R 16722 0 R 16723 0 R 16724 0 R 16725 0 R 16726 0 R 16727 0 R 16728 0 R 16729 0 R 16730 0 R 16731 0 R 16732 0 R 16733 0 R 16734 0 R 16735 0 R 16736 0 R 16737 0 R 16738 0 R 16739 0 R 16740 0 R 16741 0 R 16742 0 R 16743 0 R 16744 0 R 16745 0 R 16746 0 R 16747 0 R 16748 0 R 16749 0 R 16750 0 R 16751 0 R 16752 0 R 16753 0 R 16754 0 R 16755 0 R 16756 0 R 16757 0 R 16758 0 R 16759 0 R 16760 0 R 16761 0 R 16762 0 R 16763 0 R 16764 0 R 16765 0 R 16766 0 R 16767 0 R 16768 0 R 16769 0 R 16770 0 R 16771 0 R 16772 0 R 16773 0 R 16774 0 R 16775 0 R 16776 0 R 16777 0 R 16778 0 R 16779 0 R 16780 0 R 16781 0 R 16782 0 R 16783 0 R 16784 0 R 16785 0 R 16786 0 R 16787 0 R 16788 0 R 16789 0 R 16790 0 R 16791 0 R 16792 0 R 16793 0 R 16794 0 R 16795 0 R 16796 0 R 16797 0 R 16798 0 R 16799 0 R 16800 0 R 16801 0 R 16802 0 R 16803 0 R 16804 0 R 16805 0 R 16806 0 R 16807 0 R 16808 0 R 16809 0 R 16810 0 R 16811 0 R 16812 0 R 16813 0 R 16814 0 R 16815 0 R 16816 0 R 16817 0 R 16818 0 R 16819 0 R 16820 0 R ]
 >> endobj
-16718 0 obj <<
+16707 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.653 646.546 203.009 657.946]
 /Subtype /Link
 /A << /S /GoTo /D (page.765) >>
 >> endobj
-16723 0 obj <<
+16712 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [131.471 632.997 149.827 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.389) >>
 >> endobj
-16724 0 obj <<
+16713 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [168.366 619.448 175.813 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.4) >>
 >> endobj
-16725 0 obj <<
+16714 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [153.35 605.899 171.706 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.402) >>
 >> endobj
-16726 0 obj <<
+16715 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [159.956 592.35 178.312 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.387) >>
 >> endobj
-16727 0 obj <<
+16716 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [143.623 578.8 151.07 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.4) >>
 >> endobj
-16728 0 obj <<
+16717 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [146.017 565.251 164.373 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.400) >>
 >> endobj
-16729 0 obj <<
+16718 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [169.047 565.251 187.403 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.452) >>
 >> endobj
-16730 0 obj <<
+16719 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [158.942 551.702 177.298 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.452) >>
 >> endobj
-16731 0 obj <<
+16720 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.124 538.153 202.48 549.297]
 /Subtype /Link
 /A << /S /GoTo /D (page.452) >>
 >> endobj
-16732 0 obj <<
+16721 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.471 524.604 189.827 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.389) >>
 >> endobj
-16733 0 obj <<
+16722 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [169.047 511.054 187.403 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.452) >>
 >> endobj
-16734 0 obj <<
+16723 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [155.956 497.505 174.312 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.402) >>
 >> endobj
-16735 0 obj <<
+16724 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [127.926 483.956 146.282 495.524]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-16736 0 obj <<
+16725 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [141.562 470.407 154.464 481.975]
 /Subtype /Link
 /A << /S /GoTo /D (page.66) >>
 >> endobj
-16737 0 obj <<
+16726 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [165.32 456.858 183.676 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.112) >>
 >> endobj
-16738 0 obj <<
+16727 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [188.35 456.858 206.706 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.113) >>
 >> endobj
-16739 0 obj <<
+16728 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [211.38 456.858 229.736 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.160) >>
 >> endobj
-16740 0 obj <<
+16729 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [147.32 443.308 165.676 454.877]
 /Subtype /Link
 /A << /S /GoTo /D (page.660) >>
 >> endobj
-16741 0 obj <<
+16730 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [160.865 429.759 179.221 441.327]
 /Subtype /Link
 /A << /S /GoTo /D (page.104) >>
 >> endobj
-16742 0 obj <<
+16731 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [158.199 416.21 176.555 427.354]
 /Subtype /Link
 /A << /S /GoTo /D (page.104) >>
 >> endobj
-16743 0 obj <<
+16732 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [191.411 402.661 209.767 414.229]
 /Subtype /Link
 /A << /S /GoTo /D (page.104) >>
 >> endobj
-16744 0 obj <<
+16733 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [214.441 402.661 232.797 414.229]
 /Subtype /Link
 /A << /S /GoTo /D (page.594) >>
 >> endobj
-16745 0 obj <<
+16734 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [126.865 389.112 145.221 400.68]
 /Subtype /Link
 /A << /S /GoTo /D (page.415) >>
 >> endobj
-16746 0 obj <<
+16735 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [149.895 389.112 168.252 400.68]
 /Subtype /Link
 /A << /S /GoTo /D (page.596) >>
 >> endobj
-16747 0 obj <<
+16736 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [121.229 375.562 134.13 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.94) >>
 >> endobj
-16748 0 obj <<
+16737 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [138.804 375.562 151.706 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.97) >>
 >> endobj
-16749 0 obj <<
+16738 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [156.38 375.562 174.736 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-16750 0 obj <<
+16739 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [179.411 375.562 197.767 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.684) >>
 >> endobj
-16751 0 obj <<
+16740 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [125.501 362.013 143.858 373.581]
 /Subtype /Link
 /A << /S /GoTo /D (page.737) >>
 >> endobj
-16752 0 obj <<
+16741 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [127.168 348.464 140.07 360.032]
 /Subtype /Link
 /A << /S /GoTo /D (page.64) >>
 >> endobj
-16753 0 obj <<
+16742 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [144.744 348.464 157.646 360.032]
 /Subtype /Link
 /A << /S /GoTo /D (page.99) >>
 >> endobj
-16754 0 obj <<
+16743 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.32 348.464 180.676 360.032]
 /Subtype /Link
 /A << /S /GoTo /D (page.198) >>
 >> endobj
-16755 0 obj <<
+16744 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [144.501 334.915 162.858 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-16756 0 obj <<
+16745 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [158.168 321.366 176.524 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.764) >>
 >> endobj
-16757 0 obj <<
+16746 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.805 307.816 214.161 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.186) >>
 >> endobj
-16758 0 obj <<
+16747 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.805 294.267 211.161 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.286) >>
 >> endobj
-16759 0 obj <<
+16748 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.532 280.718 170.433 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.45) >>
 >> endobj
-16760 0 obj <<
+16749 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [175.108 280.718 188.009 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.70) >>
 >> endobj
-16761 0 obj <<
+16750 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.683 280.718 211.04 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-16762 0 obj <<
+16751 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.714 280.718 234.07 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-16763 0 obj <<
+16752 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.623 267.169 201.979 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.470) >>
 >> endobj
-16764 0 obj <<
+16753 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [192.562 253.62 210.919 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.107) >>
 >> endobj
-16765 0 obj <<
+16754 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.478 253.62 235.835 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.121) >>
 >> endobj
-16766 0 obj <<
+16755 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.394 253.62 260.751 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.122) >>
 >> endobj
-16767 0 obj <<
+16756 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 240.07 158.102 251.214]
 /Subtype /Link
 /A << /S /GoTo /D (page.206) >>
 >> endobj
-16768 0 obj <<
+16757 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [162.776 240.07 181.132 251.214]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-16769 0 obj <<
+16758 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.807 240.07 204.163 251.214]
 /Subtype /Link
 /A << /S /GoTo /D (page.723) >>
 >> endobj
-16770 0 obj <<
+16759 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.138 226.521 230.494 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-16771 0 obj <<
+16760 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [136.926 212.972 144.373 224.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.4) >>
 >> endobj
-16772 0 obj <<
+16761 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [149.047 212.972 167.403 224.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.696) >>
 >> endobj
-16773 0 obj <<
+16762 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [144.198 199.423 162.555 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.468) >>
 >> endobj
-16774 0 obj <<
+16763 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.623 185.874 201.979 197.442]
 /Subtype /Link
 /A << /S /GoTo /D (page.403) >>
 >> endobj
-16775 0 obj <<
+16764 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [153.76 158.775 161.207 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.6) >>
 >> endobj
-16776 0 obj <<
+16765 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [165.881 158.775 178.783 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.25) >>
 >> endobj
-16777 0 obj <<
+16766 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.457 158.775 196.359 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.29) >>
 >> endobj
-16778 0 obj <<
+16767 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [152.003 145.226 159.45 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.6) >>
 >> endobj
-16779 0 obj <<
+16768 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [164.124 145.226 177.025 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.25) >>
 >> endobj
-16780 0 obj <<
+16769 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [181.699 145.226 194.601 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.29) >>
 >> endobj
-16781 0 obj <<
+16770 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [170.427 131.677 177.874 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.6) >>
 >> endobj
-16782 0 obj <<
+16771 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.548 131.677 195.45 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.29) >>
 >> endobj
-16783 0 obj <<
+16772 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.124 131.677 218.48 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.568) >>
 >> endobj
-16784 0 obj <<
+16773 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [148.229 118.128 166.585 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.775) >>
 >> endobj
-16785 0 obj <<
+16774 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [348.355 646.546 366.711 658.115]
 /Subtype /Link
 /A << /S /GoTo /D (page.225) >>
 >> endobj
-16786 0 obj <<
+16775 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [357.643 619.448 365.091 630.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.7) >>
 >> endobj
-16787 0 obj <<
+16776 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [368.355 605.899 386.711 617.298]
 /Subtype /Link
 /A << /S /GoTo /D (page.580) >>
 >> endobj
-16788 0 obj <<
+16777 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [326.415 592.35 344.771 603.494]
 /Subtype /Link
 /A << /S /GoTo /D (page.689) >>
 >> endobj
-16789 0 obj <<
+16778 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.536 578.8 403.893 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.688) >>
 >> endobj
-16790 0 obj <<
+16779 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.567 565.251 409.923 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.687) >>
 >> endobj
-16791 0 obj <<
+16780 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.415 551.702 415.771 563.27]
 /Subtype /Link
 /A << /S /GoTo /D (page.173) >>
 >> endobj
-16792 0 obj <<
+16781 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [372.294 538.153 390.65 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.707) >>
 >> endobj
-16793 0 obj <<
+16782 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [347.93 524.604 366.287 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.319) >>
 >> endobj
-16794 0 obj <<
+16783 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [370.961 524.604 389.317 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.724) >>
 >> endobj
-16795 0 obj <<
+16784 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [393.476 511.054 411.832 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.200) >>
 >> endobj
-16796 0 obj <<
+16785 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [381.355 497.505 399.711 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.201) >>
 >> endobj
-16797 0 obj <<
+16786 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [366.112 483.956 384.468 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-16798 0 obj <<
+16787 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.991 470.407 437.347 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.695) >>
 >> endobj
-16799 0 obj <<
+16788 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [365.536 456.858 383.893 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.344) >>
 >> endobj
-16800 0 obj <<
+16789 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.203 443.308 424.559 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.732) >>
 >> endobj
-16801 0 obj <<
+16790 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [343.415 429.759 361.771 441.159]
 /Subtype /Link
 /A << /S /GoTo /D (page.209) >>
 >> endobj
-16802 0 obj <<
+16791 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [337.93 416.21 356.286 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.737) >>
 >> endobj
-16803 0 obj <<
+16792 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [313.688 402.661 332.044 413.805]
 /Subtype /Link
 /A << /S /GoTo /D (page.642) >>
 >> endobj
-16804 0 obj <<
+16793 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [363.142 389.112 381.499 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.129) >>
 >> endobj
-16805 0 obj <<
+16794 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [386.173 389.112 404.529 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.133) >>
 >> endobj
-16806 0 obj <<
+16795 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [409.203 389.112 427.559 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.748) >>
 >> endobj
-16807 0 obj <<
+16796 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [339.203 375.562 357.559 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.158) >>
 >> endobj
-16808 0 obj <<
+16797 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.233 375.562 380.59 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.164) >>
 >> endobj
-16809 0 obj <<
+16798 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [361.052 362.013 379.408 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.810) >>
 >> endobj
-16810 0 obj <<
+16799 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.446 348.464 419.802 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.718) >>
 >> endobj
-16811 0 obj <<
+16800 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [354.627 334.915 372.983 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.767) >>
 >> endobj
-16812 0 obj <<
+16801 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [377.658 334.915 396.014 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.768) >>
 >> endobj
-16813 0 obj <<
+16802 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [370.779 321.366 389.135 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.116) >>
 >> endobj
-16814 0 obj <<
+16803 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [398.991 307.816 417.347 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.723) >>
 >> endobj
-16815 0 obj <<
+16804 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [345.506 294.267 363.862 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.644) >>
 >> endobj
-16816 0 obj <<
+16805 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [337.688 280.718 356.044 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.465) >>
 >> endobj
-16817 0 obj <<
+16806 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [329.839 267.169 348.196 278.737]
 /Subtype /Link
 /A << /S /GoTo /D (page.319) >>
 >> endobj
-16818 0 obj <<
+16807 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [321.506 253.62 339.862 265.188]
 /Subtype /Link
 /A << /S /GoTo /D (page.107) >>
 >> endobj
-16819 0 obj <<
+16808 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.446 240.07 441.802 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.640) >>
 >> endobj
-16820 0 obj <<
+16809 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [356.748 226.521 375.105 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.639) >>
 >> endobj
-16821 0 obj <<
+16810 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [360.536 212.972 378.893 224.54]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-16822 0 obj <<
+16811 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [340.082 199.423 358.438 210.567]
 /Subtype /Link
 /A << /S /GoTo /D (page.809) >>
 >> endobj
-16823 0 obj <<
+16812 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.627 185.874 403.984 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-16824 0 obj <<
+16813 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [341.734 158.775 360.091 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.768) >>
 >> endobj
-16825 0 obj <<
+16814 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [388.476 145.226 401.377 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.63) >>
 >> endobj
-16826 0 obj <<
+16815 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [334.536 131.677 341.983 143.245]
 /Subtype /Link
 /A << /S /GoTo /D (page.3) >>
 >> endobj
-16827 0 obj <<
+16816 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [346.658 131.677 365.014 143.245]
 /Subtype /Link
 /A << /S /GoTo /D (page.731) >>
 >> endobj
-16828 0 obj <<
+16817 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [324.9 118.128 332.347 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.9) >>
 >> endobj
-16829 0 obj <<
+16818 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [337.021 118.128 355.377 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.732) >>
 >> endobj
-16830 0 obj <<
+16819 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [360.051 118.128 378.408 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.733) >>
 >> endobj
-16831 0 obj <<
+16820 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.082 118.128 401.438 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.736) >>
 >> endobj
-16836 0 obj <<
-/D [16834 0 R /XYZ 100.892 685.529 null]
+16825 0 obj <<
+/D [16823 0 R /XYZ 100.892 685.529 null]
 >> endobj
-16833 0 obj <<
+16822 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-16953 0 obj <<
+16942 0 obj <<
 /Length 1498      
 /Filter /FlateDecode
 >>
@@ -103306,820 +107031,820 @@
 –FH)9Þœ¶®íMiKãÔ‘¼îªLp˃z]ÖZܶ5/ÊþÕjLsûÓ®½š†û‹Ìo‚™‡ûºl²ipÚòþ›ŽÙ9½gŸ¿ÄF,ë30ê¡Ü ÆaâX7Í°-r –¹ÜÉØAtY_§ÏÔk/ ßžëd¥zþ3ÿyLuJ&bÈKæÉŠÇ«¬Ì¤æ²ÁÅ-ïyV5×>Qä^\Ȥ(ÍŒÅÔ•÷B´ÝðºË·åôèÊ«’ë½²9]Ô”@Ë&¯EYœ•[OBß_^ZÌ^,„»òæv4õË/o-Öú53·aõTéŠr\põ¼É¹WvÎÿ¾Û­þ¬ÂÂï
 endstream
 endobj
-16952 0 obj <<
+16941 0 obj <<
 /Type /Page
-/Contents 16953 0 R
-/Resources 16951 0 R
+/Contents 16942 0 R
+/Resources 16940 0 R
 /MediaBox [0 0 612 792]
-/Parent 16464 0 R
-/Annots [ 16832 0 R 16837 0 R 16838 0 R 16839 0 R 16840 0 R 16841 0 R 16842 0 R 16843 0 R 16844 0 R 16845 0 R 16846 0 R 16847 0 R 16848 0 R 16849 0 R 16850 0 R 16851 0 R 16852 0 R 16853 0 R 16854 0 R 16855 0 R 16856 0 R 16857 0 R 16858 0 R 16859 0 R 16860 0 R 16861 0 R 16862 0 R 16863 0 R 16864 0 R 16865 0 R 16866 0 R 16867 0 R 16868 0 R 16869 0 R 16870 0 R 16871 0 R 16872 0 R 16873 0 R 16874 0 R 16875 0 R 16876 0 R 16877 0 R 16878 0 R 16879 0 R 16880 0 R 16881 0 R 16882 0 R 16883 0 R 16884 0 R 16885 0 R 16886 0 R 16887 0 R 16888 0 R 16889 0 R 16890 0 R 16891 0 R 16892 0 R 16893 0 R 16894 0 R 16895 0 R 16896 0 R 16897 0 R 16898 0 R 16899 0 R 16900 0 R 16901 0 R 16902 0 R 16903 0 R 16904 0 R 16905 0 R 16906 0 R 16907 0 R 16908 0 R 16909 0 R 16910 0 R 16911 0 R 16912 0 R 16913 0 R 16914 0 R 16915 0 R 16916 0 R 16917 0 R 16918 0 R 16919 0 R 16920 0 R 16921 0 R 16922 0 R 16923 0 R 16924 0 R 16925 0 R 16926 0 R 16927 0 R 16928 0 R 16929 0 R 16930 0 R 16931 0 R 16932 0 R 16933 0 R 16934 0 R 16935 0 R 16936 0 R 16937 0 R 16938 0 R 16939 0 R 16940 0 R 16941 0 R 16942 0 R 16943 0 R 16944 0 R 16945 0 R 16946 0 R 16947 0 R 16948 0 R 16949 0 R ]
+/Parent 16453 0 R
+/Annots [ 16821 0 R 16826 0 R 16827 0 R 16828 0 R 16829 0 R 16830 0 R 16831 0 R 16832 0 R 16833 0 R 16834 0 R 16835 0 R 16836 0 R 16837 0 R 16838 0 R 16839 0 R 16840 0 R 16841 0 R 16842 0 R 16843 0 R 16844 0 R 16845 0 R 16846 0 R 16847 0 R 16848 0 R 16849 0 R 16850 0 R 16851 0 R 16852 0 R 16853 0 R 16854 0 R 16855 0 R 16856 0 R 16857 0 R 16858 0 R 16859 0 R 16860 0 R 16861 0 R 16862 0 R 16863 0 R 16864 0 R 16865 0 R 16866 0 R 16867 0 R 16868 0 R 16869 0 R 16870 0 R 16871 0 R 16872 0 R 16873 0 R 16874 0 R 16875 0 R 16876 0 R 16877 0 R 16878 0 R 16879 0 R 16880 0 R 16881 0 R 16882 0 R 16883 0 R 16884 0 R 16885 0 R 16886 0 R 16887 0 R 16888 0 R 16889 0 R 16890 0 R 16891 0 R 16892 0 R 16893 0 R 16894 0 R 16895 0 R 16896 0 R 16897 0 R 16898 0 R 16899 0 R 16900 0 R 16901 0 R 16902 0 R 16903 0 R 16904 0 R 16905 0 R 16906 0 R 16907 0 R 16908 0 R 16909 0 R 16910 0 R 16911 0 R 16912 0 R 16913 0 R 16914 0 R 16915 0 R 16916 0 R 16917 0 R 16918 0 R 16919 0 R 16920 0 R 16921 0 R 16922 0 R 16923 0 R 16924 0 R 16925 0 R 16926 0 R 16927 0 R 16928 0 R 16929 0 R 16930 0 R 16931 0 R 16932 0 R 16933 0 R 16934 0 R 16935 0 R 16936 0 R 16937 0 R 16938 0 R ]
 >> endobj
-16832 0 obj <<
+16821 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [207.6 646.546 225.956 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.735) >>
 >> endobj
-16837 0 obj <<
+16826 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.448 632.931 231.805 644.331]
 /Subtype /Link
 /A << /S /GoTo /D (page.737) >>
 >> endobj
-16838 0 obj <<
+16827 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [263.25 619.317 281.607 631.006]
 /Subtype /Link
 /A << /S /GoTo /D (page.732) >>
 >> endobj
-16839 0 obj <<
+16828 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [287.493 605.702 305.849 617.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.733) >>
 >> endobj
-16840 0 obj <<
+16829 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [281.766 592.087 300.122 603.777]
 /Subtype /Link
 /A << /S /GoTo /D (page.736) >>
 >> endobj
-16841 0 obj <<
+16830 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.766 578.472 243.122 590.162]
 /Subtype /Link
 /A << /S /GoTo /D (page.382) >>
 >> endobj
-16842 0 obj <<
+16831 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.008 564.857 244.91 576.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.67) >>
 >> endobj
-16843 0 obj <<
+16832 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.584 564.857 262.485 576.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.80) >>
 >> endobj
-16844 0 obj <<
+16833 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [267.16 564.857 285.516 576.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-16845 0 obj <<
+16834 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [290.19 564.857 308.546 576.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.181) >>
 >> endobj
-16846 0 obj <<
+16835 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [278.766 551.243 297.122 562.932]
 /Subtype /Link
 /A << /S /GoTo /D (page.569) >>
 >> endobj
-16847 0 obj <<
+16836 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [212.614 537.628 225.516 549.317]
 /Subtype /Link
 /A << /S /GoTo /D (page.94) >>
 >> endobj
-16848 0 obj <<
+16837 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.19 537.628 248.546 549.317]
 /Subtype /Link
 /A << /S /GoTo /D (page.114) >>
 >> endobj
-16849 0 obj <<
+16838 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [253.22 537.628 271.576 549.317]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-16850 0 obj <<
+16839 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [276.25 537.628 294.607 549.317]
 /Subtype /Link
 /A << /S /GoTo /D (page.181) >>
 >> endobj
-16851 0 obj <<
+16840 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.675 524.013 231.576 535.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.93) >>
 >> endobj
-16852 0 obj <<
+16841 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [299.19 510.398 317.546 522.088]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-16853 0 obj <<
+16842 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [263.159 496.783 281.516 508.473]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-16854 0 obj <<
+16843 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.523 483.169 252.879 494.313]
 /Subtype /Link
 /A << /S /GoTo /D (page.203) >>
 >> endobj
-16855 0 obj <<
+16844 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [258.523 469.554 276.879 481.243]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-16856 0 obj <<
+16845 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [225.159 455.939 243.516 467.083]
 /Subtype /Link
 /A << /S /GoTo /D (page.250) >>
 >> endobj
-16857 0 obj <<
+16846 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [268.887 442.324 287.243 454.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-16858 0 obj <<
+16847 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.463 428.709 246.819 440.399]
 /Subtype /Link
 /A << /S /GoTo /D (page.604) >>
 >> endobj
-16859 0 obj <<
+16848 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [255.281 415.095 273.637 426.784]
 /Subtype /Link
 /A << /S /GoTo /D (page.604) >>
 >> endobj
-16860 0 obj <<
+16849 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [277.341 415.095 295.698 426.784]
 /Subtype /Link
 /A << /S /GoTo /D (page.607) >>
 >> endobj
-16861 0 obj <<
+16850 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [299.402 415.095 317.758 426.784]
 /Subtype /Link
 /A << /S /GoTo /D (page.627) >>
 >> endobj
-16862 0 obj <<
+16851 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [229.705 401.48 248.061 412.879]
 /Subtype /Link
 /A << /S /GoTo /D (page.238) >>
 >> endobj
-16863 0 obj <<
+16852 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.341 387.865 234.697 399.554]
 /Subtype /Link
 /A << /S /GoTo /D (page.683) >>
 >> endobj
-16864 0 obj <<
+16853 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.856 374.25 204.213 385.818]
 /Subtype /Link
 /A << /S /GoTo /D (page.394) >>
 >> endobj
-16865 0 obj <<
+16854 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.856 360.635 219.213 372.204]
 /Subtype /Link
 /A << /S /GoTo /D (page.607) >>
 >> endobj
-16866 0 obj <<
+16855 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [173.129 335.964 191.485 347.654]
 /Subtype /Link
 /A << /S /GoTo /D (page.744) >>
 >> endobj
-16867 0 obj <<
+16856 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.735 322.35 253.091 334.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.328) >>
 >> endobj
-16868 0 obj <<
+16857 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.675 308.735 247.031 320.424]
 /Subtype /Link
 /A << /S /GoTo /D (page.307) >>
 >> endobj
-16869 0 obj <<
+16858 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [178.281 295.12 196.637 306.264]
 /Subtype /Link
 /A << /S /GoTo /D (page.724) >>
 >> endobj
-16870 0 obj <<
+16859 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.341 281.505 189.697 292.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.684) >>
 >> endobj
-16871 0 obj <<
+16860 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [188.917 267.89 196.364 279.58]
 /Subtype /Link
 /A << /S /GoTo /D (page.7) >>
 >> endobj
-16872 0 obj <<
+16861 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.553 254.276 233.91 265.965]
 /Subtype /Link
 /A << /S /GoTo /D (page.729) >>
 >> endobj
-16873 0 obj <<
+16862 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [179.644 240.661 198 252.229]
 /Subtype /Link
 /A << /S /GoTo /D (page.169) >>
 >> endobj
-16874 0 obj <<
+16863 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [202.675 240.661 221.031 252.229]
 /Subtype /Link
 /A << /S /GoTo /D (page.689) >>
 >> endobj
-16875 0 obj <<
+16864 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [245.553 227.046 263.91 238.736]
 /Subtype /Link
 /A << /S /GoTo /D (page.689) >>
 >> endobj
-16876 0 obj <<
+16865 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [218.765 213.431 237.122 225.121]
 /Subtype /Link
 /A << /S /GoTo /D (page.688) >>
 >> endobj
-16877 0 obj <<
+16866 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.523 199.816 217.425 211.385]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-16878 0 obj <<
+16867 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.523 186.202 242.879 197.77]
 /Subtype /Link
 /A << /S /GoTo /D (page.660) >>
 >> endobj
-16879 0 obj <<
+16868 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [247.553 186.202 265.91 197.77]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-16880 0 obj <<
+16869 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.523 172.587 242.879 184.155]
 /Subtype /Link
 /A << /S /GoTo /D (page.660) >>
 >> endobj
-16881 0 obj <<
+16870 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [247.553 172.587 265.91 184.155]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-16882 0 obj <<
+16871 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [200.796 158.972 219.152 170.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.580) >>
 >> endobj
-16883 0 obj <<
+16872 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.462 144.751 214.819 157.653]
 /Subtype /Link
 /A << /S /GoTo /D (page.128) >>
 >> endobj
-16884 0 obj <<
+16873 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.493 144.751 237.849 157.653]
 /Subtype /Link
 /A << /S /GoTo /D (page.133) >>
 >> endobj
-16885 0 obj <<
+16874 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.523 144.751 260.879 157.653]
 /Subtype /Link
 /A << /S /GoTo /D (page.154) >>
 >> endobj
-16886 0 obj <<
+16875 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [265.553 144.751 283.91 157.653]
 /Subtype /Link
 /A << /S /GoTo /D (page.175) >>
 >> endobj
-16887 0 obj <<
+16876 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [263.463 131.136 281.819 144.038]
 /Subtype /Link
 /A << /S /GoTo /D (page.129) >>
 >> endobj
-16888 0 obj <<
+16877 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [286.493 131.136 304.849 144.038]
 /Subtype /Link
 /A << /S /GoTo /D (page.132) >>
 >> endobj
-16889 0 obj <<
+16878 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [292.553 117.522 310.91 130.423]
 /Subtype /Link
 /A << /S /GoTo /D (page.130) >>
 >> endobj
-16890 0 obj <<
+16879 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [499.587 645.94 517.943 658.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.127) >>
 >> endobj
-16891 0 obj <<
+16880 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [473.617 632.391 491.974 645.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.128) >>
 >> endobj
-16892 0 obj <<
+16881 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [495.678 632.391 514.034 645.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.130) >>
 >> endobj
-16893 0 obj <<
+16882 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.831 618.842 483.187 631.743]
 /Subtype /Link
 /A << /S /GoTo /D (page.171) >>
 >> endobj
-16894 0 obj <<
+16883 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.164 605.293 435.52 618.194]
 /Subtype /Link
 /A << /S /GoTo /D (page.175) >>
 >> endobj
-16895 0 obj <<
+16884 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [396.861 592.35 415.217 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.754) >>
 >> endobj
-16896 0 obj <<
+16885 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.073 578.8 396.429 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-16897 0 obj <<
+16886 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [401.103 578.8 419.46 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.421) >>
 >> endobj
-16898 0 obj <<
+16887 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.134 578.8 442.49 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.520) >>
 >> endobj
-16899 0 obj <<
+16888 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [447.164 578.8 465.52 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.698) >>
 >> endobj
-16900 0 obj <<
+16889 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [370.497 551.702 388.854 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.574) >>
 >> endobj
-16901 0 obj <<
+16890 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [393.528 551.702 411.884 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.691) >>
 >> endobj
-16902 0 obj <<
+16891 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.225 538.153 435.581 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.715) >>
 >> endobj
-16903 0 obj <<
+16892 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.588 524.604 441.944 536.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.417) >>
 >> endobj
-16904 0 obj <<
+16893 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [445.467 511.054 463.823 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.424) >>
 >> endobj
-16905 0 obj <<
+16894 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [425.649 497.505 444.005 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.715) >>
 >> endobj
-16906 0 obj <<
+16895 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [448.225 483.956 455.672 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.5) >>
 >> endobj
-16907 0 obj <<
+16896 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [460.346 483.956 478.702 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.715) >>
 >> endobj
-16908 0 obj <<
+16897 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.891 470.407 441.338 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.5) >>
 >> endobj
-16909 0 obj <<
+16898 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.376 456.858 410.732 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.325) >>
 >> endobj
-16910 0 obj <<
+16899 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.437 443.308 422.793 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.521) >>
 >> endobj
-16911 0 obj <<
+16900 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [427.467 443.308 445.823 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.797) >>
 >> endobj
-16912 0 obj <<
+16901 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [398.073 429.759 416.429 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.325) >>
 >> endobj
-16913 0 obj <<
+16902 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.136 416.21 405.038 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.73) >>
 >> endobj
-16914 0 obj <<
+16903 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.503 416.21 430.859 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-16915 0 obj <<
+16904 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.324 416.21 456.68 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.189) >>
 >> endobj
-16916 0 obj <<
+16905 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.145 416.21 482.501 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.192) >>
 >> endobj
-16917 0 obj <<
+16906 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 416.21 508.322 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.205) >>
 >> endobj
-16918 0 obj <<
+16907 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 402.661 405.674 413.805]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-16919 0 obj <<
+16908 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.348 402.661 428.704 413.805]
 /Subtype /Link
 /A << /S /GoTo /D (page.216) >>
 >> endobj
-16920 0 obj <<
+16909 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [433.378 402.661 451.734 413.805]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-16921 0 obj <<
+16910 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [456.409 402.661 474.765 413.805]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-16922 0 obj <<
+16911 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [479.439 402.661 497.795 413.805]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-16923 0 obj <<
+16912 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.164 389.112 457.52 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.214) >>
 >> endobj
-16924 0 obj <<
+16913 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.649 375.562 462.005 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.697) >>
 >> endobj
-16925 0 obj <<
+16914 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [384.134 362.013 402.49 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-16926 0 obj <<
+16915 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.376 348.464 430.732 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.587) >>
 >> endobj
-16927 0 obj <<
+16916 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [395.952 334.915 414.308 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.626) >>
 >> endobj
-16928 0 obj <<
+16917 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.406 321.366 456.763 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.587) >>
 >> endobj
-16929 0 obj <<
+16918 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [445.407 307.816 463.763 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.399) >>
 >> endobj
-16930 0 obj <<
+16919 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.285 294.267 448.641 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.689) >>
 >> endobj
-16931 0 obj <<
+16920 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [425.8 280.718 444.157 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.596) >>
 >> endobj
-16932 0 obj <<
+16921 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.346 267.169 471.702 278.737]
 /Subtype /Link
 /A << /S /GoTo /D (page.114) >>
 >> endobj
-16933 0 obj <<
+16922 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [395.679 253.62 403.126 264.764]
 /Subtype /Link
 /A << /S /GoTo /D (page.8) >>
 >> endobj
-16934 0 obj <<
+16923 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [406.831 253.62 425.187 264.764]
 /Subtype /Link
 /A << /S /GoTo /D (page.124) >>
 >> endobj
-16935 0 obj <<
+16924 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.891 253.62 447.248 264.764]
 /Subtype /Link
 /A << /S /GoTo /D (page.388) >>
 >> endobj
-16936 0 obj <<
+16925 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [450.71 253.62 469.066 264.764]
 /Subtype /Link
 /A << /S /GoTo /D (page.391) >>
 >> endobj
-16937 0 obj <<
+16926 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [472.77 253.62 491.126 264.764]
 /Subtype /Link
 /A << /S /GoTo /D (page.393) >>
 >> endobj
-16938 0 obj <<
+16927 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [494.831 253.62 513.187 264.764]
 /Subtype /Link
 /A << /S /GoTo /D (page.744) >>
 >> endobj
-16939 0 obj <<
+16928 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 242.192 405.674 251.214]
 /Subtype /Link
 /A << /S /GoTo /D (page.754) >>
 >> endobj
-16940 0 obj <<
+16929 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [395.982 226.521 414.338 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.754) >>
 >> endobj
-16941 0 obj <<
+16930 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.316 212.366 420.672 225.268]
 /Subtype /Link
 /A << /S /GoTo /D (page.467) >>
 >> endobj
-16942 0 obj <<
+16931 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [393.285 199.423 411.641 210.567]
 /Subtype /Link
 /A << /S /GoTo /D (page.467) >>
 >> endobj
-16943 0 obj <<
+16932 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.922 185.874 421.278 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.596) >>
 >> endobj
-16944 0 obj <<
+16933 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.922 172.324 416.278 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.596) >>
 >> endobj
-16945 0 obj <<
+16934 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [367.467 158.775 385.823 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.689) >>
 >> endobj
-16946 0 obj <<
+16935 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [380.194 145.226 398.55 156.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-16947 0 obj <<
+16936 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.74 131.677 423.096 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.595) >>
 >> endobj
-16948 0 obj <<
+16937 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [427.77 131.677 446.126 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.596) >>
 >> endobj
-16949 0 obj <<
+16938 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.164 118.128 442.52 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.114) >>
 >> endobj
-16954 0 obj <<
-/D [16952 0 R /XYZ 151.701 685.529 null]
+16943 0 obj <<
+/D [16941 0 R /XYZ 151.701 685.529 null]
 >> endobj
-16951 0 obj <<
+16940 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-17074 0 obj <<
+17063 0 obj <<
 /Length 1620      
 /Filter /FlateDecode
 >>
@@ -104137,841 +107862,841 @@
 ·7¦7ôW¦öЍœÇ~S£+÷ý‰Øw(ãf1Ü’b¯Ï7¿"i›§²Êþv‘|„¼ž7º®Õ(¦ó}z;„©l')a˜,˜¤˜^Þ/€£f÷h]I˜ÈTM÷E0¨U˜äuiÛAI¬.7G"9AÏ›#ÁŤhœóÀ2Œ§…ïXí Ìkª:.z£ ½TÑ4w#€a)µ}¿Q,µdL·¼>UT^îd‹®à½³±ÄZWæçŽÊ^‡Ìƒiv\®Ldè(„ýøòü©Ð¾6—åá§~í”Tµ¶“ß»"¯N¹Ø‹Š%ÆuŽíÍèò|gVàiisÓqìjñrí\_ÍkOôéØ™~¾Û®þj²<‘
 endstream
 endobj
-17073 0 obj <<
+17062 0 obj <<
 /Type /Page
-/Contents 17074 0 R
-/Resources 17072 0 R
+/Contents 17063 0 R
+/Resources 17061 0 R
 /MediaBox [0 0 612 792]
-/Parent 16464 0 R
-/Annots [ 16950 0 R 16955 0 R 16956 0 R 16957 0 R 16958 0 R 16959 0 R 16960 0 R 16961 0 R 16962 0 R 16963 0 R 16964 0 R 16965 0 R 16966 0 R 16967 0 R 16968 0 R 16969 0 R 16970 0 R 16971 0 R 16972 0 R 16973 0 R 16974 0 R 16975 0 R 16976 0 R 16977 0 R 16978 0 R 16979 0 R 16980 0 R 16981 0 R 16982 0 R 16983 0 R 16984 0 R 16985 0 R 16986 0 R 16987 0 R 16988 0 R 16989 0 R 16990 0 R 16991 0 R 16992 0 R 16993 0 R 16994 0 R 16995 0 R 16996 0 R 16997 0 R 16998 0 R 16999 0 R 17000 0 R 17001 0 R 17002 0 R 17003 0 R 17004 0 R 17005 0 R 17006 0 R 17007 0 R 17008 0 R 17009 0 R 17010 0 R 17011 0 R 17012 0 R 17013 0 R 17014 0 R 17015 0 R 17016 0 R 17017 0 R 17018 0 R 17019 0 R 17020 0 R 17021 0 R 17022 0 R 17023 0 R 17024 0 R 17025 0 R 17026 0 R 17027 0 R 17028 0 R 17029 0 R 17030 0 R 17031 0 R 17032 0 R 17033 0 R 17034 0 R 17035 0 R 17036 0 R 17037 0 R 17038 0 R 17039 0 R 17040 0 R 17041 0 R 17042 0 R 17043 0 R 17044 0 R 17045 0 R 17046 0 R 17047 0 R 17048 0 R 17049 0 R 17050 0 R 17051 0 R 17052 0 R 17053 0 R 17054 0 R 17055 0 R 17056 0 R 17057 0 R 17058 0 R 17059 0 R 17060 0 R 17061 0 R 17062 0 R 17063 0 R 17064 0 R 17065 0 R 17066 0 R 17067 0 R 17068 0 R 17069 0 R 17070 0 R ]
+/Parent 16453 0 R
+/Annots [ 16939 0 R 16944 0 R 16945 0 R 16946 0 R 16947 0 R 16948 0 R 16949 0 R 16950 0 R 16951 0 R 16952 0 R 16953 0 R 16954 0 R 16955 0 R 16956 0 R 16957 0 R 16958 0 R 16959 0 R 16960 0 R 16961 0 R 16962 0 R 16963 0 R 16964 0 R 16965 0 R 16966 0 R 16967 0 R 16968 0 R 16969 0 R 16970 0 R 16971 0 R 16972 0 R 16973 0 R 16974 0 R 16975 0 R 16976 0 R 16977 0 R 16978 0 R 16979 0 R 16980 0 R 16981 0 R 16982 0 R 16983 0 R 16984 0 R 16985 0 R 16986 0 R 16987 0 R 16988 0 R 16989 0 R 16990 0 R 16991 0 R 16992 0 R 16993 0 R 16994 0 R 16995 0 R 16996 0 R 16997 0 R 16998 0 R 16999 0 R 17000 0 R 17001 0 R 17002 0 R 17003 0 R 17004 0 R 17005 0 R 17006 0 R 17007 0 R 17008 0 R 17009 0 R 17010 0 R 17011 0 R 17012 0 R 17013 0 R 17014 0 R 17015 0 R 17016 0 R 17017 0 R 17018 0 R 17019 0 R 17020 0 R 17021 0 R 17022 0 R 17023 0 R 17024 0 R 17025 0 R 17026 0 R 17027 0 R 17028 0 R 17029 0 R 17030 0 R 17031 0 R 17032 0 R 17033 0 R 17034 0 R 17035 0 R 17036 0 R 17037 0 R 17038 0 R 17039 0 R 17040 0 R 17041 0 R 17042 0 R 17043 0 R 17044 0 R 17045 0 R 17046 0 R 17047 0 R 17048 0 R 17049 0 R 17050 0 R 17051 0 R 17052 0 R 17053 0 R 17054 0 R 17055 0 R 17056 0 R 17057 0 R 17058 0 R 17059 0 R ]
 >> endobj
-16950 0 obj <<
+16939 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [163.259 646.546 181.615 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.209) >>
 >> endobj
-16955 0 obj <<
+16944 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [125.047 619.448 143.403 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.326) >>
 >> endobj
-16956 0 obj <<
+16945 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [129.35 605.899 147.706 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.123) >>
 >> endobj
-16957 0 obj <<
+16946 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [152.38 605.899 170.736 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.199) >>
 >> endobj
-16958 0 obj <<
+16947 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.077 591.743 267.434 604.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.605) >>
 >> endobj
-16959 0 obj <<
+16948 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [198.441 578.8 216.797 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.401) >>
 >> endobj
-16960 0 obj <<
+16949 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.592 565.251 195.949 576.651]
 /Subtype /Link
 /A << /S /GoTo /D (page.683) >>
 >> endobj
-16961 0 obj <<
+16950 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [196.471 551.702 214.827 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.684) >>
 >> endobj
-16962 0 obj <<
+16951 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.289 538.153 195.646 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.466) >>
 >> endobj
-16963 0 obj <<
+16952 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [151.502 524.604 169.858 536.003]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-16964 0 obj <<
+16953 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.774 511.054 212.13 522.198]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-16965 0 obj <<
+16954 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [230.35 497.505 248.706 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.688) >>
 >> endobj
-16966 0 obj <<
+16955 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.502 483.956 244.858 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.347) >>
 >> endobj
-16967 0 obj <<
+16956 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [182.275 456.858 200.631 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.800) >>
 >> endobj
-16968 0 obj <<
+16957 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [186.215 443.308 204.571 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.799) >>
 >> endobj
-16969 0 obj <<
+16958 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [161.396 389.112 179.753 400.68]
 /Subtype /Link
 /A << /S /GoTo /D (page.805) >>
 >> endobj
-16970 0 obj <<
+16959 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [203.548 375.562 221.904 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.807) >>
 >> endobj
-16971 0 obj <<
+16960 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [138.138 362.013 151.039 373.413]
 /Subtype /Link
 /A << /S /GoTo /D (page.70) >>
 >> endobj
-16972 0 obj <<
+16961 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [155.714 362.013 168.615 373.413]
 /Subtype /Link
 /A << /S /GoTo /D (page.88) >>
 >> endobj
-16973 0 obj <<
+16962 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [179.146 348.464 197.502 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.191) >>
 >> endobj
-16974 0 obj <<
+16963 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [166.35 334.915 184.706 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.390) >>
 >> endobj
-16975 0 obj <<
+16964 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [180.895 321.366 199.252 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.541) >>
 >> endobj
-16976 0 obj <<
+16965 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [166.895 307.816 185.252 319.385]
 /Subtype /Link
 /A << /S /GoTo /D (page.677) >>
 >> endobj
-16977 0 obj <<
+16966 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [129.683 294.267 142.585 305.411]
 /Subtype /Link
 /A << /S /GoTo /D (page.60) >>
 >> endobj
-16978 0 obj <<
+16967 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [147.259 294.267 165.615 305.411]
 /Subtype /Link
 /A << /S /GoTo /D (page.200) >>
 >> endobj
-16979 0 obj <<
+16968 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [163.154 280.718 176.056 291.862]
 /Subtype /Link
 /A << /S /GoTo /D (page.48) >>
 >> endobj
-16980 0 obj <<
+16969 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [169.986 267.169 182.888 278.313]
 /Subtype /Link
 /A << /S /GoTo /D (page.48) >>
 >> endobj
-16981 0 obj <<
+16970 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [187.562 267.169 205.918 278.313]
 /Subtype /Link
 /A << /S /GoTo /D (page.209) >>
 >> endobj
-16982 0 obj <<
+16971 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.592 267.169 228.949 278.313]
 /Subtype /Link
 /A << /S /GoTo /D (page.378) >>
 >> endobj
-16983 0 obj <<
+16972 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.79 253.62 196.692 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-16984 0 obj <<
+16973 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [165.578 240.07 178.48 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.64) >>
 >> endobj
-16985 0 obj <<
+16974 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [217.108 226.521 230.009 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.86) >>
 >> endobj
-16986 0 obj <<
+16975 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [174.289 212.972 192.646 224.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.199) >>
 >> endobj
-16987 0 obj <<
+16976 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.32 212.972 215.676 224.116]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-16988 0 obj <<
+16977 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.562 199.423 203.918 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-16989 0 obj <<
+16978 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [189.168 185.874 207.524 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-16990 0 obj <<
+16979 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.986 185.874 229.343 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.375) >>
 >> endobj
-16991 0 obj <<
+16980 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.017 185.874 252.373 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.378) >>
 >> endobj
-16992 0 obj <<
+16981 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.471 172.324 211.827 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.371) >>
 >> endobj
-16993 0 obj <<
+16982 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [215.289 172.324 233.646 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-16994 0 obj <<
+16983 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [238.32 172.324 256.676 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.707) >>
 >> endobj
-16995 0 obj <<
+16984 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [140.592 158.775 158.949 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.181) >>
 >> endobj
-16996 0 obj <<
+16985 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [163.623 158.775 181.979 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.303) >>
 >> endobj
-16997 0 obj <<
+16986 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [177.199 145.226 195.555 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.238) >>
 >> endobj
-16998 0 obj <<
+16987 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [199.259 145.226 217.615 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-16999 0 obj <<
+16988 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.32 145.226 239.676 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-17000 0 obj <<
+16989 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [243.38 145.226 261.737 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.377) >>
 >> endobj
-17001 0 obj <<
+16990 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [139.746 133.798 158.102 142.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.572) >>
 >> endobj
-17002 0 obj <<
+16991 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.471 118.128 226.827 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.376) >>
 >> endobj
-17003 0 obj <<
+16992 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [365.567 646.546 383.923 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.376) >>
 >> endobj
-17004 0 obj <<
+16993 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [379.779 632.659 398.135 644.348]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-17005 0 obj <<
+16994 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.809 632.659 421.165 644.348]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-17006 0 obj <<
+16995 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [369.203 618.771 387.559 630.171]
 /Subtype /Link
 /A << /S /GoTo /D (page.376) >>
 >> endobj
-17007 0 obj <<
+16996 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [330.748 604.884 349.105 616.028]
 /Subtype /Link
 /A << /S /GoTo /D (page.371) >>
 >> endobj
-17008 0 obj <<
+16997 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [353.779 604.884 372.135 616.028]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-17009 0 obj <<
+16998 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [325.9 590.997 344.256 602.565]
 /Subtype /Link
 /A << /S /GoTo /D (page.173) >>
 >> endobj
-17010 0 obj <<
+16999 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [377.961 577.109 396.317 588.799]
 /Subtype /Link
 /A << /S /GoTo /D (page.350) >>
 >> endobj
-17011 0 obj <<
+17000 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [381.294 563.222 399.65 574.911]
 /Subtype /Link
 /A << /S /GoTo /D (page.199) >>
 >> endobj
-17012 0 obj <<
+17001 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.051 549.334 354.408 560.478]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-17013 0 obj <<
+17002 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [380.25 521.56 393.151 532.959]
 /Subtype /Link
 /A << /S /GoTo /D (page.86) >>
 >> endobj
-17014 0 obj <<
+17003 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [369.173 507.672 387.529 518.816]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-17015 0 obj <<
+17004 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.203 507.672 410.559 518.816]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-17016 0 obj <<
+17005 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [334.536 478.185 352.893 489.754]
 /Subtype /Link
 /A << /S /GoTo /D (page.676) >>
 >> endobj
-17017 0 obj <<
+17006 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [326.354 464.298 339.256 475.866]
 /Subtype /Link
 /A << /S /GoTo /D (page.72) >>
 >> endobj
-17018 0 obj <<
+17007 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [343.93 464.298 362.286 475.866]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-17019 0 obj <<
+17008 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [366.961 464.298 385.317 475.866]
 /Subtype /Link
 /A << /S /GoTo /D (page.162) >>
 >> endobj
-17020 0 obj <<
+17009 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [389.991 464.298 408.347 475.866]
 /Subtype /Link
 /A << /S /GoTo /D (page.167) >>
 >> endobj
-17021 0 obj <<
+17010 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.021 464.298 431.377 475.866]
 /Subtype /Link
 /A << /S /GoTo /D (page.169) >>
 >> endobj
-17022 0 obj <<
+17011 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [436.052 464.298 454.408 475.866]
 /Subtype /Link
 /A << /S /GoTo /D (page.179) >>
 >> endobj
-17023 0 obj <<
+17012 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [371.233 450.411 389.59 461.979]
 /Subtype /Link
 /A << /S /GoTo /D (page.660) >>
 >> endobj
-17024 0 obj <<
+17013 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [349.779 436.523 368.135 448.213]
 /Subtype /Link
 /A << /S /GoTo /D (page.580) >>
 >> endobj
-17025 0 obj <<
+17014 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [364.9 422.636 383.256 434.204]
 /Subtype /Link
 /A << /S /GoTo /D (page.162) >>
 >> endobj
-17026 0 obj <<
+17015 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [324.562 408.748 337.464 420.317]
 /Subtype /Link
 /A << /S /GoTo /D (page.95) >>
 >> endobj
-17027 0 obj <<
+17016 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [343.117 408.748 361.474 420.317]
 /Subtype /Link
 /A << /S /GoTo /D (page.101) >>
 >> endobj
-17028 0 obj <<
+17017 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [367.127 408.748 385.483 420.317]
 /Subtype /Link
 /A << /S /GoTo /D (page.103) >>
 >> endobj
-17029 0 obj <<
+17018 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.137 408.748 409.493 420.317]
 /Subtype /Link
 /A << /S /GoTo /D (page.110) >>
 >> endobj
-17030 0 obj <<
+17019 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.147 408.748 433.503 420.317]
 /Subtype /Link
 /A << /S /GoTo /D (page.117) >>
 >> endobj
-17031 0 obj <<
+17020 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 408.748 457.513 420.317]
 /Subtype /Link
 /A << /S /GoTo /D (page.192) >>
 >> endobj
-17032 0 obj <<
+17021 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 395.199 354.864 406.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-17033 0 obj <<
+17022 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.17 395.199 380.526 406.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.197) >>
 >> endobj
-17034 0 obj <<
+17023 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.832 395.199 406.188 406.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.200) >>
 >> endobj
-17035 0 obj <<
+17024 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.494 395.199 431.851 406.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.206) >>
 >> endobj
-17036 0 obj <<
+17025 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 395.199 457.513 406.343]
 /Subtype /Link
 /A << /S /GoTo /D (page.232) >>
 >> endobj
-17037 0 obj <<
+17026 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 381.65 354.864 392.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-17038 0 obj <<
+17027 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.17 381.65 380.526 392.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.250) >>
 >> endobj
-17039 0 obj <<
+17028 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.832 381.65 406.188 392.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.258) >>
 >> endobj
-17040 0 obj <<
+17029 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.494 381.65 431.851 392.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.285) >>
 >> endobj
-17041 0 obj <<
+17030 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 381.65 457.513 392.794]
 /Subtype /Link
 /A << /S /GoTo /D (page.286) >>
 >> endobj
-17042 0 obj <<
+17031 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 368.101 354.864 379.245]
 /Subtype /Link
 /A << /S /GoTo /D (page.288) >>
 >> endobj
-17043 0 obj <<
+17032 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [358.326 368.101 376.682 379.245]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-17044 0 obj <<
+17033 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [380.387 368.101 398.743 379.245]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-17045 0 obj <<
+17034 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.448 368.101 420.804 379.245]
 /Subtype /Link
 /A << /S /GoTo /D (page.568) >>
 >> endobj
-17046 0 obj <<
+17035 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.508 368.101 442.864 379.245]
 /Subtype /Link
 /A << /S /GoTo /D (page.571) >>
 >> endobj
-17047 0 obj <<
+17036 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.569 368.101 464.925 379.245]
 /Subtype /Link
 /A << /S /GoTo /D (page.582) >>
 >> endobj
-17048 0 obj <<
+17037 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [318.476 354.213 336.832 365.903]
 /Subtype /Link
 /A << /S /GoTo /D (page.219) >>
 >> endobj
-17049 0 obj <<
+17038 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [367.809 340.326 386.165 352.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.288) >>
 >> endobj
-17050 0 obj <<
+17039 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [353.506 326.439 371.862 338.007]
 /Subtype /Link
 /A << /S /GoTo /D (page.371) >>
 >> endobj
-17051 0 obj <<
+17040 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [365.779 312.551 384.135 324.241]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-17052 0 obj <<
+17041 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [398.021 298.664 416.377 310.353]
 /Subtype /Link
 /A << /S /GoTo /D (page.313) >>
 >> endobj
-17053 0 obj <<
+17042 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [371.203 284.776 389.559 296.345]
 /Subtype /Link
 /A << /S /GoTo /D (page.412) >>
 >> endobj
-17054 0 obj <<
+17043 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [337.324 257.002 355.68 268.401]
 /Subtype /Link
 /A << /S /GoTo /D (page.157) >>
 >> endobj
-17055 0 obj <<
+17044 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [342.112 243.114 360.468 254.804]
 /Subtype /Link
 /A << /S /GoTo /D (page.674) >>
 >> endobj
-17056 0 obj <<
+17045 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [365.142 243.114 383.499 254.804]
 /Subtype /Link
 /A << /S /GoTo /D (page.707) >>
 >> endobj
-17057 0 obj <<
+17046 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [339.991 229.227 358.347 240.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.674) >>
 >> endobj
-17058 0 obj <<
+17047 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.021 215.339 396.377 227.029]
 /Subtype /Link
 /A << /S /GoTo /D (page.678) >>
 >> endobj
-17059 0 obj <<
+17048 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [364.536 201.452 382.893 213.142]
 /Subtype /Link
 /A << /S /GoTo /D (page.569) >>
 >> endobj
-17060 0 obj <<
+17049 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [331.809 187.565 350.165 199.133]
 /Subtype /Link
 /A << /S /GoTo /D (page.677) >>
 >> endobj
-17061 0 obj <<
+17050 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [351.249 173.677 364.151 184.821]
 /Subtype /Link
 /A << /S /GoTo /D (page.44) >>
 >> endobj
-17062 0 obj <<
+17051 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [372.112 159.79 390.468 171.358]
 /Subtype /Link
 /A << /S /GoTo /D (page.101) >>
 >> endobj
-17063 0 obj <<
+17052 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [395.142 159.79 413.499 171.358]
 /Subtype /Link
 /A << /S /GoTo /D (page.103) >>
 >> endobj
-17064 0 obj <<
+17053 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.173 159.79 436.529 171.358]
 /Subtype /Link
 /A << /S /GoTo /D (page.105) >>
 >> endobj
-17065 0 obj <<
+17054 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [361.597 145.902 379.953 157.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.674) >>
 >> endobj
-17066 0 obj <<
+17055 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [384.627 145.902 402.983 157.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.676) >>
 >> endobj
-17067 0 obj <<
+17056 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.658 145.902 426.014 157.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.679) >>
 >> endobj
-17068 0 obj <<
+17057 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.688 145.902 449.044 157.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.680) >>
 >> endobj
-17069 0 obj <<
+17058 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.415 132.015 425.771 143.705]
 /Subtype /Link
 /A << /S /GoTo /D (page.319) >>
 >> endobj
-17070 0 obj <<
+17059 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.385 118.128 421.741 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.571) >>
 >> endobj
-17075 0 obj <<
-/D [17073 0 R /XYZ 100.892 685.529 null]
+17064 0 obj <<
+/D [17062 0 R /XYZ 100.892 685.529 null]
 >> endobj
-17072 0 obj <<
+17061 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R /F51 3736 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-17185 0 obj <<
+17174 0 obj <<
 /Length 1415      
 /Filter /FlateDecode
 >>
@@ -104991,771 +108716,771 @@
 “!½æ* §{¬ÔÈrDªw‘òà–ÉÁ Ô{Ye!n÷íÓ8iƒA2)Ab˜ô.ŽØ4lŽ&VJaýÿínó?½¾Ô
 endstream
 endobj
-17184 0 obj <<
+17173 0 obj <<
 /Type /Page
-/Contents 17185 0 R
-/Resources 17183 0 R
+/Contents 17174 0 R
+/Resources 17172 0 R
 /MediaBox [0 0 612 792]
-/Parent 17187 0 R
-/Annots [ 17071 0 R 17076 0 R 17077 0 R 17078 0 R 17079 0 R 17080 0 R 17081 0 R 17082 0 R 17083 0 R 17084 0 R 17085 0 R 17086 0 R 17087 0 R 17088 0 R 17089 0 R 17090 0 R 17091 0 R 17092 0 R 17093 0 R 17094 0 R 17095 0 R 17096 0 R 17097 0 R 17098 0 R 17099 0 R 17100 0 R 17101 0 R 17102 0 R 17103 0 R 17104 0 R 17105 0 R 17106 0 R 17107 0 R 17108 0 R 17109 0 R 17110 0 R 17111 0 R 17112 0 R 17113 0 R 17114 0 R 17115 0 R 17116 0 R 17117 0 R 17118 0 R 17119 0 R 17120 0 R 17121 0 R 17122 0 R 17123 0 R 17124 0 R 17125 0 R 17126 0 R 17127 0 R 17128 0 R 17129 0 R 17130 0 R 17131 0 R 17132 0 R 17133 0 R 17134 0 R 17135 0 R 17136 0 R 17137 0 R 17138 0 R 17139 0 R 17140 0 R 17141 0 R 17142 0 R 17143 0 R 17144 0 R 17145 0 R 17146 0 R 17147 0 R 17148 0 R 17149 0 R 17150 0 R 17151 0 R 17152 0 R 17153 0 R 17154 0 R 17155 0 R 17156 0 R 17157 0 R 17158 0 R 17159 0 R 17160 0 R 17161 0 R 17162 0 R 17163 0 R 17164 0 R 17165 0 R 17166 0 R 17167 0 R 17168 0 R 17169 0 R 17170 0 R 17171 0 R 17172 0 R 17173 0 R 17174 0 R 17175 0 R 17176 0 R 17177 0 R 17178 0 R 17179 0 R 17180 0 R 17181 0 R ]
+/Parent 17176 0 R
+/Annots [ 17060 0 R 17065 0 R 17066 0 R 17067 0 R 17068 0 R 17069 0 R 17070 0 R 17071 0 R 17072 0 R 17073 0 R 17074 0 R 17075 0 R 17076 0 R 17077 0 R 17078 0 R 17079 0 R 17080 0 R 17081 0 R 17082 0 R 17083 0 R 17084 0 R 17085 0 R 17086 0 R 17087 0 R 17088 0 R 17089 0 R 17090 0 R 17091 0 R 17092 0 R 17093 0 R 17094 0 R 17095 0 R 17096 0 R 17097 0 R 17098 0 R 17099 0 R 17100 0 R 17101 0 R 17102 0 R 17103 0 R 17104 0 R 17105 0 R 17106 0 R 17107 0 R 17108 0 R 17109 0 R 17110 0 R 17111 0 R 17112 0 R 17113 0 R 17114 0 R 17115 0 R 17116 0 R 17117 0 R 17118 0 R 17119 0 R 17120 0 R 17121 0 R 17122 0 R 17123 0 R 17124 0 R 17125 0 R 17126 0 R 17127 0 R 17128 0 R 17129 0 R 17130 0 R 17131 0 R 17132 0 R 17133 0 R 17134 0 R 17135 0 R 17136 0 R 17137 0 R 17138 0 R 17139 0 R 17140 0 R 17141 0 R 17142 0 R 17143 0 R 17144 0 R 17145 0 R 17146 0 R 17147 0 R 17148 0 R 17149 0 R 17150 0 R 17151 0 R 17152 0 R 17153 0 R 17154 0 R 17155 0 R 17156 0 R 17157 0 R 17158 0 R 17159 0 R 17160 0 R 17161 0 R 17162 0 R 17163 0 R 17164 0 R 17165 0 R 17166 0 R 17167 0 R 17168 0 R 17169 0 R 17170 0 R ]
 >> endobj
-17071 0 obj <<
+17060 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 635.118 208.912 644.141]
 /Subtype /Link
 /A << /S /GoTo /D (page.314) >>
 >> endobj
-17076 0 obj <<
+17065 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.796 619.448 235.152 631.016]
 /Subtype /Link
 /A << /S /GoTo /D (page.250) >>
 >> endobj
-17077 0 obj <<
+17066 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.099 605.899 239.455 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.231) >>
 >> endobj
-17078 0 obj <<
+17067 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.129 605.899 262.485 617.467]
 /Subtype /Link
 /A << /S /GoTo /D (page.569) >>
 >> endobj
-17079 0 obj <<
+17068 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [267.796 592.35 286.152 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.368) >>
 >> endobj
-17080 0 obj <<
+17069 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [245.735 578.8 264.091 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-17081 0 obj <<
+17070 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [201.765 565.251 220.122 576.819]
 /Subtype /Link
 /A << /S /GoTo /D (page.574) >>
 >> endobj
-17082 0 obj <<
+17071 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.129 551.702 241.485 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.344) >>
 >> endobj
-17083 0 obj <<
+17072 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.432 538.153 246.788 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.101) >>
 >> endobj
-17084 0 obj <<
+17073 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [244.553 524.604 262.91 536.172]
 /Subtype /Link
 /A << /S /GoTo /D (page.728) >>
 >> endobj
-17085 0 obj <<
+17074 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [221.978 511.054 240.334 522.623]
 /Subtype /Link
 /A << /S /GoTo /D (page.395) >>
 >> endobj
-17086 0 obj <<
+17075 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.402 497.505 245.758 509.073]
 /Subtype /Link
 /A << /S /GoTo /D (page.386) >>
 >> endobj
-17087 0 obj <<
+17076 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [262.341 483.956 280.697 495.524]
 /Subtype /Link
 /A << /S /GoTo /D (page.119) >>
 >> endobj
-17088 0 obj <<
+17077 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [266.644 470.407 285.001 481.975]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-17089 0 obj <<
+17078 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [243.917 456.858 262.273 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.683) >>
 >> endobj
-17090 0 obj <<
+17079 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.281 429.759 231.637 441.327]
 /Subtype /Link
 /A << /S /GoTo /D (page.110) >>
 >> endobj
-17091 0 obj <<
+17080 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.311 429.759 254.667 441.327]
 /Subtype /Link
 /A << /S /GoTo /D (page.569) >>
 >> endobj
-17092 0 obj <<
+17081 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 404.782 208.912 413.805]
 /Subtype /Link
 /A << /S /GoTo /D (page.192) >>
 >> endobj
-17093 0 obj <<
+17082 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.493 389.112 272.849 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.122) >>
 >> endobj
-17094 0 obj <<
+17083 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.675 374.956 268.031 387.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.235) >>
 >> endobj
-17095 0 obj <<
+17084 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [282.16 361.407 300.516 374.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.258) >>
 >> endobj
-17096 0 obj <<
+17085 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [211.675 348.464 230.031 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.556) >>
 >> endobj
-17097 0 obj <<
+17086 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [197.978 334.915 216.334 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.319) >>
 >> endobj
-17098 0 obj <<
+17087 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [242.614 321.366 260.97 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-17099 0 obj <<
+17088 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [234.796 307.816 253.152 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-17100 0 obj <<
+17089 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [289.584 294.267 307.94 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.123) >>
 >> endobj
-17101 0 obj <<
+17090 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [235.129 280.718 253.485 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.545) >>
 >> endobj
-17102 0 obj <<
+17091 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.856 267.169 273.213 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.688) >>
 >> endobj
-17103 0 obj <<
+17092 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [271.432 253.62 289.788 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.116) >>
 >> endobj
-17104 0 obj <<
+17093 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.978 240.07 278.334 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.811) >>
 >> endobj
-17105 0 obj <<
+17094 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [194.705 226.521 213.061 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.368) >>
 >> endobj
-17106 0 obj <<
+17095 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [225.372 212.972 243.728 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.385) >>
 >> endobj
-17107 0 obj <<
+17096 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [231.978 199.423 250.334 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.395) >>
 >> endobj
-17108 0 obj <<
+17097 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.281 185.874 254.637 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.404) >>
 >> endobj
-17109 0 obj <<
+17098 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.038 172.324 222.394 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.404) >>
 >> endobj
-17110 0 obj <<
+17099 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [208.069 158.775 220.97 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.46) >>
 >> endobj
-17111 0 obj <<
+17100 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.432 145.226 222.788 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.114) >>
 >> endobj
-17112 0 obj <<
+17101 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.462 145.226 245.819 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.119) >>
 >> endobj
-17113 0 obj <<
+17102 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [250.493 145.226 268.849 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.695) >>
 >> endobj
-17114 0 obj <<
+17103 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [273.523 145.226 291.879 156.37]
 /Subtype /Link
 /A << /S /GoTo /D (page.696) >>
 >> endobj
-17115 0 obj <<
+17104 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [252.069 131.677 270.425 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.243) >>
 >> endobj
-17116 0 obj <<
+17105 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [179.341 118.128 197.697 129.696]
 /Subtype /Link
 /A << /S /GoTo /D (page.482) >>
 >> endobj
-17117 0 obj <<
+17106 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.316 646.546 448.672 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-17118 0 obj <<
+17107 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.346 646.546 471.702 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.453) >>
 >> endobj
-17119 0 obj <<
+17108 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [476.376 646.546 494.732 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.505) >>
 >> endobj
-17120 0 obj <<
+17109 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [466.376 632.997 484.732 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.673) >>
 >> endobj
-17121 0 obj <<
+17110 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [373.619 619.448 386.52 630.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.47) >>
 >> endobj
-17122 0 obj <<
+17111 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.194 619.448 409.55 630.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.150) >>
 >> endobj
-17123 0 obj <<
+17112 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.225 619.448 432.581 630.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.200) >>
 >> endobj
-17124 0 obj <<
+17113 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [437.255 619.448 455.611 630.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.319) >>
 >> endobj
-17125 0 obj <<
+17114 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [460.285 619.448 478.641 630.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.750) >>
 >> endobj
-17126 0 obj <<
+17115 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [469.8 605.899 488.157 617.043]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-17127 0 obj <<
+17116 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.529 592.35 434.885 603.494]
 /Subtype /Link
 /A << /S /GoTo /D (page.199) >>
 >> endobj
-17128 0 obj <<
+17117 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.008 592.35 459.364 603.494]
 /Subtype /Link
 /A << /S /GoTo /D (page.203) >>
 >> endobj
-17129 0 obj <<
+17118 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [465.487 592.35 483.843 603.494]
 /Subtype /Link
 /A << /S /GoTo /D (page.209) >>
 >> endobj
-17130 0 obj <<
+17119 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 592.35 508.322 603.494]
 /Subtype /Link
 /A << /S /GoTo /D (page.214) >>
 >> endobj
-17131 0 obj <<
+17120 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 580.922 405.674 589.944]
 /Subtype /Link
 /A << /S /GoTo /D (page.258) >>
 >> endobj
-17132 0 obj <<
+17121 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [454.211 564.645 472.567 577.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.201) >>
 >> endobj
-17133 0 obj <<
+17122 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [459.437 551.702 472.338 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.88) >>
 >> endobj
-17134 0 obj <<
+17123 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [454.211 523.997 472.567 536.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.202) >>
 >> endobj
-17135 0 obj <<
+17124 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [477.241 523.997 495.597 536.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.223) >>
 >> endobj
-17136 0 obj <<
+17125 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.225 511.054 436.581 522.198]
 /Subtype /Link
 /A << /S /GoTo /D (page.199) >>
 >> endobj
-17137 0 obj <<
+17126 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.255 511.054 459.611 522.198]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-17138 0 obj <<
+17127 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.285 511.054 482.641 522.198]
 /Subtype /Link
 /A << /S /GoTo /D (page.303) >>
 >> endobj
-17139 0 obj <<
+17128 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [425.77 497.505 444.126 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.570) >>
 >> endobj
-17140 0 obj <<
+17129 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [466.194 483.956 484.551 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.189) >>
 >> endobj
-17141 0 obj <<
+17130 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.013 470.407 442.369 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.215) >>
 >> endobj
-17142 0 obj <<
+17131 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.043 456.858 464.399 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.571) >>
 >> endobj
-17143 0 obj <<
+17132 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.134 443.308 432.035 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.93) >>
 >> endobj
-17144 0 obj <<
+17133 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [436.709 443.308 455.066 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.214) >>
 >> endobj
-17145 0 obj <<
+17134 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.74 429.759 434.096 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.270) >>
 >> endobj
-17146 0 obj <<
+17135 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [408.861 416.21 427.217 427.354]
 /Subtype /Link
 /A << /S /GoTo /D (page.810) >>
 >> endobj
-17147 0 obj <<
+17136 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.012 402.661 425.369 414.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.303) >>
 >> endobj
-17148 0 obj <<
+17137 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [440.588 389.112 458.944 400.68]
 /Subtype /Link
 /A << /S /GoTo /D (page.202) >>
 >> endobj
-17149 0 obj <<
+17138 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [463.619 389.112 481.975 400.68]
 /Subtype /Link
 /A << /S /GoTo /D (page.223) >>
 >> endobj
-17150 0 obj <<
+17139 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [437.558 375.562 455.914 386.706]
 /Subtype /Link
 /A << /S /GoTo /D (page.201) >>
 >> endobj
-17151 0 obj <<
+17140 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [460.588 375.562 478.944 386.706]
 /Subtype /Link
 /A << /S /GoTo /D (page.246) >>
 >> endobj
-17152 0 obj <<
+17141 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [483.619 375.562 501.975 386.706]
 /Subtype /Link
 /A << /S /GoTo /D (page.247) >>
 >> endobj
-17153 0 obj <<
+17142 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.922 362.013 439.278 373.581]
 /Subtype /Link
 /A << /S /GoTo /D (page.376) >>
 >> endobj
-17154 0 obj <<
+17143 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [443.952 362.013 462.308 373.581]
 /Subtype /Link
 /A << /S /GoTo /D (page.377) >>
 >> endobj
-17155 0 obj <<
+17144 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [466.982 362.013 485.338 373.581]
 /Subtype /Link
 /A << /S /GoTo /D (page.593) >>
 >> endobj
-17156 0 obj <<
+17145 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [490.013 362.013 508.369 373.581]
 /Subtype /Link
 /A << /S /GoTo /D (page.626) >>
 >> endobj
-17157 0 obj <<
+17146 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [482.982 348.464 501.338 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.594) >>
 >> endobj
-17158 0 obj <<
+17147 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.922 334.915 436.278 346.059]
 /Subtype /Link
 /A << /S /GoTo /D (page.305) >>
 >> endobj
-17159 0 obj <<
+17148 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.285 321.366 429.641 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.618) >>
 >> endobj
-17160 0 obj <<
+17149 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [481.043 307.816 499.399 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.309) >>
 >> endobj
-17161 0 obj <<
+17150 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [398.467 294.267 411.369 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.45) >>
 >> endobj
-17162 0 obj <<
+17151 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.043 294.267 428.944 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.46) >>
 >> endobj
-17163 0 obj <<
+17152 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [469.528 280.718 487.884 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.138) >>
 >> endobj
-17164 0 obj <<
+17153 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.255 267.169 456.611 278.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.196) >>
 >> endobj
-17165 0 obj <<
+17154 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.8 253.62 455.702 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.79) >>
 >> endobj
-17166 0 obj <<
+17155 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.831 240.07 418.187 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.617) >>
 >> endobj
-17167 0 obj <<
+17156 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.861 240.07 441.217 251.639]
 /Subtype /Link
 /A << /S /GoTo /D (page.623) >>
 >> endobj
-17168 0 obj <<
+17157 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.134 226.521 423.49 238.089]
 /Subtype /Link
 /A << /S /GoTo /D (page.626) >>
 >> endobj
-17169 0 obj <<
+17158 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.013 212.972 421.369 224.54]
 /Subtype /Link
 /A << /S /GoTo /D (page.617) >>
 >> endobj
-17170 0 obj <<
+17159 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.194 199.423 409.55 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.102) >>
 >> endobj
-17171 0 obj <<
+17160 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.225 199.423 432.581 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.105) >>
 >> endobj
-17172 0 obj <<
+17161 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.073 185.874 411.975 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.87) >>
 >> endobj
-17173 0 obj <<
+17162 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.649 185.874 435.005 197.018]
 /Subtype /Link
 /A << /S /GoTo /D (page.323) >>
 >> endobj
-17174 0 obj <<
+17163 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [467.406 172.324 485.763 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.135) >>
 >> endobj
-17175 0 obj <<
+17164 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.316 158.775 441.672 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.106) >>
 >> endobj
-17176 0 obj <<
+17165 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.346 158.775 464.702 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.259) >>
 >> endobj
-17177 0 obj <<
+17166 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [469.376 158.775 487.732 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.260) >>
 >> endobj
-17178 0 obj <<
+17167 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [423.922 145.226 436.823 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.55) >>
 >> endobj
-17179 0 obj <<
+17168 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.164 131.677 436.52 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.222) >>
 >> endobj
-17180 0 obj <<
+17169 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [377.922 118.128 396.278 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.369) >>
 >> endobj
-17181 0 obj <<
+17170 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [400.952 118.128 419.308 129.272]
 /Subtype /Link
 /A << /S /GoTo /D (page.603) >>
 >> endobj
-17186 0 obj <<
-/D [17184 0 R /XYZ 151.701 685.529 null]
+17175 0 obj <<
+/D [17173 0 R /XYZ 151.701 685.529 null]
 >> endobj
-17183 0 obj <<
+17172 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-17329 0 obj <<
+17318 0 obj <<
 /Length 1664      
 /Filter /FlateDecode
 >>
@@ -105775,995 +109500,995 @@
 Êx½~³Ž ¢è4Ó¤YÖ¨¹Y"ï¹ýƒuZ§«bm›Sô5ÑÁÎ&‡ïß…TŠNötd25¸Bʈ¬ÿºKËJ¿p:2Ü%49M•¼Y§¥¹'ˆ†õéyS5­åd(½Jœ\̏{<ñW­iÌŠ©ŒÒ¹”c09ä$‰NL†^	ûøý¿ª‡6óþ‰:®Ü:×yU´jÚÕ?¹HÕ¼[}»:,æ“÷‡aÀû¹l§!‰ñd3¼‰Gɺÿü´œý¯†·
 endstream
 endobj
-17328 0 obj <<
+17317 0 obj <<
 /Type /Page
-/Contents 17329 0 R
-/Resources 17327 0 R
+/Contents 17318 0 R
+/Resources 17316 0 R
 /MediaBox [0 0 612 792]
-/Parent 17187 0 R
-/Annots [ 17182 0 R 17188 0 R 17189 0 R 17190 0 R 17191 0 R 17192 0 R 17193 0 R 17194 0 R 17195 0 R 17196 0 R 17197 0 R 17198 0 R 17199 0 R 17200 0 R 17201 0 R 17202 0 R 17203 0 R 17204 0 R 17205 0 R 17206 0 R 17207 0 R 17208 0 R 17209 0 R 17210 0 R 17211 0 R 17212 0 R 17213 0 R 17214 0 R 17215 0 R 17216 0 R 17217 0 R 17218 0 R 17219 0 R 17220 0 R 17221 0 R 17222 0 R 17223 0 R 17224 0 R 17225 0 R 17226 0 R 17227 0 R 17228 0 R 17229 0 R 17230 0 R 17231 0 R 17232 0 R 17233 0 R 17234 0 R 17235 0 R 17236 0 R 17237 0 R 17238 0 R 17239 0 R 17240 0 R 17241 0 R 17242 0 R 17243 0 R 17244 0 R 17245 0 R 17246 0 R 17247 0 R 17248 0 R 17249 0 R 17250 0 R 17251 0 R 17252 0 R 17253 0 R 17254 0 R 17255 0 R 17256 0 R 17257 0 R 17258 0 R 17259 0 R 17260 0 R 17261 0 R 17262 0 R 17263 0 R 17264 0 R 17265 0 R 17266 0 R 17267 0 R 17268 0 R 17269 0 R 17270 0 R 17271 0 R 17272 0 R 17273 0 R 17274 0 R 17275 0 R 17276 0 R 17277 0 R 17278 0 R 17279 0 R 17280 0 R 17281 0 R 17282 0 R 17283 0 R 17284 0 R 17285 0 R 17286 0 R 17287 0 R 17288 0 R 17289 0 R 17290 0 R 17291 0 R 17292 0 R 17293 0 R 17294 0 R 17295 0 R 17296 0 R 17297 0 R 17298 0 R 17299 0 R 17300 0 R 17301 0 R 17302 0 R 17303 0 R 17304 0 R 17305 0 R 17306 0 R 17307 0 R 17308 0 R 17309 0 R 17310 0 R 17311 0 R 17312 0 R 17313 0 R 17314 0 R 17315 0 R 17316 0 R 17317 0 R 17318 0 R 17319 0 R 17320 0 R 17321 0 R 17322 0 R 17323 0 R 17324 0 R 17325 0 R ]
+/Parent 17176 0 R
+/Annots [ 17171 0 R 17177 0 R 17178 0 R 17179 0 R 17180 0 R 17181 0 R 17182 0 R 17183 0 R 17184 0 R 17185 0 R 17186 0 R 17187 0 R 17188 0 R 17189 0 R 17190 0 R 17191 0 R 17192 0 R 17193 0 R 17194 0 R 17195 0 R 17196 0 R 17197 0 R 17198 0 R 17199 0 R 17200 0 R 17201 0 R 17202 0 R 17203 0 R 17204 0 R 17205 0 R 17206 0 R 17207 0 R 17208 0 R 17209 0 R 17210 0 R 17211 0 R 17212 0 R 17213 0 R 17214 0 R 17215 0 R 17216 0 R 17217 0 R 17218 0 R 17219 0 R 17220 0 R 17221 0 R 17222 0 R 17223 0 R 17224 0 R 17225 0 R 17226 0 R 17227 0 R 17228 0 R 17229 0 R 17230 0 R 17231 0 R 17232 0 R 17233 0 R 17234 0 R 17235 0 R 17236 0 R 17237 0 R 17238 0 R 17239 0 R 17240 0 R 17241 0 R 17242 0 R 17243 0 R 17244 0 R 17245 0 R 17246 0 R 17247 0 R 17248 0 R 17249 0 R 17250 0 R 17251 0 R 17252 0 R 17253 0 R 17254 0 R 17255 0 R 17256 0 R 17257 0 R 17258 0 R 17259 0 R 17260 0 R 17261 0 R 17262 0 R 17263 0 R 17264 0 R 17265 0 R 17266 0 R 17267 0 R 17268 0 R 17269 0 R 17270 0 R 17271 0 R 17272 0 R 17273 0 R 17274 0 R 17275 0 R 17276 0 R 17277 0 R 17278 0 R 17279 0 R 17280 0 R 17281 0 R 17282 0 R 17283 0 R 17284 0 R 17285 0 R 17286 0 R 17287 0 R 17288 0 R 17289 0 R 17290 0 R 17291 0 R 17292 0 R 17293 0 R 17294 0 R 17295 0 R 17296 0 R 17297 0 R 17298 0 R 17299 0 R 17300 0 R 17301 0 R 17302 0 R 17303 0 R 17304 0 R 17305 0 R 17306 0 R 17307 0 R 17308 0 R 17309 0 R 17310 0 R 17311 0 R 17312 0 R 17313 0 R 17314 0 R ]
 >> endobj
-17182 0 obj <<
+17171 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [161.532 646.546 179.888 658.115]
 /Subtype /Link
 /A << /S /GoTo /D (page.104) >>
 >> endobj
-17188 0 obj <<
+17177 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [138.835 632.895 157.191 644.463]
 /Subtype /Link
 /A << /S /GoTo /D (page.674) >>
 >> endobj
-17189 0 obj <<
+17178 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [161.865 632.895 180.221 644.463]
 /Subtype /Link
 /A << /S /GoTo /D (page.676) >>
 >> endobj
-17190 0 obj <<
+17179 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.895 632.895 203.252 644.463]
 /Subtype /Link
 /A << /S /GoTo /D (page.677) >>
 >> endobj
-17191 0 obj <<
+17180 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [184.592 619.244 202.949 630.933]
 /Subtype /Link
 /A << /S /GoTo /D (page.738) >>
 >> endobj
-17192 0 obj <<
+17181 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.805 593.324 245.161 606.226]
 /Subtype /Link
 /A << /S /GoTo /D (page.367) >>
 >> endobj
-17193 0 obj <<
+17182 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [156.714 580.279 175.07 591.969]
 /Subtype /Link
 /A << /S /GoTo /D (page.322) >>
 >> endobj
-17194 0 obj <<
+17183 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [179.744 580.279 198.1 591.969]
 /Subtype /Link
 /A << /S /GoTo /D (page.323) >>
 >> endobj
-17195 0 obj <<
+17184 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [202.774 580.279 221.13 591.969]
 /Subtype /Link
 /A << /S /GoTo /D (page.746) >>
 >> endobj
-17196 0 obj <<
+17185 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [225.805 580.279 244.161 591.969]
 /Subtype /Link
 /A << /S /GoTo /D (page.749) >>
 >> endobj
-17197 0 obj <<
+17186 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [143.835 566.628 151.282 578.317]
 /Subtype /Link
 /A << /S /GoTo /D (page.8) >>
 >> endobj
-17198 0 obj <<
+17187 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [155.956 566.628 174.312 578.317]
 /Subtype /Link
 /A << /S /GoTo /D (page.743) >>
 >> endobj
-17199 0 obj <<
+17188 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [210.229 552.977 228.585 564.666]
 /Subtype /Link
 /A << /S /GoTo /D (page.724) >>
 >> endobj
-17200 0 obj <<
+17189 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [153.532 539.326 166.433 551.015]
 /Subtype /Link
 /A << /S /GoTo /D (page.64) >>
 >> endobj
-17201 0 obj <<
+17190 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.108 539.326 189.464 551.015]
 /Subtype /Link
 /A << /S /GoTo /D (page.603) >>
 >> endobj
-17202 0 obj <<
+17191 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [219.471 525.674 237.827 537.364]
 /Subtype /Link
 /A << /S /GoTo /D (page.452) >>
 >> endobj
-17203 0 obj <<
+17192 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [149.623 512.023 167.979 523.713]
 /Subtype /Link
 /A << /S /GoTo /D (page.181) >>
 >> endobj
-17204 0 obj <<
+17193 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [132.35 498.372 150.706 510.062]
 /Subtype /Link
 /A << /S /GoTo /D (page.390) >>
 >> endobj
-17205 0 obj <<
+17194 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [176.683 484.721 195.04 496.41]
 /Subtype /Link
 /A << /S /GoTo /D (page.558) >>
 >> endobj
-17206 0 obj <<
+17195 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [148.441 471.07 166.797 482.759]
 /Subtype /Link
 /A << /S /GoTo /D (page.341) >>
 >> endobj
-17207 0 obj <<
+17196 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [127.926 457.418 140.827 468.987]
 /Subtype /Link
 /A << /S /GoTo /D (page.74) >>
 >> endobj
-17208 0 obj <<
+17197 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [145.501 457.418 163.858 468.987]
 /Subtype /Link
 /A << /S /GoTo /D (page.552) >>
 >> endobj
-17209 0 obj <<
+17198 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [166.411 443.767 184.767 455.457]
 /Subtype /Link
 /A << /S /GoTo /D (page.558) >>
 >> endobj
-17210 0 obj <<
+17199 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [189.441 443.767 207.797 455.457]
 /Subtype /Link
 /A << /S /GoTo /D (page.626) >>
 >> endobj
-17211 0 obj <<
+17200 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [170.714 430.116 189.07 441.806]
 /Subtype /Link
 /A << /S /GoTo /D (page.551) >>
 >> endobj
-17212 0 obj <<
+17201 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.744 430.116 212.1 441.806]
 /Subtype /Link
 /A << /S /GoTo /D (page.563) >>
 >> endobj
-17213 0 obj <<
+17202 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [157.289 416.465 175.646 428.154]
 /Subtype /Link
 /A << /S /GoTo /D (page.551) >>
 >> endobj
-17214 0 obj <<
+17203 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [146.289 402.814 164.646 413.958]
 /Subtype /Link
 /A << /S /GoTo /D (page.560) >>
 >> endobj
-17215 0 obj <<
+17204 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.259 389.163 168.615 400.852]
 /Subtype /Link
 /A << /S /GoTo /D (page.560) >>
 >> endobj
-17216 0 obj <<
+17205 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [128.986 375.511 141.888 386.911]
 /Subtype /Link
 /A << /S /GoTo /D (page.81) >>
 >> endobj
-17217 0 obj <<
+17206 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [146.562 375.511 164.918 386.911]
 /Subtype /Link
 /A << /S /GoTo /D (page.102) >>
 >> endobj
-17218 0 obj <<
+17207 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [170.047 348.209 188.403 359.898]
 /Subtype /Link
 /A << /S /GoTo /D (page.689) >>
 >> endobj
-17219 0 obj <<
+17208 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.077 348.209 211.433 359.898]
 /Subtype /Link
 /A << /S /GoTo /D (page.692) >>
 >> endobj
-17220 0 obj <<
+17209 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [169.471 334.558 187.827 345.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.551) >>
 >> endobj
-17221 0 obj <<
+17210 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.168 320.907 189.524 332.596]
 /Subtype /Link
 /A << /S /GoTo /D (page.491) >>
 >> endobj
-17222 0 obj <<
+17211 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [151.471 307.255 169.827 318.945]
 /Subtype /Link
 /A << /S /GoTo /D (page.687) >>
 >> endobj
-17223 0 obj <<
+17212 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [159.138 292.998 177.494 305.9]
 /Subtype /Link
 /A << /S /GoTo /D (page.595) >>
 >> endobj
-17224 0 obj <<
+17213 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.441 279.953 189.797 291.643]
 /Subtype /Link
 /A << /S /GoTo /D (page.560) >>
 >> endobj
-17225 0 obj <<
+17214 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [154.835 266.302 173.191 277.991]
 /Subtype /Link
 /A << /S /GoTo /D (page.758) >>
 >> endobj
-17226 0 obj <<
+17215 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [132.986 252.651 151.343 263.795]
 /Subtype /Link
 /A << /S /GoTo /D (page.563) >>
 >> endobj
-17227 0 obj <<
+17216 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [127.471 239 145.827 250.689]
 /Subtype /Link
 /A << /S /GoTo /D (page.689) >>
 >> endobj
-17228 0 obj <<
+17217 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [147.774 213.686 166.13 225.254]
 /Subtype /Link
 /A << /S /GoTo /D (page.411) >>
 >> endobj
-17229 0 obj <<
+17218 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [170.805 213.686 189.161 225.254]
 /Subtype /Link
 /A << /S /GoTo /D (page.412) >>
 >> endobj
-17230 0 obj <<
+17219 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [193.835 213.686 212.191 225.254]
 /Subtype /Link
 /A << /S /GoTo /D (page.491) >>
 >> endobj
-17231 0 obj <<
+17220 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [216.865 213.686 235.221 225.254]
 /Subtype /Link
 /A << /S /GoTo /D (page.497) >>
 >> endobj
-17232 0 obj <<
+17221 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [158.683 199.429 177.04 212.33]
 /Subtype /Link
 /A << /S /GoTo /D (page.463) >>
 >> endobj
-17233 0 obj <<
+17222 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [132.926 186.384 151.282 197.952]
 /Subtype /Link
 /A << /S /GoTo /D (page.167) >>
 >> endobj
-17234 0 obj <<
+17223 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [155.956 186.384 174.312 197.952]
 /Subtype /Link
 /A << /S /GoTo /D (page.349) >>
 >> endobj
-17235 0 obj <<
+17224 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [138.38 172.732 156.736 184.422]
 /Subtype /Link
 /A << /S /GoTo /D (page.581) >>
 >> endobj
-17236 0 obj <<
+17225 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.229 159.081 242.585 170.771]
 /Subtype /Link
 /A << /S /GoTo /D (page.731) >>
 >> endobj
-17237 0 obj <<
+17226 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [156.562 145.43 174.918 157.119]
 /Subtype /Link
 /A << /S /GoTo /D (page.185) >>
 >> endobj
-17238 0 obj <<
+17227 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [148.986 131.779 167.342 143.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.136) >>
 >> endobj
-17239 0 obj <<
+17228 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [183.532 118.128 201.888 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-17240 0 obj <<
+17229 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.991 646.546 432.347 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.724) >>
 >> endobj
-17241 0 obj <<
+17230 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [380.294 632.997 398.65 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-17242 0 obj <<
+17231 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.187 619.448 460.543 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.641) >>
 >> endobj
-17243 0 obj <<
+17232 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [360.294 605.899 378.65 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.167) >>
 >> endobj
-17244 0 obj <<
+17233 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.264 592.35 417.62 603.918]
 /Subtype /Link
 /A << /S /GoTo /D (page.403) >>
 >> endobj
-17245 0 obj <<
+17234 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [337.567 578.8 355.923 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.412) >>
 >> endobj
-17246 0 obj <<
+17235 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [360.597 578.8 378.953 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.414) >>
 >> endobj
-17247 0 obj <<
+17236 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [383.627 578.8 401.983 590.369]
 /Subtype /Link
 /A << /S /GoTo /D (page.497) >>
 >> endobj
-17248 0 obj <<
+17237 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [345.464 565.251 363.82 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.122) >>
 >> endobj
-17249 0 obj <<
+17238 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [369.422 565.251 387.778 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.570) >>
 >> endobj
-17250 0 obj <<
+17239 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [393.38 565.251 411.736 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.572) >>
 >> endobj
-17251 0 obj <<
+17240 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.198 565.251 433.555 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.576) >>
 >> endobj
-17252 0 obj <<
+17241 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 565.251 457.513 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.578) >>
 >> endobj
-17253 0 obj <<
+17242 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 551.702 354.864 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.581) >>
 >> endobj
-17254 0 obj <<
+17243 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.538 551.702 377.895 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.587) >>
 >> endobj
-17255 0 obj <<
+17244 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.569 551.702 400.925 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.590) >>
 >> endobj
-17256 0 obj <<
+17245 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.599 551.702 423.955 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.639) >>
 >> endobj
-17257 0 obj <<
+17246 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.629 551.702 446.986 562.846]
 /Subtype /Link
 /A << /S /GoTo /D (page.641) >>
 >> endobj
-17258 0 obj <<
+17247 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [342.964 538.153 361.32 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.110) >>
 >> endobj
-17259 0 obj <<
+17248 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [367.755 538.153 386.112 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.237) >>
 >> endobj
-17260 0 obj <<
+17249 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.547 538.153 410.903 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-17261 0 obj <<
+17250 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.365 538.153 432.721 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.289) >>
 >> endobj
-17262 0 obj <<
+17251 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 538.153 457.513 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.291) >>
 >> endobj
-17263 0 obj <<
+17252 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 524.604 354.864 535.748]
 /Subtype /Link
 /A << /S /GoTo /D (page.292) >>
 >> endobj
-17264 0 obj <<
+17253 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [359.538 524.604 377.895 535.748]
 /Subtype /Link
 /A << /S /GoTo /D (page.371) >>
 >> endobj
-17265 0 obj <<
+17254 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.569 524.604 400.925 535.748]
 /Subtype /Link
 /A << /S /GoTo /D (page.372) >>
 >> endobj
-17266 0 obj <<
+17255 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.599 524.604 423.955 535.748]
 /Subtype /Link
 /A << /S /GoTo /D (page.567) >>
 >> endobj
-17267 0 obj <<
+17256 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [428.629 524.604 446.986 535.748]
 /Subtype /Link
 /A << /S /GoTo /D (page.579) >>
 >> endobj
-17268 0 obj <<
+17257 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.9 511.054 423.256 522.744]
 /Subtype /Link
 /A << /S /GoTo /D (page.707) >>
 >> endobj
-17269 0 obj <<
+17258 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [375.506 497.505 393.862 509.195]
 /Subtype /Link
 /A << /S /GoTo /D (page.569) >>
 >> endobj
-17270 0 obj <<
+17259 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [389.203 483.956 407.559 495.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.581) >>
 >> endobj
-17271 0 obj <<
+17260 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [384.385 470.407 402.741 482.096]
 /Subtype /Link
 /A << /S /GoTo /D (page.580) >>
 >> endobj
-17272 0 obj <<
+17261 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [445.143 456.858 463.499 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.639) >>
 >> endobj
-17273 0 obj <<
+17262 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [353.991 443.308 372.347 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.590) >>
 >> endobj
-17274 0 obj <<
+17263 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [349.751 429.759 357.198 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.6) >>
 >> endobj
-17275 0 obj <<
+17264 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [364.359 429.759 371.806 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.8) >>
 >> endobj
-17276 0 obj <<
+17265 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [378.968 429.759 391.869 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.29) >>
 >> endobj
-17277 0 obj <<
+17266 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [399.031 429.759 411.932 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.95) >>
 >> endobj
-17278 0 obj <<
+17267 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.094 429.759 431.995 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.96) >>
 >> endobj
-17279 0 obj <<
+17268 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 429.759 457.513 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-17280 0 obj <<
+17269 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 416.21 354.864 427.354]
 /Subtype /Link
 /A << /S /GoTo /D (page.200) >>
 >> endobj
-17281 0 obj <<
+17270 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [362.17 416.21 380.526 427.354]
 /Subtype /Link
 /A << /S /GoTo /D (page.232) >>
 >> endobj
-17282 0 obj <<
+17271 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.832 416.21 406.188 427.354]
 /Subtype /Link
 /A << /S /GoTo /D (page.237) >>
 >> endobj
-17283 0 obj <<
+17272 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [413.494 416.21 431.851 427.354]
 /Subtype /Link
 /A << /S /GoTo /D (page.258) >>
 >> endobj
-17284 0 obj <<
+17273 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [439.156 416.21 457.513 427.354]
 /Subtype /Link
 /A << /S /GoTo /D (page.286) >>
 >> endobj
-17285 0 obj <<
+17274 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 402.661 354.864 413.805]
 /Subtype /Link
 /A << /S /GoTo /D (page.287) >>
 >> endobj
-17286 0 obj <<
+17275 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [361.564 402.661 379.92 413.805]
 /Subtype /Link
 /A << /S /GoTo /D (page.371) >>
 >> endobj
-17287 0 obj <<
+17276 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [386.62 402.661 404.976 413.805]
 /Subtype /Link
 /A << /S /GoTo /D (page.568) >>
 >> endobj
-17288 0 obj <<
+17277 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [411.676 402.661 430.032 413.805]
 /Subtype /Link
 /A << /S /GoTo /D (page.571) >>
 >> endobj
-17289 0 obj <<
+17278 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [436.732 402.661 455.088 413.805]
 /Subtype /Link
 /A << /S /GoTo /D (page.575) >>
 >> endobj
-17290 0 obj <<
+17279 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 389.112 354.864 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.577) >>
 >> endobj
-17291 0 obj <<
+17280 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [358.569 389.112 376.925 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.579) >>
 >> endobj
-17292 0 obj <<
+17281 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [380.387 389.112 398.743 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.581) >>
 >> endobj
-17293 0 obj <<
+17282 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.448 389.112 420.804 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.584) >>
 >> endobj
-17294 0 obj <<
+17283 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.508 389.112 442.864 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.586) >>
 >> endobj
-17295 0 obj <<
+17284 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.569 389.112 464.925 400.256]
 /Subtype /Link
 /A << /S /GoTo /D (page.698) >>
 >> endobj
-17296 0 obj <<
+17285 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.87 375.562 406.226 387.252]
 /Subtype /Link
 /A << /S /GoTo /D (page.582) >>
 >> endobj
-17297 0 obj <<
+17286 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [347.021 362.013 365.377 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.285) >>
 >> endobj
-17298 0 obj <<
+17287 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [370.052 362.013 388.408 373.703]
 /Subtype /Link
 /A << /S /GoTo /D (page.678) >>
 >> endobj
-17299 0 obj <<
+17288 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [372.476 348.464 390.832 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.112) >>
 >> endobj
-17300 0 obj <<
+17289 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [395.506 348.464 413.862 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.116) >>
 >> endobj
-17301 0 obj <<
+17290 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.536 348.464 436.893 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.154) >>
 >> endobj
-17302 0 obj <<
+17291 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [441.567 348.464 459.923 360.153]
 /Subtype /Link
 /A << /S /GoTo /D (page.373) >>
 >> endobj
-17303 0 obj <<
+17292 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [336.508 323.487 354.864 332.51]
 /Subtype /Link
 /A << /S /GoTo /D (page.130) >>
 >> endobj
-17304 0 obj <<
+17293 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.112 307.816 422.468 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.378) >>
 >> endobj
-17305 0 obj <<
+17294 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [372.476 294.267 390.832 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.114) >>
 >> endobj
-17306 0 obj <<
+17295 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [395.506 294.267 413.862 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.119) >>
 >> endobj
-17307 0 obj <<
+17296 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [392.93 280.112 411.287 293.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.158) >>
 >> endobj
-17308 0 obj <<
+17297 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.961 280.112 434.317 293.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.386) >>
 >> endobj
-17309 0 obj <<
+17298 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [379.991 266.563 398.347 279.464]
 /Subtype /Link
 /A << /S /GoTo /D (page.136) >>
 >> endobj
-17310 0 obj <<
+17299 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.052 266.563 420.408 279.464]
 /Subtype /Link
 /A << /S /GoTo /D (page.172) >>
 >> endobj
-17311 0 obj <<
+17300 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [424.112 266.563 442.468 279.464]
 /Subtype /Link
 /A << /S /GoTo /D (page.175) >>
 >> endobj
-17312 0 obj <<
+17301 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [446.173 266.563 464.529 279.464]
 /Subtype /Link
 /A << /S /GoTo /D (page.593) >>
 >> endobj
-17313 0 obj <<
+17302 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [434.446 253.014 452.802 265.915]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-17314 0 obj <<
+17303 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [447.87 240.07 466.226 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.569) >>
 >> endobj
-17315 0 obj <<
+17304 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [376.415 226.521 394.771 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-17316 0 obj <<
+17305 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.627 212.972 432.983 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.347) >>
 >> endobj
-17317 0 obj <<
+17306 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.809 199.423 404.165 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.715) >>
 >> endobj
-17318 0 obj <<
+17307 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [391.779 185.874 410.135 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.178) >>
 >> endobj
-17319 0 obj <<
+17308 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.809 185.874 433.165 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.412) >>
 >> endobj
-17320 0 obj <<
+17309 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [375.876 172.324 394.232 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.231) >>
 >> endobj
-17321 0 obj <<
+17310 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [397.979 172.324 416.336 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.235) >>
 >> endobj
-17322 0 obj <<
+17311 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.083 172.324 438.439 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.250) >>
 >> endobj
-17323 0 obj <<
+17312 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.187 172.324 460.543 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.303) >>
 >> endobj
-17324 0 obj <<
+17313 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.264 158.775 436.62 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-17325 0 obj <<
+17314 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [382.264 145.226 400.62 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.250) >>
 >> endobj
-17330 0 obj <<
-/D [17328 0 R /XYZ 100.892 685.529 null]
+17319 0 obj <<
+/D [17317 0 R /XYZ 100.892 685.529 null]
 >> endobj
-17327 0 obj <<
+17316 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-17453 0 obj <<
+17442 0 obj <<
 /Length 1479      
 /Filter /FlateDecode
 >>
@@ -106780,855 +110505,855 @@
 CØé„jøt$†Ù”0NBÁ‚n©@bà³W×ü+䉆ùÞç[#ùÖû"r¶F,ùÐ0Q6h/²Ï¿9®êЫ쀳ß9Æ›!"-ºÜ(Å7-•~¸o.Á~É.KW®2)Ha÷;!Z<^HQ¸.®a0jÑîTµ!ÛôkC³ GFÆæ`;±ò: Ú­É묤Ãè{q¸èí´ó„1ì/¼ü»À1þ÷«ûq\hÁd7.0½º¨Léhض;‘ÒU2jï,U´ßíF)ªQÐ#”r4’óà10‘È ùqäp&¤_®^ò}ûûÄ»XOÀæ(ªò¢yt2QZÛņoœyw³°îDH"l§Ð™nT¼‘Ùí=[‘W¦Q„þÊ°cž9×ã·Å_¹¥Ý˜09‰€ ª—ÁdŠ„¡AÔs­z¨¼†e!\_‹É(þBž ŠS¡ä81)ºwîÖ›¸M²1Iñ\Wº&±—Ô®Cº'n½pìÜ¢Øo±"€ÍâÙk‘VÑs–8îbÔÅ›“Ûåä?Ç4‰
 endstream
 endobj
-17452 0 obj <<
+17441 0 obj <<
 /Type /Page
-/Contents 17453 0 R
-/Resources 17451 0 R
+/Contents 17442 0 R
+/Resources 17440 0 R
 /MediaBox [0 0 612 792]
-/Parent 17187 0 R
-/Annots [ 17326 0 R 17331 0 R 17332 0 R 17333 0 R 17334 0 R 17335 0 R 17336 0 R 17337 0 R 17338 0 R 17339 0 R 17340 0 R 17341 0 R 17342 0 R 17343 0 R 17344 0 R 17345 0 R 17346 0 R 17347 0 R 17348 0 R 17349 0 R 17350 0 R 17351 0 R 17352 0 R 17353 0 R 17354 0 R 17355 0 R 17356 0 R 17357 0 R 17358 0 R 17359 0 R 17360 0 R 17361 0 R 17362 0 R 17363 0 R 17364 0 R 17365 0 R 17366 0 R 17367 0 R 17368 0 R 17369 0 R 17370 0 R 17371 0 R 17372 0 R 17373 0 R 17374 0 R 17375 0 R 17376 0 R 17377 0 R 17378 0 R 17379 0 R 17380 0 R 17381 0 R 17382 0 R 17383 0 R 17384 0 R 17385 0 R 17386 0 R 17387 0 R 17388 0 R 17389 0 R 17390 0 R 17391 0 R 17392 0 R 17393 0 R 17394 0 R 17395 0 R 17396 0 R 17397 0 R 17398 0 R 17399 0 R 17400 0 R 17401 0 R 17402 0 R 17403 0 R 17404 0 R 17405 0 R 17406 0 R 17407 0 R 17408 0 R 17409 0 R 17410 0 R 17411 0 R 17412 0 R 17413 0 R 17414 0 R 17415 0 R 17416 0 R 17417 0 R 17418 0 R 17419 0 R 17420 0 R 17421 0 R 17422 0 R 17423 0 R 17424 0 R 17425 0 R 17426 0 R 17427 0 R 17428 0 R 17429 0 R 17430 0 R 17431 0 R 17432 0 R 17433 0 R 17434 0 R 17435 0 R 17436 0 R 17437 0 R 17438 0 R 17439 0 R 17440 0 R 17441 0 R 17442 0 R 17443 0 R 17444 0 R 17445 0 R 17446 0 R 17447 0 R 17448 0 R ]
+/Parent 17176 0 R
+/Annots [ 17315 0 R 17320 0 R 17321 0 R 17322 0 R 17323 0 R 17324 0 R 17325 0 R 17326 0 R 17327 0 R 17328 0 R 17329 0 R 17330 0 R 17331 0 R 17332 0 R 17333 0 R 17334 0 R 17335 0 R 17336 0 R 17337 0 R 17338 0 R 17339 0 R 17340 0 R 17341 0 R 17342 0 R 17343 0 R 17344 0 R 17345 0 R 17346 0 R 17347 0 R 17348 0 R 17349 0 R 17350 0 R 17351 0 R 17352 0 R 17353 0 R 17354 0 R 17355 0 R 17356 0 R 17357 0 R 17358 0 R 17359 0 R 17360 0 R 17361 0 R 17362 0 R 17363 0 R 17364 0 R 17365 0 R 17366 0 R 17367 0 R 17368 0 R 17369 0 R 17370 0 R 17371 0 R 17372 0 R 17373 0 R 17374 0 R 17375 0 R 17376 0 R 17377 0 R 17378 0 R 17379 0 R 17380 0 R 17381 0 R 17382 0 R 17383 0 R 17384 0 R 17385 0 R 17386 0 R 17387 0 R 17388 0 R 17389 0 R 17390 0 R 17391 0 R 17392 0 R 17393 0 R 17394 0 R 17395 0 R 17396 0 R 17397 0 R 17398 0 R 17399 0 R 17400 0 R 17401 0 R 17402 0 R 17403 0 R 17404 0 R 17405 0 R 17406 0 R 17407 0 R 17408 0 R 17409 0 R 17410 0 R 17411 0 R 17412 0 R 17413 0 R 17414 0 R 17415 0 R 17416 0 R 17417 0 R 17418 0 R 17419 0 R 17420 0 R 17421 0 R 17422 0 R 17423 0 R 17424 0 R 17425 0 R 17426 0 R 17427 0 R 17428 0 R 17429 0 R 17430 0 R 17431 0 R 17432 0 R 17433 0 R 17434 0 R 17435 0 R 17436 0 R 17437 0 R ]
 >> endobj
-17326 0 obj <<
+17315 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [233.947 646.546 252.304 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.618) >>
 >> endobj
-17331 0 obj <<
+17320 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [262.281 632.391 280.637 645.293]
 /Subtype /Link
 /A << /S /GoTo /D (page.132) >>
 >> endobj
-17332 0 obj <<
+17321 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [258.947 619.448 277.304 631.137]
 /Subtype /Link
 /A << /S /GoTo /D (page.132) >>
 >> endobj
-17333 0 obj <<
+17322 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.313 591.743 254.669 604.645]
 /Subtype /Link
 /A << /S /GoTo /D (page.132) >>
 >> endobj
-17334 0 obj <<
+17323 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [276.311 578.8 294.667 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.154) >>
 >> endobj
-17335 0 obj <<
+17324 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [288.644 565.251 307.001 576.941]
 /Subtype /Link
 /A << /S /GoTo /D (page.137) >>
 >> endobj
-17336 0 obj <<
+17325 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [301.007 551.702 319.363 563.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.541) >>
 >> endobj
-17337 0 obj <<
+17326 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [254.159 538.153 272.516 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.376) >>
 >> endobj
-17338 0 obj <<
+17327 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [268.19 523.997 286.546 536.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.419) >>
 >> endobj
-17339 0 obj <<
+17328 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [248.341 510.448 266.697 523.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.172) >>
 >> endobj
-17340 0 obj <<
+17329 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [271.372 510.448 289.728 523.35]
 /Subtype /Link
 /A << /S /GoTo /D (page.575) >>
 >> endobj
-17341 0 obj <<
+17330 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [268.493 496.899 286.849 509.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.396) >>
 >> endobj
-17342 0 obj <<
+17331 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 470.407 208.912 481.551]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-17343 0 obj <<
+17332 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [213.586 470.407 231.942 481.551]
 /Subtype /Link
 /A << /S /GoTo /D (page.134) >>
 >> endobj
-17344 0 obj <<
+17333 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [236.616 470.407 254.972 481.551]
 /Subtype /Link
 /A << /S /GoTo /D (page.139) >>
 >> endobj
-17345 0 obj <<
+17334 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [240.159 456.858 253.061 468.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.86) >>
 >> endobj
-17346 0 obj <<
+17335 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [226.22 443.308 244.576 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.325) >>
 >> endobj
-17347 0 obj <<
+17336 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [249.25 443.308 267.607 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.386) >>
 >> endobj
-17348 0 obj <<
+17337 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [269.311 429.759 287.667 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.374) >>
 >> endobj
-17349 0 obj <<
+17338 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [259.614 416.21 277.97 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.375) >>
 >> endobj
-17350 0 obj <<
+17339 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [256.22 402.055 274.576 414.956]
 /Subtype /Link
 /A << /S /GoTo /D (page.199) >>
 >> endobj
-17351 0 obj <<
+17340 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [253.796 388.506 272.152 401.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.234) >>
 >> endobj
-17352 0 obj <<
+17341 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [274.982 374.956 287.883 387.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.92) >>
 >> endobj
-17353 0 obj <<
+17342 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.204 374.956 311.56 387.858]
 /Subtype /Link
 /A << /S /GoTo /D (page.239) >>
 >> endobj
-17354 0 obj <<
+17343 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 364.134 208.912 373.157]
 /Subtype /Link
 /A << /S /GoTo /D (page.325) >>
 >> endobj
-17355 0 obj <<
+17344 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [289.281 347.858 307.637 360.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.303) >>
 >> endobj
-17356 0 obj <<
+17345 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [227.887 334.915 246.243 346.604]
 /Subtype /Link
 /A << /S /GoTo /D (page.524) >>
 >> endobj
-17357 0 obj <<
+17346 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [277.463 321.366 295.819 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.304) >>
 >> endobj
-17358 0 obj <<
+17347 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [243.735 307.816 262.091 319.506]
 /Subtype /Link
 /A << /S /GoTo /D (page.100) >>
 >> endobj
-17359 0 obj <<
+17348 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [277.675 294.267 296.031 305.957]
 /Subtype /Link
 /A << /S /GoTo /D (page.618) >>
 >> endobj
-17360 0 obj <<
+17349 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [293.204 280.718 311.56 292.407]
 /Subtype /Link
 /A << /S /GoTo /D (page.630) >>
 >> endobj
-17361 0 obj <<
+17350 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [190.555 269.29 208.912 278.313]
 /Subtype /Link
 /A << /S /GoTo /D (page.632) >>
 >> endobj
-17362 0 obj <<
+17351 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [232.479 253.62 250.835 265.309]
 /Subtype /Link
 /A << /S /GoTo /D (page.618) >>
 >> endobj
-17363 0 obj <<
+17352 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [253.782 240.07 272.138 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.616) >>
 >> endobj
-17364 0 obj <<
+17353 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [266.766 226.521 285.122 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.617) >>
 >> endobj
-17365 0 obj <<
+17354 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [280.856 185.874 299.213 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.596) >>
 >> endobj
-17366 0 obj <<
+17355 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [279.099 172.324 297.455 184.014]
 /Subtype /Link
 /A << /S /GoTo /D (page.594) >>
 >> endobj
-17367 0 obj <<
+17356 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [224.19 158.775 242.546 170.465]
 /Subtype /Link
 /A << /S /GoTo /D (page.303) >>
 >> endobj
-17368 0 obj <<
+17357 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [268.796 145.226 287.152 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.258) >>
 >> endobj
-17369 0 obj <<
+17358 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [263.584 131.677 281.94 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.311) >>
 >> endobj
-17370 0 obj <<
+17359 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [251.523 118.128 269.879 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.195) >>
 >> endobj
-17371 0 obj <<
+17360 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [487.225 646.546 505.581 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.631) >>
 >> endobj
-17372 0 obj <<
+17361 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [480.042 632.997 492.943 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.63) >>
 >> endobj
-17373 0 obj <<
+17362 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [496.648 632.997 509.549 644.687]
 /Subtype /Link
 /A << /S /GoTo /D (page.76) >>
 >> endobj
-17374 0 obj <<
+17363 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 621.569 405.674 630.592]
 /Subtype /Link
 /A << /S /GoTo /D (page.137) >>
 >> endobj
-17375 0 obj <<
+17364 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [474.284 605.899 492.64 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.128) >>
 >> endobj
-17376 0 obj <<
+17365 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [496.345 605.899 514.701 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.386) >>
 >> endobj
-17377 0 obj <<
+17366 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 580.922 405.674 589.944]
 /Subtype /Link
 /A << /S /GoTo /D (page.130) >>
 >> endobj
-17378 0 obj <<
+17367 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [459.8 564.645 478.157 577.547]
 /Subtype /Link
 /A << /S /GoTo /D (page.128) >>
 >> endobj
-17379 0 obj <<
+17368 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [447.982 551.096 466.338 563.997]
 /Subtype /Link
 /A << /S /GoTo /D (page.419) >>
 >> endobj
-17380 0 obj <<
+17369 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [404.74 538.153 423.096 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.605) >>
 >> endobj
-17381 0 obj <<
+17370 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [385.335 524.604 398.237 536.172]
 /Subtype /Link
 /A << /S /GoTo /D (page.62) >>
 >> endobj
-17382 0 obj <<
+17371 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.17 524.604 418.072 536.172]
 /Subtype /Link
 /A << /S /GoTo /D (page.68) >>
 >> endobj
-17383 0 obj <<
+17372 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [425.006 524.604 437.907 536.172]
 /Subtype /Link
 /A << /S /GoTo /D (page.72) >>
 >> endobj
-17384 0 obj <<
+17373 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [444.841 524.604 457.743 536.172]
 /Subtype /Link
 /A << /S /GoTo /D (page.92) >>
 >> endobj
-17385 0 obj <<
+17374 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.676 524.604 483.032 536.172]
 /Subtype /Link
 /A << /S /GoTo /D (page.108) >>
 >> endobj
-17386 0 obj <<
+17375 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 524.604 508.322 536.172]
 /Subtype /Link
 /A << /S /GoTo /D (page.123) >>
 >> endobj
-17387 0 obj <<
+17376 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 511.054 405.674 522.198]
 /Subtype /Link
 /A << /S /GoTo /D (page.129) >>
 >> endobj
-17388 0 obj <<
+17377 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [409.378 511.054 427.734 522.198]
 /Subtype /Link
 /A << /S /GoTo /D (page.131) >>
 >> endobj
-17389 0 obj <<
+17378 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.196 511.054 449.553 522.198]
 /Subtype /Link
 /A << /S /GoTo /D (page.134) >>
 >> endobj
-17390 0 obj <<
+17379 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.257 511.054 471.613 522.198]
 /Subtype /Link
 /A << /S /GoTo /D (page.153) >>
 >> endobj
-17391 0 obj <<
+17380 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [475.075 511.054 493.431 522.198]
 /Subtype /Link
 /A << /S /GoTo /D (page.159) >>
 >> endobj
-17392 0 obj <<
+17381 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [497.136 511.054 515.492 522.198]
 /Subtype /Link
 /A << /S /GoTo /D (page.162) >>
 >> endobj
-17393 0 obj <<
+17382 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 497.505 405.674 508.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.163) >>
 >> endobj
-17394 0 obj <<
+17383 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.98 497.505 431.336 508.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.165) >>
 >> endobj
-17395 0 obj <<
+17384 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.642 497.505 456.998 508.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.168) >>
 >> endobj
-17396 0 obj <<
+17385 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.304 497.505 482.66 508.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.170) >>
 >> endobj
-17397 0 obj <<
+17386 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 497.505 508.322 508.649]
 /Subtype /Link
 /A << /S /GoTo /D (page.171) >>
 >> endobj
-17398 0 obj <<
+17387 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 483.956 405.674 495.1]
 /Subtype /Link
 /A << /S /GoTo /D (page.176) >>
 >> endobj
-17399 0 obj <<
+17388 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [409.378 483.956 427.734 495.1]
 /Subtype /Link
 /A << /S /GoTo /D (page.177) >>
 >> endobj
-17400 0 obj <<
+17389 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.439 483.956 449.795 495.1]
 /Subtype /Link
 /A << /S /GoTo /D (page.179) >>
 >> endobj
-17401 0 obj <<
+17390 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.257 483.956 471.613 495.1]
 /Subtype /Link
 /A << /S /GoTo /D (page.181) >>
 >> endobj
-17402 0 obj <<
+17391 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [475.318 483.956 493.674 495.1]
 /Subtype /Link
 /A << /S /GoTo /D (page.183) >>
 >> endobj
-17403 0 obj <<
+17392 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [497.378 483.956 515.734 495.1]
 /Subtype /Link
 /A << /S /GoTo /D (page.669) >>
 >> endobj
-17404 0 obj <<
+17393 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 472.528 405.674 481.551]
 /Subtype /Link
 /A << /S /GoTo /D (page.814) >>
 >> endobj
-17405 0 obj <<
+17394 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [375.406 456.858 393.763 468.257]
 /Subtype /Link
 /A << /S /GoTo /D (page.663) >>
 >> endobj
-17406 0 obj <<
+17395 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [452.649 443.308 471.005 454.998]
 /Subtype /Link
 /A << /S /GoTo /D (page.185) >>
 >> endobj
-17407 0 obj <<
+17396 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [402.073 429.759 420.429 441.449]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-17408 0 obj <<
+17397 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.285 416.21 437.641 427.899]
 /Subtype /Link
 /A << /S /GoTo /D (page.109) >>
 >> endobj
-17409 0 obj <<
+17398 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [405.134 402.661 423.49 414.06]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-17410 0 obj <<
+17399 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [437.497 389.112 455.854 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.173) >>
 >> endobj
-17411 0 obj <<
+17400 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [460.528 389.112 478.884 400.801]
 /Subtype /Link
 /A << /S /GoTo /D (page.174) >>
 >> endobj
-17412 0 obj <<
+17401 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [416.922 375.562 435.278 387.131]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-17413 0 obj <<
+17402 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [418.443 362.013 436.799 373.581]
 /Subtype /Link
 /A << /S /GoTo /D (page.162) >>
 >> endobj
-17414 0 obj <<
+17403 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [440.261 362.013 458.617 373.581]
 /Subtype /Link
 /A << /S /GoTo /D (page.164) >>
 >> endobj
-17415 0 obj <<
+17404 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [465.113 362.013 483.47 373.581]
 /Subtype /Link
 /A << /S /GoTo /D (page.168) >>
 >> endobj
-17416 0 obj <<
+17405 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 362.013 508.322 373.581]
 /Subtype /Link
 /A << /S /GoTo /D (page.172) >>
 >> endobj
-17417 0 obj <<
+17406 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 348.464 405.674 359.608]
 /Subtype /Link
 /A << /S /GoTo /D (page.177) >>
 >> endobj
-17418 0 obj <<
+17407 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [410.348 348.464 428.704 359.608]
 /Subtype /Link
 /A << /S /GoTo /D (page.185) >>
 >> endobj
-17419 0 obj <<
+17408 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [407.043 334.915 425.399 346.314]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-17420 0 obj <<
+17409 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [430.073 334.915 448.429 346.314]
 /Subtype /Link
 /A << /S /GoTo /D (page.171) >>
 >> endobj
-17421 0 obj <<
+17410 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.103 334.915 471.46 346.314]
 /Subtype /Link
 /A << /S /GoTo /D (page.172) >>
 >> endobj
-17422 0 obj <<
+17411 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [454.103 321.366 472.46 333.055]
 /Subtype /Link
 /A << /S /GoTo /D (page.162) >>
 >> endobj
-17423 0 obj <<
+17412 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [455.285 307.816 473.641 319.385]
 /Subtype /Link
 /A << /S /GoTo /D (page.133) >>
 >> endobj
-17424 0 obj <<
+17413 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.467 294.267 437.823 305.835]
 /Subtype /Link
 /A << /S /GoTo /D (page.171) >>
 >> endobj
-17425 0 obj <<
+17414 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [419.073 280.718 437.429 292.286]
 /Subtype /Link
 /A << /S /GoTo /D (page.172) >>
 >> endobj
-17426 0 obj <<
+17415 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [425.679 267.169 444.035 278.737]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-17427 0 obj <<
+17416 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [415.8 253.62 434.157 265.019]
 /Subtype /Link
 /A << /S /GoTo /D (page.156) >>
 >> endobj
-17428 0 obj <<
+17417 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.831 253.62 457.187 265.019]
 /Subtype /Link
 /A << /S /GoTo /D (page.171) >>
 >> endobj
-17429 0 obj <<
+17418 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [461.861 253.62 480.217 265.019]
 /Subtype /Link
 /A << /S /GoTo /D (page.172) >>
 >> endobj
-17430 0 obj <<
+17419 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [394.194 240.07 412.551 251.76]
 /Subtype /Link
 /A << /S /GoTo /D (page.173) >>
 >> endobj
-17431 0 obj <<
+17420 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [499.346 226.521 517.702 238.211]
 /Subtype /Link
 /A << /S /GoTo /D (page.310) >>
 >> endobj
-17432 0 obj <<
+17421 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [417.316 212.972 435.672 224.661]
 /Subtype /Link
 /A << /S /GoTo /D (page.722) >>
 >> endobj
-17433 0 obj <<
+17422 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [442.679 199.423 455.581 211.112]
 /Subtype /Link
 /A << /S /GoTo /D (page.65) >>
 >> endobj
-17434 0 obj <<
+17423 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [403.528 185.874 416.429 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.53) >>
 >> endobj
-17435 0 obj <<
+17424 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [420.134 185.874 433.035 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.70) >>
 >> endobj
-17436 0 obj <<
+17425 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [436.74 185.874 449.641 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.77) >>
 >> endobj
-17437 0 obj <<
+17426 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [453.346 185.874 466.248 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.80) >>
 >> endobj
-17438 0 obj <<
+17427 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [469.952 185.874 488.308 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.108) >>
 >> endobj
-17439 0 obj <<
+17428 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [492.013 185.874 510.369 197.563]
 /Subtype /Link
 /A << /S /GoTo /D (page.138) >>
 >> endobj
-17440 0 obj <<
+17429 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 172.324 405.674 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.164) >>
 >> endobj
-17441 0 obj <<
+17430 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [412.98 172.324 431.336 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.167) >>
 >> endobj
-17442 0 obj <<
+17431 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [438.642 172.324 456.998 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.177) >>
 >> endobj
-17443 0 obj <<
+17432 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [464.304 172.324 482.66 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.665) >>
 >> endobj
-17444 0 obj <<
+17433 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [489.966 172.324 508.322 183.468]
 /Subtype /Link
 /A << /S /GoTo /D (page.698) >>
 >> endobj
-17445 0 obj <<
+17434 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [387.318 160.896 405.674 169.919]
 /Subtype /Link
 /A << /S /GoTo /D (page.699) >>
 >> endobj
-17446 0 obj <<
+17435 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [431.726 145.226 444.627 156.916]
 /Subtype /Link
 /A << /S /GoTo /D (page.70) >>
 >> endobj
-17447 0 obj <<
+17436 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [414.285 131.677 432.641 143.366]
 /Subtype /Link
 /A << /S /GoTo /D (page.192) >>
 >> endobj
-17448 0 obj <<
+17437 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [422.982 118.128 441.338 129.817]
 /Subtype /Link
 /A << /S /GoTo /D (page.319) >>
 >> endobj
-17454 0 obj <<
-/D [17452 0 R /XYZ 151.701 685.529 null]
+17443 0 obj <<
+/D [17441 0 R /XYZ 151.701 685.529 null]
 >> endobj
-17451 0 obj <<
+17440 0 obj <<
 /Font << /F50 3701 0 R /F22 3706 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
-17483 0 obj <<
+17472 0 obj <<
 /Length 603       
 /Filter /FlateDecode
 >>
@@ -107643,214 +111368,214 @@
 k_¹eµM²49aÈ4<–àÜ·yÉ¿ Çãi
 endstream
 endobj
-17482 0 obj <<
+17471 0 obj <<
 /Type /Page
-/Contents 17483 0 R
-/Resources 17481 0 R
+/Contents 17472 0 R
+/Resources 17470 0 R
 /MediaBox [0 0 612 792]
-/Parent 17187 0 R
-/Annots [ 17449 0 R 17450 0 R 17455 0 R 17456 0 R 17457 0 R 17458 0 R 17459 0 R 17460 0 R 17461 0 R 17462 0 R 17463 0 R 17464 0 R 17465 0 R 17466 0 R 17467 0 R 17468 0 R 17469 0 R 17470 0 R 17471 0 R 17472 0 R 17473 0 R 17474 0 R 17475 0 R 17476 0 R 17477 0 R 17478 0 R 17479 0 R 17480 0 R ]
+/Parent 17176 0 R
+/Annots [ 17438 0 R 17439 0 R 17444 0 R 17445 0 R 17446 0 R 17447 0 R 17448 0 R 17449 0 R 17450 0 R 17451 0 R 17452 0 R 17453 0 R 17454 0 R 17455 0 R 17456 0 R 17457 0 R 17458 0 R 17459 0 R 17460 0 R 17461 0 R 17462 0 R 17463 0 R 17464 0 R 17465 0 R 17466 0 R 17467 0 R 17468 0 R 17469 0 R ]
 >> endobj
-17449 0 obj <<
+17438 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [145.38 646.546 163.736 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.398) >>
 >> endobj
-17450 0 obj <<
+17439 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [168.411 646.546 186.767 658.236]
 /Subtype /Link
 /A << /S /GoTo /D (page.399) >>
 >> endobj
-17455 0 obj <<
+17444 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [130.835 632.997 149.191 644.397]
 /Subtype /Link
 /A << /S /GoTo /D (page.319) >>
 >> endobj
-17456 0 obj <<
+17445 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [163.077 619.448 181.433 630.847]
 /Subtype /Link
 /A << /S /GoTo /D (page.320) >>
 >> endobj
-17457 0 obj <<
+17446 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [172.35 605.899 190.706 617.588]
 /Subtype /Link
 /A << /S /GoTo /D (page.345) >>
 >> endobj
-17458 0 obj <<
+17447 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [171.198 592.35 189.555 604.039]
 /Subtype /Link
 /A << /S /GoTo /D (page.290) >>
 >> endobj
-17459 0 obj <<
+17448 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [149.077 578.8 167.433 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.323) >>
 >> endobj
-17460 0 obj <<
+17449 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [172.108 578.8 190.464 590.49]
 /Subtype /Link
 /A << /S /GoTo /D (page.407) >>
 >> endobj
-17461 0 obj <<
+17450 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [185.229 565.251 203.585 576.651]
 /Subtype /Link
 /A << /S /GoTo /D (page.115) >>
 >> endobj
-17462 0 obj <<
+17451 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [151.774 551.702 170.13 563.101]
 /Subtype /Link
 /A << /S /GoTo /D (page.795) >>
 >> endobj
-17463 0 obj <<
+17452 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [174.805 551.702 193.161 563.101]
 /Subtype /Link
 /A << /S /GoTo /D (page.796) >>
 >> endobj
-17464 0 obj <<
+17453 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [150.229 538.153 168.585 549.842]
 /Subtype /Link
 /A << /S /GoTo /D (page.556) >>
 >> endobj
-17465 0 obj <<
+17454 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [163.911 524.604 182.267 536.172]
 /Subtype /Link
 /A << /S /GoTo /D (page.457) >>
 >> endobj
-17466 0 obj <<
+17455 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [195.714 501.092 214.07 512.781]
 /Subtype /Link
 /A << /S /GoTo /D (page.457) >>
 >> endobj
-17467 0 obj <<
+17456 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [188.774 487.542 207.13 499.232]
 /Subtype /Link
 /A << /S /GoTo /D (page.799) >>
 >> endobj
-17468 0 obj <<
+17457 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [181.683 473.993 200.04 485.683]
 /Subtype /Link
 /A << /S /GoTo /D (page.559) >>
 >> endobj
-17469 0 obj <<
+17458 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [145.502 460.444 163.858 472.134]
 /Subtype /Link
 /A << /S /GoTo /D (page.560) >>
 >> endobj
-17470 0 obj <<
+17459 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [136.562 446.895 154.918 458.584]
 /Subtype /Link
 /A << /S /GoTo /D (page.732) >>
 >> endobj
-17471 0 obj <<
+17460 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [228.897 446.895 247.253 458.584]
 /Subtype /Link
 /A << /S /GoTo /D (page.774) >>
 >> endobj
-17472 0 obj <<
+17461 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [131.562 433.346 149.918 444.914]
 /Subtype /Link
 /A << /S /GoTo /D (page.152) >>
 >> endobj
-17473 0 obj <<
+17462 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [204.471 419.797 222.827 431.486]
 /Subtype /Link
 /A << /S /GoTo /D (page.528) >>
 >> endobj
-17474 0 obj <<
+17463 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [124.441 406.247 142.797 417.391]
 /Subtype /Link
 /A << /S /GoTo /D (page.528) >>
 >> endobj
-17475 0 obj <<
+17464 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [138.108 392.698 156.464 404.266]
 /Subtype /Link
 /A << /S /GoTo /D (page.457) >>
 >> endobj
-17476 0 obj <<
+17465 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [151.714 379.149 170.07 390.717]
 /Subtype /Link
 /A << /S /GoTo /D (page.639) >>
 >> endobj
-17477 0 obj <<
+17466 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [152.441 355.637 170.797 367.327]
 /Subtype /Link
 /A << /S /GoTo /D (page.201) >>
 >> endobj
-17478 0 obj <<
+17467 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [175.471 355.637 193.827 367.327]
 /Subtype /Link
 /A << /S /GoTo /D (page.202) >>
 >> endobj
-17479 0 obj <<
+17468 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [223.35 332.125 241.706 343.815]
 /Subtype /Link
 /A << /S /GoTo /D (page.606) >>
 >> endobj
-17480 0 obj <<
+17469 0 obj <<
 /Type /Annot
 /Border[0 0 0]/H/I/C[1 0 0]
 /Rect [206.138 318.576 224.494 330.266]
 /Subtype /Link
 /A << /S /GoTo /D (page.168) >>
 >> endobj
-17484 0 obj <<
-/D [17482 0 R /XYZ 100.892 685.529 null]
+17473 0 obj <<
+/D [17471 0 R /XYZ 100.892 685.529 null]
 >> endobj
-17481 0 obj <<
+17470 0 obj <<
 /Font << /F22 3706 0 R /F50 3701 0 R /F15 3700 0 R /F59 4373 0 R >>
 /ProcSet [ /PDF /Text ]
 >> endobj
@@ -107929,97 +111654,97 @@
 14 0 obj
 [3686 0 R /Fit]
 endobj
-17485 0 obj
+17474 0 obj
 [524.7 524.7 472.2 432.9 419.8 341.1]
 endobj
-17486 0 obj
+17475 0 obj
 [328.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 328.7 328.7 360.2 920.4 558.8 558.8 920.4 892.9 840.9 854.6 906.6 776.5 743.7 929.9 924.4 446.3 610.8 925.8 710.8 1121.6 924.4 888.9 808 888.9 886.7 657.4 823.1 908.6 892.9 1221.6 892.9 892.9 723.1 328.7 617.6 328.7 591.7 328.7 328.7 575.2 657.4 525.9 657.4 543 361.6 591.7 657.4 328.7 361.6 624.5 328.7 986.1 657.4 591.7 657.4 624.5 488.1 466.8 460.2 657.4]
 endobj
-17487 0 obj
+17476 0 obj
 [525]
 endobj
-17488 0 obj
+17477 0 obj
 [500]
 endobj
-17489 0 obj
+17478 0 obj
 [575]
 endobj
-17490 0 obj
+17479 0 obj
 [894.4 575 894.4]
 endobj
-17491 0 obj
+17480 0 obj
 [875.5 756.7 727.2 895.3 896.1 471.7 610.5 895 697.8 1072.8 896.1 855 787.2 855 859.4 650 796.1 880.8 865.5 1160 865.5 865.5 708.9 356.1 620.6 356.1 591.1 355.6 355.6 591.1 532.2 532.2 591.1 532.2 400 532.2 591.1 355.6 355.6 532.2 296.7 944.4 650 591.1 591.1 532.2 501.7 486.9 385 620.5 532.2 767.8 560.6 561.7 490.6]
 endobj
-17492 0 obj
+17481 0 obj
 [603.2 544.4]
 endobj
-17493 0 obj
+17482 0 obj
 [548.6 493.8]
 endobj
-17494 0 obj
+17483 0 obj
 [571 571 856.5 856.5 285.5 314 513.9 513.9 513.9 513.9 513.9 770.7 456.8 513.9 742.3 799.4 513.9 927.8 1042 799.4 285.5 285.5 513.9 856.5 513.9 856.5 799.4 285.5 399.7 399.7 513.9 799.4 285.5 342.6 285.5 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 285.5 285.5 285.5 799.4 485.3 485.3 799.4 770.7 727.9 742.3 785 699.4 670.8 806.5 770.7 371 528.1 799.2 642.3 942 770.7 799.4 699.4 799.4 756.5 571 742.3 770.7 770.7 1056.2 770.7 770.7 628.1 285.5 513.9 285.5 513.9 285.5 285.5 513.9 571 456.8 571 457.2 314 513.9 571 285.5 314 542.4 285.5 856.5 571 513.9 571 542.4 402 405.4 399.7 571 542.4 742.3 542.4 542.4 456.8]
 endobj
-17495 0 obj
+17484 0 obj
 [319.4 500 833.3 500 833.3 758.3 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 319.4 777.8 472.2 472.2 666.7 666.7 666.7 638.9 722.2 597.2 569.4 666.7 708.3 277.8 472.2 694.4 541.7 875 708.3 736.1 638.9 736.1 645.8 555.6 680.6 687.5 666.7 944.4 666.7 666.7 611.1 288.9 500 288.9 500 277.8 277.8 480.6 516.7 444.4 516.7 444.4 305.6 500 516.7 238.9 266.7 488.9 238.9 794.4 516.7 500 516.7 516.7 341.7 383.3 361.1 516.7 461.1 683.3 461.1 461.1]
 endobj
-17496 0 obj
+17485 0 obj
 [583.3 536.1 536.1 813.9 813.9 238.9 266.7 500 500 500 500 500 666.7 444.4 480.6 722.2 777.8 500 861.1 972.2 777.8 238.9 319.4 500 833.3 500 833.3 758.3 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 319.4 777.8 472.2 472.2 666.7 666.7 666.7 638.9 722.2 597.2 569.4 666.7 708.3 277.8 472.2 694.4 541.7 875 708.3 736.1 638.9 736.1 645.8 555.6 680.6 687.5 666.7 944.4 666.7 666.7 611.1 288.9 500 288.9 500 277.8 277.8 480.6 516.7 444.4 516.7 444.4 305.6 500 516.7 238.9 266.7 488.9 238.9 794.4 516.7 500 516.7 516.7 341.7 383.3 361.1 516.7 461.1 683.3 461.1 461.1 434.7 500 1000]
 endobj
-17497 0 obj
+17486 0 obj
 [319.4 319.4 844.4 844.4 844.4 523.6 844.4 813.9 770.8 786.1 829.2 741.7 712.5 851.4 813.9 405.5 566.7 843 683.3 988.9 813.9 844.4 741.7 844.4 800 611.1 786.1 813.9 813.9 1105.5 813.9 813.9 669.4 319.4 552.8 319.4 552.8 319.4 319.4 613.3 580 591.1 624.4 557.8 535.6 641.1 613.3 302.2 424.4 635.6 513.3 746.7 613.3 635.6 557.8 635.6 602.2 457.8 591.1 613.3 613.3 835.6 613.3 613.3]
 endobj
-17498 0 obj
+17487 0 obj
 [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]
 endobj
-17499 0 obj
+17488 0 obj
 [800 800 800 800]
 endobj
-17500 0 obj
+17489 0 obj
 [470.2 470.2 470.2 470.2 470.2 470.2 470.2 470.2 470.2 470.2 261.2 261.2 299.8 731.4 444.1 444.1 626.9 624.5 625.7 600.8 678 561 534.9 626.9 663.1 258.8 442.9 650.6 508.8 819.8 663.1 692.8 599.6 692.8 606.4 522.4 640.6 643.8 624.5 885.7 624.5 624.5 574.7 272.9 470.2 272.9 470.2 261.2 261.2 450.9 483.9 418 483.9 418 287.3 470.2 483.9 222.6 248.8 457.7 222.6 745.1 483.9 470.2 483.9 483.9 320.3 360.5 339.6 483.9 431.6 640.6 431.6]
 endobj
-17501 0 obj
+17490 0 obj
 [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]
 endobj
-17502 0 obj
+17491 0 obj
 [799.4 513.9 799.4]
 endobj
-17503 0 obj
+17492 0 obj
 [611.1 611.1 611.1 611.1 611.1 611.1 611.1 611.1 611.1 611.1]
 endobj
-17504 0 obj
+17493 0 obj
 [531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1 295.1 826.4 501.7 501.7 826.4 795.8 752.1 767.4 811.1 722.6 693.1 833.5 795.8 382.6 545.5 825.4 663.6 972.9 795.8 826.4 722.6 826.4 781.6 590.3 767.4 795.8 795.8 1091 795.8 795.8 649.3 295.1 531.3 295.1 531.3 295.1 295.1 531.3 590.3 472.2 590.3 472.2 324.7 531.3 590.3 295.1 324.7 560.8 295.1 885.4 590.3 531.3 590.3 560.8 414.1 419.1 413.2]
 endobj
-17505 0 obj
+17494 0 obj
 [613.3 562.2 587.8 881.7 894.4 306.7 332.2 511.1 511.1 511.1 511.1 511.1 831.3 460 536.7 715.6 715.6 511.1 882.8 985 766.7 255.6 306.7 514.4 817.8 769.1 817.8 766.7 306.7 408.9 408.9 511.1 766.7 306.7 357.8 306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6 525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9 743.3 743.3 613.3 306.7 514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 306.7 460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7 460 664.4 463.9 485.6 408.9]
 endobj
-17506 0 obj
+17495 0 obj
 [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]
 endobj
-17507 0 obj
+17496 0 obj
 [277.8 500 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8]
 endobj
-17508 0 obj
+17497 0 obj
 [777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500]
 endobj
-17509 0 obj
+17498 0 obj
 [619.8 569.5 569.5 864.6 864.6 253.5 283 531.3 531.3 531.3 531.3 531.3 708.3 472.2 510.4 767.4 826.4 531.3 914.9 1033 826.4 253.5 336.8 531.3 885.4 531.3 885.4 805.6 295.1 413.2 413.2 531.3 826.4 295.1 354.2 295.1 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1 336.8 826.4 501.7 501.7 708.3 708.3 708.3 678.8 767.4 637.2 607.6 708.3 750 295.1 501.7 737.9 578.1 927.1 750 784.7 678.8 784.7 687.5 590.3 725.7 729.2 708.3 1003.5 708.3 708.3 649.3 309 531.3 309 531.3 295.1 295.1 510.4 548.6 472.2 548.6 472.2 324.7 531.3 548.6 253.5 283 519.1 253.5 843.8 548.6 531.3 548.6 548.6 362.8 407.3 383.7 548.6 489.6 725.7 489.6 489.6 461.8]
 endobj
-17510 0 obj
+17499 0 obj
 [638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.5 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6 606.9 606.9 511.1 575]
 endobj
-17511 0 obj
+17500 0 obj
 [583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500 500]
 endobj
-17512 0 obj
+17501 0 obj
 [641.7 586.1 586.1 891.7 891.7 255.6 286.1 550 550 550 550 550 733.3 488.9 565.3 794.4 855.6 550 947.2 1069.5 855.6 255.6 366.7 558.3 916.7 550 1029.1 830.6 305.6 427.8 427.8 550 855.6 305.6 366.7 305.6 550 550 550 550 550 550 550 550 550 550 550 305.6 305.6 366.7 855.6 519.4 519.4 733.3 733.3 733.3 702.8 794.4 641.7 611.1 733.3 794.4 330.6 519.4 763.9 580.6 977.8 794.4 794.4 702.8 794.4 702.8 611.1 733.3 763.9 733.3 1038.9 733.3 733.3 672.2 343.1 558.3 343.1 550 305.6 305.6 525 561.1 488.9 561.1 511.1 336.1 550 561.1 255.6 286.1 530.6 255.6 866.7 561.1 550 561.1 561.1 372.2 421.7 404.2 561.1 500 744.4 500 500 476.4 550 1100]
 endobj
-17513 0 obj
+17502 0 obj
 [380.8 380.8 489.6 761.6 272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2 380.8 544 516.8 707.2 516.8 516.8]
 endobj
-17514 0 obj
+17503 0 obj
 [625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.3 531.3 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.8 312.5 937.5 625 562.5 625 593.8 459.5 443.8 437.5 625 593.8 812.5 593.8]
 endobj
-17515 0 obj <<
+17504 0 obj <<
 /Length1 757
 /Length2 1014
 /Length3 0
@@ -108038,7 +111763,7 @@
 ›¹_Sw•×§ælö9^Jávâ—¦LÉÂM*И`bH«ýM26óÂëÈ„ÐÚ®EtÄÿvr at A&°ÌÀûG¿ñ<ÑŽ2‹gӐŒGñ5.ß¿ÉSXÔ|¬è9¹8æ÷YE©þð°Wt3Ú•çL^àõúà¹uº)!š(£ÆG´è†‰ð®4kw׬7í/ÞßÞ>k[sª–Û&/ý·ñ°
 endstream
 endobj
-17516 0 obj <<
+17505 0 obj <<
 /Type /FontDescriptor
 /FontName /EGUQXT+CMBSY10
 /Flags 4
@@ -108050,9 +111775,9 @@
 /StemV 85
 /XHeight 444
 /CharSet (/backslash)
-/FontFile 17515 0 R
+/FontFile 17504 0 R
 >> endobj
-17517 0 obj <<
+17506 0 obj <<
 /Length1 2156
 /Length2 15774
 /Length3 0
@@ -108204,7 +111929,7 @@
  Œ“~ÛhûXòp|/N2÷ Ô…ӁՓoÚÂŽõý¥ÿ$G±”ûv„ò¾Ú•A pähxPmœÎúMh4ÔèšÚÒ¬°ª­/N—´›Ñ[%ÆÌÚDÁXh74JÏpöÈ… õÞßãFÒSWÎþÿ– iÿcè\q[L«V'_Õô¹‘ôeÂ× °Ó©(¤²ªÀ`r÷"?	Býçp+ÀcXKÎ8¸âZI.u@#‰ÆáÌÚ•Þ—‹UËz ûéVÌï×ã, (,ðƒ*\³Ã'Vry,Œ/)Ø¡1%÷ŒòŸÎivgXQêFÆŸø«×‘­8z$‡{ÉÛ›ìTò1ë!³P—ø
 endstream
 endobj
-17518 0 obj <<
+17507 0 obj <<
 /Type /FontDescriptor
 /FontName /IXAXLA+CMBX10
 /Flags 4
@@ -108216,9 +111941,9 @@
 /StemV 114
 /XHeight 444
 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/ampersand/asterisk/at/b/bracketleft/bracketright/c/colon/comma/d/dollar/e/eight/endash/equal/f/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedblleft/quotedblright/quoteleft/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
-/FontFile 17517 0 R
+/FontFile 17506 0 R
 >> endobj
-17519 0 obj <<
+17508 0 obj <<
 /Length1 1432
 /Length2 8224
 /Length3 0
@@ -108301,7 +112026,7 @@
 ù 0#	ÛC]®¡vˆ<ÿÞ@_O.j6õÿD~„
 endstream
 endobj
-17520 0 obj <<
+17509 0 obj <<
 /Type /FontDescriptor
 /FontName /ZAENBR+CMBX12
 /Flags 4
@@ -108313,9 +112038,9 @@
 /StemV 109
 /XHeight 444
 /CharSet (/A/B/C/G/H/I/M/O/P/R/S/T/U/V/W/a/b/c/d/e/f/ffi/fi/five/four/g/h/i/l/m/n/nine/o/one/p/period/r/s/seven/six/t/three/two/u/v/x/zero)
-/FontFile 17519 0 R
+/FontFile 17508 0 R
 >> endobj
-17521 0 obj <<
+17510 0 obj <<
 /Length1 989
 /Length2 3473
 /Length3 0
@@ -108356,7 +112081,7 @@
 âºÁâh%œ¶á|ò!¤…Ôù~ŒæêhÇõÈðFEÝ—=-Í›7’it’räfl^›b·²£ðÇÛíôO5èàC³Ü«xdÏÑ8¬ù[󝪲ÜzEŽ+9óÌœïÁ¬˜y­âäI2KyF‚nZôÍS¸¾UᇌPöÃk'Æç„jÇÚYÿ|ýÝ
 endstream
 endobj
-17522 0 obj <<
+17511 0 obj <<
 /Type /FontDescriptor
 /FontName /KDJMFH+CMBX9
 /Flags 4
@@ -108368,9 +112093,9 @@
 /StemV 117
 /XHeight 444
 /CharSet (/A/C/a/b/c/d/e/h/l/m/n/o/p/period/r/s/t/u)
-/FontFile 17521 0 R
+/FontFile 17510 0 R
 >> endobj
-17523 0 obj <<
+17512 0 obj <<
 /Length1 1190
 /Length2 7060
 /Length3 0
@@ -108443,7 +112168,7 @@
 Eq ”¶¾îDå'¦î~5¹ÃÕɾËó›Ò‡¢KI-Òà*ChK‰{0C6*ól×,I;NªŒÔÁMé+d·Žç°ùAõ£Àÿ ¡,
 endstream
 endobj
-17524 0 obj <<
+17513 0 obj <<
 /Type /FontDescriptor
 /FontName /EYXZUN+CMBXTI10
 /Flags 4
@@ -108455,9 +112180,9 @@
 /StemV 107
 /XHeight 444
 /CharSet (/D/G/I/S/T/U/a/b/c/d/e/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z)
-/FontFile 17523 0 R
+/FontFile 17512 0 R
 >> endobj
-17525 0 obj <<
+17514 0 obj <<
 /Length1 1282
 /Length2 7143
 /Length3 0
@@ -108523,7 +112248,7 @@
 ®õ/µáÏ!ü‡‹G„ôXJaü@"ÎÐÕP)¤þŽMñ(ä].Ãhë"®¼BýÔIŒîéÅæÍzÈ^ýý]Àþ+Q‰&—ÿòÌ^n
 endstream
 endobj
-17526 0 obj <<
+17515 0 obj <<
 /Type /FontDescriptor
 /FontName /IAZZYX+CMCSC10
 /Flags 4
@@ -108535,9 +112260,9 @@
 /StemV 72
 /XHeight 431
 /CharSet (/A/C/D/E/F/I/J/K/N/O/P/R/S/T/W/a/b/c/colon/d/e/f/g/h/i/k/l/m/n/o/p/q/r/s/t/u/w/y)
-/FontFile 17525 0 R
+/FontFile 17514 0 R
 >> endobj
-17527 0 obj <<
+17516 0 obj <<
 /Length1 1925
 /Length2 12856
 /Length3 0
@@ -108667,7 +112392,7 @@
 7†¢CpÁ’a£RqiOhÒÍ$vPý5-&%ÁªRÞbŸ¼]8sðlß7ÅÍœ·ñ®ø A at Qï °ªÎb‰Ç=F–à›‘Ÿ5%çþ⹁ç×íÒ²fÜ@¥ïösž`g´«yq¼‰Y\ñæa“×îíà"À^nÚl¶ÕûÞGžKy{úŽZ‚­nžb™é݆]]dS!WMŽ¸1W(þÒ¤-N{ðôeƒ§as}ÚB»ÿ©öTsÁÿúR$á
 endstream
 endobj
-17528 0 obj <<
+17517 0 obj <<
 /Type /FontDescriptor
 /FontName /HQYOII+CMITT10
 /Flags 4
@@ -108679,9 +112404,9 @@
 /StemV 69
 /XHeight 431
 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/a/asterisk/at/b/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/exclam/f/five/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/q/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
-/FontFile 17527 0 R
+/FontFile 17516 0 R
 >> endobj
-17529 0 obj <<
+17518 0 obj <<
 /Length1 798
 /Length2 1258
 /Length3 0
@@ -108713,7 +112438,7 @@
 ¾ëèȱZ¼í¿A.8;ßLÃ:]ë¾iéÙz¤œÜžY¦´9x¨a±ÞåeE-Qü“tÓ'´.<©ÌÖ#«þ>i`L
 endstream
 endobj
-17530 0 obj <<
+17519 0 obj <<
 /Type /FontDescriptor
 /FontName /EOEKOR+CMMI10
 /Flags 4
@@ -108725,9 +112450,9 @@
 /StemV 72
 /XHeight 431
 /CharSet (/arrowhookright/greater/less)
-/FontFile 17529 0 R
+/FontFile 17518 0 R
 >> endobj
-17531 0 obj <<
+17520 0 obj <<
 /Length1 768
 /Length2 1151
 /Length3 0
@@ -108748,7 +112473,7 @@
 ¨þ½ùÍö%þH‡ƒðë‹o‡cz¾{dt´õôx5ÐÊ̍£V²ˆè½¼’¦ŸJ-Ÿ´Ky9ܲZW÷xŸÌ^Ì55˜f…5WWÇz%ût+ÑÒš¬®½\¾þT¥ÄcO«yTå¤D“Þ;î|pøf¶fgóí¨{°cÔdÒIÓ–ÔÊ8–/7³zG?Vån>uäÍ0ç@r÷íH{¯‰uâ3š‚øŒjƒ¼ܝÂWÝ-’îËçð¦:{[C»«êŽ¼g~±~—µUu¿ÉT1ƒ£gÈSÒcÆ´Ç-ù®Ý©–Ü°a¨vy~ß÷cfNfÑt]/æÜIKº9øÚKúsɺö!Ö3êÕ ý²Ì€w†x¥1Ÿ5š›>ðl¼Ödi®Ì «´ Z:
 endstream
 endobj
-17532 0 obj <<
+17521 0 obj <<
 /Type /FontDescriptor
 /FontName /YJCLWH+CMMI9
 /Flags 4
@@ -108760,9 +112485,9 @@
 /StemV 74
 /XHeight 431
 /CharSet (/greater/less)
-/FontFile 17531 0 R
+/FontFile 17520 0 R
 >> endobj
-17533 0 obj <<
+17522 0 obj <<
 /Length1 772
 /Length2 1135
 /Length3 0
@@ -108789,7 +112514,7 @@
 ÿä7N¬dšœæ˜x‡d!‹Ó™Sã†ï²<¸¹7bq{R/N–uU'JW<w<ð¬;žÿçÉÂeôpeiè±LßèŸ4Š1VöL“Tž5;pȨ¯7–wÏ·Ó"ŸñÃþ¦<sÙórÝ|bIè¶G­a‡aòs§©ËHù #ŠvÒþ2{(±HÓDûh÷³?Ë›n;idM)³¡´ßÖèñIÏFÙ$ÕgζKo½Š™x]º[óãÎÎUüäÝÅ?6Ôi]¶·˜ûrÉ«ÔÝa•MÕvéLÍ‹³cÕQ±õi'´>®&SCá÷ÄþᯰWÔ©rPªŸÉ›µÏŽ†b3£ïs—'=Î¥­ôS7òm¦™©ÿºŒ"ô
 endstream
 endobj
-17534 0 obj <<
+17523 0 obj <<
 /Type /FontDescriptor
 /FontName /PGRSID+CMMIB10
 /Flags 4
@@ -108801,9 +112526,9 @@
 /StemV 113
 /XHeight 444
 /CharSet (/greater/less)
-/FontFile 17533 0 R
+/FontFile 17522 0 R
 >> endobj
-17535 0 obj <<
+17524 0 obj <<
 /Length1 2326
 /Length2 17718
 /Length3 0
@@ -108939,7 +112664,7 @@
 Ç\©4ÈœžQ+-?}q™rÒMí¬idÂÊý)næûŸ‘ÏR=Á Q÷ù72fM_˜qŒjGäÃ|Z¯ëQûUYÚÇÊ9fCÅŽ,,¹
 endstream
 endobj
-17536 0 obj <<
+17525 0 obj <<
 /Type /FontDescriptor
 /FontName /EPCWMJ+CMR10
 /Flags 4
@@ -108951,69 +112676,72 @@
 /StemV 69
 /XHeight 431
 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/ampersand/asterisk/at/b/bracketleft/bracketright/c/cedilla/circumflex/colon/comma/d/dollar/e/eight/emdash/endash/equal/exclam/f/ff/ffi/ffl/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedblleft/quotedblright/quoteleft/quoteright/r/s/semicolon/seven/six/slash/t/three/tilde/two/u/v/w/x/y/z/zero)
-/FontFile 17535 0 R
+/FontFile 17524 0 R
 >> endobj
-17537 0 obj <<
-/Length1 1207
-/Length2 5668
+17526 0 obj <<
+/Length1 1190
+/Length2 5623
 /Length3 0
-/Length 6410      
+/Length 6353      
 /Filter /FlateDecode
 >>
 stream
-xÚ­”u\Tk×÷¥éî¤fhDBºCB¤$`f`È¡¤D@º¤»T¤$$¥ABiéFðsÎs}îçß÷³ÿÙß×ú­k­½9Ùt	ÈÛ"­¡ÊH„» X,TÐÒC€`A!NNÔʆD(Z¹C¥€`II0PÞÂŤ„%¤„D	8
-H4
-fïàäQàý+H(‡¢`6V –•»Ž9ÃÆÊøiƒº£òÎÎ@ý¿2Ü€úP7(Êj+H ma6î@k¨=A úKÂ	ÿÇlëáò—'å†äÁˆäb$Ú"Îh -ÔŽ ¤ÄÔ‚b”üÿõ߇+{8;k[Áÿ:þ¯Kú?n+8Ìý?H¸‹‡;ÔBÚBQˆÿ5†þ£Mjó€ÿ·WÍÝÊf#°w†…þ1ÁÜ”aÞP[]˜»ÐÎÊÙ
-ú·Š°ýo˜{û[H_OCOÇäÞ?óüÛ§kC¸ ]þ=õ¯à¿ü›1·ƒ‚yM……„À˜@ÌóŸ7óÿª¥„°AÚ˜…Z¡PVhÌf`Hè¶Po Ô#$ˆ@ºcR€˜;ñÚ!QSLRøËô7‰ƒ •ß‚T“¤þ/I`|ú¿	ã3øMb@Ñ¿„™:Èê_ÁDÚ áðß°dûb4@ÿELS æô; s„Ã(
-Áþ@L‚ã(9ÿ’@ü7‚1¥ ¦4ò·TL,ýÍéÙå·“ëb…‚"œ¡v¿Õ‰€ÿÇŠú_¢E0ª\0«ü£Q0¦ÔˆéÃíÄdüÎÅs÷BþáÆܪÇo„`Ê¢WÃ4íEýþWóáC¤·¯€°P "
-JJH ÅE…üÿWœ
-Óƒûß_=f¿ÿÃv0Ì× …zCm¦'‘6÷C“ëÂJ”òFJñø°ÚˆÓ~Ûöå#aÈ×WXÎ…}®|µ/ËÒ(IÖðÖX½~2ºE5ûé
-*ï=sK™¸Yó|º–æÓÀøø0MýÝåîYÈ6iSÝøñŽ(–ÎØBI¢I~Wæ~÷ö]EƒuÀÛ­vSÏwíé¡b⏕Ӝ
-ß×r	³é“¥¸–Dˆ„Ï{‘%Æã·8†ß©¿7{€lö ¸Ì»““pcv¼9&gJ“1!fŽš˜r˜„;;X½ˆV½'›ÞÐøó²"$;"\Ç—‚‘`%¦TÏ?Ñ·Ìà÷.3 at 0xnüyŽ¦D°v­(ÓmŽ^Û¤˜;Ó”~&Èh4x¯½ÓøøVÙ´ð{¿¼œQ'½)57|øÉý9»¦ó¤÷á‹I
-`K+¢é;/SÔ(ìóKBgµ^ó©xf/È3*3R©£:—uòÛýˆß~7€ÏW
-ˆ^¶Vy#üäd¦Dwçu‘„¦ð/ÔVƒi¤'ÂÆR©³Í¡"`Ã^ò%γj¿-Þ_øþ&¿R­F_—¨®|õ³Ä¿.€³…›Ê§¼ô¡yóØE·£‡Q[Á°IüÐp²V|(éÐÀþŒôMésoËã8‡ÄŒôáy¥ñÄYzC×°Åóã†$ÿô¤Áa·‰I˳'—MvnrtßlMPÀÞìQ74—§zöˆ÷»m^Úèð—“d€ÝÜùúʈ®€á=
-×U*‘×Ìs¢ÅšŸÙ]‹"±ȤD\t¯wÎâdíÇ(™‰üTÔã…!2"Ö,`Æð"±°­j¬„Ès-êüΡ‰‚µäÕÄ­'Í=ÀãožÂéອ¦joGü&q!«\B–†ð¤ú§;Í°D¥­b»ŽXœþ:2³}ô\|§ù¬öUíbBŸ.ÉY4S¢ÜlÎ>}°¨z,T­¦LB|Oq Û@'˜’å¥ÛÅXüàÈó¹ªlØè±»w„¬¬£F gLAiäƁ
-vÚ¼z<þB”±]¢ØÄ&=~`°ï$é^ýDDŸ‡…që™Ó£­ã—„Ò=ô­LHnš&Í•‘¿=¥*¿êÔņ<é­
-„=6™QŽ¡Èz6Þ¨ö¡v˜tTÄɃ(pÀ•±8¥gæè©Ö•3ٗ¨ê«¥“/¦U[DX´’É+“¢!”ÓAêÕçI91#‰*2…ýyñª»íK8?*Y_b¥¥ÌS5gÿ ”¹@EÜjŸÖB—¬«F–?J¾1Jy$jÒâW.ë:W%ÞP^në
-™¥
-óø7&K²	@ÎÇ4^(Éӏ×>|ú(óî`É
-u–ÈýP’“Ö”Š§…œ€îfyÞ²X$Ym¶³Àÿþf§1Ù5lrf¯½ã€XdË=‰Å²öEÇv:mi¨§ð %wq¢o´}bø…dø“îÅ.‚içÛçP!½ÅùaÃÏ=÷}º®Ì°¼?Ämf‹r8]}%“)í¶M%§TÜn5Œ_—ÆÛzoÃm#(¥µu¤Äxß<è3# ÷uµã¦‰bÇðö ’¾þåKÞÆn/ú‘(%›;ƒ
-1YX¨h{ñkµ–#O»z£wj×=Ù{„Éß¾Ö©YŽd.µrj÷Te7­ßš_>V¶`¨¤M°†LÐ2.]öÅ0¼¯öÛVbD›¶‘½ÞÁ	òsHbR–;-åŸëˆ}€W‚S>H¤ð¬kºÛïN5L‚z¸pÀׁoÙˆ4Þ±¤Ò>­zý>™AÛ[äɁ³$g—f¢q/ÅÒ‹ä‰6Uttw`ý…ÍV\2ÎþýïinÚ]ô¹ûh%ǤóQGÀ[õ™„ø!€DmEãðx0kg{fà«œvþ[_£¸‡~åLé€`¨Ó5AÏÔwOÕÂÖÊzt„ÖT@ÁZZ±,æ§ÜÌ5Q'ìIK¤Â•Ïš|“VêúX {i×{)@ÛUÏÚdÖ$šÄTÕ|}Ìì$ètlÞÈdG,ßUÃ{¿î®J1¡F>8;kýÚ‘œê™?$úi±Œ=á]ÝÒªò÷©ÓÝÓx±à
-µ¢•ñѬµw>iäÖ•.î9Qø”xÔ¹¿ôÂVh¶Â‡Âê3ü>+3õÁ=‹eü¶qÅÛ‹¤[ø]ÁCù	OÎ’ŸÉÊsŒØâÐÚójˆ
-F\ÌÏ:ß~$Õ´Th+µXÔ’·|lVœzƒ ³{| Ûì dÈzVŸZäl~—ž{¦fJ˜¬[³ñLÎx„U¥`«ÆçêÔ¬¾âyƒ^2Çóð|êJ®„³ÄÚ @W‚Ýú]ì˪µôS¼MÁ»ÍفlÖlKØm©«y,o¨ÝH¹Õ•Ëp¡Åbƒ3«yoX;ùt™(t“Yá•ÝOê.DïûÈ`}Nz—
-¾„3
-#ù9¢°ïøˆƒ(i]fUmÏÞÀݝÀÖæ ¹û²£×É ë¼ûÆaBwÚôÑÉ´ |¥Û?ûß,G°áÔÅ'é<Q$¼
-/øåa?gŒír“Öb–'ìv÷áùÂÑq>_·÷°3êáb­i.®?+²Øì»dOHÈž9¾[øG…ׄ#ÒÑc·¼frOJ-¼’÷oÅ
-¼È†Iƒ>xmU'Kcs]íøf~}.)45·ü©·
-1—Mú©{En;R_áTÎÀ¶Ýçš™»ŸÑNyݱ¯B‘ZñäÚªNŒ¯9vXêüÇ××™–}¸Xåósí¶5ØÃ]ü ·Ï_²xÀ?¤¶ÿlì‘<>˜ZTYæ-þþ]œ„e8É®‡n³9뺮†ª=˜NÝ6B»Ëz@êóÕÝ£Ó‚쁗¡ûòàòŠi-÷ƒä—ƲͩՐ"ï2d%³Uš\ò~Íw÷GÙRœ%I!7}GªZX»G­Cû8tà^–¤óùWùŠÏKÄïå‘™-Ê•~¹µ~$¥B¨žo|Š„	ÅÛ`¦¥"—¨|8›ŸÉB%7¨“‹j±D1ÎgÜÓ3J’Öwñ%º#{Ï»;[βŸ„RûöÏ'y¼@7­ó`OĐðêMp‡`jÚרK·'§ϐ"Qš£OׁÚFÅì·ä¾AH­Mæ.<*챉Jœé9_@ç@åmòÞ®šÍï»ÙûÛègr¹Õ_gÏ©»Ô`ɏGvÅ2lí]÷”sŒê§–Ny2Æ{ľñ ž»½Å×6üqÜxmÍýîv""Ӑì*Û#ƒÂš&Ó©„GÕ0j%ø™¼®{Y6q[´-Gî^–¦]­]g9lP{›ßèÃ+®í¼œÇàÓ¯~Å‘ŸÅ%qû!ô_Vp”õ\d«ÞäñFv<k"Ñ”;þæ=Bˆž‚ˆåLàÞÕºö	@öT0OÔD
-£p"¬K™µê…]2lëtJ×BÕp”;u¿
-*
-ª‹Ù¾¯Ëé"fÚ“<8‡¼üá¸`ÇUØèŠ(³¼c¸EgÊ
-9­°tÉç s!¶Ž8#ĵ4ùø•‚—zm¨gqæ”gäÇ7Ôî:Ý‚Ñm½aóóûkÉÊi.'Z‡.cME’; pÿ_Úzù¹…Wì÷–Œ&N<Š°dºŠÆÇ}×,v.ª¿^;k¢ë™_|ö}Ëu­ÂþK¸"¦âîª D?øU§HŒÕ;q2uB8”`õáÚ‰Eøy¥‰½0ªdwˆúDî‘@yôR‰~ŠÇ†‡ùPYm¿MÀ,YGÃÀ\ü=Åžˆ\XRx@ÙbU¥â¢NJ7f”&L§=ôxÛ7s<:*õËíº=t;òŽ±Ç%hšævl}å³Æƒ
-’6QºžÂˆDüTÎ 9‰·ŒÇIpÙ˦1n‰ŽpXÑÆ6{iÖ´ĐɆ7v³/~¡žãª0+,÷=çÓ:<¬K!廄پtdX]”iÁÙø]ÚmÆ[?òÖå„
-!2B’óÊ¼(H[mÊçsnÄšL¼0o1k‹°óäAIÙ]o-¥9žô®›¢…ä0ó¶çûٵ1=JX/h8˜>7lµ#ÂC]!!35¹ï±É< ¸ „u+©Z?¼×)Çwê Ð÷”hxz,d_×¾áâ°.ëýÔãM›îô­Ø&5µÂh¸£o¥f¯ë3B,|Á¦FˆÞÌ÷æ¹ð5ØøuÃé
-üÖÖ=\	ëÍåµz1ÿ•»yAÁ|]c…SÈrx¿ƒa²ëf<›šHyÛ“સq xÇòÊ@«øZfŸÜ+Æ6#9<Û|E=¨)uÚuvwýFg/êÑí½d[mzÒ¯ºåèz—Æ8¥¤›We©ô¶!ò’œâva¸xº^M2#f>û“)¥îº
-j3eŽn¯[œqÒ¶ïPÃòB'ÉCÙŒœ‰§­~-kÅGÓ¾·(x¨‡fŸøT¾
-·1›[ˆôHSÁh3ê	éjÄE“(•ÄjË´®°Êï鍬`°šå×%ò&X‹úÚ	<ÝI|œúïô¡Fokp~Ýy;Í_27º6Y[;
-¡ðÌ:«uß·5ÕUf
-›Ž
-Þîàt ¶Ýzè[~#óRËÀ¡Á{~ÚŒßEØí“î«]ºæû:Äé”s¿‹nüûªO›äh¢BT[òéºÊÂt7¾Wá>ók0SÝ¢®j)OÜ캿¯#´ š–Qd¨Æž‰H£seLµ†þumó3Ï}cb,8^‰ü:NÝhÓ^£xÅÇ×B‡){Emb¯_q됁à ӳŸpïÂ?ϯRéÌu~ß™§Òz2#QµŠ
-#–V{ž«zy[¾^XáÅ'º‚{=ÔüYÑt·Ó.ï;rËŽ¤ŠXïMûùÍk­U˜©8AøËìBIi'—Spê³ /8¿×æè=5–S‚tqáhÓ‡s¡{܆9 Â!9t…*UÞVéçnj‡¯¢³×«£õA¡¾	ôÓDV˜'syÞ0ï#AÜÁ€6+^¿¤`ÙAßm–_/»ûyN£Xüûø¤Ž
-¤%*iúQJ†~*¯7ÔW[²
-™÷Õý/øL6™Nêéë4};ñð«ðæ¿‹Vzæ­#Qµ´ÍŽšÖw,‹U˜¥¦ºo¬ílÝì·½è¦jÙÍQr&£½R(ÕŠ“îƒô½ò&óçÔwíã—’î¼½Rÿ~9ÅUçî-Ë°2äÆ#绳•D–$™Fg4pnF•+HZYmÚ>Y•´â¦_Í8E?ifQÿK+ë	ž¶EaˆÂ}¯·95B0A_¢“°ˆr¦RØ(ÿëìò¾«@jÜŽ6ÚÖe]Æ|ÂM·›Œãè¥&öpì×Xã΍7ÝE«DKÕ㣙zÕã¡Xu}áyïêÍ^wå©&«6}+Ù'R‚rø9Y¯±ç¹‘w”D6)°Õ°P—¿«=ÑëË:^M@°™JwÛ¶Ãó÷j[5I‹ÞzE¬IG¥È„”³åªEáxÜ›½écuÏ"ÃYlå/w3j-e±/o¿TIèÒ/lPŠòöºToñ#NÕpPßbU­z’p§¡A855FpË#+f‰³q™UÆ=°I?(ßo¹”¼Dä@Çè0sp¨ßWÆEZn±"¹h«(ºN!®dÁü12ª9|†ç/Dö–‹dÂ÷›éíý+’fåÓý	UVG*œ§«z·éOU¾:WšþeÛÆôüҝ‚Ô:8^Ý€—Ü<˜²4U󤁪–áañ zHhlQÜ÷Êð\ÇýæX°'Ön%‹²ç§_O~UüYK½ÆÇñCð‘5¯Ka[¹ìËþ¸-~8EbùÁϞܶ˜¿h•êS¡ªäqƒrßZ®®Æe•Ž"5
- at t…à¤_OUPói¡dDaÊçO¾Ýú­ï˜b­¢Þd¹¼ù )Ù#Q–·Ñ#D=5ݍ`ûT +3Lж2q‡ýAÿçvÕ½¨¾àŠ#îÂ]ý XâtÕÕE‡ŸO®±ãÂC¶]6pIÐÇRßkf«Š¯5\·ˆ”]˜îÌÑÉCà5¿ªoß•{üSäc˜¯)~4W/5©BÕîêŒ)Væ1².tCvÐh¹¹ÂÉÒr°.p[ÙT杪+ûÉÙ–ÅsßÏZr*às½
-ûÛ{‹ëWL#v›ÌÑHÇÇ„{îÀžúÃÎ$šÈŠ£ýüT±Ã²C&1÷$x~‚Q4þàˆH?ýÙ•…zÔ'–éu
-#uÉóµðZ©#~?‚?:_ÆŽK2'ø$ð,Cå­i)åÜR7õ	€›Û’ü9þOü¤þYYSIÎÈR®ä·<Y>ïEï)Ÿ'‰çá¿6¨õÞîõÐebÅilýH:ýõYÃUrËD¹"ÔY¼1ÔÀÚüü‰Î’Ŭ\t41?™¾aÎ5}½»‘ÝJk°AÙùíó¸gŒZà>*VÅÕÅQî•6ß	ˆ@›(ÙcÊ))c”Ç	3€™¾éd¯·øâÈLéý…'þŽƒœ8V9µ§";Î:ÿ1Y|‡7E8³VH2³Kò	}Ùë/b58V*¶Õ°–¦0ð‡¹…Ñ1³þyµL[V¬…í#­÷w|â꺝"~I7êiD•æ&¨¢o½.Ì2‚²Ô.n÷3œ;ÆÙo¿o©ÕZ~6GºÂ¼ÚÓÁöæÀã”/QcjÙÐWÑ/÷°ŸÕ©»ÔÚtnÃT«=ßJ_sö©ì£ÉCóäЗ+t>k“ÅÜá' BFN6‰"OìŸabN»O­üUŠe¼7‚Ž‚ÌfÆzê4hHIì[Ê™E­¸(ì78ƒæ"<CÒ^,|Óum8pn²4QvÊnn¥ÿN«šý
-{KèÖʳ[ñúð[#…c‹+̵­Ú¦îosýì¯ÖÅÄ<àÍ´$gÁ£ß¢¾Ñg™rÚ²+í÷Ñé	¦©ßË3}§½­o¦pù8‘໐ï.3»2
-¼ðey¸&Z ÂÄ×Àõ …'Õ­ ѼܚPR¸jö1’èSqÒŽ`@<QÝf]u¥«|Òt”5dµŒÿÓv0÷ìlÆþ·&eÆ7mâW”Ñãµnî,û²gìÁÖ’/yPŸ¾4¶¾€TÏ„ŸäHÖ-Æ„z?Ƕ‚ûÕΘ¯!šà‡0f³spyÖõ¿5³ ¢7åͧ÷ò©^#݈}œ¯“C©A£ mÒê4-–x@
-ºÀ>ŽÉùÞPÜT2t+‰bzŸ¹²wÆ<õg(r²æ=Aç¥Èu´9ɲz"wëÝÍF|À»L{Ó>VNwDô]'j"óÏ$=j­d´}Kt·‚($ð:,	¹¾”íÊæË"ó‘4Q%‘FütúæŠ$9õ1ÎY­KÌYh	µ>)”?,0²¡p'8ßaJ:É—*Ê“]ôåWE at jïuÈ
-~âûݐ®I7UdÇ„Û¯û[­òBJ,ߦ{»«à4þ×Â6¤«f_~®¢Áâ>Ì
-<gÏÔQ?®ƒ)]ÙHÇö¨¿ÊUD6Ç·’ÞhU—šíé|":ü$–ïü?¥éxš
+xÚ­—u\ú×ÇéîF‰¤#$DšÑÝ5Ø€0ZºS:&Ò¡€’R"ˆ4RR
+H‡„ ¨ðìÞûû]}îóïóÚ?{Ÿïçœó9ßïÙãæÐ3T€ºÛÃTÝ‘Þ‚@! 4 at IÛ (
+ 
+‰ps+¡`o¸;Râ
+“ ïÝ|œ ¢"  „´˜”´ˆ8	7@ÉÝ# wröð*ñý)’( `(¸	Іx;Ø7€¡»æ Ppsü™á0€yÁP¾0¨	€Â¼ö0'8’DøOC`¤£;@òï0ÔÇã¿G¾0”Æ€c’€±uGº  0GawL/ÆÉÿ‡©WõqsӁ þ,ÿç%ýŸcîð;ÂÃdžh»Ca(ä¿¥¦°¿½iàpÄ¿OÁÞ7¸ƒÒÉ
+ù;÷R…ûàzpog€#ÄÍöW†„þÛæÞþ² ¬®¬n¬¬r÷ï÷üëLGzxüSõOñ_üŘÛAÁý–"B""@Œóùï7ëõRA:¸CáHÌBˆK  ($€³p$æ€ùc!ݽ1) ̝ÝQ$>§„$@XéÏÐ_$	«ý"QÌ ¿ÖøE˜<íH
+£4øE¥Ñ/’ ›üC˜†üC ŒÒÁøŠˆ „¡¿!ÆìÄŒ(ü÷«ý`J8ÿ†â aøoˆIpù
+¥ Ân¿á=€0â1­‘¿!¦µûoˆ™Ñã—sŒÖ‚‚!Ý`Ž¿Ü€€ÿ‰¢þ—IÆ…fñÝˆñú
+1¾½~CLƯ|qL3o¿ß¼ˆbúü*™ê!õ÷ùÿÝDEEwÿ@A1@PT¸'%	þ_:Æ´÷_?rÌ:ÿ—á˜å‡Áüa$‹sî2Q.9ÏcªCTÊ&kðù±^¤ê4÷Ît“F.¤a»=Ñôä_}fvU›KK±…¿Åî÷ã¶WBWþ˜êq¸g*zözË×n+÷aûm³Ó\í€Oœ—‘û”ÏߝˆcëN¯¾­Î4/,øüz¿DWÙh›p™«ÏÒ·¥//JBÒL5×Í86ú‡Ú³:»âG•™Ž·2âKÔvw鼡檌¨8ãÚê|wú%Cþ¬„5r|vÞyáæILR¿bO*KÎkïøqUŸ/,?)öœ'|'—Ÿ‘PiãJŸùx+¨¥ D(bù]ôÛb-?Q¡g[•^ËÌ:æ}€Ò÷y—B§&+ÈVƒ³pìÚE±Ö ²â)W^ýy°®1â‹Ì²cç×ìÖصl%`°-„l‘(
+¦qçZù rùÌoå1¾U"u~Cþcú„WõÆ~8¦ï·Œó×&}´W+³˜}_­7›U)¥%vƒÚ+»eï‹t°UyÕë\²ãt/7¼)¨]›ï†8Øüæ1d*«Z}c!Á–žUàˆµT@§<d(1óк­£dÜ)yj<÷Lr<ûÔÈé’²¤2Úßö<Õ934àôkƒéìe^ûà„Í¡5Ú´=;8/{lÂkvÎöÒâªÓÑëSÇ:Ô.šò
+àñÕÈÀ™ôoÙ§àcLŠM™£"<*]yÊÜ72q¬é¹IGÊb]w®ÒzÃåYs‹JúÈCï瓃ËTy§iZV² 5TÃd~Ü–
+\´#¶R"f¯	;#þ«6=šøší¡Èa¦Ð3ê&òž/]C€óuß±<àó½Î&%
+âNÉ`H))[{lv›]ÈA<Se¯Êq ÷0X÷þÒ3ÿE9»SãD„È¥+j6­1t‚—Ãeÿ›F3‘&°*ù]±€¸½v&!t¡ŸÞàí*¹3ßhuù˜©soÿ8yyÍPßG5ñ;'8¹+éÄ«	º¼¦Ž½È*s‡¼ôѱ‘/y,wÛfãF|´iL{.]
+ÑÚç5ÇX¢¥¹Zß!dÁN´êêóßvÈ(±ê‘N8T&ÏqAÛEøS:§:1òâƱ6ÜÉ%²£åéÌá4|ÝOaºöÉí9Ä2‡ÚG ìêØûåžÉv«ÄŸ¨ò]¾Ù&W¥py×òŽ¿ßdþ|ÑhŸL-'žhmy2œ*cEÔ]CŸ<2•S³ܬëû'§=‚ŒÕ[áe«Ã,ZÊ^¶0
+=àK»Eû£vj(_‹~B	›	‚ã#”ÄaEðø‘eù€ œ‘pý­ñSåMßI×—‘í<ÎÁt•NBS†^ éϘٸr@—³V51#ëö&*§–F?å±¥ŠŽ}O.5oTò89×ùÚUî‰É
+.#û3^¿ëv-V&Bœ¥º¼IvOE˜½O¯;{}’†lP‰“/›¾ÇƒÇ"¶â}¥ï8ÒL…ÞgZÌåð…Ñ>üù	 õÁ_ÉÞ÷¤	º²È‰ãíhk& uå%ý£Ü’½
+k£#ôîÉ°ú´³xT“›¾¶}GbÏñMÿ0\•ôyu[Èk~Àøgk”œCügš†2<^l¿{ÂtÆ…º ºd‡§Kú§ä1£bo÷óªæV^ȆgòNÂ*¡D´/õ¸Da3üÃI@
+ý¯,Áü¦‰xVº[cÚ‘ÑTþ,C¯”‹Éêcª*ÊqÒ÷ò,ùÎZ8h•Pý¶hMŽŸàG§LG:Oné †ßÒ½%a¶³µ¸÷ž†SŽªÙ¡·…µhM…E¢4v_ZTiìzŸ&„tŸ×½»cÑ%È~@s»[@›ˆ#Ykg5àZãg¸t‘ºçrûÁÍi¾åh%6õKäÜ<‘šˆ82P¿ÑŠ£ã¢Eî'Ÿìk³dŽ¦ êŒhГþ{&o¶LÛèµ(øŒ@´wß‹dÈŠº8ÿûX“1¸Qf=aOT>â©U¯CBèUâMÔû:hC$WºJ·€;’0Ä‚bŸ½usÏ'ð|m_ØÂî´D®¹s+;F˜÷'b‘£(¢?ê%Žùy'®`ñW¹n¿ð¼ÿá¹yáC±yó´e£L¦©›b“'õÛnßîl-ï%ð¥_"”­PÕß?³û'…R±B)ÐäÓ¤ÄÔŲ+ƒzòô`Mð&›LÕ‰©×Ä£é8%Rn§ï·€XÉõ½ó®'4E}Å¥¯·´T;ätaâ[‹oÌ¢
+˜ÞSÙª‘®NÍÅÔ+f×ßÏçµ'Ê“/h–.ށЛ]—¾'¨mÄSÎ:YämòÓ$Çù¸,åüA7…»¤-¢!½I_,vž³ÌÿLÙ¼¥Å¿Pé£z3y ¯öøcþ+—k`tè 
+§\•0c>ëLú@2i/Žµ:”j–k¹ûôð½T#qE5Ç;gò̳
+q\ZÇší÷Œ
+9qE}ÈP‘: _//’/â!EAÚz«K®<˾×qƾéiEídY'@ ?ã:F¸ö¼ÌT£¾Ç9|1^ÜŽüòP¿Í-Š?߉ÌD°ÉPñ™œêu'ó•[‰vÜŠ	ø‚úbÑy+Wþ“>L0„uäâÔœÍ!$‹9>E=9D¼±ÊóCëXˆŸÓ:“œÂí"¤°¿½Ùµß¼Ð¤ÙHº–  ^"ý&J"*H€òñl”xëÐÖÞ“z#É­¦2J]„ˆ¬EPº@¸#P·§”5ظDŽI
+œäŸ¸¤û†ÒÉýìòÛÞ^h¯/ \-,)Lcöêµ¢Päe‚H¶ï¦
+Ðʐe$̘nQð‹¬^*qBC¥
+©V£ïkåçÚíxyy†è‹£*¦;>êµs5ųG“³òÀ,Mø½ nº€þPƒ´ÇÞ­,úƒ´Q{×Q>EM*û[ø
+Ný2l²àég,~
+Ró–ûô¦m*kŒ~–yG¢em³-|»õ•rc«‡i+Gמ€:ðh9ÕKö©üèmG†¡Œ%kð£–:hÐP‘ÙÍú[UÌ.÷¶8Hžßù4~ÖË°£Z¬Â{D¯ö$¥üø¢GÅLen^ëË¥~j0ôsaÄ9„ßÂ3ý5èY~î Â¬kÃP¦üGÆÖÚš³¤\ªê.²[Y˜€0ìd—öH¸ìÀì»?ÖyËHŽó&Ë%rµÒ_ò+ス5^o¬Wú'¸”S<°|_æÂÁⱍ%îw)°`& ²cô©Uä°0`ˆ.2õ ü…jcùÀ´ µ=Y62Ìà‰7ÐRìõ±¶‹Îa¥\~s§ÞQ¾(:I¸›ña»µt€¶Œ†GˆJï{†r‹PïéIÐa·^†ñ«÷Û,uþ Søš&òd~–7o¡5Øfšr&RÚú1î2”†ïÒhÔŽ¹W½òST°”iÕ¦rÏНf:Óî]´VÚ17–ù~æ™Ã›ø0
+‹Ïà…úXïƒ=2Ž “+70ýDe‰Þusé
+r_<ÓKÿØúh๮&6U͵ðÑÔ+à=ai	)‘–uÍaL²bÎèñ‚+s‚é÷„féi,l·µ³PC|k˜½LÕ’ª€à\gÇóÁùÇ·ºÌxþMG®‡§åHiæ„–vÙêÝ–›_,ž'Ú=˜ŽÈ–)kgŽSÛÌ‘0ħØà‰(T
+~Õò‡jIBƒæÔé}+Þ0Í Ÿ©£F«zm¾ƒ[åŸp²oèÚæW…RµÅ_ "¦ ^™RA)š"µS¬ÐÜkÆO‰/$ÜX†Æ¸qÏ‹å:8Í6tɾâkBä_µTû⛉”öñ°»ª2re¹EÊÅÇáN’g¯?A¥å•ÔïÚΰ—AÊo|A¹Õl3"~²÷¾¾¸=GCû
+æÉíbíQŸPšü>+_Ããæ¼SqòYä×oÙÜàX9ßM9gc´á»É
+óq#¶¯û,94;øÝ¢$¼b"j
+|n/Xqdø.`~„·vâI(S‡PbIjEð1‚ç¡£Ún9Ïüò͐>{ÙùÂ'ÓÃñMÃ{ðMÏ\^ýóÑŸM{]Ê;}
+R,pš«/2î¨ê¿½Ò	+áI±ámkN%µ.¸àoáQ~Nry§ÍÌÁÿT-1ز5£ïF6¶ôFl³=]{”ÒtQ}>ü³¨È`*Q	ïhÑE06ü Ë¥MQÏ›ŽF«ú\易ðGŽ³É¸|=Þô»›‡—™¼ÚŸ¯Ï*K­<iûºí¸&.éBªÎÎ8zá^Šuý7¤z®êi¸!Þ9Rzá‚Dä‰5A²+Ú«œ'7T+fÅ>³ud銱èÁE¹ò!Ê
+	(ð1™¿’ÚÞ„Å6Ѩ“2Ö·‘8é¹ü65~•m38¥©âC^QýÒ+ºÊ
+ÿ Ñ2Ÿ3Äò(ͬû]{UdêðÄnßØ7a Sàki§²”°ñ¡Úý®
+¤ÔÅ­â•Ç_+åçj}Õ²eO;Ÿó«j_¼¾!ó 5ø¹~Ÿºï^ÎÄàâ—Ž™·‚8z9b¼lì,Â.2ñä¸Íô,\Ö‘èúý±“ "Míúٍw½€,üGä	“ÆÛKFfc»a™ž¨‹†ÑGµ.DÛÜÜfƒ09úqWy¦"9t;î©°ÞF´Ð{µƒÅÒª»]$Þ¤Vrª±
+X&{6øúkˆÎ¤«‘eV®ã \Áî±ø¼”FÇkWEieúšö:¡·Ì¨xR*ÌÒ&K³|¦)Õ:Îw—òéÀ+†4VõÂÍ…ˆªlÄ€RÛ¤L>h<\°]™n7{ùàt‡‚¤Ns}Îþ@‹fÀûÁð”q•Üëø+?üÑDƒ =Ç€E!“}á–òÝ8ÆIj^äÌc?3P~7B*<rŒ¯L2òX7(%–—7%ŽÄCš×†äêú×þ(wëÁ"*ýÁº%¦éSÑ•Ãvgyv¾@ù)#ã`]Oœ~Ãѱ^T­U‹LædÈ\¦o¨ ãõ¶Uº3×!I#¨Õ°7éòÈæøc••€¶ÃÂ{óow%‹ËÒæ‘}9¬¹f;l“X š3ÒkgzI¹ÜJ®s/‰•Î<±pMÆ£ZTîçøuâ=Ä;Vò«¬¦»4ûZ/˃ T·¡[0–ù†ujTJ,Ú‹%Ö§-z½NÆh*NY¡ú:†.É^¨TÛ¶’ÿÑeŒWOcâCÊnÏiàOô;ÅòüA£ÖŠÇ®ú'ÁFËK\ÈÏ}‚Õصý	Âû´l G¶é²Ïô.N3kfQ/î²s9m~ÕJ©­ÈpxŠúÔÉÄ7RfÁg9½4À\UM©JìæÇimeO{v^æ%áœ'spý,h>ÝK\MðòŒgB¤¯„žmpüCÊ u–‡ûg	!˜ÝK‚ѪíNÑFkȝv“Ì«DÓ#G ¾ÐÊ5Ë™ÉÝwo,©·Q6Œ·r­Ô\—*Üá¤Ó,ƒA‰Îa: ^5b^šOý›önf¤cDœ!dW£ÎÀc£¨W	çRl•¯	t|ŸÜÖ€±5¦[M¼Âï¥ÁèÎpƒá¾s
+ LÂd<eìƒwɤs¡ÙÉÑ›öÅ-¾Pw>°þ—Á×ÑJüïqç=£¿ªY%1ˆ%‰Nõ_K¤×¼@꤄^ËαTœ~Â9²ì/Â¥¥q‚Vs³ôë¤Þ™ùÜqÊ“]øÅøÇÉÛÇ«ZÀHõ
+}µû‹š-›Ðl¥w0j_Ü^yWI“´t_MUcšc*ø¹du§A2Y@[bChW,ƒ½‚Š»í§¢Ì1Ÿ˜	äÓ”þˆe«§lØ|!·W%`ϻſ—Gk¼ùXŸxƒ(êî}²à|  /û¿÷nïðžÎG½wÓ"%*Z…/ÒCT¶^Z®FBRNðh»ÝUâ3òÎÜEªÁ]Âp^uMˆG7ön¬Q3W	§Y›X*h>K[¶ùöàIy,p©¾®Þ¬q.¢`DÓ#™îQѸõm*aÓÏ‹¹=þ¼¥¶„âá%
+æ:y6
+ˆÆ_Ø%CŽd~7õà›: *­0©T)ÌÍ­²5Äɯ‘.P¯ªxêÇ€ö©t"ΈËƯ"1*ãßc•xºÛ²óøšq‘|ïJ^7XÝ
+M¿ÒÊ…F]/³ZK÷xèBÎ?`ÏóFÅûHË=Uýü#3Jí¦ͧmG”Ä:ã\XÅ®ÚlÙT¦ò
+Ùf3û>äŽçòY ûi«Ù]¥
+
+ÙµeÙ¹’'c%¬¸¶[²]¬Íc	’
+Ú–õšr&gcÚQUÝL)Ì$ìøŽclgí8{!›÷¡4]5§¥ŒJQ‹Î¸0&†tÎã¥öÚg»GßG•´2µ­“»=ah˜ðáégvɦ޻®¯æ_O¸²sØÛOþ”¡‚ž™˜3¤Ú4–l;H¬N³Óâ²ESFQÍZŒ'‡¢ŒYî–›…¨Ú+OÖeFyOÞP‰[l>Ñ€ý‘×mè{«]Hi$kyÅ)•fäØqörÙœ,ÉBYgêÍÞQ¦¼VØ­ª*ïél†óÈÍQ’,li§ûEƒ´úúŒ~Íô^ÿî'¡úÒÔ¼3ïlÄl"ë¹
+ê£ñz¬7m]¹ð±Ä|WÉ”x£Ô&I³T~hJˆ["ÕùûW{ÑնѤ>­ϧûõßJó\¬7Øâó+Òi[ðýÄîÂ*[Ïs°| NòrxZ4Æ’hI"­ßÇëÝÔ¾¿ÚÇœc†7 ô:š1](|cfM(;u~ìîÄå‚g²£¤~`—Õ7¶§ØºÜÜNÒwâº}jX?â(Ì÷ð¾7ÜÏ2°u¿ð §)9D{lTGgwfÙȶþ­d±¸yC®NvÝÿÐ>ÚIª¬~w6:ô©¶+F¤©üQä:æs”3Ù+o{ýr®ùÒunØÛ¼æyHóÛGâ«f鉥&xbK…èè~¡>#ëgßpéU¿1:éHʈqÅڝ1jtwÑ-0Q5<gt¡T£Ó‘°w)Zq¼´j¤Øâ²qV)Ї3PE š/ô;Æ!ÜªåT/ïuJ‰4Ö<—(Z2GgÞŽÛ݉\s/²´^@Š¹2±ÿ)9Ê0ÁwU¸¥„“Ї ¤‹0¥‚ܺfËån•ÇžPx÷©f8¶ì*ö;¡È uÿË5Ð*«š»–f7¼¾Ìé4ÛcX_ô.;£R.#Å
+ÎÖ^(“NË´*ݨ$¯7žG
+ý×ý+—]÷  ¿5Ü]3>
+*ºo„Žäv'/g(Ÿ(-ñ®PÚd[ݳ.$Ue\q÷“Ù,;÷3X¦ôß»¹Ê¯º­Ù/|¢Uýù†“ù±Rt—»àÄÿ ¦ÚIN
 endstream
 endobj
-17538 0 obj <<
+17527 0 obj <<
 /Type /FontDescriptor
-/FontName /RQKQOY+CMR12
+/FontName /HDHUDE+CMR12
 /Flags 4
 /FontBBox [-34 -251 988 750]
 /Ascent 694
@@ -109022,10 +112750,10 @@
 /ItalicAngle 0
 /StemV 65
 /XHeight 431
-/CharSet (/C/G/H/J/R/T/V/a/comma/d/e/eight/h/i/j/l/m/n/o/one/p/parenleft/parenright/period/r/s/t/two/u/y/zero)
-/FontFile 17537 0 R
+/CharSet (/C/G/H/J/M/R/T/V/a/comma/d/e/eight/h/i/j/l/m/n/o/p/parenleft/parenright/period/r/s/t/two/y/zero)
+/FontFile 17526 0 R
 >> endobj
-17539 0 obj <<
+17528 0 obj <<
 /Length1 889
 /Length2 2612
 /Length3 0
@@ -109071,7 +112799,7 @@
 47iRO^ÜIV;ÈæuìpyÜ[%Š·‚4;ýԦ߶Ý*“|saJeêÅnUOeÐööVjJæes:µwí_¾ÁKâ
 endstream
 endobj
-17540 0 obj <<
+17529 0 obj <<
 /Type /FontDescriptor
 /FontName /FKGUSP+CMR6
 /Flags 4
@@ -109083,9 +112811,9 @@
 /StemV 83
 /XHeight 431
 /CharSet (/eight/five/four/nine/one/seven/six/three/two/zero)
-/FontFile 17539 0 R
+/FontFile 17528 0 R
 >> endobj
-17541 0 obj <<
+17530 0 obj <<
 /Length1 947
 /Length2 3215
 /Length3 0
@@ -109121,7 +112849,7 @@
 ‚ÑûHr®¹ÃéܳÌãÜN9~]ÁõkŽÆµQðÕW(ž—ú½ï®©÷NÌ&bjßûuøÇ•ºÍŇ«/„œ¥½¦vg,”|ûh Æ~ÀÆȍ"M5pîqÖ 3“á/íp–'‰*oŽ§\ӐUÒz™j4*á+W)©Í/òçëµäÈoYç«|oL—O¹'&DUK,,Ðô®äçê¹v—G¢ãCÅ÷®ãTsôiÉ!‘Z…(˜;&_¥X2B‹úv®½î`VÍœææKi)Ò«(Rgp÷¾Û»=øj b~›åõÿ³dù
 endstream
 endobj
-17542 0 obj <<
+17531 0 obj <<
 /Type /FontDescriptor
 /FontName /DMYVZC+CMR8
 /Flags 4
@@ -109133,9 +112861,9 @@
 /StemV 76
 /XHeight 431
 /CharSet (/M/T/eight/five/four/h/nine/one/seven/six/t/three/two/zero)
-/FontFile 17541 0 R
+/FontFile 17530 0 R
 >> endobj
-17543 0 obj <<
+17532 0 obj <<
 /Length1 1790
 /Length2 11561
 /Length3 0
@@ -109238,7 +112966,7 @@
 Í*ñ·	a[…át+r ÑøÞûÍï]ÿ?TTK“º…SõO1¨ËÜ38Êœ1ÑB‘×ö’ßN•NÇóQáká¡G>™°‹oø“[ÅÉùĹ¥=ƒ}žçaâԁ|­d†Ób’…‚©ós"viÙjüò#½¼]öœ3üt†wÔI¥œYŸÍ¿=zyB+F5ÈØk±	7pP˜‹ÎJN[ic—ñÌGÙh_„^<„ÀÏFØç·µ1ew§üUëóu,á ]ßÁ` æBT¤õOÒÞRÞÜIäáׄÉéɤE8—$MËApŽ/‘~AÞXèð&B³jW5œ÷b¬5©ƒÍî*²Ò!¥Å˜ÂÉÒCíÉ«>w¶«xkþØZ¥<ÙÌ5™ÛökÁðŸj.ÝF¬cîöòMaŇ1ÓÏ4KiQI`þV¸·8û™äCÝèò¬¹Üÿ(|
 endstream
 endobj
-17544 0 obj <<
+17533 0 obj <<
 /Type /FontDescriptor
 /FontName /ONEKDV+CMR9
 /Flags 4
@@ -109250,9 +112978,9 @@
 /StemV 74
 /XHeight 431
 /CharSet (/A/B/C/D/E/F/I/J/K/L/M/N/O/S/T/U/V/W/X/Y/a/ampersand/b/c/colon/comma/d/e/eight/equal/f/fi/five/four/g/h/hyphen/i/k/l/m/n/nine/o/one/p/period/question/quotedblleft/quotedblright/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
-/FontFile 17543 0 R
+/FontFile 17532 0 R
 >> endobj
-17545 0 obj <<
+17534 0 obj <<
 /Length1 748
 /Length2 1163
 /Length3 0
@@ -109276,7 +113004,7 @@
 ñTÅCbжчյWÔÙ°éT7[ДVÛÛŠ/rLEË_Æ‹G͇ði‚ê¢ BXÛX’µfç “ìº{ì–‰—ÁO!œ`ÊÄâ(ŽºÍÜ}*õÉòöYù‡sõYk?€Þ1Ý‘kA#O-w´[ÐvwGúÇð+³/}9F¶Zgy|”kµå&ª.#év›Kµ„GW\Ý“ïŸþºgd:ŸäM§ÝÂ!³Qf÷Ïú¤Yö\þ`¢Ð¿¯ä½Ô‚¹êƒnᬂד•קíúeMóÑ¡–N?}¶ŸS×ÛqÃFz³¸„.q0üxì¾[ Hj­ÿœ–ˆyÄp÷î6¸½þRÑÃ÷è5•ú“g*6ì4˜i;¥ÞrM¯uŸðÈééœéÛVÛ¶þ¼Vá2Wû`2ØúÝ	3EýŽ`ØZÜ+¸ÊηÔ2¸³Ê ¯ÁaAGò¿ÓÈ9OO°óä-¾ÉyO˜ßG^þ¤Í…“’ÖL˜T{ŸºQªºdÛZ=ê¼[ÕÛ•tþ·ÃþwUÃ=‘
 endstream
 endobj
-17546 0 obj <<
+17535 0 obj <<
 /Type /FontDescriptor
 /FontName /EMDQZB+CMSL10
 /Flags 4
@@ -109288,9 +113016,9 @@
 /StemV 79
 /XHeight 431
 /CharSet (/dollar)
-/FontFile 17545 0 R
+/FontFile 17534 0 R
 >> endobj
-17547 0 obj <<
+17536 0 obj <<
 /Length1 752
 /Length2 1145
 /Length3 0
@@ -109316,7 +113044,7 @@
 2úȨ²=È1soôZ)²®P%k¶ƒ4ÛÝ~ 0.x
 endstream
 endobj
-17548 0 obj <<
+17537 0 obj <<
 /Type /FontDescriptor
 /FontName /IUVPNN+CMSLTT10
 /Flags 4
@@ -109328,9 +113056,9 @@
 /StemV 69
 /XHeight 431
 /CharSet (/dollar)
-/FontFile 17547 0 R
+/FontFile 17536 0 R
 >> endobj
-17549 0 obj <<
+17538 0 obj <<
 /Length1 2026
 /Length2 9614
 /Length3 0
@@ -109431,7 +113159,7 @@
 •EÊó¦ Dsfñ¾¢ú$Z|v!¤ÕÜ¢v}ÿµW¡)o,à+¨ÿÙ”NÁ
 endstream
 endobj
-17550 0 obj <<
+17539 0 obj <<
 /Type /FontDescriptor
 /FontName /RMNNEV+CMSS10
 /Flags 4
@@ -109443,9 +113171,9 @@
 /StemV 78
 /XHeight 444
 /CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/a/b/c/colon/comma/d/e/eight/emdash/equal/exclam/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedblleft/quotedblright/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
-/FontFile 17549 0 R
+/FontFile 17538 0 R
 >> endobj
-17551 0 obj <<
+17540 0 obj <<
 /Length1 1071
 /Length2 3524
 /Length3 0
@@ -109483,7 +113211,7 @@
 ½ë‚µ¢ÙuqMÊŸ{Ä.WNxùññ­H{ß[ìÕK¬gŒeðÉñÄ›ä‡x÷f§öG8ì…Ñ6L<Ke>ëíúñP;ÿå{Z6¹¡à¸ÚfjꋾÓ#@…ðü^%MÔ1š@wNÝš2r’›–ß;—ž¡²Ýìs¶¢<æÃÁZœþÆרüÁh\G¬Í¤÷#ÈR6±Èl’—ið)ëŒ“Hn3§,¿ì3¸¿jÃY·Oß¾ï(±+º®ïøòeë„	oNìÕ[±äß¼ò­,åKËå`º[³ïÕjŽÝ7sœã5¹þ¡ÎŠc¼!$“Œ”ÀÉl­vÑ'¢o‚ªþé² É
 endstream
 endobj
-17552 0 obj <<
+17541 0 obj <<
 /Type /FontDescriptor
 /FontName /TFKSKK+CMSS17
 /Flags 4
@@ -109495,9 +113223,9 @@
 /StemV 76
 /XHeight 430
 /CharSet (/A/C/a/d/e/eight/five/four/h/i/n/nine/one/p/r/seven/six/t/three/two/x/zero)
-/FontFile 17551 0 R
+/FontFile 17540 0 R
 >> endobj
-17553 0 obj <<
+17542 0 obj <<
 /Length1 1873
 /Length2 8790
 /Length3 0
@@ -109562,7 +113290,7 @@
 n­1ý—ÞÕpÕ"ýœÄï±…Å/û,Kšº÷}†©Õ°ø5Ë`’PŪ¬-ÒS /Õj5â6sñ©Æ­UäsÑ'†/…ÉÿåtIË
 endstream
 endobj
-17554 0 obj <<
+17543 0 obj <<
 /Type /FontDescriptor
 /FontName /CLAVVQ+CMSS8
 /Flags 4
@@ -109574,9 +113302,9 @@
 /StemV 87
 /XHeight 444
 /CharSet (/A/B/C/D/E/F/G/H/I/J/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/a/asterisk/b/bracketleft/bracketright/c/colon/comma/d/e/eight/f/ff/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/question/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
-/FontFile 17553 0 R
+/FontFile 17542 0 R
 >> endobj
-17555 0 obj <<
+17544 0 obj <<
 /Length1 2092
 /Length2 13017
 /Length3 0
@@ -109694,7 +113422,7 @@
 úNK‹gÁA2äTFØhÿ|‘g(¿ïÿ@Ìà
 endstream
 endobj
-17556 0 obj <<
+17545 0 obj <<
 /Type /FontDescriptor
 /FontName /SHFLWS+CMSSBX10
 /Flags 4
@@ -109706,9 +113434,9 @@
 /StemV 136
 /XHeight 458
 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/asterisk/b/bracketleft/bracketright/c/colon/comma/d/dollar/e/eight/emdash/equal/f/ff/ffi/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedblleft/quotedblright/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
-/FontFile 17555 0 R
+/FontFile 17544 0 R
 >> endobj
-17557 0 obj <<
+17546 0 obj <<
 /Length1 1572
 /Length2 6729
 /Length3 0
@@ -109766,7 +113494,7 @@
 EûÿZ– ‹þÒrÅ’Aúÿ .)ú£
 endstream
 endobj
-17558 0 obj <<
+17547 0 obj <<
 /Type /FontDescriptor
 /FontName /NZIWIM+CMSSI10
 /Flags 4
@@ -109778,9 +113506,9 @@
 /StemV 80
 /XHeight 444
 /CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/V/W/a/b/bracketleft/bracketright/c/comma/d/dollar/e/exclam/f/g/h/hyphen/i/l/m/n/o/p/parenleft/parenright/period/q/r/s/slash/t/u/v/w/x/y)
-/FontFile 17557 0 R
+/FontFile 17546 0 R
 >> endobj
-17559 0 obj <<
+17548 0 obj <<
 /Length1 948
 /Length2 1780
 /Length3 0
@@ -109806,7 +113534,7 @@
 Ó^Ò+suŒ»½“;; ÖŒ©DËNë㾇Ô]¬}•Qg¼]¦jx¶`‰—’LsÖQ³ÂeÄR\øµ:jn÷„{ç£Þ6üÑñÖ_†ul€3Š`Iãeõ¡íÓ¦U<õd¯“aY=Ô;Sáö»Mc³‰6î.?G“1š6j¯<IWÊ鮍W0ï?ÝŸ=©øÖ§Râ«ù&.]|èbQwc¿ïjda;e_'_ocꯐ’ø)‰ió´0bEï`vàyßâ-?п¾×ÜÐôìnÏ$ÛH^ðìGú%•ÿG!™ù
 endstream
 endobj
-17560 0 obj <<
+17549 0 obj <<
 /Type /FontDescriptor
 /FontName /DISJDX+CMSY10
 /Flags 4
@@ -109818,9 +113546,9 @@
 /StemV 85
 /XHeight 431
 /CharSet (/arrowleft/arrowright/asteriskmath/backslash/bar/braceleft/braceright/bullet/circlecopyrt/minus)
-/FontFile 17559 0 R
+/FontFile 17548 0 R
 >> endobj
-17561 0 obj <<
+17550 0 obj <<
 /Length1 2085
 /Length2 18018
 /Length3 0
@@ -109954,7 +113682,7 @@
 óv1'Æ¥G}÷„¾·Qrî Ýý\3~W¨ƒÎkü©ó¶­%&X[~‹IêH'’3¸^9Zk<Ãì_úÍtÞ<¼´ŸºêíÉã=°˜¨=ÁGPùÂ+þK»퍷»+ vá¦(‹Êú5[<€`3òXë¸zi²4Ì^m¼`UèUaÊÃéšû{‚z"ocö6zÇÑH…ƒk›¦#AºI^Y¡Ór/˜=j¤´'`nÖ	ðǦ:êE	–j:0’žá¨'WívN¨X[†þ	t„ÿ»:ò‡äDT8«Äü›ßsÐ,Е?Slq†•Þ;vHéÏkõ¼ÀËϱwÏõÈ÷@SQCôa­‘ržc´ˆ9|räᐎYŒð'Ô12¿ï¢=÷ÿ½M·Ù³¥QX)Ññ·ed°îç!{XS^<•,\
 endstream
 endobj
-17562 0 obj <<
+17551 0 obj <<
 /Type /FontDescriptor
 /FontName /RKVALY+CMTI10
 /Flags 4
@@ -109966,9 +113694,9 @@
 /StemV 68
 /XHeight 431
 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/b/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/exclam/f/ff/ffi/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/q/question/quotedblleft/quotedblright/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
-/FontFile 17561 0 R
+/FontFile 17550 0 R
 >> endobj
-17563 0 obj <<
+17552 0 obj <<
 /Length1 755
 /Length2 1293
 /Length3 0
@@ -109991,7 +113719,7 @@
 ƒZ#[äuŒðÄZ’Í1åQƒ1ãBÉôÐöÝíäÂÀ‰óc2̇ûÚ´7îboÍÙìQŽ¡ÍjŸÓ'ƒY—ôЯ3T¶zÖôÜ;[ÑeúýÐL¹eUƒé_öŠ|¨
 endstream
 endobj
-17564 0 obj <<
+17553 0 obj <<
 /Type /FontDescriptor
 /FontName /ICKEOV+CMTI7
 /Flags 4
@@ -110003,9 +113731,9 @@
 /StemV 76
 /XHeight 431
 /CharSet (/a/b)
-/FontFile 17563 0 R
+/FontFile 17552 0 R
 >> endobj
-17565 0 obj <<
+17554 0 obj <<
 /Length1 755
 /Length2 1287
 /Length3 0
@@ -110031,7 +113759,7 @@
  ³lÃ"r›ëM×RTÉÒןå˜à’\{ÓŽúµjm= ÚÞçD¦‰eý;®õe+ÑEPYÓP½H¤ÓF÷ÔŠ$­m6\Oñ»ò¢èA(>{ô¿è«z»
 endstream
 endobj
-17566 0 obj <<
+17555 0 obj <<
 /Type /FontDescriptor
 /FontName /TEUAKW+CMTI8
 /Flags 4
@@ -110043,9 +113771,9 @@
 /StemV 73
 /XHeight 431
 /CharSet (/a/b)
-/FontFile 17565 0 R
+/FontFile 17554 0 R
 >> endobj
-17567 0 obj <<
+17556 0 obj <<
 /Length1 772
 /Length2 1365
 /Length3 0
@@ -110068,7 +113796,7 @@
 ¾Õ•:ôà"¨ÑÞfIéA]ˆ|;öˉN)hCv—‹’_Û±Ü8‡M/{p1÷äfGˆ’ZWwqµÓHÕœ?»x*õYÛ¼áde1I6Ò,½cr$þ•˜».[`« kßð|ëFÑѱk^Èk#ù©WÞ§8_‰˜]KEIOPíàê&óœTv€¥oªi©{NÏû%½­kVa°³Ìo°Ûø‚Sæõ>>ë7V_•é¡íÕ™û†{ô±ô&¶¯MªóÉBÔò@ý“×Uz¹.j‡5d“Çãn­ÿUu¬œ9Z½1ΖXœ0î$ü™sH}8a£6CuŽÍáÅ{ÿPN¡¶
 endstream
 endobj
-17568 0 obj <<
+17557 0 obj <<
 /Type /FontDescriptor
 /FontName /DLGOAM+CMTI9
 /Flags 4
@@ -110080,9 +113808,9 @@
 /StemV 70
 /XHeight 431
 /CharSet (/o/r/t)
-/FontFile 17567 0 R
+/FontFile 17556 0 R
 >> endobj
-17569 0 obj <<
+17558 0 obj <<
 /Length1 2310
 /Length2 15237
 /Length3 0
@@ -110203,7 +113931,7 @@
 fôuˆ–‘Ú!˜Ÿ¥ú %%ûÉb‹tªi¡‰Y–ï^Rsy9­FÅçQÀ˹2„RiFÛv7?újŒýuR´g*À¨ö%:k¨€p9@Ðw'ÖÚ¿ˆ	­›Ôñ%áîôã¡e›îbøÖÑsÅJ;÷0Ýžý“ÍW‚o%K‡6ê­Æº¼‚c®hëÝœv—Ë5à…¾HcŒ`J#|ìg•3ÖHƒºF.v*®øØfwZvPì4Ϥ6Cp~YÚäòbBËC§óp‘ˆìI£÷¼_ë{WÓx¼6?åëDö¥‹—³ÐÎÁA`KNÿ°Úf¡9ÐJVùNô³N ²-Û/âÕp³ý²ÿy·fe
 endstream
 endobj
-17570 0 obj <<
+17559 0 obj <<
 /Type /FontDescriptor
 /FontName /YPVIBW+CMTT10
 /Flags 4
@@ -110215,9 +113943,9 @@
 /StemV 69
 /XHeight 431
 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/ampersand/asciicircum/asciitilde/asterisk/at/b/backslash/bar/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/dollar/e/eight/equal/exclam/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedbl/quoteleft/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero)
-/FontFile 17569 0 R
+/FontFile 17558 0 R
 >> endobj
-17571 0 obj <<
+17560 0 obj <<
 /Length1 1876
 /Length2 11527
 /Length3 0
@@ -110312,7 +114040,7 @@
 ÚÂP@•¦mû”_–÷Þ’i‘Á/Íïròª…Føõu¼•üÝ™„v‚hNÚ®¾¾:»°ÇÀlÉZi‚	„¦‹?HÌTÁMA(ÿ7‘t
 endstream
 endobj
-17572 0 obj <<
+17561 0 obj <<
 /Type /FontDescriptor
 /FontName /LODRXA+CMTT9
 /Flags 4
@@ -110324,9 +114052,9 @@
 /StemV 74
 /XHeight 431
 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/a/ampersand/asciitilde/at/b/backslash/c/colon/d/e/eight/equal/f/five/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/period/q/question/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero)
-/FontFile 17571 0 R
+/FontFile 17560 0 R
 >> endobj
-17573 0 obj <<
+17562 0 obj <<
 /Length1 837
 /Length2 1182
 /Length3 0
@@ -110348,7 +114076,7 @@
 _¸©'-ÂUfPæaá‹Æ÷÷¼g|Ý,¯aÖ|qëÁ ³“RY
 endstream
 endobj
-17574 0 obj <<
+17563 0 obj <<
 /Type /FontDescriptor
 /FontName /ZUTHPM+LCIRCLE10
 /Flags 4
@@ -110360,1436 +114088,1436 @@
 /StemV 40
 /XHeight 0
 /CharSet (/a4/a5/a6/a7)
-/FontFile 17573 0 R
+/FontFile 17562 0 R
 >> endobj
-8343 0 obj <<
+8330 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /EGUQXT+CMBSY10
-/FontDescriptor 17516 0 R
+/FontDescriptor 17505 0 R
 /FirstChar 110
 /LastChar 110
-/Widths 17489 0 R
+/Widths 17478 0 R
 >> endobj
 3701 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /IXAXLA+CMBX10
-/FontDescriptor 17518 0 R
+/FontDescriptor 17507 0 R
 /FirstChar 12
 /LastChar 123
-/Widths 17510 0 R
+/Widths 17499 0 R
 >> endobj
 3691 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /ZAENBR+CMBX12
-/FontDescriptor 17520 0 R
+/FontDescriptor 17509 0 R
 /FirstChar 12
 /LastChar 120
-/Widths 17514 0 R
+/Widths 17503 0 R
 >> endobj
-11968 0 obj <<
+11956 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /KDJMFH+CMBX9
-/FontDescriptor 17522 0 R
+/FontDescriptor 17511 0 R
 /FirstChar 46
 /LastChar 117
-/Widths 17486 0 R
+/Widths 17475 0 R
 >> endobj
-7030 0 obj <<
+7029 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /EYXZUN+CMBXTI10
-/FontDescriptor 17524 0 R
+/FontDescriptor 17513 0 R
 /FirstChar 68
 /LastChar 122
-/Widths 17491 0 R
+/Widths 17480 0 R
 >> endobj
 5678 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /IAZZYX+CMCSC10
-/FontDescriptor 17526 0 R
+/FontDescriptor 17515 0 R
 /FirstChar 58
 /LastChar 121
-/Widths 17497 0 R
+/Widths 17486 0 R
 >> endobj
 5513 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /HQYOII+CMITT10
-/FontDescriptor 17528 0 R
+/FontDescriptor 17517 0 R
 /FirstChar 33
 /LastChar 122
-/Widths 17498 0 R
+/Widths 17487 0 R
 >> endobj
 3737 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /EOEKOR+CMMI10
-/FontDescriptor 17530 0 R
+/FontDescriptor 17519 0 R
 /FirstChar 45
 /LastChar 62
-/Widths 17507 0 R
+/Widths 17496 0 R
 >> endobj
 5442 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /YJCLWH+CMMI9
-/FontDescriptor 17532 0 R
+/FontDescriptor 17521 0 R
 /FirstChar 60
 /LastChar 62
-/Widths 17502 0 R
+/Widths 17491 0 R
 >> endobj
-8188 0 obj <<
+8177 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /PGRSID+CMMIB10
-/FontDescriptor 17534 0 R
+/FontDescriptor 17523 0 R
 /FirstChar 60
 /LastChar 62
-/Widths 17490 0 R
+/Widths 17479 0 R
 >> endobj
 3700 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /EPCWMJ+CMR10
-/FontDescriptor 17536 0 R
+/FontDescriptor 17525 0 R
 /FirstChar 11
 /LastChar 126
-/Widths 17511 0 R
+/Widths 17500 0 R
 >> endobj
 3692 0 obj <<
 /Type /Font
 /Subtype /Type1
-/BaseFont /RQKQOY+CMR12
-/FontDescriptor 17538 0 R
+/BaseFont /HDHUDE+CMR12
+/FontDescriptor 17527 0 R
 /FirstChar 40
 /LastChar 121
-/Widths 17513 0 R
+/Widths 17502 0 R
 >> endobj
 5441 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /FKGUSP+CMR6
-/FontDescriptor 17540 0 R
+/FontDescriptor 17529 0 R
 /FirstChar 48
 /LastChar 57
-/Widths 17503 0 R
+/Widths 17492 0 R
 >> endobj
 5413 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /DMYVZC+CMR8
-/FontDescriptor 17542 0 R
+/FontDescriptor 17531 0 R
 /FirstChar 48
 /LastChar 116
-/Widths 17504 0 R
+/Widths 17493 0 R
 >> endobj
-6223 0 obj <<
+6222 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /ONEKDV+CMR9
-/FontDescriptor 17544 0 R
+/FontDescriptor 17533 0 R
 /FirstChar 12
 /LastChar 122
-/Widths 17494 0 R
+/Widths 17483 0 R
 >> endobj
-8585 0 obj <<
+8572 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /EMDQZB+CMSL10
-/FontDescriptor 17546 0 R
+/FontDescriptor 17535 0 R
 /FirstChar 36
 /LastChar 36
-/Widths 17488 0 R
+/Widths 17477 0 R
 >> endobj
-8906 0 obj <<
+8892 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /IUVPNN+CMSLTT10
-/FontDescriptor 17548 0 R
+/FontDescriptor 17537 0 R
 /FirstChar 36
 /LastChar 36
-/Widths 17487 0 R
+/Widths 17476 0 R
 >> endobj
 5679 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /RMNNEV+CMSS10
-/FontDescriptor 17550 0 R
+/FontDescriptor 17539 0 R
 /FirstChar 11
 /LastChar 124
-/Widths 17496 0 R
+/Widths 17485 0 R
 >> endobj
 5472 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /TFKSKK+CMSS17
-/FontDescriptor 17552 0 R
+/FontDescriptor 17541 0 R
 /FirstChar 48
 /LastChar 120
-/Widths 17500 0 R
+/Widths 17489 0 R
 >> endobj
 3706 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /CLAVVQ+CMSS8
-/FontDescriptor 17554 0 R
+/FontDescriptor 17543 0 R
 /FirstChar 11
 /LastChar 122
-/Widths 17509 0 R
+/Widths 17498 0 R
 >> endobj
 3698 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /SHFLWS+CMSSBX10
-/FontDescriptor 17556 0 R
+/FontDescriptor 17545 0 R
 /FirstChar 11
 /LastChar 124
-/Widths 17512 0 R
+/Widths 17501 0 R
 >> endobj
 6121 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /NZIWIM+CMSSI10
-/FontDescriptor 17558 0 R
+/FontDescriptor 17547 0 R
 /FirstChar 33
 /LastChar 121
-/Widths 17495 0 R
+/Widths 17484 0 R
 >> endobj
 3736 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /DISJDX+CMSY10
-/FontDescriptor 17560 0 R
+/FontDescriptor 17549 0 R
 /FirstChar 0
 /LastChar 110
-/Widths 17508 0 R
+/Widths 17497 0 R
 >> endobj
 4373 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /RKVALY+CMTI10
-/FontDescriptor 17562 0 R
+/FontDescriptor 17551 0 R
 /FirstChar 11
 /LastChar 122
-/Widths 17505 0 R
+/Widths 17494 0 R
 >> endobj
-6230 0 obj <<
+6229 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /ICKEOV+CMTI7
-/FontDescriptor 17564 0 R
+/FontDescriptor 17553 0 R
 /FirstChar 97
 /LastChar 98
-/Widths 17492 0 R
+/Widths 17481 0 R
 >> endobj
-6229 0 obj <<
+6228 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /TEUAKW+CMTI8
-/FontDescriptor 17566 0 R
+/FontDescriptor 17555 0 R
 /FirstChar 97
 /LastChar 98
-/Widths 17493 0 R
+/Widths 17482 0 R
 >> endobj
-11969 0 obj <<
+11957 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /DLGOAM+CMTI9
-/FontDescriptor 17568 0 R
+/FontDescriptor 17557 0 R
 /FirstChar 111
 /LastChar 116
-/Widths 17485 0 R
+/Widths 17474 0 R
 >> endobj
 3738 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /YPVIBW+CMTT10
-/FontDescriptor 17570 0 R
+/FontDescriptor 17559 0 R
 /FirstChar 33
 /LastChar 126
-/Widths 17506 0 R
+/Widths 17495 0 R
 >> endobj
 5443 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /LODRXA+CMTT9
-/FontDescriptor 17572 0 R
+/FontDescriptor 17561 0 R
 /FirstChar 35
 /LastChar 126
-/Widths 17501 0 R
+/Widths 17490 0 R
 >> endobj
 5484 0 obj <<
 /Type /Font
 /Subtype /Type1
 /BaseFont /ZUTHPM+LCIRCLE10
-/FontDescriptor 17574 0 R
+/FontDescriptor 17563 0 R
 /FirstChar 4
 /LastChar 7
-/Widths 17499 0 R
+/Widths 17488 0 R
 >> endobj
 3693 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17575 0 R
+/Parent 17564 0 R
 /Kids [3686 0 R 3695 0 R 3703 0 R 3732 0 R 3772 0 R 3809 0 R]
 >> endobj
 3846 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17575 0 R
+/Parent 17564 0 R
 /Kids [3843 0 R 3879 0 R 3920 0 R 3943 0 R 3950 0 R 3979 0 R]
 >> endobj
 4021 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17575 0 R
+/Parent 17564 0 R
 /Kids [4018 0 R 4057 0 R 4097 0 R 4133 0 R 4175 0 R 4213 0 R]
 >> endobj
 4255 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17575 0 R
+/Parent 17564 0 R
 /Kids [4252 0 R 4292 0 R 4328 0 R 4370 0 R 4410 0 R 4451 0 R]
 >> endobj
 4494 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17575 0 R
+/Parent 17564 0 R
 /Kids [4491 0 R 4532 0 R 4573 0 R 4609 0 R 4647 0 R 4688 0 R]
 >> endobj
 4731 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17575 0 R
+/Parent 17564 0 R
 /Kids [4728 0 R 4769 0 R 4808 0 R 4846 0 R 4882 0 R 4920 0 R]
 >> endobj
 4963 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17576 0 R
+/Parent 17565 0 R
 /Kids [4960 0 R 4983 0 R 4987 0 R 5008 0 R 5048 0 R 5084 0 R]
 >> endobj
 5113 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17576 0 R
+/Parent 17565 0 R
 /Kids [5110 0 R 5126 0 R 5134 0 R 5167 0 R 5231 0 R 5270 0 R]
 >> endobj
 5303 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17576 0 R
+/Parent 17565 0 R
 /Kids [5300 0 R 5351 0 R 5384 0 R 5394 0 R 5399 0 R 5407 0 R]
 >> endobj
 5419 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17576 0 R
+/Parent 17565 0 R
 /Kids [5416 0 R 5421 0 R 5429 0 R 5436 0 R 5445 0 R 5449 0 R]
 >> endobj
 5454 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17576 0 R
+/Parent 17565 0 R
 /Kids [5452 0 R 5456 0 R 5463 0 R 5469 0 R 5479 0 R 5496 0 R]
 >> endobj
 5507 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17576 0 R
+/Parent 17565 0 R
 /Kids [5504 0 R 5510 0 R 5524 0 R 5531 0 R 5539 0 R 5548 0 R]
 >> endobj
 5562 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17577 0 R
+/Parent 17566 0 R
 /Kids [5555 0 R 5564 0 R 5568 0 R 5573 0 R 5582 0 R 5592 0 R]
 >> endobj
 5619 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17577 0 R
+/Parent 17566 0 R
 /Kids [5600 0 R 5622 0 R 5630 0 R 5651 0 R 5675 0 R 5685 0 R]
 >> endobj
 5728 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17577 0 R
+/Parent 17566 0 R
 /Kids [5693 0 R 5730 0 R 5737 0 R 5743 0 R 5750 0 R 5773 0 R]
 >> endobj
 5812 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17577 0 R
+/Parent 17566 0 R
 /Kids [5805 0 R 5814 0 R 5822 0 R 5832 0 R 5865 0 R 5873 0 R]
 >> endobj
 5885 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17577 0 R
+/Parent 17566 0 R
 /Kids [5879 0 R 5891 0 R 5905 0 R 5944 0 R 5983 0 R 6014 0 R]
 >> endobj
 6019 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17577 0 R
+/Parent 17566 0 R
 /Kids [6017 0 R 6021 0 R 6028 0 R 6032 0 R 6037 0 R 6046 0 R]
 >> endobj
 6057 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17578 0 R
+/Parent 17567 0 R
 /Kids [6051 0 R 6059 0 R 6067 0 R 6075 0 R 6092 0 R 6100 0 R]
 >> endobj
 6116 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17578 0 R
+/Parent 17567 0 R
 /Kids [6113 0 R 6118 0 R 6128 0 R 6133 0 R 6143 0 R 6151 0 R]
 >> endobj
 6159 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17578 0 R
-/Kids [6156 0 R 6163 0 R 6168 0 R 6180 0 R 6185 0 R 6191 0 R]
+/Parent 17567 0 R
+/Kids [6156 0 R 6163 0 R 6168 0 R 6179 0 R 6184 0 R 6190 0 R]
 >> endobj
-6202 0 obj <<
+6201 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17578 0 R
-/Kids [6197 0 R 6205 0 R 6209 0 R 6213 0 R 6220 0 R 6226 0 R]
+/Parent 17567 0 R
+/Kids [6196 0 R 6204 0 R 6208 0 R 6212 0 R 6219 0 R 6225 0 R]
 >> endobj
-6237 0 obj <<
+6236 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17578 0 R
-/Kids [6233 0 R 6241 0 R 6250 0 R 6258 0 R 6265 0 R 6293 0 R]
+/Parent 17567 0 R
+/Kids [6232 0 R 6240 0 R 6249 0 R 6257 0 R 6264 0 R 6292 0 R]
 >> endobj
-6321 0 obj <<
+6320 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17578 0 R
-/Kids [6304 0 R 6323 0 R 6328 0 R 6342 0 R 6348 0 R 6353 0 R]
+/Parent 17567 0 R
+/Kids [6303 0 R 6322 0 R 6327 0 R 6341 0 R 6347 0 R 6352 0 R]
 >> endobj
-6364 0 obj <<
+6363 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17579 0 R
-/Kids [6360 0 R 6366 0 R 6373 0 R 6380 0 R 6386 0 R 6392 0 R]
+/Parent 17568 0 R
+/Kids [6359 0 R 6365 0 R 6372 0 R 6379 0 R 6385 0 R 6391 0 R]
 >> endobj
-6400 0 obj <<
+6399 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17579 0 R
-/Kids [6397 0 R 6406 0 R 6412 0 R 6429 0 R 6441 0 R 6450 0 R]
+/Parent 17568 0 R
+/Kids [6396 0 R 6405 0 R 6411 0 R 6428 0 R 6440 0 R 6449 0 R]
 >> endobj
-6462 0 obj <<
+6461 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17579 0 R
-/Kids [6458 0 R 6465 0 R 6485 0 R 6491 0 R 6497 0 R 6502 0 R]
+/Parent 17568 0 R
+/Kids [6457 0 R 6464 0 R 6484 0 R 6490 0 R 6496 0 R 6501 0 R]
 >> endobj
-6510 0 obj <<
+6509 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17579 0 R
-/Kids [6507 0 R 6512 0 R 6516 0 R 6522 0 R 6528 0 R 6536 0 R]
+/Parent 17568 0 R
+/Kids [6506 0 R 6511 0 R 6515 0 R 6521 0 R 6527 0 R 6535 0 R]
 >> endobj
-6558 0 obj <<
+6557 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17579 0 R
-/Kids [6552 0 R 6563 0 R 6569 0 R 6582 0 R 6588 0 R 6595 0 R]
+/Parent 17568 0 R
+/Kids [6551 0 R 6562 0 R 6568 0 R 6581 0 R 6587 0 R 6594 0 R]
 >> endobj
-6616 0 obj <<
+6615 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17579 0 R
-/Kids [6609 0 R 6618 0 R 6625 0 R 6629 0 R 6636 0 R 6641 0 R]
+/Parent 17568 0 R
+/Kids [6608 0 R 6617 0 R 6624 0 R 6628 0 R 6635 0 R 6640 0 R]
 >> endobj
-6655 0 obj <<
+6654 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17580 0 R
-/Kids [6649 0 R 6657 0 R 6662 0 R 6666 0 R 6675 0 R 6684 0 R]
+/Parent 17569 0 R
+/Kids [6648 0 R 6656 0 R 6661 0 R 6665 0 R 6674 0 R 6683 0 R]
 >> endobj
-6708 0 obj <<
+6707 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17580 0 R
-/Kids [6701 0 R 6714 0 R 6737 0 R 6742 0 R 6754 0 R 6770 0 R]
+/Parent 17569 0 R
+/Kids [6700 0 R 6713 0 R 6736 0 R 6741 0 R 6753 0 R 6769 0 R]
 >> endobj
-6788 0 obj <<
+6787 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17580 0 R
-/Kids [6782 0 R 6799 0 R 6810 0 R 6824 0 R 6837 0 R 6854 0 R]
+/Parent 17569 0 R
+/Kids [6781 0 R 6798 0 R 6809 0 R 6823 0 R 6836 0 R 6853 0 R]
 >> endobj
-6875 0 obj <<
+6874 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17580 0 R
-/Kids [6869 0 R 6883 0 R 6896 0 R 6905 0 R 6909 0 R 6913 0 R]
+/Parent 17569 0 R
+/Kids [6868 0 R 6882 0 R 6895 0 R 6904 0 R 6908 0 R 6912 0 R]
 >> endobj
-6920 0 obj <<
+6919 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17580 0 R
-/Kids [6917 0 R 6922 0 R 6926 0 R 6930 0 R 6934 0 R 6938 0 R]
+/Parent 17569 0 R
+/Kids [6916 0 R 6921 0 R 6925 0 R 6929 0 R 6933 0 R 6937 0 R]
 >> endobj
-6943 0 obj <<
+6942 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17580 0 R
-/Kids [6941 0 R 6945 0 R 6952 0 R 6959 0 R 6966 0 R 6971 0 R]
+/Parent 17569 0 R
+/Kids [6940 0 R 6944 0 R 6951 0 R 6958 0 R 6965 0 R 6970 0 R]
 >> endobj
-6986 0 obj <<
+6985 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17581 0 R
-/Kids [6978 0 R 6988 0 R 6992 0 R 6997 0 R 7002 0 R 7006 0 R]
+/Parent 17570 0 R
+/Kids [6977 0 R 6987 0 R 6991 0 R 6996 0 R 7001 0 R 7005 0 R]
 >> endobj
-7018 0 obj <<
+7017 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17581 0 R
-/Kids [7011 0 R 7020 0 R 7027 0 R 7032 0 R 7036 0 R 7041 0 R]
+/Parent 17570 0 R
+/Kids [7010 0 R 7019 0 R 7026 0 R 7031 0 R 7035 0 R 7040 0 R]
 >> endobj
-7059 0 obj <<
+7058 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17581 0 R
-/Kids [7047 0 R 7063 0 R 7084 0 R 7097 0 R 7102 0 R 7112 0 R]
+/Parent 17570 0 R
+/Kids [7046 0 R 7062 0 R 7083 0 R 7096 0 R 7101 0 R 7111 0 R]
 >> endobj
-7131 0 obj <<
+7130 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17581 0 R
-/Kids [7124 0 R 7134 0 R 7145 0 R 7151 0 R 7157 0 R 7163 0 R]
+/Parent 17570 0 R
+/Kids [7123 0 R 7133 0 R 7144 0 R 7150 0 R 7156 0 R 7162 0 R]
 >> endobj
-7179 0 obj <<
+7178 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17581 0 R
-/Kids [7168 0 R 7181 0 R 7186 0 R 7191 0 R 7199 0 R 7215 0 R]
+/Parent 17570 0 R
+/Kids [7167 0 R 7180 0 R 7185 0 R 7190 0 R 7198 0 R 7213 0 R]
 >> endobj
-7226 0 obj <<
+7224 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17581 0 R
-/Kids [7222 0 R 7229 0 R 7238 0 R 7246 0 R 7251 0 R 7255 0 R]
+/Parent 17570 0 R
+/Kids [7220 0 R 7227 0 R 7236 0 R 7244 0 R 7249 0 R 7253 0 R]
 >> endobj
-7265 0 obj <<
+7263 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17582 0 R
-/Kids [7260 0 R 7268 0 R 7277 0 R 7284 0 R 7299 0 R 7314 0 R]
+/Parent 17571 0 R
+/Kids [7258 0 R 7266 0 R 7275 0 R 7282 0 R 7295 0 R 7308 0 R]
 >> endobj
-7327 0 obj <<
+7321 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17582 0 R
-/Kids [7322 0 R 7331 0 R 7341 0 R 7346 0 R 7352 0 R 7358 0 R]
+/Parent 17571 0 R
+/Kids [7316 0 R 7325 0 R 7335 0 R 7340 0 R 7346 0 R 7352 0 R]
 >> endobj
-7374 0 obj <<
+7368 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17582 0 R
-/Kids [7362 0 R 7377 0 R 7385 0 R 7389 0 R 7394 0 R 7401 0 R]
+/Parent 17571 0 R
+/Kids [7356 0 R 7371 0 R 7379 0 R 7383 0 R 7388 0 R 7395 0 R]
 >> endobj
-7412 0 obj <<
+7406 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17582 0 R
-/Kids [7409 0 R 7415 0 R 7421 0 R 7425 0 R 7431 0 R 7441 0 R]
+/Parent 17571 0 R
+/Kids [7403 0 R 7409 0 R 7415 0 R 7419 0 R 7425 0 R 7435 0 R]
 >> endobj
-7454 0 obj <<
+7448 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17582 0 R
-/Kids [7449 0 R 7456 0 R 7472 0 R 7478 0 R 7484 0 R 7489 0 R]
+/Parent 17571 0 R
+/Kids [7443 0 R 7450 0 R 7466 0 R 7472 0 R 7478 0 R 7483 0 R]
 >> endobj
-7497 0 obj <<
+7491 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17582 0 R
-/Kids [7493 0 R 7499 0 R 7503 0 R 7515 0 R 7532 0 R 7569 0 R]
+/Parent 17571 0 R
+/Kids [7487 0 R 7493 0 R 7497 0 R 7509 0 R 7526 0 R 7563 0 R]
 >> endobj
-7580 0 obj <<
+7574 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17583 0 R
-/Kids [7576 0 R 7583 0 R 7591 0 R 7598 0 R 7602 0 R 7606 0 R]
+/Parent 17572 0 R
+/Kids [7570 0 R 7577 0 R 7585 0 R 7592 0 R 7596 0 R 7600 0 R]
 >> endobj
-7621 0 obj <<
+7615 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17583 0 R
-/Kids [7616 0 R 7635 0 R 7658 0 R 7665 0 R 7671 0 R 7676 0 R]
+/Parent 17572 0 R
+/Kids [7610 0 R 7627 0 R 7647 0 R 7654 0 R 7660 0 R 7665 0 R]
 >> endobj
-7689 0 obj <<
+7678 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17583 0 R
-/Kids [7681 0 R 7692 0 R 7698 0 R 7706 0 R 7714 0 R 7723 0 R]
+/Parent 17572 0 R
+/Kids [7670 0 R 7681 0 R 7687 0 R 7695 0 R 7703 0 R 7712 0 R]
 >> endobj
-7742 0 obj <<
+7731 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17583 0 R
-/Kids [7730 0 R 7744 0 R 7748 0 R 7754 0 R 7760 0 R 7765 0 R]
+/Parent 17572 0 R
+/Kids [7719 0 R 7733 0 R 7737 0 R 7743 0 R 7749 0 R 7754 0 R]
 >> endobj
-7773 0 obj <<
+7762 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17583 0 R
-/Kids [7769 0 R 7775 0 R 7779 0 R 7786 0 R 7791 0 R 7795 0 R]
+/Parent 17572 0 R
+/Kids [7758 0 R 7764 0 R 7768 0 R 7775 0 R 7780 0 R 7784 0 R]
 >> endobj
-7803 0 obj <<
+7792 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17583 0 R
-/Kids [7799 0 R 7806 0 R 7815 0 R 7832 0 R 7839 0 R 7846 0 R]
+/Parent 17572 0 R
+/Kids [7788 0 R 7795 0 R 7804 0 R 7821 0 R 7828 0 R 7835 0 R]
 >> endobj
-7855 0 obj <<
+7844 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17584 0 R
-/Kids [7852 0 R 7857 0 R 7861 0 R 7866 0 R 7871 0 R 7876 0 R]
+/Parent 17573 0 R
+/Kids [7841 0 R 7846 0 R 7850 0 R 7855 0 R 7860 0 R 7865 0 R]
 >> endobj
-7884 0 obj <<
+7873 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17584 0 R
-/Kids [7881 0 R 7886 0 R 7890 0 R 7895 0 R 7900 0 R 7906 0 R]
+/Parent 17573 0 R
+/Kids [7870 0 R 7875 0 R 7879 0 R 7884 0 R 7889 0 R 7895 0 R]
 >> endobj
-7919 0 obj <<
+7908 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17584 0 R
-/Kids [7913 0 R 7922 0 R 7926 0 R 7931 0 R 7935 0 R 7942 0 R]
+/Parent 17573 0 R
+/Kids [7902 0 R 7911 0 R 7915 0 R 7920 0 R 7924 0 R 7931 0 R]
 >> endobj
-7949 0 obj <<
+7938 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17584 0 R
-/Kids [7946 0 R 7951 0 R 7958 0 R 7964 0 R 7971 0 R 7975 0 R]
+/Parent 17573 0 R
+/Kids [7935 0 R 7940 0 R 7947 0 R 7953 0 R 7960 0 R 7964 0 R]
 >> endobj
-7987 0 obj <<
+7976 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17584 0 R
-/Kids [7980 0 R 7989 0 R 7993 0 R 7997 0 R 8001 0 R 8008 0 R]
+/Parent 17573 0 R
+/Kids [7969 0 R 7978 0 R 7982 0 R 7986 0 R 7990 0 R 7997 0 R]
 >> endobj
-8032 0 obj <<
+8021 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17584 0 R
-/Kids [8026 0 R 8034 0 R 8057 0 R 8063 0 R 8086 0 R 8098 0 R]
+/Parent 17573 0 R
+/Kids [8015 0 R 8023 0 R 8046 0 R 8052 0 R 8075 0 R 8087 0 R]
 >> endobj
-8124 0 obj <<
+8113 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17585 0 R
-/Kids [8121 0 R 8127 0 R 8136 0 R 8144 0 R 8165 0 R 8172 0 R]
+/Parent 17574 0 R
+/Kids [8110 0 R 8116 0 R 8125 0 R 8133 0 R 8154 0 R 8161 0 R]
 >> endobj
-8181 0 obj <<
+8170 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17585 0 R
-/Kids [8177 0 R 8184 0 R 8190 0 R 8194 0 R 8199 0 R 8205 0 R]
+/Parent 17574 0 R
+/Kids [8166 0 R 8173 0 R 8179 0 R 8183 0 R 8188 0 R 8194 0 R]
 >> endobj
-8215 0 obj <<
+8204 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17585 0 R
-/Kids [8210 0 R 8218 0 R 8222 0 R 8226 0 R 8230 0 R 8235 0 R]
+/Parent 17574 0 R
+/Kids [8199 0 R 8207 0 R 8211 0 R 8215 0 R 8219 0 R 8224 0 R]
 >> endobj
-8244 0 obj <<
+8233 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17585 0 R
-/Kids [8241 0 R 8247 0 R 8256 0 R 8262 0 R 8278 0 R 8283 0 R]
+/Parent 17574 0 R
+/Kids [8230 0 R 8236 0 R 8245 0 R 8251 0 R 8265 0 R 8270 0 R]
 >> endobj
-8300 0 obj <<
+8287 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17585 0 R
-/Kids [8293 0 R 8305 0 R 8310 0 R 8315 0 R 8324 0 R 8331 0 R]
+/Parent 17574 0 R
+/Kids [8280 0 R 8292 0 R 8297 0 R 8302 0 R 8311 0 R 8318 0 R]
 >> endobj
-8344 0 obj <<
+8331 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17585 0 R
-/Kids [8338 0 R 8346 0 R 8352 0 R 8357 0 R 8361 0 R 8366 0 R]
+/Parent 17574 0 R
+/Kids [8325 0 R 8333 0 R 8339 0 R 8344 0 R 8348 0 R 8353 0 R]
 >> endobj
-8380 0 obj <<
+8367 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17586 0 R
-/Kids [8370 0 R 8382 0 R 8388 0 R 8394 0 R 8403 0 R 8409 0 R]
+/Parent 17575 0 R
+/Kids [8357 0 R 8369 0 R 8375 0 R 8381 0 R 8390 0 R 8396 0 R]
 >> endobj
-8425 0 obj <<
+8412 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17586 0 R
-/Kids [8419 0 R 8427 0 R 8431 0 R 8435 0 R 8440 0 R 8445 0 R]
+/Parent 17575 0 R
+/Kids [8406 0 R 8414 0 R 8418 0 R 8422 0 R 8427 0 R 8432 0 R]
 >> endobj
-8453 0 obj <<
+8440 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17586 0 R
-/Kids [8450 0 R 8455 0 R 8459 0 R 8466 0 R 8473 0 R 8480 0 R]
+/Parent 17575 0 R
+/Kids [8437 0 R 8442 0 R 8446 0 R 8453 0 R 8460 0 R 8467 0 R]
 >> endobj
-8490 0 obj <<
+8477 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17586 0 R
-/Kids [8485 0 R 8493 0 R 8507 0 R 8526 0 R 8530 0 R 8534 0 R]
+/Parent 17575 0 R
+/Kids [8472 0 R 8480 0 R 8494 0 R 8513 0 R 8517 0 R 8521 0 R]
 >> endobj
-8543 0 obj <<
+8530 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17586 0 R
-/Kids [8539 0 R 8546 0 R 8556 0 R 8566 0 R 8571 0 R 8575 0 R]
+/Parent 17575 0 R
+/Kids [8526 0 R 8533 0 R 8543 0 R 8553 0 R 8558 0 R 8562 0 R]
 >> endobj
-8591 0 obj <<
+8578 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17586 0 R
-/Kids [8582 0 R 8593 0 R 8605 0 R 8614 0 R 8622 0 R 8630 0 R]
+/Parent 17575 0 R
+/Kids [8569 0 R 8580 0 R 8592 0 R 8601 0 R 8609 0 R 8617 0 R]
 >> endobj
-8641 0 obj <<
+8628 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17587 0 R
-/Kids [8638 0 R 8643 0 R 8650 0 R 8656 0 R 8663 0 R 8677 0 R]
+/Parent 17576 0 R
+/Kids [8625 0 R 8630 0 R 8637 0 R 8643 0 R 8650 0 R 8663 0 R]
 >> endobj
-8686 0 obj <<
+8672 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17587 0 R
-/Kids [8682 0 R 8688 0 R 8694 0 R 8701 0 R 8706 0 R 8712 0 R]
+/Parent 17576 0 R
+/Kids [8668 0 R 8674 0 R 8680 0 R 8687 0 R 8692 0 R 8698 0 R]
 >> endobj
-8730 0 obj <<
+8716 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17587 0 R
-/Kids [8719 0 R 8732 0 R 8741 0 R 8746 0 R 8751 0 R 8757 0 R]
+/Parent 17576 0 R
+/Kids [8705 0 R 8718 0 R 8727 0 R 8732 0 R 8737 0 R 8743 0 R]
 >> endobj
-8785 0 obj <<
+8771 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17587 0 R
-/Kids [8771 0 R 8788 0 R 8793 0 R 8798 0 R 8802 0 R 8809 0 R]
+/Parent 17576 0 R
+/Kids [8757 0 R 8774 0 R 8779 0 R 8784 0 R 8788 0 R 8795 0 R]
 >> endobj
-8853 0 obj <<
+8839 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17587 0 R
-/Kids [8820 0 R 8856 0 R 8865 0 R 8871 0 R 8875 0 R 8882 0 R]
+/Parent 17576 0 R
+/Kids [8806 0 R 8842 0 R 8851 0 R 8857 0 R 8861 0 R 8868 0 R]
 >> endobj
-8895 0 obj <<
+8881 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17587 0 R
-/Kids [8890 0 R 8899 0 R 8903 0 R 8914 0 R 8918 0 R 8925 0 R]
+/Parent 17576 0 R
+/Kids [8876 0 R 8885 0 R 8889 0 R 8900 0 R 8904 0 R 8911 0 R]
 >> endobj
-8950 0 obj <<
+8936 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17588 0 R
-/Kids [8932 0 R 8952 0 R 8956 0 R 8961 0 R 8968 0 R 8977 0 R]
+/Parent 17577 0 R
+/Kids [8918 0 R 8938 0 R 8942 0 R 8947 0 R 8954 0 R 8963 0 R]
 >> endobj
-8985 0 obj <<
+8971 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17588 0 R
-/Kids [8982 0 R 8987 0 R 8992 0 R 8997 0 R 9002 0 R 9006 0 R]
+/Parent 17577 0 R
+/Kids [8968 0 R 8973 0 R 8978 0 R 8983 0 R 8988 0 R 8992 0 R]
 >> endobj
-9015 0 obj <<
+9001 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17588 0 R
-/Kids [9011 0 R 9017 0 R 9022 0 R 9027 0 R 9032 0 R 9038 0 R]
+/Parent 17577 0 R
+/Kids [8997 0 R 9003 0 R 9008 0 R 9013 0 R 9018 0 R 9024 0 R]
 >> endobj
-9056 0 obj <<
+9042 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17588 0 R
-/Kids [9048 0 R 9058 0 R 9069 0 R 9074 0 R 9085 0 R 9100 0 R]
+/Parent 17577 0 R
+/Kids [9034 0 R 9044 0 R 9055 0 R 9060 0 R 9071 0 R 9086 0 R]
 >> endobj
-9112 0 obj <<
+9098 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17588 0 R
-/Kids [9109 0 R 9114 0 R 9119 0 R 9123 0 R 9128 0 R 9133 0 R]
+/Parent 17577 0 R
+/Kids [9095 0 R 9100 0 R 9105 0 R 9109 0 R 9114 0 R 9119 0 R]
 >> endobj
-9140 0 obj <<
+9126 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17588 0 R
-/Kids [9137 0 R 9144 0 R 9151 0 R 9160 0 R 9168 0 R 9176 0 R]
+/Parent 17577 0 R
+/Kids [9123 0 R 9130 0 R 9137 0 R 9146 0 R 9154 0 R 9162 0 R]
 >> endobj
-9184 0 obj <<
+9170 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17589 0 R
-/Kids [9180 0 R 9188 0 R 9195 0 R 9204 0 R 9208 0 R 9215 0 R]
+/Parent 17578 0 R
+/Kids [9166 0 R 9174 0 R 9181 0 R 9190 0 R 9194 0 R 9201 0 R]
 >> endobj
-9228 0 obj <<
+9214 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17589 0 R
-/Kids [9223 0 R 9231 0 R 9238 0 R 9257 0 R 9286 0 R 9293 0 R]
+/Parent 17578 0 R
+/Kids [9209 0 R 9217 0 R 9224 0 R 9244 0 R 9275 0 R 9282 0 R]
 >> endobj
-9306 0 obj <<
+9295 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17589 0 R
-/Kids [9303 0 R 9309 0 R 9315 0 R 9323 0 R 9330 0 R 9338 0 R]
+/Parent 17578 0 R
+/Kids [9292 0 R 9298 0 R 9305 0 R 9312 0 R 9319 0 R 9326 0 R]
 >> endobj
-9350 0 obj <<
+9340 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17589 0 R
-/Kids [9345 0 R 9354 0 R 9360 0 R 9365 0 R 9372 0 R 9377 0 R]
+/Parent 17578 0 R
+/Kids [9335 0 R 9343 0 R 9349 0 R 9354 0 R 9361 0 R 9366 0 R]
 >> endobj
-9386 0 obj <<
+9375 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17589 0 R
-/Kids [9382 0 R 9388 0 R 9397 0 R 9406 0 R 9418 0 R 9428 0 R]
+/Parent 17578 0 R
+/Kids [9371 0 R 9377 0 R 9386 0 R 9395 0 R 9407 0 R 9417 0 R]
 >> endobj
-9441 0 obj <<
+9430 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17589 0 R
-/Kids [9437 0 R 9444 0 R 9449 0 R 9453 0 R 9458 0 R 9464 0 R]
+/Parent 17578 0 R
+/Kids [9426 0 R 9433 0 R 9438 0 R 9442 0 R 9447 0 R 9453 0 R]
 >> endobj
-9473 0 obj <<
+9462 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17590 0 R
-/Kids [9470 0 R 9476 0 R 9486 0 R 9492 0 R 9499 0 R 9516 0 R]
+/Parent 17579 0 R
+/Kids [9459 0 R 9465 0 R 9475 0 R 9481 0 R 9488 0 R 9504 0 R]
 >> endobj
-9538 0 obj <<
+9525 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17590 0 R
-/Kids [9534 0 R 9545 0 R 9556 0 R 9565 0 R 9575 0 R 9582 0 R]
+/Parent 17579 0 R
+/Kids [9521 0 R 9532 0 R 9543 0 R 9552 0 R 9562 0 R 9569 0 R]
 >> endobj
-9595 0 obj <<
+9582 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17590 0 R
-/Kids [9589 0 R 9597 0 R 9605 0 R 9613 0 R 9642 0 R 9646 0 R]
+/Parent 17579 0 R
+/Kids [9576 0 R 9584 0 R 9592 0 R 9600 0 R 9630 0 R 9634 0 R]
 >> endobj
-9657 0 obj <<
+9645 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17590 0 R
-/Kids [9652 0 R 9659 0 R 9664 0 R 9669 0 R 9674 0 R 9679 0 R]
+/Parent 17579 0 R
+/Kids [9640 0 R 9647 0 R 9652 0 R 9657 0 R 9662 0 R 9667 0 R]
 >> endobj
-9688 0 obj <<
+9676 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17590 0 R
-/Kids [9685 0 R 9690 0 R 9696 0 R 9706 0 R 9715 0 R 9722 0 R]
+/Parent 17579 0 R
+/Kids [9673 0 R 9678 0 R 9684 0 R 9694 0 R 9703 0 R 9710 0 R]
 >> endobj
-9735 0 obj <<
+9723 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17590 0 R
-/Kids [9727 0 R 9737 0 R 9742 0 R 9748 0 R 9753 0 R 9759 0 R]
+/Parent 17579 0 R
+/Kids [9715 0 R 9725 0 R 9730 0 R 9736 0 R 9741 0 R 9747 0 R]
 >> endobj
-9770 0 obj <<
+9758 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17591 0 R
-/Kids [9765 0 R 9772 0 R 9778 0 R 9785 0 R 9789 0 R 9797 0 R]
+/Parent 17580 0 R
+/Kids [9753 0 R 9760 0 R 9766 0 R 9773 0 R 9777 0 R 9785 0 R]
 >> endobj
-9809 0 obj <<
+9797 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17591 0 R
-/Kids [9803 0 R 9811 0 R 9819 0 R 9828 0 R 9835 0 R 9853 0 R]
+/Parent 17580 0 R
+/Kids [9791 0 R 9799 0 R 9807 0 R 9816 0 R 9823 0 R 9841 0 R]
 >> endobj
-9869 0 obj <<
+9857 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17591 0 R
-/Kids [9861 0 R 9878 0 R 9885 0 R 9895 0 R 9909 0 R 9918 0 R]
+/Parent 17580 0 R
+/Kids [9849 0 R 9866 0 R 9873 0 R 9883 0 R 9897 0 R 9906 0 R]
 >> endobj
-9927 0 obj <<
+9915 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17591 0 R
-/Kids [9923 0 R 9930 0 R 9936 0 R 9942 0 R 9947 0 R 9954 0 R]
+/Parent 17580 0 R
+/Kids [9911 0 R 9918 0 R 9924 0 R 9930 0 R 9935 0 R 9942 0 R]
 >> endobj
-9963 0 obj <<
+9951 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17591 0 R
-/Kids [9958 0 R 9965 0 R 9971 0 R 9979 0 R 9984 0 R 10002 0 R]
+/Parent 17580 0 R
+/Kids [9946 0 R 9953 0 R 9959 0 R 9967 0 R 9972 0 R 9990 0 R]
 >> endobj
-10016 0 obj <<
+10004 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17591 0 R
-/Kids [10010 0 R 10018 0 R 10027 0 R 10044 0 R 10058 0 R 10068 0 R]
+/Parent 17580 0 R
+/Kids [9998 0 R 10006 0 R 10015 0 R 10032 0 R 10046 0 R 10056 0 R]
 >> endobj
-10083 0 obj <<
+10071 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17592 0 R
-/Kids [10080 0 R 10087 0 R 10095 0 R 10119 0 R 10124 0 R 10129 0 R]
+/Parent 17581 0 R
+/Kids [10068 0 R 10075 0 R 10083 0 R 10107 0 R 10112 0 R 10117 0 R]
 >> endobj
-10142 0 obj <<
+10130 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17592 0 R
-/Kids [10137 0 R 10144 0 R 10150 0 R 10164 0 R 10171 0 R 10176 0 R]
+/Parent 17581 0 R
+/Kids [10125 0 R 10132 0 R 10138 0 R 10152 0 R 10159 0 R 10164 0 R]
 >> endobj
-10196 0 obj <<
+10184 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17592 0 R
-/Kids [10183 0 R 10201 0 R 10208 0 R 10213 0 R 10217 0 R 10221 0 R]
+/Parent 17581 0 R
+/Kids [10171 0 R 10189 0 R 10196 0 R 10201 0 R 10205 0 R 10209 0 R]
 >> endobj
-10231 0 obj <<
+10219 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17592 0 R
-/Kids [10227 0 R 10234 0 R 10240 0 R 10246 0 R 10252 0 R 10259 0 R]
+/Parent 17581 0 R
+/Kids [10215 0 R 10222 0 R 10228 0 R 10234 0 R 10240 0 R 10247 0 R]
 >> endobj
-10270 0 obj <<
+10258 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17592 0 R
-/Kids [10264 0 R 10274 0 R 10281 0 R 10288 0 R 10295 0 R 10302 0 R]
+/Parent 17581 0 R
+/Kids [10252 0 R 10262 0 R 10269 0 R 10276 0 R 10283 0 R 10290 0 R]
 >> endobj
-10327 0 obj <<
+10315 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17592 0 R
-/Kids [10323 0 R 10329 0 R 10333 0 R 10340 0 R 10345 0 R 10352 0 R]
+/Parent 17581 0 R
+/Kids [10311 0 R 10317 0 R 10321 0 R 10328 0 R 10333 0 R 10340 0 R]
 >> endobj
-10364 0 obj <<
+10352 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17593 0 R
-/Kids [10356 0 R 10366 0 R 10370 0 R 10376 0 R 10380 0 R 10385 0 R]
+/Parent 17582 0 R
+/Kids [10344 0 R 10354 0 R 10358 0 R 10364 0 R 10368 0 R 10373 0 R]
 >> endobj
-10395 0 obj <<
+10383 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17593 0 R
-/Kids [10392 0 R 10397 0 R 10406 0 R 10413 0 R 10417 0 R 10428 0 R]
+/Parent 17582 0 R
+/Kids [10380 0 R 10385 0 R 10394 0 R 10401 0 R 10405 0 R 10416 0 R]
 >> endobj
-10436 0 obj <<
+10424 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17593 0 R
-/Kids [10433 0 R 10440 0 R 10447 0 R 10453 0 R 10457 0 R 10461 0 R]
+/Parent 17582 0 R
+/Kids [10421 0 R 10428 0 R 10435 0 R 10441 0 R 10445 0 R 10449 0 R]
 >> endobj
-10472 0 obj <<
+10460 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17593 0 R
-/Kids [10467 0 R 10474 0 R 10480 0 R 10486 0 R 10493 0 R 10501 0 R]
+/Parent 17582 0 R
+/Kids [10455 0 R 10462 0 R 10468 0 R 10474 0 R 10481 0 R 10489 0 R]
 >> endobj
-10511 0 obj <<
+10499 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17593 0 R
-/Kids [10506 0 R 10513 0 R 10525 0 R 10535 0 R 10541 0 R 10551 0 R]
+/Parent 17582 0 R
+/Kids [10494 0 R 10501 0 R 10513 0 R 10523 0 R 10529 0 R 10539 0 R]
 >> endobj
-10566 0 obj <<
+10554 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17593 0 R
-/Kids [10562 0 R 10568 0 R 10576 0 R 10582 0 R 10590 0 R 10598 0 R]
+/Parent 17582 0 R
+/Kids [10550 0 R 10556 0 R 10564 0 R 10570 0 R 10578 0 R 10586 0 R]
 >> endobj
-10630 0 obj <<
+10618 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17594 0 R
-/Kids [10612 0 R 10632 0 R 10641 0 R 10657 0 R 10665 0 R 10670 0 R]
+/Parent 17583 0 R
+/Kids [10600 0 R 10620 0 R 10629 0 R 10645 0 R 10653 0 R 10658 0 R]
 >> endobj
-10682 0 obj <<
+10670 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17594 0 R
-/Kids [10677 0 R 10684 0 R 10693 0 R 10699 0 R 10705 0 R 10710 0 R]
+/Parent 17583 0 R
+/Kids [10665 0 R 10672 0 R 10681 0 R 10687 0 R 10693 0 R 10698 0 R]
 >> endobj
-10720 0 obj <<
+10708 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17594 0 R
-/Kids [10714 0 R 10722 0 R 10726 0 R 10737 0 R 10747 0 R 10752 0 R]
+/Parent 17583 0 R
+/Kids [10702 0 R 10710 0 R 10714 0 R 10725 0 R 10735 0 R 10740 0 R]
 >> endobj
-10761 0 obj <<
+10749 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17594 0 R
-/Kids [10758 0 R 10763 0 R 10770 0 R 10775 0 R 10779 0 R 10783 0 R]
+/Parent 17583 0 R
+/Kids [10746 0 R 10751 0 R 10758 0 R 10763 0 R 10767 0 R 10771 0 R]
 >> endobj
-10790 0 obj <<
+10778 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17594 0 R
-/Kids [10787 0 R 10792 0 R 10797 0 R 10803 0 R 10807 0 R 10812 0 R]
+/Parent 17583 0 R
+/Kids [10775 0 R 10780 0 R 10785 0 R 10791 0 R 10795 0 R 10800 0 R]
 >> endobj
-10823 0 obj <<
+10811 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17594 0 R
-/Kids [10818 0 R 10826 0 R 10831 0 R 10837 0 R 10843 0 R 10848 0 R]
+/Parent 17583 0 R
+/Kids [10806 0 R 10814 0 R 10819 0 R 10825 0 R 10831 0 R 10836 0 R]
 >> endobj
-10855 0 obj <<
+10843 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17595 0 R
-/Kids [10852 0 R 10857 0 R 10862 0 R 10868 0 R 10873 0 R 10879 0 R]
+/Parent 17584 0 R
+/Kids [10840 0 R 10845 0 R 10850 0 R 10856 0 R 10861 0 R 10867 0 R]
 >> endobj
-10894 0 obj <<
+10882 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17595 0 R
-/Kids [10888 0 R 10896 0 R 10900 0 R 10906 0 R 10910 0 R 10917 0 R]
+/Parent 17584 0 R
+/Kids [10876 0 R 10884 0 R 10888 0 R 10894 0 R 10898 0 R 10905 0 R]
 >> endobj
-10935 0 obj <<
+10923 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17595 0 R
-/Kids [10929 0 R 10937 0 R 10941 0 R 10946 0 R 10953 0 R 10959 0 R]
+/Parent 17584 0 R
+/Kids [10917 0 R 10925 0 R 10929 0 R 10934 0 R 10941 0 R 10947 0 R]
 >> endobj
-10969 0 obj <<
+10957 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17595 0 R
-/Kids [10965 0 R 10971 0 R 10975 0 R 10981 0 R 10996 0 R 11006 0 R]
+/Parent 17584 0 R
+/Kids [10953 0 R 10959 0 R 10963 0 R 10969 0 R 10984 0 R 10994 0 R]
 >> endobj
-11015 0 obj <<
+11003 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17595 0 R
-/Kids [11012 0 R 11018 0 R 11025 0 R 11033 0 R 11039 0 R 11043 0 R]
+/Parent 17584 0 R
+/Kids [11000 0 R 11006 0 R 11013 0 R 11021 0 R 11027 0 R 11031 0 R]
 >> endobj
-11054 0 obj <<
+11042 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17595 0 R
-/Kids [11048 0 R 11056 0 R 11062 0 R 11068 0 R 11077 0 R 11084 0 R]
+/Parent 17584 0 R
+/Kids [11036 0 R 11044 0 R 11050 0 R 11056 0 R 11065 0 R 11072 0 R]
 >> endobj
-11093 0 obj <<
+11081 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17596 0 R
-/Kids [11090 0 R 11095 0 R 11107 0 R 11111 0 R 11115 0 R 11122 0 R]
+/Parent 17585 0 R
+/Kids [11078 0 R 11083 0 R 11095 0 R 11099 0 R 11103 0 R 11110 0 R]
 >> endobj
-11161 0 obj <<
+11149 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17596 0 R
-/Kids [11128 0 R 11167 0 R 11187 0 R 11216 0 R 11254 0 R 11258 0 R]
+/Parent 17585 0 R
+/Kids [11116 0 R 11155 0 R 11175 0 R 11204 0 R 11242 0 R 11246 0 R]
 >> endobj
-11263 0 obj <<
+11251 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17596 0 R
-/Kids [11261 0 R 11265 0 R 11272 0 R 11282 0 R 11300 0 R 11306 0 R]
+/Parent 17585 0 R
+/Kids [11249 0 R 11253 0 R 11260 0 R 11270 0 R 11288 0 R 11294 0 R]
 >> endobj
-11314 0 obj <<
+11302 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17596 0 R
-/Kids [11311 0 R 11316 0 R 11320 0 R 11324 0 R 11328 0 R 11336 0 R]
+/Parent 17585 0 R
+/Kids [11299 0 R 11304 0 R 11308 0 R 11312 0 R 11316 0 R 11324 0 R]
 >> endobj
-11352 0 obj <<
+11340 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17596 0 R
-/Kids [11346 0 R 11355 0 R 11363 0 R 11369 0 R 11381 0 R 11385 0 R]
+/Parent 17585 0 R
+/Kids [11334 0 R 11343 0 R 11351 0 R 11357 0 R 11369 0 R 11373 0 R]
 >> endobj
-11394 0 obj <<
+11382 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17596 0 R
-/Kids [11391 0 R 11396 0 R 11401 0 R 11407 0 R 11415 0 R 11428 0 R]
+/Parent 17585 0 R
+/Kids [11379 0 R 11384 0 R 11389 0 R 11395 0 R 11403 0 R 11416 0 R]
 >> endobj
-11438 0 obj <<
+11426 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17597 0 R
-/Kids [11435 0 R 11440 0 R 11444 0 R 11449 0 R 11455 0 R 11461 0 R]
+/Parent 17586 0 R
+/Kids [11423 0 R 11428 0 R 11432 0 R 11437 0 R 11443 0 R 11449 0 R]
 >> endobj
-11470 0 obj <<
+11458 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17597 0 R
-/Kids [11467 0 R 11472 0 R 11476 0 R 11481 0 R 11493 0 R 11499 0 R]
+/Parent 17586 0 R
+/Kids [11455 0 R 11460 0 R 11464 0 R 11469 0 R 11481 0 R 11487 0 R]
 >> endobj
-11510 0 obj <<
+11498 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17597 0 R
-/Kids [11504 0 R 11512 0 R 11519 0 R 11523 0 R 11526 0 R 11530 0 R]
+/Parent 17586 0 R
+/Kids [11492 0 R 11500 0 R 11507 0 R 11511 0 R 11514 0 R 11518 0 R]
 >> endobj
-11548 0 obj <<
+11536 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17597 0 R
-/Kids [11538 0 R 11550 0 R 11555 0 R 11563 0 R 11575 0 R 11588 0 R]
+/Parent 17586 0 R
+/Kids [11526 0 R 11538 0 R 11543 0 R 11551 0 R 11563 0 R 11576 0 R]
 >> endobj
-11607 0 obj <<
+11595 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17597 0 R
-/Kids [11598 0 R 11609 0 R 11614 0 R 11618 0 R 11629 0 R 11637 0 R]
+/Parent 17586 0 R
+/Kids [11586 0 R 11597 0 R 11602 0 R 11606 0 R 11617 0 R 11625 0 R]
 >> endobj
-11646 0 obj <<
+11634 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17597 0 R
-/Kids [11642 0 R 11652 0 R 11662 0 R 11666 0 R 11671 0 R 11677 0 R]
+/Parent 17586 0 R
+/Kids [11630 0 R 11640 0 R 11650 0 R 11654 0 R 11659 0 R 11665 0 R]
 >> endobj
-11692 0 obj <<
+11680 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17598 0 R
-/Kids [11685 0 R 11695 0 R 11706 0 R 11711 0 R 11716 0 R 11720 0 R]
+/Parent 17587 0 R
+/Kids [11673 0 R 11683 0 R 11694 0 R 11699 0 R 11704 0 R 11708 0 R]
 >> endobj
-11725 0 obj <<
+11713 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17598 0 R
-/Kids [11723 0 R 11729 0 R 11739 0 R 11750 0 R 11757 0 R 11762 0 R]
+/Parent 17587 0 R
+/Kids [11711 0 R 11717 0 R 11727 0 R 11738 0 R 11745 0 R 11750 0 R]
 >> endobj
-11772 0 obj <<
+11760 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17598 0 R
-/Kids [11766 0 R 11774 0 R 11780 0 R 11784 0 R 11789 0 R 11794 0 R]
+/Parent 17587 0 R
+/Kids [11754 0 R 11762 0 R 11768 0 R 11772 0 R 11777 0 R 11782 0 R]
 >> endobj
-11802 0 obj <<
+11790 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17598 0 R
-/Kids [11799 0 R 11804 0 R 11810 0 R 11816 0 R 11820 0 R 11827 0 R]
+/Parent 17587 0 R
+/Kids [11787 0 R 11792 0 R 11798 0 R 11804 0 R 11808 0 R 11815 0 R]
 >> endobj
-11837 0 obj <<
+11825 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17598 0 R
-/Kids [11834 0 R 11844 0 R 11850 0 R 11858 0 R 11866 0 R 11874 0 R]
+/Parent 17587 0 R
+/Kids [11822 0 R 11832 0 R 11838 0 R 11846 0 R 11854 0 R 11862 0 R]
 >> endobj
-11895 0 obj <<
+11883 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17598 0 R
-/Kids [11882 0 R 11898 0 R 11903 0 R 11907 0 R 11913 0 R 11918 0 R]
+/Parent 17587 0 R
+/Kids [11870 0 R 11886 0 R 11891 0 R 11895 0 R 11901 0 R 11906 0 R]
 >> endobj
-11934 0 obj <<
+11922 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17599 0 R
-/Kids [11927 0 R 11936 0 R 11942 0 R 11948 0 R 11958 0 R 11965 0 R]
+/Parent 17588 0 R
+/Kids [11915 0 R 11924 0 R 11930 0 R 11936 0 R 11946 0 R 11953 0 R]
 >> endobj
-11977 0 obj <<
+11965 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17599 0 R
-/Kids [11971 0 R 11979 0 R 11985 0 R 11991 0 R 11996 0 R 12003 0 R]
+/Parent 17588 0 R
+/Kids [11959 0 R 11967 0 R 11973 0 R 11979 0 R 11984 0 R 11991 0 R]
 >> endobj
-12011 0 obj <<
+11999 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17599 0 R
-/Kids [12008 0 R 12013 0 R 12021 0 R 12027 0 R 12032 0 R 12039 0 R]
+/Parent 17588 0 R
+/Kids [11996 0 R 12001 0 R 12009 0 R 12015 0 R 12020 0 R 12027 0 R]
 >> endobj
-12051 0 obj <<
+12039 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17599 0 R
-/Kids [12044 0 R 12053 0 R 12058 0 R 12062 0 R 12066 0 R 12070 0 R]
+/Parent 17588 0 R
+/Kids [12032 0 R 12041 0 R 12046 0 R 12050 0 R 12054 0 R 12058 0 R]
 >> endobj
-12077 0 obj <<
+12065 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17599 0 R
-/Kids [12074 0 R 12080 0 R 12086 0 R 12091 0 R 12097 0 R 12102 0 R]
+/Parent 17588 0 R
+/Kids [12062 0 R 12068 0 R 12074 0 R 12079 0 R 12085 0 R 12090 0 R]
 >> endobj
-12116 0 obj <<
+12104 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17599 0 R
-/Kids [12108 0 R 12118 0 R 12128 0 R 12132 0 R 12140 0 R 12148 0 R]
+/Parent 17588 0 R
+/Kids [12096 0 R 12106 0 R 12116 0 R 12120 0 R 12128 0 R 12136 0 R]
 >> endobj
-12158 0 obj <<
+12146 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17600 0 R
-/Kids [12154 0 R 12160 0 R 12165 0 R 12171 0 R 12179 0 R 12185 0 R]
+/Parent 17589 0 R
+/Kids [12142 0 R 12148 0 R 12153 0 R 12159 0 R 12167 0 R 12173 0 R]
 >> endobj
-12193 0 obj <<
+12181 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17600 0 R
-/Kids [12190 0 R 12198 0 R 12205 0 R 12210 0 R 12215 0 R 12219 0 R]
+/Parent 17589 0 R
+/Kids [12178 0 R 12186 0 R 12193 0 R 12198 0 R 12203 0 R 12207 0 R]
 >> endobj
-12226 0 obj <<
+12214 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17600 0 R
-/Kids [12223 0 R 12359 0 R 12460 0 R 12616 0 R 12717 0 R 12830 0 R]
+/Parent 17589 0 R
+/Kids [12211 0 R 12347 0 R 12448 0 R 12604 0 R 12706 0 R 12819 0 R]
 >> endobj
-12942 0 obj <<
+12931 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17600 0 R
-/Kids [12939 0 R 13037 0 R 13152 0 R 13246 0 R 13371 0 R 13508 0 R]
+/Parent 17589 0 R
+/Kids [12928 0 R 13026 0 R 13141 0 R 13235 0 R 13360 0 R 13497 0 R]
 >> endobj
-13620 0 obj <<
+13609 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17600 0 R
-/Kids [13617 0 R 13721 0 R 13827 0 R 13941 0 R 14047 0 R 14168 0 R]
+/Parent 17589 0 R
+/Kids [13606 0 R 13710 0 R 13816 0 R 13931 0 R 14036 0 R 14157 0 R]
 >> endobj
-14282 0 obj <<
+14271 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17600 0 R
-/Kids [14279 0 R 14415 0 R 14521 0 R 14654 0 R 14739 0 R 14845 0 R]
+/Parent 17589 0 R
+/Kids [14268 0 R 14404 0 R 14510 0 R 14643 0 R 14728 0 R 14834 0 R]
 >> endobj
-14970 0 obj <<
+14959 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17601 0 R
-/Kids [14967 0 R 15078 0 R 15193 0 R 15318 0 R 15441 0 R 15615 0 R]
+/Parent 17590 0 R
+/Kids [14956 0 R 15067 0 R 15182 0 R 15307 0 R 15430 0 R 15604 0 R]
 >> endobj
-15743 0 obj <<
+15731 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17601 0 R
-/Kids [15740 0 R 15875 0 R 15979 0 R 16089 0 R 16248 0 R 16367 0 R]
+/Parent 17590 0 R
+/Kids [15728 0 R 15864 0 R 15968 0 R 16078 0 R 16237 0 R 16356 0 R]
 >> endobj
-16464 0 obj <<
+16453 0 obj <<
 /Type /Pages
 /Count 6
-/Parent 17601 0 R
-/Kids [16461 0 R 16573 0 R 16720 0 R 16834 0 R 16952 0 R 17073 0 R]
+/Parent 17590 0 R
+/Kids [16450 0 R 16562 0 R 16709 0 R 16823 0 R 16941 0 R 17062 0 R]
 >> endobj
-17187 0 obj <<
+17176 0 obj <<
 /Type /Pages
 /Count 4
-/Parent 17601 0 R
-/Kids [17184 0 R 17328 0 R 17452 0 R 17482 0 R]
+/Parent 17590 0 R
+/Kids [17173 0 R 17317 0 R 17441 0 R 17471 0 R]
 >> endobj
-17575 0 obj <<
+17564 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17602 0 R
+/Parent 17591 0 R
 /Kids [3693 0 R 3846 0 R 4021 0 R 4255 0 R 4494 0 R 4731 0 R]
 >> endobj
-17576 0 obj <<
+17565 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17602 0 R
+/Parent 17591 0 R
 /Kids [4963 0 R 5113 0 R 5303 0 R 5419 0 R 5454 0 R 5507 0 R]
 >> endobj
-17577 0 obj <<
+17566 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17602 0 R
+/Parent 17591 0 R
 /Kids [5562 0 R 5619 0 R 5728 0 R 5812 0 R 5885 0 R 6019 0 R]
 >> endobj
-17578 0 obj <<
+17567 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17602 0 R
-/Kids [6057 0 R 6116 0 R 6159 0 R 6202 0 R 6237 0 R 6321 0 R]
+/Parent 17591 0 R
+/Kids [6057 0 R 6116 0 R 6159 0 R 6201 0 R 6236 0 R 6320 0 R]
 >> endobj
-17579 0 obj <<
+17568 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17602 0 R
-/Kids [6364 0 R 6400 0 R 6462 0 R 6510 0 R 6558 0 R 6616 0 R]
+/Parent 17591 0 R
+/Kids [6363 0 R 6399 0 R 6461 0 R 6509 0 R 6557 0 R 6615 0 R]
 >> endobj
-17580 0 obj <<
+17569 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17602 0 R
-/Kids [6655 0 R 6708 0 R 6788 0 R 6875 0 R 6920 0 R 6943 0 R]
+/Parent 17591 0 R
+/Kids [6654 0 R 6707 0 R 6787 0 R 6874 0 R 6919 0 R 6942 0 R]
 >> endobj
-17581 0 obj <<
+17570 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17603 0 R
-/Kids [6986 0 R 7018 0 R 7059 0 R 7131 0 R 7179 0 R 7226 0 R]
+/Parent 17592 0 R
+/Kids [6985 0 R 7017 0 R 7058 0 R 7130 0 R 7178 0 R 7224 0 R]
 >> endobj
-17582 0 obj <<
+17571 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17603 0 R
-/Kids [7265 0 R 7327 0 R 7374 0 R 7412 0 R 7454 0 R 7497 0 R]
+/Parent 17592 0 R
+/Kids [7263 0 R 7321 0 R 7368 0 R 7406 0 R 7448 0 R 7491 0 R]
 >> endobj
-17583 0 obj <<
+17572 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17603 0 R
-/Kids [7580 0 R 7621 0 R 7689 0 R 7742 0 R 7773 0 R 7803 0 R]
+/Parent 17592 0 R
+/Kids [7574 0 R 7615 0 R 7678 0 R 7731 0 R 7762 0 R 7792 0 R]
 >> endobj
-17584 0 obj <<
+17573 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17603 0 R
-/Kids [7855 0 R 7884 0 R 7919 0 R 7949 0 R 7987 0 R 8032 0 R]
+/Parent 17592 0 R
+/Kids [7844 0 R 7873 0 R 7908 0 R 7938 0 R 7976 0 R 8021 0 R]
 >> endobj
-17585 0 obj <<
+17574 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17603 0 R
-/Kids [8124 0 R 8181 0 R 8215 0 R 8244 0 R 8300 0 R 8344 0 R]
+/Parent 17592 0 R
+/Kids [8113 0 R 8170 0 R 8204 0 R 8233 0 R 8287 0 R 8331 0 R]
 >> endobj
-17586 0 obj <<
+17575 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17603 0 R
-/Kids [8380 0 R 8425 0 R 8453 0 R 8490 0 R 8543 0 R 8591 0 R]
+/Parent 17592 0 R
+/Kids [8367 0 R 8412 0 R 8440 0 R 8477 0 R 8530 0 R 8578 0 R]
 >> endobj
-17587 0 obj <<
+17576 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17604 0 R
-/Kids [8641 0 R 8686 0 R 8730 0 R 8785 0 R 8853 0 R 8895 0 R]
+/Parent 17593 0 R
+/Kids [8628 0 R 8672 0 R 8716 0 R 8771 0 R 8839 0 R 8881 0 R]
 >> endobj
-17588 0 obj <<
+17577 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17604 0 R
-/Kids [8950 0 R 8985 0 R 9015 0 R 9056 0 R 9112 0 R 9140 0 R]
+/Parent 17593 0 R
+/Kids [8936 0 R 8971 0 R 9001 0 R 9042 0 R 9098 0 R 9126 0 R]
 >> endobj
-17589 0 obj <<
+17578 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17604 0 R
-/Kids [9184 0 R 9228 0 R 9306 0 R 9350 0 R 9386 0 R 9441 0 R]
+/Parent 17593 0 R
+/Kids [9170 0 R 9214 0 R 9295 0 R 9340 0 R 9375 0 R 9430 0 R]
 >> endobj
-17590 0 obj <<
+17579 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17604 0 R
-/Kids [9473 0 R 9538 0 R 9595 0 R 9657 0 R 9688 0 R 9735 0 R]
+/Parent 17593 0 R
+/Kids [9462 0 R 9525 0 R 9582 0 R 9645 0 R 9676 0 R 9723 0 R]
 >> endobj
-17591 0 obj <<
+17580 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17604 0 R
-/Kids [9770 0 R 9809 0 R 9869 0 R 9927 0 R 9963 0 R 10016 0 R]
+/Parent 17593 0 R
+/Kids [9758 0 R 9797 0 R 9857 0 R 9915 0 R 9951 0 R 10004 0 R]
 >> endobj
-17592 0 obj <<
+17581 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17604 0 R
-/Kids [10083 0 R 10142 0 R 10196 0 R 10231 0 R 10270 0 R 10327 0 R]
+/Parent 17593 0 R
+/Kids [10071 0 R 10130 0 R 10184 0 R 10219 0 R 10258 0 R 10315 0 R]
 >> endobj
-17593 0 obj <<
+17582 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17605 0 R
-/Kids [10364 0 R 10395 0 R 10436 0 R 10472 0 R 10511 0 R 10566 0 R]
+/Parent 17594 0 R
+/Kids [10352 0 R 10383 0 R 10424 0 R 10460 0 R 10499 0 R 10554 0 R]
 >> endobj
-17594 0 obj <<
+17583 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17605 0 R
-/Kids [10630 0 R 10682 0 R 10720 0 R 10761 0 R 10790 0 R 10823 0 R]
+/Parent 17594 0 R
+/Kids [10618 0 R 10670 0 R 10708 0 R 10749 0 R 10778 0 R 10811 0 R]
 >> endobj
-17595 0 obj <<
+17584 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17605 0 R
-/Kids [10855 0 R 10894 0 R 10935 0 R 10969 0 R 11015 0 R 11054 0 R]
+/Parent 17594 0 R
+/Kids [10843 0 R 10882 0 R 10923 0 R 10957 0 R 11003 0 R 11042 0 R]
 >> endobj
-17596 0 obj <<
+17585 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17605 0 R
-/Kids [11093 0 R 11161 0 R 11263 0 R 11314 0 R 11352 0 R 11394 0 R]
+/Parent 17594 0 R
+/Kids [11081 0 R 11149 0 R 11251 0 R 11302 0 R 11340 0 R 11382 0 R]
 >> endobj
-17597 0 obj <<
+17586 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17605 0 R
-/Kids [11438 0 R 11470 0 R 11510 0 R 11548 0 R 11607 0 R 11646 0 R]
+/Parent 17594 0 R
+/Kids [11426 0 R 11458 0 R 11498 0 R 11536 0 R 11595 0 R 11634 0 R]
 >> endobj
-17598 0 obj <<
+17587 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17605 0 R
-/Kids [11692 0 R 11725 0 R 11772 0 R 11802 0 R 11837 0 R 11895 0 R]
+/Parent 17594 0 R
+/Kids [11680 0 R 11713 0 R 11760 0 R 11790 0 R 11825 0 R 11883 0 R]
 >> endobj
-17599 0 obj <<
+17588 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17606 0 R
-/Kids [11934 0 R 11977 0 R 12011 0 R 12051 0 R 12077 0 R 12116 0 R]
+/Parent 17595 0 R
+/Kids [11922 0 R 11965 0 R 11999 0 R 12039 0 R 12065 0 R 12104 0 R]
 >> endobj
-17600 0 obj <<
+17589 0 obj <<
 /Type /Pages
 /Count 36
-/Parent 17606 0 R
-/Kids [12158 0 R 12193 0 R 12226 0 R 12942 0 R 13620 0 R 14282 0 R]
+/Parent 17595 0 R
+/Kids [12146 0 R 12181 0 R 12214 0 R 12931 0 R 13609 0 R 14271 0 R]
 >> endobj
-17601 0 obj <<
+17590 0 obj <<
 /Type /Pages
 /Count 22
-/Parent 17606 0 R
-/Kids [14970 0 R 15743 0 R 16464 0 R 17187 0 R]
+/Parent 17595 0 R
+/Kids [14959 0 R 15731 0 R 16453 0 R 17176 0 R]
 >> endobj
-17602 0 obj <<
+17591 0 obj <<
 /Type /Pages
 /Count 216
-/Parent 17607 0 R
-/Kids [17575 0 R 17576 0 R 17577 0 R 17578 0 R 17579 0 R 17580 0 R]
+/Parent 17596 0 R
+/Kids [17564 0 R 17565 0 R 17566 0 R 17567 0 R 17568 0 R 17569 0 R]
 >> endobj
-17603 0 obj <<
+17592 0 obj <<
 /Type /Pages
 /Count 216
-/Parent 17607 0 R
-/Kids [17581 0 R 17582 0 R 17583 0 R 17584 0 R 17585 0 R 17586 0 R]
+/Parent 17596 0 R
+/Kids [17570 0 R 17571 0 R 17572 0 R 17573 0 R 17574 0 R 17575 0 R]
 >> endobj
-17604 0 obj <<
+17593 0 obj <<
 /Type /Pages
 /Count 216
-/Parent 17607 0 R
-/Kids [17587 0 R 17588 0 R 17589 0 R 17590 0 R 17591 0 R 17592 0 R]
+/Parent 17596 0 R
+/Kids [17576 0 R 17577 0 R 17578 0 R 17579 0 R 17580 0 R 17581 0 R]
 >> endobj
-17605 0 obj <<
+17594 0 obj <<
 /Type /Pages
 /Count 216
-/Parent 17607 0 R
-/Kids [17593 0 R 17594 0 R 17595 0 R 17596 0 R 17597 0 R 17598 0 R]
+/Parent 17596 0 R
+/Kids [17582 0 R 17583 0 R 17584 0 R 17585 0 R 17586 0 R 17587 0 R]
 >> endobj
-17606 0 obj <<
+17595 0 obj <<
 /Type /Pages
 /Count 94
-/Parent 17607 0 R
-/Kids [17599 0 R 17600 0 R 17601 0 R]
+/Parent 17596 0 R
+/Kids [17588 0 R 17589 0 R 17590 0 R]
 >> endobj
-17607 0 obj <<
+17596 0 obj <<
 /Type /Pages
 /Count 958
-/Kids [17602 0 R 17603 0 R 17604 0 R 17605 0 R 17606 0 R]
+/Kids [17591 0 R 17592 0 R 17593 0 R 17594 0 R 17595 0 R]
 >> endobj
-17608 0 obj <<
+17597 0 obj <<
 /Type /Outlines
 /First 7 0 R
 /Last 3379 0 R
@@ -112347,7 +116075,7 @@
 3379 0 obj <<
 /Title 3380 0 R
 /A 3377 0 R
-/Parent 17608 0 R
+/Parent 17597 0 R
 /Prev 3283 0 R
 /First 3383 0 R
 /Last 3683 0 R
@@ -112521,7 +116249,7 @@
 3283 0 obj <<
 /Title 3284 0 R
 /A 3281 0 R
-/Parent 17608 0 R
+/Parent 17597 0 R
 /Prev 3091 0 R
 /Next 3379 0 R
 /First 3287 0 R
@@ -112871,7 +116599,7 @@
 3091 0 obj <<
 /Title 3092 0 R
 /A 3089 0 R
-/Parent 17608 0 R
+/Parent 17597 0 R
 /Prev 603 0 R
 /Next 3283 0 R
 /First 3095 0 R
@@ -117373,7 +121101,7 @@
 603 0 obj <<
 /Title 604 0 R
 /A 601 0 R
-/Parent 17608 0 R
+/Parent 17597 0 R
 /Prev 179 0 R
 /Next 3091 0 R
 /First 607 0 R
@@ -118147,7 +121875,7 @@
 179 0 obj <<
 /Title 180 0 R
 /A 177 0 R
-/Parent 17608 0 R
+/Parent 17597 0 R
 /Prev 43 0 R
 /Next 603 0 R
 /First 183 0 R
@@ -118396,7 +122124,7 @@
 43 0 obj <<
 /Title 44 0 R
 /A 41 0 R
-/Parent 17608 0 R
+/Parent 17597 0 R
 /Prev 39 0 R
 /Next 179 0 R
 /First 47 0 R
@@ -118406,22242 +122134,22246 @@
 39 0 obj <<
 /Title 40 0 R
 /A 37 0 R
-/Parent 17608 0 R
+/Parent 17597 0 R
 /Prev 35 0 R
 /Next 43 0 R
 >> endobj
 35 0 obj <<
 /Title 36 0 R
 /A 33 0 R
-/Parent 17608 0 R
+/Parent 17597 0 R
 /Prev 31 0 R
 /Next 39 0 R
 >> endobj
 31 0 obj <<
 /Title 32 0 R
 /A 29 0 R
-/Parent 17608 0 R
+/Parent 17597 0 R
 /Prev 27 0 R
 /Next 35 0 R
 >> endobj
 27 0 obj <<
 /Title 28 0 R
 /A 25 0 R
-/Parent 17608 0 R
+/Parent 17597 0 R
 /Prev 23 0 R
 /Next 31 0 R
 >> endobj
 23 0 obj <<
 /Title 24 0 R
 /A 21 0 R
-/Parent 17608 0 R
+/Parent 17597 0 R
 /Prev 19 0 R
 /Next 27 0 R
 >> endobj
 19 0 obj <<
 /Title 20 0 R
 /A 17 0 R
-/Parent 17608 0 R
+/Parent 17597 0 R
 /Prev 15 0 R
 /Next 23 0 R
 >> endobj
 15 0 obj <<
 /Title 16 0 R
 /A 13 0 R
-/Parent 17608 0 R
+/Parent 17597 0 R
 /Prev 11 0 R
 /Next 19 0 R
 >> endobj
 11 0 obj <<
 /Title 12 0 R
 /A 9 0 R
-/Parent 17608 0 R
+/Parent 17597 0 R
 /Prev 7 0 R
 /Next 15 0 R
 >> endobj
 7 0 obj <<
 /Title 8 0 R
 /A 5 0 R
-/Parent 17608 0 R
+/Parent 17597 0 R
 /Next 11 0 R
 >> endobj
-17609 0 obj <<
-/Names [(127) 5172 0 R (13small) 9573 0 R (149) 5311 0 R (153) 5196 0 R (187) 5234 0 R (1small) 9328 0 R]
+17598 0 obj <<
+/Names [(127) 5172 0 R (13small) 9560 0 R (149) 5311 0 R (153) 5196 0 R (187) 5234 0 R (1small) 9317 0 R]
 /Limits [(127) (1small)]
 >> endobj
-17610 0 obj <<
-/Names [(229) 5237 0 R (2small) 9342 0 R (3) 5304 0 R (301) 5354 0 R (311) 5241 0 R (369) 5243 0 R]
+17599 0 obj <<
+/Names [(229) 5237 0 R (2small) 9330 0 R (3) 5304 0 R (301) 5354 0 R (311) 5241 0 R (369) 5243 0 R]
 /Limits [(229) (369)]
 >> endobj
-17611 0 obj <<
-/Names [(383) 5361 0 R (3small) 9349 0 R (445) 5245 0 R (4small) 9402 0 R (549) 5364 0 R (565) 5265 0 R]
+17600 0 obj <<
+/Names [(383) 5361 0 R (3small) 9339 0 R (445) 5245 0 R (4small) 9391 0 R (549) 5364 0 R (565) 5265 0 R]
 /Limits [(383) (565)]
 >> endobj
-17612 0 obj <<
-/Names [(59) 5170 0 R (5small) 9409 0 R (611) 5366 0 R (637) 5370 0 R (657) 5372 0 R (671) 5375 0 R]
+17601 0 obj <<
+/Names [(59) 5170 0 R (5small) 9398 0 R (611) 5366 0 R (637) 5370 0 R (657) 5372 0 R (671) 5375 0 R]
 /Limits [(59) (671)]
 >> endobj
-17613 0 obj <<
+17602 0 obj <<
 /Names [(703) 5377 0 R (719) 5388 0 R (751) 5274 0 R (759) 5391 0 R (85) 5307 0 R (99) 5309 0 R]
 /Limits [(703) (99)]
 >> endobj
-17614 0 obj <<
-/Names [(AccessControls) 3815 0 R (AdvancedNetworkManagement) 3851 0 R (AnonPtrSvr) 6717 0 R (Appendix) 11732 0 R (Backup) 3887 0 R (CUPS-printing) 3848 0 R]
+17603 0 obj <<
+/Names [(AccessControls) 3815 0 R (AdvancedNetworkManagement) 3851 0 R (AnonPtrSvr) 6716 0 R (Appendix) 11720 0 R (Backup) 3887 0 R (CUPS-printing) 3848 0 R]
 /Limits [(AccessControls) (CUPS-printing)]
 >> endobj
-17615 0 obj <<
-/Names [(ChangeNotes) 3777 0 R (ClientConfig) 3776 0 R (DHCP) 6776 0 R (DMB) 6351 0 R (DNSDHCP) 3948 0 R (Doc-Start) 3690 0 R]
+17604 0 obj <<
+/Names [(ChangeNotes) 3777 0 R (ClientConfig) 3776 0 R (DHCP) 6775 0 R (DMB) 6350 0 R (DNSDHCP) 3948 0 R (Doc-Start) 3690 0 R]
 /Limits [(ChangeNotes) (Doc-Start)]
 >> endobj
-17616 0 obj <<
-/Names [(FastStart) 3740 0 R (InterdomainTrusts) 3818 0 R (IntroSMB) 5425 0 R (Item.1) 5597 0 R (Item.10) 5727 0 R (Item.100) 7023 0 R]
+17605 0 obj <<
+/Names [(FastStart) 3740 0 R (InterdomainTrusts) 3818 0 R (IntroSMB) 5425 0 R (Item.1) 5597 0 R (Item.10) 5727 0 R (Item.100) 7022 0 R]
 /Limits [(FastStart) (Item.100)]
 >> endobj
-17617 0 obj <<
-/Names [(Item.101) 7024 0 R (Item.102) 7105 0 R (Item.103) 7106 0 R (Item.104) 7107 0 R (Item.105) 7108 0 R (Item.106) 7232 0 R]
+17606 0 obj <<
+/Names [(Item.101) 7023 0 R (Item.102) 7104 0 R (Item.103) 7105 0 R (Item.104) 7106 0 R (Item.105) 7107 0 R (Item.106) 7230 0 R]
 /Limits [(Item.101) (Item.106)]
 >> endobj
-17618 0 obj <<
-/Names [(Item.107) 7233 0 R (Item.108) 7234 0 R (Item.109) 7366 0 R (Item.11) 5733 0 R (Item.110) 7367 0 R (Item.111) 7368 0 R]
+17607 0 obj <<
+/Names [(Item.107) 7231 0 R (Item.108) 7232 0 R (Item.109) 7360 0 R (Item.11) 5733 0 R (Item.110) 7361 0 R (Item.111) 7362 0 R]
 /Limits [(Item.107) (Item.111)]
 >> endobj
-17619 0 obj <<
-/Names [(Item.112) 7369 0 R (Item.113) 7370 0 R (Item.114) 7371 0 R (Item.115) 7372 0 R (Item.116) 7373 0 R (Item.117) 7434 0 R]
+17608 0 obj <<
+/Names [(Item.112) 7363 0 R (Item.113) 7364 0 R (Item.114) 7365 0 R (Item.115) 7366 0 R (Item.116) 7367 0 R (Item.117) 7428 0 R]
 /Limits [(Item.112) (Item.117)]
 >> endobj
-17620 0 obj <<
-/Names [(Item.118) 7435 0 R (Item.119) 7436 0 R (Item.12) 5734 0 R (Item.120) 7437 0 R (Item.121) 7438 0 R (Item.122) 7439 0 R]
+17609 0 obj <<
+/Names [(Item.118) 7429 0 R (Item.119) 7430 0 R (Item.12) 5734 0 R (Item.120) 7431 0 R (Item.121) 7432 0 R (Item.122) 7433 0 R]
 /Limits [(Item.118) (Item.122)]
 >> endobj
-17621 0 obj <<
-/Names [(Item.123) 7445 0 R (Item.124) 7446 0 R (Item.125) 7662 0 R (Item.126) 7663 0 R (Item.127) 7668 0 R (Item.128) 7685 0 R]
+17610 0 obj <<
+/Names [(Item.123) 7439 0 R (Item.124) 7440 0 R (Item.125) 7651 0 R (Item.126) 7652 0 R (Item.127) 7657 0 R (Item.128) 7674 0 R]
 /Limits [(Item.123) (Item.128)]
 >> endobj
-17622 0 obj <<
-/Names [(Item.129) 7686 0 R (Item.13) 5735 0 R (Item.130) 7733 0 R (Item.131) 7734 0 R (Item.132) 7735 0 R (Item.133) 7736 0 R]
+17611 0 obj <<
+/Names [(Item.129) 7675 0 R (Item.13) 5735 0 R (Item.130) 7722 0 R (Item.131) 7723 0 R (Item.132) 7724 0 R (Item.133) 7725 0 R]
 /Limits [(Item.129) (Item.133)]
 >> endobj
-17623 0 obj <<
-/Names [(Item.134) 7737 0 R (Item.135) 7738 0 R (Item.136) 7739 0 R (Item.137) 7740 0 R (Item.138) 7741 0 R (Item.139) 7811 0 R]
+17612 0 obj <<
+/Names [(Item.134) 7726 0 R (Item.135) 7727 0 R (Item.136) 7728 0 R (Item.137) 7729 0 R (Item.138) 7730 0 R (Item.139) 7800 0 R]
 /Limits [(Item.134) (Item.139)]
 >> endobj
-17624 0 obj <<
-/Names [(Item.14) 5740 0 R (Item.140) 7826 0 R (Item.141) 7827 0 R (Item.142) 7828 0 R (Item.143) 7916 0 R (Item.144) 7917 0 R]
+17613 0 obj <<
+/Names [(Item.14) 5740 0 R (Item.140) 7815 0 R (Item.141) 7816 0 R (Item.142) 7817 0 R (Item.143) 7905 0 R (Item.144) 7906 0 R]
 /Limits [(Item.14) (Item.144)]
 >> endobj
-17625 0 obj <<
-/Names [(Item.145) 8029 0 R (Item.146) 8030 0 R (Item.147) 8031 0 R (Item.148) 8052 0 R (Item.149) 8053 0 R (Item.15) 5741 0 R]
+17614 0 obj <<
+/Names [(Item.145) 8018 0 R (Item.146) 8019 0 R (Item.147) 8020 0 R (Item.148) 8041 0 R (Item.149) 8042 0 R (Item.15) 5741 0 R]
 /Limits [(Item.145) (Item.15)]
 >> endobj
-17626 0 obj <<
-/Names [(Item.150) 8054 0 R (Item.151) 8060 0 R (Item.152) 8089 0 R (Item.153) 8090 0 R (Item.154) 8091 0 R (Item.155) 8092 0 R]
+17615 0 obj <<
+/Names [(Item.150) 8043 0 R (Item.151) 8049 0 R (Item.152) 8078 0 R (Item.153) 8079 0 R (Item.154) 8080 0 R (Item.155) 8081 0 R]
 /Limits [(Item.150) (Item.155)]
 >> endobj
-17627 0 obj <<
-/Names [(Item.156) 8093 0 R (Item.157) 8130 0 R (Item.158) 8131 0 R (Item.159) 8132 0 R (Item.16) 5768 0 R (Item.160) 8133 0 R]
+17616 0 obj <<
+/Names [(Item.156) 8082 0 R (Item.157) 8119 0 R (Item.158) 8120 0 R (Item.159) 8121 0 R (Item.16) 5768 0 R (Item.160) 8122 0 R]
 /Limits [(Item.156) (Item.160)]
 >> endobj
-17628 0 obj <<
-/Names [(Item.161) 8134 0 R (Item.162) 8139 0 R (Item.163) 8140 0 R (Item.164) 8141 0 R (Item.165) 8286 0 R (Item.166) 8287 0 R]
+17617 0 obj <<
+/Names [(Item.161) 8123 0 R (Item.162) 8128 0 R (Item.163) 8129 0 R (Item.164) 8130 0 R (Item.165) 8273 0 R (Item.166) 8274 0 R]
 /Limits [(Item.161) (Item.166)]
 >> endobj
-17629 0 obj <<
-/Names [(Item.167) 8288 0 R (Item.168) 8320 0 R (Item.169) 8321 0 R (Item.17) 5769 0 R (Item.170) 8327 0 R (Item.171) 8328 0 R]
+17618 0 obj <<
+/Names [(Item.167) 8275 0 R (Item.168) 8307 0 R (Item.169) 8308 0 R (Item.17) 5769 0 R (Item.170) 8314 0 R (Item.171) 8315 0 R]
 /Limits [(Item.167) (Item.171)]
 >> endobj
-17630 0 obj <<
-/Names [(Item.172) 8329 0 R (Item.173) 8400 0 R (Item.174) 8401 0 R (Item.175) 8406 0 R (Item.176) 8407 0 R (Item.177) 8412 0 R]
+17619 0 obj <<
+/Names [(Item.172) 8316 0 R (Item.173) 8387 0 R (Item.174) 8388 0 R (Item.175) 8393 0 R (Item.176) 8394 0 R (Item.177) 8399 0 R]
 /Limits [(Item.172) (Item.177)]
 >> endobj
-17631 0 obj <<
-/Names [(Item.178) 8413 0 R (Item.179) 8415 0 R (Item.18) 5770 0 R (Item.180) 8761 0 R (Item.181) 8762 0 R (Item.182) 8763 0 R]
+17620 0 obj <<
+/Names [(Item.178) 8400 0 R (Item.179) 8402 0 R (Item.18) 5770 0 R (Item.180) 8747 0 R (Item.181) 8748 0 R (Item.182) 8749 0 R]
 /Limits [(Item.178) (Item.182)]
 >> endobj
-17632 0 obj <<
-/Names [(Item.183) 8764 0 R (Item.184) 8765 0 R (Item.185) 8766 0 R (Item.186) 8767 0 R (Item.187) 8972 0 R (Item.188) 8973 0 R]
+17621 0 obj <<
+/Names [(Item.183) 8750 0 R (Item.184) 8751 0 R (Item.185) 8752 0 R (Item.186) 8753 0 R (Item.187) 8958 0 R (Item.188) 8959 0 R]
 /Limits [(Item.183) (Item.188)]
 >> endobj
-17633 0 obj <<
-/Names [(Item.189) 8974 0 R (Item.19) 5801 0 R (Item.190) 8975 0 R (Item.191) 9041 0 R (Item.192) 9042 0 R (Item.193) 9043 0 R]
+17622 0 obj <<
+/Names [(Item.189) 8960 0 R (Item.19) 5801 0 R (Item.190) 8961 0 R (Item.191) 9027 0 R (Item.192) 9028 0 R (Item.193) 9029 0 R]
 /Limits [(Item.189) (Item.193)]
 >> endobj
-17634 0 obj <<
-/Names [(Item.194) 9044 0 R (Item.195) 9045 0 R (Item.196) 9051 0 R (Item.197) 9052 0 R (Item.198) 9053 0 R (Item.199) 9054 0 R]
+17623 0 obj <<
+/Names [(Item.194) 9030 0 R (Item.195) 9031 0 R (Item.196) 9037 0 R (Item.197) 9038 0 R (Item.198) 9039 0 R (Item.199) 9040 0 R]
 /Limits [(Item.194) (Item.199)]
 >> endobj
-17635 0 obj <<
-/Names [(Item.2) 5615 0 R (Item.20) 5802 0 R (Item.200) 9055 0 R (Item.201) 9061 0 R (Item.202) 9062 0 R (Item.203) 9063 0 R]
+17624 0 obj <<
+/Names [(Item.2) 5615 0 R (Item.20) 5802 0 R (Item.200) 9041 0 R (Item.201) 9047 0 R (Item.202) 9048 0 R (Item.203) 9049 0 R]
 /Limits [(Item.2) (Item.203)]
 >> endobj
-17636 0 obj <<
-/Names [(Item.204) 9064 0 R (Item.205) 9065 0 R (Item.206) 9079 0 R (Item.207) 9080 0 R (Item.208) 9081 0 R (Item.209) 9082 0 R]
+17625 0 obj <<
+/Names [(Item.204) 9050 0 R (Item.205) 9051 0 R (Item.206) 9065 0 R (Item.207) 9066 0 R (Item.208) 9067 0 R (Item.209) 9068 0 R]
 /Limits [(Item.204) (Item.209)]
 >> endobj
-17637 0 obj <<
-/Names [(Item.21) 5803 0 R (Item.210) 9088 0 R (Item.211) 9089 0 R (Item.212) 9090 0 R (Item.213) 9091 0 R (Item.214) 9092 0 R]
+17626 0 obj <<
+/Names [(Item.21) 5803 0 R (Item.210) 9074 0 R (Item.211) 9075 0 R (Item.212) 9076 0 R (Item.213) 9077 0 R (Item.214) 9078 0 R]
 /Limits [(Item.21) (Item.214)]
 >> endobj
-17638 0 obj <<
-/Names [(Item.215) 9093 0 R (Item.216) 9094 0 R (Item.217) 9095 0 R (Item.218) 9096 0 R (Item.219) 9097 0 R (Item.22) 5808 0 R]
+17627 0 obj <<
+/Names [(Item.215) 9079 0 R (Item.216) 9080 0 R (Item.217) 9081 0 R (Item.218) 9082 0 R (Item.219) 9083 0 R (Item.22) 5808 0 R]
 /Limits [(Item.215) (Item.22)]
 >> endobj
-17639 0 obj <<
-/Names [(Item.220) 9098 0 R (Item.221) 9171 0 R (Item.222) 9172 0 R (Item.223) 9173 0 R (Item.224) 9291 0 R (Item.225) 9296 0 R]
+17628 0 obj <<
+/Names [(Item.220) 9084 0 R (Item.221) 9157 0 R (Item.222) 9158 0 R (Item.223) 9159 0 R (Item.224) 9280 0 R (Item.225) 9285 0 R]
 /Limits [(Item.220) (Item.225)]
 >> endobj
-17640 0 obj <<
-/Names [(Item.226) 9297 0 R (Item.227) 9298 0 R (Item.228) 9299 0 R (Item.229) 9300 0 R (Item.23) 5809 0 R (Item.230) 9694 0 R]
+17629 0 obj <<
+/Names [(Item.226) 9286 0 R (Item.227) 9287 0 R (Item.228) 9288 0 R (Item.229) 9289 0 R (Item.23) 5809 0 R (Item.230) 9682 0 R]
 /Limits [(Item.226) (Item.230)]
 >> endobj
-17641 0 obj <<
-/Names [(Item.231) 9699 0 R (Item.232) 9700 0 R (Item.233) 9701 0 R (Item.234) 9702 0 R (Item.235) 9704 0 R (Item.236) 9709 0 R]
+17630 0 obj <<
+/Names [(Item.231) 9687 0 R (Item.232) 9688 0 R (Item.233) 9689 0 R (Item.234) 9690 0 R (Item.235) 9692 0 R (Item.236) 9697 0 R]
 /Limits [(Item.231) (Item.236)]
 >> endobj
-17642 0 obj <<
-/Names [(Item.237) 9710 0 R (Item.238) 9731 0 R (Item.239) 9732 0 R (Item.24) 5810 0 R (Item.240) 9733 0 R (Item.241) 9734 0 R]
+17631 0 obj <<
+/Names [(Item.237) 9698 0 R (Item.238) 9719 0 R (Item.239) 9720 0 R (Item.24) 5810 0 R (Item.240) 9721 0 R (Item.241) 9722 0 R]
 /Limits [(Item.237) (Item.241)]
 >> endobj
-17643 0 obj <<
-/Names [(Item.242) 9757 0 R (Item.243) 9762 0 R (Item.244) 9763 0 R (Item.245) 9768 0 R (Item.246) 9769 0 R (Item.247) 9775 0 R]
+17632 0 obj <<
+/Names [(Item.242) 9745 0 R (Item.243) 9750 0 R (Item.244) 9751 0 R (Item.245) 9756 0 R (Item.246) 9757 0 R (Item.247) 9763 0 R]
 /Limits [(Item.242) (Item.247)]
 >> endobj
-17644 0 obj <<
-/Names [(Item.248) 9776 0 R (Item.249) 9781 0 R (Item.25) 5811 0 R (Item.250) 9782 0 R (Item.251) 9783 0 R (Item.252) 9792 0 R]
+17633 0 obj <<
+/Names [(Item.248) 9764 0 R (Item.249) 9769 0 R (Item.25) 5811 0 R (Item.250) 9770 0 R (Item.251) 9771 0 R (Item.252) 9780 0 R]
 /Limits [(Item.248) (Item.252)]
 >> endobj
-17645 0 obj <<
-/Names [(Item.253) 9793 0 R (Item.254) 9794 0 R (Item.255) 9795 0 R (Item.256) 9800 0 R (Item.257) 10032 0 R (Item.258) 10033 0 R]
+17634 0 obj <<
+/Names [(Item.253) 9781 0 R (Item.254) 9782 0 R (Item.255) 9783 0 R (Item.256) 9788 0 R (Item.257) 10020 0 R (Item.258) 10021 0 R]
 /Limits [(Item.253) (Item.258)]
 >> endobj
-17646 0 obj <<
-/Names [(Item.259) 10034 0 R (Item.26) 5817 0 R (Item.260) 10035 0 R (Item.261) 10036 0 R (Item.262) 10037 0 R (Item.263) 10038 0 R]
+17635 0 obj <<
+/Names [(Item.259) 10022 0 R (Item.26) 5817 0 R (Item.260) 10023 0 R (Item.261) 10024 0 R (Item.262) 10025 0 R (Item.263) 10026 0 R]
 /Limits [(Item.259) (Item.263)]
 >> endobj
-17647 0 obj <<
-/Names [(Item.264) 10039 0 R (Item.265) 10040 0 R (Item.266) 10041 0 R (Item.267) 10042 0 R (Item.268) 10047 0 R (Item.269) 10048 0 R]
+17636 0 obj <<
+/Names [(Item.264) 10027 0 R (Item.265) 10028 0 R (Item.266) 10029 0 R (Item.267) 10030 0 R (Item.268) 10035 0 R (Item.269) 10036 0 R]
 /Limits [(Item.264) (Item.269)]
 >> endobj
-17648 0 obj <<
-/Names [(Item.27) 5826 0 R (Item.270) 10049 0 R (Item.271) 10050 0 R (Item.272) 10051 0 R (Item.273) 10052 0 R (Item.274) 10168 0 R]
+17637 0 obj <<
+/Names [(Item.27) 5826 0 R (Item.270) 10037 0 R (Item.271) 10038 0 R (Item.272) 10039 0 R (Item.273) 10040 0 R (Item.274) 10156 0 R]
 /Limits [(Item.27) (Item.274)]
 >> endobj
-17649 0 obj <<
-/Names [(Item.275) 10169 0 R (Item.276) 10174 0 R (Item.277) 10179 0 R (Item.278) 10188 0 R (Item.279) 10189 0 R (Item.28) 5827 0 R]
+17638 0 obj <<
+/Names [(Item.275) 10157 0 R (Item.276) 10162 0 R (Item.277) 10167 0 R (Item.278) 10176 0 R (Item.279) 10177 0 R (Item.28) 5827 0 R]
 /Limits [(Item.275) (Item.28)]
 >> endobj
-17650 0 obj <<
-/Names [(Item.280) 10190 0 R (Item.281) 10191 0 R (Item.282) 10192 0 R (Item.283) 10193 0 R (Item.284) 10180 0 R (Item.285) 10194 0 R]
+17639 0 obj <<
+/Names [(Item.280) 10178 0 R (Item.281) 10179 0 R (Item.282) 10180 0 R (Item.283) 10181 0 R (Item.284) 10168 0 R (Item.285) 10182 0 R]
 /Limits [(Item.280) (Item.285)]
 >> endobj
-17651 0 obj <<
-/Names [(Item.286) 10490 0 R (Item.287) 10491 0 R (Item.288) 10496 0 R (Item.289) 10497 0 R (Item.29) 5828 0 R (Item.290) 10519 0 R]
+17640 0 obj <<
+/Names [(Item.286) 10478 0 R (Item.287) 10479 0 R (Item.288) 10484 0 R (Item.289) 10485 0 R (Item.29) 5828 0 R (Item.290) 10507 0 R]
 /Limits [(Item.286) (Item.290)]
 >> endobj
-17652 0 obj <<
-/Names [(Item.291) 10520 0 R (Item.292) 10521 0 R (Item.293) 10522 0 R (Item.294) 10523 0 R (Item.295) 10528 0 R (Item.296) 10529 0 R]
+17641 0 obj <<
+/Names [(Item.291) 10508 0 R (Item.292) 10509 0 R (Item.293) 10510 0 R (Item.294) 10511 0 R (Item.295) 10516 0 R (Item.296) 10517 0 R]
 /Limits [(Item.291) (Item.296)]
 >> endobj
-17653 0 obj <<
-/Names [(Item.297) 10530 0 R (Item.298) 10531 0 R (Item.299) 10573 0 R (Item.3) 5616 0 R (Item.30) 5862 0 R (Item.300) 10574 0 R]
+17642 0 obj <<
+/Names [(Item.297) 10518 0 R (Item.298) 10519 0 R (Item.299) 10561 0 R (Item.3) 5616 0 R (Item.30) 5862 0 R (Item.300) 10562 0 R]
 /Limits [(Item.297) (Item.300)]
 >> endobj
-17654 0 obj <<
-/Names [(Item.301) 10579 0 R (Item.302) 10580 0 R (Item.303) 10585 0 R (Item.304) 10586 0 R (Item.305) 10587 0 R (Item.306) 10588 0 R]
+17643 0 obj <<
+/Names [(Item.301) 10567 0 R (Item.302) 10568 0 R (Item.303) 10573 0 R (Item.304) 10574 0 R (Item.305) 10575 0 R (Item.306) 10576 0 R]
 /Limits [(Item.301) (Item.306)]
 >> endobj
-17655 0 obj <<
-/Names [(Item.307) 10595 0 R (Item.308) 10596 0 R (Item.309) 10601 0 R (Item.31) 5868 0 R (Item.310) 10602 0 R (Item.311) 10603 0 R]
+17644 0 obj <<
+/Names [(Item.307) 10583 0 R (Item.308) 10584 0 R (Item.309) 10589 0 R (Item.31) 5868 0 R (Item.310) 10590 0 R (Item.311) 10591 0 R]
 /Limits [(Item.307) (Item.311)]
 >> endobj
-17656 0 obj <<
-/Names [(Item.312) 10604 0 R (Item.313) 10605 0 R (Item.314) 10606 0 R (Item.315) 10607 0 R (Item.316) 10608 0 R (Item.317) 10615 0 R]
+17645 0 obj <<
+/Names [(Item.312) 10592 0 R (Item.313) 10593 0 R (Item.314) 10594 0 R (Item.315) 10595 0 R (Item.316) 10596 0 R (Item.317) 10603 0 R]
 /Limits [(Item.312) (Item.317)]
 >> endobj
-17657 0 obj <<
-/Names [(Item.318) 10616 0 R (Item.319) 10617 0 R (Item.32) 5876 0 R (Item.320) 10618 0 R (Item.321) 10619 0 R (Item.322) 10620 0 R]
+17646 0 obj <<
+/Names [(Item.318) 10604 0 R (Item.319) 10605 0 R (Item.32) 5876 0 R (Item.320) 10606 0 R (Item.321) 10607 0 R (Item.322) 10608 0 R]
 /Limits [(Item.318) (Item.322)]
 >> endobj
-17658 0 obj <<
-/Names [(Item.323) 10621 0 R (Item.324) 10622 0 R (Item.325) 10623 0 R (Item.326) 10624 0 R (Item.327) 10625 0 R (Item.328) 10626 0 R]
+17647 0 obj <<
+/Names [(Item.323) 10609 0 R (Item.324) 10610 0 R (Item.325) 10611 0 R (Item.326) 10612 0 R (Item.327) 10613 0 R (Item.328) 10614 0 R]
 /Limits [(Item.323) (Item.328)]
 >> endobj
-17659 0 obj <<
-/Names [(Item.329) 10627 0 R (Item.33) 5877 0 R (Item.330) 10628 0 R (Item.331) 10629 0 R (Item.332) 10645 0 R (Item.333) 10646 0 R]
+17648 0 obj <<
+/Names [(Item.329) 10615 0 R (Item.33) 5877 0 R (Item.330) 10616 0 R (Item.331) 10617 0 R (Item.332) 10633 0 R (Item.333) 10634 0 R]
 /Limits [(Item.329) (Item.333)]
 >> endobj
-17660 0 obj <<
-/Names [(Item.334) 10647 0 R (Item.335) 10648 0 R (Item.336) 10649 0 R (Item.337) 10650 0 R (Item.338) 10651 0 R (Item.339) 10681 0 R]
+17649 0 obj <<
+/Names [(Item.334) 10635 0 R (Item.335) 10636 0 R (Item.336) 10637 0 R (Item.337) 10638 0 R (Item.338) 10639 0 R (Item.339) 10669 0 R]
 /Limits [(Item.334) (Item.339)]
 >> endobj
-17661 0 obj <<
-/Names [(Item.34) 5882 0 R (Item.340) 10687 0 R (Item.341) 10688 0 R (Item.342) 10689 0 R (Item.343) 11280 0 R (Item.344) 11285 0 R]
+17650 0 obj <<
+/Names [(Item.34) 5882 0 R (Item.340) 10675 0 R (Item.341) 10676 0 R (Item.342) 10677 0 R (Item.343) 11268 0 R (Item.344) 11273 0 R]
 /Limits [(Item.34) (Item.344)]
 >> endobj
-17662 0 obj <<
-/Names [(Item.345) 11286 0 R (Item.346) 11287 0 R (Item.347) 11288 0 R (Item.348) 11289 0 R (Item.349) 11290 0 R (Item.35) 5883 0 R]
+17651 0 obj <<
+/Names [(Item.345) 11274 0 R (Item.346) 11275 0 R (Item.347) 11276 0 R (Item.348) 11277 0 R (Item.349) 11278 0 R (Item.35) 5883 0 R]
 /Limits [(Item.345) (Item.35)]
 >> endobj
-17663 0 obj <<
-/Names [(Item.350) 11291 0 R (Item.351) 11292 0 R (Item.352) 11293 0 R (Item.353) 11294 0 R (Item.354) 11295 0 R (Item.355) 11296 0 R]
+17652 0 obj <<
+/Names [(Item.350) 11279 0 R (Item.351) 11280 0 R (Item.352) 11281 0 R (Item.353) 11282 0 R (Item.354) 11283 0 R (Item.355) 11284 0 R]
 /Limits [(Item.350) (Item.355)]
 >> endobj
-17664 0 obj <<
-/Names [(Item.356) 11297 0 R (Item.357) 11342 0 R (Item.358) 11343 0 R (Item.359) 11350 0 R (Item.36) 5884 0 R (Item.360) 11351 0 R]
+17653 0 obj <<
+/Names [(Item.356) 11285 0 R (Item.357) 11330 0 R (Item.358) 11331 0 R (Item.359) 11338 0 R (Item.36) 5884 0 R (Item.360) 11339 0 R]
 /Limits [(Item.356) (Item.360)]
 >> endobj
-17665 0 obj <<
-/Names [(Item.361) 11418 0 R (Item.362) 11419 0 R (Item.363) 11420 0 R (Item.364) 11421 0 R (Item.365) 11422 0 R (Item.366) 11423 0 R]
+17654 0 obj <<
+/Names [(Item.361) 11406 0 R (Item.362) 11407 0 R (Item.363) 11408 0 R (Item.364) 11409 0 R (Item.365) 11410 0 R (Item.366) 11411 0 R]
 /Limits [(Item.361) (Item.366)]
 >> endobj
-17666 0 obj <<
-/Names [(Item.367) 11485 0 R (Item.368) 11486 0 R (Item.369) 11487 0 R (Item.37) 5894 0 R (Item.370) 11488 0 R (Item.371) 11547 0 R]
+17655 0 obj <<
+/Names [(Item.367) 11473 0 R (Item.368) 11474 0 R (Item.369) 11475 0 R (Item.37) 5894 0 R (Item.370) 11476 0 R (Item.371) 11535 0 R]
 /Limits [(Item.367) (Item.371)]
 >> endobj
-17667 0 obj <<
-/Names [(Item.372) 11553 0 R (Item.373) 11558 0 R (Item.374) 11568 0 R (Item.375) 11569 0 R (Item.376) 11570 0 R (Item.377) 11571 0 R]
+17656 0 obj <<
+/Names [(Item.372) 11541 0 R (Item.373) 11546 0 R (Item.374) 11556 0 R (Item.375) 11557 0 R (Item.376) 11558 0 R (Item.377) 11559 0 R]
 /Limits [(Item.372) (Item.377)]
 >> endobj
-17668 0 obj <<
-/Names [(Item.378) 11572 0 R (Item.379) 11579 0 R (Item.38) 5895 0 R (Item.380) 11580 0 R (Item.381) 11581 0 R (Item.382) 11582 0 R]
+17657 0 obj <<
+/Names [(Item.378) 11560 0 R (Item.379) 11567 0 R (Item.38) 5895 0 R (Item.380) 11568 0 R (Item.381) 11569 0 R (Item.382) 11570 0 R]
 /Limits [(Item.378) (Item.382)]
 >> endobj
-17669 0 obj <<
-/Names [(Item.383) 11583 0 R (Item.384) 11584 0 R (Item.385) 11585 0 R (Item.386) 11586 0 R (Item.387) 11591 0 R (Item.388) 11592 0 R]
+17658 0 obj <<
+/Names [(Item.383) 11571 0 R (Item.384) 11572 0 R (Item.385) 11573 0 R (Item.386) 11574 0 R (Item.387) 11579 0 R (Item.388) 11580 0 R]
 /Limits [(Item.383) (Item.388)]
 >> endobj
-17670 0 obj <<
-/Names [(Item.389) 11593 0 R (Item.39) 5896 0 R (Item.390) 11594 0 R (Item.391) 11595 0 R (Item.392) 11596 0 R (Item.393) 11601 0 R]
+17659 0 obj <<
+/Names [(Item.389) 11581 0 R (Item.39) 5896 0 R (Item.390) 11582 0 R (Item.391) 11583 0 R (Item.392) 11584 0 R (Item.393) 11589 0 R]
 /Limits [(Item.389) (Item.393)]
 >> endobj
-17671 0 obj <<
-/Names [(Item.394) 11602 0 R (Item.395) 11603 0 R (Item.396) 11604 0 R (Item.397) 11605 0 R (Item.398) 11606 0 R (Item.399) 11612 0 R]
+17660 0 obj <<
+/Names [(Item.394) 11590 0 R (Item.395) 11591 0 R (Item.396) 11592 0 R (Item.397) 11593 0 R (Item.398) 11594 0 R (Item.399) 11600 0 R]
 /Limits [(Item.394) (Item.399)]
 >> endobj
-17672 0 obj <<
-/Names [(Item.4) 5617 0 R (Item.40) 5897 0 R (Item.400) 11744 0 R (Item.401) 11745 0 R (Item.402) 11753 0 R (Item.403) 11974 0 R]
+17661 0 obj <<
+/Names [(Item.4) 5617 0 R (Item.40) 5897 0 R (Item.400) 11732 0 R (Item.401) 11733 0 R (Item.402) 11741 0 R (Item.403) 11962 0 R]
 /Limits [(Item.4) (Item.403)]
 >> endobj
-17673 0 obj <<
-/Names [(Item.404) 11975 0 R (Item.405) 11982 0 R (Item.406) 11983 0 R (Item.407) 12047 0 R (Item.408) 12048 0 R (Item.409) 12049 0 R]
+17662 0 obj <<
+/Names [(Item.404) 11963 0 R (Item.405) 11970 0 R (Item.406) 11971 0 R (Item.407) 12035 0 R (Item.408) 12036 0 R (Item.409) 12037 0 R]
 /Limits [(Item.404) (Item.409)]
 >> endobj
-17674 0 obj <<
-/Names [(Item.41) 5900 0 R (Item.410) 12112 0 R (Item.411) 12113 0 R (Item.412) 12114 0 R (Item.413) 12115 0 R (Item.414) 12122 0 R]
+17663 0 obj <<
+/Names [(Item.41) 5900 0 R (Item.410) 12100 0 R (Item.411) 12101 0 R (Item.412) 12102 0 R (Item.413) 12103 0 R (Item.414) 12110 0 R]
 /Limits [(Item.41) (Item.414)]
 >> endobj
-17675 0 obj <<
-/Names [(Item.415) 12123 0 R (Item.416) 12124 0 R (Item.417) 12125 0 R (Item.418) 12126 0 R (Item.419) 12136 0 R (Item.42) 5901 0 R]
+17664 0 obj <<
+/Names [(Item.415) 12111 0 R (Item.416) 12112 0 R (Item.417) 12113 0 R (Item.418) 12114 0 R (Item.419) 12124 0 R (Item.42) 5901 0 R]
 /Limits [(Item.415) (Item.42)]
 >> endobj
-17676 0 obj <<
-/Names [(Item.420) 12137 0 R (Item.421) 12138 0 R (Item.422) 12143 0 R (Item.423) 12144 0 R (Item.424) 12145 0 R (Item.43) 6055 0 R]
+17665 0 obj <<
+/Names [(Item.420) 12125 0 R (Item.421) 12126 0 R (Item.422) 12131 0 R (Item.423) 12132 0 R (Item.424) 12133 0 R (Item.43) 6055 0 R]
 /Limits [(Item.420) (Item.43)]
 >> endobj
-17677 0 obj <<
+17666 0 obj <<
 /Names [(Item.44) 6056 0 R (Item.45) 6078 0 R (Item.46) 6079 0 R (Item.47) 6080 0 R (Item.48) 6085 0 R (Item.49) 6086 0 R]
 /Limits [(Item.44) (Item.49)]
 >> endobj
-17678 0 obj <<
-/Names [(Item.5) 5618 0 R (Item.50) 6331 0 R (Item.51) 6332 0 R (Item.52) 6333 0 R (Item.53) 6334 0 R (Item.54) 6335 0 R]
+17667 0 obj <<
+/Names [(Item.5) 5618 0 R (Item.50) 6330 0 R (Item.51) 6331 0 R (Item.52) 6332 0 R (Item.53) 6333 0 R (Item.54) 6334 0 R]
 /Limits [(Item.5) (Item.54)]
 >> endobj
-17679 0 obj <<
-/Names [(Item.55) 6336 0 R (Item.56) 6337 0 R (Item.57) 6539 0 R (Item.58) 6540 0 R (Item.59) 6541 0 R (Item.6) 5625 0 R]
+17668 0 obj <<
+/Names [(Item.55) 6335 0 R (Item.56) 6336 0 R (Item.57) 6538 0 R (Item.58) 6539 0 R (Item.59) 6540 0 R (Item.6) 5625 0 R]
 /Limits [(Item.55) (Item.6)]
 >> endobj
-17680 0 obj <<
-/Names [(Item.60) 6542 0 R (Item.61) 6543 0 R (Item.62) 6544 0 R (Item.63) 6704 0 R (Item.64) 6705 0 R (Item.65) 6706 0 R]
+17669 0 obj <<
+/Names [(Item.60) 6541 0 R (Item.61) 6542 0 R (Item.62) 6543 0 R (Item.63) 6703 0 R (Item.64) 6704 0 R (Item.65) 6705 0 R]
 /Limits [(Item.60) (Item.65)]
 >> endobj
-17681 0 obj <<
-/Names [(Item.66) 6707 0 R (Item.67) 6759 0 R (Item.68) 6760 0 R (Item.69) 6773 0 R (Item.7) 5626 0 R (Item.70) 6774 0 R]
+17670 0 obj <<
+/Names [(Item.66) 6706 0 R (Item.67) 6758 0 R (Item.68) 6759 0 R (Item.69) 6772 0 R (Item.7) 5626 0 R (Item.70) 6773 0 R]
 /Limits [(Item.66) (Item.70)]
 >> endobj
-17682 0 obj <<
-/Names [(Item.71) 6775 0 R (Item.72) 6786 0 R (Item.73) 6787 0 R (Item.74) 6802 0 R (Item.75) 6803 0 R (Item.76) 6804 0 R]
+17671 0 obj <<
+/Names [(Item.71) 6774 0 R (Item.72) 6785 0 R (Item.73) 6786 0 R (Item.74) 6801 0 R (Item.75) 6802 0 R (Item.76) 6803 0 R]
 /Limits [(Item.71) (Item.76)]
 >> endobj
-17683 0 obj <<
-/Names [(Item.77) 6813 0 R (Item.78) 6827 0 R (Item.79) 6828 0 R (Item.8) 5689 0 R (Item.80) 6829 0 R (Item.81) 6840 0 R]
+17672 0 obj <<
+/Names [(Item.77) 6812 0 R (Item.78) 6826 0 R (Item.79) 6827 0 R (Item.8) 5689 0 R (Item.80) 6828 0 R (Item.81) 6839 0 R]
 /Limits [(Item.77) (Item.81)]
 >> endobj
-17684 0 obj <<
-/Names [(Item.82) 6841 0 R (Item.83) 6857 0 R (Item.84) 6858 0 R (Item.85) 6859 0 R (Item.86) 6860 0 R (Item.87) 6861 0 R]
+17673 0 obj <<
+/Names [(Item.82) 6840 0 R (Item.83) 6856 0 R (Item.84) 6857 0 R (Item.85) 6858 0 R (Item.86) 6859 0 R (Item.87) 6860 0 R]
 /Limits [(Item.82) (Item.87)]
 >> endobj
-17685 0 obj <<
-/Names [(Item.88) 6862 0 R (Item.89) 6872 0 R (Item.9) 5726 0 R (Item.90) 6873 0 R (Item.91) 6886 0 R (Item.92) 6887 0 R]
+17674 0 obj <<
+/Names [(Item.88) 6861 0 R (Item.89) 6871 0 R (Item.9) 5726 0 R (Item.90) 6872 0 R (Item.91) 6885 0 R (Item.92) 6886 0 R]
 /Limits [(Item.88) (Item.92)]
 >> endobj
-17686 0 obj <<
-/Names [(Item.93) 6888 0 R (Item.94) 6899 0 R (Item.95) 6900 0 R (Item.96) 7014 0 R (Item.97) 7015 0 R (Item.98) 7016 0 R]
+17675 0 obj <<
+/Names [(Item.93) 6887 0 R (Item.94) 6898 0 R (Item.95) 6899 0 R (Item.96) 7013 0 R (Item.97) 7014 0 R (Item.98) 7015 0 R]
 /Limits [(Item.93) (Item.98)]
 >> endobj
-17687 0 obj <<
-/Names [(Item.99) 7017 0 R (NT4Migration) 3923 0 R (NetCommand) 3812 0 R (NetworkBrowsing) 3778 0 R (OfficeServer) 5696 0 R (Other-Clients) 3930 0 R]
+17676 0 obj <<
+/Names [(Item.99) 7016 0 R (NT4Migration) 3923 0 R (NetCommand) 3812 0 R (NetworkBrowsing) 3778 0 R (OfficeServer) 5696 0 R (Other-Clients) 3930 0 R]
 /Limits [(Item.99) (Other-Clients)]
 >> endobj
-17688 0 obj <<
-/Names [(PDC-config) 6310 0 R (PolicyMgmt) 3882 0 R (Portability) 3929 0 R (ProfileLocs) 10696 0 R (ProfileMgmt) 3883 0 R (RefDocServer) 5589 0 R]
+17677 0 obj <<
+/Names [(PDC-config) 6309 0 R (PolicyMgmt) 3882 0 R (Portability) 3929 0 R (ProfileLocs) 10684 0 R (ProfileMgmt) 3883 0 R (RefDocServer) 5589 0 R]
 /Limits [(PDC-config) (RefDocServer)]
 >> endobj
-17689 0 obj <<
-/Names [(SWAT) 3924 0 R (SambaHA) 3888 0 R (ServerType) 3741 0 R (SimplePrintServer) 5590 0 R (StandAloneServer) 3775 0 R (TOSH-Accesstbl) 8251 0 R]
+17678 0 obj <<
+/Names [(SWAT) 3924 0 R (SambaHA) 3888 0 R (ServerType) 3741 0 R (SimplePrintServer) 5590 0 R (StandAloneServer) 3775 0 R (TOSH-Accesstbl) 8240 0 R]
 /Limits [(SWAT) (TOSH-Accesstbl)]
 >> endobj
-17690 0 obj <<
-/Names [(TOSH-domgroups) 6981 0 R (TOSHARG-acctflags) 7399 0 R (TOSHpreface) 5411 0 R (Tpees) 10451 0 R (VFS) 3849 0 R (WKURIDS) 7696 0 R]
+17679 0 obj <<
+/Names [(TOSH-domgroups) 6980 0 R (TOSHARG-acctflags) 7393 0 R (TOSHpreface) 5411 0 R (Tpees) 10439 0 R (VFS) 3849 0 R (WKURIDS) 7685 0 R]
 /Limits [(TOSH-domgroups) (WKURIDS)]
 >> endobj
-17691 0 obj <<
-/Names [(WME001) 6830 0 R (WME002) 6831 0 R (WME003) 6844 0 R (WME005) 6843 0 R (WME009) 6889 0 R (WME010) 6890 0 R]
+17680 0 obj <<
+/Names [(WME001) 6829 0 R (WME002) 6830 0 R (WME003) 6843 0 R (WME005) 6842 0 R (WME009) 6888 0 R (WME010) 6889 0 R]
 /Limits [(WME001) (WME010)]
 >> endobj
-17692 0 obj <<
-/Names [(WME013) 6902 0 R (WME014) 6903 0 R (WXPP002) 6761 0 R (WXPP003) 6762 0 R (WXPP005) 6777 0 R (WXPP009) 6789 0 R]
+17681 0 obj <<
+/Names [(WME013) 6901 0 R (WME014) 6902 0 R (WXPP002) 6760 0 R (WXPP003) 6761 0 R (WXPP005) 6776 0 R (WXPP009) 6788 0 R]
 /Limits [(WME013) (WXPP009)]
 >> endobj
-17693 0 obj <<
-/Names [(WXPP014) 6778 0 R (a_small) 10066 0 R (access1) 8260 0 R (access2) 8265 0 R (accountflags) 7419 0 R (acctmgmttools) 7355 0 R]
+17682 0 obj <<
+/Names [(WXPP014) 6777 0 R (a_small) 10054 0 R (access1) 8249 0 R (access2) 8254 0 R (accountflags) 7413 0 R (acctmgmttools) 7349 0 R]
 /Limits [(WXPP014) (acctmgmttools)]
 >> endobj
-17694 0 obj <<
-/Names [(ads-create-machine-account) 6632 0 R (ads-member) 6111 0 R (ads-test-server) 6634 0 R (ads-test-smbclient) 6633 0 R (adsdnstech) 6448 0 R (anon-example) 5603 0 R]
+17683 0 obj <<
+/Names [(ads-create-machine-account) 6631 0 R (ads-member) 6111 0 R (ads-test-server) 6633 0 R (ads-test-smbclient) 6632 0 R (adsdnstech) 6447 0 R (anon-example) 5603 0 R]
 /Limits [(ads-create-machine-account) (anon-example)]
 >> endobj
-17695 0 obj <<
-/Names [(anon-print) 5654 0 R (anon-ro) 5588 0 R (anon-rw) 5634 0 R (appendix*.59) 3682 0 R (appendix.A) 3674 0 R (assumptions) 6567 0 R]
+17684 0 obj <<
+/Names [(anon-print) 5654 0 R (anon-ro) 5588 0 R (anon-rw) 5634 0 R (appendix*.59) 3682 0 R (appendix.A) 3674 0 R (assumptions) 6566 0 R]
 /Limits [(anon-print) (assumptions)]
 >> endobj
-17696 0 obj <<
-/Names [(attribobjclPartA) 7573 0 R (attribobjclPartB) 7574 0 R (autopoweruserscript) 7810 0 R (browse-force-master) 7095 0 R (browsing1) 7202 0 R (browsubnet) 7218 0 R]
+17685 0 obj <<
+/Names [(attribobjclPartA) 7567 0 R (attribobjclPartB) 7568 0 R (autopoweruserscript) 7799 0 R (browse-force-master) 7094 0 R (browsing1) 7201 0 R (browsubnet) 7216 0 R]
 /Limits [(attribobjclPartA) (browsubnet)]
 >> endobj
-17697 0 obj <<
-/Names [(brsbex) 7219 0 R (brsex2) 7225 0 R (brsex3) 7227 0 R (bugreport) 3927 0 R (cdserver) 11162 0 R (cfgsmarts) 3890 0 R]
+17686 0 obj <<
+/Names [(brsbex) 7217 0 R (brsex2) 7223 0 R (brsex3) 7225 0 R (bugreport) 3927 0 R (cdserver) 11150 0 R (cfgsmarts) 3890 0 R]
 /Limits [(brsbex) (cfgsmarts)]
 >> endobj
-17698 0 obj <<
-/Names [(ch-ldap-tls) 3947 0 R (chapter*.10) 5424 0 R (chapter*.15) 5460 0 R (chapter*.19) 6025 0 R (chapter*.2) 10 0 R (chapter*.21) 6949 0 R]
+17687 0 obj <<
+/Names [(ch-ldap-tls) 3947 0 R (chapter*.10) 5424 0 R (chapter*.15) 5460 0 R (chapter*.19) 6025 0 R (chapter*.2) 10 0 R (chapter*.21) 6948 0 R]
 /Limits [(ch-ldap-tls) (chapter*.21)]
 >> endobj
-17699 0 obj <<
+17688 0 obj <<
 /Names [(chapter*.3) 18 0 R (chapter*.4) 22 0 R (chapter*.5) 26 0 R (chapter*.6) 30 0 R (chapter*.7) 34 0 R (chapter*.8) 5410 0 R]
 /Limits [(chapter*.3) (chapter*.8)]
 >> endobj
-17700 0 obj <<
+17689 0 obj <<
 /Names [(chapter.1) 50 0 R (chapter.10) 642 0 R (chapter.11) 778 0 R (chapter.12) 926 0 R (chapter.13) 986 0 R (chapter.14) 1142 0 R]
 /Limits [(chapter.1) (chapter.14)]
 >> endobj
-17701 0 obj <<
+17690 0 obj <<
 /Names [(chapter.15) 1202 0 R (chapter.16) 1234 0 R (chapter.17) 1366 0 R (chapter.18) 1470 0 R (chapter.19) 1526 0 R (chapter.2) 122 0 R]
 /Limits [(chapter.15) (chapter.2)]
 >> endobj
-17702 0 obj <<
+17691 0 obj <<
 /Names [(chapter.20) 1582 0 R (chapter.21) 1598 0 R (chapter.22) 1834 0 R (chapter.23) 2378 0 R (chapter.24) 2446 0 R (chapter.25) 2558 0 R]
 /Limits [(chapter.20) (chapter.25)]
 >> endobj
-17703 0 obj <<
+17692 0 obj <<
 /Names [(chapter.26) 2594 0 R (chapter.27) 2662 0 R (chapter.28) 2786 0 R (chapter.29) 2858 0 R (chapter.3) 186 0 R (chapter.30) 2930 0 R]
 /Limits [(chapter.26) (chapter.30)]
 >> endobj
-17704 0 obj <<
+17693 0 obj <<
 /Names [(chapter.31) 2974 0 R (chapter.32) 3002 0 R (chapter.33) 3066 0 R (chapter.34) 3070 0 R (chapter.35) 3094 0 R (chapter.36) 3162 0 R]
 /Limits [(chapter.31) (chapter.36)]
 >> endobj
-17705 0 obj <<
+17694 0 obj <<
 /Names [(chapter.37) 3210 0 R (chapter.38) 3286 0 R (chapter.39) 3302 0 R (chapter.4) 270 0 R (chapter.40) 3346 0 R (chapter.41) 3382 0 R]
 /Limits [(chapter.37) (chapter.41)]
 >> endobj
-17706 0 obj <<
+17695 0 obj <<
 /Names [(chapter.42) 3454 0 R (chapter.43) 3490 0 R (chapter.44) 3558 0 R (chapter.45) 3610 0 R (chapter.46) 3642 0 R (chapter.47) 3654 0 R]
 /Limits [(chapter.42) (chapter.47)]
 >> endobj
-17707 0 obj <<
+17696 0 obj <<
 /Names [(chapter.5) 358 0 R (chapter.6) 430 0 R (chapter.7) 534 0 R (chapter.8) 562 0 R (chapter.9) 610 0 R (classicalprinting) 3847 0 R]
 /Limits [(chapter.5) (classicalprinting)]
 >> endobj
-17708 0 obj <<
-/Names [(compiling) 3928 0 R (confldapex) 7529 0 R (cups-avoidps1) 9158 0 R (cups-exam-simple) 9235 0 R (cups-msrpc) 8869 0 R (cups-ppds) 9481 0 R]
+17697 0 obj <<
+/Names [(compiling) 3928 0 R (confldapex) 7523 0 R (cups-avoidps1) 9144 0 R (cups-exam-simple) 9221 0 R (cups-msrpc) 8855 0 R (cups-ppds) 9470 0 R]
 /Limits [(compiling) (cups-ppds)]
 >> endobj
-17709 0 obj <<
-/Names [(cups-raster) 9421 0 R (cups-raster2) 9423 0 R (cups-raw) 5690 0 R (cups1) 9988 0 R (cups2) 9999 0 R (cupsadd-ex) 9617 0 R]
+17698 0 obj <<
+/Names [(cups-raster) 9410 0 R (cups-raster2) 9412 0 R (cups-raw) 5690 0 R (cups1) 9976 0 R (cups2) 9987 0 R (cupsadd-ex) 9604 0 R]
 /Limits [(cups-raster) (cupsadd-ex)]
 >> endobj
-17710 0 obj <<
-/Names [(cupsomatic-dia) 9489 0 R (dbgclass) 11703 0 R (dbglvl) 8119 0 R (defregpthkeys) 10708 0 R (dfscfg) 8717 0 R (diagnosis) 3925 0 R]
+17699 0 obj <<
+/Names [(cupsomatic-dia) 9478 0 R (dbgclass) 11691 0 R (dbglvl) 8108 0 R (defregpthkeys) 10696 0 R (dfscfg) 8703 0 R (diagnosis) 3925 0 R]
 /Limits [(cupsomatic-dia) (diagnosis)]
 >> endobj
-17711 0 obj <<
-/Names [(dmbexample) 7052 0 R (domain-example) 6166 0 R (domain-member) 3744 0 R (domain-member-server) 6559 0 R (elastic) 11131 0 R (ethereal1) 11635 0 R]
+17700 0 obj <<
+/Names [(dmbexample) 7051 0 R (domain-example) 6166 0 R (domain-member) 3744 0 R (domain-member-server) 6558 0 R (elastic) 11119 0 R (ethereal1) 11623 0 R]
 /Limits [(dmbexample) (ethereal1)]
 >> endobj
-17712 0 obj <<
-/Names [(ethereal2) 11645 0 R (example.1.2.1) 5011 0 R (example.1.2.2) 5012 0 R (example.10.4.1) 5053 0 R (example.10.4.2) 5054 0 R (example.10.4.3) 5055 0 R]
+17701 0 obj <<
+/Names [(ethereal2) 11633 0 R (example.1.2.1) 5011 0 R (example.1.2.2) 5012 0 R (example.10.4.1) 5053 0 R (example.10.4.2) 5054 0 R (example.10.4.3) 5055 0 R]
 /Limits [(ethereal2) (example.10.4.3)]
 >> endobj
-17713 0 obj <<
+17702 0 obj <<
 /Names [(example.10.4.4) 5056 0 R (example.10.4.5) 5057 0 R (example.11.2.1) 5058 0 R (example.11.4.1) 5059 0 R (example.12.3.1) 5060 0 R (example.12.3.2) 5061 0 R]
 /Limits [(example.10.4.4) (example.12.3.2)]
 >> endobj
-17714 0 obj <<
+17703 0 obj <<
 /Names [(example.12.3.3) 5062 0 R (example.13.3.1) 5063 0 R (example.13.3.2) 5064 0 R (example.14.2.1) 5065 0 R (example.14.2.2) 5066 0 R (example.14.2.3) 5067 0 R]
 /Limits [(example.12.3.3) (example.14.2.3)]
 >> endobj
-17715 0 obj <<
+17704 0 obj <<
 /Names [(example.14.2.4) 5068 0 R (example.14.2.5) 5087 0 R (example.16.2.1) 5088 0 R (example.17.3.1) 5089 0 R (example.17.3.2) 5090 0 R (example.2.3.1) 5013 0 R]
 /Limits [(example.14.2.4) (example.2.3.1)]
 >> endobj
-17716 0 obj <<
+17705 0 obj <<
 /Names [(example.2.3.10) 5022 0 R (example.2.3.2) 5014 0 R (example.2.3.3) 5015 0 R (example.2.3.4) 5016 0 R (example.2.3.5) 5017 0 R (example.2.3.6) 5018 0 R]
 /Limits [(example.2.3.10) (example.2.3.6)]
 >> endobj
-17717 0 obj <<
+17706 0 obj <<
 /Names [(example.2.3.7) 5019 0 R (example.2.3.8) 5020 0 R (example.2.3.9) 5021 0 R (example.20.1.1) 5091 0 R (example.21.3.1) 5092 0 R (example.21.4.1) 5093 0 R]
 /Limits [(example.2.3.7) (example.21.4.1)]
 >> endobj
-17718 0 obj <<
+17707 0 obj <<
 /Names [(example.21.5.1) 5094 0 R (example.22.10.1) 5097 0 R (example.22.2.1) 5095 0 R (example.22.2.2) 5096 0 R (example.23.2.1) 5098 0 R (example.23.2.2) 5099 0 R]
 /Limits [(example.21.5.1) (example.23.2.2)]
 >> endobj
-17719 0 obj <<
+17708 0 obj <<
 /Names [(example.23.3.1) 5100 0 R (example.24.5.1) 5114 0 R (example.25.4.1) 5115 0 R (example.30.5.1) 5116 0 R (example.34.1.1) 5117 0 R (example.34.1.2) 5118 0 R]
 /Limits [(example.23.3.1) (example.34.1.2)]
 >> endobj
-17720 0 obj <<
+17709 0 obj <<
 /Names [(example.34.1.3) 5119 0 R (example.34.1.4) 5120 0 R (example.34.1.5) 5121 0 R (example.38.2.1) 5129 0 R (example.38.3.1) 5130 0 R (example.38.3.2) 5131 0 R]
 /Limits [(example.34.1.3) (example.38.3.2)]
 >> endobj
-17721 0 obj <<
+17710 0 obj <<
 /Names [(example.4.4.1) 5023 0 R (example.4.6.1) 5024 0 R (example.43.5.1) 5132 0 R (example.5.2.1) 5025 0 R (example.5.2.2) 5026 0 R (example.5.3.1) 5027 0 R]
 /Limits [(example.4.4.1) (example.5.3.1)]
 >> endobj
-17722 0 obj <<
-/Names [(example.7.3.1) 5051 0 R (example.7.3.2) 5052 0 R (extbsdpr) 8818 0 R (fakeperms) 10140 0 R (far1) 8510 0 R (far3) 8518 0 R]
+17711 0 obj <<
+/Names [(example.7.3.1) 5051 0 R (example.7.3.2) 5052 0 R (extbsdpr) 8804 0 R (fakeperms) 10128 0 R (far1) 8497 0 R (far3) 8505 0 R]
 /Limits [(example.7.3.1) (far3)]
 >> endobj
-17723 0 obj <<
+17712 0 obj <<
 /Names [(fast-bdc) 5903 0 R (fast-engoffice-global) 5829 0 R (fast-engoffice-shares) 5830 0 R (fast-ldap) 5902 0 R (fast-member-server) 5754 0 R (fast-memberserver-shares) 5771 0 R]
 /Limits [(fast-bdc) (fast-memberserver-shares)]
 >> endobj
-17724 0 obj <<
-/Names [(fdpbc) 8302 0 R (fdsacls) 8392 0 R (figure.10.1) 5197 0 R (figure.11.1) 5235 0 R (figure.11.2) 5236 0 R (figure.12.1) 5238 0 R]
+17713 0 obj <<
+/Names [(fdpbc) 8289 0 R (fdsacls) 8379 0 R (figure.10.1) 5197 0 R (figure.11.1) 5235 0 R (figure.11.2) 5236 0 R (figure.12.1) 5238 0 R]
 /Limits [(fdpbc) (figure.12.1)]
 >> endobj
-17725 0 obj <<
+17714 0 obj <<
 /Names [(figure.12.2) 5239 0 R (figure.12.3) 5240 0 R (figure.16.1) 5242 0 R (figure.19.1) 5244 0 R (figure.22.1) 5246 0 R (figure.22.10) 5255 0 R]
 /Limits [(figure.12.2) (figure.22.10)]
 >> endobj
-17726 0 obj <<
+17715 0 obj <<
 /Names [(figure.22.11) 5256 0 R (figure.22.12) 5257 0 R (figure.22.13) 5258 0 R (figure.22.14) 5259 0 R (figure.22.15) 5260 0 R (figure.22.16) 5261 0 R]
 /Limits [(figure.22.11) (figure.22.16)]
 >> endobj
-17727 0 obj <<
+17716 0 obj <<
 /Names [(figure.22.17) 5262 0 R (figure.22.18) 5263 0 R (figure.22.19) 5264 0 R (figure.22.2) 5247 0 R (figure.22.3) 5248 0 R (figure.22.4) 5249 0 R]
 /Limits [(figure.22.17) (figure.22.4)]
 >> endobj
-17728 0 obj <<
+17717 0 obj <<
 /Names [(figure.22.5) 5250 0 R (figure.22.6) 5251 0 R (figure.22.7) 5252 0 R (figure.22.8) 5253 0 R (figure.22.9) 5254 0 R (figure.24.1) 5273 0 R]
 /Limits [(figure.22.5) (figure.24.1)]
 >> endobj
-17729 0 obj <<
+17718 0 obj <<
 /Names [(figure.39.1) 5275 0 R (figure.39.2) 5276 0 R (figure.4.1) 5171 0 R (figure.8.1) 5173 0 R (figure.8.10) 5182 0 R (figure.8.11) 5183 0 R]
 /Limits [(figure.39.1) (figure.8.11)]
 >> endobj
-17730 0 obj <<
+17719 0 obj <<
 /Names [(figure.8.12) 5184 0 R (figure.8.13) 5185 0 R (figure.8.14) 5186 0 R (figure.8.15) 5187 0 R (figure.8.16) 5188 0 R (figure.8.17) 5189 0 R]
 /Limits [(figure.8.12) (figure.8.17)]
 >> endobj
-17731 0 obj <<
+17720 0 obj <<
 /Names [(figure.8.18) 5190 0 R (figure.8.19) 5191 0 R (figure.8.2) 5174 0 R (figure.8.20) 5192 0 R (figure.8.21) 5193 0 R (figure.8.22) 5194 0 R]
 /Limits [(figure.8.18) (figure.8.22)]
 >> endobj
-17732 0 obj <<
+17721 0 obj <<
 /Names [(figure.8.23) 5195 0 R (figure.8.3) 5175 0 R (figure.8.4) 5176 0 R (figure.8.5) 5177 0 R (figure.8.6) 5178 0 R (figure.8.7) 5179 0 R]
 /Limits [(figure.8.23) (figure.8.7)]
 >> endobj
-17733 0 obj <<
-/Names [(figure.8.8) 5180 0 R (figure.8.9) 5181 0 R (firewallports) 8608 0 R (gdipost) 9319 0 R (groupmapping) 3780 0 R (grpmemshipchg) 7789 0 R]
+17722 0 obj <<
+/Names [(figure.8.8) 5180 0 R (figure.8.9) 5181 0 R (firewallports) 8595 0 R (gdipost) 9308 0 R (groupmapping) 3780 0 R (grpmemshipchg) 7778 0 R]
 /Limits [(figure.8.8) (grpmemshipchg)]
 >> endobj
+17723 0 obj <<
+/Names [(id204795) 3699 0 R (id207080) 11257 0 R (id207441) 11376 0 R (id207551) 6382 0 R (id208009) 10526 0 R (id249731) 14 0 R]
+/Limits [(id204795) (id249731)]
+>> endobj
+17724 0 obj <<
+/Names [(id249776) 5461 0 R (id249811) 6026 0 R (id249876) 6949 0 R (id251430) 5440 0 R (id252562) 6994 0 R (id253403) 6054 0 R]
+/Limits [(id249776) (id253403)]
+>> endobj
+17725 0 obj <<
+/Names [(id253527) 6062 0 R (id253559) 6065 0 R (id253693) 6070 0 R (id253722) 6073 0 R (id253922) 6081 0 R (id254724) 12030 0 R]
+/Limits [(id253527) (id254724)]
+>> endobj
+17726 0 obj <<
+/Names [(id254901) 6745 0 R (id255157) 5586 0 R (id258519) 11034 0 R (id258824) 10389 0 R (id259237) 6171 0 R (id261112) 9204 0 R]
+/Limits [(id254901) (id261112)]
+>> endobj
+17727 0 obj <<
+/Names [(id261261) 6677 0 R (id261348) 10853 0 R (id261374) 12189 0 R (id261814) 5633 0 R (id261892) 5688 0 R (id262518) 5746 0 R]
+/Limits [(id261261) (id262518)]
+>> endobj
+17728 0 obj <<
+/Names [(id262573) 5753 0 R (id263215) 5818 0 R (id263282) 5825 0 R (id263835) 5869 0 R (id263848) 5871 0 R (id264678) 6983 0 R]
+/Limits [(id262573) (id264678)]
+>> endobj
+17729 0 obj <<
+/Names [(id264797) 6984 0 R (id266807) 6504 0 R (id267384) 10848 0 R (id267612) 5427 0 R (id269023) 5397 0 R (id269268) 11795 0 R]
+/Limits [(id264797) (id269268)]
+>> endobj
+17730 0 obj <<
+/Names [(id269638) 11522 0 R (id270419) 6999 0 R (id270828) 6668 0 R (id271238) 8735 0 R (id272070) 6040 0 R (id273099) 5596 0 R]
+/Limits [(id269638) (id273099)]
+>> endobj
+17731 0 obj <<
+/Names [(id273535) 8741 0 R (id273677) 8746 0 R (id273733) 8754 0 R (id274958) 6035 0 R (id275092) 8430 0 R (id275198) 11377 0 R]
+/Limits [(id273535) (id275198)]
+>> endobj
+17732 0 obj <<
+/Names [(id275945) 12071 0 R (id277986) 7740 0 R (id281107) 5595 0 R (id281352) 6962 0 R (id282254) 6756 0 R (id284204) 6961 0 R]
+/Limits [(id275945) (id284204)]
+>> endobj
+17733 0 obj <<
+/Names [(id284839) 3735 0 R (id285553) 11009 0 R (id285623) 5475 0 R (id285667) 5476 0 R (id286300) 5500 0 R (id286486) 5514 0 R]
+/Limits [(id284839) (id286486)]
+>> endobj
 17734 0 obj <<
-/Names [(id2418525) 5397 0 R (id2423022) 14 0 R (id2423072) 5461 0 R (id2423111) 6026 0 R (id2423181) 6950 0 R (id2443696) 3735 0 R]
-/Limits [(id2418525) (id2443696)]
+/Names [(id286707) 5527 0 R (id286880) 5534 0 R (id286933) 5537 0 R (id286986) 5542 0 R (id287084) 5543 0 R (id287165) 5551 0 R]
+/Limits [(id286707) (id287165)]
 >> endobj
 17735 0 obj <<
-/Names [(id2455118) 3699 0 R (id2471088) 11046 0 R (id2471406) 7758 0 R (id2471449) 7763 0 R (id2472385) 12016 0 R (id2472665) 6201 0 R]
-/Limits [(id2455118) (id2472665)]
+/Names [(id287202) 5552 0 R (id287231) 5558 0 R (id287242) 5559 0 R (id287330) 5560 0 R (id287361) 5561 0 R (id287401) 6679 0 R]
+/Limits [(id287202) (id287401)]
 >> endobj
 17736 0 obj <<
-/Names [(id2474973) 5648 0 R (id2475648) 5476 0 R (id2478928) 11022 0 R (id2479282) 6062 0 R (id2479316) 6065 0 R (id2483337) 6505 0 R]
-/Limits [(id2474973) (id2483337)]
+/Names [(id287686) 6049 0 R (id288232) 5473 0 R (id288829) 6973 0 R (id288944) 6982 0 R (id290921) 10452 0 R (id291370) 10388 0 R]
+/Limits [(id287686) (id291370)]
 >> endobj
 17737 0 obj <<
-/Names [(id2483341) 6669 0 R (id2483575) 6746 0 R (id2483618) 6757 0 R (id2483694) 6758 0 R (id2483904) 8578 0 R (id2484289) 5633 0 R]
-/Limits [(id2483341) (id2484289)]
+/Names [(id292299) 5433 0 R (id293342) 5585 0 R (id294140) 6744 0 R (id295085) 10527 0 R (id295335) 6388 0 R (id295401) 6394 0 R]
+/Limits [(id292299) (id295401)]
 >> endobj
 17738 0 obj <<
-/Names [(id2487725) 12083 0 R (id2488774) 10400 0 R (id2489545) 10860 0 R (id2489712) 6985 0 R (id2491848) 10443 0 R (id2492215) 6745 0 R]
-/Limits [(id2487725) (id2492215)]
+/Names [(id298647) 6757 0 R (id299897) 6968 0 R (id300960) 5648 0 R (id301192) 5414 0 R (id301563) 5899 0 R (id301800) 6103 0 R]
+/Limits [(id298647) (id301800)]
 >> endobj
 17739 0 obj <<
-/Names [(id2492706) 6409 0 R (id2492949) 5427 0 R (id2493196) 6081 0 R (id2493651) 6171 0 R (id2495236) 5473 0 R (id2495282) 5475 0 R]
-/Limits [(id2492706) (id2495282)]
+/Names [(id301864) 6104 0 R (id301913) 6110 0 R (id302051) 6122 0 R (id302122) 6131 0 R (id302266) 6139 0 R (id302283) 6146 0 R]
+/Limits [(id301864) (id302283)]
 >> endobj
 17740 0 obj <<
-/Names [(id2495687) 10470 0 R (id2495728) 11021 0 R (id2495887) 7317 0 R (id2496659) 6519 0 R (id2496914) 10464 0 R (id2497574) 11275 0 R]
-/Limits [(id2495687) (id2497574)]
+/Names [(id302309) 6147 0 R (id302342) 6148 0 R (id302363) 6149 0 R (id302397) 6154 0 R (id302691) 6200 0 R (id303209) 6215 0 R]
+/Limits [(id302309) (id303209)]
 >> endobj
 17741 0 obj <<
-/Names [(id2498013) 5500 0 R (id2500592) 10249 0 R (id2500949) 6054 0 R (id2502169) 8462 0 R (id2502190) 8463 0 R (id2502215) 8464 0 R]
-/Limits [(id2498013) (id2502215)]
+/Names [(id303228) 6216 0 R (id303703) 6235 0 R (id304154) 6260 0 R (id304878) 6408 0 R (id305053) 6425 0 R (id305367) 6434 0 R]
+/Limits [(id303228) (id305367)]
 >> endobj
 17742 0 obj <<
-/Names [(id2502251) 8469 0 R (id2502300) 8470 0 R (id2502342) 8471 0 R (id2502401) 8476 0 R (id2502456) 11028 0 R (id2502690) 8238 0 R]
-/Limits [(id2502251) (id2502690)]
+/Names [(id305424) 6443 0 R (id305506) 6444 0 R (id305557) 6445 0 R (id305602) 6452 0 R (id305659) 6453 0 R (id306126) 6460 0 R]
+/Limits [(id305424) (id306126)]
 >> endobj
 17743 0 obj <<
-/Names [(id2502705) 8239 0 R (id2503176) 7039 0 R (id2503915) 6740 0 R (id2504278) 6678 0 R (id2505521) 6785 0 R (id2506513) 5585 0 R]
-/Limits [(id2502705) (id2506513)]
+/Names [(id306475) 6487 0 R (id306516) 6488 0 R (id307140) 6301 0 R (id307181) 6306 0 R (id307197) 6307 0 R (id307225) 6308 0 R]
+/Limits [(id306475) (id307225)]
 >> endobj
 17744 0 obj <<
-/Names [(id2506538) 5586 0 R (id2506609) 5595 0 R (id2506692) 6049 0 R (id2507352) 6963 0 R (id2507408) 11388 0 R (id2509465) 7619 0 R]
-/Limits [(id2506538) (id2509465)]
+/Names [(id307283) 6319 0 R (id307313) 6325 0 R (id307640) 6345 0 R (id307821) 6355 0 R (id307826) 6356 0 R (id307914) 6357 0 R]
+/Limits [(id307283) (id307914)]
 >> endobj
 17745 0 obj <<
-/Names [(id2510758) 6974 0 R (id2510878) 6983 0 R (id2510933) 6984 0 R (id2511174) 7000 0 R (id2513538) 5433 0 R (id2513621) 5440 0 R]
-/Limits [(id2510758) (id2513621)]
+/Names [(id307967) 6362 0 R (id308031) 6368 0 R (id308121) 6369 0 R (id308144) 6370 0 R (id308160) 6375 0 R (id308409) 8646 0 R]
+/Limits [(id307967) (id308409)]
 >> endobj
 17746 0 obj <<
-/Names [(id2513868) 5688 0 R (id2515067) 7751 0 R (id2515867) 5596 0 R (id2516803) 7772 0 R (id2517388) 8438 0 R (id2517467) 8443 0 R]
-/Limits [(id2513868) (id2517467)]
+/Names [(id308444) 8647 0 R (id308534) 8653 0 R (id308617) 8654 0 R (id308792) 8666 0 R (id309049) 8701 0 R (id309281) 11440 0 R]
+/Limits [(id308444) (id309281)]
 >> endobj
 17747 0 obj <<
-/Names [(id2518149) 5414 0 R (id2519148) 6070 0 R (id2519178) 6073 0 R (id2519667) 5514 0 R (id2519897) 5527 0 R (id2520082) 5534 0 R]
-/Limits [(id2518149) (id2520082)]
+/Names [(id309450) 7261 0 R (id309487) 7262 0 R (id309770) 6784 0 R (id309939) 6493 0 R (id309988) 6494 0 R (id310079) 6499 0 R]
+/Limits [(id309450) (id310079)]
 >> endobj
 17748 0 obj <<
-/Names [(id2520144) 5537 0 R (id2520202) 5542 0 R (id2520302) 5543 0 R (id2520392) 5551 0 R (id2520435) 5552 0 R (id2520470) 5558 0 R]
-/Limits [(id2520144) (id2520470)]
+/Names [(id310408) 6518 0 R (id310835) 6530 0 R (id311095) 6544 0 R (id311185) 6548 0 R (id311195) 6554 0 R (id311346) 6555 0 R]
+/Limits [(id310408) (id311346)]
 >> endobj
 17749 0 obj <<
-/Names [(id2520481) 5559 0 R (id2520578) 5560 0 R (id2520614) 5561 0 R (id2521006) 6426 0 R (id2521639) 5869 0 R (id2521655) 5871 0 R]
-/Limits [(id2520481) (id2521655)]
+/Names [(id311427) 6556 0 R (id311626) 6565 0 R (id312427) 8191 0 R (id312859) 8197 0 R (id313312) 8222 0 R (id314371) 6739 0 R]
+/Limits [(id311427) (id314371)]
 >> endobj
 17750 0 obj <<
-/Names [(id2522137) 5899 0 R (id2522396) 6103 0 R (id2522475) 6104 0 R (id2522532) 6110 0 R (id2522705) 6122 0 R (id2522792) 6131 0 R]
-/Limits [(id2522137) (id2522792)]
+/Names [(id314781) 6590 0 R (id315010) 6598 0 R (id315143) 6613 0 R (id315834) 6638 0 R (id316092) 6643 0 R (id316156) 6644 0 R]
+/Limits [(id314781) (id316156)]
 >> endobj
 17751 0 obj <<
-/Names [(id2522977) 6139 0 R (id2523002) 6146 0 R (id2523034) 6147 0 R (id2523072) 6148 0 R (id2523098) 6149 0 R (id2523142) 6154 0 R]
-/Limits [(id2522977) (id2523142)]
+/Names [(id316318) 6651 0 R (id316350) 6652 0 R (id316414) 6653 0 R (id316602) 6659 0 R (id316951) 6813 0 R (id317291) 6841 0 R]
+/Limits [(id316318) (id317291)]
 >> endobj
 17752 0 obj <<
-/Names [(id2523336) 8715 0 R (id2524700) 6995 0 R (id2524977) 11125 0 R (id2525785) 6814 0 R (id2526318) 6383 0 R (id2526402) 6389 0 R]
-/Limits [(id2523336) (id2526402)]
+/Names [(id317628) 6873 0 R (id317920) 6900 0 R (id318143) 7008 0 R (id318695) 7024 0 R (id319212) 7038 0 R (id319958) 7079 0 R]
+/Limits [(id317628) (id319958)]
 >> endobj
 17753 0 obj <<
-/Names [(id2526474) 6395 0 R (id2526832) 6216 0 R (id2526852) 6217 0 R (id2527369) 6236 0 R (id2527868) 6261 0 R (id2528481) 6302 0 R]
-/Limits [(id2526474) (id2528481)]
+/Names [(id320079) 7269 0 R (id320568) 7278 0 R (id320868) 7311 0 R (id321007) 7312 0 R (id321072) 7319 0 R (id321586) 7333 0 R]
+/Limits [(id320079) (id321586)]
 >> endobj
 17754 0 obj <<
-/Names [(id2528535) 6307 0 R (id2528555) 6308 0 R (id2528591) 6309 0 R (id2528657) 6320 0 R (id2528697) 6326 0 R (id2529097) 6346 0 R]
-/Limits [(id2528535) (id2529097)]
+/Names [(id321849) 7338 0 R (id321977) 7343 0 R (id322557) 7741 0 R (id322630) 7613 0 R (id322753) 8169 0 R (id323028) 8176 0 R]
+/Limits [(id321849) (id323028)]
 >> endobj
 17755 0 obj <<
-/Names [(id2529323) 6356 0 R (id2529329) 6357 0 R (id2529435) 6358 0 R (id2529500) 6363 0 R (id2529579) 6369 0 R (id2529692) 6370 0 R]
-/Limits [(id2529323) (id2529692)]
+/Names [(id323355) 8186 0 R (id323755) 8640 0 R (id323825) 8641 0 R (id324521) 8435 0 R (id325276) 7650 0 R (id325721) 7099 0 R]
+/Limits [(id323355) (id325721)]
 >> endobj
 17756 0 obj <<
-/Names [(id2529721) 6371 0 R (id2529741) 6376 0 R (id2530004) 6435 0 R (id2530066) 6444 0 R (id2530154) 6445 0 R (id2530210) 6446 0 R]
-/Limits [(id2529721) (id2530210)]
+/Names [(id325912) 7108 0 R (id325931) 7109 0 R (id326067) 7117 0 R (id326161) 7126 0 R (id326229) 7129 0 R (id326440) 7136 0 R]
+/Limits [(id325912) (id326440)]
 >> endobj
 17757 0 obj <<
-/Names [(id2530259) 6453 0 R (id2530319) 6454 0 R (id2530817) 6461 0 R (id2531184) 6488 0 R (id2531230) 6489 0 R (id2531287) 6494 0 R]
-/Limits [(id2530259) (id2531287)]
+/Names [(id326669) 7153 0 R (id326716) 7154 0 R (id326913) 7159 0 R (id326923) 7160 0 R (id327042) 7165 0 R (id327197) 7177 0 R]
+/Limits [(id326669) (id327197)]
 >> endobj
 17758 0 obj <<
-/Names [(id2531345) 6495 0 R (id2531455) 6500 0 R (id2531756) 6962 0 R (id2532323) 7280 0 R (id2532876) 12201 0 R (id2533029) 6680 0 R]
-/Limits [(id2531345) (id2533029)]
+/Names [(id327263) 7183 0 R (id327420) 7188 0 R (id327619) 7193 0 R (id327764) 7194 0 R (id328469) 7233 0 R (id328492) 7234 0 R]
+/Limits [(id327263) (id328492)]
 >> endobj
 17759 0 obj <<
-/Names [(id2533851) 8704 0 R (id2534630) 7264 0 R (id2534866) 6531 0 R (id2535142) 6545 0 R (id2535238) 6549 0 R (id2535250) 6555 0 R]
-/Limits [(id2533851) (id2535250)]
+/Names [(id328553) 7239 0 R (id328588) 7240 0 R (id328630) 7241 0 R (id328800) 7247 0 R (id329371) 7658 0 R (id329426) 7663 0 R]
+/Limits [(id328553) (id329426)]
 >> endobj
 17760 0 obj <<
-/Names [(id2535408) 6556 0 R (id2535493) 6557 0 R (id2535701) 6566 0 R (id2536391) 6591 0 R (id2536664) 6599 0 R (id2536821) 6614 0 R]
-/Limits [(id2535408) (id2536821)]
+/Names [(id329967) 7673 0 R (id330076) 7677 0 R (id330190) 7684 0 R (id330858) 7690 0 R (id330931) 7698 0 R (id330942) 7699 0 R]
+/Limits [(id329967) (id330942)]
 >> endobj
 17761 0 obj <<
-/Names [(id2537638) 6639 0 R (id2537938) 6644 0 R (id2538013) 6645 0 R (id2538202) 6652 0 R (id2538243) 6653 0 R (id2538322) 6654 0 R]
-/Limits [(id2537638) (id2538322)]
+/Names [(id331087) 7709 0 R (id331201) 7715 0 R (id331213) 7716 0 R (id331287) 7717 0 R (id331699) 10466 0 R (id331979) 10120 0 R]
+/Limits [(id331087) (id331979)]
 >> endobj
 17762 0 obj <<
-/Names [(id2538544) 6660 0 R (id2538850) 6969 0 R (id2539243) 6842 0 R (id2539642) 6874 0 R (id2539983) 6901 0 R (id2540144) 7684 0 R]
-/Limits [(id2538544) (id2540144)]
+/Names [(id332126) 10123 0 R (id332711) 8574 0 R (id332724) 8575 0 R (id332888) 7972 0 R (id332910) 7974 0 R (id332971) 7975 0 R]
+/Limits [(id332126) (id332971)]
 >> endobj
 17763 0 obj <<
-/Names [(id2540264) 7688 0 R (id2540389) 7695 0 R (id2541593) 8250 0 R (id2541719) 8259 0 R (id2542395) 8579 0 R (id2543238) 7271 0 R]
-/Limits [(id2540264) (id2543238)]
+/Names [(id333144) 8565 0 R (id333782) 7350 0 R (id334729) 7374 0 R (id334829) 7376 0 R (id335022) 7392 0 R (id335094) 7399 0 R]
+/Limits [(id333144) (id335094)]
 >> endobj
 17764 0 obj <<
-/Names [(id2543508) 7669 0 R (id2543568) 7674 0 R (id2543830) 7983 0 R (id2543854) 7985 0 R (id2543919) 7986 0 R (id2543963) 11404 0 R]
-/Limits [(id2543508) (id2543963)]
+/Names [(id335169) 7401 0 R (id335716) 7423 0 R (id335851) 7438 0 R (id335962) 7441 0 R (id336006) 7446 0 R (id336072) 7447 0 R]
+/Limits [(id335169) (id336072)]
 >> endobj
 17765 0 obj <<
-/Names [(id2544413) 7752 0 R (id2544496) 7757 0 R (id2544723) 7661 0 R (id2545258) 10538 0 R (id2545465) 8233 0 R (id2546766) 7025 0 R]
-/Limits [(id2544413) (id2546766)]
+/Names [(id336299) 7453 0 R (id336435) 7454 0 R (id336649) 7475 0 R (id336696) 7476 0 R (id336888) 7481 0 R (id337120) 7490 0 R]
+/Limits [(id336299) (id337120)]
 >> endobj
 17766 0 obj <<
-/Names [(id2548076) 7080 0 R (id2548974) 7009 0 R (id2549756) 6040 0 R (id2549926) 6035 0 R (id2550342) 11465 0 R (id2551064) 5746 0 R]
-/Limits [(id2548076) (id2551064)]
+/Names [(id337276) 7500 0 R (id337537) 7521 0 R (id337634) 7522 0 R (id337821) 7566 0 R (id338226) 7573 0 R (id338262) 7580 0 R]
+/Limits [(id337276) (id338262)]
 >> endobj
 17767 0 obj <<
-/Names [(id2551137) 5753 0 R (id2551797) 5818 0 R (id2551881) 5825 0 R (id2552140) 7100 0 R (id2552350) 7109 0 R (id2552371) 7110 0 R]
-/Limits [(id2551137) (id2552371)]
+/Names [(id338387) 7581 0 R (id338430) 7588 0 R (id338436) 7589 0 R (id338460) 7590 0 R (id338516) 7746 0 R (id338670) 7747 0 R]
+/Limits [(id338387) (id338670)]
 >> endobj
 17768 0 obj <<
-/Names [(id2552516) 7118 0 R (id2552620) 7127 0 R (id2552691) 7130 0 R (id2552923) 7137 0 R (id2553173) 7154 0 R (id2553223) 7155 0 R]
-/Limits [(id2552516) (id2553223)]
+/Names [(id338699) 7752 0 R (id338877) 7761 0 R (id339161) 7771 0 R (id339200) 7772 0 R (id339629) 7798 0 R (id339870) 7819 0 R]
+/Limits [(id338699) (id339870)]
 >> endobj
 17769 0 obj <<
-/Names [(id2553436) 7160 0 R (id2553447) 7161 0 R (id2553580) 7166 0 R (id2553744) 7178 0 R (id2553820) 7184 0 R (id2553992) 7189 0 R]
-/Limits [(id2553436) (id2553992)]
+/Names [(id340065) 7825 0 R (id340111) 7831 0 R (id340175) 7832 0 R (id340253) 7838 0 R (id340576) 8227 0 R (id340589) 8228 0 R]
+/Limits [(id340065) (id340589)]
 >> endobj
 17770 0 obj <<
-/Names [(id2554205) 7194 0 R (id2554365) 7195 0 R (id2555121) 7235 0 R (id2555146) 7236 0 R (id2555214) 7241 0 R (id2555252) 7242 0 R]
-/Limits [(id2554205) (id2555252)]
+/Names [(id340929) 8584 0 R (id340979) 8587 0 R (id341910) 7853 0 R (id341921) 7858 0 R (id342238) 7868 0 R (id342435) 7882 0 R]
+/Limits [(id340929) (id342435)]
 >> endobj
 17771 0 obj <<
-/Names [(id2555298) 7243 0 R (id2555486) 7249 0 R (id2555646) 7701 0 R (id2555722) 7709 0 R (id2555734) 7710 0 R (id2555886) 7720 0 R]
-/Limits [(id2555298) (id2555886)]
+/Names [(id342625) 7887 0 R (id342665) 7892 0 R (id342802) 7898 0 R (id342827) 7900 0 R (id342915) 7907 0 R (id343070) 7918 0 R]
+/Limits [(id342625) (id343070)]
 >> endobj
 17772 0 obj <<
-/Names [(id2556013) 7726 0 R (id2556027) 7727 0 R (id2556108) 7728 0 R (id2556609) 8659 0 R (id2556646) 8660 0 R (id2556749) 8477 0 R]
-/Limits [(id2556013) (id2556749)]
+/Names [(id343232) 7927 0 R (id343269) 7928 0 R (id343318) 7929 0 R (id343517) 7943 0 R (id343533) 7944 0 R (id343588) 7945 0 R]
+/Limits [(id343232) (id343588)]
 >> endobj
 17773 0 obj <<
-/Names [(id2556814) 8478 0 R (id2556871) 8483 0 R (id2556968) 8488 0 R (id2556979) 8489 0 R (id2557051) 8502 0 R (id2557371) 8197 0 R]
-/Limits [(id2556814) (id2557371)]
+/Names [(id343685) 7950 0 R (id343700) 7951 0 R (id343736) 7956 0 R (id343765) 7957 0 R (id344181) 7993 0 R (id344384) 7994 0 R]
+/Limits [(id343685) (id344384)]
 >> endobj
 17774 0 obj <<
-/Names [(id2557806) 8187 0 R (id2558531) 10420 0 R (id2559035) 7263 0 R (id2559170) 7318 0 R (id2559232) 7325 0 R (id2559716) 7339 0 R]
-/Limits [(id2557806) (id2559716)]
+/Names [(id344446) 8000 0 R (id344503) 8001 0 R (id344524) 8002 0 R (id344731) 8026 0 R (id345028) 8050 0 R (id345449) 8083 0 R]
+/Limits [(id344446) (id345449)]
 >> endobj
 17775 0 obj <<
-/Names [(id2559973) 7344 0 R (id2560101) 7349 0 R (id2560510) 7356 0 R (id2561501) 7380 0 R (id2561608) 7382 0 R (id2561828) 7398 0 R]
-/Limits [(id2559973) (id2561828)]
+/Names [(id345864) 8136 0 R (id346038) 8157 0 R (id346061) 8158 0 R (id346119) 8202 0 R (id346125) 8203 0 R (id346531) 8239 0 R]
+/Limits [(id345864) (id346531)]
 >> endobj
 17776 0 obj <<
-/Names [(id2561909) 7405 0 R (id2561992) 7407 0 R (id2562666) 7429 0 R (id2562834) 7444 0 R (id2562964) 7447 0 R (id2563019) 7452 0 R]
-/Limits [(id2561909) (id2563019)]
+/Names [(id346652) 8248 0 R (id347005) 8268 0 R (id347238) 8283 0 R (id347270) 8284 0 R (id347531) 8285 0 R (id347776) 8286 0 R]
+/Limits [(id346652) (id347776)]
 >> endobj
 17777 0 obj <<
-/Names [(id2563098) 7453 0 R (id2563369) 7459 0 R (id2563533) 7460 0 R (id2563791) 7481 0 R (id2563848) 7482 0 R (id2564082) 7487 0 R]
-/Limits [(id2563098) (id2564082)]
+/Names [(id348016) 8295 0 R (id348156) 8305 0 R (id348167) 8306 0 R (id348268) 8309 0 R (id348683) 8449 0 R (id348701) 8450 0 R]
+/Limits [(id348016) (id348701)]
 >> endobj
 17778 0 obj <<
-/Names [(id2564364) 7496 0 R (id2564557) 7506 0 R (id2564876) 7527 0 R (id2564994) 7528 0 R (id2565219) 7572 0 R (id2565711) 7579 0 R]
-/Limits [(id2564364) (id2565711)]
+/Names [(id348721) 8451 0 R (id348754) 8456 0 R (id348796) 8457 0 R (id348834) 8458 0 R (id348887) 8463 0 R (id348958) 8464 0 R]
+/Limits [(id348721) (id348958)]
 >> endobj
 17779 0 obj <<
-/Names [(id2565761) 7586 0 R (id2565911) 7587 0 R (id2565964) 7594 0 R (id2565971) 7595 0 R (id2566000) 7596 0 R (id2566212) 8202 0 R]
-/Limits [(id2565761) (id2566212)]
+/Names [(id349019) 8465 0 R (id349064) 8470 0 R (id349135) 8475 0 R (id349145) 8476 0 R (id349213) 8489 0 R (id349435) 8511 0 R]
+/Limits [(id349019) (id349435)]
 >> endobj
 17780 0 obj <<
-/Names [(id2566670) 8208 0 R (id2567603) 8180 0 R (id2567800) 7782 0 R (id2567838) 7783 0 R (id2568274) 7809 0 R (id2568507) 7830 0 R]
-/Limits [(id2566670) (id2568507)]
+/Names [(id349927) 8596 0 R (id350047) 8606 0 R (id350099) 8612 0 R (id350142) 8613 0 R (id350155) 8614 0 R (id350178) 8615 0 R]
+/Limits [(id349927) (id350178)]
 >> endobj
 17781 0 obj <<
-/Names [(id2568696) 7836 0 R (id2568740) 7842 0 R (id2568804) 7843 0 R (id2568881) 7849 0 R (id2569203) 7864 0 R (id2569218) 7869 0 R]
-/Limits [(id2568696) (id2569218)]
+/Names [(id350368) 9212 0 R (id350466) 9213 0 R (id350552) 10938 0 R (id351009) 11016 0 R (id351081) 11010 0 R (id351194) 10212 0 R]
+/Limits [(id350368) (id351194)]
 >> endobj
 17782 0 obj <<
-/Names [(id2569565) 7879 0 R (id2569786) 7893 0 R (id2569996) 7898 0 R (id2570041) 7903 0 R (id2570193) 7909 0 R (id2570221) 7911 0 R]
-/Limits [(id2569565) (id2570221)]
+/Names [(id351258) 8566 0 R (id351301) 8425 0 R (id351497) 8715 0 R (id351529) 8721 0 R (id352014) 8321 0 R (id352020) 8322 0 R]
+/Limits [(id351258) (id352020)]
 >> endobj
 17783 0 obj <<
-/Names [(id2570329) 7918 0 R (id2570504) 7929 0 R (id2570696) 7938 0 R (id2570737) 7939 0 R (id2570791) 7940 0 R (id2571026) 7954 0 R]
-/Limits [(id2570329) (id2571026)]
+/Names [(id352058) 8323 0 R (id352114) 8328 0 R (id352226) 8329 0 R (id352289) 8336 0 R (id352364) 8337 0 R (id352395) 8342 0 R]
+/Limits [(id352058) (id352395)]
 >> endobj
 17784 0 obj <<
-/Names [(id2571044) 7955 0 R (id2571107) 7956 0 R (id2571213) 7961 0 R (id2571229) 7962 0 R (id2571271) 7967 0 R (id2571303) 7968 0 R]
-/Limits [(id2571044) (id2571303)]
+/Names [(id352516) 8351 0 R (id352733) 8365 0 R (id352790) 8366 0 R (id352833) 8372 0 R (id352865) 8378 0 R (id353110) 8384 0 R]
+/Limits [(id352516) (id353110)]
 >> endobj
 17785 0 obj <<
-/Names [(id2571722) 8004 0 R (id2571939) 8005 0 R (id2572006) 8011 0 R (id2572064) 8012 0 R (id2572087) 8013 0 R (id2572308) 8037 0 R]
-/Limits [(id2571722) (id2572308)]
+/Names [(id353129) 8385 0 R (id353139) 8386 0 R (id353413) 8403 0 R (id353441) 8404 0 R (id353550) 8524 0 R (id353568) 8529 0 R]
+/Limits [(id353129) (id353568)]
 >> endobj
 17786 0 obj <<
-/Names [(id2572620) 8061 0 R (id2573070) 8094 0 R (id2573519) 8147 0 R (id2573703) 8168 0 R (id2573730) 8169 0 R (id2574362) 10431 0 R]
-/Limits [(id2572620) (id2574362)]
+/Names [(id353622) 8536 0 R (id353641) 8537 0 R (id353691) 8546 0 R (id353717) 8547 0 R (id353737) 8548 0 R (id353764) 8556 0 R]
+/Limits [(id353622) (id353764)]
 >> endobj
 17787 0 obj <<
-/Names [(id2574578) 8213 0 R (id2574583) 8214 0 R (id2574845) 11452 0 R (id2575198) 8609 0 R (id2575272) 8666 0 R (id2575359) 8667 0 R]
-/Limits [(id2574578) (id2575359)]
+/Names [(id354032) 8677 0 R (id354220) 8683 0 R (id354355) 8684 0 R (id354367) 8685 0 R (id354407) 8690 0 R (id355653) 10854 0 R]
+/Limits [(id354032) (id355653)]
 >> endobj
 17788 0 obj <<
-/Names [(id2575550) 8680 0 R (id2575929) 8791 0 R (id2576036) 8587 0 R (id2576052) 8588 0 R (id2576179) 8597 0 R (id2576232) 8600 0 R]
-/Limits [(id2575550) (id2576232)]
+/Names [(id355727) 10859 0 R (id355893) 10944 0 R (id356008) 10950 0 R (id356037) 10951 0 R (id356158) 10956 0 R (id356536) 9205 0 R]
+/Limits [(id355727) (id356536)]
 >> endobj
 17789 0 obj <<
-/Names [(id2576483) 8448 0 R (id2576781) 8760 0 R (id2576840) 8768 0 R (id2576940) 8774 0 R (id2577164) 8691 0 R (id2577365) 8697 0 R]
-/Limits [(id2576483) (id2577365)]
+/Names [(id356583) 9206 0 R (id356853) 10458 0 R (id357111) 9220 0 R (id357159) 10078 0 R (id357194) 10079 0 R (id357291) 8760 0 R]
+/Limits [(id356583) (id357291)]
 >> endobj
 17790 0 obj <<
-/Names [(id2577512) 8698 0 R (id2577526) 8699 0 R (id2577818) 8729 0 R (id2577853) 8735 0 R (id2578054) 8619 0 R (id2578113) 8625 0 R]
-/Limits [(id2577512) (id2578113)]
+/Names [(id357502) 8777 0 R (id357689) 8782 0 R (id358021) 8801 0 R (id358309) 8802 0 R (id358331) 8838 0 R (id359221) 8864 0 R]
+/Limits [(id357502) (id359221)]
 >> endobj
 17791 0 obj <<
-/Names [(id2578156) 8626 0 R (id2578172) 8627 0 R (id2578199) 8628 0 R (id2578593) 8281 0 R (id2578829) 8296 0 R (id2578859) 8297 0 R]
-/Limits [(id2578156) (id2578859)]
+/Names [(id359448) 9241 0 R (id359677) 9273 0 R (id359691) 9278 0 R (id359738) 9279 0 R (id359941) 9290 0 R (id360211) 9301 0 R]
+/Limits [(id359448) (id360211)]
 >> endobj
 17792 0 obj <<
-/Names [(id2579115) 8298 0 R (id2579354) 8299 0 R (id2579581) 8308 0 R (id2579718) 8318 0 R (id2579729) 8319 0 R (id2579826) 8322 0 R]
-/Limits [(id2579115) (id2579826)]
+/Names [(id360324) 9303 0 R (id360504) 9315 0 R (id360649) 9316 0 R (id360956) 9338 0 R (id361070) 9346 0 R (id361142) 9352 0 R]
+/Limits [(id360324) (id361142)]
 >> endobj
 17793 0 obj <<
-/Names [(id2580036) 8334 0 R (id2580042) 8335 0 R (id2580088) 8336 0 R (id2580155) 8341 0 R (id2580280) 8342 0 R (id2580351) 8349 0 R]
-/Limits [(id2580036) (id2580351)]
+/Names [(id361253) 9357 0 R (id361290) 9364 0 R (id361456) 10744 0 R (id361786) 11107 0 R (id362054) 10431 0 R (id362095) 10438 0 R]
+/Limits [(id361253) (id362095)]
 >> endobj
 17794 0 obj <<
-/Names [(id2580438) 8350 0 R (id2580474) 8355 0 R (id2580617) 8364 0 R (id2580861) 8378 0 R (id2580932) 8379 0 R (id2580989) 8385 0 R]
-/Limits [(id2580438) (id2580989)]
+/Names [(id362376) 10465 0 R (id362491) 10937 0 R (id362550) 11039 0 R (id362637) 11040 0 R (id362835) 10532 0 R (id362844) 10533 0 R]
+/Limits [(id362376) (id362844)]
 >> endobj
 17795 0 obj <<
-/Names [(id2581032) 8391 0 R (id2581290) 8397 0 R (id2581314) 8398 0 R (id2581325) 8399 0 R (id2581618) 8416 0 R (id2581647) 8417 0 R]
-/Limits [(id2581032) (id2581647)]
+/Names [(id363049) 10419 0 R (id363319) 10408 0 R (id363410) 10398 0 R (id363613) 10104 0 R (id363619) 10105 0 R (id363661) 10110 0 R]
+/Limits [(id363049) (id363661)]
 >> endobj
 17796 0 obj <<
-/Names [(id2581851) 8524 0 R (id2582036) 8537 0 R (id2582057) 8542 0 R (id2582121) 8549 0 R (id2582146) 8550 0 R (id2582212) 8559 0 R]
-/Limits [(id2581851) (id2582212)]
+/Names [(id363765) 10142 0 R (id363941) 10155 0 R (id364396) 10397 0 R (id364722) 10129 0 R (id365107) 10141 0 R (id366351) 10225 0 R]
+/Limits [(id363765) (id366351)]
 >> endobj
 17797 0 obj <<
-/Names [(id2582241) 8560 0 R (id2582265) 8561 0 R (id2582296) 8569 0 R (id2582570) 10766 0 R (id2582624) 10767 0 R (id2582706) 10773 0 R]
-/Limits [(id2582241) (id2582706)]
+/Names [(id366430) 10226 0 R (id366556) 8871 0 R (id366612) 8879 0 R (id367005) 8880 0 R (id367531) 8907 0 R (id367671) 8908 0 R]
+/Limits [(id366430) (id367671)]
 >> endobj
 17798 0 obj <<
-/Names [(id2582802) 10865 0 R (id2582866) 10920 0 R (id2582985) 10927 0 R (id2582999) 10932 0 R (id2583031) 10933 0 R (id2583075) 10934 0 R]
-/Limits [(id2582802) (id2583075)]
+/Names [(id367767) 8914 0 R (id367889) 8915 0 R (id368119) 8945 0 R (id368224) 8950 0 R (id368298) 8951 0 R (id368510) 8966 0 R]
+/Limits [(id367767) (id368510)]
 >> endobj
 17799 0 obj <<
-/Names [(id2583355) 9234 0 R (id2583496) 10450 0 R (id2583627) 8749 0 R (id2583835) 8755 0 R (id2583885) 9284 0 R (id2583903) 9289 0 R]
-/Limits [(id2583355) (id2583903)]
+/Names [(id368843) 8976 0 R (id368959) 8981 0 R (id369131) 8986 0 R (id369234) 8995 0 R (id369335) 9000 0 R (id369410) 9006 0 R]
+/Limits [(id368843) (id369410)]
 >> endobj
 17800 0 obj <<
-/Names [(id2583955) 9290 0 R (id2584176) 9301 0 R (id2584433) 8653 0 R (id2584508) 8654 0 R (id2584696) 8796 0 R (id2585257) 10116 0 R]
-/Limits [(id2583955) (id2585257)]
+/Names [(id369597) 9011 0 R (id369689) 9016 0 R (id369809) 9021 0 R (id369822) 9022 0 R (id370270) 9052 0 R (id370370) 9058 0 R]
+/Limits [(id369597) (id370370)]
 >> endobj
 17801 0 obj <<
-/Names [(id2585263) 10117 0 R (id2585306) 10122 0 R (id2585603) 9254 0 R (id2585998) 9226 0 R (id2586103) 9227 0 R (id2586371) 12042 0 R]
-/Limits [(id2585263) (id2586371)]
+/Names [(id370501) 9063 0 R (id370517) 9064 0 R (id370819) 9089 0 R (id371032) 9103 0 R (id371206) 9112 0 R (id371297) 9117 0 R]
+/Limits [(id370501) (id371297)]
 >> endobj
 17802 0 obj <<
-/Names [(id2586513) 10409 0 R (id2586542) 10410 0 R (id2587007) 10255 0 R (id2587056) 10256 0 R (id2587418) 10154 0 R (id2587610) 10167 0 R]
-/Limits [(id2586513) (id2587610)]
+/Names [(id371478) 9133 0 R (id371564) 9140 0 R (id371591) 9142 0 R (id371628) 9143 0 R (id371657) 9149 0 R (id371670) 9150 0 R]
+/Limits [(id371478) (id371670)]
 >> endobj
 17803 0 obj <<
-/Names [(id2587765) 10224 0 R (id2588183) 10243 0 R (id2588230) 10244 0 R (id2588371) 10250 0 R (id2588454) 10401 0 R (id2588805) 10141 0 R]
-/Limits [(id2587765) (id2588805)]
+/Names [(id371683) 9151 0 R (id371794) 9160 0 R (id372021) 9169 0 R (id372052) 9177 0 R (id372168) 9184 0 R (id372192) 9186 0 R]
+/Limits [(id371683) (id372192)]
 >> endobj
 17804 0 obj <<
-/Names [(id2589034) 10532 0 R (id2589046) 10533 0 R (id2589823) 10498 0 R (id2589865) 10504 0 R (id2590058) 11029 0 R (id2590158) 10090 0 R]
-/Limits [(id2589034) (id2590158)]
+/Names [(id372198) 9187 0 R (id372232) 9188 0 R (id372585) 10192 0 R (id372608) 10193 0 R (id372664) 10194 0 R (id372702) 10199 0 R]
+/Limits [(id372198) (id372702)]
 >> endobj
 17805 0 obj <<
-/Names [(id2590196) 10091 0 R (id2590557) 10298 0 R (id2590671) 10305 0 R (id2590822) 10321 0 R (id2591068) 10326 0 R (id2591699) 10903 0 R]
-/Limits [(id2590196) (id2591699)]
+/Names [(id372918) 10231 0 R (id372960) 10232 0 R (id373078) 10237 0 R (id373127) 10238 0 R (id373209) 10243 0 R (id373255) 10244 0 R]
+/Limits [(id372918) (id373255)]
 >> endobj
 17806 0 obj <<
-/Names [(id2591788) 10904 0 R (id2591831) 10913 0 R (id2591859) 10914 0 R (id2591996) 9218 0 R (id2592002) 9219 0 R (id2592060) 9220 0 R]
-/Limits [(id2591788) (id2592060)]
+/Names [(id373474) 10250 0 R (id373620) 10256 0 R (id373692) 10257 0 R (id373746) 10265 0 R (id373752) 10266 0 R (id373867) 10267 0 R]
+/Limits [(id373474) (id373867)]
 >> endobj
 17807 0 obj <<
-/Names [(id2592375) 10484 0 R (id2592577) 10489 0 R (id2592630) 10539 0 R (id2592686) 10544 0 R (id2592697) 10545 0 R (id2593247) 10237 0 R]
-/Limits [(id2592375) (id2593247)]
+/Names [(id374013) 10273 0 R (id374098) 10274 0 R (id374476) 10286 0 R (id374579) 10293 0 R (id374723) 10309 0 R (id374936) 10864 0 R]
+/Limits [(id374013) (id374936)]
 >> endobj
 17808 0 obj <<
-/Names [(id2593338) 10238 0 R (id2593517) 10477 0 R (id2593864) 10509 0 R (id2593877) 10510 0 R (id2593960) 10516 0 R (id2594003) 10517 0 R]
-/Limits [(id2593338) (id2594003)]
+/Names [(id374970) 10865 0 R (id375018) 10870 0 R (id375280) 10754 0 R (id375332) 10755 0 R (id375404) 10761 0 R (id375724) 10471 0 R]
+/Limits [(id374970) (id375724)]
 >> endobj
 17809 0 obj <<
-/Names [(id2594071) 10518 0 R (id2594229) 11640 0 R (id2594320) 11053 0 R (id2594444) 11059 0 R (id2594538) 11060 0 R (id2594646) 11065 0 R]
-/Limits [(id2594071) (id2594646)]
+/Names [(id375761) 10472 0 R (id375943) 10477 0 R (id376136) 10486 0 R (id376169) 10492 0 R (id376429) 10497 0 R (id376440) 10498 0 R]
+/Limits [(id375761) (id376440)]
 >> endobj
 17810 0 obj <<
-/Names [(id2594777) 11066 0 R (id2594848) 11071 0 R (id2594936) 11072 0 R (id2594993) 11073 0 R (id2595238) 8815 0 R (id2595498) 8816 0 R]
-/Limits [(id2594777) (id2595498)]
+/Names [(id376516) 10504 0 R (id376554) 10505 0 R (id376620) 10506 0 R (id376762) 10520 0 R (id376774) 10521 0 R (id376855) 10553 0 R]
+/Limits [(id376516) (id376855)]
 >> endobj
 17811 0 obj <<
-/Names [(id2595518) 8852 0 R (id2596375) 8878 0 R (id2596588) 8885 0 R (id2596653) 8893 0 R (id2597059) 8894 0 R (id2597639) 8921 0 R]
-/Limits [(id2595518) (id2597639)]
+/Names [(id377309) 10314 0 R (id377650) 10324 0 R (id377656) 10326 0 R (id377836) 10337 0 R (id377943) 10348 0 R (id377989) 10349 0 R]
+/Limits [(id377309) (id377989)]
 >> endobj
 17812 0 obj <<
-/Names [(id2597795) 8922 0 R (id2597902) 8928 0 R (id2598035) 8929 0 R (id2598298) 8959 0 R (id2598432) 8964 0 R (id2598525) 8965 0 R]
-/Limits [(id2597795) (id2598525)]
+/Names [(id378152) 10351 0 R (id378462) 10362 0 R (id378557) 10371 0 R (id378606) 10376 0 R (id378641) 10377 0 R (id378677) 10378 0 R]
+/Limits [(id378152) (id378677)]
 >> endobj
 17813 0 obj <<
-/Names [(id2598791) 8980 0 R (id2599205) 8990 0 R (id2599351) 8995 0 R (id2599570) 9000 0 R (id2599711) 9009 0 R (id2599837) 9014 0 R]
-/Limits [(id2598791) (id2599837)]
+/Names [(id378872) 10559 0 R (id378878) 10560 0 R (id379511) 10581 0 R (id379673) 10582 0 R (id379850) 10598 0 R (id380117) 10623 0 R]
+/Limits [(id378872) (id380117)]
 >> endobj
 17814 0 obj <<
-/Names [(id2599942) 9020 0 R (id2600175) 9025 0 R (id2600291) 9030 0 R (id2600436) 9035 0 R (id2600453) 9036 0 R (id2601012) 9066 0 R]
-/Limits [(id2599942) (id2601012)]
+/Names [(id380146) 10624 0 R (id380226) 10625 0 R (id380413) 10640 0 R (id380461) 10648 0 R (id380502) 10649 0 R (id380565) 10650 0 R]
+/Limits [(id380146) (id380565)]
 >> endobj
 17815 0 obj <<
-/Names [(id2601134) 9072 0 R (id2601295) 9077 0 R (id2601317) 9078 0 R (id2601688) 9103 0 R (id2601950) 9117 0 R (id2602161) 9126 0 R]
-/Limits [(id2601134) (id2602161)]
+/Names [(id380693) 10656 0 R (id380758) 10661 0 R (id380786) 10662 0 R (id380893) 11017 0 R (id381171) 10542 0 R (id381301) 10545 0 R]
+/Limits [(id380693) (id381301)]
 >> endobj
 17816 0 obj <<
-/Names [(id2602278) 9131 0 R (id2602532) 9147 0 R (id2602635) 9154 0 R (id2602671) 9156 0 R (id2602720) 9157 0 R (id2602756) 9163 0 R]
-/Limits [(id2602278) (id2602756)]
+/Names [(id381505) 9369 0 R (id381879) 9374 0 R (id382056) 9380 0 R (id382089) 9381 0 R (id382193) 9389 0 R (id382334) 9390 0 R]
+/Limits [(id381505) (id382334)]
 >> endobj
 17817 0 obj <<
-/Names [(id2602773) 9164 0 R (id2602791) 9165 0 R (id2602932) 9174 0 R (id2603216) 9183 0 R (id2603256) 9191 0 R (id2603404) 9198 0 R]
-/Limits [(id2602773) (id2603404)]
+/Names [(id382458) 9399 0 R (id382641) 9420 0 R (id382691) 9421 0 R (id382859) 9429 0 R (id383145) 9445 0 R (id383344) 9450 0 R]
+/Limits [(id382458) (id383344)]
 >> endobj
 17818 0 obj <<
-/Names [(id2603433) 9200 0 R (id2603440) 9201 0 R (id2603483) 9202 0 R (id2603992) 10876 0 R (id2604030) 10877 0 R (id2604080) 10882 0 R]
-/Limits [(id2603433) (id2604080)]
+/Names [(id383355) 9451 0 R (id383411) 9456 0 R (id383504) 9457 0 R (id383739) 9468 0 R (id383981) 9469 0 R (id384242) 9491 0 R]
+/Limits [(id383355) (id384242)]
 >> endobj
 17819 0 obj <<
-/Names [(id2604300) 10956 0 R (id2604409) 10554 0 R (id2604545) 10557 0 R (id2604598) 10565 0 R (id2605081) 10336 0 R (id2605087) 10338 0 R]
-/Limits [(id2604300) (id2605087)]
+/Names [(id384559) 9508 0 R (id384662) 9524 0 R (id384730) 9535 0 R (id384744) 9536 0 R (id384795) 9538 0 R (id384831) 9546 0 R]
+/Limits [(id384559) (id384831)]
 >> endobj
 17820 0 obj <<
-/Names [(id2605281) 10349 0 R (id2605398) 10360 0 R (id2605445) 10361 0 R (id2605615) 10363 0 R (id2605954) 10992 0 R (id2606059) 11003 0 R]
-/Limits [(id2605281) (id2606059)]
+/Names [(id384900) 9555 0 R (id384914) 9556 0 R (id385021) 9565 0 R (id385084) 9572 0 R (id385166) 9574 0 R (id385205) 9579 0 R]
+/Limits [(id384900) (id385205)]
 >> endobj
 17821 0 obj <<
-/Names [(id2606243) 11051 0 R (id2606277) 11052 0 R (id2606536) 10949 0 R (id2606586) 10950 0 R (id2606714) 10871 0 R (id2606884) 11037 0 R]
-/Limits [(id2606243) (id2606884)]
+/Names [(id385270) 9580 0 R (id385282) 9581 0 R (id385315) 9587 0 R (id385329) 9588 0 R (id385368) 9589 0 R (id385450) 9595 0 R]
+/Limits [(id385270) (id385450)]
 >> endobj
 17822 0 obj <<
-/Names [(id2607053) 10962 0 R (id2607084) 10963 0 R (id2607927) 10153 0 R (id2608753) 10374 0 R (id2608873) 10383 0 R (id2608924) 10388 0 R]
-/Limits [(id2607053) (id2608924)]
+/Names [(id385468) 9596 0 R (id385558) 9603 0 R (id385739) 9627 0 R (id385966) 9637 0 R (id386084) 9643 0 R (id386104) 9644 0 R]
+/Limits [(id385468) (id386104)]
 >> endobj
 17823 0 obj <<
-/Names [(id2608968) 10389 0 R (id2609005) 10390 0 R (id2609332) 10571 0 R (id2609339) 10572 0 R (id2609601) 10478 0 R (id2609781) 10483 0 R]
-/Limits [(id2608968) (id2609781)]
+/Names [(id386160) 9650 0 R (id386441) 9665 0 R (id386641) 9670 0 R (id386772) 9671 0 R (id386877) 9681 0 R (id387018) 9691 0 R]
+/Limits [(id386160) (id387018)]
 >> endobj
 17824 0 obj <<
-/Names [(id2610025) 10204 0 R (id2610051) 10205 0 R (id2610112) 10206 0 R (id2610153) 10211 0 R (id2610425) 10262 0 R (id2610583) 10268 0 R]
-/Limits [(id2610025) (id2610583)]
+/Names [(id387128) 9699 0 R (id387209) 9706 0 R (id387263) 9713 0 R (id387482) 9718 0 R (id387652) 9728 0 R (id387817) 9733 0 R]
+/Limits [(id387128) (id387817)]
 >> endobj
 17825 0 obj <<
-/Names [(id2610662) 10269 0 R (id2610722) 10277 0 R (id2610728) 10278 0 R (id2610848) 10279 0 R (id2611003) 10285 0 R (id2611092) 10286 0 R]
-/Limits [(id2610662) (id2611092)]
+/Names [(id387912) 9734 0 R (id388035) 9739 0 R (id388243) 9744 0 R (id389152) 9789 0 R (id389287) 9794 0 R (id389496) 9795 0 R]
+/Limits [(id387912) (id389496)]
 >> endobj
 17826 0 obj <<
-/Names [(id2611314) 10132 0 R (id2611466) 10135 0 R (id2611800) 9312 0 R (id2611910) 9318 0 R (id2612091) 9326 0 R (id2612232) 9327 0 R]
-/Limits [(id2611314) (id2612232)]
+/Names [(id389561) 9796 0 R (id389623) 9802 0 R (id389671) 9803 0 R (id389783) 9810 0 R (id389948) 9819 0 R (id390010) 9826 0 R]
+/Limits [(id389561) (id390010)]
 >> endobj
 17827 0 obj <<
-/Names [(id2612541) 9348 0 R (id2612661) 9357 0 R (id2612742) 9363 0 R (id2612856) 9368 0 R (id2612894) 9375 0 R (id2613114) 9380 0 R]
-/Limits [(id2612541) (id2613114)]
+/Names [(id390047) 9827 0 R (id390079) 9828 0 R (id390146) 9844 0 R (id390286) 9852 0 R (id390399) 9869 0 R (id390496) 9876 0 R]
+/Limits [(id390047) (id390496)]
 >> endobj
 17828 0 obj <<
-/Names [(id2613507) 9385 0 R (id2613694) 9391 0 R (id2613732) 9392 0 R (id2613843) 9400 0 R (id2613994) 9401 0 R (id2614127) 9410 0 R]
-/Limits [(id2613507) (id2614127)]
+/Names [(id390571) 9877 0 R (id390677) 9886 0 R (id391116) 9914 0 R (id391148) 9921 0 R (id391201) 9922 0 R (id391236) 9927 0 R]
+/Limits [(id390571) (id391236)]
 >> endobj
 17829 0 obj <<
-/Names [(id2614328) 9431 0 R (id2614382) 9432 0 R (id2614556) 9440 0 R (id2614896) 9456 0 R (id2615137) 9461 0 R (id2615151) 9462 0 R]
-/Limits [(id2614328) (id2615151)]
+/Names [(id391373) 9928 0 R (id391514) 9933 0 R (id391576) 9938 0 R (id391614) 9939 0 R (id391628) 9940 0 R (id391820) 9949 0 R]
+/Limits [(id391373) (id391820)]
 >> endobj
 17830 0 obj <<
-/Names [(id2615222) 9467 0 R (id2615335) 9468 0 R (id2615622) 9479 0 R (id2615919) 9480 0 R (id2616237) 9502 0 R (id2616624) 9520 0 R]
-/Limits [(id2615222) (id2616624)]
+/Names [(id391887) 9950 0 R (id391968) 9956 0 R (id392063) 9957 0 R (id392095) 9962 0 R (id392353) 9975 0 R (id392415) 9977 0 R]
+/Limits [(id391887) (id392415)]
 >> endobj
 17831 0 obj <<
-/Names [(id2616752) 9537 0 R (id2616839) 9548 0 R (id2616856) 9549 0 R (id2616918) 9551 0 R (id2616966) 9559 0 R (id2617050) 9568 0 R]
-/Limits [(id2616752) (id2617050)]
+/Names [(id392421) 9978 0 R (id392489) 9994 0 R (id392524) 9995 0 R (id392596) 9996 0 R (id392619) 10001 0 R (id392697) 10002 0 R]
+/Limits [(id392421) (id392697)]
 >> endobj
 17832 0 obj <<
-/Names [(id2617069) 9569 0 R (id2617201) 9578 0 R (id2617275) 9585 0 R (id2617367) 9587 0 R (id2617414) 9592 0 R (id2617486) 9593 0 R]
-/Limits [(id2617069) (id2617486)]
+/Names [(id392734) 10003 0 R (id392769) 10009 0 R (id392805) 10010 0 R (id392837) 10011 0 R (id392870) 10012 0 R (id392908) 10013 0 R]
+/Limits [(id392734) (id392908)]
 >> endobj
 17833 0 obj <<
-/Names [(id2617501) 9594 0 R (id2617541) 9600 0 R (id2617559) 9601 0 R (id2617604) 9602 0 R (id2617695) 9608 0 R (id2617717) 9609 0 R]
-/Limits [(id2617501) (id2617717)]
+/Names [(id392932) 10018 0 R (id392975) 10019 0 R (id393245) 10041 0 R (id393299) 10042 0 R (id393346) 10049 0 R (id393427) 10050 0 R]
+/Limits [(id392932) (id393427)]
 >> endobj
 17834 0 obj <<
-/Names [(id2617817) 9616 0 R (id2617994) 9639 0 R (id2618239) 9649 0 R (id2618364) 9655 0 R (id2618390) 9656 0 R (id2618453) 9662 0 R]
-/Limits [(id2617817) (id2618453)]
+/Names [(id393493) 10051 0 R (id393545) 10052 0 R (id394197) 10783 0 R (id394222) 10788 0 R (id394246) 10789 0 R (id394472) 10798 0 R]
+/Limits [(id393493) (id394472)]
 >> endobj
 17835 0 obj <<
-/Names [(id2618754) 9677 0 R (id2618977) 9682 0 R (id2619114) 9683 0 R (id2619253) 9693 0 R (id2619402) 9703 0 R (id2619523) 9711 0 R]
-/Limits [(id2618754) (id2619523)]
+/Names [(id394526) 10803 0 R (id394611) 10809 0 R (id394819) 10810 0 R (id394861) 10817 0 R (id394904) 10822 0 R (id394939) 10823 0 R]
+/Limits [(id394526) (id394939)]
 >> endobj
 17836 0 obj <<
-/Names [(id2619607) 9718 0 R (id2619664) 9725 0 R (id2619908) 9730 0 R (id2620086) 9740 0 R (id2620262) 9745 0 R (id2620370) 9746 0 R]
-/Limits [(id2619607) (id2620370)]
+/Names [(id394976) 10828 0 R (id394987) 10829 0 R (id395078) 10834 0 R (id395339) 10891 0 R (id395422) 10892 0 R (id395494) 10901 0 R]
+/Limits [(id394976) (id395494)]
 >> endobj
 17837 0 obj <<
-/Names [(id2620505) 9751 0 R (id2620726) 9756 0 R (id2621714) 9801 0 R (id2621862) 9806 0 R (id2622075) 9807 0 R (id2622144) 9808 0 R]
-/Limits [(id2620505) (id2622144)]
+/Names [(id395520) 10902 0 R (id395543) 10908 0 R (id395656) 10915 0 R (id395668) 10920 0 R (id395697) 10921 0 R (id395736) 10922 0 R]
+/Limits [(id395520) (id395736)]
 >> endobj
 17838 0 obj <<
-/Names [(id2622212) 9814 0 R (id2622264) 9815 0 R (id2622383) 9822 0 R (id2622563) 9831 0 R (id2622634) 9838 0 R (id2622676) 9839 0 R]
-/Limits [(id2622212) (id2622676)]
+/Names [(id395834) 11047 0 R (id395924) 11048 0 R (id396207) 10663 0 R (id396239) 10668 0 R (id396714) 10690 0 R (id397139) 10705 0 R]
+/Limits [(id395834) (id397139)]
 >> endobj
 17839 0 obj <<
-/Names [(id2622715) 9840 0 R (id2622793) 9856 0 R (id2622952) 9864 0 R (id2623083) 9881 0 R (id2623192) 9888 0 R (id2623278) 9889 0 R]
-/Limits [(id2622715) (id2623278)]
+/Names [(id397149) 10706 0 R (id397198) 10707 0 R (id397344) 10717 0 R (id397453) 10733 0 R (id397485) 11060 0 R (id397536) 11061 0 R]
+/Limits [(id397149) (id397536)]
 >> endobj
 17840 0 obj <<
-/Names [(id2623398) 9898 0 R (id2623886) 9926 0 R (id2623924) 9933 0 R (id2623980) 9934 0 R (id2624023) 9939 0 R (id2624169) 9940 0 R]
-/Limits [(id2623398) (id2624169)]
+/Names [(id397589) 11068 0 R (id397663) 11069 0 R (id397798) 11075 0 R (id397833) 11076 0 R (id397980) 11113 0 R (id398046) 11263 0 R]
+/Limits [(id397589) (id398046)]
 >> endobj
 17841 0 obj <<
-/Names [(id2624319) 9945 0 R (id2624389) 9950 0 R (id2624431) 9951 0 R (id2624446) 9952 0 R (id2624668) 9961 0 R (id2624738) 9962 0 R]
-/Limits [(id2624319) (id2624738)]
+/Names [(id398090) 11264 0 R (id398206) 11041 0 R (id398380) 11024 0 R (id398425) 11025 0 R (id398557) 10879 0 R (id399021) 11106 0 R]
+/Limits [(id398090) (id399021)]
 >> endobj
 17842 0 obj <<
-/Names [(id2624828) 9968 0 R (id2624927) 9969 0 R (id2624960) 9974 0 R (id2625252) 9987 0 R (id2625315) 9989 0 R (id2625322) 9990 0 R]
-/Limits [(id2624828) (id2625322)]
+/Names [(id399280) 11811 0 R (id399320) 11812 0 R (id399372) 11841 0 R (id399378) 11842 0 R (id399722) 11265 0 R (id399732) 11266 0 R]
+/Limits [(id399280) (id399732)]
 >> endobj
 17843 0 obj <<
-/Names [(id2625395) 10006 0 R (id2625432) 10007 0 R (id2625509) 10008 0 R (id2625533) 10013 0 R (id2625620) 10014 0 R (id2625660) 10015 0 R]
-/Limits [(id2625395) (id2625660)]
+/Names [(id399744) 11267 0 R (id399864) 11387 0 R (id400459) 11620 0 R (id400510) 11621 0 R (id400755) 11392 0 R (id400796) 11446 0 R]
+/Limits [(id399744) (id400796)]
 >> endobj
 17844 0 obj <<
-/Names [(id2625699) 10021 0 R (id2625736) 10022 0 R (id2625772) 10023 0 R (id2625807) 10024 0 R (id2625849) 10025 0 R (id2625875) 10030 0 R]
-/Limits [(id2625699) (id2625875)]
+/Names [(id400813) 11447 0 R (id401496) 11053 0 R (id401624) 11054 0 R (id401689) 11059 0 R (id401770) 10980 0 R (id401865) 10991 0 R]
+/Limits [(id400813) (id401865)]
 >> endobj
 17845 0 obj <<
-/Names [(id2625921) 10031 0 R (id2626206) 10053 0 R (id2626263) 10054 0 R (id2626313) 10061 0 R (id2626398) 10062 0 R (id2626471) 10063 0 R]
-/Limits [(id2625921) (id2626471)]
+/Names [(id402003) 10997 0 R (id402009) 10998 0 R (id402071) 11452 0 R (id402228) 11453 0 R (id403062) 11170 0 R (id403536) 11472 0 R]
+/Limits [(id402003) (id403536)]
 >> endobj
 17846 0 obj <<
-/Names [(id2626526) 10064 0 R (id2626696) 10866 0 R (id2626818) 11036 0 R (id2626932) 10593 0 R (id2627089) 10594 0 R (id2627255) 10610 0 R]
-/Limits [(id2626526) (id2627255)]
+/Names [(id403684) 11478 0 R (id403865) 11484 0 R (id403877) 11485 0 R (id403933) 11490 0 R (id404031) 11495 0 R (id404083) 11496 0 R]
+/Limits [(id403684) (id404083)]
 >> endobj
 17847 0 obj <<
-/Names [(id2627500) 10635 0 R (id2627531) 10636 0 R (id2627573) 10637 0 R (id2627748) 10652 0 R (id2627792) 10660 0 R (id2627830) 10661 0 R]
-/Limits [(id2627500) (id2627830)]
+/Names [(id404135) 11497 0 R (id404192) 11503 0 R (id404233) 11504 0 R (id404251) 11505 0 R (id404292) 11523 0 R (id404374) 11291 0 R]
+/Limits [(id404135) (id404374)]
 >> endobj
 17848 0 obj <<
-/Names [(id2627891) 10662 0 R (id2628015) 10668 0 R (id2628081) 10673 0 R (id2628110) 10674 0 R (id2628208) 10675 0 R (id2628250) 10680 0 R]
-/Limits [(id2627891) (id2628250)]
+/Names [(id404413) 11292 0 R (id404590) 11297 0 R (id405174) 11319 0 R (id405306) 11327 0 R (id405331) 11328 0 R (id405690) 11329 0 R]
+/Limits [(id404413) (id405690)]
 >> endobj
 17849 0 obj <<
-/Names [(id2628767) 10702 0 R (id2629238) 10717 0 R (id2629248) 10718 0 R (id2629308) 10719 0 R (id2629476) 10729 0 R (id2629594) 10745 0 R]
-/Limits [(id2628767) (id2629594)]
+/Names [(id405780) 11337 0 R (id405940) 11347 0 R (id405950) 11349 0 R (id406332) 11355 0 R (id406547) 11818 0 R (id406553) 11819 0 R]
+/Limits [(id405780) (id406553)]
 >> endobj
 17850 0 obj <<
-/Names [(id2629635) 10891 0 R (id2630048) 10756 0 R (id2630536) 10795 0 R (id2630560) 10800 0 R (id2630586) 10801 0 R (id2630818) 10810 0 R]
-/Limits [(id2629635) (id2630818)]
+/Names [(id406616) 11835 0 R (id406885) 11757 0 R (id406945) 11758 0 R (id406973) 11759 0 R (id407015) 11765 0 R (id407140) 11766 0 R]
+/Limits [(id406616) (id407140)]
 >> endobj
 17851 0 obj <<
-/Names [(id2630874) 10815 0 R (id2630965) 10821 0 R (id2631165) 10822 0 R (id2631208) 10829 0 R (id2631253) 10834 0 R (id2631290) 10835 0 R]
-/Limits [(id2630874) (id2631290)]
+/Names [(id407316) 11697 0 R (id407434) 11702 0 R (id407714) 11534 0 R (id407789) 11609 0 R (id407836) 11610 0 R (id408096) 11686 0 R]
+/Limits [(id407316) (id408096)]
 >> endobj
 17852 0 obj <<
-/Names [(id2631329) 10840 0 R (id2631340) 10841 0 R (id2631430) 10846 0 R (id2631552) 11009 0 R (id2631558) 11010 0 R (id2632195) 11080 0 R]
-/Limits [(id2631329) (id2632195)]
+/Names [(id408261) 11670 0 R (id408321) 11668 0 R (id408387) 11801 0 R (id408525) 11731 0 R (id408661) 11742 0 R (id408697) 11802 0 R]
+/Limits [(id408261) (id408697)]
 >> endobj
 17853 0 obj <<
-/Names [(id2632274) 11081 0 R (id2632413) 11087 0 R (id2632451) 11088 0 R (id2632946) 11182 0 R (id2632967) 11304 0 R (id2633145) 11309 0 R]
-/Limits [(id2632274) (id2633145)]
+/Names [(id408836) 11361 0 R (id409016) 11393 0 R (id409064) 11398 0 R (id409102) 11399 0 R (id409144) 11400 0 R (id409351) 11412 0 R]
+/Limits [(id408836) (id409351)]
 >> endobj
 17854 0 obj <<
-/Names [(id2633737) 11814 0 R (id2633814) 10968 0 R (id2634066) 11621 0 R (id2634118) 11622 0 R (id2634420) 11508 0 R (id2634474) 11509 0 R]
-/Limits [(id2633737) (id2634474)]
+/Names [(id409425) 11419 0 R (id409629) 11420 0 R (id410753) 11743 0 R (id410887) 11748 0 R (id410945) 11857 0 R (id410967) 11858 0 R]
+/Limits [(id409425) (id410967)]
 >> endobj
 17855 0 obj <<
-/Names [(id2634539) 11515 0 R (id2634585) 11516 0 R (id2634604) 11517 0 R (id2634904) 11458 0 R (id2634923) 11459 0 R (id2634994) 11464 0 R]
-/Limits [(id2634539) (id2634994)]
+/Names [(id411016) 11859 0 R (id411039) 11865 0 R (id411089) 11867 0 R (id411153) 11873 0 R (id411283) 11918 0 R (id411300) 11919 0 R]
+/Limits [(id411016) (id411300)]
 >> endobj
 17856 0 obj <<
-/Names [(id2635096) 11389 0 R (id2635261) 11496 0 R (id2635274) 11497 0 R (id2635335) 11502 0 R (id2635439) 11507 0 R (id2635547) 11269 0 R]
-/Limits [(id2635096) (id2635547)]
+/Names [(id411318) 11921 0 R (id411433) 11910 0 R (id411450) 11911 0 R (id411487) 11912 0 R (id411518) 11843 0 R (id411565) 11849 0 R]
+/Limits [(id411318) (id411565)]
 >> endobj
 17857 0 obj <<
-/Names [(id2635581) 11276 0 R (id2635712) 11277 0 R (id2635721) 11278 0 R (id2635732) 11279 0 R (id2636014) 11118 0 R (id2636024) 11119 0 R]
-/Limits [(id2635581) (id2636024)]
+/Names [(id411643) 11850 0 R (id411649) 11851 0 R (id411871) 12018 0 R (id412617) 11622 0 R (id412673) 11628 0 R (id412908) 11643 0 R]
+/Limits [(id411643) (id412908)]
 >> endobj
 17858 0 obj <<
-/Names [(id2636400) 11303 0 R (id2636848) 11405 0 R (id2636920) 11484 0 R (id2637075) 11490 0 R (id2638106) 11769 0 R (id2638172) 11770 0 R]
-/Limits [(id2636400) (id2638172)]
+/Names [(id412930) 11644 0 R (id412964) 11645 0 R (id413122) 11657 0 R (id413292) 11692 0 R (id413333) 11721 0 R (id413339) 11722 0 R]
+/Limits [(id412930) (id413339)]
 >> endobj
 17859 0 obj <<
-/Names [(id2638201) 11771 0 R (id2638248) 11777 0 R (id2638380) 11778 0 R (id2638597) 11787 0 R (id2638697) 11792 0 R (id2638820) 11797 0 R]
-/Limits [(id2638201) (id2638820)]
+/Names [(id413374) 11723 0 R (id413386) 11730 0 R (id413945) 11874 0 R (id414073) 11889 0 R (id414098) 11898 0 R (id414428) 11899 0 R]
+/Limits [(id413374) (id414428)]
 >> endobj
 17860 0 obj <<
-/Names [(id2638884) 11847 0 R (id2638966) 11853 0 R (id2638972) 11854 0 R (id2639010) 11534 0 R (id2639050) 11535 0 R (id2639432) 11546 0 R]
-/Limits [(id2638884) (id2639432)]
+/Names [(id414513) 11927 0 R (id414606) 11928 0 R (id414917) 11775 0 R (id415013) 11780 0 R (id415126) 11785 0 R (id415213) 11904 0 R]
+/Limits [(id414513) (id415213)]
 >> endobj
 17861 0 obj <<
-/Names [(id2639782) 11399 0 R (id2639877) 11410 0 R (id2639923) 11411 0 R (id2639973) 11412 0 R (id2640217) 11424 0 R (id2640461) 11331 0 R]
-/Limits [(id2639782) (id2640461)]
+/Names [(id415243) 11909 0 R (id415370) 12038 0 R (id415448) 12044 0 R (id416910) 12004 0 R (id416957) 12012 0 R (idmap-gid2sid) 7625 0 R]
+/Limits [(id415243) (idmap-gid2sid)]
 >> endobj
 17862 0 obj <<
-/Names [(id2640587) 11339 0 R (id2640612) 11340 0 R (id2640941) 11341 0 R (id2641030) 11349 0 R (id2641179) 11359 0 R (id2641189) 11361 0 R]
-/Limits [(id2640587) (id2641189)]
+/Names [(idmap-sid2gid) 7614 0 R (idmap-sid2uid) 7279 0 R (idmap-store-gid2sid) 7630 0 R (idmap-uid2sid) 7280 0 R (idmapadsdms) 8027 0 R (idmapadsridDMS) 8055 0 R]
+/Limits [(idmap-sid2gid) (idmapadsridDMS)]
 >> endobj
 17863 0 obj <<
-/Names [(id2641545) 11367 0 R (id2641693) 11373 0 R (id2642620) 11431 0 R (id2642838) 11432 0 R (id2643263) 11807 0 R (id2643541) 12024 0 R]
-/Limits [(id2641545) (id2643541)]
+/Names [(idmapbackend) 7320 0 R (idmapbackendexample) 7322 0 R (idmapldapDMS) 8090 0 R (idmapnt4dms) 8003 0 R (idmapper) 3813 0 R (idmaprfc2307) 8137 0 R]
+/Limits [(idmapbackend) (idmaprfc2307)]
 >> endobj
 17864 0 obj <<
-/Names [(id2643795) 11754 0 R (id2643869) 11755 0 R (id2644009) 11760 0 R (id2644234) 11855 0 R (id2644436) 11680 0 R (id2644522) 11682 0 R]
-/Limits [(id2643795) (id2644522)]
+/Names [(inst-rpc) 8957 0 R (install) 3739 0 R (integrate-ms-networks) 3885 0 R (introduction) 5459 0 R (japancharsets) 10992 0 R (largefile) 3889 0 R]
+/Limits [(inst-rpc) (largefile)]
 >> endobj
 17865 0 obj <<
-/Names [(id2644881) 11632 0 R (id2644933) 11633 0 R (id2645023) 11634 0 R (id2645090) 11698 0 R (id2645276) 11704 0 R (id2645843) 11655 0 R]
-/Limits [(id2644881) (id2645843)]
+/Names [(ldappwsync) 7582 0 R (lmbexample) 7065 0 R (locking) 3816 0 R (lstlisting.1.-1) 5483 0 R (lstlisting.1.-2) 5516 0 R (lstlisting.10.-36) 7049 0 R]
+/Limits [(ldappwsync) (lstlisting.10.-36)]
 >> endobj
 17866 0 obj <<
-/Names [(id2645866) 11656 0 R (id2645906) 11657 0 R (id2646076) 11669 0 R (id2646185) 11709 0 R (id2646308) 11714 0 R (id2646867) 11813 0 R]
-/Limits [(id2645866) (id2646867)]
+/Names [(lstlisting.10.-37) 7052 0 R (lstlisting.10.-38) 7066 0 R (lstlisting.10.-39) 7073 0 R (lstlisting.10.-40) 7087 0 R (lstlisting.10.-41) 7114 0 R (lstlisting.10.-42) 7118 0 R]
+/Limits [(lstlisting.10.-37) (lstlisting.10.-42)]
 >> endobj
 17867 0 obj <<
-/Names [(id2647110) 11901 0 R (id2647155) 11921 0 R (id2647196) 11922 0 R (id2647215) 11923 0 R (id2647256) 11924 0 R (id2647352) 11823 0 R]
-/Limits [(id2647110) (id2647352)]
+/Names [(lstlisting.10.-43) 7120 0 R (lstlisting.10.-44) 7127 0 R (lstlisting.10.-45) 7137 0 R (lstlisting.10.-46) 7147 0 R (lstlisting.10.-47) 7170 0 R (lstlisting.10.-48) 7172 0 R]
+/Limits [(lstlisting.10.-43) (lstlisting.10.-48)]
 >> endobj
 17868 0 obj <<
-/Names [(id2647396) 11824 0 R (id2647455) 11830 0 R (id2647461) 11831 0 R (id2648038) 11871 0 R (id2648063) 11877 0 R (id2648121) 11879 0 R]
-/Limits [(id2647396) (id2648121)]
+/Names [(lstlisting.10.-49) 7174 0 R (lstlisting.11.-50) 7328 0 R (lstlisting.11.-51) 7501 0 R (lstlisting.11.-52) 7529 0 R (lstlisting.12.-53) 7706 0 R (lstlisting.13.-54) 7808 0 R]
+/Limits [(lstlisting.10.-49) (lstlisting.13.-54)]
 >> endobj
 17869 0 obj <<
-/Names [(id2648188) 11885 0 R (id2648210) 11886 0 R (id2648294) 11910 0 R (id2648334) 11911 0 R (id2648414) 11916 0 R (id2648690) 11861 0 R]
-/Limits [(id2648188) (id2648690)]
+/Names [(lstlisting.14.-55) 8004 0 R (lstlisting.14.-56) 8028 0 R (lstlisting.14.-57) 8056 0 R (lstlisting.14.-58) 8091 0 R (lstlisting.14.-59) 8138 0 R (lstlisting.16.-60) 8360 0 R]
+/Limits [(lstlisting.14.-55) (lstlisting.16.-60)]
 >> endobj
 17870 0 obj <<
-/Names [(id2648778) 11862 0 R (id2648784) 11863 0 R (id2648869) 11869 0 R (id2648897) 11870 0 R (id2649198) 11733 0 R (id2649204) 11734 0 R]
-/Limits [(id2648778) (id2649204)]
+/Names [(lstlisting.16.-61) 8401 0 R (lstlisting.16.-62) 8409 0 R (lstlisting.17.-63) 8483 0 R (lstlisting.17.-64) 8487 0 R (lstlisting.17.-65) 8490 0 R (lstlisting.17.-66) 8498 0 R]
+/Limits [(lstlisting.16.-61) (lstlisting.17.-66)]
 >> endobj
 17871 0 obj <<
-/Names [(id2649246) 11735 0 R (id2649259) 11742 0 R (id2649296) 11743 0 R (id2649887) 12050 0 R (id2650433) 12030 0 R (id2652628) 11930 0 R]
-/Limits [(id2649246) (id2652628)]
+/Names [(lstlisting.17.-67) 8503 0 R (lstlisting.17.-68) 8506 0 R (lstlisting.18.-69) 8576 0 R (lstlisting.18.-70) 8585 0 R (lstlisting.18.-71) 8588 0 R (lstlisting.18.-72) 8597 0 R]
+/Limits [(lstlisting.17.-67) (lstlisting.18.-72)]
 >> endobj
 17872 0 obj <<
-/Names [(id2652645) 11931 0 R (id2652664) 11933 0 R (id2652758) 11939 0 R (id2652856) 11940 0 R (id2653012) 12056 0 R (idmap-gid2sid) 7633 0 R]
-/Limits [(id2652645) (idmap-gid2sid)]
+/Names [(lstlisting.18.-73) 8620 0 R (lstlisting.18.-74) 8622 0 R (lstlisting.19.-75) 8633 0 R (lstlisting.2.-10) 5908 0 R (lstlisting.2.-11) 5947 0 R (lstlisting.2.-12) 5986 0 R]
+/Limits [(lstlisting.18.-73) (lstlisting.2.-12)]
 >> endobj
 17873 0 obj <<
-/Names [(idmap-sid2gid) 7620 0 R (idmap-sid2uid) 7281 0 R (idmap-store-gid2sid) 7638 0 R (idmap-uid2sid) 7282 0 R (idmapadsdms) 8038 0 R (idmapadsridDMS) 8066 0 R]
-/Limits [(idmap-sid2gid) (idmapadsridDMS)]
->> endobj
-17874 0 obj <<
-/Names [(idmapbackend) 7326 0 R (idmapbackendexample) 7328 0 R (idmapldapDMS) 8101 0 R (idmapnt4dms) 8014 0 R (idmapper) 3813 0 R (idmaprfc2307) 8148 0 R]
-/Limits [(idmapbackend) (idmaprfc2307)]
->> endobj
-17875 0 obj <<
-/Names [(inst-rpc) 8971 0 R (install) 3739 0 R (integrate-ms-networks) 3885 0 R (introduction) 5459 0 R (japancharsets) 11004 0 R (largefile) 3889 0 R]
-/Limits [(inst-rpc) (largefile)]
->> endobj
-17876 0 obj <<
-/Names [(ldappwsync) 7588 0 R (lmbexample) 7066 0 R (locking) 3816 0 R (lstlisting.1.-1) 5483 0 R (lstlisting.1.-2) 5516 0 R (lstlisting.10.-36) 7050 0 R]
-/Limits [(ldappwsync) (lstlisting.10.-36)]
->> endobj
-17877 0 obj <<
-/Names [(lstlisting.10.-37) 7053 0 R (lstlisting.10.-38) 7067 0 R (lstlisting.10.-39) 7074 0 R (lstlisting.10.-40) 7088 0 R (lstlisting.10.-41) 7115 0 R (lstlisting.10.-42) 7119 0 R]
-/Limits [(lstlisting.10.-37) (lstlisting.10.-42)]
->> endobj
-17878 0 obj <<
-/Names [(lstlisting.10.-43) 7121 0 R (lstlisting.10.-44) 7128 0 R (lstlisting.10.-45) 7138 0 R (lstlisting.10.-46) 7148 0 R (lstlisting.10.-47) 7171 0 R (lstlisting.10.-48) 7173 0 R]
-/Limits [(lstlisting.10.-43) (lstlisting.10.-48)]
->> endobj
-17879 0 obj <<
-/Names [(lstlisting.10.-49) 7175 0 R (lstlisting.11.-50) 7334 0 R (lstlisting.11.-51) 7507 0 R (lstlisting.11.-52) 7535 0 R (lstlisting.12.-53) 7717 0 R (lstlisting.13.-54) 7819 0 R]
-/Limits [(lstlisting.10.-49) (lstlisting.13.-54)]
->> endobj
-17880 0 obj <<
-/Names [(lstlisting.14.-55) 8015 0 R (lstlisting.14.-56) 8039 0 R (lstlisting.14.-57) 8067 0 R (lstlisting.14.-58) 8102 0 R (lstlisting.14.-59) 8149 0 R (lstlisting.16.-60) 8373 0 R]
-/Limits [(lstlisting.14.-55) (lstlisting.16.-60)]
->> endobj
-17881 0 obj <<
-/Names [(lstlisting.16.-61) 8414 0 R (lstlisting.16.-62) 8422 0 R (lstlisting.17.-63) 8496 0 R (lstlisting.17.-64) 8500 0 R (lstlisting.17.-65) 8503 0 R (lstlisting.17.-66) 8511 0 R]
-/Limits [(lstlisting.16.-61) (lstlisting.17.-66)]
->> endobj
-17882 0 obj <<
-/Names [(lstlisting.17.-67) 8516 0 R (lstlisting.17.-68) 8519 0 R (lstlisting.18.-69) 8589 0 R (lstlisting.18.-70) 8598 0 R (lstlisting.18.-71) 8601 0 R (lstlisting.18.-72) 8610 0 R]
-/Limits [(lstlisting.17.-67) (lstlisting.18.-72)]
->> endobj
-17883 0 obj <<
-/Names [(lstlisting.18.-73) 8633 0 R (lstlisting.18.-74) 8635 0 R (lstlisting.19.-75) 8646 0 R (lstlisting.2.-10) 5908 0 R (lstlisting.2.-11) 5947 0 R (lstlisting.2.-12) 5986 0 R]
-/Limits [(lstlisting.18.-73) (lstlisting.2.-12)]
->> endobj
-17884 0 obj <<
 /Names [(lstlisting.2.-3) 5604 0 R (lstlisting.2.-4) 5635 0 R (lstlisting.2.-5) 5655 0 R (lstlisting.2.-6) 5697 0 R (lstlisting.2.-7) 5755 0 R (lstlisting.2.-8) 5776 0 R]
 /Limits [(lstlisting.2.-3) (lstlisting.2.-8)]
 >> endobj
-17885 0 obj <<
-/Names [(lstlisting.2.-9) 5835 0 R (lstlisting.20.-76) 8722 0 R (lstlisting.20.-77) 8736 0 R (lstlisting.21.-78) 8776 0 R (lstlisting.21.-79) 8812 0 R (lstlisting.21.-80) 8823 0 R]
+17874 0 obj <<
+/Names [(lstlisting.2.-9) 5835 0 R (lstlisting.20.-76) 8708 0 R (lstlisting.20.-77) 8722 0 R (lstlisting.21.-78) 8762 0 R (lstlisting.21.-79) 8798 0 R (lstlisting.21.-80) 8809 0 R]
 /Limits [(lstlisting.2.-9) (lstlisting.21.-80)]
 >> endobj
-17886 0 obj <<
-/Names [(lstlisting.21.-81) 8907 0 R (lstlisting.21.-82) 8909 0 R (lstlisting.21.-83) 8935 0 R (lstlisting.22.-84) 9241 0 R (lstlisting.22.-85) 9260 0 R (lstlisting.22.-86) 9570 0 R]
+17875 0 obj <<
+/Names [(lstlisting.21.-81) 8893 0 R (lstlisting.21.-82) 8895 0 R (lstlisting.21.-83) 8921 0 R (lstlisting.22.-84) 9227 0 R (lstlisting.22.-85) 9247 0 R (lstlisting.22.-86) 9557 0 R]
 /Limits [(lstlisting.21.-81) (lstlisting.22.-86)]
 >> endobj
-17887 0 obj <<
-/Names [(lstlisting.22.-87) 9618 0 R (lstlisting.23.-88) 10098 0 R (lstlisting.23.-89) 10106 0 R (lstlisting.23.-90) 10187 0 R (lstlisting.24.-91) 10307 0 R (lstlisting.27.-92) 10546 0 R]
+17876 0 obj <<
+/Names [(lstlisting.22.-87) 9605 0 R (lstlisting.23.-88) 10086 0 R (lstlisting.23.-89) 10094 0 R (lstlisting.23.-90) 10175 0 R (lstlisting.24.-91) 10295 0 R (lstlisting.27.-92) 10534 0 R]
 /Limits [(lstlisting.22.-87) (lstlisting.27.-92)]
 >> endobj
-17888 0 obj <<
-/Names [(lstlisting.27.-93) 10548 0 R (lstlisting.27.-94) 10555 0 R (lstlisting.27.-95) 10558 0 R (lstlisting.27.-96) 10730 0 R (lstlisting.27.-97) 10740 0 R (lstlisting.29.-98) 10921 0 R]
+17877 0 obj <<
+/Names [(lstlisting.27.-93) 10536 0 R (lstlisting.27.-94) 10543 0 R (lstlisting.27.-95) 10546 0 R (lstlisting.27.-96) 10718 0 R (lstlisting.27.-97) 10728 0 R (lstlisting.29.-98) 10909 0 R]
 /Limits [(lstlisting.27.-93) (lstlisting.29.-98)]
 >> endobj
-17889 0 obj <<
-/Names [(lstlisting.29.-99) 10923 0 R (lstlisting.3.-13) 6063 0 R (lstlisting.3.-14) 6071 0 R (lstlisting.3.-15) 6082 0 R (lstlisting.3.-16) 6105 0 R (lstlisting.3.-17) 6108 0 R]
+17878 0 obj <<
+/Names [(lstlisting.29.-99) 10911 0 R (lstlisting.3.-13) 6063 0 R (lstlisting.3.-14) 6071 0 R (lstlisting.3.-15) 6082 0 R (lstlisting.3.-16) 6105 0 R (lstlisting.3.-17) 6108 0 R]
 /Limits [(lstlisting.29.-99) (lstlisting.3.-17)]
 >> endobj
-17890 0 obj <<
-/Names [(lstlisting.3.-18) 6123 0 R (lstlisting.3.-19) 6136 0 R (lstlisting.30.-100) 10985 0 R (lstlisting.30.-101) 10999 0 R (lstlisting.33.-102) 11098 0 R (lstlisting.34.-103) 11132 0 R]
+17879 0 obj <<
+/Names [(lstlisting.3.-18) 6123 0 R (lstlisting.3.-19) 6136 0 R (lstlisting.30.-100) 10973 0 R (lstlisting.30.-101) 10987 0 R (lstlisting.33.-102) 11086 0 R (lstlisting.34.-103) 11120 0 R]
 /Limits [(lstlisting.3.-18) (lstlisting.34.-103)]
 >> endobj
-17891 0 obj <<
-/Names [(lstlisting.34.-104) 11170 0 R (lstlisting.34.-105) 11190 0 R (lstlisting.34.-106) 11219 0 R (lstlisting.34.-107) 11244 0 R (lstlisting.35.-108) 11374 0 R (lstlisting.38.-109) 11541 0 R]
+17880 0 obj <<
+/Names [(lstlisting.34.-104) 11158 0 R (lstlisting.34.-105) 11178 0 R (lstlisting.34.-106) 11207 0 R (lstlisting.34.-107) 11232 0 R (lstlisting.35.-108) 11362 0 R (lstlisting.38.-109) 11529 0 R]
 /Limits [(lstlisting.34.-104) (lstlisting.38.-109)]
 >> endobj
-17892 0 obj <<
-/Names [(lstlisting.38.-110) 11567 0 R (lstlisting.38.-111) 11578 0 R (lstlisting.4.-20) 6268 0 R (lstlisting.4.-21) 6296 0 R (lstlisting.4.-22) 6311 0 R (lstlisting.40.-112) 11688 0 R]
+17881 0 obj <<
+/Names [(lstlisting.38.-110) 11555 0 R (lstlisting.38.-111) 11566 0 R (lstlisting.4.-20) 6267 0 R (lstlisting.4.-21) 6295 0 R (lstlisting.4.-22) 6310 0 R (lstlisting.40.-112) 11676 0 R]
 /Limits [(lstlisting.38.-110) (lstlisting.40.-112)]
 >> endobj
-17893 0 obj <<
-/Names [(lstlisting.40.-113) 11699 0 R (lstlisting.43.-114) 11888 0 R (lstlisting.5.-23) 6415 0 R (lstlisting.5.-24) 6433 0 R (lstlisting.5.-25) 6468 0 R (lstlisting.6.-26) 6546 0 R]
+17882 0 obj <<
+/Names [(lstlisting.40.-113) 11687 0 R (lstlisting.43.-114) 11876 0 R (lstlisting.5.-23) 6414 0 R (lstlisting.5.-24) 6432 0 R (lstlisting.5.-25) 6467 0 R (lstlisting.6.-26) 6545 0 R]
 /Limits [(lstlisting.40.-113) (lstlisting.6.-26)]
 >> endobj
-17894 0 obj <<
-/Names [(lstlisting.6.-27) 6572 0 R (lstlisting.6.-28) 6574 0 R (lstlisting.6.-29) 6576 0 R (lstlisting.6.-30) 6578 0 R (lstlisting.6.-31) 6600 0 R (lstlisting.6.-32) 6612 0 R]
+17883 0 obj <<
+/Names [(lstlisting.6.-27) 6571 0 R (lstlisting.6.-28) 6573 0 R (lstlisting.6.-29) 6575 0 R (lstlisting.6.-30) 6577 0 R (lstlisting.6.-31) 6599 0 R (lstlisting.6.-32) 6611 0 R]
 /Limits [(lstlisting.6.-27) (lstlisting.6.-32)]
 >> endobj
-17895 0 obj <<
-/Names [(lstlisting.6.-33) 6646 0 R (lstlisting.7.-34) 6687 0 R (lstlisting.7.-35) 6718 0 R (lstnumber.-1.1) 5485 0 R (lstnumber.-1.2) 5486 0 R (lstnumber.-1.3) 5487 0 R]
+17884 0 obj <<
+/Names [(lstlisting.6.-33) 6645 0 R (lstlisting.7.-34) 6686 0 R (lstlisting.7.-35) 6717 0 R (lstnumber.-1.1) 5485 0 R (lstnumber.-1.2) 5486 0 R (lstnumber.-1.3) 5487 0 R]
 /Limits [(lstlisting.6.-33) (lstnumber.-1.3)]
 >> endobj
-17896 0 obj <<
+17885 0 obj <<
 /Names [(lstnumber.-1.4) 5488 0 R (lstnumber.-1.5) 5489 0 R (lstnumber.-1.6) 5490 0 R (lstnumber.-1.7) 5491 0 R (lstnumber.-1.8) 5492 0 R (lstnumber.-10.1) 5909 0 R]
 /Limits [(lstnumber.-1.4) (lstnumber.-10.1)]
 >> endobj
-17897 0 obj <<
+17886 0 obj <<
 /Names [(lstnumber.-10.10) 5918 0 R (lstnumber.-10.11) 5919 0 R (lstnumber.-10.12) 5920 0 R (lstnumber.-10.13) 5921 0 R (lstnumber.-10.14) 5922 0 R (lstnumber.-10.15) 5923 0 R]
 /Limits [(lstnumber.-10.10) (lstnumber.-10.15)]
 >> endobj
-17898 0 obj <<
+17887 0 obj <<
 /Names [(lstnumber.-10.16) 5924 0 R (lstnumber.-10.17) 5925 0 R (lstnumber.-10.18) 5926 0 R (lstnumber.-10.19) 5927 0 R (lstnumber.-10.2) 5910 0 R (lstnumber.-10.20) 5928 0 R]
 /Limits [(lstnumber.-10.16) (lstnumber.-10.20)]
 >> endobj
-17899 0 obj <<
+17888 0 obj <<
 /Names [(lstnumber.-10.21) 5929 0 R (lstnumber.-10.22) 5930 0 R (lstnumber.-10.23) 5931 0 R (lstnumber.-10.24) 5932 0 R (lstnumber.-10.25) 5933 0 R (lstnumber.-10.26) 5934 0 R]
 /Limits [(lstnumber.-10.21) (lstnumber.-10.26)]
 >> endobj
-17900 0 obj <<
+17889 0 obj <<
 /Names [(lstnumber.-10.27) 5935 0 R (lstnumber.-10.28) 5936 0 R (lstnumber.-10.29) 5937 0 R (lstnumber.-10.3) 5911 0 R (lstnumber.-10.30) 5938 0 R (lstnumber.-10.31) 5939 0 R]
 /Limits [(lstnumber.-10.27) (lstnumber.-10.31)]
 >> endobj
-17901 0 obj <<
+17890 0 obj <<
 /Names [(lstnumber.-10.32) 5940 0 R (lstnumber.-10.33) 5941 0 R (lstnumber.-10.34) 5942 0 R (lstnumber.-10.4) 5912 0 R (lstnumber.-10.5) 5913 0 R (lstnumber.-10.6) 5914 0 R]
 /Limits [(lstnumber.-10.32) (lstnumber.-10.6)]
 >> endobj
-17902 0 obj <<
-/Names [(lstnumber.-10.7) 5915 0 R (lstnumber.-10.8) 5916 0 R (lstnumber.-10.9) 5917 0 R (lstnumber.-100.1) 10986 0 R (lstnumber.-100.2) 10987 0 R (lstnumber.-100.3) 10988 0 R]
+17891 0 obj <<
+/Names [(lstnumber.-10.7) 5915 0 R (lstnumber.-10.8) 5916 0 R (lstnumber.-10.9) 5917 0 R (lstnumber.-100.1) 10974 0 R (lstnumber.-100.2) 10975 0 R (lstnumber.-100.3) 10976 0 R]
 /Limits [(lstnumber.-10.7) (lstnumber.-100.3)]
 >> endobj
-17903 0 obj <<
-/Names [(lstnumber.-100.4) 10989 0 R (lstnumber.-100.5) 10990 0 R (lstnumber.-100.6) 10991 0 R (lstnumber.-101.1) 11000 0 R (lstnumber.-101.2) 11001 0 R (lstnumber.-101.3) 11002 0 R]
+17892 0 obj <<
+/Names [(lstnumber.-100.4) 10977 0 R (lstnumber.-100.5) 10978 0 R (lstnumber.-100.6) 10979 0 R (lstnumber.-101.1) 10988 0 R (lstnumber.-101.2) 10989 0 R (lstnumber.-101.3) 10990 0 R]
 /Limits [(lstnumber.-100.4) (lstnumber.-101.3)]
 >> endobj
-17904 0 obj <<
-/Names [(lstnumber.-102.1) 11099 0 R (lstnumber.-102.2) 11100 0 R (lstnumber.-102.3) 11101 0 R (lstnumber.-102.4) 11102 0 R (lstnumber.-102.5) 11103 0 R (lstnumber.-102.6) 11104 0 R]
+17893 0 obj <<
+/Names [(lstnumber.-102.1) 11087 0 R (lstnumber.-102.2) 11088 0 R (lstnumber.-102.3) 11089 0 R (lstnumber.-102.4) 11090 0 R (lstnumber.-102.5) 11091 0 R (lstnumber.-102.6) 11092 0 R]
 /Limits [(lstnumber.-102.1) (lstnumber.-102.6)]
 >> endobj
-17905 0 obj <<
-/Names [(lstnumber.-102.7) 11105 0 R (lstnumber.-103.1) 11133 0 R (lstnumber.-103.10) 11142 0 R (lstnumber.-103.11) 11143 0 R (lstnumber.-103.12) 11144 0 R (lstnumber.-103.13) 11145 0 R]
+17894 0 obj <<
+/Names [(lstnumber.-102.7) 11093 0 R (lstnumber.-103.1) 11121 0 R (lstnumber.-103.10) 11130 0 R (lstnumber.-103.11) 11131 0 R (lstnumber.-103.12) 11132 0 R (lstnumber.-103.13) 11133 0 R]
 /Limits [(lstnumber.-102.7) (lstnumber.-103.13)]
 >> endobj
-17906 0 obj <<
-/Names [(lstnumber.-103.14) 11146 0 R (lstnumber.-103.15) 11147 0 R (lstnumber.-103.16) 11148 0 R (lstnumber.-103.17) 11149 0 R (lstnumber.-103.18) 11150 0 R (lstnumber.-103.19) 11151 0 R]
+17895 0 obj <<
+/Names [(lstnumber.-103.14) 11134 0 R (lstnumber.-103.15) 11135 0 R (lstnumber.-103.16) 11136 0 R (lstnumber.-103.17) 11137 0 R (lstnumber.-103.18) 11138 0 R (lstnumber.-103.19) 11139 0 R]
 /Limits [(lstnumber.-103.14) (lstnumber.-103.19)]
 >> endobj
-17907 0 obj <<
-/Names [(lstnumber.-103.2) 11134 0 R (lstnumber.-103.20) 11152 0 R (lstnumber.-103.21) 11153 0 R (lstnumber.-103.22) 11154 0 R (lstnumber.-103.23) 11155 0 R (lstnumber.-103.24) 11156 0 R]
+17896 0 obj <<
+/Names [(lstnumber.-103.2) 11122 0 R (lstnumber.-103.20) 11140 0 R (lstnumber.-103.21) 11141 0 R (lstnumber.-103.22) 11142 0 R (lstnumber.-103.23) 11143 0 R (lstnumber.-103.24) 11144 0 R]
 /Limits [(lstnumber.-103.2) (lstnumber.-103.24)]
 >> endobj
-17908 0 obj <<
-/Names [(lstnumber.-103.25) 11157 0 R (lstnumber.-103.26) 11158 0 R (lstnumber.-103.27) 11159 0 R (lstnumber.-103.28) 11160 0 R (lstnumber.-103.3) 11135 0 R (lstnumber.-103.4) 11136 0 R]
+17897 0 obj <<
+/Names [(lstnumber.-103.25) 11145 0 R (lstnumber.-103.26) 11146 0 R (lstnumber.-103.27) 11147 0 R (lstnumber.-103.28) 11148 0 R (lstnumber.-103.3) 11123 0 R (lstnumber.-103.4) 11124 0 R]
 /Limits [(lstnumber.-103.25) (lstnumber.-103.4)]
 >> endobj
-17909 0 obj <<
-/Names [(lstnumber.-103.5) 11137 0 R (lstnumber.-103.6) 11138 0 R (lstnumber.-103.7) 11139 0 R (lstnumber.-103.8) 11140 0 R (lstnumber.-103.9) 11141 0 R (lstnumber.-104.1) 11171 0 R]
+17898 0 obj <<
+/Names [(lstnumber.-103.5) 11125 0 R (lstnumber.-103.6) 11126 0 R (lstnumber.-103.7) 11127 0 R (lstnumber.-103.8) 11128 0 R (lstnumber.-103.9) 11129 0 R (lstnumber.-104.1) 11159 0 R]
 /Limits [(lstnumber.-103.5) (lstnumber.-104.1)]
 >> endobj
-17910 0 obj <<
-/Names [(lstnumber.-104.10) 11180 0 R (lstnumber.-104.11) 11181 0 R (lstnumber.-104.2) 11172 0 R (lstnumber.-104.3) 11173 0 R (lstnumber.-104.4) 11174 0 R (lstnumber.-104.5) 11175 0 R]
+17899 0 obj <<
+/Names [(lstnumber.-104.10) 11168 0 R (lstnumber.-104.11) 11169 0 R (lstnumber.-104.2) 11160 0 R (lstnumber.-104.3) 11161 0 R (lstnumber.-104.4) 11162 0 R (lstnumber.-104.5) 11163 0 R]
 /Limits [(lstnumber.-104.10) (lstnumber.-104.5)]
 >> endobj
-17911 0 obj <<
-/Names [(lstnumber.-104.6) 11176 0 R (lstnumber.-104.7) 11177 0 R (lstnumber.-104.8) 11178 0 R (lstnumber.-104.9) 11179 0 R (lstnumber.-105.1) 11191 0 R (lstnumber.-105.10) 11200 0 R]
+17900 0 obj <<
+/Names [(lstnumber.-104.6) 11164 0 R (lstnumber.-104.7) 11165 0 R (lstnumber.-104.8) 11166 0 R (lstnumber.-104.9) 11167 0 R (lstnumber.-105.1) 11179 0 R (lstnumber.-105.10) 11188 0 R]
 /Limits [(lstnumber.-104.6) (lstnumber.-105.10)]
 >> endobj
-17912 0 obj <<
-/Names [(lstnumber.-105.11) 11201 0 R (lstnumber.-105.12) 11202 0 R (lstnumber.-105.13) 11203 0 R (lstnumber.-105.14) 11204 0 R (lstnumber.-105.15) 11205 0 R (lstnumber.-105.16) 11206 0 R]
+17901 0 obj <<
+/Names [(lstnumber.-105.11) 11189 0 R (lstnumber.-105.12) 11190 0 R (lstnumber.-105.13) 11191 0 R (lstnumber.-105.14) 11192 0 R (lstnumber.-105.15) 11193 0 R (lstnumber.-105.16) 11194 0 R]
 /Limits [(lstnumber.-105.11) (lstnumber.-105.16)]
 >> endobj
-17913 0 obj <<
-/Names [(lstnumber.-105.17) 11207 0 R (lstnumber.-105.18) 11208 0 R (lstnumber.-105.19) 11209 0 R (lstnumber.-105.2) 11192 0 R (lstnumber.-105.20) 11210 0 R (lstnumber.-105.21) 11211 0 R]
+17902 0 obj <<
+/Names [(lstnumber.-105.17) 11195 0 R (lstnumber.-105.18) 11196 0 R (lstnumber.-105.19) 11197 0 R (lstnumber.-105.2) 11180 0 R (lstnumber.-105.20) 11198 0 R (lstnumber.-105.21) 11199 0 R]
 /Limits [(lstnumber.-105.17) (lstnumber.-105.21)]
 >> endobj
-17914 0 obj <<
-/Names [(lstnumber.-105.22) 11212 0 R (lstnumber.-105.23) 11213 0 R (lstnumber.-105.24) 11214 0 R (lstnumber.-105.3) 11193 0 R (lstnumber.-105.4) 11194 0 R (lstnumber.-105.5) 11195 0 R]
+17903 0 obj <<
+/Names [(lstnumber.-105.22) 11200 0 R (lstnumber.-105.23) 11201 0 R (lstnumber.-105.24) 11202 0 R (lstnumber.-105.3) 11181 0 R (lstnumber.-105.4) 11182 0 R (lstnumber.-105.5) 11183 0 R]
 /Limits [(lstnumber.-105.22) (lstnumber.-105.5)]
 >> endobj
-17915 0 obj <<
-/Names [(lstnumber.-105.6) 11196 0 R (lstnumber.-105.7) 11197 0 R (lstnumber.-105.8) 11198 0 R (lstnumber.-105.9) 11199 0 R (lstnumber.-106.1) 11220 0 R (lstnumber.-106.10) 11229 0 R]
+17904 0 obj <<
+/Names [(lstnumber.-105.6) 11184 0 R (lstnumber.-105.7) 11185 0 R (lstnumber.-105.8) 11186 0 R (lstnumber.-105.9) 11187 0 R (lstnumber.-106.1) 11208 0 R (lstnumber.-106.10) 11217 0 R]
 /Limits [(lstnumber.-105.6) (lstnumber.-106.10)]
 >> endobj
-17916 0 obj <<
-/Names [(lstnumber.-106.11) 11230 0 R (lstnumber.-106.12) 11231 0 R (lstnumber.-106.13) 11232 0 R (lstnumber.-106.14) 11233 0 R (lstnumber.-106.15) 11234 0 R (lstnumber.-106.16) 11235 0 R]
+17905 0 obj <<
+/Names [(lstnumber.-106.11) 11218 0 R (lstnumber.-106.12) 11219 0 R (lstnumber.-106.13) 11220 0 R (lstnumber.-106.14) 11221 0 R (lstnumber.-106.15) 11222 0 R (lstnumber.-106.16) 11223 0 R]
 /Limits [(lstnumber.-106.11) (lstnumber.-106.16)]
 >> endobj
-17917 0 obj <<
-/Names [(lstnumber.-106.17) 11236 0 R (lstnumber.-106.18) 11237 0 R (lstnumber.-106.19) 11238 0 R (lstnumber.-106.2) 11221 0 R (lstnumber.-106.20) 11239 0 R (lstnumber.-106.21) 11240 0 R]
+17906 0 obj <<
+/Names [(lstnumber.-106.17) 11224 0 R (lstnumber.-106.18) 11225 0 R (lstnumber.-106.19) 11226 0 R (lstnumber.-106.2) 11209 0 R (lstnumber.-106.20) 11227 0 R (lstnumber.-106.21) 11228 0 R]
 /Limits [(lstnumber.-106.17) (lstnumber.-106.21)]
 >> endobj
-17918 0 obj <<
-/Names [(lstnumber.-106.22) 11241 0 R (lstnumber.-106.23) 11242 0 R (lstnumber.-106.24) 11243 0 R (lstnumber.-106.3) 11222 0 R (lstnumber.-106.4) 11223 0 R (lstnumber.-106.5) 11224 0 R]
+17907 0 obj <<
+/Names [(lstnumber.-106.22) 11229 0 R (lstnumber.-106.23) 11230 0 R (lstnumber.-106.24) 11231 0 R (lstnumber.-106.3) 11210 0 R (lstnumber.-106.4) 11211 0 R (lstnumber.-106.5) 11212 0 R]
 /Limits [(lstnumber.-106.22) (lstnumber.-106.5)]
 >> endobj
-17919 0 obj <<
-/Names [(lstnumber.-106.6) 11225 0 R (lstnumber.-106.7) 11226 0 R (lstnumber.-106.8) 11227 0 R (lstnumber.-106.9) 11228 0 R (lstnumber.-107.1) 11245 0 R (lstnumber.-107.2) 11246 0 R]
+17908 0 obj <<
+/Names [(lstnumber.-106.6) 11213 0 R (lstnumber.-106.7) 11214 0 R (lstnumber.-106.8) 11215 0 R (lstnumber.-106.9) 11216 0 R (lstnumber.-107.1) 11233 0 R (lstnumber.-107.2) 11234 0 R]
 /Limits [(lstnumber.-106.6) (lstnumber.-107.2)]
 >> endobj
-17920 0 obj <<
-/Names [(lstnumber.-107.3) 11247 0 R (lstnumber.-107.4) 11248 0 R (lstnumber.-107.5) 11249 0 R (lstnumber.-107.6) 11250 0 R (lstnumber.-107.7) 11251 0 R (lstnumber.-107.8) 11252 0 R]
+17909 0 obj <<
+/Names [(lstnumber.-107.3) 11235 0 R (lstnumber.-107.4) 11236 0 R (lstnumber.-107.5) 11237 0 R (lstnumber.-107.6) 11238 0 R (lstnumber.-107.7) 11239 0 R (lstnumber.-107.8) 11240 0 R]
 /Limits [(lstnumber.-107.3) (lstnumber.-107.8)]
 >> endobj
-17921 0 obj <<
-/Names [(lstnumber.-108.1) 11375 0 R (lstnumber.-108.2) 11376 0 R (lstnumber.-108.3) 11377 0 R (lstnumber.-108.4) 11378 0 R (lstnumber.-108.5) 11379 0 R (lstnumber.-109.1) 11542 0 R]
+17910 0 obj <<
+/Names [(lstnumber.-108.1) 11363 0 R (lstnumber.-108.2) 11364 0 R (lstnumber.-108.3) 11365 0 R (lstnumber.-108.4) 11366 0 R (lstnumber.-108.5) 11367 0 R (lstnumber.-109.1) 11530 0 R]
 /Limits [(lstnumber.-108.1) (lstnumber.-109.1)]
 >> endobj
-17922 0 obj <<
-/Names [(lstnumber.-109.2) 11543 0 R (lstnumber.-109.3) 11544 0 R (lstnumber.-109.4) 11545 0 R (lstnumber.-11.1) 5948 0 R (lstnumber.-11.10) 5957 0 R (lstnumber.-11.11) 5958 0 R]
+17911 0 obj <<
+/Names [(lstnumber.-109.2) 11531 0 R (lstnumber.-109.3) 11532 0 R (lstnumber.-109.4) 11533 0 R (lstnumber.-11.1) 5948 0 R (lstnumber.-11.10) 5957 0 R (lstnumber.-11.11) 5958 0 R]
 /Limits [(lstnumber.-109.2) (lstnumber.-11.11)]
 >> endobj
-17923 0 obj <<
+17912 0 obj <<
 /Names [(lstnumber.-11.12) 5959 0 R (lstnumber.-11.13) 5960 0 R (lstnumber.-11.14) 5961 0 R (lstnumber.-11.15) 5962 0 R (lstnumber.-11.16) 5963 0 R (lstnumber.-11.17) 5964 0 R]
 /Limits [(lstnumber.-11.12) (lstnumber.-11.17)]
 >> endobj
-17924 0 obj <<
+17913 0 obj <<
 /Names [(lstnumber.-11.18) 5965 0 R (lstnumber.-11.19) 5966 0 R (lstnumber.-11.2) 5949 0 R (lstnumber.-11.20) 5967 0 R (lstnumber.-11.21) 5968 0 R (lstnumber.-11.22) 5969 0 R]
 /Limits [(lstnumber.-11.18) (lstnumber.-11.22)]
 >> endobj
-17925 0 obj <<
+17914 0 obj <<
 /Names [(lstnumber.-11.23) 5970 0 R (lstnumber.-11.24) 5971 0 R (lstnumber.-11.25) 5972 0 R (lstnumber.-11.26) 5973 0 R (lstnumber.-11.27) 5974 0 R (lstnumber.-11.28) 5975 0 R]
 /Limits [(lstnumber.-11.23) (lstnumber.-11.28)]
 >> endobj
-17926 0 obj <<
+17915 0 obj <<
 /Names [(lstnumber.-11.29) 5976 0 R (lstnumber.-11.3) 5950 0 R (lstnumber.-11.30) 5977 0 R (lstnumber.-11.31) 5978 0 R (lstnumber.-11.32) 5979 0 R (lstnumber.-11.33) 5980 0 R]
 /Limits [(lstnumber.-11.29) (lstnumber.-11.33)]
 >> endobj
-17927 0 obj <<
+17916 0 obj <<
 /Names [(lstnumber.-11.34) 5981 0 R (lstnumber.-11.4) 5951 0 R (lstnumber.-11.5) 5952 0 R (lstnumber.-11.6) 5953 0 R (lstnumber.-11.7) 5954 0 R (lstnumber.-11.8) 5955 0 R]
 /Limits [(lstnumber.-11.34) (lstnumber.-11.8)]
 >> endobj
-17928 0 obj <<
-/Names [(lstnumber.-11.9) 5956 0 R (lstnumber.-112.1) 11689 0 R (lstnumber.-112.2) 11690 0 R (lstnumber.-112.3) 11691 0 R (lstnumber.-113.1) 11700 0 R (lstnumber.-113.2) 11701 0 R]
+17917 0 obj <<
+/Names [(lstnumber.-11.9) 5956 0 R (lstnumber.-112.1) 11677 0 R (lstnumber.-112.2) 11678 0 R (lstnumber.-112.3) 11679 0 R (lstnumber.-113.1) 11688 0 R (lstnumber.-113.2) 11689 0 R]
 /Limits [(lstnumber.-11.9) (lstnumber.-113.2)]
 >> endobj
-17929 0 obj <<
-/Names [(lstnumber.-113.3) 11702 0 R (lstnumber.-114.1) 11889 0 R (lstnumber.-114.2) 11890 0 R (lstnumber.-114.3) 11891 0 R (lstnumber.-114.4) 11892 0 R (lstnumber.-114.5) 11893 0 R]
+17918 0 obj <<
+/Names [(lstnumber.-113.3) 11690 0 R (lstnumber.-114.1) 11877 0 R (lstnumber.-114.2) 11878 0 R (lstnumber.-114.3) 11879 0 R (lstnumber.-114.4) 11880 0 R (lstnumber.-114.5) 11881 0 R]
 /Limits [(lstnumber.-113.3) (lstnumber.-114.5)]
 >> endobj
-17930 0 obj <<
-/Names [(lstnumber.-114.6) 11894 0 R (lstnumber.-12.1) 5987 0 R (lstnumber.-12.10) 5996 0 R (lstnumber.-12.11) 5997 0 R (lstnumber.-12.12) 5998 0 R (lstnumber.-12.13) 5999 0 R]
+17919 0 obj <<
+/Names [(lstnumber.-114.6) 11882 0 R (lstnumber.-12.1) 5987 0 R (lstnumber.-12.10) 5996 0 R (lstnumber.-12.11) 5997 0 R (lstnumber.-12.12) 5998 0 R (lstnumber.-12.13) 5999 0 R]
 /Limits [(lstnumber.-114.6) (lstnumber.-12.13)]
 >> endobj
-17931 0 obj <<
+17920 0 obj <<
 /Names [(lstnumber.-12.14) 6000 0 R (lstnumber.-12.15) 6001 0 R (lstnumber.-12.16) 6002 0 R (lstnumber.-12.17) 6003 0 R (lstnumber.-12.18) 6004 0 R (lstnumber.-12.19) 6005 0 R]
 /Limits [(lstnumber.-12.14) (lstnumber.-12.19)]
 >> endobj
-17932 0 obj <<
+17921 0 obj <<
 /Names [(lstnumber.-12.2) 5988 0 R (lstnumber.-12.20) 6006 0 R (lstnumber.-12.21) 6007 0 R (lstnumber.-12.22) 6008 0 R (lstnumber.-12.23) 6009 0 R (lstnumber.-12.24) 6010 0 R]
 /Limits [(lstnumber.-12.2) (lstnumber.-12.24)]
 >> endobj
-17933 0 obj <<
+17922 0 obj <<
 /Names [(lstnumber.-12.25) 6011 0 R (lstnumber.-12.26) 6012 0 R (lstnumber.-12.3) 5989 0 R (lstnumber.-12.4) 5990 0 R (lstnumber.-12.5) 5991 0 R (lstnumber.-12.6) 5992 0 R]
 /Limits [(lstnumber.-12.25) (lstnumber.-12.6)]
 >> endobj
-17934 0 obj <<
+17923 0 obj <<
 /Names [(lstnumber.-12.7) 5993 0 R (lstnumber.-12.8) 5994 0 R (lstnumber.-12.9) 5995 0 R (lstnumber.-13.1) 6064 0 R (lstnumber.-14.1) 6072 0 R (lstnumber.-15.1) 6083 0 R]
 /Limits [(lstnumber.-12.7) (lstnumber.-15.1)]
 >> endobj
-17935 0 obj <<
+17924 0 obj <<
 /Names [(lstnumber.-15.2) 6084 0 R (lstnumber.-16.1) 6106 0 R (lstnumber.-16.2) 6107 0 R (lstnumber.-17.1) 6109 0 R (lstnumber.-18.1) 6124 0 R (lstnumber.-18.2) 6125 0 R]
 /Limits [(lstnumber.-15.2) (lstnumber.-18.2)]
 >> endobj
-17936 0 obj <<
+17925 0 obj <<
 /Names [(lstnumber.-18.3) 6126 0 R (lstnumber.-19.1) 6137 0 R (lstnumber.-19.2) 6138 0 R (lstnumber.-2.1) 5517 0 R (lstnumber.-2.2) 5518 0 R (lstnumber.-2.3) 5519 0 R]
 /Limits [(lstnumber.-18.3) (lstnumber.-2.3)]
 >> endobj
-17937 0 obj <<
-/Names [(lstnumber.-2.4) 5520 0 R (lstnumber.-2.5) 5521 0 R (lstnumber.-20.1) 6269 0 R (lstnumber.-20.10) 6278 0 R (lstnumber.-20.11) 6279 0 R (lstnumber.-20.12) 6280 0 R]
+17926 0 obj <<
+/Names [(lstnumber.-2.4) 5520 0 R (lstnumber.-2.5) 5521 0 R (lstnumber.-20.1) 6268 0 R (lstnumber.-20.10) 6277 0 R (lstnumber.-20.11) 6278 0 R (lstnumber.-20.12) 6279 0 R]
 /Limits [(lstnumber.-2.4) (lstnumber.-20.12)]
 >> endobj
-17938 0 obj <<
-/Names [(lstnumber.-20.13) 6281 0 R (lstnumber.-20.14) 6282 0 R (lstnumber.-20.15) 6283 0 R (lstnumber.-20.16) 6284 0 R (lstnumber.-20.17) 6285 0 R (lstnumber.-20.18) 6286 0 R]
+17927 0 obj <<
+/Names [(lstnumber.-20.13) 6280 0 R (lstnumber.-20.14) 6281 0 R (lstnumber.-20.15) 6282 0 R (lstnumber.-20.16) 6283 0 R (lstnumber.-20.17) 6284 0 R (lstnumber.-20.18) 6285 0 R]
 /Limits [(lstnumber.-20.13) (lstnumber.-20.18)]
 >> endobj
-17939 0 obj <<
-/Names [(lstnumber.-20.19) 6287 0 R (lstnumber.-20.2) 6270 0 R (lstnumber.-20.20) 6288 0 R (lstnumber.-20.21) 6289 0 R (lstnumber.-20.22) 6290 0 R (lstnumber.-20.23) 6291 0 R]
+17928 0 obj <<
+/Names [(lstnumber.-20.19) 6286 0 R (lstnumber.-20.2) 6269 0 R (lstnumber.-20.20) 6287 0 R (lstnumber.-20.21) 6288 0 R (lstnumber.-20.22) 6289 0 R (lstnumber.-20.23) 6290 0 R]
 /Limits [(lstnumber.-20.19) (lstnumber.-20.23)]
 >> endobj
-17940 0 obj <<
-/Names [(lstnumber.-20.3) 6271 0 R (lstnumber.-20.4) 6272 0 R (lstnumber.-20.5) 6273 0 R (lstnumber.-20.6) 6274 0 R (lstnumber.-20.7) 6275 0 R (lstnumber.-20.8) 6276 0 R]
+17929 0 obj <<
+/Names [(lstnumber.-20.3) 6270 0 R (lstnumber.-20.4) 6271 0 R (lstnumber.-20.5) 6272 0 R (lstnumber.-20.6) 6273 0 R (lstnumber.-20.7) 6274 0 R (lstnumber.-20.8) 6275 0 R]
 /Limits [(lstnumber.-20.3) (lstnumber.-20.8)]
 >> endobj
-17941 0 obj <<
-/Names [(lstnumber.-20.9) 6277 0 R (lstnumber.-21.1) 6297 0 R (lstnumber.-21.2) 6298 0 R (lstnumber.-21.3) 6299 0 R (lstnumber.-21.4) 6300 0 R (lstnumber.-21.5) 6301 0 R]
+17930 0 obj <<
+/Names [(lstnumber.-20.9) 6276 0 R (lstnumber.-21.1) 6296 0 R (lstnumber.-21.2) 6297 0 R (lstnumber.-21.3) 6298 0 R (lstnumber.-21.4) 6299 0 R (lstnumber.-21.5) 6300 0 R]
 /Limits [(lstnumber.-20.9) (lstnumber.-21.5)]
 >> endobj
-17942 0 obj <<
-/Names [(lstnumber.-22.1) 6312 0 R (lstnumber.-22.2) 6313 0 R (lstnumber.-22.3) 6314 0 R (lstnumber.-22.4) 6315 0 R (lstnumber.-22.5) 6316 0 R (lstnumber.-22.6) 6317 0 R]
+17931 0 obj <<
+/Names [(lstnumber.-22.1) 6311 0 R (lstnumber.-22.2) 6312 0 R (lstnumber.-22.3) 6313 0 R (lstnumber.-22.4) 6314 0 R (lstnumber.-22.5) 6315 0 R (lstnumber.-22.6) 6316 0 R]
 /Limits [(lstnumber.-22.1) (lstnumber.-22.6)]
 >> endobj
-17943 0 obj <<
-/Names [(lstnumber.-22.7) 6318 0 R (lstnumber.-22.8) 6319 0 R (lstnumber.-23.1) 6416 0 R (lstnumber.-23.10) 6425 0 R (lstnumber.-23.2) 6417 0 R (lstnumber.-23.3) 6418 0 R]
+17932 0 obj <<
+/Names [(lstnumber.-22.7) 6317 0 R (lstnumber.-22.8) 6318 0 R (lstnumber.-23.1) 6415 0 R (lstnumber.-23.10) 6424 0 R (lstnumber.-23.2) 6416 0 R (lstnumber.-23.3) 6417 0 R]
 /Limits [(lstnumber.-22.7) (lstnumber.-23.3)]
 >> endobj
-17944 0 obj <<
-/Names [(lstnumber.-23.4) 6419 0 R (lstnumber.-23.5) 6420 0 R (lstnumber.-23.6) 6421 0 R (lstnumber.-23.7) 6422 0 R (lstnumber.-23.8) 6423 0 R (lstnumber.-23.9) 6424 0 R]
+17933 0 obj <<
+/Names [(lstnumber.-23.4) 6418 0 R (lstnumber.-23.5) 6419 0 R (lstnumber.-23.6) 6420 0 R (lstnumber.-23.7) 6421 0 R (lstnumber.-23.8) 6422 0 R (lstnumber.-23.9) 6423 0 R]
 /Limits [(lstnumber.-23.4) (lstnumber.-23.9)]
 >> endobj
-17945 0 obj <<
-/Names [(lstnumber.-24.1) 6434 0 R (lstnumber.-25.1) 6469 0 R (lstnumber.-25.10) 6478 0 R (lstnumber.-25.11) 6479 0 R (lstnumber.-25.12) 6480 0 R (lstnumber.-25.13) 6481 0 R]
+17934 0 obj <<
+/Names [(lstnumber.-24.1) 6433 0 R (lstnumber.-25.1) 6468 0 R (lstnumber.-25.10) 6477 0 R (lstnumber.-25.11) 6478 0 R (lstnumber.-25.12) 6479 0 R (lstnumber.-25.13) 6480 0 R]
 /Limits [(lstnumber.-24.1) (lstnumber.-25.13)]
 >> endobj
-17946 0 obj <<
-/Names [(lstnumber.-25.2) 6470 0 R (lstnumber.-25.3) 6471 0 R (lstnumber.-25.4) 6472 0 R (lstnumber.-25.5) 6473 0 R (lstnumber.-25.6) 6474 0 R (lstnumber.-25.7) 6475 0 R]
+17935 0 obj <<
+/Names [(lstnumber.-25.2) 6469 0 R (lstnumber.-25.3) 6470 0 R (lstnumber.-25.4) 6471 0 R (lstnumber.-25.5) 6472 0 R (lstnumber.-25.6) 6473 0 R (lstnumber.-25.7) 6474 0 R]
 /Limits [(lstnumber.-25.2) (lstnumber.-25.7)]
 >> endobj
-17947 0 obj <<
-/Names [(lstnumber.-25.8) 6476 0 R (lstnumber.-25.9) 6477 0 R (lstnumber.-26.1) 6547 0 R (lstnumber.-26.2) 6548 0 R (lstnumber.-27.1) 6573 0 R (lstnumber.-28.1) 6575 0 R]
+17936 0 obj <<
+/Names [(lstnumber.-25.8) 6475 0 R (lstnumber.-25.9) 6476 0 R (lstnumber.-26.1) 6546 0 R (lstnumber.-26.2) 6547 0 R (lstnumber.-27.1) 6572 0 R (lstnumber.-28.1) 6574 0 R]
 /Limits [(lstnumber.-25.8) (lstnumber.-28.1)]
 >> endobj
-17948 0 obj <<
-/Names [(lstnumber.-29.1) 6577 0 R (lstnumber.-3.1) 5605 0 R (lstnumber.-3.10) 5614 0 R (lstnumber.-3.2) 5606 0 R (lstnumber.-3.3) 5607 0 R (lstnumber.-3.4) 5608 0 R]
+17937 0 obj <<
+/Names [(lstnumber.-29.1) 6576 0 R (lstnumber.-3.1) 5605 0 R (lstnumber.-3.10) 5614 0 R (lstnumber.-3.2) 5606 0 R (lstnumber.-3.3) 5607 0 R (lstnumber.-3.4) 5608 0 R]
 /Limits [(lstnumber.-29.1) (lstnumber.-3.4)]
 >> endobj
-17949 0 obj <<
-/Names [(lstnumber.-3.5) 5609 0 R (lstnumber.-3.6) 5610 0 R (lstnumber.-3.7) 5611 0 R (lstnumber.-3.8) 5612 0 R (lstnumber.-3.9) 5613 0 R (lstnumber.-30.1) 6579 0 R]
+17938 0 obj <<
+/Names [(lstnumber.-3.5) 5609 0 R (lstnumber.-3.6) 5610 0 R (lstnumber.-3.7) 5611 0 R (lstnumber.-3.8) 5612 0 R (lstnumber.-3.9) 5613 0 R (lstnumber.-30.1) 6578 0 R]
 /Limits [(lstnumber.-3.5) (lstnumber.-30.1)]
 >> endobj
-17950 0 obj <<
-/Names [(lstnumber.-31.1) 6601 0 R (lstnumber.-31.2) 6602 0 R (lstnumber.-31.3) 6603 0 R (lstnumber.-31.4) 6604 0 R (lstnumber.-31.5) 6605 0 R (lstnumber.-32.1) 6613 0 R]
+17939 0 obj <<
+/Names [(lstnumber.-31.1) 6600 0 R (lstnumber.-31.2) 6601 0 R (lstnumber.-31.3) 6602 0 R (lstnumber.-31.4) 6603 0 R (lstnumber.-31.5) 6604 0 R (lstnumber.-32.1) 6612 0 R]
 /Limits [(lstnumber.-31.1) (lstnumber.-32.1)]
 >> endobj
-17951 0 obj <<
-/Names [(lstnumber.-33.1) 6647 0 R (lstnumber.-34.1) 6688 0 R (lstnumber.-34.10) 6697 0 R (lstnumber.-34.11) 6698 0 R (lstnumber.-34.2) 6689 0 R (lstnumber.-34.3) 6690 0 R]
+17940 0 obj <<
+/Names [(lstnumber.-33.1) 6646 0 R (lstnumber.-34.1) 6687 0 R (lstnumber.-34.10) 6696 0 R (lstnumber.-34.11) 6697 0 R (lstnumber.-34.2) 6688 0 R (lstnumber.-34.3) 6689 0 R]
 /Limits [(lstnumber.-33.1) (lstnumber.-34.3)]
 >> endobj
-17952 0 obj <<
-/Names [(lstnumber.-34.4) 6691 0 R (lstnumber.-34.5) 6692 0 R (lstnumber.-34.6) 6693 0 R (lstnumber.-34.7) 6694 0 R (lstnumber.-34.8) 6695 0 R (lstnumber.-34.9) 6696 0 R]
+17941 0 obj <<
+/Names [(lstnumber.-34.4) 6690 0 R (lstnumber.-34.5) 6691 0 R (lstnumber.-34.6) 6692 0 R (lstnumber.-34.7) 6693 0 R (lstnumber.-34.8) 6694 0 R (lstnumber.-34.9) 6695 0 R]
 /Limits [(lstnumber.-34.4) (lstnumber.-34.9)]
 >> endobj
-17953 0 obj <<
-/Names [(lstnumber.-35.1) 6719 0 R (lstnumber.-35.10) 6728 0 R (lstnumber.-35.11) 6729 0 R (lstnumber.-35.12) 6730 0 R (lstnumber.-35.13) 6731 0 R (lstnumber.-35.14) 6732 0 R]
+17942 0 obj <<
+/Names [(lstnumber.-35.1) 6718 0 R (lstnumber.-35.10) 6727 0 R (lstnumber.-35.11) 6728 0 R (lstnumber.-35.12) 6729 0 R (lstnumber.-35.13) 6730 0 R (lstnumber.-35.14) 6731 0 R]
 /Limits [(lstnumber.-35.1) (lstnumber.-35.14)]
 >> endobj
-17954 0 obj <<
-/Names [(lstnumber.-35.15) 6733 0 R (lstnumber.-35.16) 6734 0 R (lstnumber.-35.2) 6720 0 R (lstnumber.-35.3) 6721 0 R (lstnumber.-35.4) 6722 0 R (lstnumber.-35.5) 6723 0 R]
+17943 0 obj <<
+/Names [(lstnumber.-35.15) 6732 0 R (lstnumber.-35.16) 6733 0 R (lstnumber.-35.2) 6719 0 R (lstnumber.-35.3) 6720 0 R (lstnumber.-35.4) 6721 0 R (lstnumber.-35.5) 6722 0 R]
 /Limits [(lstnumber.-35.15) (lstnumber.-35.5)]
 >> endobj
-17955 0 obj <<
-/Names [(lstnumber.-35.6) 6724 0 R (lstnumber.-35.7) 6725 0 R (lstnumber.-35.8) 6726 0 R (lstnumber.-35.9) 6727 0 R (lstnumber.-36.1) 7051 0 R (lstnumber.-37.1) 7054 0 R]
+17944 0 obj <<
+/Names [(lstnumber.-35.6) 6723 0 R (lstnumber.-35.7) 6724 0 R (lstnumber.-35.8) 6725 0 R (lstnumber.-35.9) 6726 0 R (lstnumber.-36.1) 7050 0 R (lstnumber.-37.1) 7053 0 R]
 /Limits [(lstnumber.-35.6) (lstnumber.-37.1)]
 >> endobj
-17956 0 obj <<
-/Names [(lstnumber.-37.2) 7055 0 R (lstnumber.-37.3) 7056 0 R (lstnumber.-37.4) 7057 0 R (lstnumber.-37.5) 7058 0 R (lstnumber.-38.1) 7068 0 R (lstnumber.-38.2) 7069 0 R]
+17945 0 obj <<
+/Names [(lstnumber.-37.2) 7054 0 R (lstnumber.-37.3) 7055 0 R (lstnumber.-37.4) 7056 0 R (lstnumber.-37.5) 7057 0 R (lstnumber.-38.1) 7067 0 R (lstnumber.-38.2) 7068 0 R]
 /Limits [(lstnumber.-37.2) (lstnumber.-38.2)]
 >> endobj
-17957 0 obj <<
-/Names [(lstnumber.-38.3) 7070 0 R (lstnumber.-38.4) 7071 0 R (lstnumber.-38.5) 7072 0 R (lstnumber.-39.1) 7075 0 R (lstnumber.-39.2) 7076 0 R (lstnumber.-39.3) 7077 0 R]
+17946 0 obj <<
+/Names [(lstnumber.-38.3) 7069 0 R (lstnumber.-38.4) 7070 0 R (lstnumber.-38.5) 7071 0 R (lstnumber.-39.1) 7074 0 R (lstnumber.-39.2) 7075 0 R (lstnumber.-39.3) 7076 0 R]
 /Limits [(lstnumber.-38.3) (lstnumber.-39.3)]
 >> endobj
-17958 0 obj <<
-/Names [(lstnumber.-39.4) 7078 0 R (lstnumber.-39.5) 7079 0 R (lstnumber.-4.1) 5636 0 R (lstnumber.-4.10) 5645 0 R (lstnumber.-4.11) 5646 0 R (lstnumber.-4.12) 5647 0 R]
+17947 0 obj <<
+/Names [(lstnumber.-39.4) 7077 0 R (lstnumber.-39.5) 7078 0 R (lstnumber.-4.1) 5636 0 R (lstnumber.-4.10) 5645 0 R (lstnumber.-4.11) 5646 0 R (lstnumber.-4.12) 5647 0 R]
 /Limits [(lstnumber.-39.4) (lstnumber.-4.12)]
 >> endobj
-17959 0 obj <<
+17948 0 obj <<
 /Names [(lstnumber.-4.2) 5637 0 R (lstnumber.-4.3) 5638 0 R (lstnumber.-4.4) 5639 0 R (lstnumber.-4.5) 5640 0 R (lstnumber.-4.6) 5641 0 R (lstnumber.-4.7) 5642 0 R]
 /Limits [(lstnumber.-4.2) (lstnumber.-4.7)]
 >> endobj
-17960 0 obj <<
-/Names [(lstnumber.-4.8) 5643 0 R (lstnumber.-4.9) 5644 0 R (lstnumber.-40.1) 7089 0 R (lstnumber.-40.2) 7090 0 R (lstnumber.-40.3) 7091 0 R (lstnumber.-40.4) 7092 0 R]
+17949 0 obj <<
+/Names [(lstnumber.-4.8) 5643 0 R (lstnumber.-4.9) 5644 0 R (lstnumber.-40.1) 7088 0 R (lstnumber.-40.2) 7089 0 R (lstnumber.-40.3) 7090 0 R (lstnumber.-40.4) 7091 0 R]
 /Limits [(lstnumber.-4.8) (lstnumber.-40.4)]
 >> endobj
-17961 0 obj <<
-/Names [(lstnumber.-40.5) 7093 0 R (lstnumber.-41.1) 7116 0 R (lstnumber.-41.2) 7117 0 R (lstnumber.-42.1) 7120 0 R (lstnumber.-43.1) 7122 0 R (lstnumber.-44.1) 7129 0 R]
+17950 0 obj <<
+/Names [(lstnumber.-40.5) 7092 0 R (lstnumber.-41.1) 7115 0 R (lstnumber.-41.2) 7116 0 R (lstnumber.-42.1) 7119 0 R (lstnumber.-43.1) 7121 0 R (lstnumber.-44.1) 7128 0 R]
 /Limits [(lstnumber.-40.5) (lstnumber.-44.1)]
 >> endobj
-17962 0 obj <<
-/Names [(lstnumber.-45.1) 7139 0 R (lstnumber.-46.1) 7149 0 R (lstnumber.-47.1) 7172 0 R (lstnumber.-48.1) 7174 0 R (lstnumber.-49.1) 7176 0 R (lstnumber.-49.2) 7177 0 R]
+17951 0 obj <<
+/Names [(lstnumber.-45.1) 7138 0 R (lstnumber.-46.1) 7148 0 R (lstnumber.-47.1) 7171 0 R (lstnumber.-48.1) 7173 0 R (lstnumber.-49.1) 7175 0 R (lstnumber.-49.2) 7176 0 R]
 /Limits [(lstnumber.-45.1) (lstnumber.-49.2)]
 >> endobj
-17963 0 obj <<
+17952 0 obj <<
 /Names [(lstnumber.-5.1) 5656 0 R (lstnumber.-5.10) 5665 0 R (lstnumber.-5.11) 5666 0 R (lstnumber.-5.12) 5667 0 R (lstnumber.-5.13) 5668 0 R (lstnumber.-5.14) 5669 0 R]
 /Limits [(lstnumber.-5.1) (lstnumber.-5.14)]
 >> endobj
-17964 0 obj <<
+17953 0 obj <<
 /Names [(lstnumber.-5.15) 5670 0 R (lstnumber.-5.16) 5671 0 R (lstnumber.-5.2) 5657 0 R (lstnumber.-5.3) 5658 0 R (lstnumber.-5.4) 5659 0 R (lstnumber.-5.5) 5660 0 R]
 /Limits [(lstnumber.-5.15) (lstnumber.-5.5)]
 >> endobj
-17965 0 obj <<
-/Names [(lstnumber.-5.6) 5661 0 R (lstnumber.-5.7) 5662 0 R (lstnumber.-5.8) 5663 0 R (lstnumber.-5.9) 5664 0 R (lstnumber.-50.1) 7335 0 R (lstnumber.-50.2) 7336 0 R]
+17954 0 obj <<
+/Names [(lstnumber.-5.6) 5661 0 R (lstnumber.-5.7) 5662 0 R (lstnumber.-5.8) 5663 0 R (lstnumber.-5.9) 5664 0 R (lstnumber.-50.1) 7329 0 R (lstnumber.-50.2) 7330 0 R]
 /Limits [(lstnumber.-5.6) (lstnumber.-50.2)]
 >> endobj
-17966 0 obj <<
-/Names [(lstnumber.-50.3) 7337 0 R (lstnumber.-50.4) 7338 0 R (lstnumber.-51.1) 7508 0 R (lstnumber.-51.10) 7522 0 R (lstnumber.-51.11) 7523 0 R (lstnumber.-51.12) 7524 0 R]
+17955 0 obj <<
+/Names [(lstnumber.-50.3) 7331 0 R (lstnumber.-50.4) 7332 0 R (lstnumber.-51.1) 7502 0 R (lstnumber.-51.10) 7516 0 R (lstnumber.-51.11) 7517 0 R (lstnumber.-51.12) 7518 0 R]
 /Limits [(lstnumber.-50.3) (lstnumber.-51.12)]
 >> endobj
-17967 0 obj <<
-/Names [(lstnumber.-51.13) 7525 0 R (lstnumber.-51.14) 7526 0 R (lstnumber.-51.2) 7509 0 R (lstnumber.-51.3) 7510 0 R (lstnumber.-51.4) 7511 0 R (lstnumber.-51.5) 7512 0 R]
+17956 0 obj <<
+/Names [(lstnumber.-51.13) 7519 0 R (lstnumber.-51.14) 7520 0 R (lstnumber.-51.2) 7503 0 R (lstnumber.-51.3) 7504 0 R (lstnumber.-51.4) 7505 0 R (lstnumber.-51.5) 7506 0 R]
 /Limits [(lstnumber.-51.13) (lstnumber.-51.5)]
 >> endobj
-17968 0 obj <<
-/Names [(lstnumber.-51.6) 7518 0 R (lstnumber.-51.7) 7519 0 R (lstnumber.-51.8) 7520 0 R (lstnumber.-51.9) 7521 0 R (lstnumber.-52.1) 7536 0 R (lstnumber.-52.10) 7545 0 R]
+17957 0 obj <<
+/Names [(lstnumber.-51.6) 7512 0 R (lstnumber.-51.7) 7513 0 R (lstnumber.-51.8) 7514 0 R (lstnumber.-51.9) 7515 0 R (lstnumber.-52.1) 7530 0 R (lstnumber.-52.10) 7539 0 R]
 /Limits [(lstnumber.-51.6) (lstnumber.-52.10)]
 >> endobj
-17969 0 obj <<
-/Names [(lstnumber.-52.11) 7546 0 R (lstnumber.-52.12) 7547 0 R (lstnumber.-52.13) 7548 0 R (lstnumber.-52.14) 7549 0 R (lstnumber.-52.15) 7550 0 R (lstnumber.-52.16) 7551 0 R]
+17958 0 obj <<
+/Names [(lstnumber.-52.11) 7540 0 R (lstnumber.-52.12) 7541 0 R (lstnumber.-52.13) 7542 0 R (lstnumber.-52.14) 7543 0 R (lstnumber.-52.15) 7544 0 R (lstnumber.-52.16) 7545 0 R]
 /Limits [(lstnumber.-52.11) (lstnumber.-52.16)]
 >> endobj
-17970 0 obj <<
-/Names [(lstnumber.-52.17) 7552 0 R (lstnumber.-52.18) 7553 0 R (lstnumber.-52.19) 7554 0 R (lstnumber.-52.2) 7537 0 R (lstnumber.-52.20) 7555 0 R (lstnumber.-52.21) 7556 0 R]
+17959 0 obj <<
+/Names [(lstnumber.-52.17) 7546 0 R (lstnumber.-52.18) 7547 0 R (lstnumber.-52.19) 7548 0 R (lstnumber.-52.2) 7531 0 R (lstnumber.-52.20) 7549 0 R (lstnumber.-52.21) 7550 0 R]
 /Limits [(lstnumber.-52.17) (lstnumber.-52.21)]
 >> endobj
-17971 0 obj <<
-/Names [(lstnumber.-52.22) 7557 0 R (lstnumber.-52.23) 7558 0 R (lstnumber.-52.24) 7559 0 R (lstnumber.-52.25) 7560 0 R (lstnumber.-52.26) 7561 0 R (lstnumber.-52.27) 7562 0 R]
+17960 0 obj <<
+/Names [(lstnumber.-52.22) 7551 0 R (lstnumber.-52.23) 7552 0 R (lstnumber.-52.24) 7553 0 R (lstnumber.-52.25) 7554 0 R (lstnumber.-52.26) 7555 0 R (lstnumber.-52.27) 7556 0 R]
 /Limits [(lstnumber.-52.22) (lstnumber.-52.27)]
 >> endobj
-17972 0 obj <<
-/Names [(lstnumber.-52.28) 7563 0 R (lstnumber.-52.3) 7538 0 R (lstnumber.-52.4) 7539 0 R (lstnumber.-52.5) 7540 0 R (lstnumber.-52.6) 7541 0 R (lstnumber.-52.7) 7542 0 R]
+17961 0 obj <<
+/Names [(lstnumber.-52.28) 7557 0 R (lstnumber.-52.3) 7532 0 R (lstnumber.-52.4) 7533 0 R (lstnumber.-52.5) 7534 0 R (lstnumber.-52.6) 7535 0 R (lstnumber.-52.7) 7536 0 R]
 /Limits [(lstnumber.-52.28) (lstnumber.-52.7)]
 >> endobj
-17973 0 obj <<
-/Names [(lstnumber.-52.8) 7543 0 R (lstnumber.-52.9) 7544 0 R (lstnumber.-53.1) 7718 0 R (lstnumber.-53.2) 7719 0 R (lstnumber.-54.1) 7820 0 R (lstnumber.-54.2) 7821 0 R]
+17962 0 obj <<
+/Names [(lstnumber.-52.8) 7537 0 R (lstnumber.-52.9) 7538 0 R (lstnumber.-53.1) 7707 0 R (lstnumber.-53.2) 7708 0 R (lstnumber.-54.1) 7809 0 R (lstnumber.-54.2) 7810 0 R]
 /Limits [(lstnumber.-52.8) (lstnumber.-54.2)]
 >> endobj
-17974 0 obj <<
-/Names [(lstnumber.-54.3) 7822 0 R (lstnumber.-54.4) 7823 0 R (lstnumber.-54.5) 7824 0 R (lstnumber.-54.6) 7825 0 R (lstnumber.-55.1) 8016 0 R (lstnumber.-55.2) 8017 0 R]
+17963 0 obj <<
+/Names [(lstnumber.-54.3) 7811 0 R (lstnumber.-54.4) 7812 0 R (lstnumber.-54.5) 7813 0 R (lstnumber.-54.6) 7814 0 R (lstnumber.-55.1) 8005 0 R (lstnumber.-55.2) 8006 0 R]
 /Limits [(lstnumber.-54.3) (lstnumber.-55.2)]
 >> endobj
-17975 0 obj <<
-/Names [(lstnumber.-55.3) 8018 0 R (lstnumber.-55.4) 8019 0 R (lstnumber.-55.5) 8020 0 R (lstnumber.-55.6) 8021 0 R (lstnumber.-55.7) 8022 0 R (lstnumber.-55.8) 8023 0 R]
+17964 0 obj <<
+/Names [(lstnumber.-55.3) 8007 0 R (lstnumber.-55.4) 8008 0 R (lstnumber.-55.5) 8009 0 R (lstnumber.-55.6) 8010 0 R (lstnumber.-55.7) 8011 0 R (lstnumber.-55.8) 8012 0 R]
 /Limits [(lstnumber.-55.3) (lstnumber.-55.8)]
 >> endobj
-17976 0 obj <<
-/Names [(lstnumber.-56.1) 8040 0 R (lstnumber.-56.10) 8049 0 R (lstnumber.-56.11) 8050 0 R (lstnumber.-56.12) 8051 0 R (lstnumber.-56.2) 8041 0 R (lstnumber.-56.3) 8042 0 R]
+17965 0 obj <<
+/Names [(lstnumber.-56.1) 8029 0 R (lstnumber.-56.10) 8038 0 R (lstnumber.-56.11) 8039 0 R (lstnumber.-56.12) 8040 0 R (lstnumber.-56.2) 8030 0 R (lstnumber.-56.3) 8031 0 R]
 /Limits [(lstnumber.-56.1) (lstnumber.-56.3)]
 >> endobj
-17977 0 obj <<
-/Names [(lstnumber.-56.4) 8043 0 R (lstnumber.-56.5) 8044 0 R (lstnumber.-56.6) 8045 0 R (lstnumber.-56.7) 8046 0 R (lstnumber.-56.8) 8047 0 R (lstnumber.-56.9) 8048 0 R]
+17966 0 obj <<
+/Names [(lstnumber.-56.4) 8032 0 R (lstnumber.-56.5) 8033 0 R (lstnumber.-56.6) 8034 0 R (lstnumber.-56.7) 8035 0 R (lstnumber.-56.8) 8036 0 R (lstnumber.-56.9) 8037 0 R]
 /Limits [(lstnumber.-56.4) (lstnumber.-56.9)]
 >> endobj
-17978 0 obj <<
-/Names [(lstnumber.-57.1) 8068 0 R (lstnumber.-57.10) 8077 0 R (lstnumber.-57.11) 8078 0 R (lstnumber.-57.12) 8079 0 R (lstnumber.-57.13) 8080 0 R (lstnumber.-57.14) 8081 0 R]
+17967 0 obj <<
+/Names [(lstnumber.-57.1) 8057 0 R (lstnumber.-57.10) 8066 0 R (lstnumber.-57.11) 8067 0 R (lstnumber.-57.12) 8068 0 R (lstnumber.-57.13) 8069 0 R (lstnumber.-57.14) 8070 0 R]
 /Limits [(lstnumber.-57.1) (lstnumber.-57.14)]
 >> endobj
-17979 0 obj <<
-/Names [(lstnumber.-57.15) 8082 0 R (lstnumber.-57.16) 8083 0 R (lstnumber.-57.17) 8084 0 R (lstnumber.-57.2) 8069 0 R (lstnumber.-57.3) 8070 0 R (lstnumber.-57.4) 8071 0 R]
+17968 0 obj <<
+/Names [(lstnumber.-57.15) 8071 0 R (lstnumber.-57.16) 8072 0 R (lstnumber.-57.17) 8073 0 R (lstnumber.-57.2) 8058 0 R (lstnumber.-57.3) 8059 0 R (lstnumber.-57.4) 8060 0 R]
 /Limits [(lstnumber.-57.15) (lstnumber.-57.4)]
 >> endobj
-17980 0 obj <<
-/Names [(lstnumber.-57.5) 8072 0 R (lstnumber.-57.6) 8073 0 R (lstnumber.-57.7) 8074 0 R (lstnumber.-57.8) 8075 0 R (lstnumber.-57.9) 8076 0 R (lstnumber.-58.1) 8103 0 R]
+17969 0 obj <<
+/Names [(lstnumber.-57.5) 8061 0 R (lstnumber.-57.6) 8062 0 R (lstnumber.-57.7) 8063 0 R (lstnumber.-57.8) 8064 0 R (lstnumber.-57.9) 8065 0 R (lstnumber.-58.1) 8092 0 R]
 /Limits [(lstnumber.-57.5) (lstnumber.-58.1)]
 >> endobj
-17981 0 obj <<
-/Names [(lstnumber.-58.10) 8112 0 R (lstnumber.-58.11) 8113 0 R (lstnumber.-58.12) 8114 0 R (lstnumber.-58.13) 8115 0 R (lstnumber.-58.14) 8116 0 R (lstnumber.-58.15) 8117 0 R]
+17970 0 obj <<
+/Names [(lstnumber.-58.10) 8101 0 R (lstnumber.-58.11) 8102 0 R (lstnumber.-58.12) 8103 0 R (lstnumber.-58.13) 8104 0 R (lstnumber.-58.14) 8105 0 R (lstnumber.-58.15) 8106 0 R]
 /Limits [(lstnumber.-58.10) (lstnumber.-58.15)]
 >> endobj
-17982 0 obj <<
-/Names [(lstnumber.-58.16) 8118 0 R (lstnumber.-58.2) 8104 0 R (lstnumber.-58.3) 8105 0 R (lstnumber.-58.4) 8106 0 R (lstnumber.-58.5) 8107 0 R (lstnumber.-58.6) 8108 0 R]
+17971 0 obj <<
+/Names [(lstnumber.-58.16) 8107 0 R (lstnumber.-58.2) 8093 0 R (lstnumber.-58.3) 8094 0 R (lstnumber.-58.4) 8095 0 R (lstnumber.-58.5) 8096 0 R (lstnumber.-58.6) 8097 0 R]
 /Limits [(lstnumber.-58.16) (lstnumber.-58.6)]
 >> endobj
-17983 0 obj <<
-/Names [(lstnumber.-58.7) 8109 0 R (lstnumber.-58.8) 8110 0 R (lstnumber.-58.9) 8111 0 R (lstnumber.-59.1) 8150 0 R (lstnumber.-59.10) 8159 0 R (lstnumber.-59.11) 8160 0 R]
+17972 0 obj <<
+/Names [(lstnumber.-58.7) 8098 0 R (lstnumber.-58.8) 8099 0 R (lstnumber.-58.9) 8100 0 R (lstnumber.-59.1) 8139 0 R (lstnumber.-59.10) 8148 0 R (lstnumber.-59.11) 8149 0 R]
 /Limits [(lstnumber.-58.7) (lstnumber.-59.11)]
 >> endobj
-17984 0 obj <<
-/Names [(lstnumber.-59.12) 8161 0 R (lstnumber.-59.2) 8151 0 R (lstnumber.-59.3) 8152 0 R (lstnumber.-59.4) 8153 0 R (lstnumber.-59.5) 8154 0 R (lstnumber.-59.6) 8155 0 R]
+17973 0 obj <<
+/Names [(lstnumber.-59.12) 8150 0 R (lstnumber.-59.2) 8140 0 R (lstnumber.-59.3) 8141 0 R (lstnumber.-59.4) 8142 0 R (lstnumber.-59.5) 8143 0 R (lstnumber.-59.6) 8144 0 R]
 /Limits [(lstnumber.-59.12) (lstnumber.-59.6)]
 >> endobj
-17985 0 obj <<
-/Names [(lstnumber.-59.7) 8156 0 R (lstnumber.-59.8) 8157 0 R (lstnumber.-59.9) 8158 0 R (lstnumber.-6.1) 5698 0 R (lstnumber.-6.10) 5707 0 R (lstnumber.-6.11) 5708 0 R]
+17974 0 obj <<
+/Names [(lstnumber.-59.7) 8145 0 R (lstnumber.-59.8) 8146 0 R (lstnumber.-59.9) 8147 0 R (lstnumber.-6.1) 5698 0 R (lstnumber.-6.10) 5707 0 R (lstnumber.-6.11) 5708 0 R]
 /Limits [(lstnumber.-59.7) (lstnumber.-6.11)]
 >> endobj
-17986 0 obj <<
+17975 0 obj <<
 /Names [(lstnumber.-6.12) 5709 0 R (lstnumber.-6.13) 5710 0 R (lstnumber.-6.14) 5711 0 R (lstnumber.-6.15) 5712 0 R (lstnumber.-6.16) 5713 0 R (lstnumber.-6.17) 5714 0 R]
 /Limits [(lstnumber.-6.12) (lstnumber.-6.17)]
 >> endobj
-17987 0 obj <<
+17976 0 obj <<
 /Names [(lstnumber.-6.18) 5715 0 R (lstnumber.-6.19) 5716 0 R (lstnumber.-6.2) 5699 0 R (lstnumber.-6.20) 5717 0 R (lstnumber.-6.21) 5718 0 R (lstnumber.-6.22) 5719 0 R]
 /Limits [(lstnumber.-6.18) (lstnumber.-6.22)]
 >> endobj
-17988 0 obj <<
+17977 0 obj <<
 /Names [(lstnumber.-6.23) 5720 0 R (lstnumber.-6.24) 5721 0 R (lstnumber.-6.25) 5722 0 R (lstnumber.-6.26) 5723 0 R (lstnumber.-6.27) 5724 0 R (lstnumber.-6.28) 5725 0 R]
 /Limits [(lstnumber.-6.23) (lstnumber.-6.28)]
 >> endobj
-17989 0 obj <<
+17978 0 obj <<
 /Names [(lstnumber.-6.3) 5700 0 R (lstnumber.-6.4) 5701 0 R (lstnumber.-6.5) 5702 0 R (lstnumber.-6.6) 5703 0 R (lstnumber.-6.7) 5704 0 R (lstnumber.-6.8) 5705 0 R]
 /Limits [(lstnumber.-6.3) (lstnumber.-6.8)]
 >> endobj
-17990 0 obj <<
-/Names [(lstnumber.-6.9) 5706 0 R (lstnumber.-60.1) 8374 0 R (lstnumber.-60.2) 8375 0 R (lstnumber.-60.3) 8376 0 R (lstnumber.-60.4) 8377 0 R (lstnumber.-62.1) 8423 0 R]
+17979 0 obj <<
+/Names [(lstnumber.-6.9) 5706 0 R (lstnumber.-60.1) 8361 0 R (lstnumber.-60.2) 8362 0 R (lstnumber.-60.3) 8363 0 R (lstnumber.-60.4) 8364 0 R (lstnumber.-62.1) 8410 0 R]
 /Limits [(lstnumber.-6.9) (lstnumber.-62.1)]
 >> endobj
-17991 0 obj <<
-/Names [(lstnumber.-62.2) 8424 0 R (lstnumber.-63.1) 8497 0 R (lstnumber.-63.2) 8498 0 R (lstnumber.-63.3) 8499 0 R (lstnumber.-64.1) 8501 0 R (lstnumber.-65.1) 8504 0 R]
+17980 0 obj <<
+/Names [(lstnumber.-62.2) 8411 0 R (lstnumber.-63.1) 8484 0 R (lstnumber.-63.2) 8485 0 R (lstnumber.-63.3) 8486 0 R (lstnumber.-64.1) 8488 0 R (lstnumber.-65.1) 8491 0 R]
 /Limits [(lstnumber.-62.2) (lstnumber.-65.1)]
 >> endobj
-17992 0 obj <<
-/Names [(lstnumber.-66.1) 8512 0 R (lstnumber.-66.2) 8513 0 R (lstnumber.-66.3) 8514 0 R (lstnumber.-66.4) 8515 0 R (lstnumber.-67.1) 8517 0 R (lstnumber.-68.1) 8520 0 R]
+17981 0 obj <<
+/Names [(lstnumber.-66.1) 8499 0 R (lstnumber.-66.2) 8500 0 R (lstnumber.-66.3) 8501 0 R (lstnumber.-66.4) 8502 0 R (lstnumber.-67.1) 8504 0 R (lstnumber.-68.1) 8507 0 R]
 /Limits [(lstnumber.-66.1) (lstnumber.-68.1)]
 >> endobj
-17993 0 obj <<
-/Names [(lstnumber.-68.2) 8521 0 R (lstnumber.-68.3) 8522 0 R (lstnumber.-68.4) 8523 0 R (lstnumber.-69.1) 8590 0 R (lstnumber.-69.2) 8596 0 R (lstnumber.-7.1) 5756 0 R]
+17982 0 obj <<
+/Names [(lstnumber.-68.2) 8508 0 R (lstnumber.-68.3) 8509 0 R (lstnumber.-68.4) 8510 0 R (lstnumber.-69.1) 8577 0 R (lstnumber.-69.2) 8583 0 R (lstnumber.-7.1) 5756 0 R]
 /Limits [(lstnumber.-68.2) (lstnumber.-7.1)]
 >> endobj
-17994 0 obj <<
+17983 0 obj <<
 /Names [(lstnumber.-7.10) 5765 0 R (lstnumber.-7.11) 5766 0 R (lstnumber.-7.12) 5767 0 R (lstnumber.-7.2) 5757 0 R (lstnumber.-7.3) 5758 0 R (lstnumber.-7.4) 5759 0 R]
 /Limits [(lstnumber.-7.10) (lstnumber.-7.4)]
 >> endobj
-17995 0 obj <<
-/Names [(lstnumber.-7.5) 5760 0 R (lstnumber.-7.6) 5761 0 R (lstnumber.-7.7) 5762 0 R (lstnumber.-7.8) 5763 0 R (lstnumber.-7.9) 5764 0 R (lstnumber.-70.1) 8599 0 R]
+17984 0 obj <<
+/Names [(lstnumber.-7.5) 5760 0 R (lstnumber.-7.6) 5761 0 R (lstnumber.-7.7) 5762 0 R (lstnumber.-7.8) 5763 0 R (lstnumber.-7.9) 5764 0 R (lstnumber.-70.1) 8586 0 R]
 /Limits [(lstnumber.-7.5) (lstnumber.-70.1)]
 >> endobj
-17996 0 obj <<
-/Names [(lstnumber.-71.1) 8602 0 R (lstnumber.-71.2) 8603 0 R (lstnumber.-72.1) 8611 0 R (lstnumber.-72.2) 8617 0 R (lstnumber.-72.3) 8618 0 R (lstnumber.-73.1) 8634 0 R]
+17985 0 obj <<
+/Names [(lstnumber.-71.1) 8589 0 R (lstnumber.-71.2) 8590 0 R (lstnumber.-72.1) 8598 0 R (lstnumber.-72.2) 8604 0 R (lstnumber.-72.3) 8605 0 R (lstnumber.-73.1) 8621 0 R]
 /Limits [(lstnumber.-71.1) (lstnumber.-73.1)]
 >> endobj
-17997 0 obj <<
-/Names [(lstnumber.-74.1) 8636 0 R (lstnumber.-75.1) 8647 0 R (lstnumber.-75.2) 8648 0 R (lstnumber.-76.1) 8723 0 R (lstnumber.-76.2) 8724 0 R (lstnumber.-76.3) 8725 0 R]
+17986 0 obj <<
+/Names [(lstnumber.-74.1) 8623 0 R (lstnumber.-75.1) 8634 0 R (lstnumber.-75.2) 8635 0 R (lstnumber.-76.1) 8709 0 R (lstnumber.-76.2) 8710 0 R (lstnumber.-76.3) 8711 0 R]
 /Limits [(lstnumber.-74.1) (lstnumber.-76.3)]
 >> endobj
-17998 0 obj <<
-/Names [(lstnumber.-76.4) 8726 0 R (lstnumber.-76.5) 8727 0 R (lstnumber.-76.6) 8728 0 R (lstnumber.-77.1) 8737 0 R (lstnumber.-77.2) 8738 0 R (lstnumber.-77.3) 8739 0 R]
+17987 0 obj <<
+/Names [(lstnumber.-76.4) 8712 0 R (lstnumber.-76.5) 8713 0 R (lstnumber.-76.6) 8714 0 R (lstnumber.-77.1) 8723 0 R (lstnumber.-77.2) 8724 0 R (lstnumber.-77.3) 8725 0 R]
 /Limits [(lstnumber.-76.4) (lstnumber.-77.3)]
 >> endobj
-17999 0 obj <<
-/Names [(lstnumber.-78.1) 8777 0 R (lstnumber.-78.2) 8778 0 R (lstnumber.-78.3) 8779 0 R (lstnumber.-78.4) 8780 0 R (lstnumber.-78.5) 8781 0 R (lstnumber.-78.6) 8782 0 R]
+17988 0 obj <<
+/Names [(lstnumber.-78.1) 8763 0 R (lstnumber.-78.2) 8764 0 R (lstnumber.-78.3) 8765 0 R (lstnumber.-78.4) 8766 0 R (lstnumber.-78.5) 8767 0 R (lstnumber.-78.6) 8768 0 R]
 /Limits [(lstnumber.-78.1) (lstnumber.-78.6)]
 >> endobj
-18000 0 obj <<
-/Names [(lstnumber.-78.7) 8783 0 R (lstnumber.-78.8) 8784 0 R (lstnumber.-79.1) 8813 0 R (lstnumber.-79.2) 8814 0 R (lstnumber.-8.1) 5777 0 R (lstnumber.-8.10) 5786 0 R]
+17989 0 obj <<
+/Names [(lstnumber.-78.7) 8769 0 R (lstnumber.-78.8) 8770 0 R (lstnumber.-79.1) 8799 0 R (lstnumber.-79.2) 8800 0 R (lstnumber.-8.1) 5777 0 R (lstnumber.-8.10) 5786 0 R]
 /Limits [(lstnumber.-78.7) (lstnumber.-8.10)]
 >> endobj
-18001 0 obj <<
+17990 0 obj <<
 /Names [(lstnumber.-8.11) 5787 0 R (lstnumber.-8.12) 5788 0 R (lstnumber.-8.13) 5789 0 R (lstnumber.-8.14) 5790 0 R (lstnumber.-8.15) 5791 0 R (lstnumber.-8.16) 5792 0 R]
 /Limits [(lstnumber.-8.11) (lstnumber.-8.16)]
 >> endobj
-18002 0 obj <<
+17991 0 obj <<
 /Names [(lstnumber.-8.17) 5793 0 R (lstnumber.-8.18) 5794 0 R (lstnumber.-8.19) 5795 0 R (lstnumber.-8.2) 5778 0 R (lstnumber.-8.20) 5796 0 R (lstnumber.-8.21) 5797 0 R]
 /Limits [(lstnumber.-8.17) (lstnumber.-8.21)]
 >> endobj
-18003 0 obj <<
+17992 0 obj <<
 /Names [(lstnumber.-8.22) 5798 0 R (lstnumber.-8.23) 5799 0 R (lstnumber.-8.24) 5800 0 R (lstnumber.-8.3) 5779 0 R (lstnumber.-8.4) 5780 0 R (lstnumber.-8.5) 5781 0 R]
 /Limits [(lstnumber.-8.22) (lstnumber.-8.5)]
 >> endobj
-18004 0 obj <<
-/Names [(lstnumber.-8.6) 5782 0 R (lstnumber.-8.7) 5783 0 R (lstnumber.-8.8) 5784 0 R (lstnumber.-8.9) 5785 0 R (lstnumber.-80.1) 8824 0 R (lstnumber.-80.10) 8833 0 R]
+17993 0 obj <<
+/Names [(lstnumber.-8.6) 5782 0 R (lstnumber.-8.7) 5783 0 R (lstnumber.-8.8) 5784 0 R (lstnumber.-8.9) 5785 0 R (lstnumber.-80.1) 8810 0 R (lstnumber.-80.10) 8819 0 R]
 /Limits [(lstnumber.-8.6) (lstnumber.-80.10)]
 >> endobj
-18005 0 obj <<
-/Names [(lstnumber.-80.11) 8834 0 R (lstnumber.-80.12) 8835 0 R (lstnumber.-80.13) 8836 0 R (lstnumber.-80.14) 8837 0 R (lstnumber.-80.15) 8838 0 R (lstnumber.-80.16) 8839 0 R]
+17994 0 obj <<
+/Names [(lstnumber.-80.11) 8820 0 R (lstnumber.-80.12) 8821 0 R (lstnumber.-80.13) 8822 0 R (lstnumber.-80.14) 8823 0 R (lstnumber.-80.15) 8824 0 R (lstnumber.-80.16) 8825 0 R]
 /Limits [(lstnumber.-80.11) (lstnumber.-80.16)]
 >> endobj
-18006 0 obj <<
-/Names [(lstnumber.-80.17) 8840 0 R (lstnumber.-80.18) 8841 0 R (lstnumber.-80.19) 8842 0 R (lstnumber.-80.2) 8825 0 R (lstnumber.-80.20) 8843 0 R (lstnumber.-80.21) 8844 0 R]
+17995 0 obj <<
+/Names [(lstnumber.-80.17) 8826 0 R (lstnumber.-80.18) 8827 0 R (lstnumber.-80.19) 8828 0 R (lstnumber.-80.2) 8811 0 R (lstnumber.-80.20) 8829 0 R (lstnumber.-80.21) 8830 0 R]
 /Limits [(lstnumber.-80.17) (lstnumber.-80.21)]
 >> endobj
-18007 0 obj <<
-/Names [(lstnumber.-80.22) 8845 0 R (lstnumber.-80.23) 8846 0 R (lstnumber.-80.24) 8847 0 R (lstnumber.-80.25) 8848 0 R (lstnumber.-80.26) 8849 0 R (lstnumber.-80.27) 8850 0 R]
+17996 0 obj <<
+/Names [(lstnumber.-80.22) 8831 0 R (lstnumber.-80.23) 8832 0 R (lstnumber.-80.24) 8833 0 R (lstnumber.-80.25) 8834 0 R (lstnumber.-80.26) 8835 0 R (lstnumber.-80.27) 8836 0 R]
 /Limits [(lstnumber.-80.22) (lstnumber.-80.27)]
 >> endobj
-18008 0 obj <<
-/Names [(lstnumber.-80.28) 8851 0 R (lstnumber.-80.3) 8826 0 R (lstnumber.-80.4) 8827 0 R (lstnumber.-80.5) 8828 0 R (lstnumber.-80.6) 8829 0 R (lstnumber.-80.7) 8830 0 R]
+17997 0 obj <<
+/Names [(lstnumber.-80.28) 8837 0 R (lstnumber.-80.3) 8812 0 R (lstnumber.-80.4) 8813 0 R (lstnumber.-80.5) 8814 0 R (lstnumber.-80.6) 8815 0 R (lstnumber.-80.7) 8816 0 R]
 /Limits [(lstnumber.-80.28) (lstnumber.-80.7)]
 >> endobj
-18009 0 obj <<
-/Names [(lstnumber.-80.8) 8831 0 R (lstnumber.-80.9) 8832 0 R (lstnumber.-81.1) 8908 0 R (lstnumber.-82.1) 8910 0 R (lstnumber.-83.1) 8936 0 R (lstnumber.-83.10) 8945 0 R]
+17998 0 obj <<
+/Names [(lstnumber.-80.8) 8817 0 R (lstnumber.-80.9) 8818 0 R (lstnumber.-81.1) 8894 0 R (lstnumber.-82.1) 8896 0 R (lstnumber.-83.1) 8922 0 R (lstnumber.-83.10) 8931 0 R]
 /Limits [(lstnumber.-80.8) (lstnumber.-83.10)]
 >> endobj
-18010 0 obj <<
-/Names [(lstnumber.-83.11) 8946 0 R (lstnumber.-83.12) 8947 0 R (lstnumber.-83.13) 8948 0 R (lstnumber.-83.14) 8949 0 R (lstnumber.-83.2) 8937 0 R (lstnumber.-83.3) 8938 0 R]
+17999 0 obj <<
+/Names [(lstnumber.-83.11) 8932 0 R (lstnumber.-83.12) 8933 0 R (lstnumber.-83.13) 8934 0 R (lstnumber.-83.14) 8935 0 R (lstnumber.-83.2) 8923 0 R (lstnumber.-83.3) 8924 0 R]
 /Limits [(lstnumber.-83.11) (lstnumber.-83.3)]
 >> endobj
-18011 0 obj <<
-/Names [(lstnumber.-83.4) 8939 0 R (lstnumber.-83.5) 8940 0 R (lstnumber.-83.6) 8941 0 R (lstnumber.-83.7) 8942 0 R (lstnumber.-83.8) 8943 0 R (lstnumber.-83.9) 8944 0 R]
+18000 0 obj <<
+/Names [(lstnumber.-83.4) 8925 0 R (lstnumber.-83.5) 8926 0 R (lstnumber.-83.6) 8927 0 R (lstnumber.-83.7) 8928 0 R (lstnumber.-83.8) 8929 0 R (lstnumber.-83.9) 8930 0 R]
 /Limits [(lstnumber.-83.4) (lstnumber.-83.9)]
 >> endobj
+18001 0 obj <<
+/Names [(lstnumber.-84.1) 9228 0 R (lstnumber.-84.10) 9237 0 R (lstnumber.-84.11) 9238 0 R (lstnumber.-84.12) 9239 0 R (lstnumber.-84.13) 9240 0 R (lstnumber.-84.2) 9229 0 R]
+/Limits [(lstnumber.-84.1) (lstnumber.-84.2)]
+>> endobj
+18002 0 obj <<
+/Names [(lstnumber.-84.3) 9230 0 R (lstnumber.-84.4) 9231 0 R (lstnumber.-84.5) 9232 0 R (lstnumber.-84.6) 9233 0 R (lstnumber.-84.7) 9234 0 R (lstnumber.-84.8) 9235 0 R]
+/Limits [(lstnumber.-84.3) (lstnumber.-84.8)]
+>> endobj
+18003 0 obj <<
+/Names [(lstnumber.-84.9) 9236 0 R (lstnumber.-85.1) 9248 0 R (lstnumber.-85.10) 9257 0 R (lstnumber.-85.11) 9258 0 R (lstnumber.-85.12) 9259 0 R (lstnumber.-85.13) 9260 0 R]
+/Limits [(lstnumber.-84.9) (lstnumber.-85.13)]
+>> endobj
+18004 0 obj <<
+/Names [(lstnumber.-85.14) 9261 0 R (lstnumber.-85.15) 9262 0 R (lstnumber.-85.16) 9263 0 R (lstnumber.-85.17) 9264 0 R (lstnumber.-85.18) 9265 0 R (lstnumber.-85.19) 9266 0 R]
+/Limits [(lstnumber.-85.14) (lstnumber.-85.19)]
+>> endobj
+18005 0 obj <<
+/Names [(lstnumber.-85.2) 9249 0 R (lstnumber.-85.20) 9267 0 R (lstnumber.-85.21) 9268 0 R (lstnumber.-85.22) 9269 0 R (lstnumber.-85.23) 9270 0 R (lstnumber.-85.24) 9271 0 R]
+/Limits [(lstnumber.-85.2) (lstnumber.-85.24)]
+>> endobj
+18006 0 obj <<
+/Names [(lstnumber.-85.25) 9272 0 R (lstnumber.-85.3) 9250 0 R (lstnumber.-85.4) 9251 0 R (lstnumber.-85.5) 9252 0 R (lstnumber.-85.6) 9253 0 R (lstnumber.-85.7) 9254 0 R]
+/Limits [(lstnumber.-85.25) (lstnumber.-85.7)]
+>> endobj
+18007 0 obj <<
+/Names [(lstnumber.-85.8) 9255 0 R (lstnumber.-85.9) 9256 0 R (lstnumber.-86.1) 9558 0 R (lstnumber.-86.2) 9559 0 R (lstnumber.-87.1) 9606 0 R (lstnumber.-87.10) 9615 0 R]
+/Limits [(lstnumber.-85.8) (lstnumber.-87.10)]
+>> endobj
+18008 0 obj <<
+/Names [(lstnumber.-87.11) 9616 0 R (lstnumber.-87.12) 9617 0 R (lstnumber.-87.13) 9618 0 R (lstnumber.-87.14) 9619 0 R (lstnumber.-87.15) 9620 0 R (lstnumber.-87.16) 9621 0 R]
+/Limits [(lstnumber.-87.11) (lstnumber.-87.16)]
+>> endobj
+18009 0 obj <<
+/Names [(lstnumber.-87.17) 9622 0 R (lstnumber.-87.18) 9623 0 R (lstnumber.-87.19) 9624 0 R (lstnumber.-87.2) 9607 0 R (lstnumber.-87.20) 9625 0 R (lstnumber.-87.21) 9626 0 R]
+/Limits [(lstnumber.-87.17) (lstnumber.-87.21)]
+>> endobj
+18010 0 obj <<
+/Names [(lstnumber.-87.3) 9608 0 R (lstnumber.-87.4) 9609 0 R (lstnumber.-87.5) 9610 0 R (lstnumber.-87.6) 9611 0 R (lstnumber.-87.7) 9612 0 R (lstnumber.-87.8) 9613 0 R]
+/Limits [(lstnumber.-87.3) (lstnumber.-87.8)]
+>> endobj
+18011 0 obj <<
+/Names [(lstnumber.-87.9) 9614 0 R (lstnumber.-88.1) 10087 0 R (lstnumber.-88.2) 10088 0 R (lstnumber.-88.3) 10089 0 R (lstnumber.-88.4) 10090 0 R (lstnumber.-88.5) 10091 0 R]
+/Limits [(lstnumber.-87.9) (lstnumber.-88.5)]
+>> endobj
 18012 0 obj <<
-/Names [(lstnumber.-84.1) 9242 0 R (lstnumber.-84.10) 9251 0 R (lstnumber.-84.11) 9252 0 R (lstnumber.-84.12) 9253 0 R (lstnumber.-84.2) 9243 0 R (lstnumber.-84.3) 9244 0 R]
-/Limits [(lstnumber.-84.1) (lstnumber.-84.3)]
+/Names [(lstnumber.-88.6) 10092 0 R (lstnumber.-89.1) 10095 0 R (lstnumber.-89.2) 10096 0 R (lstnumber.-89.3) 10097 0 R (lstnumber.-89.4) 10098 0 R (lstnumber.-89.5) 10099 0 R]
+/Limits [(lstnumber.-88.6) (lstnumber.-89.5)]
 >> endobj
 18013 0 obj <<
-/Names [(lstnumber.-84.4) 9245 0 R (lstnumber.-84.5) 9246 0 R (lstnumber.-84.6) 9247 0 R (lstnumber.-84.7) 9248 0 R (lstnumber.-84.8) 9249 0 R (lstnumber.-84.9) 9250 0 R]
-/Limits [(lstnumber.-84.4) (lstnumber.-84.9)]
+/Names [(lstnumber.-89.6) 10100 0 R (lstnumber.-89.7) 10101 0 R (lstnumber.-89.8) 10102 0 R (lstnumber.-89.9) 10103 0 R (lstnumber.-9.1) 5836 0 R (lstnumber.-9.10) 5845 0 R]
+/Limits [(lstnumber.-89.6) (lstnumber.-9.10)]
 >> endobj
 18014 0 obj <<
-/Names [(lstnumber.-85.1) 9261 0 R (lstnumber.-85.10) 9270 0 R (lstnumber.-85.11) 9271 0 R (lstnumber.-85.12) 9272 0 R (lstnumber.-85.13) 9273 0 R (lstnumber.-85.14) 9274 0 R]
-/Limits [(lstnumber.-85.1) (lstnumber.-85.14)]
+/Names [(lstnumber.-9.11) 5846 0 R (lstnumber.-9.12) 5847 0 R (lstnumber.-9.13) 5848 0 R (lstnumber.-9.14) 5849 0 R (lstnumber.-9.15) 5850 0 R (lstnumber.-9.16) 5851 0 R]
+/Limits [(lstnumber.-9.11) (lstnumber.-9.16)]
 >> endobj
 18015 0 obj <<
-/Names [(lstnumber.-85.15) 9275 0 R (lstnumber.-85.16) 9276 0 R (lstnumber.-85.17) 9277 0 R (lstnumber.-85.18) 9278 0 R (lstnumber.-85.19) 9279 0 R (lstnumber.-85.2) 9262 0 R]
-/Limits [(lstnumber.-85.15) (lstnumber.-85.2)]
+/Names [(lstnumber.-9.17) 5852 0 R (lstnumber.-9.18) 5853 0 R (lstnumber.-9.19) 5854 0 R (lstnumber.-9.2) 5837 0 R (lstnumber.-9.20) 5855 0 R (lstnumber.-9.21) 5856 0 R]
+/Limits [(lstnumber.-9.17) (lstnumber.-9.21)]
 >> endobj
 18016 0 obj <<
-/Names [(lstnumber.-85.20) 9280 0 R (lstnumber.-85.21) 9281 0 R (lstnumber.-85.22) 9282 0 R (lstnumber.-85.23) 9283 0 R (lstnumber.-85.3) 9263 0 R (lstnumber.-85.4) 9264 0 R]
-/Limits [(lstnumber.-85.20) (lstnumber.-85.4)]
+/Names [(lstnumber.-9.22) 5857 0 R (lstnumber.-9.23) 5858 0 R (lstnumber.-9.24) 5859 0 R (lstnumber.-9.25) 5860 0 R (lstnumber.-9.26) 5861 0 R (lstnumber.-9.3) 5838 0 R]
+/Limits [(lstnumber.-9.22) (lstnumber.-9.3)]
 >> endobj
 18017 0 obj <<
-/Names [(lstnumber.-85.5) 9265 0 R (lstnumber.-85.6) 9266 0 R (lstnumber.-85.7) 9267 0 R (lstnumber.-85.8) 9268 0 R (lstnumber.-85.9) 9269 0 R (lstnumber.-86.1) 9571 0 R]
-/Limits [(lstnumber.-85.5) (lstnumber.-86.1)]
+/Names [(lstnumber.-9.4) 5839 0 R (lstnumber.-9.5) 5840 0 R (lstnumber.-9.6) 5841 0 R (lstnumber.-9.7) 5842 0 R (lstnumber.-9.8) 5843 0 R (lstnumber.-9.9) 5844 0 R]
+/Limits [(lstnumber.-9.4) (lstnumber.-9.9)]
 >> endobj
 18018 0 obj <<
-/Names [(lstnumber.-86.2) 9572 0 R (lstnumber.-87.1) 9619 0 R (lstnumber.-87.10) 9628 0 R (lstnumber.-87.11) 9629 0 R (lstnumber.-87.12) 9630 0 R (lstnumber.-87.13) 9631 0 R]
-/Limits [(lstnumber.-86.2) (lstnumber.-87.13)]
+/Names [(lstnumber.-91.1) 10296 0 R (lstnumber.-91.10) 10305 0 R (lstnumber.-91.11) 10306 0 R (lstnumber.-91.12) 10307 0 R (lstnumber.-91.13) 10308 0 R (lstnumber.-91.2) 10297 0 R]
+/Limits [(lstnumber.-91.1) (lstnumber.-91.2)]
 >> endobj
 18019 0 obj <<
-/Names [(lstnumber.-87.14) 9632 0 R (lstnumber.-87.15) 9633 0 R (lstnumber.-87.16) 9634 0 R (lstnumber.-87.17) 9635 0 R (lstnumber.-87.18) 9636 0 R (lstnumber.-87.19) 9637 0 R]
-/Limits [(lstnumber.-87.14) (lstnumber.-87.19)]
+/Names [(lstnumber.-91.3) 10298 0 R (lstnumber.-91.4) 10299 0 R (lstnumber.-91.5) 10300 0 R (lstnumber.-91.6) 10301 0 R (lstnumber.-91.7) 10302 0 R (lstnumber.-91.8) 10303 0 R]
+/Limits [(lstnumber.-91.3) (lstnumber.-91.8)]
 >> endobj
 18020 0 obj <<
-/Names [(lstnumber.-87.2) 9620 0 R (lstnumber.-87.20) 9638 0 R (lstnumber.-87.3) 9621 0 R (lstnumber.-87.4) 9622 0 R (lstnumber.-87.5) 9623 0 R (lstnumber.-87.6) 9624 0 R]
-/Limits [(lstnumber.-87.2) (lstnumber.-87.6)]
+/Names [(lstnumber.-91.9) 10304 0 R (lstnumber.-92.1) 10535 0 R (lstnumber.-93.1) 10537 0 R (lstnumber.-94.1) 10544 0 R (lstnumber.-95.1) 10547 0 R (lstnumber.-95.2) 10548 0 R]
+/Limits [(lstnumber.-91.9) (lstnumber.-95.2)]
 >> endobj
 18021 0 obj <<
-/Names [(lstnumber.-87.7) 9625 0 R (lstnumber.-87.8) 9626 0 R (lstnumber.-87.9) 9627 0 R (lstnumber.-88.1) 10099 0 R (lstnumber.-88.2) 10100 0 R (lstnumber.-88.3) 10101 0 R]
-/Limits [(lstnumber.-87.7) (lstnumber.-88.3)]
+/Names [(lstnumber.-96.1) 10719 0 R (lstnumber.-96.2) 10720 0 R (lstnumber.-96.3) 10721 0 R (lstnumber.-97.1) 10729 0 R (lstnumber.-97.2) 10730 0 R (lstnumber.-97.3) 10731 0 R]
+/Limits [(lstnumber.-96.1) (lstnumber.-97.3)]
 >> endobj
 18022 0 obj <<
-/Names [(lstnumber.-88.4) 10102 0 R (lstnumber.-88.5) 10103 0 R (lstnumber.-88.6) 10104 0 R (lstnumber.-89.1) 10107 0 R (lstnumber.-89.2) 10108 0 R (lstnumber.-89.3) 10109 0 R]
-/Limits [(lstnumber.-88.4) (lstnumber.-89.3)]
+/Names [(lstnumber.-97.4) 10732 0 R (lstnumber.-98.1) 10910 0 R (lstnumber.-99.1) 10912 0 R (lstnumber.-99.2) 10913 0 R (machine-trust-accounts) 6202 0 R (magicnetlogon) 7807 0 R]
+/Limits [(lstnumber.-97.4) (magicnetlogon)]
 >> endobj
 18023 0 obj <<
-/Names [(lstnumber.-89.4) 10110 0 R (lstnumber.-89.5) 10111 0 R (lstnumber.-89.6) 10112 0 R (lstnumber.-89.7) 10113 0 R (lstnumber.-89.8) 10114 0 R (lstnumber.-89.9) 10115 0 R]
-/Limits [(lstnumber.-89.4) (lstnumber.-89.9)]
+/Names [(majtypes) 11413 0 R (mastersmbc) 11171 0 R (mcoc) 8290 0 R (merlinsmbc) 11172 0 R (migration) 11256 0 R (minim-bdc) 6462 0 R]
+/Limits [(majtypes) (minim-bdc)]
 >> endobj
 18024 0 obj <<
-/Names [(lstnumber.-9.1) 5836 0 R (lstnumber.-9.10) 5845 0 R (lstnumber.-9.11) 5846 0 R (lstnumber.-9.12) 5847 0 R (lstnumber.-9.13) 5848 0 R (lstnumber.-9.14) 5849 0 R]
-/Limits [(lstnumber.-9.1) (lstnumber.-9.14)]
+/Names [(minimalPDC) 6409 0 R (minimalprofile) 11875 0 R (modif1) 11554 0 R (modif2) 11561 0 R (msdfs) 3819 0 R (mulitldapcfg) 6431 0 R]
+/Limits [(minimalPDC) (mulitldapcfg)]
 >> endobj
 18025 0 obj <<
-/Names [(lstnumber.-9.15) 5850 0 R (lstnumber.-9.16) 5851 0 R (lstnumber.-9.17) 5852 0 R (lstnumber.-9.18) 5853 0 R (lstnumber.-9.19) 5854 0 R (lstnumber.-9.2) 5837 0 R]
-/Limits [(lstnumber.-9.15) (lstnumber.-9.2)]
+/Names [(multimodule) 10093 0 R (natconchoices) 11421 0 R (nestedgrpmgmgt) 7791 0 R (netbiosnamesgrp) 10881 0 R (netdiscuss) 6446 0 R (netmisc1) 7958 0 R]
+/Limits [(multimodule) (netmisc1)]
 >> endobj
 18026 0 obj <<
-/Names [(lstnumber.-9.20) 5855 0 R (lstnumber.-9.21) 5856 0 R (lstnumber.-9.22) 5857 0 R (lstnumber.-9.23) 5858 0 R (lstnumber.-9.24) 5859 0 R (lstnumber.-9.25) 5860 0 R]
-/Limits [(lstnumber.-9.20) (lstnumber.-9.25)]
+/Names [(nombexample) 7072 0 R (oldtdbfiledesc) 11332 0 R (oldupdatenotes) 6963 0 R (optional) 6947 0 R (overridesettings) 9242 0 R (page.1) 5458 0 R]
+/Limits [(nombexample) (page.1)]
 >> endobj
 18027 0 obj <<
-/Names [(lstnumber.-9.26) 5861 0 R (lstnumber.-9.3) 5838 0 R (lstnumber.-9.4) 5839 0 R (lstnumber.-9.5) 5840 0 R (lstnumber.-9.6) 5841 0 R (lstnumber.-9.7) 5842 0 R]
-/Limits [(lstnumber.-9.26) (lstnumber.-9.7)]
+/Names [(page.10) 5541 0 R (page.100) 6508 0 R (page.101) 6513 0 R (page.102) 6517 0 R (page.103) 6523 0 R (page.104) 6529 0 R]
+/Limits [(page.10) (page.104)]
 >> endobj
 18028 0 obj <<
-/Names [(lstnumber.-9.8) 5843 0 R (lstnumber.-9.9) 5844 0 R (lstnumber.-91.1) 10308 0 R (lstnumber.-91.10) 10317 0 R (lstnumber.-91.11) 10318 0 R (lstnumber.-91.12) 10319 0 R]
-/Limits [(lstnumber.-9.8) (lstnumber.-91.12)]
+/Names [(page.105) 6537 0 R (page.106) 6553 0 R (page.107) 6564 0 R (page.108) 6570 0 R (page.109) 6583 0 R (page.11) 5550 0 R]
+/Limits [(page.105) (page.11)]
 >> endobj
 18029 0 obj <<
-/Names [(lstnumber.-91.13) 10320 0 R (lstnumber.-91.2) 10309 0 R (lstnumber.-91.3) 10310 0 R (lstnumber.-91.4) 10311 0 R (lstnumber.-91.5) 10312 0 R (lstnumber.-91.6) 10313 0 R]
-/Limits [(lstnumber.-91.13) (lstnumber.-91.6)]
+/Names [(page.110) 6589 0 R (page.111) 6596 0 R (page.112) 6610 0 R (page.113) 6619 0 R (page.114) 6626 0 R (page.115) 6630 0 R]
+/Limits [(page.110) (page.115)]
 >> endobj
 18030 0 obj <<
-/Names [(lstnumber.-91.7) 10314 0 R (lstnumber.-91.8) 10315 0 R (lstnumber.-91.9) 10316 0 R (lstnumber.-92.1) 10547 0 R (lstnumber.-93.1) 10549 0 R (lstnumber.-94.1) 10556 0 R]
-/Limits [(lstnumber.-91.7) (lstnumber.-94.1)]
+/Names [(page.116) 6637 0 R (page.117) 6642 0 R (page.118) 6650 0 R (page.119) 6658 0 R (page.12) 5557 0 R (page.120) 6663 0 R]
+/Limits [(page.116) (page.120)]
 >> endobj
 18031 0 obj <<
-/Names [(lstnumber.-95.1) 10559 0 R (lstnumber.-95.2) 10560 0 R (lstnumber.-96.1) 10731 0 R (lstnumber.-96.2) 10732 0 R (lstnumber.-96.3) 10733 0 R (lstnumber.-97.1) 10741 0 R]
-/Limits [(lstnumber.-95.1) (lstnumber.-97.1)]
+/Names [(page.121) 6667 0 R (page.122) 6676 0 R (page.123) 6685 0 R (page.124) 6702 0 R (page.125) 6715 0 R (page.126) 6738 0 R]
+/Limits [(page.121) (page.126)]
 >> endobj
 18032 0 obj <<
-/Names [(lstnumber.-97.2) 10742 0 R (lstnumber.-97.3) 10743 0 R (lstnumber.-97.4) 10744 0 R (lstnumber.-98.1) 10922 0 R (lstnumber.-99.1) 10924 0 R (lstnumber.-99.2) 10925 0 R]
-/Limits [(lstnumber.-97.2) (lstnumber.-99.2)]
+/Names [(page.127) 6743 0 R (page.128) 6755 0 R (page.129) 6771 0 R (page.13) 5566 0 R (page.130) 6783 0 R (page.131) 6800 0 R]
+/Limits [(page.127) (page.131)]
 >> endobj
 18033 0 obj <<
-/Names [(machine-trust-accounts) 6203 0 R (magicnetlogon) 7818 0 R (majtypes) 11425 0 R (mastersmbc) 11183 0 R (mcoc) 8303 0 R (merlinsmbc) 11184 0 R]
-/Limits [(machine-trust-accounts) (merlinsmbc)]
+/Names [(page.132) 6811 0 R (page.133) 6825 0 R (page.134) 6838 0 R (page.135) 6855 0 R (page.136) 6870 0 R (page.137) 6884 0 R]
+/Limits [(page.132) (page.137)]
 >> endobj
 18034 0 obj <<
-/Names [(migration) 11268 0 R (minim-bdc) 6463 0 R (minimalPDC) 6410 0 R (minimalprofile) 11887 0 R (modif1) 11566 0 R (modif2) 11573 0 R]
-/Limits [(migration) (modif2)]
+/Names [(page.138) 6897 0 R (page.139) 6906 0 R (page.14) 5570 0 R (page.140) 6910 0 R (page.141) 6914 0 R (page.142) 6918 0 R]
+/Limits [(page.138) (page.142)]
 >> endobj
 18035 0 obj <<
-/Names [(msdfs) 3819 0 R (mulitldapcfg) 6432 0 R (multimodule) 10105 0 R (natconchoices) 11433 0 R (nestedgrpmgmgt) 7802 0 R (netbiosnamesgrp) 10893 0 R]
-/Limits [(msdfs) (netbiosnamesgrp)]
+/Names [(page.143) 6923 0 R (page.144) 6927 0 R (page.145) 6931 0 R (page.146) 6935 0 R (page.147) 6946 0 R (page.148) 6953 0 R]
+/Limits [(page.143) (page.148)]
 >> endobj
 18036 0 obj <<
-/Names [(netdiscuss) 6447 0 R (netmisc1) 7969 0 R (nombexample) 7073 0 R (oldtdbfiledesc) 11344 0 R (oldupdatenotes) 6964 0 R (optional) 6948 0 R]
-/Limits [(netdiscuss) (optional)]
+/Names [(page.149) 6960 0 R (page.15) 5575 0 R (page.150) 6967 0 R (page.151) 6972 0 R (page.152) 6979 0 R (page.153) 6989 0 R]
+/Limits [(page.149) (page.153)]
 >> endobj
 18037 0 obj <<
-/Names [(overridesettings) 9255 0 R (page.1) 5458 0 R (page.10) 5541 0 R (page.100) 6509 0 R (page.101) 6514 0 R (page.102) 6518 0 R]
-/Limits [(overridesettings) (page.102)]
+/Names [(page.154) 6993 0 R (page.155) 6998 0 R (page.156) 7003 0 R (page.157) 7007 0 R (page.158) 7012 0 R (page.159) 7021 0 R]
+/Limits [(page.154) (page.159)]
 >> endobj
 18038 0 obj <<
-/Names [(page.103) 6524 0 R (page.104) 6530 0 R (page.105) 6538 0 R (page.106) 6554 0 R (page.107) 6565 0 R (page.108) 6571 0 R]
-/Limits [(page.103) (page.108)]
+/Names [(page.16) 5584 0 R (page.160) 7028 0 R (page.161) 7033 0 R (page.162) 7037 0 R (page.163) 7042 0 R (page.164) 7048 0 R]
+/Limits [(page.16) (page.164)]
 >> endobj
 18039 0 obj <<
-/Names [(page.109) 6584 0 R (page.11) 5550 0 R (page.110) 6590 0 R (page.111) 6597 0 R (page.112) 6611 0 R (page.113) 6620 0 R]
-/Limits [(page.109) (page.113)]
+/Names [(page.165) 7064 0 R (page.166) 7085 0 R (page.167) 7098 0 R (page.168) 7103 0 R (page.169) 7113 0 R (page.17) 5594 0 R]
+/Limits [(page.165) (page.17)]
 >> endobj
 18040 0 obj <<
-/Names [(page.114) 6627 0 R (page.115) 6631 0 R (page.116) 6638 0 R (page.117) 6643 0 R (page.118) 6651 0 R (page.119) 6659 0 R]
-/Limits [(page.114) (page.119)]
+/Names [(page.170) 7125 0 R (page.171) 7135 0 R (page.172) 7146 0 R (page.173) 7152 0 R (page.174) 7158 0 R (page.175) 7164 0 R]
+/Limits [(page.170) (page.175)]
 >> endobj
 18041 0 obj <<
-/Names [(page.12) 5557 0 R (page.120) 6664 0 R (page.121) 6668 0 R (page.122) 6677 0 R (page.123) 6686 0 R (page.124) 6703 0 R]
-/Limits [(page.12) (page.124)]
+/Names [(page.176) 7169 0 R (page.177) 7182 0 R (page.178) 7187 0 R (page.179) 7192 0 R (page.18) 5602 0 R (page.180) 7200 0 R]
+/Limits [(page.176) (page.180)]
 >> endobj
 18042 0 obj <<
-/Names [(page.125) 6716 0 R (page.126) 6739 0 R (page.127) 6744 0 R (page.128) 6756 0 R (page.129) 6772 0 R (page.13) 5566 0 R]
-/Limits [(page.125) (page.13)]
+/Names [(page.181) 7215 0 R (page.182) 7222 0 R (page.183) 7229 0 R (page.184) 7238 0 R (page.185) 7246 0 R (page.186) 7251 0 R]
+/Limits [(page.181) (page.186)]
 >> endobj
 18043 0 obj <<
-/Names [(page.130) 6784 0 R (page.131) 6801 0 R (page.132) 6812 0 R (page.133) 6826 0 R (page.134) 6839 0 R (page.135) 6856 0 R]
-/Limits [(page.130) (page.135)]
+/Names [(page.187) 7255 0 R (page.188) 7260 0 R (page.189) 7268 0 R (page.19) 5624 0 R (page.190) 7277 0 R (page.191) 7284 0 R]
+/Limits [(page.187) (page.191)]
 >> endobj
 18044 0 obj <<
-/Names [(page.136) 6871 0 R (page.137) 6885 0 R (page.138) 6898 0 R (page.139) 6907 0 R (page.14) 5570 0 R (page.140) 6911 0 R]
-/Limits [(page.136) (page.140)]
+/Names [(page.192) 7297 0 R (page.193) 7310 0 R (page.194) 7318 0 R (page.195) 7327 0 R (page.196) 7337 0 R (page.197) 7342 0 R]
+/Limits [(page.192) (page.197)]
 >> endobj
 18045 0 obj <<
-/Names [(page.141) 6915 0 R (page.142) 6919 0 R (page.143) 6924 0 R (page.144) 6928 0 R (page.145) 6932 0 R (page.146) 6936 0 R]
-/Limits [(page.141) (page.146)]
+/Names [(page.198) 7348 0 R (page.199) 7354 0 R (page.2) 5465 0 R (page.20) 5632 0 R (page.200) 7358 0 R (page.201) 7373 0 R]
+/Limits [(page.198) (page.201)]
 >> endobj
 18046 0 obj <<
-/Names [(page.147) 6947 0 R (page.148) 6954 0 R (page.149) 6961 0 R (page.15) 5575 0 R (page.150) 6968 0 R (page.151) 6973 0 R]
-/Limits [(page.147) (page.151)]
+/Names [(page.202) 7381 0 R (page.203) 7385 0 R (page.204) 7390 0 R (page.205) 7397 0 R (page.206) 7405 0 R (page.207) 7411 0 R]
+/Limits [(page.202) (page.207)]
 >> endobj
 18047 0 obj <<
-/Names [(page.152) 6980 0 R (page.153) 6990 0 R (page.154) 6994 0 R (page.155) 6999 0 R (page.156) 7004 0 R (page.157) 7008 0 R]
-/Limits [(page.152) (page.157)]
+/Names [(page.208) 7417 0 R (page.209) 7421 0 R (page.21) 5653 0 R (page.210) 7427 0 R (page.211) 7437 0 R (page.212) 7445 0 R]
+/Limits [(page.208) (page.212)]
 >> endobj
 18048 0 obj <<
-/Names [(page.158) 7013 0 R (page.159) 7022 0 R (page.16) 5584 0 R (page.160) 7029 0 R (page.161) 7034 0 R (page.162) 7038 0 R]
-/Limits [(page.158) (page.162)]
+/Names [(page.213) 7452 0 R (page.214) 7468 0 R (page.215) 7474 0 R (page.216) 7480 0 R (page.217) 7485 0 R (page.218) 7489 0 R]
+/Limits [(page.213) (page.218)]
 >> endobj
 18049 0 obj <<
-/Names [(page.163) 7043 0 R (page.164) 7049 0 R (page.165) 7065 0 R (page.166) 7086 0 R (page.167) 7099 0 R (page.168) 7104 0 R]
-/Limits [(page.163) (page.168)]
+/Names [(page.219) 7495 0 R (page.22) 5677 0 R (page.220) 7499 0 R (page.221) 7511 0 R (page.222) 7528 0 R (page.223) 7565 0 R]
+/Limits [(page.219) (page.223)]
 >> endobj
 18050 0 obj <<
-/Names [(page.169) 7114 0 R (page.17) 5594 0 R (page.170) 7126 0 R (page.171) 7136 0 R (page.172) 7147 0 R (page.173) 7153 0 R]
-/Limits [(page.169) (page.173)]
+/Names [(page.224) 7572 0 R (page.225) 7579 0 R (page.226) 7587 0 R (page.227) 7594 0 R (page.228) 7598 0 R (page.229) 7602 0 R]
+/Limits [(page.224) (page.229)]
 >> endobj
 18051 0 obj <<
-/Names [(page.174) 7159 0 R (page.175) 7165 0 R (page.176) 7170 0 R (page.177) 7183 0 R (page.178) 7188 0 R (page.179) 7193 0 R]
-/Limits [(page.174) (page.179)]
+/Names [(page.23) 5687 0 R (page.230) 7612 0 R (page.231) 7629 0 R (page.232) 7649 0 R (page.233) 7656 0 R (page.234) 7662 0 R]
+/Limits [(page.23) (page.234)]
 >> endobj
 18052 0 obj <<
-/Names [(page.18) 5602 0 R (page.180) 7201 0 R (page.181) 7217 0 R (page.182) 7224 0 R (page.183) 7231 0 R (page.184) 7240 0 R]
-/Limits [(page.18) (page.184)]
+/Names [(page.235) 7667 0 R (page.236) 7672 0 R (page.237) 7683 0 R (page.238) 7689 0 R (page.239) 7697 0 R (page.24) 5695 0 R]
+/Limits [(page.235) (page.24)]
 >> endobj
 18053 0 obj <<
-/Names [(page.185) 7248 0 R (page.186) 7253 0 R (page.187) 7257 0 R (page.188) 7262 0 R (page.189) 7270 0 R (page.19) 5624 0 R]
-/Limits [(page.185) (page.19)]
+/Names [(page.240) 7705 0 R (page.241) 7714 0 R (page.242) 7721 0 R (page.243) 7735 0 R (page.244) 7739 0 R (page.245) 7745 0 R]
+/Limits [(page.240) (page.245)]
 >> endobj
 18054 0 obj <<
-/Names [(page.190) 7279 0 R (page.191) 7286 0 R (page.192) 7301 0 R (page.193) 7316 0 R (page.194) 7324 0 R (page.195) 7333 0 R]
-/Limits [(page.190) (page.195)]
+/Names [(page.246) 7751 0 R (page.247) 7756 0 R (page.248) 7760 0 R (page.249) 7766 0 R (page.25) 5732 0 R (page.250) 7770 0 R]
+/Limits [(page.246) (page.250)]
 >> endobj
 18055 0 obj <<
-/Names [(page.196) 7343 0 R (page.197) 7348 0 R (page.198) 7354 0 R (page.199) 7360 0 R (page.2) 5465 0 R (page.20) 5632 0 R]
-/Limits [(page.196) (page.20)]
+/Names [(page.251) 7777 0 R (page.252) 7782 0 R (page.253) 7786 0 R (page.254) 7790 0 R (page.255) 7797 0 R (page.256) 7806 0 R]
+/Limits [(page.251) (page.256)]
 >> endobj
 18056 0 obj <<
-/Names [(page.200) 7364 0 R (page.201) 7379 0 R (page.202) 7387 0 R (page.203) 7391 0 R (page.204) 7396 0 R (page.205) 7403 0 R]
-/Limits [(page.200) (page.205)]
+/Names [(page.257) 7823 0 R (page.258) 7830 0 R (page.259) 7837 0 R (page.26) 5739 0 R (page.260) 7843 0 R (page.261) 7848 0 R]
+/Limits [(page.257) (page.261)]
 >> endobj
 18057 0 obj <<
-/Names [(page.206) 7411 0 R (page.207) 7417 0 R (page.208) 7423 0 R (page.209) 7427 0 R (page.21) 5653 0 R (page.210) 7433 0 R]
-/Limits [(page.206) (page.210)]
+/Names [(page.262) 7852 0 R (page.263) 7857 0 R (page.264) 7862 0 R (page.265) 7867 0 R (page.266) 7872 0 R (page.267) 7877 0 R]
+/Limits [(page.262) (page.267)]
 >> endobj
 18058 0 obj <<
-/Names [(page.211) 7443 0 R (page.212) 7451 0 R (page.213) 7458 0 R (page.214) 7474 0 R (page.215) 7480 0 R (page.216) 7486 0 R]
-/Limits [(page.211) (page.216)]
+/Names [(page.268) 7881 0 R (page.269) 7886 0 R (page.27) 5745 0 R (page.270) 7891 0 R (page.271) 7897 0 R (page.272) 7904 0 R]
+/Limits [(page.268) (page.272)]
 >> endobj
 18059 0 obj <<
-/Names [(page.217) 7491 0 R (page.218) 7495 0 R (page.219) 7501 0 R (page.22) 5677 0 R (page.220) 7505 0 R (page.221) 7517 0 R]
-/Limits [(page.217) (page.221)]
+/Names [(page.273) 7913 0 R (page.274) 7917 0 R (page.275) 7922 0 R (page.276) 7926 0 R (page.277) 7933 0 R (page.278) 7937 0 R]
+/Limits [(page.273) (page.278)]
 >> endobj
 18060 0 obj <<
-/Names [(page.222) 7534 0 R (page.223) 7571 0 R (page.224) 7578 0 R (page.225) 7585 0 R (page.226) 7593 0 R (page.227) 7600 0 R]
-/Limits [(page.222) (page.227)]
+/Names [(page.279) 7942 0 R (page.28) 5752 0 R (page.280) 7949 0 R (page.281) 7955 0 R (page.282) 7962 0 R (page.283) 7966 0 R]
+/Limits [(page.279) (page.283)]
 >> endobj
 18061 0 obj <<
-/Names [(page.228) 7604 0 R (page.229) 7608 0 R (page.23) 5687 0 R (page.230) 7618 0 R (page.231) 7637 0 R (page.232) 7660 0 R]
-/Limits [(page.228) (page.232)]
+/Names [(page.284) 7971 0 R (page.285) 7980 0 R (page.286) 7984 0 R (page.287) 7988 0 R (page.288) 7992 0 R (page.289) 7999 0 R]
+/Limits [(page.284) (page.289)]
 >> endobj
 18062 0 obj <<
-/Names [(page.233) 7667 0 R (page.234) 7673 0 R (page.235) 7678 0 R (page.236) 7683 0 R (page.237) 7694 0 R (page.238) 7700 0 R]
-/Limits [(page.233) (page.238)]
+/Names [(page.29) 5775 0 R (page.290) 8017 0 R (page.291) 8025 0 R (page.292) 8048 0 R (page.293) 8054 0 R (page.294) 8077 0 R]
+/Limits [(page.29) (page.294)]
 >> endobj
 18063 0 obj <<
-/Names [(page.239) 7708 0 R (page.24) 5695 0 R (page.240) 7716 0 R (page.241) 7725 0 R (page.242) 7732 0 R (page.243) 7746 0 R]
-/Limits [(page.239) (page.243)]
+/Names [(page.295) 8089 0 R (page.296) 8112 0 R (page.297) 8118 0 R (page.298) 8127 0 R (page.299) 8135 0 R (page.3) 5471 0 R]
+/Limits [(page.295) (page.3)]
 >> endobj
 18064 0 obj <<
-/Names [(page.244) 7750 0 R (page.245) 7756 0 R (page.246) 7762 0 R (page.247) 7767 0 R (page.248) 7771 0 R (page.249) 7777 0 R]
-/Limits [(page.244) (page.249)]
+/Names [(page.30) 5807 0 R (page.300) 8156 0 R (page.301) 8163 0 R (page.302) 8168 0 R (page.303) 8175 0 R (page.304) 8181 0 R]
+/Limits [(page.30) (page.304)]
 >> endobj
 18065 0 obj <<
-/Names [(page.25) 5732 0 R (page.250) 7781 0 R (page.251) 7788 0 R (page.252) 7793 0 R (page.253) 7797 0 R (page.254) 7801 0 R]
-/Limits [(page.25) (page.254)]
+/Names [(page.305) 8185 0 R (page.306) 8190 0 R (page.307) 8196 0 R (page.308) 8201 0 R (page.309) 8209 0 R (page.31) 5816 0 R]
+/Limits [(page.305) (page.31)]
 >> endobj
 18066 0 obj <<
-/Names [(page.255) 7808 0 R (page.256) 7817 0 R (page.257) 7834 0 R (page.258) 7841 0 R (page.259) 7848 0 R (page.26) 5739 0 R]
-/Limits [(page.255) (page.26)]
+/Names [(page.310) 8213 0 R (page.311) 8217 0 R (page.312) 8221 0 R (page.313) 8226 0 R (page.314) 8232 0 R (page.315) 8238 0 R]
+/Limits [(page.310) (page.315)]
 >> endobj
 18067 0 obj <<
-/Names [(page.260) 7854 0 R (page.261) 7859 0 R (page.262) 7863 0 R (page.263) 7868 0 R (page.264) 7873 0 R (page.265) 7878 0 R]
-/Limits [(page.260) (page.265)]
+/Names [(page.316) 8247 0 R (page.317) 8253 0 R (page.318) 8267 0 R (page.319) 8272 0 R (page.32) 5824 0 R (page.320) 8282 0 R]
+/Limits [(page.316) (page.320)]
 >> endobj
 18068 0 obj <<
-/Names [(page.266) 7883 0 R (page.267) 7888 0 R (page.268) 7892 0 R (page.269) 7897 0 R (page.27) 5745 0 R (page.270) 7902 0 R]
-/Limits [(page.266) (page.270)]
+/Names [(page.321) 8294 0 R (page.322) 8299 0 R (page.323) 8304 0 R (page.324) 8313 0 R (page.325) 8320 0 R (page.326) 8327 0 R]
+/Limits [(page.321) (page.326)]
 >> endobj
 18069 0 obj <<
-/Names [(page.271) 7908 0 R (page.272) 7915 0 R (page.273) 7924 0 R (page.274) 7928 0 R (page.275) 7933 0 R (page.276) 7937 0 R]
-/Limits [(page.271) (page.276)]
+/Names [(page.327) 8335 0 R (page.328) 8341 0 R (page.329) 8346 0 R (page.33) 5834 0 R (page.330) 8350 0 R (page.331) 8355 0 R]
+/Limits [(page.327) (page.331)]
 >> endobj
 18070 0 obj <<
-/Names [(page.277) 7944 0 R (page.278) 7948 0 R (page.279) 7953 0 R (page.28) 5752 0 R (page.280) 7960 0 R (page.281) 7966 0 R]
-/Limits [(page.277) (page.281)]
+/Names [(page.332) 8359 0 R (page.333) 8371 0 R (page.334) 8377 0 R (page.335) 8383 0 R (page.336) 8392 0 R (page.337) 8398 0 R]
+/Limits [(page.332) (page.337)]
 >> endobj
 18071 0 obj <<
-/Names [(page.282) 7973 0 R (page.283) 7977 0 R (page.284) 7982 0 R (page.285) 7991 0 R (page.286) 7995 0 R (page.287) 7999 0 R]
-/Limits [(page.282) (page.287)]
+/Names [(page.338) 8408 0 R (page.339) 8416 0 R (page.34) 5867 0 R (page.340) 8420 0 R (page.341) 8424 0 R (page.342) 8429 0 R]
+/Limits [(page.338) (page.342)]
 >> endobj
 18072 0 obj <<
-/Names [(page.288) 8003 0 R (page.289) 8010 0 R (page.29) 5775 0 R (page.290) 8028 0 R (page.291) 8036 0 R (page.292) 8059 0 R]
-/Limits [(page.288) (page.292)]
+/Names [(page.343) 8434 0 R (page.344) 8439 0 R (page.345) 8444 0 R (page.346) 8448 0 R (page.347) 8455 0 R (page.348) 8462 0 R]
+/Limits [(page.343) (page.348)]
 >> endobj
 18073 0 obj <<
-/Names [(page.293) 8065 0 R (page.294) 8088 0 R (page.295) 8100 0 R (page.296) 8123 0 R (page.297) 8129 0 R (page.298) 8138 0 R]
-/Limits [(page.293) (page.298)]
+/Names [(page.349) 8469 0 R (page.35) 5875 0 R (page.350) 8474 0 R (page.351) 8482 0 R (page.352) 8496 0 R (page.353) 8515 0 R]
+/Limits [(page.349) (page.353)]
 >> endobj
 18074 0 obj <<
-/Names [(page.299) 8146 0 R (page.3) 5471 0 R (page.30) 5807 0 R (page.300) 8167 0 R (page.301) 8174 0 R (page.302) 8179 0 R]
-/Limits [(page.299) (page.302)]
+/Names [(page.354) 8519 0 R (page.355) 8523 0 R (page.356) 8528 0 R (page.357) 8535 0 R (page.358) 8545 0 R (page.359) 8555 0 R]
+/Limits [(page.354) (page.359)]
 >> endobj
 18075 0 obj <<
-/Names [(page.303) 8186 0 R (page.304) 8192 0 R (page.305) 8196 0 R (page.306) 8201 0 R (page.307) 8207 0 R (page.308) 8212 0 R]
-/Limits [(page.303) (page.308)]
+/Names [(page.36) 5881 0 R (page.360) 8560 0 R (page.361) 8564 0 R (page.362) 8571 0 R (page.363) 8582 0 R (page.364) 8594 0 R]
+/Limits [(page.36) (page.364)]
 >> endobj
 18076 0 obj <<
-/Names [(page.309) 8220 0 R (page.31) 5816 0 R (page.310) 8224 0 R (page.311) 8228 0 R (page.312) 8232 0 R (page.313) 8237 0 R]
-/Limits [(page.309) (page.313)]
+/Names [(page.365) 8603 0 R (page.366) 8611 0 R (page.367) 8619 0 R (page.368) 8627 0 R (page.369) 8632 0 R (page.37) 5893 0 R]
+/Limits [(page.365) (page.37)]
 >> endobj
 18077 0 obj <<
-/Names [(page.314) 8243 0 R (page.315) 8249 0 R (page.316) 8258 0 R (page.317) 8264 0 R (page.318) 8280 0 R (page.319) 8285 0 R]
-/Limits [(page.314) (page.319)]
+/Names [(page.370) 8639 0 R (page.371) 8645 0 R (page.372) 8652 0 R (page.373) 8665 0 R (page.374) 8670 0 R (page.375) 8676 0 R]
+/Limits [(page.370) (page.375)]
 >> endobj
 18078 0 obj <<
-/Names [(page.32) 5824 0 R (page.320) 8295 0 R (page.321) 8307 0 R (page.322) 8312 0 R (page.323) 8317 0 R (page.324) 8326 0 R]
-/Limits [(page.32) (page.324)]
+/Names [(page.376) 8682 0 R (page.377) 8689 0 R (page.378) 8694 0 R (page.379) 8700 0 R (page.38) 5907 0 R (page.380) 8707 0 R]
+/Limits [(page.376) (page.380)]
 >> endobj
 18079 0 obj <<
-/Names [(page.325) 8333 0 R (page.326) 8340 0 R (page.327) 8348 0 R (page.328) 8354 0 R (page.329) 8359 0 R (page.33) 5834 0 R]
-/Limits [(page.325) (page.33)]
+/Names [(page.381) 8720 0 R (page.382) 8729 0 R (page.383) 8734 0 R (page.384) 8739 0 R (page.385) 8745 0 R (page.386) 8759 0 R]
+/Limits [(page.381) (page.386)]
 >> endobj
 18080 0 obj <<
-/Names [(page.330) 8363 0 R (page.331) 8368 0 R (page.332) 8372 0 R (page.333) 8384 0 R (page.334) 8390 0 R (page.335) 8396 0 R]
-/Limits [(page.330) (page.335)]
+/Names [(page.387) 8776 0 R (page.388) 8781 0 R (page.389) 8786 0 R (page.39) 5946 0 R (page.390) 8790 0 R (page.391) 8797 0 R]
+/Limits [(page.387) (page.391)]
 >> endobj
 18081 0 obj <<
-/Names [(page.336) 8405 0 R (page.337) 8411 0 R (page.338) 8421 0 R (page.339) 8429 0 R (page.34) 5867 0 R (page.340) 8433 0 R]
-/Limits [(page.336) (page.340)]
+/Names [(page.392) 8808 0 R (page.393) 8844 0 R (page.394) 8853 0 R (page.395) 8859 0 R (page.396) 8863 0 R (page.397) 8870 0 R]
+/Limits [(page.392) (page.397)]
 >> endobj
 18082 0 obj <<
-/Names [(page.341) 8437 0 R (page.342) 8442 0 R (page.343) 8447 0 R (page.344) 8452 0 R (page.345) 8457 0 R (page.346) 8461 0 R]
-/Limits [(page.341) (page.346)]
+/Names [(page.398) 8878 0 R (page.399) 8887 0 R (page.4) 5481 0 R (page.40) 5985 0 R (page.400) 8891 0 R (page.401) 8902 0 R]
+/Limits [(page.398) (page.401)]
 >> endobj
 18083 0 obj <<
-/Names [(page.347) 8468 0 R (page.348) 8475 0 R (page.349) 8482 0 R (page.35) 5875 0 R (page.350) 8487 0 R (page.351) 8495 0 R]
-/Limits [(page.347) (page.351)]
+/Names [(page.402) 8906 0 R (page.403) 8913 0 R (page.404) 8920 0 R (page.405) 8940 0 R (page.406) 8944 0 R (page.407) 8949 0 R]
+/Limits [(page.402) (page.407)]
 >> endobj
 18084 0 obj <<
-/Names [(page.352) 8509 0 R (page.353) 8528 0 R (page.354) 8532 0 R (page.355) 8536 0 R (page.356) 8541 0 R (page.357) 8548 0 R]
-/Limits [(page.352) (page.357)]
+/Names [(page.408) 8956 0 R (page.409) 8965 0 R (page.41) 6023 0 R (page.410) 8970 0 R (page.411) 8975 0 R (page.412) 8980 0 R]
+/Limits [(page.408) (page.412)]
 >> endobj
 18085 0 obj <<
-/Names [(page.358) 8558 0 R (page.359) 8568 0 R (page.36) 5881 0 R (page.360) 8573 0 R (page.361) 8577 0 R (page.362) 8584 0 R]
-/Limits [(page.358) (page.362)]
+/Names [(page.413) 8985 0 R (page.414) 8990 0 R (page.415) 8994 0 R (page.416) 8999 0 R (page.417) 9005 0 R (page.418) 9010 0 R]
+/Limits [(page.413) (page.418)]
 >> endobj
 18086 0 obj <<
-/Names [(page.363) 8595 0 R (page.364) 8607 0 R (page.365) 8616 0 R (page.366) 8624 0 R (page.367) 8632 0 R (page.368) 8640 0 R]
-/Limits [(page.363) (page.368)]
+/Names [(page.419) 9015 0 R (page.42) 6030 0 R (page.420) 9020 0 R (page.421) 9026 0 R (page.422) 9036 0 R (page.423) 9046 0 R]
+/Limits [(page.419) (page.423)]
 >> endobj
 18087 0 obj <<
-/Names [(page.369) 8645 0 R (page.37) 5893 0 R (page.370) 8652 0 R (page.371) 8658 0 R (page.372) 8665 0 R (page.373) 8679 0 R]
-/Limits [(page.369) (page.373)]
+/Names [(page.424) 9057 0 R (page.425) 9062 0 R (page.426) 9073 0 R (page.427) 9088 0 R (page.428) 9097 0 R (page.429) 9102 0 R]
+/Limits [(page.424) (page.429)]
 >> endobj
 18088 0 obj <<
-/Names [(page.374) 8684 0 R (page.375) 8690 0 R (page.376) 8696 0 R (page.377) 8703 0 R (page.378) 8708 0 R (page.379) 8714 0 R]
-/Limits [(page.374) (page.379)]
+/Names [(page.43) 6034 0 R (page.430) 9107 0 R (page.431) 9111 0 R (page.432) 9116 0 R (page.433) 9121 0 R (page.434) 9125 0 R]
+/Limits [(page.43) (page.434)]
 >> endobj
 18089 0 obj <<
-/Names [(page.38) 5907 0 R (page.380) 8721 0 R (page.381) 8734 0 R (page.382) 8743 0 R (page.383) 8748 0 R (page.384) 8753 0 R]
-/Limits [(page.38) (page.384)]
+/Names [(page.435) 9132 0 R (page.436) 9139 0 R (page.437) 9148 0 R (page.438) 9156 0 R (page.439) 9164 0 R (page.44) 6039 0 R]
+/Limits [(page.435) (page.44)]
 >> endobj
 18090 0 obj <<
-/Names [(page.385) 8759 0 R (page.386) 8773 0 R (page.387) 8790 0 R (page.388) 8795 0 R (page.389) 8800 0 R (page.39) 5946 0 R]
-/Limits [(page.385) (page.39)]
+/Names [(page.440) 9168 0 R (page.441) 9176 0 R (page.442) 9183 0 R (page.443) 9192 0 R (page.444) 9196 0 R (page.445) 9203 0 R]
+/Limits [(page.440) (page.445)]
 >> endobj
 18091 0 obj <<
-/Names [(page.390) 8804 0 R (page.391) 8811 0 R (page.392) 8822 0 R (page.393) 8858 0 R (page.394) 8867 0 R (page.395) 8873 0 R]
-/Limits [(page.390) (page.395)]
+/Names [(page.446) 9211 0 R (page.447) 9219 0 R (page.448) 9226 0 R (page.449) 9246 0 R (page.45) 6048 0 R (page.450) 9277 0 R]
+/Limits [(page.446) (page.450)]
 >> endobj
 18092 0 obj <<
-/Names [(page.396) 8877 0 R (page.397) 8884 0 R (page.398) 8892 0 R (page.399) 8901 0 R (page.4) 5481 0 R (page.40) 5985 0 R]
-/Limits [(page.396) (page.40)]
+/Names [(page.451) 9284 0 R (page.452) 9294 0 R (page.453) 9300 0 R (page.454) 9307 0 R (page.455) 9314 0 R (page.456) 9321 0 R]
+/Limits [(page.451) (page.456)]
 >> endobj
 18093 0 obj <<
-/Names [(page.400) 8905 0 R (page.401) 8916 0 R (page.402) 8920 0 R (page.403) 8927 0 R (page.404) 8934 0 R (page.405) 8954 0 R]
-/Limits [(page.400) (page.405)]
+/Names [(page.457) 9328 0 R (page.458) 9337 0 R (page.459) 9345 0 R (page.46) 6053 0 R (page.460) 9351 0 R (page.461) 9356 0 R]
+/Limits [(page.457) (page.461)]
 >> endobj
 18094 0 obj <<
-/Names [(page.406) 8958 0 R (page.407) 8963 0 R (page.408) 8970 0 R (page.409) 8979 0 R (page.41) 6023 0 R (page.410) 8984 0 R]
-/Limits [(page.406) (page.410)]
+/Names [(page.462) 9363 0 R (page.463) 9368 0 R (page.464) 9373 0 R (page.465) 9379 0 R (page.466) 9388 0 R (page.467) 9397 0 R]
+/Limits [(page.462) (page.467)]
 >> endobj
 18095 0 obj <<
-/Names [(page.411) 8989 0 R (page.412) 8994 0 R (page.413) 8999 0 R (page.414) 9004 0 R (page.415) 9008 0 R (page.416) 9013 0 R]
-/Limits [(page.411) (page.416)]
+/Names [(page.468) 9409 0 R (page.469) 9419 0 R (page.47) 6061 0 R (page.470) 9428 0 R (page.471) 9435 0 R (page.472) 9440 0 R]
+/Limits [(page.468) (page.472)]
 >> endobj
 18096 0 obj <<
-/Names [(page.417) 9019 0 R (page.418) 9024 0 R (page.419) 9029 0 R (page.42) 6030 0 R (page.420) 9034 0 R (page.421) 9040 0 R]
-/Limits [(page.417) (page.421)]
+/Names [(page.473) 9444 0 R (page.474) 9449 0 R (page.475) 9455 0 R (page.476) 9461 0 R (page.477) 9467 0 R (page.478) 9477 0 R]
+/Limits [(page.473) (page.478)]
 >> endobj
 18097 0 obj <<
-/Names [(page.422) 9050 0 R (page.423) 9060 0 R (page.424) 9071 0 R (page.425) 9076 0 R (page.426) 9087 0 R (page.427) 9102 0 R]
-/Limits [(page.422) (page.427)]
+/Names [(page.479) 9483 0 R (page.48) 6069 0 R (page.480) 9490 0 R (page.481) 9506 0 R (page.482) 9523 0 R (page.483) 9534 0 R]
+/Limits [(page.479) (page.483)]
 >> endobj
 18098 0 obj <<
-/Names [(page.428) 9111 0 R (page.429) 9116 0 R (page.43) 6034 0 R (page.430) 9121 0 R (page.431) 9125 0 R (page.432) 9130 0 R]
-/Limits [(page.428) (page.432)]
+/Names [(page.484) 9545 0 R (page.485) 9554 0 R (page.486) 9564 0 R (page.487) 9571 0 R (page.488) 9578 0 R (page.489) 9586 0 R]
+/Limits [(page.484) (page.489)]
 >> endobj
 18099 0 obj <<
-/Names [(page.433) 9135 0 R (page.434) 9139 0 R (page.435) 9146 0 R (page.436) 9153 0 R (page.437) 9162 0 R (page.438) 9170 0 R]
-/Limits [(page.433) (page.438)]
+/Names [(page.49) 6077 0 R (page.490) 9594 0 R (page.491) 9602 0 R (page.492) 9632 0 R (page.493) 9636 0 R (page.494) 9642 0 R]
+/Limits [(page.49) (page.494)]
 >> endobj
 18100 0 obj <<
-/Names [(page.439) 9178 0 R (page.44) 6039 0 R (page.440) 9182 0 R (page.441) 9190 0 R (page.442) 9197 0 R (page.443) 9206 0 R]
-/Limits [(page.439) (page.443)]
+/Names [(page.495) 9649 0 R (page.496) 9654 0 R (page.497) 9659 0 R (page.498) 9664 0 R (page.499) 9669 0 R (page.5) 5498 0 R]
+/Limits [(page.495) (page.5)]
 >> endobj
 18101 0 obj <<
-/Names [(page.444) 9210 0 R (page.445) 9217 0 R (page.446) 9225 0 R (page.447) 9233 0 R (page.448) 9240 0 R (page.449) 9259 0 R]
-/Limits [(page.444) (page.449)]
+/Names [(page.50) 6094 0 R (page.500) 9675 0 R (page.501) 9680 0 R (page.502) 9686 0 R (page.503) 9696 0 R (page.504) 9705 0 R]
+/Limits [(page.50) (page.504)]
 >> endobj
 18102 0 obj <<
-/Names [(page.45) 6048 0 R (page.450) 9288 0 R (page.451) 9295 0 R (page.452) 9305 0 R (page.453) 9311 0 R (page.454) 9317 0 R]
-/Limits [(page.45) (page.454)]
+/Names [(page.505) 9712 0 R (page.506) 9717 0 R (page.507) 9727 0 R (page.508) 9732 0 R (page.509) 9738 0 R (page.51) 6102 0 R]
+/Limits [(page.505) (page.51)]
 >> endobj
 18103 0 obj <<
-/Names [(page.455) 9325 0 R (page.456) 9332 0 R (page.457) 9340 0 R (page.458) 9347 0 R (page.459) 9356 0 R (page.46) 6053 0 R]
-/Limits [(page.455) (page.46)]
+/Names [(page.510) 9743 0 R (page.511) 9749 0 R (page.512) 9755 0 R (page.513) 9762 0 R (page.514) 9768 0 R (page.515) 9775 0 R]
+/Limits [(page.510) (page.515)]
 >> endobj
 18104 0 obj <<
-/Names [(page.460) 9362 0 R (page.461) 9367 0 R (page.462) 9374 0 R (page.463) 9379 0 R (page.464) 9384 0 R (page.465) 9390 0 R]
-/Limits [(page.460) (page.465)]
+/Names [(page.516) 9779 0 R (page.517) 9787 0 R (page.518) 9793 0 R (page.519) 9801 0 R (page.52) 6115 0 R (page.520) 9809 0 R]
+/Limits [(page.516) (page.520)]
 >> endobj
 18105 0 obj <<
-/Names [(page.466) 9399 0 R (page.467) 9408 0 R (page.468) 9420 0 R (page.469) 9430 0 R (page.47) 6061 0 R (page.470) 9439 0 R]
-/Limits [(page.466) (page.470)]
+/Names [(page.521) 9818 0 R (page.522) 9825 0 R (page.523) 9843 0 R (page.524) 9851 0 R (page.525) 9868 0 R (page.526) 9875 0 R]
+/Limits [(page.521) (page.526)]
 >> endobj
 18106 0 obj <<
-/Names [(page.471) 9446 0 R (page.472) 9451 0 R (page.473) 9455 0 R (page.474) 9460 0 R (page.475) 9466 0 R (page.476) 9472 0 R]
-/Limits [(page.471) (page.476)]
+/Names [(page.527) 9885 0 R (page.528) 9899 0 R (page.529) 9908 0 R (page.53) 6120 0 R (page.530) 9913 0 R (page.531) 9920 0 R]
+/Limits [(page.527) (page.531)]
 >> endobj
 18107 0 obj <<
-/Names [(page.477) 9478 0 R (page.478) 9488 0 R (page.479) 9494 0 R (page.48) 6069 0 R (page.480) 9501 0 R (page.481) 9518 0 R]
-/Limits [(page.477) (page.481)]
+/Names [(page.532) 9926 0 R (page.533) 9932 0 R (page.534) 9937 0 R (page.535) 9944 0 R (page.536) 9948 0 R (page.537) 9955 0 R]
+/Limits [(page.532) (page.537)]
 >> endobj
 18108 0 obj <<
-/Names [(page.482) 9536 0 R (page.483) 9547 0 R (page.484) 9558 0 R (page.485) 9567 0 R (page.486) 9577 0 R (page.487) 9584 0 R]
-/Limits [(page.482) (page.487)]
+/Names [(page.538) 9961 0 R (page.539) 9969 0 R (page.54) 6130 0 R (page.540) 9974 0 R (page.541) 9992 0 R (page.542) 10000 0 R]
+/Limits [(page.538) (page.542)]
 >> endobj
 18109 0 obj <<
-/Names [(page.488) 9591 0 R (page.489) 9599 0 R (page.49) 6077 0 R (page.490) 9607 0 R (page.491) 9615 0 R (page.492) 9644 0 R]
-/Limits [(page.488) (page.492)]
+/Names [(page.543) 10008 0 R (page.544) 10017 0 R (page.545) 10034 0 R (page.546) 10048 0 R (page.547) 10058 0 R (page.548) 10070 0 R]
+/Limits [(page.543) (page.548)]
 >> endobj
 18110 0 obj <<
-/Names [(page.493) 9648 0 R (page.494) 9654 0 R (page.495) 9661 0 R (page.496) 9666 0 R (page.497) 9671 0 R (page.498) 9676 0 R]
-/Limits [(page.493) (page.498)]
+/Names [(page.549) 10077 0 R (page.55) 6135 0 R (page.550) 10085 0 R (page.551) 10109 0 R (page.552) 10114 0 R (page.553) 10119 0 R]
+/Limits [(page.549) (page.553)]
 >> endobj
 18111 0 obj <<
-/Names [(page.499) 9681 0 R (page.5) 5498 0 R (page.50) 6094 0 R (page.500) 9687 0 R (page.501) 9692 0 R (page.502) 9698 0 R]
-/Limits [(page.499) (page.502)]
+/Names [(page.554) 10127 0 R (page.555) 10134 0 R (page.556) 10140 0 R (page.557) 10154 0 R (page.558) 10161 0 R (page.559) 10166 0 R]
+/Limits [(page.554) (page.559)]
 >> endobj
 18112 0 obj <<
-/Names [(page.503) 9708 0 R (page.504) 9717 0 R (page.505) 9724 0 R (page.506) 9729 0 R (page.507) 9739 0 R (page.508) 9744 0 R]
-/Limits [(page.503) (page.508)]
+/Names [(page.56) 6145 0 R (page.560) 10173 0 R (page.561) 10191 0 R (page.562) 10198 0 R (page.563) 10203 0 R (page.564) 10207 0 R]
+/Limits [(page.56) (page.564)]
 >> endobj
 18113 0 obj <<
-/Names [(page.509) 9750 0 R (page.51) 6102 0 R (page.510) 9755 0 R (page.511) 9761 0 R (page.512) 9767 0 R (page.513) 9774 0 R]
-/Limits [(page.509) (page.513)]
+/Names [(page.565) 10211 0 R (page.566) 10217 0 R (page.567) 10224 0 R (page.568) 10230 0 R (page.569) 10236 0 R (page.57) 6153 0 R]
+/Limits [(page.565) (page.57)]
 >> endobj
 18114 0 obj <<
-/Names [(page.514) 9780 0 R (page.515) 9787 0 R (page.516) 9791 0 R (page.517) 9799 0 R (page.518) 9805 0 R (page.519) 9813 0 R]
-/Limits [(page.514) (page.519)]
+/Names [(page.570) 10242 0 R (page.571) 10249 0 R (page.572) 10254 0 R (page.573) 10264 0 R (page.574) 10271 0 R (page.575) 10278 0 R]
+/Limits [(page.570) (page.575)]
 >> endobj
 18115 0 obj <<
-/Names [(page.52) 6115 0 R (page.520) 9821 0 R (page.521) 9830 0 R (page.522) 9837 0 R (page.523) 9855 0 R (page.524) 9863 0 R]
-/Limits [(page.52) (page.524)]
+/Names [(page.576) 10285 0 R (page.577) 10292 0 R (page.578) 10313 0 R (page.579) 10319 0 R (page.58) 6158 0 R (page.580) 10323 0 R]
+/Limits [(page.576) (page.580)]
 >> endobj
 18116 0 obj <<
-/Names [(page.525) 9880 0 R (page.526) 9887 0 R (page.527) 9897 0 R (page.528) 9911 0 R (page.529) 9920 0 R (page.53) 6120 0 R]
-/Limits [(page.525) (page.53)]
+/Names [(page.581) 10330 0 R (page.582) 10335 0 R (page.583) 10342 0 R (page.584) 10346 0 R (page.585) 10356 0 R (page.586) 10360 0 R]
+/Limits [(page.581) (page.586)]
 >> endobj
 18117 0 obj <<
-/Names [(page.530) 9925 0 R (page.531) 9932 0 R (page.532) 9938 0 R (page.533) 9944 0 R (page.534) 9949 0 R (page.535) 9956 0 R]
-/Limits [(page.530) (page.535)]
+/Names [(page.587) 10366 0 R (page.588) 10370 0 R (page.589) 10375 0 R (page.59) 6165 0 R (page.590) 10382 0 R (page.591) 10387 0 R]
+/Limits [(page.587) (page.591)]
 >> endobj
 18118 0 obj <<
-/Names [(page.536) 9960 0 R (page.537) 9967 0 R (page.538) 9973 0 R (page.539) 9981 0 R (page.54) 6130 0 R (page.540) 9986 0 R]
-/Limits [(page.536) (page.540)]
+/Names [(page.592) 10396 0 R (page.593) 10403 0 R (page.594) 10407 0 R (page.595) 10418 0 R (page.596) 10423 0 R (page.597) 10430 0 R]
+/Limits [(page.592) (page.597)]
 >> endobj
 18119 0 obj <<
-/Names [(page.541) 10004 0 R (page.542) 10012 0 R (page.543) 10020 0 R (page.544) 10029 0 R (page.545) 10046 0 R (page.546) 10060 0 R]
-/Limits [(page.541) (page.546)]
+/Names [(page.598) 10437 0 R (page.599) 10443 0 R (page.6) 5506 0 R (page.60) 6170 0 R (page.600) 10447 0 R (page.601) 10451 0 R]
+/Limits [(page.598) (page.601)]
 >> endobj
 18120 0 obj <<
-/Names [(page.547) 10070 0 R (page.548) 10082 0 R (page.549) 10089 0 R (page.55) 6135 0 R (page.550) 10097 0 R (page.551) 10121 0 R]
-/Limits [(page.547) (page.551)]
+/Names [(page.602) 10457 0 R (page.603) 10464 0 R (page.604) 10470 0 R (page.605) 10476 0 R (page.606) 10483 0 R (page.607) 10491 0 R]
+/Limits [(page.602) (page.607)]
 >> endobj
 18121 0 obj <<
-/Names [(page.552) 10126 0 R (page.553) 10131 0 R (page.554) 10139 0 R (page.555) 10146 0 R (page.556) 10152 0 R (page.557) 10166 0 R]
-/Limits [(page.552) (page.557)]
+/Names [(page.608) 10496 0 R (page.609) 10503 0 R (page.61) 6181 0 R (page.610) 10515 0 R (page.611) 10525 0 R (page.612) 10531 0 R]
+/Limits [(page.608) (page.612)]
 >> endobj
 18122 0 obj <<
-/Names [(page.558) 10173 0 R (page.559) 10178 0 R (page.56) 6145 0 R (page.560) 10185 0 R (page.561) 10203 0 R (page.562) 10210 0 R]
-/Limits [(page.558) (page.562)]
+/Names [(page.613) 10541 0 R (page.614) 10552 0 R (page.615) 10558 0 R (page.616) 10566 0 R (page.617) 10572 0 R (page.618) 10580 0 R]
+/Limits [(page.613) (page.618)]
 >> endobj
 18123 0 obj <<
-/Names [(page.563) 10215 0 R (page.564) 10219 0 R (page.565) 10223 0 R (page.566) 10229 0 R (page.567) 10236 0 R (page.568) 10242 0 R]
-/Limits [(page.563) (page.568)]
+/Names [(page.619) 10588 0 R (page.62) 6186 0 R (page.620) 10602 0 R (page.621) 10622 0 R (page.622) 10631 0 R (page.623) 10647 0 R]
+/Limits [(page.619) (page.623)]
 >> endobj
 18124 0 obj <<
-/Names [(page.569) 10248 0 R (page.57) 6153 0 R (page.570) 10254 0 R (page.571) 10261 0 R (page.572) 10266 0 R (page.573) 10276 0 R]
-/Limits [(page.569) (page.573)]
+/Names [(page.624) 10655 0 R (page.625) 10660 0 R (page.626) 10667 0 R (page.627) 10674 0 R (page.628) 10683 0 R (page.629) 10689 0 R]
+/Limits [(page.624) (page.629)]
 >> endobj
 18125 0 obj <<
-/Names [(page.574) 10283 0 R (page.575) 10290 0 R (page.576) 10297 0 R (page.577) 10304 0 R (page.578) 10325 0 R (page.579) 10331 0 R]
-/Limits [(page.574) (page.579)]
+/Names [(page.63) 6192 0 R (page.630) 10695 0 R (page.631) 10700 0 R (page.632) 10704 0 R (page.633) 10712 0 R (page.634) 10716 0 R]
+/Limits [(page.63) (page.634)]
 >> endobj
 18126 0 obj <<
-/Names [(page.58) 6158 0 R (page.580) 10335 0 R (page.581) 10342 0 R (page.582) 10347 0 R (page.583) 10354 0 R (page.584) 10358 0 R]
-/Limits [(page.58) (page.584)]
+/Names [(page.635) 10727 0 R (page.636) 10737 0 R (page.637) 10742 0 R (page.638) 10748 0 R (page.639) 10753 0 R (page.64) 6198 0 R]
+/Limits [(page.635) (page.64)]
 >> endobj
 18127 0 obj <<
-/Names [(page.585) 10368 0 R (page.586) 10372 0 R (page.587) 10378 0 R (page.588) 10382 0 R (page.589) 10387 0 R (page.59) 6165 0 R]
-/Limits [(page.585) (page.59)]
+/Names [(page.640) 10760 0 R (page.641) 10765 0 R (page.642) 10769 0 R (page.643) 10773 0 R (page.644) 10777 0 R (page.645) 10782 0 R]
+/Limits [(page.640) (page.645)]
 >> endobj
 18128 0 obj <<
-/Names [(page.590) 10394 0 R (page.591) 10399 0 R (page.592) 10408 0 R (page.593) 10415 0 R (page.594) 10419 0 R (page.595) 10430 0 R]
-/Limits [(page.590) (page.595)]
+/Names [(page.646) 10787 0 R (page.647) 10793 0 R (page.648) 10797 0 R (page.649) 10802 0 R (page.65) 6206 0 R (page.650) 10808 0 R]
+/Limits [(page.646) (page.650)]
 >> endobj
 18129 0 obj <<
-/Names [(page.596) 10435 0 R (page.597) 10442 0 R (page.598) 10449 0 R (page.599) 10455 0 R (page.6) 5506 0 R (page.60) 6170 0 R]
-/Limits [(page.596) (page.60)]
+/Names [(page.651) 10816 0 R (page.652) 10821 0 R (page.653) 10827 0 R (page.654) 10833 0 R (page.655) 10838 0 R (page.656) 10842 0 R]
+/Limits [(page.651) (page.656)]
 >> endobj
 18130 0 obj <<
-/Names [(page.600) 10459 0 R (page.601) 10463 0 R (page.602) 10469 0 R (page.603) 10476 0 R (page.604) 10482 0 R (page.605) 10488 0 R]
-/Limits [(page.600) (page.605)]
+/Names [(page.657) 10847 0 R (page.658) 10852 0 R (page.659) 10858 0 R (page.66) 6210 0 R (page.660) 10863 0 R (page.661) 10869 0 R]
+/Limits [(page.657) (page.661)]
 >> endobj
 18131 0 obj <<
-/Names [(page.606) 10495 0 R (page.607) 10503 0 R (page.608) 10508 0 R (page.609) 10515 0 R (page.61) 6182 0 R (page.610) 10527 0 R]
-/Limits [(page.606) (page.610)]
+/Names [(page.662) 10878 0 R (page.663) 10886 0 R (page.664) 10890 0 R (page.665) 10896 0 R (page.666) 10900 0 R (page.667) 10907 0 R]
+/Limits [(page.662) (page.667)]
 >> endobj
 18132 0 obj <<
-/Names [(page.611) 10537 0 R (page.612) 10543 0 R (page.613) 10553 0 R (page.614) 10564 0 R (page.615) 10570 0 R (page.616) 10578 0 R]
-/Limits [(page.611) (page.616)]
+/Names [(page.668) 10919 0 R (page.669) 10927 0 R (page.67) 6214 0 R (page.670) 10931 0 R (page.671) 10936 0 R (page.672) 10943 0 R]
+/Limits [(page.668) (page.672)]
 >> endobj
 18133 0 obj <<
-/Names [(page.617) 10584 0 R (page.618) 10592 0 R (page.619) 10600 0 R (page.62) 6187 0 R (page.620) 10614 0 R (page.621) 10634 0 R]
-/Limits [(page.617) (page.621)]
+/Names [(page.673) 10949 0 R (page.674) 10955 0 R (page.675) 10961 0 R (page.676) 10965 0 R (page.677) 10971 0 R (page.678) 10986 0 R]
+/Limits [(page.673) (page.678)]
 >> endobj
 18134 0 obj <<
-/Names [(page.622) 10643 0 R (page.623) 10659 0 R (page.624) 10667 0 R (page.625) 10672 0 R (page.626) 10679 0 R (page.627) 10686 0 R]
-/Limits [(page.622) (page.627)]
+/Names [(page.679) 10996 0 R (page.68) 6221 0 R (page.680) 11002 0 R (page.681) 11008 0 R (page.682) 11015 0 R (page.683) 11023 0 R]
+/Limits [(page.679) (page.683)]
 >> endobj
 18135 0 obj <<
-/Names [(page.628) 10695 0 R (page.629) 10701 0 R (page.63) 6193 0 R (page.630) 10707 0 R (page.631) 10712 0 R (page.632) 10716 0 R]
-/Limits [(page.628) (page.632)]
+/Names [(page.684) 11029 0 R (page.685) 11033 0 R (page.686) 11038 0 R (page.687) 11046 0 R (page.688) 11052 0 R (page.689) 11058 0 R]
+/Limits [(page.684) (page.689)]
 >> endobj
 18136 0 obj <<
-/Names [(page.633) 10724 0 R (page.634) 10728 0 R (page.635) 10739 0 R (page.636) 10749 0 R (page.637) 10754 0 R (page.638) 10760 0 R]
-/Limits [(page.633) (page.638)]
+/Names [(page.69) 6227 0 R (page.690) 11067 0 R (page.691) 11074 0 R (page.692) 11080 0 R (page.693) 11085 0 R (page.694) 11097 0 R]
+/Limits [(page.69) (page.694)]
 >> endobj
 18137 0 obj <<
-/Names [(page.639) 10765 0 R (page.64) 6199 0 R (page.640) 10772 0 R (page.641) 10777 0 R (page.642) 10781 0 R (page.643) 10785 0 R]
-/Limits [(page.639) (page.643)]
+/Names [(page.695) 11101 0 R (page.696) 11105 0 R (page.697) 11112 0 R (page.698) 11118 0 R (page.699) 11157 0 R (page.7) 5512 0 R]
+/Limits [(page.695) (page.7)]
 >> endobj
 18138 0 obj <<
-/Names [(page.644) 10789 0 R (page.645) 10794 0 R (page.646) 10799 0 R (page.647) 10805 0 R (page.648) 10809 0 R (page.649) 10814 0 R]
-/Limits [(page.644) (page.649)]
+/Names [(page.70) 6234 0 R (page.700) 11177 0 R (page.701) 11206 0 R (page.702) 11244 0 R (page.703) 11255 0 R (page.704) 11262 0 R]
+/Limits [(page.70) (page.704)]
 >> endobj
 18139 0 obj <<
-/Names [(page.65) 6207 0 R (page.650) 10820 0 R (page.651) 10828 0 R (page.652) 10833 0 R (page.653) 10839 0 R (page.654) 10845 0 R]
-/Limits [(page.65) (page.654)]
+/Names [(page.705) 11272 0 R (page.706) 11290 0 R (page.707) 11296 0 R (page.708) 11301 0 R (page.709) 11306 0 R (page.71) 6242 0 R]
+/Limits [(page.705) (page.71)]
 >> endobj
 18140 0 obj <<
-/Names [(page.655) 10850 0 R (page.656) 10854 0 R (page.657) 10859 0 R (page.658) 10864 0 R (page.659) 10870 0 R (page.66) 6211 0 R]
-/Limits [(page.655) (page.66)]
+/Names [(page.710) 11310 0 R (page.711) 11314 0 R (page.712) 11318 0 R (page.713) 11326 0 R (page.714) 11336 0 R (page.715) 11345 0 R]
+/Limits [(page.710) (page.715)]
 >> endobj
 18141 0 obj <<
-/Names [(page.660) 10875 0 R (page.661) 10881 0 R (page.662) 10890 0 R (page.663) 10898 0 R (page.664) 10902 0 R (page.665) 10908 0 R]
-/Limits [(page.660) (page.665)]
+/Names [(page.716) 11353 0 R (page.717) 11359 0 R (page.718) 11371 0 R (page.719) 11375 0 R (page.72) 6251 0 R (page.720) 11381 0 R]
+/Limits [(page.716) (page.720)]
 >> endobj
 18142 0 obj <<
-/Names [(page.666) 10912 0 R (page.667) 10919 0 R (page.668) 10931 0 R (page.669) 10939 0 R (page.67) 6215 0 R (page.670) 10943 0 R]
-/Limits [(page.666) (page.670)]
+/Names [(page.721) 11386 0 R (page.722) 11391 0 R (page.723) 11397 0 R (page.724) 11405 0 R (page.725) 11418 0 R (page.726) 11425 0 R]
+/Limits [(page.721) (page.726)]
 >> endobj
 18143 0 obj <<
-/Names [(page.671) 10948 0 R (page.672) 10955 0 R (page.673) 10961 0 R (page.674) 10967 0 R (page.675) 10973 0 R (page.676) 10977 0 R]
-/Limits [(page.671) (page.676)]
+/Names [(page.727) 11430 0 R (page.728) 11434 0 R (page.729) 11439 0 R (page.73) 6259 0 R (page.730) 11445 0 R (page.731) 11451 0 R]
+/Limits [(page.727) (page.731)]
 >> endobj
 18144 0 obj <<
-/Names [(page.677) 10983 0 R (page.678) 10998 0 R (page.679) 11008 0 R (page.68) 6222 0 R (page.680) 11014 0 R (page.681) 11020 0 R]
-/Limits [(page.677) (page.681)]
+/Names [(page.732) 11457 0 R (page.733) 11462 0 R (page.734) 11466 0 R (page.735) 11471 0 R (page.736) 11483 0 R (page.737) 11489 0 R]
+/Limits [(page.732) (page.737)]
 >> endobj
 18145 0 obj <<
-/Names [(page.682) 11027 0 R (page.683) 11035 0 R (page.684) 11041 0 R (page.685) 11045 0 R (page.686) 11050 0 R (page.687) 11058 0 R]
-/Limits [(page.682) (page.687)]
+/Names [(page.738) 11494 0 R (page.739) 11502 0 R (page.74) 6266 0 R (page.740) 11509 0 R (page.741) 11520 0 R (page.742) 11528 0 R]
+/Limits [(page.738) (page.742)]
 >> endobj
 18146 0 obj <<
-/Names [(page.688) 11064 0 R (page.689) 11070 0 R (page.69) 6228 0 R (page.690) 11079 0 R (page.691) 11086 0 R (page.692) 11092 0 R]
-/Limits [(page.688) (page.692)]
+/Names [(page.743) 11540 0 R (page.744) 11545 0 R (page.745) 11553 0 R (page.746) 11565 0 R (page.747) 11578 0 R (page.748) 11588 0 R]
+/Limits [(page.743) (page.748)]
 >> endobj
 18147 0 obj <<
-/Names [(page.693) 11097 0 R (page.694) 11109 0 R (page.695) 11113 0 R (page.696) 11117 0 R (page.697) 11124 0 R (page.698) 11130 0 R]
-/Limits [(page.693) (page.698)]
+/Names [(page.749) 11599 0 R (page.75) 6294 0 R (page.750) 11604 0 R (page.751) 11608 0 R (page.752) 11619 0 R (page.753) 11627 0 R]
+/Limits [(page.749) (page.753)]
 >> endobj
 18148 0 obj <<
-/Names [(page.699) 11169 0 R (page.7) 5512 0 R (page.70) 6235 0 R (page.700) 11189 0 R (page.701) 11218 0 R (page.702) 11256 0 R]
-/Limits [(page.699) (page.702)]
+/Names [(page.754) 11632 0 R (page.755) 11642 0 R (page.756) 11652 0 R (page.757) 11656 0 R (page.758) 11661 0 R (page.759) 11667 0 R]
+/Limits [(page.754) (page.759)]
 >> endobj
 18149 0 obj <<
-/Names [(page.703) 11267 0 R (page.704) 11274 0 R (page.705) 11284 0 R (page.706) 11302 0 R (page.707) 11308 0 R (page.708) 11313 0 R]
-/Limits [(page.703) (page.708)]
+/Names [(page.76) 6305 0 R (page.760) 11675 0 R (page.761) 11685 0 R (page.762) 11696 0 R (page.763) 11701 0 R (page.764) 11706 0 R]
+/Limits [(page.76) (page.764)]
 >> endobj
 18150 0 obj <<
-/Names [(page.709) 11318 0 R (page.71) 6243 0 R (page.710) 11322 0 R (page.711) 11326 0 R (page.712) 11330 0 R (page.713) 11338 0 R]
-/Limits [(page.709) (page.713)]
+/Names [(page.765) 11719 0 R (page.766) 11729 0 R (page.767) 11740 0 R (page.768) 11747 0 R (page.769) 11752 0 R (page.77) 6324 0 R]
+/Limits [(page.765) (page.77)]
 >> endobj
 18151 0 obj <<
-/Names [(page.714) 11348 0 R (page.715) 11357 0 R (page.716) 11365 0 R (page.717) 11371 0 R (page.718) 11383 0 R (page.719) 11387 0 R]
-/Limits [(page.714) (page.719)]
+/Names [(page.770) 11756 0 R (page.771) 11764 0 R (page.772) 11770 0 R (page.773) 11774 0 R (page.774) 11779 0 R (page.775) 11784 0 R]
+/Limits [(page.770) (page.775)]
 >> endobj
 18152 0 obj <<
-/Names [(page.72) 6252 0 R (page.720) 11393 0 R (page.721) 11398 0 R (page.722) 11403 0 R (page.723) 11409 0 R (page.724) 11417 0 R]
-/Limits [(page.72) (page.724)]
+/Names [(page.776) 11789 0 R (page.777) 11794 0 R (page.778) 11800 0 R (page.779) 11806 0 R (page.78) 6329 0 R (page.780) 11810 0 R]
+/Limits [(page.776) (page.780)]
 >> endobj
 18153 0 obj <<
-/Names [(page.725) 11430 0 R (page.726) 11437 0 R (page.727) 11442 0 R (page.728) 11446 0 R (page.729) 11451 0 R (page.73) 6260 0 R]
-/Limits [(page.725) (page.73)]
+/Names [(page.781) 11817 0 R (page.782) 11824 0 R (page.783) 11834 0 R (page.784) 11840 0 R (page.785) 11848 0 R (page.786) 11856 0 R]
+/Limits [(page.781) (page.786)]
 >> endobj
 18154 0 obj <<
-/Names [(page.730) 11457 0 R (page.731) 11463 0 R (page.732) 11469 0 R (page.733) 11474 0 R (page.734) 11478 0 R (page.735) 11483 0 R]
-/Limits [(page.730) (page.735)]
+/Names [(page.787) 11864 0 R (page.788) 11872 0 R (page.789) 11888 0 R (page.79) 6343 0 R (page.790) 11893 0 R (page.791) 11897 0 R]
+/Limits [(page.787) (page.791)]
 >> endobj
 18155 0 obj <<
-/Names [(page.736) 11495 0 R (page.737) 11501 0 R (page.738) 11506 0 R (page.739) 11514 0 R (page.74) 6267 0 R (page.740) 11521 0 R]
-/Limits [(page.736) (page.740)]
+/Names [(page.792) 11903 0 R (page.793) 11908 0 R (page.794) 11917 0 R (page.795) 11926 0 R (page.796) 11932 0 R (page.797) 11938 0 R]
+/Limits [(page.792) (page.797)]
 >> endobj
 18156 0 obj <<
-/Names [(page.741) 11532 0 R (page.742) 11540 0 R (page.743) 11552 0 R (page.744) 11557 0 R (page.745) 11565 0 R (page.746) 11577 0 R]
-/Limits [(page.741) (page.746)]
+/Names [(page.798) 11948 0 R (page.799) 11955 0 R (page.8) 5526 0 R (page.80) 6349 0 R (page.800) 11961 0 R (page.801) 11969 0 R]
+/Limits [(page.798) (page.801)]
 >> endobj
 18157 0 obj <<
-/Names [(page.747) 11590 0 R (page.748) 11600 0 R (page.749) 11611 0 R (page.75) 6295 0 R (page.750) 11616 0 R (page.751) 11620 0 R]
-/Limits [(page.747) (page.751)]
+/Names [(page.802) 11975 0 R (page.803) 11981 0 R (page.804) 11986 0 R (page.805) 11993 0 R (page.806) 11998 0 R (page.807) 12003 0 R]
+/Limits [(page.802) (page.807)]
 >> endobj
 18158 0 obj <<
-/Names [(page.752) 11631 0 R (page.753) 11639 0 R (page.754) 11644 0 R (page.755) 11654 0 R (page.756) 11664 0 R (page.757) 11668 0 R]
-/Limits [(page.752) (page.757)]
+/Names [(page.808) 12011 0 R (page.809) 12017 0 R (page.81) 6354 0 R (page.810) 12022 0 R (page.811) 12029 0 R (page.812) 12034 0 R]
+/Limits [(page.808) (page.812)]
 >> endobj
 18159 0 obj <<
-/Names [(page.758) 11673 0 R (page.759) 11679 0 R (page.76) 6306 0 R (page.760) 11687 0 R (page.761) 11697 0 R (page.762) 11708 0 R]
-/Limits [(page.758) (page.762)]
+/Names [(page.813) 12043 0 R (page.814) 12048 0 R (page.815) 12052 0 R (page.816) 12056 0 R (page.817) 12060 0 R (page.818) 12064 0 R]
+/Limits [(page.813) (page.818)]
 >> endobj
 18160 0 obj <<
-/Names [(page.763) 11713 0 R (page.764) 11718 0 R (page.765) 11731 0 R (page.766) 11741 0 R (page.767) 11752 0 R (page.768) 11759 0 R]
-/Limits [(page.763) (page.768)]
+/Names [(page.819) 12070 0 R (page.82) 6361 0 R (page.820) 12076 0 R (page.821) 12081 0 R (page.822) 12087 0 R (page.823) 12092 0 R]
+/Limits [(page.819) (page.823)]
 >> endobj
 18161 0 obj <<
-/Names [(page.769) 11764 0 R (page.77) 6325 0 R (page.770) 11768 0 R (page.771) 11776 0 R (page.772) 11782 0 R (page.773) 11786 0 R]
-/Limits [(page.769) (page.773)]
+/Names [(page.824) 12098 0 R (page.825) 12108 0 R (page.826) 12118 0 R (page.827) 12122 0 R (page.828) 12130 0 R (page.829) 12138 0 R]
+/Limits [(page.824) (page.829)]
 >> endobj
 18162 0 obj <<
-/Names [(page.774) 11791 0 R (page.775) 11796 0 R (page.776) 11801 0 R (page.777) 11806 0 R (page.778) 11812 0 R (page.779) 11818 0 R]
-/Limits [(page.774) (page.779)]
+/Names [(page.83) 6367 0 R (page.830) 12144 0 R (page.831) 12150 0 R (page.832) 12155 0 R (page.833) 12161 0 R (page.834) 12169 0 R]
+/Limits [(page.83) (page.834)]
 >> endobj
 18163 0 obj <<
-/Names [(page.78) 6330 0 R (page.780) 11822 0 R (page.781) 11829 0 R (page.782) 11836 0 R (page.783) 11846 0 R (page.784) 11852 0 R]
-/Limits [(page.78) (page.784)]
+/Names [(page.835) 12175 0 R (page.836) 12180 0 R (page.837) 12188 0 R (page.838) 12195 0 R (page.839) 12200 0 R (page.84) 6374 0 R]
+/Limits [(page.835) (page.84)]
 >> endobj
 18164 0 obj <<
-/Names [(page.785) 11860 0 R (page.786) 11868 0 R (page.787) 11876 0 R (page.788) 11884 0 R (page.789) 11900 0 R (page.79) 6344 0 R]
-/Limits [(page.785) (page.79)]
+/Names [(page.840) 12205 0 R (page.841) 12209 0 R (page.842) 12213 0 R (page.843) 12349 0 R (page.844) 12450 0 R (page.845) 12606 0 R]
+/Limits [(page.840) (page.845)]
 >> endobj
 18165 0 obj <<
-/Names [(page.790) 11905 0 R (page.791) 11909 0 R (page.792) 11915 0 R (page.793) 11920 0 R (page.794) 11929 0 R (page.795) 11938 0 R]
-/Limits [(page.790) (page.795)]
+/Names [(page.846) 12708 0 R (page.847) 12821 0 R (page.848) 12930 0 R (page.849) 13028 0 R (page.85) 6381 0 R (page.850) 13143 0 R]
+/Limits [(page.846) (page.850)]
 >> endobj
 18166 0 obj <<
-/Names [(page.796) 11944 0 R (page.797) 11950 0 R (page.798) 11960 0 R (page.799) 11967 0 R (page.8) 5526 0 R (page.80) 6350 0 R]
-/Limits [(page.796) (page.80)]
+/Names [(page.851) 13237 0 R (page.852) 13362 0 R (page.853) 13499 0 R (page.854) 13608 0 R (page.855) 13712 0 R (page.856) 13818 0 R]
+/Limits [(page.851) (page.856)]
 >> endobj
 18167 0 obj <<
-/Names [(page.800) 11973 0 R (page.801) 11981 0 R (page.802) 11987 0 R (page.803) 11993 0 R (page.804) 11998 0 R (page.805) 12005 0 R]
-/Limits [(page.800) (page.805)]
+/Names [(page.857) 13933 0 R (page.858) 14038 0 R (page.859) 14159 0 R (page.86) 6387 0 R (page.860) 14270 0 R (page.861) 14406 0 R]
+/Limits [(page.857) (page.861)]
 >> endobj
 18168 0 obj <<
-/Names [(page.806) 12010 0 R (page.807) 12015 0 R (page.808) 12023 0 R (page.809) 12029 0 R (page.81) 6355 0 R (page.810) 12034 0 R]
-/Limits [(page.806) (page.810)]
+/Names [(page.862) 14512 0 R (page.863) 14645 0 R (page.864) 14730 0 R (page.865) 14836 0 R (page.866) 14958 0 R (page.867) 15069 0 R]
+/Limits [(page.862) (page.867)]
 >> endobj
 18169 0 obj <<
-/Names [(page.811) 12041 0 R (page.812) 12046 0 R (page.813) 12055 0 R (page.814) 12060 0 R (page.815) 12064 0 R (page.816) 12068 0 R]
-/Limits [(page.811) (page.816)]
+/Names [(page.868) 15184 0 R (page.869) 15309 0 R (page.87) 6393 0 R (page.870) 15432 0 R (page.871) 15606 0 R (page.872) 15730 0 R]
+/Limits [(page.868) (page.872)]
 >> endobj
 18170 0 obj <<
-/Names [(page.817) 12072 0 R (page.818) 12076 0 R (page.819) 12082 0 R (page.82) 6362 0 R (page.820) 12088 0 R (page.821) 12093 0 R]
-/Limits [(page.817) (page.821)]
+/Names [(page.873) 15866 0 R (page.874) 15970 0 R (page.875) 16080 0 R (page.876) 16239 0 R (page.877) 16358 0 R (page.878) 16452 0 R]
+/Limits [(page.873) (page.878)]
 >> endobj
 18171 0 obj <<
-/Names [(page.822) 12099 0 R (page.823) 12104 0 R (page.824) 12110 0 R (page.825) 12120 0 R (page.826) 12130 0 R (page.827) 12134 0 R]
-/Limits [(page.822) (page.827)]
+/Names [(page.879) 16564 0 R (page.88) 6398 0 R (page.880) 16711 0 R (page.881) 16825 0 R (page.882) 16943 0 R (page.883) 17064 0 R]
+/Limits [(page.879) (page.883)]
 >> endobj
 18172 0 obj <<
-/Names [(page.828) 12142 0 R (page.829) 12150 0 R (page.83) 6368 0 R (page.830) 12156 0 R (page.831) 12162 0 R (page.832) 12167 0 R]
-/Limits [(page.828) (page.832)]
+/Names [(page.884) 17175 0 R (page.885) 17319 0 R (page.886) 17443 0 R (page.887) 17473 0 R (page.89) 6407 0 R (page.9) 5533 0 R]
+/Limits [(page.884) (page.9)]
 >> endobj
 18173 0 obj <<
-/Names [(page.833) 12173 0 R (page.834) 12181 0 R (page.835) 12187 0 R (page.836) 12192 0 R (page.837) 12200 0 R (page.838) 12207 0 R]
-/Limits [(page.833) (page.838)]
+/Names [(page.90) 6413 0 R (page.91) 6430 0 R (page.92) 6442 0 R (page.93) 6451 0 R (page.94) 6459 0 R (page.95) 6466 0 R]
+/Limits [(page.90) (page.95)]
 >> endobj
 18174 0 obj <<
-/Names [(page.839) 12212 0 R (page.84) 6375 0 R (page.840) 12217 0 R (page.841) 12221 0 R (page.842) 12225 0 R (page.843) 12361 0 R]
-/Limits [(page.839) (page.843)]
+/Names [(page.96) 6486 0 R (page.97) 6492 0 R (page.98) 6498 0 R (page.99) 6503 0 R (page.i) 3689 0 R (page.ix) 3811 0 R]
+/Limits [(page.96) (page.ix)]
 >> endobj
 18175 0 obj <<
-/Names [(page.844) 12462 0 R (page.845) 12618 0 R (page.846) 12719 0 R (page.847) 12832 0 R (page.848) 12941 0 R (page.849) 13039 0 R]
-/Limits [(page.844) (page.849)]
+/Names [(page.l) 5233 0 R (page.li) 5272 0 R (page.lii) 5302 0 R (page.liii) 5353 0 R (page.liv) 5386 0 R (page.lix) 5423 0 R]
+/Limits [(page.l) (page.lix)]
 >> endobj
 18176 0 obj <<
-/Names [(page.85) 6382 0 R (page.850) 13154 0 R (page.851) 13248 0 R (page.852) 13373 0 R (page.853) 13510 0 R (page.854) 13619 0 R]
-/Limits [(page.85) (page.854)]
+/Names [(page.lv) 5396 0 R (page.lvi) 5401 0 R (page.lvii) 5409 0 R (page.lviii) 5418 0 R (page.lx) 5431 0 R (page.lxi) 5438 0 R]
+/Limits [(page.lv) (page.lxi)]
 >> endobj
 18177 0 obj <<
-/Names [(page.855) 13723 0 R (page.856) 13829 0 R (page.857) 13943 0 R (page.858) 14049 0 R (page.859) 14170 0 R (page.86) 6388 0 R]
-/Limits [(page.855) (page.86)]
+/Names [(page.lxii) 5447 0 R (page.v) 3697 0 R (page.vi) 3705 0 R (page.vii) 3734 0 R (page.viii) 3774 0 R (page.x) 3845 0 R]
+/Limits [(page.lxii) (page.x)]
 >> endobj
 18178 0 obj <<
-/Names [(page.860) 14281 0 R (page.861) 14417 0 R (page.862) 14523 0 R (page.863) 14656 0 R (page.864) 14741 0 R (page.865) 14847 0 R]
-/Limits [(page.860) (page.865)]
+/Names [(page.xi) 3881 0 R (page.xii) 3922 0 R (page.xiii) 3945 0 R (page.xiv) 3952 0 R (page.xix) 4135 0 R (page.xl) 4962 0 R]
+/Limits [(page.xi) (page.xl)]
 >> endobj
 18179 0 obj <<
-/Names [(page.866) 14969 0 R (page.867) 15080 0 R (page.868) 15195 0 R (page.869) 15320 0 R (page.87) 6394 0 R (page.870) 15443 0 R]
-/Limits [(page.866) (page.870)]
+/Names [(page.xli) 4985 0 R (page.xlii) 4989 0 R (page.xliii) 5010 0 R (page.xliv) 5050 0 R (page.xlix) 5169 0 R (page.xlv) 5086 0 R]
+/Limits [(page.xli) (page.xlv)]
 >> endobj
 18180 0 obj <<
-/Names [(page.871) 15617 0 R (page.872) 15742 0 R (page.873) 15877 0 R (page.874) 15981 0 R (page.875) 16091 0 R (page.876) 16250 0 R]
-/Limits [(page.871) (page.876)]
+/Names [(page.xlvi) 5112 0 R (page.xlvii) 5128 0 R (page.xlviii) 5136 0 R (page.xv) 3981 0 R (page.xvi) 4020 0 R (page.xvii) 4059 0 R]
+/Limits [(page.xlvi) (page.xvii)]
 >> endobj
 18181 0 obj <<
-/Names [(page.877) 16369 0 R (page.878) 16463 0 R (page.879) 16575 0 R (page.88) 6399 0 R (page.880) 16722 0 R (page.881) 16836 0 R]
-/Limits [(page.877) (page.881)]
+/Names [(page.xviii) 4099 0 R (page.xx) 4177 0 R (page.xxi) 4215 0 R (page.xxii) 4254 0 R (page.xxiii) 4294 0 R (page.xxiv) 4330 0 R]
+/Limits [(page.xviii) (page.xxiv)]
 >> endobj
 18182 0 obj <<
-/Names [(page.882) 16954 0 R (page.883) 17075 0 R (page.884) 17186 0 R (page.885) 17330 0 R (page.886) 17454 0 R (page.887) 17484 0 R]
-/Limits [(page.882) (page.887)]
+/Names [(page.xxix) 4534 0 R (page.xxv) 4372 0 R (page.xxvi) 4412 0 R (page.xxvii) 4453 0 R (page.xxviii) 4493 0 R (page.xxx) 4575 0 R]
+/Limits [(page.xxix) (page.xxx)]
 >> endobj
 18183 0 obj <<
-/Names [(page.89) 6408 0 R (page.9) 5533 0 R (page.90) 6414 0 R (page.91) 6431 0 R (page.92) 6443 0 R (page.93) 6452 0 R]
-/Limits [(page.89) (page.93)]
+/Names [(page.xxxi) 4611 0 R (page.xxxii) 4649 0 R (page.xxxiii) 4690 0 R (page.xxxiv) 4730 0 R (page.xxxix) 4922 0 R (page.xxxv) 4771 0 R]
+/Limits [(page.xxxi) (page.xxxv)]
 >> endobj
 18184 0 obj <<
-/Names [(page.94) 6460 0 R (page.95) 6467 0 R (page.96) 6487 0 R (page.97) 6493 0 R (page.98) 6499 0 R (page.99) 6504 0 R]
-/Limits [(page.94) (page.99)]
+/Names [(page.xxxvi) 4810 0 R (page.xxxvii) 4848 0 R (page.xxxviii) 4884 0 R (pam) 3884 0 R (part.1) 42 0 R (part.2) 178 0 R]
+/Limits [(page.xxxvi) (part.2)]
 >> endobj
 18185 0 obj <<
-/Names [(page.i) 3689 0 R (page.ix) 3811 0 R (page.l) 5233 0 R (page.li) 5272 0 R (page.lii) 5302 0 R (page.liii) 5353 0 R]
-/Limits [(page.i) (page.liii)]
+/Names [(part.3) 602 0 R (part.4) 3090 0 R (part.5) 3282 0 R (part.6) 3378 0 R (passdb) 3779 0 R (passdbtech) 7264 0 R]
+/Limits [(part.3) (passdbtech)]
 >> endobj
 18186 0 obj <<
-/Names [(page.liv) 5386 0 R (page.lix) 5423 0 R (page.lv) 5396 0 R (page.lvi) 5401 0 R (page.lvii) 5409 0 R (page.lviii) 5418 0 R]
-/Limits [(page.liv) (page.lviii)]
+/Names [(pdbeditthing) 7359 0 R (pdc-bdc-table) 6389 0 R (pdc-example) 6262 0 R (pdftoepsonusb) 9507 0 R (pdftosocket) 9492 0 R (policycontrols) 7377 0 R]
+/Limits [(pdbeditthing) (policycontrols)]
 >> endobj
 18187 0 obj <<
-/Names [(page.lx) 5431 0 R (page.lxi) 5438 0 R (page.lxii) 5447 0 R (page.v) 3697 0 R (page.vi) 3705 0 R (page.vii) 3734 0 R]
-/Limits [(page.lx) (page.vii)]
+/Names [(post-and-ghost) 9329 0 R (printOptions) 8882 0 R (problems) 3926 0 R (profilemigrn) 10632 0 R (prt-modeset) 9032 0 R (prtdollar) 8916 0 R]
+/Limits [(post-and-ghost) (prtdollar)]
 >> endobj
 18188 0 obj <<
-/Names [(page.viii) 3774 0 R (page.x) 3845 0 R (page.xi) 3881 0 R (page.xii) 3922 0 R (page.xiii) 3945 0 R (page.xiv) 3952 0 R]
-/Limits [(page.viii) (page.xiv)]
+/Names [(ptrsect) 8854 0 R (regkeys) 10685 0 R (remsmb) 7086 0 R (rights) 3814 0 R (root-ask-loop) 9993 0 R (rp-privs) 8171 0 R]
+/Limits [(ptrsect) (rp-privs)]
 >> endobj
 18189 0 obj <<
-/Names [(page.xix) 4135 0 R (page.xl) 4962 0 R (page.xli) 4985 0 R (page.xlii) 4989 0 R (page.xliii) 5010 0 R (page.xliv) 5050 0 R]
-/Limits [(page.xix) (page.xliv)]
+/Names [(s1-config-ldap-tls) 11949 0 R (s1-config-ldap-tls-certs) 11950 0 R (s1-config-ldap-tls-install) 11976 0 R (s1-config-ldap-tls-server) 11964 0 R (s1-int-ldap-tls) 11994 0 R (s1-intro-ldap-tls) 11939 0 R]
+/Limits [(s1-config-ldap-tls) (s1-intro-ldap-tls)]
 >> endobj
 18190 0 obj <<
-/Names [(page.xlix) 5169 0 R (page.xlv) 5086 0 R (page.xlvi) 5112 0 R (page.xlvii) 5128 0 R (page.xlviii) 5136 0 R (page.xv) 3981 0 R]
-/Limits [(page.xlix) (page.xv)]
+/Names [(s1-test-ldap-tls) 11982 0 R (samba-bdc) 3743 0 R (samba-pdc) 3742 0 R (samba-trusted-domain) 8671 0 R (sauronsmbc) 11173 0 R (sbeuseraddn) 7824 0 R]
+/Limits [(s1-test-ldap-tls) (sbeuseraddn)]
 >> endobj
 18191 0 obj <<
-/Names [(page.xvi) 4020 0 R (page.xvii) 4059 0 R (page.xviii) 4099 0 R (page.xx) 4177 0 R (page.xxi) 4215 0 R (page.xxii) 4254 0 R]
-/Limits [(page.xvi) (page.xxii)]
+/Names [(section*.1) 6 0 R (section*.11) 5426 0 R (section*.12) 5432 0 R (section*.13) 5439 0 R (section*.14) 46 0 R (section*.16) 5870 0 R]
+/Limits [(section*.1) (section*.16)]
 >> endobj
 18192 0 obj <<
-/Names [(page.xxiii) 4294 0 R (page.xxiv) 4330 0 R (page.xxix) 4534 0 R (page.xxv) 4372 0 R (page.xxvi) 4412 0 R (page.xxvii) 4453 0 R]
-/Limits [(page.xxiii) (page.xxvii)]
+/Names [(section*.17) 5898 0 R (section*.18) 182 0 R (section*.20) 606 0 R (section*.22) 7375 0 R (section*.23) 7391 0 R (section*.24) 7398 0 R]
+/Limits [(section*.17) (section*.24)]
 >> endobj
 18193 0 obj <<
-/Names [(page.xxviii) 4493 0 R (page.xxx) 4575 0 R (page.xxxi) 4611 0 R (page.xxxii) 4649 0 R (page.xxxiii) 4690 0 R (page.xxxiv) 4730 0 R]
-/Limits [(page.xxviii) (page.xxxiv)]
+/Names [(section*.25) 7400 0 R (section*.26) 7412 0 R (section*.27) 7422 0 R (section*.28) 10325 0 R (section*.29) 10336 0 R (section*.30) 10347 0 R]
+/Limits [(section*.25) (section*.30)]
 >> endobj
 18194 0 obj <<
-/Names [(page.xxxix) 4922 0 R (page.xxxv) 4771 0 R (page.xxxvi) 4810 0 R (page.xxxvii) 4848 0 R (page.xxxviii) 4884 0 R (pam) 3884 0 R]
-/Limits [(page.xxxix) (pam)]
+/Names [(section*.31) 10350 0 R (section*.32) 10361 0 R (section*.33) 10597 0 R (section*.34) 11348 0 R (section*.35) 11354 0 R (section*.36) 11360 0 R]
+/Limits [(section*.31) (section*.36)]
 >> endobj
 18195 0 obj <<
-/Names [(part.1) 42 0 R (part.2) 178 0 R (part.3) 602 0 R (part.4) 3090 0 R (part.5) 3282 0 R (part.6) 3378 0 R]
-/Limits [(part.1) (part.6)]
+/Names [(section*.37) 12072 0 R (section*.38) 12077 0 R (section*.39) 12082 0 R (section*.40) 12083 0 R (section*.41) 12088 0 R (section*.42) 12093 0 R]
+/Limits [(section*.37) (section*.42)]
 >> endobj
 18196 0 obj <<
-/Names [(passdb) 3779 0 R (passdbtech) 7266 0 R (pdbeditthing) 7365 0 R (pdc-bdc-table) 6390 0 R (pdc-example) 6263 0 R (pdftoepsonusb) 9519 0 R]
-/Limits [(passdb) (pdftoepsonusb)]
+/Names [(section*.43) 12094 0 R (section*.44) 12099 0 R (section*.45) 12109 0 R (section*.46) 12123 0 R (section*.47) 12134 0 R (section*.48) 12139 0 R]
+/Limits [(section*.43) (section*.48)]
 >> endobj
 18197 0 obj <<
-/Names [(pdftosocket) 9503 0 R (policycontrols) 7383 0 R (post-and-ghost) 9341 0 R (printOptions) 8896 0 R (problems) 3926 0 R (profilemigrn) 10644 0 R]
-/Limits [(pdftosocket) (profilemigrn)]
+/Names [(section*.49) 12140 0 R (section*.50) 12145 0 R (section*.51) 12151 0 R (section*.52) 12156 0 R (section*.53) 12157 0 R (section*.54) 12162 0 R]
+/Limits [(section*.49) (section*.54)]
 >> endobj
 18198 0 obj <<
-/Names [(prt-modeset) 9046 0 R (prtdollar) 8930 0 R (ptrsect) 8868 0 R (regkeys) 10697 0 R (remsmb) 7087 0 R (rights) 3814 0 R]
-/Limits [(prt-modeset) (rights)]
+/Names [(section*.55) 12163 0 R (section*.56) 12164 0 R (section*.57) 12165 0 R (section*.58) 3678 0 R (section*.9) 38 0 R (section.1.1) 54 0 R]
+/Limits [(section*.55) (section.1.1)]
 >> endobj
 18199 0 obj <<
-/Names [(root-ask-loop) 10005 0 R (rp-privs) 8182 0 R (s1-config-ldap-tls) 11961 0 R (s1-config-ldap-tls-certs) 11962 0 R (s1-config-ldap-tls-install) 11988 0 R (s1-config-ldap-tls-server) 11976 0 R]
-/Limits [(root-ask-loop) (s1-config-ldap-tls-server)]
+/Names [(section.1.2) 58 0 R (section.1.3) 86 0 R (section.1.4) 90 0 R (section.1.5) 94 0 R (section.1.6) 106 0 R (section.10.1) 646 0 R]
+/Limits [(section.1.2) (section.10.1)]
 >> endobj
 18200 0 obj <<
-/Names [(s1-int-ldap-tls) 12006 0 R (s1-intro-ldap-tls) 11951 0 R (s1-test-ldap-tls) 11994 0 R (samba-bdc) 3743 0 R (samba-pdc) 3742 0 R (samba-trusted-domain) 8685 0 R]
-/Limits [(s1-int-ldap-tls) (samba-trusted-domain)]
+/Names [(section.10.2) 650 0 R (section.10.3) 654 0 R (section.10.4) 670 0 R (section.10.5) 706 0 R (section.10.6) 722 0 R (section.10.7) 734 0 R]
+/Limits [(section.10.2) (section.10.7)]
 >> endobj
 18201 0 obj <<
-/Names [(sauronsmbc) 11185 0 R (sbeuseraddn) 7835 0 R (section*.1) 6 0 R (section*.11) 5426 0 R (section*.12) 5432 0 R (section*.13) 5439 0 R]
-/Limits [(sauronsmbc) (section*.13)]
+/Names [(section.10.8) 754 0 R (section.11.1) 782 0 R (section.11.2) 794 0 R (section.11.3) 830 0 R (section.11.4) 850 0 R (section.11.5) 914 0 R]
+/Limits [(section.10.8) (section.11.5)]
 >> endobj
 18202 0 obj <<
-/Names [(section*.14) 46 0 R (section*.16) 5870 0 R (section*.17) 5898 0 R (section*.18) 182 0 R (section*.20) 606 0 R (section*.22) 7381 0 R]
-/Limits [(section*.14) (section*.22)]
+/Names [(section.12.1) 930 0 R (section.12.2) 934 0 R (section.12.3) 962 0 R (section.12.4) 974 0 R (section.13.1) 990 0 R (section.13.10) 1114 0 R]
+/Limits [(section.12.1) (section.13.10)]
 >> endobj
 18203 0 obj <<
-/Names [(section*.23) 7397 0 R (section*.24) 7404 0 R (section*.25) 7406 0 R (section*.26) 7418 0 R (section*.27) 7428 0 R (section*.28) 10337 0 R]
-/Limits [(section*.23) (section*.28)]
+/Names [(section.13.11) 1118 0 R (section.13.12) 1122 0 R (section.13.13) 1126 0 R (section.13.14) 1138 0 R (section.13.2) 994 0 R (section.13.3) 998 0 R]
+/Limits [(section.13.11) (section.13.3)]
 >> endobj
 18204 0 obj <<
-/Names [(section*.29) 10348 0 R (section*.30) 10359 0 R (section*.31) 10362 0 R (section*.32) 10373 0 R (section*.33) 10609 0 R (section*.34) 11360 0 R]
-/Limits [(section*.29) (section*.34)]
+/Names [(section.13.4) 1034 0 R (section.13.5) 1054 0 R (section.13.6) 1058 0 R (section.13.7) 1070 0 R (section.13.8) 1074 0 R (section.13.9) 1110 0 R]
+/Limits [(section.13.4) (section.13.9)]
 >> endobj
 18205 0 obj <<
-/Names [(section*.35) 11366 0 R (section*.36) 11372 0 R (section*.37) 12084 0 R (section*.38) 12089 0 R (section*.39) 12094 0 R (section*.40) 12095 0 R]
-/Limits [(section*.35) (section*.40)]
+/Names [(section.14.1) 1146 0 R (section.14.2) 1166 0 R (section.15.1) 1206 0 R (section.15.2) 1222 0 R (section.15.3) 1226 0 R (section.16.1) 1238 0 R]
+/Limits [(section.14.1) (section.16.1)]
 >> endobj
 18206 0 obj <<
-/Names [(section*.41) 12100 0 R (section*.42) 12105 0 R (section*.43) 12106 0 R (section*.44) 12111 0 R (section*.45) 12121 0 R (section*.46) 12135 0 R]
-/Limits [(section*.41) (section*.46)]
+/Names [(section.16.2) 1242 0 R (section.16.3) 1262 0 R (section.16.4) 1278 0 R (section.16.5) 1294 0 R (section.16.6) 1350 0 R (section.17.1) 1370 0 R]
+/Limits [(section.16.2) (section.17.1)]
 >> endobj
 18207 0 obj <<
-/Names [(section*.47) 12146 0 R (section*.48) 12151 0 R (section*.49) 12152 0 R (section*.50) 12157 0 R (section*.51) 12163 0 R (section*.52) 12168 0 R]
-/Limits [(section*.47) (section*.52)]
+/Names [(section.17.2) 1374 0 R (section.17.3) 1418 0 R (section.17.4) 1434 0 R (section.17.5) 1446 0 R (section.17.6) 1450 0 R (section.17.7) 1466 0 R]
+/Limits [(section.17.2) (section.17.7)]
 >> endobj
 18208 0 obj <<
-/Names [(section*.53) 12169 0 R (section*.54) 12174 0 R (section*.55) 12175 0 R (section*.56) 12176 0 R (section*.57) 12177 0 R (section*.58) 3678 0 R]
-/Limits [(section*.53) (section*.58)]
+/Names [(section.18.1) 1474 0 R (section.18.2) 1478 0 R (section.18.3) 1482 0 R (section.18.4) 1510 0 R (section.18.5) 1514 0 R (section.19.1) 1530 0 R]
+/Limits [(section.18.1) (section.19.1)]
 >> endobj
 18209 0 obj <<
-/Names [(section*.9) 38 0 R (section.1.1) 54 0 R (section.1.2) 58 0 R (section.1.3) 86 0 R (section.1.4) 90 0 R (section.1.5) 94 0 R]
-/Limits [(section*.9) (section.1.5)]
+/Names [(section.19.2) 1534 0 R (section.19.3) 1538 0 R (section.19.4) 1554 0 R (section.19.5) 1566 0 R (section.19.6) 1570 0 R (section.2.1) 126 0 R]
+/Limits [(section.19.2) (section.2.1)]
 >> endobj
 18210 0 obj <<
-/Names [(section.1.6) 106 0 R (section.10.1) 646 0 R (section.10.2) 650 0 R (section.10.3) 654 0 R (section.10.4) 670 0 R (section.10.5) 706 0 R]
-/Limits [(section.1.6) (section.10.5)]
+/Names [(section.2.2) 130 0 R (section.2.3) 134 0 R (section.20.1) 1586 0 R (section.20.2) 1590 0 R (section.21.1) 1602 0 R (section.21.10) 1806 0 R]
+/Limits [(section.2.2) (section.21.10)]
 >> endobj
 18211 0 obj <<
-/Names [(section.10.6) 722 0 R (section.10.7) 734 0 R (section.10.8) 754 0 R (section.11.1) 782 0 R (section.11.2) 794 0 R (section.11.3) 830 0 R]
-/Limits [(section.10.6) (section.11.3)]
+/Names [(section.21.11) 1810 0 R (section.21.12) 1814 0 R (section.21.13) 1818 0 R (section.21.14) 1822 0 R (section.21.2) 1606 0 R (section.21.3) 1618 0 R]
+/Limits [(section.21.11) (section.21.3)]
 >> endobj
 18212 0 obj <<
-/Names [(section.11.4) 850 0 R (section.11.5) 914 0 R (section.12.1) 930 0 R (section.12.2) 934 0 R (section.12.3) 962 0 R (section.12.4) 974 0 R]
-/Limits [(section.11.4) (section.12.4)]
+/Names [(section.21.4) 1630 0 R (section.21.5) 1662 0 R (section.21.6) 1686 0 R (section.21.7) 1734 0 R (section.21.8) 1754 0 R (section.21.9) 1786 0 R]
+/Limits [(section.21.4) (section.21.9)]
 >> endobj
 18213 0 obj <<
-/Names [(section.13.1) 990 0 R (section.13.10) 1114 0 R (section.13.11) 1118 0 R (section.13.12) 1122 0 R (section.13.13) 1126 0 R (section.13.14) 1138 0 R]
-/Limits [(section.13.1) (section.13.14)]
+/Names [(section.22.1) 1838 0 R (section.22.10) 2070 0 R (section.22.11) 2138 0 R (section.22.12) 2166 0 R (section.22.13) 2186 0 R (section.22.14) 2230 0 R]
+/Limits [(section.22.1) (section.22.14)]
 >> endobj
 18214 0 obj <<
-/Names [(section.13.2) 994 0 R (section.13.3) 998 0 R (section.13.4) 1034 0 R (section.13.5) 1054 0 R (section.13.6) 1058 0 R (section.13.7) 1070 0 R]
-/Limits [(section.13.2) (section.13.7)]
+/Names [(section.22.15) 2262 0 R (section.22.16) 2266 0 R (section.22.17) 2282 0 R (section.22.18) 2286 0 R (section.22.19) 2290 0 R (section.22.2) 1850 0 R]
+/Limits [(section.22.15) (section.22.2)]
 >> endobj
 18215 0 obj <<
-/Names [(section.13.8) 1074 0 R (section.13.9) 1110 0 R (section.14.1) 1146 0 R (section.14.2) 1166 0 R (section.15.1) 1206 0 R (section.15.2) 1222 0 R]
-/Limits [(section.13.8) (section.15.2)]
+/Names [(section.22.20) 2374 0 R (section.22.3) 1866 0 R (section.22.4) 1890 0 R (section.22.5) 1926 0 R (section.22.6) 2010 0 R (section.22.7) 2026 0 R]
+/Limits [(section.22.20) (section.22.7)]
 >> endobj
 18216 0 obj <<
-/Names [(section.15.3) 1226 0 R (section.16.1) 1238 0 R (section.16.2) 1242 0 R (section.16.3) 1262 0 R (section.16.4) 1278 0 R (section.16.5) 1294 0 R]
-/Limits [(section.15.3) (section.16.5)]
+/Names [(section.22.8) 2038 0 R (section.22.9) 2050 0 R (section.23.1) 2382 0 R (section.23.2) 2386 0 R (section.23.3) 2390 0 R (section.23.4) 2430 0 R]
+/Limits [(section.22.8) (section.23.4)]
 >> endobj
 18217 0 obj <<
-/Names [(section.16.6) 1350 0 R (section.17.1) 1370 0 R (section.17.2) 1374 0 R (section.17.3) 1418 0 R (section.17.4) 1434 0 R (section.17.5) 1446 0 R]
-/Limits [(section.16.6) (section.17.5)]
+/Names [(section.24.1) 2450 0 R (section.24.2) 2454 0 R (section.24.3) 2458 0 R (section.24.4) 2470 0 R (section.24.5) 2498 0 R (section.24.6) 2542 0 R]
+/Limits [(section.24.1) (section.24.6)]
 >> endobj
 18218 0 obj <<
-/Names [(section.17.6) 1450 0 R (section.17.7) 1466 0 R (section.18.1) 1474 0 R (section.18.2) 1478 0 R (section.18.3) 1482 0 R (section.18.4) 1510 0 R]
-/Limits [(section.17.6) (section.18.4)]
+/Names [(section.24.7) 2546 0 R (section.25.1) 2562 0 R (section.25.2) 2566 0 R (section.25.3) 2570 0 R (section.25.4) 2582 0 R (section.26.1) 2598 0 R]
+/Limits [(section.24.7) (section.26.1)]
 >> endobj
 18219 0 obj <<
-/Names [(section.18.5) 1514 0 R (section.19.1) 1530 0 R (section.19.2) 1534 0 R (section.19.3) 1538 0 R (section.19.4) 1554 0 R (section.19.5) 1566 0 R]
-/Limits [(section.18.5) (section.19.5)]
+/Names [(section.26.2) 2602 0 R (section.26.3) 2630 0 R (section.26.4) 2634 0 R (section.26.5) 2650 0 R (section.26.6) 2654 0 R (section.27.1) 2666 0 R]
+/Limits [(section.26.2) (section.27.1)]
 >> endobj
 18220 0 obj <<
-/Names [(section.19.6) 1570 0 R (section.2.1) 126 0 R (section.2.2) 130 0 R (section.2.3) 134 0 R (section.20.1) 1586 0 R (section.20.2) 1590 0 R]
-/Limits [(section.19.6) (section.20.2)]
+/Names [(section.27.2) 2670 0 R (section.27.3) 2738 0 R (section.27.4) 2742 0 R (section.27.5) 2746 0 R (section.27.6) 2766 0 R (section.28.1) 2790 0 R]
+/Limits [(section.27.2) (section.28.1)]
 >> endobj
 18221 0 obj <<
-/Names [(section.21.1) 1602 0 R (section.21.10) 1806 0 R (section.21.11) 1810 0 R (section.21.12) 1814 0 R (section.21.13) 1818 0 R (section.21.14) 1822 0 R]
-/Limits [(section.21.1) (section.21.14)]
+/Names [(section.28.2) 2794 0 R (section.28.3) 2846 0 R (section.29.1) 2862 0 R (section.29.2) 2866 0 R (section.29.3) 2870 0 R (section.29.4) 2890 0 R]
+/Limits [(section.28.2) (section.29.4)]
 >> endobj
 18222 0 obj <<
-/Names [(section.21.2) 1606 0 R (section.21.3) 1618 0 R (section.21.4) 1630 0 R (section.21.5) 1662 0 R (section.21.6) 1686 0 R (section.21.7) 1734 0 R]
-/Limits [(section.21.2) (section.21.7)]
+/Names [(section.29.5) 2914 0 R (section.3.1) 190 0 R (section.3.2) 194 0 R (section.3.3) 198 0 R (section.3.4) 242 0 R (section.3.5) 246 0 R]
+/Limits [(section.29.5) (section.3.5)]
 >> endobj
 18223 0 obj <<
-/Names [(section.21.8) 1754 0 R (section.21.9) 1786 0 R (section.22.1) 1838 0 R (section.22.10) 2070 0 R (section.22.11) 2138 0 R (section.22.12) 2166 0 R]
-/Limits [(section.21.8) (section.22.12)]
+/Names [(section.30.1) 2934 0 R (section.30.2) 2938 0 R (section.30.3) 2942 0 R (section.30.4) 2946 0 R (section.30.5) 2950 0 R (section.30.6) 2966 0 R]
+/Limits [(section.30.1) (section.30.6)]
 >> endobj
 18224 0 obj <<
-/Names [(section.22.13) 2186 0 R (section.22.14) 2230 0 R (section.22.15) 2262 0 R (section.22.16) 2266 0 R (section.22.17) 2282 0 R (section.22.18) 2286 0 R]
-/Limits [(section.22.13) (section.22.18)]
+/Names [(section.31.1) 2978 0 R (section.31.2) 2982 0 R (section.32.1) 3006 0 R (section.32.2) 3010 0 R (section.34.1) 3074 0 R (section.35.1) 3098 0 R]
+/Limits [(section.31.1) (section.35.1)]
 >> endobj
 18225 0 obj <<
-/Names [(section.22.19) 2290 0 R (section.22.2) 1850 0 R (section.22.20) 2374 0 R (section.22.3) 1866 0 R (section.22.4) 1890 0 R (section.22.5) 1926 0 R]
-/Limits [(section.22.19) (section.22.5)]
+/Names [(section.35.2) 3114 0 R (section.36.1) 3166 0 R (section.36.2) 3198 0 R (section.37.1) 3214 0 R (section.37.2) 3218 0 R (section.37.3) 3246 0 R]
+/Limits [(section.35.2) (section.37.3)]
 >> endobj
 18226 0 obj <<
-/Names [(section.22.6) 2010 0 R (section.22.7) 2026 0 R (section.22.8) 2038 0 R (section.22.9) 2050 0 R (section.23.1) 2382 0 R (section.23.2) 2386 0 R]
-/Limits [(section.22.6) (section.23.2)]
+/Names [(section.38.1) 3290 0 R (section.38.2) 3294 0 R (section.38.3) 3298 0 R (section.39.1) 3306 0 R (section.39.2) 3334 0 R (section.39.3) 3338 0 R]
+/Limits [(section.38.1) (section.39.3)]
 >> endobj
 18227 0 obj <<
-/Names [(section.23.3) 2390 0 R (section.23.4) 2430 0 R (section.24.1) 2450 0 R (section.24.2) 2454 0 R (section.24.3) 2458 0 R (section.24.4) 2470 0 R]
-/Limits [(section.23.3) (section.24.4)]
+/Names [(section.39.4) 3342 0 R (section.4.1) 274 0 R (section.4.2) 278 0 R (section.4.3) 282 0 R (section.4.4) 294 0 R (section.4.5) 298 0 R]
+/Limits [(section.39.4) (section.4.5)]
 >> endobj
 18228 0 obj <<
-/Names [(section.24.5) 2498 0 R (section.24.6) 2542 0 R (section.24.7) 2546 0 R (section.25.1) 2562 0 R (section.25.2) 2566 0 R (section.25.3) 2570 0 R]
-/Limits [(section.24.5) (section.25.3)]
+/Names [(section.4.6) 302 0 R (section.4.7) 326 0 R (section.40.1) 3350 0 R (section.40.2) 3354 0 R (section.40.3) 3358 0 R (section.40.4) 3366 0 R]
+/Limits [(section.4.6) (section.40.4)]
 >> endobj
 18229 0 obj <<
-/Names [(section.25.4) 2582 0 R (section.26.1) 2598 0 R (section.26.2) 2602 0 R (section.26.3) 2630 0 R (section.26.4) 2634 0 R (section.26.5) 2650 0 R]
-/Limits [(section.25.4) (section.26.5)]
+/Names [(section.40.5) 3370 0 R (section.40.6) 3374 0 R (section.41.1) 3386 0 R (section.41.2) 3406 0 R (section.41.3) 3410 0 R (section.41.4) 3414 0 R]
+/Limits [(section.40.5) (section.41.4)]
 >> endobj
 18230 0 obj <<
-/Names [(section.26.6) 2654 0 R (section.27.1) 2666 0 R (section.27.2) 2670 0 R (section.27.3) 2738 0 R (section.27.4) 2742 0 R (section.27.5) 2746 0 R]
-/Limits [(section.26.6) (section.27.5)]
+/Names [(section.41.5) 3434 0 R (section.42.1) 3458 0 R (section.42.2) 3462 0 R (section.42.3) 3466 0 R (section.42.4) 3470 0 R (section.42.5) 3474 0 R]
+/Limits [(section.41.5) (section.42.5)]
 >> endobj
 18231 0 obj <<
-/Names [(section.27.6) 2766 0 R (section.28.1) 2790 0 R (section.28.2) 2794 0 R (section.28.3) 2846 0 R (section.29.1) 2862 0 R (section.29.2) 2866 0 R]
-/Limits [(section.27.6) (section.29.2)]
+/Names [(section.42.6) 3478 0 R (section.43.1) 3494 0 R (section.43.2) 3498 0 R (section.43.3) 3514 0 R (section.43.4) 3542 0 R (section.43.5) 3550 0 R]
+/Limits [(section.42.6) (section.43.5)]
 >> endobj
 18232 0 obj <<
-/Names [(section.29.3) 2870 0 R (section.29.4) 2890 0 R (section.29.5) 2914 0 R (section.3.1) 190 0 R (section.3.2) 194 0 R (section.3.3) 198 0 R]
-/Limits [(section.29.3) (section.3.3)]
+/Names [(section.43.6) 3554 0 R (section.44.1) 3562 0 R (section.44.10) 3598 0 R (section.44.11) 3602 0 R (section.44.12) 3606 0 R (section.44.2) 3566 0 R]
+/Limits [(section.43.6) (section.44.2)]
 >> endobj
 18233 0 obj <<
-/Names [(section.3.4) 242 0 R (section.3.5) 246 0 R (section.30.1) 2934 0 R (section.30.2) 2938 0 R (section.30.3) 2942 0 R (section.30.4) 2946 0 R]
-/Limits [(section.3.4) (section.30.4)]
+/Names [(section.44.3) 3570 0 R (section.44.4) 3574 0 R (section.44.5) 3578 0 R (section.44.6) 3582 0 R (section.44.7) 3586 0 R (section.44.8) 3590 0 R]
+/Limits [(section.44.3) (section.44.8)]
 >> endobj
 18234 0 obj <<
-/Names [(section.30.5) 2950 0 R (section.30.6) 2966 0 R (section.31.1) 2978 0 R (section.31.2) 2982 0 R (section.32.1) 3006 0 R (section.32.2) 3010 0 R]
-/Limits [(section.30.5) (section.32.2)]
+/Names [(section.44.9) 3594 0 R (section.45.1) 3614 0 R (section.45.2) 3618 0 R (section.45.3) 3634 0 R (section.45.4) 3638 0 R (section.46.1) 3646 0 R]
+/Limits [(section.44.9) (section.46.1)]
 >> endobj
 18235 0 obj <<
-/Names [(section.34.1) 3074 0 R (section.35.1) 3098 0 R (section.35.2) 3114 0 R (section.36.1) 3166 0 R (section.36.2) 3198 0 R (section.37.1) 3214 0 R]
-/Limits [(section.34.1) (section.37.1)]
+/Names [(section.46.2) 3650 0 R (section.47.1) 3658 0 R (section.47.2) 3662 0 R (section.5.1) 362 0 R (section.5.2) 366 0 R (section.5.3) 402 0 R]
+/Limits [(section.46.2) (section.5.3)]
 >> endobj
 18236 0 obj <<
-/Names [(section.37.2) 3218 0 R (section.37.3) 3246 0 R (section.38.1) 3290 0 R (section.38.2) 3294 0 R (section.38.3) 3298 0 R (section.39.1) 3306 0 R]
-/Limits [(section.37.2) (section.39.1)]
+/Names [(section.5.4) 410 0 R (section.6.1) 434 0 R (section.6.2) 438 0 R (section.6.3) 470 0 R (section.6.4) 482 0 R (section.6.5) 514 0 R]
+/Limits [(section.5.4) (section.6.5)]
 >> endobj
 18237 0 obj <<
-/Names [(section.39.2) 3334 0 R (section.39.3) 3338 0 R (section.39.4) 3342 0 R (section.4.1) 274 0 R (section.4.2) 278 0 R (section.4.3) 282 0 R]
-/Limits [(section.39.2) (section.4.3)]
+/Names [(section.6.6) 518 0 R (section.7.1) 538 0 R (section.7.2) 542 0 R (section.7.3) 546 0 R (section.7.4) 558 0 R (section.8.1) 566 0 R]
+/Limits [(section.6.6) (section.8.1)]
 >> endobj
 18238 0 obj <<
-/Names [(section.4.4) 294 0 R (section.4.5) 298 0 R (section.4.6) 302 0 R (section.4.7) 326 0 R (section.40.1) 3350 0 R (section.40.2) 3354 0 R]
-/Limits [(section.4.4) (section.40.2)]
+/Names [(section.8.2) 570 0 R (section.8.3) 598 0 R (section.9.1) 614 0 R (section.9.2) 618 0 R (securing-samba) 3817 0 R (set-group-map) 7710 0 R]
+/Limits [(section.8.2) (set-group-map)]
 >> endobj
 18239 0 obj <<
-/Names [(section.40.3) 3358 0 R (section.40.4) 3366 0 R (section.40.5) 3370 0 R (section.40.6) 3374 0 R (section.41.1) 3386 0 R (section.41.2) 3406 0 R]
-/Limits [(section.40.3) (section.41.2)]
+/Names [(simple-example) 5515 0 R (simpleprc) 8761 0 R (simplynice) 6680 0 R (small11) 9539 0 R (small12) 9540 0 R (small14) 9707 0 R]
+/Limits [(simple-example) (small14)]
 >> endobj
 18240 0 obj <<
-/Names [(section.41.3) 3410 0 R (section.41.4) 3414 0 R (section.41.5) 3434 0 R (section.42.1) 3458 0 R (section.42.2) 3462 0 R (section.42.3) 3466 0 R]
-/Limits [(section.41.3) (section.42.3)]
+/Names [(small8) 9423 0 R (small9) 9424 0 R (smbconfminimal) 5482 0 R (smbgrpadd) 7701 0 R (smbgrpadd.sh) 7700 0 R (smbpassoptions) 10812 0 R]
+/Limits [(small8) (smbpassoptions)]
 >> endobj
 18241 0 obj <<
-/Names [(section.42.4) 3470 0 R (section.42.5) 3474 0 R (section.42.6) 3478 0 R (section.43.1) 3494 0 R (section.43.2) 3498 0 R (section.43.3) 3514 0 R]
-/Limits [(section.42.4) (section.43.3)]
+/Names [(speed) 3946 0 R (speedimpr) 11866 0 R (startingSamba) 5627 0 R (subsection.1.2.1) 62 0 R (subsection.1.2.2) 66 0 R (subsection.1.2.3) 70 0 R]
+/Limits [(speed) (subsection.1.2.3)]
 >> endobj
 18242 0 obj <<
-/Names [(section.43.4) 3542 0 R (section.43.5) 3550 0 R (section.43.6) 3554 0 R (section.44.1) 3562 0 R (section.44.10) 3598 0 R (section.44.11) 3602 0 R]
-/Limits [(section.43.4) (section.44.11)]
+/Names [(subsection.1.2.4) 74 0 R (subsection.1.2.5) 82 0 R (subsection.1.5.1) 98 0 R (subsection.1.5.2) 102 0 R (subsection.1.6.1) 110 0 R (subsection.1.6.2) 114 0 R]
+/Limits [(subsection.1.2.4) (subsection.1.6.2)]
 >> endobj
 18243 0 obj <<
-/Names [(section.44.12) 3606 0 R (section.44.2) 3566 0 R (section.44.3) 3570 0 R (section.44.4) 3574 0 R (section.44.5) 3578 0 R (section.44.6) 3582 0 R]
-/Limits [(section.44.12) (section.44.6)]
+/Names [(subsection.1.6.3) 118 0 R (subsection.10.3.1) 658 0 R (subsection.10.3.2) 662 0 R (subsection.10.3.3) 666 0 R (subsection.10.4.1) 674 0 R (subsection.10.4.2) 678 0 R]
+/Limits [(subsection.1.6.3) (subsection.10.4.2)]
 >> endobj
 18244 0 obj <<
-/Names [(section.44.7) 3586 0 R (section.44.8) 3590 0 R (section.44.9) 3594 0 R (section.45.1) 3614 0 R (section.45.2) 3618 0 R (section.45.3) 3634 0 R]
-/Limits [(section.44.7) (section.45.3)]
+/Names [(subsection.10.4.3) 682 0 R (subsection.10.4.4) 686 0 R (subsection.10.4.5) 690 0 R (subsection.10.4.6) 694 0 R (subsection.10.4.7) 698 0 R (subsection.10.4.8) 702 0 R]
+/Limits [(subsection.10.4.3) (subsection.10.4.8)]
 >> endobj
 18245 0 obj <<
-/Names [(section.45.4) 3638 0 R (section.46.1) 3646 0 R (section.46.2) 3650 0 R (section.47.1) 3658 0 R (section.47.2) 3662 0 R (section.5.1) 362 0 R]
-/Limits [(section.45.4) (section.5.1)]
+/Names [(subsection.10.5.1) 710 0 R (subsection.10.5.2) 714 0 R (subsection.10.5.3) 718 0 R (subsection.10.6.1) 726 0 R (subsection.10.6.2) 730 0 R (subsection.10.7.1) 738 0 R]
+/Limits [(subsection.10.5.1) (subsection.10.7.1)]
 >> endobj
 18246 0 obj <<
-/Names [(section.5.2) 366 0 R (section.5.3) 402 0 R (section.5.4) 410 0 R (section.6.1) 434 0 R (section.6.2) 438 0 R (section.6.3) 470 0 R]
-/Limits [(section.5.2) (section.6.3)]
+/Names [(subsection.10.7.2) 742 0 R (subsection.10.7.3) 746 0 R (subsection.10.8.1) 758 0 R (subsection.10.8.2) 762 0 R (subsection.10.8.3) 766 0 R (subsection.10.8.4) 770 0 R]
+/Limits [(subsection.10.7.2) (subsection.10.8.4)]
 >> endobj
 18247 0 obj <<
-/Names [(section.6.4) 482 0 R (section.6.5) 514 0 R (section.6.6) 518 0 R (section.7.1) 538 0 R (section.7.2) 542 0 R (section.7.3) 546 0 R]
-/Limits [(section.6.4) (section.7.3)]
+/Names [(subsection.10.8.5) 774 0 R (subsection.11.1.1) 786 0 R (subsection.11.1.2) 790 0 R (subsection.11.2.1) 798 0 R (subsection.11.2.2) 810 0 R (subsection.11.2.3) 814 0 R]
+/Limits [(subsection.10.8.5) (subsection.11.2.3)]
 >> endobj
 18248 0 obj <<
-/Names [(section.7.4) 558 0 R (section.8.1) 566 0 R (section.8.2) 570 0 R (section.8.3) 598 0 R (section.9.1) 614 0 R (section.9.2) 618 0 R]
-/Limits [(section.7.4) (section.9.2)]
+/Names [(subsection.11.2.4) 818 0 R (subsection.11.2.5) 826 0 R (subsection.11.3.1) 834 0 R (subsection.11.3.2) 838 0 R (subsection.11.4.1) 854 0 R (subsection.11.4.2) 858 0 R]
+/Limits [(subsection.11.2.4) (subsection.11.4.2)]
 >> endobj
 18249 0 obj <<
-/Names [(securing-samba) 3817 0 R (set-group-map) 7721 0 R (simple-example) 5515 0 R (simpleprc) 8775 0 R (simplynice) 6681 0 R (small11) 9552 0 R]
-/Limits [(securing-samba) (small11)]
+/Names [(subsection.11.4.3) 862 0 R (subsection.11.4.4) 866 0 R (subsection.11.5.1) 918 0 R (subsection.11.5.2) 922 0 R (subsection.12.2.1) 938 0 R (subsection.12.2.2) 942 0 R]
+/Limits [(subsection.11.4.3) (subsection.12.2.2)]
 >> endobj
 18250 0 obj <<
-/Names [(small12) 9553 0 R (small14) 9719 0 R (small8) 9434 0 R (small9) 9435 0 R (smbconfminimal) 5482 0 R (smbgrpadd) 7712 0 R]
-/Limits [(small12) (smbgrpadd)]
+/Names [(subsection.12.2.3) 946 0 R (subsection.12.2.4) 954 0 R (subsection.12.2.5) 958 0 R (subsection.12.3.1) 966 0 R (subsection.12.3.2) 970 0 R (subsection.12.4.1) 978 0 R]
+/Limits [(subsection.12.2.3) (subsection.12.4.1)]
 >> endobj
 18251 0 obj <<
-/Names [(smbgrpadd.sh) 7711 0 R (smbpassoptions) 10824 0 R (speed) 3946 0 R (speedimpr) 11878 0 R (startingSamba) 5627 0 R (subsection.1.2.1) 62 0 R]
-/Limits [(smbgrpadd.sh) (subsection.1.2.1)]
+/Names [(subsection.12.4.2) 982 0 R (subsection.13.13.1) 1130 0 R (subsection.13.13.2) 1134 0 R (subsection.13.3.1) 1002 0 R (subsection.13.3.2) 1022 0 R (subsection.13.3.3) 1026 0 R]
+/Limits [(subsection.12.4.2) (subsection.13.3.3)]
 >> endobj
 18252 0 obj <<
-/Names [(subsection.1.2.2) 66 0 R (subsection.1.2.3) 70 0 R (subsection.1.2.4) 74 0 R (subsection.1.2.5) 82 0 R (subsection.1.5.1) 98 0 R (subsection.1.5.2) 102 0 R]
-/Limits [(subsection.1.2.2) (subsection.1.5.2)]
+/Names [(subsection.13.4.1) 1038 0 R (subsection.13.4.2) 1042 0 R (subsection.13.4.3) 1046 0 R (subsection.13.4.4) 1050 0 R (subsection.13.6.1) 1062 0 R (subsection.13.6.2) 1066 0 R]
+/Limits [(subsection.13.4.1) (subsection.13.6.2)]
 >> endobj
 18253 0 obj <<
-/Names [(subsection.1.6.1) 110 0 R (subsection.1.6.2) 114 0 R (subsection.1.6.3) 118 0 R (subsection.10.3.1) 658 0 R (subsection.10.3.2) 662 0 R (subsection.10.3.3) 666 0 R]
-/Limits [(subsection.1.6.1) (subsection.10.3.3)]
+/Names [(subsection.13.8.1) 1078 0 R (subsection.13.8.2) 1082 0 R (subsection.13.8.3) 1086 0 R (subsection.13.8.4) 1106 0 R (subsection.14.1.1) 1150 0 R (subsection.14.1.2) 1154 0 R]
+/Limits [(subsection.13.8.1) (subsection.14.1.2)]
 >> endobj
 18254 0 obj <<
-/Names [(subsection.10.4.1) 674 0 R (subsection.10.4.2) 678 0 R (subsection.10.4.3) 682 0 R (subsection.10.4.4) 686 0 R (subsection.10.4.5) 690 0 R (subsection.10.4.6) 694 0 R]
-/Limits [(subsection.10.4.1) (subsection.10.4.6)]
+/Names [(subsection.14.1.3) 1158 0 R (subsection.14.1.4) 1162 0 R (subsection.14.2.1) 1170 0 R (subsection.14.2.2) 1182 0 R (subsection.14.2.3) 1186 0 R (subsection.14.2.4) 1190 0 R]
+/Limits [(subsection.14.1.3) (subsection.14.2.4)]
 >> endobj
 18255 0 obj <<
-/Names [(subsection.10.4.7) 698 0 R (subsection.10.4.8) 702 0 R (subsection.10.5.1) 710 0 R (subsection.10.5.2) 714 0 R (subsection.10.5.3) 718 0 R (subsection.10.6.1) 726 0 R]
-/Limits [(subsection.10.4.7) (subsection.10.6.1)]
+/Names [(subsection.15.1.1) 1210 0 R (subsection.15.1.2) 1214 0 R (subsection.15.1.3) 1218 0 R (subsection.15.3.1) 1230 0 R (subsection.16.2.1) 1246 0 R (subsection.16.2.2) 1250 0 R]
+/Limits [(subsection.15.1.1) (subsection.16.2.2)]
 >> endobj
 18256 0 obj <<
-/Names [(subsection.10.6.2) 730 0 R (subsection.10.7.1) 738 0 R (subsection.10.7.2) 742 0 R (subsection.10.7.3) 746 0 R (subsection.10.8.1) 758 0 R (subsection.10.8.2) 762 0 R]
-/Limits [(subsection.10.6.2) (subsection.10.8.2)]
+/Names [(subsection.16.2.3) 1254 0 R (subsection.16.3.1) 1266 0 R (subsection.16.3.2) 1270 0 R (subsection.16.3.3) 1274 0 R (subsection.16.4.1) 1282 0 R (subsection.16.5.1) 1298 0 R]
+/Limits [(subsection.16.2.3) (subsection.16.5.1)]
 >> endobj
 18257 0 obj <<
-/Names [(subsection.10.8.3) 766 0 R (subsection.10.8.4) 770 0 R (subsection.10.8.5) 774 0 R (subsection.11.1.1) 786 0 R (subsection.11.1.2) 790 0 R (subsection.11.2.1) 798 0 R]
-/Limits [(subsection.10.8.3) (subsection.11.2.1)]
+/Names [(subsection.16.5.2) 1302 0 R (subsection.16.5.3) 1306 0 R (subsection.16.5.4) 1310 0 R (subsection.16.5.5) 1322 0 R (subsection.16.5.6) 1326 0 R (subsection.16.5.7) 1330 0 R]
+/Limits [(subsection.16.5.2) (subsection.16.5.7)]
 >> endobj
 18258 0 obj <<
-/Names [(subsection.11.2.2) 810 0 R (subsection.11.2.3) 814 0 R (subsection.11.2.4) 818 0 R (subsection.11.2.5) 826 0 R (subsection.11.3.1) 834 0 R (subsection.11.3.2) 838 0 R]
-/Limits [(subsection.11.2.2) (subsection.11.3.2)]
+/Names [(subsection.16.5.8) 1334 0 R (subsection.16.6.1) 1354 0 R (subsection.16.6.2) 1358 0 R (subsection.16.6.3) 1362 0 R (subsection.17.2.1) 1378 0 R (subsection.17.3.1) 1422 0 R]
+/Limits [(subsection.16.5.8) (subsection.17.3.1)]
 >> endobj
 18259 0 obj <<
-/Names [(subsection.11.4.1) 854 0 R (subsection.11.4.2) 858 0 R (subsection.11.4.3) 862 0 R (subsection.11.4.4) 866 0 R (subsection.11.5.1) 918 0 R (subsection.11.5.2) 922 0 R]
-/Limits [(subsection.11.4.1) (subsection.11.5.2)]
+/Names [(subsection.17.4.1) 1438 0 R (subsection.17.4.2) 1442 0 R (subsection.17.6.1) 1454 0 R (subsection.17.6.2) 1458 0 R (subsection.17.6.3) 1462 0 R (subsection.18.3.1) 1486 0 R]
+/Limits [(subsection.17.4.1) (subsection.18.3.1)]
 >> endobj
 18260 0 obj <<
-/Names [(subsection.12.2.1) 938 0 R (subsection.12.2.2) 942 0 R (subsection.12.2.3) 946 0 R (subsection.12.2.4) 954 0 R (subsection.12.2.5) 958 0 R (subsection.12.3.1) 966 0 R]
-/Limits [(subsection.12.2.1) (subsection.12.3.1)]
+/Names [(subsection.18.3.2) 1490 0 R (subsection.18.3.3) 1494 0 R (subsection.18.3.4) 1498 0 R (subsection.18.3.5) 1502 0 R (subsection.18.3.6) 1506 0 R (subsection.18.5.1) 1518 0 R]
+/Limits [(subsection.18.3.2) (subsection.18.5.1)]
 >> endobj
 18261 0 obj <<
-/Names [(subsection.12.3.2) 970 0 R (subsection.12.4.1) 978 0 R (subsection.12.4.2) 982 0 R (subsection.13.13.1) 1130 0 R (subsection.13.13.2) 1134 0 R (subsection.13.3.1) 1002 0 R]
-/Limits [(subsection.12.3.2) (subsection.13.3.1)]
+/Names [(subsection.18.5.2) 1522 0 R (subsection.19.3.1) 1542 0 R (subsection.19.3.2) 1546 0 R (subsection.19.3.3) 1550 0 R (subsection.19.4.1) 1558 0 R (subsection.19.4.2) 1562 0 R]
+/Limits [(subsection.18.5.2) (subsection.19.4.2)]
 >> endobj
 18262 0 obj <<
-/Names [(subsection.13.3.2) 1022 0 R (subsection.13.3.3) 1026 0 R (subsection.13.4.1) 1038 0 R (subsection.13.4.2) 1042 0 R (subsection.13.4.3) 1046 0 R (subsection.13.4.4) 1050 0 R]
-/Limits [(subsection.13.3.2) (subsection.13.4.4)]
+/Names [(subsection.19.6.1) 1574 0 R (subsection.19.6.2) 1578 0 R (subsection.2.3.1) 138 0 R (subsection.2.3.2) 158 0 R (subsection.2.3.3) 166 0 R (subsection.20.2.1) 1594 0 R]
+/Limits [(subsection.19.6.1) (subsection.20.2.1)]
 >> endobj
 18263 0 obj <<
-/Names [(subsection.13.6.1) 1062 0 R (subsection.13.6.2) 1066 0 R (subsection.13.8.1) 1078 0 R (subsection.13.8.2) 1082 0 R (subsection.13.8.3) 1086 0 R (subsection.13.8.4) 1106 0 R]
-/Limits [(subsection.13.6.1) (subsection.13.8.4)]
+/Names [(subsection.21.14.1) 1826 0 R (subsection.21.14.2) 1830 0 R (subsection.21.2.1) 1610 0 R (subsection.21.2.2) 1614 0 R (subsection.21.3.1) 1622 0 R (subsection.21.3.2) 1626 0 R]
+/Limits [(subsection.21.14.1) (subsection.21.3.2)]
 >> endobj
 18264 0 obj <<
-/Names [(subsection.14.1.1) 1150 0 R (subsection.14.1.2) 1154 0 R (subsection.14.1.3) 1158 0 R (subsection.14.1.4) 1162 0 R (subsection.14.2.1) 1170 0 R (subsection.14.2.2) 1182 0 R]
-/Limits [(subsection.14.1.1) (subsection.14.2.2)]
+/Names [(subsection.21.4.1) 1634 0 R (subsection.21.5.1) 1666 0 R (subsection.21.5.2) 1670 0 R (subsection.21.5.3) 1674 0 R (subsection.21.5.4) 1678 0 R (subsection.21.5.5) 1682 0 R]
+/Limits [(subsection.21.4.1) (subsection.21.5.5)]
 >> endobj
 18265 0 obj <<
-/Names [(subsection.14.2.3) 1186 0 R (subsection.14.2.4) 1190 0 R (subsection.15.1.1) 1210 0 R (subsection.15.1.2) 1214 0 R (subsection.15.1.3) 1218 0 R (subsection.15.3.1) 1230 0 R]
-/Limits [(subsection.14.2.3) (subsection.15.3.1)]
+/Names [(subsection.21.6.1) 1690 0 R (subsection.21.6.2) 1694 0 R (subsection.21.7.1) 1738 0 R (subsection.21.7.2) 1742 0 R (subsection.21.7.3) 1746 0 R (subsection.21.7.4) 1750 0 R]
+/Limits [(subsection.21.6.1) (subsection.21.7.4)]
 >> endobj
 18266 0 obj <<
-/Names [(subsection.16.2.1) 1246 0 R (subsection.16.2.2) 1250 0 R (subsection.16.2.3) 1254 0 R (subsection.16.3.1) 1266 0 R (subsection.16.3.2) 1270 0 R (subsection.16.3.3) 1274 0 R]
-/Limits [(subsection.16.2.1) (subsection.16.3.3)]
+/Names [(subsection.21.8.1) 1758 0 R (subsection.21.8.2) 1762 0 R (subsection.21.8.3) 1766 0 R (subsection.21.8.4) 1770 0 R (subsection.21.8.5) 1774 0 R (subsection.21.8.6) 1778 0 R]
+/Limits [(subsection.21.8.1) (subsection.21.8.6)]
 >> endobj
 18267 0 obj <<
-/Names [(subsection.16.4.1) 1282 0 R (subsection.16.5.1) 1298 0 R (subsection.16.5.2) 1302 0 R (subsection.16.5.3) 1306 0 R (subsection.16.5.4) 1310 0 R (subsection.16.5.5) 1322 0 R]
-/Limits [(subsection.16.4.1) (subsection.16.5.5)]
+/Names [(subsection.21.8.7) 1782 0 R (subsection.21.9.1) 1790 0 R (subsection.21.9.2) 1794 0 R (subsection.21.9.3) 1798 0 R (subsection.21.9.4) 1802 0 R (subsection.22.1.1) 1842 0 R]
+/Limits [(subsection.21.8.7) (subsection.22.1.1)]
 >> endobj
 18268 0 obj <<
-/Names [(subsection.16.5.6) 1326 0 R (subsection.16.5.7) 1330 0 R (subsection.16.5.8) 1334 0 R (subsection.16.6.1) 1354 0 R (subsection.16.6.2) 1358 0 R (subsection.16.6.3) 1362 0 R]
-/Limits [(subsection.16.5.6) (subsection.16.6.3)]
+/Names [(subsection.22.1.2) 1846 0 R (subsection.22.10.1) 2074 0 R (subsection.22.10.10) 2110 0 R (subsection.22.10.11) 2114 0 R (subsection.22.10.12) 2118 0 R (subsection.22.10.13) 2122 0 R]
+/Limits [(subsection.22.1.2) (subsection.22.10.13)]
 >> endobj
 18269 0 obj <<
-/Names [(subsection.17.2.1) 1378 0 R (subsection.17.3.1) 1422 0 R (subsection.17.4.1) 1438 0 R (subsection.17.4.2) 1442 0 R (subsection.17.6.1) 1454 0 R (subsection.17.6.2) 1458 0 R]
-/Limits [(subsection.17.2.1) (subsection.17.6.2)]
+/Names [(subsection.22.10.14) 2126 0 R (subsection.22.10.15) 2130 0 R (subsection.22.10.16) 2134 0 R (subsection.22.10.2) 2078 0 R (subsection.22.10.3) 2082 0 R (subsection.22.10.4) 2086 0 R]
+/Limits [(subsection.22.10.14) (subsection.22.10.4)]
 >> endobj
 18270 0 obj <<
-/Names [(subsection.17.6.3) 1462 0 R (subsection.18.3.1) 1486 0 R (subsection.18.3.2) 1490 0 R (subsection.18.3.3) 1494 0 R (subsection.18.3.4) 1498 0 R (subsection.18.3.5) 1502 0 R]
-/Limits [(subsection.17.6.3) (subsection.18.3.5)]
+/Names [(subsection.22.10.5) 2090 0 R (subsection.22.10.6) 2094 0 R (subsection.22.10.7) 2098 0 R (subsection.22.10.8) 2102 0 R (subsection.22.10.9) 2106 0 R (subsection.22.11.1) 2142 0 R]
+/Limits [(subsection.22.10.5) (subsection.22.11.1)]
 >> endobj
 18271 0 obj <<
-/Names [(subsection.18.3.6) 1506 0 R (subsection.18.5.1) 1518 0 R (subsection.18.5.2) 1522 0 R (subsection.19.3.1) 1542 0 R (subsection.19.3.2) 1546 0 R (subsection.19.3.3) 1550 0 R]
-/Limits [(subsection.18.3.6) (subsection.19.3.3)]
+/Names [(subsection.22.11.2) 2146 0 R (subsection.22.11.3) 2150 0 R (subsection.22.11.4) 2154 0 R (subsection.22.11.5) 2158 0 R (subsection.22.11.6) 2162 0 R (subsection.22.12.1) 2170 0 R]
+/Limits [(subsection.22.11.2) (subsection.22.12.1)]
 >> endobj
 18272 0 obj <<
-/Names [(subsection.19.4.1) 1558 0 R (subsection.19.4.2) 1562 0 R (subsection.19.6.1) 1574 0 R (subsection.19.6.2) 1578 0 R (subsection.2.3.1) 138 0 R (subsection.2.3.2) 158 0 R]
-/Limits [(subsection.19.4.1) (subsection.2.3.2)]
+/Names [(subsection.22.12.2) 2174 0 R (subsection.22.12.3) 2178 0 R (subsection.22.12.4) 2182 0 R (subsection.22.13.1) 2190 0 R (subsection.22.13.2) 2226 0 R (subsection.22.14.1) 2234 0 R]
+/Limits [(subsection.22.12.2) (subsection.22.14.1)]
 >> endobj
 18273 0 obj <<
-/Names [(subsection.2.3.3) 166 0 R (subsection.20.2.1) 1594 0 R (subsection.21.14.1) 1826 0 R (subsection.21.14.2) 1830 0 R (subsection.21.2.1) 1610 0 R (subsection.21.2.2) 1614 0 R]
-/Limits [(subsection.2.3.3) (subsection.21.2.2)]
+/Names [(subsection.22.14.2) 2238 0 R (subsection.22.14.3) 2242 0 R (subsection.22.14.4) 2246 0 R (subsection.22.14.5) 2250 0 R (subsection.22.14.6) 2254 0 R (subsection.22.14.7) 2258 0 R]
+/Limits [(subsection.22.14.2) (subsection.22.14.7)]
 >> endobj
 18274 0 obj <<
-/Names [(subsection.21.3.1) 1622 0 R (subsection.21.3.2) 1626 0 R (subsection.21.4.1) 1634 0 R (subsection.21.5.1) 1666 0 R (subsection.21.5.2) 1670 0 R (subsection.21.5.3) 1674 0 R]
-/Limits [(subsection.21.3.1) (subsection.21.5.3)]
+/Names [(subsection.22.16.1) 2270 0 R (subsection.22.16.2) 2274 0 R (subsection.22.16.3) 2278 0 R (subsection.22.19.1) 2294 0 R (subsection.22.19.10) 2330 0 R (subsection.22.19.11) 2334 0 R]
+/Limits [(subsection.22.16.1) (subsection.22.19.11)]
 >> endobj
 18275 0 obj <<
-/Names [(subsection.21.5.4) 1678 0 R (subsection.21.5.5) 1682 0 R (subsection.21.6.1) 1690 0 R (subsection.21.6.2) 1694 0 R (subsection.21.7.1) 1738 0 R (subsection.21.7.2) 1742 0 R]
-/Limits [(subsection.21.5.4) (subsection.21.7.2)]
+/Names [(subsection.22.19.12) 2338 0 R (subsection.22.19.13) 2342 0 R (subsection.22.19.14) 2346 0 R (subsection.22.19.15) 2350 0 R (subsection.22.19.16) 2354 0 R (subsection.22.19.17) 2358 0 R]
+/Limits [(subsection.22.19.12) (subsection.22.19.17)]
 >> endobj
 18276 0 obj <<
-/Names [(subsection.21.7.3) 1746 0 R (subsection.21.7.4) 1750 0 R (subsection.21.8.1) 1758 0 R (subsection.21.8.2) 1762 0 R (subsection.21.8.3) 1766 0 R (subsection.21.8.4) 1770 0 R]
-/Limits [(subsection.21.7.3) (subsection.21.8.4)]
+/Names [(subsection.22.19.18) 2362 0 R (subsection.22.19.19) 2366 0 R (subsection.22.19.2) 2298 0 R (subsection.22.19.20) 2370 0 R (subsection.22.19.3) 2302 0 R (subsection.22.19.4) 2306 0 R]
+/Limits [(subsection.22.19.18) (subsection.22.19.4)]
 >> endobj
 18277 0 obj <<
-/Names [(subsection.21.8.5) 1774 0 R (subsection.21.8.6) 1778 0 R (subsection.21.8.7) 1782 0 R (subsection.21.9.1) 1790 0 R (subsection.21.9.2) 1794 0 R (subsection.21.9.3) 1798 0 R]
-/Limits [(subsection.21.8.5) (subsection.21.9.3)]
+/Names [(subsection.22.19.5) 2310 0 R (subsection.22.19.6) 2314 0 R (subsection.22.19.7) 2318 0 R (subsection.22.19.8) 2322 0 R (subsection.22.19.9) 2326 0 R (subsection.22.2.1) 1854 0 R]
+/Limits [(subsection.22.19.5) (subsection.22.2.1)]
 >> endobj
 18278 0 obj <<
-/Names [(subsection.21.9.4) 1802 0 R (subsection.22.1.1) 1842 0 R (subsection.22.1.2) 1846 0 R (subsection.22.10.1) 2074 0 R (subsection.22.10.10) 2110 0 R (subsection.22.10.11) 2114 0 R]
-/Limits [(subsection.21.9.4) (subsection.22.10.11)]
+/Names [(subsection.22.2.2) 1858 0 R (subsection.22.2.3) 1862 0 R (subsection.22.3.1) 1870 0 R (subsection.22.3.2) 1874 0 R (subsection.22.3.3) 1878 0 R (subsection.22.3.4) 1882 0 R]
+/Limits [(subsection.22.2.2) (subsection.22.3.4)]
 >> endobj
 18279 0 obj <<
-/Names [(subsection.22.10.12) 2118 0 R (subsection.22.10.13) 2122 0 R (subsection.22.10.14) 2126 0 R (subsection.22.10.15) 2130 0 R (subsection.22.10.16) 2134 0 R (subsection.22.10.2) 2078 0 R]
-/Limits [(subsection.22.10.12) (subsection.22.10.2)]
+/Names [(subsection.22.3.5) 1886 0 R (subsection.22.4.1) 1894 0 R (subsection.22.4.2) 1898 0 R (subsection.22.4.3) 1902 0 R (subsection.22.4.4) 1906 0 R (subsection.22.4.5) 1910 0 R]
+/Limits [(subsection.22.3.5) (subsection.22.4.5)]
 >> endobj
 18280 0 obj <<
-/Names [(subsection.22.10.3) 2082 0 R (subsection.22.10.4) 2086 0 R (subsection.22.10.5) 2090 0 R (subsection.22.10.6) 2094 0 R (subsection.22.10.7) 2098 0 R (subsection.22.10.8) 2102 0 R]
-/Limits [(subsection.22.10.3) (subsection.22.10.8)]
+/Names [(subsection.22.4.6) 1914 0 R (subsection.22.4.7) 1918 0 R (subsection.22.4.8) 1922 0 R (subsection.22.5.1) 1930 0 R (subsection.22.5.10) 1970 0 R (subsection.22.5.11) 1974 0 R]
+/Limits [(subsection.22.4.6) (subsection.22.5.11)]
 >> endobj
 18281 0 obj <<
-/Names [(subsection.22.10.9) 2106 0 R (subsection.22.11.1) 2142 0 R (subsection.22.11.2) 2146 0 R (subsection.22.11.3) 2150 0 R (subsection.22.11.4) 2154 0 R (subsection.22.11.5) 2158 0 R]
-/Limits [(subsection.22.10.9) (subsection.22.11.5)]
+/Names [(subsection.22.5.12) 1978 0 R (subsection.22.5.13) 1982 0 R (subsection.22.5.14) 1986 0 R (subsection.22.5.15) 1990 0 R (subsection.22.5.16) 1994 0 R (subsection.22.5.17) 1998 0 R]
+/Limits [(subsection.22.5.12) (subsection.22.5.17)]
 >> endobj
 18282 0 obj <<
-/Names [(subsection.22.11.6) 2162 0 R (subsection.22.12.1) 2170 0 R (subsection.22.12.2) 2174 0 R (subsection.22.12.3) 2178 0 R (subsection.22.12.4) 2182 0 R (subsection.22.13.1) 2190 0 R]
-/Limits [(subsection.22.11.6) (subsection.22.13.1)]
+/Names [(subsection.22.5.18) 2002 0 R (subsection.22.5.19) 2006 0 R (subsection.22.5.2) 1934 0 R (subsection.22.5.3) 1938 0 R (subsection.22.5.4) 1946 0 R (subsection.22.5.5) 1950 0 R]
+/Limits [(subsection.22.5.18) (subsection.22.5.5)]
 >> endobj
 18283 0 obj <<
-/Names [(subsection.22.13.2) 2226 0 R (subsection.22.14.1) 2234 0 R (subsection.22.14.2) 2238 0 R (subsection.22.14.3) 2242 0 R (subsection.22.14.4) 2246 0 R (subsection.22.14.5) 2250 0 R]
-/Limits [(subsection.22.13.2) (subsection.22.14.5)]
+/Names [(subsection.22.5.6) 1954 0 R (subsection.22.5.7) 1958 0 R (subsection.22.5.8) 1962 0 R (subsection.22.5.9) 1966 0 R (subsection.22.6.1) 2014 0 R (subsection.22.6.2) 2018 0 R]
+/Limits [(subsection.22.5.6) (subsection.22.6.2)]
 >> endobj
 18284 0 obj <<
-/Names [(subsection.22.14.6) 2254 0 R (subsection.22.14.7) 2258 0 R (subsection.22.16.1) 2270 0 R (subsection.22.16.2) 2274 0 R (subsection.22.16.3) 2278 0 R (subsection.22.19.1) 2294 0 R]
-/Limits [(subsection.22.14.6) (subsection.22.19.1)]
+/Names [(subsection.22.6.3) 2022 0 R (subsection.22.7.1) 2030 0 R (subsection.22.7.2) 2034 0 R (subsection.22.8.1) 2042 0 R (subsection.22.8.2) 2046 0 R (subsection.22.9.1) 2054 0 R]
+/Limits [(subsection.22.6.3) (subsection.22.9.1)]
 >> endobj
 18285 0 obj <<
-/Names [(subsection.22.19.10) 2330 0 R (subsection.22.19.11) 2334 0 R (subsection.22.19.12) 2338 0 R (subsection.22.19.13) 2342 0 R (subsection.22.19.14) 2346 0 R (subsection.22.19.15) 2350 0 R]
-/Limits [(subsection.22.19.10) (subsection.22.19.15)]
+/Names [(subsection.22.9.2) 2058 0 R (subsection.22.9.3) 2062 0 R (subsection.22.9.4) 2066 0 R (subsection.23.3.1) 2394 0 R (subsection.23.3.2) 2398 0 R (subsection.23.3.3) 2402 0 R]
+/Limits [(subsection.22.9.2) (subsection.23.3.3)]
 >> endobj
 18286 0 obj <<
-/Names [(subsection.22.19.16) 2354 0 R (subsection.22.19.17) 2358 0 R (subsection.22.19.18) 2362 0 R (subsection.22.19.19) 2366 0 R (subsection.22.19.2) 2298 0 R (subsection.22.19.20) 2370 0 R]
-/Limits [(subsection.22.19.16) (subsection.22.19.20)]
+/Names [(subsection.23.3.4) 2410 0 R (subsection.23.3.5) 2414 0 R (subsection.23.3.6) 2418 0 R (subsection.23.3.7) 2422 0 R (subsection.23.4.1) 2434 0 R (subsection.23.4.2) 2438 0 R]
+/Limits [(subsection.23.3.4) (subsection.23.4.2)]
 >> endobj
 18287 0 obj <<
-/Names [(subsection.22.19.3) 2302 0 R (subsection.22.19.4) 2306 0 R (subsection.22.19.5) 2310 0 R (subsection.22.19.6) 2314 0 R (subsection.22.19.7) 2318 0 R (subsection.22.19.8) 2322 0 R]
-/Limits [(subsection.22.19.3) (subsection.22.19.8)]
+/Names [(subsection.23.4.3) 2442 0 R (subsection.24.3.1) 2462 0 R (subsection.24.3.2) 2466 0 R (subsection.24.4.1) 2474 0 R (subsection.24.4.2) 2478 0 R (subsection.24.4.3) 2482 0 R]
+/Limits [(subsection.23.4.3) (subsection.24.4.3)]
 >> endobj
 18288 0 obj <<
-/Names [(subsection.22.19.9) 2326 0 R (subsection.22.2.1) 1854 0 R (subsection.22.2.2) 1858 0 R (subsection.22.2.3) 1862 0 R (subsection.22.3.1) 1870 0 R (subsection.22.3.2) 1874 0 R]
-/Limits [(subsection.22.19.9) (subsection.22.3.2)]
+/Names [(subsection.24.4.4) 2486 0 R (subsection.24.4.5) 2490 0 R (subsection.24.4.6) 2494 0 R (subsection.24.5.1) 2502 0 R (subsection.24.5.2) 2506 0 R (subsection.24.5.3) 2510 0 R]
+/Limits [(subsection.24.4.4) (subsection.24.5.3)]
 >> endobj
 18289 0 obj <<
-/Names [(subsection.22.3.3) 1878 0 R (subsection.22.3.4) 1882 0 R (subsection.22.3.5) 1886 0 R (subsection.22.4.1) 1894 0 R (subsection.22.4.2) 1898 0 R (subsection.22.4.3) 1902 0 R]
-/Limits [(subsection.22.3.3) (subsection.22.4.3)]
+/Names [(subsection.24.7.1) 2550 0 R (subsection.24.7.2) 2554 0 R (subsection.25.3.1) 2574 0 R (subsection.25.3.2) 2578 0 R (subsection.25.4.1) 2586 0 R (subsection.25.4.2) 2590 0 R]
+/Limits [(subsection.24.7.1) (subsection.25.4.2)]
 >> endobj
 18290 0 obj <<
-/Names [(subsection.22.4.4) 1906 0 R (subsection.22.4.5) 1910 0 R (subsection.22.4.6) 1914 0 R (subsection.22.4.7) 1918 0 R (subsection.22.4.8) 1922 0 R (subsection.22.5.1) 1930 0 R]
-/Limits [(subsection.22.4.4) (subsection.22.5.1)]
+/Names [(subsection.26.2.1) 2606 0 R (subsection.26.2.2) 2610 0 R (subsection.26.2.3) 2618 0 R (subsection.26.4.1) 2638 0 R (subsection.26.4.2) 2642 0 R (subsection.26.4.3) 2646 0 R]
+/Limits [(subsection.26.2.1) (subsection.26.4.3)]
 >> endobj
 18291 0 obj <<
-/Names [(subsection.22.5.10) 1970 0 R (subsection.22.5.11) 1974 0 R (subsection.22.5.12) 1978 0 R (subsection.22.5.13) 1982 0 R (subsection.22.5.14) 1986 0 R (subsection.22.5.15) 1990 0 R]
-/Limits [(subsection.22.5.10) (subsection.22.5.15)]
+/Names [(subsection.26.6.1) 2658 0 R (subsection.27.2.1) 2674 0 R (subsection.27.2.2) 2694 0 R (subsection.27.2.3) 2710 0 R (subsection.27.2.4) 2714 0 R (subsection.27.2.5) 2718 0 R]
+/Limits [(subsection.26.6.1) (subsection.27.2.5)]
 >> endobj
 18292 0 obj <<
-/Names [(subsection.22.5.16) 1994 0 R (subsection.22.5.17) 1998 0 R (subsection.22.5.18) 2002 0 R (subsection.22.5.19) 2006 0 R (subsection.22.5.2) 1934 0 R (subsection.22.5.3) 1938 0 R]
-/Limits [(subsection.22.5.16) (subsection.22.5.3)]
+/Names [(subsection.27.5.1) 2750 0 R (subsection.27.5.2) 2758 0 R (subsection.27.5.3) 2762 0 R (subsection.27.6.1) 2770 0 R (subsection.27.6.2) 2774 0 R (subsection.27.6.3) 2778 0 R]
+/Limits [(subsection.27.5.1) (subsection.27.6.3)]
 >> endobj
 18293 0 obj <<
-/Names [(subsection.22.5.4) 1946 0 R (subsection.22.5.5) 1950 0 R (subsection.22.5.6) 1954 0 R (subsection.22.5.7) 1958 0 R (subsection.22.5.8) 1962 0 R (subsection.22.5.9) 1966 0 R]
-/Limits [(subsection.22.5.4) (subsection.22.5.9)]
+/Names [(subsection.27.6.4) 2782 0 R (subsection.28.2.1) 2798 0 R (subsection.28.2.2) 2806 0 R (subsection.28.2.3) 2818 0 R (subsection.28.2.4) 2822 0 R (subsection.28.2.5) 2826 0 R]
+/Limits [(subsection.27.6.4) (subsection.28.2.5)]
 >> endobj
 18294 0 obj <<
-/Names [(subsection.22.6.1) 2014 0 R (subsection.22.6.2) 2018 0 R (subsection.22.6.3) 2022 0 R (subsection.22.7.1) 2030 0 R (subsection.22.7.2) 2034 0 R (subsection.22.8.1) 2042 0 R]
-/Limits [(subsection.22.6.1) (subsection.22.8.1)]
+/Names [(subsection.28.3.1) 2850 0 R (subsection.28.3.2) 2854 0 R (subsection.29.3.1) 2874 0 R (subsection.29.3.2) 2878 0 R (subsection.29.3.3) 2882 0 R (subsection.29.3.4) 2886 0 R]
+/Limits [(subsection.28.3.1) (subsection.29.3.4)]
 >> endobj
 18295 0 obj <<
-/Names [(subsection.22.8.2) 2046 0 R (subsection.22.9.1) 2054 0 R (subsection.22.9.2) 2058 0 R (subsection.22.9.3) 2062 0 R (subsection.22.9.4) 2066 0 R (subsection.23.3.1) 2394 0 R]
-/Limits [(subsection.22.8.2) (subsection.23.3.1)]
+/Names [(subsection.29.4.1) 2894 0 R (subsection.29.4.2) 2898 0 R (subsection.29.4.3) 2902 0 R (subsection.29.4.4) 2906 0 R (subsection.29.4.5) 2910 0 R (subsection.29.5.1) 2918 0 R]
+/Limits [(subsection.29.4.1) (subsection.29.5.1)]
 >> endobj
 18296 0 obj <<
-/Names [(subsection.23.3.2) 2398 0 R (subsection.23.3.3) 2402 0 R (subsection.23.3.4) 2410 0 R (subsection.23.3.5) 2414 0 R (subsection.23.3.6) 2418 0 R (subsection.23.3.7) 2422 0 R]
-/Limits [(subsection.23.3.2) (subsection.23.3.7)]
+/Names [(subsection.29.5.2) 2922 0 R (subsection.29.5.3) 2926 0 R (subsection.3.3.1) 202 0 R (subsection.3.3.2) 210 0 R (subsection.3.3.3) 218 0 R (subsection.3.3.4) 226 0 R]
+/Limits [(subsection.29.5.2) (subsection.3.3.4)]
 >> endobj
 18297 0 obj <<
-/Names [(subsection.23.4.1) 2434 0 R (subsection.23.4.2) 2438 0 R (subsection.23.4.3) 2442 0 R (subsection.24.3.1) 2462 0 R (subsection.24.3.2) 2466 0 R (subsection.24.4.1) 2474 0 R]
-/Limits [(subsection.23.4.1) (subsection.24.4.1)]
+/Names [(subsection.3.3.5) 234 0 R (subsection.3.5.1) 250 0 R (subsection.3.5.2) 254 0 R (subsection.3.5.3) 258 0 R (subsection.3.5.4) 262 0 R (subsection.3.5.5) 266 0 R]
+/Limits [(subsection.3.3.5) (subsection.3.5.5)]
 >> endobj
 18298 0 obj <<
-/Names [(subsection.24.4.2) 2478 0 R (subsection.24.4.3) 2482 0 R (subsection.24.4.4) 2486 0 R (subsection.24.4.5) 2490 0 R (subsection.24.4.6) 2494 0 R (subsection.24.5.1) 2502 0 R]
-/Limits [(subsection.24.4.2) (subsection.24.5.1)]
+/Names [(subsection.30.5.1) 2954 0 R (subsection.30.5.2) 2958 0 R (subsection.30.5.3) 2962 0 R (subsection.30.6.1) 2970 0 R (subsection.31.2.1) 2986 0 R (subsection.31.2.2) 2990 0 R]
+/Limits [(subsection.30.5.1) (subsection.31.2.2)]
 >> endobj
 18299 0 obj <<
-/Names [(subsection.24.5.2) 2506 0 R (subsection.24.5.3) 2510 0 R (subsection.24.7.1) 2550 0 R (subsection.24.7.2) 2554 0 R (subsection.25.3.1) 2574 0 R (subsection.25.3.2) 2578 0 R]
-/Limits [(subsection.24.5.2) (subsection.25.3.2)]
+/Names [(subsection.31.2.3) 2994 0 R (subsection.31.2.4) 2998 0 R (subsection.32.2.1) 3014 0 R (subsection.32.2.2) 3018 0 R (subsection.32.2.3) 3050 0 R (subsection.32.2.4) 3054 0 R]
+/Limits [(subsection.31.2.3) (subsection.32.2.4)]
 >> endobj
 18300 0 obj <<
-/Names [(subsection.25.4.1) 2586 0 R (subsection.25.4.2) 2590 0 R (subsection.26.2.1) 2606 0 R (subsection.26.2.2) 2610 0 R (subsection.26.2.3) 2618 0 R (subsection.26.4.1) 2638 0 R]
-/Limits [(subsection.25.4.1) (subsection.26.4.1)]
+/Names [(subsection.32.2.5) 3058 0 R (subsection.32.2.6) 3062 0 R (subsection.34.1.1) 3078 0 R (subsection.34.1.2) 3082 0 R (subsection.34.1.3) 3086 0 R (subsection.35.1.1) 3102 0 R]
+/Limits [(subsection.32.2.5) (subsection.35.1.1)]
 >> endobj
 18301 0 obj <<
-/Names [(subsection.26.4.2) 2642 0 R (subsection.26.4.3) 2646 0 R (subsection.26.6.1) 2658 0 R (subsection.27.2.1) 2674 0 R (subsection.27.2.2) 2694 0 R (subsection.27.2.3) 2710 0 R]
-/Limits [(subsection.26.4.2) (subsection.27.2.3)]
+/Names [(subsection.35.1.2) 3106 0 R (subsection.35.1.3) 3110 0 R (subsection.35.2.1) 3118 0 R (subsection.35.2.2) 3122 0 R (subsection.35.2.3) 3142 0 R (subsection.36.1.1) 3170 0 R]
+/Limits [(subsection.35.1.2) (subsection.36.1.1)]
 >> endobj
 18302 0 obj <<
-/Names [(subsection.27.2.4) 2714 0 R (subsection.27.2.5) 2718 0 R (subsection.27.5.1) 2750 0 R (subsection.27.5.2) 2758 0 R (subsection.27.5.3) 2762 0 R (subsection.27.6.1) 2770 0 R]
-/Limits [(subsection.27.2.4) (subsection.27.6.1)]
+/Names [(subsection.36.1.2) 3194 0 R (subsection.36.2.1) 3202 0 R (subsection.36.2.2) 3206 0 R (subsection.37.2.1) 3222 0 R (subsection.37.2.2) 3234 0 R (subsection.37.2.3) 3238 0 R]
+/Limits [(subsection.36.1.2) (subsection.37.2.3)]
 >> endobj
 18303 0 obj <<
-/Names [(subsection.27.6.2) 2774 0 R (subsection.27.6.3) 2778 0 R (subsection.27.6.4) 2782 0 R (subsection.28.2.1) 2798 0 R (subsection.28.2.2) 2806 0 R (subsection.28.2.3) 2818 0 R]
-/Limits [(subsection.27.6.2) (subsection.28.2.3)]
+/Names [(subsection.37.2.4) 3242 0 R (subsection.37.3.1) 3250 0 R (subsection.37.3.2) 3254 0 R (subsection.37.3.3) 3258 0 R (subsection.37.3.4) 3262 0 R (subsection.37.3.5) 3266 0 R]
+/Limits [(subsection.37.2.4) (subsection.37.3.5)]
 >> endobj
 18304 0 obj <<
-/Names [(subsection.28.2.4) 2822 0 R (subsection.28.2.5) 2826 0 R (subsection.28.3.1) 2850 0 R (subsection.28.3.2) 2854 0 R (subsection.29.3.1) 2874 0 R (subsection.29.3.2) 2878 0 R]
-/Limits [(subsection.28.2.4) (subsection.29.3.2)]
+/Names [(subsection.37.3.6) 3270 0 R (subsection.37.3.7) 3274 0 R (subsection.37.3.8) 3278 0 R (subsection.39.1.1) 3310 0 R (subsection.39.1.2) 3314 0 R (subsection.39.1.3) 3318 0 R]
+/Limits [(subsection.37.3.6) (subsection.39.1.3)]
 >> endobj
 18305 0 obj <<
-/Names [(subsection.29.3.3) 2882 0 R (subsection.29.3.4) 2886 0 R (subsection.29.4.1) 2894 0 R (subsection.29.4.2) 2898 0 R (subsection.29.4.3) 2902 0 R (subsection.29.4.4) 2906 0 R]
-/Limits [(subsection.29.3.3) (subsection.29.4.4)]
+/Names [(subsection.39.1.4) 3322 0 R (subsection.4.3.1) 286 0 R (subsection.4.3.2) 290 0 R (subsection.4.6.1) 306 0 R (subsection.4.6.2) 322 0 R (subsection.4.7.1) 330 0 R]
+/Limits [(subsection.39.1.4) (subsection.4.7.1)]
 >> endobj
 18306 0 obj <<
-/Names [(subsection.29.4.5) 2910 0 R (subsection.29.5.1) 2918 0 R (subsection.29.5.2) 2922 0 R (subsection.29.5.3) 2926 0 R (subsection.3.3.1) 202 0 R (subsection.3.3.2) 210 0 R]
-/Limits [(subsection.29.4.5) (subsection.3.3.2)]
+/Names [(subsection.4.7.2) 334 0 R (subsection.4.7.3) 338 0 R (subsection.4.7.4) 342 0 R (subsection.4.7.5) 346 0 R (subsection.4.7.6) 350 0 R (subsection.4.7.7) 354 0 R]
+/Limits [(subsection.4.7.2) (subsection.4.7.7)]
 >> endobj
 18307 0 obj <<
-/Names [(subsection.3.3.3) 218 0 R (subsection.3.3.4) 226 0 R (subsection.3.3.5) 234 0 R (subsection.3.5.1) 250 0 R (subsection.3.5.2) 254 0 R (subsection.3.5.3) 258 0 R]
-/Limits [(subsection.3.3.3) (subsection.3.5.3)]
+/Names [(subsection.40.3.1) 3362 0 R (subsection.41.1.1) 3390 0 R (subsection.41.1.2) 3394 0 R (subsection.41.4.1) 3418 0 R (subsection.41.5.1) 3438 0 R (subsection.41.5.2) 3442 0 R]
+/Limits [(subsection.40.3.1) (subsection.41.5.2)]
 >> endobj
 18308 0 obj <<
-/Names [(subsection.3.5.4) 262 0 R (subsection.3.5.5) 266 0 R (subsection.30.5.1) 2954 0 R (subsection.30.5.2) 2958 0 R (subsection.30.5.3) 2962 0 R (subsection.30.6.1) 2970 0 R]
-/Limits [(subsection.3.5.4) (subsection.30.6.1)]
+/Names [(subsection.42.6.1) 3482 0 R (subsection.42.6.2) 3486 0 R (subsection.43.2.1) 3502 0 R (subsection.43.2.2) 3506 0 R (subsection.43.2.3) 3510 0 R (subsection.43.3.1) 3518 0 R]
+/Limits [(subsection.42.6.1) (subsection.43.3.1)]
 >> endobj
 18309 0 obj <<
-/Names [(subsection.31.2.1) 2986 0 R (subsection.31.2.2) 2990 0 R (subsection.31.2.3) 2994 0 R (subsection.31.2.4) 2998 0 R (subsection.32.2.1) 3014 0 R (subsection.32.2.2) 3018 0 R]
-/Limits [(subsection.31.2.1) (subsection.32.2.2)]
+/Names [(subsection.43.3.2) 3522 0 R (subsection.43.3.3) 3526 0 R (subsection.43.3.4) 3530 0 R (subsection.43.3.5) 3534 0 R (subsection.43.3.6) 3538 0 R (subsection.43.4.1) 3546 0 R]
+/Limits [(subsection.43.3.2) (subsection.43.4.1)]
 >> endobj
 18310 0 obj <<
-/Names [(subsection.32.2.3) 3050 0 R (subsection.32.2.4) 3054 0 R (subsection.32.2.5) 3058 0 R (subsection.32.2.6) 3062 0 R (subsection.34.1.1) 3078 0 R (subsection.34.1.2) 3082 0 R]
-/Limits [(subsection.32.2.3) (subsection.34.1.2)]
+/Names [(subsection.45.2.1) 3622 0 R (subsection.45.2.2) 3626 0 R (subsection.45.2.3) 3630 0 R (subsection.47.2.1) 3666 0 R (subsection.47.2.2) 3670 0 R (subsection.5.2.1) 370 0 R]
+/Limits [(subsection.45.2.1) (subsection.5.2.1)]
 >> endobj
 18311 0 obj <<
-/Names [(subsection.34.1.3) 3086 0 R (subsection.35.1.1) 3102 0 R (subsection.35.1.2) 3106 0 R (subsection.35.1.3) 3110 0 R (subsection.35.2.1) 3118 0 R (subsection.35.2.2) 3122 0 R]
-/Limits [(subsection.34.1.3) (subsection.35.2.2)]
+/Names [(subsection.5.2.2) 378 0 R (subsection.5.2.3) 382 0 R (subsection.5.2.4) 386 0 R (subsection.5.2.5) 390 0 R (subsection.5.3.1) 406 0 R (subsection.5.4.1) 414 0 R]
+/Limits [(subsection.5.2.2) (subsection.5.4.1)]
 >> endobj
 18312 0 obj <<
-/Names [(subsection.35.2.3) 3142 0 R (subsection.36.1.1) 3170 0 R (subsection.36.1.2) 3194 0 R (subsection.36.2.1) 3202 0 R (subsection.36.2.2) 3206 0 R (subsection.37.2.1) 3222 0 R]
-/Limits [(subsection.35.2.3) (subsection.37.2.1)]
+/Names [(subsection.5.4.2) 418 0 R (subsection.5.4.3) 422 0 R (subsection.5.4.4) 426 0 R (subsection.6.2.1) 442 0 R (subsection.6.2.2) 446 0 R (subsection.6.2.3) 450 0 R]
+/Limits [(subsection.5.4.2) (subsection.6.2.3)]
 >> endobj
 18313 0 obj <<
-/Names [(subsection.37.2.2) 3234 0 R (subsection.37.2.3) 3238 0 R (subsection.37.2.4) 3242 0 R (subsection.37.3.1) 3250 0 R (subsection.37.3.2) 3254 0 R (subsection.37.3.3) 3258 0 R]
-/Limits [(subsection.37.2.2) (subsection.37.3.3)]
+/Names [(subsection.6.2.4) 454 0 R (subsection.6.3.1) 474 0 R (subsection.6.3.2) 478 0 R (subsection.6.4.1) 486 0 R (subsection.6.4.2) 490 0 R (subsection.6.4.3) 494 0 R]
+/Limits [(subsection.6.2.4) (subsection.6.4.3)]
 >> endobj
 18314 0 obj <<
-/Names [(subsection.37.3.4) 3262 0 R (subsection.37.3.5) 3266 0 R (subsection.37.3.6) 3270 0 R (subsection.37.3.7) 3274 0 R (subsection.37.3.8) 3278 0 R (subsection.39.1.1) 3310 0 R]
-/Limits [(subsection.37.3.4) (subsection.39.1.1)]
+/Names [(subsection.6.4.4) 502 0 R (subsection.6.4.5) 506 0 R (subsection.6.4.6) 510 0 R (subsection.6.6.1) 522 0 R (subsection.6.6.2) 526 0 R (subsection.6.6.3) 530 0 R]
+/Limits [(subsection.6.4.4) (subsection.6.6.3)]
 >> endobj
 18315 0 obj <<
-/Names [(subsection.39.1.2) 3314 0 R (subsection.39.1.3) 3318 0 R (subsection.39.1.4) 3322 0 R (subsection.4.3.1) 286 0 R (subsection.4.3.2) 290 0 R (subsection.4.6.1) 306 0 R]
-/Limits [(subsection.39.1.2) (subsection.4.6.1)]
+/Names [(subsection.7.3.1) 550 0 R (subsection.7.3.2) 554 0 R (subsection.8.2.1) 574 0 R (subsection.8.2.2) 590 0 R (subsection.8.2.3) 594 0 R (subsection.9.2.1) 622 0 R]
+/Limits [(subsection.7.3.1) (subsection.9.2.1)]
 >> endobj
 18316 0 obj <<
-/Names [(subsection.4.6.2) 322 0 R (subsection.4.7.1) 330 0 R (subsection.4.7.2) 334 0 R (subsection.4.7.3) 338 0 R (subsection.4.7.4) 342 0 R (subsection.4.7.5) 346 0 R]
-/Limits [(subsection.4.6.2) (subsection.4.7.5)]
+/Names [(subsection.9.2.2) 626 0 R (subsection.9.2.3) 630 0 R (subsection.9.2.4) 634 0 R (subsection.9.2.5) 638 0 R (subsubsection.1.2.4.1) 78 0 R (subsubsection.10.7.3.1) 750 0 R]
+/Limits [(subsection.9.2.2) (subsubsection.10.7.3.1)]
 >> endobj
 18317 0 obj <<
-/Names [(subsection.4.7.6) 350 0 R (subsection.4.7.7) 354 0 R (subsection.40.3.1) 3362 0 R (subsection.41.1.1) 3390 0 R (subsection.41.1.2) 3394 0 R (subsection.41.4.1) 3418 0 R]
-/Limits [(subsection.4.7.6) (subsection.41.4.1)]
+/Names [(subsubsection.11.2.1.1) 802 0 R (subsubsection.11.2.1.2) 806 0 R (subsubsection.11.2.4.1) 822 0 R (subsubsection.11.3.2.1) 842 0 R (subsubsection.11.3.2.2) 846 0 R (subsubsection.11.4.4.1) 870 0 R]
+/Limits [(subsubsection.11.2.1.1) (subsubsection.11.4.4.1)]
 >> endobj
 18318 0 obj <<
-/Names [(subsection.41.5.1) 3438 0 R (subsection.41.5.2) 3442 0 R (subsection.42.6.1) 3482 0 R (subsection.42.6.2) 3486 0 R (subsection.43.2.1) 3502 0 R (subsection.43.2.2) 3506 0 R]
-/Limits [(subsection.41.5.1) (subsection.43.2.2)]
+/Names [(subsubsection.11.4.4.10) 906 0 R (subsubsection.11.4.4.11) 910 0 R (subsubsection.11.4.4.2) 874 0 R (subsubsection.11.4.4.3) 878 0 R (subsubsection.11.4.4.4) 882 0 R (subsubsection.11.4.4.5) 886 0 R]
+/Limits [(subsubsection.11.4.4.10) (subsubsection.11.4.4.5)]
 >> endobj
 18319 0 obj <<
-/Names [(subsection.43.2.3) 3510 0 R (subsection.43.3.1) 3518 0 R (subsection.43.3.2) 3522 0 R (subsection.43.3.3) 3526 0 R (subsection.43.3.4) 3530 0 R (subsection.43.3.5) 3534 0 R]
-/Limits [(subsection.43.2.3) (subsection.43.3.5)]
+/Names [(subsubsection.11.4.4.6) 890 0 R (subsubsection.11.4.4.7) 894 0 R (subsubsection.11.4.4.8) 898 0 R (subsubsection.11.4.4.9) 902 0 R (subsubsection.12.2.3.1) 950 0 R (subsubsection.13.3.1.1) 1006 0 R]
+/Limits [(subsubsection.11.4.4.6) (subsubsection.13.3.1.1)]
 >> endobj
 18320 0 obj <<
-/Names [(subsection.43.3.6) 3538 0 R (subsection.43.4.1) 3546 0 R (subsection.45.2.1) 3622 0 R (subsection.45.2.2) 3626 0 R (subsection.45.2.3) 3630 0 R (subsection.47.2.1) 3666 0 R]
-/Limits [(subsection.43.3.6) (subsection.47.2.1)]
+/Names [(subsubsection.13.3.1.2) 1010 0 R (subsubsection.13.3.1.3) 1014 0 R (subsubsection.13.3.1.4) 1018 0 R (subsubsection.13.3.3.1) 1030 0 R (subsubsection.13.8.3.1) 1090 0 R (subsubsection.13.8.3.2) 1094 0 R]
+/Limits [(subsubsection.13.3.1.2) (subsubsection.13.8.3.2)]
 >> endobj
 18321 0 obj <<
-/Names [(subsection.47.2.2) 3670 0 R (subsection.5.2.1) 370 0 R (subsection.5.2.2) 378 0 R (subsection.5.2.3) 382 0 R (subsection.5.2.4) 386 0 R (subsection.5.2.5) 390 0 R]
-/Limits [(subsection.47.2.2) (subsection.5.2.5)]
+/Names [(subsubsection.13.8.3.3) 1098 0 R (subsubsection.13.8.3.4) 1102 0 R (subsubsection.14.2.1.1) 1174 0 R (subsubsection.14.2.1.2) 1178 0 R (subsubsection.14.2.4.1) 1194 0 R (subsubsection.14.2.4.2) 1198 0 R]
+/Limits [(subsubsection.13.8.3.3) (subsubsection.14.2.4.2)]
 >> endobj
 18322 0 obj <<
-/Names [(subsection.5.3.1) 406 0 R (subsection.5.4.1) 414 0 R (subsection.5.4.2) 418 0 R (subsection.5.4.3) 422 0 R (subsection.5.4.4) 426 0 R (subsection.6.2.1) 442 0 R]
-/Limits [(subsection.5.3.1) (subsection.6.2.1)]
+/Names [(subsubsection.16.2.3.1) 1258 0 R (subsubsection.16.4.1.1) 1286 0 R (subsubsection.16.4.1.2) 1290 0 R (subsubsection.16.5.4.1) 1314 0 R (subsubsection.16.5.4.2) 1318 0 R (subsubsection.16.5.8.1) 1338 0 R]
+/Limits [(subsubsection.16.2.3.1) (subsubsection.16.5.8.1)]
 >> endobj
 18323 0 obj <<
-/Names [(subsection.6.2.2) 446 0 R (subsection.6.2.3) 450 0 R (subsection.6.2.4) 454 0 R (subsection.6.3.1) 474 0 R (subsection.6.3.2) 478 0 R (subsection.6.4.1) 486 0 R]
-/Limits [(subsection.6.2.2) (subsection.6.4.1)]
+/Names [(subsubsection.16.5.8.2) 1342 0 R (subsubsection.16.5.8.3) 1346 0 R (subsubsection.17.2.1.1) 1382 0 R (subsubsection.17.2.1.2) 1386 0 R (subsubsection.17.2.1.3) 1390 0 R (subsubsection.17.2.1.4) 1394 0 R]
+/Limits [(subsubsection.16.5.8.2) (subsubsection.17.2.1.4)]
 >> endobj
 18324 0 obj <<
-/Names [(subsection.6.4.2) 490 0 R (subsection.6.4.3) 494 0 R (subsection.6.4.4) 502 0 R (subsection.6.4.5) 506 0 R (subsection.6.4.6) 510 0 R (subsection.6.6.1) 522 0 R]
-/Limits [(subsection.6.4.2) (subsection.6.6.1)]
+/Names [(subsubsection.17.2.1.5) 1398 0 R (subsubsection.17.2.1.6) 1402 0 R (subsubsection.17.2.1.7) 1406 0 R (subsubsection.17.2.1.8) 1410 0 R (subsubsection.17.2.1.9) 1414 0 R (subsubsection.17.3.1.1) 1426 0 R]
+/Limits [(subsubsection.17.2.1.5) (subsubsection.17.3.1.1)]
 >> endobj
 18325 0 obj <<
-/Names [(subsection.6.6.2) 526 0 R (subsection.6.6.3) 530 0 R (subsection.7.3.1) 550 0 R (subsection.7.3.2) 554 0 R (subsection.8.2.1) 574 0 R (subsection.8.2.2) 590 0 R]
-/Limits [(subsection.6.6.2) (subsection.8.2.2)]
+/Names [(subsubsection.17.3.1.2) 1430 0 R (subsubsection.2.3.1.1) 142 0 R (subsubsection.2.3.1.2) 146 0 R (subsubsection.2.3.1.3) 150 0 R (subsubsection.2.3.1.4) 154 0 R (subsubsection.2.3.2.1) 162 0 R]
+/Limits [(subsubsection.17.3.1.2) (subsubsection.2.3.2.1)]
 >> endobj
 18326 0 obj <<
-/Names [(subsection.8.2.3) 594 0 R (subsection.9.2.1) 622 0 R (subsection.9.2.2) 626 0 R (subsection.9.2.3) 630 0 R (subsection.9.2.4) 634 0 R (subsection.9.2.5) 638 0 R]
-/Limits [(subsection.8.2.3) (subsection.9.2.5)]
+/Names [(subsubsection.2.3.3.1) 170 0 R (subsubsection.2.3.3.2) 174 0 R (subsubsection.21.4.1.1) 1638 0 R (subsubsection.21.4.1.2) 1642 0 R (subsubsection.21.4.1.3) 1646 0 R (subsubsection.21.4.1.4) 1650 0 R]
+/Limits [(subsubsection.2.3.3.1) (subsubsection.21.4.1.4)]
 >> endobj
 18327 0 obj <<
-/Names [(subsubsection.1.2.4.1) 78 0 R (subsubsection.10.7.3.1) 750 0 R (subsubsection.11.2.1.1) 802 0 R (subsubsection.11.2.1.2) 806 0 R (subsubsection.11.2.4.1) 822 0 R (subsubsection.11.3.2.1) 842 0 R]
-/Limits [(subsubsection.1.2.4.1) (subsubsection.11.3.2.1)]
+/Names [(subsubsection.21.4.1.5) 1654 0 R (subsubsection.21.4.1.6) 1658 0 R (subsubsection.21.6.2.1) 1698 0 R (subsubsection.21.6.2.2) 1702 0 R (subsubsection.21.6.2.3) 1706 0 R (subsubsection.21.6.2.4) 1710 0 R]
+/Limits [(subsubsection.21.4.1.5) (subsubsection.21.6.2.4)]
 >> endobj
 18328 0 obj <<
-/Names [(subsubsection.11.3.2.2) 846 0 R (subsubsection.11.4.4.1) 870 0 R (subsubsection.11.4.4.10) 906 0 R (subsubsection.11.4.4.11) 910 0 R (subsubsection.11.4.4.2) 874 0 R (subsubsection.11.4.4.3) 878 0 R]
-/Limits [(subsubsection.11.3.2.2) (subsubsection.11.4.4.3)]
+/Names [(subsubsection.21.6.2.5) 1714 0 R (subsubsection.21.6.2.6) 1718 0 R (subsubsection.21.6.2.7) 1722 0 R (subsubsection.21.6.2.8) 1726 0 R (subsubsection.21.6.2.9) 1730 0 R (subsubsection.22.13.1.1) 2194 0 R]
+/Limits [(subsubsection.21.6.2.5) (subsubsection.22.13.1.1)]
 >> endobj
 18329 0 obj <<
-/Names [(subsubsection.11.4.4.4) 882 0 R (subsubsection.11.4.4.5) 886 0 R (subsubsection.11.4.4.6) 890 0 R (subsubsection.11.4.4.7) 894 0 R (subsubsection.11.4.4.8) 898 0 R (subsubsection.11.4.4.9) 902 0 R]
-/Limits [(subsubsection.11.4.4.4) (subsubsection.11.4.4.9)]
+/Names [(subsubsection.22.13.1.2) 2198 0 R (subsubsection.22.13.1.3) 2202 0 R (subsubsection.22.13.1.4) 2206 0 R (subsubsection.22.13.1.5) 2210 0 R (subsubsection.22.13.1.6) 2214 0 R (subsubsection.22.13.1.7) 2218 0 R]
+/Limits [(subsubsection.22.13.1.2) (subsubsection.22.13.1.7)]
 >> endobj
 18330 0 obj <<
-/Names [(subsubsection.12.2.3.1) 950 0 R (subsubsection.13.3.1.1) 1006 0 R (subsubsection.13.3.1.2) 1010 0 R (subsubsection.13.3.1.3) 1014 0 R (subsubsection.13.3.1.4) 1018 0 R (subsubsection.13.3.3.1) 1030 0 R]
-/Limits [(subsubsection.12.2.3.1) (subsubsection.13.3.3.1)]
+/Names [(subsubsection.22.13.1.8) 2222 0 R (subsubsection.22.5.3.1) 1942 0 R (subsubsection.23.3.3.1) 2406 0 R (subsubsection.23.3.7.1) 2426 0 R (subsubsection.24.5.3.1) 2514 0 R (subsubsection.24.5.3.2) 2518 0 R]
+/Limits [(subsubsection.22.13.1.8) (subsubsection.24.5.3.2)]
 >> endobj
 18331 0 obj <<
-/Names [(subsubsection.13.8.3.1) 1090 0 R (subsubsection.13.8.3.2) 1094 0 R (subsubsection.13.8.3.3) 1098 0 R (subsubsection.13.8.3.4) 1102 0 R (subsubsection.14.2.1.1) 1174 0 R (subsubsection.14.2.1.2) 1178 0 R]
-/Limits [(subsubsection.13.8.3.1) (subsubsection.14.2.1.2)]
+/Names [(subsubsection.24.5.3.3) 2522 0 R (subsubsection.24.5.3.4) 2526 0 R (subsubsection.24.5.3.5) 2530 0 R (subsubsection.24.5.3.6) 2534 0 R (subsubsection.24.5.3.7) 2538 0 R (subsubsection.26.2.2.1) 2614 0 R]
+/Limits [(subsubsection.24.5.3.3) (subsubsection.26.2.2.1)]
 >> endobj
 18332 0 obj <<
-/Names [(subsubsection.14.2.4.1) 1194 0 R (subsubsection.14.2.4.2) 1198 0 R (subsubsection.16.2.3.1) 1258 0 R (subsubsection.16.4.1.1) 1286 0 R (subsubsection.16.4.1.2) 1290 0 R (subsubsection.16.5.4.1) 1314 0 R]
-/Limits [(subsubsection.14.2.4.1) (subsubsection.16.5.4.1)]
+/Names [(subsubsection.26.2.3.1) 2622 0 R (subsubsection.26.2.3.2) 2626 0 R (subsubsection.27.2.1.1) 2678 0 R (subsubsection.27.2.1.2) 2682 0 R (subsubsection.27.2.1.3) 2686 0 R (subsubsection.27.2.1.4) 2690 0 R]
+/Limits [(subsubsection.26.2.3.1) (subsubsection.27.2.1.4)]
 >> endobj
 18333 0 obj <<
-/Names [(subsubsection.16.5.4.2) 1318 0 R (subsubsection.16.5.8.1) 1338 0 R (subsubsection.16.5.8.2) 1342 0 R (subsubsection.16.5.8.3) 1346 0 R (subsubsection.17.2.1.1) 1382 0 R (subsubsection.17.2.1.2) 1386 0 R]
-/Limits [(subsubsection.16.5.4.2) (subsubsection.17.2.1.2)]
+/Names [(subsubsection.27.2.2.1) 2698 0 R (subsubsection.27.2.2.2) 2702 0 R (subsubsection.27.2.2.3) 2706 0 R (subsubsection.27.2.5.1) 2722 0 R (subsubsection.27.2.5.2) 2726 0 R (subsubsection.27.2.5.3) 2730 0 R]
+/Limits [(subsubsection.27.2.2.1) (subsubsection.27.2.5.3)]
 >> endobj
 18334 0 obj <<
-/Names [(subsubsection.17.2.1.3) 1390 0 R (subsubsection.17.2.1.4) 1394 0 R (subsubsection.17.2.1.5) 1398 0 R (subsubsection.17.2.1.6) 1402 0 R (subsubsection.17.2.1.7) 1406 0 R (subsubsection.17.2.1.8) 1410 0 R]
-/Limits [(subsubsection.17.2.1.3) (subsubsection.17.2.1.8)]
+/Names [(subsubsection.27.2.5.4) 2734 0 R (subsubsection.27.5.1.1) 2754 0 R (subsubsection.28.2.1.1) 2802 0 R (subsubsection.28.2.2.1) 2810 0 R (subsubsection.28.2.2.2) 2814 0 R (subsubsection.28.2.5.1) 2830 0 R]
+/Limits [(subsubsection.27.2.5.4) (subsubsection.28.2.5.1)]
 >> endobj
 18335 0 obj <<
-/Names [(subsubsection.17.2.1.9) 1414 0 R (subsubsection.17.3.1.1) 1426 0 R (subsubsection.17.3.1.2) 1430 0 R (subsubsection.2.3.1.1) 142 0 R (subsubsection.2.3.1.2) 146 0 R (subsubsection.2.3.1.3) 150 0 R]
-/Limits [(subsubsection.17.2.1.9) (subsubsection.2.3.1.3)]
+/Names [(subsubsection.28.2.5.2) 2834 0 R (subsubsection.28.2.5.3) 2838 0 R (subsubsection.28.2.5.4) 2842 0 R (subsubsection.3.3.1.1) 206 0 R (subsubsection.3.3.2.1) 214 0 R (subsubsection.3.3.3.1) 222 0 R]
+/Limits [(subsubsection.28.2.5.2) (subsubsection.3.3.3.1)]
 >> endobj
 18336 0 obj <<
-/Names [(subsubsection.2.3.1.4) 154 0 R (subsubsection.2.3.2.1) 162 0 R (subsubsection.2.3.3.1) 170 0 R (subsubsection.2.3.3.2) 174 0 R (subsubsection.21.4.1.1) 1638 0 R (subsubsection.21.4.1.2) 1642 0 R]
-/Limits [(subsubsection.2.3.1.4) (subsubsection.21.4.1.2)]
+/Names [(subsubsection.3.3.4.1) 230 0 R (subsubsection.3.3.5.1) 238 0 R (subsubsection.32.2.2.1) 3022 0 R (subsubsection.32.2.2.2) 3026 0 R (subsubsection.32.2.2.3) 3030 0 R (subsubsection.32.2.2.4) 3034 0 R]
+/Limits [(subsubsection.3.3.4.1) (subsubsection.32.2.2.4)]
 >> endobj
 18337 0 obj <<
-/Names [(subsubsection.21.4.1.3) 1646 0 R (subsubsection.21.4.1.4) 1650 0 R (subsubsection.21.4.1.5) 1654 0 R (subsubsection.21.4.1.6) 1658 0 R (subsubsection.21.6.2.1) 1698 0 R (subsubsection.21.6.2.2) 1702 0 R]
-/Limits [(subsubsection.21.4.1.3) (subsubsection.21.6.2.2)]
+/Names [(subsubsection.32.2.2.5) 3038 0 R (subsubsection.32.2.2.6) 3042 0 R (subsubsection.32.2.2.7) 3046 0 R (subsubsection.35.2.2.1) 3126 0 R (subsubsection.35.2.2.2) 3130 0 R (subsubsection.35.2.2.3) 3134 0 R]
+/Limits [(subsubsection.32.2.2.5) (subsubsection.35.2.2.3)]
 >> endobj
 18338 0 obj <<
-/Names [(subsubsection.21.6.2.3) 1706 0 R (subsubsection.21.6.2.4) 1710 0 R (subsubsection.21.6.2.5) 1714 0 R (subsubsection.21.6.2.6) 1718 0 R (subsubsection.21.6.2.7) 1722 0 R (subsubsection.21.6.2.8) 1726 0 R]
-/Limits [(subsubsection.21.6.2.3) (subsubsection.21.6.2.8)]
+/Names [(subsubsection.35.2.2.4) 3138 0 R (subsubsection.35.2.3.1) 3146 0 R (subsubsection.35.2.3.2) 3150 0 R (subsubsection.35.2.3.3) 3154 0 R (subsubsection.35.2.3.4) 3158 0 R (subsubsection.36.1.1.1) 3174 0 R]
+/Limits [(subsubsection.35.2.2.4) (subsubsection.36.1.1.1)]
 >> endobj
 18339 0 obj <<
-/Names [(subsubsection.21.6.2.9) 1730 0 R (subsubsection.22.13.1.1) 2194 0 R (subsubsection.22.13.1.2) 2198 0 R (subsubsection.22.13.1.3) 2202 0 R (subsubsection.22.13.1.4) 2206 0 R (subsubsection.22.13.1.5) 2210 0 R]
-/Limits [(subsubsection.21.6.2.9) (subsubsection.22.13.1.5)]
+/Names [(subsubsection.36.1.1.2) 3178 0 R (subsubsection.36.1.1.3) 3182 0 R (subsubsection.36.1.1.4) 3186 0 R (subsubsection.36.1.1.5) 3190 0 R (subsubsection.37.2.1.1) 3226 0 R (subsubsection.37.2.1.2) 3230 0 R]
+/Limits [(subsubsection.36.1.1.2) (subsubsection.37.2.1.2)]
 >> endobj
 18340 0 obj <<
-/Names [(subsubsection.22.13.1.6) 2214 0 R (subsubsection.22.13.1.7) 2218 0 R (subsubsection.22.13.1.8) 2222 0 R (subsubsection.22.5.3.1) 1942 0 R (subsubsection.23.3.3.1) 2406 0 R (subsubsection.23.3.7.1) 2426 0 R]
-/Limits [(subsubsection.22.13.1.6) (subsubsection.23.3.7.1)]
+/Names [(subsubsection.39.1.4.1) 3326 0 R (subsubsection.39.1.4.2) 3330 0 R (subsubsection.4.6.1.1) 310 0 R (subsubsection.4.6.1.2) 314 0 R (subsubsection.4.6.1.3) 318 0 R (subsubsection.41.1.2.1) 3398 0 R]
+/Limits [(subsubsection.39.1.4.1) (subsubsection.41.1.2.1)]
 >> endobj
 18341 0 obj <<
-/Names [(subsubsection.24.5.3.1) 2514 0 R (subsubsection.24.5.3.2) 2518 0 R (subsubsection.24.5.3.3) 2522 0 R (subsubsection.24.5.3.4) 2526 0 R (subsubsection.24.5.3.5) 2530 0 R (subsubsection.24.5.3.6) 2534 0 R]
-/Limits [(subsubsection.24.5.3.1) (subsubsection.24.5.3.6)]
+/Names [(subsubsection.41.1.2.2) 3402 0 R (subsubsection.41.4.1.1) 3422 0 R (subsubsection.41.4.1.2) 3426 0 R (subsubsection.41.4.1.3) 3430 0 R (subsubsection.41.5.2.1) 3446 0 R (subsubsection.41.5.2.2) 3450 0 R]
+/Limits [(subsubsection.41.1.2.2) (subsubsection.41.5.2.2)]
 >> endobj
 18342 0 obj <<
-/Names [(subsubsection.24.5.3.7) 2538 0 R (subsubsection.26.2.2.1) 2614 0 R (subsubsection.26.2.3.1) 2622 0 R (subsubsection.26.2.3.2) 2626 0 R (subsubsection.27.2.1.1) 2678 0 R (subsubsection.27.2.1.2) 2682 0 R]
-/Limits [(subsubsection.24.5.3.7) (subsubsection.27.2.1.2)]
+/Names [(subsubsection.5.2.1.1) 374 0 R (subsubsection.5.2.5.1) 394 0 R (subsubsection.5.2.5.2) 398 0 R (subsubsection.6.2.4.1) 458 0 R (subsubsection.6.2.4.2) 462 0 R (subsubsection.6.2.4.3) 466 0 R]
+/Limits [(subsubsection.5.2.1.1) (subsubsection.6.2.4.3)]
 >> endobj
 18343 0 obj <<
-/Names [(subsubsection.27.2.1.3) 2686 0 R (subsubsection.27.2.1.4) 2690 0 R (subsubsection.27.2.2.1) 2698 0 R (subsubsection.27.2.2.2) 2702 0 R (subsubsection.27.2.2.3) 2706 0 R (subsubsection.27.2.5.1) 2722 0 R]
-/Limits [(subsubsection.27.2.1.3) (subsubsection.27.2.5.1)]
+/Names [(subsubsection.6.4.3.1) 498 0 R (subsubsection.8.2.1.1) 578 0 R (subsubsection.8.2.1.2) 582 0 R (subsubsection.8.2.1.3) 586 0 R (table.1.1) 5305 0 R (table.1.2) 5306 0 R]
+/Limits [(subsubsection.6.4.3.1) (table.1.2)]
 >> endobj
 18344 0 obj <<
-/Names [(subsubsection.27.2.5.2) 2726 0 R (subsubsection.27.2.5.3) 2730 0 R (subsubsection.27.2.5.4) 2734 0 R (subsubsection.27.5.1.1) 2754 0 R (subsubsection.28.2.1.1) 2802 0 R (subsubsection.28.2.2.1) 2810 0 R]
-/Limits [(subsubsection.27.2.5.2) (subsubsection.28.2.2.1)]
+/Names [(table.10.1) 5313 0 R (table.10.2) 5314 0 R (table.10.3) 5315 0 R (table.10.4) 5316 0 R (table.11.1) 5317 0 R (table.11.2) 5318 0 R]
+/Limits [(table.10.1) (table.11.2)]
 >> endobj
 18345 0 obj <<
-/Names [(subsubsection.28.2.2.2) 2814 0 R (subsubsection.28.2.5.1) 2830 0 R (subsubsection.28.2.5.2) 2834 0 R (subsubsection.28.2.5.3) 2838 0 R (subsubsection.28.2.5.4) 2842 0 R (subsubsection.3.3.1.1) 206 0 R]
-/Limits [(subsubsection.28.2.2.2) (subsubsection.3.3.1.1)]
+/Names [(table.11.3) 5319 0 R (table.11.4) 5320 0 R (table.11.5) 5321 0 R (table.12.1) 5322 0 R (table.15.1) 5355 0 R (table.16.1) 5356 0 R]
+/Limits [(table.11.3) (table.16.1)]
 >> endobj
 18346 0 obj <<
-/Names [(subsubsection.3.3.2.1) 214 0 R (subsubsection.3.3.3.1) 222 0 R (subsubsection.3.3.4.1) 230 0 R (subsubsection.3.3.5.1) 238 0 R (subsubsection.32.2.2.1) 3022 0 R (subsubsection.32.2.2.2) 3026 0 R]
-/Limits [(subsubsection.3.3.2.1) (subsubsection.32.2.2.2)]
+/Names [(table.16.2) 5357 0 R (table.16.3) 5358 0 R (table.16.4) 5359 0 R (table.16.5) 5360 0 R (table.21.1) 5362 0 R (table.22.1) 5363 0 R]
+/Limits [(table.16.2) (table.22.1)]
 >> endobj
 18347 0 obj <<
-/Names [(subsubsection.32.2.2.3) 3030 0 R (subsubsection.32.2.2.4) 3034 0 R (subsubsection.32.2.2.5) 3038 0 R (subsubsection.32.2.2.6) 3042 0 R (subsubsection.32.2.2.7) 3046 0 R (subsubsection.35.2.2.1) 3126 0 R]
-/Limits [(subsubsection.32.2.2.3) (subsubsection.35.2.2.1)]
+/Names [(table.23.1) 5365 0 R (table.27.1) 5367 0 R (table.27.2) 5368 0 R (table.27.3) 5369 0 R (table.28.1) 5371 0 R (table.29.1) 5373 0 R]
+/Limits [(table.23.1) (table.29.1)]
 >> endobj
 18348 0 obj <<
-/Names [(subsubsection.35.2.2.2) 3130 0 R (subsubsection.35.2.2.3) 3134 0 R (subsubsection.35.2.2.4) 3138 0 R (subsubsection.35.2.3.1) 3146 0 R (subsubsection.35.2.3.2) 3150 0 R (subsubsection.35.2.3.3) 3154 0 R]
-/Limits [(subsubsection.35.2.2.2) (subsubsection.35.2.3.3)]
+/Names [(table.29.2) 5374 0 R (table.30.1) 5376 0 R (table.35.1) 5387 0 R (table.36.1) 5389 0 R (table.36.2) 5390 0 R (table.40.1) 5392 0 R]
+/Limits [(table.29.2) (table.40.1)]
 >> endobj
 18349 0 obj <<
-/Names [(subsubsection.35.2.3.4) 3158 0 R (subsubsection.36.1.1.1) 3174 0 R (subsubsection.36.1.1.2) 3178 0 R (subsubsection.36.1.1.3) 3182 0 R (subsubsection.36.1.1.4) 3186 0 R (subsubsection.36.1.1.5) 3190 0 R]
-/Limits [(subsubsection.35.2.3.4) (subsubsection.36.1.1.5)]
+/Names [(table.5.1) 5308 0 R (table.6.1) 5310 0 R (table.9.1) 5312 0 R (tdbdocs) 5499 0 R (tdbpermfiledesc) 5501 0 R (tdbtempfiledesc) 5502 0 R]
+/Limits [(table.5.1) (tdbtempfiledesc)]
 >> endobj
 18350 0 obj <<
-/Names [(subsubsection.37.2.1.1) 3226 0 R (subsubsection.37.2.1.2) 3230 0 R (subsubsection.39.1.4.1) 3326 0 R (subsubsection.39.1.4.2) 3330 0 R (subsubsection.4.6.1.1) 310 0 R (subsubsection.4.6.1.2) 314 0 R]
-/Limits [(subsubsection.37.2.1.1) (subsubsection.4.6.1.2)]
+/Names [(tmpshare) 11524 0 R (troubleshooting) 11521 0 R (trusts1) 8655 0 R (type) 6024 0 R (ugbc) 8288 0 R (unicode) 3886 0 R]
+/Limits [(tmpshare) (unicode)]
 >> endobj
 18351 0 obj <<
-/Names [(subsubsection.4.6.1.3) 318 0 R (subsubsection.41.1.2.1) 3398 0 R (subsubsection.41.1.2.2) 3402 0 R (subsubsection.41.4.1.1) 3422 0 R (subsubsection.41.4.1.2) 3426 0 R (subsubsection.41.4.1.3) 3430 0 R]
-/Limits [(subsubsection.4.6.1.3) (subsubsection.41.4.1.3)]
+/Names [(uniqnetbiosnames) 10880 0 R (upgrading-to-3.0) 3891 0 R (vfscap-intl) 10972 0 R (vfsrecyc) 10080 0 R (vfsshadow) 10174 0 R (w2kp001) 6789 0 R]
+/Limits [(uniqnetbiosnames) (w2kp001)]
 >> endobj
 18352 0 obj <<
-/Names [(subsubsection.41.5.2.1) 3446 0 R (subsubsection.41.5.2.2) 3450 0 R (subsubsection.5.2.1.1) 374 0 R (subsubsection.5.2.5.1) 394 0 R (subsubsection.5.2.5.2) 398 0 R (subsubsection.6.2.4.1) 458 0 R]
-/Limits [(subsubsection.41.5.2.1) (subsubsection.6.2.4.1)]
+/Names [(w2kp002) 6804 0 R (w2kp003) 6805 0 R (w2kp004) 6814 0 R (w2kp005) 6815 0 R (winbind) 3850 0 R (winbind-solaris9) 10338 0 R]
+/Limits [(w2kp002) (winbind-solaris9)]
 >> endobj
 18353 0 obj <<
-/Names [(subsubsection.6.2.4.2) 462 0 R (subsubsection.6.2.4.3) 466 0 R (subsubsection.6.4.3.1) 498 0 R (subsubsection.8.2.1.1) 578 0 R (subsubsection.8.2.1.2) 582 0 R (subsubsection.8.2.1.3) 586 0 R]
-/Limits [(subsubsection.6.2.4.2) (subsubsection.8.2.1.3)]
+/Names [(winbind_idmap) 10218 0 R (winbindcfg) 10294 0 R (wxpp001) 6862 0 R (wxpp004) 6863 0 R (wxpp006) 6864 0 R (wxpp007) 6875 0 R]
+/Limits [(winbind_idmap) (wxpp007)]
 >> endobj
 18354 0 obj <<
-/Names [(table.1.1) 5305 0 R (table.1.2) 5306 0 R (table.10.1) 5313 0 R (table.10.2) 5314 0 R (table.10.3) 5315 0 R (table.10.4) 5316 0 R]
-/Limits [(table.1.1) (table.10.4)]
+/Names [(wxpp008) 6876 0 R (xinetd) 11441 0 R (xremmb) 7093 0 R (xtdaudit) 10122 0 R]
+/Limits [(wxpp008) (xtdaudit)]
 >> endobj
 18355 0 obj <<
-/Names [(table.11.1) 5317 0 R (table.11.2) 5318 0 R (table.11.3) 5319 0 R (table.11.4) 5320 0 R (table.11.5) 5321 0 R (table.12.1) 5322 0 R]
-/Limits [(table.11.1) (table.12.1)]
+/Kids [17598 0 R 17599 0 R 17600 0 R 17601 0 R 17602 0 R 17603 0 R]
+/Limits [(127) (CUPS-printing)]
 >> endobj
 18356 0 obj <<
-/Names [(table.15.1) 5355 0 R (table.16.1) 5356 0 R (table.16.2) 5357 0 R (table.16.3) 5358 0 R (table.16.4) 5359 0 R (table.16.5) 5360 0 R]
-/Limits [(table.15.1) (table.16.5)]
+/Kids [17604 0 R 17605 0 R 17606 0 R 17607 0 R 17608 0 R 17609 0 R]
+/Limits [(ChangeNotes) (Item.122)]
 >> endobj
 18357 0 obj <<
-/Names [(table.21.1) 5362 0 R (table.22.1) 5363 0 R (table.23.1) 5365 0 R (table.27.1) 5367 0 R (table.27.2) 5368 0 R (table.27.3) 5369 0 R]
-/Limits [(table.21.1) (table.27.3)]
+/Kids [17610 0 R 17611 0 R 17612 0 R 17613 0 R 17614 0 R 17615 0 R]
+/Limits [(Item.123) (Item.155)]
 >> endobj
 18358 0 obj <<
-/Names [(table.28.1) 5371 0 R (table.29.1) 5373 0 R (table.29.2) 5374 0 R (table.30.1) 5376 0 R (table.35.1) 5387 0 R (table.36.1) 5389 0 R]
-/Limits [(table.28.1) (table.36.1)]
+/Kids [17616 0 R 17617 0 R 17618 0 R 17619 0 R 17620 0 R 17621 0 R]
+/Limits [(Item.156) (Item.188)]
 >> endobj
 18359 0 obj <<
-/Names [(table.36.2) 5390 0 R (table.40.1) 5392 0 R (table.5.1) 5308 0 R (table.6.1) 5310 0 R (table.9.1) 5312 0 R (tdbdocs) 5499 0 R]
-/Limits [(table.36.2) (tdbdocs)]
+/Kids [17622 0 R 17623 0 R 17624 0 R 17625 0 R 17626 0 R 17627 0 R]
+/Limits [(Item.189) (Item.22)]
 >> endobj
 18360 0 obj <<
-/Names [(tdbpermfiledesc) 5501 0 R (tdbtempfiledesc) 5502 0 R (tmpshare) 11536 0 R (troubleshooting) 11533 0 R (trusts1) 8668 0 R (type) 6024 0 R]
-/Limits [(tdbpermfiledesc) (type)]
+/Kids [17628 0 R 17629 0 R 17630 0 R 17631 0 R 17632 0 R 17633 0 R]
+/Limits [(Item.220) (Item.252)]
 >> endobj
 18361 0 obj <<
-/Names [(ugbc) 8301 0 R (unicode) 3886 0 R (uniqnetbiosnames) 10892 0 R (upgrading-to-3.0) 3891 0 R (vfscap-intl) 10984 0 R (vfsrecyc) 10092 0 R]
-/Limits [(ugbc) (vfsrecyc)]
+/Kids [17634 0 R 17635 0 R 17636 0 R 17637 0 R 17638 0 R 17639 0 R]
+/Limits [(Item.253) (Item.285)]
 >> endobj
 18362 0 obj <<
-/Names [(vfsshadow) 10186 0 R (w2kp001) 6790 0 R (w2kp002) 6805 0 R (w2kp003) 6806 0 R (w2kp004) 6815 0 R (w2kp005) 6816 0 R]
-/Limits [(vfsshadow) (w2kp005)]
+/Kids [17640 0 R 17641 0 R 17642 0 R 17643 0 R 17644 0 R 17645 0 R]
+/Limits [(Item.286) (Item.317)]
 >> endobj
 18363 0 obj <<
-/Names [(winbind) 3850 0 R (winbind-solaris9) 10350 0 R (winbind_idmap) 10230 0 R (winbindcfg) 10306 0 R (wxpp001) 6863 0 R (wxpp004) 6864 0 R]
-/Limits [(winbind) (wxpp004)]
+/Kids [17646 0 R 17647 0 R 17648 0 R 17649 0 R 17650 0 R 17651 0 R]
+/Limits [(Item.318) (Item.35)]
 >> endobj
 18364 0 obj <<
-/Names [(wxpp006) 6865 0 R (wxpp007) 6876 0 R (wxpp008) 6877 0 R (xinetd) 11453 0 R (xremmb) 7094 0 R (xtdaudit) 10134 0 R]
-/Limits [(wxpp006) (xtdaudit)]
+/Kids [17652 0 R 17653 0 R 17654 0 R 17655 0 R 17656 0 R 17657 0 R]
+/Limits [(Item.350) (Item.382)]
 >> endobj
 18365 0 obj <<
-/Kids [17609 0 R 17610 0 R 17611 0 R 17612 0 R 17613 0 R 17614 0 R]
-/Limits [(127) (CUPS-printing)]
+/Kids [17658 0 R 17659 0 R 17660 0 R 17661 0 R 17662 0 R 17663 0 R]
+/Limits [(Item.383) (Item.414)]
 >> endobj
 18366 0 obj <<
-/Kids [17615 0 R 17616 0 R 17617 0 R 17618 0 R 17619 0 R 17620 0 R]
-/Limits [(ChangeNotes) (Item.122)]
+/Kids [17664 0 R 17665 0 R 17666 0 R 17667 0 R 17668 0 R 17669 0 R]
+/Limits [(Item.415) (Item.65)]
 >> endobj
 18367 0 obj <<
-/Kids [17621 0 R 17622 0 R 17623 0 R 17624 0 R 17625 0 R 17626 0 R]
-/Limits [(Item.123) (Item.155)]
+/Kids [17670 0 R 17671 0 R 17672 0 R 17673 0 R 17674 0 R 17675 0 R]
+/Limits [(Item.66) (Item.98)]
 >> endobj
 18368 0 obj <<
-/Kids [17627 0 R 17628 0 R 17629 0 R 17630 0 R 17631 0 R 17632 0 R]
-/Limits [(Item.156) (Item.188)]
+/Kids [17676 0 R 17677 0 R 17678 0 R 17679 0 R 17680 0 R 17681 0 R]
+/Limits [(Item.99) (WXPP009)]
 >> endobj
 18369 0 obj <<
-/Kids [17633 0 R 17634 0 R 17635 0 R 17636 0 R 17637 0 R 17638 0 R]
-/Limits [(Item.189) (Item.22)]
+/Kids [17682 0 R 17683 0 R 17684 0 R 17685 0 R 17686 0 R 17687 0 R]
+/Limits [(WXPP014) (chapter*.21)]
 >> endobj
 18370 0 obj <<
-/Kids [17639 0 R 17640 0 R 17641 0 R 17642 0 R 17643 0 R 17644 0 R]
-/Limits [(Item.220) (Item.252)]
+/Kids [17688 0 R 17689 0 R 17690 0 R 17691 0 R 17692 0 R 17693 0 R]
+/Limits [(chapter*.3) (chapter.36)]
 >> endobj
 18371 0 obj <<
-/Kids [17645 0 R 17646 0 R 17647 0 R 17648 0 R 17649 0 R 17650 0 R]
-/Limits [(Item.253) (Item.285)]
+/Kids [17694 0 R 17695 0 R 17696 0 R 17697 0 R 17698 0 R 17699 0 R]
+/Limits [(chapter.37) (diagnosis)]
 >> endobj
 18372 0 obj <<
-/Kids [17651 0 R 17652 0 R 17653 0 R 17654 0 R 17655 0 R 17656 0 R]
-/Limits [(Item.286) (Item.317)]
+/Kids [17700 0 R 17701 0 R 17702 0 R 17703 0 R 17704 0 R 17705 0 R]
+/Limits [(dmbexample) (example.2.3.6)]
 >> endobj
 18373 0 obj <<
-/Kids [17657 0 R 17658 0 R 17659 0 R 17660 0 R 17661 0 R 17662 0 R]
-/Limits [(Item.318) (Item.35)]
+/Kids [17706 0 R 17707 0 R 17708 0 R 17709 0 R 17710 0 R 17711 0 R]
+/Limits [(example.2.3.7) (far3)]
 >> endobj
 18374 0 obj <<
-/Kids [17663 0 R 17664 0 R 17665 0 R 17666 0 R 17667 0 R 17668 0 R]
-/Limits [(Item.350) (Item.382)]
+/Kids [17712 0 R 17713 0 R 17714 0 R 17715 0 R 17716 0 R 17717 0 R]
+/Limits [(fast-bdc) (figure.24.1)]
 >> endobj
 18375 0 obj <<
-/Kids [17669 0 R 17670 0 R 17671 0 R 17672 0 R 17673 0 R 17674 0 R]
-/Limits [(Item.383) (Item.414)]
+/Kids [17718 0 R 17719 0 R 17720 0 R 17721 0 R 17722 0 R 17723 0 R]
+/Limits [(figure.39.1) (id249731)]
 >> endobj
 18376 0 obj <<
-/Kids [17675 0 R 17676 0 R 17677 0 R 17678 0 R 17679 0 R 17680 0 R]
-/Limits [(Item.415) (Item.65)]
+/Kids [17724 0 R 17725 0 R 17726 0 R 17727 0 R 17728 0 R 17729 0 R]
+/Limits [(id249776) (id269268)]
 >> endobj
 18377 0 obj <<
-/Kids [17681 0 R 17682 0 R 17683 0 R 17684 0 R 17685 0 R 17686 0 R]
-/Limits [(Item.66) (Item.98)]
+/Kids [17730 0 R 17731 0 R 17732 0 R 17733 0 R 17734 0 R 17735 0 R]
+/Limits [(id269638) (id287401)]
 >> endobj
 18378 0 obj <<
-/Kids [17687 0 R 17688 0 R 17689 0 R 17690 0 R 17691 0 R 17692 0 R]
-/Limits [(Item.99) (WXPP009)]
+/Kids [17736 0 R 17737 0 R 17738 0 R 17739 0 R 17740 0 R 17741 0 R]
+/Limits [(id287686) (id305367)]
 >> endobj
 18379 0 obj <<
-/Kids [17693 0 R 17694 0 R 17695 0 R 17696 0 R 17697 0 R 17698 0 R]
-/Limits [(WXPP014) (chapter*.21)]
+/Kids [17742 0 R 17743 0 R 17744 0 R 17745 0 R 17746 0 R 17747 0 R]
+/Limits [(id305424) (id310079)]
 >> endobj
 18380 0 obj <<
-/Kids [17699 0 R 17700 0 R 17701 0 R 17702 0 R 17703 0 R 17704 0 R]
-/Limits [(chapter*.3) (chapter.36)]
+/Kids [17748 0 R 17749 0 R 17750 0 R 17751 0 R 17752 0 R 17753 0 R]
+/Limits [(id310408) (id321586)]
 >> endobj
 18381 0 obj <<
-/Kids [17705 0 R 17706 0 R 17707 0 R 17708 0 R 17709 0 R 17710 0 R]
-/Limits [(chapter.37) (diagnosis)]
+/Kids [17754 0 R 17755 0 R 17756 0 R 17757 0 R 17758 0 R 17759 0 R]
+/Limits [(id321849) (id329426)]
 >> endobj
 18382 0 obj <<
-/Kids [17711 0 R 17712 0 R 17713 0 R 17714 0 R 17715 0 R 17716 0 R]
-/Limits [(dmbexample) (example.2.3.6)]
+/Kids [17760 0 R 17761 0 R 17762 0 R 17763 0 R 17764 0 R 17765 0 R]
+/Limits [(id329967) (id337120)]
 >> endobj
 18383 0 obj <<
-/Kids [17717 0 R 17718 0 R 17719 0 R 17720 0 R 17721 0 R 17722 0 R]
-/Limits [(example.2.3.7) (far3)]
+/Kids [17766 0 R 17767 0 R 17768 0 R 17769 0 R 17770 0 R 17771 0 R]
+/Limits [(id337276) (id343070)]
 >> endobj
 18384 0 obj <<
-/Kids [17723 0 R 17724 0 R 17725 0 R 17726 0 R 17727 0 R 17728 0 R]
-/Limits [(fast-bdc) (figure.24.1)]
+/Kids [17772 0 R 17773 0 R 17774 0 R 17775 0 R 17776 0 R 17777 0 R]
+/Limits [(id343232) (id348701)]
 >> endobj
 18385 0 obj <<
-/Kids [17729 0 R 17730 0 R 17731 0 R 17732 0 R 17733 0 R 17734 0 R]
-/Limits [(figure.39.1) (id2443696)]
+/Kids [17778 0 R 17779 0 R 17780 0 R 17781 0 R 17782 0 R 17783 0 R]
+/Limits [(id348721) (id352395)]
 >> endobj
 18386 0 obj <<
-/Kids [17735 0 R 17736 0 R 17737 0 R 17738 0 R 17739 0 R 17740 0 R]
-/Limits [(id2455118) (id2497574)]
+/Kids [17784 0 R 17785 0 R 17786 0 R 17787 0 R 17788 0 R 17789 0 R]
+/Limits [(id352516) (id357291)]
 >> endobj
 18387 0 obj <<
-/Kids [17741 0 R 17742 0 R 17743 0 R 17744 0 R 17745 0 R 17746 0 R]
-/Limits [(id2498013) (id2517467)]
+/Kids [17790 0 R 17791 0 R 17792 0 R 17793 0 R 17794 0 R 17795 0 R]
+/Limits [(id357502) (id363661)]
 >> endobj
 18388 0 obj <<
-/Kids [17747 0 R 17748 0 R 17749 0 R 17750 0 R 17751 0 R 17752 0 R]
-/Limits [(id2518149) (id2526402)]
+/Kids [17796 0 R 17797 0 R 17798 0 R 17799 0 R 17800 0 R 17801 0 R]
+/Limits [(id363765) (id371297)]
 >> endobj
 18389 0 obj <<
-/Kids [17753 0 R 17754 0 R 17755 0 R 17756 0 R 17757 0 R 17758 0 R]
-/Limits [(id2526474) (id2533029)]
+/Kids [17802 0 R 17803 0 R 17804 0 R 17805 0 R 17806 0 R 17807 0 R]
+/Limits [(id371478) (id374936)]
 >> endobj
 18390 0 obj <<
-/Kids [17759 0 R 17760 0 R 17761 0 R 17762 0 R 17763 0 R 17764 0 R]
-/Limits [(id2533851) (id2543963)]
+/Kids [17808 0 R 17809 0 R 17810 0 R 17811 0 R 17812 0 R 17813 0 R]
+/Limits [(id374970) (id380117)]
 >> endobj
 18391 0 obj <<
-/Kids [17765 0 R 17766 0 R 17767 0 R 17768 0 R 17769 0 R 17770 0 R]
-/Limits [(id2544413) (id2555252)]
+/Kids [17814 0 R 17815 0 R 17816 0 R 17817 0 R 17818 0 R 17819 0 R]
+/Limits [(id380146) (id384831)]
 >> endobj
 18392 0 obj <<
-/Kids [17771 0 R 17772 0 R 17773 0 R 17774 0 R 17775 0 R 17776 0 R]
-/Limits [(id2555298) (id2563019)]
+/Kids [17820 0 R 17821 0 R 17822 0 R 17823 0 R 17824 0 R 17825 0 R]
+/Limits [(id384900) (id389496)]
 >> endobj
 18393 0 obj <<
-/Kids [17777 0 R 17778 0 R 17779 0 R 17780 0 R 17781 0 R 17782 0 R]
-/Limits [(id2563098) (id2570221)]
+/Kids [17826 0 R 17827 0 R 17828 0 R 17829 0 R 17830 0 R 17831 0 R]
+/Limits [(id389561) (id392697)]
 >> endobj
 18394 0 obj <<
-/Kids [17783 0 R 17784 0 R 17785 0 R 17786 0 R 17787 0 R 17788 0 R]
-/Limits [(id2570329) (id2576232)]
+/Kids [17832 0 R 17833 0 R 17834 0 R 17835 0 R 17836 0 R 17837 0 R]
+/Limits [(id392734) (id395736)]
 >> endobj
 18395 0 obj <<
-/Kids [17789 0 R 17790 0 R 17791 0 R 17792 0 R 17793 0 R 17794 0 R]
-/Limits [(id2576483) (id2580989)]
+/Kids [17838 0 R 17839 0 R 17840 0 R 17841 0 R 17842 0 R 17843 0 R]
+/Limits [(id395834) (id400796)]
 >> endobj
 18396 0 obj <<
-/Kids [17795 0 R 17796 0 R 17797 0 R 17798 0 R 17799 0 R 17800 0 R]
-/Limits [(id2581032) (id2585257)]
+/Kids [17844 0 R 17845 0 R 17846 0 R 17847 0 R 17848 0 R 17849 0 R]
+/Limits [(id400813) (id406553)]
 >> endobj
 18397 0 obj <<
-/Kids [17801 0 R 17802 0 R 17803 0 R 17804 0 R 17805 0 R 17806 0 R]
-/Limits [(id2585263) (id2592060)]
+/Kids [17850 0 R 17851 0 R 17852 0 R 17853 0 R 17854 0 R 17855 0 R]
+/Limits [(id406616) (id411300)]
 >> endobj
 18398 0 obj <<
-/Kids [17807 0 R 17808 0 R 17809 0 R 17810 0 R 17811 0 R 17812 0 R]
-/Limits [(id2592375) (id2598525)]
+/Kids [17856 0 R 17857 0 R 17858 0 R 17859 0 R 17860 0 R 17861 0 R]
+/Limits [(id411318) (idmap-gid2sid)]
 >> endobj
 18399 0 obj <<
-/Kids [17813 0 R 17814 0 R 17815 0 R 17816 0 R 17817 0 R 17818 0 R]
-/Limits [(id2598791) (id2604080)]
+/Kids [17862 0 R 17863 0 R 17864 0 R 17865 0 R 17866 0 R 17867 0 R]
+/Limits [(idmap-sid2gid) (lstlisting.10.-48)]
 >> endobj
 18400 0 obj <<
-/Kids [17819 0 R 17820 0 R 17821 0 R 17822 0 R 17823 0 R 17824 0 R]
-/Limits [(id2604300) (id2610583)]
+/Kids [17868 0 R 17869 0 R 17870 0 R 17871 0 R 17872 0 R 17873 0 R]
+/Limits [(lstlisting.10.-49) (lstlisting.2.-8)]
 >> endobj
 18401 0 obj <<
-/Kids [17825 0 R 17826 0 R 17827 0 R 17828 0 R 17829 0 R 17830 0 R]
-/Limits [(id2610662) (id2616624)]
+/Kids [17874 0 R 17875 0 R 17876 0 R 17877 0 R 17878 0 R 17879 0 R]
+/Limits [(lstlisting.2.-9) (lstlisting.34.-103)]
 >> endobj
 18402 0 obj <<
-/Kids [17831 0 R 17832 0 R 17833 0 R 17834 0 R 17835 0 R 17836 0 R]
-/Limits [(id2616752) (id2620370)]
+/Kids [17880 0 R 17881 0 R 17882 0 R 17883 0 R 17884 0 R 17885 0 R]
+/Limits [(lstlisting.34.-104) (lstnumber.-10.1)]
 >> endobj
 18403 0 obj <<
-/Kids [17837 0 R 17838 0 R 17839 0 R 17840 0 R 17841 0 R 17842 0 R]
-/Limits [(id2620505) (id2625322)]
+/Kids [17886 0 R 17887 0 R 17888 0 R 17889 0 R 17890 0 R 17891 0 R]
+/Limits [(lstnumber.-10.10) (lstnumber.-100.3)]
 >> endobj
 18404 0 obj <<
-/Kids [17843 0 R 17844 0 R 17845 0 R 17846 0 R 17847 0 R 17848 0 R]
-/Limits [(id2625395) (id2628250)]
+/Kids [17892 0 R 17893 0 R 17894 0 R 17895 0 R 17896 0 R 17897 0 R]
+/Limits [(lstnumber.-100.4) (lstnumber.-103.4)]
 >> endobj
 18405 0 obj <<
-/Kids [17849 0 R 17850 0 R 17851 0 R 17852 0 R 17853 0 R 17854 0 R]
-/Limits [(id2628767) (id2634474)]
+/Kids [17898 0 R 17899 0 R 17900 0 R 17901 0 R 17902 0 R 17903 0 R]
+/Limits [(lstnumber.-103.5) (lstnumber.-105.5)]
 >> endobj
 18406 0 obj <<
-/Kids [17855 0 R 17856 0 R 17857 0 R 17858 0 R 17859 0 R 17860 0 R]
-/Limits [(id2634539) (id2639432)]
+/Kids [17904 0 R 17905 0 R 17906 0 R 17907 0 R 17908 0 R 17909 0 R]
+/Limits [(lstnumber.-105.6) (lstnumber.-107.8)]
 >> endobj
 18407 0 obj <<
-/Kids [17861 0 R 17862 0 R 17863 0 R 17864 0 R 17865 0 R 17866 0 R]
-/Limits [(id2639782) (id2646867)]
+/Kids [17910 0 R 17911 0 R 17912 0 R 17913 0 R 17914 0 R 17915 0 R]
+/Limits [(lstnumber.-108.1) (lstnumber.-11.33)]
 >> endobj
 18408 0 obj <<
-/Kids [17867 0 R 17868 0 R 17869 0 R 17870 0 R 17871 0 R 17872 0 R]
-/Limits [(id2647110) (idmap-gid2sid)]
+/Kids [17916 0 R 17917 0 R 17918 0 R 17919 0 R 17920 0 R 17921 0 R]
+/Limits [(lstnumber.-11.34) (lstnumber.-12.24)]
 >> endobj
 18409 0 obj <<
-/Kids [17873 0 R 17874 0 R 17875 0 R 17876 0 R 17877 0 R 17878 0 R]
-/Limits [(idmap-sid2gid) (lstlisting.10.-48)]
+/Kids [17922 0 R 17923 0 R 17924 0 R 17925 0 R 17926 0 R 17927 0 R]
+/Limits [(lstnumber.-12.25) (lstnumber.-20.18)]
 >> endobj
 18410 0 obj <<
-/Kids [17879 0 R 17880 0 R 17881 0 R 17882 0 R 17883 0 R 17884 0 R]
-/Limits [(lstlisting.10.-49) (lstlisting.2.-8)]
+/Kids [17928 0 R 17929 0 R 17930 0 R 17931 0 R 17932 0 R 17933 0 R]
+/Limits [(lstnumber.-20.19) (lstnumber.-23.9)]
 >> endobj
 18411 0 obj <<
-/Kids [17885 0 R 17886 0 R 17887 0 R 17888 0 R 17889 0 R 17890 0 R]
-/Limits [(lstlisting.2.-9) (lstlisting.34.-103)]
+/Kids [17934 0 R 17935 0 R 17936 0 R 17937 0 R 17938 0 R 17939 0 R]
+/Limits [(lstnumber.-24.1) (lstnumber.-32.1)]
 >> endobj
 18412 0 obj <<
-/Kids [17891 0 R 17892 0 R 17893 0 R 17894 0 R 17895 0 R 17896 0 R]
-/Limits [(lstlisting.34.-104) (lstnumber.-10.1)]
+/Kids [17940 0 R 17941 0 R 17942 0 R 17943 0 R 17944 0 R 17945 0 R]
+/Limits [(lstnumber.-33.1) (lstnumber.-38.2)]
 >> endobj
 18413 0 obj <<
-/Kids [17897 0 R 17898 0 R 17899 0 R 17900 0 R 17901 0 R 17902 0 R]
-/Limits [(lstnumber.-10.10) (lstnumber.-100.3)]
+/Kids [17946 0 R 17947 0 R 17948 0 R 17949 0 R 17950 0 R 17951 0 R]
+/Limits [(lstnumber.-38.3) (lstnumber.-49.2)]
 >> endobj
 18414 0 obj <<
-/Kids [17903 0 R 17904 0 R 17905 0 R 17906 0 R 17907 0 R 17908 0 R]
-/Limits [(lstnumber.-100.4) (lstnumber.-103.4)]
+/Kids [17952 0 R 17953 0 R 17954 0 R 17955 0 R 17956 0 R 17957 0 R]
+/Limits [(lstnumber.-5.1) (lstnumber.-52.10)]
 >> endobj
 18415 0 obj <<
-/Kids [17909 0 R 17910 0 R 17911 0 R 17912 0 R 17913 0 R 17914 0 R]
-/Limits [(lstnumber.-103.5) (lstnumber.-105.5)]
+/Kids [17958 0 R 17959 0 R 17960 0 R 17961 0 R 17962 0 R 17963 0 R]
+/Limits [(lstnumber.-52.11) (lstnumber.-55.2)]
 >> endobj
 18416 0 obj <<
-/Kids [17915 0 R 17916 0 R 17917 0 R 17918 0 R 17919 0 R 17920 0 R]
-/Limits [(lstnumber.-105.6) (lstnumber.-107.8)]
+/Kids [17964 0 R 17965 0 R 17966 0 R 17967 0 R 17968 0 R 17969 0 R]
+/Limits [(lstnumber.-55.3) (lstnumber.-58.1)]
 >> endobj
 18417 0 obj <<
-/Kids [17921 0 R 17922 0 R 17923 0 R 17924 0 R 17925 0 R 17926 0 R]
-/Limits [(lstnumber.-108.1) (lstnumber.-11.33)]
+/Kids [17970 0 R 17971 0 R 17972 0 R 17973 0 R 17974 0 R 17975 0 R]
+/Limits [(lstnumber.-58.10) (lstnumber.-6.17)]
 >> endobj
 18418 0 obj <<
-/Kids [17927 0 R 17928 0 R 17929 0 R 17930 0 R 17931 0 R 17932 0 R]
-/Limits [(lstnumber.-11.34) (lstnumber.-12.24)]
+/Kids [17976 0 R 17977 0 R 17978 0 R 17979 0 R 17980 0 R 17981 0 R]
+/Limits [(lstnumber.-6.18) (lstnumber.-68.1)]
 >> endobj
 18419 0 obj <<
-/Kids [17933 0 R 17934 0 R 17935 0 R 17936 0 R 17937 0 R 17938 0 R]
-/Limits [(lstnumber.-12.25) (lstnumber.-20.18)]
+/Kids [17982 0 R 17983 0 R 17984 0 R 17985 0 R 17986 0 R 17987 0 R]
+/Limits [(lstnumber.-68.2) (lstnumber.-77.3)]
 >> endobj
 18420 0 obj <<
-/Kids [17939 0 R 17940 0 R 17941 0 R 17942 0 R 17943 0 R 17944 0 R]
-/Limits [(lstnumber.-20.19) (lstnumber.-23.9)]
+/Kids [17988 0 R 17989 0 R 17990 0 R 17991 0 R 17992 0 R 17993 0 R]
+/Limits [(lstnumber.-78.1) (lstnumber.-80.10)]
 >> endobj
 18421 0 obj <<
-/Kids [17945 0 R 17946 0 R 17947 0 R 17948 0 R 17949 0 R 17950 0 R]
-/Limits [(lstnumber.-24.1) (lstnumber.-32.1)]
+/Kids [17994 0 R 17995 0 R 17996 0 R 17997 0 R 17998 0 R 17999 0 R]
+/Limits [(lstnumber.-80.11) (lstnumber.-83.3)]
 >> endobj
 18422 0 obj <<
-/Kids [17951 0 R 17952 0 R 17953 0 R 17954 0 R 17955 0 R 17956 0 R]
-/Limits [(lstnumber.-33.1) (lstnumber.-38.2)]
+/Kids [18000 0 R 18001 0 R 18002 0 R 18003 0 R 18004 0 R 18005 0 R]
+/Limits [(lstnumber.-83.4) (lstnumber.-85.24)]
 >> endobj
 18423 0 obj <<
-/Kids [17957 0 R 17958 0 R 17959 0 R 17960 0 R 17961 0 R 17962 0 R]
-/Limits [(lstnumber.-38.3) (lstnumber.-49.2)]
+/Kids [18006 0 R 18007 0 R 18008 0 R 18009 0 R 18010 0 R 18011 0 R]
+/Limits [(lstnumber.-85.25) (lstnumber.-88.5)]
 >> endobj
 18424 0 obj <<
-/Kids [17963 0 R 17964 0 R 17965 0 R 17966 0 R 17967 0 R 17968 0 R]
-/Limits [(lstnumber.-5.1) (lstnumber.-52.10)]
+/Kids [18012 0 R 18013 0 R 18014 0 R 18015 0 R 18016 0 R 18017 0 R]
+/Limits [(lstnumber.-88.6) (lstnumber.-9.9)]
 >> endobj
 18425 0 obj <<
-/Kids [17969 0 R 17970 0 R 17971 0 R 17972 0 R 17973 0 R 17974 0 R]
-/Limits [(lstnumber.-52.11) (lstnumber.-55.2)]
+/Kids [18018 0 R 18019 0 R 18020 0 R 18021 0 R 18022 0 R 18023 0 R]
+/Limits [(lstnumber.-91.1) (minim-bdc)]
 >> endobj
 18426 0 obj <<
-/Kids [17975 0 R 17976 0 R 17977 0 R 17978 0 R 17979 0 R 17980 0 R]
-/Limits [(lstnumber.-55.3) (lstnumber.-58.1)]
+/Kids [18024 0 R 18025 0 R 18026 0 R 18027 0 R 18028 0 R 18029 0 R]
+/Limits [(minimalPDC) (page.115)]
 >> endobj
 18427 0 obj <<
-/Kids [17981 0 R 17982 0 R 17983 0 R 17984 0 R 17985 0 R 17986 0 R]
-/Limits [(lstnumber.-58.10) (lstnumber.-6.17)]
+/Kids [18030 0 R 18031 0 R 18032 0 R 18033 0 R 18034 0 R 18035 0 R]
+/Limits [(page.116) (page.148)]
 >> endobj
 18428 0 obj <<
-/Kids [17987 0 R 17988 0 R 17989 0 R 17990 0 R 17991 0 R 17992 0 R]
-/Limits [(lstnumber.-6.18) (lstnumber.-68.1)]
+/Kids [18036 0 R 18037 0 R 18038 0 R 18039 0 R 18040 0 R 18041 0 R]
+/Limits [(page.149) (page.180)]
 >> endobj
 18429 0 obj <<
-/Kids [17993 0 R 17994 0 R 17995 0 R 17996 0 R 17997 0 R 17998 0 R]
-/Limits [(lstnumber.-68.2) (lstnumber.-77.3)]
+/Kids [18042 0 R 18043 0 R 18044 0 R 18045 0 R 18046 0 R 18047 0 R]
+/Limits [(page.181) (page.212)]
 >> endobj
 18430 0 obj <<
-/Kids [17999 0 R 18000 0 R 18001 0 R 18002 0 R 18003 0 R 18004 0 R]
-/Limits [(lstnumber.-78.1) (lstnumber.-80.10)]
+/Kids [18048 0 R 18049 0 R 18050 0 R 18051 0 R 18052 0 R 18053 0 R]
+/Limits [(page.213) (page.245)]
 >> endobj
 18431 0 obj <<
-/Kids [18005 0 R 18006 0 R 18007 0 R 18008 0 R 18009 0 R 18010 0 R]
-/Limits [(lstnumber.-80.11) (lstnumber.-83.3)]
+/Kids [18054 0 R 18055 0 R 18056 0 R 18057 0 R 18058 0 R 18059 0 R]
+/Limits [(page.246) (page.278)]
 >> endobj
 18432 0 obj <<
-/Kids [18011 0 R 18012 0 R 18013 0 R 18014 0 R 18015 0 R 18016 0 R]
-/Limits [(lstnumber.-83.4) (lstnumber.-85.4)]
+/Kids [18060 0 R 18061 0 R 18062 0 R 18063 0 R 18064 0 R 18065 0 R]
+/Limits [(page.279) (page.31)]
 >> endobj
 18433 0 obj <<
-/Kids [18017 0 R 18018 0 R 18019 0 R 18020 0 R 18021 0 R 18022 0 R]
-/Limits [(lstnumber.-85.5) (lstnumber.-89.3)]
+/Kids [18066 0 R 18067 0 R 18068 0 R 18069 0 R 18070 0 R 18071 0 R]
+/Limits [(page.310) (page.342)]
 >> endobj
 18434 0 obj <<
-/Kids [18023 0 R 18024 0 R 18025 0 R 18026 0 R 18027 0 R 18028 0 R]
-/Limits [(lstnumber.-89.4) (lstnumber.-91.12)]
+/Kids [18072 0 R 18073 0 R 18074 0 R 18075 0 R 18076 0 R 18077 0 R]
+/Limits [(page.343) (page.375)]
 >> endobj
 18435 0 obj <<
-/Kids [18029 0 R 18030 0 R 18031 0 R 18032 0 R 18033 0 R 18034 0 R]
-/Limits [(lstnumber.-91.13) (modif2)]
+/Kids [18078 0 R 18079 0 R 18080 0 R 18081 0 R 18082 0 R 18083 0 R]
+/Limits [(page.376) (page.407)]
 >> endobj
 18436 0 obj <<
-/Kids [18035 0 R 18036 0 R 18037 0 R 18038 0 R 18039 0 R 18040 0 R]
-/Limits [(msdfs) (page.119)]
+/Kids [18084 0 R 18085 0 R 18086 0 R 18087 0 R 18088 0 R 18089 0 R]
+/Limits [(page.408) (page.44)]
 >> endobj
 18437 0 obj <<
-/Kids [18041 0 R 18042 0 R 18043 0 R 18044 0 R 18045 0 R 18046 0 R]
-/Limits [(page.12) (page.151)]
+/Kids [18090 0 R 18091 0 R 18092 0 R 18093 0 R 18094 0 R 18095 0 R]
+/Limits [(page.440) (page.472)]
 >> endobj
 18438 0 obj <<
-/Kids [18047 0 R 18048 0 R 18049 0 R 18050 0 R 18051 0 R 18052 0 R]
-/Limits [(page.152) (page.184)]
+/Kids [18096 0 R 18097 0 R 18098 0 R 18099 0 R 18100 0 R 18101 0 R]
+/Limits [(page.473) (page.504)]
 >> endobj
 18439 0 obj <<
-/Kids [18053 0 R 18054 0 R 18055 0 R 18056 0 R 18057 0 R 18058 0 R]
-/Limits [(page.185) (page.216)]
+/Kids [18102 0 R 18103 0 R 18104 0 R 18105 0 R 18106 0 R 18107 0 R]
+/Limits [(page.505) (page.537)]
 >> endobj
 18440 0 obj <<
-/Kids [18059 0 R 18060 0 R 18061 0 R 18062 0 R 18063 0 R 18064 0 R]
-/Limits [(page.217) (page.249)]
+/Kids [18108 0 R 18109 0 R 18110 0 R 18111 0 R 18112 0 R 18113 0 R]
+/Limits [(page.538) (page.57)]
 >> endobj
 18441 0 obj <<
-/Kids [18065 0 R 18066 0 R 18067 0 R 18068 0 R 18069 0 R 18070 0 R]
-/Limits [(page.25) (page.281)]
+/Kids [18114 0 R 18115 0 R 18116 0 R 18117 0 R 18118 0 R 18119 0 R]
+/Limits [(page.570) (page.601)]
 >> endobj
 18442 0 obj <<
-/Kids [18071 0 R 18072 0 R 18073 0 R 18074 0 R 18075 0 R 18076 0 R]
-/Limits [(page.282) (page.313)]
+/Kids [18120 0 R 18121 0 R 18122 0 R 18123 0 R 18124 0 R 18125 0 R]
+/Limits [(page.602) (page.634)]
 >> endobj
 18443 0 obj <<
-/Kids [18077 0 R 18078 0 R 18079 0 R 18080 0 R 18081 0 R 18082 0 R]
-/Limits [(page.314) (page.346)]
+/Kids [18126 0 R 18127 0 R 18128 0 R 18129 0 R 18130 0 R 18131 0 R]
+/Limits [(page.635) (page.667)]
 >> endobj
 18444 0 obj <<
-/Kids [18083 0 R 18084 0 R 18085 0 R 18086 0 R 18087 0 R 18088 0 R]
-/Limits [(page.347) (page.379)]
+/Kids [18132 0 R 18133 0 R 18134 0 R 18135 0 R 18136 0 R 18137 0 R]
+/Limits [(page.668) (page.7)]
 >> endobj
 18445 0 obj <<
-/Kids [18089 0 R 18090 0 R 18091 0 R 18092 0 R 18093 0 R 18094 0 R]
-/Limits [(page.38) (page.410)]
+/Kids [18138 0 R 18139 0 R 18140 0 R 18141 0 R 18142 0 R 18143 0 R]
+/Limits [(page.70) (page.731)]
 >> endobj
 18446 0 obj <<
-/Kids [18095 0 R 18096 0 R 18097 0 R 18098 0 R 18099 0 R 18100 0 R]
-/Limits [(page.411) (page.443)]
+/Kids [18144 0 R 18145 0 R 18146 0 R 18147 0 R 18148 0 R 18149 0 R]
+/Limits [(page.732) (page.764)]
 >> endobj
 18447 0 obj <<
-/Kids [18101 0 R 18102 0 R 18103 0 R 18104 0 R 18105 0 R 18106 0 R]
-/Limits [(page.444) (page.476)]
+/Kids [18150 0 R 18151 0 R 18152 0 R 18153 0 R 18154 0 R 18155 0 R]
+/Limits [(page.765) (page.797)]
 >> endobj
 18448 0 obj <<
-/Kids [18107 0 R 18108 0 R 18109 0 R 18110 0 R 18111 0 R 18112 0 R]
-/Limits [(page.477) (page.508)]
+/Kids [18156 0 R 18157 0 R 18158 0 R 18159 0 R 18160 0 R 18161 0 R]
+/Limits [(page.798) (page.829)]
 >> endobj
 18449 0 obj <<
-/Kids [18113 0 R 18114 0 R 18115 0 R 18116 0 R 18117 0 R 18118 0 R]
-/Limits [(page.509) (page.540)]
+/Kids [18162 0 R 18163 0 R 18164 0 R 18165 0 R 18166 0 R 18167 0 R]
+/Limits [(page.83) (page.861)]
 >> endobj
 18450 0 obj <<
-/Kids [18119 0 R 18120 0 R 18121 0 R 18122 0 R 18123 0 R 18124 0 R]
-/Limits [(page.541) (page.573)]
+/Kids [18168 0 R 18169 0 R 18170 0 R 18171 0 R 18172 0 R 18173 0 R]
+/Limits [(page.862) (page.95)]
 >> endobj
 18451 0 obj <<
-/Kids [18125 0 R 18126 0 R 18127 0 R 18128 0 R 18129 0 R 18130 0 R]
-/Limits [(page.574) (page.605)]
+/Kids [18174 0 R 18175 0 R 18176 0 R 18177 0 R 18178 0 R 18179 0 R]
+/Limits [(page.96) (page.xlv)]
 >> endobj
 18452 0 obj <<
-/Kids [18131 0 R 18132 0 R 18133 0 R 18134 0 R 18135 0 R 18136 0 R]
-/Limits [(page.606) (page.638)]
+/Kids [18180 0 R 18181 0 R 18182 0 R 18183 0 R 18184 0 R 18185 0 R]
+/Limits [(page.xlvi) (passdbtech)]
 >> endobj
 18453 0 obj <<
-/Kids [18137 0 R 18138 0 R 18139 0 R 18140 0 R 18141 0 R 18142 0 R]
-/Limits [(page.639) (page.670)]
+/Kids [18186 0 R 18187 0 R 18188 0 R 18189 0 R 18190 0 R 18191 0 R]
+/Limits [(pdbeditthing) (section*.16)]
 >> endobj
 18454 0 obj <<
-/Kids [18143 0 R 18144 0 R 18145 0 R 18146 0 R 18147 0 R 18148 0 R]
-/Limits [(page.671) (page.702)]
+/Kids [18192 0 R 18193 0 R 18194 0 R 18195 0 R 18196 0 R 18197 0 R]
+/Limits [(section*.17) (section*.54)]
 >> endobj
 18455 0 obj <<
-/Kids [18149 0 R 18150 0 R 18151 0 R 18152 0 R 18153 0 R 18154 0 R]
-/Limits [(page.703) (page.735)]
+/Kids [18198 0 R 18199 0 R 18200 0 R 18201 0 R 18202 0 R 18203 0 R]
+/Limits [(section*.55) (section.13.3)]
 >> endobj
 18456 0 obj <<
-/Kids [18155 0 R 18156 0 R 18157 0 R 18158 0 R 18159 0 R 18160 0 R]
-/Limits [(page.736) (page.768)]
+/Kids [18204 0 R 18205 0 R 18206 0 R 18207 0 R 18208 0 R 18209 0 R]
+/Limits [(section.13.4) (section.2.1)]
 >> endobj
 18457 0 obj <<
-/Kids [18161 0 R 18162 0 R 18163 0 R 18164 0 R 18165 0 R 18166 0 R]
-/Limits [(page.769) (page.80)]
+/Kids [18210 0 R 18211 0 R 18212 0 R 18213 0 R 18214 0 R 18215 0 R]
+/Limits [(section.2.2) (section.22.7)]
 >> endobj
 18458 0 obj <<
-/Kids [18167 0 R 18168 0 R 18169 0 R 18170 0 R 18171 0 R 18172 0 R]
-/Limits [(page.800) (page.832)]
+/Kids [18216 0 R 18217 0 R 18218 0 R 18219 0 R 18220 0 R 18221 0 R]
+/Limits [(section.22.8) (section.29.4)]
 >> endobj
 18459 0 obj <<
-/Kids [18173 0 R 18174 0 R 18175 0 R 18176 0 R 18177 0 R 18178 0 R]
-/Limits [(page.833) (page.865)]
+/Kids [18222 0 R 18223 0 R 18224 0 R 18225 0 R 18226 0 R 18227 0 R]
+/Limits [(section.29.5) (section.4.5)]
 >> endobj
 18460 0 obj <<
-/Kids [18179 0 R 18180 0 R 18181 0 R 18182 0 R 18183 0 R 18184 0 R]
-/Limits [(page.866) (page.99)]
+/Kids [18228 0 R 18229 0 R 18230 0 R 18231 0 R 18232 0 R 18233 0 R]
+/Limits [(section.4.6) (section.44.8)]
 >> endobj
 18461 0 obj <<
-/Kids [18185 0 R 18186 0 R 18187 0 R 18188 0 R 18189 0 R 18190 0 R]
-/Limits [(page.i) (page.xv)]
+/Kids [18234 0 R 18235 0 R 18236 0 R 18237 0 R 18238 0 R 18239 0 R]
+/Limits [(section.44.9) (small14)]
 >> endobj
 18462 0 obj <<
-/Kids [18191 0 R 18192 0 R 18193 0 R 18194 0 R 18195 0 R 18196 0 R]
-/Limits [(page.xvi) (pdftoepsonusb)]
+/Kids [18240 0 R 18241 0 R 18242 0 R 18243 0 R 18244 0 R 18245 0 R]
+/Limits [(small8) (subsection.10.7.1)]
 >> endobj
 18463 0 obj <<
-/Kids [18197 0 R 18198 0 R 18199 0 R 18200 0 R 18201 0 R 18202 0 R]
-/Limits [(pdftosocket) (section*.22)]
+/Kids [18246 0 R 18247 0 R 18248 0 R 18249 0 R 18250 0 R 18251 0 R]
+/Limits [(subsection.10.7.2) (subsection.13.3.3)]
 >> endobj
 18464 0 obj <<
-/Kids [18203 0 R 18204 0 R 18205 0 R 18206 0 R 18207 0 R 18208 0 R]
-/Limits [(section*.23) (section*.58)]
+/Kids [18252 0 R 18253 0 R 18254 0 R 18255 0 R 18256 0 R 18257 0 R]
+/Limits [(subsection.13.4.1) (subsection.16.5.7)]
 >> endobj
 18465 0 obj <<
-/Kids [18209 0 R 18210 0 R 18211 0 R 18212 0 R 18213 0 R 18214 0 R]
-/Limits [(section*.9) (section.13.7)]
+/Kids [18258 0 R 18259 0 R 18260 0 R 18261 0 R 18262 0 R 18263 0 R]
+/Limits [(subsection.16.5.8) (subsection.21.3.2)]
 >> endobj
 18466 0 obj <<
-/Kids [18215 0 R 18216 0 R 18217 0 R 18218 0 R 18219 0 R 18220 0 R]
-/Limits [(section.13.8) (section.20.2)]
+/Kids [18264 0 R 18265 0 R 18266 0 R 18267 0 R 18268 0 R 18269 0 R]
+/Limits [(subsection.21.4.1) (subsection.22.10.4)]
 >> endobj
 18467 0 obj <<
-/Kids [18221 0 R 18222 0 R 18223 0 R 18224 0 R 18225 0 R 18226 0 R]
-/Limits [(section.21.1) (section.23.2)]
+/Kids [18270 0 R 18271 0 R 18272 0 R 18273 0 R 18274 0 R 18275 0 R]
+/Limits [(subsection.22.10.5) (subsection.22.19.17)]
 >> endobj
 18468 0 obj <<
-/Kids [18227 0 R 18228 0 R 18229 0 R 18230 0 R 18231 0 R 18232 0 R]
-/Limits [(section.23.3) (section.3.3)]
+/Kids [18276 0 R 18277 0 R 18278 0 R 18279 0 R 18280 0 R 18281 0 R]
+/Limits [(subsection.22.19.18) (subsection.22.5.17)]
 >> endobj
 18469 0 obj <<
-/Kids [18233 0 R 18234 0 R 18235 0 R 18236 0 R 18237 0 R 18238 0 R]
-/Limits [(section.3.4) (section.40.2)]
+/Kids [18282 0 R 18283 0 R 18284 0 R 18285 0 R 18286 0 R 18287 0 R]
+/Limits [(subsection.22.5.18) (subsection.24.4.3)]
 >> endobj
 18470 0 obj <<
-/Kids [18239 0 R 18240 0 R 18241 0 R 18242 0 R 18243 0 R 18244 0 R]
-/Limits [(section.40.3) (section.45.3)]
+/Kids [18288 0 R 18289 0 R 18290 0 R 18291 0 R 18292 0 R 18293 0 R]
+/Limits [(subsection.24.4.4) (subsection.28.2.5)]
 >> endobj
 18471 0 obj <<
-/Kids [18245 0 R 18246 0 R 18247 0 R 18248 0 R 18249 0 R 18250 0 R]
-/Limits [(section.45.4) (smbgrpadd)]
+/Kids [18294 0 R 18295 0 R 18296 0 R 18297 0 R 18298 0 R 18299 0 R]
+/Limits [(subsection.28.3.1) (subsection.32.2.4)]
 >> endobj
 18472 0 obj <<
-/Kids [18251 0 R 18252 0 R 18253 0 R 18254 0 R 18255 0 R 18256 0 R]
-/Limits [(smbgrpadd.sh) (subsection.10.8.2)]
+/Kids [18300 0 R 18301 0 R 18302 0 R 18303 0 R 18304 0 R 18305 0 R]
+/Limits [(subsection.32.2.5) (subsection.4.7.1)]
 >> endobj
 18473 0 obj <<
-/Kids [18257 0 R 18258 0 R 18259 0 R 18260 0 R 18261 0 R 18262 0 R]
-/Limits [(subsection.10.8.3) (subsection.13.4.4)]
+/Kids [18306 0 R 18307 0 R 18308 0 R 18309 0 R 18310 0 R 18311 0 R]
+/Limits [(subsection.4.7.2) (subsection.5.4.1)]
 >> endobj
 18474 0 obj <<
-/Kids [18263 0 R 18264 0 R 18265 0 R 18266 0 R 18267 0 R 18268 0 R]
-/Limits [(subsection.13.6.1) (subsection.16.6.3)]
+/Kids [18312 0 R 18313 0 R 18314 0 R 18315 0 R 18316 0 R 18317 0 R]
+/Limits [(subsection.5.4.2) (subsubsection.11.4.4.1)]
 >> endobj
 18475 0 obj <<
-/Kids [18269 0 R 18270 0 R 18271 0 R 18272 0 R 18273 0 R 18274 0 R]
-/Limits [(subsection.17.2.1) (subsection.21.5.3)]
+/Kids [18318 0 R 18319 0 R 18320 0 R 18321 0 R 18322 0 R 18323 0 R]
+/Limits [(subsubsection.11.4.4.10) (subsubsection.17.2.1.4)]
 >> endobj
 18476 0 obj <<
-/Kids [18275 0 R 18276 0 R 18277 0 R 18278 0 R 18279 0 R 18280 0 R]
-/Limits [(subsection.21.5.4) (subsection.22.10.8)]
+/Kids [18324 0 R 18325 0 R 18326 0 R 18327 0 R 18328 0 R 18329 0 R]
+/Limits [(subsubsection.17.2.1.5) (subsubsection.22.13.1.7)]
 >> endobj
 18477 0 obj <<
-/Kids [18281 0 R 18282 0 R 18283 0 R 18284 0 R 18285 0 R 18286 0 R]
-/Limits [(subsection.22.10.9) (subsection.22.19.20)]
+/Kids [18330 0 R 18331 0 R 18332 0 R 18333 0 R 18334 0 R 18335 0 R]
+/Limits [(subsubsection.22.13.1.8) (subsubsection.3.3.3.1)]
 >> endobj
 18478 0 obj <<
-/Kids [18287 0 R 18288 0 R 18289 0 R 18290 0 R 18291 0 R 18292 0 R]
-/Limits [(subsection.22.19.3) (subsection.22.5.3)]
+/Kids [18336 0 R 18337 0 R 18338 0 R 18339 0 R 18340 0 R 18341 0 R]
+/Limits [(subsubsection.3.3.4.1) (subsubsection.41.5.2.2)]
 >> endobj
 18479 0 obj <<
-/Kids [18293 0 R 18294 0 R 18295 0 R 18296 0 R 18297 0 R 18298 0 R]
-/Limits [(subsection.22.5.4) (subsection.24.5.1)]
+/Kids [18342 0 R 18343 0 R 18344 0 R 18345 0 R 18346 0 R 18347 0 R]
+/Limits [(subsubsection.5.2.1.1) (table.29.1)]
 >> endobj
 18480 0 obj <<
-/Kids [18299 0 R 18300 0 R 18301 0 R 18302 0 R 18303 0 R 18304 0 R]
-/Limits [(subsection.24.5.2) (subsection.29.3.2)]
+/Kids [18348 0 R 18349 0 R 18350 0 R 18351 0 R 18352 0 R 18353 0 R]
+/Limits [(table.29.2) (wxpp007)]
 >> endobj
 18481 0 obj <<
-/Kids [18305 0 R 18306 0 R 18307 0 R 18308 0 R 18309 0 R 18310 0 R]
-/Limits [(subsection.29.3.3) (subsection.34.1.2)]
+/Kids [18354 0 R]
+/Limits [(wxpp008) (xtdaudit)]
 >> endobj
 18482 0 obj <<
-/Kids [18311 0 R 18312 0 R 18313 0 R 18314 0 R 18315 0 R 18316 0 R]
-/Limits [(subsection.34.1.3) (subsection.4.7.5)]
+/Kids [18355 0 R 18356 0 R 18357 0 R 18358 0 R 18359 0 R 18360 0 R]
+/Limits [(127) (Item.252)]
 >> endobj
 18483 0 obj <<
-/Kids [18317 0 R 18318 0 R 18319 0 R 18320 0 R 18321 0 R 18322 0 R]
-/Limits [(subsection.4.7.6) (subsection.6.2.1)]
+/Kids [18361 0 R 18362 0 R 18363 0 R 18364 0 R 18365 0 R 18366 0 R]
+/Limits [(Item.253) (Item.65)]
 >> endobj
 18484 0 obj <<
-/Kids [18323 0 R 18324 0 R 18325 0 R 18326 0 R 18327 0 R 18328 0 R]
-/Limits [(subsection.6.2.2) (subsubsection.11.4.4.3)]
+/Kids [18367 0 R 18368 0 R 18369 0 R 18370 0 R 18371 0 R 18372 0 R]
+/Limits [(Item.66) (example.2.3.6)]
 >> endobj
 18485 0 obj <<
-/Kids [18329 0 R 18330 0 R 18331 0 R 18332 0 R 18333 0 R 18334 0 R]
-/Limits [(subsubsection.11.4.4.4) (subsubsection.17.2.1.8)]
+/Kids [18373 0 R 18374 0 R 18375 0 R 18376 0 R 18377 0 R 18378 0 R]
+/Limits [(example.2.3.7) (id305367)]
 >> endobj
 18486 0 obj <<
-/Kids [18335 0 R 18336 0 R 18337 0 R 18338 0 R 18339 0 R 18340 0 R]
-/Limits [(subsubsection.17.2.1.9) (subsubsection.23.3.7.1)]
+/Kids [18379 0 R 18380 0 R 18381 0 R 18382 0 R 18383 0 R 18384 0 R]
+/Limits [(id305424) (id348701)]
 >> endobj
 18487 0 obj <<
-/Kids [18341 0 R 18342 0 R 18343 0 R 18344 0 R 18345 0 R 18346 0 R]
-/Limits [(subsubsection.24.5.3.1) (subsubsection.32.2.2.2)]
+/Kids [18385 0 R 18386 0 R 18387 0 R 18388 0 R 18389 0 R 18390 0 R]
+/Limits [(id348721) (id380117)]
 >> endobj
 18488 0 obj <<
-/Kids [18347 0 R 18348 0 R 18349 0 R 18350 0 R 18351 0 R 18352 0 R]
-/Limits [(subsubsection.32.2.2.3) (subsubsection.6.2.4.1)]
+/Kids [18391 0 R 18392 0 R 18393 0 R 18394 0 R 18395 0 R 18396 0 R]
+/Limits [(id380146) (id406553)]
 >> endobj
 18489 0 obj <<
-/Kids [18353 0 R 18354 0 R 18355 0 R 18356 0 R 18357 0 R 18358 0 R]
-/Limits [(subsubsection.6.2.4.2) (table.36.1)]
+/Kids [18397 0 R 18398 0 R 18399 0 R 18400 0 R 18401 0 R 18402 0 R]
+/Limits [(id406616) (lstnumber.-10.1)]
 >> endobj
 18490 0 obj <<
-/Kids [18359 0 R 18360 0 R 18361 0 R 18362 0 R 18363 0 R 18364 0 R]
-/Limits [(table.36.2) (xtdaudit)]
+/Kids [18403 0 R 18404 0 R 18405 0 R 18406 0 R 18407 0 R 18408 0 R]
+/Limits [(lstnumber.-10.10) (lstnumber.-12.24)]
 >> endobj
 18491 0 obj <<
-/Kids [18365 0 R 18366 0 R 18367 0 R 18368 0 R 18369 0 R 18370 0 R]
-/Limits [(127) (Item.252)]
+/Kids [18409 0 R 18410 0 R 18411 0 R 18412 0 R 18413 0 R 18414 0 R]
+/Limits [(lstnumber.-12.25) (lstnumber.-52.10)]
 >> endobj
 18492 0 obj <<
-/Kids [18371 0 R 18372 0 R 18373 0 R 18374 0 R 18375 0 R 18376 0 R]
-/Limits [(Item.253) (Item.65)]
+/Kids [18415 0 R 18416 0 R 18417 0 R 18418 0 R 18419 0 R 18420 0 R]
+/Limits [(lstnumber.-52.11) (lstnumber.-80.10)]
 >> endobj
 18493 0 obj <<
-/Kids [18377 0 R 18378 0 R 18379 0 R 18380 0 R 18381 0 R 18382 0 R]
-/Limits [(Item.66) (example.2.3.6)]
+/Kids [18421 0 R 18422 0 R 18423 0 R 18424 0 R 18425 0 R 18426 0 R]
+/Limits [(lstnumber.-80.11) (page.115)]
 >> endobj
 18494 0 obj <<
-/Kids [18383 0 R 18384 0 R 18385 0 R 18386 0 R 18387 0 R 18388 0 R]
-/Limits [(example.2.3.7) (id2526402)]
+/Kids [18427 0 R 18428 0 R 18429 0 R 18430 0 R 18431 0 R 18432 0 R]
+/Limits [(page.116) (page.31)]
 >> endobj
 18495 0 obj <<
-/Kids [18389 0 R 18390 0 R 18391 0 R 18392 0 R 18393 0 R 18394 0 R]
-/Limits [(id2526474) (id2576232)]
+/Kids [18433 0 R 18434 0 R 18435 0 R 18436 0 R 18437 0 R 18438 0 R]
+/Limits [(page.310) (page.504)]
 >> endobj
 18496 0 obj <<
-/Kids [18395 0 R 18396 0 R 18397 0 R 18398 0 R 18399 0 R 18400 0 R]
-/Limits [(id2576483) (id2610583)]
+/Kids [18439 0 R 18440 0 R 18441 0 R 18442 0 R 18443 0 R 18444 0 R]
+/Limits [(page.505) (page.7)]
 >> endobj
 18497 0 obj <<
-/Kids [18401 0 R 18402 0 R 18403 0 R 18404 0 R 18405 0 R 18406 0 R]
-/Limits [(id2610662) (id2639432)]
+/Kids [18445 0 R 18446 0 R 18447 0 R 18448 0 R 18449 0 R 18450 0 R]
+/Limits [(page.70) (page.95)]
 >> endobj
 18498 0 obj <<
-/Kids [18407 0 R 18408 0 R 18409 0 R 18410 0 R 18411 0 R 18412 0 R]
-/Limits [(id2639782) (lstnumber.-10.1)]
+/Kids [18451 0 R 18452 0 R 18453 0 R 18454 0 R 18455 0 R 18456 0 R]
+/Limits [(page.96) (section.2.1)]
 >> endobj
 18499 0 obj <<
-/Kids [18413 0 R 18414 0 R 18415 0 R 18416 0 R 18417 0 R 18418 0 R]
-/Limits [(lstnumber.-10.10) (lstnumber.-12.24)]
+/Kids [18457 0 R 18458 0 R 18459 0 R 18460 0 R 18461 0 R 18462 0 R]
+/Limits [(section.2.2) (subsection.10.7.1)]
 >> endobj
 18500 0 obj <<
-/Kids [18419 0 R 18420 0 R 18421 0 R 18422 0 R 18423 0 R 18424 0 R]
-/Limits [(lstnumber.-12.25) (lstnumber.-52.10)]
+/Kids [18463 0 R 18464 0 R 18465 0 R 18466 0 R 18467 0 R 18468 0 R]
+/Limits [(subsection.10.7.2) (subsection.22.5.17)]
 >> endobj
 18501 0 obj <<
-/Kids [18425 0 R 18426 0 R 18427 0 R 18428 0 R 18429 0 R 18430 0 R]
-/Limits [(lstnumber.-52.11) (lstnumber.-80.10)]
+/Kids [18469 0 R 18470 0 R 18471 0 R 18472 0 R 18473 0 R 18474 0 R]
+/Limits [(subsection.22.5.18) (subsubsection.11.4.4.1)]
 >> endobj
 18502 0 obj <<
-/Kids [18431 0 R 18432 0 R 18433 0 R 18434 0 R 18435 0 R 18436 0 R]
-/Limits [(lstnumber.-80.11) (page.119)]
+/Kids [18475 0 R 18476 0 R 18477 0 R 18478 0 R 18479 0 R 18480 0 R]
+/Limits [(subsubsection.11.4.4.10) (wxpp007)]
 >> endobj
 18503 0 obj <<
-/Kids [18437 0 R 18438 0 R 18439 0 R 18440 0 R 18441 0 R 18442 0 R]
-/Limits [(page.12) (page.313)]
+/Kids [18481 0 R]
+/Limits [(wxpp008) (xtdaudit)]
 >> endobj
 18504 0 obj <<
-/Kids [18443 0 R 18444 0 R 18445 0 R 18446 0 R 18447 0 R 18448 0 R]
-/Limits [(page.314) (page.508)]
+/Kids [18482 0 R 18483 0 R 18484 0 R 18485 0 R 18486 0 R 18487 0 R]
+/Limits [(127) (id380117)]
 >> endobj
 18505 0 obj <<
-/Kids [18449 0 R 18450 0 R 18451 0 R 18452 0 R 18453 0 R 18454 0 R]
-/Limits [(page.509) (page.702)]
+/Kids [18488 0 R 18489 0 R 18490 0 R 18491 0 R 18492 0 R 18493 0 R]
+/Limits [(id380146) (page.115)]
 >> endobj
 18506 0 obj <<
-/Kids [18455 0 R 18456 0 R 18457 0 R 18458 0 R 18459 0 R 18460 0 R]
-/Limits [(page.703) (page.99)]
+/Kids [18494 0 R 18495 0 R 18496 0 R 18497 0 R 18498 0 R 18499 0 R]
+/Limits [(page.116) (subsection.10.7.1)]
 >> endobj
 18507 0 obj <<
-/Kids [18461 0 R 18462 0 R 18463 0 R 18464 0 R 18465 0 R 18466 0 R]
-/Limits [(page.i) (section.20.2)]
+/Kids [18500 0 R 18501 0 R 18502 0 R 18503 0 R]
+/Limits [(subsection.10.7.2) (xtdaudit)]
 >> endobj
 18508 0 obj <<
-/Kids [18467 0 R 18468 0 R 18469 0 R 18470 0 R 18471 0 R 18472 0 R]
-/Limits [(section.21.1) (subsection.10.8.2)]
+/Kids [18504 0 R 18505 0 R 18506 0 R 18507 0 R]
+/Limits [(127) (xtdaudit)]
 >> endobj
 18509 0 obj <<
-/Kids [18473 0 R 18474 0 R 18475 0 R 18476 0 R 18477 0 R 18478 0 R]
-/Limits [(subsection.10.8.3) (subsection.22.5.3)]
+/Dests 18508 0 R
 >> endobj
 18510 0 obj <<
-/Kids [18479 0 R 18480 0 R 18481 0 R 18482 0 R 18483 0 R 18484 0 R]
-/Limits [(subsection.22.5.4) (subsubsection.11.4.4.3)]
->> endobj
-18511 0 obj <<
-/Kids [18485 0 R 18486 0 R 18487 0 R 18488 0 R 18489 0 R 18490 0 R]
-/Limits [(subsubsection.11.4.4.4) (xtdaudit)]
->> endobj
-18512 0 obj <<
-/Kids [18491 0 R 18492 0 R 18493 0 R 18494 0 R 18495 0 R 18496 0 R]
-/Limits [(127) (id2610583)]
->> endobj
-18513 0 obj <<
-/Kids [18497 0 R 18498 0 R 18499 0 R 18500 0 R 18501 0 R 18502 0 R]
-/Limits [(id2610662) (page.119)]
->> endobj
-18514 0 obj <<
-/Kids [18503 0 R 18504 0 R 18505 0 R 18506 0 R 18507 0 R 18508 0 R]
-/Limits [(page.12) (subsection.10.8.2)]
->> endobj
-18515 0 obj <<
-/Kids [18509 0 R 18510 0 R 18511 0 R]
-/Limits [(subsection.10.8.3) (xtdaudit)]
->> endobj
-18516 0 obj <<
-/Kids [18512 0 R 18513 0 R 18514 0 R 18515 0 R]
-/Limits [(127) (xtdaudit)]
->> endobj
-18517 0 obj <<
-/Dests 18516 0 R
->> endobj
-18518 0 obj <<
 /Type /Catalog
-/Pages 17607 0 R
-/Outlines 17608 0 R
-/Names 18517 0 R
+/Pages 17596 0 R
+/Outlines 17597 0 R
+/Names 18509 0 R
 /PageMode/UseOutlines/PageLabels << /Nums [0 << /S /r >> 1 << /S /r /St 5 >> 59 << /S /r /St 61 >> 61 << /S /D >> 101 << /S /D /St 39 >> 209 << /S /D /St 145 >> 767 << /S /D /St 701 >> 807 << /S /D /St 739 >> 833 << /S /D /St 763 >> ] >>
 /OpenAction 3685 0 R
 >> endobj
-18519 0 obj <<
+18511 0 obj <<
 /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.3)/Keywords()
-/CreationDate (D:20080610111526+02'00')
-/ModDate (D:20080610111526+02'00')
+/CreationDate (D:20080528091224-05'00')
+/ModDate (D:20080528091224-05'00')
 /Trapped /False
 /PTEX.Fullbanner (This is pdfTeX using libpoppler, Version 3.141592-1.40.3-2.2 (Web2C 7.5.6) kpathsea version 3.5.6)
 >> endobj
 xref
-0 18520
+0 18512
 0000000001 65535 f 
 0000000002 00000 f 
 0000000003 00000 f 
 0000000004 00000 f 
 0000005403 00000 f 
 0000000015 00000 n 
-0000105169 00000 n 
-0004871948 00000 n 
+0000105166 00000 n 
+0005429411 00000 n 
 0000000061 00000 n 
 0000000102 00000 n 
-0000105230 00000 n 
-0004871860 00000 n 
+0000105227 00000 n 
+0005429323 00000 n 
 0000000148 00000 n 
 0000000178 00000 n 
-0004506517 00000 n 
-0004871770 00000 n 
-0000000224 00000 n 
-0000000251 00000 n 
-0000111502 00000 n 
-0004871680 00000 n 
-0000000298 00000 n 
-0000000333 00000 n 
-0000354214 00000 n 
-0004871590 00000 n 
-0000000380 00000 n 
-0000000414 00000 n 
-0000372190 00000 n 
-0004871500 00000 n 
-0000000461 00000 n 
-0000000494 00000 n 
-0000385406 00000 n 
-0004871410 00000 n 
-0000000541 00000 n 
-0000000568 00000 n 
-0000395672 00000 n 
-0004871320 00000 n 
-0000000615 00000 n 
-0000000641 00000 n 
-0000400760 00000 n 
-0004871230 00000 n 
-0000000688 00000 n 
-0000000719 00000 n 
-0000412898 00000 n 
-0004871101 00000 n 
-0000000762 00000 n 
-0000000808 00000 n 
-0000414027 00000 n 
-0004871027 00000 n 
-0000000856 00000 n 
-0000000908 00000 n 
-0000416847 00000 n 
-0004870901 00000 n 
-0000000954 00000 n 
-0000001012 00000 n 
-0000416973 00000 n 
-0004870827 00000 n 
-0000001060 00000 n 
-0000001113 00000 n 
-0000417099 00000 n 
-0004870703 00000 n 
-0000001161 00000 n 
-0000001214 00000 n 
-0000417225 00000 n 
-0004870629 00000 n 
-0000001267 00000 n 
-0000001317 00000 n 
-0000424044 00000 n 
-0004870542 00000 n 
-0000001370 00000 n 
-0000001424 00000 n 
-0000424170 00000 n 
-0004870455 00000 n 
-0000001477 00000 n 
-0000001516 00000 n 
-0000430185 00000 n 
-0004870331 00000 n 
-0000001569 00000 n 
-0000001615 00000 n 
-0000433377 00000 n 
-0004870270 00000 n 
-0000001673 00000 n 
-0000001735 00000 n 
-0000436573 00000 n 
-0004870196 00000 n 
-0000001788 00000 n 
-0000001817 00000 n 
-0000436699 00000 n 
-0004870109 00000 n 
-0000001865 00000 n 
-0000001923 00000 n 
-0000438637 00000 n 
-0004870022 00000 n 
-0000001971 00000 n 
-0000002020 00000 n 
-0000438763 00000 n 
-0004869896 00000 n 
-0000002068 00000 n 
-0000002123 00000 n 
-0000441987 00000 n 
-0004869820 00000 n 
-0000002176 00000 n 
-0000002228 00000 n 
-0000442113 00000 n 
-0004869743 00000 n 
-0000002282 00000 n 
-0000002320 00000 n 
-0000444474 00000 n 
-0004869627 00000 n 
-0000002369 00000 n 
-0000002406 00000 n 
-0000444601 00000 n 
-0004869548 00000 n 
-0000002460 00000 n 
-0000002516 00000 n 
-0000444728 00000 n 
-0004869455 00000 n 
-0000002570 00000 n 
-0000002632 00000 n 
-0000444855 00000 n 
-0004869376 00000 n 
-0000002686 00000 n 
-0000002748 00000 n 
-0000451111 00000 n 
-0004869260 00000 n 
-0000002795 00000 n 
-0000002856 00000 n 
-0000454816 00000 n 
-0004869181 00000 n 
-0000002905 00000 n 
-0000002950 00000 n 
-0000454943 00000 n 
-0004869088 00000 n 
-0000002999 00000 n 
-0000003051 00000 n 
-0000457391 00000 n 
-0004868970 00000 n 
-0000003100 00000 n 
-0000003139 00000 n 
-0000457518 00000 n 
-0004868852 00000 n 
-0000003193 00000 n 
-0000003236 00000 n 
-0000457645 00000 n 
-0004868773 00000 n 
-0000003295 00000 n 
-0000003358 00000 n 
-0000466689 00000 n 
-0004868680 00000 n 
-0000003417 00000 n 
-0000003481 00000 n 
-0000467776 00000 n 
-0004868587 00000 n 
-0000003540 00000 n 
-0000003590 00000 n 
-0000478510 00000 n 
-0004868508 00000 n 
-0000003649 00000 n 
-0000003716 00000 n 
-0000489799 00000 n 
-0004868376 00000 n 
-0000003770 00000 n 
-0000003816 00000 n 
-0000493433 00000 n 
-0004868311 00000 n 
-0000003875 00000 n 
-0000003924 00000 n 
-0000503732 00000 n 
-0004868193 00000 n 
-0000003978 00000 n 
-0000004021 00000 n 
-0000506227 00000 n 
-0004868114 00000 n 
-0000004080 00000 n 
-0000004135 00000 n 
-0000515257 00000 n 
-0004868035 00000 n 
-0000004194 00000 n 
-0000004240 00000 n 
-0000540580 00000 n 
-0004867902 00000 n 
-0000004284 00000 n 
-0000004339 00000 n 
-0000541757 00000 n 
-0004867823 00000 n 
-0000004388 00000 n 
-0000004443 00000 n 
-0000544242 00000 n 
-0004867691 00000 n 
-0000004490 00000 n 
-0000004551 00000 n 
-0000544369 00000 n 
-0004867612 00000 n 
-0000004600 00000 n 
-0000004645 00000 n 
-0000546533 00000 n 
-0004867519 00000 n 
-0000004694 00000 n 
-0000004730 00000 n 
-0000550060 00000 n 
-0004867387 00000 n 
-0000004779 00000 n 
-0000004823 00000 n 
-0000552688 00000 n 
-0004867269 00000 n 
-0000004877 00000 n 
-0000004922 00000 n 
-0000555732 00000 n 
-0004867204 00000 n 
-0000004981 00000 n 
-0000005030 00000 n 
-0000555987 00000 n 
-0004867072 00000 n 
-0000005084 00000 n 
-0000005130 00000 n 
-0000558565 00000 n 
-0004867007 00000 n 
-0000005189 00000 n 
-0000005238 00000 n 
-0000558820 00000 n 
-0004866875 00000 n 
-0000005292 00000 n 
-0000005362 00000 n 
-0000561394 00000 n 
-0004866810 00000 n 
-0000005421 00000 n 
-0000005470 00000 n 
-0000568206 00000 n 
-0004866678 00000 n 
-0000005524 00000 n 
-0000005591 00000 n 
-0000568333 00000 n 
-0004866613 00000 n 
-0000005650 00000 n 
-0000005699 00000 n 
-0000568780 00000 n 
-0004866495 00000 n 
-0000005753 00000 n 
-0000005818 00000 n 
-0000573855 00000 n 
-0004866430 00000 n 
-0000005877 00000 n 
-0000005926 00000 n 
-0000576725 00000 n 
-0004866337 00000 n 
-0000005975 00000 n 
-0000006016 00000 n 
-0000579733 00000 n 
-0004866219 00000 n 
-0000006065 00000 n 
-0000006102 00000 n 
-0000582547 00000 n 
-0004866140 00000 n 
-0000006156 00000 n 
-0000006208 00000 n 
-0000582674 00000 n 
-0004866047 00000 n 
-0000006262 00000 n 
-0000006325 00000 n 
-0000582800 00000 n 
-0004865954 00000 n 
-0000006379 00000 n 
-0000006438 00000 n 
-0000582927 00000 n 
-0004865861 00000 n 
-0000006492 00000 n 
-0000006566 00000 n 
-0000584823 00000 n 
-0004865782 00000 n 
-0000006620 00000 n 
-0000006731 00000 n 
-0000587365 00000 n 
-0004865650 00000 n 
-0000006778 00000 n 
-0000006822 00000 n 
-0000596842 00000 n 
-0004865571 00000 n 
-0000006871 00000 n 
-0000006916 00000 n 
-0000607885 00000 n 
-0004865478 00000 n 
-0000006965 00000 n 
-0000007023 00000 n 
-0000615929 00000 n 
-0004865346 00000 n 
-0000007072 00000 n 
-0000007120 00000 n 
-0000616056 00000 n 
-0004865267 00000 n 
-0000007174 00000 n 
-0000007223 00000 n 
-0000624263 00000 n 
-0004865188 00000 n 
-0000007277 00000 n 
-0000007331 00000 n 
-0000633567 00000 n 
-0004865095 00000 n 
-0000007380 00000 n 
-0000007441 00000 n 
-0000642149 00000 n 
-0004865002 00000 n 
-0000007490 00000 n 
-0000007538 00000 n 
-0000645149 00000 n 
-0004864870 00000 n 
-0000007587 00000 n 
-0000007649 00000 n 
-0000645276 00000 n 
-0004864752 00000 n 
-0000007703 00000 n 
-0000007757 00000 n 
-0000645403 00000 n 
-0004864673 00000 n 
-0000007816 00000 n 
-0000007865 00000 n 
-0000646231 00000 n 
-0004864580 00000 n 
-0000007924 00000 n 
-0000007998 00000 n 
-0000648886 00000 n 
-0004864501 00000 n 
-0000008057 00000 n 
-0000008118 00000 n 
-0000655104 00000 n 
-0004864422 00000 n 
-0000008172 00000 n 
-0000008231 00000 n 
-0000660309 00000 n 
-0004864304 00000 n 
-0000008280 00000 n 
-0000008317 00000 n 
-0000660436 00000 n 
-0004864225 00000 n 
-0000008371 00000 n 
-0000008440 00000 n 
-0000660563 00000 n 
-0004864132 00000 n 
-0000008494 00000 n 
-0000008576 00000 n 
-0000662702 00000 n 
-0004864039 00000 n 
-0000008630 00000 n 
-0000008697 00000 n 
-0000665423 00000 n 
-0004863946 00000 n 
-0000008751 00000 n 
-0000008820 00000 n 
-0000665550 00000 n 
-0004863853 00000 n 
-0000008874 00000 n 
-0000008916 00000 n 
-0000665676 00000 n 
-0004863760 00000 n 
-0000008970 00000 n 
-0000009025 00000 n 
-0000667569 00000 n 
-0004863681 00000 n 
-0000009079 00000 n 
-0000009167 00000 n 
-0000670072 00000 n 
-0004863549 00000 n 
-0000009214 00000 n 
-0000009265 00000 n 
-0000670199 00000 n 
-0004863470 00000 n 
-0000009314 00000 n 
-0000009359 00000 n 
-0000672990 00000 n 
-0004863338 00000 n 
-0000009408 00000 n 
-0000009464 00000 n 
-0000675903 00000 n 
-0004863220 00000 n 
-0000009518 00000 n 
-0000009579 00000 n 
-0000682188 00000 n 
-0004863155 00000 n 
-0000009638 00000 n 
-0000009691 00000 n 
-0000686676 00000 n 
-0004863062 00000 n 
-0000009745 00000 n 
-0000009795 00000 n 
-0000690008 00000 n 
-0004862969 00000 n 
-0000009849 00000 n 
-0000009906 00000 n 
-0000693144 00000 n 
-0004862876 00000 n 
-0000009960 00000 n 
-0000010036 00000 n 
-0000693271 00000 n 
-0004862758 00000 n 
-0000010090 00000 n 
-0000010166 00000 n 
-0000693398 00000 n 
-0004862679 00000 n 
-0000010225 00000 n 
-0000010280 00000 n 
-0000696300 00000 n 
-0004862600 00000 n 
-0000010339 00000 n 
-0000010395 00000 n 
-0000696427 00000 n 
-0004862468 00000 n 
-0000010444 00000 n 
-0000010506 00000 n 
-0000699421 00000 n 
-0004862403 00000 n 
-0000010560 00000 n 
-0000010607 00000 n 
-0000707292 00000 n 
-0004862285 00000 n 
-0000010656 00000 n 
-0000010693 00000 n 
-0000707419 00000 n 
-0004862206 00000 n 
-0000010747 00000 n 
-0000010803 00000 n 
-0000710059 00000 n 
-0004862113 00000 n 
-0000010857 00000 n 
-0000010937 00000 n 
-0000710185 00000 n 
-0004862020 00000 n 
-0000010991 00000 n 
-0000011055 00000 n 
-0000711297 00000 n 
-0004861941 00000 n 
-0000011109 00000 n 
-0000011163 00000 n 
-0000713342 00000 n 
-0004861809 00000 n 
-0000011210 00000 n 
-0000011257 00000 n 
-0000713469 00000 n 
-0004861730 00000 n 
-0000011306 00000 n 
-0000011351 00000 n 
-0000715953 00000 n 
-0004861598 00000 n 
-0000011400 00000 n 
-0000011476 00000 n 
-0000720133 00000 n 
-0004861519 00000 n 
-0000011530 00000 n 
-0000011597 00000 n 
-0000725694 00000 n 
-0004861426 00000 n 
-0000011651 00000 n 
-0000011734 00000 n 
-0000728862 00000 n 
-0004861333 00000 n 
-0000011788 00000 n 
-0000011859 00000 n 
-0000729180 00000 n 
-0004861215 00000 n 
-0000011913 00000 n 
-0000011997 00000 n 
-0000731749 00000 n 
-0004861136 00000 n 
-0000012056 00000 n 
-0000012119 00000 n 
-0000731876 00000 n 
-0004861043 00000 n 
-0000012178 00000 n 
-0000012224 00000 n 
-0000732003 00000 n 
-0004860964 00000 n 
-0000012283 00000 n 
-0000012323 00000 n 
-0000734752 00000 n 
-0004860832 00000 n 
-0000012372 00000 n 
-0000012416 00000 n 
-0000734879 00000 n 
-0004860753 00000 n 
-0000012470 00000 n 
-0000012535 00000 n 
-0000743779 00000 n 
-0004860674 00000 n 
-0000012589 00000 n 
-0000012657 00000 n 
-0000747415 00000 n 
-0004860542 00000 n 
-0000012706 00000 n 
-0000012757 00000 n 
-0000747542 00000 n 
-0004860463 00000 n 
-0000012811 00000 n 
-0000012855 00000 n 
-0000751586 00000 n 
-0004860370 00000 n 
-0000012909 00000 n 
-0000012959 00000 n 
-0000758670 00000 n 
-0004860238 00000 n 
-0000013013 00000 n 
-0000013066 00000 n 
-0000761034 00000 n 
-0004860173 00000 n 
-0000013125 00000 n 
-0000013168 00000 n 
-0000761161 00000 n 
-0004860080 00000 n 
-0000013222 00000 n 
-0000013268 00000 n 
-0000763911 00000 n 
-0004859987 00000 n 
-0000013322 00000 n 
-0000013370 00000 n 
-0000764038 00000 n 
-0004859908 00000 n 
-0000013424 00000 n 
-0000013455 00000 n 
-0000764165 00000 n 
-0004859815 00000 n 
-0000013504 00000 n 
-0000013581 00000 n 
-0000766813 00000 n 
-0004859697 00000 n 
-0000013630 00000 n 
-0000013667 00000 n 
-0000766940 00000 n 
-0004859618 00000 n 
-0000013721 00000 n 
-0000013780 00000 n 
-0000767067 00000 n 
-0004859525 00000 n 
-0000013834 00000 n 
-0000013890 00000 n 
-0000769347 00000 n 
-0004859446 00000 n 
-0000013944 00000 n 
-0000014001 00000 n 
-0000771554 00000 n 
-0004859314 00000 n 
-0000014048 00000 n 
-0000014096 00000 n 
-0000771681 00000 n 
-0004859235 00000 n 
-0000014145 00000 n 
-0000014190 00000 n 
-0000775010 00000 n 
-0004859142 00000 n 
-0000014239 00000 n 
-0000014273 00000 n 
-0000775137 00000 n 
-0004859010 00000 n 
-0000014322 00000 n 
-0000014367 00000 n 
-0000775264 00000 n 
-0004858931 00000 n 
-0000014421 00000 n 
-0000014477 00000 n 
-0000779842 00000 n 
-0004858852 00000 n 
-0000014531 00000 n 
-0000014578 00000 n 
-0000789050 00000 n 
-0004858773 00000 n 
-0000014627 00000 n 
-0000014664 00000 n 
-0000790706 00000 n 
-0004858655 00000 n 
-0000014711 00000 n 
-0000014779 00000 n 
-0000790833 00000 n 
-0004858576 00000 n 
-0000014828 00000 n 
-0000014873 00000 n 
-0000790960 00000 n 
-0004858444 00000 n 
-0000014922 00000 n 
-0000014963 00000 n 
-0000793985 00000 n 
-0004858326 00000 n 
-0000015017 00000 n 
-0000015063 00000 n 
-0000794112 00000 n 
-0004858247 00000 n 
-0000015122 00000 n 
-0000015176 00000 n 
-0000843461 00000 n 
-0004858154 00000 n 
-0000015235 00000 n 
-0000015278 00000 n 
-0000892859 00000 n 
-0004858075 00000 n 
-0000015337 00000 n 
-0000015378 00000 n 
-0000928370 00000 n 
-0004857982 00000 n 
-0000015432 00000 n 
-0000015504 00000 n 
-0000954833 00000 n 
-0004857903 00000 n 
-0000015558 00000 n 
-0000015625 00000 n 
-0000981780 00000 n 
-0004857824 00000 n 
-0000015674 00000 n 
-0000015711 00000 n 
-0001154877 00000 n 
-0004857687 00000 n 
-0000015755 00000 n 
-0000015806 00000 n 
-0001155979 00000 n 
-0004857608 00000 n 
-0000015855 00000 n 
-0000015910 00000 n 
-0001158325 00000 n 
-0004857476 00000 n 
-0000015957 00000 n 
-0000016047 00000 n 
-0001158452 00000 n 
-0004857397 00000 n 
-0000016096 00000 n 
-0000016154 00000 n 
-0001158579 00000 n 
-0004857279 00000 n 
-0000016203 00000 n 
-0000016261 00000 n 
-0001161688 00000 n 
-0004857200 00000 n 
-0000016315 00000 n 
-0000016363 00000 n 
-0001164236 00000 n 
-0004857107 00000 n 
-0000016417 00000 n 
-0000016467 00000 n 
-0001167810 00000 n 
-0004857014 00000 n 
-0000016521 00000 n 
-0000016561 00000 n 
-0001167937 00000 n 
-0004856921 00000 n 
-0000016615 00000 n 
-0000016678 00000 n 
-0001168064 00000 n 
-0004856842 00000 n 
-0000016732 00000 n 
-0000016786 00000 n 
-0001169501 00000 n 
-0004856710 00000 n 
-0000016834 00000 n 
-0000016881 00000 n 
-0001172150 00000 n 
-0004856631 00000 n 
-0000016931 00000 n 
-0000016977 00000 n 
-0001174515 00000 n 
-0004856538 00000 n 
-0000017027 00000 n 
-0000017069 00000 n 
-0001176417 00000 n 
-0004856406 00000 n 
-0000017119 00000 n 
-0000017154 00000 n 
-0001179093 00000 n 
-0004856327 00000 n 
-0000017209 00000 n 
-0000017255 00000 n 
-0001185086 00000 n 
-0004856234 00000 n 
-0000017310 00000 n 
-0000017359 00000 n 
-0001187651 00000 n 
-0004856155 00000 n 
-0000017414 00000 n 
-0000017465 00000 n 
-0001191771 00000 n 
-0004856023 00000 n 
-0000017515 00000 n 
-0000017562 00000 n 
-0001197930 00000 n 
-0004855944 00000 n 
-0000017617 00000 n 
-0000017674 00000 n 
-0001202983 00000 n 
-0004855851 00000 n 
-0000017729 00000 n 
-0000017785 00000 n 
-0001207195 00000 n 
-0004855758 00000 n 
-0000017840 00000 n 
-0000017897 00000 n 
-0001209989 00000 n 
-0004855665 00000 n 
-0000017952 00000 n 
-0000018009 00000 n 
-0001212833 00000 n 
-0004855572 00000 n 
-0000018064 00000 n 
-0000018121 00000 n 
-0001212960 00000 n 
-0004855479 00000 n 
-0000018176 00000 n 
-0000018222 00000 n 
-0001216374 00000 n 
-0004855386 00000 n 
-0000018277 00000 n 
-0000018340 00000 n 
-0001219690 00000 n 
-0004855307 00000 n 
-0000018395 00000 n 
-0000018461 00000 n 
-0001219945 00000 n 
-0004855175 00000 n 
-0000018511 00000 n 
-0000018581 00000 n 
-0001223835 00000 n 
-0004855096 00000 n 
-0000018636 00000 n 
-0000018688 00000 n 
-0001229543 00000 n 
-0004855003 00000 n 
-0000018743 00000 n 
-0000018786 00000 n 
-0001229670 00000 n 
-0004854924 00000 n 
-0000018841 00000 n 
-0000018887 00000 n 
-0001231698 00000 n 
-0004854792 00000 n 
-0000018937 00000 n 
-0000018975 00000 n 
-0001231824 00000 n 
-0004854713 00000 n 
-0000019030 00000 n 
-0000019085 00000 n 
-0001234451 00000 n 
-0004854634 00000 n 
-0000019140 00000 n 
-0000019188 00000 n 
-0001238004 00000 n 
-0004854502 00000 n 
-0000019238 00000 n 
-0000019293 00000 n 
-0001240644 00000 n 
-0004854423 00000 n 
-0000019348 00000 n 
-0000019400 00000 n 
-0001243329 00000 n 
-0004854330 00000 n 
-0000019455 00000 n 
-0000019500 00000 n 
-0001246152 00000 n 
-0004854212 00000 n 
-0000019555 00000 n 
-0000019603 00000 n 
-0001246279 00000 n 
-0004854147 00000 n 
-0000019663 00000 n 
-0000019725 00000 n 
-0001268880 00000 n 
-0004854029 00000 n 
-0000019775 00000 n 
-0000019813 00000 n 
-0001269006 00000 n 
-0004853950 00000 n 
-0000019868 00000 n 
-0000019932 00000 n 
-0001271481 00000 n 
-0004853857 00000 n 
-0000019987 00000 n 
-0000020047 00000 n 
-0001271608 00000 n 
-0004853764 00000 n 
-0000020102 00000 n 
-0000020174 00000 n 
-0001271735 00000 n 
-0004853671 00000 n 
-0000020229 00000 n 
-0000020303 00000 n 
-0001274559 00000 n 
-0004853592 00000 n 
-0000020358 00000 n 
-0000020441 00000 n 
-0001279259 00000 n 
-0004853460 00000 n 
-0000020489 00000 n 
-0000020549 00000 n 
-0001281867 00000 n 
-0004853342 00000 n 
-0000020599 00000 n 
-0000020645 00000 n 
-0001281994 00000 n 
-0004853263 00000 n 
-0000020700 00000 n 
-0000020773 00000 n 
-0001284281 00000 n 
-0004853184 00000 n 
-0000020828 00000 n 
-0000020882 00000 n 
-0001287388 00000 n 
-0004853052 00000 n 
-0000020932 00000 n 
-0000020978 00000 n 
-0001287515 00000 n 
-0004852934 00000 n 
-0000021033 00000 n 
-0000021090 00000 n 
-0001305934 00000 n 
-0004852855 00000 n 
-0000021150 00000 n 
-0000021212 00000 n 
-0001306057 00000 n 
-0004852776 00000 n 
-0000021272 00000 n 
-0000021338 00000 n 
-0001308926 00000 n 
-0004852683 00000 n 
-0000021393 00000 n 
-0000021472 00000 n 
-0001309053 00000 n 
-0004852590 00000 n 
-0000021527 00000 n 
-0000021602 00000 n 
-0001313308 00000 n 
-0004852458 00000 n 
-0000021657 00000 n 
-0000021707 00000 n 
-0001316262 00000 n 
-0004852393 00000 n 
-0000021767 00000 n 
-0000021828 00000 n 
-0001318939 00000 n 
-0004852314 00000 n 
-0000021883 00000 n 
-0000021956 00000 n 
-0001321960 00000 n 
-0004852182 00000 n 
-0000022006 00000 n 
-0000022055 00000 n 
-0001322085 00000 n 
-0004852103 00000 n 
-0000022110 00000 n 
-0000022155 00000 n 
-0001325980 00000 n 
-0004851985 00000 n 
-0000022210 00000 n 
-0000022253 00000 n 
-0001329385 00000 n 
-0004851906 00000 n 
-0000022313 00000 n 
-0000022365 00000 n 
-0001348993 00000 n 
-0004851827 00000 n 
-0000022425 00000 n 
-0000022475 00000 n 
-0001349248 00000 n 
-0004851695 00000 n 
-0000022525 00000 n 
-0000022567 00000 n 
-0001352226 00000 n 
-0004851616 00000 n 
-0000022622 00000 n 
-0000022658 00000 n 
-0001352353 00000 n 
-0004851523 00000 n 
-0000022713 00000 n 
-0000022778 00000 n 
-0001354929 00000 n 
-0004851430 00000 n 
-0000022833 00000 n 
-0000022866 00000 n 
-0001355056 00000 n 
-0004851311 00000 n 
-0000022921 00000 n 
-0000022955 00000 n 
-0001362447 00000 n 
-0004851232 00000 n 
-0000023015 00000 n 
-0000023066 00000 n 
-0001362574 00000 n 
-0004851139 00000 n 
-0000023126 00000 n 
-0000023207 00000 n 
-0001365040 00000 n 
-0004851046 00000 n 
-0000023267 00000 n 
-0000023318 00000 n 
-0001367805 00000 n 
-0004850953 00000 n 
-0000023378 00000 n 
-0000023435 00000 n 
-0001371317 00000 n 
-0004850860 00000 n 
-0000023495 00000 n 
-0000023541 00000 n 
-0001375373 00000 n 
-0004850767 00000 n 
-0000023601 00000 n 
-0000023660 00000 n 
-0001375500 00000 n 
-0004850674 00000 n 
-0000023720 00000 n 
-0000023777 00000 n 
-0001385884 00000 n 
-0004850581 00000 n 
-0000023837 00000 n 
-0000023910 00000 n 
-0001387815 00000 n 
-0004850488 00000 n 
-0000023970 00000 n 
-0000024041 00000 n 
-0001390071 00000 n 
-0004850395 00000 n 
-0000024102 00000 n 
-0000024156 00000 n 
-0001390198 00000 n 
-0004850316 00000 n 
-0000024217 00000 n 
-0000024297 00000 n 
-0001391645 00000 n 
-0004850198 00000 n 
-0000024347 00000 n 
-0000024385 00000 n 
-0001391772 00000 n 
-0004850119 00000 n 
-0000024440 00000 n 
-0000024485 00000 n 
-0001391899 00000 n 
-0004850040 00000 n 
-0000024540 00000 n 
-0000024596 00000 n 
-0001399802 00000 n 
-0004849908 00000 n 
-0000024644 00000 n 
-0000024709 00000 n 
-0001407873 00000 n 
-0004849829 00000 n 
-0000024759 00000 n 
-0000024805 00000 n 
-0001422196 00000 n 
-0004849697 00000 n 
-0000024855 00000 n 
-0000024890 00000 n 
-0001424841 00000 n 
-0004849618 00000 n 
-0000024945 00000 n 
-0000025008 00000 n 
-0001427709 00000 n 
-0004849525 00000 n 
-0000025063 00000 n 
-0000025157 00000 n 
-0001433372 00000 n 
-0004849393 00000 n 
-0000025212 00000 n 
-0000025275 00000 n 
-0001433627 00000 n 
-0004849328 00000 n 
-0000025335 00000 n 
-0000025411 00000 n 
-0001436481 00000 n 
-0004849235 00000 n 
-0000025466 00000 n 
-0000025540 00000 n 
-0001439358 00000 n 
-0004849156 00000 n 
-0000025595 00000 n 
-0000025643 00000 n 
-0001441603 00000 n 
-0004849024 00000 n 
-0000025693 00000 n 
-0000025739 00000 n 
-0001441730 00000 n 
-0004848945 00000 n 
-0000025794 00000 n 
-0000025853 00000 n 
-0001444715 00000 n 
-0004848866 00000 n 
-0000025908 00000 n 
-0000025968 00000 n 
-0001447280 00000 n 
-0004848748 00000 n 
-0000026018 00000 n 
-0000026056 00000 n 
-0001447407 00000 n 
-0004848669 00000 n 
-0000026111 00000 n 
-0000026157 00000 n 
-0001447534 00000 n 
-0004848590 00000 n 
-0000026212 00000 n 
-0000026295 00000 n 
-0001451893 00000 n 
-0004848455 00000 n 
-0000026343 00000 n 
-0000026418 00000 n 
-0001454638 00000 n 
-0004848376 00000 n 
-0000026468 00000 n 
-0000026501 00000 n 
-0001454765 00000 n 
-0004848283 00000 n 
-0000026551 00000 n 
-0000026608 00000 n 
-0001457581 00000 n 
-0004848147 00000 n 
-0000026658 00000 n 
-0000026717 00000 n 
-0001457708 00000 n 
-0004848023 00000 n 
-0000026773 00000 n 
-0000026848 00000 n 
-0001459571 00000 n 
-0004847939 00000 n 
-0000026909 00000 n 
-0000026969 00000 n 
-0001463150 00000 n 
-0004847840 00000 n 
-0000027030 00000 n 
-0000027097 00000 n 
-0001467177 00000 n 
-0004847741 00000 n 
-0000027158 00000 n 
-0000027212 00000 n 
-0001467305 00000 n 
-0004847657 00000 n 
-0000027273 00000 n 
-0000027324 00000 n 
-0001469506 00000 n 
-0004847559 00000 n 
-0000027380 00000 n 
-0000027438 00000 n 
-0001474581 00000 n 
-0004847435 00000 n 
-0000027494 00000 n 
-0000027542 00000 n 
-0001476721 00000 n 
-0004847366 00000 n 
-0000027603 00000 n 
-0000027691 00000 n 
-0001481193 00000 n 
-0004847228 00000 n 
-0000027742 00000 n 
-0000027800 00000 n 
-0001483010 00000 n 
-0004847144 00000 n 
-0000027856 00000 n 
-0000027904 00000 n 
-0001483138 00000 n 
-0004847045 00000 n 
-0000027960 00000 n 
-0000028013 00000 n 
-0001485116 00000 n 
-0004846946 00000 n 
-0000028069 00000 n 
-0000028119 00000 n 
-0001485244 00000 n 
-0004846862 00000 n 
-0000028175 00000 n 
-0000028215 00000 n 
-0001487523 00000 n 
-0004846764 00000 n 
-0000028266 00000 n 
-0000028332 00000 n 
-0001492111 00000 n 
-0004846625 00000 n 
-0000028383 00000 n 
-0000028437 00000 n 
-0001493851 00000 n 
-0004846541 00000 n 
-0000028493 00000 n 
-0000028543 00000 n 
-0001497938 00000 n 
-0004846457 00000 n 
-0000028599 00000 n 
-0000028645 00000 n 
-0001503018 00000 n 
-0004846359 00000 n 
-0000028696 00000 n 
-0000028760 00000 n 
-0001504981 00000 n 
-0004846220 00000 n 
-0000028811 00000 n 
-0000028853 00000 n 
-0001507193 00000 n 
-0004846136 00000 n 
-0000028909 00000 n 
-0000028975 00000 n 
-0001509531 00000 n 
-0004846037 00000 n 
-0000029031 00000 n 
-0000029091 00000 n 
-0001509659 00000 n 
-0004845897 00000 n 
-0000029147 00000 n 
-0000029211 00000 n 
-0001512471 00000 n 
-0004845813 00000 n 
-0000029272 00000 n 
-0000029317 00000 n 
-0001517965 00000 n 
-0004845714 00000 n 
-0000029378 00000 n 
-0000029436 00000 n 
-0001522485 00000 n 
-0004845615 00000 n 
-0000029497 00000 n 
-0000029546 00000 n 
-0001522613 00000 n 
-0004845531 00000 n 
-0000029607 00000 n 
-0000029674 00000 n 
-0001522741 00000 n 
-0004845447 00000 n 
-0000029730 00000 n 
-0000029775 00000 n 
-0001528573 00000 n 
-0004845349 00000 n 
-0000029826 00000 n 
-0000029874 00000 n 
-0001528701 00000 n 
-0004845251 00000 n 
-0000029926 00000 n 
-0000029986 00000 n 
-0001528829 00000 n 
-0004845153 00000 n 
-0000030038 00000 n 
-0000030081 00000 n 
-0001530752 00000 n 
-0004845055 00000 n 
-0000030133 00000 n 
-0000030188 00000 n 
-0001530880 00000 n 
-0004844916 00000 n 
-0000030240 00000 n 
-0000030298 00000 n 
-0001532573 00000 n 
-0004844832 00000 n 
-0000030355 00000 n 
-0000030420 00000 n 
-0001532701 00000 n 
-0004844748 00000 n 
-0000030477 00000 n 
-0000030544 00000 n 
-0001532829 00000 n 
-0004844665 00000 n 
-0000030596 00000 n 
-0000030653 00000 n 
-0001536490 00000 n 
-0004844527 00000 n 
-0000030702 00000 n 
-0000030760 00000 n 
-0001539251 00000 n 
-0004844402 00000 n 
-0000030811 00000 n 
-0000030876 00000 n 
-0001539377 00000 n 
-0004844318 00000 n 
-0000030932 00000 n 
-0000030983 00000 n 
-0001539505 00000 n 
-0004844219 00000 n 
-0000031039 00000 n 
-0000031111 00000 n 
-0001550383 00000 n 
-0004844120 00000 n 
-0000031167 00000 n 
-0000031220 00000 n 
-0001550511 00000 n 
-0004844036 00000 n 
-0000031276 00000 n 
-0000031328 00000 n 
-0001553671 00000 n 
-0004843911 00000 n 
-0000031379 00000 n 
-0000031436 00000 n 
-0001553799 00000 n 
-0004843786 00000 n 
-0000031492 00000 n 
-0000031539 00000 n 
-0001553927 00000 n 
-0004843702 00000 n 
-0000031600 00000 n 
-0000031674 00000 n 
-0001559431 00000 n 
-0004843618 00000 n 
-0000031735 00000 n 
-0000031776 00000 n 
-0001563281 00000 n 
-0004843519 00000 n 
-0000031832 00000 n 
-0000031885 00000 n 
-0001570628 00000 n 
-0004843420 00000 n 
-0000031941 00000 n 
-0000032004 00000 n 
-0001584215 00000 n 
-0004843295 00000 n 
-0000032060 00000 n 
-0000032154 00000 n 
-0001587620 00000 n 
-0004843211 00000 n 
-0000032215 00000 n 
-0000032298 00000 n 
-0001587748 00000 n 
-0004843127 00000 n 
-0000032359 00000 n 
-0000032424 00000 n 
-0001589764 00000 n 
-0004842988 00000 n 
-0000032473 00000 n 
-0000032531 00000 n 
-0001592589 00000 n 
-0004842863 00000 n 
-0000032582 00000 n 
-0000032638 00000 n 
-0001595566 00000 n 
-0004842779 00000 n 
-0000032694 00000 n 
-0000032758 00000 n 
-0001600499 00000 n 
-0004842680 00000 n 
-0000032814 00000 n 
-0000032867 00000 n 
-0001602304 00000 n 
-0004842596 00000 n 
-0000032923 00000 n 
-0000033005 00000 n 
-0001604508 00000 n 
-0004842497 00000 n 
-0000033056 00000 n 
-0000033110 00000 n 
-0001606473 00000 n 
-0004842372 00000 n 
-0000033161 00000 n 
-0000033200 00000 n 
-0001606601 00000 n 
-0004842303 00000 n 
-0000033256 00000 n 
-0000033353 00000 n 
-0001610863 00000 n 
-0004842164 00000 n 
-0000033402 00000 n 
-0000033476 00000 n 
-0001613480 00000 n 
-0004842080 00000 n 
-0000033527 00000 n 
-0000033574 00000 n 
-0001616078 00000 n 
-0004841940 00000 n 
-0000033625 00000 n 
-0000033678 00000 n 
-0001616206 00000 n 
-0004841856 00000 n 
-0000033734 00000 n 
-0000033811 00000 n 
-0001621150 00000 n 
-0004841757 00000 n 
-0000033867 00000 n 
-0000033915 00000 n 
-0001623682 00000 n 
-0004841632 00000 n 
-0000033971 00000 n 
-0000034032 00000 n 
-0001635942 00000 n 
-0004841563 00000 n 
-0000034093 00000 n 
-0000034169 00000 n 
-0001641110 00000 n 
-0004841423 00000 n 
-0000034220 00000 n 
-0000034278 00000 n 
-0001641238 00000 n 
-0004841339 00000 n 
-0000034334 00000 n 
-0000034392 00000 n 
-0001641366 00000 n 
-0004841240 00000 n 
-0000034448 00000 n 
-0000034521 00000 n 
-0001641494 00000 n 
-0004841156 00000 n 
-0000034577 00000 n 
-0000034627 00000 n 
-0001644333 00000 n 
-0004841016 00000 n 
-0000034678 00000 n 
-0000034729 00000 n 
-0001649857 00000 n 
-0004840906 00000 n 
-0000034785 00000 n 
-0000034841 00000 n 
-0001649985 00000 n 
-0004840822 00000 n 
-0000034902 00000 n 
-0000034962 00000 n 
-0001650241 00000 n 
-0004840738 00000 n 
-0000035023 00000 n 
-0000035068 00000 n 
-0001655701 00000 n 
-0004840598 00000 n 
-0000035119 00000 n 
-0000035202 00000 n 
-0001655829 00000 n 
-0004840514 00000 n 
-0000035258 00000 n 
-0000035337 00000 n 
-0001655957 00000 n 
-0004840415 00000 n 
-0000035393 00000 n 
-0000035459 00000 n 
-0001658586 00000 n 
-0004840316 00000 n 
-0000035515 00000 n 
-0000035565 00000 n 
-0001658714 00000 n 
-0004840176 00000 n 
-0000035621 00000 n 
-0000035686 00000 n 
-0001661634 00000 n 
-0004840092 00000 n 
-0000035747 00000 n 
-0000035793 00000 n 
-0001661762 00000 n 
-0004840008 00000 n 
-0000035854 00000 n 
-0000035905 00000 n 
-0001664612 00000 n 
-0004839909 00000 n 
-0000035961 00000 n 
-0000036028 00000 n 
-0001668101 00000 n 
-0004839810 00000 n 
-0000036084 00000 n 
-0000036174 00000 n 
-0001672669 00000 n 
-0004839711 00000 n 
-0000036230 00000 n 
-0000036316 00000 n 
-0001672797 00000 n 
-0004839586 00000 n 
-0000036372 00000 n 
-0000036447 00000 n 
-0001675201 00000 n 
-0004839502 00000 n 
-0000036508 00000 n 
-0000036561 00000 n 
-0001677478 00000 n 
-0004839403 00000 n 
-0000036622 00000 n 
-0000036699 00000 n 
-0001679591 00000 n 
-0004839319 00000 n 
-0000036760 00000 n 
-0000036842 00000 n 
-0001679719 00000 n 
-0004839194 00000 n 
-0000036893 00000 n 
-0000036932 00000 n 
-0001679847 00000 n 
-0004839110 00000 n 
-0000036988 00000 n 
-0000037052 00000 n 
-0001684317 00000 n 
-0004839011 00000 n 
-0000037108 00000 n 
-0000037184 00000 n 
-0001684445 00000 n 
-0004838927 00000 n 
-0000037240 00000 n 
-0000037308 00000 n 
-0001692439 00000 n 
-0004838788 00000 n 
-0000037357 00000 n 
-0000037412 00000 n 
-0001692567 00000 n 
-0004838704 00000 n 
-0000037463 00000 n 
-0000037510 00000 n 
-0001695397 00000 n 
-0004838564 00000 n 
-0000037561 00000 n 
-0000037597 00000 n 
-0001698043 00000 n 
-0004838454 00000 n 
-0000037653 00000 n 
-0000037711 00000 n 
-0001705530 00000 n 
-0004838370 00000 n 
-0000037772 00000 n 
-0000037829 00000 n 
-0001705658 00000 n 
-0004838271 00000 n 
-0000037890 00000 n 
-0000037953 00000 n 
-0001705786 00000 n 
-0004838172 00000 n 
-0000038014 00000 n 
-0000038077 00000 n 
-0001708274 00000 n 
-0004838073 00000 n 
-0000038138 00000 n 
-0000038199 00000 n 
-0001708402 00000 n 
-0004837974 00000 n 
-0000038260 00000 n 
-0000038309 00000 n 
-0001708530 00000 n 
-0004837875 00000 n 
-0000038370 00000 n 
-0000038415 00000 n 
-0001711107 00000 n 
-0004837776 00000 n 
-0000038476 00000 n 
-0000038526 00000 n 
-0001711235 00000 n 
-0004837677 00000 n 
-0000038587 00000 n 
-0000038650 00000 n 
-0001711363 00000 n 
-0004837593 00000 n 
-0000038711 00000 n 
-0000038776 00000 n 
-0001714109 00000 n 
-0004837453 00000 n 
-0000038827 00000 n 
-0000038874 00000 n 
-0001716755 00000 n 
-0004837343 00000 n 
-0000038930 00000 n 
-0000038979 00000 n 
-0001716882 00000 n 
-0004837259 00000 n 
-0000039040 00000 n 
-0000039087 00000 n 
-0001720404 00000 n 
-0004837175 00000 n 
-0000039148 00000 n 
-0000039202 00000 n 
-0001725177 00000 n 
-0004837035 00000 n 
-0000039253 00000 n 
-0000039318 00000 n 
-0001731195 00000 n 
-0004836951 00000 n 
-0000039374 00000 n 
-0000039429 00000 n 
-0001732843 00000 n 
-0004836867 00000 n 
-0000039485 00000 n 
-0000039535 00000 n 
-0001735372 00000 n 
-0004836768 00000 n 
-0000039586 00000 n 
-0000039638 00000 n 
-0001735500 00000 n 
-0004836628 00000 n 
-0000039689 00000 n 
-0000039728 00000 n 
-0001738434 00000 n 
-0004836544 00000 n 
-0000039784 00000 n 
-0000039838 00000 n 
-0001738562 00000 n 
-0004836445 00000 n 
-0000039894 00000 n 
-0000039970 00000 n 
-0001738690 00000 n 
-0004836361 00000 n 
-0000040026 00000 n 
-0000040105 00000 n 
-0001741337 00000 n 
-0004836277 00000 n 
-0000040156 00000 n 
-0000040200 00000 n 
-0001743792 00000 n 
-0004836138 00000 n 
-0000040249 00000 n 
-0000040295 00000 n 
-0001743920 00000 n 
-0004836054 00000 n 
-0000040346 00000 n 
-0000040384 00000 n 
-0001744048 00000 n 
-0004835955 00000 n 
-0000040435 00000 n 
-0000040482 00000 n 
-0001747435 00000 n 
-0004835815 00000 n 
-0000040533 00000 n 
-0000040613 00000 n 
-0001747562 00000 n 
-0004835731 00000 n 
-0000040669 00000 n 
-0000040724 00000 n 
-0001751013 00000 n 
-0004835632 00000 n 
-0000040780 00000 n 
-0000040829 00000 n 
-0001751269 00000 n 
-0004835533 00000 n 
-0000040885 00000 n 
-0000040939 00000 n 
-0001754072 00000 n 
-0004835434 00000 n 
-0000040995 00000 n 
-0000041039 00000 n 
-0001754200 00000 n 
-0004835335 00000 n 
-0000041095 00000 n 
-0000041156 00000 n 
-0001756867 00000 n 
-0004835251 00000 n 
-0000041212 00000 n 
-0000041255 00000 n 
-0001759722 00000 n 
-0004835152 00000 n 
-0000041306 00000 n 
-0000041347 00000 n 
-0001759850 00000 n 
-0004835027 00000 n 
-0000041398 00000 n 
-0000041437 00000 n 
-0001759978 00000 n 
-0004834943 00000 n 
-0000041493 00000 n 
-0000041574 00000 n 
-0001760106 00000 n 
-0004834859 00000 n 
-0000041630 00000 n 
-0000041709 00000 n 
-0001764778 00000 n 
-0004834720 00000 n 
-0000041758 00000 n 
-0000041821 00000 n 
-0001767420 00000 n 
-0004834636 00000 n 
-0000041872 00000 n 
-0000041919 00000 n 
-0001767548 00000 n 
-0004834537 00000 n 
-0000041970 00000 n 
-0000042025 00000 n 
-0001770294 00000 n 
-0004834397 00000 n 
-0000042076 00000 n 
-0000042144 00000 n 
-0001770421 00000 n 
-0004834313 00000 n 
-0000042200 00000 n 
-0000042256 00000 n 
-0001777833 00000 n 
-0004834214 00000 n 
-0000042312 00000 n 
-0000042370 00000 n 
-0001777961 00000 n 
-0004834130 00000 n 
-0000042426 00000 n 
-0000042482 00000 n 
-0001780225 00000 n 
-0004833990 00000 n 
-0000042533 00000 n 
-0000042599 00000 n 
-0001782877 00000 n 
-0004833906 00000 n 
-0000042655 00000 n 
-0000042710 00000 n 
-0001785430 00000 n 
-0004833822 00000 n 
-0000042766 00000 n 
-0000042822 00000 n 
-0001788263 00000 n 
-0004833723 00000 n 
-0000042873 00000 n 
-0000042940 00000 n 
-0001788391 00000 n 
-0004833598 00000 n 
-0000042991 00000 n 
-0000043030 00000 n 
-0001788519 00000 n 
-0004833514 00000 n 
-0000043086 00000 n 
-0000043146 00000 n 
-0001790705 00000 n 
-0004833430 00000 n 
-0000043202 00000 n 
-0000043292 00000 n 
-0001794609 00000 n 
-0004833291 00000 n 
-0000043341 00000 n 
-0000043421 00000 n 
-0001794737 00000 n 
-0004833207 00000 n 
-0000043472 00000 n 
-0000043519 00000 n 
-0001798144 00000 n 
-0004833082 00000 n 
-0000043570 00000 n 
-0000043609 00000 n 
-0001800586 00000 n 
-0004833013 00000 n 
-0000043665 00000 n 
-0000043725 00000 n 
-0001803436 00000 n 
-0004832873 00000 n 
-0000043774 00000 n 
-0000043832 00000 n 
-0001803564 00000 n 
-0004832789 00000 n 
-0000043883 00000 n 
-0000043930 00000 n 
-0001806223 00000 n 
-0004832649 00000 n 
-0000043981 00000 n 
-0000044029 00000 n 
-0001808603 00000 n 
-0004832565 00000 n 
-0000044085 00000 n 
-0000044149 00000 n 
-0001809178 00000 n 
-0004832481 00000 n 
-0000044205 00000 n 
-0000044274 00000 n 
-0001812632 00000 n 
-0004832341 00000 n 
-0000044325 00000 n 
-0000044377 00000 n 
-0001815585 00000 n 
-0004832257 00000 n 
-0000044433 00000 n 
-0000044498 00000 n 
-0001817521 00000 n 
-0004832173 00000 n 
-0000044554 00000 n 
-0000044612 00000 n 
-0001825095 00000 n 
-0004832033 00000 n 
-0000044663 00000 n 
-0000044720 00000 n 
-0001825223 00000 n 
-0004831923 00000 n 
-0000044776 00000 n 
-0000044833 00000 n 
-0001831248 00000 n 
-0004831839 00000 n 
-0000044894 00000 n 
-0000044944 00000 n 
-0001838317 00000 n 
-0004831740 00000 n 
-0000045005 00000 n 
-0000045057 00000 n 
-0001843669 00000 n 
-0004831641 00000 n 
-0000045118 00000 n 
-0000045183 00000 n 
-0001846457 00000 n 
-0004831542 00000 n 
-0000045244 00000 n 
-0000045288 00000 n 
-0001850074 00000 n 
-0004831443 00000 n 
-0000045349 00000 n 
-0000045416 00000 n 
-0001850201 00000 n 
-0004831359 00000 n 
-0000045477 00000 n 
-0000045528 00000 n 
-0001857103 00000 n 
-0004831219 00000 n 
-0000045579 00000 n 
-0000045642 00000 n 
-0001863138 00000 n 
-0004831135 00000 n 
-0000045698 00000 n 
-0000045771 00000 n 
-0001863266 00000 n 
-0004831036 00000 n 
-0000045827 00000 n 
-0000045890 00000 n 
-0001866374 00000 n 
-0004830937 00000 n 
-0000045946 00000 n 
-0000046004 00000 n 
-0001866502 00000 n 
-0004830838 00000 n 
-0000046060 00000 n 
-0000046117 00000 n 
-0001876100 00000 n 
-0004830754 00000 n 
-0000046173 00000 n 
-0000046232 00000 n 
-0001879228 00000 n 
-0004830614 00000 n 
-0000046283 00000 n 
-0000046344 00000 n 
-0001879356 00000 n 
-0004830530 00000 n 
-0000046400 00000 n 
-0000046466 00000 n 
-0001882464 00000 n 
-0004830405 00000 n 
-0000046522 00000 n 
-0000046590 00000 n 
-0001886010 00000 n 
-0004830321 00000 n 
-0000046651 00000 n 
-0000046705 00000 n 
-0001890410 00000 n 
-0004830222 00000 n 
-0000046766 00000 n 
-0000046857 00000 n 
-0001893133 00000 n 
-0004830123 00000 n 
-0000046918 00000 n 
-0000046988 00000 n 
-0001895230 00000 n 
-0004830024 00000 n 
-0000047049 00000 n 
-0000047119 00000 n 
-0001898962 00000 n 
-0004829925 00000 n 
-0000047180 00000 n 
-0000047242 00000 n 
-0001901036 00000 n 
-0004829826 00000 n 
-0000047303 00000 n 
-0000047362 00000 n 
-0001903817 00000 n 
-0004829727 00000 n 
-0000047423 00000 n 
-0000047487 00000 n 
-0001906033 00000 n 
-0004829628 00000 n 
-0000047548 00000 n 
-0000047610 00000 n 
-0001908072 00000 n 
-0004829544 00000 n 
-0000047671 00000 n 
-0000047733 00000 n 
-0001910581 00000 n 
-0004829404 00000 n 
-0000047784 00000 n 
-0000047846 00000 n 
-0001910709 00000 n 
-0004829320 00000 n 
-0000047902 00000 n 
-0000047962 00000 n 
-0001913916 00000 n 
-0004829221 00000 n 
-0000048018 00000 n 
-0000048082 00000 n 
-0001920281 00000 n 
-0004829122 00000 n 
-0000048138 00000 n 
-0000048203 00000 n 
-0001923161 00000 n 
-0004829038 00000 n 
-0000048259 00000 n 
-0000048351 00000 n 
-0001925911 00000 n 
-0004828898 00000 n 
-0000048402 00000 n 
-0000048441 00000 n 
-0001926039 00000 n 
-0004828814 00000 n 
-0000048497 00000 n 
-0000048573 00000 n 
-0001933149 00000 n 
-0004828715 00000 n 
-0000048629 00000 n 
-0000048693 00000 n 
-0001936108 00000 n 
-0004828616 00000 n 
-0000048749 00000 n 
-0000048820 00000 n 
-0001941396 00000 n 
-0004828517 00000 n 
-0000048876 00000 n 
-0000048960 00000 n 
-0001943945 00000 n 
-0004828418 00000 n 
-0000049016 00000 n 
-0000049082 00000 n 
-0001948540 00000 n 
-0004828319 00000 n 
-0000049138 00000 n 
-0000049189 00000 n 
-0001951933 00000 n 
-0004828235 00000 n 
-0000049245 00000 n 
-0000049319 00000 n 
-0001952061 00000 n 
-0004828095 00000 n 
-0000049370 00000 n 
-0000049416 00000 n 
-0001952189 00000 n 
-0004828011 00000 n 
-0000049472 00000 n 
-0000049517 00000 n 
-0001954567 00000 n 
-0004827912 00000 n 
-0000049573 00000 n 
-0000049633 00000 n 
-0001954695 00000 n 
-0004827813 00000 n 
-0000049689 00000 n 
-0000049736 00000 n 
-0001954823 00000 n 
-0004827729 00000 n 
-0000049792 00000 n 
-0000049843 00000 n 
-0001957942 00000 n 
-0004827630 00000 n 
-0000049895 00000 n 
-0000049970 00000 n 
-0001962993 00000 n 
-0004827531 00000 n 
-0000050022 00000 n 
-0000050071 00000 n 
-0001966053 00000 n 
-0004827432 00000 n 
-0000050123 00000 n 
-0000050190 00000 n 
-0001969476 00000 n 
-0004827333 00000 n 
-0000050242 00000 n 
-0000050327 00000 n 
-0001969603 00000 n 
-0004827208 00000 n 
-0000050379 00000 n 
-0000050419 00000 n 
-0001969731 00000 n 
-0004827124 00000 n 
-0000050476 00000 n 
-0000050552 00000 n 
-0001969859 00000 n 
-0004827040 00000 n 
-0000050609 00000 n 
-0000050710 00000 n 
-0001973908 00000 n 
-0004826900 00000 n 
-0000050759 00000 n 
-0000050812 00000 n 
-0001974035 00000 n 
-0004826775 00000 n 
-0000050863 00000 n 
-0000050901 00000 n 
-0001974162 00000 n 
-0004826691 00000 n 
-0000050957 00000 n 
-0000051006 00000 n 
-0001974290 00000 n 
-0004826607 00000 n 
-0000051062 00000 n 
-0000051098 00000 n 
-0001977760 00000 n 
-0004826467 00000 n 
-0000051149 00000 n 
-0000051207 00000 n 
-0001977888 00000 n 
-0004826383 00000 n 
-0000051263 00000 n 
-0000051319 00000 n 
-0001980700 00000 n 
-0004826284 00000 n 
-0000051375 00000 n 
-0000051436 00000 n 
-0001985499 00000 n 
-0004826200 00000 n 
-0000051492 00000 n 
-0000051555 00000 n 
-0001991067 00000 n 
-0004826060 00000 n 
-0000051606 00000 n 
-0000051654 00000 n 
-0001993844 00000 n 
-0004825976 00000 n 
-0000051710 00000 n 
-0000051784 00000 n 
-0001993972 00000 n 
-0004825877 00000 n 
-0000051840 00000 n 
-0000051920 00000 n 
-0001996919 00000 n 
-0004825778 00000 n 
-0000051976 00000 n 
-0000052042 00000 n 
-0001999293 00000 n 
-0004825679 00000 n 
-0000052098 00000 n 
-0000052189 00000 n 
-0002002104 00000 n 
-0004825595 00000 n 
-0000052245 00000 n 
-0000052294 00000 n 
-0002004677 00000 n 
-0004825455 00000 n 
-0000052345 00000 n 
-0000052432 00000 n 
-0002004804 00000 n 
-0004825371 00000 n 
-0000052488 00000 n 
-0000052550 00000 n 
-0002007659 00000 n 
-0004825272 00000 n 
-0000052606 00000 n 
-0000052663 00000 n 
-0002007787 00000 n 
-0004825173 00000 n 
-0000052719 00000 n 
-0000052787 00000 n 
-0002034083 00000 n 
-0004825074 00000 n 
-0000052843 00000 n 
-0000052897 00000 n 
-0002067150 00000 n 
-0004824975 00000 n 
-0000052953 00000 n 
-0000053038 00000 n 
-0002069978 00000 n 
-0004824876 00000 n 
-0000053094 00000 n 
-0000053174 00000 n 
-0002072138 00000 n 
-0004824777 00000 n 
-0000053230 00000 n 
-0000053293 00000 n 
-0002074758 00000 n 
-0004824693 00000 n 
-0000053349 00000 n 
-0000053424 00000 n 
-0002077885 00000 n 
-0004824552 00000 n 
-0000053475 00000 n 
-0000053532 00000 n 
-0002080698 00000 n 
-0004824468 00000 n 
-0000053588 00000 n 
-0000053643 00000 n 
-0002083201 00000 n 
-0004824369 00000 n 
-0000053699 00000 n 
-0000053753 00000 n 
-0002085339 00000 n 
-0004824229 00000 n 
-0000053809 00000 n 
-0000053855 00000 n 
-0002085467 00000 n 
-0004824160 00000 n 
-0000053916 00000 n 
-0000053965 00000 n 
-0002087818 00000 n 
-0004824061 00000 n 
-0000054021 00000 n 
-0000054059 00000 n 
-0002087946 00000 n 
-0004823962 00000 n 
-0000054115 00000 n 
-0000054149 00000 n 
-0002140962 00000 n 
-0004823863 00000 n 
-0000054205 00000 n 
-0000054243 00000 n 
-0002208837 00000 n 
-0004823764 00000 n 
-0000054299 00000 n 
-0000054354 00000 n 
-0002208965 00000 n 
-0004823665 00000 n 
-0000054410 00000 n 
-0000054466 00000 n 
-0002256307 00000 n 
-0004823566 00000 n 
-0000054522 00000 n 
-0000054563 00000 n 
-0002294013 00000 n 
-0004823467 00000 n 
-0000054620 00000 n 
-0000054680 00000 n 
-0002296542 00000 n 
-0004823368 00000 n 
-0000054737 00000 n 
-0000054786 00000 n 
-0002296670 00000 n 
-0004823269 00000 n 
-0000054843 00000 n 
-0000054882 00000 n 
-0002299254 00000 n 
-0004823170 00000 n 
-0000054939 00000 n 
-0000054984 00000 n 
-0002299382 00000 n 
-0004823071 00000 n 
-0000055041 00000 n 
-0000055103 00000 n 
-0002304400 00000 n 
-0004822972 00000 n 
-0000055160 00000 n 
-0000055248 00000 n 
-0002304528 00000 n 
-0004822873 00000 n 
-0000055305 00000 n 
-0000055385 00000 n 
-0002361916 00000 n 
-0004822774 00000 n 
-0000055442 00000 n 
-0000055500 00000 n 
-0002368441 00000 n 
-0004822675 00000 n 
-0000055557 00000 n 
-0000055614 00000 n 
-0002372313 00000 n 
-0004822591 00000 n 
-0000055671 00000 n 
-0000055731 00000 n 
-0002375728 00000 n 
-0004822451 00000 n 
-0000055782 00000 n 
-0000055843 00000 n 
-0002375856 00000 n 
-0004822367 00000 n 
-0000055899 00000 n 
-0000055969 00000 n 
-0002375984 00000 n 
-0004822268 00000 n 
-0000056025 00000 n 
-0000056083 00000 n 
-0002435624 00000 n 
-0004822184 00000 n 
-0000056139 00000 n 
-0000056197 00000 n 
-0002438813 00000 n 
-0004822044 00000 n 
-0000056248 00000 n 
-0000056339 00000 n 
-0002438941 00000 n 
-0004821960 00000 n 
-0000056395 00000 n 
-0000056472 00000 n 
-0002471946 00000 n 
-0004821876 00000 n 
-0000056528 00000 n 
-0000056606 00000 n 
-0002475170 00000 n 
-0004821736 00000 n 
-0000056657 00000 n 
-0000056705 00000 n 
-0002475298 00000 n 
-0004821652 00000 n 
-0000056761 00000 n 
-0000056821 00000 n 
-0002477970 00000 n 
-0004821568 00000 n 
-0000056877 00000 n 
-0000056940 00000 n 
-0002478098 00000 n 
-0004821428 00000 n 
-0000056991 00000 n 
-0000057065 00000 n 
-0002478226 00000 n 
-0004821344 00000 n 
-0000057121 00000 n 
-0000057211 00000 n 
-0002480938 00000 n 
-0004821245 00000 n 
-0000057267 00000 n 
-0000057331 00000 n 
-0002481064 00000 n 
-0004821146 00000 n 
-0000057387 00000 n 
-0000057441 00000 n 
-0002481192 00000 n 
-0004821062 00000 n 
-0000057497 00000 n 
-0000057587 00000 n 
-0002484099 00000 n 
-0004820921 00000 n 
-0000057639 00000 n 
-0000057702 00000 n 
-0002484227 00000 n 
-0004820837 00000 n 
-0000057759 00000 n 
-0000057819 00000 n 
-0002488335 00000 n 
-0004820738 00000 n 
-0000057876 00000 n 
-0000057941 00000 n 
-0002489935 00000 n 
-0004820639 00000 n 
-0000057998 00000 n 
-0000058076 00000 n 
-0002493496 00000 n 
-0004820540 00000 n 
-0000058133 00000 n 
-0000058196 00000 n 
-0002495723 00000 n 
-0004820441 00000 n 
-0000058253 00000 n 
-0000058314 00000 n 
-0002495851 00000 n 
-0004820342 00000 n 
-0000058371 00000 n 
-0000058454 00000 n 
-0002498897 00000 n 
-0004820243 00000 n 
-0000058511 00000 n 
-0000058564 00000 n 
-0002505772 00000 n 
-0004820144 00000 n 
-0000058621 00000 n 
-0000058700 00000 n 
-0002508485 00000 n 
-0004820045 00000 n 
-0000058757 00000 n 
-0000058815 00000 n 
-0002508613 00000 n 
-0004819946 00000 n 
-0000058873 00000 n 
-0000058937 00000 n 
-0002512050 00000 n 
-0004819847 00000 n 
-0000058995 00000 n 
-0000059049 00000 n 
-0002514743 00000 n 
-0004819748 00000 n 
-0000059107 00000 n 
-0000059190 00000 n 
-0002517390 00000 n 
-0004819649 00000 n 
-0000059248 00000 n 
-0000059305 00000 n 
-0002575219 00000 n 
-0004819550 00000 n 
-0000059363 00000 n 
-0000059413 00000 n 
-0002578263 00000 n 
-0004819451 00000 n 
-0000059471 00000 n 
-0000059545 00000 n 
-0002578391 00000 n 
-0004819367 00000 n 
-0000059603 00000 n 
-0000059691 00000 n 
-0002580875 00000 n 
-0004819227 00000 n 
-0000059743 00000 n 
-0000059829 00000 n 
-0002583625 00000 n 
-0004819143 00000 n 
-0000059886 00000 n 
-0000059948 00000 n 
-0002586397 00000 n 
-0004819044 00000 n 
-0000060005 00000 n 
-0000060070 00000 n 
-0002586525 00000 n 
-0004818945 00000 n 
-0000060127 00000 n 
-0000060202 00000 n 
-0002588491 00000 n 
-0004818846 00000 n 
-0000060259 00000 n 
-0000060339 00000 n 
-0002591366 00000 n 
-0004818747 00000 n 
-0000060396 00000 n 
-0000060463 00000 n 
-0002605871 00000 n 
-0004818663 00000 n 
-0000060520 00000 n 
-0000060574 00000 n 
-0002608654 00000 n 
-0004818523 00000 n 
-0000060626 00000 n 
-0000060677 00000 n 
-0002608782 00000 n 
-0004818439 00000 n 
-0000060734 00000 n 
-0000060785 00000 n 
-0002608910 00000 n 
-0004818340 00000 n 
-0000060842 00000 n 
-0000060884 00000 n 
-0002610895 00000 n 
-0004818241 00000 n 
-0000060941 00000 n 
-0000060988 00000 n 
-0002611023 00000 n 
-0004818157 00000 n 
-0000061045 00000 n 
-0000061089 00000 n 
-0002613228 00000 n 
-0004818017 00000 n 
-0000061141 00000 n 
-0000061209 00000 n 
-0002617108 00000 n 
-0004817892 00000 n 
-0000061266 00000 n 
-0000061330 00000 n 
-0002620606 00000 n 
-0004817808 00000 n 
-0000061392 00000 n 
-0000061447 00000 n 
-0002620734 00000 n 
-0004817709 00000 n 
-0000061509 00000 n 
-0000061577 00000 n 
-0002620862 00000 n 
-0004817610 00000 n 
-0000061639 00000 n 
-0000061693 00000 n 
-0002625253 00000 n 
-0004817511 00000 n 
-0000061755 00000 n 
-0000061832 00000 n 
-0002630762 00000 n 
-0004817412 00000 n 
-0000061894 00000 n 
-0000061955 00000 n 
-0002634315 00000 n 
-0004817313 00000 n 
-0000062017 00000 n 
-0000062074 00000 n 
-0002638183 00000 n 
-0004817214 00000 n 
-0000062136 00000 n 
-0000062245 00000 n 
-0002638311 00000 n 
-0004817130 00000 n 
-0000062307 00000 n 
-0000062370 00000 n 
-0002642065 00000 n 
-0004817046 00000 n 
-0000062427 00000 n 
-0000062511 00000 n 
-0002653425 00000 n 
-0004816906 00000 n 
-0000062563 00000 n 
-0000062615 00000 n 
-0002656143 00000 n 
-0004816822 00000 n 
-0000062672 00000 n 
-0000062718 00000 n 
-0002656271 00000 n 
-0004816723 00000 n 
-0000062775 00000 n 
-0000062836 00000 n 
-0002658624 00000 n 
-0004816624 00000 n 
-0000062893 00000 n 
-0000062975 00000 n 
-0002658752 00000 n 
-0004816525 00000 n 
-0000063032 00000 n 
-0000063088 00000 n 
-0002661188 00000 n 
-0004816426 00000 n 
-0000063145 00000 n 
-0000063195 00000 n 
-0002663687 00000 n 
-0004816327 00000 n 
-0000063252 00000 n 
-0000063300 00000 n 
-0002663815 00000 n 
-0004816243 00000 n 
-0000063357 00000 n 
-0000063408 00000 n 
-0002663943 00000 n 
-0004816144 00000 n 
-0000063460 00000 n 
-0000063506 00000 n 
-0002668893 00000 n 
-0004816004 00000 n 
-0000063558 00000 n 
-0000063633 00000 n 
-0002669020 00000 n 
-0004815920 00000 n 
-0000063690 00000 n 
-0000063756 00000 n 
-0002671535 00000 n 
-0004815821 00000 n 
-0000063813 00000 n 
-0000063855 00000 n 
-0002671663 00000 n 
-0004815737 00000 n 
-0000063912 00000 n 
-0000063961 00000 n 
-0002673921 00000 n 
-0004815638 00000 n 
-0000064013 00000 n 
-0000064087 00000 n 
-0002685139 00000 n 
-0004815539 00000 n 
-0000064139 00000 n 
-0000064192 00000 n 
-0002685395 00000 n 
-0004815398 00000 n 
-0000064244 00000 n 
-0000064284 00000 n 
-0002685523 00000 n 
-0004815314 00000 n 
-0000064341 00000 n 
-0000064411 00000 n 
-0002688259 00000 n 
-0004815215 00000 n 
-0000064468 00000 n 
-0000064563 00000 n 
-0002688390 00000 n 
-0004815116 00000 n 
-0000064620 00000 n 
-0000064700 00000 n 
-0002688521 00000 n 
-0004815017 00000 n 
-0000064757 00000 n 
-0000064807 00000 n 
-0002688651 00000 n 
-0004814918 00000 n 
-0000064864 00000 n 
-0000064930 00000 n 
-0002691597 00000 n 
-0004814819 00000 n 
-0000064987 00000 n 
-0000065070 00000 n 
-0002691728 00000 n 
-0004814720 00000 n 
-0000065127 00000 n 
-0000065215 00000 n 
-0002691859 00000 n 
-0004814621 00000 n 
-0000065272 00000 n 
-0000065345 00000 n 
-0002694329 00000 n 
-0004814522 00000 n 
-0000065402 00000 n 
-0000065487 00000 n 
-0002694460 00000 n 
-0004814423 00000 n 
-0000065545 00000 n 
-0000065625 00000 n 
-0002694591 00000 n 
-0004814324 00000 n 
-0000065683 00000 n 
-0000065752 00000 n 
-0002694722 00000 n 
-0004814225 00000 n 
-0000065810 00000 n 
-0000065897 00000 n 
-0002694853 00000 n 
-0004814126 00000 n 
-0000065955 00000 n 
-0000066029 00000 n 
-0002697292 00000 n 
-0004814027 00000 n 
-0000066087 00000 n 
-0000066131 00000 n 
-0002697423 00000 n 
-0004813928 00000 n 
-0000066189 00000 n 
-0000066278 00000 n 
-0002701694 00000 n 
-0004813829 00000 n 
-0000066336 00000 n 
-0000066424 00000 n 
-0002701825 00000 n 
-0004813730 00000 n 
-0000066482 00000 n 
-0000066565 00000 n 
-0002705052 00000 n 
-0004813631 00000 n 
-0000066623 00000 n 
-0000066713 00000 n 
-0002705183 00000 n 
-0004813532 00000 n 
-0000066771 00000 n 
-0000066848 00000 n 
-0002705314 00000 n 
-0004813448 00000 n 
-0000066906 00000 n 
-0000066996 00000 n 
-0002705445 00000 n 
-0004813364 00000 n 
-0000067048 00000 n 
-0000067114 00000 n 
-0002831912 00000 n 
-0004813225 00000 n 
-0000067163 00000 n 
-0000067216 00000 n 
-0002832042 00000 n 
-0004813141 00000 n 
-0000067267 00000 n 
-0000067314 00000 n 
-0002832173 00000 n 
-0004813042 00000 n 
-0000067365 00000 n 
-0000067401 00000 n 
-0002836618 00000 n 
-0004812902 00000 n 
-0000067452 00000 n 
-0000067494 00000 n 
-0002836749 00000 n 
-0004812818 00000 n 
-0000067550 00000 n 
-0000067583 00000 n 
-0002838960 00000 n 
-0004812719 00000 n 
-0000067639 00000 n 
-0000067683 00000 n 
-0002843555 00000 n 
-0004812579 00000 n 
-0000067739 00000 n 
-0000067780 00000 n 
-0002843817 00000 n 
-0004812510 00000 n 
-0000067841 00000 n 
-0000067896 00000 n 
-0002846533 00000 n 
-0004812411 00000 n 
-0000067952 00000 n 
-0000067993 00000 n 
-0002846664 00000 n 
-0004812312 00000 n 
-0000068049 00000 n 
-0000068084 00000 n 
-0002852098 00000 n 
-0004812213 00000 n 
-0000068140 00000 n 
-0000068176 00000 n 
-0002852229 00000 n 
-0004812088 00000 n 
-0000068232 00000 n 
-0000068274 00000 n 
-0002856660 00000 n 
-0004812019 00000 n 
-0000068335 00000 n 
-0000068382 00000 n 
-0002869065 00000 n 
-0004811894 00000 n 
-0000068433 00000 n 
-0000068490 00000 n 
-0002869196 00000 n 
-0004811810 00000 n 
-0000068546 00000 n 
-0000068584 00000 n 
-0002869326 00000 n 
-0004811711 00000 n 
-0000068640 00000 n 
-0000068673 00000 n 
-0002871006 00000 n 
-0004811627 00000 n 
-0000068729 00000 n 
-0000068769 00000 n 
-0002875620 00000 n 
-0004811488 00000 n 
-0000068818 00000 n 
-0000068881 00000 n 
-0002875750 00000 n 
-0004811404 00000 n 
-0000068932 00000 n 
-0000068979 00000 n 
-0002887972 00000 n 
-0004811305 00000 n 
-0000069030 00000 n 
-0000069068 00000 n 
-0002888103 00000 n 
-0004811165 00000 n 
-0000069119 00000 n 
-0000069166 00000 n 
-0002890721 00000 n 
-0004811081 00000 n 
-0000069222 00000 n 
-0000069261 00000 n 
-0002890852 00000 n 
-0004810997 00000 n 
-0000069317 00000 n 
-0000069369 00000 n 
-0002893469 00000 n 
-0004810857 00000 n 
-0000069420 00000 n 
-0000069463 00000 n 
-0002893600 00000 n 
-0004810773 00000 n 
-0000069519 00000 n 
-0000069579 00000 n 
-0002896068 00000 n 
-0004810674 00000 n 
-0000069635 00000 n 
-0000069698 00000 n 
-0002896199 00000 n 
-0004810575 00000 n 
-0000069754 00000 n 
-0000069801 00000 n 
-0002899072 00000 n 
-0004810476 00000 n 
-0000069857 00000 n 
-0000069917 00000 n 
-0002902020 00000 n 
-0004810377 00000 n 
-0000069973 00000 n 
-0000070029 00000 n 
-0002902150 00000 n 
-0004810293 00000 n 
-0000070085 00000 n 
-0000070127 00000 n 
-0002904976 00000 n 
-0004810153 00000 n 
-0000070178 00000 n 
-0000070234 00000 n 
-0002905107 00000 n 
-0004810069 00000 n 
-0000070290 00000 n 
-0000070330 00000 n 
-0002905238 00000 n 
-0004809970 00000 n 
-0000070386 00000 n 
-0000070426 00000 n 
-0002908213 00000 n 
-0004809845 00000 n 
-0000070482 00000 n 
-0000070528 00000 n 
-0002908344 00000 n 
-0004809761 00000 n 
-0000070589 00000 n 
-0000070689 00000 n 
-0002913765 00000 n 
-0004809662 00000 n 
-0000070750 00000 n 
-0000070798 00000 n 
-0002917824 00000 n 
-0004809563 00000 n 
-0000070859 00000 n 
-0000070907 00000 n 
-0002919004 00000 n 
-0004809464 00000 n 
-0000070968 00000 n 
-0000071037 00000 n 
-0002920930 00000 n 
-0004809365 00000 n 
-0000071098 00000 n 
-0000071168 00000 n 
-0002924629 00000 n 
-0004809266 00000 n 
-0000071229 00000 n 
-0000071289 00000 n 
-0002931078 00000 n 
-0004809182 00000 n 
-0000071350 00000 n 
-0000071405 00000 n 
-0002937817 00000 n 
-0004809083 00000 n 
-0000071456 00000 n 
-0000071492 00000 n 
-0002940300 00000 n 
-0004808958 00000 n 
-0000071543 00000 n 
-0000071582 00000 n 
-0002940431 00000 n 
-0004808874 00000 n 
-0000071638 00000 n 
-0000071686 00000 n 
-0002940562 00000 n 
-0004808790 00000 n 
-0000071742 00000 n 
-0000071811 00000 n 
-0002943688 00000 n 
-0004808651 00000 n 
-0000071860 00000 n 
-0000071919 00000 n 
-0002943818 00000 n 
-0004808567 00000 n 
-0000071970 00000 n 
-0000072017 00000 n 
-0002943948 00000 n 
-0004808468 00000 n 
-0000072068 00000 n 
-0000072122 00000 n 
-0002946797 00000 n 
-0004808328 00000 n 
-0000072173 00000 n 
-0000072224 00000 n 
-0002946928 00000 n 
-0004808244 00000 n 
-0000072280 00000 n 
-0000072344 00000 n 
-0002952744 00000 n 
-0004808160 00000 n 
-0000072400 00000 n 
-0000072459 00000 n 
-0002956106 00000 n 
-0004808035 00000 n 
-0000072510 00000 n 
-0000072562 00000 n 
-0002959683 00000 n 
-0004807951 00000 n 
-0000072618 00000 n 
-0000072687 00000 n 
-0002962000 00000 n 
-0004807867 00000 n 
-0000072743 00000 n 
-0000072797 00000 n 
-0002965523 00000 n 
-0004807728 00000 n 
-0000072846 00000 n 
-0000072905 00000 n 
-0002965653 00000 n 
-0004807644 00000 n 
-0000072956 00000 n 
-0000073003 00000 n 
-0002969071 00000 n 
-0004807504 00000 n 
-0000073054 00000 n 
-0000073117 00000 n 
-0002971959 00000 n 
-0004807420 00000 n 
-0000073173 00000 n 
-0000073223 00000 n 
-0002972090 00000 n 
-0004807280 00000 n 
-0000073279 00000 n 
-0000073337 00000 n 
-0002975097 00000 n 
-0004807211 00000 n 
-0000073398 00000 n 
-0000073445 00000 n 
-0002975228 00000 n 
-0004807086 00000 n 
-0000073501 00000 n 
-0000073569 00000 n 
-0002978030 00000 n 
-0004807002 00000 n 
-0000073630 00000 n 
-0000073702 00000 n 
-0002980919 00000 n 
-0004806918 00000 n 
-0000073763 00000 n 
-0000073823 00000 n 
-0002984067 00000 n 
-0004806819 00000 n 
-0000073874 00000 n 
-0000073930 00000 n 
-0002986542 00000 n 
-0004806679 00000 n 
-0000073981 00000 n 
-0000074023 00000 n 
-0002986673 00000 n 
-0004806595 00000 n 
-0000074079 00000 n 
-0000074128 00000 n 
-0002989080 00000 n 
-0004806496 00000 n 
-0000074184 00000 n 
-0000074228 00000 n 
-0002989211 00000 n 
-0004806412 00000 n 
-0000074284 00000 n 
-0000074321 00000 n 
-0002989341 00000 n 
-0004806313 00000 n 
-0000074372 00000 n 
-0000074442 00000 n 
-0002992270 00000 n 
-0004806188 00000 n 
-0000074493 00000 n 
-0000074532 00000 n 
-0002992401 00000 n 
-0004806119 00000 n 
-0000074588 00000 n 
-0000074636 00000 n 
-0002994121 00000 n 
-0004805980 00000 n 
-0000074685 00000 n 
-0000074743 00000 n 
-0002994251 00000 n 
-0004805896 00000 n 
-0000074794 00000 n 
-0000074841 00000 n 
-0002994382 00000 n 
-0004805756 00000 n 
-0000074892 00000 n 
-0000074934 00000 n 
-0002997186 00000 n 
-0004805631 00000 n 
-0000074990 00000 n 
-0000075058 00000 n 
-0002997317 00000 n 
-0004805547 00000 n 
-0000075119 00000 n 
-0000075171 00000 n 
-0003000417 00000 n 
-0004805448 00000 n 
-0000075232 00000 n 
-0000075289 00000 n 
-0003000680 00000 n 
-0004805349 00000 n 
-0000075350 00000 n 
-0000075434 00000 n 
-0003003200 00000 n 
-0004805265 00000 n 
-0000075495 00000 n 
-0000075558 00000 n 
-0003005958 00000 n 
-0004805125 00000 n 
-0000075614 00000 n 
-0000075690 00000 n 
-0003006089 00000 n 
-0004805041 00000 n 
-0000075751 00000 n 
-0000075808 00000 n 
-0003014628 00000 n 
-0004804942 00000 n 
-0000075869 00000 n 
-0000075922 00000 n 
-0003014758 00000 n 
-0004804858 00000 n 
-0000075983 00000 n 
-0000076041 00000 n 
-0003023344 00000 n 
-0004804759 00000 n 
-0000076097 00000 n 
-0000076158 00000 n 
-0003023475 00000 n 
-0004804660 00000 n 
-0000076214 00000 n 
-0000076309 00000 n 
-0003023605 00000 n 
-0004804535 00000 n 
-0000076365 00000 n 
-0000076448 00000 n 
-0003026498 00000 n 
-0004804451 00000 n 
-0000076509 00000 n 
-0000076575 00000 n 
-0003027091 00000 n 
-0004804352 00000 n 
-0000076636 00000 n 
-0000076680 00000 n 
-0003029538 00000 n 
-0004804253 00000 n 
-0000076741 00000 n 
-0000076783 00000 n 
-0003029669 00000 n 
-0004804169 00000 n 
-0000076844 00000 n 
-0000076881 00000 n 
-0003029800 00000 n 
-0004804070 00000 n 
-0000076932 00000 n 
-0000076976 00000 n 
-0003032496 00000 n 
-0004803971 00000 n 
-0000077027 00000 n 
-0000077089 00000 n 
-0003035243 00000 n 
-0004803831 00000 n 
-0000077140 00000 n 
-0000077199 00000 n 
-0003035374 00000 n 
-0004803706 00000 n 
-0000077255 00000 n 
-0000077299 00000 n 
-0003035505 00000 n 
-0004803637 00000 n 
-0000077360 00000 n 
-0000077430 00000 n 
-0003038208 00000 n 
-0004803538 00000 n 
-0000077486 00000 n 
-0000077540 00000 n 
-0003046232 00000 n 
-0004803454 00000 n 
-0000077596 00000 n 
-0000077642 00000 n 
-0003053823 00000 n 
-0004803329 00000 n 
-0000077693 00000 n 
-0000077732 00000 n 
-0003053954 00000 n 
-0004803245 00000 n 
-0000077788 00000 n 
-0000077870 00000 n 
-0003054085 00000 n 
-0004803146 00000 n 
-0000077926 00000 n 
-0000077981 00000 n 
-0003059067 00000 n 
-0004803047 00000 n 
-0000078037 00000 n 
-0000078093 00000 n 
-0003062395 00000 n 
-0004802963 00000 n 
-0000078149 00000 n 
-0000078233 00000 n 
-0003065068 00000 n 
-0004802824 00000 n 
-0000078282 00000 n 
-0000078350 00000 n 
-0003065198 00000 n 
-0004802740 00000 n 
-0000078401 00000 n 
-0000078448 00000 n 
-0003070490 00000 n 
-0004802600 00000 n 
-0000078499 00000 n 
-0000078545 00000 n 
-0003070621 00000 n 
-0004802475 00000 n 
-0000078601 00000 n 
-0000078653 00000 n 
-0003073376 00000 n 
-0004802406 00000 n 
-0000078714 00000 n 
-0000078773 00000 n 
-0003086200 00000 n 
-0004802266 00000 n 
-0000078829 00000 n 
-0000078886 00000 n 
-0003087694 00000 n 
-0004802182 00000 n 
-0000078947 00000 n 
-0000079003 00000 n 
-0003087825 00000 n 
-0004802098 00000 n 
-0000079064 00000 n 
-0000079125 00000 n 
-0003092433 00000 n 
-0004801999 00000 n 
-0000079181 00000 n 
-0000079235 00000 n 
-0003095016 00000 n 
-0004801900 00000 n 
-0000079291 00000 n 
-0000079363 00000 n 
-0003097889 00000 n 
-0004801775 00000 n 
-0000079419 00000 n 
-0000079495 00000 n 
-0003098019 00000 n 
-0004801691 00000 n 
-0000079556 00000 n 
-0000079624 00000 n 
-0003101112 00000 n 
-0004801592 00000 n 
-0000079685 00000 n 
-0000079747 00000 n 
-0003102782 00000 n 
-0004801493 00000 n 
-0000079808 00000 n 
-0000079867 00000 n 
-0003102913 00000 n 
-0004801409 00000 n 
-0000079928 00000 n 
-0000080001 00000 n 
-0003104781 00000 n 
-0004801284 00000 n 
-0000080052 00000 n 
-0000080091 00000 n 
-0003104912 00000 n 
-0004801200 00000 n 
-0000080147 00000 n 
-0000080197 00000 n 
-0003106665 00000 n 
-0004801116 00000 n 
-0000080253 00000 n 
-0000080322 00000 n 
-0003109513 00000 n 
-0004800977 00000 n 
-0000080371 00000 n 
-0000080445 00000 n 
-0003109643 00000 n 
-0004800893 00000 n 
-0000080496 00000 n 
-0000080543 00000 n 
-0003112023 00000 n 
-0004800794 00000 n 
-0000080594 00000 n 
-0000080642 00000 n 
-0003112154 00000 n 
-0004800654 00000 n 
-0000080693 00000 n 
-0000080761 00000 n 
-0003114632 00000 n 
-0004800570 00000 n 
-0000080817 00000 n 
-0000080855 00000 n 
-0003116961 00000 n 
-0004800471 00000 n 
-0000080911 00000 n 
-0000080955 00000 n 
-0003117092 00000 n 
-0004800372 00000 n 
-0000081011 00000 n 
-0000081053 00000 n 
-0003119113 00000 n 
-0004800288 00000 n 
-0000081109 00000 n 
-0000081155 00000 n 
-0003122555 00000 n 
-0004800148 00000 n 
-0000081206 00000 n 
-0000081284 00000 n 
-0003127974 00000 n 
-0004800064 00000 n 
-0000081340 00000 n 
-0000081390 00000 n 
-0003128105 00000 n 
-0004799965 00000 n 
-0000081446 00000 n 
-0000081490 00000 n 
-0003131925 00000 n 
-0004799866 00000 n 
-0000081546 00000 n 
-0000081584 00000 n 
-0003132056 00000 n 
-0004799767 00000 n 
-0000081640 00000 n 
-0000081678 00000 n 
-0003135017 00000 n 
-0004799683 00000 n 
-0000081734 00000 n 
-0000081773 00000 n 
-0003135478 00000 n 
-0004799558 00000 n 
-0000081824 00000 n 
-0000081863 00000 n 
-0003137535 00000 n 
-0004799474 00000 n 
-0000081919 00000 n 
-0000081973 00000 n 
-0003137666 00000 n 
-0004799375 00000 n 
-0000082029 00000 n 
-0000082086 00000 n 
-0003137797 00000 n 
-0004799291 00000 n 
-0000082142 00000 n 
-0000082202 00000 n 
-0003141886 00000 n 
-0004799152 00000 n 
-0000082251 00000 n 
-0000082299 00000 n 
-0003142016 00000 n 
-0004799068 00000 n 
-0000082350 00000 n 
-0000082397 00000 n 
-0003142147 00000 n 
-0004798969 00000 n 
-0000082448 00000 n 
-0000082504 00000 n 
-0003145029 00000 n 
-0004798870 00000 n 
-0000082555 00000 n 
-0000082599 00000 n 
-0003147889 00000 n 
-0004798771 00000 n 
-0000082650 00000 n 
-0000082701 00000 n 
-0003148020 00000 n 
-0004798631 00000 n 
-0000082752 00000 n 
-0000082795 00000 n 
-0003151040 00000 n 
-0004798547 00000 n 
-0000082851 00000 n 
-0000082902 00000 n 
-0003159897 00000 n 
-0004798448 00000 n 
-0000082958 00000 n 
-0000083012 00000 n 
-0003163306 00000 n 
-0004798364 00000 n 
-0000083068 00000 n 
-0000083127 00000 n 
-0003165787 00000 n 
-0004798239 00000 n 
-0000083178 00000 n 
-0000083217 00000 n 
-0003165917 00000 n 
-0004798170 00000 n 
-0000083273 00000 n 
-0000083324 00000 n 
-0003168265 00000 n 
-0004798031 00000 n 
-0000083373 00000 n 
-0000083422 00000 n 
-0003168395 00000 n 
-0004797947 00000 n 
-0000083473 00000 n 
-0000083520 00000 n 
-0003168526 00000 n 
-0004797822 00000 n 
-0000083571 00000 n 
-0000083627 00000 n 
-0003171595 00000 n 
-0004797738 00000 n 
-0000083683 00000 n 
-0000083719 00000 n 
-0003171726 00000 n 
-0004797639 00000 n 
-0000083775 00000 n 
-0000083808 00000 n 
-0003174433 00000 n 
-0004797540 00000 n 
-0000083864 00000 n 
-0000083898 00000 n 
-0003174564 00000 n 
-0004797456 00000 n 
-0000083954 00000 n 
-0000084019 00000 n 
-0003177117 00000 n 
-0004797317 00000 n 
-0000084068 00000 n 
-0000084117 00000 n 
-0003177247 00000 n 
-0004797233 00000 n 
-0000084168 00000 n 
-0000084215 00000 n 
-0003179181 00000 n 
-0004797108 00000 n 
-0000084266 00000 n 
-0000084312 00000 n 
-0003179312 00000 n 
-0004797024 00000 n 
-0000084368 00000 n 
-0000084413 00000 n 
-0003179442 00000 n 
-0004796884 00000 n 
-0000084469 00000 n 
-0000084517 00000 n 
-0003181768 00000 n 
-0004796800 00000 n 
-0000084578 00000 n 
-0000084631 00000 n 
-0003181899 00000 n 
-0004796701 00000 n 
-0000084692 00000 n 
-0000084749 00000 n 
-0003184045 00000 n 
-0004796602 00000 n 
-0000084810 00000 n 
-0000084877 00000 n 
-0003184174 00000 n 
-0004796503 00000 n 
-0000084938 00000 n 
-0000085019 00000 n 
-0003186574 00000 n 
-0004796404 00000 n 
-0000085080 00000 n 
-0000085136 00000 n 
-0003186705 00000 n 
-0004796305 00000 n 
-0000085197 00000 n 
-0000085261 00000 n 
-0003186836 00000 n 
-0004796221 00000 n 
-0000085322 00000 n 
-0000085383 00000 n 
-0003190174 00000 n 
-0004796122 00000 n 
-0000085439 00000 n 
-0000085484 00000 n 
-0003190305 00000 n 
-0004796023 00000 n 
-0000085540 00000 n 
-0000085601 00000 n 
-0003191886 00000 n 
-0004795924 00000 n 
-0000085657 00000 n 
-0000085715 00000 n 
-0003192017 00000 n 
-0004795840 00000 n 
-0000085771 00000 n 
-0000085810 00000 n 
-0003194846 00000 n 
-0004795742 00000 n 
-0000085859 00000 n 
-0000085917 00000 n 
-0003199565 00000 n 
-0004795618 00000 n 
-0000085966 00000 n 
-0000086031 00000 n 
-0003202484 00000 n 
-0004795508 00000 n 
-0000086082 00000 n 
-0000086122 00000 n 
-0003202615 00000 n 
-0004795424 00000 n 
-0000086178 00000 n 
-0000086229 00000 n 
-0003205885 00000 n 
-0004795325 00000 n 
-0000086285 00000 n 
-0000086350 00000 n 
-0003216709 00000 n 
-0004795241 00000 n 
-0000086406 00000 n 
-0000086465 00000 n 
-0003228420 00000 n 
-0004795101 00000 n 
-0000086510 00000 n 
-0000086561 00000 n 
-0003230526 00000 n 
-0004794976 00000 n 
-0000086610 00000 n 
-0000086670 00000 n 
-0003230656 00000 n 
-0004794851 00000 n 
-0000086721 00000 n 
-0000086770 00000 n 
-0003233290 00000 n 
-0004794767 00000 n 
-0000086826 00000 n 
-0000086895 00000 n 
-0003233421 00000 n 
-0004794668 00000 n 
-0000086951 00000 n 
-0000087019 00000 n 
-0003233549 00000 n 
-0004794584 00000 n 
-0000087075 00000 n 
-0000087124 00000 n 
-0003233680 00000 n 
-0004794459 00000 n 
-0000087175 00000 n 
-0000087233 00000 n 
-0003233811 00000 n 
-0004794375 00000 n 
-0000087289 00000 n 
-0000087351 00000 n 
-0003233941 00000 n 
-0004794235 00000 n 
-0000087407 00000 n 
-0000087462 00000 n 
-0003238932 00000 n 
-0004794151 00000 n 
-0000087523 00000 n 
-0000087584 00000 n 
-0003239063 00000 n 
-0004794052 00000 n 
-0000087645 00000 n 
-0000087693 00000 n 
-0003240448 00000 n 
-0004793953 00000 n 
-0000087754 00000 n 
-0000087798 00000 n 
-0003246019 00000 n 
-0004793869 00000 n 
-0000087859 00000 n 
-0000087932 00000 n 
-0003249020 00000 n 
-0004793744 00000 n 
-0000087988 00000 n 
-0000088033 00000 n 
-0003249151 00000 n 
-0004793660 00000 n 
-0000088094 00000 n 
-0000088138 00000 n 
-0003249282 00000 n 
-0004793561 00000 n 
-0000088199 00000 n 
-0000088248 00000 n 
-0003252590 00000 n 
-0004793462 00000 n 
-0000088309 00000 n 
-0000088373 00000 n 
-0003255324 00000 n 
-0004793378 00000 n 
-0000088434 00000 n 
-0000088468 00000 n 
-0003262738 00000 n 
-0004793238 00000 n 
-0000088517 00000 n 
-0000088586 00000 n 
-0003262867 00000 n 
-0004793113 00000 n 
-0000088637 00000 n 
-0000088691 00000 n 
-0003262998 00000 n 
-0004792988 00000 n 
-0000088747 00000 n 
-0000088785 00000 n 
-0003267514 00000 n 
-0004792904 00000 n 
-0000088846 00000 n 
-0000088889 00000 n 
-0003270122 00000 n 
-0004792805 00000 n 
-0000088950 00000 n 
-0000089013 00000 n 
-0003270253 00000 n 
-0004792706 00000 n 
-0000089074 00000 n 
-0000089117 00000 n 
-0003272817 00000 n 
-0004792607 00000 n 
-0000089178 00000 n 
-0000089234 00000 n 
-0003272948 00000 n 
-0004792523 00000 n 
-0000089295 00000 n 
-0000089348 00000 n 
-0003273079 00000 n 
-0004792439 00000 n 
-0000089404 00000 n 
-0000089458 00000 n 
-0003275567 00000 n 
-0004792314 00000 n 
-0000089509 00000 n 
-0000089552 00000 n 
-0003278057 00000 n 
-0004792230 00000 n 
-0000089608 00000 n 
-0000089656 00000 n 
-0003278188 00000 n 
-0004792146 00000 n 
-0000089712 00000 n 
-0000089770 00000 n 
-0003286317 00000 n 
-0004792021 00000 n 
-0000089819 00000 n 
-0000089890 00000 n 
-0003286447 00000 n 
-0004791937 00000 n 
-0000089941 00000 n 
-0000089988 00000 n 
-0003288916 00000 n 
-0004791797 00000 n 
-0000090039 00000 n 
-0000090094 00000 n 
-0003289047 00000 n 
-0004791672 00000 n 
-0000090150 00000 n 
-0000090204 00000 n 
-0003291172 00000 n 
-0004791588 00000 n 
-0000090265 00000 n 
-0000090317 00000 n 
-0003291303 00000 n 
-0004791504 00000 n 
-0000090378 00000 n 
-0000090439 00000 n 
-0003294482 00000 n 
-0004791405 00000 n 
-0000090495 00000 n 
-0000090544 00000 n 
-0003299089 00000 n 
-0004791306 00000 n 
-0000090600 00000 n 
-0000090653 00000 n 
-0003299484 00000 n 
-0004791222 00000 n 
-0000090709 00000 n 
-0000090779 00000 n 
-0003302060 00000 n 
-0004791097 00000 n 
-0000090830 00000 n 
-0000090879 00000 n 
-0003302190 00000 n 
-0004791013 00000 n 
-0000090935 00000 n 
-0000090981 00000 n 
-0003304828 00000 n 
-0004790914 00000 n 
-0000091037 00000 n 
-0000091080 00000 n 
-0003307432 00000 n 
-0004790815 00000 n 
-0000091136 00000 n 
-0000091178 00000 n 
-0003307563 00000 n 
-0004790716 00000 n 
-0000091234 00000 n 
-0000091279 00000 n 
-0003307694 00000 n 
-0004790617 00000 n 
-0000091335 00000 n 
-0000091378 00000 n 
-0003310114 00000 n 
-0004790518 00000 n 
-0000091434 00000 n 
-0000091477 00000 n 
-0003310245 00000 n 
-0004790419 00000 n 
-0000091533 00000 n 
-0000091574 00000 n 
-0003310375 00000 n 
-0004790335 00000 n 
-0000091630 00000 n 
-0000091682 00000 n 
-0003311699 00000 n 
-0004790194 00000 n 
-0000091727 00000 n 
-0000091770 00000 n 
-0003314038 00000 n 
-0004790069 00000 n 
-0000091819 00000 n 
-0000091870 00000 n 
-0003314168 00000 n 
-0004789985 00000 n 
-0000091921 00000 n 
-0000091959 00000 n 
-0003314299 00000 n 
-0004789886 00000 n 
-0000092010 00000 n 
-0000092047 00000 n 
-0003317577 00000 n 
-0004789802 00000 n 
-0000092098 00000 n 
-0000092133 00000 n 
-0003341533 00000 n 
-0004789662 00000 n 
-0000092182 00000 n 
-0000092250 00000 n 
-0003341663 00000 n 
-0004789537 00000 n 
-0000092301 00000 n 
-0000092344 00000 n 
-0003341792 00000 n 
-0004789453 00000 n 
-0000092400 00000 n 
-0000092455 00000 n 
-0003344806 00000 n 
-0004789354 00000 n 
-0000092511 00000 n 
-0000092546 00000 n 
-0003344937 00000 n 
-0004789255 00000 n 
-0000092602 00000 n 
-0000092638 00000 n 
-0003345068 00000 n 
-0004789130 00000 n 
-0000092694 00000 n 
-0000092749 00000 n 
-0003365544 00000 n 
-0004789046 00000 n 
-0000092810 00000 n 
-0000092887 00000 n 
-0003409137 00000 n 
-0004788962 00000 n 
-0000092948 00000 n 
-0000093021 00000 n 
-0003409268 00000 n 
-0004788863 00000 n 
-0000093072 00000 n 
-0000093109 00000 n 
-0003409399 00000 n 
-0004788764 00000 n 
-0000093160 00000 n 
-0000093211 00000 n 
-0003413598 00000 n 
-0004788680 00000 n 
-0000093262 00000 n 
-0000093320 00000 n 
-0003416703 00000 n 
-0004788555 00000 n 
-0000093369 00000 n 
-0000093415 00000 n 
-0003416833 00000 n 
-0004788471 00000 n 
-0000093466 00000 n 
-0000093504 00000 n 
-0003416964 00000 n 
-0004788372 00000 n 
-0000093555 00000 n 
-0000093600 00000 n 
-0003420339 00000 n 
-0004788232 00000 n 
-0000093651 00000 n 
-0000093689 00000 n 
-0003423981 00000 n 
-0004788163 00000 n 
-0000093745 00000 n 
-0000093802 00000 n 
-0003424507 00000 n 
-0004788064 00000 n 
-0000093853 00000 n 
-0000093894 00000 n 
-0003427031 00000 n 
-0004787965 00000 n 
-0000093945 00000 n 
-0000094001 00000 n 
-0003428482 00000 n 
-0004787881 00000 n 
-0000094052 00000 n 
-0000094085 00000 n 
-0003429406 00000 n 
-0004787754 00000 n 
-0000094130 00000 n 
-0000094176 00000 n 
-0003431748 00000 n 
-0004787629 00000 n 
-0000094225 00000 n 
-0000094277 00000 n 
-0003431878 00000 n 
-0004787504 00000 n 
-0000094328 00000 n 
-0000094393 00000 n 
-0003432009 00000 n 
-0004787420 00000 n 
-0000094449 00000 n 
-0000094489 00000 n 
-0003432140 00000 n 
-0004787295 00000 n 
-0000094545 00000 n 
-0000094603 00000 n 
-0003435001 00000 n 
-0004787211 00000 n 
-0000094664 00000 n 
-0000094712 00000 n 
-0003435132 00000 n 
-0004787127 00000 n 
-0000094773 00000 n 
-0000094824 00000 n 
-0003438237 00000 n 
-0004787028 00000 n 
-0000094875 00000 n 
-0000094946 00000 n 
-0003438368 00000 n 
-0004786929 00000 n 
-0000094997 00000 n 
-0000095054 00000 n 
-0003440399 00000 n 
-0004786789 00000 n 
-0000095105 00000 n 
-0000095152 00000 n 
-0003443569 00000 n 
-0004786679 00000 n 
-0000095208 00000 n 
-0000095281 00000 n 
-0003443700 00000 n 
-0004786595 00000 n 
-0000095342 00000 n 
-0000095415 00000 n 
-0003443831 00000 n 
-0004786496 00000 n 
-0000095476 00000 n 
-0000095556 00000 n 
-0003446088 00000 n 
-0004786412 00000 n 
-0000095617 00000 n 
-0000095678 00000 n 
-0003446217 00000 n 
-0004786287 00000 n 
-0000095729 00000 n 
-0000095790 00000 n 
-0003446346 00000 n 
-0004786203 00000 n 
-0000095846 00000 n 
-0000095898 00000 n 
-0003450157 00000 n 
-0004786078 00000 n 
-0000095954 00000 n 
-0000096020 00000 n 
-0003452191 00000 n 
-0004785994 00000 n 
-0000096081 00000 n 
-0000096143 00000 n 
-0003453610 00000 n 
-0004785910 00000 n 
-0000096204 00000 n 
-0000096270 00000 n 
-0003455999 00000 n 
-0004785770 00000 n 
-0000096319 00000 n 
-0000096362 00000 n 
-0003456129 00000 n 
-0004785686 00000 n 
-0000096413 00000 n 
-0000096443 00000 n 
-0003458684 00000 n 
-0004785587 00000 n 
-0000096494 00000 n 
-0000096528 00000 n 
-0003458815 00000 n 
-0004785488 00000 n 
-0000096579 00000 n 
-0000096609 00000 n 
-0003462106 00000 n 
-0004785389 00000 n 
-0000096660 00000 n 
-0000096699 00000 n 
-0003462237 00000 n 
-0004785290 00000 n 
-0000096750 00000 n 
-0000096802 00000 n 
-0003464941 00000 n 
-0004785165 00000 n 
-0000096853 00000 n 
-0000096886 00000 n 
-0003465072 00000 n 
-0004785081 00000 n 
-0000096942 00000 n 
-0000096990 00000 n 
-0003465203 00000 n 
-0004784997 00000 n 
-0000097046 00000 n 
-0000097094 00000 n 
-0003468691 00000 n 
-0004784857 00000 n 
-0000097143 00000 n 
-0000097203 00000 n 
-0003468821 00000 n 
-0004784773 00000 n 
-0000097254 00000 n 
-0000097297 00000 n 
-0003471739 00000 n 
-0004784633 00000 n 
-0000097348 00000 n 
-0000097384 00000 n 
-0003471870 00000 n 
-0004784549 00000 n 
-0000097440 00000 n 
-0000097512 00000 n 
-0003472001 00000 n 
-0004784450 00000 n 
-0000097568 00000 n 
-0000097630 00000 n 
-0003474735 00000 n 
-0004784366 00000 n 
-0000097686 00000 n 
-0000097754 00000 n 
-0003474866 00000 n 
-0004784226 00000 n 
-0000097805 00000 n 
-0000097853 00000 n 
-0003474997 00000 n 
-0004784142 00000 n 
-0000097909 00000 n 
-0000097971 00000 n 
-0003477898 00000 n 
-0004784043 00000 n 
-0000098027 00000 n 
-0000098094 00000 n 
-0003478029 00000 n 
-0004783944 00000 n 
-0000098150 00000 n 
-0000098230 00000 n 
-0003478160 00000 n 
-0004783845 00000 n 
-0000098286 00000 n 
-0000098339 00000 n 
-0003480749 00000 n 
-0004783746 00000 n 
-0000098395 00000 n 
-0000098453 00000 n 
-0003480880 00000 n 
-0004783662 00000 n 
-0000098509 00000 n 
-0000098554 00000 n 
-0003481009 00000 n 
-0004783522 00000 n 
-0000098605 00000 n 
-0000098644 00000 n 
-0003484361 00000 n 
-0004783453 00000 n 
-0000098700 00000 n 
-0000098745 00000 n 
-0003484492 00000 n 
-0004783354 00000 n 
-0000098796 00000 n 
-0000098849 00000 n 
-0003486843 00000 n 
-0004783270 00000 n 
-0000098900 00000 n 
-0000098940 00000 n 
-0003489269 00000 n 
-0004783129 00000 n 
-0000098989 00000 n 
-0000099045 00000 n 
-0003489399 00000 n 
-0004783045 00000 n 
-0000099096 00000 n 
-0000099133 00000 n 
-0003489530 00000 n 
-0004782946 00000 n 
-0000099184 00000 n 
-0000099224 00000 n 
-0003492245 00000 n 
-0004782847 00000 n 
-0000099275 00000 n 
-0000099310 00000 n 
-0003494682 00000 n 
-0004782748 00000 n 
-0000099361 00000 n 
-0000099395 00000 n 
-0003494813 00000 n 
-0004782649 00000 n 
-0000099446 00000 n 
-0000099481 00000 n 
-0003494944 00000 n 
-0004782550 00000 n 
-0000099532 00000 n 
-0000099566 00000 n 
-0003495075 00000 n 
-0004782451 00000 n 
-0000099617 00000 n 
-0000099652 00000 n 
-0003497789 00000 n 
-0004782352 00000 n 
-0000099703 00000 n 
-0000099740 00000 n 
-0003497920 00000 n 
-0004782253 00000 n 
-0000099791 00000 n 
-0000099830 00000 n 
-0003498050 00000 n 
-0004782154 00000 n 
-0000099882 00000 n 
-0000099963 00000 n 
-0003500599 00000 n 
-0004782055 00000 n 
-0000100015 00000 n 
-0000100059 00000 n 
-0003500730 00000 n 
-0004781971 00000 n 
-0000100111 00000 n 
-0000100168 00000 n 
-0003503009 00000 n 
-0004781831 00000 n 
-0000100217 00000 n 
-0000100282 00000 n 
-0003503139 00000 n 
-0004781747 00000 n 
-0000100333 00000 n 
-0000100371 00000 n 
-0003507065 00000 n 
-0004781607 00000 n 
-0000100422 00000 n 
-0000100459 00000 n 
-0003507195 00000 n 
-0004781523 00000 n 
-0000100515 00000 n 
-0000100579 00000 n 
-0003511008 00000 n 
-0004781424 00000 n 
-0000100635 00000 n 
-0000100696 00000 n 
-0003514439 00000 n 
-0004781340 00000 n 
-0000100752 00000 n 
-0000100807 00000 n 
-0003515954 00000 n 
-0004781241 00000 n 
-0000100858 00000 n 
-0000100891 00000 n 
-0003519433 00000 n 
-0004781157 00000 n 
-0000100942 00000 n 
-0000100983 00000 n 
-0003521994 00000 n 
-0004781017 00000 n 
-0000101032 00000 n 
-0000101077 00000 n 
-0003525419 00000 n 
-0004780933 00000 n 
-0000101128 00000 n 
-0000101166 00000 n 
-0003528011 00000 n 
-0004780849 00000 n 
-0000101217 00000 n 
-0000101261 00000 n 
-0003530415 00000 n 
-0004780709 00000 n 
-0000101310 00000 n 
-0000101374 00000 n 
-0003530545 00000 n 
-0004780625 00000 n 
-0000101425 00000 n 
-0000101472 00000 n 
-0003534115 00000 n 
-0004780500 00000 n 
-0000101523 00000 n 
-0000101570 00000 n 
-0003536044 00000 n 
-0004780416 00000 n 
-0000101626 00000 n 
-0000101665 00000 n 
-0003540951 00000 n 
-0004780332 00000 n 
-0000101721 00000 n 
-0000101760 00000 n 
-0003543818 00000 n 
-0004780233 00000 n 
-0000101809 00000 n 
-0000101876 00000 n 
-0003582454 00000 n 
-0004780134 00000 n 
-0000101926 00000 n 
-0000101955 00000 n 
-0003587486 00000 n 
-0004780050 00000 n 
-0000102006 00000 n 
-0000102040 00000 n 
-0000102446 00000 n 
-0000102690 00000 n 
-0000102094 00000 n 
-0000102562 00000 n 
-0000102626 00000 n 
-0004751008 00000 n 
-0004752349 00000 n 
-0004755169 00000 n 
-0000105356 00000 n 
-0000104989 00000 n 
-0000102778 00000 n 
-0000105105 00000 n 
-0004753681 00000 n 
-0000105292 00000 n 
-0004752201 00000 n 
-0004750859 00000 n 
-0000106126 00000 n 
-0000105946 00000 n 
-0000105458 00000 n 
-0000106062 00000 n 
-0004753533 00000 n 
-0000107621 00000 n 
-0000107771 00000 n 
-0000107943 00000 n 
-0000108115 00000 n 
-0000108284 00000 n 
-0000108460 00000 n 
-0000108629 00000 n 
-0000108781 00000 n 
-0000108950 00000 n 
-0000109103 00000 n 
-0000109273 00000 n 
-0000109445 00000 n 
-0000109614 00000 n 
-0000109766 00000 n 
-0000109935 00000 n 
-0000110106 00000 n 
-0000110279 00000 n 
-0000110445 00000 n 
-0000110597 00000 n 
-0000110766 00000 n 
-0000110947 00000 n 
-0000111113 00000 n 
-0000111269 00000 n 
-0000113241 00000 n 
-0000111620 00000 n 
-0000107286 00000 n 
-0000106228 00000 n 
-0000111438 00000 n 
-0000111560 00000 n 
-0004753982 00000 n 
-0004751757 00000 n 
-0004754723 00000 n 
-0000416909 00000 n 
-0000451174 00000 n 
-0000544305 00000 n 
-0000587428 00000 n 
-0000670135 00000 n 
-0000713405 00000 n 
-0000113410 00000 n 
-0000113581 00000 n 
-0000113753 00000 n 
-0000113925 00000 n 
-0000114091 00000 n 
-0000114251 00000 n 
-0000114417 00000 n 
-0000114572 00000 n 
-0000114740 00000 n 
-0000114895 00000 n 
-0000115063 00000 n 
-0000115233 00000 n 
-0000115391 00000 n 
-0000115559 00000 n 
-0000115730 00000 n 
-0000115901 00000 n 
-0000116051 00000 n 
-0000116223 00000 n 
-0000116391 00000 n 
-0000116561 00000 n 
-0000116729 00000 n 
-0000116895 00000 n 
-0000117066 00000 n 
-0000117221 00000 n 
-0000117389 00000 n 
-0000119338 00000 n 
-0000117624 00000 n 
-0000112879 00000 n 
-0000111764 00000 n 
-0000117560 00000 n 
-0000771617 00000 n 
-0000790769 00000 n 
-0001158388 00000 n 
-0001169564 00000 n 
-0001279322 00000 n 
-0001399865 00000 n 
-0000119491 00000 n 
-0000119660 00000 n 
-0000119841 00000 n 
-0000120007 00000 n 
-0000120158 00000 n 
-0000120327 00000 n 
-0000120476 00000 n 
-0000120647 00000 n 
-0000120816 00000 n 
-0000120973 00000 n 
-0000121142 00000 n 
-0000121311 00000 n 
-0000121483 00000 n 
-0000121633 00000 n 
-0000121801 00000 n 
-0000121973 00000 n 
-0000122142 00000 n 
-0000122315 00000 n 
-0000122472 00000 n 
-0000122644 00000 n 
-0000122812 00000 n 
-0000122971 00000 n 
-0000123139 00000 n 
-0000123310 00000 n 
-0000123482 00000 n 
-0000123659 00000 n 
-0000125707 00000 n 
-0000123871 00000 n 
-0000118967 00000 n 
-0000117768 00000 n 
-0000123807 00000 n 
-0001451956 00000 n 
-0001536554 00000 n 
-0001589828 00000 n 
-0001610927 00000 n 
-0001692503 00000 n 
-0001743856 00000 n 
-0001764842 00000 n 
-0001794673 00000 n 
-0000125878 00000 n 
-0000126046 00000 n 
-0000126207 00000 n 
-0000126380 00000 n 
-0000126551 00000 n 
-0000126719 00000 n 
-0000126876 00000 n 
-0000127048 00000 n 
-0000127221 00000 n 
-0000127393 00000 n 
-0000127540 00000 n 
-0000127712 00000 n 
-0000127880 00000 n 
-0000128050 00000 n 
-0000128199 00000 n 
-0000128376 00000 n 
-0000128547 00000 n 
-0000128722 00000 n 
-0000128901 00000 n 
-0000129073 00000 n 
-0000129241 00000 n 
-0000131013 00000 n 
-0000129474 00000 n 
-0000125381 00000 n 
-0000124015 00000 n 
-0000129410 00000 n 
-0004755295 00000 n 
-0001803500 00000 n 
-0001973972 00000 n 
-0002831977 00000 n 
-0002875685 00000 n 
-0002943753 00000 n 
-0000131182 00000 n 
-0000131335 00000 n 
-0000131504 00000 n 
-0000131658 00000 n 
-0000131827 00000 n 
-0000131973 00000 n 
-0000132142 00000 n 
-0000132318 00000 n 
-0000132482 00000 n 
-0000132650 00000 n 
-0000132800 00000 n 
-0000132972 00000 n 
-0000133141 00000 n 
-0000133316 00000 n 
-0000133463 00000 n 
-0000133632 00000 n 
-0000133781 00000 n 
-0000133950 00000 n 
-0000134119 00000 n 
-0000134271 00000 n 
-0000134440 00000 n 
-0000134609 00000 n 
-0000134761 00000 n 
-0000134930 00000 n 
-0000135089 00000 n 
-0000136787 00000 n 
-0000135325 00000 n 
-0000130651 00000 n 
-0000129618 00000 n 
-0000135261 00000 n 
-0002965588 00000 n 
-0002994186 00000 n 
-0003065133 00000 n 
-0003109578 00000 n 
-0003141951 00000 n 
-0003168330 00000 n 
-0003177182 00000 n 
-0003194911 00000 n 
-0003199630 00000 n 
-0003230591 00000 n 
-0000136955 00000 n 
-0000137126 00000 n 
-0000137282 00000 n 
-0000137450 00000 n 
-0000137598 00000 n 
-0000137766 00000 n 
-0000137919 00000 n 
-0000138091 00000 n 
-0000138263 00000 n 
-0000138432 00000 n 
-0000138584 00000 n 
-0000138754 00000 n 
-0000138925 00000 n 
-0000139097 00000 n 
-0000139265 00000 n 
-0000139418 00000 n 
-0000139586 00000 n 
-0000139758 00000 n 
-0000139930 00000 n 
-0000140083 00000 n 
-0000140254 00000 n 
-0000140422 00000 n 
-0000140593 00000 n 
-0000140748 00000 n 
-0000140920 00000 n 
-0000141088 00000 n 
-0000142499 00000 n 
-0000141309 00000 n 
-0000136416 00000 n 
-0000135469 00000 n 
-0000141245 00000 n 
-0003262803 00000 n 
-0003286382 00000 n 
-0003314103 00000 n 
-0003341598 00000 n 
-0003416768 00000 n 
-0003431813 00000 n 
-0003456064 00000 n 
-0003468756 00000 n 
-0000142671 00000 n 
-0000142840 00000 n 
-0000143009 00000 n 
-0000143179 00000 n 
-0000143327 00000 n 
-0000143504 00000 n 
-0000143674 00000 n 
-0000143843 00000 n 
-0000143997 00000 n 
-0000144176 00000 n 
-0000144326 00000 n 
-0000144559 00000 n 
-0000142263 00000 n 
-0000141453 00000 n 
-0000144495 00000 n 
-0003489334 00000 n 
-0003503074 00000 n 
-0003530480 00000 n 
-0000144984 00000 n 
-0000144804 00000 n 
-0000144703 00000 n 
-0000144920 00000 n 
-0000146444 00000 n 
-0000146598 00000 n 
-0000146751 00000 n 
-0000146903 00000 n 
-0000147057 00000 n 
-0000147211 00000 n 
-0000147365 00000 n 
-0000147519 00000 n 
-0000147672 00000 n 
-0000147821 00000 n 
-0000147976 00000 n 
-0000148129 00000 n 
-0000148284 00000 n 
-0000148438 00000 n 
-0000148597 00000 n 
-0000148757 00000 n 
-0000148917 00000 n 
-0000149077 00000 n 
-0000149242 00000 n 
-0000149402 00000 n 
-0000149556 00000 n 
-0000149710 00000 n 
-0000149865 00000 n 
-0000150025 00000 n 
-0000152251 00000 n 
-0000150249 00000 n 
-0000146100 00000 n 
-0000145026 00000 n 
-0000150185 00000 n 
-0000152405 00000 n 
-0000152565 00000 n 
-0000152724 00000 n 
-0000152884 00000 n 
-0000153037 00000 n 
-0000153191 00000 n 
-0000153346 00000 n 
-0000153500 00000 n 
-0000153660 00000 n 
-0000153825 00000 n 
-0000153990 00000 n 
-0000154155 00000 n 
-0000154320 00000 n 
-0000154480 00000 n 
-0000154645 00000 n 
-0000154805 00000 n 
-0000154970 00000 n 
-0000155135 00000 n 
-0000155284 00000 n 
-0000155439 00000 n 
-0000155591 00000 n 
-0000155746 00000 n 
-0000155901 00000 n 
-0000156056 00000 n 
-0000156216 00000 n 
-0000156379 00000 n 
-0000156539 00000 n 
-0000156704 00000 n 
-0000156864 00000 n 
-0000157029 00000 n 
-0000157189 00000 n 
-0000157354 00000 n 
-0000157514 00000 n 
-0000157678 00000 n 
-0000159993 00000 n 
-0000157897 00000 n 
-0000151808 00000 n 
-0000150365 00000 n 
-0000157833 00000 n 
-0004755421 00000 n 
-0000160147 00000 n 
-0000160306 00000 n 
-0000160466 00000 n 
-0000160626 00000 n 
-0000160786 00000 n 
-0000160946 00000 n 
-0000161099 00000 n 
-0000161254 00000 n 
-0000161408 00000 n 
-0000161563 00000 n 
-0000161723 00000 n 
-0000161883 00000 n 
-0000162038 00000 n 
-0000162192 00000 n 
-0000162347 00000 n 
-0000162507 00000 n 
-0000162672 00000 n 
-0000162837 00000 n 
-0000163002 00000 n 
-0000163162 00000 n 
-0000163317 00000 n 
-0000163476 00000 n 
-0000163635 00000 n 
-0000163795 00000 n 
-0000163955 00000 n 
-0000164115 00000 n 
-0000164275 00000 n 
-0000164435 00000 n 
-0000164588 00000 n 
-0000164743 00000 n 
-0000164898 00000 n 
-0000165058 00000 n 
-0000165222 00000 n 
-0000167636 00000 n 
-0000165446 00000 n 
-0000159559 00000 n 
-0000158013 00000 n 
-0000165382 00000 n 
-0000167795 00000 n 
-0000167955 00000 n 
-0000168115 00000 n 
-0000168279 00000 n 
-0000168442 00000 n 
-0000168597 00000 n 
-0000168757 00000 n 
-0000168912 00000 n 
-0000169072 00000 n 
-0000169232 00000 n 
-0000169392 00000 n 
-0000169552 00000 n 
-0000169705 00000 n 
-0000169860 00000 n 
-0000170015 00000 n 
-0000170175 00000 n 
-0000170335 00000 n 
-0000170495 00000 n 
-0000170655 00000 n 
-0000170820 00000 n 
-0000170985 00000 n 
-0000171150 00000 n 
-0000171305 00000 n 
-0000171465 00000 n 
-0000171625 00000 n 
-0000171780 00000 n 
-0000171940 00000 n 
-0000172100 00000 n 
-0000172259 00000 n 
-0000172423 00000 n 
-0000172583 00000 n 
-0000172743 00000 n 
-0000172901 00000 n 
-0000173056 00000 n 
-0000173211 00000 n 
-0000175381 00000 n 
-0000173435 00000 n 
-0000167184 00000 n 
-0000165548 00000 n 
-0000173371 00000 n 
-0000175540 00000 n 
-0000175700 00000 n 
-0000175852 00000 n 
-0000176006 00000 n 
-0000176161 00000 n 
-0000176316 00000 n 
-0000176476 00000 n 
-0000176636 00000 n 
-0000176791 00000 n 
-0000176944 00000 n 
-0000177098 00000 n 
-0000177252 00000 n 
-0000177412 00000 n 
-0000177577 00000 n 
-0000177741 00000 n 
-0000177905 00000 n 
-0000178065 00000 n 
-0000178225 00000 n 
-0000178380 00000 n 
-0000178530 00000 n 
-0000178685 00000 n 
-0000178838 00000 n 
-0000178993 00000 n 
-0000179148 00000 n 
-0000179308 00000 n 
-0000179468 00000 n 
-0000179628 00000 n 
-0000179788 00000 n 
-0000179948 00000 n 
-0000180101 00000 n 
-0000180257 00000 n 
-0000182740 00000 n 
-0000180477 00000 n 
-0000174965 00000 n 
-0000173537 00000 n 
-0000180413 00000 n 
-0000182895 00000 n 
-0000183056 00000 n 
-0000183216 00000 n 
-0000183376 00000 n 
-0000183532 00000 n 
-0000183691 00000 n 
-0000183852 00000 n 
-0000184013 00000 n 
-0000184174 00000 n 
-0000184335 00000 n 
-0000184496 00000 n 
-0000184657 00000 n 
-0000184818 00000 n 
-0000184974 00000 n 
-0000185133 00000 n 
-0000185294 00000 n 
-0000185454 00000 n 
-0000185610 00000 n 
-0000185771 00000 n 
-0000185932 00000 n 
-0000186088 00000 n 
-0000186249 00000 n 
-0000186410 00000 n 
-0000186571 00000 n 
-0000186737 00000 n 
-0000186893 00000 n 
-0000187054 00000 n 
-0000187215 00000 n 
-0000187375 00000 n 
-0000187536 00000 n 
-0000187697 00000 n 
-0000187850 00000 n 
-0000188005 00000 n 
-0000188166 00000 n 
-0000188326 00000 n 
-0000188482 00000 n 
-0000188643 00000 n 
-0000190998 00000 n 
-0000188873 00000 n 
-0000182270 00000 n 
-0000180593 00000 n 
-0000188809 00000 n 
-0000191163 00000 n 
-0000191324 00000 n 
-0000191483 00000 n 
-0000191644 00000 n 
-0000191810 00000 n 
-0000191971 00000 n 
-0000192127 00000 n 
-0000192288 00000 n 
-0000192449 00000 n 
-0000192615 00000 n 
-0000192781 00000 n 
-0000192937 00000 n 
-0000193098 00000 n 
-0000193259 00000 n 
-0000193420 00000 n 
-0000193580 00000 n 
-0000193745 00000 n 
-0000193910 00000 n 
-0000194076 00000 n 
-0000194242 00000 n 
-0000194408 00000 n 
-0000194573 00000 n 
-0000194738 00000 n 
-0000194903 00000 n 
-0000195067 00000 n 
-0000195233 00000 n 
-0000195399 00000 n 
-0000195555 00000 n 
-0000195716 00000 n 
-0000195877 00000 n 
-0000196030 00000 n 
-0000196185 00000 n 
-0000196341 00000 n 
-0000198704 00000 n 
-0000196566 00000 n 
-0000190564 00000 n 
-0000188975 00000 n 
-0000196502 00000 n 
-0000198865 00000 n 
-0000199024 00000 n 
-0000199190 00000 n 
-0000199351 00000 n 
-0000199512 00000 n 
-0000199668 00000 n 
-0000199829 00000 n 
-0000199989 00000 n 
-0000200145 00000 n 
-0000200305 00000 n 
-0000200466 00000 n 
-0000200619 00000 n 
-0000200775 00000 n 
-0000200930 00000 n 
-0000201086 00000 n 
-0000201247 00000 n 
-0000201413 00000 n 
-0000201579 00000 n 
-0000201744 00000 n 
-0000201910 00000 n 
-0000202071 00000 n 
-0000202232 00000 n 
-0000202398 00000 n 
-0000202554 00000 n 
-0000202715 00000 n 
-0000202875 00000 n 
-0000203036 00000 n 
-0000203196 00000 n 
-0000203352 00000 n 
-0000203508 00000 n 
-0000203669 00000 n 
-0000203830 00000 n 
-0000203986 00000 n 
-0000204141 00000 n 
-0000206537 00000 n 
-0000204366 00000 n 
-0000198261 00000 n 
-0000196668 00000 n 
-0000204302 00000 n 
-0004755547 00000 n 
-0000206697 00000 n 
-0000206858 00000 n 
-0000207023 00000 n 
-0000207189 00000 n 
-0000207355 00000 n 
-0000207521 00000 n 
-0000207682 00000 n 
-0000207838 00000 n 
-0000207995 00000 n 
-0000208152 00000 n 
-0000208309 00000 n 
-0000208466 00000 n 
-0000208628 00000 n 
-0000208790 00000 n 
-0000208947 00000 n 
-0000209101 00000 n 
-0000209256 00000 n 
-0000209417 00000 n 
-0000209577 00000 n 
-0000209738 00000 n 
-0000209898 00000 n 
-0000210054 00000 n 
-0000210214 00000 n 
-0000210380 00000 n 
-0000210545 00000 n 
-0000210706 00000 n 
-0000210867 00000 n 
-0000211028 00000 n 
-0000211193 00000 n 
-0000211359 00000 n 
-0000211513 00000 n 
-0000211669 00000 n 
-0000211830 00000 n 
-0000211991 00000 n 
-0000214354 00000 n 
-0000212216 00000 n 
-0000206094 00000 n 
-0000204468 00000 n 
-0000212152 00000 n 
-0000214509 00000 n 
-0000214665 00000 n 
-0000214826 00000 n 
-0000214980 00000 n 
-0000215135 00000 n 
-0000215291 00000 n 
-0000215452 00000 n 
-0000215613 00000 n 
-0000215774 00000 n 
-0000215939 00000 n 
-0000216095 00000 n 
-0000216256 00000 n 
-0000216417 00000 n 
-0000216578 00000 n 
-0000216734 00000 n 
-0000216894 00000 n 
-0000217060 00000 n 
-0000217225 00000 n 
-0000217381 00000 n 
-0000217542 00000 n 
-0000217703 00000 n 
-0000217864 00000 n 
-0000218024 00000 n 
-0000218190 00000 n 
-0000218356 00000 n 
-0000218517 00000 n 
-0000218677 00000 n 
-0000218838 00000 n 
-0000218999 00000 n 
-0000219165 00000 n 
-0000219331 00000 n 
-0000221787 00000 n 
-0000219561 00000 n 
-0000213938 00000 n 
-0000212318 00000 n 
-0000219497 00000 n 
-0000221942 00000 n 
-0000222103 00000 n 
-0000222264 00000 n 
-0000222425 00000 n 
-0000222579 00000 n 
-0000222735 00000 n 
-0000222890 00000 n 
-0000223051 00000 n 
-0000223216 00000 n 
-0000223381 00000 n 
-0000223547 00000 n 
-0000223712 00000 n 
-0000223878 00000 n 
-0000224044 00000 n 
-0000224209 00000 n 
-0000224375 00000 n 
-0000224541 00000 n 
-0000224697 00000 n 
-0000224858 00000 n 
-0000225024 00000 n 
-0000225190 00000 n 
-0000225346 00000 n 
-0000225507 00000 n 
-0000225668 00000 n 
-0000225824 00000 n 
-0000225980 00000 n 
-0000226141 00000 n 
-0000226302 00000 n 
-0000226463 00000 n 
-0000226618 00000 n 
-0000226772 00000 n 
-0000226928 00000 n 
-0000227084 00000 n 
-0000227240 00000 n 
-0000227401 00000 n 
-0000227562 00000 n 
-0000227723 00000 n 
-0000230151 00000 n 
-0000227948 00000 n 
-0000221317 00000 n 
-0000219663 00000 n 
-0000227884 00000 n 
-0004754130 00000 n 
-0000230311 00000 n 
-0000230472 00000 n 
-0000230628 00000 n 
-0000230784 00000 n 
-0000230945 00000 n 
-0000231106 00000 n 
-0000231260 00000 n 
-0000231415 00000 n 
-0000231571 00000 n 
-0000231725 00000 n 
-0000231886 00000 n 
-0000232047 00000 n 
-0000232208 00000 n 
-0000232364 00000 n 
-0000232524 00000 n 
-0000232685 00000 n 
-0000232840 00000 n 
-0000232996 00000 n 
-0000233157 00000 n 
-0000233318 00000 n 
-0000233472 00000 n 
-0000233628 00000 n 
-0000233784 00000 n 
-0000233945 00000 n 
-0000234099 00000 n 
-0000234255 00000 n 
-0000234410 00000 n 
-0000234571 00000 n 
-0000234730 00000 n 
-0000234886 00000 n 
-0000235047 00000 n 
-0000235208 00000 n 
-0000235364 00000 n 
-0000235524 00000 n 
-0000237991 00000 n 
-0000235754 00000 n 
-0000229708 00000 n 
-0000228064 00000 n 
-0000235690 00000 n 
-0000238156 00000 n 
-0000238322 00000 n 
-0000238488 00000 n 
-0000238653 00000 n 
-0000238819 00000 n 
-0000238975 00000 n 
-0000239136 00000 n 
-0000239297 00000 n 
-0000239458 00000 n 
-0000239619 00000 n 
-0000239780 00000 n 
-0000239936 00000 n 
-0000240095 00000 n 
-0000240256 00000 n 
-0000240422 00000 n 
-0000240587 00000 n 
-0000240753 00000 n 
-0000240919 00000 n 
-0000241085 00000 n 
-0000241251 00000 n 
-0000241417 00000 n 
-0000241583 00000 n 
-0000241749 00000 n 
-0000241904 00000 n 
-0000242064 00000 n 
-0000242225 00000 n 
-0000242386 00000 n 
-0000242547 00000 n 
-0000242703 00000 n 
-0000242864 00000 n 
-0000243025 00000 n 
-0000243186 00000 n 
-0000243347 00000 n 
-0000243508 00000 n 
-0000243668 00000 n 
-0000243829 00000 n 
-0000246469 00000 n 
-0000244049 00000 n 
-0000237530 00000 n 
-0000235856 00000 n 
-0000243985 00000 n 
-0000246629 00000 n 
-0000246790 00000 n 
-0000246951 00000 n 
-0000247111 00000 n 
-0000247266 00000 n 
-0000247423 00000 n 
-0000247580 00000 n 
-0000247737 00000 n 
-0000247894 00000 n 
-0000248056 00000 n 
-0000248218 00000 n 
-0000248372 00000 n 
-0000248528 00000 n 
-0000248689 00000 n 
-0000248850 00000 n 
-0000249006 00000 n 
-0000249167 00000 n 
-0000249328 00000 n 
-0000249489 00000 n 
-0000249644 00000 n 
-0000249805 00000 n 
-0000249966 00000 n 
-0000250126 00000 n 
-0000250287 00000 n 
-0000250448 00000 n 
-0000250603 00000 n 
-0000250763 00000 n 
-0000250924 00000 n 
-0000251085 00000 n 
-0000251246 00000 n 
-0000251407 00000 n 
-0000251568 00000 n 
-0000251727 00000 n 
-0000251888 00000 n 
-0000252044 00000 n 
-0000254533 00000 n 
-0000252269 00000 n 
-0000246017 00000 n 
-0000244151 00000 n 
-0000252205 00000 n 
-0004755673 00000 n 
-0000254693 00000 n 
-0000254854 00000 n 
-0000255020 00000 n 
-0000255180 00000 n 
-0000255341 00000 n 
-0000255502 00000 n 
-0000255663 00000 n 
-0000255824 00000 n 
-0000255985 00000 n 
-0000256147 00000 n 
-0000256309 00000 n 
-0000256471 00000 n 
-0000256631 00000 n 
-0000256793 00000 n 
-0000256954 00000 n 
-0000257115 00000 n 
-0000257277 00000 n 
-0000257439 00000 n 
-0000257601 00000 n 
-0000257757 00000 n 
-0000257918 00000 n 
-0000258079 00000 n 
-0000258240 00000 n 
-0000258395 00000 n 
-0000258556 00000 n 
-0000258717 00000 n 
-0000258872 00000 n 
-0000259033 00000 n 
-0000259194 00000 n 
-0000259350 00000 n 
-0000259511 00000 n 
-0000259672 00000 n 
-0000259833 00000 n 
-0000259993 00000 n 
-0000260150 00000 n 
-0000262751 00000 n 
-0000260376 00000 n 
-0000254081 00000 n 
-0000252385 00000 n 
-0000260312 00000 n 
-0000262912 00000 n 
-0000263074 00000 n 
-0000263236 00000 n 
-0000263397 00000 n 
-0000263559 00000 n 
-0000263721 00000 n 
-0000263883 00000 n 
-0000264045 00000 n 
-0000264208 00000 n 
-0000264371 00000 n 
-0000264534 00000 n 
-0000264695 00000 n 
-0000264858 00000 n 
-0000265021 00000 n 
-0000265183 00000 n 
-0000265340 00000 n 
-0000265502 00000 n 
-0000265664 00000 n 
-0000265826 00000 n 
-0000265988 00000 n 
-0000266150 00000 n 
-0000266312 00000 n 
-0000266468 00000 n 
-0000266629 00000 n 
-0000266791 00000 n 
-0000266953 00000 n 
-0000267114 00000 n 
-0000267271 00000 n 
-0000267433 00000 n 
-0000267600 00000 n 
-0000267767 00000 n 
-0000267934 00000 n 
-0000268100 00000 n 
-0000268267 00000 n 
-0000268434 00000 n 
-0000268601 00000 n 
-0000271039 00000 n 
-0000268832 00000 n 
-0000262290 00000 n 
-0000260492 00000 n 
-0000268768 00000 n 
-0000271201 00000 n 
-0000271358 00000 n 
-0000271519 00000 n 
-0000271681 00000 n 
-0000271843 00000 n 
-0000272005 00000 n 
-0000272167 00000 n 
-0000272329 00000 n 
-0000272491 00000 n 
-0000272648 00000 n 
-0000272803 00000 n 
-0000272965 00000 n 
-0000273127 00000 n 
-0000273288 00000 n 
-0000273444 00000 n 
-0000273601 00000 n 
-0000273758 00000 n 
-0000273920 00000 n 
-0000274082 00000 n 
-0000274244 00000 n 
-0000274406 00000 n 
-0000274567 00000 n 
-0000274729 00000 n 
-0000274890 00000 n 
-0000275052 00000 n 
-0000275214 00000 n 
-0000275377 00000 n 
-0000275540 00000 n 
-0000275703 00000 n 
-0000275866 00000 n 
-0000276028 00000 n 
-0000278447 00000 n 
-0000276255 00000 n 
-0000270623 00000 n 
-0000268948 00000 n 
-0000276191 00000 n 
-0000278610 00000 n 
-0000278773 00000 n 
-0000278936 00000 n 
-0000279099 00000 n 
-0000279262 00000 n 
-0000279419 00000 n 
-0000279573 00000 n 
-0000279729 00000 n 
-0000279885 00000 n 
-0000280041 00000 n 
-0000280202 00000 n 
-0000280363 00000 n 
-0000280524 00000 n 
-0000280690 00000 n 
-0000280851 00000 n 
-0000281010 00000 n 
-0000281171 00000 n 
-0000281332 00000 n 
-0000281498 00000 n 
-0000281654 00000 n 
-0000281814 00000 n 
-0000281975 00000 n 
-0000282136 00000 n 
-0000282290 00000 n 
-0000282446 00000 n 
-0000282602 00000 n 
-0000282758 00000 n 
-0000282918 00000 n 
-0000283079 00000 n 
-0000283235 00000 n 
-0000283396 00000 n 
-0000283557 00000 n 
-0000283717 00000 n 
-0000286094 00000 n 
-0000283942 00000 n 
-0000278013 00000 n 
-0000276357 00000 n 
-0000283878 00000 n 
-0000286254 00000 n 
-0000286415 00000 n 
-0000286571 00000 n 
-0000286731 00000 n 
-0000286892 00000 n 
-0000287053 00000 n 
-0000287219 00000 n 
-0000287385 00000 n 
-0000287551 00000 n 
-0000287717 00000 n 
-0000287883 00000 n 
-0000288048 00000 n 
-0000288214 00000 n 
-0000288370 00000 n 
-0000288525 00000 n 
-0000288685 00000 n 
-0000288846 00000 n 
-0000289000 00000 n 
-0000289156 00000 n 
-0000289312 00000 n 
-0000289468 00000 n 
-0000289629 00000 n 
-0000289789 00000 n 
-0000289944 00000 n 
-0000290105 00000 n 
-0000290266 00000 n 
-0000290420 00000 n 
-0000290576 00000 n 
-0000290732 00000 n 
-0000290893 00000 n 
-0000291054 00000 n 
-0000291220 00000 n 
-0000291381 00000 n 
-0000291547 00000 n 
-0000291712 00000 n 
-0000291868 00000 n 
-0000294107 00000 n 
-0000292088 00000 n 
-0000285633 00000 n 
-0000284044 00000 n 
-0000292024 00000 n 
-0000294267 00000 n 
-0000294428 00000 n 
-0000294589 00000 n 
-0000294744 00000 n 
-0000294898 00000 n 
-0000295059 00000 n 
-0000295213 00000 n 
-0000295369 00000 n 
-0000295525 00000 n 
-0000295686 00000 n 
-0000295852 00000 n 
-0000296018 00000 n 
-0000296184 00000 n 
-0000296350 00000 n 
-0000296511 00000 n 
-0000296677 00000 n 
-0000296843 00000 n 
-0000297009 00000 n 
-0000297170 00000 n 
-0000297331 00000 n 
-0000297492 00000 n 
-0000297658 00000 n 
-0000297824 00000 n 
-0000297990 00000 n 
-0000298156 00000 n 
-0000298312 00000 n 
-0000298468 00000 n 
-0000298624 00000 n 
-0000298784 00000 n 
-0000298949 00000 n 
-0000299110 00000 n 
-0000299271 00000 n 
-0000299425 00000 n 
-0000299586 00000 n 
-0000299747 00000 n 
-0000302155 00000 n 
-0000299972 00000 n 
-0000293655 00000 n 
-0000292190 00000 n 
-0000299908 00000 n 
-0004755799 00000 n 
-0000302316 00000 n 
-0000302470 00000 n 
-0000302626 00000 n 
-0000302782 00000 n 
-0000302942 00000 n 
-0000303108 00000 n 
-0000303269 00000 n 
-0000303435 00000 n 
-0000303601 00000 n 
-0000303761 00000 n 
-0000303922 00000 n 
-0000304083 00000 n 
-0000304249 00000 n 
-0000304415 00000 n 
-0000304580 00000 n 
-0000304746 00000 n 
-0000304902 00000 n 
-0000305063 00000 n 
-0000305224 00000 n 
-0000305378 00000 n 
-0000305534 00000 n 
-0000305689 00000 n 
-0000305845 00000 n 
-0000306006 00000 n 
-0000306167 00000 n 
-0000306328 00000 n 
-0000306488 00000 n 
-0000306644 00000 n 
-0000306805 00000 n 
-0000306966 00000 n 
-0000307127 00000 n 
-0000307287 00000 n 
-0000307448 00000 n 
-0000307604 00000 n 
-0000307765 00000 n 
-0000309973 00000 n 
-0000307990 00000 n 
-0000301703 00000 n 
-0000300074 00000 n 
-0000307926 00000 n 
-0000310133 00000 n 
-0000310287 00000 n 
-0000310442 00000 n 
-0000310598 00000 n 
-0000310754 00000 n 
-0000310910 00000 n 
-0000311066 00000 n 
-0000311226 00000 n 
-0000311387 00000 n 
-0000311548 00000 n 
-0000311704 00000 n 
-0000311865 00000 n 
-0000312019 00000 n 
-0000312175 00000 n 
-0000312331 00000 n 
-0000312492 00000 n 
-0000312653 00000 n 
-0000312814 00000 n 
-0000312975 00000 n 
-0000313128 00000 n 
-0000313284 00000 n 
-0000313440 00000 n 
-0000313601 00000 n 
-0000313762 00000 n 
-0000313927 00000 n 
-0000314093 00000 n 
-0000314259 00000 n 
-0000314424 00000 n 
-0000314590 00000 n 
-0000314756 00000 n 
-0000314922 00000 n 
-0000315083 00000 n 
-0000315244 00000 n 
-0000315405 00000 n 
-0000317595 00000 n 
-0000315630 00000 n 
-0000309530 00000 n 
-0000308092 00000 n 
-0000315566 00000 n 
-0000317748 00000 n 
-0000317901 00000 n 
-0000318055 00000 n 
-0000318216 00000 n 
-0000318377 00000 n 
-0000318538 00000 n 
-0000318688 00000 n 
-0000318842 00000 n 
-0000318998 00000 n 
-0000319159 00000 n 
-0000319319 00000 n 
-0000319480 00000 n 
-0000319636 00000 n 
-0000319797 00000 n 
-0000319958 00000 n 
-0000320124 00000 n 
-0000320290 00000 n 
-0000320456 00000 n 
-0000320622 00000 n 
-0000320783 00000 n 
-0000320948 00000 n 
-0000321113 00000 n 
-0000321279 00000 n 
-0000321445 00000 n 
-0000321599 00000 n 
-0000321755 00000 n 
-0000321916 00000 n 
-0000322082 00000 n 
-0000322248 00000 n 
-0000322414 00000 n 
-0000322579 00000 n 
-0000322745 00000 n 
-0000322906 00000 n 
-0000325060 00000 n 
-0000323126 00000 n 
-0000317161 00000 n 
-0000315732 00000 n 
-0000323062 00000 n 
-0000325220 00000 n 
-0000325381 00000 n 
-0000325535 00000 n 
-0000325691 00000 n 
-0000325846 00000 n 
-0000326007 00000 n 
-0000326173 00000 n 
-0000326339 00000 n 
-0000326500 00000 n 
-0000326660 00000 n 
-0000326820 00000 n 
-0000326976 00000 n 
-0000327137 00000 n 
-0000327298 00000 n 
-0000327459 00000 n 
-0000327619 00000 n 
-0000327780 00000 n 
-0000327941 00000 n 
-0000328102 00000 n 
-0000328263 00000 n 
-0000328412 00000 n 
-0000328566 00000 n 
-0000328722 00000 n 
-0000328878 00000 n 
-0000329034 00000 n 
-0000329187 00000 n 
-0000329343 00000 n 
-0000329504 00000 n 
-0000329665 00000 n 
-0000329826 00000 n 
-0000329986 00000 n 
-0000332299 00000 n 
-0000330216 00000 n 
-0000324644 00000 n 
-0000323242 00000 n 
-0000330152 00000 n 
-0000332464 00000 n 
-0000332620 00000 n 
-0000332776 00000 n 
-0000332932 00000 n 
-0000333086 00000 n 
-0000333242 00000 n 
-0000333398 00000 n 
-0000333554 00000 n 
-0000333713 00000 n 
-0000333868 00000 n 
-0000334024 00000 n 
-0000334180 00000 n 
-0000334330 00000 n 
-0000334484 00000 n 
-0000334640 00000 n 
-0000334801 00000 n 
-0000334962 00000 n 
-0000335128 00000 n 
-0000335294 00000 n 
-0000335450 00000 n 
-0000335605 00000 n 
-0000335760 00000 n 
-0000335921 00000 n 
-0000336087 00000 n 
-0000336253 00000 n 
-0000336419 00000 n 
-0000336575 00000 n 
-0000336736 00000 n 
-0000336896 00000 n 
-0000337062 00000 n 
-0000337228 00000 n 
-0000337382 00000 n 
-0000337538 00000 n 
-0000339770 00000 n 
-0000337758 00000 n 
-0000331865 00000 n 
-0000330332 00000 n 
-0000337694 00000 n 
-0000339925 00000 n 
-0000340080 00000 n 
-0000340236 00000 n 
-0000340392 00000 n 
-0000340553 00000 n 
-0000340714 00000 n 
-0000340868 00000 n 
-0000341023 00000 n 
-0000341178 00000 n 
-0000341339 00000 n 
-0000341500 00000 n 
-0000341661 00000 n 
-0000341817 00000 n 
-0000341978 00000 n 
-0000342138 00000 n 
-0000342299 00000 n 
-0000342460 00000 n 
-0000342619 00000 n 
-0000342779 00000 n 
-0000342935 00000 n 
-0000343096 00000 n 
-0000343252 00000 n 
-0000343408 00000 n 
-0000343562 00000 n 
-0000343717 00000 n 
-0000343872 00000 n 
-0000344028 00000 n 
-0000344184 00000 n 
-0000344340 00000 n 
-0000344496 00000 n 
-0000344652 00000 n 
-0000344807 00000 n 
-0000344962 00000 n 
-0000345119 00000 n 
-0000345276 00000 n 
-0000346803 00000 n 
-0000345497 00000 n 
-0000339318 00000 n 
-0000337874 00000 n 
-0000345433 00000 n 
-0004755925 00000 n 
-0000346956 00000 n 
-0000347112 00000 n 
-0000347268 00000 n 
-0000347428 00000 n 
-0000347589 00000 n 
-0000347750 00000 n 
-0000347906 00000 n 
-0000348062 00000 n 
-0000348216 00000 n 
-0000348372 00000 n 
-0000348528 00000 n 
-0000348682 00000 n 
-0000348838 00000 n 
-0000348993 00000 n 
-0000349154 00000 n 
-0000349315 00000 n 
-0000349469 00000 n 
-0000349624 00000 n 
-0000349843 00000 n 
-0000346504 00000 n 
-0000345599 00000 n 
-0000349779 00000 n 
-0000350226 00000 n 
-0000350046 00000 n 
-0000349945 00000 n 
-0000350162 00000 n 
-0000351499 00000 n 
-0000351654 00000 n 
-0000351810 00000 n 
-0000351966 00000 n 
-0000352122 00000 n 
-0000352278 00000 n 
-0000352434 00000 n 
-0000352590 00000 n 
-0000352746 00000 n 
-0000352902 00000 n 
-0000353058 00000 n 
-0000353213 00000 n 
-0000353370 00000 n 
-0000353526 00000 n 
-0000353682 00000 n 
-0000353838 00000 n 
-0000353994 00000 n 
-0000354276 00000 n 
-0000351218 00000 n 
-0000350268 00000 n 
-0000354150 00000 n 
-0000420955 00000 n 
-0000430311 00000 n 
-0000460421 00000 n 
-0000466816 00000 n 
-0000471681 00000 n 
-0000482286 00000 n 
-0000493560 00000 n 
-0000498057 00000 n 
-0000510914 00000 n 
-0000525799 00000 n 
-0000532671 00000 n 
-0000538241 00000 n 
-0000637309 00000 n 
-0000645530 00000 n 
-0000685844 00000 n 
-0000689752 00000 n 
-0000703221 00000 n 
-0000355693 00000 n 
-0000355849 00000 n 
-0000356005 00000 n 
-0000356162 00000 n 
-0000356319 00000 n 
-0000356476 00000 n 
-0000356633 00000 n 
-0000356790 00000 n 
-0000356947 00000 n 
-0000357104 00000 n 
-0000357261 00000 n 
-0000357418 00000 n 
-0000357575 00000 n 
-0000357731 00000 n 
-0000357887 00000 n 
-0000358044 00000 n 
-0000358201 00000 n 
-0000358358 00000 n 
-0000359915 00000 n 
-0000358579 00000 n 
-0000355403 00000 n 
-0000354378 00000 n 
-0000358515 00000 n 
-0000778946 00000 n 
-0000786281 00000 n 
-0001198183 00000 n 
-0001201960 00000 n 
-0001202472 00000 n 
-0001206556 00000 n 
-0001207067 00000 n 
-0001312860 00000 n 
-0001380953 00000 n 
-0001441857 00000 n 
-0001444395 00000 n 
-0001444842 00000 n 
-0001476849 00000 n 
-0001480426 00000 n 
-0001554055 00000 n 
-0001559559 00000 n 
-0001567155 00000 n 
-0001574515 00000 n 
-0000360072 00000 n 
-0000360229 00000 n 
-0000360386 00000 n 
-0000360543 00000 n 
-0000360700 00000 n 
-0000360857 00000 n 
-0000361014 00000 n 
-0000361171 00000 n 
-0000361328 00000 n 
-0000361485 00000 n 
-0000361643 00000 n 
-0000361799 00000 n 
-0000361956 00000 n 
-0000363155 00000 n 
-0000362177 00000 n 
-0000359661 00000 n 
-0000358681 00000 n 
-0000362113 00000 n 
-0001584343 00000 n 
-0001633069 00000 n 
-0001724154 00000 n 
-0001724730 00000 n 
-0001797568 00000 n 
-0001812760 00000 n 
-0001829268 00000 n 
-0001869987 00000 n 
-0001984543 00000 n 
-0001989407 00000 n 
-0002488463 00000 n 
-0002835234 00000 n 
-0002835827 00000 n 
-0002865490 00000 n 
-0000363311 00000 n 
-0000363468 00000 n 
-0000363625 00000 n 
-0000363782 00000 n 
-0000363939 00000 n 
-0000364096 00000 n 
-0000364253 00000 n 
-0000365319 00000 n 
-0000364474 00000 n 
-0000362955 00000 n 
-0000362279 00000 n 
-0000364410 00000 n 
-0004756051 00000 n 
-0002917955 00000 n 
-0002963127 00000 n 
-0003159306 00000 n 
-0003210287 00000 n 
-0003215790 00000 n 
-0003220179 00000 n 
-0003225121 00000 n 
-0003226898 00000 n 
-0000365475 00000 n 
-0000365632 00000 n 
-0000365789 00000 n 
-0000366010 00000 n 
-0000365155 00000 n 
-0000364576 00000 n 
-0000365946 00000 n 
-0003317116 00000 n 
-0003326270 00000 n 
-0003330103 00000 n 
-0003484623 00000 n 
-0000366393 00000 n 
-0000366213 00000 n 
-0000366112 00000 n 
-0000366329 00000 n 
-0000367855 00000 n 
-0000368000 00000 n 
-0000368153 00000 n 
-0000368299 00000 n 
-0000368451 00000 n 
-0000368604 00000 n 
-0000368757 00000 n 
-0000368910 00000 n 
-0000369063 00000 n 
-0000369214 00000 n 
-0000369367 00000 n 
-0000369520 00000 n 
-0000369673 00000 n 
-0000369827 00000 n 
-0000369980 00000 n 
-0000370134 00000 n 
-0000370288 00000 n 
-0000370442 00000 n 
-0000370596 00000 n 
-0000370749 00000 n 
-0000370903 00000 n 
-0000371057 00000 n 
-0000371211 00000 n 
-0000371365 00000 n 
-0000371518 00000 n 
-0000371672 00000 n 
-0000371826 00000 n 
-0000371972 00000 n 
-0000374166 00000 n 
-0000372252 00000 n 
-0000367475 00000 n 
-0000366435 00000 n 
-0000372126 00000 n 
-0004506483 00000 n 
-0000596714 00000 n 
-0004506449 00000 n 
-0000822751 00000 n 
-0000843333 00000 n 
-0000861455 00000 n 
-0000892667 00000 n 
-0000914594 00000 n 
-0000928114 00000 n 
-0000943065 00000 n 
-0000954577 00000 n 
-0000969156 00000 n 
-0000981524 00000 n 
-0000992051 00000 n 
-0001006723 00000 n 
-0001006851 00000 n 
-0001046308 00000 n 
-0001046436 00000 n 
-0001090083 00000 n 
-0001090211 00000 n 
-0001123906 00000 n 
-0001124034 00000 n 
-0001140719 00000 n 
-0001140847 00000 n 
-0001153808 00000 n 
-0001153936 00000 n 
-0004506415 00000 n 
-0001258003 00000 n 
-0000374311 00000 n 
-0000374465 00000 n 
-0000374619 00000 n 
-0000374765 00000 n 
-0000374919 00000 n 
-0000375073 00000 n 
-0000375227 00000 n 
-0000375373 00000 n 
-0000375527 00000 n 
-0000375673 00000 n 
-0000375826 00000 n 
-0000375972 00000 n 
-0000376126 00000 n 
-0000376280 00000 n 
-0000376434 00000 n 
-0000376587 00000 n 
-0000376741 00000 n 
-0000376895 00000 n 
-0000377049 00000 n 
-0000377199 00000 n 
-0000377353 00000 n 
-0000377507 00000 n 
-0000377662 00000 n 
-0000377817 00000 n 
-0000377972 00000 n 
-0000378126 00000 n 
-0000378281 00000 n 
-0000378435 00000 n 
-0000378590 00000 n 
-0000378745 00000 n 
-0000378900 00000 n 
-0000379832 00000 n 
-0000379110 00000 n 
-0000373750 00000 n 
-0000372354 00000 n 
-0000379046 00000 n 
-0004506381 00000 n 
-0001295945 00000 n 
-0001303594 00000 n 
-0004506347 00000 n 
-0001408000 00000 n 
-0001419505 00000 n 
-0001419633 00000 n 
-0004506313 00000 n 
-0001632941 00000 n 
-0004506279 00000 n 
-0001778089 00000 n 
-0004506245 00000 n 
-0002031281 00000 n 
-0002067022 00000 n 
-0002067278 00000 n 
-0002140706 00000 n 
-0002140834 00000 n 
-0002176760 00000 n 
-0002208709 00000 n 
-0002256179 00000 n 
-0002288860 00000 n 
-0002356776 00000 n 
-0002362044 00000 n 
-0002368316 00000 n 
-0002435496 00000 n 
-0002435752 00000 n 
-0002471818 00000 n 
-0002575347 00000 n 
-0002685267 00000 n 
-0002713336 00000 n 
-0002829730 00000 n 
-0004506211 00000 n 
-0000379985 00000 n 
-0000380131 00000 n 
-0000380284 00000 n 
-0000380502 00000 n 
-0000379668 00000 n 
-0000379212 00000 n 
-0000380438 00000 n 
-0002885421 00000 n 
-0004506177 00000 n 
-0003365413 00000 n 
-0003405575 00000 n 
-0000382039 00000 n 
-0000382183 00000 n 
-0000382334 00000 n 
-0000382486 00000 n 
-0000382631 00000 n 
-0000382783 00000 n 
-0000382928 00000 n 
-0000383079 00000 n 
-0000383225 00000 n 
-0000383377 00000 n 
-0000383523 00000 n 
-0000383676 00000 n 
-0000383828 00000 n 
-0000383981 00000 n 
-0000384134 00000 n 
-0000384280 00000 n 
-0000384432 00000 n 
-0000384585 00000 n 
-0000384738 00000 n 
-0000384891 00000 n 
-0000385044 00000 n 
-0000385189 00000 n 
-0000385468 00000 n 
-0000381713 00000 n 
-0000380604 00000 n 
-0000385342 00000 n 
-0004756177 00000 n 
-0004506143 00000 n 
-0000427048 00000 n 
-0000448502 00000 n 
-0004506109 00000 n 
-0000675775 00000 n 
-0004506075 00000 n 
-0000738106 00000 n 
-0004506041 00000 n 
-0001167682 00000 n 
-0001261914 00000 n 
-0001265583 00000 n 
-0001265711 00000 n 
-0001268560 00000 n 
-0001331838 00000 n 
-0001343704 00000 n 
-0001395549 00000 n 
-0001397853 00000 n 
-0001397981 00000 n 
-0001439231 00000 n 
-0000387234 00000 n 
-0000387379 00000 n 
-0000387532 00000 n 
-0000387678 00000 n 
-0000387831 00000 n 
-0000387983 00000 n 
-0000388136 00000 n 
-0000388289 00000 n 
-0000388442 00000 n 
-0000388587 00000 n 
-0000388739 00000 n 
-0000388885 00000 n 
-0000389038 00000 n 
-0000389184 00000 n 
-0000389337 00000 n 
-0000389483 00000 n 
-0000389636 00000 n 
-0000389789 00000 n 
-0000389942 00000 n 
-0000390088 00000 n 
-0000390241 00000 n 
-0000390387 00000 n 
-0000390540 00000 n 
-0000390693 00000 n 
-0000390837 00000 n 
-0000390990 00000 n 
-0000392037 00000 n 
-0000391200 00000 n 
-0000386872 00000 n 
-0000385570 00000 n 
-0000391136 00000 n 
-0004506007 00000 n 
-0001595438 00000 n 
-0001623554 00000 n 
-0001644205 00000 n 
-0001646929 00000 n 
-0001688978 00000 n 
-0001690626 00000 n 
-0004505973 00000 n 
-0001853274 00000 n 
-0002308029 00000 n 
-0004505939 00000 n 
-0002843686 00000 n 
-0004505905 00000 n 
-0003043719 00000 n 
-0003043850 00000 n 
-0003051612 00000 n 
-0004505871 00000 n 
-0003100981 00000 n 
-0004505837 00000 n 
-0003122682 00000 n 
-0003122811 00000 n 
-0004505803 00000 n 
-0003165656 00000 n 
-0004505769 00000 n 
-0000392189 00000 n 
-0000392335 00000 n 
-0000392487 00000 n 
-0000392640 00000 n 
-0000392785 00000 n 
-0000393002 00000 n 
-0000391855 00000 n 
-0000391302 00000 n 
-0000392938 00000 n 
-0003252459 00000 n 
-0004505735 00000 n 
-0003277926 00000 n 
-0003280768 00000 n 
-0004505701 00000 n 
-0003424376 00000 n 
-0000395796 00000 n 
-0000395492 00000 n 
-0000393104 00000 n 
-0000395608 00000 n 
-0000395733 00000 n 
-0000398099 00000 n 
-0000397919 00000 n 
-0000395912 00000 n 
-0000398035 00000 n 
-0000400230 00000 n 
+0005064043 00000 n 
+0005429233 00000 n 
+0000000223 00000 n 
+0000000250 00000 n 
+0000111499 00000 n 
+0005429143 00000 n 
+0000000297 00000 n 
+0000000332 00000 n 
+0000354213 00000 n 
+0005429053 00000 n 
+0000000379 00000 n 
+0000000413 00000 n 
+0000372189 00000 n 
+0005428963 00000 n 
+0000000460 00000 n 
+0000000493 00000 n 
+0000385407 00000 n 
+0005428873 00000 n 
+0000000540 00000 n 
+0000000567 00000 n 
+0000395673 00000 n 
+0005428783 00000 n 
+0000000614 00000 n 
+0000000640 00000 n 
+0000400761 00000 n 
+0005428693 00000 n 
+0000000687 00000 n 
+0000000718 00000 n 
+0000412899 00000 n 
+0005428564 00000 n 
+0000000761 00000 n 
+0000000807 00000 n 
+0000414028 00000 n 
+0005428490 00000 n 
+0000000855 00000 n 
+0000000907 00000 n 
+0000416848 00000 n 
+0005428364 00000 n 
+0000000953 00000 n 
+0000001011 00000 n 
+0000416974 00000 n 
+0005428290 00000 n 
+0000001059 00000 n 
+0000001112 00000 n 
+0000417100 00000 n 
+0005428166 00000 n 
+0000001160 00000 n 
+0000001213 00000 n 
+0000417226 00000 n 
+0005428092 00000 n 
+0000001266 00000 n 
+0000001316 00000 n 
+0000424045 00000 n 
+0005428005 00000 n 
+0000001369 00000 n 
+0000001423 00000 n 
+0000424171 00000 n 
+0005427918 00000 n 
+0000001476 00000 n 
+0000001515 00000 n 
+0000430186 00000 n 
+0005427794 00000 n 
+0000001568 00000 n 
+0000001614 00000 n 
+0000433378 00000 n 
+0005427733 00000 n 
+0000001672 00000 n 
+0000001734 00000 n 
+0000436574 00000 n 
+0005427659 00000 n 
+0000001787 00000 n 
+0000001816 00000 n 
+0000436700 00000 n 
+0005427572 00000 n 
+0000001864 00000 n 
+0000001922 00000 n 
+0000438638 00000 n 
+0005427485 00000 n 
+0000001970 00000 n 
+0000002019 00000 n 
+0000438764 00000 n 
+0005427359 00000 n 
+0000002067 00000 n 
+0000002122 00000 n 
+0000441988 00000 n 
+0005427283 00000 n 
+0000002175 00000 n 
+0000002227 00000 n 
+0000442114 00000 n 
+0005427206 00000 n 
+0000002281 00000 n 
+0000002319 00000 n 
+0000444475 00000 n 
+0005427090 00000 n 
+0000002368 00000 n 
+0000002405 00000 n 
+0000444602 00000 n 
+0005427011 00000 n 
+0000002459 00000 n 
+0000002515 00000 n 
+0000444729 00000 n 
+0005426918 00000 n 
+0000002569 00000 n 
+0000002631 00000 n 
+0000444856 00000 n 
+0005426839 00000 n 
+0000002685 00000 n 
+0000002747 00000 n 
+0000451112 00000 n 
+0005426723 00000 n 
+0000002794 00000 n 
+0000002855 00000 n 
+0000454817 00000 n 
+0005426644 00000 n 
+0000002904 00000 n 
+0000002949 00000 n 
+0000454944 00000 n 
+0005426551 00000 n 
+0000002998 00000 n 
+0000003050 00000 n 
+0000457392 00000 n 
+0005426433 00000 n 
+0000003099 00000 n 
+0000003138 00000 n 
+0000457519 00000 n 
+0005426315 00000 n 
+0000003192 00000 n 
+0000003235 00000 n 
+0000457646 00000 n 
+0005426236 00000 n 
+0000003294 00000 n 
+0000003357 00000 n 
+0000466690 00000 n 
+0005426143 00000 n 
+0000003416 00000 n 
+0000003480 00000 n 
+0000467777 00000 n 
+0005426050 00000 n 
+0000003539 00000 n 
+0000003589 00000 n 
+0000478524 00000 n 
+0005425971 00000 n 
+0000003648 00000 n 
+0000003715 00000 n 
+0000489813 00000 n 
+0005425839 00000 n 
+0000003769 00000 n 
+0000003815 00000 n 
+0000493447 00000 n 
+0005425774 00000 n 
+0000003874 00000 n 
+0000003923 00000 n 
+0000503746 00000 n 
+0005425656 00000 n 
+0000003977 00000 n 
+0000004020 00000 n 
+0000506241 00000 n 
+0005425577 00000 n 
+0000004079 00000 n 
+0000004134 00000 n 
+0000515271 00000 n 
+0005425498 00000 n 
+0000004193 00000 n 
+0000004239 00000 n 
+0000540594 00000 n 
+0005425365 00000 n 
+0000004283 00000 n 
+0000004338 00000 n 
+0000541771 00000 n 
+0005425286 00000 n 
+0000004387 00000 n 
+0000004442 00000 n 
+0000544256 00000 n 
+0005425154 00000 n 
+0000004489 00000 n 
+0000004550 00000 n 
+0000544383 00000 n 
+0005425075 00000 n 
+0000004599 00000 n 
+0000004644 00000 n 
+0000546547 00000 n 
+0005424982 00000 n 
+0000004693 00000 n 
+0000004729 00000 n 
+0000550074 00000 n 
+0005424850 00000 n 
+0000004778 00000 n 
+0000004822 00000 n 
+0000552702 00000 n 
+0005424732 00000 n 
+0000004876 00000 n 
+0000004921 00000 n 
+0000555746 00000 n 
+0005424667 00000 n 
+0000004980 00000 n 
+0000005029 00000 n 
+0000556001 00000 n 
+0005424535 00000 n 
+0000005083 00000 n 
+0000005129 00000 n 
+0000558579 00000 n 
+0005424470 00000 n 
+0000005188 00000 n 
+0000005237 00000 n 
+0000558834 00000 n 
+0005424338 00000 n 
+0000005291 00000 n 
+0000005361 00000 n 
+0000561408 00000 n 
+0005424273 00000 n 
+0000005420 00000 n 
+0000005469 00000 n 
+0000568220 00000 n 
+0005424141 00000 n 
+0000005523 00000 n 
+0000005590 00000 n 
+0000568347 00000 n 
+0005424076 00000 n 
+0000005649 00000 n 
+0000005698 00000 n 
+0000568794 00000 n 
+0005423958 00000 n 
+0000005752 00000 n 
+0000005817 00000 n 
+0000573869 00000 n 
+0005423893 00000 n 
+0000005876 00000 n 
+0000005925 00000 n 
+0000576739 00000 n 
+0005423800 00000 n 
+0000005974 00000 n 
+0000006015 00000 n 
+0000579747 00000 n 
+0005423682 00000 n 
+0000006064 00000 n 
+0000006101 00000 n 
+0000582561 00000 n 
+0005423603 00000 n 
+0000006155 00000 n 
+0000006207 00000 n 
+0000582688 00000 n 
+0005423510 00000 n 
+0000006261 00000 n 
+0000006324 00000 n 
+0000582814 00000 n 
+0005423417 00000 n 
+0000006378 00000 n 
+0000006437 00000 n 
+0000582941 00000 n 
+0005423324 00000 n 
+0000006491 00000 n 
+0000006565 00000 n 
+0000584837 00000 n 
+0005423245 00000 n 
+0000006619 00000 n 
+0000006730 00000 n 
+0000587379 00000 n 
+0005423113 00000 n 
+0000006777 00000 n 
+0000006821 00000 n 
+0000629230 00000 n 
+0005423034 00000 n 
+0000006870 00000 n 
+0000006915 00000 n 
+0000640272 00000 n 
+0005422941 00000 n 
+0000006964 00000 n 
+0000007022 00000 n 
+0000648316 00000 n 
+0005422809 00000 n 
+0000007071 00000 n 
+0000007119 00000 n 
+0000648443 00000 n 
+0005422730 00000 n 
+0000007173 00000 n 
+0000007222 00000 n 
+0000656650 00000 n 
+0005422651 00000 n 
+0000007276 00000 n 
+0000007330 00000 n 
+0000665954 00000 n 
+0005422558 00000 n 
+0000007379 00000 n 
+0000007440 00000 n 
+0000674536 00000 n 
+0005422465 00000 n 
+0000007489 00000 n 
+0000007537 00000 n 
+0000677536 00000 n 
+0005422333 00000 n 
+0000007586 00000 n 
+0000007648 00000 n 
+0000677663 00000 n 
+0005422215 00000 n 
+0000007702 00000 n 
+0000007756 00000 n 
+0000677790 00000 n 
+0005422136 00000 n 
+0000007815 00000 n 
+0000007864 00000 n 
+0000678618 00000 n 
+0005422043 00000 n 
+0000007923 00000 n 
+0000007997 00000 n 
+0000681273 00000 n 
+0005421964 00000 n 
+0000008056 00000 n 
+0000008117 00000 n 
+0000687491 00000 n 
+0005421885 00000 n 
+0000008171 00000 n 
+0000008230 00000 n 
+0000692696 00000 n 
+0005421767 00000 n 
+0000008279 00000 n 
+0000008316 00000 n 
+0000692823 00000 n 
+0005421688 00000 n 
+0000008370 00000 n 
+0000008439 00000 n 
+0000692950 00000 n 
+0005421595 00000 n 
+0000008493 00000 n 
+0000008575 00000 n 
+0000695089 00000 n 
+0005421502 00000 n 
+0000008629 00000 n 
+0000008696 00000 n 
+0000697810 00000 n 
+0005421409 00000 n 
+0000008750 00000 n 
+0000008819 00000 n 
+0000697937 00000 n 
+0005421316 00000 n 
+0000008873 00000 n 
+0000008915 00000 n 
+0000698063 00000 n 
+0005421223 00000 n 
+0000008969 00000 n 
+0000009024 00000 n 
+0000699956 00000 n 
+0005421144 00000 n 
+0000009078 00000 n 
+0000009166 00000 n 
+0000702459 00000 n 
+0005421012 00000 n 
+0000009213 00000 n 
+0000009264 00000 n 
+0000702586 00000 n 
+0005420933 00000 n 
+0000009313 00000 n 
+0000009358 00000 n 
+0000705377 00000 n 
+0005420801 00000 n 
+0000009407 00000 n 
+0000009463 00000 n 
+0000708290 00000 n 
+0005420683 00000 n 
+0000009517 00000 n 
+0000009578 00000 n 
+0000714575 00000 n 
+0005420618 00000 n 
+0000009637 00000 n 
+0000009690 00000 n 
+0000719063 00000 n 
+0005420525 00000 n 
+0000009744 00000 n 
+0000009794 00000 n 
+0000722395 00000 n 
+0005420432 00000 n 
+0000009848 00000 n 
+0000009905 00000 n 
+0000725531 00000 n 
+0005420339 00000 n 
+0000009959 00000 n 
+0000010035 00000 n 
+0000725658 00000 n 
+0005420221 00000 n 
+0000010089 00000 n 
+0000010165 00000 n 
+0000725785 00000 n 
+0005420142 00000 n 
+0000010224 00000 n 
+0000010279 00000 n 
+0000728687 00000 n 
+0005420063 00000 n 
+0000010338 00000 n 
+0000010394 00000 n 
+0000728814 00000 n 
+0005419931 00000 n 
+0000010443 00000 n 
+0000010505 00000 n 
+0000731808 00000 n 
+0005419866 00000 n 
+0000010559 00000 n 
+0000010606 00000 n 
+0000739679 00000 n 
+0005419748 00000 n 
+0000010655 00000 n 
+0000010692 00000 n 
+0000739806 00000 n 
+0005419669 00000 n 
+0000010746 00000 n 
+0000010802 00000 n 
+0000742446 00000 n 
+0005419576 00000 n 
+0000010856 00000 n 
+0000010936 00000 n 
+0000742572 00000 n 
+0005419483 00000 n 
+0000010990 00000 n 
+0000011054 00000 n 
+0000743684 00000 n 
+0005419404 00000 n 
+0000011108 00000 n 
+0000011162 00000 n 
+0000745729 00000 n 
+0005419272 00000 n 
+0000011209 00000 n 
+0000011256 00000 n 
+0000745856 00000 n 
+0005419193 00000 n 
+0000011305 00000 n 
+0000011350 00000 n 
+0000748340 00000 n 
+0005419061 00000 n 
+0000011399 00000 n 
+0000011475 00000 n 
+0000752520 00000 n 
+0005418982 00000 n 
+0000011529 00000 n 
+0000011596 00000 n 
+0000758096 00000 n 
+0005418889 00000 n 
+0000011650 00000 n 
+0000011733 00000 n 
+0000761264 00000 n 
+0005418796 00000 n 
+0000011787 00000 n 
+0000011858 00000 n 
+0000761582 00000 n 
+0005418678 00000 n 
+0000011912 00000 n 
+0000011996 00000 n 
+0000764151 00000 n 
+0005418599 00000 n 
+0000012055 00000 n 
+0000012118 00000 n 
+0000764278 00000 n 
+0005418506 00000 n 
+0000012177 00000 n 
+0000012223 00000 n 
+0000764405 00000 n 
+0005418427 00000 n 
+0000012282 00000 n 
+0000012322 00000 n 
+0000767154 00000 n 
+0005418295 00000 n 
+0000012371 00000 n 
+0000012415 00000 n 
+0000767281 00000 n 
+0005418216 00000 n 
+0000012469 00000 n 
+0000012534 00000 n 
+0000776181 00000 n 
+0005418137 00000 n 
+0000012588 00000 n 
+0000012656 00000 n 
+0000779817 00000 n 
+0005418005 00000 n 
+0000012705 00000 n 
+0000012756 00000 n 
+0000779944 00000 n 
+0005417926 00000 n 
+0000012810 00000 n 
+0000012854 00000 n 
+0000783988 00000 n 
+0005417833 00000 n 
+0000012908 00000 n 
+0000012958 00000 n 
+0000791072 00000 n 
+0005417701 00000 n 
+0000013012 00000 n 
+0000013065 00000 n 
+0000793436 00000 n 
+0005417636 00000 n 
+0000013124 00000 n 
+0000013167 00000 n 
+0000793563 00000 n 
+0005417543 00000 n 
+0000013221 00000 n 
+0000013267 00000 n 
+0000796313 00000 n 
+0005417450 00000 n 
+0000013321 00000 n 
+0000013369 00000 n 
+0000796440 00000 n 
+0005417371 00000 n 
+0000013423 00000 n 
+0000013454 00000 n 
+0000796567 00000 n 
+0005417278 00000 n 
+0000013503 00000 n 
+0000013580 00000 n 
+0000799215 00000 n 
+0005417160 00000 n 
+0000013629 00000 n 
+0000013666 00000 n 
+0000799342 00000 n 
+0005417081 00000 n 
+0000013720 00000 n 
+0000013779 00000 n 
+0000799469 00000 n 
+0005416988 00000 n 
+0000013833 00000 n 
+0000013889 00000 n 
+0000801749 00000 n 
+0005416909 00000 n 
+0000013943 00000 n 
+0000014000 00000 n 
+0000803956 00000 n 
+0005416777 00000 n 
+0000014047 00000 n 
+0000014095 00000 n 
+0000804083 00000 n 
+0005416698 00000 n 
+0000014144 00000 n 
+0000014189 00000 n 
+0000807412 00000 n 
+0005416605 00000 n 
+0000014238 00000 n 
+0000014272 00000 n 
+0000807539 00000 n 
+0005416473 00000 n 
+0000014321 00000 n 
+0000014366 00000 n 
+0000807666 00000 n 
+0005416394 00000 n 
+0000014420 00000 n 
+0000014476 00000 n 
+0000812244 00000 n 
+0005416315 00000 n 
+0000014530 00000 n 
+0000014577 00000 n 
+0000821452 00000 n 
+0005416236 00000 n 
+0000014626 00000 n 
+0000014663 00000 n 
+0000823108 00000 n 
+0005416118 00000 n 
+0000014710 00000 n 
+0000014778 00000 n 
+0000823235 00000 n 
+0005416039 00000 n 
+0000014827 00000 n 
+0000014872 00000 n 
+0000823362 00000 n 
+0005415907 00000 n 
+0000014921 00000 n 
+0000014962 00000 n 
+0000826387 00000 n 
+0005415789 00000 n 
+0000015016 00000 n 
+0000015062 00000 n 
+0000826514 00000 n 
+0005415710 00000 n 
+0000015121 00000 n 
+0000015175 00000 n 
+0000875863 00000 n 
+0005415617 00000 n 
+0000015234 00000 n 
+0000015277 00000 n 
+0000925261 00000 n 
+0005415538 00000 n 
+0000015336 00000 n 
+0000015377 00000 n 
+0000960772 00000 n 
+0005415445 00000 n 
+0000015431 00000 n 
+0000015503 00000 n 
+0000987235 00000 n 
+0005415366 00000 n 
+0000015557 00000 n 
+0000015624 00000 n 
+0001014182 00000 n 
+0005415287 00000 n 
+0000015673 00000 n 
+0000015710 00000 n 
+0001187279 00000 n 
+0005415150 00000 n 
+0000015754 00000 n 
+0000015805 00000 n 
+0001188381 00000 n 
+0005415071 00000 n 
+0000015854 00000 n 
+0000015909 00000 n 
+0001190727 00000 n 
+0005414939 00000 n 
+0000015956 00000 n 
+0000016046 00000 n 
+0001190854 00000 n 
+0005414860 00000 n 
+0000016095 00000 n 
+0000016153 00000 n 
+0001190981 00000 n 
+0005414742 00000 n 
+0000016202 00000 n 
+0000016260 00000 n 
+0001194090 00000 n 
+0005414663 00000 n 
+0000016314 00000 n 
+0000016362 00000 n 
+0001196638 00000 n 
+0005414570 00000 n 
+0000016416 00000 n 
+0000016466 00000 n 
+0001200212 00000 n 
+0005414477 00000 n 
+0000016520 00000 n 
+0000016560 00000 n 
+0001200339 00000 n 
+0005414384 00000 n 
+0000016614 00000 n 
+0000016677 00000 n 
+0001200466 00000 n 
+0005414305 00000 n 
+0000016731 00000 n 
+0000016785 00000 n 
+0001201903 00000 n 
+0005414173 00000 n 
+0000016833 00000 n 
+0000016880 00000 n 
+0001204552 00000 n 
+0005414094 00000 n 
+0000016930 00000 n 
+0000016976 00000 n 
+0001206917 00000 n 
+0005414001 00000 n 
+0000017026 00000 n 
+0000017068 00000 n 
+0001208819 00000 n 
+0005413869 00000 n 
+0000017118 00000 n 
+0000017153 00000 n 
+0001211495 00000 n 
+0005413790 00000 n 
+0000017208 00000 n 
+0000017254 00000 n 
+0001217488 00000 n 
+0005413697 00000 n 
+0000017309 00000 n 
+0000017358 00000 n 
+0001220053 00000 n 
+0005413618 00000 n 
+0000017413 00000 n 
+0000017464 00000 n 
+0001224173 00000 n 
+0005413486 00000 n 
+0000017514 00000 n 
+0000017561 00000 n 
+0001230332 00000 n 
+0005413407 00000 n 
+0000017616 00000 n 
+0000017673 00000 n 
+0001235385 00000 n 
+0005413314 00000 n 
+0000017728 00000 n 
+0000017784 00000 n 
+0001239597 00000 n 
+0005413221 00000 n 
+0000017839 00000 n 
+0000017896 00000 n 
+0001242391 00000 n 
+0005413128 00000 n 
+0000017951 00000 n 
+0000018008 00000 n 
+0001245235 00000 n 
+0005413035 00000 n 
+0000018063 00000 n 
+0000018120 00000 n 
+0001245362 00000 n 
+0005412942 00000 n 
+0000018175 00000 n 
+0000018221 00000 n 
+0001248776 00000 n 
+0005412849 00000 n 
+0000018276 00000 n 
+0000018339 00000 n 
+0001252092 00000 n 
+0005412770 00000 n 
+0000018394 00000 n 
+0000018460 00000 n 
+0001252347 00000 n 
+0005412638 00000 n 
+0000018510 00000 n 
+0000018580 00000 n 
+0001256247 00000 n 
+0005412559 00000 n 
+0000018635 00000 n 
+0000018687 00000 n 
+0001261955 00000 n 
+0005412466 00000 n 
+0000018742 00000 n 
+0000018785 00000 n 
+0001262082 00000 n 
+0005412387 00000 n 
+0000018840 00000 n 
+0000018886 00000 n 
+0001264110 00000 n 
+0005412255 00000 n 
+0000018936 00000 n 
+0000018974 00000 n 
+0001264236 00000 n 
+0005412176 00000 n 
+0000019029 00000 n 
+0000019084 00000 n 
+0001266863 00000 n 
+0005412097 00000 n 
+0000019139 00000 n 
+0000019187 00000 n 
+0001270416 00000 n 
+0005411965 00000 n 
+0000019237 00000 n 
+0000019292 00000 n 
+0001273056 00000 n 
+0005411886 00000 n 
+0000019347 00000 n 
+0000019399 00000 n 
+0001275741 00000 n 
+0005411793 00000 n 
+0000019454 00000 n 
+0000019499 00000 n 
+0001278564 00000 n 
+0005411675 00000 n 
+0000019554 00000 n 
+0000019602 00000 n 
+0001278691 00000 n 
+0005411610 00000 n 
+0000019662 00000 n 
+0000019724 00000 n 
+0001332964 00000 n 
+0005411492 00000 n 
+0000019774 00000 n 
+0000019812 00000 n 
+0001333090 00000 n 
+0005411413 00000 n 
+0000019867 00000 n 
+0000019931 00000 n 
+0001335565 00000 n 
+0005411320 00000 n 
+0000019986 00000 n 
+0000020046 00000 n 
+0001335692 00000 n 
+0005411227 00000 n 
+0000020101 00000 n 
+0000020173 00000 n 
+0001335819 00000 n 
+0005411134 00000 n 
+0000020228 00000 n 
+0000020302 00000 n 
+0001338643 00000 n 
+0005411055 00000 n 
+0000020357 00000 n 
+0000020440 00000 n 
+0001343343 00000 n 
+0005410923 00000 n 
+0000020488 00000 n 
+0000020548 00000 n 
+0001345951 00000 n 
+0005410805 00000 n 
+0000020598 00000 n 
+0000020644 00000 n 
+0001346078 00000 n 
+0005410726 00000 n 
+0000020699 00000 n 
+0000020772 00000 n 
+0001348365 00000 n 
+0005410647 00000 n 
+0000020827 00000 n 
+0000020881 00000 n 
+0001351472 00000 n 
+0005410515 00000 n 
+0000020931 00000 n 
+0000020977 00000 n 
+0001351599 00000 n 
+0005410397 00000 n 
+0000021032 00000 n 
+0000021089 00000 n 
+0001495821 00000 n 
+0005410318 00000 n 
+0000021149 00000 n 
+0000021211 00000 n 
+0001495944 00000 n 
+0005410239 00000 n 
+0000021271 00000 n 
+0000021337 00000 n 
+0001498813 00000 n 
+0005410146 00000 n 
+0000021392 00000 n 
+0000021471 00000 n 
+0001498940 00000 n 
+0005410053 00000 n 
+0000021526 00000 n 
+0000021601 00000 n 
+0001503195 00000 n 
+0005409921 00000 n 
+0000021656 00000 n 
+0000021706 00000 n 
+0001506149 00000 n 
+0005409856 00000 n 
+0000021766 00000 n 
+0000021827 00000 n 
+0001508826 00000 n 
+0005409777 00000 n 
+0000021882 00000 n 
+0000021955 00000 n 
+0001511847 00000 n 
+0005409645 00000 n 
+0000022005 00000 n 
+0000022054 00000 n 
+0001511972 00000 n 
+0005409566 00000 n 
+0000022109 00000 n 
+0000022154 00000 n 
+0001515867 00000 n 
+0005409448 00000 n 
+0000022209 00000 n 
+0000022252 00000 n 
+0001519272 00000 n 
+0005409369 00000 n 
+0000022312 00000 n 
+0000022364 00000 n 
+0001538880 00000 n 
+0005409290 00000 n 
+0000022424 00000 n 
+0000022474 00000 n 
+0001539135 00000 n 
+0005409158 00000 n 
+0000022524 00000 n 
+0000022566 00000 n 
+0001542113 00000 n 
+0005409079 00000 n 
+0000022621 00000 n 
+0000022657 00000 n 
+0001542240 00000 n 
+0005408986 00000 n 
+0000022712 00000 n 
+0000022777 00000 n 
+0001544816 00000 n 
+0005408893 00000 n 
+0000022832 00000 n 
+0000022865 00000 n 
+0001544943 00000 n 
+0005408774 00000 n 
+0000022920 00000 n 
+0000022954 00000 n 
+0001552334 00000 n 
+0005408695 00000 n 
+0000023014 00000 n 
+0000023065 00000 n 
+0001552461 00000 n 
+0005408602 00000 n 
+0000023125 00000 n 
+0000023206 00000 n 
+0001554927 00000 n 
+0005408509 00000 n 
+0000023266 00000 n 
+0000023317 00000 n 
+0001557692 00000 n 
+0005408416 00000 n 
+0000023377 00000 n 
+0000023434 00000 n 
+0001561204 00000 n 
+0005408323 00000 n 
+0000023494 00000 n 
+0000023540 00000 n 
+0001565260 00000 n 
+0005408230 00000 n 
+0000023600 00000 n 
+0000023659 00000 n 
+0001565387 00000 n 
+0005408137 00000 n 
+0000023719 00000 n 
+0000023776 00000 n 
+0001575771 00000 n 
+0005408044 00000 n 
+0000023836 00000 n 
+0000023909 00000 n 
+0001577702 00000 n 
+0005407951 00000 n 
+0000023969 00000 n 
+0000024040 00000 n 
+0001579958 00000 n 
+0005407858 00000 n 
+0000024101 00000 n 
+0000024155 00000 n 
+0001580085 00000 n 
+0005407779 00000 n 
+0000024216 00000 n 
+0000024296 00000 n 
+0001581532 00000 n 
+0005407661 00000 n 
+0000024346 00000 n 
+0000024384 00000 n 
+0001581659 00000 n 
+0005407582 00000 n 
+0000024439 00000 n 
+0000024484 00000 n 
+0001581786 00000 n 
+0005407503 00000 n 
+0000024539 00000 n 
+0000024595 00000 n 
+0001589689 00000 n 
+0005407371 00000 n 
+0000024643 00000 n 
+0000024708 00000 n 
+0001660451 00000 n 
+0005407292 00000 n 
+0000024758 00000 n 
+0000024804 00000 n 
+0001769042 00000 n 
+0005407160 00000 n 
+0000024854 00000 n 
+0000024889 00000 n 
+0001771687 00000 n 
+0005407081 00000 n 
+0000024944 00000 n 
+0000025007 00000 n 
+0001774555 00000 n 
+0005406988 00000 n 
+0000025062 00000 n 
+0000025156 00000 n 
+0001780218 00000 n 
+0005406856 00000 n 
+0000025211 00000 n 
+0000025274 00000 n 
+0001780473 00000 n 
+0005406791 00000 n 
+0000025334 00000 n 
+0000025410 00000 n 
+0001783327 00000 n 
+0005406698 00000 n 
+0000025465 00000 n 
+0000025539 00000 n 
+0001786204 00000 n 
+0005406619 00000 n 
+0000025594 00000 n 
+0000025642 00000 n 
+0001788449 00000 n 
+0005406487 00000 n 
+0000025692 00000 n 
+0000025738 00000 n 
+0001788576 00000 n 
+0005406408 00000 n 
+0000025793 00000 n 
+0000025852 00000 n 
+0001791561 00000 n 
+0005406329 00000 n 
+0000025907 00000 n 
+0000025967 00000 n 
+0001794126 00000 n 
+0005406211 00000 n 
+0000026017 00000 n 
+0000026055 00000 n 
+0001794253 00000 n 
+0005406132 00000 n 
+0000026110 00000 n 
+0000026156 00000 n 
+0001794380 00000 n 
+0005406053 00000 n 
+0000026211 00000 n 
+0000026294 00000 n 
+0001798739 00000 n 
+0005405918 00000 n 
+0000026342 00000 n 
+0000026417 00000 n 
+0001801484 00000 n 
+0005405839 00000 n 
+0000026467 00000 n 
+0000026500 00000 n 
+0001801611 00000 n 
+0005405746 00000 n 
+0000026550 00000 n 
+0000026607 00000 n 
+0001804427 00000 n 
+0005405610 00000 n 
+0000026657 00000 n 
+0000026716 00000 n 
+0001804554 00000 n 
+0005405486 00000 n 
+0000026772 00000 n 
+0000026847 00000 n 
+0001806417 00000 n 
+0005405402 00000 n 
+0000026908 00000 n 
+0000026968 00000 n 
+0001809996 00000 n 
+0005405303 00000 n 
+0000027029 00000 n 
+0000027096 00000 n 
+0001814023 00000 n 
+0005405204 00000 n 
+0000027157 00000 n 
+0000027211 00000 n 
+0001814151 00000 n 
+0005405120 00000 n 
+0000027272 00000 n 
+0000027323 00000 n 
+0001816352 00000 n 
+0005405022 00000 n 
+0000027379 00000 n 
+0000027437 00000 n 
+0001821427 00000 n 
+0005404898 00000 n 
+0000027493 00000 n 
+0000027541 00000 n 
+0001823567 00000 n 
+0005404829 00000 n 
+0000027602 00000 n 
+0000027690 00000 n 
+0001828039 00000 n 
+0005404691 00000 n 
+0000027741 00000 n 
+0000027799 00000 n 
+0001829856 00000 n 
+0005404607 00000 n 
+0000027855 00000 n 
+0000027903 00000 n 
+0001829984 00000 n 
+0005404508 00000 n 
+0000027959 00000 n 
+0000028012 00000 n 
+0001831962 00000 n 
+0005404409 00000 n 
+0000028068 00000 n 
+0000028118 00000 n 
+0001832090 00000 n 
+0005404325 00000 n 
+0000028174 00000 n 
+0000028214 00000 n 
+0001834369 00000 n 
+0005404227 00000 n 
+0000028265 00000 n 
+0000028331 00000 n 
+0001838957 00000 n 
+0005404088 00000 n 
+0000028382 00000 n 
+0000028436 00000 n 
+0001840697 00000 n 
+0005404004 00000 n 
+0000028492 00000 n 
+0000028542 00000 n 
+0001844784 00000 n 
+0005403920 00000 n 
+0000028598 00000 n 
+0000028644 00000 n 
+0001849864 00000 n 
+0005403822 00000 n 
+0000028695 00000 n 
+0000028759 00000 n 
+0001851827 00000 n 
+0005403683 00000 n 
+0000028810 00000 n 
+0000028852 00000 n 
+0001854039 00000 n 
+0005403599 00000 n 
+0000028908 00000 n 
+0000028974 00000 n 
+0001856377 00000 n 
+0005403500 00000 n 
+0000029030 00000 n 
+0000029090 00000 n 
+0001856505 00000 n 
+0005403360 00000 n 
+0000029146 00000 n 
+0000029210 00000 n 
+0001859317 00000 n 
+0005403276 00000 n 
+0000029271 00000 n 
+0000029316 00000 n 
+0001864811 00000 n 
+0005403177 00000 n 
+0000029377 00000 n 
+0000029435 00000 n 
+0001869331 00000 n 
+0005403078 00000 n 
+0000029496 00000 n 
+0000029545 00000 n 
+0001869459 00000 n 
+0005402994 00000 n 
+0000029606 00000 n 
+0000029673 00000 n 
+0001869587 00000 n 
+0005402910 00000 n 
+0000029729 00000 n 
+0000029774 00000 n 
+0001875419 00000 n 
+0005402812 00000 n 
+0000029825 00000 n 
+0000029873 00000 n 
+0001875547 00000 n 
+0005402714 00000 n 
+0000029925 00000 n 
+0000029985 00000 n 
+0001875675 00000 n 
+0005402616 00000 n 
+0000030037 00000 n 
+0000030080 00000 n 
+0001877598 00000 n 
+0005402518 00000 n 
+0000030132 00000 n 
+0000030187 00000 n 
+0001877726 00000 n 
+0005402379 00000 n 
+0000030239 00000 n 
+0000030297 00000 n 
+0001879419 00000 n 
+0005402295 00000 n 
+0000030354 00000 n 
+0000030419 00000 n 
+0001879547 00000 n 
+0005402211 00000 n 
+0000030476 00000 n 
+0000030543 00000 n 
+0001879675 00000 n 
+0005402128 00000 n 
+0000030595 00000 n 
+0000030652 00000 n 
+0001883336 00000 n 
+0005401990 00000 n 
+0000030701 00000 n 
+0000030759 00000 n 
+0001886097 00000 n 
+0005401865 00000 n 
+0000030810 00000 n 
+0000030875 00000 n 
+0001886223 00000 n 
+0005401781 00000 n 
+0000030931 00000 n 
+0000030982 00000 n 
+0001886351 00000 n 
+0005401682 00000 n 
+0000031038 00000 n 
+0000031110 00000 n 
+0001897229 00000 n 
+0005401583 00000 n 
+0000031166 00000 n 
+0000031219 00000 n 
+0001897357 00000 n 
+0005401499 00000 n 
+0000031275 00000 n 
+0000031327 00000 n 
+0001900517 00000 n 
+0005401374 00000 n 
+0000031378 00000 n 
+0000031435 00000 n 
+0001900645 00000 n 
+0005401249 00000 n 
+0000031491 00000 n 
+0000031538 00000 n 
+0001900773 00000 n 
+0005401165 00000 n 
+0000031599 00000 n 
+0000031673 00000 n 
+0001906277 00000 n 
+0005401081 00000 n 
+0000031734 00000 n 
+0000031775 00000 n 
+0001910127 00000 n 
+0005400982 00000 n 
+0000031831 00000 n 
+0000031884 00000 n 
+0001917474 00000 n 
+0005400883 00000 n 
+0000031940 00000 n 
+0000032003 00000 n 
+0001931061 00000 n 
+0005400758 00000 n 
+0000032059 00000 n 
+0000032153 00000 n 
+0001934466 00000 n 
+0005400674 00000 n 
+0000032214 00000 n 
+0000032297 00000 n 
+0001934594 00000 n 
+0005400590 00000 n 
+0000032358 00000 n 
+0000032423 00000 n 
+0001936610 00000 n 
+0005400451 00000 n 
+0000032472 00000 n 
+0000032530 00000 n 
+0001939435 00000 n 
+0005400326 00000 n 
+0000032581 00000 n 
+0000032637 00000 n 
+0001942412 00000 n 
+0005400242 00000 n 
+0000032693 00000 n 
+0000032757 00000 n 
+0001947345 00000 n 
+0005400143 00000 n 
+0000032813 00000 n 
+0000032866 00000 n 
+0001949150 00000 n 
+0005400059 00000 n 
+0000032922 00000 n 
+0000033004 00000 n 
+0001951354 00000 n 
+0005399960 00000 n 
+0000033055 00000 n 
+0000033109 00000 n 
+0001953319 00000 n 
+0005399835 00000 n 
+0000033160 00000 n 
+0000033199 00000 n 
+0001953447 00000 n 
+0005399766 00000 n 
+0000033255 00000 n 
+0000033352 00000 n 
+0001957709 00000 n 
+0005399627 00000 n 
+0000033401 00000 n 
+0000033475 00000 n 
+0001960326 00000 n 
+0005399543 00000 n 
+0000033526 00000 n 
+0000033573 00000 n 
+0001962924 00000 n 
+0005399403 00000 n 
+0000033624 00000 n 
+0000033677 00000 n 
+0001963052 00000 n 
+0005399319 00000 n 
+0000033733 00000 n 
+0000033810 00000 n 
+0001967996 00000 n 
+0005399220 00000 n 
+0000033866 00000 n 
+0000033914 00000 n 
+0001970528 00000 n 
+0005399095 00000 n 
+0000033970 00000 n 
+0000034031 00000 n 
+0002034370 00000 n 
+0005399026 00000 n 
+0000034092 00000 n 
+0000034168 00000 n 
+0002039538 00000 n 
+0005398886 00000 n 
+0000034219 00000 n 
+0000034277 00000 n 
+0002039666 00000 n 
+0005398802 00000 n 
+0000034333 00000 n 
+0000034391 00000 n 
+0002039794 00000 n 
+0005398703 00000 n 
+0000034447 00000 n 
+0000034520 00000 n 
+0002039922 00000 n 
+0005398619 00000 n 
+0000034576 00000 n 
+0000034626 00000 n 
+0002042761 00000 n 
+0005398479 00000 n 
+0000034677 00000 n 
+0000034728 00000 n 
+0002048285 00000 n 
+0005398369 00000 n 
+0000034784 00000 n 
+0000034840 00000 n 
+0002048413 00000 n 
+0005398285 00000 n 
+0000034901 00000 n 
+0000034961 00000 n 
+0002048669 00000 n 
+0005398201 00000 n 
+0000035022 00000 n 
+0000035067 00000 n 
+0002054129 00000 n 
+0005398061 00000 n 
+0000035118 00000 n 
+0000035201 00000 n 
+0002054257 00000 n 
+0005397977 00000 n 
+0000035257 00000 n 
+0000035336 00000 n 
+0002054385 00000 n 
+0005397878 00000 n 
+0000035392 00000 n 
+0000035458 00000 n 
+0002057014 00000 n 
+0005397779 00000 n 
+0000035514 00000 n 
+0000035564 00000 n 
+0002057142 00000 n 
+0005397639 00000 n 
+0000035620 00000 n 
+0000035685 00000 n 
+0002060062 00000 n 
+0005397555 00000 n 
+0000035746 00000 n 
+0000035792 00000 n 
+0002060190 00000 n 
+0005397471 00000 n 
+0000035853 00000 n 
+0000035904 00000 n 
+0002063040 00000 n 
+0005397372 00000 n 
+0000035960 00000 n 
+0000036027 00000 n 
+0002066529 00000 n 
+0005397273 00000 n 
+0000036083 00000 n 
+0000036173 00000 n 
+0002071097 00000 n 
+0005397174 00000 n 
+0000036229 00000 n 
+0000036315 00000 n 
+0002071225 00000 n 
+0005397049 00000 n 
+0000036371 00000 n 
+0000036446 00000 n 
+0002073629 00000 n 
+0005396965 00000 n 
+0000036507 00000 n 
+0000036560 00000 n 
+0002075906 00000 n 
+0005396866 00000 n 
+0000036621 00000 n 
+0000036698 00000 n 
+0002078019 00000 n 
+0005396782 00000 n 
+0000036759 00000 n 
+0000036841 00000 n 
+0002078147 00000 n 
+0005396657 00000 n 
+0000036892 00000 n 
+0000036931 00000 n 
+0002078275 00000 n 
+0005396573 00000 n 
+0000036987 00000 n 
+0000037051 00000 n 
+0002082745 00000 n 
+0005396474 00000 n 
+0000037107 00000 n 
+0000037183 00000 n 
+0002082873 00000 n 
+0005396390 00000 n 
+0000037239 00000 n 
+0000037307 00000 n 
+0002090867 00000 n 
+0005396251 00000 n 
+0000037356 00000 n 
+0000037411 00000 n 
+0002090995 00000 n 
+0005396167 00000 n 
+0000037462 00000 n 
+0000037509 00000 n 
+0002093825 00000 n 
+0005396027 00000 n 
+0000037560 00000 n 
+0000037596 00000 n 
+0002096471 00000 n 
+0005395917 00000 n 
+0000037652 00000 n 
+0000037710 00000 n 
+0002103958 00000 n 
+0005395833 00000 n 
+0000037771 00000 n 
+0000037828 00000 n 
+0002104086 00000 n 
+0005395734 00000 n 
+0000037889 00000 n 
+0000037952 00000 n 
+0002104214 00000 n 
+0005395635 00000 n 
+0000038013 00000 n 
+0000038076 00000 n 
+0002106702 00000 n 
+0005395536 00000 n 
+0000038137 00000 n 
+0000038198 00000 n 
+0002106830 00000 n 
+0005395437 00000 n 
+0000038259 00000 n 
+0000038308 00000 n 
+0002106958 00000 n 
+0005395338 00000 n 
+0000038369 00000 n 
+0000038414 00000 n 
+0002109535 00000 n 
+0005395239 00000 n 
+0000038475 00000 n 
+0000038525 00000 n 
+0002109663 00000 n 
+0005395140 00000 n 
+0000038586 00000 n 
+0000038649 00000 n 
+0002109791 00000 n 
+0005395056 00000 n 
+0000038710 00000 n 
+0000038775 00000 n 
+0002112537 00000 n 
+0005394916 00000 n 
+0000038826 00000 n 
+0000038873 00000 n 
+0002115183 00000 n 
+0005394806 00000 n 
+0000038929 00000 n 
+0000038978 00000 n 
+0002115310 00000 n 
+0005394722 00000 n 
+0000039039 00000 n 
+0000039086 00000 n 
+0002118832 00000 n 
+0005394638 00000 n 
+0000039147 00000 n 
+0000039201 00000 n 
+0002123605 00000 n 
+0005394498 00000 n 
+0000039252 00000 n 
+0000039317 00000 n 
+0002129623 00000 n 
+0005394414 00000 n 
+0000039373 00000 n 
+0000039428 00000 n 
+0002131271 00000 n 
+0005394330 00000 n 
+0000039484 00000 n 
+0000039534 00000 n 
+0002133800 00000 n 
+0005394231 00000 n 
+0000039585 00000 n 
+0000039637 00000 n 
+0002133928 00000 n 
+0005394091 00000 n 
+0000039688 00000 n 
+0000039727 00000 n 
+0002136862 00000 n 
+0005394007 00000 n 
+0000039783 00000 n 
+0000039837 00000 n 
+0002136990 00000 n 
+0005393908 00000 n 
+0000039893 00000 n 
+0000039969 00000 n 
+0002137118 00000 n 
+0005393824 00000 n 
+0000040025 00000 n 
+0000040104 00000 n 
+0002139765 00000 n 
+0005393740 00000 n 
+0000040155 00000 n 
+0000040199 00000 n 
+0002142220 00000 n 
+0005393601 00000 n 
+0000040248 00000 n 
+0000040294 00000 n 
+0002142348 00000 n 
+0005393517 00000 n 
+0000040345 00000 n 
+0000040383 00000 n 
+0002142476 00000 n 
+0005393418 00000 n 
+0000040434 00000 n 
+0000040481 00000 n 
+0002145863 00000 n 
+0005393278 00000 n 
+0000040532 00000 n 
+0000040612 00000 n 
+0002145990 00000 n 
+0005393194 00000 n 
+0000040668 00000 n 
+0000040723 00000 n 
+0002149441 00000 n 
+0005393095 00000 n 
+0000040779 00000 n 
+0000040828 00000 n 
+0002149697 00000 n 
+0005392996 00000 n 
+0000040884 00000 n 
+0000040938 00000 n 
+0002152500 00000 n 
+0005392897 00000 n 
+0000040994 00000 n 
+0000041038 00000 n 
+0002152628 00000 n 
+0005392798 00000 n 
+0000041094 00000 n 
+0000041155 00000 n 
+0002155295 00000 n 
+0005392714 00000 n 
+0000041211 00000 n 
+0000041254 00000 n 
+0002158150 00000 n 
+0005392615 00000 n 
+0000041305 00000 n 
+0000041346 00000 n 
+0002158278 00000 n 
+0005392490 00000 n 
+0000041397 00000 n 
+0000041436 00000 n 
+0002158406 00000 n 
+0005392406 00000 n 
+0000041492 00000 n 
+0000041573 00000 n 
+0002158534 00000 n 
+0005392322 00000 n 
+0000041629 00000 n 
+0000041708 00000 n 
+0002163206 00000 n 
+0005392183 00000 n 
+0000041757 00000 n 
+0000041820 00000 n 
+0002165848 00000 n 
+0005392099 00000 n 
+0000041871 00000 n 
+0000041918 00000 n 
+0002165976 00000 n 
+0005392000 00000 n 
+0000041969 00000 n 
+0000042024 00000 n 
+0002168722 00000 n 
+0005391860 00000 n 
+0000042075 00000 n 
+0000042143 00000 n 
+0002168849 00000 n 
+0005391776 00000 n 
+0000042199 00000 n 
+0000042255 00000 n 
+0002207101 00000 n 
+0005391677 00000 n 
+0000042311 00000 n 
+0000042369 00000 n 
+0002207229 00000 n 
+0005391593 00000 n 
+0000042425 00000 n 
+0000042481 00000 n 
+0002209493 00000 n 
+0005391453 00000 n 
+0000042532 00000 n 
+0000042598 00000 n 
+0002212145 00000 n 
+0005391369 00000 n 
+0000042654 00000 n 
+0000042709 00000 n 
+0002214698 00000 n 
+0005391285 00000 n 
+0000042765 00000 n 
+0000042821 00000 n 
+0002217531 00000 n 
+0005391186 00000 n 
+0000042872 00000 n 
+0000042939 00000 n 
+0002217659 00000 n 
+0005391061 00000 n 
+0000042990 00000 n 
+0000043029 00000 n 
+0002217787 00000 n 
+0005390977 00000 n 
+0000043085 00000 n 
+0000043145 00000 n 
+0002219973 00000 n 
+0005390893 00000 n 
+0000043201 00000 n 
+0000043291 00000 n 
+0002223877 00000 n 
+0005390754 00000 n 
+0000043340 00000 n 
+0000043420 00000 n 
+0002224005 00000 n 
+0005390670 00000 n 
+0000043471 00000 n 
+0000043518 00000 n 
+0002227412 00000 n 
+0005390545 00000 n 
+0000043569 00000 n 
+0000043608 00000 n 
+0002229854 00000 n 
+0005390476 00000 n 
+0000043664 00000 n 
+0000043724 00000 n 
+0002232704 00000 n 
+0005390336 00000 n 
+0000043773 00000 n 
+0000043831 00000 n 
+0002232832 00000 n 
+0005390252 00000 n 
+0000043882 00000 n 
+0000043929 00000 n 
+0002235491 00000 n 
+0005390112 00000 n 
+0000043980 00000 n 
+0000044028 00000 n 
+0002237871 00000 n 
+0005390028 00000 n 
+0000044084 00000 n 
+0000044148 00000 n 
+0002238446 00000 n 
+0005389944 00000 n 
+0000044204 00000 n 
+0000044273 00000 n 
+0002241900 00000 n 
+0005389804 00000 n 
+0000044324 00000 n 
+0000044376 00000 n 
+0002244853 00000 n 
+0005389720 00000 n 
+0000044432 00000 n 
+0000044497 00000 n 
+0002246789 00000 n 
+0005389636 00000 n 
+0000044553 00000 n 
+0000044611 00000 n 
+0002254363 00000 n 
+0005389496 00000 n 
+0000044662 00000 n 
+0000044719 00000 n 
+0002254491 00000 n 
+0005389386 00000 n 
+0000044775 00000 n 
+0000044832 00000 n 
+0002260516 00000 n 
+0005389302 00000 n 
+0000044893 00000 n 
+0000044943 00000 n 
+0002267595 00000 n 
+0005389203 00000 n 
+0000045004 00000 n 
+0000045056 00000 n 
+0002272947 00000 n 
+0005389104 00000 n 
+0000045117 00000 n 
+0000045182 00000 n 
+0002275735 00000 n 
+0005389005 00000 n 
+0000045243 00000 n 
+0000045287 00000 n 
+0002279352 00000 n 
+0005388906 00000 n 
+0000045348 00000 n 
+0000045415 00000 n 
+0002279479 00000 n 
+0005388822 00000 n 
+0000045476 00000 n 
+0000045527 00000 n 
+0002286381 00000 n 
+0005388682 00000 n 
+0000045578 00000 n 
+0000045641 00000 n 
+0002292416 00000 n 
+0005388598 00000 n 
+0000045697 00000 n 
+0000045770 00000 n 
+0002292544 00000 n 
+0005388499 00000 n 
+0000045826 00000 n 
+0000045889 00000 n 
+0002295652 00000 n 
+0005388400 00000 n 
+0000045945 00000 n 
+0000046003 00000 n 
+0002295780 00000 n 
+0005388301 00000 n 
+0000046059 00000 n 
+0000046116 00000 n 
+0002305378 00000 n 
+0005388217 00000 n 
+0000046172 00000 n 
+0000046231 00000 n 
+0002308506 00000 n 
+0005388077 00000 n 
+0000046282 00000 n 
+0000046343 00000 n 
+0002308634 00000 n 
+0005387993 00000 n 
+0000046399 00000 n 
+0000046465 00000 n 
+0002311742 00000 n 
+0005387868 00000 n 
+0000046521 00000 n 
+0000046589 00000 n 
+0002315288 00000 n 
+0005387784 00000 n 
+0000046650 00000 n 
+0000046704 00000 n 
+0002319688 00000 n 
+0005387685 00000 n 
+0000046765 00000 n 
+0000046856 00000 n 
+0002322411 00000 n 
+0005387586 00000 n 
+0000046917 00000 n 
+0000046987 00000 n 
+0002324508 00000 n 
+0005387487 00000 n 
+0000047048 00000 n 
+0000047118 00000 n 
+0002328240 00000 n 
+0005387388 00000 n 
+0000047179 00000 n 
+0000047241 00000 n 
+0002330314 00000 n 
+0005387289 00000 n 
+0000047302 00000 n 
+0000047361 00000 n 
+0002333095 00000 n 
+0005387190 00000 n 
+0000047422 00000 n 
+0000047486 00000 n 
+0002335311 00000 n 
+0005387091 00000 n 
+0000047547 00000 n 
+0000047609 00000 n 
+0002337350 00000 n 
+0005387007 00000 n 
+0000047670 00000 n 
+0000047732 00000 n 
+0002339859 00000 n 
+0005386867 00000 n 
+0000047783 00000 n 
+0000047845 00000 n 
+0002339987 00000 n 
+0005386783 00000 n 
+0000047901 00000 n 
+0000047961 00000 n 
+0002343194 00000 n 
+0005386684 00000 n 
+0000048017 00000 n 
+0000048081 00000 n 
+0002349559 00000 n 
+0005386585 00000 n 
+0000048137 00000 n 
+0000048202 00000 n 
+0002352439 00000 n 
+0005386501 00000 n 
+0000048258 00000 n 
+0000048350 00000 n 
+0002355189 00000 n 
+0005386361 00000 n 
+0000048401 00000 n 
+0000048440 00000 n 
+0002355317 00000 n 
+0005386277 00000 n 
+0000048496 00000 n 
+0000048572 00000 n 
+0002362440 00000 n 
+0005386178 00000 n 
+0000048628 00000 n 
+0000048692 00000 n 
+0002365399 00000 n 
+0005386079 00000 n 
+0000048748 00000 n 
+0000048819 00000 n 
+0002370687 00000 n 
+0005385980 00000 n 
+0000048875 00000 n 
+0000048959 00000 n 
+0002373236 00000 n 
+0005385881 00000 n 
+0000049015 00000 n 
+0000049081 00000 n 
+0002377831 00000 n 
+0005385782 00000 n 
+0000049137 00000 n 
+0000049188 00000 n 
+0002381224 00000 n 
+0005385698 00000 n 
+0000049244 00000 n 
+0000049318 00000 n 
+0002381352 00000 n 
+0005385558 00000 n 
+0000049369 00000 n 
+0000049415 00000 n 
+0002381480 00000 n 
+0005385474 00000 n 
+0000049471 00000 n 
+0000049516 00000 n 
+0002383858 00000 n 
+0005385375 00000 n 
+0000049572 00000 n 
+0000049632 00000 n 
+0002383986 00000 n 
+0005385276 00000 n 
+0000049688 00000 n 
+0000049735 00000 n 
+0002384114 00000 n 
+0005385192 00000 n 
+0000049791 00000 n 
+0000049842 00000 n 
+0002387233 00000 n 
+0005385093 00000 n 
+0000049894 00000 n 
+0000049969 00000 n 
+0002392284 00000 n 
+0005384994 00000 n 
+0000050021 00000 n 
+0000050070 00000 n 
+0002395344 00000 n 
+0005384895 00000 n 
+0000050122 00000 n 
+0000050189 00000 n 
+0002398767 00000 n 
+0005384796 00000 n 
+0000050241 00000 n 
+0000050326 00000 n 
+0002398894 00000 n 
+0005384671 00000 n 
+0000050378 00000 n 
+0000050418 00000 n 
+0002399022 00000 n 
+0005384587 00000 n 
+0000050475 00000 n 
+0000050551 00000 n 
+0002399150 00000 n 
+0005384503 00000 n 
+0000050608 00000 n 
+0000050709 00000 n 
+0002403199 00000 n 
+0005384363 00000 n 
+0000050758 00000 n 
+0000050811 00000 n 
+0002403326 00000 n 
+0005384238 00000 n 
+0000050862 00000 n 
+0000050900 00000 n 
+0002403453 00000 n 
+0005384154 00000 n 
+0000050956 00000 n 
+0000051005 00000 n 
+0002403581 00000 n 
+0005384070 00000 n 
+0000051061 00000 n 
+0000051097 00000 n 
+0002407051 00000 n 
+0005383930 00000 n 
+0000051148 00000 n 
+0000051206 00000 n 
+0002407179 00000 n 
+0005383846 00000 n 
+0000051262 00000 n 
+0000051318 00000 n 
+0002409991 00000 n 
+0005383747 00000 n 
+0000051374 00000 n 
+0000051435 00000 n 
+0002414830 00000 n 
+0005383663 00000 n 
+0000051491 00000 n 
+0000051554 00000 n 
+0002420675 00000 n 
+0005383523 00000 n 
+0000051605 00000 n 
+0000051653 00000 n 
+0002423452 00000 n 
+0005383439 00000 n 
+0000051709 00000 n 
+0000051783 00000 n 
+0002423580 00000 n 
+0005383340 00000 n 
+0000051839 00000 n 
+0000051919 00000 n 
+0002426638 00000 n 
+0005383241 00000 n 
+0000051975 00000 n 
+0000052041 00000 n 
+0002426766 00000 n 
+0005383142 00000 n 
+0000052097 00000 n 
+0000052188 00000 n 
+0002431917 00000 n 
+0005383058 00000 n 
+0000052244 00000 n 
+0000052293 00000 n 
+0002432045 00000 n 
+0005382918 00000 n 
+0000052344 00000 n 
+0000052431 00000 n 
+0002434560 00000 n 
+0005382834 00000 n 
+0000052487 00000 n 
+0000052549 00000 n 
+0002437495 00000 n 
+0005382735 00000 n 
+0000052605 00000 n 
+0000052662 00000 n 
+0002437623 00000 n 
+0005382636 00000 n 
+0000052718 00000 n 
+0000052786 00000 n 
+0002478636 00000 n 
+0005382537 00000 n 
+0000052842 00000 n 
+0000052896 00000 n 
+0002496768 00000 n 
+0005382438 00000 n 
+0000052952 00000 n 
+0000053037 00000 n 
+0002499574 00000 n 
+0005382339 00000 n 
+0000053093 00000 n 
+0000053173 00000 n 
+0002501734 00000 n 
+0005382240 00000 n 
+0000053229 00000 n 
+0000053292 00000 n 
+0002504354 00000 n 
+0005382156 00000 n 
+0000053348 00000 n 
+0000053423 00000 n 
+0002507481 00000 n 
+0005382015 00000 n 
+0000053474 00000 n 
+0000053531 00000 n 
+0002510294 00000 n 
+0005381931 00000 n 
+0000053587 00000 n 
+0000053642 00000 n 
+0002512797 00000 n 
+0005381832 00000 n 
+0000053698 00000 n 
+0000053752 00000 n 
+0002514935 00000 n 
+0005381692 00000 n 
+0000053808 00000 n 
+0000053854 00000 n 
+0002515063 00000 n 
+0005381623 00000 n 
+0000053915 00000 n 
+0000053964 00000 n 
+0002517418 00000 n 
+0005381524 00000 n 
+0000054020 00000 n 
+0000054058 00000 n 
+0002517546 00000 n 
+0005381425 00000 n 
+0000054114 00000 n 
+0000054148 00000 n 
+0002570562 00000 n 
+0005381326 00000 n 
+0000054204 00000 n 
+0000054242 00000 n 
+0002638443 00000 n 
+0005381227 00000 n 
+0000054298 00000 n 
+0000054353 00000 n 
+0002638571 00000 n 
+0005381128 00000 n 
+0000054409 00000 n 
+0000054465 00000 n 
+0002685913 00000 n 
+0005381029 00000 n 
+0000054521 00000 n 
+0000054562 00000 n 
+0002723625 00000 n 
+0005380930 00000 n 
+0000054619 00000 n 
+0000054679 00000 n 
+0002726154 00000 n 
+0005380831 00000 n 
+0000054736 00000 n 
+0000054785 00000 n 
+0002726282 00000 n 
+0005380732 00000 n 
+0000054842 00000 n 
+0000054881 00000 n 
+0002728866 00000 n 
+0005380633 00000 n 
+0000054938 00000 n 
+0000054983 00000 n 
+0002728994 00000 n 
+0005380534 00000 n 
+0000055040 00000 n 
+0000055102 00000 n 
+0002734004 00000 n 
+0005380435 00000 n 
+0000055159 00000 n 
+0000055247 00000 n 
+0002734132 00000 n 
+0005380336 00000 n 
+0000055304 00000 n 
+0000055384 00000 n 
+0002822116 00000 n 
+0005380237 00000 n 
+0000055441 00000 n 
+0000055499 00000 n 
+0002859305 00000 n 
+0005380138 00000 n 
+0000055556 00000 n 
+0000055613 00000 n 
+0002863176 00000 n 
+0005380054 00000 n 
+0000055670 00000 n 
+0000055730 00000 n 
+0002866591 00000 n 
+0005379914 00000 n 
+0000055781 00000 n 
+0000055842 00000 n 
+0002866719 00000 n 
+0005379830 00000 n 
+0000055898 00000 n 
+0000055968 00000 n 
+0002866847 00000 n 
+0005379731 00000 n 
+0000056024 00000 n 
+0000056082 00000 n 
+0002926487 00000 n 
+0005379647 00000 n 
+0000056138 00000 n 
+0000056196 00000 n 
+0002929676 00000 n 
+0005379507 00000 n 
+0000056247 00000 n 
+0000056338 00000 n 
+0002929804 00000 n 
+0005379423 00000 n 
+0000056394 00000 n 
+0000056471 00000 n 
+0002962809 00000 n 
+0005379339 00000 n 
+0000056527 00000 n 
+0000056605 00000 n 
+0002966034 00000 n 
+0005379199 00000 n 
+0000056656 00000 n 
+0000056704 00000 n 
+0002966162 00000 n 
+0005379115 00000 n 
+0000056760 00000 n 
+0000056820 00000 n 
+0002968834 00000 n 
+0005379031 00000 n 
+0000056876 00000 n 
+0000056939 00000 n 
+0002968962 00000 n 
+0005378891 00000 n 
+0000056990 00000 n 
+0000057064 00000 n 
+0002969090 00000 n 
+0005378807 00000 n 
+0000057120 00000 n 
+0000057210 00000 n 
+0002971802 00000 n 
+0005378708 00000 n 
+0000057266 00000 n 
+0000057330 00000 n 
+0002971928 00000 n 
+0005378609 00000 n 
+0000057386 00000 n 
+0000057440 00000 n 
+0002972056 00000 n 
+0005378525 00000 n 
+0000057496 00000 n 
+0000057586 00000 n 
+0002974963 00000 n 
+0005378384 00000 n 
+0000057638 00000 n 
+0000057701 00000 n 
+0002975091 00000 n 
+0005378300 00000 n 
+0000057758 00000 n 
+0000057818 00000 n 
+0002979211 00000 n 
+0005378201 00000 n 
+0000057875 00000 n 
+0000057940 00000 n 
+0002980871 00000 n 
+0005378102 00000 n 
+0000057997 00000 n 
+0000058075 00000 n 
+0002984432 00000 n 
+0005378003 00000 n 
+0000058132 00000 n 
+0000058195 00000 n 
+0002986659 00000 n 
+0005377904 00000 n 
+0000058252 00000 n 
+0000058313 00000 n 
+0002986787 00000 n 
+0005377805 00000 n 
+0000058370 00000 n 
+0000058453 00000 n 
+0002989833 00000 n 
+0005377706 00000 n 
+0000058510 00000 n 
+0000058563 00000 n 
+0002996708 00000 n 
+0005377607 00000 n 
+0000058620 00000 n 
+0000058699 00000 n 
+0002999421 00000 n 
+0005377508 00000 n 
+0000058756 00000 n 
+0000058814 00000 n 
+0002999549 00000 n 
+0005377409 00000 n 
+0000058872 00000 n 
+0000058936 00000 n 
+0003002986 00000 n 
+0005377310 00000 n 
+0000058994 00000 n 
+0000059048 00000 n 
+0003005679 00000 n 
+0005377211 00000 n 
+0000059106 00000 n 
+0000059189 00000 n 
+0003008326 00000 n 
+0005377112 00000 n 
+0000059247 00000 n 
+0000059304 00000 n 
+0003066155 00000 n 
+0005377013 00000 n 
+0000059362 00000 n 
+0000059412 00000 n 
+0003069189 00000 n 
+0005376914 00000 n 
+0000059470 00000 n 
+0000059544 00000 n 
+0003069317 00000 n 
+0005376830 00000 n 
+0000059602 00000 n 
+0000059690 00000 n 
+0003071801 00000 n 
+0005376690 00000 n 
+0000059742 00000 n 
+0000059828 00000 n 
+0003074551 00000 n 
+0005376606 00000 n 
+0000059885 00000 n 
+0000059947 00000 n 
+0003077323 00000 n 
+0005376507 00000 n 
+0000060004 00000 n 
+0000060069 00000 n 
+0003077451 00000 n 
+0005376408 00000 n 
+0000060126 00000 n 
+0000060201 00000 n 
+0003079417 00000 n 
+0005376309 00000 n 
+0000060258 00000 n 
+0000060338 00000 n 
+0003082292 00000 n 
+0005376210 00000 n 
+0000060395 00000 n 
+0000060462 00000 n 
+0003096793 00000 n 
+0005376126 00000 n 
+0000060519 00000 n 
+0000060573 00000 n 
+0003099576 00000 n 
+0005375986 00000 n 
+0000060625 00000 n 
+0000060676 00000 n 
+0003099704 00000 n 
+0005375902 00000 n 
+0000060733 00000 n 
+0000060784 00000 n 
+0003099832 00000 n 
+0005375803 00000 n 
+0000060841 00000 n 
+0000060883 00000 n 
+0003101817 00000 n 
+0005375704 00000 n 
+0000060940 00000 n 
+0000060987 00000 n 
+0003101945 00000 n 
+0005375620 00000 n 
+0000061044 00000 n 
+0000061088 00000 n 
+0003104150 00000 n 
+0005375480 00000 n 
+0000061140 00000 n 
+0000061208 00000 n 
+0003108030 00000 n 
+0005375355 00000 n 
+0000061265 00000 n 
+0000061329 00000 n 
+0003111528 00000 n 
+0005375271 00000 n 
+0000061391 00000 n 
+0000061446 00000 n 
+0003111656 00000 n 
+0005375172 00000 n 
+0000061508 00000 n 
+0000061576 00000 n 
+0003111784 00000 n 
+0005375073 00000 n 
+0000061638 00000 n 
+0000061692 00000 n 
+0003116175 00000 n 
+0005374974 00000 n 
+0000061754 00000 n 
+0000061831 00000 n 
+0003121684 00000 n 
+0005374875 00000 n 
+0000061893 00000 n 
+0000061954 00000 n 
+0003125232 00000 n 
+0005374776 00000 n 
+0000062016 00000 n 
+0000062073 00000 n 
+0003129100 00000 n 
+0005374677 00000 n 
+0000062135 00000 n 
+0000062244 00000 n 
+0003129228 00000 n 
+0005374593 00000 n 
+0000062306 00000 n 
+0000062369 00000 n 
+0003132982 00000 n 
+0005374509 00000 n 
+0000062426 00000 n 
+0000062510 00000 n 
+0003144342 00000 n 
+0005374369 00000 n 
+0000062562 00000 n 
+0000062614 00000 n 
+0003147060 00000 n 
+0005374285 00000 n 
+0000062671 00000 n 
+0000062717 00000 n 
+0003147188 00000 n 
+0005374186 00000 n 
+0000062774 00000 n 
+0000062835 00000 n 
+0003149541 00000 n 
+0005374087 00000 n 
+0000062892 00000 n 
+0000062974 00000 n 
+0003149669 00000 n 
+0005373988 00000 n 
+0000063031 00000 n 
+0000063087 00000 n 
+0003152105 00000 n 
+0005373889 00000 n 
+0000063144 00000 n 
+0000063194 00000 n 
+0003154604 00000 n 
+0005373790 00000 n 
+0000063251 00000 n 
+0000063299 00000 n 
+0003154732 00000 n 
+0005373706 00000 n 
+0000063356 00000 n 
+0000063407 00000 n 
+0003154860 00000 n 
+0005373607 00000 n 
+0000063459 00000 n 
+0000063505 00000 n 
+0003159810 00000 n 
+0005373467 00000 n 
+0000063557 00000 n 
+0000063632 00000 n 
+0003159937 00000 n 
+0005373383 00000 n 
+0000063689 00000 n 
+0000063755 00000 n 
+0003162452 00000 n 
+0005373284 00000 n 
+0000063812 00000 n 
+0000063854 00000 n 
+0003162580 00000 n 
+0005373200 00000 n 
+0000063911 00000 n 
+0000063960 00000 n 
+0003164838 00000 n 
+0005373101 00000 n 
+0000064012 00000 n 
+0000064086 00000 n 
+0003209305 00000 n 
+0005373002 00000 n 
+0000064138 00000 n 
+0000064191 00000 n 
+0003209561 00000 n 
+0005372861 00000 n 
+0000064243 00000 n 
+0000064283 00000 n 
+0003209689 00000 n 
+0005372777 00000 n 
+0000064340 00000 n 
+0000064410 00000 n 
+0003212417 00000 n 
+0005372678 00000 n 
+0000064467 00000 n 
+0000064562 00000 n 
+0003212545 00000 n 
+0005372579 00000 n 
+0000064619 00000 n 
+0000064699 00000 n 
+0003212673 00000 n 
+0005372480 00000 n 
+0000064756 00000 n 
+0000064806 00000 n 
+0003212800 00000 n 
+0005372381 00000 n 
+0000064863 00000 n 
+0000064929 00000 n 
+0003215737 00000 n 
+0005372282 00000 n 
+0000064986 00000 n 
+0000065069 00000 n 
+0003215866 00000 n 
+0005372183 00000 n 
+0000065126 00000 n 
+0000065214 00000 n 
+0003215995 00000 n 
+0005372084 00000 n 
+0000065271 00000 n 
+0000065344 00000 n 
+0003218462 00000 n 
+0005371985 00000 n 
+0000065401 00000 n 
+0000065486 00000 n 
+0003218593 00000 n 
+0005371886 00000 n 
+0000065544 00000 n 
+0000065624 00000 n 
+0003218724 00000 n 
+0005371787 00000 n 
+0000065682 00000 n 
+0000065751 00000 n 
+0003218855 00000 n 
+0005371688 00000 n 
+0000065809 00000 n 
+0000065896 00000 n 
+0003218986 00000 n 
+0005371589 00000 n 
+0000065954 00000 n 
+0000066028 00000 n 
+0003221426 00000 n 
+0005371490 00000 n 
+0000066086 00000 n 
+0000066126 00000 n 
+0003221557 00000 n 
+0005371391 00000 n 
+0000066184 00000 n 
+0000066273 00000 n 
+0003225828 00000 n 
+0005371292 00000 n 
+0000066331 00000 n 
+0000066419 00000 n 
+0003225959 00000 n 
+0005371193 00000 n 
+0000066477 00000 n 
+0000066560 00000 n 
+0003229186 00000 n 
+0005371094 00000 n 
+0000066618 00000 n 
+0000066708 00000 n 
+0003229317 00000 n 
+0005370995 00000 n 
+0000066766 00000 n 
+0000066843 00000 n 
+0003229448 00000 n 
+0005370911 00000 n 
+0000066901 00000 n 
+0000066991 00000 n 
+0003229579 00000 n 
+0005370827 00000 n 
+0000067043 00000 n 
+0000067109 00000 n 
+0003389264 00000 n 
+0005370688 00000 n 
+0000067158 00000 n 
+0000067211 00000 n 
+0003389394 00000 n 
+0005370604 00000 n 
+0000067262 00000 n 
+0000067309 00000 n 
+0003389525 00000 n 
+0005370505 00000 n 
+0000067360 00000 n 
+0000067396 00000 n 
+0003393970 00000 n 
+0005370365 00000 n 
+0000067447 00000 n 
+0000067489 00000 n 
+0003394101 00000 n 
+0005370281 00000 n 
+0000067545 00000 n 
+0000067578 00000 n 
+0003396312 00000 n 
+0005370182 00000 n 
+0000067634 00000 n 
+0000067678 00000 n 
+0003400907 00000 n 
+0005370042 00000 n 
+0000067734 00000 n 
+0000067775 00000 n 
+0003401169 00000 n 
+0005369973 00000 n 
+0000067836 00000 n 
+0000067891 00000 n 
+0003403885 00000 n 
+0005369874 00000 n 
+0000067947 00000 n 
+0000067988 00000 n 
+0003404016 00000 n 
+0005369775 00000 n 
+0000068044 00000 n 
+0000068079 00000 n 
+0003409450 00000 n 
+0005369676 00000 n 
+0000068135 00000 n 
+0000068171 00000 n 
+0003409581 00000 n 
+0005369551 00000 n 
+0000068227 00000 n 
+0000068269 00000 n 
+0003414012 00000 n 
+0005369482 00000 n 
+0000068330 00000 n 
+0000068377 00000 n 
+0003426417 00000 n 
+0005369357 00000 n 
+0000068428 00000 n 
+0000068485 00000 n 
+0003426548 00000 n 
+0005369273 00000 n 
+0000068541 00000 n 
+0000068579 00000 n 
+0003426678 00000 n 
+0005369174 00000 n 
+0000068635 00000 n 
+0000068668 00000 n 
+0003428358 00000 n 
+0005369090 00000 n 
+0000068724 00000 n 
+0000068764 00000 n 
+0003432972 00000 n 
+0005368951 00000 n 
+0000068813 00000 n 
+0000068876 00000 n 
+0003433102 00000 n 
+0005368867 00000 n 
+0000068927 00000 n 
+0000068974 00000 n 
+0003445324 00000 n 
+0005368768 00000 n 
+0000069025 00000 n 
+0000069063 00000 n 
+0003445455 00000 n 
+0005368628 00000 n 
+0000069114 00000 n 
+0000069161 00000 n 
+0003448073 00000 n 
+0005368544 00000 n 
+0000069217 00000 n 
+0000069256 00000 n 
+0003448204 00000 n 
+0005368460 00000 n 
+0000069312 00000 n 
+0000069364 00000 n 
+0003450821 00000 n 
+0005368320 00000 n 
+0000069415 00000 n 
+0000069458 00000 n 
+0003450952 00000 n 
+0005368236 00000 n 
+0000069514 00000 n 
+0000069574 00000 n 
+0003453420 00000 n 
+0005368137 00000 n 
+0000069630 00000 n 
+0000069693 00000 n 
+0003453551 00000 n 
+0005368038 00000 n 
+0000069749 00000 n 
+0000069796 00000 n 
+0003456424 00000 n 
+0005367939 00000 n 
+0000069852 00000 n 
+0000069912 00000 n 
+0003459372 00000 n 
+0005367840 00000 n 
+0000069968 00000 n 
+0000070024 00000 n 
+0003459502 00000 n 
+0005367756 00000 n 
+0000070080 00000 n 
+0000070122 00000 n 
+0003462328 00000 n 
+0005367616 00000 n 
+0000070173 00000 n 
+0000070229 00000 n 
+0003462459 00000 n 
+0005367532 00000 n 
+0000070285 00000 n 
+0000070325 00000 n 
+0003462590 00000 n 
+0005367433 00000 n 
+0000070381 00000 n 
+0000070421 00000 n 
+0003465565 00000 n 
+0005367308 00000 n 
+0000070477 00000 n 
+0000070523 00000 n 
+0003465696 00000 n 
+0005367224 00000 n 
+0000070584 00000 n 
+0000070684 00000 n 
+0003471117 00000 n 
+0005367125 00000 n 
+0000070745 00000 n 
+0000070793 00000 n 
+0003475176 00000 n 
+0005367026 00000 n 
+0000070854 00000 n 
+0000070902 00000 n 
+0003476356 00000 n 
+0005366927 00000 n 
+0000070963 00000 n 
+0000071032 00000 n 
+0003478282 00000 n 
+0005366828 00000 n 
+0000071093 00000 n 
+0000071163 00000 n 
+0003481981 00000 n 
+0005366729 00000 n 
+0000071224 00000 n 
+0000071284 00000 n 
+0003488430 00000 n 
+0005366645 00000 n 
+0000071345 00000 n 
+0000071400 00000 n 
+0003495169 00000 n 
+0005366546 00000 n 
+0000071451 00000 n 
+0000071487 00000 n 
+0003497652 00000 n 
+0005366421 00000 n 
+0000071538 00000 n 
+0000071577 00000 n 
+0003497783 00000 n 
+0005366337 00000 n 
+0000071633 00000 n 
+0000071681 00000 n 
+0003497914 00000 n 
+0005366253 00000 n 
+0000071737 00000 n 
+0000071806 00000 n 
+0003501040 00000 n 
+0005366114 00000 n 
+0000071855 00000 n 
+0000071914 00000 n 
+0003501170 00000 n 
+0005366030 00000 n 
+0000071965 00000 n 
+0000072012 00000 n 
+0003501300 00000 n 
+0005365931 00000 n 
+0000072063 00000 n 
+0000072117 00000 n 
+0003504149 00000 n 
+0005365791 00000 n 
+0000072168 00000 n 
+0000072219 00000 n 
+0003504280 00000 n 
+0005365707 00000 n 
+0000072275 00000 n 
+0000072339 00000 n 
+0003510096 00000 n 
+0005365623 00000 n 
+0000072395 00000 n 
+0000072454 00000 n 
+0003513458 00000 n 
+0005365498 00000 n 
+0000072505 00000 n 
+0000072557 00000 n 
+0003517035 00000 n 
+0005365414 00000 n 
+0000072613 00000 n 
+0000072682 00000 n 
+0003519352 00000 n 
+0005365330 00000 n 
+0000072738 00000 n 
+0000072792 00000 n 
+0003522875 00000 n 
+0005365191 00000 n 
+0000072841 00000 n 
+0000072900 00000 n 
+0003523005 00000 n 
+0005365107 00000 n 
+0000072951 00000 n 
+0000072998 00000 n 
+0003526423 00000 n 
+0005364967 00000 n 
+0000073049 00000 n 
+0000073112 00000 n 
+0003529311 00000 n 
+0005364883 00000 n 
+0000073168 00000 n 
+0000073218 00000 n 
+0003529442 00000 n 
+0005364743 00000 n 
+0000073274 00000 n 
+0000073332 00000 n 
+0003532449 00000 n 
+0005364674 00000 n 
+0000073393 00000 n 
+0000073440 00000 n 
+0003532580 00000 n 
+0005364549 00000 n 
+0000073496 00000 n 
+0000073564 00000 n 
+0003535382 00000 n 
+0005364465 00000 n 
+0000073625 00000 n 
+0000073697 00000 n 
+0003538271 00000 n 
+0005364381 00000 n 
+0000073758 00000 n 
+0000073818 00000 n 
+0003541419 00000 n 
+0005364282 00000 n 
+0000073869 00000 n 
+0000073925 00000 n 
+0003543894 00000 n 
+0005364142 00000 n 
+0000073976 00000 n 
+0000074018 00000 n 
+0003544025 00000 n 
+0005364058 00000 n 
+0000074074 00000 n 
+0000074123 00000 n 
+0003546432 00000 n 
+0005363959 00000 n 
+0000074179 00000 n 
+0000074223 00000 n 
+0003546563 00000 n 
+0005363875 00000 n 
+0000074279 00000 n 
+0000074316 00000 n 
+0003546693 00000 n 
+0005363776 00000 n 
+0000074367 00000 n 
+0000074437 00000 n 
+0003549622 00000 n 
+0005363651 00000 n 
+0000074488 00000 n 
+0000074527 00000 n 
+0003549753 00000 n 
+0005363582 00000 n 
+0000074583 00000 n 
+0000074631 00000 n 
+0003551473 00000 n 
+0005363443 00000 n 
+0000074680 00000 n 
+0000074738 00000 n 
+0003551603 00000 n 
+0005363359 00000 n 
+0000074789 00000 n 
+0000074836 00000 n 
+0003551734 00000 n 
+0005363219 00000 n 
+0000074887 00000 n 
+0000074929 00000 n 
+0003554538 00000 n 
+0005363094 00000 n 
+0000074985 00000 n 
+0000075053 00000 n 
+0003554669 00000 n 
+0005363010 00000 n 
+0000075114 00000 n 
+0000075166 00000 n 
+0003557769 00000 n 
+0005362911 00000 n 
+0000075227 00000 n 
+0000075284 00000 n 
+0003558032 00000 n 
+0005362812 00000 n 
+0000075345 00000 n 
+0000075429 00000 n 
+0003560552 00000 n 
+0005362728 00000 n 
+0000075490 00000 n 
+0000075553 00000 n 
+0003563310 00000 n 
+0005362588 00000 n 
+0000075609 00000 n 
+0000075685 00000 n 
+0003563441 00000 n 
+0005362504 00000 n 
+0000075746 00000 n 
+0000075803 00000 n 
+0003571980 00000 n 
+0005362405 00000 n 
+0000075864 00000 n 
+0000075917 00000 n 
+0003572110 00000 n 
+0005362321 00000 n 
+0000075978 00000 n 
+0000076036 00000 n 
+0003580696 00000 n 
+0005362222 00000 n 
+0000076092 00000 n 
+0000076153 00000 n 
+0003580827 00000 n 
+0005362123 00000 n 
+0000076209 00000 n 
+0000076304 00000 n 
+0003580957 00000 n 
+0005361998 00000 n 
+0000076360 00000 n 
+0000076443 00000 n 
+0003583850 00000 n 
+0005361914 00000 n 
+0000076504 00000 n 
+0000076570 00000 n 
+0003584443 00000 n 
+0005361815 00000 n 
+0000076631 00000 n 
+0000076675 00000 n 
+0003586890 00000 n 
+0005361716 00000 n 
+0000076736 00000 n 
+0000076778 00000 n 
+0003587021 00000 n 
+0005361632 00000 n 
+0000076839 00000 n 
+0000076876 00000 n 
+0003587152 00000 n 
+0005361533 00000 n 
+0000076927 00000 n 
+0000076971 00000 n 
+0003589848 00000 n 
+0005361434 00000 n 
+0000077022 00000 n 
+0000077084 00000 n 
+0003592595 00000 n 
+0005361294 00000 n 
+0000077135 00000 n 
+0000077194 00000 n 
+0003592726 00000 n 
+0005361169 00000 n 
+0000077250 00000 n 
+0000077294 00000 n 
+0003592857 00000 n 
+0005361100 00000 n 
+0000077355 00000 n 
+0000077425 00000 n 
+0003595560 00000 n 
+0005361001 00000 n 
+0000077481 00000 n 
+0000077535 00000 n 
+0003603584 00000 n 
+0005360917 00000 n 
+0000077591 00000 n 
+0000077637 00000 n 
+0003611175 00000 n 
+0005360792 00000 n 
+0000077688 00000 n 
+0000077727 00000 n 
+0003611306 00000 n 
+0005360708 00000 n 
+0000077783 00000 n 
+0000077865 00000 n 
+0003611437 00000 n 
+0005360609 00000 n 
+0000077921 00000 n 
+0000077976 00000 n 
+0003616419 00000 n 
+0005360510 00000 n 
+0000078032 00000 n 
+0000078088 00000 n 
+0003619747 00000 n 
+0005360426 00000 n 
+0000078144 00000 n 
+0000078228 00000 n 
+0003622420 00000 n 
+0005360287 00000 n 
+0000078277 00000 n 
+0000078345 00000 n 
+0003622550 00000 n 
+0005360203 00000 n 
+0000078396 00000 n 
+0000078443 00000 n 
+0003627842 00000 n 
+0005360063 00000 n 
+0000078494 00000 n 
+0000078540 00000 n 
+0003627973 00000 n 
+0005359938 00000 n 
+0000078596 00000 n 
+0000078648 00000 n 
+0003630728 00000 n 
+0005359869 00000 n 
+0000078709 00000 n 
+0000078768 00000 n 
+0003643552 00000 n 
+0005359729 00000 n 
+0000078824 00000 n 
+0000078881 00000 n 
+0003645046 00000 n 
+0005359645 00000 n 
+0000078942 00000 n 
+0000078998 00000 n 
+0003645177 00000 n 
+0005359561 00000 n 
+0000079059 00000 n 
+0000079120 00000 n 
+0003649785 00000 n 
+0005359462 00000 n 
+0000079176 00000 n 
+0000079230 00000 n 
+0003652368 00000 n 
+0005359363 00000 n 
+0000079286 00000 n 
+0000079358 00000 n 
+0003655241 00000 n 
+0005359238 00000 n 
+0000079414 00000 n 
+0000079490 00000 n 
+0003655371 00000 n 
+0005359154 00000 n 
+0000079551 00000 n 
+0000079619 00000 n 
+0003658464 00000 n 
+0005359055 00000 n 
+0000079680 00000 n 
+0000079742 00000 n 
+0003660134 00000 n 
+0005358956 00000 n 
+0000079803 00000 n 
+0000079862 00000 n 
+0003660265 00000 n 
+0005358872 00000 n 
+0000079923 00000 n 
+0000079996 00000 n 
+0003662133 00000 n 
+0005358747 00000 n 
+0000080047 00000 n 
+0000080086 00000 n 
+0003662264 00000 n 
+0005358663 00000 n 
+0000080142 00000 n 
+0000080192 00000 n 
+0003664017 00000 n 
+0005358579 00000 n 
+0000080248 00000 n 
+0000080317 00000 n 
+0003666865 00000 n 
+0005358440 00000 n 
+0000080366 00000 n 
+0000080440 00000 n 
+0003666995 00000 n 
+0005358356 00000 n 
+0000080491 00000 n 
+0000080538 00000 n 
+0003669375 00000 n 
+0005358257 00000 n 
+0000080589 00000 n 
+0000080637 00000 n 
+0003669506 00000 n 
+0005358117 00000 n 
+0000080688 00000 n 
+0000080756 00000 n 
+0003671984 00000 n 
+0005358033 00000 n 
+0000080812 00000 n 
+0000080850 00000 n 
+0003674313 00000 n 
+0005357934 00000 n 
+0000080906 00000 n 
+0000080950 00000 n 
+0003674444 00000 n 
+0005357835 00000 n 
+0000081006 00000 n 
+0000081048 00000 n 
+0003676465 00000 n 
+0005357751 00000 n 
+0000081104 00000 n 
+0000081150 00000 n 
+0003679907 00000 n 
+0005357611 00000 n 
+0000081201 00000 n 
+0000081279 00000 n 
+0003685326 00000 n 
+0005357527 00000 n 
+0000081335 00000 n 
+0000081385 00000 n 
+0003685457 00000 n 
+0005357428 00000 n 
+0000081441 00000 n 
+0000081485 00000 n 
+0003689277 00000 n 
+0005357329 00000 n 
+0000081541 00000 n 
+0000081579 00000 n 
+0003689408 00000 n 
+0005357230 00000 n 
+0000081635 00000 n 
+0000081673 00000 n 
+0003692369 00000 n 
+0005357146 00000 n 
+0000081729 00000 n 
+0000081768 00000 n 
+0003692830 00000 n 
+0005357021 00000 n 
+0000081819 00000 n 
+0000081858 00000 n 
+0003694887 00000 n 
+0005356937 00000 n 
+0000081914 00000 n 
+0000081968 00000 n 
+0003695018 00000 n 
+0005356838 00000 n 
+0000082024 00000 n 
+0000082081 00000 n 
+0003695149 00000 n 
+0005356754 00000 n 
+0000082137 00000 n 
+0000082197 00000 n 
+0003699238 00000 n 
+0005356615 00000 n 
+0000082246 00000 n 
+0000082294 00000 n 
+0003699368 00000 n 
+0005356531 00000 n 
+0000082345 00000 n 
+0000082392 00000 n 
+0003699499 00000 n 
+0005356432 00000 n 
+0000082443 00000 n 
+0000082499 00000 n 
+0003702381 00000 n 
+0005356333 00000 n 
+0000082550 00000 n 
+0000082594 00000 n 
+0003705241 00000 n 
+0005356234 00000 n 
+0000082645 00000 n 
+0000082696 00000 n 
+0003705372 00000 n 
+0005356094 00000 n 
+0000082747 00000 n 
+0000082790 00000 n 
+0003708392 00000 n 
+0005356010 00000 n 
+0000082846 00000 n 
+0000082897 00000 n 
+0003717249 00000 n 
+0005355911 00000 n 
+0000082953 00000 n 
+0000083007 00000 n 
+0003720658 00000 n 
+0005355827 00000 n 
+0000083063 00000 n 
+0000083122 00000 n 
+0003723139 00000 n 
+0005355702 00000 n 
+0000083173 00000 n 
+0000083212 00000 n 
+0003723269 00000 n 
+0005355633 00000 n 
+0000083268 00000 n 
+0000083319 00000 n 
+0003725617 00000 n 
+0005355494 00000 n 
+0000083368 00000 n 
+0000083417 00000 n 
+0003725747 00000 n 
+0005355410 00000 n 
+0000083468 00000 n 
+0000083515 00000 n 
+0003725878 00000 n 
+0005355285 00000 n 
+0000083566 00000 n 
+0000083622 00000 n 
+0003728947 00000 n 
+0005355201 00000 n 
+0000083678 00000 n 
+0000083714 00000 n 
+0003729078 00000 n 
+0005355102 00000 n 
+0000083770 00000 n 
+0000083803 00000 n 
+0003731785 00000 n 
+0005355003 00000 n 
+0000083859 00000 n 
+0000083893 00000 n 
+0003731916 00000 n 
+0005354919 00000 n 
+0000083949 00000 n 
+0000084014 00000 n 
+0003734469 00000 n 
+0005354780 00000 n 
+0000084063 00000 n 
+0000084112 00000 n 
+0003734599 00000 n 
+0005354696 00000 n 
+0000084163 00000 n 
+0000084210 00000 n 
+0003736533 00000 n 
+0005354571 00000 n 
+0000084261 00000 n 
+0000084307 00000 n 
+0003736664 00000 n 
+0005354487 00000 n 
+0000084363 00000 n 
+0000084408 00000 n 
+0003736794 00000 n 
+0005354347 00000 n 
+0000084464 00000 n 
+0000084512 00000 n 
+0003739120 00000 n 
+0005354263 00000 n 
+0000084573 00000 n 
+0000084626 00000 n 
+0003739251 00000 n 
+0005354164 00000 n 
+0000084687 00000 n 
+0000084744 00000 n 
+0003741397 00000 n 
+0005354065 00000 n 
+0000084805 00000 n 
+0000084872 00000 n 
+0003741526 00000 n 
+0005353966 00000 n 
+0000084933 00000 n 
+0000085014 00000 n 
+0003743926 00000 n 
+0005353867 00000 n 
+0000085075 00000 n 
+0000085131 00000 n 
+0003744057 00000 n 
+0005353768 00000 n 
+0000085192 00000 n 
+0000085256 00000 n 
+0003744188 00000 n 
+0005353684 00000 n 
+0000085317 00000 n 
+0000085378 00000 n 
+0003747526 00000 n 
+0005353585 00000 n 
+0000085434 00000 n 
+0000085479 00000 n 
+0003747657 00000 n 
+0005353486 00000 n 
+0000085535 00000 n 
+0000085596 00000 n 
+0003749238 00000 n 
+0005353387 00000 n 
+0000085652 00000 n 
+0000085710 00000 n 
+0003749369 00000 n 
+0005353303 00000 n 
+0000085766 00000 n 
+0000085805 00000 n 
+0003752198 00000 n 
+0005353205 00000 n 
+0000085854 00000 n 
+0000085912 00000 n 
+0003756917 00000 n 
+0005353081 00000 n 
+0000085961 00000 n 
+0000086026 00000 n 
+0003759836 00000 n 
+0005352971 00000 n 
+0000086077 00000 n 
+0000086117 00000 n 
+0003759967 00000 n 
+0005352887 00000 n 
+0000086173 00000 n 
+0000086224 00000 n 
+0003763237 00000 n 
+0005352788 00000 n 
+0000086280 00000 n 
+0000086345 00000 n 
+0003774061 00000 n 
+0005352704 00000 n 
+0000086401 00000 n 
+0000086460 00000 n 
+0003785772 00000 n 
+0005352564 00000 n 
+0000086505 00000 n 
+0000086556 00000 n 
+0003787878 00000 n 
+0005352439 00000 n 
+0000086605 00000 n 
+0000086665 00000 n 
+0003788008 00000 n 
+0005352314 00000 n 
+0000086716 00000 n 
+0000086765 00000 n 
+0003790642 00000 n 
+0005352230 00000 n 
+0000086821 00000 n 
+0000086890 00000 n 
+0003790773 00000 n 
+0005352131 00000 n 
+0000086946 00000 n 
+0000087014 00000 n 
+0003790901 00000 n 
+0005352047 00000 n 
+0000087070 00000 n 
+0000087119 00000 n 
+0003791032 00000 n 
+0005351922 00000 n 
+0000087170 00000 n 
+0000087228 00000 n 
+0003791163 00000 n 
+0005351838 00000 n 
+0000087284 00000 n 
+0000087346 00000 n 
+0003791293 00000 n 
+0005351698 00000 n 
+0000087402 00000 n 
+0000087457 00000 n 
+0003796284 00000 n 
+0005351614 00000 n 
+0000087518 00000 n 
+0000087579 00000 n 
+0003796415 00000 n 
+0005351515 00000 n 
+0000087640 00000 n 
+0000087688 00000 n 
+0003797800 00000 n 
+0005351416 00000 n 
+0000087749 00000 n 
+0000087793 00000 n 
+0003803371 00000 n 
+0005351332 00000 n 
+0000087854 00000 n 
+0000087927 00000 n 
+0003806372 00000 n 
+0005351207 00000 n 
+0000087983 00000 n 
+0000088028 00000 n 
+0003806503 00000 n 
+0005351123 00000 n 
+0000088089 00000 n 
+0000088133 00000 n 
+0003806634 00000 n 
+0005351024 00000 n 
+0000088194 00000 n 
+0000088243 00000 n 
+0003809942 00000 n 
+0005350925 00000 n 
+0000088304 00000 n 
+0000088368 00000 n 
+0003812676 00000 n 
+0005350841 00000 n 
+0000088429 00000 n 
+0000088463 00000 n 
+0003820090 00000 n 
+0005350701 00000 n 
+0000088512 00000 n 
+0000088581 00000 n 
+0003820219 00000 n 
+0005350576 00000 n 
+0000088632 00000 n 
+0000088686 00000 n 
+0003820350 00000 n 
+0005350451 00000 n 
+0000088742 00000 n 
+0000088780 00000 n 
+0003824866 00000 n 
+0005350367 00000 n 
+0000088841 00000 n 
+0000088884 00000 n 
+0003827474 00000 n 
+0005350268 00000 n 
+0000088945 00000 n 
+0000089008 00000 n 
+0003827605 00000 n 
+0005350169 00000 n 
+0000089069 00000 n 
+0000089112 00000 n 
+0003830169 00000 n 
+0005350070 00000 n 
+0000089173 00000 n 
+0000089229 00000 n 
+0003830300 00000 n 
+0005349986 00000 n 
+0000089290 00000 n 
+0000089343 00000 n 
+0003830431 00000 n 
+0005349902 00000 n 
+0000089399 00000 n 
+0000089453 00000 n 
+0003832919 00000 n 
+0005349777 00000 n 
+0000089504 00000 n 
+0000089547 00000 n 
+0003835409 00000 n 
+0005349693 00000 n 
+0000089603 00000 n 
+0000089651 00000 n 
+0003835540 00000 n 
+0005349609 00000 n 
+0000089707 00000 n 
+0000089765 00000 n 
+0003843669 00000 n 
+0005349484 00000 n 
+0000089814 00000 n 
+0000089885 00000 n 
+0003843799 00000 n 
+0005349400 00000 n 
+0000089936 00000 n 
+0000089983 00000 n 
+0003846268 00000 n 
+0005349260 00000 n 
+0000090034 00000 n 
+0000090089 00000 n 
+0003846399 00000 n 
+0005349135 00000 n 
+0000090145 00000 n 
+0000090199 00000 n 
+0003848524 00000 n 
+0005349051 00000 n 
+0000090260 00000 n 
+0000090312 00000 n 
+0003848655 00000 n 
+0005348967 00000 n 
+0000090373 00000 n 
+0000090434 00000 n 
+0003851834 00000 n 
+0005348868 00000 n 
+0000090490 00000 n 
+0000090539 00000 n 
+0003856441 00000 n 
+0005348769 00000 n 
+0000090595 00000 n 
+0000090648 00000 n 
+0003856836 00000 n 
+0005348685 00000 n 
+0000090704 00000 n 
+0000090774 00000 n 
+0003859412 00000 n 
+0005348560 00000 n 
+0000090825 00000 n 
+0000090874 00000 n 
+0003859542 00000 n 
+0005348476 00000 n 
+0000090930 00000 n 
+0000090976 00000 n 
+0003862180 00000 n 
+0005348377 00000 n 
+0000091032 00000 n 
+0000091075 00000 n 
+0003864784 00000 n 
+0005348278 00000 n 
+0000091131 00000 n 
+0000091173 00000 n 
+0003864915 00000 n 
+0005348179 00000 n 
+0000091229 00000 n 
+0000091274 00000 n 
+0003865046 00000 n 
+0005348080 00000 n 
+0000091330 00000 n 
+0000091373 00000 n 
+0003867466 00000 n 
+0005347981 00000 n 
+0000091429 00000 n 
+0000091472 00000 n 
+0003867597 00000 n 
+0005347882 00000 n 
+0000091528 00000 n 
+0000091569 00000 n 
+0003867727 00000 n 
+0005347798 00000 n 
+0000091625 00000 n 
+0000091677 00000 n 
+0003869051 00000 n 
+0005347657 00000 n 
+0000091722 00000 n 
+0000091765 00000 n 
+0003871390 00000 n 
+0005347532 00000 n 
+0000091814 00000 n 
+0000091865 00000 n 
+0003871520 00000 n 
+0005347448 00000 n 
+0000091916 00000 n 
+0000091954 00000 n 
+0003871651 00000 n 
+0005347349 00000 n 
+0000092005 00000 n 
+0000092042 00000 n 
+0003874929 00000 n 
+0005347265 00000 n 
+0000092093 00000 n 
+0000092128 00000 n 
+0003898885 00000 n 
+0005347125 00000 n 
+0000092177 00000 n 
+0000092245 00000 n 
+0003899015 00000 n 
+0005347000 00000 n 
+0000092296 00000 n 
+0000092339 00000 n 
+0003899144 00000 n 
+0005346916 00000 n 
+0000092395 00000 n 
+0000092450 00000 n 
+0003902158 00000 n 
+0005346817 00000 n 
+0000092506 00000 n 
+0000092541 00000 n 
+0003902289 00000 n 
+0005346718 00000 n 
+0000092597 00000 n 
+0000092633 00000 n 
+0003902420 00000 n 
+0005346593 00000 n 
+0000092689 00000 n 
+0000092744 00000 n 
+0003922896 00000 n 
+0005346509 00000 n 
+0000092805 00000 n 
+0000092882 00000 n 
+0003966489 00000 n 
+0005346425 00000 n 
+0000092943 00000 n 
+0000093016 00000 n 
+0003966620 00000 n 
+0005346326 00000 n 
+0000093067 00000 n 
+0000093104 00000 n 
+0003966751 00000 n 
+0005346227 00000 n 
+0000093155 00000 n 
+0000093206 00000 n 
+0003970950 00000 n 
+0005346143 00000 n 
+0000093257 00000 n 
+0000093315 00000 n 
+0003974055 00000 n 
+0005346018 00000 n 
+0000093364 00000 n 
+0000093410 00000 n 
+0003974185 00000 n 
+0005345934 00000 n 
+0000093461 00000 n 
+0000093499 00000 n 
+0003974316 00000 n 
+0005345835 00000 n 
+0000093550 00000 n 
+0000093595 00000 n 
+0003977691 00000 n 
+0005345695 00000 n 
+0000093646 00000 n 
+0000093684 00000 n 
+0003981333 00000 n 
+0005345626 00000 n 
+0000093740 00000 n 
+0000093797 00000 n 
+0003981859 00000 n 
+0005345527 00000 n 
+0000093848 00000 n 
+0000093889 00000 n 
+0003984383 00000 n 
+0005345428 00000 n 
+0000093940 00000 n 
+0000093996 00000 n 
+0003985834 00000 n 
+0005345344 00000 n 
+0000094047 00000 n 
+0000094080 00000 n 
+0003986758 00000 n 
+0005345217 00000 n 
+0000094125 00000 n 
+0000094171 00000 n 
+0003989100 00000 n 
+0005345092 00000 n 
+0000094220 00000 n 
+0000094272 00000 n 
+0003989230 00000 n 
+0005344967 00000 n 
+0000094323 00000 n 
+0000094388 00000 n 
+0003989361 00000 n 
+0005344883 00000 n 
+0000094444 00000 n 
+0000094484 00000 n 
+0003989492 00000 n 
+0005344758 00000 n 
+0000094540 00000 n 
+0000094598 00000 n 
+0003992353 00000 n 
+0005344674 00000 n 
+0000094659 00000 n 
+0000094707 00000 n 
+0003992484 00000 n 
+0005344590 00000 n 
+0000094768 00000 n 
+0000094819 00000 n 
+0003995589 00000 n 
+0005344491 00000 n 
+0000094870 00000 n 
+0000094941 00000 n 
+0003995720 00000 n 
+0005344392 00000 n 
+0000094992 00000 n 
+0000095049 00000 n 
+0003997751 00000 n 
+0005344252 00000 n 
+0000095100 00000 n 
+0000095147 00000 n 
+0004000921 00000 n 
+0005344142 00000 n 
+0000095203 00000 n 
+0000095276 00000 n 
+0004001052 00000 n 
+0005344058 00000 n 
+0000095337 00000 n 
+0000095410 00000 n 
+0004001183 00000 n 
+0005343959 00000 n 
+0000095471 00000 n 
+0000095551 00000 n 
+0004003440 00000 n 
+0005343875 00000 n 
+0000095612 00000 n 
+0000095673 00000 n 
+0004003569 00000 n 
+0005343750 00000 n 
+0000095724 00000 n 
+0000095785 00000 n 
+0004003698 00000 n 
+0005343666 00000 n 
+0000095841 00000 n 
+0000095893 00000 n 
+0004007509 00000 n 
+0005343541 00000 n 
+0000095949 00000 n 
+0000096015 00000 n 
+0004009543 00000 n 
+0005343457 00000 n 
+0000096076 00000 n 
+0000096138 00000 n 
+0004010962 00000 n 
+0005343373 00000 n 
+0000096199 00000 n 
+0000096265 00000 n 
+0004013351 00000 n 
+0005343233 00000 n 
+0000096314 00000 n 
+0000096357 00000 n 
+0004013481 00000 n 
+0005343149 00000 n 
+0000096408 00000 n 
+0000096438 00000 n 
+0004016036 00000 n 
+0005343050 00000 n 
+0000096489 00000 n 
+0000096523 00000 n 
+0004016167 00000 n 
+0005342951 00000 n 
+0000096574 00000 n 
+0000096604 00000 n 
+0004019458 00000 n 
+0005342852 00000 n 
+0000096655 00000 n 
+0000096694 00000 n 
+0004019589 00000 n 
+0005342753 00000 n 
+0000096745 00000 n 
+0000096797 00000 n 
+0004022293 00000 n 
+0005342628 00000 n 
+0000096848 00000 n 
+0000096881 00000 n 
+0004022424 00000 n 
+0005342544 00000 n 
+0000096937 00000 n 
+0000096985 00000 n 
+0004022555 00000 n 
+0005342460 00000 n 
+0000097041 00000 n 
+0000097089 00000 n 
+0004026043 00000 n 
+0005342320 00000 n 
+0000097138 00000 n 
+0000097198 00000 n 
+0004026173 00000 n 
+0005342236 00000 n 
+0000097249 00000 n 
+0000097292 00000 n 
+0004029091 00000 n 
+0005342096 00000 n 
+0000097343 00000 n 
+0000097379 00000 n 
+0004029222 00000 n 
+0005342012 00000 n 
+0000097435 00000 n 
+0000097507 00000 n 
+0004029353 00000 n 
+0005341913 00000 n 
+0000097563 00000 n 
+0000097625 00000 n 
+0004032087 00000 n 
+0005341829 00000 n 
+0000097681 00000 n 
+0000097749 00000 n 
+0004032218 00000 n 
+0005341689 00000 n 
+0000097800 00000 n 
+0000097848 00000 n 
+0004032349 00000 n 
+0005341605 00000 n 
+0000097904 00000 n 
+0000097966 00000 n 
+0004035250 00000 n 
+0005341506 00000 n 
+0000098022 00000 n 
+0000098089 00000 n 
+0004035381 00000 n 
+0005341407 00000 n 
+0000098145 00000 n 
+0000098225 00000 n 
+0004035512 00000 n 
+0005341308 00000 n 
+0000098281 00000 n 
+0000098334 00000 n 
+0004038101 00000 n 
+0005341209 00000 n 
+0000098390 00000 n 
+0000098448 00000 n 
+0004038232 00000 n 
+0005341125 00000 n 
+0000098504 00000 n 
+0000098549 00000 n 
+0004038361 00000 n 
+0005340985 00000 n 
+0000098600 00000 n 
+0000098639 00000 n 
+0004041713 00000 n 
+0005340916 00000 n 
+0000098695 00000 n 
+0000098740 00000 n 
+0004041844 00000 n 
+0005340817 00000 n 
+0000098791 00000 n 
+0000098844 00000 n 
+0004044195 00000 n 
+0005340733 00000 n 
+0000098895 00000 n 
+0000098935 00000 n 
+0004046621 00000 n 
+0005340592 00000 n 
+0000098984 00000 n 
+0000099040 00000 n 
+0004046751 00000 n 
+0005340508 00000 n 
+0000099091 00000 n 
+0000099128 00000 n 
+0004046882 00000 n 
+0005340409 00000 n 
+0000099179 00000 n 
+0000099219 00000 n 
+0004049597 00000 n 
+0005340310 00000 n 
+0000099270 00000 n 
+0000099305 00000 n 
+0004052034 00000 n 
+0005340211 00000 n 
+0000099356 00000 n 
+0000099390 00000 n 
+0004052165 00000 n 
+0005340112 00000 n 
+0000099441 00000 n 
+0000099476 00000 n 
+0004052296 00000 n 
+0005340013 00000 n 
+0000099527 00000 n 
+0000099561 00000 n 
+0004052427 00000 n 
+0005339914 00000 n 
+0000099612 00000 n 
+0000099647 00000 n 
+0004055141 00000 n 
+0005339815 00000 n 
+0000099698 00000 n 
+0000099735 00000 n 
+0004055272 00000 n 
+0005339716 00000 n 
+0000099786 00000 n 
+0000099825 00000 n 
+0004055402 00000 n 
+0005339617 00000 n 
+0000099877 00000 n 
+0000099958 00000 n 
+0004057951 00000 n 
+0005339518 00000 n 
+0000100010 00000 n 
+0000100054 00000 n 
+0004058082 00000 n 
+0005339434 00000 n 
+0000100106 00000 n 
+0000100163 00000 n 
+0004060361 00000 n 
+0005339294 00000 n 
+0000100212 00000 n 
+0000100277 00000 n 
+0004060491 00000 n 
+0005339210 00000 n 
+0000100328 00000 n 
+0000100366 00000 n 
+0004064417 00000 n 
+0005339070 00000 n 
+0000100417 00000 n 
+0000100454 00000 n 
+0004064547 00000 n 
+0005338986 00000 n 
+0000100510 00000 n 
+0000100574 00000 n 
+0004068360 00000 n 
+0005338887 00000 n 
+0000100630 00000 n 
+0000100691 00000 n 
+0004071791 00000 n 
+0005338803 00000 n 
+0000100747 00000 n 
+0000100802 00000 n 
+0004073306 00000 n 
+0005338704 00000 n 
+0000100853 00000 n 
+0000100886 00000 n 
+0004076785 00000 n 
+0005338620 00000 n 
+0000100937 00000 n 
+0000100978 00000 n 
+0004079346 00000 n 
+0005338480 00000 n 
+0000101027 00000 n 
+0000101072 00000 n 
+0004082771 00000 n 
+0005338396 00000 n 
+0000101123 00000 n 
+0000101161 00000 n 
+0004085363 00000 n 
+0005338312 00000 n 
+0000101212 00000 n 
+0000101256 00000 n 
+0004087767 00000 n 
+0005338172 00000 n 
+0000101305 00000 n 
+0000101369 00000 n 
+0004087897 00000 n 
+0005338088 00000 n 
+0000101420 00000 n 
+0000101467 00000 n 
+0004091467 00000 n 
+0005337963 00000 n 
+0000101518 00000 n 
+0000101565 00000 n 
+0004093396 00000 n 
+0005337879 00000 n 
+0000101621 00000 n 
+0000101660 00000 n 
+0004098303 00000 n 
+0005337795 00000 n 
+0000101716 00000 n 
+0000101755 00000 n 
+0004101170 00000 n 
+0005337696 00000 n 
+0000101804 00000 n 
+0000101871 00000 n 
+0004139806 00000 n 
+0005337597 00000 n 
+0000101921 00000 n 
+0000101950 00000 n 
+0004144838 00000 n 
+0005337513 00000 n 
+0000102001 00000 n 
+0000102035 00000 n 
+0000102443 00000 n 
+0000102687 00000 n 
+0000102089 00000 n 
+0000102559 00000 n 
+0000102623 00000 n 
+0005308473 00000 n 
+0005309814 00000 n 
+0005312634 00000 n 
+0000105353 00000 n 
+0000104986 00000 n 
+0000102775 00000 n 
+0000105102 00000 n 
+0005311146 00000 n 
+0000105289 00000 n 
+0005309666 00000 n 
+0005308324 00000 n 
+0000106123 00000 n 
+0000105943 00000 n 
+0000105455 00000 n 
+0000106059 00000 n 
+0005310998 00000 n 
+0000107618 00000 n 
+0000107768 00000 n 
+0000107940 00000 n 
+0000108112 00000 n 
+0000108281 00000 n 
+0000108457 00000 n 
+0000108626 00000 n 
+0000108778 00000 n 
+0000108947 00000 n 
+0000109100 00000 n 
+0000109270 00000 n 
+0000109442 00000 n 
+0000109611 00000 n 
+0000109763 00000 n 
+0000109932 00000 n 
+0000110103 00000 n 
+0000110276 00000 n 
+0000110442 00000 n 
+0000110594 00000 n 
+0000110763 00000 n 
+0000110944 00000 n 
+0000111110 00000 n 
+0000111266 00000 n 
+0000113238 00000 n 
+0000111617 00000 n 
+0000107283 00000 n 
+0000106225 00000 n 
+0000111435 00000 n 
+0000111557 00000 n 
+0005311447 00000 n 
+0005309222 00000 n 
+0005312188 00000 n 
+0000416910 00000 n 
+0000451175 00000 n 
+0000544319 00000 n 
+0000587442 00000 n 
+0000702522 00000 n 
+0000745792 00000 n 
+0000113407 00000 n 
+0000113578 00000 n 
+0000113750 00000 n 
+0000113922 00000 n 
+0000114088 00000 n 
+0000114248 00000 n 
+0000114414 00000 n 
+0000114569 00000 n 
+0000114737 00000 n 
+0000114892 00000 n 
+0000115060 00000 n 
+0000115230 00000 n 
+0000115388 00000 n 
+0000115556 00000 n 
+0000115727 00000 n 
+0000115898 00000 n 
+0000116048 00000 n 
+0000116220 00000 n 
+0000116388 00000 n 
+0000116558 00000 n 
+0000116726 00000 n 
+0000116892 00000 n 
+0000117063 00000 n 
+0000117218 00000 n 
+0000117386 00000 n 
+0000119335 00000 n 
+0000117621 00000 n 
+0000112876 00000 n 
+0000111761 00000 n 
+0000117557 00000 n 
+0000804019 00000 n 
+0000823171 00000 n 
+0001190790 00000 n 
+0001201966 00000 n 
+0001343406 00000 n 
+0001589752 00000 n 
+0000119488 00000 n 
+0000119657 00000 n 
+0000119838 00000 n 
+0000120004 00000 n 
+0000120155 00000 n 
+0000120324 00000 n 
+0000120473 00000 n 
+0000120644 00000 n 
+0000120813 00000 n 
+0000120970 00000 n 
+0000121139 00000 n 
+0000121308 00000 n 
+0000121480 00000 n 
+0000121630 00000 n 
+0000121798 00000 n 
+0000121970 00000 n 
+0000122139 00000 n 
+0000122312 00000 n 
+0000122469 00000 n 
+0000122641 00000 n 
+0000122809 00000 n 
+0000122968 00000 n 
+0000123136 00000 n 
+0000123307 00000 n 
+0000123479 00000 n 
+0000123656 00000 n 
+0000125704 00000 n 
+0000123868 00000 n 
+0000118964 00000 n 
+0000117765 00000 n 
+0000123804 00000 n 
+0001798802 00000 n 
+0001883400 00000 n 
+0001936674 00000 n 
+0001957773 00000 n 
+0002090931 00000 n 
+0002142284 00000 n 
+0002163270 00000 n 
+0002223941 00000 n 
+0000125875 00000 n 
+0000126043 00000 n 
+0000126204 00000 n 
+0000126377 00000 n 
+0000126548 00000 n 
+0000126716 00000 n 
+0000126873 00000 n 
+0000127045 00000 n 
+0000127218 00000 n 
+0000127390 00000 n 
+0000127537 00000 n 
+0000127709 00000 n 
+0000127877 00000 n 
+0000128047 00000 n 
+0000128196 00000 n 
+0000128373 00000 n 
+0000128544 00000 n 
+0000128719 00000 n 
+0000128898 00000 n 
+0000129070 00000 n 
+0000129238 00000 n 
+0000131010 00000 n 
+0000129471 00000 n 
+0000125378 00000 n 
+0000124012 00000 n 
+0000129407 00000 n 
+0005312760 00000 n 
+0002232768 00000 n 
+0002403263 00000 n 
+0003389329 00000 n 
+0003433037 00000 n 
+0003501105 00000 n 
+0000131179 00000 n 
+0000131332 00000 n 
+0000131501 00000 n 
+0000131655 00000 n 
+0000131824 00000 n 
+0000131970 00000 n 
+0000132139 00000 n 
+0000132315 00000 n 
+0000132479 00000 n 
+0000132647 00000 n 
+0000132797 00000 n 
+0000132969 00000 n 
+0000133138 00000 n 
+0000133313 00000 n 
+0000133460 00000 n 
+0000133629 00000 n 
+0000133778 00000 n 
+0000133947 00000 n 
+0000134116 00000 n 
+0000134268 00000 n 
+0000134437 00000 n 
+0000134606 00000 n 
+0000134758 00000 n 
+0000134927 00000 n 
+0000135086 00000 n 
+0000136784 00000 n 
+0000135322 00000 n 
+0000130648 00000 n 
+0000129615 00000 n 
+0000135258 00000 n 
+0003522940 00000 n 
+0003551538 00000 n 
+0003622485 00000 n 
+0003666930 00000 n 
+0003699303 00000 n 
+0003725682 00000 n 
+0003734534 00000 n 
+0003752263 00000 n 
+0003756982 00000 n 
+0003787943 00000 n 
+0000136952 00000 n 
+0000137123 00000 n 
+0000137279 00000 n 
+0000137447 00000 n 
+0000137595 00000 n 
+0000137763 00000 n 
+0000137916 00000 n 
+0000138088 00000 n 
+0000138260 00000 n 
+0000138429 00000 n 
+0000138581 00000 n 
+0000138751 00000 n 
+0000138922 00000 n 
+0000139094 00000 n 
+0000139262 00000 n 
+0000139415 00000 n 
+0000139583 00000 n 
+0000139755 00000 n 
+0000139927 00000 n 
+0000140080 00000 n 
+0000140251 00000 n 
+0000140419 00000 n 
+0000140590 00000 n 
+0000140745 00000 n 
+0000140917 00000 n 
+0000141085 00000 n 
+0000142496 00000 n 
+0000141306 00000 n 
+0000136413 00000 n 
+0000135466 00000 n 
+0000141242 00000 n 
+0003820155 00000 n 
+0003843734 00000 n 
+0003871455 00000 n 
+0003898950 00000 n 
+0003974120 00000 n 
+0003989165 00000 n 
+0004013416 00000 n 
+0004026108 00000 n 
+0000142668 00000 n 
+0000142837 00000 n 
+0000143006 00000 n 
+0000143176 00000 n 
+0000143324 00000 n 
+0000143501 00000 n 
+0000143671 00000 n 
+0000143840 00000 n 
+0000143994 00000 n 
+0000144173 00000 n 
+0000144323 00000 n 
+0000144556 00000 n 
+0000142260 00000 n 
+0000141450 00000 n 
+0000144492 00000 n 
+0004046686 00000 n 
+0004060426 00000 n 
+0004087832 00000 n 
+0000144981 00000 n 
+0000144801 00000 n 
+0000144700 00000 n 
+0000144917 00000 n 
+0000146441 00000 n 
+0000146595 00000 n 
+0000146748 00000 n 
+0000146900 00000 n 
+0000147054 00000 n 
+0000147208 00000 n 
+0000147362 00000 n 
+0000147516 00000 n 
+0000147669 00000 n 
+0000147818 00000 n 
+0000147973 00000 n 
+0000148126 00000 n 
+0000148281 00000 n 
+0000148435 00000 n 
+0000148594 00000 n 
+0000148754 00000 n 
+0000148914 00000 n 
+0000149074 00000 n 
+0000149239 00000 n 
+0000149399 00000 n 
+0000149553 00000 n 
+0000149707 00000 n 
+0000149862 00000 n 
+0000150022 00000 n 
+0000152248 00000 n 
+0000150246 00000 n 
+0000146097 00000 n 
+0000145023 00000 n 
+0000150182 00000 n 
+0000152402 00000 n 
+0000152562 00000 n 
+0000152721 00000 n 
+0000152881 00000 n 
+0000153034 00000 n 
+0000153188 00000 n 
+0000153343 00000 n 
+0000153497 00000 n 
+0000153657 00000 n 
+0000153822 00000 n 
+0000153987 00000 n 
+0000154152 00000 n 
+0000154317 00000 n 
+0000154477 00000 n 
+0000154642 00000 n 
+0000154802 00000 n 
+0000154967 00000 n 
+0000155132 00000 n 
+0000155281 00000 n 
+0000155436 00000 n 
+0000155588 00000 n 
+0000155743 00000 n 
+0000155898 00000 n 
+0000156053 00000 n 
+0000156213 00000 n 
+0000156376 00000 n 
+0000156536 00000 n 
+0000156701 00000 n 
+0000156861 00000 n 
+0000157026 00000 n 
+0000157186 00000 n 
+0000157351 00000 n 
+0000157511 00000 n 
+0000157675 00000 n 
+0000159990 00000 n 
+0000157894 00000 n 
+0000151805 00000 n 
+0000150362 00000 n 
+0000157830 00000 n 
+0005312886 00000 n 
+0000160144 00000 n 
+0000160303 00000 n 
+0000160463 00000 n 
+0000160623 00000 n 
+0000160783 00000 n 
+0000160943 00000 n 
+0000161096 00000 n 
+0000161251 00000 n 
+0000161405 00000 n 
+0000161560 00000 n 
+0000161720 00000 n 
+0000161880 00000 n 
+0000162035 00000 n 
+0000162189 00000 n 
+0000162344 00000 n 
+0000162504 00000 n 
+0000162669 00000 n 
+0000162834 00000 n 
+0000162999 00000 n 
+0000163159 00000 n 
+0000163314 00000 n 
+0000163473 00000 n 
+0000163632 00000 n 
+0000163792 00000 n 
+0000163952 00000 n 
+0000164112 00000 n 
+0000164272 00000 n 
+0000164432 00000 n 
+0000164585 00000 n 
+0000164740 00000 n 
+0000164895 00000 n 
+0000165055 00000 n 
+0000165219 00000 n 
+0000167633 00000 n 
+0000165443 00000 n 
+0000159556 00000 n 
+0000158010 00000 n 
+0000165379 00000 n 
+0000167792 00000 n 
+0000167952 00000 n 
+0000168112 00000 n 
+0000168276 00000 n 
+0000168439 00000 n 
+0000168594 00000 n 
+0000168754 00000 n 
+0000168909 00000 n 
+0000169069 00000 n 
+0000169229 00000 n 
+0000169389 00000 n 
+0000169549 00000 n 
+0000169702 00000 n 
+0000169857 00000 n 
+0000170012 00000 n 
+0000170172 00000 n 
+0000170332 00000 n 
+0000170492 00000 n 
+0000170652 00000 n 
+0000170817 00000 n 
+0000170982 00000 n 
+0000171147 00000 n 
+0000171302 00000 n 
+0000171462 00000 n 
+0000171622 00000 n 
+0000171777 00000 n 
+0000171937 00000 n 
+0000172097 00000 n 
+0000172256 00000 n 
+0000172420 00000 n 
+0000172580 00000 n 
+0000172740 00000 n 
+0000172898 00000 n 
+0000173053 00000 n 
+0000173208 00000 n 
+0000175378 00000 n 
+0000173432 00000 n 
+0000167181 00000 n 
+0000165545 00000 n 
+0000173368 00000 n 
+0000175537 00000 n 
+0000175697 00000 n 
+0000175849 00000 n 
+0000176003 00000 n 
+0000176158 00000 n 
+0000176313 00000 n 
+0000176473 00000 n 
+0000176633 00000 n 
+0000176788 00000 n 
+0000176941 00000 n 
+0000177095 00000 n 
+0000177249 00000 n 
+0000177409 00000 n 
+0000177574 00000 n 
+0000177738 00000 n 
+0000177902 00000 n 
+0000178062 00000 n 
+0000178222 00000 n 
+0000178377 00000 n 
+0000178527 00000 n 
+0000178682 00000 n 
+0000178835 00000 n 
+0000178990 00000 n 
+0000179145 00000 n 
+0000179305 00000 n 
+0000179465 00000 n 
+0000179625 00000 n 
+0000179785 00000 n 
+0000179945 00000 n 
+0000180098 00000 n 
+0000180254 00000 n 
+0000182737 00000 n 
+0000180474 00000 n 
+0000174962 00000 n 
+0000173534 00000 n 
+0000180410 00000 n 
+0000182892 00000 n 
+0000183053 00000 n 
+0000183213 00000 n 
+0000183373 00000 n 
+0000183529 00000 n 
+0000183688 00000 n 
+0000183849 00000 n 
+0000184010 00000 n 
+0000184171 00000 n 
+0000184332 00000 n 
+0000184493 00000 n 
+0000184654 00000 n 
+0000184815 00000 n 
+0000184971 00000 n 
+0000185130 00000 n 
+0000185291 00000 n 
+0000185451 00000 n 
+0000185607 00000 n 
+0000185768 00000 n 
+0000185929 00000 n 
+0000186085 00000 n 
+0000186246 00000 n 
+0000186407 00000 n 
+0000186568 00000 n 
+0000186734 00000 n 
+0000186890 00000 n 
+0000187051 00000 n 
+0000187212 00000 n 
+0000187372 00000 n 
+0000187533 00000 n 
+0000187694 00000 n 
+0000187847 00000 n 
+0000188002 00000 n 
+0000188163 00000 n 
+0000188323 00000 n 
+0000188479 00000 n 
+0000188640 00000 n 
+0000190995 00000 n 
+0000188870 00000 n 
+0000182267 00000 n 
+0000180590 00000 n 
+0000188806 00000 n 
+0000191160 00000 n 
+0000191321 00000 n 
+0000191480 00000 n 
+0000191641 00000 n 
+0000191807 00000 n 
+0000191968 00000 n 
+0000192124 00000 n 
+0000192285 00000 n 
+0000192446 00000 n 
+0000192612 00000 n 
+0000192778 00000 n 
+0000192934 00000 n 
+0000193095 00000 n 
+0000193256 00000 n 
+0000193417 00000 n 
+0000193577 00000 n 
+0000193742 00000 n 
+0000193907 00000 n 
+0000194073 00000 n 
+0000194239 00000 n 
+0000194405 00000 n 
+0000194570 00000 n 
+0000194735 00000 n 
+0000194900 00000 n 
+0000195064 00000 n 
+0000195230 00000 n 
+0000195396 00000 n 
+0000195552 00000 n 
+0000195713 00000 n 
+0000195874 00000 n 
+0000196027 00000 n 
+0000196182 00000 n 
+0000196338 00000 n 
+0000198701 00000 n 
+0000196563 00000 n 
+0000190561 00000 n 
+0000188972 00000 n 
+0000196499 00000 n 
+0000198862 00000 n 
+0000199021 00000 n 
+0000199187 00000 n 
+0000199348 00000 n 
+0000199509 00000 n 
+0000199665 00000 n 
+0000199826 00000 n 
+0000199986 00000 n 
+0000200142 00000 n 
+0000200302 00000 n 
+0000200463 00000 n 
+0000200616 00000 n 
+0000200772 00000 n 
+0000200927 00000 n 
+0000201083 00000 n 
+0000201244 00000 n 
+0000201410 00000 n 
+0000201576 00000 n 
+0000201741 00000 n 
+0000201907 00000 n 
+0000202068 00000 n 
+0000202229 00000 n 
+0000202395 00000 n 
+0000202551 00000 n 
+0000202712 00000 n 
+0000202872 00000 n 
+0000203033 00000 n 
+0000203193 00000 n 
+0000203349 00000 n 
+0000203505 00000 n 
+0000203666 00000 n 
+0000203827 00000 n 
+0000203983 00000 n 
+0000204138 00000 n 
+0000206534 00000 n 
+0000204363 00000 n 
+0000198258 00000 n 
+0000196665 00000 n 
+0000204299 00000 n 
+0005313012 00000 n 
+0000206694 00000 n 
+0000206855 00000 n 
+0000207020 00000 n 
+0000207186 00000 n 
+0000207352 00000 n 
+0000207518 00000 n 
+0000207679 00000 n 
+0000207835 00000 n 
+0000207992 00000 n 
+0000208149 00000 n 
+0000208306 00000 n 
+0000208463 00000 n 
+0000208625 00000 n 
+0000208787 00000 n 
+0000208944 00000 n 
+0000209098 00000 n 
+0000209253 00000 n 
+0000209414 00000 n 
+0000209574 00000 n 
+0000209735 00000 n 
+0000209895 00000 n 
+0000210051 00000 n 
+0000210211 00000 n 
+0000210377 00000 n 
+0000210542 00000 n 
+0000210703 00000 n 
+0000210864 00000 n 
+0000211025 00000 n 
+0000211190 00000 n 
+0000211356 00000 n 
+0000211510 00000 n 
+0000211666 00000 n 
+0000211827 00000 n 
+0000211988 00000 n 
+0000214351 00000 n 
+0000212213 00000 n 
+0000206091 00000 n 
+0000204465 00000 n 
+0000212149 00000 n 
+0000214506 00000 n 
+0000214662 00000 n 
+0000214823 00000 n 
+0000214977 00000 n 
+0000215132 00000 n 
+0000215288 00000 n 
+0000215449 00000 n 
+0000215610 00000 n 
+0000215771 00000 n 
+0000215936 00000 n 
+0000216092 00000 n 
+0000216253 00000 n 
+0000216414 00000 n 
+0000216575 00000 n 
+0000216731 00000 n 
+0000216891 00000 n 
+0000217057 00000 n 
+0000217222 00000 n 
+0000217378 00000 n 
+0000217539 00000 n 
+0000217700 00000 n 
+0000217861 00000 n 
+0000218021 00000 n 
+0000218187 00000 n 
+0000218353 00000 n 
+0000218514 00000 n 
+0000218674 00000 n 
+0000218835 00000 n 
+0000218996 00000 n 
+0000219162 00000 n 
+0000219328 00000 n 
+0000221784 00000 n 
+0000219558 00000 n 
+0000213935 00000 n 
+0000212315 00000 n 
+0000219494 00000 n 
+0000221939 00000 n 
+0000222100 00000 n 
+0000222261 00000 n 
+0000222422 00000 n 
+0000222576 00000 n 
+0000222732 00000 n 
+0000222887 00000 n 
+0000223048 00000 n 
+0000223213 00000 n 
+0000223378 00000 n 
+0000223544 00000 n 
+0000223709 00000 n 
+0000223875 00000 n 
+0000224041 00000 n 
+0000224206 00000 n 
+0000224372 00000 n 
+0000224538 00000 n 
+0000224694 00000 n 
+0000224855 00000 n 
+0000225021 00000 n 
+0000225187 00000 n 
+0000225343 00000 n 
+0000225504 00000 n 
+0000225665 00000 n 
+0000225821 00000 n 
+0000225977 00000 n 
+0000226138 00000 n 
+0000226299 00000 n 
+0000226460 00000 n 
+0000226615 00000 n 
+0000226769 00000 n 
+0000226925 00000 n 
+0000227081 00000 n 
+0000227237 00000 n 
+0000227398 00000 n 
+0000227559 00000 n 
+0000227720 00000 n 
+0000230148 00000 n 
+0000227945 00000 n 
+0000221314 00000 n 
+0000219660 00000 n 
+0000227881 00000 n 
+0005311595 00000 n 
+0000230308 00000 n 
+0000230469 00000 n 
+0000230625 00000 n 
+0000230781 00000 n 
+0000230942 00000 n 
+0000231103 00000 n 
+0000231257 00000 n 
+0000231412 00000 n 
+0000231568 00000 n 
+0000231722 00000 n 
+0000231883 00000 n 
+0000232044 00000 n 
+0000232205 00000 n 
+0000232361 00000 n 
+0000232521 00000 n 
+0000232682 00000 n 
+0000232837 00000 n 
+0000232993 00000 n 
+0000233154 00000 n 
+0000233315 00000 n 
+0000233469 00000 n 
+0000233625 00000 n 
+0000233781 00000 n 
+0000233942 00000 n 
+0000234096 00000 n 
+0000234252 00000 n 
+0000234407 00000 n 
+0000234568 00000 n 
+0000234727 00000 n 
+0000234883 00000 n 
+0000235044 00000 n 
+0000235205 00000 n 
+0000235361 00000 n 
+0000235521 00000 n 
+0000237988 00000 n 
+0000235751 00000 n 
+0000229705 00000 n 
+0000228061 00000 n 
+0000235687 00000 n 
+0000238153 00000 n 
+0000238319 00000 n 
+0000238485 00000 n 
+0000238650 00000 n 
+0000238816 00000 n 
+0000238972 00000 n 
+0000239133 00000 n 
+0000239294 00000 n 
+0000239455 00000 n 
+0000239616 00000 n 
+0000239777 00000 n 
+0000239933 00000 n 
+0000240092 00000 n 
+0000240253 00000 n 
+0000240419 00000 n 
+0000240584 00000 n 
+0000240750 00000 n 
+0000240916 00000 n 
+0000241082 00000 n 
+0000241248 00000 n 
+0000241414 00000 n 
+0000241580 00000 n 
+0000241746 00000 n 
+0000241901 00000 n 
+0000242061 00000 n 
+0000242222 00000 n 
+0000242383 00000 n 
+0000242544 00000 n 
+0000242700 00000 n 
+0000242861 00000 n 
+0000243022 00000 n 
+0000243183 00000 n 
+0000243344 00000 n 
+0000243505 00000 n 
+0000243665 00000 n 
+0000243826 00000 n 
+0000246465 00000 n 
+0000244046 00000 n 
+0000237527 00000 n 
+0000235853 00000 n 
+0000243982 00000 n 
+0000246625 00000 n 
+0000246786 00000 n 
+0000246947 00000 n 
+0000247107 00000 n 
+0000247262 00000 n 
+0000247419 00000 n 
+0000247576 00000 n 
+0000247733 00000 n 
+0000247890 00000 n 
+0000248052 00000 n 
+0000248214 00000 n 
+0000248368 00000 n 
+0000248524 00000 n 
+0000248685 00000 n 
+0000248846 00000 n 
+0000249002 00000 n 
+0000249163 00000 n 
+0000249324 00000 n 
+0000249485 00000 n 
+0000249640 00000 n 
+0000249801 00000 n 
+0000249962 00000 n 
+0000250122 00000 n 
+0000250283 00000 n 
+0000250444 00000 n 
+0000250599 00000 n 
+0000250759 00000 n 
+0000250920 00000 n 
+0000251081 00000 n 
+0000251242 00000 n 
+0000251403 00000 n 
+0000251564 00000 n 
+0000251723 00000 n 
+0000251884 00000 n 
+0000252040 00000 n 
+0000254529 00000 n 
+0000252265 00000 n 
+0000246013 00000 n 
+0000244148 00000 n 
+0000252201 00000 n 
+0005313138 00000 n 
+0000254689 00000 n 
+0000254850 00000 n 
+0000255016 00000 n 
+0000255176 00000 n 
+0000255337 00000 n 
+0000255498 00000 n 
+0000255659 00000 n 
+0000255820 00000 n 
+0000255981 00000 n 
+0000256143 00000 n 
+0000256305 00000 n 
+0000256467 00000 n 
+0000256627 00000 n 
+0000256789 00000 n 
+0000256950 00000 n 
+0000257111 00000 n 
+0000257273 00000 n 
+0000257435 00000 n 
+0000257597 00000 n 
+0000257753 00000 n 
+0000257914 00000 n 
+0000258075 00000 n 
+0000258236 00000 n 
+0000258391 00000 n 
+0000258552 00000 n 
+0000258713 00000 n 
+0000258868 00000 n 
+0000259029 00000 n 
+0000259190 00000 n 
+0000259346 00000 n 
+0000259507 00000 n 
+0000259668 00000 n 
+0000259829 00000 n 
+0000259989 00000 n 
+0000260146 00000 n 
+0000262747 00000 n 
+0000260372 00000 n 
+0000254077 00000 n 
+0000252381 00000 n 
+0000260308 00000 n 
+0000262908 00000 n 
+0000263070 00000 n 
+0000263232 00000 n 
+0000263393 00000 n 
+0000263555 00000 n 
+0000263717 00000 n 
+0000263879 00000 n 
+0000264041 00000 n 
+0000264204 00000 n 
+0000264367 00000 n 
+0000264530 00000 n 
+0000264691 00000 n 
+0000264854 00000 n 
+0000265017 00000 n 
+0000265179 00000 n 
+0000265336 00000 n 
+0000265498 00000 n 
+0000265660 00000 n 
+0000265822 00000 n 
+0000265984 00000 n 
+0000266146 00000 n 
+0000266308 00000 n 
+0000266464 00000 n 
+0000266625 00000 n 
+0000266787 00000 n 
+0000266949 00000 n 
+0000267110 00000 n 
+0000267267 00000 n 
+0000267429 00000 n 
+0000267596 00000 n 
+0000267763 00000 n 
+0000267930 00000 n 
+0000268096 00000 n 
+0000268263 00000 n 
+0000268430 00000 n 
+0000268597 00000 n 
+0000271038 00000 n 
+0000268828 00000 n 
+0000262286 00000 n 
+0000260488 00000 n 
+0000268764 00000 n 
+0000271200 00000 n 
+0000271357 00000 n 
+0000271518 00000 n 
+0000271680 00000 n 
+0000271842 00000 n 
+0000272004 00000 n 
+0000272166 00000 n 
+0000272328 00000 n 
+0000272490 00000 n 
+0000272647 00000 n 
+0000272802 00000 n 
+0000272964 00000 n 
+0000273126 00000 n 
+0000273287 00000 n 
+0000273443 00000 n 
+0000273600 00000 n 
+0000273757 00000 n 
+0000273919 00000 n 
+0000274081 00000 n 
+0000274243 00000 n 
+0000274405 00000 n 
+0000274566 00000 n 
+0000274728 00000 n 
+0000274889 00000 n 
+0000275051 00000 n 
+0000275213 00000 n 
+0000275376 00000 n 
+0000275539 00000 n 
+0000275702 00000 n 
+0000275865 00000 n 
+0000276027 00000 n 
+0000278446 00000 n 
+0000276254 00000 n 
+0000270622 00000 n 
+0000268944 00000 n 
+0000276190 00000 n 
+0000278609 00000 n 
+0000278772 00000 n 
+0000278935 00000 n 
+0000279098 00000 n 
+0000279261 00000 n 
+0000279418 00000 n 
+0000279572 00000 n 
+0000279728 00000 n 
+0000279884 00000 n 
+0000280040 00000 n 
+0000280201 00000 n 
+0000280362 00000 n 
+0000280523 00000 n 
+0000280689 00000 n 
+0000280850 00000 n 
+0000281009 00000 n 
+0000281170 00000 n 
+0000281331 00000 n 
+0000281497 00000 n 
+0000281653 00000 n 
+0000281813 00000 n 
+0000281974 00000 n 
+0000282135 00000 n 
+0000282289 00000 n 
+0000282445 00000 n 
+0000282601 00000 n 
+0000282757 00000 n 
+0000282917 00000 n 
+0000283078 00000 n 
+0000283234 00000 n 
+0000283395 00000 n 
+0000283556 00000 n 
+0000283716 00000 n 
+0000286093 00000 n 
+0000283941 00000 n 
+0000278012 00000 n 
+0000276356 00000 n 
+0000283877 00000 n 
+0000286253 00000 n 
+0000286414 00000 n 
+0000286570 00000 n 
+0000286730 00000 n 
+0000286891 00000 n 
+0000287052 00000 n 
+0000287218 00000 n 
+0000287384 00000 n 
+0000287550 00000 n 
+0000287716 00000 n 
+0000287882 00000 n 
+0000288047 00000 n 
+0000288213 00000 n 
+0000288369 00000 n 
+0000288524 00000 n 
+0000288684 00000 n 
+0000288845 00000 n 
+0000288999 00000 n 
+0000289155 00000 n 
+0000289311 00000 n 
+0000289467 00000 n 
+0000289628 00000 n 
+0000289788 00000 n 
+0000289943 00000 n 
+0000290104 00000 n 
+0000290265 00000 n 
+0000290419 00000 n 
+0000290575 00000 n 
+0000290731 00000 n 
+0000290892 00000 n 
+0000291053 00000 n 
+0000291219 00000 n 
+0000291380 00000 n 
+0000291546 00000 n 
+0000291711 00000 n 
+0000291867 00000 n 
+0000294106 00000 n 
+0000292087 00000 n 
+0000285632 00000 n 
+0000284043 00000 n 
+0000292023 00000 n 
+0000294266 00000 n 
+0000294427 00000 n 
+0000294588 00000 n 
+0000294743 00000 n 
+0000294897 00000 n 
+0000295058 00000 n 
+0000295212 00000 n 
+0000295368 00000 n 
+0000295524 00000 n 
+0000295685 00000 n 
+0000295851 00000 n 
+0000296017 00000 n 
+0000296183 00000 n 
+0000296349 00000 n 
+0000296510 00000 n 
+0000296676 00000 n 
+0000296842 00000 n 
+0000297008 00000 n 
+0000297169 00000 n 
+0000297330 00000 n 
+0000297491 00000 n 
+0000297657 00000 n 
+0000297823 00000 n 
+0000297989 00000 n 
+0000298155 00000 n 
+0000298311 00000 n 
+0000298467 00000 n 
+0000298623 00000 n 
+0000298783 00000 n 
+0000298948 00000 n 
+0000299109 00000 n 
+0000299270 00000 n 
+0000299424 00000 n 
+0000299585 00000 n 
+0000299746 00000 n 
+0000302154 00000 n 
+0000299971 00000 n 
+0000293654 00000 n 
+0000292189 00000 n 
+0000299907 00000 n 
+0005313264 00000 n 
+0000302315 00000 n 
+0000302469 00000 n 
+0000302625 00000 n 
+0000302781 00000 n 
+0000302941 00000 n 
+0000303107 00000 n 
+0000303268 00000 n 
+0000303434 00000 n 
+0000303600 00000 n 
+0000303760 00000 n 
+0000303921 00000 n 
+0000304082 00000 n 
+0000304248 00000 n 
+0000304414 00000 n 
+0000304579 00000 n 
+0000304745 00000 n 
+0000304901 00000 n 
+0000305062 00000 n 
+0000305223 00000 n 
+0000305377 00000 n 
+0000305533 00000 n 
+0000305688 00000 n 
+0000305844 00000 n 
+0000306005 00000 n 
+0000306166 00000 n 
+0000306327 00000 n 
+0000306487 00000 n 
+0000306643 00000 n 
+0000306804 00000 n 
+0000306965 00000 n 
+0000307126 00000 n 
+0000307286 00000 n 
+0000307447 00000 n 
+0000307603 00000 n 
+0000307764 00000 n 
+0000309972 00000 n 
+0000307989 00000 n 
+0000301702 00000 n 
+0000300073 00000 n 
+0000307925 00000 n 
+0000310132 00000 n 
+0000310286 00000 n 
+0000310441 00000 n 
+0000310597 00000 n 
+0000310753 00000 n 
+0000310909 00000 n 
+0000311065 00000 n 
+0000311225 00000 n 
+0000311386 00000 n 
+0000311547 00000 n 
+0000311703 00000 n 
+0000311864 00000 n 
+0000312018 00000 n 
+0000312174 00000 n 
+0000312330 00000 n 
+0000312491 00000 n 
+0000312652 00000 n 
+0000312813 00000 n 
+0000312974 00000 n 
+0000313127 00000 n 
+0000313283 00000 n 
+0000313439 00000 n 
+0000313600 00000 n 
+0000313761 00000 n 
+0000313926 00000 n 
+0000314092 00000 n 
+0000314258 00000 n 
+0000314423 00000 n 
+0000314589 00000 n 
+0000314755 00000 n 
+0000314921 00000 n 
+0000315082 00000 n 
+0000315243 00000 n 
+0000315404 00000 n 
+0000317594 00000 n 
+0000315629 00000 n 
+0000309529 00000 n 
+0000308091 00000 n 
+0000315565 00000 n 
+0000317747 00000 n 
+0000317900 00000 n 
+0000318054 00000 n 
+0000318215 00000 n 
+0000318376 00000 n 
+0000318537 00000 n 
+0000318687 00000 n 
+0000318841 00000 n 
+0000318997 00000 n 
+0000319158 00000 n 
+0000319318 00000 n 
+0000319479 00000 n 
+0000319635 00000 n 
+0000319796 00000 n 
+0000319957 00000 n 
+0000320123 00000 n 
+0000320289 00000 n 
+0000320455 00000 n 
+0000320621 00000 n 
+0000320782 00000 n 
+0000320947 00000 n 
+0000321112 00000 n 
+0000321278 00000 n 
+0000321444 00000 n 
+0000321598 00000 n 
+0000321754 00000 n 
+0000321915 00000 n 
+0000322081 00000 n 
+0000322247 00000 n 
+0000322413 00000 n 
+0000322578 00000 n 
+0000322744 00000 n 
+0000322905 00000 n 
+0000325059 00000 n 
+0000323125 00000 n 
+0000317160 00000 n 
+0000315731 00000 n 
+0000323061 00000 n 
+0000325219 00000 n 
+0000325380 00000 n 
+0000325534 00000 n 
+0000325690 00000 n 
+0000325845 00000 n 
+0000326006 00000 n 
+0000326172 00000 n 
+0000326338 00000 n 
+0000326499 00000 n 
+0000326659 00000 n 
+0000326819 00000 n 
+0000326975 00000 n 
+0000327136 00000 n 
+0000327297 00000 n 
+0000327458 00000 n 
+0000327618 00000 n 
+0000327779 00000 n 
+0000327940 00000 n 
+0000328101 00000 n 
+0000328262 00000 n 
+0000328411 00000 n 
+0000328565 00000 n 
+0000328721 00000 n 
+0000328877 00000 n 
+0000329033 00000 n 
+0000329186 00000 n 
+0000329342 00000 n 
+0000329503 00000 n 
+0000329664 00000 n 
+0000329825 00000 n 
+0000329985 00000 n 
+0000332298 00000 n 
+0000330215 00000 n 
+0000324643 00000 n 
+0000323241 00000 n 
+0000330151 00000 n 
+0000332463 00000 n 
+0000332619 00000 n 
+0000332775 00000 n 
+0000332931 00000 n 
+0000333085 00000 n 
+0000333241 00000 n 
+0000333397 00000 n 
+0000333553 00000 n 
+0000333712 00000 n 
+0000333867 00000 n 
+0000334023 00000 n 
+0000334179 00000 n 
+0000334329 00000 n 
+0000334483 00000 n 
+0000334639 00000 n 
+0000334800 00000 n 
+0000334961 00000 n 
+0000335127 00000 n 
+0000335293 00000 n 
+0000335449 00000 n 
+0000335604 00000 n 
+0000335759 00000 n 
+0000335920 00000 n 
+0000336086 00000 n 
+0000336252 00000 n 
+0000336418 00000 n 
+0000336574 00000 n 
+0000336735 00000 n 
+0000336895 00000 n 
+0000337061 00000 n 
+0000337227 00000 n 
+0000337381 00000 n 
+0000337537 00000 n 
+0000339769 00000 n 
+0000337757 00000 n 
+0000331864 00000 n 
+0000330331 00000 n 
+0000337693 00000 n 
+0000339924 00000 n 
+0000340079 00000 n 
+0000340235 00000 n 
+0000340391 00000 n 
+0000340552 00000 n 
+0000340713 00000 n 
+0000340867 00000 n 
+0000341022 00000 n 
+0000341177 00000 n 
+0000341338 00000 n 
+0000341499 00000 n 
+0000341660 00000 n 
+0000341816 00000 n 
+0000341977 00000 n 
+0000342137 00000 n 
+0000342298 00000 n 
+0000342459 00000 n 
+0000342618 00000 n 
+0000342778 00000 n 
+0000342934 00000 n 
+0000343095 00000 n 
+0000343251 00000 n 
+0000343407 00000 n 
+0000343561 00000 n 
+0000343716 00000 n 
+0000343871 00000 n 
+0000344027 00000 n 
+0000344183 00000 n 
+0000344339 00000 n 
+0000344495 00000 n 
+0000344651 00000 n 
+0000344806 00000 n 
+0000344961 00000 n 
+0000345118 00000 n 
+0000345275 00000 n 
+0000346802 00000 n 
+0000345496 00000 n 
+0000339317 00000 n 
+0000337873 00000 n 
+0000345432 00000 n 
+0005313390 00000 n 
+0000346955 00000 n 
+0000347111 00000 n 
+0000347267 00000 n 
+0000347427 00000 n 
+0000347588 00000 n 
+0000347749 00000 n 
+0000347905 00000 n 
+0000348061 00000 n 
+0000348215 00000 n 
+0000348371 00000 n 
+0000348527 00000 n 
+0000348681 00000 n 
+0000348837 00000 n 
+0000348992 00000 n 
+0000349153 00000 n 
+0000349314 00000 n 
+0000349468 00000 n 
+0000349623 00000 n 
+0000349842 00000 n 
+0000346503 00000 n 
+0000345598 00000 n 
+0000349778 00000 n 
+0000350225 00000 n 
+0000350045 00000 n 
+0000349944 00000 n 
+0000350161 00000 n 
+0000351498 00000 n 
+0000351653 00000 n 
+0000351809 00000 n 
+0000351965 00000 n 
+0000352121 00000 n 
+0000352277 00000 n 
+0000352433 00000 n 
+0000352589 00000 n 
+0000352745 00000 n 
+0000352901 00000 n 
+0000353057 00000 n 
+0000353212 00000 n 
+0000353369 00000 n 
+0000353525 00000 n 
+0000353681 00000 n 
+0000353837 00000 n 
+0000353993 00000 n 
+0000354275 00000 n 
+0000351217 00000 n 
+0000350267 00000 n 
+0000354149 00000 n 
+0000420956 00000 n 
+0000430312 00000 n 
+0000460422 00000 n 
+0000466817 00000 n 
+0000471682 00000 n 
+0000482300 00000 n 
+0000493574 00000 n 
+0000498071 00000 n 
+0000510928 00000 n 
+0000525813 00000 n 
+0000532685 00000 n 
+0000538255 00000 n 
+0000669696 00000 n 
+0000677917 00000 n 
+0000718231 00000 n 
+0000722139 00000 n 
+0000735608 00000 n 
+0000355692 00000 n 
+0000355848 00000 n 
+0000356004 00000 n 
+0000356161 00000 n 
+0000356318 00000 n 
+0000356475 00000 n 
+0000356632 00000 n 
+0000356789 00000 n 
+0000356946 00000 n 
+0000357103 00000 n 
+0000357260 00000 n 
+0000357417 00000 n 
+0000357574 00000 n 
+0000357730 00000 n 
+0000357886 00000 n 
+0000358043 00000 n 
+0000358200 00000 n 
+0000358357 00000 n 
+0000359914 00000 n 
+0000358578 00000 n 
+0000355402 00000 n 
+0000354377 00000 n 
+0000358514 00000 n 
+0000811348 00000 n 
+0000818683 00000 n 
+0001230585 00000 n 
+0001234362 00000 n 
+0001234874 00000 n 
+0001238958 00000 n 
+0001239469 00000 n 
+0001502747 00000 n 
+0001570840 00000 n 
+0001788703 00000 n 
+0001791241 00000 n 
+0001791688 00000 n 
+0001823695 00000 n 
+0001827272 00000 n 
+0001900901 00000 n 
+0001906405 00000 n 
+0001914001 00000 n 
+0001921361 00000 n 
+0000360071 00000 n 
+0000360228 00000 n 
+0000360385 00000 n 
+0000360542 00000 n 
+0000360699 00000 n 
+0000360856 00000 n 
+0000361013 00000 n 
+0000361170 00000 n 
+0000361327 00000 n 
+0000361484 00000 n 
+0000361642 00000 n 
+0000361798 00000 n 
+0000361955 00000 n 
+0000363154 00000 n 
+0000362176 00000 n 
+0000359660 00000 n 
+0000358680 00000 n 
+0000362112 00000 n 
+0001931189 00000 n 
+0002031497 00000 n 
+0002122582 00000 n 
+0002123158 00000 n 
+0002226836 00000 n 
+0002242028 00000 n 
+0002258536 00000 n 
+0002299265 00000 n 
+0002413810 00000 n 
+0002418887 00000 n 
+0002979338 00000 n 
+0003392586 00000 n 
+0003393179 00000 n 
+0003422842 00000 n 
+0000363310 00000 n 
+0000363467 00000 n 
+0000363624 00000 n 
+0000363781 00000 n 
+0000363938 00000 n 
+0000364095 00000 n 
+0000364252 00000 n 
+0000365318 00000 n 
+0000364473 00000 n 
+0000362954 00000 n 
+0000362278 00000 n 
+0000364409 00000 n 
+0005313516 00000 n 
+0003475307 00000 n 
+0003520479 00000 n 
+0003716658 00000 n 
+0003767639 00000 n 
+0003773142 00000 n 
+0003777531 00000 n 
+0003782473 00000 n 
+0003784250 00000 n 
+0000365474 00000 n 
+0000365631 00000 n 
+0000365788 00000 n 
+0000366009 00000 n 
+0000365154 00000 n 
+0000364575 00000 n 
+0000365945 00000 n 
+0003874468 00000 n 
+0003883622 00000 n 
+0003887455 00000 n 
+0004041975 00000 n 
+0000366392 00000 n 
+0000366212 00000 n 
+0000366111 00000 n 
+0000366328 00000 n 
+0000367854 00000 n 
+0000367999 00000 n 
+0000368152 00000 n 
+0000368298 00000 n 
+0000368450 00000 n 
+0000368603 00000 n 
+0000368756 00000 n 
+0000368909 00000 n 
+0000369062 00000 n 
+0000369213 00000 n 
+0000369366 00000 n 
+0000369519 00000 n 
+0000369672 00000 n 
+0000369826 00000 n 
+0000369979 00000 n 
+0000370133 00000 n 
+0000370287 00000 n 
+0000370441 00000 n 
+0000370595 00000 n 
+0000370748 00000 n 
+0000370902 00000 n 
+0000371056 00000 n 
+0000371210 00000 n 
+0000371364 00000 n 
+0000371517 00000 n 
+0000371671 00000 n 
+0000371825 00000 n 
+0000371971 00000 n 
+0000374167 00000 n 
+0000372251 00000 n 
+0000367474 00000 n 
+0000366434 00000 n 
+0000372125 00000 n 
+0005064009 00000 n 
+0000629102 00000 n 
+0005063975 00000 n 
+0000855153 00000 n 
+0000875735 00000 n 
+0000893857 00000 n 
+0000925069 00000 n 
+0000946996 00000 n 
+0000960516 00000 n 
+0000975467 00000 n 
+0000986979 00000 n 
+0001001558 00000 n 
+0001013926 00000 n 
+0001024453 00000 n 
+0001039125 00000 n 
+0001039253 00000 n 
+0001078710 00000 n 
+0001078838 00000 n 
+0001122485 00000 n 
+0001122613 00000 n 
+0001156308 00000 n 
+0001156436 00000 n 
+0001173121 00000 n 
+0001173249 00000 n 
+0001186210 00000 n 
+0001186338 00000 n 
+0005063941 00000 n 
+0001322087 00000 n 
+0000374312 00000 n 
+0000374466 00000 n 
+0000374620 00000 n 
+0000374766 00000 n 
+0000374920 00000 n 
+0000375074 00000 n 
+0000375228 00000 n 
+0000375374 00000 n 
+0000375528 00000 n 
+0000375674 00000 n 
+0000375827 00000 n 
+0000375973 00000 n 
+0000376127 00000 n 
+0000376281 00000 n 
+0000376435 00000 n 
+0000376588 00000 n 
+0000376742 00000 n 
+0000376896 00000 n 
+0000377050 00000 n 
+0000377200 00000 n 
+0000377354 00000 n 
+0000377508 00000 n 
+0000377663 00000 n 
+0000377818 00000 n 
+0000377973 00000 n 
+0000378127 00000 n 
+0000378282 00000 n 
+0000378436 00000 n 
+0000378591 00000 n 
+0000378746 00000 n 
+0000378901 00000 n 
+0000379833 00000 n 
+0000379111 00000 n 
+0000373751 00000 n 
+0000372353 00000 n 
+0000379047 00000 n 
+0005063907 00000 n 
+0001422968 00000 n 
+0001493481 00000 n 
+0005063873 00000 n 
+0001660578 00000 n 
+0001766351 00000 n 
+0001766479 00000 n 
+0005063839 00000 n 
+0002031369 00000 n 
+0005063805 00000 n 
+0002207357 00000 n 
+0005063771 00000 n 
+0002461061 00000 n 
+0002478764 00000 n 
+0002496895 00000 n 
+0002570306 00000 n 
+0002570434 00000 n 
+0002606360 00000 n 
+0002638315 00000 n 
+0002685785 00000 n 
+0002718466 00000 n 
+0002786380 00000 n 
+0002822244 00000 n 
+0002859180 00000 n 
+0002926359 00000 n 
+0002926615 00000 n 
+0002962681 00000 n 
+0003066283 00000 n 
+0003209433 00000 n 
+0003270688 00000 n 
+0003387082 00000 n 
+0005063737 00000 n 
+0000379986 00000 n 
+0000380132 00000 n 
+0000380285 00000 n 
+0000380503 00000 n 
+0000379669 00000 n 
+0000379213 00000 n 
+0000380439 00000 n 
+0003442773 00000 n 
+0005063703 00000 n 
+0003922765 00000 n 
+0003962927 00000 n 
+0000382040 00000 n 
+0000382184 00000 n 
+0000382335 00000 n 
+0000382487 00000 n 
+0000382632 00000 n 
+0000382784 00000 n 
+0000382929 00000 n 
+0000383080 00000 n 
+0000383226 00000 n 
+0000383378 00000 n 
+0000383524 00000 n 
+0000383677 00000 n 
+0000383829 00000 n 
+0000383982 00000 n 
+0000384135 00000 n 
+0000384281 00000 n 
+0000384433 00000 n 
+0000384586 00000 n 
+0000384739 00000 n 
+0000384892 00000 n 
+0000385045 00000 n 
+0000385190 00000 n 
+0000385469 00000 n 
+0000381714 00000 n 
+0000380605 00000 n 
+0000385343 00000 n 
+0005313642 00000 n 
+0005063669 00000 n 
+0000427049 00000 n 
+0000448503 00000 n 
+0005063635 00000 n 
+0000708162 00000 n 
+0005063601 00000 n 
+0000770508 00000 n 
+0005063567 00000 n 
+0001200084 00000 n 
+0001325998 00000 n 
+0001329667 00000 n 
+0001329795 00000 n 
+0001332644 00000 n 
+0001521725 00000 n 
+0001533591 00000 n 
+0001585436 00000 n 
+0001587740 00000 n 
+0001587868 00000 n 
+0001786077 00000 n 
+0000387235 00000 n 
+0000387380 00000 n 
+0000387533 00000 n 
+0000387679 00000 n 
+0000387832 00000 n 
+0000387984 00000 n 
+0000388137 00000 n 
+0000388290 00000 n 
+0000388443 00000 n 
+0000388588 00000 n 
+0000388740 00000 n 
+0000388886 00000 n 
+0000389039 00000 n 
+0000389185 00000 n 
+0000389338 00000 n 
+0000389484 00000 n 
+0000389637 00000 n 
+0000389790 00000 n 
+0000389943 00000 n 
+0000390089 00000 n 
+0000390242 00000 n 
+0000390388 00000 n 
+0000390541 00000 n 
+0000390694 00000 n 
+0000390838 00000 n 
+0000390991 00000 n 
+0000392038 00000 n 
+0000391201 00000 n 
+0000386873 00000 n 
+0000385571 00000 n 
+0000391137 00000 n 
+0005063533 00000 n 
+0001942284 00000 n 
+0001970400 00000 n 
+0002042633 00000 n 
+0002045357 00000 n 
+0002087406 00000 n 
+0002089054 00000 n 
+0005063499 00000 n 
+0002282552 00000 n 
+0002737633 00000 n 
+0005063465 00000 n 
+0003401038 00000 n 
+0005063431 00000 n 
+0003601071 00000 n 
+0003601202 00000 n 
+0003608964 00000 n 
+0005063397 00000 n 
+0003658333 00000 n 
+0005063363 00000 n 
+0003680034 00000 n 
+0003680163 00000 n 
+0005063329 00000 n 
+0003723008 00000 n 
+0005063295 00000 n 
+0000392190 00000 n 
+0000392336 00000 n 
+0000392488 00000 n 
+0000392641 00000 n 
+0000392786 00000 n 
+0000393003 00000 n 
+0000391856 00000 n 
+0000391303 00000 n 
+0000392939 00000 n 
+0003809811 00000 n 
+0005063261 00000 n 
+0003835278 00000 n 
+0003838120 00000 n 
+0005063227 00000 n 
+0003981728 00000 n 
+0000395797 00000 n 
+0000395493 00000 n 
+0000393105 00000 n 
+0000395609 00000 n 
+0000395734 00000 n 
+0000398100 00000 n 
+0000397920 00000 n 
+0000395913 00000 n 
+0000398036 00000 n 
+0000400231 00000 n 
 0000005404 00000 f 
 0000005405 00000 f 
 0000000000 00000 f 
-0000400886 00000 n 
-0000400084 00000 n 
-0000398215 00000 n 
-0000400568 00000 n 
-0000400632 00000 n 
-0000400696 00000 n 
-0000400399 00000 n 
-0004752643 00000 n 
-0000400822 00000 n 
-0000402282 00000 n 
-0000402102 00000 n 
-0000401030 00000 n 
-0000402218 00000 n 
-0004756303 00000 n 
-0000404830 00000 n 
-0000404394 00000 n 
-0000402426 00000 n 
-0000404510 00000 n 
-0000404574 00000 n 
-0000404638 00000 n 
-0000404702 00000 n 
-0000404766 00000 n 
-0000407608 00000 n 
-0000407300 00000 n 
-0000404946 00000 n 
-0000407416 00000 n 
-0000407480 00000 n 
-0000407544 00000 n 
-0000410153 00000 n 
-0000410514 00000 n 
-0000410016 00000 n 
-0000407724 00000 n 
-0000410322 00000 n 
-0000410386 00000 n 
-0000410450 00000 n 
-0004752497 00000 n 
-0004751905 00000 n 
-0004754872 00000 n 
-0000412467 00000 n 
-0000412287 00000 n 
-0000410700 00000 n 
-0000412403 00000 n 
-0000412960 00000 n 
-0000412782 00000 n 
-0000412569 00000 n 
-0000413251 00000 n 
-0000413135 00000 n 
-0000413034 00000 n 
-0004756429 00000 n 
-0000414217 00000 n 
-0000413783 00000 n 
-0000413293 00000 n 
-0000413899 00000 n 
-0000413963 00000 n 
-0000414089 00000 n 
-0000414153 00000 n 
-0000414600 00000 n 
-0000414420 00000 n 
-0000414319 00000 n 
-0000414536 00000 n 
-0000416617 00000 n 
-0000416319 00000 n 
-0000417350 00000 n 
-0000416164 00000 n 
-0000414642 00000 n 
-0000416783 00000 n 
-0004753384 00000 n 
-0000417035 00000 n 
-0000416467 00000 n 
-0000417161 00000 n 
-0000417287 00000 n 
-0000420733 00000 n 
-0000421656 00000 n 
-0000420596 00000 n 
-0000417536 00000 n 
-0000420891 00000 n 
-0000421019 00000 n 
-0000421083 00000 n 
-0004755020 00000 n 
-0000421146 00000 n 
-0000421210 00000 n 
-0000421274 00000 n 
-0000421338 00000 n 
-0000421402 00000 n 
-0000421466 00000 n 
-0000421529 00000 n 
-0000421593 00000 n 
-0000423663 00000 n 
-0000423821 00000 n 
-0000424295 00000 n 
-0000423517 00000 n 
-0000421785 00000 n 
-0000423980 00000 n 
-0000424106 00000 n 
-0000424231 00000 n 
-0000427112 00000 n 
-0000448566 00000 n 
-0000427176 00000 n 
-0000426868 00000 n 
-0000424425 00000 n 
-0000426984 00000 n 
-0004756555 00000 n 
-0000429963 00000 n 
-0000430823 00000 n 
-0000429826 00000 n 
-0000427278 00000 n 
-0000430121 00000 n 
-0004751607 00000 n 
-0000430247 00000 n 
-0000430375 00000 n 
-0000430439 00000 n 
-0000430503 00000 n 
-0000430567 00000 n 
-0000430631 00000 n 
-0000430695 00000 n 
-0000430759 00000 n 
-0000433156 00000 n 
-0000433503 00000 n 
-0000433019 00000 n 
-0000430994 00000 n 
-0000433313 00000 n 
-0000433439 00000 n 
-0000435877 00000 n 
-0000436215 00000 n 
-0000436825 00000 n 
-0000435713 00000 n 
-0000433647 00000 n 
-0000436509 00000 n 
-0000436635 00000 n 
-0000436046 00000 n 
-0000436363 00000 n 
-0000436761 00000 n 
-0000438889 00000 n 
-0000438457 00000 n 
-0000436983 00000 n 
-0000438573 00000 n 
-0000438699 00000 n 
-0000438825 00000 n 
-0000441313 00000 n 
-0000441466 00000 n 
-0000441618 00000 n 
-0000442240 00000 n 
-0000441149 00000 n 
-0000439047 00000 n 
-0000441923 00000 n 
-0000442049 00000 n 
-0000442176 00000 n 
-0000441771 00000 n 
-0000444982 00000 n 
-0000444294 00000 n 
-0000442370 00000 n 
-0000444410 00000 n 
-0000444537 00000 n 
-0000444664 00000 n 
-0000444791 00000 n 
-0000444918 00000 n 
-0004756681 00000 n 
-0000445862 00000 n 
-0000445682 00000 n 
-0000445140 00000 n 
-0000445798 00000 n 
-0000448630 00000 n 
-0000448322 00000 n 
-0000445978 00000 n 
-0000448438 00000 n 
-0000450847 00000 n 
-0000451238 00000 n 
-0000450710 00000 n 
-0000448732 00000 n 
-0000451047 00000 n 
-0000453805 00000 n 
-0000453955 00000 n 
-0000454115 00000 n 
-0000454271 00000 n 
-0000454591 00000 n 
-0000455070 00000 n 
-0000453623 00000 n 
-0000451410 00000 n 
-0000454752 00000 n 
-0000454879 00000 n 
-0000455006 00000 n 
-0000454431 00000 n 
-0000457708 00000 n 
-0000775327 00000 n 
-0000779905 00000 n 
-0000457836 00000 n 
-0000457211 00000 n 
-0000455186 00000 n 
-0000457327 00000 n 
-0000457454 00000 n 
-0000457581 00000 n 
-0000457772 00000 n 
-0000460201 00000 n 
-0000461506 00000 n 
-0000460064 00000 n 
-0000457994 00000 n 
-0000460357 00000 n 
-0000460485 00000 n 
-0000460549 00000 n 
-0000460613 00000 n 
-0000460677 00000 n 
-0000460741 00000 n 
-0000460805 00000 n 
-0000460869 00000 n 
-0000460933 00000 n 
-0000460997 00000 n 
-0000461060 00000 n 
-0000461124 00000 n 
-0000461187 00000 n 
-0000461251 00000 n 
-0000461315 00000 n 
-0000461379 00000 n 
-0000461443 00000 n 
-0004756807 00000 n 
-0000463332 00000 n 
-0000463680 00000 n 
-0000463195 00000 n 
-0000461649 00000 n 
-0000463489 00000 n 
-0000463553 00000 n 
-0000463616 00000 n 
-0003446281 00000 n 
-0000466474 00000 n 
-0000467903 00000 n 
-0000466337 00000 n 
-0000463810 00000 n 
-0000466625 00000 n 
-0000466752 00000 n 
-0000466880 00000 n 
-0000466944 00000 n 
-0000467008 00000 n 
-0000467072 00000 n 
-0000467136 00000 n 
-0000467200 00000 n 
-0000467264 00000 n 
-0000467328 00000 n 
-0000467392 00000 n 
-0000467456 00000 n 
-0000467520 00000 n 
-0000467584 00000 n 
-0000467648 00000 n 
-0000467712 00000 n 
-0000467839 00000 n 
-0000471463 00000 n 
-0000472893 00000 n 
-0000471326 00000 n 
-0000468060 00000 n 
-0000471617 00000 n 
-0000471745 00000 n 
-0000471809 00000 n 
-0000471873 00000 n 
-0000471937 00000 n 
-0000472001 00000 n 
-0000472065 00000 n 
-0000472128 00000 n 
-0000472192 00000 n 
-0000472255 00000 n 
-0000472319 00000 n 
-0000472381 00000 n 
-0000472445 00000 n 
-0000472509 00000 n 
-0000472573 00000 n 
-0000472637 00000 n 
-0000472701 00000 n 
-0000472765 00000 n 
-0000472829 00000 n 
-0000474647 00000 n 
-0000478295 00000 n 
-0000475790 00000 n 
-0000474531 00000 n 
-0000473050 00000 n 
-0000475726 00000 n 
-0004751457 00000 n 
-0004753235 00000 n 
+0000400887 00000 n 
+0000400085 00000 n 
+0000398216 00000 n 
+0000400569 00000 n 
+0000400633 00000 n 
+0000400697 00000 n 
+0000400400 00000 n 
+0005310108 00000 n 
+0000400823 00000 n 
+0000402283 00000 n 
+0000402103 00000 n 
+0000401031 00000 n 
+0000402219 00000 n 
+0005313768 00000 n 
+0000404831 00000 n 
+0000404395 00000 n 
+0000402427 00000 n 
+0000404511 00000 n 
+0000404575 00000 n 
+0000404639 00000 n 
+0000404703 00000 n 
+0000404767 00000 n 
+0000407609 00000 n 
+0000407301 00000 n 
+0000404947 00000 n 
+0000407417 00000 n 
+0000407481 00000 n 
+0000407545 00000 n 
+0000410154 00000 n 
+0000410515 00000 n 
+0000410017 00000 n 
+0000407725 00000 n 
+0000410323 00000 n 
+0000410387 00000 n 
+0000410451 00000 n 
+0005309962 00000 n 
+0005309370 00000 n 
+0005312337 00000 n 
+0000412468 00000 n 
+0000412288 00000 n 
+0000410701 00000 n 
+0000412404 00000 n 
+0000412961 00000 n 
+0000412783 00000 n 
+0000412570 00000 n 
+0000413252 00000 n 
+0000413136 00000 n 
+0000413035 00000 n 
+0005313894 00000 n 
+0000414218 00000 n 
+0000413784 00000 n 
+0000413294 00000 n 
+0000413900 00000 n 
+0000413964 00000 n 
+0000414090 00000 n 
+0000414154 00000 n 
+0000414601 00000 n 
+0000414421 00000 n 
+0000414320 00000 n 
+0000414537 00000 n 
+0000416618 00000 n 
+0000416320 00000 n 
+0000417351 00000 n 
+0000416165 00000 n 
+0000414643 00000 n 
+0000416784 00000 n 
+0005310849 00000 n 
+0000417036 00000 n 
+0000416468 00000 n 
+0000417162 00000 n 
+0000417288 00000 n 
+0000420734 00000 n 
+0000421657 00000 n 
+0000420597 00000 n 
+0000417537 00000 n 
+0000420892 00000 n 
+0000421020 00000 n 
+0000421084 00000 n 
+0005312485 00000 n 
+0000421147 00000 n 
+0000421211 00000 n 
+0000421275 00000 n 
+0000421339 00000 n 
+0000421403 00000 n 
+0000421467 00000 n 
+0000421530 00000 n 
+0000421594 00000 n 
+0000423664 00000 n 
+0000423822 00000 n 
+0000424296 00000 n 
+0000423518 00000 n 
+0000421786 00000 n 
+0000423981 00000 n 
+0000424107 00000 n 
+0000424232 00000 n 
+0000427113 00000 n 
+0000448567 00000 n 
+0000427177 00000 n 
+0000426869 00000 n 
+0000424426 00000 n 
+0000426985 00000 n 
+0005314020 00000 n 
+0000429964 00000 n 
+0000430824 00000 n 
+0000429827 00000 n 
+0000427279 00000 n 
+0000430122 00000 n 
+0005309072 00000 n 
+0000430248 00000 n 
+0000430376 00000 n 
+0000430440 00000 n 
+0000430504 00000 n 
+0000430568 00000 n 
+0000430632 00000 n 
+0000430696 00000 n 
+0000430760 00000 n 
+0000433157 00000 n 
+0000433504 00000 n 
+0000433020 00000 n 
+0000430995 00000 n 
+0000433314 00000 n 
+0000433440 00000 n 
+0000435878 00000 n 
+0000436216 00000 n 
+0000436826 00000 n 
+0000435714 00000 n 
+0000433648 00000 n 
+0000436510 00000 n 
+0000436636 00000 n 
+0000436047 00000 n 
+0000436364 00000 n 
+0000436762 00000 n 
+0000438890 00000 n 
+0000438458 00000 n 
+0000436984 00000 n 
+0000438574 00000 n 
+0000438700 00000 n 
+0000438826 00000 n 
+0000441314 00000 n 
+0000441467 00000 n 
+0000441619 00000 n 
+0000442241 00000 n 
+0000441150 00000 n 
+0000439048 00000 n 
+0000441924 00000 n 
+0000442050 00000 n 
+0000442177 00000 n 
+0000441772 00000 n 
+0000444983 00000 n 
+0000444295 00000 n 
+0000442371 00000 n 
+0000444411 00000 n 
+0000444538 00000 n 
+0000444665 00000 n 
+0000444792 00000 n 
+0000444919 00000 n 
+0005314146 00000 n 
+0000445863 00000 n 
+0000445683 00000 n 
+0000445141 00000 n 
+0000445799 00000 n 
+0000448631 00000 n 
+0000448323 00000 n 
+0000445979 00000 n 
+0000448439 00000 n 
+0000450848 00000 n 
+0000451239 00000 n 
+0000450711 00000 n 
+0000448733 00000 n 
+0000451048 00000 n 
+0000453806 00000 n 
+0000453956 00000 n 
+0000454116 00000 n 
+0000454272 00000 n 
+0000454592 00000 n 
+0000455071 00000 n 
+0000453624 00000 n 
+0000451411 00000 n 
+0000454753 00000 n 
+0000454880 00000 n 
+0000455007 00000 n 
+0000454432 00000 n 
+0000457709 00000 n 
+0000807729 00000 n 
+0000812307 00000 n 
+0000457837 00000 n 
+0000457212 00000 n 
+0000455187 00000 n 
+0000457328 00000 n 
+0000457455 00000 n 
+0000457582 00000 n 
+0000457773 00000 n 
+0000460202 00000 n 
+0000461507 00000 n 
+0000460065 00000 n 
+0000457995 00000 n 
+0000460358 00000 n 
+0000460486 00000 n 
+0000460550 00000 n 
+0000460614 00000 n 
+0000460678 00000 n 
+0000460742 00000 n 
+0000460806 00000 n 
+0000460870 00000 n 
+0000460934 00000 n 
+0000460998 00000 n 
+0000461061 00000 n 
+0000461125 00000 n 
+0000461188 00000 n 
+0000461252 00000 n 
+0000461316 00000 n 
+0000461380 00000 n 
+0000461444 00000 n 
+0005314272 00000 n 
+0000463333 00000 n 
+0000463681 00000 n 
+0000463196 00000 n 
+0000461650 00000 n 
+0000463490 00000 n 
+0000463554 00000 n 
+0000463617 00000 n 
+0004003633 00000 n 
+0000466475 00000 n 
+0000467904 00000 n 
+0000466338 00000 n 
+0000463811 00000 n 
+0000466626 00000 n 
+0000466753 00000 n 
+0000466881 00000 n 
+0000466945 00000 n 
+0000467009 00000 n 
+0000467073 00000 n 
+0000467137 00000 n 
+0000467201 00000 n 
+0000467265 00000 n 
+0000467329 00000 n 
+0000467393 00000 n 
+0000467457 00000 n 
+0000467521 00000 n 
+0000467585 00000 n 
+0000467649 00000 n 
+0000467713 00000 n 
+0000467840 00000 n 
+0000471464 00000 n 
+0000472894 00000 n 
+0000471327 00000 n 
+0000468061 00000 n 
+0000471618 00000 n 
+0000471746 00000 n 
+0000471810 00000 n 
+0000471874 00000 n 
+0000471938 00000 n 
+0000472002 00000 n 
+0000472066 00000 n 
+0000472129 00000 n 
+0000472193 00000 n 
+0000472256 00000 n 
+0000472320 00000 n 
+0000472382 00000 n 
+0000472446 00000 n 
+0000472510 00000 n 
+0000472574 00000 n 
+0000472638 00000 n 
+0000472702 00000 n 
+0000472766 00000 n 
+0000472830 00000 n 
+0000474648 00000 n 
+0000478309 00000 n 
+0000475804 00000 n 
+0000474532 00000 n 
+0000473051 00000 n 
+0000475740 00000 n 
+0005308922 00000 n 
+0005310700 00000 n 
 0000475031 00000 n 
-0000475149 00000 n 
-0000475197 00000 n 
-0000475705 00000 n 
-0000478701 00000 n 
-0000478158 00000 n 
-0000475991 00000 n 
-0000478446 00000 n 
-0000478573 00000 n 
-0000478637 00000 n 
-0001999357 00000 n 
-0000482067 00000 n 
-0000484394 00000 n 
-0000481930 00000 n 
-0000478902 00000 n 
-0000482222 00000 n 
-0000482350 00000 n 
-0000482414 00000 n 
-0000482478 00000 n 
-0000482542 00000 n 
-0000482606 00000 n 
-0000482670 00000 n 
-0000482734 00000 n 
-0000482798 00000 n 
-0000482862 00000 n 
-0000482925 00000 n 
-0000482989 00000 n 
-0000483052 00000 n 
-0000483116 00000 n 
-0000483178 00000 n 
-0000483242 00000 n 
-0000483306 00000 n 
-0000483370 00000 n 
-0000483434 00000 n 
-0000483498 00000 n 
-0000483562 00000 n 
-0000483626 00000 n 
-0000483690 00000 n 
-0000483754 00000 n 
-0000483818 00000 n 
-0000483882 00000 n 
-0000483946 00000 n 
-0000484010 00000 n 
-0000484074 00000 n 
-0000484138 00000 n 
-0000484202 00000 n 
-0000484266 00000 n 
-0000484330 00000 n 
-0004756933 00000 n 
-0000485986 00000 n 
-0000485614 00000 n 
-0000484537 00000 n 
-0000485730 00000 n 
-0000485794 00000 n 
-0000485858 00000 n 
-0000485922 00000 n 
-0000487405 00000 n 
-0000487097 00000 n 
-0000486102 00000 n 
-0000487213 00000 n 
-0000487277 00000 n 
-0000487341 00000 n 
-0000489926 00000 n 
-0000489619 00000 n 
-0000487521 00000 n 
-0000489735 00000 n 
-0000489862 00000 n 
-0000493039 00000 n 
-0000493201 00000 n 
-0000494712 00000 n 
-0000492893 00000 n 
-0000490070 00000 n 
-0000493369 00000 n 
-0000493496 00000 n 
-0000493624 00000 n 
-0000493688 00000 n 
-0000493752 00000 n 
-0000493816 00000 n 
-0000493880 00000 n 
-0000493944 00000 n 
-0000494008 00000 n 
-0000494072 00000 n 
-0000494136 00000 n 
-0000494200 00000 n 
-0000494264 00000 n 
-0000494328 00000 n 
-0000494392 00000 n 
-0000494456 00000 n 
-0000494520 00000 n 
-0000494584 00000 n 
-0000494648 00000 n 
-0000498121 00000 n 
-0000499975 00000 n 
-0000497877 00000 n 
-0000494883 00000 n 
-0000497993 00000 n 
-0000498185 00000 n 
-0000498249 00000 n 
-0000498313 00000 n 
-0000498377 00000 n 
-0000498441 00000 n 
-0000498505 00000 n 
-0000498569 00000 n 
-0000498633 00000 n 
-0000498697 00000 n 
-0000498761 00000 n 
-0000498825 00000 n 
-0000498889 00000 n 
-0000498953 00000 n 
-0000499017 00000 n 
-0000499081 00000 n 
-0000499145 00000 n 
-0000499209 00000 n 
-0000499273 00000 n 
-0000499337 00000 n 
-0000499401 00000 n 
-0000499465 00000 n 
-0000499529 00000 n 
-0000499593 00000 n 
-0000499657 00000 n 
-0000499721 00000 n 
-0000499784 00000 n 
-0000499848 00000 n 
-0000499911 00000 n 
-0000501563 00000 n 
-0000501127 00000 n 
-0000500104 00000 n 
-0000501243 00000 n 
-0000501307 00000 n 
-0000501371 00000 n 
-0000501435 00000 n 
-0000501499 00000 n 
-0004757059 00000 n 
-0000503859 00000 n 
-0000503488 00000 n 
-0000501679 00000 n 
-0000503604 00000 n 
-0000503668 00000 n 
-0000503795 00000 n 
-0000505834 00000 n 
-0000505998 00000 n 
-0000506546 00000 n 
-0000505688 00000 n 
-0000504003 00000 n 
-0000506163 00000 n 
-0000506290 00000 n 
-0000506354 00000 n 
-0000506418 00000 n 
-0000506482 00000 n 
-0000510978 00000 n 
-0000525863 00000 n 
-0000512831 00000 n 
-0000510734 00000 n 
-0000506733 00000 n 
-0000510850 00000 n 
-0000511042 00000 n 
-0000511106 00000 n 
-0000511170 00000 n 
-0000511234 00000 n 
-0000511298 00000 n 
-0000511362 00000 n 
-0000511426 00000 n 
-0000511490 00000 n 
-0000511554 00000 n 
-0000511618 00000 n 
-0000511682 00000 n 
-0000511746 00000 n 
-0000511810 00000 n 
-0000511874 00000 n 
-0000511938 00000 n 
-0000512002 00000 n 
-0000512066 00000 n 
-0000512130 00000 n 
-0000512194 00000 n 
-0000512257 00000 n 
-0000512321 00000 n 
-0000512384 00000 n 
-0000512448 00000 n 
-0000512511 00000 n 
-0000512575 00000 n 
-0000512639 00000 n 
-0000512703 00000 n 
-0000512767 00000 n 
-0000514960 00000 n 
-0000515512 00000 n 
-0000514823 00000 n 
-0000513002 00000 n 
-0000515129 00000 n 
-0000515193 00000 n 
-0000515320 00000 n 
-0000515384 00000 n 
-0000515448 00000 n 
-0000517272 00000 n 
-0000516965 00000 n 
-0000515712 00000 n 
-0000517081 00000 n 
-0000517145 00000 n 
-0000517209 00000 n 
-0000518691 00000 n 
-0000518320 00000 n 
-0000517388 00000 n 
-0000518436 00000 n 
-0000518500 00000 n 
-0000518564 00000 n 
-0000518627 00000 n 
-0004757185 00000 n 
-0000520522 00000 n 
-0000520675 00000 n 
-0000520823 00000 n 
-0000520975 00000 n 
-0000521702 00000 n 
-0000520358 00000 n 
-0000518807 00000 n 
-0000521126 00000 n 
-0000521190 00000 n 
-0000521254 00000 n 
-0000521318 00000 n 
-0000521382 00000 n 
-0000521446 00000 n 
-0000521510 00000 n 
-0000521574 00000 n 
-0000521638 00000 n 
-0000532735 00000 n 
-0000538305 00000 n 
-0000528164 00000 n 
-0000525619 00000 n 
-0000521832 00000 n 
-0000525735 00000 n 
-0000525927 00000 n 
-0000525991 00000 n 
-0000526055 00000 n 
-0000526119 00000 n 
-0000526183 00000 n 
-0000526247 00000 n 
-0000526311 00000 n 
-0000526375 00000 n 
-0000526439 00000 n 
-0000526503 00000 n 
-0000526567 00000 n 
-0000526631 00000 n 
-0000526695 00000 n 
-0000526759 00000 n 
-0000526822 00000 n 
-0000526886 00000 n 
-0000526949 00000 n 
-0000527013 00000 n 
-0000527076 00000 n 
-0000527140 00000 n 
-0000527204 00000 n 
-0000527268 00000 n 
-0000527332 00000 n 
-0000527396 00000 n 
-0000527460 00000 n 
-0000527524 00000 n 
-0000527588 00000 n 
-0000527652 00000 n 
-0000527716 00000 n 
-0000527780 00000 n 
-0000527844 00000 n 
-0000527908 00000 n 
-0000527972 00000 n 
-0000528036 00000 n 
-0000528100 00000 n 
-0000535035 00000 n 
-0000532491 00000 n 
-0000528321 00000 n 
-0000532607 00000 n 
-0000532799 00000 n 
-0000532863 00000 n 
-0000532927 00000 n 
-0000532991 00000 n 
-0000533055 00000 n 
-0000533119 00000 n 
-0000533183 00000 n 
-0000533247 00000 n 
-0000533310 00000 n 
-0000533374 00000 n 
-0000533438 00000 n 
-0000533502 00000 n 
-0000533566 00000 n 
-0000533630 00000 n 
-0000533694 00000 n 
-0000533758 00000 n 
-0000533822 00000 n 
-0000533886 00000 n 
-0000533950 00000 n 
-0000534014 00000 n 
-0000534078 00000 n 
-0000534142 00000 n 
-0000534206 00000 n 
-0000534270 00000 n 
-0000534334 00000 n 
-0000534398 00000 n 
-0000534462 00000 n 
-0000534526 00000 n 
-0000534590 00000 n 
-0000534654 00000 n 
-0000534718 00000 n 
-0000534781 00000 n 
-0000534845 00000 n 
-0000534908 00000 n 
-0000534972 00000 n 
-0000540095 00000 n 
-0000538061 00000 n 
-0000535192 00000 n 
-0000538177 00000 n 
-0000538369 00000 n 
-0000538433 00000 n 
-0000538496 00000 n 
-0000538560 00000 n 
-0000538623 00000 n 
-0000538687 00000 n 
-0000538751 00000 n 
-0000538815 00000 n 
-0000538879 00000 n 
-0000538943 00000 n 
-0000539007 00000 n 
-0000539071 00000 n 
-0000539135 00000 n 
-0000539199 00000 n 
-0000539263 00000 n 
-0000539327 00000 n 
-0000539391 00000 n 
-0000539455 00000 n 
-0000539519 00000 n 
-0000539583 00000 n 
-0000539647 00000 n 
-0000539711 00000 n 
-0000539775 00000 n 
-0000539839 00000 n 
-0000539903 00000 n 
-0000539967 00000 n 
-0000540031 00000 n 
-0000540643 00000 n 
-0000540464 00000 n 
-0000540238 00000 n 
-0000540934 00000 n 
-0000540818 00000 n 
-0000540717 00000 n 
-0004757311 00000 n 
-0000541948 00000 n 
-0000541513 00000 n 
-0000540976 00000 n 
-0000541629 00000 n 
-0000541693 00000 n 
-0000541820 00000 n 
-0000541884 00000 n 
-0000542331 00000 n 
-0000542151 00000 n 
-0000542050 00000 n 
-0000542267 00000 n 
-0000544495 00000 n 
-0000544062 00000 n 
-0000542373 00000 n 
-0000544178 00000 n 
-0000544431 00000 n 
-0000546660 00000 n 
-0000546353 00000 n 
-0000544611 00000 n 
-0000546469 00000 n 
-0000546596 00000 n 
-0000549376 00000 n 
-0000549529 00000 n 
-0000549680 00000 n 
-0000549836 00000 n 
-0000550186 00000 n 
-0000549212 00000 n 
-0000546790 00000 n 
-0000549996 00000 n 
-0000550123 00000 n 
-0000552943 00000 n 
-0000552508 00000 n 
-0000550330 00000 n 
-0000552624 00000 n 
-0000552751 00000 n 
-0000552815 00000 n 
-0000552879 00000 n 
-0004757437 00000 n 
-0000556114 00000 n 
-0000555552 00000 n 
-0000553087 00000 n 
-0000555668 00000 n 
-0000555795 00000 n 
-0000555859 00000 n 
-0000555923 00000 n 
-0000556050 00000 n 
-0000558947 00000 n 
-0000558385 00000 n 
-0000556271 00000 n 
-0000558501 00000 n 
-0000558628 00000 n 
-0000558692 00000 n 
-0000558756 00000 n 
-0000558883 00000 n 
-0000561840 00000 n 
-0000561022 00000 n 
-0000559104 00000 n 
-0000561138 00000 n 
-0000561202 00000 n 
-0000561266 00000 n 
-0000561330 00000 n 
-0000561457 00000 n 
-0000561521 00000 n 
-0000561585 00000 n 
-0000561648 00000 n 
-0000561712 00000 n 
-0000561776 00000 n 
-0000564035 00000 n 
-0000564353 00000 n 
-0000564504 00000 n 
-0000564655 00000 n 
-0000565032 00000 n 
-0000563853 00000 n 
-0000561997 00000 n 
-0000564968 00000 n 
-0000564194 00000 n 
-0000564811 00000 n 
-0000567831 00000 n 
-0000567988 00000 n 
-0000568907 00000 n 
-0000567685 00000 n 
-0000565219 00000 n 
-0000568142 00000 n 
-0000568269 00000 n 
-0000568396 00000 n 
-0000568460 00000 n 
-0000568524 00000 n 
-0000568588 00000 n 
-0000568652 00000 n 
-0000568716 00000 n 
-0000568843 00000 n 
-0000747478 00000 n 
-0000571107 00000 n 
-0000570927 00000 n 
-0000569064 00000 n 
-0000571043 00000 n 
-0004757563 00000 n 
-0000574238 00000 n 
-0000573675 00000 n 
-0000571237 00000 n 
-0000573791 00000 n 
-0004753832 00000 n 
-0000573918 00000 n 
-0000573982 00000 n 
-0000574046 00000 n 
-0000574110 00000 n 
-0000574174 00000 n 
-0000576852 00000 n 
-0000576545 00000 n 
-0000574466 00000 n 
-0000576661 00000 n 
-0000576788 00000 n 
-0000579860 00000 n 
-0000579362 00000 n 
-0000576982 00000 n 
-0000579478 00000 n 
-0000579542 00000 n 
-0000579606 00000 n 
-0000579669 00000 n 
-0000579796 00000 n 
-0000582173 00000 n 
-0000582326 00000 n 
-0000583054 00000 n 
-0000582027 00000 n 
-0000580003 00000 n 
-0000582483 00000 n 
-0000582610 00000 n 
-0000582736 00000 n 
-0000582863 00000 n 
-0000582990 00000 n 
-0000584950 00000 n 
-0000584643 00000 n 
-0000583198 00000 n 
-0000584759 00000 n 
-0000584886 00000 n 
-0000585361 00000 n 
-0000585181 00000 n 
-0000585080 00000 n 
-0000585297 00000 n 
-0004757689 00000 n 
-0000587144 00000 n 
-0000589279 00000 n 
-0000587492 00000 n 
-0000587007 00000 n 
-0000585403 00000 n 
-0000587301 00000 n 
-0000596778 00000 n 
-0000596969 00000 n 
-0000589163 00000 n 
-0000587622 00000 n 
-0000596650 00000 n 
-0000596905 00000 n 
-0000593012 00000 n 
-0000593130 00000 n 
-0000593178 00000 n 
-0000593587 00000 n 
-0000593610 00000 n 
-0000593931 00000 n 
-0000596627 00000 n 
-0000599468 00000 n 
-0000599288 00000 n 
-0000597142 00000 n 
-0000599404 00000 n 
-0000601678 00000 n 
-0000602055 00000 n 
-0000601532 00000 n 
-0000599584 00000 n 
-0000601991 00000 n 
-0000601835 00000 n 
-0000607194 00000 n 
-0000604538 00000 n 
-0000604358 00000 n 
-0000602228 00000 n 
-0000604474 00000 n 
-0000607505 00000 n 
-0000607671 00000 n 
-0000608012 00000 n 
-0000607030 00000 n 
-0000604668 00000 n 
-0000607821 00000 n 
-0000607350 00000 n 
-0000607948 00000 n 
-0004757815 00000 n 
-0000716016 00000 n 
-0000610686 00000 n 
-0000610506 00000 n 
-0000608128 00000 n 
-0000610622 00000 n 
-0000613609 00000 n 
-0000613429 00000 n 
-0000610788 00000 n 
-0000613545 00000 n 
-0000616182 00000 n 
-0000615749 00000 n 
-0000613711 00000 n 
-0000615865 00000 n 
-0000615992 00000 n 
-0000616118 00000 n 
-0000618892 00000 n 
-0000619106 00000 n 
-0000618755 00000 n 
-0000616326 00000 n 
-0000619042 00000 n 
-0004752790 00000 n 
-0000621617 00000 n 
-0000621860 00000 n 
-0000621480 00000 n 
-0000619278 00000 n 
-0000621796 00000 n 
-0004754426 00000 n 
-0004754279 00000 n 
-0000626430 00000 n 
-0000624390 00000 n 
-0000624083 00000 n 
-0000622117 00000 n 
-0000624199 00000 n 
-0000624326 00000 n 
-0004757941 00000 n 
-0000626742 00000 n 
-0000626901 00000 n 
-0000627294 00000 n 
-0000626257 00000 n 
-0000624534 00000 n 
-0000627230 00000 n 
-0000626587 00000 n 
-0000627066 00000 n 
-0000629506 00000 n 
-0000629660 00000 n 
-0000633344 00000 n 
-0000630031 00000 n 
-0000629351 00000 n 
-0000627523 00000 n 
-0000629967 00000 n 
-0000629814 00000 n 
-0000632735 00000 n 
-0000632890 00000 n 
-0000633045 00000 n 
-0000633694 00000 n 
-0000632562 00000 n 
-0000630232 00000 n 
-0000633503 00000 n 
-0000633630 00000 n 
-0000633195 00000 n 
-0000637373 00000 n 
-0000638969 00000 n 
-0000637129 00000 n 
-0000633880 00000 n 
-0000637245 00000 n 
-0000637437 00000 n 
-0000637501 00000 n 
-0000637565 00000 n 
-0000637629 00000 n 
-0000637693 00000 n 
-0000637757 00000 n 
-0000637821 00000 n 
-0000637885 00000 n 
-0000637948 00000 n 
-0000638012 00000 n 
-0000638075 00000 n 
-0000638139 00000 n 
-0000638201 00000 n 
-0000638265 00000 n 
-0000638329 00000 n 
-0000638393 00000 n 
-0000638457 00000 n 
-0000638521 00000 n 
-0000638585 00000 n 
-0000638649 00000 n 
-0000638713 00000 n 
-0000638777 00000 n 
-0000638841 00000 n 
-0000638905 00000 n 
-0000642275 00000 n 
-0000641586 00000 n 
-0000639112 00000 n 
-0000641702 00000 n 
-0000641766 00000 n 
-0000641830 00000 n 
-0000641894 00000 n 
-0000641958 00000 n 
-0000642022 00000 n 
-0000642085 00000 n 
-0000642212 00000 n 
-0000646357 00000 n 
-0000644969 00000 n 
-0000642475 00000 n 
-0000645085 00000 n 
-0000645212 00000 n 
-0000645339 00000 n 
-0000645466 00000 n 
-0000645592 00000 n 
-0000645655 00000 n 
-0000645719 00000 n 
-0000645783 00000 n 
-0000645847 00000 n 
-0000645911 00000 n 
-0000645975 00000 n 
-0000646039 00000 n 
-0000646103 00000 n 
-0000646167 00000 n 
-0000646293 00000 n 
-0004758067 00000 n 
-0000649013 00000 n 
-0000648706 00000 n 
-0000646500 00000 n 
-0000648822 00000 n 
-0000648949 00000 n 
-0000652099 00000 n 
-0000651474 00000 n 
-0000649186 00000 n 
-0000651590 00000 n 
-0000651654 00000 n 
-0000651718 00000 n 
-0000651780 00000 n 
-0000651844 00000 n 
-0000651907 00000 n 
-0000651971 00000 n 
-0000652035 00000 n 
-0000654577 00000 n 
-0000654881 00000 n 
-0000657889 00000 n 
-0000655231 00000 n 
-0000654422 00000 n 
-0000652243 00000 n 
-0000655040 00000 n 
-0000654727 00000 n 
-0000655167 00000 n 
-0000658100 00000 n 
-0000657752 00000 n 
-0000655432 00000 n 
-0000658036 00000 n 
-0001197992 00000 n 
-0000660690 00000 n 
-0000660129 00000 n 
-0000658287 00000 n 
-0000660245 00000 n 
-0000660372 00000 n 
-0000660499 00000 n 
-0000660626 00000 n 
-0000662828 00000 n 
-0000662522 00000 n 
-0000660877 00000 n 
-0000662638 00000 n 
-0000662764 00000 n 
-0004758193 00000 n 
-0000665803 00000 n 
-0000665243 00000 n 
-0000662958 00000 n 
-0000665359 00000 n 
-0000665486 00000 n 
-0000665612 00000 n 
-0000665739 00000 n 
-0000667696 00000 n 
-0000667389 00000 n 
-0000665961 00000 n 
-0000667505 00000 n 
-0000667632 00000 n 
-0000669688 00000 n 
-0000669839 00000 n 
-0000670326 00000 n 
-0000669542 00000 n 
-0000667840 00000 n 
-0000670008 00000 n 
-0000670262 00000 n 
-0000672771 00000 n 
-0000673116 00000 n 
-0000672634 00000 n 
-0000670498 00000 n 
-0000672926 00000 n 
-0000673053 00000 n 
-0000675839 00000 n 
-0000676030 00000 n 
-0000675595 00000 n 
-0000673232 00000 n 
-0000675711 00000 n 
-0000675966 00000 n 
-0000678712 00000 n 
-0000678532 00000 n 
-0000676146 00000 n 
-0000678648 00000 n 
-0004758319 00000 n 
-0000681467 00000 n 
-0000681621 00000 n 
-0000681774 00000 n 
-0000681927 00000 n 
-0000682315 00000 n 
-0000681303 00000 n 
-0000678842 00000 n 
-0000682124 00000 n 
-0000682251 00000 n 
-0000685908 00000 n 
-0000686801 00000 n 
-0000685664 00000 n 
-0000682515 00000 n 
-0000685780 00000 n 
-0000685972 00000 n 
-0000686036 00000 n 
-0000686100 00000 n 
-0000686164 00000 n 
-0000686228 00000 n 
-0000686292 00000 n 
-0000686356 00000 n 
-0000686420 00000 n 
-0000686484 00000 n 
-0000686548 00000 n 
-0000686612 00000 n 
-0000686738 00000 n 
-0000689533 00000 n 
-0000690135 00000 n 
-0000689396 00000 n 
-0000686944 00000 n 
-0000689688 00000 n 
-0000689816 00000 n 
-0000689880 00000 n 
-0000689944 00000 n 
-0000690071 00000 n 
-0000692613 00000 n 
-0000692772 00000 n 
-0000692926 00000 n 
-0000696082 00000 n 
-0000693525 00000 n 
-0000692458 00000 n 
-0000690320 00000 n 
-0000693080 00000 n 
-0000693207 00000 n 
-0000693334 00000 n 
-0000693461 00000 n 
-0001176480 00000 n 
-0001187714 00000 n 
-0000696554 00000 n 
-0000695945 00000 n 
-0000693655 00000 n 
-0000696236 00000 n 
-0000696363 00000 n 
-0000696490 00000 n 
-0000699204 00000 n 
-0000702960 00000 n 
-0000699548 00000 n 
-0000699067 00000 n 
-0000696726 00000 n 
-0000699357 00000 n 
-0000699484 00000 n 
-0004758445 00000 n 
-0000703285 00000 n 
-0000704241 00000 n 
-0000702823 00000 n 
-0000699706 00000 n 
-0000703157 00000 n 
-0000703349 00000 n 
-0000703413 00000 n 
-0000703477 00000 n 
-0000703541 00000 n 
-0000703605 00000 n 
-0000703669 00000 n 
-0000703733 00000 n 
-0000703796 00000 n 
-0000703860 00000 n 
-0000703923 00000 n 
-0000703987 00000 n 
-0000704049 00000 n 
-0000704113 00000 n 
-0000704177 00000 n 
-0000706866 00000 n 
-0000707029 00000 n 
-0000707546 00000 n 
-0000706720 00000 n 
-0000704468 00000 n 
-0000707228 00000 n 
-0000707355 00000 n 
-0000707482 00000 n 
-0000710312 00000 n 
-0000709879 00000 n 
-0000707817 00000 n 
-0000709995 00000 n 
-0000710122 00000 n 
-0000710248 00000 n 
-0000711424 00000 n 
-0000711117 00000 n 
-0000710442 00000 n 
-0000711233 00000 n 
-0000711360 00000 n 
-0000713596 00000 n 
-0000713162 00000 n 
-0000711540 00000 n 
-0000713278 00000 n 
-0000713532 00000 n 
-0000716080 00000 n 
-0000715773 00000 n 
-0000713726 00000 n 
-0000715889 00000 n 
-0004758571 00000 n 
-0000717980 00000 n 
-0000717800 00000 n 
-0000716224 00000 n 
-0000717916 00000 n 
-0000720260 00000 n 
-0000719953 00000 n 
-0000718124 00000 n 
-0000720069 00000 n 
-0000720196 00000 n 
-0000724519 00000 n 
-0000722078 00000 n 
-0000721898 00000 n 
-0000720404 00000 n 
-0000722014 00000 n 
-0000725211 00000 n 
-0000725420 00000 n 
-0000725821 00000 n 
-0000724373 00000 n 
-0000722208 00000 n 
-0000725630 00000 n 
-0000725757 00000 n 
-0000725023 00000 n 
-0000725141 00000 n 
-0000725189 00000 n 
-0000729306 00000 n 
-0000728298 00000 n 
-0000726064 00000 n 
-0000728414 00000 n 
-0000728478 00000 n 
-0000728542 00000 n 
-0000728606 00000 n 
-0000728670 00000 n 
-0000728734 00000 n 
-0000728798 00000 n 
-0000728924 00000 n 
-0000728988 00000 n 
-0000729052 00000 n 
-0000729116 00000 n 
-0000729243 00000 n 
-0000731521 00000 n 
-0000732130 00000 n 
-0000731384 00000 n 
-0000729477 00000 n 
-0000731685 00000 n 
-0000731812 00000 n 
-0000731939 00000 n 
-0000732066 00000 n 
-0004758697 00000 n 
-0000734815 00000 n 
-0000734381 00000 n 
-0000734534 00000 n 
-0000735006 00000 n 
-0000734235 00000 n 
-0000732274 00000 n 
-0000734688 00000 n 
-0000734942 00000 n 
-0000738170 00000 n 
-0000738744 00000 n 
-0000737926 00000 n 
-0000735207 00000 n 
-0000738042 00000 n 
-0000738234 00000 n 
-0000738298 00000 n 
-0000738362 00000 n 
-0000738426 00000 n 
-0000738490 00000 n 
-0000738552 00000 n 
-0000738616 00000 n 
-0000738680 00000 n 
-0000740758 00000 n 
-0000741129 00000 n 
-0000740612 00000 n 
-0000738915 00000 n 
-0000741065 00000 n 
-0000740912 00000 n 
-0000743564 00000 n 
-0000743906 00000 n 
-0000743427 00000 n 
-0000741259 00000 n 
-0000743715 00000 n 
-0000743842 00000 n 
-0000747177 00000 n 
-0000746753 00000 n 
-0000748051 00000 n 
-0000746598 00000 n 
-0000744064 00000 n 
-0000747351 00000 n 
-0000746965 00000 n 
-0000747605 00000 n 
-0000747669 00000 n 
-0000747733 00000 n 
-0000747797 00000 n 
-0000747860 00000 n 
-0000747924 00000 n 
-0000747988 00000 n 
-0000750943 00000 n 
-0000753413 00000 n 
-0000751711 00000 n 
-0000750797 00000 n 
-0000748363 00000 n 
-0000751394 00000 n 
-0000751458 00000 n 
-0000751522 00000 n 
-0000751647 00000 n 
-0000751168 00000 n 
-0004758823 00000 n 
-0000753673 00000 n 
-0000753276 00000 n 
-0000752009 00000 n 
-0000753609 00000 n 
-0000758115 00000 n 
-0000758277 00000 n 
-0000758447 00000 n 
-0000756033 00000 n 
-0000755853 00000 n 
-0000753845 00000 n 
-0000755969 00000 n 
-0000758797 00000 n 
-0000757960 00000 n 
-0000756220 00000 n 
-0000758606 00000 n 
-0000758733 00000 n 
-0000763974 00000 n 
-0000761224 00000 n 
-0000761288 00000 n 
-0000760854 00000 n 
-0000758927 00000 n 
-0000760970 00000 n 
-0000761097 00000 n 
-0000764420 00000 n 
-0000763731 00000 n 
-0000761489 00000 n 
-0000763847 00000 n 
-0000764101 00000 n 
-0000764228 00000 n 
-0000764292 00000 n 
-0000764356 00000 n 
-0000767194 00000 n 
-0000766633 00000 n 
-0000764605 00000 n 
-0000766749 00000 n 
-0000766876 00000 n 
-0000767003 00000 n 
-0000767130 00000 n 
-0004758949 00000 n 
-0000769474 00000 n 
-0000769167 00000 n 
-0000767338 00000 n 
-0000769283 00000 n 
-0000769410 00000 n 
-0000769913 00000 n 
-0000769733 00000 n 
-0000769632 00000 n 
-0000769849 00000 n 
-0000771808 00000 n 
-0000771374 00000 n 
-0000769955 00000 n 
-0000771490 00000 n 
-0000771744 00000 n 
-0000774339 00000 n 
-0000774631 00000 n 
-0000774785 00000 n 
-0000778575 00000 n 
-0000775391 00000 n 
-0000774175 00000 n 
-0000771924 00000 n 
-0000774946 00000 n 
-0000775073 00000 n 
-0000774485 00000 n 
-0000775200 00000 n 
-0000779010 00000 n 
-0000778728 00000 n 
-0000779969 00000 n 
-0000778429 00000 n 
-0000775535 00000 n 
-0000778882 00000 n 
-0000779074 00000 n 
-0000779138 00000 n 
-0000779202 00000 n 
-0000779266 00000 n 
-0000779330 00000 n 
-0000779394 00000 n 
-0000779458 00000 n 
-0000779522 00000 n 
-0000779586 00000 n 
-0000779650 00000 n 
-0000779714 00000 n 
-0000779778 00000 n 
-0000782162 00000 n 
-0000782638 00000 n 
-0000782025 00000 n 
-0000780140 00000 n 
-0000782318 00000 n 
-0000782382 00000 n 
-0000782446 00000 n 
-0000782510 00000 n 
-0000782574 00000 n 
-0004759075 00000 n 
-0000785600 00000 n 
-0000785752 00000 n 
-0000786066 00000 n 
-0000788832 00000 n 
-0000787493 00000 n 
-0000785436 00000 n 
-0000782782 00000 n 
-0000786217 00000 n 
-0000786345 00000 n 
-0000786409 00000 n 
-0000786473 00000 n 
-0000786537 00000 n 
-0000786601 00000 n 
-0000786664 00000 n 
-0000786728 00000 n 
-0000786791 00000 n 
-0000786855 00000 n 
-0000786917 00000 n 
-0000786981 00000 n 
-0000787045 00000 n 
-0000787109 00000 n 
-0000787173 00000 n 
-0000787237 00000 n 
-0000787301 00000 n 
-0000787365 00000 n 
-0000787429 00000 n 
-0000785909 00000 n 
-0000789176 00000 n 
-0000788695 00000 n 
-0000787693 00000 n 
-0000788986 00000 n 
-0000789112 00000 n 
-0000791087 00000 n 
-0000790526 00000 n 
-0000789306 00000 n 
-0000790642 00000 n 
-0000790896 00000 n 
-0000791023 00000 n 
-0000793623 00000 n 
-0000796225 00000 n 
-0000793771 00000 n 
-0000824720 00000 n 
-0000822093 00000 n 
-0000822240 00000 n 
-0000794367 00000 n 
-0000793477 00000 n 
-0000791217 00000 n 
-0000793921 00000 n 
-0000794048 00000 n 
-0000794175 00000 n 
-0000794239 00000 n 
-0000794303 00000 n 
-0000822815 00000 n 
-0000843397 00000 n 
-0000822387 00000 n 
-0000845382 00000 n 
-0000822538 00000 n 
-0000863378 00000 n 
-0000842968 00000 n 
-0000894792 00000 n 
-0000823070 00000 n 
-0000796061 00000 n 
-0000794511 00000 n 
-0000822687 00000 n 
-0000822879 00000 n 
-0000822942 00000 n 
-0000823006 00000 n 
-0003541016 00000 n 
-0000861519 00000 n 
-0000892731 00000 n 
-0000843118 00000 n 
-0000916678 00000 n 
-0000843716 00000 n 
-0000824574 00000 n 
-0000823237 00000 n 
-0000843269 00000 n 
-0000843524 00000 n 
-0000843588 00000 n 
-0000843652 00000 n 
-0004759201 00000 n 
-0000914658 00000 n 
-0000928178 00000 n 
-0000860941 00000 n 
-0000930402 00000 n 
-0000861092 00000 n 
-0000861240 00000 n 
-0000945140 00000 n 
-0000892302 00000 n 
-0000956486 00000 n 
-0000861775 00000 n 
-0000845227 00000 n 
-0000843897 00000 n 
-0000861391 00000 n 
-0000861583 00000 n 
-0000861647 00000 n 
-0000861711 00000 n 
-0000943129 00000 n 
-0000954641 00000 n 
-0000892453 00000 n 
-0000971029 00000 n 
-0000892986 00000 n 
-0000863232 00000 n 
-0000861928 00000 n 
-0000892603 00000 n 
-0000892795 00000 n 
-0000892922 00000 n 
-0000969220 00000 n 
-0000981588 00000 n 
-0000913937 00000 n 
-0000983231 00000 n 
-0000914086 00000 n 
-0000914233 00000 n 
-0000914380 00000 n 
-0000992941 00000 n 
-0000914914 00000 n 
-0000894628 00000 n 
-0000893167 00000 n 
-0000914530 00000 n 
-0000914722 00000 n 
-0000914786 00000 n 
-0000914850 00000 n 
-0000992115 00000 n 
-0001006787 00000 n 
-0000927750 00000 n 
-0001000046 00000 n 
-0000927900 00000 n 
-0001007735 00000 n 
-0000928497 00000 n 
-0000916532 00000 n 
-0000915067 00000 n 
-0000928050 00000 n 
-0000928242 00000 n 
-0000928306 00000 n 
-0000928433 00000 n 
-0001006915 00000 n 
-0001046372 00000 n 
-0000942549 00000 n 
-0001014375 00000 n 
-0000942699 00000 n 
-0001047336 00000 n 
-0000942850 00000 n 
-0001077187 00000 n 
-0000954212 00000 n 
-0001091161 00000 n 
-0000943577 00000 n 
-0000930247 00000 n 
-0000928650 00000 n 
-0000943001 00000 n 
-0000943193 00000 n 
-0000943257 00000 n 
-0000943321 00000 n 
-0000943385 00000 n 
-0000943449 00000 n 
-0000943513 00000 n 
-0001046500 00000 n 
-0001090147 00000 n 
-0001090275 00000 n 
-0000954363 00000 n 
-0001104123 00000 n 
-0000954960 00000 n 
-0000944994 00000 n 
-0000943731 00000 n 
-0000954513 00000 n 
-0000954705 00000 n 
-0000954769 00000 n 
-0000954896 00000 n 
-0004759327 00000 n 
-0001123970 00000 n 
-0001124098 00000 n 
-0000968794 00000 n 
-0001124966 00000 n 
-0000968943 00000 n 
-0001134009 00000 n 
-0000969476 00000 n 
-0000956340 00000 n 
-0000955114 00000 n 
-0000969092 00000 n 
-0000969284 00000 n 
-0000969348 00000 n 
-0000969412 00000 n 
-0001140783 00000 n 
-0001140911 00000 n 
-0000981160 00000 n 
-0001141714 00000 n 
-0000981310 00000 n 
-0001147750 00000 n 
-0000981907 00000 n 
-0000970883 00000 n 
-0000969672 00000 n 
-0000981460 00000 n 
-0000981652 00000 n 
-0000981716 00000 n 
-0000981843 00000 n 
-0001153872 00000 n 
-0001154000 00000 n 
-0000992179 00000 n 
-0000983115 00000 n 
-0000982075 00000 n 
-0000991987 00000 n 
-0001006979 00000 n 
-0000992825 00000 n 
-0000992361 00000 n 
-0001006659 00000 n 
-0001046564 00000 n 
-0001007619 00000 n 
-0001007134 00000 n 
-0001046244 00000 n 
-0001090339 00000 n 
-0001047220 00000 n 
-0001046719 00000 n 
-0001090019 00000 n 
-0004759453 00000 n 
-0001124162 00000 n 
-0001091045 00000 n 
-0001090494 00000 n 
-0001123842 00000 n 
-0001140975 00000 n 
-0001124850 00000 n 
-0001124317 00000 n 
-0001140655 00000 n 
-0001154064 00000 n 
-0001141598 00000 n 
-0001141130 00000 n 
-0001153744 00000 n 
-0001154500 00000 n 
-0001154320 00000 n 
-0001154219 00000 n 
-0001154436 00000 n 
-0001154940 00000 n 
-0001154761 00000 n 
-0001154542 00000 n 
-0001155231 00000 n 
-0001155115 00000 n 
-0001155014 00000 n 
-0004759579 00000 n 
-0001156170 00000 n 
-0001155735 00000 n 
-0001155273 00000 n 
-0001155851 00000 n 
-0001155915 00000 n 
-0001156042 00000 n 
-0001156106 00000 n 
-0001156553 00000 n 
-0001156373 00000 n 
-0001156272 00000 n 
-0001156489 00000 n 
-0001157944 00000 n 
-0001158103 00000 n 
-0001161454 00000 n 
-0001158706 00000 n 
-0001157798 00000 n 
-0001156595 00000 n 
-0001158261 00000 n 
-0001158515 00000 n 
-0001158642 00000 n 
-0003233486 00000 n 
-0001161815 00000 n 
-0001161317 00000 n 
-0001158822 00000 n 
-0001161624 00000 n 
-0001161751 00000 n 
-0001164363 00000 n 
-0001164056 00000 n 
-0001162001 00000 n 
-0001164172 00000 n 
-0001164299 00000 n 
-0001167128 00000 n 
-0001167440 00000 n 
-0001168191 00000 n 
-0001166973 00000 n 
-0001164564 00000 n 
-0001167618 00000 n 
-0001167746 00000 n 
-0001167284 00000 n 
-0001167873 00000 n 
-0001168000 00000 n 
-0001168127 00000 n 
-0004759705 00000 n 
-0001169627 00000 n 
-0001169321 00000 n 
-0001168391 00000 n 
-0001169437 00000 n 
-0001172277 00000 n 
-0001171970 00000 n 
-0001169800 00000 n 
-0001172086 00000 n 
-0001172213 00000 n 
-0001174642 00000 n 
-0001174335 00000 n 
-0001172464 00000 n 
-0001174451 00000 n 
-0001174578 00000 n 
-0001176543 00000 n 
-0001176237 00000 n 
-0001174800 00000 n 
-0001176353 00000 n 
-0001179220 00000 n 
-0001178913 00000 n 
-0001176701 00000 n 
-0001179029 00000 n 
-0001179156 00000 n 
-0001182247 00000 n 
-0001181811 00000 n 
-0001179378 00000 n 
-0001181927 00000 n 
-0001181991 00000 n 
-0001182055 00000 n 
-0001182119 00000 n 
-0001182183 00000 n 
-0004759831 00000 n 
-0001185213 00000 n 
-0001184778 00000 n 
-0001182377 00000 n 
-0001184894 00000 n 
-0001184958 00000 n 
-0001185022 00000 n 
-0001185149 00000 n 
-0001187778 00000 n 
-0001187471 00000 n 
-0001185371 00000 n 
-0001187587 00000 n 
-0004751306 00000 n 
-0001189999 00000 n 
-0001189819 00000 n 
-0001187922 00000 n 
-0001189935 00000 n 
-0001191898 00000 n 
-0001191591 00000 n 
-0001190129 00000 n 
-0001191707 00000 n 
-0001191834 00000 n 
-0001194751 00000 n 
-0001194571 00000 n 
-0001192042 00000 n 
-0001194687 00000 n 
-0001197714 00000 n 
-0001201588 00000 n 
-0001198694 00000 n 
-0001197577 00000 n 
-0001194895 00000 n 
-0001197866 00000 n 
-0001198056 00000 n 
-0001198119 00000 n 
-0001198246 00000 n 
-0001198310 00000 n 
-0001198374 00000 n 
-0001198438 00000 n 
-0001198502 00000 n 
-0001198566 00000 n 
-0001198630 00000 n 
-0004759957 00000 n 
-0001201742 00000 n 
-0001206029 00000 n 
-0001203110 00000 n 
-0001201442 00000 n 
-0001198851 00000 n 
-0001201896 00000 n 
-0001202024 00000 n 
-0001202088 00000 n 
-0001202152 00000 n 
-0001202216 00000 n 
-0001202280 00000 n 
-0001202344 00000 n 
-0001202408 00000 n 
-0001202536 00000 n 
-0001202600 00000 n 
-0001202663 00000 n 
-0001202727 00000 n 
-0001202791 00000 n 
-0001202855 00000 n 
-0001202919 00000 n 
-0001203046 00000 n 
-0001206179 00000 n 
-0001206342 00000 n 
-0001207322 00000 n 
-0001205874 00000 n 
-0001203295 00000 n 
-0001206492 00000 n 
-0001206620 00000 n 
-0001206684 00000 n 
-0001206747 00000 n 
-0001206811 00000 n 
-0001206875 00000 n 
-0001206939 00000 n 
-0001207003 00000 n 
-0001207131 00000 n 
-0001207258 00000 n 
-0001210116 00000 n 
-0001209809 00000 n 
-0001207479 00000 n 
-0001209925 00000 n 
-0001210052 00000 n 
-0001213087 00000 n 
-0001212398 00000 n 
-0001210260 00000 n 
-0001212514 00000 n 
-0001212578 00000 n 
-0001212642 00000 n 
-0001212706 00000 n 
-0001212769 00000 n 
-0001212896 00000 n 
-0001213023 00000 n 
-0001216757 00000 n 
-0001216003 00000 n 
-0001213231 00000 n 
-0001216119 00000 n 
-0001216183 00000 n 
-0001216247 00000 n 
-0001216310 00000 n 
-0001216437 00000 n 
-0001216501 00000 n 
-0001216565 00000 n 
-0001216629 00000 n 
-0001216693 00000 n 
-0001220072 00000 n 
-0001219510 00000 n 
-0001216956 00000 n 
-0001219626 00000 n 
-0001219753 00000 n 
-0001219817 00000 n 
-0001219881 00000 n 
-0001220008 00000 n 
-0004760083 00000 n 
-0001222733 00000 n 
-0001224090 00000 n 
-0001222617 00000 n 
-0001220243 00000 n 
-0001223771 00000 n 
-0001223898 00000 n 
-0001223962 00000 n 
-0001224026 00000 n 
-0001223119 00000 n 
-0001223237 00000 n 
-0001223285 00000 n 
-0001223750 00000 n 
-0001227363 00000 n 
-0001227055 00000 n 
-0001224319 00000 n 
-0001227171 00000 n 
-0001227235 00000 n 
-0001227299 00000 n 
-0001229796 00000 n 
-0001229363 00000 n 
-0001227534 00000 n 
-0001229479 00000 n 
-0001229606 00000 n 
-0001229732 00000 n 
-0001231950 00000 n 
-0001231518 00000 n 
-0001229983 00000 n 
-0001231634 00000 n 
-0001231761 00000 n 
-0001231887 00000 n 
-0001234577 00000 n 
-0001234271 00000 n 
-0001232137 00000 n 
-0001234387 00000 n 
-0001234513 00000 n 
-0001238131 00000 n 
-0001237377 00000 n 
-0001234735 00000 n 
-0001237493 00000 n 
-0001237557 00000 n 
-0001237620 00000 n 
-0001237684 00000 n 
-0001237748 00000 n 
-0001237812 00000 n 
-0001237876 00000 n 
-0001237940 00000 n 
-0001238067 00000 n 
-0004760209 00000 n 
-0001240771 00000 n 
-0001240464 00000 n 
-0001238330 00000 n 
-0001240580 00000 n 
-0001240707 00000 n 
-0001243456 00000 n 
-0001243149 00000 n 
-0001240972 00000 n 
-0001243265 00000 n 
-0001243392 00000 n 
-0001246406 00000 n 
-0001245972 00000 n 
-0001243657 00000 n 
-0001246088 00000 n 
-0001246215 00000 n 
-0001246342 00000 n 
-0001257786 00000 n 
-0001248518 00000 n 
-0001258131 00000 n 
-0001248381 00000 n 
-0001246564 00000 n 
-0001257939 00000 n 
-0001258067 00000 n 
-0001254398 00000 n 
-0001254516 00000 n 
-0001254564 00000 n 
-0001254959 00000 n 
-0001254982 00000 n 
-0001255329 00000 n 
-0001257763 00000 n 
-0001261397 00000 n 
-0001261550 00000 n 
-0001261700 00000 n 
-0001265220 00000 n 
-0001262042 00000 n 
-0001261242 00000 n 
-0001258263 00000 n 
-0001261850 00000 n 
-0001261978 00000 n 
-0001265647 00000 n 
-0001265369 00000 n 
-0001265839 00000 n 
-0001265074 00000 n 
-0001262172 00000 n 
-0001265519 00000 n 
-0001265775 00000 n 
-0004760335 00000 n 
-0001268624 00000 n 
-0001269133 00000 n 
-0001268380 00000 n 
-0001265941 00000 n 
-0001268496 00000 n 
-0001268688 00000 n 
-0001268752 00000 n 
-0001268816 00000 n 
-0001268942 00000 n 
-0001269069 00000 n 
-0001271862 00000 n 
-0001271301 00000 n 
-0001269249 00000 n 
-0001271417 00000 n 
-0001271544 00000 n 
-0001271671 00000 n 
-0001271798 00000 n 
-0001274344 00000 n 
-0001274686 00000 n 
-0001274207 00000 n 
-0001272020 00000 n 
-0001274495 00000 n 
-0001274622 00000 n 
-0001277217 00000 n 
-0001277037 00000 n 
-0001274802 00000 n 
-0001277153 00000 n 
-0001279386 00000 n 
-0001279079 00000 n 
-0001277418 00000 n 
-0001279195 00000 n 
-0001281649 00000 n 
-0001282121 00000 n 
-0001281512 00000 n 
-0001279516 00000 n 
-0001281803 00000 n 
-0001281930 00000 n 
-0001282057 00000 n 
-0004760461 00000 n 
-0001287451 00000 n 
-0001284408 00000 n 
-0001284101 00000 n 
-0001282251 00000 n 
-0001284217 00000 n 
-0001284344 00000 n 
-0001289374 00000 n 
-0001287010 00000 n 
-0001287167 00000 n 
-0001297233 00000 n 
-0001287642 00000 n 
-0001286864 00000 n 
-0001284552 00000 n 
-0001287324 00000 n 
-0001287578 00000 n 
-0001296009 00000 n 
-0001303658 00000 n 
-0001296073 00000 n 
-0001289258 00000 n 
-0001287786 00000 n 
-0001295881 00000 n 
-0001291090 00000 n 
-0001291208 00000 n 
-0001291256 00000 n 
-0001291669 00000 n 
-0001291927 00000 n 
-0001291950 00000 n 
-0001292271 00000 n 
-0001292535 00000 n 
-0001294947 00000 n 
-0001295836 00000 n 
-0001295859 00000 n 
-0001303722 00000 n 
-0001297117 00000 n 
-0001296219 00000 n 
-0001303530 00000 n 
-0001298936 00000 n 
-0001299054 00000 n 
-0001299102 00000 n 
-0001299481 00000 n 
-0001299739 00000 n 
-0001299762 00000 n 
-0001300073 00000 n 
-0001300337 00000 n 
-0001302596 00000 n 
-0001303485 00000 n 
-0001303508 00000 n 
-0001306184 00000 n 
-0001305754 00000 n 
-0001303910 00000 n 
-0001305870 00000 n 
-0001305997 00000 n 
-0001306120 00000 n 
-0001308699 00000 n 
-0001312428 00000 n 
-0001309180 00000 n 
-0001308562 00000 n 
-0001306314 00000 n 
-0001308862 00000 n 
-0001308989 00000 n 
-0001309116 00000 n 
-0004760587 00000 n 
-0001312924 00000 n 
-0001312596 00000 n 
-0001313435 00000 n 
-0001312282 00000 n 
-0001309352 00000 n 
-0001312796 00000 n 
-0001312988 00000 n 
-0001313052 00000 n 
-0001313116 00000 n 
-0001313180 00000 n 
-0001313244 00000 n 
-0001313371 00000 n 
-0001316389 00000 n 
-0001316082 00000 n 
-0001313676 00000 n 
-0001316198 00000 n 
-0001316325 00000 n 
-0001319066 00000 n 
-0001318759 00000 n 
-0001316505 00000 n 
-0001318875 00000 n 
-0001319002 00000 n 
-0001321742 00000 n 
-0001322212 00000 n 
-0001321605 00000 n 
-0001319182 00000 n 
-0001321896 00000 n 
-0001322021 00000 n 
-0001322148 00000 n 
-0001323970 00000 n 
-0001323790 00000 n 
-0001322356 00000 n 
-0001323906 00000 n 
-0001326618 00000 n 
-0001325800 00000 n 
-0001324128 00000 n 
-0001325916 00000 n 
-0001326043 00000 n 
-0001326107 00000 n 
-0001326171 00000 n 
-0001326235 00000 n 
-0001326299 00000 n 
-0001326363 00000 n 
-0001326427 00000 n 
-0001326491 00000 n 
-0001326554 00000 n 
-0004760713 00000 n 
-0001329163 00000 n 
-0001329640 00000 n 
-0001329026 00000 n 
-0001326762 00000 n 
-0001329321 00000 n 
-0001329448 00000 n 
-0001329512 00000 n 
-0001329576 00000 n 
-0001331902 00000 n 
-0001331966 00000 n 
-0001331658 00000 n 
-0001329770 00000 n 
-0001331774 00000 n 
-0001333587 00000 n 
-0001333407 00000 n 
-0001332082 00000 n 
-0001333523 00000 n 
-0001335397 00000 n 
-0001335750 00000 n 
-0001335260 00000 n 
-0001333703 00000 n 
-0001335558 00000 n 
-0001335622 00000 n 
-0001335686 00000 n 
-0001341630 00000 n 
-0001337687 00000 n 
-0001337251 00000 n 
-0001335894 00000 n 
-0001337367 00000 n 
-0001337431 00000 n 
-0001337495 00000 n 
-0001337559 00000 n 
-0001337623 00000 n 
-0001339080 00000 n 
-0001338900 00000 n 
-0001337831 00000 n 
-0001339016 00000 n 
-0004760839 00000 n 
-0001341348 00000 n 
-0001341694 00000 n 
-0001341211 00000 n 
-0001339196 00000 n 
+0000475163 00000 n 
+0000475211 00000 n 
+0000475719 00000 n 
+0000478715 00000 n 
+0000478172 00000 n 
+0000476005 00000 n 
+0000478460 00000 n 
+0000478587 00000 n 
+0000478651 00000 n 
+0002426830 00000 n 
+0000482081 00000 n 
+0000484408 00000 n 
+0000481944 00000 n 
+0000478916 00000 n 
+0000482236 00000 n 
+0000482364 00000 n 
+0000482428 00000 n 
+0000482492 00000 n 
+0000482556 00000 n 
+0000482620 00000 n 
+0000482684 00000 n 
+0000482748 00000 n 
+0000482812 00000 n 
+0000482876 00000 n 
+0000482939 00000 n 
+0000483003 00000 n 
+0000483066 00000 n 
+0000483130 00000 n 
+0000483192 00000 n 
+0000483256 00000 n 
+0000483320 00000 n 
+0000483384 00000 n 
+0000483448 00000 n 
+0000483512 00000 n 
+0000483576 00000 n 
+0000483640 00000 n 
+0000483704 00000 n 
+0000483768 00000 n 
+0000483832 00000 n 
+0000483896 00000 n 
+0000483960 00000 n 
+0000484024 00000 n 
+0000484088 00000 n 
+0000484152 00000 n 
+0000484216 00000 n 
+0000484280 00000 n 
+0000484344 00000 n 
+0005314398 00000 n 
+0000486000 00000 n 
+0000485628 00000 n 
+0000484551 00000 n 
+0000485744 00000 n 
+0000485808 00000 n 
+0000485872 00000 n 
+0000485936 00000 n 
+0000487419 00000 n 
+0000487111 00000 n 
+0000486116 00000 n 
+0000487227 00000 n 
+0000487291 00000 n 
+0000487355 00000 n 
+0000489940 00000 n 
+0000489633 00000 n 
+0000487535 00000 n 
+0000489749 00000 n 
+0000489876 00000 n 
+0000493053 00000 n 
+0000493215 00000 n 
+0000494726 00000 n 
+0000492907 00000 n 
+0000490084 00000 n 
+0000493383 00000 n 
+0000493510 00000 n 
+0000493638 00000 n 
+0000493702 00000 n 
+0000493766 00000 n 
+0000493830 00000 n 
+0000493894 00000 n 
+0000493958 00000 n 
+0000494022 00000 n 
+0000494086 00000 n 
+0000494150 00000 n 
+0000494214 00000 n 
+0000494278 00000 n 
+0000494342 00000 n 
+0000494406 00000 n 
+0000494470 00000 n 
+0000494534 00000 n 
+0000494598 00000 n 
+0000494662 00000 n 
+0000498135 00000 n 
+0000499989 00000 n 
+0000497891 00000 n 
+0000494897 00000 n 
+0000498007 00000 n 
+0000498199 00000 n 
+0000498263 00000 n 
+0000498327 00000 n 
+0000498391 00000 n 
+0000498455 00000 n 
+0000498519 00000 n 
+0000498583 00000 n 
+0000498647 00000 n 
+0000498711 00000 n 
+0000498775 00000 n 
+0000498839 00000 n 
+0000498903 00000 n 
+0000498967 00000 n 
+0000499031 00000 n 
+0000499095 00000 n 
+0000499159 00000 n 
+0000499223 00000 n 
+0000499287 00000 n 
+0000499351 00000 n 
+0000499415 00000 n 
+0000499479 00000 n 
+0000499543 00000 n 
+0000499607 00000 n 
+0000499671 00000 n 
+0000499735 00000 n 
+0000499798 00000 n 
+0000499862 00000 n 
+0000499925 00000 n 
+0000501577 00000 n 
+0000501141 00000 n 
+0000500118 00000 n 
+0000501257 00000 n 
+0000501321 00000 n 
+0000501385 00000 n 
+0000501449 00000 n 
+0000501513 00000 n 
+0005314524 00000 n 
+0000503873 00000 n 
+0000503502 00000 n 
+0000501693 00000 n 
+0000503618 00000 n 
+0000503682 00000 n 
+0000503809 00000 n 
+0000505848 00000 n 
+0000506012 00000 n 
+0000506560 00000 n 
+0000505702 00000 n 
+0000504017 00000 n 
+0000506177 00000 n 
+0000506304 00000 n 
+0000506368 00000 n 
+0000506432 00000 n 
+0000506496 00000 n 
+0000510992 00000 n 
+0000525877 00000 n 
+0000512845 00000 n 
+0000510748 00000 n 
+0000506747 00000 n 
+0000510864 00000 n 
+0000511056 00000 n 
+0000511120 00000 n 
+0000511184 00000 n 
+0000511248 00000 n 
+0000511312 00000 n 
+0000511376 00000 n 
+0000511440 00000 n 
+0000511504 00000 n 
+0000511568 00000 n 
+0000511632 00000 n 
+0000511696 00000 n 
+0000511760 00000 n 
+0000511824 00000 n 
+0000511888 00000 n 
+0000511952 00000 n 
+0000512016 00000 n 
+0000512080 00000 n 
+0000512144 00000 n 
+0000512208 00000 n 
+0000512271 00000 n 
+0000512335 00000 n 
+0000512398 00000 n 
+0000512462 00000 n 
+0000512525 00000 n 
+0000512589 00000 n 
+0000512653 00000 n 
+0000512717 00000 n 
+0000512781 00000 n 
+0000514974 00000 n 
+0000515526 00000 n 
+0000514837 00000 n 
+0000513016 00000 n 
+0000515143 00000 n 
+0000515207 00000 n 
+0000515334 00000 n 
+0000515398 00000 n 
+0000515462 00000 n 
+0000517286 00000 n 
+0000516979 00000 n 
+0000515726 00000 n 
+0000517095 00000 n 
+0000517159 00000 n 
+0000517223 00000 n 
+0000518705 00000 n 
+0000518334 00000 n 
+0000517402 00000 n 
+0000518450 00000 n 
+0000518514 00000 n 
+0000518578 00000 n 
+0000518641 00000 n 
+0005314650 00000 n 
+0000520536 00000 n 
+0000520689 00000 n 
+0000520837 00000 n 
+0000520989 00000 n 
+0000521716 00000 n 
+0000520372 00000 n 
+0000518821 00000 n 
+0000521140 00000 n 
+0000521204 00000 n 
+0000521268 00000 n 
+0000521332 00000 n 
+0000521396 00000 n 
+0000521460 00000 n 
+0000521524 00000 n 
+0000521588 00000 n 
+0000521652 00000 n 
+0000532749 00000 n 
+0000538319 00000 n 
+0000528178 00000 n 
+0000525633 00000 n 
+0000521846 00000 n 
+0000525749 00000 n 
+0000525941 00000 n 
+0000526005 00000 n 
+0000526069 00000 n 
+0000526133 00000 n 
+0000526197 00000 n 
+0000526261 00000 n 
+0000526325 00000 n 
+0000526389 00000 n 
+0000526453 00000 n 
+0000526517 00000 n 
+0000526581 00000 n 
+0000526645 00000 n 
+0000526709 00000 n 
+0000526773 00000 n 
+0000526836 00000 n 
+0000526900 00000 n 
+0000526963 00000 n 
+0000527027 00000 n 
+0000527090 00000 n 
+0000527154 00000 n 
+0000527218 00000 n 
+0000527282 00000 n 
+0000527346 00000 n 
+0000527410 00000 n 
+0000527474 00000 n 
+0000527538 00000 n 
+0000527602 00000 n 
+0000527666 00000 n 
+0000527730 00000 n 
+0000527794 00000 n 
+0000527858 00000 n 
+0000527922 00000 n 
+0000527986 00000 n 
+0000528050 00000 n 
+0000528114 00000 n 
+0000535049 00000 n 
+0000532505 00000 n 
+0000528335 00000 n 
+0000532621 00000 n 
+0000532813 00000 n 
+0000532877 00000 n 
+0000532941 00000 n 
+0000533005 00000 n 
+0000533069 00000 n 
+0000533133 00000 n 
+0000533197 00000 n 
+0000533261 00000 n 
+0000533324 00000 n 
+0000533388 00000 n 
+0000533452 00000 n 
+0000533516 00000 n 
+0000533580 00000 n 
+0000533644 00000 n 
+0000533708 00000 n 
+0000533772 00000 n 
+0000533836 00000 n 
+0000533900 00000 n 
+0000533964 00000 n 
+0000534028 00000 n 
+0000534092 00000 n 
+0000534156 00000 n 
+0000534220 00000 n 
+0000534284 00000 n 
+0000534348 00000 n 
+0000534412 00000 n 
+0000534476 00000 n 
+0000534540 00000 n 
+0000534604 00000 n 
+0000534668 00000 n 
+0000534732 00000 n 
+0000534795 00000 n 
+0000534859 00000 n 
+0000534922 00000 n 
+0000534986 00000 n 
+0000540109 00000 n 
+0000538075 00000 n 
+0000535206 00000 n 
+0000538191 00000 n 
+0000538383 00000 n 
+0000538447 00000 n 
+0000538510 00000 n 
+0000538574 00000 n 
+0000538637 00000 n 
+0000538701 00000 n 
+0000538765 00000 n 
+0000538829 00000 n 
+0000538893 00000 n 
+0000538957 00000 n 
+0000539021 00000 n 
+0000539085 00000 n 
+0000539149 00000 n 
+0000539213 00000 n 
+0000539277 00000 n 
+0000539341 00000 n 
+0000539405 00000 n 
+0000539469 00000 n 
+0000539533 00000 n 
+0000539597 00000 n 
+0000539661 00000 n 
+0000539725 00000 n 
+0000539789 00000 n 
+0000539853 00000 n 
+0000539917 00000 n 
+0000539981 00000 n 
+0000540045 00000 n 
+0000540657 00000 n 
+0000540478 00000 n 
+0000540252 00000 n 
+0000540948 00000 n 
+0000540832 00000 n 
+0000540731 00000 n 
+0005314776 00000 n 
+0000541962 00000 n 
+0000541527 00000 n 
+0000540990 00000 n 
+0000541643 00000 n 
+0000541707 00000 n 
+0000541834 00000 n 
+0000541898 00000 n 
+0000542345 00000 n 
+0000542165 00000 n 
+0000542064 00000 n 
+0000542281 00000 n 
+0000544509 00000 n 
+0000544076 00000 n 
+0000542387 00000 n 
+0000544192 00000 n 
+0000544445 00000 n 
+0000546674 00000 n 
+0000546367 00000 n 
+0000544625 00000 n 
+0000546483 00000 n 
+0000546610 00000 n 
+0000549390 00000 n 
+0000549543 00000 n 
+0000549694 00000 n 
+0000549850 00000 n 
+0000550200 00000 n 
+0000549226 00000 n 
+0000546804 00000 n 
+0000550010 00000 n 
+0000550137 00000 n 
+0000552957 00000 n 
+0000552522 00000 n 
+0000550344 00000 n 
+0000552638 00000 n 
+0000552765 00000 n 
+0000552829 00000 n 
+0000552893 00000 n 
+0005314902 00000 n 
+0000556128 00000 n 
+0000555566 00000 n 
+0000553101 00000 n 
+0000555682 00000 n 
+0000555809 00000 n 
+0000555873 00000 n 
+0000555937 00000 n 
+0000556064 00000 n 
+0000558961 00000 n 
+0000558399 00000 n 
+0000556285 00000 n 
+0000558515 00000 n 
+0000558642 00000 n 
+0000558706 00000 n 
+0000558770 00000 n 
+0000558897 00000 n 
+0000561854 00000 n 
+0000561036 00000 n 
+0000559118 00000 n 
+0000561152 00000 n 
+0000561216 00000 n 
+0000561280 00000 n 
+0000561344 00000 n 
+0000561471 00000 n 
+0000561535 00000 n 
+0000561599 00000 n 
+0000561662 00000 n 
+0000561726 00000 n 
+0000561790 00000 n 
+0000564049 00000 n 
+0000564367 00000 n 
+0000564518 00000 n 
+0000564669 00000 n 
+0000565046 00000 n 
+0000563867 00000 n 
+0000562011 00000 n 
+0000564982 00000 n 
+0000564208 00000 n 
+0000564825 00000 n 
+0000567845 00000 n 
+0000568002 00000 n 
+0000568921 00000 n 
+0000567699 00000 n 
+0000565233 00000 n 
+0000568156 00000 n 
+0000568283 00000 n 
+0000568410 00000 n 
+0000568474 00000 n 
+0000568538 00000 n 
+0000568602 00000 n 
+0000568666 00000 n 
+0000568730 00000 n 
+0000568857 00000 n 
+0000779880 00000 n 
+0000571121 00000 n 
+0000570941 00000 n 
+0000569078 00000 n 
+0000571057 00000 n 
+0005315028 00000 n 
+0000574252 00000 n 
+0000573689 00000 n 
+0000571251 00000 n 
+0000573805 00000 n 
+0005311297 00000 n 
+0000573932 00000 n 
+0000573996 00000 n 
+0000574060 00000 n 
+0000574124 00000 n 
+0000574188 00000 n 
+0000576866 00000 n 
+0000576559 00000 n 
+0000574480 00000 n 
+0000576675 00000 n 
+0000576802 00000 n 
+0000579874 00000 n 
+0000579376 00000 n 
+0000576996 00000 n 
+0000579492 00000 n 
+0000579556 00000 n 
+0000579620 00000 n 
+0000579683 00000 n 
+0000579810 00000 n 
+0000582187 00000 n 
+0000582340 00000 n 
+0000583068 00000 n 
+0000582041 00000 n 
+0000580017 00000 n 
+0000582497 00000 n 
+0000582624 00000 n 
+0000582750 00000 n 
+0000582877 00000 n 
+0000583004 00000 n 
+0000584964 00000 n 
+0000584657 00000 n 
+0000583212 00000 n 
+0000584773 00000 n 
+0000584900 00000 n 
+0000585375 00000 n 
+0000585195 00000 n 
+0000585094 00000 n 
+0000585311 00000 n 
+0005315154 00000 n 
+0000587158 00000 n 
+0000589295 00000 n 
+0000587506 00000 n 
+0000587021 00000 n 
+0000585417 00000 n 
+0000587315 00000 n 
+0000629166 00000 n 
+0000629356 00000 n 
+0000589179 00000 n 
+0000587636 00000 n 
+0000629038 00000 n 
+0000629293 00000 n 
+0000593032 00000 n 
+0000593164 00000 n 
+0000593212 00000 n 
+0000593625 00000 n 
+0000593648 00000 n 
+0000593867 00000 n 
+0000631855 00000 n 
+0000631675 00000 n 
+0000629529 00000 n 
+0000631791 00000 n 
+0000634065 00000 n 
+0000634442 00000 n 
+0000633919 00000 n 
+0000631971 00000 n 
+0000634378 00000 n 
+0000634222 00000 n 
+0000639581 00000 n 
+0000636925 00000 n 
+0000636745 00000 n 
+0000634615 00000 n 
+0000636861 00000 n 
+0000639892 00000 n 
+0000640058 00000 n 
+0000640399 00000 n 
+0000639417 00000 n 
+0000637055 00000 n 
+0000640208 00000 n 
+0000639737 00000 n 
+0000640335 00000 n 
+0005315280 00000 n 
+0000748403 00000 n 
+0000643073 00000 n 
+0000642893 00000 n 
+0000640515 00000 n 
+0000643009 00000 n 
+0000645996 00000 n 
+0000645816 00000 n 
+0000643175 00000 n 
+0000645932 00000 n 
+0000648569 00000 n 
+0000648136 00000 n 
+0000646098 00000 n 
+0000648252 00000 n 
+0000648379 00000 n 
+0000648505 00000 n 
+0000651279 00000 n 
+0000651493 00000 n 
+0000651142 00000 n 
+0000648713 00000 n 
+0000651429 00000 n 
+0005310255 00000 n 
+0000654004 00000 n 
+0000654247 00000 n 
+0000653867 00000 n 
+0000651665 00000 n 
+0000654183 00000 n 
+0005311891 00000 n 
+0005311744 00000 n 
+0000658817 00000 n 
+0000656777 00000 n 
+0000656470 00000 n 
+0000654504 00000 n 
+0000656586 00000 n 
+0000656713 00000 n 
+0005315406 00000 n 
+0000659129 00000 n 
+0000659288 00000 n 
+0000659681 00000 n 
+0000658644 00000 n 
+0000656921 00000 n 
+0000659617 00000 n 
+0000658974 00000 n 
+0000659453 00000 n 
+0000661893 00000 n 
+0000662047 00000 n 
+0000665731 00000 n 
+0000662418 00000 n 
+0000661738 00000 n 
+0000659910 00000 n 
+0000662354 00000 n 
+0000662201 00000 n 
+0000665122 00000 n 
+0000665277 00000 n 
+0000665432 00000 n 
+0000666081 00000 n 
+0000664949 00000 n 
+0000662619 00000 n 
+0000665890 00000 n 
+0000666017 00000 n 
+0000665582 00000 n 
+0000669760 00000 n 
+0000671356 00000 n 
+0000669516 00000 n 
+0000666267 00000 n 
+0000669632 00000 n 
+0000669824 00000 n 
+0000669888 00000 n 
+0000669952 00000 n 
+0000670016 00000 n 
+0000670080 00000 n 
+0000670144 00000 n 
+0000670208 00000 n 
+0000670272 00000 n 
+0000670335 00000 n 
+0000670399 00000 n 
+0000670462 00000 n 
+0000670526 00000 n 
+0000670588 00000 n 
+0000670652 00000 n 
+0000670716 00000 n 
+0000670780 00000 n 
+0000670844 00000 n 
+0000670908 00000 n 
+0000670972 00000 n 
+0000671036 00000 n 
+0000671100 00000 n 
+0000671164 00000 n 
+0000671228 00000 n 
+0000671292 00000 n 
+0000674662 00000 n 
+0000673973 00000 n 
+0000671499 00000 n 
+0000674089 00000 n 
+0000674153 00000 n 
+0000674217 00000 n 
+0000674281 00000 n 
+0000674345 00000 n 
+0000674409 00000 n 
+0000674472 00000 n 
+0000674599 00000 n 
+0000678744 00000 n 
+0000677356 00000 n 
+0000674862 00000 n 
+0000677472 00000 n 
+0000677599 00000 n 
+0000677726 00000 n 
+0000677853 00000 n 
+0000677979 00000 n 
+0000678042 00000 n 
+0000678106 00000 n 
+0000678170 00000 n 
+0000678234 00000 n 
+0000678298 00000 n 
+0000678362 00000 n 
+0000678426 00000 n 
+0000678490 00000 n 
+0000678554 00000 n 
+0000678680 00000 n 
+0005315532 00000 n 
+0000681400 00000 n 
+0000681093 00000 n 
+0000678887 00000 n 
+0000681209 00000 n 
+0000681336 00000 n 
+0000684486 00000 n 
+0000683861 00000 n 
+0000681573 00000 n 
+0000683977 00000 n 
+0000684041 00000 n 
+0000684105 00000 n 
+0000684167 00000 n 
+0000684231 00000 n 
+0000684294 00000 n 
+0000684358 00000 n 
+0000684422 00000 n 
+0000686964 00000 n 
+0000687268 00000 n 
+0000690276 00000 n 
+0000687618 00000 n 
+0000686809 00000 n 
+0000684630 00000 n 
+0000687427 00000 n 
+0000687114 00000 n 
+0000687554 00000 n 
+0000690487 00000 n 
+0000690139 00000 n 
+0000687819 00000 n 
+0000690423 00000 n 
+0001230394 00000 n 
+0000693077 00000 n 
+0000692516 00000 n 
+0000690674 00000 n 
+0000692632 00000 n 
+0000692759 00000 n 
+0000692886 00000 n 
+0000693013 00000 n 
+0000695215 00000 n 
+0000694909 00000 n 
+0000693264 00000 n 
+0000695025 00000 n 
+0000695151 00000 n 
+0005315658 00000 n 
+0000698190 00000 n 
+0000697630 00000 n 
+0000695345 00000 n 
+0000697746 00000 n 
+0000697873 00000 n 
+0000697999 00000 n 
+0000698126 00000 n 
+0000700083 00000 n 
+0000699776 00000 n 
+0000698348 00000 n 
+0000699892 00000 n 
+0000700019 00000 n 
+0000702075 00000 n 
+0000702226 00000 n 
+0000702713 00000 n 
+0000701929 00000 n 
+0000700227 00000 n 
+0000702395 00000 n 
+0000702649 00000 n 
+0000705158 00000 n 
+0000705503 00000 n 
+0000705021 00000 n 
+0000702885 00000 n 
+0000705313 00000 n 
+0000705440 00000 n 
+0000708226 00000 n 
+0000708417 00000 n 
+0000707982 00000 n 
+0000705619 00000 n 
+0000708098 00000 n 
+0000708353 00000 n 
+0000711099 00000 n 
+0000710919 00000 n 
+0000708533 00000 n 
+0000711035 00000 n 
+0005315784 00000 n 
+0000713854 00000 n 
+0000714008 00000 n 
+0000714161 00000 n 
+0000714314 00000 n 
+0000714702 00000 n 
+0000713690 00000 n 
+0000711229 00000 n 
+0000714511 00000 n 
+0000714638 00000 n 
+0000718295 00000 n 
+0000719188 00000 n 
+0000718051 00000 n 
+0000714902 00000 n 
+0000718167 00000 n 
+0000718359 00000 n 
+0000718423 00000 n 
+0000718487 00000 n 
+0000718551 00000 n 
+0000718615 00000 n 
+0000718679 00000 n 
+0000718743 00000 n 
+0000718807 00000 n 
+0000718871 00000 n 
+0000718935 00000 n 
+0000718999 00000 n 
+0000719125 00000 n 
+0000721920 00000 n 
+0000722522 00000 n 
+0000721783 00000 n 
+0000719331 00000 n 
+0000722075 00000 n 
+0000722203 00000 n 
+0000722267 00000 n 
+0000722331 00000 n 
+0000722458 00000 n 
+0000725000 00000 n 
+0000725159 00000 n 
+0000725313 00000 n 
+0000728469 00000 n 
+0000725912 00000 n 
+0000724845 00000 n 
+0000722707 00000 n 
+0000725467 00000 n 
+0000725594 00000 n 
+0000725721 00000 n 
+0000725848 00000 n 
+0001208882 00000 n 
+0001220116 00000 n 
+0000728941 00000 n 
+0000728332 00000 n 
+0000726042 00000 n 
+0000728623 00000 n 
+0000728750 00000 n 
+0000728877 00000 n 
+0000731591 00000 n 
+0000735347 00000 n 
+0000731935 00000 n 
+0000731454 00000 n 
+0000729113 00000 n 
+0000731744 00000 n 
+0000731871 00000 n 
+0005315910 00000 n 
+0000735672 00000 n 
+0000736628 00000 n 
+0000735210 00000 n 
+0000732093 00000 n 
+0000735544 00000 n 
+0000735736 00000 n 
+0000735800 00000 n 
+0000735864 00000 n 
+0000735928 00000 n 
+0000735992 00000 n 
+0000736056 00000 n 
+0000736120 00000 n 
+0000736183 00000 n 
+0000736247 00000 n 
+0000736310 00000 n 
+0000736374 00000 n 
+0000736436 00000 n 
+0000736500 00000 n 
+0000736564 00000 n 
+0000739253 00000 n 
+0000739416 00000 n 
+0000739933 00000 n 
+0000739107 00000 n 
+0000736855 00000 n 
+0000739615 00000 n 
+0000739742 00000 n 
+0000739869 00000 n 
+0000742699 00000 n 
+0000742266 00000 n 
+0000740204 00000 n 
+0000742382 00000 n 
+0000742509 00000 n 
+0000742635 00000 n 
+0000743811 00000 n 
+0000743504 00000 n 
+0000742829 00000 n 
+0000743620 00000 n 
+0000743747 00000 n 
+0000745983 00000 n 
+0000745549 00000 n 
+0000743927 00000 n 
+0000745665 00000 n 
+0000745919 00000 n 
+0000748467 00000 n 
+0000748160 00000 n 
+0000746113 00000 n 
+0000748276 00000 n 
+0005316036 00000 n 
+0000750367 00000 n 
+0000750187 00000 n 
+0000748611 00000 n 
+0000750303 00000 n 
+0000752647 00000 n 
+0000752340 00000 n 
+0000750511 00000 n 
+0000752456 00000 n 
+0000752583 00000 n 
+0000756906 00000 n 
+0000754465 00000 n 
+0000754285 00000 n 
+0000752791 00000 n 
+0000754401 00000 n 
+0000757613 00000 n 
+0000757822 00000 n 
+0000758223 00000 n 
+0000756760 00000 n 
+0000754595 00000 n 
+0000758032 00000 n 
+0000758159 00000 n 
+0000757411 00000 n 
+0000757543 00000 n 
+0000757591 00000 n 
+0000761708 00000 n 
+0000760700 00000 n 
+0000758466 00000 n 
+0000760816 00000 n 
+0000760880 00000 n 
+0000760944 00000 n 
+0000761008 00000 n 
+0000761072 00000 n 
+0000761136 00000 n 
+0000761200 00000 n 
+0000761326 00000 n 
+0000761390 00000 n 
+0000761454 00000 n 
+0000761518 00000 n 
+0000761645 00000 n 
+0000763923 00000 n 
+0000764532 00000 n 
+0000763786 00000 n 
+0000761879 00000 n 
+0000764087 00000 n 
+0000764214 00000 n 
+0000764341 00000 n 
+0000764468 00000 n 
+0005316162 00000 n 
+0000767217 00000 n 
+0000766783 00000 n 
+0000766936 00000 n 
+0000767408 00000 n 
+0000766637 00000 n 
+0000764676 00000 n 
+0000767090 00000 n 
+0000767344 00000 n 
+0000770572 00000 n 
+0000771146 00000 n 
+0000770328 00000 n 
+0000767609 00000 n 
+0000770444 00000 n 
+0000770636 00000 n 
+0000770700 00000 n 
+0000770764 00000 n 
+0000770828 00000 n 
+0000770892 00000 n 
+0000770954 00000 n 
+0000771018 00000 n 
+0000771082 00000 n 
+0000773160 00000 n 
+0000773531 00000 n 
+0000773014 00000 n 
+0000771317 00000 n 
+0000773467 00000 n 
+0000773314 00000 n 
+0000775966 00000 n 
+0000776308 00000 n 
+0000775829 00000 n 
+0000773661 00000 n 
+0000776117 00000 n 
+0000776244 00000 n 
+0000779579 00000 n 
+0000779155 00000 n 
+0000780453 00000 n 
+0000779000 00000 n 
+0000776466 00000 n 
+0000779753 00000 n 
+0000779367 00000 n 
+0000780007 00000 n 
+0000780071 00000 n 
+0000780135 00000 n 
+0000780199 00000 n 
+0000780262 00000 n 
+0000780326 00000 n 
+0000780390 00000 n 
+0000783345 00000 n 
+0000785815 00000 n 
+0000784113 00000 n 
+0000783199 00000 n 
+0000780765 00000 n 
+0000783796 00000 n 
+0000783860 00000 n 
+0000783924 00000 n 
+0000784049 00000 n 
+0000783570 00000 n 
+0005316288 00000 n 
+0000786075 00000 n 
+0000785678 00000 n 
+0000784411 00000 n 
+0000786011 00000 n 
+0000790517 00000 n 
+0000790679 00000 n 
+0000790849 00000 n 
+0000788435 00000 n 
+0000788255 00000 n 
+0000786247 00000 n 
+0000788371 00000 n 
+0000791199 00000 n 
+0000790362 00000 n 
+0000788622 00000 n 
+0000791008 00000 n 
+0000791135 00000 n 
+0000796376 00000 n 
+0000793626 00000 n 
+0000793690 00000 n 
+0000793256 00000 n 
+0000791329 00000 n 
+0000793372 00000 n 
+0000793499 00000 n 
+0000796822 00000 n 
+0000796133 00000 n 
+0000793891 00000 n 
+0000796249 00000 n 
+0000796503 00000 n 
+0000796630 00000 n 
+0000796694 00000 n 
+0000796758 00000 n 
+0000799596 00000 n 
+0000799035 00000 n 
+0000797007 00000 n 
+0000799151 00000 n 
+0000799278 00000 n 
+0000799405 00000 n 
+0000799532 00000 n 
+0005316414 00000 n 
+0000801876 00000 n 
+0000801569 00000 n 
+0000799740 00000 n 
+0000801685 00000 n 
+0000801812 00000 n 
+0000802315 00000 n 
+0000802135 00000 n 
+0000802034 00000 n 
+0000802251 00000 n 
+0000804210 00000 n 
+0000803776 00000 n 
+0000802357 00000 n 
+0000803892 00000 n 
+0000804146 00000 n 
+0000806741 00000 n 
+0000807033 00000 n 
+0000807187 00000 n 
+0000810977 00000 n 
+0000807793 00000 n 
+0000806577 00000 n 
+0000804326 00000 n 
+0000807348 00000 n 
+0000807475 00000 n 
+0000806887 00000 n 
+0000807602 00000 n 
+0000811412 00000 n 
+0000811130 00000 n 
+0000812371 00000 n 
+0000810831 00000 n 
+0000807937 00000 n 
+0000811284 00000 n 
+0000811476 00000 n 
+0000811540 00000 n 
+0000811604 00000 n 
+0000811668 00000 n 
+0000811732 00000 n 
+0000811796 00000 n 
+0000811860 00000 n 
+0000811924 00000 n 
+0000811988 00000 n 
+0000812052 00000 n 
+0000812116 00000 n 
+0000812180 00000 n 
+0000814564 00000 n 
+0000815040 00000 n 
+0000814427 00000 n 
+0000812542 00000 n 
+0000814720 00000 n 
+0000814784 00000 n 
+0000814848 00000 n 
+0000814912 00000 n 
+0000814976 00000 n 
+0005316540 00000 n 
+0000818002 00000 n 
+0000818154 00000 n 
+0000818468 00000 n 
+0000821234 00000 n 
+0000819895 00000 n 
+0000817838 00000 n 
+0000815184 00000 n 
+0000818619 00000 n 
+0000818747 00000 n 
+0000818811 00000 n 
+0000818875 00000 n 
+0000818939 00000 n 
+0000819003 00000 n 
+0000819066 00000 n 
+0000819130 00000 n 
+0000819193 00000 n 
+0000819257 00000 n 
+0000819319 00000 n 
+0000819383 00000 n 
+0000819447 00000 n 
+0000819511 00000 n 
+0000819575 00000 n 
+0000819639 00000 n 
+0000819703 00000 n 
+0000819767 00000 n 
+0000819831 00000 n 
+0000818311 00000 n 
+0000821578 00000 n 
+0000821097 00000 n 
+0000820095 00000 n 
+0000821388 00000 n 
+0000821514 00000 n 
+0000823489 00000 n 
+0000822928 00000 n 
+0000821708 00000 n 
+0000823044 00000 n 
+0000823298 00000 n 
+0000823425 00000 n 
+0000826025 00000 n 
+0000828627 00000 n 
+0000826173 00000 n 
+0000857122 00000 n 
+0000854495 00000 n 
+0000854642 00000 n 
+0000826769 00000 n 
+0000825879 00000 n 
+0000823619 00000 n 
+0000826323 00000 n 
+0000826450 00000 n 
+0000826577 00000 n 
+0000826641 00000 n 
+0000826705 00000 n 
+0000855217 00000 n 
+0000875799 00000 n 
+0000854789 00000 n 
+0000877784 00000 n 
+0000854940 00000 n 
+0000895780 00000 n 
+0000875370 00000 n 
+0000927194 00000 n 
+0000855472 00000 n 
+0000828463 00000 n 
+0000826913 00000 n 
+0000855089 00000 n 
+0000855281 00000 n 
+0000855344 00000 n 
+0000855408 00000 n 
+0004098368 00000 n 
+0000893921 00000 n 
+0000925133 00000 n 
+0000875520 00000 n 
+0000949080 00000 n 
+0000876118 00000 n 
+0000856976 00000 n 
+0000855639 00000 n 
+0000875671 00000 n 
+0000875926 00000 n 
+0000875990 00000 n 
+0000876054 00000 n 
+0005316666 00000 n 
+0000947060 00000 n 
+0000960580 00000 n 
+0000893343 00000 n 
+0000962804 00000 n 
+0000893494 00000 n 
+0000893642 00000 n 
+0000977542 00000 n 
+0000924704 00000 n 
+0000988888 00000 n 
+0000894177 00000 n 
+0000877629 00000 n 
+0000876299 00000 n 
+0000893793 00000 n 
+0000893985 00000 n 
+0000894049 00000 n 
+0000894113 00000 n 
+0000975531 00000 n 
+0000987043 00000 n 
+0000924855 00000 n 
+0001003431 00000 n 
+0000925388 00000 n 
+0000895634 00000 n 
+0000894330 00000 n 
+0000925005 00000 n 
+0000925197 00000 n 
+0000925324 00000 n 
+0001001622 00000 n 
+0001013990 00000 n 
+0000946339 00000 n 
+0001015633 00000 n 
+0000946488 00000 n 
+0000946635 00000 n 
+0000946782 00000 n 
+0001025343 00000 n 
+0000947316 00000 n 
+0000927030 00000 n 
+0000925569 00000 n 
+0000946932 00000 n 
+0000947124 00000 n 
+0000947188 00000 n 
+0000947252 00000 n 
+0001024517 00000 n 
+0001039189 00000 n 
+0000960152 00000 n 
+0001032448 00000 n 
+0000960302 00000 n 
+0001040137 00000 n 
+0000960899 00000 n 
+0000948934 00000 n 
+0000947469 00000 n 
+0000960452 00000 n 
+0000960644 00000 n 
+0000960708 00000 n 
+0000960835 00000 n 
+0001039317 00000 n 
+0001078774 00000 n 
+0000974951 00000 n 
+0001046777 00000 n 
+0000975101 00000 n 
+0001079738 00000 n 
+0000975252 00000 n 
+0001109589 00000 n 
+0000986614 00000 n 
+0001123563 00000 n 
+0000975979 00000 n 
+0000962649 00000 n 
+0000961052 00000 n 
+0000975403 00000 n 
+0000975595 00000 n 
+0000975659 00000 n 
+0000975723 00000 n 
+0000975787 00000 n 
+0000975851 00000 n 
+0000975915 00000 n 
+0001078902 00000 n 
+0001122549 00000 n 
+0001122677 00000 n 
+0000986765 00000 n 
+0001136525 00000 n 
+0000987362 00000 n 
+0000977396 00000 n 
+0000976133 00000 n 
+0000986915 00000 n 
+0000987107 00000 n 
+0000987171 00000 n 
+0000987298 00000 n 
+0005316792 00000 n 
+0001156372 00000 n 
+0001156500 00000 n 
+0001001196 00000 n 
+0001157368 00000 n 
+0001001345 00000 n 
+0001166411 00000 n 
+0001001878 00000 n 
+0000988742 00000 n 
+0000987516 00000 n 
+0001001494 00000 n 
+0001001686 00000 n 
+0001001750 00000 n 
+0001001814 00000 n 
+0001173185 00000 n 
+0001173313 00000 n 
+0001013562 00000 n 
+0001174116 00000 n 
+0001013712 00000 n 
+0001180152 00000 n 
+0001014309 00000 n 
+0001003285 00000 n 
+0001002074 00000 n 
+0001013862 00000 n 
+0001014054 00000 n 
+0001014118 00000 n 
+0001014245 00000 n 
+0001186274 00000 n 
+0001186402 00000 n 
+0001024581 00000 n 
+0001015517 00000 n 
+0001014477 00000 n 
+0001024389 00000 n 
+0001039381 00000 n 
+0001025227 00000 n 
+0001024763 00000 n 
+0001039061 00000 n 
+0001078966 00000 n 
+0001040021 00000 n 
+0001039536 00000 n 
+0001078646 00000 n 
+0001122741 00000 n 
+0001079622 00000 n 
+0001079121 00000 n 
+0001122421 00000 n 
+0005316918 00000 n 
+0001156564 00000 n 
+0001123447 00000 n 
+0001122896 00000 n 
+0001156244 00000 n 
+0001173377 00000 n 
+0001157252 00000 n 
+0001156719 00000 n 
+0001173057 00000 n 
+0001186466 00000 n 
+0001174000 00000 n 
+0001173532 00000 n 
+0001186146 00000 n 
+0001186902 00000 n 
+0001186722 00000 n 
+0001186621 00000 n 
+0001186838 00000 n 
+0001187342 00000 n 
+0001187163 00000 n 
+0001186944 00000 n 
+0001187633 00000 n 
+0001187517 00000 n 
+0001187416 00000 n 
+0005317044 00000 n 
+0001188572 00000 n 
+0001188137 00000 n 
+0001187675 00000 n 
+0001188253 00000 n 
+0001188317 00000 n 
+0001188444 00000 n 
+0001188508 00000 n 
+0001188955 00000 n 
+0001188775 00000 n 
+0001188674 00000 n 
+0001188891 00000 n 
+0001190346 00000 n 
+0001190505 00000 n 
+0001193856 00000 n 
+0001191108 00000 n 
+0001190200 00000 n 
+0001188997 00000 n 
+0001190663 00000 n 
+0001190917 00000 n 
+0001191044 00000 n 
+0003790838 00000 n 
+0001194217 00000 n 
+0001193719 00000 n 
+0001191224 00000 n 
+0001194026 00000 n 
+0001194153 00000 n 
+0001196765 00000 n 
+0001196458 00000 n 
+0001194403 00000 n 
+0001196574 00000 n 
+0001196701 00000 n 
+0001199530 00000 n 
+0001199842 00000 n 
+0001200593 00000 n 
+0001199375 00000 n 
+0001196966 00000 n 
+0001200020 00000 n 
+0001200148 00000 n 
+0001199686 00000 n 
+0001200275 00000 n 
+0001200402 00000 n 
+0001200529 00000 n 
+0005317170 00000 n 
+0001202029 00000 n 
+0001201723 00000 n 
+0001200793 00000 n 
+0001201839 00000 n 
+0001204679 00000 n 
+0001204372 00000 n 
+0001202202 00000 n 
+0001204488 00000 n 
+0001204615 00000 n 
+0001207044 00000 n 
+0001206737 00000 n 
+0001204866 00000 n 
+0001206853 00000 n 
+0001206980 00000 n 
+0001208945 00000 n 
+0001208639 00000 n 
+0001207202 00000 n 
+0001208755 00000 n 
+0001211622 00000 n 
+0001211315 00000 n 
+0001209103 00000 n 
+0001211431 00000 n 
+0001211558 00000 n 
+0001214649 00000 n 
+0001214213 00000 n 
+0001211780 00000 n 
+0001214329 00000 n 
+0001214393 00000 n 
+0001214457 00000 n 
+0001214521 00000 n 
+0001214585 00000 n 
+0005317296 00000 n 
+0001217615 00000 n 
+0001217180 00000 n 
+0001214779 00000 n 
+0001217296 00000 n 
+0001217360 00000 n 
+0001217424 00000 n 
+0001217551 00000 n 
+0001220180 00000 n 
+0001219873 00000 n 
+0001217773 00000 n 
+0001219989 00000 n 
+0005308771 00000 n 
+0001222401 00000 n 
+0001222221 00000 n 
+0001220324 00000 n 
+0001222337 00000 n 
+0001224300 00000 n 
+0001223993 00000 n 
+0001222531 00000 n 
+0001224109 00000 n 
+0001224236 00000 n 
+0001227153 00000 n 
+0001226973 00000 n 
+0001224444 00000 n 
+0001227089 00000 n 
+0001230116 00000 n 
+0001233990 00000 n 
+0001231096 00000 n 
+0001229979 00000 n 
+0001227297 00000 n 
+0001230268 00000 n 
+0001230458 00000 n 
+0001230521 00000 n 
+0001230648 00000 n 
+0001230712 00000 n 
+0001230776 00000 n 
+0001230840 00000 n 
+0001230904 00000 n 
+0001230968 00000 n 
+0001231032 00000 n 
+0005317422 00000 n 
+0001234144 00000 n 
+0001238431 00000 n 
+0001235512 00000 n 
+0001233844 00000 n 
+0001231253 00000 n 
+0001234298 00000 n 
+0001234426 00000 n 
+0001234490 00000 n 
+0001234554 00000 n 
+0001234618 00000 n 
+0001234682 00000 n 
+0001234746 00000 n 
+0001234810 00000 n 
+0001234938 00000 n 
+0001235002 00000 n 
+0001235065 00000 n 
+0001235129 00000 n 
+0001235193 00000 n 
+0001235257 00000 n 
+0001235321 00000 n 
+0001235448 00000 n 
+0001238581 00000 n 
+0001238744 00000 n 
+0001239724 00000 n 
+0001238276 00000 n 
+0001235697 00000 n 
+0001238894 00000 n 
+0001239022 00000 n 
+0001239086 00000 n 
+0001239149 00000 n 
+0001239213 00000 n 
+0001239277 00000 n 
+0001239341 00000 n 
+0001239405 00000 n 
+0001239533 00000 n 
+0001239660 00000 n 
+0001242518 00000 n 
+0001242211 00000 n 
+0001239881 00000 n 
+0001242327 00000 n 
+0001242454 00000 n 
+0001245489 00000 n 
+0001244800 00000 n 
+0001242662 00000 n 
+0001244916 00000 n 
+0001244980 00000 n 
+0001245044 00000 n 
+0001245108 00000 n 
+0001245171 00000 n 
+0001245298 00000 n 
+0001245425 00000 n 
+0001249159 00000 n 
+0001248405 00000 n 
+0001245633 00000 n 
+0001248521 00000 n 
+0001248585 00000 n 
+0001248649 00000 n 
+0001248712 00000 n 
+0001248839 00000 n 
+0001248903 00000 n 
+0001248967 00000 n 
+0001249031 00000 n 
+0001249095 00000 n 
+0001252474 00000 n 
+0001251912 00000 n 
+0001249358 00000 n 
+0001252028 00000 n 
+0001252155 00000 n 
+0001252219 00000 n 
+0001252283 00000 n 
+0001252410 00000 n 
+0005317548 00000 n 
+0001255135 00000 n 
+0001256502 00000 n 
+0001255019 00000 n 
+0001252645 00000 n 
+0001256183 00000 n 
+0001256310 00000 n 
+0001256374 00000 n 
+0001256438 00000 n 
+0001255517 00000 n 
+0001255649 00000 n 
+0001255697 00000 n 
+0001256162 00000 n 
+0001259775 00000 n 
+0001259467 00000 n 
+0001256731 00000 n 
+0001259583 00000 n 
+0001259647 00000 n 
+0001259711 00000 n 
+0001262208 00000 n 
+0001261775 00000 n 
+0001259946 00000 n 
+0001261891 00000 n 
+0001262018 00000 n 
+0001262144 00000 n 
+0001264362 00000 n 
+0001263930 00000 n 
+0001262395 00000 n 
+0001264046 00000 n 
+0001264173 00000 n 
+0001264299 00000 n 
+0001266989 00000 n 
+0001266683 00000 n 
+0001264549 00000 n 
+0001266799 00000 n 
+0001266925 00000 n 
+0001270543 00000 n 
+0001269789 00000 n 
+0001267147 00000 n 
+0001269905 00000 n 
+0001269969 00000 n 
+0001270032 00000 n 
+0001270096 00000 n 
+0001270160 00000 n 
+0001270224 00000 n 
+0001270288 00000 n 
+0001270352 00000 n 
+0001270479 00000 n 
+0005317674 00000 n 
+0001273183 00000 n 
+0001272876 00000 n 
+0001270742 00000 n 
+0001272992 00000 n 
+0001273119 00000 n 
+0001275868 00000 n 
+0001275561 00000 n 
+0001273384 00000 n 
+0001275677 00000 n 
+0001275804 00000 n 
+0001278818 00000 n 
+0001278384 00000 n 
+0001276069 00000 n 
+0001278500 00000 n 
+0001278627 00000 n 
+0001278754 00000 n 
+0001321870 00000 n 
+0001280925 00000 n 
+0001322215 00000 n 
+0001280788 00000 n 
+0001278976 00000 n 
+0001322023 00000 n 
+0001322151 00000 n 
+0001286796 00000 n 
+0001286928 00000 n 
+0001286976 00000 n 
+0001287375 00000 n 
+0001287398 00000 n 
+0001287618 00000 n 
+0001325481 00000 n 
+0001325634 00000 n 
+0001325784 00000 n 
+0001329304 00000 n 
+0001326126 00000 n 
+0001325326 00000 n 
+0001322347 00000 n 
+0001325934 00000 n 
+0001326062 00000 n 
+0001329731 00000 n 
+0001329453 00000 n 
+0001329923 00000 n 
+0001329158 00000 n 
+0001326256 00000 n 
+0001329603 00000 n 
+0001329859 00000 n 
+0005317800 00000 n 
+0001332708 00000 n 
+0001333217 00000 n 
+0001332464 00000 n 
+0001330025 00000 n 
+0001332580 00000 n 
+0001332772 00000 n 
+0001332836 00000 n 
+0001332900 00000 n 
+0001333026 00000 n 
+0001333153 00000 n 
+0001335946 00000 n 
+0001335385 00000 n 
+0001333333 00000 n 
+0001335501 00000 n 
+0001335628 00000 n 
+0001335755 00000 n 
+0001335882 00000 n 
+0001338428 00000 n 
+0001338770 00000 n 
+0001338291 00000 n 
+0001336104 00000 n 
+0001338579 00000 n 
+0001338706 00000 n 
+0001341301 00000 n 
+0001341121 00000 n 
+0001338886 00000 n 
+0001341237 00000 n 
+0001343470 00000 n 
+0001343163 00000 n 
 0001341502 00000 n 
-0001341566 00000 n 
-0001343768 00000 n 
-0001343832 00000 n 
-0001343524 00000 n 
-0001341824 00000 n 
-0001343640 00000 n 
-0001345334 00000 n 
-0001345026 00000 n 
-0001343948 00000 n 
-0001345142 00000 n 
-0001345206 00000 n 
-0001345270 00000 n 
-0001347018 00000 n 
-0001346454 00000 n 
-0001345464 00000 n 
-0001346570 00000 n 
-0001346634 00000 n 
-0001346698 00000 n 
-0001346762 00000 n 
-0001346826 00000 n 
-0001346890 00000 n 
-0001346954 00000 n 
-0001349375 00000 n 
-0001348813 00000 n 
-0001347134 00000 n 
-0001348929 00000 n 
-0001349056 00000 n 
-0001349120 00000 n 
-0001349184 00000 n 
-0001349311 00000 n 
-0001352480 00000 n 
-0001352046 00000 n 
-0001349590 00000 n 
-0001352162 00000 n 
-0001352289 00000 n 
-0001352416 00000 n 
-0004760965 00000 n 
-0001355183 00000 n 
-0001354749 00000 n 
-0001352638 00000 n 
-0001354865 00000 n 
-0001354992 00000 n 
-0001355119 00000 n 
-0001357676 00000 n 
-0001357844 00000 n 
-0001358038 00000 n 
-0001358210 00000 n 
-0001358422 00000 n 
-0001358612 00000 n 
-0001358825 00000 n 
-0001359018 00000 n 
-0001359213 00000 n 
-0001359413 00000 n 
-0001359649 00000 n 
-0001357458 00000 n 
-0001355313 00000 n 
-0001359585 00000 n 
-0001362059 00000 n 
-0001362212 00000 n 
-0001362701 00000 n 
-0001361913 00000 n 
-0001359835 00000 n 
-0001362383 00000 n 
-0001362510 00000 n 
-0001362637 00000 n 
-0001365167 00000 n 
-0001364860 00000 n 
-0001362887 00000 n 
-0001364976 00000 n 
-0001365103 00000 n 
-0001366530 00000 n 
-0001366350 00000 n 
-0001365311 00000 n 
-0001366466 00000 n 
-0001367931 00000 n 
-0001367625 00000 n 
-0001366646 00000 n 
-0001367741 00000 n 
-0001367867 00000 n 
-0004761091 00000 n 
-0001369150 00000 n 
-0001368970 00000 n 
-0001368061 00000 n 
-0001369086 00000 n 
-0001371826 00000 n 
-0001371137 00000 n 
-0001369266 00000 n 
-0001371253 00000 n 
-0001371380 00000 n 
-0001371444 00000 n 
-0001371508 00000 n 
-0001371572 00000 n 
-0001371636 00000 n 
-0001371700 00000 n 
-0001371764 00000 n 
-0001374581 00000 n 
-0001375627 00000 n 
-0001374444 00000 n 
-0001372026 00000 n 
-0001374733 00000 n 
-0001374797 00000 n 
-0001374861 00000 n 
-0001374925 00000 n 
-0001374989 00000 n 
-0001375053 00000 n 
-0001375117 00000 n 
-0001375181 00000 n 
-0001375245 00000 n 
-0001375309 00000 n 
-0001375436 00000 n 
-0001375563 00000 n 
-0001381017 00000 n 
-0001380589 00000 n 
-0001382933 00000 n 
-0001380443 00000 n 
-0001375798 00000 n 
-0001380889 00000 n 
-0001381081 00000 n 
-0001381145 00000 n 
-0001381209 00000 n 
-0001381273 00000 n 
-0001381337 00000 n 
-0001381401 00000 n 
-0001381465 00000 n 
-0001381529 00000 n 
-0001381592 00000 n 
-0001381656 00000 n 
-0001381719 00000 n 
-0001381783 00000 n 
-0001381845 00000 n 
-0001381909 00000 n 
-0001381973 00000 n 
-0001382037 00000 n 
-0001382101 00000 n 
-0001382165 00000 n 
-0001382229 00000 n 
-0001382293 00000 n 
-0001382357 00000 n 
-0001382421 00000 n 
-0001382485 00000 n 
-0001382549 00000 n 
-0001382613 00000 n 
-0001382677 00000 n 
-0001382741 00000 n 
-0001382805 00000 n 
-0001382869 00000 n 
-0001380739 00000 n 
-0001385351 00000 n 
-0001385511 00000 n 
-0001385671 00000 n 
-0001386011 00000 n 
-0001385196 00000 n 
-0001383090 00000 n 
-0001385820 00000 n 
-0001385947 00000 n 
-0001395613 00000 n 
-0001397917 00000 n 
-0001387942 00000 n 
-0001387635 00000 n 
-0001386169 00000 n 
-0001387751 00000 n 
-0001387878 00000 n 
-0004761217 00000 n 
-0001389853 00000 n 
-0001390325 00000 n 
-0001389716 00000 n 
-0001388100 00000 n 
-0001390007 00000 n 
-0001390134 00000 n 
-0001390261 00000 n 
-0001398045 00000 n 
-0001391424 00000 n 
-0001392026 00000 n 
-0001391287 00000 n 
-0001390469 00000 n 
-0001391581 00000 n 
-0001391708 00000 n 
-0001391835 00000 n 
-0001391962 00000 n 
-0001395677 00000 n 
-0001395369 00000 n 
-0001392170 00000 n 
-0001395485 00000 n 
-0001398109 00000 n 
-0001397673 00000 n 
-0001395807 00000 n 
-0001397789 00000 n 
-0001399928 00000 n 
-0001399622 00000 n 
-0001398225 00000 n 
-0001399738 00000 n 
-0001401607 00000 n 
-0001409654 00000 n 
-0001407497 00000 n 
-0001407653 00000 n 
-0001419278 00000 n 
-0001415555 00000 n 
-0001408128 00000 n 
-0001401461 00000 n 
-0001400129 00000 n 
-0001407809 00000 n 
-0001407936 00000 n 
-0001408064 00000 n 
-0004761343 00000 n 
-0001403153 00000 n 
-0001403271 00000 n 
-0001403319 00000 n 
-0001403692 00000 n 
-0001403950 00000 n 
-0001403973 00000 n 
-0001404278 00000 n 
-0001404542 00000 n 
-0001406563 00000 n 
-0001407452 00000 n 
-0001407475 00000 n 
-0001419569 00000 n 
-0001419761 00000 n 
-0001409517 00000 n 
-0001408302 00000 n 
-0001419441 00000 n 
-0001419697 00000 n 
-0001411211 00000 n 
-0001411329 00000 n 
-0001411377 00000 n 
-0001411750 00000 n 
-0001412008 00000 n 
-0001412031 00000 n 
-0001412336 00000 n 
-0001412600 00000 n 
-0001414621 00000 n 
-0001415510 00000 n 
-0001415533 00000 n 
-0001416472 00000 n 
-0001416590 00000 n 
-0001416638 00000 n 
-0001417031 00000 n 
-0001417053 00000 n 
-0001417351 00000 n 
-0001419255 00000 n 
-0001422451 00000 n 
-0001422016 00000 n 
-0001419922 00000 n 
-0001422132 00000 n 
-0001422259 00000 n 
-0001422323 00000 n 
-0001422387 00000 n 
-0001424968 00000 n 
-0001424597 00000 n 
-0001422581 00000 n 
-0001424713 00000 n 
-0001424777 00000 n 
-0001424904 00000 n 
-0001427836 00000 n 
-0001427529 00000 n 
-0001425098 00000 n 
-0001427645 00000 n 
-0001427772 00000 n 
-0001430578 00000 n 
-0001430398 00000 n 
-0001427966 00000 n 
-0001430514 00000 n 
-0001433010 00000 n 
-0001433754 00000 n 
-0001432864 00000 n 
-0001430708 00000 n 
-0001433308 00000 n 
-0001433435 00000 n 
-0001433499 00000 n 
-0001433563 00000 n 
-0001433160 00000 n 
-0001433690 00000 n 
-0004761469 00000 n 
-0001436266 00000 n 
-0001436607 00000 n 
-0001436129 00000 n 
-0001433884 00000 n 
-0001436417 00000 n 
-0001436544 00000 n 
-0001439294 00000 n 
-0001439484 00000 n 
-0001439051 00000 n 
-0001436794 00000 n 
-0001439167 00000 n 
-0001439420 00000 n 
-0001441232 00000 n 
-0001441388 00000 n 
-0001444176 00000 n 
-0001441985 00000 n 
-0001441086 00000 n 
-0001439614 00000 n 
-0001441539 00000 n 
-0001441666 00000 n 
-0001441793 00000 n 
-0001441921 00000 n 
-0001444459 00000 n 
-0001444970 00000 n 
-0001444039 00000 n 
-0001442115 00000 n 
-0001444331 00000 n 
-0001444523 00000 n 
-0001444587 00000 n 
-0001444651 00000 n 
-0001444778 00000 n 
-0001444906 00000 n 
-0001447661 00000 n 
-0001447100 00000 n 
-0001445141 00000 n 
-0001447216 00000 n 
-0001447343 00000 n 
-0001447470 00000 n 
-0001447597 00000 n 
-0001449987 00000 n 
-0001449232 00000 n 
-0001447862 00000 n 
-0001449348 00000 n 
-0001449412 00000 n 
-0001449476 00000 n 
-0001449540 00000 n 
-0001449604 00000 n 
-0001449668 00000 n 
-0001449732 00000 n 
-0001449796 00000 n 
-0001449860 00000 n 
-0001449923 00000 n 
-0004761595 00000 n 
-0001452020 00000 n 
-0001451713 00000 n 
-0001450159 00000 n 
-0001451829 00000 n 
-0001454892 00000 n 
-0001454458 00000 n 
-0001452136 00000 n 
-0001454574 00000 n 
-0001454701 00000 n 
-0001454828 00000 n 
-0001457836 00000 n 
-0001457401 00000 n 
-0001455008 00000 n 
-0001457517 00000 n 
-0001457644 00000 n 
-0001457772 00000 n 
-0001459699 00000 n 
-0001459391 00000 n 
-0001457980 00000 n 
-0001459507 00000 n 
-0001459635 00000 n 
-0001460989 00000 n 
-0001460809 00000 n 
-0001459829 00000 n 
-0001460925 00000 n 
-0001463277 00000 n 
-0001462970 00000 n 
-0001461119 00000 n 
-0001463086 00000 n 
-0001463213 00000 n 
-0004761721 00000 n 
-0001465186 00000 n 
-0001465006 00000 n 
-0001463407 00000 n 
-0001465122 00000 n 
-0001467432 00000 n 
-0001466997 00000 n 
-0001465359 00000 n 
-0001467113 00000 n 
-0001467241 00000 n 
-0001467368 00000 n 
-0001469286 00000 n 
-0001469634 00000 n 
-0001469149 00000 n 
-0001467619 00000 n 
-0001469442 00000 n 
-0001469570 00000 n 
-0001471336 00000 n 
-0001471156 00000 n 
-0001469764 00000 n 
-0001471272 00000 n 
-0001472498 00000 n 
-0001472318 00000 n 
-0001471452 00000 n 
-0001472434 00000 n 
-0001474709 00000 n 
-0001474401 00000 n 
-0001472614 00000 n 
-0001474517 00000 n 
-0001474645 00000 n 
-0004761847 00000 n 
-0001476494 00000 n 
-0001477041 00000 n 
-0001476357 00000 n 
-0001474910 00000 n 
-0001476657 00000 n 
-0001476785 00000 n 
-0001476913 00000 n 
-0001476977 00000 n 
-0001479891 00000 n 
-0001480048 00000 n 
-0001481321 00000 n 
-0001479736 00000 n 
-0001477171 00000 n 
-0001480362 00000 n 
-0001480490 00000 n 
-0001480554 00000 n 
-0001480618 00000 n 
-0001480682 00000 n 
-0001480746 00000 n 
-0001480810 00000 n 
-0001480874 00000 n 
-0001480938 00000 n 
-0001481001 00000 n 
-0001481065 00000 n 
-0001481129 00000 n 
-0001480205 00000 n 
-0001481257 00000 n 
-0001483266 00000 n 
-0001482830 00000 n 
-0001481492 00000 n 
-0001482946 00000 n 
-0001483074 00000 n 
-0001483202 00000 n 
-0001484897 00000 n 
-0001485372 00000 n 
-0001484760 00000 n 
-0001483410 00000 n 
-0001485052 00000 n 
-0001485180 00000 n 
-0001485308 00000 n 
-0001487162 00000 n 
-0001487651 00000 n 
-0001487016 00000 n 
-0001485502 00000 n 
-0001487459 00000 n 
-0001487587 00000 n 
-0001487311 00000 n 
-0001489214 00000 n 
-0001489034 00000 n 
-0001487781 00000 n 
-0001489150 00000 n 
-0004761973 00000 n 
-0001490930 00000 n 
-0001490750 00000 n 
-0001489387 00000 n 
-0001490866 00000 n 
-0001492239 00000 n 
-0001491931 00000 n 
-0001491046 00000 n 
-0001492047 00000 n 
-0001492175 00000 n 
-0001493979 00000 n 
-0001493671 00000 n 
-0001492369 00000 n 
-0001493787 00000 n 
-0001493915 00000 n 
-0001495714 00000 n 
-0001495534 00000 n 
-0001494109 00000 n 
-0001495650 00000 n 
-0001497674 00000 n 
-0001498066 00000 n 
-0001497537 00000 n 
-0001495844 00000 n 
-0001497874 00000 n 
-0001498002 00000 n 
-0001499570 00000 n 
-0001499390 00000 n 
-0001498252 00000 n 
-0001499506 00000 n 
-0004762099 00000 n 
-0001500901 00000 n 
-0001500721 00000 n 
-0001499686 00000 n 
-0001500837 00000 n 
-0001503146 00000 n 
-0001502838 00000 n 
-0001501017 00000 n 
-0001502954 00000 n 
-0001503082 00000 n 
-0001505109 00000 n 
-0001504801 00000 n 
-0001503276 00000 n 
-0001504917 00000 n 
-0001505045 00000 n 
-0001507321 00000 n 
-0001507013 00000 n 
-0001505253 00000 n 
-0001507129 00000 n 
-0001507257 00000 n 
-0001509153 00000 n 
-0001509787 00000 n 
-0001509007 00000 n 
-0001507465 00000 n 
-0001509467 00000 n 
-0001509595 00000 n 
-0001509311 00000 n 
-0001509723 00000 n 
-0001512599 00000 n 
-0001512163 00000 n 
-0001509917 00000 n 
-0001512279 00000 n 
-0001512343 00000 n 
-0001512407 00000 n 
-0001512535 00000 n 
-0004762225 00000 n 
-0001515191 00000 n 
-0001515405 00000 n 
-0001515054 00000 n 
-0001512715 00000 n 
-0001515341 00000 n 
-0001518093 00000 n 
-0001517785 00000 n 
-0001515549 00000 n 
-0001517901 00000 n 
-0001518029 00000 n 
-0001520469 00000 n 
-0001520289 00000 n 
-0001518251 00000 n 
-0001520405 00000 n 
-0001522869 00000 n 
-0001522305 00000 n 
-0001520670 00000 n 
-0001522421 00000 n 
-0001522549 00000 n 
-0001522677 00000 n 
-0001522805 00000 n 
-0001525536 00000 n 
-0001525356 00000 n 
-0001523013 00000 n 
-0001525472 00000 n 
-0001526897 00000 n 
-0001526717 00000 n 
-0001525666 00000 n 
-0001526833 00000 n 
-0004762351 00000 n 
-0001528957 00000 n 
-0001528393 00000 n 
-0001527013 00000 n 
-0001528509 00000 n 
-0001528637 00000 n 
-0001528765 00000 n 
-0001528893 00000 n 
-0001531008 00000 n 
-0001530572 00000 n 
-0001529087 00000 n 
-0001530688 00000 n 
-0001530816 00000 n 
-0001530944 00000 n 
-0001532956 00000 n 
-0001532393 00000 n 
-0001531138 00000 n 
-0001532509 00000 n 
-0001532637 00000 n 
-0001532765 00000 n 
-0001532893 00000 n 
-0001534356 00000 n 
-0001534176 00000 n 
-0001533086 00000 n 
-0001534292 00000 n 
-0001536618 00000 n 
-0001536310 00000 n 
-0001534472 00000 n 
-0001536426 00000 n 
-0001538879 00000 n 
-0001539633 00000 n 
-0001538733 00000 n 
-0001536734 00000 n 
-0001539187 00000 n 
-0001539315 00000 n 
-0001539033 00000 n 
-0001539441 00000 n 
-0001539569 00000 n 
-0004762477 00000 n 
-0001542206 00000 n 
-0001542026 00000 n 
-0001539819 00000 n 
-0001542142 00000 n 
-0001545083 00000 n 
-0001544903 00000 n 
-0001542322 00000 n 
-0001545019 00000 n 
-0001547761 00000 n 
-0001547581 00000 n 
-0001545213 00000 n 
-0001547697 00000 n 
-0001550639 00000 n 
-0001550203 00000 n 
-0001547891 00000 n 
-0001550319 00000 n 
-0001550447 00000 n 
-0001550575 00000 n 
-0001553453 00000 n 
-0001554759 00000 n 
-0001553316 00000 n 
-0001550797 00000 n 
-0001553607 00000 n 
-0001553735 00000 n 
-0001553863 00000 n 
-0001553991 00000 n 
-0001554119 00000 n 
-0001554183 00000 n 
-0001554247 00000 n 
-0001554311 00000 n 
-0001554375 00000 n 
-0001554439 00000 n 
-0001554503 00000 n 
-0001554567 00000 n 
-0001554631 00000 n 
-0001554695 00000 n 
-0001559213 00000 n 
-0001556315 00000 n 
-0001555943 00000 n 
-0001554930 00000 n 
-0001556059 00000 n 
-0001556123 00000 n 
-0001556187 00000 n 
-0001556251 00000 n 
-0004762603 00000 n 
-0001560711 00000 n 
-0001559076 00000 n 
-0001556431 00000 n 
-0001559367 00000 n 
-0001559495 00000 n 
-0001559623 00000 n 
-0001559687 00000 n 
-0001559751 00000 n 
-0001559815 00000 n 
-0001559879 00000 n 
-0001559943 00000 n 
-0001560007 00000 n 
-0001560071 00000 n 
-0001560135 00000 n 
-0001560199 00000 n 
-0001560263 00000 n 
-0001560327 00000 n 
-0001560391 00000 n 
-0001560455 00000 n 
-0001560519 00000 n 
-0001560583 00000 n 
-0001560647 00000 n 
-0001566935 00000 n 
-0001563409 00000 n 
-0001563038 00000 n 
-0001560882 00000 n 
-0001563154 00000 n 
-0001563218 00000 n 
-0001563345 00000 n 
-0001568435 00000 n 
-0001566798 00000 n 
-0001563553 00000 n 
-0001567091 00000 n 
-0001567219 00000 n 
-0001567283 00000 n 
-0001567347 00000 n 
-0001567411 00000 n 
-0001567475 00000 n 
-0001567539 00000 n 
-0001567603 00000 n 
-0001567667 00000 n 
-0001567731 00000 n 
-0001567795 00000 n 
-0001567859 00000 n 
-0001567923 00000 n 
-0001567987 00000 n 
-0001568051 00000 n 
-0001568115 00000 n 
-0001568179 00000 n 
-0001568243 00000 n 
-0001568307 00000 n 
-0001568371 00000 n 
-0001570756 00000 n 
-0001570128 00000 n 
-0001568592 00000 n 
-0001570244 00000 n 
-0001570308 00000 n 
-0001570372 00000 n 
-0001570436 00000 n 
-0001570500 00000 n 
-0001570564 00000 n 
-0001570692 00000 n 
-0001574145 00000 n 
-0001574301 00000 n 
-0001575727 00000 n 
-0001573999 00000 n 
-0001570900 00000 n 
-0001574451 00000 n 
-0001574579 00000 n 
-0001574643 00000 n 
-0001574707 00000 n 
-0001574771 00000 n 
-0001574835 00000 n 
-0001574899 00000 n 
-0001574963 00000 n 
-0001575027 00000 n 
-0001575091 00000 n 
-0001575155 00000 n 
-0001575219 00000 n 
-0001575283 00000 n 
-0001575347 00000 n 
-0001575410 00000 n 
-0001575474 00000 n 
-0001575536 00000 n 
-0001575600 00000 n 
-0001575663 00000 n 
-0003420404 00000 n 
-0001577298 00000 n 
-0001577118 00000 n 
+0001343279 00000 n 
+0001345733 00000 n 
+0001346205 00000 n 
+0001345596 00000 n 
+0001343600 00000 n 
+0001345887 00000 n 
+0001346014 00000 n 
+0001346141 00000 n 
+0005317926 00000 n 
+0001351535 00000 n 
+0001348492 00000 n 
+0001348185 00000 n 
+0001346335 00000 n 
+0001348301 00000 n 
+0001348428 00000 n 
+0001353458 00000 n 
+0001351094 00000 n 
+0001351251 00000 n 
+0001424254 00000 n 
+0001351726 00000 n 
+0001350948 00000 n 
+0001348636 00000 n 
+0001351408 00000 n 
+0001351662 00000 n 
+0001423032 00000 n 
+0001493545 00000 n 
+0001423096 00000 n 
+0001353342 00000 n 
+0001351870 00000 n 
+0001422904 00000 n 
+0001355164 00000 n 
+0001355296 00000 n 
+0001355344 00000 n 
+0001355764 00000 n 
+0001356027 00000 n 
+0001356050 00000 n 
+0001356275 00000 n 
+0001356494 00000 n 
+0001391527 00000 n 
+0001493609 00000 n 
+0001424138 00000 n 
+0001423242 00000 n 
+0001493417 00000 n 
+0001425952 00000 n 
+0001426084 00000 n 
+0001426132 00000 n 
+0001426518 00000 n 
+0001426781 00000 n 
+0001426804 00000 n 
+0001427029 00000 n 
+0001427248 00000 n 
+0001462040 00000 n 
+0001496071 00000 n 
+0001495641 00000 n 
+0001493797 00000 n 
+0001495757 00000 n 
+0001495884 00000 n 
+0001496007 00000 n 
+0001498586 00000 n 
+0001502315 00000 n 
+0001499067 00000 n 
+0001498449 00000 n 
+0001496201 00000 n 
+0001498749 00000 n 
+0001498876 00000 n 
+0001499003 00000 n 
+0005318052 00000 n 
+0001502811 00000 n 
+0001502483 00000 n 
+0001503322 00000 n 
+0001502169 00000 n 
+0001499239 00000 n 
+0001502683 00000 n 
+0001502875 00000 n 
+0001502939 00000 n 
+0001503003 00000 n 
+0001503067 00000 n 
+0001503131 00000 n 
+0001503258 00000 n 
+0001506276 00000 n 
+0001505969 00000 n 
+0001503563 00000 n 
+0001506085 00000 n 
+0001506212 00000 n 
+0001508953 00000 n 
+0001508646 00000 n 
+0001506392 00000 n 
+0001508762 00000 n 
+0001508889 00000 n 
+0001511629 00000 n 
+0001512099 00000 n 
+0001511492 00000 n 
+0001509069 00000 n 
+0001511783 00000 n 
+0001511908 00000 n 
+0001512035 00000 n 
+0001513857 00000 n 
+0001513677 00000 n 
+0001512243 00000 n 
+0001513793 00000 n 
+0001516505 00000 n 
+0001515687 00000 n 
+0001514015 00000 n 
+0001515803 00000 n 
+0001515930 00000 n 
+0001515994 00000 n 
+0001516058 00000 n 
+0001516122 00000 n 
+0001516186 00000 n 
+0001516250 00000 n 
+0001516314 00000 n 
+0001516378 00000 n 
+0001516441 00000 n 
+0005318178 00000 n 
+0001519050 00000 n 
+0001519527 00000 n 
+0001518913 00000 n 
+0001516649 00000 n 
+0001519208 00000 n 
+0001519335 00000 n 
+0001519399 00000 n 
+0001519463 00000 n 
+0001521789 00000 n 
+0001521853 00000 n 
+0001521545 00000 n 
+0001519657 00000 n 
+0001521661 00000 n 
+0001523474 00000 n 
+0001523294 00000 n 
+0001521969 00000 n 
+0001523410 00000 n 
+0001525284 00000 n 
+0001525637 00000 n 
+0001525147 00000 n 
+0001523590 00000 n 
+0001525445 00000 n 
+0001525509 00000 n 
+0001525573 00000 n 
+0001531517 00000 n 
+0001527574 00000 n 
+0001527138 00000 n 
+0001525781 00000 n 
+0001527254 00000 n 
+0001527318 00000 n 
+0001527382 00000 n 
+0001527446 00000 n 
+0001527510 00000 n 
+0001528967 00000 n 
+0001528787 00000 n 
+0001527718 00000 n 
+0001528903 00000 n 
+0005318304 00000 n 
+0001531235 00000 n 
+0001531581 00000 n 
+0001531098 00000 n 
+0001529083 00000 n 
+0001531389 00000 n 
+0001531453 00000 n 
+0001533655 00000 n 
+0001533719 00000 n 
+0001533411 00000 n 
+0001531711 00000 n 
+0001533527 00000 n 
+0001535221 00000 n 
+0001534913 00000 n 
+0001533835 00000 n 
+0001535029 00000 n 
+0001535093 00000 n 
+0001535157 00000 n 
+0001536905 00000 n 
+0001536341 00000 n 
+0001535351 00000 n 
+0001536457 00000 n 
+0001536521 00000 n 
+0001536585 00000 n 
+0001536649 00000 n 
+0001536713 00000 n 
+0001536777 00000 n 
+0001536841 00000 n 
+0001539262 00000 n 
+0001538700 00000 n 
+0001537021 00000 n 
+0001538816 00000 n 
+0001538943 00000 n 
+0001539007 00000 n 
+0001539071 00000 n 
+0001539198 00000 n 
+0001542367 00000 n 
+0001541933 00000 n 
+0001539477 00000 n 
+0001542049 00000 n 
+0001542176 00000 n 
+0001542303 00000 n 
+0005318430 00000 n 
+0001545070 00000 n 
+0001544636 00000 n 
+0001542525 00000 n 
+0001544752 00000 n 
+0001544879 00000 n 
+0001545006 00000 n 
+0001547563 00000 n 
+0001547731 00000 n 
+0001547925 00000 n 
+0001548097 00000 n 
+0001548309 00000 n 
+0001548499 00000 n 
+0001548712 00000 n 
+0001548905 00000 n 
+0001549100 00000 n 
+0001549300 00000 n 
+0001549536 00000 n 
+0001547345 00000 n 
+0001545200 00000 n 
+0001549472 00000 n 
+0001551946 00000 n 
+0001552099 00000 n 
+0001552588 00000 n 
+0001551800 00000 n 
+0001549722 00000 n 
+0001552270 00000 n 
+0001552397 00000 n 
+0001552524 00000 n 
+0001555054 00000 n 
+0001554747 00000 n 
+0001552774 00000 n 
+0001554863 00000 n 
+0001554990 00000 n 
+0001556417 00000 n 
+0001556237 00000 n 
+0001555198 00000 n 
+0001556353 00000 n 
+0001557818 00000 n 
+0001557512 00000 n 
+0001556533 00000 n 
+0001557628 00000 n 
+0001557754 00000 n 
+0005318556 00000 n 
+0001559037 00000 n 
+0001558857 00000 n 
+0001557948 00000 n 
+0001558973 00000 n 
+0001561713 00000 n 
+0001561024 00000 n 
+0001559153 00000 n 
+0001561140 00000 n 
+0001561267 00000 n 
+0001561331 00000 n 
+0001561395 00000 n 
+0001561459 00000 n 
+0001561523 00000 n 
+0001561587 00000 n 
+0001561651 00000 n 
+0001564468 00000 n 
+0001565514 00000 n 
+0001564331 00000 n 
+0001561913 00000 n 
+0001564620 00000 n 
+0001564684 00000 n 
+0001564748 00000 n 
+0001564812 00000 n 
+0001564876 00000 n 
+0001564940 00000 n 
+0001565004 00000 n 
+0001565068 00000 n 
+0001565132 00000 n 
+0001565196 00000 n 
+0001565323 00000 n 
+0001565450 00000 n 
+0001570904 00000 n 
+0001570476 00000 n 
+0001572820 00000 n 
+0001570330 00000 n 
+0001565685 00000 n 
+0001570776 00000 n 
+0001570968 00000 n 
+0001571032 00000 n 
+0001571096 00000 n 
+0001571160 00000 n 
+0001571224 00000 n 
+0001571288 00000 n 
+0001571352 00000 n 
+0001571416 00000 n 
+0001571479 00000 n 
+0001571543 00000 n 
+0001571606 00000 n 
+0001571670 00000 n 
+0001571732 00000 n 
+0001571796 00000 n 
+0001571860 00000 n 
+0001571924 00000 n 
+0001571988 00000 n 
+0001572052 00000 n 
+0001572116 00000 n 
+0001572180 00000 n 
+0001572244 00000 n 
+0001572308 00000 n 
+0001572372 00000 n 
+0001572436 00000 n 
+0001572500 00000 n 
+0001572564 00000 n 
+0001572628 00000 n 
+0001572692 00000 n 
+0001572756 00000 n 
+0001570626 00000 n 
+0001575238 00000 n 
+0001575398 00000 n 
+0001575558 00000 n 
 0001575898 00000 n 
-0001577234 00000 n 
-0004762729 00000 n 
-0001578949 00000 n 
-0001579501 00000 n 
-0001578812 00000 n 
-0001577471 00000 n 
-0001579117 00000 n 
-0001579181 00000 n 
-0001579245 00000 n 
-0001579309 00000 n 
-0001579373 00000 n 
-0001579437 00000 n 
-0001581214 00000 n 
-0001580842 00000 n 
-0001579673 00000 n 
-0001580958 00000 n 
-0001581022 00000 n 
-0001581086 00000 n 
-0001581150 00000 n 
-0001583995 00000 n 
-0001585302 00000 n 
-0001583858 00000 n 
-0001581330 00000 n 
-0001584151 00000 n 
-0001584279 00000 n 
-0001584407 00000 n 
-0001584471 00000 n 
-0001584535 00000 n 
-0001584598 00000 n 
-0001584662 00000 n 
-0001584726 00000 n 
-0001584790 00000 n 
-0001584854 00000 n 
-0001584918 00000 n 
-0001584982 00000 n 
-0001585046 00000 n 
-0001585110 00000 n 
-0001585174 00000 n 
-0001585238 00000 n 
-0001586911 00000 n 
-0001587095 00000 n 
-0001587876 00000 n 
-0001586756 00000 n 
-0001585473 00000 n 
-0001587556 00000 n 
-0001587684 00000 n 
-0001587812 00000 n 
-0001587325 00000 n 
-0001589891 00000 n 
-0001589584 00000 n 
-0001588062 00000 n 
-0001589700 00000 n 
-0001592373 00000 n 
-0001592717 00000 n 
-0001592236 00000 n 
-0001590021 00000 n 
-0001592525 00000 n 
-0001592653 00000 n 
-0004762855 00000 n 
-0001595502 00000 n 
-0001595694 00000 n 
-0001595258 00000 n 
-0001592918 00000 n 
-0001595374 00000 n 
-0001595630 00000 n 
-0004752052 00000 n 
-0001597980 00000 n 
-0001597800 00000 n 
-0001595852 00000 n 
-0001597916 00000 n 
-0001600627 00000 n 
-0001600319 00000 n 
-0001598195 00000 n 
-0001600435 00000 n 
-0001600563 00000 n 
-0001602432 00000 n 
-0001602124 00000 n 
-0001600771 00000 n 
-0001602240 00000 n 
-0001602368 00000 n 
-0001604295 00000 n 
-0001604636 00000 n 
-0001604158 00000 n 
-0001602562 00000 n 
-0001604444 00000 n 
-0001604572 00000 n 
-0001606729 00000 n 
-0001606293 00000 n 
-0001604766 00000 n 
-0001606409 00000 n 
-0001606537 00000 n 
-0001606665 00000 n 
-0004762981 00000 n 
-0001608301 00000 n 
-0001608523 00000 n 
-0001608164 00000 n 
-0001606916 00000 n 
-0001608459 00000 n 
-0001608920 00000 n 
-0001608740 00000 n 
-0001608639 00000 n 
-0001608856 00000 n 
-0001610991 00000 n 
-0001610683 00000 n 
-0001608962 00000 n 
-0001610799 00000 n 
-0001613608 00000 n 
-0001613300 00000 n 
-0001611107 00000 n 
-0001613416 00000 n 
-0001613544 00000 n 
-0001616334 00000 n 
-0001615898 00000 n 
-0001613780 00000 n 
-0001616014 00000 n 
-0001616142 00000 n 
-0001616270 00000 n 
-0001618495 00000 n 
-0001618315 00000 n 
-0001616492 00000 n 
-0001618431 00000 n 
-0004763107 00000 n 
-0001620928 00000 n 
-0001621277 00000 n 
-0001620791 00000 n 
-0001618625 00000 n 
-0001621086 00000 n 
-0001621214 00000 n 
-0001623618 00000 n 
-0001623339 00000 n 
-0001625850 00000 n 
-0001632726 00000 n 
-0001623810 00000 n 
-0001623202 00000 n 
-0001621435 00000 n 
-0001623490 00000 n 
-0001623746 00000 n 
-0001633005 00000 n 
-0001633197 00000 n 
-0001625713 00000 n 
-0001623940 00000 n 
-0001632877 00000 n 
-0001633133 00000 n 
-0001626822 00000 n 
-0001626940 00000 n 
-0001626988 00000 n 
-0001627371 00000 n 
-0001627781 00000 n 
-0001627803 00000 n 
-0001628094 00000 n 
-0001628416 00000 n 
-0001630102 00000 n 
-0001632680 00000 n 
-0001632703 00000 n 
-0001636070 00000 n 
-0001635762 00000 n 
-0001633343 00000 n 
-0001635878 00000 n 
-0001636006 00000 n 
-0001638152 00000 n 
-0001637780 00000 n 
-0001636214 00000 n 
-0001637896 00000 n 
-0001637960 00000 n 
-0001638024 00000 n 
-0001638088 00000 n 
-0001640601 00000 n 
-0001640749 00000 n 
-0001640898 00000 n 
-0001641621 00000 n 
-0001640446 00000 n 
-0001638268 00000 n 
-0001641046 00000 n 
-0001641174 00000 n 
-0001641302 00000 n 
-0001641430 00000 n 
-0001641558 00000 n 
-0004763233 00000 n 
-0001644269 00000 n 
-0001646993 00000 n 
-0001689041 00000 n 
-0001644461 00000 n 
-0001644025 00000 n 
-0001641765 00000 n 
-0001644141 00000 n 
-0001644397 00000 n 
-0001647057 00000 n 
-0001646749 00000 n 
-0001644605 00000 n 
-0001646865 00000 n 
-0001649582 00000 n 
-0001650369 00000 n 
-0001649445 00000 n 
-0001647187 00000 n 
-0001649793 00000 n 
-0001649921 00000 n 
-0001650049 00000 n 
-0001650113 00000 n 
-0001650177 00000 n 
-0001650305 00000 n 
-0001653162 00000 n 
-0001652790 00000 n 
-0001650555 00000 n 
-0001652906 00000 n 
-0001652970 00000 n 
-0001653034 00000 n 
-0001653098 00000 n 
-0001656084 00000 n 
-0001655521 00000 n 
-0001653377 00000 n 
-0001655637 00000 n 
-0001655765 00000 n 
-0001655893 00000 n 
-0001656020 00000 n 
-0001658842 00000 n 
-0001658406 00000 n 
-0001656271 00000 n 
-0001658522 00000 n 
-0001658650 00000 n 
-0001658778 00000 n 
-0004750708 00000 n 
-0004763359 00000 n 
-0001661890 00000 n 
-0001661454 00000 n 
-0001659014 00000 n 
-0001661570 00000 n 
-0001661698 00000 n 
-0001661826 00000 n 
-0001664740 00000 n 
-0001664432 00000 n 
-0001662034 00000 n 
-0001664548 00000 n 
-0001664676 00000 n 
-0001665716 00000 n 
-0001665536 00000 n 
-0001664884 00000 n 
-0001665652 00000 n 
-0001668229 00000 n 
-0001667921 00000 n 
-0001665846 00000 n 
-0001668037 00000 n 
-0001668165 00000 n 
-0001669680 00000 n 
-0001669500 00000 n 
-0001668387 00000 n 
-0001669616 00000 n 
-0001672925 00000 n 
-0001672171 00000 n 
-0001669824 00000 n 
-0001672287 00000 n 
-0001672351 00000 n 
-0001672415 00000 n 
-0001672478 00000 n 
-0001672542 00000 n 
-0001672605 00000 n 
-0001672733 00000 n 
-0001672861 00000 n 
-0004763485 00000 n 
-0001675329 00000 n 
-0001675021 00000 n 
-0001673111 00000 n 
-0001675137 00000 n 
-0001675265 00000 n 
-0001677264 00000 n 
-0001677606 00000 n 
-0001677127 00000 n 
-0001675473 00000 n 
-0001677414 00000 n 
-0001677542 00000 n 
-0001690690 00000 n 
-0001680103 00000 n 
-0001679411 00000 n 
-0001677736 00000 n 
-0001679527 00000 n 
-0001679655 00000 n 
-0001679783 00000 n 
-0001679911 00000 n 
-0001679975 00000 n 
-0001680039 00000 n 
-0001681644 00000 n 
-0001681336 00000 n 
-0001680233 00000 n 
-0001681452 00000 n 
-0001681516 00000 n 
-0001681580 00000 n 
-0001684572 00000 n 
-0001683881 00000 n 
-0001681831 00000 n 
-0001683997 00000 n 
-0001684061 00000 n 
-0001684125 00000 n 
-0001684189 00000 n 
-0001684253 00000 n 
-0001684381 00000 n 
-0001684508 00000 n 
-0001686470 00000 n 
-0001686098 00000 n 
-0001684729 00000 n 
-0001686214 00000 n 
-0001686278 00000 n 
-0001686342 00000 n 
-0001686406 00000 n 
-0004763611 00000 n 
-0001689105 00000 n 
-0001688798 00000 n 
-0001686599 00000 n 
-0001688914 00000 n 
-0001690754 00000 n 
-0001690446 00000 n 
-0001689221 00000 n 
-0001690562 00000 n 
-0001692695 00000 n 
-0001692259 00000 n 
-0001690856 00000 n 
-0001692375 00000 n 
-0001692631 00000 n 
-0001695524 00000 n 
-0001695217 00000 n 
-0001692825 00000 n 
-0001695333 00000 n 
-0001695460 00000 n 
-0001698171 00000 n 
-0001697863 00000 n 
-0001695711 00000 n 
-0001697979 00000 n 
-0001698107 00000 n 
-0001700756 00000 n 
-0001700576 00000 n 
-0001698329 00000 n 
-0001700692 00000 n 
-0004763737 00000 n 
-0001703418 00000 n 
-0001703238 00000 n 
-0001700872 00000 n 
-0001703354 00000 n 
-0001705914 00000 n 
-0001705350 00000 n 
-0001703520 00000 n 
-0001705466 00000 n 
-0001705594 00000 n 
-0001705722 00000 n 
-0001705850 00000 n 
-0001708658 00000 n 
-0001708094 00000 n 
-0001706030 00000 n 
-0001708210 00000 n 
-0001708338 00000 n 
-0001708466 00000 n 
-0001708594 00000 n 
-0001711491 00000 n 
-0001710927 00000 n 
-0001708774 00000 n 
-0001711043 00000 n 
-0001711171 00000 n 
-0001711299 00000 n 
-0001711427 00000 n 
-0001714237 00000 n 
-0001713929 00000 n 
-0001711649 00000 n 
-0001714045 00000 n 
-0001714173 00000 n 
-0001717009 00000 n 
-0001716575 00000 n 
-0001714353 00000 n 
-0001716691 00000 n 
-0001716818 00000 n 
-0001716946 00000 n 
-0004763863 00000 n 
-0001723794 00000 n 
-0001720659 00000 n 
-0001719842 00000 n 
-0001717139 00000 n 
-0001719958 00000 n 
-0001720022 00000 n 
-0001720086 00000 n 
-0001720149 00000 n 
-0001720213 00000 n 
-0001720276 00000 n 
-0001720340 00000 n 
-0001720468 00000 n 
-0001720531 00000 n 
-0001720595 00000 n 
-0001723942 00000 n 
-0001725305 00000 n 
-0001723648 00000 n 
-0001720830 00000 n 
-0001724090 00000 n 
-0001724218 00000 n 
-0001724282 00000 n 
-0001724346 00000 n 
-0001724410 00000 n 
-0001724474 00000 n 
-0001724538 00000 n 
-0001724602 00000 n 
-0001724666 00000 n 
-0001724794 00000 n 
-0001724858 00000 n 
-0001724921 00000 n 
-0001724985 00000 n 
-0001725049 00000 n 
-0001725113 00000 n 
-0001725241 00000 n 
-0001727778 00000 n 
-0001727598 00000 n 
-0001725476 00000 n 
-0001727714 00000 n 
-0001729310 00000 n 
-0001729130 00000 n 
-0001727979 00000 n 
-0001729246 00000 n 
-0001731323 00000 n 
-0001731015 00000 n 
-0001729483 00000 n 
-0001731131 00000 n 
-0001731259 00000 n 
-0001732971 00000 n 
-0001732663 00000 n 
-0001731467 00000 n 
-0001732779 00000 n 
-0001732907 00000 n 
-0004763989 00000 n 
-0001737824 00000 n 
-0001735628 00000 n 
-0001735192 00000 n 
-0001733101 00000 n 
-0001735308 00000 n 
-0001735436 00000 n 
-0001735564 00000 n 
-0001737997 00000 n 
-0001738183 00000 n 
-0001740363 00000 n 
-0001740541 00000 n 
-0001738818 00000 n 
-0001737669 00000 n 
-0001735758 00000 n 
-0001738370 00000 n 
-0001738498 00000 n 
-0001738626 00000 n 
-0001738754 00000 n 
-0001740711 00000 n 
-0001740898 00000 n 
-0001741085 00000 n 
-0001741465 00000 n 
-0001740190 00000 n 
-0001739004 00000 n 
-0001741273 00000 n 
-0001741401 00000 n 
-0001741932 00000 n 
-0001741752 00000 n 
-0001741651 00000 n 
-0001741868 00000 n 
-0001744176 00000 n 
-0001743612 00000 n 
-0001741974 00000 n 
-0001743728 00000 n 
-0001743984 00000 n 
-0001744112 00000 n 
-0001747056 00000 n 
-0001747817 00000 n 
-0001746910 00000 n 
-0001744292 00000 n 
-0001747371 00000 n 
-0004752937 00000 n 
-0001747214 00000 n 
-0001747499 00000 n 
-0001747626 00000 n 
-0001747689 00000 n 
-0001747753 00000 n 
-0004764115 00000 n 
-0001751589 00000 n 
-0001750769 00000 n 
-0001748016 00000 n 
-0001750885 00000 n 
-0001750949 00000 n 
-0001751077 00000 n 
-0001751141 00000 n 
-0001751205 00000 n 
-0001751333 00000 n 
-0001751397 00000 n 
-0001751461 00000 n 
-0001751525 00000 n 
-0001754454 00000 n 
-0001753892 00000 n 
-0001751760 00000 n 
-0001754008 00000 n 
-0001754136 00000 n 
-0001754264 00000 n 
-0001754328 00000 n 
-0001754392 00000 n 
-0001759332 00000 n 
-0001756995 00000 n 
-0001756559 00000 n 
-0001754583 00000 n 
-0001756675 00000 n 
-0001756739 00000 n 
-0001756803 00000 n 
-0001756931 00000 n 
-0001759501 00000 n 
-0001760233 00000 n 
-0001759186 00000 n 
-0001757138 00000 n 
-0001759658 00000 n 
-0001759786 00000 n 
-0001759914 00000 n 
-0001760042 00000 n 
-0001760169 00000 n 
-0001762309 00000 n 
-0001761873 00000 n 
-0001760377 00000 n 
-0001761989 00000 n 
-0001762053 00000 n 
-0001762117 00000 n 
-0001762181 00000 n 
-0001762245 00000 n 
-0001762733 00000 n 
-0001762553 00000 n 
-0001762452 00000 n 
-0001762669 00000 n 
-0004764241 00000 n 
-0001765098 00000 n 
-0001764598 00000 n 
-0001762775 00000 n 
-0001764714 00000 n 
-0001764906 00000 n 
-0001764970 00000 n 
-0001765034 00000 n 
-0001767676 00000 n 
-0001767240 00000 n 
-0001765255 00000 n 
-0001767356 00000 n 
-0001767484 00000 n 
-0001767612 00000 n 
-0001770549 00000 n 
-0001770114 00000 n 
-0001767849 00000 n 
-0001770230 00000 n 
-0001770358 00000 n 
-0001770485 00000 n 
-0001772474 00000 n 
-0001778217 00000 n 
-0001772358 00000 n 
-0001770679 00000 n 
-0001777769 00000 n 
-0001777897 00000 n 
-0001778025 00000 n 
-0001778153 00000 n 
-0001775271 00000 n 
-0001775389 00000 n 
-0001775437 00000 n 
-0001775810 00000 n 
-0001775833 00000 n 
-0001776120 00000 n 
-0001777746 00000 n 
-0001780353 00000 n 
-0001780045 00000 n 
-0001778391 00000 n 
-0001780161 00000 n 
-0001780289 00000 n 
-0001783005 00000 n 
-0001782697 00000 n 
-0001780483 00000 n 
-0001782813 00000 n 
-0001782941 00000 n 
-0004764367 00000 n 
-0001785558 00000 n 
-0001785250 00000 n 
-0001783135 00000 n 
-0001785366 00000 n 
-0001785494 00000 n 
-0001788035 00000 n 
-0001788647 00000 n 
-0001787898 00000 n 
-0001785745 00000 n 
-0001788199 00000 n 
-0001788327 00000 n 
-0001788455 00000 n 
-0001788583 00000 n 
-0001790833 00000 n 
-0001790525 00000 n 
-0001788791 00000 n 
-0001790641 00000 n 
-0001790769 00000 n 
-0001791861 00000 n 
-0001791681 00000 n 
-0001790977 00000 n 
-0001791797 00000 n 
-0001794074 00000 n 
-0001793924 00000 n 
-0001794865 00000 n 
-0001793769 00000 n 
-0001791977 00000 n 
-0001794545 00000 n 
-0001794801 00000 n 
-0001794310 00000 n 
-0001797632 00000 n 
-0001798272 00000 n 
-0001797388 00000 n 
-0001795093 00000 n 
-0001797504 00000 n 
-0001797696 00000 n 
-0001797760 00000 n 
-0001797824 00000 n 
-0001797888 00000 n 
-0001797952 00000 n 
-0001798016 00000 n 
-0001798080 00000 n 
-0001798208 00000 n 
-0004764493 00000 n 
-0001800970 00000 n 
-0001800406 00000 n 
-0001798429 00000 n 
-0001800522 00000 n 
-0001800650 00000 n 
-0001800714 00000 n 
-0001800778 00000 n 
-0001800842 00000 n 
-0001800906 00000 n 
-0001801408 00000 n 
-0001801228 00000 n 
-0001801127 00000 n 
-0001801344 00000 n 
-0001805845 00000 n 
-0001803692 00000 n 
-0001803256 00000 n 
-0001801450 00000 n 
-0001803372 00000 n 
-0001803628 00000 n 
-0001806351 00000 n 
-0001805699 00000 n 
-0001803822 00000 n 
-0001806159 00000 n 
-0001806002 00000 n 
-0001806287 00000 n 
-0001809305 00000 n 
-0001808423 00000 n 
-0001806553 00000 n 
-0001808539 00000 n 
-0001808667 00000 n 
-0001808730 00000 n 
-0001808794 00000 n 
-0001808858 00000 n 
-0001808922 00000 n 
-0001808986 00000 n 
-0001809050 00000 n 
-0001809114 00000 n 
-0001809241 00000 n 
-0001812417 00000 n 
-0001813461 00000 n 
-0001812280 00000 n 
-0001809449 00000 n 
-0001812568 00000 n 
-0001812696 00000 n 
-0001812824 00000 n 
-0001812888 00000 n 
-0001812952 00000 n 
-0001813016 00000 n 
-0001813079 00000 n 
-0001813143 00000 n 
-0001813206 00000 n 
-0001813270 00000 n 
-0001813333 00000 n 
-0001813397 00000 n 
-0004764619 00000 n 
-0001815369 00000 n 
-0001815713 00000 n 
-0001815232 00000 n 
-0001813618 00000 n 
-0001815521 00000 n 
-0001815649 00000 n 
-0001817649 00000 n 
-0001817341 00000 n 
-0001815871 00000 n 
-0001817457 00000 n 
-0001817585 00000 n 
-0001819750 00000 n 
-0001819570 00000 n 
-0001817850 00000 n 
-0001819686 00000 n 
-0001821381 00000 n 
-0001821201 00000 n 
-0001819894 00000 n 
-0001821317 00000 n 
-0001824235 00000 n 
-0001824385 00000 n 
-0001824537 00000 n 
-0001825351 00000 n 
-0001824071 00000 n 
-0001821525 00000 n 
-0001824840 00000 n 
-0001824904 00000 n 
-0001824967 00000 n 
-0001825031 00000 n 
-0001825159 00000 n 
-0001825287 00000 n 
-0001824689 00000 n 
-0001829332 00000 n 
-0001831375 00000 n 
-0001829088 00000 n 
-0001825508 00000 n 
-0001829204 00000 n 
-0001829396 00000 n 
-0001829460 00000 n 
-0001829524 00000 n 
-0001829588 00000 n 
-0001829652 00000 n 
-0001829716 00000 n 
-0001829780 00000 n 
-0001829844 00000 n 
-0001829907 00000 n 
-0001829971 00000 n 
-0001830034 00000 n 
-0001830098 00000 n 
-0001830160 00000 n 
-0001830224 00000 n 
-0001830288 00000 n 
-0001830352 00000 n 
-0001830416 00000 n 
-0001830480 00000 n 
-0001830544 00000 n 
-0001830608 00000 n 
-0001830672 00000 n 
-0001830736 00000 n 
-0001830800 00000 n 
-0001830864 00000 n 
-0001830928 00000 n 
-0001830992 00000 n 
-0001831056 00000 n 
-0001831120 00000 n 
-0001831184 00000 n 
-0001831312 00000 n 
-0004764745 00000 n 
-0001834113 00000 n 
-0001835213 00000 n 
-0001833997 00000 n 
-0001831532 00000 n 
-0001835149 00000 n 
+0001575083 00000 n 
+0001572977 00000 n 
+0001575707 00000 n 
+0001575834 00000 n 
+0001585500 00000 n 
+0001587804 00000 n 
+0001577829 00000 n 
+0001577522 00000 n 
+0001576056 00000 n 
+0001577638 00000 n 
+0001577765 00000 n 
+0005318682 00000 n 
+0001579740 00000 n 
+0001580212 00000 n 
+0001579603 00000 n 
+0001577987 00000 n 
+0001579894 00000 n 
+0001580021 00000 n 
+0001580148 00000 n 
+0001587932 00000 n 
+0001581311 00000 n 
+0001581913 00000 n 
+0001581174 00000 n 
+0001580356 00000 n 
+0001581468 00000 n 
+0001581595 00000 n 
+0001581722 00000 n 
+0001581849 00000 n 
+0001585564 00000 n 
+0001585256 00000 n 
+0001582057 00000 n 
+0001585372 00000 n 
+0001587996 00000 n 
+0001587560 00000 n 
+0001585694 00000 n 
+0001587676 00000 n 
+0001589815 00000 n 
+0001589509 00000 n 
+0001588112 00000 n 
+0001589625 00000 n 
+0001591492 00000 n 
+0001662233 00000 n 
+0001660075 00000 n 
+0001660231 00000 n 
+0001766124 00000 n 
+0001730829 00000 n 
+0001660706 00000 n 
+0001591346 00000 n 
+0001590016 00000 n 
+0001660387 00000 n 
+0001660514 00000 n 
+0001660642 00000 n 
+0005318808 00000 n 
+0001593025 00000 n 
+0001593157 00000 n 
+0001593205 00000 n 
+0001593585 00000 n 
+0001593848 00000 n 
+0001593871 00000 n 
+0001594096 00000 n 
+0001594315 00000 n 
+0001628698 00000 n 
+0001766415 00000 n 
+0001766607 00000 n 
+0001662096 00000 n 
+0001660880 00000 n 
+0001766287 00000 n 
+0001766543 00000 n 
+0001663779 00000 n 
+0001663911 00000 n 
+0001663959 00000 n 
+0001664339 00000 n 
+0001664602 00000 n 
+0001664625 00000 n 
+0001664850 00000 n 
+0001665069 00000 n 
+0001699452 00000 n 
+0001731740 00000 n 
+0001731872 00000 n 
+0001731920 00000 n 
+0001732319 00000 n 
+0001732341 00000 n 
+0001732565 00000 n 
+0001769297 00000 n 
+0001768862 00000 n 
+0001766768 00000 n 
+0001768978 00000 n 
+0001769105 00000 n 
+0001769169 00000 n 
+0001769233 00000 n 
+0001771814 00000 n 
+0001771443 00000 n 
+0001769427 00000 n 
+0001771559 00000 n 
+0001771623 00000 n 
+0001771750 00000 n 
+0001774682 00000 n 
+0001774375 00000 n 
+0001771944 00000 n 
+0001774491 00000 n 
+0001774618 00000 n 
+0001777424 00000 n 
+0001777244 00000 n 
+0001774812 00000 n 
+0001777360 00000 n 
+0001779856 00000 n 
+0001780600 00000 n 
+0001779710 00000 n 
+0001777554 00000 n 
+0001780154 00000 n 
+0001780281 00000 n 
+0001780345 00000 n 
+0001780409 00000 n 
+0001780006 00000 n 
+0001780536 00000 n 
+0005318934 00000 n 
+0001783112 00000 n 
+0001783453 00000 n 
+0001782975 00000 n 
+0001780730 00000 n 
+0001783263 00000 n 
+0001783390 00000 n 
+0001786140 00000 n 
+0001786330 00000 n 
+0001785897 00000 n 
+0001783640 00000 n 
+0001786013 00000 n 
+0001786266 00000 n 
+0001788078 00000 n 
+0001788234 00000 n 
+0001791022 00000 n 
+0001788831 00000 n 
+0001787932 00000 n 
+0001786460 00000 n 
+0001788385 00000 n 
+0001788512 00000 n 
+0001788639 00000 n 
+0001788767 00000 n 
+0001791305 00000 n 
+0001791816 00000 n 
+0001790885 00000 n 
+0001788961 00000 n 
+0001791177 00000 n 
+0001791369 00000 n 
+0001791433 00000 n 
+0001791497 00000 n 
+0001791624 00000 n 
+0001791752 00000 n 
+0001794507 00000 n 
+0001793946 00000 n 
+0001791987 00000 n 
+0001794062 00000 n 
+0001794189 00000 n 
+0001794316 00000 n 
+0001794443 00000 n 
+0001796833 00000 n 
+0001796078 00000 n 
+0001794708 00000 n 
+0001796194 00000 n 
+0001796258 00000 n 
+0001796322 00000 n 
+0001796386 00000 n 
+0001796450 00000 n 
+0001796514 00000 n 
+0001796578 00000 n 
+0001796642 00000 n 
+0001796706 00000 n 
+0001796769 00000 n 
+0005319060 00000 n 
+0001798866 00000 n 
+0001798559 00000 n 
+0001797005 00000 n 
+0001798675 00000 n 
+0001801738 00000 n 
+0001801304 00000 n 
+0001798982 00000 n 
+0001801420 00000 n 
+0001801547 00000 n 
+0001801674 00000 n 
+0001804682 00000 n 
+0001804247 00000 n 
+0001801854 00000 n 
+0001804363 00000 n 
+0001804490 00000 n 
+0001804618 00000 n 
+0001806545 00000 n 
+0001806237 00000 n 
+0001804826 00000 n 
+0001806353 00000 n 
+0001806481 00000 n 
+0001807835 00000 n 
+0001807655 00000 n 
+0001806675 00000 n 
+0001807771 00000 n 
+0001810123 00000 n 
+0001809816 00000 n 
+0001807965 00000 n 
+0001809932 00000 n 
+0001810059 00000 n 
+0005319186 00000 n 
+0001812032 00000 n 
+0001811852 00000 n 
+0001810253 00000 n 
+0001811968 00000 n 
+0001814278 00000 n 
+0001813843 00000 n 
+0001812205 00000 n 
+0001813959 00000 n 
+0001814087 00000 n 
+0001814214 00000 n 
+0001816132 00000 n 
+0001816480 00000 n 
+0001815995 00000 n 
+0001814465 00000 n 
+0001816288 00000 n 
+0001816416 00000 n 
+0001818182 00000 n 
+0001818002 00000 n 
+0001816610 00000 n 
+0001818118 00000 n 
+0001819344 00000 n 
+0001819164 00000 n 
+0001818298 00000 n 
+0001819280 00000 n 
+0001821555 00000 n 
+0001821247 00000 n 
+0001819460 00000 n 
+0001821363 00000 n 
+0001821491 00000 n 
+0005319312 00000 n 
+0001823340 00000 n 
+0001823887 00000 n 
+0001823203 00000 n 
+0001821756 00000 n 
+0001823503 00000 n 
+0001823631 00000 n 
+0001823759 00000 n 
+0001823823 00000 n 
+0001826737 00000 n 
+0001826894 00000 n 
+0001828167 00000 n 
+0001826582 00000 n 
+0001824017 00000 n 
+0001827208 00000 n 
+0001827336 00000 n 
+0001827400 00000 n 
+0001827464 00000 n 
+0001827528 00000 n 
+0001827592 00000 n 
+0001827656 00000 n 
+0001827720 00000 n 
+0001827784 00000 n 
+0001827847 00000 n 
+0001827911 00000 n 
+0001827975 00000 n 
+0001827051 00000 n 
+0001828103 00000 n 
+0001830112 00000 n 
+0001829676 00000 n 
+0001828338 00000 n 
+0001829792 00000 n 
+0001829920 00000 n 
+0001830048 00000 n 
+0001831743 00000 n 
+0001832218 00000 n 
+0001831606 00000 n 
+0001830256 00000 n 
+0001831898 00000 n 
+0001832026 00000 n 
+0001832154 00000 n 
+0001834008 00000 n 
 0001834497 00000 n 
-0001834615 00000 n 
-0001834663 00000 n 
-0001835128 00000 n 
-0001838101 00000 n 
-0001838443 00000 n 
-0001837964 00000 n 
-0001835471 00000 n 
-0001838253 00000 n 
-0001838379 00000 n 
-0001857167 00000 n 
-0001841250 00000 n 
-0001841070 00000 n 
-0001838601 00000 n 
-0001841186 00000 n 
-0001843796 00000 n 
-0001843489 00000 n 
-0001841408 00000 n 
-0001843605 00000 n 
-0001843733 00000 n 
-0001846092 00000 n 
-0001846243 00000 n 
-0001846585 00000 n 
-0001845946 00000 n 
-0001843968 00000 n 
-0001846393 00000 n 
-0001846521 00000 n 
-0001849541 00000 n 
-0001849697 00000 n 
-0001849853 00000 n 
-0001850329 00000 n 
-0001849386 00000 n 
-0001846743 00000 n 
-0001850010 00000 n 
-0001850138 00000 n 
-0001850265 00000 n 
-0004764871 00000 n 
-0001853338 00000 n 
-0001853054 00000 n 
-0001853402 00000 n 
-0001852917 00000 n 
-0001850487 00000 n 
-0001853210 00000 n 
-0001857231 00000 n 
-0001856667 00000 n 
-0001853546 00000 n 
-0001856783 00000 n 
-0004753085 00000 n 
-0001856847 00000 n 
-0001856911 00000 n 
-0001856975 00000 n 
-0001857039 00000 n 
-0001859880 00000 n 
-0001860060 00000 n 
-0001860299 00000 n 
-0001859734 00000 n 
-0001857444 00000 n 
-0001860235 00000 n 
-0001863394 00000 n 
-0001862958 00000 n 
-0001860499 00000 n 
-0001863074 00000 n 
-0001863202 00000 n 
-0001863330 00000 n 
-0001866157 00000 n 
-0001866630 00000 n 
-0001866020 00000 n 
-0001863580 00000 n 
-0001866310 00000 n 
-0001866438 00000 n 
-0001866566 00000 n 
-0001870051 00000 n 
-0001871075 00000 n 
-0001869807 00000 n 
-0001866802 00000 n 
-0001869923 00000 n 
-0001870115 00000 n 
-0001870179 00000 n 
-0001870243 00000 n 
-0001870307 00000 n 
-0001870371 00000 n 
-0001870435 00000 n 
-0001870499 00000 n 
-0001870563 00000 n 
-0001870627 00000 n 
-0001870691 00000 n 
-0001870755 00000 n 
-0001870819 00000 n 
-0001870883 00000 n 
-0001870947 00000 n 
-0001871011 00000 n 
-0004764997 00000 n 
-0001873754 00000 n 
-0001873574 00000 n 
-0001871288 00000 n 
-0001873690 00000 n 
-0001876228 00000 n 
-0001875920 00000 n 
-0001873997 00000 n 
-0001876036 00000 n 
-0001876164 00000 n 
-0001879484 00000 n 
-0001879048 00000 n 
-0001876472 00000 n 
-0001879164 00000 n 
-0001879292 00000 n 
-0001879420 00000 n 
-0001882248 00000 n 
-0001882847 00000 n 
-0001882111 00000 n 
-0001879656 00000 n 
-0001882400 00000 n 
-0001882528 00000 n 
-0001882592 00000 n 
-0001882656 00000 n 
-0001882720 00000 n 
-0001882783 00000 n 
-0001886138 00000 n 
-0001885830 00000 n 
-0001883019 00000 n 
-0001885946 00000 n 
-0001886074 00000 n 
-0001888040 00000 n 
-0001887860 00000 n 
-0001886296 00000 n 
-0001887976 00000 n 
-0004765123 00000 n 
-0001890537 00000 n 
-0001890230 00000 n 
-0001888198 00000 n 
-0001890346 00000 n 
-0001890473 00000 n 
-0001893261 00000 n 
-0001892953 00000 n 
-0001890752 00000 n 
-0001893069 00000 n 
-0001893197 00000 n 
-0001895358 00000 n 
-0001895050 00000 n 
-0001893433 00000 n 
-0001895166 00000 n 
-0001895294 00000 n 
-0001896746 00000 n 
-0001896566 00000 n 
-0001895488 00000 n 
-0001896682 00000 n 
-0001899089 00000 n 
-0001898782 00000 n 
-0001896848 00000 n 
-0001898898 00000 n 
-0001899026 00000 n 
-0001901164 00000 n 
-0001900856 00000 n 
-0001899247 00000 n 
-0001900972 00000 n 
-0001901100 00000 n 
-0004765249 00000 n 
-0001903945 00000 n 
-0001903637 00000 n 
-0001901294 00000 n 
-0001903753 00000 n 
-0001903881 00000 n 
-0001906160 00000 n 
-0001905853 00000 n 
-0001904089 00000 n 
-0001905969 00000 n 
-0001906096 00000 n 
-0001908199 00000 n 
-0001907892 00000 n 
-0001906332 00000 n 
-0001908008 00000 n 
-0001908136 00000 n 
-0001910837 00000 n 
-0001910401 00000 n 
-0001908357 00000 n 
-0001910517 00000 n 
-0001910645 00000 n 
-0001910773 00000 n 
-0001914044 00000 n 
-0001913417 00000 n 
-0001911052 00000 n 
-0001913533 00000 n 
-0001913597 00000 n 
-0001913660 00000 n 
-0001913724 00000 n 
-0001913788 00000 n 
-0001913852 00000 n 
-0001913980 00000 n 
-0001917180 00000 n 
-0001916680 00000 n 
-0001914230 00000 n 
-0001916796 00000 n 
-0001916860 00000 n 
-0001916924 00000 n 
-0001916988 00000 n 
-0001917052 00000 n 
-0001917116 00000 n 
-0004765375 00000 n 
-0001920409 00000 n 
-0001919781 00000 n 
-0001917338 00000 n 
-0001919897 00000 n 
-0001919961 00000 n 
-0001920025 00000 n 
-0001920089 00000 n 
-0001920153 00000 n 
-0001920217 00000 n 
-0001920345 00000 n 
-0001922943 00000 n 
-0001923289 00000 n 
-0001922806 00000 n 
-0001920567 00000 n 
-0001923097 00000 n 
-0001923225 00000 n 
-0001926423 00000 n 
-0001925731 00000 n 
-0001923461 00000 n 
-0001925847 00000 n 
-0001925975 00000 n 
-0001926103 00000 n 
-0001926167 00000 n 
-0001926231 00000 n 
-0001926295 00000 n 
-0001926359 00000 n 
-0001932024 00000 n 
-0001929777 00000 n 
-0001928893 00000 n 
-0001926553 00000 n 
-0001929009 00000 n 
-0001929073 00000 n 
-0001929137 00000 n 
-0001929201 00000 n 
-0001929265 00000 n 
-0001929329 00000 n 
-0001929393 00000 n 
-0001929457 00000 n 
-0001929521 00000 n 
-0001929585 00000 n 
-0001929649 00000 n 
-0001929713 00000 n 
-0001933277 00000 n 
-0001931908 00000 n 
-0001929921 00000 n 
-0001933085 00000 n 
-0001933213 00000 n 
-0001932407 00000 n 
-0001932525 00000 n 
-0001932573 00000 n 
-0001933064 00000 n 
-0001934416 00000 n 
-0001934236 00000 n 
-0001933521 00000 n 
-0001934352 00000 n 
-0004765501 00000 n 
-0001936236 00000 n 
-0001935928 00000 n 
-0001934518 00000 n 
-0001936044 00000 n 
-0001936172 00000 n 
-0001938850 00000 n 
-0001938670 00000 n 
-0001936408 00000 n 
-0001938786 00000 n 
-0001941524 00000 n 
-0001941216 00000 n 
-0001939094 00000 n 
-0001941332 00000 n 
-0001941460 00000 n 
-0001944073 00000 n 
-0001943765 00000 n 
-0001941682 00000 n 
-0001943881 00000 n 
-0001944009 00000 n 
-0001945129 00000 n 
-0001944949 00000 n 
-0001944217 00000 n 
-0001945065 00000 n 
-0001946433 00000 n 
-0001946253 00000 n 
-0001945231 00000 n 
-0001946369 00000 n 
-0004765627 00000 n 
-0001951040 00000 n 
-0001951354 00000 n 
-0001948668 00000 n 
-0001948360 00000 n 
-0001946549 00000 n 
-0001948476 00000 n 
-0001948604 00000 n 
-0001951510 00000 n 
-0001951689 00000 n 
-0001952317 00000 n 
-0001950867 00000 n 
-0001948812 00000 n 
-0001951869 00000 n 
-0001951997 00000 n 
-0001951197 00000 n 
-0001952125 00000 n 
-0001952253 00000 n 
-0002578455 00000 n 
-0001954951 00000 n 
-0001954387 00000 n 
-0001952503 00000 n 
-0001954503 00000 n 
-0001954631 00000 n 
-0001954759 00000 n 
-0001954887 00000 n 
-0001957476 00000 n 
-0001958070 00000 n 
-0001957339 00000 n 
-0001955095 00000 n 
-0001957686 00000 n 
-0001957750 00000 n 
-0001957814 00000 n 
-0001957878 00000 n 
-0001958006 00000 n 
-0001960265 00000 n 
-0001960085 00000 n 
-0001958284 00000 n 
-0001960201 00000 n 
-0001963121 00000 n 
-0001962813 00000 n 
-0001960409 00000 n 
-0001962929 00000 n 
-0001963057 00000 n 
-0004765753 00000 n 
-0001969065 00000 n 
-0001968603 00000 n 
-0001966180 00000 n 
-0001965873 00000 n 
-0001963293 00000 n 
-0001965989 00000 n 
-0001966117 00000 n 
-0001968760 00000 n 
-0001969244 00000 n 
-0001969986 00000 n 
-0001968430 00000 n 
-0001966366 00000 n 
-0001969412 00000 n 
-0001969540 00000 n 
-0001968913 00000 n 
-0001969667 00000 n 
-0001969795 00000 n 
-0001969923 00000 n 
-0001971186 00000 n 
-0001971006 00000 n 
-0001970172 00000 n 
-0001971122 00000 n 
-0001971569 00000 n 
-0001971389 00000 n 
-0001971288 00000 n 
-0001971505 00000 n 
-0001973675 00000 n 
-0001973514 00000 n 
-0001977338 00000 n 
-0001974418 00000 n 
-0001973368 00000 n 
-0001971611 00000 n 
-0001973844 00000 n 
-0001974098 00000 n 
-0001974226 00000 n 
-0001974354 00000 n 
-0001977509 00000 n 
-0001978016 00000 n 
-0001977192 00000 n 
-0001974590 00000 n 
-0001977696 00000 n 
-0001977824 00000 n 
-0001977952 00000 n 
-0004765879 00000 n 
-0001980477 00000 n 
-0001980827 00000 n 
-0001980340 00000 n 
-0001978230 00000 n 
-0001980636 00000 n 
-0001980763 00000 n 
-0001984607 00000 n 
-0001984320 00000 n 
-0001985627 00000 n 
-0001984183 00000 n 
-0001981071 00000 n 
-0001984479 00000 n 
-0001984671 00000 n 
-0001984735 00000 n 
-0001984799 00000 n 
-0001984863 00000 n 
-0001984927 00000 n 
-0001984991 00000 n 
-0001985055 00000 n 
-0001985119 00000 n 
-0001985182 00000 n 
-0001985246 00000 n 
-0001985309 00000 n 
-0001985373 00000 n 
-0001985435 00000 n 
-0001985563 00000 n 
-0001989471 00000 n 
-0001991195 00000 n 
-0001989227 00000 n 
-0001985784 00000 n 
-0001989343 00000 n 
-0001989535 00000 n 
-0001989599 00000 n 
-0001989663 00000 n 
-0001989727 00000 n 
-0001989791 00000 n 
-0001989855 00000 n 
-0001989919 00000 n 
-0001989983 00000 n 
-0001990046 00000 n 
-0001990110 00000 n 
-0001990173 00000 n 
-0001990237 00000 n 
-0001990299 00000 n 
-0001990363 00000 n 
-0001990427 00000 n 
-0001990491 00000 n 
-0001990555 00000 n 
-0001990619 00000 n 
-0001990683 00000 n 
-0001990747 00000 n 
-0001990811 00000 n 
-0001990875 00000 n 
-0001990939 00000 n 
-0001991003 00000 n 
-0001991131 00000 n 
-0001994163 00000 n 
-0001993664 00000 n 
-0001991366 00000 n 
-0001993780 00000 n 
-0001993908 00000 n 
-0001994035 00000 n 
-0001994099 00000 n 
-0001997047 00000 n 
-0001996419 00000 n 
-0001994293 00000 n 
-0001996535 00000 n 
-0001996599 00000 n 
-0001996663 00000 n 
-0001996727 00000 n 
-0001996791 00000 n 
-0001996855 00000 n 
-0001996983 00000 n 
-0001999419 00000 n 
-0001999113 00000 n 
-0001997205 00000 n 
-0001999229 00000 n 
-0004766005 00000 n 
-0002001721 00000 n 
-0002002232 00000 n 
-0002001575 00000 n 
-0001999662 00000 n 
-0002002040 00000 n 
-0002002168 00000 n 
-0002001882 00000 n 
-0002004932 00000 n 
-0002004497 00000 n 
-0002002390 00000 n 
-0002004613 00000 n 
-0002004741 00000 n 
-0002004868 00000 n 
-0002007446 00000 n 
-0002010234 00000 n 
-0002007914 00000 n 
-0002007309 00000 n 
-0002005062 00000 n 
-0002007595 00000 n 
-0002007723 00000 n 
-0002007850 00000 n 
-0002031345 00000 n 
-0002031409 00000 n 
-0002010118 00000 n 
-0002008115 00000 n 
-0002031217 00000 n 
-0002031028 00000 n 
-0002033869 00000 n 
-0002035524 00000 n 
-0002066808 00000 n 
-0002034211 00000 n 
-0002033732 00000 n 
-0002031557 00000 n 
-0002034019 00000 n 
-0002034147 00000 n 
-0002067086 00000 n 
-0002050781 00000 n 
-0002067406 00000 n 
-0002035387 00000 n 
-0002034384 00000 n 
-0002066958 00000 n 
-0002067214 00000 n 
-0002067342 00000 n 
-0004766131 00000 n 
-0002050595 00000 n 
-0002066621 00000 n 
-0002070105 00000 n 
-0002069798 00000 n 
-0002067597 00000 n 
-0002069914 00000 n 
-0002070042 00000 n 
-0002074516 00000 n 
-0002072266 00000 n 
-0002071958 00000 n 
-0002070293 00000 n 
-0002072074 00000 n 
-0002072202 00000 n 
-0002074885 00000 n 
-0002074379 00000 n 
-0002072453 00000 n 
-0002074694 00000 n 
-0002074822 00000 n 
-0002077638 00000 n 
-0002080456 00000 n 
-0002078013 00000 n 
-0002077501 00000 n 
-0002075129 00000 n 
-0002077821 00000 n 
-0002077949 00000 n 
-0002080826 00000 n 
-0002080319 00000 n 
-0002078213 00000 n 
-0002080634 00000 n 
-0002080762 00000 n 
-0002083328 00000 n 
-0002083021 00000 n 
-0002081111 00000 n 
-0002083137 00000 n 
-0002083265 00000 n 
-0004766257 00000 n 
-0002085594 00000 n 
-0002085159 00000 n 
-0002083529 00000 n 
-0002085275 00000 n 
-0002085403 00000 n 
-0002085530 00000 n 
-0002087604 00000 n 
-0002089779 00000 n 
-0002140492 00000 n 
-0002088074 00000 n 
-0002087467 00000 n 
-0002085738 00000 n 
-0002087754 00000 n 
-0002087882 00000 n 
-0002088010 00000 n 
-0002140770 00000 n 
-0002112391 00000 n 
-0002176385 00000 n 
-0002141090 00000 n 
-0002089642 00000 n 
-0002088232 00000 n 
-0002140642 00000 n 
-0002140898 00000 n 
-0002141026 00000 n 
-0002112204 00000 n 
-0002140303 00000 n 
-0002143529 00000 n 
-0002176540 00000 n 
-0002178752 00000 n 
-0002208346 00000 n 
-0002176888 00000 n 
-0002143383 00000 n 
-0002141309 00000 n 
-0002176696 00000 n 
-0002176824 00000 n 
-0002176196 00000 n 
-0002208773 00000 n 
-0002210612 00000 n 
-0002208496 00000 n 
-0002258043 00000 n 
-0002209093 00000 n 
-0002178606 00000 n 
-0002177078 00000 n 
-0002208645 00000 n 
-0002208901 00000 n 
-0002209029 00000 n 
-0002208157 00000 n 
-0002256243 00000 n 
-0002288924 00000 n 
-0002256435 00000 n 
-0002210496 00000 n 
-0002209269 00000 n 
-0002256115 00000 n 
-0002256371 00000 n 
-0004766383 00000 n 
-0002255926 00000 n 
-0002288988 00000 n 
-0002257927 00000 n 
-0002256611 00000 n 
-0002288796 00000 n 
-0002288607 00000 n 
-0002291678 00000 n 
-0002291498 00000 n 
-0002289150 00000 n 
-0002291614 00000 n 
-0002294140 00000 n 
-0002293833 00000 n 
-0002291822 00000 n 
-0002293949 00000 n 
-0002294077 00000 n 
-0002296798 00000 n 
-0002296362 00000 n 
-0002294284 00000 n 
-0002296478 00000 n 
-0002296606 00000 n 
-0002296734 00000 n 
-0002299510 00000 n 
-0002299074 00000 n 
-0002297000 00000 n 
-0002299190 00000 n 
-0002299318 00000 n 
-0002299446 00000 n 
-0002301720 00000 n 
-0002301540 00000 n 
-0002299668 00000 n 
-0002301656 00000 n 
-0004766509 00000 n 
-0002304184 00000 n 
-0002304656 00000 n 
-0002304047 00000 n 
-0002301935 00000 n 
-0002304336 00000 n 
-0002304464 00000 n 
-0002304592 00000 n 
-0002308093 00000 n 
-0002307626 00000 n 
-0002309644 00000 n 
-0002307783 00000 n 
-0002308157 00000 n 
-0002307480 00000 n 
-0002304828 00000 n 
-0002307965 00000 n 
-0002356840 00000 n 
-0002356554 00000 n 
-0002356904 00000 n 
-0002309507 00000 n 
-0002308371 00000 n 
-0002356712 00000 n 
-0002356365 00000 n 
-0002361697 00000 n 
-0002359026 00000 n 
-0002362172 00000 n 
-0002358889 00000 n 
-0002357066 00000 n 
-0002361852 00000 n 
-0002361980 00000 n 
-0002362108 00000 n 
-0002359668 00000 n 
-0002359786 00000 n 
-0002359834 00000 n 
-0002360061 00000 n 
-0002360083 00000 n 
-0002360358 00000 n 
-0002361674 00000 n 
-0002367915 00000 n 
-0002364733 00000 n 
-0002368072 00000 n 
-0002371317 00000 n 
-0002368569 00000 n 
-0002364587 00000 n 
-0002362360 00000 n 
-0002368252 00000 n 
-0002368379 00000 n 
-0002368505 00000 n 
-0002365610 00000 n 
-0002365728 00000 n 
-0002365776 00000 n 
-0002366015 00000 n 
-0002366037 00000 n 
-0002366318 00000 n 
-0002367892 00000 n 
-0002371499 00000 n 
-0002371684 00000 n 
-0002371893 00000 n 
-0002372072 00000 n 
-0002375452 00000 n 
-0002372441 00000 n 
-0002371144 00000 n 
-0002368799 00000 n 
-0002372249 00000 n 
-0002372377 00000 n 
-0004766635 00000 n 
-0002374853 00000 n 
-0002375003 00000 n 
-0002375303 00000 n 
-0002377470 00000 n 
-0002435281 00000 n 
-0002376112 00000 n 
-0002374680 00000 n 
-0002372641 00000 n 
-0002375664 00000 n 
-0002375792 00000 n 
-0002375920 00000 n 
-0002375153 00000 n 
-0002376048 00000 n 
-0002435560 00000 n 
-0002435816 00000 n 
-0002405529 00000 n 
-0002435880 00000 n 
-0002377333 00000 n 
-0002376298 00000 n 
-0002435432 00000 n 
-0002435688 00000 n 
-0002405342 00000 n 
-0002435092 00000 n 
-0002438598 00000 n 
-0002441004 00000 n 
-0002439261 00000 n 
-0002438461 00000 n 
-0002436057 00000 n 
-0002438749 00000 n 
-0002438877 00000 n 
-0002439005 00000 n 
-0002439069 00000 n 
-0002439133 00000 n 
-0002439197 00000 n 
-0002471882 00000 n 
-0002472074 00000 n 
-0002440888 00000 n 
-0002439446 00000 n 
-0002471754 00000 n 
-0002472010 00000 n 
-0002471565 00000 n 
-0002474751 00000 n 
-0002475426 00000 n 
-0002474605 00000 n 
-0002472278 00000 n 
-0002475106 00000 n 
-0002475234 00000 n 
-0002474930 00000 n 
-0002475362 00000 n 
-0002478354 00000 n 
-0002477790 00000 n 
-0002475584 00000 n 
-0002477906 00000 n 
-0002478034 00000 n 
-0002478162 00000 n 
-0002478290 00000 n 
-0004766761 00000 n 
-0002481320 00000 n 
-0002480758 00000 n 
-0002478512 00000 n 
-0002480874 00000 n 
-0002481001 00000 n 
-0002481128 00000 n 
-0002481256 00000 n 
-0002483874 00000 n 
-0002484355 00000 n 
-0002483737 00000 n 
-0002481436 00000 n 
-0002484035 00000 n 
-0002484163 00000 n 
-0002484291 00000 n 
-0002487754 00000 n 
-0002487908 00000 n 
-0002490063 00000 n 
-0002487599 00000 n 
-0002484541 00000 n 
-0002488271 00000 n 
-0002488399 00000 n 
-0002488527 00000 n 
-0002488591 00000 n 
-0002488655 00000 n 
-0002488719 00000 n 
-0002488783 00000 n 
-0002488847 00000 n 
-0002488911 00000 n 
-0002488975 00000 n 
-0002489039 00000 n 
-0002489103 00000 n 
-0002489167 00000 n 
-0002489231 00000 n 
-0002489295 00000 n 
-0002489359 00000 n 
-0002489423 00000 n 
-0002489487 00000 n 
-0002489551 00000 n 
-0002489615 00000 n 
-0002489679 00000 n 
-0002489743 00000 n 
-0002489807 00000 n 
-0002489871 00000 n 
-0002489999 00000 n 
-0002488090 00000 n 
-0002491469 00000 n 
-0002491289 00000 n 
-0002490234 00000 n 
-0002491405 00000 n 
-0002493624 00000 n 
-0002493316 00000 n 
-0002491599 00000 n 
-0002493432 00000 n 
-0002493560 00000 n 
-0002498649 00000 n 
-0002495979 00000 n 
-0002495543 00000 n 
-0002493825 00000 n 
-0002495659 00000 n 
-0002495787 00000 n 
-0002495915 00000 n 
-0004766887 00000 n 
-0002499025 00000 n 
-0002498512 00000 n 
-0002496194 00000 n 
-0002498833 00000 n 
-0002498961 00000 n 
-0002500401 00000 n 
-0002500221 00000 n 
-0002499311 00000 n 
-0002500337 00000 n 
-0002502583 00000 n 
-0002502969 00000 n 
-0002502437 00000 n 
-0002500574 00000 n 
-0002502905 00000 n 
-0002502744 00000 n 
-0002505900 00000 n 
-0002505592 00000 n 
-0002503156 00000 n 
-0002505708 00000 n 
-0002505836 00000 n 
-0002508741 00000 n 
-0002508305 00000 n 
-0002506086 00000 n 
-0002508421 00000 n 
-0002508549 00000 n 
-0002508677 00000 n 
-0002510149 00000 n 
-0002509969 00000 n 
-0002508927 00000 n 
-0002510085 00000 n 
-0004767013 00000 n 
-0002512242 00000 n 
-0002511870 00000 n 
-0002510251 00000 n 
-0002511986 00000 n 
-0002512114 00000 n 
-0002512178 00000 n 
-0002514935 00000 n 
-0002514307 00000 n 
-0002512457 00000 n 
-0002514423 00000 n 
-0002514487 00000 n 
-0002514551 00000 n 
-0002514615 00000 n 
-0002514679 00000 n 
-0002514807 00000 n 
+0001833862 00000 n 
+0001832348 00000 n 
+0001834305 00000 n 
+0001834433 00000 n 
+0001834157 00000 n 
+0001836060 00000 n 
+0001835880 00000 n 
+0001834627 00000 n 
+0001835996 00000 n 
+0005319438 00000 n 
+0001837776 00000 n 
+0001837596 00000 n 
+0001836233 00000 n 
+0001837712 00000 n 
+0001839085 00000 n 
+0001838777 00000 n 
+0001837892 00000 n 
+0001838893 00000 n 
+0001839021 00000 n 
+0001840825 00000 n 
+0001840517 00000 n 
+0001839215 00000 n 
+0001840633 00000 n 
+0001840761 00000 n 
+0001842560 00000 n 
+0001842380 00000 n 
+0001840955 00000 n 
+0001842496 00000 n 
+0001844520 00000 n 
+0001844912 00000 n 
+0001844383 00000 n 
+0001842690 00000 n 
+0001844720 00000 n 
+0001844848 00000 n 
+0001846416 00000 n 
+0001846236 00000 n 
+0001845098 00000 n 
+0001846352 00000 n 
+0005319564 00000 n 
+0001847747 00000 n 
+0001847567 00000 n 
+0001846532 00000 n 
+0001847683 00000 n 
+0001849992 00000 n 
+0001849684 00000 n 
+0001847863 00000 n 
+0001849800 00000 n 
+0001849928 00000 n 
+0001851955 00000 n 
+0001851647 00000 n 
+0001850122 00000 n 
+0001851763 00000 n 
+0001851891 00000 n 
+0001854167 00000 n 
+0001853859 00000 n 
+0001852099 00000 n 
+0001853975 00000 n 
+0001854103 00000 n 
+0001855999 00000 n 
+0001856633 00000 n 
+0001855853 00000 n 
+0001854311 00000 n 
+0001856313 00000 n 
+0001856441 00000 n 
+0001856157 00000 n 
+0001856569 00000 n 
+0001859445 00000 n 
+0001859009 00000 n 
+0001856763 00000 n 
+0001859125 00000 n 
+0001859189 00000 n 
+0001859253 00000 n 
+0001859381 00000 n 
+0005319690 00000 n 
+0001862037 00000 n 
+0001862251 00000 n 
+0001861900 00000 n 
+0001859561 00000 n 
+0001862187 00000 n 
+0001864939 00000 n 
+0001864631 00000 n 
+0001862395 00000 n 
+0001864747 00000 n 
+0001864875 00000 n 
+0001867315 00000 n 
+0001867135 00000 n 
+0001865097 00000 n 
+0001867251 00000 n 
+0001869715 00000 n 
+0001869151 00000 n 
+0001867516 00000 n 
+0001869267 00000 n 
+0001869395 00000 n 
+0001869523 00000 n 
+0001869651 00000 n 
+0001872382 00000 n 
+0001872202 00000 n 
+0001869859 00000 n 
+0001872318 00000 n 
+0001873743 00000 n 
+0001873563 00000 n 
+0001872512 00000 n 
+0001873679 00000 n 
+0005319816 00000 n 
+0001875803 00000 n 
+0001875239 00000 n 
+0001873859 00000 n 
+0001875355 00000 n 
+0001875483 00000 n 
+0001875611 00000 n 
+0001875739 00000 n 
+0001877854 00000 n 
+0001877418 00000 n 
+0001875933 00000 n 
+0001877534 00000 n 
+0001877662 00000 n 
+0001877790 00000 n 
+0001879802 00000 n 
+0001879239 00000 n 
+0001877984 00000 n 
+0001879355 00000 n 
+0001879483 00000 n 
+0001879611 00000 n 
+0001879739 00000 n 
+0001881202 00000 n 
+0001881022 00000 n 
+0001879932 00000 n 
+0001881138 00000 n 
+0001883464 00000 n 
+0001883156 00000 n 
+0001881318 00000 n 
+0001883272 00000 n 
+0001885725 00000 n 
+0001886479 00000 n 
+0001885579 00000 n 
+0001883580 00000 n 
+0001886033 00000 n 
+0001886161 00000 n 
+0001885879 00000 n 
+0001886287 00000 n 
+0001886415 00000 n 
+0005319942 00000 n 
+0001889052 00000 n 
+0001888872 00000 n 
+0001886665 00000 n 
+0001888988 00000 n 
+0001891929 00000 n 
+0001891749 00000 n 
+0001889168 00000 n 
+0001891865 00000 n 
+0001894607 00000 n 
+0001894427 00000 n 
+0001892059 00000 n 
+0001894543 00000 n 
+0001897485 00000 n 
+0001897049 00000 n 
+0001894737 00000 n 
+0001897165 00000 n 
+0001897293 00000 n 
+0001897421 00000 n 
+0001900299 00000 n 
+0001901605 00000 n 
+0001900162 00000 n 
+0001897643 00000 n 
+0001900453 00000 n 
+0001900581 00000 n 
+0001900709 00000 n 
+0001900837 00000 n 
+0001900965 00000 n 
+0001901029 00000 n 
+0001901093 00000 n 
+0001901157 00000 n 
+0001901221 00000 n 
+0001901285 00000 n 
+0001901349 00000 n 
+0001901413 00000 n 
+0001901477 00000 n 
+0001901541 00000 n 
+0001906059 00000 n 
+0001903161 00000 n 
+0001902789 00000 n 
+0001901776 00000 n 
+0001902905 00000 n 
+0001902969 00000 n 
+0001903033 00000 n 
+0001903097 00000 n 
+0005320068 00000 n 
+0001907557 00000 n 
+0001905922 00000 n 
+0001903277 00000 n 
+0001906213 00000 n 
+0001906341 00000 n 
+0001906469 00000 n 
+0001906533 00000 n 
+0001906597 00000 n 
+0001906661 00000 n 
+0001906725 00000 n 
+0001906789 00000 n 
+0001906853 00000 n 
+0001906917 00000 n 
+0001906981 00000 n 
+0001907045 00000 n 
+0001907109 00000 n 
+0001907173 00000 n 
+0001907237 00000 n 
+0001907301 00000 n 
+0001907365 00000 n 
+0001907429 00000 n 
+0001907493 00000 n 
+0001913781 00000 n 
+0001910255 00000 n 
+0001909884 00000 n 
+0001907728 00000 n 
+0001910000 00000 n 
+0001910064 00000 n 
+0001910191 00000 n 
+0001915281 00000 n 
+0001913644 00000 n 
+0001910399 00000 n 
+0001913937 00000 n 
+0001914065 00000 n 
+0001914129 00000 n 
+0001914193 00000 n 
+0001914257 00000 n 
+0001914321 00000 n 
+0001914385 00000 n 
+0001914449 00000 n 
+0001914513 00000 n 
+0001914577 00000 n 
+0001914641 00000 n 
+0001914705 00000 n 
+0001914769 00000 n 
+0001914833 00000 n 
+0001914897 00000 n 
+0001914961 00000 n 
+0001915025 00000 n 
+0001915089 00000 n 
+0001915153 00000 n 
+0001915217 00000 n 
+0001917602 00000 n 
+0001916974 00000 n 
+0001915438 00000 n 
+0001917090 00000 n 
+0001917154 00000 n 
+0001917218 00000 n 
+0001917282 00000 n 
+0001917346 00000 n 
+0001917410 00000 n 
+0001917538 00000 n 
+0001920991 00000 n 
+0001921147 00000 n 
+0001922573 00000 n 
+0001920845 00000 n 
+0001917746 00000 n 
+0001921297 00000 n 
+0001921425 00000 n 
+0001921489 00000 n 
+0001921553 00000 n 
+0001921617 00000 n 
+0001921681 00000 n 
+0001921745 00000 n 
+0001921809 00000 n 
+0001921873 00000 n 
+0001921937 00000 n 
+0001922001 00000 n 
+0001922065 00000 n 
+0001922129 00000 n 
+0001922193 00000 n 
+0001922256 00000 n 
+0001922320 00000 n 
+0001922382 00000 n 
+0001922446 00000 n 
+0001922509 00000 n 
+0003977756 00000 n 
+0001924144 00000 n 
+0001923964 00000 n 
+0001922744 00000 n 
+0001924080 00000 n 
+0005320194 00000 n 
+0001925795 00000 n 
+0001926347 00000 n 
+0001925658 00000 n 
+0001924317 00000 n 
+0001925963 00000 n 
+0001926027 00000 n 
+0001926091 00000 n 
+0001926155 00000 n 
+0001926219 00000 n 
+0001926283 00000 n 
+0001928060 00000 n 
+0001927688 00000 n 
+0001926519 00000 n 
+0001927804 00000 n 
+0001927868 00000 n 
+0001927932 00000 n 
+0001927996 00000 n 
+0001930841 00000 n 
+0001932148 00000 n 
+0001930704 00000 n 
+0001928176 00000 n 
+0001930997 00000 n 
+0001931125 00000 n 
+0001931253 00000 n 
+0001931317 00000 n 
+0001931381 00000 n 
+0001931444 00000 n 
+0001931508 00000 n 
+0001931572 00000 n 
+0001931636 00000 n 
+0001931700 00000 n 
+0001931764 00000 n 
+0001931828 00000 n 
+0001931892 00000 n 
+0001931956 00000 n 
+0001932020 00000 n 
+0001932084 00000 n 
+0001933757 00000 n 
+0001933941 00000 n 
+0001934722 00000 n 
+0001933602 00000 n 
+0001932319 00000 n 
+0001934402 00000 n 
+0001934530 00000 n 
+0001934658 00000 n 
+0001934171 00000 n 
+0001936737 00000 n 
+0001936430 00000 n 
+0001934908 00000 n 
+0001936546 00000 n 
+0001939219 00000 n 
+0001939563 00000 n 
+0001939082 00000 n 
+0001936867 00000 n 
+0001939371 00000 n 
+0001939499 00000 n 
+0005320320 00000 n 
+0001942348 00000 n 
+0001942540 00000 n 
+0001942104 00000 n 
+0001939764 00000 n 
+0001942220 00000 n 
+0001942476 00000 n 
+0005309517 00000 n 
+0001944826 00000 n 
+0001944646 00000 n 
+0001942698 00000 n 
+0001944762 00000 n 
+0001947473 00000 n 
+0001947165 00000 n 
+0001945041 00000 n 
+0001947281 00000 n 
+0001947409 00000 n 
+0001949278 00000 n 
+0001948970 00000 n 
+0001947617 00000 n 
+0001949086 00000 n 
+0001949214 00000 n 
+0001951141 00000 n 
+0001951482 00000 n 
+0001951004 00000 n 
+0001949408 00000 n 
+0001951290 00000 n 
+0001951418 00000 n 
+0001953575 00000 n 
+0001953139 00000 n 
+0001951612 00000 n 
+0001953255 00000 n 
+0001953383 00000 n 
+0001953511 00000 n 
+0005320446 00000 n 
+0001955147 00000 n 
+0001955369 00000 n 
+0001955010 00000 n 
+0001953762 00000 n 
+0001955305 00000 n 
+0001955766 00000 n 
+0001955586 00000 n 
+0001955485 00000 n 
+0001955702 00000 n 
+0001957837 00000 n 
+0001957529 00000 n 
+0001955808 00000 n 
+0001957645 00000 n 
+0001960454 00000 n 
+0001960146 00000 n 
+0001957953 00000 n 
+0001960262 00000 n 
+0001960390 00000 n 
+0001963180 00000 n 
+0001962744 00000 n 
+0001960626 00000 n 
+0001962860 00000 n 
+0001962988 00000 n 
+0001963116 00000 n 
+0001965341 00000 n 
+0001965161 00000 n 
+0001963338 00000 n 
+0001965277 00000 n 
+0005320572 00000 n 
+0001967774 00000 n 
+0001968123 00000 n 
+0001967637 00000 n 
+0001965471 00000 n 
+0001967932 00000 n 
+0001968060 00000 n 
+0001970464 00000 n 
+0001970185 00000 n 
+0001972696 00000 n 
+0002031154 00000 n 
+0001970656 00000 n 
+0001970048 00000 n 
+0001968281 00000 n 
+0001970336 00000 n 
+0001970592 00000 n 
+0002031433 00000 n 
+0002031625 00000 n 
+0001972559 00000 n 
+0001970786 00000 n 
+0002031305 00000 n 
+0002031561 00000 n 
+0001973669 00000 n 
+0001973801 00000 n 
+0001973849 00000 n 
+0001974236 00000 n 
+0001974649 00000 n 
+0001974671 00000 n 
+0001974890 00000 n 
+0001975112 00000 n 
+0002008459 00000 n 
+0002034498 00000 n 
+0002034190 00000 n 
+0002031771 00000 n 
+0002034306 00000 n 
+0002034434 00000 n 
+0002036580 00000 n 
+0002036208 00000 n 
+0002034642 00000 n 
+0002036324 00000 n 
+0002036388 00000 n 
+0002036452 00000 n 
+0002036516 00000 n 
+0002039029 00000 n 
+0002039177 00000 n 
+0002039326 00000 n 
+0002040049 00000 n 
+0002038874 00000 n 
+0002036696 00000 n 
+0002039474 00000 n 
+0002039602 00000 n 
+0002039730 00000 n 
+0002039858 00000 n 
+0002039986 00000 n 
+0005320698 00000 n 
+0002042697 00000 n 
+0002045421 00000 n 
+0002087469 00000 n 
+0002042889 00000 n 
+0002042453 00000 n 
+0002040193 00000 n 
+0002042569 00000 n 
+0002042825 00000 n 
+0002045485 00000 n 
+0002045177 00000 n 
+0002043033 00000 n 
+0002045293 00000 n 
+0002048010 00000 n 
+0002048797 00000 n 
+0002047873 00000 n 
+0002045615 00000 n 
+0002048221 00000 n 
+0002048349 00000 n 
+0002048477 00000 n 
+0002048541 00000 n 
+0002048605 00000 n 
+0002048733 00000 n 
+0002051590 00000 n 
+0002051218 00000 n 
+0002048983 00000 n 
+0002051334 00000 n 
+0002051398 00000 n 
+0002051462 00000 n 
+0002051526 00000 n 
+0002054512 00000 n 
+0002053949 00000 n 
+0002051805 00000 n 
+0002054065 00000 n 
+0002054193 00000 n 
+0002054321 00000 n 
+0002054448 00000 n 
+0002057270 00000 n 
+0002056834 00000 n 
+0002054699 00000 n 
+0002056950 00000 n 
+0002057078 00000 n 
+0002057206 00000 n 
+0005308173 00000 n 
+0005320824 00000 n 
+0002060318 00000 n 
+0002059882 00000 n 
+0002057442 00000 n 
+0002059998 00000 n 
+0002060126 00000 n 
+0002060254 00000 n 
+0002063168 00000 n 
+0002062860 00000 n 
+0002060462 00000 n 
+0002062976 00000 n 
+0002063104 00000 n 
+0002064144 00000 n 
+0002063964 00000 n 
+0002063312 00000 n 
+0002064080 00000 n 
+0002066657 00000 n 
+0002066349 00000 n 
+0002064274 00000 n 
+0002066465 00000 n 
+0002066593 00000 n 
+0002068108 00000 n 
+0002067928 00000 n 
+0002066815 00000 n 
+0002068044 00000 n 
+0002071353 00000 n 
+0002070599 00000 n 
+0002068252 00000 n 
+0002070715 00000 n 
+0002070779 00000 n 
+0002070843 00000 n 
+0002070906 00000 n 
+0002070970 00000 n 
+0002071033 00000 n 
+0002071161 00000 n 
+0002071289 00000 n 
+0005320950 00000 n 
+0002073757 00000 n 
+0002073449 00000 n 
+0002071539 00000 n 
+0002073565 00000 n 
+0002073693 00000 n 
+0002075692 00000 n 
+0002076034 00000 n 
+0002075555 00000 n 
+0002073901 00000 n 
+0002075842 00000 n 
+0002075970 00000 n 
+0002089118 00000 n 
+0002078531 00000 n 
+0002077839 00000 n 
+0002076164 00000 n 
+0002077955 00000 n 
+0002078083 00000 n 
+0002078211 00000 n 
+0002078339 00000 n 
+0002078403 00000 n 
+0002078467 00000 n 
+0002080072 00000 n 
+0002079764 00000 n 
+0002078661 00000 n 
+0002079880 00000 n 
+0002079944 00000 n 
+0002080008 00000 n 
+0002083000 00000 n 
+0002082309 00000 n 
+0002080259 00000 n 
+0002082425 00000 n 
+0002082489 00000 n 
+0002082553 00000 n 
+0002082617 00000 n 
+0002082681 00000 n 
+0002082809 00000 n 
+0002082936 00000 n 
+0002084898 00000 n 
+0002084526 00000 n 
+0002083157 00000 n 
+0002084642 00000 n 
+0002084706 00000 n 
+0002084770 00000 n 
+0002084834 00000 n 
+0005321076 00000 n 
+0002087533 00000 n 
+0002087226 00000 n 
+0002085027 00000 n 
+0002087342 00000 n 
+0002089182 00000 n 
+0002088874 00000 n 
+0002087649 00000 n 
+0002088990 00000 n 
+0002091123 00000 n 
+0002090687 00000 n 
+0002089284 00000 n 
+0002090803 00000 n 
+0002091059 00000 n 
+0002093952 00000 n 
+0002093645 00000 n 
+0002091253 00000 n 
+0002093761 00000 n 
+0002093888 00000 n 
+0002096599 00000 n 
+0002096291 00000 n 
+0002094139 00000 n 
+0002096407 00000 n 
+0002096535 00000 n 
+0002099184 00000 n 
+0002099004 00000 n 
+0002096757 00000 n 
+0002099120 00000 n 
+0005321202 00000 n 
+0002101846 00000 n 
+0002101666 00000 n 
+0002099300 00000 n 
+0002101782 00000 n 
+0002104342 00000 n 
+0002103778 00000 n 
+0002101948 00000 n 
+0002103894 00000 n 
+0002104022 00000 n 
+0002104150 00000 n 
+0002104278 00000 n 
+0002107086 00000 n 
+0002106522 00000 n 
+0002104458 00000 n 
+0002106638 00000 n 
+0002106766 00000 n 
+0002106894 00000 n 
+0002107022 00000 n 
+0002109919 00000 n 
+0002109355 00000 n 
+0002107202 00000 n 
+0002109471 00000 n 
+0002109599 00000 n 
+0002109727 00000 n 
+0002109855 00000 n 
+0002112665 00000 n 
+0002112357 00000 n 
+0002110077 00000 n 
+0002112473 00000 n 
+0002112601 00000 n 
+0002115437 00000 n 
+0002115003 00000 n 
+0002112781 00000 n 
+0002115119 00000 n 
+0002115246 00000 n 
+0002115374 00000 n 
+0005321328 00000 n 
+0002122222 00000 n 
+0002119087 00000 n 
+0002118270 00000 n 
+0002115567 00000 n 
+0002118386 00000 n 
+0002118450 00000 n 
+0002118514 00000 n 
+0002118577 00000 n 
+0002118641 00000 n 
+0002118704 00000 n 
+0002118768 00000 n 
+0002118896 00000 n 
+0002118959 00000 n 
+0002119023 00000 n 
+0002122370 00000 n 
+0002123733 00000 n 
+0002122076 00000 n 
+0002119258 00000 n 
+0002122518 00000 n 
+0002122646 00000 n 
+0002122710 00000 n 
+0002122774 00000 n 
+0002122838 00000 n 
+0002122902 00000 n 
+0002122966 00000 n 
+0002123030 00000 n 
+0002123094 00000 n 
+0002123222 00000 n 
+0002123286 00000 n 
+0002123349 00000 n 
+0002123413 00000 n 
+0002123477 00000 n 
+0002123541 00000 n 
+0002123669 00000 n 
+0002126206 00000 n 
+0002126026 00000 n 
+0002123904 00000 n 
+0002126142 00000 n 
+0002127738 00000 n 
+0002127558 00000 n 
+0002126407 00000 n 
+0002127674 00000 n 
+0002129751 00000 n 
+0002129443 00000 n 
+0002127911 00000 n 
+0002129559 00000 n 
+0002129687 00000 n 
+0002131399 00000 n 
+0002131091 00000 n 
+0002129895 00000 n 
+0002131207 00000 n 
+0002131335 00000 n 
+0005321454 00000 n 
+0002136252 00000 n 
+0002134056 00000 n 
+0002133620 00000 n 
+0002131529 00000 n 
+0002133736 00000 n 
+0002133864 00000 n 
+0002133992 00000 n 
+0002136425 00000 n 
+0002136611 00000 n 
+0002138791 00000 n 
+0002138969 00000 n 
+0002137246 00000 n 
+0002136097 00000 n 
+0002134186 00000 n 
+0002136798 00000 n 
+0002136926 00000 n 
+0002137054 00000 n 
+0002137182 00000 n 
+0002139139 00000 n 
+0002139326 00000 n 
+0002139513 00000 n 
+0002139893 00000 n 
+0002138618 00000 n 
+0002137432 00000 n 
+0002139701 00000 n 
+0002139829 00000 n 
+0002140360 00000 n 
+0002140180 00000 n 
+0002140079 00000 n 
+0002140296 00000 n 
+0002142604 00000 n 
+0002142040 00000 n 
+0002140402 00000 n 
+0002142156 00000 n 
+0002142412 00000 n 
+0002142540 00000 n 
+0002145484 00000 n 
+0002146245 00000 n 
+0002145338 00000 n 
+0002142720 00000 n 
+0002145799 00000 n 
+0005310402 00000 n 
+0002145642 00000 n 
+0002145927 00000 n 
+0002146054 00000 n 
+0002146117 00000 n 
+0002146181 00000 n 
+0005321580 00000 n 
+0002150017 00000 n 
+0002149197 00000 n 
+0002146444 00000 n 
+0002149313 00000 n 
+0002149377 00000 n 
+0002149505 00000 n 
+0002149569 00000 n 
+0002149633 00000 n 
+0002149761 00000 n 
+0002149825 00000 n 
+0002149889 00000 n 
+0002149953 00000 n 
+0002152882 00000 n 
+0002152320 00000 n 
+0002150188 00000 n 
+0002152436 00000 n 
+0002152564 00000 n 
+0002152692 00000 n 
+0002152756 00000 n 
+0002152820 00000 n 
+0002157760 00000 n 
+0002155423 00000 n 
+0002154987 00000 n 
+0002153011 00000 n 
+0002155103 00000 n 
+0002155167 00000 n 
+0002155231 00000 n 
+0002155359 00000 n 
+0002157929 00000 n 
+0002158661 00000 n 
+0002157614 00000 n 
+0002155566 00000 n 
+0002158086 00000 n 
+0002158214 00000 n 
+0002158342 00000 n 
+0002158470 00000 n 
+0002158597 00000 n 
+0002160737 00000 n 
+0002160301 00000 n 
+0002158805 00000 n 
+0002160417 00000 n 
+0002160481 00000 n 
+0002160545 00000 n 
+0002160609 00000 n 
+0002160673 00000 n 
+0002161161 00000 n 
+0002160981 00000 n 
+0002160880 00000 n 
+0002161097 00000 n 
+0005321706 00000 n 
+0002163526 00000 n 
+0002163026 00000 n 
+0002161203 00000 n 
+0002163142 00000 n 
+0002163334 00000 n 
+0002163398 00000 n 
+0002163462 00000 n 
+0002166104 00000 n 
+0002165668 00000 n 
+0002163683 00000 n 
+0002165784 00000 n 
+0002165912 00000 n 
+0002166040 00000 n 
+0002168977 00000 n 
+0002168542 00000 n 
+0002166277 00000 n 
+0002168658 00000 n 
+0002168786 00000 n 
+0002168913 00000 n 
+0002170902 00000 n 
+0002207485 00000 n 
+0002170786 00000 n 
+0002169107 00000 n 
+0002207037 00000 n 
+0002207165 00000 n 
+0002207293 00000 n 
+0002207421 00000 n 
+0002173706 00000 n 
+0002173838 00000 n 
+0002173886 00000 n 
+0002174263 00000 n 
+0002174286 00000 n 
+0002174506 00000 n 
+0002209621 00000 n 
+0002209313 00000 n 
+0002207659 00000 n 
+0002209429 00000 n 
+0002209557 00000 n 
+0002212273 00000 n 
+0002211965 00000 n 
+0002209751 00000 n 
+0002212081 00000 n 
+0002212209 00000 n 
+0005321832 00000 n 
+0002214826 00000 n 
+0002214518 00000 n 
+0002212403 00000 n 
+0002214634 00000 n 
+0002214762 00000 n 
+0002217303 00000 n 
+0002217915 00000 n 
+0002217166 00000 n 
+0002215013 00000 n 
+0002217467 00000 n 
+0002217595 00000 n 
+0002217723 00000 n 
+0002217851 00000 n 
+0002220101 00000 n 
+0002219793 00000 n 
+0002218059 00000 n 
+0002219909 00000 n 
+0002220037 00000 n 
+0002221129 00000 n 
+0002220949 00000 n 
+0002220245 00000 n 
+0002221065 00000 n 
+0002223342 00000 n 
+0002223192 00000 n 
+0002224133 00000 n 
+0002223037 00000 n 
+0002221245 00000 n 
+0002223813 00000 n 
+0002224069 00000 n 
+0002223578 00000 n 
+0002226900 00000 n 
+0002227540 00000 n 
+0002226656 00000 n 
+0002224361 00000 n 
+0002226772 00000 n 
+0002226964 00000 n 
+0002227028 00000 n 
+0002227092 00000 n 
+0002227156 00000 n 
+0002227220 00000 n 
+0002227284 00000 n 
+0002227348 00000 n 
+0002227476 00000 n 
+0005321958 00000 n 
+0002230238 00000 n 
+0002229674 00000 n 
+0002227697 00000 n 
+0002229790 00000 n 
+0002229918 00000 n 
+0002229982 00000 n 
+0002230046 00000 n 
+0002230110 00000 n 
+0002230174 00000 n 
+0002230676 00000 n 
+0002230496 00000 n 
+0002230395 00000 n 
+0002230612 00000 n 
+0002235113 00000 n 
+0002232960 00000 n 
+0002232524 00000 n 
+0002230718 00000 n 
+0002232640 00000 n 
+0002232896 00000 n 
+0002235619 00000 n 
+0002234967 00000 n 
+0002233090 00000 n 
+0002235427 00000 n 
+0002235270 00000 n 
+0002235555 00000 n 
+0002238573 00000 n 
+0002237691 00000 n 
+0002235821 00000 n 
+0002237807 00000 n 
+0002237935 00000 n 
+0002237998 00000 n 
+0002238062 00000 n 
+0002238126 00000 n 
+0002238190 00000 n 
+0002238254 00000 n 
+0002238318 00000 n 
+0002238382 00000 n 
+0002238509 00000 n 
+0002241685 00000 n 
+0002242729 00000 n 
+0002241548 00000 n 
+0002238717 00000 n 
+0002241836 00000 n 
+0002241964 00000 n 
+0002242092 00000 n 
+0002242156 00000 n 
+0002242220 00000 n 
+0002242284 00000 n 
+0002242347 00000 n 
+0002242411 00000 n 
+0002242474 00000 n 
+0002242538 00000 n 
+0002242601 00000 n 
+0002242665 00000 n 
+0005322084 00000 n 
+0002244637 00000 n 
+0002244981 00000 n 
+0002244500 00000 n 
+0002242886 00000 n 
+0002244789 00000 n 
+0002244917 00000 n 
+0002246917 00000 n 
+0002246609 00000 n 
+0002245139 00000 n 
+0002246725 00000 n 
+0002246853 00000 n 
+0002249018 00000 n 
+0002248838 00000 n 
+0002247118 00000 n 
+0002248954 00000 n 
+0002250649 00000 n 
+0002250469 00000 n 
+0002249162 00000 n 
+0002250585 00000 n 
+0002253503 00000 n 
+0002253653 00000 n 
+0002253805 00000 n 
+0002254619 00000 n 
+0002253339 00000 n 
+0002250793 00000 n 
+0002254108 00000 n 
+0002254172 00000 n 
+0002254235 00000 n 
+0002254299 00000 n 
+0002254427 00000 n 
+0002254555 00000 n 
+0002253957 00000 n 
+0002258600 00000 n 
+0002260643 00000 n 
+0002258356 00000 n 
+0002254776 00000 n 
+0002258472 00000 n 
+0002258664 00000 n 
+0002258728 00000 n 
+0002258792 00000 n 
+0002258856 00000 n 
+0002258920 00000 n 
+0002258984 00000 n 
+0002259048 00000 n 
+0002259112 00000 n 
+0002259175 00000 n 
+0002259239 00000 n 
+0002259302 00000 n 
+0002259366 00000 n 
+0002259428 00000 n 
+0002259492 00000 n 
+0002259556 00000 n 
+0002259620 00000 n 
+0002259684 00000 n 
+0002259748 00000 n 
+0002259812 00000 n 
+0002259876 00000 n 
+0002259940 00000 n 
+0002260004 00000 n 
+0002260068 00000 n 
+0002260132 00000 n 
+0002260196 00000 n 
+0002260260 00000 n 
+0002260324 00000 n 
+0002260388 00000 n 
+0002260452 00000 n 
+0002260580 00000 n 
+0005322210 00000 n 
+0002263381 00000 n 
+0002264491 00000 n 
+0002263265 00000 n 
+0002260800 00000 n 
+0002264427 00000 n 
+0002263761 00000 n 
+0002263893 00000 n 
+0002263941 00000 n 
+0002264406 00000 n 
+0002267379 00000 n 
+0002267721 00000 n 
+0002267242 00000 n 
+0002264749 00000 n 
+0002267531 00000 n 
+0002267657 00000 n 
+0002286445 00000 n 
+0002270528 00000 n 
+0002270348 00000 n 
+0002267879 00000 n 
+0002270464 00000 n 
+0002273074 00000 n 
+0002272767 00000 n 
+0002270686 00000 n 
+0002272883 00000 n 
+0002273011 00000 n 
+0002275370 00000 n 
+0002275521 00000 n 
+0002275863 00000 n 
+0002275224 00000 n 
+0002273246 00000 n 
+0002275671 00000 n 
+0002275799 00000 n 
+0002278819 00000 n 
+0002278975 00000 n 
+0002279131 00000 n 
+0002279607 00000 n 
+0002278664 00000 n 
+0002276021 00000 n 
+0002279288 00000 n 
+0002279416 00000 n 
+0002279543 00000 n 
+0005322336 00000 n 
+0002282616 00000 n 
+0002282332 00000 n 
+0002282680 00000 n 
+0002282195 00000 n 
+0002279765 00000 n 
+0002282488 00000 n 
+0002286509 00000 n 
+0002285945 00000 n 
+0002282824 00000 n 
+0002286061 00000 n 
+0005310550 00000 n 
+0002286125 00000 n 
+0002286189 00000 n 
+0002286253 00000 n 
+0002286317 00000 n 
+0002289158 00000 n 
+0002289338 00000 n 
+0002289577 00000 n 
+0002289012 00000 n 
+0002286722 00000 n 
+0002289513 00000 n 
+0002292672 00000 n 
+0002292236 00000 n 
+0002289777 00000 n 
+0002292352 00000 n 
+0002292480 00000 n 
+0002292608 00000 n 
+0002295435 00000 n 
+0002295908 00000 n 
+0002295298 00000 n 
+0002292858 00000 n 
+0002295588 00000 n 
+0002295716 00000 n 
+0002295844 00000 n 
+0002299329 00000 n 
+0002300353 00000 n 
+0002299085 00000 n 
+0002296080 00000 n 
+0002299201 00000 n 
+0002299393 00000 n 
+0002299457 00000 n 
+0002299521 00000 n 
+0002299585 00000 n 
+0002299649 00000 n 
+0002299713 00000 n 
+0002299777 00000 n 
+0002299841 00000 n 
+0002299905 00000 n 
+0002299969 00000 n 
+0002300033 00000 n 
+0002300097 00000 n 
+0002300161 00000 n 
+0002300225 00000 n 
+0002300289 00000 n 
+0005322462 00000 n 
+0002303032 00000 n 
+0002302852 00000 n 
+0002300566 00000 n 
+0002302968 00000 n 
+0002305506 00000 n 
+0002305198 00000 n 
+0002303275 00000 n 
+0002305314 00000 n 
+0002305442 00000 n 
+0002308762 00000 n 
+0002308326 00000 n 
+0002305750 00000 n 
+0002308442 00000 n 
+0002308570 00000 n 
+0002308698 00000 n 
+0002311526 00000 n 
+0002312125 00000 n 
+0002311389 00000 n 
+0002308934 00000 n 
+0002311678 00000 n 
+0002311806 00000 n 
+0002311870 00000 n 
+0002311934 00000 n 
+0002311998 00000 n 
+0002312061 00000 n 
+0002315416 00000 n 
+0002315108 00000 n 
+0002312297 00000 n 
+0002315224 00000 n 
+0002315352 00000 n 
+0002317318 00000 n 
+0002317138 00000 n 
+0002315574 00000 n 
+0002317254 00000 n 
+0005322588 00000 n 
+0002319815 00000 n 
+0002319508 00000 n 
+0002317476 00000 n 
+0002319624 00000 n 
+0002319751 00000 n 
+0002322539 00000 n 
+0002322231 00000 n 
+0002320030 00000 n 
+0002322347 00000 n 
+0002322475 00000 n 
+0002324636 00000 n 
+0002324328 00000 n 
+0002322711 00000 n 
+0002324444 00000 n 
+0002324572 00000 n 
+0002326024 00000 n 
+0002325844 00000 n 
+0002324766 00000 n 
+0002325960 00000 n 
+0002328367 00000 n 
+0002328060 00000 n 
+0002326126 00000 n 
+0002328176 00000 n 
+0002328304 00000 n 
+0002330442 00000 n 
+0002330134 00000 n 
+0002328525 00000 n 
+0002330250 00000 n 
+0002330378 00000 n 
+0005322714 00000 n 
+0002333223 00000 n 
+0002332915 00000 n 
+0002330572 00000 n 
+0002333031 00000 n 
+0002333159 00000 n 
+0002335438 00000 n 
+0002335131 00000 n 
+0002333367 00000 n 
+0002335247 00000 n 
+0002335374 00000 n 
+0002337477 00000 n 
+0002337170 00000 n 
+0002335610 00000 n 
+0002337286 00000 n 
+0002337414 00000 n 
+0002340115 00000 n 
+0002339679 00000 n 
+0002337635 00000 n 
+0002339795 00000 n 
+0002339923 00000 n 
+0002340051 00000 n 
+0002343322 00000 n 
+0002342695 00000 n 
+0002340330 00000 n 
+0002342811 00000 n 
+0002342875 00000 n 
+0002342938 00000 n 
+0002343002 00000 n 
+0002343066 00000 n 
+0002343130 00000 n 
+0002343258 00000 n 
+0002346458 00000 n 
+0002345958 00000 n 
+0002343508 00000 n 
+0002346074 00000 n 
+0002346138 00000 n 
+0002346202 00000 n 
+0002346266 00000 n 
+0002346330 00000 n 
+0002346394 00000 n 
+0005322840 00000 n 
+0002349687 00000 n 
+0002349059 00000 n 
+0002346616 00000 n 
+0002349175 00000 n 
+0002349239 00000 n 
+0002349303 00000 n 
+0002349367 00000 n 
+0002349431 00000 n 
+0002349495 00000 n 
+0002349623 00000 n 
+0002352221 00000 n 
+0002352567 00000 n 
+0002352084 00000 n 
+0002349845 00000 n 
+0002352375 00000 n 
+0002352503 00000 n 
+0002355701 00000 n 
+0002355009 00000 n 
+0002352739 00000 n 
+0002355125 00000 n 
+0002355253 00000 n 
+0002355381 00000 n 
+0002355445 00000 n 
+0002355509 00000 n 
+0002355573 00000 n 
+0002355637 00000 n 
+0002361302 00000 n 
+0002359055 00000 n 
+0002358171 00000 n 
+0002355831 00000 n 
+0002358287 00000 n 
+0002358351 00000 n 
+0002358415 00000 n 
+0002358479 00000 n 
+0002358543 00000 n 
+0002358607 00000 n 
+0002358671 00000 n 
+0002358735 00000 n 
+0002358799 00000 n 
+0002358863 00000 n 
+0002358927 00000 n 
+0002358991 00000 n 
+0002362568 00000 n 
+0002361186 00000 n 
+0002359199 00000 n 
+0002362376 00000 n 
+0002362504 00000 n 
+0002361684 00000 n 
+0002361816 00000 n 
+0002361864 00000 n 
+0002362355 00000 n 
+0002363707 00000 n 
+0002363527 00000 n 
+0002362812 00000 n 
+0002363643 00000 n 
+0005322966 00000 n 
+0002365527 00000 n 
+0002365219 00000 n 
+0002363809 00000 n 
+0002365335 00000 n 
+0002365463 00000 n 
+0002368141 00000 n 
+0002367961 00000 n 
+0002365699 00000 n 
+0002368077 00000 n 
+0002370815 00000 n 
+0002370507 00000 n 
+0002368385 00000 n 
+0002370623 00000 n 
+0002370751 00000 n 
+0002373364 00000 n 
+0002373056 00000 n 
+0002370973 00000 n 
+0002373172 00000 n 
+0002373300 00000 n 
+0002374420 00000 n 
+0002374240 00000 n 
+0002373508 00000 n 
+0002374356 00000 n 
+0002375724 00000 n 
+0002375544 00000 n 
+0002374522 00000 n 
+0002375660 00000 n 
+0005323092 00000 n 
+0002380331 00000 n 
+0002380645 00000 n 
+0002377959 00000 n 
+0002377651 00000 n 
+0002375840 00000 n 
+0002377767 00000 n 
+0002377895 00000 n 
+0002380801 00000 n 
+0002380980 00000 n 
+0002381608 00000 n 
+0002380158 00000 n 
+0002378103 00000 n 
+0002381160 00000 n 
+0002381288 00000 n 
+0002380488 00000 n 
+0002381416 00000 n 
+0002381544 00000 n 
+0003069381 00000 n 
+0002384242 00000 n 
+0002383678 00000 n 
+0002381794 00000 n 
+0002383794 00000 n 
+0002383922 00000 n 
+0002384050 00000 n 
+0002384178 00000 n 
+0002386767 00000 n 
+0002387361 00000 n 
+0002386630 00000 n 
+0002384386 00000 n 
+0002386977 00000 n 
+0002387041 00000 n 
+0002387105 00000 n 
+0002387169 00000 n 
+0002387297 00000 n 
+0002389556 00000 n 
+0002389376 00000 n 
+0002387575 00000 n 
+0002389492 00000 n 
+0002392412 00000 n 
+0002392104 00000 n 
+0002389700 00000 n 
+0002392220 00000 n 
+0002392348 00000 n 
+0005323218 00000 n 
+0002398356 00000 n 
+0002397894 00000 n 
+0002395471 00000 n 
+0002395164 00000 n 
+0002392584 00000 n 
+0002395280 00000 n 
+0002395408 00000 n 
+0002398051 00000 n 
+0002398535 00000 n 
+0002399277 00000 n 
+0002397721 00000 n 
+0002395657 00000 n 
+0002398703 00000 n 
+0002398831 00000 n 
+0002398204 00000 n 
+0002398958 00000 n 
+0002399086 00000 n 
+0002399214 00000 n 
+0002400477 00000 n 
+0002400297 00000 n 
+0002399463 00000 n 
+0002400413 00000 n 
+0002400860 00000 n 
+0002400680 00000 n 
+0002400579 00000 n 
+0002400796 00000 n 
+0002402966 00000 n 
+0002402805 00000 n 
+0002406629 00000 n 
+0002403709 00000 n 
+0002402659 00000 n 
+0002400902 00000 n 
+0002403135 00000 n 
+0002403389 00000 n 
+0002403517 00000 n 
+0002403645 00000 n 
+0002406800 00000 n 
+0002407307 00000 n 
+0002406483 00000 n 
+0002403881 00000 n 
+0002406987 00000 n 
+0002407115 00000 n 
+0002407243 00000 n 
+0005323344 00000 n 
+0002409768 00000 n 
+0002410118 00000 n 
+0002409631 00000 n 
+0002407521 00000 n 
+0002409927 00000 n 
+0002410054 00000 n 
+0002413874 00000 n 
+0002413588 00000 n 
+0002414957 00000 n 
+0002413451 00000 n 
+0002410362 00000 n 
+0002413746 00000 n 
+0002413938 00000 n 
+0002414002 00000 n 
+0002414066 00000 n 
+0002414130 00000 n 
+0002414194 00000 n 
+0002414258 00000 n 
+0002414322 00000 n 
+0002414386 00000 n 
+0002414449 00000 n 
+0002414513 00000 n 
+0002414576 00000 n 
+0002414640 00000 n 
+0002414702 00000 n 
+0002414766 00000 n 
+0002414893 00000 n 
+0002418951 00000 n 
+0002420803 00000 n 
+0002418707 00000 n 
+0002415114 00000 n 
+0002418823 00000 n 
+0002419015 00000 n 
+0002419079 00000 n 
+0002419143 00000 n 
+0002419207 00000 n 
+0002419271 00000 n 
+0002419335 00000 n 
+0002419399 00000 n 
+0002419463 00000 n 
+0002419526 00000 n 
+0002419590 00000 n 
+0002419653 00000 n 
+0002419717 00000 n 
+0002419779 00000 n 
+0002419843 00000 n 
+0002419907 00000 n 
+0002419971 00000 n 
+0002420035 00000 n 
+0002420099 00000 n 
+0002420163 00000 n 
+0002420227 00000 n 
+0002420291 00000 n 
+0002420355 00000 n 
+0002420419 00000 n 
+0002420483 00000 n 
+0002420547 00000 n 
+0002420611 00000 n 
+0002420739 00000 n 
+0002423771 00000 n 
+0002423272 00000 n 
+0002420974 00000 n 
+0002423388 00000 n 
+0002423516 00000 n 
+0002423643 00000 n 
+0002423707 00000 n 
+0002426894 00000 n 
+0002426138 00000 n 
+0002423901 00000 n 
+0002426254 00000 n 
+0002426318 00000 n 
+0002426382 00000 n 
+0002426446 00000 n 
+0002426510 00000 n 
+0002426574 00000 n 
+0002426702 00000 n 
+0002429093 00000 n 
+0002428913 00000 n 
+0002427052 00000 n 
+0002429029 00000 n 
+0005323470 00000 n 
+0002431532 00000 n 
+0002432173 00000 n 
+0002431386 00000 n 
+0002429308 00000 n 
+0002431853 00000 n 
+0002431981 00000 n 
+0002431693 00000 n 
+0002432109 00000 n 
+0002434688 00000 n 
+0002434380 00000 n 
+0002432331 00000 n 
+0002434496 00000 n 
+0002434624 00000 n 
+0002437281 00000 n 
+0002440014 00000 n 
+0002437751 00000 n 
+0002437144 00000 n 
+0002434818 00000 n 
+0002437431 00000 n 
+0002437559 00000 n 
+0002437687 00000 n 
+0002461125 00000 n 
+0002461189 00000 n 
+0002439898 00000 n 
+0002437952 00000 n 
+0002460997 00000 n 
+0002460808 00000 n 
+0002478422 00000 n 
+0002463165 00000 n 
+0002478892 00000 n 
+0002463028 00000 n 
+0002461337 00000 n 
+0002478572 00000 n 
+0002478700 00000 n 
+0002478828 00000 n 
+0002478236 00000 n 
+0002496554 00000 n 
+0002480527 00000 n 
+0002497023 00000 n 
+0002480390 00000 n 
+0002479096 00000 n 
+0002496704 00000 n 
+0002496832 00000 n 
+0002496959 00000 n 
+0005323596 00000 n 
+0002496367 00000 n 
+0002499701 00000 n 
+0002499394 00000 n 
+0002497199 00000 n 
+0002499510 00000 n 
+0002499638 00000 n 
+0002504112 00000 n 
+0002501862 00000 n 
+0002501554 00000 n 
+0002499889 00000 n 
+0002501670 00000 n 
+0002501798 00000 n 
+0002504481 00000 n 
+0002503975 00000 n 
+0002502049 00000 n 
+0002504290 00000 n 
+0002504418 00000 n 
+0002507234 00000 n 
+0002510052 00000 n 
+0002507609 00000 n 
+0002507097 00000 n 
+0002504725 00000 n 
+0002507417 00000 n 
+0002507545 00000 n 
+0002510422 00000 n 
+0002509915 00000 n 
+0002507809 00000 n 
+0002510230 00000 n 
+0002510358 00000 n 
+0002512924 00000 n 
+0002512617 00000 n 
+0002510707 00000 n 
+0002512733 00000 n 
+0002512861 00000 n 
+0005323722 00000 n 
+0002515190 00000 n 
+0002514755 00000 n 
+0002513125 00000 n 
 0002514871 00000 n 
-0002517518 00000 n 
-0002517082 00000 n 
-0002515150 00000 n 
-0002517198 00000 n 
-0002517262 00000 n 
-0002517326 00000 n 
-0002517454 00000 n 
-0002575005 00000 n 
-0002518719 00000 n 
-0002575475 00000 n 
-0002518582 00000 n 
-0002517733 00000 n 
-0002575155 00000 n 
-0002575283 00000 n 
-0002575411 00000 n 
-0002574816 00000 n 
-0002578519 00000 n 
-0002578083 00000 n 
-0002575651 00000 n 
-0002578199 00000 n 
-0002578327 00000 n 
-0002581259 00000 n 
-0002580695 00000 n 
-0002578677 00000 n 
-0002580811 00000 n 
-0002580939 00000 n 
-0002581003 00000 n 
-0002581067 00000 n 
-0002581131 00000 n 
-0002581195 00000 n 
-0004767139 00000 n 
-0002583753 00000 n 
-0002583445 00000 n 
-0002581431 00000 n 
-0002583561 00000 n 
-0002583689 00000 n 
-0002586653 00000 n 
-0002586217 00000 n 
-0002583911 00000 n 
-0002586333 00000 n 
-0002586461 00000 n 
-0002586589 00000 n 
-0002588619 00000 n 
-0002588311 00000 n 
-0002586839 00000 n 
-0002588427 00000 n 
-0002588555 00000 n 
-0002591558 00000 n 
-0002591186 00000 n 
-0002588763 00000 n 
-0002591302 00000 n 
-0002591430 00000 n 
-0002591494 00000 n 
-0002593597 00000 n 
-0002593289 00000 n 
-0002591744 00000 n 
-0002593405 00000 n 
-0002593469 00000 n 
-0002593533 00000 n 
-0002595712 00000 n 
-0002595404 00000 n 
-0002593755 00000 n 
-0002595520 00000 n 
-0002595584 00000 n 
-0002595648 00000 n 
-0004767265 00000 n 
-0002597749 00000 n 
-0002597441 00000 n 
-0002595870 00000 n 
-0002597557 00000 n 
-0002597621 00000 n 
-0002597685 00000 n 
-0002599778 00000 n 
-0002599406 00000 n 
-0002597893 00000 n 
-0002599522 00000 n 
-0002599586 00000 n 
-0002599650 00000 n 
-0002599714 00000 n 
-0002601082 00000 n 
-0002600902 00000 n 
-0002599894 00000 n 
-0002601018 00000 n 
-0002603724 00000 n 
-0002603289 00000 n 
-0002601198 00000 n 
-0002603405 00000 n 
-0002603469 00000 n 
-0002603533 00000 n 
-0002603597 00000 n 
-0002603661 00000 n 
-0002605999 00000 n 
-0002605627 00000 n 
-0002603882 00000 n 
-0002605743 00000 n 
-0002605807 00000 n 
-0002605935 00000 n 
-0002609037 00000 n 
-0002608474 00000 n 
-0002606129 00000 n 
-0002608590 00000 n 
-0002608718 00000 n 
-0002608846 00000 n 
-0002608974 00000 n 
-0004767391 00000 n 
-0002611150 00000 n 
-0002610715 00000 n 
-0002609181 00000 n 
-0002610831 00000 n 
-0002610959 00000 n 
-0002611087 00000 n 
-0002612971 00000 n 
-0002616086 00000 n 
-0002613356 00000 n 
-0002612834 00000 n 
-0002611294 00000 n 
-0002613164 00000 n 
-0002613292 00000 n 
-0002616278 00000 n 
-0002616456 00000 n 
-0002616661 00000 n 
-0002616851 00000 n 
-0002617236 00000 n 
-0002615913 00000 n 
-0002613542 00000 n 
-0002617044 00000 n 
-0002617172 00000 n 
-0002620176 00000 n 
-0002620347 00000 n 
-0002620990 00000 n 
-0002620030 00000 n 
-0002617493 00000 n 
-0002620542 00000 n 
-0002620670 00000 n 
-0002620798 00000 n 
-0002620926 00000 n 
-0002623832 00000 n 
-0002624049 00000 n 
-0002624265 00000 n 
-0002624481 00000 n 
-0002624664 00000 n 
-0002624840 00000 n 
-0002625008 00000 n 
-0002628274 00000 n 
-0002628447 00000 n 
-0002628631 00000 n 
-0002628800 00000 n 
-0002625381 00000 n 
-0002623641 00000 n 
-0002621190 00000 n 
-0002625189 00000 n 
-0002625317 00000 n 
-0002629237 00000 n 
-0002629698 00000 n 
-0002630161 00000 n 
-0002630890 00000 n 
-0002628047 00000 n 
-0002625567 00000 n 
-0002630698 00000 n 
-0002630826 00000 n 
-0002629018 00000 n 
-0002629467 00000 n 
-0002629929 00000 n 
-0002630429 00000 n 
-0004767517 00000 n 
-0002633687 00000 n 
-0002633897 00000 n 
-0002634068 00000 n 
-0002637067 00000 n 
-0002637281 00000 n 
-0002637469 00000 n 
-0002637652 00000 n 
-0002634443 00000 n 
-0002633532 00000 n 
-0002631076 00000 n 
-0002634251 00000 n 
-0002634379 00000 n 
-0002641229 00000 n 
-0002641425 00000 n 
-0002638439 00000 n 
-0002636894 00000 n 
-0002634629 00000 n 
-0002638119 00000 n 
-0002638247 00000 n 
-0002638375 00000 n 
-0002637885 00000 n 
-0002641602 00000 n 
-0002641795 00000 n 
-0002645406 00000 n 
-0002642193 00000 n 
-0002641065 00000 n 
-0002638668 00000 n 
-0002642001 00000 n 
-0002642129 00000 n 
-0002645845 00000 n 
-0002646050 00000 n 
-0002646240 00000 n 
-0002646428 00000 n 
-0002646616 00000 n 
-0002646804 00000 n 
-0002644688 00000 n 
-0002646996 00000 n 
-0002647472 00000 n 
-0002647741 00000 n 
-0002644434 00000 n 
-0002642407 00000 n 
-0002647677 00000 n 
-0002644927 00000 n 
-0002645166 00000 n 
-0002645625 00000 n 
-0002647234 00000 n 
-0002650451 00000 n 
-0002650976 00000 n 
-0002650305 00000 n 
-0002647941 00000 n 
-0002650912 00000 n 
-0002650682 00000 n 
-0002653553 00000 n 
-0002653245 00000 n 
-0002651176 00000 n 
-0002653361 00000 n 
-0002653489 00000 n 
-0004767643 00000 n 
-0002655885 00000 n 
-0002656399 00000 n 
-0002655748 00000 n 
-0002653725 00000 n 
-0002656079 00000 n 
-0002656207 00000 n 
-0002656335 00000 n 
-0002658880 00000 n 
-0002658444 00000 n 
-0002656599 00000 n 
-0002658560 00000 n 
-0002658688 00000 n 
-0002658816 00000 n 
-0002661316 00000 n 
-0002661008 00000 n 
-0002659038 00000 n 
-0002661124 00000 n 
-0002661252 00000 n 
-0002664071 00000 n 
-0002663507 00000 n 
-0002661488 00000 n 
-0002663623 00000 n 
-0002663751 00000 n 
-0002663879 00000 n 
-0002664007 00000 n 
-0002666294 00000 n 
-0002666114 00000 n 
-0002664243 00000 n 
-0002666230 00000 n 
-0002669148 00000 n 
-0002668713 00000 n 
-0002666438 00000 n 
-0002668829 00000 n 
-0002668957 00000 n 
-0002669084 00000 n 
-0004767769 00000 n 
-0002671791 00000 n 
-0002671355 00000 n 
-0002669306 00000 n 
-0002671471 00000 n 
-0002671599 00000 n 
-0002671727 00000 n 
-0002674049 00000 n 
-0002673741 00000 n 
-0002672034 00000 n 
-0002673857 00000 n 
-0002673985 00000 n 
-0002684777 00000 n 
-0002684926 00000 n 
-0002677855 00000 n 
-0002676722 00000 n 
-0002676542 00000 n 
-0002674193 00000 n 
-0002676658 00000 n 
-0002706314 00000 n 
-0002685651 00000 n 
-0002677709 00000 n 
-0002676866 00000 n 
-0002685075 00000 n 
-0002685203 00000 n 
-0002685331 00000 n 
-0002685459 00000 n 
-0002685587 00000 n 
-0002679520 00000 n 
-0002679638 00000 n 
-0002679686 00000 n 
-0002680127 00000 n 
-0002680150 00000 n 
-0002680568 00000 n 
-0002680664 00000 n 
-0002684754 00000 n 
-0002713401 00000 n 
-0002688035 00000 n 
-0002688782 00000 n 
-0002687894 00000 n 
-0002685797 00000 n 
-0002688193 00000 n 
-0002688324 00000 n 
-0002688455 00000 n 
-0002688585 00000 n 
-0002688716 00000 n 
-0002691990 00000 n 
-0002691411 00000 n 
-0002688955 00000 n 
-0002691531 00000 n 
-0002691662 00000 n 
-0002691793 00000 n 
-0002691924 00000 n 
-0004767896 00000 n 
-0002694984 00000 n 
-0002694143 00000 n 
-0002692135 00000 n 
-0002694263 00000 n 
-0002694394 00000 n 
-0002694525 00000 n 
-0002694656 00000 n 
-0002694787 00000 n 
-0002694918 00000 n 
-0002698279 00000 n 
-0002697106 00000 n 
-0002695143 00000 n 
-0002697226 00000 n 
-0002697357 00000 n 
-0002697488 00000 n 
-0002697553 00000 n 
-0002697619 00000 n 
-0002697685 00000 n 
-0002697751 00000 n 
-0002697817 00000 n 
-0002697883 00000 n 
-0002697949 00000 n 
-0002698015 00000 n 
-0002698081 00000 n 
-0002698147 00000 n 
-0002698213 00000 n 
-0002701956 00000 n 
-0002701112 00000 n 
-0002698438 00000 n 
-0002701232 00000 n 
-0002701298 00000 n 
-0002701364 00000 n 
-0002701430 00000 n 
-0002701496 00000 n 
-0002701562 00000 n 
-0002701628 00000 n 
-0002701759 00000 n 
-0002701890 00000 n 
-0002704682 00000 n 
-0002714111 00000 n 
-0002705575 00000 n 
-0002704530 00000 n 
-0002702115 00000 n 
-0002704986 00000 n 
-0002705117 00000 n 
-0002705248 00000 n 
-0002705379 00000 n 
-0002705510 00000 n 
-0002704834 00000 n 
-0002829795 00000 n 
-0002713466 00000 n 
-0002706194 00000 n 
-0002705762 00000 n 
-0002713270 00000 n 
-0002708276 00000 n 
-0002708395 00000 n 
-0002708444 00000 n 
-0002708884 00000 n 
-0002708908 00000 n 
-0002709310 00000 n 
-0002709407 00000 n 
-0002713246 00000 n 
-0002829861 00000 n 
-0002713991 00000 n 
-0002713599 00000 n 
-0002829664 00000 n 
-0004768029 00000 n 
-0002829474 00000 n 
-0002831696 00000 n 
-0002832304 00000 n 
-0002831554 00000 n 
-0002830011 00000 n 
-0002831846 00000 n 
-0002832107 00000 n 
-0002832238 00000 n 
-0002835299 00000 n 
-0002835013 00000 n 
-0002836880 00000 n 
-0002834871 00000 n 
-0002832435 00000 n 
-0002835168 00000 n 
-0002835365 00000 n 
-0002835431 00000 n 
-0002835497 00000 n 
-0002835563 00000 n 
-0002835629 00000 n 
-0002835695 00000 n 
-0002835761 00000 n 
-0002835892 00000 n 
-0002835958 00000 n 
-0002836024 00000 n 
-0002836090 00000 n 
-0002836156 00000 n 
-0002836222 00000 n 
-0002836288 00000 n 
-0002836354 00000 n 
-0002836420 00000 n 
-0002836486 00000 n 
-0002836552 00000 n 
-0002836683 00000 n 
-0002836814 00000 n 
-0002839091 00000 n 
-0002838774 00000 n 
-0002837052 00000 n 
-0002838894 00000 n 
-0002839025 00000 n 
-0002840775 00000 n 
-0002840589 00000 n 
-0002839250 00000 n 
-0002840709 00000 n 
-0002843186 00000 n 
-0002843948 00000 n 
-0002843034 00000 n 
-0002840920 00000 n 
-0002843489 00000 n 
-0002843620 00000 n 
-0002843338 00000 n 
-0002843751 00000 n 
-0002843882 00000 n 
-0002846795 00000 n 
-0002846347 00000 n 
-0002844121 00000 n 
-0002846467 00000 n 
-0002846598 00000 n 
-0002846729 00000 n 
-0004768162 00000 n 
-0002849027 00000 n 
-0002848841 00000 n 
-0002846954 00000 n 
-0002848961 00000 n 
-0002851369 00000 n 
-0002851814 00000 n 
-0002852360 00000 n 
-0002851207 00000 n 
-0002849158 00000 n 
-0002852032 00000 n 
-0002852163 00000 n 
-0002852294 00000 n 
-0002851591 00000 n 
-0002855428 00000 n 
-0002855626 00000 n 
-0002855804 00000 n 
-0002855986 00000 n 
-0002856193 00000 n 
-0002856399 00000 n 
-0002855271 00000 n 
-0002856920 00000 n 
-0002855069 00000 n 
-0002852632 00000 n 
-0002856594 00000 n 
-0002856724 00000 n 
-0002856789 00000 n 
-0002856854 00000 n 
-0002859483 00000 n 
-0002859231 00000 n 
-0002857121 00000 n 
-0002859351 00000 n 
-0002859417 00000 n 
-0002862332 00000 n 
-0002862014 00000 n 
-0002859614 00000 n 
-0002862134 00000 n 
-0002862200 00000 n 
-0002862266 00000 n 
-0002864977 00000 n 
-0002866149 00000 n 
-0002864825 00000 n 
-0002862463 00000 n 
-0002865424 00000 n 
-0002865555 00000 n 
-0002865621 00000 n 
-0002865687 00000 n 
-0002865753 00000 n 
-0002865819 00000 n 
-0002865885 00000 n 
-0002865951 00000 n 
-0002866017 00000 n 
-0002866083 00000 n 
-0002865200 00000 n 
-0004768295 00000 n 
-0002868410 00000 n 
-0002868616 00000 n 
-0002868796 00000 n 
-0002869457 00000 n 
-0002868248 00000 n 
-0002866335 00000 n 
-0002868999 00000 n 
-0002869130 00000 n 
-0002869261 00000 n 
-0002869391 00000 n 
-0002871137 00000 n 
-0002870820 00000 n 
-0002869630 00000 n 
-0002870940 00000 n 
-0002871071 00000 n 
-0002872512 00000 n 
-0002872326 00000 n 
-0002871268 00000 n 
-0002872446 00000 n 
-0002873775 00000 n 
-0002873589 00000 n 
-0002872615 00000 n 
-0002873709 00000 n 
-0002875881 00000 n 
-0002875434 00000 n 
-0002873892 00000 n 
-0002875554 00000 n 
-0002875815 00000 n 
-0002877558 00000 n 
-0002885550 00000 n 
-0002877438 00000 n 
-0002876026 00000 n 
-0002885355 00000 n 
-0002885485 00000 n 
-0004768428 00000 n 
-0002884440 00000 n 
-0002888234 00000 n 
-0002887786 00000 n 
-0002885790 00000 n 
-0002887906 00000 n 
-0002888037 00000 n 
-0002888168 00000 n 
-0002890982 00000 n 
-0002890535 00000 n 
-0002888365 00000 n 
-0002890655 00000 n 
-0002890786 00000 n 
-0002890917 00000 n 
-0002893731 00000 n 
-0002893283 00000 n 
-0002891141 00000 n 
-0002893403 00000 n 
-0002893534 00000 n 
-0002893665 00000 n 
-0002896329 00000 n 
-0002895882 00000 n 
-0002893862 00000 n 
-0002896002 00000 n 
-0002896133 00000 n 
-0002896263 00000 n 
-0002901659 00000 n 
-0002899203 00000 n 
-0002898886 00000 n 
-0002896446 00000 n 
-0002899006 00000 n 
-0002899137 00000 n 
-0002902281 00000 n 
-0002901507 00000 n 
-0002899334 00000 n 
-0002901954 00000 n 
-0002901807 00000 n 
-0002902084 00000 n 
-0002902215 00000 n 
-0004768561 00000 n 
-0002904743 00000 n 
-0002907765 00000 n 
-0002905369 00000 n 
-0002904601 00000 n 
-0002902412 00000 n 
-0002904910 00000 n 
-0002905041 00000 n 
-0002905172 00000 n 
-0002905303 00000 n 
-0002908475 00000 n 
-0002907613 00000 n 
-0002905598 00000 n 
-0002908147 00000 n 
-0002907956 00000 n 
-0002908278 00000 n 
-0002908409 00000 n 
-0002910530 00000 n 
-0002910344 00000 n 
-0002908620 00000 n 
-0002910464 00000 n 
-0002912748 00000 n 
-0002913226 00000 n 
-0002917604 00000 n 
-0002913896 00000 n 
-0002912576 00000 n 
-0002910647 00000 n 
-0002913699 00000 n 
-0002913830 00000 n 
-0002912987 00000 n 
-0002913462 00000 n 
-0002919135 00000 n 
-0002917462 00000 n 
-0002914083 00000 n 
-0002917758 00000 n 
-0002917889 00000 n 
-0002918020 00000 n 
-0002918086 00000 n 
-0002918150 00000 n 
-0002918216 00000 n 
-0002918282 00000 n 
-0002918348 00000 n 
-0002918414 00000 n 
-0002918478 00000 n 
-0002918544 00000 n 
-0002918609 00000 n 
-0002918675 00000 n 
-0002918740 00000 n 
-0002918806 00000 n 
-0002918872 00000 n 
-0002918938 00000 n 
-0002919069 00000 n 
-0002921061 00000 n 
-0002920744 00000 n 
-0002919335 00000 n 
-0002920864 00000 n 
-0002920995 00000 n 
-0004768694 00000 n 
-0002922748 00000 n 
-0002922562 00000 n 
-0002921263 00000 n 
-0002922682 00000 n 
-0002924892 00000 n 
-0002924443 00000 n 
-0002922964 00000 n 
-0002924563 00000 n 
-0002924694 00000 n 
-0002924760 00000 n 
-0002924826 00000 n 
-0002926047 00000 n 
-0002925861 00000 n 
-0002925023 00000 n 
-0002925981 00000 n 
-0002927429 00000 n 
-0002927784 00000 n 
-0002927287 00000 n 
-0002926164 00000 n 
-0002927588 00000 n 
-0002927654 00000 n 
-0002927719 00000 n 
-0003465268 00000 n 
-0002928902 00000 n 
-0002928716 00000 n 
-0002927915 00000 n 
-0002928836 00000 n 
-0002931341 00000 n 
-0002930760 00000 n 
-0002929019 00000 n 
-0002930880 00000 n 
-0002930946 00000 n 
-0002931012 00000 n 
-0002931143 00000 n 
-0002931209 00000 n 
-0002931275 00000 n 
-0004768827 00000 n 
-0002933474 00000 n 
-0002933288 00000 n 
-0002931472 00000 n 
-0002933408 00000 n 
-0002935295 00000 n 
-0002934977 00000 n 
-0002933676 00000 n 
-0002935097 00000 n 
-0002935163 00000 n 
-0002935229 00000 n 
-0002936327 00000 n 
-0002936141 00000 n 
-0002935426 00000 n 
-0002936261 00000 n 
-0002937948 00000 n 
-0002937631 00000 n 
-0002936430 00000 n 
-0002937751 00000 n 
-0002937882 00000 n 
-0002940693 00000 n 
-0002940114 00000 n 
-0002938093 00000 n 
-0002940234 00000 n 
-0002940365 00000 n 
-0002940496 00000 n 
-0002940627 00000 n 
-0002942056 00000 n 
-0002941870 00000 n 
-0002940909 00000 n 
-0002941990 00000 n 
-0004768960 00000 n 
-0002944079 00000 n 
-0002943502 00000 n 
-0002942173 00000 n 
-0002943622 00000 n 
-0002943883 00000 n 
-0002944013 00000 n 
-0002946331 00000 n 
-0002946529 00000 n 
-0002949904 00000 n 
-0002947059 00000 n 
-0002946179 00000 n 
-0002944210 00000 n 
-0002946731 00000 n 
-0002946862 00000 n 
-0002946993 00000 n 
-0002950078 00000 n 
-0002950331 00000 n 
-0002949752 00000 n 
-0002947260 00000 n 
-0002950265 00000 n 
-0002952875 00000 n 
-0002952558 00000 n 
-0002950490 00000 n 
-0002952678 00000 n 
-0002952809 00000 n 
-0002955002 00000 n 
-0002955173 00000 n 
-0002955354 00000 n 
-0002955527 00000 n 
-0002955697 00000 n 
-0002955867 00000 n 
-0002956236 00000 n 
-0002954810 00000 n 
-0002953020 00000 n 
-0002956040 00000 n 
-0002956170 00000 n 
-0002957808 00000 n 
-0002957622 00000 n 
-0002956437 00000 n 
-0002957742 00000 n 
-0004769093 00000 n 
-0002959254 00000 n 
-0002959445 00000 n 
-0002959814 00000 n 
-0002959102 00000 n 
-0002957911 00000 n 
-0002959617 00000 n 
-0002959748 00000 n 
-0002961724 00000 n 
-0002961574 00000 n 
-0002962130 00000 n 
-0002961422 00000 n 
-0002959973 00000 n 
-0002961934 00000 n 
-0002962065 00000 n 
-0002963191 00000 n 
-0002963256 00000 n 
-0002962941 00000 n 
-0002962331 00000 n 
-0002963061 00000 n 
-0002963661 00000 n 
-0002963475 00000 n 
-0002963373 00000 n 
-0002963595 00000 n 
-0002965784 00000 n 
-0002965337 00000 n 
-0002963704 00000 n 
-0002965457 00000 n 
-0002965718 00000 n 
-0002968554 00000 n 
-0002969202 00000 n 
-0002968402 00000 n 
-0002965901 00000 n 
-0002969005 00000 n 
-0002969136 00000 n 
-0002968779 00000 n 
-0004769226 00000 n 
-0002972221 00000 n 
-0002971773 00000 n 
-0002969417 00000 n 
-0002971893 00000 n 
-0002972024 00000 n 
-0002972155 00000 n 
-0002975358 00000 n 
-0002974911 00000 n 
-0002972366 00000 n 
-0002975031 00000 n 
-0002975162 00000 n 
-0002975292 00000 n 
-0002978293 00000 n 
-0002977844 00000 n 
-0002975503 00000 n 
-0002977964 00000 n 
-0002978095 00000 n 
-0002978161 00000 n 
-0002978227 00000 n 
-0002981050 00000 n 
-0002980601 00000 n 
-0002978438 00000 n 
-0002980721 00000 n 
-0002980787 00000 n 
-0002980853 00000 n 
-0002980984 00000 n 
-0002983804 00000 n 
-0002984198 00000 n 
-0002983662 00000 n 
-0002981238 00000 n 
-0002984001 00000 n 
-0002984132 00000 n 
-0002986804 00000 n 
-0002986356 00000 n 
-0002984399 00000 n 
-0002986476 00000 n 
-0002986607 00000 n 
-0002986738 00000 n 
-0004769359 00000 n 
-0002989802 00000 n 
-0002988894 00000 n 
-0002986949 00000 n 
-0002989014 00000 n 
-0002989145 00000 n 
-0002989276 00000 n 
-0002989406 00000 n 
-0002989472 00000 n 
-0002989538 00000 n 
-0002989604 00000 n 
-0002989670 00000 n 
-0002989736 00000 n 
-0002992532 00000 n 
-0002991822 00000 n 
-0002989933 00000 n 
-0002991942 00000 n 
-0002992008 00000 n 
-0002992074 00000 n 
-0002992138 00000 n 
-0002992204 00000 n 
-0002992335 00000 n 
-0002992466 00000 n 
-0002994513 00000 n 
-0002993935 00000 n 
-0002992691 00000 n 
-0002994055 00000 n 
-0002994316 00000 n 
-0002994447 00000 n 
-0002997712 00000 n 
-0002997000 00000 n 
-0002994687 00000 n 
-0002997120 00000 n 
-0002997251 00000 n 
-0002997382 00000 n 
-0002997448 00000 n 
-0002997514 00000 n 
-0002997580 00000 n 
-0002997646 00000 n 
-0003001009 00000 n 
-0003000231 00000 n 
-0002997884 00000 n 
-0003000351 00000 n 
-0003000482 00000 n 
-0003000548 00000 n 
-0003000614 00000 n 
-0003000745 00000 n 
-0003000811 00000 n 
-0003000877 00000 n 
-0003000943 00000 n 
-0003003331 00000 n 
-0003003014 00000 n 
-0003001266 00000 n 
-0003003134 00000 n 
-0003003265 00000 n 
-0004769492 00000 n 
-0003006351 00000 n 
-0003005772 00000 n 
-0003003476 00000 n 
-0003005892 00000 n 
-0003006023 00000 n 
-0003006154 00000 n 
-0003006219 00000 n 
-0003006285 00000 n 
-0003009381 00000 n 
-0003009063 00000 n 
-0003006567 00000 n 
-0003009183 00000 n 
-0003009249 00000 n 
-0003009315 00000 n 
-0003012060 00000 n 
-0003011610 00000 n 
-0003009526 00000 n 
-0003011730 00000 n 
-0003011796 00000 n 
-0003011862 00000 n 
-0003011928 00000 n 
-0003011994 00000 n 
-0003015021 00000 n 
-0003014442 00000 n 
-0003012262 00000 n 
-0003014562 00000 n 
-0003014692 00000 n 
-0003014823 00000 n 
-0003014889 00000 n 
-0003014955 00000 n 
-0003017865 00000 n 
-0003017019 00000 n 
-0003015166 00000 n 
-0003017139 00000 n 
-0003017205 00000 n 
-0003017271 00000 n 
-0003017337 00000 n 
-0003017403 00000 n 
-0003017469 00000 n 
-0003017535 00000 n 
-0003017601 00000 n 
-0003017667 00000 n 
-0003017733 00000 n 
-0003017799 00000 n 
-0003020869 00000 n 
-0003019696 00000 n 
-0003018067 00000 n 
-0003019816 00000 n 
-0003019882 00000 n 
-0003019948 00000 n 
-0003020014 00000 n 
-0003020080 00000 n 
-0003020146 00000 n 
-0003020212 00000 n 
-0003020278 00000 n 
-0003020344 00000 n 
-0003020410 00000 n 
-0003020476 00000 n 
-0003020542 00000 n 
-0003020608 00000 n 
-0003020674 00000 n 
-0003020739 00000 n 
-0003020805 00000 n 
-0004769625 00000 n 
-0003023736 00000 n 
-0003023158 00000 n 
-0003021014 00000 n 
-0003023278 00000 n 
-0003023409 00000 n 
-0003023539 00000 n 
-0003023670 00000 n 
-0003025970 00000 n 
-0003026280 00000 n 
-0003027222 00000 n 
-0003025808 00000 n 
-0003023923 00000 n 
-0003026432 00000 n 
-0003026563 00000 n 
-0003026629 00000 n 
-0003026695 00000 n 
-0003026761 00000 n 
-0003026827 00000 n 
-0003026893 00000 n 
-0003026959 00000 n 
-0003027025 00000 n 
-0003027156 00000 n 
-0003026125 00000 n 
-0003029318 00000 n 
-0003032119 00000 n 
-0003029931 00000 n 
-0003029176 00000 n 
-0003027424 00000 n 
-0003029472 00000 n 
-0003029603 00000 n 
-0003029734 00000 n 
-0003029865 00000 n 
-0003032273 00000 n 
-0003032627 00000 n 
-0003031967 00000 n 
-0003030076 00000 n 
-0003032430 00000 n 
-0003032561 00000 n 
-0003035636 00000 n 
-0003035057 00000 n 
-0003032815 00000 n 
-0003035177 00000 n 
-0003035308 00000 n 
-0003035439 00000 n 
-0003035570 00000 n 
-0003038405 00000 n 
-0003038022 00000 n 
-0003035838 00000 n 
-0003038142 00000 n 
-0003038273 00000 n 
-0003038339 00000 n 
-0004769758 00000 n 
-0003041319 00000 n 
-0003040935 00000 n 
-0003038550 00000 n 
-0003041055 00000 n 
-0003041121 00000 n 
-0003041187 00000 n 
-0003041253 00000 n 
-0003043346 00000 n 
-0003043501 00000 n 
-0003043981 00000 n 
-0003043194 00000 n 
-0003041450 00000 n 
-0003043653 00000 n 
-0003043784 00000 n 
-0003043915 00000 n 
-0003046363 00000 n 
-0003046046 00000 n 
-0003044112 00000 n 
-0003046166 00000 n 
-0003046297 00000 n 
-0003048797 00000 n 
-0003049021 00000 n 
-0003048655 00000 n 
-0003046565 00000 n 
-0003048955 00000 n 
-0003051677 00000 n 
-0003051743 00000 n 
-0003051426 00000 n 
-0003049152 00000 n 
-0003051546 00000 n 
-0003054216 00000 n 
-0003053637 00000 n 
-0003051902 00000 n 
-0003053757 00000 n 
-0003053888 00000 n 
-0003054019 00000 n 
-0003054150 00000 n 
-0004769891 00000 n 
-0003056501 00000 n 
-0003056315 00000 n 
-0003054361 00000 n 
-0003056435 00000 n 
-0003059461 00000 n 
-0003058881 00000 n 
-0003056604 00000 n 
-0003059001 00000 n 
-0003059132 00000 n 
-0003059197 00000 n 
-0003059263 00000 n 
-0003059329 00000 n 
-0003059395 00000 n 
-0003061576 00000 n 
-0003061787 00000 n 
-0003062526 00000 n 
-0003061424 00000 n 
-0003059704 00000 n 
-0003061999 00000 n 
-0003062065 00000 n 
-0003062131 00000 n 
-0003062197 00000 n 
-0003062263 00000 n 
-0003062329 00000 n 
-0003062460 00000 n 
-0003063042 00000 n 
-0003062856 00000 n 
-0003062754 00000 n 
-0003062976 00000 n 
-0003064699 00000 n 
-0003065329 00000 n 
-0003064547 00000 n 
-0003063085 00000 n 
-0003065002 00000 n 
-0003064850 00000 n 
-0003065263 00000 n 
-0003068096 00000 n 
-0003067910 00000 n 
-0003065517 00000 n 
-0003068030 00000 n 
-0004770024 00000 n 
-0003070751 00000 n 
-0003070304 00000 n 
-0003068213 00000 n 
-0003070424 00000 n 
-0003070555 00000 n 
-0003070686 00000 n 
-0003073120 00000 n 
-0003073506 00000 n 
-0003072978 00000 n 
-0003070882 00000 n 
-0003073310 00000 n 
-0003073440 00000 n 
-0003076203 00000 n 
-0003076017 00000 n 
-0003073721 00000 n 
-0003076137 00000 n 
-0003078890 00000 n 
-0003078704 00000 n 
-0003076348 00000 n 
-0003078824 00000 n 
-0003081209 00000 n 
-0003081023 00000 n 
-0003079021 00000 n 
-0003081143 00000 n 
-0003083915 00000 n 
-0003083729 00000 n 
-0003081354 00000 n 
-0003083849 00000 n 
-0004770157 00000 n 
-0003086331 00000 n 
-0003086014 00000 n 
-0003084046 00000 n 
-0003086134 00000 n 
-0003086265 00000 n 
-0003087955 00000 n 
-0003087508 00000 n 
-0003086476 00000 n 
-0003087628 00000 n 
-0003087759 00000 n 
-0003087889 00000 n 
-0003090177 00000 n 
-0003089991 00000 n 
-0003088086 00000 n 
-0003090111 00000 n 
-0003092564 00000 n 
-0003092247 00000 n 
-0003090294 00000 n 
-0003092367 00000 n 
-0003092498 00000 n 
-0003095146 00000 n 
-0003094830 00000 n 
-0003092766 00000 n 
-0003094950 00000 n 
-0003095081 00000 n 
-0003097664 00000 n 
-0003098150 00000 n 
-0003097522 00000 n 
-0003095305 00000 n 
-0003097823 00000 n 
-0003097954 00000 n 
-0003098084 00000 n 
-0004770290 00000 n 
-0003101046 00000 n 
-0003101243 00000 n 
-0003100795 00000 n 
-0003098338 00000 n 
-0003100915 00000 n 
-0003101177 00000 n 
-0003103044 00000 n 
-0003102596 00000 n 
-0003101388 00000 n 
-0003102716 00000 n 
-0003102847 00000 n 
-0003102978 00000 n 
-0003105043 00000 n 
-0003104595 00000 n 
-0003103189 00000 n 
-0003104715 00000 n 
-0003104846 00000 n 
-0003104977 00000 n 
-0003106796 00000 n 
-0003106479 00000 n 
-0003105216 00000 n 
-0003106599 00000 n 
-0003106730 00000 n 
-0003107602 00000 n 
-0003107416 00000 n 
-0003106941 00000 n 
-0003107536 00000 n 
-0003107993 00000 n 
-0003107807 00000 n 
-0003107705 00000 n 
-0003107927 00000 n 
-0004770423 00000 n 
-0003109774 00000 n 
-0003109327 00000 n 
-0003108036 00000 n 
-0003109447 00000 n 
-0003109708 00000 n 
-0003112285 00000 n 
-0003111837 00000 n 
-0003109948 00000 n 
-0003111957 00000 n 
-0003112088 00000 n 
-0003112219 00000 n 
-0003114761 00000 n 
-0003114446 00000 n 
-0003112487 00000 n 
-0003114566 00000 n 
-0003114695 00000 n 
-0003117223 00000 n 
-0003116775 00000 n 
-0003114906 00000 n 
-0003116895 00000 n 
-0003117026 00000 n 
-0003117157 00000 n 
-0003119244 00000 n 
-0003118927 00000 n 
-0003117368 00000 n 
-0003119047 00000 n 
-0003119178 00000 n 
-0003121847 00000 n 
-0003122008 00000 n 
-0003122168 00000 n 
-0003122329 00000 n 
-0003122940 00000 n 
-0003121675 00000 n 
-0003119389 00000 n 
-0003122489 00000 n 
-0003122620 00000 n 
-0003122746 00000 n 
-0003122875 00000 n 
-0004770556 00000 n 
-0003125770 00000 n 
-0003125584 00000 n 
-0003123085 00000 n 
-0003125704 00000 n 
-0003128236 00000 n 
-0003127788 00000 n 
-0003125901 00000 n 
-0003127908 00000 n 
-0003128039 00000 n 
-0003128170 00000 n 
-0003130040 00000 n 
-0003129854 00000 n 
-0003128367 00000 n 
-0003129974 00000 n 
-0003132185 00000 n 
-0003131739 00000 n 
-0003130143 00000 n 
-0003131859 00000 n 
-0003131990 00000 n 
-0003132121 00000 n 
-0003134633 00000 n 
-0003135609 00000 n 
-0003134481 00000 n 
-0003132316 00000 n 
-0003134951 00000 n 
-0003135082 00000 n 
-0003135148 00000 n 
-0003135214 00000 n 
-0003135280 00000 n 
-0003135346 00000 n 
-0003135412 00000 n 
-0003134792 00000 n 
-0003135543 00000 n 
-0003137928 00000 n 
-0003137349 00000 n 
-0003135767 00000 n 
-0003137469 00000 n 
-0003137600 00000 n 
-0003137731 00000 n 
-0003137862 00000 n 
-0004770689 00000 n 
-0003139386 00000 n 
-0003139200 00000 n 
-0003138059 00000 n 
-0003139320 00000 n 
-0003139805 00000 n 
-0003139619 00000 n 
-0003139517 00000 n 
-0003139739 00000 n 
-0003141646 00000 n 
-0003142277 00000 n 
-0003141504 00000 n 
-0003139848 00000 n 
-0003141820 00000 n 
-0003142081 00000 n 
-0003142212 00000 n 
-0003144792 00000 n 
-0003145159 00000 n 
-0003144650 00000 n 
-0003142464 00000 n 
-0003144963 00000 n 
-0003145093 00000 n 
-0003147647 00000 n 
-0003148150 00000 n 
-0003147505 00000 n 
-0003145374 00000 n 
-0003147823 00000 n 
-0003147954 00000 n 
-0003148084 00000 n 
-0003151171 00000 n 
-0003150854 00000 n 
-0003148337 00000 n 
-0003150974 00000 n 
-0003151105 00000 n 
-0004770822 00000 n 
-0003153782 00000 n 
-0003153596 00000 n 
-0003151330 00000 n 
-0003153716 00000 n 
-0003156433 00000 n 
-0003156247 00000 n 
-0003153913 00000 n 
-0003156367 00000 n 
-0003159084 00000 n 
-0003162571 00000 n 
-0003160028 00000 n 
-0003158942 00000 n 
-0003156550 00000 n 
-0003159240 00000 n 
-0003159371 00000 n 
-0003159437 00000 n 
-0003159503 00000 n 
-0003159569 00000 n 
-0003159635 00000 n 
-0003159700 00000 n 
-0003159766 00000 n 
-0003159831 00000 n 
-0003159962 00000 n 
-0003162780 00000 n 
-0003162413 00000 n 
-0003163436 00000 n 
-0003162251 00000 n 
-0003160186 00000 n 
-0003162977 00000 n 
-0003163043 00000 n 
-0003163109 00000 n 
-0003163175 00000 n 
-0003163240 00000 n 
-0003163371 00000 n 
-0003165721 00000 n 
-0003166048 00000 n 
-0003165470 00000 n 
-0003163664 00000 n 
-0003165590 00000 n 
-0003165851 00000 n 
-0003165982 00000 n 
-0003166523 00000 n 
-0003166337 00000 n 
-0003166235 00000 n 
-0003166457 00000 n 
-0004770955 00000 n 
-0003171148 00000 n 
-0003168657 00000 n 
-0003168079 00000 n 
-0003166566 00000 n 
-0003168199 00000 n 
-0003168460 00000 n 
-0003168591 00000 n 
-0003171349 00000 n 
-0003171857 00000 n 
-0003170996 00000 n 
-0003168774 00000 n 
-0003171529 00000 n 
-0003171660 00000 n 
-0003171791 00000 n 
-0003174018 00000 n 
-0003174189 00000 n 
-0003174694 00000 n 
-0003173866 00000 n 
-0003172030 00000 n 
-0003174367 00000 n 
-0003174498 00000 n 
-0003174628 00000 n 
-0003175169 00000 n 
-0003174983 00000 n 
-0003174881 00000 n 
-0003175103 00000 n 
-0003177378 00000 n 
-0003176931 00000 n 
-0003175212 00000 n 
-0003177051 00000 n 
-0003177312 00000 n 
-0003179572 00000 n 
-0003178995 00000 n 
-0003177495 00000 n 
-0003179115 00000 n 
-0003179246 00000 n 
-0003179377 00000 n 
-0003179507 00000 n 
-0004771088 00000 n 
-0003182030 00000 n 
-0003181582 00000 n 
-0003179717 00000 n 
-0003181702 00000 n 
-0003181833 00000 n 
-0003181964 00000 n 
-0003184305 00000 n 
-0003183859 00000 n 
-0003182175 00000 n 
-0003183979 00000 n 
-0003184110 00000 n 
-0003184239 00000 n 
-0003186967 00000 n 
-0003186388 00000 n 
-0003184436 00000 n 
-0003186508 00000 n 
-0003186639 00000 n 
-0003186770 00000 n 
-0003186901 00000 n 
-0003189434 00000 n 
-0003189935 00000 n 
-0003190436 00000 n 
-0003189272 00000 n 
-0003187112 00000 n 
-0003190108 00000 n 
-0003190239 00000 n 
-0003190370 00000 n 
-0003189684 00000 n 
-0003192148 00000 n 
-0003191700 00000 n 
-0003190623 00000 n 
-0003191820 00000 n 
-0003191951 00000 n 
-0003192082 00000 n 
-0003192567 00000 n 
-0003192381 00000 n 
-0003192279 00000 n 
-0003192501 00000 n 
-0004771221 00000 n 
-0003195501 00000 n 
-0003194660 00000 n 
-0003192610 00000 n 
-0003194780 00000 n 
-0003194974 00000 n 
-0003195040 00000 n 
-0003195106 00000 n 
-0003195171 00000 n 
-0003195237 00000 n 
-0003195303 00000 n 
-0003195369 00000 n 
-0003195435 00000 n 
-0003197549 00000 n 
-0003197363 00000 n 
-0003195631 00000 n 
-0003197483 00000 n 
-0003199695 00000 n 
-0003199379 00000 n 
-0003197694 00000 n 
-0003199499 00000 n 
-0003202746 00000 n 
-0003202298 00000 n 
-0003199826 00000 n 
-0003202418 00000 n 
-0003202549 00000 n 
-0003202680 00000 n 
-0003209916 00000 n 
-0003206016 00000 n 
-0003205699 00000 n 
-0003202891 00000 n 
-0003205819 00000 n 
-0003205950 00000 n 
-0003210068 00000 n 
-0003212329 00000 n 
-0003209764 00000 n 
-0003206175 00000 n 
-0003210221 00000 n 
-0003210352 00000 n 
-0003210418 00000 n 
-0003210484 00000 n 
-0003210549 00000 n 
-0003210615 00000 n 
-0003210680 00000 n 
-0003210746 00000 n 
-0003210812 00000 n 
-0003210878 00000 n 
-0003210944 00000 n 
-0003211010 00000 n 
-0003211076 00000 n 
-0003211142 00000 n 
-0003211208 00000 n 
-0003211274 00000 n 
-0003211340 00000 n 
-0003211406 00000 n 
-0003211472 00000 n 
-0003211538 00000 n 
-0003211604 00000 n 
-0003211670 00000 n 
-0003211736 00000 n 
-0003211802 00000 n 
-0003211868 00000 n 
-0003211934 00000 n 
-0003212000 00000 n 
-0003212066 00000 n 
-0003212132 00000 n 
-0003212198 00000 n 
-0003212264 00000 n 
-0004771354 00000 n 
-0003215855 00000 n 
-0003215259 00000 n 
-0003215414 00000 n 
-0003215569 00000 n 
-0003216840 00000 n 
-0003215097 00000 n 
-0003212487 00000 n 
-0003215724 00000 n 
-0003215921 00000 n 
-0003215987 00000 n 
-0003216053 00000 n 
-0003216119 00000 n 
-0003216185 00000 n 
-0003216251 00000 n 
-0003216317 00000 n 
-0003216383 00000 n 
-0003216448 00000 n 
-0003216514 00000 n 
-0003216579 00000 n 
-0003216645 00000 n 
-0003216774 00000 n 
-0003220244 00000 n 
-0003225186 00000 n 
-0003226963 00000 n 
-0003221958 00000 n 
-0003219993 00000 n 
-0003216998 00000 n 
-0003220113 00000 n 
-0003220310 00000 n 
-0003220376 00000 n 
-0003220441 00000 n 
-0003220507 00000 n 
-0003220572 00000 n 
-0003220638 00000 n 
-0003220704 00000 n 
-0003220770 00000 n 
-0003220836 00000 n 
-0003220902 00000 n 
-0003220968 00000 n 
-0003221034 00000 n 
-0003221100 00000 n 
-0003221166 00000 n 
-0003221232 00000 n 
-0003221298 00000 n 
-0003221364 00000 n 
-0003221430 00000 n 
-0003221496 00000 n 
-0003221562 00000 n 
-0003221628 00000 n 
-0003221694 00000 n 
-0003221760 00000 n 
-0003221826 00000 n 
-0003221892 00000 n 
-0003227619 00000 n 
-0003224935 00000 n 
-0003222116 00000 n 
-0003225055 00000 n 
-0003225252 00000 n 
-0003225318 00000 n 
-0003225384 00000 n 
-0003225450 00000 n 
-0003225516 00000 n 
-0003225582 00000 n 
-0003225646 00000 n 
-0003225712 00000 n 
-0003225777 00000 n 
-0003225843 00000 n 
-0003225908 00000 n 
-0003225974 00000 n 
-0003226040 00000 n 
-0003226106 00000 n 
-0003226172 00000 n 
-0003226238 00000 n 
-0003226304 00000 n 
-0003226370 00000 n 
-0003226436 00000 n 
-0003226502 00000 n 
-0003226568 00000 n 
-0003226634 00000 n 
-0003226700 00000 n 
-0003226766 00000 n 
-0003226832 00000 n 
-0003227029 00000 n 
-0003227094 00000 n 
-0003227160 00000 n 
-0003227226 00000 n 
-0003227292 00000 n 
-0003227357 00000 n 
-0003227423 00000 n 
-0003227488 00000 n 
-0003227554 00000 n 
-0003228037 00000 n 
-0003227851 00000 n 
-0003227749 00000 n 
-0003227971 00000 n 
-0003228485 00000 n 
-0003228300 00000 n 
-0003228080 00000 n 
-0003228782 00000 n 
-0003228662 00000 n 
-0003228560 00000 n 
-0004771487 00000 n 
-0003230786 00000 n 
-0003230274 00000 n 
-0003228825 00000 n 
-0003230394 00000 n 
-0003230460 00000 n 
-0003230721 00000 n 
-0003233067 00000 n 
-0003234136 00000 n 
-0003232925 00000 n 
-0003230903 00000 n 
-0003233224 00000 n 
-0003233355 00000 n 
-0003233614 00000 n 
-0003233745 00000 n 
-0003233876 00000 n 
-0003234005 00000 n 
-0003234071 00000 n 
-0003237021 00000 n 
-0003235978 00000 n 
-0003234281 00000 n 
-0003236098 00000 n 
-0003236164 00000 n 
-0003236230 00000 n 
-0003236296 00000 n 
-0003236362 00000 n 
-0003236427 00000 n 
-0003236493 00000 n 
-0003236559 00000 n 
-0003236625 00000 n 
-0003236691 00000 n 
-0003236757 00000 n 
-0003236823 00000 n 
-0003236889 00000 n 
-0003236955 00000 n 
-0003238691 00000 n 
-0003239194 00000 n 
-0003238549 00000 n 
-0003237124 00000 n 
-0003238866 00000 n 
-0003238997 00000 n 
-0003239128 00000 n 
-0003240579 00000 n 
-0003240262 00000 n 
-0003239409 00000 n 
-0003240382 00000 n 
-0003240513 00000 n 
-0003241641 00000 n 
-0003241455 00000 n 
-0003240710 00000 n 
-0003241575 00000 n 
-0004771620 00000 n 
-0003242707 00000 n 
-0003242521 00000 n 
-0003241758 00000 n 
-0003242641 00000 n 
-0003243758 00000 n 
-0003243572 00000 n 
-0003242824 00000 n 
-0003243692 00000 n 
-0003244810 00000 n 
-0003244624 00000 n 
-0003243875 00000 n 
-0003244744 00000 n 
-0003246150 00000 n 
-0003245833 00000 n 
-0003244927 00000 n 
-0003245953 00000 n 
-0003246084 00000 n 
-0003248495 00000 n 
-0003248645 00000 n 
-0003248795 00000 n 
-0003249544 00000 n 
-0003248333 00000 n 
-0003246281 00000 n 
-0003248954 00000 n 
-0003249085 00000 n 
-0003249216 00000 n 
-0003249347 00000 n 
-0003249412 00000 n 
-0003249478 00000 n 
-0003252524 00000 n 
-0003252853 00000 n 
-0003252273 00000 n 
-0003249689 00000 n 
-0003252393 00000 n 
-0003252655 00000 n 
-0003252721 00000 n 
-0003252787 00000 n 
-0004771753 00000 n 
-0003254957 00000 n 
-0003255587 00000 n 
-0003254805 00000 n 
-0003252998 00000 n 
-0003255258 00000 n 
-0003255108 00000 n 
-0003255389 00000 n 
-0003255455 00000 n 
-0003255521 00000 n 
-0003258228 00000 n 
-0003257910 00000 n 
-0003255746 00000 n 
-0003258030 00000 n 
-0003258096 00000 n 
-0003258162 00000 n 
-0003260703 00000 n 
-0003259992 00000 n 
-0003258387 00000 n 
-0003260112 00000 n 
-0003260178 00000 n 
-0003260244 00000 n 
-0003260310 00000 n 
-0003260376 00000 n 
-0003260441 00000 n 
-0003260507 00000 n 
-0003260572 00000 n 
-0003260638 00000 n 
-0003261163 00000 n 
-0003260977 00000 n 
-0003260875 00000 n 
-0003261097 00000 n 
-0003263129 00000 n 
-0003262552 00000 n 
-0003261206 00000 n 
-0003262672 00000 n 
-0003262932 00000 n 
-0003263063 00000 n 
-0003265071 00000 n 
-0003264885 00000 n 
-0003263246 00000 n 
-0003265005 00000 n 
-0004771886 00000 n 
-0003267645 00000 n 
-0003267328 00000 n 
-0003265202 00000 n 
-0003267448 00000 n 
-0003267579 00000 n 
-0003270384 00000 n 
-0003269936 00000 n 
-0003267776 00000 n 
-0003270056 00000 n 
-0003270187 00000 n 
-0003270318 00000 n 
-0003273210 00000 n 
-0003272631 00000 n 
-0003270501 00000 n 
-0003272751 00000 n 
-0003272882 00000 n 
-0003273013 00000 n 
-0003273144 00000 n 
-0003274952 00000 n 
-0003275697 00000 n 
-0003274810 00000 n 
-0003273383 00000 n 
-0003275105 00000 n 
-0003275171 00000 n 
-0003275237 00000 n 
-0003275303 00000 n 
-0003275369 00000 n 
-0003275435 00000 n 
-0003275501 00000 n 
-0003275632 00000 n 
-0003277991 00000 n 
-0003277704 00000 n 
-0003278318 00000 n 
-0003277562 00000 n 
-0003275856 00000 n 
-0003277860 00000 n 
-0003278122 00000 n 
-0003278252 00000 n 
-0003280833 00000 n 
-0003280899 00000 n 
-0003280582 00000 n 
-0003278463 00000 n 
-0003280702 00000 n 
-0004772019 00000 n 
-0003283020 00000 n 
-0003282834 00000 n 
-0003281044 00000 n 
-0003282954 00000 n 
-0003284108 00000 n 
-0003283922 00000 n 
-0003283165 00000 n 
-0003284042 00000 n 
-0003286102 00000 n 
-0003286578 00000 n 
-0003285960 00000 n 
-0003284225 00000 n 
-0003286251 00000 n 
-0003286512 00000 n 
-0003294547 00000 n 
-0003289178 00000 n 
-0003288730 00000 n 
-0003286709 00000 n 
-0003288850 00000 n 
-0003288981 00000 n 
-0003289112 00000 n 
-0003291434 00000 n 
-0003290986 00000 n 
-0003289366 00000 n 
-0003291106 00000 n 
-0003291237 00000 n 
-0003291368 00000 n 
-0003293003 00000 n 
-0003292817 00000 n 
-0003291565 00000 n 
-0003292937 00000 n 
-0004772152 00000 n 
-0003294612 00000 n 
-0003294296 00000 n 
-0003293120 00000 n 
-0003294416 00000 n 
-0003296705 00000 n 
-0003296519 00000 n 
-0003294743 00000 n 
-0003296639 00000 n 
-0003298689 00000 n 
-0003299615 00000 n 
-0003298537 00000 n 
-0003296850 00000 n 
-0003299023 00000 n 
-0003299154 00000 n 
-0003299220 00000 n 
-0003299286 00000 n 
-0003299352 00000 n 
-0003299418 00000 n 
-0003298857 00000 n 
-0003299549 00000 n 
-0003304588 00000 n 
-0003302321 00000 n 
-0003301874 00000 n 
-0003299774 00000 n 
-0003301994 00000 n 
-0003302124 00000 n 
-0003302255 00000 n 
-0003304958 00000 n 
-0003304446 00000 n 
-0003302480 00000 n 
-0003304762 00000 n 
-0003304893 00000 n 
-0003307825 00000 n 
-0003307246 00000 n 
-0003305230 00000 n 
-0003307366 00000 n 
-0003307497 00000 n 
-0003307628 00000 n 
-0003307759 00000 n 
-0004772285 00000 n 
-0003310506 00000 n 
-0003309928 00000 n 
-0003308013 00000 n 
-0003310048 00000 n 
-0003310179 00000 n 
-0003310310 00000 n 
-0003310440 00000 n 
-0003311261 00000 n 
-0003311075 00000 n 
-0003310651 00000 n 
-0003311195 00000 n 
-0003311764 00000 n 
-0003311579 00000 n 
-0003311364 00000 n 
-0003312061 00000 n 
-0003311941 00000 n 
-0003311839 00000 n 
-0003313753 00000 n 
-0003314430 00000 n 
-0003313611 00000 n 
-0003312104 00000 n 
-0003313906 00000 n 
-0003313972 00000 n 
-0003314233 00000 n 
-0003314364 00000 n 
-0003317181 00000 n 
-0003317773 00000 n 
-0003316930 00000 n 
-0003314575 00000 n 
-0003317050 00000 n 
-0003317247 00000 n 
-0003317313 00000 n 
-0003317379 00000 n 
-0003317445 00000 n 
-0003317511 00000 n 
-0003317642 00000 n 
-0003317707 00000 n 
-0004772418 00000 n 
-0003320575 00000 n 
-0003320323 00000 n 
-0003317988 00000 n 
-0003320443 00000 n 
-0003320509 00000 n 
-0003322671 00000 n 
-0003322419 00000 n 
-0003320763 00000 n 
-0003322539 00000 n 
-0003322605 00000 n 
-0003325753 00000 n 
-0003325904 00000 n 
-0003326053 00000 n 
-0003326797 00000 n 
-0003325591 00000 n 
-0003322802 00000 n 
-0003326204 00000 n 
-0003326335 00000 n 
-0003326401 00000 n 
-0003326467 00000 n 
-0003326533 00000 n 
-0003326599 00000 n 
-0003326665 00000 n 
-0003326731 00000 n 
-0003330168 00000 n 
-0003330827 00000 n 
-0003329917 00000 n 
-0003326998 00000 n 
-0003330037 00000 n 
-0003330234 00000 n 
-0003330300 00000 n 
-0003330366 00000 n 
-0003330432 00000 n 
-0003330498 00000 n 
-0003330564 00000 n 
-0003330630 00000 n 
-0003330696 00000 n 
-0003330761 00000 n 
-0003333975 00000 n 
-0003333394 00000 n 
-0003330971 00000 n 
-0003333514 00000 n 
-0003333580 00000 n 
-0003333645 00000 n 
-0003333711 00000 n 
-0003333777 00000 n 
-0003333843 00000 n 
-0003333909 00000 n 
-0003337419 00000 n 
-0003336838 00000 n 
-0003334191 00000 n 
-0003336958 00000 n 
-0003337024 00000 n 
-0003337090 00000 n 
-0003337156 00000 n 
-0003337222 00000 n 
-0003337288 00000 n 
-0003337353 00000 n 
-0004772551 00000 n 
-0003339172 00000 n 
-0003338920 00000 n 
-0003337578 00000 n 
-0003339040 00000 n 
-0003339106 00000 n 
-0003339591 00000 n 
-0003339405 00000 n 
-0003339303 00000 n 
-0003339525 00000 n 
-0003341923 00000 n 
-0003341347 00000 n 
-0003339634 00000 n 
-0003341467 00000 n 
-0003341727 00000 n 
-0003341857 00000 n 
-0003344397 00000 n 
-0003344567 00000 n 
-0003346709 00000 n 
-0003344244 00000 n 
-0003367340 00000 n 
-0003345199 00000 n 
-0003344082 00000 n 
-0003342068 00000 n 
-0003344740 00000 n 
-0003344871 00000 n 
-0003345002 00000 n 
-0003345133 00000 n 
-0003365478 00000 n 
-0003365675 00000 n 
-0003346589 00000 n 
-0003345400 00000 n 
-0003365347 00000 n 
-0003365609 00000 n 
-0003405706 00000 n 
-0003367220 00000 n 
-0003365831 00000 n 
-0003405509 00000 n 
-0003405640 00000 n 
-0004772684 00000 n 
-0003408688 00000 n 
-0003408879 00000 n 
-0003408009 00000 n 
-0003408339 00000 n 
-0003409530 00000 n 
-0003407817 00000 n 
-0003405904 00000 n 
-0003409071 00000 n 
-0003409202 00000 n 
-0003409333 00000 n 
-0003409464 00000 n 
-0003408175 00000 n 
-0003408514 00000 n 
-0003413359 00000 n 
-0003412146 00000 n 
-0003411960 00000 n 
-0003409745 00000 n 
-0003412080 00000 n 
-0003413729 00000 n 
-0003413217 00000 n 
-0003412291 00000 n 
-0003413532 00000 n 
-0003413663 00000 n 
-0003414190 00000 n 
-0003414004 00000 n 
-0003413902 00000 n 
-0003414124 00000 n 
-0003416461 00000 n 
-0003416117 00000 n 
-0003417095 00000 n 
-0003415955 00000 n 
-0003414233 00000 n 
-0003416637 00000 n 
-0003416898 00000 n 
-0003416290 00000 n 
-0003417029 00000 n 
-0003420121 00000 n 
-0003420733 00000 n 
-0003419979 00000 n 
-0003417296 00000 n 
-0003420273 00000 n 
-0003420469 00000 n 
-0003420535 00000 n 
-0003420601 00000 n 
-0003420667 00000 n 
-0004772817 00000 n 
-0003423762 00000 n 
-0003424638 00000 n 
-0003423620 00000 n 
-0003420905 00000 n 
-0003423915 00000 n 
-0003424046 00000 n 
-0003424112 00000 n 
-0003424178 00000 n 
-0003424244 00000 n 
-0003424310 00000 n 
-0003424441 00000 n 
-0003424572 00000 n 
-0003427162 00000 n 
-0003426845 00000 n 
-0003424796 00000 n 
-0003426965 00000 n 
-0003427096 00000 n 
-0003428612 00000 n 
-0003428296 00000 n 
-0003427307 00000 n 
-0003428416 00000 n 
-0003428546 00000 n 
-0003429031 00000 n 
-0003428845 00000 n 
-0003428743 00000 n 
-0003428965 00000 n 
-0003429471 00000 n 
-0003429286 00000 n 
-0003429074 00000 n 
-0003429768 00000 n 
-0003429648 00000 n 
-0003429546 00000 n 
-0004772950 00000 n 
-0003431263 00000 n 
-0003431429 00000 n 
-0003432270 00000 n 
-0003431111 00000 n 
-0003429811 00000 n 
-0003431616 00000 n 
-0003431682 00000 n 
-0003431943 00000 n 
-0003432074 00000 n 
-0003432205 00000 n 
-0003434581 00000 n 
-0003434756 00000 n 
-0003435394 00000 n 
-0003434429 00000 n 
-0003432443 00000 n 
-0003434935 00000 n 
-0003435066 00000 n 
-0003435196 00000 n 
-0003435262 00000 n 
-0003435328 00000 n 
-0003437559 00000 n 
-0003437744 00000 n 
-0003437932 00000 n 
-0003438499 00000 n 
-0003437397 00000 n 
-0003435539 00000 n 
-0003438105 00000 n 
-0003438171 00000 n 
-0003438302 00000 n 
-0003438433 00000 n 
-0003440530 00000 n 
-0003440213 00000 n 
-0003438700 00000 n 
-0003440333 00000 n 
-0003440464 00000 n 
-0003441847 00000 n 
-0003441661 00000 n 
-0003440661 00000 n 
-0003441781 00000 n 
-0003443962 00000 n 
-0003443383 00000 n 
-0003441964 00000 n 
-0003443503 00000 n 
-0003443634 00000 n 
-0003443765 00000 n 
-0003443896 00000 n 
-0004773083 00000 n 
-0003446477 00000 n 
-0003445902 00000 n 
-0003444121 00000 n 
-0003446022 00000 n 
-0003446151 00000 n 
-0003446411 00000 n 
-0003448169 00000 n 
-0003447983 00000 n 
-0003446608 00000 n 
-0003448103 00000 n 
-0003450288 00000 n 
-0003449971 00000 n 
-0003448343 00000 n 
-0003450091 00000 n 
-0003450222 00000 n 
-0003452322 00000 n 
-0003452005 00000 n 
-0003450504 00000 n 
-0003452125 00000 n 
-0003452256 00000 n 
-0003453741 00000 n 
-0003453424 00000 n 
-0003452510 00000 n 
-0003453544 00000 n 
-0003453675 00000 n 
-0003454160 00000 n 
-0003453974 00000 n 
-0003453872 00000 n 
-0003454094 00000 n 
-0004773216 00000 n 
-0003456260 00000 n 
-0003455813 00000 n 
-0003454203 00000 n 
-0003455933 00000 n 
-0003456194 00000 n 
-0003458451 00000 n 
-0003458946 00000 n 
-0003458309 00000 n 
-0003456391 00000 n 
-0003458618 00000 n 
-0003458749 00000 n 
-0003458880 00000 n 
-0003460177 00000 n 
-0003459991 00000 n 
-0003459133 00000 n 
-0003460111 00000 n 
-0003462368 00000 n 
-0003461920 00000 n 
-0003460294 00000 n 
-0003462040 00000 n 
-0003462171 00000 n 
-0003462302 00000 n 
-0003464306 00000 n 
-0003465334 00000 n 
-0003464154 00000 n 
-0003462499 00000 n 
-0003464875 00000 n 
-0003465006 00000 n 
-0003465137 00000 n 
-0003464591 00000 n 
-0003465795 00000 n 
-0003465609 00000 n 
-0003465507 00000 n 
-0003465729 00000 n 
-0004773349 00000 n 
-0003467697 00000 n 
-0003467870 00000 n 
-0003468061 00000 n 
-0003468246 00000 n 
-0003468438 00000 n 
-0003468952 00000 n 
-0003467515 00000 n 
-0003465838 00000 n 
-0003468625 00000 n 
-0003468886 00000 n 
-0003471474 00000 n 
-0003472132 00000 n 
-0003471332 00000 n 
-0003469125 00000 n 
-0003471673 00000 n 
-0003471804 00000 n 
-0003471935 00000 n 
-0003472066 00000 n 
-0003474478 00000 n 
-0003475127 00000 n 
-0003474336 00000 n 
-0003472333 00000 n 
-0003474669 00000 n 
-0003474800 00000 n 
-0003474931 00000 n 
-0003475062 00000 n 
-0003477644 00000 n 
-0003478290 00000 n 
-0003477502 00000 n 
-0003475342 00000 n 
-0003477832 00000 n 
-0003477963 00000 n 
-0003478094 00000 n 
-0003478224 00000 n 
-0003480531 00000 n 
-0003481140 00000 n 
-0003480389 00000 n 
-0003478491 00000 n 
-0003480683 00000 n 
-0003480814 00000 n 
-0003480943 00000 n 
-0003481074 00000 n 
-0003484136 00000 n 
-0003485215 00000 n 
-0003483994 00000 n 
-0003481299 00000 n 
-0003484295 00000 n 
-0003484426 00000 n 
-0003484557 00000 n 
-0003484688 00000 n 
-0003484754 00000 n 
-0003484820 00000 n 
-0003484886 00000 n 
-0003484951 00000 n 
-0003485017 00000 n 
-0003485083 00000 n 
-0003485149 00000 n 
-0004773482 00000 n 
-0003486570 00000 n 
-0003486973 00000 n 
-0003486428 00000 n 
-0003485387 00000 n 
-0003486777 00000 n 
-0003486908 00000 n 
-0003487533 00000 n 
-0003487347 00000 n 
-0003487245 00000 n 
-0003487467 00000 n 
-0003489661 00000 n 
-0003489083 00000 n 
-0003487576 00000 n 
-0003489203 00000 n 
-0003489464 00000 n 
-0003489595 00000 n 
-0003492376 00000 n 
-0003492059 00000 n 
-0003489778 00000 n 
-0003492179 00000 n 
-0003492310 00000 n 
-0003495206 00000 n 
-0003494496 00000 n 
-0003492535 00000 n 
-0003494616 00000 n 
-0003494747 00000 n 
-0003494878 00000 n 
-0003495009 00000 n 
-0003495140 00000 n 
-0003497407 00000 n 
-0003498181 00000 n 
-0003497255 00000 n 
-0003495365 00000 n 
-0003497723 00000 n 
-0003497854 00000 n 
-0003497985 00000 n 
-0003497565 00000 n 
-0003498115 00000 n 
-0004773615 00000 n 
-0003500861 00000 n 
-0003500413 00000 n 
-0003498326 00000 n 
-0003500533 00000 n 
-0003500664 00000 n 
-0003500795 00000 n 
-0003501280 00000 n 
-0003501094 00000 n 
-0003500992 00000 n 
-0003501214 00000 n 
-0003502767 00000 n 
-0003505769 00000 n 
-0003503270 00000 n 
-0003502625 00000 n 
-0003501323 00000 n 
-0003502943 00000 n 
-0003503204 00000 n 
-0003505946 00000 n 
-0003506116 00000 n 
-0003506289 00000 n 
-0003506460 00000 n 
-0003506631 00000 n 
-0003507326 00000 n 
-0003505567 00000 n 
-0003503457 00000 n 
-0003506999 00000 n 
-0003507130 00000 n 
-0003507260 00000 n 
-0003506815 00000 n 
-0003509124 00000 n 
-0003508938 00000 n 
-0003507613 00000 n 
-0003509058 00000 n 
-0004751157 00000 n 
-0004754573 00000 n 
-0003511139 00000 n 
-0003510690 00000 n 
-0003509398 00000 n 
-0003510810 00000 n 
-0003510876 00000 n 
-0003510942 00000 n 
-0003511073 00000 n 
-0004773748 00000 n 
-0003512906 00000 n 
-0003512588 00000 n 
-0003511284 00000 n 
-0003512708 00000 n 
-0003512774 00000 n 
-0003512840 00000 n 
-0003514570 00000 n 
-0003514253 00000 n 
-0003513037 00000 n 
-0003514373 00000 n 
-0003514504 00000 n 
-0003515728 00000 n 
-0003516085 00000 n 
-0003515586 00000 n 
-0003514701 00000 n 
-0003515888 00000 n 
-0003516019 00000 n 
-0003517358 00000 n 
-0003517172 00000 n 
-0003516216 00000 n 
-0003517292 00000 n 
-0003518868 00000 n 
-0003519028 00000 n 
-0003519197 00000 n 
-0003519564 00000 n 
-0003518706 00000 n 
-0003517532 00000 n 
-0003519367 00000 n 
-0003519498 00000 n 
-0003519997 00000 n 
-0003519811 00000 n 
-0003519709 00000 n 
-0003519931 00000 n 
-0004773881 00000 n 
-0003522125 00000 n 
-0003521808 00000 n 
-0003520040 00000 n 
-0003521928 00000 n 
-0003522059 00000 n 
-0003524815 00000 n 
-0003524995 00000 n 
-0003525178 00000 n 
-0003525550 00000 n 
-0003524653 00000 n 
-0003522242 00000 n 
-0003525353 00000 n 
-0003525484 00000 n 
-0003527756 00000 n 
-0003528142 00000 n 
-0003527614 00000 n 
-0003525737 00000 n 
-0003527945 00000 n 
-0003528076 00000 n 
-0003528617 00000 n 
-0003528431 00000 n 
-0003528329 00000 n 
-0003528551 00000 n 
-0003533313 00000 n 
-0003533479 00000 n 
-0003533671 00000 n 
-0003530676 00000 n 
-0003530229 00000 n 
-0003528660 00000 n 
-0003530349 00000 n 
-0003530610 00000 n 
-0003534245 00000 n 
-0003533151 00000 n 
-0003530793 00000 n 
-0003533851 00000 n 
-0003533917 00000 n 
-0003533983 00000 n 
-0003534049 00000 n 
-0003534180 00000 n 
-0004774014 00000 n 
-0003536175 00000 n 
-0003535858 00000 n 
-0003534418 00000 n 
-0003535978 00000 n 
-0003536109 00000 n 
-0003537231 00000 n 
-0003537045 00000 n 
-0003536306 00000 n 
-0003537165 00000 n 
-0003538321 00000 n 
-0003538135 00000 n 
-0003537334 00000 n 
-0003538255 00000 n 
-0003539394 00000 n 
-0003539208 00000 n 
-0003538438 00000 n 
-0003539328 00000 n 
-0003541081 00000 n 
-0003540765 00000 n 
-0003539511 00000 n 
-0003540885 00000 n 
-0003541779 00000 n 
-0003541593 00000 n 
-0003541212 00000 n 
-0003541713 00000 n 
-0004774147 00000 n 
-0003543587 00000 n 
-0003544014 00000 n 
-0003543445 00000 n 
-0003541882 00000 n 
-0003543752 00000 n 
-0003543883 00000 n 
-0003543948 00000 n 
-0003546675 00000 n 
-0003546423 00000 n 
-0003544173 00000 n 
-0003546543 00000 n 
-0003546609 00000 n 
-0003549090 00000 n 
-0003548772 00000 n 
-0003546792 00000 n 
-0003548892 00000 n 
-0003548958 00000 n 
-0003549024 00000 n 
-0003551667 00000 n 
-0003551415 00000 n 
-0003549193 00000 n 
-0003551535 00000 n 
-0003551601 00000 n 
-0003554131 00000 n 
-0003553813 00000 n 
-0003551784 00000 n 
-0003553933 00000 n 
-0003553999 00000 n 
-0003554065 00000 n 
-0003556965 00000 n 
-0003556451 00000 n 
-0003554234 00000 n 
-0003556571 00000 n 
-0003556637 00000 n 
-0003556702 00000 n 
-0003556768 00000 n 
-0003556833 00000 n 
-0003556899 00000 n 
-0004774280 00000 n 
-0003559923 00000 n 
-0003559342 00000 n 
-0003557082 00000 n 
-0003559462 00000 n 
-0003559528 00000 n 
-0003559594 00000 n 
-0003559660 00000 n 
-0003559725 00000 n 
-0003559791 00000 n 
-0003559857 00000 n 
-0003562669 00000 n 
-0003562483 00000 n 
-0003560026 00000 n 
-0003562603 00000 n 
-0003565216 00000 n 
-0003564767 00000 n 
-0003562772 00000 n 
-0003564887 00000 n 
-0003564953 00000 n 
-0003565019 00000 n 
-0003565085 00000 n 
-0003565150 00000 n 
-0003567943 00000 n 
-0003567493 00000 n 
-0003565319 00000 n 
-0003567613 00000 n 
-0003567679 00000 n 
-0003567745 00000 n 
-0003567811 00000 n 
-0003567877 00000 n 
-0003570406 00000 n 
-0003570088 00000 n 
-0003568060 00000 n 
-0003570208 00000 n 
-0003570274 00000 n 
-0003570340 00000 n 
-0003573006 00000 n 
-0003572754 00000 n 
-0003570509 00000 n 
-0003572874 00000 n 
-0003572940 00000 n 
-0004774413 00000 n 
-0003575717 00000 n 
-0003575465 00000 n 
-0003573123 00000 n 
-0003575585 00000 n 
-0003575651 00000 n 
-0003578104 00000 n 
-0003577786 00000 n 
-0003575820 00000 n 
-0003577906 00000 n 
-0003577972 00000 n 
-0003578038 00000 n 
-0003580438 00000 n 
-0003579988 00000 n 
+0002514999 00000 n 
+0002515126 00000 n 
+0002517204 00000 n 
+0002519379 00000 n 
+0002570092 00000 n 
+0002517674 00000 n 
+0002517067 00000 n 
+0002515334 00000 n 
+0002517354 00000 n 
+0002517482 00000 n 
+0002517610 00000 n 
+0002570370 00000 n 
+0002541991 00000 n 
+0002605985 00000 n 
+0002570690 00000 n 
+0002519242 00000 n 
+0002517832 00000 n 
+0002570242 00000 n 
+0002570498 00000 n 
+0002570626 00000 n 
+0002541804 00000 n 
+0002569903 00000 n 
+0002573129 00000 n 
+0002606140 00000 n 
+0002608358 00000 n 
+0002637952 00000 n 
+0002606488 00000 n 
+0002572983 00000 n 
+0002570909 00000 n 
+0002606296 00000 n 
+0002606424 00000 n 
+0002605796 00000 n 
+0002638379 00000 n 
+0002640218 00000 n 
+0002638102 00000 n 
+0002687649 00000 n 
+0002638699 00000 n 
+0002608212 00000 n 
+0002606678 00000 n 
+0002638251 00000 n 
+0002638507 00000 n 
+0002638635 00000 n 
+0002637763 00000 n 
+0002685849 00000 n 
+0002718530 00000 n 
+0002686041 00000 n 
+0002640102 00000 n 
+0002638875 00000 n 
+0002685721 00000 n 
+0002685977 00000 n 
+0005323848 00000 n 
+0002685532 00000 n 
+0002718594 00000 n 
+0002687533 00000 n 
+0002686217 00000 n 
+0002718402 00000 n 
+0002718213 00000 n 
+0002721284 00000 n 
+0002721104 00000 n 
+0002718756 00000 n 
+0002721220 00000 n 
+0002723752 00000 n 
+0002723445 00000 n 
+0002721428 00000 n 
+0002723561 00000 n 
+0002723689 00000 n 
+0002726410 00000 n 
+0002725974 00000 n 
+0002723896 00000 n 
+0002726090 00000 n 
+0002726218 00000 n 
+0002726346 00000 n 
+0002729122 00000 n 
+0002728686 00000 n 
+0002726612 00000 n 
+0002728802 00000 n 
+0002728930 00000 n 
+0002729058 00000 n 
+0002731332 00000 n 
+0002731152 00000 n 
+0002729280 00000 n 
+0002731268 00000 n 
+0005323974 00000 n 
+0002733788 00000 n 
+0002734260 00000 n 
+0002733651 00000 n 
+0002731547 00000 n 
+0002733940 00000 n 
+0002734068 00000 n 
+0002734196 00000 n 
+0002737697 00000 n 
+0002737230 00000 n 
+0002739248 00000 n 
+0002737387 00000 n 
+0002737761 00000 n 
+0002737084 00000 n 
+0002734432 00000 n 
+0002737569 00000 n 
+0002786444 00000 n 
+0002786158 00000 n 
+0002786508 00000 n 
+0002739111 00000 n 
+0002737975 00000 n 
+0002786316 00000 n 
+0002785969 00000 n 
+0002821897 00000 n 
+0002788624 00000 n 
+0002822372 00000 n 
+0002788487 00000 n 
+0002786670 00000 n 
+0002822052 00000 n 
+0002822180 00000 n 
+0002822308 00000 n 
+0002789265 00000 n 
+0002789397 00000 n 
+0002789445 00000 n 
+0002789676 00000 n 
+0002789698 00000 n 
+0002789917 00000 n 
+0002858779 00000 n 
+0002824939 00000 n 
+0002858936 00000 n 
+0002862180 00000 n 
+0002859433 00000 n 
+0002824793 00000 n 
+0002822560 00000 n 
+0002859116 00000 n 
+0002859243 00000 n 
+0002859369 00000 n 
+0002825811 00000 n 
+0002825943 00000 n 
+0002825991 00000 n 
+0002826234 00000 n 
+0002826256 00000 n 
+0002826475 00000 n 
+0002862362 00000 n 
+0002862547 00000 n 
+0002862756 00000 n 
+0002862935 00000 n 
+0002866315 00000 n 
+0002863304 00000 n 
+0002862007 00000 n 
+0002859663 00000 n 
+0002863112 00000 n 
+0002863240 00000 n 
+0005324100 00000 n 
+0002865716 00000 n 
+0002865866 00000 n 
+0002866166 00000 n 
+0002868333 00000 n 
+0002926144 00000 n 
+0002866975 00000 n 
+0002865543 00000 n 
+0002863504 00000 n 
+0002866527 00000 n 
+0002866655 00000 n 
+0002866783 00000 n 
+0002866016 00000 n 
+0002866911 00000 n 
+0002926423 00000 n 
+0002926679 00000 n 
+0002896392 00000 n 
+0002926743 00000 n 
+0002868196 00000 n 
+0002867161 00000 n 
+0002926295 00000 n 
+0002926551 00000 n 
+0002896205 00000 n 
+0002925955 00000 n 
+0002929461 00000 n 
+0002931867 00000 n 
+0002930124 00000 n 
+0002929324 00000 n 
+0002926920 00000 n 
+0002929612 00000 n 
+0002929740 00000 n 
+0002929868 00000 n 
+0002929932 00000 n 
+0002929996 00000 n 
+0002930060 00000 n 
+0002962745 00000 n 
+0002962937 00000 n 
+0002931751 00000 n 
+0002930309 00000 n 
+0002962617 00000 n 
+0002962873 00000 n 
+0002962428 00000 n 
+0002965615 00000 n 
+0002966290 00000 n 
+0002965469 00000 n 
+0002963141 00000 n 
+0002965970 00000 n 
+0002966098 00000 n 
+0002965794 00000 n 
+0002966226 00000 n 
+0002969218 00000 n 
+0002968654 00000 n 
+0002966448 00000 n 
+0002968770 00000 n 
+0002968898 00000 n 
+0002969026 00000 n 
+0002969154 00000 n 
+0005324226 00000 n 
+0002972184 00000 n 
+0002971622 00000 n 
+0002969376 00000 n 
+0002971738 00000 n 
+0002971865 00000 n 
+0002971992 00000 n 
+0002972120 00000 n 
+0002974738 00000 n 
+0002975219 00000 n 
+0002974601 00000 n 
+0002972300 00000 n 
+0002974899 00000 n 
+0002975027 00000 n 
+0002975155 00000 n 
+0002978631 00000 n 
+0002978784 00000 n 
+0002980999 00000 n 
+0002978476 00000 n 
+0002975405 00000 n 
+0002979147 00000 n 
+0002979275 00000 n 
+0002979402 00000 n 
+0002979466 00000 n 
+0002979530 00000 n 
+0002979594 00000 n 
+0002979658 00000 n 
+0002979722 00000 n 
+0002979786 00000 n 
+0002979850 00000 n 
+0002979914 00000 n 
+0002979978 00000 n 
+0002980042 00000 n 
+0002980106 00000 n 
+0002980169 00000 n 
+0002980233 00000 n 
+0002980296 00000 n 
+0002980360 00000 n 
+0002980423 00000 n 
+0002980487 00000 n 
+0002980551 00000 n 
+0002980615 00000 n 
+0002980679 00000 n 
+0002980743 00000 n 
+0002980807 00000 n 
+0002980935 00000 n 
+0002978966 00000 n 
+0002982405 00000 n 
+0002982225 00000 n 
+0002981170 00000 n 
+0002982341 00000 n 
+0002984560 00000 n 
+0002984252 00000 n 
+0002982535 00000 n 
+0002984368 00000 n 
+0002984496 00000 n 
+0002989585 00000 n 
+0002986915 00000 n 
+0002986479 00000 n 
+0002984761 00000 n 
+0002986595 00000 n 
+0002986723 00000 n 
+0002986851 00000 n 
+0005324352 00000 n 
+0002989961 00000 n 
+0002989448 00000 n 
+0002987130 00000 n 
+0002989769 00000 n 
+0002989897 00000 n 
+0002991337 00000 n 
+0002991157 00000 n 
+0002990247 00000 n 
+0002991273 00000 n 
+0002993519 00000 n 
+0002993905 00000 n 
+0002993373 00000 n 
+0002991510 00000 n 
+0002993841 00000 n 
+0002993680 00000 n 
+0002996836 00000 n 
+0002996528 00000 n 
+0002994092 00000 n 
+0002996644 00000 n 
+0002996772 00000 n 
+0002999677 00000 n 
+0002999241 00000 n 
+0002997022 00000 n 
+0002999357 00000 n 
+0002999485 00000 n 
+0002999613 00000 n 
+0003001085 00000 n 
+0003000905 00000 n 
+0002999863 00000 n 
+0003001021 00000 n 
+0005324478 00000 n 
+0003003178 00000 n 
+0003002806 00000 n 
+0003001187 00000 n 
+0003002922 00000 n 
+0003003050 00000 n 
+0003003114 00000 n 
+0003005871 00000 n 
+0003005243 00000 n 
+0003003393 00000 n 
+0003005359 00000 n 
+0003005423 00000 n 
+0003005487 00000 n 
+0003005551 00000 n 
+0003005615 00000 n 
+0003005743 00000 n 
+0003005807 00000 n 
+0003008454 00000 n 
+0003008018 00000 n 
+0003006086 00000 n 
+0003008134 00000 n 
+0003008198 00000 n 
+0003008262 00000 n 
+0003008390 00000 n 
+0003065941 00000 n 
+0003009655 00000 n 
+0003066411 00000 n 
+0003009518 00000 n 
+0003008669 00000 n 
+0003066091 00000 n 
+0003066219 00000 n 
+0003066347 00000 n 
+0003065752 00000 n 
+0003069445 00000 n 
+0003069009 00000 n 
+0003066587 00000 n 
+0003069125 00000 n 
+0003069253 00000 n 
+0003072185 00000 n 
+0003071621 00000 n 
+0003069603 00000 n 
+0003071737 00000 n 
+0003071865 00000 n 
+0003071929 00000 n 
+0003071993 00000 n 
+0003072057 00000 n 
+0003072121 00000 n 
+0005324604 00000 n 
+0003074679 00000 n 
+0003074371 00000 n 
+0003072357 00000 n 
+0003074487 00000 n 
+0003074615 00000 n 
+0003077579 00000 n 
+0003077143 00000 n 
+0003074837 00000 n 
+0003077259 00000 n 
+0003077387 00000 n 
+0003077515 00000 n 
+0003079545 00000 n 
+0003079237 00000 n 
+0003077765 00000 n 
+0003079353 00000 n 
+0003079481 00000 n 
+0003082484 00000 n 
+0003082112 00000 n 
+0003079689 00000 n 
+0003082228 00000 n 
+0003082356 00000 n 
+0003082420 00000 n 
+0003084523 00000 n 
+0003084215 00000 n 
+0003082670 00000 n 
+0003084331 00000 n 
+0003084395 00000 n 
+0003084459 00000 n 
+0003086638 00000 n 
+0003086330 00000 n 
+0003084681 00000 n 
+0003086446 00000 n 
+0003086510 00000 n 
+0003086574 00000 n 
+0005324730 00000 n 
+0003088675 00000 n 
+0003088367 00000 n 
+0003086796 00000 n 
+0003088483 00000 n 
+0003088547 00000 n 
+0003088611 00000 n 
+0003090705 00000 n 
+0003090333 00000 n 
+0003088819 00000 n 
+0003090449 00000 n 
+0003090513 00000 n 
+0003090577 00000 n 
+0003090641 00000 n 
+0003092004 00000 n 
+0003091824 00000 n 
+0003090821 00000 n 
+0003091940 00000 n 
+0003094646 00000 n 
+0003094211 00000 n 
+0003092120 00000 n 
+0003094327 00000 n 
+0003094391 00000 n 
+0003094455 00000 n 
+0003094519 00000 n 
+0003094583 00000 n 
+0003096921 00000 n 
+0003096549 00000 n 
+0003094804 00000 n 
+0003096665 00000 n 
+0003096729 00000 n 
+0003096857 00000 n 
+0003099959 00000 n 
+0003099396 00000 n 
+0003097051 00000 n 
+0003099512 00000 n 
+0003099640 00000 n 
+0003099768 00000 n 
+0003099896 00000 n 
+0005324856 00000 n 
+0003102072 00000 n 
+0003101637 00000 n 
+0003100103 00000 n 
+0003101753 00000 n 
+0003101881 00000 n 
+0003102009 00000 n 
+0003103893 00000 n 
+0003107008 00000 n 
+0003104278 00000 n 
+0003103756 00000 n 
+0003102216 00000 n 
+0003104086 00000 n 
+0003104214 00000 n 
+0003107200 00000 n 
+0003107378 00000 n 
+0003107583 00000 n 
+0003107773 00000 n 
+0003108158 00000 n 
+0003106835 00000 n 
+0003104464 00000 n 
+0003107966 00000 n 
+0003108094 00000 n 
+0003111098 00000 n 
+0003111269 00000 n 
+0003111912 00000 n 
+0003110952 00000 n 
+0003108415 00000 n 
+0003111464 00000 n 
+0003111592 00000 n 
+0003111720 00000 n 
+0003111848 00000 n 
+0003114754 00000 n 
+0003114971 00000 n 
+0003115187 00000 n 
+0003115403 00000 n 
+0003115586 00000 n 
+0003115762 00000 n 
+0003115930 00000 n 
+0003119196 00000 n 
+0003119369 00000 n 
+0003119553 00000 n 
+0003119722 00000 n 
+0003116303 00000 n 
+0003114563 00000 n 
+0003112112 00000 n 
+0003116111 00000 n 
+0003116239 00000 n 
+0003120159 00000 n 
+0003120620 00000 n 
+0003121083 00000 n 
+0003121812 00000 n 
+0003118969 00000 n 
+0003116489 00000 n 
+0003121620 00000 n 
+0003121748 00000 n 
+0003119940 00000 n 
+0003120389 00000 n 
+0003120851 00000 n 
+0003121351 00000 n 
+0005324982 00000 n 
+0003124613 00000 n 
+0003124823 00000 n 
+0003124994 00000 n 
+0003127984 00000 n 
+0003128198 00000 n 
+0003128386 00000 n 
+0003128569 00000 n 
+0003125360 00000 n 
+0003124458 00000 n 
+0003121998 00000 n 
+0003125168 00000 n 
+0003125296 00000 n 
+0003132146 00000 n 
+0003132342 00000 n 
+0003129356 00000 n 
+0003127811 00000 n 
+0003125546 00000 n 
+0003129036 00000 n 
+0003129164 00000 n 
+0003129292 00000 n 
+0003128802 00000 n 
+0003132519 00000 n 
+0003132712 00000 n 
+0003136323 00000 n 
+0003133110 00000 n 
+0003131982 00000 n 
+0003129585 00000 n 
+0003132918 00000 n 
+0003133046 00000 n 
+0003136762 00000 n 
+0003136967 00000 n 
+0003137157 00000 n 
+0003137345 00000 n 
+0003137533 00000 n 
+0003137721 00000 n 
+0003135605 00000 n 
+0003137913 00000 n 
+0003138389 00000 n 
+0003138658 00000 n 
+0003135351 00000 n 
+0003133324 00000 n 
+0003138594 00000 n 
+0003135844 00000 n 
+0003136083 00000 n 
+0003136542 00000 n 
+0003138151 00000 n 
+0003141368 00000 n 
+0003141893 00000 n 
+0003141222 00000 n 
+0003138858 00000 n 
+0003141829 00000 n 
+0003141599 00000 n 
+0003144470 00000 n 
+0003144162 00000 n 
+0003142093 00000 n 
+0003144278 00000 n 
+0003144406 00000 n 
+0005325108 00000 n 
+0003146802 00000 n 
+0003147316 00000 n 
+0003146665 00000 n 
+0003144642 00000 n 
+0003146996 00000 n 
+0003147124 00000 n 
+0003147252 00000 n 
+0003149797 00000 n 
+0003149361 00000 n 
+0003147516 00000 n 
+0003149477 00000 n 
+0003149605 00000 n 
+0003149733 00000 n 
+0003152233 00000 n 
+0003151925 00000 n 
+0003149955 00000 n 
+0003152041 00000 n 
+0003152169 00000 n 
+0003154988 00000 n 
+0003154424 00000 n 
+0003152405 00000 n 
+0003154540 00000 n 
+0003154668 00000 n 
+0003154796 00000 n 
+0003154924 00000 n 
+0003157211 00000 n 
+0003157031 00000 n 
+0003155160 00000 n 
+0003157147 00000 n 
+0003160065 00000 n 
+0003159630 00000 n 
+0003157355 00000 n 
+0003159746 00000 n 
+0003159874 00000 n 
+0003160001 00000 n 
+0005325234 00000 n 
+0003162708 00000 n 
+0003162272 00000 n 
+0003160223 00000 n 
+0003162388 00000 n 
+0003162516 00000 n 
+0003162644 00000 n 
+0003164966 00000 n 
+0003164658 00000 n 
+0003162951 00000 n 
+0003164774 00000 n 
+0003164902 00000 n 
+0003208943 00000 n 
+0003209092 00000 n 
+0003168769 00000 n 
+0003167639 00000 n 
+0003167459 00000 n 
+0003165110 00000 n 
+0003167575 00000 n 
+0003230441 00000 n 
+0003209817 00000 n 
+0003168623 00000 n 
+0003167783 00000 n 
+0003209241 00000 n 
+0003209369 00000 n 
+0003209497 00000 n 
+0003209625 00000 n 
+0003209753 00000 n 
+0003170429 00000 n 
+0003170561 00000 n 
+0003170609 00000 n 
+0003171074 00000 n 
+0003171097 00000 n 
+0003171317 00000 n 
+0003171673 00000 n 
+0003171769 00000 n 
+0003270753 00000 n 
+0003212196 00000 n 
+0003212928 00000 n 
+0003212059 00000 n 
+0003209963 00000 n 
+0003212353 00000 n 
+0003212481 00000 n 
+0003212609 00000 n 
+0003212736 00000 n 
+0003212864 00000 n 
+0003216124 00000 n 
+0003215555 00000 n 
+0003213100 00000 n 
+0003215672 00000 n 
+0003215801 00000 n 
+0003215930 00000 n 
+0003216059 00000 n 
+0005325360 00000 n 
+0003219117 00000 n 
+0003218276 00000 n 
+0003216268 00000 n 
+0003218396 00000 n 
+0003218527 00000 n 
+0003218658 00000 n 
+0003218789 00000 n 
+0003218920 00000 n 
+0003219051 00000 n 
+0003222413 00000 n 
+0003221240 00000 n 
+0003219276 00000 n 
+0003221360 00000 n 
+0003221491 00000 n 
+0003221622 00000 n 
+0003221687 00000 n 
+0003221753 00000 n 
+0003221819 00000 n 
+0003221885 00000 n 
+0003221951 00000 n 
+0003222017 00000 n 
+0003222083 00000 n 
+0003222149 00000 n 
+0003222215 00000 n 
+0003222281 00000 n 
+0003222347 00000 n 
+0003226090 00000 n 
+0003225246 00000 n 
+0003222572 00000 n 
+0003225366 00000 n 
+0003225432 00000 n 
+0003225498 00000 n 
+0003225564 00000 n 
+0003225630 00000 n 
+0003225696 00000 n 
+0003225762 00000 n 
+0003225893 00000 n 
+0003226024 00000 n 
+0003228816 00000 n 
+0003271463 00000 n 
+0003229709 00000 n 
+0003228664 00000 n 
+0003226249 00000 n 
+0003229120 00000 n 
+0003229251 00000 n 
+0003229382 00000 n 
+0003229513 00000 n 
+0003229644 00000 n 
+0003228968 00000 n 
+0003387147 00000 n 
+0003270818 00000 n 
+0003230321 00000 n 
+0003229896 00000 n 
+0003270622 00000 n 
+0003232395 00000 n 
+0003232528 00000 n 
+0003232577 00000 n 
+0003233042 00000 n 
+0003233066 00000 n 
+0003233287 00000 n 
+0003233645 00000 n 
+0003233742 00000 n 
+0003387213 00000 n 
+0003271343 00000 n 
+0003270951 00000 n 
+0003387016 00000 n 
+0005325492 00000 n 
+0003386826 00000 n 
+0003389048 00000 n 
+0003389656 00000 n 
+0003388906 00000 n 
+0003387363 00000 n 
+0003389198 00000 n 
+0003389459 00000 n 
+0003389590 00000 n 
+0003392651 00000 n 
+0003392365 00000 n 
+0003394232 00000 n 
+0003392223 00000 n 
+0003389787 00000 n 
+0003392520 00000 n 
+0003392717 00000 n 
+0003392783 00000 n 
+0003392849 00000 n 
+0003392915 00000 n 
+0003392981 00000 n 
+0003393047 00000 n 
+0003393113 00000 n 
+0003393244 00000 n 
+0003393310 00000 n 
+0003393376 00000 n 
+0003393442 00000 n 
+0003393508 00000 n 
+0003393574 00000 n 
+0003393640 00000 n 
+0003393706 00000 n 
+0003393772 00000 n 
+0003393838 00000 n 
+0003393904 00000 n 
+0003394035 00000 n 
+0003394166 00000 n 
+0003396443 00000 n 
+0003396126 00000 n 
+0003394404 00000 n 
+0003396246 00000 n 
+0003396377 00000 n 
+0003398127 00000 n 
+0003397941 00000 n 
+0003396602 00000 n 
+0003398061 00000 n 
+0003400538 00000 n 
+0003401300 00000 n 
+0003400386 00000 n 
+0003398272 00000 n 
+0003400841 00000 n 
+0003400972 00000 n 
+0003400690 00000 n 
+0003401103 00000 n 
+0003401234 00000 n 
+0003404147 00000 n 
+0003403699 00000 n 
+0003401473 00000 n 
+0003403819 00000 n 
+0003403950 00000 n 
+0003404081 00000 n 
+0005325625 00000 n 
+0003406379 00000 n 
+0003406193 00000 n 
+0003404306 00000 n 
+0003406313 00000 n 
+0003408721 00000 n 
+0003409166 00000 n 
+0003409712 00000 n 
+0003408559 00000 n 
+0003406510 00000 n 
+0003409384 00000 n 
+0003409515 00000 n 
+0003409646 00000 n 
+0003408943 00000 n 
+0003412780 00000 n 
+0003412978 00000 n 
+0003413156 00000 n 
+0003413338 00000 n 
+0003413545 00000 n 
+0003413751 00000 n 
+0003412623 00000 n 
+0003414272 00000 n 
+0003412421 00000 n 
+0003409984 00000 n 
+0003413946 00000 n 
+0003414076 00000 n 
+0003414141 00000 n 
+0003414206 00000 n 
+0003416835 00000 n 
+0003416583 00000 n 
+0003414473 00000 n 
+0003416703 00000 n 
+0003416769 00000 n 
+0003419684 00000 n 
+0003419366 00000 n 
+0003416966 00000 n 
+0003419486 00000 n 
+0003419552 00000 n 
+0003419618 00000 n 
+0003422329 00000 n 
+0003423501 00000 n 
+0003422177 00000 n 
+0003419815 00000 n 
+0003422776 00000 n 
+0003422907 00000 n 
+0003422973 00000 n 
+0003423039 00000 n 
+0003423105 00000 n 
+0003423171 00000 n 
+0003423237 00000 n 
+0003423303 00000 n 
+0003423369 00000 n 
+0003423435 00000 n 
+0003422552 00000 n 
+0005325758 00000 n 
+0003425762 00000 n 
+0003425968 00000 n 
+0003426148 00000 n 
+0003426809 00000 n 
+0003425600 00000 n 
+0003423687 00000 n 
+0003426351 00000 n 
+0003426482 00000 n 
+0003426613 00000 n 
+0003426743 00000 n 
+0003428489 00000 n 
+0003428172 00000 n 
+0003426982 00000 n 
+0003428292 00000 n 
+0003428423 00000 n 
+0003429864 00000 n 
+0003429678 00000 n 
+0003428620 00000 n 
+0003429798 00000 n 
+0003431127 00000 n 
+0003430941 00000 n 
+0003429967 00000 n 
+0003431061 00000 n 
+0003433233 00000 n 
+0003432786 00000 n 
+0003431244 00000 n 
+0003432906 00000 n 
+0003433167 00000 n 
+0003434910 00000 n 
+0003442902 00000 n 
+0003434790 00000 n 
+0003433378 00000 n 
+0003442707 00000 n 
+0003442837 00000 n 
+0005325891 00000 n 
+0003441792 00000 n 
+0003445586 00000 n 
+0003445138 00000 n 
+0003443142 00000 n 
+0003445258 00000 n 
+0003445389 00000 n 
+0003445520 00000 n 
+0003448334 00000 n 
+0003447887 00000 n 
+0003445717 00000 n 
+0003448007 00000 n 
+0003448138 00000 n 
+0003448269 00000 n 
+0003451083 00000 n 
+0003450635 00000 n 
+0003448493 00000 n 
+0003450755 00000 n 
+0003450886 00000 n 
+0003451017 00000 n 
+0003453681 00000 n 
+0003453234 00000 n 
+0003451214 00000 n 
+0003453354 00000 n 
+0003453485 00000 n 
+0003453615 00000 n 
+0003459011 00000 n 
+0003456555 00000 n 
+0003456238 00000 n 
+0003453798 00000 n 
+0003456358 00000 n 
+0003456489 00000 n 
+0003459633 00000 n 
+0003458859 00000 n 
+0003456686 00000 n 
+0003459306 00000 n 
+0003459159 00000 n 
+0003459436 00000 n 
+0003459567 00000 n 
+0005326024 00000 n 
+0003462095 00000 n 
+0003465117 00000 n 
+0003462721 00000 n 
+0003461953 00000 n 
+0003459764 00000 n 
+0003462262 00000 n 
+0003462393 00000 n 
+0003462524 00000 n 
+0003462655 00000 n 
+0003465827 00000 n 
+0003464965 00000 n 
+0003462950 00000 n 
+0003465499 00000 n 
+0003465308 00000 n 
+0003465630 00000 n 
+0003465761 00000 n 
+0003467882 00000 n 
+0003467696 00000 n 
+0003465972 00000 n 
+0003467816 00000 n 
+0003470100 00000 n 
+0003470578 00000 n 
+0003474956 00000 n 
+0003471248 00000 n 
+0003469928 00000 n 
+0003467999 00000 n 
+0003471051 00000 n 
+0003471182 00000 n 
+0003470339 00000 n 
+0003470814 00000 n 
+0003476487 00000 n 
+0003474814 00000 n 
+0003471435 00000 n 
+0003475110 00000 n 
+0003475241 00000 n 
+0003475372 00000 n 
+0003475438 00000 n 
+0003475502 00000 n 
+0003475568 00000 n 
+0003475634 00000 n 
+0003475700 00000 n 
+0003475766 00000 n 
+0003475830 00000 n 
+0003475896 00000 n 
+0003475961 00000 n 
+0003476027 00000 n 
+0003476092 00000 n 
+0003476158 00000 n 
+0003476224 00000 n 
+0003476290 00000 n 
+0003476421 00000 n 
+0003478413 00000 n 
+0003478096 00000 n 
+0003476687 00000 n 
+0003478216 00000 n 
+0003478347 00000 n 
+0005326157 00000 n 
+0003480100 00000 n 
+0003479914 00000 n 
+0003478615 00000 n 
+0003480034 00000 n 
+0003482244 00000 n 
+0003481795 00000 n 
+0003480316 00000 n 
+0003481915 00000 n 
+0003482046 00000 n 
+0003482112 00000 n 
+0003482178 00000 n 
+0003483399 00000 n 
+0003483213 00000 n 
+0003482375 00000 n 
+0003483333 00000 n 
+0003484781 00000 n 
+0003485136 00000 n 
+0003484639 00000 n 
+0003483516 00000 n 
+0003484940 00000 n 
+0003485006 00000 n 
+0003485071 00000 n 
+0004022620 00000 n 
+0003486254 00000 n 
+0003486068 00000 n 
+0003485267 00000 n 
+0003486188 00000 n 
+0003488693 00000 n 
+0003488112 00000 n 
+0003486371 00000 n 
+0003488232 00000 n 
+0003488298 00000 n 
+0003488364 00000 n 
+0003488495 00000 n 
+0003488561 00000 n 
+0003488627 00000 n 
+0005326290 00000 n 
+0003490826 00000 n 
+0003490640 00000 n 
+0003488824 00000 n 
+0003490760 00000 n 
+0003492647 00000 n 
+0003492329 00000 n 
+0003491028 00000 n 
+0003492449 00000 n 
+0003492515 00000 n 
+0003492581 00000 n 
+0003493679 00000 n 
+0003493493 00000 n 
+0003492778 00000 n 
+0003493613 00000 n 
+0003495300 00000 n 
+0003494983 00000 n 
+0003493782 00000 n 
+0003495103 00000 n 
+0003495234 00000 n 
+0003498045 00000 n 
+0003497466 00000 n 
+0003495445 00000 n 
+0003497586 00000 n 
+0003497717 00000 n 
+0003497848 00000 n 
+0003497979 00000 n 
+0003499408 00000 n 
+0003499222 00000 n 
+0003498261 00000 n 
+0003499342 00000 n 
+0005326423 00000 n 
+0003501431 00000 n 
+0003500854 00000 n 
+0003499525 00000 n 
+0003500974 00000 n 
+0003501235 00000 n 
+0003501365 00000 n 
+0003503683 00000 n 
+0003503881 00000 n 
+0003507256 00000 n 
+0003504411 00000 n 
+0003503531 00000 n 
+0003501562 00000 n 
+0003504083 00000 n 
+0003504214 00000 n 
+0003504345 00000 n 
+0003507430 00000 n 
+0003507683 00000 n 
+0003507104 00000 n 
+0003504612 00000 n 
+0003507617 00000 n 
+0003510227 00000 n 
+0003509910 00000 n 
+0003507842 00000 n 
+0003510030 00000 n 
+0003510161 00000 n 
+0003512354 00000 n 
+0003512525 00000 n 
+0003512706 00000 n 
+0003512879 00000 n 
+0003513049 00000 n 
+0003513219 00000 n 
+0003513588 00000 n 
+0003512162 00000 n 
+0003510372 00000 n 
+0003513392 00000 n 
+0003513522 00000 n 
+0003515160 00000 n 
+0003514974 00000 n 
+0003513789 00000 n 
+0003515094 00000 n 
+0005326556 00000 n 
+0003516606 00000 n 
+0003516797 00000 n 
+0003517166 00000 n 
+0003516454 00000 n 
+0003515263 00000 n 
+0003516969 00000 n 
+0003517100 00000 n 
+0003519076 00000 n 
+0003518926 00000 n 
+0003519482 00000 n 
+0003518774 00000 n 
+0003517325 00000 n 
+0003519286 00000 n 
+0003519417 00000 n 
+0003520543 00000 n 
+0003520608 00000 n 
+0003520293 00000 n 
+0003519683 00000 n 
+0003520413 00000 n 
+0003521013 00000 n 
+0003520827 00000 n 
+0003520725 00000 n 
+0003520947 00000 n 
+0003523136 00000 n 
+0003522689 00000 n 
+0003521056 00000 n 
+0003522809 00000 n 
+0003523070 00000 n 
+0003525906 00000 n 
+0003526554 00000 n 
+0003525754 00000 n 
+0003523253 00000 n 
+0003526357 00000 n 
+0003526488 00000 n 
+0003526131 00000 n 
+0005326689 00000 n 
+0003529573 00000 n 
+0003529125 00000 n 
+0003526769 00000 n 
+0003529245 00000 n 
+0003529376 00000 n 
+0003529507 00000 n 
+0003532710 00000 n 
+0003532263 00000 n 
+0003529718 00000 n 
+0003532383 00000 n 
+0003532514 00000 n 
+0003532644 00000 n 
+0003535645 00000 n 
+0003535196 00000 n 
+0003532855 00000 n 
+0003535316 00000 n 
+0003535447 00000 n 
+0003535513 00000 n 
+0003535579 00000 n 
+0003538402 00000 n 
+0003537953 00000 n 
+0003535790 00000 n 
+0003538073 00000 n 
+0003538139 00000 n 
+0003538205 00000 n 
+0003538336 00000 n 
+0003541156 00000 n 
+0003541550 00000 n 
+0003541014 00000 n 
+0003538590 00000 n 
+0003541353 00000 n 
+0003541484 00000 n 
+0003544156 00000 n 
+0003543708 00000 n 
+0003541751 00000 n 
+0003543828 00000 n 
+0003543959 00000 n 
+0003544090 00000 n 
+0005326822 00000 n 
+0003547154 00000 n 
+0003546246 00000 n 
+0003544301 00000 n 
+0003546366 00000 n 
+0003546497 00000 n 
+0003546628 00000 n 
+0003546758 00000 n 
+0003546824 00000 n 
+0003546890 00000 n 
+0003546956 00000 n 
+0003547022 00000 n 
+0003547088 00000 n 
+0003549884 00000 n 
+0003549174 00000 n 
+0003547285 00000 n 
+0003549294 00000 n 
+0003549360 00000 n 
+0003549426 00000 n 
+0003549490 00000 n 
+0003549556 00000 n 
+0003549687 00000 n 
+0003549818 00000 n 
+0003551865 00000 n 
+0003551287 00000 n 
+0003550043 00000 n 
+0003551407 00000 n 
+0003551668 00000 n 
+0003551799 00000 n 
+0003555064 00000 n 
+0003554352 00000 n 
+0003552039 00000 n 
+0003554472 00000 n 
+0003554603 00000 n 
+0003554734 00000 n 
+0003554800 00000 n 
+0003554866 00000 n 
+0003554932 00000 n 
+0003554998 00000 n 
+0003558361 00000 n 
+0003557583 00000 n 
+0003555236 00000 n 
+0003557703 00000 n 
+0003557834 00000 n 
+0003557900 00000 n 
+0003557966 00000 n 
+0003558097 00000 n 
+0003558163 00000 n 
+0003558229 00000 n 
+0003558295 00000 n 
+0003560683 00000 n 
+0003560366 00000 n 
+0003558618 00000 n 
+0003560486 00000 n 
+0003560617 00000 n 
+0005326955 00000 n 
+0003563703 00000 n 
+0003563124 00000 n 
+0003560828 00000 n 
+0003563244 00000 n 
+0003563375 00000 n 
+0003563506 00000 n 
+0003563571 00000 n 
+0003563637 00000 n 
+0003566733 00000 n 
+0003566415 00000 n 
+0003563919 00000 n 
+0003566535 00000 n 
+0003566601 00000 n 
+0003566667 00000 n 
+0003569412 00000 n 
+0003568962 00000 n 
+0003566878 00000 n 
+0003569082 00000 n 
+0003569148 00000 n 
+0003569214 00000 n 
+0003569280 00000 n 
+0003569346 00000 n 
+0003572373 00000 n 
+0003571794 00000 n 
+0003569614 00000 n 
+0003571914 00000 n 
+0003572044 00000 n 
+0003572175 00000 n 
+0003572241 00000 n 
+0003572307 00000 n 
+0003575217 00000 n 
+0003574371 00000 n 
+0003572518 00000 n 
+0003574491 00000 n 
+0003574557 00000 n 
+0003574623 00000 n 
+0003574689 00000 n 
+0003574755 00000 n 
+0003574821 00000 n 
+0003574887 00000 n 
+0003574953 00000 n 
+0003575019 00000 n 
+0003575085 00000 n 
+0003575151 00000 n 
 0003578221 00000 n 
-0003580108 00000 n 
-0003580174 00000 n 
-0003580240 00000 n 
-0003580306 00000 n 
-0003580372 00000 n 
-0003582519 00000 n 
-0003582268 00000 n 
-0003580541 00000 n 
-0003582388 00000 n 
-0003583913 00000 n 
-0003584090 00000 n 
-0003584549 00000 n 
-0003583751 00000 n 
-0003582650 00000 n 
-0003584483 00000 n 
-0003584287 00000 n 
-0003584954 00000 n 
-0003584768 00000 n 
-0003584666 00000 n 
-0003584888 00000 n 
-0004774546 00000 n 
-0003586930 00000 n 
-0003587248 00000 n 
-0003589813 00000 n 
-0003587617 00000 n 
-0003586768 00000 n 
-0003584997 00000 n 
-0003587420 00000 n 
-0003587551 00000 n 
-0003587089 00000 n 
-0003589961 00000 n 
-0003590179 00000 n 
-0003589661 00000 n 
-0003587748 00000 n 
-0003590113 00000 n 
-0003592432 00000 n 
-0003592646 00000 n 
-0003592290 00000 n 
-0003590296 00000 n 
-0003592580 00000 n 
-0003595045 00000 n 
-0003595270 00000 n 
-0003594903 00000 n 
-0003592763 00000 n 
-0003595204 00000 n 
-0003596053 00000 n 
-0003595867 00000 n 
-0003595387 00000 n 
-0003595987 00000 n 
-0003596444 00000 n 
-0003596258 00000 n 
-0003596156 00000 n 
-0003596378 00000 n 
-0004774679 00000 n 
-0003599335 00000 n 
-0003599487 00000 n 
-0003599639 00000 n 
-0003599790 00000 n 
-0003599941 00000 n 
-0003600094 00000 n 
-0003600247 00000 n 
-0003600400 00000 n 
-0003600553 00000 n 
-0003600705 00000 n 
-0003600857 00000 n 
-0003601010 00000 n 
-0003601163 00000 n 
-0003601315 00000 n 
-0003601468 00000 n 
-0003601621 00000 n 
-0003601774 00000 n 
-0003601927 00000 n 
-0003602079 00000 n 
-0003602232 00000 n 
-0003602385 00000 n 
-0003602538 00000 n 
-0003602691 00000 n 
-0003602844 00000 n 
-0003602997 00000 n 
-0003603149 00000 n 
-0003603302 00000 n 
-0003603453 00000 n 
-0003603605 00000 n 
-0003603757 00000 n 
-0003603909 00000 n 
-0003604061 00000 n 
-0003604214 00000 n 
-0003604367 00000 n 
-0003604520 00000 n 
-0003604673 00000 n 
-0003604826 00000 n 
-0003604979 00000 n 
-0003605132 00000 n 
-0003605285 00000 n 
-0003605438 00000 n 
-0003605591 00000 n 
-0003605744 00000 n 
-0003605897 00000 n 
-0003606050 00000 n 
-0003606202 00000 n 
-0003606355 00000 n 
-0003606507 00000 n 
-0003606660 00000 n 
-0003606813 00000 n 
-0003606966 00000 n 
-0003607118 00000 n 
-0003607270 00000 n 
-0003607421 00000 n 
-0003607574 00000 n 
-0003607725 00000 n 
-0003607877 00000 n 
-0003608028 00000 n 
-0003608180 00000 n 
-0003608332 00000 n 
-0003608485 00000 n 
-0003608638 00000 n 
-0003608791 00000 n 
-0003608944 00000 n 
-0003609096 00000 n 
-0003609249 00000 n 
-0003609402 00000 n 
-0003609555 00000 n 
-0003609708 00000 n 
-0003609861 00000 n 
-0003610011 00000 n 
-0003610164 00000 n 
-0003610317 00000 n 
-0003610470 00000 n 
-0003610623 00000 n 
-0003610775 00000 n 
-0003610926 00000 n 
-0003611078 00000 n 
-0003611231 00000 n 
-0003611383 00000 n 
-0003611536 00000 n 
-0003611689 00000 n 
-0003611842 00000 n 
-0003611995 00000 n 
-0003612147 00000 n 
-0003612299 00000 n 
-0003612451 00000 n 
-0003612603 00000 n 
-0003612756 00000 n 
-0003612909 00000 n 
-0003613061 00000 n 
-0003613214 00000 n 
-0003613367 00000 n 
-0003613520 00000 n 
-0003613673 00000 n 
-0003613825 00000 n 
-0003613978 00000 n 
-0003614131 00000 n 
-0003614284 00000 n 
-0003614436 00000 n 
-0003614588 00000 n 
-0003614740 00000 n 
-0003614892 00000 n 
-0003615044 00000 n 
-0003615194 00000 n 
-0003615346 00000 n 
-0003615498 00000 n 
-0003615650 00000 n 
-0003615800 00000 n 
-0003615950 00000 n 
-0003616100 00000 n 
-0003616252 00000 n 
-0003616404 00000 n 
-0003616554 00000 n 
-0003616704 00000 n 
-0003616855 00000 n 
-0003617007 00000 n 
-0003617159 00000 n 
-0003617311 00000 n 
-0003617463 00000 n 
-0003617615 00000 n 
-0003617768 00000 n 
-0003617921 00000 n 
-0003618074 00000 n 
-0003618225 00000 n 
-0003618378 00000 n 
-0003618531 00000 n 
-0003618683 00000 n 
-0003618836 00000 n 
-0003618989 00000 n 
-0003622226 00000 n 
-0003619208 00000 n 
-0003597903 00000 n 
-0003596487 00000 n 
-0003619142 00000 n 
-0003622378 00000 n 
-0003622531 00000 n 
-0003622684 00000 n 
-0003622837 00000 n 
-0003622988 00000 n 
-0003623140 00000 n 
-0003623292 00000 n 
-0003623444 00000 n 
-0003623597 00000 n 
-0003623750 00000 n 
-0003623903 00000 n 
-0003624055 00000 n 
-0003624207 00000 n 
-0003624359 00000 n 
-0003624511 00000 n 
-0003624664 00000 n 
-0003624817 00000 n 
-0003624970 00000 n 
-0003625123 00000 n 
-0003625275 00000 n 
-0003625427 00000 n 
-0003625580 00000 n 
-0003625732 00000 n 
-0003625883 00000 n 
-0003626034 00000 n 
-0003626187 00000 n 
-0003626340 00000 n 
-0003626493 00000 n 
-0003626646 00000 n 
-0003626798 00000 n 
-0003626950 00000 n 
-0003627102 00000 n 
-0003627255 00000 n 
-0003627406 00000 n 
-0003627558 00000 n 
-0003627709 00000 n 
-0003627862 00000 n 
-0003628014 00000 n 
-0003628167 00000 n 
-0003628319 00000 n 
-0003628471 00000 n 
-0003628624 00000 n 
-0003628777 00000 n 
-0003628928 00000 n 
-0003629081 00000 n 
-0003629234 00000 n 
-0003629387 00000 n 
-0003629538 00000 n 
-0003629687 00000 n 
-0003629839 00000 n 
-0003629991 00000 n 
-0003630143 00000 n 
-0003630296 00000 n 
-0003630449 00000 n 
-0003630602 00000 n 
-0003630755 00000 n 
-0003630908 00000 n 
-0003631061 00000 n 
-0003631214 00000 n 
-0003631367 00000 n 
-0003631520 00000 n 
-0003631673 00000 n 
-0003631826 00000 n 
-0003631979 00000 n 
-0003632132 00000 n 
-0003632284 00000 n 
-0003632436 00000 n 
-0003632588 00000 n 
-0003632740 00000 n 
-0003632889 00000 n 
-0003633041 00000 n 
-0003633194 00000 n 
-0003633347 00000 n 
-0003633499 00000 n 
-0003633650 00000 n 
-0003633802 00000 n 
-0003633954 00000 n 
-0003634107 00000 n 
-0003634260 00000 n 
-0003634413 00000 n 
-0003634566 00000 n 
-0003634719 00000 n 
-0003634872 00000 n 
-0003635024 00000 n 
-0003635173 00000 n 
-0003635326 00000 n 
-0003635479 00000 n 
-0003635632 00000 n 
-0003635785 00000 n 
-0003635938 00000 n 
-0003636091 00000 n 
-0003636243 00000 n 
-0003636395 00000 n 
-0003636547 00000 n 
-0003636700 00000 n 
-0003636853 00000 n 
-0003640508 00000 n 
-0003637072 00000 n 
-0003621124 00000 n 
-0003619325 00000 n 
-0003637006 00000 n 
-0003640661 00000 n 
-0003640814 00000 n 
-0003640966 00000 n 
-0003641118 00000 n 
-0003641270 00000 n 
-0003641422 00000 n 
-0003641574 00000 n 
-0003641722 00000 n 
-0003641875 00000 n 
-0003642027 00000 n 
-0003642179 00000 n 
-0003642332 00000 n 
-0003642483 00000 n 
-0003642636 00000 n 
-0003642787 00000 n 
-0003642940 00000 n 
-0003643093 00000 n 
-0003643246 00000 n 
-0003643398 00000 n 
-0003643551 00000 n 
-0003643704 00000 n 
-0003643857 00000 n 
-0003644010 00000 n 
-0003644163 00000 n 
-0003644316 00000 n 
-0003644468 00000 n 
-0003644620 00000 n 
-0003644772 00000 n 
-0003644925 00000 n 
-0003645078 00000 n 
-0003645231 00000 n 
-0003645384 00000 n 
-0003645536 00000 n 
-0003645688 00000 n 
-0003645841 00000 n 
-0003645994 00000 n 
-0003646146 00000 n 
-0003646298 00000 n 
-0003646450 00000 n 
-0003646602 00000 n 
-0003646754 00000 n 
-0003646906 00000 n 
-0003647058 00000 n 
-0003647211 00000 n 
-0003647364 00000 n 
-0003647517 00000 n 
-0003647669 00000 n 
-0003647820 00000 n 
-0003647973 00000 n 
-0003648126 00000 n 
-0003648279 00000 n 
-0003648432 00000 n 
-0003648584 00000 n 
-0003648735 00000 n 
-0003648888 00000 n 
-0003649041 00000 n 
-0003649194 00000 n 
-0003649346 00000 n 
-0003649499 00000 n 
-0003649652 00000 n 
-0003649804 00000 n 
-0003649957 00000 n 
-0003650110 00000 n 
-0003650263 00000 n 
-0003650416 00000 n 
-0003650569 00000 n 
-0003650722 00000 n 
-0003650875 00000 n 
-0003651028 00000 n 
-0003651181 00000 n 
-0003651334 00000 n 
-0003651487 00000 n 
-0003651640 00000 n 
-0003651793 00000 n 
-0003651946 00000 n 
-0003652099 00000 n 
-0003652252 00000 n 
-0003652405 00000 n 
-0003652558 00000 n 
-0003652710 00000 n 
-0003652863 00000 n 
-0003653015 00000 n 
-0003653167 00000 n 
-0003653320 00000 n 
-0003653472 00000 n 
-0003653625 00000 n 
-0003653778 00000 n 
-0003653931 00000 n 
-0003654084 00000 n 
-0003654237 00000 n 
-0003654390 00000 n 
-0003654543 00000 n 
-0003654696 00000 n 
-0003654849 00000 n 
-0003655002 00000 n 
-0003655155 00000 n 
-0003655308 00000 n 
-0003655461 00000 n 
-0003655612 00000 n 
-0003655765 00000 n 
-0003655917 00000 n 
-0003656069 00000 n 
-0003656221 00000 n 
-0003656374 00000 n 
-0003656527 00000 n 
-0003656680 00000 n 
-0003656833 00000 n 
-0003656986 00000 n 
-0003657139 00000 n 
-0003657292 00000 n 
-0003657444 00000 n 
-0003657596 00000 n 
-0003657747 00000 n 
-0003657899 00000 n 
-0003658052 00000 n 
-0003658205 00000 n 
-0003658358 00000 n 
-0003658511 00000 n 
-0003658664 00000 n 
-0003658817 00000 n 
-0003658970 00000 n 
-0003659123 00000 n 
-0003659276 00000 n 
-0003659429 00000 n 
-0003659581 00000 n 
-0003659734 00000 n 
-0003659887 00000 n 
-0003660040 00000 n 
-0003660192 00000 n 
-0003660343 00000 n 
-0003660495 00000 n 
-0003660647 00000 n 
-0003660799 00000 n 
-0003660952 00000 n 
-0003661105 00000 n 
-0003661258 00000 n 
-0003661411 00000 n 
-0003661564 00000 n 
-0003661717 00000 n 
-0003661870 00000 n 
-0003662022 00000 n 
-0003662175 00000 n 
-0003662328 00000 n 
-0003665354 00000 n 
-0003665506 00000 n 
-0003665658 00000 n 
-0003665809 00000 n 
-0003665961 00000 n 
-0003666112 00000 n 
-0003666265 00000 n 
-0003666418 00000 n 
-0003666571 00000 n 
-0003662547 00000 n 
-0003638936 00000 n 
-0003637217 00000 n 
-0003662481 00000 n 
-0003666724 00000 n 
-0003666877 00000 n 
-0003667030 00000 n 
-0003667183 00000 n 
-0003667336 00000 n 
-0003667487 00000 n 
-0003667640 00000 n 
-0003667793 00000 n 
-0003667945 00000 n 
-0003668097 00000 n 
-0003668249 00000 n 
-0003668402 00000 n 
-0003668555 00000 n 
-0003668707 00000 n 
-0003668860 00000 n 
-0003669013 00000 n 
-0003669166 00000 n 
-0003669318 00000 n 
-0003669470 00000 n 
-0003669623 00000 n 
-0003669775 00000 n 
-0003669928 00000 n 
-0003670080 00000 n 
-0003670233 00000 n 
-0003670386 00000 n 
-0003670539 00000 n 
-0003670691 00000 n 
-0003670842 00000 n 
-0003670994 00000 n 
-0003671147 00000 n 
-0003671300 00000 n 
-0003671453 00000 n 
-0003671606 00000 n 
-0003671759 00000 n 
-0003671911 00000 n 
-0003672064 00000 n 
-0003672217 00000 n 
-0003672370 00000 n 
-0003672523 00000 n 
-0003672676 00000 n 
-0003672829 00000 n 
-0003672982 00000 n 
-0003673134 00000 n 
-0003673286 00000 n 
-0003673438 00000 n 
-0003673591 00000 n 
-0003673744 00000 n 
-0003673897 00000 n 
-0003674050 00000 n 
-0003674203 00000 n 
-0003674356 00000 n 
-0003674508 00000 n 
-0003674661 00000 n 
-0003674814 00000 n 
-0003674967 00000 n 
-0003675120 00000 n 
-0003675273 00000 n 
-0003675425 00000 n 
-0003675578 00000 n 
-0003675731 00000 n 
-0003675884 00000 n 
-0003676037 00000 n 
-0003676190 00000 n 
-0003676342 00000 n 
-0003676494 00000 n 
-0003676645 00000 n 
-0003676798 00000 n 
-0003676951 00000 n 
-0003677104 00000 n 
-0003677257 00000 n 
-0003677410 00000 n 
-0003677563 00000 n 
-0003677716 00000 n 
-0003677869 00000 n 
-0003678022 00000 n 
-0003678174 00000 n 
-0003678326 00000 n 
-0003678478 00000 n 
-0003678630 00000 n 
-0003678781 00000 n 
-0003678934 00000 n 
-0003679086 00000 n 
-0003679239 00000 n 
-0003679391 00000 n 
-0003679544 00000 n 
-0003679696 00000 n 
-0003679848 00000 n 
-0003679997 00000 n 
-0003680148 00000 n 
-0003680300 00000 n 
-0003680453 00000 n 
-0003680606 00000 n 
-0003680759 00000 n 
-0003680912 00000 n 
-0003681065 00000 n 
-0003681218 00000 n 
-0003684323 00000 n 
-0003681437 00000 n 
-0003664172 00000 n 
-0003662664 00000 n 
-0003681371 00000 n 
-0003684476 00000 n 
-0003684629 00000 n 
-0003684781 00000 n 
-0003684934 00000 n 
-0003685086 00000 n 
-0003685239 00000 n 
+0003577048 00000 n 
+0003575419 00000 n 
+0003577168 00000 n 
+0003577234 00000 n 
+0003577300 00000 n 
+0003577366 00000 n 
+0003577432 00000 n 
+0003577498 00000 n 
+0003577564 00000 n 
+0003577630 00000 n 
+0003577696 00000 n 
+0003577762 00000 n 
+0003577828 00000 n 
+0003577894 00000 n 
+0003577960 00000 n 
+0003578026 00000 n 
+0003578091 00000 n 
+0003578157 00000 n 
+0005327088 00000 n 
+0003581088 00000 n 
+0003580510 00000 n 
+0003578366 00000 n 
+0003580630 00000 n 
+0003580761 00000 n 
+0003580891 00000 n 
+0003581022 00000 n 
+0003583322 00000 n 
+0003583632 00000 n 
+0003584574 00000 n 
+0003583160 00000 n 
+0003581275 00000 n 
+0003583784 00000 n 
+0003583915 00000 n 
+0003583981 00000 n 
+0003584047 00000 n 
+0003584113 00000 n 
+0003584179 00000 n 
+0003584245 00000 n 
+0003584311 00000 n 
+0003584377 00000 n 
+0003584508 00000 n 
+0003583477 00000 n 
+0003586670 00000 n 
+0003589471 00000 n 
+0003587283 00000 n 
+0003586528 00000 n 
+0003584776 00000 n 
+0003586824 00000 n 
+0003586955 00000 n 
+0003587086 00000 n 
+0003587217 00000 n 
+0003589625 00000 n 
+0003589979 00000 n 
+0003589319 00000 n 
+0003587428 00000 n 
+0003589782 00000 n 
+0003589913 00000 n 
+0003592988 00000 n 
+0003592409 00000 n 
+0003590167 00000 n 
+0003592529 00000 n 
+0003592660 00000 n 
+0003592791 00000 n 
+0003592922 00000 n 
+0003595757 00000 n 
+0003595374 00000 n 
+0003593190 00000 n 
+0003595494 00000 n 
+0003595625 00000 n 
+0003595691 00000 n 
+0005327221 00000 n 
+0003598671 00000 n 
+0003598287 00000 n 
+0003595902 00000 n 
+0003598407 00000 n 
+0003598473 00000 n 
+0003598539 00000 n 
+0003598605 00000 n 
+0003600698 00000 n 
+0003600853 00000 n 
+0003601333 00000 n 
+0003600546 00000 n 
+0003598802 00000 n 
+0003601005 00000 n 
+0003601136 00000 n 
+0003601267 00000 n 
+0003603715 00000 n 
+0003603398 00000 n 
+0003601464 00000 n 
+0003603518 00000 n 
+0003603649 00000 n 
+0003606149 00000 n 
+0003606373 00000 n 
+0003606007 00000 n 
+0003603917 00000 n 
+0003606307 00000 n 
+0003609029 00000 n 
+0003609095 00000 n 
+0003608778 00000 n 
+0003606504 00000 n 
+0003608898 00000 n 
+0003611568 00000 n 
+0003610989 00000 n 
+0003609254 00000 n 
+0003611109 00000 n 
+0003611240 00000 n 
+0003611371 00000 n 
+0003611502 00000 n 
+0005327354 00000 n 
+0003613853 00000 n 
+0003613667 00000 n 
+0003611713 00000 n 
+0003613787 00000 n 
+0003616813 00000 n 
+0003616233 00000 n 
+0003613956 00000 n 
+0003616353 00000 n 
+0003616484 00000 n 
+0003616549 00000 n 
+0003616615 00000 n 
+0003616681 00000 n 
+0003616747 00000 n 
+0003618928 00000 n 
+0003619139 00000 n 
+0003619878 00000 n 
+0003618776 00000 n 
+0003617056 00000 n 
+0003619351 00000 n 
+0003619417 00000 n 
+0003619483 00000 n 
+0003619549 00000 n 
+0003619615 00000 n 
+0003619681 00000 n 
+0003619812 00000 n 
+0003620394 00000 n 
+0003620208 00000 n 
+0003620106 00000 n 
+0003620328 00000 n 
+0003622051 00000 n 
+0003622681 00000 n 
+0003621899 00000 n 
+0003620437 00000 n 
+0003622354 00000 n 
+0003622202 00000 n 
+0003622615 00000 n 
+0003625448 00000 n 
+0003625262 00000 n 
+0003622869 00000 n 
+0003625382 00000 n 
+0005327487 00000 n 
+0003628103 00000 n 
+0003627656 00000 n 
+0003625565 00000 n 
+0003627776 00000 n 
+0003627907 00000 n 
+0003628038 00000 n 
+0003630472 00000 n 
+0003630858 00000 n 
+0003630330 00000 n 
+0003628234 00000 n 
+0003630662 00000 n 
+0003630792 00000 n 
+0003633555 00000 n 
+0003633369 00000 n 
+0003631073 00000 n 
+0003633489 00000 n 
+0003636242 00000 n 
+0003636056 00000 n 
+0003633700 00000 n 
+0003636176 00000 n 
+0003638561 00000 n 
+0003638375 00000 n 
+0003636373 00000 n 
+0003638495 00000 n 
+0003641267 00000 n 
+0003641081 00000 n 
+0003638706 00000 n 
+0003641201 00000 n 
+0005327620 00000 n 
+0003643683 00000 n 
+0003643366 00000 n 
+0003641398 00000 n 
+0003643486 00000 n 
+0003643617 00000 n 
+0003645307 00000 n 
+0003644860 00000 n 
+0003643828 00000 n 
+0003644980 00000 n 
+0003645111 00000 n 
+0003645241 00000 n 
+0003647529 00000 n 
+0003647343 00000 n 
+0003645438 00000 n 
+0003647463 00000 n 
+0003649916 00000 n 
+0003649599 00000 n 
+0003647646 00000 n 
+0003649719 00000 n 
+0003649850 00000 n 
+0003652498 00000 n 
+0003652182 00000 n 
+0003650118 00000 n 
+0003652302 00000 n 
+0003652433 00000 n 
+0003655016 00000 n 
+0003655502 00000 n 
+0003654874 00000 n 
+0003652657 00000 n 
+0003655175 00000 n 
+0003655306 00000 n 
+0003655436 00000 n 
+0005327753 00000 n 
+0003658398 00000 n 
+0003658595 00000 n 
+0003658147 00000 n 
+0003655690 00000 n 
+0003658267 00000 n 
+0003658529 00000 n 
+0003660396 00000 n 
+0003659948 00000 n 
+0003658740 00000 n 
+0003660068 00000 n 
+0003660199 00000 n 
+0003660330 00000 n 
+0003662395 00000 n 
+0003661947 00000 n 
+0003660541 00000 n 
+0003662067 00000 n 
+0003662198 00000 n 
+0003662329 00000 n 
+0003664148 00000 n 
+0003663831 00000 n 
+0003662568 00000 n 
+0003663951 00000 n 
+0003664082 00000 n 
+0003664954 00000 n 
+0003664768 00000 n 
+0003664293 00000 n 
+0003664888 00000 n 
+0003665345 00000 n 
+0003665159 00000 n 
+0003665057 00000 n 
+0003665279 00000 n 
+0005327886 00000 n 
+0003667126 00000 n 
+0003666679 00000 n 
+0003665388 00000 n 
+0003666799 00000 n 
+0003667060 00000 n 
+0003669637 00000 n 
+0003669189 00000 n 
+0003667300 00000 n 
+0003669309 00000 n 
+0003669440 00000 n 
+0003669571 00000 n 
+0003672113 00000 n 
+0003671798 00000 n 
+0003669839 00000 n 
+0003671918 00000 n 
+0003672047 00000 n 
+0003674575 00000 n 
+0003674127 00000 n 
+0003672258 00000 n 
+0003674247 00000 n 
+0003674378 00000 n 
+0003674509 00000 n 
+0003676596 00000 n 
+0003676279 00000 n 
+0003674720 00000 n 
+0003676399 00000 n 
+0003676530 00000 n 
+0003679199 00000 n 
+0003679360 00000 n 
+0003679520 00000 n 
+0003679681 00000 n 
+0003680292 00000 n 
+0003679027 00000 n 
+0003676741 00000 n 
+0003679841 00000 n 
+0003679972 00000 n 
+0003680098 00000 n 
+0003680227 00000 n 
+0005328019 00000 n 
+0003683122 00000 n 
+0003682936 00000 n 
+0003680437 00000 n 
+0003683056 00000 n 
+0003685588 00000 n 
+0003685140 00000 n 
+0003683253 00000 n 
+0003685260 00000 n 
 0003685391 00000 n 
-0003685544 00000 n 
-0003685696 00000 n 
-0003685849 00000 n 
-0003686002 00000 n 
-0003686155 00000 n 
-0003686308 00000 n 
-0003686461 00000 n 
-0003686614 00000 n 
-0003686767 00000 n 
-0003686920 00000 n 
-0003687073 00000 n 
-0003687226 00000 n 
-0003687378 00000 n 
-0003687531 00000 n 
-0003687681 00000 n 
-0003687832 00000 n 
-0003687984 00000 n 
-0003688134 00000 n 
-0003688287 00000 n 
-0003688439 00000 n 
-0003688592 00000 n 
-0003688745 00000 n 
-0003688896 00000 n 
-0003689047 00000 n 
-0003689199 00000 n 
-0003689352 00000 n 
-0003689504 00000 n 
-0003689657 00000 n 
-0003689810 00000 n 
-0003689963 00000 n 
-0003690116 00000 n 
-0003690268 00000 n 
-0003690420 00000 n 
-0003690573 00000 n 
-0003690726 00000 n 
-0003690879 00000 n 
-0003691031 00000 n 
-0003691184 00000 n 
-0003691337 00000 n 
-0003691490 00000 n 
-0003691642 00000 n 
-0003691795 00000 n 
-0003691947 00000 n 
-0003692098 00000 n 
-0003692248 00000 n 
-0003692401 00000 n 
-0003692552 00000 n 
-0003692703 00000 n 
-0003692854 00000 n 
-0003693005 00000 n 
-0003693155 00000 n 
-0003693305 00000 n 
-0003693456 00000 n 
-0003693607 00000 n 
-0003693759 00000 n 
-0003693911 00000 n 
-0003694063 00000 n 
-0003694216 00000 n 
-0003694369 00000 n 
-0003694522 00000 n 
-0003694674 00000 n 
-0003694827 00000 n 
-0003694980 00000 n 
-0003695133 00000 n 
-0003695286 00000 n 
-0003695439 00000 n 
-0003695592 00000 n 
-0003695745 00000 n 
-0003695898 00000 n 
-0003696051 00000 n 
-0003696204 00000 n 
-0003696355 00000 n 
-0003696508 00000 n 
-0003696661 00000 n 
-0003696814 00000 n 
-0003696967 00000 n 
-0003697119 00000 n 
-0003697271 00000 n 
-0003697423 00000 n 
-0003697576 00000 n 
-0003697728 00000 n 
-0003697881 00000 n 
-0003698034 00000 n 
-0003698187 00000 n 
-0003698339 00000 n 
-0003698491 00000 n 
-0003698644 00000 n 
-0003698797 00000 n 
-0003698950 00000 n 
-0003699101 00000 n 
-0003699253 00000 n 
-0003699404 00000 n 
-0003699555 00000 n 
-0003699708 00000 n 
-0003699861 00000 n 
-0003700013 00000 n 
-0003700166 00000 n 
-0003700318 00000 n 
-0003700471 00000 n 
-0003700624 00000 n 
-0003703799 00000 n 
-0003703952 00000 n 
-0003700843 00000 n 
-0003683111 00000 n 
-0003681540 00000 n 
-0003700777 00000 n 
-0003704105 00000 n 
-0003704256 00000 n 
-0003704409 00000 n 
-0003704561 00000 n 
-0003704714 00000 n 
-0003704867 00000 n 
-0003705020 00000 n 
-0003705172 00000 n 
-0003705324 00000 n 
-0003705477 00000 n 
-0003705630 00000 n 
-0003705780 00000 n 
-0003705932 00000 n 
-0003706085 00000 n 
-0003706238 00000 n 
-0003706391 00000 n 
-0003706544 00000 n 
-0003706697 00000 n 
-0003706850 00000 n 
-0003707003 00000 n 
-0003707155 00000 n 
-0003707306 00000 n 
-0003707459 00000 n 
-0003707612 00000 n 
-0003707765 00000 n 
-0003707918 00000 n 
-0003708071 00000 n 
-0003708224 00000 n 
-0003708377 00000 n 
-0003708530 00000 n 
-0003708681 00000 n 
-0003708833 00000 n 
-0003708984 00000 n 
-0003709135 00000 n 
-0003709288 00000 n 
-0003709441 00000 n 
-0003709594 00000 n 
-0003709747 00000 n 
-0003709900 00000 n 
-0003710053 00000 n 
-0003710206 00000 n 
-0003710358 00000 n 
-0003710511 00000 n 
-0003710664 00000 n 
-0003710817 00000 n 
-0003710969 00000 n 
-0003711122 00000 n 
-0003711275 00000 n 
-0003711426 00000 n 
-0003711579 00000 n 
-0003711732 00000 n 
-0003711885 00000 n 
-0003712038 00000 n 
-0003712188 00000 n 
-0003712338 00000 n 
-0003712490 00000 n 
-0003712642 00000 n 
-0003712793 00000 n 
-0003712946 00000 n 
-0003713099 00000 n 
-0003713252 00000 n 
-0003713405 00000 n 
-0003713558 00000 n 
-0003713711 00000 n 
-0003713864 00000 n 
-0003714015 00000 n 
-0003714165 00000 n 
-0003714316 00000 n 
-0003714469 00000 n 
-0003714622 00000 n 
-0003714775 00000 n 
-0003714928 00000 n 
-0003715080 00000 n 
-0003715232 00000 n 
-0003715385 00000 n 
-0003715538 00000 n 
-0003715691 00000 n 
-0003715844 00000 n 
-0003715997 00000 n 
-0003716150 00000 n 
-0003716303 00000 n 
-0003716456 00000 n 
-0003716607 00000 n 
-0003716759 00000 n 
-0003716911 00000 n 
-0003717062 00000 n 
-0003717215 00000 n 
-0003717367 00000 n 
-0003717519 00000 n 
-0003717672 00000 n 
-0003717825 00000 n 
-0003717978 00000 n 
-0003718131 00000 n 
-0003718283 00000 n 
-0003718433 00000 n 
-0003718586 00000 n 
-0003718739 00000 n 
-0003718892 00000 n 
-0003719044 00000 n 
-0003719197 00000 n 
-0003719349 00000 n 
-0003719501 00000 n 
-0003719654 00000 n 
-0003719807 00000 n 
-0003722779 00000 n 
-0003720026 00000 n 
-0003702607 00000 n 
-0003700960 00000 n 
-0003719960 00000 n 
-0004774812 00000 n 
-0003722932 00000 n 
-0003723084 00000 n 
-0003723237 00000 n 
-0003723390 00000 n 
-0003723542 00000 n 
-0003723692 00000 n 
-0003723842 00000 n 
-0003723995 00000 n 
-0003724148 00000 n 
-0003724300 00000 n 
-0003724453 00000 n 
-0003724606 00000 n 
-0003724759 00000 n 
-0003724911 00000 n 
-0003725063 00000 n 
-0003725215 00000 n 
-0003725367 00000 n 
-0003725520 00000 n 
-0003725672 00000 n 
-0003725824 00000 n 
-0003725976 00000 n 
-0003726129 00000 n 
-0003726282 00000 n 
-0003726434 00000 n 
-0003726585 00000 n 
-0003726738 00000 n 
-0003726890 00000 n 
-0003727043 00000 n 
-0003727196 00000 n 
-0003727349 00000 n 
-0003727502 00000 n 
-0003727655 00000 n 
-0003727808 00000 n 
-0003727961 00000 n 
-0003728113 00000 n 
-0003728266 00000 n 
-0003728418 00000 n 
-0003728570 00000 n 
-0003728721 00000 n 
-0003728873 00000 n 
-0003729026 00000 n 
-0003729179 00000 n 
-0003729332 00000 n 
-0003729485 00000 n 
-0003729638 00000 n 
-0003729791 00000 n 
-0003729944 00000 n 
-0003730097 00000 n 
-0003730250 00000 n 
-0003730402 00000 n 
-0003730554 00000 n 
-0003730706 00000 n 
-0003730859 00000 n 
-0003731012 00000 n 
-0003731165 00000 n 
-0003731318 00000 n 
-0003731470 00000 n 
-0003731620 00000 n 
-0003731773 00000 n 
-0003731926 00000 n 
-0003732079 00000 n 
-0003732232 00000 n 
-0003732383 00000 n 
-0003732536 00000 n 
-0003732688 00000 n 
-0003732840 00000 n 
-0003732991 00000 n 
-0003733143 00000 n 
-0003733295 00000 n 
-0003733448 00000 n 
-0003733600 00000 n 
-0003733752 00000 n 
-0003733905 00000 n 
-0003734057 00000 n 
-0003734209 00000 n 
-0003734360 00000 n 
-0003734513 00000 n 
-0003734666 00000 n 
-0003734819 00000 n 
-0003734971 00000 n 
-0003735123 00000 n 
-0003735275 00000 n 
-0003735426 00000 n 
-0003735577 00000 n 
-0003735728 00000 n 
-0003735881 00000 n 
-0003736034 00000 n 
-0003736185 00000 n 
-0003736338 00000 n 
-0003736490 00000 n 
-0003736643 00000 n 
-0003736796 00000 n 
-0003740012 00000 n 
-0003737015 00000 n 
-0003721717 00000 n 
-0003720157 00000 n 
-0003736949 00000 n 
-0003740165 00000 n 
-0003740318 00000 n 
-0003740471 00000 n 
-0003740624 00000 n 
-0003740776 00000 n 
-0003740926 00000 n 
-0003741079 00000 n 
-0003741231 00000 n 
-0003741384 00000 n 
-0003741535 00000 n 
-0003741687 00000 n 
-0003741840 00000 n 
-0003741993 00000 n 
-0003742146 00000 n 
-0003742298 00000 n 
-0003742450 00000 n 
-0003742601 00000 n 
-0003742753 00000 n 
-0003742905 00000 n 
-0003743058 00000 n 
-0003743210 00000 n 
-0003743363 00000 n 
-0003743515 00000 n 
-0003743668 00000 n 
-0003743821 00000 n 
-0003743973 00000 n 
-0003744126 00000 n 
-0003744278 00000 n 
-0003744430 00000 n 
-0003744582 00000 n 
-0003744735 00000 n 
-0003744888 00000 n 
-0003745040 00000 n 
-0003745193 00000 n 
-0003745346 00000 n 
-0003745499 00000 n 
-0003745652 00000 n 
-0003745805 00000 n 
-0003745958 00000 n 
-0003746111 00000 n 
-0003746264 00000 n 
-0003746417 00000 n 
-0003746569 00000 n 
-0003746721 00000 n 
-0003746872 00000 n 
-0003747024 00000 n 
-0003747177 00000 n 
-0003747330 00000 n 
-0003747483 00000 n 
-0003747635 00000 n 
-0003747786 00000 n 
-0003747938 00000 n 
-0003748089 00000 n 
-0003748241 00000 n 
-0003748394 00000 n 
-0003748547 00000 n 
-0003748700 00000 n 
-0003748853 00000 n 
-0003749006 00000 n 
-0003749159 00000 n 
-0003749312 00000 n 
-0003749465 00000 n 
-0003749618 00000 n 
-0003749771 00000 n 
-0003749923 00000 n 
-0003750075 00000 n 
-0003750228 00000 n 
-0003750381 00000 n 
-0003750532 00000 n 
-0003750685 00000 n 
-0003750836 00000 n 
-0003750989 00000 n 
-0003751141 00000 n 
-0003751294 00000 n 
-0003751447 00000 n 
-0003751599 00000 n 
-0003751752 00000 n 
-0003751905 00000 n 
-0003752058 00000 n 
-0003752211 00000 n 
-0003752364 00000 n 
-0003752516 00000 n 
-0003752669 00000 n 
-0003752822 00000 n 
-0003752975 00000 n 
-0003753128 00000 n 
-0003753280 00000 n 
-0003753433 00000 n 
-0003753586 00000 n 
-0003753739 00000 n 
-0003753892 00000 n 
-0003754045 00000 n 
-0003754198 00000 n 
-0003754351 00000 n 
-0003754504 00000 n 
-0003754657 00000 n 
-0003754808 00000 n 
-0003754958 00000 n 
-0003755109 00000 n 
-0003755260 00000 n 
-0003755413 00000 n 
-0003755566 00000 n 
-0003755719 00000 n 
-0003755872 00000 n 
-0003756024 00000 n 
-0003756177 00000 n 
-0003756330 00000 n 
-0003756480 00000 n 
-0003756633 00000 n 
-0003756786 00000 n 
-0003759557 00000 n 
-0003757005 00000 n 
-0003738770 00000 n 
-0003737132 00000 n 
-0003756939 00000 n 
-0003759710 00000 n 
-0003759863 00000 n 
-0003760016 00000 n 
-0003760169 00000 n 
-0003760321 00000 n 
-0003760473 00000 n 
-0003760623 00000 n 
-0003760776 00000 n 
-0003760929 00000 n 
-0003761082 00000 n 
-0003761235 00000 n 
-0003761388 00000 n 
-0003761541 00000 n 
-0003761694 00000 n 
-0003761846 00000 n 
-0003761997 00000 n 
-0003762150 00000 n 
-0003762303 00000 n 
-0003762456 00000 n 
-0003762609 00000 n 
-0003762762 00000 n 
-0003762914 00000 n 
-0003763066 00000 n 
-0003763218 00000 n 
-0003763371 00000 n 
-0003763524 00000 n 
-0003763677 00000 n 
-0003763830 00000 n 
-0003763983 00000 n 
-0003764136 00000 n 
-0003764289 00000 n 
-0003764442 00000 n 
-0003764595 00000 n 
-0003764748 00000 n 
-0003764898 00000 n 
-0003765051 00000 n 
-0003765204 00000 n 
-0003765355 00000 n 
-0003765506 00000 n 
-0003765659 00000 n 
-0003765812 00000 n 
-0003765965 00000 n 
-0003766118 00000 n 
-0003766269 00000 n 
-0003766422 00000 n 
-0003766575 00000 n 
-0003766727 00000 n 
-0003766880 00000 n 
-0003767033 00000 n 
-0003767186 00000 n 
-0003767339 00000 n 
-0003767492 00000 n 
-0003767644 00000 n 
-0003767796 00000 n 
-0003767946 00000 n 
+0003685522 00000 n 
+0003687392 00000 n 
+0003687206 00000 n 
+0003685719 00000 n 
+0003687326 00000 n 
+0003689537 00000 n 
+0003689091 00000 n 
+0003687495 00000 n 
+0003689211 00000 n 
+0003689342 00000 n 
+0003689473 00000 n 
+0003691985 00000 n 
+0003692961 00000 n 
+0003691833 00000 n 
+0003689668 00000 n 
+0003692303 00000 n 
+0003692434 00000 n 
+0003692500 00000 n 
+0003692566 00000 n 
+0003692632 00000 n 
+0003692698 00000 n 
+0003692764 00000 n 
+0003692144 00000 n 
+0003692895 00000 n 
+0003695280 00000 n 
+0003694701 00000 n 
+0003693119 00000 n 
+0003694821 00000 n 
+0003694952 00000 n 
+0003695083 00000 n 
+0003695214 00000 n 
+0005328152 00000 n 
+0003696738 00000 n 
+0003696552 00000 n 
+0003695411 00000 n 
+0003696672 00000 n 
+0003697157 00000 n 
+0003696971 00000 n 
+0003696869 00000 n 
+0003697091 00000 n 
+0003698998 00000 n 
+0003699629 00000 n 
+0003698856 00000 n 
+0003697200 00000 n 
+0003699172 00000 n 
+0003699433 00000 n 
+0003699564 00000 n 
+0003702144 00000 n 
+0003702511 00000 n 
+0003702002 00000 n 
+0003699816 00000 n 
+0003702315 00000 n 
+0003702445 00000 n 
+0003704999 00000 n 
+0003705502 00000 n 
+0003704857 00000 n 
+0003702726 00000 n 
+0003705175 00000 n 
+0003705306 00000 n 
+0003705436 00000 n 
+0003708523 00000 n 
+0003708206 00000 n 
+0003705689 00000 n 
+0003708326 00000 n 
+0003708457 00000 n 
+0005328285 00000 n 
+0003711134 00000 n 
+0003710948 00000 n 
+0003708682 00000 n 
+0003711068 00000 n 
+0003713785 00000 n 
+0003713599 00000 n 
+0003711265 00000 n 
+0003713719 00000 n 
+0003716436 00000 n 
+0003719923 00000 n 
+0003717380 00000 n 
+0003716294 00000 n 
+0003713902 00000 n 
+0003716592 00000 n 
+0003716723 00000 n 
+0003716789 00000 n 
+0003716855 00000 n 
+0003716921 00000 n 
+0003716987 00000 n 
+0003717052 00000 n 
+0003717118 00000 n 
+0003717183 00000 n 
+0003717314 00000 n 
+0003720132 00000 n 
+0003719765 00000 n 
+0003720788 00000 n 
+0003719603 00000 n 
+0003717538 00000 n 
+0003720329 00000 n 
+0003720395 00000 n 
+0003720461 00000 n 
+0003720527 00000 n 
+0003720592 00000 n 
+0003720723 00000 n 
+0003723073 00000 n 
+0003723400 00000 n 
+0003722822 00000 n 
+0003721016 00000 n 
+0003722942 00000 n 
+0003723203 00000 n 
+0003723334 00000 n 
+0003723875 00000 n 
+0003723689 00000 n 
+0003723587 00000 n 
+0003723809 00000 n 
+0005328418 00000 n 
+0003728500 00000 n 
+0003726009 00000 n 
+0003725431 00000 n 
+0003723918 00000 n 
+0003725551 00000 n 
+0003725812 00000 n 
+0003725943 00000 n 
+0003728701 00000 n 
+0003729209 00000 n 
+0003728348 00000 n 
+0003726126 00000 n 
+0003728881 00000 n 
+0003729012 00000 n 
+0003729143 00000 n 
+0003731370 00000 n 
+0003731541 00000 n 
+0003732046 00000 n 
+0003731218 00000 n 
+0003729382 00000 n 
+0003731719 00000 n 
+0003731850 00000 n 
+0003731980 00000 n 
+0003732521 00000 n 
+0003732335 00000 n 
+0003732233 00000 n 
+0003732455 00000 n 
+0003734730 00000 n 
+0003734283 00000 n 
+0003732564 00000 n 
+0003734403 00000 n 
+0003734664 00000 n 
+0003736924 00000 n 
+0003736347 00000 n 
+0003734847 00000 n 
+0003736467 00000 n 
+0003736598 00000 n 
+0003736729 00000 n 
+0003736859 00000 n 
+0005328551 00000 n 
+0003739382 00000 n 
+0003738934 00000 n 
+0003737069 00000 n 
+0003739054 00000 n 
+0003739185 00000 n 
+0003739316 00000 n 
+0003741657 00000 n 
+0003741211 00000 n 
+0003739527 00000 n 
+0003741331 00000 n 
+0003741462 00000 n 
+0003741591 00000 n 
+0003744319 00000 n 
+0003743740 00000 n 
+0003741788 00000 n 
+0003743860 00000 n 
+0003743991 00000 n 
+0003744122 00000 n 
+0003744253 00000 n 
+0003746786 00000 n 
+0003747287 00000 n 
+0003747788 00000 n 
+0003746624 00000 n 
+0003744464 00000 n 
+0003747460 00000 n 
+0003747591 00000 n 
+0003747722 00000 n 
+0003747036 00000 n 
+0003749500 00000 n 
+0003749052 00000 n 
+0003747975 00000 n 
+0003749172 00000 n 
+0003749303 00000 n 
+0003749434 00000 n 
+0003749919 00000 n 
+0003749733 00000 n 
+0003749631 00000 n 
+0003749853 00000 n 
+0005328684 00000 n 
+0003752853 00000 n 
+0003752012 00000 n 
+0003749962 00000 n 
+0003752132 00000 n 
+0003752326 00000 n 
+0003752392 00000 n 
+0003752458 00000 n 
+0003752523 00000 n 
+0003752589 00000 n 
+0003752655 00000 n 
+0003752721 00000 n 
+0003752787 00000 n 
+0003754901 00000 n 
+0003754715 00000 n 
+0003752983 00000 n 
+0003754835 00000 n 
+0003757047 00000 n 
+0003756731 00000 n 
+0003755046 00000 n 
+0003756851 00000 n 
+0003760098 00000 n 
+0003759650 00000 n 
+0003757178 00000 n 
+0003759770 00000 n 
+0003759901 00000 n 
+0003760032 00000 n 
+0003767268 00000 n 
+0003763368 00000 n 
+0003763051 00000 n 
+0003760243 00000 n 
+0003763171 00000 n 
+0003763302 00000 n 
+0003767420 00000 n 
+0003769681 00000 n 
+0003767116 00000 n 
+0003763527 00000 n 
+0003767573 00000 n 
+0003767704 00000 n 
+0003767770 00000 n 
+0003767836 00000 n 
+0003767901 00000 n 
+0003767967 00000 n 
+0003768032 00000 n 
 0003768098 00000 n 
-0003768251 00000 n 
-0003768404 00000 n 
-0003768557 00000 n 
-0003768710 00000 n 
-0003768863 00000 n 
-0003769015 00000 n 
-0003769168 00000 n 
-0003769320 00000 n 
-0003769473 00000 n 
-0003769625 00000 n 
-0003769777 00000 n 
-0003769930 00000 n 
-0003770082 00000 n 
-0003770233 00000 n 
-0003770384 00000 n 
-0003770537 00000 n 
-0003770690 00000 n 
-0003770843 00000 n 
-0003770996 00000 n 
-0003771149 00000 n 
-0003771302 00000 n 
-0003771454 00000 n 
-0003771606 00000 n 
-0003771759 00000 n 
-0003771911 00000 n 
-0003772064 00000 n 
-0003772217 00000 n 
-0003772370 00000 n 
-0003772523 00000 n 
-0003772676 00000 n 
-0003772829 00000 n 
-0003772982 00000 n 
-0003776276 00000 n 
-0003776428 00000 n 
-0003773201 00000 n 
-0003758535 00000 n 
-0003757122 00000 n 
-0003773135 00000 n 
-0003776579 00000 n 
-0003776732 00000 n 
-0003776885 00000 n 
-0003777038 00000 n 
-0003777191 00000 n 
-0003777343 00000 n 
-0003777493 00000 n 
-0003777646 00000 n 
-0003777799 00000 n 
-0003777951 00000 n 
-0003778104 00000 n 
-0003778256 00000 n 
-0003778409 00000 n 
-0003778562 00000 n 
-0003778715 00000 n 
-0003778868 00000 n 
-0003779021 00000 n 
-0003779173 00000 n 
-0003779326 00000 n 
-0003779479 00000 n 
-0003779632 00000 n 
-0003779784 00000 n 
-0003779936 00000 n 
-0003780088 00000 n 
-0003780241 00000 n 
-0003780393 00000 n 
-0003780546 00000 n 
-0003780699 00000 n 
-0003780852 00000 n 
-0003781005 00000 n 
-0003781158 00000 n 
-0003781307 00000 n 
-0003781459 00000 n 
-0003781611 00000 n 
-0003781764 00000 n 
-0003781916 00000 n 
-0003782065 00000 n 
-0003782216 00000 n 
-0003782367 00000 n 
-0003782520 00000 n 
-0003782673 00000 n 
-0003782826 00000 n 
-0003782979 00000 n 
-0003783132 00000 n 
-0003783285 00000 n 
-0003783438 00000 n 
-0003783591 00000 n 
-0003783744 00000 n 
-0003783897 00000 n 
-0003784050 00000 n 
-0003784203 00000 n 
-0003784355 00000 n 
-0003784507 00000 n 
-0003784657 00000 n 
-0003784809 00000 n 
-0003784962 00000 n 
-0003785115 00000 n 
-0003785268 00000 n 
-0003785421 00000 n 
-0003785574 00000 n 
-0003785726 00000 n 
-0003785879 00000 n 
-0003786032 00000 n 
-0003786185 00000 n 
-0003786336 00000 n 
-0003786488 00000 n 
-0003786640 00000 n 
-0003786793 00000 n 
-0003786945 00000 n 
-0003787097 00000 n 
-0003787250 00000 n 
-0003787403 00000 n 
-0003787555 00000 n 
-0003787708 00000 n 
-0003787861 00000 n 
-0003788014 00000 n 
-0003788164 00000 n 
-0003788315 00000 n 
-0003788466 00000 n 
-0003788617 00000 n 
-0003788769 00000 n 
-0003788920 00000 n 
-0003789072 00000 n 
-0003789225 00000 n 
-0003789378 00000 n 
-0003789531 00000 n 
-0003789684 00000 n 
-0003789837 00000 n 
-0003789990 00000 n 
-0003790143 00000 n 
-0003790296 00000 n 
-0003790449 00000 n 
-0003790602 00000 n 
-0003790754 00000 n 
-0003790906 00000 n 
-0003791058 00000 n 
-0003791210 00000 n 
-0003791361 00000 n 
-0003791514 00000 n 
-0003791666 00000 n 
-0003791818 00000 n 
-0003791970 00000 n 
-0003792123 00000 n 
-0003792276 00000 n 
-0003792429 00000 n 
-0003792582 00000 n 
-0003792734 00000 n 
-0003792887 00000 n 
-0003793039 00000 n 
-0003793192 00000 n 
-0003793345 00000 n 
-0003793497 00000 n 
-0003793650 00000 n 
-0003793802 00000 n 
-0003797239 00000 n 
-0003797391 00000 n 
-0003797543 00000 n 
-0003797694 00000 n 
-0003797846 00000 n 
-0003797998 00000 n 
-0003798151 00000 n 
-0003794021 00000 n 
-0003774984 00000 n 
-0003773304 00000 n 
-0003793955 00000 n 
-0003798304 00000 n 
-0003798457 00000 n 
-0003798610 00000 n 
-0003798762 00000 n 
-0003798914 00000 n 
-0003799064 00000 n 
-0003799217 00000 n 
-0003799370 00000 n 
-0003799522 00000 n 
-0003799673 00000 n 
-0003799825 00000 n 
-0003799978 00000 n 
-0003800131 00000 n 
-0003800284 00000 n 
-0003800437 00000 n 
-0003800590 00000 n 
-0003800743 00000 n 
-0003800896 00000 n 
-0003801049 00000 n 
-0003801202 00000 n 
-0003801355 00000 n 
-0003801506 00000 n 
-0003801658 00000 n 
-0003801809 00000 n 
-0003801959 00000 n 
-0003802111 00000 n 
-0003802263 00000 n 
-0003802415 00000 n 
-0003802567 00000 n 
-0003802719 00000 n 
-0003802870 00000 n 
-0003803022 00000 n 
-0003803174 00000 n 
-0003803325 00000 n 
-0003803476 00000 n 
-0003803628 00000 n 
-0003803780 00000 n 
-0003803931 00000 n 
-0003804083 00000 n 
-0003804234 00000 n 
-0003804383 00000 n 
-0003804535 00000 n 
-0003804687 00000 n 
-0003804840 00000 n 
-0003804993 00000 n 
-0003805146 00000 n 
-0003805299 00000 n 
-0003805452 00000 n 
-0003805605 00000 n 
-0003805758 00000 n 
-0003805910 00000 n 
-0003806063 00000 n 
-0003806216 00000 n 
-0003806369 00000 n 
-0003806520 00000 n 
-0003806672 00000 n 
-0003806824 00000 n 
-0003806976 00000 n 
-0003807128 00000 n 
-0003807280 00000 n 
-0003807433 00000 n 
-0003807586 00000 n 
-0003807738 00000 n 
-0003807889 00000 n 
-0003808042 00000 n 
-0003808194 00000 n 
-0003808345 00000 n 
-0003808497 00000 n 
-0003808649 00000 n 
-0003808800 00000 n 
-0003808952 00000 n 
-0003809105 00000 n 
-0003809258 00000 n 
-0003809411 00000 n 
-0003809564 00000 n 
-0003809717 00000 n 
-0003809870 00000 n 
-0003810023 00000 n 
-0003810176 00000 n 
-0003810329 00000 n 
-0003810481 00000 n 
-0003810633 00000 n 
-0003810786 00000 n 
-0003810939 00000 n 
-0003811092 00000 n 
-0003811244 00000 n 
-0003811397 00000 n 
-0003811550 00000 n 
-0003811703 00000 n 
-0003811854 00000 n 
-0003812007 00000 n 
-0003812160 00000 n 
-0003812313 00000 n 
-0003812466 00000 n 
-0003812619 00000 n 
-0003812772 00000 n 
-0003812925 00000 n 
-0003813078 00000 n 
-0003813231 00000 n 
-0003813384 00000 n 
-0003813537 00000 n 
-0003813690 00000 n 
-0003813843 00000 n 
-0003813995 00000 n 
-0003814147 00000 n 
-0003814298 00000 n 
-0003814450 00000 n 
-0003814601 00000 n 
-0003814752 00000 n 
-0003814904 00000 n 
-0003815057 00000 n 
-0003815210 00000 n 
-0003815363 00000 n 
-0003815515 00000 n 
-0003815667 00000 n 
-0003815818 00000 n 
-0003815971 00000 n 
-0003816124 00000 n 
-0003816277 00000 n 
-0003816430 00000 n 
-0003816583 00000 n 
-0003816735 00000 n 
-0003816887 00000 n 
-0003817039 00000 n 
-0003817190 00000 n 
-0003817343 00000 n 
-0003817496 00000 n 
-0003817648 00000 n 
-0003817801 00000 n 
-0003817954 00000 n 
-0003818107 00000 n 
-0003818260 00000 n 
-0003818413 00000 n 
-0003818632 00000 n 
-0003795707 00000 n 
-0003794138 00000 n 
-0003818566 00000 n 
-0003821657 00000 n 
-0003821810 00000 n 
-0003821959 00000 n 
-0003822108 00000 n 
-0003822261 00000 n 
-0003822414 00000 n 
-0003822567 00000 n 
-0003822720 00000 n 
-0003822872 00000 n 
-0003823024 00000 n 
-0003823177 00000 n 
-0003823330 00000 n 
-0003823482 00000 n 
-0003823635 00000 n 
-0003823788 00000 n 
-0003823941 00000 n 
-0003824093 00000 n 
-0003824245 00000 n 
-0003824397 00000 n 
-0003824549 00000 n 
-0003824701 00000 n 
-0003824854 00000 n 
-0003825005 00000 n 
-0003825156 00000 n 
-0003825306 00000 n 
-0003825457 00000 n 
-0003825608 00000 n 
-0003825761 00000 n 
-0003825914 00000 n 
-0003826066 00000 n 
-0003826219 00000 n 
-0003826371 00000 n 
-0003826524 00000 n 
-0003826677 00000 n 
-0003826830 00000 n 
-0003826983 00000 n 
-0003827136 00000 n 
+0003768164 00000 n 
+0003768230 00000 n 
+0003768296 00000 n 
+0003768362 00000 n 
+0003768428 00000 n 
+0003768494 00000 n 
+0003768560 00000 n 
+0003768626 00000 n 
+0003768692 00000 n 
+0003768758 00000 n 
+0003768824 00000 n 
+0003768890 00000 n 
+0003768956 00000 n 
+0003769022 00000 n 
+0003769088 00000 n 
+0003769154 00000 n 
+0003769220 00000 n 
+0003769286 00000 n 
+0003769352 00000 n 
+0003769418 00000 n 
+0003769484 00000 n 
+0003769550 00000 n 
+0003769616 00000 n 
+0005328817 00000 n 
+0003773207 00000 n 
+0003772611 00000 n 
+0003772766 00000 n 
+0003772921 00000 n 
+0003774192 00000 n 
+0003772449 00000 n 
+0003769839 00000 n 
+0003773076 00000 n 
+0003773273 00000 n 
+0003773339 00000 n 
+0003773405 00000 n 
+0003773471 00000 n 
+0003773537 00000 n 
+0003773603 00000 n 
+0003773669 00000 n 
+0003773735 00000 n 
+0003773800 00000 n 
+0003773866 00000 n 
+0003773931 00000 n 
+0003773997 00000 n 
+0003774126 00000 n 
+0003777596 00000 n 
+0003782538 00000 n 
+0003784315 00000 n 
+0003779310 00000 n 
+0003777345 00000 n 
+0003774350 00000 n 
+0003777465 00000 n 
+0003777662 00000 n 
+0003777728 00000 n 
+0003777793 00000 n 
+0003777859 00000 n 
+0003777924 00000 n 
+0003777990 00000 n 
+0003778056 00000 n 
+0003778122 00000 n 
+0003778188 00000 n 
+0003778254 00000 n 
+0003778320 00000 n 
+0003778386 00000 n 
+0003778452 00000 n 
+0003778518 00000 n 
+0003778584 00000 n 
+0003778650 00000 n 
+0003778716 00000 n 
+0003778782 00000 n 
+0003778848 00000 n 
+0003778914 00000 n 
+0003778980 00000 n 
+0003779046 00000 n 
+0003779112 00000 n 
+0003779178 00000 n 
+0003779244 00000 n 
+0003784971 00000 n 
+0003782287 00000 n 
+0003779468 00000 n 
+0003782407 00000 n 
+0003782604 00000 n 
+0003782670 00000 n 
+0003782736 00000 n 
+0003782802 00000 n 
+0003782868 00000 n 
+0003782934 00000 n 
+0003782998 00000 n 
+0003783064 00000 n 
+0003783129 00000 n 
+0003783195 00000 n 
+0003783260 00000 n 
+0003783326 00000 n 
+0003783392 00000 n 
+0003783458 00000 n 
+0003783524 00000 n 
+0003783590 00000 n 
+0003783656 00000 n 
+0003783722 00000 n 
+0003783788 00000 n 
+0003783854 00000 n 
+0003783920 00000 n 
+0003783986 00000 n 
+0003784052 00000 n 
+0003784118 00000 n 
+0003784184 00000 n 
+0003784381 00000 n 
+0003784446 00000 n 
+0003784512 00000 n 
+0003784578 00000 n 
+0003784644 00000 n 
+0003784709 00000 n 
+0003784775 00000 n 
+0003784840 00000 n 
+0003784906 00000 n 
+0003785389 00000 n 
+0003785203 00000 n 
+0003785101 00000 n 
+0003785323 00000 n 
+0003785837 00000 n 
+0003785652 00000 n 
+0003785432 00000 n 
+0003786134 00000 n 
+0003786014 00000 n 
+0003785912 00000 n 
+0005328950 00000 n 
+0003788138 00000 n 
+0003787626 00000 n 
+0003786177 00000 n 
+0003787746 00000 n 
+0003787812 00000 n 
+0003788073 00000 n 
+0003790419 00000 n 
+0003791488 00000 n 
+0003790277 00000 n 
+0003788255 00000 n 
+0003790576 00000 n 
+0003790707 00000 n 
+0003790966 00000 n 
+0003791097 00000 n 
+0003791228 00000 n 
+0003791357 00000 n 
+0003791423 00000 n 
+0003794373 00000 n 
+0003793330 00000 n 
+0003791633 00000 n 
+0003793450 00000 n 
+0003793516 00000 n 
+0003793582 00000 n 
+0003793648 00000 n 
+0003793714 00000 n 
+0003793779 00000 n 
+0003793845 00000 n 
+0003793911 00000 n 
+0003793977 00000 n 
+0003794043 00000 n 
+0003794109 00000 n 
+0003794175 00000 n 
+0003794241 00000 n 
+0003794307 00000 n 
+0003796043 00000 n 
+0003796546 00000 n 
+0003795901 00000 n 
+0003794476 00000 n 
+0003796218 00000 n 
+0003796349 00000 n 
+0003796480 00000 n 
+0003797931 00000 n 
+0003797614 00000 n 
+0003796761 00000 n 
+0003797734 00000 n 
+0003797865 00000 n 
+0003798993 00000 n 
+0003798807 00000 n 
+0003798062 00000 n 
+0003798927 00000 n 
+0005329083 00000 n 
+0003800059 00000 n 
+0003799873 00000 n 
+0003799110 00000 n 
+0003799993 00000 n 
+0003801110 00000 n 
+0003800924 00000 n 
+0003800176 00000 n 
+0003801044 00000 n 
+0003802162 00000 n 
+0003801976 00000 n 
+0003801227 00000 n 
+0003802096 00000 n 
+0003803502 00000 n 
+0003803185 00000 n 
+0003802279 00000 n 
+0003803305 00000 n 
+0003803436 00000 n 
+0003805847 00000 n 
+0003805997 00000 n 
+0003806147 00000 n 
+0003806896 00000 n 
+0003805685 00000 n 
+0003803633 00000 n 
+0003806306 00000 n 
+0003806437 00000 n 
+0003806568 00000 n 
+0003806699 00000 n 
+0003806764 00000 n 
+0003806830 00000 n 
+0003809876 00000 n 
+0003810205 00000 n 
+0003809625 00000 n 
+0003807041 00000 n 
+0003809745 00000 n 
+0003810007 00000 n 
+0003810073 00000 n 
+0003810139 00000 n 
+0005329216 00000 n 
+0003812309 00000 n 
+0003812939 00000 n 
+0003812157 00000 n 
+0003810350 00000 n 
+0003812610 00000 n 
+0003812460 00000 n 
+0003812741 00000 n 
+0003812807 00000 n 
+0003812873 00000 n 
+0003815580 00000 n 
+0003815262 00000 n 
+0003813098 00000 n 
+0003815382 00000 n 
+0003815448 00000 n 
+0003815514 00000 n 
+0003818055 00000 n 
+0003817344 00000 n 
+0003815739 00000 n 
+0003817464 00000 n 
+0003817530 00000 n 
+0003817596 00000 n 
+0003817662 00000 n 
+0003817728 00000 n 
+0003817793 00000 n 
+0003817859 00000 n 
+0003817924 00000 n 
+0003817990 00000 n 
+0003818515 00000 n 
+0003818329 00000 n 
+0003818227 00000 n 
+0003818449 00000 n 
+0003820481 00000 n 
+0003819904 00000 n 
+0003818558 00000 n 
+0003820024 00000 n 
+0003820284 00000 n 
+0003820415 00000 n 
+0003822423 00000 n 
+0003822237 00000 n 
+0003820598 00000 n 
+0003822357 00000 n 
+0005329349 00000 n 
+0003824997 00000 n 
+0003824680 00000 n 
+0003822554 00000 n 
+0003824800 00000 n 
+0003824931 00000 n 
+0003827736 00000 n 
 0003827288 00000 n 
-0003827441 00000 n 
-0003827593 00000 n 
-0003827746 00000 n 
-0003827895 00000 n 
-0003828048 00000 n 
-0003828201 00000 n 
-0003828353 00000 n 
-0003828506 00000 n 
-0003828658 00000 n 
-0003828810 00000 n 
-0003828962 00000 n 
-0003829114 00000 n 
-0003829266 00000 n 
-0003829419 00000 n 
-0003829572 00000 n 
-0003829725 00000 n 
-0003829877 00000 n 
-0003830030 00000 n 
-0003830183 00000 n 
-0003830336 00000 n 
-0003830488 00000 n 
-0003830640 00000 n 
-0003830792 00000 n 
-0003830943 00000 n 
-0003831095 00000 n 
-0003831248 00000 n 
-0003831401 00000 n 
-0003831554 00000 n 
-0003831707 00000 n 
-0003831859 00000 n 
-0003832010 00000 n 
-0003832163 00000 n 
-0003832315 00000 n 
-0003832468 00000 n 
-0003832620 00000 n 
-0003832773 00000 n 
-0003832926 00000 n 
-0003833077 00000 n 
-0003833230 00000 n 
-0003833383 00000 n 
-0003833536 00000 n 
-0003833689 00000 n 
-0003833842 00000 n 
-0003833993 00000 n 
-0003834145 00000 n 
-0003834297 00000 n 
-0003834449 00000 n 
-0003834601 00000 n 
-0003834754 00000 n 
-0003834906 00000 n 
-0003835059 00000 n 
-0003835210 00000 n 
-0003835363 00000 n 
-0003835516 00000 n 
-0003835668 00000 n 
-0003835820 00000 n 
-0003835973 00000 n 
-0003836125 00000 n 
-0003836277 00000 n 
-0003836430 00000 n 
-0003836582 00000 n 
-0003836734 00000 n 
-0003836886 00000 n 
-0003837039 00000 n 
-0003837192 00000 n 
-0003837345 00000 n 
-0003840498 00000 n 
-0003837563 00000 n 
-0003820485 00000 n 
-0003818749 00000 n 
-0003837497 00000 n 
-0004774945 00000 n 
-0003840651 00000 n 
-0003840804 00000 n 
-0003840957 00000 n 
-0003841110 00000 n 
-0003841262 00000 n 
-0003841411 00000 n 
-0003841564 00000 n 
-0003841716 00000 n 
-0003841869 00000 n 
-0003842022 00000 n 
-0003842175 00000 n 
-0003842328 00000 n 
-0003842480 00000 n 
-0003842631 00000 n 
-0003842783 00000 n 
-0003842935 00000 n 
-0003843087 00000 n 
-0003843240 00000 n 
-0003843393 00000 n 
-0003843546 00000 n 
-0003843699 00000 n 
-0003843852 00000 n 
-0003844005 00000 n 
-0003844158 00000 n 
-0003844311 00000 n 
-0003844461 00000 n 
-0003844614 00000 n 
-0003844767 00000 n 
-0003844920 00000 n 
-0003845073 00000 n 
-0003845225 00000 n 
-0003845377 00000 n 
-0003845529 00000 n 
-0003845682 00000 n 
-0003845835 00000 n 
-0003845988 00000 n 
-0003846141 00000 n 
-0003846294 00000 n 
-0003846446 00000 n 
-0003846599 00000 n 
-0003846752 00000 n 
-0003846905 00000 n 
-0003847057 00000 n 
-0003847208 00000 n 
-0003847361 00000 n 
-0003847513 00000 n 
-0003847666 00000 n 
-0003847819 00000 n 
-0003847972 00000 n 
-0003848125 00000 n 
-0003848278 00000 n 
-0003848431 00000 n 
-0003848584 00000 n 
-0003848737 00000 n 
-0003848890 00000 n 
-0003849043 00000 n 
-0003849196 00000 n 
-0003849349 00000 n 
-0003849502 00000 n 
-0003849655 00000 n 
-0003849807 00000 n 
-0003849960 00000 n 
-0003850113 00000 n 
-0003850266 00000 n 
-0003850419 00000 n 
-0003850572 00000 n 
-0003850725 00000 n 
-0003850878 00000 n 
-0003851031 00000 n 
-0003851184 00000 n 
-0003851335 00000 n 
-0003851488 00000 n 
-0003851641 00000 n 
-0003851793 00000 n 
-0003851945 00000 n 
-0003852097 00000 n 
-0003852249 00000 n 
-0003852401 00000 n 
-0003852554 00000 n 
-0003852705 00000 n 
-0003852857 00000 n 
-0003853009 00000 n 
-0003853161 00000 n 
-0003853313 00000 n 
-0003853466 00000 n 
-0003853618 00000 n 
-0003853771 00000 n 
-0003853924 00000 n 
-0003854076 00000 n 
-0003854229 00000 n 
-0003854382 00000 n 
-0003854535 00000 n 
-0003854688 00000 n 
-0003854841 00000 n 
-0003854994 00000 n 
-0003855146 00000 n 
-0003855299 00000 n 
-0003855452 00000 n 
-0003858513 00000 n 
-0003855671 00000 n 
-0003839376 00000 n 
-0003837694 00000 n 
-0003855605 00000 n 
-0003858666 00000 n 
-0003858819 00000 n 
-0003858972 00000 n 
-0003859123 00000 n 
-0003859275 00000 n 
-0003859427 00000 n 
-0003859577 00000 n 
-0003859729 00000 n 
-0003859881 00000 n 
-0003860034 00000 n 
-0003860186 00000 n 
-0003860339 00000 n 
-0003860491 00000 n 
-0003860643 00000 n 
-0003860795 00000 n 
-0003860948 00000 n 
-0003861100 00000 n 
-0003861252 00000 n 
-0003861404 00000 n 
-0003861557 00000 n 
-0003861709 00000 n 
-0003861862 00000 n 
-0003862015 00000 n 
-0003862168 00000 n 
-0003862321 00000 n 
-0003862474 00000 n 
-0003862626 00000 n 
-0003862779 00000 n 
-0003862931 00000 n 
-0003863082 00000 n 
-0003863234 00000 n 
-0003863383 00000 n 
-0003863536 00000 n 
-0003863689 00000 n 
-0003863842 00000 n 
-0003863995 00000 n 
-0003864148 00000 n 
-0003864301 00000 n 
-0003864453 00000 n 
-0003864602 00000 n 
-0003864755 00000 n 
-0003864907 00000 n 
-0003865059 00000 n 
-0003865210 00000 n 
-0003865362 00000 n 
-0003865514 00000 n 
-0003865667 00000 n 
-0003865819 00000 n 
-0003865972 00000 n 
-0003866125 00000 n 
-0003866278 00000 n 
-0003866431 00000 n 
-0003866583 00000 n 
-0003866736 00000 n 
-0003866889 00000 n 
-0003867042 00000 n 
-0003867193 00000 n 
-0003867346 00000 n 
-0003867499 00000 n 
-0003867651 00000 n 
-0003867803 00000 n 
-0003867956 00000 n 
-0003868109 00000 n 
-0003868262 00000 n 
-0003868415 00000 n 
-0003868568 00000 n 
-0003868721 00000 n 
-0003868874 00000 n 
-0003869025 00000 n 
-0003869178 00000 n 
-0003869331 00000 n 
-0003869484 00000 n 
-0003869636 00000 n 
-0003869789 00000 n 
-0003869942 00000 n 
-0003870095 00000 n 
-0003870248 00000 n 
-0003870401 00000 n 
-0003870554 00000 n 
-0003870707 00000 n 
-0003870860 00000 n 
-0003871013 00000 n 
-0003871165 00000 n 
-0003871318 00000 n 
-0003871471 00000 n 
-0003871621 00000 n 
-0003871774 00000 n 
+0003825128 00000 n 
+0003827408 00000 n 
+0003827539 00000 n 
+0003827670 00000 n 
+0003830562 00000 n 
+0003829983 00000 n 
+0003827853 00000 n 
+0003830103 00000 n 
+0003830234 00000 n 
+0003830365 00000 n 
+0003830496 00000 n 
+0003832304 00000 n 
+0003833049 00000 n 
+0003832162 00000 n 
+0003830735 00000 n 
+0003832457 00000 n 
+0003832523 00000 n 
+0003832589 00000 n 
+0003832655 00000 n 
+0003832721 00000 n 
+0003832787 00000 n 
+0003832853 00000 n 
+0003832984 00000 n 
+0003835343 00000 n 
+0003835056 00000 n 
+0003835670 00000 n 
+0003834914 00000 n 
+0003833208 00000 n 
+0003835212 00000 n 
+0003835474 00000 n 
+0003835604 00000 n 
+0003838185 00000 n 
+0003838251 00000 n 
+0003837934 00000 n 
+0003835815 00000 n 
+0003838054 00000 n 
+0005329482 00000 n 
+0003840372 00000 n 
+0003840186 00000 n 
+0003838396 00000 n 
+0003840306 00000 n 
+0003841460 00000 n 
+0003841274 00000 n 
+0003840517 00000 n 
+0003841394 00000 n 
+0003843454 00000 n 
+0003843930 00000 n 
+0003843312 00000 n 
+0003841577 00000 n 
+0003843603 00000 n 
+0003843864 00000 n 
+0003851899 00000 n 
+0003846530 00000 n 
+0003846082 00000 n 
+0003844061 00000 n 
+0003846202 00000 n 
+0003846333 00000 n 
+0003846464 00000 n 
+0003848786 00000 n 
+0003848338 00000 n 
+0003846718 00000 n 
+0003848458 00000 n 
+0003848589 00000 n 
+0003848720 00000 n 
+0003850355 00000 n 
+0003850169 00000 n 
+0003848917 00000 n 
+0003850289 00000 n 
+0005329615 00000 n 
+0003851964 00000 n 
+0003851648 00000 n 
+0003850472 00000 n 
+0003851768 00000 n 
+0003854057 00000 n 
+0003853871 00000 n 
+0003852095 00000 n 
+0003853991 00000 n 
+0003856041 00000 n 
+0003856967 00000 n 
+0003855889 00000 n 
+0003854202 00000 n 
+0003856375 00000 n 
+0003856506 00000 n 
+0003856572 00000 n 
+0003856638 00000 n 
+0003856704 00000 n 
+0003856770 00000 n 
+0003856209 00000 n 
+0003856901 00000 n 
+0003861940 00000 n 
+0003859673 00000 n 
+0003859226 00000 n 
+0003857126 00000 n 
+0003859346 00000 n 
+0003859476 00000 n 
+0003859607 00000 n 
+0003862310 00000 n 
+0003861798 00000 n 
+0003859832 00000 n 
+0003862114 00000 n 
+0003862245 00000 n 
+0003865177 00000 n 
+0003864598 00000 n 
+0003862582 00000 n 
+0003864718 00000 n 
+0003864849 00000 n 
+0003864980 00000 n 
+0003865111 00000 n 
+0005329748 00000 n 
+0003867858 00000 n 
+0003867280 00000 n 
+0003865365 00000 n 
+0003867400 00000 n 
+0003867531 00000 n 
+0003867662 00000 n 
+0003867792 00000 n 
+0003868613 00000 n 
+0003868427 00000 n 
+0003868003 00000 n 
+0003868547 00000 n 
+0003869116 00000 n 
+0003868931 00000 n 
+0003868716 00000 n 
+0003869413 00000 n 
+0003869293 00000 n 
+0003869191 00000 n 
+0003871105 00000 n 
+0003871782 00000 n 
+0003870963 00000 n 
+0003869456 00000 n 
+0003871258 00000 n 
+0003871324 00000 n 
+0003871585 00000 n 
+0003871716 00000 n 
+0003874533 00000 n 
+0003875125 00000 n 
+0003874282 00000 n 
 0003871927 00000 n 
-0003872080 00000 n 
-0003872231 00000 n 
-0003872381 00000 n 
-0003872534 00000 n 
-0003872687 00000 n 
-0003872840 00000 n 
-0003872992 00000 n 
-0003873145 00000 n 
-0003873297 00000 n 
-0003873449 00000 n 
-0003873602 00000 n 
-0003873755 00000 n 
-0003877027 00000 n 
-0003877180 00000 n 
-0003873974 00000 n 
-0003857371 00000 n 
-0003855788 00000 n 
-0003873908 00000 n 
-0003877333 00000 n 
-0003877486 00000 n 
-0003877639 00000 n 
-0003877792 00000 n 
-0003877945 00000 n 
-0003878096 00000 n 
-0003878249 00000 n 
-0003878402 00000 n 
-0003878555 00000 n 
-0003878708 00000 n 
-0003878861 00000 n 
-0003879014 00000 n 
-0003879167 00000 n 
-0003879320 00000 n 
-0003879473 00000 n 
-0003879626 00000 n 
-0003879779 00000 n 
-0003879932 00000 n 
-0003880085 00000 n 
-0003880238 00000 n 
-0003880389 00000 n 
-0003880540 00000 n 
-0003880693 00000 n 
-0003880845 00000 n 
-0003880998 00000 n 
-0003881151 00000 n 
-0003881304 00000 n 
-0003881456 00000 n 
-0003881609 00000 n 
-0003881762 00000 n 
-0003881915 00000 n 
-0003882067 00000 n 
-0003882220 00000 n 
-0003882372 00000 n 
-0003882524 00000 n 
-0003882675 00000 n 
-0003882827 00000 n 
-0003882979 00000 n 
-0003883132 00000 n 
-0003883285 00000 n 
-0003883438 00000 n 
-0003883591 00000 n 
-0003883744 00000 n 
-0003883897 00000 n 
-0003884050 00000 n 
-0003884203 00000 n 
-0003884355 00000 n 
-0003884507 00000 n 
-0003884658 00000 n 
-0003884811 00000 n 
-0003884964 00000 n 
-0003885117 00000 n 
-0003885270 00000 n 
-0003885422 00000 n 
-0003885575 00000 n 
-0003885728 00000 n 
-0003885881 00000 n 
-0003886034 00000 n 
-0003886186 00000 n 
-0003886338 00000 n 
-0003886491 00000 n 
-0003886644 00000 n 
-0003886795 00000 n 
-0003886946 00000 n 
-0003887098 00000 n 
-0003887249 00000 n 
-0003887397 00000 n 
-0003887549 00000 n 
-0003887698 00000 n 
-0003887851 00000 n 
-0003888003 00000 n 
-0003888156 00000 n 
-0003888309 00000 n 
-0003888462 00000 n 
-0003888615 00000 n 
-0003888768 00000 n 
-0003888920 00000 n 
-0003889073 00000 n 
-0003889225 00000 n 
-0003889377 00000 n 
-0003889529 00000 n 
-0003889681 00000 n 
-0003889832 00000 n 
-0003889984 00000 n 
-0003890137 00000 n 
-0003890290 00000 n 
-0003890443 00000 n 
-0003890595 00000 n 
-0003890748 00000 n 
-0003890901 00000 n 
-0003891054 00000 n 
-0003891207 00000 n 
-0003891360 00000 n 
-0003891513 00000 n 
-0003891666 00000 n 
-0003891819 00000 n 
-0003891971 00000 n 
-0003892123 00000 n 
-0003892275 00000 n 
-0003892428 00000 n 
-0003892581 00000 n 
-0003892734 00000 n 
-0003892887 00000 n 
-0003893038 00000 n 
-0003893191 00000 n 
-0003893343 00000 n 
-0003893496 00000 n 
-0003893649 00000 n 
-0003893800 00000 n 
-0003896854 00000 n 
-0003894018 00000 n 
-0003875785 00000 n 
-0003874091 00000 n 
-0003893952 00000 n 
-0003897003 00000 n 
-0003897153 00000 n 
-0003897304 00000 n 
-0003897455 00000 n 
-0003897608 00000 n 
-0003897761 00000 n 
-0003897914 00000 n 
-0003898066 00000 n 
-0003898217 00000 n 
-0003898370 00000 n 
-0003898523 00000 n 
-0003898676 00000 n 
-0003898829 00000 n 
-0003898981 00000 n 
-0003899133 00000 n 
-0003899286 00000 n 
-0003899436 00000 n 
-0003899589 00000 n 
-0003899740 00000 n 
-0003899892 00000 n 
-0003900044 00000 n 
-0003900196 00000 n 
-0003900348 00000 n 
-0003900499 00000 n 
-0003900652 00000 n 
-0003900805 00000 n 
-0003900958 00000 n 
-0003901111 00000 n 
-0003901264 00000 n 
-0003901417 00000 n 
-0003901569 00000 n 
-0003901722 00000 n 
-0003901875 00000 n 
-0003902025 00000 n 
-0003902178 00000 n 
-0003902331 00000 n 
-0003902484 00000 n 
-0003902637 00000 n 
-0003902790 00000 n 
-0003902943 00000 n 
-0003903096 00000 n 
-0003903248 00000 n 
-0003903399 00000 n 
-0003903552 00000 n 
-0003903705 00000 n 
-0003903858 00000 n 
-0003904011 00000 n 
-0003904163 00000 n 
-0003904312 00000 n 
-0003904464 00000 n 
-0003904617 00000 n 
-0003904770 00000 n 
-0003904922 00000 n 
-0003905075 00000 n 
-0003905228 00000 n 
-0003905381 00000 n 
-0003905534 00000 n 
-0003905687 00000 n 
-0003905838 00000 n 
-0003905991 00000 n 
-0003906144 00000 n 
-0003906297 00000 n 
-0003906450 00000 n 
-0003906602 00000 n 
-0003906754 00000 n 
-0003906907 00000 n 
-0003907059 00000 n 
-0003907212 00000 n 
-0003907365 00000 n 
-0003907518 00000 n 
-0003907670 00000 n 
-0003907823 00000 n 
-0003907976 00000 n 
-0003908129 00000 n 
-0003908281 00000 n 
-0003908434 00000 n 
-0003908587 00000 n 
-0003908740 00000 n 
-0003908893 00000 n 
-0003909045 00000 n 
-0003909198 00000 n 
-0003909349 00000 n 
-0003909502 00000 n 
-0003909655 00000 n 
-0003909806 00000 n 
-0003909959 00000 n 
-0003910111 00000 n 
-0003910264 00000 n 
-0003910417 00000 n 
-0003910570 00000 n 
-0003910723 00000 n 
-0003910875 00000 n 
-0003911028 00000 n 
-0003911180 00000 n 
-0003911332 00000 n 
-0003911484 00000 n 
-0003911636 00000 n 
-0003911789 00000 n 
-0003911942 00000 n 
-0003912094 00000 n 
-0003912245 00000 n 
-0003915482 00000 n 
-0003912464 00000 n 
-0003895702 00000 n 
-0003894135 00000 n 
-0003912398 00000 n 
-0003915633 00000 n 
-0003915786 00000 n 
-0003915939 00000 n 
-0003916091 00000 n 
-0003916244 00000 n 
-0003916396 00000 n 
-0003916549 00000 n 
-0003916701 00000 n 
-0003916853 00000 n 
-0003917003 00000 n 
-0003917155 00000 n 
-0003917306 00000 n 
-0003917459 00000 n 
-0003917612 00000 n 
-0003917765 00000 n 
-0003917918 00000 n 
-0003918071 00000 n 
-0003918224 00000 n 
-0003918376 00000 n 
-0003918528 00000 n 
-0003918681 00000 n 
-0003918834 00000 n 
-0003918987 00000 n 
-0003919140 00000 n 
-0003919293 00000 n 
-0003919446 00000 n 
-0003919598 00000 n 
-0003919750 00000 n 
-0003919903 00000 n 
-0003920056 00000 n 
-0003920209 00000 n 
-0003920362 00000 n 
-0003920515 00000 n 
-0003920668 00000 n 
-0003920821 00000 n 
-0003920974 00000 n 
-0003921127 00000 n 
-0003921280 00000 n 
-0003921431 00000 n 
-0003921582 00000 n 
-0003921735 00000 n 
-0003921888 00000 n 
-0003922041 00000 n 
-0003922194 00000 n 
-0003922347 00000 n 
-0003922498 00000 n 
-0003922651 00000 n 
-0003922804 00000 n 
-0003922957 00000 n 
-0003923110 00000 n 
-0003923263 00000 n 
-0003923415 00000 n 
-0003923567 00000 n 
-0003923716 00000 n 
-0003923866 00000 n 
-0003924019 00000 n 
-0003924172 00000 n 
-0003924325 00000 n 
-0003924478 00000 n 
-0003924631 00000 n 
-0003924784 00000 n 
-0003924937 00000 n 
-0003925090 00000 n 
-0003925243 00000 n 
-0003925396 00000 n 
-0003925549 00000 n 
-0003925701 00000 n 
-0003925854 00000 n 
-0003926006 00000 n 
-0003926158 00000 n 
-0003926310 00000 n 
-0003926461 00000 n 
-0003926614 00000 n 
-0003926767 00000 n 
-0003926920 00000 n 
-0003927073 00000 n 
-0003927226 00000 n 
-0003927379 00000 n 
-0003927532 00000 n 
-0003927685 00000 n 
-0003927836 00000 n 
-0003927988 00000 n 
-0003928141 00000 n 
-0003928294 00000 n 
-0003928447 00000 n 
-0003928600 00000 n 
-0003928753 00000 n 
-0003928902 00000 n 
-0003929054 00000 n 
-0003929206 00000 n 
-0003929358 00000 n 
-0003929511 00000 n 
-0003929664 00000 n 
-0003929817 00000 n 
-0003929970 00000 n 
-0003930123 00000 n 
-0003930276 00000 n 
-0003930429 00000 n 
-0003930582 00000 n 
-0003930735 00000 n 
-0003930888 00000 n 
-0003931041 00000 n 
-0003931194 00000 n 
-0003931347 00000 n 
-0003931500 00000 n 
-0003931653 00000 n 
-0003931806 00000 n 
-0003931959 00000 n 
-0003932112 00000 n 
-0003932264 00000 n 
-0003935241 00000 n 
-0003935393 00000 n 
-0003935545 00000 n 
-0003935697 00000 n 
-0003935849 00000 n 
-0003936002 00000 n 
-0003936155 00000 n 
-0003932483 00000 n 
-0003914240 00000 n 
-0003912567 00000 n 
-0003932417 00000 n 
-0003936308 00000 n 
-0003936460 00000 n 
-0003936612 00000 n 
-0003936765 00000 n 
-0003936918 00000 n 
-0003937071 00000 n 
-0003937224 00000 n 
-0003937377 00000 n 
-0003937529 00000 n 
-0003937681 00000 n 
-0003937834 00000 n 
-0003937985 00000 n 
-0003938134 00000 n 
-0003938287 00000 n 
-0003938440 00000 n 
-0003938593 00000 n 
-0003938745 00000 n 
-0003938893 00000 n 
-0003939046 00000 n 
-0003939198 00000 n 
-0003939350 00000 n 
-0003939503 00000 n 
-0003939656 00000 n 
-0003939809 00000 n 
-0003939962 00000 n 
-0003940115 00000 n 
-0003940268 00000 n 
-0003940421 00000 n 
-0003940574 00000 n 
-0003940727 00000 n 
-0003940880 00000 n 
-0003941029 00000 n 
-0003941181 00000 n 
-0003941333 00000 n 
-0003941485 00000 n 
-0003941638 00000 n 
-0003941790 00000 n 
-0003941942 00000 n 
-0003942094 00000 n 
-0003942245 00000 n 
-0003942394 00000 n 
-0003942545 00000 n 
-0003942698 00000 n 
-0003942851 00000 n 
-0003943004 00000 n 
-0003943156 00000 n 
-0003943308 00000 n 
-0003943460 00000 n 
-0003943613 00000 n 
-0003943765 00000 n 
-0003943918 00000 n 
-0003944070 00000 n 
-0003944223 00000 n 
-0003944376 00000 n 
-0003944529 00000 n 
-0003944682 00000 n 
-0003944835 00000 n 
-0003944988 00000 n 
-0003945141 00000 n 
-0003945294 00000 n 
-0003945447 00000 n 
-0003945599 00000 n 
-0003945751 00000 n 
-0003945904 00000 n 
-0003946057 00000 n 
-0003946209 00000 n 
-0003946362 00000 n 
-0003946515 00000 n 
-0003946667 00000 n 
-0003946819 00000 n 
-0003946971 00000 n 
-0003947123 00000 n 
-0003947273 00000 n 
-0003947424 00000 n 
-0003947575 00000 n 
-0003947728 00000 n 
-0003947881 00000 n 
-0003948034 00000 n 
-0003948187 00000 n 
-0003948339 00000 n 
-0003948491 00000 n 
-0003948644 00000 n 
-0003948797 00000 n 
-0003948949 00000 n 
-0003949102 00000 n 
-0003949255 00000 n 
-0003949408 00000 n 
-0003949561 00000 n 
-0003949714 00000 n 
-0003949866 00000 n 
-0003950017 00000 n 
-0003950169 00000 n 
-0003950321 00000 n 
-0003950474 00000 n 
-0003950625 00000 n 
-0003950778 00000 n 
-0003950930 00000 n 
-0003951083 00000 n 
-0003951236 00000 n 
-0003951388 00000 n 
-0003951541 00000 n 
-0003951692 00000 n 
-0003951845 00000 n 
-0003951998 00000 n 
-0003952151 00000 n 
-0003952302 00000 n 
-0003955726 00000 n 
-0003952521 00000 n 
-0003933979 00000 n 
-0003932600 00000 n 
-0003952455 00000 n 
-0004775078 00000 n 
-0003955879 00000 n 
-0003956032 00000 n 
-0003956184 00000 n 
-0003956336 00000 n 
-0003956488 00000 n 
-0003956639 00000 n 
-0003956790 00000 n 
-0003956941 00000 n 
-0003957093 00000 n 
-0003957245 00000 n 
-0003957397 00000 n 
-0003957548 00000 n 
-0003957700 00000 n 
-0003957852 00000 n 
-0003958003 00000 n 
-0003958154 00000 n 
-0003958305 00000 n 
-0003958456 00000 n 
-0003958606 00000 n 
-0003958756 00000 n 
-0003958909 00000 n 
-0003959062 00000 n 
-0003959215 00000 n 
-0003959368 00000 n 
-0003959521 00000 n 
-0003959674 00000 n 
-0003959827 00000 n 
-0003959980 00000 n 
-0003960132 00000 n 
-0003960285 00000 n 
-0003960438 00000 n 
-0003960591 00000 n 
-0003960742 00000 n 
-0003960894 00000 n 
-0003961046 00000 n 
-0003961198 00000 n 
-0003961350 00000 n 
-0003961502 00000 n 
-0003961655 00000 n 
-0003961807 00000 n 
-0003961960 00000 n 
-0003962113 00000 n 
-0003962266 00000 n 
-0003962419 00000 n 
-0003962571 00000 n 
-0003962722 00000 n 
-0003962874 00000 n 
-0003963026 00000 n 
-0003963179 00000 n 
-0003963332 00000 n 
-0003963485 00000 n 
-0003963637 00000 n 
-0003963790 00000 n 
-0003963943 00000 n 
-0003964096 00000 n 
-0003964247 00000 n 
-0003964400 00000 n 
-0003964553 00000 n 
-0003964704 00000 n 
-0003964857 00000 n 
-0003965009 00000 n 
-0003965161 00000 n 
-0003965313 00000 n 
-0003965465 00000 n 
-0003965617 00000 n 
-0003965770 00000 n 
-0003965922 00000 n 
-0003966075 00000 n 
-0003966228 00000 n 
-0003966380 00000 n 
-0003966533 00000 n 
-0003966686 00000 n 
-0003966838 00000 n 
-0003966991 00000 n 
-0003967143 00000 n 
-0003967295 00000 n 
-0003967448 00000 n 
-0003967601 00000 n 
-0003967754 00000 n 
-0003967907 00000 n 
-0003968060 00000 n 
-0003968213 00000 n 
-0003968366 00000 n 
-0003968519 00000 n 
-0003968672 00000 n 
-0003968825 00000 n 
-0003968978 00000 n 
-0003969130 00000 n 
-0003969282 00000 n 
-0003969433 00000 n 
-0003969584 00000 n 
-0003969737 00000 n 
-0003969889 00000 n 
-0003970042 00000 n 
-0003970195 00000 n 
-0003970348 00000 n 
-0003970501 00000 n 
-0003970654 00000 n 
-0003970807 00000 n 
-0003970960 00000 n 
-0003971113 00000 n 
-0003971265 00000 n 
-0003971416 00000 n 
-0003971567 00000 n 
-0003971720 00000 n 
-0003971873 00000 n 
-0003972026 00000 n 
-0003972179 00000 n 
-0003972330 00000 n 
-0003972483 00000 n 
-0003972636 00000 n 
-0003972788 00000 n 
-0003972941 00000 n 
-0003973094 00000 n 
-0003973247 00000 n 
-0003973399 00000 n 
-0003973551 00000 n 
-0003973703 00000 n 
-0003973855 00000 n 
-0003974007 00000 n 
-0003974160 00000 n 
-0003974312 00000 n 
-0003974465 00000 n 
-0003974618 00000 n 
-0003974770 00000 n 
-0003974921 00000 n 
-0003975073 00000 n 
-0003975225 00000 n 
-0003975378 00000 n 
-0003975531 00000 n 
-0003978729 00000 n 
-0003975750 00000 n 
-0003954284 00000 n 
-0003952624 00000 n 
-0003975684 00000 n 
-0003978882 00000 n 
-0003979035 00000 n 
-0003979188 00000 n 
-0003979340 00000 n 
-0003979492 00000 n 
-0003979644 00000 n 
-0003979795 00000 n 
-0003979945 00000 n 
-0003980095 00000 n 
-0003980248 00000 n 
-0003980401 00000 n 
-0003980554 00000 n 
-0003980706 00000 n 
-0003980858 00000 n 
-0003981010 00000 n 
-0003981162 00000 n 
-0003981315 00000 n 
-0003981468 00000 n 
-0003981621 00000 n 
-0003981774 00000 n 
-0003981927 00000 n 
-0003982080 00000 n 
-0003982233 00000 n 
-0003982386 00000 n 
-0003982538 00000 n 
-0003982690 00000 n 
-0003982842 00000 n 
-0003982994 00000 n 
-0003983146 00000 n 
-0003983299 00000 n 
-0003983452 00000 n 
-0003983604 00000 n 
-0003983757 00000 n 
-0003983910 00000 n 
-0003984063 00000 n 
-0003984216 00000 n 
-0003984368 00000 n 
-0003984520 00000 n 
-0003984672 00000 n 
-0003984824 00000 n 
-0003984974 00000 n 
-0003985127 00000 n 
-0003985280 00000 n 
-0003985433 00000 n 
-0003985586 00000 n 
-0003985738 00000 n 
-0003985891 00000 n 
-0003986044 00000 n 
+0003874402 00000 n 
+0003874599 00000 n 
+0003874665 00000 n 
+0003874731 00000 n 
+0003874797 00000 n 
+0003874863 00000 n 
+0003874994 00000 n 
+0003875059 00000 n 
+0005329881 00000 n 
+0003877927 00000 n 
+0003877675 00000 n 
+0003875340 00000 n 
+0003877795 00000 n 
+0003877861 00000 n 
+0003880023 00000 n 
+0003879771 00000 n 
+0003878115 00000 n 
+0003879891 00000 n 
+0003879957 00000 n 
+0003883105 00000 n 
+0003883256 00000 n 
+0003883405 00000 n 
+0003884149 00000 n 
+0003882943 00000 n 
+0003880154 00000 n 
+0003883556 00000 n 
+0003883687 00000 n 
+0003883753 00000 n 
+0003883819 00000 n 
+0003883885 00000 n 
+0003883951 00000 n 
+0003884017 00000 n 
+0003884083 00000 n 
+0003887520 00000 n 
+0003888179 00000 n 
+0003887269 00000 n 
+0003884350 00000 n 
+0003887389 00000 n 
+0003887586 00000 n 
+0003887652 00000 n 
+0003887718 00000 n 
+0003887784 00000 n 
+0003887850 00000 n 
+0003887916 00000 n 
+0003887982 00000 n 
+0003888048 00000 n 
+0003888113 00000 n 
+0003891327 00000 n 
+0003890746 00000 n 
+0003888323 00000 n 
+0003890866 00000 n 
+0003890932 00000 n 
+0003890997 00000 n 
+0003891063 00000 n 
+0003891129 00000 n 
+0003891195 00000 n 
+0003891261 00000 n 
+0003894771 00000 n 
+0003894190 00000 n 
+0003891543 00000 n 
+0003894310 00000 n 
+0003894376 00000 n 
+0003894442 00000 n 
+0003894508 00000 n 
+0003894574 00000 n 
+0003894640 00000 n 
+0003894705 00000 n 
+0005330014 00000 n 
+0003896524 00000 n 
+0003896272 00000 n 
+0003894930 00000 n 
+0003896392 00000 n 
+0003896458 00000 n 
+0003896943 00000 n 
+0003896757 00000 n 
+0003896655 00000 n 
+0003896877 00000 n 
+0003899275 00000 n 
+0003898699 00000 n 
+0003896986 00000 n 
+0003898819 00000 n 
+0003899079 00000 n 
+0003899209 00000 n 
+0003901749 00000 n 
+0003901919 00000 n 
+0003904061 00000 n 
+0003901596 00000 n 
+0003924692 00000 n 
+0003902551 00000 n 
+0003901434 00000 n 
+0003899420 00000 n 
+0003902092 00000 n 
+0003902223 00000 n 
+0003902354 00000 n 
+0003902485 00000 n 
+0003922830 00000 n 
+0003923027 00000 n 
+0003903941 00000 n 
+0003902752 00000 n 
+0003922699 00000 n 
+0003922961 00000 n 
+0003963058 00000 n 
+0003924572 00000 n 
+0003923183 00000 n 
+0003962861 00000 n 
+0003962992 00000 n 
+0005330147 00000 n 
+0003966040 00000 n 
+0003966231 00000 n 
+0003965361 00000 n 
+0003965691 00000 n 
+0003966882 00000 n 
+0003965169 00000 n 
+0003963256 00000 n 
+0003966423 00000 n 
+0003966554 00000 n 
+0003966685 00000 n 
+0003966816 00000 n 
+0003965527 00000 n 
+0003965866 00000 n 
+0003970711 00000 n 
+0003969498 00000 n 
+0003969312 00000 n 
+0003967097 00000 n 
+0003969432 00000 n 
+0003971081 00000 n 
+0003970569 00000 n 
+0003969643 00000 n 
+0003970884 00000 n 
+0003971015 00000 n 
+0003971542 00000 n 
+0003971356 00000 n 
+0003971254 00000 n 
+0003971476 00000 n 
+0003973813 00000 n 
+0003973469 00000 n 
+0003974447 00000 n 
+0003973307 00000 n 
+0003971585 00000 n 
+0003973989 00000 n 
+0003974250 00000 n 
+0003973642 00000 n 
+0003974381 00000 n 
+0003977473 00000 n 
+0003978085 00000 n 
+0003977331 00000 n 
+0003974648 00000 n 
+0003977625 00000 n 
+0003977821 00000 n 
+0003977887 00000 n 
+0003977953 00000 n 
+0003978019 00000 n 
+0005330280 00000 n 
+0003981114 00000 n 
+0003981990 00000 n 
+0003980972 00000 n 
+0003978257 00000 n 
+0003981267 00000 n 
+0003981398 00000 n 
+0003981464 00000 n 
+0003981530 00000 n 
+0003981596 00000 n 
+0003981662 00000 n 
+0003981793 00000 n 
+0003981924 00000 n 
+0003984514 00000 n 
+0003984197 00000 n 
+0003982148 00000 n 
+0003984317 00000 n 
+0003984448 00000 n 
+0003985964 00000 n 
+0003985648 00000 n 
+0003984659 00000 n 
+0003985768 00000 n 
+0003985898 00000 n 
+0003986383 00000 n 
 0003986197 00000 n 
-0003986350 00000 n 
-0003986503 00000 n 
-0003986656 00000 n 
-0003986809 00000 n 
-0003986962 00000 n 
-0003987115 00000 n 
-0003987268 00000 n 
-0003987421 00000 n 
-0003987573 00000 n 
-0003987723 00000 n 
-0003987876 00000 n 
-0003988029 00000 n 
-0003988182 00000 n 
-0003988335 00000 n 
-0003988488 00000 n 
-0003988640 00000 n 
-0003988793 00000 n 
-0003988946 00000 n 
-0003989098 00000 n 
-0003989250 00000 n 
-0003989402 00000 n 
-0003989555 00000 n 
-0003989708 00000 n 
-0003989859 00000 n 
-0003990009 00000 n 
-0003990161 00000 n 
-0003990313 00000 n 
-0003990466 00000 n 
-0003990619 00000 n 
-0003990771 00000 n 
-0003990924 00000 n 
-0003991077 00000 n 
-0003991230 00000 n 
-0003991383 00000 n 
-0003991536 00000 n 
-0003991689 00000 n 
-0003991842 00000 n 
-0003991995 00000 n 
-0003992148 00000 n 
-0003992301 00000 n 
-0003992454 00000 n 
-0003992607 00000 n 
-0003992760 00000 n 
-0003992912 00000 n 
-0003993064 00000 n 
-0003993217 00000 n 
-0003993370 00000 n 
-0003993522 00000 n 
-0003993674 00000 n 
-0003993827 00000 n 
-0003993978 00000 n 
-0003994131 00000 n 
-0003997408 00000 n 
-0003994350 00000 n 
-0003977577 00000 n 
-0003975867 00000 n 
-0003994284 00000 n 
-0003997560 00000 n 
-0003997712 00000 n 
-0003997863 00000 n 
-0003998016 00000 n 
-0003998168 00000 n 
-0003998321 00000 n 
-0003998474 00000 n 
-0003998627 00000 n 
-0003998780 00000 n 
-0003998933 00000 n 
-0003999083 00000 n 
-0003999235 00000 n 
-0003999387 00000 n 
-0003999540 00000 n 
-0003999693 00000 n 
-0003999845 00000 n 
-0003999998 00000 n 
-0004000151 00000 n 
-0004000303 00000 n 
-0004000455 00000 n 
-0004000607 00000 n 
-0004000759 00000 n 
-0004000911 00000 n 
-0004001064 00000 n 
-0004001217 00000 n 
-0004001370 00000 n 
-0004001523 00000 n 
-0004001675 00000 n 
-0004001828 00000 n 
-0004001980 00000 n 
-0004002133 00000 n 
-0004002285 00000 n 
-0004002437 00000 n 
-0004002589 00000 n 
-0004002740 00000 n 
-0004002893 00000 n 
-0004003046 00000 n 
-0004003199 00000 n 
-0004003351 00000 n 
+0003986095 00000 n 
+0003986317 00000 n 
+0003986823 00000 n 
+0003986638 00000 n 
+0003986426 00000 n 
+0003987120 00000 n 
+0003987000 00000 n 
+0003986898 00000 n 
+0005330413 00000 n 
+0003988615 00000 n 
+0003988781 00000 n 
+0003989622 00000 n 
+0003988463 00000 n 
+0003987163 00000 n 
+0003988968 00000 n 
+0003989034 00000 n 
+0003989295 00000 n 
+0003989426 00000 n 
+0003989557 00000 n 
+0003991933 00000 n 
+0003992108 00000 n 
+0003992746 00000 n 
+0003991781 00000 n 
+0003989795 00000 n 
+0003992287 00000 n 
+0003992418 00000 n 
+0003992548 00000 n 
+0003992614 00000 n 
+0003992680 00000 n 
+0003994911 00000 n 
+0003995096 00000 n 
+0003995284 00000 n 
+0003995851 00000 n 
+0003994749 00000 n 
+0003992891 00000 n 
+0003995457 00000 n 
+0003995523 00000 n 
+0003995654 00000 n 
+0003995785 00000 n 
+0003997882 00000 n 
+0003997565 00000 n 
+0003996052 00000 n 
+0003997685 00000 n 
+0003997816 00000 n 
+0003999199 00000 n 
+0003999013 00000 n 
+0003998013 00000 n 
+0003999133 00000 n 
+0004001314 00000 n 
+0004000735 00000 n 
+0003999316 00000 n 
+0004000855 00000 n 
+0004000986 00000 n 
+0004001117 00000 n 
+0004001248 00000 n 
+0005330546 00000 n 
+0004003829 00000 n 
+0004003254 00000 n 
+0004001473 00000 n 
+0004003374 00000 n 
 0004003503 00000 n 
-0004003656 00000 n 
-0004003809 00000 n 
-0004003962 00000 n 
-0004004115 00000 n 
-0004004268 00000 n 
-0004004421 00000 n 
-0004004574 00000 n 
-0004004727 00000 n 
-0004004880 00000 n 
-0004005033 00000 n 
-0004005186 00000 n 
-0004005338 00000 n 
-0004005491 00000 n 
-0004005643 00000 n 
-0004005794 00000 n 
-0004005946 00000 n 
-0004006095 00000 n 
-0004006246 00000 n 
-0004006399 00000 n 
-0004006552 00000 n 
-0004006705 00000 n 
-0004006858 00000 n 
-0004007011 00000 n 
-0004007163 00000 n 
-0004007315 00000 n 
-0004007468 00000 n 
-0004007621 00000 n 
-0004007774 00000 n 
-0004007927 00000 n 
-0004008080 00000 n 
-0004008233 00000 n 
-0004008384 00000 n 
-0004008537 00000 n 
-0004008689 00000 n 
-0004008839 00000 n 
-0004008991 00000 n 
-0004009143 00000 n 
-0004009295 00000 n 
-0004009447 00000 n 
-0004009600 00000 n 
-0004009753 00000 n 
-0004009906 00000 n 
-0004010059 00000 n 
-0004010212 00000 n 
-0004010365 00000 n 
-0004010518 00000 n 
-0004010671 00000 n 
-0004010823 00000 n 
-0004010976 00000 n 
-0004011129 00000 n 
-0004011282 00000 n 
-0004011435 00000 n 
-0004011588 00000 n 
-0004011740 00000 n 
-0004011892 00000 n 
-0004012045 00000 n 
-0004012198 00000 n 
-0004012351 00000 n 
-0004012504 00000 n 
-0004012657 00000 n 
-0004012809 00000 n 
-0004012960 00000 n 
-0004013112 00000 n 
-0004013263 00000 n 
-0004013415 00000 n 
-0004013567 00000 n 
-0004013720 00000 n 
-0004013873 00000 n 
-0004014026 00000 n 
-0004014178 00000 n 
-0004014330 00000 n 
-0004014482 00000 n 
-0004014635 00000 n 
-0004014788 00000 n 
-0004014939 00000 n 
-0004015091 00000 n 
-0004015243 00000 n 
-0004015395 00000 n 
-0004015547 00000 n 
-0004015700 00000 n 
-0004015853 00000 n 
-0004016006 00000 n 
-0004016159 00000 n 
-0004016311 00000 n 
-0004016464 00000 n 
-0004016617 00000 n 
-0004016770 00000 n 
-0004019607 00000 n 
-0004019759 00000 n 
-0004016987 00000 n 
-0003995996 00000 n 
-0003994467 00000 n 
-0004016921 00000 n 
-0004019911 00000 n 
-0004020064 00000 n 
-0004020217 00000 n 
-0004020370 00000 n 
-0004020521 00000 n 
-0004020672 00000 n 
-0004020824 00000 n 
-0004020977 00000 n 
-0004021130 00000 n 
-0004021283 00000 n 
-0004021436 00000 n 
-0004021589 00000 n 
-0004021742 00000 n 
-0004021894 00000 n 
-0004022047 00000 n 
-0004022200 00000 n 
-0004022353 00000 n 
-0004022505 00000 n 
-0004022657 00000 n 
-0004022810 00000 n 
-0004022962 00000 n 
-0004023114 00000 n 
-0004023267 00000 n 
-0004023420 00000 n 
-0004023573 00000 n 
-0004023726 00000 n 
-0004023879 00000 n 
-0004024032 00000 n 
-0004024184 00000 n 
-0004024337 00000 n 
-0004024488 00000 n 
-0004024641 00000 n 
-0004024794 00000 n 
-0004024947 00000 n 
-0004025100 00000 n 
-0004025253 00000 n 
-0004025406 00000 n 
-0004025558 00000 n 
-0004025711 00000 n 
-0004025864 00000 n 
-0004026016 00000 n 
-0004026168 00000 n 
-0004026320 00000 n 
-0004026473 00000 n 
-0004026626 00000 n 
-0004026779 00000 n 
-0004026931 00000 n 
-0004027084 00000 n 
-0004027237 00000 n 
-0004027389 00000 n 
-0004027539 00000 n 
-0004027692 00000 n 
-0004027845 00000 n 
-0004027998 00000 n 
-0004028151 00000 n 
-0004028304 00000 n 
-0004028457 00000 n 
-0004028610 00000 n 
-0004028763 00000 n 
-0004028915 00000 n 
-0004029067 00000 n 
-0004029220 00000 n 
-0004029373 00000 n 
-0004029524 00000 n 
-0004029677 00000 n 
-0004029830 00000 n 
-0004029982 00000 n 
-0004030133 00000 n 
-0004030286 00000 n 
-0004030438 00000 n 
-0004030591 00000 n 
-0004030744 00000 n 
-0004030897 00000 n 
-0004031050 00000 n 
-0004031203 00000 n 
-0004031355 00000 n 
-0004031507 00000 n 
-0004031660 00000 n 
-0004031813 00000 n 
-0004031966 00000 n 
-0004035020 00000 n 
-0004032185 00000 n 
-0004018655 00000 n 
-0004017090 00000 n 
-0004032119 00000 n 
-0004035173 00000 n 
-0004035326 00000 n 
-0004035478 00000 n 
-0004035631 00000 n 
-0004035782 00000 n 
-0004035934 00000 n 
-0004036086 00000 n 
-0004036235 00000 n 
-0004036386 00000 n 
-0004036537 00000 n 
-0004036690 00000 n 
-0004036841 00000 n 
-0004036994 00000 n 
-0004037147 00000 n 
-0004037300 00000 n 
-0004037453 00000 n 
-0004037606 00000 n 
-0004037757 00000 n 
-0004037908 00000 n 
-0004038061 00000 n 
-0004038212 00000 n 
-0004038365 00000 n 
-0004038517 00000 n 
-0004038669 00000 n 
-0004038821 00000 n 
-0004038973 00000 n 
-0004039126 00000 n 
-0004039279 00000 n 
-0004039432 00000 n 
-0004039585 00000 n 
-0004039738 00000 n 
-0004039890 00000 n 
-0004040042 00000 n 
-0004040194 00000 n 
-0004040346 00000 n 
-0004040499 00000 n 
-0004040652 00000 n 
-0004040804 00000 n 
-0004040957 00000 n 
-0004041109 00000 n 
-0004041262 00000 n 
-0004041415 00000 n 
-0004041568 00000 n 
-0004041721 00000 n 
-0004041874 00000 n 
-0004042027 00000 n 
-0004042179 00000 n 
-0004042331 00000 n 
-0004042481 00000 n 
-0004042632 00000 n 
-0004042785 00000 n 
-0004042937 00000 n 
-0004043088 00000 n 
-0004043241 00000 n 
-0004043392 00000 n 
-0004043543 00000 n 
-0004043696 00000 n 
-0004043849 00000 n 
-0004044002 00000 n 
-0004044154 00000 n 
-0004044306 00000 n 
-0004044459 00000 n 
-0004044612 00000 n 
-0004044764 00000 n 
-0004044917 00000 n 
-0004045070 00000 n 
-0004045223 00000 n 
-0004045374 00000 n 
-0004045527 00000 n 
-0004045680 00000 n 
-0004045833 00000 n 
-0004045986 00000 n 
-0004046139 00000 n 
-0004046292 00000 n 
-0004046445 00000 n 
-0004046598 00000 n 
-0004046751 00000 n 
-0004046904 00000 n 
-0004047056 00000 n 
-0004047209 00000 n 
-0004047362 00000 n 
-0004047514 00000 n 
-0004047663 00000 n 
-0004047816 00000 n 
-0004047969 00000 n 
-0004048122 00000 n 
-0004048275 00000 n 
-0004048428 00000 n 
-0004048581 00000 n 
-0004048733 00000 n 
-0004048886 00000 n 
-0004049039 00000 n 
-0004049191 00000 n 
-0004049343 00000 n 
-0004049495 00000 n 
-0004049647 00000 n 
-0004049799 00000 n 
-0004049952 00000 n 
-0004050104 00000 n 
-0004050257 00000 n 
-0004050410 00000 n 
-0004053538 00000 n 
-0004050628 00000 n 
-0004033868 00000 n 
-0004032302 00000 n 
-0004050562 00000 n 
-0004053690 00000 n 
-0004053843 00000 n 
-0004053996 00000 n 
-0004054148 00000 n 
-0004054300 00000 n 
-0004054453 00000 n 
-0004054606 00000 n 
+0004003763 00000 n 
+0004005521 00000 n 
+0004005335 00000 n 
+0004003960 00000 n 
+0004005455 00000 n 
+0004007640 00000 n 
+0004007323 00000 n 
+0004005695 00000 n 
+0004007443 00000 n 
+0004007574 00000 n 
+0004009674 00000 n 
+0004009357 00000 n 
+0004007856 00000 n 
+0004009477 00000 n 
+0004009608 00000 n 
+0004011093 00000 n 
+0004010776 00000 n 
+0004009862 00000 n 
+0004010896 00000 n 
+0004011027 00000 n 
+0004011512 00000 n 
+0004011326 00000 n 
+0004011224 00000 n 
+0004011446 00000 n 
+0005330679 00000 n 
+0004013612 00000 n 
+0004013165 00000 n 
+0004011555 00000 n 
+0004013285 00000 n 
+0004013546 00000 n 
+0004015803 00000 n 
+0004016298 00000 n 
+0004015661 00000 n 
+0004013743 00000 n 
+0004015970 00000 n 
+0004016101 00000 n 
+0004016232 00000 n 
+0004017529 00000 n 
+0004017343 00000 n 
+0004016485 00000 n 
+0004017463 00000 n 
+0004019720 00000 n 
+0004019272 00000 n 
+0004017646 00000 n 
+0004019392 00000 n 
+0004019523 00000 n 
+0004019654 00000 n 
+0004021658 00000 n 
+0004022686 00000 n 
+0004021506 00000 n 
+0004019851 00000 n 
+0004022227 00000 n 
+0004022358 00000 n 
+0004022489 00000 n 
+0004021943 00000 n 
+0004023147 00000 n 
+0004022961 00000 n 
+0004022859 00000 n 
+0004023081 00000 n 
+0005330812 00000 n 
+0004025049 00000 n 
+0004025222 00000 n 
+0004025413 00000 n 
+0004025598 00000 n 
+0004025790 00000 n 
+0004026304 00000 n 
+0004024867 00000 n 
+0004023190 00000 n 
+0004025977 00000 n 
+0004026238 00000 n 
+0004028826 00000 n 
+0004029484 00000 n 
+0004028684 00000 n 
+0004026477 00000 n 
+0004029025 00000 n 
+0004029156 00000 n 
+0004029287 00000 n 
+0004029418 00000 n 
+0004031830 00000 n 
+0004032479 00000 n 
+0004031688 00000 n 
+0004029685 00000 n 
+0004032021 00000 n 
+0004032152 00000 n 
+0004032283 00000 n 
+0004032414 00000 n 
+0004034996 00000 n 
+0004035642 00000 n 
+0004034854 00000 n 
+0004032694 00000 n 
+0004035184 00000 n 
+0004035315 00000 n 
+0004035446 00000 n 
+0004035576 00000 n 
+0004037883 00000 n 
+0004038492 00000 n 
+0004037741 00000 n 
+0004035843 00000 n 
+0004038035 00000 n 
+0004038166 00000 n 
+0004038295 00000 n 
+0004038426 00000 n 
+0004041488 00000 n 
+0004042567 00000 n 
+0004041346 00000 n 
+0004038651 00000 n 
+0004041647 00000 n 
+0004041778 00000 n 
+0004041909 00000 n 
+0004042040 00000 n 
+0004042106 00000 n 
+0004042172 00000 n 
+0004042238 00000 n 
+0004042303 00000 n 
+0004042369 00000 n 
+0004042435 00000 n 
+0004042501 00000 n 
+0005330945 00000 n 
+0004043922 00000 n 
+0004044325 00000 n 
+0004043780 00000 n 
+0004042739 00000 n 
+0004044129 00000 n 
+0004044260 00000 n 
+0004044885 00000 n 
+0004044699 00000 n 
+0004044597 00000 n 
+0004044819 00000 n 
+0004047013 00000 n 
+0004046435 00000 n 
+0004044928 00000 n 
+0004046555 00000 n 
+0004046816 00000 n 
+0004046947 00000 n 
+0004049728 00000 n 
+0004049411 00000 n 
+0004047130 00000 n 
+0004049531 00000 n 
+0004049662 00000 n 
+0004052558 00000 n 
+0004051848 00000 n 
+0004049887 00000 n 
+0004051968 00000 n 
+0004052099 00000 n 
+0004052230 00000 n 
+0004052361 00000 n 
+0004052492 00000 n 
 0004054759 00000 n 
-0004054911 00000 n 
-0004055060 00000 n 
-0004055209 00000 n 
-0004055362 00000 n 
-0004055515 00000 n 
-0004055668 00000 n 
-0004055821 00000 n 
-0004055974 00000 n 
-0004056127 00000 n 
-0004056279 00000 n 
-0004056431 00000 n 
-0004056583 00000 n 
-0004056736 00000 n 
-0004056889 00000 n 
-0004057042 00000 n 
-0004057195 00000 n 
-0004057348 00000 n 
-0004057500 00000 n 
-0004057652 00000 n 
-0004057805 00000 n 
-0004057957 00000 n 
-0004058110 00000 n 
-0004058263 00000 n 
-0004058416 00000 n 
-0004058569 00000 n 
-0004058721 00000 n 
-0004058873 00000 n 
-0004059026 00000 n 
-0004059179 00000 n 
-0004059332 00000 n 
-0004059485 00000 n 
-0004059638 00000 n 
-0004059791 00000 n 
-0004059944 00000 n 
-0004060097 00000 n 
-0004060250 00000 n 
-0004060403 00000 n 
-0004060555 00000 n 
-0004060706 00000 n 
-0004060859 00000 n 
-0004061012 00000 n 
-0004061165 00000 n 
-0004061318 00000 n 
-0004061471 00000 n 
-0004061623 00000 n 
-0004061776 00000 n 
-0004061929 00000 n 
-0004062081 00000 n 
-0004062234 00000 n 
-0004062387 00000 n 
-0004062540 00000 n 
-0004062693 00000 n 
-0004062846 00000 n 
-0004062999 00000 n 
-0004063152 00000 n 
-0004063305 00000 n 
-0004063458 00000 n 
-0004063611 00000 n 
-0004063763 00000 n 
-0004063914 00000 n 
-0004064066 00000 n 
-0004064219 00000 n 
-0004064370 00000 n 
-0004064522 00000 n 
-0004064673 00000 n 
-0004064824 00000 n 
-0004064977 00000 n 
-0004065130 00000 n 
-0004065283 00000 n 
-0004065435 00000 n 
-0004065588 00000 n 
-0004065741 00000 n 
-0004065894 00000 n 
-0004066045 00000 n 
-0004066196 00000 n 
-0004066349 00000 n 
-0004066500 00000 n 
-0004066653 00000 n 
-0004066806 00000 n 
-0004066959 00000 n 
-0004067112 00000 n 
-0004067264 00000 n 
-0004067417 00000 n 
-0004067569 00000 n 
-0004067721 00000 n 
-0004067874 00000 n 
-0004068027 00000 n 
-0004068180 00000 n 
-0004068333 00000 n 
-0004068485 00000 n 
-0004068638 00000 n 
-0004068789 00000 n 
-0004068942 00000 n 
-0004069095 00000 n 
-0004069248 00000 n 
-0004069401 00000 n 
-0004069553 00000 n 
-0004069704 00000 n 
-0004069857 00000 n 
-0004070009 00000 n 
-0004070162 00000 n 
-0004070315 00000 n 
-0004070468 00000 n 
-0004070621 00000 n 
-0004070774 00000 n 
-0004070927 00000 n 
-0004071080 00000 n 
-0004071233 00000 n 
-0004074231 00000 n 
-0004074383 00000 n 
-0004071452 00000 n 
-0004052236 00000 n 
-0004050745 00000 n 
-0004071386 00000 n 
-0004775211 00000 n 
-0004074535 00000 n 
-0004074686 00000 n 
-0004074839 00000 n 
-0004074991 00000 n 
-0004075144 00000 n 
-0004075297 00000 n 
-0004075449 00000 n 
-0004075602 00000 n 
-0004075755 00000 n 
-0004075906 00000 n 
-0004076059 00000 n 
-0004076211 00000 n 
-0004076364 00000 n 
-0004076517 00000 n 
-0004076669 00000 n 
-0004076822 00000 n 
-0004076975 00000 n 
-0004077128 00000 n 
-0004077281 00000 n 
-0004077434 00000 n 
-0004077587 00000 n 
-0004077739 00000 n 
-0004077891 00000 n 
-0004078044 00000 n 
-0004078196 00000 n 
-0004078349 00000 n 
-0004078502 00000 n 
-0004078653 00000 n 
-0004078805 00000 n 
-0004078957 00000 n 
-0004079109 00000 n 
-0004079262 00000 n 
-0004079415 00000 n 
-0004079568 00000 n 
-0004079721 00000 n 
-0004079874 00000 n 
-0004080027 00000 n 
-0004080180 00000 n 
-0004080332 00000 n 
-0004080484 00000 n 
-0004080637 00000 n 
-0004080790 00000 n 
-0004080943 00000 n 
-0004081094 00000 n 
-0004081247 00000 n 
-0004081399 00000 n 
-0004081552 00000 n 
-0004081705 00000 n 
-0004081858 00000 n 
-0004082010 00000 n 
-0004082162 00000 n 
-0004082314 00000 n 
-0004082467 00000 n 
-0004082619 00000 n 
-0004082772 00000 n 
-0004082925 00000 n 
-0004083078 00000 n 
-0004083231 00000 n 
-0004083384 00000 n 
-0004083537 00000 n 
-0004083689 00000 n 
-0004083841 00000 n 
-0004083989 00000 n 
-0004084142 00000 n 
-0004084295 00000 n 
-0004084448 00000 n 
-0004084601 00000 n 
-0004084754 00000 n 
-0004084907 00000 n 
-0004085060 00000 n 
-0004085212 00000 n 
-0004085365 00000 n 
-0004085518 00000 n 
-0004085671 00000 n 
-0004085824 00000 n 
-0004085976 00000 n 
-0004086128 00000 n 
-0004086281 00000 n 
-0004086432 00000 n 
-0004086585 00000 n 
-0004086738 00000 n 
-0004086891 00000 n 
-0004087042 00000 n 
-0004087192 00000 n 
-0004087344 00000 n 
-0004087496 00000 n 
-0004087649 00000 n 
-0004087802 00000 n 
-0004087954 00000 n 
-0004088107 00000 n 
-0004088260 00000 n 
-0004088413 00000 n 
-0004088566 00000 n 
-0004088718 00000 n 
-0004088871 00000 n 
-0004089024 00000 n 
-0004089176 00000 n 
-0004089329 00000 n 
-0004089481 00000 n 
-0004089633 00000 n 
-0004089785 00000 n 
-0004089937 00000 n 
-0004090089 00000 n 
-0004090237 00000 n 
-0004090389 00000 n 
-0004093645 00000 n 
-0004090608 00000 n 
-0004073029 00000 n 
-0004071569 00000 n 
-0004090542 00000 n 
-0004093797 00000 n 
-0004093950 00000 n 
-0004094102 00000 n 
-0004094254 00000 n 
-0004094406 00000 n 
-0004094556 00000 n 
-0004094706 00000 n 
-0004094859 00000 n 
-0004095011 00000 n 
-0004095163 00000 n 
-0004095316 00000 n 
-0004095469 00000 n 
-0004095622 00000 n 
-0004095775 00000 n 
-0004095927 00000 n 
-0004096079 00000 n 
-0004096232 00000 n 
-0004096385 00000 n 
-0004096537 00000 n 
-0004096689 00000 n 
-0004096841 00000 n 
-0004096994 00000 n 
-0004097147 00000 n 
-0004097298 00000 n 
-0004097450 00000 n 
-0004097602 00000 n 
-0004097755 00000 n 
-0004097908 00000 n 
-0004098060 00000 n 
-0004098212 00000 n 
-0004098364 00000 n 
-0004098516 00000 n 
-0004098668 00000 n 
-0004098819 00000 n 
-0004098972 00000 n 
-0004099125 00000 n 
-0004099278 00000 n 
-0004099431 00000 n 
-0004099584 00000 n 
-0004099737 00000 n 
-0004099890 00000 n 
-0004100043 00000 n 
-0004100196 00000 n 
-0004100349 00000 n 
-0004100502 00000 n 
-0004100655 00000 n 
-0004100808 00000 n 
-0004100961 00000 n 
-0004101113 00000 n 
-0004101265 00000 n 
-0004101416 00000 n 
-0004101569 00000 n 
-0004101722 00000 n 
-0004101873 00000 n 
-0004102026 00000 n 
-0004102179 00000 n 
-0004102332 00000 n 
-0004102485 00000 n 
-0004102638 00000 n 
-0004102791 00000 n 
-0004102944 00000 n 
-0004103096 00000 n 
-0004103248 00000 n 
-0004103400 00000 n 
-0004103553 00000 n 
-0004103706 00000 n 
-0004103859 00000 n 
-0004104012 00000 n 
-0004104163 00000 n 
-0004104314 00000 n 
-0004104466 00000 n 
-0004104618 00000 n 
-0004104771 00000 n 
-0004104924 00000 n 
-0004105077 00000 n 
-0004105230 00000 n 
-0004105382 00000 n 
-0004105535 00000 n 
-0004105687 00000 n 
-0004105840 00000 n 
-0004105993 00000 n 
-0004106145 00000 n 
-0004106298 00000 n 
-0004106450 00000 n 
-0004106603 00000 n 
-0004106755 00000 n 
-0004106906 00000 n 
-0004107058 00000 n 
-0004107210 00000 n 
-0004107363 00000 n 
-0004107516 00000 n 
-0004107669 00000 n 
-0004107822 00000 n 
-0004107975 00000 n 
-0004108128 00000 n 
-0004108280 00000 n 
-0004108433 00000 n 
-0004108586 00000 n 
-0004108739 00000 n 
-0004108889 00000 n 
-0004109042 00000 n 
-0004109194 00000 n 
-0004109346 00000 n 
-0004109499 00000 n 
-0004109652 00000 n 
-0004109805 00000 n 
-0004109958 00000 n 
-0004110111 00000 n 
-0004110264 00000 n 
-0004110417 00000 n 
-0004113973 00000 n 
-0004110636 00000 n 
-0004092403 00000 n 
-0004090725 00000 n 
-0004110570 00000 n 
-0004114126 00000 n 
-0004114279 00000 n 
-0004114432 00000 n 
-0004114585 00000 n 
-0004114738 00000 n 
-0004114890 00000 n 
-0004115041 00000 n 
-0004115192 00000 n 
-0004115343 00000 n 
-0004115493 00000 n 
-0004115644 00000 n 
-0004115795 00000 n 
-0004115948 00000 n 
-0004116101 00000 n 
-0004116254 00000 n 
-0004116406 00000 n 
-0004116558 00000 n 
-0004116711 00000 n 
-0004116864 00000 n 
-0004117017 00000 n 
-0004117170 00000 n 
-0004117323 00000 n 
-0004117475 00000 n 
-0004117627 00000 n 
-0004117780 00000 n 
-0004117933 00000 n 
-0004118086 00000 n 
-0004118239 00000 n 
-0004118392 00000 n 
-0004118545 00000 n 
-0004118697 00000 n 
-0004118850 00000 n 
-0004119003 00000 n 
-0004119155 00000 n 
-0004119308 00000 n 
-0004119461 00000 n 
-0004119614 00000 n 
-0004119767 00000 n 
-0004119920 00000 n 
-0004120071 00000 n 
-0004120223 00000 n 
-0004120375 00000 n 
-0004120527 00000 n 
-0004120679 00000 n 
-0004120832 00000 n 
-0004120985 00000 n 
-0004121138 00000 n 
-0004121291 00000 n 
-0004121444 00000 n 
-0004121597 00000 n 
-0004121749 00000 n 
-0004121902 00000 n 
-0004122055 00000 n 
-0004122206 00000 n 
-0004122356 00000 n 
-0004122509 00000 n 
-0004122662 00000 n 
-0004122814 00000 n 
-0004122966 00000 n 
-0004123119 00000 n 
-0004123272 00000 n 
-0004123425 00000 n 
-0004123578 00000 n 
-0004123731 00000 n 
-0004123884 00000 n 
-0004124036 00000 n 
-0004124188 00000 n 
-0004124341 00000 n 
-0004124494 00000 n 
-0004124647 00000 n 
-0004124800 00000 n 
-0004124952 00000 n 
-0004125105 00000 n 
-0004125258 00000 n 
-0004125411 00000 n 
-0004125563 00000 n 
-0004125715 00000 n 
-0004125868 00000 n 
-0004126021 00000 n 
-0004126173 00000 n 
-0004126326 00000 n 
-0004126479 00000 n 
-0004126632 00000 n 
-0004126785 00000 n 
-0004126938 00000 n 
-0004127091 00000 n 
-0004127243 00000 n 
-0004127396 00000 n 
-0004127549 00000 n 
-0004127700 00000 n 
-0004127852 00000 n 
-0004128003 00000 n 
-0004128156 00000 n 
-0004128308 00000 n 
-0004128461 00000 n 
-0004128614 00000 n 
-0004128767 00000 n 
-0004128920 00000 n 
-0004129073 00000 n 
-0004129225 00000 n 
-0004129378 00000 n 
-0004129530 00000 n 
-0004129683 00000 n 
-0004129836 00000 n 
-0004129988 00000 n 
-0004130140 00000 n 
+0004055533 00000 n 
+0004054607 00000 n 
+0004052717 00000 n 
+0004055075 00000 n 
+0004055206 00000 n 
+0004055337 00000 n 
+0004054917 00000 n 
+0004055467 00000 n 
+0005331078 00000 n 
+0004058213 00000 n 
+0004057765 00000 n 
+0004055678 00000 n 
+0004057885 00000 n 
+0004058016 00000 n 
+0004058147 00000 n 
+0004058632 00000 n 
+0004058446 00000 n 
+0004058344 00000 n 
+0004058566 00000 n 
+0004060119 00000 n 
+0004063121 00000 n 
+0004060622 00000 n 
+0004059977 00000 n 
+0004058675 00000 n 
+0004060295 00000 n 
+0004060556 00000 n 
+0004063298 00000 n 
+0004063468 00000 n 
+0004063641 00000 n 
+0004063812 00000 n 
+0004063983 00000 n 
+0004064678 00000 n 
+0004062919 00000 n 
+0004060809 00000 n 
+0004064351 00000 n 
+0004064482 00000 n 
+0004064612 00000 n 
+0004064167 00000 n 
+0004066476 00000 n 
+0004066290 00000 n 
+0004064965 00000 n 
+0004066410 00000 n 
+0005308622 00000 n 
+0005312038 00000 n 
+0004068491 00000 n 
+0004068042 00000 n 
+0004066750 00000 n 
+0004068162 00000 n 
+0004068228 00000 n 
+0004068294 00000 n 
+0004068425 00000 n 
+0005331211 00000 n 
+0004070258 00000 n 
+0004069940 00000 n 
+0004068636 00000 n 
+0004070060 00000 n 
+0004070126 00000 n 
+0004070192 00000 n 
+0004071922 00000 n 
+0004071605 00000 n 
+0004070389 00000 n 
+0004071725 00000 n 
+0004071856 00000 n 
+0004073080 00000 n 
+0004073437 00000 n 
+0004072938 00000 n 
+0004072053 00000 n 
+0004073240 00000 n 
+0004073371 00000 n 
+0004074710 00000 n 
+0004074524 00000 n 
+0004073568 00000 n 
+0004074644 00000 n 
+0004076220 00000 n 
+0004076380 00000 n 
+0004076549 00000 n 
+0004076916 00000 n 
+0004076058 00000 n 
+0004074884 00000 n 
+0004076719 00000 n 
+0004076850 00000 n 
+0004077349 00000 n 
+0004077163 00000 n 
+0004077061 00000 n 
+0004077283 00000 n 
+0005331344 00000 n 
+0004079477 00000 n 
+0004079160 00000 n 
+0004077392 00000 n 
+0004079280 00000 n 
+0004079411 00000 n 
+0004082167 00000 n 
+0004082347 00000 n 
+0004082530 00000 n 
+0004082902 00000 n 
+0004082005 00000 n 
+0004079594 00000 n 
+0004082705 00000 n 
+0004082836 00000 n 
+0004085108 00000 n 
+0004085494 00000 n 
+0004084966 00000 n 
+0004083089 00000 n 
+0004085297 00000 n 
+0004085428 00000 n 
+0004085969 00000 n 
+0004085783 00000 n 
+0004085681 00000 n 
+0004085903 00000 n 
+0004090665 00000 n 
+0004090831 00000 n 
+0004091023 00000 n 
+0004088028 00000 n 
+0004087581 00000 n 
+0004086012 00000 n 
+0004087701 00000 n 
+0004087962 00000 n 
+0004091597 00000 n 
+0004090503 00000 n 
+0004088145 00000 n 
+0004091203 00000 n 
+0004091269 00000 n 
+0004091335 00000 n 
+0004091401 00000 n 
+0004091532 00000 n 
+0005331477 00000 n 
+0004093527 00000 n 
+0004093210 00000 n 
+0004091770 00000 n 
+0004093330 00000 n 
+0004093461 00000 n 
+0004094583 00000 n 
+0004094397 00000 n 
+0004093658 00000 n 
+0004094517 00000 n 
+0004095673 00000 n 
+0004095487 00000 n 
+0004094686 00000 n 
+0004095607 00000 n 
+0004096746 00000 n 
+0004096560 00000 n 
+0004095790 00000 n 
+0004096680 00000 n 
+0004098433 00000 n 
+0004098117 00000 n 
+0004096863 00000 n 
+0004098237 00000 n 
+0004099131 00000 n 
+0004098945 00000 n 
+0004098564 00000 n 
+0004099065 00000 n 
+0005331610 00000 n 
+0004100939 00000 n 
+0004101366 00000 n 
+0004100797 00000 n 
+0004099234 00000 n 
+0004101104 00000 n 
+0004101235 00000 n 
+0004101300 00000 n 
+0004104027 00000 n 
+0004103775 00000 n 
+0004101525 00000 n 
+0004103895 00000 n 
+0004103961 00000 n 
+0004106442 00000 n 
+0004106124 00000 n 
+0004104144 00000 n 
+0004106244 00000 n 
+0004106310 00000 n 
+0004106376 00000 n 
+0004109019 00000 n 
+0004108767 00000 n 
+0004106545 00000 n 
+0004108887 00000 n 
+0004108953 00000 n 
+0004111483 00000 n 
+0004111165 00000 n 
+0004109136 00000 n 
+0004111285 00000 n 
+0004111351 00000 n 
+0004111417 00000 n 
+0004114317 00000 n 
+0004113803 00000 n 
+0004111586 00000 n 
+0004113923 00000 n 
+0004113989 00000 n 
+0004114054 00000 n 
+0004114120 00000 n 
+0004114185 00000 n 
+0004114251 00000 n 
+0005331743 00000 n 
+0004117275 00000 n 
+0004116694 00000 n 
+0004114434 00000 n 
+0004116814 00000 n 
+0004116880 00000 n 
+0004116946 00000 n 
+0004117012 00000 n 
+0004117077 00000 n 
+0004117143 00000 n 
+0004117209 00000 n 
+0004120021 00000 n 
+0004119835 00000 n 
+0004117378 00000 n 
+0004119955 00000 n 
+0004122568 00000 n 
+0004122119 00000 n 
+0004120124 00000 n 
+0004122239 00000 n 
+0004122305 00000 n 
+0004122371 00000 n 
+0004122437 00000 n 
+0004122502 00000 n 
+0004125295 00000 n 
+0004124845 00000 n 
+0004122671 00000 n 
+0004124965 00000 n 
+0004125031 00000 n 
+0004125097 00000 n 
+0004125163 00000 n 
+0004125229 00000 n 
+0004127758 00000 n 
+0004127440 00000 n 
+0004125412 00000 n 
+0004127560 00000 n 
+0004127626 00000 n 
+0004127692 00000 n 
+0004130358 00000 n 
+0004130106 00000 n 
+0004127861 00000 n 
+0004130226 00000 n 
 0004130292 00000 n 
-0004130444 00000 n 
-0004130596 00000 n 
-0004130747 00000 n 
-0004130900 00000 n 
-0004131053 00000 n 
-0004131206 00000 n 
-0004131359 00000 n 
-0004131512 00000 n 
-0004131665 00000 n 
-0004131817 00000 n 
-0004131969 00000 n 
-0004132121 00000 n 
-0004132273 00000 n 
-0004135825 00000 n 
-0004132492 00000 n 
-0004112631 00000 n 
-0004110753 00000 n 
-0004132426 00000 n 
-0004135978 00000 n 
-0004136131 00000 n 
-0004136284 00000 n 
-0004136437 00000 n 
-0004136590 00000 n 
-0004136743 00000 n 
-0004136896 00000 n 
-0004137049 00000 n 
-0004137202 00000 n 
-0004137354 00000 n 
-0004137507 00000 n 
-0004137660 00000 n 
-0004137813 00000 n 
-0004137965 00000 n 
-0004138117 00000 n 
-0004138270 00000 n 
-0004138423 00000 n 
-0004138576 00000 n 
-0004138726 00000 n 
-0004138879 00000 n 
-0004139031 00000 n 
-0004139184 00000 n 
-0004139336 00000 n 
-0004139488 00000 n 
-0004139640 00000 n 
-0004139792 00000 n 
-0004139945 00000 n 
-0004140098 00000 n 
-0004140250 00000 n 
-0004140402 00000 n 
-0004140555 00000 n 
-0004140708 00000 n 
-0004140861 00000 n 
-0004141014 00000 n 
-0004141167 00000 n 
-0004141320 00000 n 
-0004141473 00000 n 
-0004141624 00000 n 
-0004141775 00000 n 
-0004141927 00000 n 
-0004142080 00000 n 
-0004142232 00000 n 
-0004142384 00000 n 
-0004142537 00000 n 
-0004142690 00000 n 
-0004142843 00000 n 
-0004142996 00000 n 
-0004143149 00000 n 
-0004143301 00000 n 
-0004143452 00000 n 
-0004143603 00000 n 
-0004143754 00000 n 
-0004143905 00000 n 
-0004144056 00000 n 
-0004144207 00000 n 
-0004144360 00000 n 
-0004144512 00000 n 
-0004144665 00000 n 
-0004144817 00000 n 
-0004144970 00000 n 
-0004145123 00000 n 
-0004145276 00000 n 
-0004145428 00000 n 
-0004145581 00000 n 
-0004145733 00000 n 
-0004145886 00000 n 
-0004146039 00000 n 
-0004146192 00000 n 
-0004146345 00000 n 
-0004146498 00000 n 
-0004146651 00000 n 
-0004146804 00000 n 
-0004146956 00000 n 
-0004147104 00000 n 
-0004147256 00000 n 
-0004147409 00000 n 
-0004147561 00000 n 
-0004147713 00000 n 
-0004147866 00000 n 
-0004148019 00000 n 
-0004148172 00000 n 
-0004148325 00000 n 
-0004148478 00000 n 
-0004148631 00000 n 
-0004148783 00000 n 
-0004148936 00000 n 
-0004149089 00000 n 
-0004149241 00000 n 
-0004149391 00000 n 
-0004149542 00000 n 
-0004149693 00000 n 
-0004149844 00000 n 
-0004149997 00000 n 
-0004150150 00000 n 
-0004150302 00000 n 
-0004150453 00000 n 
-0004150604 00000 n 
-0004150757 00000 n 
-0004150910 00000 n 
-0004151063 00000 n 
-0004151215 00000 n 
-0004151368 00000 n 
-0004151520 00000 n 
-0004151673 00000 n 
-0004151826 00000 n 
-0004151978 00000 n 
-0004152131 00000 n 
-0004152283 00000 n 
-0004152436 00000 n 
-0004152588 00000 n 
+0005331876 00000 n 
+0004133069 00000 n 
+0004132817 00000 n 
+0004130475 00000 n 
+0004132937 00000 n 
+0004133003 00000 n 
+0004135456 00000 n 
+0004135138 00000 n 
+0004133172 00000 n 
+0004135258 00000 n 
+0004135324 00000 n 
+0004135390 00000 n 
+0004137790 00000 n 
+0004137340 00000 n 
+0004135573 00000 n 
+0004137460 00000 n 
+0004137526 00000 n 
+0004137592 00000 n 
+0004137658 00000 n 
+0004137724 00000 n 
+0004139871 00000 n 
+0004139620 00000 n 
+0004137893 00000 n 
+0004139740 00000 n 
+0004141265 00000 n 
+0004141442 00000 n 
+0004141901 00000 n 
+0004141103 00000 n 
+0004140002 00000 n 
+0004141835 00000 n 
+0004141639 00000 n 
+0004142306 00000 n 
+0004142120 00000 n 
+0004142018 00000 n 
+0004142240 00000 n 
+0005332009 00000 n 
+0004144282 00000 n 
+0004144600 00000 n 
+0004147165 00000 n 
+0004144969 00000 n 
+0004144120 00000 n 
+0004142349 00000 n 
+0004144772 00000 n 
+0004144903 00000 n 
+0004144441 00000 n 
+0004147313 00000 n 
+0004147531 00000 n 
+0004147013 00000 n 
+0004145100 00000 n 
+0004147465 00000 n 
+0004149784 00000 n 
+0004149998 00000 n 
+0004149642 00000 n 
+0004147648 00000 n 
+0004149932 00000 n 
+0004152397 00000 n 
+0004152622 00000 n 
+0004152255 00000 n 
+0004150115 00000 n 
+0004152556 00000 n 
+0004153405 00000 n 
+0004153219 00000 n 
 0004152739 00000 n 
-0004152891 00000 n 
-0004153042 00000 n 
-0004153194 00000 n 
-0004153347 00000 n 
-0004153500 00000 n 
-0004153653 00000 n 
-0004153804 00000 n 
-0004157646 00000 n 
-0004154023 00000 n 
-0004134503 00000 n 
-0004132609 00000 n 
-0004153957 00000 n 
-0004157799 00000 n 
-0004157952 00000 n 
-0004158105 00000 n 
-0004158258 00000 n 
-0004158411 00000 n 
-0004158564 00000 n 
-0004158716 00000 n 
-0004158869 00000 n 
-0004159022 00000 n 
-0004159174 00000 n 
-0004159326 00000 n 
-0004159478 00000 n 
-0004159628 00000 n 
-0004159781 00000 n 
-0004159934 00000 n 
-0004160087 00000 n 
-0004160240 00000 n 
-0004160392 00000 n 
-0004160545 00000 n 
-0004160697 00000 n 
-0004160850 00000 n 
-0004161003 00000 n 
-0004161155 00000 n 
-0004161307 00000 n 
-0004161460 00000 n 
-0004161613 00000 n 
-0004161766 00000 n 
-0004161919 00000 n 
-0004162072 00000 n 
-0004162223 00000 n 
-0004162374 00000 n 
-0004162525 00000 n 
-0004162676 00000 n 
-0004162828 00000 n 
-0004162981 00000 n 
-0004163134 00000 n 
-0004163287 00000 n 
-0004163439 00000 n 
-0004163591 00000 n 
-0004163744 00000 n 
-0004163897 00000 n 
-0004164050 00000 n 
-0004164203 00000 n 
-0004164356 00000 n 
-0004164508 00000 n 
-0004164661 00000 n 
-0004164813 00000 n 
-0004164965 00000 n 
-0004165117 00000 n 
-0004165269 00000 n 
-0004165421 00000 n 
-0004165574 00000 n 
-0004165726 00000 n 
-0004165879 00000 n 
-0004166031 00000 n 
-0004166182 00000 n 
-0004166334 00000 n 
-0004166487 00000 n 
-0004166637 00000 n 
-0004166787 00000 n 
-0004166938 00000 n 
-0004167089 00000 n 
-0004167240 00000 n 
-0004167391 00000 n 
-0004167542 00000 n 
-0004167695 00000 n 
-0004167848 00000 n 
-0004168000 00000 n 
-0004168153 00000 n 
-0004168306 00000 n 
-0004168459 00000 n 
-0004168612 00000 n 
-0004168764 00000 n 
-0004168917 00000 n 
-0004169070 00000 n 
-0004169223 00000 n 
-0004169375 00000 n 
-0004169527 00000 n 
-0004169679 00000 n 
-0004169831 00000 n 
-0004169983 00000 n 
-0004170135 00000 n 
-0004170287 00000 n 
-0004170439 00000 n 
-0004170591 00000 n 
-0004170743 00000 n 
-0004170895 00000 n 
-0004171047 00000 n 
-0004171200 00000 n 
-0004171353 00000 n 
-0004171506 00000 n 
-0004171658 00000 n 
-0004171811 00000 n 
-0004171964 00000 n 
-0004172117 00000 n 
-0004172270 00000 n 
-0004172422 00000 n 
-0004172574 00000 n 
-0004172725 00000 n 
-0004172877 00000 n 
-0004173029 00000 n 
-0004173182 00000 n 
-0004173335 00000 n 
-0004173487 00000 n 
-0004173640 00000 n 
-0004173793 00000 n 
-0004173946 00000 n 
-0004174099 00000 n 
-0004174252 00000 n 
-0004174405 00000 n 
-0004174558 00000 n 
-0004174711 00000 n 
-0004174863 00000 n 
-0004175014 00000 n 
-0004175166 00000 n 
-0004175318 00000 n 
-0004175470 00000 n 
-0004175623 00000 n 
-0004175776 00000 n 
-0004175928 00000 n 
-0004176080 00000 n 
-0004176232 00000 n 
-0004176384 00000 n 
-0004176537 00000 n 
-0004176690 00000 n 
-0004176842 00000 n 
-0004176991 00000 n 
-0004177144 00000 n 
-0004177297 00000 n 
-0004177449 00000 n 
-0004177600 00000 n 
-0004177752 00000 n 
-0004177905 00000 n 
-0004178058 00000 n 
-0004178211 00000 n 
-0004178364 00000 n 
-0004178516 00000 n 
-0004178669 00000 n 
-0004178822 00000 n 
-0004178975 00000 n 
-0004179128 00000 n 
-0004179280 00000 n 
-0004179432 00000 n 
-0004179584 00000 n 
-0004179737 00000 n 
-0004179890 00000 n 
-0004180043 00000 n 
-0004180196 00000 n 
-0004180349 00000 n 
-0004180502 00000 n 
-0004180655 00000 n 
-0004180808 00000 n 
-0004180960 00000 n 
-0004181113 00000 n 
-0004181265 00000 n 
-0004181418 00000 n 
-0004181570 00000 n 
-0004181721 00000 n 
-0004181873 00000 n 
-0004182025 00000 n 
-0004182178 00000 n 
-0004182331 00000 n 
-0004182484 00000 n 
-0004182637 00000 n 
-0004182790 00000 n 
-0004182942 00000 n 
-0004183095 00000 n 
-0004186364 00000 n 
-0004186516 00000 n 
-0004186668 00000 n 
-0004183314 00000 n 
-0004155834 00000 n 
-0004154140 00000 n 
-0004183248 00000 n 
-0004186821 00000 n 
-0004186974 00000 n 
-0004187126 00000 n 
-0004187277 00000 n 
-0004187427 00000 n 
-0004187579 00000 n 
-0004187731 00000 n 
-0004187883 00000 n 
-0004188036 00000 n 
-0004188188 00000 n 
-0004188340 00000 n 
-0004188492 00000 n 
-0004188645 00000 n 
-0004188798 00000 n 
-0004188951 00000 n 
-0004189104 00000 n 
-0004189257 00000 n 
-0004189410 00000 n 
-0004189563 00000 n 
-0004189715 00000 n 
-0004189867 00000 n 
-0004190019 00000 n 
-0004190171 00000 n 
-0004190323 00000 n 
-0004190475 00000 n 
-0004190627 00000 n 
-0004190780 00000 n 
-0004190933 00000 n 
-0004191086 00000 n 
-0004191239 00000 n 
-0004191392 00000 n 
-0004191545 00000 n 
-0004191698 00000 n 
-0004191851 00000 n 
-0004192004 00000 n 
-0004192157 00000 n 
-0004192310 00000 n 
-0004192463 00000 n 
-0004192616 00000 n 
-0004192768 00000 n 
-0004192920 00000 n 
-0004193072 00000 n 
-0004193225 00000 n 
-0004193378 00000 n 
-0004193531 00000 n 
-0004193684 00000 n 
-0004193835 00000 n 
-0004193988 00000 n 
-0004194139 00000 n 
-0004194292 00000 n 
-0004194445 00000 n 
-0004194597 00000 n 
-0004194750 00000 n 
-0004194903 00000 n 
-0004195056 00000 n 
-0004195209 00000 n 
-0004195362 00000 n 
-0004195515 00000 n 
-0004195667 00000 n 
-0004195819 00000 n 
-0004195972 00000 n 
-0004196124 00000 n 
-0004196274 00000 n 
-0004196427 00000 n 
-0004196579 00000 n 
-0004196731 00000 n 
-0004196884 00000 n 
-0004197037 00000 n 
-0004197188 00000 n 
-0004197341 00000 n 
-0004197494 00000 n 
-0004197647 00000 n 
-0004197800 00000 n 
-0004197953 00000 n 
-0004198106 00000 n 
-0004198259 00000 n 
-0004198411 00000 n 
-0004198564 00000 n 
-0004198716 00000 n 
-0004198869 00000 n 
-0004199020 00000 n 
-0004199171 00000 n 
-0004199322 00000 n 
-0004199475 00000 n 
-0004199627 00000 n 
-0004199780 00000 n 
-0004199932 00000 n 
-0004200085 00000 n 
-0004200238 00000 n 
-0004200389 00000 n 
-0004200542 00000 n 
-0004200695 00000 n 
-0004200848 00000 n 
-0004201001 00000 n 
-0004201154 00000 n 
-0004201307 00000 n 
-0004201459 00000 n 
-0004201611 00000 n 
-0004201763 00000 n 
-0004201915 00000 n 
-0004202067 00000 n 
-0004202219 00000 n 
-0004202372 00000 n 
-0004202525 00000 n 
-0004202678 00000 n 
-0004202831 00000 n 
-0004202984 00000 n 
-0004203136 00000 n 
-0004203285 00000 n 
-0004203436 00000 n 
-0004203587 00000 n 
-0004203737 00000 n 
-0004203890 00000 n 
-0004204042 00000 n 
-0004204195 00000 n 
-0004204347 00000 n 
-0004204499 00000 n 
-0004204652 00000 n 
-0004204805 00000 n 
-0004204958 00000 n 
-0004208281 00000 n 
-0004205177 00000 n 
-0004185002 00000 n 
-0004183417 00000 n 
-0004205111 00000 n 
-0004775344 00000 n 
-0004208430 00000 n 
-0004208581 00000 n 
-0004208733 00000 n 
-0004208886 00000 n 
-0004209039 00000 n 
-0004209192 00000 n 
-0004209345 00000 n 
-0004209497 00000 n 
-0004209649 00000 n 
-0004209801 00000 n 
-0004209953 00000 n 
-0004210103 00000 n 
-0004210256 00000 n 
-0004210409 00000 n 
-0004210561 00000 n 
-0004210714 00000 n 
-0004210867 00000 n 
-0004211020 00000 n 
-0004211172 00000 n 
-0004211325 00000 n 
-0004211478 00000 n 
-0004211631 00000 n 
-0004211784 00000 n 
-0004211937 00000 n 
-0004212090 00000 n 
-0004212243 00000 n 
-0004212396 00000 n 
-0004212549 00000 n 
-0004212702 00000 n 
-0004212854 00000 n 
-0004213006 00000 n 
-0004213159 00000 n 
-0004213312 00000 n 
-0004213465 00000 n 
-0004213617 00000 n 
-0004213770 00000 n 
-0004213923 00000 n 
-0004214073 00000 n 
-0004214226 00000 n 
-0004214379 00000 n 
-0004214532 00000 n 
-0004214685 00000 n 
-0004214837 00000 n 
-0004214989 00000 n 
-0004215141 00000 n 
-0004215293 00000 n 
-0004215446 00000 n 
-0004215598 00000 n 
-0004215751 00000 n 
-0004215904 00000 n 
-0004216057 00000 n 
-0004216210 00000 n 
-0004216363 00000 n 
-0004216516 00000 n 
-0004216668 00000 n 
-0004216821 00000 n 
-0004216974 00000 n 
-0004217126 00000 n 
-0004217278 00000 n 
-0004217430 00000 n 
-0004217582 00000 n 
-0004217733 00000 n 
-0004217886 00000 n 
-0004218039 00000 n 
-0004218192 00000 n 
-0004218344 00000 n 
-0004218497 00000 n 
-0004218650 00000 n 
-0004218803 00000 n 
-0004218956 00000 n 
-0004219109 00000 n 
-0004219262 00000 n 
-0004219415 00000 n 
-0004219568 00000 n 
-0004219721 00000 n 
-0004219874 00000 n 
-0004220027 00000 n 
-0004220180 00000 n 
-0004220332 00000 n 
-0004220482 00000 n 
-0004220635 00000 n 
-0004220788 00000 n 
-0004220941 00000 n 
-0004221094 00000 n 
-0004221245 00000 n 
-0004221397 00000 n 
-0004221550 00000 n 
-0004221701 00000 n 
-0004221854 00000 n 
-0004222007 00000 n 
-0004222160 00000 n 
-0004222313 00000 n 
-0004222466 00000 n 
-0004222619 00000 n 
-0004222772 00000 n 
-0004222925 00000 n 
-0004223078 00000 n 
-0004223231 00000 n 
-0004223384 00000 n 
-0004223536 00000 n 
-0004223688 00000 n 
-0004223841 00000 n 
-0004223994 00000 n 
-0004224147 00000 n 
-0004224300 00000 n 
-0004224453 00000 n 
-0004224606 00000 n 
-0004224759 00000 n 
-0004224912 00000 n 
-0004225065 00000 n 
-0004225217 00000 n 
-0004225368 00000 n 
-0004225519 00000 n 
-0004225669 00000 n 
-0004225822 00000 n 
-0004225975 00000 n 
-0004226128 00000 n 
-0004226281 00000 n 
-0004226434 00000 n 
-0004226587 00000 n 
-0004226739 00000 n 
-0004226891 00000 n 
-0004227044 00000 n 
-0004227196 00000 n 
-0004227348 00000 n 
-0004227501 00000 n 
-0004227654 00000 n 
-0004227807 00000 n 
-0004227960 00000 n 
-0004230835 00000 n 
-0004228179 00000 n 
-0004206849 00000 n 
-0004205294 00000 n 
-0004228113 00000 n 
-0004230988 00000 n 
-0004231140 00000 n 
-0004231293 00000 n 
-0004231446 00000 n 
-0004231599 00000 n 
-0004231747 00000 n 
-0004231899 00000 n 
-0004232050 00000 n 
-0004232203 00000 n 
-0004232356 00000 n 
-0004232509 00000 n 
-0004232661 00000 n 
-0004232813 00000 n 
-0004232966 00000 n 
-0004233118 00000 n 
-0004233271 00000 n 
-0004233424 00000 n 
-0004233577 00000 n 
-0004233730 00000 n 
-0004233883 00000 n 
-0004234035 00000 n 
-0004234188 00000 n 
-0004234341 00000 n 
-0004234493 00000 n 
-0004234645 00000 n 
-0004234796 00000 n 
-0004234948 00000 n 
-0004235100 00000 n 
-0004235252 00000 n 
-0004235404 00000 n 
-0004235555 00000 n 
-0004235708 00000 n 
-0004235859 00000 n 
-0004236012 00000 n 
-0004236164 00000 n 
-0004236317 00000 n 
-0004236470 00000 n 
-0004236623 00000 n 
-0004236775 00000 n 
-0004236928 00000 n 
-0004237081 00000 n 
-0004237234 00000 n 
-0004237386 00000 n 
-0004237539 00000 n 
-0004237692 00000 n 
-0004237845 00000 n 
-0004237998 00000 n 
-0004238151 00000 n 
-0004238304 00000 n 
-0004238457 00000 n 
-0004238610 00000 n 
-0004238762 00000 n 
-0004238915 00000 n 
-0004239068 00000 n 
-0004239219 00000 n 
-0004239371 00000 n 
-0004239523 00000 n 
-0004239676 00000 n 
-0004239829 00000 n 
-0004239982 00000 n 
-0004240135 00000 n 
-0004240288 00000 n 
-0004240440 00000 n 
-0004240592 00000 n 
-0004240742 00000 n 
-0004240895 00000 n 
-0004241048 00000 n 
-0004241201 00000 n 
-0004241354 00000 n 
-0004241507 00000 n 
-0004241658 00000 n 
-0004241811 00000 n 
-0004241964 00000 n 
-0004242117 00000 n 
-0004242270 00000 n 
-0004242423 00000 n 
-0004242573 00000 n 
-0004242725 00000 n 
-0004242877 00000 n 
-0004243030 00000 n 
-0004243183 00000 n 
-0004243335 00000 n 
-0004243488 00000 n 
-0004243640 00000 n 
-0004243793 00000 n 
-0004243946 00000 n 
-0004244099 00000 n 
-0004244250 00000 n 
-0004244402 00000 n 
-0004244554 00000 n 
-0004244707 00000 n 
-0004244859 00000 n 
-0004245012 00000 n 
-0004245164 00000 n 
-0004245316 00000 n 
-0004245469 00000 n 
-0004245620 00000 n 
-0004245773 00000 n 
-0004245926 00000 n 
-0004249134 00000 n 
-0004246145 00000 n 
-0004229703 00000 n 
-0004228296 00000 n 
-0004246079 00000 n 
-0004249285 00000 n 
-0004249438 00000 n 
-0004249591 00000 n 
-0004249744 00000 n 
-0004249896 00000 n 
-0004250048 00000 n 
-0004250197 00000 n 
-0004250347 00000 n 
-0004250500 00000 n 
-0004250652 00000 n 
-0004250804 00000 n 
-0004250956 00000 n 
-0004251109 00000 n 
-0004251262 00000 n 
-0004251415 00000 n 
-0004251568 00000 n 
-0004251721 00000 n 
-0004251874 00000 n 
-0004252026 00000 n 
-0004252177 00000 n 
-0004252328 00000 n 
-0004252481 00000 n 
-0004252634 00000 n 
-0004252787 00000 n 
-0004252940 00000 n 
-0004253092 00000 n 
-0004253244 00000 n 
-0004253397 00000 n 
-0004253550 00000 n 
-0004253702 00000 n 
-0004253855 00000 n 
-0004254008 00000 n 
-0004254161 00000 n 
-0004254314 00000 n 
-0004254466 00000 n 
-0004254619 00000 n 
-0004254771 00000 n 
-0004254924 00000 n 
-0004255076 00000 n 
-0004255228 00000 n 
-0004255380 00000 n 
-0004255530 00000 n 
-0004255683 00000 n 
-0004255835 00000 n 
-0004255988 00000 n 
-0004256141 00000 n 
-0004256294 00000 n 
-0004256446 00000 n 
-0004256599 00000 n 
-0004256751 00000 n 
-0004256902 00000 n 
-0004257054 00000 n 
-0004257205 00000 n 
-0004257357 00000 n 
-0004257509 00000 n 
-0004257661 00000 n 
-0004257814 00000 n 
-0004257967 00000 n 
-0004258119 00000 n 
-0004258272 00000 n 
-0004258425 00000 n 
-0004258577 00000 n 
-0004258727 00000 n 
-0004258879 00000 n 
-0004259031 00000 n 
-0004259184 00000 n 
-0004259334 00000 n 
-0004259487 00000 n 
-0004259640 00000 n 
-0004259793 00000 n 
-0004259946 00000 n 
-0004260099 00000 n 
-0004260252 00000 n 
-0004260405 00000 n 
-0004260557 00000 n 
-0004260709 00000 n 
-0004260861 00000 n 
-0004261014 00000 n 
-0004261167 00000 n 
-0004261320 00000 n 
-0004261473 00000 n 
-0004261625 00000 n 
-0004261776 00000 n 
-0004261928 00000 n 
-0004262081 00000 n 
-0004262234 00000 n 
-0004262387 00000 n 
-0004262540 00000 n 
-0004262691 00000 n 
-0004262842 00000 n 
-0004262994 00000 n 
-0004263147 00000 n 
-0004263300 00000 n 
-0004263451 00000 n 
-0004263604 00000 n 
-0004263756 00000 n 
-0004263909 00000 n 
-0004264061 00000 n 
-0004264214 00000 n 
-0004264366 00000 n 
-0004264518 00000 n 
-0004264670 00000 n 
-0004264821 00000 n 
-0004264973 00000 n 
-0004268522 00000 n 
-0004268674 00000 n 
-0004265192 00000 n 
-0004247952 00000 n 
-0004246262 00000 n 
-0004265126 00000 n 
-0004268826 00000 n 
-0004268979 00000 n 
-0004269131 00000 n 
-0004269283 00000 n 
-0004269435 00000 n 
-0004269587 00000 n 
-0004269739 00000 n 
-0004269892 00000 n 
-0004270045 00000 n 
-0004270198 00000 n 
-0004270350 00000 n 
-0004270499 00000 n 
-0004270652 00000 n 
-0004270805 00000 n 
-0004270958 00000 n 
-0004271111 00000 n 
-0004271263 00000 n 
-0004271416 00000 n 
-0004271568 00000 n 
-0004271721 00000 n 
-0004271874 00000 n 
-0004272027 00000 n 
-0004272180 00000 n 
-0004272333 00000 n 
-0004272485 00000 n 
-0004272638 00000 n 
-0004272786 00000 n 
-0004272939 00000 n 
-0004273092 00000 n 
-0004273244 00000 n 
-0004273396 00000 n 
-0004273548 00000 n 
-0004273700 00000 n 
-0004273852 00000 n 
-0004274004 00000 n 
-0004274157 00000 n 
-0004274308 00000 n 
-0004274460 00000 n 
-0004274613 00000 n 
-0004274766 00000 n 
-0004274918 00000 n 
-0004275070 00000 n 
-0004275223 00000 n 
-0004275376 00000 n 
-0004275529 00000 n 
-0004275681 00000 n 
-0004275834 00000 n 
-0004275987 00000 n 
-0004276140 00000 n 
-0004276293 00000 n 
-0004276446 00000 n 
-0004276599 00000 n 
-0004276752 00000 n 
-0004276905 00000 n 
-0004277057 00000 n 
-0004277208 00000 n 
-0004277360 00000 n 
-0004277512 00000 n 
-0004277664 00000 n 
-0004277817 00000 n 
-0004277969 00000 n 
-0004278122 00000 n 
-0004278275 00000 n 
-0004278428 00000 n 
-0004278581 00000 n 
-0004278734 00000 n 
-0004278886 00000 n 
-0004279039 00000 n 
-0004279192 00000 n 
-0004279345 00000 n 
-0004279498 00000 n 
-0004279650 00000 n 
-0004279802 00000 n 
-0004279954 00000 n 
-0004280106 00000 n 
-0004280257 00000 n 
-0004280409 00000 n 
-0004280561 00000 n 
-0004280713 00000 n 
-0004280866 00000 n 
-0004281019 00000 n 
-0004281172 00000 n 
-0004281325 00000 n 
-0004281478 00000 n 
-0004281630 00000 n 
-0004281781 00000 n 
-0004281934 00000 n 
-0004282085 00000 n 
-0004282238 00000 n 
-0004282391 00000 n 
-0004282544 00000 n 
-0004282697 00000 n 
-0004282850 00000 n 
-0004283003 00000 n 
-0004283156 00000 n 
-0004283308 00000 n 
-0004283461 00000 n 
-0004283614 00000 n 
-0004283767 00000 n 
-0004283920 00000 n 
-0004284073 00000 n 
-0004284226 00000 n 
-0004284379 00000 n 
-0004284532 00000 n 
-0004284685 00000 n 
-0004284838 00000 n 
-0004284991 00000 n 
-0004285144 00000 n 
-0004285295 00000 n 
-0004285447 00000 n 
-0004285600 00000 n 
-0004285753 00000 n 
-0004285906 00000 n 
-0004286058 00000 n 
-0004286210 00000 n 
-0004286362 00000 n 
-0004286515 00000 n 
-0004286667 00000 n 
-0004286820 00000 n 
-0004286973 00000 n 
-0004287126 00000 n 
-0004287279 00000 n 
-0004287431 00000 n 
-0004287583 00000 n 
-0004287735 00000 n 
-0004287888 00000 n 
-0004288041 00000 n 
-0004288194 00000 n 
-0004288347 00000 n 
-0004288500 00000 n 
-0004288653 00000 n 
-0004288806 00000 n 
-0004288959 00000 n 
-0004289112 00000 n 
-0004289265 00000 n 
-0004289416 00000 n 
-0004289568 00000 n 
-0004289720 00000 n 
-0004289871 00000 n 
-0004290023 00000 n 
-0004290175 00000 n 
-0004290328 00000 n 
-0004290481 00000 n 
-0004290634 00000 n 
-0004290787 00000 n 
-0004290940 00000 n 
-0004291092 00000 n 
-0004291244 00000 n 
-0004291395 00000 n 
-0004291548 00000 n 
-0004291701 00000 n 
-0004294781 00000 n 
-0004294933 00000 n 
-0004295086 00000 n 
-0004295239 00000 n 
-0004291919 00000 n 
-0004266860 00000 n 
-0004265309 00000 n 
-0004291853 00000 n 
-0004295392 00000 n 
-0004295545 00000 n 
-0004295697 00000 n 
-0004295850 00000 n 
-0004296002 00000 n 
-0004296151 00000 n 
-0004296303 00000 n 
-0004296455 00000 n 
-0004296605 00000 n 
-0004296758 00000 n 
-0004296911 00000 n 
-0004297064 00000 n 
-0004297217 00000 n 
-0004297370 00000 n 
-0004297522 00000 n 
-0004297675 00000 n 
-0004297828 00000 n 
-0004297981 00000 n 
-0004298134 00000 n 
-0004298286 00000 n 
-0004298438 00000 n 
-0004298589 00000 n 
-0004298742 00000 n 
-0004298895 00000 n 
-0004299047 00000 n 
-0004299199 00000 n 
-0004299352 00000 n 
-0004299505 00000 n 
-0004299658 00000 n 
-0004299811 00000 n 
-0004299964 00000 n 
-0004300117 00000 n 
-0004300270 00000 n 
-0004300421 00000 n 
-0004300571 00000 n 
-0004300724 00000 n 
-0004300877 00000 n 
-0004301029 00000 n 
-0004301181 00000 n 
-0004301334 00000 n 
-0004301487 00000 n 
-0004301640 00000 n 
-0004301793 00000 n 
-0004301946 00000 n 
-0004302099 00000 n 
-0004302251 00000 n 
-0004302404 00000 n 
-0004302556 00000 n 
-0004302708 00000 n 
-0004302860 00000 n 
-0004303012 00000 n 
-0004303165 00000 n 
-0004303318 00000 n 
-0004303471 00000 n 
-0004303623 00000 n 
-0004303776 00000 n 
-0004303928 00000 n 
-0004304080 00000 n 
-0004304231 00000 n 
-0004304384 00000 n 
-0004304537 00000 n 
-0004304690 00000 n 
-0004304843 00000 n 
-0004304996 00000 n 
-0004305149 00000 n 
-0004305302 00000 n 
-0004305454 00000 n 
-0004305607 00000 n 
-0004305758 00000 n 
-0004305911 00000 n 
-0004306064 00000 n 
-0004306217 00000 n 
-0004306370 00000 n 
-0004306523 00000 n 
-0004306675 00000 n 
-0004306828 00000 n 
-0004306980 00000 n 
-0004307132 00000 n 
-0004307285 00000 n 
-0004307438 00000 n 
-0004307589 00000 n 
-0004307740 00000 n 
-0004307893 00000 n 
-0004308046 00000 n 
-0004308198 00000 n 
-0004308351 00000 n 
-0004308503 00000 n 
-0004308656 00000 n 
-0004308808 00000 n 
-0004308959 00000 n 
-0004309108 00000 n 
-0004309259 00000 n 
-0004309410 00000 n 
-0004309560 00000 n 
-0004309712 00000 n 
-0004309863 00000 n 
-0004310015 00000 n 
-0004310167 00000 n 
-0004313297 00000 n 
-0004313449 00000 n 
-0004313601 00000 n 
-0004313753 00000 n 
-0004313904 00000 n 
-0004314054 00000 n 
-0004314205 00000 n 
-0004314356 00000 n 
-0004314509 00000 n 
-0004314662 00000 n 
-0004314814 00000 n 
-0004314967 00000 n 
-0004315120 00000 n 
-0004315273 00000 n 
-0004315426 00000 n 
-0004315579 00000 n 
-0004315732 00000 n 
-0004310386 00000 n 
-0004293629 00000 n 
-0004292022 00000 n 
-0004310320 00000 n 
-0004315885 00000 n 
-0004316037 00000 n 
-0004316188 00000 n 
-0004316335 00000 n 
-0004316488 00000 n 
-0004316641 00000 n 
-0004316793 00000 n 
-0004316946 00000 n 
-0004317099 00000 n 
-0004317252 00000 n 
-0004317404 00000 n 
-0004317557 00000 n 
-0004317709 00000 n 
-0004317861 00000 n 
-0004318013 00000 n 
-0004318165 00000 n 
-0004318317 00000 n 
-0004318469 00000 n 
-0004318622 00000 n 
-0004318775 00000 n 
-0004318927 00000 n 
-0004319079 00000 n 
-0004319231 00000 n 
-0004319383 00000 n 
-0004319536 00000 n 
-0004319689 00000 n 
-0004319841 00000 n 
-0004319992 00000 n 
-0004320143 00000 n 
-0004320296 00000 n 
-0004320449 00000 n 
-0004320602 00000 n 
-0004320755 00000 n 
-0004320908 00000 n 
-0004321060 00000 n 
-0004321213 00000 n 
-0004321366 00000 n 
-0004321518 00000 n 
-0004321671 00000 n 
-0004321824 00000 n 
-0004321976 00000 n 
-0004322129 00000 n 
-0004322282 00000 n 
-0004322435 00000 n 
-0004322587 00000 n 
-0004322739 00000 n 
-0004322890 00000 n 
-0004323043 00000 n 
-0004323196 00000 n 
-0004323349 00000 n 
-0004323502 00000 n 
-0004323655 00000 n 
-0004323807 00000 n 
-0004323960 00000 n 
-0004324111 00000 n 
-0004324262 00000 n 
-0004324413 00000 n 
-0004324565 00000 n 
-0004324717 00000 n 
-0004324868 00000 n 
-0004325021 00000 n 
-0004325174 00000 n 
-0004325327 00000 n 
-0004325480 00000 n 
-0004325632 00000 n 
-0004325784 00000 n 
-0004325935 00000 n 
-0004326087 00000 n 
-0004326239 00000 n 
-0004326391 00000 n 
-0004326543 00000 n 
-0004326695 00000 n 
-0004326848 00000 n 
-0004327000 00000 n 
-0004327153 00000 n 
-0004327305 00000 n 
+0004153339 00000 n 
+0004153796 00000 n 
+0004153610 00000 n 
+0004153508 00000 n 
+0004153730 00000 n 
+0005332142 00000 n 
+0004156687 00000 n 
+0004156839 00000 n 
+0004156991 00000 n 
+0004157142 00000 n 
+0004157293 00000 n 
+0004157446 00000 n 
+0004157599 00000 n 
+0004157752 00000 n 
+0004157905 00000 n 
+0004158057 00000 n 
+0004158209 00000 n 
+0004158362 00000 n 
+0004158515 00000 n 
+0004158667 00000 n 
+0004158820 00000 n 
+0004158973 00000 n 
+0004159126 00000 n 
+0004159279 00000 n 
+0004159431 00000 n 
+0004159584 00000 n 
+0004159737 00000 n 
+0004159890 00000 n 
+0004160043 00000 n 
+0004160196 00000 n 
+0004160349 00000 n 
+0004160501 00000 n 
+0004160654 00000 n 
+0004160805 00000 n 
+0004160957 00000 n 
+0004161109 00000 n 
+0004161261 00000 n 
+0004161413 00000 n 
+0004161566 00000 n 
+0004161719 00000 n 
+0004161872 00000 n 
+0004162025 00000 n 
+0004162178 00000 n 
+0004162331 00000 n 
+0004162484 00000 n 
+0004162637 00000 n 
+0004162790 00000 n 
+0004162943 00000 n 
+0004163096 00000 n 
+0004163249 00000 n 
+0004163402 00000 n 
+0004163554 00000 n 
+0004163707 00000 n 
+0004163859 00000 n 
+0004164012 00000 n 
+0004164165 00000 n 
+0004164318 00000 n 
+0004164470 00000 n 
+0004164622 00000 n 
+0004164773 00000 n 
+0004164926 00000 n 
+0004165077 00000 n 
+0004165229 00000 n 
+0004165380 00000 n 
+0004165532 00000 n 
+0004165684 00000 n 
+0004165837 00000 n 
+0004165990 00000 n 
+0004166143 00000 n 
+0004166296 00000 n 
+0004166448 00000 n 
+0004166601 00000 n 
+0004166754 00000 n 
+0004166907 00000 n 
+0004167060 00000 n 
+0004167213 00000 n 
+0004167363 00000 n 
+0004167516 00000 n 
+0004167669 00000 n 
+0004167822 00000 n 
+0004167975 00000 n 
+0004168127 00000 n 
+0004168278 00000 n 
+0004168430 00000 n 
+0004168583 00000 n 
+0004168735 00000 n 
+0004168888 00000 n 
+0004169041 00000 n 
+0004169194 00000 n 
+0004169347 00000 n 
+0004169499 00000 n 
+0004169651 00000 n 
+0004169803 00000 n 
+0004169955 00000 n 
+0004170108 00000 n 
+0004170261 00000 n 
+0004170413 00000 n 
+0004170566 00000 n 
+0004170719 00000 n 
+0004170872 00000 n 
+0004171025 00000 n 
+0004171177 00000 n 
+0004171330 00000 n 
+0004171483 00000 n 
+0004171636 00000 n 
+0004171788 00000 n 
+0004171940 00000 n 
+0004172092 00000 n 
+0004172244 00000 n 
+0004172396 00000 n 
+0004172546 00000 n 
+0004172698 00000 n 
+0004172850 00000 n 
+0004173002 00000 n 
+0004173152 00000 n 
+0004173302 00000 n 
+0004173452 00000 n 
+0004173604 00000 n 
+0004173756 00000 n 
+0004173906 00000 n 
+0004174056 00000 n 
+0004174207 00000 n 
+0004174359 00000 n 
+0004174511 00000 n 
+0004174663 00000 n 
+0004174815 00000 n 
+0004174967 00000 n 
+0004175120 00000 n 
+0004175273 00000 n 
+0004175426 00000 n 
+0004175577 00000 n 
+0004175730 00000 n 
+0004175883 00000 n 
+0004176035 00000 n 
+0004176188 00000 n 
+0004176341 00000 n 
+0004179580 00000 n 
+0004176560 00000 n 
+0004155255 00000 n 
+0004153839 00000 n 
+0004176494 00000 n 
+0004179732 00000 n 
+0004179885 00000 n 
+0004180038 00000 n 
+0004180191 00000 n 
+0004180343 00000 n 
+0004180494 00000 n 
+0004180646 00000 n 
+0004180798 00000 n 
+0004180951 00000 n 
+0004181104 00000 n 
+0004181257 00000 n 
+0004181410 00000 n 
+0004181562 00000 n 
+0004181715 00000 n 
+0004181868 00000 n 
+0004182020 00000 n 
+0004182173 00000 n 
+0004182326 00000 n 
+0004182478 00000 n 
+0004182631 00000 n 
+0004182783 00000 n 
+0004182936 00000 n 
+0004183088 00000 n 
+0004183240 00000 n 
+0004183392 00000 n 
+0004183545 00000 n 
+0004183698 00000 n 
+0004183850 00000 n 
+0004184002 00000 n 
+0004184154 00000 n 
+0004184305 00000 n 
+0004184457 00000 n 
+0004184610 00000 n 
+0004184762 00000 n 
+0004184914 00000 n 
+0004185066 00000 n 
+0004185219 00000 n 
+0004185372 00000 n 
+0004185524 00000 n 
+0004185676 00000 n 
+0004185829 00000 n 
+0004185982 00000 n 
+0004186135 00000 n 
+0004186286 00000 n 
+0004186439 00000 n 
+0004186592 00000 n 
+0004186745 00000 n 
+0004186896 00000 n 
+0004187045 00000 n 
+0004187197 00000 n 
+0004187349 00000 n 
+0004187501 00000 n 
+0004187654 00000 n 
+0004187807 00000 n 
+0004187960 00000 n 
+0004188113 00000 n 
+0004188266 00000 n 
+0004188419 00000 n 
+0004188572 00000 n 
+0004188725 00000 n 
+0004188878 00000 n 
+0004189031 00000 n 
+0004189184 00000 n 
+0004189337 00000 n 
+0004189490 00000 n 
+0004189642 00000 n 
+0004189794 00000 n 
+0004189946 00000 n 
+0004190098 00000 n 
+0004190247 00000 n 
+0004190399 00000 n 
+0004190552 00000 n 
+0004190705 00000 n 
+0004190857 00000 n 
+0004191008 00000 n 
+0004191160 00000 n 
+0004191312 00000 n 
+0004191465 00000 n 
+0004191618 00000 n 
+0004191771 00000 n 
+0004191924 00000 n 
+0004192077 00000 n 
+0004192230 00000 n 
+0004192382 00000 n 
+0004192531 00000 n 
+0004192684 00000 n 
+0004192837 00000 n 
+0004192990 00000 n 
+0004193143 00000 n 
+0004193296 00000 n 
+0004193449 00000 n 
+0004193601 00000 n 
+0004193753 00000 n 
+0004193905 00000 n 
+0004194058 00000 n 
+0004194211 00000 n 
+0004197866 00000 n 
+0004194430 00000 n 
+0004178478 00000 n 
+0004176677 00000 n 
+0004194364 00000 n 
+0004198019 00000 n 
+0004198172 00000 n 
+0004198324 00000 n 
+0004198476 00000 n 
+0004198628 00000 n 
+0004198780 00000 n 
+0004198932 00000 n 
+0004199080 00000 n 
+0004199233 00000 n 
+0004199385 00000 n 
+0004199537 00000 n 
+0004199690 00000 n 
+0004199841 00000 n 
+0004199994 00000 n 
+0004200145 00000 n 
+0004200298 00000 n 
+0004200451 00000 n 
+0004200604 00000 n 
+0004200756 00000 n 
+0004200909 00000 n 
+0004201062 00000 n 
+0004201215 00000 n 
+0004201368 00000 n 
+0004201521 00000 n 
+0004201674 00000 n 
+0004201826 00000 n 
+0004201978 00000 n 
+0004202130 00000 n 
+0004202283 00000 n 
+0004202436 00000 n 
+0004202589 00000 n 
+0004202742 00000 n 
+0004202894 00000 n 
+0004203046 00000 n 
+0004203199 00000 n 
+0004203352 00000 n 
+0004203504 00000 n 
+0004203656 00000 n 
+0004203808 00000 n 
+0004203960 00000 n 
+0004204112 00000 n 
+0004204264 00000 n 
+0004204416 00000 n 
+0004204569 00000 n 
+0004204722 00000 n 
+0004204875 00000 n 
+0004205027 00000 n 
+0004205178 00000 n 
+0004205331 00000 n 
+0004205484 00000 n 
+0004205637 00000 n 
+0004205790 00000 n 
+0004205942 00000 n 
+0004206093 00000 n 
+0004206246 00000 n 
+0004206399 00000 n 
+0004206552 00000 n 
+0004206704 00000 n 
+0004206857 00000 n 
+0004207010 00000 n 
+0004207162 00000 n 
+0004207315 00000 n 
+0004207468 00000 n 
+0004207621 00000 n 
+0004207774 00000 n 
+0004207927 00000 n 
+0004208080 00000 n 
+0004208233 00000 n 
+0004208386 00000 n 
+0004208539 00000 n 
+0004208692 00000 n 
+0004208845 00000 n 
+0004208998 00000 n 
+0004209151 00000 n 
+0004209304 00000 n 
+0004209457 00000 n 
+0004209610 00000 n 
+0004209763 00000 n 
+0004209916 00000 n 
+0004210068 00000 n 
+0004210221 00000 n 
+0004210373 00000 n 
+0004210525 00000 n 
+0004210678 00000 n 
+0004210830 00000 n 
+0004210983 00000 n 
+0004211136 00000 n 
+0004211289 00000 n 
+0004211442 00000 n 
+0004211595 00000 n 
+0004211748 00000 n 
+0004211901 00000 n 
+0004212054 00000 n 
+0004212207 00000 n 
+0004212360 00000 n 
+0004212513 00000 n 
+0004212666 00000 n 
+0004212819 00000 n 
+0004212970 00000 n 
+0004213123 00000 n 
+0004213275 00000 n 
+0004213427 00000 n 
+0004213579 00000 n 
+0004213732 00000 n 
+0004213885 00000 n 
+0004214038 00000 n 
+0004214191 00000 n 
+0004214344 00000 n 
+0004214497 00000 n 
+0004214650 00000 n 
+0004214802 00000 n 
+0004214954 00000 n 
+0004215105 00000 n 
+0004215257 00000 n 
+0004215410 00000 n 
+0004215563 00000 n 
+0004215716 00000 n 
+0004215869 00000 n 
+0004216022 00000 n 
+0004216175 00000 n 
+0004216328 00000 n 
+0004216481 00000 n 
+0004216634 00000 n 
+0004216787 00000 n 
+0004216939 00000 n 
+0004217092 00000 n 
+0004217245 00000 n 
+0004217398 00000 n 
+0004217550 00000 n 
+0004217701 00000 n 
+0004217853 00000 n 
+0004218005 00000 n 
+0004218157 00000 n 
+0004218310 00000 n 
+0004218463 00000 n 
+0004218616 00000 n 
+0004218769 00000 n 
+0004218922 00000 n 
+0004219075 00000 n 
+0004219228 00000 n 
+0004219380 00000 n 
+0004219533 00000 n 
+0004219686 00000 n 
+0004222728 00000 n 
+0004222880 00000 n 
+0004223032 00000 n 
+0004223183 00000 n 
+0004223335 00000 n 
+0004223486 00000 n 
+0004223639 00000 n 
+0004223792 00000 n 
+0004223945 00000 n 
+0004219905 00000 n 
+0004196294 00000 n 
+0004194575 00000 n 
+0004219839 00000 n 
+0004224098 00000 n 
+0004224251 00000 n 
+0004224404 00000 n 
+0004224557 00000 n 
+0004224710 00000 n 
+0004224861 00000 n 
+0004225014 00000 n 
+0004225167 00000 n 
+0004225319 00000 n 
+0004225471 00000 n 
+0004225623 00000 n 
+0004225776 00000 n 
+0004225929 00000 n 
+0004226081 00000 n 
+0004226234 00000 n 
+0004226387 00000 n 
+0004226540 00000 n 
+0004226692 00000 n 
+0004226844 00000 n 
+0004226997 00000 n 
+0004227149 00000 n 
+0004227302 00000 n 
+0004227454 00000 n 
+0004227607 00000 n 
+0004227760 00000 n 
+0004227913 00000 n 
+0004228065 00000 n 
+0004228216 00000 n 
+0004228368 00000 n 
+0004228521 00000 n 
+0004228674 00000 n 
+0004228827 00000 n 
+0004228980 00000 n 
+0004229133 00000 n 
+0004229285 00000 n 
+0004229438 00000 n 
+0004229591 00000 n 
+0004229744 00000 n 
+0004229897 00000 n 
+0004230050 00000 n 
+0004230203 00000 n 
+0004230356 00000 n 
+0004230509 00000 n 
+0004230661 00000 n 
+0004230813 00000 n 
+0004230965 00000 n 
+0004231118 00000 n 
+0004231271 00000 n 
+0004231424 00000 n 
+0004231577 00000 n 
+0004231730 00000 n 
+0004231883 00000 n 
+0004232035 00000 n 
+0004232188 00000 n 
+0004232341 00000 n 
+0004232494 00000 n 
+0004232647 00000 n 
+0004232800 00000 n 
+0004232952 00000 n 
+0004233105 00000 n 
+0004233258 00000 n 
+0004233411 00000 n 
+0004233564 00000 n 
+0004233717 00000 n 
+0004233869 00000 n 
+0004234021 00000 n 
+0004234172 00000 n 
+0004234325 00000 n 
+0004234478 00000 n 
+0004234631 00000 n 
+0004234784 00000 n 
+0004234937 00000 n 
+0004235090 00000 n 
+0004235243 00000 n 
+0004235396 00000 n 
+0004235549 00000 n 
+0004235701 00000 n 
+0004235853 00000 n 
+0004236005 00000 n 
+0004236157 00000 n 
+0004236308 00000 n 
+0004236461 00000 n 
+0004236613 00000 n 
+0004236766 00000 n 
+0004236918 00000 n 
+0004237071 00000 n 
+0004237223 00000 n 
+0004237375 00000 n 
+0004237524 00000 n 
+0004237675 00000 n 
+0004237827 00000 n 
+0004237980 00000 n 
+0004238133 00000 n 
+0004238286 00000 n 
+0004238439 00000 n 
+0004238592 00000 n 
+0004238745 00000 n 
+0004241849 00000 n 
+0004238964 00000 n 
+0004221536 00000 n 
+0004220022 00000 n 
+0004238898 00000 n 
+0004242002 00000 n 
+0004242155 00000 n 
+0004242307 00000 n 
+0004242460 00000 n 
+0004242612 00000 n 
+0004242765 00000 n 
+0004242917 00000 n 
+0004243070 00000 n 
+0004243222 00000 n 
+0004243375 00000 n 
+0004243528 00000 n 
+0004243681 00000 n 
+0004243834 00000 n 
+0004243987 00000 n 
+0004244140 00000 n 
+0004244293 00000 n 
+0004244446 00000 n 
+0004244599 00000 n 
+0004244752 00000 n 
+0004244904 00000 n 
+0004245057 00000 n 
+0004245207 00000 n 
+0004245358 00000 n 
+0004245510 00000 n 
+0004245660 00000 n 
+0004245813 00000 n 
+0004245965 00000 n 
+0004246118 00000 n 
+0004246271 00000 n 
+0004246422 00000 n 
+0004246573 00000 n 
+0004246725 00000 n 
+0004246878 00000 n 
+0004247030 00000 n 
+0004247183 00000 n 
+0004247336 00000 n 
+0004247489 00000 n 
+0004247642 00000 n 
+0004247794 00000 n 
+0004247946 00000 n 
+0004248099 00000 n 
+0004248252 00000 n 
+0004248405 00000 n 
+0004248557 00000 n 
+0004248710 00000 n 
+0004248863 00000 n 
+0004249016 00000 n 
+0004249168 00000 n 
+0004249321 00000 n 
+0004249473 00000 n 
+0004249624 00000 n 
+0004249774 00000 n 
+0004249927 00000 n 
+0004250078 00000 n 
+0004250229 00000 n 
+0004250380 00000 n 
+0004250531 00000 n 
+0004250681 00000 n 
+0004250831 00000 n 
+0004250982 00000 n 
+0004251133 00000 n 
+0004251285 00000 n 
+0004251437 00000 n 
+0004251589 00000 n 
+0004251742 00000 n 
+0004251895 00000 n 
+0004252048 00000 n 
+0004252200 00000 n 
+0004252353 00000 n 
+0004252506 00000 n 
+0004252659 00000 n 
+0004252812 00000 n 
+0004252965 00000 n 
+0004253118 00000 n 
+0004253271 00000 n 
+0004253424 00000 n 
+0004253577 00000 n 
+0004253730 00000 n 
+0004253881 00000 n 
+0004254034 00000 n 
+0004254187 00000 n 
+0004254340 00000 n 
+0004254493 00000 n 
+0004254645 00000 n 
+0004254797 00000 n 
+0004254949 00000 n 
+0004255102 00000 n 
+0004255254 00000 n 
+0004255407 00000 n 
+0004255560 00000 n 
+0004255713 00000 n 
+0004255865 00000 n 
+0004256017 00000 n 
+0004256170 00000 n 
+0004256323 00000 n 
+0004256476 00000 n 
+0004256627 00000 n 
+0004256779 00000 n 
+0004256930 00000 n 
+0004257081 00000 n 
+0004257234 00000 n 
+0004257387 00000 n 
+0004257539 00000 n 
+0004257692 00000 n 
+0004257844 00000 n 
+0004257997 00000 n 
+0004258150 00000 n 
+0004261325 00000 n 
+0004261478 00000 n 
+0004258369 00000 n 
+0004240637 00000 n 
+0004239067 00000 n 
+0004258303 00000 n 
+0004261631 00000 n 
+0004261782 00000 n 
+0004261935 00000 n 
+0004262087 00000 n 
+0004262240 00000 n 
+0004262393 00000 n 
+0004262546 00000 n 
+0004262698 00000 n 
+0004262850 00000 n 
+0004263003 00000 n 
+0004263156 00000 n 
+0004263306 00000 n 
+0004263458 00000 n 
+0004263611 00000 n 
+0004263764 00000 n 
+0004263917 00000 n 
+0004264070 00000 n 
+0004264223 00000 n 
+0004264376 00000 n 
+0004264529 00000 n 
+0004264681 00000 n 
+0004264832 00000 n 
+0004264985 00000 n 
+0004265138 00000 n 
+0004265291 00000 n 
+0004265444 00000 n 
+0004265597 00000 n 
+0004265750 00000 n 
+0004265903 00000 n 
+0004266056 00000 n 
+0004266207 00000 n 
+0004266359 00000 n 
+0004266510 00000 n 
+0004266661 00000 n 
+0004266814 00000 n 
+0004266967 00000 n 
+0004267120 00000 n 
+0004267273 00000 n 
+0004267426 00000 n 
+0004267579 00000 n 
+0004267732 00000 n 
+0004267884 00000 n 
+0004268037 00000 n 
+0004268190 00000 n 
+0004268343 00000 n 
+0004268495 00000 n 
+0004268648 00000 n 
+0004268801 00000 n 
+0004268952 00000 n 
+0004269105 00000 n 
+0004269258 00000 n 
+0004269411 00000 n 
+0004269564 00000 n 
+0004269714 00000 n 
+0004269864 00000 n 
+0004270016 00000 n 
+0004270168 00000 n 
+0004270319 00000 n 
+0004270472 00000 n 
+0004270625 00000 n 
+0004270778 00000 n 
+0004270931 00000 n 
+0004271084 00000 n 
+0004271237 00000 n 
+0004271390 00000 n 
+0004271541 00000 n 
+0004271691 00000 n 
+0004271842 00000 n 
+0004271995 00000 n 
+0004272148 00000 n 
+0004272301 00000 n 
+0004272454 00000 n 
+0004272606 00000 n 
+0004272758 00000 n 
+0004272911 00000 n 
+0004273064 00000 n 
+0004273217 00000 n 
+0004273370 00000 n 
+0004273523 00000 n 
+0004273676 00000 n 
+0004273829 00000 n 
+0004273982 00000 n 
+0004274133 00000 n 
+0004274285 00000 n 
+0004274437 00000 n 
+0004274588 00000 n 
+0004274741 00000 n 
+0004274893 00000 n 
+0004275045 00000 n 
+0004275198 00000 n 
+0004275351 00000 n 
+0004275504 00000 n 
+0004275657 00000 n 
+0004275809 00000 n 
+0004275959 00000 n 
+0004276112 00000 n 
+0004276265 00000 n 
+0004276418 00000 n 
+0004276570 00000 n 
+0004276723 00000 n 
+0004276875 00000 n 
+0004277027 00000 n 
+0004277180 00000 n 
+0004277333 00000 n 
+0004280305 00000 n 
+0004277552 00000 n 
+0004260133 00000 n 
+0004258486 00000 n 
+0004277486 00000 n 
+0005332275 00000 n 
+0004280458 00000 n 
+0004280610 00000 n 
+0004280763 00000 n 
+0004280916 00000 n 
+0004281068 00000 n 
+0004281218 00000 n 
+0004281368 00000 n 
+0004281521 00000 n 
+0004281674 00000 n 
+0004281826 00000 n 
+0004281979 00000 n 
+0004282132 00000 n 
+0004282285 00000 n 
+0004282437 00000 n 
+0004282589 00000 n 
+0004282741 00000 n 
+0004282893 00000 n 
+0004283046 00000 n 
+0004283198 00000 n 
+0004283350 00000 n 
+0004283502 00000 n 
+0004283655 00000 n 
+0004283808 00000 n 
+0004283960 00000 n 
+0004284111 00000 n 
+0004284264 00000 n 
+0004284416 00000 n 
+0004284569 00000 n 
+0004284722 00000 n 
+0004284875 00000 n 
+0004285028 00000 n 
+0004285181 00000 n 
+0004285334 00000 n 
+0004285487 00000 n 
+0004285639 00000 n 
+0004285792 00000 n 
+0004285944 00000 n 
+0004286096 00000 n 
+0004286247 00000 n 
+0004286399 00000 n 
+0004286552 00000 n 
+0004286705 00000 n 
+0004286858 00000 n 
+0004287011 00000 n 
+0004287164 00000 n 
+0004287317 00000 n 
+0004287470 00000 n 
+0004287623 00000 n 
+0004287776 00000 n 
+0004287928 00000 n 
+0004288080 00000 n 
+0004288232 00000 n 
+0004288385 00000 n 
+0004288538 00000 n 
+0004288691 00000 n 
+0004288844 00000 n 
+0004288996 00000 n 
+0004289146 00000 n 
+0004289299 00000 n 
+0004289452 00000 n 
+0004289605 00000 n 
+0004289758 00000 n 
+0004289909 00000 n 
+0004290062 00000 n 
+0004290214 00000 n 
+0004290366 00000 n 
+0004290517 00000 n 
+0004290669 00000 n 
+0004290821 00000 n 
+0004290974 00000 n 
+0004291126 00000 n 
+0004291278 00000 n 
+0004291431 00000 n 
+0004291583 00000 n 
+0004291735 00000 n 
+0004291886 00000 n 
+0004292039 00000 n 
+0004292192 00000 n 
+0004292345 00000 n 
+0004292497 00000 n 
+0004292649 00000 n 
+0004292801 00000 n 
+0004292952 00000 n 
+0004293103 00000 n 
+0004293254 00000 n 
+0004293407 00000 n 
+0004293560 00000 n 
+0004293711 00000 n 
+0004293864 00000 n 
+0004294016 00000 n 
+0004294169 00000 n 
+0004294322 00000 n 
+0004297538 00000 n 
+0004294541 00000 n 
+0004279243 00000 n 
+0004277683 00000 n 
+0004294475 00000 n 
+0004297691 00000 n 
+0004297844 00000 n 
+0004297997 00000 n 
+0004298150 00000 n 
+0004298302 00000 n 
+0004298452 00000 n 
+0004298605 00000 n 
+0004298757 00000 n 
+0004298910 00000 n 
+0004299061 00000 n 
+0004299213 00000 n 
+0004299366 00000 n 
+0004299519 00000 n 
+0004299672 00000 n 
+0004299824 00000 n 
+0004299976 00000 n 
+0004300127 00000 n 
+0004300279 00000 n 
+0004300431 00000 n 
+0004300584 00000 n 
+0004300736 00000 n 
+0004300889 00000 n 
+0004301041 00000 n 
+0004301194 00000 n 
+0004301347 00000 n 
+0004301499 00000 n 
+0004301652 00000 n 
+0004301804 00000 n 
+0004301956 00000 n 
+0004302108 00000 n 
+0004302261 00000 n 
+0004302414 00000 n 
+0004302566 00000 n 
+0004302719 00000 n 
+0004302872 00000 n 
+0004303025 00000 n 
+0004303178 00000 n 
+0004303331 00000 n 
+0004303484 00000 n 
+0004303637 00000 n 
+0004303790 00000 n 
+0004303943 00000 n 
+0004304095 00000 n 
+0004304247 00000 n 
+0004304398 00000 n 
+0004304550 00000 n 
+0004304703 00000 n 
+0004304856 00000 n 
+0004305009 00000 n 
+0004305161 00000 n 
+0004305312 00000 n 
+0004305464 00000 n 
+0004305615 00000 n 
+0004305767 00000 n 
+0004305920 00000 n 
+0004306073 00000 n 
+0004306226 00000 n 
+0004306379 00000 n 
+0004306532 00000 n 
+0004306685 00000 n 
+0004306838 00000 n 
+0004306991 00000 n 
+0004307144 00000 n 
+0004307297 00000 n 
+0004307449 00000 n 
+0004307601 00000 n 
+0004307754 00000 n 
+0004307907 00000 n 
+0004308058 00000 n 
+0004308211 00000 n 
+0004308362 00000 n 
+0004308515 00000 n 
+0004308667 00000 n 
+0004308820 00000 n 
+0004308973 00000 n 
+0004309125 00000 n 
+0004309278 00000 n 
+0004309431 00000 n 
+0004309584 00000 n 
+0004309737 00000 n 
+0004309890 00000 n 
+0004310042 00000 n 
+0004310195 00000 n 
+0004310348 00000 n 
+0004310501 00000 n 
+0004310654 00000 n 
+0004310806 00000 n 
+0004310959 00000 n 
+0004311112 00000 n 
+0004311265 00000 n 
+0004311418 00000 n 
+0004311571 00000 n 
+0004311724 00000 n 
+0004311877 00000 n 
+0004312030 00000 n 
+0004312183 00000 n 
+0004312334 00000 n 
+0004312484 00000 n 
+0004312635 00000 n 
+0004312786 00000 n 
+0004312939 00000 n 
+0004313092 00000 n 
+0004313245 00000 n 
+0004313398 00000 n 
+0004313550 00000 n 
+0004313703 00000 n 
+0004313856 00000 n 
+0004314006 00000 n 
+0004314159 00000 n 
+0004314312 00000 n 
+0004317083 00000 n 
+0004314531 00000 n 
+0004296296 00000 n 
+0004294658 00000 n 
+0004314465 00000 n 
+0004317236 00000 n 
+0004317389 00000 n 
+0004317542 00000 n 
+0004317695 00000 n 
+0004317847 00000 n 
+0004317999 00000 n 
+0004318149 00000 n 
+0004318302 00000 n 
+0004318455 00000 n 
+0004318608 00000 n 
+0004318761 00000 n 
+0004318914 00000 n 
+0004319067 00000 n 
+0004319220 00000 n 
+0004319372 00000 n 
+0004319523 00000 n 
+0004319676 00000 n 
+0004319829 00000 n 
+0004319982 00000 n 
+0004320135 00000 n 
+0004320288 00000 n 
+0004320440 00000 n 
+0004320592 00000 n 
+0004320744 00000 n 
+0004320897 00000 n 
+0004321050 00000 n 
+0004321203 00000 n 
+0004321356 00000 n 
+0004321509 00000 n 
+0004321662 00000 n 
+0004321815 00000 n 
+0004321968 00000 n 
+0004322121 00000 n 
+0004322274 00000 n 
+0004322424 00000 n 
+0004322577 00000 n 
+0004322730 00000 n 
+0004322881 00000 n 
+0004323032 00000 n 
+0004323185 00000 n 
+0004323338 00000 n 
+0004323491 00000 n 
+0004323644 00000 n 
+0004323795 00000 n 
+0004323948 00000 n 
+0004324101 00000 n 
+0004324253 00000 n 
+0004324406 00000 n 
+0004324559 00000 n 
+0004324712 00000 n 
+0004324865 00000 n 
+0004325018 00000 n 
+0004325170 00000 n 
+0004325322 00000 n 
+0004325472 00000 n 
+0004325624 00000 n 
+0004325777 00000 n 
+0004325930 00000 n 
+0004326083 00000 n 
+0004326236 00000 n 
+0004326389 00000 n 
+0004326541 00000 n 
+0004326694 00000 n 
+0004326846 00000 n 
+0004326999 00000 n 
+0004327151 00000 n 
+0004327303 00000 n 
 0004327456 00000 n 
-0004327609 00000 n 
-0004327762 00000 n 
-0004327914 00000 n 
-0004328065 00000 n 
-0004328218 00000 n 
-0004328371 00000 n 
-0004328523 00000 n 
-0004328674 00000 n 
-0004328826 00000 n 
-0004328979 00000 n 
+0004327608 00000 n 
+0004327759 00000 n 
+0004327910 00000 n 
+0004328063 00000 n 
+0004328216 00000 n 
+0004328369 00000 n 
+0004328522 00000 n 
+0004328675 00000 n 
+0004328828 00000 n 
+0004328980 00000 n 
 0004329132 00000 n 
-0004329284 00000 n 
-0004332542 00000 n 
-0004329502 00000 n 
-0004312105 00000 n 
-0004310503 00000 n 
-0004329436 00000 n 
-0004775477 00000 n 
-0004332694 00000 n 
-0004332847 00000 n 
-0004333000 00000 n 
-0004333150 00000 n 
-0004333300 00000 n 
-0004333453 00000 n 
-0004333606 00000 n 
-0004333759 00000 n 
-0004333912 00000 n 
-0004334065 00000 n 
-0004334218 00000 n 
-0004334370 00000 n 
-0004334523 00000 n 
-0004334676 00000 n 
-0004334829 00000 n 
-0004334982 00000 n 
-0004335134 00000 n 
-0004335287 00000 n 
-0004335439 00000 n 
-0004335591 00000 n 
-0004335744 00000 n 
-0004335897 00000 n 
-0004336050 00000 n 
-0004336203 00000 n 
-0004336356 00000 n 
-0004336507 00000 n 
-0004336660 00000 n 
-0004336813 00000 n 
-0004336964 00000 n 
-0004337117 00000 n 
-0004337270 00000 n 
-0004337423 00000 n 
-0004337575 00000 n 
-0004337727 00000 n 
-0004337878 00000 n 
-0004338031 00000 n 
-0004338182 00000 n 
-0004338334 00000 n 
-0004338487 00000 n 
-0004338640 00000 n 
-0004338793 00000 n 
-0004338945 00000 n 
-0004339098 00000 n 
-0004339250 00000 n 
-0004339403 00000 n 
-0004339556 00000 n 
-0004339709 00000 n 
-0004339862 00000 n 
-0004340014 00000 n 
-0004340165 00000 n 
-0004340315 00000 n 
-0004340465 00000 n 
-0004340617 00000 n 
-0004340769 00000 n 
-0004340921 00000 n 
-0004341074 00000 n 
-0004341227 00000 n 
-0004341379 00000 n 
-0004341532 00000 n 
-0004341685 00000 n 
-0004341837 00000 n 
-0004341989 00000 n 
-0004342141 00000 n 
-0004342293 00000 n 
-0004342446 00000 n 
-0004342598 00000 n 
-0004342751 00000 n 
-0004342902 00000 n 
-0004343052 00000 n 
-0004343203 00000 n 
-0004343354 00000 n 
-0004343505 00000 n 
-0004343658 00000 n 
-0004343810 00000 n 
-0004343962 00000 n 
-0004344115 00000 n 
-0004344268 00000 n 
-0004344421 00000 n 
-0004344573 00000 n 
-0004344726 00000 n 
-0004344879 00000 n 
-0004345032 00000 n 
-0004345185 00000 n 
-0004345337 00000 n 
-0004345490 00000 n 
-0004345643 00000 n 
-0004345796 00000 n 
-0004345948 00000 n 
-0004346100 00000 n 
-0004346253 00000 n 
-0004346405 00000 n 
-0004346556 00000 n 
-0004346708 00000 n 
-0004346859 00000 n 
-0004347012 00000 n 
-0004347165 00000 n 
-0004347317 00000 n 
-0004347469 00000 n 
-0004347618 00000 n 
-0004347771 00000 n 
-0004347924 00000 n 
-0004348077 00000 n 
-0004348230 00000 n 
-0004348383 00000 n 
-0004348535 00000 n 
-0004348687 00000 n 
-0004352100 00000 n 
-0004348906 00000 n 
-0004331340 00000 n 
-0004329619 00000 n 
-0004348840 00000 n 
-0004352251 00000 n 
-0004352403 00000 n 
-0004352555 00000 n 
-0004352707 00000 n 
-0004352859 00000 n 
-0004353012 00000 n 
-0004353165 00000 n 
-0004353318 00000 n 
-0004353470 00000 n 
-0004353623 00000 n 
-0004353776 00000 n 
-0004353929 00000 n 
-0004354080 00000 n 
-0004354233 00000 n 
-0004354385 00000 n 
-0004354537 00000 n 
-0004354690 00000 n 
-0004354842 00000 n 
-0004354994 00000 n 
-0004355147 00000 n 
-0004355299 00000 n 
-0004355452 00000 n 
-0004355604 00000 n 
-0004355757 00000 n 
-0004355910 00000 n 
-0004356062 00000 n 
-0004356215 00000 n 
-0004356367 00000 n 
-0004356520 00000 n 
-0004356673 00000 n 
-0004356826 00000 n 
-0004356978 00000 n 
-0004357130 00000 n 
-0004357282 00000 n 
-0004357435 00000 n 
-0004357588 00000 n 
-0004357740 00000 n 
-0004357892 00000 n 
-0004358044 00000 n 
-0004358197 00000 n 
-0004358350 00000 n 
-0004358502 00000 n 
-0004358653 00000 n 
-0004358806 00000 n 
-0004358958 00000 n 
-0004359110 00000 n 
-0004359263 00000 n 
-0004359414 00000 n 
-0004359567 00000 n 
-0004359719 00000 n 
-0004359871 00000 n 
-0004360023 00000 n 
-0004360175 00000 n 
-0004360327 00000 n 
-0004360479 00000 n 
-0004360632 00000 n 
-0004360785 00000 n 
-0004360938 00000 n 
-0004361091 00000 n 
-0004361244 00000 n 
-0004361397 00000 n 
-0004361550 00000 n 
-0004361701 00000 n 
-0004361851 00000 n 
-0004362003 00000 n 
-0004362155 00000 n 
-0004362307 00000 n 
-0004362460 00000 n 
-0004362613 00000 n 
-0004362766 00000 n 
-0004362918 00000 n 
-0004363071 00000 n 
-0004363223 00000 n 
-0004363376 00000 n 
-0004363528 00000 n 
-0004363679 00000 n 
-0004363831 00000 n 
-0004363982 00000 n 
-0004364134 00000 n 
-0004364285 00000 n 
-0004364435 00000 n 
-0004364586 00000 n 
-0004364736 00000 n 
-0004364887 00000 n 
-0004365040 00000 n 
-0004365193 00000 n 
-0004365346 00000 n 
-0004365499 00000 n 
-0004365652 00000 n 
-0004365805 00000 n 
-0004365957 00000 n 
-0004366108 00000 n 
-0004366259 00000 n 
-0004366411 00000 n 
-0004366563 00000 n 
-0004366716 00000 n 
-0004366869 00000 n 
-0004367021 00000 n 
-0004367174 00000 n 
-0004367326 00000 n 
-0004367479 00000 n 
-0004367632 00000 n 
-0004367785 00000 n 
-0004367938 00000 n 
-0004368091 00000 n 
-0004368244 00000 n 
-0004368397 00000 n 
-0004368550 00000 n 
-0004368703 00000 n 
-0004368856 00000 n 
-0004369009 00000 n 
-0004369162 00000 n 
-0004369314 00000 n 
-0004369466 00000 n 
-0004369618 00000 n 
-0004369771 00000 n 
-0004369924 00000 n 
-0004370077 00000 n 
-0004370228 00000 n 
-0004370381 00000 n 
-0004370534 00000 n 
-0004370686 00000 n 
-0004370838 00000 n 
-0004370991 00000 n 
-0004371144 00000 n 
-0004371297 00000 n 
-0004371450 00000 n 
-0004371602 00000 n 
-0004371752 00000 n 
-0004371902 00000 n 
-0004372051 00000 n 
-0004372202 00000 n 
-0004372353 00000 n 
-0004372506 00000 n 
-0004372656 00000 n 
-0004372809 00000 n 
-0004372962 00000 n 
-0004373115 00000 n 
-0004373268 00000 n 
-0004373420 00000 n 
-0004373573 00000 n 
-0004373726 00000 n 
-0004376710 00000 n 
-0004373945 00000 n 
-0004350538 00000 n 
-0004349023 00000 n 
-0004373879 00000 n 
-0004376863 00000 n 
-0004377016 00000 n 
-0004377167 00000 n 
-0004377319 00000 n 
-0004377471 00000 n 
-0004377618 00000 n 
-0004377771 00000 n 
-0004377924 00000 n 
-0004378077 00000 n 
-0004378229 00000 n 
-0004378382 00000 n 
-0004378535 00000 n 
-0004378688 00000 n 
-0004378841 00000 n 
-0004378993 00000 n 
-0004379145 00000 n 
-0004379297 00000 n 
-0004379449 00000 n 
-0004379601 00000 n 
-0004379754 00000 n 
-0004379906 00000 n 
-0004380059 00000 n 
-0004380212 00000 n 
-0004380364 00000 n 
-0004380516 00000 n 
-0004380667 00000 n 
-0004380819 00000 n 
-0004380971 00000 n 
-0004381124 00000 n 
-0004381277 00000 n 
-0004381428 00000 n 
-0004381580 00000 n 
-0004381732 00000 n 
-0004381885 00000 n 
-0004382038 00000 n 
-0004382191 00000 n 
-0004382344 00000 n 
-0004382496 00000 n 
-0004382648 00000 n 
-0004382800 00000 n 
-0004382952 00000 n 
-0004383105 00000 n 
-0004383257 00000 n 
-0004383409 00000 n 
-0004383561 00000 n 
-0004383713 00000 n 
-0004383865 00000 n 
-0004384017 00000 n 
-0004384170 00000 n 
-0004384321 00000 n 
-0004384474 00000 n 
-0004384627 00000 n 
-0004384780 00000 n 
-0004384930 00000 n 
-0004385082 00000 n 
-0004385234 00000 n 
-0004385384 00000 n 
-0004385536 00000 n 
-0004385688 00000 n 
-0004385839 00000 n 
-0004385990 00000 n 
-0004386142 00000 n 
-0004386295 00000 n 
-0004386448 00000 n 
-0004386599 00000 n 
-0004386752 00000 n 
-0004386904 00000 n 
-0004387054 00000 n 
-0004387207 00000 n 
-0004387359 00000 n 
-0004387511 00000 n 
-0004387663 00000 n 
-0004387816 00000 n 
-0004387969 00000 n 
-0004388122 00000 n 
-0004388275 00000 n 
-0004388428 00000 n 
-0004388581 00000 n 
-0004388734 00000 n 
-0004388887 00000 n 
-0004389038 00000 n 
-0004389191 00000 n 
-0004389344 00000 n 
-0004389497 00000 n 
-0004389650 00000 n 
-0004389803 00000 n 
-0004389955 00000 n 
-0004390108 00000 n 
-0004390261 00000 n 
-0004390414 00000 n 
-0004390567 00000 n 
-0004390720 00000 n 
-0004390873 00000 n 
-0004391026 00000 n 
-0004391179 00000 n 
-0004391332 00000 n 
-0004391484 00000 n 
-0004391636 00000 n 
-0004391789 00000 n 
-0004391941 00000 n 
-0004392094 00000 n 
-0004392247 00000 n 
-0004392400 00000 n 
-0004392552 00000 n 
-0004392703 00000 n 
-0004392856 00000 n 
-0004393005 00000 n 
-0004393158 00000 n 
-0004393311 00000 n 
-0004396486 00000 n 
-0004393530 00000 n 
-0004375478 00000 n 
-0004374048 00000 n 
-0004393464 00000 n 
-0004396637 00000 n 
-0004396790 00000 n 
-0004396942 00000 n 
-0004397095 00000 n 
-0004397248 00000 n 
-0004397401 00000 n 
-0004397552 00000 n 
-0004397704 00000 n 
-0004397856 00000 n 
-0004398008 00000 n 
-0004398161 00000 n 
-0004398313 00000 n 
-0004398465 00000 n 
-0004398617 00000 n 
-0004398769 00000 n 
-0004398921 00000 n 
-0004399073 00000 n 
-0004399226 00000 n 
-0004399379 00000 n 
-0004399532 00000 n 
-0004399685 00000 n 
-0004399838 00000 n 
-0004399991 00000 n 
-0004400144 00000 n 
-0004400297 00000 n 
-0004400450 00000 n 
-0004400602 00000 n 
-0004400755 00000 n 
-0004400907 00000 n 
-0004401060 00000 n 
-0004401213 00000 n 
-0004401365 00000 n 
-0004401518 00000 n 
-0004401670 00000 n 
-0004401823 00000 n 
-0004401972 00000 n 
-0004402124 00000 n 
-0004402273 00000 n 
-0004402426 00000 n 
-0004402578 00000 n 
-0004402731 00000 n 
-0004402883 00000 n 
-0004403035 00000 n 
-0004403186 00000 n 
-0004403339 00000 n 
-0004403491 00000 n 
-0004403644 00000 n 
-0004403797 00000 n 
-0004403950 00000 n 
-0004404103 00000 n 
-0004404255 00000 n 
-0004404408 00000 n 
-0004404561 00000 n 
-0004404713 00000 n 
-0004404865 00000 n 
-0004405018 00000 n 
-0004405171 00000 n 
-0004405324 00000 n 
-0004405476 00000 n 
-0004405628 00000 n 
-0004405779 00000 n 
-0004405929 00000 n 
-0004406079 00000 n 
-0004406229 00000 n 
-0004406382 00000 n 
-0004406535 00000 n 
-0004406688 00000 n 
-0004406841 00000 n 
-0004406994 00000 n 
-0004407147 00000 n 
-0004407298 00000 n 
-0004407451 00000 n 
-0004407602 00000 n 
-0004407755 00000 n 
-0004407908 00000 n 
-0004408061 00000 n 
-0004408214 00000 n 
-0004408365 00000 n 
-0004408517 00000 n 
-0004408668 00000 n 
-0004408820 00000 n 
-0004408972 00000 n 
-0004409125 00000 n 
-0004409278 00000 n 
-0004409431 00000 n 
-0004409584 00000 n 
-0004409737 00000 n 
-0004409889 00000 n 
-0004410042 00000 n 
-0004410194 00000 n 
-0004410347 00000 n 
-0004410500 00000 n 
-0004410653 00000 n 
-0004410806 00000 n 
-0004410959 00000 n 
-0004411110 00000 n 
-0004411263 00000 n 
-0004411413 00000 n 
-0004411565 00000 n 
-0004411717 00000 n 
-0004411868 00000 n 
-0004412019 00000 n 
-0004412171 00000 n 
-0004412324 00000 n 
-0004412477 00000 n 
-0004412630 00000 n 
-0004412783 00000 n 
-0004412936 00000 n 
-0004413089 00000 n 
-0004413242 00000 n 
-0004413394 00000 n 
-0004413546 00000 n 
-0004413698 00000 n 
-0004417038 00000 n 
-0004413916 00000 n 
-0004395214 00000 n 
-0004393633 00000 n 
-0004413850 00000 n 
-0004417191 00000 n 
-0004417344 00000 n 
-0004417496 00000 n 
-0004417648 00000 n 
-0004417801 00000 n 
-0004417951 00000 n 
-0004418104 00000 n 
-0004418257 00000 n 
-0004418410 00000 n 
-0004418563 00000 n 
-0004418715 00000 n 
-0004418867 00000 n 
-0004419020 00000 n 
-0004419173 00000 n 
-0004419326 00000 n 
-0004419478 00000 n 
-0004419631 00000 n 
-0004419783 00000 n 
-0004419935 00000 n 
-0004420088 00000 n 
-0004420240 00000 n 
-0004420393 00000 n 
-0004420546 00000 n 
-0004420698 00000 n 
-0004420851 00000 n 
-0004421003 00000 n 
-0004421155 00000 n 
-0004421308 00000 n 
-0004421461 00000 n 
-0004421611 00000 n 
-0004421760 00000 n 
-0004421912 00000 n 
-0004422065 00000 n 
-0004422217 00000 n 
-0004422370 00000 n 
-0004422523 00000 n 
-0004422676 00000 n 
-0004422829 00000 n 
-0004422982 00000 n 
-0004423135 00000 n 
-0004423287 00000 n 
-0004423440 00000 n 
-0004423593 00000 n 
-0004423746 00000 n 
-0004423899 00000 n 
-0004424051 00000 n 
-0004424203 00000 n 
-0004424356 00000 n 
-0004424509 00000 n 
-0004424662 00000 n 
-0004424815 00000 n 
-0004424968 00000 n 
-0004425121 00000 n 
-0004425274 00000 n 
-0004425427 00000 n 
-0004425578 00000 n 
-0004425731 00000 n 
-0004425883 00000 n 
-0004426036 00000 n 
-0004426186 00000 n 
-0004426339 00000 n 
-0004426492 00000 n 
-0004426645 00000 n 
-0004426797 00000 n 
-0004426949 00000 n 
-0004427102 00000 n 
-0004427255 00000 n 
-0004427408 00000 n 
-0004427561 00000 n 
-0004427713 00000 n 
-0004427866 00000 n 
-0004428017 00000 n 
-0004428169 00000 n 
-0004428322 00000 n 
-0004428475 00000 n 
-0004428628 00000 n 
-0004428781 00000 n 
-0004428934 00000 n 
-0004429087 00000 n 
-0004429239 00000 n 
-0004429392 00000 n 
-0004429545 00000 n 
-0004429698 00000 n 
-0004429850 00000 n 
-0004430001 00000 n 
-0004430153 00000 n 
-0004430305 00000 n 
-0004430457 00000 n 
-0004430610 00000 n 
-0004430763 00000 n 
-0004430916 00000 n 
-0004431069 00000 n 
-0004431222 00000 n 
-0004431375 00000 n 
-0004431528 00000 n 
-0004431681 00000 n 
-0004431834 00000 n 
-0004431987 00000 n 
-0004432140 00000 n 
-0004432293 00000 n 
-0004432445 00000 n 
-0004432598 00000 n 
-0004432751 00000 n 
-0004432904 00000 n 
-0004433057 00000 n 
-0004433210 00000 n 
-0004433363 00000 n 
-0004433515 00000 n 
-0004433667 00000 n 
-0004433819 00000 n 
-0004433971 00000 n 
-0004434124 00000 n 
-0004434277 00000 n 
-0004434430 00000 n 
-0004434583 00000 n 
-0004434736 00000 n 
-0004437786 00000 n 
-0004434955 00000 n 
-0004415736 00000 n 
-0004414033 00000 n 
-0004434889 00000 n 
-0004437939 00000 n 
-0004438092 00000 n 
-0004438245 00000 n 
-0004438398 00000 n 
-0004438550 00000 n 
-0004438700 00000 n 
-0004438853 00000 n 
-0004439006 00000 n 
-0004439159 00000 n 
-0004439311 00000 n 
-0004439464 00000 n 
-0004439617 00000 n 
-0004439770 00000 n 
-0004439923 00000 n 
-0004440076 00000 n 
-0004440229 00000 n 
-0004440382 00000 n 
-0004440535 00000 n 
-0004440688 00000 n 
-0004440841 00000 n 
-0004440993 00000 n 
-0004441146 00000 n 
-0004441299 00000 n 
-0004441451 00000 n 
-0004441604 00000 n 
-0004441756 00000 n 
-0004441909 00000 n 
-0004442062 00000 n 
-0004442214 00000 n 
-0004442365 00000 n 
-0004442518 00000 n 
-0004442671 00000 n 
-0004442824 00000 n 
-0004442977 00000 n 
-0004443130 00000 n 
-0004443281 00000 n 
-0004443433 00000 n 
-0004443585 00000 n 
-0004443737 00000 n 
-0004443889 00000 n 
-0004444042 00000 n 
-0004444195 00000 n 
-0004444348 00000 n 
-0004444501 00000 n 
-0004444654 00000 n 
-0004444807 00000 n 
-0004444958 00000 n 
-0004445110 00000 n 
-0004445263 00000 n 
-0004445416 00000 n 
-0004445569 00000 n 
-0004445720 00000 n 
-0004445872 00000 n 
-0004446024 00000 n 
-0004446176 00000 n 
-0004446328 00000 n 
-0004446481 00000 n 
-0004446634 00000 n 
-0004446786 00000 n 
-0004446939 00000 n 
-0004447092 00000 n 
-0004447245 00000 n 
-0004447398 00000 n 
-0004447551 00000 n 
-0004447703 00000 n 
-0004447856 00000 n 
-0004448009 00000 n 
-0004448162 00000 n 
-0004448314 00000 n 
-0004448467 00000 n 
-0004448619 00000 n 
-0004448771 00000 n 
-0004448923 00000 n 
-0004449075 00000 n 
-0004449227 00000 n 
-0004449380 00000 n 
-0004449533 00000 n 
-0004449686 00000 n 
-0004449839 00000 n 
-0004449992 00000 n 
-0004450145 00000 n 
-0004450298 00000 n 
-0004450451 00000 n 
-0004450604 00000 n 
-0004450757 00000 n 
-0004450910 00000 n 
-0004451062 00000 n 
-0004451214 00000 n 
-0004451367 00000 n 
-0004451520 00000 n 
-0004451669 00000 n 
-0004451821 00000 n 
-0004451973 00000 n 
-0004452125 00000 n 
-0004452277 00000 n 
-0004452429 00000 n 
-0004452582 00000 n 
-0004452734 00000 n 
-0004452887 00000 n 
-0004453040 00000 n 
-0004453193 00000 n 
-0004453346 00000 n 
-0004453499 00000 n 
-0004453651 00000 n 
-0004453803 00000 n 
-0004453956 00000 n 
-0004457561 00000 n 
-0004454175 00000 n 
-0004436584 00000 n 
-0004435086 00000 n 
-0004454109 00000 n 
-0004775610 00000 n 
-0004457714 00000 n 
-0004457867 00000 n 
-0004458020 00000 n 
-0004458173 00000 n 
-0004458326 00000 n 
-0004458479 00000 n 
-0004458631 00000 n 
-0004458782 00000 n 
-0004458934 00000 n 
-0004459087 00000 n 
-0004459238 00000 n 
-0004459391 00000 n 
-0004459544 00000 n 
-0004459696 00000 n 
-0004459849 00000 n 
-0004460002 00000 n 
-0004460155 00000 n 
-0004460307 00000 n 
-0004460458 00000 n 
-0004460610 00000 n 
-0004460762 00000 n 
-0004460915 00000 n 
-0004461068 00000 n 
-0004461221 00000 n 
-0004461373 00000 n 
-0004461524 00000 n 
-0004461677 00000 n 
-0004461830 00000 n 
-0004461983 00000 n 
-0004462135 00000 n 
-0004462288 00000 n 
-0004462441 00000 n 
-0004462594 00000 n 
-0004462747 00000 n 
-0004462900 00000 n 
-0004463053 00000 n 
-0004463204 00000 n 
-0004463357 00000 n 
-0004463510 00000 n 
-0004463663 00000 n 
-0004463812 00000 n 
-0004463964 00000 n 
-0004464117 00000 n 
-0004464270 00000 n 
-0004464423 00000 n 
-0004464574 00000 n 
-0004464727 00000 n 
-0004464880 00000 n 
-0004465032 00000 n 
-0004465185 00000 n 
-0004465337 00000 n 
-0004465490 00000 n 
-0004465643 00000 n 
-0004465796 00000 n 
-0004465948 00000 n 
-0004466101 00000 n 
-0004466253 00000 n 
-0004466404 00000 n 
-0004466555 00000 n 
-0004466706 00000 n 
-0004466857 00000 n 
-0004467009 00000 n 
-0004467162 00000 n 
-0004467314 00000 n 
-0004467467 00000 n 
-0004467620 00000 n 
-0004467773 00000 n 
-0004467926 00000 n 
-0004468079 00000 n 
-0004468232 00000 n 
-0004468385 00000 n 
-0004468537 00000 n 
-0004468690 00000 n 
-0004468843 00000 n 
-0004468996 00000 n 
-0004469149 00000 n 
-0004469302 00000 n 
-0004469455 00000 n 
-0004469608 00000 n 
-0004469761 00000 n 
-0004469914 00000 n 
-0004470065 00000 n 
-0004470218 00000 n 
-0004470371 00000 n 
-0004470524 00000 n 
-0004470677 00000 n 
-0004470830 00000 n 
-0004470981 00000 n 
-0004471132 00000 n 
-0004471284 00000 n 
-0004471436 00000 n 
-0004471588 00000 n 
-0004471741 00000 n 
-0004471893 00000 n 
-0004472044 00000 n 
-0004472196 00000 n 
-0004472348 00000 n 
-0004472500 00000 n 
-0004472653 00000 n 
-0004472805 00000 n 
-0004472957 00000 n 
-0004473110 00000 n 
-0004473263 00000 n 
-0004473416 00000 n 
-0004473569 00000 n 
-0004473722 00000 n 
-0004473875 00000 n 
-0004474028 00000 n 
-0004474181 00000 n 
-0004474333 00000 n 
-0004474486 00000 n 
-0004474639 00000 n 
-0004474792 00000 n 
-0004474945 00000 n 
-0004475098 00000 n 
-0004475251 00000 n 
-0004475403 00000 n 
-0004475556 00000 n 
-0004475709 00000 n 
-0004475862 00000 n 
-0004476014 00000 n 
-0004476167 00000 n 
-0004476320 00000 n 
-0004476473 00000 n 
-0004476626 00000 n 
-0004476779 00000 n 
-0004476932 00000 n 
-0004477082 00000 n 
-0004477235 00000 n 
-0004477388 00000 n 
-0004477541 00000 n 
-0004477694 00000 n 
-0004477847 00000 n 
-0004478000 00000 n 
-0004478153 00000 n 
-0004478306 00000 n 
-0004478459 00000 n 
-0004478611 00000 n 
-0004481830 00000 n 
-0004478829 00000 n 
-0004456039 00000 n 
-0004454292 00000 n 
-0004478763 00000 n 
-0004481983 00000 n 
-0004482136 00000 n 
-0004482289 00000 n 
-0004482442 00000 n 
-0004482592 00000 n 
-0004482745 00000 n 
-0004482898 00000 n 
-0004483051 00000 n 
-0004483203 00000 n 
-0004483355 00000 n 
-0004483507 00000 n 
-0004483660 00000 n 
-0004483813 00000 n 
-0004483966 00000 n 
-0004484119 00000 n 
-0004484271 00000 n 
-0004484423 00000 n 
-0004484575 00000 n 
-0004484728 00000 n 
-0004484879 00000 n 
-0004485031 00000 n 
-0004485184 00000 n 
-0004485336 00000 n 
-0004485488 00000 n 
-0004485641 00000 n 
-0004485793 00000 n 
-0004485946 00000 n 
-0004486099 00000 n 
-0004486252 00000 n 
-0004486405 00000 n 
-0004486557 00000 n 
-0004486709 00000 n 
-0004486861 00000 n 
-0004487012 00000 n 
-0004487165 00000 n 
-0004487318 00000 n 
-0004487471 00000 n 
-0004487623 00000 n 
-0004487776 00000 n 
-0004487928 00000 n 
-0004488081 00000 n 
-0004488234 00000 n 
-0004488386 00000 n 
-0004488538 00000 n 
-0004488691 00000 n 
-0004488843 00000 n 
-0004488996 00000 n 
-0004489149 00000 n 
-0004489300 00000 n 
-0004489453 00000 n 
-0004489605 00000 n 
-0004489757 00000 n 
-0004489908 00000 n 
-0004490060 00000 n 
-0004490212 00000 n 
-0004490365 00000 n 
-0004490518 00000 n 
-0004490671 00000 n 
-0004490824 00000 n 
-0004490977 00000 n 
-0004491130 00000 n 
-0004491283 00000 n 
-0004491436 00000 n 
-0004491589 00000 n 
-0004491741 00000 n 
-0004491894 00000 n 
-0004492046 00000 n 
-0004492199 00000 n 
-0004492350 00000 n 
-0004492501 00000 n 
-0004492652 00000 n 
-0004492803 00000 n 
-0004492954 00000 n 
-0004493105 00000 n 
-0004493258 00000 n 
-0004493411 00000 n 
-0004493564 00000 n 
-0004493717 00000 n 
-0004493869 00000 n 
-0004494020 00000 n 
-0004494173 00000 n 
-0004494326 00000 n 
-0004494479 00000 n 
-0004494632 00000 n 
-0004494785 00000 n 
-0004494937 00000 n 
-0004495090 00000 n 
-0004495243 00000 n 
-0004495396 00000 n 
-0004495549 00000 n 
-0004495702 00000 n 
-0004495854 00000 n 
-0004496006 00000 n 
-0004496159 00000 n 
-0004496312 00000 n 
-0004496465 00000 n 
-0004496618 00000 n 
-0004496768 00000 n 
-0004496920 00000 n 
-0004497072 00000 n 
-0004497223 00000 n 
-0004497376 00000 n 
-0004497529 00000 n 
-0004497681 00000 n 
-0004497833 00000 n 
-0004497985 00000 n 
-0004498136 00000 n 
-0004498288 00000 n 
-0004498441 00000 n 
-0004498594 00000 n 
-0004498747 00000 n 
-0004498899 00000 n 
-0004499052 00000 n 
-0004499204 00000 n 
-0004499357 00000 n 
-0004499510 00000 n 
-0004499662 00000 n 
-0004499815 00000 n 
-0004501249 00000 n 
-0004501401 00000 n 
-0004500034 00000 n 
-0004480508 00000 n 
-0004478946 00000 n 
-0004499968 00000 n 
-0004501554 00000 n 
-0004501707 00000 n 
-0004501860 00000 n 
-0004502012 00000 n 
-0004502164 00000 n 
-0004502314 00000 n 
-0004502464 00000 n 
-0004502617 00000 n 
-0004502769 00000 n 
-0004502922 00000 n 
-0004503075 00000 n 
-0004503228 00000 n 
-0004503380 00000 n 
-0004503532 00000 n 
-0004503684 00000 n 
-0004503837 00000 n 
-0004503990 00000 n 
-0004504143 00000 n 
-0004504296 00000 n 
-0004504449 00000 n 
-0004504602 00000 n 
-0004504755 00000 n 
-0004504907 00000 n 
-0004505060 00000 n 
-0004505213 00000 n 
-0004505365 00000 n 
-0004505584 00000 n 
+0004329285 00000 n 
+0004329437 00000 n 
+0004329590 00000 n 
+0004329743 00000 n 
+0004329896 00000 n 
+0004330049 00000 n 
+0004330202 00000 n 
+0004330355 00000 n 
+0004330508 00000 n 
+0004333802 00000 n 
+0004333954 00000 n 
+0004330727 00000 n 
+0004316061 00000 n 
+0004314648 00000 n 
+0004330661 00000 n 
+0004334105 00000 n 
+0004334258 00000 n 
+0004334411 00000 n 
+0004334564 00000 n 
+0004334717 00000 n 
+0004334869 00000 n 
+0004335019 00000 n 
+0004335172 00000 n 
+0004335325 00000 n 
+0004335477 00000 n 
+0004335630 00000 n 
+0004335782 00000 n 
+0004335935 00000 n 
+0004336088 00000 n 
+0004336241 00000 n 
+0004336394 00000 n 
+0004336547 00000 n 
+0004336699 00000 n 
+0004336852 00000 n 
+0004337005 00000 n 
+0004337158 00000 n 
+0004337310 00000 n 
+0004337462 00000 n 
+0004337614 00000 n 
+0004337767 00000 n 
+0004337919 00000 n 
+0004338072 00000 n 
+0004338225 00000 n 
+0004338378 00000 n 
+0004338531 00000 n 
+0004338684 00000 n 
+0004338833 00000 n 
+0004338985 00000 n 
+0004339137 00000 n 
+0004339290 00000 n 
+0004339442 00000 n 
+0004339591 00000 n 
+0004339742 00000 n 
+0004339893 00000 n 
+0004340046 00000 n 
+0004340199 00000 n 
+0004340352 00000 n 
+0004340505 00000 n 
+0004340658 00000 n 
+0004340811 00000 n 
+0004340964 00000 n 
+0004341117 00000 n 
+0004341270 00000 n 
+0004341423 00000 n 
+0004341576 00000 n 
+0004341729 00000 n 
+0004341881 00000 n 
+0004342033 00000 n 
+0004342183 00000 n 
+0004342335 00000 n 
+0004342488 00000 n 
+0004342641 00000 n 
+0004342794 00000 n 
+0004342947 00000 n 
+0004343100 00000 n 
+0004343252 00000 n 
+0004343405 00000 n 
+0004343558 00000 n 
+0004343711 00000 n 
+0004343862 00000 n 
+0004344014 00000 n 
+0004344166 00000 n 
+0004344319 00000 n 
+0004344471 00000 n 
+0004344623 00000 n 
+0004344776 00000 n 
+0004344929 00000 n 
+0004345081 00000 n 
+0004345234 00000 n 
+0004345387 00000 n 
+0004345540 00000 n 
+0004345690 00000 n 
+0004345841 00000 n 
+0004345992 00000 n 
+0004346143 00000 n 
+0004346295 00000 n 
+0004346446 00000 n 
+0004346598 00000 n 
+0004346751 00000 n 
+0004346904 00000 n 
+0004347057 00000 n 
+0004347210 00000 n 
+0004347363 00000 n 
+0004347516 00000 n 
+0004347669 00000 n 
+0004347822 00000 n 
+0004347975 00000 n 
+0004348128 00000 n 
+0004348280 00000 n 
+0004348432 00000 n 
+0004348584 00000 n 
+0004348736 00000 n 
+0004348887 00000 n 
+0004349040 00000 n 
+0004349192 00000 n 
+0004349344 00000 n 
+0004349496 00000 n 
+0004349649 00000 n 
+0004349802 00000 n 
+0004349955 00000 n 
+0004350108 00000 n 
+0004350260 00000 n 
+0004350413 00000 n 
+0004350565 00000 n 
+0004350718 00000 n 
+0004350871 00000 n 
+0004351023 00000 n 
+0004351176 00000 n 
+0004351328 00000 n 
+0004354765 00000 n 
+0004354917 00000 n 
+0004355069 00000 n 
+0004355220 00000 n 
+0004355372 00000 n 
+0004355524 00000 n 
+0004355677 00000 n 
+0004351547 00000 n 
+0004332510 00000 n 
+0004330830 00000 n 
+0004351481 00000 n 
+0004355830 00000 n 
+0004355983 00000 n 
+0004356136 00000 n 
+0004356288 00000 n 
+0004356440 00000 n 
+0004356590 00000 n 
+0004356743 00000 n 
+0004356896 00000 n 
+0004357048 00000 n 
+0004357199 00000 n 
+0004357351 00000 n 
+0004357504 00000 n 
+0004357657 00000 n 
+0004357810 00000 n 
+0004357963 00000 n 
+0004358116 00000 n 
+0004358269 00000 n 
+0004358422 00000 n 
+0004358575 00000 n 
+0004358728 00000 n 
+0004358881 00000 n 
+0004359032 00000 n 
+0004359184 00000 n 
+0004359335 00000 n 
+0004359485 00000 n 
+0004359637 00000 n 
+0004359789 00000 n 
+0004359941 00000 n 
+0004360093 00000 n 
+0004360245 00000 n 
+0004360396 00000 n 
+0004360548 00000 n 
+0004360700 00000 n 
+0004360851 00000 n 
+0004361002 00000 n 
+0004361154 00000 n 
+0004361306 00000 n 
+0004361457 00000 n 
+0004361609 00000 n 
+0004361760 00000 n 
+0004361909 00000 n 
+0004362061 00000 n 
+0004362213 00000 n 
+0004362366 00000 n 
+0004362519 00000 n 
+0004362672 00000 n 
+0004362825 00000 n 
+0004362978 00000 n 
+0004363131 00000 n 
+0004363284 00000 n 
+0004363436 00000 n 
+0004363589 00000 n 
+0004363742 00000 n 
+0004363895 00000 n 
+0004364046 00000 n 
+0004364198 00000 n 
+0004364350 00000 n 
+0004364502 00000 n 
+0004364654 00000 n 
+0004364806 00000 n 
+0004364959 00000 n 
+0004365112 00000 n 
+0004365264 00000 n 
+0004365415 00000 n 
+0004365568 00000 n 
+0004365720 00000 n 
+0004365871 00000 n 
+0004366023 00000 n 
+0004366175 00000 n 
+0004366326 00000 n 
+0004366478 00000 n 
+0004366631 00000 n 
+0004366784 00000 n 
+0004366937 00000 n 
+0004367090 00000 n 
+0004367243 00000 n 
+0004367396 00000 n 
+0004367549 00000 n 
+0004367702 00000 n 
+0004367855 00000 n 
+0004368007 00000 n 
+0004368159 00000 n 
+0004368312 00000 n 
+0004368465 00000 n 
+0004368618 00000 n 
+0004368770 00000 n 
+0004368923 00000 n 
+0004369076 00000 n 
+0004369229 00000 n 
+0004369380 00000 n 
+0004369533 00000 n 
+0004369686 00000 n 
+0004369839 00000 n 
+0004369992 00000 n 
+0004370145 00000 n 
+0004370298 00000 n 
+0004370451 00000 n 
+0004370604 00000 n 
+0004370757 00000 n 
+0004370910 00000 n 
+0004371063 00000 n 
+0004371216 00000 n 
+0004371369 00000 n 
+0004371521 00000 n 
+0004371673 00000 n 
+0004371824 00000 n 
+0004371976 00000 n 
+0004372127 00000 n 
+0004372278 00000 n 
+0004372430 00000 n 
+0004372583 00000 n 
+0004372736 00000 n 
+0004372889 00000 n 
+0004373041 00000 n 
+0004373193 00000 n 
+0004373344 00000 n 
+0004373497 00000 n 
+0004373650 00000 n 
+0004373803 00000 n 
+0004373956 00000 n 
+0004374109 00000 n 
+0004374261 00000 n 
+0004374413 00000 n 
+0004374565 00000 n 
+0004374716 00000 n 
+0004374869 00000 n 
+0004375022 00000 n 
+0004375174 00000 n 
+0004375327 00000 n 
+0004375480 00000 n 
+0004375633 00000 n 
+0004375786 00000 n 
+0004375939 00000 n 
+0004376158 00000 n 
+0004353233 00000 n 
+0004351664 00000 n 
+0004376092 00000 n 
+0004379183 00000 n 
+0004379336 00000 n 
+0004379485 00000 n 
+0004379634 00000 n 
+0004379787 00000 n 
+0004379940 00000 n 
+0004380093 00000 n 
+0004380246 00000 n 
+0004380398 00000 n 
+0004380550 00000 n 
+0004380703 00000 n 
+0004380856 00000 n 
+0004381008 00000 n 
+0004381161 00000 n 
+0004381314 00000 n 
+0004381467 00000 n 
+0004381619 00000 n 
+0004381771 00000 n 
+0004381923 00000 n 
+0004382075 00000 n 
+0004382227 00000 n 
+0004382380 00000 n 
+0004382531 00000 n 
+0004382682 00000 n 
+0004382832 00000 n 
+0004382983 00000 n 
+0004383134 00000 n 
+0004383287 00000 n 
+0004383440 00000 n 
+0004383592 00000 n 
+0004383745 00000 n 
+0004383897 00000 n 
+0004384050 00000 n 
+0004384203 00000 n 
+0004384356 00000 n 
+0004384509 00000 n 
+0004384662 00000 n 
+0004384814 00000 n 
+0004384967 00000 n 
+0004385119 00000 n 
+0004385272 00000 n 
+0004385421 00000 n 
+0004385574 00000 n 
+0004385727 00000 n 
+0004385879 00000 n 
+0004386032 00000 n 
+0004386184 00000 n 
+0004386336 00000 n 
+0004386488 00000 n 
+0004386640 00000 n 
+0004386792 00000 n 
+0004386945 00000 n 
+0004387098 00000 n 
+0004387251 00000 n 
+0004387403 00000 n 
+0004387556 00000 n 
+0004387709 00000 n 
+0004387862 00000 n 
+0004388014 00000 n 
+0004388166 00000 n 
+0004388318 00000 n 
+0004388469 00000 n 
+0004388621 00000 n 
+0004388774 00000 n 
+0004388927 00000 n 
+0004389080 00000 n 
+0004389233 00000 n 
+0004389385 00000 n 
+0004389536 00000 n 
+0004389689 00000 n 
+0004389841 00000 n 
+0004389994 00000 n 
+0004390146 00000 n 
+0004390299 00000 n 
+0004390452 00000 n 
+0004390603 00000 n 
+0004390756 00000 n 
+0004390909 00000 n 
+0004391062 00000 n 
+0004391215 00000 n 
+0004391368 00000 n 
+0004391519 00000 n 
+0004391671 00000 n 
+0004391823 00000 n 
+0004391975 00000 n 
+0004392127 00000 n 
+0004392280 00000 n 
+0004392432 00000 n 
+0004392585 00000 n 
+0004392736 00000 n 
+0004392889 00000 n 
+0004393042 00000 n 
+0004393194 00000 n 
+0004393346 00000 n 
+0004393499 00000 n 
+0004393651 00000 n 
+0004393803 00000 n 
+0004393956 00000 n 
+0004394108 00000 n 
+0004394260 00000 n 
+0004394412 00000 n 
+0004394565 00000 n 
+0004394718 00000 n 
+0004394871 00000 n 
+0004398024 00000 n 
+0004395089 00000 n 
+0004378011 00000 n 
+0004376275 00000 n 
+0004395023 00000 n 
+0005332408 00000 n 
+0004398177 00000 n 
+0004398330 00000 n 
+0004398483 00000 n 
+0004398636 00000 n 
+0004398788 00000 n 
+0004398937 00000 n 
+0004399090 00000 n 
+0004399242 00000 n 
+0004399395 00000 n 
+0004399548 00000 n 
+0004399701 00000 n 
+0004399854 00000 n 
+0004400006 00000 n 
+0004400157 00000 n 
+0004400309 00000 n 
+0004400461 00000 n 
+0004400613 00000 n 
+0004400766 00000 n 
+0004400919 00000 n 
+0004401072 00000 n 
+0004401225 00000 n 
+0004401378 00000 n 
+0004401531 00000 n 
+0004401684 00000 n 
+0004401837 00000 n 
+0004401987 00000 n 
+0004402140 00000 n 
+0004402293 00000 n 
+0004402446 00000 n 
+0004402599 00000 n 
+0004402751 00000 n 
+0004402903 00000 n 
+0004403055 00000 n 
+0004403208 00000 n 
+0004403361 00000 n 
+0004403514 00000 n 
+0004403667 00000 n 
+0004403820 00000 n 
+0004403972 00000 n 
+0004404125 00000 n 
+0004404278 00000 n 
+0004404431 00000 n 
+0004404583 00000 n 
+0004404734 00000 n 
+0004404887 00000 n 
+0004405039 00000 n 
+0004405192 00000 n 
+0004405345 00000 n 
+0004405498 00000 n 
+0004405651 00000 n 
+0004405804 00000 n 
+0004405957 00000 n 
+0004406110 00000 n 
+0004406263 00000 n 
+0004406416 00000 n 
+0004406569 00000 n 
+0004406722 00000 n 
+0004406875 00000 n 
+0004407028 00000 n 
+0004407181 00000 n 
+0004407333 00000 n 
+0004407486 00000 n 
+0004407639 00000 n 
+0004407792 00000 n 
+0004407945 00000 n 
+0004408098 00000 n 
+0004408251 00000 n 
+0004408404 00000 n 
+0004408557 00000 n 
+0004408710 00000 n 
+0004408861 00000 n 
+0004409014 00000 n 
+0004409167 00000 n 
+0004409319 00000 n 
+0004409471 00000 n 
+0004409623 00000 n 
+0004409775 00000 n 
+0004409927 00000 n 
+0004410080 00000 n 
+0004410231 00000 n 
+0004410383 00000 n 
+0004410535 00000 n 
+0004410687 00000 n 
+0004410839 00000 n 
+0004410992 00000 n 
+0004411144 00000 n 
+0004411297 00000 n 
+0004411450 00000 n 
+0004411602 00000 n 
+0004411755 00000 n 
+0004411908 00000 n 
+0004412061 00000 n 
+0004412214 00000 n 
+0004412367 00000 n 
+0004412520 00000 n 
+0004412672 00000 n 
+0004412825 00000 n 
+0004412978 00000 n 
+0004416039 00000 n 
+0004413197 00000 n 
+0004396902 00000 n 
+0004395220 00000 n 
+0004413131 00000 n 
+0004416192 00000 n 
+0004416345 00000 n 
+0004416498 00000 n 
+0004416649 00000 n 
+0004416801 00000 n 
+0004416953 00000 n 
+0004417103 00000 n 
+0004417255 00000 n 
+0004417407 00000 n 
+0004417560 00000 n 
+0004417712 00000 n 
+0004417865 00000 n 
+0004418017 00000 n 
+0004418169 00000 n 
+0004418321 00000 n 
+0004418474 00000 n 
+0004418626 00000 n 
+0004418778 00000 n 
+0004418930 00000 n 
+0004419083 00000 n 
+0004419235 00000 n 
+0004419388 00000 n 
+0004419541 00000 n 
+0004419694 00000 n 
+0004419847 00000 n 
+0004420000 00000 n 
+0004420152 00000 n 
+0004420305 00000 n 
+0004420457 00000 n 
+0004420608 00000 n 
+0004420760 00000 n 
+0004420909 00000 n 
+0004421062 00000 n 
+0004421215 00000 n 
+0004421368 00000 n 
+0004421521 00000 n 
+0004421674 00000 n 
+0004421827 00000 n 
+0004421979 00000 n 
+0004422128 00000 n 
+0004422281 00000 n 
+0004422433 00000 n 
+0004422585 00000 n 
+0004422736 00000 n 
+0004422888 00000 n 
+0004423040 00000 n 
+0004423193 00000 n 
+0004423345 00000 n 
+0004423498 00000 n 
+0004423651 00000 n 
+0004423804 00000 n 
+0004423957 00000 n 
+0004424109 00000 n 
+0004424262 00000 n 
+0004424415 00000 n 
+0004424568 00000 n 
+0004424719 00000 n 
+0004424872 00000 n 
+0004425025 00000 n 
+0004425177 00000 n 
+0004425329 00000 n 
+0004425482 00000 n 
+0004425635 00000 n 
+0004425788 00000 n 
+0004425941 00000 n 
+0004426094 00000 n 
+0004426247 00000 n 
+0004426400 00000 n 
+0004426551 00000 n 
+0004426704 00000 n 
+0004426857 00000 n 
+0004427010 00000 n 
+0004427162 00000 n 
+0004427315 00000 n 
+0004427468 00000 n 
+0004427621 00000 n 
+0004427774 00000 n 
+0004427927 00000 n 
+0004428080 00000 n 
+0004428233 00000 n 
+0004428386 00000 n 
+0004428539 00000 n 
+0004428691 00000 n 
+0004428844 00000 n 
+0004428997 00000 n 
+0004429147 00000 n 
+0004429300 00000 n 
+0004429453 00000 n 
+0004429606 00000 n 
+0004429757 00000 n 
+0004429907 00000 n 
+0004430060 00000 n 
+0004430213 00000 n 
+0004430366 00000 n 
+0004430518 00000 n 
+0004430671 00000 n 
+0004430823 00000 n 
+0004430975 00000 n 
+0004431128 00000 n 
+0004431281 00000 n 
+0004434569 00000 n 
+0004434722 00000 n 
+0004431500 00000 n 
+0004414897 00000 n 
+0004413314 00000 n 
+0004431434 00000 n 
+0004434875 00000 n 
+0004435028 00000 n 
+0004435181 00000 n 
+0004435334 00000 n 
+0004435487 00000 n 
+0004435638 00000 n 
+0004435791 00000 n 
+0004435944 00000 n 
+0004436097 00000 n 
+0004436250 00000 n 
+0004436403 00000 n 
+0004436556 00000 n 
+0004436709 00000 n 
+0004436862 00000 n 
+0004437015 00000 n 
+0004437168 00000 n 
+0004437321 00000 n 
+0004437474 00000 n 
+0004437627 00000 n 
+0004437780 00000 n 
+0004437931 00000 n 
+0004438082 00000 n 
+0004438235 00000 n 
+0004438387 00000 n 
+0004438540 00000 n 
+0004438693 00000 n 
+0004438846 00000 n 
+0004438998 00000 n 
+0004439151 00000 n 
+0004439304 00000 n 
+0004439457 00000 n 
+0004439609 00000 n 
+0004439762 00000 n 
+0004439914 00000 n 
+0004440066 00000 n 
+0004440217 00000 n 
+0004440369 00000 n 
+0004440521 00000 n 
+0004440674 00000 n 
+0004440827 00000 n 
+0004440980 00000 n 
+0004441133 00000 n 
+0004441286 00000 n 
+0004441439 00000 n 
+0004441592 00000 n 
+0004441745 00000 n 
+0004441897 00000 n 
+0004442049 00000 n 
+0004442202 00000 n 
+0004442355 00000 n 
+0004442506 00000 n 
+0004442659 00000 n 
+0004442812 00000 n 
+0004442965 00000 n 
+0004443118 00000 n 
+0004443270 00000 n 
+0004443423 00000 n 
+0004443576 00000 n 
+0004443729 00000 n 
+0004443882 00000 n 
+0004444035 00000 n 
+0004444187 00000 n 
+0004444340 00000 n 
+0004444492 00000 n 
+0004444642 00000 n 
+0004444792 00000 n 
+0004444943 00000 n 
+0004445093 00000 n 
+0004445240 00000 n 
+0004445391 00000 n 
+0004445544 00000 n 
+0004445697 00000 n 
+0004445849 00000 n 
+0004446002 00000 n 
+0004446155 00000 n 
+0004446308 00000 n 
+0004446461 00000 n 
+0004446614 00000 n 
+0004446766 00000 n 
+0004446919 00000 n 
+0004447071 00000 n 
+0004447223 00000 n 
+0004447375 00000 n 
+0004447526 00000 n 
+0004447678 00000 n 
+0004447831 00000 n 
+0004447984 00000 n 
+0004448137 00000 n 
+0004448290 00000 n 
+0004448442 00000 n 
+0004448595 00000 n 
+0004448748 00000 n 
+0004448901 00000 n 
+0004449054 00000 n 
+0004449207 00000 n 
+0004449360 00000 n 
+0004449513 00000 n 
+0004449666 00000 n 
+0004449818 00000 n 
+0004449970 00000 n 
+0004450122 00000 n 
+0004450275 00000 n 
+0004450428 00000 n 
+0004450581 00000 n 
+0004450733 00000 n 
+0004450883 00000 n 
+0004451036 00000 n 
+0004451188 00000 n 
+0004451341 00000 n 
+0004451494 00000 n 
+0004454529 00000 n 
+0004451711 00000 n 
+0004433317 00000 n 
+0004431617 00000 n 
+0004451645 00000 n 
+0004454682 00000 n 
+0004454830 00000 n 
+0004454982 00000 n 
+0004455135 00000 n 
+0004455288 00000 n 
+0004455441 00000 n 
+0004455594 00000 n 
+0004455746 00000 n 
+0004455896 00000 n 
+0004456049 00000 n 
+0004456202 00000 n 
+0004456355 00000 n 
+0004456508 00000 n 
+0004456661 00000 n 
+0004456812 00000 n 
+0004456965 00000 n 
+0004457118 00000 n 
+0004457267 00000 n 
+0004457420 00000 n 
+0004457571 00000 n 
+0004457723 00000 n 
+0004457876 00000 n 
+0004458029 00000 n 
+0004458182 00000 n 
+0004458334 00000 n 
+0004458487 00000 n 
+0004458640 00000 n 
+0004458793 00000 n 
+0004458946 00000 n 
+0004459099 00000 n 
+0004459252 00000 n 
+0004459404 00000 n 
+0004459554 00000 n 
+0004459707 00000 n 
+0004459860 00000 n 
+0004460013 00000 n 
+0004460166 00000 n 
+0004460319 00000 n 
+0004460472 00000 n 
+0004460625 00000 n 
+0004460777 00000 n 
+0004460928 00000 n 
+0004461081 00000 n 
+0004461234 00000 n 
+0004461387 00000 n 
+0004461540 00000 n 
+0004461692 00000 n 
+0004461841 00000 n 
+0004461993 00000 n 
+0004462146 00000 n 
+0004462299 00000 n 
+0004462451 00000 n 
+0004462604 00000 n 
+0004462757 00000 n 
+0004462910 00000 n 
+0004463063 00000 n 
+0004463216 00000 n 
+0004463367 00000 n 
+0004463520 00000 n 
+0004463673 00000 n 
+0004463826 00000 n 
+0004463979 00000 n 
+0004464131 00000 n 
+0004464283 00000 n 
+0004464436 00000 n 
+0004464588 00000 n 
+0004464741 00000 n 
+0004464894 00000 n 
+0004465047 00000 n 
+0004465199 00000 n 
+0004465352 00000 n 
+0004465505 00000 n 
+0004465658 00000 n 
+0004465810 00000 n 
+0004465963 00000 n 
+0004466116 00000 n 
+0004466269 00000 n 
+0004466422 00000 n 
+0004466574 00000 n 
+0004466727 00000 n 
+0004466878 00000 n 
+0004467031 00000 n 
+0004467184 00000 n 
+0004467335 00000 n 
+0004467488 00000 n 
+0004467640 00000 n 
+0004467793 00000 n 
+0004467946 00000 n 
+0004468099 00000 n 
+0004468252 00000 n 
+0004468404 00000 n 
+0004468557 00000 n 
+0004468709 00000 n 
+0004468861 00000 n 
+0004469013 00000 n 
+0004469165 00000 n 
+0004469318 00000 n 
+0004469471 00000 n 
+0004469623 00000 n 
+0004469774 00000 n 
+0004473011 00000 n 
+0004469993 00000 n 
+0004453387 00000 n 
+0004451828 00000 n 
+0004469927 00000 n 
+0004473162 00000 n 
+0004473315 00000 n 
+0004473468 00000 n 
+0004473620 00000 n 
+0004473773 00000 n 
+0004473925 00000 n 
+0004474078 00000 n 
+0004474230 00000 n 
+0004474382 00000 n 
+0004474532 00000 n 
+0004474684 00000 n 
+0004474835 00000 n 
+0004474988 00000 n 
+0004475141 00000 n 
+0004475294 00000 n 
+0004475447 00000 n 
+0004475600 00000 n 
+0004475753 00000 n 
+0004475905 00000 n 
+0004476057 00000 n 
+0004476210 00000 n 
+0004476363 00000 n 
+0004476516 00000 n 
+0004476669 00000 n 
+0004476822 00000 n 
+0004476975 00000 n 
+0004477127 00000 n 
+0004477279 00000 n 
+0004477432 00000 n 
+0004477585 00000 n 
+0004477738 00000 n 
+0004477891 00000 n 
+0004478044 00000 n 
+0004478197 00000 n 
+0004478350 00000 n 
+0004478503 00000 n 
+0004478656 00000 n 
+0004478809 00000 n 
+0004478960 00000 n 
+0004479111 00000 n 
+0004479264 00000 n 
+0004479417 00000 n 
+0004479570 00000 n 
+0004479723 00000 n 
+0004479876 00000 n 
+0004480027 00000 n 
+0004480180 00000 n 
+0004480333 00000 n 
+0004480486 00000 n 
+0004480639 00000 n 
+0004480792 00000 n 
+0004480944 00000 n 
+0004481096 00000 n 
+0004481245 00000 n 
+0004481395 00000 n 
+0004481548 00000 n 
+0004481701 00000 n 
+0004481854 00000 n 
+0004482007 00000 n 
+0004482160 00000 n 
+0004482313 00000 n 
+0004482466 00000 n 
+0004482619 00000 n 
+0004482772 00000 n 
+0004482925 00000 n 
+0004483078 00000 n 
+0004483230 00000 n 
+0004483383 00000 n 
+0004483535 00000 n 
+0004483687 00000 n 
+0004483839 00000 n 
+0004483990 00000 n 
+0004484143 00000 n 
+0004484296 00000 n 
+0004484449 00000 n 
+0004484602 00000 n 
+0004484755 00000 n 
+0004484908 00000 n 
+0004485061 00000 n 
+0004485214 00000 n 
+0004485365 00000 n 
+0004485517 00000 n 
+0004485670 00000 n 
+0004485823 00000 n 
+0004485976 00000 n 
+0004486129 00000 n 
+0004486282 00000 n 
+0004486431 00000 n 
+0004486583 00000 n 
+0004486735 00000 n 
+0004486887 00000 n 
+0004487040 00000 n 
+0004487193 00000 n 
+0004487346 00000 n 
+0004487499 00000 n 
+0004487652 00000 n 
+0004487805 00000 n 
+0004487958 00000 n 
+0004488111 00000 n 
+0004488264 00000 n 
+0004488417 00000 n 
+0004488570 00000 n 
+0004488723 00000 n 
+0004488876 00000 n 
+0004489029 00000 n 
+0004489182 00000 n 
+0004489335 00000 n 
+0004489488 00000 n 
+0004489641 00000 n 
+0004489793 00000 n 
+0004492770 00000 n 
+0004492922 00000 n 
+0004493074 00000 n 
+0004493226 00000 n 
+0004493378 00000 n 
+0004493531 00000 n 
+0004493684 00000 n 
+0004490012 00000 n 
+0004471769 00000 n 
+0004470096 00000 n 
+0004489946 00000 n 
+0004493837 00000 n 
+0004493989 00000 n 
+0004494141 00000 n 
+0004494294 00000 n 
+0004494447 00000 n 
+0004494600 00000 n 
+0004494753 00000 n 
+0004494906 00000 n 
+0004495058 00000 n 
+0004495210 00000 n 
+0004495363 00000 n 
+0004495514 00000 n 
+0004495663 00000 n 
+0004495816 00000 n 
+0004495969 00000 n 
+0004496122 00000 n 
+0004496274 00000 n 
+0004496422 00000 n 
+0004496575 00000 n 
+0004496727 00000 n 
+0004496879 00000 n 
+0004497032 00000 n 
+0004497185 00000 n 
+0004497338 00000 n 
+0004497491 00000 n 
+0004497644 00000 n 
+0004497797 00000 n 
+0004497950 00000 n 
+0004498103 00000 n 
+0004498256 00000 n 
+0004498409 00000 n 
+0004498558 00000 n 
+0004498710 00000 n 
+0004498862 00000 n 
+0004499014 00000 n 
+0004499167 00000 n 
+0004499319 00000 n 
+0004499471 00000 n 
+0004499623 00000 n 
+0004499774 00000 n 
+0004499923 00000 n 
+0004500074 00000 n 
+0004500227 00000 n 
+0004500380 00000 n 
+0004500533 00000 n 
+0004500685 00000 n 
 0004500837 00000 n 
-0004500151 00000 n 
-0004505518 00000 n 
-0004506549 00000 n 
-0004506606 00000 n 
-0004507057 00000 n 
-0004507082 00000 n 
-0004507107 00000 n 
-0004507132 00000 n 
-0004507169 00000 n 
-0004507506 00000 n 
-0004507539 00000 n 
-0004507572 00000 n 
-0004508227 00000 n 
-0004508744 00000 n 
-0004509396 00000 n 
-0004509796 00000 n 
-0004510177 00000 n 
-0004510214 00000 n 
-0004510665 00000 n 
-0004511054 00000 n 
-0004511093 00000 n 
-0004511174 00000 n 
-0004511608 00000 n 
-0004512279 00000 n 
-0004512676 00000 n 
-0004512779 00000 n 
-0004513417 00000 n 
-0004514098 00000 n 
-0004514737 00000 n 
-0004515379 00000 n 
-0004516032 00000 n 
-0004516488 00000 n 
-0004517121 00000 n 
-0004518788 00000 n 
-0004519023 00000 n 
-0004536080 00000 n 
-0004536664 00000 n 
-0004545837 00000 n 
-0004546188 00000 n 
-0004550419 00000 n 
-0004550682 00000 n 
-0004558582 00000 n 
-0004558871 00000 n 
-0004566884 00000 n 
-0004567183 00000 n 
-0004581219 00000 n 
-0004581714 00000 n 
-0004583648 00000 n 
-0004583900 00000 n 
-0004585718 00000 n 
-0004585954 00000 n 
-0004587749 00000 n 
-0004587988 00000 n 
-0004607069 00000 n 
-0004607712 00000 n 
-0004614244 00000 n 
-0004614563 00000 n 
-0004617895 00000 n 
-0004618165 00000 n 
-0004622131 00000 n 
-0004622409 00000 n 
-0004635084 00000 n 
-0004635550 00000 n 
-0004637367 00000 n 
-0004637597 00000 n 
-0004639400 00000 n 
-0004639631 00000 n 
-0004650440 00000 n 
-0004650967 00000 n 
-0004655295 00000 n 
+0004500989 00000 n 
+0004501142 00000 n 
+0004501294 00000 n 
+0004501447 00000 n 
+0004501599 00000 n 
+0004501752 00000 n 
+0004501905 00000 n 
+0004502058 00000 n 
+0004502211 00000 n 
+0004502364 00000 n 
+0004502517 00000 n 
+0004502670 00000 n 
+0004502823 00000 n 
+0004502976 00000 n 
+0004503128 00000 n 
+0004503280 00000 n 
+0004503433 00000 n 
+0004503586 00000 n 
+0004503738 00000 n 
+0004503891 00000 n 
+0004504044 00000 n 
+0004504196 00000 n 
+0004504348 00000 n 
+0004504500 00000 n 
+0004504652 00000 n 
+0004504802 00000 n 
+0004504953 00000 n 
+0004505104 00000 n 
+0004505257 00000 n 
+0004505410 00000 n 
+0004505563 00000 n 
+0004505716 00000 n 
+0004505868 00000 n 
+0004506020 00000 n 
+0004506173 00000 n 
+0004506326 00000 n 
+0004506478 00000 n 
+0004506631 00000 n 
+0004506784 00000 n 
+0004506937 00000 n 
+0004507090 00000 n 
+0004507243 00000 n 
+0004507395 00000 n 
+0004507546 00000 n 
+0004507698 00000 n 
+0004507850 00000 n 
+0004508003 00000 n 
+0004508154 00000 n 
+0004508307 00000 n 
+0004508459 00000 n 
+0004508612 00000 n 
+0004508765 00000 n 
+0004508917 00000 n 
+0004509070 00000 n 
+0004509221 00000 n 
+0004509374 00000 n 
+0004509527 00000 n 
+0004509680 00000 n 
+0004509831 00000 n 
+0004513255 00000 n 
+0004510050 00000 n 
+0004491508 00000 n 
+0004490129 00000 n 
+0004509984 00000 n 
+0005332541 00000 n 
+0004513408 00000 n 
+0004513561 00000 n 
+0004513713 00000 n 
+0004513865 00000 n 
+0004514017 00000 n 
+0004514168 00000 n 
+0004514319 00000 n 
+0004514470 00000 n 
+0004514622 00000 n 
+0004514774 00000 n 
+0004514926 00000 n 
+0004515077 00000 n 
+0004515229 00000 n 
+0004515381 00000 n 
+0004515532 00000 n 
+0004515683 00000 n 
+0004515834 00000 n 
+0004515985 00000 n 
+0004516135 00000 n 
+0004516285 00000 n 
+0004516438 00000 n 
+0004516591 00000 n 
+0004516744 00000 n 
+0004516897 00000 n 
+0004517050 00000 n 
+0004517203 00000 n 
+0004517356 00000 n 
+0004517509 00000 n 
+0004517661 00000 n 
+0004517814 00000 n 
+0004517967 00000 n 
+0004518120 00000 n 
+0004518271 00000 n 
+0004518423 00000 n 
+0004518575 00000 n 
+0004518727 00000 n 
+0004518879 00000 n 
+0004519031 00000 n 
+0004519184 00000 n 
+0004519336 00000 n 
+0004519489 00000 n 
+0004519642 00000 n 
+0004519795 00000 n 
+0004519948 00000 n 
+0004520100 00000 n 
+0004520251 00000 n 
+0004520403 00000 n 
+0004520555 00000 n 
+0004520708 00000 n 
+0004520861 00000 n 
+0004521014 00000 n 
+0004521166 00000 n 
+0004521319 00000 n 
+0004521472 00000 n 
+0004521625 00000 n 
+0004521776 00000 n 
+0004521929 00000 n 
+0004522082 00000 n 
+0004522233 00000 n 
+0004522386 00000 n 
+0004522538 00000 n 
+0004522690 00000 n 
+0004522842 00000 n 
+0004522994 00000 n 
+0004523146 00000 n 
+0004523299 00000 n 
+0004523451 00000 n 
+0004523604 00000 n 
+0004523757 00000 n 
+0004523909 00000 n 
+0004524062 00000 n 
+0004524215 00000 n 
+0004524367 00000 n 
+0004524520 00000 n 
+0004524672 00000 n 
+0004524824 00000 n 
+0004524977 00000 n 
+0004525130 00000 n 
+0004525283 00000 n 
+0004525436 00000 n 
+0004525589 00000 n 
+0004525742 00000 n 
+0004525895 00000 n 
+0004526048 00000 n 
+0004526201 00000 n 
+0004526354 00000 n 
+0004526507 00000 n 
+0004526659 00000 n 
+0004526811 00000 n 
+0004526962 00000 n 
+0004527113 00000 n 
+0004527266 00000 n 
+0004527418 00000 n 
+0004527571 00000 n 
+0004527724 00000 n 
+0004527877 00000 n 
+0004528030 00000 n 
+0004528183 00000 n 
+0004528336 00000 n 
+0004528489 00000 n 
+0004528642 00000 n 
+0004528794 00000 n 
+0004528945 00000 n 
+0004529096 00000 n 
+0004529249 00000 n 
+0004529402 00000 n 
+0004529555 00000 n 
+0004529708 00000 n 
+0004529859 00000 n 
+0004530012 00000 n 
+0004530165 00000 n 
+0004530317 00000 n 
+0004530470 00000 n 
+0004530623 00000 n 
+0004530776 00000 n 
+0004530928 00000 n 
+0004531080 00000 n 
+0004531232 00000 n 
+0004531384 00000 n 
+0004531536 00000 n 
+0004531689 00000 n 
+0004531841 00000 n 
+0004531994 00000 n 
+0004532147 00000 n 
+0004532299 00000 n 
+0004532450 00000 n 
+0004532602 00000 n 
+0004532754 00000 n 
+0004532907 00000 n 
+0004533060 00000 n 
+0004536258 00000 n 
+0004533279 00000 n 
+0004511813 00000 n 
+0004510153 00000 n 
+0004533213 00000 n 
+0004536411 00000 n 
+0004536564 00000 n 
+0004536717 00000 n 
+0004536869 00000 n 
+0004537021 00000 n 
+0004537173 00000 n 
+0004537324 00000 n 
+0004537474 00000 n 
+0004537624 00000 n 
+0004537777 00000 n 
+0004537930 00000 n 
+0004538083 00000 n 
+0004538235 00000 n 
+0004538387 00000 n 
+0004538539 00000 n 
+0004538691 00000 n 
+0004538844 00000 n 
+0004538997 00000 n 
+0004539150 00000 n 
+0004539303 00000 n 
+0004539456 00000 n 
+0004539609 00000 n 
+0004539762 00000 n 
+0004539915 00000 n 
+0004540067 00000 n 
+0004540219 00000 n 
+0004540371 00000 n 
+0004540523 00000 n 
+0004540675 00000 n 
+0004540828 00000 n 
+0004540981 00000 n 
+0004541133 00000 n 
+0004541286 00000 n 
+0004541439 00000 n 
+0004541592 00000 n 
+0004541745 00000 n 
+0004541897 00000 n 
+0004542049 00000 n 
+0004542201 00000 n 
+0004542353 00000 n 
+0004542503 00000 n 
+0004542656 00000 n 
+0004542809 00000 n 
+0004542962 00000 n 
+0004543115 00000 n 
+0004543267 00000 n 
+0004543420 00000 n 
+0004543573 00000 n 
+0004543726 00000 n 
+0004543879 00000 n 
+0004544032 00000 n 
+0004544185 00000 n 
+0004544338 00000 n 
+0004544491 00000 n 
+0004544644 00000 n 
+0004544797 00000 n 
+0004544950 00000 n 
+0004545102 00000 n 
+0004545252 00000 n 
+0004545405 00000 n 
+0004545558 00000 n 
+0004545711 00000 n 
+0004545864 00000 n 
+0004546017 00000 n 
+0004546169 00000 n 
+0004546322 00000 n 
+0004546475 00000 n 
+0004546627 00000 n 
+0004546779 00000 n 
+0004546931 00000 n 
+0004547084 00000 n 
+0004547237 00000 n 
+0004547388 00000 n 
+0004547538 00000 n 
+0004547690 00000 n 
+0004547842 00000 n 
+0004547995 00000 n 
+0004548148 00000 n 
+0004548300 00000 n 
+0004548453 00000 n 
+0004548606 00000 n 
+0004548759 00000 n 
+0004548912 00000 n 
+0004549065 00000 n 
+0004549218 00000 n 
+0004549371 00000 n 
+0004549524 00000 n 
+0004549677 00000 n 
+0004549830 00000 n 
+0004549983 00000 n 
+0004550136 00000 n 
+0004550289 00000 n 
+0004550441 00000 n 
+0004550593 00000 n 
+0004550746 00000 n 
+0004550899 00000 n 
+0004551051 00000 n 
+0004551203 00000 n 
+0004551356 00000 n 
+0004551507 00000 n 
+0004551660 00000 n 
+0004554937 00000 n 
+0004551879 00000 n 
+0004535106 00000 n 
+0004533396 00000 n 
+0004551813 00000 n 
+0004555089 00000 n 
+0004555241 00000 n 
+0004555392 00000 n 
+0004555545 00000 n 
+0004555697 00000 n 
+0004555850 00000 n 
+0004556003 00000 n 
+0004556156 00000 n 
+0004556309 00000 n 
+0004556462 00000 n 
+0004556612 00000 n 
+0004556764 00000 n 
+0004556916 00000 n 
+0004557069 00000 n 
+0004557222 00000 n 
+0004557374 00000 n 
+0004557527 00000 n 
+0004557680 00000 n 
+0004557832 00000 n 
+0004557984 00000 n 
+0004558136 00000 n 
+0004558288 00000 n 
+0004558440 00000 n 
+0004558593 00000 n 
+0004558746 00000 n 
+0004558899 00000 n 
+0004559052 00000 n 
+0004559204 00000 n 
+0004559357 00000 n 
+0004559509 00000 n 
+0004559662 00000 n 
+0004559814 00000 n 
+0004559966 00000 n 
+0004560118 00000 n 
+0004560269 00000 n 
+0004560422 00000 n 
+0004560575 00000 n 
+0004560728 00000 n 
+0004560880 00000 n 
+0004561032 00000 n 
+0004561185 00000 n 
+0004561338 00000 n 
+0004561491 00000 n 
+0004561644 00000 n 
+0004561797 00000 n 
+0004561950 00000 n 
+0004562103 00000 n 
+0004562256 00000 n 
+0004562409 00000 n 
+0004562562 00000 n 
+0004562715 00000 n 
+0004562867 00000 n 
+0004563020 00000 n 
+0004563172 00000 n 
+0004563323 00000 n 
+0004563475 00000 n 
+0004563624 00000 n 
+0004563775 00000 n 
+0004563928 00000 n 
+0004564081 00000 n 
+0004564234 00000 n 
+0004564387 00000 n 
+0004564540 00000 n 
+0004564692 00000 n 
+0004564844 00000 n 
+0004564997 00000 n 
+0004565150 00000 n 
+0004565303 00000 n 
+0004565456 00000 n 
+0004565609 00000 n 
+0004565762 00000 n 
+0004565913 00000 n 
+0004566066 00000 n 
+0004566218 00000 n 
+0004566368 00000 n 
+0004566520 00000 n 
+0004566672 00000 n 
+0004566824 00000 n 
+0004566976 00000 n 
+0004567129 00000 n 
+0004567282 00000 n 
+0004567435 00000 n 
+0004567588 00000 n 
+0004567741 00000 n 
+0004567894 00000 n 
+0004568047 00000 n 
+0004568200 00000 n 
+0004568352 00000 n 
+0004568505 00000 n 
+0004568658 00000 n 
+0004568811 00000 n 
+0004568964 00000 n 
+0004569117 00000 n 
+0004569269 00000 n 
+0004569421 00000 n 
+0004569574 00000 n 
+0004569727 00000 n 
+0004569880 00000 n 
+0004570033 00000 n 
+0004570186 00000 n 
+0004570338 00000 n 
+0004570489 00000 n 
+0004570641 00000 n 
+0004570792 00000 n 
+0004570944 00000 n 
+0004571096 00000 n 
+0004571249 00000 n 
+0004571402 00000 n 
+0004571555 00000 n 
+0004571707 00000 n 
+0004571859 00000 n 
+0004572011 00000 n 
+0004572164 00000 n 
+0004572317 00000 n 
+0004572468 00000 n 
+0004572620 00000 n 
+0004572772 00000 n 
+0004572924 00000 n 
+0004573076 00000 n 
+0004573229 00000 n 
+0004573382 00000 n 
+0004573535 00000 n 
+0004573688 00000 n 
+0004573840 00000 n 
+0004573993 00000 n 
+0004574146 00000 n 
+0004574299 00000 n 
+0004577136 00000 n 
+0004577288 00000 n 
+0004574516 00000 n 
+0004553525 00000 n 
+0004551996 00000 n 
+0004574450 00000 n 
+0004577440 00000 n 
+0004577593 00000 n 
+0004577746 00000 n 
+0004577899 00000 n 
+0004578050 00000 n 
+0004578201 00000 n 
+0004578353 00000 n 
+0004578506 00000 n 
+0004578659 00000 n 
+0004578812 00000 n 
+0004578965 00000 n 
+0004579118 00000 n 
+0004579271 00000 n 
+0004579423 00000 n 
+0004579576 00000 n 
+0004579729 00000 n 
+0004579882 00000 n 
+0004580034 00000 n 
+0004580186 00000 n 
+0004580339 00000 n 
+0004580491 00000 n 
+0004580643 00000 n 
+0004580796 00000 n 
+0004580949 00000 n 
+0004581102 00000 n 
+0004581255 00000 n 
+0004581408 00000 n 
+0004581561 00000 n 
+0004581713 00000 n 
+0004581866 00000 n 
+0004582017 00000 n 
+0004582170 00000 n 
+0004582323 00000 n 
+0004582476 00000 n 
+0004582629 00000 n 
+0004582782 00000 n 
+0004582935 00000 n 
+0004583087 00000 n 
+0004583240 00000 n 
+0004583393 00000 n 
+0004583545 00000 n 
+0004583697 00000 n 
+0004583849 00000 n 
+0004584002 00000 n 
+0004584155 00000 n 
+0004584308 00000 n 
+0004584460 00000 n 
+0004584613 00000 n 
+0004584766 00000 n 
+0004584918 00000 n 
+0004585068 00000 n 
+0004585221 00000 n 
+0004585374 00000 n 
+0004585527 00000 n 
+0004585680 00000 n 
+0004585833 00000 n 
+0004585986 00000 n 
+0004586139 00000 n 
+0004586292 00000 n 
+0004586444 00000 n 
+0004586596 00000 n 
+0004586749 00000 n 
+0004586902 00000 n 
+0004587053 00000 n 
+0004587206 00000 n 
+0004587359 00000 n 
+0004587511 00000 n 
+0004587662 00000 n 
+0004587815 00000 n 
+0004587967 00000 n 
+0004588120 00000 n 
+0004588273 00000 n 
+0004588426 00000 n 
+0004588579 00000 n 
+0004588732 00000 n 
+0004588884 00000 n 
+0004589036 00000 n 
+0004589189 00000 n 
+0004589342 00000 n 
+0004589495 00000 n 
+0004592550 00000 n 
+0004589714 00000 n 
+0004576184 00000 n 
+0004574619 00000 n 
+0004589648 00000 n 
+0004592703 00000 n 
+0004592856 00000 n 
+0004593008 00000 n 
+0004593161 00000 n 
+0004593312 00000 n 
+0004593464 00000 n 
+0004593616 00000 n 
+0004593765 00000 n 
+0004593916 00000 n 
+0004594067 00000 n 
+0004594220 00000 n 
+0004594371 00000 n 
+0004594524 00000 n 
+0004594677 00000 n 
+0004594830 00000 n 
+0004594983 00000 n 
+0004595136 00000 n 
+0004595287 00000 n 
+0004595438 00000 n 
+0004595591 00000 n 
+0004595742 00000 n 
+0004595895 00000 n 
+0004596047 00000 n 
+0004596199 00000 n 
+0004596351 00000 n 
+0004596503 00000 n 
+0004596656 00000 n 
+0004596809 00000 n 
+0004596962 00000 n 
+0004597115 00000 n 
+0004597268 00000 n 
+0004597420 00000 n 
+0004597572 00000 n 
+0004597724 00000 n 
+0004597876 00000 n 
+0004598029 00000 n 
+0004598182 00000 n 
+0004598334 00000 n 
+0004598487 00000 n 
+0004598639 00000 n 
+0004598792 00000 n 
+0004598945 00000 n 
+0004599098 00000 n 
+0004599251 00000 n 
+0004599404 00000 n 
+0004599557 00000 n 
+0004599709 00000 n 
+0004599861 00000 n 
+0004600011 00000 n 
+0004600162 00000 n 
+0004600315 00000 n 
+0004600467 00000 n 
+0004600618 00000 n 
+0004600771 00000 n 
+0004600922 00000 n 
+0004601073 00000 n 
+0004601226 00000 n 
+0004601379 00000 n 
+0004601532 00000 n 
+0004601684 00000 n 
+0004601836 00000 n 
+0004601989 00000 n 
+0004602142 00000 n 
+0004602294 00000 n 
+0004602447 00000 n 
+0004602600 00000 n 
+0004602753 00000 n 
+0004602904 00000 n 
+0004603057 00000 n 
+0004603210 00000 n 
+0004603363 00000 n 
+0004603516 00000 n 
+0004603669 00000 n 
+0004603822 00000 n 
+0004603975 00000 n 
+0004604128 00000 n 
+0004604281 00000 n 
+0004604434 00000 n 
+0004604586 00000 n 
+0004604739 00000 n 
+0004604892 00000 n 
+0004605044 00000 n 
+0004605193 00000 n 
+0004605346 00000 n 
+0004605499 00000 n 
+0004605652 00000 n 
+0004605805 00000 n 
+0004605958 00000 n 
+0004606111 00000 n 
+0004606263 00000 n 
+0004606416 00000 n 
+0004606569 00000 n 
+0004606721 00000 n 
+0004606873 00000 n 
+0004607025 00000 n 
+0004607177 00000 n 
+0004607329 00000 n 
+0004607482 00000 n 
+0004607634 00000 n 
+0004607787 00000 n 
+0004607940 00000 n 
+0004611068 00000 n 
+0004608158 00000 n 
+0004591398 00000 n 
+0004589831 00000 n 
+0004608092 00000 n 
+0004611220 00000 n 
+0004611373 00000 n 
+0004611526 00000 n 
+0004611678 00000 n 
+0004611830 00000 n 
+0004611983 00000 n 
+0004612136 00000 n 
+0004612289 00000 n 
+0004612441 00000 n 
+0004612590 00000 n 
+0004612739 00000 n 
+0004612892 00000 n 
+0004613045 00000 n 
+0004613198 00000 n 
+0004613351 00000 n 
+0004613504 00000 n 
+0004613657 00000 n 
+0004613809 00000 n 
+0004613961 00000 n 
+0004614113 00000 n 
+0004614266 00000 n 
+0004614419 00000 n 
+0004614572 00000 n 
+0004614725 00000 n 
+0004614878 00000 n 
+0004615030 00000 n 
+0004615182 00000 n 
+0004615335 00000 n 
+0004615487 00000 n 
+0004615640 00000 n 
+0004615793 00000 n 
+0004615946 00000 n 
+0004616099 00000 n 
+0004616251 00000 n 
+0004616403 00000 n 
+0004616556 00000 n 
+0004616709 00000 n 
+0004616862 00000 n 
+0004617015 00000 n 
+0004617168 00000 n 
+0004617321 00000 n 
+0004617474 00000 n 
+0004617627 00000 n 
+0004617780 00000 n 
+0004617933 00000 n 
+0004618085 00000 n 
+0004618236 00000 n 
+0004618389 00000 n 
+0004618542 00000 n 
+0004618695 00000 n 
+0004618848 00000 n 
+0004619001 00000 n 
+0004619153 00000 n 
+0004619306 00000 n 
+0004619459 00000 n 
+0004619611 00000 n 
+0004619764 00000 n 
+0004619917 00000 n 
+0004620070 00000 n 
+0004620223 00000 n 
+0004620376 00000 n 
+0004620529 00000 n 
+0004620682 00000 n 
+0004620835 00000 n 
+0004620988 00000 n 
+0004621141 00000 n 
+0004621293 00000 n 
+0004621444 00000 n 
+0004621596 00000 n 
+0004621749 00000 n 
+0004621900 00000 n 
+0004622052 00000 n 
+0004622203 00000 n 
+0004622354 00000 n 
+0004622507 00000 n 
+0004622660 00000 n 
+0004622813 00000 n 
+0004622965 00000 n 
+0004623118 00000 n 
+0004623271 00000 n 
+0004623424 00000 n 
+0004623575 00000 n 
+0004623726 00000 n 
+0004623879 00000 n 
+0004624030 00000 n 
+0004624183 00000 n 
+0004624336 00000 n 
+0004624489 00000 n 
+0004624642 00000 n 
+0004624794 00000 n 
+0004624947 00000 n 
+0004625099 00000 n 
+0004625251 00000 n 
+0004625404 00000 n 
+0004625557 00000 n 
+0004625710 00000 n 
+0004625863 00000 n 
+0004626015 00000 n 
+0004626168 00000 n 
+0004626319 00000 n 
+0004626472 00000 n 
+0004626625 00000 n 
+0004626778 00000 n 
+0004626931 00000 n 
+0004627083 00000 n 
+0004627234 00000 n 
+0004627387 00000 n 
+0004627539 00000 n 
+0004627692 00000 n 
+0004627845 00000 n 
+0004627998 00000 n 
+0004628151 00000 n 
+0004628304 00000 n 
+0004628457 00000 n 
+0004628610 00000 n 
+0004628763 00000 n 
+0004631761 00000 n 
+0004631913 00000 n 
+0004628982 00000 n 
+0004609766 00000 n 
+0004608275 00000 n 
+0004628916 00000 n 
+0005332674 00000 n 
+0004632065 00000 n 
+0004632216 00000 n 
+0004632369 00000 n 
+0004632521 00000 n 
+0004632674 00000 n 
+0004632827 00000 n 
+0004632979 00000 n 
+0004633132 00000 n 
+0004633285 00000 n 
+0004633436 00000 n 
+0004633589 00000 n 
+0004633741 00000 n 
+0004633894 00000 n 
+0004634047 00000 n 
+0004634199 00000 n 
+0004634352 00000 n 
+0004634505 00000 n 
+0004634658 00000 n 
+0004634811 00000 n 
+0004634964 00000 n 
+0004635117 00000 n 
+0004635269 00000 n 
+0004635421 00000 n 
+0004635574 00000 n 
+0004635726 00000 n 
+0004635879 00000 n 
+0004636032 00000 n 
+0004636183 00000 n 
+0004636335 00000 n 
+0004636487 00000 n 
+0004636639 00000 n 
+0004636792 00000 n 
+0004636945 00000 n 
+0004637098 00000 n 
+0004637251 00000 n 
+0004637404 00000 n 
+0004637557 00000 n 
+0004637710 00000 n 
+0004637862 00000 n 
+0004638014 00000 n 
+0004638167 00000 n 
+0004638320 00000 n 
+0004638473 00000 n 
+0004638624 00000 n 
+0004638777 00000 n 
+0004638929 00000 n 
+0004639082 00000 n 
+0004639235 00000 n 
+0004639388 00000 n 
+0004639540 00000 n 
+0004639692 00000 n 
+0004639844 00000 n 
+0004639997 00000 n 
+0004640149 00000 n 
+0004640302 00000 n 
+0004640455 00000 n 
+0004640608 00000 n 
+0004640761 00000 n 
+0004640914 00000 n 
+0004641067 00000 n 
+0004641219 00000 n 
+0004641371 00000 n 
+0004641519 00000 n 
+0004641672 00000 n 
+0004641825 00000 n 
+0004641978 00000 n 
+0004642131 00000 n 
+0004642284 00000 n 
+0004642437 00000 n 
+0004642590 00000 n 
+0004642742 00000 n 
+0004642895 00000 n 
+0004643048 00000 n 
+0004643201 00000 n 
+0004643354 00000 n 
+0004643506 00000 n 
+0004643658 00000 n 
+0004643811 00000 n 
+0004643962 00000 n 
+0004644115 00000 n 
+0004644268 00000 n 
+0004644421 00000 n 
+0004644572 00000 n 
+0004644722 00000 n 
+0004644874 00000 n 
+0004645026 00000 n 
+0004645179 00000 n 
+0004645332 00000 n 
+0004645484 00000 n 
+0004645637 00000 n 
+0004645790 00000 n 
+0004645943 00000 n 
+0004646096 00000 n 
+0004646248 00000 n 
+0004646401 00000 n 
+0004646554 00000 n 
+0004646706 00000 n 
+0004646859 00000 n 
+0004647011 00000 n 
+0004647163 00000 n 
+0004647315 00000 n 
+0004647467 00000 n 
+0004647619 00000 n 
+0004647767 00000 n 
+0004647919 00000 n 
+0004651175 00000 n 
+0004648138 00000 n 
+0004630559 00000 n 
+0004629099 00000 n 
+0004648072 00000 n 
+0004651327 00000 n 
+0004651480 00000 n 
+0004651632 00000 n 
+0004651784 00000 n 
+0004651936 00000 n 
+0004652086 00000 n 
+0004652236 00000 n 
+0004652389 00000 n 
+0004652541 00000 n 
+0004652693 00000 n 
+0004652846 00000 n 
+0004652999 00000 n 
+0004653152 00000 n 
+0004653305 00000 n 
+0004653457 00000 n 
+0004653609 00000 n 
+0004653762 00000 n 
+0004653915 00000 n 
+0004654067 00000 n 
+0004654219 00000 n 
+0004654371 00000 n 
+0004654524 00000 n 
+0004654677 00000 n 
+0004654828 00000 n 
+0004654980 00000 n 
+0004655132 00000 n 
+0004655285 00000 n 
+0004655438 00000 n 
 0004655590 00000 n 
-0004665517 00000 n 
-0004665990 00000 n 
-0004680241 00000 n 
-0004680797 00000 n 
-0004688528 00000 n 
-0004688927 00000 n 
-0004691452 00000 n 
-0004691771 00000 n 
-0004711042 00000 n 
-0004711598 00000 n 
-0004713545 00000 n 
-0004713772 00000 n 
-0004715716 00000 n 
-0004715943 00000 n 
-0004717967 00000 n 
-0004718196 00000 n 
-0004734804 00000 n 
-0004735453 00000 n 
-0004748146 00000 n 
-0004748622 00000 n 
-0004750476 00000 n 
-0004775723 00000 n 
-0004775851 00000 n 
-0004775979 00000 n 
-0004776107 00000 n 
-0004776235 00000 n 
-0004776363 00000 n 
-0004776491 00000 n 
-0004776619 00000 n 
-0004776747 00000 n 
-0004776875 00000 n 
-0004777003 00000 n 
-0004777131 00000 n 
-0004777259 00000 n 
-0004777387 00000 n 
-0004777515 00000 n 
-0004777643 00000 n 
-0004777771 00000 n 
-0004777900 00000 n 
-0004778034 00000 n 
-0004778168 00000 n 
-0004778302 00000 n 
-0004778436 00000 n 
-0004778570 00000 n 
-0004778704 00000 n 
-0004778838 00000 n 
-0004778972 00000 n 
-0004779106 00000 n 
-0004779220 00000 n 
-0004779355 00000 n 
-0004779490 00000 n 
-0004779625 00000 n 
-0004779760 00000 n 
-0004779864 00000 n 
-0004779971 00000 n 
-0004872022 00000 n 
-0004872178 00000 n 
-0004872325 00000 n 
-0004872477 00000 n 
-0004872624 00000 n 
-0004872767 00000 n 
-0004872993 00000 n 
-0004873181 00000 n 
-0004873375 00000 n 
-0004873561 00000 n 
-0004873746 00000 n 
-0004873932 00000 n 
-0004874117 00000 n 
-0004874303 00000 n 
-0004874488 00000 n 
-0004874674 00000 n 
-0004874858 00000 n 
-0004875042 00000 n 
-0004875228 00000 n 
-0004875413 00000 n 
-0004875599 00000 n 
-0004875784 00000 n 
-0004875970 00000 n 
-0004876155 00000 n 
-0004876341 00000 n 
-0004876526 00000 n 
-0004876712 00000 n 
-0004876893 00000 n 
-0004877079 00000 n 
-0004877263 00000 n 
-0004877447 00000 n 
-0004877633 00000 n 
-0004877818 00000 n 
-0004878004 00000 n 
-0004878189 00000 n 
-0004878375 00000 n 
-0004878560 00000 n 
-0004878748 00000 n 
-0004878938 00000 n 
-0004879130 00000 n 
-0004879319 00000 n 
-0004879508 00000 n 
-0004879700 00000 n 
-0004879890 00000 n 
-0004880082 00000 n 
-0004880269 00000 n 
-0004880461 00000 n 
-0004880651 00000 n 
-0004880843 00000 n 
-0004881033 00000 n 
-0004881225 00000 n 
-0004881415 00000 n 
-0004881607 00000 n 
-0004881796 00000 n 
-0004881985 00000 n 
-0004882177 00000 n 
-0004882367 00000 n 
-0004882559 00000 n 
-0004882749 00000 n 
-0004882941 00000 n 
-0004883131 00000 n 
-0004883323 00000 n 
-0004883513 00000 n 
-0004883705 00000 n 
-0004883890 00000 n 
-0004884082 00000 n 
-0004884271 00000 n 
-0004884460 00000 n 
-0004884649 00000 n 
-0004884827 00000 n 
-0004885003 00000 n 
-0004885179 00000 n 
-0004885357 00000 n 
-0004885534 00000 n 
-0004885712 00000 n 
-0004885889 00000 n 
-0004886067 00000 n 
-0004886244 00000 n 
-0004886422 00000 n 
-0004886633 00000 n 
-0004886843 00000 n 
-0004887051 00000 n 
-0004887252 00000 n 
-0004887422 00000 n 
-0004887597 00000 n 
-0004887793 00000 n 
-0004888044 00000 n 
-0004888244 00000 n 
-0004888481 00000 n 
-0004888663 00000 n 
-0004888870 00000 n 
-0004889062 00000 n 
-0004889256 00000 n 
-0004889455 00000 n 
-0004889657 00000 n 
-0004889857 00000 n 
-0004890059 00000 n 
-0004890259 00000 n 
-0004890461 00000 n 
-0004890666 00000 n 
-0004890873 00000 n 
-0004891067 00000 n 
-0004891270 00000 n 
-0004891486 00000 n 
-0004891709 00000 n 
-0004891943 00000 n 
-0004892177 00000 n 
-0004892409 00000 n 
-0004892637 00000 n 
-0004892867 00000 n 
-0004893102 00000 n 
-0004893336 00000 n 
-0004893570 00000 n 
-0004893797 00000 n 
-0004893988 00000 n 
-0004894243 00000 n 
-0004894437 00000 n 
-0004894649 00000 n 
-0004894867 00000 n 
-0004895081 00000 n 
-0004895291 00000 n 
-0004895499 00000 n 
-0004895709 00000 n 
-0004895918 00000 n 
-0004896122 00000 n 
-0004896332 00000 n 
-0004896524 00000 n 
-0004896720 00000 n 
-0004896915 00000 n 
-0004897109 00000 n 
-0004897307 00000 n 
-0004897501 00000 n 
-0004897699 00000 n 
-0004897894 00000 n 
-0004898089 00000 n 
-0004898283 00000 n 
-0004898478 00000 n 
-0004898672 00000 n 
-0004898866 00000 n 
-0004899060 00000 n 
-0004899254 00000 n 
-0004899448 00000 n 
-0004899642 00000 n 
-0004899836 00000 n 
-0004900031 00000 n 
-0004900225 00000 n 
-0004900419 00000 n 
-0004900613 00000 n 
-0004900807 00000 n 
-0004901001 00000 n 
-0004901196 00000 n 
-0004901390 00000 n 
-0004901584 00000 n 
-0004901778 00000 n 
-0004901972 00000 n 
-0004902166 00000 n 
-0004902361 00000 n 
-0004902556 00000 n 
-0004902751 00000 n 
-0004902945 00000 n 
-0004903139 00000 n 
-0004903333 00000 n 
-0004903527 00000 n 
-0004903721 00000 n 
-0004903915 00000 n 
-0004904109 00000 n 
-0004904304 00000 n 
-0004904498 00000 n 
-0004904692 00000 n 
-0004904886 00000 n 
-0004905080 00000 n 
-0004905274 00000 n 
-0004905468 00000 n 
-0004905662 00000 n 
-0004905856 00000 n 
-0004906050 00000 n 
-0004906244 00000 n 
-0004906438 00000 n 
-0004906633 00000 n 
-0004906828 00000 n 
-0004907022 00000 n 
-0004907216 00000 n 
-0004907410 00000 n 
-0004907604 00000 n 
-0004907798 00000 n 
-0004907992 00000 n 
-0004908186 00000 n 
-0004908380 00000 n 
-0004908574 00000 n 
-0004908771 00000 n 
-0004908971 00000 n 
-0004909166 00000 n 
-0004909361 00000 n 
-0004909558 00000 n 
-0004909758 00000 n 
-0004909958 00000 n 
-0004910158 00000 n 
-0004910358 00000 n 
-0004910555 00000 n 
-0004910755 00000 n 
-0004910955 00000 n 
-0004911155 00000 n 
-0004911353 00000 n 
-0004911547 00000 n 
-0004911741 00000 n 
-0004911935 00000 n 
-0004912129 00000 n 
-0004912323 00000 n 
-0004912517 00000 n 
-0004912711 00000 n 
-0004912908 00000 n 
-0004913108 00000 n 
-0004913308 00000 n 
-0004913508 00000 n 
-0004913708 00000 n 
-0004913908 00000 n 
-0004914108 00000 n 
-0004914308 00000 n 
+0004655742 00000 n 
+0004655894 00000 n 
+0004656046 00000 n 
+0004656198 00000 n 
+0004656349 00000 n 
+0004656502 00000 n 
+0004656655 00000 n 
+0004656808 00000 n 
+0004656961 00000 n 
+0004657114 00000 n 
+0004657267 00000 n 
+0004657420 00000 n 
+0004657573 00000 n 
+0004657726 00000 n 
+0004657879 00000 n 
+0004658032 00000 n 
+0004658185 00000 n 
+0004658338 00000 n 
+0004658491 00000 n 
+0004658643 00000 n 
+0004658795 00000 n 
+0004658946 00000 n 
+0004659099 00000 n 
+0004659252 00000 n 
+0004659403 00000 n 
+0004659556 00000 n 
+0004659709 00000 n 
+0004659862 00000 n 
+0004660015 00000 n 
+0004660168 00000 n 
+0004660321 00000 n 
+0004660474 00000 n 
+0004660626 00000 n 
+0004660778 00000 n 
+0004660930 00000 n 
+0004661083 00000 n 
+0004661236 00000 n 
+0004661389 00000 n 
+0004661542 00000 n 
+0004661693 00000 n 
+0004661844 00000 n 
+0004661996 00000 n 
+0004662148 00000 n 
+0004662301 00000 n 
+0004662454 00000 n 
+0004662607 00000 n 
+0004662760 00000 n 
+0004662912 00000 n 
+0004663065 00000 n 
+0004663217 00000 n 
+0004663370 00000 n 
+0004663523 00000 n 
+0004663675 00000 n 
+0004663828 00000 n 
+0004663980 00000 n 
+0004664133 00000 n 
+0004664285 00000 n 
+0004664436 00000 n 
+0004664588 00000 n 
+0004664740 00000 n 
+0004664893 00000 n 
+0004665046 00000 n 
+0004665199 00000 n 
+0004665352 00000 n 
+0004665505 00000 n 
+0004665658 00000 n 
+0004665810 00000 n 
+0004665963 00000 n 
+0004666116 00000 n 
+0004666269 00000 n 
+0004666419 00000 n 
+0004666572 00000 n 
+0004666724 00000 n 
+0004666876 00000 n 
+0004667029 00000 n 
+0004667182 00000 n 
+0004667335 00000 n 
+0004667488 00000 n 
+0004667641 00000 n 
+0004667794 00000 n 
+0004667947 00000 n 
+0004671503 00000 n 
+0004668166 00000 n 
+0004649933 00000 n 
+0004648255 00000 n 
+0004668100 00000 n 
+0004671656 00000 n 
+0004671809 00000 n 
+0004671962 00000 n 
+0004672115 00000 n 
+0004672268 00000 n 
+0004672420 00000 n 
+0004672571 00000 n 
+0004672722 00000 n 
+0004672873 00000 n 
+0004673023 00000 n 
+0004673174 00000 n 
+0004673325 00000 n 
+0004673478 00000 n 
+0004673631 00000 n 
+0004673784 00000 n 
+0004673936 00000 n 
+0004674088 00000 n 
+0004674241 00000 n 
+0004674394 00000 n 
+0004674547 00000 n 
+0004674700 00000 n 
+0004674853 00000 n 
+0004675005 00000 n 
+0004675157 00000 n 
+0004675310 00000 n 
+0004675463 00000 n 
+0004675616 00000 n 
+0004675769 00000 n 
+0004675922 00000 n 
+0004676075 00000 n 
+0004676227 00000 n 
+0004676380 00000 n 
+0004676533 00000 n 
+0004676685 00000 n 
+0004676838 00000 n 
+0004676991 00000 n 
+0004677144 00000 n 
+0004677297 00000 n 
+0004677450 00000 n 
+0004677601 00000 n 
+0004677753 00000 n 
+0004677905 00000 n 
+0004678057 00000 n 
+0004678209 00000 n 
+0004678362 00000 n 
+0004678515 00000 n 
+0004678668 00000 n 
+0004678821 00000 n 
+0004678974 00000 n 
+0004679127 00000 n 
+0004679279 00000 n 
+0004679432 00000 n 
+0004679585 00000 n 
+0004679736 00000 n 
+0004679886 00000 n 
+0004680039 00000 n 
+0004680192 00000 n 
+0004680344 00000 n 
+0004680496 00000 n 
+0004680649 00000 n 
+0004680802 00000 n 
+0004680955 00000 n 
+0004681108 00000 n 
+0004681261 00000 n 
+0004681414 00000 n 
+0004681566 00000 n 
+0004681718 00000 n 
+0004681871 00000 n 
+0004682024 00000 n 
+0004682177 00000 n 
+0004682330 00000 n 
+0004682482 00000 n 
+0004682635 00000 n 
+0004682788 00000 n 
+0004682941 00000 n 
+0004683093 00000 n 
+0004683245 00000 n 
+0004683398 00000 n 
+0004683551 00000 n 
+0004683703 00000 n 
+0004683856 00000 n 
+0004684009 00000 n 
+0004684162 00000 n 
+0004684315 00000 n 
+0004684468 00000 n 
+0004684621 00000 n 
+0004684773 00000 n 
+0004684926 00000 n 
+0004685079 00000 n 
+0004685230 00000 n 
+0004685382 00000 n 
+0004685533 00000 n 
+0004685686 00000 n 
+0004685838 00000 n 
+0004685991 00000 n 
+0004686144 00000 n 
+0004686297 00000 n 
+0004686450 00000 n 
+0004686603 00000 n 
+0004686755 00000 n 
+0004686908 00000 n 
+0004687060 00000 n 
+0004687213 00000 n 
+0004687366 00000 n 
+0004687518 00000 n 
+0004687670 00000 n 
+0004687822 00000 n 
+0004687974 00000 n 
+0004688126 00000 n 
+0004688277 00000 n 
+0004688430 00000 n 
+0004688583 00000 n 
+0004688736 00000 n 
+0004688889 00000 n 
+0004689042 00000 n 
+0004689195 00000 n 
+0004689347 00000 n 
+0004689499 00000 n 
+0004689651 00000 n 
+0004689803 00000 n 
+0004693355 00000 n 
+0004690022 00000 n 
+0004670161 00000 n 
+0004668283 00000 n 
+0004689956 00000 n 
+0004693508 00000 n 
+0004693661 00000 n 
+0004693814 00000 n 
+0004693967 00000 n 
+0004694120 00000 n 
+0004694273 00000 n 
+0004694426 00000 n 
+0004694579 00000 n 
+0004694732 00000 n 
+0004694884 00000 n 
+0004695037 00000 n 
+0004695190 00000 n 
+0004695343 00000 n 
+0004695495 00000 n 
+0004695647 00000 n 
+0004695800 00000 n 
+0004695953 00000 n 
+0004696106 00000 n 
+0004696256 00000 n 
+0004696409 00000 n 
+0004696561 00000 n 
+0004696714 00000 n 
+0004696866 00000 n 
+0004697018 00000 n 
+0004697170 00000 n 
+0004697322 00000 n 
+0004697475 00000 n 
+0004697628 00000 n 
+0004697780 00000 n 
+0004697932 00000 n 
+0004698085 00000 n 
+0004698238 00000 n 
+0004698391 00000 n 
+0004698544 00000 n 
+0004698697 00000 n 
+0004698850 00000 n 
+0004699003 00000 n 
+0004699154 00000 n 
+0004699305 00000 n 
+0004699457 00000 n 
+0004699610 00000 n 
+0004699762 00000 n 
+0004699914 00000 n 
+0004700067 00000 n 
+0004700220 00000 n 
+0004700373 00000 n 
+0004700526 00000 n 
+0004700679 00000 n 
+0004700831 00000 n 
+0004700982 00000 n 
+0004701133 00000 n 
+0004701284 00000 n 
+0004701435 00000 n 
+0004701586 00000 n 
+0004701737 00000 n 
+0004701890 00000 n 
+0004702042 00000 n 
+0004702195 00000 n 
+0004702347 00000 n 
+0004702500 00000 n 
+0004702653 00000 n 
+0004702806 00000 n 
+0004702958 00000 n 
+0004703111 00000 n 
+0004703263 00000 n 
+0004703416 00000 n 
+0004703569 00000 n 
+0004703722 00000 n 
+0004703875 00000 n 
+0004704028 00000 n 
+0004704181 00000 n 
+0004704334 00000 n 
+0004704486 00000 n 
+0004704634 00000 n 
+0004704786 00000 n 
+0004704939 00000 n 
+0004705091 00000 n 
+0004705243 00000 n 
+0004705396 00000 n 
+0004705549 00000 n 
+0004705702 00000 n 
+0004705855 00000 n 
+0004706008 00000 n 
+0004706161 00000 n 
+0004706313 00000 n 
+0004706466 00000 n 
+0004706619 00000 n 
+0004706771 00000 n 
+0004706921 00000 n 
+0004707072 00000 n 
+0004707223 00000 n 
+0004707374 00000 n 
+0004707527 00000 n 
+0004707680 00000 n 
+0004707832 00000 n 
+0004707983 00000 n 
+0004708134 00000 n 
+0004708287 00000 n 
+0004708440 00000 n 
+0004708593 00000 n 
+0004708745 00000 n 
+0004708898 00000 n 
+0004709050 00000 n 
+0004709203 00000 n 
+0004709356 00000 n 
+0004709508 00000 n 
+0004709661 00000 n 
+0004709813 00000 n 
+0004709966 00000 n 
+0004710118 00000 n 
+0004710269 00000 n 
+0004710421 00000 n 
+0004710572 00000 n 
+0004710724 00000 n 
+0004710877 00000 n 
+0004711030 00000 n 
+0004711183 00000 n 
+0004711334 00000 n 
+0004715177 00000 n 
+0004711553 00000 n 
+0004692033 00000 n 
+0004690139 00000 n 
+0004711487 00000 n 
+0004715330 00000 n 
+0004715483 00000 n 
+0004715636 00000 n 
+0004715789 00000 n 
+0004715942 00000 n 
+0004716095 00000 n 
+0004716247 00000 n 
+0004716400 00000 n 
+0004716553 00000 n 
+0004716705 00000 n 
+0004716857 00000 n 
+0004717009 00000 n 
+0004717159 00000 n 
+0004717312 00000 n 
+0004717465 00000 n 
+0004717618 00000 n 
+0004717771 00000 n 
+0004717923 00000 n 
+0004718076 00000 n 
+0004718228 00000 n 
+0004718381 00000 n 
+0004718534 00000 n 
+0004718686 00000 n 
+0004718838 00000 n 
+0004718991 00000 n 
+0004719144 00000 n 
+0004719297 00000 n 
+0004719450 00000 n 
+0004719603 00000 n 
+0004719754 00000 n 
+0004719905 00000 n 
+0004720056 00000 n 
+0004720207 00000 n 
+0004720359 00000 n 
+0004720512 00000 n 
+0004720665 00000 n 
+0004720818 00000 n 
+0004720970 00000 n 
+0004721122 00000 n 
+0004721275 00000 n 
+0004721428 00000 n 
+0004721581 00000 n 
+0004721734 00000 n 
+0004721887 00000 n 
+0004722039 00000 n 
+0004722192 00000 n 
+0004722344 00000 n 
+0004722496 00000 n 
+0004722648 00000 n 
+0004722800 00000 n 
+0004722952 00000 n 
+0004723105 00000 n 
+0004723257 00000 n 
+0004723410 00000 n 
+0004723562 00000 n 
+0004723713 00000 n 
+0004723865 00000 n 
+0004724018 00000 n 
+0004724168 00000 n 
+0004724318 00000 n 
+0004724469 00000 n 
+0004724620 00000 n 
+0004724771 00000 n 
+0004724922 00000 n 
+0004725073 00000 n 
+0004725226 00000 n 
+0004725379 00000 n 
+0004725531 00000 n 
+0004725684 00000 n 
+0004725837 00000 n 
+0004725990 00000 n 
+0004726143 00000 n 
+0004726295 00000 n 
+0004726448 00000 n 
+0004726601 00000 n 
+0004726754 00000 n 
+0004726906 00000 n 
+0004727058 00000 n 
+0004727210 00000 n 
+0004727362 00000 n 
+0004727514 00000 n 
+0004727666 00000 n 
+0004727818 00000 n 
+0004727970 00000 n 
+0004728122 00000 n 
+0004728274 00000 n 
+0004728426 00000 n 
+0004728578 00000 n 
+0004728731 00000 n 
+0004728884 00000 n 
+0004729037 00000 n 
+0004729189 00000 n 
+0004729342 00000 n 
+0004729495 00000 n 
+0004729648 00000 n 
+0004729801 00000 n 
+0004729953 00000 n 
+0004730105 00000 n 
+0004730256 00000 n 
+0004730408 00000 n 
+0004730560 00000 n 
+0004730713 00000 n 
+0004730866 00000 n 
+0004731018 00000 n 
+0004731171 00000 n 
+0004731324 00000 n 
+0004731477 00000 n 
+0004731630 00000 n 
+0004731783 00000 n 
+0004731936 00000 n 
+0004732089 00000 n 
+0004732242 00000 n 
+0004732394 00000 n 
+0004732545 00000 n 
+0004732697 00000 n 
+0004732849 00000 n 
+0004733001 00000 n 
+0004733154 00000 n 
+0004733307 00000 n 
+0004733459 00000 n 
+0004733611 00000 n 
+0004733763 00000 n 
+0004733915 00000 n 
+0004734068 00000 n 
+0004734221 00000 n 
+0004734373 00000 n 
+0004734522 00000 n 
+0004734675 00000 n 
+0004734828 00000 n 
+0004734980 00000 n 
+0004735131 00000 n 
+0004735283 00000 n 
+0004735436 00000 n 
+0004735589 00000 n 
+0004735742 00000 n 
+0004735895 00000 n 
+0004736047 00000 n 
+0004736200 00000 n 
+0004736353 00000 n 
+0004736506 00000 n 
+0004736659 00000 n 
+0004736811 00000 n 
+0004736963 00000 n 
+0004737115 00000 n 
+0004737268 00000 n 
+0004737421 00000 n 
+0004737574 00000 n 
+0004737727 00000 n 
+0004737880 00000 n 
+0004738033 00000 n 
+0004738186 00000 n 
+0004738339 00000 n 
+0004738491 00000 n 
+0004738644 00000 n 
+0004738796 00000 n 
+0004738949 00000 n 
+0004739101 00000 n 
+0004739252 00000 n 
+0004739404 00000 n 
+0004739556 00000 n 
+0004739709 00000 n 
+0004739862 00000 n 
+0004740015 00000 n 
+0004740168 00000 n 
+0004740321 00000 n 
+0004740473 00000 n 
+0004740626 00000 n 
+0004743885 00000 n 
+0004744037 00000 n 
+0004744189 00000 n 
+0004740845 00000 n 
+0004713365 00000 n 
+0004711670 00000 n 
+0004740779 00000 n 
+0004744342 00000 n 
+0004744495 00000 n 
+0004744647 00000 n 
+0004744798 00000 n 
+0004744948 00000 n 
+0004745100 00000 n 
+0004745252 00000 n 
+0004745404 00000 n 
+0004745557 00000 n 
+0004745709 00000 n 
+0004745861 00000 n 
+0004746013 00000 n 
+0004746166 00000 n 
+0004746319 00000 n 
+0004746472 00000 n 
+0004746625 00000 n 
+0004746778 00000 n 
+0004746931 00000 n 
+0004747084 00000 n 
+0004747236 00000 n 
+0004747388 00000 n 
+0004747540 00000 n 
+0004747692 00000 n 
+0004747844 00000 n 
+0004747996 00000 n 
+0004748148 00000 n 
+0004748301 00000 n 
+0004748454 00000 n 
+0004748607 00000 n 
+0004748760 00000 n 
+0004748913 00000 n 
+0004749066 00000 n 
+0004749219 00000 n 
+0004749372 00000 n 
+0004749525 00000 n 
+0004749678 00000 n 
+0004749831 00000 n 
+0004749984 00000 n 
+0004750137 00000 n 
+0004750289 00000 n 
+0004750441 00000 n 
+0004750593 00000 n 
+0004750746 00000 n 
+0004750899 00000 n 
+0004751052 00000 n 
+0004751205 00000 n 
+0004751356 00000 n 
+0004751509 00000 n 
+0004751660 00000 n 
+0004751813 00000 n 
+0004751966 00000 n 
+0004752118 00000 n 
+0004752271 00000 n 
+0004752424 00000 n 
+0004752577 00000 n 
+0004752730 00000 n 
+0004752883 00000 n 
+0004753036 00000 n 
+0004753188 00000 n 
+0004753340 00000 n 
+0004753493 00000 n 
+0004753645 00000 n 
+0004753795 00000 n 
+0004753948 00000 n 
+0004754100 00000 n 
+0004754252 00000 n 
+0004754405 00000 n 
+0004754558 00000 n 
+0004754709 00000 n 
+0004754862 00000 n 
+0004755015 00000 n 
+0004755168 00000 n 
+0004755321 00000 n 
+0004755474 00000 n 
+0004755627 00000 n 
+0004755779 00000 n 
+0004755932 00000 n 
+0004756084 00000 n 
+0004756237 00000 n 
+0004756388 00000 n 
+0004756539 00000 n 
+0004756690 00000 n 
+0004756843 00000 n 
+0004756995 00000 n 
+0004757148 00000 n 
+0004757300 00000 n 
+0004757453 00000 n 
+0004757606 00000 n 
+0004757757 00000 n 
+0004757910 00000 n 
+0004758063 00000 n 
+0004758216 00000 n 
+0004758369 00000 n 
+0004758522 00000 n 
+0004758675 00000 n 
+0004758827 00000 n 
+0004758979 00000 n 
+0004759131 00000 n 
+0004759283 00000 n 
+0004759435 00000 n 
+0004759587 00000 n 
+0004759740 00000 n 
+0004759893 00000 n 
+0004760046 00000 n 
+0004760199 00000 n 
+0004760352 00000 n 
+0004760504 00000 n 
+0004760653 00000 n 
+0004760804 00000 n 
+0004760955 00000 n 
+0004761105 00000 n 
+0004761258 00000 n 
+0004761410 00000 n 
+0004761563 00000 n 
+0004761715 00000 n 
+0004761867 00000 n 
+0004762020 00000 n 
+0004762173 00000 n 
+0004762326 00000 n 
+0004765654 00000 n 
+0004762545 00000 n 
+0004742533 00000 n 
+0004740948 00000 n 
+0004762479 00000 n 
+0005332807 00000 n 
+0004765803 00000 n 
+0004765954 00000 n 
+0004766106 00000 n 
+0004766259 00000 n 
+0004766412 00000 n 
+0004766565 00000 n 
+0004766718 00000 n 
+0004766870 00000 n 
+0004767022 00000 n 
+0004767174 00000 n 
+0004767326 00000 n 
+0004767476 00000 n 
+0004767629 00000 n 
+0004767782 00000 n 
+0004767934 00000 n 
+0004768087 00000 n 
+0004768240 00000 n 
+0004768393 00000 n 
+0004768545 00000 n 
+0004768698 00000 n 
+0004768851 00000 n 
+0004769004 00000 n 
+0004769157 00000 n 
+0004769310 00000 n 
+0004769463 00000 n 
+0004769616 00000 n 
+0004769769 00000 n 
+0004769922 00000 n 
+0004770075 00000 n 
+0004770227 00000 n 
+0004770379 00000 n 
+0004770532 00000 n 
+0004770685 00000 n 
+0004770838 00000 n 
+0004770990 00000 n 
+0004771143 00000 n 
+0004771296 00000 n 
+0004771446 00000 n 
+0004771599 00000 n 
+0004771752 00000 n 
+0004771905 00000 n 
+0004772058 00000 n 
+0004772210 00000 n 
+0004772362 00000 n 
+0004772514 00000 n 
+0004772666 00000 n 
+0004772819 00000 n 
+0004772971 00000 n 
+0004773124 00000 n 
+0004773277 00000 n 
+0004773430 00000 n 
+0004773583 00000 n 
+0004773736 00000 n 
+0004773889 00000 n 
+0004774041 00000 n 
+0004774194 00000 n 
+0004774347 00000 n 
+0004774499 00000 n 
+0004774651 00000 n 
+0004774803 00000 n 
+0004774955 00000 n 
+0004775106 00000 n 
+0004775259 00000 n 
+0004775412 00000 n 
+0004775565 00000 n 
+0004775717 00000 n 
+0004775870 00000 n 
+0004776023 00000 n 
+0004776176 00000 n 
+0004776329 00000 n 
+0004776482 00000 n 
+0004776635 00000 n 
+0004776788 00000 n 
+0004776941 00000 n 
+0004777094 00000 n 
+0004777247 00000 n 
+0004777400 00000 n 
+0004777553 00000 n 
+0004777705 00000 n 
+0004777855 00000 n 
+0004778008 00000 n 
+0004778161 00000 n 
+0004778314 00000 n 
+0004778467 00000 n 
+0004778618 00000 n 
+0004778770 00000 n 
+0004778923 00000 n 
+0004779074 00000 n 
+0004779227 00000 n 
+0004779380 00000 n 
+0004779533 00000 n 
+0004779686 00000 n 
+0004779839 00000 n 
+0004779992 00000 n 
+0004780145 00000 n 
+0004780298 00000 n 
+0004780451 00000 n 
+0004780604 00000 n 
+0004780757 00000 n 
+0004780910 00000 n 
+0004781062 00000 n 
+0004781214 00000 n 
+0004781367 00000 n 
+0004781520 00000 n 
+0004781673 00000 n 
+0004781826 00000 n 
+0004781979 00000 n 
+0004782132 00000 n 
+0004782285 00000 n 
+0004782438 00000 n 
+0004782591 00000 n 
+0004782743 00000 n 
+0004782894 00000 n 
+0004783045 00000 n 
+0004783195 00000 n 
+0004783348 00000 n 
+0004783501 00000 n 
+0004783654 00000 n 
+0004783807 00000 n 
+0004783960 00000 n 
+0004784113 00000 n 
+0004784265 00000 n 
+0004784417 00000 n 
+0004784570 00000 n 
+0004784722 00000 n 
+0004784874 00000 n 
+0004785027 00000 n 
+0004785180 00000 n 
+0004785333 00000 n 
+0004785486 00000 n 
+0004788361 00000 n 
+0004785705 00000 n 
+0004764212 00000 n 
+0004762662 00000 n 
+0004785639 00000 n 
+0004788514 00000 n 
+0004788666 00000 n 
+0004788819 00000 n 
+0004788972 00000 n 
+0004789125 00000 n 
+0004789273 00000 n 
+0004789425 00000 n 
+0004789576 00000 n 
+0004789729 00000 n 
+0004789882 00000 n 
+0004790035 00000 n 
+0004790187 00000 n 
+0004790339 00000 n 
+0004790492 00000 n 
+0004790644 00000 n 
+0004790797 00000 n 
+0004790950 00000 n 
+0004791103 00000 n 
+0004791256 00000 n 
+0004791409 00000 n 
+0004791561 00000 n 
+0004791714 00000 n 
+0004791867 00000 n 
+0004792019 00000 n 
+0004792171 00000 n 
+0004792322 00000 n 
+0004792474 00000 n 
+0004792626 00000 n 
+0004792778 00000 n 
+0004792930 00000 n 
+0004793081 00000 n 
+0004793234 00000 n 
+0004793385 00000 n 
+0004793538 00000 n 
+0004793690 00000 n 
+0004793843 00000 n 
+0004793996 00000 n 
+0004794149 00000 n 
+0004794301 00000 n 
+0004794454 00000 n 
+0004794607 00000 n 
+0004794760 00000 n 
+0004794912 00000 n 
+0004795065 00000 n 
+0004795218 00000 n 
+0004795371 00000 n 
+0004795524 00000 n 
+0004795677 00000 n 
+0004795830 00000 n 
+0004795983 00000 n 
+0004796136 00000 n 
+0004796288 00000 n 
+0004796441 00000 n 
+0004796594 00000 n 
+0004796745 00000 n 
+0004796897 00000 n 
+0004797049 00000 n 
+0004797202 00000 n 
+0004797355 00000 n 
+0004797508 00000 n 
+0004797661 00000 n 
+0004797814 00000 n 
+0004797966 00000 n 
+0004798118 00000 n 
+0004798268 00000 n 
+0004798421 00000 n 
+0004798574 00000 n 
+0004798727 00000 n 
+0004798880 00000 n 
+0004799033 00000 n 
+0004799184 00000 n 
+0004799337 00000 n 
+0004799490 00000 n 
+0004799643 00000 n 
+0004799796 00000 n 
+0004799949 00000 n 
+0004800099 00000 n 
+0004800251 00000 n 
+0004800403 00000 n 
+0004800556 00000 n 
+0004800709 00000 n 
+0004800861 00000 n 
+0004801014 00000 n 
+0004801166 00000 n 
+0004801319 00000 n 
+0004801472 00000 n 
+0004801625 00000 n 
+0004801776 00000 n 
+0004801928 00000 n 
+0004802080 00000 n 
+0004802233 00000 n 
+0004802385 00000 n 
+0004802538 00000 n 
+0004802690 00000 n 
+0004802842 00000 n 
+0004802995 00000 n 
+0004803146 00000 n 
+0004803299 00000 n 
+0004803452 00000 n 
+0004806660 00000 n 
+0004803671 00000 n 
+0004787229 00000 n 
+0004785822 00000 n 
+0004803605 00000 n 
+0004806811 00000 n 
+0004806964 00000 n 
+0004807117 00000 n 
+0004807270 00000 n 
+0004807422 00000 n 
+0004807574 00000 n 
+0004807723 00000 n 
+0004807873 00000 n 
+0004808026 00000 n 
+0004808178 00000 n 
+0004808330 00000 n 
+0004808482 00000 n 
+0004808635 00000 n 
+0004808788 00000 n 
+0004808941 00000 n 
+0004809094 00000 n 
+0004809247 00000 n 
+0004809400 00000 n 
+0004809552 00000 n 
+0004809703 00000 n 
+0004809854 00000 n 
+0004810007 00000 n 
+0004810160 00000 n 
+0004810313 00000 n 
+0004810466 00000 n 
+0004810618 00000 n 
+0004810770 00000 n 
+0004810923 00000 n 
+0004811076 00000 n 
+0004811228 00000 n 
+0004811381 00000 n 
+0004811534 00000 n 
+0004811687 00000 n 
+0004811840 00000 n 
+0004811992 00000 n 
+0004812145 00000 n 
+0004812297 00000 n 
+0004812450 00000 n 
+0004812602 00000 n 
+0004812754 00000 n 
+0004812906 00000 n 
+0004813056 00000 n 
+0004813209 00000 n 
+0004813361 00000 n 
+0004813514 00000 n 
+0004813667 00000 n 
+0004813820 00000 n 
+0004813972 00000 n 
+0004814125 00000 n 
+0004814277 00000 n 
+0004814428 00000 n 
+0004814580 00000 n 
+0004814731 00000 n 
+0004814883 00000 n 
+0004815035 00000 n 
+0004815187 00000 n 
+0004815340 00000 n 
+0004815493 00000 n 
+0004815645 00000 n 
+0004815798 00000 n 
+0004815951 00000 n 
+0004816103 00000 n 
+0004816253 00000 n 
+0004816405 00000 n 
+0004816557 00000 n 
+0004816710 00000 n 
+0004816860 00000 n 
+0004817013 00000 n 
+0004817166 00000 n 
+0004817319 00000 n 
+0004817472 00000 n 
+0004817625 00000 n 
+0004817778 00000 n 
+0004817931 00000 n 
+0004818083 00000 n 
+0004818235 00000 n 
+0004818387 00000 n 
+0004818540 00000 n 
+0004818693 00000 n 
+0004818846 00000 n 
+0004818999 00000 n 
+0004819151 00000 n 
+0004819302 00000 n 
+0004819454 00000 n 
+0004819607 00000 n 
+0004819760 00000 n 
+0004819913 00000 n 
+0004820066 00000 n 
+0004820217 00000 n 
+0004820368 00000 n 
+0004820520 00000 n 
+0004820673 00000 n 
+0004820826 00000 n 
+0004820977 00000 n 
+0004821130 00000 n 
+0004821282 00000 n 
+0004821435 00000 n 
+0004821587 00000 n 
+0004821740 00000 n 
+0004821892 00000 n 
+0004822044 00000 n 
+0004822196 00000 n 
+0004822347 00000 n 
+0004822499 00000 n 
+0004826048 00000 n 
+0004826200 00000 n 
+0004822718 00000 n 
+0004805478 00000 n 
+0004803788 00000 n 
+0004822652 00000 n 
+0004826352 00000 n 
+0004826505 00000 n 
+0004826657 00000 n 
+0004826809 00000 n 
+0004826961 00000 n 
+0004827113 00000 n 
+0004827265 00000 n 
+0004827418 00000 n 
+0004827571 00000 n 
+0004827724 00000 n 
+0004827876 00000 n 
+0004828025 00000 n 
+0004828178 00000 n 
+0004828331 00000 n 
+0004828484 00000 n 
+0004828637 00000 n 
+0004828789 00000 n 
+0004828942 00000 n 
+0004829094 00000 n 
+0004829247 00000 n 
+0004829400 00000 n 
+0004829553 00000 n 
+0004829706 00000 n 
+0004829859 00000 n 
+0004830011 00000 n 
+0004830164 00000 n 
+0004830312 00000 n 
+0004830465 00000 n 
+0004830618 00000 n 
+0004830770 00000 n 
+0004830922 00000 n 
+0004831074 00000 n 
+0004831226 00000 n 
+0004831378 00000 n 
+0004831530 00000 n 
+0004831683 00000 n 
+0004831834 00000 n 
+0004831986 00000 n 
+0004832139 00000 n 
+0004832292 00000 n 
+0004832444 00000 n 
+0004832596 00000 n 
+0004832749 00000 n 
+0004832902 00000 n 
+0004833055 00000 n 
+0004833207 00000 n 
+0004833360 00000 n 
+0004833513 00000 n 
+0004833666 00000 n 
+0004833819 00000 n 
+0004833972 00000 n 
+0004834125 00000 n 
+0004834278 00000 n 
+0004834431 00000 n 
+0004834583 00000 n 
+0004834734 00000 n 
+0004834886 00000 n 
+0004835038 00000 n 
+0004835190 00000 n 
+0004835343 00000 n 
+0004835495 00000 n 
+0004835648 00000 n 
+0004835801 00000 n 
+0004835954 00000 n 
+0004836107 00000 n 
+0004836260 00000 n 
+0004836412 00000 n 
+0004836565 00000 n 
+0004836718 00000 n 
+0004836871 00000 n 
+0004837024 00000 n 
+0004837176 00000 n 
+0004837328 00000 n 
+0004837480 00000 n 
+0004837632 00000 n 
+0004837783 00000 n 
+0004837935 00000 n 
+0004838087 00000 n 
+0004838239 00000 n 
+0004838392 00000 n 
+0004838545 00000 n 
+0004838698 00000 n 
+0004838851 00000 n 
+0004839004 00000 n 
+0004839156 00000 n 
+0004839307 00000 n 
+0004839460 00000 n 
+0004839611 00000 n 
+0004839764 00000 n 
+0004839917 00000 n 
+0004840070 00000 n 
+0004840223 00000 n 
+0004840376 00000 n 
+0004840529 00000 n 
+0004840682 00000 n 
+0004840834 00000 n 
+0004840987 00000 n 
+0004841140 00000 n 
+0004841293 00000 n 
+0004841446 00000 n 
+0004841599 00000 n 
+0004841752 00000 n 
+0004841905 00000 n 
+0004842058 00000 n 
+0004842211 00000 n 
+0004842364 00000 n 
+0004842517 00000 n 
+0004842670 00000 n 
+0004842821 00000 n 
+0004842973 00000 n 
+0004843126 00000 n 
+0004843279 00000 n 
+0004843432 00000 n 
+0004843584 00000 n 
+0004843736 00000 n 
+0004843888 00000 n 
+0004844041 00000 n 
+0004844193 00000 n 
+0004844346 00000 n 
+0004844499 00000 n 
+0004844652 00000 n 
+0004844805 00000 n 
+0004844957 00000 n 
+0004845109 00000 n 
+0004845261 00000 n 
+0004845414 00000 n 
+0004845567 00000 n 
+0004845720 00000 n 
+0004845873 00000 n 
+0004846026 00000 n 
+0004846179 00000 n 
+0004846332 00000 n 
+0004846485 00000 n 
+0004846638 00000 n 
+0004846791 00000 n 
+0004846942 00000 n 
+0004847094 00000 n 
+0004847246 00000 n 
+0004847397 00000 n 
+0004847549 00000 n 
+0004847701 00000 n 
+0004847854 00000 n 
+0004848007 00000 n 
+0004848160 00000 n 
+0004848313 00000 n 
+0004848466 00000 n 
+0004848618 00000 n 
+0004848770 00000 n 
+0004848921 00000 n 
+0004849074 00000 n 
+0004849227 00000 n 
+0004852307 00000 n 
+0004852459 00000 n 
+0004852612 00000 n 
+0004852765 00000 n 
+0004849445 00000 n 
+0004824386 00000 n 
+0004822835 00000 n 
+0004849379 00000 n 
+0004852918 00000 n 
+0004853071 00000 n 
+0004853223 00000 n 
+0004853376 00000 n 
+0004853528 00000 n 
+0004853677 00000 n 
+0004853829 00000 n 
+0004853981 00000 n 
+0004854131 00000 n 
+0004854284 00000 n 
+0004854437 00000 n 
+0004854590 00000 n 
+0004854743 00000 n 
+0004854896 00000 n 
+0004855048 00000 n 
+0004855201 00000 n 
+0004855354 00000 n 
+0004855507 00000 n 
+0004855660 00000 n 
+0004855812 00000 n 
+0004855964 00000 n 
+0004856115 00000 n 
+0004856268 00000 n 
+0004856421 00000 n 
+0004856573 00000 n 
+0004856725 00000 n 
+0004856878 00000 n 
+0004857031 00000 n 
+0004857184 00000 n 
+0004857337 00000 n 
+0004857490 00000 n 
+0004857643 00000 n 
+0004857796 00000 n 
+0004857947 00000 n 
+0004858097 00000 n 
+0004858250 00000 n 
+0004858403 00000 n 
+0004858555 00000 n 
+0004858707 00000 n 
+0004858860 00000 n 
+0004859013 00000 n 
+0004859166 00000 n 
+0004859319 00000 n 
+0004859472 00000 n 
+0004859625 00000 n 
+0004859777 00000 n 
+0004859930 00000 n 
+0004860082 00000 n 
+0004860234 00000 n 
+0004860386 00000 n 
+0004860538 00000 n 
+0004860691 00000 n 
+0004860844 00000 n 
+0004860997 00000 n 
+0004861149 00000 n 
+0004861302 00000 n 
+0004861454 00000 n 
+0004861606 00000 n 
+0004861757 00000 n 
+0004861910 00000 n 
+0004862063 00000 n 
+0004862216 00000 n 
+0004862369 00000 n 
+0004862522 00000 n 
+0004862675 00000 n 
+0004862828 00000 n 
+0004862980 00000 n 
+0004863133 00000 n 
+0004863284 00000 n 
+0004863437 00000 n 
+0004863590 00000 n 
+0004863743 00000 n 
+0004863896 00000 n 
+0004864049 00000 n 
+0004864201 00000 n 
+0004864354 00000 n 
+0004864506 00000 n 
+0004864658 00000 n 
+0004864811 00000 n 
+0004864964 00000 n 
+0004865115 00000 n 
+0004865266 00000 n 
+0004865419 00000 n 
+0004865572 00000 n 
+0004865724 00000 n 
+0004865877 00000 n 
+0004866029 00000 n 
+0004866182 00000 n 
+0004866334 00000 n 
+0004866485 00000 n 
+0004866634 00000 n 
+0004866785 00000 n 
+0004866936 00000 n 
+0004867086 00000 n 
+0004867238 00000 n 
+0004867389 00000 n 
+0004867541 00000 n 
+0004867693 00000 n 
+0004870823 00000 n 
+0004870975 00000 n 
+0004871127 00000 n 
+0004871279 00000 n 
+0004871430 00000 n 
+0004871580 00000 n 
+0004871731 00000 n 
+0004871882 00000 n 
+0004872035 00000 n 
+0004872188 00000 n 
+0004872340 00000 n 
+0004872493 00000 n 
+0004872646 00000 n 
+0004872799 00000 n 
+0004872952 00000 n 
+0004873105 00000 n 
+0004873258 00000 n 
+0004867912 00000 n 
+0004851155 00000 n 
+0004849548 00000 n 
+0004867846 00000 n 
+0004873411 00000 n 
+0004873563 00000 n 
+0004873714 00000 n 
+0004873861 00000 n 
+0004874014 00000 n 
+0004874167 00000 n 
+0004874319 00000 n 
+0004874472 00000 n 
+0004874625 00000 n 
+0004874778 00000 n 
+0004874930 00000 n 
+0004875083 00000 n 
+0004875235 00000 n 
+0004875387 00000 n 
+0004875539 00000 n 
+0004875691 00000 n 
+0004875843 00000 n 
+0004875995 00000 n 
+0004876148 00000 n 
+0004876301 00000 n 
+0004876453 00000 n 
+0004876605 00000 n 
+0004876757 00000 n 
+0004876909 00000 n 
+0004877062 00000 n 
+0004877215 00000 n 
+0004877367 00000 n 
+0004877518 00000 n 
+0004877669 00000 n 
+0004877822 00000 n 
+0004877975 00000 n 
+0004878128 00000 n 
+0004878281 00000 n 
+0004878434 00000 n 
+0004878586 00000 n 
+0004878739 00000 n 
+0004878892 00000 n 
+0004879044 00000 n 
+0004879197 00000 n 
+0004879350 00000 n 
+0004879502 00000 n 
+0004879655 00000 n 
+0004879808 00000 n 
+0004879961 00000 n 
+0004880113 00000 n 
+0004880265 00000 n 
+0004880416 00000 n 
+0004880569 00000 n 
+0004880722 00000 n 
+0004880875 00000 n 
+0004881028 00000 n 
+0004881181 00000 n 
+0004881333 00000 n 
+0004881486 00000 n 
+0004881637 00000 n 
+0004881788 00000 n 
+0004881939 00000 n 
+0004882091 00000 n 
+0004882243 00000 n 
+0004882394 00000 n 
+0004882547 00000 n 
+0004882700 00000 n 
+0004882853 00000 n 
+0004883006 00000 n 
+0004883158 00000 n 
+0004883310 00000 n 
+0004883461 00000 n 
+0004883613 00000 n 
+0004883765 00000 n 
+0004883917 00000 n 
+0004884069 00000 n 
+0004884221 00000 n 
+0004884374 00000 n 
+0004884526 00000 n 
+0004884679 00000 n 
+0004884831 00000 n 
+0004884982 00000 n 
+0004885135 00000 n 
+0004885288 00000 n 
+0004885440 00000 n 
+0004885591 00000 n 
+0004885744 00000 n 
+0004885897 00000 n 
+0004886049 00000 n 
+0004886200 00000 n 
+0004886352 00000 n 
+0004886505 00000 n 
+0004886658 00000 n 
+0004886810 00000 n 
+0004890068 00000 n 
+0004887028 00000 n 
+0004869631 00000 n 
+0004868029 00000 n 
+0004886962 00000 n 
+0005332940 00000 n 
+0004890220 00000 n 
+0004890373 00000 n 
+0004890526 00000 n 
+0004890676 00000 n 
+0004890826 00000 n 
+0004890979 00000 n 
+0004891132 00000 n 
+0004891285 00000 n 
+0004891438 00000 n 
+0004891591 00000 n 
+0004891744 00000 n 
+0004891896 00000 n 
+0004892049 00000 n 
+0004892202 00000 n 
+0004892355 00000 n 
+0004892508 00000 n 
+0004892660 00000 n 
+0004892813 00000 n 
+0004892965 00000 n 
+0004893117 00000 n 
+0004893270 00000 n 
+0004893423 00000 n 
+0004893576 00000 n 
+0004893729 00000 n 
+0004893882 00000 n 
+0004894033 00000 n 
+0004894186 00000 n 
+0004894339 00000 n 
+0004894490 00000 n 
+0004894643 00000 n 
+0004894796 00000 n 
+0004894949 00000 n 
+0004895101 00000 n 
+0004895253 00000 n 
+0004895404 00000 n 
+0004895557 00000 n 
+0004895708 00000 n 
+0004895860 00000 n 
+0004896013 00000 n 
+0004896166 00000 n 
+0004896319 00000 n 
+0004896471 00000 n 
+0004896624 00000 n 
+0004896776 00000 n 
+0004896929 00000 n 
+0004897082 00000 n 
+0004897235 00000 n 
+0004897388 00000 n 
+0004897540 00000 n 
+0004897691 00000 n 
+0004897841 00000 n 
+0004897991 00000 n 
+0004898143 00000 n 
+0004898295 00000 n 
+0004898447 00000 n 
+0004898600 00000 n 
+0004898753 00000 n 
+0004898905 00000 n 
+0004899058 00000 n 
+0004899211 00000 n 
+0004899363 00000 n 
+0004899515 00000 n 
+0004899667 00000 n 
+0004899819 00000 n 
+0004899972 00000 n 
+0004900124 00000 n 
+0004900277 00000 n 
+0004900428 00000 n 
+0004900578 00000 n 
+0004900729 00000 n 
+0004900880 00000 n 
+0004901031 00000 n 
+0004901184 00000 n 
+0004901336 00000 n 
+0004901488 00000 n 
+0004901641 00000 n 
+0004901794 00000 n 
+0004901947 00000 n 
+0004902099 00000 n 
+0004902252 00000 n 
+0004902405 00000 n 
+0004902558 00000 n 
+0004902711 00000 n 
+0004902863 00000 n 
+0004903016 00000 n 
+0004903169 00000 n 
+0004903322 00000 n 
+0004903474 00000 n 
+0004903626 00000 n 
+0004903779 00000 n 
+0004903931 00000 n 
+0004904082 00000 n 
+0004904234 00000 n 
+0004904385 00000 n 
+0004904538 00000 n 
+0004904691 00000 n 
+0004904843 00000 n 
+0004904995 00000 n 
+0004905144 00000 n 
+0004905297 00000 n 
+0004905450 00000 n 
+0004905603 00000 n 
+0004905756 00000 n 
+0004905909 00000 n 
+0004906061 00000 n 
+0004906213 00000 n 
+0004909626 00000 n 
+0004906432 00000 n 
+0004888866 00000 n 
+0004887145 00000 n 
+0004906366 00000 n 
+0004909777 00000 n 
+0004909929 00000 n 
+0004910081 00000 n 
+0004910233 00000 n 
+0004910385 00000 n 
+0004910538 00000 n 
+0004910691 00000 n 
+0004910844 00000 n 
+0004910996 00000 n 
+0004911149 00000 n 
+0004911302 00000 n 
+0004911455 00000 n 
+0004911606 00000 n 
+0004911759 00000 n 
+0004911911 00000 n 
+0004912063 00000 n 
+0004912216 00000 n 
+0004912368 00000 n 
+0004912520 00000 n 
+0004912673 00000 n 
+0004912825 00000 n 
+0004912978 00000 n 
+0004913130 00000 n 
+0004913283 00000 n 
+0004913436 00000 n 
+0004913588 00000 n 
+0004913741 00000 n 
+0004913893 00000 n 
+0004914046 00000 n 
+0004914199 00000 n 
+0004914352 00000 n 
 0004914504 00000 n 
-0004914698 00000 n 
-0004914892 00000 n 
-0004915086 00000 n 
-0004915280 00000 n 
-0004915474 00000 n 
-0004915668 00000 n 
-0004915862 00000 n 
-0004916056 00000 n 
-0004916250 00000 n 
-0004916444 00000 n 
-0004916638 00000 n 
-0004916832 00000 n 
-0004917026 00000 n 
-0004917220 00000 n 
-0004917414 00000 n 
-0004917608 00000 n 
-0004917808 00000 n 
-0004918008 00000 n 
-0004918208 00000 n 
-0004918408 00000 n 
-0004918608 00000 n 
-0004918808 00000 n 
-0004919008 00000 n 
-0004919208 00000 n 
-0004919408 00000 n 
-0004919608 00000 n 
-0004919808 00000 n 
-0004920008 00000 n 
-0004920208 00000 n 
-0004920408 00000 n 
-0004920608 00000 n 
-0004920808 00000 n 
-0004921008 00000 n 
-0004921208 00000 n 
-0004921408 00000 n 
-0004921608 00000 n 
-0004921808 00000 n 
-0004922008 00000 n 
-0004922208 00000 n 
-0004922408 00000 n 
-0004922608 00000 n 
-0004922808 00000 n 
-0004923008 00000 n 
-0004923208 00000 n 
-0004923408 00000 n 
-0004923615 00000 n 
-0004923847 00000 n 
-0004924067 00000 n 
-0004924277 00000 n 
-0004924500 00000 n 
-0004924758 00000 n 
-0004925016 00000 n 
-0004925274 00000 n 
-0004925532 00000 n 
-0004925790 00000 n 
-0004926048 00000 n 
-0004926302 00000 n 
-0004926544 00000 n 
-0004926798 00000 n 
-0004927056 00000 n 
-0004927319 00000 n 
-0004927583 00000 n 
-0004927836 00000 n 
-0004928100 00000 n 
-0004928372 00000 n 
-0004928635 00000 n 
-0004928893 00000 n 
-0004929143 00000 n 
-0004929385 00000 n 
-0004929621 00000 n 
-0004929871 00000 n 
-0004930120 00000 n 
-0004930370 00000 n 
-0004930619 00000 n 
-0004930865 00000 n 
-0004931114 00000 n 
-0004931370 00000 n 
-0004931626 00000 n 
-0004931887 00000 n 
-0004932151 00000 n 
-0004932413 00000 n 
-0004932674 00000 n 
-0004932930 00000 n 
-0004933189 00000 n 
-0004933447 00000 n 
-0004933711 00000 n 
-0004933974 00000 n 
-0004934234 00000 n 
-0004934492 00000 n 
-0004934756 00000 n 
-0004935019 00000 n 
-0004935279 00000 n 
-0004935535 00000 n 
-0004935791 00000 n 
-0004936047 00000 n 
-0004936299 00000 n 
-0004936549 00000 n 
-0004936798 00000 n 
-0004937048 00000 n 
-0004937297 00000 n 
-0004937541 00000 n 
-0004937794 00000 n 
-0004938050 00000 n 
-0004938300 00000 n 
-0004938550 00000 n 
-0004938798 00000 n 
-0004939043 00000 n 
-0004939285 00000 n 
-0004939527 00000 n 
-0004939765 00000 n 
-0004940008 00000 n 
-0004940258 00000 n 
-0004940507 00000 n 
-0004940749 00000 n 
-0004940991 00000 n 
-0004941233 00000 n 
-0004941476 00000 n 
-0004941718 00000 n 
-0004941965 00000 n 
-0004942207 00000 n 
-0004942449 00000 n 
-0004942686 00000 n 
-0004942922 00000 n 
-0004943164 00000 n 
-0004943408 00000 n 
-0004943650 00000 n 
-0004943898 00000 n 
-0004944143 00000 n 
-0004944385 00000 n 
-0004944627 00000 n 
-0004944869 00000 n 
-0004945110 00000 n 
-0004945344 00000 n 
-0004945583 00000 n 
-0004945825 00000 n 
-0004946067 00000 n 
-0004946307 00000 n 
-0004946544 00000 n 
-0004946781 00000 n 
-0004947027 00000 n 
-0004947272 00000 n 
-0004947516 00000 n 
-0004947766 00000 n 
-0004948015 00000 n 
-0004948265 00000 n 
-0004948509 00000 n 
-0004948751 00000 n 
-0004948993 00000 n 
-0004949235 00000 n 
-0004949480 00000 n 
-0004949722 00000 n 
-0004949970 00000 n 
-0004950216 00000 n 
-0004950458 00000 n 
-0004950708 00000 n 
-0004950952 00000 n 
-0004951197 00000 n 
-0004951441 00000 n 
-0004951682 00000 n 
-0004951924 00000 n 
-0004952165 00000 n 
-0004952407 00000 n 
-0004952641 00000 n 
-0004952881 00000 n 
-0004953123 00000 n 
-0004953365 00000 n 
-0004953605 00000 n 
-0004953843 00000 n 
-0004954079 00000 n 
-0004954321 00000 n 
-0004954563 00000 n 
-0004954805 00000 n 
-0004955047 00000 n 
-0004955288 00000 n 
-0004955530 00000 n 
-0004955771 00000 n 
-0004956009 00000 n 
-0004956248 00000 n 
-0004956498 00000 n 
-0004956747 00000 n 
-0004956997 00000 n 
-0004957241 00000 n 
-0004957485 00000 n 
-0004957732 00000 n 
-0004957974 00000 n 
-0004958219 00000 n 
-0004958461 00000 n 
-0004958709 00000 n 
-0004958957 00000 n 
-0004959204 00000 n 
-0004959446 00000 n 
-0004959693 00000 n 
-0004959943 00000 n 
-0004960186 00000 n 
-0004960431 00000 n 
-0004960679 00000 n 
-0004960927 00000 n 
-0004961167 00000 n 
-0004961407 00000 n 
-0004961649 00000 n 
-0004961885 00000 n 
-0004962132 00000 n 
-0004962382 00000 n 
-0004962630 00000 n 
-0004962878 00000 n 
-0004963126 00000 n 
-0004963350 00000 n 
-0004963545 00000 n 
-0004963760 00000 n 
-0004963966 00000 n 
-0004964165 00000 n 
-0004964351 00000 n 
-0004964536 00000 n 
-0004964722 00000 n 
-0004964906 00000 n 
-0004965090 00000 n 
-0004965276 00000 n 
-0004965461 00000 n 
-0004965647 00000 n 
-0004965832 00000 n 
-0004966018 00000 n 
-0004966203 00000 n 
-0004966389 00000 n 
-0004966574 00000 n 
-0004966760 00000 n 
-0004966944 00000 n 
-0004967128 00000 n 
-0004967314 00000 n 
-0004967496 00000 n 
-0004967682 00000 n 
-0004967867 00000 n 
-0004968053 00000 n 
-0004968238 00000 n 
-0004968424 00000 n 
-0004968609 00000 n 
-0004968795 00000 n 
-0004968980 00000 n 
-0004969166 00000 n 
-0004969350 00000 n 
-0004969534 00000 n 
-0004969720 00000 n 
-0004969905 00000 n 
-0004970091 00000 n 
-0004970276 00000 n 
+0004914656 00000 n 
+0004914808 00000 n 
+0004914961 00000 n 
+0004915114 00000 n 
+0004915266 00000 n 
+0004915418 00000 n 
+0004915570 00000 n 
+0004915723 00000 n 
+0004915876 00000 n 
+0004916028 00000 n 
+0004916179 00000 n 
+0004916332 00000 n 
+0004916484 00000 n 
+0004916636 00000 n 
+0004916789 00000 n 
+0004916940 00000 n 
+0004917093 00000 n 
+0004917245 00000 n 
+0004917397 00000 n 
+0004917549 00000 n 
+0004917701 00000 n 
+0004917853 00000 n 
+0004918005 00000 n 
+0004918158 00000 n 
+0004918311 00000 n 
+0004918464 00000 n 
+0004918617 00000 n 
+0004918770 00000 n 
+0004918923 00000 n 
+0004919076 00000 n 
+0004919227 00000 n 
+0004919377 00000 n 
+0004919529 00000 n 
+0004919681 00000 n 
+0004919833 00000 n 
+0004919986 00000 n 
+0004920139 00000 n 
+0004920292 00000 n 
+0004920444 00000 n 
+0004920597 00000 n 
+0004920749 00000 n 
+0004920902 00000 n 
+0004921054 00000 n 
+0004921205 00000 n 
+0004921357 00000 n 
+0004921508 00000 n 
+0004921660 00000 n 
+0004921811 00000 n 
+0004921961 00000 n 
+0004922112 00000 n 
+0004922262 00000 n 
+0004922413 00000 n 
+0004922566 00000 n 
+0004922719 00000 n 
+0004922872 00000 n 
+0004923025 00000 n 
+0004923178 00000 n 
+0004923331 00000 n 
+0004923483 00000 n 
+0004923634 00000 n 
+0004923785 00000 n 
+0004923937 00000 n 
+0004924089 00000 n 
+0004924242 00000 n 
+0004924395 00000 n 
+0004924547 00000 n 
+0004924700 00000 n 
+0004924852 00000 n 
+0004925005 00000 n 
+0004925158 00000 n 
+0004925311 00000 n 
+0004925464 00000 n 
+0004925617 00000 n 
+0004925770 00000 n 
+0004925923 00000 n 
+0004926076 00000 n 
+0004926229 00000 n 
+0004926382 00000 n 
+0004926535 00000 n 
+0004926688 00000 n 
+0004926840 00000 n 
+0004926992 00000 n 
+0004927144 00000 n 
+0004927297 00000 n 
+0004927450 00000 n 
+0004927603 00000 n 
+0004927754 00000 n 
+0004927907 00000 n 
+0004928060 00000 n 
+0004928212 00000 n 
+0004928364 00000 n 
+0004928517 00000 n 
+0004928670 00000 n 
+0004928823 00000 n 
+0004928976 00000 n 
+0004929128 00000 n 
+0004929278 00000 n 
+0004929428 00000 n 
+0004929577 00000 n 
+0004929728 00000 n 
+0004929879 00000 n 
+0004930032 00000 n 
+0004930182 00000 n 
+0004930335 00000 n 
+0004930488 00000 n 
+0004930641 00000 n 
+0004930794 00000 n 
+0004930946 00000 n 
+0004931099 00000 n 
+0004931252 00000 n 
+0004934236 00000 n 
+0004931471 00000 n 
+0004908064 00000 n 
+0004906549 00000 n 
+0004931405 00000 n 
+0004934389 00000 n 
+0004934542 00000 n 
+0004934693 00000 n 
+0004934845 00000 n 
+0004934997 00000 n 
+0004935144 00000 n 
+0004935297 00000 n 
+0004935450 00000 n 
+0004935603 00000 n 
+0004935755 00000 n 
+0004935908 00000 n 
+0004936061 00000 n 
+0004936214 00000 n 
+0004936367 00000 n 
+0004936519 00000 n 
+0004936671 00000 n 
+0004936823 00000 n 
+0004936975 00000 n 
+0004937127 00000 n 
+0004937280 00000 n 
+0004937432 00000 n 
+0004937585 00000 n 
+0004937738 00000 n 
+0004937890 00000 n 
+0004938042 00000 n 
+0004938193 00000 n 
+0004938345 00000 n 
+0004938497 00000 n 
+0004938650 00000 n 
+0004938803 00000 n 
+0004938954 00000 n 
+0004939106 00000 n 
+0004939258 00000 n 
+0004939411 00000 n 
+0004939564 00000 n 
+0004939717 00000 n 
+0004939870 00000 n 
+0004940022 00000 n 
+0004940174 00000 n 
+0004940326 00000 n 
+0004940478 00000 n 
+0004940631 00000 n 
+0004940783 00000 n 
+0004940935 00000 n 
+0004941087 00000 n 
+0004941239 00000 n 
+0004941391 00000 n 
+0004941543 00000 n 
+0004941696 00000 n 
+0004941847 00000 n 
+0004942000 00000 n 
+0004942153 00000 n 
+0004942306 00000 n 
+0004942456 00000 n 
+0004942608 00000 n 
+0004942760 00000 n 
+0004942910 00000 n 
+0004943062 00000 n 
+0004943214 00000 n 
+0004943365 00000 n 
+0004943516 00000 n 
+0004943668 00000 n 
+0004943821 00000 n 
+0004943974 00000 n 
+0004944125 00000 n 
+0004944278 00000 n 
+0004944430 00000 n 
+0004944580 00000 n 
+0004944733 00000 n 
+0004944885 00000 n 
+0004945037 00000 n 
+0004945189 00000 n 
+0004945342 00000 n 
+0004945495 00000 n 
+0004945648 00000 n 
+0004945801 00000 n 
+0004945954 00000 n 
+0004946107 00000 n 
+0004946260 00000 n 
+0004946413 00000 n 
+0004946564 00000 n 
+0004946717 00000 n 
+0004946870 00000 n 
+0004947023 00000 n 
+0004947176 00000 n 
+0004947329 00000 n 
+0004947481 00000 n 
+0004947634 00000 n 
+0004947787 00000 n 
+0004947940 00000 n 
+0004948093 00000 n 
+0004948246 00000 n 
+0004948399 00000 n 
+0004948552 00000 n 
+0004948705 00000 n 
+0004948858 00000 n 
+0004949010 00000 n 
+0004949162 00000 n 
+0004949315 00000 n 
+0004949467 00000 n 
+0004949620 00000 n 
+0004949773 00000 n 
+0004949926 00000 n 
+0004950078 00000 n 
+0004950229 00000 n 
+0004950382 00000 n 
+0004950531 00000 n 
+0004950684 00000 n 
+0004950837 00000 n 
+0004954012 00000 n 
+0004951056 00000 n 
+0004933004 00000 n 
+0004931574 00000 n 
+0004950990 00000 n 
+0004954163 00000 n 
+0004954316 00000 n 
+0004954468 00000 n 
+0004954621 00000 n 
+0004954774 00000 n 
+0004954927 00000 n 
+0004955078 00000 n 
+0004955230 00000 n 
+0004955382 00000 n 
+0004955534 00000 n 
+0004955687 00000 n 
+0004955839 00000 n 
+0004955991 00000 n 
+0004956143 00000 n 
+0004956295 00000 n 
+0004956447 00000 n 
+0004956599 00000 n 
+0004956752 00000 n 
+0004956905 00000 n 
+0004957058 00000 n 
+0004957211 00000 n 
+0004957364 00000 n 
+0004957517 00000 n 
+0004957670 00000 n 
+0004957823 00000 n 
+0004957976 00000 n 
+0004958128 00000 n 
+0004958281 00000 n 
+0004958433 00000 n 
+0004958586 00000 n 
+0004958739 00000 n 
+0004958891 00000 n 
+0004959044 00000 n 
+0004959196 00000 n 
+0004959349 00000 n 
+0004959498 00000 n 
+0004959650 00000 n 
+0004959799 00000 n 
+0004959952 00000 n 
+0004960104 00000 n 
+0004960257 00000 n 
+0004960409 00000 n 
+0004960561 00000 n 
+0004960712 00000 n 
+0004960865 00000 n 
+0004961017 00000 n 
+0004961170 00000 n 
+0004961323 00000 n 
+0004961476 00000 n 
+0004961629 00000 n 
+0004961781 00000 n 
+0004961934 00000 n 
+0004962087 00000 n 
+0004962239 00000 n 
+0004962391 00000 n 
+0004962544 00000 n 
+0004962697 00000 n 
+0004962850 00000 n 
+0004963002 00000 n 
+0004963154 00000 n 
+0004963305 00000 n 
+0004963455 00000 n 
+0004963605 00000 n 
+0004963755 00000 n 
+0004963908 00000 n 
+0004964061 00000 n 
+0004964214 00000 n 
+0004964367 00000 n 
+0004964520 00000 n 
+0004964673 00000 n 
+0004964824 00000 n 
+0004964977 00000 n 
+0004965128 00000 n 
+0004965281 00000 n 
+0004965434 00000 n 
+0004965587 00000 n 
+0004965740 00000 n 
+0004965891 00000 n 
+0004966043 00000 n 
+0004966194 00000 n 
+0004966346 00000 n 
+0004966498 00000 n 
+0004966651 00000 n 
+0004966804 00000 n 
+0004966957 00000 n 
+0004967110 00000 n 
+0004967263 00000 n 
+0004967415 00000 n 
+0004967568 00000 n 
+0004967720 00000 n 
+0004967873 00000 n 
+0004968026 00000 n 
+0004968179 00000 n 
+0004968332 00000 n 
+0004968485 00000 n 
+0004968636 00000 n 
+0004968789 00000 n 
+0004968939 00000 n 
+0004969091 00000 n 
+0004969243 00000 n 
+0004969394 00000 n 
+0004969545 00000 n 
+0004969697 00000 n 
+0004969850 00000 n 
+0004970003 00000 n 
+0004970156 00000 n 
+0004970309 00000 n 
 0004970462 00000 n 
-0004970647 00000 n 
-0004970833 00000 n 
-0004971016 00000 n 
-0004971202 00000 n 
-0004971387 00000 n 
-0004971573 00000 n 
-0004971757 00000 n 
-0004971941 00000 n 
-0004972127 00000 n 
-0004972312 00000 n 
-0004972498 00000 n 
-0004972683 00000 n 
-0004972869 00000 n 
-0004973054 00000 n 
-0004973240 00000 n 
-0004973425 00000 n 
-0004973611 00000 n 
-0004973795 00000 n 
-0004973979 00000 n 
-0004974165 00000 n 
-0004974347 00000 n 
-0004974533 00000 n 
-0004974718 00000 n 
-0004974904 00000 n 
-0004975089 00000 n 
-0004975275 00000 n 
-0004975460 00000 n 
-0004975646 00000 n 
-0004975831 00000 n 
-0004976017 00000 n 
-0004976201 00000 n 
-0004976385 00000 n 
-0004976571 00000 n 
-0004976756 00000 n 
-0004976942 00000 n 
-0004977127 00000 n 
-0004977313 00000 n 
-0004977498 00000 n 
-0004977684 00000 n 
-0004977867 00000 n 
-0004978053 00000 n 
-0004978238 00000 n 
-0004978424 00000 n 
-0004978608 00000 n 
-0004978792 00000 n 
-0004978978 00000 n 
-0004979163 00000 n 
-0004979355 00000 n 
-0004979545 00000 n 
-0004979737 00000 n 
-0004979927 00000 n 
-0004980119 00000 n 
-0004980309 00000 n 
-0004980501 00000 n 
-0004980690 00000 n 
-0004980879 00000 n 
-0004981071 00000 n 
-0004981257 00000 n 
-0004981449 00000 n 
-0004981639 00000 n 
-0004981831 00000 n 
-0004982021 00000 n 
-0004982213 00000 n 
-0004982403 00000 n 
-0004982595 00000 n 
-0004982785 00000 n 
-0004982977 00000 n 
-0004983166 00000 n 
-0004983355 00000 n 
-0004983547 00000 n 
-0004983737 00000 n 
-0004983929 00000 n 
-0004984119 00000 n 
-0004984311 00000 n 
-0004984501 00000 n 
-0004984693 00000 n 
-0004984880 00000 n 
-0004985072 00000 n 
-0004985262 00000 n 
-0004985454 00000 n 
-0004985643 00000 n 
-0004985832 00000 n 
-0004986024 00000 n 
-0004986214 00000 n 
-0004986406 00000 n 
-0004986596 00000 n 
-0004986788 00000 n 
-0004986978 00000 n 
-0004987170 00000 n 
-0004987360 00000 n 
-0004987552 00000 n 
-0004987741 00000 n 
-0004987930 00000 n 
-0004988122 00000 n 
-0004988308 00000 n 
-0004988500 00000 n 
-0004988690 00000 n 
-0004988882 00000 n 
-0004989072 00000 n 
-0004989264 00000 n 
-0004989454 00000 n 
-0004989646 00000 n 
-0004989836 00000 n 
-0004990028 00000 n 
-0004990217 00000 n 
-0004990406 00000 n 
-0004990598 00000 n 
-0004990788 00000 n 
-0004990980 00000 n 
-0004991170 00000 n 
-0004991362 00000 n 
-0004991539 00000 n 
-0004991717 00000 n 
-0004991897 00000 n 
-0004992087 00000 n 
-0004992269 00000 n 
-0004992455 00000 n 
-0004992645 00000 n 
-0004992837 00000 n 
-0004993027 00000 n 
-0004993224 00000 n 
-0004993426 00000 n 
-0004993616 00000 n 
-0004993782 00000 n 
-0004993988 00000 n 
-0004994205 00000 n 
-0004994391 00000 n 
-0004994670 00000 n 
-0004994916 00000 n 
-0004995121 00000 n 
-0004995327 00000 n 
-0004995538 00000 n 
-0004995754 00000 n 
-0004995970 00000 n 
-0004996186 00000 n 
-0004996402 00000 n 
-0004996617 00000 n 
-0004996813 00000 n 
-0004997023 00000 n 
-0004997235 00000 n 
-0004997447 00000 n 
-0004997670 00000 n 
-0004997886 00000 n 
-0004998104 00000 n 
-0004998322 00000 n 
-0004998540 00000 n 
-0004998758 00000 n 
-0004998976 00000 n 
-0004999188 00000 n 
-0004999412 00000 n 
-0004999630 00000 n 
-0004999852 00000 n 
-0005000078 00000 n 
-0005000299 00000 n 
-0005000517 00000 n 
-0005000735 00000 n 
-0005000953 00000 n 
-0005001171 00000 n 
-0005001389 00000 n 
-0005001607 00000 n 
-0005001818 00000 n 
-0005002031 00000 n 
-0005002249 00000 n 
-0005002467 00000 n 
-0005002685 00000 n 
-0005002896 00000 n 
-0005003105 00000 n 
-0005003323 00000 n 
-0005003541 00000 n 
-0005003759 00000 n 
-0005003980 00000 n 
-0005004200 00000 n 
-0005004418 00000 n 
-0005004633 00000 n 
-0005004837 00000 n 
-0005005041 00000 n 
-0005005245 00000 n 
-0005005455 00000 n 
-0005005642 00000 n 
-0005005861 00000 n 
-0005006100 00000 n 
-0005006348 00000 n 
-0005006600 00000 n 
-0005006852 00000 n 
-0005007104 00000 n 
-0005007356 00000 n 
-0005007608 00000 n 
-0005007860 00000 n 
-0005008112 00000 n 
-0005008369 00000 n 
-0005008627 00000 n 
-0005008885 00000 n 
-0005009143 00000 n 
-0005009401 00000 n 
-0005009659 00000 n 
-0005009917 00000 n 
-0005010175 00000 n 
-0005010433 00000 n 
-0005010691 00000 n 
-0005010949 00000 n 
-0005011202 00000 n 
-0005011459 00000 n 
-0005011717 00000 n 
-0005011975 00000 n 
-0005012233 00000 n 
-0005012491 00000 n 
-0005012756 00000 n 
-0005013028 00000 n 
-0005013294 00000 n 
-0005013560 00000 n 
-0005013826 00000 n 
-0005014092 00000 n 
-0005014358 00000 n 
-0005014632 00000 n 
-0005014905 00000 n 
-0005015171 00000 n 
-0005015431 00000 n 
-0005015689 00000 n 
-0005015947 00000 n 
-0005016213 00000 n 
-0005016476 00000 n 
-0005016734 00000 n 
-0005016992 00000 n 
-0005017250 00000 n 
-0005017508 00000 n 
-0005017766 00000 n 
-0005018024 00000 n 
-0005018282 00000 n 
-0005018540 00000 n 
-0005018798 00000 n 
-0005019056 00000 n 
-0005019314 00000 n 
-0005019572 00000 n 
-0005019830 00000 n 
-0005020083 00000 n 
-0005020327 00000 n 
-0005020580 00000 n 
-0005020838 00000 n 
-0005021096 00000 n 
-0005021354 00000 n 
-0005021612 00000 n 
-0005021870 00000 n 
-0005022128 00000 n 
-0005022379 00000 n 
-0005022623 00000 n 
-0005022876 00000 n 
-0005023134 00000 n 
-0005023392 00000 n 
-0005023650 00000 n 
-0005023897 00000 n 
-0005024141 00000 n 
-0005024385 00000 n 
-0005024629 00000 n 
-0005024873 00000 n 
-0005025117 00000 n 
-0005025406 00000 n 
-0005025700 00000 n 
-0005025992 00000 n 
-0005026289 00000 n 
-0005026587 00000 n 
-0005026885 00000 n 
-0005027183 00000 n 
-0005027481 00000 n 
-0005027772 00000 n 
-0005028061 00000 n 
-0005028359 00000 n 
-0005028657 00000 n 
-0005028961 00000 n 
-0005029263 00000 n 
-0005029561 00000 n 
-0005029859 00000 n 
-0005030157 00000 n 
-0005030455 00000 n 
-0005030750 00000 n 
-0005031039 00000 n 
-0005031337 00000 n 
-0005031635 00000 n 
-0005031933 00000 n 
-0005032226 00000 n 
-0005032521 00000 n 
-0005032810 00000 n 
-0005033094 00000 n 
-0005033293 00000 n 
-0005033495 00000 n 
-0005033697 00000 n 
-0005033899 00000 n 
-0005034101 00000 n 
-0005034294 00000 n 
-0005034501 00000 n 
-0005034700 00000 n 
-0005034883 00000 n 
-0005035082 00000 n 
-0005035262 00000 n 
-0005035387 00000 n 
-0005035515 00000 n 
-0005035640 00000 n 
-0005035765 00000 n 
-0005035889 00000 n 
-0005036014 00000 n 
-0005036139 00000 n 
-0005036264 00000 n 
-0005036388 00000 n 
-0005036513 00000 n 
-0005036638 00000 n 
-0005036762 00000 n 
-0005036885 00000 n 
-0005037008 00000 n 
-0005037135 00000 n 
-0005037264 00000 n 
-0005037392 00000 n 
-0005037524 00000 n 
-0005037650 00000 n 
-0005037778 00000 n 
-0005037907 00000 n 
+0004970615 00000 n 
+0004970768 00000 n 
+0004970920 00000 n 
+0004971072 00000 n 
+0004971224 00000 n 
+0004974564 00000 n 
+0004971442 00000 n 
+0004952740 00000 n 
+0004951159 00000 n 
+0004971376 00000 n 
+0004974717 00000 n 
+0004974870 00000 n 
+0004975022 00000 n 
+0004975174 00000 n 
+0004975327 00000 n 
+0004975477 00000 n 
+0004975630 00000 n 
+0004975783 00000 n 
+0004975936 00000 n 
+0004976089 00000 n 
+0004976241 00000 n 
+0004976393 00000 n 
+0004976546 00000 n 
+0004976699 00000 n 
+0004976852 00000 n 
+0004977004 00000 n 
+0004977157 00000 n 
+0004977309 00000 n 
+0004977461 00000 n 
+0004977614 00000 n 
+0004977766 00000 n 
+0004977919 00000 n 
+0004978072 00000 n 
+0004978224 00000 n 
+0004978377 00000 n 
+0004978529 00000 n 
+0004978681 00000 n 
+0004978834 00000 n 
+0004978987 00000 n 
+0004979137 00000 n 
+0004979286 00000 n 
+0004979438 00000 n 
+0004979591 00000 n 
+0004979743 00000 n 
+0004979896 00000 n 
+0004980049 00000 n 
+0004980202 00000 n 
+0004980355 00000 n 
+0004980508 00000 n 
+0004980661 00000 n 
+0004980813 00000 n 
+0004980966 00000 n 
+0004981119 00000 n 
+0004981272 00000 n 
+0004981425 00000 n 
+0004981577 00000 n 
+0004981729 00000 n 
+0004981882 00000 n 
+0004982035 00000 n 
+0004982188 00000 n 
+0004982341 00000 n 
+0004982494 00000 n 
+0004982647 00000 n 
+0004982800 00000 n 
+0004982953 00000 n 
+0004983104 00000 n 
+0004983257 00000 n 
+0004983409 00000 n 
+0004983562 00000 n 
+0004983712 00000 n 
+0004983865 00000 n 
+0004984018 00000 n 
+0004984171 00000 n 
+0004984323 00000 n 
+0004984475 00000 n 
+0004984628 00000 n 
+0004984781 00000 n 
+0004984934 00000 n 
+0004985087 00000 n 
+0004985239 00000 n 
+0004985392 00000 n 
+0004985543 00000 n 
+0004985695 00000 n 
+0004985848 00000 n 
+0004986001 00000 n 
+0004986154 00000 n 
+0004986307 00000 n 
+0004986460 00000 n 
+0004986613 00000 n 
+0004986765 00000 n 
+0004986918 00000 n 
+0004987071 00000 n 
+0004987224 00000 n 
+0004987376 00000 n 
+0004987527 00000 n 
+0004987679 00000 n 
+0004987831 00000 n 
+0004987983 00000 n 
+0004988136 00000 n 
+0004988289 00000 n 
+0004988442 00000 n 
+0004988595 00000 n 
+0004988748 00000 n 
+0004988901 00000 n 
+0004989054 00000 n 
+0004989207 00000 n 
+0004989360 00000 n 
+0004989513 00000 n 
+0004989666 00000 n 
+0004989819 00000 n 
+0004989971 00000 n 
+0004990124 00000 n 
+0004990277 00000 n 
+0004990430 00000 n 
+0004990583 00000 n 
+0004990736 00000 n 
+0004990889 00000 n 
+0004991041 00000 n 
+0004991193 00000 n 
+0004991345 00000 n 
+0004991497 00000 n 
+0004991650 00000 n 
+0004991803 00000 n 
+0004991956 00000 n 
+0004992109 00000 n 
+0004992262 00000 n 
+0004995312 00000 n 
+0004992481 00000 n 
+0004973262 00000 n 
+0004971559 00000 n 
+0004992415 00000 n 
+0004995465 00000 n 
+0004995618 00000 n 
+0004995771 00000 n 
+0004995924 00000 n 
+0004996076 00000 n 
+0004996226 00000 n 
+0004996379 00000 n 
+0004996532 00000 n 
+0004996685 00000 n 
+0004996837 00000 n 
+0004996990 00000 n 
+0004997143 00000 n 
+0004997296 00000 n 
+0004997449 00000 n 
+0004997602 00000 n 
+0004997755 00000 n 
+0004997908 00000 n 
+0004998061 00000 n 
+0004998214 00000 n 
+0004998367 00000 n 
+0004998519 00000 n 
+0004998672 00000 n 
+0004998825 00000 n 
+0004998977 00000 n 
+0004999130 00000 n 
+0004999282 00000 n 
+0004999435 00000 n 
+0004999588 00000 n 
+0004999740 00000 n 
+0004999891 00000 n 
+0005000044 00000 n 
+0005000197 00000 n 
+0005000350 00000 n 
+0005000503 00000 n 
+0005000656 00000 n 
+0005000807 00000 n 
+0005000959 00000 n 
+0005001111 00000 n 
+0005001263 00000 n 
+0005001415 00000 n 
+0005001568 00000 n 
+0005001721 00000 n 
+0005001874 00000 n 
+0005002027 00000 n 
+0005002180 00000 n 
+0005002333 00000 n 
+0005002484 00000 n 
+0005002636 00000 n 
+0005002789 00000 n 
+0005002942 00000 n 
+0005003095 00000 n 
+0005003246 00000 n 
+0005003398 00000 n 
+0005003550 00000 n 
+0005003702 00000 n 
+0005003854 00000 n 
+0005004007 00000 n 
+0005004160 00000 n 
+0005004312 00000 n 
+0005004465 00000 n 
+0005004618 00000 n 
+0005004771 00000 n 
+0005004924 00000 n 
+0005005077 00000 n 
+0005005229 00000 n 
+0005005382 00000 n 
+0005005535 00000 n 
+0005005688 00000 n 
+0005005840 00000 n 
+0005005993 00000 n 
+0005006145 00000 n 
+0005006297 00000 n 
+0005006449 00000 n 
+0005006601 00000 n 
+0005006753 00000 n 
+0005006906 00000 n 
+0005007059 00000 n 
+0005007212 00000 n 
+0005007365 00000 n 
+0005007518 00000 n 
+0005007671 00000 n 
+0005007824 00000 n 
+0005007977 00000 n 
+0005008130 00000 n 
+0005008283 00000 n 
+0005008436 00000 n 
+0005008588 00000 n 
+0005008740 00000 n 
+0005008893 00000 n 
+0005009046 00000 n 
+0005009195 00000 n 
+0005009347 00000 n 
+0005009499 00000 n 
+0005009651 00000 n 
+0005009803 00000 n 
+0005009955 00000 n 
+0005010108 00000 n 
+0005010260 00000 n 
+0005010413 00000 n 
+0005010566 00000 n 
+0005010719 00000 n 
+0005010872 00000 n 
+0005011025 00000 n 
+0005011177 00000 n 
+0005011329 00000 n 
+0005011482 00000 n 
+0005015087 00000 n 
+0005011701 00000 n 
+0004994110 00000 n 
+0004992612 00000 n 
+0005011635 00000 n 
+0005333073 00000 n 
+0005015240 00000 n 
+0005015393 00000 n 
+0005015546 00000 n 
+0005015699 00000 n 
+0005015852 00000 n 
+0005016005 00000 n 
+0005016157 00000 n 
+0005016308 00000 n 
+0005016460 00000 n 
+0005016613 00000 n 
+0005016764 00000 n 
+0005016917 00000 n 
+0005017070 00000 n 
+0005017222 00000 n 
+0005017375 00000 n 
+0005017528 00000 n 
+0005017681 00000 n 
+0005017833 00000 n 
+0005017984 00000 n 
+0005018136 00000 n 
+0005018288 00000 n 
+0005018441 00000 n 
+0005018594 00000 n 
+0005018747 00000 n 
+0005018899 00000 n 
+0005019050 00000 n 
+0005019203 00000 n 
+0005019356 00000 n 
+0005019509 00000 n 
+0005019661 00000 n 
+0005019814 00000 n 
+0005019967 00000 n 
+0005020120 00000 n 
+0005020273 00000 n 
+0005020426 00000 n 
+0005020579 00000 n 
+0005020730 00000 n 
+0005020883 00000 n 
+0005021036 00000 n 
+0005021189 00000 n 
+0005021338 00000 n 
+0005021490 00000 n 
+0005021643 00000 n 
+0005021796 00000 n 
+0005021949 00000 n 
+0005022100 00000 n 
+0005022253 00000 n 
+0005022406 00000 n 
+0005022558 00000 n 
+0005022711 00000 n 
+0005022863 00000 n 
+0005023016 00000 n 
+0005023169 00000 n 
+0005023322 00000 n 
+0005023474 00000 n 
+0005023627 00000 n 
+0005023779 00000 n 
+0005023930 00000 n 
+0005024081 00000 n 
+0005024232 00000 n 
+0005024383 00000 n 
+0005024535 00000 n 
+0005024688 00000 n 
+0005024840 00000 n 
+0005024993 00000 n 
+0005025146 00000 n 
+0005025299 00000 n 
+0005025452 00000 n 
+0005025605 00000 n 
+0005025758 00000 n 
+0005025911 00000 n 
+0005026063 00000 n 
+0005026216 00000 n 
+0005026369 00000 n 
+0005026522 00000 n 
+0005026675 00000 n 
+0005026828 00000 n 
+0005026981 00000 n 
+0005027134 00000 n 
+0005027287 00000 n 
+0005027440 00000 n 
+0005027591 00000 n 
+0005027744 00000 n 
+0005027897 00000 n 
+0005028050 00000 n 
+0005028203 00000 n 
+0005028356 00000 n 
+0005028507 00000 n 
+0005028658 00000 n 
+0005028810 00000 n 
+0005028962 00000 n 
+0005029114 00000 n 
+0005029267 00000 n 
+0005029419 00000 n 
+0005029570 00000 n 
+0005029722 00000 n 
+0005029874 00000 n 
+0005030026 00000 n 
+0005030179 00000 n 
+0005030331 00000 n 
+0005030483 00000 n 
+0005030636 00000 n 
+0005030789 00000 n 
+0005030942 00000 n 
+0005031095 00000 n 
+0005031248 00000 n 
+0005031401 00000 n 
+0005031554 00000 n 
+0005031707 00000 n 
+0005031859 00000 n 
+0005032012 00000 n 
+0005032165 00000 n 
+0005032318 00000 n 
+0005032471 00000 n 
+0005032624 00000 n 
+0005032777 00000 n 
+0005032929 00000 n 
+0005033082 00000 n 
+0005033235 00000 n 
+0005033388 00000 n 
+0005033540 00000 n 
+0005033693 00000 n 
+0005033846 00000 n 
+0005033999 00000 n 
+0005034152 00000 n 
+0005034305 00000 n 
+0005034458 00000 n 
+0005034608 00000 n 
+0005034761 00000 n 
+0005034914 00000 n 
+0005035067 00000 n 
+0005035220 00000 n 
+0005035373 00000 n 
+0005035526 00000 n 
+0005035679 00000 n 
+0005035832 00000 n 
+0005035985 00000 n 
+0005036137 00000 n 
+0005039356 00000 n 
+0005036355 00000 n 
+0005013565 00000 n 
+0005011818 00000 n 
+0005036289 00000 n 
+0005039509 00000 n 
+0005039662 00000 n 
+0005039815 00000 n 
+0005039968 00000 n 
+0005040118 00000 n 
+0005040271 00000 n 
+0005040424 00000 n 
+0005040577 00000 n 
+0005040729 00000 n 
+0005040881 00000 n 
+0005041033 00000 n 
+0005041186 00000 n 
+0005041339 00000 n 
+0005041492 00000 n 
+0005041645 00000 n 
+0005041797 00000 n 
+0005041949 00000 n 
+0005042101 00000 n 
+0005042254 00000 n 
+0005042405 00000 n 
+0005042557 00000 n 
+0005042710 00000 n 
+0005042862 00000 n 
+0005043014 00000 n 
+0005043167 00000 n 
+0005043319 00000 n 
+0005043472 00000 n 
+0005043625 00000 n 
+0005043778 00000 n 
+0005043931 00000 n 
+0005044083 00000 n 
+0005044235 00000 n 
+0005044387 00000 n 
+0005044538 00000 n 
+0005044691 00000 n 
+0005044844 00000 n 
+0005044997 00000 n 
+0005045149 00000 n 
+0005045302 00000 n 
+0005045454 00000 n 
+0005045607 00000 n 
+0005045760 00000 n 
+0005045912 00000 n 
+0005046064 00000 n 
+0005046217 00000 n 
+0005046369 00000 n 
+0005046522 00000 n 
+0005046675 00000 n 
+0005046826 00000 n 
+0005046979 00000 n 
+0005047131 00000 n 
+0005047283 00000 n 
+0005047434 00000 n 
+0005047586 00000 n 
+0005047738 00000 n 
+0005047891 00000 n 
+0005048044 00000 n 
+0005048197 00000 n 
+0005048350 00000 n 
+0005048503 00000 n 
+0005048656 00000 n 
+0005048809 00000 n 
+0005048962 00000 n 
+0005049115 00000 n 
+0005049267 00000 n 
+0005049420 00000 n 
+0005049572 00000 n 
+0005049725 00000 n 
+0005049876 00000 n 
+0005050027 00000 n 
+0005050178 00000 n 
+0005050329 00000 n 
+0005050480 00000 n 
+0005050631 00000 n 
+0005050784 00000 n 
+0005050937 00000 n 
+0005051090 00000 n 
+0005051243 00000 n 
+0005051395 00000 n 
+0005051546 00000 n 
+0005051699 00000 n 
+0005051852 00000 n 
+0005052005 00000 n 
+0005052158 00000 n 
+0005052311 00000 n 
+0005052463 00000 n 
+0005052616 00000 n 
+0005052769 00000 n 
+0005052922 00000 n 
+0005053075 00000 n 
+0005053228 00000 n 
+0005053380 00000 n 
+0005053532 00000 n 
+0005053685 00000 n 
+0005053838 00000 n 
+0005053991 00000 n 
+0005054144 00000 n 
+0005054294 00000 n 
+0005054446 00000 n 
+0005054598 00000 n 
+0005054749 00000 n 
+0005054902 00000 n 
+0005055055 00000 n 
+0005055207 00000 n 
+0005055359 00000 n 
+0005055511 00000 n 
+0005055662 00000 n 
+0005055814 00000 n 
+0005055967 00000 n 
+0005056120 00000 n 
+0005056273 00000 n 
+0005056425 00000 n 
+0005056578 00000 n 
+0005056730 00000 n 
+0005056883 00000 n 
+0005057036 00000 n 
+0005057188 00000 n 
+0005057341 00000 n 
+0005058775 00000 n 
+0005058927 00000 n 
+0005057560 00000 n 
 0005038034 00000 n 
-0005038161 00000 n 
-0005038288 00000 n 
-0005038415 00000 n 
-0005038542 00000 n 
-0005038669 00000 n 
-0005038796 00000 n 
-0005038923 00000 n 
-0005039050 00000 n 
-0005039177 00000 n 
-0005039304 00000 n 
-0005039431 00000 n 
-0005039558 00000 n 
-0005039685 00000 n 
-0005039812 00000 n 
-0005039939 00000 n 
-0005040066 00000 n 
-0005040193 00000 n 
-0005040320 00000 n 
-0005040447 00000 n 
-0005040574 00000 n 
-0005040701 00000 n 
-0005040832 00000 n 
-0005040971 00000 n 
-0005041112 00000 n 
-0005041254 00000 n 
-0005041396 00000 n 
-0005041537 00000 n 
-0005041678 00000 n 
-0005041819 00000 n 
-0005041960 00000 n 
-0005042101 00000 n 
-0005042242 00000 n 
-0005042383 00000 n 
-0005042523 00000 n 
-0005042662 00000 n 
-0005042801 00000 n 
-0005042940 00000 n 
-0005043079 00000 n 
-0005043219 00000 n 
-0005043358 00000 n 
-0005043498 00000 n 
-0005043637 00000 n 
-0005043776 00000 n 
-0005043916 00000 n 
-0005044056 00000 n 
-0005044195 00000 n 
-0005044334 00000 n 
-0005044474 00000 n 
-0005044605 00000 n 
-0005044727 00000 n 
-0005044851 00000 n 
-0005044976 00000 n 
-0005045101 00000 n 
-0005045226 00000 n 
-0005045350 00000 n 
-0005045475 00000 n 
-0005045600 00000 n 
-0005045725 00000 n 
-0005045849 00000 n 
-0005045974 00000 n 
-0005046099 00000 n 
-0005046224 00000 n 
-0005046349 00000 n 
-0005046474 00000 n 
-0005046599 00000 n 
-0005046724 00000 n 
-0005046849 00000 n 
-0005046974 00000 n 
-0005047099 00000 n 
-0005047224 00000 n 
-0005047348 00000 n 
-0005047473 00000 n 
-0005047598 00000 n 
-0005047722 00000 n 
-0005047844 00000 n 
-0005047974 00000 n 
-0005048105 00000 n 
-0005048236 00000 n 
-0005048367 00000 n 
-0005048500 00000 n 
-0005048633 00000 n 
-0005048765 00000 n 
-0005048897 00000 n 
-0005049030 00000 n 
-0005049160 00000 n 
-0005049298 00000 n 
-0005049441 00000 n 
-0005049584 00000 n 
-0005049727 00000 n 
-0005049871 00000 n 
-0005050017 00000 n 
-0005050161 00000 n 
-0005050304 00000 n 
-0005050447 00000 n 
-0005050590 00000 n 
-0005050732 00000 n 
-0005050873 00000 n 
-0005051020 00000 n 
-0005051173 00000 n 
-0005051326 00000 n 
-0005051479 00000 n 
-0005051631 00000 n 
-0005051771 00000 n 
-0005051898 00000 n 
-0005052018 00000 n 
-0005052142 00000 n 
-0005052271 00000 n 
-0005052402 00000 n 
-0005052529 00000 n 
-0005052656 00000 n 
-0005052783 00000 n 
-0005052916 00000 n 
-0005053057 00000 n 
-0005053198 00000 n 
-0005053339 00000 n 
-0005053472 00000 n 
-0005053596 00000 n 
-0005053721 00000 n 
-0005053846 00000 n 
-0005053970 00000 n 
-0005054097 00000 n 
-0005054235 00000 n 
-0005054378 00000 n 
-0005054526 00000 n 
-0005054665 00000 n 
-0005054786 00000 n 
-0005054912 00000 n 
-0005055045 00000 n 
-0005055149 00000 n 
-0005055249 00000 n 
-0005055291 00000 n 
-0005055644 00000 n 
+0005036472 00000 n 
+0005057494 00000 n 
+0005059080 00000 n 
+0005059233 00000 n 
+0005059386 00000 n 
+0005059538 00000 n 
+0005059690 00000 n 
+0005059840 00000 n 
+0005059990 00000 n 
+0005060143 00000 n 
+0005060295 00000 n 
+0005060448 00000 n 
+0005060601 00000 n 
+0005060754 00000 n 
+0005060906 00000 n 
+0005061058 00000 n 
+0005061210 00000 n 
+0005061363 00000 n 
+0005061516 00000 n 
+0005061669 00000 n 
+0005061822 00000 n 
+0005061975 00000 n 
+0005062128 00000 n 
+0005062281 00000 n 
+0005062433 00000 n 
+0005062586 00000 n 
+0005062739 00000 n 
+0005062891 00000 n 
+0005063110 00000 n 
+0005058363 00000 n 
+0005057677 00000 n 
+0005063044 00000 n 
+0005064075 00000 n 
+0005064132 00000 n 
+0005064583 00000 n 
+0005064608 00000 n 
+0005064633 00000 n 
+0005064658 00000 n 
+0005064695 00000 n 
+0005065032 00000 n 
+0005065065 00000 n 
+0005065098 00000 n 
+0005065753 00000 n 
+0005066270 00000 n 
+0005066922 00000 n 
+0005067322 00000 n 
+0005067703 00000 n 
+0005067740 00000 n 
+0005068191 00000 n 
+0005068580 00000 n 
+0005068619 00000 n 
+0005068700 00000 n 
+0005069134 00000 n 
+0005069805 00000 n 
+0005070202 00000 n 
+0005070305 00000 n 
+0005070943 00000 n 
+0005071624 00000 n 
+0005072263 00000 n 
+0005072905 00000 n 
+0005073558 00000 n 
+0005074014 00000 n 
+0005074647 00000 n 
+0005076314 00000 n 
+0005076549 00000 n 
+0005093606 00000 n 
+0005094190 00000 n 
+0005103363 00000 n 
+0005103714 00000 n 
+0005107945 00000 n 
+0005108208 00000 n 
+0005116108 00000 n 
+0005116397 00000 n 
+0005124410 00000 n 
+0005124709 00000 n 
+0005138745 00000 n 
+0005139240 00000 n 
+0005141174 00000 n 
+0005141426 00000 n 
+0005143244 00000 n 
+0005143480 00000 n 
+0005145275 00000 n 
+0005145514 00000 n 
+0005164595 00000 n 
+0005165238 00000 n 
+0005171713 00000 n 
+0005172028 00000 n 
+0005175360 00000 n 
+0005175630 00000 n 
+0005179596 00000 n 
+0005179874 00000 n 
+0005192549 00000 n 
+0005193015 00000 n 
+0005194832 00000 n 
+0005195062 00000 n 
+0005196865 00000 n 
+0005197096 00000 n 
+0005207905 00000 n 
+0005208432 00000 n 
+0005212760 00000 n 
+0005213055 00000 n 
+0005222982 00000 n 
+0005223455 00000 n 
+0005237706 00000 n 
+0005238262 00000 n 
+0005245993 00000 n 
+0005246392 00000 n 
+0005248917 00000 n 
+0005249236 00000 n 
+0005268507 00000 n 
+0005269063 00000 n 
+0005271010 00000 n 
+0005271237 00000 n 
+0005273181 00000 n 
+0005273408 00000 n 
+0005275432 00000 n 
+0005275661 00000 n 
+0005292269 00000 n 
+0005292918 00000 n 
+0005305611 00000 n 
+0005306087 00000 n 
+0005307941 00000 n 
+0005333186 00000 n 
+0005333314 00000 n 
+0005333442 00000 n 
+0005333570 00000 n 
+0005333698 00000 n 
+0005333826 00000 n 
+0005333954 00000 n 
+0005334082 00000 n 
+0005334210 00000 n 
+0005334338 00000 n 
+0005334466 00000 n 
+0005334594 00000 n 
+0005334722 00000 n 
+0005334850 00000 n 
+0005334978 00000 n 
+0005335106 00000 n 
+0005335234 00000 n 
+0005335363 00000 n 
+0005335497 00000 n 
+0005335631 00000 n 
+0005335765 00000 n 
+0005335899 00000 n 
+0005336033 00000 n 
+0005336167 00000 n 
+0005336301 00000 n 
+0005336435 00000 n 
+0005336569 00000 n 
+0005336683 00000 n 
+0005336818 00000 n 
+0005336953 00000 n 
+0005337088 00000 n 
+0005337223 00000 n 
+0005337327 00000 n 
+0005337434 00000 n 
+0005429485 00000 n 
+0005429641 00000 n 
+0005429788 00000 n 
+0005429940 00000 n 
+0005430087 00000 n 
+0005430230 00000 n 
+0005430456 00000 n 
+0005430644 00000 n 
+0005430838 00000 n 
+0005431024 00000 n 
+0005431209 00000 n 
+0005431395 00000 n 
+0005431580 00000 n 
+0005431766 00000 n 
+0005431951 00000 n 
+0005432137 00000 n 
+0005432321 00000 n 
+0005432505 00000 n 
+0005432691 00000 n 
+0005432876 00000 n 
+0005433062 00000 n 
+0005433247 00000 n 
+0005433433 00000 n 
+0005433618 00000 n 
+0005433804 00000 n 
+0005433989 00000 n 
+0005434175 00000 n 
+0005434356 00000 n 
+0005434542 00000 n 
+0005434726 00000 n 
+0005434910 00000 n 
+0005435096 00000 n 
+0005435281 00000 n 
+0005435467 00000 n 
+0005435652 00000 n 
+0005435838 00000 n 
+0005436023 00000 n 
+0005436211 00000 n 
+0005436401 00000 n 
+0005436593 00000 n 
+0005436782 00000 n 
+0005436971 00000 n 
+0005437163 00000 n 
+0005437353 00000 n 
+0005437545 00000 n 
+0005437732 00000 n 
+0005437924 00000 n 
+0005438114 00000 n 
+0005438306 00000 n 
+0005438496 00000 n 
+0005438688 00000 n 
+0005438878 00000 n 
+0005439070 00000 n 
+0005439259 00000 n 
+0005439448 00000 n 
+0005439640 00000 n 
+0005439830 00000 n 
+0005440022 00000 n 
+0005440212 00000 n 
+0005440404 00000 n 
+0005440594 00000 n 
+0005440786 00000 n 
+0005440976 00000 n 
+0005441168 00000 n 
+0005441353 00000 n 
+0005441545 00000 n 
+0005441734 00000 n 
+0005441923 00000 n 
+0005442112 00000 n 
+0005442290 00000 n 
+0005442466 00000 n 
+0005442642 00000 n 
+0005442820 00000 n 
+0005442997 00000 n 
+0005443175 00000 n 
+0005443352 00000 n 
+0005443530 00000 n 
+0005443707 00000 n 
+0005443885 00000 n 
+0005444096 00000 n 
+0005444306 00000 n 
+0005444514 00000 n 
+0005444715 00000 n 
+0005444885 00000 n 
+0005445060 00000 n 
+0005445256 00000 n 
+0005445507 00000 n 
+0005445707 00000 n 
+0005445944 00000 n 
+0005446126 00000 n 
+0005446333 00000 n 
+0005446525 00000 n 
+0005446719 00000 n 
+0005446918 00000 n 
+0005447120 00000 n 
+0005447320 00000 n 
+0005447522 00000 n 
+0005447722 00000 n 
+0005447924 00000 n 
+0005448129 00000 n 
+0005448336 00000 n 
+0005448530 00000 n 
+0005448733 00000 n 
+0005448949 00000 n 
+0005449172 00000 n 
+0005449406 00000 n 
+0005449640 00000 n 
+0005449872 00000 n 
+0005450100 00000 n 
+0005450330 00000 n 
+0005450565 00000 n 
+0005450799 00000 n 
+0005451033 00000 n 
+0005451260 00000 n 
+0005451451 00000 n 
+0005451706 00000 n 
+0005451900 00000 n 
+0005452112 00000 n 
+0005452330 00000 n 
+0005452544 00000 n 
+0005452754 00000 n 
+0005452962 00000 n 
+0005453172 00000 n 
+0005453381 00000 n 
+0005453585 00000 n 
+0005453795 00000 n 
+0005453982 00000 n 
+0005454168 00000 n 
+0005454355 00000 n 
+0005454543 00000 n 
+0005454731 00000 n 
+0005454917 00000 n 
+0005455105 00000 n 
+0005455292 00000 n 
+0005455479 00000 n 
+0005455666 00000 n 
+0005455853 00000 n 
+0005456039 00000 n 
+0005456225 00000 n 
+0005456413 00000 n 
+0005456600 00000 n 
+0005456786 00000 n 
+0005456972 00000 n 
+0005457158 00000 n 
+0005457344 00000 n 
+0005457530 00000 n 
+0005457716 00000 n 
+0005457902 00000 n 
+0005458088 00000 n 
+0005458275 00000 n 
+0005458461 00000 n 
+0005458647 00000 n 
+0005458833 00000 n 
+0005459019 00000 n 
+0005459205 00000 n 
+0005459391 00000 n 
+0005459577 00000 n 
+0005459763 00000 n 
+0005459949 00000 n 
+0005460135 00000 n 
+0005460321 00000 n 
+0005460507 00000 n 
+0005460693 00000 n 
+0005460879 00000 n 
+0005461067 00000 n 
+0005461254 00000 n 
+0005461440 00000 n 
+0005461626 00000 n 
+0005461812 00000 n 
+0005461998 00000 n 
+0005462184 00000 n 
+0005462370 00000 n 
+0005462556 00000 n 
+0005462742 00000 n 
+0005462928 00000 n 
+0005463114 00000 n 
+0005463300 00000 n 
+0005463486 00000 n 
+0005463672 00000 n 
+0005463858 00000 n 
+0005464044 00000 n 
+0005464230 00000 n 
+0005464416 00000 n 
+0005464602 00000 n 
+0005464792 00000 n 
+0005464978 00000 n 
+0005465164 00000 n 
+0005465350 00000 n 
+0005465536 00000 n 
+0005465722 00000 n 
+0005465909 00000 n 
+0005466100 00000 n 
+0005466289 00000 n 
+0005466475 00000 n 
+0005466661 00000 n 
+0005466847 00000 n 
+0005467037 00000 n 
+0005467229 00000 n 
+0005467421 00000 n 
+0005467613 00000 n 
+0005467800 00000 n 
+0005467986 00000 n 
+0005468172 00000 n 
+0005468358 00000 n 
+0005468544 00000 n 
+0005468730 00000 n 
+0005468916 00000 n 
+0005469106 00000 n 
+0005469298 00000 n 
+0005469490 00000 n 
+0005469682 00000 n 
+0005469874 00000 n 
+0005470066 00000 n 
+0005470258 00000 n 
+0005470450 00000 n 
+0005470642 00000 n 
+0005470834 00000 n 
+0005471026 00000 n 
+0005471218 00000 n 
+0005471404 00000 n 
+0005471590 00000 n 
+0005471776 00000 n 
+0005471962 00000 n 
+0005472148 00000 n 
+0005472334 00000 n 
+0005472520 00000 n 
+0005472706 00000 n 
+0005472892 00000 n 
+0005473078 00000 n 
+0005473264 00000 n 
+0005473450 00000 n 
+0005473636 00000 n 
+0005473822 00000 n 
+0005474008 00000 n 
+0005474196 00000 n 
+0005474388 00000 n 
+0005474580 00000 n 
+0005474772 00000 n 
+0005474964 00000 n 
+0005475156 00000 n 
+0005475348 00000 n 
+0005475540 00000 n 
+0005475732 00000 n 
+0005475924 00000 n 
+0005476116 00000 n 
+0005476308 00000 n 
+0005476500 00000 n 
+0005476692 00000 n 
+0005476884 00000 n 
+0005477076 00000 n 
+0005477268 00000 n 
+0005477460 00000 n 
+0005477652 00000 n 
+0005477844 00000 n 
+0005478036 00000 n 
+0005478228 00000 n 
+0005478420 00000 n 
+0005478612 00000 n 
+0005478804 00000 n 
+0005478996 00000 n 
+0005479188 00000 n 
+0005479380 00000 n 
+0005479572 00000 n 
+0005479764 00000 n 
+0005479965 00000 n 
+0005480197 00000 n 
+0005480417 00000 n 
+0005480627 00000 n 
+0005480850 00000 n 
+0005481108 00000 n 
+0005481366 00000 n 
+0005481624 00000 n 
+0005481882 00000 n 
+0005482140 00000 n 
+0005482398 00000 n 
+0005482652 00000 n 
+0005482894 00000 n 
+0005483148 00000 n 
+0005483406 00000 n 
+0005483669 00000 n 
+0005483933 00000 n 
+0005484186 00000 n 
+0005484450 00000 n 
+0005484722 00000 n 
+0005484985 00000 n 
+0005485243 00000 n 
+0005485493 00000 n 
+0005485735 00000 n 
+0005485971 00000 n 
+0005486221 00000 n 
+0005486470 00000 n 
+0005486720 00000 n 
+0005486969 00000 n 
+0005487215 00000 n 
+0005487464 00000 n 
+0005487720 00000 n 
+0005487976 00000 n 
+0005488237 00000 n 
+0005488501 00000 n 
+0005488763 00000 n 
+0005489024 00000 n 
+0005489280 00000 n 
+0005489539 00000 n 
+0005489797 00000 n 
+0005490061 00000 n 
+0005490324 00000 n 
+0005490584 00000 n 
+0005490842 00000 n 
+0005491106 00000 n 
+0005491369 00000 n 
+0005491629 00000 n 
+0005491885 00000 n 
+0005492141 00000 n 
+0005492397 00000 n 
+0005492649 00000 n 
+0005492899 00000 n 
+0005493148 00000 n 
+0005493398 00000 n 
+0005493647 00000 n 
+0005493891 00000 n 
+0005494144 00000 n 
+0005494400 00000 n 
+0005494650 00000 n 
+0005494900 00000 n 
+0005495148 00000 n 
+0005495393 00000 n 
+0005495635 00000 n 
+0005495877 00000 n 
+0005496115 00000 n 
+0005496358 00000 n 
+0005496608 00000 n 
+0005496857 00000 n 
+0005497099 00000 n 
+0005497341 00000 n 
+0005497583 00000 n 
+0005497826 00000 n 
+0005498068 00000 n 
+0005498315 00000 n 
+0005498557 00000 n 
+0005498799 00000 n 
+0005499036 00000 n 
+0005499272 00000 n 
+0005499514 00000 n 
+0005499758 00000 n 
+0005500000 00000 n 
+0005500248 00000 n 
+0005500493 00000 n 
+0005500735 00000 n 
+0005500977 00000 n 
+0005501219 00000 n 
+0005501460 00000 n 
+0005501694 00000 n 
+0005501933 00000 n 
+0005502175 00000 n 
+0005502417 00000 n 
+0005502657 00000 n 
+0005502894 00000 n 
+0005503131 00000 n 
+0005503377 00000 n 
+0005503622 00000 n 
+0005503866 00000 n 
+0005504116 00000 n 
+0005504365 00000 n 
+0005504615 00000 n 
+0005504859 00000 n 
+0005505101 00000 n 
+0005505343 00000 n 
+0005505585 00000 n 
+0005505830 00000 n 
+0005506072 00000 n 
+0005506320 00000 n 
+0005506566 00000 n 
+0005506808 00000 n 
+0005507058 00000 n 
+0005507302 00000 n 
+0005507547 00000 n 
+0005507791 00000 n 
+0005508032 00000 n 
+0005508274 00000 n 
+0005508515 00000 n 
+0005508757 00000 n 
+0005508991 00000 n 
+0005509231 00000 n 
+0005509473 00000 n 
+0005509715 00000 n 
+0005509955 00000 n 
+0005510193 00000 n 
+0005510429 00000 n 
+0005510671 00000 n 
+0005510913 00000 n 
+0005511155 00000 n 
+0005511397 00000 n 
+0005511638 00000 n 
+0005511880 00000 n 
+0005512121 00000 n 
+0005512359 00000 n 
+0005512598 00000 n 
+0005512848 00000 n 
+0005513097 00000 n 
+0005513347 00000 n 
+0005513591 00000 n 
+0005513835 00000 n 
+0005514082 00000 n 
+0005514324 00000 n 
+0005514570 00000 n 
+0005514812 00000 n 
+0005515059 00000 n 
+0005515309 00000 n 
+0005515557 00000 n 
+0005515801 00000 n 
+0005516045 00000 n 
+0005516295 00000 n 
+0005516544 00000 n 
+0005516786 00000 n 
+0005517033 00000 n 
+0005517281 00000 n 
+0005517526 00000 n 
+0005517768 00000 n 
+0005518009 00000 n 
+0005518249 00000 n 
+0005518483 00000 n 
+0005518735 00000 n 
+0005518983 00000 n 
+0005519231 00000 n 
+0005519479 00000 n 
+0005519728 00000 n 
+0005519921 00000 n 
+0005520121 00000 n 
+0005520336 00000 n 
+0005520545 00000 n 
+0005520729 00000 n 
+0005520913 00000 n 
+0005521099 00000 n 
+0005521284 00000 n 
+0005521470 00000 n 
+0005521655 00000 n 
+0005521841 00000 n 
+0005522026 00000 n 
+0005522212 00000 n 
+0005522397 00000 n 
+0005522583 00000 n 
+0005522767 00000 n 
+0005522951 00000 n 
+0005523137 00000 n 
+0005523322 00000 n 
+0005523508 00000 n 
+0005523693 00000 n 
+0005523879 00000 n 
+0005524062 00000 n 
+0005524248 00000 n 
+0005524433 00000 n 
+0005524619 00000 n 
+0005524804 00000 n 
+0005524990 00000 n 
+0005525174 00000 n 
+0005525358 00000 n 
+0005525544 00000 n 
+0005525729 00000 n 
+0005525915 00000 n 
+0005526100 00000 n 
+0005526286 00000 n 
+0005526471 00000 n 
+0005526657 00000 n 
+0005526842 00000 n 
+0005527028 00000 n 
+0005527212 00000 n 
+0005527394 00000 n 
+0005527578 00000 n 
+0005527762 00000 n 
+0005527948 00000 n 
+0005528133 00000 n 
+0005528319 00000 n 
+0005528504 00000 n 
+0005528690 00000 n 
+0005528875 00000 n 
+0005529061 00000 n 
+0005529246 00000 n 
+0005529432 00000 n 
+0005529616 00000 n 
+0005529800 00000 n 
+0005529986 00000 n 
+0005530171 00000 n 
+0005530357 00000 n 
+0005530542 00000 n 
+0005530728 00000 n 
+0005530911 00000 n 
+0005531097 00000 n 
+0005531282 00000 n 
+0005531468 00000 n 
+0005531653 00000 n 
+0005531839 00000 n 
+0005532023 00000 n 
+0005532207 00000 n 
+0005532393 00000 n 
+0005532578 00000 n 
+0005532764 00000 n 
+0005532949 00000 n 
+0005533135 00000 n 
+0005533320 00000 n 
+0005533506 00000 n 
+0005533691 00000 n 
+0005533877 00000 n 
+0005534061 00000 n 
+0005534243 00000 n 
+0005534427 00000 n 
+0005534611 00000 n 
+0005534797 00000 n 
+0005534982 00000 n 
+0005535168 00000 n 
+0005535353 00000 n 
+0005535539 00000 n 
+0005535725 00000 n 
+0005535917 00000 n 
+0005536107 00000 n 
+0005536299 00000 n 
+0005536488 00000 n 
+0005536677 00000 n 
+0005536869 00000 n 
+0005537059 00000 n 
+0005537251 00000 n 
+0005537441 00000 n 
+0005537633 00000 n 
+0005537820 00000 n 
+0005538012 00000 n 
+0005538202 00000 n 
+0005538394 00000 n 
+0005538584 00000 n 
+0005538776 00000 n 
+0005538965 00000 n 
+0005539154 00000 n 
+0005539346 00000 n 
+0005539536 00000 n 
+0005539728 00000 n 
+0005539918 00000 n 
+0005540110 00000 n 
+0005540300 00000 n 
+0005540492 00000 n 
+0005540682 00000 n 
+0005540874 00000 n 
+0005541063 00000 n 
+0005541250 00000 n 
+0005541439 00000 n 
+0005541628 00000 n 
+0005541820 00000 n 
+0005542010 00000 n 
+0005542202 00000 n 
+0005542392 00000 n 
+0005542584 00000 n 
+0005542774 00000 n 
+0005542966 00000 n 
+0005543156 00000 n 
+0005543348 00000 n 
+0005543537 00000 n 
+0005543726 00000 n 
+0005543918 00000 n 
+0005544108 00000 n 
+0005544300 00000 n 
+0005544490 00000 n 
+0005544682 00000 n 
+0005544869 00000 n 
+0005545061 00000 n 
+0005545251 00000 n 
+0005545443 00000 n 
+0005545633 00000 n 
+0005545825 00000 n 
+0005546014 00000 n 
+0005546203 00000 n 
+0005546395 00000 n 
+0005546585 00000 n 
+0005546777 00000 n 
+0005546967 00000 n 
+0005547159 00000 n 
+0005547349 00000 n 
+0005547541 00000 n 
+0005547731 00000 n 
+0005547916 00000 n 
+0005548094 00000 n 
+0005548271 00000 n 
+0005548453 00000 n 
+0005548639 00000 n 
+0005548821 00000 n 
+0005549004 00000 n 
+0005549195 00000 n 
+0005549389 00000 n 
+0005549583 00000 n 
+0005549777 00000 n 
+0005549976 00000 n 
+0005550159 00000 n 
+0005550336 00000 n 
+0005550558 00000 n 
+0005550770 00000 n 
+0005550955 00000 n 
+0005551243 00000 n 
+0005551469 00000 n 
+0005551672 00000 n 
+0005551880 00000 n 
+0005552093 00000 n 
+0005552309 00000 n 
+0005552525 00000 n 
+0005552741 00000 n 
+0005552957 00000 n 
+0005553165 00000 n 
+0005553367 00000 n 
+0005553579 00000 n 
+0005553791 00000 n 
+0005554006 00000 n 
+0005554227 00000 n 
+0005554445 00000 n 
+0005554663 00000 n 
+0005554881 00000 n 
+0005555099 00000 n 
+0005555317 00000 n 
+0005555532 00000 n 
+0005555747 00000 n 
+0005555970 00000 n 
+0005556188 00000 n 
+0005556412 00000 n 
+0005556636 00000 n 
+0005556856 00000 n 
+0005557074 00000 n 
+0005557292 00000 n 
+0005557510 00000 n 
+0005557728 00000 n 
+0005557946 00000 n 
+0005558164 00000 n 
+0005558371 00000 n 
+0005558589 00000 n 
+0005558807 00000 n 
+0005559025 00000 n 
+0005559243 00000 n 
+0005559450 00000 n 
+0005559663 00000 n 
+0005559881 00000 n 
+0005560099 00000 n 
+0005560317 00000 n 
+0005560538 00000 n 
+0005560756 00000 n 
+0005560974 00000 n 
+0005561185 00000 n 
+0005561389 00000 n 
+0005561593 00000 n 
+0005561806 00000 n 
+0005562003 00000 n 
+0005562207 00000 n 
+0005562420 00000 n 
+0005562661 00000 n 
+0005562911 00000 n 
+0005563163 00000 n 
+0005563415 00000 n 
+0005563667 00000 n 
+0005563919 00000 n 
+0005564171 00000 n 
+0005564423 00000 n 
+0005564675 00000 n 
+0005564934 00000 n 
+0005565192 00000 n 
+0005565450 00000 n 
+0005565708 00000 n 
+0005565966 00000 n 
+0005566224 00000 n 
+0005566482 00000 n 
+0005566740 00000 n 
+0005566998 00000 n 
+0005567256 00000 n 
+0005567514 00000 n 
+0005567766 00000 n 
+0005568027 00000 n 
+0005568285 00000 n 
+0005568543 00000 n 
+0005568801 00000 n 
+0005569059 00000 n 
+0005569328 00000 n 
+0005569598 00000 n 
+0005569864 00000 n 
+0005570130 00000 n 
+0005570396 00000 n 
+0005570662 00000 n 
+0005570931 00000 n 
+0005571205 00000 n 
+0005571475 00000 n 
+0005571739 00000 n 
+0005571997 00000 n 
+0005572255 00000 n 
+0005572516 00000 n 
+0005572782 00000 n 
+0005573043 00000 n 
+0005573301 00000 n 
+0005573559 00000 n 
+0005573817 00000 n 
+0005574075 00000 n 
+0005574333 00000 n 
+0005574591 00000 n 
+0005574849 00000 n 
+0005575107 00000 n 
+0005575365 00000 n 
+0005575623 00000 n 
+0005575881 00000 n 
+0005576139 00000 n 
+0005576397 00000 n 
+0005576646 00000 n 
+0005576890 00000 n 
+0005577148 00000 n 
+0005577406 00000 n 
+0005577664 00000 n 
+0005577922 00000 n 
+0005578180 00000 n 
+0005578438 00000 n 
+0005578696 00000 n 
+0005578943 00000 n 
+0005579187 00000 n 
+0005579445 00000 n 
+0005579703 00000 n 
+0005579961 00000 n 
+0005580216 00000 n 
+0005580460 00000 n 
+0005580704 00000 n 
+0005580948 00000 n 
+0005581192 00000 n 
+0005581436 00000 n 
+0005581696 00000 n 
+0005581988 00000 n 
+0005582283 00000 n 
+0005582576 00000 n 
+0005582874 00000 n 
+0005583172 00000 n 
+0005583470 00000 n 
+0005583768 00000 n 
+0005584066 00000 n 
+0005584353 00000 n 
+0005584646 00000 n 
+0005584944 00000 n 
+0005585244 00000 n 
+0005585550 00000 n 
+0005585850 00000 n 
+0005586148 00000 n 
+0005586446 00000 n 
+0005586744 00000 n 
+0005587042 00000 n 
+0005587333 00000 n 
+0005587626 00000 n 
+0005587924 00000 n 
+0005588222 00000 n 
+0005588520 00000 n 
+0005588812 00000 n 
+0005589110 00000 n 
+0005589394 00000 n 
+0005589644 00000 n 
+0005589846 00000 n 
+0005590048 00000 n 
+0005590250 00000 n 
+0005590452 00000 n 
+0005590654 00000 n 
+0005590864 00000 n 
+0005591048 00000 n 
+0005591264 00000 n 
+0005591461 00000 n 
+0005591656 00000 n 
+0005591798 00000 n 
+0005591923 00000 n 
+0005592051 00000 n 
+0005592176 00000 n 
+0005592301 00000 n 
+0005592425 00000 n 
+0005592550 00000 n 
+0005592675 00000 n 
+0005592800 00000 n 
+0005592924 00000 n 
+0005593049 00000 n 
+0005593174 00000 n 
+0005593298 00000 n 
+0005593421 00000 n 
+0005593544 00000 n 
+0005593671 00000 n 
+0005593800 00000 n 
+0005593928 00000 n 
+0005594060 00000 n 
+0005594186 00000 n 
+0005594314 00000 n 
+0005594442 00000 n 
+0005594567 00000 n 
+0005594692 00000 n 
+0005594817 00000 n 
+0005594942 00000 n 
+0005595067 00000 n 
+0005595192 00000 n 
+0005595317 00000 n 
+0005595442 00000 n 
+0005595567 00000 n 
+0005595692 00000 n 
+0005595817 00000 n 
+0005595942 00000 n 
+0005596067 00000 n 
+0005596192 00000 n 
+0005596317 00000 n 
+0005596442 00000 n 
+0005596567 00000 n 
+0005596692 00000 n 
+0005596817 00000 n 
+0005596942 00000 n 
+0005597067 00000 n 
+0005597192 00000 n 
+0005597322 00000 n 
+0005597461 00000 n 
+0005597602 00000 n 
+0005597744 00000 n 
+0005597886 00000 n 
+0005598027 00000 n 
+0005598168 00000 n 
+0005598309 00000 n 
+0005598450 00000 n 
+0005598591 00000 n 
+0005598732 00000 n 
+0005598873 00000 n 
+0005599013 00000 n 
+0005599152 00000 n 
+0005599291 00000 n 
+0005599430 00000 n 
+0005599569 00000 n 
+0005599709 00000 n 
+0005599848 00000 n 
+0005599988 00000 n 
+0005600127 00000 n 
+0005600266 00000 n 
+0005600406 00000 n 
+0005600546 00000 n 
+0005600686 00000 n 
+0005600826 00000 n 
+0005600964 00000 n 
+0005601097 00000 n 
+0005601224 00000 n 
+0005601349 00000 n 
+0005601474 00000 n 
+0005601599 00000 n 
+0005601724 00000 n 
+0005601849 00000 n 
+0005601973 00000 n 
+0005602098 00000 n 
+0005602223 00000 n 
+0005602348 00000 n 
+0005602472 00000 n 
+0005602597 00000 n 
+0005602722 00000 n 
+0005602847 00000 n 
+0005602971 00000 n 
+0005603096 00000 n 
+0005603221 00000 n 
+0005603346 00000 n 
+0005603469 00000 n 
+0005603593 00000 n 
+0005603718 00000 n 
+0005603843 00000 n 
+0005603968 00000 n 
+0005604092 00000 n 
+0005604216 00000 n 
+0005604340 00000 n 
+0005604468 00000 n 
+0005604600 00000 n 
+0005604731 00000 n 
+0005604863 00000 n 
+0005604995 00000 n 
+0005605127 00000 n 
+0005605260 00000 n 
+0005605392 00000 n 
+0005605524 00000 n 
+0005605652 00000 n 
+0005605784 00000 n 
+0005605927 00000 n 
+0005606070 00000 n 
+0005606213 00000 n 
+0005606357 00000 n 
+0005606503 00000 n 
+0005606649 00000 n 
+0005606793 00000 n 
+0005606936 00000 n 
+0005607079 00000 n 
+0005607221 00000 n 
+0005607362 00000 n 
+0005607509 00000 n 
+0005607663 00000 n 
+0005607817 00000 n 
+0005607970 00000 n 
+0005608122 00000 n 
+0005608262 00000 n 
+0005608388 00000 n 
+0005608462 00000 n 
+0005608582 00000 n 
+0005608706 00000 n 
+0005608835 00000 n 
+0005608965 00000 n 
+0005609090 00000 n 
+0005609215 00000 n 
+0005609340 00000 n 
+0005609472 00000 n 
+0005609613 00000 n 
+0005609754 00000 n 
+0005609895 00000 n 
+0005610028 00000 n 
+0005610152 00000 n 
+0005610277 00000 n 
+0005610400 00000 n 
+0005610523 00000 n 
+0005610650 00000 n 
+0005610787 00000 n 
+0005610931 00000 n 
+0005611080 00000 n 
+0005611219 00000 n 
+0005611293 00000 n 
+0005611413 00000 n 
+0005611538 00000 n 
+0005611672 00000 n 
+0005611786 00000 n 
+0005611886 00000 n 
+0005611928 00000 n 
+0005612281 00000 n 
 trailer
-<< /Size 18520
-/Root 18518 0 R
-/Info 18519 0 R
-/ID [<B91D7364CBBE40AF32AEE6CF4456AA71> <B91D7364CBBE40AF32AEE6CF4456AA71>] >>
+<< /Size 18512
+/Root 18510 0 R
+/Info 18511 0 R
+/ID [<D2CB5EBD2CC9C2D45498940773DCCCDF> <D2CB5EBD2CC9C2D45498940773DCCCDF>] >>
 startxref
-5055977
+5612614
 %%EOF

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/2000users.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/2000users.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/2000users.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 6. A Distributed 2000-User Network</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="ExNetworks.html" title="Part I. Example Network Configurations"><link rel="prev" href="happy.html" title="Chapter 5. Making Happy Users"><link rel="next" href="DMSMig.html" title="Part II. Domain Members, Updating Samba and Migration"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 6. A Distributed 2000-User Network</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="happy.html">Prev</a> </td><th width="60%" align="center">Part I. Example Network Configurations</th><td width="20%" align="right"> <a accesskey="n" href="DMSMig.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="2000users"></a>Chapter 6. A Distributed 2000-User Network</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="2000users.html#id2605895">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="2000users.html#id2605926">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="2000users.html#id2605993">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="2000users.html#id2606266">Technical Issues</a></span></dt><dt><span class="sect2"><a href="2000users.html#id2607210">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="2000users.html#id2607228">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="2000users.html#id2610386">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="2000users.html#id2610534">Questions and Answers</a></span></dt></dl></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 6. A Distributed 2000-User Network</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="ExNetworks.html" title="Part I. Example Network Configurations"><link rel="prev" href="happy.html" title="Chapter 5. Making Happy Users"><link rel="next" href="DMSMig.html" title="Part II. Domain Members, Updating Samba and Migration"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 6. A Distributed 2000-User Network</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="happy.html">Prev</a> </td><th width="60%" align="center">Part I. Example Network Configurations</th><td width="20%" align="right"> <a accesskey="n" href="DMSMig.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="2000users"></a>Chapter 6. A Distributed 2000-User Network</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="2000users.html#id370394">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="2000users.html#id370419">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="2000users.html#id370476">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="2000users.html#id370722">Technical Issues</a></span></dt><dt><span class="sect2"><a href="2000users.html#id371541">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="2000users.html#id371556">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="2000users.html#id374570">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="2000users.html#id374709">Questions and Answers</a></span></dt></dl></div><p>
 There is something indeed mystical about things that are
 big. Large networks exhibit a certain magnetism and exude a sense of
 importance that obscures reality. You and I know that it is no more
@@ -30,7 +30,7 @@
 Samba are largely under control. So in this section you focus on the
 specifics of implementing LDAP changes, Samba changes, and approach and
 design of the solution and its deployment.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2605895"></a>Introduction</h2></div></div></div><p>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id370394"></a>Introduction</h2></div></div></div><p>
 Abmas is a miracle company. Most businesses would have collapsed under
 the weight of rapid expansion that this company has experienced. Samba 
 is flexible, so there is no need to reinstall the whole operating 
@@ -39,19 +39,19 @@
 and then do a near-live conversion. There is no need to reinstall a 
 Samba server just to change the way your network should function.
 </p><p>
-<a class="indexterm" name="id2605914"></a>
+<a class="indexterm" name="id370409"></a>
 Network growth is common to all organizations. In this exercise,
 your preoccupation is with the mechanics of implementing Samba and
 LDAP so that network users on each network segment can work
 without impediment.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2605926"></a>Assignment Tasks</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id370419"></a>Assignment Tasks</h3></div></div></div><p>
 	Starting with the configuration files for the server called
 	<code class="constant">MASSIVE</code> in <a class="link" href="happy.html" title="Chapter 5. Making Happy Users">&#8220;Making Happy Users&#8221;</a>, you now deal with the
 	issues that are particular to large distributed networks. Your task
 	is simple  identify the challenges, consider the 
 	alternatives, and then design and implement a solution.
 	</p><p>
-	<a class="indexterm" name="id2605954"></a>
+	<a class="indexterm" name="id370444"></a>
 	Remember, you have users based in London (UK), Los Angeles,
 	Washington. DC, and, three buildings in New York. A significant portion
 	of your workforce have notebook computers and roam all over the
@@ -72,18 +72,18 @@
 	You have outsourced all desktop deployment and management to
 	DirectPointe. Your concern is server maintenance and third-level
 	support. Build a plan and show what must be done.
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2605993"></a>Dissection and Discussion</h2></div></div></div><p>
-<a class="indexterm" name="id2606001"></a>
-<a class="indexterm" name="id2606008"></a>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id370476"></a>Dissection and Discussion</h2></div></div></div><p>
+<a class="indexterm" name="id370483"></a>
+<a class="indexterm" name="id370490"></a>
 In <a class="link" href="happy.html" title="Chapter 5. Making Happy Users">&#8220;Making Happy Users&#8221;</a>, you implemented an LDAP server that provided the
 <em class="parameter"><code>passdb backend</code></em> for the Samba servers. You
 explored ways to accelerate Windows desktop profile handling and you
 took control of network performance.
 </p><p>
-<a class="indexterm" name="id2606033"></a>
-<a class="indexterm" name="id2606040"></a>
-<a class="indexterm" name="id2606047"></a>
-<a class="indexterm" name="id2606054"></a>
+<a class="indexterm" name="id370513"></a>
+<a class="indexterm" name="id370520"></a>
+<a class="indexterm" name="id370527"></a>
+<a class="indexterm" name="id370534"></a>
 The implementation of an LDAP-based passdb backend (known as
 <span class="emphasis"><em>ldapsam</em></span> in Samba parlance), or some form of database
 that can be distributed, is essential to permit the deployment of Samba
@@ -96,8 +96,8 @@
 support the range of account facilities demanded by modern network
 managers.
 </p><p>
-<a class="indexterm" name="id2606093"></a>
-<a class="indexterm" name="id2606100"></a>
+<a class="indexterm" name="id370569"></a>
+<a class="indexterm" name="id370575"></a>
 The new <span class="emphasis"><em>tdbsam</em></span> facility supports functionality
 that is similar to an <span class="emphasis"><em>ldapsam</em></span>, but the lack of
 distributed infrastructure sorely limits the scope for its
@@ -105,10 +105,10 @@
 an XML-based backend, or for that matter, why not use an SQL-based
 backend? Is support for these tools broken? Answers to these
 questions require a bit of background.</p><p>
-<a class="indexterm" name="id2606123"></a>
-<a class="indexterm" name="id2606130"></a>
-<a class="indexterm" name="id2606137"></a>
-<a class="indexterm" name="id2606144"></a>
+<a class="indexterm" name="id370596"></a>
+<a class="indexterm" name="id370603"></a>
+<a class="indexterm" name="id370609"></a>
+<a class="indexterm" name="id370616"></a>
 <span class="emphasis"><em>What is a directory?</em></span> A directory is a
 collection of information regarding objects that can be accessed to
 rapidly find information that is relevant in a particular and
@@ -116,19 +116,19 @@
 generally more often searched (read) than updated. As a consequence, the
 information is organized to facilitate read access rather than to
 support transaction processing.</p><p>
-<a class="indexterm" name="id2606164"></a>
-<a class="indexterm" name="id2606174"></a>
-<a class="indexterm" name="id2606181"></a>
-<a class="indexterm" name="id2606188"></a>
+<a class="indexterm" name="id370633"></a>
+<a class="indexterm" name="id370642"></a>
+<a class="indexterm" name="id370649"></a>
+<a class="indexterm" name="id370656"></a>
 The Lightweight Directory Access Protocol (LDAP) differs
 considerably from a traditional database. It has a simple search
 facility that uniquely makes a highly preferred mechanism for managing
 user identities. LDAP provides a scalable mechanism for distributing
 the data repository and for keeping all copies (slaves) in sync with
 the master repository.</p><p>
-<a class="indexterm" name="id2606204"></a>
-<a class="indexterm" name="id2606210"></a>
-<a class="indexterm" name="id2606217"></a>
+<a class="indexterm" name="id370669"></a>
+<a class="indexterm" name="id370676"></a>
+<a class="indexterm" name="id370683"></a>
 Samba is a flexible and powerful file and print sharing
 technology. It can use many external authentication sources and can be
 part of a total authentication and identity management
@@ -136,7 +136,7 @@
 are Microsoft Active Directory and LDAP. Sites that specifically wish to
 avoid the proprietary implications of Microsoft Active Directory
 naturally gravitate toward OpenLDAP.</p><p>
-<a class="indexterm" name="id2606235"></a>
+<a class="indexterm" name="id370696"></a>
 In <a class="link" href="happy.html" title="Chapter 5. Making Happy Users">&#8220;Making Happy Users&#8221;</a>, you had to deal with a locally routed
 network. All deployment concerns focused around making users happy,
 and that simply means taking control over all network practices and
@@ -147,12 +147,12 @@
 between offices. You must take into account the way users need to
 access information globally. And you must make the network robust
 enough so that it can sustain partial breakdown without causing loss of
-productivity.</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2606266"></a>Technical Issues</h3></div></div></div><p>
+productivity.</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id370722"></a>Technical Issues</h3></div></div></div><p>
 	There are at least three areas that need to be addressed as you
 	approach the challenge of designing a network solution for the newly
 	expanded business:
-	</p><div class="itemizedlist"><ul type="disc"><li><p><a class="indexterm" name="id2606282"></a>
-		User needs such as mobility and data access</p></li><li><p>The nature of Windows networking protocols</p></li><li><p>Identity management infrastructure needs</p></li></ul></div><p>Let's look at each in turn.</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2606306"></a>User Needs</h4></div></div></div><p>
+	</p><div class="itemizedlist"><ul type="disc"><li><p><a class="indexterm" name="id370736"></a>
+		User needs such as mobility and data access</p></li><li><p>The nature of Windows networking protocols</p></li><li><p>Identity management infrastructure needs</p></li></ul></div><p>Let's look at each in turn.</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id370759"></a>User Needs</h4></div></div></div><p>
 	The new company has three divisions. Staff for each division are spread across
 	the company. Some staff are office-bound and some are mobile users. Mobile
 	users travel globally. Some spend considerable periods working in other offices.
@@ -163,7 +163,7 @@
 	curtail user needs. Parts of the global Internet infrastructure remain shielded
 	off for reasons outside the scope of this discussion.
 	</p><p>
-	<a class="indexterm" name="id2606330"></a>
+	<a class="indexterm" name="id370778"></a>
 	Decisions must be made regarding where data is to be stored, how it will be
 	replicated (if at all), and what the network bandwidth implications are. For
 	example, one decision that can be made is to give each office its own master
@@ -174,8 +174,8 @@
 	This way, they can synchronize all files that have changed since each logon
 	to the network.
 	</p><p>
-	<a class="indexterm" name="id2606357"></a>
-	<a class="indexterm" name="id2606366"></a>
+	<a class="indexterm" name="id370799"></a>
+	<a class="indexterm" name="id370808"></a>
 	No matter which way you look at this, the bandwidth requirements
 	for acceptable performance are substantial even if only 10 percent of
 	staff are global data users. A company with 3,500 employees,
@@ -188,11 +188,11 @@
 	profile involves a transfer of over 750 KB from the profile
 	server to and from the client.
 	</p><p>
-	<a class="indexterm" name="id2606387"></a>
+	<a class="indexterm" name="id370824"></a>
 	Obviously then, user needs and wide-area practicalities dictate the economic and
 	technical aspects of your network design as well as for standard operating procedures.
-	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2606399"></a>The Nature of Windows Networking Protocols</h4></div></div></div><p>
-	<a class="indexterm" name="id2606408"></a>
+	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id370835"></a>The Nature of Windows Networking Protocols</h4></div></div></div><p>
+	<a class="indexterm" name="id370843"></a>
 	Network logons that include roaming profile handling requires from 140 KB to 2 MB.
 	The inclusion of support for a minimal set of common desktop applications can push
 	the size of a complete profile to over 15 MB. This has substantial implications
@@ -200,8 +200,8 @@
 	determining the nature and style of mandatory profiles that may be enforced as
 	part of a total service-level assurance program that might be implemented.
 	</p><p>
-	<a class="indexterm" name="id2606428"></a>
-	<a class="indexterm" name="id2606435"></a>
+	<a class="indexterm" name="id370859"></a>
+	<a class="indexterm" name="id370866"></a>
 	One way to reduce the network bandwidth impact of user logon
 	traffic is through folder redirection. In <a class="link" href="happy.html" title="Chapter 5. Making Happy Users">&#8220;Making Happy Users&#8221;</a>, you
 	implemented this in the new Windows XP Professional standard
@@ -210,14 +210,14 @@
 	also be excluded from synchronization to and from the server on
 	logon or logout. Redirected folders are analogous to network drive
 	connections.
-	</p><p><a class="indexterm" name="id2606463"></a>
+	</p><p><a class="indexterm" name="id370890"></a>
 	Of course, network applications should only be run off
 	local application servers. As a general rule, even with 2 Mb/sec
 	network bandwidth, it would not make sense at all for someone who
 	is working out of the London office to run applications off a
 	server that is located in New York.
 	</p><p>
-	<a class="indexterm" name="id2606478"></a>
+	<a class="indexterm" name="id370903"></a>
 	When network bandwidth becomes a precious commodity (that is most
 	of the time), there is a significant demand to understand network
 	processes and to mold the limits of acceptability around the
@@ -226,15 +226,15 @@
 	When a Windows NT4/200x/XP Professional client user logs onto
 	the network, several important things must happen.
 	</p><div class="itemizedlist"><ul type="disc"><li><p>
-		<a class="indexterm" name="id2606501"></a>
+		<a class="indexterm" name="id370922"></a>
 		The client obtains an IP address via DHCP. (DHCP is
 		necessary so that users can roam between offices.)
 		</p></li><li><p>
-		<a class="indexterm" name="id2606514"></a>
-		<a class="indexterm" name="id2606520"></a>
+		<a class="indexterm" name="id370934"></a>
+		<a class="indexterm" name="id370941"></a>
 		The client must register itself with the WINS and/or DNS server.
 		</p></li><li><p>
-		<a class="indexterm" name="id2606533"></a>
+		<a class="indexterm" name="id370952"></a>
 		The client must locate the closest domain controller.
 		</p></li><li><p>
 		The client must log onto a domain controller and obtain as part of
@@ -256,15 +256,15 @@
 	name both by broadcast and Unicast registration that is directed
 	at the WINS server.
 	</p><p>
-	<a class="indexterm" name="id2606580"></a>
-	<a class="indexterm" name="id2606586"></a><a class="indexterm" name="id2606596"></a>
+	<a class="indexterm" name="id370990"></a>
+	<a class="indexterm" name="id370997"></a><a class="indexterm" name="id371006"></a>
 	Given that the client is already a domain member, it then sends
 	a directed (Unicast) request to the WINS server seeking the list of
 	IP addresses for domain controllers (NetBIOS name type 0x1C). The
 	WINS server replies with the information requested.</p><p>
-	<a class="indexterm" name="id2606610"></a>
-	<a class="indexterm" name="id2606619"></a>
-	<a class="indexterm" name="id2606626"></a>
+	<a class="indexterm" name="id371019"></a>
+	<a class="indexterm" name="id371028"></a>
+	<a class="indexterm" name="id371035"></a>
 	The client sends two netlogon mailslot broadcast requests
 	to the local network and to each of the IP addresses returned by
 	the WINS server. Whichever answers this request first appears to
@@ -274,9 +274,9 @@
 	was listed in the WINS server response to a request for the list of
 	domain controllers.
 	</p><p>
-	<a class="indexterm" name="id2606652"></a>
-	<a class="indexterm" name="id2606661"></a>
-	<a class="indexterm" name="id2606668"></a>
+	<a class="indexterm" name="id371053"></a>
+	<a class="indexterm" name="id371062"></a>
+	<a class="indexterm" name="id371069"></a>
 	The logon process begins with negotiation of the SMB/CIFS
 	protocols that are to be used; this is followed by an exchange of
 	information that ultimately includes the client sending the
@@ -287,10 +287,10 @@
 	needs. A secondary fact we need to know is, what happens when
 	local domain controllers fail or break?
 	</p><p>
-	<a class="indexterm" name="id2606688"></a>
-	<a class="indexterm" name="id2606695"></a>
-	<a class="indexterm" name="id2606701"></a>
-	<a class="indexterm" name="id2606708"></a>
+	<a class="indexterm" name="id371084"></a>
+	<a class="indexterm" name="id371090"></a>
+	<a class="indexterm" name="id371097"></a>
+	<a class="indexterm" name="id371104"></a>
 	Under most circumstances, the nearest domain controller
 	responds to the netlogon mailslot broadcast. The exception to this
 	norm occurs when the nearest domain controller is too busy or is out
@@ -299,18 +299,18 @@
 	domain controllers. Since there can be only one PDC, all additional
 	domain controllers are by definition BDCs.
 	</p><p>
-	<a class="indexterm" name="id2606725"></a>
-	<a class="indexterm" name="id2606732"></a>
+	<a class="indexterm" name="id371117"></a>
+	<a class="indexterm" name="id371124"></a>
 	The provision of sufficient servers that are BDCs is an
 	important design factor. The second important design factor
 	involves how each of the BDCs obtains user authentication
 	data. That is the subject of the next section, which involves key
 	decisions regarding Identity Management facilities.
-	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2606746"></a>Identity Management Needs</h4></div></div></div><p>
-	<a class="indexterm" name="id2606754"></a>
-	<a class="indexterm" name="id2606761"></a>
-	<a class="indexterm" name="id2606768"></a>
-	<a class="indexterm" name="id2606775"></a>
+	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id371136"></a>Identity Management Needs</h4></div></div></div><p>
+	<a class="indexterm" name="id371144"></a>
+	<a class="indexterm" name="id371150"></a>
+	<a class="indexterm" name="id371157"></a>
+	<a class="indexterm" name="id371164"></a>
 	Network managers recognize that in large organizations users
 	generally need to be given resource access based on needs, while
 	being excluded from other resources for reasons of privacy. It is
@@ -319,9 +319,9 @@
 	by which user credentials are validated and filtered and appropriate
 	rights and privileges are allocated.
 	</p><p>
-	<a class="indexterm" name="id2606792"></a>
-	<a class="indexterm" name="id2606799"></a>
-	<a class="indexterm" name="id2606806"></a>
+	<a class="indexterm" name="id371178"></a>
+	<a class="indexterm" name="id371184"></a>
+	<a class="indexterm" name="id371191"></a>
 	Unfortunately, network resources tend to have their own Identity 
 	Management facilities, the quality and manageability of which varies 
 	from quite poor to exceptionally good. Corporations that use a mixture 
@@ -333,7 +333,7 @@
 	What was once called <code class="constant">Yellow Pages</code> is today known 
 	as <code class="constant">Network Information System</code> (NIS).
 	</p><p>
-	<a class="indexterm" name="id2606837"></a>
+	<a class="indexterm" name="id371217"></a>
 	NIS gained a strong following throughout the UNIX/VMS space in a short
 	period of time and retained that appeal and use for over a decade.
 	Security concerns and inherent limitations have caused it to enter its
@@ -343,9 +343,9 @@
 	demands as the demand for directory services that can be coupled with
 	other information systems is catching on.
 	</p><p>
-	<a class="indexterm" name="id2606856"></a>
-	<a class="indexterm" name="id2606862"></a>
-	<a class="indexterm" name="id2606869"></a>
+	<a class="indexterm" name="id371232"></a>
+	<a class="indexterm" name="id371238"></a>
+	<a class="indexterm" name="id371245"></a>
 	Nevertheless, both NIS and NIS+ continue to hold ground in
 	business areas where UNIX still has major sway. Examples of
 	organizations that remain firmly attached to the use of NIS and
@@ -353,14 +353,14 @@
 	and large corporations that have a scientific or engineering
 	focus.
 	</p><p>
-	<a class="indexterm" name="id2606885"></a>
-	<a class="indexterm" name="id2606891"></a>
+	<a class="indexterm" name="id371258"></a>
+	<a class="indexterm" name="id371264"></a>
 	Today's networking world needs a scalable, distributed Identity 
 	Management infrastructure, commonly called a directory. The most 
 	popular technologies today are Microsoft Active Directory service 
 	and a number of LDAP implementations.
 	</p><p>
-	<a class="indexterm" name="id2606906"></a>
+	<a class="indexterm" name="id371277"></a>
 	The problem of managing multiple directories has become a focal
 	point over the past decade, creating a large market for
 	metadirectory products and services that allow organizations that
@@ -369,15 +369,15 @@
 	another. The attendant benefit to end users is the promise of
 	having to remember and deal with fewer login identities and
 	passwords.</p><p>
-	<a class="indexterm" name="id2606923"></a>
+	<a class="indexterm" name="id371290"></a>
 	The challenge of every large network is to find the optimum
 	balance of internal systems and facilities for Identity
 	Management resources. How well the solution is chosen and
 	implemented has potentially significant impact on network bandwidth
 	and systems response needs.</p><p>
-	<a class="indexterm" name="id2606940"></a>
-	<a class="indexterm" name="id2606947"></a>
-	<a class="indexterm" name="id2606956"></a>
+	<a class="indexterm" name="id371305"></a>
+	<a class="indexterm" name="id371312"></a>
+	<a class="indexterm" name="id371321"></a>
 	In <a class="link" href="happy.html" title="Chapter 5. Making Happy Users">&#8220;Making Happy Users&#8221;</a>, you implemented a single LDAP server for the
 	entire network. This may work for smaller networks, but almost
 	certainly fails to meet the needs of large and complex networks. The
@@ -386,8 +386,8 @@
 	What is the best method for implementing master/slave LDAP
 	servers within the context of a distributed 2,000-user network is a
 	question that remains to be answered.</p><p>
-	<a class="indexterm" name="id2606986"></a>
-	<a class="indexterm" name="id2606992"></a>
+	<a class="indexterm" name="id371347"></a>
+	<a class="indexterm" name="id371353"></a>
 	One possibility that has great appeal is to create a single,
 	large distributed domain. The practical implications of this
 	design (see <a class="link" href="2000users.html#chap7net" title="Figure 6.6. Network Topology 2000 User Complex Design A">&#8220;Network Topology  2000 User Complex Design A&#8221;</a>) demands the placement of
@@ -398,7 +398,7 @@
 	productivity against the cost of network management and
 	maintenance.
 	</p><p>
-	<a class="indexterm" name="id2607017"></a>
+	<a class="indexterm" name="id371374"></a>
 	The network design in <a class="link" href="2000users.html#chap7net2" title="Figure 6.7. Network Topology 2000 User Complex Design B">&#8220;Network Topology  2000 User Complex Design B&#8221;</a> takes the approach
 	that management of networks that are too remote to be managed
 	effectively from New York ought to be given a certain degree of
@@ -409,22 +409,22 @@
 	the ability for network users to roam globally without some compromise
 	in how they may access global resources.
 	</p><p>
-	<a class="indexterm" name="id2607043"></a>
+	<a class="indexterm" name="id371395"></a>
 	Desk-bound users need not be negatively affected by this design, since
 	the use of interdomain trusts can be used to satisfy the need for global
 	data sharing.
 	</p><p>
-	<a class="indexterm" name="id2607056"></a>
-	<a class="indexterm" name="id2607063"></a>
-	<a class="indexterm" name="id2607072"></a>
+	<a class="indexterm" name="id371406"></a>
+	<a class="indexterm" name="id371413"></a>
+	<a class="indexterm" name="id371422"></a>
 	When Samba-3 is configured to use an LDAP backend, it stores the domain
 	account information in a directory entry. This account entry contains the
 	domain SID. An unintended but exploitable side effect is that this makes it
 	possible to operate with more than one PDC on a distributed network.
 	</p><p>
-	<a class="indexterm" name="id2607087"></a>
-	<a class="indexterm" name="id2607093"></a>
-	<a class="indexterm" name="id2607100"></a>
+	<a class="indexterm" name="id371435"></a>
+	<a class="indexterm" name="id371441"></a>
+	<a class="indexterm" name="id371448"></a>
 	How might this peculiar feature be exploited? The answer is simple. It is
 	imperative that each network segment have its own WINS server. Major
 	servers on remote network segments can be given a static WINS entry in
@@ -434,8 +434,8 @@
 	same domain SID. Since all domain account information can be stored in a
 	single LDAP backend, users have unfettered ability to roam.
 	</p><p>
-	<a class="indexterm" name="id2607125"></a>
-	<a class="indexterm" name="id2607134"></a>
+	<a class="indexterm" name="id371468"></a>
+	<a class="indexterm" name="id371478"></a>
 	This concept has not been exhaustively validated, though we can see no reason
 	why this should not work. The important facets are the following: The name of
 	the domain must be identical in all locations. Each network segment must have
@@ -446,10 +446,10 @@
 	on every network segment. Finally, the BDCs should each use failover LDAP servers
 	that are in fact slave LDAP servers on the local segments.
 	</p><p>
-	<a class="indexterm" name="id2607156"></a>
-	<a class="indexterm" name="id2607166"></a>
-	<a class="indexterm" name="id2607172"></a>
-	<a class="indexterm" name="id2607182"></a>
+	<a class="indexterm" name="id371494"></a>
+	<a class="indexterm" name="id371503"></a>
+	<a class="indexterm" name="id371510"></a>
+	<a class="indexterm" name="id371519"></a>
 	With a single master LDAP server, all network updates are effected on a single
 	server. In the event that this should become excessively fragile or network
 	bandwidth limiting, one could implement a delegated LDAP domain. This is also
@@ -463,7 +463,7 @@
 	administrators must of necessity follow the same standard
 	procedures for managing the directory, because retroactive correction of
 	inconsistent directory information can be exceedingly difficult.
-	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2607210"></a>Political Issues</h3></div></div></div><p>
+	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id371541"></a>Political Issues</h3></div></div></div><p>
 	As organizations grow, the number of points of control increases
 	also. In a large distributed organization, it is important that the
 	Identity Management system be capable of being updated from
@@ -471,11 +471,11 @@
 	become usable in a reasonable period, typically
 	minutes rather than days (the old limitation of highly manual
 	systems).
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2607228"></a>Implementation</h2></div></div></div><p>
-	<a class="indexterm" name="id2607236"></a>
-	<a class="indexterm" name="id2607243"></a>
-	<a class="indexterm" name="id2607250"></a>
-	<a class="indexterm" name="id2607256"></a>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id371556"></a>Implementation</h2></div></div></div><p>
+	<a class="indexterm" name="id371563"></a>
+	<a class="indexterm" name="id371570"></a>
+	<a class="indexterm" name="id371577"></a>
+	<a class="indexterm" name="id371583"></a>
 	Samba-3 has the ability to use multiple password (authentication and
 	identity resolution) backends. The diagram in <a class="link" href="2000users.html#chap7idres" title="Figure 6.1. Samba and Authentication Backend Search Pathways">&#8220;Samba and Authentication Backend Search Pathways&#8221;</a>
 	demonstrates how Samba uses winbind, LDAP, and NIS, the traditional system
@@ -483,13 +483,13 @@
 	authentication and identity resolution (obtaining a UNIX UID/GID)
 	using the specific systems shown.
 	</p><div class="figure"><a name="chap7idres"></a><p class="title"><b>Figure 6.1. Samba and Authentication Backend Search Pathways</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/chap7-idresol.png" width="297" alt="Samba and Authentication Backend Search Pathways"></div></div></div><br class="figure-break"><p>
-	<a class="indexterm" name="id2607320"></a>
-	<a class="indexterm" name="id2607327"></a>
-	<a class="indexterm" name="id2607333"></a>
-	<a class="indexterm" name="id2607340"></a>
-	<a class="indexterm" name="id2607347"></a>
-	<a class="indexterm" name="id2607354"></a>
-	<a class="indexterm" name="id2607361"></a>
+	<a class="indexterm" name="id371643"></a>
+	<a class="indexterm" name="id371650"></a>
+	<a class="indexterm" name="id371656"></a>
+	<a class="indexterm" name="id371663"></a>
+	<a class="indexterm" name="id371670"></a>
+	<a class="indexterm" name="id371677"></a>
+	<a class="indexterm" name="id371684"></a>
 	Samba is capable of using the <code class="constant">smbpasswd</code>,
 	<code class="constant">tdbsam</code>, <code class="constant">xmlsam</code>,
 	and <code class="constant">mysqlsam</code> authentication databases. The SMB
@@ -497,7 +497,7 @@
 	backend. LDAP is the preferred passdb backend for distributed network
 	operations.
 	</p><p>
-	<a class="indexterm" name="id2607389"></a>
+	<a class="indexterm" name="id371710"></a>
 	Additionally, it is possible to use multiple passdb backends
 	concurrently as well as have multiple LDAP backends. As a result, you
 	can specify a failover LDAP backend. The syntax for specifying a
@@ -509,8 +509,8 @@
 </pre><p>
 	This configuration tells Samba to use a single LDAP server, as shown in <a class="link" href="2000users.html#ch7singleLDAP" title="Figure 6.2. Samba Configuration to Use a Single LDAP Server">&#8220;Samba Configuration to Use a Single LDAP Server&#8221;</a>.
 	</p><div class="figure"><a name="ch7singleLDAP"></a><p class="title"><b>Figure 6.2. Samba Configuration to Use a Single LDAP Server</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/ch7-singleLDAP.png" width="351" alt="Samba Configuration to Use a Single LDAP Server"></div></div></div><p><br class="figure-break">
-	<a class="indexterm" name="id2607462"></a>
-	<a class="indexterm" name="id2607471"></a>
+	<a class="indexterm" name="id371778"></a>
+	<a class="indexterm" name="id371787"></a>
 	The addition of a failover LDAP server can simply be done by adding a
 	second entry for the failover server to the single <em class="parameter"><code>ldapsam</code></em>
 	entry, as shown here (note the particular use of the double quotes):
@@ -532,7 +532,7 @@
                  ldapsam:ldap://slave.abmas.biz
 ...
 </pre><p>
-	<a class="indexterm" name="id2607558"></a>
+	<a class="indexterm" name="id371867"></a>
 	The effect of this style of entry is that Samba lists the users
 	that are in both LDAP databases. If both contain the same information,
 	it results in each record being shown twice. This is, of course, not the
@@ -553,9 +553,9 @@
 	It is assumed that the network you are working with follows in a
 	pattern similar to what was covered in <a class="link" href="happy.html" title="Chapter 5. Making Happy Users">&#8220;Making Happy Users&#8221;</a>. The following steps
     permit the operation of a master/slave OpenLDAP arrangement.
-	</p><div class="procedure"><a name="id2607700"></a><p class="title"><b>Procedure 6.1. Implementation Steps for an LDAP Slave Server</b></p><ol type="1"><li><p>
-	    <a class="indexterm" name="id2607711"></a>
-		<a class="indexterm" name="id2607718"></a>
+	</p><div class="procedure"><a name="id371997"></a><p class="title"><b>Procedure 6.1. Implementation Steps for an LDAP Slave Server</b></p><ol type="1"><li><p>
+	    <a class="indexterm" name="id372008"></a>
+		<a class="indexterm" name="id372014"></a>
 		Log onto the master LDAP server as <code class="constant">root</code>.
 		You are about to change the configuration of the LDAP server, so it
 		makes sense to temporarily halt it. Stop OpenLDAP from running on 
@@ -568,7 +568,7 @@
 <code class="prompt">root# </code> service ldap stop
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2607763"></a>
+		<a class="indexterm" name="id372057"></a>
 		Edit the <code class="filename">/etc/openldap/slapd.conf</code> file so it
 		matches the content of <a class="link" href="2000users.html#ch7-LDAP-master" title="Example 6.1. LDAP Master Server Configuration File /etc/openldap/slapd.conf">&#8220;LDAP Master Server Configuration File  /etc/openldap/slapd.conf&#8221;</a>.
 		</p></li><li><p>
@@ -592,8 +592,8 @@
 <code class="prompt">root# </code> slapadd -v -l admin-accts.ldif
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2607837"></a>
-		<a class="indexterm" name="id2607844"></a>
+		<a class="indexterm" name="id372126"></a>
+		<a class="indexterm" name="id372133"></a>
 		Change directory to a suitable place to dump the contents of the
 		LDAP server. The dump file (and LDIF file) is used to preload
 		the slave LDAP server database. You can dump the database by executing:
@@ -602,7 +602,7 @@
 </pre><p>
 		Each record is written to the file.	
 		</p></li><li><p>
-		<a class="indexterm" name="id2607876"></a>
+		<a class="indexterm" name="id372163"></a>
 		Copy the file <code class="filename">LDAP-transfer-LDIF.txt</code> to the intended
 		slave LDAP server. A good location could be in the directory 
 		<code class="filename">/etc/openldap/preload</code>.
@@ -652,9 +652,9 @@
 <code class="prompt">root# </code> chkconfig ldap on
 </pre><p>
 		</p></li><li><p>
-	    <a class="indexterm" name="id2608049"></a>
-		<a class="indexterm" name="id2608056"></a>
-		<a class="indexterm" name="id2608063"></a>
+	    <a class="indexterm" name="id372310"></a>
+		<a class="indexterm" name="id372317"></a>
+		<a class="indexterm" name="id372324"></a>
 		Go back to the master LDAP server. Execute the following to start LDAP as well
 		as <code class="literal">slurpd</code>, the synchronization daemon, as shown here:
 </p><pre class="screen">
@@ -663,10 +663,10 @@
 <code class="prompt">root# </code> rcslurpd start
 <code class="prompt">root# </code> chkconfig slurpd on
 </pre><p>
-	    <a class="indexterm" name="id2608108"></a>
+	    <a class="indexterm" name="id372367"></a>
 		On Red Hat Linux, check the equivalent command to start <code class="literal">slurpd</code>.
 		</p></li><li><p>
-		<a class="indexterm" name="id2608128"></a>
+		<a class="indexterm" name="id372387"></a>
 		On the master LDAP server you may now add an account to validate that replication
 		is working. Assuming the configuration shown in <a class="link" href="happy.html" title="Chapter 5. Making Happy Users">&#8220;Making Happy Users&#8221;</a>, execute:
 </p><pre class="screen">
@@ -791,12 +791,12 @@
 index sambaPrimaryGroupSID  eq
 index sambaDomainName       eq
 index default               sub
-</pre></div></div><br class="example-break"><div class="example"><a name="ch7-massmbconfA"></a><p class="title"><b>Example 6.3. Primary Domain Controller <code class="filename">smb.conf</code> File  Part A</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2608393"></a><em class="parameter"><code>unix charset = LOCALE</code></em></td></tr><tr><td><a class="indexterm" name="id2608404"></a><em class="parameter"><code>workgroup = MEGANET2</code></em></td></tr><tr><td><a class="indexterm" name="id2608416"></a><em class="parameter"><code>passdb backend = ldapsam:ldap://massive.abmas.biz</code></em></td></tr><tr><td><a class="indexterm" name="id2608428"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id2608440"></a><em class="parameter"><code>log level = 1</code></em></td></tr><tr><td><a class="indexterm" name="id2608452"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id2608464"></a><em class="parameter"><code>log file = /var/log/samba/%m</code></em></td></tr><tr><td><a class="indexterm" name="id2608475"></a><em class="parameter"><code>max log size = 0</code></em></td></tr><tr><td><a class="indexterm" name="id2608487"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id2608499"></a><em class="parameter"><code>name resolve order = wins bcast hosts</code></em></td></tr><tr><td><a class="indexterm" name="id2608511"></a><em class="parameter"><code>time server = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2608522"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id2608534"></a><em class="parameter"><code>add user script = /opt/IDEALX/sbin/smbldap-useradd -m '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2608547"></a><em class="parameter"><code>delete user script = /opt/IDEALX/sbin/smbldap-userdel '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2608559"></a><em class="parameter"><code>add group script = /opt/IDEALX/sbin/smbldap-groupadd -p '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id2608572"></a><em class="parameter"><code>delete group script = /opt/IDEALX/sbin/smbldap-groupdel '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id2608584"></a><em class="parameter"><code>add user to group script = /opt/IDEALX/sbin/smbldap-groupmod -m '%g' '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2608597"></a><em class="parameter"><code>delete user from group script = /opt/IDEALX/sbin/smbldap-groupmod -x '%g' '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2608610"></a><em class="parameter"><code>set primary group script = /opt/IDEALX/sbin/smbldap-usermod -g '%g' '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2608623"></a><em class="parameter"><code>add machine script = /opt/IDEALX/sbin/smbldap-useradd -w '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2608635"></a><em class="parameter"><code>shutdown script = /var/lib/samba/scripts/shutdown.sh</code></em></td></tr><tr><td><a class="indexterm" name="id2608648"></a><em class="parameter"><code>abort shutdown script = /sbin/shutdown -c</code></em></td></tr><tr><td><a class="indexterm" name="id2608660"></a><em class="parameter"><code>logon script = scripts\logon.bat</code></em></td></tr><tr><td><a class="indexterm" name="id2608672"></a><em class="parameter"><code>logon path = \\%L\profiles\%U</code></em></td></tr><tr><td><a class="indexterm" name="id2608684"></a><em class="parameter"><code>logon drive = X:</code></em></td></tr><tr><td><a class="indexterm" name="id2608696"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2608707"></a><em class="parameter"><code>domain master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2608719"></a><em class="parameter"><code>wins support = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2608731"></a><em class="parameter"><code>ldap suffix = dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id2608743"></a><em class="parameter"><code>ldap machine suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2608755"></a><em class="parameter"><code>ldap user suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2608767"></a><em class="parameter"><code>ldap group suffix = ou=Groups</code></em></td></tr><tr><td><a class="indexterm" name="id2608779"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr><tr><td><a class="indexterm" name="id2608791"></a><em class="parameter"><code>ldap admin dn = cn=sambaadmin,dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id2608803"></a><em class="parameter"><code>idmap backend = ldap://massive.abmas.biz</code></em></td></tr><tr><td><a class="indexterm" name="id2608815"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2608827"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2608838"></a><em class="parameter"><code>printer admin = root</code></em></td></tr><tr><td><a class="indexterm" name="id2608850"></a><em class="parameter"><code>printing = cups</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch7-massmbconfB"></a><p class="title"><b>Example 6.4. Primary Domain Controller <code class="filename">smb.conf</code> File  Part B</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[IPC$]</code></em></td></tr><tr><td><a class="indexterm" name="id2608896"></a><em class="parameter"><code>path = /tmp</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[accounts]</code></em></td></tr><tr><td><a class="indexterm" name="id2608916"></a><em class="parameter"><code>comment = Accounting Files</code></em></td></tr><tr><td><a class="indexterm" name="id2608928"></a><em class="parameter"><code>path = /data/accounts</code></em></td></tr><tr><td><a class="indexterm" name="id2608940"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[service]</code></em></td></tr><tr><td><a class="indexterm" name="id2608960"></a><em class="parameter"><code>comment = Financial Services Files</code></em></td></tr><tr><td><a class="indexterm" name="id2608972"></a><em class="parameter"><code>path = /data/service</code></em></td></tr><tr><td><a class="indexterm" name="id2608983"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[pidata]</code></em></td></tr><tr><td><a class="indexterm" name="id2609004"></a><em class="parameter"><code>comment = Property Insurance Files</code></em></td></tr><tr><td><a class="indexterm" name="id2609016"></a><em class="parameter"><code>path = /data/pidata</code></em></td></tr><tr><td><a class="indexterm" name="id2609027"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id2609048"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id2609060"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id2609071"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2609083"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2609103"></a><em class="parameter"><code>comment = SMB Print Spool</code></em></td></tr><tr><td><a class="indexterm" name="id2609115"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2609127"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2609138"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2609150"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch7-massmbconfC"></a><p class="title"><b>Example 6.5. Primary Domain Controller <code class="filename">smb.conf</code> File  Part C</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[apps]</code></em></td></tr><tr><td><a class="indexterm" name="id2609196"></a><em class="parameter"><code>comment = Application Files</code></em></td></tr><tr><td><a class="indexterm" name="id2609208"></a><em class="parameter"><code>path = /apps</code></em></td></tr><tr><td><a class="indexterm" name="id2609219"></a><em class="parameter"><code>admin users = bjones</code></em></td></tr><tr><td><a class="indexterm" name="id2609231"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id2609251"></a><em class="parameter"><code>comment = Network Logon Service</code></em></td></tr><tr><td><a class="indexterm" name="id2609263"></a><em class="parameter"><code>path = /var/lib/samba/netlogon</code></em></td></tr><tr><td><a class="indexterm" name="id2609275"></a><em class="parameter"><code>admin users = root, Administrator</code></em></td></tr><tr><td><a class="indexterm" name="id2609287"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2609298"></a><em class="parameter"><code>locking = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[profiles]</code></em></td></tr><tr><td><a class="indexterm" name="id2609319"></a><em class="parameter"><code>comment = Profile Share</code></em></td></tr><tr><td><a class="indexterm" name="id2609331"></a><em class="parameter"><code>path = /var/lib/samba/profiles</code></em></td></tr><tr><td><a class="indexterm" name="id2609342"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2609354"></a><em class="parameter"><code>profile acls = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[profdata]</code></em></td></tr><tr><td><a class="indexterm" name="id2609375"></a><em class="parameter"><code>comment = Profile Data Share</code></em></td></tr><tr><td><a class="indexterm" name="id2609387"></a><em class="parameter"><code>path = /var/lib/samba/profdata</code></em></td></tr><tr><td><a class="indexterm" name="id2609398"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2609410"></a><em class="parameter"><code>profile acls = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[print$]</code></em></td></tr><tr><td><a class="indexterm" name="id2609431"></a><em class="parameter"><code>comment = Printer Drivers</code></em></td></tr><tr><td><a class="indexterm" name="id2609442"></a><em class="parameter"><code>path = /var/lib/samba/drivers</code></em></td></tr><tr><td><a class="indexterm" name="id2609454"></a><em class="parameter"><code>write list = root</code></em></td></tr><tr><td><a class="indexterm" name="id2609466"></a><em class="parameter"><code>admin users = root, Administrator</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch7-slvsmbocnfA"></a><p class="title"><b>Example 6.6. Backup Domain Controller <code class="filename">smb.conf</code> File  Part A</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># # Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2609515"></a><em class="parameter"><code>unix charset = LOCALE</code></em></td></tr><tr><td><a class="indexterm" name="id2609527"></a><em class="parameter"><code>workgroup = MEGANET2</code></em></td></tr><tr><td><a class="indexterm" name="id2609539"></a><em class="parameter"><code>netbios name = BLDG1</code></em></td></tr><tr><td><a class="indexterm" name="id2609550"></a><em class="parameter"><code>passdb backend = ldapsam:ldap://lapdc.abmas.biz</code></em></td></tr><tr><td><a class="indexterm" name="id2609563"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id2609575"></a><em class="parameter"><code>log level = 1</code></em></td></tr><tr><td><a class="indexterm" name="id2609586"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id2609598"></a><em class="parameter"><code>log file = /var/log/samba/%m</code></em></td></tr><tr><td><a class="indexterm" name="id2609610"></a><em class="parameter"><code>max log size = 50</code></em></td></tr><tr><td><a class="indexterm" name="id2609621"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id2609633"></a><em class="parameter"><code>name resolve order = wins bcast hosts</code></em></td></tr><tr><td><a class="indexterm" name="id2609645"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id2609657"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id2609669"></a><em class="parameter"><code>logon script = scripts\logon.bat</code></em></td></tr><tr><td><a class="indexterm" name="id2609681"></a><em class="parameter"><code>logon path = \\%L\profiles\%U</code></em></td></tr><tr><td><a class="indexterm" name="id2609693"></a><em class="parameter"><code>logon drive = X:</code></em></td></tr><tr><td><a class="indexterm" name="id2609705"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2609716"></a><em class="parameter"><code>os level = 63</code></em></td></tr><tr><td><a class="indexterm" name="id2609728"></a><em class="parameter"><code>domain master = No</code></em></td></tr><tr><td><a class="indexterm" name="id2609740"></a><em class="parameter"><code>wins server = 192.168.2.1</code></em></td></tr><tr><td><a class="indexterm" name="id2609751"></a><em class="parameter"><code>ldap suffix = dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id2609763"></a><em class="parameter"><code>ldap machine suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2609775"></a><em class="parameter"><code>ldap user suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2609787"></a><em class="parameter"><code>ldap group suffix = ou=Groups</code></em></td></tr><tr><td><a class="indexterm" name="id2609799"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr><tr><td><a class="indexterm" name="id2609811"></a><em class="parameter"><code>ldap admin dn = cn=sambaadmin,dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id2609824"></a><em class="parameter"><code>utmp = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2609835"></a><em class="parameter"><code>idmap backend = ldap://massive.abmas.biz</code></em></td></tr><tr><td><a class="indexterm" name="id2609847"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2609859"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2609871"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[accounts]</code></em></td></tr><tr><td><a class="indexterm" name="id2609891"></a><em class="parameter"><code>comment = Accounting Files</code></em></td></tr><tr><td><a class="indexterm" name="id2609903"></a><em class="parameter"><code>path = /data/accounts</code></em></td></tr><tr><td><a class="indexterm" name="id2609915"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[service]</code></em></td></tr><tr><td><a class="indexterm" name="id2609935"></a><em class="parameter"><code>comment = Financial Services Files</code></em></td></tr><tr><td><a class="indexterm" name="id2609947"></a><em class="parameter"><code>path = /data/service</code></em></td></tr><tr><td><a class="indexterm" name="id2609959"></a><em class="parameter"><code>read only = No</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch7-slvsmbocnfB"></a><p class="title"><b>Example 6.7. Backup Domain Controller <code class="filename">smb.conf</code> File  Part B</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[pidata]</code></em></td></tr><tr><td><a class="indexterm" name="id2610005"></a><em class="parameter"><code>comment = Property Insurance Files</code></em></td></tr><tr><td><a class="indexterm" name="id2610016"></a><em class="parameter"><code>path = /data/pidata</code></em></td></tr><tr><td><a class="indexterm" name="id2610028"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id2610048"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id2610060"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id2610072"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2610083"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2610104"></a><em class="parameter"><code>comment = SMB Print Spool</code></em></td></tr><tr><td><a class="indexterm" name="id2610115"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2610127"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2610139"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2610150"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[apps]</code></em></td></tr><tr><td><a class="indexterm" name="id2610171"></a><em class="parameter"><code>comment = Application Files</code></em></td></tr><tr><td><a class="indexterm" name="id2610183"></a><em class="parameter"><code>path = /apps</code></em></td></tr><tr><td><a class="indexterm" name="id2610194"></a><em class="parameter"><code>admin users = bjones</code></em></td></tr><tr><td><a class="indexterm" name="id2610206"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id2610226"></a><em class="parameter"><code>comment = Network Logon Service</code></em></td></tr><tr><td><a class="indexterm" name="id2610238"></a><em class="parameter"><code>path = /var/lib/samba/netlogon</code></em></td></tr><tr><td><a class="indexterm" name="id2610250"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2610262"></a><em class="parameter"><code>locking = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[profiles]</code></em></td></tr><tr><td><a class="indexterm" name="id2610282"></a><em class="parameter"><code>comment = Profile Share</code></em></td></tr><tr><td><a class="indexterm" name="id2610294"></a><em class="parameter"><code>path = /var/lib/samba/profiles</code></em></td></tr><tr><td><a class="indexterm" name="id2610306"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2610318"></a><em class="parameter"><code>profile acls = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[profdata]</code></em></td></tr><tr><td><a class="indexterm" name="id2610338"></a><em class="parameter"><code>comment = Profile Data Share</code></em></td></tr><tr><td><a class="indexterm" name="id2610350"></a><em class="parameter"><code>path = /var/lib/samba/profdata</code></em></td></tr><tr><td><a class="indexterm" name="id2610362"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2610374"></a><em class="parameter"><code>profile acls = Yes</code></em></td></tr></table></div></div><br class="example-break"><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2610386"></a>Key Points Learned</h3></div></div></div><div class="itemizedlist"><ul type="disc"><li><p>
-			<a class="indexterm" name="id2610397"></a><a class="indexterm" name="id2610403"></a>
+</pre></div></div><br class="example-break"><div class="example"><a name="ch7-massmbconfA"></a><p class="title"><b>Example 6.3. Primary Domain Controller <code class="filename">smb.conf</code> File  Part A</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id372617"></a><em class="parameter"><code>unix charset = LOCALE</code></em></td></tr><tr><td><a class="indexterm" name="id372629"></a><em class="parameter"><code>workgroup = MEGANET2</code></em></td></tr><tr><td><a class="indexterm" name="id372640"></a><em class="parameter"><code>passdb backend = ldapsam:ldap://massive.abmas.biz</code></em></td></tr><tr><td><a class="indexterm" name="id372652"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id372663"></a><em class="parameter"><code>log level = 1</code></em></td></tr><tr><td><a class="indexterm" name="id372675"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id372686"></a><em class="parameter"><code>log file = /var/log/samba/%m</code></em></td></tr><tr><td><a class="indexterm" name="id372698"></a><em class="parameter"><code>max log size = 0</code></em></td></tr><tr><td><a class="indexterm" name="id372709"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id372721"></a><em class="parameter"><code>name resolve order = wins bcast hosts</code></em></td></tr><tr><td><a class="indexterm" name="id372732"></a><em class="parameter"><code>time server = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id372744"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id372755"></a><em class="parameter"><code>add user script = /opt/IDEALX/sbin/smbldap-useradd -m '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id372767"></a><em class="parameter"><code>delete user script = /opt/IDEALX/sbin/smbldap-userdel '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id372779"></a><em class="parameter"><code>add group script = /opt/IDEALX/sbin/smbldap-groupadd -p '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id372791"></a><em class="parameter"><code>delete group script = /opt/IDEALX/sbin/smbldap-groupdel '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id372803"></a><em class="parameter"><code>add user to group script = /opt/IDEALX/sbin/smbldap-groupmod -m '%g' '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id372815"></a><em class="parameter"><code>delete user from group script = /opt/IDEALX/sbin/smbldap-groupmod -x '%g' '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id372827"></a><em class="parameter"><code>set primary group script = /opt/IDEALX/sbin/smbldap-usermod -g '%g' '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id372839"></a><em class="parameter"><code>add machine script = /opt/IDEALX/sbin/smbldap-useradd -w '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id372851"></a><em class="parameter"><code>shutdown script = /var/lib/samba/scripts/shutdown.sh</code></em></td></tr><tr><td><a class="indexterm" name="id372863"></a><em class="parameter"><code>abort shutdown script = /sbin/shutdown -c</code></em></td></tr><tr><td><a class="indexterm" name="id372875"></a><em class="parameter"><code>logon script = scripts\logon.bat</code></em></td></tr><tr><td><a class="indexterm" name="id372886"></a><em class="parameter"><code>logon path = \\%L\profiles\%U</code></em></td></tr><tr><td><a class="indexterm" name="id372898"></a><em class="parameter"><code>logon drive = X:</code></em></td></tr><tr><td><a class="indexterm" name="id372909"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id372921"></a><em class="parameter"><code>domain master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id372932"></a><em class="parameter"><code>wins support = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id372944"></a><em class="parameter"><code>ldap suffix = dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id372955"></a><em class="parameter"><code>ldap machine suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id372967"></a><em class="parameter"><code>ldap user suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id372978"></a><em class="parameter"><code>ldap group suffix = ou=Groups</code></em></td></tr><tr><td><a class="indexterm" name="id372990"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr><tr><td><a class="indexterm" name="id373002"></a><em class="parameter"><code>ldap admin dn = cn=sambaadmin,dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id373013"></a><em class="parameter"><code>idmap backend = ldap://massive.abmas.biz</code></em></td></tr><tr><td><a class="indexterm" name="id373025"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id373037"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id373048"></a><em class="parameter"><code>printer admin = root</code></em></td></tr><tr><td><a class="indexterm" name="id373060"></a><em class="parameter"><code>printing = cups</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch7-massmbconfB"></a><p class="title"><b>Example 6.4. Primary Domain Controller <code class="filename">smb.conf</code> File  Part B</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[IPC$]</code></em></td></tr><tr><td><a class="indexterm" name="id373104"></a><em class="parameter"><code>path = /tmp</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[accounts]</code></em></td></tr><tr><td><a class="indexterm" name="id373124"></a><em class="parameter"><code>comment = Accounting Files</code></em></td></tr><tr><td><a class="indexterm" name="id373136"></a><em class="parameter"><code>path = /data/accounts</code></em></td></tr><tr><td><a class="indexterm" name="id373148"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[service]</code></em></td></tr><tr><td><a class="indexterm" name="id373168"></a><em class="parameter"><code>comment = Financial Services Files</code></em></td></tr><tr><td><a class="indexterm" name="id373180"></a><em class="parameter"><code>path = /data/service</code></em></td></tr><tr><td><a class="indexterm" name="id373191"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[pidata]</code></em></td></tr><tr><td><a class="indexterm" name="id373211"></a><em class="parameter"><code>comment = Property Insurance Files</code></em></td></tr><tr><td><a class="indexterm" name="id373223"></a><em class="parameter"><code>path = /data/pidata</code></em></td></tr><tr><td><a class="indexterm" name="id373234"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id373255"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id373266"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id373278"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id373289"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id373310"></a><em class="parameter"><code>comment = SMB Print Spool</code></em></td></tr><tr><td><a class="indexterm" name="id373321"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id373333"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id373344"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id373356"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch7-massmbconfC"></a><p class="title"><b>Example 6.5. Primary Domain Controller <code class="filename">smb.conf</code> File  Part C</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[apps]</code></em></td></tr><tr><td><a class="indexterm" name="id373401"></a><em class="parameter"><code>comment = Application Files</code></em></td></tr><tr><td><a class="indexterm" name="id373412"></a><em class="parameter"><code>path = /apps</code></em></td></tr><tr><td><a class="indexterm" name="id373424"></a><em class="parameter"><code>admin users = bjones</code></em></td></tr><tr><td><a class="indexterm" name="id373435"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id373456"></a><em class="parameter"><code>comment = Network Logon Service</code></em></td></tr><tr><td><a class="indexterm" name="id373467"></a><em class="parameter"><code>path = /var/lib/samba/netlogon</code></em></td></tr><tr><td><a class="indexterm" name="id373479"></a><em class="parameter"><code>admin users = root, Administrator</code></em></td></tr><tr><td><a class="indexterm" name="id373490"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id373502"></a><em class="parameter"><code>locking = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[profiles]</code></em></td></tr><tr><td><a class="indexterm" name="id373522"></a><em class="parameter"><code>comment = Profile Share</code></em></td></tr><tr><td><a class="indexterm" name="id373534"></a><em class="parameter"><code>path = /var/lib/samba/profiles</code></em></td></tr><tr><td><a class="indexterm" name="id373545"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id373557"></a><em class="parameter"><code>profile acls = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[profdata]</code></em></td></tr><tr><td><a class="indexterm" name="id373577"></a><em class="parameter"><code>comment = Profile Data Share</code></em></td></tr><tr><td><a class="indexterm" name="id373589"></a><em class="parameter"><code>path = /var/lib/samba/profdata</code></em></td></tr><tr><td><a class="indexterm" name="id373600"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id373612"></a><em class="parameter"><code>profile acls = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[print$]</code></em></td></tr><tr><td><a class="indexterm" name="id373632"></a><em class="parameter"><code>comment = Printer Drivers</code></em></td></tr><tr><td><a class="indexterm" name="id373644"></a><em class="parameter"><code>path = /var/lib/samba/drivers</code></em></td></tr><tr><td><a class="indexterm" name="id373655"></a><em class="parameter"><code>write list = root</code></em></td></tr><tr><td><a class="indexterm" name="id373667"></a><em class="parameter"><code>admin users = root, Administrator</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch7-slvsmbocnfA"></a><p class="title"><b>Example 6.6. Backup Domain Controller <code class="filename">smb.conf</code> File  Part A</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># # Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id373715"></a><em class="parameter"><code>unix charset = LOCALE</code></em></td></tr><tr><td><a class="indexterm" name="id373726"></a><em class="parameter"><code>workgroup = MEGANET2</code></em></td></tr><tr><td><a class="indexterm" name="id373738"></a><em class="parameter"><code>netbios name = BLDG1</code></em></td></tr><tr><td><a class="indexterm" name="id373749"></a><em class="parameter"><code>passdb backend = ldapsam:ldap://lapdc.abmas.biz</code></em></td></tr><tr><td><a class="indexterm" name="id373761"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id373773"></a><em class="parameter"><code>log level = 1</code></em></td></tr><tr><td><a class="indexterm" name="id373784"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id373796"></a><em class="parameter"><code>log file = /var/log/samba/%m</code></em></td></tr><tr><td><a class="indexterm" name="id373807"></a><em class="parameter"><code>max log size = 50</code></em></td></tr><tr><td><a class="indexterm" name="id373819"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id373830"></a><em class="parameter"><code>name resolve order = wins bcast hosts</code></em></td></tr><tr><td><a class="indexterm" name="id373842"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id373853"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id373865"></a><em class="parameter"><code>logon script = scripts\logon.bat</code></em></td></tr><tr><td><a class="indexterm" name="id373876"></a><em class="parameter"><code>logon path = \\%L\profiles\%U</code></em></td></tr><tr><td><a class="indexterm" name="id373888"></a><em class="parameter"><code>logon drive = X:</code></em></td></tr><tr><td><a class="indexterm" name="id373900"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id373911"></a><em class="parameter"><code>os level = 63</code></em></td></tr><tr><td><a class="indexterm" name="id373922"></a><em class="parameter"><code>domain master = No</code></em></td></tr><tr><td><a class="indexterm" name="id373934"></a><em class="parameter"><code>wins server = 192.168.2.1</code></em></td></tr><tr><td><a class="indexterm" name="id373946"></a><em class="parameter"><code>ldap suffix = dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id373957"></a><em class="parameter"><code>ldap machine suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id373969"></a><em class="parameter"><code>ldap user suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id373980"></a><em class="parameter"><code>ldap group suffix = ou=Groups</code></em></td></tr><tr><td><a class="indexterm" name="id373992"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr><tr><td><a class="indexterm" name="id374004"></a><em class="parameter"><code>ldap admin dn = cn=sambaadmin,dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id374015"></a><em class="parameter"><code>utmp = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id374027"></a><em class="parameter"><code>idmap backend = ldap://massive.abmas.biz</code></em></td></tr><tr><td><a class="indexterm" name="id374038"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id374050"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id374061"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[accounts]</code></em></td></tr><tr><td><a class="indexterm" name="id374082"></a><em class="parameter"><code>comment = Accounting Files</code></em></td></tr><tr><td><a class="indexterm" name="id374093"></a><em class="parameter"><code>path = /data/accounts</code></em></td></tr><tr><td><a class="indexterm" name="id374105"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[service]</code></em></td></tr><tr><td><a class="indexterm" name="id374125"></a><em class="parameter"><code>comment = Financial Services Files</code></em></td></tr><tr><td><a class="indexterm" name="id374137"></a><em class="parameter"><code>path = /data/service</code></em></td></tr><tr><td><a class="indexterm" name="id374148"></a><em class="parameter"><code>read only = No</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch7-slvsmbocnfB"></a><p class="title"><b>Example 6.7. Backup Domain Controller <code class="filename">smb.conf</code> File  Part B</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[pidata]</code></em></td></tr><tr><td><a class="indexterm" name="id374193"></a><em class="parameter"><code>comment = Property Insurance Files</code></em></td></tr><tr><td><a class="indexterm" name="id374205"></a><em class="parameter"><code>path = /data/pidata</code></em></td></tr><tr><td><a class="indexterm" name="id374216"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id374237"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id374248"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id374260"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id374271"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id374292"></a><em class="parameter"><code>comment = SMB Print Spool</code></em></td></tr><tr><td><a class="indexterm" name="id374303"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id374315"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id374326"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id374338"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[apps]</code></em></td></tr><tr><td><a class="indexterm" name="id374358"></a><em class="parameter"><code>comment = Application Files</code></em></td></tr><tr><td><a class="indexterm" name="id374370"></a><em class="parameter"><code>path = /apps</code></em></td></tr><tr><td><a class="indexterm" name="id374381"></a><em class="parameter"><code>admin users = bjones</code></em></td></tr><tr><td><a class="indexterm" name="id374392"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id374413"></a><em class="parameter"><code>comment = Network Logon Service</code></em></td></tr><tr><td><a class="indexterm" name="id374424"></a><em class="parameter"><code>path = /var/lib/samba/netlogon</code></em></td></tr><tr><td><a class="indexterm" name="id374436"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id374448"></a><em class="parameter"><code>locking = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[profiles]</code></em></td></tr><tr><td><a class="indexterm" name="id374468"></a><em class="parameter"><code>comment = Profile Share</code></em></td></tr><tr><td><a class="indexterm" name="id374479"></a><em class="parameter"><code>path = /var/lib/samba/profiles</code></em></td></tr><tr><td><a class="indexterm" name="id374491"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id374502"></a><em class="parameter"><code>profile acls = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[profdata]</code></em></td></tr><tr><td><a class="indexterm" name="id374523"></a><em class="parameter"><code>comment = Profile Data Share</code></em></td></tr><tr><td><a class="indexterm" name="id374534"></a><em class="parameter"><code>path = /var/lib/samba/profdata</code></em></td></tr><tr><td><a class="indexterm" name="id374546"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id374558"></a><em class="parameter"><code>profile acls = Yes</code></em></td></tr></table></div></div><br class="example-break"><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id374570"></a>Key Points Learned</h3></div></div></div><div class="itemizedlist"><ul type="disc"><li><p>
+			<a class="indexterm" name="id374581"></a><a class="indexterm" name="id374587"></a>
 			Where Samba-3 is used as a domain controller, the use of LDAP is an 
 			essential component to permit the use of BDCs.
 			</p></li><li><p>
-			<a class="indexterm" name="id2610416"></a>
+			<a class="indexterm" name="id374599"></a>
 			Replication of the LDAP master server to create a network of BDCs
 			is an important mechanism for limiting WAN traffic.
 			</p></li><li><p>
@@ -808,55 +808,55 @@
 			Roaming profiles must be contained to the local network segment. Any
 			departure from this may clog wide-area arteries and slow legitimate network
 			traffic to a crawl.
-			</p></li></ul></div></div><div class="figure"><a name="chap7net"></a><p class="title"><b>Figure 6.6. Network Topology  2000 User Complex Design A</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/chap7-net-Ar.png" width="432" alt="Network Topology 2000 User Complex Design A"></div></div></div><br class="figure-break"><div class="figure"><a name="chap7net2"></a><p class="title"><b>Figure 6.7. Network Topology  2000 User Complex Design B</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/chap7-net2-Br.png" width="432" alt="Network Topology 2000 User Complex Design B"></div></div></div><br class="figure-break"></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2610534"></a>Questions and Answers</h2></div></div></div><p>
+			</p></li></ul></div></div><div class="figure"><a name="chap7net"></a><p class="title"><b>Figure 6.6. Network Topology  2000 User Complex Design A</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/chap7-net-Ar.png" width="432" alt="Network Topology 2000 User Complex Design A"></div></div></div><br class="figure-break"><div class="figure"><a name="chap7net2"></a><p class="title"><b>Figure 6.7. Network Topology  2000 User Complex Design B</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/chap7-net2-Br.png" width="432" alt="Network Topology 2000 User Complex Design B"></div></div></div><br class="figure-break"></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id374709"></a>Questions and Answers</h2></div></div></div><p>
 	There is much rumor and misinformation regarding the use of MS Windows networking protocols.
 	These questions are just a few of those frequently asked.
-	</p><div class="qandaset"><dl><dt> <a href="2000users.html#id2610552">
+	</p><div class="qandaset"><dl><dt> <a href="2000users.html#id374726">
 		
 		
 		Is it true that DHCP uses lots of WAN bandwidth?
-		</a></dt><dt> <a href="2000users.html#id2610686">
+		</a></dt><dt> <a href="2000users.html#id374847">
 		
 		
 		How much background communication takes place between a master LDAP server and its slave LDAP servers?
-		</a></dt><dt> <a href="2000users.html#id2610747">
+		</a></dt><dt> <a href="2000users.html#id374904">
 		LDAP has a database. Is LDAP not just a fancy database front end?
-		</a></dt><dt> <a href="2000users.html#id2610811">
+		</a></dt><dt> <a href="2000users.html#id374960">
 		
 		Can Active Directory obtain account information from an OpenLDAP server?
-		</a></dt><dt> <a href="2000users.html#id2610847">
+		</a></dt><dt> <a href="2000users.html#id374993">
 		What are the parts of a roaming profile? How large is each part?
-		</a></dt><dt> <a href="2000users.html#id2610995">
+		</a></dt><dt> <a href="2000users.html#id375134">
 		Can the My Documents folder be stored on a network drive?
-		</a></dt><dt> <a href="2000users.html#id2611043">
+		</a></dt><dt> <a href="2000users.html#id375178">
 		
 		
 		
 		How much WAN bandwidth does WINS consume?
-		</a></dt><dt> <a href="2000users.html#id2611127">
+		</a></dt><dt> <a href="2000users.html#id375255">
 		How many BDCs should I have? What is the right number of Windows clients per server?
-		</a></dt><dt> <a href="2000users.html#id2611163">
+		</a></dt><dt> <a href="2000users.html#id375283">
 		
 		I've heard that you can store NIS accounts in LDAP. Is LDAP not just a smarter way to
 		run an NIS server?
-		</a></dt><dt> <a href="2000users.html#id2611197">
+		</a></dt><dt> <a href="2000users.html#id375313">
 		Can I use NIS in place of LDAP?
-		</a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%"><tbody><tr class="question"><td align="left" valign="top"><a name="id2610552"></a><a name="id2610554"></a></td><td align="left" valign="top"><p>
-		<a class="indexterm" name="id2610558"></a>
-		<a class="indexterm" name="id2610565"></a>
+		</a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%"><tbody><tr class="question"><td align="left" valign="top"><a name="id374726"></a><a name="id374728"></a></td><td align="left" valign="top"><p>
+		<a class="indexterm" name="id374732"></a>
+		<a class="indexterm" name="id374739"></a>
 		Is it true that DHCP uses lots of WAN bandwidth?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
-		<a class="indexterm" name="id2610582"></a>
-		<a class="indexterm" name="id2610591"></a>
-		<a class="indexterm" name="id2610598"></a>
+		<a class="indexterm" name="id374755"></a>
+		<a class="indexterm" name="id374764"></a>
+		<a class="indexterm" name="id374771"></a>
 		It is a smart practice to localize DHCP servers on each network segment. As a 
 		rule, there should be two DHCP servers per network segment. This means that if
 		one server fails, there is always another to service user needs. DHCP requests use
 		only UDP broadcast protocols. It is possible to run a DHCP Relay Agent on network
 		routers. This makes it possible to run fewer DHCP servers.
 		</p><p>
-		<a class="indexterm" name="id2610617"></a>
-		<a class="indexterm" name="id2610626"></a>
+		<a class="indexterm" name="id374787"></a>
+		<a class="indexterm" name="id374796"></a>
 		A DHCP network address request and confirmation usually results in about six UDP packets.
 		The packets are from 60 to 568 bytes in length. Let us consider a site that has 300 DHCP
 		clients and that uses a 24-hour IP address lease. This means that all clients renew
@@ -874,28 +874,28 @@
 </pre><p>
 		From this can be seen that the traffic impact would be minimal.
 		</p><p>
-		<a class="indexterm" name="id2610664"></a>
-		<a class="indexterm" name="id2610673"></a>
+		<a class="indexterm" name="id374826"></a>
+		<a class="indexterm" name="id374835"></a>
 		Even when DHCP is configured to do DNS update (dynamic DNS) over a wide-area link,
 		the impact of the update is no more than the DHCP IP address renewal traffic and thus
 		still insignificant for most practical purposes.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2610686"></a><a name="id2610689"></a></td><td align="left" valign="top"><p>
-		<a class="indexterm" name="id2610693"></a>
-		<a class="indexterm" name="id2610700"></a>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id374847"></a><a name="id374849"></a></td><td align="left" valign="top"><p>
+		<a class="indexterm" name="id374853"></a>
+		<a class="indexterm" name="id374860"></a>
 		How much background communication takes place between a master LDAP server and its slave LDAP servers?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
-		<a class="indexterm" name="id2610720"></a>
+		<a class="indexterm" name="id374879"></a>
 		The process that controls the replication of data from the master LDAP server to the slave LDAP
 		servers is called <code class="literal">slurpd</code>. The <code class="literal">slurpd</code> remains nascent (quiet)
 		until an update must be propagated. The propagation traffic per LDAP slave to update (add/modify/delete)
 		two user accounts requires less than 10KB traffic.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2610747"></a><a name="id2610750"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id374904"></a><a name="id374906"></a></td><td align="left" valign="top"><p>
 		LDAP has a database. Is LDAP not just a fancy database front end?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
-		<a class="indexterm" name="id2610762"></a>
-		<a class="indexterm" name="id2610768"></a>
-		<a class="indexterm" name="id2610778"></a>
-		<a class="indexterm" name="id2610784"></a>
+		<a class="indexterm" name="id374917"></a>
+		<a class="indexterm" name="id374924"></a>
+		<a class="indexterm" name="id374933"></a>
+		<a class="indexterm" name="id374940"></a>
 		LDAP does store its data in a database of sorts. In fact, the LDAP backend is an application-specific
 		data storage system. This type of database is indexed so that records can be rapidly located, but the
 		database is not generic and can be used only in particular pre-programmed ways. General external
@@ -904,17 +904,17 @@
 		orientation and typically allows external programs to perform ad hoc queries, even across data tables.
 		An LDAP front end is a purpose-built tool that has a search orientation that is designed around specific
 		simple queries. The term <code class="constant">database</code> is heavily overloaded and thus much misunderstood.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2610811"></a><a name="id2610814"></a></td><td align="left" valign="top"><p>
-		<a class="indexterm" name="id2610818"></a>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id374960"></a><a name="id374962"></a></td><td align="left" valign="top"><p>
+		<a class="indexterm" name="id374966"></a>
 		Can Active Directory obtain account information from an OpenLDAP server?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
-		<a class="indexterm" name="id2610832"></a>
+		<a class="indexterm" name="id374980"></a>
 		No, at least not directly. It is possible to provision Active Directory from and/or to an OpenLDAP
 		database through use of a metadirectory server. Microsoft MMS (now called MIIS) can interface
 		to OpenLDAP using standard LDAP queries and updates. 
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2610847"></a><a name="id2610849"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id374993"></a><a name="id374995"></a></td><td align="left" valign="top"><p>
 		What are the parts of a roaming profile? How large is each part?
-		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id2610860"></a>
+		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id375005"></a>
 		A roaming profile consists of
 		</p><div class="itemizedlist"><ul type="disc"><li><p>
 			Desktop folders such as <code class="constant">Desktop</code>, <code class="constant">My Documents</code>,
@@ -922,39 +922,39 @@
 			<code class="constant">Cookies</code>, <code class="constant">Application Data</code>,
 			<code class="constant">Local Settings,</code> and more. See <a class="link" href="happy.html" title="Chapter 5. Making Happy Users">&#8220;Making Happy Users&#8221;</a>, <a class="link" href="happy.html#XP-screen001" title="Figure 5.3. Windows XP Professional User Shared Folders">&#8220;Windows XP Professional  User Shared Folders&#8221;</a>.
 			</p><p>
-			<a class="indexterm" name="id2610921"></a>
+			<a class="indexterm" name="id375064"></a>
 			Each of these can be anywhere from a few bytes to gigabytes in capacity. Fortunately, all
 			such folders can be redirected to network drive resources. See <a class="link" href="happy.html#redirfold" title="Configuration of Default Profile with Folder Redirection">&#8220;Configuration of Default Profile with Folder Redirection&#8221;</a>
 			for more information regarding folder redirection.
 			</p></li><li><p>
 			A static or rewritable portion that is typically only a few files (2-5 KB of information).
 			</p></li><li><p>
-			<a class="indexterm" name="id2610947"></a>
-			<a class="indexterm" name="id2610954"></a>
+			<a class="indexterm" name="id375088"></a>
+			<a class="indexterm" name="id375095"></a>
 			The registry load file that modifies the <code class="constant">HKEY_LOCAL_USER</code> hive. This is
 			the <code class="filename">NTUSER.DAT</code> file. It can be from 0.4 to 1.5 MB.
 			</p></li></ul></div><p>
-		<a class="indexterm" name="id2610977"></a>
+		<a class="indexterm" name="id375116"></a>
 		Microsoft Outlook PST files may be stored in the <code class="constant">Local Settings\Application Data</code>
 		folder. It can be up to 2 GB in size per PST file.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2610995"></a><a name="id2610997"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id375134"></a><a name="id375136"></a></td><td align="left" valign="top"><p>
 		Can the <code class="constant">My Documents</code> folder be stored on a network drive?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
-		<a class="indexterm" name="id2611013"></a>
-		<a class="indexterm" name="id2611020"></a>
+		<a class="indexterm" name="id375151"></a>
+		<a class="indexterm" name="id375157"></a>
 		Yes. More correctly, such folders can be redirected to network shares. No specific network drive
 		connection is required. Registry settings permit this to be redirected directly to a UNC (Universal
 		Naming Convention) resource, though it is possible to specify a network drive letter instead of a
 		UNC name. See <a class="link" href="happy.html#redirfold" title="Configuration of Default Profile with Folder Redirection">&#8220;Configuration of Default Profile with Folder Redirection&#8221;</a>.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2611043"></a><a name="id2611045"></a></td><td align="left" valign="top"><p>
-		<a class="indexterm" name="id2611050"></a>
-		<a class="indexterm" name="id2611056"></a>
-		<a class="indexterm" name="id2611066"></a>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id375178"></a><a name="id375180"></a></td><td align="left" valign="top"><p>
+		<a class="indexterm" name="id375185"></a>
+		<a class="indexterm" name="id375192"></a>
+		<a class="indexterm" name="id375201"></a>
 		How much WAN bandwidth does WINS consume?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
-		<a class="indexterm" name="id2611080"></a>
-		<a class="indexterm" name="id2611089"></a>
-		<a class="indexterm" name="id2611096"></a>
+		<a class="indexterm" name="id375214"></a>
+		<a class="indexterm" name="id375224"></a>
+		<a class="indexterm" name="id375230"></a>
 		MS Windows clients cache information obtained from WINS lookups in a local NetBIOS name cache.
 		This keeps WINS lookups to a minimum. On a network with 3500 MS Windows clients and a central WINS
 		server, the total bandwidth demand measured at the WINS server, averaged over an 8-hour working day,
@@ -966,7 +966,7 @@
 		</p><p>
 		In conclusion, the total load afforded through WINS traffic is again marginal to total operational
 		usage  as it should be.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2611127"></a><a name="id2611130"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id375255"></a><a name="id375257"></a></td><td align="left" valign="top"><p>
 		How many BDCs should I have? What is the right number of Windows clients per server?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		It is recommended to have at least one BDC per network segment, including the segment served
@@ -980,19 +980,19 @@
 		</p><p>
 		As unsatisfactory as the answer might sound, it all depends on network and server load
 		characteristics.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2611163"></a><a name="id2611166"></a></td><td align="left" valign="top"><p>
-		<a class="indexterm" name="id2611170"></a><a class="indexterm" name="id2611176"></a>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id375283"></a><a name="id375285"></a></td><td align="left" valign="top"><p>
+		<a class="indexterm" name="id375289"></a><a class="indexterm" name="id375294"></a>
 		I've heard that you can store NIS accounts in LDAP. Is LDAP not just a smarter way to
 		run an NIS server?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		The correct answer to both questions is yes. But do understand that an LDAP server has
 		a configurable schema that can store far more information for many more purposes than
 		just NIS.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2611197"></a><a name="id2611199"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id375313"></a><a name="id375316"></a></td><td align="left" valign="top"><p>
 		Can I use NIS in place of LDAP?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
-		<a class="indexterm" name="id2611211"></a>
-		<a class="indexterm" name="id2611217"></a>
+		<a class="indexterm" name="id375327"></a>
+		<a class="indexterm" name="id375333"></a>
 		No. The NIS database does not have provision to store Microsoft encrypted passwords and does not deal
 		with the types of data necessary for interoperability with Microsoft Windows networking. The use
 		of LDAP with Samba requires the use of a number of schemas, one of which is the NIS schema, but also

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/Big500users.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/Big500users.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/Big500users.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 4. The 500-User Office</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="ExNetworks.html" title="Part I. Example Network Configurations"><link rel="prev" href="secure.html" title="Chapter 3. Secure Office Networking"><link rel="next" href="happy.html" title="Chapter 5. Making Happy Users"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 4. The 500-User Office</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="secure.html">Prev</a> </td><th width="60%" align="center">Part I. Example Network Configurations</th><td width="20%" align="right"> <a accesskey="n" href="happy.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="Big500users"></a>Chapter 4. The 500-User Office</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="Big500users.html#id2587374">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="Big500users.html#id2587419">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="Big500users.html#id2587525">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="Big500users.html#id2587560">Technical Issues</a></span></dt><dt><span class="sect2"><a href="Big500users.html#id2587763">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="Big500users.html#id2587786">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="Big500users.html#ch5-dnshcp-setup">Installation of DHCP, DNS, and Samba Control Files</a></span></dt><dt><span class="sect2"><a href="Big500users.html#id2588515">Server Preparation: All Servers</a></span></dt><dt><span class="sect2"><a href="Big500users.html#id2589080">Server-Specific Preparation</a></span></dt><dt><span class="sect2"><a href="Big500users.html#ch5-procstart">Process Startup Configuration</a></span></dt><dt><span class="sect2"><a href="Big500users.html#ch5wincfg">Windows Client Configuration</a></span></dt><dt><span class="sect2"><a href="Big500users.html#id2592280">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="Big500users.html#id2592338">Questions and Answers</a></span></dt></dl></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 4. The 500-User Office</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="ExNetworks.html" title="Part I. Example Network Configurations"><link rel="prev" href="secure.html" title="Chapter 3. Secure Office Networking"><link rel="next" href="happy.html" title="Chapter 5. Making Happy Users"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 4. The 500-User Office</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="secure.html">Prev</a> </td><th width="60%" align="center">Part I. Example Network Configurations</th><td width="20%" align="right"> <a accesskey="n" href="happy.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="Big500users"></a>Chapter 4. The 500-User Office</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="Big500users.html#id353553">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="Big500users.html#id353583">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="Big500users.html#id353662">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="Big500users.html#id353690">Technical Issues</a></span></dt><dt><span class="sect2"><a href="Big500users.html#id353866">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="Big500users.html#id353886">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="Big500users.html#ch5-dnshcp-setup">Installation of DHCP, DNS, and Samba Control Files</a></span></dt><dt><span class="sect2"><a href="Big500users.html#id354601">Server Preparation: All Servers</a></span></dt><dt><span class="sect2"><a href="Big500users.html#id355116">Server-Specific Preparation</a></span></dt><dt><span class="sect2"><a href="Big500users.html#ch5-procstart">Process Startup Configuration</a></span></dt><dt><span class="sect2"><a href="Big500users.html#ch5wincfg">Windows Client Configuration</a></span></dt><dt><span class="sect2"><a href="Big500users.html#id358090">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="Big500users.html#id358142">Questions and Answers</a></span></dt></dl></div><p>
 	The Samba-3 networking you explored in <a class="link" href="secure.html" title="Chapter 3. Secure Office Networking">&#8220;Secure Office Networking&#8221;</a> covers the finer points of 
 	configuration of peripheral services such as DHCP and DNS, and WINS. You experienced
 	implementation of a simple configuration of the services that are important adjuncts 
@@ -17,9 +17,9 @@
 	that same approach to printing, but <a class="link" href="happy.html" title="Chapter 5. Making Happy Users">&#8220;Making Happy Users&#8221;</a> presents an opportunity 
 	to make printing more complex for the administrator while making it easier for the user.
 	</p><p>
-	<a class="indexterm" name="id2587310"></a>
-	<a class="indexterm" name="id2587316"></a>
-	<a class="indexterm" name="id2587323"></a>
+	<a class="indexterm" name="id353500"></a>
+	<a class="indexterm" name="id353506"></a>
+	<a class="indexterm" name="id353513"></a>
 	<a class="link" href="secure.html" title="Chapter 3. Secure Office Networking">&#8220;Secure Office Networking&#8221;</a> demonstrates operation of a DHCP server and a DNS server 
 	as well as a central WINS server. You validated the operation of these services and
 	saw an effective implementation of a Samba domain controller using the 
@@ -41,7 +41,7 @@
 	improve network management and control while reducing human resource overheads.
 	You should take the opportunity to innovate and expand on the methods presented 
 	here and explore them to the fullest.
-	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2587374"></a>Introduction</h2></div></div></div><p>
+	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id353553"></a>Introduction</h2></div></div></div><p>
 	Business continues to go well for Abmas. Mr. Meany is driving your success and the
 	network continues to grow thanks to the hard work Christine has done. You recently
 	hired Stanley Soroka as manager of information systems. Christine recommended Stan
@@ -66,7 +66,7 @@
 	and to allow Stan and Christine to fully stage the new network and test it before
 	it is rolled out. Your strategy is to complete the new network so that it
 	is ready for operation when the old office moves into the new premises.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2587419"></a>Assignment Tasks</h3></div></div></div><p>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id353583"></a>Assignment Tasks</h3></div></div></div><p>
 		The acquired business had 280 network users. The old Abmas building housed
 		220 network users in unbelievably cramped conditions. The network that
 		initially served 130 users now handles 220 users quite well.
@@ -107,7 +107,7 @@
 		DirectPointe Inc. receives from you a new standard desktop configuration
 		every four months. They automatically roll that out to each desktop system.
 		You must keep DirectPointe informed of all changes.
-		</p><p><a class="indexterm" name="id2587496"></a>
+		</p><p><a class="indexterm" name="id353637"></a>
 		The new network has a single Samba Primary Domain Controller (PDC) located in the
 		Network Operation Center (NOC). Buildings 1 and 2 each have a local server
 		for local application servicing. It is a domain member. The new system
@@ -115,8 +115,8 @@
 		</p><p>
 		Printing is based on raw pass-through facilities just as it has been used so far.
 		All printer drivers are installed on the desktop and notebook computers.
-		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2587525"></a>Dissection and Discussion</h2></div></div></div><p>
-	<a class="indexterm" name="id2587533"></a>
+		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id353662"></a>Dissection and Discussion</h2></div></div></div><p>
+	<a class="indexterm" name="id353670"></a>
 	The example you are building in this chapter is of a network design that works, but this
 	does not make it a design that is recommended. As a general rule, there should be at least
 	one Backup Domain Controller (BDC) per 150 Windows network clients. The principle behind
@@ -127,22 +127,22 @@
 	responsiveness. This network will have 500 clients serviced by one central domain
 	controller. This is not a good omen for user satisfaction. You, of course, address this
 	very soon (see <a class="link" href="happy.html" title="Chapter 5. Making Happy Users">&#8220;Making Happy Users&#8221;</a>).
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2587560"></a>Technical Issues</h3></div></div></div><p>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id353690"></a>Technical Issues</h3></div></div></div><p>
 		Stan has talked you into a horrible compromise, but it is addressed. Just make
 		certain that the performance of this network is well validated before going live.
 		</p><p>
 		Design decisions made in this design include the following:
 		</p><div class="itemizedlist"><ul type="disc"><li><p>
-			<a class="indexterm" name="id2587582"></a>
-			<a class="indexterm" name="id2587588"></a>
-			<a class="indexterm" name="id2587595"></a>
+			<a class="indexterm" name="id353710"></a>
+			<a class="indexterm" name="id353716"></a>
+			<a class="indexterm" name="id353723"></a>
 			A single PDC is being implemented. This limitation is based on the choice not to
 			use LDAP. Many network administrators fear using LDAP because of the perceived
 			complexity of implementation and management of an LDAP-based backend for all user
 			identity management as well as to store network access credentials.
 			</p></li><li><p>
-			<a class="indexterm" name="id2587612"></a>
-			<a class="indexterm" name="id2587618"></a>
+			<a class="indexterm" name="id353737"></a>
+			<a class="indexterm" name="id353744"></a>
 			Because of the refusal to use an LDAP (ldapsam) passdb backend at this time, the
 			only choice that makes sense with 500 users is to use the tdbsam passwd backend. 
 			This type of backend is not receptive to replication to BDCs.  If the tdbsam
@@ -156,7 +156,7 @@
 			for a simple mode of operation but has to be balanced with network performance and
 			integrity of operations considerations.
 			</p></li><li><p>
-			<a class="indexterm" name="id2587659"></a>
+			<a class="indexterm" name="id353778"></a>
 			A single central WINS server is being used. The PDC is also the WINS server.
 			Any attempt to operate a routed network without a WINS server while using NetBIOS
 			over TCP/IP protocols does not work unless on each client the name resolution
@@ -167,12 +167,12 @@
 			At this time the Samba WINS database cannot be replicated. That is
 			why a single WINS server is being implemented. This should work without a problem.
 			</p></li><li><p>
-			<a class="indexterm" name="id2587696"></a>
+			<a class="indexterm" name="id353810"></a>
 			BDCs make use of <code class="literal">winbindd</code> to provide
 			access to domain security credentials for file system access and object storage.
 			</p></li><li><p>
-			<a class="indexterm" name="id2587715"></a>
-			<a class="indexterm" name="id2587724"></a>
+			<a class="indexterm" name="id353828"></a>
+			<a class="indexterm" name="id353837"></a>
 			Configuration of Windows XP Professional clients is achieved using DHCP. Each
 			subnet has its own DHCP server. Backup DHCP serving is provided by one
 			alternate DHCP server. This necessitates enabling of the DHCP Relay agent on
@@ -188,13 +188,13 @@
 			The network address and subnetmask chosen provide 1022 usable IP addresses in
 			each subnet. If in the future more addresses are required, it would make sense
 			to add further subnets rather than change addressing.
-			</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2587763"></a>Political Issues</h3></div></div></div><p>
+			</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id353866"></a>Political Issues</h3></div></div></div><p>
 		This case gets close to the real world. You and I know the right way to implement
 		domain control. Politically, we have to navigate a minefield. In this case, the need is to
 		get the PDC rolled out in compliance with expectations and also to be ready to save the day
 		by having the real solution ready before it is needed. That real solution is presented in
 		<a class="link" href="happy.html" title="Chapter 5. Making Happy Users">&#8220;Making Happy Users&#8221;</a>.
-		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2587786"></a>Implementation</h2></div></div></div><p>
+		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id353886"></a>Implementation</h2></div></div></div><p>
 	The following configuration process begins following installation of Red Hat Fedora Core2 on the
 	three servers shown in the network topology diagram in <a class="link" href="Big500users.html#chap05net" title="Figure 4.1. Network Topology 500 User Network Using tdbsam passdb backend.">&#8220;Network Topology  500 User Network Using tdbsam passdb backend.&#8221;</a>. You have
 	selected hardware that is appropriate to the task.
@@ -205,9 +205,9 @@
 	</p><p>
 	The abbreviation shown in this table as <code class="constant">{VLN}</code> refers to
 	the directory location beginning with <code class="filename">/var/lib/named</code>.
-	</p><div class="table"><a name="ch5-filelocations"></a><p class="title"><b>Table 4.1. Domain: <code class="constant">MEGANET</code>, File Locations for Servers</b></p><div class="table-contents"><table summary="Domain: MEGANET, File Locations for Servers" border="1"><colgroup><col align="left"><col align="left"><col align="center"><col align="center"><col align="center"></colgroup><thead><tr><th colspan="2" align="center">File Information</th><th colspan="3" align="center">Server Name</th></tr><tr><th align="center">Source</th><th align="center">Target Location</th><th align="center">MASSIVE</th><th align="center">BLDG1</th><th align="center">BLDG2</th></tr></thead><tbody><tr><td align="left"><a class="link" href="Big500users.html#ch5-massivesmb" title="Example 4.1. Server: MASSIVE (PDC), File: /etc/samba/smb.conf">&#8220;Server: MASSIVE (PDC), File: /etc/samba/smb.conf&#8221;</a></td><td align="left"><code class="filename">/etc/samba/smb.conf</code></td><td align="center">Yes</td><td align="center">No</td><td align="center">No</td></tr><tr><td align="left"><a class="link" href="Big500users.html#ch5-dc-common" title="Example 4.2. Server: MASSIVE (PDC), File: /etc/samba/dc-common.conf">&#8220;Server: MASSIVE (PDC), File: /etc/samba/dc-common.conf&#8221;</a></td><td align="left"><code class="filename">/etc/samba/dc-common.conf</code></td><td align="center">Yes</td><td align="center">No</td><td align="center">No</td></tr><tr><td align="left"><a class="link" href="Big500users.html#ch5-commonsmb" title="Example 4.3. Common Samba Configuration File: /etc/samba/common.conf">&#8220;Common Samba Configuration File: /etc/samba/common.conf&#8221;</a></td><td align="left"><code class="filename">/etc/samba/common.conf</code></td><td align="center">Yes</td><td align="center">Yes</td><td align="center">Yes</td></tr><tr><td align="left"><a class="link" href="Big500users.html#ch5-bldg1-smb" title="Example 4.4. Server: BLDG1 (Member), File: smb.conf">&#8220;Server: BLDG1 (Member), File: smb.conf&#8221;</a></td><td align="left"><code class="filename">/etc/samba/smb.conf</code></td><td align="center">No</td><td align="center">Yes</td><td align="center">No</td></tr><tr><td align="left"><a class="link" href="Big500users.html#ch5-bldg2-smb" title="Example 4.5. Server: BLDG2 (Member), File: smb.conf">&#8220;Server: BLDG2 (Member), File: smb.conf&#8221;</a></td><td align="left"><code class="filename">/etc/samba/smb.conf</code></td><td align="center">No</td><td align="center">No</td><td align="center">Yes</td></tr><tr><td align="left"><a class="link" href="Big500users.html#ch5-dommem-smb" title="Example 4.6. Common Domain Member Include File: dom-mem.conf">&#8220;Common Domain Member Include File: dom-mem.conf&#8221;</a></td><td align="left"><code class="filename">/etc/samba/dommem.conf</code></td><td align="center">No</td><td align="center">Yes</td><td align="center">Yes</td></tr><tr><td align="left"><a class="link" href="Big500users.html#massive-dhcp" title="Example 4.7. Server: MASSIVE, File: dhcpd.conf">&#8220;Server: MASSIVE, File: dhcpd.conf&#8221;</a></td><td align="left"><code class="filename">/etc/dhcpd.conf</code></td><td align="center">Yes</td><td align="center">No</td><td align="center">No</td></tr><tr><td align="left"><a class="link" href="Big500users.html#bldg1dhcp" title="Example 4.8. Server: BLDG1, File: dhcpd.conf">&#8220;Server: BLDG1, File: dhcpd.conf&#8221;</a></td><td align="left"><code class="filename">/etc/dhcpd.conf</code></td><td align="center">No</td><td align="center">Yes</td><td align="center">No</td></tr><tr><td align="left"><a class="link" href="Big500users.html#bldg2dhcp" title="Example 4.9. Server: BLDG2, File: dhcpd.conf">&#8220;Server: BLDG2, File: dhcpd.conf&#8221;</a></td><td align="left"><code class="filename">/etc/dhcpd.conf</code></td><td align="center">No</td><td align="center">No</td><td align="center">Yes</td></tr><tr><td align="left"><a class="link" href="Big500users.html#massive-nameda" title="Example 4.10. Server: MASSIVE, File: named.conf, Part: A">&#8220;Server: MASSIVE, File: named.conf, Part: A&#8221;</a></td><td align="left"><code class="filename">/etc/named.conf (part A)</code></td><td align="center">Yes</td><td align="center">No</td><td align="center">No</td></tr><tr><td align="left"><a class="link" href="Big500users.html#massive-namedb" title="Example 4.11. Server: MASSIVE, File: named.conf, Part: B">&#8220;Server: MASSIVE, File: named.conf, Part: B&#8221;</a></td><td align="left"><code class="filename">/etc/named.conf (part B)</code></td><td align="center">Yes</td><td align="center">No</td><td align="center">No</td></tr><tr><td align="left"><a class="link" href="Big500users.html#massive-namedc" title="Example 4.12. Server: MASSIVE, File: named.conf, Part: C">&#8220;Server: MASSIVE, File: named.conf, Part: C&#8221;</a></td><td align="left"><code class="filename">/etc/named.conf (part C)</code></td><td align="center">Yes</td><td align="center">No</td><td align="center">No</td></tr><tr><td align="left"><a class="link" href="Big500users.html#abmasbizdns" title="Example 4.13. Forward Zone File: abmas.biz.hosts">&#8220;Forward Zone File: abmas.biz.hosts&#8221;</a></td><td align="left"><code class="filename">{VLN}/master/abmas.biz.hosts</code></td><td align="center">Yes</td><td align="center">No</td><td align="center">No</td></tr><tr><td align="left"><a class="link" href="Big500users.html#abmasusdns" title="Example 4.14. Forward Zone File: abmas.biz.hosts">&#8220;Forward Zone File: abmas.biz.hosts&#8221;</a></td><td align="left"><code class="filename">{VLN}/master/abmas.us.hosts</code></td><td align="center">Yes</td><td align="center">No</td><td align="center">No</td></tr><tr><td align="left"><a class="link" href="Big500users.html#bldg12nameda" title="Example 4.15. Servers: BLDG1/BLDG2, File: named.conf, Part: A">&#8220;Servers: BLDG1/BLDG2, File: named.conf, Part: A&#8221;</a></td><td align="left"><code class="filename">/etc/named.conf (part A)</code></td><td align="center">No</td><td align="center">Yes</td><td align="center">Yes</td></tr><tr><td align="left"><a class="link" href="Big500users.html#bldg12namedb" title="Example 4.16. Servers: BLDG1/BLDG2, File: named.conf, Part: B">&#8220;Servers: BLDG1/BLDG2, File: named.conf, Part: B&#8221;</a></td><td align="left"><code class="filename">/etc/named.conf (part B)</code></td><td align="center">No</td><td align="center">Yes</td><td align="center">Yes</td></tr><tr><td align="left"><a class="link" href="appendix.html#loopback" title="Example 15.3. DNS Localhost Forward Zone File: /var/lib/named/localhost.zone">&#8220;DNS Localhost Forward Zone File: /var/lib/named/localhost.zone&#8221;</a></td><td align="left"><code class="filename">{VLN}/localhost.zone</code></td><td align="center">Yes</td><td align="center">Yes</td><td align="center">Yes</td></tr><tr><td align="left"><a class="link" href="appendix.html#dnsloopy" title="Example 15.4. DNS Localhost Reverse Zone File: /var/lib/named/127.0.0.zone">&#8220;DNS Localhost Reverse Zone File: /var/lib/named/127.0.0.zone&#8221;</a></td><td align="left"><code class="filename">{VLN}/127.0.0.zone</code></td><td align="center">Yes</td><td align="center">Yes</td><td align="center">Yes</td></tr><tr><td align="left"><a class="link" href="appendix.html#roothint" title="Example 15.5. DNS Root Name Server Hint File: /var/lib/named/root.hint">&#8220;DNS Root Name Server Hint File: /var/lib/named/root.hint&#8221;</a></td><td align="left"><code class="filename">{VLN}/root.hint</code></td><td align="center">Yes</td><td align="center">Yes</td><td align="center">Yes</td></tr></tbody></table></div></div><br class="table-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2588515"></a>Server Preparation: All Servers</h3></div></div></div><p>
+	</p><div class="table"><a name="ch5-filelocations"></a><p class="title"><b>Table 4.1. Domain: <code class="constant">MEGANET</code>, File Locations for Servers</b></p><div class="table-contents"><table summary="Domain: MEGANET, File Locations for Servers" border="1"><colgroup><col align="left"><col align="left"><col align="center"><col align="center"><col align="center"></colgroup><thead><tr><th colspan="2" align="center">File Information</th><th colspan="3" align="center">Server Name</th></tr><tr><th align="center">Source</th><th align="center">Target Location</th><th align="center">MASSIVE</th><th align="center">BLDG1</th><th align="center">BLDG2</th></tr></thead><tbody><tr><td align="left"><a class="link" href="Big500users.html#ch5-massivesmb" title="Example 4.1. Server: MASSIVE (PDC), File: /etc/samba/smb.conf">&#8220;Server: MASSIVE (PDC), File: /etc/samba/smb.conf&#8221;</a></td><td align="left"><code class="filename">/etc/samba/smb.conf</code></td><td align="center">Yes</td><td align="center">No</td><td align="center">No</td></tr><tr><td align="left"><a class="link" href="Big500users.html#ch5-dc-common" title="Example 4.2. Server: MASSIVE (PDC), File: /etc/samba/dc-common.conf">&#8220;Server: MASSIVE (PDC), File: /etc/samba/dc-common.conf&#8221;</a></td><td align="left"><code class="filename">/etc/samba/dc-common.conf</code></td><td align="center">Yes</td><td align="center">No</td><td align="center">No</td></tr><tr><td align="left"><a class="link" href="Big500users.html#ch5-commonsmb" title="Example 4.3. Common Samba Configuration File: /etc/samba/common.conf">&#8220;Common Samba Configuration File: /etc/samba/common.conf&#8221;</a></td><td align="left"><code class="filename">/etc/samba/common.conf</code></td><td align="center">Yes</td><td align="center">Yes</td><td align="center">Yes</td></tr><tr><td align="left"><a class="link" href="Big500users.html#ch5-bldg1-smb" title="Example 4.4. Server: BLDG1 (Member), File: smb.conf">&#8220;Server: BLDG1 (Member), File: smb.conf&#8221;</a></td><td align="left"><code class="filename">/etc/samba/smb.conf</code></td><td align="center">No</td><td align="center">Yes</td><td align="center">No</td></tr><tr><td align="left"><a class="link" href="Big500users.html#ch5-bldg2-smb" title="Example 4.5. Server: BLDG2 (Member), File: smb.conf">&#8220;Server: BLDG2 (Member), File: smb.conf&#8221;</a></td><td align="left"><code class="filename">/etc/samba/smb.conf</code></td><td align="center">No</td><td align="center">No</td><td align="center">Yes</td></tr><tr><td align="left"><a class="link" href="Big500users.html#ch5-dommem-smb" title="Example 4.6. Common Domain Member Include File: dom-mem.conf">&#8220;Common Domain Member Include File: dom-mem.conf&#8221;</a></td><td align="left"><code class="filename">/etc/samba/dommem.conf</code></td><td align="center">No</td><td align="center">Yes</td><td align="center">Yes</td></tr><tr><td align="left"><a class="link" href="Big500users.html#massive-dhcp" title="Example 4.7. Server: MASSIVE, File: dhcpd.conf">&#8220;Server: MASSIVE, File: dhcpd.conf&#8221;</a></td><td align="left"><code class="filename">/etc/dhcpd.conf</code></td><td align="center">Yes</td><td align="center">No</td><td align="center">No</td></tr><tr><td align="left"><a class="link" href="Big500users.html#bldg1dhcp" title="Example 4.8. Server: BLDG1, File: dhcpd.conf">&#8220;Server: BLDG1, File: dhcpd.conf&#8221;</a></td><td align="left"><code class="filename">/etc/dhcpd.conf</code></td><td align="center">No</td><td align="center">Yes</td><td align="center">No</td></tr><tr><td align="left"><a class="link" href="Big500users.html#bldg2dhcp" title="Example 4.9. Server: BLDG2, File: dhcpd.conf">&#8220;Server: BLDG2, File: dhcpd.conf&#8221;</a></td><td align="left"><code class="filename">/etc/dhcpd.conf</code></td><td align="center">No</td><td align="center">No</td><td align="center">Yes</td></tr><tr><td align="left"><a class="link" href="Big500users.html#massive-nameda" title="Example 4.10. Server: MASSIVE, File: named.conf, Part: A">&#8220;Server: MASSIVE, File: named.conf, Part: A&#8221;</a></td><td align="left"><code class="filename">/etc/named.conf (part A)</code></td><td align="center">Yes</td><td align="center">No</td><td align="center">No</td></tr><tr><td align="left"><a class="link" href="Big500users.html#massive-namedb" title="Example 4.11. Server: MASSIVE, File: named.conf, Part: B">&#8220;Server: MASSIVE, File: named.conf, Part: B&#8221;</a></td><td align="left"><code class="filename">/etc/named.conf (part B)</code></td><td align="center">Yes</td><td align="center">No</td><td align="center">No</td></tr><tr><td align="left"><a class="link" href="Big500users.html#massive-namedc" title="Example 4.12. Server: MASSIVE, File: named.conf, Part: C">&#8220;Server: MASSIVE, File: named.conf, Part: C&#8221;</a></td><td align="left"><code class="filename">/etc/named.conf (part C)</code></td><td align="center">Yes</td><td align="center">No</td><td align="center">No</td></tr><tr><td align="left"><a class="link" href="Big500users.html#abmasbizdns" title="Example 4.13. Forward Zone File: abmas.biz.hosts">&#8220;Forward Zone File: abmas.biz.hosts&#8221;</a></td><td align="left"><code class="filename">{VLN}/master/abmas.biz.hosts</code></td><td align="center">Yes</td><td align="center">No</td><td align="center">No</td></tr><tr><td align="left"><a class="link" href="Big500users.html#abmasusdns" title="Example 4.14. Forward Zone File: abmas.biz.hosts">&#8220;Forward Zone File: abmas.biz.hosts&#8221;</a></td><td align="left"><code class="filename">{VLN}/master/abmas.us.hosts</code></td><td align="center">Yes</td><td align="center">No</td><td align="center">No</td></tr><tr><td align="left"><a class="link" href="Big500users.html#bldg12nameda" title="Example 4.15. Servers: BLDG1/BLDG2, File: named.conf, Part: A">&#8220;Servers: BLDG1/BLDG2, File: named.conf, Part: A&#8221;</a></td><td align="left"><code class="filename">/etc/named.conf (part A)</code></td><td align="center">No</td><td align="center">Yes</td><td align="center">Yes</td></tr><tr><td align="left"><a class="link" href="Big500users.html#bldg12namedb" title="Example 4.16. Servers: BLDG1/BLDG2, File: named.conf, Part: B">&#8220;Servers: BLDG1/BLDG2, File: named.conf, Part: B&#8221;</a></td><td align="left"><code class="filename">/etc/named.conf (part B)</code></td><td align="center">No</td><td align="center">Yes</td><td align="center">Yes</td></tr><tr><td align="left"><a class="link" href="appendix.html#loopback" title="Example 15.3. DNS Localhost Forward Zone File: /var/lib/named/localhost.zone">&#8220;DNS Localhost Forward Zone File: /var/lib/named/localhost.zone&#8221;</a></td><td align="left"><code class="filename">{VLN}/localhost.zone</code></td><td align="center">Yes</td><td align="center">Yes</td><td align="center">Yes</td></tr><tr><td align="left"><a class="link" href="appendix.html#dnsloopy" title="Example 15.4. DNS Localhost Reverse Zone File: /var/lib/named/127.0.0.zone">&#8220;DNS Localhost Reverse Zone File: /var/lib/named/127.0.0.zone&#8221;</a></td><td align="left"><code class="filename">{VLN}/127.0.0.zone</code></td><td align="center">Yes</td><td align="center">Yes</td><td align="center">Yes</td></tr><tr><td align="left"><a class="link" href="appendix.html#roothint" title="Example 15.5. DNS Root Name Server Hint File: /var/lib/named/root.hint">&#8220;DNS Root Name Server Hint File: /var/lib/named/root.hint&#8221;</a></td><td align="left"><code class="filename">{VLN}/root.hint</code></td><td align="center">Yes</td><td align="center">Yes</td><td align="center">Yes</td></tr></tbody></table></div></div><br class="table-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id354601"></a>Server Preparation: All Servers</h3></div></div></div><p>
 	The following steps apply to all servers. Follow each step carefully.
-	</p><div class="procedure"><a name="id2588526"></a><p class="title"><b>Procedure 4.1. Server Preparation Steps</b></p><ol type="1"><li><p>
+	</p><div class="procedure"><a name="id354610"></a><p class="title"><b>Procedure 4.1. Server Preparation Steps</b></p><ol type="1"><li><p>
 			Using the UNIX/Linux system tools, set the name of the server as shown in the network
 			topology diagram in <a class="link" href="Big500users.html#chap05net" title="Figure 4.1. Network Topology 500 User Network Using tdbsam passdb backend.">&#8220;Network Topology  500 User Network Using tdbsam passdb backend.&#8221;</a>. For SUSE Linux products, the tool
 			that permits this is called <code class="literal">yast2</code>; for Red Hat Linux products,
@@ -221,8 +221,8 @@
 <code class="prompt">root# </code> hostname -f
 </pre><p>
 			</p></li><li><p>
-			<a class="indexterm" name="id2588590"></a>
-			<a class="indexterm" name="id2588597"></a>
+			<a class="indexterm" name="id354671"></a>
+			<a class="indexterm" name="id354678"></a>
 			Edit your <code class="filename">/etc/hosts</code> file to include the primary names and addresses
 			of all network interfaces that are on the host server. This is necessary so that during
 			startup the system is able to resolve all its own names to the IP address prior to
@@ -230,7 +230,7 @@
 			CUPS print server is started before the DNS server (<code class="literal">named</code>), you 
 			should also include an entry for the printers in the <code class="filename">/etc/hosts</code> file.
 			</p></li><li><p>
-			<a class="indexterm" name="id2588636"></a>
+			<a class="indexterm" name="id354713"></a>
 			All DNS name resolution should be handled locally. To ensure that the server is configured
 			correctly to handle this, edit <code class="filename">/etc/resolv.conf</code> so it has the following
 			content:
@@ -241,8 +241,8 @@
 			This instructs the name resolver function (when configured correctly) to ask the DNS server
 			that is running locally to resolve names to addresses.
 			</p></li><li><p>
-			<a class="indexterm" name="id2588667"></a>
-			<a class="indexterm" name="id2588674"></a>
+			<a class="indexterm" name="id354741"></a>
+			<a class="indexterm" name="id354748"></a>
 			Add the <code class="constant">root</code> user to the password backend:
 </p><pre class="screen">
 <code class="prompt">root# </code> smbpasswd -a root
@@ -255,8 +255,8 @@
 			deleted. If for any reason the account is deleted, you may not be able to recreate this account
 			without considerable trouble.
 			</p></li><li><p>
-			<a class="indexterm" name="id2588719"></a>
-			<a class="indexterm" name="id2588726"></a>
+			<a class="indexterm" name="id354790"></a>
+			<a class="indexterm" name="id354796"></a>
 			Create the username map file to permit the <code class="constant">root</code> account to be called
 			<code class="constant">Administrator</code> from the Windows network environment. To do this, create
 			the file <code class="filename">/etc/samba/smbusers</code> with the following contents:
@@ -294,16 +294,16 @@
 			Follow the instructions in the printer manufacturer's manuals to permit printing 
 			to port 9100.  Use any other port the manufacturer specifies for direct mode, 
 			raw printing.  This allows the CUPS spooler to print using raw mode protocols.
-			<a class="indexterm" name="id2588818"></a>
-			<a class="indexterm" name="id2588824"></a>
+			<a class="indexterm" name="id354876"></a>
+			<a class="indexterm" name="id354883"></a>
 			</p></li><li><p>
-			<a class="indexterm" name="id2588838"></a>
+			<a class="indexterm" name="id354896"></a>
 			Only on the server to which the printer is attached configure the CUPS Print 
 			Queues as follows:
 </p><pre class="screen">
 <code class="prompt">root# </code> lpadmin -p <em class="parameter"><code>printque</code></em> -v socket://<em class="parameter"><code>printer-name</code></em>.abmas.biz:9100 -E
 </pre><p>
-			<a class="indexterm" name="id2588873"></a>
+			<a class="indexterm" name="id354930"></a>
 			This step creates the necessary print queue to use no assigned print filter. This
 			is ideal for raw printing, that is, printing without use of filters.
 			The name <em class="parameter"><code>printque</code></em> is the name you have assigned for
@@ -323,9 +323,9 @@
 <code class="prompt">root# </code> /usr/bin/accept <em class="parameter"><code>printque</code></em>
 </pre><p>
 			</p></li><li><p>
-			<a class="indexterm" name="id2588952"></a>
-			<a class="indexterm" name="id2588959"></a>
-			<a class="indexterm" name="id2588966"></a>
+			<a class="indexterm" name="id355003"></a>
+			<a class="indexterm" name="id355010"></a>
+			<a class="indexterm" name="id355016"></a>
 			This step, as well as the next one, may be omitted where CUPS version 1.1.18
 			or later is in use.  Although it does no harm to follow it anyway, and may
 			help to avoid time spent later trying to figure out why print jobs may be
@@ -336,7 +336,7 @@
 application/octet-stream     application/vnd.cups-raw      0     -
 </pre><p>
 			</p></li><li><p>
-			<a class="indexterm" name="id2589002"></a>
+			<a class="indexterm" name="id355049"></a>
 			Edit the file <code class="filename">/etc/cups/mime.types</code> to uncomment the line:
 </p><pre class="screen">
 application/octet-stream
@@ -359,17 +359,17 @@
 	processes to automap Windows client drives to an application server that is nearest to the client. This
 	is considerably more difficult when a single PDC is used on a routed network. It can be done, but not
 	as elegantly as you see in the next chapter.
-	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2589080"></a>Server-Specific Preparation</h3></div></div></div><p>
+	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id355116"></a>Server-Specific Preparation</h3></div></div></div><p>
 	There are some steps that apply to particular server functionality only. Each step is critical
 	to correct server operation. The following step-by-step installation guidance will assist you 
 	in working through the process of configuring the PDC and then both BDC's.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2589093"></a>Configuration for Server: <code class="constant">MASSIVE</code></h4></div></div></div><p>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id355127"></a>Configuration for Server: <code class="constant">MASSIVE</code></h4></div></div></div><p>
 		The steps presented here attempt to implement Samba installation in a generic manner. While
 		some steps are clearly specific to Linux, it should not be too difficult to apply them to
 		your platform of choice.
-		</p><div class="procedure"><a name="id2589108"></a><p class="title"><b>Procedure 4.2. Primary Domain Controller Preparation</b></p><ol type="1"><li><p>
-			<a class="indexterm" name="id2589120"></a>
-			<a class="indexterm" name="id2589127"></a>
+		</p><div class="procedure"><a name="id355140"></a><p class="title"><b>Procedure 4.2. Primary Domain Controller Preparation</b></p><ol type="1"><li><p>
+			<a class="indexterm" name="id355152"></a>
+			<a class="indexterm" name="id355158"></a>
 			The host server acts as a router between the two internal network segments as well
 			as for all Internet access. This necessitates that IP forwarding be enabled. This can be
 			achieved by adding to the <code class="filename">/etc/rc.d/boot.local</code> an entry as follows:
@@ -397,7 +397,7 @@
 			startup files as follows: (SUSE) <code class="filename">/etc/rc.d/boot.local</code>, (Red Hat)
 			<code class="filename">/etc/rc.d/init.d/rc.local</code>.
 			</p></li><li><p>
-			<a class="indexterm" name="id2589220"></a>
+			<a class="indexterm" name="id355236"></a>
 			The final step that must be completed is to edit the <code class="filename">/etc/nsswitch.conf</code> file.
 			This file controls the operation of the various resolver libraries that are part of the Linux
 			Glibc libraries. Edit this file so that it contains the following entries:
@@ -405,24 +405,24 @@
 hosts:      files dns wins
 </pre><p>
 			</p></li><li><p>
-			<a class="indexterm" name="id2589250"></a>
+			<a class="indexterm" name="id355264"></a>
 			Create and map Windows domain groups to UNIX groups. A sample script is provided in
 			<a class="link" href="Big500users.html#ch5-initgrps" title="Example 4.17. Initialize Groups Script, File: /etc/samba/initGrps.sh">&#8220;Initialize Groups Script, File: /etc/samba/initGrps.sh&#8221;</a>. Create a file containing this script. You called yours
 			<code class="filename">/etc/samba/initGrps.sh</code>. Set this file so it can be executed
 			and then execute the script. An example of the execution of this script as well as its
 			validation are shown in Section 4.3.2, Step 5.
 			</p></li><li><p>
-			<a class="indexterm" name="id2589283"></a>
-			<a class="indexterm" name="id2589289"></a>
-			<a class="indexterm" name="id2589299"></a>
+			<a class="indexterm" name="id355292"></a>
+			<a class="indexterm" name="id355299"></a>
+			<a class="indexterm" name="id355308"></a>
 			For each user who needs to be given a Windows domain account, make an entry in the
 			<code class="filename">/etc/passwd</code> file as well as in the Samba password backend.
 			Use the system tool of your choice to create the UNIX system account, and use the Samba
 			<code class="literal">smbpasswd</code> to create a domain user account.
 			</p><p>
-			<a class="indexterm" name="id2589325"></a>
-			<a class="indexterm" name="id2589332"></a>
-			<a class="indexterm" name="id2589339"></a>
+			<a class="indexterm" name="id355332"></a>
+			<a class="indexterm" name="id355339"></a>
+			<a class="indexterm" name="id355346"></a>
 			There are a number of tools for user management under UNIX, such as
 			<code class="literal">useradd</code>, <code class="literal">adduser</code>, as well as a plethora of custom
 			tools. With the tool of your choice, create a home directory for each user.
@@ -435,7 +435,7 @@
 			file is <code class="filename">/data</code>. Format the file system as required and mount the formatted
 			file system partition using appropriate system tools.
 			</p></li><li><p>
-		<a class="indexterm" name="id2589402"></a>
+		<a class="indexterm" name="id355404"></a>
 			Create the top-level file storage directories for data and applications as follows:
 </p><pre class="screen">
 <code class="prompt">root# </code> mkdir -p /data/{accounts,finsvcs,pidata}
@@ -475,8 +475,8 @@
 <code class="prompt">root# </code> chmod ug+wrx,o+rx,-w /var/lib/samba/profiles/'username'
 </pre><p>
 			</p></li><li><p>
-			<a class="indexterm" name="id2589608"></a>
-			<a class="indexterm" name="id2589615"></a>
+			<a class="indexterm" name="id355597"></a>
+			<a class="indexterm" name="id355604"></a>
 			Create a logon script. It is important that each line is correctly terminated with
 			a carriage return and line-feed combination (i.e., DOS encoding). The following procedure
 			works if the right tools (<code class="constant">unxi2dos</code> and <code class="constant">dos2unix</code>) are installed.
@@ -518,8 +518,8 @@
 		The following steps will guide you through the nuances of implementing BDCs for the broadcast
 		isolated network segments. Remember that if the target installation platform is not Linux, it may
 		be necessary to adapt some commands to the equivalent on the target platform.
-		</p><div class="procedure"><a name="id2589802"></a><p class="title"><b>Procedure 4.3. Backup Domain Controller Configuration Steps</b></p><ol type="1"><li><p>
-			<a class="indexterm" name="id2589813"></a>
+		</p><div class="procedure"><a name="id355775"></a><p class="title"><b>Procedure 4.3. Backup Domain Controller Configuration Steps</b></p><ol type="1"><li><p>
+			<a class="indexterm" name="id355786"></a>
 			The final step that must be completed is to edit the <code class="filename">/etc/nsswitch.conf</code> file.
 			This file controls the operation of the various resolver libraries that are part of the Linux
 			Glibc libraries. Edit this file so that it contains the following entries:
@@ -532,14 +532,14 @@
 			Follow the steps outlined in <a class="link" href="Big500users.html#ch5-procstart" title="Process Startup Configuration">&#8220;Process Startup Configuration&#8221;</a> to start all services. Do not
 			start Samba at this time. Samba is controlled by the process called <code class="literal">smb</code>.
 			</p></li><li><p>
-			<a class="indexterm" name="id2589865"></a>
+			<a class="indexterm" name="id355833"></a>
 			You must now attempt to join the domain member servers to the domain. The following
 			instructions should be executed to effect this:
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc join 
 </pre><p>
 			</p></li><li><p>
-			<a class="indexterm" name="id2589897"></a>
+			<a class="indexterm" name="id355864"></a>
 			You now start the Samba services by executing:
 </p><pre class="screen">
 <code class="prompt">root# </code> service smb start
@@ -548,7 +548,7 @@
                         Your server is ready for validation testing. Do not proceed with the steps in
                         <a class="link" href="Big500users.html#ch5-domsvrspec" title="Configuration Specific to Domain Member Servers: BLDG1, BLDG2">&#8220;Configuration Specific to Domain Member Servers: BLDG1, BLDG2&#8221;</a> until after the operation of the server has been
                         validated following the same methods as outlined in <a class="link" href="secure.html#ch4valid" title="Validation">&#8220;Validation&#8221;</a>.
-                        </p></li></ol></div></div></div><div class="example"><a name="ch5-massivesmb"></a><p class="title"><b>Example 4.1. Server: MASSIVE (PDC), File: <code class="filename">/etc/samba/smb.conf</code></b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2589983"></a><em class="parameter"><code>workgroup = MEGANET</code></em></td></tr><tr><td><a class="indexterm" name="id2589995"></a><em class="parameter"><code>netbios name = MASSIVE</code></em></td></tr><tr><td><a class="indexterm" name="id2590006"></a><em class="parameter"><code>interfaces = eth1, lo</code></em></td></tr><tr><td><a class="indexterm" name="id2590018"></a><em class="parameter"><code>bind interfaces only = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2590030"></a><em class="parameter"><code>passdb backend = tdbsam</code></em></td></tr><tr><td><a class="indexterm" name="id2590042"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id2590054"></a><em class="parameter"><code>add user script = /usr/sbin/useradd -m '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2590066"></a><em class="parameter"><code>delete user script = /usr/sbin/userdel -r '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2590078"></a><em class="parameter"><code>add group script = /usr/sbin/groupadd '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id2590090"></a><em class="parameter"><code>delete group script = /usr/sbin/groupdel '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id2590102"></a><em class="parameter"><code>add user to group script = /usr/sbin/usermod -G '%g' '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2590115"></a><em class="parameter"><code>add machine script = /usr/sbin/useradd -s /bin/false -d /var/lib/nobody '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2590128"></a><em class="parameter"><code>preferred master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2590140"></a><em class="parameter"><code>wins support = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2590151"></a><em class="parameter"><code>include = /etc/samba/dc-common.conf</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[accounts]</code></em></td></tr><tr><td><a class="indexterm" name="id2590172"></a><em class="parameter"><code>comment = Accounting Files</code></em></td></tr><tr><td><a class="indexterm" name="id2590184"></a><em class="parameter"><code>path = /data/accounts</code></em></td></tr><tr><td><a class="indexterm" name="id2590196"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[service]</code></em></td></tr><tr><td><a class="indexterm" name="id2590216"></a><em class="parameter"><code>comment = Financial Services Files</code></em></td></tr><tr><td><a class="indexterm" name="id2590228"></a><em class="parameter"><code>path = /data/service</code></em></td></tr><tr><td><a class="indexterm" name="id2590240"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[pidata]</code></em></td></tr><tr><td><a class="indexterm" name="id2590260"></a><em class="parameter"><code>comment = Property Insurance Files</code></em></td></tr><tr><td><a class="indexterm" name="id2590272"></a><em class="parameter"><code>path = /data/pidata</code></em></td></tr><tr><td><a class="indexterm" name="id2590284"></a><em class="parameter"><code>read only = No</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch5-dc-common"></a><p class="title"><b>Example 4.2. Server: MASSIVE (PDC), File: <code class="filename">/etc/samba/dc-common.conf</code></b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2590331"></a><em class="parameter"><code>shutdown script = /var/lib/samba/scripts/shutdown.sh</code></em></td></tr><tr><td><a class="indexterm" name="id2590344"></a><em class="parameter"><code>abort shutdown script = /sbin/shutdown -c</code></em></td></tr><tr><td><a class="indexterm" name="id2590356"></a><em class="parameter"><code>logon script = scripts\logon.bat</code></em></td></tr><tr><td><a class="indexterm" name="id2590368"></a><em class="parameter"><code>logon path = \%L\profiles\%U</code></em></td></tr><tr><td><a class="indexterm" name="id2590380"></a><em class="parameter"><code>logon drive = X:</code></em></td></tr><tr><td><a class="indexterm" name="id2590392"></a><em class="parameter"><code>logon home = \%L\%U</code></em></td></tr><tr><td><a class="indexterm" name="id2590403"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2590415"></a><em class="parameter"><code>preferred master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2590427"></a><em class="parameter"><code>include = /etc/samba/common.conf</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id2590448"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id2590459"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id2590471"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2590482"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id2590503"></a><em class="parameter"><code>comment = Network Logon Service</code></em></td></tr><tr><td><a class="indexterm" name="id2590515"></a><em class="parameter"><code>path = /var/lib/samba/netlogon</code></em></td></tr><tr><td><a class="indexterm" name="id2590527"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2590538"></a><em class="parameter"><code>locking = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[profiles]</code></em></td></tr><tr><td><a class="indexterm" name="id2590559"></a><em class="parameter"><code>comment = Profile Share</code></em></td></tr><tr><td><a class="indexterm" name="id2590571"></a><em class="parameter"><code>path = /var/lib/samba/profiles</code></em></td></tr><tr><td><a class="indexterm" name="id2590582"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2590594"></a><em class="parameter"><code>profile acls = Yes</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch5-commonsmb"></a><p class="title"><b>Example 4.3. Common Samba Configuration File: <code class="filename">/etc/samba/common.conf</code></b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2590639"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id2590650"></a><em class="parameter"><code>log level = 1</code></em></td></tr><tr><td><a class="indexterm" name="id2590662"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id2590673"></a><em class="parameter"><code>log file = /var/log/samba/%m</code></em></td></tr><tr><td><a class="indexterm" name="id2590685"></a><em class="parameter"><code>max log size = 50</code></em></td></tr><tr><td><a class="indexterm" name="id2590697"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id2590708"></a><em class="parameter"><code>name resolve order = wins bcast hosts</code></em></td></tr><tr><td><a class="indexterm" name="id2590721"></a><em class="parameter"><code>time server = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2590732"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id2590744"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id2590756"></a><em class="parameter"><code>shutdown script = /var/lib/samba/scripts/shutdown.sh</code></em></td></tr><tr><td><a class="indexterm" name="id2590769"></a><em class="parameter"><code>abort shutdown script = /sbin/shutdown -c</code></em></td></tr><tr><td><a class="indexterm" name="id2590781"></a><em class="parameter"><code>utmp = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2590792"></a><em class="parameter"><code>map acl inherit = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2590804"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id2590816"></a><em class="parameter"><code>veto files = /*.eml/*.nws/*.{*}/</code></em></td></tr><tr><td><a class="indexterm" name="id2590828"></a><em class="parameter"><code>veto oplock files = /*.doc/*.xls/*.mdb/</code></em></td></tr><tr><td><a class="indexterm" name="id2590840"></a><em class="parameter"><code>include =  </code></em></td></tr><tr><td># Share and Service Definitions are common to all servers</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2590864"></a><em class="parameter"><code>comment = SMB Print Spool</code></em></td></tr><tr><td><a class="indexterm" name="id2590876"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2590888"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2590900"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2590911"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2590923"></a><em class="parameter"><code>default devmode = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2590935"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[apps]</code></em></td></tr><tr><td><a class="indexterm" name="id2590955"></a><em class="parameter"><code>comment = Application Files</code></em></td></tr><tr><td><a class="indexterm" name="id2590967"></a><em class="parameter"><code>path = /apps</code></em></td></tr><tr><td><a class="indexterm" name="id2590979"></a><em class="parameter"><code>admin users = bjordan</code></em></td></tr><tr><td><a class="indexterm" name="id2590990"></a><em class="parameter"><code>read only = No</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch5-bldg1-smb"></a><p class="title"><b>Example 4.4. Server: BLDG1 (Member), File: smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2591033"></a><em class="parameter"><code>workgroup = MEGANET</code></em></td></tr><tr><td><a class="indexterm" name="id2591045"></a><em class="parameter"><code>netbios name = BLDG1</code></em></td></tr><tr><td><a class="indexterm" name="id2591057"></a><em class="parameter"><code>include = /etc/samba/dom-mem.conf</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch5-bldg2-smb"></a><p class="title"><b>Example 4.5. Server: BLDG2 (Member), File: smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2591100"></a><em class="parameter"><code>workgroup = MEGANET</code></em></td></tr><tr><td><a class="indexterm" name="id2591111"></a><em class="parameter"><code>netbios name = BLDG2</code></em></td></tr><tr><td><a class="indexterm" name="id2591123"></a><em class="parameter"><code>include = /etc/samba/dom-mem.conf</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch5-dommem-smb"></a><p class="title"><b>Example 4.6. Common Domain Member Include File: dom-mem.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2591166"></a><em class="parameter"><code>shutdown script = /var/lib/samba/scripts/shutdown.sh</code></em></td></tr><tr><td><a class="indexterm" name="id2591179"></a><em class="parameter"><code>abort shutdown script = /sbin/shutdown -c</code></em></td></tr><tr><td><a class="indexterm" name="id2591191"></a><em class="parameter"><code>preferred master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2591203"></a><em class="parameter"><code>wins server = 172.16.0.1</code></em></td></tr><tr><td><a class="indexterm" name="id2591215"></a><em class="parameter"><code>idmap uid = 15000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2591226"></a><em class="parameter"><code>idmap gid = 15000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2591238"></a><em class="parameter"><code>include = /etc/samba/common.conf</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="massive-dhcp"></a><p class="title"><b>Example 4.7. Server: MASSIVE, File: dhcpd.conf</b></p><div class="example-contents"><pre class="screen">
+                        </p></li></ol></div></div></div><div class="example"><a name="ch5-massivesmb"></a><p class="title"><b>Example 4.1. Server: MASSIVE (PDC), File: <code class="filename">/etc/samba/smb.conf</code></b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id355946"></a><em class="parameter"><code>workgroup = MEGANET</code></em></td></tr><tr><td><a class="indexterm" name="id355957"></a><em class="parameter"><code>netbios name = MASSIVE</code></em></td></tr><tr><td><a class="indexterm" name="id355969"></a><em class="parameter"><code>interfaces = eth1, lo</code></em></td></tr><tr><td><a class="indexterm" name="id355980"></a><em class="parameter"><code>bind interfaces only = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id355992"></a><em class="parameter"><code>passdb backend = tdbsam</code></em></td></tr><tr><td><a class="indexterm" name="id356003"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id356015"></a><em class="parameter"><code>add user script = /usr/sbin/useradd -m '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id356026"></a><em class="parameter"><code>delete user script = /usr/sbin/userdel -r '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id356038"></a><em class="parameter"><code>add group script = /usr/sbin/groupadd '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id356050"></a><em class="parameter"><code>delete group script = /usr/sbin/groupdel '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id356062"></a><em class="parameter"><code>add user to group script = /usr/sbin/usermod -G '%g' '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id356074"></a><em class="parameter"><code>add machine script = /usr/sbin/useradd -s /bin/false -d /var/lib/nobody '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id356086"></a><em class="parameter"><code>preferred master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id356097"></a><em class="parameter"><code>wins support = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id356109"></a><em class="parameter"><code>include = /etc/samba/dc-common.conf</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[accounts]</code></em></td></tr><tr><td><a class="indexterm" name="id356129"></a><em class="parameter"><code>comment = Accounting Files</code></em></td></tr><tr><td><a class="indexterm" name="id356141"></a><em class="parameter"><code>path = /data/accounts</code></em></td></tr><tr><td><a class="indexterm" name="id356152"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[service]</code></em></td></tr><tr><td><a class="indexterm" name="id356173"></a><em class="parameter"><code>comment = Financial Services Files</code></em></td></tr><tr><td><a class="indexterm" name="id356184"></a><em class="parameter"><code>path = /data/service</code></em></td></tr><tr><td><a class="indexterm" name="id356196"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[pidata]</code></em></td></tr><tr><td><a class="indexterm" name="id356216"></a><em class="parameter"><code>comment = Property Insurance Files</code></em></td></tr><tr><td><a class="indexterm" name="id356228"></a><em class="parameter"><code>path = /data/pidata</code></em></td></tr><tr><td><a class="indexterm" name="id356239"></a><em class="parameter"><code>read only = No</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch5-dc-common"></a><p class="title"><b>Example 4.2. Server: MASSIVE (PDC), File: <code class="filename">/etc/samba/dc-common.conf</code></b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id356286"></a><em class="parameter"><code>shutdown script = /var/lib/samba/scripts/shutdown.sh</code></em></td></tr><tr><td><a class="indexterm" name="id356298"></a><em class="parameter"><code>abort shutdown script = /sbin/shutdown -c</code></em></td></tr><tr><td><a class="indexterm" name="id356309"></a><em class="parameter"><code>logon script = scripts\logon.bat</code></em></td></tr><tr><td><a class="indexterm" name="id356321"></a><em class="parameter"><code>logon path = \%L\profiles\%U</code></em></td></tr><tr><td><a class="indexterm" name="id356332"></a><em class="parameter"><code>logon drive = X:</code></em></td></tr><tr><td><a class="indexterm" name="id356344"></a><em class="parameter"><code>logon home = \%L\%U</code></em></td></tr><tr><td><a class="indexterm" name="id356355"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id356367"></a><em class="parameter"><code>preferred master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id356378"></a><em class="parameter"><code>include = /etc/samba/common.conf</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id356399"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id356410"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id356422"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id356433"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id356454"></a><em class="parameter"><code>comment = Network Logon Service</code></em></td></tr><tr><td><a class="indexterm" name="id356465"></a><em class="parameter"><code>path = /var/lib/samba/netlogon</code></em></td></tr><tr><td><a class="indexterm" name="id356477"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id356488"></a><em class="parameter"><code>locking = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[profiles]</code></em></td></tr><tr><td><a class="indexterm" name="id356509"></a><em class="parameter"><code>comment = Profile Share</code></em></td></tr><tr><td><a class="indexterm" name="id356520"></a><em class="parameter"><code>path = /var/lib/samba/profiles</code></em></td></tr><tr><td><a class="indexterm" name="id356532"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id356543"></a><em class="parameter"><code>profile acls = Yes</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch5-commonsmb"></a><p class="title"><b>Example 4.3. Common Samba Configuration File: <code class="filename">/etc/samba/common.conf</code></b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id356586"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id356598"></a><em class="parameter"><code>log level = 1</code></em></td></tr><tr><td><a class="indexterm" name="id356610"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id356621"></a><em class="parameter"><code>log file = /var/log/samba/%m</code></em></td></tr><tr><td><a class="indexterm" name="id356633"></a><em class="parameter"><code>max log size = 50</code></em></td></tr><tr><td><a class="indexterm" name="id356644"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id356656"></a><em class="parameter"><code>name resolve order = wins bcast hosts</code></em></td></tr><tr><td><a class="indexterm" name="id356667"></a><em class="parameter"><code>time server = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id356679"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id356690"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id356702"></a><em class="parameter"><code>shutdown script = /var/lib/samba/scripts/shutdown.sh</code></em></td></tr><tr><td><a class="indexterm" name="id356713"></a><em class="parameter"><code>abort shutdown script = /sbin/shutdown -c</code></em></td></tr><tr><td><a class="indexterm" name="id356725"></a><em class="parameter"><code>utmp = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id356737"></a><em class="parameter"><code>map acl inherit = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id356748"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id356760"></a><em class="parameter"><code>veto files = /*.eml/*.nws/*.{*}/</code></em></td></tr><tr><td><a class="indexterm" name="id356771"></a><em class="parameter"><code>veto oplock files = /*.doc/*.xls/*.mdb/</code></em></td></tr><tr><td><a class="indexterm" name="id356783"></a><em class="parameter"><code>include =  </code></em></td></tr><tr><td># Share and Service Definitions are common to all servers</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id356807"></a><em class="parameter"><code>comment = SMB Print Spool</code></em></td></tr><tr><td><a class="indexterm" name="id356819"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id356830"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id356842"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id356853"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id356864"></a><em class="parameter"><code>default devmode = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id356876"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[apps]</code></em></td></tr><tr><td><a class="indexterm" name="id356896"></a><em class="parameter"><code>comment = Application Files</code></em></td></tr><tr><td><a class="indexterm" name="id356908"></a><em class="parameter"><code>path = /apps</code></em></td></tr><tr><td><a class="indexterm" name="id356919"></a><em class="parameter"><code>admin users = bjordan</code></em></td></tr><tr><td><a class="indexterm" name="id356931"></a><em class="parameter"><code>read only = No</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch5-bldg1-smb"></a><p class="title"><b>Example 4.4. Server: BLDG1 (Member), File: smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id356973"></a><em class="parameter"><code>workgroup = MEGANET</code></em></td></tr><tr><td><a class="indexterm" name="id356984"></a><em class="parameter"><code>netbios name = BLDG1</code></em></td></tr><tr><td><a class="indexterm" name="id356996"></a><em class="parameter"><code>include = /etc/samba/dom-mem.conf</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch5-bldg2-smb"></a><p class="title"><b>Example 4.5. Server: BLDG2 (Member), File: smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id357038"></a><em class="parameter"><code>workgroup = MEGANET</code></em></td></tr><tr><td><a class="indexterm" name="id357049"></a><em class="parameter"><code>netbios name = BLDG2</code></em></td></tr><tr><td><a class="indexterm" name="id357061"></a><em class="parameter"><code>include = /etc/samba/dom-mem.conf</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch5-dommem-smb"></a><p class="title"><b>Example 4.6. Common Domain Member Include File: dom-mem.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id357103"></a><em class="parameter"><code>shutdown script = /var/lib/samba/scripts/shutdown.sh</code></em></td></tr><tr><td><a class="indexterm" name="id357114"></a><em class="parameter"><code>abort shutdown script = /sbin/shutdown -c</code></em></td></tr><tr><td><a class="indexterm" name="id357126"></a><em class="parameter"><code>preferred master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id357138"></a><em class="parameter"><code>wins server = 172.16.0.1</code></em></td></tr><tr><td><a class="indexterm" name="id357149"></a><em class="parameter"><code>idmap uid = 15000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id357161"></a><em class="parameter"><code>idmap gid = 15000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id357172"></a><em class="parameter"><code>include = /etc/samba/common.conf</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="massive-dhcp"></a><p class="title"><b>Example 4.7. Server: MASSIVE, File: dhcpd.conf</b></p><div class="example-contents"><pre class="screen">
 # Abmas Accounting Inc.
 
 default-lease-time 86400;
@@ -898,8 +898,8 @@
 net groupmap add ntgroup="Financial Services"  unixgroup=finsrvcs type=d
 net groupmap add ntgroup="Insurance Group"     unixgroup=piops type=d
 </pre></div></div><br class="example-break"><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="ch5-procstart"></a>Process Startup Configuration</h3></div></div></div><p>
-		<a class="indexterm" name="id2591594"></a>
-		<a class="indexterm" name="id2591600"></a>
+		<a class="indexterm" name="id357460"></a>
+		<a class="indexterm" name="id357467"></a>
         There are two essential steps to process startup configuration. A process
         must be configured so that it is automatically restarted each time the server
         is rebooted. This step involves use of the <code class="literal">chkconfig</code> tool that
@@ -908,7 +908,7 @@
         directories. Links are created so that when the system run-level is changed, the
         necessary start or kill script is run.
         </p><p>
-        <a class="indexterm" name="id2591636"></a>
+        <a class="indexterm" name="id357499"></a>
         In the event that a service is provided not as a daemon but via the internetworking
         super daemon (<code class="literal">inetd</code> or <code class="literal">xinetd</code>), then the <code class="literal">chkconfig</code>
         tool makes the necessary entries in the <code class="filename">/etc/xinetd.d</code> directory
@@ -918,10 +918,10 @@
         Last, each service must be started to permit system validation to proceed. The following steps
 		are for a Red Hat Linux system, please adapt them to suit the target OS platform on which you 
 		are installing Samba.
-        </p><div class="procedure"><a name="id2591681"></a><p class="title"><b>Procedure 4.4. Process Startup Configuration Steps</b></p><ol type="1"><li><p>
+        </p><div class="procedure"><a name="id357538"></a><p class="title"><b>Procedure 4.4. Process Startup Configuration Steps</b></p><ol type="1"><li><p>
                 Use the standard system tool to configure each service to restart
                 automatically at every system reboot. For example,
-                <a class="indexterm" name="id2591695"></a>
+                <a class="indexterm" name="id357551"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> chkconfig dhpc on
 <code class="prompt">root# </code> chkconfig named on
@@ -930,9 +930,9 @@
 <code class="prompt">root# </code> chkconfig swat on
 </pre><p>
                 </p></li><li><p>
-                <a class="indexterm" name="id2591745"></a>
-                <a class="indexterm" name="id2591752"></a>
-                <a class="indexterm" name="id2591759"></a>
+                <a class="indexterm" name="id357600"></a>
+                <a class="indexterm" name="id357607"></a>
+                <a class="indexterm" name="id357613"></a>
                 Now start each service to permit the system to be validated.
                 Execute each of the following in the sequence shown:
 
@@ -946,11 +946,11 @@
                 </p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="ch5wincfg"></a>Windows Client Configuration</h3></div></div></div><p>
 	The procedure for desktop client configuration for the network in this chapter is similar to
 	that used for the previous one. There are a few subtle changes that should be noted.
-	</p><div class="procedure"><a name="id2591824"></a><p class="title"><b>Procedure 4.5. Windows Client Configuration Steps</b></p><ol type="1"><li><p>
+	</p><div class="procedure"><a name="id357674"></a><p class="title"><b>Procedure 4.5. Windows Client Configuration Steps</b></p><ol type="1"><li><p>
 		Install MS Windows XP Professional. During installation, configure the client to use DHCP for 
 		TCP/IP protocol configuration.
-		<a class="indexterm" name="id2591838"></a>
-		<a class="indexterm" name="id2591845"></a>
+		<a class="indexterm" name="id357686"></a>
+		<a class="indexterm" name="id357693"></a>
 		DHCP configures all Windows clients to use the WINS Server address that has been defined
 		for the local subnet.
 		</p></li><li><p>
@@ -985,7 +985,7 @@
 		also configure use of the identical printers that are located in the financial services department.
 		Install printers on each machine using the following steps:
 
-			</p><div class="procedure"><a name="id2591976"></a><p class="title"><b>Procedure 4.6. Steps to Install Printer Drivers on Windows Clients</b></p><ol type="1"><li><p>
+			</p><div class="procedure"><a name="id357809"></a><p class="title"><b>Procedure 4.6. Steps to Install Printer Drivers on Windows Clients</b></p><ol type="1"><li><p>
 				Click <span class="guimenu">Start</span> &#8594; <span class="guimenuitem">Settings</span> &#8594; <span class="guimenuitem">Printers</span>+<span class="guiicon">Add Printer</span>+<span class="guibutton">Next</span>. Do not click <span class="guimenuitem">Network printer</span>.
 					Ensure that <span class="guimenuitem">Local printer</span> is selected.
 				</p></li><li><p>
@@ -1038,7 +1038,7 @@
 		user, of course.
 		</p></li><li><p>
 		Instruct all users to log onto the workstation using their assigned username and password.
-		</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2592280"></a>Key Points Learned</h3></div></div></div><p>
+		</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id358090"></a>Key Points Learned</h3></div></div></div><p>
 		The network you have just deployed has been a valuable exercise in forced constraint.
 		You have deployed a network that works well, although you may soon start to see
 		performance problems, at which time the modifications demonstrated in <a class="link" href="happy.html" title="Chapter 5. Making Happy Users">&#8220;Making Happy Users&#8221;</a>
@@ -1054,33 +1054,33 @@
 			to resources on the domain member servers
 			</p></li><li><p>
 			The introduction of roaming profiles
-			</p></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2592338"></a>Questions and Answers</h2></div></div></div><p>
-	</p><div class="qandaset"><dl><dt> <a href="Big500users.html#id2592354">
+			</p></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id358142"></a>Questions and Answers</h2></div></div></div><p>
+	</p><div class="qandaset"><dl><dt> <a href="Big500users.html#id358158">
 		The example smb.conf files in this chapter make use of the include facility.
 		How may I get to see what the actual working smb.conf settings are?
-		</a></dt><dt> <a href="Big500users.html#id2592403">
+		</a></dt><dt> <a href="Big500users.html#id358205">
 		Why does the include file common.conf have an empty include statement?
-		</a></dt><dt> <a href="Big500users.html#id2592465">
+		</a></dt><dt> <a href="Big500users.html#id358262">
 		I accept that the simplest configuration necessary to do the job is the best. The use of tdbsam
 		passdb backend is much simpler than having to manage an LDAP-based ldapsam passdb backend.
 		I tried using rsync to replicate the passdb.tdb, and it seems to work fine!
 		So what is the problem?
-		</a></dt><dt> <a href="Big500users.html#id2592520">
+		</a></dt><dt> <a href="Big500users.html#id358312">
 		You are using DHCP Relay enabled on the routers as well as a local DHCP server. Will this cause a clash?
-		</a></dt><dt> <a href="Big500users.html#id2592551">
+		</a></dt><dt> <a href="Big500users.html#id358337">
 		How does the Windows client find the PDC?
-		</a></dt><dt> <a href="Big500users.html#id2592573">
+		</a></dt><dt> <a href="Big500users.html#id358356">
 		Why did you enable IP forwarding (routing) only on the server called MASSIVE?
-		</a></dt><dt> <a href="Big500users.html#id2592604">
+		</a></dt><dt> <a href="Big500users.html#id358383">
 		You did nothing special to implement roaming profiles. Why?
-		</a></dt><dt> <a href="Big500users.html#id2592624">
+		</a></dt><dt> <a href="Big500users.html#id358401">
 		On the domain member computers, you configured winbind in the /etc/nsswitch.conf file.
 		You did not configure any PAM settings. Is this an omission?
-		</a></dt><dt> <a href="Big500users.html#id2592656">
+		</a></dt><dt> <a href="Big500users.html#id358428">
 		You are starting SWAT up on this example but have not discussed that anywhere. Why did you do this?
-		</a></dt><dt> <a href="Big500users.html#id2592697">
+		</a></dt><dt> <a href="Big500users.html#id358465">
 		The domain controller has an auto-shutdown script. Isn't that dangerous?
-		</a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%"><tbody><tr class="question"><td align="left" valign="top"><a name="id2592354"></a><a name="id2592356"></a></td><td align="left" valign="top"><p>
+		</a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%"><tbody><tr class="question"><td align="left" valign="top"><a name="id358158"></a><a name="id358160"></a></td><td align="left" valign="top"><p>
 		The example <code class="filename">smb.conf</code> files in this chapter make use of the <em class="parameter"><code>include</code></em> facility.
 		How may I get to see what the actual working <code class="filename">smb.conf</code> settings are?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
@@ -1088,7 +1088,7 @@
 </p><pre class="screen">
 <code class="prompt">root# </code> testparm -s | less
 </pre><p>
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2592403"></a><a name="id2592405"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id358205"></a><a name="id358207"></a></td><td align="left" valign="top"><p>
 		Why does the include file <code class="filename">common.conf</code> have an empty include statement?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		The use of the empty include statement nullifies further includes. For example, let's say you 
@@ -1101,7 +1101,7 @@
 		If the include parameter was not in the common.conf file, the final <code class="filename">smb.conf</code> file leaves
 		the include in place, even though the file it points to has already been included. This is a bug
 		that will be fixed at a future date.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2592465"></a><a name="id2592468"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id358262"></a><a name="id358264"></a></td><td align="left" valign="top"><p>
 		I accept that the simplest configuration necessary to do the job is the best. The use of <em class="parameter"><code>tdbsam</code></em>
 		passdb backend is much simpler than having to manage an LDAP-based <em class="parameter"><code>ldapsam</code></em> passdb backend.
 		I tried using <code class="literal">rsync</code> to replicate the <code class="filename">passdb.tdb</code>, and it seems to work fine!
@@ -1111,7 +1111,7 @@
 		contents between the PDC and BDCs. The most notable symptom is that workstations may not be able
 		to log onto the network following a reboot and may have to rejoin the domain to recover network
 		access capability.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2592520"></a><a name="id2592523"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id358312"></a><a name="id358314"></a></td><td align="left" valign="top"><p>
 		You are using DHCP Relay enabled on the routers as well as a local DHCP server. Will this cause a clash?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		No. It is possible to have as many DHCP servers on a network segment as makes sense. A DHCP server
@@ -1120,26 +1120,26 @@
 		</p><p>
 		The only exception to this rule is when the client makes a directed request from a specific DHCP server
 		for renewal of the lease it has. This means that under normal circumstances there is no risk of a clash.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2592551"></a><a name="id2592553"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id358337"></a><a name="id358339"></a></td><td align="left" valign="top"><p>
 		How does the Windows client find the PDC?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		The Windows client obtains the WINS server address from the DHCP lease information. It also
 		obtains from the DHCP lease information the parameter that causes it to use directed UDP (UDP Unicast)
 		to register itself with the WINS server and to obtain enumeration of vital network information to 
 		enable it to operate successfully.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2592573"></a><a name="id2592576"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id358356"></a><a name="id358358"></a></td><td align="left" valign="top"><p>
 		Why did you enable IP forwarding (routing) only on the server called <code class="constant">MASSIVE</code>?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		The server called <code class="constant">MASSIVE</code> is acting as a router to the Internet. No other server
 		(BLDG1 or BLDG2) has any need for IP forwarding because they are attached only to their own network.
 		Route table entries are needed to direct MASSIVE to send all traffic intended for the remote network
 		segments to the router that is its gateway to them.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2592604"></a><a name="id2592606"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id358383"></a><a name="id358386"></a></td><td align="left" valign="top"><p>
 		You did nothing special to implement roaming profiles. Why?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		Unless configured to do otherwise, the default behavior with Samba-3 and Windows XP Professional
 		clients is to use roaming profiles.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2592624"></a><a name="id2592626"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id358401"></a><a name="id358404"></a></td><td align="left" valign="top"><p>
 		On the domain member computers, you configured winbind in the <code class="filename">/etc/nsswitch.conf</code> file.
 		You did not configure any PAM settings. Is this an omission?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
@@ -1148,7 +1148,7 @@
 		member servers using Windows networking usernames and passwords, it is necessary to configure PAM
 		to enable the use of winbind. Samba makes use only of the identity resolution facilities of the name
 		service switch (NSS).
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2592656"></a><a name="id2592658"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id358428"></a><a name="id358431"></a></td><td align="left" valign="top"><p>
 		You are starting SWAT up on this example but have not discussed that anywhere. Why did you do this?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		Oh, I did not think you would notice that. It is there so that it can be used. This is more fully discussed
@@ -1157,7 +1157,7 @@
 		of <code class="filename">smb.conf</code> <em class="parameter"><code>include</code></em> files because SWAT optimizes them out into an aggregated 
 		file but leaves in place a broken reference to the top-layer include file. SWAT was not designed to 
 		handle this functionality gracefully.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2592697"></a><a name="id2592699"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id358465"></a><a name="id358467"></a></td><td align="left" valign="top"><p>
 		The domain controller has an auto-shutdown script. Isn't that dangerous?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		Well done, you spotted that! I guess it is dangerous. It is good to know that you can do this, though.

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/DMSMig.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/DMSMig.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/DMSMig.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part II. Domain Members, Updating Samba and Migration</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="index.html" title="Samba-3 by Example"><link rel="prev" href="2000users.html" title="Chapter 6. A Distributed 2000-User Network"><link rel="next" href="unixclients.html" title="Chapter 7. Adding Domain Member Servers and Clients"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part II. Domain Members, Updating Samba and Migration</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="2000users.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="unixclients.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="DMSMig"></a>Part II. Domain Members, Updating Samba and Migration</h1></div></div></div><div class="partintro" lang="en"><div><div><div><h1 class="title"><a name="id2611251"></a>Domain Members, Updating Samba and Migration</h1></div></div></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part II. Domain Members, Updating Samba and Migration</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="index.html" title="Samba-3 by Example"><link rel="prev" href="2000users.html" title="Chapter 6. A Distributed 2000-User Network"><link rel="next" href="unixclients.html" title="Chapter 7. Adding Domain Member Servers and Clients"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part II. Domain Members, Updating Samba and Migration</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="2000users.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="unixclients.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="DMSMig"></a>Part II. Domain Members, Updating Samba and Migration</h1></div></div></div><div class="partintro" lang="en"><div><div><div><h1 class="title"><a name="id375363"></a>Domain Members, Updating Samba and Migration</h1></div></div></div><p>
 This section <span class="emphasis"><em>Samba-3 by Example</em></span> covers two main topics: How to add
 Samba Domain Member Servers and Samba Domain Member Clients to a Samba domain, the other
 subject is that of how to migrate from and NT4 Domain, a NetWare server, or from an earlier
@@ -7,4 +7,4 @@
 Those who are making use of the chapter on Adding UNIX clients and servers running Samba
 to a Samba or a Windows networking domain may also benefit by referring to the book
 <span class="emphasis"><em>The Official Samba-3 HOWTO and Reference Guide.</em></span>
-</p><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="unixclients.html">7. Adding Domain Member Servers and Clients</a></span></dt><dd><dl><dt><span class="sect1"><a href="unixclients.html#id2611392">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="unixclients.html#id2611445">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="unixclients.html#id2611480">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="unixclients.html#id2611509">Technical Issues</a></span></dt><dt><span class="sect2"><a href="unixclients.html#id2612158">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="unixclients.html#id2612258">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></span></dt><dt><span class="sect2"><a href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a></span></dt><dt><span class="sect2"><a href="unixclients.html#dcwonss">NT4/Samba Domain with Samba Domain Member Server without NSS Support</a></span></dt><dt><span class="sect2"><a href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></span></dt><dt><span class="sect2"><a href="unixclients.html#id2618464">UNIX/Linux Client Domain Member</a></span></dt><dt><span class="sect2"><a href="unixclients.html#id2619038">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="unixclients.html#id2619093">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="upgrades.html">8. Updating Samba-3</a></span></dt><dd><dl><dt><span class="sect1"><a href="upgrades.html#id2620252">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrades.html#id2620348">Cautions and Notes</a></span></dt></dl></dd><dt><span class="sect1"><a href="upgrades.html#id2621677">Upgrading from Samba 1.x and 2.x to Samba-3</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a></span></dt><dt><span class="sect2"><a href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a></span></dt><dt><span class="sect2"><a href="upgrades.html#id2622379">Samba-2.x with LDAP Support</a></span></dt></dl></dd><dt><span class="sect1"><a href="upgrades.html#id2622561">Updating a Samba-3 Installation</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrades.html#id2622671">Samba-3 to Samba-3 Updates on the Same Server</a></span></dt><dt><span class="sect2"><a href="upgrades.html#id2622874">Migrating Samba-3 to a New Server</a></span></dt><dt><span class="sect2"><a href="upgrades.html#id2623289">Migration of Samba Accounts to Active Directory</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ntmigration.html">9. Migrating NT4 Domain to Samba-3</a></span></dt><dd><dl><dt><span class="sect1"><a href="ntmigration.html#id2623461">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntmigration.html#id2623546">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntmigration.html#id2623601">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntmigration.html#id2623787">Technical Issues</a></span></dt><dt><span class="sect2"><a href="ntmigration.html#id2624110">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntmigration.html#id2624136">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntmigration.html#id2624277">NT4 Migration Using LDAP Backend</a></span></dt><dt><span class="sect2"><a href="ntmigration.html#id2626735">NT4 Migration Using tdbsam Backend</a></span></dt><dt><span class="sect2"><a href="ntmigration.html#id2627142">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntmigration.html#id2627180">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="nw4migration.html">10. Migrating NetWare Server to Samba-3</a></span></dt><dd><dl><dt><span class="sect1"><a href="nw4migration.html#id2628156">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="nw4migration.html#id2628272">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="nw4migration.html#id2628385">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="nw4migration.html#id2628462">Technical Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="nw4migration.html#id2628652">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="nw4migration.html#id2628661">NetWare Migration Using LDAP Backend</a></span></dt></dl></dd></dl></dd></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="2000users.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="unixclients.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 6. A Distributed 2000-User Network </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 7. Adding Domain Member Servers and Clients</td></tr></table></div></body></html>
+</p><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="unixclients.html">7. Adding Domain Member Servers and Clients</a></span></dt><dd><dl><dt><span class="sect1"><a href="unixclients.html#id375489">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="unixclients.html#id375537">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="unixclients.html#id375566">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="unixclients.html#id375589">Technical Issues</a></span></dt><dt><span class="sect2"><a href="unixclients.html#id376189">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="unixclients.html#id376274">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></span></dt><dt><span class="sect2"><a href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a></span></dt><dt><span class="sect2"><a href="unixclients.html#dcwonss">NT4/Samba Domain with Samba Domain Member Server without NSS Support</a></span></dt><dt><span class="sect2"><a href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></span></dt><dt><span class="sect2"><a href="unixclients.html#id382025">UNIX/Linux Client Domain Member</a></span></dt><dt><span class="sect2"><a href="unixclients.html#id382521">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="unixclients.html#id382565">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="upgrades.html">8. Updating Samba-3</a></span></dt><dd><dl><dt><span class="sect1"><a href="upgrades.html#id383639">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrades.html#id383722">Cautions and Notes</a></span></dt></dl></dd><dt><span class="sect1"><a href="upgrades.html#id384934">Upgrading from Samba 1.x and 2.x to Samba-3</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a></span></dt><dt><span class="sect2"><a href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a></span></dt><dt><span class="sect2"><a href="upgrades.html#id385597">Samba-2.x with LDAP Support</a></span></dt></dl></dd><dt><span class="sect1"><a href="upgrades.html#id385712">Updating a Samba-3 Installation</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrades.html#id385807">Samba-3 to Samba-3 Updates on the Same Server</a></span></dt><dt><span class="sect2"><a href="upgrades.html#id385991">Migrating Samba-3 to a New Server</a></span></dt><dt><span class="sect2"><a href="upgrades.html#id386368">Migration of Samba Accounts to Active Directory</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ntmigration.html">9. Migrating NT4 Domain to Samba-3</a></span></dt><dd><dl><dt><span class="sect1"><a href="ntmigration.html#id386514">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntmigration.html#id386589">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntmigration.html#id386640">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntmigration.html#id386802">Technical Issues</a></span></dt><dt><span class="sect2"><a href="ntmigration.html#id387105">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntmigration.html#id387125">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntmigration.html#id387250">NT4 Migration Using LDAP Backend</a></span></dt><dt><span class="sect2"><a href="ntmigration.html#id389442">NT4 Migration Using tdbsam Backend</a></span></dt><dt><span class="sect2"><a href="ntmigration.html#id389787">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntmigration.html#id389822">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="nw4migration.html">10. Migrating NetWare Server to Samba-3</a></span></dt><dd><dl><dt><span class="sect1"><a href="nw4migration.html#id390707">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="nw4migration.html#id390814">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="nw4migration.html#id390913">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="nw4migration.html#id390984">Technical Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="nw4migration.html#id391152">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="nw4migration.html#id391161">NetWare Migration Using LDAP Backend</a></span></dt></dl></dd></dl></dd></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="2000users.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="unixclients.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 6. A Distributed 2000-User Network </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 7. Adding Domain Member Servers and Clients</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/DomApps.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/DomApps.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/DomApps.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,9 +1,9 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 12. Integrating Additional Services</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="RefSection.html" title="Part III. Reference Section"><link rel="prev" href="kerberos.html" title="Chapter 11. Active Directory, Kerberos, and Security"><link rel="next" href="HA.html" title="Chapter 13. Performance, Reliability, and Availability"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 12. Integrating Additional Services</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="kerberos.html">Prev</a> </td><th width="60%" align="center">Part III. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="HA.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="DomApps"></a>Chapter 12. Integrating Additional Services</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="DomApps.html#id2638286">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="DomApps.html#id2638317">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="DomApps.html#id2638418">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="DomApps.html#id2638451">Technical Issues</a></span></dt><dt><span class="sect2"><a href="DomApps.html#id2638607">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="DomApps.html#id2638624">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></span></dt><dt><span class="sect2"><a href="DomApps.html#id2640476">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="DomApps.html#id2640537">Questions and Answers</a></span></dt></dl></div><p>
-	<a class="indexterm" name="id2638237"></a>
-	<a class="indexterm" name="id2638244"></a>
-	<a class="indexterm" name="id2638250"></a>
-	<a class="indexterm" name="id2638257"></a>
-	<a class="indexterm" name="id2638264"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 12. Integrating Additional Services</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="RefSection.html" title="Part III. Reference Section"><link rel="prev" href="kerberos.html" title="Chapter 11. Active Directory, Kerberos, and Security"><link rel="next" href="HA.html" title="Chapter 13. Performance, Reliability, and Availability"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 12. Integrating Additional Services</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="kerberos.html">Prev</a> </td><th width="60%" align="center">Part III. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="HA.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="DomApps"></a>Chapter 12. Integrating Additional Services</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="DomApps.html#id399839">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="DomApps.html#id399862">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="DomApps.html#id399948">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="DomApps.html#id399977">Technical Issues</a></span></dt><dt><span class="sect2"><a href="DomApps.html#id400123">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="DomApps.html#id400137">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></span></dt><dt><span class="sect2"><a href="DomApps.html#id401888">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="DomApps.html#id401943">Questions and Answers</a></span></dt></dl></div><p>
+	<a class="indexterm" name="id399795"></a>
+	<a class="indexterm" name="id399802"></a>
+	<a class="indexterm" name="id399809"></a>
+	<a class="indexterm" name="id399815"></a>
+	<a class="indexterm" name="id399822"></a>
 	You've come a long way now. You have pretty much mastered Samba-3 for 
 	most uses it can be put to. Up until now, you have cast Samba-3 in the leading 
 	role, and where authentication was required, you have used one or another of 
@@ -14,7 +14,7 @@
 	implementing Samba and Samba-supported services in a domain controlled by 
 	the latest Windows authentication technologies. Let's get started  this is 
 	leading edge.
-	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2638286"></a>Introduction</h2></div></div></div><p>
+	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id399839"></a>Introduction</h2></div></div></div><p>
 	Abmas has continued its miraculous growth; indeed, nothing seems to be able 
 	to stop its diversification into multiple (and seemingly unrelated) fields. 
 	Its latest acquisition is Abmas Snack Foods, a big player in the snack-food 
@@ -30,17 +30,17 @@
 	You have decided to set the ball rolling by introducing Samba-3 into the network 
 	gradually, taking over key services and easing the way to a full migration and, 
 	therefore, integration into Abmas's existing business later.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2638317"></a>Assignment Tasks</h3></div></div></div><p>
-		<a class="indexterm" name="id2638325"></a>
-		<a class="indexterm" name="id2638334"></a>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id399862"></a>Assignment Tasks</h3></div></div></div><p>
+		<a class="indexterm" name="id399869"></a>
+		<a class="indexterm" name="id399878"></a>
 	        You've promised the skeptical Abmas Snack Foods management team 
 		that you can show them how Samba can ease itself and other Open Source 
 		technologies into their existing infrastructure and deliver sound business 
 		advantages. Cost cutting is high on their agenda (a major promise of the 
 		acquisition). You have chosen Web proxying and caching as your proving ground.
 		</p><p>
-		<a class="indexterm" name="id2638353"></a>
-		<a class="indexterm" name="id2638359"></a>
+		<a class="indexterm" name="id399894"></a>
+		<a class="indexterm" name="id399900"></a>
 		Abmas Snack Foods has several thousand users housed at its head office 
 		and multiple regional offices, plants, and warehouses. A high proportion of 
 		the business's work is done online, so Internet access for most of these 
@@ -50,9 +50,9 @@
 		the team soon discovered proxying and caching. In fact, they became one of 
 		the earliest commercial users of Microsoft ISA.
 		</p><p>
-		<a class="indexterm" name="id2638380"></a>
-		<a class="indexterm" name="id2638387"></a>
-		<a class="indexterm" name="id2638394"></a>
+		<a class="indexterm" name="id399916"></a>
+		<a class="indexterm" name="id399922"></a>
+		<a class="indexterm" name="id399929"></a>
 		The team is not happy with ISA. Because it never lived up to its marketing promises, 
 		it underperformed and had reliability problems. You have pounced on the opportunity 
 		to show what Open Source can do. The one thing they do like, however, is ISA's 
@@ -63,7 +63,7 @@
 		</p><p>
 		This is a hands-on exercise. You build software applications so
 		that you obtain the functionality Abmas needs.
-		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2638418"></a>Dissection and Discussion</h2></div></div></div><p>
+		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id399948"></a>Dissection and Discussion</h2></div></div></div><p>
 	The key requirements in this business example are straightforward. You are not required 
 	to do anything new, just to replicate an existing system, not lose any existing features, 
 	and improve performance. The key points are:
@@ -73,20 +73,20 @@
 		Distributed system to accommodate load and geographical distribution of users
 		</p></li><li><p>
 		Seamless and transparent interoperability with the existing Active Directory domain
-		</p></li></ul></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2638451"></a>Technical Issues</h3></div></div></div><p>
-		<a class="indexterm" name="id2638459"></a>
-		<a class="indexterm" name="id2638465"></a>
-		<a class="indexterm" name="id2638472"></a>
-		<a class="indexterm" name="id2638479"></a>
-		<a class="indexterm" name="id2638486"></a>
-		<a class="indexterm" name="id2638493"></a>
-		<a class="indexterm" name="id2638500"></a>
-		<a class="indexterm" name="id2638506"></a>
-		<a class="indexterm" name="id2638514"></a>
-		<a class="indexterm" name="id2638520"></a>
-		<a class="indexterm" name="id2638527"></a>
-		<a class="indexterm" name="id2638534"></a>
-		<a class="indexterm" name="id2638544"></a><a class="indexterm" name="id2638549"></a>
+		</p></li></ul></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id399977"></a>Technical Issues</h3></div></div></div><p>
+		<a class="indexterm" name="id399985"></a>
+		<a class="indexterm" name="id399992"></a>
+		<a class="indexterm" name="id399998"></a>
+		<a class="indexterm" name="id400005"></a>
+		<a class="indexterm" name="id400012"></a>
+		<a class="indexterm" name="id400019"></a>
+		<a class="indexterm" name="id400026"></a>
+		<a class="indexterm" name="id400032"></a>
+		<a class="indexterm" name="id400039"></a>
+		<a class="indexterm" name="id400046"></a>
+		<a class="indexterm" name="id400053"></a>
+		<a class="indexterm" name="id400060"></a>
+		<a class="indexterm" name="id400069"></a><a class="indexterm" name="id400075"></a>
 		Functionally, the user's Internet Explorer requests a browsing session with the 
 		Squid proxy, for which it offers its AD authentication token. Squid hands off 
 		the authentication request to the Samba-3 authentication helper application
@@ -107,25 +107,25 @@
 			Configuring, compiling, and then installing the supporting Samba-3 components
 			</p></li><li><p>
 			Tying it all together
-			</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2638607"></a>Political Issues</h3></div></div></div><p>
+			</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id400123"></a>Political Issues</h3></div></div></div><p>
 		You are a stranger in a strange land, and all eyes are upon you. Some would even like to see 
 		you fail. For you to gain the trust of your newly acquired IT people, it is essential that your 
 		solution does everything the old one did, but does it better in every way. Only then 
 		will the entrenched positions consider taking up your new way of doing things on a 
 		wider scale.
-		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2638624"></a>Implementation</h2></div></div></div><p>
-	<a class="indexterm" name="id2638632"></a>
+		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id400137"></a>Implementation</h2></div></div></div><p>
+	<a class="indexterm" name="id400145"></a>
 	First, your system needs to be prepared and in a known good state to proceed. This consists 
 	of making sure that everything the system depends on is present and that everything that could 
 	interfere or conflict with the system is removed. You will be configuring the Squid and Samba-3 
 	packages and updating them if necessary. If conflicting packages of these programs are installed, 
 	they must be removed.
 	</p><p>
-	<a class="indexterm" name="id2638649"></a>
+	<a class="indexterm" name="id400159"></a>
 	The following packages should be available on your Red Hat Linux system:
 	</p><div class="itemizedlist"><ul type="disc"><li><p>
-		<a class="indexterm" name="id2638664"></a>
-		<a class="indexterm" name="id2638671"></a>
+		<a class="indexterm" name="id400173"></a>
+		<a class="indexterm" name="id400179"></a>
 		krb5-libs
 		</p></li><li><p>
 		krb5-devel
@@ -136,14 +136,14 @@
 		</p></li><li><p>
 		pam_krb5
 		</p></li></ul></div><p>
-	<a class="indexterm" name="id2638701"></a>
+	<a class="indexterm" name="id400209"></a>
 	In the case of SUSE Linux, these packages are called:
 	</p><div class="itemizedlist"><ul type="disc"><li><p>
                 heimdal-lib
                 </p></li><li><p>
                 heimdal-devel
                 </p></li><li><p>
-		<a class="indexterm" name="id2638726"></a>
+		<a class="indexterm" name="id400232"></a>
                 heimdal
                 </p></li><li><p>
                 pam_krb5
@@ -152,26 +152,26 @@
 	them from the vendor's installation media. Follow the administrative guide
 	for your Linux system to ensure that the packages are correctly updated.
 	</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-	<a class="indexterm" name="id2638751"></a>
-	<a class="indexterm" name="id2638758"></a>
-	<a class="indexterm" name="id2638765"></a>
+	<a class="indexterm" name="id400255"></a>
+	<a class="indexterm" name="id400262"></a>
+	<a class="indexterm" name="id400269"></a>
 	If the requirement is for interoperation with MS Windows Server 2003, it
 	will be necessary to ensure that you are using MIT Kerberos version 1.3.1
 	or later. Red Hat Linux 9 ships with MIT Kerberos 1.2.7 and thus requires
 	updating.
 	</p><p>
-	<a class="indexterm" name="id2638779"></a>
-	<a class="indexterm" name="id2638785"></a>
+	<a class="indexterm" name="id400280"></a>
+	<a class="indexterm" name="id400287"></a>
 	Heimdal 0.6 or later is required in the case of SUSE Linux. SUSE Enterprise
 	Linux Server 8 ships with Heimdal 0.4. SUSE 9 ships with the necessary version.
 	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="ch10-one"></a>Removal of Pre-Existing Conflicting RPMs</h3></div></div></div><p>
-	<a class="indexterm" name="id2638808"></a>
+	<a class="indexterm" name="id400308"></a>
 	If Samba and/or Squid RPMs are installed, they should be updated. You can 
 	build both from source.
 	</p><p>
-	<a class="indexterm" name="id2638820"></a>
-	<a class="indexterm" name="id2638826"></a>
-	<a class="indexterm" name="id2638833"></a>
+	<a class="indexterm" name="id400319"></a>
+	<a class="indexterm" name="id400325"></a>
+	<a class="indexterm" name="id400332"></a>
 	Locating the packages to be un-installed can be achieved by running:
 </p><pre class="screen">
 <code class="prompt">root# </code> rpm -qa | grep -i samba
@@ -181,11 +181,11 @@
 </p><pre class="screen">
 <code class="prompt">root# </code> rpm -e samba-common
 </pre><p>
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2638873"></a>Kerberos Configuration</h3></div></div></div><p>
-	<a class="indexterm" name="id2638881"></a>
-	<a class="indexterm" name="id2638888"></a>
-	<a class="indexterm" name="id2638897"></a>
-	<a class="indexterm" name="id2638904"></a>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id400370"></a>Kerberos Configuration</h3></div></div></div><p>
+	<a class="indexterm" name="id400378"></a>
+	<a class="indexterm" name="id400385"></a>
+	<a class="indexterm" name="id400394"></a>
+	<a class="indexterm" name="id400401"></a>
 	The systems Kerberos installation must be configured to communicate with 
 	your primary Active Directory server (ADS KDC).
 	</p><p>
@@ -193,13 +193,13 @@
 	although the current default Red Hat MIT version 1.2.7 gives acceptable results 
 	unless you are using Windows 2003 servers.
 	</p><p>
-	<a class="indexterm" name="id2638923"></a>
-	<a class="indexterm" name="id2638930"></a>
-	<a class="indexterm" name="id2638936"></a>
-	<a class="indexterm" name="id2638943"></a>
-	<a class="indexterm" name="id2638950"></a>
-	<a class="indexterm" name="id2638959"></a>
-	<a class="indexterm" name="id2638966"></a>
+	<a class="indexterm" name="id400417"></a>
+	<a class="indexterm" name="id400423"></a>
+	<a class="indexterm" name="id400430"></a>
+	<a class="indexterm" name="id400437"></a>
+	<a class="indexterm" name="id400444"></a>
+	<a class="indexterm" name="id400453"></a>
+	<a class="indexterm" name="id400459"></a>
 	Officially, neither MIT (1.3.4) nor Heimdal (0.63) Kerberos needs an <code class="filename">/etc/krb5.conf</code> 
 	file in order to work correctly. All ADS domains automatically create SRV records in the 
 	DNS zone <code class="constant">Kerberos.REALM.NAME</code> for each KDC in the realm. Since both 
@@ -207,25 +207,25 @@
 	automatically find the KDCs. In addition, <code class="filename">krb5.conf</code> allows 
 	specifying only a single KDC, even if there is more than one. Using the DNS lookup 
 	allows the KRB5 libraries to use whichever KDCs are available.
-	</p><div class="procedure"><a name="id2639000"></a><p class="title"><b>Procedure 12.1. Kerberos Configuration Steps</b></p><ol type="1"><li><p>
-		<a class="indexterm" name="id2639011"></a>
+	</p><div class="procedure"><a name="id400489"></a><p class="title"><b>Procedure 12.1. Kerberos Configuration Steps</b></p><ol type="1"><li><p>
+		<a class="indexterm" name="id400500"></a>
 		If you find the need to manually configure the <code class="filename">krb5.conf</code>, you should edit it
 		to have the contents shown in <a class="link" href="DomApps.html#ch10-krb5conf" title="Example 12.1. Kerberos Configuration File: /etc/krb5.conf">&#8220;Kerberos Configuration  File: /etc/krb5.conf&#8221;</a>. The final fully qualified path for this file 
 		should be <code class="filename">/etc/krb5.conf</code>.
 		</p></li><li><p>
-		<a class="indexterm" name="id2639046"></a>
-		<a class="indexterm" name="id2639053"></a>
-		<a class="indexterm" name="id2639060"></a>
-		<a class="indexterm" name="id2639067"></a>
-		<a class="indexterm" name="id2639073"></a>
-		<a class="indexterm" name="id2639080"></a>
-		<a class="indexterm" name="id2639087"></a>
-		<a class="indexterm" name="id2639094"></a>
-		<a class="indexterm" name="id2639100"></a>
-		<a class="indexterm" name="id2639109"></a>
-		<a class="indexterm" name="id2639116"></a>
-		<a class="indexterm" name="id2639123"></a>
-		<a class="indexterm" name="id2639130"></a>
+		<a class="indexterm" name="id400533"></a>
+		<a class="indexterm" name="id400540"></a>
+		<a class="indexterm" name="id400546"></a>
+		<a class="indexterm" name="id400553"></a>
+		<a class="indexterm" name="id400560"></a>
+		<a class="indexterm" name="id400567"></a>
+		<a class="indexterm" name="id400573"></a>
+		<a class="indexterm" name="id400580"></a>
+		<a class="indexterm" name="id400587"></a>
+		<a class="indexterm" name="id400596"></a>
+		<a class="indexterm" name="id400602"></a>
+		<a class="indexterm" name="id400609"></a>
+		<a class="indexterm" name="id400616"></a>
 		The following gotchas often catch people out. Kerberos is case sensitive. Your realm must
 		be in UPPERCASE, or you will get an error: &#8220;<span class="quote">Cannot find KDC for requested realm while getting
 		initial credentials</span>&#8221;.  Kerberos is picky about time synchronization. The time
@@ -241,7 +241,7 @@
 		NetBIOS name. If Kerberos cannot do this reverse lookup, you will get a local error
 		when you try to join the realm.
 		</p></li><li><p>
-		<a class="indexterm" name="id2639174"></a>
+		<a class="indexterm" name="id400651"></a>
 		You are now ready to test your installation by issuing the command:
 </p><pre class="screen">
 <code class="prompt">root# </code> kinit [USERNAME at REALM]
@@ -261,29 +261,29 @@
 	LONDON.ABMAS.BIZ = {
 	kdc = w2k3s.london.abmas.biz
 	}
-</pre></div></div><br class="example-break"><p><a class="indexterm" name="id2639239"></a>
+</pre></div></div><br class="example-break"><p><a class="indexterm" name="id400711"></a>
 	The command
 </p><pre class="screen">
 <code class="prompt">root# </code> klist -e 
 </pre><p>
 	shows the Kerberos tickets cached by the system.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2639262"></a>Samba Configuration</h4></div></div></div><p>
-	<a class="indexterm" name="id2639270"></a>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id400733"></a>Samba Configuration</h4></div></div></div><p>
+	<a class="indexterm" name="id400741"></a>
 	Samba must be configured to correctly use Active Directory. Samba-3 must be used, since it 
 	has the necessary components to interface with Active Directory.
-	</p><div class="procedure"><a name="id2639281"></a><p class="title"><b>Procedure 12.2. Securing Samba-3 With ADS Support Steps</b></p><ol type="1"><li><p>
-		<a class="indexterm" name="id2639292"></a>
-		<a class="indexterm" name="id2639299"></a>
-		<a class="indexterm" name="id2639306"></a>
-		<a class="indexterm" name="id2639313"></a>
-		<a class="indexterm" name="id2639320"></a>
+	</p><div class="procedure"><a name="id400750"></a><p class="title"><b>Procedure 12.2. Securing Samba-3 With ADS Support Steps</b></p><ol type="1"><li><p>
+		<a class="indexterm" name="id400762"></a>
+		<a class="indexterm" name="id400768"></a>
+		<a class="indexterm" name="id400775"></a>
+		<a class="indexterm" name="id400782"></a>
+		<a class="indexterm" name="id400789"></a>
 		Download the latest stable Samba-3 for Red Hat Linux from the official Samba Team
 		<a class="ulink" href="http://ftp.samba.org" target="_top">FTP site.</a> The official Samba Team
 		RPMs for Red Hat Fedora Linux contain the <code class="literal">ntlm_auth</code> tool
 		needed, and are linked against MIT KRB5 version 1.3.1 and therefore are ready for use.
 		</p><p>
-		<a class="indexterm" name="id2639346"></a>
-		<a class="indexterm" name="id2639353"></a>
+		<a class="indexterm" name="id400813"></a>
+		<a class="indexterm" name="id400820"></a>
 		The necessary, validated RPM packages for SUSE Linux may be obtained from
 		the <a class="ulink" href="ftp://ftp.sernet.de/pub/samba" target="_top">SerNet</a> FTP site that
 		is located in Germany. All SerNet RPMs are validated, have the necessary
@@ -293,11 +293,11 @@
 		Using your favorite editor, change the <code class="filename">/etc/samba/smb.conf</code>
 		file so it has contents similar to the example shown in <a class="link" href="DomApps.html#ch10-smbconf" title="Example 12.2. Samba Configuration File: /etc/samba/smb.conf">&#8220;Samba Configuration  File: /etc/samba/smb.conf&#8221;</a>.
 		</p></li><li><p>
-		<a class="indexterm" name="id2639404"></a>
-		<a class="indexterm" name="id2639411"></a>
-		<a class="indexterm" name="id2639418"></a>i
-		<a class="indexterm" name="id2639429"></a>
-		<a class="indexterm" name="id2639436"></a>
+		<a class="indexterm" name="id400867"></a>
+		<a class="indexterm" name="id400874"></a>
+		<a class="indexterm" name="id400880"></a>i
+		<a class="indexterm" name="id400892"></a>
+		<a class="indexterm" name="id400899"></a>
 		Next you need to create a computer account in the Active Directory. 
 		This sets up the trust relationship needed for other clients to 
 		authenticate to the Samba server with an Active Directory Kerberos ticket. 
@@ -307,11 +307,11 @@
 <code class="prompt">root# </code> net ads join -U administrator%vulcon
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2639470"></a>
-		<a class="indexterm" name="id2639477"></a>
-		<a class="indexterm" name="id2639484"></a>
-		<a class="indexterm" name="id2639491"></a>
-		<a class="indexterm" name="id2639498"></a>
+		<a class="indexterm" name="id400930"></a>
+		<a class="indexterm" name="id400937"></a>
+		<a class="indexterm" name="id400943"></a>
+		<a class="indexterm" name="id400950"></a>
+		<a class="indexterm" name="id400957"></a>
 		Your new Samba binaries must be started in the standard manner as is applicable
 		to the platform you are running on. Alternatively, start your Active Directory-enabled Samba with the following commands:
 </p><pre class="screen">
@@ -320,11 +320,11 @@
 <code class="prompt">root# </code> winbindd -B
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2639538"></a>
-		<a class="indexterm" name="id2639545"></a>
-		<a class="indexterm" name="id2639554"></a>
-		<a class="indexterm" name="id2639561"></a>
-		<a class="indexterm" name="id2639568"></a>
+		<a class="indexterm" name="id400996"></a>
+		<a class="indexterm" name="id401002"></a>
+		<a class="indexterm" name="id401012"></a>
+		<a class="indexterm" name="id401018"></a>
+		<a class="indexterm" name="id401025"></a>
 		We now need to test that Samba is communicating with the Active 
 		Directory domain; most specifically, we want to see whether winbind 
 		is enumerating users and groups. Issue the following commands:
@@ -357,8 +357,8 @@
 </pre><p>
 		This enumerates all the groups in your Active Directory tree.
 		</p></li><li><p>
-		<a class="indexterm" name="id2639632"></a>
-		<a class="indexterm" name="id2639639"></a>
+		<a class="indexterm" name="id401082"></a>
+		<a class="indexterm" name="id401089"></a>
 		Squid uses the <code class="literal">ntlm_auth</code> helper build with Samba-3.
 		You may test <code class="literal">ntlm_auth</code> with the command:
 </p><pre class="screen">
@@ -370,14 +370,14 @@
 <code class="prompt">root# </code> NT_STATUS_OK: Success (0x0)
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2639691"></a>
-		<a class="indexterm" name="id2639698"></a>
-		<a class="indexterm" name="id2639705"></a>
-		<a class="indexterm" name="id2639712"></a>
-		<a class="indexterm" name="id2639719"></a>
-		<a class="indexterm" name="id2639726"></a>
-		<a class="indexterm" name="id2639732"></a>
-		<a class="indexterm" name="id2639739"></a>
+		<a class="indexterm" name="id401139"></a>
+		<a class="indexterm" name="id401146"></a>
+		<a class="indexterm" name="id401153"></a>
+		<a class="indexterm" name="id401159"></a>
+		<a class="indexterm" name="id401166"></a>
+		<a class="indexterm" name="id401173"></a>
+		<a class="indexterm" name="id401180"></a>
+		<a class="indexterm" name="id401187"></a>
 		The <code class="literal">ntlm_auth</code> helper, when run from a command line as the user 
 		&#8220;<span class="quote">root</span>&#8221;, authenticates against your Active Directory domain (with 
 		the aid of winbind). It manages this by reading from the winbind privileged pipe. 
@@ -395,37 +395,37 @@
 <code class="prompt">root# </code> chgrp squid /var/lib/samba/winbindd_privileged
 <code class="prompt">root# </code> chmod 750 /var/lib/samba/winbindd_privileged
 </pre><p>
-		</p></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2639814"></a>NSS Configuration</h4></div></div></div><p>
-	<a class="indexterm" name="id2639822"></a>
-	<a class="indexterm" name="id2639829"></a>
-	<a class="indexterm" name="id2639835"></a>
+		</p></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id401255"></a>NSS Configuration</h4></div></div></div><p>
+	<a class="indexterm" name="id401262"></a>
+	<a class="indexterm" name="id401269"></a>
+	<a class="indexterm" name="id401276"></a>
 	For Squid to benefit from Samba-3, NSS must be updated to allow winbind as a valid route to user authentication.
 	</p><p>
 	Edit your <code class="filename">/etc/nsswitch.conf</code> file so it has the parameters shown
 	in <a class="link" href="DomApps.html#ch10-etcnsscfg" title="Example 12.3. NSS Configuration File Extract File: /etc/nsswitch.conf">&#8220;NSS Configuration File Extract  File: /etc/nsswitch.conf&#8221;</a>.
-	</p><div class="example"><a name="ch10-smbconf"></a><p class="title"><b>Example 12.2. Samba Configuration  File: <code class="filename">/etc/samba/smb.conf</code></b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2639894"></a><em class="parameter"><code>workgroup = LONDON</code></em></td></tr><tr><td><a class="indexterm" name="id2639906"></a><em class="parameter"><code>netbios name = W2K3S</code></em></td></tr><tr><td><a class="indexterm" name="id2639918"></a><em class="parameter"><code>realm = LONDON.ABMAS.BIZ</code></em></td></tr><tr><td><a class="indexterm" name="id2639929"></a><em class="parameter"><code>security = ads</code></em></td></tr><tr><td><a class="indexterm" name="id2639941"></a><em class="parameter"><code>encrypt passwords = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2639953"></a><em class="parameter"><code>password server = w2k3s.london.abmas.biz</code></em></td></tr><tr><td># separate domain and username with '/', like DOMAIN/username</td></tr><tr><td><a class="indexterm" name="id2639969"></a><em class="parameter"><code>winbind separator = /</code></em></td></tr><tr><td># use UIDs from 10000 to 20000 for domain users</td></tr><tr><td><a class="indexterm" name="id2639985"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td># use GIDs from 10000 to 20000 for domain groups</td></tr><tr><td><a class="indexterm" name="id2640001"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr><tr><td># allow enumeration of winbind users and groups</td></tr><tr><td><a class="indexterm" name="id2640017"></a><em class="parameter"><code>winbind enum users = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2640029"></a><em class="parameter"><code>winbind enum groups = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2640041"></a><em class="parameter"><code>winbind user default domain = yes</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch10-etcnsscfg"></a><p class="title"><b>Example 12.3. NSS Configuration File Extract  File: <code class="filename">/etc/nsswitch.conf</code></b></p><div class="example-contents"><pre class="screen">
+	</p><div class="example"><a name="ch10-smbconf"></a><p class="title"><b>Example 12.2. Samba Configuration  File: <code class="filename">/etc/samba/smb.conf</code></b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id401332"></a><em class="parameter"><code>workgroup = LONDON</code></em></td></tr><tr><td><a class="indexterm" name="id401344"></a><em class="parameter"><code>netbios name = W2K3S</code></em></td></tr><tr><td><a class="indexterm" name="id401355"></a><em class="parameter"><code>realm = LONDON.ABMAS.BIZ</code></em></td></tr><tr><td><a class="indexterm" name="id401367"></a><em class="parameter"><code>security = ads</code></em></td></tr><tr><td><a class="indexterm" name="id401378"></a><em class="parameter"><code>encrypt passwords = yes</code></em></td></tr><tr><td><a class="indexterm" name="id401390"></a><em class="parameter"><code>password server = w2k3s.london.abmas.biz</code></em></td></tr><tr><td># separate domain and username with '/', like DOMAIN/username</td></tr><tr><td><a class="indexterm" name="id401405"></a><em class="parameter"><code>winbind separator = /</code></em></td></tr><tr><td># use UIDs from 10000 to 20000 for domain users</td></tr><tr><td><a class="indexterm" name="id401420"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td># use GIDs from 10000 to 20000 for domain groups</td></tr><tr><td><a class="indexterm" name="id401436"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr><tr><td># allow enumeration of winbind users and groups</td></tr><tr><td><a class="indexterm" name="id401451"></a><em class="parameter"><code>winbind enum users = yes</code></em></td></tr><tr><td><a class="indexterm" name="id401462"></a><em class="parameter"><code>winbind enum groups = yes</code></em></td></tr><tr><td><a class="indexterm" name="id401474"></a><em class="parameter"><code>winbind user default domain = yes</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch10-etcnsscfg"></a><p class="title"><b>Example 12.3. NSS Configuration File Extract  File: <code class="filename">/etc/nsswitch.conf</code></b></p><div class="example-contents"><pre class="screen">
 passwd: files winbind
 shadow: files
 group: files winbind
-</pre></div></div><br class="example-break"></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2640080"></a>Squid Configuration</h4></div></div></div><p>
-	<a class="indexterm" name="id2640088"></a>
-	<a class="indexterm" name="id2640094"></a>
+</pre></div></div><br class="example-break"></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id401512"></a>Squid Configuration</h4></div></div></div><p>
+	<a class="indexterm" name="id401520"></a>
+	<a class="indexterm" name="id401526"></a>
 	Squid must be configured correctly to interact with the Samba-3 
 	components that handle Active Directory authentication.
-	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2640109"></a>Configuration</h3></div></div></div></div><div class="procedure"><a name="id2640115"></a><p class="title"><b>Procedure 12.3. Squid Configuration Steps</b></p><ol type="1"><li><p>
-		<a class="indexterm" name="id2640126"></a>
-		<a class="indexterm" name="id2640133"></a>
-		<a class="indexterm" name="id2640141"></a>
+	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id401540"></a>Configuration</h3></div></div></div></div><div class="procedure"><a name="id401546"></a><p class="title"><b>Procedure 12.3. Squid Configuration Steps</b></p><ol type="1"><li><p>
+		<a class="indexterm" name="id401557"></a>
+		<a class="indexterm" name="id401564"></a>
+		<a class="indexterm" name="id401572"></a>
 		If your Linux distribution is SUSE Linux 9, the version of Squid 
 		supplied is already enabled to use the winbind helper agent. You
 		can therefore omit the steps that would build the Squid binary
 		programs.
 		</p></li><li><p>
-		<a class="indexterm" name="id2640158"></a>
-		<a class="indexterm" name="id2640165"></a>
-		<a class="indexterm" name="id2640172"></a>
-		<a class="indexterm" name="id2640179"></a>
-		<a class="indexterm" name="id2640185"></a>
+		<a class="indexterm" name="id401587"></a>
+		<a class="indexterm" name="id401594"></a>
+		<a class="indexterm" name="id401600"></a>
+		<a class="indexterm" name="id401607"></a>
+		<a class="indexterm" name="id401614"></a>
 		Squid, by default, runs as the user <code class="constant">nobody</code>. You need to 
 		add a system user <code class="constant">squid</code> and a system group 
 		<code class="constant">squid</code> if they are not set up already (if the default 
@@ -433,16 +433,16 @@
 		<code class="constant">squid</code> user in <code class="filename">/etc/passwd</code> 
 		and a <code class="constant">squid</code> group in <code class="filename">/etc/group</code> if these aren't there already.
 		</p></li><li><p>
-		<a class="indexterm" name="id2640233"></a>
-		<a class="indexterm" name="id2640240"></a>
+		<a class="indexterm" name="id401659"></a>
+		<a class="indexterm" name="id401666"></a>
 		You now need to change the permissions on Squid's <code class="constant">var</code>
 		directory.  Enter the following command:
 </p><pre class="screen">
 <code class="prompt">root# </code> chown -R squid /var/cache/squid
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2640271"></a>
-		<a class="indexterm" name="id2640278"></a>
+		<a class="indexterm" name="id401696"></a>
+		<a class="indexterm" name="id401702"></a>
 		Squid must also have control over its logging. Enter the following commands:
 </p><pre class="screen">
 <code class="prompt">root# </code> chown -R chown squid:squid /var/log/squid
@@ -456,11 +456,11 @@
 <code class="prompt">root# </code> chmod 770 /var/cache/squid
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2640338"></a>
+		<a class="indexterm" name="id401760"></a>
 		The <code class="filename">/etc/squid/squid.conf</code> file must be edited to include the lines from 
 		<a class="link" href="DomApps.html#etcsquidcfg" title="Example 12.4. Squid Configuration File Extract /etc/squid.conf [ADMINISTRATIVE PARAMETERS Section]">&#8220;Squid Configuration File Extract  /etc/squid.conf [ADMINISTRATIVE PARAMETERS Section]&#8221;</a> and <a class="link" href="DomApps.html#etcsquid2" title="Example 12.5. Squid Configuration File extract File: /etc/squid.conf [AUTHENTICATION PARAMETERS Section]">&#8220;Squid Configuration File extract  File: /etc/squid.conf [AUTHENTICATION PARAMETERS Section]&#8221;</a>.
 		</p></li><li><p>
-		<a class="indexterm" name="id2640372"></a>
+		<a class="indexterm" name="id401793"></a>
 		You must create Squid's cache directories before it may be run.  Enter the following command: 
 </p><pre class="screen">
 <code class="prompt">root# </code> squid -z
@@ -487,23 +487,23 @@
 	auth_param basic credentialsttl 2 hours
 	acl AuthorizedUsers proxy_auth REQUIRED
 	http_access allow all AuthorizedUsers
-</pre></div></div><br class="example-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2640476"></a>Key Points Learned</h3></div></div></div><p>
-		<a class="indexterm" name="id2640484"></a>
-		<a class="indexterm" name="id2640491"></a>
-		<a class="indexterm" name="id2640498"></a>
-		<a class="indexterm" name="id2640505"></a>
-		<a class="indexterm" name="id2640516"></a>
+</pre></div></div><br class="example-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id401888"></a>Key Points Learned</h3></div></div></div><p>
+		<a class="indexterm" name="id401896"></a>
+		<a class="indexterm" name="id401902"></a>
+		<a class="indexterm" name="id401909"></a>
+		<a class="indexterm" name="id401916"></a>
+		<a class="indexterm" name="id401928"></a>
 		Microsoft Windows networking protocols permeate the spectrum of technologies that Microsoft
 		Windows clients use, even when accessing traditional services such as Web browsers. Depending 
 		on whom you discuss this with, this is either good or bad. No matter how you might evaluate this,
 		the use of NTLMSSP as the authentication protocol for Web proxy access has some advantages over
 		the cookie-based authentication regime used by all competing browsers. It is Samba's implementation
 		of NTLMSSP that makes it attractive to implement the solution that has been demonstrated in this chapter.
-		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2640537"></a>Questions and Answers</h2></div></div></div><p>
-	<a class="indexterm" name="id2640545"></a>
-	<a class="indexterm" name="id2640551"></a>
-	<a class="indexterm" name="id2640558"></a>
-	<a class="indexterm" name="id2640565"></a>
+		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id401943"></a>Questions and Answers</h2></div></div></div><p>
+	<a class="indexterm" name="id401950"></a>
+	<a class="indexterm" name="id401957"></a>
+	<a class="indexterm" name="id401964"></a>
+	<a class="indexterm" name="id401971"></a>
 	The development of the <code class="literal">ntlm_auth</code> module was first discussed in many Open Source circles
 	in 2002. At the SambaXP conference in Goettingen, Germany, Mr. Francesco Chemolli demonstrated the use of 
 	<code class="literal">ntlm_auth</code> during one of the late developer meetings that took place. Since that time, the 
@@ -522,34 +522,34 @@
 	You would be well-advised to recognize that all cache-intensive proxying solutions demand a lot of memory.
 	Make certain that your Squid proxy server is equipped with sufficient memory to permit all proxy operations to run 
 	out of memory without invoking the overheads involved in the use of memory that has to be swapped to disk.
-	</p><div class="qandaset"><dl><dt> <a href="DomApps.html#id2640643">
+	</p><div class="qandaset"><dl><dt> <a href="DomApps.html#id402036">
 		What does Samba have to do with Web proxy serving?
-		</a></dt><dt> <a href="DomApps.html#id2640809">
+		</a></dt><dt> <a href="DomApps.html#id402192">
 		What other services does Samba provide?
-		</a></dt><dt> <a href="DomApps.html#id2640952">
+		</a></dt><dt> <a href="DomApps.html#id402327">
 		Does use of Samba (ntlm_auth) improve the performance of Squid?
-		</a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%"><tbody><tr class="question"><td align="left" valign="top"><a name="id2640643"></a><a name="id2640645"></a></td><td align="left" valign="top"><p>
+		</a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%"><tbody><tr class="question"><td align="left" valign="top"><a name="id402036"></a><a name="id402038"></a></td><td align="left" valign="top"><p>
 		What does Samba have to do with Web proxy serving?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
-		<a class="indexterm" name="id2640657"></a>
-		<a class="indexterm" name="id2640664"></a>
-		<a class="indexterm" name="id2640671"></a>
-		<a class="indexterm" name="id2640680"></a>
-		<a class="indexterm" name="id2640687"></a>
+		<a class="indexterm" name="id402050"></a>
+		<a class="indexterm" name="id402057"></a>
+		<a class="indexterm" name="id402063"></a>
+		<a class="indexterm" name="id402073"></a>
+		<a class="indexterm" name="id402079"></a>
 		To provide transparent interoperability between Windows clients and the network services
 		that are used from them, Samba had to develop tools and facilities that deliver that feature. The benefit
 		of Open Source software is that it can readily be reused. The current <code class="literal">ntlm_auth</code>
 		module is basically a wrapper around authentication code from the core of the Samba project.
 		</p><p>
-		<a class="indexterm" name="id2640709"></a>
-		<a class="indexterm" name="id2640716"></a>
-		<a class="indexterm" name="id2640725"></a>
-		<a class="indexterm" name="id2640734"></a>
-		<a class="indexterm" name="id2640743"></a>
-		<a class="indexterm" name="id2640750"></a>
-		<a class="indexterm" name="id2640757"></a>
-		<a class="indexterm" name="id2640764"></a>
-		<a class="indexterm" name="id2640771"></a>
+		<a class="indexterm" name="id402098"></a>
+		<a class="indexterm" name="id402105"></a>
+		<a class="indexterm" name="id402114"></a>
+		<a class="indexterm" name="id402123"></a>
+		<a class="indexterm" name="id402132"></a>
+		<a class="indexterm" name="id402139"></a>
+		<a class="indexterm" name="id402146"></a>
+		<a class="indexterm" name="id402153"></a>
+		<a class="indexterm" name="id402160"></a>
 		The <code class="literal">ntlm_auth</code> module supports basic plain-text authentication and NTLMSSP 
 		protocols. This module makes it possible for Web and FTP proxy requests to be authenticated without
 		the user being interrupted via his or her Windows logon credentials. This facility is available with
@@ -557,36 +557,36 @@
 		There are a few open source initiatives to provide support for these protocols in the Apache Web server
 		also.
 		</p><p>
-		<a class="indexterm" name="id2640795"></a>
+		<a class="indexterm" name="id402180"></a>
 		The short answer is that by adding a wrapper around key authentication components of Samba, other
 		projects (like Squid) can benefit from the labors expended in meeting user interoperability needs.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2640809"></a><a name="id2640811"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id402192"></a><a name="id402194"></a></td><td align="left" valign="top"><p>
 		What other services does Samba provide?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
-		<a class="indexterm" name="id2640822"></a>
-		<a class="indexterm" name="id2640829"></a>
-		<a class="indexterm" name="id2640836"></a>
-		<a class="indexterm" name="id2640843"></a>
-		<a class="indexterm" name="id2640850"></a>
+		<a class="indexterm" name="id402205"></a>
+		<a class="indexterm" name="id402212"></a>
+		<a class="indexterm" name="id402219"></a>
+		<a class="indexterm" name="id402225"></a>
+		<a class="indexterm" name="id402232"></a>
 		Samba-3 is a file and print server. The core components that provide this functionality are <code class="literal">smbd</code>,
 		<code class="literal">nmbd</code>, and the identity resolver daemon, <code class="literal">winbindd</code>.
 		</p><p>
-		<a class="indexterm" name="id2640880"></a>
-		<a class="indexterm" name="id2640887"></a>
+		<a class="indexterm" name="id402261"></a>
+		<a class="indexterm" name="id402268"></a>
 		Samba-3 is an SMB/CIFS client. The core component that provides this is called <code class="literal">smbclient</code>.
 		</p><p>
-		<a class="indexterm" name="id2640905"></a>
-		<a class="indexterm" name="id2640911"></a>
-		<a class="indexterm" name="id2640918"></a>
-		<a class="indexterm" name="id2640925"></a>
-		<a class="indexterm" name="id2640932"></a>
+		<a class="indexterm" name="id402285"></a>
+		<a class="indexterm" name="id402292"></a>
+		<a class="indexterm" name="id402298"></a>
+		<a class="indexterm" name="id402305"></a>
+		<a class="indexterm" name="id402312"></a>
 		Samba-3 includes a number of helper tools, plug-in modules, utilities, and test and validation facilities.
 		Samba-3 includes glue modules that help provide interoperability between MS Windows clients and UNIX/Linux
 		servers and clients. It includes Winbind agents that make it possible to authenticate UNIX/Linux access attempts
 		as well as logins to an SMB/CIFS authentication server backend. Samba-3 includes name service switch (NSS) modules
 		to permit identity resolution via SMB/CIFS servers (Windows NT4/200x, Samba, and a host of other commercial
 		server products).
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2640952"></a><a name="id2640954"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id402327"></a><a name="id402329"></a></td><td align="left" valign="top"><p>
 		Does use of Samba (<code class="literal">ntlm_auth</code>) improve the performance of Squid?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		Not really. Samba's <code class="literal">ntlm_auth</code> module handles only authentication. It requires that

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/ExNetworks.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/ExNetworks.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/ExNetworks.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part I. Example Network Configurations</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="index.html" title="Samba-3 by Example"><link rel="prev" href="preface.html" title="Preface"><link rel="next" href="simple.html" title="Chapter 1. No-Frills Samba Servers"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part I. Example Network Configurations</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="preface.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="simple.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="ExNetworks"></a>Part I. Example Network Configurations</h1></div></div></div><div class="partintro" lang="en"><div><div><div><h1 class="title"><a name="id2571936"></a>Example Network Configurations</h1></div></div></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part I. Example Network Configurations</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="index.html" title="Samba-3 by Example"><link rel="prev" href="preface.html" title="Preface"><link rel="next" href="simple.html" title="Chapter 1. No-Frills Samba Servers"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part I. Example Network Configurations</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="preface.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="simple.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="ExNetworks"></a>Part I. Example Network Configurations</h1></div></div></div><div class="partintro" lang="en"><div><div><div><h1 class="title"><a name="id340602"></a>Example Network Configurations</h1></div></div></div><p>
 This section of <span class="emphasis"><em>Samba-3 by Example</em></span> provides example network
 configurations that can be copied, or modified as needed, and deployed as-is.
 The contents have been marginally updated to reflect changes made in Samba=3.0.23.
@@ -20,4 +20,4 @@
 commercial support options may be obtained from the commercial
 <a class="ulink" href="http://www.samba.org/samba/support/" target="_top">support</a> pages from 
 the Samba web site.
-</p><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="simple.html">1. No-Frills Samba Servers</a></span></dt><dd><dl><dt><span class="sect1"><a href="simple.html#id2572015">Introduction</a></span></dt><dt><span class="sect1"><a href="simple.html#id2572056">Assignment Tasks</a></span></dt><dd><dl><dt><span class="sect2"><a href="simple.html#id2572100">Drafting Office</a></span></dt><dt><span class="sect2"><a href="simple.html#id2572871">Charity Administration Office</a></span></dt><dt><span class="sect2"><a href="simple.html#AccountingOffice">Accounting Office</a></span></dt></dl></dd><dt><span class="sect1"><a href="simple.html#id2576536">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="small.html">2. Small Office Networking</a></span></dt><dd><dl><dt><span class="sect1"><a href="small.html#id2577019">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="small.html#id2577042">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="small.html#id2577104">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="small.html#id2577157">Technical Issues</a></span></dt><dt><span class="sect2"><a href="small.html#id2577369">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="small.html#id2577390">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="small.html#id2579091">Validation</a></span></dt><dt><span class="sect2"><a href="small.html#id2579795">Notebook Computers: A Special Case</a></span></dt><dt><span class="sect2"><a href="small.html#id2579821">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="small.html#id2579897">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="secure.html">3. Secure Office Networking</a></span></dt><dd><dl><dt><span class="sect1"><a href="secure.html#id2580408">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="secure.html#id2580460">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="secure.html#id2580710">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="secure.html#id2580725">Technical Issues</a></span></dt><dt><span class="sect2"><a href="secure.html#id2581178">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="secure.html#id2581218">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="secure.html#ch4bsc">Basic System Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#id2582155">Samba Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4dhcpdns">Configuration of DHCP and DNS Servers</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4ptrcfg">Printer Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#procstart">Process Startup Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4valid">Validation</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4appscfg">Application Share Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4wincfg">Windows Client Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#id2586790">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="secure.html#id2586852">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="Big500users.html">4. The 500-User Office</a></span></dt><dd><dl><dt><span class="sect1"><a href="Big500users.html#id2587374">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="Big500users.html#id2587419">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="Big500users.html#id2587525">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="Big500users.html#id2587560">Technical Issues</a></span></dt><dt><span class="sect2"><a href="Big500users.html#id2587763">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="Big500users.html#id2587786">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="Big500users.html#ch5-dnshcp-setup">Installation of DHCP, DNS, and Samba Control Files</a></span></dt><dt><span class="sect2"><a href="Big500users.html#id2588515">Server Preparation: All Servers</a></span></dt><dt><span class="sect2"><a href="Big500users.html#id2589080">Server-Specific Preparation</a></span></dt><dt><span class="sect2"><a href="Big500users.html#ch5-procstart">Process Startup Configuration</a></span></dt><dt><span class="sect2"><a href="Big500users.html#ch5wincfg">Windows Client Configuration</a></span></dt><dt><span class="sect2"><a href="Big500users.html#id2592280">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="Big500users.html#id2592338">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="happy.html">5. Making Happy Users</a></span></dt><dd><dl><dt><span class="sect1"><a href="happy.html#id2593176">Regarding LDAP Directories and Windows Computer Accounts</a></span></dt><dt><span class="sect1"><a href="happy.html#id2593318">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#id2593415">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#id2593552">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#id2594009">Technical Issues</a></span></dt><dt><span class="sect2"><a href="happy.html#id2595888">Political Issues</a></span></dt><dt><span class="sect2"><a href="happy.html#id2595904">Installation Checklist</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#id2596084">Samba Server Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#ldapsetup">OpenLDAP Server Configuration</a></span></dt><dt><span class="sect2"><a href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a></span></dt><dt><span class="sect2"><a href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a></span></dt><dt><span class="sect2"><a href="happy.html#sbeidealx">Install and Configure Idealx smbldap-tools Scripts</a></span></dt><dt><span class="sect2"><a href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a></span></dt><dt><span class="sect2"><a href="happy.html#sbehap-ptrcfg">Printer Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#sbehap-bldg1">Samba-3 BDC Configuration</a></span></dt><dt><span class="sect1"><a href="happy.html#id2602933">Miscellaneous Server Preparation Tasks</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#id2602953">Configuring Directory Share Point Roots</a></span></dt><dt><span class="sect2"><a href="happy.html#id2603048">Configuring Profile Directories</a></span></dt><dt><span class="sect2"><a href="happy.html#id2603292">Preparation of Logon Scripts</a></span></dt><dt><span class="sect2"><a href="happy.html#id2603404">Assigning User Rights and Privileges</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#id2603537">Windows Client Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#redirfold">Configuration of Default Profile with Folder Redirection</a></span></dt><dt><span class="sect2"><a href="happy.html#id2604291">Configuration of MS Outlook to Relocate PST File</a></span></dt><dt><span class="sect2"><a href="happy.html#id2604606">Configure Delete Cached Profiles on Logout</a></span></dt><dt><span class="sect2"><a href="happy.html#id2604786">Uploading Printer Drivers to Samba Servers</a></span></dt><dt><span class="sect2"><a href="happy.html#id2605289">Software Installation</a></span></dt><dt><span class="sect2"><a href="happy.html#id2605324">Roll-out Image Creation</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#id2605358">Key Points Learned</a></span></dt><dt><span class="sect1"><a href="happy.html#id2605474">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="2000users.html">6. A Distributed 2000-User Network</a></span></dt><dd><dl><dt><span class="sect1"><a href="2000users.html#id2605895">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="2000users.html#id2605926">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="2000users.html#id2605993">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="2000users.html#id2606266">Technical Issues</a></span></dt><dt><span class="sect2"><a href="2000users.html#id2607210">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="2000users.html#id2607228">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="2000users.html#id2610386">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="2000users.html#id2610534">Questions and Answers</a></span></dt></dl></dd></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="preface.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="simple.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Preface </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 1. No-Frills Samba Servers</td></tr></table></div></body></html>
+</p><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="simple.html">1. No-Frills Samba Servers</a></span></dt><dd><dl><dt><span class="sect1"><a href="simple.html#id340660">Introduction</a></span></dt><dt><span class="sect1"><a href="simple.html#id340690">Assignment Tasks</a></span></dt><dd><dl><dt><span class="sect2"><a href="simple.html#id340728">Drafting Office</a></span></dt><dt><span class="sect2"><a href="simple.html#id341373">Charity Administration Office</a></span></dt><dt><span class="sect2"><a href="simple.html#AccountingOffice">Accounting Office</a></span></dt></dl></dd><dt><span class="sect1"><a href="simple.html#id344496">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="small.html">2. Small Office Networking</a></span></dt><dd><dl><dt><span class="sect1"><a href="small.html#id344880">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="small.html#id344898">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="small.html#id344943">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="small.html#id344988">Technical Issues</a></span></dt><dt><span class="sect2"><a href="small.html#id345160">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="small.html#id345178">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="small.html#id346626">Validation</a></span></dt><dt><span class="sect2"><a href="small.html#id347201">Notebook Computers: A Special Case</a></span></dt><dt><span class="sect2"><a href="small.html#id347221">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="small.html#id347285">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="secure.html">3. Secure Office Networking</a></span></dt><dd><dl><dt><span class="sect1"><a href="secure.html#id347711">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="secure.html#id347745">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="secure.html#id347954">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="secure.html#id347966">Technical Issues</a></span></dt><dt><span class="sect2"><a href="secure.html#id348311">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="secure.html#id348344">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="secure.html#ch4bsc">Basic System Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#id349099">Samba Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4dhcpdns">Configuration of DHCP and DNS Servers</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4ptrcfg">Printer Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#procstart">Process Startup Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4valid">Validation</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4appscfg">Application Share Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4wincfg">Windows Client Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#id353060">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="secure.html#id353113">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="Big500users.html">4. The 500-User Office</a></span></dt><dd><dl><dt><span class="sect1"><a href="Big500users.html#id353553">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="Big500users.html#id353583">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="Big500users.html#id353662">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="Big500users.html#id353690">Technical Issues</a></span></dt><dt><span class="sect2"><a href="Big500users.html#id353866">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="Big500users.html#id353886">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="Big500users.html#ch5-dnshcp-setup">Installation of DHCP, DNS, and Samba Control Files</a></span></dt><dt><span class="sect2"><a href="Big500users.html#id354601">Server Preparation: All Servers</a></span></dt><dt><span class="sect2"><a href="Big500users.html#id355116">Server-Specific Preparation</a></span></dt><dt><span class="sect2"><a href="Big500users.html#ch5-procstart">Process Startup Configuration</a></span></dt><dt><span class="sect2"><a href="Big500users.html#ch5wincfg">Windows Client Configuration</a></span></dt><dt><span class="sect2"><a href="Big500users.html#id358090">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="Big500users.html#id358142">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="happy.html">5. Making Happy Users</a></span></dt><dd><dl><dt><span class="sect1"><a href="happy.html#id358884">Regarding LDAP Directories and Windows Computer Accounts</a></span></dt><dt><span class="sect1"><a href="happy.html#id359008">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#id359084">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#id359212">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#id359614">Technical Issues</a></span></dt><dt><span class="sect2"><a href="happy.html#id361271">Political Issues</a></span></dt><dt><span class="sect2"><a href="happy.html#id361283">Installation Checklist</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#id361454">Samba Server Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#ldapsetup">OpenLDAP Server Configuration</a></span></dt><dt><span class="sect2"><a href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a></span></dt><dt><span class="sect2"><a href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a></span></dt><dt><span class="sect2"><a href="happy.html#sbeidealx">Install and Configure Idealx smbldap-tools Scripts</a></span></dt><dt><span class="sect2"><a href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a></span></dt><dt><span class="sect2"><a href="happy.html#sbehap-ptrcfg">Printer Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#sbehap-bldg1">Samba-3 BDC Configuration</a></span></dt><dt><span class="sect1"><a href="happy.html#id367724">Miscellaneous Server Preparation Tasks</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#id367740">Configuring Directory Share Point Roots</a></span></dt><dt><span class="sect2"><a href="happy.html#id367829">Configuring Profile Directories</a></span></dt><dt><span class="sect2"><a href="happy.html#id368057">Preparation of Logon Scripts</a></span></dt><dt><span class="sect2"><a href="happy.html#id368155">Assigning User Rights and Privileges</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#id368268">Windows Client Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#redirfold">Configuration of Default Profile with Folder Redirection</a></span></dt><dt><span class="sect2"><a href="happy.html#id368985">Configuration of MS Outlook to Relocate PST File</a></span></dt><dt><span class="sect2"><a href="happy.html#id369268">Configure Delete Cached Profiles on Logout</a></span></dt><dt><span class="sect2"><a href="happy.html#id369439">Uploading Printer Drivers to Samba Servers</a></span></dt><dt><span class="sect2"><a href="happy.html#id369909">Software Installation</a></span></dt><dt><span class="sect2"><a href="happy.html#id369934">Roll-out Image Creation</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#id369964">Key Points Learned</a></span></dt><dt><span class="sect1"><a href="happy.html#id370057">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="2000users.html">6. A Distributed 2000-User Network</a></span></dt><dd><dl><dt><span class="sect1"><a href="2000users.html#id370394">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="2000users.html#id370419">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="2000users.html#id370476">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="2000users.html#id370722">Technical Issues</a></span></dt><dt><span class="sect2"><a href="2000users.html#id371541">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="2000users.html#id371556">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="2000users.html#id374570">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="2000users.html#id374709">Questions and Answers</a></span></dt></dl></dd></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="preface.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="simple.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Preface </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 1. No-Frills Samba Servers</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/HA.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/HA.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/HA.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,7 +1,7 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 13. Performance, Reliability, and Availability</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="RefSection.html" title="Part III. Reference Section"><link rel="prev" href="DomApps.html" title="Chapter 12. Integrating Additional Services"><link rel="next" href="ch14.html" title="Chapter 14. Samba Support"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 13. Performance, Reliability, and Availability</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="DomApps.html">Prev</a> </td><th width="60%" align="center">Part III. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="ch14.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="HA"></a>Chapter 13. Performance, Reliability, and Availability</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="HA.html#id2641056">Introduction</a></span></dt><dt><span class="sect1"><a href="HA.html#id2641143">Dissection and Discussion</a></span></dt><dt><span class="sect1"><a href="HA.html#id2641615">Guidelines for Reliable Samba Operation</a></span></dt><dd><dl><dt><span class="sect2"><a href="HA.html#id2641642">Name Resolution</a></span></dt><dt><span class="sect2"><a href="HA.html#id2642118">Samba Configuration</a></span></dt><dt><span class="sect2"><a href="HA.html#id2642445">Use and Location of BDCs</a></span></dt><dt><span class="sect2"><a href="HA.html#id2642520">Use One Consistent Version of MS Windows Client</a></span></dt><dt><span class="sect2"><a href="HA.html#id2642542">For Scalability, Use SAN-Based Storage on Samba Servers</a></span></dt><dt><span class="sect2"><a href="HA.html#id2642592">Distribute Network Load with MSDFS</a></span></dt><dt><span class="sect2"><a href="HA.html#id2642647">Replicate Data to Conserve Peak-Demand Wide-Area Bandwidth</a></span></dt><dt><span class="sect2"><a href="HA.html#id2642692">Hardware Problems</a></span></dt><dt><span class="sect2"><a href="HA.html#id2642850">Large Directories</a></span></dt></dl></dd><dt><span class="sect1"><a href="HA.html#id2642954">Key Points Learned</a></span></dt></dl></div><p>
-	<a class="indexterm" name="id2641018"></a>
-	<a class="indexterm" name="id2641024"></a>
-	<a class="indexterm" name="id2641031"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 13. Performance, Reliability, and Availability</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="RefSection.html" title="Part III. Reference Section"><link rel="prev" href="DomApps.html" title="Chapter 12. Integrating Additional Services"><link rel="next" href="ch14.html" title="Chapter 14. Samba Support"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 13. Performance, Reliability, and Availability</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="DomApps.html">Prev</a> </td><th width="60%" align="center">Part III. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="ch14.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="HA"></a>Chapter 13. Performance, Reliability, and Availability</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="HA.html#id402421">Introduction</a></span></dt><dt><span class="sect1"><a href="HA.html#id402498">Dissection and Discussion</a></span></dt><dt><span class="sect1"><a href="HA.html#id402949">Guidelines for Reliable Samba Operation</a></span></dt><dd><dl><dt><span class="sect2"><a href="HA.html#id402973">Name Resolution</a></span></dt><dt><span class="sect2"><a href="HA.html#id403415">Samba Configuration</a></span></dt><dt><span class="sect2"><a href="HA.html#id403710">Use and Location of BDCs</a></span></dt><dt><span class="sect2"><a href="HA.html#id403778">Use One Consistent Version of MS Windows Client</a></span></dt><dt><span class="sect2"><a href="HA.html#id403795">For Scalability, Use SAN-Based Storage on Samba Servers</a></span></dt><dt><span class="sect2"><a href="HA.html#id403840">Distribute Network Load with MSDFS</a></span></dt><dt><span class="sect2"><a href="HA.html#id403891">Replicate Data to Conserve Peak-Demand Wide-Area Bandwidth</a></span></dt><dt><span class="sect2"><a href="HA.html#id403932">Hardware Problems</a></span></dt><dt><span class="sect2"><a href="HA.html#id404070">Large Directories</a></span></dt></dl></dd><dt><span class="sect1"><a href="HA.html#id404151">Key Points Learned</a></span></dt></dl></div><p>
+	<a class="indexterm" name="id402388"></a>
+	<a class="indexterm" name="id402394"></a>
+	<a class="indexterm" name="id402401"></a>
 	Well, you have reached one of the last chapters of this book. It is customary to attempt
 	to wrap up the theme and contents of a book in what is generally regarded as the
 	chapter that should draw conclusions. This book is a suspense thriller, and since
@@ -10,8 +10,8 @@
 	regarding some of the things everyone can do to deliver a reliable Samba-3 network.
 	</p><div class="blockquote"><table border="0" width="100%" cellspacing="0" cellpadding="0" class="blockquote" summary="Block quote"><tr><td width="10%" valign="top"> </td><td width="80%" valign="top"><p>
 	In a world so full of noise, how can the sparrow be heard?
-	</p></td><td width="10%" valign="top"> </td></tr><tr><td width="10%" valign="top"> </td><td colspan="2" align="right" valign="top">--<span class="attribution">Anonymous</span></td></tr></table></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2641056"></a>Introduction</h2></div></div></div><p>
-	<a class="indexterm" name="id2641064"></a>
+	</p></td><td width="10%" valign="top"> </td></tr><tr><td width="10%" valign="top"> </td><td colspan="2" align="right" valign="top">--<span class="attribution">Anonymous</span></td></tr></table></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id402421"></a>Introduction</h2></div></div></div><p>
+	<a class="indexterm" name="id402429"></a>
 	The sparrow is a small bird whose sounds are drowned out by the noise of the busy
 	world it lives in. Likewise, the simple steps that can be taken to improve the
 	reliability and availability of a Samba network are often drowned out by the volume
@@ -20,22 +20,22 @@
 	itself to discussion of clustering because each clustering methodology uses its own
 	custom tools and methods. Only passing comments are offered concerning these methods.
 	</p><p>
-	<a class="indexterm" name="id2641084"></a>
-	<a class="indexterm" name="id2641090"></a>
-	<a class="indexterm" name="id2641097"></a>
+	<a class="indexterm" name="id402444"></a>
+	<a class="indexterm" name="id402450"></a>
+	<a class="indexterm" name="id402457"></a>
 <a class="ulink" href="http://www.google.com/search?hl=en&amp;lr=&amp;ie=ISO-8859-1&amp;q=samba+cluster&amp;btnG=Google+Search" target="_top">A search</a> 
 	for &#8220;<span class="quote">samba cluster</span>&#8221; produced 71,600 hits. And a search for &#8220;<span class="quote">highly available samba</span>&#8221;
 	and &#8220;<span class="quote">highly available windows</span>&#8221; produced an amazing number of references.
 	It is clear from the resources on the Internet that Windows file and print services 
 	availability, reliability, and scalability are of vital interest to corporate network users.
 	</p><p>
-	<a class="indexterm" name="id2641131"></a>
+	<a class="indexterm" name="id402487"></a>
 	So without further background, you can review a checklist of simple steps that
 	can be taken to ensure acceptable network performance while keeping costs of ownership
 	well under control.
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2641143"></a>Dissection and Discussion</h2></div></div></div><p>
-	<a class="indexterm" name="id2641151"></a>
-	<a class="indexterm" name="id2641158"></a>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id402498"></a>Dissection and Discussion</h2></div></div></div><p>
+	<a class="indexterm" name="id402506"></a>
+	<a class="indexterm" name="id402513"></a>
 	If it is your purpose to get the best mileage out of your Samba servers, there is one rule that
 	must be obeyed. If you want the best, keep your implementation as simple as possible. You may
 	well be forced to introduce some complexities, but you should do so only as a last resort.
@@ -44,8 +44,8 @@
 	make life easier for your successor. Simple implementations can be more readily audited than can
 	complex ones. 
 	</p><p>
-	<a class="indexterm" name="id2641180"></a>
-	<a class="indexterm" name="id2641187"></a>
+	<a class="indexterm" name="id402530"></a>
+	<a class="indexterm" name="id402537"></a>
 	Problems reported by users fall into three categories: configurations that do not work, those 
 	that have broken behavior, and poor performance. The term <span class="emphasis"><em>broken behavior</em></span>
 	means that the function of a particular Samba component appears to work sometimes, but not at
@@ -54,12 +54,12 @@
 	list of Windows machines in MS Explorer changes, sometimes listing machines that are running
 	and at other times not listing them even though the machines are in use on the network.
 	</p><p>
-	<a class="indexterm" name="id2641214"></a>
-	<a class="indexterm" name="id2641221"></a>
-	<a class="indexterm" name="id2641228"></a>
-	<a class="indexterm" name="id2641235"></a>
-	<a class="indexterm" name="id2641241"></a>
-	<a class="indexterm" name="id2641248"></a>
+	<a class="indexterm" name="id402559"></a>
+	<a class="indexterm" name="id402566"></a>
+	<a class="indexterm" name="id402573"></a>
+	<a class="indexterm" name="id402580"></a>
+	<a class="indexterm" name="id402586"></a>
+	<a class="indexterm" name="id402593"></a>
 	A significant number of reports concern problems with the <code class="literal">smbfs</code> file system
 	driver that is part of the Linux kernel, not part of Samba. Users continue to interpret that
 	<code class="literal">smbfs</code> is part of Samba, simply because Samba includes the front-end tools
@@ -70,32 +70,32 @@
 	common infrastructure with some Samba components, but they are not maintained as part of
 	Samba and are really foreign to it.
 	</p><p>
-	<a class="indexterm" name="id2641309"></a>
+	<a class="indexterm" name="id402649"></a>
 	The new project, <code class="literal">cifsfs</code>, is destined to replace <code class="literal">smbfs</code>.
 	It, too, is not part of Samba, even though one of the Samba Team members is a prime mover in
 	this project.
 	</p><p>
 	Table 13.1 lists typical causes of:
 	</p><div class="itemizedlist"><ul type="disc"><li><p>Not Working (NW)</p></li><li><p>Broken Behavior (BB)</p></li><li><p>Poor Performance (PP)</p></li></ul></div><div class="table"><a name="ProbList"></a><p class="title"><b>Table 13.1. Effect of Common Problems</b></p><div class="table-contents"><table summary="Effect of Common Problems" border="1"><colgroup><col align="left"><col align="center"><col align="center"><col align="center"></colgroup><thead><tr><th align="left"><p>Problem</p></th><th align="center"><p>NW</p></th><th align="center"><p>BB</p></th><th align="center"><p>PP</p></th></tr></thead><tbody><tr><td align="left"><p>File locking</p></td><td align="center"><p>-</p></td><td align="center"><p>X</p></td><td align="center"><p>-</p></td></tr><tr><td align="left"><p>Hardware problems</p></td><td align="center"><p>X</p></td><td align="center"><p>X</p></td><td align="center"><p>X</p></td></tr><tr><td align="left"><p>Incorrect authentication</p></td><td align="center"><p>X</p></td><td align="center"><p>X</p></td><td align="center"><p>-</p></td></tr><tr><td align="left"><p>Incorrect configuration</p></td><td align="center"><p>X</p></td><td align="center"><p>X</p></td><td align="center"><p>X</p></td></tr><tr><td align="left"><p>LDAP problems</p></td><td align="center"><p>X</p></td><td align="center"><p>X</p></td><td align="center"><p>-</p></td></tr><tr><td align="left"><p>Name resolution</p></td><td align="center"><p>X</p></td><td align="center"><p>X</p></td><td align="center"><p>X</p></td></tr><tr><td align="left"><p>Printing problems</p></td><td align="center"><p>X</p></td><td align="center"><p>X</p></td><td align="center"><p>-</p></td></tr><tr><td align="left"><p>Slow file transfer</p></td><td align="center"><p>-</p></td><td align="center"><p>-</p></td><td align="center"><p>X</p></td></tr><tr><td align="left"><p>Winbind problems</p></td><td align="center"><p>X</p></td><td align="center"><p>X</p></td><td align="center"><p>-</p></td></tr></tbody></table></div></div><br class="table-break"><p>
-	<a class="indexterm" name="id2641601"></a>
+	<a class="indexterm" name="id402938"></a>
 	It is obvious to all that the first requirement (as a matter of network hygiene) is to eliminate
 	problems that affect basic network operation. This book has provided sufficient working examples
 	to help you to avoid all these problems.
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2641615"></a>Guidelines for Reliable Samba Operation</h2></div></div></div><p>
-	<a class="indexterm" name="id2641623"></a>
-	<a class="indexterm" name="id2641630"></a>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id402949"></a>Guidelines for Reliable Samba Operation</h2></div></div></div><p>
+	<a class="indexterm" name="id402957"></a>
+	<a class="indexterm" name="id402963"></a>
 	Your objective is to provide a network that works correctly, can grow at all times, is resilient
 	at times of extreme demand, and can scale to meet future needs. The following subject areas provide
 	pointers that can help you today.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2641642"></a>Name Resolution</h3></div></div></div><p>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id402973"></a>Name Resolution</h3></div></div></div><p>
 	There are three basic current problem areas: bad hostnames, routed networks, and network collisions.
 	These are covered in the following discussion.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2641653"></a>Bad Hostnames</h4></div></div></div><p>
-		<a class="indexterm" name="id2641661"></a>
-		<a class="indexterm" name="id2641670"></a>
-		<a class="indexterm" name="id2641677"></a>
-		<a class="indexterm" name="id2641684"></a>
-		<a class="indexterm" name="id2641691"></a>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id402984"></a>Bad Hostnames</h4></div></div></div><p>
+		<a class="indexterm" name="id402991"></a>
+		<a class="indexterm" name="id403001"></a>
+		<a class="indexterm" name="id403007"></a>
+		<a class="indexterm" name="id403014"></a>
+		<a class="indexterm" name="id403021"></a>
 		When configured as a DHCP client, a number of Linux distributions set the system hostname
 		to <code class="constant">localhost</code>. If the parameter <em class="parameter"><code>netbios name</code></em> is not
 		specified to something other than <code class="constant">localhost</code>, the Samba server appears
@@ -107,13 +107,13 @@
 		the local Windows machine itself. Hostnames must be valid for Windows networking to function
 		correctly.
 		</p><p>
-		<a class="indexterm" name="id2641746"></a>
+		<a class="indexterm" name="id403070"></a>
 		A few sites have tried to name Windows clients and Samba servers with a name that begins
 		with the digits 1-9. This does not work either because it may result in the client or
 		server attempting to use that name as an IP address.
 		</p><p>
-		<a class="indexterm" name="id2641760"></a>
-		<a class="indexterm" name="id2641769"></a>
+		<a class="indexterm" name="id403082"></a>
+		<a class="indexterm" name="id403091"></a>
 		A Samba server called <code class="constant">FRED</code> in a NetBIOS domain called <code class="constant">COLLISION</code>
 		in a network environment that is part of the fully-qualified Internet domain namespace known
 		as <code class="constant">parrots.com</code>, results in DNS name lookups for <code class="constant">fred.parrots.com</code>
@@ -122,49 +122,49 @@
 		attempts to resolve <code class="constant">fred.parrots.com.parrots.com</code>, which most likely
 		fails given that you probably do not have this in your DNS namespace.
 		</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-		<a class="indexterm" name="id2641813"></a>
-		<a class="indexterm" name="id2641822"></a>
-		<a class="indexterm" name="id2641829"></a>
+		<a class="indexterm" name="id403131"></a>
+		<a class="indexterm" name="id403140"></a>
+		<a class="indexterm" name="id403147"></a>
 		An Active Directory realm called <code class="constant">collision.parrots.com</code> is perfectly okay,
 		although it too must be capable of being resolved via DNS, something that functions correctly
 		if Windows 200x ADS has been properly installed and configured.
-		</p></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2641845"></a>Routed Networks</h4></div></div></div><p>
-		<a class="indexterm" name="id2641853"></a>
-		<a class="indexterm" name="id2641860"></a>
-		<a class="indexterm" name="id2641869"></a>
+		</p></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id403161"></a>Routed Networks</h4></div></div></div><p>
+		<a class="indexterm" name="id403169"></a>
+		<a class="indexterm" name="id403176"></a>
+		<a class="indexterm" name="id403185"></a>
 		NetBIOS networks (Windows networking with NetBIOS over TCP/IP enabled) makes extensive use
 		of UDP-based broadcast traffic, as you saw during the exercises in <a class="link" href="primer.html" title="Chapter 16. Networking Primer">&#8220;Networking Primer&#8221;</a>.
 		</p><p>
-		<a class="indexterm" name="id2641889"></a>
-		<a class="indexterm" name="id2641896"></a>
-		<a class="indexterm" name="id2641903"></a>
+		<a class="indexterm" name="id403203"></a>
+		<a class="indexterm" name="id403210"></a>
+		<a class="indexterm" name="id403217"></a>
 		UDP broadcast traffic is not forwarded by routers. This means that NetBIOS broadcast-based
 		networking cannot function across routed networks (i.e., multi-subnet networks) unless
 		special provisions are made:
 		</p><div class="itemizedlist"><ul type="disc"><li><p>
-			<a class="indexterm" name="id2641920"></a>
-			<a class="indexterm" name="id2641927"></a>
-			<a class="indexterm" name="id2641934"></a>
+			<a class="indexterm" name="id403232"></a>
+			<a class="indexterm" name="id403239"></a>
+			<a class="indexterm" name="id403246"></a>
 			Either install on every Windows client an LMHOSTS file (located in the directory
 			<code class="filename">C:\windows\system32\drivers\etc</code>). It is also necessary to
 			add to the Samba server <code class="filename">smb.conf</code> file the parameters <em class="parameter"><code>remote announce</code></em>
 			and <em class="parameter"><code>remote browse sync</code></em>. For more information, refer to the online
 			manual page for the <code class="filename">smb.conf</code> file.
 			</p></li><li><p>
-			<a class="indexterm" name="id2641979"></a>
+			<a class="indexterm" name="id403289"></a>
 			Or configure Samba as a WINS server, and configure all network clients to use that
 			WINS server in their TCP/IP configuration.
 			</p></li></ul></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-		<a class="indexterm" name="id2641996"></a>
-		<a class="indexterm" name="id2642005"></a>
+		<a class="indexterm" name="id403304"></a>
+		<a class="indexterm" name="id403314"></a>
 		The use of DNS is not an acceptable substitute for WINS. DNS does not store specific
 		information regarding NetBIOS networking particulars that get stored in the WINS
 		name resolution database and that Windows clients require and depend on.
-		</p></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2642018"></a>Network Collisions</h4></div></div></div><p>
-		<a class="indexterm" name="id2642026"></a>
-		<a class="indexterm" name="id2642035"></a>
-		<a class="indexterm" name="id2642045"></a>
-		<a class="indexterm" name="id2642052"></a>
+		</p></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id403325"></a>Network Collisions</h4></div></div></div><p>
+		<a class="indexterm" name="id403332"></a>
+		<a class="indexterm" name="id403342"></a>
+		<a class="indexterm" name="id403351"></a>
+		<a class="indexterm" name="id403358"></a>
 		Excessive network activity causes NetBIOS network timeouts. Timeouts may result in
 		blue screen of death (BSOD) experiences. High collision rates may be caused by excessive
 		UDP broadcast activity, by defective networking hardware, or through excessive network
@@ -173,9 +173,9 @@
 		The use of WINS is highly recommended to reduce network broadcast traffic, as outlined
 		in <a class="link" href="primer.html" title="Chapter 16. Networking Primer">&#8220;Networking Primer&#8221;</a>.
 		</p><p>
-		<a class="indexterm" name="id2642080"></a>
-		<a class="indexterm" name="id2642087"></a>
-		<a class="indexterm" name="id2642094"></a>
+		<a class="indexterm" name="id403383"></a>
+		<a class="indexterm" name="id403389"></a>
+		<a class="indexterm" name="id403396"></a>
 		Under no circumstances should the facility be supported by many routers, known as <code class="constant">NetBIOS
 		forwarding</code>, unless you know exactly what you are doing. Inappropriate use of this
 		facility can result in UDP broadcast storms. In one case in 1999, a university network became
@@ -183,13 +183,13 @@
 		testing of a Samba server. The maximum throughput on a 100-Base-T (100 MB/sec) network was
 		less than 15 KB/sec. After the NetBIOS forwarding was turned off, file transfer performance
 		immediately returned to 11 MB/sec.
-		</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2642118"></a>Samba Configuration</h3></div></div></div><p>
+		</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id403415"></a>Samba Configuration</h3></div></div></div><p>
 	As a general rule, the contents of the <code class="filename">smb.conf</code> file should be kept as simple as possible.
 	No parameter should be specified unless you know it is essential to operation.
 	</p><p>
-	<a class="indexterm" name="id2642138"></a>
-	<a class="indexterm" name="id2642145"></a>
-	<a class="indexterm" name="id2642152"></a>
+	<a class="indexterm" name="id403433"></a>
+	<a class="indexterm" name="id403440"></a>
+	<a class="indexterm" name="id403447"></a>
 	Many UNIX administrators like to fully document the settings in the <code class="filename">smb.conf</code> file. This is a
 	bad idea because it adds content to the file. The <code class="filename">smb.conf</code> file is re-read by every <code class="literal">smbd</code>
 	process every time the file timestamp changes (or, on systems where this does not work, every 20 seconds or so).
@@ -197,7 +197,7 @@
 	As the size of the <code class="filename">smb.conf</code> file grows, the risk of introducing parsing errors also increases.
 	It is recommended to keep a fully documented <code class="filename">smb.conf</code> file on hand, and then to operate Samba only
 	with an optimized file.
-	</p><p><a class="indexterm" name="id2642202"></a>
+	</p><p><a class="indexterm" name="id403493"></a>
 	The preferred way to maintain a documented file is to call it something like <code class="filename">smb.conf.master</code>.
 	You can generate the optimized file by executing:
 </p><pre class="screen">
@@ -223,7 +223,7 @@
 Server role: ROLE_DOMAIN_PDC
 Press enter to see a dump of your service definitions
 </pre><p>
-	<a class="indexterm" name="id2642261"></a>
+	<a class="indexterm" name="id403544"></a>
 	You now, of course, press the enter key to complete the command, or else abort it by pressing Ctrl-C.
 	The important thing to note is the noted Server role, as well as warning messages. Noted configuration
 	conflicts must be remedied before proceeding. For example, the following error message represents a
@@ -233,28 +233,28 @@
 cannot be set in the smb.conf file. nmbd will abort with this setting.
 </pre><p>
 	</p><p>
-	<a class="indexterm" name="id2642289"></a>
-	<a class="indexterm" name="id2642296"></a>
-	<a class="indexterm" name="id2642303"></a>
+	<a class="indexterm" name="id403565"></a>
+	<a class="indexterm" name="id403572"></a>
+	<a class="indexterm" name="id403579"></a>
 	There are two parameters that can cause severe network performance degradation: <em class="parameter"><code>socket options</code></em>
 	and <em class="parameter"><code>socket address</code></em>. The <em class="parameter"><code>socket options</code></em> parameter was often necessary
 	when Samba was used with the Linux 2.2.x kernels. Later kernels are largely self-tuning and seldom benefit from
 	this parameter being set. Do not use either parameter unless it has been proven necessary to use them.
 	</p><p>
-	<a class="indexterm" name="id2642337"></a>
-	<a class="indexterm" name="id2642343"></a>
-	<a class="indexterm" name="id2642350"></a>
-	<a class="indexterm" name="id2642357"></a>
+	<a class="indexterm" name="id403610"></a>
+	<a class="indexterm" name="id403617"></a>
+	<a class="indexterm" name="id403623"></a>
+	<a class="indexterm" name="id403630"></a>
 	Another <code class="filename">smb.conf</code> parameter that may cause severe network performance degradation is the 
 	<em class="parameter"><code>strict sync</code></em> parameter. Do not use this at all. There is no good reason
 	to use this with any modern Windows client. The <em class="parameter"><code>strict sync</code></em> is often
 	used with the <em class="parameter"><code>sync always</code></em> parameter. This, too, can severely	
 	degrade network performance, so do not set it; if you must, do so with caution.
 	</p><p>
-	<a class="indexterm" name="id2642399"></a>
-	<a class="indexterm" name="id2642406"></a>
-	<a class="indexterm" name="id2642413"></a>
-	<a class="indexterm" name="id2642420"></a>
+	<a class="indexterm" name="id403669"></a>
+	<a class="indexterm" name="id403676"></a>
+	<a class="indexterm" name="id403683"></a>
+	<a class="indexterm" name="id403690"></a>
 	Finally, many network administrators deliberately disable opportunistic locking support. While this
 	does not degrade Samba performance, it significantly degrades Windows client performance because
 	this disables local file caching on Windows clients and forces every file read and written to
@@ -262,12 +262,12 @@
 	support, do so only on the share on which it is required. That way, all other shares can provide
 	oplock support for operations that are tolerant of it. See <a class="link" href="appendix.html#ch12dblck" title="Shared Data Integrity">&#8220;Shared Data Integrity&#8221;</a> for more
 	information.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2642445"></a>Use and Location of BDCs</h3></div></div></div><p>
-	<a class="indexterm" name="id2642453"></a>
-	<a class="indexterm" name="id2642459"></a>
-	<a class="indexterm" name="id2642466"></a>
-	<a class="indexterm" name="id2642473"></a>
-	<a class="indexterm" name="id2642480"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id403710"></a>Use and Location of BDCs</h3></div></div></div><p>
+	<a class="indexterm" name="id403718"></a>
+	<a class="indexterm" name="id403724"></a>
+	<a class="indexterm" name="id403731"></a>
+	<a class="indexterm" name="id403738"></a>
+	<a class="indexterm" name="id403745"></a>
 	On a network segment where there is a PDC and a BDC, the BDC carries the bulk of the network logon
 	processing. If the BDC is a heavily loaded server, the PDC carries a greater proportion of
 	authentication and logon processing. When a sole BDC on a routed network segment gets heavily
@@ -275,13 +275,13 @@
 	to a BDC on a distant network segment. This significantly hinders WAN operations
 	and is undesirable.
 	</p><p>
-	<a class="indexterm" name="id2642498"></a>
-	<a class="indexterm" name="id2642505"></a>
+	<a class="indexterm" name="id403759"></a>
+	<a class="indexterm" name="id403766"></a>
 	As a general guide, instead of adding domain member servers to a network, you would be better advised
 	to add BDCs until there are fewer than 30 Windows clients per BDC. Beyond that ratio, you should add
 	domain member servers. This practice ensures that there are always sufficient domain controllers
 	to handle logon requests and authentication traffic.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2642520"></a>Use One Consistent Version of MS Windows Client</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id403778"></a>Use One Consistent Version of MS Windows Client</h3></div></div></div><p>
 	Every network client has its own peculiarities. From a management perspective, it is easier to deal
 	with one version of MS Windows that is maintained to a consistent update level than it is to deal
 	with a mixture of clients.
@@ -289,61 +289,61 @@
 	On a number of occasions, particular Microsoft service pack updates of a Windows server or client
 	have necessitated special handling from the Samba server end. If you want to remain sane, keep you
 	client workstation configurations consistent.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2642542"></a>For Scalability, Use SAN-Based Storage on Samba Servers</h3></div></div></div><p>
-	<a class="indexterm" name="id2642551"></a>
-	<a class="indexterm" name="id2642558"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id403795"></a>For Scalability, Use SAN-Based Storage on Samba Servers</h3></div></div></div><p>
+	<a class="indexterm" name="id403803"></a>
+	<a class="indexterm" name="id403810"></a>
 	Many SAN-based storage systems permit more than one server to share a common data store.
 	Use of a shared SAN data store means that you do not need to use time- and resource-hungry data 
 	synchronization techniques.
 	</p><p>
-	<a class="indexterm" name="id2642572"></a>
-	<a class="indexterm" name="id2642579"></a>
+	<a class="indexterm" name="id403822"></a>
+	<a class="indexterm" name="id403829"></a>
 	The use of a collection of relatively low-cost front-end Samba servers that are coupled to
 	a shared backend SAN data store permits load distribution while containing costs below that
 	of installing and managing a complex clustering facility.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2642592"></a>Distribute Network Load with MSDFS</h3></div></div></div><p>
-	<a class="indexterm" name="id2642600"></a>
-	<a class="indexterm" name="id2642607"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id403840"></a>Distribute Network Load with MSDFS</h3></div></div></div><p>
+	<a class="indexterm" name="id403848"></a>
+	<a class="indexterm" name="id403855"></a>
 	Microsoft DFS (distributed file system) technology has been implemented in Samba. MSDFS permits
 	data to be accessed from a single share and yet to actually be distributed across multiple actual
 	servers. Refer to <span class="emphasis"><em>TOSHARG2</em></span>, Chapter 19, for information regarding
 	implementation of an MSDFS installation.
 	</p><p>
-	<a class="indexterm" name="id2642625"></a>
-	<a class="indexterm" name="id2642635"></a>
+	<a class="indexterm" name="id403871"></a>
+	<a class="indexterm" name="id403880"></a>
 	The combination of multiple backend servers together with a front-end server and use of MSDFS
 	can achieve almost the same as you would obtain with a clustered Samba server.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2642647"></a>Replicate Data to Conserve Peak-Demand Wide-Area Bandwidth</h3></div></div></div><p>
-	<a class="indexterm" name="id2642655"></a>
-	<a class="indexterm" name="id2642662"></a>
-	<a class="indexterm" name="id2642669"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id403891"></a>Replicate Data to Conserve Peak-Demand Wide-Area Bandwidth</h3></div></div></div><p>
+	<a class="indexterm" name="id403899"></a>
+	<a class="indexterm" name="id403906"></a>
+	<a class="indexterm" name="id403912"></a>
 	Consider using <code class="literal">rsync</code> to replicate data across the WAN during times
 	of low utilization. Users can then access the replicated data store rather than needing to do so
 	across the WAN. This works best for read-only data, but with careful planning can be
 	implemented so that modified files get replicated back to the point of origin. Be careful with your
 	implementation if you choose to permit modification and return replication of the modified file;
 	otherwise, you may inadvertently overwrite important data.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2642692"></a>Hardware Problems</h3></div></div></div><p>
-	<a class="indexterm" name="id2642700"></a>
-	<a class="indexterm" name="id2642707"></a>
-	<a class="indexterm" name="id2642714"></a>
-	<a class="indexterm" name="id2642721"></a>
-	<a class="indexterm" name="id2642730"></a>
-	<a class="indexterm" name="id2642739"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id403932"></a>Hardware Problems</h3></div></div></div><p>
+	<a class="indexterm" name="id403939"></a>
+	<a class="indexterm" name="id403946"></a>
+	<a class="indexterm" name="id403953"></a>
+	<a class="indexterm" name="id403960"></a>
+	<a class="indexterm" name="id403969"></a>
+	<a class="indexterm" name="id403978"></a>
 	Networking hardware prices have fallen sharply over the past 5 years. A surprising number
 	of Samba networking problems over this time have been traced to defective network interface
 	cards (NICs) or defective HUBs, switches, and cables.
 	</p><p>
-	<a class="indexterm" name="id2642756"></a>
+	<a class="indexterm" name="id403993"></a>
 	Not surprising is the fact that network administrators do not like to be shown to have made
 	a bad decision. Money saved in buying low-cost hardware may result in high costs incurred
 	in corrective action.
 	</p><p>
-	<a class="indexterm" name="id2642769"></a>
-	<a class="indexterm" name="id2642776"></a>
-	<a class="indexterm" name="id2642783"></a>
-	<a class="indexterm" name="id2642790"></a>
-	<a class="indexterm" name="id2642797"></a>
+	<a class="indexterm" name="id404004"></a>
+	<a class="indexterm" name="id404011"></a>
+	<a class="indexterm" name="id404018"></a>
+	<a class="indexterm" name="id404025"></a>
+	<a class="indexterm" name="id404032"></a>
 	Defective NICs, HUBs, and switches may appear as intermittent network access problems, intermittent
 	or persistent data corruption, slow network throughput, low performance, or even as BSOD
 	problems with MS Windows clients. In one case, a company updated several workstations with newer, faster
@@ -352,14 +352,14 @@
 	</p><p>
 	Defective hardware problems may take patience and persistence before the real cause can be discovered.
 	</p><p>
-	<a class="indexterm" name="id2642820"></a>
+	<a class="indexterm" name="id404050"></a>
 	Networking hardware defects can significantly impact perceived Samba performance, but defective
 	RAID controllers as well as SCSI and IDE hard disk controllers have also been known to impair Samba server
 	operations. One business came to this realization only after replacing a Samba installation with MS 
 	Windows Server 2000 running on the same hardware. The root of the problem completely eluded the network
 	administrator until the entire server was replaced. While you may well think that this would never
 	happen to you, experience shows that given the right (unfortunate) circumstances, this can happen to anyone.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2642850"></a>Large Directories</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id404070"></a>Large Directories</h3></div></div></div><p>
 	There exist applications that create or manage directories containing many thousands of files. Such
 	applications typically generate many small files (less than 100 KB). At the best of times, under UNIX,
 	listing of the files in a directory that contains many files is slow. By default, Windows NT, 200x, 
@@ -399,7 +399,7 @@
 	All files and directories under the <em class="parameter"><code>path</code></em> directory must be in the same case
 	as specified in the <code class="filename">smb.conf</code> stanza. This means that smbd will not be able to find lower case 
 	filenames with these settings.  Note, this is done on a per-share basis.
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2642954"></a>Key Points Learned</h2></div></div></div><p>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id404151"></a>Key Points Learned</h2></div></div></div><p>
 	This chapter has touched in broad sweeps on a number of simple steps that can be taken
 	to ensure that your Samba network is resilient, scalable, and reliable, and that it
 	performs well.
@@ -408,7 +408,7 @@
 	In the long term, that may not be you. Spare a thought for your successor and give him or
 	her an even break.
 	</p><p>
-	<a class="indexterm" name="id2642975"></a>
+	<a class="indexterm" name="id404169"></a>
 	Last, but not least, you should not only keep the network design simple, but also be sure it is
 	well documented. This book may serve as your pattern for documenting every
 	aspect of your design, its implementation, and particularly the objects and assumptions

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/RefSection.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/RefSection.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/RefSection.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,52 +1,52 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part III. Reference Section</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="index.html" title="Samba-3 by Example"><link rel="prev" href="nw4migration.html" title="Chapter 10. Migrating NetWare Server to Samba-3"><link rel="next" href="kerberos.html" title="Chapter 11. Active Directory, Kerberos, and Security"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part III. Reference Section</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="nw4migration.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="kerberos.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="RefSection"></a>Part III. Reference Section</h1></div></div></div><div class="partintro" lang="en"><div><div><div><h1 class="title"><a name="id2632642"></a>Reference Section</h1></div></div></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part III. Reference Section</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="index.html" title="Samba-3 by Example"><link rel="prev" href="nw4migration.html" title="Chapter 10. Migrating NetWare Server to Samba-3"><link rel="next" href="kerberos.html" title="Chapter 11. Active Directory, Kerberos, and Security"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part III. Reference Section</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="nw4migration.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="kerberos.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="RefSection"></a>Part III. Reference Section</h1></div></div></div><div class="partintro" lang="en"><div><div><div><h1 class="title"><a name="id394649"></a>Reference Section</h1></div></div></div><p>
 This section <span class="emphasis"><em>Samba-3 by Example</em></span> provides important reference material
 that may help you to solve network performance issues, to answer some of the critiques
 published regarding Samba, or just to gain a more broad understanding of how Samba can
 play in a Windows networking world.
-</p><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="kerberos.html">11. Active Directory, Kerberos, and Security</a></span></dt><dd><dl><dt><span class="sect1"><a href="kerberos.html#id2632738">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="kerberos.html#id2633389">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="kerberos.html#id2633405">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="kerberos.html#id2633802">Technical Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="kerberos.html#ch10expl">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="kerberos.html#id2635432">Share Access Controls</a></span></dt><dt><span class="sect2"><a href="kerberos.html#id2635780">Share Definition Controls</a></span></dt><dt><span class="sect2"><a href="kerberos.html#id2636393">Share Point Directory and File Permissions</a></span></dt><dt><span class="sect2"><a href="kerberos.html#id2636796">Managing Windows 200x ACLs</a></span></dt><dt><span class="sect2"><a href="kerberos.html#id2637523">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="kerberos.html#id2637657">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="DomApps.html">12. Integrating Additional Services</a></span></dt><dd><dl><dt><span class="sect1"><a href="DomApps.html#id2638286">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="DomApps.html#id2638317">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="DomApps.html#id2638418">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="DomApps.html#id2638451">Technical Issues</a></span></dt><dt><span class="sect2"><a href="DomApps.html#id2638607">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="DomApps.html#id2638624">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></span></dt><dt><span class="sect2"><a href="DomApps.html#id2640476">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="DomApps.html#id2640537">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="HA.html">13. Performance, Reliability, and Availability</a></span></dt><dd><dl><dt><span class="sect1"><a href="HA.html#id2641056">Introduction</a></span></dt><dt><span class="sect1"><a href="HA.html#id2641143">Dissection and Discussion</a></span></dt><dt><span class="sect1"><a href="HA.html#id2641615">Guidelines for Reliable Samba Operation</a></span></dt><dd><dl><dt><span class="sect2"><a href="HA.html#id2641642">Name Resolution</a></span></dt><dt><span class="sect2"><a href="HA.html#id2642118">Samba Configuration</a></span></dt><dt><span class="sect2"><a href="HA.html#id2642445">Use and Location of BDCs</a></span></dt><dt><span class="sect2"><a href="HA.html#id2642520">Use One Consistent Version of MS Windows Client</a></span></dt><dt><span class="sect2"><a href="HA.html#id2642542">For Scalability, Use SAN-Based Storage on Samba Servers</a></span></dt><dt><span class="sect2"><a href="HA.html#id2642592">Distribute Network Load with MSDFS</a></span></dt><dt><span class="sect2"><a href="HA.html#id2642647">Replicate Data to Conserve Peak-Demand Wide-Area Bandwidth</a></span></dt><dt><span class="sect2"><a href="HA.html#id2642692">Hardware Problems</a></span></dt><dt><span class="sect2"><a href="HA.html#id2642850">Large Directories</a></span></dt></dl></dd><dt><span class="sect1"><a href="HA.html#id2642954">Key Points Learned</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch14.html">14. Samba Support</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch14.html#id2643123">Free Support</a></span></dt><dt><span class="sect1"><a href="ch14.html#id2643342">Commercial Support</a></span></dt></dl></dd><dt><span class="chapter"><a href="appendix.html">15. A Collection of Useful Tidbits</a></span></dt><dd><dl><dt><span class="sect1"><a href="appendix.html#domjoin">Joining a Domain: Windows 200x/XP Professional</a></span></dt><dt><span class="sect1"><a href="appendix.html#id2644049">Samba System File Location</a></span></dt><dt><span class="sect1"><a href="appendix.html#id2644469">Starting Samba</a></span></dt><dt><span class="sect1"><a href="appendix.html#id2644815">DNS Configuration Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix.html#id2644827">The Forward Zone File for the Loopback Adaptor</a></span></dt><dt><span class="sect2"><a href="appendix.html#id2644875">The Reverse Zone File for the Loopback Adaptor</a></span></dt><dt><span class="sect2"><a href="appendix.html#id2645015">DNS Root Server Hint File</a></span></dt></dl></dd><dt><span class="sect1"><a href="appendix.html#altldapcfg">Alternative LDAP Database Initialization</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix.html#id2645074">Initialization of the LDAP Database</a></span></dt></dl></dd><dt><span class="sect1"><a href="appendix.html#id2645653">The LDAP Account Manager</a></span></dt><dt><span class="sect1"><a href="appendix.html#id2646650">IDEALX Management Console</a></span></dt><dt><span class="sect1"><a href="appendix.html#ch12-SUIDSGID">Effect of Setting File and Directory SUID/SGID Permissions Explained</a></span></dt><dt><span class="sect1"><a href="appendix.html#ch12dblck">Shared Data Integrity</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix.html#id2647131">Microsoft Access</a></span></dt><dt><span class="sect2"><a href="appendix.html#id2647278">Act! Database Sharing</a></span></dt><dt><span class="sect2"><a href="appendix.html#id2647362">Opportunistic Locking Controls</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="primer.html">16. Networking Primer</a></span></dt><dd><dl><dt><span class="sect1"><a href="primer.html#id2647528">Requirements and Notes</a></span></dt><dt><span class="sect1"><a href="primer.html#id2647690">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="primer.html#id2647750">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="primer.html#id2647868">Exercises</a></span></dt><dd><dl><dt><span class="sect2"><a href="primer.html#id2647994">Single-Machine Broadcast Activity</a></span></dt><dt><span class="sect2"><a href="primer.html#secondmachine">Second Machine Startup Broadcast Interaction</a></span></dt><dt><span class="sect2"><a href="primer.html#id2649139">Simple Windows Client Connection Characteristics</a></span></dt><dt><span class="sect2"><a href="primer.html#id2649641">Windows 200x/XP Client Interaction with Samba-3</a></span></dt><dt><span class="sect2"><a href="primer.html#id2650209">Conclusions to Exercises</a></span></dt></dl></dd><dt><span class="sect1"><a href="primer.html#chap01conc">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="primer.html#id2650324">Technical Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="primer.html#chap01qa">Questions and Answers</a></span></dt></dl></dd><dt><span class="appendix"><a href="apa.html">A. 
+</p><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="kerberos.html">11. Active Directory, Kerberos, and Security</a></span></dt><dd><dl><dt><span class="sect1"><a href="kerberos.html#id394729">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="kerberos.html#id395316">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="kerberos.html#id395330">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="kerberos.html#id395699">Technical Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="kerberos.html#ch10expl">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="kerberos.html#id397184">Share Access Controls</a></span></dt><dt><span class="sect2"><a href="kerberos.html#id397519">Share Definition Controls</a></span></dt><dt><span class="sect2"><a href="kerberos.html#id398076">Share Point Directory and File Permissions</a></span></dt><dt><span class="sect2"><a href="kerberos.html#id398445">Managing Windows 200x ACLs</a></span></dt><dt><span class="sect2"><a href="kerberos.html#id399129">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="kerberos.html#id399251">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="DomApps.html">12. Integrating Additional Services</a></span></dt><dd><dl><dt><span class="sect1"><a href="DomApps.html#id399839">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="DomApps.html#id399862">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="DomApps.html#id399948">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="DomApps.html#id399977">Technical Issues</a></span></dt><dt><span class="sect2"><a href="DomApps.html#id400123">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="DomApps.html#id400137">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></span></dt><dt><span class="sect2"><a href="DomApps.html#id401888">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="DomApps.html#id401943">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="HA.html">13. Performance, Reliability, and Availability</a></span></dt><dd><dl><dt><span class="sect1"><a href="HA.html#id402421">Introduction</a></span></dt><dt><span class="sect1"><a href="HA.html#id402498">Dissection and Discussion</a></span></dt><dt><span class="sect1"><a href="HA.html#id402949">Guidelines for Reliable Samba Operation</a></span></dt><dd><dl><dt><span class="sect2"><a href="HA.html#id402973">Name Resolution</a></span></dt><dt><span class="sect2"><a href="HA.html#id403415">Samba Configuration</a></span></dt><dt><span class="sect2"><a href="HA.html#id403710">Use and Location of BDCs</a></span></dt><dt><span class="sect2"><a href="HA.html#id403778">Use One Consistent Version of MS Windows Client</a></span></dt><dt><span class="sect2"><a href="HA.html#id403795">For Scalability, Use SAN-Based Storage on Samba Servers</a></span></dt><dt><span class="sect2"><a href="HA.html#id403840">Distribute Network Load with MSDFS</a></span></dt><dt><span class="sect2"><a href="HA.html#id403891">Replicate Data to Conserve Peak-Demand Wide-Area Bandwidth</a></span></dt><dt><span class="sect2"><a href="HA.html#id403932">Hardware Problems</a></span></dt><dt><span class="sect2"><a href="HA.html#id404070">Large Directories</a></span></dt></dl></dd><dt><span class="sect1"><a href="HA.html#id404151">Key Points Learned</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch14.html">14. Samba Support</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch14.html#id404300">Free Support</a></span></dt><dt><span class="sect1"><a href="ch14.html#id404499">Commercial Support</a></span></dt></dl></dd><dt><span class="chapter"><a href="appendix.html">15. A Collection of Useful Tidbits</a></span></dt><dd><dl><dt><span class="sect1"><a href="appendix.html#domjoin">Joining a Domain: Windows 200x/XP Professional</a></span></dt><dt><span class="sect1"><a href="appendix.html#id405157">Samba System File Location</a></span></dt><dt><span class="sect1"><a href="appendix.html#id405549">Starting Samba</a></span></dt><dt><span class="sect1"><a href="appendix.html#id405844">DNS Configuration Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix.html#id405854">The Forward Zone File for the Loopback Adaptor</a></span></dt><dt><span class="sect2"><a href="appendix.html#id405898">The Reverse Zone File for the Loopback Adaptor</a></span></dt><dt><span class="sect2"><a href="appendix.html#id405998">DNS Root Server Hint File</a></span></dt></dl></dd><dt><span class="sect1"><a href="appendix.html#altldapcfg">Alternative LDAP Database Initialization</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix.html#id406053">Initialization of the LDAP Database</a></span></dt></dl></dd><dt><span class="sect1"><a href="appendix.html#id406519">The LDAP Account Manager</a></span></dt><dt><span class="sect1"><a href="appendix.html#id407438">IDEALX Management Console</a></span></dt><dt><span class="sect1"><a href="appendix.html#ch12-SUIDSGID">Effect of Setting File and Directory SUID/SGID Permissions Explained</a></span></dt><dt><span class="sect1"><a href="appendix.html#ch12dblck">Shared Data Integrity</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix.html#id407872">Microsoft Access</a></span></dt><dt><span class="sect2"><a href="appendix.html#id408011">Act! Database Sharing</a></span></dt><dt><span class="sect2"><a href="appendix.html#id408086">Opportunistic Locking Controls</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="primer.html">16. Networking Primer</a></span></dt><dd><dl><dt><span class="sect1"><a href="primer.html#id408228">Requirements and Notes</a></span></dt><dt><span class="sect1"><a href="primer.html#id408364">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="primer.html#id408414">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="primer.html#id408521">Exercises</a></span></dt><dd><dl><dt><span class="sect2"><a href="primer.html#id408634">Single-Machine Broadcast Activity</a></span></dt><dt><span class="sect2"><a href="primer.html#secondmachine">Second Machine Startup Broadcast Interaction</a></span></dt><dt><span class="sect2"><a href="primer.html#id409728">Simple Windows Client Connection Characteristics</a></span></dt><dt><span class="sect2"><a href="primer.html#id410194">Windows 200x/XP Client Interaction with Samba-3</a></span></dt><dt><span class="sect2"><a href="primer.html#id410719">Conclusions to Exercises</a></span></dt></dl></dd><dt><span class="sect1"><a href="primer.html#chap01conc">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="primer.html#id410820">Technical Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="primer.html#chap01qa">Questions and Answers</a></span></dt></dl></dd><dt><span class="appendix"><a href="apa.html">A. 
     <acronym class="acronym">GNU</acronym> General Public License version 3
-  </a></span></dt><dd><dl><dt><span class="bridgehead"><a href="apa.html#id2650989">A. 
+  </a></span></dt><dd><dl><dt><span class="bridgehead"><a href="apa.html#id411425">A. 
     Preamble
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651134">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411534">A. 
     TERMS AND CONDITIONS
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651138">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411537">A. 
     0. Definitions.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651230">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411601">A. 
     1. Source Code.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651329">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411663">A. 
     2. Basic Permissions.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651369">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411691">A. 
     3. Protecting Users&#8217; Legal Rights From Anti-Circumvention Law.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651409">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411717">A. 
     4. Conveying Verbatim Copies.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651436">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411737">A. 
     5. Conveying Modified Source Versions.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651532">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411809">A. 
     6. Conveying Non-Source Forms.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651722">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411941">A. 
      7. Additional Terms.
-   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651857">A. 
+   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412046">A. 
      8. Termination.
-   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651901">A. 
+   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412078">A. 
      9. Acceptance Not Required for Having Copies.
-   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651920">A. 
+   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412092">A. 
      10. Automatic Licensing of Downstream Recipients.
-   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651972">A. 
+   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412126">A. 
     11. Patents.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2652108">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412210">A. 
     12. No Surrender of Others&#8217; Freedom.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2652130">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412225">A. 
     13. Use with the ???TITLE??? Affero General Public License.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2652159">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412249">A. 
     14. Revised Versions of this License.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2652221">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412296">A. 
     15. Disclaimer of Warranty.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2652247">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412314">A. 
     16. Limitation of Liability.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2652268">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412328">A. 
     17. Interpretation of Sections 15 and 16.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2652284">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412341">A. 
     END OF TERMS AND CONDITIONS
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2652288">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412344">A. 
     How to Apply These Terms to Your New Programs
   </a></span></dt></dl></dd></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="nw4migration.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="kerberos.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 10. Migrating NetWare Server to Samba-3 </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 11. Active Directory, Kerberos, and Security</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/apa.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/apa.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/apa.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,50 +1,50 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Appendix A.  GNU General Public License version 3</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="RefSection.html" title="Part III. Reference Section"><link rel="prev" href="primer.html" title="Chapter 16. Networking Primer"><link rel="next" href="go01.html" title="Glossary"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix A. 
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Appendix A.  GNU General Public License version 3</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="RefSection.html" title="Part III. Reference Section"><link rel="prev" href="primer.html" title="Chapter 16. Networking Primer"><link rel="next" href="go01.html" title="Glossary"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix A. 
     <acronym class="acronym">GNU</acronym> General Public License version 3
-  </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="primer.html">Prev</a> </td><th width="60%" align="center">Part III. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="go01.html">Next</a></td></tr></table><hr></div><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="id2650960"></a>Appendix A. 
+  </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="primer.html">Prev</a> </td><th width="60%" align="center">Part III. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="go01.html">Next</a></td></tr></table><hr></div><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="id411399"></a>Appendix A. 
     <acronym class="acronym">GNU</acronym> General Public License version 3
-  </h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="bridgehead"><a href="apa.html#id2650989">A. 
+  </h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="bridgehead"><a href="apa.html#id411425">A. 
     Preamble
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651134">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411534">A. 
     TERMS AND CONDITIONS
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651138">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411537">A. 
     0. Definitions.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651230">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411601">A. 
     1. Source Code.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651329">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411663">A. 
     2. Basic Permissions.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651369">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411691">A. 
     3. Protecting Users&#8217; Legal Rights From Anti-Circumvention Law.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651409">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411717">A. 
     4. Conveying Verbatim Copies.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651436">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411737">A. 
     5. Conveying Modified Source Versions.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651532">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411809">A. 
     6. Conveying Non-Source Forms.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651722">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411941">A. 
      7. Additional Terms.
-   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651857">A. 
+   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412046">A. 
      8. Termination.
-   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651901">A. 
+   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412078">A. 
      9. Acceptance Not Required for Having Copies.
-   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651920">A. 
+   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412092">A. 
      10. Automatic Licensing of Downstream Recipients.
-   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651972">A. 
+   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412126">A. 
     11. Patents.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2652108">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412210">A. 
     12. No Surrender of Others&#8217; Freedom.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2652130">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412225">A. 
     13. Use with the ???TITLE??? Affero General Public License.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2652159">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412249">A. 
     14. Revised Versions of this License.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2652221">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412296">A. 
     15. Disclaimer of Warranty.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2652247">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412314">A. 
     16. Limitation of Liability.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2652268">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412328">A. 
     17. Interpretation of Sections 15 and 16.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2652284">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412341">A. 
     END OF TERMS AND CONDITIONS
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2652288">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412344">A. 
     How to Apply These Terms to Your New Programs
   </a></span></dt></dl></div><p>
     Version 3, 29 June 2007
@@ -54,7 +54,7 @@
   </p><p>
     Everyone is permitted to copy and distribute verbatim copies of this license
     document, but changing it is not allowed.
-  </p><h2><a name="id2650989"></a>
+  </p><h2><a name="id411425"></a>
     Preamble
   </h2><p>
     The <acronym class="acronym">GNU</acronym> General Public License is a free, copyleft
@@ -118,9 +118,9 @@
   </p><p>
     The precise terms and conditions for copying, distribution and modification
     follow.
-  </p><h2><a name="id2651134"></a>
+  </p><h2><a name="id411534"></a>
     TERMS AND CONDITIONS
-  </h2><h2><a name="id2651138"></a>
+  </h2><h2><a name="id411537"></a>
     0. Definitions.
   </h2><p>
     &#8220;This License&#8221; refers to version 3 of the <acronym class="acronym">GNU</acronym>
@@ -162,7 +162,7 @@
     License, and how to view a copy of this License.  If the interface presents
     a list of user commands or options, such as a menu, a prominent item in the
     list meets this criterion.
-  </p><h2><a name="id2651230"></a>
+  </p><h2><a name="id411601"></a>
     1. Source Code.
   </h2><p>
     The &#8220;source code&#8221; for a work means the preferred form of the
@@ -202,7 +202,7 @@
     automatically from other parts of the Corresponding Source.
   </p><p>
     The Corresponding Source for a work in source code form is that same work.
-  </p><h2><a name="id2651329"></a>
+  </p><h2><a name="id411663"></a>
     2. Basic Permissions.
   </h2><p>
     All rights granted under this License are granted for the term of copyright
@@ -227,7 +227,7 @@
     Conveying under any other circumstances is permitted solely under the
     conditions stated below.  Sublicensing is not allowed; section 10 makes it
     unnecessary.
-  </p><h2><a name="id2651369"></a>
+  </p><h2><a name="id411691"></a>
     3. Protecting Users&#8217; Legal Rights From Anti-Circumvention Law.
   </h2><p>
     No covered work shall be deemed part of an effective technological measure
@@ -242,7 +242,7 @@
     the work as a means of enforcing, against the work&#8217;s users, your or
     third parties&#8217; legal rights to forbid circumvention of technological
     measures.
-  </p><h2><a name="id2651409"></a>
+  </p><h2><a name="id411717"></a>
     4. Conveying Verbatim Copies.
   </h2><p>
     You may convey verbatim copies of the Program&#8217;s source code as you
@@ -255,7 +255,7 @@
   </p><p>
     You may charge any price or no price for each copy that you convey, and you
     may offer support or warranty protection for a fee.
-  </p><h2><a name="id2651436"></a>
+  </p><h2><a name="id411737"></a>
     5. Conveying Modified Source Versions.
   </h2><p>
     You may convey a work based on the Program, or the modifications to produce
@@ -291,7 +291,7 @@
     or legal rights of the compilation&#8217;s users beyond what the individual works
     permit.  Inclusion of a covered work in an aggregate does not cause
     this License to apply to the other parts of the aggregate.
-  </p><h2><a name="id2651532"></a>
+  </p><h2><a name="id411809"></a>
     6. Conveying Non-Source Forms.
   </h2><p>
     You may convey a covered work in object code form under the terms of
@@ -386,7 +386,7 @@
     (and with an implementation available to the public in source code form),
     and must require no special password or key for unpacking, reading or
     copying.
-  </p><h2><a name="id2651722"></a>
+  </p><h2><a name="id411941"></a>
      7. Additional Terms.
    </h2><p>
      &#8220;Additional permissions&#8221; are terms that supplement the terms of
@@ -450,7 +450,7 @@
      Additional terms, permissive or non-permissive, may be stated in the form
      of a separately written license, or stated as exceptions; the above
      requirements apply either way.
-   </p><h2><a name="id2651857"></a>
+   </p><h2><a name="id412046"></a>
      8. Termination.
    </h2><p>
      You may not propagate or modify a covered work except as expressly provided
@@ -476,7 +476,7 @@
      License.  If your rights have been terminated and not permanently
      reinstated, you do not qualify to receive new licenses for the same
      material under section 10.
-   </p><h2><a name="id2651901"></a>
+   </p><h2><a name="id412078"></a>
      9. Acceptance Not Required for Having Copies.
    </h2><p>
      You are not required to accept this License in order to receive or run a
@@ -487,7 +487,7 @@
      These actions infringe copyright if you do not accept this License.
      Therefore, by modifying or propagating a covered work, you indicate your
      acceptance of this License to do so.
-   </p><h2><a name="id2651920"></a>
+   </p><h2><a name="id412092"></a>
      10. Automatic Licensing of Downstream Recipients.
    </h2><p>
      Each time you convey a covered work, the recipient automatically receives a
@@ -512,7 +512,7 @@
      or counterclaim in a lawsuit) alleging that any patent claim is infringed
      by making, using, selling, offering for sale, or importing the Program or
      any portion of it.
-   </p><h2><a name="id2651972"></a>
+   </p><h2><a name="id412126"></a>
     11. Patents.
   </h2><p>
     A &#8220;contributor&#8221; is a copyright holder who authorizes use under
@@ -579,7 +579,7 @@
     Nothing in this License shall be construed as excluding or limiting any
     implied license or other defenses to infringement that may otherwise be
     available to you under applicable patent law.
-  </p><h2><a name="id2652108"></a>
+  </p><h2><a name="id412210"></a>
     12. No Surrender of Others&#8217; Freedom.
   </h2><p>
     If conditions are imposed on you (whether by court order, agreement or
@@ -591,7 +591,7 @@
     to collect a royalty for further conveying from those to whom you convey the
     Program, the only way you could satisfy both those terms and this License
     would be to refrain entirely from conveying the Program.
-  </p><h2><a name="id2652130"></a>
+  </p><h2><a name="id412225"></a>
     13. Use with the <acronym class="acronym">GNU</acronym> Affero General Public License.
   </h2><p>
     Notwithstanding any other provision of this License, you have permission to
@@ -602,7 +602,7 @@
     requirements of the <acronym class="acronym">GNU</acronym> Affero General Public License,
     section 13, concerning interaction through a network will apply to the
     combination as such.
-  </p><h2><a name="id2652159"></a>
+  </p><h2><a name="id412249"></a>
     14. Revised Versions of this License.
   </h2><p>
     The Free Software Foundation may publish revised and/or new versions of the
@@ -627,7 +627,7 @@
     Later license versions may give you additional or different permissions.
     However, no additional obligations are imposed on any author or copyright
     holder as a result of your choosing to follow a later version.
-  </p><h2><a name="id2652221"></a>
+  </p><h2><a name="id412296"></a>
     15. Disclaimer of Warranty.
   </h2><p>
     THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
@@ -638,7 +638,7 @@
     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH
     YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
     NECESSARY SERVICING, REPAIR OR CORRECTION.
-  </p><h2><a name="id2652247"></a>
+  </p><h2><a name="id412314"></a>
     16. Limitation of Liability.
   </h2><p>
     IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
@@ -650,7 +650,7 @@
     PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
     EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGES.
-  </p><h2><a name="id2652268"></a>
+  </p><h2><a name="id412328"></a>
     17. Interpretation of Sections 15 and 16.
   </h2><p>
     If the disclaimer of warranty and limitation of liability provided above
@@ -659,9 +659,9 @@
     waiver of all civil liability in connection with the Program, unless a
     warranty or assumption of liability accompanies a copy of the Program in
     return for a fee.
-  </p><h2><a name="id2652284"></a>
+  </p><h2><a name="id412341"></a>
     END OF TERMS AND CONDITIONS
-  </h2><h2><a name="id2652288"></a>
+  </h2><h2><a name="id412344"></a>
     How to Apply These Terms to Your New Programs
   </h2><p>
     If you develop a new program, and you want it to be of the greatest possible

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/appendix.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/appendix.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/appendix.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,18 +1,18 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 15. A Collection of Useful Tidbits</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="RefSection.html" title="Part III. Reference Section"><link rel="prev" href="ch14.html" title="Chapter 14. Samba Support"><link rel="next" href="primer.html" title="Chapter 16. Networking Primer"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 15. A Collection of Useful Tidbits</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch14.html">Prev</a> </td><th width="60%" align="center">Part III. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="primer.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="appendix"></a>Chapter 15. A Collection of Useful Tidbits</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="appendix.html#domjoin">Joining a Domain: Windows 200x/XP Professional</a></span></dt><dt><span class="sect1"><a href="appendix.html#id2644049">Samba System File Location</a></span></dt><dt><span class="sect1"><a href="appendix.html#id2644469">Starting Samba</a></span></dt><dt><span class="sect1"><a href="appendix.html#id2644815">DNS Configuration Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix.html#id2644827">The Forward Zone File for the Loopback Adaptor</a></span></dt><dt><span class="sect2"><a href="appendix.html#id2644875">The Reverse Zone File for the Loopback Adaptor</a></span></dt><dt><span class="sect2"><a href="appendix.html#id2645015">DNS Root Server Hint File</a></span></dt></dl></dd><dt><span class="sect1"><a href="appendix.html#altldapcfg">Alternative LDAP Database Initialization</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix.html#id2645074">Initialization of the LDAP Database</a></span></dt></dl></dd><dt><span class="sect1"><a href="appendix.html#id2645653">The LDAP Account Manager</a></span></dt><dt><span class="sect1"><a href="appendix.html#id2646650">IDEALX Management Console</a></span></dt><dt><span class="sect1"><a href="appendix.html#ch12-SUIDSGID">Effect of Setting File and Directory SUID/SGID Permissions Explained</a></span></dt><dt><span class="sect1"><a href="appendix.html#ch12dblck">Shared Data Integrity</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix.html#id2647131">Microsoft Access</a></span></dt><dt><span class="sect2"><a href="appendix.html#id2647278">Act! Database Sharing</a></span></dt><dt><span class="sect2"><a href="appendix.html#id2647362">Opportunistic Locking Controls</a></span></dt></dl></dd></dl></div><p>
-	<a class="indexterm" name="id2643470"></a>
-	<a class="indexterm" name="id2643477"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 15. A Collection of Useful Tidbits</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="RefSection.html" title="Part III. Reference Section"><link rel="prev" href="ch14.html" title="Chapter 14. Samba Support"><link rel="next" href="primer.html" title="Chapter 16. Networking Primer"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 15. A Collection of Useful Tidbits</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch14.html">Prev</a> </td><th width="60%" align="center">Part III. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="primer.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="appendix"></a>Chapter 15. A Collection of Useful Tidbits</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="appendix.html#domjoin">Joining a Domain: Windows 200x/XP Professional</a></span></dt><dt><span class="sect1"><a href="appendix.html#id405157">Samba System File Location</a></span></dt><dt><span class="sect1"><a href="appendix.html#id405549">Starting Samba</a></span></dt><dt><span class="sect1"><a href="appendix.html#id405844">DNS Configuration Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix.html#id405854">The Forward Zone File for the Loopback Adaptor</a></span></dt><dt><span class="sect2"><a href="appendix.html#id405898">The Reverse Zone File for the Loopback Adaptor</a></span></dt><dt><span class="sect2"><a href="appendix.html#id405998">DNS Root Server Hint File</a></span></dt></dl></dd><dt><span class="sect1"><a href="appendix.html#altldapcfg">Alternative LDAP Database Initialization</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix.html#id406053">Initialization of the LDAP Database</a></span></dt></dl></dd><dt><span class="sect1"><a href="appendix.html#id406519">The LDAP Account Manager</a></span></dt><dt><span class="sect1"><a href="appendix.html#id407438">IDEALX Management Console</a></span></dt><dt><span class="sect1"><a href="appendix.html#ch12-SUIDSGID">Effect of Setting File and Directory SUID/SGID Permissions Explained</a></span></dt><dt><span class="sect1"><a href="appendix.html#ch12dblck">Shared Data Integrity</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix.html#id407872">Microsoft Access</a></span></dt><dt><span class="sect2"><a href="appendix.html#id408011">Act! Database Sharing</a></span></dt><dt><span class="sect2"><a href="appendix.html#id408086">Opportunistic Locking Controls</a></span></dt></dl></dd></dl></div><p>
+	<a class="indexterm" name="id404612"></a>
+	<a class="indexterm" name="id404619"></a>
 	Information presented here is considered to be either basic or well-known material that is informative
 	yet helpful. Over the years, I have observed an interesting behavior. There is an expectation that
 	the process for joining a Windows client to a Samba-controlled Windows domain may somehow involve steps
 	different from doing so with Windows NT4 or a Windows ADS domain. Be assured that the steps are identical,
 	as shown in the example given below.
 	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="domjoin"></a>Joining a Domain: Windows 200x/XP Professional</h2></div></div></div><p>
-	<a class="indexterm" name="id2643507"></a>
+	<a class="indexterm" name="id404645"></a>
 	Microsoft Windows NT/200x/XP Professional platforms can participate in Domain Security.
 	This section steps through the process for making a Windows 200x/XP Professional machine a
 	member of a Domain Security environment. It should be noted that this process is identical
 	when joining a domain that is controlled by Windows NT4/200x as well as a Samba PDC.
-	</p><div class="procedure"><a name="id2643521"></a><p class="title"><b>Procedure 15.1. Steps to Join a Domain</b></p><ol type="1"><li><p>
+	</p><div class="procedure"><a name="id404656"></a><p class="title"><b>Procedure 15.1. Steps to Join a Domain</b></p><ol type="1"><li><p>
 		Click <span class="guimenu">Start</span>.
 		</p></li><li><p>
 		Right-click <span class="guimenu">My Computer</span>, and then select <span class="guimenuitem">Properties</span>.
@@ -50,19 +50,19 @@
 		The &#8220;<span class="quote">Welcome to the MIDEARTH domain</span>&#8221; dialog box should appear. At this point, the machine must be rebooted.
 		Joining the domain is now complete.
 		</p></li></ol></div><p>
-	<a class="indexterm" name="id2643939"></a>
-	<a class="indexterm" name="id2643946"></a>
+	<a class="indexterm" name="id405060"></a>
+	<a class="indexterm" name="id405067"></a>
 	The screen capture shown in <a class="link" href="appendix.html#swxpp007" title="Figure 15.4. The Computer Name Changes Panel Domain MIDEARTH">&#8220;The Computer Name Changes Panel  Domain MIDEARTH&#8221;</a> has a button labeled <span class="guimenu">More...</span>. This button opens a
 	panel in which you can set (or change) the Primary DNS suffix of the computer. This is a parameter that mainly affects members
 	of Microsoft Active Directory. Active Directory is heavily oriented around the DNS namespace.
 	</p><p>
-	<a class="indexterm" name="id2643972"></a>
-	<a class="indexterm" name="id2643979"></a>
+	<a class="indexterm" name="id405090"></a>
+	<a class="indexterm" name="id405097"></a>
 	Where NetBIOS technology uses WINS as well as UDP broadcast as key mechanisms for name resolution, Active Directory servers
 	register their services with the Microsoft Dynamic DNS server. Windows clients must be able to query the correct DNS server
 	to find the services (like which machines are domain controllers or which machines have the Netlogon service running).
 	</p><p>
-	<a class="indexterm" name="id2643998"></a>
+	<a class="indexterm" name="id405112"></a>
 	The default setting of the Primary DNS suffix is the Active Directory domain name. When you change the Primary DNS suffix,
 	this does not affect domain membership, but it can break network browsing and the ability to resolve your computer name to
 	a valid IP address.
@@ -70,12 +70,12 @@
 	The Primary DNS suffix parameter principally affects MS Windows clients that are members of an Active Directory domain.
 	Where the client is a member of a Samba domain, it is preferable to leave this field blank.
 	</p><p>
-	<a class="indexterm" name="id2644021"></a>
+	<a class="indexterm" name="id405132"></a>
 	According to Microsoft documentation, &#8220;<span class="quote">If this computer belongs to a group with <code class="constant">Group Policy</code>
 	enabled on <code class="literal">Primary DNS suffice of this computer</code>, the string specified in the Group Policy is used
 	as the primary DNS suffix and you might need to restart your computer to view the correct setting. The local setting is
 	used only if Group Policy is disabled or unspecified.</span>&#8221;
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2644049"></a>Samba System File Location</h2></div></div></div><p><a class="indexterm" name="id2644056"></a><a class="indexterm" name="id2644064"></a><a class="indexterm" name="id2644072"></a>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id405157"></a>Samba System File Location</h2></div></div></div><p><a class="indexterm" name="id405164"></a><a class="indexterm" name="id405172"></a><a class="indexterm" name="id405180"></a>
 	One of the frustrations expressed by subscribers to the Samba mailing lists revolves around the choice of where the default Samba Team
 	build and installation process locates its Samba files. The location, chosen in the early 1990s, for the default installation is
 	in the <code class="filename">/usr/local/samba</code> directory. This is a perfectly reasonable location, particularly given all the other
@@ -83,7 +83,7 @@
 	</p><p>
 	Several UNIX vendors, and Linux vendors in particular, elected to locate the Samba files in a location other than the Samba Team
 	default. 
-	</p><p><a class="indexterm" name="id2644108"></a><a class="indexterm" name="id2644120"></a><a class="indexterm" name="id2644127"></a><a class="indexterm" name="id2644138"></a><a class="indexterm" name="id2644146"></a><a class="indexterm" name="id2644157"></a><a class="indexterm" name="id2644165"></a><a class="indexterm" name="id2644173"></a><a class="indexterm" name="id2644181"></a><a class="indexterm" name="id2644189"></a><a class="indexterm" name="id2644197"></a><a class="indexterm" name="id2644204"></a><a class="indexterm" name="id2644212"></a><a class="indexterm" name="id2644220"></a><a class="indexterm" name="id2644229"></a><a class="indexterm" name="id2644236"></a>
+	</p><p><a class="indexterm" name="id405210"></a><a class="indexterm" name="id405222"></a><a class="indexterm" name="id405229"></a><a class="indexterm" name="id405240"></a><a class="indexterm" name="id405248"></a><a class="indexterm" name="id405259"></a><a class="indexterm" name="id405266"></a><a class="indexterm" name="id405274"></a><a class="indexterm" name="id405282"></a><a class="indexterm" name="id405290"></a><a class="indexterm" name="id405298"></a><a class="indexterm" name="id405306"></a><a class="indexterm" name="id405314"></a><a class="indexterm" name="id405322"></a><a class="indexterm" name="id405329"></a><a class="indexterm" name="id405337"></a>
 	Linux vendors, working in conjunction with the Free Standards Group (FSG), Linux Standards Base (LSB), and File Hierarchy	
 	System (FHS), have elected to locate the configuration files under the <code class="filename">/etc/samba</code> directory, common binary
 	files (those used by users) in the <code class="filename">/usr/bin</code> directory, and the administrative files (daemons) in the
@@ -92,13 +92,13 @@
 	<code class="filename">/usr/share/swat</code>. There are additional support files for <code class="literal">smbd</code> in the
 	<code class="filename">/usr/lib/samba</code> directory tree. The files located there include the dynamically loadable modules for the
 	passdb backend as well as for the VFS modules.
-	</p><p><a class="indexterm" name="id2644306"></a><a class="indexterm" name="id2644314"></a><a class="indexterm" name="id2644322"></a>
+	</p><p><a class="indexterm" name="id405401"></a><a class="indexterm" name="id405409"></a><a class="indexterm" name="id405416"></a>
 	Samba creates runtime control files and generates log files. The runtime control files (tdb and dat files) are stored in
 	the <code class="filename">/var/lib/samba</code> directory. Log files are created in <code class="filename">/var/log/samba.</code>
 	</p><p>
 	When Samba is built and installed using the default Samba Team process, all files are located under the 
 	<code class="filename">/usr/local/samba</code> directory tree. This makes it simple to find the files that Samba owns.
-	</p><p><a class="indexterm" name="id2644360"></a>
+	</p><p><a class="indexterm" name="id405451"></a>
 	One way to find the Samba files that are installed on your UNIX/Linux system is to search for the location
 	of all files called <code class="literal">smbd</code>. Here is an example:
 </p><pre class="screen">
@@ -131,7 +131,7 @@
 	</p><p>
 	Many people have been caught by installation of Samba using the default Samba Team process when it was already installed
 	by the platform vendor's method. If your platform uses RPM format packages, you can check to see if Samba is installed by
-	executing:<a class="indexterm" name="id2644433"></a>
+	executing:<a class="indexterm" name="id405516"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> rpm -qa | grep samba
 samba3-pdb-3.0.20-1
@@ -143,9 +143,9 @@
 samba3-doc-3.0.20-1
 samba3-client-3.0.20-1
 samba3-cifsmount-3.0.20-1
-	</pre><p><a class="indexterm" name="id2644456"></a>
+	</pre><p><a class="indexterm" name="id405536"></a>
 	The package names, of course, vary according to how the vendor, or the binary package builder, prepared them.
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2644469"></a>Starting Samba</h2></div></div></div><p><a class="indexterm" name="id2644476"></a>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id405549"></a>Starting Samba</h2></div></div></div><p><a class="indexterm" name="id405555"></a>
 	Samba essentially consists of two or three daemons. A daemon is a UNIX application that runs in the background and provides services.
 	An example of a service is the Apache Web server for which the daemon is called <code class="literal">httpd</code>. In the case of Samba, there
 	are three daemons, two of which are needed as a minimum.
@@ -186,19 +186,19 @@
 fi
 exit 0
 </pre></div></div><br class="example-break"><div class="variablelist"><dl><dt><span class="term">nmbd</span></dt><dd><p>
-			<a class="indexterm" name="id2644539"></a>
-			<a class="indexterm" name="id2644545"></a>
+			<a class="indexterm" name="id405609"></a>
+			<a class="indexterm" name="id405616"></a>
 			This daemon handles all name registration and resolution requests. It is the primary vehicle involved
 			in network browsing. It handles all UDP-based protocols. The <code class="literal">nmbd</code> daemon should
 			be the first command started as part of the Samba startup process.
 			</p></dd><dt><span class="term">smbd</span></dt><dd><p>
-			<a class="indexterm" name="id2644575"></a>
-			<a class="indexterm" name="id2644582"></a>
+			<a class="indexterm" name="id405643"></a>
+			<a class="indexterm" name="id405650"></a>
 			This daemon handles all TCP/IP-based connection services for file- and print-based operations. It also
 			manages local authentication. It should be started immediately following the startup of <code class="literal">nmbd</code>.
 			</p></dd><dt><span class="term">winbindd</span></dt><dd><p>
-			<a class="indexterm" name="id2644610"></a>
-			<a class="indexterm" name="id2644617"></a>
+			<a class="indexterm" name="id405677"></a>
+			<a class="indexterm" name="id405683"></a>
 			This daemon should be started when Samba is a member of a Windows NT4 or ADS domain. It is also needed when
 			Samba has trust relationships with another domain. The <code class="literal">winbindd</code> daemon will check the
 			<code class="filename">smb.conf</code> file for the presence of the <em class="parameter"><code>idmap uid</code></em> and <em class="parameter"><code>idmap gid</code></em>
@@ -252,22 +252,22 @@
         echo "Usage: smb {start|stop|restart|status}"
         exit 1
 esac
-</pre></div></div><br class="example-break"><p><a class="indexterm" name="id2644737"></a>
+</pre></div></div><br class="example-break"><p><a class="indexterm" name="id405774"></a>
 	SUSE Linux implements individual control over each Samba daemon. A Samba control script that can be conveniently
 	executed from the command line is shown in <a class="link" href="appendix.html#ch12SL" title="Example 15.1. A Useful Samba Control Script for SUSE Linux">&#8220;A Useful Samba Control Script for SUSE Linux&#8221;</a>. This can be located in the directory
 	<code class="filename">/sbin</code> in a file called <code class="filename">samba</code>. This type of control script should be
 	owned by user root and group root, and set so that only root can execute it.
-	</p><p><a class="indexterm" name="id2644772"></a>
+	</p><p><a class="indexterm" name="id405805"></a>
 	A sample startup script for a Red Hat Linux system is shown in <a class="link" href="appendix.html#ch12RHscript" title="Example 15.2. A Sample Samba Control Script for Red Hat Linux">&#8220;A Sample Samba Control Script for Red Hat Linux&#8221;</a>.
 	This file could be located in the directory <code class="filename">/etc/rc.d</code> and can be called
 	<code class="filename">samba</code>. A similar startup script is required to control <code class="literal">winbind</code>.
 	If you want to find more information regarding startup scripts please refer to the packaging section of
 	the Samba source code distribution tarball. The packaging files for each platform include a
 	startup control file.
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2644815"></a>DNS Configuration Files</h2></div></div></div><p>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id405844"></a>DNS Configuration Files</h2></div></div></div><p>
 	The following files are common to all DNS server configurations. Rather than repeat them multiple times, they
 	are presented here for general reference.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2644827"></a>The Forward Zone File for the Loopback Adaptor</h3></div></div></div><p>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id405854"></a>The Forward Zone File for the Loopback Adaptor</h3></div></div></div><p>
 	The forward zone file for the loopback address never changes. An example file is shown
 	in <a class="link" href="appendix.html#loopback" title="Example 15.3. DNS Localhost Forward Zone File: /var/lib/named/localhost.zone">&#8220;DNS Localhost Forward Zone File: /var/lib/named/localhost.zone&#8221;</a>. All traffic destined for an IP address that is hosted on a
 	physical interface on the machine itself is routed to the loopback adaptor. This is
@@ -284,7 +284,7 @@
 
 		IN NS		@
 		IN A		127.0.0.1
-</pre></div></div><br class="example-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2644875"></a>The Reverse Zone File for the Loopback Adaptor</h3></div></div></div><p>
+</pre></div></div><br class="example-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id405898"></a>The Reverse Zone File for the Loopback Adaptor</h3></div></div></div><p>
 	The reverse zone file for the loopback address as shown in <a class="link" href="appendix.html#dnsloopy" title="Example 15.4. DNS Localhost Reverse Zone File: /var/lib/named/127.0.0.zone">&#8220;DNS Localhost Reverse Zone File: /var/lib/named/127.0.0.zone&#8221;</a>
 	is necessary so that references to the address <code class="constant">127.0.0.1</code> can be
 	resolved to the correct name of the interface. 
@@ -344,15 +344,15 @@
 .                        3600000      NS    M.ROOT-SERVERS.NET.
 M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33
 ; End of File
-</pre></div></div><br class="example-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2645015"></a>DNS Root Server Hint File</h3></div></div></div><p>
+</pre></div></div><br class="example-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id405998"></a>DNS Root Server Hint File</h3></div></div></div><p>
 	The content of the root hints file as shown in <a class="link" href="appendix.html#roothint" title="Example 15.5. DNS Root Name Server Hint File: /var/lib/named/root.hint">&#8220;DNS Root Name Server Hint File: /var/lib/named/root.hint&#8221;</a>  changes slowly over time. 
 	Periodically this file should be updated from the source shown. Because
 	  of its size, this file is located at the end of this chapter.
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="altldapcfg"></a>Alternative LDAP Database Initialization</h2></div></div></div><p><a class="indexterm" name="id2645046"></a><a class="indexterm" name="id2645057"></a>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="altldapcfg"></a>Alternative LDAP Database Initialization</h2></div></div></div><p><a class="indexterm" name="id406027"></a><a class="indexterm" name="id406038"></a>
 	The following procedure may be used as an alternative means of configuring
 	the initial LDAP database. Many administrators prefer to have greater control
 	over how system files get configured.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2645074"></a>Initialization of the LDAP Database</h3></div></div></div><p><a class="indexterm" name="id2645082"></a><a class="indexterm" name="id2645089"></a><a class="indexterm" name="id2645101"></a>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id406053"></a>Initialization of the LDAP Database</h3></div></div></div><p><a class="indexterm" name="id406060"></a><a class="indexterm" name="id406068"></a><a class="indexterm" name="id406079"></a>
 	The first step to get the LDAP server ready for action is to create the LDIF file from
 	which the LDAP database will be preloaded. This is necessary to create the containers
 	into which the user, group, and other accounts are written. It is also necessary to
@@ -705,14 +705,14 @@
 sambaGroupType: 2
 displayName: Domain Users
 description: Domain Users
-</pre></div></div><br class="example-break"></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2645653"></a>The LDAP Account Manager</h2></div></div></div><p>
-<a class="indexterm" name="id2645661"></a>
-<a class="indexterm" name="id2645668"></a>
-<a class="indexterm" name="id2645677"></a>
-<a class="indexterm" name="id2645683"></a>
-<a class="indexterm" name="id2645690"></a>
-<a class="indexterm" name="id2645697"></a>
-<a class="indexterm" name="id2645703"></a>
+</pre></div></div><br class="example-break"></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id406519"></a>The LDAP Account Manager</h2></div></div></div><p>
+<a class="indexterm" name="id406527"></a>
+<a class="indexterm" name="id406533"></a>
+<a class="indexterm" name="id406542"></a>
+<a class="indexterm" name="id406548"></a>
+<a class="indexterm" name="id406555"></a>
+<a class="indexterm" name="id406562"></a>
+<a class="indexterm" name="id406569"></a>
 The LDAP Account Manager (LAM) is an application suite that has been written in PHP.
 LAM can be used with any Web server that has PHP4 support. It connects to the LDAP
 server either using unencrypted connections or via SSL/TLS. LAM can be used to manage
@@ -724,24 +724,24 @@
 The current version of LAM is 0.4.9. Release of version 0.5 is expected in the third quarter
 of 2005.
 </p><p>
-<a class="indexterm" name="id2645735"></a>
-<a class="indexterm" name="id2645742"></a>
-<a class="indexterm" name="id2645748"></a>
+<a class="indexterm" name="id406595"></a>
+<a class="indexterm" name="id406602"></a>
+<a class="indexterm" name="id406609"></a>
 Requirements:
 </p><div class="itemizedlist"><ul type="disc"><li><p>A web server that will work with PHP4.</p></li><li><p>PHP4 (available from the <a class="ulink" href="http://www.php.net/" target="_top">PHP</a> home page.)</p></li><li><p>OpenLDAP 2.0 or later.</p></li><li><p>A Web browser that supports CSS.</p></li><li><p>Perl.</p></li><li><p>The gettext package.</p></li><li><p>mcrypt + mhash (optional).</p></li><li><p>It is also a good idea to install SSL support.</p></li></ul></div><p>
 LAM is a useful tool that provides a simple Web-based device that can be used to
 manage the contents of the LDAP directory to:
-<a class="indexterm" name="id2645809"></a>
-<a class="indexterm" name="id2645816"></a>
-<a class="indexterm" name="id2645823"></a>
+<a class="indexterm" name="id406666"></a>
+<a class="indexterm" name="id406673"></a>
+<a class="indexterm" name="id406680"></a>
 </p><div class="itemizedlist"><ul type="disc"><li><p>Display user/group/host and Domain entries.</p></li><li><p>Manage entries (Add/Delete/Edit).</p></li><li><p>Filter and sort entries.</p></li><li><p>Store and use multiple operating profiles.</p></li><li><p>Edit organizational units (OUs).</p></li><li><p>Upload accounts from a file.</p></li><li><p>Is compatible with Samba-2.2.x and Samba-3.</p></li></ul></div><p>
 When correctly configured, LAM allows convenient management of UNIX (Posix) and Samba
 user, group, and windows domain member machine accounts.
 </p><p>
-<a class="indexterm" name="id2645877"></a>
-<a class="indexterm" name="id2645884"></a>
-<a class="indexterm" name="id2645891"></a>
-<a class="indexterm" name="id2645897"></a>
+<a class="indexterm" name="id406730"></a>
+<a class="indexterm" name="id406737"></a>
+<a class="indexterm" name="id406744"></a>
+<a class="indexterm" name="id406751"></a>
 The default password is &#8220;<span class="quote">lam.</span>&#8221; It is highly recommended that you use only 
 an SSL connection to your Web server for all remote operations involving LAM. If you 
 want secure connections, you must configure your Apache Web server to permit connections 
@@ -760,7 +760,7 @@
 	For example, on SUSE Linux Enterprise Server 9, copy to the 
 	<code class="filename">/srv/www/htdocs</code> directory.
 	</p></li><li><p>
-	<a class="indexterm" name="id2645977"></a>
+	<a class="indexterm" name="id406824"></a>
 	Set file permissions using the following commands:
 </p><pre class="screen">
 <code class="prompt">root# </code> chown -R wwwrun:www /srv/www/htdocs/lam
@@ -770,7 +770,7 @@
 <code class="prompt">root# </code> chmod 755 /srv/www/htdocs/lam/lib/*pl
 </pre><p>
 	</p></li><li><p>
-	<a class="indexterm" name="id2646030"></a>
+	<a class="indexterm" name="id406874"></a>
        Using your favorite editor create the following <code class="filename">config.cfg</code>
        LAM configuration file:
 </p><pre class="screen">
@@ -778,8 +778,8 @@
 <code class="prompt">root# </code> cp config.cfg_sample config.cfg
 <code class="prompt">root# </code> vi config.cfg
 </pre><p>
-	<a class="indexterm" name="id2646071"></a>
-	<a class="indexterm" name="id2646080"></a>
+	<a class="indexterm" name="id406914"></a>
+	<a class="indexterm" name="id406923"></a>
 	An example file is shown in <a class="link" href="appendix.html#lamcfg" title="Example 15.11. Example LAM Configuration File config.cfg">&#8220;Example LAM Configuration File  config.cfg&#8221;</a>.
 	This is the minimum configuration that must be completed. The LAM profile
 	file can be created using a convenient wizard that is part of the LAM
@@ -794,7 +794,7 @@
 	<code class="filename">lam.conf</code> then, using your favorite editor, 
 	change the settings to match local site needs.
 	</p></li></ol></div><p>
-	<a class="indexterm" name="id2646140"></a>
+	<a class="indexterm" name="id406977"></a>
 	An example of a working file is shown here in <a class="link" href="appendix.html#lamconf" title="Example 15.12. LAM Profile Control File lam.conf">&#8220;LAM Profile Control File  lam.conf&#8221;</a>.
 	This file has been stripped of comments to keep the size small. The comments
 	and help information provided in the profile file that the wizard creates
@@ -802,12 +802,12 @@
 	Your configuration file obviously reflects the configuration options that
 	are preferred at your site.
 	</p><p>
-	<a class="indexterm" name="id2646164"></a>
+	<a class="indexterm" name="id406998"></a>
 	It is important that your LDAP server is running at the time that LAM is 
 	being configured. This permits you to validate correct operation.
 	An example of the LAM login screen is provided in <a class="link" href="appendix.html#lam-login" title="Figure 15.6. The LDAP Account Manager Login Screen">&#8220;The LDAP Account Manager Login Screen&#8221;</a>.
 	</p><div class="figure"><a name="lam-login"></a><p class="title"><b>Figure 15.6. The LDAP Account Manager Login Screen</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/lam-login.png" width="270" alt="The LDAP Account Manager Login Screen"></div></div></div><br class="figure-break"><p>
-	<a class="indexterm" name="id2646226"></a>
+	<a class="indexterm" name="id407057"></a>
 	The LAM configuration editor has a number of options that must be managed correctly.
 	An example of use of the LAM configuration editor is shown in <a class="link" href="appendix.html#lam-config" title="Figure 15.7. The LDAP Account Manager Configuration Screen">&#8220;The LDAP Account Manager Configuration Screen&#8221;</a>.
 	It is important that you correctly set the minimum and maximum UID/GID values that are
@@ -817,13 +817,13 @@
 	the initial settings to be made. Do not forget to reset these to sensible values before
 	using LAM to add additional users and groups.
 	</p><div class="figure"><a name="lam-config"></a><p class="title"><b>Figure 15.7. The LDAP Account Manager Configuration Screen</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/lam-config.png" width="270" alt="The LDAP Account Manager Configuration Screen"></div></div></div><br class="figure-break"><p>
-	<a class="indexterm" name="id2646298"></a>
+	<a class="indexterm" name="id407122"></a>
 	LAM has some nice, but unusual features. For example, one unexpected feature in most application
 	screens permits the generation of a PDF file that lists configuration information. This is a well
 	thought out facility. This option has been edited out of the following screen shots to conserve
 	space.
 	</p><p>
-	<a class="indexterm" name="id2646313"></a>
+	<a class="indexterm" name="id407135"></a>
 	When you log onto LAM the opening screen drops you right into the user manager as shown in
 	<a class="link" href="appendix.html#lam-user" title="Figure 15.8. The LDAP Account Manager User Edit Screen">&#8220;The LDAP Account Manager User Edit Screen&#8221;</a>. This is a logical action as it permits the most-needed facility
 	to be used immediately. The editing of an existing user, as with the addition of a new user,
@@ -837,7 +837,7 @@
 	shows a sub-screen from the group editor that permits users to be assigned secondary group
 	memberships. 
 	</p><div class="figure"><a name="lam-group"></a><p class="title"><b>Figure 15.9. The LDAP Account Manager Group Edit Screen</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/lam-groups.png" width="270" alt="The LDAP Account Manager Group Edit Screen"></div></div></div><br class="figure-break"><div class="figure"><a name="lam-group-mem"></a><p class="title"><b>Figure 15.10. The LDAP Account Manager Group Membership Edit Screen</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/lam-group-members.png" width="270" alt="The LDAP Account Manager Group Membership Edit Screen"></div></div></div><br class="figure-break"><p>
-	<a class="indexterm" name="id2646493"></a><a class="indexterm" name="id2646499"></a>
+	<a class="indexterm" name="id407303"></a><a class="indexterm" name="id407309"></a>
 	The final screen presented here is one that you should not normally need to use. Host accounts will
 	be automatically managed using the smbldap-tools scripts. This means that the screen <a class="link" href="appendix.html#lam-host" title="Figure 15.11. The LDAP Account Manager Host Edit Screen">&#8220;The LDAP Account Manager Host Edit Screen&#8221;</a>
 	will, in most cases, not be used.
@@ -883,7 +883,7 @@
 samba3: yes
 cachetimeout: 5
 pwdhash: SSHA
-</pre></div></div><br class="example-break"></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2646650"></a>IDEALX Management Console</h2></div></div></div><p>
+</pre></div></div><br class="example-break"></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id407438"></a>IDEALX Management Console</h2></div></div></div><p>
 	IMC (the IDEALX Mamagement Console) is a tool that can be used as the basis for a comprehensive
 	web-based management interface for UNIX and Linux systems.
 	</p><p>
@@ -897,7 +897,7 @@
 	</p><p>
 	For further information regarding IMC refer to the web <a class="ulink" href="http://imc.sourceforge.net/" target="_top">site.</a>
 	Prebuilt RPM packages are also <a class="ulink" href="http://imc.sourceforge.net/download.html" target="_top">available.</a>
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="ch12-SUIDSGID"></a>Effect of Setting File and Directory SUID/SGID Permissions Explained</h2></div></div></div><a class="indexterm" name="id2646756"></a><a class="indexterm" name="id2646763"></a><p>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="ch12-SUIDSGID"></a>Effect of Setting File and Directory SUID/SGID Permissions Explained</h2></div></div></div><a class="indexterm" name="id407535"></a><a class="indexterm" name="id407541"></a><p>
 	The setting of the SUID/SGID bits on the file or directory permissions flag has particular
 	consequences. If the file is executable and the SUID bit is set, it executes with the privilege
 	of (with the UID of) the owner of the file. For example, if you are logged onto a system as
@@ -967,34 +967,34 @@
 total 1
 drw-rw-r--    2 bobj     Domain Users  12346 Dec 18 18:11 maryvfile.txt
 </pre><p>
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="ch12dblck"></a>Shared Data Integrity</h2></div></div></div><p><a class="indexterm" name="id2646994"></a><a class="indexterm" name="id2647002"></a>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="ch12dblck"></a>Shared Data Integrity</h2></div></div></div><p><a class="indexterm" name="id407747"></a><a class="indexterm" name="id407755"></a>
 	The integrity of shared data is often viewed as a particularly emotional issue, especially where
 	there are concurrent problems with multiuser data access. Contrary to the assertions of some who have
 	experienced problems in either area, the cause has nothing to do with the phases of the moons of Jupiter.
 	</p><p>
 	The solution to concurrent multiuser data access problems must consider three separate areas
-	from which the problem may stem:<a class="indexterm" name="id2647030"></a><a class="indexterm" name="id2647042"></a><a class="indexterm" name="id2647053"></a>
-	</p><div class="itemizedlist"><ul type="disc"><li><p>application-level locking controls</p></li><li><p>client-side locking controls</p></li><li><p>server-side locking controls</p></li></ul></div><p><a class="indexterm" name="id2647085"></a><a class="indexterm" name="id2647094"></a>
+	from which the problem may stem:<a class="indexterm" name="id407777"></a><a class="indexterm" name="id407788"></a><a class="indexterm" name="id407800"></a>
+	</p><div class="itemizedlist"><ul type="disc"><li><p>application-level locking controls</p></li><li><p>client-side locking controls</p></li><li><p>server-side locking controls</p></li></ul></div><p><a class="indexterm" name="id407831"></a><a class="indexterm" name="id407839"></a>
 	Many database applications use some form of application-level access control. An example of one
 	well-known application that uses application-level locking is Microsoft Access. Detailed guidance
 	is provided here because this is the most common application for which problems have been reported.
-	</p><p><a class="indexterm" name="id2647110"></a><a class="indexterm" name="id2647118"></a>
+	</p><p><a class="indexterm" name="id407853"></a><a class="indexterm" name="id407861"></a>
 	Common applications that are affected by client- and server-side locking controls include MS
 	Excel and Act!. Important locking guidance is provided here.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2647131"></a>Microsoft Access</h3></div></div></div><p>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id407872"></a>Microsoft Access</h3></div></div></div><p>
 	The best advice that can be given is to carefully read the Microsoft knowledgebase articles that
 	cover this area. Examples of relevant documents include:
-	</p><div class="itemizedlist"><ul type="disc"><li><p>http://support.microsoft.com/default.aspx?scid=kb;en-us;208778</p></li><li><p>http://support.microsoft.com/default.aspx?scid=kb;en-us;299373</p></li></ul></div><p><a class="indexterm" name="id2647158"></a><a class="indexterm" name="id2647169"></a>
+	</p><div class="itemizedlist"><ul type="disc"><li><p>http://support.microsoft.com/default.aspx?scid=kb;en-us;208778</p></li><li><p>http://support.microsoft.com/default.aspx?scid=kb;en-us;299373</p></li></ul></div><p><a class="indexterm" name="id407897"></a><a class="indexterm" name="id407908"></a>
 	Make sure that your MS Access database file is configured for multiuser access (not set for 
 	exclusive open). Open MS Access on each client workstation, then set the following: <span class="guimenu">(Menu bar) Tools</span>+<span class="guimenu">Options</span>+<span class="guimenu">[tab] General</span>.  Set network path to Default database folder: <code class="filename">\\server\share\folder</code>.
 	</p><p>
         You can configure MS Access file sharing behavior as follows: click <span class="guimenu">[tab] Advanced</span>.
-	  Set:<a class="indexterm" name="id2647220"></a>
-	</p><div class="itemizedlist"><ul type="disc"><li><p>Default open mode: Shared</p></li><li><p>Default Record Locking: Edited Record</p></li><li><p>Open databases using record_level locking</p></li></ul></div><p><a class="indexterm" name="id2647249"></a>
+	  Set:<a class="indexterm" name="id407955"></a>
+	</p><div class="itemizedlist"><ul type="disc"><li><p>Default open mode: Shared</p></li><li><p>Default Record Locking: Edited Record</p></li><li><p>Open databases using record_level locking</p></li></ul></div><p><a class="indexterm" name="id407984"></a>
         You must now commit the changes so that they will take effect. To do so, click 
 	<span class="guimenu">Apply</span><span class="guimenu">Ok</span>. At this point, you should exit MS Access, restart 
 	it, and then validate that these settings have not changed.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2647278"></a>Act! Database Sharing</h3></div></div></div><p><a class="indexterm" name="id2647285"></a><a class="indexterm" name="id2647293"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id408011"></a>Act! Database Sharing</h3></div></div></div><p><a class="indexterm" name="id408017"></a><a class="indexterm" name="id408025"></a>
 	Where the server sharing the ACT! database(s) is running Samba,or Windows NT, 200x, or XP, you 
 	must disable opportunistic locking on the server and all workstations. Failure to do so
 	results in data corruption. This information is available from the Act! Web site
@@ -1002,7 +1002,7 @@
 	<a class="ulink" href="http://itdomino.saleslogix.com/act.nsf/docid/1998223162925" target="_top">1998223162925</a>
 	as well as from article
 	<a class="ulink" href="http://itdomino.saleslogix.com/act.nsf/docid/200110485036" target="_top">200110485036</a>.
-	</p><p><a class="indexterm" name="id2647323"></a><a class="indexterm" name="id2647331"></a>
+	</p><p><a class="indexterm" name="id408051"></a><a class="indexterm" name="id408059"></a>
 	These documents clearly state that opportunistic locking must be disabled on both
 	the server (Samba in the case we are interested in here), as well as on every workstation
 	from which the centrally shared Act! database will be accessed. Act! provides
@@ -1010,18 +1010,18 @@
 	registry settings that may otherwise interfere with the operation of Act! 
 	Registered Act! users may download this utility from the Act! Web 
 	<a class="ulink" href="http://www.act.com/support/updates/index.cfm" target="_top">site.</a>
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2647362"></a>Opportunistic Locking Controls</h3></div></div></div><p><a class="indexterm" name="id2647369"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id408086"></a>Opportunistic Locking Controls</h3></div></div></div><p><a class="indexterm" name="id408093"></a>
 	Third-party Windows applications may not be compatible with the use of opportunistic file
-	and record locking. For applications that are known not to be compatible,<sup>[<a name="id2647381" href="#ftn.id2647381" class="footnote">14</a>]</sup> oplock
+	and record locking. For applications that are known not to be compatible,<sup>[<a name="id408103" href="#ftn.id408103" class="footnote">14</a>]</sup> oplock
 	support may need to be disabled both on the Samba server and on the Windows workstations.
-	</p><p><a class="indexterm" name="id2647395"></a><a class="indexterm" name="id2647403"></a><a class="indexterm" name="id2647411"></a>
+	</p><p><a class="indexterm" name="id408113"></a><a class="indexterm" name="id408121"></a><a class="indexterm" name="id408129"></a>
 	Oplocks enable a Windows client to cache parts of a file that are being
 	edited. Another windows client may then request to open the file with the
 	ability to write to it. The server will then ask the original workstation
 	that had the file open with a write lock to release its lock. Before
 	doing so, that workstation must flush the file from cache memory to the
 	disk or network drive.
-	</p><p><a class="indexterm" name="id2647432"></a>
+	</p><p><a class="indexterm" name="id408147"></a>
 	Disabling of Oplocks usage may require server and client changes.
 	Oplocks may be disabled by file, by file pattern, on the share, or on the
 	Samba server.

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/ch14.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/ch14.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/ch14.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,9 +1,9 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 14. Samba Support</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="RefSection.html" title="Part III. Reference Section"><link rel="prev" href="HA.html" title="Chapter 13. Performance, Reliability, and Availability"><link rel="next" href="appendix.html" title="Chapter 15. A Collection of Useful Tidbits"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 14. Samba Support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="HA.html">Prev</a> </td><th width="60%" align="center">Part III. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="appendix.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en-US"><div class="titlepage"><div><div><h2 class="title"><a name="id2642993"></a>Chapter 14. Samba Support</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ch14.html#id2643123">Free Support</a></span></dt><dt><span class="sect1"><a href="ch14.html#id2643342">Commercial Support</a></span></dt></dl></div><p>
-<a class="indexterm" name="id2643002"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 14. Samba Support</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="RefSection.html" title="Part III. Reference Section"><link rel="prev" href="HA.html" title="Chapter 13. Performance, Reliability, and Availability"><link rel="next" href="appendix.html" title="Chapter 15. A Collection of Useful Tidbits"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 14. Samba Support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="HA.html">Prev</a> </td><th width="60%" align="center">Part III. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="appendix.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en-US"><div class="titlepage"><div><div><h2 class="title"><a name="id404185"></a>Chapter 14. Samba Support</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ch14.html#id404300">Free Support</a></span></dt><dt><span class="sect1"><a href="ch14.html#id404499">Commercial Support</a></span></dt></dl></div><p>
+<a class="indexterm" name="id404194"></a>
 One of the most difficult to answer questions in the information technology industry is, &#8220;<span class="quote">What is
 support?</span>&#8221;. That question irritates some folks, as much as common answers may annoy others.
 </p><p>
-<a class="indexterm" name="id2643019"></a>
+<a class="indexterm" name="id404209"></a>
 The most aggravating situation pertaining to support is typified when, as a Linux user, a call is made to
 an Internet service provider who, instead of listening to the problem to find a solution, blandly replies:
 &#8220;<span class="quote">Oh, Linux? We do not support Linux!</span>&#8221;. It has happened to me, and similar situations happen
@@ -15,50 +15,50 @@
 at the right time, no matter the situation. Support is all that it takes to take away pain, disruption,
 inconvenience, loss of productivity, disorientation, uncertainty, and real or perceived risk.
 </p><p>
-<a class="indexterm" name="id2643049"></a>
-<a class="indexterm" name="id2643056"></a>
-<a class="indexterm" name="id2643063"></a>
+<a class="indexterm" name="id404233"></a>
+<a class="indexterm" name="id404240"></a>
+<a class="indexterm" name="id404246"></a>
 One of the forces that has become a driving force for the adoption of open source software is the fact that
 many IT businesses have provided services that have perhaps failed to deliver what the customer expected, or
 that have been found wanting for other reasons.
 </p><p>
-<a class="indexterm" name="id2643078"></a>
-<a class="indexterm" name="id2643085"></a>
+<a class="indexterm" name="id404259"></a>
+<a class="indexterm" name="id404266"></a>
 In recognition of the need for needs satisfaction as the primary experience an information technology user or
 consumer expects, the information provided in this chapter may help someone to avoid an unpleasant experience
 in respect of problem resolution.
 </p><p>
-<a class="indexterm" name="id2643099"></a>
-<a class="indexterm" name="id2643106"></a>
-<a class="indexterm" name="id2643113"></a>
+<a class="indexterm" name="id404278"></a>
+<a class="indexterm" name="id404285"></a>
+<a class="indexterm" name="id404291"></a>
 In the open source software arena there are two support options: free support and paid-for (commercial)
 support.
-</p><div class="sect1" lang="en-US"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2643123"></a>Free Support</h2></div></div></div><p>
-<a class="indexterm" name="id2643131"></a>
-<a class="indexterm" name="id2643138"></a>
-<a class="indexterm" name="id2643145"></a>
-<a class="indexterm" name="id2643152"></a>
-<a class="indexterm" name="id2643159"></a>
-<a class="indexterm" name="id2643166"></a>
+</p><div class="sect1" lang="en-US"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id404300"></a>Free Support</h2></div></div></div><p>
+<a class="indexterm" name="id404308"></a>
+<a class="indexterm" name="id404315"></a>
+<a class="indexterm" name="id404322"></a>
+<a class="indexterm" name="id404328"></a>
+<a class="indexterm" name="id404335"></a>
+<a class="indexterm" name="id404342"></a>
 	Free support may be obtained from friends, colleagues, user groups, mailing lists, and interactive help
 	facilities. An example of an interactive dacility is the Internet relay chat (IRC) channels that host user
 	supported mutual assistance.
 	</p><p>
-<a class="indexterm" name="id2643180"></a>
-<a class="indexterm" name="id2643187"></a>
-<a class="indexterm" name="id2643194"></a>
-<a class="indexterm" name="id2643200"></a>
-<a class="indexterm" name="id2643207"></a>
+<a class="indexterm" name="id404354"></a>
+<a class="indexterm" name="id404361"></a>
+<a class="indexterm" name="id404368"></a>
+<a class="indexterm" name="id404375"></a>
+<a class="indexterm" name="id404381"></a>
 	The Samba project maintains a mailing list that is commonly used to discuss solutions to Samba deployments.
 	Information regarding subscription to the Samba mailing list can be found on the Samba <a class="ulink" href="https://lists.samba.org/mailman/" target="_top">web</a> site. The public mailing list that can be used to obtain
 	free, user contributed, support is called the <code class="literal">samba</code> list. The email address for this list
 	is at <code class="literal">mail:samba at samba.org</code>.  Information regarding the Samba IRC channels may be found on
 	the Samba <a class="ulink" href="http://www.samba.org/samba.irc.html" target="_top">IRC</a> web page.
 	</p><p>
-<a class="indexterm" name="id2643248"></a>
-<a class="indexterm" name="id2643255"></a>
-<a class="indexterm" name="id2643262"></a>
-<a class="indexterm" name="id2643269"></a>
+<a class="indexterm" name="id404418"></a>
+<a class="indexterm" name="id404425"></a>
+<a class="indexterm" name="id404432"></a>
+<a class="indexterm" name="id404439"></a>
 	As a general rule, it is considered poor net behavior to contact a Samba Team member directly
 	for free support. Most active members of the Samba Team work exceptionally long hours to assist
 	users who have demonstrated a qualified problem. Some team members may respond to direct email
@@ -66,9 +66,9 @@
 	Team members actually provide professional paid-for Samba support and it is therefore wise
 	to show appropriate discretion and reservation in all direct contact.
 	</p><p>
-<a class="indexterm" name="id2643289"></a>
-<a class="indexterm" name="id2643296"></a>
-<a class="indexterm" name="id2643303"></a>
+<a class="indexterm" name="id404453"></a>
+<a class="indexterm" name="id404460"></a>
+<a class="indexterm" name="id404467"></a>
 	When you stumble across a Samba bug, often the quickest way to get it resolved is by posting
 	a bug <a class="ulink" href="https://bugzilla.samba.org/" target="_top">report</a>. All such reports are mailed to
 	the responsible code maintainer for action. The better the report, and the more serious it is,
@@ -76,16 +76,16 @@
 	the reported bug it is likely to be rejected. It is up to you to provide sufficient information
 	that will permit the problem to be reproduced.
 	</p><p>
-<a class="indexterm" name="id2643327"></a>
+<a class="indexterm" name="id404487"></a>
 	We all recognize that sometimes free support does not provide the answer that is sought within
 	the time-frame required. At other times the problem is elusive and you may lack the experience
 	necessary to isolate the problem and thus to resolve it. This is a situation where is may be
 	prudent to purchase paid-for support.
-	</p></div><div class="sect1" lang="en-US"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2643342"></a>Commercial Support</h2></div></div></div><p>
+	</p></div><div class="sect1" lang="en-US"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id404499"></a>Commercial Support</h2></div></div></div><p>
 	There are six basic support oriented services that are most commonly sought by Samba sites:
 	</p><div class="itemizedlist"><ul type="disc"><li><p>Assistance with network design</p></li><li><p>Staff Training</p></li><li><p>Assistance with Samba network deployment and installation</p></li><li><p>Priority telephone or email Samba configuration assistance</p></li><li><p>Trouble-shooting and diagnostic assistance</p></li><li><p>Provision of quality assured ready-to-install Samba binary packages</p></li></ul></div><p>
-<a class="indexterm" name="id2643388"></a>
-<a class="indexterm" name="id2643395"></a>
+<a class="indexterm" name="id404542"></a>
+<a class="indexterm" name="id404549"></a>
 	Information regarding companies that provide professional Samba support can be obtained by performing a Google
 	search, as well as by reference to the Samba <a class="ulink" href="http://www.samba.org/samba/support.html" target="_top">Support</a> web page. Companies who notify the Samba Team
 	that they provide commercial support are given a free listing that is sorted by the country of origin.
@@ -93,13 +93,13 @@
 	provider and to satisfy yourself that both the company and its staff are able to deliver what is required of
 	them.
 	</p><p>
-<a class="indexterm" name="id2643421"></a>
+<a class="indexterm" name="id404570"></a>
 	The policy within the Samba Team is to treat all commercial support providers equally and to show no
 	preference. As a result, Samba Team members who provide commercial support are lumped in with everyone else.
 	You are encouraged to obtain the services needed from a company in your local area. The open source movement
 	is pro-community; so do what you can to help a local business to prosper.
 	</p><p>
-<a class="indexterm" name="id2643438"></a>
+<a class="indexterm" name="id404583"></a>
 	Open source software support can be found in any quality, at any price and in any place you can
 	to obtain it. Over 180 companies around the world provide Samba support, there is no excuse for
 	suffering in the mistaken belief that Samba is unsupported software  it is supported.

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/go01.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/go01.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/go01.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Glossary</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="index.html" title="Samba-3 by Example"><link rel="prev" href="apa.html" title="Appendix A.  GNU General Public License version 3"><link rel="next" href="ix01.html" title="Index"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Glossary</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="apa.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ix01.html">Next</a></td></tr></table><hr></div><div class="glossary"><div class="titlepage"><div><div><h2 class="title"><a name="id2652477"></a>Glossary</h2></div></div></div><dl><dt>Access Control List</dt><dd><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Glossary</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="index.html" title="Samba-3 by Example"><link rel="prev" href="apa.html" title="Appendix A.  GNU General Public License version 3"><link rel="next" href="ix01.html" title="Index"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Glossary</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="apa.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ix01.html">Next</a></td></tr></table><hr></div><div class="glossary"><div class="titlepage"><div><div><h2 class="title"><a name="id412504"></a>Glossary</h2></div></div></div><dl><dt>Access Control List</dt><dd><p>
 		A detailed list of permissions granted to users or groups with respect to file and network
 		resource access.
 		</p></dd><dt>Active Directory Service</dt><dd><p>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/happy.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/happy.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/happy.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 5. Making Happy Users</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="ExNetworks.html" title="Part I. Example Network Configurations"><link rel="prev" href="Big500users.html" title="Chapter 4. The 500-User Office"><link rel="next" href="2000users.html" title="Chapter 6. A Distributed 2000-User Network"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 5. Making Happy Users</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="Big500users.html">Prev</a> </td><th width="60%" align="center">Part I. Example Network Configurations</th><td width="20%" align="right"> <a accesskey="n" href="2000users.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="happy"></a>Chapter 5. Making Happy Users</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="happy.html#id2593176">Regarding LDAP Directories and Windows Computer Accounts</a></span></dt><dt><span class="sect1"><a href="happy.html#id2593318">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#id2593415">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#id2593552">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#id2594009">Technical Issues</a></span></dt><dt><span class="sect2"><a href="happy.html#id2595888">Political Issues</a></span></dt><dt><span class="sect2"><a href="happy.html#id2595904">Installation Checklist</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#id2596084">Samba Server Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#ldapsetup">OpenLDAP Server Configuration</a></span></dt><dt><span class="sect2"><a href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a></span></dt><dt><span class="sect2"><a href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a></span></dt><dt><span class="sect2"><a href="happy.html#sbeidealx">Install and Configure Idealx smbldap-tools Scripts</a></span></dt><dt><span class="sect2"><a href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a></span></dt><dt><span class="sect2"><a href="happy.html#sbehap-ptrcfg">Printer Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#sbehap-bldg1">Samba-3 BDC Configuration</a></span></dt><dt><span class="sect1"><a href="happy.html#id2602933">Miscellaneous Server Preparation Tasks</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#id2602953">Configuring Directory Share Point Roots</a></span></dt><dt><span class="sect2"><a href="happy.html#id2603048">Configuring Profile Directories</a></span></dt><dt><span class="sect2"><a href="happy.html#id2603292">Preparation of Logon Scripts</a></span></dt><dt><span class="sect2"><a href="happy.html#id2603404">Assigning User Rights and Privileges</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#id2603537">Windows Client Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#redirfold">Configuration of Default Profile with Folder Redirection</a></span></dt><dt><span class="sect2"><a href="happy.html#id2604291">Configuration of MS Outlook to Relocate PST File</a></span></dt><dt><span class="sect2"><a href="happy.html#id2604606">Configure Delete Cached Profiles on Logout</a></span></dt><dt><span class="sect2"><a href="happy.html#id2604786">Uploading Printer Drivers to Samba Servers</a></span></dt><dt><span class="sect2"><a href="happy.html#id2605289">Software Installation</a></span></dt><dt><span class="sect2"><a href="happy.html#id2605324">Roll-out Image Creation</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#id2605358">Key Points Learned</a></span></dt><dt><span class="sect1"><a href="happy.html#id2605474">Questions and Answers</a></span></dt></dl></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 5. Making Happy Users</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="ExNetworks.html" title="Part I. Example Network Configurations"><link rel="prev" href="Big500users.html" title="Chapter 4. The 500-User Office"><link rel="next" href="2000users.html" title="Chapter 6. A Distributed 2000-User Network"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 5. Making Happy Users</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="Big500users.html">Prev</a> </td><th width="60%" align="center">Part I. Example Network Configurations</th><td width="20%" align="right"> <a accesskey="n" href="2000users.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="happy"></a>Chapter 5. Making Happy Users</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="happy.html#id358884">Regarding LDAP Directories and Windows Computer Accounts</a></span></dt><dt><span class="sect1"><a href="happy.html#id359008">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#id359084">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#id359212">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#id359614">Technical Issues</a></span></dt><dt><span class="sect2"><a href="happy.html#id361271">Political Issues</a></span></dt><dt><span class="sect2"><a href="happy.html#id361283">Installation Checklist</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#id361454">Samba Server Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#ldapsetup">OpenLDAP Server Configuration</a></span></dt><dt><span class="sect2"><a href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a></span></dt><dt><span class="sect2"><a href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a></span></dt><dt><span class="sect2"><a href="happy.html#sbeidealx">Install and Configure Idealx smbldap-tools Scripts</a></span></dt><dt><span class="sect2"><a href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a></span></dt><dt><span class="sect2"><a href="happy.html#sbehap-ptrcfg">Printer Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#sbehap-bldg1">Samba-3 BDC Configuration</a></span></dt><dt><span class="sect1"><a href="happy.html#id367724">Miscellaneous Server Preparation Tasks</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#id367740">Configuring Directory Share Point Roots</a></span></dt><dt><span class="sect2"><a href="happy.html#id367829">Configuring Profile Directories</a></span></dt><dt><span class="sect2"><a href="happy.html#id368057">Preparation of Logon Scripts</a></span></dt><dt><span class="sect2"><a href="happy.html#id368155">Assigning User Rights and Privileges</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#id368268">Windows Client Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#redirfold">Configuration of Default Profile with Folder Redirection</a></span></dt><dt><span class="sect2"><a href="happy.html#id368985">Configuration of MS Outlook to Relocate PST File</a></span></dt><dt><span class="sect2"><a href="happy.html#id369268">Configure Delete Cached Profiles on Logout</a></span></dt><dt><span class="sect2"><a href="happy.html#id369439">Uploading Printer Drivers to Samba Servers</a></span></dt><dt><span class="sect2"><a href="happy.html#id369909">Software Installation</a></span></dt><dt><span class="sect2"><a href="happy.html#id369934">Roll-out Image Creation</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#id369964">Key Points Learned</a></span></dt><dt><span class="sect1"><a href="happy.html#id370057">Questions and Answers</a></span></dt></dl></div><p>
 	It is said that &#8220;<span class="quote">a day that is without troubles is not fulfilling.  Rather, give 
 	me a day of troubles well handled so that I can be content with my achievements.</span>&#8221;
 	</p><p>
@@ -6,7 +6,7 @@
 	or experience them. The design of the network implemented in <a class="link" href="Big500users.html" title="Chapter 4. The 500-User Office">&#8220;The 500-User Office&#8221;</a>
 	may create problems for some network users. The following lists some of the problems that
 	may occur:
-	</p><a class="indexterm" name="id2592754"></a><a class="indexterm" name="id2592761"></a><a class="indexterm" name="id2592770"></a><a class="indexterm" name="id2592776"></a><a class="indexterm" name="id2592783"></a><div class="caution" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Caution</h3><p>
+	</p><a class="indexterm" name="id358517"></a><a class="indexterm" name="id358523"></a><a class="indexterm" name="id358532"></a><a class="indexterm" name="id358539"></a><a class="indexterm" name="id358546"></a><div class="caution" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Caution</h3><p>
 A significant number of network administrators have responded to the guidance given
 here. It should be noted that there are sites that have a single PDC for many hundreds of
 concurrent network clients. Network bandwidth, network bandwidth utilization, and server load
@@ -19,8 +19,8 @@
 overloaded or network bandwidth is overloaded. The guidance given for PDC/BDC ratio to Windows
 clients is conservative and if followed will minimize problems  but it is not absolute.
 </p></div><div class="variablelist"><dl><dt><span class="term">Users experiencing difficulty logging onto the network</span></dt><dd><p>
-		<a class="indexterm" name="id2592829"></a>
-		<a class="indexterm" name="id2592838"></a>
+		<a class="indexterm" name="id358582"></a>
+		<a class="indexterm" name="id358592"></a>
 		When a Windows client logs onto the network, many data packets are exchanged
 		between the client and the server that is providing the network logon services.
 		Each request between the client and the server must complete within a specific
@@ -30,9 +30,9 @@
 		30 to 150 clients. The actual limits are determined by network operational
 		characteristics. 
 		</p><p>
-		<a class="indexterm" name="id2592858"></a>
-		<a class="indexterm" name="id2592864"></a>
-		<a class="indexterm" name="id2592871"></a>
+		<a class="indexterm" name="id358607"></a>
+		<a class="indexterm" name="id358613"></a>
+		<a class="indexterm" name="id358620"></a>
 		If the domain controller provides only network logon services
 		and all file and print activity is handled by domain member servers, one domain	
 		controller per 150 clients on a single network segment may suffice. In any
@@ -46,25 +46,25 @@
 		that can be supported is limited by the CPU speed, memory and the workload on
 		the Samba server as well as network bandwidth utilization.
 		</p></dd><dt><span class="term">Slow logons and log-offs</span></dt><dd><p>
-		<a class="indexterm" name="id2592905"></a>
+		<a class="indexterm" name="id358646"></a>
 		Slow logons and log-offs may be caused by many factors that include:
 
 			</p><div class="itemizedlist"><ul type="disc"><li><p>
-				<a class="indexterm" name="id2592918"></a>
-				<a class="indexterm" name="id2592930"></a>
+				<a class="indexterm" name="id358658"></a>
+				<a class="indexterm" name="id358670"></a>
 				Excessive delays in the resolution of a NetBIOS name to its IP
 				address. This may be observed when an overloaded domain controller 
 				is also the WINS server. Another cause may be the failure to use
 				a WINS server (this assumes that there is a single network segment).
 				</p></li><li><p>
-				<a class="indexterm" name="id2592948"></a>
-				<a class="indexterm" name="id2592955"></a>
-				<a class="indexterm" name="id2592962"></a>
+				<a class="indexterm" name="id358686"></a>
+				<a class="indexterm" name="id358693"></a>
+				<a class="indexterm" name="id358699"></a>
 				Network traffic collisions due to overloading of the network
 				segment. One short-term workaround to this may be to replace
 				network HUBs with Ethernet switches.
 				</p></li><li><p>
-				<a class="indexterm" name="id2592976"></a>
+				<a class="indexterm" name="id358712"></a>
 				Defective networking hardware. Over the past few years, we have seen
 				on the Samba mailing list a significant increase in the number of
 				problems that were traced to a defective network interface controller,
@@ -72,8 +72,8 @@
 				it was the erratic nature of the problem that ultimately pointed to
 				the cause of the problem.
 				</p></li><li><p>
-				<a class="indexterm" name="id2592997"></a>
-				<a class="indexterm" name="id2593006"></a>
+				<a class="indexterm" name="id358729"></a>
+				<a class="indexterm" name="id358738"></a>
 				Excessively large roaming profiles. This type of problem is typically
 				the result of poor user education as well as poor network management.
 				It can be avoided by users not storing huge quantities of email in
@@ -81,7 +81,7 @@
 				These are old bad habits that require much discipline and vigilance
 				on the part of network management.
 				</p></li><li><p>
-				<a class="indexterm" name="id2593026"></a>
+				<a class="indexterm" name="id358755"></a>
 				You should verify that the Windows XP WebClient service is not running.
 				The use of the WebClient service has been implicated in many Windows
 				networking-related problems.
@@ -90,26 +90,26 @@
 		Loss of access to network resources during client operation may be caused by a number
 		of factors, including:
 		</p><div class="itemizedlist"><ul type="disc"><li><p>
-				<a class="indexterm" name="id2593059"></a>
+				<a class="indexterm" name="id358785"></a>
 				Network overload (typically indicated by a high network collision rate)
 				</p></li><li><p>
 				Server overload
 				</p></li><li><p>
-				<a class="indexterm" name="id2593078"></a>
+				<a class="indexterm" name="id358804"></a>
 				Timeout causing the client to close a connection that is in use but has
 				been latent (no traffic) for some time (5 minutes or more)
 				</p></li><li><p>
-				<a class="indexterm" name="id2593094"></a>
+				<a class="indexterm" name="id358818"></a>
 				Defective networking hardware
 				</p></li></ul></div><p>
-		<a class="indexterm" name="id2593109"></a>
+		<a class="indexterm" name="id358832"></a>
 		No matter what the cause, a sudden loss of access to network resources can
 		result in BSOD (blue screen of death) situations that necessitate rebooting of the client
 		workstation. In the case of a mild problem, retrying to access the network drive of the printer
 		may restore operations, but in any case this is a serious problem that may lead to the next
 		problem, data corruption.
 		</p></dd><dt><span class="term">Potential data corruption</span></dt><dd><p>
-		<a class="indexterm" name="id2593142"></a>
+		<a class="indexterm" name="id358859"></a>
 		Data corruption is one of the most serious problems. It leads to uncertainty, anger, and 
 		frustration, and generally precipitates immediate corrective demands. Management response
 		to this type of problem may be rational, as well as highly irrational. There have been
@@ -123,29 +123,29 @@
 	anticipate and combat network performance issues. You can work through complex and thorny
 	methods to improve the reliability of your network environment, but be warned that all such steps
 	demand the price of complexity.
-	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2593176"></a>Regarding LDAP Directories and Windows Computer Accounts</h2></div></div></div><p>
-	<a class="indexterm" name="id2593184"></a>
+	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id358884"></a>Regarding LDAP Directories and Windows Computer Accounts</h2></div></div></div><p>
+	<a class="indexterm" name="id358892"></a>
 	Computer (machine) accounts can be placed wherever you like in an LDAP directory subject to some 
 	constraints that are described in this section.
 	</p><p>
-	<a class="indexterm" name="id2593199"></a>
-	<a class="indexterm" name="id2593206"></a>
-	<a class="indexterm" name="id2593213"></a>
-	<a class="indexterm" name="id2593220"></a>
+	<a class="indexterm" name="id358906"></a>
+	<a class="indexterm" name="id358912"></a>
+	<a class="indexterm" name="id358919"></a>
+	<a class="indexterm" name="id358926"></a>
 	The POSIX and SambaSAMAccount components of computer (machine) accounts are both used by Samba. 
 	That is, machine  accounts are treated inside Samba in the same way that Windows NT4/200X treats 
 	them. A user account and a machine account are indistinguishable from each other, except that
 	the machine account ends in a $ character, as do trust accounts.
 	</p><p>
-	<a class="indexterm" name="id2593236"></a>
-	<a class="indexterm" name="id2593243"></a>
+	<a class="indexterm" name="id358939"></a>
+	<a class="indexterm" name="id358946"></a>
 	The need for Windows user, group, machine, trust, and other such accounts to be tied to a valid UNIX UID
 	is a design decision that was made a long way back in the history of Samba development. It is 
 	unlikely that this decision will be reversed or changed during the remaining life of the 
 	Samba-3.x series. 
 	</p><p>
-	<a class="indexterm" name="id2593258"></a>
-	<a class="indexterm" name="id2593264"></a>
+	<a class="indexterm" name="id358959"></a>
+	<a class="indexterm" name="id358965"></a>
 	The resolution of a UID from the Windows SID is achieved within Samba through a mechanism that
 	must refer back to the host operating system on which Samba is running. The name service
 	switch (NSS) is the preferred mechanism that shields applications (like Samba) from the
@@ -158,13 +158,13 @@
 	possible to do this via LDAP, and for that Samba provides the appropriate hooks so that
 	all account entities can be located in an LDAP directory.
 	</p><p>
-	<a class="indexterm" name="id2593302"></a>
+	<a class="indexterm" name="id358996"></a>
 	For many the weapon of choice is to use the PADL nss_ldap utility. This utility must
 	be configured so that computer accounts can be resolved to a POSIX/UNIX account UID. That
 	is fundamentally an LDAP design question.  The information provided on the Samba list and
 	in the documentation is directed at providing working examples only. The design
 	of an LDAP directory is a complex subject that is beyond the scope of this documentation.
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2593318"></a>Introduction</h2></div></div></div><p>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id359008"></a>Introduction</h2></div></div></div><p>
 	You just opened an email from Christine that reads:
 	</p><p>
 	Good morning,
@@ -193,8 +193,8 @@
 	regain control of our vital IT operations.
 	</p></td><td width="10%" valign="top"> </td></tr><tr><td width="10%" valign="top"> </td><td colspan="2" align="right" valign="top">--<span class="attribution">Christine</span></td></tr></table></div><p>
 	</p><p>
-	<a class="indexterm" name="id2593380"></a>	
-	<a class="indexterm" name="id2593387"></a>
+	<a class="indexterm" name="id359055"></a>	
+	<a class="indexterm" name="id359062"></a>
 	Every compromise has consequences. Having a large routed (i.e., multisegment) network with only a
 	single domain controller is a poor design that has obvious operational effects that may
 	frustrate users. Here is your reply:
@@ -204,56 +204,56 @@
 	boost staff morale. Please go ahead with your plans. If you have any problems, please let me know.
 	Please let Stan know what the estimated cost will be so I can approve the expense. Do not wait
 	for approval; I appreciate the urgency.
-	</p></td><td width="10%" valign="top"> </td></tr><tr><td width="10%" valign="top"> </td><td colspan="2" align="right" valign="top">--<span class="attribution">Bob</span></td></tr></table></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2593415"></a>Assignment Tasks</h3></div></div></div><p>
+	</p></td><td width="10%" valign="top"> </td></tr><tr><td width="10%" valign="top"> </td><td colspan="2" align="right" valign="top">--<span class="attribution">Bob</span></td></tr></table></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id359084"></a>Assignment Tasks</h3></div></div></div><p>
 		The priority of assigned tasks in this chapter is:
 		</p><div class="orderedlist"><ol type="1"><li><p>
-			<a class="indexterm" name="id2593435"></a>
-			<a class="indexterm" name="id2593444"></a>
-			<a class="indexterm" name="id2593451"></a>
-			<a class="indexterm" name="id2593457"></a><a class="indexterm" name="id2593463"></a>
+			<a class="indexterm" name="id359103"></a>
+			<a class="indexterm" name="id359112"></a>
+			<a class="indexterm" name="id359119"></a>
+			<a class="indexterm" name="id359126"></a><a class="indexterm" name="id359132"></a>
 			Implement Backup Domain Controllers (BDCs) in each building. This involves
 			a change from a <span class="emphasis"><em>tdbsam</em></span> backend that was used in the previous
 			chapter to an LDAP-based backend.
 			</p><p>
 			You can implement a single central LDAP server for this purpose.
 			</p></li><li><p>
-			<a class="indexterm" name="id2593485"></a>
-			<a class="indexterm" name="id2593492"></a>
-			<a class="indexterm" name="id2593499"></a>
-			<a class="indexterm" name="id2593506"></a>
+			<a class="indexterm" name="id359152"></a>
+			<a class="indexterm" name="id359159"></a>
+			<a class="indexterm" name="id359165"></a>
+			<a class="indexterm" name="id359172"></a>
 			Rectify the problem of excessive logon times. This involves redirection of
 			folders to network shares as well as modification of all user desktops to
 			exclude the redirected folders from being loaded at login time. You can also
 			create a new default profile that can be used for all new users.
 			</p></li></ol></div><p>
-		<a class="indexterm" name="id2593525"></a>
+		<a class="indexterm" name="id359188"></a>
 		You configure a new MS Windows XP Professional workstation disk image that you roll out
 		to all desktop users. The instructions you have created are followed on a staging machine
 		from which all changes can be carefully tested before inflicting them on your network users.
 		</p><p>
-		<a class="indexterm" name="id2593540"></a>
+		<a class="indexterm" name="id359201"></a>
 		This is the last network example in which specific mention of printing is made. The example
 		again makes use of the CUPS printing system.
-		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2593552"></a>Dissection and Discussion</h2></div></div></div><p>
-	<a class="indexterm" name="id2593560"></a>
-	<a class="indexterm" name="id2593567"></a>
-	<a class="indexterm" name="id2593573"></a>
+		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id359212"></a>Dissection and Discussion</h2></div></div></div><p>
+	<a class="indexterm" name="id359220"></a>
+	<a class="indexterm" name="id359227"></a>
+	<a class="indexterm" name="id359233"></a>
 	The implementation of Samba BDCs necessitates the installation and configuration of LDAP.
 	For this site, you use OpenLDAP, the open source software LDAP server platform. Commercial
 	LDAP servers in current use with Samba-3 include:
 	</p><div class="itemizedlist"><ul type="disc"><li><p>
-		<a class="indexterm" name="id2593591"></a>
+		<a class="indexterm" name="id359249"></a>
 		Novell <a class="ulink" href="http://www.novell.com/products/edirectory/" target="_top">eDirectory</a>
 		is being successfully used by some sites. Information on how to use eDirectory can be
 		obtained from the Samba mailing lists or from Novell.
 		</p></li><li><p>
-		<a class="indexterm" name="id2593611"></a>
+		<a class="indexterm" name="id359267"></a>
 		IBM <a class="ulink" href="http://www-306.ibm.com/software/tivoli/products/directory-server/" target="_top">Tivoli 
 		Directory Server</a> can be used to provide the Samba LDAP backend. Example schema 
 		files are provided in the Samba source code tarball under the directory 
 		<code class="filename">~samba/example/LDAP.</code>
 		</p></li><li><p>
-		<a class="indexterm" name="id2593638"></a>
+		<a class="indexterm" name="id359292"></a>
 		Sun <a class="ulink" href="http://www.sun.com/software/software/products/identity_srvr/home_identity.xml" target="_top">ONE Identity 
 		Server product suite</a> provides an LDAP server that can be used for Samba.
 		Example schema files are provided in the Samba source code tarball under the directory
@@ -264,19 +264,19 @@
 	initialize the LDAP directory database. OpenLDAP itself has only command-line tools to
 	help you to get OpenLDAP and Samba-3 running as required, albeit with some learning curve challenges.
 	</p><p>
-	<a class="indexterm" name="id2593675"></a>
+	<a class="indexterm" name="id359323"></a>
 	For most sites, the deployment of Microsoft Active Directory from the shrink-wrapped installation is quite
 	adequate. If you are migrating from Microsoft Active Directory, be warned that OpenLDAP does not include
 	GUI-based directory management tools. Even a simple task such as adding users to the OpenLDAP database 
 	requires an understanding of what you are doing, why you are doing it, and the tools that you must use.
 	</p><p>
-	<a class="indexterm" name="id2593692"></a>
-	<a class="indexterm" name="id2593699"></a>
-	<a class="indexterm" name="id2593706"></a>
-	<a class="indexterm" name="id2593716"></a>
-	<a class="indexterm" name="id2593725"></a>
-	<a class="indexterm" name="id2593732"></a>
-	<a class="indexterm" name="id2593741"></a>
+	<a class="indexterm" name="id359337"></a>
+	<a class="indexterm" name="id359344"></a>
+	<a class="indexterm" name="id359351"></a>
+	<a class="indexterm" name="id359360"></a>
+	<a class="indexterm" name="id359369"></a>
+	<a class="indexterm" name="id359376"></a>
+	<a class="indexterm" name="id359385"></a>
 	When installed and configured, an OpenLDAP Identity Management backend for Samba functions well. 
 	High availability operation may be obtained through directory replication/synchronization and 
 	master/slave server configurations. OpenLDAP is a mature platform to host the organizational 
@@ -286,10 +286,10 @@
 	contents with greater ability to back up, restore, and modify the directory than is generally possible
 	with Microsoft Active Directory.
 	</p><p>
-	<a class="indexterm" name="id2593766"></a>
-	<a class="indexterm" name="id2593776"></a>
-	<a class="indexterm" name="id2593782"></a>
-	<a class="indexterm" name="id2593789"></a>
+	<a class="indexterm" name="id359404"></a>
+	<a class="indexterm" name="id359413"></a>
+	<a class="indexterm" name="id359420"></a>
+	<a class="indexterm" name="id359427"></a>
 	A comparison of OpenLDAP with Microsoft Active Directory does not do justice to either. OpenLDAP is an LDAP directory
 	tool-set. Microsoft Active Directory Server is an implementation of an LDAP server that is largely preconfigured
 	for a specific task orientation. It comes with a set of administrative tools that is entirely customized
@@ -300,8 +300,8 @@
 	MS ADAM</a> that provides more generic LDAP services, yet it does not have the vanilla-like services
 	of OpenLDAP.
 	</p><p>
-	<a class="indexterm" name="id2593819"></a>
-	<a class="indexterm" name="id2593828"></a>
+	<a class="indexterm" name="id359450"></a>
+	<a class="indexterm" name="id359459"></a>
 	You may wish to consider outsourcing the development of your OpenLDAP directory to an expert, particularly
 	if you find the challenge of learning about LDAP directories, schemas, configuration, and management
 	tools and the creation of shell and Perl scripts a bit
@@ -309,7 +309,7 @@
 	many ready-to-use schemas. Samba-3 provides an OpenLDAP schema file
 	that is required for use as a passdb backend.
 	</p><p>
-	<a class="indexterm" name="id2593846"></a>
+	<a class="indexterm" name="id359473"></a>
 	For those who are willing to brave the process of installing and configuring LDAP and Samba-3 interoperability,
 	there are a few nice Web-based tools that may help you to manage your users and groups more effectively.
 	The Web-based tools you might like to consider include the
@@ -334,10 +334,10 @@
 	<a class="ulink" href="http://www.oreilly.com/catalog/ldapsa/index.html" target="_top"><span class="emphasis"><em>LDAP System Administration</em></span>,</a>
 	by Jerry Carter quite useful.
 	</p><p>
-	<a class="indexterm" name="id2593944"></a>
-	<a class="indexterm" name="id2593951"></a>
-	<a class="indexterm" name="id2593960"></a>
-	<a class="indexterm" name="id2593967"></a>
+	<a class="indexterm" name="id359559"></a>
+	<a class="indexterm" name="id359565"></a>
+	<a class="indexterm" name="id359574"></a>
+	<a class="indexterm" name="id359581"></a>
 	Mary's problems are due to two factors. First, the absence of a domain controller on the local network is the
 	main cause of the errors that result in blue screen crashes. Second, Mary has a large profile that must
 	be loaded over the WAN connection. The addition of BDCs on each network segment significantly
@@ -345,31 +345,31 @@
 	user desktops, and this must be done in a way that wins their support and does not cause further loss of
 	staff morale. The following procedures solve this problem.
 	</p><p>
-	<a class="indexterm" name="id2593989"></a>
+	<a class="indexterm" name="id359599"></a>
 	There is also an opportunity to implement smart printing features. You add this to the Samba configuration
 	so that future printer changes can be managed without need to change desktop configurations.
 	</p><p>
 	You add the ability to automatically download new printer drivers, even if they are not installed 
 	in the default desktop profile. Only one example of printing configuration is given. It is assumed that
 	you can extrapolate the principles and use them to install all printers that may be needed.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2594009"></a>Technical Issues</h3></div></div></div><p>
-	<a class="indexterm" name="id2594017"></a>
-	<a class="indexterm" name="id2594026"></a>
-	<a class="indexterm" name="id2594035"></a>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id359614"></a>Technical Issues</h3></div></div></div><p>
+	<a class="indexterm" name="id359622"></a>
+	<a class="indexterm" name="id359631"></a>
+	<a class="indexterm" name="id359640"></a>
 	The solution provided is a minimal approach to getting OpenLDAP running as an identity management directory
 	server for UNIX system accounts as well as for Samba. From the OpenLDAP perspective, UNIX system
 	accounts are stored POSIX schema extensions. Samba provides its own schema to permit storage of account 
 	attributes Samba needs. Samba-3 can use the LDAP backend to store:
 	</p><div class="itemizedlist"><ul type="disc"><li><p>Windows Networking User Accounts</p></li><li><p>Windows NT Group Accounts</p></li><li><p>Mapping Information between UNIX Groups and Windows NT Groups</p></li><li><p>ID Mappings for SIDs to UIDs (also for foreign Domain SIDs)</p></li></ul></div><p>
-	<a class="indexterm" name="id2594076"></a>
-	<a class="indexterm" name="id2594083"></a>
-	<a class="indexterm" name="id2594090"></a>
-	<a class="indexterm" name="id2594097"></a>
-	<a class="indexterm" name="id2594104"></a>
-	<a class="indexterm" name="id2594110"></a>
-	<a class="indexterm" name="id2594119"></a>
-	<a class="indexterm" name="id2594126"></a>
-	<a class="indexterm" name="id2594132"></a>
+	<a class="indexterm" name="id359676"></a>
+	<a class="indexterm" name="id359683"></a>
+	<a class="indexterm" name="id359690"></a>
+	<a class="indexterm" name="id359697"></a>
+	<a class="indexterm" name="id359704"></a>
+	<a class="indexterm" name="id359710"></a>
+	<a class="indexterm" name="id359719"></a>
+	<a class="indexterm" name="id359726"></a>
+	<a class="indexterm" name="id359732"></a>
 	The use of LDAP with Samba-3 makes it necessary to store UNIX accounts as well as Windows Networking
 	accounts in the LDAP backend. This implies the need to use the 
 	<a class="ulink" href="http://www.padl.com/Contents/OpenSourceSoftware.html" target="_top">PADL LDAP tools</a>. The resolution 
@@ -378,16 +378,16 @@
 	that integrates with the NSS. The same requirements exist for resolution
 	of the UNIX username to the UID. The relationships are demonstrated in <a class="link" href="happy.html#sbehap-LDAPdiag" title="Figure 5.1. The Interaction of LDAP, UNIX Posix Accounts and Samba Accounts">&#8220;The Interaction of LDAP, UNIX Posix Accounts and Samba Accounts&#8221;</a>.
 	</p><div class="figure"><a name="sbehap-LDAPdiag"></a><p class="title"><b>Figure 5.1. The Interaction of LDAP, UNIX Posix Accounts and Samba Accounts</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/UNIX-Samba-and-LDAP.png" width="270" alt="The Interaction of LDAP, UNIX Posix Accounts and Samba Accounts"></div></div></div><br class="figure-break"><p>
-	<a class="indexterm" name="id2594218"></a>
-	<a class="indexterm" name="id2594225"></a>
+	<a class="indexterm" name="id359812"></a>
+	<a class="indexterm" name="id359819"></a>
 	You configure OpenLDAP so that it is operational. Before deploying the OpenLDAP, you really
 	ought to learn how to configure secure communications over LDAP so that site security is not
 	at risk. This is not covered in the following guidance.
 	</p><p>
-	<a class="indexterm" name="id2594242"></a>
-	<a class="indexterm" name="id2594248"></a>
-	<a class="indexterm" name="id2594258"></a>
-	<a class="indexterm" name="id2594264"></a>
+	<a class="indexterm" name="id359833"></a>
+	<a class="indexterm" name="id359840"></a>
+	<a class="indexterm" name="id359849"></a>
+	<a class="indexterm" name="id359856"></a>
 	When OpenLDAP has been made operative, you configure the PDC called <code class="constant">MASSIVE</code>.
 	You initialize the Samba <code class="filename">secrets.tdb<sub></sub></code> file. Then you
 	create the LDAP Interchange Format (LDIF) file from which the LDAP database can be initialized.
@@ -395,27 +395,27 @@
 	You can also find on the enclosed CD-ROM, in the <code class="filename">Chap06</code> directory, a few tools
 	that help to manage user and group configuration.
 	</p><p>
-	<a class="indexterm" name="id2594298"></a>
-	<a class="indexterm" name="id2594305"></a>
-	<a class="indexterm" name="id2594312"></a>
+	<a class="indexterm" name="id359886"></a>
+	<a class="indexterm" name="id359893"></a>
+	<a class="indexterm" name="id359900"></a>
 	In order to effect folder redirection and to add robustness to the implementation,
 	create a network default profile. All network users workstations are configured to use
 	the new profile. Roaming profiles will automatically be deleted from the workstation
 	when the user logs off.
 	</p><p>
-	<a class="indexterm" name="id2594332"></a>
+	<a class="indexterm" name="id359915"></a>
 	The profile is configured so that users cannot change the appearance
 	of their desktop. This is known as a mandatory profile. You make certain that users
 	are able to use their computers efficiently.
 	</p><p>
-	<a class="indexterm" name="id2594345"></a>
+	<a class="indexterm" name="id359927"></a>
 	A network logon script is used to deliver flexible but consistent network drive
 	connections.
 	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="sbehap-ppc"></a>Addition of Machines to the Domain</h4></div></div></div><p>
-		<a class="indexterm" name="id2594367"></a>
-		<a class="indexterm" name="id2594372"></a>
-		<a class="indexterm" name="id2594378"></a>
-		<a class="indexterm" name="id2594383"></a>
+		<a class="indexterm" name="id359947"></a>
+		<a class="indexterm" name="id359952"></a>
+		<a class="indexterm" name="id359958"></a>
+		<a class="indexterm" name="id359963"></a>
 		Samba versions prior to 3.0.11 necessitated the use of a domain administrator account
 		that maps to the UNIX UID=0. The UNIX operating system permits only the <code class="constant">root</code>
 		user to add user and group accounts. Samba 3.0.11 introduced a new facility known as
@@ -425,13 +425,13 @@
 		In this network example use is made of one of the supported privileges purely to demonstrate
 		how any user can now be given the ability to add machines to the domain using a normal user account
 		that has been given the appropriate privileges.
-		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2594521"></a>Roaming Profile Background</h4></div></div></div><p>
+		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id360094"></a>Roaming Profile Background</h4></div></div></div><p>
 		As XP roaming profiles grow, so does the amount of time it takes to log in and out.
 		</p><p>
-		<a class="indexterm" name="id2594534"></a>
-		<a class="indexterm" name="id2594541"></a>
-		<a class="indexterm" name="id2594548"></a>
-		<a class="indexterm" name="id2594554"></a>
+		<a class="indexterm" name="id360106"></a>
+		<a class="indexterm" name="id360112"></a>
+		<a class="indexterm" name="id360119"></a>
+		<a class="indexterm" name="id360126"></a>
 		An XP roaming profile consists of the <code class="constant">HKEY_CURRENT_USER</code> hive file
 		<code class="filename">NTUSER.DAT</code> and a number of folders (My Documents, Application Data,
 		Desktop, Start Menu, Templates, NetHood, Favorites, and so on).  When a user logs onto the 
@@ -453,20 +453,20 @@
 		user to not place large files on the desktop and to use his or her mapped home directory
 		instead of the <code class="filename">My Documents</code> folder for saving documents.
 		</p><p>
-		<a class="indexterm" name="id2594633"></a>
+		<a class="indexterm" name="id360190"></a>
 		Using a folder other than <code class="filename">My Documents</code> is a nuisance for 
 		some users, since many applications use it by default.
 		</p><p>
-		<a class="indexterm" name="id2594652"></a>
-		<a class="indexterm" name="id2594658"></a>
-		<a class="indexterm" name="id2594665"></a>
+		<a class="indexterm" name="id360207"></a>
+		<a class="indexterm" name="id360214"></a>
+		<a class="indexterm" name="id360221"></a>
 		The secret to rapid loading of roaming profiles is to prevent unnecessary data from 
 		being copied back and forth, without losing any functionality. This is not difficult; 
 		it can be done by making changes to the Local Group Policy on each client as well 
 		as changing some paths in each user's <code class="filename">NTUSER.DAT</code> hive.
 		</p><p>
-		<a class="indexterm" name="id2594687"></a>
-		<a class="indexterm" name="id2594694"></a>
+		<a class="indexterm" name="id360239"></a>
+		<a class="indexterm" name="id360246"></a>
 		Every user profile has its own <code class="filename">NTUSER.DAT</code> file. This means
 		you need to edit every user's profile, unless a better method can be
 		followed. Fortunately, with the right preparations, this is not difficult.
@@ -475,10 +475,10 @@
 		necessary to copy all files from redirected folders to the network share to which
 		they are redirected.
 		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="sbehap-locgrppol"></a>The Local Group Policy</h4></div></div></div><p>
-		<a class="indexterm" name="id2594734"></a>
-		<a class="indexterm" name="id2594741"></a>
-		<a class="indexterm" name="id2594748"></a>
-		<a class="indexterm" name="id2594754"></a>
+		<a class="indexterm" name="id360282"></a>
+		<a class="indexterm" name="id360288"></a>
+		<a class="indexterm" name="id360295"></a>
+		<a class="indexterm" name="id360302"></a>
 		Without an Active Directory PDC, you cannot take full advantage of Group Policy 
 		Objects. However, you can still make changes to the Local Group Policy by using 
 		the Group Policy editor (<code class="literal">gpedit.msc</code>).
@@ -492,26 +492,26 @@
 		Simply add the folders you do not wish to be copied back and forth to this 
 		semicolon-separated list. Note that this change must be made on all clients 
 		that are using roaming profiles.
-		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2594822"></a>Profile Changes</h4></div></div></div><p>
-		<a class="indexterm" name="id2594829"></a>
-		<a class="indexterm" name="id2594836"></a>
+		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id360364"></a>Profile Changes</h4></div></div></div><p>
+		<a class="indexterm" name="id360372"></a>
+		<a class="indexterm" name="id360378"></a>
 		There are two changes that should be done to each user's profile. Move each of 
 		the directories that you have excluded from being copied back and forth out of 
 		the usual profile path. Modify each user's <code class="filename">NTUSER.DAT</code> file 
 		to point to the new paths that are shared over the network instead of to the default
 		path (<code class="filename">C:\Documents and Settings\%USERNAME%</code>).
 		</p><p>
-		<a class="indexterm" name="id2594864"></a>
-		<a class="indexterm" name="id2594871"></a>
+		<a class="indexterm" name="id360403"></a>
+		<a class="indexterm" name="id360410"></a>
 		The above modifies existing user profiles. So that newly created profiles have 
 		these settings, you need to modify the <code class="filename">NTUSER.DAT</code> in 
 		the <code class="filename">C:\Documents and Settings\Default User</code> folder on each 
 		client machine, changing the same registry keys.  You could do this by copying 
 		<code class="filename">NTUSER.DAT</code> to a Linux box and using <code class="literal">regedt32</code>.
 		The basic method is described under <a class="link" href="happy.html#redirfold" title="Configuration of Default Profile with Folder Redirection">&#8220;Configuration of Default Profile with Folder Redirection&#8221;</a>.
-		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2594916"></a>Using a Network Default User Profile</h4></div></div></div><p>
-		<a class="indexterm" name="id2594924"></a>
-		<a class="indexterm" name="id2594931"></a>
+		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id360452"></a>Using a Network Default User Profile</h4></div></div></div><p>
+		<a class="indexterm" name="id360460"></a>
+		<a class="indexterm" name="id360467"></a>
 		If you are using Samba as your PDC, you should create a file share called 
 		<code class="constant">NETLOGON</code> and within that create a directory called 
 		<code class="filename">Default User</code>, which is a copy of the desired default user 
@@ -520,10 +520,10 @@
 		the first login from a new account pulls its configuration from it.
 		See also <a class="ulink" href="http://isg.ee.ethz.ch/tools/realmen/det/skel.en.html" target="_top">
 		the Real Men Don't Click</a> Web site.
-		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2594975"></a>Installation of Printer Driver Auto-Download</h4></div></div></div><p>
-		<a class="indexterm" name="id2594983"></a>
-		<a class="indexterm" name="id2594992"></a>
-		<a class="indexterm" name="id2594999"></a>
+		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id360506"></a>Installation of Printer Driver Auto-Download</h4></div></div></div><p>
+		<a class="indexterm" name="id360514"></a>
+		<a class="indexterm" name="id360523"></a>
+		<a class="indexterm" name="id360530"></a>
 		The subject of printing is quite topical. Printing problems run second place to name
 		resolution issues today. So far in this book, you have experienced only what is generally
 		known as &#8220;<span class="quote">dumb</span>&#8221; printing. Dumb printing is the arrangement by which all drivers
@@ -532,8 +532,8 @@
 		many problems, but it has its limitations also. Dumb printing is better known as
 		<code class="literal">Raw-Print-Through</code> printing.
 		</p><p>
-		<a class="indexterm" name="id2595028"></a>
-		<a class="indexterm" name="id2595037"></a>
+		<a class="indexterm" name="id360554"></a>
+		<a class="indexterm" name="id360564"></a>
 		Samba permits the configuration of <code class="literal">smart</code> printing using the Microsoft
 		Windows point-and-click (also called drag-and-drop) printing. What this provides is
 		essentially the ability to print to any printer. If the local client does not yet have a
@@ -547,9 +547,9 @@
 		then invokes a suitable print filter to convert the incoming data stream into a format
 		suited to the printer to which the job is dispatched.
 		</p><p>
-		<a class="indexterm" name="id2595084"></a>
-		<a class="indexterm" name="id2595091"></a>
-		<a class="indexterm" name="id2595098"></a>
+		<a class="indexterm" name="id360604"></a>
+		<a class="indexterm" name="id360610"></a>
+		<a class="indexterm" name="id360617"></a>
 		The CUPS printing subsystem is capable of intelligent printing. It has the capacity to
 		detect the data format and apply a print filter. This means that it is feasible to install
 		on all Windows clients a single printer driver for use with all printers that are routed
@@ -574,10 +574,10 @@
 		simple problems efficiently and effectively.
 		</p><p>
 		Here are some diagnostic guidelines that can be referred to when things go wrong:
-		</p><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id2595165"></a>Preliminary Advice: Dangers Can Be Avoided</h5></div></div></div><p>
+		</p><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id360669"></a>Preliminary Advice: Dangers Can Be Avoided</h5></div></div></div><p>
 		The best advice regarding how to mend a broken leg is &#8220;<span class="quote">Never break a leg!</span>&#8221;
 		</p><p>
-		<a class="indexterm" name="id2595181"></a>
+		<a class="indexterm" name="id360684"></a>
 		Newcomers to Samba and LDAP seem to struggle a great deal at first.  If you want advice
 		regarding the best way to remedy LDAP and Samba problems: &#8220;<span class="quote">Avoid them like the plague!</span>&#8221;
 		</p><p>
@@ -593,7 +593,7 @@
 		Do not be lulled into thinking that you can easily adopt the examples in this
 		book and adapt them without first working through the examples provided. A little
 		thing overlooked can cause untold pain and may permanently tarnish your experience.
-		</p></div></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id2595225"></a>The Name Service Caching Daemon</h5></div></div></div><p>
+		</p></div></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id360719"></a>The Name Service Caching Daemon</h5></div></div></div><p>
 		The name service caching daemon (nscd) is a primary cause of difficulties with name
 		resolution, particularly where <code class="literal">winbind</code> is used. Winbind does its
 		own caching, thus nscd causes double caching which can lead to peculiar problems during
@@ -660,17 +660,17 @@
 <code class="prompt">root# </code> chkconfig nscd off
 <code class="prompt">root# </code> rcnscd off
 </pre><p>
-		</p></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id2595399"></a>Debugging LDAP</h5></div></div></div><p>
-		<a class="indexterm" name="id2595407"></a>
-		<a class="indexterm" name="id2595414"></a>
-		<a class="indexterm" name="id2595420"></a>
+		</p></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id360837"></a>Debugging LDAP</h5></div></div></div><p>
+		<a class="indexterm" name="id360844"></a>
+		<a class="indexterm" name="id360851"></a>
+		<a class="indexterm" name="id360858"></a>
 		In the example <code class="filename">/etc/openldap/slapd.conf</code> control file
 		(see <a class="link" href="happy.html#sbehap-dbconf" title="Example 5.1. LDAP DB_CONFIG File">&#8220;LDAP DB_CONFIG File&#8221;</a>) there is an entry for <code class="constant">loglevel	256</code>.
 		To enable logging via the syslog infrastructure, it is necessary to uncomment this parameter
 		and restart <code class="literal">slapd</code>.
 		</p><p>
-		<a class="indexterm" name="id2595456"></a>
-		<a class="indexterm" name="id2595463"></a>
+		<a class="indexterm" name="id360892"></a>
+		<a class="indexterm" name="id360898"></a>
 		LDAP log information can be directed into a file that is separate from the normal system
 		log files by changing the <code class="filename">/etc/syslog.conf</code> file so it has the following
 		contents:
@@ -689,7 +689,7 @@
 		local site needs. The configuration used later in this chapter reflects such
 		customization with the intent that LDAP log files will be stored at a location
 		that meets local site needs and wishes more fully.
-		</p></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id2595505"></a>Debugging NSS_LDAP</h5></div></div></div><p>
+		</p></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id360932"></a>Debugging NSS_LDAP</h5></div></div></div><p>
 		The basic mechanism for diagnosing problems with the nss_ldap utility involves adding to the
 		<code class="filename">/etc/ldap.conf</code> file the following parameters:
 </p><pre class="screen">
@@ -702,7 +702,7 @@
 </pre><p>
 		</p><p>
 		The diagnostic process should follow these steps:
-		</p><div class="procedure"><a name="id2595548"></a><p class="title"><b>Procedure 5.1. NSS_LDAP Diagnostic Steps</b></p><ol type="1"><li><p>
+		</p><div class="procedure"><a name="id360973"></a><p class="title"><b>Procedure 5.1. NSS_LDAP Diagnostic Steps</b></p><ol type="1"><li><p>
 			Verify the <code class="constant">nss_base_passwd, nss_base_shadow, nss_base_group</code> entries
 			in the <code class="filename">/etc/ldap.conf</code> file and compare them closely with the directory
 			tree location that was chosen when the directory was first created.
@@ -792,7 +792,7 @@
 			Check that the bindpw entry in the <code class="filename">/etc/ldap.conf</code> or in the
 			<code class="filename">/etc/ldap.secrets</code> file is correct, as specified in the
 			<code class="filename">/etc/openldap/slapd.conf</code> file.
-			</p></li></ol></div></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id2595800"></a>Debugging Samba</h5></div></div></div><p>
+			</p></li></ol></div></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id361191"></a>Debugging Samba</h5></div></div></div><p>
 		The following parameters in the <code class="filename">smb.conf</code> file can be useful in tracking down Samba-related problems:
 </p><pre class="screen">
 [global]
@@ -822,17 +822,17 @@
 		</p><p>
 		Search for hints of what may have failed by looking for the words <span class="emphasis"><em>fail</em></span>
 		and <span class="emphasis"><em>error</em></span>.
-		</p></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id2595870"></a>Debugging on the Windows Client</h5></div></div></div><p>
+		</p></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id361256"></a>Debugging on the Windows Client</h5></div></div></div><p>
 		MS Windows 2000 Professional and Windows  XP Professional clients can be configured
 		to create a netlogon.log file that can be very helpful in diagnosing network logon problems. Search
 		the Microsoft knowledge base for detailed instructions. The techniques vary a little with each
 		version of MS Windows.
-		</p></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2595888"></a>Political Issues</h3></div></div></div><p>
+		</p></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id361271"></a>Political Issues</h3></div></div></div><p>
 		MS Windows network users are generally very sensitive to limits that may be imposed when 
 		confronted with locked-down workstation configurations. The challenge you face must 
 		be promoted as a choice between reliable, fast network operation and a constant flux 	
 		of problems that result in user irritation.
-		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2595904"></a>Installation Checklist</h3></div></div></div><p>
+		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id361283"></a>Installation Checklist</h3></div></div></div><p>
 	You are starting a complex project. Even though you went through the installation of a complex
 	network in <a class="link" href="Big500users.html" title="Chapter 4. The 500-User Office">&#8220;The 500-User Office&#8221;</a>, this network is a bigger challenge because of the
 	large number of complex applications that must be configured before the first few steps
@@ -840,14 +840,14 @@
 	frequently review the steps ahead while making at least a mental note of what has already
 	been completed. The following task list may help you to keep track of the task items
 	that are covered:
-	</p><div class="itemizedlist"><ul type="disc"><li><p>Samba-3 PDC Server Configuration</p><div class="orderedlist"><ol type="1"><li><p>DHCP and DNS servers</p></li><li><p>OpenLDAP server</p></li><li><p>PAM and NSS client tools</p></li><li><p>Samba-3 PDC</p></li><li><p>Idealx smbldap scripts</p></li><li><p>LDAP initialization</p></li><li><p>Create user and group accounts</p></li><li><p>Printers</p></li><li><p>Share point directory roots</p></li><li><p>Profile directories</p></li><li><p>Logon scripts</p></li><li><p>Configuration of user rights and privileges</p></li></ol></div></li><li><p>Samba-3 BDC Server Configuration</p><div class="orderedlist"><ol type="1"><li><p>DHCP and DNS servers</p></li><li><p>PAM and NSS client tools</p></li><li><p>Printers</p></li><li><p>Share point directory roots</p></li><li><p>Profiles directories</p></li></ol></div></li><li><p>Windows XP Client Configuration</p><div class="orderedlist"><ol type="1"><li><p>Default profile folder redirection</p></li><li><p>MS Outlook PST file relocation</p></li><li><p>Delete roaming profile on logout</p></li><li><p>Upload printer drivers to Samba servers</p></li><li><p>Install software</p></li><li><p>Creation of roll-out images</p></li></ol></div></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2596084"></a>Samba Server Implementation</h2></div></div></div><p>
-	<a class="indexterm" name="id2596092"></a>
-	<a class="indexterm" name="id2596099"></a>
+	</p><div class="itemizedlist"><ul type="disc"><li><p>Samba-3 PDC Server Configuration</p><div class="orderedlist"><ol type="1"><li><p>DHCP and DNS servers</p></li><li><p>OpenLDAP server</p></li><li><p>PAM and NSS client tools</p></li><li><p>Samba-3 PDC</p></li><li><p>Idealx smbldap scripts</p></li><li><p>LDAP initialization</p></li><li><p>Create user and group accounts</p></li><li><p>Printers</p></li><li><p>Share point directory roots</p></li><li><p>Profile directories</p></li><li><p>Logon scripts</p></li><li><p>Configuration of user rights and privileges</p></li></ol></div></li><li><p>Samba-3 BDC Server Configuration</p><div class="orderedlist"><ol type="1"><li><p>DHCP and DNS servers</p></li><li><p>PAM and NSS client tools</p></li><li><p>Printers</p></li><li><p>Share point directory roots</p></li><li><p>Profiles directories</p></li></ol></div></li><li><p>Windows XP Client Configuration</p><div class="orderedlist"><ol type="1"><li><p>Default profile folder redirection</p></li><li><p>MS Outlook PST file relocation</p></li><li><p>Delete roaming profile on logout</p></li><li><p>Upload printer drivers to Samba servers</p></li><li><p>Install software</p></li><li><p>Creation of roll-out images</p></li></ol></div></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id361454"></a>Samba Server Implementation</h2></div></div></div><p>
+	<a class="indexterm" name="id361462"></a>
+	<a class="indexterm" name="id361468"></a>
 	The network design shown in <a class="link" href="happy.html#chap6net" title="Figure 5.2. Network Topology 500 User Network Using ldapsam passdb backend">&#8220;Network Topology  500 User Network Using ldapsam passdb backend&#8221;</a> is not comprehensive. It is assumed
 	that you will install additional file servers and possibly additional BDCs.
 	</p><div class="figure"><a name="chap6net"></a><p class="title"><b>Figure 5.2. Network Topology  500 User Network Using ldapsam passdb backend</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/chap6-net.png" width="270" alt="Network Topology 500 User Network Using ldapsam passdb backend"></div></div></div><br class="figure-break"><p>
-	<a class="indexterm" name="id2596161"></a>
-	<a class="indexterm" name="id2596168"></a>
+	<a class="indexterm" name="id361529"></a>
+	<a class="indexterm" name="id361535"></a>
 	All configuration files and locations are shown for SUSE Linux 9.2 and are equally valid for SUSE
 	Linux Enterprise Server 9. The file locations for Red Hat Linux are similar. You may need to
 	adjust the locations for your particular Linux system distribution/implementation.
@@ -868,22 +868,22 @@
 	with newly installed Linux servers, you must complete the steps shown in
 	<a class="link" href="Big500users.html#ch5-dnshcp-setup" title="Installation of DHCP, DNS, and Samba Control Files">&#8220;Installation of DHCP, DNS, and Samba Control Files&#8221;</a> before commencing at <a class="link" href="happy.html#ldapsetup" title="OpenLDAP Server Configuration">&#8220;OpenLDAP Server Configuration&#8221;</a>.
 	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="ldapsetup"></a>OpenLDAP Server Configuration</h3></div></div></div><p>
-	<a class="indexterm" name="id2596250"></a>
-	<a class="indexterm" name="id2596256"></a>
-	<a class="indexterm" name="id2596263"></a>
+	<a class="indexterm" name="id361605"></a>
+	<a class="indexterm" name="id361612"></a>
+	<a class="indexterm" name="id361618"></a>
 	Confirm that the packages shown in <a class="link" href="happy.html#oldapreq" title="Table 5.2. Required OpenLDAP Linux Packages">&#8220;Required OpenLDAP Linux Packages&#8221;</a> are installed on your system.
 	</p><div class="table"><a name="oldapreq"></a><p class="title"><b>Table 5.2. Required OpenLDAP Linux Packages</b></p><div class="table-contents"><table summary="Required OpenLDAP Linux Packages" border="1"><colgroup><col align="left"><col align="left"><col align="left"></colgroup><thead><tr><th align="center">SUSE Linux 8.x</th><th align="center">SUSE Linux 9.x</th><th align="center">Red Hat Linux</th></tr></thead><tbody><tr><td align="left">nss_ldap</td><td align="left">nss_ldap</td><td align="left">nss_ldap</td></tr><tr><td align="left">pam_ldap</td><td align="left">pam_ldap</td><td align="left">pam_ldap</td></tr><tr><td align="left">openldap2</td><td align="left">openldap2</td><td align="left">openldap</td></tr><tr><td align="left">openldap2-client</td><td align="left">openldap2-client</td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break"><p>
 	Samba-3 and OpenLDAP will have a degree of interdependence that is unavoidable. The method
 	for bootstrapping the LDAP and Samba-3 configuration is relatively straightforward. If you
 	follow these guidelines, the resulting system should work fine.
-	</p><div class="procedure"><a name="id2596395"></a><p class="title"><b>Procedure 5.2. OpenLDAP Server Configuration Steps</b></p><ol type="1"><li><p>
-		<a class="indexterm" name="id2596407"></a>
+	</p><div class="procedure"><a name="id361748"></a><p class="title"><b>Procedure 5.2. OpenLDAP Server Configuration Steps</b></p><ol type="1"><li><p>
+		<a class="indexterm" name="id361759"></a>
 		Install the file shown in <a class="link" href="happy.html#sbehap-slapdconf" title="Example 5.2. LDAP Master Configuration File /etc/openldap/slapd.conf Part A">&#8220;LDAP Master Configuration File  /etc/openldap/slapd.conf Part A&#8221;</a> in the directory
 		<code class="filename">/etc/openldap</code>.
 		</p></li><li><p>
-		<a class="indexterm" name="id2596435"></a>
-		<a class="indexterm" name="id2596442"></a>
-		<a class="indexterm" name="id2596449"></a>
+		<a class="indexterm" name="id361785"></a>
+		<a class="indexterm" name="id361792"></a>
+		<a class="indexterm" name="id361799"></a>
 		Remove all files from the directory <code class="filename">/data/ldap</code>, making certain that
 		the directory exists with permissions:
 </p><pre class="screen">
@@ -892,14 +892,14 @@
 </pre><p>
 		This may require you to add a user and a group account for LDAP if they do not exist.
 		</p></li><li><p>
-		<a class="indexterm" name="id2596484"></a>
+		<a class="indexterm" name="id361832"></a>
 		Install the file shown in <a class="link" href="happy.html#sbehap-dbconf" title="Example 5.1. LDAP DB_CONFIG File">&#8220;LDAP DB_CONFIG File&#8221;</a> in the directory
 		<code class="filename">/data/ldap</code>. In the event that this file is added after <code class="constant">ldap</code>
 		has been started, it is possible to cause the new settings to take effect by shutting down
 		the <code class="constant">LDAP</code> server, executing the <code class="literal">db_recover</code> command inside the
 		<code class="filename">/data/ldap</code> directory, and then restarting the <code class="constant">LDAP</code> server.
 		</p></li><li><p>
-		<a class="indexterm" name="id2596537"></a>
+		<a class="indexterm" name="id361882"></a>
 		Performance logging can be enabled and should preferably be sent to a file on
 		a file system that is large enough to handle significantly sized logs. To enable
 		the logging at a verbose level to permit detailed analysis, uncomment the entry in
@@ -975,31 +975,31 @@
 index sambaDomainName       eq
 index default               sub
 </pre></div></div><br class="example-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="sbehap-PAM-NSS"></a>PAM and NSS Client Configuration</h3></div></div></div><p>
-	<a class="indexterm" name="id2596696"></a>
-	<a class="indexterm" name="id2596703"></a>
-	<a class="indexterm" name="id2596710"></a>
+	<a class="indexterm" name="id362017"></a>
+	<a class="indexterm" name="id362023"></a>
+	<a class="indexterm" name="id362030"></a>
 	The steps that follow involve configuration of LDAP, NSS LDAP-based resolution of users and
 	groups. Also, so that LDAP-based accounts can log onto the system, the steps ahead configure
 	the Pluggable Authentication Modules (PAM) to permit LDAP-based authentication.
 	</p><p>
-	<a class="indexterm" name="id2596724"></a>
-	<a class="indexterm" name="id2596734"></a>
+	<a class="indexterm" name="id362042"></a>
+	<a class="indexterm" name="id362051"></a>
 	Since you have chosen to put UNIX user and group accounts into the LDAP database, it is likely
 	that you may want to use them for UNIX system (Linux) local machine logons. This necessitates
 	correct configuration of PAM. The <code class="literal">pam_ldap</code> open source package provides the
 	PAM modules that most people would use. On SUSE Linux systems, the <code class="literal">pam_unix2.so</code>
 	module also has the ability to redirect authentication requests through LDAP.
 	</p><p>
-	<a class="indexterm" name="id2596762"></a>
-	<a class="indexterm" name="id2596769"></a>
-	<a class="indexterm" name="id2596776"></a>
-	<a class="indexterm" name="id2596783"></a>
+	<a class="indexterm" name="id362076"></a>
+	<a class="indexterm" name="id362083"></a>
+	<a class="indexterm" name="id362090"></a>
+	<a class="indexterm" name="id362097"></a>
 	You have chosen to configure these services by directly editing the system files, but of course, you
 	know that this configuration can be done using system tools provided by the Linux system vendor.
 	SUSE Linux has a facility in YaST (the system admin tool) through <span class="guimenu">yast</span> &#8594; <span class="guimenuitem">system</span> &#8594; <span class="guimenuitem">ldap-client</span> that permits
 	configuration of SUSE Linux as an LDAP client. Red Hat Linux provides the <code class="literal">authconfig</code>
 	tool for this.
-	</p><div class="procedure"><a name="id2596822"></a><p class="title"><b>Procedure 5.3. PAM and NSS Client Configuration Steps</b></p><div class="example"><a name="sbehap-nss01"></a><p class="title"><b>Example 5.4. Configuration File for NSS LDAP Support  <code class="filename">/etc/ldap.conf</code></b></p><div class="example-contents"><pre class="screen">
+	</p><div class="procedure"><a name="id362133"></a><p class="title"><b>Procedure 5.3. PAM and NSS Client Configuration Steps</b></p><div class="example"><a name="sbehap-nss01"></a><p class="title"><b>Example 5.4. Configuration File for NSS LDAP Support  <code class="filename">/etc/ldap.conf</code></b></p><div class="example-contents"><pre class="screen">
 host 127.0.0.1
 
 base dc=abmas,dc=biz
@@ -1042,9 +1042,9 @@
 
 ssl off
 </pre></div></div><br class="example-break"><ol type="1"><li><p>
-		<a class="indexterm" name="id2596834"></a>
-		<a class="indexterm" name="id2596841"></a>
-		<a class="indexterm" name="id2596848"></a>
+		<a class="indexterm" name="id362145"></a>
+		<a class="indexterm" name="id362151"></a>
+		<a class="indexterm" name="id362158"></a>
 		Execute the following command to find where the <code class="filename">nss_ldap</code> module
 		expects to find its control file:
 </p><pre class="screen">
@@ -1057,7 +1057,7 @@
 		On the servers called <code class="constant">BLDG1</code> and <code class="constant">BLDG2</code>, install the file shown in
 		<a class="link" href="happy.html#sbehap-nss02" title="Example 5.5. Configuration File for NSS LDAP Clients Support /etc/ldap.conf">&#8220;Configuration File for NSS LDAP Clients Support  /etc/ldap.conf&#8221;</a> into the path that was obtained from the step above.
 		</p></li><li><p>
-		<a class="indexterm" name="id2596982"></a>
+		<a class="indexterm" name="id362281"></a>
 		Edit the NSS control file (<code class="filename">/etc/nsswitch.conf</code>) so that the lines that
 		control user and group resolution will obtain information from the normal system files as
 		well as from <code class="literal">ldap</code>:
@@ -1080,7 +1080,7 @@
 		Even at the risk of overstating the issue, incorrect and inappropriate configuration of the
 		<code class="filename">nsswitch.conf</code> file is a significant cause of operational problems with LDAP.
 		</p></li><li><p>
-		<a class="indexterm" name="id2597057"></a>
+		<a class="indexterm" name="id362347"></a>
 		For PAM LDAP configuration on this SUSE Linux 9.0 system, the simplest solution is to edit the following
 		files in the <code class="filename">/etc/pam.d</code> directory: <code class="literal">login</code>, <code class="literal">password</code>,
 		<code class="literal">samba</code>, <code class="literal">sshd</code>.  In each file, locate every entry that has the
@@ -1102,7 +1102,7 @@
 session   required   pam_limits.so
 </pre><p>
 		</p><p>
-		<a class="indexterm" name="id2597137"></a>
+		<a class="indexterm" name="id362419"></a>
 		On other Linux systems that do not have an LDAP-enabled <code class="literal">pam_unix2.so</code> module,
 		you must edit these files by adding the <code class="literal">pam_ldap.so</code> modules as shown here:
 </p><pre class="screen">
@@ -1126,14 +1126,14 @@
 		implementation, but if the <code class="literal">pam_unix2.so</code> on your system supports
 		LDAP, you probably want to use it rather than add an additional module.
 		</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="sbehap-massive"></a>Samba-3 PDC Configuration</h3></div></div></div><p>
-	<a class="indexterm" name="id2597220"></a>
+	<a class="indexterm" name="id362489"></a>
 	Verify that the Samba-3.0.20 (or later) packages are installed on each SUSE Linux server 
 	before following the steps below. If Samba-3.0.20 (or later) is not installed, you have the
 	choice to either build your own or obtain the packages from a dependable source.
 	Packages for SUSE Linux 8.x, 9.x, and SUSE Linux Enterprise Server 9, as well as for 
 	Red Hat Fedora Core and Red Hat Enterprise Linux Server 3 and 4, are included on the CD-ROM that
 	is included with this book.
-	</p><div class="procedure"><a name="id2597236"></a><p class="title"><b>Procedure 5.4. Configuration of PDC Called <code class="constant">MASSIVE</code></b></p><ol type="1"><li><p>
+	</p><div class="procedure"><a name="id362500"></a><p class="title"><b>Procedure 5.4. Configuration of PDC Called <code class="constant">MASSIVE</code></b></p><ol type="1"><li><p>
 		Install the files in <a class="link" href="happy.html#sbehap-massive-smbconfa" title="Example 5.6. LDAP Based smb.conf File, Server: MASSIVE global Section: Part A">&#8220;LDAP Based smb.conf File, Server: MASSIVE  global Section: Part A&#8221;</a>, 
 		<a class="link" href="happy.html#sbehap-massive-smbconfb" title="Example 5.7. LDAP Based smb.conf File, Server: MASSIVE global Section: Part B">&#8220;LDAP Based smb.conf File, Server: MASSIVE  global Section: Part B&#8221;</a>, <a class="link" href="happy.html#sbehap-shareconfa" title="Example 5.10. LDAP Based smb.conf File, Shares Section Part A">&#8220;LDAP Based smb.conf File, Shares Section  Part A&#8221;</a>, 
 		and <a class="link" href="happy.html#sbehap-shareconfb" title="Example 5.11. LDAP Based smb.conf File, Shares Section Part B">&#8220;LDAP Based smb.conf File, Shares Section  Part B&#8221;</a> into the <code class="filename">/etc/samba/</code> 
@@ -1143,7 +1143,7 @@
 		on the master file. The operational <code class="filename">smb.conf</code> is then generated as shown in
 		the next step.
 		</p></li><li><p>
-		<a class="indexterm" name="id2597313"></a>
+		<a class="indexterm" name="id362572"></a>
 		Create and verify the contents of the <code class="filename">smb.conf</code> file that is generated by:
 </p><pre class="screen">
 <code class="prompt">root# </code> testparm -s smb.conf.master &gt; smb.conf
@@ -1180,8 +1180,8 @@
 <code class="prompt">root# </code> rm /var/log/samba/*
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2597413"></a>
-		<a class="indexterm" name="id2597419"></a>
+		<a class="indexterm" name="id362664"></a>
+		<a class="indexterm" name="id362671"></a>
 		Samba-3 communicates with the LDAP server. The password that it uses to
 		authenticate to the LDAP server must be stored in the <code class="filename">secrets.tdb</code>
 		file. Execute the following to create the new <code class="filename">secrets.tdb</code> files
@@ -1194,8 +1194,8 @@
 Setting stored password for "cn=Manager,dc=abmas,dc=biz" in secrets.tdb
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2597468"></a>
-		<a class="indexterm" name="id2597475"></a>
+		<a class="indexterm" name="id362716"></a>
+		<a class="indexterm" name="id362723"></a>
 		Samba-3 generates a Windows Security Identifier (SID) only when <code class="literal">smbd</code>
 		has been started. For this reason, you start Samba. After a few seconds delay,
 		execute:
@@ -1229,10 +1229,10 @@
 		</p></li><li><p>
 		When a positive domain SID has been reported, stop Samba.
 		</p></li><li><p>
-		<a class="indexterm" name="id2597587"></a>
-		<a class="indexterm" name="id2597594"></a>
-		<a class="indexterm" name="id2597601"></a>
-		<a class="indexterm" name="id2597607"></a>
+		<a class="indexterm" name="id362822"></a>
+		<a class="indexterm" name="id362828"></a>
+		<a class="indexterm" name="id362835"></a>
+		<a class="indexterm" name="id362842"></a>
 		Configure the NFS server for your Linux system. So you can complete the steps that
 		follow, enter into the <code class="filename">/etc/exports</code> the following entry:
 </p><pre class="screen">
@@ -1250,8 +1250,8 @@
 		</p></li></ol></div><p>
 	Your Samba-3 PDC is now ready to communicate with the LDAP password backend. Let's get on with
 	configuration of the LDAP server.
-	</p><div class="example"><a name="sbehap-massive-smbconfa"></a><p class="title"><b>Example 5.6. LDAP Based <code class="filename">smb.conf</code> File, Server: MASSIVE  global Section: Part A</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2597694"></a><em class="parameter"><code>unix charset = LOCALE</code></em></td></tr><tr><td><a class="indexterm" name="id2597706"></a><em class="parameter"><code>workgroup = MEGANET2</code></em></td></tr><tr><td><a class="indexterm" name="id2597717"></a><em class="parameter"><code>netbios name = MASSIVE</code></em></td></tr><tr><td><a class="indexterm" name="id2597729"></a><em class="parameter"><code>interfaces = eth1, lo</code></em></td></tr><tr><td><a class="indexterm" name="id2597741"></a><em class="parameter"><code>bind interfaces only = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2597753"></a><em class="parameter"><code>passdb backend = ldapsam:ldap://massive.abmas.biz</code></em></td></tr><tr><td><a class="indexterm" name="id2597765"></a><em class="parameter"><code>enable privileges = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2597777"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id2597789"></a><em class="parameter"><code>log level = 1</code></em></td></tr><tr><td><a class="indexterm" name="id2597801"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id2597812"></a><em class="parameter"><code>log file = /var/log/samba/%m</code></em></td></tr><tr><td><a class="indexterm" name="id2597824"></a><em class="parameter"><code>max log size = 50</code></em></td></tr><tr><td><a class="indexterm" name="id2597836"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id2597847"></a><em class="parameter"><code>name resolve order = wins bcast hosts</code></em></td></tr><tr><td><a class="indexterm" name="id2597860"></a><em class="parameter"><code>time server = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2597871"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id2597883"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id2597895"></a><em class="parameter"><code>add user script = /opt/IDEALX/sbin/smbldap-useradd -m "%u"</code></em></td></tr><tr><td><a class="indexterm" name="id2597908"></a><em class="parameter"><code>delete user script = /opt/IDEALX/sbin/smbldap-userdel "%u"</code></em></td></tr><tr><td><a class="indexterm" name="id2597920"></a><em class="parameter"><code>add group script = /opt/IDEALX/sbin/smbldap-groupadd -p "%g"</code></em></td></tr><tr><td><a class="indexterm" name="id2597932"></a><em class="parameter"><code>delete group script = /opt/IDEALX/sbin/smbldap-groupdel "%g"</code></em></td></tr><tr><td><a class="indexterm" name="id2597945"></a><em class="parameter"><code>add user to group script = /opt/IDEALX/sbin/smbldap-groupmod -m "%u" "%g"</code></em></td></tr><tr><td><a class="indexterm" name="id2597958"></a><em class="parameter"><code>delete user from group script = /opt/IDEALX/sbin/smbldap-groupmod -x "%u" "%g"</code></em></td></tr><tr><td><a class="indexterm" name="id2597971"></a><em class="parameter"><code>set primary group script = /opt/IDEALX/sbin/smbldap-usermod -g "%g" "%u"</code></em></td></tr><tr><td><a class="indexterm" name="id2597984"></a><em class="parameter"><code>add machine script = /opt/IDEALX/sbin/smbldap-useradd -w "%u"</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="sbehap-massive-smbconfb"></a><p class="title"><b>Example 5.7. LDAP Based <code class="filename">smb.conf</code> File, Server: MASSIVE  global Section: Part B</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2598021"></a><em class="parameter"><code>logon script = scripts\logon.bat</code></em></td></tr><tr><td><a class="indexterm" name="id2598033"></a><em class="parameter"><code>logon path = \\%L\profiles\%U</code></em></td></tr><tr><td><a class="indexterm" name="id2598045"></a><em class="parameter"><code>logon drive = X:</code></em></td></tr><tr><td><a class="indexterm" name="id2598057"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2598068"></a><em class="parameter"><code>preferred master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2598080"></a><em class="parameter"><code>wins support = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2598092"></a><em class="parameter"><code>ldap suffix = dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id2598104"></a><em class="parameter"><code>ldap machine suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2598116"></a><em class="parameter"><code>ldap user suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2598128"></a><em class="parameter"><code>ldap group suffix = ou=Groups</code></em></td></tr><tr><td><a class="indexterm" name="id2598140"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr><tr><td><a class="indexterm" name="id2598152"></a><em class="parameter"><code>ldap admin dn = cn=Manager,dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id2598164"></a><em class="parameter"><code>idmap backend = ldap:ldap://massive.abmas.biz</code></em></td></tr><tr><td><a class="indexterm" name="id2598176"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2598188"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2598200"></a><em class="parameter"><code>map acl inherit = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2598212"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id2598223"></a><em class="parameter"><code>printer admin = root, chrisr</code></em></td></tr></table></div></div><br class="example-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="sbeidealx"></a>Install and Configure Idealx smbldap-tools Scripts</h3></div></div></div><p>
-	<a class="indexterm" name="id2598250"></a>
+	</p><div class="example"><a name="sbehap-massive-smbconfa"></a><p class="title"><b>Example 5.6. LDAP Based <code class="filename">smb.conf</code> File, Server: MASSIVE  global Section: Part A</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id362920"></a><em class="parameter"><code>unix charset = LOCALE</code></em></td></tr><tr><td><a class="indexterm" name="id362931"></a><em class="parameter"><code>workgroup = MEGANET2</code></em></td></tr><tr><td><a class="indexterm" name="id362943"></a><em class="parameter"><code>netbios name = MASSIVE</code></em></td></tr><tr><td><a class="indexterm" name="id362954"></a><em class="parameter"><code>interfaces = eth1, lo</code></em></td></tr><tr><td><a class="indexterm" name="id362966"></a><em class="parameter"><code>bind interfaces only = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id362977"></a><em class="parameter"><code>passdb backend = ldapsam:ldap://massive.abmas.biz</code></em></td></tr><tr><td><a class="indexterm" name="id362989"></a><em class="parameter"><code>enable privileges = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id363000"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id363012"></a><em class="parameter"><code>log level = 1</code></em></td></tr><tr><td><a class="indexterm" name="id363024"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id363035"></a><em class="parameter"><code>log file = /var/log/samba/%m</code></em></td></tr><tr><td><a class="indexterm" name="id363047"></a><em class="parameter"><code>max log size = 50</code></em></td></tr><tr><td><a class="indexterm" name="id363058"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id363070"></a><em class="parameter"><code>name resolve order = wins bcast hosts</code></em></td></tr><tr><td><a class="indexterm" name="id363081"></a><em class="parameter"><code>time server = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id363093"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id363104"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id363116"></a><em class="parameter"><code>add user script = /opt/IDEALX/sbin/smbldap-useradd -m "%u"</code></em></td></tr><tr><td><a class="indexterm" name="id363128"></a><em class="parameter"><code>delete user script = /opt/IDEALX/sbin/smbldap-userdel "%u"</code></em></td></tr><tr><td><a class="indexterm" name="id363139"></a><em class="parameter"><code>add group script = /opt/IDEALX/sbin/smbldap-groupadd -p "%g"</code></em></td></tr><tr><td><a class="indexterm" name="id363151"></a><em class="parameter"><code>delete group script = /opt/IDEALX/sbin/smbldap-groupdel "%g"</code></em></td></tr><tr><td><a class="indexterm" name="id363163"></a><em class="parameter"><code>add user to group script = /opt/IDEALX/sbin/smbldap-groupmod -m "%u" "%g"</code></em></td></tr><tr><td><a class="indexterm" name="id363175"></a><em class="parameter"><code>delete user from group script = /opt/IDEALX/sbin/smbldap-groupmod -x "%u" "%g"</code></em></td></tr><tr><td><a class="indexterm" name="id363187"></a><em class="parameter"><code>set primary group script = /opt/IDEALX/sbin/smbldap-usermod -g "%g" "%u"</code></em></td></tr><tr><td><a class="indexterm" name="id363200"></a><em class="parameter"><code>add machine script = /opt/IDEALX/sbin/smbldap-useradd -w "%u"</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="sbehap-massive-smbconfb"></a><p class="title"><b>Example 5.7. LDAP Based <code class="filename">smb.conf</code> File, Server: MASSIVE  global Section: Part B</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id363236"></a><em class="parameter"><code>logon script = scripts\logon.bat</code></em></td></tr><tr><td><a class="indexterm" name="id363247"></a><em class="parameter"><code>logon path = \\%L\profiles\%U</code></em></td></tr><tr><td><a class="indexterm" name="id363259"></a><em class="parameter"><code>logon drive = X:</code></em></td></tr><tr><td><a class="indexterm" name="id363270"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id363282"></a><em class="parameter"><code>preferred master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id363293"></a><em class="parameter"><code>wins support = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id363304"></a><em class="parameter"><code>ldap suffix = dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id363316"></a><em class="parameter"><code>ldap machine suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id363328"></a><em class="parameter"><code>ldap user suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id363339"></a><em class="parameter"><code>ldap group suffix = ou=Groups</code></em></td></tr><tr><td><a class="indexterm" name="id363351"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr><tr><td><a class="indexterm" name="id363362"></a><em class="parameter"><code>ldap admin dn = cn=Manager,dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id363374"></a><em class="parameter"><code>idmap backend = ldap:ldap://massive.abmas.biz</code></em></td></tr><tr><td><a class="indexterm" name="id363386"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id363397"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id363409"></a><em class="parameter"><code>map acl inherit = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id363420"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id363432"></a><em class="parameter"><code>printer admin = root, chrisr</code></em></td></tr></table></div></div><br class="example-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="sbeidealx"></a>Install and Configure Idealx smbldap-tools Scripts</h3></div></div></div><p>
+	<a class="indexterm" name="id363457"></a>
 	The Idealx scripts, or equivalent, are necessary to permit Samba-3 to manage accounts
 	on the LDAP server. You have chosen the Idealx scripts because they are the best-known
 	LDAP configuration scripts. The use of these scripts will help avoid the necessity
@@ -1268,7 +1268,7 @@
 	The smbldap-tools are located in <code class="filename">/opt/IDEALX/sbin</code>.
 	The scripts are not needed on BDC machines because all LDAP updates are handled by
 	the PDC alone.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2598316"></a>Installation of smbldap-tools from the Tarball</h4></div></div></div><p>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id363515"></a>Installation of smbldap-tools from the Tarball</h4></div></div></div><p>
 	To perform a manual installation of the smbldap-tools scripts, the following procedure may be used:
 	</p><div class="procedure"><a name="idealxscript"></a><p class="title"><b>Procedure 5.5. Unpacking and Installation Steps for the <code class="constant">smbldap-tools</code> Tarball</b></p><ol type="1"><li><p>
 		Create the <code class="filename">/opt/IDEALX/sbin</code> directory, and set its permissions
@@ -1320,10 +1320,10 @@
 </pre><p>
 		The smbldap-tools scripts are now ready for the configuration step outlined in
 		<a class="link" href="happy.html#smbldap-init" title="Configuration of smbldap-tools">&#8220;Configuration of smbldap-tools&#8221;</a>.
-		</p></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2598569"></a>Installing smbldap-tools from the RPM Package</h4></div></div></div><p>
+		</p></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id363750"></a>Installing smbldap-tools from the RPM Package</h4></div></div></div><p>
 	In the event that you have elected to use the RPM package provided by Idealx, download the
 	source RPM <code class="filename">smbldap-tools-0.9.1-1.src.rpm</code>, then follow this procedure:
-	</p><div class="procedure"><a name="id2598587"></a><p class="title"><b>Procedure 5.6. Installation Steps for <code class="constant">smbldap-tools</code> RPM's</b></p><ol type="1"><li><p>
+	</p><div class="procedure"><a name="id363767"></a><p class="title"><b>Procedure 5.6. Installation Steps for <code class="constant">smbldap-tools</code> RPM's</b></p><ol type="1"><li><p>
 		Install the source RPM that has been downloaded as follows:
 </p><pre class="screen">
 <code class="prompt">root# </code> rpm -i smbldap-tools-0.9.1-1.src.rpm
@@ -1368,7 +1368,7 @@
 	</p><p>
 	The smbldap-tools require that the NetBIOS name (machine name) of the Samba server be included
 	in the <code class="filename">smb.conf</code> file.
-	</p><div class="procedure"><a name="id2598782"></a><p class="title"><b>Procedure 5.7. Configuration Steps for <code class="constant">smbldap-tools</code> to Enable Use</b></p><ol type="1"><li><p>
+	</p><div class="procedure"><a name="id363949"></a><p class="title"><b>Procedure 5.7. Configuration Steps for <code class="constant">smbldap-tools</code> to Enable Use</b></p><ol type="1"><li><p>
 		Change into the directory that contains the <code class="filename">configure.pl</code> script.
 </p><pre class="screen">
 <code class="prompt">root# </code> cd /opt/IDEALX/sbin
@@ -1474,7 +1474,7 @@
 		then verify its contents.
 		</p></li></ol></div><p>
 	The smbldap-tools are now ready for use.
-	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2598983"></a>LDAP Initialization and Creation of User and Group Accounts</h3></div></div></div><p>
+	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id364093"></a>LDAP Initialization and Creation of User and Group Accounts</h3></div></div></div><p>
 	The LDAP database must be populated with well-known Windows domain user accounts and domain group 
 	accounts before Samba can be used. The following procedures step you through the process.
 	</p><p>
@@ -1487,12 +1487,12 @@
 	</p><p>
 	Addition of an account to the LDAP backend can be done in two ways:
 	</p><div class="itemizedlist"><ul type="disc"><li><p>
-		<a class="indexterm" name="id2599017"></a>
-		<a class="indexterm" name="id2599024"></a>
-		<a class="indexterm" name="id2599031"></a>
-		<a class="indexterm" name="id2599038"></a>
-		<a class="indexterm" name="id2599045"></a>
-		<a class="indexterm" name="id2599052"></a>
+		<a class="indexterm" name="id364121"></a>
+		<a class="indexterm" name="id364128"></a>
+		<a class="indexterm" name="id364134"></a>
+		<a class="indexterm" name="id364141"></a>
+		<a class="indexterm" name="id364148"></a>
+		<a class="indexterm" name="id364155"></a>
 		If you always have a user account in the <code class="filename">/etc/passwd</code> on every 
 		server or in a NIS(+) backend, it is not necessary to add POSIX accounts for them in 
 		LDAP. In this case, you can add Windows domain user accounts using the 
@@ -1510,20 +1510,20 @@
 		Idealx smbldap-tools scripts. A copy of these tools, preconfigured for this system,
 		is included on the enclosed CD-ROM under <code class="filename">Chap06/Tools.</code>
 		</p></li></ul></div><p>
-	<a class="indexterm" name="id2599112"></a>
+	<a class="indexterm" name="id364206"></a>
 	If you wish to have more control over how the LDAP database is initialized or 
 	if you don't want to use the Idealx smbldap-tools, you should refer to 
 	<a class="link" href="appendix.html" title="Chapter 15. A Collection of Useful Tidbits">&#8220;A Collection of Useful Tidbits&#8221;</a>, <a class="link" href="appendix.html#altldapcfg" title="Alternative LDAP Database Initialization">&#8220;Alternative LDAP Database Initialization&#8221;</a>.
 	</p><p>
-	<a class="indexterm" name="id2599139"></a>
+	<a class="indexterm" name="id364232"></a>
 	The following steps initialize the LDAP database, and then you can add user and group
 	accounts that Samba can use. You use the <code class="literal">smbldap-populate</code> to
 	seed the LDAP database. You then manually add the accounts shown in <a class="link" href="happy.html#sbehap-bigacct" title="Table 5.3. Abmas Network Users and Groups">&#8220;Abmas Network Users and Groups&#8221;</a>. 
 	The list of users does not cover all 500 network users; it provides examples only.
 	</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-	<a class="indexterm" name="id2599168"></a>
-	<a class="indexterm" name="id2599177"></a>
-	<a class="indexterm" name="id2599186"></a>
+	<a class="indexterm" name="id364258"></a>
+	<a class="indexterm" name="id364267"></a>
+	<a class="indexterm" name="id364277"></a>
 	In the following examples, as the LDAP database is initialized, we do create a container
 	for Computer (machine) accounts. In the Samba-3 <code class="filename">smb.conf</code> files, specific use is made
 	of the People container, not the Computers container, for domain member accounts. This is not a
@@ -1600,7 +1600,7 @@
 Starting ldap-server                                 done
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2599607"></a>
+		<a class="indexterm" name="id364655"></a>
 		So that we can use a global IDMAP repository, the LDAP directory must have a container object for IDMAP data. 
 		There are several ways you can check that your LDAP database is able to receive IDMAP information. One of 
 		the simplest is to execute:
@@ -1609,7 +1609,7 @@
 dn: ou=Idmap,dc=abmas,dc=biz
 ou: idmap
 </pre><p>
-		<a class="indexterm" name="id2599630"></a>
+		<a class="indexterm" name="id364676"></a>
 	        If the execution of this command does not return IDMAP entries, you need to create an LDIF
 		template file (see <a class="link" href="happy.html#sbehap-ldifadd" title="Example 5.12. LDIF IDMAP Add-On Load File File: /etc/openldap/idmap.LDIF">&#8220;LDIF IDMAP Add-On Load File  File: /etc/openldap/idmap.LDIF&#8221;</a>). You can add the required entries using 
 		the following command:
@@ -1619,7 +1619,7 @@
 </pre><p>
 		Samba automatically populates this LDAP directory container when it needs to.
 		</p></li><li><p>
-		<a class="indexterm" name="id2599670"></a>
+		<a class="indexterm" name="id364711"></a>
 		It looks like all has gone well, as expected. Let's confirm that this is the case
 		by running a few tests. First we check the contents of the database directly
 		by running <code class="literal">slapcat</code> as follows (the output has been cut down):
@@ -1657,7 +1657,7 @@
 </pre><p>
 		This looks good so far.
 		</p></li><li><p>
-		<a class="indexterm" name="id2599721"></a>
+		<a class="indexterm" name="id364752"></a>
 		The next step is to prove that the LDAP server is running and responds to a
 		search request. Execute the following as shown (output has been cut to save space):
 </p><pre class="screen">
@@ -1702,7 +1702,7 @@
 </pre><p>
 		Good. It is all working just fine.
 		</p></li><li><p>
-		<a class="indexterm" name="id2599778"></a>
+		<a class="indexterm" name="id364793"></a>
 		You must now make certain that the NSS resolver can interrogate LDAP also.
 		Execute the following commands:
 </p><pre class="screen">
@@ -1715,16 +1715,16 @@
 Domain Guests:x:514:
 Domain Computers:x:553:
 </pre><p>
-		<a class="indexterm" name="id2599808"></a>
+		<a class="indexterm" name="id364820"></a>
 		This demonstrates that the <code class="literal">nss_ldap</code> library is functioning
 		as it should. If these two steps fail to produce this information, refer to
 		<a class="link" href="happy.html#sbeavoid" title="Avoiding Failures: Solving Problems Before They Happen">&#8220;Avoiding Failures: Solving Problems Before They Happen&#8221;</a> for diagnostic procedures that can be followed to
 		isolate the cause of the problem. Proceed to the next step only when the previous steps
 		have been successfully completed.
 		</p></li><li><p>
-		<a class="indexterm" name="id2599838"></a>
-		<a class="indexterm" name="id2599845"></a>
-		<a class="indexterm" name="id2599852"></a>
+		<a class="indexterm" name="id364848"></a>
+		<a class="indexterm" name="id364854"></a>
+		<a class="indexterm" name="id364861"></a>
 		Our database is now ready for the addition of network users. For each user for
 		whom an account must be created, execute the following:
 </p><pre class="screen">
@@ -1740,7 +1740,7 @@
 </pre><p>
 		where <code class="constant">username</code> is the login ID for each user.
 		</p></li><li><p>
-		<a class="indexterm" name="id2599913"></a>
+		<a class="indexterm" name="id364919"></a>
 		Now verify that the UNIX (POSIX) accounts can be resolved via NSS by executing the
 		following:
 </p><pre class="screen">
@@ -1768,7 +1768,7 @@
 		This confirms that the UNIX (POSIX) user account information can be resolved from LDAP
 		by system tools that make a getentpw() system call.
 		</p></li><li><p>
-		<a class="indexterm" name="id2599979"></a>
+		<a class="indexterm" name="id364976"></a>
 		The root account must have UID=0; if not, this means that operations conducted from
 		a Windows client using tools such as the Domain User Manager fails under UNIX because
 		the management of user and group accounts requires that the UID=0. Additionally, it is
@@ -1802,8 +1802,8 @@
 </pre><p>
 		This is precisely what we want to see.
 		</p></li><li><p>
-		<a class="indexterm" name="id2600078"></a>
-		<a class="indexterm" name="id2600085"></a>
+		<a class="indexterm" name="id365064"></a>
+		<a class="indexterm" name="id365070"></a>
 		The final validation step involves making certain that Samba-3 can obtain the user
 		accounts from the LDAP ldapsam passwd backend. Execute the following command as shown:
 </p><pre class="screen">
@@ -1834,7 +1834,7 @@
 </pre><p>
 		This looks good. Of course, you fully expected that it would all work, didn't you?
 		</p></li><li><p>
-		<a class="indexterm" name="id2600130"></a>
+		<a class="indexterm" name="id365105"></a>
 		Now you add the group accounts that are used on the Abmas network. Execute
 		the following exactly as shown:
 </p><pre class="screen">
@@ -1845,7 +1845,7 @@
 		The addition of groups does not involve keyboard interaction, so the lack of console
 		output is of no concern.
 		</p></li><li><p>
-		<a class="indexterm" name="id2600172"></a>
+		<a class="indexterm" name="id365145"></a>
 		You really do want to confirm that UNIX group resolution from LDAP is functioning 
 		as it should. Let's do this as shown here:
 </p><pre class="screen">
@@ -1862,7 +1862,7 @@
 		The well-known special accounts (Domain Admins, Domain Users, Domain Guests), as well
 		as our own site-specific group accounts, are correctly listed. This is looking good.
 		</p></li><li><p>
-		<a class="indexterm" name="id2600205"></a>
+		<a class="indexterm" name="id365173"></a>
 		The final step we need to validate is that Samba can see all the Windows domain groups
 		and that they are correctly mapped to the respective UNIX group account. To do this,
 		just execute the following command:
@@ -1917,7 +1917,7 @@
 <code class="prompt">root# </code> rcwinbind restart
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2600420"></a>
+		<a class="indexterm" name="id365370"></a>
 		You may now check Samba-3 operation as follows:
 </p><pre class="screen">
 <code class="prompt">root# </code> smbclient -L massive -U%
@@ -1963,12 +1963,12 @@
 		</p></li></ol></div><p>
 	The server <code class="constant">MASSIVE</code> is now configured, and it is time to move onto the next task.
 	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="sbehap-ptrcfg"></a>Printer Configuration</h3></div></div></div><p>
-	<a class="indexterm" name="id2600531"></a>
+	<a class="indexterm" name="id365454"></a>
 	The configuration for Samba-3 to enable CUPS raw-print-through printing has already been
 	taken care of in the <code class="filename">smb.conf</code> file. The only preparation needed for <code class="constant">smart</code>
 	printing to be possible involves creation of the directories in which Samba-3 stores
 	Windows printing driver files.
-	</p><div class="procedure"><a name="id2600553"></a><p class="title"><b>Procedure 5.9. Printer Configuration Steps</b></p><ol type="1"><li><p>
+	</p><div class="procedure"><a name="id365474"></a><p class="title"><b>Procedure 5.9. Printer Configuration Steps</b></p><ol type="1"><li><p>
                 Configure all network-attached printers to have a fixed IP address.
                 </p></li><li><p>
                 Create an entry in the DNS database on the server <code class="constant">MASSIVE</code>
@@ -1980,18 +1980,18 @@
                 Follow the instructions in the printer manufacturers' manuals to permit printing
                 to port 9100.  Use any other port the manufacturer specifies for direct mode,
                 raw printing.  This allows the CUPS spooler to print using raw mode protocols.
-                <a class="indexterm" name="id2600614"></a>
-                <a class="indexterm" name="id2600621"></a>
+                <a class="indexterm" name="id365529"></a>
+                <a class="indexterm" name="id365536"></a>
                 </p></li><li><p>
-		<a class="indexterm" name="id2600634"></a>
-                <a class="indexterm" name="id2600641"></a>
+		<a class="indexterm" name="id365549"></a>
+                <a class="indexterm" name="id365556"></a>
                 Only on the server to which the printer is attached, configure the CUPS Print
                 Queues as follows:
 </p><pre class="screen">
 <code class="prompt">root# </code> lpadmin -p <em class="parameter"><code>printque</code></em>
 	 -v socket://<em class="parameter"><code>printer-name</code></em>.abmas.biz:9100 -E
 </pre><p>
-                <a class="indexterm" name="id2600677"></a>
+                <a class="indexterm" name="id365590"></a>
                 This step creates the necessary print queue to use no assigned print filter. This
                 is ideal for raw printing, that is, printing without use of filters.
                 The name <em class="parameter"><code>printque</code></em> is the name you have assigned for
@@ -2011,15 +2011,15 @@
 <code class="prompt">root# </code> /usr/bin/accept <em class="parameter"><code>printque</code></em>
 </pre><p>
                 </p></li><li><p>
-                <a class="indexterm" name="id2600758"></a>
-                <a class="indexterm" name="id2600765"></a>
-                <a class="indexterm" name="id2600772"></a>
+                <a class="indexterm" name="id365664"></a>
+                <a class="indexterm" name="id365670"></a>
+                <a class="indexterm" name="id365677"></a>
                 Edit the file <code class="filename">/etc/cups/mime.convs</code> to uncomment the line:
 </p><pre class="screen">
 application/octet-stream     application/vnd.cups-raw      0     -
 </pre><p>
 		</p></li><li><p>
-		 <a class="indexterm" name="id2600800"></a>
+		 <a class="indexterm" name="id365703"></a>
 		 Edit the file <code class="filename">/etc/cups/mime.types</code> to uncomment the line:
 </p><pre class="screen">
 application/octet-stream
@@ -2038,7 +2038,7 @@
 <code class="prompt">root# </code> chown -R root:root /var/lib/samba/drivers
 <code class="prompt">root# </code> chmod -R ug=rwx,o=rx /var/lib/samba/drivers
 </pre><p>
-		</p></li></ol></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="sbehap-bldg1"></a>Samba-3 BDC Configuration</h2></div></div></div><div class="procedure"><a name="id2600883"></a><p class="title"><b>Procedure 5.10. Configuration of BDC Called: <code class="constant">BLDG1</code></b></p><ol type="1"><li><p>
+		</p></li></ol></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="sbehap-bldg1"></a>Samba-3 BDC Configuration</h2></div></div></div><div class="procedure"><a name="id365779"></a><p class="title"><b>Procedure 5.10. Configuration of BDC Called: <code class="constant">BLDG1</code></b></p><ol type="1"><li><p>
 		Install the files in <a class="link" href="happy.html#sbehap-bldg1-smbconf" title="Example 5.8. LDAP Based smb.conf File, Server: BLDG1">&#8220;LDAP Based smb.conf File, Server: BLDG1&#8221;</a>,
 		<a class="link" href="happy.html#sbehap-shareconfa" title="Example 5.10. LDAP Based smb.conf File, Shares Section Part A">&#8220;LDAP Based smb.conf File, Shares Section  Part A&#8221;</a>, and <a class="link" href="happy.html#sbehap-shareconfb" title="Example 5.11. LDAP Based smb.conf File, Shares Section Part B">&#8220;LDAP Based smb.conf File, Shares Section  Part B&#8221;</a>
 		into the <code class="filename">/etc/samba/</code> directory. The three files
@@ -2081,7 +2081,7 @@
 </pre><p>
 		This is the correct output. If the accounts that have UIDs above 512 are not shown, there is a problem.
 		</p></li><li><p>
-		<a class="indexterm" name="id2601043"></a>
+		<a class="indexterm" name="id365926"></a>
 		The next step in the verification process involves testing the operation of UNIX group
 		resolution via the NSS LDAP resolver. Execute these commands:
 </p><pre class="screen">
@@ -2111,7 +2111,7 @@
 		This is also the correct and desired output, because it demonstrates that the LDAP client
 		is able to communicate correctly with the LDAP server (<code class="constant">MASSIVE</code>).
 		</p></li><li><p>
-		<a class="indexterm" name="id2601084"></a>
+		<a class="indexterm" name="id365960"></a>
 		You must now set the LDAP administrative password into the Samba-3 <code class="filename">secrets.tdb</code>
 		file by executing this command:
 </p><pre class="screen">
@@ -2143,7 +2143,7 @@
 </pre><p>
 		This indicates that the domain security account for the BDC has been correctly created.
 		</p></li><li><p>
-		<a class="indexterm" name="id2601185"></a>
+		<a class="indexterm" name="id366050"></a>
 		Verify that user and group account resolution works via Samba-3 tools as follows:
 </p><pre class="screen">
 <code class="prompt">root# </code> pdbedit -L
@@ -2231,19 +2231,19 @@
 		should be added together to form the <code class="filename">smb.conf</code> file.
 		</p></li><li><p>
 		Follow carefully the steps shown in <a class="link" href="happy.html#sbehap-bldg1" title="Samba-3 BDC Configuration">&#8220;Samba-3 BDC Configuration&#8221;</a>, starting at step 2.
-		</p></li></ol></div><div class="example"><a name="sbehap-bldg1-smbconf"></a><p class="title"><b>Example 5.8. LDAP Based <code class="filename">smb.conf</code> File, Server: BLDG1</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2601531"></a><em class="parameter"><code>unix charset = LOCALE</code></em></td></tr><tr><td><a class="indexterm" name="id2601543"></a><em class="parameter"><code>workgroup = MEGANET2</code></em></td></tr><tr><td><a class="indexterm" name="id2601555"></a><em class="parameter"><code>netbios name = BLDG1</code></em></td></tr><tr><td><a class="indexterm" name="id2601567"></a><em class="parameter"><code>passdb backend = ldapsam:ldap://massive.abmas.biz</code></em></td></tr><tr><td><a class="indexterm" name="id2601579"></a><em class="parameter"><code>enable privileges = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2601591"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id2601603"></a><em class="parameter"><code>log level = 1</code></em></td></tr><tr><td><a class="indexterm" name="id2601614"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id2601626"></a><em class="parameter"><code>log file = /var/log/samba/%m</code></em></td></tr><tr><td><a class="indexterm" name="id2601638"></a><em class="parameter"><code>max log size = 50</code></em></td></tr><tr><td><a class="indexterm" name="id2601649"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id2601661"></a><em class="parameter"><code>name resolve order = wins bcast hosts</code></em></td></tr><tr><td><a class="indexterm" name="id2601673"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id2601685"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id2601697"></a><em class="parameter"><code>logon script = scripts\logon.bat</code></em></td></tr><tr><td><a class="indexterm" name="id2601709"></a><em class="parameter"><code>logon path = \\%L\profiles\%U</code></em></td></tr><tr><td><a class="indexterm" name="id2601721"></a><em class="parameter"><code>logon drive = X:</code></em></td></tr><tr><td><a class="indexterm" name="id2601733"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2601744"></a><em class="parameter"><code>domain master = No</code></em></td></tr><tr><td><a class="indexterm" name="id2601756"></a><em class="parameter"><code>wins server = 172.16.0.1</code></em></td></tr><tr><td><a class="indexterm" name="id2601768"></a><em class="parameter"><code>ldap suffix = dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id2601780"></a><em class="parameter"><code>ldap machine suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2601792"></a><em class="parameter"><code>ldap user suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2601804"></a><em class="parameter"><code>ldap group suffix = ou=Groups</code></em></td></tr><tr><td><a class="indexterm" name="id2601816"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr><tr><td><a class="indexterm" name="id2601828"></a><em class="parameter"><code>ldap admin dn = cn=Manager,dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id2601840"></a><em class="parameter"><code>idmap backend = ldap:ldap://massive.abmas.biz</code></em></td></tr><tr><td><a class="indexterm" name="id2601852"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2601864"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2601876"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id2601887"></a><em class="parameter"><code>printer admin = root, chrisr</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="sbehap-bldg2-smbconf"></a><p class="title"><b>Example 5.9. LDAP Based <code class="filename">smb.conf</code> File, Server: BLDG2</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2601934"></a><em class="parameter"><code>unix charset = LOCALE</code></em></td></tr><tr><td><a class="indexterm" name="id2601946"></a><em class="parameter"><code>workgroup = MEGANET2</code></em></td></tr><tr><td><a class="indexterm" name="id2601957"></a><em class="parameter"><code>netbios name = BLDG2</code></em></td></tr><tr><td><a class="indexterm" name="id2601969"></a><em class="parameter"><code>passdb backend = ldapsam:ldap://massive.abmas.biz</code></em></td></tr><tr><td><a class="indexterm" name="id2601981"></a><em class="parameter"><code>enable privileges = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2601993"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id2602005"></a><em class="parameter"><code>log level = 1</code></em></td></tr><tr><td><a class="indexterm" name="id2602017"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id2602028"></a><em class="parameter"><code>log file = /var/log/samba/%m</code></em></td></tr><tr><td><a class="indexterm" name="id2602040"></a><em class="parameter"><code>max log size = 50</code></em></td></tr><tr><td><a class="indexterm" name="id2602052"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id2602064"></a><em class="parameter"><code>name resolve order = wins bcast hosts</code></em></td></tr><tr><td><a class="indexterm" name="id2602076"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id2602088"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id2602100"></a><em class="parameter"><code>logon script = scripts\logon.bat</code></em></td></tr><tr><td><a class="indexterm" name="id2602112"></a><em class="parameter"><code>logon path = \\%L\profiles\%U</code></em></td></tr><tr><td><a class="indexterm" name="id2602124"></a><em class="parameter"><code>logon drive = X:</code></em></td></tr><tr><td><a class="indexterm" name="id2602135"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2602147"></a><em class="parameter"><code>domain master = No</code></em></td></tr><tr><td><a class="indexterm" name="id2602159"></a><em class="parameter"><code>wins server = 172.16.0.1</code></em></td></tr><tr><td><a class="indexterm" name="id2602170"></a><em class="parameter"><code>ldap suffix = dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id2602182"></a><em class="parameter"><code>ldap machine suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2602194"></a><em class="parameter"><code>ldap user suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2602206"></a><em class="parameter"><code>ldap group suffix = ou=Groups</code></em></td></tr><tr><td><a class="indexterm" name="id2602218"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr><tr><td><a class="indexterm" name="id2602230"></a><em class="parameter"><code>ldap admin dn = cn=Manager,dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id2602242"></a><em class="parameter"><code>idmap backend = ldap:ldap://massive.abmas.biz</code></em></td></tr><tr><td><a class="indexterm" name="id2602255"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2602266"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2602278"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id2602290"></a><em class="parameter"><code>printer admin = root, chrisr</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="sbehap-shareconfa"></a><p class="title"><b>Example 5.10. LDAP Based <code class="filename">smb.conf</code> File, Shares Section  Part A</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[accounts]</code></em></td></tr><tr><td><a class="indexterm" name="id2602336"></a><em class="parameter"><code>comment = Accounting Files</code></em></td></tr><tr><td><a class="indexterm" name="id2602348"></a><em class="parameter"><code>path = /data/accounts</code></em></td></tr><tr><td><a class="indexterm" name="id2602360"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[service]</code></em></td></tr><tr><td><a class="indexterm" name="id2602380"></a><em class="parameter"><code>comment = Financial Services Files</code></em></td></tr><tr><td><a class="indexterm" name="id2602392"></a><em class="parameter"><code>path = /data/service</code></em></td></tr><tr><td><a class="indexterm" name="id2602403"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[pidata]</code></em></td></tr><tr><td><a class="indexterm" name="id2602424"></a><em class="parameter"><code>comment = Property Insurance Files</code></em></td></tr><tr><td><a class="indexterm" name="id2602436"></a><em class="parameter"><code>path = /data/pidata</code></em></td></tr><tr><td><a class="indexterm" name="id2602447"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id2602468"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id2602480"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id2602491"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2602503"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2602523"></a><em class="parameter"><code>comment = SMB Print Spool</code></em></td></tr><tr><td><a class="indexterm" name="id2602535"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2602547"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2602558"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2602570"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="sbehap-shareconfb"></a><p class="title"><b>Example 5.11. LDAP Based <code class="filename">smb.conf</code> File, Shares Section  Part B</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[apps]</code></em></td></tr><tr><td><a class="indexterm" name="id2602616"></a><em class="parameter"><code>comment = Application Files</code></em></td></tr><tr><td><a class="indexterm" name="id2602627"></a><em class="parameter"><code>path = /apps</code></em></td></tr><tr><td><a class="indexterm" name="id2602639"></a><em class="parameter"><code>admin users = bjordan</code></em></td></tr><tr><td><a class="indexterm" name="id2602651"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id2602671"></a><em class="parameter"><code>comment = Network Logon Service</code></em></td></tr><tr><td><a class="indexterm" name="id2602683"></a><em class="parameter"><code>path = /var/lib/samba/netlogon</code></em></td></tr><tr><td><a class="indexterm" name="id2602695"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2602707"></a><em class="parameter"><code>locking = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[profiles]</code></em></td></tr><tr><td><a class="indexterm" name="id2602727"></a><em class="parameter"><code>comment = Profile Share</code></em></td></tr><tr><td><a class="indexterm" name="id2602739"></a><em class="parameter"><code>path = /var/lib/samba/profiles</code></em></td></tr><tr><td><a class="indexterm" name="id2602751"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2602762"></a><em class="parameter"><code>profile acls = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[profdata]</code></em></td></tr><tr><td><a class="indexterm" name="id2602783"></a><em class="parameter"><code>comment = Profile Data Share</code></em></td></tr><tr><td><a class="indexterm" name="id2602795"></a><em class="parameter"><code>path = /var/lib/samba/profdata</code></em></td></tr><tr><td><a class="indexterm" name="id2602807"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2602818"></a><em class="parameter"><code>profile acls = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[print$]</code></em></td></tr><tr><td><a class="indexterm" name="id2602839"></a><em class="parameter"><code>comment = Printer Drivers</code></em></td></tr><tr><td><a class="indexterm" name="id2602851"></a><em class="parameter"><code>path = /var/lib/samba/drivers</code></em></td></tr><tr><td><a class="indexterm" name="id2602863"></a><em class="parameter"><code>browseable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2602874"></a><em class="parameter"><code>guest ok = no</code></em></td></tr><tr><td><a class="indexterm" name="id2602886"></a><em class="parameter"><code>read only = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2602897"></a><em class="parameter"><code>write list = root, chrisr</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="sbehap-ldifadd"></a><p class="title"><b>Example 5.12. LDIF IDMAP Add-On Load File  File: /etc/openldap/idmap.LDIF</b></p><div class="example-contents"><pre class="screen">
+		</p></li></ol></div><div class="example"><a name="sbehap-bldg1-smbconf"></a><p class="title"><b>Example 5.8. LDAP Based <code class="filename">smb.conf</code> File, Server: BLDG1</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id366355"></a><em class="parameter"><code>unix charset = LOCALE</code></em></td></tr><tr><td><a class="indexterm" name="id366366"></a><em class="parameter"><code>workgroup = MEGANET2</code></em></td></tr><tr><td><a class="indexterm" name="id366378"></a><em class="parameter"><code>netbios name = BLDG1</code></em></td></tr><tr><td><a class="indexterm" name="id366389"></a><em class="parameter"><code>passdb backend = ldapsam:ldap://massive.abmas.biz</code></em></td></tr><tr><td><a class="indexterm" name="id366401"></a><em class="parameter"><code>enable privileges = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id366412"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id366424"></a><em class="parameter"><code>log level = 1</code></em></td></tr><tr><td><a class="indexterm" name="id366435"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id366447"></a><em class="parameter"><code>log file = /var/log/samba/%m</code></em></td></tr><tr><td><a class="indexterm" name="id366458"></a><em class="parameter"><code>max log size = 50</code></em></td></tr><tr><td><a class="indexterm" name="id366470"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id366481"></a><em class="parameter"><code>name resolve order = wins bcast hosts</code></em></td></tr><tr><td><a class="indexterm" name="id366493"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id366504"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id366516"></a><em class="parameter"><code>logon script = scripts\logon.bat</code></em></td></tr><tr><td><a class="indexterm" name="id366528"></a><em class="parameter"><code>logon path = \\%L\profiles\%U</code></em></td></tr><tr><td><a class="indexterm" name="id366539"></a><em class="parameter"><code>logon drive = X:</code></em></td></tr><tr><td><a class="indexterm" name="id366551"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id366562"></a><em class="parameter"><code>domain master = No</code></em></td></tr><tr><td><a class="indexterm" name="id366574"></a><em class="parameter"><code>wins server = 172.16.0.1</code></em></td></tr><tr><td><a class="indexterm" name="id366585"></a><em class="parameter"><code>ldap suffix = dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id366597"></a><em class="parameter"><code>ldap machine suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id366608"></a><em class="parameter"><code>ldap user suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id366620"></a><em class="parameter"><code>ldap group suffix = ou=Groups</code></em></td></tr><tr><td><a class="indexterm" name="id366632"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr><tr><td><a class="indexterm" name="id366643"></a><em class="parameter"><code>ldap admin dn = cn=Manager,dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id366655"></a><em class="parameter"><code>idmap backend = ldap:ldap://massive.abmas.biz</code></em></td></tr><tr><td><a class="indexterm" name="id366667"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id366678"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id366690"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id366701"></a><em class="parameter"><code>printer admin = root, chrisr</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="sbehap-bldg2-smbconf"></a><p class="title"><b>Example 5.9. LDAP Based <code class="filename">smb.conf</code> File, Server: BLDG2</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id366746"></a><em class="parameter"><code>unix charset = LOCALE</code></em></td></tr><tr><td><a class="indexterm" name="id366758"></a><em class="parameter"><code>workgroup = MEGANET2</code></em></td></tr><tr><td><a class="indexterm" name="id366769"></a><em class="parameter"><code>netbios name = BLDG2</code></em></td></tr><tr><td><a class="indexterm" name="id366781"></a><em class="parameter"><code>passdb backend = ldapsam:ldap://massive.abmas.biz</code></em></td></tr><tr><td><a class="indexterm" name="id366792"></a><em class="parameter"><code>enable privileges = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id366804"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id366816"></a><em class="parameter"><code>log level = 1</code></em></td></tr><tr><td><a class="indexterm" name="id366827"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id366838"></a><em class="parameter"><code>log file = /var/log/samba/%m</code></em></td></tr><tr><td><a class="indexterm" name="id366850"></a><em class="parameter"><code>max log size = 50</code></em></td></tr><tr><td><a class="indexterm" name="id366862"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id366873"></a><em class="parameter"><code>name resolve order = wins bcast hosts</code></em></td></tr><tr><td><a class="indexterm" name="id366885"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id366896"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id366908"></a><em class="parameter"><code>logon script = scripts\logon.bat</code></em></td></tr><tr><td><a class="indexterm" name="id366919"></a><em class="parameter"><code>logon path = \\%L\profiles\%U</code></em></td></tr><tr><td><a class="indexterm" name="id366931"></a><em class="parameter"><code>logon drive = X:</code></em></td></tr><tr><td><a class="indexterm" name="id366942"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id366954"></a><em class="parameter"><code>domain master = No</code></em></td></tr><tr><td><a class="indexterm" name="id366965"></a><em class="parameter"><code>wins server = 172.16.0.1</code></em></td></tr><tr><td><a class="indexterm" name="id366977"></a><em class="parameter"><code>ldap suffix = dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id366988"></a><em class="parameter"><code>ldap machine suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id367000"></a><em class="parameter"><code>ldap user suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id367012"></a><em class="parameter"><code>ldap group suffix = ou=Groups</code></em></td></tr><tr><td><a class="indexterm" name="id367023"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr><tr><td><a class="indexterm" name="id367035"></a><em class="parameter"><code>ldap admin dn = cn=Manager,dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id367047"></a><em class="parameter"><code>idmap backend = ldap:ldap://massive.abmas.biz</code></em></td></tr><tr><td><a class="indexterm" name="id367058"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id367070"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id367081"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id367093"></a><em class="parameter"><code>printer admin = root, chrisr</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="sbehap-shareconfa"></a><p class="title"><b>Example 5.10. LDAP Based <code class="filename">smb.conf</code> File, Shares Section  Part A</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[accounts]</code></em></td></tr><tr><td><a class="indexterm" name="id367137"></a><em class="parameter"><code>comment = Accounting Files</code></em></td></tr><tr><td><a class="indexterm" name="id367149"></a><em class="parameter"><code>path = /data/accounts</code></em></td></tr><tr><td><a class="indexterm" name="id367160"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[service]</code></em></td></tr><tr><td><a class="indexterm" name="id367181"></a><em class="parameter"><code>comment = Financial Services Files</code></em></td></tr><tr><td><a class="indexterm" name="id367192"></a><em class="parameter"><code>path = /data/service</code></em></td></tr><tr><td><a class="indexterm" name="id367204"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[pidata]</code></em></td></tr><tr><td><a class="indexterm" name="id367224"></a><em class="parameter"><code>comment = Property Insurance Files</code></em></td></tr><tr><td><a class="indexterm" name="id367236"></a><em class="parameter"><code>path = /data/pidata</code></em></td></tr><tr><td><a class="indexterm" name="id367247"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id367268"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id367279"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id367291"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id367302"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id367323"></a><em class="parameter"><code>comment = SMB Print Spool</code></em></td></tr><tr><td><a class="indexterm" name="id367334"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id367346"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id367357"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id367369"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="sbehap-shareconfb"></a><p class="title"><b>Example 5.11. LDAP Based <code class="filename">smb.conf</code> File, Shares Section  Part B</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[apps]</code></em></td></tr><tr><td><a class="indexterm" name="id367413"></a><em class="parameter"><code>comment = Application Files</code></em></td></tr><tr><td><a class="indexterm" name="id367425"></a><em class="parameter"><code>path = /apps</code></em></td></tr><tr><td><a class="indexterm" name="id367436"></a><em class="parameter"><code>admin users = bjordan</code></em></td></tr><tr><td><a class="indexterm" name="id367448"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id367468"></a><em class="parameter"><code>comment = Network Logon Service</code></em></td></tr><tr><td><a class="indexterm" name="id367480"></a><em class="parameter"><code>path = /var/lib/samba/netlogon</code></em></td></tr><tr><td><a class="indexterm" name="id367491"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id367503"></a><em class="parameter"><code>locking = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[profiles]</code></em></td></tr><tr><td><a class="indexterm" name="id367523"></a><em class="parameter"><code>comment = Profile Share</code></em></td></tr><tr><td><a class="indexterm" name="id367534"></a><em class="parameter"><code>path = /var/lib/samba/profiles</code></em></td></tr><tr><td><a class="indexterm" name="id367546"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id367558"></a><em class="parameter"><code>profile acls = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[profdata]</code></em></td></tr><tr><td><a class="indexterm" name="id367578"></a><em class="parameter"><code>comment = Profile Data Share</code></em></td></tr><tr><td><a class="indexterm" name="id367590"></a><em class="parameter"><code>path = /var/lib/samba/profdata</code></em></td></tr><tr><td><a class="indexterm" name="id367601"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id367613"></a><em class="parameter"><code>profile acls = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[print$]</code></em></td></tr><tr><td><a class="indexterm" name="id367633"></a><em class="parameter"><code>comment = Printer Drivers</code></em></td></tr><tr><td><a class="indexterm" name="id367645"></a><em class="parameter"><code>path = /var/lib/samba/drivers</code></em></td></tr><tr><td><a class="indexterm" name="id367656"></a><em class="parameter"><code>browseable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id367668"></a><em class="parameter"><code>guest ok = no</code></em></td></tr><tr><td><a class="indexterm" name="id367679"></a><em class="parameter"><code>read only = yes</code></em></td></tr><tr><td><a class="indexterm" name="id367691"></a><em class="parameter"><code>write list = root, chrisr</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="sbehap-ldifadd"></a><p class="title"><b>Example 5.12. LDIF IDMAP Add-On Load File  File: /etc/openldap/idmap.LDIF</b></p><div class="example-contents"><pre class="screen">
 dn: ou=Idmap,dc=abmas,dc=biz
 objectClass: organizationalUnit
 ou: idmap
 structuralObjectClass: organizationalUnit
-</pre></div></div><br class="example-break"></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2602933"></a>Miscellaneous Server Preparation Tasks</h2></div></div></div><p>
+</pre></div></div><br class="example-break"></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id367724"></a>Miscellaneous Server Preparation Tasks</h2></div></div></div><p>
 	My father would say, &#8220;<span class="quote">Dinner is not over until the dishes have been done.</span>&#8221;
 	The makings of a great network environment take a lot of effort and attention to detail.
 	So far, you have completed most of the complex (and to many administrators, the interesting
 	part of server configuration) steps, but remember to tie it all together. Here are
 	a few more steps that must be completed so that your network runs like a well-rehearsed
 	orchestra.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2602953"></a>Configuring Directory Share Point Roots</h3></div></div></div><p>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id367740"></a>Configuring Directory Share Point Roots</h3></div></div></div><p>
 	In your <code class="filename">smb.conf</code> file, you have specified Windows shares. Each has a <em class="parameter"><code>path</code></em>
 	parameter. Even though it is obvious to all, one of the common Samba networking problems is
 	caused by forgetting to verify that every such share root directory actually exists and that it
@@ -2261,7 +2261,7 @@
 <code class="prompt">root# </code> chmod -R ug+rwxs,o-rwx /data
 <code class="prompt">root# </code> chmod -R ug+rwx,o+rx-w /apps
 </pre><p>
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2603048"></a>Configuring Profile Directories</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id367829"></a>Configuring Profile Directories</h3></div></div></div><p>
 	You made a conscious decision to do everything it would take to improve network client
 	performance. One of your decisions was to implement folder redirection. This means that Windows
 	user desktop profiles are now made up of two components: a dynamically loaded part and a set of file
@@ -2286,8 +2286,8 @@
 <code class="prompt">root# </code> chmod -R 750 <span class="emphasis"><em>username</em></span>
 </pre><p>
 	</p><p>
-	<a class="indexterm" name="id2603164"></a>
-	<a class="indexterm" name="id2603171"></a>
+	<a class="indexterm" name="id367938"></a>
+	<a class="indexterm" name="id367945"></a>
 	You have three options insofar as the dynamically loaded portion of the roaming profile
 	is concerned: 
 	</p><div class="itemizedlist"><ul type="disc"><li><p>You may permit the user to obtain a default profile.</p></li><li><p>You can create a mandatory profile.</p></li><li><p>You can create a group profile (which is almost always a mandatory profile).</p></li></ul></div><p>
@@ -2295,8 +2295,8 @@
 	profile is effected by renaming the <code class="filename">NTUSER.DAT</code> to <code class="filename">NTUSER.MAN</code>,
 	that is, just by changing the filename extension.
 	</p><p>
-	<a class="indexterm" name="id2603221"></a>
-	<a class="indexterm" name="id2603228"></a>
+	<a class="indexterm" name="id367990"></a>
+	<a class="indexterm" name="id367997"></a>
 	The location of the profile that a user can obtain is set in the user's account in the LDAP passdb backend.
 	You can manage this using the Idealx smbldap-tools or using the 
 	<a class="ulink" href="ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTOOLS.EXE" target="_top">Windows NT4 Domain User Manager</a>.
@@ -2309,8 +2309,8 @@
 	    /var/lib/samba/profiles/<span class="emphasis"><em>username</em></span>
 <code class="prompt">root# </code> chmod 700  /var/lib/samba/profiles/<span class="emphasis"><em>username</em></span>
 </pre><p>
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2603292"></a>Preparation of Logon Scripts</h3></div></div></div><p>
-	<a class="indexterm" name="id2603301"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id368057"></a>Preparation of Logon Scripts</h3></div></div></div><p>
+	<a class="indexterm" name="id368065"></a>
 	The use of a logon script with Windows XP Professional is an option that every site should consider.
 	Unless you have locked down the desktop so the user cannot change anything, there is risk that
 	a vital network drive setting may be broken or that printer connections may be lost. Logon scripts
@@ -2335,7 +2335,7 @@
 	You should research the options for logon script implementation by referring to <span class="emphasis"><em>TOSHARG2</em></span>, Chapter 24,
 	Section 24.4. A quick Web search will bring up a host of options. One of the most popular logon
 	facilities in use today is called <a class="ulink" href="http://www.kixtart.org" target="_top">KiXtart</a>.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2603404"></a>Assigning User Rights and Privileges</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id368155"></a>Assigning User Rights and Privileges</h3></div></div></div><p>
 	The ability to perform tasks such as joining Windows clients to the domain can be assigned to
 	normal user accounts. By default, only the domain administrator account (<code class="constant">root</code> on UNIX
 	systems because it has UID=0) can add accounts. New to Samba 3.0.11 is the ability to grant
@@ -2347,7 +2347,7 @@
 	Samba limits privileges on a per-server basis. This is a deliberate limitation so that users who
 	are granted rights can be restricted to particular machines. It is left to the network administrator
 	to determine which rights should be provided and to whom.
-	</p><div class="procedure"><a name="id2603439"></a><p class="title"><b>Procedure 5.12. Steps for Assignment of User Rights and Privileges</b></p><ol type="1"><li><p>
+	</p><div class="procedure"><a name="id368184"></a><p class="title"><b>Procedure 5.12. Steps for Assignment of User Rights and Privileges</b></p><ol type="1"><li><p>
 		Log onto the PDC as the <code class="constant">root</code> account.
 		</p></li><li><p>
 		Execute the following command to grant the <code class="constant">Domain Admins</code> group all
@@ -2405,8 +2405,8 @@
 SeRemoteShutdownPrivilege
 SeDiskOperatorPrivilege
 </pre><p>
-		</p></li></ol></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2603537"></a>Windows Client Configuration</h2></div></div></div><p>
-	<a class="indexterm" name="id2603545"></a>
+		</p></li></ol></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id368268"></a>Windows Client Configuration</h2></div></div></div><p>
+	<a class="indexterm" name="id368276"></a>
 	In the next few sections, you can configure a new Windows XP Professional disk image on a staging
 	machine. You will configure all software, printer settings, profile and policy handling, and desktop
 	default profile settings on this system. When it is complete, you copy the contents of the
@@ -2419,24 +2419,24 @@
 	Base Profile for All Users."</a>
 
 	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="redirfold"></a>Configuration of Default Profile with Folder Redirection</h3></div></div></div><p>
-	<a class="indexterm" name="id2603595"></a>
+	<a class="indexterm" name="id368320"></a>
 	Log onto the Windows XP Professional workstation as the local <code class="constant">Administrator</code>.
 	It is necessary to expose folders that are generally hidden to provide access to the
 	<code class="constant">Default User</code> folder.
-	</p><div class="procedure"><a name="id2603613"></a><p class="title"><b>Procedure 5.13. Expose Hidden Folders</b></p><ol type="1"><li><p>
+	</p><div class="procedure"><a name="id368336"></a><p class="title"><b>Procedure 5.13. Expose Hidden Folders</b></p><ol type="1"><li><p>
 		Launch the Windows Explorer by clicking
 			<span class="guimenu">Start</span> &#8594; <span class="guimenuitem">My Computer</span> &#8594; <span class="guimenuitem">Tools</span> &#8594; <span class="guimenuitem">Folder Options</span> &#8594; <span class="guimenuitem">View Tab</span>.
 		Select <span class="guilabel">Show hidden files and folders</span>,
 		and click <span class="guibutton">OK</span>.  Exit Windows Explorer.
 		</p></li><li><p>
-		<a class="indexterm" name="id2603680"></a>
+		<a class="indexterm" name="id368401"></a>
 		Launch the Registry Editor. Click 
 		<span class="guimenu">Start</span> &#8594; <span class="guimenuitem">Run</span>. Key in <code class="literal">regedt32</code>, and click
 		<span class="guibutton">OK</span>.
 		</p></li></ol></div><p>
 	</p><div class="procedure"><a name="sbehap-rdrfldr"></a><p class="title"><b>Procedure 5.14. Redirect Folders in Default System User Profile</b></p><ol type="1"><li><p>
-		<a class="indexterm" name="id2603738"></a>
-		<a class="indexterm" name="id2603744"></a>
+		<a class="indexterm" name="id368457"></a>
+		<a class="indexterm" name="id368464"></a>
 		Give focus to <code class="constant">HKEY_LOCAL_MACHINE</code> hive entry in the left panel.
 		Click <span class="guimenu">File</span> &#8594; <span class="guimenuitem">Load Hive...</span> &#8594; <span class="guimenuitem">Documents and Settings</span> &#8594; <span class="guimenuitem">Default User</span> &#8594; <span class="guimenuitem">NTUSER</span> &#8594; <span class="guimenuitem">Open</span>. In the dialog box that opens, enter the key name
 		<code class="constant">Default</code> and click <span class="guibutton">OK</span>.
@@ -2448,15 +2448,15 @@
 </pre><p>
 		The right panel reveals the contents as shown in <a class="link" href="happy.html#XP-screen001" title="Figure 5.3. Windows XP Professional User Shared Folders">&#8220;Windows XP Professional  User Shared Folders&#8221;</a>.
 		</p></li><li><p>
-		<a class="indexterm" name="id2603837"></a>
-		<a class="indexterm" name="id2603844"></a>
+		<a class="indexterm" name="id368553"></a>
+		<a class="indexterm" name="id368559"></a>
 		You edit hive keys. Acceptable values to replace the 
 		<code class="constant">%USERPROFILE%</code> variable includes:
 
 		</p><div class="itemizedlist"><ul type="disc"><li><p>A drive letter such as <code class="constant">U:</code></p></li><li><p>A direct network path such as
 				<code class="constant">\\MASSIVE\profdata</code></p></li><li><p>A network redirection (UNC name) that contains a macro such as </p><p><code class="constant">%LOGONSERVER%\profdata\</code></p></li></ul></div><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2603890"></a>
+		<a class="indexterm" name="id368604"></a>
 		Set the registry keys as shown in <a class="link" href="happy.html#proffold" title="Table 5.4. Default Profile Redirections">&#8220;Default Profile Redirections&#8221;</a>. Your implementation makes the assumption
 		that users have statically located machines. Notebook computers (mobile users) need to be
 		accommodated using local profiles. This is not an uncommon assumption.
@@ -2464,14 +2464,14 @@
 		Click back to the root of the loaded hive <code class="constant">Default</code>.
 		Click <span class="guimenu">File</span> &#8594; <span class="guimenuitem">Unload Hive...</span> &#8594; <span class="guimenuitem">Yes</span>.
 		</p></li><li><p>
-		<a class="indexterm" name="id2603945"></a>
+		<a class="indexterm" name="id368656"></a>
 		Click <span class="guimenu">File</span> &#8594; <span class="guimenuitem">Exit</span>. This exits the
 		Registry Editor.
 		</p></li><li><p>
 		Now follow the procedure given in <a class="link" href="happy.html#sbehap-locgrppol" title="The Local Group Policy">&#8220;The Local Group Policy&#8221;</a>. Make sure that each folder you
 		have redirected is in the exclusion list.
 		</p></li><li><p>
-		You are now ready to copy<sup>[<a name="id2603989" href="#ftn.id2603989" class="footnote">11</a>]</sup> 
+		You are now ready to copy<sup>[<a name="id368697" href="#ftn.id368697" class="footnote">11</a>]</sup> 
 		the Default User profile to the Samba domain controllers. Launch Microsoft Windows Explorer,
 		and use it to copy the full contents of the directory <code class="filename">Default User</code> that
 		is in the <code class="filename">C:\Documents and Settings</code> to the root directory of the
@@ -2482,14 +2482,14 @@
 	Before punching out new desktop images for the client workstations, it is perhaps a good idea that
 	desktop behavior should be returned to the original Microsoft settings. The following steps achieve
 	that ojective:
-	</p><div class="procedure"><a name="id2604056"></a><p class="title"><b>Procedure 5.15. Reset Folder Display to Original Behavior</b></p><ul><li><p>
+	</p><div class="procedure"><a name="id368757"></a><p class="title"><b>Procedure 5.15. Reset Folder Display to Original Behavior</b></p><ul><li><p>
 		To launch the Windows Explorer, click
 			<span class="guimenu">Start</span> &#8594; <span class="guimenuitem">My Computer</span> &#8594; <span class="guimenuitem">Tools</span> &#8594; <span class="guimenuitem">Folder Options</span> &#8594; <span class="guimenuitem">View Tab</span>.
 		Deselect <span class="guilabel">Show hidden files and folders</span>, and click <span class="guibutton">OK</span>.
 		Exit Windows Explorer.
-		</p></li></ul></div><div class="figure"><a name="XP-screen001"></a><p class="title"><b>Figure 5.3. Windows XP Professional  User Shared Folders</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/XP-screen001.png" width="351" alt="Windows XP Professional User Shared Folders"></div></div></div><br class="figure-break"><div class="table"><a name="proffold"></a><p class="title"><b>Table 5.4. Default Profile Redirections</b></p><div class="table-contents"><table summary="Default Profile Redirections" border="1"><colgroup><col align="left"><col align="left"></colgroup><thead><tr><th align="left">Registry Key</th><th align="left">Redirected Value</th></tr></thead><tbody><tr><td align="left">Cache</td><td align="left">%LOGONSERVER%\profdata\%USERNAME%\InternetFiles</td></tr><tr><td align="left">Cookies</td><td align="left">%LOGONSERVER%\profdata\%USERNAME%\Cookies</td></tr><tr><td align="left">History</td><td align="left">%LOGONSERVER%\profdata\%USERNAME%\History</td></tr><tr><td align="left">Local AppData</td><td align="left">%LOGONSERVER%\profdata\%USERNAME%\AppData</td></tr><tr><td align="left">Local Settings</td><td align="left">%LOGONSERVER%\profdata\%USERNAME%\LocalSettings</td></tr><tr><td align="left">My Pictures</td><td align="left">%LOGONSERVER%\profdata\%USERNAME%\MyPictures</td></tr><tr><td align="left">Personal</td><td align="left">%LOGONSERVER%\profdata\%USERNAME%\MyDocuments</td></tr><tr><td align="left">Recent</td><td align="left">%LOGONSERVER%\profdata\%USERNAME%\Recent</td></tr></tbody></table></div></div><br class="table-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2604291"></a>Configuration of MS Outlook to Relocate PST File</h3></div></div></div><p>
-	<a class="indexterm" name="id2604299"></a>
-	<a class="indexterm" name="id2604308"></a>
+		</p></li></ul></div><div class="figure"><a name="XP-screen001"></a><p class="title"><b>Figure 5.3. Windows XP Professional  User Shared Folders</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/XP-screen001.png" width="351" alt="Windows XP Professional User Shared Folders"></div></div></div><br class="figure-break"><div class="table"><a name="proffold"></a><p class="title"><b>Table 5.4. Default Profile Redirections</b></p><div class="table-contents"><table summary="Default Profile Redirections" border="1"><colgroup><col align="left"><col align="left"></colgroup><thead><tr><th align="left">Registry Key</th><th align="left">Redirected Value</th></tr></thead><tbody><tr><td align="left">Cache</td><td align="left">%LOGONSERVER%\profdata\%USERNAME%\InternetFiles</td></tr><tr><td align="left">Cookies</td><td align="left">%LOGONSERVER%\profdata\%USERNAME%\Cookies</td></tr><tr><td align="left">History</td><td align="left">%LOGONSERVER%\profdata\%USERNAME%\History</td></tr><tr><td align="left">Local AppData</td><td align="left">%LOGONSERVER%\profdata\%USERNAME%\AppData</td></tr><tr><td align="left">Local Settings</td><td align="left">%LOGONSERVER%\profdata\%USERNAME%\LocalSettings</td></tr><tr><td align="left">My Pictures</td><td align="left">%LOGONSERVER%\profdata\%USERNAME%\MyPictures</td></tr><tr><td align="left">Personal</td><td align="left">%LOGONSERVER%\profdata\%USERNAME%\MyDocuments</td></tr><tr><td align="left">Recent</td><td align="left">%LOGONSERVER%\profdata\%USERNAME%\Recent</td></tr></tbody></table></div></div><br class="table-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id368985"></a>Configuration of MS Outlook to Relocate PST File</h3></div></div></div><p>
+	<a class="indexterm" name="id368993"></a>
+	<a class="indexterm" name="id369002"></a>
 	Microsoft Outlook can store a Personal Storage file, generally known as a PST file.
 	It is the nature of email storage that this file grows, at times quite rapidly.
 	So that users' email is available to them at every workstation they may log onto,
@@ -2498,7 +2498,7 @@
 	</p><p>
 	To redirect the Outlook PST file in Outlook 2003 (older versions of Outlook behave
 	slightly differently), follow these steps:
-	</p><div class="procedure"><a name="id2604330"></a><p class="title"><b>Procedure 5.16. Outlook PST File Relocation</b></p><ol type="1"><li><p>
+	</p><div class="procedure"><a name="id369020"></a><p class="title"><b>Procedure 5.16. Outlook PST File Relocation</b></p><ol type="1"><li><p>
 		Close Outlook if it is open.
 		</p></li><li><p>
 		From the <span class="guimenu">Control Panel</span>, launch the Mail icon.
@@ -2528,11 +2528,11 @@
 		</p></li><li><p>
 		Go back to the <span class="guimenu">Data Files</span> window, then delete the old data file entry.
 		</p></li></ol></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-	<a class="indexterm" name="id2604480"></a>
+	<a class="indexterm" name="id369159"></a>
 	You may have to remove and reinstall the Outlook Address Book (Contacts) entries, otherwise 
 	the user may be not be able to retrieve contacts when addressing a new email message.
 	</p></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-	<a class="indexterm" name="id2604495"></a>
+	<a class="indexterm" name="id369172"></a>
 	Outlook Express is not at all like MS OutLook. It stores file very differently also. Outlook
 	Express storage files can not be redirected to network shares. The options panel will not permit
 	this, but they can be moved to folders outside of the user's profile. They can also be excluded
@@ -2541,34 +2541,34 @@
 	While it is possible to redirect the data stores for Outlook Express data stores by editing the 
 	registry, experience has shown that data corruption and loss of email messages will result.
 	</p><p>
-	<a class="indexterm" name="id2604518"></a>
-	<a class="indexterm" name="id2604524"></a>
+	<a class="indexterm" name="id369190"></a>
+	<a class="indexterm" name="id369196"></a>
 	In the same vane as MS Outlook, Outlook Express data stores can become very large. When used with
 	roaming profiles this can result in excruciatingly long login and logout behavior will files are
 	synchronized. For this reason, it is highly recommended not to use Outlook Express where roaming
 	profiles are used.
 	</p></div><p>
-	<a class="indexterm" name="id2604540"></a>
+	<a class="indexterm" name="id369209"></a>
 	Microsoft does not support storing PST files on network shares, although the practice does appear
 	to be rather popular. Anyone who does relocation the PST file to a network resource should refer
 	the Microsoft <a class="ulink" href="http://support.microsoft.com/kb/297019/" target="_top">reference</a> to better
 	understand the issues.
 	</p><p>
-	<a class="indexterm" name="id2604561"></a>
+	<a class="indexterm" name="id369227"></a>
 	Apart from manually moving PST files to a network share, it is possible to set the default PST
 	location for new accounts by following the instructions at the WindowsITPro <a class="ulink" href="http://www.windowsitpro.com/Windows/Article/ArticleID/48228/48228.html" target="_top">web</a> site.
 	</p><p>
-	<a class="indexterm" name="id2604581"></a>
+	<a class="indexterm" name="id369245"></a>
 	User feedback suggests that disabling of oplocks on PST files will significantly improve
 	network performance by reducing locking overheads. One way this can be done is to add to the
 	<code class="filename">smb.conf</code> file stanza for the share the PST file the following:
 </p><pre class="screen">
 veto oplock files = /*.pdf/*.PST/
 </pre><p>
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2604606"></a>Configure Delete Cached Profiles on Logout</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id369268"></a>Configure Delete Cached Profiles on Logout</h3></div></div></div><p>
 	Configure the Windows XP Professional client to auto-delete roaming profiles on logout:
 	</p><p>
-	<a class="indexterm" name="id2604619"></a>
+	<a class="indexterm" name="id369280"></a>
 	Click 
 	<span class="guimenu">Start</span> &#8594; <span class="guimenuitem">Run</span>. In the dialog box, enter <code class="literal">MMC</code> and click <span class="guibutton">OK</span>.
 	</p><p>
@@ -2576,7 +2576,7 @@
 	profiles are deleted as network users log out of the system. Click
 	<span class="guimenu">File</span> &#8594; <span class="guimenuitem">Add/Remove Snap-in</span> &#8594; <span class="guimenuitem">Add</span> &#8594; <span class="guimenuitem">Group Policy</span> &#8594; <span class="guimenuitem">Add</span> &#8594; <span class="guimenuitem">Finish</span> &#8594; <span class="guimenuitem">Close</span> &#8594; <span class="guimenuitem">OK</span>. 
 	</p><p>
-	<a class="indexterm" name="id2604715"></a>
+	<a class="indexterm" name="id369374"></a>
 	The Microsoft Management Console now shows the <span class="guimenu">Group Policy</span>
 	utility that enables you to set the policies needed. In the left panel, click
 	<span class="guimenuitem">Local Computer Policy</span> &#8594; <span class="guimenuitem">Administrative Templates</span> &#8594; <span class="guimenuitem">System</span> &#8594; <span class="guimenuitem">User Profiles</span>. In the right panel, set the properties shown here by double-clicking on each
@@ -2584,15 +2584,15 @@
 	</p><div class="itemizedlist"><ul type="disc"><li><p>Do not check for user ownership of Roaming Profile Folders = Enabled</p></li><li><p>Delete cached copies of roaming profiles = Enabled</p></li></ul></div><p>
 	Close the Microsoft Management Console. The settings take immediate effect and persist onto all image copies
 	made of this system to deploy the new standard desktop system.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2604786"></a>Uploading Printer Drivers to Samba Servers</h3></div></div></div><p>
-	<a class="indexterm" name="id2604794"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id369439"></a>Uploading Printer Drivers to Samba Servers</h3></div></div></div><p>
+	<a class="indexterm" name="id369447"></a>
 	Users want to be able to use network printers. You have a vested interest in making
 	it easy for them to print. You have chosen to install the printer drivers onto the Samba
 	servers and to enable point-and-click (drag-and-drop) printing. This process results in
 	Samba being able to automatically provide the Windows client with the driver necessary to
 	print to the printer chosen. The following procedure must be followed for every network
 	printer:
-	</p><div class="procedure"><a name="id2604812"></a><p class="title"><b>Procedure 5.17. Steps to Install Printer Drivers on the Samba Servers</b></p><ol type="1"><li><p>
+	</p><div class="procedure"><a name="id369462"></a><p class="title"><b>Procedure 5.17. Steps to Install Printer Drivers on the Samba Servers</b></p><ol type="1"><li><p>
 		Join your Windows XP Professional workstation (the staging machine) to the 
 		<code class="constant">MEGANET2</code> domain. If you are not sure of the procedure, 
 		follow the guidance given in <a class="link" href="appendix.html" title="Chapter 15. A Collection of Useful Tidbits">&#8220;A Collection of Useful Tidbits&#8221;</a>, <a class="link" href="appendix.html#domjoin" title="Joining a Domain: Windows 200x/XP Professional">&#8220;Joining a Domain: Windows 200x/XP Professional&#8221;</a>.
@@ -2617,8 +2617,8 @@
 		Note that the box labeled <span class="guimenu">Driver</span> is empty. Click the <span class="guimenu">New Driver</span>
 		button that is next to the <span class="guimenu">Driver</span> box. This launches the &#8220;<span class="quote">Add Printer Wizard</span>&#8221;.
 		</p></li><li><p>
-		<a class="indexterm" name="id2605001"></a>
-		<a class="indexterm" name="id2605010"></a>
+		<a class="indexterm" name="id369641"></a>
+		<a class="indexterm" name="id369650"></a>
 		The &#8220;<span class="quote">Add Printer Driver Wizard on <code class="constant">MASSIVE</code></span>&#8221; panel 
 		is now presented. Click <span class="guimenu">Next</span> to continue. From the left panel, select the 
 		printer manufacturer. In your case, you are adding a driver for a printer manufactured by 
@@ -2627,12 +2627,12 @@
 		progress bar appears and instructs you as each file is being uploaded and that it is being 
 		directed at the network server <code class="constant">\\massive\ps01-color</code>.
 		</p></li><li><p>
-		<a class="indexterm" name="id2605059"></a>
-		<a class="indexterm" name="id2605068"></a>
-		<a class="indexterm" name="id2605077"></a>
-		<a class="indexterm" name="id2605087"></a>
-		<a class="indexterm" name="id2605096"></a>
-		<a class="indexterm" name="id2605105"></a>
+		<a class="indexterm" name="id369694"></a>
+		<a class="indexterm" name="id369704"></a>
+		<a class="indexterm" name="id369713"></a>
+		<a class="indexterm" name="id369722"></a>
+		<a class="indexterm" name="id369731"></a>
+		<a class="indexterm" name="id369740"></a>
 		The driver upload completes in anywhere from a few seconds to a few minutes. When it completes,
 		you are returned to the <span class="guimenu">Advanced</span> tab in the <span class="guimenu">Properties</span> panel. 
 		You can set the Location (under the <span class="guimenu">General</span> tab) and Security settings (under 
@@ -2641,7 +2641,7 @@
 		directory</span>&#8221;. When this box is checked, the printer will be published in Active Directory
 		(Applicable to Active Directory use only.)
 		</p></li><li><p>
-		<a class="indexterm" name="id2605160"></a>
+		<a class="indexterm" name="id369791"></a>
 		Click <span class="guimenu">OK</span>. It will take a minute or so to upload the settings to the server. 
 		You are now returned to the <span class="guimenu">Printers and Faxes on Massive</span> monitor.
 		Right-click on the printer, click <span class="guimenu">Properties</span> &#8594; <span class="guimenuitem">Device Settings</span>.  Now change the settings to suit 
@@ -2653,7 +2653,7 @@
 		just to initialize the Samba printers database entry for this printer. If you need to revert a setting,
 		click <span class="guimenu">Apply</span> again.
 		</p></li><li><p>
-		<a class="indexterm" name="id2605233"></a>
+		<a class="indexterm" name="id369858"></a>
 		Verify that all printer settings are at the desired configuration. When you are satisfied that they are,
 		click the <span class="guimenu">General</span> tab. Now click the <span class="guimenu">Print Test Page</span> button.
 		A test page should print. Verify that it has printed correctly. Then click <span class="guimenu">OK</span>
@@ -2663,7 +2663,7 @@
 		You must repeat this process for all network printers (i.e., for every printer on each server).
 		When you have finished uploading drivers to all printers, close all applications. The next task
 		is to install software your users require to do their work.
-		</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2605289"></a>Software Installation</h3></div></div></div><p>
+		</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id369909"></a>Software Installation</h3></div></div></div><p>
 	Your network has both fixed desktop workstations as well as notebook computers. As a general rule, it is
 	a good idea to not tamper with the operating system that is provided by the notebook computer manufacturer.
 	Notebooks require special handling that is beyond the scope of this chapter.
@@ -2678,7 +2678,7 @@
 	When you believe that the overall configuration is complete, be sure to create a shared group profile
 	and migrate that to the Samba server for later reuse when creating custom mandatory profiles, just in
 	case a user may have specific needs you had not anticipated.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2605324"></a>Roll-out Image Creation</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id369934"></a>Roll-out Image Creation</h3></div></div></div><p>
 	The final steps before preparing the distribution Norton Ghost image file you might follow are:
 	</p><div class="blockquote"><blockquote class="blockquote"><p>
 	Unjoin the domain  Each workstation requires a unique name and must be independently
@@ -2687,7 +2687,7 @@
 	Defragment the hard disk  While not obvious to the uninitiated, defragmentation results
 	in better performance and often significantly reduces the size of the compressed disk image. That
 	also means it will take less time to deploy the image onto 500 workstations.
-	</p></blockquote></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2605358"></a>Key Points Learned</h2></div></div></div><p>
+	</p></blockquote></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id369964"></a>Key Points Learned</h2></div></div></div><p>
 	This chapter introduced many new concepts. Is it a sad fact that the example presented deliberately
 	avoided any consideration of security. Security does not just happen; you must design it into your total
 	network. Security begins with a systems design and implementation that anticipates hostile behavior from
@@ -2696,8 +2696,8 @@
 	practices, you must not deploy the design presented in this book in an environment where there is risk
 	of compromise.
 	</p><p>
-	<a class="indexterm" name="id2605380"></a>
-	<a class="indexterm" name="id2605389"></a>
+	<a class="indexterm" name="id369981"></a>
+	<a class="indexterm" name="id369989"></a>
 	As a minimum, the LDAP server must be protected by way of Access Control Lists (ACLs), and it must be
 	configured to use secure protocols for all communications over the network. Of course, secure networking
 	does not result just from systems design and implementation but involves constant user education
@@ -2724,37 +2724,37 @@
 		Control over roaming profiles, with particular focus on folder redirection to network drives.
 		</p></li><li><p>
 		Use of the CUPS printing system together with Samba-based printer driver auto-download.
-		</p></li></ul></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2605474"></a>Questions and Answers</h2></div></div></div><p>
+		</p></li></ul></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id370057"></a>Questions and Answers</h2></div></div></div><p>
 	Well, here we are at the end of this chapter and we have only ten questions to help you to
 	remember so much. There are bound to be some sticky issues here.
-	</p><div class="qandaset"><dl><dt> <a href="happy.html#id2605492">
+	</p><div class="qandaset"><dl><dt> <a href="happy.html#id370074">
 		Why did you not cover secure practices? Isn't it rather irresponsible to instruct
 		network administrators to implement insecure solutions?
-		</a></dt><dt> <a href="happy.html#id2605536">
+		</a></dt><dt> <a href="happy.html#id370107">
 		You have focused much on SUSE Linux and little on the market leader, Red Hat. Do
 		you have a problem with Red Hat Linux? Doesn't that make your guidance irrelevant
 		to the Linux I might be using?
-		</a></dt><dt> <a href="happy.html#id2605597">
+		</a></dt><dt> <a href="happy.html#id370149">
 		You did not use SWAT to configure Samba. Is there something wrong with it?
-		</a></dt><dt> <a href="happy.html#id2605637">
+		</a></dt><dt> <a href="happy.html#id370184">
 		You have exposed a well-used password not24get. Is that
 		not irresponsible? 
-		</a></dt><dt> <a href="happy.html#id2605662">
+		</a></dt><dt> <a href="happy.html#id370206">
 		The Idealx smbldap-tools create many domain group accounts that are not used. Is that
 		a good thing?
-		</a></dt><dt> <a href="happy.html#id2605688">
+		</a></dt><dt> <a href="happy.html#id370229">
 		Can I use LDAP just for Samba accounts and not for UNIX system accounts?
-		</a></dt><dt> <a href="happy.html#id2605713">
+		</a></dt><dt> <a href="happy.html#id370249">
 		Why are the Windows domain RID portions not the same as the UNIX UID?
-		</a></dt><dt> <a href="happy.html#id2605749">
+		</a></dt><dt> <a href="happy.html#id370281">
 		Printer configuration examples all show printing to the HP port 9100. Does this
 		mean that I must have HP printers for these solutions to work?
-		</a></dt><dt> <a href="happy.html#id2605778">
+		</a></dt><dt> <a href="happy.html#id370306">
 		Is folder redirection dangerous? I've heard that you can lose your data that way.
-		</a></dt><dt> <a href="happy.html#id2605805">
+		</a></dt><dt> <a href="happy.html#id370327">
 		Is it really necessary to set a local Group Policy to exclude the redirected
 		folders from the roaming profile?
-		</a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%"><tbody><tr class="question"><td align="left" valign="top"><a name="id2605492"></a><a name="id2605494"></a></td><td align="left" valign="top"><p>
+		</a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%"><tbody><tr class="question"><td align="left" valign="top"><a name="id370074"></a><a name="id370076"></a></td><td align="left" valign="top"><p>
 		Why did you not cover secure practices? Isn't it rather irresponsible to instruct
 		network administrators to implement insecure solutions?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
@@ -2773,7 +2773,7 @@
 		This book makes little mention of backup techniques. Does that mean that I am recommending
 		that you should implement a network without provision for data recovery and for disaster
 		management? Back to our focus: The deployment of Samba has been clearly demonstrated.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2605536"></a><a name="id2605538"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id370107"></a><a name="id370109"></a></td><td align="left" valign="top"><p>
 		You have focused much on SUSE Linux and little on the market leader, Red Hat. Do
 		you have a problem with Red Hat Linux? Doesn't that make your guidance irrelevant
 		to the Linux I might be using?
@@ -2800,7 +2800,7 @@
 		of open source software. I favor neither and respect both. I like particular
 		features of both products (companies also). No bias in presentation is intended.
 		Oh, before I forget, I particularly like Debian Linux; that is my favorite playground.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2605597"></a><a name="id2605599"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id370149"></a><a name="id370151"></a></td><td align="left" valign="top"><p>
 		You did not use SWAT to configure Samba. Is there something wrong with it?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		That is a good question. As it is, the <code class="filename">smb.conf</code> file configurations are presented
@@ -2811,14 +2811,14 @@
 		There are people in the Linux and open source community who feel that SWAT is dangerous
 		and insecure. Many will not touch it with a barge-pole. By not introducing SWAT, I
 		hope to have brought their interests on board. SWAT is well covered is <span class="emphasis"><em>TOSHARG2</em></span>.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2605637"></a><a name="id2605639"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id370184"></a><a name="id370186"></a></td><td align="left" valign="top"><p>
 		You have exposed a well-used password <span class="emphasis"><em>not24get</em></span>. Is that
 		not irresponsible? 
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		Well, I had to use a password of some sort. At least this one has been consistently
 		used throughout. I guess you can figure out that in a real deployment it would make 
 		sense to use a more secure and original password.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2605662"></a><a name="id2605664"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id370206"></a><a name="id370208"></a></td><td align="left" valign="top"><p>
 		The Idealx smbldap-tools create many domain group accounts that are not used. Is that
 		a good thing?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
@@ -2826,7 +2826,7 @@
 		Let's give Idealx some credit for the contribution they have made. I appreciate their work
 		and, besides, it does no harm to create accounts that are not now used  at some time 
 		Samba may well use them.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2605688"></a><a name="id2605690"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id370229"></a><a name="id370231"></a></td><td align="left" valign="top"><p>
 		Can I use LDAP just for Samba accounts and not for UNIX system accounts?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		Yes, you can do that for user accounts only. Samba requires there to be a POSIX (UNIX)
@@ -2834,7 +2834,7 @@
 		the system password account, how do you plan to keep all domain controller system
 		password files in sync? I think that having everything in LDAP makes a lot of sense
 		for the UNIX administrator who is still learning the craft and is migrating from MS Windows.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2605713"></a><a name="id2605715"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id370249"></a><a name="id370251"></a></td><td align="left" valign="top"><p>
 		Why are the Windows domain RID portions not the same as the UNIX UID?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		Samba uses a well-known public algorithm for assigning RIDs from UIDs and GIDs.
@@ -2843,7 +2843,7 @@
 		assignment used the calculation: RID = UID x 2 + 1000. Of course, Samba does
 		permit you to override that to some extent. See the <code class="filename">smb.conf</code> man page entry
 		for <em class="parameter"><code>algorithmic rid base</code></em>.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2605749"></a><a name="id2605751"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id370281"></a><a name="id370283"></a></td><td align="left" valign="top"><p>
 		Printer configuration examples all show printing to the HP port 9100. Does this
 		mean that I must have HP printers for these solutions to work?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
@@ -2853,7 +2853,7 @@
 		inkjet printer. Use the appropriate device URI (Universal Resource Interface)
 		argument to the <code class="constant">lpadmin -v</code> option that is right for your
 		printer.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2605778"></a><a name="id2605780"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id370306"></a><a name="id370308"></a></td><td align="left" valign="top"><p>
 		Is folder redirection dangerous? I've heard that you can lose your data that way.
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		The only loss of data I know of that involved folder redirection was caused by
@@ -2863,13 +2863,13 @@
 		he declined to move the data because he thought it was still in the local profile
 		folder. That was not the case, so by declining to move the data back, he wiped out
 		the data. You cannot hold the tool responsible for that. Caveat emptor still applies.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2605805"></a><a name="id2605808"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id370327"></a><a name="id370330"></a></td><td align="left" valign="top"><p>
 		Is it really necessary to set a local Group Policy to exclude the redirected
 		folders from the roaming profile?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		Yes. If you do not do this, the data will still be copied from the network folder
 		(share) to the local cached copy of the profile.
-		</p></td></tr></tbody></table></div></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id2603989" href="#id2603989" class="para">11</a>] </sup>
+		</p></td></tr></tbody></table></div></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id368697" href="#id368697" class="para">11</a>] </sup>
 			There is an alternate method by which a default user profile can be added to the
 			<code class="constant">NETLOGON</code> share. This facility in the Windows System tool 
 			permits profiles to be exported. The export target may be a particular user or 

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/AccountingNetwork.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/Charity-Network.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/UNIX-Samba-and-LDAP.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/acct2net.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/ch7-dual-additive-LDAP-Ok.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/ch7-dual-additive-LDAP.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/ch7-fail-overLDAP.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/ch7-singleLDAP.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/ch8-migration.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/chap4-net.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/chap5-net.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/chap6-net.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/chap7-idresol.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/chap9-ADSDC.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/images/chap9-SambaDC.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/index.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/index.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/index.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,47 +1,47 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Samba-3 by Example</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="next" href="pr01.html" title="About the Cover Artwork"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Samba-3 by Example</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="pr01.html">Next</a></td></tr></table><hr></div><div class="book" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="S3bE"></a>Samba-3 by Example</h1></div><div><h2 class="subtitle">Practical Exercises in Successful Samba Deployment</h2></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div></div><div><p class="pubdate">July, 2006</p></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="pr01.html">About the Cover Artwork</a></span></dt><dt><span class="preface"><a href="pr02.html">Acknowledgments</a></span></dt><dt><span class="preface"><a href="pr03.html">Foreword</a></span></dt><dd><dl><dt><span class="sect1"><a href="pr03.html#id2524914">By John M. Weathersby, Executive Director, OSSI</a></span></dt></dl></dd><dt><span class="preface"><a href="preface.html">Preface</a></span></dt><dd><dl><dt><span class="sect1"><a href="preface.html#id2525103">Why Is This Book Necessary?</a></span></dt><dd><dl><dt><span class="sect2"><a href="preface.html#id2523863">Samba 3.0.20 Update Edition</a></span></dt></dl></dd><dt><span class="sect1"><a href="preface.html#id2523759">Prerequisites</a></span></dt><dt><span class="sect1"><a href="preface.html#id2523791">Approach</a></span></dt><dt><span class="sect1"><a href="preface.html#id2571069">Summary of Topics</a></span></dt><dt><span class="sect1"><a href="preface.html#id2571806">Conventions Used</a></span></dt></dl></dd><dt><span class="part"><a href="ExNetworks.html">I. Example Network Configurations</a></span></dt><dd><dl><dt><span class="chapter"><a href="simple.html">1. No-Frills Samba Servers</a></span></dt><dd><dl><dt><span class="sect1"><a href="simple.html#id2572015">Introduction</a></span></dt><dt><span class="sect1"><a href="simple.html#id2572056">Assignment Tasks</a></span></dt><dd><dl><dt><span class="sect2"><a href="simple.html#id2572100">Drafting Office</a></span></dt><dt><span class="sect2"><a href="simple.html#id2572871">Charity Administration Office</a></span></dt><dt><span class="sect2"><a href="simple.html#AccountingOffice">Accounting Office</a></span></dt></dl></dd><dt><span class="sect1"><a href="simple.html#id2576536">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="small.html">2. Small Office Networking</a></span></dt><dd><dl><dt><span class="sect1"><a href="small.html#id2577019">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="small.html#id2577042">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="small.html#id2577104">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="small.html#id2577157">Technical Issues</a></span></dt><dt><span class="sect2"><a href="small.html#id2577369">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="small.html#id2577390">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="small.html#id2579091">Validation</a></span></dt><dt><span class="sect2"><a href="small.html#id2579795">Notebook Computers: A Special Case</a></span></dt><dt><span class="sect2"><a href="small.html#id2579821">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="small.html#id2579897">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="secure.html">3. Secure Office Networking</a></span></dt><dd><dl><dt><span class="sect1"><a href="secure.html#id2580408">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="secure.html#id2580460">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="secure.html#id2580710">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="secure.html#id2580725">Technical Issues</a></span></dt><dt><span class="sect2"><a href="secure.html#id2581178">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="secure.html#id2581218">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="secure.html#ch4bsc">Basic System Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#id2582155">Samba Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4dhcpdns">Configuration of DHCP and DNS Servers</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4ptrcfg">Printer Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#procstart">Process Startup Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4valid">Validation</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4appscfg">Application Share Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4wincfg">Windows Client Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#id2586790">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="secure.html#id2586852">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="Big500users.html">4. The 500-User Office</a></span></dt><dd><dl><dt><span class="sect1"><a href="Big500users.html#id2587374">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="Big500users.html#id2587419">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="Big500users.html#id2587525">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="Big500users.html#id2587560">Technical Issues</a></span></dt><dt><span class="sect2"><a href="Big500users.html#id2587763">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="Big500users.html#id2587786">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="Big500users.html#ch5-dnshcp-setup">Installation of DHCP, DNS, and Samba Control Files</a></span></dt><dt><span class="sect2"><a href="Big500users.html#id2588515">Server Preparation: All Servers</a></span></dt><dt><span class="sect2"><a href="Big500users.html#id2589080">Server-Specific Preparation</a></span></dt><dt><span class="sect2"><a href="Big500users.html#ch5-procstart">Process Startup Configuration</a></span></dt><dt><span class="sect2"><a href="Big500users.html#ch5wincfg">Windows Client Configuration</a></span></dt><dt><span class="sect2"><a href="Big500users.html#id2592280">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="Big500users.html#id2592338">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="happy.html">5. Making Happy Users</a></span></dt><dd><dl><dt><span class="sect1"><a href="happy.html#id2593176">Regarding LDAP Directories and Windows Computer Accounts</a></span></dt><dt><span class="sect1"><a href="happy.html#id2593318">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#id2593415">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#id2593552">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#id2594009">Technical Issues</a></span></dt><dt><span class="sect2"><a href="happy.html#id2595888">Political Issues</a></span></dt><dt><span class="sect2"><a href="happy.html#id2595904">Installation Checklist</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#id2596084">Samba Server Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#ldapsetup">OpenLDAP Server Configuration</a></span></dt><dt><span class="sect2"><a href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a></span></dt><dt><span class="sect2"><a href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a></span></dt><dt><span class="sect2"><a href="happy.html#sbeidealx">Install and Configure Idealx smbldap-tools Scripts</a></span></dt><dt><span class="sect2"><a href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a></span></dt><dt><span class="sect2"><a href="happy.html#sbehap-ptrcfg">Printer Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#sbehap-bldg1">Samba-3 BDC Configuration</a></span></dt><dt><span class="sect1"><a href="happy.html#id2602933">Miscellaneous Server Preparation Tasks</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#id2602953">Configuring Directory Share Point Roots</a></span></dt><dt><span class="sect2"><a href="happy.html#id2603048">Configuring Profile Directories</a></span></dt><dt><span class="sect2"><a href="happy.html#id2603292">Preparation of Logon Scripts</a></span></dt><dt><span class="sect2"><a href="happy.html#id2603404">Assigning User Rights and Privileges</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#id2603537">Windows Client Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#redirfold">Configuration of Default Profile with Folder Redirection</a></span></dt><dt><span class="sect2"><a href="happy.html#id2604291">Configuration of MS Outlook to Relocate PST File</a></span></dt><dt><span class="sect2"><a href="happy.html#id2604606">Configure Delete Cached Profiles on Logout</a></span></dt><dt><span class="sect2"><a href="happy.html#id2604786">Uploading Printer Drivers to Samba Servers</a></span></dt><dt><span class="sect2"><a href="happy.html#id2605289">Software Installation</a></span></dt><dt><span class="sect2"><a href="happy.html#id2605324">Roll-out Image Creation</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#id2605358">Key Points Learned</a></span></dt><dt><span class="sect1"><a href="happy.html#id2605474">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="2000users.html">6. A Distributed 2000-User Network</a></span></dt><dd><dl><dt><span class="sect1"><a href="2000users.html#id2605895">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="2000users.html#id2605926">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="2000users.html#id2605993">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="2000users.html#id2606266">Technical Issues</a></span></dt><dt><span class="sect2"><a href="2000users.html#id2607210">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="2000users.html#id2607228">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="2000users.html#id2610386">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="2000users.html#id2610534">Questions and Answers</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="DMSMig.html">II. Domain Members, Updating Samba and Migration</a></span></dt><dd><dl><dt><span class="chapter"><a href="unixclients.html">7. Adding Domain Member Servers and Clients</a></span></dt><dd><dl><dt><span class="sect1"><a href="unixclients.html#id2611392">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="unixclients.html#id2611445">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="unixclients.html#id2611480">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="unixclients.html#id2611509">Technical Issues</a></span></dt><dt><span class="sect2"><a href="unixclients.html#id2612158">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="unixclients.html#id2612258">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></span></dt><dt><span class="sect2"><a href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a></span></dt><dt><span class="sect2"><a href="unixclients.html#dcwonss">NT4/Samba Domain with Samba Domain Member Server without NSS Support</a></span></dt><dt><span class="sect2"><a href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></span></dt><dt><span class="sect2"><a href="unixclients.html#id2618464">UNIX/Linux Client Domain Member</a></span></dt><dt><span class="sect2"><a href="unixclients.html#id2619038">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="unixclients.html#id2619093">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="upgrades.html">8. Updating Samba-3</a></span></dt><dd><dl><dt><span class="sect1"><a href="upgrades.html#id2620252">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrades.html#id2620348">Cautions and Notes</a></span></dt></dl></dd><dt><span class="sect1"><a href="upgrades.html#id2621677">Upgrading from Samba 1.x and 2.x to Samba-3</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a></span></dt><dt><span class="sect2"><a href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a></span></dt><dt><span class="sect2"><a href="upgrades.html#id2622379">Samba-2.x with LDAP Support</a></span></dt></dl></dd><dt><span class="sect1"><a href="upgrades.html#id2622561">Updating a Samba-3 Installation</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrades.html#id2622671">Samba-3 to Samba-3 Updates on the Same Server</a></span></dt><dt><span class="sect2"><a href="upgrades.html#id2622874">Migrating Samba-3 to a New Server</a></span></dt><dt><span class="sect2"><a href="upgrades.html#id2623289">Migration of Samba Accounts to Active Directory</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ntmigration.html">9. Migrating NT4 Domain to Samba-3</a></span></dt><dd><dl><dt><span class="sect1"><a href="ntmigration.html#id2623461">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntmigration.html#id2623546">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntmigration.html#id2623601">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntmigration.html#id2623787">Technical Issues</a></span></dt><dt><span class="sect2"><a href="ntmigration.html#id2624110">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntmigration.html#id2624136">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntmigration.html#id2624277">NT4 Migration Using LDAP Backend</a></span></dt><dt><span class="sect2"><a href="ntmigration.html#id2626735">NT4 Migration Using tdbsam Backend</a></span></dt><dt><span class="sect2"><a href="ntmigration.html#id2627142">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntmigration.html#id2627180">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="nw4migration.html">10. Migrating NetWare Server to Samba-3</a></span></dt><dd><dl><dt><span class="sect1"><a href="nw4migration.html#id2628156">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="nw4migration.html#id2628272">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="nw4migration.html#id2628385">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="nw4migration.html#id2628462">Technical Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="nw4migration.html#id2628652">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="nw4migration.html#id2628661">NetWare Migration Using LDAP Backend</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="RefSection.html">III. Reference Section</a></span></dt><dd><dl><dt><span class="chapter"><a href="kerberos.html">11. Active Directory, Kerberos, and Security</a></span></dt><dd><dl><dt><span class="sect1"><a href="kerberos.html#id2632738">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="kerberos.html#id2633389">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="kerberos.html#id2633405">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="kerberos.html#id2633802">Technical Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="kerberos.html#ch10expl">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="kerberos.html#id2635432">Share Access Controls</a></span></dt><dt><span class="sect2"><a href="kerberos.html#id2635780">Share Definition Controls</a></span></dt><dt><span class="sect2"><a href="kerberos.html#id2636393">Share Point Directory and File Permissions</a></span></dt><dt><span class="sect2"><a href="kerberos.html#id2636796">Managing Windows 200x ACLs</a></span></dt><dt><span class="sect2"><a href="kerberos.html#id2637523">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="kerberos.html#id2637657">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="DomApps.html">12. Integrating Additional Services</a></span></dt><dd><dl><dt><span class="sect1"><a href="DomApps.html#id2638286">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="DomApps.html#id2638317">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="DomApps.html#id2638418">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="DomApps.html#id2638451">Technical Issues</a></span></dt><dt><span class="sect2"><a href="DomApps.html#id2638607">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="DomApps.html#id2638624">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></span></dt><dt><span class="sect2"><a href="DomApps.html#id2640476">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="DomApps.html#id2640537">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="HA.html">13. Performance, Reliability, and Availability</a></span></dt><dd><dl><dt><span class="sect1"><a href="HA.html#id2641056">Introduction</a></span></dt><dt><span class="sect1"><a href="HA.html#id2641143">Dissection and Discussion</a></span></dt><dt><span class="sect1"><a href="HA.html#id2641615">Guidelines for Reliable Samba Operation</a></span></dt><dd><dl><dt><span class="sect2"><a href="HA.html#id2641642">Name Resolution</a></span></dt><dt><span class="sect2"><a href="HA.html#id2642118">Samba Configuration</a></span></dt><dt><span class="sect2"><a href="HA.html#id2642445">Use and Location of BDCs</a></span></dt><dt><span class="sect2"><a href="HA.html#id2642520">Use One Consistent Version of MS Windows Client</a></span></dt><dt><span class="sect2"><a href="HA.html#id2642542">For Scalability, Use SAN-Based Storage on Samba Servers</a></span></dt><dt><span class="sect2"><a href="HA.html#id2642592">Distribute Network Load with MSDFS</a></span></dt><dt><span class="sect2"><a href="HA.html#id2642647">Replicate Data to Conserve Peak-Demand Wide-Area Bandwidth</a></span></dt><dt><span class="sect2"><a href="HA.html#id2642692">Hardware Problems</a></span></dt><dt><span class="sect2"><a href="HA.html#id2642850">Large Directories</a></span></dt></dl></dd><dt><span class="sect1"><a href="HA.html#id2642954">Key Points Learned</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch14.html">14. Samba Support</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch14.html#id2643123">Free Support</a></span></dt><dt><span class="sect1"><a href="ch14.html#id2643342">Commercial Support</a></span></dt></dl></dd><dt><span class="chapter"><a href="appendix.html">15. A Collection of Useful Tidbits</a></span></dt><dd><dl><dt><span class="sect1"><a href="appendix.html#domjoin">Joining a Domain: Windows 200x/XP Professional</a></span></dt><dt><span class="sect1"><a href="appendix.html#id2644049">Samba System File Location</a></span></dt><dt><span class="sect1"><a href="appendix.html#id2644469">Starting Samba</a></span></dt><dt><span class="sect1"><a href="appendix.html#id2644815">DNS Configuration Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix.html#id2644827">The Forward Zone File for the Loopback Adaptor</a></span></dt><dt><span class="sect2"><a href="appendix.html#id2644875">The Reverse Zone File for the Loopback Adaptor</a></span></dt><dt><span class="sect2"><a href="appendix.html#id2645015">DNS Root Server Hint File</a></span></dt></dl></dd><dt><span class="sect1"><a href="appendix.html#altldapcfg">Alternative LDAP Database Initialization</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix.html#id2645074">Initialization of the LDAP Database</a></span></dt></dl></dd><dt><span class="sect1"><a href="appendix.html#id2645653">The LDAP Account Manager</a></span></dt><dt><span class="sect1"><a href="appendix.html#id2646650">IDEALX Management Console</a></span></dt><dt><span class="sect1"><a href="appendix.html#ch12-SUIDSGID">Effect of Setting File and Directory SUID/SGID Permissions Explained</a></span></dt><dt><span class="sect1"><a href="appendix.html#ch12dblck">Shared Data Integrity</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix.html#id2647131">Microsoft Access</a></span></dt><dt><span class="sect2"><a href="appendix.html#id2647278">Act! Database Sharing</a></span></dt><dt><span class="sect2"><a href="appendix.html#id2647362">Opportunistic Locking Controls</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="primer.html">16. Networking Primer</a></span></dt><dd><dl><dt><span class="sect1"><a href="primer.html#id2647528">Requirements and Notes</a></span></dt><dt><span class="sect1"><a href="primer.html#id2647690">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="primer.html#id2647750">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="primer.html#id2647868">Exercises</a></span></dt><dd><dl><dt><span class="sect2"><a href="primer.html#id2647994">Single-Machine Broadcast Activity</a></span></dt><dt><span class="sect2"><a href="primer.html#secondmachine">Second Machine Startup Broadcast Interaction</a></span></dt><dt><span class="sect2"><a href="primer.html#id2649139">Simple Windows Client Connection Characteristics</a></span></dt><dt><span class="sect2"><a href="primer.html#id2649641">Windows 200x/XP Client Interaction with Samba-3</a></span></dt><dt><span class="sect2"><a href="primer.html#id2650209">Conclusions to Exercises</a></span></dt></dl></dd><dt><span class="sect1"><a href="primer.html#chap01conc">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="primer.html#id2650324">Technical Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="primer.html#chap01qa">Questions and Answers</a></span></dt></dl></dd><dt><span class="appendix"><a href="apa.html">A. 
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Samba-3 by Example</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="next" href="pr01.html" title="About the Cover Artwork"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Samba-3 by Example</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="pr01.html">Next</a></td></tr></table><hr></div><div class="book" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="S3bE"></a>Samba-3 by Example</h1></div><div><h2 class="subtitle">Practical Exercises in Successful Samba Deployment</h2></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div></div><div><p class="pubdate">July, 2006</p></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="pr01.html">About the Cover Artwork</a></span></dt><dt><span class="preface"><a href="pr02.html">Acknowledgments</a></span></dt><dt><span class="preface"><a href="pr03.html">Foreword</a></span></dt><dd><dl><dt><span class="sect1"><a href="pr03.html#id298553">By John M. Weathersby, Executive Director, OSSI</a></span></dt></dl></dd><dt><span class="preface"><a href="preface.html">Preface</a></span></dt><dd><dl><dt><span class="sect1"><a href="preface.html#id298129">Why Is This Book Necessary?</a></span></dt><dd><dl><dt><span class="sect2"><a href="preface.html#id298166">Samba 3.0.20 Update Edition</a></span></dt></dl></dd><dt><span class="sect1"><a href="preface.html#id297715">Prerequisites</a></span></dt><dt><span class="sect1"><a href="preface.html#id339863">Approach</a></span></dt><dt><span class="sect1"><a href="preface.html#id339912">Summary of Topics</a></span></dt><dt><span class="sect1"><a href="preface.html#id340490">Conventions Used</a></span></dt></dl></dd><dt><span class="part"><a href="ExNetworks.html">I. Example Network Configurations</a></span></dt><dd><dl><dt><span class="chapter"><a href="simple.html">1. No-Frills Samba Servers</a></span></dt><dd><dl><dt><span class="sect1"><a href="simple.html#id340660">Introduction</a></span></dt><dt><span class="sect1"><a href="simple.html#id340690">Assignment Tasks</a></span></dt><dd><dl><dt><span class="sect2"><a href="simple.html#id340728">Drafting Office</a></span></dt><dt><span class="sect2"><a href="simple.html#id341373">Charity Administration Office</a></span></dt><dt><span class="sect2"><a href="simple.html#AccountingOffice">Accounting Office</a></span></dt></dl></dd><dt><span class="sect1"><a href="simple.html#id344496">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="small.html">2. Small Office Networking</a></span></dt><dd><dl><dt><span class="sect1"><a href="small.html#id344880">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="small.html#id344898">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="small.html#id344943">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="small.html#id344988">Technical Issues</a></span></dt><dt><span class="sect2"><a href="small.html#id345160">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="small.html#id345178">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="small.html#id346626">Validation</a></span></dt><dt><span class="sect2"><a href="small.html#id347201">Notebook Computers: A Special Case</a></span></dt><dt><span class="sect2"><a href="small.html#id347221">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="small.html#id347285">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="secure.html">3. Secure Office Networking</a></span></dt><dd><dl><dt><span class="sect1"><a href="secure.html#id347711">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="secure.html#id347745">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="secure.html#id347954">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="secure.html#id347966">Technical Issues</a></span></dt><dt><span class="sect2"><a href="secure.html#id348311">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="secure.html#id348344">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="secure.html#ch4bsc">Basic System Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#id349099">Samba Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4dhcpdns">Configuration of DHCP and DNS Servers</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4ptrcfg">Printer Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#procstart">Process Startup Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4valid">Validation</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4appscfg">Application Share Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4wincfg">Windows Client Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#id353060">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="secure.html#id353113">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="Big500users.html">4. The 500-User Office</a></span></dt><dd><dl><dt><span class="sect1"><a href="Big500users.html#id353553">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="Big500users.html#id353583">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="Big500users.html#id353662">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="Big500users.html#id353690">Technical Issues</a></span></dt><dt><span class="sect2"><a href="Big500users.html#id353866">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="Big500users.html#id353886">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="Big500users.html#ch5-dnshcp-setup">Installation of DHCP, DNS, and Samba Control Files</a></span></dt><dt><span class="sect2"><a href="Big500users.html#id354601">Server Preparation: All Servers</a></span></dt><dt><span class="sect2"><a href="Big500users.html#id355116">Server-Specific Preparation</a></span></dt><dt><span class="sect2"><a href="Big500users.html#ch5-procstart">Process Startup Configuration</a></span></dt><dt><span class="sect2"><a href="Big500users.html#ch5wincfg">Windows Client Configuration</a></span></dt><dt><span class="sect2"><a href="Big500users.html#id358090">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="Big500users.html#id358142">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="happy.html">5. Making Happy Users</a></span></dt><dd><dl><dt><span class="sect1"><a href="happy.html#id358884">Regarding LDAP Directories and Windows Computer Accounts</a></span></dt><dt><span class="sect1"><a href="happy.html#id359008">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#id359084">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#id359212">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#id359614">Technical Issues</a></span></dt><dt><span class="sect2"><a href="happy.html#id361271">Political Issues</a></span></dt><dt><span class="sect2"><a href="happy.html#id361283">Installation Checklist</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#id361454">Samba Server Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#ldapsetup">OpenLDAP Server Configuration</a></span></dt><dt><span class="sect2"><a href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a></span></dt><dt><span class="sect2"><a href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a></span></dt><dt><span class="sect2"><a href="happy.html#sbeidealx">Install and Configure Idealx smbldap-tools Scripts</a></span></dt><dt><span class="sect2"><a href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a></span></dt><dt><span class="sect2"><a href="happy.html#sbehap-ptrcfg">Printer Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#sbehap-bldg1">Samba-3 BDC Configuration</a></span></dt><dt><span class="sect1"><a href="happy.html#id367724">Miscellaneous Server Preparation Tasks</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#id367740">Configuring Directory Share Point Roots</a></span></dt><dt><span class="sect2"><a href="happy.html#id367829">Configuring Profile Directories</a></span></dt><dt><span class="sect2"><a href="happy.html#id368057">Preparation of Logon Scripts</a></span></dt><dt><span class="sect2"><a href="happy.html#id368155">Assigning User Rights and Privileges</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#id368268">Windows Client Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="happy.html#redirfold">Configuration of Default Profile with Folder Redirection</a></span></dt><dt><span class="sect2"><a href="happy.html#id368985">Configuration of MS Outlook to Relocate PST File</a></span></dt><dt><span class="sect2"><a href="happy.html#id369268">Configure Delete Cached Profiles on Logout</a></span></dt><dt><span class="sect2"><a href="happy.html#id369439">Uploading Printer Drivers to Samba Servers</a></span></dt><dt><span class="sect2"><a href="happy.html#id369909">Software Installation</a></span></dt><dt><span class="sect2"><a href="happy.html#id369934">Roll-out Image Creation</a></span></dt></dl></dd><dt><span class="sect1"><a href="happy.html#id369964">Key Points Learned</a></span></dt><dt><span class="sect1"><a href="happy.html#id370057">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="2000users.html">6. A Distributed 2000-User Network</a></span></dt><dd><dl><dt><span class="sect1"><a href="2000users.html#id370394">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="2000users.html#id370419">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="2000users.html#id370476">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="2000users.html#id370722">Technical Issues</a></span></dt><dt><span class="sect2"><a href="2000users.html#id371541">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="2000users.html#id371556">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="2000users.html#id374570">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="2000users.html#id374709">Questions and Answers</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="DMSMig.html">II. Domain Members, Updating Samba and Migration</a></span></dt><dd><dl><dt><span class="chapter"><a href="unixclients.html">7. Adding Domain Member Servers and Clients</a></span></dt><dd><dl><dt><span class="sect1"><a href="unixclients.html#id375489">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="unixclients.html#id375537">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="unixclients.html#id375566">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="unixclients.html#id375589">Technical Issues</a></span></dt><dt><span class="sect2"><a href="unixclients.html#id376189">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="unixclients.html#id376274">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></span></dt><dt><span class="sect2"><a href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a></span></dt><dt><span class="sect2"><a href="unixclients.html#dcwonss">NT4/Samba Domain with Samba Domain Member Server without NSS Support</a></span></dt><dt><span class="sect2"><a href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></span></dt><dt><span class="sect2"><a href="unixclients.html#id382025">UNIX/Linux Client Domain Member</a></span></dt><dt><span class="sect2"><a href="unixclients.html#id382521">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="unixclients.html#id382565">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="upgrades.html">8. Updating Samba-3</a></span></dt><dd><dl><dt><span class="sect1"><a href="upgrades.html#id383639">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrades.html#id383722">Cautions and Notes</a></span></dt></dl></dd><dt><span class="sect1"><a href="upgrades.html#id384934">Upgrading from Samba 1.x and 2.x to Samba-3</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a></span></dt><dt><span class="sect2"><a href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a></span></dt><dt><span class="sect2"><a href="upgrades.html#id385597">Samba-2.x with LDAP Support</a></span></dt></dl></dd><dt><span class="sect1"><a href="upgrades.html#id385712">Updating a Samba-3 Installation</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrades.html#id385807">Samba-3 to Samba-3 Updates on the Same Server</a></span></dt><dt><span class="sect2"><a href="upgrades.html#id385991">Migrating Samba-3 to a New Server</a></span></dt><dt><span class="sect2"><a href="upgrades.html#id386368">Migration of Samba Accounts to Active Directory</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ntmigration.html">9. Migrating NT4 Domain to Samba-3</a></span></dt><dd><dl><dt><span class="sect1"><a href="ntmigration.html#id386514">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntmigration.html#id386589">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntmigration.html#id386640">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntmigration.html#id386802">Technical Issues</a></span></dt><dt><span class="sect2"><a href="ntmigration.html#id387105">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntmigration.html#id387125">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntmigration.html#id387250">NT4 Migration Using LDAP Backend</a></span></dt><dt><span class="sect2"><a href="ntmigration.html#id389442">NT4 Migration Using tdbsam Backend</a></span></dt><dt><span class="sect2"><a href="ntmigration.html#id389787">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntmigration.html#id389822">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="nw4migration.html">10. Migrating NetWare Server to Samba-3</a></span></dt><dd><dl><dt><span class="sect1"><a href="nw4migration.html#id390707">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="nw4migration.html#id390814">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="nw4migration.html#id390913">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="nw4migration.html#id390984">Technical Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="nw4migration.html#id391152">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="nw4migration.html#id391161">NetWare Migration Using LDAP Backend</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="RefSection.html">III. Reference Section</a></span></dt><dd><dl><dt><span class="chapter"><a href="kerberos.html">11. Active Directory, Kerberos, and Security</a></span></dt><dd><dl><dt><span class="sect1"><a href="kerberos.html#id394729">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="kerberos.html#id395316">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="kerberos.html#id395330">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="kerberos.html#id395699">Technical Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="kerberos.html#ch10expl">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="kerberos.html#id397184">Share Access Controls</a></span></dt><dt><span class="sect2"><a href="kerberos.html#id397519">Share Definition Controls</a></span></dt><dt><span class="sect2"><a href="kerberos.html#id398076">Share Point Directory and File Permissions</a></span></dt><dt><span class="sect2"><a href="kerberos.html#id398445">Managing Windows 200x ACLs</a></span></dt><dt><span class="sect2"><a href="kerberos.html#id399129">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="kerberos.html#id399251">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="DomApps.html">12. Integrating Additional Services</a></span></dt><dd><dl><dt><span class="sect1"><a href="DomApps.html#id399839">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="DomApps.html#id399862">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="DomApps.html#id399948">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="DomApps.html#id399977">Technical Issues</a></span></dt><dt><span class="sect2"><a href="DomApps.html#id400123">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="DomApps.html#id400137">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></span></dt><dt><span class="sect2"><a href="DomApps.html#id401888">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="DomApps.html#id401943">Questions and Answers</a></span></dt></dl></dd><dt><span class="chapter"><a href="HA.html">13. Performance, Reliability, and Availability</a></span></dt><dd><dl><dt><span class="sect1"><a href="HA.html#id402421">Introduction</a></span></dt><dt><span class="sect1"><a href="HA.html#id402498">Dissection and Discussion</a></span></dt><dt><span class="sect1"><a href="HA.html#id402949">Guidelines for Reliable Samba Operation</a></span></dt><dd><dl><dt><span class="sect2"><a href="HA.html#id402973">Name Resolution</a></span></dt><dt><span class="sect2"><a href="HA.html#id403415">Samba Configuration</a></span></dt><dt><span class="sect2"><a href="HA.html#id403710">Use and Location of BDCs</a></span></dt><dt><span class="sect2"><a href="HA.html#id403778">Use One Consistent Version of MS Windows Client</a></span></dt><dt><span class="sect2"><a href="HA.html#id403795">For Scalability, Use SAN-Based Storage on Samba Servers</a></span></dt><dt><span class="sect2"><a href="HA.html#id403840">Distribute Network Load with MSDFS</a></span></dt><dt><span class="sect2"><a href="HA.html#id403891">Replicate Data to Conserve Peak-Demand Wide-Area Bandwidth</a></span></dt><dt><span class="sect2"><a href="HA.html#id403932">Hardware Problems</a></span></dt><dt><span class="sect2"><a href="HA.html#id404070">Large Directories</a></span></dt></dl></dd><dt><span class="sect1"><a href="HA.html#id404151">Key Points Learned</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch14.html">14. Samba Support</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch14.html#id404300">Free Support</a></span></dt><dt><span class="sect1"><a href="ch14.html#id404499">Commercial Support</a></span></dt></dl></dd><dt><span class="chapter"><a href="appendix.html">15. A Collection of Useful Tidbits</a></span></dt><dd><dl><dt><span class="sect1"><a href="appendix.html#domjoin">Joining a Domain: Windows 200x/XP Professional</a></span></dt><dt><span class="sect1"><a href="appendix.html#id405157">Samba System File Location</a></span></dt><dt><span class="sect1"><a href="appendix.html#id405549">Starting Samba</a></span></dt><dt><span class="sect1"><a href="appendix.html#id405844">DNS Configuration Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix.html#id405854">The Forward Zone File for the Loopback Adaptor</a></span></dt><dt><span class="sect2"><a href="appendix.html#id405898">The Reverse Zone File for the Loopback Adaptor</a></span></dt><dt><span class="sect2"><a href="appendix.html#id405998">DNS Root Server Hint File</a></span></dt></dl></dd><dt><span class="sect1"><a href="appendix.html#altldapcfg">Alternative LDAP Database Initialization</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix.html#id406053">Initialization of the LDAP Database</a></span></dt></dl></dd><dt><span class="sect1"><a href="appendix.html#id406519">The LDAP Account Manager</a></span></dt><dt><span class="sect1"><a href="appendix.html#id407438">IDEALX Management Console</a></span></dt><dt><span class="sect1"><a href="appendix.html#ch12-SUIDSGID">Effect of Setting File and Directory SUID/SGID Permissions Explained</a></span></dt><dt><span class="sect1"><a href="appendix.html#ch12dblck">Shared Data Integrity</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix.html#id407872">Microsoft Access</a></span></dt><dt><span class="sect2"><a href="appendix.html#id408011">Act! Database Sharing</a></span></dt><dt><span class="sect2"><a href="appendix.html#id408086">Opportunistic Locking Controls</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="primer.html">16. Networking Primer</a></span></dt><dd><dl><dt><span class="sect1"><a href="primer.html#id408228">Requirements and Notes</a></span></dt><dt><span class="sect1"><a href="primer.html#id408364">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="primer.html#id408414">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="primer.html#id408521">Exercises</a></span></dt><dd><dl><dt><span class="sect2"><a href="primer.html#id408634">Single-Machine Broadcast Activity</a></span></dt><dt><span class="sect2"><a href="primer.html#secondmachine">Second Machine Startup Broadcast Interaction</a></span></dt><dt><span class="sect2"><a href="primer.html#id409728">Simple Windows Client Connection Characteristics</a></span></dt><dt><span class="sect2"><a href="primer.html#id410194">Windows 200x/XP Client Interaction with Samba-3</a></span></dt><dt><span class="sect2"><a href="primer.html#id410719">Conclusions to Exercises</a></span></dt></dl></dd><dt><span class="sect1"><a href="primer.html#chap01conc">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="primer.html#id410820">Technical Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="primer.html#chap01qa">Questions and Answers</a></span></dt></dl></dd><dt><span class="appendix"><a href="apa.html">A. 
     <acronym class="acronym">GNU</acronym> General Public License version 3
-  </a></span></dt><dd><dl><dt><span class="bridgehead"><a href="apa.html#id2650989">A. 
+  </a></span></dt><dd><dl><dt><span class="bridgehead"><a href="apa.html#id411425">A. 
     Preamble
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651134">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411534">A. 
     TERMS AND CONDITIONS
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651138">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411537">A. 
     0. Definitions.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651230">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411601">A. 
     1. Source Code.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651329">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411663">A. 
     2. Basic Permissions.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651369">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411691">A. 
     3. Protecting Users&#8217; Legal Rights From Anti-Circumvention Law.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651409">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411717">A. 
     4. Conveying Verbatim Copies.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651436">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411737">A. 
     5. Conveying Modified Source Versions.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651532">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411809">A. 
     6. Conveying Non-Source Forms.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651722">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id411941">A. 
      7. Additional Terms.
-   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651857">A. 
+   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412046">A. 
      8. Termination.
-   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651901">A. 
+   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412078">A. 
      9. Acceptance Not Required for Having Copies.
-   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651920">A. 
+   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412092">A. 
      10. Automatic Licensing of Downstream Recipients.
-   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2651972">A. 
+   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412126">A. 
     11. Patents.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2652108">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412210">A. 
     12. No Surrender of Others&#8217; Freedom.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2652130">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412225">A. 
     13. Use with the ???TITLE??? Affero General Public License.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2652159">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412249">A. 
     14. Revised Versions of this License.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2652221">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412296">A. 
     15. Disclaimer of Warranty.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2652247">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412314">A. 
     16. Limitation of Liability.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2652268">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412328">A. 
     17. Interpretation of Sections 15 and 16.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2652284">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412341">A. 
     END OF TERMS AND CONDITIONS
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2652288">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id412344">A. 
     How to Apply These Terms to Your New Programs
   </a></span></dt></dl></dd></dl></dd><dt><span class="glossary"><a href="go01.html">Glossary</a></span></dt><dt><span class="index"><a href="ix01.html">Index</a></span></dt></dl></div><div class="list-of-figures"><p><b>List of Figures</b></p><dl><dt>1.1. <a href="simple.html#charitynet">Charity Administration Office Network</a></dt><dt>1.2. <a href="simple.html#acctingnet2">Accounting Office Network Topology</a></dt><dt>2.1. <a href="small.html#acct2net">Abmas Accounting  52-User Network Topology</a></dt><dt>3.1. <a href="secure.html#ch04net">Abmas Network Topology  130 Users</a></dt><dt>4.1. <a href="Big500users.html#chap05net">Network Topology  500 User Network Using tdbsam passdb backend.</a></dt><dt>5.1. <a href="happy.html#sbehap-LDAPdiag">The Interaction of LDAP, UNIX Posix Accounts and Samba Accounts</a></dt><dt>5.2. <a href="happy.html#chap6net">Network Topology  500 User Network Using ldapsam passdb backend</a></dt><dt>5.3. <a href="happy.html#XP-screen001">Windows XP Professional  User Shared Folders</a></dt><dt>6.1. <a href="2000users.html#chap7idres">Samba and Authentication Backend Search Pathways</a></dt><dt>6.2. <a href="2000users.html#ch7singleLDAP">Samba Configuration to Use a Single LDAP Server</a></dt><dt>6.3. <a href="2000users.html#ch7dualLDAP">Samba Configuration to Use a Dual (Fail-over) LDAP Server</a></dt><dt>6.4. <a href="2000users.html#ch7dualadd">Samba Configuration to Use Dual LDAP Databases - Broken - Do Not Use!</a></dt><dt>6.5. <a href="2000users.html#ch7dualok">Samba Configuration to Use Two LDAP Databases - The result is additive.</a></dt><dt>6.6. <a href="2000users.html#chap7net">Network Topology  2000 User Complex Design A</a></dt><dt>6.7. <a href="2000users.html#chap7net2">Network Topology  2000 User Complex Design B</a></dt><dt>7.1. <a href="unixclients.html#ch09openmag">Open Magazine Samba Survey</a></dt><dt>7.2. <a href="unixclients.html#ch9-sambadc">Samba Domain: Samba Member Server</a></dt><dt>7.3. <a href="unixclients.html#ch9-adsdc">Active Directory Domain: Samba Member Server</a></dt><dt>9.1. <a href="ntmigration.html#ch8-migration">Schematic Explaining the <code class="literal">net rpc vampire</code> Process</a></dt><dt>9.2. <a href="ntmigration.html#NT4DUM">View of Accounts in NT4 Domain User Manager</a></dt><dt>15.1. <a href="appendix.html#swxpp001">The General Panel.</a></dt><dt>15.2. <a href="appendix.html#swxpp004">The Computer Name Panel.</a></dt><dt>15.3. <a href="appendix.html#swxpp006">The Computer Name Changes Panel</a></dt><dt>15.4. <a href="appendix.html#swxpp007">The Computer Name Changes Panel  Domain MIDEARTH</a></dt><dt>15.5. <a href="appendix.html#swxpp008">Computer Name Changes  User name and Password Panel</a></dt><dt>15.6. <a href="appendix.html#lam-login">The LDAP Account Manager Login Screen</a></dt><dt>15.7. <a href="appendix.html#lam-config">The LDAP Account Manager Configuration Screen</a></dt><dt>15.8. <a href="appendix.html#lam-user">The LDAP Account Manager User Edit Screen</a></dt><dt>15.9. <a href="appendix.html#lam-group">The LDAP Account Manager Group Edit Screen</a></dt><dt>15.10. <a href="appendix.html#lam-group-mem">The LDAP Account Manager Group Membership Edit Screen</a></dt><dt>15.11. <a href="appendix.html#lam-host">The LDAP Account Manager Host Edit Screen</a></dt><dt>15.12. <a href="appendix.html#imcidealx">The IMC Samba User Account Screen</a></dt><dt>16.1. <a href="primer.html#pktcap01">Windows Me  Broadcasts  The First 10 Minutes</a></dt><dt>16.2. <a href="primer.html#pktcap02">Windows Me  Later Broadcast Sample</a></dt><dt>16.3. <a href="primer.html#hostannounce">Typical Windows 9x/Me Host Announcement</a></dt><dt>16.4. <a href="primer.html#nullconnect">Typical Windows 9x/Me NULL SessionSetUp AndX Request</a></dt><dt>16.5. <a href="primer.html#userconnect">Typical Windows 9x/Me User SessionSetUp AndX Request</a></dt><dt>16.6. <a href="primer.html#XPCap01">Typical Windows XP NULL Session Setup AndX Request</a></dt><dt>16.7. <a href="primer.html#XPCap02">Typical Windows XP User Session Setup AndX Request</a></dt></dl></div><div class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>1. <a href="preface.html#pref-new">Samba Changes  3.0.2 to 3.0.20</a></dt><dt>1.1. <a href="simple.html#acctingnet">Accounting Office Network Information</a></dt><dt>3.1. <a href="secure.html#chap4netid">Abmas.US ISP Information</a></dt><dt>3.2. <a href="secure.html#namedrscfiles">DNS (named) Resource Files</a></dt><dt>4.1. <a href="Big500users.html#ch5-filelocations">Domain: <code class="constant">MEGANET</code>, File Locations for Servers</a></dt><dt>5.1. <a href="happy.html#sbehap-privs">Current Privilege Capabilities</a></dt><dt>5.2. <a href="happy.html#oldapreq">Required OpenLDAP Linux Packages</a></dt><dt>5.3. <a href="happy.html#sbehap-bigacct">Abmas Network Users and Groups</a></dt><dt>5.4. <a href="happy.html#proffold">Default Profile Redirections</a></dt><dt>9.1. <a href="ntmigration.html#ch8-vampire">Samba <code class="filename">smb.conf</code> Scripts Essential to Samba Operation</a></dt><dt>13.1. <a href="HA.html#ProbList">Effect of Common Problems</a></dt><dt>16.1. <a href="primer.html#capsstats01">Windows Me  Startup Broadcast Capture Statistics</a></dt><dt>16.2. <a href="primer.html#capsstats02">Second Machine (Windows 98)  Capture Statistics</a></dt></dl></div><div class="list-of-examples"><p><b>List of Examples</b></p><dl><dt>1.1. <a href="simple.html#draft-smbconf">Drafting Office <code class="filename">smb.conf</code> File</a></dt><dt>1.2. <a href="simple.html#charity-smbconfnew">Charity Administration Office <code class="filename">smb.conf</code> New-style File</a></dt><dt>1.3. <a href="simple.html#charity-smbconf">Charity Administration Office <code class="filename">smb.conf</code> Old-style File</a></dt><dt>1.4. <a href="simple.html#MEreg">Windows Me  Registry Edit File: Disable Password Caching</a></dt><dt>1.5. <a href="simple.html#acctconf">Accounting Office Network <code class="filename">smb.conf</code> Old Style Configuration File</a></dt><dt>2.1. <a href="small.html#initGrps">Script to Map Windows NT Groups to UNIX Groups</a></dt><dt>2.2. <a href="small.html#dhcp01">Abmas Accounting DHCP Server Configuration File  <code class="filename">/etc/dhcpd.conf</code></a></dt><dt>2.3. <a href="small.html#acct2conf">Accounting Office Network <code class="filename">smb.conf</code> File  [globals] Section</a></dt><dt>2.4. <a href="small.html#acct3conf">Accounting Office Network <code class="filename">smb.conf</code> File  Services and Shares Section</a></dt><dt>3.1. <a href="secure.html#ch4memoryest">Estimation of Memory Requirements</a></dt><dt>3.2. <a href="secure.html#ch4diskest">Estimation of Disk Storage Requirements</a></dt><dt>3.3. <a href="secure.html#ch4natfw">NAT Firewall Configuration Script</a></dt><dt>3.4. <a href="secure.html#promisnet">130 User Network with <span class="emphasis"><em>tdbsam</em></span>  [globals] Section</a></dt><dt>3.5. <a href="secure.html#promisnetsvca">130 User Network with <span class="emphasis"><em>tdbsam</em></span>  Services Section Part A</a></dt><dt>3.6. <a href="secure.html#promisnetsvcb">130 User Network with <span class="emphasis"><em>tdbsam</em></span>  Services Section Part B</a></dt><dt>3.7. <a href="secure.html#ch4initGrps">Script to Map Windows NT Groups to UNIX Groups</a></dt><dt>3.8. <a href="secure.html#prom-dhcp">DHCP Server Configuration File  <code class="filename">/etc/dhcpd.conf</code></a></dt><dt>3.9. <a href="secure.html#ch4namedcfg">DNS Master Configuration File  <code class="filename">/etc/named.conf</code> Master Section</a></dt><dt>3.10. <a href="secure.html#ch4namedvarfwd">DNS Master Configuration File  <code class="filename">/etc/named.conf</code> Forward Lookup Definition Section</a></dt><dt>3.11. <a href="secure.html#ch4namedvarrev">DNS Master Configuration File  <code class="filename">/etc/named.conf</code> Reverse Lookup Definition Section</a></dt><dt>3.12. <a href="secure.html#eth1zone">DNS 192.168.1 Reverse Zone File</a></dt><dt>3.13. <a href="secure.html#eth2zone">DNS 192.168.2 Reverse Zone File</a></dt><dt>3.14. <a href="secure.html#abmasbiz">DNS Abmas.biz Forward Zone File</a></dt><dt>3.15. <a href="secure.html#abmasus">DNS Abmas.us Forward Zone File</a></dt><dt>4.1. <a href="Big500users.html#ch5-massivesmb">Server: MASSIVE (PDC), File: <code class="filename">/etc/samba/smb.conf</code></a></dt><dt>4.2. <a href="Big500users.html#ch5-dc-common">Server: MASSIVE (PDC), File: <code class="filename">/etc/samba/dc-common.conf</code></a></dt><dt>4.3. <a href="Big500users.html#ch5-commonsmb">Common Samba Configuration File: <code class="filename">/etc/samba/common.conf</code></a></dt><dt>4.4. <a href="Big500users.html#ch5-bldg1-smb">Server: BLDG1 (Member), File: smb.conf</a></dt><dt>4.5. <a href="Big500users.html#ch5-bldg2-smb">Server: BLDG2 (Member), File: smb.conf</a></dt><dt>4.6. <a href="Big500users.html#ch5-dommem-smb">Common Domain Member Include File: dom-mem.conf</a></dt><dt>4.7. <a href="Big500users.html#massive-dhcp">Server: MASSIVE, File: dhcpd.conf</a></dt><dt>4.8. <a href="Big500users.html#bldg1dhcp">Server: BLDG1, File: dhcpd.conf</a></dt><dt>4.9. <a href="Big500users.html#bldg2dhcp">Server: BLDG2, File: dhcpd.conf</a></dt><dt>4.10. <a href="Big500users.html#massive-nameda">Server: MASSIVE, File: named.conf, Part: A</a></dt><dt>4.11. <a href="Big500users.html#massive-namedb">Server: MASSIVE, File: named.conf, Part: B</a></dt><dt>4.12. <a href="Big500users.html#massive-namedc">Server: MASSIVE, File: named.conf, Part: C</a></dt><dt>4.13. <a href="Big500users.html#abmasbizdns">Forward Zone File: abmas.biz.hosts</a></dt><dt>4.14. <a href="Big500users.html#abmasusdns">Forward Zone File: abmas.biz.hosts</a></dt><dt>4.15. <a href="Big500users.html#bldg12nameda">Servers: BLDG1/BLDG2, File: named.conf, Part: A</a></dt><dt>4.16. <a href="Big500users.html#bldg12namedb">Servers: BLDG1/BLDG2, File: named.conf, Part: B</a></dt><dt>4.17. <a href="Big500users.html#ch5-initgrps">Initialize Groups Script, File: /etc/samba/initGrps.sh</a></dt><dt>5.1. <a href="happy.html#sbehap-dbconf">LDAP DB_CONFIG File</a></dt><dt>5.2. <a href="happy.html#sbehap-slapdconf">LDAP Master Configuration File  <code class="filename">/etc/openldap/slapd.conf</code> Part A</a></dt><dt>5.3. <a href="happy.html#sbehap-slapdconf2">LDAP Master Configuration File  <code class="filename">/etc/openldap/slapd.conf</code> Part B</a></dt><dt>5.4. <a href="happy.html#sbehap-nss01">Configuration File for NSS LDAP Support  <code class="filename">/etc/ldap.conf</code></a></dt><dt>5.5. <a href="happy.html#sbehap-nss02">Configuration File for NSS LDAP Clients Support  <code class="filename">/etc/ldap.conf</code></a></dt><dt>5.6. <a href="happy.html#sbehap-massive-smbconfa">LDAP Based <code class="filename">smb.conf</code> File, Server: MASSIVE  global Section: Part A</a></dt><dt>5.7. <a href="happy.html#sbehap-massive-smbconfb">LDAP Based <code class="filename">smb.conf</code> File, Server: MASSIVE  global Section: Part B</a></dt><dt>5.8. <a href="happy.html#sbehap-bldg1-smbconf">LDAP Based <code class="filename">smb.conf</code> File, Server: BLDG1</a></dt><dt>5.9. <a href="happy.html#sbehap-bldg2-smbconf">LDAP Based <code class="filename">smb.conf</code> File, Server: BLDG2</a></dt><dt>5.10. <a href="happy.html#sbehap-shareconfa">LDAP Based <code class="filename">smb.conf</code> File, Shares Section  Part A</a></dt><dt>5.11. <a href="happy.html#sbehap-shareconfb">LDAP Based <code class="filename">smb.conf</code> File, Shares Section  Part B</a></dt><dt>5.12. <a href="happy.html#sbehap-ldifadd">LDIF IDMAP Add-On Load File  File: /etc/openldap/idmap.LDIF</a></dt><dt>6.1. <a href="2000users.html#ch7-LDAP-master">LDAP Master Server Configuration File  <code class="filename">/etc/openldap/slapd.conf</code></a></dt><dt>6.2. <a href="2000users.html#ch7-LDAP-slave">LDAP Slave Configuration File  <code class="filename">/etc/openldap/slapd.conf</code></a></dt><dt>6.3. <a href="2000users.html#ch7-massmbconfA">Primary Domain Controller <code class="filename">smb.conf</code> File  Part A</a></dt><dt>6.4. <a href="2000users.html#ch7-massmbconfB">Primary Domain Controller <code class="filename">smb.conf</code> File  Part B</a></dt><dt>6.5. <a href="2000users.html#ch7-massmbconfC">Primary Domain Controller <code class="filename">smb.conf</code> File  Part C</a></dt><dt>6.6. <a href="2000users.html#ch7-slvsmbocnfA">Backup Domain Controller <code class="filename">smb.conf</code> File  Part A</a></dt><dt>6.7. <a href="2000users.html#ch7-slvsmbocnfB">Backup Domain Controller <code class="filename">smb.conf</code> File  Part B</a></dt><dt>7.1. <a href="unixclients.html#ch9-sdmsdc">Samba Domain Member in Samba Domain Using LDAP  <code class="filename">smb.conf</code> File</a></dt><dt>7.2. <a href="unixclients.html#ch9-ldifadd">LDIF IDMAP Add-On Load File  File: /etc/openldap/idmap.LDIF</a></dt><dt>7.3. <a href="unixclients.html#ch9-sdmlcnf">Configuration File for NSS LDAP Support  <code class="filename">/etc/ldap.conf</code></a></dt><dt>7.4. <a href="unixclients.html#ch9-sdmnss">NSS using LDAP for Identity Resolution  File: <code class="filename">/etc/nsswitch.conf</code></a></dt><dt>7.5. <a href="unixclients.html#ch0-NT4DSDM">Samba Domain Member Server Using Winbind <code class="filename">smb.conf</code> File for NT4 Domain</a></dt><dt>7.6. <a href="unixclients.html#ch0-NT4DSCM">Samba Domain Member Server Using Local Accounts <code class="filename">smb.conf</code> File for NT4 Domain</a></dt><dt>7.7. <a href="unixclients.html#ch9-adssdm">Samba Domain Member <code class="filename">smb.conf</code> File for Active Directory Membership</a></dt><dt>7.8. <a href="unixclients.html#sbe-idmapridex">Example <code class="filename">smb.conf</code> File Using <code class="constant">idmap_rid</code></a></dt><dt>7.9. <a href="unixclients.html#sbeunxa">Typical ADS Style Domain <code class="filename">smb.conf</code> File</a></dt><dt>7.10. <a href="unixclients.html#sbewinbindex">ADS Membership Using RFC2307bis Identity Resolution <code class="filename">smb.conf</code> File</a></dt><dt>7.11. <a href="unixclients.html#ch9-pamwnbdlogin">SUSE: PAM <code class="filename">login</code> Module Using Winbind</a></dt><dt>7.12. <a href="unixclients.html#ch9-pamwbndxdm">SUSE: PAM <code class="filename">xdm</code> Module Using Winbind</a></dt><dt>7.13. <a href="unixclients.html#ch9-rhsysauth">Red Hat 9: PAM System Authentication File: <code class="filename">/etc/pam.d/system-auth</code> Module Using Winbind</a></dt><dt>9.1. <a href="ntmigration.html#sbent4smb">NT4 Migration Samba-3 Server <code class="filename">smb.conf</code>  Part: A</a></dt><dt>9.2. <a href="ntmigration.html#sbent4smb2">NT4 Migration Samba-3 Server <code class="filename">smb.conf</code>  Part: B</a></dt><dt>9.3. <a href="ntmigration.html#sbentslapd">NT4 Migration LDAP Server Configuration File: <code class="filename">/etc/openldap/slapd.conf</code>  Part A</a></dt><dt>9.4. <a href="ntmigration.html#sbentslapd2">NT4 Migration LDAP Server Configuration File: <code class="filename">/etc/openldap/slapd.conf</code>  Part B</a></dt><dt>9.5. <a href="ntmigration.html#sbrntldapconf">NT4 Migration NSS LDAP File: <code class="filename">/etc/ldap.conf</code></a></dt><dt>9.6. <a href="ntmigration.html#sbentnss">NT4 Migration NSS Control File: <code class="filename">/etc/nsswitch.conf</code> (Stage:1)</a></dt><dt>9.7. <a href="ntmigration.html#sbentnss2">NT4 Migration NSS Control File: <code class="filename">/etc/nsswitch.conf</code> (Stage:2)</a></dt><dt>10.1. <a href="nw4migration.html#sbeamg">A Rough Tool to Create an LDIF File from the System Account Files</a></dt><dt>10.2. <a href="nw4migration.html#ch8ldap">NSS LDAP Control File  /etc/ldap.conf</a></dt><dt>10.3. <a href="nw4migration.html#sbepu2">The PAM Control File <code class="filename">/etc/security/pam_unix2.conf</code></a></dt><dt>10.4. <a href="nw4migration.html#ch8smbconf">Samba Configuration File  smb.conf Part A</a></dt><dt>10.5. <a href="nw4migration.html#ch8smbconf2">Samba Configuration File  smb.conf Part B</a></dt><dt>10.6. <a href="nw4migration.html#ch8smbconf3">Samba Configuration File  smb.conf Part C</a></dt><dt>10.7. <a href="nw4migration.html#ch8smbconf4">Samba Configuration File  smb.conf Part D</a></dt><dt>10.8. <a href="nw4migration.html#ch8smbconf5">Samba Configuration File  smb.conf Part E</a></dt><dt>10.9. <a href="nw4migration.html#sbersync">Rsync Script</a></dt><dt>10.10. <a href="nw4migration.html#sbexcld">Rsync Files Exclusion List  <code class="filename">/root/excludes.txt</code></a></dt><dt>10.11. <a href="nw4migration.html#ch8ideal">Idealx smbldap-tools Control File  Part A</a></dt><dt>10.12. <a href="nw4migration.html#ch8ideal2">Idealx smbldap-tools Control File  Part B</a></dt><dt>10.13. <a href="nw4migration.html#ch8ideal3">Idealx smbldap-tools Control File  Part C</a></dt><dt>10.14. <a href="nw4migration.html#ch8ideal4">Idealx smbldap-tools Control File  Part D</a></dt><dt>10.15. <a href="nw4migration.html#ch8kix">Kixtart Control File  File: logon.kix</a></dt><dt>10.16. <a href="nw4migration.html#ch8kix2">Kixtart Control File  File: main.kix</a></dt><dt>10.17. <a href="nw4migration.html#ch8kix3">Kixtart Control File  File: setup.kix, Part A</a></dt><dt>10.18. <a href="nw4migration.html#ch8kix3b">Kixtart Control File  File: setup.kix, Part B</a></dt><dt>10.19. <a href="nw4migration.html#ch8kix4">Kixtart Control File  File: acct.kix</a></dt><dt>12.1. <a href="DomApps.html#ch10-krb5conf">Kerberos Configuration  File: <code class="filename">/etc/krb5.conf</code></a></dt><dt>12.2. <a href="DomApps.html#ch10-smbconf">Samba Configuration  File: <code class="filename">/etc/samba/smb.conf</code></a></dt><dt>12.3. <a href="DomApps.html#ch10-etcnsscfg">NSS Configuration File Extract  File: <code class="filename">/etc/nsswitch.conf</code></a></dt><dt>12.4. <a href="DomApps.html#etcsquidcfg">Squid Configuration File Extract  <code class="filename">/etc/squid.conf</code> [ADMINISTRATIVE PARAMETERS Section]</a></dt><dt>12.5. <a href="DomApps.html#etcsquid2">Squid Configuration File extract  File: <code class="filename">/etc/squid.conf</code> [AUTHENTICATION PARAMETERS Section]</a></dt><dt>15.1. <a href="appendix.html#ch12SL">A Useful Samba Control Script for SUSE Linux</a></dt><dt>15.2. <a href="appendix.html#ch12RHscript">A Sample Samba Control Script for Red Hat Linux</a></dt><dt>15.3. <a href="appendix.html#loopback">DNS Localhost Forward Zone File: <code class="filename">/var/lib/named/localhost.zone</code></a></dt><dt>15.4. <a href="appendix.html#dnsloopy">DNS Localhost Reverse Zone File: <code class="filename">/var/lib/named/127.0.0.zone</code></a></dt><dt>15.5. <a href="appendix.html#roothint">DNS Root Name Server Hint File: <code class="filename">/var/lib/named/root.hint</code></a></dt><dt>15.6. <a href="appendix.html#sbehap-ldapreconfa">LDAP Pre-configuration Script: <code class="filename">SMBLDAP-ldif-preconfig.sh</code>  Part A</a></dt><dt>15.7. <a href="appendix.html#sbehap-ldapreconfb">LDAP Pre-configuration Script: <code class="filename">SMBLDAP-ldif-preconfig.sh</code>  Part B</a></dt><dt>15.8. <a href="appendix.html#sbehap-ldapreconfc">LDAP Pre-configuration Script: <code class="filename">SMBLDAP-ldif-preconfig.sh</code>  Part C</a></dt><dt>15.9. <a href="appendix.html#sbehap-ldifpata">LDIF Pattern File Used to Pre-configure LDAP  Part A</a></dt><dt>15.10. <a href="appendix.html#sbehap-ldifpatb">LDIF Pattern File Used to Pre-configure LDAP  Part B</a></dt><dt>15.11. <a href="appendix.html#lamcfg">Example LAM Configuration File  <code class="filename">config.cfg</code></a></dt><dt>15.12. <a href="appendix.html#lamconf">LAM Profile Control File  <code class="filename">lam.conf</code></a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="pr01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"> </td><td width="40%" align="right" valign="top"> About the Cover Artwork</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/ix01.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/ix01.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/ix01.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1 +1 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Index</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="index.html" title="Samba-3 by Example"><link rel="prev" href="go01.html" title="Glossary"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Index</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="go01.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> </td></tr></table><hr></div><div class="index"><div class="titlepage"><div><div><h2 class="title"><a name="id2652979"></a>Index</h2></div></div></div><div class="index"><div class="indexdiv"><h3>Symbols</h3><dl><dt>%LOGONSERVER%, <a class="indexterm" href="happy.html#redirfold">Configuration of Default Profile with Folder Redirection</a></dt><dt>%USERNAME%, <a class="indexterm" href="happy.html#id2594521">Roaming Profile Background</a>, <a class="indexterm" href="happy.html#id2594822">Profile Changes</a></dt><dt>%USERPROFILE%, <a class="indexterm" href="happy.html#redirfold">Configuration of Default Profile with Folder Redirection</a></dt><dt>/data/ldap, <a class="indexterm" href="happy.html#ldapsetup">OpenLDAP Server Configuration</a></dt><dt>/etc/cups/mime.convs, <a class="indexterm" href="simple.html#id2573211">Implementation</a>, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a></dt><dt>/etc/cups/mime.types, <a class="indexterm" href="simple.html#id2573211">Implementation</a>, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a></dt><dt>/etc/dhcpd.conf, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="small.html#id2579091">Validation</a>, <a class="indexterm" href="secure.html#ch4dhcpdns">Configuration of DHCP and DNS Servers</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a></dt><dt>/etc/exports, <a class="indexterm" href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a></dt><dt>/etc/group, <a class="indexterm" href="happy.html#id2594009">Technical Issues</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="upgrades.html#id2622886">Replacing a Domain Member Server</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a>, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></dt><dt>/etc/hosts, <a class="indexterm" href="simple.html#id2572242">Implementation</a>, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#ch4bsc">Basic System Configuration</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a>, <a class="indexterm" href="Big500users.html#id2588515">Server Preparation: All Servers</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="DomApps.html#id2638873">Kerberos Configuration</a>, <a class="indexterm" href="HA.html#id2641653">Bad Hostnames</a></dt><dt>/etc/krb5.conf, <a class="indexterm" href="unixclients.html#id2617533">IDMAP Storage in LDAP using Winbind</a>, <a class="indexterm" href="DomApps.html#id2638873">Kerberos Configuration</a></dt><dt>/etc/ldap.conf, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a>, <a class="indexterm" href="unixclients.html#id2617533">IDMAP Storage in LDAP using Winbind</a>, <a class="indexterm" href="unixclients.html#id2618127">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a>, <a class="indexterm" href="ntmigration.html#id2624277">NT4 Migration Using LDAP Backend</a>, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>/etc/mime.convs, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#ch4ptrcfg">Printer Configuration</a>, <a class="indexterm" href="Big500users.html#id2588515">Server Preparation: All Servers</a>, <a class="indexterm" href="happy.html#sbehap-ptrcfg">Printer Configuration</a></dt><dt>/etc/mime.types, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#ch4ptrcfg">Printer Configuration</a>, <a class="indexterm" href="Big500users.html#id2588515">Server Preparation: All Servers</a>, <a class="indexterm" href="happy.html#sbehap-ptrcfg">Printer Configuration</a></dt><dt>/etc/named.conf, <a class="indexterm" href="secure.html#ch4dhcpdns">Configuration of DHCP and DNS Servers</a></dt><dt>/etc/nsswitch.conf, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#ch4dhcpdns">Configuration of DHCP and DNS Servers</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a>, <a class="indexterm" href="Big500users.html#id2589093">Configuration for Server: MASSIVE</a>, <a class="indexterm" href="Big500users.html#ch5-domsvrspec">Configuration Specific to Domain Member Servers: BLDG1, BLDG2</a>, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="unixclients.html#id2616929">IDMAP_RID with Winbind</a>, <a class="indexterm" href="unixclients.html#id2618127">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="ntmigration.html#id2624277">NT4 Migration Using LDAP Backend</a></dt><dt>/etc/openldap/slapd.conf, <a class="indexterm" href="happy.html#id2595399">Debugging LDAP</a>, <a class="indexterm" href="happy.html#ldapsetup">OpenLDAP Server Configuration</a>, <a class="indexterm" href="2000users.html#id2607228">Implementation</a></dt><dt>/etc/passwd, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#id2582155">Samba Configuration</a>, <a class="indexterm" href="Big500users.html#id2589093">Configuration for Server: MASSIVE</a>, <a class="indexterm" href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="upgrades.html#id2622886">Replacing a Domain Member Server</a>, <a class="indexterm" href="ntmigration.html#id2623787">Technical Issues</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a>, <a class="indexterm" href="nw4migration.html#id2628462">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id2636393">Share Point Directory and File Permissions</a>, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a>, <a class="indexterm" href="primer.html#id2649376">Findings and Comments</a></dt><dt>/etc/rc.d/boot.local, <a class="indexterm" href="secure.html#ch4bsc">Basic System Configuration</a>, <a class="indexterm" href="Big500users.html#id2589093">Configuration for Server: MASSIVE</a></dt><dt>/etc/rc.d/rc.local, <a class="indexterm" href="small.html#id2577390">Implementation</a></dt><dt>/etc/resolv.conf, <a class="indexterm" href="secure.html#ch4dhcpdns">Configuration of DHCP and DNS Servers</a>, <a class="indexterm" href="Big500users.html#id2588515">Server Preparation: All Servers</a></dt><dt>/etc/samba, <a class="indexterm" href="appendix.html#id2644049">Samba System File Location</a></dt><dt>/etc/samba/secrets.tdb, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></dt><dt>/etc/samba/smbusers, <a class="indexterm" href="Big500users.html#id2588515">Server Preparation: All Servers</a></dt><dt>/etc/shadow, <a class="indexterm" href="upgrades.html#id2622886">Replacing a Domain Member Server</a>, <a class="indexterm" href="nw4migration.html#id2628462">Technical Issues</a></dt><dt>/etc/squid/squid.conf, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></dt><dt>/etc/syslog.conf, <a class="indexterm" href="happy.html#id2595399">Debugging LDAP</a></dt><dt>/etc/xinetd.d, <a class="indexterm" href="secure.html#procstart">Process Startup Configuration</a>, <a class="indexterm" href="Big500users.html#ch5-procstart">Process Startup Configuration</a></dt><dt>/lib/libnss_ldap.so.2, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a></dt><dt>/opt/IDEALX/sbin, <a class="indexterm" href="ntmigration.html#id2624277">NT4 Migration Using LDAP Backend</a></dt><dt>/proc/sys/net/ipv4/ip_forward, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#ch4bsc">Basic System Configuration</a></dt><dt>/usr/bin, <a class="indexterm" href="appendix.html#id2644049">Samba System File Location</a></dt><dt>/usr/lib/samba, <a class="indexterm" href="appendix.html#id2644049">Samba System File Location</a></dt><dt>/usr/local, <a class="indexterm" href="appendix.html#id2644049">Samba System File Location</a></dt><dt>/usr/local/samba, <a class="indexterm" href="appendix.html#id2644049">Samba System File Location</a></dt><dt>/usr/local/samba/var/locks, <a class="indexterm" href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a></dt><dt>/usr/sbin, <a class="indexterm" href="appendix.html#id2644049">Samba System File Location</a></dt><dt>/usr/share, <a class="indexterm" href="appendix.html#id2644049">Samba System File Location</a></dt><dt>/usr/share/samba/swat, <a class="indexterm" href="appendix.html#id2644049">Samba System File Location</a></dt><dt>/usr/share/swat, <a class="indexterm" href="appendix.html#id2644049">Samba System File Location</a></dt><dt>/var/cache/samba, <a class="indexterm" href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a></dt><dt>/var/lib/samba, <a class="indexterm" href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a>, <a class="indexterm" href="appendix.html#id2644049">Samba System File Location</a></dt><dt>/var/log/ldaplogs, <a class="indexterm" href="happy.html#id2595399">Debugging LDAP</a></dt><dt>/var/log/samba, <a class="indexterm" href="appendix.html#id2644049">Samba System File Location</a></dt><dt>8-bit, <a class="indexterm" href="upgrades.html#id2621512">International Language Support</a></dt></dl></div><div class="indexdiv"><h3></h3><dl><dt>, <a class="indexterm" href="simple.html#id2572242">Implementation</a>, <a class="indexterm" href="simple.html#id2573211">Implementation</a>, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a>, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#id2582155">Samba Configuration</a>, <a class="indexterm" href="secure.html#ch4appscfg">Application Share Configuration</a>, <a class="indexterm" href="Big500users.html#id2587786">Implementation</a>, <a class="indexterm" href="happy.html#sbehap-ppc">Addition of Machines to the Domain</a>, <a class="indexterm" href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a>, <a class="indexterm" href="happy.html#sbehap-bldg1">Samba-3 BDC Configuration</a>, <a class="indexterm" href="2000users.html#id2607228">Implementation</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="unixclients.html#dcwonss">NT4/Samba Domain with Samba Domain Member Server without NSS Support</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="unixclients.html#id2616929">IDMAP_RID with Winbind</a>, <a class="indexterm" href="unixclients.html#id2617533">IDMAP Storage in LDAP using Winbind</a>, <a class="indexterm" href="unixclients.html#id2618127">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a>, <a class="indexterm" href="upgrades.html#sbeug1">Location of config files</a>, <a class="indexterm" href="ntmigration.html#id2624277">NT4 Migration Using LDAP Backend</a>, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a>, <a class="indexterm" href="DomApps.html#id2639814">NSS Configuration</a></dt><dd><dl><dt>Domain account, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>liability, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>logon, <a class="indexterm" href="simple.html#id2573211">Implementation</a></dt><dt>problem, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>transparent inter-operability, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt></dl></dd></dl></div><div class="indexdiv"><h3>A</h3><dl><dt>abmas-netfw.sh, <a class="indexterm" href="secure.html#ch4bsc">Basic System Configuration</a></dt><dt>accept, <a class="indexterm" href="secure.html#ch4ptrcfg">Printer Configuration</a></dt><dt>accepts liability, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>access, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id2635920">Checkpoint Controls</a></dt><dt>access control, <a class="indexterm" href="kerberos.html#id2635086">Kerberos Exposed</a>, <a class="indexterm" href="kerberos.html#id2636851">Using the MMC Computer Management Interface</a></dt><dt>Access Control Lists (see ACLs)</dt><dt>access control settings, <a class="indexterm" href="kerberos.html#id2635432">Share Access Controls</a></dt><dt>access controls, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id2635780">Share Definition Controls</a></dt><dt>accessible, <a class="indexterm" href="kerberos.html#id2636393">Share Point Directory and File Permissions</a></dt><dt>account, <a class="indexterm" href="happy.html#id2593176">Regarding LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="kerberos.html#id2635432">Share Access Controls</a></dt><dd><dl><dt>ADS Domain, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt></dl></dd><dt>account credentials, <a class="indexterm" href="primer.html#id2649376">Findings and Comments</a></dt><dt>account information, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>account names, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>account policies, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt><dt>accountable, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a>, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>accounts</dt><dd><dl><dt>authoritative, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a></dt><dt>Domain, <a class="indexterm" href="ntmigration.html#id2623461">Introduction</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>group, <a class="indexterm" href="ntmigration.html#id2623461">Introduction</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>machine, <a class="indexterm" href="ntmigration.html#id2623461">Introduction</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>manage, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt><dt>user, <a class="indexterm" href="ntmigration.html#id2623461">Introduction</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt></dl></dd><dt>ACL, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a>, <a class="indexterm" href="kerberos.html#id2635920">Checkpoint Controls</a></dt><dt>ACLs, <a class="indexterm" href="happy.html#id2605358">Key Points Learned</a>, <a class="indexterm" href="kerberos.html#id2635432">Share Access Controls</a>, <a class="indexterm" href="kerberos.html#id2635780">Share Definition Controls</a></dt><dt>acquisitions, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>Act!, <a class="indexterm" href="appendix.html#ch12dblck">Shared Data Integrity</a></dt><dt>ACT! database, <a class="indexterm" href="appendix.html#id2647278">Act! Database Sharing</a></dt><dt>Act!Diag, <a class="indexterm" href="appendix.html#id2647278">Act! Database Sharing</a></dt><dt>Active Directory, <a class="indexterm" href="happy.html#id2593552">Dissection and Discussion</a>, <a class="indexterm" href="happy.html#sbehap-locgrppol">The Local Group Policy</a>, <a class="indexterm" href="2000users.html#id2605993">Dissection and Discussion</a>, <a class="indexterm" href="unixclients.html#id2611445">Assignment Tasks</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="unixclients.html#id2616929">IDMAP_RID with Winbind</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a>, <a class="indexterm" href="kerberos.html#id2637523">Key Points Learned</a>, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a>, <a class="indexterm" href="DomApps.html">Integrating Additional Services</a>, <a class="indexterm" href="DomApps.html#id2638317">Assignment Tasks</a>, <a class="indexterm" href="DomApps.html#id2638451">Technical Issues</a>, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a>, <a class="indexterm" href="appendix.html#domjoin">Joining a Domain: Windows 200x/XP Professional</a></dt><dd><dl><dt>authentication, <a class="indexterm" href="DomApps.html#id2640080">Squid Configuration</a></dt><dt>domain, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a></dt><dt>join, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></dt><dt>management tools, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>realm, <a class="indexterm" href="HA.html#id2641653">Bad Hostnames</a></dt><dt>Replacement, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>server, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="DomApps.html#id2638873">Kerberos Configuration</a></dt><dt>Server, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>tree, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a></dt></dl></dd><dt>active directory, <a class="indexterm" href="ntmigration.html#id2623787">Technical Issues</a></dt><dt>AD printer publishing, <a class="indexterm" href="happy.html#id2604786">Uploading Printer Drivers to Samba Servers</a></dt><dt>ADAM, <a class="indexterm" href="happy.html#id2593552">Dissection and Discussion</a>, <a class="indexterm" href="unixclients.html#id2617533">IDMAP Storage in LDAP using Winbind</a></dt><dt>add group script, <a class="indexterm" href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a></dt><dt>add machine script, <a class="indexterm" href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a></dt><dt>Add Printer Wizard</dt><dd><dl><dt>APW, <a class="indexterm" href="happy.html#id2604786">Uploading Printer Drivers to Samba Servers</a></dt></dl></dd><dt>add user script, <a class="indexterm" href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a></dt><dt>add user to group script, <a class="indexterm" href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a></dt><dt>adduser, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#id2582155">Samba Configuration</a>, <a class="indexterm" href="Big500users.html#id2589093">Configuration for Server: MASSIVE</a></dt><dt>adequate precautions, <a class="indexterm" href="upgrades.html#id2620252">Introduction</a></dt><dt>administrative installation, <a class="indexterm" href="secure.html#ch4appscfg">Application Share Configuration</a></dt><dt>administrative rights, <a class="indexterm" href="kerberos.html#id2635920">Checkpoint Controls</a></dt><dt>administrator, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#id2582155">Samba Configuration</a>, <a class="indexterm" href="Big500users.html#id2588515">Server Preparation: All Servers</a></dt><dt>ADMT, <a class="indexterm" href="upgrades.html#id2623289">Migration of Samba Accounts to Active Directory</a></dt><dt>ADS, <a class="indexterm" href="unixclients.html#id2617533">IDMAP Storage in LDAP using Winbind</a>, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a>, <a class="indexterm" href="DomApps.html#id2638873">Kerberos Configuration</a>, <a class="indexterm" href="HA.html#id2641653">Bad Hostnames</a></dt><dd><dl><dt>server, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt></dl></dd><dt>ADS Domain, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>affordability, <a class="indexterm" href="2000users.html#id2606399">The Nature of Windows Networking Protocols</a></dt><dt>alarm, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>algorithm, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>allow trusted domains, <a class="indexterm" href="unixclients.html#id2616929">IDMAP_RID with Winbind</a></dt><dt>alternative, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>analysis, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>anonymous connection, <a class="indexterm" href="small.html#id2579091">Validation</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a></dt><dt>Apache Web server, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt><dt>appliance mode, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a></dt><dt>application server, <a class="indexterm" href="secure.html#id2580725">Technical Issues</a>, <a class="indexterm" href="secure.html#ch4appscfg">Application Share Configuration</a></dt><dt>application servers, <a class="indexterm" href="2000users.html#id2606399">The Nature of Windows Networking Protocols</a></dt><dt>application/octet-stream, <a class="indexterm" href="simple.html#id2573211">Implementation</a>, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a>, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#ch4ptrcfg">Printer Configuration</a>, <a class="indexterm" href="Big500users.html#id2588515">Server Preparation: All Servers</a>, <a class="indexterm" href="happy.html#sbehap-ptrcfg">Printer Configuration</a></dt><dt>APW, <a class="indexterm" href="happy.html#id2604786">Uploading Printer Drivers to Samba Servers</a></dt><dt>arp, <a class="indexterm" href="secure.html#ch4valid">Validation</a></dt><dt>assessment, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>assistance, <a class="indexterm" href="ch14.html#id2643123">Free Support</a></dt><dt>assumptions, <a class="indexterm" href="HA.html#id2642954">Key Points Learned</a></dt><dt>authconfig, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a></dt><dt>authenticate, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a>, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a></dt><dt>authenticated, <a class="indexterm" href="DomApps.html#id2638317">Assignment Tasks</a></dt><dt>authenticated connection, <a class="indexterm" href="small.html#id2579091">Validation</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a></dt><dt>authentication, <a class="indexterm" href="2000users.html#id2606399">The Nature of Windows Networking Protocols</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="nw4migration.html#id2628385">Dissection and Discussion</a>, <a class="indexterm" href="DomApps.html">Integrating Additional Services</a>, <a class="indexterm" href="DomApps.html#id2638451">Technical Issues</a>, <a class="indexterm" href="DomApps.html#id2639814">NSS Configuration</a>, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt><dd><dl><dt>plain-text, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt></dl></dd><dt>authentication process, <a class="indexterm" href="unixclients.html#id2612258">Implementation</a></dt><dt>authentication protocols, <a class="indexterm" href="DomApps.html#id2640476">Key Points Learned</a></dt><dt>authoritative, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a></dt><dt>authorized location, <a class="indexterm" href="kerberos.html#id2635086">Kerberos Exposed</a></dt><dt>auto-generated SID, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>automatically allocate, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a></dt><dt>availability, <a class="indexterm" href="HA.html">Performance, Reliability, and Availability</a></dt></dl></div><div class="indexdiv"><h3>B</h3><dl><dt>backends, <a class="indexterm" href="DomApps.html">Integrating Additional Services</a></dt><dt>background communication, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a></dt><dt>Backup, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>Backup Domain Controller (see BDC)</dt><dt>bandwidth, <a class="indexterm" href="DomApps.html#id2638317">Assignment Tasks</a></dt><dd><dl><dt>requirements, <a class="indexterm" href="2000users.html#id2606306">User Needs</a></dt></dl></dd><dt>bandwidth calculations, <a class="indexterm" href="secure.html#id2581012">Hardware Requirements</a></dt><dt>BDC, <a class="indexterm" href="Big500users.html#id2587560">Technical Issues</a>, <a class="indexterm" href="happy.html">Making Happy Users</a>, <a class="indexterm" href="happy.html#id2593415">Assignment Tasks</a>, <a class="indexterm" href="happy.html#id2593552">Dissection and Discussion</a>, <a class="indexterm" href="happy.html#id2596084">Samba Server Implementation</a>, <a class="indexterm" href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a>, <a class="indexterm" href="2000users.html#id2606399">The Nature of Windows Networking Protocols</a>, <a class="indexterm" href="2000users.html#id2610386">Key Points Learned</a>, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a>, <a class="indexterm" href="ntmigration.html#id2626735">NT4 Migration Using tdbsam Backend</a>, <a class="indexterm" href="HA.html#id2642445">Use and Location of BDCs</a></dt><dt>benefit, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>best practices, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>bias, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a></dt><dt>binary database, <a class="indexterm" href="secure.html#id2581218">Implementation</a></dt><dt>binary files, <a class="indexterm" href="upgrades.html#id2622561">Updating a Samba-3 Installation</a></dt><dt>binary package, <a class="indexterm" href="upgrades.html#id2622561">Updating a Samba-3 Installation</a></dt><dt>bind interfaces only, <a class="indexterm" href="secure.html#id2581218">Implementation</a></dt><dt>broadcast, <a class="indexterm" href="HA.html#id2641845">Routed Networks</a>, <a class="indexterm" href="primer.html#chap01qa">Questions and Answers</a></dt><dd><dl><dt>directed, <a class="indexterm" href="2000users.html#id2606399">The Nature of Windows Networking Protocols</a></dt><dt>mailslot, <a class="indexterm" href="2000users.html#id2606399">The Nature of Windows Networking Protocols</a></dt></dl></dd><dt>broadcast messages, <a class="indexterm" href="secure.html#id2581218">Implementation</a></dt><dt>broadcast storms, <a class="indexterm" href="HA.html#id2642018">Network Collisions</a></dt><dt>broken, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>broken behavior, <a class="indexterm" href="HA.html#id2641143">Dissection and Discussion</a></dt><dt>browse, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>browse master, <a class="indexterm" href="primer.html#id2648128">Findings</a></dt><dt>Browse Master, <a class="indexterm" href="primer.html#chap01qa">Questions and Answers</a></dt><dt>browse.dat, <a class="indexterm" href="upgrades.html#id2622886">Replacing a Domain Member Server</a></dt><dt>Browser Election Service, <a class="indexterm" href="primer.html#chap01qa">Questions and Answers</a></dt><dt>browsing, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a>, <a class="indexterm" href="DomApps.html#id2638451">Technical Issues</a>, <a class="indexterm" href="primer.html#id2647750">Assignment Tasks</a></dt><dt>budgetted, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>bug fixes, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>bug report, <a class="indexterm" href="ch14.html#id2643123">Free Support</a></dt></dl></div><div class="indexdiv"><h3>C</h3><dl><dt>cache, <a class="indexterm" href="appendix.html#id2647362">Opportunistic Locking Controls</a></dt><dt>cache directories, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></dt><dt>caching, <a class="indexterm" href="HA.html#id2642118">Samba Configuration</a></dt><dt>case-sensitive, <a class="indexterm" href="DomApps.html#id2638873">Kerberos Configuration</a></dt><dt>centralized storage, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>character set, <a class="indexterm" href="upgrades.html#id2621512">International Language Support</a></dt><dt>check samba daemons, <a class="indexterm" href="small.html#id2579091">Validation</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a></dt><dt>check-point, <a class="indexterm" href="kerberos.html#id2635780">Share Definition Controls</a></dt><dt>check-point controls, <a class="indexterm" href="kerberos.html#id2635920">Checkpoint Controls</a></dt><dt>Checkpoint Controls, <a class="indexterm" href="kerberos.html#id2635920">Checkpoint Controls</a></dt><dt>chgrp, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a></dt><dt>chkconfig, <a class="indexterm" href="simple.html#id2572242">Implementation</a>, <a class="indexterm" href="simple.html#id2573211">Implementation</a>, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a>, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#procstart">Process Startup Configuration</a>, <a class="indexterm" href="Big500users.html#ch5-procstart">Process Startup Configuration</a>, <a class="indexterm" href="2000users.html#id2607228">Implementation</a></dt><dt>chmod, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a></dt><dt>choice, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a>, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>chown, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></dt><dt>CIFS, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a>, <a class="indexterm" href="primer.html#id2648128">Findings</a></dt><dt>cifsfs, <a class="indexterm" href="HA.html#id2641143">Dissection and Discussion</a></dt><dt>clean database, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>clients per DC, <a class="indexterm" href="happy.html">Making Happy Users</a></dt><dt>Clock skew, <a class="indexterm" href="DomApps.html#id2638873">Kerberos Configuration</a></dt><dt>cluster, <a class="indexterm" href="HA.html#id2641056">Introduction</a></dt><dt>clustering, <a class="indexterm" href="HA.html#id2641056">Introduction</a>, <a class="indexterm" href="HA.html#id2642542">For Scalability, Use SAN-Based Storage on Samba Servers</a></dt><dt>code maintainer, <a class="indexterm" href="ch14.html#id2643123">Free Support</a></dt><dt>codepage, <a class="indexterm" href="upgrades.html#id2621512">International Language Support</a></dt><dt>collision rates, <a class="indexterm" href="HA.html#id2642018">Network Collisions</a></dt><dt>commercial, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>commercial software, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>commercial support, <a class="indexterm" href="ch14.html">Samba Support</a>, <a class="indexterm" href="ch14.html#id2643342">Commercial Support</a></dt><dt>Common Internet File System (see CIFS)</dt><dt>comparison</dt><dd><dl><dt>Active Directory &amp; OpenLDAP, <a class="indexterm" href="happy.html#id2593552">Dissection and Discussion</a></dt></dl></dd><dt>compat, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>compatible, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>compile-time, <a class="indexterm" href="upgrades.html#sbeug1">Location of config files</a></dt><dt>complexities, <a class="indexterm" href="HA.html#id2641143">Dissection and Discussion</a></dt><dt>compromise, <a class="indexterm" href="happy.html#id2593318">Introduction</a>, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a>, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>computer account, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a></dt><dt>Computer Management, <a class="indexterm" href="kerberos.html#id2635432">Share Access Controls</a>, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a></dt><dt>computer name, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a></dt><dt>condemns, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>conferences, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>configuration files, <a class="indexterm" href="upgrades.html#id2620252">Introduction</a></dt><dt>configure.pl, <a class="indexterm" href="ntmigration.html#id2624277">NT4 Migration Using LDAP Backend</a></dt><dt>connection, <a class="indexterm" href="kerberos.html#id2635432">Share Access Controls</a></dt><dt>connectivity, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>consequential risk, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>consultant, <a class="indexterm" href="simple.html#id2572100">Drafting Office</a>, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a>, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>consumer, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a>, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>consumer expects, <a class="indexterm" href="ch14.html">Samba Support</a></dt><dt>contiguous directory, <a class="indexterm" href="2000users.html#id2607228">Implementation</a></dt><dt>contributions, <a class="indexterm" href="upgrades.html">Updating Samba-3</a></dt><dt>control files, <a class="indexterm" href="upgrades.html#id2622561">Updating a Samba-3 Installation</a></dt><dt>convmv, <a class="indexterm" href="upgrades.html#id2621512">International Language Support</a></dt><dt>copy, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>corrective action, <a class="indexterm" href="HA.html#id2642692">Hardware Problems</a></dt><dt>cost, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>cost-benefit, <a class="indexterm" href="nw4migration.html#id2628272">Assignment Tasks</a></dt><dt>country of origin, <a class="indexterm" href="ch14.html#id2643342">Commercial Support</a></dt><dt>Courier-IMAP, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>credential, <a class="indexterm" href="kerberos.html#id2635780">Share Definition Controls</a></dt><dt>credentials, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>crippled, <a class="indexterm" href="ntmigration.html#id2623601">Dissection and Discussion</a></dt><dt>criticism, <a class="indexterm" href="kerberos.html">Active Directory, Kerberos, and Security</a>, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>Critics, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>Cryptographic, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>CUPS, <a class="indexterm" href="simple.html#id2573001">Dissection and Discussion</a>, <a class="indexterm" href="small.html#id2577157">Technical Issues</a>, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="small.html#id2579821">Key Points Learned</a>, <a class="indexterm" href="secure.html#id2581218">Implementation</a>, <a class="indexterm" href="secure.html#ch4ptrcfg">Printer Configuration</a>, <a class="indexterm" href="Big500users.html#id2588515">Server Preparation: All Servers</a>, <a class="indexterm" href="happy.html#id2593415">Assignment Tasks</a>, <a class="indexterm" href="happy.html#id2594975">Installation of Printer Driver Auto-Download</a>, <a class="indexterm" href="happy.html#sbehap-ptrcfg">Printer Configuration</a></dt><dd><dl><dt>queue, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#ch4ptrcfg">Printer Configuration</a>, <a class="indexterm" href="Big500users.html#id2588515">Server Preparation: All Servers</a>, <a class="indexterm" href="happy.html#sbehap-ptrcfg">Printer Configuration</a></dt></dl></dd><dt>cupsd, <a class="indexterm" href="secure.html#ch4bsc">Basic System Configuration</a></dt><dt>customer expected, <a class="indexterm" href="ch14.html">Samba Support</a></dt><dt>customers, <a class="indexterm" href="ch14.html">Samba Support</a></dt></dl></div><div class="indexdiv"><h3>D</h3><dl><dt>daemon, <a class="indexterm" href="simple.html#validate1">Validation</a>, <a class="indexterm" href="secure.html#ch4bsc">Basic System Configuration</a>, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a>, <a class="indexterm" href="DomApps.html#id2638451">Technical Issues</a>, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a>, <a class="indexterm" href="appendix.html#id2644469">Starting Samba</a></dt><dt>daemon control, <a class="indexterm" href="Big500users.html#ch5-procstart">Process Startup Configuration</a></dt><dt>data</dt><dd><dl><dt>corruption, <a class="indexterm" href="happy.html">Making Happy Users</a></dt><dt>integrity, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt></dl></dd><dt>data corruption, <a class="indexterm" href="HA.html#id2642692">Hardware Problems</a>, <a class="indexterm" href="appendix.html#id2647278">Act! Database Sharing</a></dt><dt>data integrity, <a class="indexterm" href="HA.html#id2642692">Hardware Problems</a>, <a class="indexterm" href="appendix.html#ch12dblck">Shared Data Integrity</a></dt><dt>data storage, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a></dt><dt>database, <a class="indexterm" href="2000users.html#id2605993">Dissection and Discussion</a>, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a>, <a class="indexterm" href="nw4migration.html#id2628385">Dissection and Discussion</a></dt><dt>database applications, <a class="indexterm" href="appendix.html#ch12dblck">Shared Data Integrity</a></dt><dt>DB_CONFIG, <a class="indexterm" href="happy.html#ldapsetup">OpenLDAP Server Configuration</a></dt><dt>DCE, <a class="indexterm" href="kerberos.html#id2635086">Kerberos Exposed</a></dt><dt>DDNS (see dynamic DNS)</dt><dt>Debian, <a class="indexterm" href="nw4migration.html">Migrating NetWare Server to Samba-3</a></dt><dt>default installation, <a class="indexterm" href="appendix.html#id2644049">Samba System File Location</a></dt><dt>default password, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt><dt>default profile, <a class="indexterm" href="happy.html#id2593415">Assignment Tasks</a>, <a class="indexterm" href="happy.html#id2594009">Technical Issues</a></dt><dt>Default User, <a class="indexterm" href="happy.html#id2594822">Profile Changes</a>, <a class="indexterm" href="happy.html#redirfold">Configuration of Default Profile with Folder Redirection</a></dt><dt>defective</dt><dd><dl><dt>cables, <a class="indexterm" href="HA.html#id2642692">Hardware Problems</a></dt><dt>HUBs, <a class="indexterm" href="HA.html#id2642692">Hardware Problems</a></dt><dt>switches, <a class="indexterm" href="HA.html#id2642692">Hardware Problems</a></dt></dl></dd><dt>defects, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>defensible standards, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>defragmentation, <a class="indexterm" href="secure.html#ch4wincfg">Windows Client Configuration</a></dt><dt>delete group script, <a class="indexterm" href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a></dt><dt>delete user from group script, <a class="indexterm" href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a></dt><dt>delimiter, <a class="indexterm" href="kerberos.html#id2635920">Checkpoint Controls</a></dt><dt>dependability, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>deployment, <a class="indexterm" href="ch14.html#id2643123">Free Support</a></dt><dt>desired security setting, <a class="indexterm" href="kerberos.html#id2637313">Setting Posix ACLs in UNIX/Linux</a></dt><dt>development, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>DHCP, <a class="indexterm" href="small.html#id2577157">Technical Issues</a>, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="small.html#id2579821">Key Points Learned</a>, <a class="indexterm" href="secure.html#ch4wincfg">Windows Client Configuration</a>, <a class="indexterm" href="Big500users.html#ch5wincfg">Windows Client Configuration</a>, <a class="indexterm" href="2000users.html#id2606399">The Nature of Windows Networking Protocols</a>, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a></dt><dd><dl><dt>client, <a class="indexterm" href="HA.html#id2641653">Bad Hostnames</a></dt><dt>relay, <a class="indexterm" href="Big500users.html#id2587560">Technical Issues</a></dt><dt>Relay Agent, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a></dt><dt>request, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a></dt><dt>requests, <a class="indexterm" href="Big500users.html#id2587560">Technical Issues</a></dt><dt>servers, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a></dt><dt>traffic, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a></dt></dl></dd><dt>dhcp client validation, <a class="indexterm" href="small.html#id2579091">Validation</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a></dt><dt>DHCP Server, <a class="indexterm" href="small.html#id2577390">Implementation</a></dt><dt>DHCP server, <a class="indexterm" href="secure.html#id2580725">Technical Issues</a></dt><dt>diagnostic, <a class="indexterm" href="unixclients.html#id2617533">IDMAP Storage in LDAP using Winbind</a></dt><dt>diffusion, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>digital rights, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>digital sign'n'seal, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>digits, <a class="indexterm" href="HA.html#id2641653">Bad Hostnames</a></dt><dt>diligence, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>directory, <a class="indexterm" href="2000users.html#id2605993">Dissection and Discussion</a>, <a class="indexterm" href="unixclients.html#id2612158">Political Issues</a>, <a class="indexterm" href="upgrades.html#sbeug1">Location of config files</a></dt><dd><dl><dt>Computers container, <a class="indexterm" href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a></dt><dt>management, <a class="indexterm" href="happy.html#id2593552">Dissection and Discussion</a></dt><dt>People container, <a class="indexterm" href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a></dt><dt>replication, <a class="indexterm" href="happy.html#id2593552">Dissection and Discussion</a></dt><dt>schema, <a class="indexterm" href="happy.html#id2593552">Dissection and Discussion</a></dt><dt>server, <a class="indexterm" href="happy.html#id2594009">Technical Issues</a></dt><dt>synchronization, <a class="indexterm" href="happy.html#id2593552">Dissection and Discussion</a></dt></dl></dd><dt>directory tree, <a class="indexterm" href="kerberos.html#id2637313">Setting Posix ACLs in UNIX/Linux</a></dt><dt>disable, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>disaster recovery, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>disk image, <a class="indexterm" href="happy.html#id2593415">Assignment Tasks</a></dt><dt>disruptive, <a class="indexterm" href="ntmigration.html#id2623601">Dissection and Discussion</a></dt><dt>distributed, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a>, <a class="indexterm" href="2000users.html#id2607228">Implementation</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="HA.html#id2642592">Distribute Network Load with MSDFS</a></dt><dt>distributed domain, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a></dt><dt>DMB, <a class="indexterm" href="primer.html#chap01qa">Questions and Answers</a></dt><dt>DMS, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a>, <a class="indexterm" href="upgrades.html#id2622886">Replacing a Domain Member Server</a></dt><dt>DNS, <a class="indexterm" href="small.html#id2577157">Technical Issues</a>, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#id2580725">Technical Issues</a>, <a class="indexterm" href="2000users.html#id2606399">The Nature of Windows Networking Protocols</a>, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a>, <a class="indexterm" href="HA.html#id2641653">Bad Hostnames</a>, <a class="indexterm" href="HA.html#id2641845">Routed Networks</a>, <a class="indexterm" href="appendix.html#domjoin">Joining a Domain: Windows 200x/XP Professional</a></dt><dd><dl><dt>configuration, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>Dynamic, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a></dt><dt>dynamic, <a class="indexterm" href="appendix.html#domjoin">Joining a Domain: Windows 200x/XP Professional</a></dt><dt>lookup, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="DomApps.html#id2638873">Kerberos Configuration</a></dt><dt>name lookup, <a class="indexterm" href="HA.html#id2641653">Bad Hostnames</a></dt><dt>SRV records, <a class="indexterm" href="DomApps.html#id2638873">Kerberos Configuration</a></dt><dt>suffix, <a class="indexterm" href="appendix.html#domjoin">Joining a Domain: Windows 200x/XP Professional</a></dt></dl></dd><dt>DNS server, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#ch4dhcpdns">Configuration of DHCP and DNS Servers</a></dt><dt>document the settings, <a class="indexterm" href="HA.html#id2642118">Samba Configuration</a></dt><dt>documentation, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a>, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>documented, <a class="indexterm" href="HA.html#id2642118">Samba Configuration</a></dt><dt>Domain, <a class="indexterm" href="small.html#id2577157">Technical Issues</a></dt><dd><dl><dt>groups, <a class="indexterm" href="small.html#id2577157">Technical Issues</a></dt></dl></dd><dt>domain</dt><dd><dl><dt>Active Directory, <a class="indexterm" href="DomApps.html#id2638451">Technical Issues</a></dt><dt>controller, <a class="indexterm" href="upgrades.html#id2623089">Replacing a Domain Controller</a></dt><dt>joining, <a class="indexterm" href="appendix.html">A Collection of Useful Tidbits</a></dt><dt>trusted, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt></dl></dd><dt>Domain accounts, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a></dt><dt>Domain Administrator, <a class="indexterm" href="kerberos.html#id2635432">Share Access Controls</a></dt><dt>Domain Controller, <a class="indexterm" href="small.html#id2579821">Key Points Learned</a>, <a class="indexterm" href="2000users.html#id2606399">The Nature of Windows Networking Protocols</a>, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id2612258">Implementation</a>, <a class="indexterm" href="HA.html#id2642445">Use and Location of BDCs</a></dt><dd><dl><dt>closest, <a class="indexterm" href="2000users.html#id2606399">The Nature of Windows Networking Protocols</a></dt></dl></dd><dt>domain controller, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a>, <a class="indexterm" href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a></dt><dt>domain controllers, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a></dt><dt>Domain Controllers, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>Domain Groups</dt><dd><dl><dt>well-known, <a class="indexterm" href="appendix.html#id2645074">Initialization of the LDAP Database</a></dt></dl></dd><dt>Domain join, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>domain master, <a class="indexterm" href="ntmigration.html#id2624277">NT4 Migration Using LDAP Backend</a>, <a class="indexterm" href="ntmigration.html#id2626735">NT4 Migration Using tdbsam Backend</a></dt><dt>Domain Master Browser (see DMB)</dt><dt>Domain Member, <a class="indexterm" href="HA.html#id2642445">Use and Location of BDCs</a></dt><dd><dl><dt>authoritative</dt><dd><dl><dt>local accounts, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a></dt></dl></dd><dt>client, <a class="indexterm" href="unixclients.html#id2612258">Implementation</a></dt><dt>desktop, <a class="indexterm" href="unixclients.html#id2611392">Introduction</a></dt><dt>server, <a class="indexterm" href="unixclients.html#id2611392">Introduction</a>, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id2612258">Implementation</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></dt><dt>servers, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id2635920">Checkpoint Controls</a></dt><dt>workstations, <a class="indexterm" href="unixclients.html#id2612258">Implementation</a></dt></dl></dd><dt>domain member</dt><dd><dl><dt>servers, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a></dt></dl></dd><dt>Domain Member server, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a></dt><dt>Domain Member servers, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>domain members, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>domain name space, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a></dt><dt>domain replication, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a></dt><dt>domain SID, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a></dt><dt>Domain SID, <a class="indexterm" href="ntmigration.html#id2623787">Technical Issues</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>domain tree, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a></dt><dt>Domain User Manager, <a class="indexterm" href="happy.html#id2603048">Configuring Profile Directories</a></dt><dt>Domain users, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>DOS, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a></dt><dt>dos2unix, <a class="indexterm" href="secure.html#id2582155">Samba Configuration</a>, <a class="indexterm" href="Big500users.html#id2589093">Configuration for Server: MASSIVE</a></dt><dt>down-grade, <a class="indexterm" href="upgrades.html#id2620252">Introduction</a></dt><dt>drive letters, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>drive mapping, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>dumb printing, <a class="indexterm" href="happy.html#id2594975">Installation of Printer Driver Auto-Download</a></dt><dt>dump, <a class="indexterm" href="ntmigration.html#id2623787">Technical Issues</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>duplicate accounts, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a></dt><dt>dynamic DNS, <a class="indexterm" href="secure.html#id2580725">Technical Issues</a></dt></dl></div><div class="indexdiv"><h3>E</h3><dl><dt>e-Directory, <a class="indexterm" href="nw4migration.html#id2628385">Dissection and Discussion</a></dt><dt>Easy Software Products, <a class="indexterm" href="happy.html#id2594975">Installation of Printer Driver Auto-Download</a></dt><dt>economically sustainable, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>eDirectory, <a class="indexterm" href="happy.html#id2593552">Dissection and Discussion</a></dt><dt>education, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a></dt><dt>election, <a class="indexterm" href="primer.html#id2648128">Findings</a></dt><dt>employment, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a>, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>enable, <a class="indexterm" href="secure.html#ch4ptrcfg">Printer Configuration</a></dt><dt>encrypted, <a class="indexterm" href="primer.html#id2649376">Findings and Comments</a></dt><dt>encrypted password, <a class="indexterm" href="primer.html#id2649641">Windows 200x/XP Client Interaction with Samba-3</a></dt><dt>encrypted passwords, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>End User License Agreement (see EULA)</dt><dt>enumerating, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a></dt><dt>essential, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>ethereal, <a class="indexterm" href="primer.html#id2647868">Exercises</a></dt><dt>Ethernet switch, <a class="indexterm" href="small.html#id2577157">Technical Issues</a></dt><dt>ethernet switch, <a class="indexterm" href="happy.html">Making Happy Users</a></dt><dt>EULA, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>Everyone, <a class="indexterm" href="kerberos.html#id2635432">Share Access Controls</a></dt><dt>Excel, <a class="indexterm" href="kerberos.html#id2636393">Share Point Directory and File Permissions</a></dt><dt>exclusive open, <a class="indexterm" href="appendix.html#id2647131">Microsoft Access</a></dt><dt>experiment, <a class="indexterm" href="kerberos.html">Active Directory, Kerberos, and Security</a></dt><dt>export, <a class="indexterm" href="ntmigration.html#id2623787">Technical Issues</a></dt><dt>extent, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>External Domains, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a></dt><dt>extreme demand, <a class="indexterm" href="HA.html#id2641615">Guidelines for Reliable Samba Operation</a></dt></dl></div><div class="indexdiv"><h3>F</h3><dl><dt>fail, <a class="indexterm" href="2000users.html#id2606399">The Nature of Windows Networking Protocols</a></dt><dt>fail-over, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a>, <a class="indexterm" href="2000users.html#id2607228">Implementation</a></dt><dt>failed, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>failed join, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="unixclients.html#id2616929">IDMAP_RID with Winbind</a></dt><dt>failure, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a></dt><dt>familiar, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>fatal problem, <a class="indexterm" href="HA.html#id2642118">Samba Configuration</a></dt><dt>fear, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>fears, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>Fedora, <a class="indexterm" href="simple.html#id2572100">Drafting Office</a></dt><dt>FHS, <a class="indexterm" href="appendix.html#id2644049">Samba System File Location</a></dt><dt>file and print server, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt><dt>file and print service, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>file caching, <a class="indexterm" href="HA.html#id2642118">Samba Configuration</a>, <a class="indexterm" href="appendix.html#id2647362">Opportunistic Locking Controls</a></dt><dt>File Hierarchy System (see FHS)</dt><dt>file locations, <a class="indexterm" href="appendix.html#id2644049">Samba System File Location</a></dt><dt>file permissions, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt><dt>file server</dt><dd><dl><dt>read-only, <a class="indexterm" href="simple.html#id2572184">Dissection and Discussion</a></dt></dl></dd><dt>file servers, <a class="indexterm" href="happy.html#id2596084">Samba Server Implementation</a></dt><dt>file system, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dd><dl><dt>access control, <a class="indexterm" href="secure.html#id2582155">Samba Configuration</a></dt><dt>Ext3, <a class="indexterm" href="simple.html#id2572242">Implementation</a></dt><dt>permissions, <a class="indexterm" href="secure.html#id2582155">Samba Configuration</a>, <a class="indexterm" href="Big500users.html#id2589093">Configuration for Server: MASSIVE</a></dt></dl></dd><dt>file system security, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a></dt><dt>filter, <a class="indexterm" href="kerberos.html#id2635432">Share Access Controls</a></dt><dt>financial responsibility, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>firewall, <a class="indexterm" href="secure.html#id2580725">Technical Issues</a>, <a class="indexterm" href="secure.html#ch4bsc">Basic System Configuration</a>, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>fix, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>flaws, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>flexibility, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>flush</dt><dd><dl><dt>cache memory, <a class="indexterm" href="appendix.html#id2647362">Opportunistic Locking Controls</a></dt></dl></dd><dt>folder redirection, <a class="indexterm" href="happy.html#id2594009">Technical Issues</a>, <a class="indexterm" href="happy.html#redirfold">Configuration of Default Profile with Folder Redirection</a>, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a></dt><dt>force group, <a class="indexterm" href="kerberos.html#id2636232">Override Controls</a>, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a></dt><dt>force user, <a class="indexterm" href="simple.html#id2573001">Dissection and Discussion</a>, <a class="indexterm" href="kerberos.html#id2636232">Override Controls</a>, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a></dt><dt>forced settings, <a class="indexterm" href="kerberos.html#id2636232">Override Controls</a></dt><dt>foreign, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>foreign SID, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>forwarded, <a class="indexterm" href="HA.html#id2641845">Routed Networks</a></dt><dt>foundation members, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>Free Standards Group (see FSG)</dt><dt>free support, <a class="indexterm" href="ch14.html">Samba Support</a>, <a class="indexterm" href="ch14.html#id2643123">Free Support</a></dt><dt>front-end, <a class="indexterm" href="HA.html#id2641143">Dissection and Discussion</a></dt><dd><dl><dt>server, <a class="indexterm" href="HA.html#id2642592">Distribute Network Load with MSDFS</a></dt></dl></dd><dt>frustration, <a class="indexterm" href="upgrades.html#id2620252">Introduction</a></dt><dt>FSG, <a class="indexterm" href="appendix.html#id2644049">Samba System File Location</a></dt><dt>FTP</dt><dd><dl><dt>proxy, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt></dl></dd><dt>full control, <a class="indexterm" href="kerberos.html#id2635432">Share Access Controls</a>, <a class="indexterm" href="kerberos.html#id2637142">Using MS Windows Explorer (File Manager)</a></dt><dt>fully qualified, <a class="indexterm" href="kerberos.html#id2635920">Checkpoint Controls</a></dt><dt>functional differences, <a class="indexterm" href="upgrades.html#id2620348">Cautions and Notes</a></dt></dl></div><div class="indexdiv"><h3>G</h3><dl><dt>generation, <a class="indexterm" href="upgrades.html#id2620348">Cautions and Notes</a></dt><dt>Gentoo, <a class="indexterm" href="nw4migration.html">Migrating NetWare Server to Samba-3</a></dt><dt>getent, <a class="indexterm" href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="happy.html#sbehap-bldg1">Samba-3 BDC Configuration</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="unixclients.html#id2616929">IDMAP_RID with Winbind</a></dt><dt>getfacl, <a class="indexterm" href="kerberos.html#id2637313">Setting Posix ACLs in UNIX/Linux</a></dt><dt>getgrnam, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a></dt><dt>getpwnam, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>getpwnam(), <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>GID, <a class="indexterm" href="2000users.html#id2607228">Implementation</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>Goettingen, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt><dt>government, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a></dt><dt>GPL, <a class="indexterm" href="secure.html#id2586239">Comments Regarding Software Terms of Use</a></dt><dt>group account, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a>, <a class="indexterm" href="happy.html#ldapsetup">OpenLDAP Server Configuration</a></dt><dt>group management, <a class="indexterm" href="secure.html#id2581218">Implementation</a></dt><dt>group mapping, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>group membership, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#id2582155">Samba Configuration</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="kerberos.html#id2636393">Share Point Directory and File Permissions</a></dt><dt>group names, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>group policies, <a class="indexterm" href="ntmigration.html#id2623461">Introduction</a></dt><dt>Group Policy, <a class="indexterm" href="appendix.html#domjoin">Joining a Domain: Windows 200x/XP Professional</a></dt><dt>Group Policy editor, <a class="indexterm" href="happy.html#sbehap-locgrppol">The Local Group Policy</a></dt><dt>Group Policy Objects, <a class="indexterm" href="happy.html#sbehap-locgrppol">The Local Group Policy</a></dt><dt>groupadd, <a class="indexterm" href="simple.html#id2573211">Implementation</a>, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a>, <a class="indexterm" href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>groupdel, <a class="indexterm" href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>groupmem, <a class="indexterm" href="ntmigration.html#id2624277">NT4 Migration Using LDAP Backend</a></dt><dt>groupmod, <a class="indexterm" href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>GSS-API, <a class="indexterm" href="primer.html#id2649641">Windows 200x/XP Client Interaction with Samba-3</a></dt><dt>guest account, <a class="indexterm" href="primer.html#id2649376">Findings and Comments</a>, <a class="indexterm" href="primer.html#chap01conc">Dissection and Discussion</a>, <a class="indexterm" href="primer.html#id2650324">Technical Issues</a>, <a class="indexterm" href="primer.html#chap01qa">Questions and Answers</a></dt></dl></div><div class="indexdiv"><h3>H</h3><dl><dt>hackers, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>hardware prices, <a class="indexterm" href="HA.html#id2642692">Hardware Problems</a></dt><dt>hardware problems, <a class="indexterm" href="HA.html#id2642692">Hardware Problems</a></dt><dt>Heimdal, <a class="indexterm" href="DomApps.html#id2638624">Implementation</a>, <a class="indexterm" href="DomApps.html#id2638873">Kerberos Configuration</a></dt><dt>Heimdal Kerberos, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="kerberos.html#id2635086">Kerberos Exposed</a></dt><dt>Heimdal kerberos, <a class="indexterm" href="unixclients.html#id2617533">IDMAP Storage in LDAP using Winbind</a></dt><dt>help, <a class="indexterm" href="ch14.html#id2643123">Free Support</a></dt><dt>helper agent, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></dt><dt>hesiod, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>hierarchy of control, <a class="indexterm" href="kerberos.html#id2635780">Share Definition Controls</a></dt><dt>high availability, <a class="indexterm" href="happy.html#id2593552">Dissection and Discussion</a></dt><dt>hire, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>HKEY_CURRENT_USER, <a class="indexterm" href="happy.html#id2594521">Roaming Profile Background</a></dt><dt>HKEY_LOCAL_MACHINE, <a class="indexterm" href="happy.html#redirfold">Configuration of Default Profile with Folder Redirection</a></dt><dt>HKEY_LOCAL_USER, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a></dt><dt>host announcement, <a class="indexterm" href="primer.html#id2647750">Assignment Tasks</a>, <a class="indexterm" href="primer.html#id2648779">Findings</a></dt><dt>hostname, <a class="indexterm" href="secure.html#ch4bsc">Basic System Configuration</a>, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a></dt><dt>hosts, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>HUB, <a class="indexterm" href="happy.html">Making Happy Users</a></dt><dt>Hybrid, <a class="indexterm" href="primer.html#chap01qa">Questions and Answers</a></dt><dt>hypothetical, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt></dl></div><div class="indexdiv"><h3>I</h3><dl><dt>Idealx, <a class="indexterm" href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a>, <a class="indexterm" href="ntmigration.html#id2624277">NT4 Migration Using LDAP Backend</a></dt><dd><dl><dt>smbldap-tools, <a class="indexterm" href="happy.html#sbeidealx">Install and Configure Idealx smbldap-tools Scripts</a>, <a class="indexterm" href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a></dt></dl></dd><dt>identifiers, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a></dt><dt>identity, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id2635086">Kerberos Exposed</a></dt><dd><dl><dt>management, <a class="indexterm" href="happy.html#id2594009">Technical Issues</a></dt></dl></dd><dt>identity management, <a class="indexterm" href="Big500users.html#id2587560">Technical Issues</a>, <a class="indexterm" href="2000users.html#id2605993">Dissection and Discussion</a>, <a class="indexterm" href="unixclients.html#id2612158">Political Issues</a>, <a class="indexterm" href="nw4migration.html#id2628385">Dissection and Discussion</a></dt><dt>Identity Management, <a class="indexterm" href="happy.html#id2593552">Dissection and Discussion</a>, <a class="indexterm" href="2000users.html#id2606399">The Nature of Windows Networking Protocols</a>, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a></dt><dt>Identity management, <a class="indexterm" href="unixclients.html#id2618464">UNIX/Linux Client Domain Member</a></dt><dt>Identity resolution, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="unixclients.html#id2618464">UNIX/Linux Client Domain Member</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>Identity resolver, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt><dt>IDMAP, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="unixclients.html#id2616929">IDMAP_RID with Winbind</a></dt><dt>idmap backend, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a></dt><dt>IDMAP backend, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>idmap gid, <a class="indexterm" href="unixclients.html#id2616929">IDMAP_RID with Winbind</a></dt><dt>idmap uid, <a class="indexterm" href="unixclients.html#id2616929">IDMAP_RID with Winbind</a></dt><dt>idmap_rid, <a class="indexterm" href="unixclients.html#id2616929">IDMAP_RID with Winbind</a></dt><dt>IMAP, <a class="indexterm" href="nw4migration.html#id2628462">Technical Issues</a></dt><dt>import, <a class="indexterm" href="ntmigration.html#id2623787">Technical Issues</a></dt><dt>income, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>independent expert, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>inetd, <a class="indexterm" href="secure.html#procstart">Process Startup Configuration</a></dt><dt>inetOrgPerson, <a class="indexterm" href="nw4migration.html#id2628462">Technical Issues</a></dt><dt>inheritance, <a class="indexterm" href="kerberos.html#id2637313">Setting Posix ACLs in UNIX/Linux</a></dt><dt>initGrps.sh, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#id2582155">Samba Configuration</a>, <a class="indexterm" href="Big500users.html#id2589093">Configuration for Server: MASSIVE</a></dt><dt>initial credentials, <a class="indexterm" href="DomApps.html#id2638873">Kerberos Configuration</a></dt><dt>inoperative, <a class="indexterm" href="ntmigration.html#id2623601">Dissection and Discussion</a></dt><dt>install, <a class="indexterm" href="upgrades.html">Updating Samba-3</a></dt><dt>installation, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>integrate, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a></dt><dt>integrity, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a>, <a class="indexterm" href="kerberos.html#id2635086">Kerberos Exposed</a></dt><dt>inter-domain, <a class="indexterm" href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a></dt><dt>inter-operability, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a>, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id2637523">Key Points Learned</a>, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt><dt>interactive help, <a class="indexterm" href="ch14.html#id2643123">Free Support</a></dt><dt>interdomain trusts, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a></dt><dt>interfaces, <a class="indexterm" href="secure.html#id2581218">Implementation</a></dt><dt>intermittent, <a class="indexterm" href="HA.html#id2642692">Hardware Problems</a></dt><dt>internationalization, <a class="indexterm" href="upgrades.html#id2621512">International Language Support</a></dt><dt>Internet Explorer, <a class="indexterm" href="DomApps.html#id2638451">Technical Issues</a></dt><dt>Internet Information Server, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt><dt>interoperability, <a class="indexterm" href="happy.html#id2593552">Dissection and Discussion</a></dt><dt>IP forwarding, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#ch4bsc">Basic System Configuration</a>, <a class="indexterm" href="Big500users.html#id2589093">Configuration for Server: MASSIVE</a></dt><dt>IPC$, <a class="indexterm" href="primer.html#id2649376">Findings and Comments</a></dt><dt>iptables, <a class="indexterm" href="secure.html#id2580725">Technical Issues</a></dt><dt>IRC, <a class="indexterm" href="ch14.html#id2643123">Free Support</a></dt><dt>isolated, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>Italian, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt></dl></div><div class="indexdiv"><h3>J</h3><dl><dt>jobs, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>joining a domain, <a class="indexterm" href="appendix.html#domjoin">Joining a Domain: Windows 200x/XP Professional</a></dt></dl></div><div class="indexdiv"><h3>K</h3><dl><dt>KDC, <a class="indexterm" href="DomApps.html#id2638873">Kerberos Configuration</a></dt><dt>Kerberos, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a>, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id2637523">Key Points Learned</a>, <a class="indexterm" href="DomApps.html#id2638451">Technical Issues</a>, <a class="indexterm" href="DomApps.html#id2638624">Implementation</a>, <a class="indexterm" href="DomApps.html#id2638873">Kerberos Configuration</a></dt><dd><dl><dt>Heimdal, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></dt><dt>interoperability, <a class="indexterm" href="kerberos.html#id2635086">Kerberos Exposed</a></dt><dt>libraries, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></dt><dt>MIT, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></dt><dt>unspecified fields, <a class="indexterm" href="kerberos.html#id2635086">Kerberos Exposed</a></dt></dl></dd><dt>kerberos, <a class="indexterm" href="kerberos.html#id2635086">Kerberos Exposed</a></dt><dd><dl><dt>server, <a class="indexterm" href="kerberos.html#id2635086">Kerberos Exposed</a></dt></dl></dd><dt>Kerberos ticket, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a></dt><dt>kinit, <a class="indexterm" href="DomApps.html#id2638873">Kerberos Configuration</a></dt><dt>Kixtart, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>klist, <a class="indexterm" href="DomApps.html#id2638873">Kerberos Configuration</a></dt><dt>krb5, <a class="indexterm" href="DomApps.html#id2638624">Implementation</a></dt><dt>krb5.conf, <a class="indexterm" href="DomApps.html#id2638873">Kerberos Configuration</a></dt></dl></div><div class="indexdiv"><h3>L</h3><dl><dt>LAM, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt><dd><dl><dt>configuration editor, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt><dt>configuration file, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt><dt>login screen, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt><dt>opening screen, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt><dt>profile, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt><dt>wizard, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt></dl></dd><dt>large domain, <a class="indexterm" href="unixclients.html#id2616929">IDMAP_RID with Winbind</a></dt><dt>LDAP, <a class="indexterm" href="Big500users.html#id2587560">Technical Issues</a>, <a class="indexterm" href="happy.html#id2593415">Assignment Tasks</a>, <a class="indexterm" href="happy.html#id2593552">Dissection and Discussion</a>, <a class="indexterm" href="happy.html#id2594009">Technical Issues</a>, <a class="indexterm" href="happy.html#id2595165">Preliminary Advice: Dangers Can Be Avoided</a>, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a>, <a class="indexterm" href="2000users.html#id2605895">Introduction</a>, <a class="indexterm" href="2000users.html#id2605993">Dissection and Discussion</a>, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a>, <a class="indexterm" href="2000users.html#id2607228">Implementation</a>, <a class="indexterm" href="2000users.html#id2610386">Key Points Learned</a>, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a>, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a>, <a class="indexterm" href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a>, <a class="indexterm" href="ntmigration.html#id2623546">Assignment Tasks</a>, <a class="indexterm" href="ntmigration.html#id2623787">Technical Issues</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a>, <a class="indexterm" href="nw4migration.html#id2628385">Dissection and Discussion</a>, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a>, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dd><dl><dt>backend, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a></dt><dt>database, <a class="indexterm" href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a>, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a>, <a class="indexterm" href="appendix.html#altldapcfg">Alternative LDAP Database Initialization</a></dt><dt>directory, <a class="indexterm" href="happy.html#id2593176">Regarding LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a></dt><dt>fail-over, <a class="indexterm" href="2000users.html#id2607228">Implementation</a></dt><dt>initial configuration, <a class="indexterm" href="appendix.html#altldapcfg">Alternative LDAP Database Initialization</a></dt><dt>master, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a></dt><dt>master/slave</dt><dd><dl><dt>background communication, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a></dt></dl></dd><dt>preload, <a class="indexterm" href="2000users.html#id2607228">Implementation</a></dt><dt>schema, <a class="indexterm" href="upgrades.html#id2622705">Updating from Samba Versions between 3.0.6 and 3.0.10</a></dt><dt>secure, <a class="indexterm" href="happy.html#id2594009">Technical Issues</a></dt><dt>server, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>slave, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a></dt><dt>updates, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a></dt></dl></dd><dt>ldap, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>LDAP Account Manager (see LAM)</dt><dt>LDAP backend, <a class="indexterm" href="ntmigration.html#id2623787">Technical Issues</a></dt><dt>LDAP database, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>LDAP Interchange Format (see LDIF)</dt><dt>LDAP server, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a></dt><dt>LDAP-transfer-LDIF.txt, <a class="indexterm" href="2000users.html#id2607228">Implementation</a></dt><dt>ldap.conf, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>ldapadd, <a class="indexterm" href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>ldapsam, <a class="indexterm" href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="2000users.html#id2605993">Dissection and Discussion</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="upgrades.html#id2622705">Updating from Samba Versions between 3.0.6 and 3.0.10</a>, <a class="indexterm" href="ntmigration.html#id2623546">Assignment Tasks</a>, <a class="indexterm" href="DomApps.html">Integrating Additional Services</a></dt><dt>ldapsam backend, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>ldapsearch, <a class="indexterm" href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a></dt><dt>LDIF, <a class="indexterm" href="happy.html#id2594009">Technical Issues</a>, <a class="indexterm" href="2000users.html#id2607228">Implementation</a>, <a class="indexterm" href="nw4migration.html#id2628462">Technical Issues</a>, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a>, <a class="indexterm" href="appendix.html#id2645074">Initialization of the LDAP Database</a></dt><dt>leadership, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>Lightweight Directory Access Protocol (see LDAP)</dt><dt>limit, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>Linux desktop, <a class="indexterm" href="unixclients.html#id2611392">Introduction</a></dt><dt>Linux Standards Base (see LSB)</dt><dt>LMB, <a class="indexterm" href="primer.html#id2648128">Findings</a>, <a class="indexterm" href="primer.html#chap01qa">Questions and Answers</a></dt><dt>LMHOSTS, <a class="indexterm" href="HA.html#id2641845">Routed Networks</a></dt><dt>load distribution, <a class="indexterm" href="HA.html#id2642542">For Scalability, Use SAN-Based Storage on Samba Servers</a></dt><dt>local accounts, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a></dt><dt>Local Group Policy, <a class="indexterm" href="happy.html#id2594521">Roaming Profile Background</a></dt><dt>Local Master Announcement, <a class="indexterm" href="primer.html#id2648779">Findings</a></dt><dt>Local Master Browser (see LMB)</dt><dt>localhost, <a class="indexterm" href="secure.html#ch4bsc">Basic System Configuration</a>, <a class="indexterm" href="HA.html#id2641653">Bad Hostnames</a></dt><dt>lock directory, <a class="indexterm" href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a></dt><dt>locking</dt><dd><dl><dt>Application level, <a class="indexterm" href="appendix.html#ch12dblck">Shared Data Integrity</a></dt><dt>Client side, <a class="indexterm" href="appendix.html#ch12dblck">Shared Data Integrity</a></dt><dt>Server side, <a class="indexterm" href="appendix.html#ch12dblck">Shared Data Integrity</a></dt></dl></dd><dt>logging, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></dt><dt>login, <a class="indexterm" href="secure.html#id2580725">Technical Issues</a></dt><dt>loglevel, <a class="indexterm" href="happy.html#id2595399">Debugging LDAP</a></dt><dt>logon credentials, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt><dt>logon hours, <a class="indexterm" href="ntmigration.html#id2623787">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id2637523">Key Points Learned</a></dt><dt>logon machines, <a class="indexterm" href="ntmigration.html#id2623787">Technical Issues</a></dt><dt>logon path, <a class="indexterm" href="secure.html#id2581218">Implementation</a></dt><dt>logon process, <a class="indexterm" href="unixclients.html#id2612258">Implementation</a></dt><dt>logon scrip, <a class="indexterm" href="secure.html#id2582155">Samba Configuration</a></dt><dt>logon script, <a class="indexterm" href="secure.html#id2581218">Implementation</a>, <a class="indexterm" href="happy.html#id2594009">Technical Issues</a>, <a class="indexterm" href="happy.html#id2603292">Preparation of Logon Scripts</a>, <a class="indexterm" href="ntmigration.html#id2623787">Technical Issues</a></dt><dt>logon server, <a class="indexterm" href="2000users.html#id2606399">The Nature of Windows Networking Protocols</a></dt><dt>logon services, <a class="indexterm" href="secure.html#id2581218">Implementation</a></dt><dt>logon time, <a class="indexterm" href="happy.html#id2593415">Assignment Tasks</a></dt><dt>logon traffic, <a class="indexterm" href="2000users.html#id2606399">The Nature of Windows Networking Protocols</a></dt><dt>logon.kix, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>loopback, <a class="indexterm" href="simple.html#validate1">Validation</a></dt><dt>low performance, <a class="indexterm" href="HA.html#id2642692">Hardware Problems</a></dt><dt>lower-case, <a class="indexterm" href="ntmigration.html#id2624136">Implementation</a></dt><dt>lpadmin, <a class="indexterm" href="simple.html#id2573211">Implementation</a>, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a>, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#ch4ptrcfg">Printer Configuration</a>, <a class="indexterm" href="happy.html#sbehap-ptrcfg">Printer Configuration</a></dt><dt>LSB, <a class="indexterm" href="appendix.html#id2644049">Samba System File Location</a></dt></dl></div><div class="indexdiv"><h3>M</h3><dl><dt>machine, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a></dt><dt>machine account, <a class="indexterm" href="happy.html#id2593176">Regarding LDAP Directories and Windows Computer Accounts</a></dt><dt>machine accounts, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>machine secret password, <a class="indexterm" href="Big500users.html#id2587560">Technical Issues</a></dt><dt>MACHINE.SID, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a></dt><dt>mailing list, <a class="indexterm" href="ch14.html#id2643123">Free Support</a></dt><dt>mailing lists, <a class="indexterm" href="ch14.html#id2643123">Free Support</a></dt><dt>managed, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>management, <a class="indexterm" href="unixclients.html#id2612158">Political Issues</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dd><dl><dt>group, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>User, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt></dl></dd><dt>mandatory profile, <a class="indexterm" href="happy.html#id2594009">Technical Issues</a>, <a class="indexterm" href="happy.html#id2603048">Configuring Profile Directories</a></dt><dt>Mandrake, <a class="indexterm" href="nw4migration.html">Migrating NetWare Server to Samba-3</a></dt><dt>mapped drives, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>mapping, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a>, <a class="indexterm" href="DomApps.html#id2638873">Kerberos Configuration</a></dt><dd><dl><dt>consistent, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt></dl></dd><dt>Mars_NWE, <a class="indexterm" href="nw4migration.html">Migrating NetWare Server to Samba-3</a></dt><dt>master, <a class="indexterm" href="2000users.html#id2605993">Dissection and Discussion</a></dt><dt>material, <a class="indexterm" href="appendix.html">A Collection of Useful Tidbits</a></dt><dt>memberUID, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>memory requirements, <a class="indexterm" href="secure.html#id2581012">Hardware Requirements</a></dt><dt>merge, <a class="indexterm" href="ntmigration.html#id2623787">Technical Issues</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>merged, <a class="indexterm" href="ntmigration.html#id2623787">Technical Issues</a></dt><dt>meta-directory, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a></dt><dt>meta-service, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a></dt><dt>Microsoft Access, <a class="indexterm" href="appendix.html#ch12dblck">Shared Data Integrity</a></dt><dt>Microsoft Excel, <a class="indexterm" href="appendix.html#ch12dblck">Shared Data Integrity</a></dt><dt>Microsoft ISA, <a class="indexterm" href="DomApps.html#id2638317">Assignment Tasks</a></dt><dt>Microsoft Management Console (see MMC)</dt><dt>Microsoft Office, <a class="indexterm" href="secure.html#ch4appscfg">Application Share Configuration</a>, <a class="indexterm" href="kerberos.html#id2636393">Share Point Directory and File Permissions</a></dt><dt>Microsoft Outlook</dt><dd><dl><dt>PST files, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a></dt></dl></dd><dt>migrate, <a class="indexterm" href="upgrades.html">Updating Samba-3</a>, <a class="indexterm" href="ntmigration.html#id2623787">Technical Issues</a></dt><dt>migration, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a>, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="happy.html#id2593415">Assignment Tasks</a>, <a class="indexterm" href="ntmigration.html#id2623461">Introduction</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a>, <a class="indexterm" href="nw4migration.html">Migrating NetWare Server to Samba-3</a></dt><dd><dl><dt>objectives, <a class="indexterm" href="ntmigration.html#id2623601">Dissection and Discussion</a></dt></dl></dd><dt>Migration speed, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>mime type, <a class="indexterm" href="simple.html#id2573211">Implementation</a>, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#ch4ptrcfg">Printer Configuration</a>, <a class="indexterm" href="Big500users.html#id2588515">Server Preparation: All Servers</a>, <a class="indexterm" href="happy.html#sbehap-ptrcfg">Printer Configuration</a></dt><dt>mime types, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a></dt><dt>missing RPC's, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>MIT, <a class="indexterm" href="DomApps.html#id2638624">Implementation</a>, <a class="indexterm" href="DomApps.html#id2638873">Kerberos Configuration</a></dt><dt>MIT Kerberos, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="kerberos.html#id2635086">Kerberos Exposed</a></dt><dt>MIT kerberos, <a class="indexterm" href="unixclients.html#id2617533">IDMAP Storage in LDAP using Winbind</a></dt><dt>MIT KRB5, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a></dt><dt>mixed mode, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></dt><dt>mixed-mode, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a></dt><dt>MMC, <a class="indexterm" href="happy.html#id2604606">Configure Delete Cached Profiles on Logout</a>, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a></dt><dt>mobile computing, <a class="indexterm" href="small.html#id2577104">Dissection and Discussion</a></dt><dt>mobility, <a class="indexterm" href="2000users.html#id2606266">Technical Issues</a></dt><dt>modularization, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>modules, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt><dt>MS Access</dt><dd><dl><dt>validate, <a class="indexterm" href="appendix.html#id2647131">Microsoft Access</a></dt></dl></dd><dt>MS Outlook, <a class="indexterm" href="happy.html#id2604291">Configuration of MS Outlook to Relocate PST File</a></dt><dd><dl><dt>PST, <a class="indexterm" href="happy.html#id2604291">Configuration of MS Outlook to Relocate PST File</a></dt><dt>PST file, <a class="indexterm" href="happy.html">Making Happy Users</a></dt></dl></dd><dt>MS Windows Server 2003, <a class="indexterm" href="DomApps.html#id2638624">Implementation</a></dt><dt>MS Word, <a class="indexterm" href="kerberos.html#id2636393">Share Point Directory and File Permissions</a></dt><dt>MSDFS, <a class="indexterm" href="HA.html#id2642592">Distribute Network Load with MSDFS</a></dt><dt>multi-subnet, <a class="indexterm" href="HA.html#id2641845">Routed Networks</a></dt><dt>multi-user</dt><dd><dl><dt>access, <a class="indexterm" href="appendix.html#id2647131">Microsoft Access</a></dt><dt>data access, <a class="indexterm" href="appendix.html#ch12dblck">Shared Data Integrity</a></dt></dl></dd><dt>multiple directories, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a></dt><dt>multiple domain controllers, <a class="indexterm" href="happy.html">Making Happy Users</a></dt><dt>multiple group mappings, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>mutual assistance, <a class="indexterm" href="ch14.html#id2643123">Free Support</a></dt><dt>My Documents, <a class="indexterm" href="happy.html#id2594521">Roaming Profile Background</a></dt><dt>My Network Places, <a class="indexterm" href="simple.html#id2573211">Implementation</a></dt><dt>mysqlsam, <a class="indexterm" href="2000users.html#id2607228">Implementation</a></dt></dl></div><div class="indexdiv"><h3>N</h3><dl><dt>name resolution, <a class="indexterm" href="secure.html#ch4dhcpdns">Configuration of DHCP and DNS Servers</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="primer.html#id2647750">Assignment Tasks</a></dt><dd><dl><dt>Defective, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></dt></dl></dd><dt>name resolve order, <a class="indexterm" href="secure.html#id2581218">Implementation</a></dt><dt>name service switch, <a class="indexterm" href="small.html#id2577390">Implementation</a> (see NSS)</dt><dt>named, <a class="indexterm" href="secure.html#ch4bsc">Basic System Configuration</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a>, <a class="indexterm" href="Big500users.html#id2588515">Server Preparation: All Servers</a></dt><dt>NAT, <a class="indexterm" href="secure.html#id2580725">Technical Issues</a></dt><dt>native, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a></dt><dt>net</dt><dd><dl><dt>ads</dt><dd><dl><dt>info, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></dt><dt>join, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a></dt><dt>status, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></dt></dl></dd><dt>getlocalsid, <a class="indexterm" href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a>, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a></dt><dt>group, <a class="indexterm" href="ntmigration.html#id2626735">NT4 Migration Using tdbsam Backend</a></dt><dt>groupmap</dt><dd><dl><dt>add, <a class="indexterm" href="secure.html#id2582155">Samba Configuration</a></dt><dt>list, <a class="indexterm" href="secure.html#id2582155">Samba Configuration</a>, <a class="indexterm" href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a></dt><dt>modify, <a class="indexterm" href="secure.html#id2582155">Samba Configuration</a></dt></dl></dd><dt>rpc</dt><dd><dl><dt>info, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a></dt><dt>join, <a class="indexterm" href="Big500users.html#ch5-domsvrspec">Configuration Specific to Domain Member Servers: BLDG1, BLDG2</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="unixclients.html#dcwonss">NT4/Samba Domain with Samba Domain Member Server without NSS Support</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="ntmigration.html#id2626735">NT4 Migration Using tdbsam Backend</a></dt><dt>vampire, <a class="indexterm" href="upgrades.html">Updating Samba-3</a>, <a class="indexterm" href="ntmigration.html#id2626735">NT4 Migration Using tdbsam Backend</a></dt></dl></dd><dt>setlocalsid, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a></dt></dl></dd><dt>NetBIOS, <a class="indexterm" href="2000users.html#id2606399">The Nature of Windows Networking Protocols</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="HA.html#id2641653">Bad Hostnames</a>, <a class="indexterm" href="HA.html#id2641845">Routed Networks</a>, <a class="indexterm" href="primer.html#chap01qa">Questions and Answers</a></dt><dd><dl><dt>name cache, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a></dt><dt>name resolution</dt><dd><dl><dt>delays, <a class="indexterm" href="happy.html">Making Happy Users</a></dt></dl></dd><dt>Node Type, <a class="indexterm" href="primer.html#chap01qa">Questions and Answers</a></dt></dl></dd><dt>netbios</dt><dd><dl><dt>machine  name, <a class="indexterm" href="upgrades.html#id2621180">Change of hostname</a></dt></dl></dd><dt>netbios forwarding, <a class="indexterm" href="HA.html#id2642018">Network Collisions</a></dt><dt>NetBIOS name, <a class="indexterm" href="DomApps.html#id2638873">Kerberos Configuration</a></dt><dd><dl><dt>aliases, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a></dt></dl></dd><dt>netbios name, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a>, <a class="indexterm" href="upgrades.html#id2621180">Change of hostname</a>, <a class="indexterm" href="HA.html#id2641653">Bad Hostnames</a></dt><dt>NETLOGON, <a class="indexterm" href="happy.html#id2594916">Using a Network Default User Profile</a>, <a class="indexterm" href="happy.html#id2603537">Windows Client Configuration</a></dt><dt>netlogon, <a class="indexterm" href="2000users.html#id2606399">The Nature of Windows Networking Protocols</a>, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>Netlogon, <a class="indexterm" href="appendix.html#domjoin">Joining a Domain: Windows 200x/XP Professional</a></dt><dt>netmask, <a class="indexterm" href="simple.html#id2572242">Implementation</a></dt><dt>Netware, <a class="indexterm" href="small.html">Small Office Networking</a></dt><dt>NetWare, <a class="indexterm" href="nw4migration.html">Migrating NetWare Server to Samba-3</a>, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>network</dt><dd><dl><dt>administrators, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>analyzer, <a class="indexterm" href="primer.html#id2647750">Assignment Tasks</a></dt><dt>bandwidth, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a>, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a></dt><dt>broadcast, <a class="indexterm" href="primer.html#id2647690">Introduction</a></dt><dt>captures, <a class="indexterm" href="primer.html#id2647528">Requirements and Notes</a></dt><dt>collisions, <a class="indexterm" href="HA.html#id2642018">Network Collisions</a></dt><dt>load, <a class="indexterm" href="HA.html#id2642018">Network Collisions</a></dt><dt>logon, <a class="indexterm" href="happy.html">Making Happy Users</a></dt><dt>logon scripts, <a class="indexterm" href="ntmigration.html#id2623601">Dissection and Discussion</a></dt><dt>management, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>multi-segment, <a class="indexterm" href="happy.html#id2593318">Introduction</a></dt><dt>overload, <a class="indexterm" href="happy.html">Making Happy Users</a></dt><dt>performance, <a class="indexterm" href="HA.html#id2642118">Samba Configuration</a></dt><dt>routed, <a class="indexterm" href="2000users.html#id2605993">Dissection and Discussion</a></dt><dt>secure, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>segment, <a class="indexterm" href="happy.html#id2593552">Dissection and Discussion</a></dt><dt>services, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt><dt>sniffer, <a class="indexterm" href="primer.html#id2647528">Requirements and Notes</a></dt><dt>timeout, <a class="indexterm" href="happy.html">Making Happy Users</a></dt><dt>timeouts, <a class="indexterm" href="HA.html#id2642018">Network Collisions</a></dt><dt>trace, <a class="indexterm" href="primer.html#id2647750">Assignment Tasks</a></dt><dt>traffic</dt><dd><dl><dt>observation, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt></dl></dd><dt>wide-area, <a class="indexterm" href="happy.html#id2593552">Dissection and Discussion</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a></dt></dl></dd><dt>Network Address Translation (see NAT)</dt><dt>network administrators, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>network attached storage (see NAS)</dt><dt>network bandwidth</dt><dd><dl><dt>utilization, <a class="indexterm" href="happy.html">Making Happy Users</a></dt></dl></dd><dt>Network Default Profile, <a class="indexterm" href="happy.html#id2594521">Roaming Profile Background</a></dt><dt>network hardware</dt><dd><dl><dt>defective, <a class="indexterm" href="happy.html">Making Happy Users</a></dt></dl></dd><dt>network hygiene, <a class="indexterm" href="HA.html#id2641143">Dissection and Discussion</a></dt><dt>network Identities, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>network load factors, <a class="indexterm" href="Big500users.html#id2587525">Dissection and Discussion</a></dt><dt>Network Neighborhood, <a class="indexterm" href="simple.html#validate1">Validation</a>, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>network segment, <a class="indexterm" href="HA.html#id2642445">Use and Location of BDCs</a></dt><dt>network segments, <a class="indexterm" href="secure.html#id2581012">Hardware Requirements</a></dt><dt>network share, <a class="indexterm" href="happy.html#id2593415">Assignment Tasks</a></dt><dt>networking</dt><dd><dl><dt>client, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a></dt></dl></dd><dt>networking hardware</dt><dd><dl><dt>defective, <a class="indexterm" href="happy.html">Making Happy Users</a></dt></dl></dd><dt>networking protocols, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>next generation, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>NextFreeUnixId, <a class="indexterm" href="ntmigration.html#id2624277">NT4 Migration Using LDAP Backend</a></dt><dt>NFS server, <a class="indexterm" href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a></dt><dt>NICs, <a class="indexterm" href="HA.html#id2642692">Hardware Problems</a></dt><dt>NIS, <a class="indexterm" href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a>, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a>, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id2612158">Political Issues</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>nis, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>NIS schema, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a></dt><dt>NIS server, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a></dt><dt>NIS+, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a></dt><dt>nisplus, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>NLM, <a class="indexterm" href="nw4migration.html">Migrating NetWare Server to Samba-3</a></dt><dt>nmap, <a class="indexterm" href="secure.html#ch4valid">Validation</a></dt><dt>nmbd, <a class="indexterm" href="small.html#id2579091">Validation</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a>, <a class="indexterm" href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a>, <a class="indexterm" href="upgrades.html#id2622886">Replacing a Domain Member Server</a>, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a>, <a class="indexterm" href="appendix.html#id2644469">Starting Samba</a></dt><dt>nobody, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a>, <a class="indexterm" href="primer.html#id2649376">Findings and Comments</a></dt><dt>Novell, <a class="indexterm" href="nw4migration.html">Migrating NetWare Server to Samba-3</a>, <a class="indexterm" href="nw4migration.html#id2628156">Introduction</a></dt><dt>Novell SUSE SLES 9, <a class="indexterm" href="ntmigration.html#id2624277">NT4 Migration Using LDAP Backend</a></dt><dt>NSS, <a class="indexterm" href="happy.html#id2593176">Regarding LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="happy.html#id2594009">Technical Issues</a>, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a>, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="unixclients.html#id2616929">IDMAP_RID with Winbind</a>, <a class="indexterm" href="unixclients.html#id2618464">UNIX/Linux Client Domain Member</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a>, <a class="indexterm" href="DomApps.html#id2639814">NSS Configuration</a> (see same service switch)</dt><dt>nss_ldap, <a class="indexterm" href="happy.html#id2593176">Regarding LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="happy.html#id2594009">Technical Issues</a>, <a class="indexterm" href="happy.html#ldapsetup">OpenLDAP Server Configuration</a>, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a>, <a class="indexterm" href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="unixclients.html#id2618127">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a>, <a class="indexterm" href="upgrades.html#id2622886">Replacing a Domain Member Server</a>, <a class="indexterm" href="ntmigration.html#id2624277">NT4 Migration Using LDAP Backend</a></dt><dt>nt acl support, <a class="indexterm" href="simple.html#id2573001">Dissection and Discussion</a></dt><dt>NT4 registry, <a class="indexterm" href="ntmigration.html#id2623601">Dissection and Discussion</a></dt><dt>NTLM, <a class="indexterm" href="DomApps.html#id2638451">Technical Issues</a></dt><dt>NTLM authentication daemon, <a class="indexterm" href="DomApps.html#id2638451">Technical Issues</a></dt><dt>NTLMSSP, <a class="indexterm" href="DomApps.html#id2640476">Key Points Learned</a>, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a>, <a class="indexterm" href="primer.html#id2649641">Windows 200x/XP Client Interaction with Samba-3</a></dt><dt>NTLMSSP_AUTH, <a class="indexterm" href="primer.html#id2649641">Windows 200x/XP Client Interaction with Samba-3</a></dt><dt>ntlm_auth, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a>, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt><dt>NTP, <a class="indexterm" href="DomApps.html#id2638873">Kerberos Configuration</a></dt><dt>NTUSER.DAT, <a class="indexterm" href="happy.html#id2594521">Roaming Profile Background</a>, <a class="indexterm" href="happy.html#id2594822">Profile Changes</a>, <a class="indexterm" href="happy.html#id2594916">Using a Network Default User Profile</a>, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a></dt><dt>NULL connection, <a class="indexterm" href="simple.html#validate1">Validation</a></dt><dt>NULL session, <a class="indexterm" href="primer.html#id2649376">Findings and Comments</a></dt><dt>NULL-Session, <a class="indexterm" href="primer.html#id2650178">Discussion</a></dt></dl></div><div class="indexdiv"><h3>O</h3><dl><dt>objectClass, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>off-site storage, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>Open Magazine, <a class="indexterm" href="unixclients.html">Adding Domain Member Servers and Clients</a></dt><dt>Open Source, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>OpenLDAP, <a class="indexterm" href="happy.html#id2593552">Dissection and Discussion</a>, <a class="indexterm" href="2000users.html#id2605993">Dissection and Discussion</a>, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a>, <a class="indexterm" href="unixclients.html#id2612158">Political Issues</a>, <a class="indexterm" href="nw4migration.html#id2628462">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a>, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id2637523">Key Points Learned</a>, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt><dt>openldap, <a class="indexterm" href="happy.html#ldapsetup">OpenLDAP Server Configuration</a></dt><dt>OpenOffice, <a class="indexterm" href="secure.html#ch4appscfg">Application Share Configuration</a></dt><dt>operating profiles, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt><dt>oplock break, <a class="indexterm" href="kerberos.html#id2636232">Override Controls</a></dt><dt>oplocks, <a class="indexterm" href="HA.html#id2642118">Samba Configuration</a></dt><dt>Oplocks</dt><dd><dl><dt>disabled, <a class="indexterm" href="appendix.html#id2647362">Opportunistic Locking Controls</a></dt></dl></dd><dt>opportunistic</dt><dd><dl><dt>locking, <a class="indexterm" href="kerberos.html#id2636232">Override Controls</a></dt></dl></dd><dt>opportunistic locking, <a class="indexterm" href="secure.html#id2581218">Implementation</a>, <a class="indexterm" href="HA.html#id2642118">Samba Configuration</a>, <a class="indexterm" href="appendix.html#id2647278">Act! Database Sharing</a></dt><dt>optimized, <a class="indexterm" href="HA.html#id2642118">Samba Configuration</a></dt><dt>organizational units, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt><dt>OS/2, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a></dt><dt>Outlook</dt><dd><dl><dt>PST, <a class="indexterm" href="happy.html#id2604291">Configuration of MS Outlook to Relocate PST File</a></dt></dl></dd><dt>Outlook Address Book, <a class="indexterm" href="happy.html#id2604291">Configuration of MS Outlook to Relocate PST File</a></dt><dt>Outlook Express, <a class="indexterm" href="secure.html#id2581178">Political Issues</a>, <a class="indexterm" href="happy.html#id2604291">Configuration of MS Outlook to Relocate PST File</a></dt><dt>over-ride, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>over-ride controls, <a class="indexterm" href="kerberos.html#id2636232">Override Controls</a></dt><dt>over-rule, <a class="indexterm" href="kerberos.html#id2635432">Share Access Controls</a>, <a class="indexterm" href="kerberos.html#id2637142">Using MS Windows Explorer (File Manager)</a></dt><dt>overheads, <a class="indexterm" href="kerberos.html#id2636232">Override Controls</a></dt><dt>ownership, <a class="indexterm" href="kerberos.html#id2636393">Share Point Directory and File Permissions</a></dt></dl></div><div class="indexdiv"><h3>P</h3><dl><dt>package, <a class="indexterm" href="simple.html#id2572242">Implementation</a></dt><dt>package names, <a class="indexterm" href="appendix.html#id2644049">Samba System File Location</a></dt><dt>packages, <a class="indexterm" href="upgrades.html#id2622561">Updating a Samba-3 Installation</a></dt><dt>PADL, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id2617533">IDMAP Storage in LDAP using Winbind</a></dt><dt>PADL LDAP tools, <a class="indexterm" href="happy.html#id2594009">Technical Issues</a></dt><dt>PADL Software, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>paid-for support, <a class="indexterm" href="ch14.html">Samba Support</a></dt><dt>PAM, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a>, <a class="indexterm" href="unixclients.html#id2618464">UNIX/Linux Client Domain Member</a>, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>pam_ldap, <a class="indexterm" href="happy.html#ldapsetup">OpenLDAP Server Configuration</a></dt><dt>pam_ldap.so, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a></dt><dt>pam_unix2.so, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a></dt><dd><dl><dt>use_ldap, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a></dt></dl></dd><dt>parameters, <a class="indexterm" href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a></dt><dt>passdb backend, <a class="indexterm" href="secure.html#id2581218">Implementation</a>, <a class="indexterm" href="Big500users.html">The 500-User Office</a>, <a class="indexterm" href="happy.html#id2593552">Dissection and Discussion</a>, <a class="indexterm" href="2000users.html#id2605993">Dissection and Discussion</a>, <a class="indexterm" href="2000users.html#id2607228">Implementation</a>, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="upgrades.html">Updating Samba-3</a>, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a>, <a class="indexterm" href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a>, <a class="indexterm" href="upgrades.html#id2622705">Updating from Samba Versions between 3.0.6 and 3.0.10</a>, <a class="indexterm" href="ntmigration.html#id2623546">Assignment Tasks</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>passdb.tdb, <a class="indexterm" href="ntmigration.html#id2623787">Technical Issues</a></dt><dt>passwd, <a class="indexterm" href="simple.html#id2573211">Implementation</a>, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a>, <a class="indexterm" href="secure.html#id2582155">Samba Configuration</a></dt><dt>password</dt><dd><dl><dt>backend, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#id2582155">Samba Configuration</a>, <a class="indexterm" href="Big500users.html#id2589093">Configuration for Server: MASSIVE</a></dt></dl></dd><dt>password caching, <a class="indexterm" href="simple.html#id2573211">Implementation</a></dt><dt>password change, <a class="indexterm" href="kerberos.html#id2637523">Key Points Learned</a></dt><dt>password length, <a class="indexterm" href="primer.html#id2649139">Simple Windows Client Connection Characteristics</a>, <a class="indexterm" href="primer.html#id2649641">Windows 200x/XP Client Interaction with Samba-3</a></dt><dt>payroll, <a class="indexterm" href="nw4migration.html#id2628156">Introduction</a></dt><dt>pdbedit, <a class="indexterm" href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="happy.html#sbehap-bldg1">Samba-3 BDC Configuration</a>, <a class="indexterm" href="ntmigration.html#id2626735">NT4 Migration Using tdbsam Backend</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>PDC, <a class="indexterm" href="Big500users.html#id2587419">Assignment Tasks</a>, <a class="indexterm" href="Big500users.html#id2587560">Technical Issues</a>, <a class="indexterm" href="happy.html">Making Happy Users</a>, <a class="indexterm" href="happy.html#id2594009">Technical Issues</a>, <a class="indexterm" href="happy.html#sbehap-locgrppol">The Local Group Policy</a>, <a class="indexterm" href="2000users.html#id2606399">The Nature of Windows Networking Protocols</a>, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a>, <a class="indexterm" href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a>, <a class="indexterm" href="ntmigration.html#id2624136">Implementation</a>, <a class="indexterm" href="ntmigration.html#id2624277">NT4 Migration Using LDAP Backend</a>, <a class="indexterm" href="ntmigration.html#id2626735">NT4 Migration Using tdbsam Backend</a>, <a class="indexterm" href="HA.html#id2642445">Use and Location of BDCs</a></dt><dt>PDC/BDC ratio, <a class="indexterm" href="happy.html">Making Happy Users</a></dt><dt>PDF, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt><dt>performance, <a class="indexterm" href="happy.html#id2593552">Dissection and Discussion</a>, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a>, <a class="indexterm" href="HA.html">Performance, Reliability, and Availability</a>, <a class="indexterm" href="HA.html#id2641056">Introduction</a>, <a class="indexterm" href="HA.html#id2642018">Network Collisions</a></dt><dt>performance degradation, <a class="indexterm" href="kerberos.html#id2636232">Override Controls</a>, <a class="indexterm" href="HA.html#id2642118">Samba Configuration</a></dt><dt>Perl, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a>, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt><dt>permission, <a class="indexterm" href="kerberos.html#id2636393">Share Point Directory and File Permissions</a></dt><dt>permissions, <a class="indexterm" href="simple.html#id2573211">Implementation</a>, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id2635432">Share Access Controls</a>, <a class="indexterm" href="kerberos.html#id2635920">Checkpoint Controls</a>, <a class="indexterm" href="kerberos.html#id2636393">Share Point Directory and File Permissions</a>, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></dt><dd><dl><dt>excessive, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>group, <a class="indexterm" href="kerberos.html#id2636393">Share Point Directory and File Permissions</a></dt><dt>user, <a class="indexterm" href="kerberos.html#id2636393">Share Point Directory and File Permissions</a></dt></dl></dd><dt>Permissions, <a class="indexterm" href="kerberos.html#id2636851">Using the MMC Computer Management Interface</a></dt><dt>permits, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>permitted group, <a class="indexterm" href="kerberos.html#id2636851">Using the MMC Computer Management Interface</a></dt><dt>PHP, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt><dt>PHP4, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt><dt>pile-driver, <a class="indexterm" href="kerberos.html#id2635780">Share Definition Controls</a></dt><dt>ping, <a class="indexterm" href="secure.html#ch4valid">Validation</a></dt><dt>pitfalls, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt><dt>plain-text, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt><dt>Pluggable Authentication Modules (see PAM)</dt><dt>policy, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>poor performance, <a class="indexterm" href="HA.html#id2641143">Dissection and Discussion</a></dt><dt>POP3, <a class="indexterm" href="nw4migration.html#id2628462">Technical Issues</a></dt><dt>Posix, <a class="indexterm" href="simple.html#id2573001">Dissection and Discussion</a>, <a class="indexterm" href="happy.html#id2594009">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="ntmigration.html#id2624136">Implementation</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a>, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt><dt>POSIX, <a class="indexterm" href="happy.html#id2593176">Regarding LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>Posix accounts, <a class="indexterm" href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a></dt><dt>Posix ACLs, <a class="indexterm" href="kerberos.html#id2636796">Managing Windows 200x ACLs</a></dt><dt>PosixAccount, <a class="indexterm" href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a></dt><dt>posixAccount, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>Postfix, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>Postscript, <a class="indexterm" href="happy.html#id2594975">Installation of Printer Driver Auto-Download</a></dt><dt>powers, <a class="indexterm" href="kerberos.html#id2635780">Share Definition Controls</a></dt><dt>practices, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>precaution, <a class="indexterm" href="upgrades.html#id2620252">Introduction</a></dt><dt>presence and leadership, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>price paid, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>primary group, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="kerberos.html#id2636393">Share Point Directory and File Permissions</a></dt><dt>principals, <a class="indexterm" href="kerberos.html#id2635086">Kerberos Exposed</a></dt><dt>print filter, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#ch4ptrcfg">Printer Configuration</a>, <a class="indexterm" href="Big500users.html#id2588515">Server Preparation: All Servers</a>, <a class="indexterm" href="happy.html#sbehap-ptrcfg">Printer Configuration</a></dt><dt>print queue, <a class="indexterm" href="simple.html#id2572871">Charity Administration Office</a>, <a class="indexterm" href="simple.html#id2573001">Dissection and Discussion</a></dt><dt>print spooler, <a class="indexterm" href="simple.html#id2572871">Charity Administration Office</a></dt><dt>Print Test Page, <a class="indexterm" href="happy.html#id2604786">Uploading Printer Drivers to Samba Servers</a></dt><dt>printcap name, <a class="indexterm" href="secure.html#id2581218">Implementation</a></dt><dt>printer validation, <a class="indexterm" href="small.html#id2579091">Validation</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a></dt><dt>printers</dt><dd><dl><dt>Advanced, <a class="indexterm" href="happy.html#id2604786">Uploading Printer Drivers to Samba Servers</a></dt><dt>Default Settings, <a class="indexterm" href="happy.html#id2604786">Uploading Printer Drivers to Samba Servers</a></dt><dt>General, <a class="indexterm" href="happy.html#id2604786">Uploading Printer Drivers to Samba Servers</a></dt><dt>Properties, <a class="indexterm" href="happy.html#id2604786">Uploading Printer Drivers to Samba Servers</a></dt><dt>Security, <a class="indexterm" href="happy.html#id2604786">Uploading Printer Drivers to Samba Servers</a></dt><dt>Sharing, <a class="indexterm" href="happy.html#id2604786">Uploading Printer Drivers to Samba Servers</a></dt></dl></dd><dt>printing, <a class="indexterm" href="secure.html#id2581218">Implementation</a></dt><dd><dl><dt>drag-and-drop, <a class="indexterm" href="happy.html#id2594975">Installation of Printer Driver Auto-Download</a>, <a class="indexterm" href="happy.html#id2604786">Uploading Printer Drivers to Samba Servers</a></dt><dt>dumb, <a class="indexterm" href="happy.html#id2594975">Installation of Printer Driver Auto-Download</a></dt><dt>point-n-click, <a class="indexterm" href="happy.html#id2594975">Installation of Printer Driver Auto-Download</a></dt><dt>raw, <a class="indexterm" href="simple.html#id2573001">Dissection and Discussion</a></dt></dl></dd><dt>privacy, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a></dt><dt>Privilege Attribute Certificates (see PAC)</dt><dt>privilege controls, <a class="indexterm" href="kerberos.html#id2636393">Share Point Directory and File Permissions</a></dt><dt>privileged pipe, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a></dt><dt>privileges, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a>, <a class="indexterm" href="upgrades.html#id2622783">Updating from Samba Versions after 3.0.6 to a Current Release</a>, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id2635780">Share Definition Controls</a></dt><dt>problem report, <a class="indexterm" href="ch14.html#id2643123">Free Support</a></dt><dt>problem resolution, <a class="indexterm" href="ch14.html">Samba Support</a></dt><dt>product defects, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>professional support, <a class="indexterm" href="ch14.html#id2643123">Free Support</a></dt><dt>profile</dt><dd><dl><dt>default, <a class="indexterm" href="happy.html#id2593415">Assignment Tasks</a></dt><dt>mandatory, <a class="indexterm" href="2000users.html#id2606399">The Nature of Windows Networking Protocols</a></dt><dt>roaming, <a class="indexterm" href="happy.html">Making Happy Users</a></dt></dl></dd><dt>profile path, <a class="indexterm" href="ntmigration.html#id2623787">Technical Issues</a></dt><dt>profile share, <a class="indexterm" href="secure.html#id2581218">Implementation</a></dt><dt>profiles, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a></dt><dt>profiles share, <a class="indexterm" href="ntmigration.html#id2623601">Dissection and Discussion</a></dt><dt>programmer, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>project, <a class="indexterm" href="ch14.html#id2643123">Free Support</a></dt><dt>project maintainers, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>Properties, <a class="indexterm" href="kerberos.html#id2636851">Using the MMC Computer Management Interface</a></dt><dt>proprietary, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>protected, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>protection, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>protocol</dt><dd><dl><dt>negotiation, <a class="indexterm" href="2000users.html#id2606399">The Nature of Windows Networking Protocols</a></dt></dl></dd><dt>protocol analysis, <a class="indexterm" href="primer.html#id2647528">Requirements and Notes</a></dt><dt>protocols, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>provided services, <a class="indexterm" href="ch14.html">Samba Support</a></dt><dt>proxy, <a class="indexterm" href="DomApps.html#id2638317">Assignment Tasks</a>, <a class="indexterm" href="DomApps.html#id2638451">Technical Issues</a></dt><dt>PST file, <a class="indexterm" href="happy.html#id2604291">Configuration of MS Outlook to Relocate PST File</a></dt><dt>public specifications, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>purchase support, <a class="indexterm" href="ch14.html#id2643123">Free Support</a></dt></dl></div><div class="indexdiv"><h3>Q</h3><dl><dt>Qbasic, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>qualified problem, <a class="indexterm" href="ch14.html#id2643123">Free Support</a></dt></dl></div><div class="indexdiv"><h3>R</h3><dl><dt>RAID, <a class="indexterm" href="secure.html#id2581012">Hardware Requirements</a></dt><dt>RAID controllers, <a class="indexterm" href="HA.html#id2642692">Hardware Problems</a></dt><dt>Raw Print Through, <a class="indexterm" href="happy.html#id2594975">Installation of Printer Driver Auto-Download</a></dt><dt>raw printing, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#ch4ptrcfg">Printer Configuration</a>, <a class="indexterm" href="Big500users.html#id2588515">Server Preparation: All Servers</a>, <a class="indexterm" href="happy.html#sbehap-ptrcfg">Printer Configuration</a></dt><dt>Rbase, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>rcldap, <a class="indexterm" href="2000users.html#id2607228">Implementation</a></dt><dt>realm, <a class="indexterm" href="unixclients.html#id2616929">IDMAP_RID with Winbind</a>, <a class="indexterm" href="unixclients.html#id2617533">IDMAP Storage in LDAP using Winbind</a>, <a class="indexterm" href="DomApps.html#id2638873">Kerberos Configuration</a></dt><dt>recognize, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>record locking, <a class="indexterm" href="appendix.html#id2647131">Microsoft Access</a></dt><dt>recursively, <a class="indexterm" href="kerberos.html#id2637313">Setting Posix ACLs in UNIX/Linux</a></dt><dt>Red Hat, <a class="indexterm" href="simple.html#id2572100">Drafting Office</a>, <a class="indexterm" href="nw4migration.html">Migrating NetWare Server to Samba-3</a></dt><dt>Red Hat Fedora Linux, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a></dt><dt>Red Hat Linux, <a class="indexterm" href="simple.html#id2573001">Dissection and Discussion</a>, <a class="indexterm" href="simple.html#AccountingOffice">Accounting Office</a>, <a class="indexterm" href="happy.html#id2596084">Samba Server Implementation</a>, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a>, <a class="indexterm" href="2000users.html#id2607228">Implementation</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="DomApps.html#id2638624">Implementation</a>, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a></dt><dt>redirected folders, <a class="indexterm" href="happy.html#id2594521">Roaming Profile Background</a>, <a class="indexterm" href="2000users.html#id2606399">The Nature of Windows Networking Protocols</a></dt><dt>refereed standards, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>regedit, <a class="indexterm" href="simple.html#id2573211">Implementation</a></dt><dt>regedt32, <a class="indexterm" href="happy.html#id2594822">Profile Changes</a>, <a class="indexterm" href="happy.html#redirfold">Configuration of Default Profile with Folder Redirection</a></dt><dt>registry, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dd><dl><dt>keys</dt><dd><dl><dt>SAM, <a class="indexterm" href="ntmigration.html#id2623601">Dissection and Discussion</a></dt><dt>SECURITY, <a class="indexterm" href="ntmigration.html#id2623601">Dissection and Discussion</a></dt></dl></dd></dl></dd><dt>registry change, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a></dt><dt>Registry Editor, <a class="indexterm" href="happy.html#redirfold">Configuration of Default Profile with Folder Redirection</a></dt><dt>registry hacks, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a></dt><dt>registry keys, <a class="indexterm" href="happy.html#redirfold">Configuration of Default Profile with Folder Redirection</a></dt><dt>reimburse, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>rejected, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="kerberos.html#id2635432">Share Access Controls</a></dt><dt>rejoin, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>reliability, <a class="indexterm" href="HA.html">Performance, Reliability, and Availability</a></dt><dt>remote announce, <a class="indexterm" href="HA.html#id2641845">Routed Networks</a></dt><dt>remote browse sync, <a class="indexterm" href="HA.html#id2641845">Routed Networks</a></dt><dt>remote procedure call (see RPC)</dt><dt>replicate, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="HA.html#id2642647">Replicate Data to Conserve Peak-Demand Wide-Area Bandwidth</a></dt><dt>replicated, <a class="indexterm" href="2000users.html#id2605993">Dissection and Discussion</a></dt><dt>requesting payment, <a class="indexterm" href="ch14.html#id2643123">Free Support</a></dt><dt>resilient, <a class="indexterm" href="HA.html#id2641615">Guidelines for Reliable Samba Operation</a></dt><dt>resolution, <a class="indexterm" href="upgrades.html#id2622886">Replacing a Domain Member Server</a></dt><dt>resolve, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a>, <a class="indexterm" href="HA.html#id2641653">Bad Hostnames</a></dt><dt>response, <a class="indexterm" href="unixclients.html#id2616929">IDMAP_RID with Winbind</a></dt><dt>responsibility, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>responsible, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>restrict anonymous, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>restricted export, <a class="indexterm" href="kerberos.html#id2635086">Kerberos Exposed</a></dt><dt>Restrictive security, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></dt><dt>reverse DNS, <a class="indexterm" href="DomApps.html#id2638873">Kerberos Configuration</a></dt><dt>rfc2307bis, <a class="indexterm" href="unixclients.html#id2618127">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a></dt><dt>RID, <a class="indexterm" href="unixclients.html#id2616929">IDMAP_RID with Winbind</a>, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>risk, <a class="indexterm" href="secure.html#id2580725">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>road-map, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dd><dl><dt>published, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt></dl></dd><dt>roaming profile, <a class="indexterm" href="happy.html#id2594009">Technical Issues</a>, <a class="indexterm" href="happy.html#id2594521">Roaming Profile Background</a>, <a class="indexterm" href="happy.html#id2603048">Configuring Profile Directories</a>, <a class="indexterm" href="2000users.html#id2606306">User Needs</a>, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a></dt><dt>roaming profiles, <a class="indexterm" href="secure.html#id2580725">Technical Issues</a>, <a class="indexterm" href="secure.html#id2581218">Implementation</a>, <a class="indexterm" href="happy.html#id2594521">Roaming Profile Background</a></dt><dt>routed network, <a class="indexterm" href="HA.html#id2642445">Use and Location of BDCs</a></dt><dt>router, <a class="indexterm" href="small.html#id2577390">Implementation</a></dt><dt>routers, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a>, <a class="indexterm" href="HA.html#id2641845">Routed Networks</a></dt><dt>RPC, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="kerberos.html#id2635086">Kerberos Exposed</a></dt><dt>rpc, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a></dt><dt>rpcclient, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a></dt><dt>RPM, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a>, <a class="indexterm" href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a>, <a class="indexterm" href="nw4migration.html#id2628385">Dissection and Discussion</a></dt><dd><dl><dt>install, <a class="indexterm" href="simple.html#id2572242">Implementation</a></dt></dl></dd><dt>rpm, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a>, <a class="indexterm" href="appendix.html#id2644049">Samba System File Location</a></dt><dt>RPMs, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a></dt><dt>rpms, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></dt><dt>rsync, <a class="indexterm" href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a>, <a class="indexterm" href="HA.html#id2642647">Replicate Data to Conserve Peak-Demand Wide-Area Bandwidth</a></dt><dt>rsyncd.conf, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>run-time control files, <a class="indexterm" href="appendix.html#id2644049">Samba System File Location</a></dt></dl></div><div class="indexdiv"><h3>S</h3><dl><dt>safe-guards, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>SAM, <a class="indexterm" href="ntmigration.html#id2623601">Dissection and Discussion</a></dt><dt>samba, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></dt><dd><dl><dt>starting samba, <a class="indexterm" href="simple.html#id2572242">Implementation</a></dt></dl></dd><dt>Samba, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a></dt><dt>Samba accounts, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a></dt><dt>samba cluster, <a class="indexterm" href="HA.html#id2641056">Introduction</a></dt><dt>samba control script, <a class="indexterm" href="appendix.html#id2644469">Starting Samba</a></dt><dt>Samba Domain, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>Samba Domain server, <a class="indexterm" href="kerberos.html#id2636851">Using the MMC Computer Management Interface</a></dt><dt>Samba RPM Packages, <a class="indexterm" href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a></dt><dt>Samba Tea, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a></dt><dt>sambaDomainName, <a class="indexterm" href="ntmigration.html#id2624277">NT4 Migration Using LDAP Backend</a></dt><dt>sambaGroupMapping, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>SambaSAMAccount, <a class="indexterm" href="happy.html#id2593176">Regarding LDAP Directories and Windows Computer Accounts</a></dt><dt>SambaSamAccount, <a class="indexterm" href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a></dt><dt>sambaSamAccount, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>SambaXP conference, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt><dt>SAN, <a class="indexterm" href="HA.html#id2642542">For Scalability, Use SAN-Based Storage on Samba Servers</a></dt><dt>SAS, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a></dt><dt>scalability, <a class="indexterm" href="HA.html#id2641056">Introduction</a></dt><dt>scalable, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a></dt><dt>schannel, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id2637523">Key Points Learned</a>, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a></dt><dt>schema, <a class="indexterm" href="unixclients.html#id2618127">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="upgrades.html#id2622379">Samba-2.x with LDAP Support</a>, <a class="indexterm" href="upgrades.html#id2622705">Updating from Samba Versions between 3.0.6 and 3.0.10</a></dt><dt>scripts, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt><dt>secondary group, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>secret, <a class="indexterm" href="kerberos.html#id2635086">Kerberos Exposed</a></dt><dt>secrets.tdb, <a class="indexterm" href="happy.html#id2594009">Technical Issues</a>, <a class="indexterm" href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a>, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a>, <a class="indexterm" href="upgrades.html#sbeug1">Location of config files</a></dt><dt>secure, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>secure account password, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>secure connections, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt><dt>secure networking, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>secure networking protocols, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>security, <a class="indexterm" href="happy.html#id2594009">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a>, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a>, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id2636393">Share Point Directory and File Permissions</a>, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a></dt><dd><dl><dt>identifier, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a></dt><dt>share mode, <a class="indexterm" href="simple.html#id2573001">Dissection and Discussion</a></dt><dt>user mode, <a class="indexterm" href="simple.html#id2575254">Dissection and Discussion</a></dt></dl></dd><dt>Security, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id2636851">Using the MMC Computer Management Interface</a></dt><dt>Security Account Manager (see SAM)</dt><dt>security controls, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>security descriptors, <a class="indexterm" href="ntmigration.html#id2623601">Dissection and Discussion</a></dt><dt>security fixes, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>security updates, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>SerNet, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a></dt><dt>server</dt><dd><dl><dt>domain member, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a></dt><dt>stand-alone, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a></dt></dl></dd><dt>service, <a class="indexterm" href="2000users.html#id2607228">Implementation</a></dt><dd><dl><dt>smb</dt><dd><dl><dt>start, <a class="indexterm" href="Big500users.html#ch5-domsvrspec">Configuration Specific to Domain Member Servers: BLDG1, BLDG2</a></dt></dl></dd></dl></dd><dt>Service Packs, <a class="indexterm" href="secure.html#ch4appscfg">Application Share Configuration</a></dt><dt>services, <a class="indexterm" href="DomApps.html#id2640476">Key Points Learned</a></dt><dt>services provided, <a class="indexterm" href="ch14.html">Samba Support</a></dt><dt>session setup, <a class="indexterm" href="primer.html#id2649139">Simple Windows Client Connection Characteristics</a>, <a class="indexterm" href="primer.html#id2649641">Windows 200x/XP Client Interaction with Samba-3</a></dt><dt>Session Setup, <a class="indexterm" href="primer.html#id2649139">Simple Windows Client Connection Characteristics</a></dt><dt>SessionSetUpAndX, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a></dt><dt>set primary group script, <a class="indexterm" href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a></dt><dt>setfacl, <a class="indexterm" href="kerberos.html#id2637313">Setting Posix ACLs in UNIX/Linux</a></dt><dt>severely degrade, <a class="indexterm" href="HA.html#id2642118">Samba Configuration</a></dt><dt>SFU, <a class="indexterm" href="unixclients.html#id2618413">IDMAP, Active Directory, and MS Services for UNIX 3.5</a></dt><dt>SGID, <a class="indexterm" href="simple.html#id2573001">Dissection and Discussion</a>, <a class="indexterm" href="kerberos.html#id2636393">Share Point Directory and File Permissions</a>, <a class="indexterm" href="appendix.html#ch12-SUIDSGID">Effect of Setting File and Directory SUID/SGID Permissions Explained</a></dt><dt>shadow-utils, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>Share Access Controls, <a class="indexterm" href="kerberos.html#id2635432">Share Access Controls</a></dt><dt>share ACLs, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a></dt><dt>share definition, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>Share Definition</dt><dd><dl><dt>Controls, <a class="indexterm" href="kerberos.html#id2635780">Share Definition Controls</a></dt></dl></dd><dt>share definition controls, <a class="indexterm" href="kerberos.html#id2635780">Share Definition Controls</a>, <a class="indexterm" href="kerberos.html#id2635920">Checkpoint Controls</a>, <a class="indexterm" href="kerberos.html#id2636393">Share Point Directory and File Permissions</a>, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a></dt><dt>share level access controls, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a></dt><dt>share level ACL, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a></dt><dt>Share Permissions, <a class="indexterm" href="kerberos.html#id2635432">Share Access Controls</a></dt><dt>shared resource, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id2637313">Setting Posix ACLs in UNIX/Linux</a></dt><dt>shares, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>SID, <a class="indexterm" href="secure.html#ch4wincfg">Windows Client Configuration</a>, <a class="indexterm" href="happy.html#id2593176">Regarding LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a>, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id2616929">IDMAP_RID with Winbind</a>, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a>, <a class="indexterm" href="upgrades.html#id2621245">Change of Workgroup (Domain) Name</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a>, <a class="indexterm" href="appendix.html#id2645074">Initialization of the LDAP Database</a></dt><dt>side effects, <a class="indexterm" href="kerberos.html#id2636796">Managing Windows 200x ACLs</a></dt><dt>Sign'n'seal, <a class="indexterm" href="kerberos.html#id2637523">Key Points Learned</a>, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a></dt><dt>silent return, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></dt><dt>simple, <a class="indexterm" href="HA.html#id2641143">Dissection and Discussion</a></dt><dt>Single Sign-On (see SSO)</dt><dt>slapcat, <a class="indexterm" href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>slapd, <a class="indexterm" href="happy.html#id2595399">Debugging LDAP</a></dt><dt>slapd.conf, <a class="indexterm" href="ntmigration.html#id2624277">NT4 Migration Using LDAP Backend</a></dt><dt>slave, <a class="indexterm" href="2000users.html#id2605993">Dissection and Discussion</a></dt><dt>slow logon, <a class="indexterm" href="happy.html">Making Happy Users</a></dt><dt>slow network, <a class="indexterm" href="HA.html#id2642692">Hardware Problems</a></dt><dt>slurpd, <a class="indexterm" href="2000users.html#id2607228">Implementation</a>, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a></dt><dt>smart printing, <a class="indexterm" href="happy.html#id2593552">Dissection and Discussion</a></dt><dt>SMB, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a></dt><dt>SMB passwords, <a class="indexterm" href="2000users.html#id2607228">Implementation</a></dt><dt>SMB/CIFS, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt><dt>smbclient, <a class="indexterm" href="simple.html#validate1">Validation</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a>, <a class="indexterm" href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt><dt>smbd, <a class="indexterm" href="simple.html#validate1">Validation</a>, <a class="indexterm" href="simple.html#id2573211">Implementation</a>, <a class="indexterm" href="small.html#id2579091">Validation</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a>, <a class="indexterm" href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a>, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a>, <a class="indexterm" href="upgrades.html#sbeug1">Location of config files</a>, <a class="indexterm" href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a>, <a class="indexterm" href="upgrades.html#id2622886">Replacing a Domain Member Server</a>, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a>, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a>, <a class="indexterm" href="appendix.html#id2644469">Starting Samba</a></dt><dd><dl><dt>location of files, <a class="indexterm" href="appendix.html#id2644049">Samba System File Location</a></dt></dl></dd><dt>smbfs, <a class="indexterm" href="HA.html#id2641143">Dissection and Discussion</a></dt><dt>smbldap-groupadd, <a class="indexterm" href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>smbldap-groupmod, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>smbldap-passwd, <a class="indexterm" href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a></dt><dt>smbldap-populate, <a class="indexterm" href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a></dt><dt>smbldap-tools, <a class="indexterm" href="ntmigration.html#id2624277">NT4 Migration Using LDAP Backend</a>, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a>, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt><dt>smbldap-tools updating, <a class="indexterm" href="ntmigration.html#id2624277">NT4 Migration Using LDAP Backend</a></dt><dt>smbldap-useradd, <a class="indexterm" href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="2000users.html#id2607228">Implementation</a></dt><dt>smbldap-usermod, <a class="indexterm" href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>smbmnt, <a class="indexterm" href="HA.html#id2641143">Dissection and Discussion</a></dt><dt>smbmount, <a class="indexterm" href="HA.html#id2641143">Dissection and Discussion</a></dt><dt>smbpasswd, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a>, <a class="indexterm" href="small.html#id2577157">Technical Issues</a>, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#id2580725">Technical Issues</a>, <a class="indexterm" href="secure.html#id2582155">Samba Configuration</a>, <a class="indexterm" href="Big500users.html#id2588515">Server Preparation: All Servers</a>, <a class="indexterm" href="Big500users.html#id2589093">Configuration for Server: MASSIVE</a>, <a class="indexterm" href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a>, <a class="indexterm" href="happy.html#id2598983">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="happy.html#sbehap-bldg1">Samba-3 BDC Configuration</a>, <a class="indexterm" href="2000users.html#id2605993">Dissection and Discussion</a>, <a class="indexterm" href="2000users.html#id2607228">Implementation</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="upgrades.html">Updating Samba-3</a>, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a>, <a class="indexterm" href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a>, <a class="indexterm" href="ntmigration.html#id2623787">Technical Issues</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a>, <a class="indexterm" href="DomApps.html">Integrating Additional Services</a></dt><dt>smbumnt, <a class="indexterm" href="HA.html#id2641143">Dissection and Discussion</a></dt><dt>smbumount, <a class="indexterm" href="HA.html#id2641143">Dissection and Discussion</a></dt><dt>SMTP, <a class="indexterm" href="nw4migration.html#id2628462">Technical Issues</a></dt><dt>snap-shot, <a class="indexterm" href="ntmigration.html#id2623601">Dissection and Discussion</a></dt><dt>socket address, <a class="indexterm" href="HA.html#id2642118">Samba Configuration</a></dt><dt>socket options, <a class="indexterm" href="HA.html#id2642118">Samba Configuration</a></dt><dt>software, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>solve, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>source code, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>SPNEGO, <a class="indexterm" href="primer.html#id2649641">Windows 200x/XP Client Interaction with Samba-3</a></dt><dt>SQL, <a class="indexterm" href="2000users.html#id2605993">Dissection and Discussion</a>, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a></dt><dt>Squid, <a class="indexterm" href="DomApps.html#id2638624">Implementation</a>, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a>, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a>, <a class="indexterm" href="DomApps.html#id2640080">Squid Configuration</a></dt><dt>squid, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a>, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a></dt><dt>Squid proxy, <a class="indexterm" href="DomApps.html#id2638451">Technical Issues</a></dt><dt>SRVTOOLS.EXE, <a class="indexterm" href="secure.html#id2581218">Implementation</a>, <a class="indexterm" href="happy.html#id2603048">Configuring Profile Directories</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a></dt><dt>SSL, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt><dt>stand-alone server, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a></dt><dt>starting CUPS, <a class="indexterm" href="simple.html#id2573211">Implementation</a>, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#procstart">Process Startup Configuration</a>, <a class="indexterm" href="Big500users.html#ch5-procstart">Process Startup Configuration</a></dt><dt>starting dhcpd, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#procstart">Process Startup Configuration</a>, <a class="indexterm" href="Big500users.html#ch5-procstart">Process Startup Configuration</a></dt><dt>starting samba, <a class="indexterm" href="simple.html#id2572242">Implementation</a>, <a class="indexterm" href="simple.html#id2573211">Implementation</a>, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a>, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#procstart">Process Startup Configuration</a>, <a class="indexterm" href="Big500users.html#ch5-procstart">Process Startup Configuration</a></dt><dd><dl><dt>nmbd, <a class="indexterm" href="appendix.html#id2644469">Starting Samba</a></dt><dt>smbd, <a class="indexterm" href="appendix.html#id2644469">Starting Samba</a></dt><dt>winbindd, <a class="indexterm" href="appendix.html#id2644469">Starting Samba</a></dt></dl></dd><dt>startingCUPS, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a></dt><dt>startup script, <a class="indexterm" href="appendix.html#id2644469">Starting Samba</a></dt><dt>sticky bit, <a class="indexterm" href="small.html#id2577390">Implementation</a></dt><dt>storage capacity, <a class="indexterm" href="secure.html#id2581012">Hardware Requirements</a></dt><dt>strategic, <a class="indexterm" href="ntmigration.html#id2623787">Technical Issues</a></dt><dt>strategy, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>straw-man, <a class="indexterm" href="kerberos.html">Active Directory, Kerberos, and Security</a></dt><dt>strict sync, <a class="indexterm" href="HA.html#id2642118">Samba Configuration</a></dt><dt>stripped, <a class="indexterm" href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a></dt><dt>strong cryptography, <a class="indexterm" href="kerberos.html#id2635086">Kerberos Exposed</a></dt><dt>subscription, <a class="indexterm" href="ch14.html#id2643123">Free Support</a></dt><dt>SUID, <a class="indexterm" href="simple.html#id2573001">Dissection and Discussion</a>, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a>, <a class="indexterm" href="appendix.html#ch12-SUIDSGID">Effect of Setting File and Directory SUID/SGID Permissions Explained</a></dt><dt>Sun ONE Identity Server, <a class="indexterm" href="happy.html#id2593552">Dissection and Discussion</a></dt><dt>super daemon, <a class="indexterm" href="secure.html#procstart">Process Startup Configuration</a></dt><dt>support, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a>, <a class="indexterm" href="ch14.html">Samba Support</a></dt><dt>survey, <a class="indexterm" href="unixclients.html">Adding Domain Member Servers and Clients</a></dt><dt>SUSE, <a class="indexterm" href="nw4migration.html">Migrating NetWare Server to Samba-3</a></dt><dt>SUSE Enterprise Linux Server, <a class="indexterm" href="simple.html#id2572871">Charity Administration Office</a>, <a class="indexterm" href="secure.html#ch4bsc">Basic System Configuration</a>, <a class="indexterm" href="DomApps.html#id2638624">Implementation</a></dt><dt>SUSE Linux, <a class="indexterm" href="simple.html#id2573001">Dissection and Discussion</a>, <a class="indexterm" href="happy.html#id2596084">Samba Server Implementation</a>, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a>, <a class="indexterm" href="2000users.html#id2607228">Implementation</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="DomApps.html#id2638624">Implementation</a>, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></dt><dt>SWAT, <a class="indexterm" href="appendix.html#id2644049">Samba System File Location</a></dt><dt>sync always, <a class="indexterm" href="HA.html#id2642118">Samba Configuration</a></dt><dt>synchronization, <a class="indexterm" href="DomApps.html#id2638873">Kerberos Configuration</a>, <a class="indexterm" href="HA.html#id2642542">For Scalability, Use SAN-Based Storage on Samba Servers</a></dt><dt>synchronize, <a class="indexterm" href="2000users.html#id2606306">User Needs</a>, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>synchronized, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>syslog, <a class="indexterm" href="happy.html#ldapsetup">OpenLDAP Server Configuration</a></dt><dt>system level logins, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>system security, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt></dl></div><div class="indexdiv"><h3>T</h3><dl><dt>tattooing, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>TCP/IP, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>tdbdump, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="ntmigration.html#id2624277">NT4 Migration Using LDAP Backend</a></dt><dt>tdbsam, <a class="indexterm" href="secure.html#id2580725">Technical Issues</a>, <a class="indexterm" href="secure.html#id2581218">Implementation</a>, <a class="indexterm" href="Big500users.html">The 500-User Office</a>, <a class="indexterm" href="happy.html#id2593415">Assignment Tasks</a>, <a class="indexterm" href="2000users.html#id2605993">Dissection and Discussion</a>, <a class="indexterm" href="2000users.html#id2607228">Implementation</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a>, <a class="indexterm" href="upgrades.html#id2622705">Updating from Samba Versions between 3.0.6 and 3.0.10</a>, <a class="indexterm" href="ntmigration.html#id2623787">Technical Issues</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>testparm, <a class="indexterm" href="small.html#id2579091">Validation</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a>, <a class="indexterm" href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a>, <a class="indexterm" href="HA.html#id2642118">Samba Configuration</a></dt><dt>ticket, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a></dt><dt>time server, <a class="indexterm" href="secure.html#id2581218">Implementation</a></dt><dt>Tivoli Directory Server, <a class="indexterm" href="happy.html#id2593552">Dissection and Discussion</a></dt><dt>TLS, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>token, <a class="indexterm" href="DomApps.html#id2638451">Technical Issues</a></dt><dt>tool, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>TOSHARG2, <a class="indexterm" href="simple.html#id2573211">Implementation</a></dt><dt>track record, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>traffic collisions, <a class="indexterm" href="happy.html">Making Happy Users</a></dt><dt>transaction processing, <a class="indexterm" href="2000users.html#id2605993">Dissection and Discussion</a></dt><dt>transactional, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a></dt><dt>transfer, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>translate, <a class="indexterm" href="kerberos.html#id2636796">Managing Windows 200x ACLs</a></dt><dt>traverse, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a></dt><dt>tree, <a class="indexterm" href="nw4migration.html#id2628385">Dissection and Discussion</a></dt><dt>Tree Connect, <a class="indexterm" href="primer.html#id2649139">Simple Windows Client Connection Characteristics</a></dt><dt>trust account, <a class="indexterm" href="happy.html#id2593176">Regarding LDAP Directories and Windows Computer Accounts</a></dt><dt>trusted computing, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>Trusted Domains, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a></dt><dt>trusted domains, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>trusted third-party, <a class="indexterm" href="kerberos.html#id2635086">Kerberos Exposed</a></dt><dt>trusting, <a class="indexterm" href="kerberos.html#id2635086">Kerberos Exposed</a></dt><dt>turn-around time, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt></dl></div><div class="indexdiv"><h3>U</h3><dl><dt>UDP</dt><dd><dl><dt>broadcast, <a class="indexterm" href="HA.html#id2641845">Routed Networks</a></dt></dl></dd><dt>UID, <a class="indexterm" href="simple.html#id2573001">Dissection and Discussion</a>, <a class="indexterm" href="happy.html#id2593176">Regarding LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="happy.html#id2594009">Technical Issues</a>, <a class="indexterm" href="2000users.html#id2607228">Implementation</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>un-join, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>unauthorized activities, <a class="indexterm" href="kerberos.html#id2635086">Kerberos Exposed</a></dt><dt>UNC name, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a></dt><dt>unencrypted, <a class="indexterm" href="appendix.html#id2645653">The LDAP Account Manager</a></dt><dt>Unicast, <a class="indexterm" href="2000users.html#id2606399">The Nature of Windows Networking Protocols</a></dt><dt>unicode, <a class="indexterm" href="upgrades.html#id2621512">International Language Support</a></dt><dt>Universal Naming Convention (see UNC name)</dt><dt>UNIX, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dd><dl><dt>groups, <a class="indexterm" href="small.html#id2577157">Technical Issues</a>, <a class="indexterm" href="small.html#id2577390">Implementation</a></dt></dl></dd><dt>UNIX accounts, <a class="indexterm" href="happy.html#id2594009">Technical Issues</a></dt><dt>UNIX/Linux server, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>unix2dos, <a class="indexterm" href="secure.html#id2582155">Samba Configuration</a>, <a class="indexterm" href="Big500users.html#id2589093">Configuration for Server: MASSIVE</a></dt><dt>unknown, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>unsupported software, <a class="indexterm" href="ch14.html#id2643342">Commercial Support</a></dt><dt>update, <a class="indexterm" href="upgrades.html#id2620252">Introduction</a>, <a class="indexterm" href="upgrades.html#id2620348">Cautions and Notes</a></dt><dt>updates, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a>, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>updating smbldap-tools, <a class="indexterm" href="ntmigration.html#id2624277">NT4 Migration Using LDAP Backend</a></dt><dt>upgrade, <a class="indexterm" href="upgrades.html#id2620252">Introduction</a>, <a class="indexterm" href="upgrades.html#id2620348">Cautions and Notes</a>, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>uppercase, <a class="indexterm" href="ntmigration.html#id2624136">Implementation</a></dt><dt>user</dt><dd><dl><dt>management, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#id2582155">Samba Configuration</a>, <a class="indexterm" href="Big500users.html#id2589093">Configuration for Server: MASSIVE</a></dt></dl></dd><dt>user account, <a class="indexterm" href="happy.html">Making Happy Users</a>, <a class="indexterm" href="happy.html#ldapsetup">OpenLDAP Server Configuration</a></dt><dt>User and Group Controls, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>user credentials, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a>, <a class="indexterm" href="unixclients.html#id2618464">UNIX/Linux Client Domain Member</a></dt><dt>user errors, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>user groups, <a class="indexterm" href="ch14.html#id2643123">Free Support</a></dt><dt>user identities, <a class="indexterm" href="unixclients.html#id2612258">Implementation</a></dt><dt>user logins, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>user management, <a class="indexterm" href="secure.html#id2581218">Implementation</a></dt><dt>User Manager, <a class="indexterm" href="ntmigration.html#id2624277">NT4 Migration Using LDAP Backend</a></dt><dt>User Mode, <a class="indexterm" href="secure.html#id2581218">Implementation</a>, <a class="indexterm" href="primer.html#id2649139">Simple Windows Client Connection Characteristics</a>, <a class="indexterm" href="primer.html#id2649641">Windows 200x/XP Client Interaction with Samba-3</a></dt><dt>useradd, <a class="indexterm" href="simple.html#id2573211">Implementation</a>, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a>, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#id2582155">Samba Configuration</a>, <a class="indexterm" href="Big500users.html#id2589093">Configuration for Server: MASSIVE</a>, <a class="indexterm" href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a></dt><dt>userdel, <a class="indexterm" href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a></dt><dt>usermod, <a class="indexterm" href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a>, <a class="indexterm" href="ntmigration.html#id2624277">NT4 Migration Using LDAP Backend</a></dt><dt>username, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a></dt><dt>username map, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#id2582155">Samba Configuration</a>, <a class="indexterm" href="Big500users.html#id2588515">Server Preparation: All Servers</a></dt><dt>UTF-8, <a class="indexterm" href="upgrades.html#id2621512">International Language Support</a></dt><dt>utilities, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt></dl></div><div class="indexdiv"><h3>V</h3><dl><dt>valid users, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id2635920">Checkpoint Controls</a>, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a></dt><dt>validate, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id2635920">Checkpoint Controls</a></dt><dt>validated, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>validation, <a class="indexterm" href="simple.html#validate1">Validation</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a>, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt><dt>vampire, <a class="indexterm" href="ntmigration.html#id2627180">Questions and Answers</a></dt><dt>vendor, <a class="indexterm" href="kerberos.html#id2633405">Dissection and Discussion</a></dt><dt>vendors, <a class="indexterm" href="upgrades.html#id2622561">Updating a Samba-3 Installation</a></dt><dt>VFS modules, <a class="indexterm" href="appendix.html#id2644049">Samba System File Location</a></dt><dt>virus, <a class="indexterm" href="secure.html#id2581218">Implementation</a></dt><dt>VPN, <a class="indexterm" href="2000users.html#id2605926">Assignment Tasks</a></dt><dt>vulnerabilities, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt></dl></div><div class="indexdiv"><h3>W</h3><dl><dt>wbinfo, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a></dt><dt>weakness, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a></dt><dt>web</dt><dd><dl><dt>caching, <a class="indexterm" href="DomApps.html#id2638317">Assignment Tasks</a></dt><dt>proxying, <a class="indexterm" href="DomApps.html#id2638317">Assignment Tasks</a></dt></dl></dd><dt>Web</dt><dd><dl><dt>proxy, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt><dd><dl><dt>access, <a class="indexterm" href="DomApps.html#id2640476">Key Points Learned</a></dt></dl></dd></dl></dd><dt>Web browsers, <a class="indexterm" href="DomApps.html#id2640476">Key Points Learned</a></dt><dt>WebClient, <a class="indexterm" href="happy.html">Making Happy Users</a></dt><dt>WHATSNEW.txt, <a class="indexterm" href="upgrades.html#id2622379">Samba-2.x with LDAP Support</a></dt><dt>white-pages, <a class="indexterm" href="nw4migration.html#id2628462">Technical Issues</a>, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>wide-area, <a class="indexterm" href="2000users.html#id2606306">User Needs</a>, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a>, <a class="indexterm" href="2000users.html#id2610386">Key Points Learned</a>, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a></dt><dt>wide-area network, <a class="indexterm" href="HA.html#id2642445">Use and Location of BDCs</a>, <a class="indexterm" href="HA.html#id2642647">Replicate Data to Conserve Peak-Demand Wide-Area Bandwidth</a></dt><dt>winbind, <a class="indexterm" href="2000users.html#id2607228">Implementation</a>, <a class="indexterm" href="unixclients.html#id2611480">Dissection and Discussion</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a>, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a>, <a class="indexterm" href="DomApps.html#id2638451">Technical Issues</a>, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a>, <a class="indexterm" href="DomApps.html#id2639814">NSS Configuration</a></dt><dt>Winbind, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id2633802">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id2637523">Key Points Learned</a></dt><dt>winbind trusted domains only, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>winbind use default domain, <a class="indexterm" href="kerberos.html#id2635920">Checkpoint Controls</a></dt><dt>winbindd, <a class="indexterm" href="small.html#id2579091">Validation</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a>, <a class="indexterm" href="Big500users.html#id2587560">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a>, <a class="indexterm" href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a>, <a class="indexterm" href="upgrades.html#id2622783">Updating from Samba Versions after 3.0.6 to a Current Release</a>, <a class="indexterm" href="upgrades.html#id2622886">Replacing a Domain Member Server</a>, <a class="indexterm" href="DomApps.html#id2639262">Samba Configuration</a>, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a>, <a class="indexterm" href="appendix.html#id2644469">Starting Samba</a></dt><dt>winbindd_cache.tdb, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a></dt><dt>winbindd_idmap.tdb, <a class="indexterm" href="unixclients.html#id2611509">Technical Issues</a></dt><dt>Windows, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dd><dl><dt>client, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a></dt><dt>NT, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a></dt></dl></dd><dt>Windows 2000 ACLs, <a class="indexterm" href="kerberos.html#id2636796">Managing Windows 200x ACLs</a></dt><dt>Windows 2003 Serve, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>Windows 200x ACLs, <a class="indexterm" href="kerberos.html#id2637657">Questions and Answers</a></dt><dt>Windows accounts, <a class="indexterm" href="happy.html#id2594009">Technical Issues</a></dt><dt>Windows ACLs, <a class="indexterm" href="kerberos.html#id2637313">Setting Posix ACLs in UNIX/Linux</a></dt><dt>Windows Address Book, <a class="indexterm" href="nw4migration.html#id2628736">LDAP Server Configuration</a></dt><dt>Windows ADS Domain, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a></dt><dt>Windows clients, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt><dt>Windows Explorer, <a class="indexterm" href="simple.html#validate1">Validation</a></dt><dt>Windows explorer, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt><dt>Windows security identifier (see SID)</dt><dt>Windows Servers, <a class="indexterm" href="kerberos.html#id2632738">Introduction</a></dt><dt>Windows Services for UNIX (see SUS)</dt><dt>Windows XP, <a class="indexterm" href="small.html#id2577042">Assignment Tasks</a></dt><dt>WINS, <a class="indexterm" href="simple.html#id2573211">Implementation</a>, <a class="indexterm" href="small.html#id2577157">Technical Issues</a>, <a class="indexterm" href="small.html#id2577390">Implementation</a>, <a class="indexterm" href="secure.html#ch4wincfg">Windows Client Configuration</a>, <a class="indexterm" href="Big500users.html#id2587560">Technical Issues</a>, <a class="indexterm" href="Big500users.html#ch5wincfg">Windows Client Configuration</a>, <a class="indexterm" href="2000users.html#id2606399">The Nature of Windows Networking Protocols</a>, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a>, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a>, <a class="indexterm" href="primer.html#chap01qa">Questions and Answers</a></dt><dd><dl><dt>lookup, <a class="indexterm" href="unixclients.html#id2619093">Questions and Answers</a></dt><dt>name resolution, <a class="indexterm" href="HA.html#id2641845">Routed Networks</a></dt><dt>server, <a class="indexterm" href="happy.html">Making Happy Users</a>, <a class="indexterm" href="HA.html#id2641845">Routed Networks</a></dt></dl></dd><dt>WINS server, <a class="indexterm" href="Big500users.html">The 500-User Office</a>, <a class="indexterm" href="2000users.html#id2610534">Questions and Answers</a></dt><dt>WINS serving, <a class="indexterm" href="secure.html#id2581218">Implementation</a></dt><dt>wins support, <a class="indexterm" href="secure.html#id2581218">Implementation</a></dt><dt>wins.dat, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a>, <a class="indexterm" href="upgrades.html#id2622886">Replacing a Domain Member Server</a></dt><dt>Wireshark, <a class="indexterm" href="primer.html#id2647528">Requirements and Notes</a></dt><dt>wireshark, <a class="indexterm" href="primer.html#id2647868">Exercises</a></dt><dt>Word, <a class="indexterm" href="kerberos.html#id2636393">Share Point Directory and File Permissions</a></dt><dt>workgroup, <a class="indexterm" href="simple.html#id2572242">Implementation</a>, <a class="indexterm" href="upgrades.html#id2620452">Security Identifiers (SIDs)</a>, <a class="indexterm" href="upgrades.html#id2621245">Change of Workgroup (Domain) Name</a></dt><dt>Workgroup Announcement, <a class="indexterm" href="primer.html#id2648779">Findings</a></dt><dt>workstation, <a class="indexterm" href="unixclients.html#id2612258">Implementation</a></dt><dt>wrapper, <a class="indexterm" href="DomApps.html#id2640537">Questions and Answers</a></dt><dt>write lock, <a class="indexterm" href="appendix.html#id2647362">Opportunistic Locking Controls</a></dt></dl></div><div class="indexdiv"><h3>X</h3><dl><dt>xinetd, <a class="indexterm" href="secure.html#procstart">Process Startup Configuration</a></dt><dt>XML, <a class="indexterm" href="2000users.html#id2605993">Dissection and Discussion</a></dt><dt>xmlsam, <a class="indexterm" href="2000users.html#id2607228">Implementation</a></dt></dl></div><div class="indexdiv"><h3>Y</h3><dl><dt>YaST, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a></dt><dt>Yellow Pages, <a class="indexterm" href="2000users.html#id2606746">Identity Management Needs</a></dt><dt>yellow pages (see NIS)</dt></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="go01.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top">Glossary </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Index</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="index.html" title="Samba-3 by Example"><link rel="prev" href="go01.html" title="Glossary"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Index</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="go01.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> </td></tr></table><hr></div><div class="index"><div class="titlepage"><div><div><h2 class="title"><a name="id412935"></a>Index</h2></div></div></div><div class="index"><div class="indexdiv"><h3>Symbols</h3><dl><dt>%LOGONSERVER%, <a class="indexterm" href="happy.html#redirfold">Configuration of Default Profile with Folder Redirection</a></dt><dt>%USERNAME%, <a class="indexterm" href="happy.html#id360094">Roaming Profile Background</a>, <a class="indexterm" href="happy.html#id360364">Profile Changes</a></dt><dt>%USERPROFILE%, <a class="indexterm" href="happy.html#redirfold">Configuration of Default Profile with Folder Redirection</a></dt><dt>/data/ldap, <a class="indexterm" href="happy.html#ldapsetup">OpenLDAP Server Configuration</a></dt><dt>/etc/cups/mime.convs, <a class="indexterm" href="simple.html#id341634">Implementation</a>, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a></dt><dt>/etc/cups/mime.types, <a class="indexterm" href="simple.html#id341634">Implementation</a>, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a></dt><dt>/etc/dhcpd.conf, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="small.html#id346626">Validation</a>, <a class="indexterm" href="secure.html#ch4dhcpdns">Configuration of DHCP and DNS Servers</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a></dt><dt>/etc/exports, <a class="indexterm" href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a></dt><dt>/etc/group, <a class="indexterm" href="happy.html#id359614">Technical Issues</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="upgrades.html#id386001">Replacing a Domain Member Server</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a>, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></dt><dt>/etc/hosts, <a class="indexterm" href="simple.html#id340832">Implementation</a>, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#ch4bsc">Basic System Configuration</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a>, <a class="indexterm" href="Big500users.html#id354601">Server Preparation: All Servers</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="DomApps.html#id400370">Kerberos Configuration</a>, <a class="indexterm" href="HA.html#id402984">Bad Hostnames</a></dt><dt>/etc/krb5.conf, <a class="indexterm" href="unixclients.html#id381158">IDMAP Storage in LDAP using Winbind</a>, <a class="indexterm" href="DomApps.html#id400370">Kerberos Configuration</a></dt><dt>/etc/ldap.conf, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a>, <a class="indexterm" href="unixclients.html#id381158">IDMAP Storage in LDAP using Winbind</a>, <a class="indexterm" href="unixclients.html#id381708">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a>, <a class="indexterm" href="ntmigration.html#id387250">NT4 Migration Using LDAP Backend</a>, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>/etc/mime.convs, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#ch4ptrcfg">Printer Configuration</a>, <a class="indexterm" href="Big500users.html#id354601">Server Preparation: All Servers</a>, <a class="indexterm" href="happy.html#sbehap-ptrcfg">Printer Configuration</a></dt><dt>/etc/mime.types, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#ch4ptrcfg">Printer Configuration</a>, <a class="indexterm" href="Big500users.html#id354601">Server Preparation: All Servers</a>, <a class="indexterm" href="happy.html#sbehap-ptrcfg">Printer Configuration</a></dt><dt>/etc/named.conf, <a class="indexterm" href="secure.html#ch4dhcpdns">Configuration of DHCP and DNS Servers</a></dt><dt>/etc/nsswitch.conf, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#ch4dhcpdns">Configuration of DHCP and DNS Servers</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a>, <a class="indexterm" href="Big500users.html#id355127">Configuration for Server: MASSIVE</a>, <a class="indexterm" href="Big500users.html#ch5-domsvrspec">Configuration Specific to Domain Member Servers: BLDG1, BLDG2</a>, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="unixclients.html#id380589">IDMAP_RID with Winbind</a>, <a class="indexterm" href="unixclients.html#id381708">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="ntmigration.html#id387250">NT4 Migration Using LDAP Backend</a></dt><dt>/etc/openldap/slapd.conf, <a class="indexterm" href="happy.html#id360837">Debugging LDAP</a>, <a class="indexterm" href="happy.html#ldapsetup">OpenLDAP Server Configuration</a>, <a class="indexterm" href="2000users.html#id371556">Implementation</a></dt><dt>/etc/passwd, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#id349099">Samba Configuration</a>, <a class="indexterm" href="Big500users.html#id355127">Configuration for Server: MASSIVE</a>, <a class="indexterm" href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="upgrades.html#id386001">Replacing a Domain Member Server</a>, <a class="indexterm" href="ntmigration.html#id386802">Technical Issues</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a>, <a class="indexterm" href="nw4migration.html#id390984">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id398076">Share Point Directory and File Permissions</a>, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a>, <a class="indexterm" href="primer.html#id409948">Findings and Comments</a></dt><dt>/etc/rc.d/boot.local, <a class="indexterm" href="secure.html#ch4bsc">Basic System Configuration</a>, <a class="indexterm" href="Big500users.html#id355127">Configuration for Server: MASSIVE</a></dt><dt>/etc/rc.d/rc.local, <a class="indexterm" href="small.html#id345178">Implementation</a></dt><dt>/etc/resolv.conf, <a class="indexterm" href="secure.html#ch4dhcpdns">Configuration of DHCP and DNS Servers</a>, <a class="indexterm" href="Big500users.html#id354601">Server Preparation: All Servers</a></dt><dt>/etc/samba, <a class="indexterm" href="appendix.html#id405157">Samba System File Location</a></dt><dt>/etc/samba/secrets.tdb, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></dt><dt>/etc/samba/smbusers, <a class="indexterm" href="Big500users.html#id354601">Server Preparation: All Servers</a></dt><dt>/etc/shadow, <a class="indexterm" href="upgrades.html#id386001">Replacing a Domain Member Server</a>, <a class="indexterm" href="nw4migration.html#id390984">Technical Issues</a></dt><dt>/etc/squid/squid.conf, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></dt><dt>/etc/syslog.conf, <a class="indexterm" href="happy.html#id360837">Debugging LDAP</a></dt><dt>/etc/xinetd.d, <a class="indexterm" href="secure.html#procstart">Process Startup Configuration</a>, <a class="indexterm" href="Big500users.html#ch5-procstart">Process Startup Configuration</a></dt><dt>/lib/libnss_ldap.so.2, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a></dt><dt>/opt/IDEALX/sbin, <a class="indexterm" href="ntmigration.html#id387250">NT4 Migration Using LDAP Backend</a></dt><dt>/proc/sys/net/ipv4/ip_forward, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#ch4bsc">Basic System Configuration</a></dt><dt>/usr/bin, <a class="indexterm" href="appendix.html#id405157">Samba System File Location</a></dt><dt>/usr/lib/samba, <a class="indexterm" href="appendix.html#id405157">Samba System File Location</a></dt><dt>/usr/local, <a class="indexterm" href="appendix.html#id405157">Samba System File Location</a></dt><dt>/usr/local/samba, <a class="indexterm" href="appendix.html#id405157">Samba System File Location</a></dt><dt>/usr/local/samba/var/locks, <a class="indexterm" href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a></dt><dt>/usr/sbin, <a class="indexterm" href="appendix.html#id405157">Samba System File Location</a></dt><dt>/usr/share, <a class="indexterm" href="appendix.html#id405157">Samba System File Location</a></dt><dt>/usr/share/samba/swat, <a class="indexterm" href="appendix.html#id405157">Samba System File Location</a></dt><dt>/usr/share/swat, <a class="indexterm" href="appendix.html#id405157">Samba System File Location</a></dt><dt>/var/cache/samba, <a class="indexterm" href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a></dt><dt>/var/lib/samba, <a class="indexterm" href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a>, <a class="indexterm" href="appendix.html#id405157">Samba System File Location</a></dt><dt>/var/log/ldaplogs, <a class="indexterm" href="happy.html#id360837">Debugging LDAP</a></dt><dt>/var/log/samba, <a class="indexterm" href="appendix.html#id405157">Samba System File Location</a></dt><dt>8-bit, <a class="indexterm" href="upgrades.html#id384787">International Language Support</a></dt></dl></div><div class="indexdiv"><h3></h3><dl><dt>, <a class="indexterm" href="simple.html#id340832">Implementation</a>, <a class="indexterm" href="simple.html#id341634">Implementation</a>, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a>, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#id349099">Samba Configuration</a>, <a class="indexterm" href="secure.html#ch4appscfg">Application Share Configuration</a>, <a class="indexterm" href="Big500users.html#id353886">Implementation</a>, <a class="indexterm" href="happy.html#sbehap-ppc">Addition of Machines to the Domain</a>, <a class="indexterm" href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a>, <a class="indexterm" href="happy.html#sbehap-bldg1">Samba-3 BDC Configuration</a>, <a class="indexterm" href="2000users.html#id371556">Implementation</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="unixclients.html#dcwonss">NT4/Samba Domain with Samba Domain Member Server without NSS Support</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="unixclients.html#id380589">IDMAP_RID with Winbind</a>, <a class="indexterm" href="unixclients.html#id381158">IDMAP Storage in LDAP using Winbind</a>, <a class="indexterm" href="unixclients.html#id381708">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a>, <a class="indexterm" href="upgrades.html#sbeug1">Location of config files</a>, <a class="indexterm" href="ntmigration.html#id387250">NT4 Migration Using LDAP Backend</a>, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a>, <a class="indexterm" href="DomApps.html#id401255">NSS Configuration</a></dt><dd><dl><dt>Domain account, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>liability, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>logon, <a class="indexterm" href="simple.html#id341634">Implementation</a></dt><dt>problem, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>transparent inter-operability, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt></dl></dd></dl></div><div class="indexdiv"><h3>A</h3><dl><dt>abmas-netfw.sh, <a class="indexterm" href="secure.html#ch4bsc">Basic System Configuration</a></dt><dt>accept, <a class="indexterm" href="secure.html#ch4ptrcfg">Printer Configuration</a></dt><dt>accepts liability, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>access, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id397648">Checkpoint Controls</a></dt><dt>access control, <a class="indexterm" href="kerberos.html#id396888">Kerberos Exposed</a>, <a class="indexterm" href="kerberos.html#id398494">Using the MMC Computer Management Interface</a></dt><dt>Access Control Lists (see ACLs)</dt><dt>access control settings, <a class="indexterm" href="kerberos.html#id397184">Share Access Controls</a></dt><dt>access controls, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id397519">Share Definition Controls</a></dt><dt>accessible, <a class="indexterm" href="kerberos.html#id398076">Share Point Directory and File Permissions</a></dt><dt>account, <a class="indexterm" href="happy.html#id358884">Regarding LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="kerberos.html#id397184">Share Access Controls</a></dt><dd><dl><dt>ADS Domain, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt></dl></dd><dt>account credentials, <a class="indexterm" href="primer.html#id409948">Findings and Comments</a></dt><dt>account information, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>account names, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>account policies, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt><dt>accountable, <a class="indexterm" href="kerberos.html#id394729">Introduction</a>, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>accounts</dt><dd><dl><dt>authoritative, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a></dt><dt>Domain, <a class="indexterm" href="ntmigration.html#id386514">Introduction</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>group, <a class="indexterm" href="ntmigration.html#id386514">Introduction</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>machine, <a class="indexterm" href="ntmigration.html#id386514">Introduction</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>manage, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt><dt>user, <a class="indexterm" href="ntmigration.html#id386514">Introduction</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt></dl></dd><dt>ACL, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a>, <a class="indexterm" href="kerberos.html#id397648">Checkpoint Controls</a></dt><dt>ACLs, <a class="indexterm" href="happy.html#id369964">Key Points Learned</a>, <a class="indexterm" href="kerberos.html#id397184">Share Access Controls</a>, <a class="indexterm" href="kerberos.html#id397519">Share Definition Controls</a></dt><dt>acquisitions, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>Act!, <a class="indexterm" href="appendix.html#ch12dblck">Shared Data Integrity</a></dt><dt>ACT! database, <a class="indexterm" href="appendix.html#id408011">Act! Database Sharing</a></dt><dt>Act!Diag, <a class="indexterm" href="appendix.html#id408011">Act! Database Sharing</a></dt><dt>Active Directory, <a class="indexterm" href="happy.html#id359212">Dissection and Discussion</a>, <a class="indexterm" href="happy.html#sbehap-locgrppol">The Local Group Policy</a>, <a class="indexterm" href="2000users.html#id370476">Dissection and Discussion</a>, <a class="indexterm" href="unixclients.html#id375537">Assignment Tasks</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="unixclients.html#id380589">IDMAP_RID with Winbind</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id394729">Introduction</a>, <a class="indexterm" href="kerberos.html#id399129">Key Points Learned</a>, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a>, <a class="indexterm" href="DomApps.html">Integrating Additional Services</a>, <a class="indexterm" href="DomApps.html#id399862">Assignment Tasks</a>, <a class="indexterm" href="DomApps.html#id399977">Technical Issues</a>, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a>, <a class="indexterm" href="appendix.html#domjoin">Joining a Domain: Windows 200x/XP Professional</a></dt><dd><dl><dt>authentication, <a class="indexterm" href="DomApps.html#id401512">Squid Configuration</a></dt><dt>domain, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a></dt><dt>join, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></dt><dt>management tools, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>realm, <a class="indexterm" href="HA.html#id402984">Bad Hostnames</a></dt><dt>Replacement, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>server, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="DomApps.html#id400370">Kerberos Configuration</a></dt><dt>Server, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>tree, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a></dt></dl></dd><dt>active directory, <a class="indexterm" href="ntmigration.html#id386802">Technical Issues</a></dt><dt>AD printer publishing, <a class="indexterm" href="happy.html#id369439">Uploading Printer Drivers to Samba Servers</a></dt><dt>ADAM, <a class="indexterm" href="happy.html#id359212">Dissection and Discussion</a>, <a class="indexterm" href="unixclients.html#id381158">IDMAP Storage in LDAP using Winbind</a></dt><dt>add group script, <a class="indexterm" href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a></dt><dt>add machine script, <a class="indexterm" href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a></dt><dt>Add Printer Wizard</dt><dd><dl><dt>APW, <a class="indexterm" href="happy.html#id369439">Uploading Printer Drivers to Samba Servers</a></dt></dl></dd><dt>add user script, <a class="indexterm" href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a></dt><dt>add user to group script, <a class="indexterm" href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a></dt><dt>adduser, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#id349099">Samba Configuration</a>, <a class="indexterm" href="Big500users.html#id355127">Configuration for Server: MASSIVE</a></dt><dt>adequate precautions, <a class="indexterm" href="upgrades.html#id383639">Introduction</a></dt><dt>administrative installation, <a class="indexterm" href="secure.html#ch4appscfg">Application Share Configuration</a></dt><dt>administrative rights, <a class="indexterm" href="kerberos.html#id397648">Checkpoint Controls</a></dt><dt>administrator, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#id349099">Samba Configuration</a>, <a class="indexterm" href="Big500users.html#id354601">Server Preparation: All Servers</a></dt><dt>ADMT, <a class="indexterm" href="upgrades.html#id386368">Migration of Samba Accounts to Active Directory</a></dt><dt>ADS, <a class="indexterm" href="unixclients.html#id381158">IDMAP Storage in LDAP using Winbind</a>, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a>, <a class="indexterm" href="DomApps.html#id400370">Kerberos Configuration</a>, <a class="indexterm" href="HA.html#id402984">Bad Hostnames</a></dt><dd><dl><dt>server, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt></dl></dd><dt>ADS Domain, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>affordability, <a class="indexterm" href="2000users.html#id370835">The Nature of Windows Networking Protocols</a></dt><dt>alarm, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>algorithm, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>allow trusted domains, <a class="indexterm" href="unixclients.html#id380589">IDMAP_RID with Winbind</a></dt><dt>alternative, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>analysis, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>anonymous connection, <a class="indexterm" href="small.html#id346626">Validation</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a></dt><dt>Apache Web server, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt><dt>appliance mode, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a></dt><dt>application server, <a class="indexterm" href="secure.html#id347966">Technical Issues</a>, <a class="indexterm" href="secure.html#ch4appscfg">Application Share Configuration</a></dt><dt>application servers, <a class="indexterm" href="2000users.html#id370835">The Nature of Windows Networking Protocols</a></dt><dt>application/octet-stream, <a class="indexterm" href="simple.html#id341634">Implementation</a>, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a>, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#ch4ptrcfg">Printer Configuration</a>, <a class="indexterm" href="Big500users.html#id354601">Server Preparation: All Servers</a>, <a class="indexterm" href="happy.html#sbehap-ptrcfg">Printer Configuration</a></dt><dt>APW, <a class="indexterm" href="happy.html#id369439">Uploading Printer Drivers to Samba Servers</a></dt><dt>arp, <a class="indexterm" href="secure.html#ch4valid">Validation</a></dt><dt>assessment, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>assistance, <a class="indexterm" href="ch14.html#id404300">Free Support</a></dt><dt>assumptions, <a class="indexterm" href="HA.html#id404151">Key Points Learned</a></dt><dt>authconfig, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a></dt><dt>authenticate, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a>, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a></dt><dt>authenticated, <a class="indexterm" href="DomApps.html#id399862">Assignment Tasks</a></dt><dt>authenticated connection, <a class="indexterm" href="small.html#id346626">Validation</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a></dt><dt>authentication, <a class="indexterm" href="2000users.html#id370835">The Nature of Windows Networking Protocols</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="nw4migration.html#id390913">Dissection and Discussion</a>, <a class="indexterm" href="DomApps.html">Integrating Additional Services</a>, <a class="indexterm" href="DomApps.html#id399977">Technical Issues</a>, <a class="indexterm" href="DomApps.html#id401255">NSS Configuration</a>, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt><dd><dl><dt>plain-text, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt></dl></dd><dt>authentication process, <a class="indexterm" href="unixclients.html#id376274">Implementation</a></dt><dt>authentication protocols, <a class="indexterm" href="DomApps.html#id401888">Key Points Learned</a></dt><dt>authoritative, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a></dt><dt>authorized location, <a class="indexterm" href="kerberos.html#id396888">Kerberos Exposed</a></dt><dt>auto-generated SID, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>automatically allocate, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a></dt><dt>availability, <a class="indexterm" href="HA.html">Performance, Reliability, and Availability</a></dt></dl></div><div class="indexdiv"><h3>B</h3><dl><dt>backends, <a class="indexterm" href="DomApps.html">Integrating Additional Services</a></dt><dt>background communication, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a></dt><dt>Backup, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>Backup Domain Controller (see BDC)</dt><dt>bandwidth, <a class="indexterm" href="DomApps.html#id399862">Assignment Tasks</a></dt><dd><dl><dt>requirements, <a class="indexterm" href="2000users.html#id370759">User Needs</a></dt></dl></dd><dt>bandwidth calculations, <a class="indexterm" href="secure.html#id348190">Hardware Requirements</a></dt><dt>BDC, <a class="indexterm" href="Big500users.html#id353690">Technical Issues</a>, <a class="indexterm" href="happy.html">Making Happy Users</a>, <a class="indexterm" href="happy.html#id359084">Assignment Tasks</a>, <a class="indexterm" href="happy.html#id359212">Dissection and Discussion</a>, <a class="indexterm" href="happy.html#id361454">Samba Server Implementation</a>, <a class="indexterm" href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a>, <a class="indexterm" href="2000users.html#id370835">The Nature of Windows Networking Protocols</a>, <a class="indexterm" href="2000users.html#id374570">Key Points Learned</a>, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a>, <a class="indexterm" href="ntmigration.html#id389442">NT4 Migration Using tdbsam Backend</a>, <a class="indexterm" href="HA.html#id403710">Use and Location of BDCs</a></dt><dt>benefit, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>best practices, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>bias, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a></dt><dt>binary database, <a class="indexterm" href="secure.html#id348344">Implementation</a></dt><dt>binary files, <a class="indexterm" href="upgrades.html#id385712">Updating a Samba-3 Installation</a></dt><dt>binary package, <a class="indexterm" href="upgrades.html#id385712">Updating a Samba-3 Installation</a></dt><dt>bind interfaces only, <a class="indexterm" href="secure.html#id348344">Implementation</a></dt><dt>broadcast, <a class="indexterm" href="HA.html#id403161">Routed Networks</a>, <a class="indexterm" href="primer.html#chap01qa">Questions and Answers</a></dt><dd><dl><dt>directed, <a class="indexterm" href="2000users.html#id370835">The Nature of Windows Networking Protocols</a></dt><dt>mailslot, <a class="indexterm" href="2000users.html#id370835">The Nature of Windows Networking Protocols</a></dt></dl></dd><dt>broadcast messages, <a class="indexterm" href="secure.html#id348344">Implementation</a></dt><dt>broadcast storms, <a class="indexterm" href="HA.html#id403325">Network Collisions</a></dt><dt>broken, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>broken behavior, <a class="indexterm" href="HA.html#id402498">Dissection and Discussion</a></dt><dt>browse, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>browse master, <a class="indexterm" href="primer.html#id408760">Findings</a></dt><dt>Browse Master, <a class="indexterm" href="primer.html#chap01qa">Questions and Answers</a></dt><dt>browse.dat, <a class="indexterm" href="upgrades.html#id386001">Replacing a Domain Member Server</a></dt><dt>Browser Election Service, <a class="indexterm" href="primer.html#chap01qa">Questions and Answers</a></dt><dt>browsing, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a>, <a class="indexterm" href="DomApps.html#id399977">Technical Issues</a>, <a class="indexterm" href="primer.html#id408414">Assignment Tasks</a></dt><dt>budgetted, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>bug fixes, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>bug report, <a class="indexterm" href="ch14.html#id404300">Free Support</a></dt></dl></div><div class="indexdiv"><h3>C</h3><dl><dt>cache, <a class="indexterm" href="appendix.html#id408086">Opportunistic Locking Controls</a></dt><dt>cache directories, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></dt><dt>caching, <a class="indexterm" href="HA.html#id403415">Samba Configuration</a></dt><dt>case-sensitive, <a class="indexterm" href="DomApps.html#id400370">Kerberos Configuration</a></dt><dt>centralized storage, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>character set, <a class="indexterm" href="upgrades.html#id384787">International Language Support</a></dt><dt>check samba daemons, <a class="indexterm" href="small.html#id346626">Validation</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a></dt><dt>check-point, <a class="indexterm" href="kerberos.html#id397519">Share Definition Controls</a></dt><dt>check-point controls, <a class="indexterm" href="kerberos.html#id397648">Checkpoint Controls</a></dt><dt>Checkpoint Controls, <a class="indexterm" href="kerberos.html#id397648">Checkpoint Controls</a></dt><dt>chgrp, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a></dt><dt>chkconfig, <a class="indexterm" href="simple.html#id340832">Implementation</a>, <a class="indexterm" href="simple.html#id341634">Implementation</a>, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a>, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#procstart">Process Startup Configuration</a>, <a class="indexterm" href="Big500users.html#ch5-procstart">Process Startup Configuration</a>, <a class="indexterm" href="2000users.html#id371556">Implementation</a></dt><dt>chmod, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a></dt><dt>choice, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a>, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>chown, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></dt><dt>CIFS, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a>, <a class="indexterm" href="primer.html#id408760">Findings</a></dt><dt>cifsfs, <a class="indexterm" href="HA.html#id402498">Dissection and Discussion</a></dt><dt>clean database, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>clients per DC, <a class="indexterm" href="happy.html">Making Happy Users</a></dt><dt>Clock skew, <a class="indexterm" href="DomApps.html#id400370">Kerberos Configuration</a></dt><dt>cluster, <a class="indexterm" href="HA.html#id402421">Introduction</a></dt><dt>clustering, <a class="indexterm" href="HA.html#id402421">Introduction</a>, <a class="indexterm" href="HA.html#id403795">For Scalability, Use SAN-Based Storage on Samba Servers</a></dt><dt>code maintainer, <a class="indexterm" href="ch14.html#id404300">Free Support</a></dt><dt>codepage, <a class="indexterm" href="upgrades.html#id384787">International Language Support</a></dt><dt>collision rates, <a class="indexterm" href="HA.html#id403325">Network Collisions</a></dt><dt>commercial, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>commercial software, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>commercial support, <a class="indexterm" href="ch14.html">Samba Support</a>, <a class="indexterm" href="ch14.html#id404499">Commercial Support</a></dt><dt>Common Internet File System (see CIFS)</dt><dt>comparison</dt><dd><dl><dt>Active Directory &amp; OpenLDAP, <a class="indexterm" href="happy.html#id359212">Dissection and Discussion</a></dt></dl></dd><dt>compat, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>compatible, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>compile-time, <a class="indexterm" href="upgrades.html#sbeug1">Location of config files</a></dt><dt>complexities, <a class="indexterm" href="HA.html#id402498">Dissection and Discussion</a></dt><dt>compromise, <a class="indexterm" href="happy.html#id359008">Introduction</a>, <a class="indexterm" href="kerberos.html#id394729">Introduction</a>, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>computer account, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a></dt><dt>Computer Management, <a class="indexterm" href="kerberos.html#id397184">Share Access Controls</a>, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a></dt><dt>computer name, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a></dt><dt>condemns, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>conferences, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>configuration files, <a class="indexterm" href="upgrades.html#id383639">Introduction</a></dt><dt>configure.pl, <a class="indexterm" href="ntmigration.html#id387250">NT4 Migration Using LDAP Backend</a></dt><dt>connection, <a class="indexterm" href="kerberos.html#id397184">Share Access Controls</a></dt><dt>connectivity, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>consequential risk, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>consultant, <a class="indexterm" href="simple.html#id340728">Drafting Office</a>, <a class="indexterm" href="kerberos.html#id394729">Introduction</a>, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>consumer, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a>, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>consumer expects, <a class="indexterm" href="ch14.html">Samba Support</a></dt><dt>contiguous directory, <a class="indexterm" href="2000users.html#id371556">Implementation</a></dt><dt>contributions, <a class="indexterm" href="upgrades.html">Updating Samba-3</a></dt><dt>control files, <a class="indexterm" href="upgrades.html#id385712">Updating a Samba-3 Installation</a></dt><dt>convmv, <a class="indexterm" href="upgrades.html#id384787">International Language Support</a></dt><dt>copy, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>corrective action, <a class="indexterm" href="HA.html#id403932">Hardware Problems</a></dt><dt>cost, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>cost-benefit, <a class="indexterm" href="nw4migration.html#id390814">Assignment Tasks</a></dt><dt>country of origin, <a class="indexterm" href="ch14.html#id404499">Commercial Support</a></dt><dt>Courier-IMAP, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>credential, <a class="indexterm" href="kerberos.html#id397519">Share Definition Controls</a></dt><dt>credentials, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>crippled, <a class="indexterm" href="ntmigration.html#id386640">Dissection and Discussion</a></dt><dt>criticism, <a class="indexterm" href="kerberos.html">Active Directory, Kerberos, and Security</a>, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>Critics, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>Cryptographic, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>CUPS, <a class="indexterm" href="simple.html#id341464">Dissection and Discussion</a>, <a class="indexterm" href="small.html#id344988">Technical Issues</a>, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="small.html#id347221">Key Points Learned</a>, <a class="indexterm" href="secure.html#id348344">Implementation</a>, <a class="indexterm" href="secure.html#ch4ptrcfg">Printer Configuration</a>, <a class="indexterm" href="Big500users.html#id354601">Server Preparation: All Servers</a>, <a class="indexterm" href="happy.html#id359084">Assignment Tasks</a>, <a class="indexterm" href="happy.html#id360506">Installation of Printer Driver Auto-Download</a>, <a class="indexterm" href="happy.html#sbehap-ptrcfg">Printer Configuration</a></dt><dd><dl><dt>queue, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#ch4ptrcfg">Printer Configuration</a>, <a class="indexterm" href="Big500users.html#id354601">Server Preparation: All Servers</a>, <a class="indexterm" href="happy.html#sbehap-ptrcfg">Printer Configuration</a></dt></dl></dd><dt>cupsd, <a class="indexterm" href="secure.html#ch4bsc">Basic System Configuration</a></dt><dt>customer expected, <a class="indexterm" href="ch14.html">Samba Support</a></dt><dt>customers, <a class="indexterm" href="ch14.html">Samba Support</a></dt></dl></div><div class="indexdiv"><h3>D</h3><dl><dt>daemon, <a class="indexterm" href="simple.html#validate1">Validation</a>, <a class="indexterm" href="secure.html#ch4bsc">Basic System Configuration</a>, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a>, <a class="indexterm" href="DomApps.html#id399977">Technical Issues</a>, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a>, <a class="indexterm" href="appendix.html#id405549">Starting Samba</a></dt><dt>daemon control, <a class="indexterm" href="Big500users.html#ch5-procstart">Process Startup Configuration</a></dt><dt>data</dt><dd><dl><dt>corruption, <a class="indexterm" href="happy.html">Making Happy Users</a></dt><dt>integrity, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt></dl></dd><dt>data corruption, <a class="indexterm" href="HA.html#id403932">Hardware Problems</a>, <a class="indexterm" href="appendix.html#id408011">Act! Database Sharing</a></dt><dt>data integrity, <a class="indexterm" href="HA.html#id403932">Hardware Problems</a>, <a class="indexterm" href="appendix.html#ch12dblck">Shared Data Integrity</a></dt><dt>data storage, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a></dt><dt>database, <a class="indexterm" href="2000users.html#id370476">Dissection and Discussion</a>, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a>, <a class="indexterm" href="nw4migration.html#id390913">Dissection and Discussion</a></dt><dt>database applications, <a class="indexterm" href="appendix.html#ch12dblck">Shared Data Integrity</a></dt><dt>DB_CONFIG, <a class="indexterm" href="happy.html#ldapsetup">OpenLDAP Server Configuration</a></dt><dt>DCE, <a class="indexterm" href="kerberos.html#id396888">Kerberos Exposed</a></dt><dt>DDNS (see dynamic DNS)</dt><dt>Debian, <a class="indexterm" href="nw4migration.html">Migrating NetWare Server to Samba-3</a></dt><dt>default installation, <a class="indexterm" href="appendix.html#id405157">Samba System File Location</a></dt><dt>default password, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt><dt>default profile, <a class="indexterm" href="happy.html#id359084">Assignment Tasks</a>, <a class="indexterm" href="happy.html#id359614">Technical Issues</a></dt><dt>Default User, <a class="indexterm" href="happy.html#id360364">Profile Changes</a>, <a class="indexterm" href="happy.html#redirfold">Configuration of Default Profile with Folder Redirection</a></dt><dt>defective</dt><dd><dl><dt>cables, <a class="indexterm" href="HA.html#id403932">Hardware Problems</a></dt><dt>HUBs, <a class="indexterm" href="HA.html#id403932">Hardware Problems</a></dt><dt>switches, <a class="indexterm" href="HA.html#id403932">Hardware Problems</a></dt></dl></dd><dt>defects, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>defensible standards, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>defragmentation, <a class="indexterm" href="secure.html#ch4wincfg">Windows Client Configuration</a></dt><dt>delete group script, <a class="indexterm" href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a></dt><dt>delete user from group script, <a class="indexterm" href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a></dt><dt>delimiter, <a class="indexterm" href="kerberos.html#id397648">Checkpoint Controls</a></dt><dt>dependability, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>deployment, <a class="indexterm" href="ch14.html#id404300">Free Support</a></dt><dt>desired security setting, <a class="indexterm" href="kerberos.html#id398933">Setting Posix ACLs in UNIX/Linux</a></dt><dt>development, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>DHCP, <a class="indexterm" href="small.html#id344988">Technical Issues</a>, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="small.html#id347221">Key Points Learned</a>, <a class="indexterm" href="secure.html#ch4wincfg">Windows Client Configuration</a>, <a class="indexterm" href="Big500users.html#ch5wincfg">Windows Client Configuration</a>, <a class="indexterm" href="2000users.html#id370835">The Nature of Windows Networking Protocols</a>, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a></dt><dd><dl><dt>client, <a class="indexterm" href="HA.html#id402984">Bad Hostnames</a></dt><dt>relay, <a class="indexterm" href="Big500users.html#id353690">Technical Issues</a></dt><dt>Relay Agent, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a></dt><dt>request, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a></dt><dt>requests, <a class="indexterm" href="Big500users.html#id353690">Technical Issues</a></dt><dt>servers, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a></dt><dt>traffic, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a></dt></dl></dd><dt>dhcp client validation, <a class="indexterm" href="small.html#id346626">Validation</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a></dt><dt>DHCP Server, <a class="indexterm" href="small.html#id345178">Implementation</a></dt><dt>DHCP server, <a class="indexterm" href="secure.html#id347966">Technical Issues</a></dt><dt>diagnostic, <a class="indexterm" href="unixclients.html#id381158">IDMAP Storage in LDAP using Winbind</a></dt><dt>diffusion, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>digital rights, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>digital sign'n'seal, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>digits, <a class="indexterm" href="HA.html#id402984">Bad Hostnames</a></dt><dt>diligence, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>directory, <a class="indexterm" href="2000users.html#id370476">Dissection and Discussion</a>, <a class="indexterm" href="unixclients.html#id376189">Political Issues</a>, <a class="indexterm" href="upgrades.html#sbeug1">Location of config files</a></dt><dd><dl><dt>Computers container, <a class="indexterm" href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a></dt><dt>management, <a class="indexterm" href="happy.html#id359212">Dissection and Discussion</a></dt><dt>People container, <a class="indexterm" href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a></dt><dt>replication, <a class="indexterm" href="happy.html#id359212">Dissection and Discussion</a></dt><dt>schema, <a class="indexterm" href="happy.html#id359212">Dissection and Discussion</a></dt><dt>server, <a class="indexterm" href="happy.html#id359614">Technical Issues</a></dt><dt>synchronization, <a class="indexterm" href="happy.html#id359212">Dissection and Discussion</a></dt></dl></dd><dt>directory tree, <a class="indexterm" href="kerberos.html#id398933">Setting Posix ACLs in UNIX/Linux</a></dt><dt>disable, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>disaster recovery, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>disk image, <a class="indexterm" href="happy.html#id359084">Assignment Tasks</a></dt><dt>disruptive, <a class="indexterm" href="ntmigration.html#id386640">Dissection and Discussion</a></dt><dt>distributed, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a>, <a class="indexterm" href="2000users.html#id371556">Implementation</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="HA.html#id403840">Distribute Network Load with MSDFS</a></dt><dt>distributed domain, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a></dt><dt>DMB, <a class="indexterm" href="primer.html#chap01qa">Questions and Answers</a></dt><dt>DMS, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a>, <a class="indexterm" href="upgrades.html#id386001">Replacing a Domain Member Server</a></dt><dt>DNS, <a class="indexterm" href="small.html#id344988">Technical Issues</a>, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#id347966">Technical Issues</a>, <a class="indexterm" href="2000users.html#id370835">The Nature of Windows Networking Protocols</a>, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a>, <a class="indexterm" href="HA.html#id402984">Bad Hostnames</a>, <a class="indexterm" href="HA.html#id403161">Routed Networks</a>, <a class="indexterm" href="appendix.html#domjoin">Joining a Domain: Windows 200x/XP Professional</a></dt><dd><dl><dt>configuration, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>Dynamic, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a></dt><dt>dynamic, <a class="indexterm" href="appendix.html#domjoin">Joining a Domain: Windows 200x/XP Professional</a></dt><dt>lookup, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="DomApps.html#id400370">Kerberos Configuration</a></dt><dt>name lookup, <a class="indexterm" href="HA.html#id402984">Bad Hostnames</a></dt><dt>SRV records, <a class="indexterm" href="DomApps.html#id400370">Kerberos Configuration</a></dt><dt>suffix, <a class="indexterm" href="appendix.html#domjoin">Joining a Domain: Windows 200x/XP Professional</a></dt></dl></dd><dt>DNS server, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#ch4dhcpdns">Configuration of DHCP and DNS Servers</a></dt><dt>document the settings, <a class="indexterm" href="HA.html#id403415">Samba Configuration</a></dt><dt>documentation, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a>, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>documented, <a class="indexterm" href="HA.html#id403415">Samba Configuration</a></dt><dt>Domain, <a class="indexterm" href="small.html#id344988">Technical Issues</a></dt><dd><dl><dt>groups, <a class="indexterm" href="small.html#id344988">Technical Issues</a></dt></dl></dd><dt>domain</dt><dd><dl><dt>Active Directory, <a class="indexterm" href="DomApps.html#id399977">Technical Issues</a></dt><dt>controller, <a class="indexterm" href="upgrades.html#id386190">Replacing a Domain Controller</a></dt><dt>joining, <a class="indexterm" href="appendix.html">A Collection of Useful Tidbits</a></dt><dt>trusted, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt></dl></dd><dt>Domain accounts, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a></dt><dt>Domain Administrator, <a class="indexterm" href="kerberos.html#id397184">Share Access Controls</a></dt><dt>Domain Controller, <a class="indexterm" href="small.html#id347221">Key Points Learned</a>, <a class="indexterm" href="2000users.html#id370835">The Nature of Windows Networking Protocols</a>, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id376274">Implementation</a>, <a class="indexterm" href="HA.html#id403710">Use and Location of BDCs</a></dt><dd><dl><dt>closest, <a class="indexterm" href="2000users.html#id370835">The Nature of Windows Networking Protocols</a></dt></dl></dd><dt>domain controller, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a>, <a class="indexterm" href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a></dt><dt>domain controllers, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a></dt><dt>Domain Controllers, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>Domain Groups</dt><dd><dl><dt>well-known, <a class="indexterm" href="appendix.html#id406053">Initialization of the LDAP Database</a></dt></dl></dd><dt>Domain join, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>domain master, <a class="indexterm" href="ntmigration.html#id387250">NT4 Migration Using LDAP Backend</a>, <a class="indexterm" href="ntmigration.html#id389442">NT4 Migration Using tdbsam Backend</a></dt><dt>Domain Master Browser (see DMB)</dt><dt>Domain Member, <a class="indexterm" href="HA.html#id403710">Use and Location of BDCs</a></dt><dd><dl><dt>authoritative</dt><dd><dl><dt>local accounts, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a></dt></dl></dd><dt>client, <a class="indexterm" href="unixclients.html#id376274">Implementation</a></dt><dt>desktop, <a class="indexterm" href="unixclients.html#id375489">Introduction</a></dt><dt>server, <a class="indexterm" href="unixclients.html#id375489">Introduction</a>, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id376274">Implementation</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></dt><dt>servers, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id397648">Checkpoint Controls</a></dt><dt>workstations, <a class="indexterm" href="unixclients.html#id376274">Implementation</a></dt></dl></dd><dt>domain member</dt><dd><dl><dt>servers, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a></dt></dl></dd><dt>Domain Member server, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a></dt><dt>Domain Member servers, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>domain members, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>domain name space, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a></dt><dt>domain replication, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a></dt><dt>domain SID, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a></dt><dt>Domain SID, <a class="indexterm" href="ntmigration.html#id386802">Technical Issues</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>domain tree, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a></dt><dt>Domain User Manager, <a class="indexterm" href="happy.html#id367829">Configuring Profile Directories</a></dt><dt>Domain users, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>DOS, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a></dt><dt>dos2unix, <a class="indexterm" href="secure.html#id349099">Samba Configuration</a>, <a class="indexterm" href="Big500users.html#id355127">Configuration for Server: MASSIVE</a></dt><dt>down-grade, <a class="indexterm" href="upgrades.html#id383639">Introduction</a></dt><dt>drive letters, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>drive mapping, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>dumb printing, <a class="indexterm" href="happy.html#id360506">Installation of Printer Driver Auto-Download</a></dt><dt>dump, <a class="indexterm" href="ntmigration.html#id386802">Technical Issues</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>duplicate accounts, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a></dt><dt>dynamic DNS, <a class="indexterm" href="secure.html#id347966">Technical Issues</a></dt></dl></div><div class="indexdiv"><h3>E</h3><dl><dt>e-Directory, <a class="indexterm" href="nw4migration.html#id390913">Dissection and Discussion</a></dt><dt>Easy Software Products, <a class="indexterm" href="happy.html#id360506">Installation of Printer Driver Auto-Download</a></dt><dt>economically sustainable, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>eDirectory, <a class="indexterm" href="happy.html#id359212">Dissection and Discussion</a></dt><dt>education, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a></dt><dt>election, <a class="indexterm" href="primer.html#id408760">Findings</a></dt><dt>employment, <a class="indexterm" href="kerberos.html#id394729">Introduction</a>, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>enable, <a class="indexterm" href="secure.html#ch4ptrcfg">Printer Configuration</a></dt><dt>encrypted, <a class="indexterm" href="primer.html#id409948">Findings and Comments</a></dt><dt>encrypted password, <a class="indexterm" href="primer.html#id410194">Windows 200x/XP Client Interaction with Samba-3</a></dt><dt>encrypted passwords, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>End User License Agreement (see EULA)</dt><dt>enumerating, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a></dt><dt>essential, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>ethereal, <a class="indexterm" href="primer.html#id408521">Exercises</a></dt><dt>Ethernet switch, <a class="indexterm" href="small.html#id344988">Technical Issues</a></dt><dt>ethernet switch, <a class="indexterm" href="happy.html">Making Happy Users</a></dt><dt>EULA, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>Everyone, <a class="indexterm" href="kerberos.html#id397184">Share Access Controls</a></dt><dt>Excel, <a class="indexterm" href="kerberos.html#id398076">Share Point Directory and File Permissions</a></dt><dt>exclusive open, <a class="indexterm" href="appendix.html#id407872">Microsoft Access</a></dt><dt>experiment, <a class="indexterm" href="kerberos.html">Active Directory, Kerberos, and Security</a></dt><dt>export, <a class="indexterm" href="ntmigration.html#id386802">Technical Issues</a></dt><dt>extent, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>External Domains, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a></dt><dt>extreme demand, <a class="indexterm" href="HA.html#id402949">Guidelines for Reliable Samba Operation</a></dt></dl></div><div class="indexdiv"><h3>F</h3><dl><dt>fail, <a class="indexterm" href="2000users.html#id370835">The Nature of Windows Networking Protocols</a></dt><dt>fail-over, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a>, <a class="indexterm" href="2000users.html#id371556">Implementation</a></dt><dt>failed, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>failed join, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="unixclients.html#id380589">IDMAP_RID with Winbind</a></dt><dt>failure, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a></dt><dt>familiar, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>fatal problem, <a class="indexterm" href="HA.html#id403415">Samba Configuration</a></dt><dt>fear, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>fears, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>Fedora, <a class="indexterm" href="simple.html#id340728">Drafting Office</a></dt><dt>FHS, <a class="indexterm" href="appendix.html#id405157">Samba System File Location</a></dt><dt>file and print server, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt><dt>file and print service, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>file caching, <a class="indexterm" href="HA.html#id403415">Samba Configuration</a>, <a class="indexterm" href="appendix.html#id408086">Opportunistic Locking Controls</a></dt><dt>File Hierarchy System (see FHS)</dt><dt>file locations, <a class="indexterm" href="appendix.html#id405157">Samba System File Location</a></dt><dt>file permissions, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt><dt>file server</dt><dd><dl><dt>read-only, <a class="indexterm" href="simple.html#id340790">Dissection and Discussion</a></dt></dl></dd><dt>file servers, <a class="indexterm" href="happy.html#id361454">Samba Server Implementation</a></dt><dt>file system, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dd><dl><dt>access control, <a class="indexterm" href="secure.html#id349099">Samba Configuration</a></dt><dt>Ext3, <a class="indexterm" href="simple.html#id340832">Implementation</a></dt><dt>permissions, <a class="indexterm" href="secure.html#id349099">Samba Configuration</a>, <a class="indexterm" href="Big500users.html#id355127">Configuration for Server: MASSIVE</a></dt></dl></dd><dt>file system security, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a></dt><dt>filter, <a class="indexterm" href="kerberos.html#id397184">Share Access Controls</a></dt><dt>financial responsibility, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>firewall, <a class="indexterm" href="secure.html#id347966">Technical Issues</a>, <a class="indexterm" href="secure.html#ch4bsc">Basic System Configuration</a>, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>fix, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>flaws, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>flexibility, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>flush</dt><dd><dl><dt>cache memory, <a class="indexterm" href="appendix.html#id408086">Opportunistic Locking Controls</a></dt></dl></dd><dt>folder redirection, <a class="indexterm" href="happy.html#id359614">Technical Issues</a>, <a class="indexterm" href="happy.html#redirfold">Configuration of Default Profile with Folder Redirection</a>, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a></dt><dt>force group, <a class="indexterm" href="kerberos.html#id397932">Override Controls</a>, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a></dt><dt>force user, <a class="indexterm" href="simple.html#id341464">Dissection and Discussion</a>, <a class="indexterm" href="kerberos.html#id397932">Override Controls</a>, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a></dt><dt>forced settings, <a class="indexterm" href="kerberos.html#id397932">Override Controls</a></dt><dt>foreign, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>foreign SID, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>forwarded, <a class="indexterm" href="HA.html#id403161">Routed Networks</a></dt><dt>foundation members, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>Free Standards Group (see FSG)</dt><dt>free support, <a class="indexterm" href="ch14.html">Samba Support</a>, <a class="indexterm" href="ch14.html#id404300">Free Support</a></dt><dt>front-end, <a class="indexterm" href="HA.html#id402498">Dissection and Discussion</a></dt><dd><dl><dt>server, <a class="indexterm" href="HA.html#id403840">Distribute Network Load with MSDFS</a></dt></dl></dd><dt>frustration, <a class="indexterm" href="upgrades.html#id383639">Introduction</a></dt><dt>FSG, <a class="indexterm" href="appendix.html#id405157">Samba System File Location</a></dt><dt>FTP</dt><dd><dl><dt>proxy, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt></dl></dd><dt>full control, <a class="indexterm" href="kerberos.html#id397184">Share Access Controls</a>, <a class="indexterm" href="kerberos.html#id398771">Using MS Windows Explorer (File Manager)</a></dt><dt>fully qualified, <a class="indexterm" href="kerberos.html#id397648">Checkpoint Controls</a></dt><dt>functional differences, <a class="indexterm" href="upgrades.html#id383722">Cautions and Notes</a></dt></dl></div><div class="indexdiv"><h3>G</h3><dl><dt>generation, <a class="indexterm" href="upgrades.html#id383722">Cautions and Notes</a></dt><dt>Gentoo, <a class="indexterm" href="nw4migration.html">Migrating NetWare Server to Samba-3</a></dt><dt>getent, <a class="indexterm" href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="happy.html#sbehap-bldg1">Samba-3 BDC Configuration</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="unixclients.html#id380589">IDMAP_RID with Winbind</a></dt><dt>getfacl, <a class="indexterm" href="kerberos.html#id398933">Setting Posix ACLs in UNIX/Linux</a></dt><dt>getgrnam, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a></dt><dt>getpwnam, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>getpwnam(), <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>GID, <a class="indexterm" href="2000users.html#id371556">Implementation</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>Goettingen, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt><dt>government, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a></dt><dt>GPL, <a class="indexterm" href="secure.html#id352560">Comments Regarding Software Terms of Use</a></dt><dt>group account, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a>, <a class="indexterm" href="happy.html#ldapsetup">OpenLDAP Server Configuration</a></dt><dt>group management, <a class="indexterm" href="secure.html#id348344">Implementation</a></dt><dt>group mapping, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>group membership, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#id349099">Samba Configuration</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="kerberos.html#id398076">Share Point Directory and File Permissions</a></dt><dt>group names, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>group policies, <a class="indexterm" href="ntmigration.html#id386514">Introduction</a></dt><dt>Group Policy, <a class="indexterm" href="appendix.html#domjoin">Joining a Domain: Windows 200x/XP Professional</a></dt><dt>Group Policy editor, <a class="indexterm" href="happy.html#sbehap-locgrppol">The Local Group Policy</a></dt><dt>Group Policy Objects, <a class="indexterm" href="happy.html#sbehap-locgrppol">The Local Group Policy</a></dt><dt>groupadd, <a class="indexterm" href="simple.html#id341634">Implementation</a>, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a>, <a class="indexterm" href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>groupdel, <a class="indexterm" href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>groupmem, <a class="indexterm" href="ntmigration.html#id387250">NT4 Migration Using LDAP Backend</a></dt><dt>groupmod, <a class="indexterm" href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>GSS-API, <a class="indexterm" href="primer.html#id410194">Windows 200x/XP Client Interaction with Samba-3</a></dt><dt>guest account, <a class="indexterm" href="primer.html#id409948">Findings and Comments</a>, <a class="indexterm" href="primer.html#chap01conc">Dissection and Discussion</a>, <a class="indexterm" href="primer.html#id410820">Technical Issues</a>, <a class="indexterm" href="primer.html#chap01qa">Questions and Answers</a></dt></dl></div><div class="indexdiv"><h3>H</h3><dl><dt>hackers, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>hardware prices, <a class="indexterm" href="HA.html#id403932">Hardware Problems</a></dt><dt>hardware problems, <a class="indexterm" href="HA.html#id403932">Hardware Problems</a></dt><dt>Heimdal, <a class="indexterm" href="DomApps.html#id400137">Implementation</a>, <a class="indexterm" href="DomApps.html#id400370">Kerberos Configuration</a></dt><dt>Heimdal Kerberos, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="kerberos.html#id396888">Kerberos Exposed</a></dt><dt>Heimdal kerberos, <a class="indexterm" href="unixclients.html#id381158">IDMAP Storage in LDAP using Winbind</a></dt><dt>help, <a class="indexterm" href="ch14.html#id404300">Free Support</a></dt><dt>helper agent, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></dt><dt>hesiod, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>hierarchy of control, <a class="indexterm" href="kerberos.html#id397519">Share Definition Controls</a></dt><dt>high availability, <a class="indexterm" href="happy.html#id359212">Dissection and Discussion</a></dt><dt>hire, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>HKEY_CURRENT_USER, <a class="indexterm" href="happy.html#id360094">Roaming Profile Background</a></dt><dt>HKEY_LOCAL_MACHINE, <a class="indexterm" href="happy.html#redirfold">Configuration of Default Profile with Folder Redirection</a></dt><dt>HKEY_LOCAL_USER, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a></dt><dt>host announcement, <a class="indexterm" href="primer.html#id408414">Assignment Tasks</a>, <a class="indexterm" href="primer.html#id409382">Findings</a></dt><dt>hostname, <a class="indexterm" href="secure.html#ch4bsc">Basic System Configuration</a>, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a></dt><dt>hosts, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>HUB, <a class="indexterm" href="happy.html">Making Happy Users</a></dt><dt>Hybrid, <a class="indexterm" href="primer.html#chap01qa">Questions and Answers</a></dt><dt>hypothetical, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt></dl></div><div class="indexdiv"><h3>I</h3><dl><dt>Idealx, <a class="indexterm" href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a>, <a class="indexterm" href="ntmigration.html#id387250">NT4 Migration Using LDAP Backend</a></dt><dd><dl><dt>smbldap-tools, <a class="indexterm" href="happy.html#sbeidealx">Install and Configure Idealx smbldap-tools Scripts</a>, <a class="indexterm" href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a></dt></dl></dd><dt>identifiers, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a></dt><dt>identity, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id396888">Kerberos Exposed</a></dt><dd><dl><dt>management, <a class="indexterm" href="happy.html#id359614">Technical Issues</a></dt></dl></dd><dt>identity management, <a class="indexterm" href="Big500users.html#id353690">Technical Issues</a>, <a class="indexterm" href="2000users.html#id370476">Dissection and Discussion</a>, <a class="indexterm" href="unixclients.html#id376189">Political Issues</a>, <a class="indexterm" href="nw4migration.html#id390913">Dissection and Discussion</a></dt><dt>Identity Management, <a class="indexterm" href="happy.html#id359212">Dissection and Discussion</a>, <a class="indexterm" href="2000users.html#id370835">The Nature of Windows Networking Protocols</a>, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a></dt><dt>Identity management, <a class="indexterm" href="unixclients.html#id382025">UNIX/Linux Client Domain Member</a></dt><dt>Identity resolution, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="unixclients.html#id382025">UNIX/Linux Client Domain Member</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>Identity resolver, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt><dt>IDMAP, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="unixclients.html#id380589">IDMAP_RID with Winbind</a></dt><dt>idmap backend, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a></dt><dt>IDMAP backend, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>idmap gid, <a class="indexterm" href="unixclients.html#id380589">IDMAP_RID with Winbind</a></dt><dt>idmap uid, <a class="indexterm" href="unixclients.html#id380589">IDMAP_RID with Winbind</a></dt><dt>idmap_rid, <a class="indexterm" href="unixclients.html#id380589">IDMAP_RID with Winbind</a></dt><dt>IMAP, <a class="indexterm" href="nw4migration.html#id390984">Technical Issues</a></dt><dt>import, <a class="indexterm" href="ntmigration.html#id386802">Technical Issues</a></dt><dt>income, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>independent expert, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>inetd, <a class="indexterm" href="secure.html#procstart">Process Startup Configuration</a></dt><dt>inetOrgPerson, <a class="indexterm" href="nw4migration.html#id390984">Technical Issues</a></dt><dt>inheritance, <a class="indexterm" href="kerberos.html#id398933">Setting Posix ACLs in UNIX/Linux</a></dt><dt>initGrps.sh, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#id349099">Samba Configuration</a>, <a class="indexterm" href="Big500users.html#id355127">Configuration for Server: MASSIVE</a></dt><dt>initial credentials, <a class="indexterm" href="DomApps.html#id400370">Kerberos Configuration</a></dt><dt>inoperative, <a class="indexterm" href="ntmigration.html#id386640">Dissection and Discussion</a></dt><dt>install, <a class="indexterm" href="upgrades.html">Updating Samba-3</a></dt><dt>installation, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>integrate, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a></dt><dt>integrity, <a class="indexterm" href="kerberos.html#id394729">Introduction</a>, <a class="indexterm" href="kerberos.html#id396888">Kerberos Exposed</a></dt><dt>inter-domain, <a class="indexterm" href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a></dt><dt>inter-operability, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a>, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id399129">Key Points Learned</a>, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt><dt>interactive help, <a class="indexterm" href="ch14.html#id404300">Free Support</a></dt><dt>interdomain trusts, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a></dt><dt>interfaces, <a class="indexterm" href="secure.html#id348344">Implementation</a></dt><dt>intermittent, <a class="indexterm" href="HA.html#id403932">Hardware Problems</a></dt><dt>internationalization, <a class="indexterm" href="upgrades.html#id384787">International Language Support</a></dt><dt>Internet Explorer, <a class="indexterm" href="DomApps.html#id399977">Technical Issues</a></dt><dt>Internet Information Server, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt><dt>interoperability, <a class="indexterm" href="happy.html#id359212">Dissection and Discussion</a></dt><dt>IP forwarding, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#ch4bsc">Basic System Configuration</a>, <a class="indexterm" href="Big500users.html#id355127">Configuration for Server: MASSIVE</a></dt><dt>IPC$, <a class="indexterm" href="primer.html#id409948">Findings and Comments</a></dt><dt>iptables, <a class="indexterm" href="secure.html#id347966">Technical Issues</a></dt><dt>IRC, <a class="indexterm" href="ch14.html#id404300">Free Support</a></dt><dt>isolated, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>Italian, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt></dl></div><div class="indexdiv"><h3>J</h3><dl><dt>jobs, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>joining a domain, <a class="indexterm" href="appendix.html#domjoin">Joining a Domain: Windows 200x/XP Professional</a></dt></dl></div><div class="indexdiv"><h3>K</h3><dl><dt>KDC, <a class="indexterm" href="DomApps.html#id400370">Kerberos Configuration</a></dt><dt>Kerberos, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id394729">Introduction</a>, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id399129">Key Points Learned</a>, <a class="indexterm" href="DomApps.html#id399977">Technical Issues</a>, <a class="indexterm" href="DomApps.html#id400137">Implementation</a>, <a class="indexterm" href="DomApps.html#id400370">Kerberos Configuration</a></dt><dd><dl><dt>Heimdal, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></dt><dt>interoperability, <a class="indexterm" href="kerberos.html#id396888">Kerberos Exposed</a></dt><dt>libraries, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></dt><dt>MIT, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></dt><dt>unspecified fields, <a class="indexterm" href="kerberos.html#id396888">Kerberos Exposed</a></dt></dl></dd><dt>kerberos, <a class="indexterm" href="kerberos.html#id396888">Kerberos Exposed</a></dt><dd><dl><dt>server, <a class="indexterm" href="kerberos.html#id396888">Kerberos Exposed</a></dt></dl></dd><dt>Kerberos ticket, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a></dt><dt>kinit, <a class="indexterm" href="DomApps.html#id400370">Kerberos Configuration</a></dt><dt>Kixtart, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>klist, <a class="indexterm" href="DomApps.html#id400370">Kerberos Configuration</a></dt><dt>krb5, <a class="indexterm" href="DomApps.html#id400137">Implementation</a></dt><dt>krb5.conf, <a class="indexterm" href="DomApps.html#id400370">Kerberos Configuration</a></dt></dl></div><div class="indexdiv"><h3>L</h3><dl><dt>LAM, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt><dd><dl><dt>configuration editor, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt><dt>configuration file, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt><dt>login screen, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt><dt>opening screen, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt><dt>profile, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt><dt>wizard, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt></dl></dd><dt>large domain, <a class="indexterm" href="unixclients.html#id380589">IDMAP_RID with Winbind</a></dt><dt>LDAP, <a class="indexterm" href="Big500users.html#id353690">Technical Issues</a>, <a class="indexterm" href="happy.html#id359084">Assignment Tasks</a>, <a class="indexterm" href="happy.html#id359212">Dissection and Discussion</a>, <a class="indexterm" href="happy.html#id359614">Technical Issues</a>, <a class="indexterm" href="happy.html#id360669">Preliminary Advice: Dangers Can Be Avoided</a>, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a>, <a class="indexterm" href="2000users.html#id370394">Introduction</a>, <a class="indexterm" href="2000users.html#id370476">Dissection and Discussion</a>, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a>, <a class="indexterm" href="2000users.html#id371556">Implementation</a>, <a class="indexterm" href="2000users.html#id374570">Key Points Learned</a>, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a>, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a>, <a class="indexterm" href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a>, <a class="indexterm" href="ntmigration.html#id386589">Assignment Tasks</a>, <a class="indexterm" href="ntmigration.html#id386802">Technical Issues</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a>, <a class="indexterm" href="nw4migration.html#id390913">Dissection and Discussion</a>, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a>, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dd><dl><dt>backend, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a></dt><dt>database, <a class="indexterm" href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a>, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a>, <a class="indexterm" href="appendix.html#altldapcfg">Alternative LDAP Database Initialization</a></dt><dt>directory, <a class="indexterm" href="happy.html#id358884">Regarding LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a></dt><dt>fail-over, <a class="indexterm" href="2000users.html#id371556">Implementation</a></dt><dt>initial configuration, <a class="indexterm" href="appendix.html#altldapcfg">Alternative LDAP Database Initialization</a></dt><dt>master, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a></dt><dt>master/slave</dt><dd><dl><dt>background communication, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a></dt></dl></dd><dt>preload, <a class="indexterm" href="2000users.html#id371556">Implementation</a></dt><dt>schema, <a class="indexterm" href="upgrades.html#id385836">Updating from Samba Versions between 3.0.6 and 3.0.10</a></dt><dt>secure, <a class="indexterm" href="happy.html#id359614">Technical Issues</a></dt><dt>server, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>slave, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a></dt><dt>updates, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a></dt></dl></dd><dt>ldap, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>LDAP Account Manager (see LAM)</dt><dt>LDAP backend, <a class="indexterm" href="ntmigration.html#id386802">Technical Issues</a></dt><dt>LDAP database, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>LDAP Interchange Format (see LDIF)</dt><dt>LDAP server, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a></dt><dt>LDAP-transfer-LDIF.txt, <a class="indexterm" href="2000users.html#id371556">Implementation</a></dt><dt>ldap.conf, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>ldapadd, <a class="indexterm" href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>ldapsam, <a class="indexterm" href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="2000users.html#id370476">Dissection and Discussion</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="upgrades.html#id385836">Updating from Samba Versions between 3.0.6 and 3.0.10</a>, <a class="indexterm" href="ntmigration.html#id386589">Assignment Tasks</a>, <a class="indexterm" href="DomApps.html">Integrating Additional Services</a></dt><dt>ldapsam backend, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>ldapsearch, <a class="indexterm" href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a></dt><dt>LDIF, <a class="indexterm" href="happy.html#id359614">Technical Issues</a>, <a class="indexterm" href="2000users.html#id371556">Implementation</a>, <a class="indexterm" href="nw4migration.html#id390984">Technical Issues</a>, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a>, <a class="indexterm" href="appendix.html#id406053">Initialization of the LDAP Database</a></dt><dt>leadership, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>Lightweight Directory Access Protocol (see LDAP)</dt><dt>limit, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>Linux desktop, <a class="indexterm" href="unixclients.html#id375489">Introduction</a></dt><dt>Linux Standards Base (see LSB)</dt><dt>LMB, <a class="indexterm" href="primer.html#id408760">Findings</a>, <a class="indexterm" href="primer.html#chap01qa">Questions and Answers</a></dt><dt>LMHOSTS, <a class="indexterm" href="HA.html#id403161">Routed Networks</a></dt><dt>load distribution, <a class="indexterm" href="HA.html#id403795">For Scalability, Use SAN-Based Storage on Samba Servers</a></dt><dt>local accounts, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a></dt><dt>Local Group Policy, <a class="indexterm" href="happy.html#id360094">Roaming Profile Background</a></dt><dt>Local Master Announcement, <a class="indexterm" href="primer.html#id409382">Findings</a></dt><dt>Local Master Browser (see LMB)</dt><dt>localhost, <a class="indexterm" href="secure.html#ch4bsc">Basic System Configuration</a>, <a class="indexterm" href="HA.html#id402984">Bad Hostnames</a></dt><dt>lock directory, <a class="indexterm" href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a></dt><dt>locking</dt><dd><dl><dt>Application level, <a class="indexterm" href="appendix.html#ch12dblck">Shared Data Integrity</a></dt><dt>Client side, <a class="indexterm" href="appendix.html#ch12dblck">Shared Data Integrity</a></dt><dt>Server side, <a class="indexterm" href="appendix.html#ch12dblck">Shared Data Integrity</a></dt></dl></dd><dt>logging, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></dt><dt>login, <a class="indexterm" href="secure.html#id347966">Technical Issues</a></dt><dt>loglevel, <a class="indexterm" href="happy.html#id360837">Debugging LDAP</a></dt><dt>logon credentials, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt><dt>logon hours, <a class="indexterm" href="ntmigration.html#id386802">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id399129">Key Points Learned</a></dt><dt>logon machines, <a class="indexterm" href="ntmigration.html#id386802">Technical Issues</a></dt><dt>logon path, <a class="indexterm" href="secure.html#id348344">Implementation</a></dt><dt>logon process, <a class="indexterm" href="unixclients.html#id376274">Implementation</a></dt><dt>logon scrip, <a class="indexterm" href="secure.html#id349099">Samba Configuration</a></dt><dt>logon script, <a class="indexterm" href="secure.html#id348344">Implementation</a>, <a class="indexterm" href="happy.html#id359614">Technical Issues</a>, <a class="indexterm" href="happy.html#id368057">Preparation of Logon Scripts</a>, <a class="indexterm" href="ntmigration.html#id386802">Technical Issues</a></dt><dt>logon server, <a class="indexterm" href="2000users.html#id370835">The Nature of Windows Networking Protocols</a></dt><dt>logon services, <a class="indexterm" href="secure.html#id348344">Implementation</a></dt><dt>logon time, <a class="indexterm" href="happy.html#id359084">Assignment Tasks</a></dt><dt>logon traffic, <a class="indexterm" href="2000users.html#id370835">The Nature of Windows Networking Protocols</a></dt><dt>logon.kix, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>loopback, <a class="indexterm" href="simple.html#validate1">Validation</a></dt><dt>low performance, <a class="indexterm" href="HA.html#id403932">Hardware Problems</a></dt><dt>lower-case, <a class="indexterm" href="ntmigration.html#id387125">Implementation</a></dt><dt>lpadmin, <a class="indexterm" href="simple.html#id341634">Implementation</a>, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a>, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#ch4ptrcfg">Printer Configuration</a>, <a class="indexterm" href="happy.html#sbehap-ptrcfg">Printer Configuration</a></dt><dt>LSB, <a class="indexterm" href="appendix.html#id405157">Samba System File Location</a></dt></dl></div><div class="indexdiv"><h3>M</h3><dl><dt>machine, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a></dt><dt>machine account, <a class="indexterm" href="happy.html#id358884">Regarding LDAP Directories and Windows Computer Accounts</a></dt><dt>machine accounts, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>machine secret password, <a class="indexterm" href="Big500users.html#id353690">Technical Issues</a></dt><dt>MACHINE.SID, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a></dt><dt>mailing list, <a class="indexterm" href="ch14.html#id404300">Free Support</a></dt><dt>mailing lists, <a class="indexterm" href="ch14.html#id404300">Free Support</a></dt><dt>managed, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>management, <a class="indexterm" href="unixclients.html#id376189">Political Issues</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dd><dl><dt>group, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>User, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt></dl></dd><dt>mandatory profile, <a class="indexterm" href="happy.html#id359614">Technical Issues</a>, <a class="indexterm" href="happy.html#id367829">Configuring Profile Directories</a></dt><dt>Mandrake, <a class="indexterm" href="nw4migration.html">Migrating NetWare Server to Samba-3</a></dt><dt>mapped drives, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>mapping, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a>, <a class="indexterm" href="DomApps.html#id400370">Kerberos Configuration</a></dt><dd><dl><dt>consistent, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt></dl></dd><dt>Mars_NWE, <a class="indexterm" href="nw4migration.html">Migrating NetWare Server to Samba-3</a></dt><dt>master, <a class="indexterm" href="2000users.html#id370476">Dissection and Discussion</a></dt><dt>material, <a class="indexterm" href="appendix.html">A Collection of Useful Tidbits</a></dt><dt>memberUID, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>memory requirements, <a class="indexterm" href="secure.html#id348190">Hardware Requirements</a></dt><dt>merge, <a class="indexterm" href="ntmigration.html#id386802">Technical Issues</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>merged, <a class="indexterm" href="ntmigration.html#id386802">Technical Issues</a></dt><dt>meta-directory, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a></dt><dt>meta-service, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a></dt><dt>Microsoft Access, <a class="indexterm" href="appendix.html#ch12dblck">Shared Data Integrity</a></dt><dt>Microsoft Excel, <a class="indexterm" href="appendix.html#ch12dblck">Shared Data Integrity</a></dt><dt>Microsoft ISA, <a class="indexterm" href="DomApps.html#id399862">Assignment Tasks</a></dt><dt>Microsoft Management Console (see MMC)</dt><dt>Microsoft Office, <a class="indexterm" href="secure.html#ch4appscfg">Application Share Configuration</a>, <a class="indexterm" href="kerberos.html#id398076">Share Point Directory and File Permissions</a></dt><dt>Microsoft Outlook</dt><dd><dl><dt>PST files, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a></dt></dl></dd><dt>migrate, <a class="indexterm" href="upgrades.html">Updating Samba-3</a>, <a class="indexterm" href="ntmigration.html#id386802">Technical Issues</a></dt><dt>migration, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a>, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="happy.html#id359084">Assignment Tasks</a>, <a class="indexterm" href="ntmigration.html#id386514">Introduction</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a>, <a class="indexterm" href="nw4migration.html">Migrating NetWare Server to Samba-3</a></dt><dd><dl><dt>objectives, <a class="indexterm" href="ntmigration.html#id386640">Dissection and Discussion</a></dt></dl></dd><dt>Migration speed, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>mime type, <a class="indexterm" href="simple.html#id341634">Implementation</a>, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#ch4ptrcfg">Printer Configuration</a>, <a class="indexterm" href="Big500users.html#id354601">Server Preparation: All Servers</a>, <a class="indexterm" href="happy.html#sbehap-ptrcfg">Printer Configuration</a></dt><dt>mime types, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a></dt><dt>missing RPC's, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>MIT, <a class="indexterm" href="DomApps.html#id400137">Implementation</a>, <a class="indexterm" href="DomApps.html#id400370">Kerberos Configuration</a></dt><dt>MIT Kerberos, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="kerberos.html#id396888">Kerberos Exposed</a></dt><dt>MIT kerberos, <a class="indexterm" href="unixclients.html#id381158">IDMAP Storage in LDAP using Winbind</a></dt><dt>MIT KRB5, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a></dt><dt>mixed mode, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></dt><dt>mixed-mode, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a></dt><dt>MMC, <a class="indexterm" href="happy.html#id369268">Configure Delete Cached Profiles on Logout</a>, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a></dt><dt>mobile computing, <a class="indexterm" href="small.html#id344943">Dissection and Discussion</a></dt><dt>mobility, <a class="indexterm" href="2000users.html#id370722">Technical Issues</a></dt><dt>modularization, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>modules, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt><dt>MS Access</dt><dd><dl><dt>validate, <a class="indexterm" href="appendix.html#id407872">Microsoft Access</a></dt></dl></dd><dt>MS Outlook, <a class="indexterm" href="happy.html#id368985">Configuration of MS Outlook to Relocate PST File</a></dt><dd><dl><dt>PST, <a class="indexterm" href="happy.html#id368985">Configuration of MS Outlook to Relocate PST File</a></dt><dt>PST file, <a class="indexterm" href="happy.html">Making Happy Users</a></dt></dl></dd><dt>MS Windows Server 2003, <a class="indexterm" href="DomApps.html#id400137">Implementation</a></dt><dt>MS Word, <a class="indexterm" href="kerberos.html#id398076">Share Point Directory and File Permissions</a></dt><dt>MSDFS, <a class="indexterm" href="HA.html#id403840">Distribute Network Load with MSDFS</a></dt><dt>multi-subnet, <a class="indexterm" href="HA.html#id403161">Routed Networks</a></dt><dt>multi-user</dt><dd><dl><dt>access, <a class="indexterm" href="appendix.html#id407872">Microsoft Access</a></dt><dt>data access, <a class="indexterm" href="appendix.html#ch12dblck">Shared Data Integrity</a></dt></dl></dd><dt>multiple directories, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a></dt><dt>multiple domain controllers, <a class="indexterm" href="happy.html">Making Happy Users</a></dt><dt>multiple group mappings, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>mutual assistance, <a class="indexterm" href="ch14.html#id404300">Free Support</a></dt><dt>My Documents, <a class="indexterm" href="happy.html#id360094">Roaming Profile Background</a></dt><dt>My Network Places, <a class="indexterm" href="simple.html#id341634">Implementation</a></dt><dt>mysqlsam, <a class="indexterm" href="2000users.html#id371556">Implementation</a></dt></dl></div><div class="indexdiv"><h3>N</h3><dl><dt>name resolution, <a class="indexterm" href="secure.html#ch4dhcpdns">Configuration of DHCP and DNS Servers</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="primer.html#id408414">Assignment Tasks</a></dt><dd><dl><dt>Defective, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></dt></dl></dd><dt>name resolve order, <a class="indexterm" href="secure.html#id348344">Implementation</a></dt><dt>name service switch, <a class="indexterm" href="small.html#id345178">Implementation</a> (see NSS)</dt><dt>named, <a class="indexterm" href="secure.html#ch4bsc">Basic System Configuration</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a>, <a class="indexterm" href="Big500users.html#id354601">Server Preparation: All Servers</a></dt><dt>NAT, <a class="indexterm" href="secure.html#id347966">Technical Issues</a></dt><dt>native, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a></dt><dt>net</dt><dd><dl><dt>ads</dt><dd><dl><dt>info, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></dt><dt>join, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a></dt><dt>status, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></dt></dl></dd><dt>getlocalsid, <a class="indexterm" href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a>, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a></dt><dt>group, <a class="indexterm" href="ntmigration.html#id389442">NT4 Migration Using tdbsam Backend</a></dt><dt>groupmap</dt><dd><dl><dt>add, <a class="indexterm" href="secure.html#id349099">Samba Configuration</a></dt><dt>list, <a class="indexterm" href="secure.html#id349099">Samba Configuration</a>, <a class="indexterm" href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a></dt><dt>modify, <a class="indexterm" href="secure.html#id349099">Samba Configuration</a></dt></dl></dd><dt>rpc</dt><dd><dl><dt>info, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a></dt><dt>join, <a class="indexterm" href="Big500users.html#ch5-domsvrspec">Configuration Specific to Domain Member Servers: BLDG1, BLDG2</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="unixclients.html#dcwonss">NT4/Samba Domain with Samba Domain Member Server without NSS Support</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="ntmigration.html#id389442">NT4 Migration Using tdbsam Backend</a></dt><dt>vampire, <a class="indexterm" href="upgrades.html">Updating Samba-3</a>, <a class="indexterm" href="ntmigration.html#id389442">NT4 Migration Using tdbsam Backend</a></dt></dl></dd><dt>setlocalsid, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a></dt></dl></dd><dt>NetBIOS, <a class="indexterm" href="2000users.html#id370835">The Nature of Windows Networking Protocols</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="HA.html#id402984">Bad Hostnames</a>, <a class="indexterm" href="HA.html#id403161">Routed Networks</a>, <a class="indexterm" href="primer.html#chap01qa">Questions and Answers</a></dt><dd><dl><dt>name cache, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a></dt><dt>name resolution</dt><dd><dl><dt>delays, <a class="indexterm" href="happy.html">Making Happy Users</a></dt></dl></dd><dt>Node Type, <a class="indexterm" href="primer.html#chap01qa">Questions and Answers</a></dt></dl></dd><dt>netbios</dt><dd><dl><dt>machine  name, <a class="indexterm" href="upgrades.html#id384485">Change of hostname</a></dt></dl></dd><dt>netbios forwarding, <a class="indexterm" href="HA.html#id403325">Network Collisions</a></dt><dt>NetBIOS name, <a class="indexterm" href="DomApps.html#id400370">Kerberos Configuration</a></dt><dd><dl><dt>aliases, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a></dt></dl></dd><dt>netbios name, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a>, <a class="indexterm" href="upgrades.html#id384485">Change of hostname</a>, <a class="indexterm" href="HA.html#id402984">Bad Hostnames</a></dt><dt>NETLOGON, <a class="indexterm" href="happy.html#id360452">Using a Network Default User Profile</a>, <a class="indexterm" href="happy.html#id368268">Windows Client Configuration</a></dt><dt>netlogon, <a class="indexterm" href="2000users.html#id370835">The Nature of Windows Networking Protocols</a>, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>Netlogon, <a class="indexterm" href="appendix.html#domjoin">Joining a Domain: Windows 200x/XP Professional</a></dt><dt>netmask, <a class="indexterm" href="simple.html#id340832">Implementation</a></dt><dt>Netware, <a class="indexterm" href="small.html">Small Office Networking</a></dt><dt>NetWare, <a class="indexterm" href="nw4migration.html">Migrating NetWare Server to Samba-3</a>, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>network</dt><dd><dl><dt>administrators, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>analyzer, <a class="indexterm" href="primer.html#id408414">Assignment Tasks</a></dt><dt>bandwidth, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a>, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a></dt><dt>broadcast, <a class="indexterm" href="primer.html#id408364">Introduction</a></dt><dt>captures, <a class="indexterm" href="primer.html#id408228">Requirements and Notes</a></dt><dt>collisions, <a class="indexterm" href="HA.html#id403325">Network Collisions</a></dt><dt>load, <a class="indexterm" href="HA.html#id403325">Network Collisions</a></dt><dt>logon, <a class="indexterm" href="happy.html">Making Happy Users</a></dt><dt>logon scripts, <a class="indexterm" href="ntmigration.html#id386640">Dissection and Discussion</a></dt><dt>management, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>multi-segment, <a class="indexterm" href="happy.html#id359008">Introduction</a></dt><dt>overload, <a class="indexterm" href="happy.html">Making Happy Users</a></dt><dt>performance, <a class="indexterm" href="HA.html#id403415">Samba Configuration</a></dt><dt>routed, <a class="indexterm" href="2000users.html#id370476">Dissection and Discussion</a></dt><dt>secure, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>segment, <a class="indexterm" href="happy.html#id359212">Dissection and Discussion</a></dt><dt>services, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt><dt>sniffer, <a class="indexterm" href="primer.html#id408228">Requirements and Notes</a></dt><dt>timeout, <a class="indexterm" href="happy.html">Making Happy Users</a></dt><dt>timeouts, <a class="indexterm" href="HA.html#id403325">Network Collisions</a></dt><dt>trace, <a class="indexterm" href="primer.html#id408414">Assignment Tasks</a></dt><dt>traffic</dt><dd><dl><dt>observation, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt></dl></dd><dt>wide-area, <a class="indexterm" href="happy.html#id359212">Dissection and Discussion</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a></dt></dl></dd><dt>Network Address Translation (see NAT)</dt><dt>network administrators, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>network attached storage (see NAS)</dt><dt>network bandwidth</dt><dd><dl><dt>utilization, <a class="indexterm" href="happy.html">Making Happy Users</a></dt></dl></dd><dt>Network Default Profile, <a class="indexterm" href="happy.html#id360094">Roaming Profile Background</a></dt><dt>network hardware</dt><dd><dl><dt>defective, <a class="indexterm" href="happy.html">Making Happy Users</a></dt></dl></dd><dt>network hygiene, <a class="indexterm" href="HA.html#id402498">Dissection and Discussion</a></dt><dt>network Identities, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>network load factors, <a class="indexterm" href="Big500users.html#id353662">Dissection and Discussion</a></dt><dt>Network Neighborhood, <a class="indexterm" href="simple.html#validate1">Validation</a>, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>network segment, <a class="indexterm" href="HA.html#id403710">Use and Location of BDCs</a></dt><dt>network segments, <a class="indexterm" href="secure.html#id348190">Hardware Requirements</a></dt><dt>network share, <a class="indexterm" href="happy.html#id359084">Assignment Tasks</a></dt><dt>networking</dt><dd><dl><dt>client, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a></dt></dl></dd><dt>networking hardware</dt><dd><dl><dt>defective, <a class="indexterm" href="happy.html">Making Happy Users</a></dt></dl></dd><dt>networking protocols, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>next generation, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>NextFreeUnixId, <a class="indexterm" href="ntmigration.html#id387250">NT4 Migration Using LDAP Backend</a></dt><dt>NFS server, <a class="indexterm" href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a></dt><dt>NICs, <a class="indexterm" href="HA.html#id403932">Hardware Problems</a></dt><dt>NIS, <a class="indexterm" href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a>, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a>, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id376189">Political Issues</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>nis, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>NIS schema, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a></dt><dt>NIS server, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a></dt><dt>NIS+, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a></dt><dt>nisplus, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>NLM, <a class="indexterm" href="nw4migration.html">Migrating NetWare Server to Samba-3</a></dt><dt>nmap, <a class="indexterm" href="secure.html#ch4valid">Validation</a></dt><dt>nmbd, <a class="indexterm" href="small.html#id346626">Validation</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a>, <a class="indexterm" href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a>, <a class="indexterm" href="upgrades.html#id386001">Replacing a Domain Member Server</a>, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a>, <a class="indexterm" href="appendix.html#id405549">Starting Samba</a></dt><dt>nobody, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a>, <a class="indexterm" href="primer.html#id409948">Findings and Comments</a></dt><dt>Novell, <a class="indexterm" href="nw4migration.html">Migrating NetWare Server to Samba-3</a>, <a class="indexterm" href="nw4migration.html#id390707">Introduction</a></dt><dt>Novell SUSE SLES 9, <a class="indexterm" href="ntmigration.html#id387250">NT4 Migration Using LDAP Backend</a></dt><dt>NSS, <a class="indexterm" href="happy.html#id358884">Regarding LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="happy.html#id359614">Technical Issues</a>, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a>, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="unixclients.html#id380589">IDMAP_RID with Winbind</a>, <a class="indexterm" href="unixclients.html#id382025">UNIX/Linux Client Domain Member</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a>, <a class="indexterm" href="DomApps.html#id401255">NSS Configuration</a> (see same service switch)</dt><dt>nss_ldap, <a class="indexterm" href="happy.html#id358884">Regarding LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="happy.html#id359614">Technical Issues</a>, <a class="indexterm" href="happy.html#ldapsetup">OpenLDAP Server Configuration</a>, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a>, <a class="indexterm" href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="unixclients.html#id381708">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a>, <a class="indexterm" href="upgrades.html#id386001">Replacing a Domain Member Server</a>, <a class="indexterm" href="ntmigration.html#id387250">NT4 Migration Using LDAP Backend</a></dt><dt>nt acl support, <a class="indexterm" href="simple.html#id341464">Dissection and Discussion</a></dt><dt>NT4 registry, <a class="indexterm" href="ntmigration.html#id386640">Dissection and Discussion</a></dt><dt>NTLM, <a class="indexterm" href="DomApps.html#id399977">Technical Issues</a></dt><dt>NTLM authentication daemon, <a class="indexterm" href="DomApps.html#id399977">Technical Issues</a></dt><dt>NTLMSSP, <a class="indexterm" href="DomApps.html#id401888">Key Points Learned</a>, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a>, <a class="indexterm" href="primer.html#id410194">Windows 200x/XP Client Interaction with Samba-3</a></dt><dt>NTLMSSP_AUTH, <a class="indexterm" href="primer.html#id410194">Windows 200x/XP Client Interaction with Samba-3</a></dt><dt>ntlm_auth, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a>, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt><dt>NTP, <a class="indexterm" href="DomApps.html#id400370">Kerberos Configuration</a></dt><dt>NTUSER.DAT, <a class="indexterm" href="happy.html#id360094">Roaming Profile Background</a>, <a class="indexterm" href="happy.html#id360364">Profile Changes</a>, <a class="indexterm" href="happy.html#id360452">Using a Network Default User Profile</a>, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a></dt><dt>NULL connection, <a class="indexterm" href="simple.html#validate1">Validation</a></dt><dt>NULL session, <a class="indexterm" href="primer.html#id409948">Findings and Comments</a></dt><dt>NULL-Session, <a class="indexterm" href="primer.html#id410692">Discussion</a></dt></dl></div><div class="indexdiv"><h3>O</h3><dl><dt>objectClass, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>off-site storage, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>Open Magazine, <a class="indexterm" href="unixclients.html">Adding Domain Member Servers and Clients</a></dt><dt>Open Source, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>OpenLDAP, <a class="indexterm" href="happy.html#id359212">Dissection and Discussion</a>, <a class="indexterm" href="2000users.html#id370476">Dissection and Discussion</a>, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a>, <a class="indexterm" href="unixclients.html#id376189">Political Issues</a>, <a class="indexterm" href="nw4migration.html#id390984">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id394729">Introduction</a>, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id399129">Key Points Learned</a>, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt><dt>openldap, <a class="indexterm" href="happy.html#ldapsetup">OpenLDAP Server Configuration</a></dt><dt>OpenOffice, <a class="indexterm" href="secure.html#ch4appscfg">Application Share Configuration</a></dt><dt>operating profiles, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt><dt>oplock break, <a class="indexterm" href="kerberos.html#id397932">Override Controls</a></dt><dt>oplocks, <a class="indexterm" href="HA.html#id403415">Samba Configuration</a></dt><dt>Oplocks</dt><dd><dl><dt>disabled, <a class="indexterm" href="appendix.html#id408086">Opportunistic Locking Controls</a></dt></dl></dd><dt>opportunistic</dt><dd><dl><dt>locking, <a class="indexterm" href="kerberos.html#id397932">Override Controls</a></dt></dl></dd><dt>opportunistic locking, <a class="indexterm" href="secure.html#id348344">Implementation</a>, <a class="indexterm" href="HA.html#id403415">Samba Configuration</a>, <a class="indexterm" href="appendix.html#id408011">Act! Database Sharing</a></dt><dt>optimized, <a class="indexterm" href="HA.html#id403415">Samba Configuration</a></dt><dt>organizational units, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt><dt>OS/2, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a></dt><dt>Outlook</dt><dd><dl><dt>PST, <a class="indexterm" href="happy.html#id368985">Configuration of MS Outlook to Relocate PST File</a></dt></dl></dd><dt>Outlook Address Book, <a class="indexterm" href="happy.html#id368985">Configuration of MS Outlook to Relocate PST File</a></dt><dt>Outlook Express, <a class="indexterm" href="secure.html#id348311">Political Issues</a>, <a class="indexterm" href="happy.html#id368985">Configuration of MS Outlook to Relocate PST File</a></dt><dt>over-ride, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>over-ride controls, <a class="indexterm" href="kerberos.html#id397932">Override Controls</a></dt><dt>over-rule, <a class="indexterm" href="kerberos.html#id397184">Share Access Controls</a>, <a class="indexterm" href="kerberos.html#id398771">Using MS Windows Explorer (File Manager)</a></dt><dt>overheads, <a class="indexterm" href="kerberos.html#id397932">Override Controls</a></dt><dt>ownership, <a class="indexterm" href="kerberos.html#id398076">Share Point Directory and File Permissions</a></dt></dl></div><div class="indexdiv"><h3>P</h3><dl><dt>package, <a class="indexterm" href="simple.html#id340832">Implementation</a></dt><dt>package names, <a class="indexterm" href="appendix.html#id405157">Samba System File Location</a></dt><dt>packages, <a class="indexterm" href="upgrades.html#id385712">Updating a Samba-3 Installation</a></dt><dt>PADL, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id381158">IDMAP Storage in LDAP using Winbind</a></dt><dt>PADL LDAP tools, <a class="indexterm" href="happy.html#id359614">Technical Issues</a></dt><dt>PADL Software, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>paid-for support, <a class="indexterm" href="ch14.html">Samba Support</a></dt><dt>PAM, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a>, <a class="indexterm" href="unixclients.html#id382025">UNIX/Linux Client Domain Member</a>, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>pam_ldap, <a class="indexterm" href="happy.html#ldapsetup">OpenLDAP Server Configuration</a></dt><dt>pam_ldap.so, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a></dt><dt>pam_unix2.so, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a></dt><dd><dl><dt>use_ldap, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a></dt></dl></dd><dt>parameters, <a class="indexterm" href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a></dt><dt>passdb backend, <a class="indexterm" href="secure.html#id348344">Implementation</a>, <a class="indexterm" href="Big500users.html">The 500-User Office</a>, <a class="indexterm" href="happy.html#id359212">Dissection and Discussion</a>, <a class="indexterm" href="2000users.html#id370476">Dissection and Discussion</a>, <a class="indexterm" href="2000users.html#id371556">Implementation</a>, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="upgrades.html">Updating Samba-3</a>, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a>, <a class="indexterm" href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a>, <a class="indexterm" href="upgrades.html#id385836">Updating from Samba Versions between 3.0.6 and 3.0.10</a>, <a class="indexterm" href="ntmigration.html#id386589">Assignment Tasks</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>passdb.tdb, <a class="indexterm" href="ntmigration.html#id386802">Technical Issues</a></dt><dt>passwd, <a class="indexterm" href="simple.html#id341634">Implementation</a>, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a>, <a class="indexterm" href="secure.html#id349099">Samba Configuration</a></dt><dt>password</dt><dd><dl><dt>backend, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#id349099">Samba Configuration</a>, <a class="indexterm" href="Big500users.html#id355127">Configuration for Server: MASSIVE</a></dt></dl></dd><dt>password caching, <a class="indexterm" href="simple.html#id341634">Implementation</a></dt><dt>password change, <a class="indexterm" href="kerberos.html#id399129">Key Points Learned</a></dt><dt>password length, <a class="indexterm" href="primer.html#id409728">Simple Windows Client Connection Characteristics</a>, <a class="indexterm" href="primer.html#id410194">Windows 200x/XP Client Interaction with Samba-3</a></dt><dt>payroll, <a class="indexterm" href="nw4migration.html#id390707">Introduction</a></dt><dt>pdbedit, <a class="indexterm" href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="happy.html#sbehap-bldg1">Samba-3 BDC Configuration</a>, <a class="indexterm" href="ntmigration.html#id389442">NT4 Migration Using tdbsam Backend</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>PDC, <a class="indexterm" href="Big500users.html#id353583">Assignment Tasks</a>, <a class="indexterm" href="Big500users.html#id353690">Technical Issues</a>, <a class="indexterm" href="happy.html">Making Happy Users</a>, <a class="indexterm" href="happy.html#id359614">Technical Issues</a>, <a class="indexterm" href="happy.html#sbehap-locgrppol">The Local Group Policy</a>, <a class="indexterm" href="2000users.html#id370835">The Nature of Windows Networking Protocols</a>, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a>, <a class="indexterm" href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a>, <a class="indexterm" href="ntmigration.html#id387125">Implementation</a>, <a class="indexterm" href="ntmigration.html#id387250">NT4 Migration Using LDAP Backend</a>, <a class="indexterm" href="ntmigration.html#id389442">NT4 Migration Using tdbsam Backend</a>, <a class="indexterm" href="HA.html#id403710">Use and Location of BDCs</a></dt><dt>PDC/BDC ratio, <a class="indexterm" href="happy.html">Making Happy Users</a></dt><dt>PDF, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt><dt>performance, <a class="indexterm" href="happy.html#id359212">Dissection and Discussion</a>, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a>, <a class="indexterm" href="HA.html">Performance, Reliability, and Availability</a>, <a class="indexterm" href="HA.html#id402421">Introduction</a>, <a class="indexterm" href="HA.html#id403325">Network Collisions</a></dt><dt>performance degradation, <a class="indexterm" href="kerberos.html#id397932">Override Controls</a>, <a class="indexterm" href="HA.html#id403415">Samba Configuration</a></dt><dt>Perl, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a>, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt><dt>permission, <a class="indexterm" href="kerberos.html#id398076">Share Point Directory and File Permissions</a></dt><dt>permissions, <a class="indexterm" href="simple.html#id341634">Implementation</a>, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id397184">Share Access Controls</a>, <a class="indexterm" href="kerberos.html#id397648">Checkpoint Controls</a>, <a class="indexterm" href="kerberos.html#id398076">Share Point Directory and File Permissions</a>, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></dt><dd><dl><dt>excessive, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>group, <a class="indexterm" href="kerberos.html#id398076">Share Point Directory and File Permissions</a></dt><dt>user, <a class="indexterm" href="kerberos.html#id398076">Share Point Directory and File Permissions</a></dt></dl></dd><dt>Permissions, <a class="indexterm" href="kerberos.html#id398494">Using the MMC Computer Management Interface</a></dt><dt>permits, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>permitted group, <a class="indexterm" href="kerberos.html#id398494">Using the MMC Computer Management Interface</a></dt><dt>PHP, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt><dt>PHP4, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt><dt>pile-driver, <a class="indexterm" href="kerberos.html#id397519">Share Definition Controls</a></dt><dt>ping, <a class="indexterm" href="secure.html#ch4valid">Validation</a></dt><dt>pitfalls, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt><dt>plain-text, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt><dt>Pluggable Authentication Modules (see PAM)</dt><dt>policy, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>poor performance, <a class="indexterm" href="HA.html#id402498">Dissection and Discussion</a></dt><dt>POP3, <a class="indexterm" href="nw4migration.html#id390984">Technical Issues</a></dt><dt>Posix, <a class="indexterm" href="simple.html#id341464">Dissection and Discussion</a>, <a class="indexterm" href="happy.html#id359614">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="ntmigration.html#id387125">Implementation</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a>, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt><dt>POSIX, <a class="indexterm" href="happy.html#id358884">Regarding LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>Posix accounts, <a class="indexterm" href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a></dt><dt>Posix ACLs, <a class="indexterm" href="kerberos.html#id398445">Managing Windows 200x ACLs</a></dt><dt>PosixAccount, <a class="indexterm" href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a></dt><dt>posixAccount, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>Postfix, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>Postscript, <a class="indexterm" href="happy.html#id360506">Installation of Printer Driver Auto-Download</a></dt><dt>powers, <a class="indexterm" href="kerberos.html#id397519">Share Definition Controls</a></dt><dt>practices, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>precaution, <a class="indexterm" href="upgrades.html#id383639">Introduction</a></dt><dt>presence and leadership, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>price paid, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>primary group, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="kerberos.html#id398076">Share Point Directory and File Permissions</a></dt><dt>principals, <a class="indexterm" href="kerberos.html#id396888">Kerberos Exposed</a></dt><dt>print filter, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#ch4ptrcfg">Printer Configuration</a>, <a class="indexterm" href="Big500users.html#id354601">Server Preparation: All Servers</a>, <a class="indexterm" href="happy.html#sbehap-ptrcfg">Printer Configuration</a></dt><dt>print queue, <a class="indexterm" href="simple.html#id341373">Charity Administration Office</a>, <a class="indexterm" href="simple.html#id341464">Dissection and Discussion</a></dt><dt>print spooler, <a class="indexterm" href="simple.html#id341373">Charity Administration Office</a></dt><dt>Print Test Page, <a class="indexterm" href="happy.html#id369439">Uploading Printer Drivers to Samba Servers</a></dt><dt>printcap name, <a class="indexterm" href="secure.html#id348344">Implementation</a></dt><dt>printer validation, <a class="indexterm" href="small.html#id346626">Validation</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a></dt><dt>printers</dt><dd><dl><dt>Advanced, <a class="indexterm" href="happy.html#id369439">Uploading Printer Drivers to Samba Servers</a></dt><dt>Default Settings, <a class="indexterm" href="happy.html#id369439">Uploading Printer Drivers to Samba Servers</a></dt><dt>General, <a class="indexterm" href="happy.html#id369439">Uploading Printer Drivers to Samba Servers</a></dt><dt>Properties, <a class="indexterm" href="happy.html#id369439">Uploading Printer Drivers to Samba Servers</a></dt><dt>Security, <a class="indexterm" href="happy.html#id369439">Uploading Printer Drivers to Samba Servers</a></dt><dt>Sharing, <a class="indexterm" href="happy.html#id369439">Uploading Printer Drivers to Samba Servers</a></dt></dl></dd><dt>printing, <a class="indexterm" href="secure.html#id348344">Implementation</a></dt><dd><dl><dt>drag-and-drop, <a class="indexterm" href="happy.html#id360506">Installation of Printer Driver Auto-Download</a>, <a class="indexterm" href="happy.html#id369439">Uploading Printer Drivers to Samba Servers</a></dt><dt>dumb, <a class="indexterm" href="happy.html#id360506">Installation of Printer Driver Auto-Download</a></dt><dt>point-n-click, <a class="indexterm" href="happy.html#id360506">Installation of Printer Driver Auto-Download</a></dt><dt>raw, <a class="indexterm" href="simple.html#id341464">Dissection and Discussion</a></dt></dl></dd><dt>privacy, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a></dt><dt>Privilege Attribute Certificates (see PAC)</dt><dt>privilege controls, <a class="indexterm" href="kerberos.html#id398076">Share Point Directory and File Permissions</a></dt><dt>privileged pipe, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a></dt><dt>privileges, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a>, <a class="indexterm" href="upgrades.html#id385909">Updating from Samba Versions after 3.0.6 to a Current Release</a>, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id397519">Share Definition Controls</a></dt><dt>problem report, <a class="indexterm" href="ch14.html#id404300">Free Support</a></dt><dt>problem resolution, <a class="indexterm" href="ch14.html">Samba Support</a></dt><dt>product defects, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>professional support, <a class="indexterm" href="ch14.html#id404300">Free Support</a></dt><dt>profile</dt><dd><dl><dt>default, <a class="indexterm" href="happy.html#id359084">Assignment Tasks</a></dt><dt>mandatory, <a class="indexterm" href="2000users.html#id370835">The Nature of Windows Networking Protocols</a></dt><dt>roaming, <a class="indexterm" href="happy.html">Making Happy Users</a></dt></dl></dd><dt>profile path, <a class="indexterm" href="ntmigration.html#id386802">Technical Issues</a></dt><dt>profile share, <a class="indexterm" href="secure.html#id348344">Implementation</a></dt><dt>profiles, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a></dt><dt>profiles share, <a class="indexterm" href="ntmigration.html#id386640">Dissection and Discussion</a></dt><dt>programmer, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>project, <a class="indexterm" href="ch14.html#id404300">Free Support</a></dt><dt>project maintainers, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>Properties, <a class="indexterm" href="kerberos.html#id398494">Using the MMC Computer Management Interface</a></dt><dt>proprietary, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>protected, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>protection, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>protocol</dt><dd><dl><dt>negotiation, <a class="indexterm" href="2000users.html#id370835">The Nature of Windows Networking Protocols</a></dt></dl></dd><dt>protocol analysis, <a class="indexterm" href="primer.html#id408228">Requirements and Notes</a></dt><dt>protocols, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>provided services, <a class="indexterm" href="ch14.html">Samba Support</a></dt><dt>proxy, <a class="indexterm" href="DomApps.html#id399862">Assignment Tasks</a>, <a class="indexterm" href="DomApps.html#id399977">Technical Issues</a></dt><dt>PST file, <a class="indexterm" href="happy.html#id368985">Configuration of MS Outlook to Relocate PST File</a></dt><dt>public specifications, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>purchase support, <a class="indexterm" href="ch14.html#id404300">Free Support</a></dt></dl></div><div class="indexdiv"><h3>Q</h3><dl><dt>Qbasic, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>qualified problem, <a class="indexterm" href="ch14.html#id404300">Free Support</a></dt></dl></div><div class="indexdiv"><h3>R</h3><dl><dt>RAID, <a class="indexterm" href="secure.html#id348190">Hardware Requirements</a></dt><dt>RAID controllers, <a class="indexterm" href="HA.html#id403932">Hardware Problems</a></dt><dt>Raw Print Through, <a class="indexterm" href="happy.html#id360506">Installation of Printer Driver Auto-Download</a></dt><dt>raw printing, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#ch4ptrcfg">Printer Configuration</a>, <a class="indexterm" href="Big500users.html#id354601">Server Preparation: All Servers</a>, <a class="indexterm" href="happy.html#sbehap-ptrcfg">Printer Configuration</a></dt><dt>Rbase, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>rcldap, <a class="indexterm" href="2000users.html#id371556">Implementation</a></dt><dt>realm, <a class="indexterm" href="unixclients.html#id380589">IDMAP_RID with Winbind</a>, <a class="indexterm" href="unixclients.html#id381158">IDMAP Storage in LDAP using Winbind</a>, <a class="indexterm" href="DomApps.html#id400370">Kerberos Configuration</a></dt><dt>recognize, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>record locking, <a class="indexterm" href="appendix.html#id407872">Microsoft Access</a></dt><dt>recursively, <a class="indexterm" href="kerberos.html#id398933">Setting Posix ACLs in UNIX/Linux</a></dt><dt>Red Hat, <a class="indexterm" href="simple.html#id340728">Drafting Office</a>, <a class="indexterm" href="nw4migration.html">Migrating NetWare Server to Samba-3</a></dt><dt>Red Hat Fedora Linux, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a></dt><dt>Red Hat Linux, <a class="indexterm" href="simple.html#id341464">Dissection and Discussion</a>, <a class="indexterm" href="simple.html#AccountingOffice">Accounting Office</a>, <a class="indexterm" href="happy.html#id361454">Samba Server Implementation</a>, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a>, <a class="indexterm" href="2000users.html#id371556">Implementation</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="DomApps.html#id400137">Implementation</a>, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a></dt><dt>redirected folders, <a class="indexterm" href="happy.html#id360094">Roaming Profile Background</a>, <a class="indexterm" href="2000users.html#id370835">The Nature of Windows Networking Protocols</a></dt><dt>refereed standards, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>regedit, <a class="indexterm" href="simple.html#id341634">Implementation</a></dt><dt>regedt32, <a class="indexterm" href="happy.html#id360364">Profile Changes</a>, <a class="indexterm" href="happy.html#redirfold">Configuration of Default Profile with Folder Redirection</a></dt><dt>registry, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dd><dl><dt>keys</dt><dd><dl><dt>SAM, <a class="indexterm" href="ntmigration.html#id386640">Dissection and Discussion</a></dt><dt>SECURITY, <a class="indexterm" href="ntmigration.html#id386640">Dissection and Discussion</a></dt></dl></dd></dl></dd><dt>registry change, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a></dt><dt>Registry Editor, <a class="indexterm" href="happy.html#redirfold">Configuration of Default Profile with Folder Redirection</a></dt><dt>registry hacks, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a></dt><dt>registry keys, <a class="indexterm" href="happy.html#redirfold">Configuration of Default Profile with Folder Redirection</a></dt><dt>reimburse, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>rejected, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="kerberos.html#id397184">Share Access Controls</a></dt><dt>rejoin, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>reliability, <a class="indexterm" href="HA.html">Performance, Reliability, and Availability</a></dt><dt>remote announce, <a class="indexterm" href="HA.html#id403161">Routed Networks</a></dt><dt>remote browse sync, <a class="indexterm" href="HA.html#id403161">Routed Networks</a></dt><dt>remote procedure call (see RPC)</dt><dt>replicate, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="HA.html#id403891">Replicate Data to Conserve Peak-Demand Wide-Area Bandwidth</a></dt><dt>replicated, <a class="indexterm" href="2000users.html#id370476">Dissection and Discussion</a></dt><dt>requesting payment, <a class="indexterm" href="ch14.html#id404300">Free Support</a></dt><dt>resilient, <a class="indexterm" href="HA.html#id402949">Guidelines for Reliable Samba Operation</a></dt><dt>resolution, <a class="indexterm" href="upgrades.html#id386001">Replacing a Domain Member Server</a></dt><dt>resolve, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a>, <a class="indexterm" href="HA.html#id402984">Bad Hostnames</a></dt><dt>response, <a class="indexterm" href="unixclients.html#id380589">IDMAP_RID with Winbind</a></dt><dt>responsibility, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>responsible, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>restrict anonymous, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>restricted export, <a class="indexterm" href="kerberos.html#id396888">Kerberos Exposed</a></dt><dt>Restrictive security, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></dt><dt>reverse DNS, <a class="indexterm" href="DomApps.html#id400370">Kerberos Configuration</a></dt><dt>rfc2307bis, <a class="indexterm" href="unixclients.html#id381708">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a></dt><dt>RID, <a class="indexterm" href="unixclients.html#id380589">IDMAP_RID with Winbind</a>, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>risk, <a class="indexterm" href="secure.html#id347966">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>road-map, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dd><dl><dt>published, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt></dl></dd><dt>roaming profile, <a class="indexterm" href="happy.html#id359614">Technical Issues</a>, <a class="indexterm" href="happy.html#id360094">Roaming Profile Background</a>, <a class="indexterm" href="happy.html#id367829">Configuring Profile Directories</a>, <a class="indexterm" href="2000users.html#id370759">User Needs</a>, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a></dt><dt>roaming profiles, <a class="indexterm" href="secure.html#id347966">Technical Issues</a>, <a class="indexterm" href="secure.html#id348344">Implementation</a>, <a class="indexterm" href="happy.html#id360094">Roaming Profile Background</a></dt><dt>routed network, <a class="indexterm" href="HA.html#id403710">Use and Location of BDCs</a></dt><dt>router, <a class="indexterm" href="small.html#id345178">Implementation</a></dt><dt>routers, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a>, <a class="indexterm" href="HA.html#id403161">Routed Networks</a></dt><dt>RPC, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="kerberos.html#id396888">Kerberos Exposed</a></dt><dt>rpc, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a></dt><dt>rpcclient, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a></dt><dt>RPM, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a>, <a class="indexterm" href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a>, <a class="indexterm" href="nw4migration.html#id390913">Dissection and Discussion</a></dt><dd><dl><dt>install, <a class="indexterm" href="simple.html#id340832">Implementation</a></dt></dl></dd><dt>rpm, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a>, <a class="indexterm" href="appendix.html#id405157">Samba System File Location</a></dt><dt>RPMs, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a></dt><dt>rpms, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></dt><dt>rsync, <a class="indexterm" href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a>, <a class="indexterm" href="HA.html#id403891">Replicate Data to Conserve Peak-Demand Wide-Area Bandwidth</a></dt><dt>rsyncd.conf, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>run-time control files, <a class="indexterm" href="appendix.html#id405157">Samba System File Location</a></dt></dl></div><div class="indexdiv"><h3>S</h3><dl><dt>safe-guards, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>SAM, <a class="indexterm" href="ntmigration.html#id386640">Dissection and Discussion</a></dt><dt>samba, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></dt><dd><dl><dt>starting samba, <a class="indexterm" href="simple.html#id340832">Implementation</a></dt></dl></dd><dt>Samba, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a></dt><dt>Samba accounts, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a></dt><dt>samba cluster, <a class="indexterm" href="HA.html#id402421">Introduction</a></dt><dt>samba control script, <a class="indexterm" href="appendix.html#id405549">Starting Samba</a></dt><dt>Samba Domain, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>Samba Domain server, <a class="indexterm" href="kerberos.html#id398494">Using the MMC Computer Management Interface</a></dt><dt>Samba RPM Packages, <a class="indexterm" href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a></dt><dt>Samba Tea, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a></dt><dt>sambaDomainName, <a class="indexterm" href="ntmigration.html#id387250">NT4 Migration Using LDAP Backend</a></dt><dt>sambaGroupMapping, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>SambaSAMAccount, <a class="indexterm" href="happy.html#id358884">Regarding LDAP Directories and Windows Computer Accounts</a></dt><dt>SambaSamAccount, <a class="indexterm" href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a></dt><dt>sambaSamAccount, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>SambaXP conference, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt><dt>SAN, <a class="indexterm" href="HA.html#id403795">For Scalability, Use SAN-Based Storage on Samba Servers</a></dt><dt>SAS, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a></dt><dt>scalability, <a class="indexterm" href="HA.html#id402421">Introduction</a></dt><dt>scalable, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a></dt><dt>schannel, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id399129">Key Points Learned</a>, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a></dt><dt>schema, <a class="indexterm" href="unixclients.html#id381708">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="upgrades.html#id385597">Samba-2.x with LDAP Support</a>, <a class="indexterm" href="upgrades.html#id385836">Updating from Samba Versions between 3.0.6 and 3.0.10</a></dt><dt>scripts, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt><dt>secondary group, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></dt><dt>secret, <a class="indexterm" href="kerberos.html#id396888">Kerberos Exposed</a></dt><dt>secrets.tdb, <a class="indexterm" href="happy.html#id359614">Technical Issues</a>, <a class="indexterm" href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a>, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a>, <a class="indexterm" href="upgrades.html#sbeug1">Location of config files</a></dt><dt>secure, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>secure account password, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>secure connections, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt><dt>secure networking, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>secure networking protocols, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>security, <a class="indexterm" href="happy.html#id359614">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a>, <a class="indexterm" href="kerberos.html#id394729">Introduction</a>, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id398076">Share Point Directory and File Permissions</a>, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a></dt><dd><dl><dt>identifier, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a></dt><dt>share mode, <a class="indexterm" href="simple.html#id341464">Dissection and Discussion</a></dt><dt>user mode, <a class="indexterm" href="simple.html#id343378">Dissection and Discussion</a></dt></dl></dd><dt>Security, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id398494">Using the MMC Computer Management Interface</a></dt><dt>Security Account Manager (see SAM)</dt><dt>security controls, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>security descriptors, <a class="indexterm" href="ntmigration.html#id386640">Dissection and Discussion</a></dt><dt>security fixes, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>security updates, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>SerNet, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a></dt><dt>server</dt><dd><dl><dt>domain member, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a></dt><dt>stand-alone, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a></dt></dl></dd><dt>service, <a class="indexterm" href="2000users.html#id371556">Implementation</a></dt><dd><dl><dt>smb</dt><dd><dl><dt>start, <a class="indexterm" href="Big500users.html#ch5-domsvrspec">Configuration Specific to Domain Member Servers: BLDG1, BLDG2</a></dt></dl></dd></dl></dd><dt>Service Packs, <a class="indexterm" href="secure.html#ch4appscfg">Application Share Configuration</a></dt><dt>services, <a class="indexterm" href="DomApps.html#id401888">Key Points Learned</a></dt><dt>services provided, <a class="indexterm" href="ch14.html">Samba Support</a></dt><dt>session setup, <a class="indexterm" href="primer.html#id409728">Simple Windows Client Connection Characteristics</a>, <a class="indexterm" href="primer.html#id410194">Windows 200x/XP Client Interaction with Samba-3</a></dt><dt>Session Setup, <a class="indexterm" href="primer.html#id409728">Simple Windows Client Connection Characteristics</a></dt><dt>SessionSetUpAndX, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a></dt><dt>set primary group script, <a class="indexterm" href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a></dt><dt>setfacl, <a class="indexterm" href="kerberos.html#id398933">Setting Posix ACLs in UNIX/Linux</a></dt><dt>severely degrade, <a class="indexterm" href="HA.html#id403415">Samba Configuration</a></dt><dt>SFU, <a class="indexterm" href="unixclients.html#id381980">IDMAP, Active Directory, and MS Services for UNIX 3.5</a></dt><dt>SGID, <a class="indexterm" href="simple.html#id341464">Dissection and Discussion</a>, <a class="indexterm" href="kerberos.html#id398076">Share Point Directory and File Permissions</a>, <a class="indexterm" href="appendix.html#ch12-SUIDSGID">Effect of Setting File and Directory SUID/SGID Permissions Explained</a></dt><dt>shadow-utils, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>Share Access Controls, <a class="indexterm" href="kerberos.html#id397184">Share Access Controls</a></dt><dt>share ACLs, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a></dt><dt>share definition, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>Share Definition</dt><dd><dl><dt>Controls, <a class="indexterm" href="kerberos.html#id397519">Share Definition Controls</a></dt></dl></dd><dt>share definition controls, <a class="indexterm" href="kerberos.html#id397519">Share Definition Controls</a>, <a class="indexterm" href="kerberos.html#id397648">Checkpoint Controls</a>, <a class="indexterm" href="kerberos.html#id398076">Share Point Directory and File Permissions</a>, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a></dt><dt>share level access controls, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a></dt><dt>share level ACL, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a></dt><dt>Share Permissions, <a class="indexterm" href="kerberos.html#id397184">Share Access Controls</a></dt><dt>shared resource, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id398933">Setting Posix ACLs in UNIX/Linux</a></dt><dt>shares, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>SID, <a class="indexterm" href="secure.html#ch4wincfg">Windows Client Configuration</a>, <a class="indexterm" href="happy.html#id358884">Regarding LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a>, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id380589">IDMAP_RID with Winbind</a>, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a>, <a class="indexterm" href="upgrades.html#id384544">Change of Workgroup (Domain) Name</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a>, <a class="indexterm" href="appendix.html#id406053">Initialization of the LDAP Database</a></dt><dt>side effects, <a class="indexterm" href="kerberos.html#id398445">Managing Windows 200x ACLs</a></dt><dt>Sign'n'seal, <a class="indexterm" href="kerberos.html#id399129">Key Points Learned</a>, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a></dt><dt>silent return, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></dt><dt>simple, <a class="indexterm" href="HA.html#id402498">Dissection and Discussion</a></dt><dt>Single Sign-On (see SSO)</dt><dt>slapcat, <a class="indexterm" href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>slapd, <a class="indexterm" href="happy.html#id360837">Debugging LDAP</a></dt><dt>slapd.conf, <a class="indexterm" href="ntmigration.html#id387250">NT4 Migration Using LDAP Backend</a></dt><dt>slave, <a class="indexterm" href="2000users.html#id370476">Dissection and Discussion</a></dt><dt>slow logon, <a class="indexterm" href="happy.html">Making Happy Users</a></dt><dt>slow network, <a class="indexterm" href="HA.html#id403932">Hardware Problems</a></dt><dt>slurpd, <a class="indexterm" href="2000users.html#id371556">Implementation</a>, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a></dt><dt>smart printing, <a class="indexterm" href="happy.html#id359212">Dissection and Discussion</a></dt><dt>SMB, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a></dt><dt>SMB passwords, <a class="indexterm" href="2000users.html#id371556">Implementation</a></dt><dt>SMB/CIFS, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt><dt>smbclient, <a class="indexterm" href="simple.html#validate1">Validation</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a>, <a class="indexterm" href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt><dt>smbd, <a class="indexterm" href="simple.html#validate1">Validation</a>, <a class="indexterm" href="simple.html#id341634">Implementation</a>, <a class="indexterm" href="small.html#id346626">Validation</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a>, <a class="indexterm" href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a>, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a>, <a class="indexterm" href="upgrades.html#sbeug1">Location of config files</a>, <a class="indexterm" href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a>, <a class="indexterm" href="upgrades.html#id386001">Replacing a Domain Member Server</a>, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a>, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a>, <a class="indexterm" href="appendix.html#id405549">Starting Samba</a></dt><dd><dl><dt>location of files, <a class="indexterm" href="appendix.html#id405157">Samba System File Location</a></dt></dl></dd><dt>smbfs, <a class="indexterm" href="HA.html#id402498">Dissection and Discussion</a></dt><dt>smbldap-groupadd, <a class="indexterm" href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>smbldap-groupmod, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>smbldap-passwd, <a class="indexterm" href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a></dt><dt>smbldap-populate, <a class="indexterm" href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a></dt><dt>smbldap-tools, <a class="indexterm" href="ntmigration.html#id387250">NT4 Migration Using LDAP Backend</a>, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a>, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt><dt>smbldap-tools updating, <a class="indexterm" href="ntmigration.html#id387250">NT4 Migration Using LDAP Backend</a></dt><dt>smbldap-useradd, <a class="indexterm" href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="2000users.html#id371556">Implementation</a></dt><dt>smbldap-usermod, <a class="indexterm" href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>smbmnt, <a class="indexterm" href="HA.html#id402498">Dissection and Discussion</a></dt><dt>smbmount, <a class="indexterm" href="HA.html#id402498">Dissection and Discussion</a></dt><dt>smbpasswd, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a>, <a class="indexterm" href="small.html#id344988">Technical Issues</a>, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#id347966">Technical Issues</a>, <a class="indexterm" href="secure.html#id349099">Samba Configuration</a>, <a class="indexterm" href="Big500users.html#id354601">Server Preparation: All Servers</a>, <a class="indexterm" href="Big500users.html#id355127">Configuration for Server: MASSIVE</a>, <a class="indexterm" href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a>, <a class="indexterm" href="happy.html#id364093">LDAP Initialization and Creation of User and Group Accounts</a>, <a class="indexterm" href="happy.html#sbehap-bldg1">Samba-3 BDC Configuration</a>, <a class="indexterm" href="2000users.html#id370476">Dissection and Discussion</a>, <a class="indexterm" href="2000users.html#id371556">Implementation</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="upgrades.html">Updating Samba-3</a>, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a>, <a class="indexterm" href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a>, <a class="indexterm" href="ntmigration.html#id386802">Technical Issues</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a>, <a class="indexterm" href="DomApps.html">Integrating Additional Services</a></dt><dt>smbumnt, <a class="indexterm" href="HA.html#id402498">Dissection and Discussion</a></dt><dt>smbumount, <a class="indexterm" href="HA.html#id402498">Dissection and Discussion</a></dt><dt>SMTP, <a class="indexterm" href="nw4migration.html#id390984">Technical Issues</a></dt><dt>snap-shot, <a class="indexterm" href="ntmigration.html#id386640">Dissection and Discussion</a></dt><dt>socket address, <a class="indexterm" href="HA.html#id403415">Samba Configuration</a></dt><dt>socket options, <a class="indexterm" href="HA.html#id403415">Samba Configuration</a></dt><dt>software, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>solve, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>source code, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>SPNEGO, <a class="indexterm" href="primer.html#id410194">Windows 200x/XP Client Interaction with Samba-3</a></dt><dt>SQL, <a class="indexterm" href="2000users.html#id370476">Dissection and Discussion</a>, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a></dt><dt>Squid, <a class="indexterm" href="DomApps.html#id400137">Implementation</a>, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a>, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a>, <a class="indexterm" href="DomApps.html#id401512">Squid Configuration</a></dt><dt>squid, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a>, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a></dt><dt>Squid proxy, <a class="indexterm" href="DomApps.html#id399977">Technical Issues</a></dt><dt>SRVTOOLS.EXE, <a class="indexterm" href="secure.html#id348344">Implementation</a>, <a class="indexterm" href="happy.html#id367829">Configuring Profile Directories</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a></dt><dt>SSL, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt><dt>stand-alone server, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a></dt><dt>starting CUPS, <a class="indexterm" href="simple.html#id341634">Implementation</a>, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#procstart">Process Startup Configuration</a>, <a class="indexterm" href="Big500users.html#ch5-procstart">Process Startup Configuration</a></dt><dt>starting dhcpd, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#procstart">Process Startup Configuration</a>, <a class="indexterm" href="Big500users.html#ch5-procstart">Process Startup Configuration</a></dt><dt>starting samba, <a class="indexterm" href="simple.html#id340832">Implementation</a>, <a class="indexterm" href="simple.html#id341634">Implementation</a>, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a>, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#procstart">Process Startup Configuration</a>, <a class="indexterm" href="Big500users.html#ch5-procstart">Process Startup Configuration</a></dt><dd><dl><dt>nmbd, <a class="indexterm" href="appendix.html#id405549">Starting Samba</a></dt><dt>smbd, <a class="indexterm" href="appendix.html#id405549">Starting Samba</a></dt><dt>winbindd, <a class="indexterm" href="appendix.html#id405549">Starting Samba</a></dt></dl></dd><dt>startingCUPS, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a></dt><dt>startup script, <a class="indexterm" href="appendix.html#id405549">Starting Samba</a></dt><dt>sticky bit, <a class="indexterm" href="small.html#id345178">Implementation</a></dt><dt>storage capacity, <a class="indexterm" href="secure.html#id348190">Hardware Requirements</a></dt><dt>strategic, <a class="indexterm" href="ntmigration.html#id386802">Technical Issues</a></dt><dt>strategy, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>straw-man, <a class="indexterm" href="kerberos.html">Active Directory, Kerberos, and Security</a></dt><dt>strict sync, <a class="indexterm" href="HA.html#id403415">Samba Configuration</a></dt><dt>stripped, <a class="indexterm" href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a></dt><dt>strong cryptography, <a class="indexterm" href="kerberos.html#id396888">Kerberos Exposed</a></dt><dt>subscription, <a class="indexterm" href="ch14.html#id404300">Free Support</a></dt><dt>SUID, <a class="indexterm" href="simple.html#id341464">Dissection and Discussion</a>, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a>, <a class="indexterm" href="appendix.html#ch12-SUIDSGID">Effect of Setting File and Directory SUID/SGID Permissions Explained</a></dt><dt>Sun ONE Identity Server, <a class="indexterm" href="happy.html#id359212">Dissection and Discussion</a></dt><dt>super daemon, <a class="indexterm" href="secure.html#procstart">Process Startup Configuration</a></dt><dt>support, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a>, <a class="indexterm" href="ch14.html">Samba Support</a></dt><dt>survey, <a class="indexterm" href="unixclients.html">Adding Domain Member Servers and Clients</a></dt><dt>SUSE, <a class="indexterm" href="nw4migration.html">Migrating NetWare Server to Samba-3</a></dt><dt>SUSE Enterprise Linux Server, <a class="indexterm" href="simple.html#id341373">Charity Administration Office</a>, <a class="indexterm" href="secure.html#ch4bsc">Basic System Configuration</a>, <a class="indexterm" href="DomApps.html#id400137">Implementation</a></dt><dt>SUSE Linux, <a class="indexterm" href="simple.html#id341464">Dissection and Discussion</a>, <a class="indexterm" href="happy.html#id361454">Samba Server Implementation</a>, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a>, <a class="indexterm" href="2000users.html#id371556">Implementation</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="DomApps.html#id400137">Implementation</a>, <a class="indexterm" href="DomApps.html#ch10-one">Removal of Pre-Existing Conflicting RPMs</a></dt><dt>SWAT, <a class="indexterm" href="appendix.html#id405157">Samba System File Location</a></dt><dt>sync always, <a class="indexterm" href="HA.html#id403415">Samba Configuration</a></dt><dt>synchronization, <a class="indexterm" href="DomApps.html#id400370">Kerberos Configuration</a>, <a class="indexterm" href="HA.html#id403795">For Scalability, Use SAN-Based Storage on Samba Servers</a></dt><dt>synchronize, <a class="indexterm" href="2000users.html#id370759">User Needs</a>, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>synchronized, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>syslog, <a class="indexterm" href="happy.html#ldapsetup">OpenLDAP Server Configuration</a></dt><dt>system level logins, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>system security, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt></dl></div><div class="indexdiv"><h3>T</h3><dl><dt>tattooing, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>TCP/IP, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>tdbdump, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="ntmigration.html#id387250">NT4 Migration Using LDAP Backend</a></dt><dt>tdbsam, <a class="indexterm" href="secure.html#id347966">Technical Issues</a>, <a class="indexterm" href="secure.html#id348344">Implementation</a>, <a class="indexterm" href="Big500users.html">The 500-User Office</a>, <a class="indexterm" href="happy.html#id359084">Assignment Tasks</a>, <a class="indexterm" href="2000users.html#id370476">Dissection and Discussion</a>, <a class="indexterm" href="2000users.html#id371556">Implementation</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a>, <a class="indexterm" href="upgrades.html#id385836">Updating from Samba Versions between 3.0.6 and 3.0.10</a>, <a class="indexterm" href="ntmigration.html#id386802">Technical Issues</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>testparm, <a class="indexterm" href="small.html#id346626">Validation</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a>, <a class="indexterm" href="happy.html#sbehap-massive">Samba-3 PDC Configuration</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a>, <a class="indexterm" href="HA.html#id403415">Samba Configuration</a></dt><dt>ticket, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a></dt><dt>time server, <a class="indexterm" href="secure.html#id348344">Implementation</a></dt><dt>Tivoli Directory Server, <a class="indexterm" href="happy.html#id359212">Dissection and Discussion</a></dt><dt>TLS, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>token, <a class="indexterm" href="DomApps.html#id399977">Technical Issues</a></dt><dt>tool, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>TOSHARG2, <a class="indexterm" href="simple.html#id341634">Implementation</a></dt><dt>track record, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>traffic collisions, <a class="indexterm" href="happy.html">Making Happy Users</a></dt><dt>transaction processing, <a class="indexterm" href="2000users.html#id370476">Dissection and Discussion</a></dt><dt>transactional, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a></dt><dt>transfer, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>translate, <a class="indexterm" href="kerberos.html#id398445">Managing Windows 200x ACLs</a></dt><dt>traverse, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a></dt><dt>tree, <a class="indexterm" href="nw4migration.html#id390913">Dissection and Discussion</a></dt><dt>Tree Connect, <a class="indexterm" href="primer.html#id409728">Simple Windows Client Connection Characteristics</a></dt><dt>trust account, <a class="indexterm" href="happy.html#id358884">Regarding LDAP Directories and Windows Computer Accounts</a></dt><dt>trusted computing, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>Trusted Domains, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a></dt><dt>trusted domains, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>trusted third-party, <a class="indexterm" href="kerberos.html#id396888">Kerberos Exposed</a></dt><dt>trusting, <a class="indexterm" href="kerberos.html#id396888">Kerberos Exposed</a></dt><dt>turn-around time, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt></dl></div><div class="indexdiv"><h3>U</h3><dl><dt>UDP</dt><dd><dl><dt>broadcast, <a class="indexterm" href="HA.html#id403161">Routed Networks</a></dt></dl></dd><dt>UID, <a class="indexterm" href="simple.html#id341464">Dissection and Discussion</a>, <a class="indexterm" href="happy.html#id358884">Regarding LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="happy.html#id359614">Technical Issues</a>, <a class="indexterm" href="2000users.html#id371556">Implementation</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>un-join, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>unauthorized activities, <a class="indexterm" href="kerberos.html#id396888">Kerberos Exposed</a></dt><dt>UNC name, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a></dt><dt>unencrypted, <a class="indexterm" href="appendix.html#id406519">The LDAP Account Manager</a></dt><dt>Unicast, <a class="indexterm" href="2000users.html#id370835">The Nature of Windows Networking Protocols</a></dt><dt>unicode, <a class="indexterm" href="upgrades.html#id384787">International Language Support</a></dt><dt>Universal Naming Convention (see UNC name)</dt><dt>UNIX, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dd><dl><dt>groups, <a class="indexterm" href="small.html#id344988">Technical Issues</a>, <a class="indexterm" href="small.html#id345178">Implementation</a></dt></dl></dd><dt>UNIX accounts, <a class="indexterm" href="happy.html#id359614">Technical Issues</a></dt><dt>UNIX/Linux server, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>unix2dos, <a class="indexterm" href="secure.html#id349099">Samba Configuration</a>, <a class="indexterm" href="Big500users.html#id355127">Configuration for Server: MASSIVE</a></dt><dt>unknown, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>unsupported software, <a class="indexterm" href="ch14.html#id404499">Commercial Support</a></dt><dt>update, <a class="indexterm" href="upgrades.html#id383639">Introduction</a>, <a class="indexterm" href="upgrades.html#id383722">Cautions and Notes</a></dt><dt>updates, <a class="indexterm" href="kerberos.html#id394729">Introduction</a>, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>updating smbldap-tools, <a class="indexterm" href="ntmigration.html#id387250">NT4 Migration Using LDAP Backend</a></dt><dt>upgrade, <a class="indexterm" href="upgrades.html#id383639">Introduction</a>, <a class="indexterm" href="upgrades.html#id383722">Cautions and Notes</a>, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>uppercase, <a class="indexterm" href="ntmigration.html#id387125">Implementation</a></dt><dt>user</dt><dd><dl><dt>management, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#id349099">Samba Configuration</a>, <a class="indexterm" href="Big500users.html#id355127">Configuration for Server: MASSIVE</a></dt></dl></dd><dt>user account, <a class="indexterm" href="happy.html">Making Happy Users</a>, <a class="indexterm" href="happy.html#ldapsetup">OpenLDAP Server Configuration</a></dt><dt>User and Group Controls, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>user credentials, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a>, <a class="indexterm" href="unixclients.html#id382025">UNIX/Linux Client Domain Member</a></dt><dt>user errors, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>user groups, <a class="indexterm" href="ch14.html#id404300">Free Support</a></dt><dt>user identities, <a class="indexterm" href="unixclients.html#id376274">Implementation</a></dt><dt>user logins, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>user management, <a class="indexterm" href="secure.html#id348344">Implementation</a></dt><dt>User Manager, <a class="indexterm" href="ntmigration.html#id387250">NT4 Migration Using LDAP Backend</a></dt><dt>User Mode, <a class="indexterm" href="secure.html#id348344">Implementation</a>, <a class="indexterm" href="primer.html#id409728">Simple Windows Client Connection Characteristics</a>, <a class="indexterm" href="primer.html#id410194">Windows 200x/XP Client Interaction with Samba-3</a></dt><dt>useradd, <a class="indexterm" href="simple.html#id341634">Implementation</a>, <a class="indexterm" href="simple.html#AcctgNet">Implementation</a>, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#id349099">Samba Configuration</a>, <a class="indexterm" href="Big500users.html#id355127">Configuration for Server: MASSIVE</a>, <a class="indexterm" href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a></dt><dt>userdel, <a class="indexterm" href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a></dt><dt>usermod, <a class="indexterm" href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a>, <a class="indexterm" href="ntmigration.html#id387250">NT4 Migration Using LDAP Backend</a></dt><dt>username, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a></dt><dt>username map, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#id349099">Samba Configuration</a>, <a class="indexterm" href="Big500users.html#id354601">Server Preparation: All Servers</a></dt><dt>UTF-8, <a class="indexterm" href="upgrades.html#id384787">International Language Support</a></dt><dt>utilities, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt></dl></div><div class="indexdiv"><h3>V</h3><dl><dt>valid users, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id397648">Checkpoint Controls</a>, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a></dt><dt>validate, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id397648">Checkpoint Controls</a></dt><dt>validated, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>validation, <a class="indexterm" href="simple.html#validate1">Validation</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a>, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt><dt>vampire, <a class="indexterm" href="ntmigration.html#id389822">Questions and Answers</a></dt><dt>vendor, <a class="indexterm" href="kerberos.html#id395330">Dissection and Discussion</a></dt><dt>vendors, <a class="indexterm" href="upgrades.html#id385712">Updating a Samba-3 Installation</a></dt><dt>VFS modules, <a class="indexterm" href="appendix.html#id405157">Samba System File Location</a></dt><dt>virus, <a class="indexterm" href="secure.html#id348344">Implementation</a></dt><dt>VPN, <a class="indexterm" href="2000users.html#id370419">Assignment Tasks</a></dt><dt>vulnerabilities, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt></dl></div><div class="indexdiv"><h3>W</h3><dl><dt>wbinfo, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a>, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a></dt><dt>weakness, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a></dt><dt>web</dt><dd><dl><dt>caching, <a class="indexterm" href="DomApps.html#id399862">Assignment Tasks</a></dt><dt>proxying, <a class="indexterm" href="DomApps.html#id399862">Assignment Tasks</a></dt></dl></dd><dt>Web</dt><dd><dl><dt>proxy, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt><dd><dl><dt>access, <a class="indexterm" href="DomApps.html#id401888">Key Points Learned</a></dt></dl></dd></dl></dd><dt>Web browsers, <a class="indexterm" href="DomApps.html#id401888">Key Points Learned</a></dt><dt>WebClient, <a class="indexterm" href="happy.html">Making Happy Users</a></dt><dt>WHATSNEW.txt, <a class="indexterm" href="upgrades.html#id385597">Samba-2.x with LDAP Support</a></dt><dt>white-pages, <a class="indexterm" href="nw4migration.html#id390984">Technical Issues</a>, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>wide-area, <a class="indexterm" href="2000users.html#id370759">User Needs</a>, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a>, <a class="indexterm" href="2000users.html#id374570">Key Points Learned</a>, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a></dt><dt>wide-area network, <a class="indexterm" href="HA.html#id403710">Use and Location of BDCs</a>, <a class="indexterm" href="HA.html#id403891">Replicate Data to Conserve Peak-Demand Wide-Area Bandwidth</a></dt><dt>winbind, <a class="indexterm" href="2000users.html#id371556">Implementation</a>, <a class="indexterm" href="unixclients.html#id375566">Dissection and Discussion</a>, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id394729">Introduction</a>, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a>, <a class="indexterm" href="DomApps.html#id399977">Technical Issues</a>, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a>, <a class="indexterm" href="DomApps.html#id401255">NSS Configuration</a></dt><dt>Winbind, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="kerberos.html#id395699">Technical Issues</a>, <a class="indexterm" href="kerberos.html#id399129">Key Points Learned</a></dt><dt>winbind trusted domains only, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>winbind use default domain, <a class="indexterm" href="kerberos.html#id397648">Checkpoint Controls</a></dt><dt>winbindd, <a class="indexterm" href="small.html#id346626">Validation</a>, <a class="indexterm" href="secure.html#ch4valid">Validation</a>, <a class="indexterm" href="Big500users.html#id353690">Technical Issues</a>, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a>, <a class="indexterm" href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a>, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a>, <a class="indexterm" href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a>, <a class="indexterm" href="upgrades.html#id385909">Updating from Samba Versions after 3.0.6 to a Current Release</a>, <a class="indexterm" href="upgrades.html#id386001">Replacing a Domain Member Server</a>, <a class="indexterm" href="DomApps.html#id400733">Samba Configuration</a>, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a>, <a class="indexterm" href="appendix.html#id405549">Starting Samba</a></dt><dt>winbindd_cache.tdb, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a></dt><dt>winbindd_idmap.tdb, <a class="indexterm" href="unixclients.html#id375589">Technical Issues</a></dt><dt>Windows, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dd><dl><dt>client, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a></dt><dt>NT, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a></dt></dl></dd><dt>Windows 2000 ACLs, <a class="indexterm" href="kerberos.html#id398445">Managing Windows 200x ACLs</a></dt><dt>Windows 2003 Serve, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>Windows 200x ACLs, <a class="indexterm" href="kerberos.html#id399251">Questions and Answers</a></dt><dt>Windows accounts, <a class="indexterm" href="happy.html#id359614">Technical Issues</a></dt><dt>Windows ACLs, <a class="indexterm" href="kerberos.html#id398933">Setting Posix ACLs in UNIX/Linux</a></dt><dt>Windows Address Book, <a class="indexterm" href="nw4migration.html#id391232">LDAP Server Configuration</a></dt><dt>Windows ADS Domain, <a class="indexterm" href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a></dt><dt>Windows clients, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt><dt>Windows Explorer, <a class="indexterm" href="simple.html#validate1">Validation</a></dt><dt>Windows explorer, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt><dt>Windows security identifier (see SID)</dt><dt>Windows Servers, <a class="indexterm" href="kerberos.html#id394729">Introduction</a></dt><dt>Windows Services for UNIX (see SUS)</dt><dt>Windows XP, <a class="indexterm" href="small.html#id344898">Assignment Tasks</a></dt><dt>WINS, <a class="indexterm" href="simple.html#id341634">Implementation</a>, <a class="indexterm" href="small.html#id344988">Technical Issues</a>, <a class="indexterm" href="small.html#id345178">Implementation</a>, <a class="indexterm" href="secure.html#ch4wincfg">Windows Client Configuration</a>, <a class="indexterm" href="Big500users.html#id353690">Technical Issues</a>, <a class="indexterm" href="Big500users.html#ch5wincfg">Windows Client Configuration</a>, <a class="indexterm" href="2000users.html#id370835">The Nature of Windows Networking Protocols</a>, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a>, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a>, <a class="indexterm" href="primer.html#chap01qa">Questions and Answers</a></dt><dd><dl><dt>lookup, <a class="indexterm" href="unixclients.html#id382565">Questions and Answers</a></dt><dt>name resolution, <a class="indexterm" href="HA.html#id403161">Routed Networks</a></dt><dt>server, <a class="indexterm" href="happy.html">Making Happy Users</a>, <a class="indexterm" href="HA.html#id403161">Routed Networks</a></dt></dl></dd><dt>WINS server, <a class="indexterm" href="Big500users.html">The 500-User Office</a>, <a class="indexterm" href="2000users.html#id374709">Questions and Answers</a></dt><dt>WINS serving, <a class="indexterm" href="secure.html#id348344">Implementation</a></dt><dt>wins support, <a class="indexterm" href="secure.html#id348344">Implementation</a></dt><dt>wins.dat, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a>, <a class="indexterm" href="upgrades.html#id386001">Replacing a Domain Member Server</a></dt><dt>Wireshark, <a class="indexterm" href="primer.html#id408228">Requirements and Notes</a></dt><dt>wireshark, <a class="indexterm" href="primer.html#id408521">Exercises</a></dt><dt>Word, <a class="indexterm" href="kerberos.html#id398076">Share Point Directory and File Permissions</a></dt><dt>workgroup, <a class="indexterm" href="simple.html#id340832">Implementation</a>, <a class="indexterm" href="upgrades.html#id383812">Security Identifiers (SIDs)</a>, <a class="indexterm" href="upgrades.html#id384544">Change of Workgroup (Domain) Name</a></dt><dt>Workgroup Announcement, <a class="indexterm" href="primer.html#id409382">Findings</a></dt><dt>workstation, <a class="indexterm" href="unixclients.html#id376274">Implementation</a></dt><dt>wrapper, <a class="indexterm" href="DomApps.html#id401943">Questions and Answers</a></dt><dt>write lock, <a class="indexterm" href="appendix.html#id408086">Opportunistic Locking Controls</a></dt></dl></div><div class="indexdiv"><h3>X</h3><dl><dt>xinetd, <a class="indexterm" href="secure.html#procstart">Process Startup Configuration</a></dt><dt>XML, <a class="indexterm" href="2000users.html#id370476">Dissection and Discussion</a></dt><dt>xmlsam, <a class="indexterm" href="2000users.html#id371556">Implementation</a></dt></dl></div><div class="indexdiv"><h3>Y</h3><dl><dt>YaST, <a class="indexterm" href="happy.html#sbehap-PAM-NSS">PAM and NSS Client Configuration</a></dt><dt>Yellow Pages, <a class="indexterm" href="2000users.html#id371136">Identity Management Needs</a></dt><dt>yellow pages (see NIS)</dt></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="go01.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top">Glossary </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/kerberos.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/kerberos.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/kerberos.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,10 +1,10 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 11. Active Directory, Kerberos, and Security</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="RefSection.html" title="Part III. Reference Section"><link rel="prev" href="RefSection.html" title="Part III. Reference Section"><link rel="next" href="DomApps.html" title="Chapter 12. Integrating Additional Services"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 11. Active Directory, Kerberos, and Security</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="RefSection.html">Prev</a> </td><th width="60%" align="center">Part III. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="DomApps.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="kerberos"></a>Chapter 11. Active Directory, Kerberos, and Security</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="kerberos.html#id2632738">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="kerberos.html#id2633389">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="kerberos.html#id2633405">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="kerberos.html#id2633802">Technical Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="kerberos.html#ch10expl">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="kerberos.html#id2635432">Share Access Controls</a></span></dt><dt><span class="sect2"><a href="kerberos.html#id2635780">Share Definition Controls</a></span></dt><dt><span class="sect2"><a href="kerberos.html#id2636393">Share Point Directory and File Permissions</a></span></dt><dt><span class="sect2"><a href="kerberos.html#id2636796">Managing Windows 200x ACLs</a></span></dt><dt><span class="sect2"><a href="kerberos.html#id2637523">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="kerberos.html#id2637657">Questions and Answers</a></span></dt></dl></div><p><a class="indexterm" name="id2632674"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 11. Active Directory, Kerberos, and Security</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="RefSection.html" title="Part III. Reference Section"><link rel="prev" href="RefSection.html" title="Part III. Reference Section"><link rel="next" href="DomApps.html" title="Chapter 12. Integrating Additional Services"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 11. Active Directory, Kerberos, and Security</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="RefSection.html">Prev</a> </td><th width="60%" align="center">Part III. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="DomApps.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="kerberos"></a>Chapter 11. Active Directory, Kerberos, and Security</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="kerberos.html#id394729">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="kerberos.html#id395316">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="kerberos.html#id395330">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="kerberos.html#id395699">Technical Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="kerberos.html#ch10expl">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="kerberos.html#id397184">Share Access Controls</a></span></dt><dt><span class="sect2"><a href="kerberos.html#id397519">Share Definition Controls</a></span></dt><dt><span class="sect2"><a href="kerberos.html#id398076">Share Point Directory and File Permissions</a></span></dt><dt><span class="sect2"><a href="kerberos.html#id398445">Managing Windows 200x ACLs</a></span></dt><dt><span class="sect2"><a href="kerberos.html#id399129">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="kerberos.html#id399251">Questions and Answers</a></span></dt></dl></div><p><a class="indexterm" name="id394678"></a>
 	By this point in the book, you have been exposed to many Samba-3 features and capabilities.
 	More importantly, if you have implemented the examples given, you are well on your way to becoming 
 	a Samba-3 networking guru who knows a lot about Microsoft Windows. If you have taken the time to 
 	practice, you likely have thought of improvements and scenarios with which you can experiment. You 
 	are rather well plugged in to the many flexible ways Samba can be used.
-	</p><p><a class="indexterm" name="id2632693"></a>
+	</p><p><a class="indexterm" name="id394693"></a>
 	This is a book about Samba-3. Understandably, its intent is to present it in a positive light. 
 	The casual observer might conclude that this book is one-eyed about Samba. It is  what 
 	would you expect? This chapter exposes some criticisms that have been raised concerning 
@@ -13,13 +13,13 @@
 	Some criticism always comes from deep inside ranks that one would expect to be supportive of a particular 
 	decision. Criticism can be expected from the outside. Let's see how the interesting dynamic of 
 	criticism develops with respect to Abmas.
-	</p><p><a class="indexterm" name="id2632721"></a>
+	</p><p><a class="indexterm" name="id394716"></a>
 	This chapter provides a shameless self-promotion of Samba-3. The objections raised were not pulled
 	out of thin air. They were drawn from comments made by Samba users and from criticism during 
 	discussions with Windows network administrators. The tone of the objections reflects as closely 
 	as possible that of the original. The case presented is a straw-man example that is designed to 
 	permit each objection to be answered as it might occur in real life.
-	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2632738"></a>Introduction</h2></div></div></div><p><a class="indexterm" name="id2632745"></a><a class="indexterm" name="id2632753"></a><a class="indexterm" name="id2632761"></a><a class="indexterm" name="id2632768"></a><a class="indexterm" name="id2632776"></a>
+	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id394729"></a>Introduction</h2></div></div></div><p><a class="indexterm" name="id394736"></a><a class="indexterm" name="id394744"></a><a class="indexterm" name="id394752"></a><a class="indexterm" name="id394759"></a><a class="indexterm" name="id394767"></a>
 	Abmas is continuing its meteoric growth with yet further acquisitions. The investment community took
 	note of the spectacular projection of Abmas onto the global business stage. Abmas is building an
 	interesting portfolio of companies that includes accounting services, financial advice, investment
@@ -28,42 +28,42 @@
 	interesting business growth and development plan. Abmas Video Rentals was recently acquired. 
 	During the time that the acquisition was closing, the Video Rentals business upgraded its Windows 
 	NT4-based network to Windows 2003 Server and Active Directory.
-	</p><p><a class="indexterm" name="id2632801"></a>
+	</p><p><a class="indexterm" name="id394785"></a>
 	You have accepted the fact that Abmas Video Rentals will use Microsoft Active Directory.
 	The IT team, led by Stan Soroka, is committed to Samba-3 and to maintaining a uniform technology platform. 
 	Stan Soroka's team voiced its disapproval over the decision to permit this business to continue to 
 	operate with a solution that is viewed by Christine and her group as &#8220;<span class="quote">an island of broken 
 	technologies.</span>&#8221; This comment was made by one of Christine's staff as they were installing a new 
 	Samba-3 server at the new business.
-	</p><p><a class="indexterm" name="id2632824"></a><a class="indexterm" name="id2632832"></a>
+	</p><p><a class="indexterm" name="id394804"></a><a class="indexterm" name="id394812"></a>
 	Abmas Video Rentals' head of IT heard of this criticism. He was offended that a junior engineer
 	should make such a comment. He felt that he had to prepare in case he might be criticized for his 
 	decision to use Active Directory. He decided he would defend his decision by hiring the services 
-	of an outside security systems consultant to report<sup>[<a name="id2632847" href="#ftn.id2632847" class="footnote">12</a>]</sup> on his unit's operations 
+	of an outside security systems consultant to report<sup>[<a name="id394824" href="#ftn.id394824" class="footnote">12</a>]</sup> on his unit's operations 
 	and to investigate the role of Samba at his site. Here are key extracts from this hypothetical 
 	report:
-	</p><div class="blockquote"><blockquote class="blockquote"><p><a class="indexterm" name="id2632858"></a><a class="indexterm" name="id2632866"></a><a class="indexterm" name="id2632873"></a><a class="indexterm" name="id2632881"></a>
+	</p><div class="blockquote"><blockquote class="blockquote"><p><a class="indexterm" name="id394832"></a><a class="indexterm" name="id394840"></a><a class="indexterm" name="id394848"></a><a class="indexterm" name="id394856"></a>
 	... the implementation of Microsoft Active Directory at the Abmas Video Rentals, Bamingsham site,
 	 has been examined. We find no evidence to support a notion that vulnerabilities exist at your site.  
 	... we took additional steps to validate the integrity of the installation and operation of Active 
 	Directory and are pleased that your staff are following sound practices.
 	</p><p>
 	...
-	</p><p><a class="indexterm" name="id2632902"></a><a class="indexterm" name="id2632914"></a><a class="indexterm" name="id2632925"></a><a class="indexterm" name="id2632933"></a><a class="indexterm" name="id2632941"></a><a class="indexterm" name="id2632949"></a>
+	</p><p><a class="indexterm" name="id394874"></a><a class="indexterm" name="id394885"></a><a class="indexterm" name="id394896"></a><a class="indexterm" name="id394904"></a><a class="indexterm" name="id394912"></a><a class="indexterm" name="id394920"></a>
 	User and group accounts, and respective privileges, have been well thought out. File system shares are
 	appropriately secured. Backup and disaster recovery plans are well managed and validated regularly, and
 	effective off-site storage practices are considered to exceed industry norms.
-	</p><p><a class="indexterm" name="id2632965"></a><a class="indexterm" name="id2632973"></a><a class="indexterm" name="id2632981"></a>
+	</p><p><a class="indexterm" name="id394934"></a><a class="indexterm" name="id394942"></a><a class="indexterm" name="id394949"></a>
 	Your staff are justifiably concerned that the use of Samba may compromise their good efforts to maintain
 	a secure network. 
-	</p><p><a class="indexterm" name="id2632998"></a><a class="indexterm" name="id2633005"></a><a class="indexterm" name="id2633013"></a><a class="indexterm" name="id2633021"></a>
+	</p><p><a class="indexterm" name="id394965"></a><a class="indexterm" name="id394973"></a><a class="indexterm" name="id394981"></a><a class="indexterm" name="id394989"></a>
 	The recently installed Linux file and application server uses a tool called <code class="literal">winbind</code> 
 	that is indiscriminate about security. All user accounts in Active Directory can be used to access data 
 	stored on the Linux system. We are alarmed that secure information is accessible to staff who should 
 	not even be aware that it exists. We share the concerns of your network management staff who have gone 
 	to great lengths to set fine-grained controls that limit information access to those who need access. 
 	It seems incongruous to us that Samba winbind should be permitted to be used considering that it voids this fine work.
-	</p><p><a class="indexterm" name="id2633061"></a><a class="indexterm" name="id2633069"></a><a class="indexterm" name="id2633077"></a>
+	</p><p><a class="indexterm" name="id395019"></a><a class="indexterm" name="id395027"></a><a class="indexterm" name="id395035"></a>
 	Graham Judd [head of network administration] has locked down the security of all systems and is following 
 	the latest Microsoft guidelines. ... null session connections have been disabled ... the internal network 
 	is isolated from the outside world, the [product name removed] firewall is under current contract 
@@ -72,7 +72,7 @@
 	detail and for following Microsoft recommended best practices.
 	</p><p>
 	...
-	</p><p><a class="indexterm" name="id2633101"></a><a class="indexterm" name="id2633109"></a><a class="indexterm" name="id2633117"></a><a class="indexterm" name="id2633125"></a>
+	</p><p><a class="indexterm" name="id395054"></a><a class="indexterm" name="id395062"></a><a class="indexterm" name="id395070"></a><a class="indexterm" name="id395078"></a>
 	Regarding the use of Samba, we offer the following comments: Samba is in use in nearly half of
 	all sites we have surveyed. ... It is our opinion that Samba offers no better security than Microsoft
 	... what worries us regarding Samba is the need to disable essential Windows security features such as
@@ -80,14 +80,14 @@
 	mixed mode so that Samba clients and servers can authenticate all of it. Additionally, we are concerned that
 	Samba is not at the full capabilities of Microsoft Windows NT4 server. Microsoft has moved well beyond that
 	with trusted computing initiatives that the Samba developers do not participate in.
-	</p><p><a class="indexterm" name="id2633148"></a><a class="indexterm" name="id2633156"></a><a class="indexterm" name="id2633164"></a><a class="indexterm" name="id2633172"></a><a class="indexterm" name="id2633180"></a><a class="indexterm" name="id2633188"></a><a class="indexterm" name="id2633196"></a>
+	</p><p><a class="indexterm" name="id395095"></a><a class="indexterm" name="id395103"></a><a class="indexterm" name="id395111"></a><a class="indexterm" name="id395119"></a><a class="indexterm" name="id395127"></a><a class="indexterm" name="id395134"></a><a class="indexterm" name="id395142"></a>
 	One wonders about the integrity of an open source program that is developed by a team of hackers 
 	who cannot be held accountable for the flaws in their code. The sheer number of updates and bug
 	fixes they have released should ring alarm bells in any business.
-	</p><p><a class="indexterm" name="id2633211"></a><a class="indexterm" name="id2633219"></a><a class="indexterm" name="id2633227"></a>
+	</p><p><a class="indexterm" name="id395156"></a><a class="indexterm" name="id395164"></a><a class="indexterm" name="id395172"></a>
 	Another factor that should be considered is that buying Microsoft products and services helps to 
 	provide employment in the IT industry. Samba and Open Source software place those jobs at risk.
-	</p></blockquote></div><p><a class="indexterm" name="id2633241"></a><a class="indexterm" name="id2633249"></a>
+	</p></blockquote></div><p><a class="indexterm" name="id395184"></a><a class="indexterm" name="id395192"></a>
 	This is also a challenge to rise above the trouble spot. You call Stan's team together for a simple 
 	discussion, but it gets further out of hand.  When you return to your office, you find the following 
 	email in your in-box:
@@ -100,23 +100,23 @@
 	I also wish to advise that two of the recent recruits want to implement Kerberos authentication 
 	across all systems. I concur with the desire to improve security. One of the new guys who is championing
 	the move to Kerberos was responsible for the comment that caused the embarrassment.
-	</p><p><a class="indexterm" name="id2633286"></a><a class="indexterm" name="id2633294"></a><a class="indexterm" name="id2633302"></a><a class="indexterm" name="id2633310"></a>
+	</p><p><a class="indexterm" name="id395223"></a><a class="indexterm" name="id395231"></a><a class="indexterm" name="id395238"></a><a class="indexterm" name="id395246"></a>
 	I am experiencing difficulty in handling the sharp push for Kerberos. He claims that Kerberos, OpenLDAP, 
 	plus Samba-3 will seamlessly replace Microsoft Active Directory. I am a little out of my depth with respect 
 	to the feasibility of such a move, but have taken steps to pull both of them into line. With your consent, 
 	I would like to hire the services of a well-known Samba consultant to set the record straight.
-	</p><p><a class="indexterm" name="id2633328"></a><a class="indexterm" name="id2633336"></a><a class="indexterm" name="id2633344"></a><a class="indexterm" name="id2633352"></a><a class="indexterm" name="id2633360"></a><a class="indexterm" name="id2633368"></a>
+	</p><p><a class="indexterm" name="id395261"></a><a class="indexterm" name="id395269"></a><a class="indexterm" name="id395277"></a><a class="indexterm" name="id395285"></a><a class="indexterm" name="id395293"></a><a class="indexterm" name="id395300"></a>
 	I intend to use this report to answer the criticism raised and would like to establish a policy that we
 	will approve the use of Microsoft Windows Servers (and Active Directory) subject to all costs being covered 
 	out of the budget of the division that wishes to go its own way. I propose that dissenters will still remain
 	responsible to meet the budgeted contribution to IT operations as a whole. I believe we should not coerce 
 	use of any centrally proposed standards, but make all noncompliance the financial responsibility of the 
 	out-of-step division. Hopefully, this will encourage all divisions to walk with us and not alone.
-	</p></td><td width="10%" valign="top"> </td></tr><tr><td width="10%" valign="top"> </td><td colspan="2" align="right" valign="top">--<span class="attribution">Stan</span></td></tr></table></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2633389"></a>Assignment Tasks</h3></div></div></div><p>
+	</p></td><td width="10%" valign="top"> </td></tr><tr><td width="10%" valign="top"> </td><td colspan="2" align="right" valign="top">--<span class="attribution">Stan</span></td></tr></table></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id395316"></a>Assignment Tasks</h3></div></div></div><p>
 		You agreed with Stan's recommendations and hired a consultant to help defuse the powder
 		keg. The consultant's task is to provide a tractable answer to each of the issues raised. The consultant must be able
 		to support his or her claims, keep emotions to the side, and answer technically.
-		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2633405"></a>Dissection and Discussion</h2></div></div></div><p><a class="indexterm" name="id2633412"></a><a class="indexterm" name="id2633420"></a><a class="indexterm" name="id2633428"></a><a class="indexterm" name="id2633436"></a><a class="indexterm" name="id2633443"></a><a class="indexterm" name="id2633451"></a><a class="indexterm" name="id2633459"></a>
+		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id395330"></a>Dissection and Discussion</h2></div></div></div><p><a class="indexterm" name="id395336"></a><a class="indexterm" name="id395344"></a><a class="indexterm" name="id395352"></a><a class="indexterm" name="id395360"></a><a class="indexterm" name="id395368"></a><a class="indexterm" name="id395376"></a><a class="indexterm" name="id395384"></a>
 	Samba-3 is a tool. No one is pounding your door to make you use Samba. That is a choice that you are free to 
 	make or reject. It is likely that your decision to use Samba can greatly benefit your company. 
 	The Samba Team obviously believes that the Samba software is a worthy choice. 
@@ -124,18 +124,18 @@
 	someone to help manage your Samba installation, you can create income and employment. Alternately, 
 	money saved by not spending in the IT area can be spent elsewhere in the business. All money saved 
 	or spent creates employment.
-	</p><p><a class="indexterm" name="id2633481"></a><a class="indexterm" name="id2633489"></a><a class="indexterm" name="id2633497"></a><a class="indexterm" name="id2633505"></a><a class="indexterm" name="id2633513"></a>
+	</p><p><a class="indexterm" name="id395400"></a><a class="indexterm" name="id395408"></a><a class="indexterm" name="id395416"></a><a class="indexterm" name="id395424"></a><a class="indexterm" name="id395432"></a>
 	In the long term, the use of Samba must be economically sustainable. In some situations, Samba is adopted
 	purely to provide file and print service interoperability on platforms that otherwise cannot provide 
 	access to data and to printers for Microsoft Windows clients. Samba is used by some businesses to
 	effect a reduction in the cost of providing IT services. Obviously, it is also used by some as an 
 	alternative to the use of a Microsoft file and print serving platforms with no consideration of costs.
-	</p><p><a class="indexterm" name="id2633533"></a><a class="indexterm" name="id2633541"></a><a class="indexterm" name="id2633549"></a><a class="indexterm" name="id2633556"></a>
+	</p><p><a class="indexterm" name="id395447"></a><a class="indexterm" name="id395455"></a><a class="indexterm" name="id395463"></a><a class="indexterm" name="id395470"></a>
 	It would be foolish to adopt a technology that might put any data or users at risk. Security affects 
 	everyone. The Samba-Team is fully cognizant of the responsibility they have to their users. 
 	The Samba documentation clearly reveals that full responsibility is accepted to fix anything 
 	that is broken.
-	</p><p><a class="indexterm" name="id2633573"></a><a class="indexterm" name="id2633581"></a><a class="indexterm" name="id2633588"></a><a class="indexterm" name="id2633596"></a><a class="indexterm" name="id2633608"></a><a class="indexterm" name="id2633616"></a><a class="indexterm" name="id2633624"></a><a class="indexterm" name="id2633632"></a><a class="indexterm" name="id2633640"></a><a class="indexterm" name="id2633648"></a><a class="indexterm" name="id2633656"></a>
+	</p><p><a class="indexterm" name="id395484"></a><a class="indexterm" name="id395492"></a><a class="indexterm" name="id395500"></a><a class="indexterm" name="id395508"></a><a class="indexterm" name="id395519"></a><a class="indexterm" name="id395527"></a><a class="indexterm" name="id395535"></a><a class="indexterm" name="id395543"></a><a class="indexterm" name="id395551"></a><a class="indexterm" name="id395559"></a><a class="indexterm" name="id395566"></a>
 	There is a mistaken perception in the IT industry that commercial software providers are fully 
 	accountable for the defects in products. Open Source software comes with no warranty, so it is 
 	often assumed that its use confers a higher degree of risk. Everyone should read commercial software 
@@ -143,34 +143,34 @@
 	extent of liability that is accepted. Doing so soon dispels the popular notion that
 	commercial software vendors are willingly accountable for product defects. In many cases, the
 	commercial vendor accepts liability only to reimburse the price paid for the software. 
-	</p><p><a class="indexterm" name="id2633678"></a><a class="indexterm" name="id2633686"></a><a class="indexterm" name="id2633694"></a><a class="indexterm" name="id2633702"></a><a class="indexterm" name="id2633710"></a><a class="indexterm" name="id2633717"></a>
+	</p><p><a class="indexterm" name="id395583"></a><a class="indexterm" name="id395591"></a><a class="indexterm" name="id395599"></a><a class="indexterm" name="id395607"></a><a class="indexterm" name="id395615"></a><a class="indexterm" name="id395623"></a>
 	The real issues that a consumer (like you) needs answered are What is the way of escape from technical 
 	problems, and how long will it take? The average problem turnaround time in the Open Source community is 
 	approximately 48 hours. What does the EULA offer? What is the track record in the commercial software 
 	industry? What happens when your commercial vendor decides to cease providing support?
-	</p><p><a class="indexterm" name="id2633742"></a><a class="indexterm" name="id2633750"></a><a class="indexterm" name="id2633758"></a><a class="indexterm" name="id2633766"></a><a class="indexterm" name="id2633774"></a><a class="indexterm" name="id2633782"></a><a class="indexterm" name="id2633789"></a>
+	</p><p><a class="indexterm" name="id395641"></a><a class="indexterm" name="id395648"></a><a class="indexterm" name="id395656"></a><a class="indexterm" name="id395664"></a><a class="indexterm" name="id395672"></a><a class="indexterm" name="id395680"></a><a class="indexterm" name="id395688"></a>
 	Open Source software at least puts you in possession of the source code. This means that when
 	all else fails, you can hire a programmer to solve the problem.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2633802"></a>Technical Issues</h3></div></div></div><p>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id395699"></a>Technical Issues</h3></div></div></div><p>
 		Each issue is now discussed and, where appropriate, example implementation steps are
 		provided.
-		</p><div class="variablelist"><dl><dt><span class="term">Winbind and Security</span></dt><dd><p><a class="indexterm" name="id2633823"></a><a class="indexterm" name="id2633831"></a><a class="indexterm" name="id2633839"></a><a class="indexterm" name="id2633850"></a><a class="indexterm" name="id2633858"></a><a class="indexterm" name="id2633866"></a><a class="indexterm" name="id2633874"></a><a class="indexterm" name="id2633882"></a><a class="indexterm" name="id2633890"></a><a class="indexterm" name="id2633898"></a>
+		</p><div class="variablelist"><dl><dt><span class="term">Winbind and Security</span></dt><dd><p><a class="indexterm" name="id395719"></a><a class="indexterm" name="id395726"></a><a class="indexterm" name="id395734"></a><a class="indexterm" name="id395746"></a><a class="indexterm" name="id395754"></a><a class="indexterm" name="id395761"></a><a class="indexterm" name="id395769"></a><a class="indexterm" name="id395777"></a><a class="indexterm" name="id395785"></a><a class="indexterm" name="id395793"></a>
 				Windows network administrators may be dismayed to find that <code class="literal">winbind</code> 
 				exposes all domain users so that they may use their domain account credentials to 
 				log on to a UNIX/Linux system. The fact that all users in the domain can see the 
 				UNIX/Linux server in their Network Neighborhood and can browse the shares on the 
 				server seems to excite them further.
-				</p><p><a class="indexterm" name="id2633921"></a><a class="indexterm" name="id2633929"></a><a class="indexterm" name="id2633937"></a><a class="indexterm" name="id2633945"></a>
+				</p><p><a class="indexterm" name="id395813"></a><a class="indexterm" name="id395821"></a><a class="indexterm" name="id395829"></a><a class="indexterm" name="id395837"></a>
 				<code class="literal">winbind</code> provides for the UNIX/Linux domain member server or 
 				client, the same as one would obtain by adding a Microsoft Windows server or 
 				client to the domain. The real objection is the fact that Samba is not MS Windows 
 				and therefore requires handling a little differently from the familiar Windows systems.
 				One must recognize fear of the unknown.
-				</p><p><a class="indexterm" name="id2633968"></a><a class="indexterm" name="id2633976"></a><a class="indexterm" name="id2633984"></a><a class="indexterm" name="id2633992"></a><a class="indexterm" name="id2634000"></a><a class="indexterm" name="id2634011"></a>
+				</p><p><a class="indexterm" name="id395857"></a><a class="indexterm" name="id395864"></a><a class="indexterm" name="id395872"></a><a class="indexterm" name="id395880"></a><a class="indexterm" name="id395888"></a><a class="indexterm" name="id395899"></a>
 				Windows network administrators need to recognize that <code class="literal">winbind</code> does
 				not, and cannot, override account controls set using the Active Directory management
 				tools. The control is the same. Have no fear.
-				</p><p><a class="indexterm" name="id2634032"></a><a class="indexterm" name="id2634040"></a><a class="indexterm" name="id2634051"></a><a class="indexterm" name="id2634059"></a><a class="indexterm" name="id2634067"></a><a class="indexterm" name="id2634075"></a><a class="indexterm" name="id2634082"></a><a class="indexterm" name="id2634090"></a><a class="indexterm" name="id2634098"></a><a class="indexterm" name="id2634106"></a>
+				</p><p><a class="indexterm" name="id395918"></a><a class="indexterm" name="id395926"></a><a class="indexterm" name="id395937"></a><a class="indexterm" name="id395945"></a><a class="indexterm" name="id395953"></a><a class="indexterm" name="id395961"></a><a class="indexterm" name="id395969"></a><a class="indexterm" name="id395977"></a><a class="indexterm" name="id395985"></a><a class="indexterm" name="id395992"></a>
 				Where Samba and the ADS domain account information obtained through the use of
 				<code class="literal">winbind</code> permits access, by browsing or by the drive mapping to
 				a share, to data that should be better protected. This can only happen when security
@@ -178,14 +178,14 @@
 				on:
 				</p><div class="itemizedlist"><ul type="disc"><li><p>Shares themselves (i.e., the logical share itself)</p></li><li><p>The share definition in <code class="filename">smb.conf</code></p></li><li><p>The shared directories and files using UNIX permissions</p></li><li><p>Using Windows 2000 ACLs  if the file system is POSIX enabled</p></li></ul></div><p>
 				Examples of each are given in <a class="link" href="kerberos.html#ch10expl" title="Implementation">&#8220;Implementation&#8221;</a>.
-				</p></dd><dt><span class="term">User and Group Controls</span></dt><dd><p><a class="indexterm" name="id2634181"></a><a class="indexterm" name="id2634189"></a><a class="indexterm" name="id2634200"></a><a class="indexterm" name="id2634212"></a><a class="indexterm" name="id2634219"></a><a class="indexterm" name="id2634227"></a><a class="indexterm" name="id2634235"></a><a class="indexterm" name="id2634243"></a><a class="indexterm" name="id2634251"></a>
+				</p></dd><dt><span class="term">User and Group Controls</span></dt><dd><p><a class="indexterm" name="id396062"></a><a class="indexterm" name="id396070"></a><a class="indexterm" name="id396081"></a><a class="indexterm" name="id396092"></a><a class="indexterm" name="id396100"></a><a class="indexterm" name="id396108"></a><a class="indexterm" name="id396116"></a><a class="indexterm" name="id396123"></a><a class="indexterm" name="id396131"></a>
 				User and group management facilities as known in the Windows ADS environment may be
 				used to provide equivalent access control constraints or to provide equivalent
 				permissions and privileges on Samba servers. Samba offers greater flexibility in the
 				use of user and group controls because it has additional layers of control compared to
 				Windows 200x/XP. For example, access controls on a Samba server may be set within
 				the share definition in a manner for which Windows has no equivalent.
-				</p><p><a class="indexterm" name="id2634271"></a><a class="indexterm" name="id2634279"></a><a class="indexterm" name="id2634287"></a><a class="indexterm" name="id2634294"></a><a class="indexterm" name="id2634306"></a><a class="indexterm" name="id2634314"></a><a class="indexterm" name="id2634322"></a>
+				</p><p><a class="indexterm" name="id396147"></a><a class="indexterm" name="id396155"></a><a class="indexterm" name="id396162"></a><a class="indexterm" name="id396170"></a><a class="indexterm" name="id396182"></a><a class="indexterm" name="id396190"></a><a class="indexterm" name="id396197"></a>
 				In any serious analysis of system security, it is important to examine the safeguards
 				that remain when all other protective measures fail. An administrator may inadvertently
 				set excessive permissions on the file system of a shared resource, or he may set excessive
@@ -193,35 +193,35 @@
 				the data would indeed be laid bare to abuse. Yet, within a Samba share definition, it is
 				possible to guard against that by enforcing controls on the share definition itself. You
 				see a practical example of this a little later in this chapter.
-				</p><p><a class="indexterm" name="id2634344"></a><a class="indexterm" name="id2634351"></a>
+				</p><p><a class="indexterm" name="id396214"></a><a class="indexterm" name="id396222"></a>
 				The report that is critical of Samba really ought to have exercised greater due
 				diligence: the real weakness is on the side of a Microsoft Windows environment.
-				</p></dd><dt><span class="term">Security Overall</span></dt><dd><p><a class="indexterm" name="id2634373"></a>
+				</p></dd><dt><span class="term">Security Overall</span></dt><dd><p><a class="indexterm" name="id396242"></a>
 				Samba is designed in such a manner that weaknesses inherent in the design of
 				Microsoft Windows networking ought not to expose the underlying UNIX/Linux file
 				system in any way. All software has potential defects, and Samba is no exception.
 				What matters more is how defects that are discovered get dealt with.
-				</p><p><a class="indexterm" name="id2634390"></a><a class="indexterm" name="id2634398"></a><a class="indexterm" name="id2634406"></a><a class="indexterm" name="id2634414"></a>
+				</p><p><a class="indexterm" name="id396256"></a><a class="indexterm" name="id396264"></a><a class="indexterm" name="id396272"></a><a class="indexterm" name="id396280"></a>
 				The Samba Team totally agrees with the necessity to observe and fully implement
 				every security facility to provide a level of protection and security that is necessary
 				and that the end user (or network administrator) needs. Never would the Samba Team
 				recommend a compromise to system security, nor would deliberate defoliation of
 				security be publicly condoned; yet this is the practice by many Windows network
 				administrators just to make happy users who have no notion of consequential risk.
-				</p><p><a class="indexterm" name="id2634434"></a><a class="indexterm" name="id2634442"></a><a class="indexterm" name="id2634450"></a><a class="indexterm" name="id2634457"></a><a class="indexterm" name="id2634465"></a><a class="indexterm" name="id2634473"></a><a class="indexterm" name="id2634481"></a>
+				</p><p><a class="indexterm" name="id396295"></a><a class="indexterm" name="id396303"></a><a class="indexterm" name="id396311"></a><a class="indexterm" name="id396319"></a><a class="indexterm" name="id396327"></a><a class="indexterm" name="id396335"></a><a class="indexterm" name="id396343"></a>
 				The report condemns Samba for releasing updates and security fixes, yet Microsoft
 				online updates need to be applied almost weekly. The answer to the criticism 
 				lies in the fact that Samba development is continuing, documentation is improving, 
 				user needs are being increasingly met or exceeded, and security updates are issued 
 				with a short turnaround time.
-				</p><p><a class="indexterm" name="id2634499"></a><a class="indexterm" name="id2634507"></a><a class="indexterm" name="id2634515"></a><a class="indexterm" name="id2634523"></a><a class="indexterm" name="id2634531"></a>
+				</p><p><a class="indexterm" name="id396357"></a><a class="indexterm" name="id396365"></a><a class="indexterm" name="id396373"></a><a class="indexterm" name="id396381"></a><a class="indexterm" name="id396388"></a>
 				The release of Samba-4 is expected around late 2004 to early 2005 and involves a near 
 				complete rewrite to permit extensive modularization and to prepare Samba for new 
 				functionality planned for addition during the next-generation series. The Samba Team 
 				is responsible and can be depended upon; the history to date suggests a high 
 				degree of dependability and on charter development consistent with published 
 				roadmap projections.
-				</p><p><a class="indexterm" name="id2634561"></a><a class="indexterm" name="id2634569"></a><a class="indexterm" name="id2634580"></a><a class="indexterm" name="id2634592"></a><a class="indexterm" name="id2634600"></a><a class="indexterm" name="id2634608"></a><a class="indexterm" name="id2634616"></a>
+				</p><p><a class="indexterm" name="id396411"></a><a class="indexterm" name="id396419"></a><a class="indexterm" name="id396430"></a><a class="indexterm" name="id396441"></a><a class="indexterm" name="id396449"></a><a class="indexterm" name="id396457"></a><a class="indexterm" name="id396465"></a>
 				Not well published is the fact that Microsoft was a foundation member of
 				the Common Internet File System (CIFS) initiative, together with the participation 
 				of the network attached storage (NAS) industry. Unfortunately, for the past few years,
@@ -230,7 +230,7 @@
 				space. The Samba Team has maintained consistent presence and leadership at all
 				CIFS conferences and at the interoperability laboratories run concurrently with
 				them.
-				</p></dd><dt><span class="term">Cryptographic Controls (schannel, sign'n'seal)</span></dt><dd><p><a class="indexterm" name="id2634646"></a><a class="indexterm" name="id2634654"></a><a class="indexterm" name="id2634661"></a>
+				</p></dd><dt><span class="term">Cryptographic Controls (schannel, sign'n'seal)</span></dt><dd><p><a class="indexterm" name="id396489"></a><a class="indexterm" name="id396497"></a><a class="indexterm" name="id396505"></a>
 				The report correctly mentions that Samba did not support the most recent
 				<code class="constant">schannel</code> and <code class="constant">digital sign'n'seal</code> features
 				of Microsoft Windows NT/200x/XPPro products. This is one of the key features 
@@ -238,7 +238,7 @@
 				seldom a reflection of current practice, and in many respects reports are like a
 				pathology report  they reflect accurately (at best) status at a snapshot in time.
 				Meanwhile, the world moves on.
-				</p><p><a class="indexterm" name="id2634691"></a><a class="indexterm" name="id2634699"></a><a class="indexterm" name="id2634707"></a><a class="indexterm" name="id2634715"></a><a class="indexterm" name="id2634722"></a><a class="indexterm" name="id2634737"></a><a class="indexterm" name="id2634745"></a>
+				</p><p><a class="indexterm" name="id396531"></a><a class="indexterm" name="id396538"></a><a class="indexterm" name="id396546"></a><a class="indexterm" name="id396554"></a><a class="indexterm" name="id396562"></a><a class="indexterm" name="id396576"></a><a class="indexterm" name="id396584"></a>
 				It should be pointed out that had clear public specifications for the protocols
 				been published, it would have been much easier to implement these features and would have
 				taken less time to do. The sole mechanism used to find an algorithm that is compatible
@@ -246,7 +246,7 @@
 				and trial-and-error implementation of potential techniques. The real value of public
 				and defensible standards is obvious to all and would have enabled more secure networking
 				for everyone.
-				</p><p><a class="indexterm" name="id2634766"></a><a class="indexterm" name="id2634774"></a>
+				</p><p><a class="indexterm" name="id396600"></a><a class="indexterm" name="id396608"></a>
 				Critics of Samba often ignore fundamental problems that may plague (or may have plagued)
 				the users of Microsoft's products also. Those who are first to criticize Samba
 				for not rushing into release of <code class="constant">digital sign'n'seal</code> support
@@ -258,7 +258,7 @@
 				implementation of sign'n'seal. They provide a work-around that is not trivial for many
 				Windows networking sites. From notes such as this it is clear that there are benefits
 				from not rushing new technology out of the door too soon.
-				</p><p><a class="indexterm" name="id2634814"></a><a class="indexterm" name="id2634822"></a><a class="indexterm" name="id2634830"></a><a class="indexterm" name="id2634838"></a><a class="indexterm" name="id2634846"></a><a class="indexterm" name="id2634854"></a><a class="indexterm" name="id2634862"></a><a class="indexterm" name="id2634870"></a><a class="indexterm" name="id2634878"></a>
+				</p><p><a class="indexterm" name="id396641"></a><a class="indexterm" name="id396649"></a><a class="indexterm" name="id396656"></a><a class="indexterm" name="id396664"></a><a class="indexterm" name="id396672"></a><a class="indexterm" name="id396680"></a><a class="indexterm" name="id396688"></a><a class="indexterm" name="id396696"></a><a class="indexterm" name="id396704"></a>
 				One final comment is warranted. If companies want more secure networking protocols,
 				the most effective method by which this can be achieved is by users seeking
 				and working together to help define open and publicly refereed standards. The
@@ -274,7 +274,7 @@
 				of them that uses RPCs that are not supported by any of these component technologies
 				and yet by which they are made to interoperate in ways that the components do not
 				support.
-				</p><p><a class="indexterm" name="id2634965"></a><a class="indexterm" name="id2634977"></a><a class="indexterm" name="id2634985"></a><a class="indexterm" name="id2634992"></a><a class="indexterm" name="id2635000"></a>
+				</p><p><a class="indexterm" name="id396782"></a><a class="indexterm" name="id396793"></a><a class="indexterm" name="id396801"></a><a class="indexterm" name="id396809"></a><a class="indexterm" name="id396817"></a>
 				In order to make the popular request for Samba to be an Active Directory Server a
 				reality, it is necessary to add to OpenLDAP, Kerberos, as well as Samba, RPC calls
 				that are not presently supported. The Samba Team has not been able to gain critical
@@ -282,34 +282,34 @@
 				challenge of developing and integrating the necessary technologies. Therefore, if
 				the Samba Team does not make it a priority to absorb Kerberos and LDAP functionality
 				into the Samba project, this dream request cannot become a reality.
-				</p><p><a class="indexterm" name="id2635031"></a><a class="indexterm" name="id2635039"></a><a class="indexterm" name="id2635047"></a><a class="indexterm" name="id2635058"></a><a class="indexterm" name="id2635066"></a>
+				</p><p><a class="indexterm" name="id396838"></a><a class="indexterm" name="id396846"></a><a class="indexterm" name="id396854"></a><a class="indexterm" name="id396865"></a><a class="indexterm" name="id396872"></a>
 				At this time, the integration of LDAP, Kerberos, and the missing RPCs is not on the
 				Samba development roadmap. If it is not on the published roadmap, it cannot be delivered
 				anytime soon. Ergo, ADS server support is not a current goal for Samba development.
 				The Samba Team is most committed to permitting Samba to be a full ADS domain member
 				that is increasingly capable of being managed using Microsoft Windows MMC tools.
-				</p></dd></dl></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2635086"></a>Kerberos Exposed</h4></div></div></div><p><a class="indexterm" name="id2635092"></a><a class="indexterm" name="id2635100"></a><a class="indexterm" name="id2635108"></a>
+				</p></dd></dl></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id396888"></a>Kerberos Exposed</h4></div></div></div><p><a class="indexterm" name="id396895"></a><a class="indexterm" name="id396903"></a><a class="indexterm" name="id396911"></a>
 	Kerberos is a network authentication protocol that provides secure authentication for 
 	client-server applications by using secret-key cryptography. Firewalls are an insufficient 
 	barrier mechanism in today's networking world; at best they only restrict incoming network 
 	traffic but cannot prevent network traffic that comes from authorized locations from 
 	performing unauthorized activities.
-	</p><p><a class="indexterm" name="id2635126"></a><a class="indexterm" name="id2635134"></a><a class="indexterm" name="id2635142"></a>
+	</p><p><a class="indexterm" name="id396925"></a><a class="indexterm" name="id396933"></a><a class="indexterm" name="id396941"></a>
 	Kerberos was created by MIT as a solution to network security problems. The Kerberos protocol uses 
 	strong cryptography so that a client can prove its identity to a server (and vice versa) across an 
 	insecure network connection. After a client and server has used Kerberos to prove their identity, 
 	they can also encrypt all of their communications to assure privacy and data integrity as they go 
 	about their business.
-	</p><p><a class="indexterm" name="id2635161"></a><a class="indexterm" name="id2635169"></a><a class="indexterm" name="id2635176"></a><a class="indexterm" name="id2635184"></a><a class="indexterm" name="id2635196"></a>
+	</p><p><a class="indexterm" name="id396956"></a><a class="indexterm" name="id396964"></a><a class="indexterm" name="id396972"></a><a class="indexterm" name="id396979"></a><a class="indexterm" name="id396991"></a>
 	Kerberos is a trusted third-party service. That means that there is a third party (the kerberos 
 	server) that is trusted by all the entities on the network (users and services, usually called 
 	principals). All principals share a secret password (or key) with the kerberos server and this 
 	enables principals to verify that the messages from the kerberos server are authentic. Therefore, 
 	trusting the kerberos server, users and services can authenticate each other.
 	</p><p>
-	<a class="indexterm" name="id2635216"></a>
-	<a class="indexterm" name="id2635223"></a>
-	<a class="indexterm" name="id2635230"></a>
+	<a class="indexterm" name="id397007"></a>
+	<a class="indexterm" name="id397014"></a>
+	<a class="indexterm" name="id397021"></a>
 	Kerberos was, until recently, a technology that was restricted from being exported from the United States.
 	For many years that hindered global adoption of more secure networking technologies both within the United States
 	and abroad. A free and unencumbered implementation of MIT Kerberos has been produced in Europe
@@ -319,11 +319,11 @@
 	significant surge forward in the development of Kerberos-enabled applications and in the general deployment
 	and use of Kerberos across the spectrum of the information technology industry.
 	</p><p>
-	<a class="indexterm" name="id2635259"></a>
+	<a class="indexterm" name="id397043"></a>
 	A storm has broken out concerning interoperability between MIT Kerberos and Microsofts' implementation
 	of it. For example, a 2002
 	<a class="ulink" href="http://www.idg.com.sg/idgwww.nsf/0/5DDA8D153A7505A748256BAB000D992A?OpenDocument" target="_top">IDG</a>
-	report<sup>[<a name="id2635278" href="#ftn.id2635278" class="footnote">13</a>]</sup> by
+	report<sup>[<a name="id397060" href="#ftn.id397060" class="footnote">13</a>]</sup> by
 	states:
 	</p><div class="blockquote"><blockquote class="blockquote"><p>
 	A Microsoft Corp. executive testified at the software giant's remedy hearing that the company goes to 
@@ -331,7 +331,7 @@
 	with Windows. But a lawyer with the states suing Microsoft pointed out that when it comes to the company's 
 	use of the Kerberos authentication specification, not everyone agrees.
 	</p><p>
-	<a class="indexterm" name="id2635304"></a>
+	<a class="indexterm" name="id397081"></a>
 	Robert Short, vice president of Windows core technology at Microsoft, wrote in his direct testimony prepared 
 	before his appearance that non-Microsoft operating systems can disregard the portion of the Kerberos version 
 	5 specification that Windows clients use for proprietary purposes and still achieve interoperability with 
@@ -339,8 +339,8 @@
 	Windows-specific authorization data, Short wrote. The designers of Kerberos left these fields undefined so 
 	that software developers could add their own authorization information, he said.
 	</p></blockquote></div><p>
-	<a class="indexterm" name="id2635327"></a>
-	<a class="indexterm" name="id2635333"></a>
+	<a class="indexterm" name="id397099"></a>
+	<a class="indexterm" name="id397106"></a>
 	It so happens that Microsoft Windows clients depend on and expect the contents of the <span class="emphasis"><em>unspecified
 	fields</em></span> in the Kerberos 5 communications data stream for their Windows interoperability,
 	particularly when Samba is expected to emulate a Windows Server 200x domain controller. But the interoperability
@@ -352,7 +352,7 @@
 	Microsoft makes the following comment in a reference in a
 	<a class="ulink" href="http://www.microsoft.com/technet/itsolutions/interop/mgmt/kerberos.asp" target="_top">
 	technet</a> article:
-	</p><div class="blockquote"><blockquote class="blockquote"><p><a class="indexterm" name="id2635369"></a><a class="indexterm" name="id2635380"></a>
+	</p><div class="blockquote"><blockquote class="blockquote"><p><a class="indexterm" name="id397135"></a><a class="indexterm" name="id397146"></a>
 	The DCE Security Services are also layered on the Kerberos protocol. DCE authentication services use RPC 
 	representation of Kerberos protocol messages. In addition, DCE uses the authorization data field in Kerberos 
 	tickets to convey Privilege Attribute Certificates (PACs) that define user identity and group membership. 
@@ -362,10 +362,10 @@
 	Windows NT access control information.
 	</p></blockquote></div></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="ch10expl"></a>Implementation</h2></div></div></div><p>
 	The following procedures outline the implementation of the security measures discussed so far.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2635432"></a>Share Access Controls</h3></div></div></div><p><a class="indexterm" name="id2635439"></a><a class="indexterm" name="id2635446"></a><a class="indexterm" name="id2635454"></a>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id397184"></a>Share Access Controls</h3></div></div></div><p><a class="indexterm" name="id397191"></a><a class="indexterm" name="id397199"></a><a class="indexterm" name="id397207"></a>
 	Access control entries placed on the share itself act as a filter at the time a when CIFS/SMB client (such as
 	Windows XP Pro) attempts to make a connection to the Samba server.
-	</p><div class="procedure"><a name="id2635468"></a><p class="title"><b>Procedure 11.1. Create/Edit/Delete Share ACLs</b></p><ol type="1"><li><p><a class="indexterm" name="id2635478"></a><a class="indexterm" name="id2635486"></a>
+	</p><div class="procedure"><a name="id397218"></a><p class="title"><b>Procedure 11.1. Create/Edit/Delete Share ACLs</b></p><ol type="1"><li><p><a class="indexterm" name="id397228"></a><a class="indexterm" name="id397236"></a>
 		From a Windows 200x/XP Professional workstation, log on to the domain using the Domain Administrator 
 		account (on Samba domains, this is usually the account called <code class="constant">root</code>).
 		</p></li><li><p>
@@ -374,16 +374,16 @@
 		</p></li><li><p>
 		In the left panel,
 		<span class="guimenu">[Right mouse menu item] Computer Management (Local)</span> &#8594; <span class="guimenuitem">Connect to another computer ...</span> &#8594; <span class="guimenuitem">Browse...</span> &#8594; <span class="guimenuitem">Advanced</span> &#8594; <span class="guimenuitem">Find Now</span>. In the lower panel, click on the name of the server you wish to
-		administer. Click <span class="guimenu">OK</span> &#8594; <span class="guimenuitem">OK</span> &#8594; <span class="guimenuitem">OK</span>.<a class="indexterm" name="id2635609"></a>
+		administer. Click <span class="guimenu">OK</span> &#8594; <span class="guimenuitem">OK</span> &#8594; <span class="guimenuitem">OK</span>.<a class="indexterm" name="id397356"></a>
 		In the left panel, the entry <span class="guimenu">Computer Management (Local)</span> should now reflect
 		the change made. For example, if the server you are administering is called <code class="constant">FRODO</code>,
 		the Computer Management entry should now say <span class="guimenu">Computer Management (FRODO)</span>.
 		</p></li><li><p>
 		In the left panel, click <span class="guimenu">Computer Management (FRODO)</span> &#8594; <span class="guimenuitem">[+] Shared Folders</span> &#8594; <span class="guimenuitem">Shares</span>.
-		</p></li><li><p><a class="indexterm" name="id2635673"></a><a class="indexterm" name="id2635681"></a>
+		</p></li><li><p><a class="indexterm" name="id397418"></a><a class="indexterm" name="id397426"></a>
 		In the right panel, double-click on the share on which you wish to set/edit ACLs. This
 		will bring up the Properties panel. Click the <span class="guimenu">Share Permissions</span> tab.
-		</p></li><li><p><a class="indexterm" name="id2635704"></a><a class="indexterm" name="id2635712"></a><a class="indexterm" name="id2635720"></a><a class="indexterm" name="id2635728"></a><a class="indexterm" name="id2635736"></a><a class="indexterm" name="id2635744"></a>
+		</p></li><li><p><a class="indexterm" name="id397447"></a><a class="indexterm" name="id397455"></a><a class="indexterm" name="id397463"></a><a class="indexterm" name="id397471"></a><a class="indexterm" name="id397479"></a><a class="indexterm" name="id397487"></a>
 		You may now edit/add/remove access control settings. Be very careful. Many problems have been
 		created by people who decided that everyone should be rejected but one particular group should
 		have full control. This is a catch-22 situation because members of that particular group also
@@ -392,20 +392,20 @@
 		</p></li><li><p>
 		When you are done with editing, close all panels by clicking through the <span class="guimenu">OK</span>
 		buttons.
-		</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2635780"></a>Share Definition Controls</h3></div></div></div><p><a class="indexterm" name="id2635787"></a><a class="indexterm" name="id2635799"></a><a class="indexterm" name="id2635807"></a><a class="indexterm" name="id2635814"></a><a class="indexterm" name="id2635822"></a><a class="indexterm" name="id2635830"></a>
+		</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id397519"></a>Share Definition Controls</h3></div></div></div><p><a class="indexterm" name="id397526"></a><a class="indexterm" name="id397537"></a><a class="indexterm" name="id397545"></a><a class="indexterm" name="id397553"></a><a class="indexterm" name="id397561"></a><a class="indexterm" name="id397568"></a>
 	Share-definition-based access controls can be used like a checkpoint or like a pile-driver. Just as a
 	checkpoint can be used to require someone who wants to get through to meet certain requirements, so
 	it is possible to require the user (or group the user belongs to) to meet specified credential-related 
 	objectives. It can be likened to a pile-driver by overriding default controls in that having met the 
 	credential-related objectives, the user can be granted powers and privileges that would not normally be 
 	available under default settings.
-	</p><p><a class="indexterm" name="id2635851"></a><a class="indexterm" name="id2635859"></a><a class="indexterm" name="id2635866"></a><a class="indexterm" name="id2635875"></a>
+	</p><p><a class="indexterm" name="id397584"></a><a class="indexterm" name="id397592"></a><a class="indexterm" name="id397600"></a><a class="indexterm" name="id397608"></a>
 	It must be emphasized that the controls discussed here can act as a filter or give rights of passage
 	that act as a superstructure over normal directory and file access controls. However, share-level
 	ACLs act at a higher level than do share definition controls because the user must filter through the
 	share-level controls to get to the share-definition controls. The proper hierarchy of controls implemented
 	by Samba and Windows networking consists of:
-	</p><div class="orderedlist"><ol type="1"><li><p>Share-level ACLs</p></li><li><p>Share-definition controls</p></li><li><p>Directory and file permissions</p></li><li><p>Directory and file POSIX ACLs</p></li></ol></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2635920"></a>Checkpoint Controls</h4></div></div></div><p><a class="indexterm" name="id2635927"></a>
+	</p><div class="orderedlist"><ol type="1"><li><p>Share-level ACLs</p></li><li><p>Share-definition controls</p></li><li><p>Directory and file permissions</p></li><li><p>Directory and file POSIX ACLs</p></li></ol></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id397648"></a>Checkpoint Controls</h4></div></div></div><p><a class="indexterm" name="id397655"></a>
 	Consider the following extract from a <code class="filename">smb.conf</code> file defining the share called <code class="constant">Apps</code>:
 </p><pre class="screen">
 [Apps]
@@ -416,19 +416,19 @@
 </pre><p>
 	This definition permits only those who are members of the group called <code class="constant">Employees</code> to 
 	access the share.
-	</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p><a class="indexterm" name="id2635962"></a><a class="indexterm" name="id2635974"></a><a class="indexterm" name="id2635982"></a><a class="indexterm" name="id2635990"></a><a class="indexterm" name="id2635998"></a>
+	</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p><a class="indexterm" name="id397688"></a><a class="indexterm" name="id397700"></a><a class="indexterm" name="id397708"></a><a class="indexterm" name="id397716"></a><a class="indexterm" name="id397723"></a>
 	On domain member servers and clients, even when the <em class="parameter"><code>winbind use default domain</code></em> has
 	been specified, the use of domain accounts in security controls requires fully qualified domain specification,
 	for example, <a class="link" href="smb.conf.5.html#VALIDUSERS">valid users = @"MEGANET\Northern Engineers"</a>. 
 	Note the necessity to use the double quotes to avoid having the space in the Windows group name interpreted as a
 	delimiter. 
-	</p></div><p><a class="indexterm" name="id2636033"></a><a class="indexterm" name="id2636040"></a><a class="indexterm" name="id2636048"></a>
+	</p></div><p><a class="indexterm" name="id397755"></a><a class="indexterm" name="id397762"></a><a class="indexterm" name="id397770"></a>
 	If there is an ACL on the share itself to permit read/write access for all <code class="constant">Employees</code>
 	as well as read/write for the group <code class="constant">Doctors</code>, both groups are permitted through
 	to the share. However, at the moment an attempt is made to set up a connection to the share, a member of
 	the group <code class="constant">Doctors</code>, who is not also a member of the group <code class="constant">Employees</code>,
 	would immediately fail to validate.
-	</p><p><a class="indexterm" name="id2636079"></a>
+	</p><p><a class="indexterm" name="id397798"></a>
 	Consider another example. In this case, you want to permit all members of the group <code class="constant">Employees</code>
 	except the user <code class="constant">patrickj</code> to access the <code class="constant">Apps</code> share. This can be
 	easily achieved by setting a share-level ACL permitting only <code class="constant">Employees</code> to access the share,
@@ -441,7 +441,7 @@
         read only = Yes
         invalid users = patrickj
 </pre><p>
-	    <a class="indexterm" name="id2636119"></a>
+	    <a class="indexterm" name="id397835"></a>
 	Let us assume that you want to permit the user <code class="constant">gbshaw</code> to manage any file in the
 	UNIX/Linux file system directory <code class="filename">/data/apps</code>, but you do not want to grant any write
 	permissions beyond that directory tree. Here is one way this can be done:
@@ -453,7 +453,7 @@
         invalid users = patrickj
         admin users = gbshaw
 </pre><p>
-	    <a class="indexterm" name="id2636150"></a>
+	    <a class="indexterm" name="id397862"></a>
 	Now we have a set of controls that permits only <code class="constant">Employees</code> who are also members of
 	the group <code class="constant">Doctors</code>, excluding the user <code class="constant">patrickj</code>, to have 
 	read-only privilege, but the user <code class="constant">gbshaw</code> is granted administrative rights.
@@ -475,11 +475,11 @@
         admin users = gbshaw
         write list = peters
 </pre><p>
-	    <a class="indexterm" name="id2636210"></a>
+	    <a class="indexterm" name="id397913"></a>
 	This is a particularly complex example at this point, but it begins to demonstrate the possibilities.
 	You should refer to the online manual page for the <code class="filename">smb.conf</code> file for more information regarding
 	the checkpoint controls that Samba implements.
-	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2636232"></a>Override Controls</h4></div></div></div><p><a class="indexterm" name="id2636238"></a>
+	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id397932"></a>Override Controls</h4></div></div></div><p><a class="indexterm" name="id397939"></a>
 	Override controls implemented by Samba permit actions like the adoption of a different identity 
 	during file system operations, the forced overwriting of normal file and directory permissions,
 	and so on. You should refer to the online manual page for the <code class="filename">smb.conf</code> file for more information regarding
@@ -497,14 +497,14 @@
 	force user = billc
 	force group = Mentors
 </pre><p>
-	    <a class="indexterm" name="id2636282"></a><a class="indexterm" name="id2636290"></a>
+	    <a class="indexterm" name="id397977"></a><a class="indexterm" name="id397984"></a>
 	That is all there is to it. Well, it is almost that simple. The downside of this method is that
 	users are logged onto the Windows client as themselves, and then immediately before accessing the
 	file, Samba makes system calls to change the effective user and group to the forced settings
 	specified, completes the file transaction, and then reverts to the actually logged-on identity.
 	This imposes significant overhead on Samba. The alternative way to effectively achieve the same result
 	(but with lower system CPU overheads) is described next.
-	</p><p><a class="indexterm" name="id2636311"></a><a class="indexterm" name="id2636319"></a><a class="indexterm" name="id2636326"></a><a class="indexterm" name="id2636338"></a><a class="indexterm" name="id2636346"></a>
+	</p><p><a class="indexterm" name="id398000"></a><a class="indexterm" name="id398008"></a><a class="indexterm" name="id398016"></a><a class="indexterm" name="id398027"></a><a class="indexterm" name="id398035"></a>
 	The use of the <em class="parameter"><code>force user</code></em> or the <em class="parameter"><code>force group</code></em> may
 	also have a severe impact on system (particularly on Windows client) performance. If opportunistic
 	locking is enabled on the share (the default), it causes an <code class="constant">oplock break</code> to be
@@ -514,7 +514,7 @@
 	waiting for the file system transaction (read or write) to complete. The result can be a profound
 	apparent performance degradation as the client continually attempts to reconnect to overcome the
 	effect of the lost <code class="constant">oplock break</code>, or time-out.
-	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2636393"></a>Share Point Directory and File Permissions</h3></div></div></div><p><a class="indexterm" name="id2636400"></a><a class="indexterm" name="id2636408"></a><a class="indexterm" name="id2636416"></a><a class="indexterm" name="id2636424"></a>
+	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id398076"></a>Share Point Directory and File Permissions</h3></div></div></div><p><a class="indexterm" name="id398083"></a><a class="indexterm" name="id398091"></a><a class="indexterm" name="id398098"></a><a class="indexterm" name="id398106"></a>
 	Samba has been designed and implemented so that it respects as far as is feasible the security and
 	user privilege controls that are built into the UNIX/Linux operating system. Samba does nothing
 	with respect to file system access that violates file system permission settings, unless it is
@@ -522,7 +522,7 @@
 	UNIX file system controls, this chapter does not document simple information that can be obtained
 	from a basic UNIX training guide. Instead, one common example of a typical problem is used
 	to demonstrate the most effective solution referred to in the immediately preceding paragraph.
-	</p><p><a class="indexterm" name="id2636447"></a><a class="indexterm" name="id2636455"></a><a class="indexterm" name="id2636463"></a>
+	</p><p><a class="indexterm" name="id398123"></a><a class="indexterm" name="id398131"></a><a class="indexterm" name="id398139"></a>
 	One of the common issues that repeatedly pops up on the Samba mailing lists involves the saving of
 	Microsoft Office files (Word and Excel) to a network drive. Here is the typical sequence:
 	</p><div class="orderedlist"><ol type="1"><li><p>
@@ -542,7 +542,7 @@
 	There have been many postings over the years that report the same basic problem. Frequently Samba users
 	want to know when this &#8220;<span class="quote">bug</span>&#8221; will be fixed. The fact is, this is not a bug in Samba at all.
 	Here is the real sequence of what happens in this case.
-	</p><p><a class="indexterm" name="id2636555"></a><a class="indexterm" name="id2636562"></a><a class="indexterm" name="id2636570"></a>
+	</p><p><a class="indexterm" name="id398224"></a><a class="indexterm" name="id398232"></a><a class="indexterm" name="id398239"></a>
 	When the user saves a file, MS Word creates a new (temporary) file. This file is naturally owned
 	by the user who creates the file (<code class="constant">billc</code>) and has the permissions that follow
 	that user's default settings within the operating system (UNIX/Linux). When MS Word has finished writing
@@ -560,7 +560,7 @@
 	The solution is simple. Use UNIX file system permissions and controls to your advantage. Follow these
 	simple steps to create a share in which all files will consistently be owned by the same user and the
 	same group:
-	</p><div class="procedure"><a name="id2636617"></a><p class="title"><b>Procedure 11.2. Using Directory Permissions to Force File User and Group Ownership</b></p><ol type="1"><li><p>
+	</p><div class="procedure"><a name="id398276"></a><p class="title"><b>Procedure 11.2. Using Directory Permissions to Force File User and Group Ownership</b></p><ol type="1"><li><p>
 		Change your share definition so that it matches this pattern:
 </p><pre class="screen">
 [finance]
@@ -568,18 +568,18 @@
         browseable = Yes
         read only = No
 </pre><p>
-		</p></li><li><p><a class="indexterm" name="id2636643"></a><a class="indexterm" name="id2636654"></a>
+		</p></li><li><p><a class="indexterm" name="id398300"></a><a class="indexterm" name="id398311"></a>
 		Set consistent user and group permissions recursively down the directory tree as shown here:
 </p><pre class="screen">
 <code class="prompt">root# </code> chown -R janetp.users /usr/data/finance
 </pre><p>
-		</p></li><li><p><a class="indexterm" name="id2636686"></a>
+		</p></li><li><p><a class="indexterm" name="id398342"></a>
 		Set the files and directory permissions to be read/write for owner and group, and not accessible
 		to others (everyone), using the following command:
 </p><pre class="screen">
 <code class="prompt">root# </code> chmod ug+rwx,o-rwx /usr/data/finance
 </pre><p>
-		</p></li><li><p><a class="indexterm" name="id2636715"></a>
+		</p></li><li><p><a class="indexterm" name="id398369"></a>
 		Set the SGID (supergroup) bit on all directories from the top down. This means all files 
 		can be created with the permissions of the group set on the directory. It means all users 
 		who are members of the group <code class="constant">finance</code> can read and write all files in 
@@ -589,11 +589,11 @@
 <code class="prompt">root# </code> find /usr/data/finance -type d -exec chmod ug+s {}\;
 </pre><p>
 
-		</p></li><li><p><a class="indexterm" name="id2636756"></a><a class="indexterm" name="id2636764"></a><a class="indexterm" name="id2636772"></a>
+		</p></li><li><p><a class="indexterm" name="id398406"></a><a class="indexterm" name="id398414"></a><a class="indexterm" name="id398422"></a>
 		Make sure all users that must have read/write access to the directory have 
 		<code class="constant">finance</code> group membership as their primary group, 
 		for example, the group they belong to in <code class="filename">/etc/passwd</code>.
-		</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2636796"></a>Managing Windows 200x ACLs</h3></div></div></div><p><a class="indexterm" name="id2636803"></a><a class="indexterm" name="id2636811"></a><a class="indexterm" name="id2636819"></a><a class="indexterm" name="id2636827"></a>
+		</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id398445"></a>Managing Windows 200x ACLs</h3></div></div></div><p><a class="indexterm" name="id398452"></a><a class="indexterm" name="id398460"></a><a class="indexterm" name="id398468"></a><a class="indexterm" name="id398475"></a>
 	Samba must translate Windows 2000 ACLs to UNIX POSIX ACLs. This has some interesting side effects because
 	there is not a one-to-one equivalence between them. The as-close-as-possible ACLs match means
 	that some transactions are not possible from MS Windows clients. One of these is to reset the ownership
@@ -601,7 +601,7 @@
 	</p><p>
 	There are two possible ways to set ACLs on UNIX/Linux file systems from a Windows network workstation,
 	either via File Manager or via the Microsoft Management Console (MMC) Computer Management interface.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2636851"></a>Using the MMC Computer Management Interface</h4></div></div></div><div class="procedure"><ol type="1"><li><p>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id398494"></a>Using the MMC Computer Management Interface</h4></div></div></div><div class="procedure"><ol type="1"><li><p>
 		From a Windows 200x/XP Professional workstation, log on to the domain using the Domain Administrator 
 		account (on Samba domains, this is usually the account called <code class="constant">root</code>).
 		</p></li><li><p>
@@ -616,14 +616,14 @@
 		the Computer Management entry should now say: <span class="guimenu">Computer Management (FRODO)</span>.
 		</p></li><li><p>
 		In the left panel, click <span class="guimenu">Computer Management (FRODO)</span> &#8594; <span class="guimenuitem">[+] Shared Folders</span> &#8594; <span class="guimenuitem">Shares</span>.
-		</p></li><li><p><a class="indexterm" name="id2637034"></a><a class="indexterm" name="id2637042"></a><a class="indexterm" name="id2637050"></a><a class="indexterm" name="id2637057"></a>
+		</p></li><li><p><a class="indexterm" name="id398671"></a><a class="indexterm" name="id398679"></a><a class="indexterm" name="id398687"></a><a class="indexterm" name="id398695"></a>
 		In the right panel, double-click on the share on which you wish to set/edit ACLs. This
 		brings up the Properties panel. Click the <span class="guimenu">Security</span> tab. It is best
 		to edit ACLs using the <code class="constant">Advanced</code> editing features. Click the 
 		<span class="guimenu">Advanced</span> button. This opens a panel that has four tabs. Only the 
 		functionality under the <code class="constant">Permissions</code> tab can be utilized with respect 
 		to a Samba domain server.
-		</p></li><li><p><a class="indexterm" name="id2637097"></a><a class="indexterm" name="id2637105"></a>
+		</p></li><li><p><a class="indexterm" name="id398731"></a><a class="indexterm" name="id398739"></a>
 		You may now edit/add/remove access control settings. Be very careful. Many problems have been
 		created by people who decided that everyone should be rejected but one particular group should
 		have full control. This is a catch-22 situation because members of that particular group also
@@ -632,7 +632,7 @@
 		</p></li><li><p>
 		When you are done with editing, close all panels by clicking through the <span class="guimenu">OK</span>
 		buttons until the last panel closes.
-		</p></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2637142"></a>Using MS Windows Explorer (File Manager)</h4></div></div></div><p>
+		</p></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id398771"></a>Using MS Windows Explorer (File Manager)</h4></div></div></div><p>
 	The following alternative method may be used from a Windows workstation. In this example we work
 	with a domain called <code class="constant">MEGANET</code>, a server called <code class="constant">MASSIVE</code>, and a
 	share called <code class="constant">Apps</code>. The underlying UNIX/Linux share point for this share is
@@ -640,7 +640,7 @@
 	</p><div class="procedure"><ol type="1"><li><p>
 		Click <span class="guimenu">Start</span> &#8594; <span class="guimenuitem">[right-click] My Computer</span> &#8594; <span class="guimenuitem">Explore</span> &#8594; <span class="guimenuitem">[left panel] [+] My Network Places</span> &#8594; <span class="guimenuitem">[+] Entire Network</span> &#8594; <span class="guimenuitem">[+] Microsoft Windows Network</span> &#8594; <span class="guimenuitem">[+] Meganet</span> &#8594; <span class="guimenuitem">[+] Massive</span> &#8594; <span class="guimenuitem">[right-click] Apps</span> &#8594; <span class="guimenuitem">Properties</span> &#8594; <span class="guimenuitem">Security</span> &#8594; <span class="guimenuitem">Advanced</span>. This opens a panel that has four tabs. Only the functionality under the 
 		<code class="constant">Permissions</code> tab can be utilized for a Samba domain server.
-		</p></li><li><p><a class="indexterm" name="id2637266"></a><a class="indexterm" name="id2637274"></a>
+		</p></li><li><p><a class="indexterm" name="id398892"></a><a class="indexterm" name="id398900"></a>
                 You may now edit/add/remove access control settings. Be very careful. Many problems have been
                 created by people who decided that everyone should be rejected but one particular group should
                 have full control. This is a catch-22 situation because members of that particular group also
@@ -649,7 +649,7 @@
                 </p></li><li><p>
                 When you are done with editing, close all panels by clicking through the <span class="guimenu">OK</span>
                 buttons until the last panel closes.
-                </p></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2637313"></a>Setting Posix ACLs in UNIX/Linux</h4></div></div></div><p><a class="indexterm" name="id2637320"></a><a class="indexterm" name="id2637328"></a>
+                </p></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id398933"></a>Setting Posix ACLs in UNIX/Linux</h4></div></div></div><p><a class="indexterm" name="id398940"></a><a class="indexterm" name="id398948"></a>
 	Yet another alternative method for setting desired security settings on the shared resource files and
 	directories can be achieved by logging into UNIX/Linux and setting POSIX ACLs directly using command-line
 	tools. Here is an example session on the same resource as in the immediately preceding example on a SUSE 9
@@ -672,7 +672,7 @@
 group::rwx
 other::r-x
 </pre><p>
-		</p></li><li><p><a class="indexterm" name="id2637402"></a>
+		</p></li><li><p><a class="indexterm" name="id399016"></a>
 		You want to add permission for <code class="constant">AppsMgrs</code> to enable them to
 		manage the applications (apps) share. It is important to set the ACL recursively
 		so that the AppsMgrs have this capability throughout the directory tree that is 
@@ -695,26 +695,26 @@
 other::r-x
 </pre><p>
 		This confirms that the change of POSIX ACL permissions has been effective.
-		</p></li><li><p><a class="indexterm" name="id2637458"></a><a class="indexterm" name="id2637466"></a><a class="indexterm" name="id2637473"></a><a class="indexterm" name="id2637481"></a><a class="indexterm" name="id2637489"></a>
+		</p></li><li><p><a class="indexterm" name="id399066"></a><a class="indexterm" name="id399074"></a><a class="indexterm" name="id399082"></a><a class="indexterm" name="id399090"></a><a class="indexterm" name="id399098"></a>
 		It is highly recommended that you read the online manual page for the <code class="literal">setfacl</code>
 		and <code class="literal">getfacl</code> commands. This provides information regarding how to set/read the default
 		ACLs and how that may be propagated through the directory tree. In Windows ACLs terms, this is the equivalent
 		of setting <code class="constant">inheritance</code> properties.
-		</p></li></ol></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2637523"></a>Key Points Learned</h3></div></div></div><p>
+		</p></li></ol></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id399129"></a>Key Points Learned</h3></div></div></div><p>
 		The mish-mash of issues were thrown together into one chapter because it seemed like a good idea.
 		Looking back, this chapter could be broken into two, but it's too late now. It has been done.
 		The highlights covered are as follows:
-		</p><div class="itemizedlist"><ul type="disc"><li><p><a class="indexterm" name="id2637540"></a><a class="indexterm" name="id2637548"></a><a class="indexterm" name="id2637556"></a><a class="indexterm" name="id2637564"></a>
+		</p><div class="itemizedlist"><ul type="disc"><li><p><a class="indexterm" name="id399144"></a><a class="indexterm" name="id399152"></a><a class="indexterm" name="id399160"></a><a class="indexterm" name="id399168"></a>
 			Winbind honors and does not override account controls set in Active Directory.
 			This means that password change, logon hours, and so on, are (or soon will be) enforced
 			by Samba winbind. At this time, an out-of-hours login is denied and password
 			change is enforced. At this time, if logon hours expire, the user is not forcibly
 			logged off. That may be implemented at some later date.
-			</p></li><li><p><a class="indexterm" name="id2637583"></a><a class="indexterm" name="id2637591"></a>
+			</p></li><li><p><a class="indexterm" name="id399183"></a><a class="indexterm" name="id399191"></a>
 			Sign'n'seal (plus schannel support) has been implemented in Samba-3. Beware of potential
 			problems acknowledged by Microsoft as having been fixed but reported by some as still
 			possibly an open issue.
-			</p></li><li><p><a class="indexterm" name="id2637607"></a><a class="indexterm" name="id2637615"></a><a class="indexterm" name="id2637623"></a><a class="indexterm" name="id2637631"></a>
+			</p></li><li><p><a class="indexterm" name="id399205"></a><a class="indexterm" name="id399213"></a><a class="indexterm" name="id399221"></a><a class="indexterm" name="id399229"></a>
 			The combination of Kerberos 5, plus OpenLDAP, plus Samba, cannot replace Microsoft
 			Active Directory. The possibility to do this is not planned in the current Samba-3
 			roadmap. Samba-3 does aim to provide further improvements in interoperability so that
@@ -723,83 +723,83 @@
 			This chapter reviewed mechanisms by which Samba servers may be kept secure. Each of
 			the four key methodologies was reviewed with specific reference to example deployment
 			techniques.
-			</p></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2637657"></a>Questions and Answers</h2></div></div></div><p>
-	</p><div class="qandaset"><dl><dt> <a href="kerberos.html#id2637673">
+			</p></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id399251"></a>Questions and Answers</h2></div></div></div><p>
+	</p><div class="qandaset"><dl><dt> <a href="kerberos.html#id399266">
 		Does Samba-3 require the Sign'n'seal registry hacks needed by Samba-2?
-		</a></dt><dt> <a href="kerberos.html#id2637744">
+		</a></dt><dt> <a href="kerberos.html#id399334">
 		Does Samba-3 support Active Directory?
-		</a></dt><dt> <a href="kerberos.html#id2637775">
+		</a></dt><dt> <a href="kerberos.html#id399362">
 		When Samba-3 is used with Active Directory, is it necessary to run mixed-mode operation, as was
 		necessary with Samba-2?
-		</a></dt><dt> <a href="kerberos.html#id2637813">
+		</a></dt><dt> <a href="kerberos.html#id399397">
 		Is it safe to set share-level access controls in Samba?
-		</a></dt><dt> <a href="kerberos.html#id2637842">
+		</a></dt><dt> <a href="kerberos.html#id399424">
 		Is it mandatory to set share ACLs to get a secure Samba-3 server?
-		</a></dt><dt> <a href="kerberos.html#id2637919">
+		</a></dt><dt> <a href="kerberos.html#id399496">
 		The valid users did not work on the [homes].
 		Has this functionality been restored yet?
-		</a></dt><dt> <a href="kerberos.html#id2637985">
+		</a></dt><dt> <a href="kerberos.html#id399559">
 		Is the bias against use of the force user and force group
 		really warranted?
-		</a></dt><dt> <a href="kerberos.html#id2638048">
+		</a></dt><dt> <a href="kerberos.html#id399620">
 		The example given for file and directory access control forces all files to be owned by one
 		particular user. I do not like that. Is there any way I can see who created the file?
-		</a></dt><dt> <a href="kerberos.html#id2638096">
+		</a></dt><dt> <a href="kerberos.html#id399664">
 		In the book, &#8220;The Official Samba-3 HOWTO and Reference Guide&#8221;, you recommended use
 		of the Windows NT4 Server Manager (part of the SRVTOOLS.EXE) utility. Why
 		have you mentioned only the use of the Windows 200x/XP MMC Computer Management utility?
-		</a></dt><dt> <a href="kerberos.html#id2638163">
+		</a></dt><dt> <a href="kerberos.html#id399724">
 		I tried to set valid users = @Engineers, but it does not work. My Samba
 		server is an Active Directory domain member server. Has this been fixed now?
-		</a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%"><tbody><tr class="question"><td align="left" valign="top"><a name="id2637673"></a><a name="id2637675"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id2637678"></a><a class="indexterm" name="id2637686"></a>
+		</a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%"><tbody><tr class="question"><td align="left" valign="top"><a name="id399266"></a><a name="id399268"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id399272"></a><a class="indexterm" name="id399280"></a>
 		Does Samba-3 require the <code class="constant">Sign'n'seal</code> registry hacks needed by Samba-2?
-		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id2637706"></a><a class="indexterm" name="id2637714"></a><a class="indexterm" name="id2637721"></a>
+		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id399298"></a><a class="indexterm" name="id399306"></a><a class="indexterm" name="id399314"></a>
 		No. Samba-3 fully supports <code class="constant">Sign'n'seal</code> as well as <code class="constant">schannel</code>
 		operation. The registry change should not be applied when Samba-3 is used as a domain controller.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2637744"></a><a name="id2637746"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id399334"></a><a name="id399337"></a></td><td align="left" valign="top"><p>
 		Does Samba-3 support Active Directory?
-		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id2637756"></a>
+		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id399347"></a>
 		Yes. Samba-3 can be a fully participating native mode Active Directory client. Samba-3 does not
 		provide Active Directory services. It cannot be used to replace a Microsoft Active Directory
 		server implementation. Samba-3 can function as an Active Directory client (workstation) toolkit,
 		and it can function as an Active Directory domain member server.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2637775"></a><a name="id2637777"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id2637780"></a>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id399362"></a><a name="id399364"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id399367"></a>
 		When Samba-3 is used with Active Directory, is it necessary to run mixed-mode operation, as was
 		necessary with Samba-2?
-		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id2637796"></a>
+		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id399383"></a>
 		No. Samba-3 can be used with NetBIOS over TCP/IP disabled, just as can be done with Windows 200x
 		Server and 200x/XPPro client products. It is no longer necessary to run mixed-mode operation,
 		because Samba-3 can join a native Windows 2003 Server ADS domain.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2637813"></a><a name="id2637815"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id2637818"></a>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id399397"></a><a name="id399400"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id399403"></a>
 		Is it safe to set share-level access controls in Samba?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		Yes. Share-level access controls have been supported since early versions of Samba-2. This is
 		very mature technology. Not enough sites make use of this powerful capability, neither on
 		Windows server or with Samba servers.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2637842"></a><a name="id2637845"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id2637848"></a>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id399424"></a><a name="id399426"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id399429"></a>
 		Is it mandatory to set share ACLs to get a secure Samba-3 server?
-		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id2637863"></a><a class="indexterm" name="id2637872"></a><a class="indexterm" name="id2637880"></a><a class="indexterm" name="id2637888"></a><a class="indexterm" name="id2637896"></a>
+		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id399444"></a><a class="indexterm" name="id399452"></a><a class="indexterm" name="id399460"></a><a class="indexterm" name="id399468"></a><a class="indexterm" name="id399476"></a>
 		No. Samba-3 honors UNIX/Linux file system security, supports Windows 200x ACLs, and provides 
 		means of securing shares through share definition controls in the <code class="filename">smb.conf</code> file. The additional
 		support for share-level ACLs is like frosting on the cake. It adds to security but is not essential
 		to it.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2637919"></a><a name="id2637921"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id2637924"></a>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id399496"></a><a name="id399499"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id399502"></a>
 		The <em class="parameter"><code>valid users</code></em> did not work on the <em class="parameter"><code>[homes]</code></em>.
 		Has this functionality been restored yet?
-		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id2637952"></a>
+		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id399529"></a>
 		Yes. This was fixed in Samba-3.0.2. The use of this parameter is strongly recommended as a safeguard
 		on the <em class="parameter"><code>[homes]</code></em> meta-service. The correct way to specify this is:
 		<a class="link" href="smb.conf.5.html#VALIDUSERS">valid users = %S</a>.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2637985"></a><a name="id2637987"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id2637990"></a><a class="indexterm" name="id2637998"></a><a class="indexterm" name="id2638006"></a>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id399559"></a><a name="id399561"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id399564"></a><a class="indexterm" name="id399572"></a><a class="indexterm" name="id399580"></a>
 		Is the bias against use of the <em class="parameter"><code>force user</code></em> and <em class="parameter"><code>force group</code></em>
 		really warranted?
-		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id2638033"></a>
+		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id399606"></a>
 		There is no bias. There is a determination to recommend the right tool for the task at hand.
 		After all, it is better than putting users through performance problems, isn't it?
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2638048"></a><a name="id2638050"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id399620"></a><a name="id399622"></a></td><td align="left" valign="top"><p>
 		The example given for file and directory access control forces all files to be owned by one
 		particular user. I do not like that. Is there any way I can see who created the file?
-		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id2638063"></a>
+		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id399634"></a>
 		Sure. You do not have to set the SUID bit on the directory. Simply execute the following command
 		to permit file ownership to be retained by the user who created it:
 </p><pre class="screen">
@@ -807,20 +807,20 @@
 </pre><p>
 		Note that this required no more than removing the <code class="constant">u</code> argument so that the
 		SUID bit is not set for the owner.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2638096"></a><a name="id2638099"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id2638102"></a>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id399664"></a><a name="id399666"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id399669"></a>
 		In the book, &#8220;<span class="quote">The Official Samba-3 HOWTO and Reference Guide</span>&#8221;, you recommended use
 		of the Windows NT4 Server Manager (part of the <code class="filename">SRVTOOLS.EXE</code>) utility. Why
 		have you mentioned only the use of the Windows 200x/XP MMC Computer Management utility?
-		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id2638130"></a><a class="indexterm" name="id2638137"></a>
+		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id399695"></a><a class="indexterm" name="id399702"></a>
 		Either tool can be used with equal effect. There is no benefit of one over the other, except that
 		the MMC utility is present on all Windows 200x/XP systems and does not require additional software
 		to be downloaded and installed. Note that if you want to manage user and group accounts in your
 		Samba-controlled domain, the only tool that permits that is the NT4 Domain User Manager, which
 		is provided as part of the <code class="filename">SRVTOOLS.EXE</code> utility.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2638163"></a><a name="id2638165"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id2638168"></a><a class="indexterm" name="id2638176"></a><a class="indexterm" name="id2638184"></a>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id399724"></a><a name="id399726"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id399730"></a><a class="indexterm" name="id399737"></a><a class="indexterm" name="id399745"></a>
 		I tried to set <em class="parameter"><code>valid users = @Engineers</code></em>, but it does not work. My Samba
 		server is an Active Directory domain member server. Has this been fixed now?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		The use of this parameter has always required the full specification of the domain account, for
 		example, <em class="parameter"><code>valid users = @"MEGANET2\Domain Admins"</code></em>.
-		</p></td></tr></tbody></table></div></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"></div><div class="footnote"><a class="ulink" href="http://199.105.191.226/Man/2699/020430msdoj/" target="_top"><sup>[<a name="ftn.id2635278" href="#id2635278" class="ulink">13</a>] </sup>ITWorld.com</a></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="RefSection.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="RefSection.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="DomApps.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part III. Reference Section </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 12. Integrating Additional Services</td></tr></table></div></body></html>
+		</p></td></tr></tbody></table></div></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"></div><div class="footnote"><a class="ulink" href="http://199.105.191.226/Man/2699/020430msdoj/" target="_top"><sup>[<a name="ftn.id397060" href="#id397060" class="ulink">13</a>] </sup>ITWorld.com</a></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="RefSection.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="RefSection.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="DomApps.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part III. Reference Section </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 12. Integrating Additional Services</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/ntmigration.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/ntmigration.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/ntmigration.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 9. Migrating NT4 Domain to Samba-3</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="DMSMig.html" title="Part II. Domain Members, Updating Samba and Migration"><link rel="prev" href="upgrades.html" title="Chapter 8. Updating Samba-3"><link rel="next" href="nw4migration.html" title="Chapter 10. Migrating NetWare Server to Samba-3"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 9. Migrating NT4 Domain to Samba-3</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="upgrades.html">Prev</a> </td><th width="60%" align="center">Part II. Domain Members, Updating Samba and Migration</th><td width="20%" align="right"> <a accesskey="n" href="nw4migration.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="ntmigration"></a>Chapter 9. Migrating NT4 Domain to Samba-3</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ntmigration.html#id2623461">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntmigration.html#id2623546">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntmigration.html#id2623601">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntmigration.html#id2623787">Technical Issues</a></span></dt><dt><span class="sect2"><a href="ntmigration.html#id2624110">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntmigration.html#id2624136">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntmigration.html#id2624277">NT4 Migration Using LDAP Backend</a></span></dt><dt><span class="sect2"><a href="ntmigration.html#id2626735">NT4 Migration Using tdbsam Backend</a></span></dt><dt><span class="sect2"><a href="ntmigration.html#id2627142">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntmigration.html#id2627180">Questions and Answers</a></span></dt></dl></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 9. Migrating NT4 Domain to Samba-3</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="DMSMig.html" title="Part II. Domain Members, Updating Samba and Migration"><link rel="prev" href="upgrades.html" title="Chapter 8. Updating Samba-3"><link rel="next" href="nw4migration.html" title="Chapter 10. Migrating NetWare Server to Samba-3"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 9. Migrating NT4 Domain to Samba-3</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="upgrades.html">Prev</a> </td><th width="60%" align="center">Part II. Domain Members, Updating Samba and Migration</th><td width="20%" align="right"> <a accesskey="n" href="nw4migration.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="ntmigration"></a>Chapter 9. Migrating NT4 Domain to Samba-3</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ntmigration.html#id386514">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntmigration.html#id386589">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntmigration.html#id386640">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntmigration.html#id386802">Technical Issues</a></span></dt><dt><span class="sect2"><a href="ntmigration.html#id387105">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntmigration.html#id387125">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntmigration.html#id387250">NT4 Migration Using LDAP Backend</a></span></dt><dt><span class="sect2"><a href="ntmigration.html#id389442">NT4 Migration Using tdbsam Backend</a></span></dt><dt><span class="sect2"><a href="ntmigration.html#id389787">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntmigration.html#id389822">Questions and Answers</a></span></dt></dl></div><p>
 	Ever since Microsoft announced that it was discontinuing support for Windows
 	NT4, Samba users started to ask for detailed instructions on how to migrate
 	from NT4 to Samba-3. This chapter provides background information that should
@@ -6,23 +6,23 @@
 	</p><p>
 	One wonders how many NT4 systems will be left in service by the time you read this
 	book though.
-	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2623461"></a>Introduction</h2></div></div></div><p><a class="indexterm" name="id2623467"></a>
+	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id386514"></a>Introduction</h2></div></div></div><p><a class="indexterm" name="id386520"></a>
 	Network administrators who want to migrate off a Windows NT4 environment know
 	one thing with certainty. They feel that NT4 has been abandoned, and they want
 	to update. The desire to get off NT4 and to not adopt Windows 200x and Active
 	Directory is driven by a mixture of concerns over complexity, cost, fear of
 	failure, and much more.
 	</p><p>
-	<a class="indexterm" name="id2623485"></a>
-	<a class="indexterm" name="id2623492"></a>
-	<a class="indexterm" name="id2623501"></a>
-	<a class="indexterm" name="id2623511"></a>
+	<a class="indexterm" name="id386535"></a>
+	<a class="indexterm" name="id386542"></a>
+	<a class="indexterm" name="id386551"></a>
+	<a class="indexterm" name="id386560"></a>
 	The migration from NT4 to Samba-3 can involve a number of factors, including
 	migration of data to another server, migration of network environment controls
 	such as group policies, and migration of the users, groups, and machine
 	accounts.
 	</p><p>
-	<a class="indexterm" name="id2623527"></a>
+	<a class="indexterm" name="id386575"></a>
 	It should be pointed out now that it is possible to migrate some systems from
 	a Windows NT4 domain environment to a Samba-3 domain environment. This is certainly
 	not possible in every case. It is possible to just migrate the domain accounts
@@ -30,10 +30,10 @@
 	the exception than the rule. Most systems require some tweaking after
 	migration before an environment that is acceptable for immediate use
 	is obtained.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2623546"></a>Assignment Tasks</h3></div></div></div><p>
-	<a class="indexterm" name="id2623554"></a>
-	<a class="indexterm" name="id2623560"></a>
-	<a class="indexterm" name="id2623567"></a>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id386589"></a>Assignment Tasks</h3></div></div></div><p>
+	<a class="indexterm" name="id386597"></a>
+	<a class="indexterm" name="id386604"></a>
+	<a class="indexterm" name="id386611"></a>
 	You are about to migrate an MS Windows NT4 domain accounts database to
 	a Samba-3 server. The Samba-3 server is using a 
 	<em class="parameter"><code>passdb backend</code></em> based on LDAP. The 
@@ -42,27 +42,27 @@
 	</p><p>
 	Your objective is to document the process of migrating user and group accounts
 	from several NT4 domains into a single Samba-3 LDAP backend database.
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2623601"></a>Dissection and Discussion</h2></div></div></div><p>
-	<a class="indexterm" name="id2623608"></a>
-	<a class="indexterm" name="id2623615"></a>
-	<a class="indexterm" name="id2623622"></a>
-	<a class="indexterm" name="id2623633"></a>
-	<a class="indexterm" name="id2623645"></a>
-	<a class="indexterm" name="id2623651"></a>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id386640"></a>Dissection and Discussion</h2></div></div></div><p>
+	<a class="indexterm" name="id386648"></a>
+	<a class="indexterm" name="id386654"></a>
+	<a class="indexterm" name="id386661"></a>
+	<a class="indexterm" name="id386672"></a>
+	<a class="indexterm" name="id386684"></a>
+	<a class="indexterm" name="id386691"></a>
 	The migration process takes a snapshot of information that is stored in the
 	Windows NT4 registry-based accounts database. That information resides in
 	the Security Account Manager (SAM) portion of the NT4 registry under keys called
 	<code class="constant">SAM</code> and <code class="constant">SECURITY</code>.
 	</p><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p>
-	<a class="indexterm" name="id2623676"></a>
-	<a class="indexterm" name="id2623683"></a>
+	<a class="indexterm" name="id386713"></a>
+	<a class="indexterm" name="id386720"></a>
 	The Windows NT4 registry keys called <code class="constant">SAM</code> and <code class="constant">SECURITY</code>
 	are protected so that you cannot view the contents. If you change the security setting
 	to reveal the contents under these hive keys, your Windows NT4 domain is crippled. Do not
 	do this unless you are willing to render your domain controller inoperative.
 	</p></div><p>
-	<a class="indexterm" name="id2623705"></a>
-	<a class="indexterm" name="id2623714"></a>
+	<a class="indexterm" name="id386739"></a>
+	<a class="indexterm" name="id386749"></a>
 	Before commencing an NT4 to Samba-3 migration, you should consider what your objectives are.
 	While in some cases it is possible simply to migrate an NT4 domain to a single Samba-3 server,
 	that may not be a good idea from an administration perspective. Since the process involves going
@@ -70,9 +70,9 @@
 	review the structure of the network, how Windows clients are controlled and how they
 	interact with the network environment.
 	</p><p>
-	<a class="indexterm" name="id2623732"></a>
-	<a class="indexterm" name="id2623742"></a>
-	<a class="indexterm" name="id2623749"></a>
+	<a class="indexterm" name="id386763"></a>
+	<a class="indexterm" name="id386772"></a>
+	<a class="indexterm" name="id386779"></a>
 	MS Windows NT4 was introduced some time around 1996. Many environments in which NT4 was deployed
 	have done little to keep the NT4 server environment up to date with more recent Windows releases, 
 	particularly Windows XP Professional. The migration provides opportunity to revise and update 
@@ -83,9 +83,9 @@
 	as a good time to update desktop systems also. In all, the extra effort should constitute no
 	real disruption to users, but rather, with due diligence and care, should make their network experience
 	a much happier one.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2623787"></a>Technical Issues</h3></div></div></div><p>
-	<a class="indexterm" name="id2623794"></a>
-	<a class="indexterm" name="id2623801"></a>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id386802"></a>Technical Issues</h3></div></div></div><p>
+	<a class="indexterm" name="id386810"></a>
+	<a class="indexterm" name="id386816"></a>
 	Migration of an NT4 domain user and group database to Samba-3 involves a certain strategic
 	element. Many sites have asked for instructions regarding merging of multiple NT4
 	domains into one Samba-3 LDAP database. It seems that this is viewed as a significant
@@ -93,35 +93,35 @@
 	Directory. The diagram in <a class="link" href="ntmigration.html#ch8-migration" title="Figure 9.1. Schematic Explaining the net rpc vampire Process">&#8220;Schematic Explaining the net rpc vampire Process&#8221;</a> illustrates the effect of migration
 	from a Windows NT4 domain to a Samba domain.
 	</p><div class="figure"><a name="ch8-migration"></a><p class="title"><b>Figure 9.1. Schematic Explaining the <code class="literal">net rpc vampire</code> Process</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/ch8-migration.png" width="297" alt="Schematic Explaining the net rpc vampire Process"></div></div></div><br class="figure-break"><p>
-	<a class="indexterm" name="id2623874"></a>
-	<a class="indexterm" name="id2623881"></a>
+	<a class="indexterm" name="id386884"></a>
+	<a class="indexterm" name="id386891"></a>
 	If you want to merge multiple NT4 domain account databases into one Samba domain,
 	you must now dump the contents of the first migration and edit it as appropriate. Now clean
 	out (remove) the tdbsam backend file (<code class="filename">passdb.tdb</code>) or the LDAP database
 	files. You must start each migration with a new database into which you merge your NT4 
 	domains.
-	</p><p><a class="indexterm" name="id2623902"></a>
+	</p><p><a class="indexterm" name="id386908"></a>
 	At this point, you are ready to perform the second migration, following the same steps as
 	for the first. In other words, dump the database, edit it, and then you may merge the
 	dump for the first and second migrations.
-	</p><p><a class="indexterm" name="id2623917"></a><a class="indexterm" name="id2623925"></a><a class="indexterm" name="id2623932"></a>
+	</p><p><a class="indexterm" name="id386922"></a><a class="indexterm" name="id386929"></a><a class="indexterm" name="id386937"></a>
 	You must be careful. If you choose to migrate to an LDAP backend, your dump file
 	now contains the full account information, including the domain SID. The domain SID for each 
 	of the two NT4 domains will be different. You must choose one and change the domain 
 	portion of the account SIDs so that all are the same.
 	</p><p>
-	<a class="indexterm" name="id2623950"></a>
-	<a class="indexterm" name="id2623957"></a>
-	<a class="indexterm" name="id2623964"></a>
-	<a class="indexterm" name="id2623970"></a>
-	<a class="indexterm" name="id2623977"></a>
-	<a class="indexterm" name="id2623984"></a>
-	<a class="indexterm" name="id2623991"></a>
-	<a class="indexterm" name="id2623998"></a>
-	<a class="indexterm" name="id2624005"></a>
-	<a class="indexterm" name="id2624012"></a>
-	<a class="indexterm" name="id2624019"></a>
-	<a class="indexterm" name="id2624025"></a>
+	<a class="indexterm" name="id386952"></a>
+	<a class="indexterm" name="id386959"></a>
+	<a class="indexterm" name="id386966"></a>
+	<a class="indexterm" name="id386973"></a>
+	<a class="indexterm" name="id386979"></a>
+	<a class="indexterm" name="id386986"></a>
+	<a class="indexterm" name="id386993"></a>
+	<a class="indexterm" name="id387000"></a>
+	<a class="indexterm" name="id387007"></a>
+	<a class="indexterm" name="id387013"></a>
+	<a class="indexterm" name="id387020"></a>
+	<a class="indexterm" name="id387027"></a>
 	If you choose to use a tdbsam (<code class="filename">passdb.tdb</code>) backend file, your best choice
 	is to use <code class="literal">pdbedit</code> to export the contents of the tdbsam file into an
 	smbpasswd data file. This automatically strips out all domain-specific information,
@@ -131,7 +131,7 @@
 	file must have an account in <code class="filename">/etc/passwd</code>. The resulting smbpasswd file
 	may be exported or imported into either a tdbsam (<code class="filename">passdb.tdb</code>) or
 	an LDAP backend.
-	</p><div class="figure"><a name="NT4DUM"></a><p class="title"><b>Figure 9.2. View of Accounts in NT4 Domain User Manager</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/UserMgrNT4.png" width="270" alt="View of Accounts in NT4 Domain User Manager"></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2624110"></a>Political Issues</h3></div></div></div><p>
+	</p><div class="figure"><a name="NT4DUM"></a><p class="title"><b>Figure 9.2. View of Accounts in NT4 Domain User Manager</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/UserMgrNT4.png" width="270" alt="View of Accounts in NT4 Domain User Manager"></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id387105"></a>Political Issues</h3></div></div></div><p>
 	The merging of multiple Windows NT4-style domains into a single LDAP-backend-based Samba-3
 	domain may be seen by those who had power over them as a loss of prestige or a loss of
 	power. The imposition of a single domain may even be seen as a threat. So in migrating and
@@ -141,7 +141,7 @@
 	The best advice that can be given to those who set out to merge NT4 domains into a single
 	Samba-3 domain is to promote (sell) the action as one that reduces costs and delivers
 	greater network interoperability and manageability.
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2624136"></a>Implementation</h2></div></div></div><p>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id387125"></a>Implementation</h2></div></div></div><p>
 	From feedback on the Samba mailing lists, it seems that most Windows NT4 migrations
 	to Samba-3 are being performed using a new server or a new installation of a Linux or UNIX
 	server. If you contemplate doing this, please note that the steps that follow in this
@@ -164,9 +164,9 @@
 		Prepare the target Samba-3 server. This involves configuring Samba-3 for
 		migration to either a tdbsam or an ldapsam backend.
 		</p></li><li><p>
-		<a class="indexterm" name="id2624223"></a>
-		<a class="indexterm" name="id2624229"></a>
-		<a class="indexterm" name="id2624236"></a>
+		<a class="indexterm" name="id387200"></a>
+		<a class="indexterm" name="id387207"></a>
+		<a class="indexterm" name="id387214"></a>
 		Clean up the source NT4 PDC. Delete all accounts that need not be migrated.
 		Delete all files that should not be migrated. Where possible, change NT group
 		names so there are no spaces or uppercase characters. This is important if
@@ -174,14 +174,14 @@
 		names.
 		</p></li><li><p>
 		Step through the migration process.
-		</p></li><li><p><a class="indexterm" name="id2624257"></a>
+		</p></li><li><p><a class="indexterm" name="id387232"></a>
 		Remove the NT4 PDC from the network.
 		</p></li><li><p>
 		Upgrade the Samba-3 server from a BDC to a PDC, and validate all account
 		information.
 		</p></li></ul></div><p>
 	It may help to use the above outline as a pre-migration checklist.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2624277"></a>NT4 Migration Using LDAP Backend</h3></div></div></div><p>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id387250"></a>NT4 Migration Using LDAP Backend</h3></div></div></div><p>
 	In this example, the migration is of an NT4 PDC to a Samba-3 PDC with an LDAP backend. The accounts about
 	to be migrated are shown in <a class="link" href="ntmigration.html#NT4DUM" title="Figure 9.2. View of Accounts in NT4 Domain User Manager">&#8220;View of Accounts in NT4 Domain User Manager&#8221;</a>. In this example use is made of the
 	smbldap-tools scripts to add the accounts that are migrated into the ldapsam passdb backend.
@@ -199,9 +199,9 @@
 	Delete the <code class="filename">/etc/samba/secrets.tdb</code> file and all Samba control tdb files
 	before commencing the following configuration steps.
 	</p></div><div class="table"><a name="ch8-vampire"></a><p class="title"><b>Table 9.1. Samba <code class="filename">smb.conf</code> Scripts Essential to Samba Operation</b></p><div class="table-contents"><table summary="Samba smb.conf Scripts Essential to Samba Operation" border="1"><colgroup><col align="left"><col align="center"><col align="center"></colgroup><thead><tr><th align="left">Entity</th><th align="center">ldapsam Script</th><th align="center">tdbsam Script</th></tr></thead><tbody><tr><td align="left">Add User Accounts</td><td align="center">smbldap-useradd</td><td align="center">useradd</td></tr><tr><td align="left">Delete User Accounts</td><td align="center">smbldap-userdel</td><td align="center">userdel</td></tr><tr><td align="left">Add Group Accounts</td><td align="center">smbldap-groupadd</td><td align="center">groupadd</td></tr><tr><td align="left">Delete Group Accounts</td><td align="center">smbldap-groupdel</td><td align="center">groupdel</td></tr><tr><td align="left">Add User to Group</td><td align="center">smbldap-groupmod</td><td align="center">usermod (See Note)</td></tr><tr><td align="left">Add Machine Accounts</td><td align="center">smbldap-useradd</td><td align="center">useradd</td></tr></tbody></table></div></div><br class="table-break"><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-	<a class="indexterm" name="id2624479"></a>
-	<a class="indexterm" name="id2624486"></a>
-	<a class="indexterm" name="id2624493"></a>
+	<a class="indexterm" name="id387440"></a>
+	<a class="indexterm" name="id387447"></a>
+	<a class="indexterm" name="id387453"></a>
 	The UNIX/Linux <code class="literal">usermod</code> utility does not permit simple user addition to (or deletion
 	of users from) groups. This is a feature provided by the smbldap-tools scripts. If you want this
 	capability, you must create your own tool to do this. Alternately, you can search the Web
@@ -209,13 +209,13 @@
 	The <code class="literal">groupmem</code> utility was contributed to the shadow package but has not surfaced
 	in the formal commands provided by Linux distributions (March 2004).
 	</p></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-	<a class="indexterm" name="id2624530"></a>
+	<a class="indexterm" name="id387486"></a>
 	The <code class="literal">tdbdump</code> utility is a utility that you can build from the Samba source-code tree. Not all Linux binary distributions include this tool. If it is missing from your
 	Linux distribution, you will need to build this yourself or else forgo its use.
 	</p></div><p>
-	<a class="indexterm" name="id2624550"></a>
+	<a class="indexterm" name="id387504"></a>
 	Before starting the migration, all dead accounts were removed from the NT4 domain using the User Manager for Domains.
-	</p><div class="procedure"><a name="id2624560"></a><p class="title"><b>Procedure 9.1. User Migration Steps</b></p><div class="example"><a name="sbent4smb"></a><p class="title"><b>Example 9.1. NT4 Migration Samba-3 Server <code class="filename">smb.conf</code>  Part: A</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2624621"></a><em class="parameter"><code>workgroup = DAMNATION</code></em></td></tr><tr><td><a class="indexterm" name="id2624632"></a><em class="parameter"><code>netbios name = MERLIN</code></em></td></tr><tr><td><a class="indexterm" name="id2624644"></a><em class="parameter"><code>passdb backend = ldapsam:ldap://localhost</code></em></td></tr><tr><td><a class="indexterm" name="id2624656"></a><em class="parameter"><code>log level = 1</code></em></td></tr><tr><td><a class="indexterm" name="id2624668"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id2624679"></a><em class="parameter"><code>log file = /var/log/samba/%m</code></em></td></tr><tr><td><a class="indexterm" name="id2624691"></a><em class="parameter"><code>max log size = 0</code></em></td></tr><tr><td><a class="indexterm" name="id2624703"></a><em class="parameter"><code>smb ports = 139 445</code></em></td></tr><tr><td><a class="indexterm" name="id2624715"></a><em class="parameter"><code>name resolve order = wins bcast hosts</code></em></td></tr><tr><td><a class="indexterm" name="id2624727"></a><em class="parameter"><code>add user script = /opt/IDEALX/sbin/smbldap-useradd -m '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2624739"></a><em class="parameter"><code>#delete user script = /opt/IDEALX/sbin/smbldap-userdel '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2624752"></a><em class="parameter"><code>add group script = /opt/IDEALX/sbin/smbldap-groupadd '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id2624764"></a><em class="parameter"><code>#delete group script = /opt/IDEALX/sbin/smbldap-groupdel '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id2624777"></a><em class="parameter"><code>add user to group script = /opt/IDEALX/sbin/ smbldap-groupmod -m '%u' '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id2624789"></a><em class="parameter"><code>#delete user from group script = /opt/IDEALX/sbin/smbldap-groupmod -x '%u' '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id2624802"></a><em class="parameter"><code>set primary group script = /opt/IDEALX/sbin/smbldap-usermod -g '%g' '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2624815"></a><em class="parameter"><code>add machine script = /opt/IDEALX/sbin/smbldap-useradd -w '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2624828"></a><em class="parameter"><code>logon script = scripts\logon.cmd</code></em></td></tr><tr><td><a class="indexterm" name="id2624840"></a><em class="parameter"><code>logon path = \\%L\profiles\%U</code></em></td></tr><tr><td><a class="indexterm" name="id2624852"></a><em class="parameter"><code>logon home = \\%L\%U</code></em></td></tr><tr><td><a class="indexterm" name="id2624863"></a><em class="parameter"><code>logon drive = X:</code></em></td></tr><tr><td><a class="indexterm" name="id2624875"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2624887"></a><em class="parameter"><code>domain master = No</code></em></td></tr><tr><td><a class="indexterm" name="id2624898"></a><em class="parameter"><code>#wins support = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2624910"></a><em class="parameter"><code>wins server = 192.168.123.124</code></em></td></tr><tr><td><a class="indexterm" name="id2624922"></a><em class="parameter"><code>ldap admin dn = cn=Manager,dc=terpstra-world,dc=org</code></em></td></tr><tr><td><a class="indexterm" name="id2624934"></a><em class="parameter"><code>ldap group suffix = ou=Groups</code></em></td></tr><tr><td><a class="indexterm" name="id2624946"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr><tr><td><a class="indexterm" name="id2624958"></a><em class="parameter"><code>ldap machine suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2624970"></a><em class="parameter"><code>ldap passwd sync = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2624982"></a><em class="parameter"><code>ldap suffix = dc=terpstra-world,dc=org</code></em></td></tr><tr><td><a class="indexterm" name="id2624994"></a><em class="parameter"><code>ldap ssl = no</code></em></td></tr><tr><td><a class="indexterm" name="id2625006"></a><em class="parameter"><code>ldap timeout = 20</code></em></td></tr><tr><td><a class="indexterm" name="id2625018"></a><em class="parameter"><code>ldap user suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2625030"></a><em class="parameter"><code>idmap backend = ldap:ldap://localhost</code></em></td></tr><tr><td><a class="indexterm" name="id2625042"></a><em class="parameter"><code>idmap uid = 15000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2625053"></a><em class="parameter"><code>idmap gid = 15000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2625065"></a><em class="parameter"><code>winbind nested groups = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2625077"></a><em class="parameter"><code>ea support = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2625089"></a><em class="parameter"><code>map acl inherit = Yes</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="sbent4smb2"></a><p class="title"><b>Example 9.2. NT4 Migration Samba-3 Server <code class="filename">smb.conf</code>  Part: B</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[apps]</code></em></td></tr><tr><td><a class="indexterm" name="id2625134"></a><em class="parameter"><code>comment = Application Data</code></em></td></tr><tr><td><a class="indexterm" name="id2625146"></a><em class="parameter"><code>path = /data/home/apps</code></em></td></tr><tr><td><a class="indexterm" name="id2625158"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id2625178"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id2625190"></a><em class="parameter"><code>path = /home/users/%U/Documents</code></em></td></tr><tr><td><a class="indexterm" name="id2625202"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id2625213"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2625225"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2625245"></a><em class="parameter"><code>comment = SMB Print Spool</code></em></td></tr><tr><td><a class="indexterm" name="id2625257"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2625269"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2625280"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2625292"></a><em class="parameter"><code>use client driver = No</code></em></td></tr><tr><td><a class="indexterm" name="id2625304"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id2625324"></a><em class="parameter"><code>comment = Network Logon Service</code></em></td></tr><tr><td><a class="indexterm" name="id2625336"></a><em class="parameter"><code>path = /var/lib/samba/netlogon</code></em></td></tr><tr><td><a class="indexterm" name="id2625348"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2625360"></a><em class="parameter"><code>locking = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[profiles]</code></em></td></tr><tr><td><a class="indexterm" name="id2625380"></a><em class="parameter"><code>comment = Profile Share</code></em></td></tr><tr><td><a class="indexterm" name="id2625392"></a><em class="parameter"><code>path = /var/lib/samba/profiles</code></em></td></tr><tr><td><a class="indexterm" name="id2625404"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2625416"></a><em class="parameter"><code>profile acls = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[profdata]</code></em></td></tr><tr><td><a class="indexterm" name="id2625436"></a><em class="parameter"><code>comment = Profile Data Share</code></em></td></tr><tr><td><a class="indexterm" name="id2625448"></a><em class="parameter"><code>path = /var/lib/samba/profdata</code></em></td></tr><tr><td><a class="indexterm" name="id2625460"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2625472"></a><em class="parameter"><code>profile acls = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[print$]</code></em></td></tr><tr><td><a class="indexterm" name="id2625492"></a><em class="parameter"><code>comment = Printer Drivers</code></em></td></tr><tr><td><a class="indexterm" name="id2625504"></a><em class="parameter"><code>path = /var/lib/samba/drivers</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="sbentslapd"></a><p class="title"><b>Example 9.3. NT4 Migration LDAP Server Configuration File: <code class="filename">/etc/openldap/slapd.conf</code>  Part A</b></p><div class="example-contents"><pre class="screen">
+	</p><div class="procedure"><a name="id387514"></a><p class="title"><b>Procedure 9.1. User Migration Steps</b></p><div class="example"><a name="sbent4smb"></a><p class="title"><b>Example 9.1. NT4 Migration Samba-3 Server <code class="filename">smb.conf</code>  Part: A</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id387571"></a><em class="parameter"><code>workgroup = DAMNATION</code></em></td></tr><tr><td><a class="indexterm" name="id387583"></a><em class="parameter"><code>netbios name = MERLIN</code></em></td></tr><tr><td><a class="indexterm" name="id387594"></a><em class="parameter"><code>passdb backend = ldapsam:ldap://localhost</code></em></td></tr><tr><td><a class="indexterm" name="id387606"></a><em class="parameter"><code>log level = 1</code></em></td></tr><tr><td><a class="indexterm" name="id387618"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id387629"></a><em class="parameter"><code>log file = /var/log/samba/%m</code></em></td></tr><tr><td><a class="indexterm" name="id387641"></a><em class="parameter"><code>max log size = 0</code></em></td></tr><tr><td><a class="indexterm" name="id387652"></a><em class="parameter"><code>smb ports = 139 445</code></em></td></tr><tr><td><a class="indexterm" name="id387664"></a><em class="parameter"><code>name resolve order = wins bcast hosts</code></em></td></tr><tr><td><a class="indexterm" name="id387675"></a><em class="parameter"><code>add user script = /opt/IDEALX/sbin/smbldap-useradd -m '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id387687"></a><em class="parameter"><code>#delete user script = /opt/IDEALX/sbin/smbldap-userdel '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id387699"></a><em class="parameter"><code>add group script = /opt/IDEALX/sbin/smbldap-groupadd '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id387711"></a><em class="parameter"><code>#delete group script = /opt/IDEALX/sbin/smbldap-groupdel '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id387723"></a><em class="parameter"><code>add user to group script = /opt/IDEALX/sbin/ smbldap-groupmod -m '%u' '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id387735"></a><em class="parameter"><code>#delete user from group script = /opt/IDEALX/sbin/smbldap-groupmod -x '%u' '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id387747"></a><em class="parameter"><code>set primary group script = /opt/IDEALX/sbin/smbldap-usermod -g '%g' '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id387759"></a><em class="parameter"><code>add machine script = /opt/IDEALX/sbin/smbldap-useradd -w '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id387771"></a><em class="parameter"><code>logon script = scripts\logon.cmd</code></em></td></tr><tr><td><a class="indexterm" name="id387782"></a><em class="parameter"><code>logon path = \\%L\profiles\%U</code></em></td></tr><tr><td><a class="indexterm" name="id387794"></a><em class="parameter"><code>logon home = \\%L\%U</code></em></td></tr><tr><td><a class="indexterm" name="id387806"></a><em class="parameter"><code>logon drive = X:</code></em></td></tr><tr><td><a class="indexterm" name="id387817"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id387828"></a><em class="parameter"><code>domain master = No</code></em></td></tr><tr><td><a class="indexterm" name="id387840"></a><em class="parameter"><code>#wins support = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id387851"></a><em class="parameter"><code>wins server = 192.168.123.124</code></em></td></tr><tr><td><a class="indexterm" name="id387863"></a><em class="parameter"><code>ldap admin dn = cn=Manager,dc=terpstra-world,dc=org</code></em></td></tr><tr><td><a class="indexterm" name="id387875"></a><em class="parameter"><code>ldap group suffix = ou=Groups</code></em></td></tr><tr><td><a class="indexterm" name="id387886"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr><tr><td><a class="indexterm" name="id387898"></a><em class="parameter"><code>ldap machine suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id387910"></a><em class="parameter"><code>ldap passwd sync = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id387921"></a><em class="parameter"><code>ldap suffix = dc=terpstra-world,dc=org</code></em></td></tr><tr><td><a class="indexterm" name="id387933"></a><em class="parameter"><code>ldap ssl = no</code></em></td></tr><tr><td><a class="indexterm" name="id387944"></a><em class="parameter"><code>ldap timeout = 20</code></em></td></tr><tr><td><a class="indexterm" name="id387956"></a><em class="parameter"><code>ldap user suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id387967"></a><em class="parameter"><code>idmap backend = ldap:ldap://localhost</code></em></td></tr><tr><td><a class="indexterm" name="id387979"></a><em class="parameter"><code>idmap uid = 15000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id387990"></a><em class="parameter"><code>idmap gid = 15000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id388002"></a><em class="parameter"><code>winbind nested groups = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id388013"></a><em class="parameter"><code>ea support = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id388025"></a><em class="parameter"><code>map acl inherit = Yes</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="sbent4smb2"></a><p class="title"><b>Example 9.2. NT4 Migration Samba-3 Server <code class="filename">smb.conf</code>  Part: B</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[apps]</code></em></td></tr><tr><td><a class="indexterm" name="id388069"></a><em class="parameter"><code>comment = Application Data</code></em></td></tr><tr><td><a class="indexterm" name="id388081"></a><em class="parameter"><code>path = /data/home/apps</code></em></td></tr><tr><td><a class="indexterm" name="id388092"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id388113"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id388124"></a><em class="parameter"><code>path = /home/users/%U/Documents</code></em></td></tr><tr><td><a class="indexterm" name="id388136"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id388147"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id388159"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id388179"></a><em class="parameter"><code>comment = SMB Print Spool</code></em></td></tr><tr><td><a class="indexterm" name="id388191"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id388202"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id388214"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id388225"></a><em class="parameter"><code>use client driver = No</code></em></td></tr><tr><td><a class="indexterm" name="id388237"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id388257"></a><em class="parameter"><code>comment = Network Logon Service</code></em></td></tr><tr><td><a class="indexterm" name="id388269"></a><em class="parameter"><code>path = /var/lib/samba/netlogon</code></em></td></tr><tr><td><a class="indexterm" name="id388280"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id388292"></a><em class="parameter"><code>locking = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[profiles]</code></em></td></tr><tr><td><a class="indexterm" name="id388312"></a><em class="parameter"><code>comment = Profile Share</code></em></td></tr><tr><td><a class="indexterm" name="id388324"></a><em class="parameter"><code>path = /var/lib/samba/profiles</code></em></td></tr><tr><td><a class="indexterm" name="id388335"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id388347"></a><em class="parameter"><code>profile acls = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[profdata]</code></em></td></tr><tr><td><a class="indexterm" name="id388367"></a><em class="parameter"><code>comment = Profile Data Share</code></em></td></tr><tr><td><a class="indexterm" name="id388379"></a><em class="parameter"><code>path = /var/lib/samba/profdata</code></em></td></tr><tr><td><a class="indexterm" name="id388390"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id388402"></a><em class="parameter"><code>profile acls = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[print$]</code></em></td></tr><tr><td><a class="indexterm" name="id388422"></a><em class="parameter"><code>comment = Printer Drivers</code></em></td></tr><tr><td><a class="indexterm" name="id388434"></a><em class="parameter"><code>path = /var/lib/samba/drivers</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="sbentslapd"></a><p class="title"><b>Example 9.3. NT4 Migration LDAP Server Configuration File: <code class="filename">/etc/openldap/slapd.conf</code>  Part A</b></p><div class="example-contents"><pre class="screen">
 include         /etc/openldap/schema/core.schema
 include         /etc/openldap/schema/cosine.schema
 include         /etc/openldap/schema/inetorgperson.schema
@@ -336,18 +336,18 @@
 		The delete scripts are commented out so that during the process of migration
 		no account information can be deleted.
 		</p></li><li><p>
-		<a class="indexterm" name="id2625522"></a>
+		<a class="indexterm" name="id388452"></a>
 		Configure OpenLDAP in preparation for the migration. An example
 		<code class="filename">sladp.conf</code> file is shown in <a class="link" href="ntmigration.html#sbentslapd" title="Example 9.3. NT4 Migration LDAP Server Configuration File: /etc/openldap/slapd.conf Part A">&#8220;NT4 Migration LDAP Server Configuration File: /etc/openldap/slapd.conf  Part A&#8221;</a>.
 		The <code class="constant">rootpw</code> value is an encrypted password string that can
 		be obtained by executing the <code class="literal">slappasswd</code> command.
 		</p></li><li><p>
-		<a class="indexterm" name="id2625636"></a>
-		<a class="indexterm" name="id2625643"></a>
+		<a class="indexterm" name="id388551"></a>
+		<a class="indexterm" name="id388557"></a>
 		Install the PADL <code class="literal">nss_ldap</code> tool set, then configure the <code class="filename">/etc/ldap.conf</code>
 		as shown in <a class="link" href="ntmigration.html#sbrntldapconf" title="Example 9.5. NT4 Migration NSS LDAP File: /etc/ldap.conf">&#8220;NT4 Migration NSS LDAP File: /etc/ldap.conf&#8221;</a>.
 		</p></li><li><p>
-		<a class="indexterm" name="id2625704"></a>
+		<a class="indexterm" name="id388613"></a>
 		Edit the <code class="filename">/etc/nsswitch.conf</code> file so it has the entries shown
 		in <a class="link" href="ntmigration.html#sbentnss" title="Example 9.6. NT4 Migration NSS Control File: /etc/nsswitch.conf (Stage:1)">&#8220;NT4 Migration NSS Control File: /etc/nsswitch.conf (Stage:1)&#8221;</a>. Note that the LDAP entries have been commented out.
 		This is deliberate. If these entries are active (not commented out), and the
@@ -392,10 +392,10 @@
 <code class="prompt">root# </code> net setlocalsid S-1-5-21-1385457007-882775198-1210191635
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2625873"></a>
-		<a class="indexterm" name="id2625880"></a>
-		<a class="indexterm" name="id2625887"></a>
-		<a class="indexterm" name="id2625894"></a>
+		<a class="indexterm" name="id388761"></a>
+		<a class="indexterm" name="id388768"></a>
+		<a class="indexterm" name="id388774"></a>
+		<a class="indexterm" name="id388781"></a>
 		Install the Idealx <code class="literal">smbldap-tools</code> software package, following
 		the instructions given in <a class="link" href="happy.html#sbeidealx" title="Install and Configure Idealx smbldap-tools Scripts">&#8220;Install and Configure Idealx smbldap-tools Scripts&#8221;</a>. The resulting perl scripts
 		should be located in the <code class="filename">/opt/IDEALX/sbin</code> directory.
@@ -489,10 +489,10 @@
   /etc/smbldap-tools/smbldap.conf done.
   /etc/smbldap-tools/smbldap_bind.conf done.
 </pre><p>
-		<a class="indexterm" name="id2626043"></a>
-		<a class="indexterm" name="id2626050"></a>
-		<a class="indexterm" name="id2626057"></a>
-		<a class="indexterm" name="id2626064"></a>
+		<a class="indexterm" name="id388877"></a>
+		<a class="indexterm" name="id388883"></a>
+		<a class="indexterm" name="id388890"></a>
+		<a class="indexterm" name="id388897"></a>
 		Note that the NT4 domain SID that was previously obtained was entered above. Also,
 		the sambaUnixIdPooldn object was specified as sambaDomainName=DAMNATION. This is
 		the location into which the Idealx smbldap-tools store the next available UID/GID
@@ -545,7 +545,7 @@
 		The script tries to add the ou=People container twice, hence the error message.
 		This is expected behavior.
 		</p></li><li><p>
-		<a class="indexterm" name="id2626229"></a>
+		<a class="indexterm" name="id389036"></a>
 		Restart the LDAP server following initialization of the LDAP directory. Execute the
 		system control script provided on your system. The following steps can be used on
 		Novell SUSE SLES 9:
@@ -712,8 +712,8 @@
 		shares and printing resources on the new Samba-3 server, copy all data
 		across, set up privileges, and set share and file/directory access controls.
 		</p></li><li><p>
-		<a class="indexterm" name="id2626543"></a>
-		<a class="indexterm" name="id2626550"></a>
+		<a class="indexterm" name="id389291"></a>
+		<a class="indexterm" name="id389297"></a>
 		Edit the <code class="filename">smb.conf</code> file to  reset the parameter 
 		<a class="link" href="smb.conf.5.html#DOMAINMASTER">domain master = Yes</a> so that
 		the Samba server functions as a PDC for the purpose of migration.
@@ -841,7 +841,7 @@
 Creating unix group: 'Server Operators'
 Creating unix group: 'Users'
 </pre><p>
-	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2626735"></a>NT4 Migration Using tdbsam Backend</h3></div></div></div><p>
+	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id389442"></a>NT4 Migration Using tdbsam Backend</h3></div></div></div><p>
 	In this example, we change the domain name of the NT4 server from
 	<code class="constant">DRUGPREP</code> to <code class="constant">MEGANET</code> prior to the use
 	of the vampire (migration) tool. This migration process makes use of Linux system tools
@@ -849,22 +849,22 @@
 	UNIX/Linux <code class="filename">/etc/passwd</code> and <code class="filename">/etc/group</code>
 	databases. These entries must therefore be present, and correct options specified,
 	in your <code class="filename">smb.conf</code> file, or else the migration does not work as it should.
-	</p><div class="procedure"><a name="id2626782"></a><p class="title"><b>Procedure 9.2. Migration Steps Using tdbsam</b></p><ol type="1"><li><p>
+	</p><div class="procedure"><a name="id389486"></a><p class="title"><b>Procedure 9.2. Migration Steps Using tdbsam</b></p><ol type="1"><li><p>
 		Prepare a Samba-3 server precisely per the instructions shown in <a class="link" href="Big500users.html" title="Chapter 4. The 500-User Office">&#8220;The 500-User Office&#8221;</a>.
 		Set the workgroup name to <code class="constant">MEGANET</code>.
-		</p></li><li><p><a class="indexterm" name="id2626810"></a><a class="indexterm" name="id2626818"></a>
+		</p></li><li><p><a class="indexterm" name="id389513"></a><a class="indexterm" name="id389520"></a>
 		Edit the <code class="filename">smb.conf</code> file to temporarily change the parameter 
 		<a class="link" href="smb.conf.5.html#DOMAINMASTER">domain master = No</a> so
 		the Samba server functions as a BDC for the purpose of migration.
                 </p></li><li><p>
 		Start Samba as you have done previously.
-		</p></li><li><p><a class="indexterm" name="id2626860"></a>
+		</p></li><li><p><a class="indexterm" name="id389559"></a>
 		Join the NT4 Domain as a BDC, as shown here:
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc join -S oldnt4pdc -W MEGANET -UAdministrator%not24get
 Joined domain MEGANET.
 </pre><p>
-		</p></li><li><p><a class="indexterm" name="id2626895"></a>
+		</p></li><li><p><a class="indexterm" name="id389593"></a>
 		You may vampire the accounts from the NT4 PDC by executing the command, as shown here:
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc vampire -S oldnt4pdc -U Administrator%not24get
@@ -904,7 +904,7 @@
 Fetching BUILTIN database
 SAM_DELTA_DOMAIN_INFO not handled
 </pre><p>
-		</p></li><li><p><a class="indexterm" name="id2626949"></a>
+		</p></li><li><p><a class="indexterm" name="id389636"></a>
 		At this point, we can validate our migration. Let's look at the accounts
 		in the form in which they are seen in a smbpasswd file. This achieves that:
 </p><pre class="screen">
@@ -936,7 +936,7 @@
 maryk:509:3636AB7E12EBE79AB79AE2610DD89D4C:
      CF271B744F7A55AFDA277FF88D80C527:[UX         ]:LCT-3E8B4270:
 </pre><p>
-		</p></li><li><p><a class="indexterm" name="id2627026"></a>
+		</p></li><li><p><a class="indexterm" name="id389688"></a>
 		An expanded view of a user account entry shows more of what was
 		obtained from the NT4 PDC:
 </p><pre class="screen">
@@ -962,7 +962,7 @@
 Password can change:  0
 Password must change: Mon, 18 Jan 2038 20:14:07 GMT
 </pre><p>
-		</p></li><li><p><a class="indexterm" name="id2627061"></a>
+		</p></li><li><p><a class="indexterm" name="id389715"></a>
 		The following command lists the long names of the groups that have been
 		imported (vampired) from the NT4 PDC:
 </p><pre class="screen">
@@ -979,11 +979,11 @@
 Users                 Ordinary users
 </pre><p>
 		Everything looks well and in order.
-		</p></li><li><p><a class="indexterm" name="id2627101"></a><a class="indexterm" name="id2627109"></a>
+		</p></li><li><p><a class="indexterm" name="id389750"></a><a class="indexterm" name="id389758"></a>
 		Edit the <code class="filename">smb.conf</code> file to  reset the parameter 
 		<a class="link" href="smb.conf.5.html#DOMAINMASTER">domain master = Yes</a> so
 		the Samba server functions as a PDC for the purpose of migration.
-                </p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2627142"></a>Key Points Learned</h3></div></div></div><p>
+                </p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id389787"></a>Key Points Learned</h3></div></div></div><p>
 		Migration of an NT4 PDC database to a Samba-3 PDC is possible.
 		</p><div class="itemizedlist"><ul type="disc"><li><p>
 			An LDAP backend is a suitable vehicle for NT4 migrations.
@@ -995,52 +995,52 @@
 			</p></li><li><p>
 			The net Samba-3 domain most likely requires some
 			administration and updating before going live.
-			</p></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2627180"></a>Questions and Answers</h2></div></div></div><p>
-	</p><div class="qandaset"><dl><dt> <a href="ntmigration.html#id2627195">
+			</p></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id389822"></a>Questions and Answers</h2></div></div></div><p>
+	</p><div class="qandaset"><dl><dt> <a href="ntmigration.html#id389838">
 		Why must I start each migration with a clean database?
-		</a></dt><dt> <a href="ntmigration.html#id2627236">
+		</a></dt><dt> <a href="ntmigration.html#id389874">
 		Is it possible to set my domain SID to anything I like?
-		</a></dt><dt> <a href="ntmigration.html#id2627293">
+		</a></dt><dt> <a href="ntmigration.html#id389926">
 		When using a tdbsam passdb backend, why must I have all domain user and group accounts
 		in /etc/passwd and /etc/group?
-		</a></dt><dt> <a href="ntmigration.html#id2627473">
+		</a></dt><dt> <a href="ntmigration.html#id390096">
 		Why did you validate connectivity before attempting migration?
-		</a></dt><dt> <a href="ntmigration.html#id2627518">
+		</a></dt><dt> <a href="ntmigration.html#id390138">
 		How would you merge 10 tdbsam-based domains into an LDAP database?
-		</a></dt><dt> <a href="ntmigration.html#id2627641">
+		</a></dt><dt> <a href="ntmigration.html#id390253">
 		I want to change my domain name after I migrate all accounts from an NT4 domain to a 
 		Samba-3 domain. Does it make any sense to migrate the machine accounts in that case?
-		</a></dt><dt> <a href="ntmigration.html#id2627716">
+		</a></dt><dt> <a href="ntmigration.html#id390325">
 		After merging multiple NT4 domains into a Samba-3 domain, I lost all multiple group mappings. Why?
-		</a></dt><dt> <a href="ntmigration.html#id2627781">
+		</a></dt><dt> <a href="ntmigration.html#id390383">
 		How can I reset group membership after loading the account information into the LDAP database?
-		</a></dt><dt> <a href="ntmigration.html#id2627816">
+		</a></dt><dt> <a href="ntmigration.html#id390415">
 		What are the limits or constraints that apply to group names?
-		</a></dt><dt> <a href="ntmigration.html#id2627920">
+		</a></dt><dt> <a href="ntmigration.html#id390512">
 		My Windows NT4 PDC has 323,000 user accounts. How long will it take to migrate them to a Samba-3
 		LDAP backend system using the vampire process?
-		</a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%"><tbody><tr class="question"><td align="left" valign="top"><a name="id2627195"></a><a name="id2627197"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id2627201"></a>
+		</a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%"><tbody><tr class="question"><td align="left" valign="top"><a name="id389838"></a><a name="id389840"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id389843"></a>
 		Why must I start each migration with a clean database?
-		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id2627216"></a>
+		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id389858"></a>
 		This is a recommendation that permits the data from each NT4 domain to
 		be kept separate until you are ready to merge them. Also, if you do not start with a clean database,
 		you may find errors due to users or groups from multiple domains having the
 		same name but different SIDs. It is better to permit each migration to complete
 		without undue errors and then to handle the merging of vampired data under
 		proper supervision.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2627236"></a><a name="id2627238"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id2627241"></a>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id389874"></a><a name="id389876"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id389879"></a>
 		Is it possible to set my domain SID to anything I like?
-		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id2627257"></a><a class="indexterm" name="id2627265"></a><a class="indexterm" name="id2627272"></a>
+		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id389894"></a><a class="indexterm" name="id389902"></a><a class="indexterm" name="id389909"></a>
 		Yes, so long as the SID you create has the same structure as an autogenerated SID.
 		The typical SID looks like this: S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX, where
 		the XXXXXXXXXX can be any number with from 6 to 10 digits. On the other hand, why
 		would you really want to create your own SID? I cannot think of a good reason.
 		You may want to set the SID to one that is already in use somewhere on your network,
 		but that is a little different from straight out creating your own domain SID.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2627293"></a><a name="id2627295"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id2627298"></a><a class="indexterm" name="id2627306"></a><a class="indexterm" name="id2627313"></a><a class="indexterm" name="id2627321"></a><a class="indexterm" name="id2627329"></a><a class="indexterm" name="id2627340"></a><a class="indexterm" name="id2627352"></a>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id389926"></a><a name="id389928"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id389931"></a><a class="indexterm" name="id389939"></a><a class="indexterm" name="id389947"></a><a class="indexterm" name="id389955"></a><a class="indexterm" name="id389963"></a><a class="indexterm" name="id389974"></a><a class="indexterm" name="id389985"></a>
 		When using a tdbsam passdb backend, why must I have all domain user and group accounts
 		in <code class="filename">/etc/passwd</code> and <code class="filename">/etc/group</code>?
-		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id2627383"></a><a class="indexterm" name="id2627391"></a><a class="indexterm" name="id2627398"></a><a class="indexterm" name="id2627406"></a><a class="indexterm" name="id2627414"></a><a class="indexterm" name="id2627422"></a>
+		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id390016"></a><a class="indexterm" name="id390024"></a><a class="indexterm" name="id390031"></a><a class="indexterm" name="id390039"></a><a class="indexterm" name="id390047"></a><a class="indexterm" name="id390055"></a>
 		Samba-3 must be able to tie all user and group account SIDs to a UNIX UID or GID. Samba
 		does not fabricate the UNIX IDs from thin air, but rather requires them to be located
 		in a suitable place. 
@@ -1055,15 +1055,15 @@
 		migration to the LDAP database, the accounts may be removed from the UNIX database files. 
 		In short then, all UNIX and Windows networking accounts, both in tdbsam as well as in 
 		LDAP, require UIDs/GIDs.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2627473"></a><a name="id2627475"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id2627478"></a><a class="indexterm" name="id2627486"></a><a class="indexterm" name="id2627494"></a>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id390096"></a><a name="id390098"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id390101"></a><a class="indexterm" name="id390109"></a><a class="indexterm" name="id390117"></a>
 		Why did you validate connectivity before attempting migration?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		Access validation before attempting to migrate NT4 domain accounts helps to pinpoint
 		potential problems that may otherwise affect or impede account migration. I am always
 		mindful of the 4 P's of migration: Planning Prevents Poor Performance.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2627518"></a><a name="id2627520"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id390138"></a><a name="id390140"></a></td><td align="left" valign="top"><p>
 		How would you merge 10 tdbsam-based domains into an LDAP database?
-		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id2627531"></a><a class="indexterm" name="id2627539"></a><a class="indexterm" name="id2627547"></a><a class="indexterm" name="id2627555"></a><a class="indexterm" name="id2627563"></a><a class="indexterm" name="id2627570"></a><a class="indexterm" name="id2627578"></a><a class="indexterm" name="id2627586"></a><a class="indexterm" name="id2627594"></a><a class="indexterm" name="id2627602"></a><a class="indexterm" name="id2627610"></a>
+		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id390151"></a><a class="indexterm" name="id390159"></a><a class="indexterm" name="id390166"></a><a class="indexterm" name="id390174"></a><a class="indexterm" name="id390182"></a><a class="indexterm" name="id390190"></a><a class="indexterm" name="id390197"></a><a class="indexterm" name="id390205"></a><a class="indexterm" name="id390213"></a><a class="indexterm" name="id390221"></a><a class="indexterm" name="id390229"></a>
 		If you have 10 tdbsam Samba domains, there is considerable risk that there are a number of
 		accounts that have the same UNIX identifier (UID/GID). This means that you almost 
 		certainly have to edit a lot of data. It would be easiest to dump each database in smbpasswd
@@ -1073,17 +1073,17 @@
 		tdbsam and then to LDAP. The final choice is yours. Just remember to verify all accounts that
 		you have migrated before handing over access to a user. After all, too many users with a bad
 		migration experience may threaten your career.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2627641"></a><a name="id2627643"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id2627646"></a><a class="indexterm" name="id2627654"></a>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id390253"></a><a name="id390256"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id390259"></a><a class="indexterm" name="id390267"></a>
 		I want to change my domain name after I migrate all accounts from an NT4 domain to a 
 		Samba-3 domain. Does it make any sense to migrate the machine accounts in that case?
-		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id2627675"></a><a class="indexterm" name="id2627683"></a><a class="indexterm" name="id2627690"></a><a class="indexterm" name="id2627698"></a>
+		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id390286"></a><a class="indexterm" name="id390294"></a><a class="indexterm" name="id390302"></a><a class="indexterm" name="id390310"></a>
 		I would recommend not to migrate the machine account. The machine accounts should still work, but there are registry entries
 		on each Windows NT4 and upward client that have a tattoo of the old domain name. If you
 		unjoin the domain and then rejoin the newly renamed Samba-3 domain, you can be certain to avoid
 		this tattooing effect.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2627716"></a><a name="id2627718"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id2627722"></a>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id390325"></a><a name="id390327"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id390330"></a>
 		After merging multiple NT4 domains into a Samba-3 domain, I lost all multiple group mappings. Why?
-		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id2627738"></a><a class="indexterm" name="id2627746"></a>
+		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id390345"></a><a class="indexterm" name="id390353"></a>
 		Samba-3 currently does not implement multiple group membership internally. If you use the Windows 
 		NT4 Domain User Manager to manage accounts and you have an LDAP backend, the multiple group
 		membership is stored in the POSIX groups area. If you use either tdbsam or smbpasswd backend,
@@ -1092,14 +1092,14 @@
 		file to which you migrated the NT4 Domain data, do not forget to edit the UNIX <code class="filename">/etc/passwd</code>
 		and <code class="filename">/etc/group</code> information also. That is where the multiple group information
 		is most closely at your fingertips.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2627781"></a><a name="id2627783"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id390383"></a><a name="id390385"></a></td><td align="left" valign="top"><p>
 		How can I reset group membership after loading the account information into the LDAP database?
-		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id2627795"></a>
+		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id390396"></a>
 		You can use the NT4 Domain User Manager that can be downloaded from the Microsoft Web site. The
 		installation file is called <code class="filename">SRVTOOLS.EXE</code>.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2627816"></a><a name="id2627818"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id2627821"></a>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id390415"></a><a name="id390417"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id390420"></a>
 		What are the limits or constraints that apply to group names?
-		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id2627836"></a><a class="indexterm" name="id2627844"></a><a class="indexterm" name="id2627852"></a><a class="indexterm" name="id2627860"></a><a class="indexterm" name="id2627868"></a><a class="indexterm" name="id2627876"></a>
+		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id390435"></a><a class="indexterm" name="id390443"></a><a class="indexterm" name="id390451"></a><a class="indexterm" name="id390459"></a><a class="indexterm" name="id390467"></a><a class="indexterm" name="id390475"></a>
 		A Windows 200x group name can be up to 254 characters long, while in Windows NT4 the group
 		name is limited to 20 characters. Most UNIX systems limit this to 32 characters. Windows 
 		groups can contain upper- and lowercase characters, as well as spaces.
@@ -1111,7 +1111,7 @@
 		of the POSIX standards and likewise do not permit uppercase or space characters in group
 		or user account names. You have to experiment with your system to find what its 
 		peculiarities are.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2627920"></a><a name="id2627922"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id2627926"></a>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id390512"></a><a name="id390514"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id390517"></a>
 		My Windows NT4 PDC has 323,000 user accounts. How long will it take to migrate them to a Samba-3
 		LDAP backend system using the vampire process?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
@@ -1120,7 +1120,7 @@
 		you would not be able to migrate 323,000 accounts because this number cannot fit into a 16-bit unsigned
 		integer. UNIX/Linux systems that have a 32-bit UID/GID can easily handle this number of accounts. 
 		Please check this carefully before you attempt to effect a migration using the vampire process.
-		</p><p><a class="indexterm" name="id2627963"></a>
+		</p><p><a class="indexterm" name="id390544"></a>
 		Migration speed depends much on the processor speed, the network speed, disk I/O capability, and
 		LDAP update overheads. On a dual processor AMD MP1600+ with 1 GB memory that was mirroring LDAP
 		to a second identical system over 1 Gb Ethernet, I was able to migrate around 180 user accounts

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/nw4migration.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/nw4migration.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/nw4migration.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,6 +1,6 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 10. Migrating NetWare Server to Samba-3</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="DMSMig.html" title="Part II. Domain Members, Updating Samba and Migration"><link rel="prev" href="ntmigration.html" title="Chapter 9. Migrating NT4 Domain to Samba-3"><link rel="next" href="RefSection.html" title="Part III. Reference Section"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 10. Migrating NetWare Server to Samba-3</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ntmigration.html">Prev</a> </td><th width="60%" align="center">Part II. Domain Members, Updating Samba and Migration</th><td width="20%" align="right"> <a accesskey="n" href="RefSection.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="nw4migration"></a>Chapter 10. Migrating NetWare Server to Samba-3</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="nw4migration.html#id2628156">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="nw4migration.html#id2628272">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="nw4migration.html#id2628385">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="nw4migration.html#id2628462">Technical Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="nw4migration.html#id2628652">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="nw4migration.html#id2628661">NetWare Migration Using LDAP Backend</a></span></dt></dl></dd></dl></div><p>
-	<a class="indexterm" name="id2628001"></a>
-	<a class="indexterm" name="id2628007"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 10. Migrating NetWare Server to Samba-3</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="DMSMig.html" title="Part II. Domain Members, Updating Samba and Migration"><link rel="prev" href="ntmigration.html" title="Chapter 9. Migrating NT4 Domain to Samba-3"><link rel="next" href="RefSection.html" title="Part III. Reference Section"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 10. Migrating NetWare Server to Samba-3</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ntmigration.html">Prev</a> </td><th width="60%" align="center">Part II. Domain Members, Updating Samba and Migration</th><td width="20%" align="right"> <a accesskey="n" href="RefSection.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="nw4migration"></a>Chapter 10. Migrating NetWare Server to Samba-3</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="nw4migration.html#id390707">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="nw4migration.html#id390814">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="nw4migration.html#id390913">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="nw4migration.html#id390984">Technical Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="nw4migration.html#id391152">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="nw4migration.html#id391161">NetWare Migration Using LDAP Backend</a></span></dt></dl></dd></dl></div><p>
+	<a class="indexterm" name="id390578"></a>
+	<a class="indexterm" name="id390584"></a>
 	Novell is a company any seasoned IT manager has to admire. It has become increasingly
 	Linux-friendly and is emerging out of a deep regression that almost saw the company
 	disappear into obscurity. Novell's SUSE Linux hosts the NetWare server and it is the
@@ -8,24 +8,24 @@
 	It will be interesting to see what becomes of NetWare over time.
 	Meanwhile, there can be no denying that Novell is a Linux company.
 	</p><p>
-	<a class="indexterm" name="id2628025"></a>
-	<a class="indexterm" name="id2628032"></a>
-	<a class="indexterm" name="id2628039"></a>
-	<a class="indexterm" name="id2628046"></a>
+	<a class="indexterm" name="id390598"></a>
+	<a class="indexterm" name="id390605"></a>
+	<a class="indexterm" name="id390612"></a>
+	<a class="indexterm" name="id390619"></a>
 	Whatever flavor of Linux is preferred in your environment, whether Red Hat, Debian,
 	Gentoo, Mandrake, or SUSE (Novell), the information in this chapter should be read with
 	the knowledge that file locations may vary a little; even so, the information
 	in this chapter should provide something of value.
 	</p><p>
-	<a class="indexterm" name="id2628061"></a>
+	<a class="indexterm" name="id390631"></a>
 	Contributions to this chapter were made by Misty Stanley-Jones, a UNIX administrator of many
 	years who surfaced on the Samba mailing list with a barrage of questions and who
 	regularly helps other administrators to solve thorny Samba migration questions.
 	</p><p>
-	<a class="indexterm" name="id2628075"></a>
-	<a class="indexterm" name="id2628082"></a>
-	<a class="indexterm" name="id2628089"></a>
-	<a class="indexterm" name="id2628096"></a>
+	<a class="indexterm" name="id390644"></a>
+	<a class="indexterm" name="id390650"></a>
+	<a class="indexterm" name="id390657"></a>
+	<a class="indexterm" name="id390664"></a>
 	One wonders how many NetWare servers remain in active service. Many are being migrated
 	to Samba on Linux. Red Hat Linux, SUSE Linux 9.x, and SUSE Linux Enterprise Server 9 are
 	ideal target platforms to which a NetWare server may be migrated. The migration method
@@ -49,8 +49,8 @@
 	File paths have been modified to permit use of RPM packages provided by Novell. In the
 	original documentation contributed by Misty, the Courier-IMAP package had been built
 	directly from the original source tarball.
-	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2628156"></a>Introduction</h2></div></div></div><p>
-	<a class="indexterm" name="id2628163"></a>
+	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id390707"></a>Introduction</h2></div></div></div><p>
+	<a class="indexterm" name="id390715"></a>
 	Misty Stanley-Jones was recruited by Abmas to administer a network that had
 	not received much attention for some years and was much in need of a makeover.
 	As a brand-new sysadmin to this company, she inherited a very old Novell file server
@@ -64,13 +64,13 @@
 					Users storing information on their local hard
 					drives, causing backup integrity problems
 					</p></li></ul></div></li></ul></div><p>
-	<a class="indexterm" name="id2628259"></a>
+	<a class="indexterm" name="id390803"></a>
 	At one point disk space had filled up to 100 percent, causing the payroll database
 	to become corrupt. This caused the accounting department to be down for over
 	a week and necessitated deployment of another file server. The replacement
 	server was created with very poor security and design considerations from
 	a discarded desktop PC.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2628272"></a>Assignment Tasks</h3></div></div></div><p>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id390814"></a>Assignment Tasks</h3></div></div></div><p>
 	Misty has provided this summary of her migration experience in the hope
 	that it will help someone to avoid the challenges she faced. Perhaps her
 	configuration files and background will accelerate your learning as you
@@ -89,7 +89,7 @@
 	is the result of treatment given to her files in an attempt to make
 	the overall information more useful to you.
 	</p><p>
-	<a class="indexterm" name="id2628310"></a>
+	<a class="indexterm" name="id390843"></a>
 	After management reviewed a cost-benefit report as well as an estimated
 	time-to-completion, approval was given proceed with the solution proposed.
 	The server was built from purchased components. The total project cost
@@ -111,33 +111,33 @@
 		</td></tr></table><p>
 	The new system has operated for 6 months without problems. Over the past months
 	much attention has been focused on cleaning up desktops and user profiles.
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2628385"></a>Dissection and Discussion</h2></div></div></div><p>
-	<a class="indexterm" name="id2628393"></a>
-	<a class="indexterm" name="id2628400"></a>
-	<a class="indexterm" name="id2628407"></a>
-	<a class="indexterm" name="id2628414"></a>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id390913"></a>Dissection and Discussion</h2></div></div></div><p>
+	<a class="indexterm" name="id390921"></a>
+	<a class="indexterm" name="id390927"></a>
+	<a class="indexterm" name="id390934"></a>
+	<a class="indexterm" name="id390941"></a>
 	A decision to use LDAP was made even though I knew nothing about LDAP except that
 	I had been reading the book &#8220;<span class="quote">LDAP System Administration,</span>&#8221; by Gerald Carter.
 	LDAP seemed to provide some of the functionality of Novell's e-Directory Services
 	and would provide centralized authentication and identity management.
 	</p><p>
-	<a class="indexterm" name="id2628433"></a>
-	<a class="indexterm" name="id2628440"></a>
-	<a class="indexterm" name="id2628446"></a>
+	<a class="indexterm" name="id390957"></a>
+	<a class="indexterm" name="id390964"></a>
+	<a class="indexterm" name="id390971"></a>
 	Building the LDAP database took a while and a lot of trial and error. Following
 	the guidance I obtained from &#8220;<span class="quote">LDAP System 
 	Administration,</span>&#8221; I installed OpenLDAP (from RPM; later I compiled
 	a more current version from source) and built my initial LDAP tree.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2628462"></a>Technical Issues</h3></div></div></div><p>
-	<a class="indexterm" name="id2628470"></a>
-	<a class="indexterm" name="id2628477"></a>
-	<a class="indexterm" name="id2628484"></a>
-	<a class="indexterm" name="id2628490"></a>
-	<a class="indexterm" name="id2628497"></a>
-	<a class="indexterm" name="id2628504"></a>
-	<a class="indexterm" name="id2628511"></a>
-	<a class="indexterm" name="id2628518"></a>
-	<a class="indexterm" name="id2628524"></a>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id390984"></a>Technical Issues</h3></div></div></div><p>
+	<a class="indexterm" name="id390992"></a>
+	<a class="indexterm" name="id390999"></a>
+	<a class="indexterm" name="id391006"></a>
+	<a class="indexterm" name="id391012"></a>
+	<a class="indexterm" name="id391019"></a>
+	<a class="indexterm" name="id391026"></a>
+	<a class="indexterm" name="id391033"></a>
+	<a class="indexterm" name="id391040"></a>
+	<a class="indexterm" name="id391046"></a>
 	The first challenge was to create a company white pages, followed by manually
 	entering everything from the printed company directory. This used only the inetOrgPerson
 	object class from the OpenLDAP schemas. The next step was to write a shell script that
@@ -189,15 +189,15 @@
 	the LDAP directory. The tools consist of a set of Perl scripts for migration of users, groups,
 	aliases, hosts, netgroups, networks, protocols, PRCs, and services from the existing ASCII text
 	files (or from a name service such as NIS). This too set can be obtained from the <a class="ulink" href="http://www.padl.com" target="_top">PADL Web site</a>.
-	</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2628652"></a>Implementation</h2></div></div></div><p>
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2628661"></a>NetWare Migration Using LDAP Backend</h3></div></div></div><p>
+	</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id391152"></a>Implementation</h2></div></div></div><p>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id391161"></a>NetWare Migration Using LDAP Backend</h3></div></div></div><p>
 	The following software must be installed on the SUSE Linux Enterprise Server to perform
 	this migration:
 	</p><table class="simplelist" border="0" summary="Simple list"><tr><td><p>courier-imap</p></td></tr><tr><td><p>courier-imap-ldap</p></td></tr><tr><td><p>nss_ldap</p></td></tr><tr><td><p>openldap2-client</p></td></tr><tr><td><p>openldap2-devel (only for Samba compilation)</p></td></tr><tr><td><p>openldap2</p></td></tr><tr><td><p>pam_ldap</p></td></tr><tr><td><p>samba-3.0.20 or later</p></td></tr><tr><td><p>samba-client-3.0.20 or later</p></td></tr><tr><td><p>samba-winbind-3.0.20 or later</p></td></tr><tr><td><p>smbldap-tools Version 0.9.1</p></td></tr></table><p>
 	Each software application must be carefully configured in preparation for migration.
 	The configuration files used at Abmas are provided as a guide and should be modified
 	to meet needs at your site.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2628736"></a>LDAP Server Configuration</h4></div></div></div><p>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id391232"></a>LDAP Server Configuration</h4></div></div></div><p>
 	The <code class="filename">/etc/openldap/slapd.conf</code> file Misty used is shown here:
 </p><pre class="programlisting">
 #/etc/openldap/slapd.conf
@@ -362,7 +362,7 @@
   by * read
 </pre><p>
 </p><p>
-	<a class="indexterm" name="id2628928"></a>
+	<a class="indexterm" name="id391339"></a>
 	The <code class="filename">/etc/ldap.conf</code> file used is listed in <a class="link" href="nw4migration.html#ch8ldap" title="Example 10.2. NSS LDAP Control File /etc/ldap.conf">&#8220;NSS LDAP Control File  /etc/ldap.conf&#8221;</a>.
 	</p><div class="example"><a name="ch8ldap"></a><p class="title"><b>Example 10.2. NSS LDAP Control File  /etc/ldap.conf</b></p><div class="example-contents"><pre class="screen">
 # /etc/ldap.conf
@@ -416,8 +416,8 @@
 # possibilities to store hosts, services, ethers, and lots of other things.
 </pre><p>
 	</p><p>
-	<a class="indexterm" name="id2629012"></a>
-	<a class="indexterm" name="id2629019"></a>
+	<a class="indexterm" name="id391409"></a>
+	<a class="indexterm" name="id391415"></a>
 	In my setup, users authenticate via PAM and NSS using LDAP-based accounts.
 	The configuration file that controls the behavior of the PAM <code class="literal">pam_unix2</code>
 	module is shown in <a class="link" href="nw4migration.html#sbepu2" title="Example 10.3. The PAM Control File /etc/security/pam_unix2.conf">&#8220;The PAM Control File /etc/security/pam_unix2.conf&#8221;</a> file.
@@ -458,7 +458,7 @@
 account: use_ldap
 password: use_ldap
 session: none
-</pre></div></div><br class="example-break"><a class="indexterm" name="id2629101"></a><a class="indexterm" name="id2629108"></a><a class="indexterm" name="id2629115"></a><div class="itemizedlist"><ul type="disc"><li><p>
+</pre></div></div><br class="example-break"><a class="indexterm" name="id391476"></a><a class="indexterm" name="id391483"></a><a class="indexterm" name="id391490"></a><div class="itemizedlist"><ul type="disc"><li><p>
 			If your LDAP database goes down, nobody can authenticate except for root.
 			</p></li><li><p>
 			If failover is configured incorrectly, weird behavior can occur. For example, 
@@ -468,31 +468,31 @@
 	of this document, and steps for implementing it are well documented.
 	</p><p>
 	The following services authenticate using LDAP:
-	</p><a class="indexterm" name="id2629151"></a><a class="indexterm" name="id2629158"></a><a class="indexterm" name="id2629165"></a><table class="simplelist" border="0" summary="Simple list"><tr><td><p>UNIX login/ssh</p></td></tr><tr><td><p>Postfix (SMTP)</p></td></tr><tr><td><p>Courier-IMAP/IMAPS/POP3/POP3S</p></td></tr></table><p>
-	<a class="indexterm" name="id2629194"></a>
-	<a class="indexterm" name="id2629200"></a>
+	</p><a class="indexterm" name="id391523"></a><a class="indexterm" name="id391529"></a><a class="indexterm" name="id391536"></a><table class="simplelist" border="0" summary="Simple list"><tr><td><p>UNIX login/ssh</p></td></tr><tr><td><p>Postfix (SMTP)</p></td></tr><tr><td><p>Courier-IMAP/IMAPS/POP3/POP3S</p></td></tr></table><p>
+	<a class="indexterm" name="id391564"></a>
+	<a class="indexterm" name="id391571"></a>
 	Companywide white pages can be searched using an LDAP client
 	such as the one in the Windows Address Book.
 	</p><p>
-	<a class="indexterm" name="id2629213"></a>
-	<a class="indexterm" name="id2629219"></a>
+	<a class="indexterm" name="id391582"></a>
+	<a class="indexterm" name="id391589"></a>
 	Having gained a solid understanding of LDAP and a relatively workable LDAP tree
 	thus far, it was time to configure Samba. I compiled the latest stable Samba and
 	also installed the latest <code class="literal">smbldap-tools</code> from 
 	<a class="ulink" href="http://idealx.com" target="_top">Idealx</a>.
 	</p><p>
 	The Samba <code class="filename">smb.conf</code> file was configured as shown in <a class="link" href="nw4migration.html#ch8smbconf" title="Example 10.4. Samba Configuration File smb.conf Part A">&#8220;Samba Configuration File  smb.conf Part A&#8221;</a>.
-	</p><div class="example"><a name="ch8smbconf"></a><p class="title"><b>Example 10.4. Samba Configuration File  smb.conf Part A</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2629289"></a><em class="parameter"><code>workgroup = MEGANET2</code></em></td></tr><tr><td><a class="indexterm" name="id2629301"></a><em class="parameter"><code>netbios name = MASSIVE</code></em></td></tr><tr><td><a class="indexterm" name="id2629313"></a><em class="parameter"><code>server string = Corp File Server</code></em></td></tr><tr><td><a class="indexterm" name="id2629325"></a><em class="parameter"><code>passdb backend = ldapsam:ldap://localhost</code></em></td></tr><tr><td><a class="indexterm" name="id2629337"></a><em class="parameter"><code>pam password change = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2629349"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id2629361"></a><em class="parameter"><code>log level = 1</code></em></td></tr><tr><td><a class="indexterm" name="id2629372"></a><em class="parameter"><code>log file = /data/samba/log/%m.log</code></em></td></tr><tr><td><a class="indexterm" name="id2629384"></a><em class="parameter"><code>name resolve order = wins host bcast</code></em></td></tr><tr><td><a class="indexterm" name="id2629396"></a><em class="parameter"><code>time server = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2629408"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td><a class="indexterm" name="id2629420"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id2629432"></a><em class="parameter"><code>cups options = Raw</code></em></td></tr><tr><td><a class="indexterm" name="id2629444"></a><em class="parameter"><code>add user script = /opt/IDEALX/sbin/smbldap-useradd -m "%u"</code></em></td></tr><tr><td><a class="indexterm" name="id2629456"></a><em class="parameter"><code>add group script = /opt/IDEALX/sbin/smbldap-groupadd -p "%g"</code></em></td></tr><tr><td><a class="indexterm" name="id2629469"></a><em class="parameter"><code>add user to group script = /opt/IDEALX/sbin/smbldap-groupmod -m "%u" "%g"</code></em></td></tr><tr><td><a class="indexterm" name="id2629482"></a><em class="parameter"><code>delete user from group script = /opt/IDEALX/sbin/smbldap-groupmod -x "%u" "%g"</code></em></td></tr><tr><td><a class="indexterm" name="id2629495"></a><em class="parameter"><code>set primary group script = /opt/IDEALX/sbin/smbldap-usermod -g "%g" "%u"</code></em></td></tr><tr><td><a class="indexterm" name="id2629507"></a><em class="parameter"><code>add machine script = /usr/local/sbin/smbldap-useradd -w "%m"</code></em></td></tr><tr><td><a class="indexterm" name="id2629520"></a><em class="parameter"><code>logon script = logon.bat</code></em></td></tr><tr><td><a class="indexterm" name="id2629532"></a><em class="parameter"><code>logon path = \\%L\profiles\%U\%a</code></em></td></tr><tr><td><a class="indexterm" name="id2629544"></a><em class="parameter"><code>logon drive = H:</code></em></td></tr><tr><td><a class="indexterm" name="id2629555"></a><em class="parameter"><code>logon home = \\%L\%U</code></em></td></tr><tr><td><a class="indexterm" name="id2629567"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2629579"></a><em class="parameter"><code>wins support = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2629590"></a><em class="parameter"><code>ldap admin dn = cn=Manager,dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id2629603"></a><em class="parameter"><code>ldap group suffix = ou=Groups</code></em></td></tr><tr><td><a class="indexterm" name="id2629615"></a><em class="parameter"><code>ldap idmap suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2629627"></a><em class="parameter"><code>ldap machine suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2629639"></a><em class="parameter"><code>ldap passwd sync = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2629650"></a><em class="parameter"><code>ldap suffix = ou=MEGANET2,dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id2629662"></a><em class="parameter"><code>ldap ssl = no</code></em></td></tr><tr><td><a class="indexterm" name="id2629674"></a><em class="parameter"><code>ldap user suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2629686"></a><em class="parameter"><code>admin users = root, "@Domain Admins"</code></em></td></tr><tr><td><a class="indexterm" name="id2629698"></a><em class="parameter"><code>printer admin = "@Domain Admins"</code></em></td></tr><tr><td><a class="indexterm" name="id2629710"></a><em class="parameter"><code>force printername = Yes</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch8smbconf2"></a><p class="title"><b>Example 10.5. Samba Configuration File  smb.conf Part B</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id2629750"></a><em class="parameter"><code>comment = Network logon service</code></em></td></tr><tr><td><a class="indexterm" name="id2629761"></a><em class="parameter"><code>path = /data/samba/netlogon</code></em></td></tr><tr><td><a class="indexterm" name="id2629773"></a><em class="parameter"><code>write list = "@Domain Admins"</code></em></td></tr><tr><td><a class="indexterm" name="id2629785"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[profiles]</code></em></td></tr><tr><td><a class="indexterm" name="id2629806"></a><em class="parameter"><code>comment = Roaming Profile Share</code></em></td></tr><tr><td><a class="indexterm" name="id2629817"></a><em class="parameter"><code>path = /data/samba/profiles/</code></em></td></tr><tr><td><a class="indexterm" name="id2629829"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2629841"></a><em class="parameter"><code>profile acls = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2629853"></a><em class="parameter"><code>veto files = desktop.ini</code></em></td></tr><tr><td><a class="indexterm" name="id2629864"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id2629885"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id2629897"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id2629908"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2629920"></a><em class="parameter"><code>create mask = 0770</code></em></td></tr><tr><td><a class="indexterm" name="id2629931"></a><em class="parameter"><code>veto files = desktop.ini</code></em></td></tr><tr><td><a class="indexterm" name="id2629943"></a><em class="parameter"><code>hide files = desktop.ini</code></em></td></tr><tr><td><a class="indexterm" name="id2629955"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[software]</code></em></td></tr><tr><td><a class="indexterm" name="id2629975"></a><em class="parameter"><code>comment = Software for %a computers</code></em></td></tr><tr><td><a class="indexterm" name="id2629987"></a><em class="parameter"><code>path = /data/samba/shares/software/%a</code></em></td></tr><tr><td><a class="indexterm" name="id2629999"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[public]</code></em></td></tr><tr><td><a class="indexterm" name="id2630020"></a><em class="parameter"><code>comment = Public Files</code></em></td></tr><tr><td><a class="indexterm" name="id2630032"></a><em class="parameter"><code>path = /data/samba/shares/public</code></em></td></tr><tr><td><a class="indexterm" name="id2630043"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2630055"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[PDF]</code></em></td></tr><tr><td><a class="indexterm" name="id2630076"></a><em class="parameter"><code>comment = Location of documents printed to PDFCreator printer</code></em></td></tr><tr><td><a class="indexterm" name="id2630088"></a><em class="parameter"><code>path = /data/samba/shares/pdf</code></em></td></tr><tr><td><a class="indexterm" name="id2630100"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch8smbconf3"></a><p class="title"><b>Example 10.6. Samba Configuration File  smb.conf Part C</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[EVERYTHING]</code></em></td></tr><tr><td><a class="indexterm" name="id2630139"></a><em class="parameter"><code>comment = All shares</code></em></td></tr><tr><td><a class="indexterm" name="id2630151"></a><em class="parameter"><code>path = /data/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2630162"></a><em class="parameter"><code>valid users = "@Domain Admins"</code></em></td></tr><tr><td><a class="indexterm" name="id2630174"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[CDROM]</code></em></td></tr><tr><td><a class="indexterm" name="id2630195"></a><em class="parameter"><code>comment = CD-ROM on MASSIVE</code></em></td></tr><tr><td><a class="indexterm" name="id2630207"></a><em class="parameter"><code>path = /mnt</code></em></td></tr><tr><td><a class="indexterm" name="id2630218"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[print$]</code></em></td></tr><tr><td><a class="indexterm" name="id2630239"></a><em class="parameter"><code>comment = Printer Drivers Share</code></em></td></tr><tr><td><a class="indexterm" name="id2630250"></a><em class="parameter"><code>path = /data/samba/drivers</code></em></td></tr><tr><td><a class="indexterm" name="id2630262"></a><em class="parameter"><code>write list = root</code></em></td></tr><tr><td><a class="indexterm" name="id2630274"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2630294"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id2630306"></a><em class="parameter"><code>path = /data/samba/spool</code></em></td></tr><tr><td><a class="indexterm" name="id2630318"></a><em class="parameter"><code>create mask = 0644</code></em></td></tr><tr><td><a class="indexterm" name="id2630329"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2630341"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[acct_hp8500]</code></em></td></tr><tr><td><a class="indexterm" name="id2630362"></a><em class="parameter"><code>comment = "Accounting Color Laser Printer"</code></em></td></tr><tr><td><a class="indexterm" name="id2630374"></a><em class="parameter"><code>path = /data/samba/spool/private</code></em></td></tr><tr><td><a class="indexterm" name="id2630386"></a><em class="parameter"><code>valid users = @acct, @acct_admin, @hr, "@Domain Admins", at Receptionist, dwayne, terri, danae, jerry</code></em></td></tr><tr><td><a class="indexterm" name="id2630398"></a><em class="parameter"><code>create mask = 0644</code></em></td></tr><tr><td><a class="indexterm" name="id2630410"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2630422"></a><em class="parameter"><code>copy = printers</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[plotter]</code></em></td></tr><tr><td><a class="indexterm" name="id2630442"></a><em class="parameter"><code>comment = Engineering Plotter</code></em></td></tr><tr><td><a class="indexterm" name="id2630454"></a><em class="parameter"><code>path = /data/samba/spool</code></em></td></tr><tr><td><a class="indexterm" name="id2630466"></a><em class="parameter"><code>create mask = 0644</code></em></td></tr><tr><td><a class="indexterm" name="id2630477"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2630489"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2630501"></a><em class="parameter"><code>copy = printers</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch8smbconf4"></a><p class="title"><b>Example 10.7. Samba Configuration File  smb.conf Part D</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[APPS]</code></em></td></tr><tr><td><a class="indexterm" name="id2630540"></a><em class="parameter"><code>path = /data/samba/shares/Apps</code></em></td></tr><tr><td><a class="indexterm" name="id2630552"></a><em class="parameter"><code>force group = "Domain Users"</code></em></td></tr><tr><td><a class="indexterm" name="id2630564"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[ACCT]</code></em></td></tr><tr><td><a class="indexterm" name="id2630584"></a><em class="parameter"><code>path = /data/samba/shares/Accounting</code></em></td></tr><tr><td><a class="indexterm" name="id2630596"></a><em class="parameter"><code>valid users = @acct, "@Domain Admins"</code></em></td></tr><tr><td><a class="indexterm" name="id2630608"></a><em class="parameter"><code>force group = acct</code></em></td></tr><tr><td><a class="indexterm" name="id2630620"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2630632"></a><em class="parameter"><code>create mask = 0660</code></em></td></tr><tr><td><a class="indexterm" name="id2630643"></a><em class="parameter"><code>directory mask = 0770</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[ACCT_ADMIN]</code></em></td></tr><tr><td><a class="indexterm" name="id2630664"></a><em class="parameter"><code>path = /data/samba/shares/Acct_Admin</code></em></td></tr><tr><td><a class="indexterm" name="id2630676"></a><em class="parameter"><code>valid users = @”acct_admin”</code></em></td></tr><tr><td><a class="indexterm" name="id2630689"></a><em class="parameter"><code>force group = acct_admin</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[HR_PR]</code></em></td></tr><tr><td><a class="indexterm" name="id2630709"></a><em class="parameter"><code>path = /data/samba/shares/HR_PR</code></em></td></tr><tr><td><a class="indexterm" name="id2630721"></a><em class="parameter"><code>valid users = @hr, @acct_admin</code></em></td></tr><tr><td><a class="indexterm" name="id2630733"></a><em class="parameter"><code>force group = hr</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[ENGR]</code></em></td></tr><tr><td><a class="indexterm" name="id2630754"></a><em class="parameter"><code>path = /data/samba/shares/Engr</code></em></td></tr><tr><td><a class="indexterm" name="id2630765"></a><em class="parameter"><code>valid users = @engr, @receptionist, @truss, "@Domain Admins", cheri</code></em></td></tr><tr><td><a class="indexterm" name="id2630778"></a><em class="parameter"><code>force group = engr</code></em></td></tr><tr><td><a class="indexterm" name="id2630789"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2630801"></a><em class="parameter"><code>create mask = 0770</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[DATA]</code></em></td></tr><tr><td><a class="indexterm" name="id2630822"></a><em class="parameter"><code>path = /data/samba/shares/DATA</code></em></td></tr><tr><td><a class="indexterm" name="id2630833"></a><em class="parameter"><code>valid users = @engr, @receptionist, @truss, "@Domain Admins", cheri</code></em></td></tr><tr><td><a class="indexterm" name="id2630846"></a><em class="parameter"><code>force group = engr</code></em></td></tr><tr><td><a class="indexterm" name="id2630857"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2630869"></a><em class="parameter"><code>create mask = 0770</code></em></td></tr><tr><td><a class="indexterm" name="id2630881"></a><em class="parameter"><code>copy = engr</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch8smbconf5"></a><p class="title"><b>Example 10.8. Samba Configuration File  smb.conf Part E</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[X]</code></em></td></tr><tr><td><a class="indexterm" name="id2630919"></a><em class="parameter"><code>path = /data/samba/shares/X</code></em></td></tr><tr><td><a class="indexterm" name="id2630931"></a><em class="parameter"><code>valid users = @engr, @acct</code></em></td></tr><tr><td><a class="indexterm" name="id2630943"></a><em class="parameter"><code>force group = engr</code></em></td></tr><tr><td><a class="indexterm" name="id2630954"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2630966"></a><em class="parameter"><code>create mask = 0770</code></em></td></tr><tr><td><a class="indexterm" name="id2630978"></a><em class="parameter"><code>copy = engr</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[NETWORK]</code></em></td></tr><tr><td><a class="indexterm" name="id2630998"></a><em class="parameter"><code>path = /data/samba/shares/network</code></em></td></tr><tr><td><a class="indexterm" name="id2631010"></a><em class="parameter"><code>valid users = "@Domain Users"</code></em></td></tr><tr><td><a class="indexterm" name="id2631022"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2631033"></a><em class="parameter"><code>create mask = 0770</code></em></td></tr><tr><td><a class="indexterm" name="id2631045"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[UTILS]</code></em></td></tr><tr><td><a class="indexterm" name="id2631066"></a><em class="parameter"><code>path = /data/samba/shares/Utils</code></em></td></tr><tr><td><a class="indexterm" name="id2631077"></a><em class="parameter"><code>write list = "@Domain Admins"</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[SYS]</code></em></td></tr><tr><td><a class="indexterm" name="id2631098"></a><em class="parameter"><code>path = /data/samba/shares/SYS</code></em></td></tr><tr><td><a class="indexterm" name="id2631110"></a><em class="parameter"><code>valid users = chad</code></em></td></tr><tr><td><a class="indexterm" name="id2631122"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2631133"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"><p>
-	<a class="indexterm" name="id2631148"></a>
-	<a class="indexterm" name="id2631155"></a>
-	<a class="indexterm" name="id2631162"></a>
+	</p><div class="example"><a name="ch8smbconf"></a><p class="title"><b>Example 10.4. Samba Configuration File  smb.conf Part A</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id391656"></a><em class="parameter"><code>workgroup = MEGANET2</code></em></td></tr><tr><td><a class="indexterm" name="id391667"></a><em class="parameter"><code>netbios name = MASSIVE</code></em></td></tr><tr><td><a class="indexterm" name="id391678"></a><em class="parameter"><code>server string = Corp File Server</code></em></td></tr><tr><td><a class="indexterm" name="id391690"></a><em class="parameter"><code>passdb backend = ldapsam:ldap://localhost</code></em></td></tr><tr><td><a class="indexterm" name="id391702"></a><em class="parameter"><code>pam password change = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id391713"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id391725"></a><em class="parameter"><code>log level = 1</code></em></td></tr><tr><td><a class="indexterm" name="id391736"></a><em class="parameter"><code>log file = /data/samba/log/%m.log</code></em></td></tr><tr><td><a class="indexterm" name="id391748"></a><em class="parameter"><code>name resolve order = wins host bcast</code></em></td></tr><tr><td><a class="indexterm" name="id391760"></a><em class="parameter"><code>time server = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id391771"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td><a class="indexterm" name="id391783"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id391794"></a><em class="parameter"><code>cups options = Raw</code></em></td></tr><tr><td><a class="indexterm" name="id391806"></a><em class="parameter"><code>add user script = /opt/IDEALX/sbin/smbldap-useradd -m "%u"</code></em></td></tr><tr><td><a class="indexterm" name="id391818"></a><em class="parameter"><code>add group script = /opt/IDEALX/sbin/smbldap-groupadd -p "%g"</code></em></td></tr><tr><td><a class="indexterm" name="id391829"></a><em class="parameter"><code>add user to group script = /opt/IDEALX/sbin/smbldap-groupmod -m "%u" "%g"</code></em></td></tr><tr><td><a class="indexterm" name="id391842"></a><em class="parameter"><code>delete user from group script = /opt/IDEALX/sbin/smbldap-groupmod -x "%u" "%g"</code></em></td></tr><tr><td><a class="indexterm" name="id391854"></a><em class="parameter"><code>set primary group script = /opt/IDEALX/sbin/smbldap-usermod -g "%g" "%u"</code></em></td></tr><tr><td><a class="indexterm" name="id391866"></a><em class="parameter"><code>add machine script = /usr/local/sbin/smbldap-useradd -w "%m"</code></em></td></tr><tr><td><a class="indexterm" name="id391878"></a><em class="parameter"><code>logon script = logon.bat</code></em></td></tr><tr><td><a class="indexterm" name="id391889"></a><em class="parameter"><code>logon path = \\%L\profiles\%U\%a</code></em></td></tr><tr><td><a class="indexterm" name="id391901"></a><em class="parameter"><code>logon drive = H:</code></em></td></tr><tr><td><a class="indexterm" name="id391912"></a><em class="parameter"><code>logon home = \\%L\%U</code></em></td></tr><tr><td><a class="indexterm" name="id391924"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id391935"></a><em class="parameter"><code>wins support = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id391947"></a><em class="parameter"><code>ldap admin dn = cn=Manager,dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id391958"></a><em class="parameter"><code>ldap group suffix = ou=Groups</code></em></td></tr><tr><td><a class="indexterm" name="id391970"></a><em class="parameter"><code>ldap idmap suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id391982"></a><em class="parameter"><code>ldap machine suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id391993"></a><em class="parameter"><code>ldap passwd sync = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id392005"></a><em class="parameter"><code>ldap suffix = ou=MEGANET2,dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id392016"></a><em class="parameter"><code>ldap ssl = no</code></em></td></tr><tr><td><a class="indexterm" name="id392028"></a><em class="parameter"><code>ldap user suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id392040"></a><em class="parameter"><code>admin users = root, "@Domain Admins"</code></em></td></tr><tr><td><a class="indexterm" name="id392051"></a><em class="parameter"><code>printer admin = "@Domain Admins"</code></em></td></tr><tr><td><a class="indexterm" name="id392063"></a><em class="parameter"><code>force printername = Yes</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch8smbconf2"></a><p class="title"><b>Example 10.5. Samba Configuration File  smb.conf Part B</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id392102"></a><em class="parameter"><code>comment = Network logon service</code></em></td></tr><tr><td><a class="indexterm" name="id392113"></a><em class="parameter"><code>path = /data/samba/netlogon</code></em></td></tr><tr><td><a class="indexterm" name="id392125"></a><em class="parameter"><code>write list = "@Domain Admins"</code></em></td></tr><tr><td><a class="indexterm" name="id392136"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[profiles]</code></em></td></tr><tr><td><a class="indexterm" name="id392157"></a><em class="parameter"><code>comment = Roaming Profile Share</code></em></td></tr><tr><td><a class="indexterm" name="id392168"></a><em class="parameter"><code>path = /data/samba/profiles/</code></em></td></tr><tr><td><a class="indexterm" name="id392180"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id392191"></a><em class="parameter"><code>profile acls = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id392203"></a><em class="parameter"><code>veto files = desktop.ini</code></em></td></tr><tr><td><a class="indexterm" name="id392214"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id392235"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id392246"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id392258"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id392269"></a><em class="parameter"><code>create mask = 0770</code></em></td></tr><tr><td><a class="indexterm" name="id392281"></a><em class="parameter"><code>veto files = desktop.ini</code></em></td></tr><tr><td><a class="indexterm" name="id392292"></a><em class="parameter"><code>hide files = desktop.ini</code></em></td></tr><tr><td><a class="indexterm" name="id392304"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[software]</code></em></td></tr><tr><td><a class="indexterm" name="id392324"></a><em class="parameter"><code>comment = Software for %a computers</code></em></td></tr><tr><td><a class="indexterm" name="id392336"></a><em class="parameter"><code>path = /data/samba/shares/software/%a</code></em></td></tr><tr><td><a class="indexterm" name="id392348"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[public]</code></em></td></tr><tr><td><a class="indexterm" name="id392368"></a><em class="parameter"><code>comment = Public Files</code></em></td></tr><tr><td><a class="indexterm" name="id392380"></a><em class="parameter"><code>path = /data/samba/shares/public</code></em></td></tr><tr><td><a class="indexterm" name="id392391"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id392403"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[PDF]</code></em></td></tr><tr><td><a class="indexterm" name="id392423"></a><em class="parameter"><code>comment = Location of documents printed to PDFCreator printer</code></em></td></tr><tr><td><a class="indexterm" name="id392435"></a><em class="parameter"><code>path = /data/samba/shares/pdf</code></em></td></tr><tr><td><a class="indexterm" name="id392446"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch8smbconf3"></a><p class="title"><b>Example 10.6. Samba Configuration File  smb.conf Part C</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[EVERYTHING]</code></em></td></tr><tr><td><a class="indexterm" name="id392485"></a><em class="parameter"><code>comment = All shares</code></em></td></tr><tr><td><a class="indexterm" name="id392497"></a><em class="parameter"><code>path = /data/samba</code></em></td></tr><tr><td><a class="indexterm" name="id392508"></a><em class="parameter"><code>valid users = "@Domain Admins"</code></em></td></tr><tr><td><a class="indexterm" name="id392520"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[CDROM]</code></em></td></tr><tr><td><a class="indexterm" name="id392540"></a><em class="parameter"><code>comment = CD-ROM on MASSIVE</code></em></td></tr><tr><td><a class="indexterm" name="id392552"></a><em class="parameter"><code>path = /mnt</code></em></td></tr><tr><td><a class="indexterm" name="id392563"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[print$]</code></em></td></tr><tr><td><a class="indexterm" name="id392584"></a><em class="parameter"><code>comment = Printer Drivers Share</code></em></td></tr><tr><td><a class="indexterm" name="id392595"></a><em class="parameter"><code>path = /data/samba/drivers</code></em></td></tr><tr><td><a class="indexterm" name="id392607"></a><em class="parameter"><code>write list = root</code></em></td></tr><tr><td><a class="indexterm" name="id392618"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id392639"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id392650"></a><em class="parameter"><code>path = /data/samba/spool</code></em></td></tr><tr><td><a class="indexterm" name="id392662"></a><em class="parameter"><code>create mask = 0644</code></em></td></tr><tr><td><a class="indexterm" name="id392673"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id392685"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[acct_hp8500]</code></em></td></tr><tr><td><a class="indexterm" name="id392705"></a><em class="parameter"><code>comment = "Accounting Color Laser Printer"</code></em></td></tr><tr><td><a class="indexterm" name="id392717"></a><em class="parameter"><code>path = /data/samba/spool/private</code></em></td></tr><tr><td><a class="indexterm" name="id392728"></a><em class="parameter"><code>valid users = @acct, @acct_admin, @hr, "@Domain Admins", at Receptionist, dwayne, terri, danae, jerry</code></em></td></tr><tr><td><a class="indexterm" name="id392741"></a><em class="parameter"><code>create mask = 0644</code></em></td></tr><tr><td><a class="indexterm" name="id392752"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id392764"></a><em class="parameter"><code>copy = printers</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[plotter]</code></em></td></tr><tr><td><a class="indexterm" name="id392784"></a><em class="parameter"><code>comment = Engineering Plotter</code></em></td></tr><tr><td><a class="indexterm" name="id392796"></a><em class="parameter"><code>path = /data/samba/spool</code></em></td></tr><tr><td><a class="indexterm" name="id392807"></a><em class="parameter"><code>create mask = 0644</code></em></td></tr><tr><td><a class="indexterm" name="id392819"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id392830"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id392842"></a><em class="parameter"><code>copy = printers</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch8smbconf4"></a><p class="title"><b>Example 10.7. Samba Configuration File  smb.conf Part D</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[APPS]</code></em></td></tr><tr><td><a class="indexterm" name="id392880"></a><em class="parameter"><code>path = /data/samba/shares/Apps</code></em></td></tr><tr><td><a class="indexterm" name="id392892"></a><em class="parameter"><code>force group = "Domain Users"</code></em></td></tr><tr><td><a class="indexterm" name="id392904"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[ACCT]</code></em></td></tr><tr><td><a class="indexterm" name="id392924"></a><em class="parameter"><code>path = /data/samba/shares/Accounting</code></em></td></tr><tr><td><a class="indexterm" name="id392936"></a><em class="parameter"><code>valid users = @acct, "@Domain Admins"</code></em></td></tr><tr><td><a class="indexterm" name="id392947"></a><em class="parameter"><code>force group = acct</code></em></td></tr><tr><td><a class="indexterm" name="id392959"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id392970"></a><em class="parameter"><code>create mask = 0660</code></em></td></tr><tr><td><a class="indexterm" name="id392982"></a><em class="parameter"><code>directory mask = 0770</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[ACCT_ADMIN]</code></em></td></tr><tr><td><a class="indexterm" name="id393002"></a><em class="parameter"><code>path = /data/samba/shares/Acct_Admin</code></em></td></tr><tr><td><a class="indexterm" name="id393014"></a><em class="parameter"><code>valid users = @”acct_admin”</code></em></td></tr><tr><td><a class="indexterm" name="id393026"></a><em class="parameter"><code>force group = acct_admin</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[HR_PR]</code></em></td></tr><tr><td><a class="indexterm" name="id393046"></a><em class="parameter"><code>path = /data/samba/shares/HR_PR</code></em></td></tr><tr><td><a class="indexterm" name="id393058"></a><em class="parameter"><code>valid users = @hr, @acct_admin</code></em></td></tr><tr><td><a class="indexterm" name="id393069"></a><em class="parameter"><code>force group = hr</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[ENGR]</code></em></td></tr><tr><td><a class="indexterm" name="id393090"></a><em class="parameter"><code>path = /data/samba/shares/Engr</code></em></td></tr><tr><td><a class="indexterm" name="id393101"></a><em class="parameter"><code>valid users = @engr, @receptionist, @truss, "@Domain Admins", cheri</code></em></td></tr><tr><td><a class="indexterm" name="id393113"></a><em class="parameter"><code>force group = engr</code></em></td></tr><tr><td><a class="indexterm" name="id393125"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id393136"></a><em class="parameter"><code>create mask = 0770</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[DATA]</code></em></td></tr><tr><td><a class="indexterm" name="id393156"></a><em class="parameter"><code>path = /data/samba/shares/DATA</code></em></td></tr><tr><td><a class="indexterm" name="id393168"></a><em class="parameter"><code>valid users = @engr, @receptionist, @truss, "@Domain Admins", cheri</code></em></td></tr><tr><td><a class="indexterm" name="id393180"></a><em class="parameter"><code>force group = engr</code></em></td></tr><tr><td><a class="indexterm" name="id393191"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id393203"></a><em class="parameter"><code>create mask = 0770</code></em></td></tr><tr><td><a class="indexterm" name="id393214"></a><em class="parameter"><code>copy = engr</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch8smbconf5"></a><p class="title"><b>Example 10.8. Samba Configuration File  smb.conf Part E</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[X]</code></em></td></tr><tr><td><a class="indexterm" name="id393253"></a><em class="parameter"><code>path = /data/samba/shares/X</code></em></td></tr><tr><td><a class="indexterm" name="id393264"></a><em class="parameter"><code>valid users = @engr, @acct</code></em></td></tr><tr><td><a class="indexterm" name="id393276"></a><em class="parameter"><code>force group = engr</code></em></td></tr><tr><td><a class="indexterm" name="id393288"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id393299"></a><em class="parameter"><code>create mask = 0770</code></em></td></tr><tr><td><a class="indexterm" name="id393310"></a><em class="parameter"><code>copy = engr</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[NETWORK]</code></em></td></tr><tr><td><a class="indexterm" name="id393331"></a><em class="parameter"><code>path = /data/samba/shares/network</code></em></td></tr><tr><td><a class="indexterm" name="id393342"></a><em class="parameter"><code>valid users = "@Domain Users"</code></em></td></tr><tr><td><a class="indexterm" name="id393354"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id393366"></a><em class="parameter"><code>create mask = 0770</code></em></td></tr><tr><td><a class="indexterm" name="id393377"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[UTILS]</code></em></td></tr><tr><td><a class="indexterm" name="id393397"></a><em class="parameter"><code>path = /data/samba/shares/Utils</code></em></td></tr><tr><td><a class="indexterm" name="id393409"></a><em class="parameter"><code>write list = "@Domain Admins"</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[SYS]</code></em></td></tr><tr><td><a class="indexterm" name="id393430"></a><em class="parameter"><code>path = /data/samba/shares/SYS</code></em></td></tr><tr><td><a class="indexterm" name="id393441"></a><em class="parameter"><code>valid users = chad</code></em></td></tr><tr><td><a class="indexterm" name="id393453"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id393464"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"><p>
+	<a class="indexterm" name="id393479"></a>
+	<a class="indexterm" name="id393486"></a>
+	<a class="indexterm" name="id393492"></a>
 	Most of these shares are only used by one company group, but they are required
 	because of some ancient Qbasic and Rbase applications were that written expecting
 	their own drive letters.
 	</p><p>
-	<a class="indexterm" name="id2631175"></a>
-	<a class="indexterm" name="id2631182"></a>
-	<a class="indexterm" name="id2631189"></a>
+	<a class="indexterm" name="id393504"></a>
+	<a class="indexterm" name="id393511"></a>
+	<a class="indexterm" name="id393518"></a>
 	Note: During the process of building the new server, I kept data files
 	up to date with the Novell server via use of <code class="literal">rsync</code>. 
 	On a separate system (my workstation in fact), which could be rebooted
@@ -739,7 +739,7 @@
 with_smbpasswd="0"
 smbpasswd="/usr/bin/smbpasswd"
 </pre></div></div><br class="example-break"><p>
-	<a class="indexterm" name="id2631651"></a>
+	<a class="indexterm" name="id393860"></a>
 	Note: I chose not to take advantage of the TLS capability of this. 
 	Eventually I may go back and tweak it.  Also, I chose not to take advantage
 	of the master/slave configuration as I heard horror stories that it was
@@ -813,11 +813,11 @@
 ...
 </pre><p>
 	</p><p>
-	<a class="indexterm" name="id2631751"></a>
-	<a class="indexterm" name="id2631758"></a>
-	<a class="indexterm" name="id2631765"></a>
-	<a class="indexterm" name="id2631772"></a>
-	<a class="indexterm" name="id2631778"></a>
+	<a class="indexterm" name="id393934"></a>
+	<a class="indexterm" name="id393941"></a>
+	<a class="indexterm" name="id393948"></a>
+	<a class="indexterm" name="id393954"></a>
+	<a class="indexterm" name="id393961"></a>
 	With the LDAP directory now initialized, it was time to create the Windows and POSIX
 	(UNIX) group accounts as well as the mappings from Windows groups to UNIX groups.
 	The easiest way to do this was to use <code class="literal">smbldap-groupadd</code> command.
@@ -825,34 +825,34 @@
 	unique GID, and an automatically determined RID. I learned the hard way not to
 	try to do this by hand.
 	</p><p>
-	<a class="indexterm" name="id2631801"></a>
-	<a class="indexterm" name="id2631808"></a>
-	<a class="indexterm" name="id2631815"></a>
+	<a class="indexterm" name="id393980"></a>
+	<a class="indexterm" name="id393987"></a>
+	<a class="indexterm" name="id393994"></a>
 	After I had my group mappings in place, I added users to the groups (the users
 	don't really have to exist yet). I used the <code class="literal">smbldap-groupmod</code>
 	command to accomplish this. It can also be done manually by adding memberUID
 	attributes to the group entries in LDAP.
 	</p><p>
-	<a class="indexterm" name="id2631836"></a>
-	<a class="indexterm" name="id2631842"></a>
-	<a class="indexterm" name="id2631849"></a>
+	<a class="indexterm" name="id394012"></a>
+	<a class="indexterm" name="id394019"></a>
+	<a class="indexterm" name="id394026"></a>
 	The most monumental task of all was adding the sambaSamAccount information to each
 	already existent posixAccount entry.  I did it one at a time as I moved people onto
 	the new server, by issuing the command:
 </p><pre class="screen">
 <code class="prompt">root# </code> smbldap-usermod -a -P username
 </pre><p>
-	<a class="indexterm" name="id2631872"></a>
-	<a class="indexterm" name="id2631879"></a>
-	<a class="indexterm" name="id2631886"></a>
+	<a class="indexterm" name="id394046"></a>
+	<a class="indexterm" name="id394053"></a>
+	<a class="indexterm" name="id394059"></a>
 	I completed that step for every user after asking the person what his or her current
 	NetWare password was. The wiser way to have done it would probably have been to dump the
 	entire database to an LDIF file. This can be done by executing:
 </p><pre class="screen">
 <code class="prompt">root# </code> slapcat &gt; somefile.ldif
 </pre><p>
-	<a class="indexterm" name="id2631909"></a>
-	<a class="indexterm" name="id2631916"></a>
+	<a class="indexterm" name="id394080"></a>
+	<a class="indexterm" name="id394087"></a>
 	Then update the LDIF file created by using a Perl script to parse and add the
 	appropriate attributes and objectClasses to each entry, followed by re-importing
 	the entire database into the LDAP directory. 
@@ -933,7 +933,7 @@
 sambaAcctFlags: [W          ]
 </pre><p>
 	</p><p>
-	<a class="indexterm" name="id2632031"></a>
+	<a class="indexterm" name="id394178"></a>
 	So now I could log on with a test user from the machine w2kengrspare. It was all well and
 	good, but that user was in no groups yet and so had pretty boring access.  I fixed that
 	by writing the login script! To write the login script, I used
@@ -942,7 +942,7 @@
 	easier to learn and more powerful than the standard netlogon scripts I have seen.
 	I also did not have to do a logon script per user or per group.
 	</p><p>
-	<a class="indexterm" name="id2632056"></a>
+	<a class="indexterm" name="id394198"></a>
 	I downloaded Kixtart and put the following files in my netlogon share:
 </p><pre class="screen">
 KIX32.EXE
@@ -954,7 +954,7 @@
           We can get around the need.
 </pre><p>
 	</p><p>
-	<a class="indexterm" name="id2632087"></a>
+	<a class="indexterm" name="id394221"></a>
 	I then wrote the <code class="filename">logon.kix</code> file that is shown in
 	<a class="link" href="nw4migration.html#ch8kix" title="Example 10.15. Kixtart Control File File: logon.kix">&#8220;Kixtart Control File  File: logon.kix&#8221;</a>. I chose to keep it all in one file, but it
 	can be split up and linked via include directives.
@@ -1137,7 +1137,7 @@
 	have only three such machines, and one is going away in the very near future,
 	so it was easier to do it by hand.
 	</p><p>
-	<a class="indexterm" name="id2632383"></a>
+	<a class="indexterm" name="id394445"></a>
 	At this point I was able to add the users. This is the part that really falls
 	into upgrade. I moved the users over one group at a time, starting with the
 	people who used the least amount of resources on the network. With each group

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/pr01.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/pr01.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/pr01.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>About the Cover Artwork</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="index.html" title="Samba-3 by Example"><link rel="prev" href="index.html" title="Samba-3 by Example"><link rel="next" href="pr02.html" title="Acknowledgments"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">About the Cover Artwork</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="pr02.html">Next</a></td></tr></table><hr></div><div class="preface" lang="en-US"><div class="titlepage"><div><div><h2 class="title"><a name="id2561668"></a>About the Cover Artwork</h2></div></div></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>About the Cover Artwork</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="index.html" title="Samba-3 by Example"><link rel="prev" href="index.html" title="Samba-3 by Example"><link rel="next" href="pr02.html" title="Acknowledgments"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">About the Cover Artwork</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="pr02.html">Next</a></td></tr></table><hr></div><div class="preface" lang="en-US"><div class="titlepage"><div><div><h2 class="title"><a name="id330669"></a>About the Cover Artwork</h2></div></div></div><p>
 	The cover artwork of this book continues the freedom theme of the first
 	edition of &#8220;<span class="quote">Samba-3 by Example</span>&#8221;. The history of civilization
 	demonstrates the fragile nature of freedom. It can be lost in a moment,

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/pr02.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/pr02.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/pr02.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Acknowledgments</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="index.html" title="Samba-3 by Example"><link rel="prev" href="pr01.html" title="About the Cover Artwork"><link rel="next" href="pr03.html" title="Foreword"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Acknowledgments</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pr01.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="pr03.html">Next</a></td></tr></table><hr></div><div class="preface" lang="en-US"><div class="titlepage"><div><div><h2 class="title"><a name="id2524808"></a>Acknowledgments</h2></div></div></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Acknowledgments</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="index.html" title="Samba-3 by Example"><link rel="prev" href="pr01.html" title="About the Cover Artwork"><link rel="next" href="pr03.html" title="Foreword"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Acknowledgments</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pr01.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="pr03.html">Next</a></td></tr></table><hr></div><div class="preface" lang="en-US"><div class="titlepage"><div><div><h2 class="title"><a name="id297914"></a>Acknowledgments</h2></div></div></div><p>
 	<span class="emphasis"><em>Samba-3 by Example</em></span> would not have been written except
 	as a result of feedback provided by reviewers and readers of the book <span class="emphasis"><em>The
 	Official Samba-3 HOWTO and Reference Guide.</em></span> This second edition

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/pr03.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/pr03.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/pr03.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Foreword</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="index.html" title="Samba-3 by Example"><link rel="prev" href="pr02.html" title="Acknowledgments"><link rel="next" href="preface.html" title="Preface"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Foreword</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pr02.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="preface.html">Next</a></td></tr></table><hr></div><div class="preface" lang="en-US"><div class="titlepage"><div><div><h2 class="title"><a name="id2524907"></a>Foreword</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="pr03.html#id2524914">By John M. Weathersby, Executive Director, OSSI</a></span></dt></dl></div><div class="sect1" lang="en-US"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2524914"></a>By John M. Weathersby, Executive Director, OSSI</h2></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Foreword</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="index.html" title="Samba-3 by Example"><link rel="prev" href="pr02.html" title="Acknowledgments"><link rel="next" href="preface.html" title="Preface"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Foreword</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pr02.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="preface.html">Next</a></td></tr></table><hr></div><div class="preface" lang="en-US"><div class="titlepage"><div><div><h2 class="title"><a name="id298546"></a>Foreword</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="pr03.html#id298553">By John M. Weathersby, Executive Director, OSSI</a></span></dt></dl></div><div class="sect1" lang="en-US"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id298553"></a>By John M. Weathersby, Executive Director, OSSI</h2></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>
 The Open Source Software Institute (OSSI) is comprised of representatives from a broad spectrum of business and
 non-business organizations that share a common interest in the promotion of development and implementation
 of open source software solutions globally, and in particular within the United States of America.

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/preface.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/preface.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/preface.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Preface</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="index.html" title="Samba-3 by Example"><link rel="prev" href="pr03.html" title="Foreword"><link rel="next" href="ExNetworks.html" title="Part I. Example Network Configurations"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Preface</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pr03.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ExNetworks.html">Next</a></td></tr></table><hr></div><div class="preface" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="preface"></a>Preface</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="preface.html#id2525103">Why Is This Book Necessary?</a></span></dt><dd><dl><dt><span class="sect2"><a href="preface.html#id2523863">Samba 3.0.20 Update Edition</a></span></dt></dl></dd><dt><span class="sect1"><a href="preface.html#id2523759">Prerequisites</a></span></dt><dt><span class="sect1"><a href="preface.html#id2523791">Approach</a></span></dt><dt><span class="sect1"><a href="preface.html#id2571069">Summary of Topics</a></span></dt><dt><span class="sect1"><a href="preface.html#id2571806">Conventions Used</a></span></dt></dl></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Preface</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="index.html" title="Samba-3 by Example"><link rel="prev" href="pr03.html" title="Foreword"><link rel="next" href="ExNetworks.html" title="Part I. Example Network Configurations"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Preface</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pr03.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ExNetworks.html">Next</a></td></tr></table><hr></div><div class="preface" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="preface"></a>Preface</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="preface.html#id298129">Why Is This Book Necessary?</a></span></dt><dd><dl><dt><span class="sect2"><a href="preface.html#id298166">Samba 3.0.20 Update Edition</a></span></dt></dl></dd><dt><span class="sect1"><a href="preface.html#id297715">Prerequisites</a></span></dt><dt><span class="sect1"><a href="preface.html#id339863">Approach</a></span></dt><dt><span class="sect1"><a href="preface.html#id339912">Summary of Topics</a></span></dt><dt><span class="sect1"><a href="preface.html#id340490">Conventions Used</a></span></dt></dl></div><p>
 	Network administrators live busy lives. We face distractions and pressures
 	that drive us to seek proven, working case scenarios that can be easily
 	implemented. Often this approach lands us in trouble. There is a 
@@ -33,7 +33,7 @@
 	detailed information regarding secure operation and configuration of peripheral
 	services and applications such as OpenLDAP, DNS and DHCP, the need for which
 	can be met from other resources that are dedicated to the subject.
-	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2525103"></a>Why Is This Book Necessary?</h2></div></div></div><p>
+	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id298129"></a>Why Is This Book Necessary?</h2></div></div></div><p>
 	This book is the result of observations and feedback. The feedback from
 	the Samba-HOWTO-Collection has been positive and complimentary. There
 	have been requests for far more worked examples, a
@@ -53,7 +53,7 @@
 	All example case configuration files, scripts, and other tools are provided
 	on the CD-ROM. This book is descriptive, provides detailed diagrams, and
 	makes deployment of Samba-3 a breeze.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2523863"></a>Samba 3.0.20 Update Edition</h3></div></div></div><p>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id298166"></a>Samba 3.0.20 Update Edition</h3></div></div></div><p>
 	The Samba 3.0.x series has been remarkably popular. At the time this book first
 	went to print samba-3.0.2 was being released. There have been significant modifications
 	and enhancements between samba-3.0.2 and samba-3.0.14 (the current release) that
@@ -126,7 +126,7 @@
 						means that functions such as adding machines to the domain, managing printers, etc. can now
 						be delegated to normal user accounts or to groups of users.
 						</p>
-					</td></tr></tbody></table></div></div><br class="table-break"></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2523759"></a>Prerequisites</h2></div></div></div><p>
+					</td></tr></tbody></table></div></div><br class="table-break"></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id297715"></a>Prerequisites</h2></div></div></div><p>
 	This book is not a tutorial on UNIX or Linux administration. UNIX and Linux
 	training is best obtained from books dedicated to the subject. This book
 	assumes that you have at least the basic skill necessary to use these operating
@@ -139,7 +139,7 @@
 	find yourself at times intimidated by assumptions made. In this situation, you
 	may need to refer to administrative guides or manuals for your operating system
 	platform to find what is the best method to achieve what the text of this book describes.
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2523791"></a>Approach</h2></div></div></div><p>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id339863"></a>Approach</h2></div></div></div><p>
 	The first chapter deals with some rather thorny network analysis issues. Do not be
 	put off by this. The information you glean, even without a detailed understanding
 	of network protocol analysis, can help you understand how Windows networking functions.
@@ -167,7 +167,7 @@
 	</p><p>
 	Each chapter has a set of questions and answers to help you to
 	to understand and digest key attributes of the solutions presented.
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2571069"></a>Summary of Topics</h2></div></div></div><p>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id339912"></a>Summary of Topics</h2></div></div></div><p>
 	The contents of this second edition of <span class="emphasis"><em>Samba-3 by Example</em></span>
 	have been rearranged based on feedback from purchasers of the first edition.
 	</p><p>
@@ -364,7 +364,7 @@
 		have seen some of the information a Windows client sends to
 		a file and print server to create a connection over which file and print
 		operations may take place.
-		</p></dd></dl></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2571806"></a>Conventions Used</h2></div></div></div><p>
+		</p></dd></dl></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id340490"></a>Conventions Used</h2></div></div></div><p>
     The following notation conventions are used throughout this book:
     </p><div class="itemizedlist"><ul type="disc"><li><p>
 	TOSHARG2 is used as an abbreviation for the book, &#8220;<span class="quote">The Official Samba-3

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/primer.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/primer.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/primer.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 16. Networking Primer</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="RefSection.html" title="Part III. Reference Section"><link rel="prev" href="appendix.html" title="Chapter 15. A Collection of Useful Tidbits"><link rel="next" href="apa.html" title="Appendix A.  GNU General Public License version 3"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 16. Networking Primer</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix.html">Prev</a> </td><th width="60%" align="center">Part III. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="apa.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="primer"></a>Chapter 16. Networking Primer</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="primer.html#id2647528">Requirements and Notes</a></span></dt><dt><span class="sect1"><a href="primer.html#id2647690">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="primer.html#id2647750">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="primer.html#id2647868">Exercises</a></span></dt><dd><dl><dt><span class="sect2"><a href="primer.html#id2647994">Single-Machine Broadcast Activity</a></span></dt><dt><span class="sect2"><a href="primer.html#secondmachine">Second Machine Startup Broadcast Interaction</a></span></dt><dt><span class="sect2"><a href="primer.html#id2649139">Simple Windows Client Connection Characteristics</a></span></dt><dt><span class="sect2"><a href="primer.html#id2649641">Windows 200x/XP Client Interaction with Samba-3</a></span></dt><dt><span class="sect2"><a href="primer.html#id2650209">Conclusions to Exercises</a></span></dt></dl></dd><dt><span class="sect1"><a href="primer.html#chap01conc">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="primer.html#id2650324">Technical Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="primer.html#chap01qa">Questions and Answers</a></span></dt></dl></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 16. Networking Primer</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="RefSection.html" title="Part III. Reference Section"><link rel="prev" href="appendix.html" title="Chapter 15. A Collection of Useful Tidbits"><link rel="next" href="apa.html" title="Appendix A.  GNU General Public License version 3"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 16. Networking Primer</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix.html">Prev</a> </td><th width="60%" align="center">Part III. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="apa.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="primer"></a>Chapter 16. Networking Primer</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="primer.html#id408228">Requirements and Notes</a></span></dt><dt><span class="sect1"><a href="primer.html#id408364">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="primer.html#id408414">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="primer.html#id408521">Exercises</a></span></dt><dd><dl><dt><span class="sect2"><a href="primer.html#id408634">Single-Machine Broadcast Activity</a></span></dt><dt><span class="sect2"><a href="primer.html#secondmachine">Second Machine Startup Broadcast Interaction</a></span></dt><dt><span class="sect2"><a href="primer.html#id409728">Simple Windows Client Connection Characteristics</a></span></dt><dt><span class="sect2"><a href="primer.html#id410194">Windows 200x/XP Client Interaction with Samba-3</a></span></dt><dt><span class="sect2"><a href="primer.html#id410719">Conclusions to Exercises</a></span></dt></dl></dd><dt><span class="sect1"><a href="primer.html#chap01conc">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="primer.html#id410820">Technical Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="primer.html#chap01qa">Questions and Answers</a></span></dt></dl></div><p>
 	You are about to use the equivalent of a microscope to look at the information
 	that runs through the veins of a Windows network. We do more to observe the information than
 	to interrogate it. When you are done with this primer, you should have a good understanding
@@ -8,7 +8,7 @@
 	</p><p>
 	Samba can be configured with a minimum of complexity. Simplicity should be mastered
 	before you get too deeply into complexities. Let's get moving: we have work to do.
-	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2647528"></a>Requirements and Notes</h2></div></div></div><p>
+	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id408228"></a>Requirements and Notes</h2></div></div></div><p>
 	Successful completion of this primer requires two Microsoft Windows 9x/Me Workstations
 	as well as two Microsoft Windows XP Professional Workstations, each equipped with an Ethernet
 	card connected using a hub. Also required is one additional server (either Windows
@@ -16,7 +16,7 @@
 	sniffer and analysis application (Wireshark is a good choice). All work should be undertaken
 	on a quiet network where there is no other traffic. It is best to use a dedicated hub
 	with only the machines under test connected at the time of the exercises.
-	</p><p><a class="indexterm" name="id2647549"></a>
+	</p><p><a class="indexterm" name="id408243"></a>
 	Wireshark (formerly Ethereal) has become the network protocol analyzer of choice for many network administrators.
 	You may find more information regarding this tool from the
 	<a class="ulink" href="http://www.wireshark.org" target="_top">Wireshark</a> Web site. Wireshark installation
@@ -36,11 +36,11 @@
 	filter. Ethernet switches may filter out traffic that is not directed at the machine
 	that is used to monitor traffic; this would not allow you to complete the projects.
 	</p></div><p>
-	<a class="indexterm" name="id2647619"></a>
+	<a class="indexterm" name="id408302"></a>
 	Do not worry too much if you do not have access to all this equipment; network captures
 	from the exercises are provided on the enclosed CD-ROM. This makes it possible to dive directly
 	into the analytical part of the exercises if you so desire.
-	</p><p><a class="indexterm" name="id2647634"></a><a class="indexterm" name="id2647646"></a>
+	</p><p><a class="indexterm" name="id408315"></a><a class="indexterm" name="id408327"></a>
 	Please do not be alarmed at the use of a high-powered analysis tool (Wireshark) in this
 	primer.  We expose you only to a minimum of detail necessary to complete
 	the exercises. If you choose to use any other network sniffer and protocol
@@ -54,11 +54,11 @@
 	</p><p>
 	<a class="link" href="primer.html#chap01qa" title="Questions and Answers">&#8220;Questions and Answers&#8221;</a> also provides useful information
 	that may help you to avoid significantly time-consuming networking problems.
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2647690"></a>Introduction</h2></div></div></div><p>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id408364"></a>Introduction</h2></div></div></div><p>
 	The purpose of this chapter is to create familiarity with key aspects of Microsoft Windows
 	network computing. If you want a solid technical grounding, do not gloss over these exercises.
 	The points covered are recurrent issues on the Samba mailing lists.
-	</p><p><a class="indexterm" name="id2647704"></a>
+	</p><p><a class="indexterm" name="id408376"></a>
 	You can see from these exercises that Windows networking involves quite a lot of network
 	broadcast traffic. You can look into the contents of some packets, but only to see
 	some particular information that the Windows client sends to a server in the course of
@@ -74,18 +74,18 @@
 	Recommended preparatory reading: <span class="emphasis"><em>The Official Samba-3 HOWTO and Reference Guide, Second
 	Edition</em></span> (TOSHARG2) Chapter 9, &#8220;<span class="quote">Network Browsing,</span>&#8221; and Chapter 3,
 	&#8220;<span class="quote">Server Types and Security Modes.</span>&#8221;
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2647750"></a>Assignment Tasks</h3></div></div></div><p><a class="indexterm" name="id2647757"></a>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id408414"></a>Assignment Tasks</h3></div></div></div><p><a class="indexterm" name="id408421"></a>
 		You are about to witness how Microsoft Windows computer networking functions. The
 		exercises step through identification of how a client machine establishes a
 		connection to a remote Windows server. You observe how Windows machines find
 		each other (i.e., how browsing works) and how the two key types of user identification
 		(share mode security and user mode security) are affected.
-		</p><p><a class="indexterm" name="id2647775"></a>
+		</p><p><a class="indexterm" name="id408435"></a>
 		The networking protocols used by MS Windows networking when working with Samba
 		use TCP/IP as the transport protocol. The protocols that are specific to Windows
 		networking are encapsulated in TCP/IP. The network analyzer we use (Wireshark)
 		is able to show you the contents of the TCP/IP packets (or messages).
-		</p><div class="procedure"><a name="chap01tasks"></a><p class="title"><b>Procedure 16.1. Diagnostic Tasks</b></p><ol type="1"><li><p><a class="indexterm" name="id2647808"></a><a class="indexterm" name="id2647819"></a><a class="indexterm" name="id2647827"></a>
+		</p><div class="procedure"><a name="chap01tasks"></a><p class="title"><b>Procedure 16.1. Diagnostic Tasks</b></p><ol type="1"><li><p><a class="indexterm" name="id408465"></a><a class="indexterm" name="id408477"></a><a class="indexterm" name="id408485"></a>
 			Examine network traces to witness SMB broadcasts, host announcements,
 			and name resolution processes.
 			</p></li><li><p>
@@ -95,8 +95,8 @@
 			</p></li><li><p>
 			Review traces of network logons for a Windows 9x/Me client as well as
 			a domain logon for a Windows XP Professional client.
-			</p></li></ol></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2647868"></a>Exercises</h2></div></div></div><p>
-	<a class="indexterm" name="id2647875"></a>
+			</p></li></ol></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id408521"></a>Exercises</h2></div></div></div><p>
+	<a class="indexterm" name="id408529"></a>
 	You are embarking on a course of discovery. The first part of the exercise requires
 	two MS Windows 9x/Me systems. We called one machine <code class="constant">WINEPRESSME</code> and the
 	other <code class="constant">MILGATE98</code>. Each needs an IP address; we used <code class="literal">10.1.1.10</code>
@@ -111,7 +111,7 @@
 	</p><div class="itemizedlist"><ul type="disc"><li><p>Windows 98  name: MILGATE98</p></li><li><p>Windows Me  name: WINEPRESSME</p></li><li><p>Windows XP Professional  name: LightrayXP</p></li><li><p>Samba-3.0.20 running on a SUSE Enterprise Linux 9</p></li></ul></div><p>
 	Choose a workgroup name (MIDEARTH) for each exercise.
 	</p><p>
-	<a class="indexterm" name="id2647965"></a>
+	<a class="indexterm" name="id408611"></a>
 	The network captures provided on the CD-ROM included with this book were captured using <code class="constant">Ethereal</code>
 	version <code class="literal">0.10.6</code>. A later version suffices without problems (i.e. you should be using Wireshark), but an earlier version may not
 	expose all the information needed. Each capture file has been decoded and listed as a trace file. A summary of all
@@ -119,9 +119,9 @@
 	perform the time-consuming equipment configuration and test work. This is a good time to point out that the value
 	that can be derived from this book really does warrant your taking sufficient time to practice each exercise with
 	care and attention to detail.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2647994"></a>Single-Machine Broadcast Activity</h3></div></div></div><p>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id408634"></a>Single-Machine Broadcast Activity</h3></div></div></div><p>
 	In this section, we start a single Windows 9x/Me machine, then monitor network activity for 30 minutes.
-	</p><div class="procedure"><a name="id2648005"></a><p class="title"><b>Procedure 16.2. Monitoring Windows 9x Steps</b></p><ol type="1"><li><p>
+	</p><div class="procedure"><a name="id408644"></a><p class="title"><b>Procedure 16.2. Monitoring Windows 9x Steps</b></p><ol type="1"><li><p>
 		Start the machine from which network activity will be monitored (using <code class="literal">Wireshark</code>).
 		Launch <code class="literal">Wireshark</code>, click
 			<span class="guimenu">Capture</span> &#8594; <span class="guimenuitem">Start</span>.
@@ -138,28 +138,28 @@
 		</p></li><li><p>
 		Analyze the capture. Identify each discrete message type that was captured. Note what transport protocol
 		was used. Identify the timing between messages of identical types.
-		</p></li></ol></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2648128"></a>Findings</h4></div></div></div><p>
+		</p></li></ol></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id408760"></a>Findings</h4></div></div></div><p>
 		The summary of the first 10 minutes of the packet capture should look like <a class="link" href="primer.html#pktcap01" title="Figure 16.1. Windows Me Broadcasts The First 10 Minutes">&#8220;Windows Me  Broadcasts  The First 10 Minutes&#8221;</a>.
 		A screenshot of a later stage of the same capture is shown in <a class="link" href="primer.html#pktcap02" title="Figure 16.2. Windows Me Later Broadcast Sample">&#8220;Windows Me  Later Broadcast Sample&#8221;</a>.
-		</p><div class="figure"><a name="pktcap01"></a><p class="title"><b>Figure 16.1. Windows Me  Broadcasts  The First 10 Minutes</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/WINREPRESSME-Capture.png" width="216" alt="Windows Me Broadcasts The First 10 Minutes"></div></div></div><br class="figure-break"><div class="figure"><a name="pktcap02"></a><p class="title"><b>Figure 16.2. Windows Me  Later Broadcast Sample</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/WINREPRESSME-Capture2.png" width="226.8" alt="Windows Me Later Broadcast Sample"></div></div></div><br class="figure-break"><p><a class="indexterm" name="id2648245"></a><a class="indexterm" name="id2648256"></a>
+		</p><div class="figure"><a name="pktcap01"></a><p class="title"><b>Figure 16.1. Windows Me  Broadcasts  The First 10 Minutes</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/WINREPRESSME-Capture.png" width="216" alt="Windows Me Broadcasts The First 10 Minutes"></div></div></div><br class="figure-break"><div class="figure"><a name="pktcap02"></a><p class="title"><b>Figure 16.2. Windows Me  Later Broadcast Sample</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/WINREPRESSME-Capture2.png" width="226.8" alt="Windows Me Later Broadcast Sample"></div></div></div><br class="figure-break"><p><a class="indexterm" name="id408873"></a><a class="indexterm" name="id408884"></a>
 		Broadcast messages observed are shown in <a class="link" href="primer.html#capsstats01" title="Table 16.1. Windows Me Startup Broadcast Capture Statistics">&#8220;Windows Me  Startup Broadcast Capture Statistics&#8221;</a>.
 		Actual observations vary a little, but not by much.
 		Early in the startup process, the Windows Me machine broadcasts its name for two reasons:
 		first to ensure that its name would not result in a name clash, and second to establish its
 		presence with the Local Master Browser (LMB).
-		</p><div class="table"><a name="capsstats01"></a><p class="title"><b>Table 16.1. Windows Me  Startup Broadcast Capture Statistics</b></p><div class="table-contents"><table summary="Windows Me  Startup Broadcast Capture Statistics" border="1"><colgroup><col align="left"><col align="center"><col align="center"><col align="left"></colgroup><thead><tr><th align="left">Message</th><th align="center">Type</th><th align="center">Num</th><th align="left">Notes</th></tr></thead><tbody><tr><td align="left">WINEPRESSME&lt;00&gt;</td><td align="center">Reg</td><td align="center">8</td><td align="left">4 lots of 2, 0.6 sec apart</td></tr><tr><td align="left">WINEPRESSME&lt;03&gt;</td><td align="center">Reg</td><td align="center">8</td><td align="left">4 lots of 2, 0.6 sec apart</td></tr><tr><td align="left">WINEPRESSME&lt;20&gt;</td><td align="center">Reg</td><td align="center">8</td><td align="left">4 lots of 2, 0.75 sec apart</td></tr><tr><td align="left">MIDEARTH&lt;00&gt;</td><td align="center">Reg</td><td align="center">8</td><td align="left">4 lots of 2, 0.75 sec apart</td></tr><tr><td align="left">MIDEARTH&lt;1d&gt;</td><td align="center">Reg</td><td align="center">8</td><td align="left">4 lots of 2, 0.75 sec apart</td></tr><tr><td align="left">MIDEARTH&lt;1e&gt;</td><td align="center">Reg</td><td align="center">8</td><td align="left">4 lots of 2, 0.75 sec apart</td></tr><tr><td align="left">MIDEARTH&lt;1b&gt;</td><td align="center">Qry</td><td align="center">84</td><td align="left">300 sec apart at stable operation</td></tr><tr><td align="left">__MSBROWSE__</td><td align="center">Reg</td><td align="center">8</td><td align="left">Registered after winning election to Browse Master</td></tr><tr><td align="left">JHT&lt;03&gt;</td><td align="center">Reg</td><td align="center">8</td><td align="left">4 x 2. This is the name of the user that logged onto Windows</td></tr><tr><td align="left">Host Announcement WINEPRESSME</td><td align="center">Ann</td><td align="center">2</td><td align="left">Observed at 10 sec</td></tr><tr><td align="left">Domain/Workgroup Announcement MIDEARTH</td><td align="center">Ann</td><td align="center">18</td><td align="left">300 sec apart at stable operation</td></tr><tr><td align="left">Local Master Announcement WINEPRESSME</td><td align="center">Ann</td><td align="center">18</td><td align="left">300 sec apart at stable operation</td></tr><tr><td align="left">Get Backup List Request</td><td align="center">Qry</td><td align="center">12</td><td align="left">6 x 2 early in startup, 0.5 sec apart</td></tr><tr><td align="left">Browser Election Request</td><td align="center">Ann</td><td align="center">10</td><td align="left">5 x 2 early in startup</td></tr><tr><td align="left">Request Announcement WINEPRESSME</td><td align="center">Ann</td><td align="center">4</td><td align="left">Early in startup</td></tr></tbody></table></div></div><br class="table-break"><p><a class="indexterm" name="id2648601"></a><a class="indexterm" name="id2648609"></a>
+		</p><div class="table"><a name="capsstats01"></a><p class="title"><b>Table 16.1. Windows Me  Startup Broadcast Capture Statistics</b></p><div class="table-contents"><table summary="Windows Me  Startup Broadcast Capture Statistics" border="1"><colgroup><col align="left"><col align="center"><col align="center"><col align="left"></colgroup><thead><tr><th align="left">Message</th><th align="center">Type</th><th align="center">Num</th><th align="left">Notes</th></tr></thead><tbody><tr><td align="left">WINEPRESSME&lt;00&gt;</td><td align="center">Reg</td><td align="center">8</td><td align="left">4 lots of 2, 0.6 sec apart</td></tr><tr><td align="left">WINEPRESSME&lt;03&gt;</td><td align="center">Reg</td><td align="center">8</td><td align="left">4 lots of 2, 0.6 sec apart</td></tr><tr><td align="left">WINEPRESSME&lt;20&gt;</td><td align="center">Reg</td><td align="center">8</td><td align="left">4 lots of 2, 0.75 sec apart</td></tr><tr><td align="left">MIDEARTH&lt;00&gt;</td><td align="center">Reg</td><td align="center">8</td><td align="left">4 lots of 2, 0.75 sec apart</td></tr><tr><td align="left">MIDEARTH&lt;1d&gt;</td><td align="center">Reg</td><td align="center">8</td><td align="left">4 lots of 2, 0.75 sec apart</td></tr><tr><td align="left">MIDEARTH&lt;1e&gt;</td><td align="center">Reg</td><td align="center">8</td><td align="left">4 lots of 2, 0.75 sec apart</td></tr><tr><td align="left">MIDEARTH&lt;1b&gt;</td><td align="center">Qry</td><td align="center">84</td><td align="left">300 sec apart at stable operation</td></tr><tr><td align="left">__MSBROWSE__</td><td align="center">Reg</td><td align="center">8</td><td align="left">Registered after winning election to Browse Master</td></tr><tr><td align="left">JHT&lt;03&gt;</td><td align="center">Reg</td><td align="center">8</td><td align="left">4 x 2. This is the name of the user that logged onto Windows</td></tr><tr><td align="left">Host Announcement WINEPRESSME</td><td align="center">Ann</td><td align="center">2</td><td align="left">Observed at 10 sec</td></tr><tr><td align="left">Domain/Workgroup Announcement MIDEARTH</td><td align="center">Ann</td><td align="center">18</td><td align="left">300 sec apart at stable operation</td></tr><tr><td align="left">Local Master Announcement WINEPRESSME</td><td align="center">Ann</td><td align="center">18</td><td align="left">300 sec apart at stable operation</td></tr><tr><td align="left">Get Backup List Request</td><td align="center">Qry</td><td align="center">12</td><td align="left">6 x 2 early in startup, 0.5 sec apart</td></tr><tr><td align="left">Browser Election Request</td><td align="center">Ann</td><td align="center">10</td><td align="left">5 x 2 early in startup</td></tr><tr><td align="left">Request Announcement WINEPRESSME</td><td align="center">Ann</td><td align="center">4</td><td align="left">Early in startup</td></tr></tbody></table></div></div><br class="table-break"><p><a class="indexterm" name="id409219"></a><a class="indexterm" name="id409227"></a>
 		From the packet trace, it should be noted that no messages were propagated over TCP/IP;
 		all messages employed UDP/IP.  When steady-state operation has been achieved, there is a cycle
 		of various announcements, re-election of a browse master, and name queries. These create
 		the symphony of announcements by which network browsing is made possible.
-		</p><p><a class="indexterm" name="id2648627"></a>
+		</p><p><a class="indexterm" name="id409241"></a>
 		For detailed information regarding the precise behavior of the CIFS/SMB protocols,
 		refer to the book &#8220;<span class="quote">Implementing CIFS: The Common Internet File System,</span>&#8221;
 		by Christopher Hertel, (Prentice Hall PTR, ISBN: 013047116X).
 		</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="secondmachine"></a>Second Machine Startup Broadcast Interaction</h3></div></div></div><p>
 	At this time, the machine you used to capture the single-system startup trace should still be running.
 	The objective of this task is to identify the interaction of two machines in respect to broadcast activity.
-	</p><div class="procedure"><a name="id2648663"></a><p class="title"><b>Procedure 16.3. Monitoring of Second Machine Activity</b></p><ol type="1"><li><p>
+	</p><div class="procedure"><a name="id409273"></a><p class="title"><b>Procedure 16.3. Monitoring of Second Machine Activity</b></p><ol type="1"><li><p>
 		On the machine from which network activity will be monitored (using <code class="literal">Wireshark</code>),
 		launch <code class="literal">Wireshark</code> and click
 			<span class="guimenu">Capture</span> &#8594; <span class="guimenuitem">Start</span>.
@@ -176,7 +176,7 @@
 		</p></li><li><p>
 		Analyze the capture trace, taking note of the transport protocols used, the types of messages observed,
 		and what interaction took place between the two machines. Leave both machines running for the next task.
-		</p></li></ol></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2648779"></a>Findings</h4></div></div></div><p>
+		</p></li></ol></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id409382"></a>Findings</h4></div></div></div><p>
 		<a class="link" href="primer.html#capsstats02" title="Table 16.2. Second Machine (Windows 98) Capture Statistics">&#8220;Second Machine (Windows 98)  Capture Statistics&#8221;</a> summarizes capture statistics observed. As in the previous case,
 		all announcements used UDP/IP broadcasts. Also, as was observed with the last example, the second
 		Windows 9x/Me machine broadcasts its name on startup to ensure that there exists no name clash
@@ -184,18 +184,18 @@
 		to explore the inner details of the precise mechanism of how this functions should refer to
 		&#8220;<span class="quote">Implementing CIFS: The Common Internet File System.</span>&#8221;
 		</p><div class="table"><a name="capsstats02"></a><p class="title"><b>Table 16.2. Second Machine (Windows 98)  Capture Statistics</b></p><div class="table-contents"><table summary="Second Machine (Windows 98)  Capture Statistics" border="1"><colgroup><col align="left"><col align="center"><col align="center"><col align="left"></colgroup><thead><tr><th align="left">Message</th><th align="center">Type</th><th align="center">Num</th><th align="left">Notes</th></tr></thead><tbody><tr><td align="left">MILGATE98&lt;00&gt;</td><td align="center">Reg</td><td align="center">8</td><td align="left">4 lots of 2, 0.6 sec apart</td></tr><tr><td align="left">MILGATE98&lt;03&gt;</td><td align="center">Reg</td><td align="center">8</td><td align="left">4 lots of 2, 0.6 sec apart</td></tr><tr><td align="left">MILGATE98&lt;20&gt;</td><td align="center">Reg</td><td align="center">8</td><td align="left">4 lots of 2, 0.75 sec apart</td></tr><tr><td align="left">MIDEARTH&lt;00&gt;</td><td align="center">Reg</td><td align="center">8</td><td align="left">4 lots of 2, 0.75 sec apart</td></tr><tr><td align="left">MIDEARTH&lt;1d&gt;</td><td align="center">Reg</td><td align="center">8</td><td align="left">4 lots of 2, 0.75 sec apart</td></tr><tr><td align="left">MIDEARTH&lt;1e&gt;</td><td align="center">Reg</td><td align="center">8</td><td align="left">4 lots of 2, 0.75 sec apart</td></tr><tr><td align="left">MIDEARTH&lt;1b&gt;</td><td align="center">Qry</td><td align="center">18</td><td align="left">900 sec apart at stable operation</td></tr><tr><td align="left">JHT&lt;03&gt;</td><td align="center">Reg</td><td align="center">2</td><td align="left">This is the name of the user that logged onto Windows</td></tr><tr><td align="left">Host Announcement MILGATE98</td><td align="center">Ann</td><td align="center">14</td><td align="left">Every 120 sec</td></tr><tr><td align="left">Domain/Workgroup Announcement MIDEARTH</td><td align="center">Ann</td><td align="center">6</td><td align="left">900 sec apart at stable operation</td></tr><tr><td align="left">Local Master Announcement WINEPRESSME</td><td align="center">Ann</td><td align="center">6</td><td align="left">Insufficient detail to determine frequency</td></tr></tbody></table></div></div><br class="table-break"><p>
-	    	<a class="indexterm" name="id2649061"></a>
-		<a class="indexterm" name="id2649068"></a>
-		<a class="indexterm" name="id2649075"></a>
+	    	<a class="indexterm" name="id409654"></a>
+		<a class="indexterm" name="id409661"></a>
+		<a class="indexterm" name="id409668"></a>
 		Observation of the contents of Host Announcements, Domain/Workgroup Announcements,
 		and Local Master Announcements is instructive. These messages convey a significant
 		level of detail regarding the nature of each machine that is on the network. An example
 		dissection of a Host Announcement is given in <a class="link" href="primer.html#hostannounce" title="Figure 16.3. Typical Windows 9x/Me Host Announcement">&#8220;Typical Windows 9x/Me Host Announcement&#8221;</a>.
-		</p><div class="figure"><a name="hostannounce"></a><p class="title"><b>Figure 16.3. Typical Windows 9x/Me Host Announcement</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/HostAnnouncment.png" width="221.4" alt="Typical Windows 9x/Me Host Announcement"></div></div></div><br class="figure-break"></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2649139"></a>Simple Windows Client Connection Characteristics</h3></div></div></div><p>
+		</p><div class="figure"><a name="hostannounce"></a><p class="title"><b>Figure 16.3. Typical Windows 9x/Me Host Announcement</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/HostAnnouncment.png" width="221.4" alt="Typical Windows 9x/Me Host Announcement"></div></div></div><br class="figure-break"></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id409728"></a>Simple Windows Client Connection Characteristics</h3></div></div></div><p>
 	The purpose of this exercise is to discover how Microsoft Windows clients create (establish)
 	connections with remote servers. The methodology involves analysis of a key aspect of how
 	Windows clients access remote servers: the session setup protocol.
-	</p><div class="procedure"><a name="id2649153"></a><p class="title"><b>Procedure 16.4. Client Connection Exploration Steps</b></p><ol type="1"><li><p>
+	</p><div class="procedure"><a name="id409740"></a><p class="title"><b>Procedure 16.4. Client Connection Exploration Steps</b></p><ol type="1"><li><p>
 		Configure a Windows 9x/Me machine (MILGATE98) with a share called <code class="constant">Stuff</code>.
 		Create a <em class="parameter"><code>Full Access</code></em> control password on this share.
 		</p></li><li><p>
@@ -216,11 +216,11 @@
 		When the share called <code class="constant">Stuff</code> is being displayed, stop the capture.
 		Save the captured data in case it is needed for later analysis.
 		</p></li><li><p>
-		<a class="indexterm" name="id2649284"></a>
+		<a class="indexterm" name="id409864"></a>
 		From the top of the packets captured, scan down to locate the first packet that has
 		interpreted as <code class="constant">Session Setup AndX, User: anonymous; Tree Connect AndX,
 		Path: \\MILGATE98\IPC$</code>.
-		</p></li><li><p><a class="indexterm" name="id2649303"></a><a class="indexterm" name="id2649311"></a>
+		</p></li><li><p><a class="indexterm" name="id409881"></a><a class="indexterm" name="id409889"></a>
 		In the dissection (analysis) panel, expand the <code class="constant">SMB, Session Setup AndX Request,
 		and Tree Connect AndX Request</code>. Examine both operations. Identify the name of
 		the user Account and what password was used. The Account name should be empty.
@@ -230,29 +230,29 @@
 		decoded of the type <code class="constant">Session Setup AndX</code>. Locate the last such packet
 		that was targeted at the <code class="constant">\\MILGATE98\IPC$</code> service.
 		</p></li><li><p>
-		<a class="indexterm" name="id2649356"></a>
-		<a class="indexterm" name="id2649363"></a>
+		<a class="indexterm" name="id409930"></a>
+		<a class="indexterm" name="id409937"></a>
 		Dissect this packet as per the previous one. This packet should have a password length
 		of 24 (characters) and should have a password field, the contents of which is a
 		long hexadecimal number. Observe the name in the Account field. This is a User Mode
 		session setup packet.
-		</p></li></ol></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2649376"></a>Findings and Comments</h4></div></div></div><p>
-		<a class="indexterm" name="id2649384"></a>
-		The <code class="constant">IPC$</code> share serves a vital purpose<sup>[<a name="id2649396" href="#ftn.id2649396" class="footnote">15</a>]</sup>
+		</p></li></ol></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id409948"></a>Findings and Comments</h4></div></div></div><p>
+		<a class="indexterm" name="id409956"></a>
+		The <code class="constant">IPC$</code> share serves a vital purpose<sup>[<a name="id409967" href="#ftn.id409967" class="footnote">15</a>]</sup>
 		in SMB/CIFS-based networking.  A Windows client connects to this resource to obtain the list of
 		resources that are available on the server. The server responds with the shares and print queues that
 		are available. In most but not all cases, the connection is made with a <code class="constant">NULL</code>
 		username and a <code class="constant">NULL</code> password.
 		</p><p>
-		<a class="indexterm" name="id2649416"></a>
+		<a class="indexterm" name="id409984"></a>
 		The two packets examined are material evidence of how Windows clients may
 		interoperate with Samba. Samba requires every connection setup to be authenticated using
 		valid UNIX account credentials (UID/GID). This means that even a <code class="constant">NULL</code>
 		session setup can be established only by automatically mapping it to a valid UNIX
 		account.
 		</p><p>
-	    <a class="indexterm" name="id2649436"></a><a class="indexterm" name="id2649441"></a>
-	    <a class="indexterm" name="id2649450"></a>
+	    <a class="indexterm" name="id410001"></a><a class="indexterm" name="id410007"></a>
+	    <a class="indexterm" name="id410016"></a>
 		Samba has a special name for the <code class="constant">NULL</code>, or empty, user account:
 		it calls it the <a class="link" href="smb.conf.5.html#GUESTACCOUNT">guest account</a>. The
 		default value of this parameter is <code class="constant">nobody</code>; however, this can be
@@ -261,9 +261,9 @@
 		FTP account. A sample NULL Session Setup AndX packet dissection is shown in
 		<a class="link" href="primer.html#nullconnect" title="Figure 16.4. Typical Windows 9x/Me NULL SessionSetUp AndX Request">&#8220;Typical Windows 9x/Me NULL SessionSetUp AndX Request&#8221;</a>.
 		</p><div class="figure"><a name="nullconnect"></a><p class="title"><b>Figure 16.4. Typical Windows 9x/Me NULL SessionSetUp AndX Request</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/NullConnect.png" width="221.4" alt="Typical Windows 9x/Me NULL SessionSetUp AndX Request"></div></div></div><br class="figure-break"><p>
-	    	<a class="indexterm" name="id2649536"></a>
-		<a class="indexterm" name="id2649543"></a>
-		<a class="indexterm" name="id2649550"></a>
+	    	<a class="indexterm" name="id410095"></a>
+		<a class="indexterm" name="id410102"></a>
+		<a class="indexterm" name="id410109"></a>
 		When a UNIX/Linux system does not have a <code class="constant">nobody</code> user account
 		(<code class="filename">/etc/passwd</code>), the operation of the <code class="constant">NULL</code>
 		account cannot validate and thus connections that utilize the guest account
@@ -271,11 +271,11 @@
 		problem reported on the Samba mailing list. A sample User Mode session setup AndX
 		is shown in <a class="link" href="primer.html#userconnect" title="Figure 16.5. Typical Windows 9x/Me User SessionSetUp AndX Request">&#8220;Typical Windows 9x/Me User SessionSetUp AndX Request&#8221;</a>.
 		</p><div class="figure"><a name="userconnect"></a><p class="title"><b>Figure 16.5. Typical Windows 9x/Me User SessionSetUp AndX Request</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/UserConnect.png" width="221.4" alt="Typical Windows 9x/Me User SessionSetUp AndX Request"></div></div></div><br class="figure-break"><p>
-		<a class="indexterm" name="id2649627"></a>
+		<a class="indexterm" name="id410182"></a>
 		The User Mode connection packet contains the account name and the domain name.
 		The password is provided in Microsoft encrypted form, and its length is shown
 		as 24 characters. This is the length of Microsoft encrypted passwords.
-		</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2649641"></a>Windows 200x/XP Client Interaction with Samba-3</h3></div></div></div><p>
+		</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id410194"></a>Windows 200x/XP Client Interaction with Samba-3</h3></div></div></div><p>
 	By now you may be asking, &#8220;<span class="quote">Why did you choose to work with Windows 9x/Me?</span>&#8221;
 	</p><p>
 	First, we want to demonstrate the simple case. This book is not intended to be a detailed treatise
@@ -290,7 +290,7 @@
 	To complete this exercise, you need a Windows XP Professional client that has been configured as
 	a domain member of either a Samba-controlled domain or a Windows NT4 or 200x Active Directory domain.
 	Here we do not provide details for how to configure this, as full coverage is provided earlier in this book.
-	</p><div class="procedure"><a name="id2649684"></a><p class="title"><b>Procedure 16.5. Steps to Explore Windows XP Pro Connection Set-up</b></p><ol type="1"><li><p>
+	</p><div class="procedure"><a name="id410228"></a><p class="title"><b>Procedure 16.5. Steps to Explore Windows XP Pro Connection Set-up</b></p><ol type="1"><li><p>
 		Start your domain controller. Also, start the Wireshark monitoring machine, launch Wireshark,
 		and then wait for the next step to complete.
 		</p></li><li><p>
@@ -319,14 +319,14 @@
 		If desired, the Windows XP Professional client and the domain controller are no longer needed for exercises
 		in this chapter.
 		</p></li><li><p>
-		<a class="indexterm" name="id2649910"></a>
-                <a class="indexterm" name="id2649917"></a>
+		<a class="indexterm" name="id410442"></a>
+                <a class="indexterm" name="id410449"></a>
                 From the top of the packets captured, scan down to locate the first packet that has
                 interpreted as <code class="constant">Session Setup AndX Request, NTLMSSP_AUTH</code>.
                 </p></li><li><p>
-		<a class="indexterm" name="id2649937"></a>
-		<a class="indexterm" name="id2649944"></a>
-		<a class="indexterm" name="id2649951"></a>
+		<a class="indexterm" name="id410467"></a>
+		<a class="indexterm" name="id410474"></a>
+		<a class="indexterm" name="id410481"></a>
                 In the dissection (analysis) panel, expand the <code class="constant">SMB, Session Setup AndX Request</code>.
 		Expand the packet decode information, beginning at the <code class="constant">Security Blob:</code>
 		entry. Expand the <code class="constant">GSS-API -&gt; SPNEGO -&gt; netTokenTarg -&gt; responseToken -&gt; NTLMSSP</code>
@@ -338,7 +338,7 @@
                 decoded of the type <code class="constant">Session Setup AndX Request</code>. Click the last such packet that
 		has been decoded as <code class="constant">Session Setup AndX Request, NTLMSSP_AUTH</code>.
                 </p></li><li><p>
-		<a class="indexterm" name="id2650014"></a>
+		<a class="indexterm" name="id410538"></a>
                 In the dissection (analysis) panel, expand the <code class="constant">SMB, Session Setup AndX Request</code>.
                 Expand the packet decode information, beginning at the <code class="constant">Security Blob:</code>
                 entry. Expand the <code class="constant">GSS-API -&gt; SPNEGO -&gt; netTokenTarg -&gt; responseToken -&gt; NTLMSSP</code>
@@ -349,18 +349,18 @@
 		The values of these two parameters are the Microsoft encrypted password hashes: respectively, the LanMan
 		password and then the NT (case-preserving) password hash.
                 </p></li><li><p>
-                <a class="indexterm" name="id2650075"></a>
-                <a class="indexterm" name="id2650082"></a>
+                <a class="indexterm" name="id410593"></a>
+                <a class="indexterm" name="id410600"></a>
                 The passwords are 24-character hexadecimal numbers. This packet confirms that this is a User Mode
 		session setup packet.
-                </p></li></ol></div><div class="figure"><a name="XPCap01"></a><p class="title"><b>Figure 16.6. Typical Windows XP NULL Session Setup AndX Request</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/WindowsXP-NullConnection.png" width="270" alt="Typical Windows XP NULL Session Setup AndX Request"></div></div></div><br class="figure-break"><div class="figure"><a name="XPCap02"></a><p class="title"><b>Figure 16.7. Typical Windows XP User Session Setup AndX Request</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/WindowsXP-UserConnection.png" width="270" alt="Typical Windows XP User Session Setup AndX Request"></div></div></div><br class="figure-break"><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2650178"></a>Discussion</h4></div></div></div><p><a class="indexterm" name="id2650184"></a>
+                </p></li></ol></div><div class="figure"><a name="XPCap01"></a><p class="title"><b>Figure 16.6. Typical Windows XP NULL Session Setup AndX Request</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/WindowsXP-NullConnection.png" width="270" alt="Typical Windows XP NULL Session Setup AndX Request"></div></div></div><br class="figure-break"><div class="figure"><a name="XPCap02"></a><p class="title"><b>Figure 16.7. Typical Windows XP User Session Setup AndX Request</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/WindowsXP-UserConnection.png" width="270" alt="Typical Windows XP User Session Setup AndX Request"></div></div></div><br class="figure-break"><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id410692"></a>Discussion</h4></div></div></div><p><a class="indexterm" name="id410699"></a>
 		This exercise demonstrates that, while the specific protocol for the Session Setup AndX is handled
 		in a more sophisticated manner by recent MS Windows clients, the underlying rules or principles
 		remain the same. Thus it is demonstrated  that MS Windows XP Professional clients still use a
 		<code class="constant">NULL-Session</code> connection to query and locate resources on an advanced network
 		technology server (one using Windows NT4/200x or Samba). It also demonstrates that an authenticated
 		connection must be made before resources can be used.
-		</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2650209"></a>Conclusions to Exercises</h3></div></div></div><p>
+		</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id410719"></a>Conclusions to Exercises</h3></div></div></div><p>
 	In summary, the following points have been established in this chapter:
 	</p><div class="itemizedlist"><ul type="disc"><li><p>
 		When NetBIOS over TCP/IP protocols are enabled, MS Windows networking employs broadcast-oriented messaging protocols to provide knowledge of network services.
@@ -379,7 +379,7 @@
 		file or in an LDAP database. Samba-3 permits use of multiple <em class="parameter"><code>passdb backend</code></em>
 		databases in concurrent deployment. Refer to <span class="emphasis"><em>TOSHARG2</em></span>, Chapter 10, &#8220;<span class="quote">Account Information Databases.</span>&#8221;
 		</p></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="chap01conc"></a>Dissection and Discussion</h2></div></div></div><p>
-	<a class="indexterm" name="id2650297"></a>
+	<a class="indexterm" name="id410797"></a>
 	The exercises demonstrate the use of the <code class="constant">guest</code> account, the way that
 	MS Windows clients and servers resolve computer names to a TCP/IP address, and how connections
 	between a client and a server are established.
@@ -387,8 +387,8 @@
 	Those wishing background information regarding NetBIOS name types should refer to
 	the Microsoft knowledgebase article
 	<a class="ulink" href="http://support.microsoft.com/support/kb/articles/Q102/78/8.asp" target="_top">Q102878.</a>
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2650324"></a>Technical Issues</h3></div></div></div><p>
-		<a class="indexterm" name="id2650331"></a>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id410820"></a>Technical Issues</h3></div></div></div><p>
+		<a class="indexterm" name="id410828"></a>
 		Network browsing involves SMB broadcast announcements, SMB enumeration requests,
 		connections to the <code class="constant">IPC$</code> share, share enumerations, and SMB connection
 		setup processes. The use of anonymous connections to a Samba server involve the use of
@@ -396,44 +396,44 @@
 		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="chap01qa"></a>Questions and Answers</h2></div></div></div><p>
 	The questions and answers given in this section are designed to highlight important aspects of Microsoft
 	Windows networking.
-	</p><div class="qandaset"><dl><dt> <a href="primer.html#id2650378">
+	</p><div class="qandaset"><dl><dt> <a href="primer.html#id410870">
 		What is the significance of the MIDEARTH&lt;1b&gt; type query?
-		</a></dt><dt> <a href="primer.html#id2650424">
+		</a></dt><dt> <a href="primer.html#id410912">
 		What is the significance of the MIDEARTH&lt;1d&gt; type name registration?
-		</a></dt><dt> <a href="primer.html#id2650498">
+		</a></dt><dt> <a href="primer.html#id410979">
 		What is the role and significance of the &lt;01&gt;&lt;02&gt;__MSBROWSE__&lt;02&gt;&lt;01&gt;
 		name registration?
-                </a></dt><dt> <a href="primer.html#id2650530">
+                </a></dt><dt> <a href="primer.html#id411007">
 		What is the significance of the MIDEARTH&lt;1e&gt; type name registration?
-		</a></dt><dt> <a href="primer.html#id2650561">
+		</a></dt><dt> <a href="primer.html#id411034">
 		
 		What is the significance of the guest account in smb.conf?
-		</a></dt><dt> <a href="primer.html#id2650639">
+		</a></dt><dt> <a href="primer.html#id411104">
 		Is it possible to reduce network broadcast activity with Samba-3?
-		</a></dt><dt> <a href="primer.html#id2650748">
+		</a></dt><dt> <a href="primer.html#id411206">
 		Can I just use plain-text passwords with Samba?
-		</a></dt><dt> <a href="primer.html#id2650835">
+		</a></dt><dt> <a href="primer.html#id411281">
 		What parameter in the smb.conf file is used to enable the use of encrypted passwords?
-		</a></dt><dt> <a href="primer.html#id2650876">
+		</a></dt><dt> <a href="primer.html#id411320">
 		Is it necessary to specify encrypt passwords = Yes
 		when Samba-3 is configured as a domain member?
-		</a></dt><dt> <a href="primer.html#id2650908">
+		</a></dt><dt> <a href="primer.html#id411350">
 		Is it necessary to specify a guest account when Samba-3 is configured
 		as a domain member server?
-		</a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%"><tbody><tr class="question"><td align="left" valign="top"><a name="id2650378"></a><a name="id2650380"></a></td><td align="left" valign="top"><p>
+		</a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%"><tbody><tr class="question"><td align="left" valign="top"><a name="id410870"></a><a name="id410872"></a></td><td align="left" valign="top"><p>
 		What is the significance of the MIDEARTH&lt;1b&gt; type query?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
-		<a class="indexterm" name="id2650392"></a>
-		<a class="indexterm" name="id2650401"></a>
+		<a class="indexterm" name="id410884"></a>
+		<a class="indexterm" name="id410893"></a>
 		This is a broadcast announcement by which the Windows machine is attempting to
 		locate a Domain Master Browser (DMB) in the event that it might exist on the network.
 		Refer to <span class="emphasis"><em>TOSHARG2,</em></span> Chapter 9, Section 9.7, &#8220;<span class="quote">Technical Overview of Browsing,</span>&#8221;
 		for details regarding the function of the DMB and its role in network browsing.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2650424"></a><a name="id2650426"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id410912"></a><a name="id410914"></a></td><td align="left" valign="top"><p>
 		What is the significance of the MIDEARTH&lt;1d&gt; type name registration?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
-		<a class="indexterm" name="id2650438"></a>
-		<a class="indexterm" name="id2650447"></a>
+		<a class="indexterm" name="id410926"></a>
+		<a class="indexterm" name="id410935"></a>
 		This name registration records the machine IP addresses of the LMBs.
 		Network clients can query this name type to obtain a list of browser servers from the
 		master browser.
@@ -451,25 +451,25 @@
 			The IP address of the DMB (if one exists)
 			</p></li><li><p>
 			The IP address of the LMB on the local segment
-			</p></li></ul></div></td></tr><tr class="question"><td align="left" valign="top"><a name="id2650498"></a><a name="id2650500"></a></td><td align="left" valign="top"><p>
+			</p></li></ul></div></td></tr><tr class="question"><td align="left" valign="top"><a name="id410979"></a><a name="id410981"></a></td><td align="left" valign="top"><p>
 		What is the role and significance of the &lt;01&gt;&lt;02&gt;__MSBROWSE__&lt;02&gt;&lt;01&gt;
 		name registration?
                 </p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
-		<a class="indexterm" name="id2650515"></a>
+		<a class="indexterm" name="id410994"></a>
 		This name is registered by the browse master to broadcast and receive domain announcements.
 		Its scope is limited to the local network segment, or subnet. By querying this name type,
 		master browsers on networks that have multiple domains can find the names of master browsers
 		for each domain.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2650530"></a><a name="id2650532"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id411007"></a><a name="id411009"></a></td><td align="left" valign="top"><p>
 		What is the significance of the MIDEARTH&lt;1e&gt; type name registration?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
-		<a class="indexterm" name="id2650545"></a>
+		<a class="indexterm" name="id411020"></a>
 		This name is registered by all browse masters in a domain or workgroup. The registration
 		name type is known as the Browser Election Service. Master browsers register themselves
 		with this name type so that DMBs can locate them to perform cross-subnet
 		browse list updates. This name type is also used to initiate elections for Master Browsers.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2650561"></a><a name="id2650563"></a></td><td align="left" valign="top"><p>
-		<a class="indexterm" name="id2650567"></a>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id411034"></a><a name="id411036"></a></td><td align="left" valign="top"><p>
+		<a class="indexterm" name="id411040"></a>
 		What is the significance of the <em class="parameter"><code>guest account</code></em> in smb.conf?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		This parameter specifies the default UNIX account to which MS Windows networking
@@ -482,19 +482,19 @@
 		Samba operation. Either the operating system must have an account called <code class="constant">nobody</code>
 		or there must be an entry in the <code class="filename">smb.conf</code> file with a valid UNIX account, such as
 		<a class="link" href="smb.conf.5.html#GUESTACCOUNT">guest account = ftp</a>.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2650639"></a><a name="id2650641"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id411104"></a><a name="id411106"></a></td><td align="left" valign="top"><p>
 		Is it possible to reduce network broadcast activity with Samba-3?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
-		<a class="indexterm" name="id2650653"></a>
-		<a class="indexterm" name="id2650660"></a>
+		<a class="indexterm" name="id411118"></a>
+		<a class="indexterm" name="id411124"></a>
 		Yes, there are two ways to do this. The first involves use of WINS (See <span class="emphasis"><em>TOSHARG2</em></span>, Chapter 9,
 		Section 9.5, &#8220;<span class="quote">WINS  The Windows Inter-networking Name Server</span>&#8221;); the
 		alternate method involves disabling the use of NetBIOS over TCP/IP. This second method requires
 		a correctly configured DNS server (see <span class="emphasis"><em>TOSHARG2</em></span>, Chapter 9, Section 9.3, &#8220;<span class="quote">Discussion</span>&#8221;).
 		</p><p>
-		<a class="indexterm" name="id2650691"></a>
-		<a class="indexterm" name="id2650698"></a>
-		<a class="indexterm" name="id2650707"></a>
+		<a class="indexterm" name="id411154"></a>
+		<a class="indexterm" name="id411161"></a>
+		<a class="indexterm" name="id411170"></a>
 		The use of WINS reduces network broadcast traffic. The reduction is greatest when all network
 		clients are configured to operate in <em class="parameter"><code>Hybrid Mode</code></em>. This can be effected through
 		use of DHCP to set the NetBIOS node type to type 8 for all network clients. Additionally, it is
@@ -502,7 +502,7 @@
 		</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
 		Use of SMB without NetBIOS is possible only on Windows 200x/XP Professional clients and servers, as
 		well as with Samba-3.
-		</p></div></td></tr><tr class="question"><td align="left" valign="top"><a name="id2650748"></a><a name="id2650750"></a></td><td align="left" valign="top"><p>
+		</p></div></td></tr><tr class="question"><td align="left" valign="top"><a name="id411206"></a><a name="id411208"></a></td><td align="left" valign="top"><p>
 		Can I just use plain-text passwords with Samba?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		Yes, you can configure Samba to use plain-text passwords, though this does create a few problems.
@@ -525,17 +525,17 @@
 		a UNIX system account for that user. On systems that run <code class="literal">winbindd</code> to access the Samba
 		PDC/BDC to provide Windows user and group accounts, the <em class="parameter"><code>idmap uid, idmap gid</code></em> ranges
 		set in the <code class="filename">smb.conf</code> file provide the local UID/GIDs needed for local identity management purposes.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2650835"></a><a name="id2650837"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id411281"></a><a name="id411283"></a></td><td align="left" valign="top"><p>
 		What parameter in the <code class="filename">smb.conf</code> file is used to enable the use of encrypted passwords?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		The parameter in the <code class="filename">smb.conf</code> file that controls this behavior is known as <em class="parameter"><code>encrypt
 		passwords</code></em>. The default setting for this in Samba-3 is <code class="constant">Yes (Enabled)</code>.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2650876"></a><a name="id2650878"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id411320"></a><a name="id411323"></a></td><td align="left" valign="top"><p>
 		Is it necessary to specify <a class="link" href="smb.conf.5.html#ENCRYPTPASSWORDS">encrypt passwords = Yes</a>
 		when Samba-3 is configured as a domain member?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		No. This is the default behavior.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2650908"></a><a name="id2650910"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id411350"></a><a name="id411352"></a></td><td align="left" valign="top"><p>
 		Is it necessary to specify a <em class="parameter"><code>guest account</code></em> when Samba-3 is configured
 		as a domain member server?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
@@ -543,6 +543,6 @@
 		<code class="constant">nobody</code>. If this account does not exist on the UNIX server, then it is
 		necessary to provide a <a class="link" href="smb.conf.5.html#GUESTACCOUNT">guest account = an_account</a>,
 		where <code class="constant">an_account</code> is a valid local UNIX user account.
-		</p></td></tr></tbody></table></div></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id2649396" href="#id2649396" class="para">15</a>] </sup>TOSHARG2, Sect 4.5.1</p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="RefSection.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="apa.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 15. A Collection of Useful Tidbits </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix A. 
+		</p></td></tr></tbody></table></div></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id409967" href="#id409967" class="para">15</a>] </sup>TOSHARG2, Sect 4.5.1</p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="RefSection.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="apa.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 15. A Collection of Useful Tidbits </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix A. 
     <acronym class="acronym">GNU</acronym> General Public License version 3
   </td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/secure.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/secure.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/secure.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 3. Secure Office Networking</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="ExNetworks.html" title="Part I. Example Network Configurations"><link rel="prev" href="small.html" title="Chapter 2. Small Office Networking"><link rel="next" href="Big500users.html" title="Chapter 4. The 500-User Office"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 3. Secure Office Networking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="small.html">Prev</a> </td><th width="60%" align="center">Part I. Example Network Configurations</th><td width="20%" align="right"> <a accesskey="n" href="Big500users.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="secure"></a>Chapter 3. Secure Office Networking</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="secure.html#id2580408">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="secure.html#id2580460">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="secure.html#id2580710">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="secure.html#id2580725">Technical Issues</a></span></dt><dt><span class="sect2"><a href="secure.html#id2581178">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="secure.html#id2581218">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="secure.html#ch4bsc">Basic System Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#id2582155">Samba Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4dhcpdns">Configuration of DHCP and DNS Servers</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4ptrcfg">Printer Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#procstart">Process Startup Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4valid">Validation</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4appscfg">Application Share Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4wincfg">Windows Client Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#id2586790">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="secure.html#id2586852">Questions and Answers</a></span></dt></dl></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 3. Secure Office Networking</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="ExNetworks.html" title="Part I. Example Network Configurations"><link rel="prev" href="small.html" title="Chapter 2. Small Office Networking"><link rel="next" href="Big500users.html" title="Chapter 4. The 500-User Office"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 3. Secure Office Networking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="small.html">Prev</a> </td><th width="60%" align="center">Part I. Example Network Configurations</th><td width="20%" align="right"> <a accesskey="n" href="Big500users.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="secure"></a>Chapter 3. Secure Office Networking</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="secure.html#id347711">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="secure.html#id347745">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="secure.html#id347954">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="secure.html#id347966">Technical Issues</a></span></dt><dt><span class="sect2"><a href="secure.html#id348311">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="secure.html#id348344">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="secure.html#ch4bsc">Basic System Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#id349099">Samba Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4dhcpdns">Configuration of DHCP and DNS Servers</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4ptrcfg">Printer Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#procstart">Process Startup Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4valid">Validation</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4appscfg">Application Share Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#ch4wincfg">Windows Client Configuration</a></span></dt><dt><span class="sect2"><a href="secure.html#id353060">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="secure.html#id353113">Questions and Answers</a></span></dt></dl></div><p>
 	Congratulations, your Samba networking skills are developing nicely. You started out
 	with three simple networks in <a class="link" href="simple.html" title="Chapter 1. No-Frills Samba Servers">&#8220;No-Frills Samba Servers&#8221;</a>, and then in <a class="link" href="small.html" title="Chapter 2. Small Office Networking">&#8220;Small Office Networking&#8221;</a>
 	you designed and built a network that provides a high degree of flexibility, integrity,
@@ -11,7 +11,7 @@
 	so caution is advised for anyone who tries to use Samba-2.2.x with the guidance here given. 
 	To avoid confusion, this book is all about Samba-3. Let's get the exercises in this 
 	chapter underway.
-	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2580408"></a>Introduction</h2></div></div></div><p>
+	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id347711"></a>Introduction</h2></div></div></div><p>
 	You have made Mr. Meany a very happy man. Recently he paid you a fat bonus for work 
 	well done. It is one year since the last network upgrade. You have been quite busy. 
 	Two months ago Mr. Meany gave approval to hire Christine Roberson, who has taken over 
@@ -40,7 +40,7 @@
 	Occasionally she wants to work with you on a challenging problem. When you told her
 	about your move, she almost resigned, although she was reassured that a new manager would
 	be hired to run Information Technology, and she would be responsible only for operations.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2580460"></a>Assignment Tasks</h3></div></div></div><p>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347745"></a>Assignment Tasks</h3></div></div></div><p>
 		You promised the staff Internet services including Web browsing, electronic mail, virus
 		protection, and a company Web site.  Christine is eager to help turn the vision into 
 		reality. Let's see how close you can get to the promises made.
@@ -83,13 +83,13 @@
 		of users had to share a PC while waiting for new machines to arrive. This presented 
 		some problems with desktop computers and software installation into the new users' 
 		desktop profiles.
-		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2580710"></a>Dissection and Discussion</h2></div></div></div><p>
+		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id347954"></a>Dissection and Discussion</h2></div></div></div><p>
 	Many of the conclusions you draw here are obvious. Some requirements are not very clear
 	or may simply be your means of drawing the most out of Samba-3. Much can be done more simply
 	than you will demonstrate here, but keep in mind that the network must scale to at least 500
 	users. This means that some functionality will be overdesigned for the current 130-user
 	environment.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2580725"></a>Technical Issues</h3></div></div></div><p>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347966"></a>Technical Issues</h3></div></div></div><p>
 		In this exercise we use a 24-bit subnet mask for the two local networks. This,
 		of course, limits our network to a maximum of 253 usable IP addresses. The network
 		address range chosen is one assigned by RFC1918 for private networks.
@@ -97,14 +97,14 @@
 		addresses, it is a good idea to switch to a network address specified in RFC1918
 		in the 172.16.0.0/16 range. This is done in subsequent chapters.
 		</p><p>
-		<a class="indexterm" name="id2580744"></a>
-		<a class="indexterm" name="id2580751"></a>
+		<a class="indexterm" name="id347981"></a>
+		<a class="indexterm" name="id347987"></a>
 		The high growth rates projected are a good reason to use the <code class="constant">tdbsam</code>
 		passdb backend. The use of <code class="constant">smbpasswd</code> for the backend may result in
 		performance problems. The <code class="constant">tdbsam</code> passdb backend offers features that
 		are not available with the older, flat ASCII-based <code class="constant">smbpasswd</code> database.
 		</p><p>
-		<a class="indexterm" name="id2580780"></a>
+		<a class="indexterm" name="id348012"></a>
 		The proposed network design uses a single server to act as an Internet services host for
 		electronic mail, Web serving, remote administrative access via SSH, 
 		Samba-based file and print services. This design is often chosen by sites that feel 	
@@ -117,10 +117,10 @@
 		Samba will be configured to specifically not operate on the Ethernet interface that is
 		directly connected to the Internet.
 		</p><p>
-		<a class="indexterm" name="id2580806"></a>
-		<a class="indexterm" name="id2580813"></a>
-		<a class="indexterm" name="id2580819"></a>
-		<a class="indexterm" name="id2580829"></a>
+		<a class="indexterm" name="id348031"></a>
+		<a class="indexterm" name="id348037"></a>
+		<a class="indexterm" name="id348043"></a>
+		<a class="indexterm" name="id348052"></a>
 		You know that your ISP is providing full firewall services, but you cannot rely on that.
 		Always assume that human error will occur, so be prepared by using Linux firewall facilities
 		based on <code class="literal">iptables</code> to effect NAT. Block all
@@ -131,7 +131,7 @@
 		generic antivirus handling are beyond the scope of this book and therefore are not
 		covered except insofar as this affects Samba-3.
 		</p><p>
-		<a class="indexterm" name="id2580859"></a>
+		<a class="indexterm" name="id348075"></a>
 		Notebook computers are configured to use a network login when in the office and a
 		local account to log in while away from the office. Users store all work done in
 		transit (away from the office) by using a local share for work files. Standard procedures
@@ -141,26 +141,26 @@
 		This is a preventative measure to protect client information as well as private business
 		records.
 		</p><p>
-		<a class="indexterm" name="id2580890"></a>
+		<a class="indexterm" name="id348095"></a>
 		All applications are served from the central server from a share called <code class="constant">apps</code>.
 		Microsoft Office XP Professional and OpenOffice 1.1.0 will be installed using a network 
 		(or administrative) installation. Accounting and financial management software can also
 		be run only from the central application server. Notebook users are provided with
 		locally installed applications on a need-to-have basis only.
 		</p><p>
-		<a class="indexterm" name="id2580910"></a>
+		<a class="indexterm" name="id348112"></a>
 		The introduction of roaming profiles support means that users can move between
 		desktop computer systems without constraint while retaining full access to their data.
 		The desktop travels with them as they move.
 		</p><p>
-		<a class="indexterm" name="id2580924"></a>
+		<a class="indexterm" name="id348123"></a>
 		The DNS server implementation must now address both internal and external
 		needs. You forward DNS lookups to your ISP-provided server as well as the 
 		<code class="constant">abmas.us</code> external secondary DNS server.
 		</p><p>
-		<a class="indexterm" name="id2580941"></a>
-		<a class="indexterm" name="id2580948"></a>
-		<a class="indexterm" name="id2580957"></a>
+		<a class="indexterm" name="id348137"></a>
+		<a class="indexterm" name="id348144"></a>
+		<a class="indexterm" name="id348152"></a>
 		Compared with the DHCP server configuration in <a class="link" href="small.html" title="Chapter 2. Small Office Networking">&#8220;Small Office Networking&#8221;</a>, <a class="link" href="small.html#dhcp01" title="Example 2.2. Abmas Accounting DHCP Server Configuration File /etc/dhcpd.conf">&#8220;Abmas Accounting DHCP Server Configuration File  /etc/dhcpd.conf&#8221;</a>, the 
 		configuration used in this example has to deal with the presence of an Internet connection.
 		The scope set for it ensures that no DHCP services will be offered on the external
@@ -184,8 +184,8 @@
 		a problem because Christine is to install and configure one single workstation and
 		then clone that configuration, using Norton Ghost, to all workstations. Each machine is
 		identical, so this should pose no problem.
-		</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2581012"></a>Hardware Requirements</h4></div></div></div><p>
-		<a class="indexterm" name="id2581020"></a>
+		</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id348190"></a>Hardware Requirements</h4></div></div></div><p>
+		<a class="indexterm" name="id348198"></a>
 		This server runs a considerable number of services. From similarly configured Linux
 		installations, the approximate calculated memory requirements are as shown in
 		<a class="link" href="secure.html#ch4memoryest" title="Example 3.1. Estimation of Memory Requirements">&#8220;Estimation of Memory Requirements&#8221;</a>.
@@ -213,7 +213,7 @@
 		as the system load builds up. Given the low cost of memory, it does not make sense to
 		compromise in this area.
 		</p><p>
-		<a class="indexterm" name="id2581076"></a>
+		<a class="indexterm" name="id348237"></a>
 		Aggregate input/output loads should be considered for sizing network configuration as 
 		well as disk subsystems. For network bandwidth calculations, one would typically use an
 		estimate of 0.1 MB/sec per user. This suggests that 100-Base-T (approx. 10 MB/sec)
@@ -222,8 +222,8 @@
 		to a 1 Gb Ethernet switch that provides connectivity to an expandable array of 100-Base-T
 		switched ports.
 		</p><p>
-		<a class="indexterm" name="id2581096"></a>
-		<a class="indexterm" name="id2581103"></a>
+		<a class="indexterm" name="id348252"></a>
+		<a class="indexterm" name="id348258"></a>
 		Considering the choice of 1 Gb Ethernet interfaces for the two local network segments,
 		the aggregate network I/O capacity will be 2100 Mb/sec (about 230 MB/sec), an I/O
 		demand that would require a fast disk storage I/O capability. Peak disk throughput is 
@@ -255,10 +255,10 @@
              Add 50% buffer                              303 GBytes
                        Recommended Storage:              908 GBytes
 </pre></div></div><p><br class="example-break">
-		<a class="indexterm" name="id2581164"></a>
+		<a class="indexterm" name="id348300"></a>
 		The preferred storage capacity should be approximately 1 Terabyte. Use of RAID level 5
 		with two hot spare drives would require an 8-drive by 200 GB capacity per drive array.
-		</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2581178"></a>Political Issues</h3></div></div></div><p>
+		</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id348311"></a>Political Issues</h3></div></div></div><p>
 		Your industry is coming under increasing accountability pressures. Increased paranoia
 		is necessary so you can demonstrate that you have acted with due diligence. You must
 		not trust your Internet connection.
@@ -267,12 +267,12 @@
 		an application server, your primary reason for the decision to implement this is that it
 		gives you greater control over software licensing.
 		</p><p>
-		<a class="indexterm" name="id2581200"></a>
+		<a class="indexterm" name="id348329"></a>
 		You are well aware that the current configuration results in some performance issues
 		as the size of the desktop profile grows. Given that users use Microsoft Outlook
 		Express, you know that the storage implications of the <code class="constant">.PST</code> file
 		is something that needs to be addressed later.
-		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2581218"></a>Implementation</h2></div></div></div><p>
+		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id348344"></a>Implementation</h2></div></div></div><p>
 	<a class="link" href="secure.html#ch04net" title="Figure 3.1. Abmas Network Topology 130 Users">&#8220;Abmas Network Topology  130 Users&#8221;</a> demonstrates the overall design of the network that you will implement.
 	</p><p>
 	The information presented here assumes that you are already familiar with many basic steps.
@@ -288,9 +288,9 @@
 		</p></li><li><p>
 		The Domain name is set to <code class="constant">PROMISES</code>.
 		</p></li><li><p>
-		<a class="indexterm" name="id2581279"></a>
-		<a class="indexterm" name="id2581286"></a>
-		<a class="indexterm" name="id2581293"></a>
+		<a class="indexterm" name="id348394"></a>
+		<a class="indexterm" name="id348400"></a>
+		<a class="indexterm" name="id348406"></a>
 		Ethernet interface <code class="constant">eth0</code> is attached to the Internet connection
 		and is externally exposed. This interface is explicitly not available for Samba to use.
 		Samba listens on this interface for broadcast messages but does not broadcast any
@@ -298,34 +298,34 @@
 		This is achieved by way of the <em class="parameter"><code>interfaces</code></em> parameter and the
 		<em class="parameter"><code>bind interfaces only</code></em> entry.
 		</p></li><li><p>
-		<a class="indexterm" name="id2581330"></a>
-		<a class="indexterm" name="id2581337"></a>
-		<a class="indexterm" name="id2581344"></a>
+		<a class="indexterm" name="id348437"></a>
+		<a class="indexterm" name="id348443"></a>
+		<a class="indexterm" name="id348449"></a>
 		The <em class="parameter"><code>passdb backend</code></em> parameter specifies the creation and use
 		of the <code class="constant">tdbsam</code> password backend. This is a binary database that
 		has excellent scalability for a large number of user account entries.
 		</p></li><li><p>
-		<a class="indexterm" name="id2581368"></a>
-		<a class="indexterm" name="id2581375"></a>
-		<a class="indexterm" name="id2581382"></a>
+		<a class="indexterm" name="id348469"></a>
+		<a class="indexterm" name="id348476"></a>
+		<a class="indexterm" name="id348482"></a>
 		WINS serving is enabled by the <a class="link" href="smb.conf.5.html#WINSSUPPORT">wins support = Yes</a>,
 		and name resolution is set to use it by means of the
 		<a class="link" href="smb.conf.5.html#NAMERESOLVEORDER">name resolve order = wins bcast hosts</a> entry.
 		</p></li><li><p>
-		<a class="indexterm" name="id2581421"></a>
+		<a class="indexterm" name="id348507"></a>
 		The Samba server is configured for use by Windows clients as a time server.
 		</p></li><li><p>
-		<a class="indexterm" name="id2581433"></a>
-		<a class="indexterm" name="id2581440"></a>
-		<a class="indexterm" name="id2581446"></a>
+		<a class="indexterm" name="id348519"></a>
+		<a class="indexterm" name="id348525"></a>
+		<a class="indexterm" name="id348531"></a>
 		Samba is configured to directly interface with CUPS via the direct internal interface
 		that is provided by CUPS libraries. This is achieved with the 
 		<a class="link" href="smb.conf.5.html#PRINTING">printing = CUPS</a> as well as the
 		<a class="link" href="smb.conf.5.html#PRINTCAPNAME">printcap name = CUPS</a> entries.
 		</p></li><li><p>
-		<a class="indexterm" name="id2581486"></a>
-		<a class="indexterm" name="id2581492"></a>
-		<a class="indexterm" name="id2581499"></a>
+		<a class="indexterm" name="id348558"></a>
+		<a class="indexterm" name="id348564"></a>
+		<a class="indexterm" name="id348570"></a>
 		External interface scripts are provided to enable Samba to interface smoothly to
 		essential operating system functions for user and group management. This is important
 		to enable workstations to join the Domain and is also important so that you can use
@@ -334,19 +334,19 @@
 		downloaded from the Microsoft FTP
 		<a class="ulink" href="ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTOOLS.EXE" target="_top">site</a>.
 		</p></li><li><p>
-		<a class="indexterm" name="id2581531"></a>
+		<a class="indexterm" name="id348595"></a>
 		The <code class="filename">smb.conf</code> file specifies that the Samba server will operate in (default) <em class="parameter"><code>
-		security = user</code></em> mode<sup>[<a name="id2581551" href="#ftn.id2581551" class="footnote">5</a>]</sup>
+		security = user</code></em> mode<sup>[<a name="id348612" href="#ftn.id348612" class="footnote">5</a>]</sup>
 		(User Mode).
 		</p></li><li><p>
-		<a class="indexterm" name="id2581568"></a>
-		<a class="indexterm" name="id2581575"></a>
+		<a class="indexterm" name="id348628"></a>
+		<a class="indexterm" name="id348635"></a>
 		Domain logon services as well as a Domain logon script are specified. The logon script
 		will be used to add robustness to the overall network configuration.
 		</p></li><li><p>
-		<a class="indexterm" name="id2581589"></a>
-		<a class="indexterm" name="id2581596"></a>
-		<a class="indexterm" name="id2581603"></a>
+		<a class="indexterm" name="id348647"></a>
+		<a class="indexterm" name="id348653"></a>
+		<a class="indexterm" name="id348659"></a>
 		Roaming profiles are enabled through the specification of the parameter,
 		<a class="link" href="smb.conf.5.html#LOGONPATH">logon path = \\%L\profiles\%U</a>. The value of this parameter translates the
 		<code class="constant">%L</code> to the name by which the Samba server is called by the client (for this
@@ -356,8 +356,8 @@
 		profile share for each user. This directory must be owned by the user also. An exception to this
 		requirement is when a profile is created for group use.
 		</p></li><li><p>
-		<a class="indexterm" name="id2581648"></a>
-		<a class="indexterm" name="id2581655"></a>
+		<a class="indexterm" name="id348691"></a>
+		<a class="indexterm" name="id348698"></a>
 		Precautionary veto is effected for particular Windows file names that have been targeted by 
 		virus-related activity. Additionally, Microsoft Office files are vetoed from opportunistic locking
 		controls. This should help to prevent lock contention-related file access problems.
@@ -385,12 +385,12 @@
 		</p></li></ol></div><p>
 	The following sections cover each step in logical and defined detail.
 	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="ch4bsc"></a>Basic System Configuration</h3></div></div></div><p>
-	<a class="indexterm" name="id2581746"></a>
+	<a class="indexterm" name="id348775"></a>
 	The preparation in this section assumes that your SUSE Enterprise Linux Server 8.0 system has been
 	freshly installed. It prepares basic files so that the system is ready for comprehensive
 	operation in line with the network diagram shown in <a class="link" href="secure.html#ch04net" title="Figure 3.1. Abmas Network Topology 130 Users">&#8220;Abmas Network Topology  130 Users&#8221;</a>.
-	</p><div class="procedure"><a name="id2581764"></a><p class="title"><b>Procedure 3.1. Server Configuration Steps</b></p><ol type="1"><li><p>
-		<a class="indexterm" name="id2581775"></a>
+	</p><div class="procedure"><a name="id348789"></a><p class="title"><b>Procedure 3.1. Server Configuration Steps</b></p><ol type="1"><li><p>
+		<a class="indexterm" name="id348799"></a>
 		Using the UNIX/Linux system tools, name the server <code class="constant">server.abmas.us</code>.
 		Verify that your hostname is correctly set by running:
 </p><pre class="screen">
@@ -403,8 +403,8 @@
 server.abmas.us
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2581818"></a>
-		<a class="indexterm" name="id2581825"></a>
+		<a class="indexterm" name="id348836"></a>
+		<a class="indexterm" name="id348843"></a>
 		Edit your <code class="filename">/etc/hosts</code> file to include the primary names and addresses
 		of all network interfaces that are on the host server. This is necessary so that during
 		startup the system can resolve all its own names to the IP address prior to
@@ -425,15 +425,15 @@
 192.168.2.20    qmsf.abmas.biz qmsf
 192.168.2.30    hplj6f.abmas.biz hplj6f
 </pre><p>
-		<a class="indexterm" name="id2581881"></a>
-		<a class="indexterm" name="id2581888"></a>
-		<a class="indexterm" name="id2581895"></a>
+		<a class="indexterm" name="id348887"></a>
+		<a class="indexterm" name="id348894"></a>
+		<a class="indexterm" name="id348900"></a>
 		The printer entries are not necessary if <code class="literal">named</code> is started prior to
 		startup of <code class="literal">cupsd</code>, the CUPS daemon.
 		</p></li><li><p>
-		<a class="indexterm" name="id2581922"></a>
-		<a class="indexterm" name="id2581929"></a>
-		<a class="indexterm" name="id2581936"></a>
+		<a class="indexterm" name="id348923"></a>
+		<a class="indexterm" name="id348929"></a>
+		<a class="indexterm" name="id348935"></a>
 		The host server is acting as a router between the two internal network segments as well
 		as for all Internet access. This necessitates that IP forwarding be enabled. This can be
 		achieved by adding to the <code class="filename">/etc/rc.d/boot.local</code> an entry as follows:
@@ -442,10 +442,10 @@
 </pre><p>
 		To ensure that your kernel is capable of IP forwarding during configuration, you may 
 		wish to execute that command manually also. This setting permits the Linux system to 
-		act as a router.<sup>[<a name="id2581964" href="#ftn.id2581964" class="footnote">6</a>]</sup>
+		act as a router.<sup>[<a name="id348957" href="#ftn.id348957" class="footnote">6</a>]</sup>
 		</p></li><li><p>
-		<a class="indexterm" name="id2581977"></a>
-		<a class="indexterm" name="id2581984"></a>
+		<a class="indexterm" name="id348968"></a>
+		<a class="indexterm" name="id348975"></a>
 		Installation of a basic firewall and NAT facility is necessary.
 		The following script can be installed in the <code class="filename">/usr/local/sbin</code>
 		directory. It is executed from the <code class="filename">/etc/rc.d/boot.local</code> startup
@@ -524,15 +524,15 @@
 /usr/local/sbin/abmas-natfw.sh
 </pre><p>
 		</p></li></ol></div><p>
-	<a class="indexterm" name="id2582133"></a>
+	<a class="indexterm" name="id349080"></a>
 	The server is now ready for Samba configuration. During the validation step, you remove
 	the entry for the Samba server <code class="constant">diamond</code> from the <code class="filename">/etc/hosts</code>
 	file. This is done after you are satisfied that DNS-based name resolution is functioning correctly.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2582155"></a>Samba Configuration</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id349099"></a>Samba Configuration</h3></div></div></div><p>
 	When you have completed this section, the Samba server is ready for testing and validation;
 	however, testing and validation have to wait until DHCP, DNS, and printing (CUPS) services have 
 	been configured.
-	</p><div class="procedure"><a name="id2582168"></a><p class="title"><b>Procedure 3.2. Samba Configuration Steps</b></p><ol type="1"><li><p>
+	</p><div class="procedure"><a name="id349109"></a><p class="title"><b>Procedure 3.2. Samba Configuration Steps</b></p><ol type="1"><li><p>
 		Install the Samba-3 binary RPM from the Samba-Team FTP site. Assuming that the binary
 		RPM file is called <code class="filename">samba-3.0.20-1.i386.rpm</code>, one way to install this
 		file is as follows:
@@ -547,13 +547,13 @@
 		and <a class="link" href="secure.html#promisnetsvcb" title="Example 3.6. 130 User Network with tdbsam Services Section Part B">&#8220;130 User Network with tdbsam  Services Section Part B&#8221;</a>. Concatenate (join) all three files to make a single <code class="filename">smb.conf</code>
 		file. The final, fully qualified path for this file should be <code class="filename">/etc/samba/smb.conf</code>.
 
-</p><div class="example"><a name="promisnet"></a><p class="title"><b>Example 3.4. 130 User Network with <span class="emphasis"><em>tdbsam</em></span>  [globals] Section</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2582290"></a><em class="parameter"><code>workgroup = PROMISES</code></em></td></tr><tr><td><a class="indexterm" name="id2582301"></a><em class="parameter"><code>netbios name = DIAMOND</code></em></td></tr><tr><td><a class="indexterm" name="id2582313"></a><em class="parameter"><code>interfaces = eth1, eth2, lo</code></em></td></tr><tr><td><a class="indexterm" name="id2582325"></a><em class="parameter"><code>bind interfaces only = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2582337"></a><em class="parameter"><code>passdb backend = tdbsam</code></em></td></tr><tr><td><a class="indexterm" name="id2582349"></a><em class="parameter"><code>pam password change = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2582361"></a><em class="parameter"><code>passwd program = /usr/bin/passwd %u</code></em></td></tr><tr><td><a class="indexterm" name="id2582373"></a><em class="parameter"><code>passwd chat = *New*Password* %n\n *Re-enter*new*password*%n\n *Password*changed*</code></em></td></tr><tr><td><a class="indexterm" name="id2582385"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id2582397"></a><em class="parameter"><code>unix password sync = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2582409"></a><em class="parameter"><code>log level = 1</code></em></td></tr><tr><td><a class="indexterm" name="id2582421"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id2582432"></a><em class="parameter"><code>log file = /var/log/samba/%m</code></em></td></tr><tr><td><a class="indexterm" name="id2582444"></a><em class="parameter"><code>max log size = 50</code></em></td></tr><tr><td><a class="indexterm" name="id2582456"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id2582468"></a><em class="parameter"><code>name resolve order = wins bcast hosts</code></em></td></tr><tr><td><a class="indexterm" name="id2582480"></a><em class="parameter"><code>time server = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2582491"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id2582503"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id2582515"></a><em class="parameter"><code>add user script = /usr/sbin/useradd -m '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2582527"></a><em class="parameter"><code>delete user script = /usr/sbin/userdel -r '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2582540"></a><em class="parameter"><code>add group script = /usr/sbin/groupadd '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id2582552"></a><em class="parameter"><code>delete group script = /usr/sbin/groupdel '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id2582564"></a><em class="parameter"><code>add user to group script = /usr/sbin/usermod -G '%g' '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2582577"></a><em class="parameter"><code>add machine script = /usr/sbin/useradd -s /bin/false -d /tmp '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2582589"></a><em class="parameter"><code>shutdown script = /var/lib/samba/scripts/shutdown.sh</code></em></td></tr><tr><td><a class="indexterm" name="id2582602"></a><em class="parameter"><code>abort shutdown script = /sbin/shutdown -c</code></em></td></tr><tr><td><a class="indexterm" name="id2582614"></a><em class="parameter"><code>logon script = scripts\logon.bat</code></em></td></tr><tr><td><a class="indexterm" name="id2582626"></a><em class="parameter"><code>logon path = \\%L\profiles\%U</code></em></td></tr><tr><td><a class="indexterm" name="id2582638"></a><em class="parameter"><code>logon drive = X:</code></em></td></tr><tr><td><a class="indexterm" name="id2582649"></a><em class="parameter"><code>logon home = \\%L\%U</code></em></td></tr><tr><td><a class="indexterm" name="id2582661"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2582673"></a><em class="parameter"><code>preferred master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2582685"></a><em class="parameter"><code>wins support = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2582696"></a><em class="parameter"><code>utmp = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2582708"></a><em class="parameter"><code>map acl inherit = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2582720"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id2582731"></a><em class="parameter"><code>cups options = Raw</code></em></td></tr><tr><td><a class="indexterm" name="id2582743"></a><em class="parameter"><code>veto files = /*.eml/*.nws/*.{*}/</code></em></td></tr><tr><td><a class="indexterm" name="id2582755"></a><em class="parameter"><code>veto oplock files = /*.doc/*.xls/*.mdb/</code></em></td></tr></table></div></div><p><br class="example-break">
+</p><div class="example"><a name="promisnet"></a><p class="title"><b>Example 3.4. 130 User Network with <span class="emphasis"><em>tdbsam</em></span>  [globals] Section</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id349208"></a><em class="parameter"><code>workgroup = PROMISES</code></em></td></tr><tr><td><a class="indexterm" name="id349219"></a><em class="parameter"><code>netbios name = DIAMOND</code></em></td></tr><tr><td><a class="indexterm" name="id349229"></a><em class="parameter"><code>interfaces = eth1, eth2, lo</code></em></td></tr><tr><td><a class="indexterm" name="id349240"></a><em class="parameter"><code>bind interfaces only = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id349250"></a><em class="parameter"><code>passdb backend = tdbsam</code></em></td></tr><tr><td><a class="indexterm" name="id349260"></a><em class="parameter"><code>pam password change = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id349271"></a><em class="parameter"><code>passwd program = /usr/bin/passwd %u</code></em></td></tr><tr><td><a class="indexterm" name="id349281"></a><em class="parameter"><code>passwd chat = *New*Password* %n\n *Re-enter*new*password*%n\n *Password*changed*</code></em></td></tr><tr><td><a class="indexterm" name="id349292"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id349303"></a><em class="parameter"><code>unix password sync = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id349313"></a><em class="parameter"><code>log level = 1</code></em></td></tr><tr><td><a class="indexterm" name="id349324"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id349334"></a><em class="parameter"><code>log file = /var/log/samba/%m</code></em></td></tr><tr><td><a class="indexterm" name="id349344"></a><em class="parameter"><code>max log size = 50</code></em></td></tr><tr><td><a class="indexterm" name="id349355"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id349365"></a><em class="parameter"><code>name resolve order = wins bcast hosts</code></em></td></tr><tr><td><a class="indexterm" name="id349376"></a><em class="parameter"><code>time server = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id349386"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id349396"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id349407"></a><em class="parameter"><code>add user script = /usr/sbin/useradd -m '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id349417"></a><em class="parameter"><code>delete user script = /usr/sbin/userdel -r '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id349428"></a><em class="parameter"><code>add group script = /usr/sbin/groupadd '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id349438"></a><em class="parameter"><code>delete group script = /usr/sbin/groupdel '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id349448"></a><em class="parameter"><code>add user to group script = /usr/sbin/usermod -G '%g' '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id349459"></a><em class="parameter"><code>add machine script = /usr/sbin/useradd -s /bin/false -d /tmp '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id349470"></a><em class="parameter"><code>shutdown script = /var/lib/samba/scripts/shutdown.sh</code></em></td></tr><tr><td><a class="indexterm" name="id349481"></a><em class="parameter"><code>abort shutdown script = /sbin/shutdown -c</code></em></td></tr><tr><td><a class="indexterm" name="id349491"></a><em class="parameter"><code>logon script = scripts\logon.bat</code></em></td></tr><tr><td><a class="indexterm" name="id349502"></a><em class="parameter"><code>logon path = \\%L\profiles\%U</code></em></td></tr><tr><td><a class="indexterm" name="id349512"></a><em class="parameter"><code>logon drive = X:</code></em></td></tr><tr><td><a class="indexterm" name="id349522"></a><em class="parameter"><code>logon home = \\%L\%U</code></em></td></tr><tr><td><a class="indexterm" name="id349533"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id349543"></a><em class="parameter"><code>preferred master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id349554"></a><em class="parameter"><code>wins support = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id349564"></a><em class="parameter"><code>utmp = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id349574"></a><em class="parameter"><code>map acl inherit = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id349585"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id349595"></a><em class="parameter"><code>cups options = Raw</code></em></td></tr><tr><td><a class="indexterm" name="id349606"></a><em class="parameter"><code>veto files = /*.eml/*.nws/*.{*}/</code></em></td></tr><tr><td><a class="indexterm" name="id349616"></a><em class="parameter"><code>veto oplock files = /*.doc/*.xls/*.mdb/</code></em></td></tr></table></div></div><p><br class="example-break">
 
-</p><div class="example"><a name="promisnetsvca"></a><p class="title"><b>Example 3.5. 130 User Network with <span class="emphasis"><em>tdbsam</em></span>  Services Section Part A</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id2582799"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id2582810"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id2582822"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2582833"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2582854"></a><em class="parameter"><code>comment = SMB Print Spool</code></em></td></tr><tr><td><a class="indexterm" name="id2582865"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2582877"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2582889"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2582900"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2582912"></a><em class="parameter"><code>default devmode = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2582924"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id2582945"></a><em class="parameter"><code>comment = Network Logon Service</code></em></td></tr><tr><td><a class="indexterm" name="id2582956"></a><em class="parameter"><code>path = /var/lib/samba/netlogon</code></em></td></tr><tr><td><a class="indexterm" name="id2582968"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2582980"></a><em class="parameter"><code>locking = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[profiles]</code></em></td></tr><tr><td><a class="indexterm" name="id2583000"></a><em class="parameter"><code>comment = Profile Share</code></em></td></tr><tr><td><a class="indexterm" name="id2583012"></a><em class="parameter"><code>path = /var/lib/samba/profiles</code></em></td></tr><tr><td><a class="indexterm" name="id2583024"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2583036"></a><em class="parameter"><code>profile acls = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[accounts]</code></em></td></tr><tr><td><a class="indexterm" name="id2583056"></a><em class="parameter"><code>comment = Accounting Files</code></em></td></tr><tr><td><a class="indexterm" name="id2583068"></a><em class="parameter"><code>path = /data/accounts</code></em></td></tr><tr><td><a class="indexterm" name="id2583080"></a><em class="parameter"><code>read only = No</code></em></td></tr></table></div></div><p><br class="example-break">
+</p><div class="example"><a name="promisnetsvca"></a><p class="title"><b>Example 3.5. 130 User Network with <span class="emphasis"><em>tdbsam</em></span>  Services Section Part A</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id349654"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id349664"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id349675"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id349685"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id349704"></a><em class="parameter"><code>comment = SMB Print Spool</code></em></td></tr><tr><td><a class="indexterm" name="id349714"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id349725"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id349735"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id349745"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id349756"></a><em class="parameter"><code>default devmode = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id349766"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id349785"></a><em class="parameter"><code>comment = Network Logon Service</code></em></td></tr><tr><td><a class="indexterm" name="id349795"></a><em class="parameter"><code>path = /var/lib/samba/netlogon</code></em></td></tr><tr><td><a class="indexterm" name="id349806"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id349816"></a><em class="parameter"><code>locking = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[profiles]</code></em></td></tr><tr><td><a class="indexterm" name="id349835"></a><em class="parameter"><code>comment = Profile Share</code></em></td></tr><tr><td><a class="indexterm" name="id349845"></a><em class="parameter"><code>path = /var/lib/samba/profiles</code></em></td></tr><tr><td><a class="indexterm" name="id349856"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id349866"></a><em class="parameter"><code>profile acls = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[accounts]</code></em></td></tr><tr><td><a class="indexterm" name="id349885"></a><em class="parameter"><code>comment = Accounting Files</code></em></td></tr><tr><td><a class="indexterm" name="id349895"></a><em class="parameter"><code>path = /data/accounts</code></em></td></tr><tr><td><a class="indexterm" name="id349906"></a><em class="parameter"><code>read only = No</code></em></td></tr></table></div></div><p><br class="example-break">
 
-</p><div class="example"><a name="promisnetsvcb"></a><p class="title"><b>Example 3.6. 130 User Network with <span class="emphasis"><em>tdbsam</em></span>  Services Section Part B</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[service]</code></em></td></tr><tr><td><a class="indexterm" name="id2583123"></a><em class="parameter"><code>comment = Financial Services Files</code></em></td></tr><tr><td><a class="indexterm" name="id2583135"></a><em class="parameter"><code>path = /data/service</code></em></td></tr><tr><td><a class="indexterm" name="id2583147"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[pidata]</code></em></td></tr><tr><td><a class="indexterm" name="id2583167"></a><em class="parameter"><code>comment = Property Insurance Files</code></em></td></tr><tr><td><a class="indexterm" name="id2583179"></a><em class="parameter"><code>path = /data/pidata</code></em></td></tr><tr><td><a class="indexterm" name="id2583190"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[apps]</code></em></td></tr><tr><td><a class="indexterm" name="id2583211"></a><em class="parameter"><code>comment = Application Files</code></em></td></tr><tr><td><a class="indexterm" name="id2583222"></a><em class="parameter"><code>path = /apps</code></em></td></tr><tr><td><a class="indexterm" name="id2583234"></a><em class="parameter"><code>read only = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2583246"></a><em class="parameter"><code>admin users = bjordan</code></em></td></tr></table></div></div><p><br class="example-break">
+</p><div class="example"><a name="promisnetsvcb"></a><p class="title"><b>Example 3.6. 130 User Network with <span class="emphasis"><em>tdbsam</em></span>  Services Section Part B</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[service]</code></em></td></tr><tr><td><a class="indexterm" name="id349944"></a><em class="parameter"><code>comment = Financial Services Files</code></em></td></tr><tr><td><a class="indexterm" name="id349954"></a><em class="parameter"><code>path = /data/service</code></em></td></tr><tr><td><a class="indexterm" name="id349964"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[pidata]</code></em></td></tr><tr><td><a class="indexterm" name="id349983"></a><em class="parameter"><code>comment = Property Insurance Files</code></em></td></tr><tr><td><a class="indexterm" name="id349994"></a><em class="parameter"><code>path = /data/pidata</code></em></td></tr><tr><td><a class="indexterm" name="id350004"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[apps]</code></em></td></tr><tr><td><a class="indexterm" name="id350023"></a><em class="parameter"><code>comment = Application Files</code></em></td></tr><tr><td><a class="indexterm" name="id350033"></a><em class="parameter"><code>path = /apps</code></em></td></tr><tr><td><a class="indexterm" name="id350044"></a><em class="parameter"><code>read only = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id350054"></a><em class="parameter"><code>admin users = bjordan</code></em></td></tr></table></div></div><p><br class="example-break">
 		</p></li><li><p>
-	      <a class="indexterm" name="id2583265"></a><a class="indexterm" name="id2583271"></a>
+	      <a class="indexterm" name="id350072"></a><a class="indexterm" name="id350077"></a>
 		Add the <code class="constant">root</code> user to the password backend as follows:
 </p><pre class="screen">
 <code class="prompt">root# </code> smbpasswd -a root
@@ -566,7 +566,7 @@
 		deleted. If for any reason the account is deleted, you may not be able to recreate this account
 		without considerable trouble.
 		</p></li><li><p>
-		<a class="indexterm" name="id2583318"></a>
+		<a class="indexterm" name="id350117"></a>
                 Create the username map file to permit the <code class="constant">root</code> account to be called
                 <code class="constant">Administrator</code> from the Windows network environment. To do this, create
                 the file <code class="filename">/etc/samba/smbusers</code> with the following contents:
@@ -593,16 +593,16 @@
 ####
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2583363"></a>
-		<a class="indexterm" name="id2583369"></a>
-		<a class="indexterm" name="id2583381"></a>
-		<a class="indexterm" name="id2583392"></a>
+		<a class="indexterm" name="id350152"></a>
+		<a class="indexterm" name="id350158"></a>
+		<a class="indexterm" name="id350169"></a>
+		<a class="indexterm" name="id350179"></a>
                 Create and map Windows Domain Groups to UNIX groups. A sample script is provided in <a class="link" href="small.html" title="Chapter 2. Small Office Networking">&#8220;Small Office Networking&#8221;</a>,
                 <a class="link" href="small.html#initGrps" title="Example 2.1. Script to Map Windows NT Groups to UNIX Groups">&#8220;Script to Map Windows NT Groups to UNIX Groups&#8221;</a>. Create a file containing this script. We called ours
                 <code class="filename">/etc/samba/initGrps.sh</code>. Set this file so it can be executed,
                 and then execute the script. Sample output should be as follows:
 
-</p><div class="example"><a name="ch4initGrps"></a><p class="title"><b>Example 3.7. Script to Map Windows NT Groups to UNIX Groups</b></p><div class="example-contents"><a class="indexterm" name="id2583436"></a><pre class="screen">
+</p><div class="example"><a name="ch4initGrps"></a><p class="title"><b>Example 3.7. Script to Map Windows NT Groups to UNIX Groups</b></p><div class="example-contents"><a class="indexterm" name="id350213"></a><pre class="screen">
 #!/bin/bash
 #
 # initGrps.sh
@@ -655,13 +655,13 @@
 Users (S-1-5-32-545) -&gt; -1
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2583512"></a>
-		<a class="indexterm" name="id2583519"></a>
-		<a class="indexterm" name="id2583526"></a>
-		<a class="indexterm" name="id2583533"></a>
-		<a class="indexterm" name="id2583539"></a>
-		<a class="indexterm" name="id2583546"></a>
-		<a class="indexterm" name="id2583555"></a>
+		<a class="indexterm" name="id350270"></a>
+		<a class="indexterm" name="id350276"></a>
+		<a class="indexterm" name="id350282"></a>
+		<a class="indexterm" name="id350288"></a>
+		<a class="indexterm" name="id350295"></a>
+		<a class="indexterm" name="id350301"></a>
+		<a class="indexterm" name="id350309"></a>
 		There is one preparatory step without which you will not have a working Samba 
 		network environment. You must add an account for each network user. 
                 For each user who needs to be given a Windows Domain account, make an entry in the
@@ -686,9 +686,9 @@
 </pre><p>
 		You do of course use a valid user login ID in place of <em class="parameter"><code>username</code></em>.
 		</p></li><li><p>
-		<a class="indexterm" name="id2583670"></a>
-		<a class="indexterm" name="id2583680"></a>
-		<a class="indexterm" name="id2583689"></a>
+		<a class="indexterm" name="id350406"></a>
+		<a class="indexterm" name="id350414"></a>
+		<a class="indexterm" name="id350423"></a>
                 Using the preferred tool for your UNIX system, add each user to the UNIX groups created
                 previously as necessary. File system access control will be based on UNIX group membership.
                 </p></li><li><p>
@@ -697,7 +697,7 @@
                 file is <code class="filename">/data</code>. Format the file system as required, and mount the formatted
                 file system partition using appropriate system tools.
                 </p></li><li><p>
-		<a class="indexterm" name="id2583731"></a>
+		<a class="indexterm" name="id350457"></a>
                 Create the top-level file storage directories for data and applications as follows:
 </p><pre class="screen">
 <code class="prompt">root# </code> mkdir -p /data/{accounts,finsrvcs}
@@ -738,9 +738,9 @@
 <code class="prompt">root# </code> chmod ug+wrx,o+rx,-w /var/lib/samba/profiles/'username'
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2583943"></a>
-		<a class="indexterm" name="id2583950"></a>
-		<a class="indexterm" name="id2583957"></a>
+		<a class="indexterm" name="id350631"></a>
+		<a class="indexterm" name="id350637"></a>
+		<a class="indexterm" name="id350644"></a>
 		Create a logon script. It is important that each line is correctly terminated with
 		a carriage return and line-feed combination (i.e., DOS encoding). The following procedure
 		works if the right tools (<code class="constant">unix2dos</code> and <code class="constant">dos2unix</code>) are installed.
@@ -760,8 +760,8 @@
 	DHCP services are a basic component of the entire network client installation. DNS operation is
 	foundational to Internet access as well as to trouble-free operation of local networking. When
 	you have completed this section, the server should be ready for solid duty operation.
-	</p><div class="procedure"><a name="id2584032"></a><p class="title"><b>Procedure 3.3. DHCP and DNS Server Configuration Steps</b></p><ol type="1"><li><p>
-		<a class="indexterm" name="id2584043"></a>
+	</p><div class="procedure"><a name="id350702"></a><p class="title"><b>Procedure 3.3. DHCP and DNS Server Configuration Steps</b></p><ol type="1"><li><p>
+		<a class="indexterm" name="id350713"></a>
 		Create a file called <code class="filename">/etc/dhcpd.conf</code> with the contents as
 		shown in <a class="link" href="secure.html#prom-dhcp" title="Example 3.8. DHCP Server Configuration File /etc/dhcpd.conf">&#8220;DHCP Server Configuration File  /etc/dhcpd.conf&#8221;</a>.
 
@@ -812,7 +812,7 @@
         }
 </pre></div></div><p><br class="example-break">
 		</p></li><li><p>
-		<a class="indexterm" name="id2584118"></a>
+		<a class="indexterm" name="id350767"></a>
 		Create a file called <code class="filename">/etc/named.conf</code> that has the combined contents
 		of the <a class="link" href="secure.html#ch4namedcfg" title="Example 3.9. DNS Master Configuration File /etc/named.conf Master Section">&#8220;DNS Master Configuration File  /etc/named.conf Master Section&#8221;</a>, <a class="link" href="secure.html#ch4namedvarfwd" title="Example 3.10. DNS Master Configuration File /etc/named.conf Forward Lookup Definition Section">&#8220;DNS Master Configuration File  /etc/named.conf Forward Lookup Definition Section&#8221;</a>, and
 		<a class="link" href="secure.html#ch4namedvarrev" title="Example 3.11. DNS Master Configuration File /etc/named.conf Reverse Lookup Definition Section">&#8220;DNS Master Configuration File  /etc/named.conf Reverse Lookup Definition Section&#8221;</a> files that are concatenated (merged) in this
@@ -823,7 +823,7 @@
 
 			</p><div class="table"><a name="namedrscfiles"></a><p class="title"><b>Table 3.2. DNS (named) Resource Files</b></p><div class="table-contents"><table summary="DNS (named) Resource Files" border="1"><colgroup><col align="left"><col align="left"></colgroup><thead><tr><th align="left">Reference</th><th align="left">File Location</th></tr></thead><tbody><tr><td align="left"><a class="link" href="appendix.html#loopback" title="Example 15.3. DNS Localhost Forward Zone File: /var/lib/named/localhost.zone">&#8220;DNS Localhost Forward Zone File: /var/lib/named/localhost.zone&#8221;</a></td><td align="left">/var/lib/named/localhost.zone</td></tr><tr><td align="left"><a class="link" href="appendix.html#dnsloopy" title="Example 15.4. DNS Localhost Reverse Zone File: /var/lib/named/127.0.0.zone">&#8220;DNS Localhost Reverse Zone File: /var/lib/named/127.0.0.zone&#8221;</a></td><td align="left">/var/lib/named/127.0.0.zone</td></tr><tr><td align="left"><a class="link" href="appendix.html#roothint" title="Example 15.5. DNS Root Name Server Hint File: /var/lib/named/root.hint">&#8220;DNS Root Name Server Hint File: /var/lib/named/root.hint&#8221;</a></td><td align="left">/var/lib/named/root.hint</td></tr><tr><td align="left"><a class="link" href="secure.html#abmasbiz" title="Example 3.14. DNS Abmas.biz Forward Zone File">&#8220;DNS Abmas.biz Forward Zone File&#8221;</a></td><td align="left">/var/lib/named/master/abmas.biz.hosts</td></tr><tr><td align="left"><a class="link" href="secure.html#abmasus" title="Example 3.15. DNS Abmas.us Forward Zone File">&#8220;DNS Abmas.us Forward Zone File&#8221;</a></td><td align="left">/var/lib/named/abmas.us.hosts</td></tr><tr><td align="left"><a class="link" href="secure.html#eth1zone" title="Example 3.12. DNS 192.168.1 Reverse Zone File">&#8220;DNS 192.168.1 Reverse Zone File&#8221;</a></td><td align="left">/var/lib/named/192.168.1.0.rev</td></tr><tr><td align="left"><a class="link" href="secure.html#eth2zone" title="Example 3.13. DNS 192.168.2 Reverse Zone File">&#8220;DNS 192.168.2 Reverse Zone File&#8221;</a></td><td align="left">/var/lib/named/192.168.2.0.rev</td></tr></tbody></table></div></div><p><br class="table-break">
 
-</p><div class="example"><a name="ch4namedcfg"></a><p class="title"><b>Example 3.9. DNS Master Configuration File  <code class="filename">/etc/named.conf</code> Master Section</b></p><div class="example-contents"><a class="indexterm" name="id2584330"></a><pre class="screen">
+</p><div class="example"><a name="ch4namedcfg"></a><p class="title"><b>Example 3.9. DNS Master Configuration File  <code class="filename">/etc/named.conf</code> Master Section</b></p><div class="example-contents"><a class="indexterm" name="id350938"></a><pre class="screen">
 ###
 # Abmas Biz DNS Control File
 ###
@@ -1008,7 +1008,7 @@
 </pre></div></div><p><br class="example-break">
 
 		</p></li><li><p>
-	      <a class="indexterm" name="id2584543"></a><a class="indexterm" name="id2584549"></a>
+	      <a class="indexterm" name="id351093"></a><a class="indexterm" name="id351098"></a>
 		All DNS name resolution should be handled locally. To ensure that the server is configured
 		correctly to handle this, edit <code class="filename">/etc/resolv.conf</code> to have the following
 		content:
@@ -1017,13 +1017,13 @@
 nameserver 127.0.0.1
 nameserver 123.45.54.23
 </pre><p>
-	      <a class="indexterm" name="id2584574"></a>
+	      <a class="indexterm" name="id351119"></a>
 		This instructs the name resolver function (when configured correctly) to ask the DNS server
 		that is running locally to resolve names to addresses. In the event that the local name server
 		is not available, ask the name server provided by the ISP. The latter, of course, does not resolve
 		purely local names to IP addresses.
 		</p></li><li><p>
-		<a class="indexterm" name="id2584595"></a>
+		<a class="indexterm" name="id351137"></a>
 		The final step is to edit the <code class="filename">/etc/nsswitch.conf</code> file.
 		This file controls the operation of the various resolver libraries that are part of the Linux
 		Glibc libraries. Edit this file so that it contains the following entries:
@@ -1042,17 +1042,17 @@
 	transparent print queue that performs no filtering, and only minimal handling of each print job that is
 	submitted to it. In other words, our configuration turns CUPS into a raw-mode print queue. This means that
 	the correct printer driver must be installed on all clients.
-	</p><div class="procedure"><a name="id2584654"></a><p class="title"><b>Procedure 3.4. Printer Configuration Steps</b></p><ol type="1"><li><p>
+	</p><div class="procedure"><a name="id351180"></a><p class="title"><b>Procedure 3.4. Printer Configuration Steps</b></p><ol type="1"><li><p>
 		Configure each printer to be a DHCP client, carefully following the manufacturer's guidelines.
 		</p></li><li><p>
                 Follow the instructions in the printer manufacturer's manuals to permit printing to port 9100.
 		Use any other port the manufacturer specifies for direct-mode raw printing, and adjust the
 		port as necessary in the following example commands.
                 This allows the CUPS spooler to print using raw mode protocols.
-                <a class="indexterm" name="id2584679"></a>
-                <a class="indexterm" name="id2584686"></a>
+                <a class="indexterm" name="id351201"></a>
+                <a class="indexterm" name="id351207"></a>
                 </p></li><li><p>
-	      <a class="indexterm" name="id2584700"></a><a class="indexterm" name="id2584708"></a>
+	      <a class="indexterm" name="id351220"></a><a class="indexterm" name="id351227"></a>
                 Configure the CUPS Print Queues as follows:
 </p><pre class="screen">
 <code class="prompt">root# </code> lpadmin -p qmsa -v socket://qmsa.abmas.biz:9100 -E
@@ -1060,9 +1060,9 @@
 <code class="prompt">root# </code> lpadmin -p qmsf -v socket://qmsf.abmas.biz:9100 -E
 <code class="prompt">root# </code> lpadmin -p hplj6f -v socket://hplj6f.abmas.biz:9100 -E
 </pre><p>
-                <a class="indexterm" name="id2584751"></a>
+                <a class="indexterm" name="id351268"></a>
                 This creates the necessary print queues with no assigned print filter.
-                </p></li><li><p><a class="indexterm" name="id2584765"></a>
+                </p></li><li><p><a class="indexterm" name="id351281"></a>
 		Print queues may not be enabled at creation. Use <code class="literal">lpc stat</code> to check
 		the status of the print queues and, if necessary, make certain that the queues you have 
 		just created are enabled by executing the following:
@@ -1072,7 +1072,7 @@
 <code class="prompt">root# </code> /usr/bin/enable qmsf
 <code class="prompt">root# </code> /usr/bin/enable hplj6f
 </pre><p>
-		</p></li><li><p><a class="indexterm" name="id2584820"></a>
+		</p></li><li><p><a class="indexterm" name="id351333"></a>
 		Even though your print queues may be enabled, it is still possible that they
 		are not accepting print jobs. A print queue services incoming printing
 		requests only when configured to do so. Ensure that your print queues are
@@ -1084,15 +1084,15 @@
 <code class="prompt">root# </code> /usr/sbin/accept hplj6f
 </pre><p>
 		</p></li><li><p>
-                <a class="indexterm" name="id2584871"></a>
-                <a class="indexterm" name="id2584878"></a>
-                <a class="indexterm" name="id2584885"></a>
+                <a class="indexterm" name="id351381"></a>
+                <a class="indexterm" name="id351387"></a>
+                <a class="indexterm" name="id351394"></a>
                 Edit the file <code class="filename">/etc/cups/mime.convs</code> to uncomment the line:
 </p><pre class="screen">
 application/octet-stream     application/vnd.cups-raw      0     -
 </pre><p>
                 </p></li><li><p>
-                <a class="indexterm" name="id2584912"></a>
+                <a class="indexterm" name="id351420"></a>
                 Edit the file <code class="filename">/etc/cups/mime.types</code> to uncomment the line:
 </p><pre class="screen">
 application/octet-stream
@@ -1105,7 +1105,7 @@
 	</p><p>
 	The UNIX system print queues have been configured and are ready for validation testing.
 	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="procstart"></a>Process Startup Configuration</h3></div></div></div><p>
-	<a class="indexterm" name="id2584978"></a>
+	<a class="indexterm" name="id351482"></a>
 	There are two essential steps to process startup configuration. First, the process
 	must be configured so that it automatically restarts each time the server
 	is rebooted. This step involves use of the <code class="literal">chkconfig</code> tool that
@@ -1114,11 +1114,11 @@
 	directories. Links are created so that when the system run level is changed, the
 	necessary start or kill script is run.
 	</p><p>
-	<a class="indexterm" name="id2585013"></a>
-	<a class="indexterm" name="id2585020"></a>
-	<a class="indexterm" name="id2585027"></a>
-	<a class="indexterm" name="id2585034"></a>
-	<a class="indexterm" name="id2585040"></a>
+	<a class="indexterm" name="id351513"></a>
+	<a class="indexterm" name="id351520"></a>
+	<a class="indexterm" name="id351527"></a>
+	<a class="indexterm" name="id351534"></a>
+	<a class="indexterm" name="id351540"></a>
 	In the event that a service is not run as a daemon, but via the internetworking
 	super daemon (<code class="literal">inetd</code> or <code class="literal">xinetd</code>), then the <code class="literal">chkconfig</code>
 	tool makes the necessary entries in the <code class="filename">/etc/xinetd.d</code> directory
@@ -1129,7 +1129,7 @@
 	</p><div class="procedure"><ol type="1"><li><p>
                 Use the standard system tool to configure each service to restart
                 automatically at every system reboot. For example,
-                <a class="indexterm" name="id2585092"></a>
+                <a class="indexterm" name="id351587"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> chkconfig dhpcd on
 <code class="prompt">root# </code> chkconfig named on
@@ -1137,9 +1137,9 @@
 <code class="prompt">root# </code> chkconfig smb on
 </pre><p>
 		</p></li><li><p>
-                <a class="indexterm" name="id2585136"></a>
-                <a class="indexterm" name="id2585143"></a>
-                <a class="indexterm" name="id2585150"></a>
+                <a class="indexterm" name="id351630"></a>
+                <a class="indexterm" name="id351637"></a>
+                <a class="indexterm" name="id351644"></a>
 		Now start each service to permit the system to be validated.
 		Execute each of the following in the sequence shown:
 
@@ -1150,7 +1150,7 @@
 <code class="prompt">root# </code> /etc/rc.d/init.d/smb restart
 </pre><p>
                 </p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="ch4valid"></a>Validation</h3></div></div></div><p>
-	<a class="indexterm" name="id2585204"></a>
+	<a class="indexterm" name="id351696"></a>
 	Complex networking problems are most often caused by simple things that are poorly or incorrectly
 	configured. The validation process adopted here should be followed carefully; it is the result of the
 	experience gained from years of making and correcting the most common mistakes. Shortcuts often lead to basic errors. You should
@@ -1160,8 +1160,8 @@
 	days. A well debugged network is a foundation for happy network users and network administrators. 
 	Later in this book you learn how to make users happier. For now, it is enough to learn to 
 	validate. Let's get on with it.
-	</p><div class="procedure"><a name="id2585227"></a><p class="title"><b>Procedure 3.5. Server Validation Steps</b></p><ol type="1"><li><p>
-			<a class="indexterm" name="id2585238"></a>
+	</p><div class="procedure"><a name="id351711"></a><p class="title"><b>Procedure 3.5. Server Validation Steps</b></p><ol type="1"><li><p>
+			<a class="indexterm" name="id351722"></a>
 			One of the most important facets of Samba configuration is to ensure that
 			name resolution functions correctly. You can check name resolution
 			with a few simple tests. The most basic name resolution is provided from the
@@ -1187,7 +1187,7 @@
 			This proves that name resolution via the <code class="filename">/etc/hosts</code> file
 			is working.
 			</p></li><li><p>
-			<a class="indexterm" name="id2585307"></a>
+			<a class="indexterm" name="id351783"></a>
 			So far, your installation is going particularly well. In this step we validate
 			DNS server and name resolution operation. Using your favorite UNIX system editor,
 			change the <code class="filename">/etc/nsswitch.conf</code> file so that the
@@ -1196,7 +1196,7 @@
 hosts:        dns
 </pre><p>
 			</p></li><li><p>
-			<a class="indexterm" name="id2585340"></a>
+			<a class="indexterm" name="id351813"></a>
 			Before you test DNS operation, it is a good idea to verify that the DNS server
 			is running by executing the following:
 </p><pre class="screen">
@@ -1210,7 +1210,7 @@
  2552 pts/2    S      0:00 grep named
 </pre><p>
 			This means that we are ready to check DNS operation. Do so by executing:
-			<a class="indexterm" name="id2585370"></a>
+			<a class="indexterm" name="id351837"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> ping diamond
 PING sleeth1.abmas.biz (192.168.1.1) 56(84) bytes of data.
@@ -1226,12 +1226,12 @@
 <code class="prompt">root# </code> host -f diamond.abmas.biz
 sleeth1.abmas.biz has address 192.168.1.1
 </pre><p>
-			<a class="indexterm" name="id2585409"></a>
+			<a class="indexterm" name="id351871"></a>
 			You may now remove the entry called <code class="constant">diamond</code> from the
 			<code class="filename">/etc/hosts</code> file. It does not hurt to leave it there,
 			but its removal reduces the number of administrative steps for this name.
 			</p></li><li><p>
-			<a class="indexterm" name="id2585434"></a>
+			<a class="indexterm" name="id351896"></a>
 			WINS is a great way to resolve NetBIOS names to their IP address. You can test
 			the operation of WINS by starting <code class="literal">nmbd</code> (manually or by way
 			of the Samba startup method shown in <a class="link" href="secure.html#procstart" title="Process Startup Configuration">&#8220;Process Startup Configuration&#8221;</a>). You must edit
@@ -1250,7 +1250,7 @@
 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.094 ms
 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.479 ms
 </pre><p>
-			<a class="indexterm" name="id2585526"></a>
+			<a class="indexterm" name="id351980"></a>
 			Now that you can relax with the knowledge that all three major forms of name
 			resolution to IP address resolution are working, edit the <code class="filename">/etc/nsswitch.conf</code>
 			again. This time you add all three forms of name resolution to this file.
@@ -1271,7 +1271,7 @@
 			This shows that the server is running. The proof of whether or not it is working
 			comes when you try to add the first DHCP client to the network.
 			</p></li><li><p>
-			<a class="indexterm" name="id2585586"></a>
+			<a class="indexterm" name="id352033"></a>
 			This is a good point at which to start validating Samba operation. You are 
 			content that name resolution is working for basic TCP/IP needs. Let's move on.
 			If your <code class="filename">smb.conf</code> file has bogus options or parameters, this may cause Samba
@@ -1343,10 +1343,10 @@
 </pre><p>
 			Clear away all errors before proceeding.
 			</p></li><li><p>
-			<a class="indexterm" name="id2585687"></a>
-			<a class="indexterm" name="id2585694"></a>
-			<a class="indexterm" name="id2585700"></a>
-			<a class="indexterm" name="id2585707"></a>
+			<a class="indexterm" name="id352099"></a>
+			<a class="indexterm" name="id352106"></a>
+			<a class="indexterm" name="id352112"></a>
+			<a class="indexterm" name="id352119"></a>
 			Check that the Samba server is running:
 </p><pre class="screen">
 <code class="prompt">root# </code> ps ax | grep mbd
@@ -1359,10 +1359,10 @@
 14295 ?        S     0:00 /usr/sbin/winbindd -B
 </pre><p>
 			The <code class="literal">winbindd</code> daemon is running in split mode (normal), so there are also
-			two instances<sup>[<a name="id2585739" href="#ftn.id2585739" class="footnote">7</a>]</sup> of it.
+			two instances<sup>[<a name="id352147" href="#ftn.id352147" class="footnote">7</a>]</sup> of it.
 			</p></li><li><p>
-			<a class="indexterm" name="id2585769"></a>
-	      <a class="indexterm" name="id2585776"></a>
+			<a class="indexterm" name="id352175"></a>
+	      <a class="indexterm" name="id352182"></a>
 			Check that an anonymous connection can be made to the Samba server:
 </p><pre class="screen">
 <code class="prompt">root# </code> smbclient -L localhost -U%
@@ -1394,9 +1394,9 @@
 			The <code class="constant">-U%</code> argument means to send a <code class="constant">NULL</code> username and
 			a <code class="constant">NULL</code> password.
 			</p></li><li><p>
-			<a class="indexterm" name="id2585834"></a>
-			<a class="indexterm" name="id2585841"></a>
-			<a class="indexterm" name="id2585848"></a>
+			<a class="indexterm" name="id352230"></a>
+			<a class="indexterm" name="id352237"></a>
+			<a class="indexterm" name="id352244"></a>
 			Verify that each printer has the IP address assigned in the DHCP server configuration file.
 			The easiest way to do this is to ping the printer name. Immediately after the ping response
 			has been received, execute <code class="literal">arp -a</code> to find the MAC address of the printer
@@ -1411,12 +1411,12 @@
 <code class="prompt">root# </code> arp -a
 hplj6a (192.168.1.30) at 00:03:47:CB:81:E0 [ether] on eth0
 </pre><p>
-	      <a class="indexterm" name="id2585894"></a>
+	      <a class="indexterm" name="id352285"></a>
 			The MAC address <code class="constant">00:03:47:CB:81:E0</code> matches that specified for the
 			IP address from which the printer has responded and with the entry for it in the
 			<code class="filename">/etc/dhcpd.conf</code> file. Repeat this for each printer configured.
 			</p></li><li><p>
-			<a class="indexterm" name="id2585923"></a>
+			<a class="indexterm" name="id352311"></a>
 			Make an authenticated connection to the server using the <code class="literal">smbclient</code> tool:
 </p><pre class="screen">
 <code class="prompt">root# </code> smbclient //diamond/accounts -U gholmes
@@ -1435,7 +1435,7 @@
 smb: \&gt; q
 </pre><p>
 			</p></li><li><p>
-			<a class="indexterm" name="id2585980"></a>
+			<a class="indexterm" name="id352355"></a>
 			Your new server is connected to an Internet-accessible connection. Before you start
 			your firewall, you should run a port scanner against your system. You should repeat that
 			after the firewall has been started. This helps you understand to what extent the
@@ -1510,8 +1510,8 @@
 Nmap run completed -- 1 IP address (1 host up) scanned in 168 seconds
 </pre><p>
 			</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="ch4appscfg"></a>Application Share Configuration</h3></div></div></div><p>
-	<a class="indexterm" name="id2586083"></a>
-	<a class="indexterm" name="id2586090"></a>
+	<a class="indexterm" name="id352434"></a>
+	<a class="indexterm" name="id352441"></a>
 	The use of an application server is a key mechanism by which desktop administration overheads
 	can be reduced. Check the application manual for your software to identify how best to
 	create an administrative installation.
@@ -1532,7 +1532,7 @@
 		on a central network share. This type of installation often prevents storage
 		of work files on the local workstation.
 		</p></li></ul></div><p>
-	<a class="indexterm" name="id2586142"></a>
+	<a class="indexterm" name="id352484"></a>
 	A common application deployed in this environment is an office suite.
 	Enterprise editions of Microsoft Office XP Professional can be administratively installed
 	by launching the installation from a command shell. The command that achieves this is
@@ -1549,8 +1549,8 @@
 	A network workstation (minimum) installation requires typically 10 MB to 15 MB of
 	local disk space. In the latter case, when the applications are used, they load over the network.
 	</p><p>
-	<a class="indexterm" name="id2586179"></a>
-	<a class="indexterm" name="id2586186"></a>
+	<a class="indexterm" name="id352512"></a>
+	<a class="indexterm" name="id352518"></a>
 	Microsoft Office Service Packs can be unpacked to update an administrative share. This makes
 	it possible to update MS Office XP Professional for all users from a single installation
 	of the service pack and generally circumvents the need to run updates on each network
@@ -1559,7 +1559,7 @@
 	The default location for MS Office XP Professional data files can be set through registry
 	editing or by way of configuration options inside each Office XP Professional application.
 	</p><p>
-	<a class="indexterm" name="id2586208"></a>
+	<a class="indexterm" name="id352536"></a>
 	OpenOffice.Org OpenOffice Version 1.1.0 can be installed locally. It can also
 	be installed to run off a network share. The latter is a most desirable solution for office-bound 
 	network users and for administrative staff alike. It permits quick and easy updates
@@ -1572,7 +1572,7 @@
 	prompted on screen for the target installation location. This is the administrative
 	share point. The full administrative OpenOffice share takes approximately 150 MB of disk
 	space.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2586239"></a>Comments Regarding Software Terms of Use</h4></div></div></div><p>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id352560"></a>Comments Regarding Software Terms of Use</h4></div></div></div><p>
 			Many single-user products can be installed into an administrative share, but
 			personal versions of products such as Microsoft Office XP Professional do not permit this. 
 			Many people do not like terms of use typical with commercial products, so a few comments
@@ -1596,7 +1596,7 @@
 			also. Whatever the licensing terms may be, if you do not approve of the terms of use,
 			please do not use the software.
 			</p><p>
-			<a class="indexterm" name="id2586287"></a>
+			<a class="indexterm" name="id352595"></a>
 			Samba is provided under the terms of the GNU GPL Version 2, a copy of which is provided
 			with the source code.
 			</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="ch4wincfg"></a>Windows Client Configuration</h3></div></div></div><p>
@@ -1607,8 +1607,8 @@
 	Ghost (enterprise edition) to replicate the staged machine to its target desktops. The same can
 	be done with notebook computers as long as they are identical or sufficiently similar.
 	</p><div class="procedure"><a name="sbewinclntprep"></a><p class="title"><b>Procedure 3.6. Windows Client Configuration Procedure</b></p><ol type="1"><li><p>
-		<a class="indexterm" name="id2586338"></a>
-		<a class="indexterm" name="id2586345"></a>
+		<a class="indexterm" name="id352638"></a>
+		<a class="indexterm" name="id352645"></a>
 		Install MS Windows XP Professional. During installation, configure the client to use DHCP for 
 		TCP/IP protocol configuration. DHCP configures all Windows clients to use the WINS Server
 		address that has been defined for the local subnet.
@@ -1641,7 +1641,7 @@
 		Install printers on each machine following the steps shown in the Windows client printer
 		preparation procedure below.
 		</p></li><li><p>
-		<a class="indexterm" name="id2586482"></a>
+		<a class="indexterm" name="id352769"></a>
 		When you are satisfied that the staging systems are complete, use the appropriate procedure to
 		remove the client from the domain. Reboot the system and then log on as the local administrator
 		and clean out all temporary files stored on the system. Before shutting down, use the disk
@@ -1650,8 +1650,8 @@
 		Boot the workstation using the Norton (Symantec) Ghosting diskette (or CD-ROM) and image the
 		machine to a network share on the server.
 		</p></li><li><p>
-		<a class="indexterm" name="id2586512"></a>
-		<a class="indexterm" name="id2586521"></a>
+		<a class="indexterm" name="id352794"></a>
+		<a class="indexterm" name="id352803"></a>
 		You may now replicate the image to the target machines using the appropriate Norton Ghost 
 		procedure. Make sure to use the procedure that ensures each machine has a unique
 		Windows security identifier (SID). When the installation of the disk image has completed, boot the PC. 
@@ -1686,7 +1686,7 @@
 		</p></li><li><p>
 		Repeat the printer installation steps above for both HP LaserJet 6 printers
 		as well as for both QMS Magicolor laser printers.
-		</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2586790"></a>Key Points Learned</h3></div></div></div><p>
+		</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id353060"></a>Key Points Learned</h3></div></div></div><p>
 		How do you feel? You have built a capable network, a truly ambitious project.
 		Future network updates can be handled by
 		your staff. You must be a satisfied manager. Let's review the achievements.
@@ -1709,29 +1709,29 @@
 			You introduced an application server as well as the concept of cloning a Windows
 			client in order to effect improved standardization of desktops and to reduce
 			the costs of network management.
-			</p></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2586852"></a>Questions and Answers</h2></div></div></div><p>
-	</p><div class="qandaset"><dl><dt>1. <a href="secure.html#id2586868">
+			</p></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id353113"></a>Questions and Answers</h2></div></div></div><p>
+	</p><div class="qandaset"><dl><dt>1. <a href="secure.html#id353129">
 		What is the maximum number of account entries that the tdbsam
 		passdb backend can handle?
-		</a></dt><dt>2. <a href="secure.html#id2586937">
+		</a></dt><dt>2. <a href="secure.html#id353182">
 		Would Samba operate any better if the OS level is set to a value higher than 35?
-		</a></dt><dt>3. <a href="secure.html#id2586959">
+		</a></dt><dt>3. <a href="secure.html#id353201">
 		Why in this example have you provided UNIX group to Windows Group mappings for only Domain Groups?
-		</a></dt><dt>4. <a href="secure.html#id2586982">
+		</a></dt><dt>4. <a href="secure.html#id353221">
 		Why has a path been specified in the IPC$ share?
-		</a></dt><dt>5. <a href="secure.html#id2587010">
+		</a></dt><dt>5. <a href="secure.html#id353246">
 		Why does the smb.conf file in this exercise include an entry for smb ports?
-		</a></dt><dt>6. <a href="secure.html#id2587057">
+		</a></dt><dt>6. <a href="secure.html#id353286">
 		What is the difference between a print queue and a printer?
-		</a></dt><dt>7. <a href="secure.html#id2587093">
+		</a></dt><dt>7. <a href="secure.html#id353314">
 		Can all MS Windows application software be installed onto an application server share?
-		</a></dt><dt>8. <a href="secure.html#id2587117">
+		</a></dt><dt>8. <a href="secure.html#id353334">
 		Why use dynamic DNS (DDNS)?
-		</a></dt><dt>9. <a href="secure.html#id2587137">
+		</a></dt><dt>9. <a href="secure.html#id353352">
 		Why would you use WINS as well as DNS-based name resolution?
-		</a></dt><dt>10. <a href="secure.html#id2587222">
+		</a></dt><dt>10. <a href="secure.html#id353422">
 		What are the major benefits of using an application server?
-		</a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%"><tbody><tr class="question"><td align="left" valign="top"><a name="id2586868"></a><a name="id2586870"></a><p><b>1.</b></p></td><td align="left" valign="top"><p>
+		</a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%"><tbody><tr class="question"><td align="left" valign="top"><a name="id353129"></a><a name="id353131"></a><p><b>1.</b></p></td><td align="left" valign="top"><p>
 		What is the maximum number of account entries that the <em class="parameter"><code>tdbsam</code></em>
 		passdb backend can handle?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
@@ -1757,26 +1757,26 @@
 		at which most networks tend to want backup domain controllers (BDCs). Samba-3 does
 		not provide a mechanism for replicating tdbsam data so it can be used by a BDC. The
 		limitation of 250 users per tdbsam is predicated only on the need for replication,
-		not on the limits<sup>[<a name="id2586926" href="#ftn.id2586926" class="footnote">8</a>]</sup> of the tdbsam backend itself. 
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2586937"></a><a name="id2586939"></a><p><b>2.</b></p></td><td align="left" valign="top"><p>
+		not on the limits<sup>[<a name="id353173" href="#ftn.id353173" class="footnote">8</a>]</sup> of the tdbsam backend itself. 
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id353182"></a><a name="id353184"></a><p><b>2.</b></p></td><td align="left" valign="top"><p>
 		Would Samba operate any better if the OS level is set to a value higher than 35?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		No. MS Windows workstations and servers do not use a value higher than 33. Setting this to a value
 		of 35 already assures Samba of precedence over MS Windows products in browser elections. There is
 		no gain to be had from setting this higher.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2586959"></a><a name="id2586961"></a><p><b>3.</b></p></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id353201"></a><a name="id353203"></a><p><b>3.</b></p></td><td align="left" valign="top"><p>
 		Why in this example have you provided UNIX group to Windows Group mappings for only Domain Groups?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		At this time, Samba has the capacity to use only Domain Groups mappings. It is possible that at
 		a later date Samba may make use of Windows Local Groups, as well as of the Active Directory special
 		Groups. Proper operation requires Domain Groups to be mapped to valid UNIX groups.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2586982"></a><a name="id2586984"></a><p><b>4.</b></p></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id353221"></a><a name="id353223"></a><p><b>4.</b></p></td><td align="left" valign="top"><p>
 		Why has a path been specified in the <em class="parameter"><code>IPC$</code></em> share?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		This is done so that in the event that a software bug may permit a client connection to the IPC$ share to
 		obtain access to the file system, it does so at a location that presents least risk. Under normal operation
 		this type of paranoid step should not be necessary. The use of this parameter should not be necessary. 
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2587010"></a><a name="id2587012"></a><p><b>5.</b></p></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id353246"></a><a name="id353248"></a><p><b>5.</b></p></td><td align="left" valign="top"><p>
 		Why does the <code class="filename">smb.conf</code> file in this exercise include an entry for <a class="link" href="smb.conf.5.html#SMBPORTS">smb ports</a>?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		The default order by which Samba-3 attempts to communicate with MS Windows clients is via port 445 (the TCP port
@@ -1785,7 +1785,7 @@
 		specifying the use of only port 139, the intent is to reduce unsuccessful service connection attempts.
 		The result of this is improved network performance. Where Samba-3 is installed as an Active Directory Domain
 		member, the default behavior is highly beneficial and should not be changed.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2587057"></a><a name="id2587059"></a><p><b>6.</b></p></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id353286"></a><a name="id353288"></a><p><b>6.</b></p></td><td align="left" valign="top"><p>
 		What is the difference between a print queue and a printer?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		A printer is a physical device that is connected either directly to the network or to a computer 
@@ -1799,7 +1799,7 @@
 		print requests. When the data stream has been fully received, the input stream is closed,
 		and the job is then submitted to a sequential print queue where the job is stored until
 		the printer is ready to receive the job.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2587093"></a><a name="id2587095"></a><p><b>7.</b></p></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id353314"></a><a name="id353316"></a><p><b>7.</b></p></td><td align="left" valign="top"><p>
 		Can all MS Windows application software be installed onto an application server share?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		Much older Windows software is not compatible with installation to and execution from
@@ -1807,13 +1807,13 @@
 		be installed to an application server. Retail consumer versions of Microsoft Office XP
 		Professional do not permit installation to an application server share and can be installed
 		and used only to/from a local workstation hard disk.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2587117"></a><a name="id2587120"></a><p><b>8.</b></p></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id353334"></a><a name="id353336"></a><p><b>8.</b></p></td><td align="left" valign="top"><p>
 		Why use dynamic DNS (DDNS)?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		When DDNS records are updated directly from the DHCP server, it is possible for
 		network clients that are not NetBIOS-enabled, and thus cannot use WINS, to locate
 		Windows clients via DNS.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2587137"></a><a name="id2587139"></a><p><b>9.</b></p></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id353352"></a><a name="id353354"></a><p><b>9.</b></p></td><td align="left" valign="top"><p>
 		Why would you use WINS as well as DNS-based name resolution?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		WINS is to NetBIOS names as DNS is to fully qualified domain names (FQDN). The FQDN is
@@ -1821,7 +1821,7 @@
 		means <code class="constant">top-level domain</code>. A FQDN is a longhand but easy-to-remember
 		expression that may be up to 1024 characters in length and that represents an IP address. 
 		A NetBIOS name is always 16 characters long. The 16<sup>th</sup> character
-		is a name type indicator. A specific name type is registered<sup>[<a name="id2587174" href="#ftn.id2587174" class="footnote">9</a>]</sup> for each 
+		is a name type indicator. A specific name type is registered<sup>[<a name="id353386" href="#ftn.id353386" class="footnote">9</a>]</sup> for each 
 		type of service that is provided by the Windows server or client and that may be registered
 		where a WINS server is in use.
 		</p><p>
@@ -1836,24 +1836,24 @@
 		which it has control.
 		</p><p>
 		Windows 200x Active Directory requires the registration in the DNS zone for the domain it 
-		controls of service locator<sup>[<a name="id2587208" href="#ftn.id2587208" class="footnote">10</a>]</sup> records 
+		controls of service locator<sup>[<a name="id353412" href="#ftn.id353412" class="footnote">10</a>]</sup> records 
 		that Windows clients and servers will use to locate Kerberos and LDAP services. ADS also 
 		requires the registration of special records that are called global catalog (GC) entries 
 		and site entries by which domain controllers and other essential ADS servers may be located. 
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2587222"></a><a name="id2587224"></a><p><b>10.</b></p></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id353422"></a><a name="id353425"></a><p><b>10.</b></p></td><td align="left" valign="top"><p>
 		What are the major benefits of using an application server?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		The use of an application server can significantly reduce application update maintenance.
 		By providing a centralized application share, software updates need be applied to only
 		one location for all major applications used. This results in faster update roll-outs and
 		significantly better application usage control.
-		</p></td></tr></tbody></table></div></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id2581551" href="#id2581551" class="para">5</a>] </sup>See <span class="emphasis"><em>TOSHARG2</em></span>, Chapter 3.
+		</p></td></tr></tbody></table></div></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id348612" href="#id348612" class="para">5</a>] </sup>See <span class="emphasis"><em>TOSHARG2</em></span>, Chapter 3.
 		This is necessary so that Samba can act as a Domain Controller (PDC); see
-		<span class="emphasis"><em>TOSHARG2</em></span>, Chapter 4, for additional information.</p></div><div class="footnote"><p><sup>[<a name="ftn.id2581964" href="#id2581964" class="para">6</a>] </sup>You may want to do the echo command last and include 
-				"0" in the init scripts, since it opens up your network for a short time.</p></div><div class="footnote"><p><sup>[<a name="ftn.id2585739" href="#id2585739" class="para">7</a>] </sup>For more information regarding winbindd, see <span class="emphasis"><em>TOSHARG2</em></span>, 
+		<span class="emphasis"><em>TOSHARG2</em></span>, Chapter 4, for additional information.</p></div><div class="footnote"><p><sup>[<a name="ftn.id348957" href="#id348957" class="para">6</a>] </sup>You may want to do the echo command last and include 
+				"0" in the init scripts, since it opens up your network for a short time.</p></div><div class="footnote"><p><sup>[<a name="ftn.id352147" href="#id352147" class="para">7</a>] </sup>For more information regarding winbindd, see <span class="emphasis"><em>TOSHARG2</em></span>, 
 			Chapter 23, Section 23.3. The single instance of <code class="literal">smbd</code> is normal. One additional
 			<code class="literal">smbd</code> slave process is spawned for each SMB/CIFS client 
-			connection.</p></div><div class="footnote"><p><sup>[<a name="ftn.id2586926" href="#id2586926" class="para">8</a>] </sup>Bench tests have shown that tdbsam is a very
+			connection.</p></div><div class="footnote"><p><sup>[<a name="ftn.id353173" href="#id353173" class="para">8</a>] </sup>Bench tests have shown that tdbsam is a very
 		effective database technology.  There is surprisingly little performance loss even
-		with over 4000 users.</p></div><div class="footnote"><p><sup>[<a name="ftn.id2587174" href="#id2587174" class="para">9</a>] </sup>
-		See <span class="emphasis"><em>TOSHARG2</em></span>, Chapter 9, for more information.</p></div><div class="footnote"><p><sup>[<a name="ftn.id2587208" href="#id2587208" class="para">10</a>] </sup>See TOSHARG2, Chapter 9, Section 9.3.3.</p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="small.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ExNetworks.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="Big500users.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 2. Small Office Networking </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 4. The 500-User Office</td></tr></table></div></body></html>
+		with over 4000 users.</p></div><div class="footnote"><p><sup>[<a name="ftn.id353386" href="#id353386" class="para">9</a>] </sup>
+		See <span class="emphasis"><em>TOSHARG2</em></span>, Chapter 9, for more information.</p></div><div class="footnote"><p><sup>[<a name="ftn.id353412" href="#id353412" class="para">10</a>] </sup>See TOSHARG2, Chapter 9, Section 9.3.3.</p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="small.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ExNetworks.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="Big500users.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 2. Small Office Networking </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 4. The 500-User Office</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/simple.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/simple.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/simple.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,13 +1,13 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 1. No-Frills Samba Servers</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="ExNetworks.html" title="Part I. Example Network Configurations"><link rel="prev" href="ExNetworks.html" title="Part I. Example Network Configurations"><link rel="next" href="small.html" title="Chapter 2. Small Office Networking"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 1. No-Frills Samba Servers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ExNetworks.html">Prev</a> </td><th width="60%" align="center">Part I. Example Network Configurations</th><td width="20%" align="right"> <a accesskey="n" href="small.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="simple"></a>Chapter 1. No-Frills Samba Servers</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="simple.html#id2572015">Introduction</a></span></dt><dt><span class="sect1"><a href="simple.html#id2572056">Assignment Tasks</a></span></dt><dd><dl><dt><span class="sect2"><a href="simple.html#id2572100">Drafting Office</a></span></dt><dt><span class="sect2"><a href="simple.html#id2572871">Charity Administration Office</a></span></dt><dt><span class="sect2"><a href="simple.html#AccountingOffice">Accounting Office</a></span></dt></dl></dd><dt><span class="sect1"><a href="simple.html#id2576536">Questions and Answers</a></span></dt></dl></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 1. No-Frills Samba Servers</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="ExNetworks.html" title="Part I. Example Network Configurations"><link rel="prev" href="ExNetworks.html" title="Part I. Example Network Configurations"><link rel="next" href="small.html" title="Chapter 2. Small Office Networking"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 1. No-Frills Samba Servers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ExNetworks.html">Prev</a> </td><th width="60%" align="center">Part I. Example Network Configurations</th><td width="20%" align="right"> <a accesskey="n" href="small.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="simple"></a>Chapter 1. No-Frills Samba Servers</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="simple.html#id340660">Introduction</a></span></dt><dt><span class="sect1"><a href="simple.html#id340690">Assignment Tasks</a></span></dt><dd><dl><dt><span class="sect2"><a href="simple.html#id340728">Drafting Office</a></span></dt><dt><span class="sect2"><a href="simple.html#id341373">Charity Administration Office</a></span></dt><dt><span class="sect2"><a href="simple.html#AccountingOffice">Accounting Office</a></span></dt></dl></dd><dt><span class="sect1"><a href="simple.html#id344496">Questions and Answers</a></span></dt></dl></div><p>
 	This is the start of the real journey toward the successful deployment of Samba. For some this chapter
 	is the end of the road because their needs will have been adequately met. For others, this chapter is
 	the beginning of a journey that will take them well past the contents of this book. This book provides
 	example configurations of, for the greater part, complete networking solutions. The intent of this book
 	is to help you to get your Samba installation working with the least amount of pain and aggravation.
-	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2572015"></a>Introduction</h2></div></div></div><p>
+	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id340660"></a>Introduction</h2></div></div></div><p>
 	This chapter lays the groundwork for understanding the basics of Samba operation. 
 	Instead of a bland technical discussion, each principle is demonstrated by way of a 
-	real-world scenario for which a working solution<sup>[<a name="id2572027" href="#ftn.id2572027" class="footnote">1</a>]</sup> is fully described.
+	real-world scenario for which a working solution<sup>[<a name="id340669" href="#ftn.id340669" class="footnote">1</a>]</sup> is fully described.
 	</p><p>
 	The practical exercises take you on a journey through a drafting office, a charity administration
 	office, and an accounting office. You may choose to apply any or all of these exercises to your own environment.
@@ -17,7 +17,7 @@
 	find much improved solutions compared with those presented here. By the time you complete this book,
 	you should aim to be a Samba expert, so do attempt to find better solutions and try them as you work your
 	way through the examples.
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2572056"></a>Assignment Tasks</h2></div></div></div><p>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id340690"></a>Assignment Tasks</h2></div></div></div><p>
 	Each case presented highlights different aspects of Windows networking for which a simple 
 	Samba-based solution can be provided. Each has subtly different requirements taken from real-world cases.
 	The cases are briefly reviewed to cover important points. Instructions are based
@@ -28,7 +28,7 @@
 	</p><div class="itemizedlist"><ul type="disc"><li><p>A drafting office</p></li><li><p>A charity administration office</p></li><li><p>An accounting office</p></li></ul></div><p>
 	</p><p>
 	Let's get started.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2572100"></a>Drafting Office</h3></div></div></div><p>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id340728"></a>Drafting Office</h3></div></div></div><p>
 	Our fictitious company is called <span class="emphasis"><em>Abmas Design, Inc.</em></span> This is a three-person
 	computer-aided design (CAD) business that often has more work than can be handled. The 
 	business owner hires contract draftspeople from wherever he can. They bring their own 
@@ -38,15 +38,15 @@
 	plans that are stored on a central server one day per month. She knows how to upload 
 	plans from each machine. The files available from the server must remain read-only. 
 	Anyone should be able to access the plans at any time and without barriers or difficulty.
-	</p><p><a class="indexterm" name="id2572127"></a>
-		<a class="indexterm" name="id2572133"></a>
+	</p><p><a class="indexterm" name="id340747"></a>
+		<a class="indexterm" name="id340753"></a>
 	Mr. Bob Jordan has asked you to install the new server as economically as possible. The central
 	server has a Pentium-IV 1.6GHz CPU, 768MB RAM, a 20GB IDE boot drive, a 160GB IDE second disk
 	to store plans, and a 100-base-T Ethernet card. You have already installed Red Hat Fedora CoreX and
 	have upgraded Samba to version 3.0.20 using the RPM package that is provided from the Samba
 	<a class="ulink" href="http://www.samba.org" target="_top">FTP</a> sites. (Note: Fedora CoreX indicates your favorite
 	version.)
-	</p><p><a class="indexterm" name="id2572162"></a>
+	</p><p><a class="indexterm" name="id340774"></a>
 	The four permanent drafting machines (Microsoft Windows workstations) have attached printers 
 	and plotters that are shared on a peer-to-peer basis by any and all network users. The intent 
 	is to continue to share printers in this manner. The three permanent staff work together with 
@@ -55,15 +55,15 @@
 	area is copied to the central server and the files are removed from the main weekly storage 
 	machine. The office works best with this arrangement and does not want to change anything. 
 	Old habits are too ingrained.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2572184"></a>Dissection and Discussion</h4></div></div></div><p>
-		<a class="indexterm" name="id2572192"></a>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id340790"></a>Dissection and Discussion</h4></div></div></div><p>
+		<a class="indexterm" name="id340797"></a>
 		The requirements for this server installation demand simplicity. An anonymous read-only
 		file server adequately meets all needs. The network consultant determines how
 		to upload all files from the weekly storage area to the server. This installation should
 		focus only on critical aspects of the installation.
 		</p><p>
 		It is not necessary to have specific users on the server. The site has a method for storing
-		all design files (plans). Each plan is stored in a directory that is named YYYYWW,<sup>[<a name="id2572213" href="#ftn.id2572213" class="footnote">2</a>]</sup> where
+		all design files (plans). Each plan is stored in a directory that is named YYYYWW,<sup>[<a name="id340813" href="#ftn.id340813" class="footnote">2</a>]</sup> where
 		YYYY is the year, and WW is the week of the year. This arrangement allows work to be stored
 		by week of year to preserve the filing technique the site is familiar with.
 		There is also a customer directory that is alphabetically listed. At the top level are 26
@@ -73,18 +73,18 @@
 		plans to be located both by customer name and by the date the work was performed, without
 		demanding the disk space that would be needed if a duplicate file copy were to be stored. 
 		The share containing the plans is called <span class="emphasis"><em>Plans</em></span>.
-		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2572242"></a>Implementation</h4></div></div></div><p>
+		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id340832"></a>Implementation</h4></div></div></div><p>
 		It is assumed that the server is fully installed and ready for installation and 
 		configuration of Samba 3.0.20 and any support files needed. All TCP/IP addresses 
 		have been hard-coded. In our case the IP address of the Samba server is 
 		<code class="constant">192.168.1.1</code> and the netmask is <code class="constant">255.255.255.0</code>. 
 		The hostname of the server used is <code class="constant">server</code>.
-		</p><div class="procedure"><a name="id2572267"></a><p class="title"><b>Procedure 1.1. Samba Server Configuration</b></p><ol type="1"><li><p>
+		</p><div class="procedure"><a name="id340853"></a><p class="title"><b>Procedure 1.1. Samba Server Configuration</b></p><ol type="1"><li><p>
 			Download the Samba-3 RPM packages for Red Hat Fedora Core2 from the Samba
 			<a class="ulink" href="http://www.samba.org" target="_top">FTP servers.</a>
 			</p></li><li><p>
-			<a class="indexterm" name="id2572293"></a>
-			<a class="indexterm" name="id2572302"></a>
+			<a class="indexterm" name="id340876"></a>
+			<a class="indexterm" name="id340884"></a>
 			Install the RPM package using either the Red Hat Linux preferred GUI
 			tool or the <code class="literal">rpm</code>:
 </p><pre class="screen">
@@ -100,7 +100,7 @@
 			The 755 permissions on this directory (mount point) permit the owner to read, write,
 			and execute, and the group and everyone else to read and execute only.
 			</p><p>
-			<a class="indexterm" name="id2572366"></a>
+			<a class="indexterm" name="id340940"></a>
 			Use Red Hat Linux system tools (refer to Red Hat instructions)
 			to format the 160GB hard drive with a suitable file system. An Ext3 file system
 			is suitable. Configure this drive to automatically mount using the <code class="filename">/plans</code>
@@ -109,35 +109,35 @@
 			Install the <code class="filename">smb.conf</code> file shown in <a class="link" href="simple.html#draft-smbconf" title="Example 1.1. Drafting Office smb.conf File">&#8220;Drafting Office smb.conf File&#8221;</a> in the
 			<code class="filename">/etc/samba</code> directory.
 
-</p><div class="example"><a name="draft-smbconf"></a><p class="title"><b>Example 1.1. Drafting Office <code class="filename">smb.conf</code> File</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global Parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2572445"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id2572457"></a><em class="parameter"><code>security = SHARE</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[Plans]</code></em></td></tr><tr><td><a class="indexterm" name="id2572477"></a><em class="parameter"><code>path = /plans</code></em></td></tr><tr><td><a class="indexterm" name="id2572489"></a><em class="parameter"><code>read only = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2572501"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr></table></div></div><p><br class="example-break">
+</p><div class="example"><a name="draft-smbconf"></a><p class="title"><b>Example 1.1. Drafting Office <code class="filename">smb.conf</code> File</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global Parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id341005"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id341016"></a><em class="parameter"><code>security = SHARE</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[Plans]</code></em></td></tr><tr><td><a class="indexterm" name="id341035"></a><em class="parameter"><code>path = /plans</code></em></td></tr><tr><td><a class="indexterm" name="id341045"></a><em class="parameter"><code>read only = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id341055"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr></table></div></div><p><br class="example-break">
 			</p></li><li><p>
-			<a class="indexterm" name="id2572520"></a>
+			<a class="indexterm" name="id341073"></a>
 			Verify that the <code class="filename">/etc/hosts</code> file contains the following entry:
 </p><pre class="screen">
 192.168.1.1	server
 </pre><p>
 
 			</p></li><li><p>
-			<a class="indexterm" name="id2572546"></a>
-			<a class="indexterm" name="id2572556"></a>
-			<a class="indexterm" name="id2572562"></a>
+			<a class="indexterm" name="id341096"></a>
+			<a class="indexterm" name="id341104"></a>
+			<a class="indexterm" name="id341111"></a>
 			Use the standard system tool to start Samba and to configure it to restart
 			automatically at every system reboot. For example,
 </p><pre class="screen">
 <code class="prompt">root# </code> chkconfig smb on
 <code class="prompt">root# </code> /etc/rc.d/init.d/smb restart
 </pre><p>
-			</p></li></ol></div><div class="procedure"><a name="id2572592"></a><p class="title"><b>Procedure 1.2. Windows Client Configuration</b></p><ol type="1"><li><p>
+			</p></li></ol></div><div class="procedure"><a name="id341136"></a><p class="title"><b>Procedure 1.2. Windows Client Configuration</b></p><ol type="1"><li><p>
 			Make certain that all clients are set to the same network address range as
 			used for the Samba server. For example, one client might have an IP
 			address 192.168.1.10.
 			</p></li><li><p>
-			<a class="indexterm" name="id2572613"></a>
+			<a class="indexterm" name="id341154"></a>
 			Ensure that the netmask used on the Windows clients matches that used
 			for the Samba server. All clients must have the same netmask, such as
 			255.255.255.0.
 			</p></li><li><p>
-			<a class="indexterm" name="id2572629"></a>
+			<a class="indexterm" name="id341168"></a>
 			Set the workgroup name on all clients to <code class="constant">MIDEARTH</code>.
 			</p></li><li><p>
 			Verify on each client that the machine called <code class="constant">SERVER</code>
@@ -145,15 +145,15 @@
 			possible to connect to it and see the share <span class="guimenuitem">Plans</span>,
 			and that it is possible to open that share to reveal its contents.
 			</p></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="validate1"></a>Validation</h4></div></div></div><p>
-		<a class="indexterm" name="id2572681"></a>
+		<a class="indexterm" name="id341212"></a>
 		The first priority in validating the new Samba configuration should be to check
 		that Samba answers on the loop-back interface. Then it is time to check that Samba
 		answers its own name correctly. Last, check that a client can connect to the Samba
 		server.
 		</p><div class="procedure"><ol type="1"><li><p>
-			<a class="indexterm" name="id2572701"></a>
-			<a class="indexterm" name="id2572708"></a>
-			<a class="indexterm" name="id2572715"></a>
+			<a class="indexterm" name="id341229"></a>
+			<a class="indexterm" name="id341235"></a>
+			<a class="indexterm" name="id341242"></a>
 			To check the ability to access the <code class="literal">smbd</code> daemon
 			services, execute the following:
 </p><pre class="screen">
@@ -172,8 +172,8 @@
         ---------          --------
         MIDEARTH           SERVER 
 </pre><p>
-			<a class="indexterm" name="id2572748"></a>
-			<a class="indexterm" name="id2572755"></a>
+			<a class="indexterm" name="id341267"></a>
+			<a class="indexterm" name="id341274"></a>
 			This indicates that Samba is able to respond on the loopback interface to
 			a NULL connection. The <em class="parameter"><code>-U%</code></em> means send an empty
 			username and an empty password. This command should be repeated after
@@ -188,12 +188,12 @@
 			configured to ignore all usernames given; instead it uses the
 			<em class="parameter"><code>guest account</code></em> for all connections.
 			</p></li><li><p>
-			<a class="indexterm" name="id2572808"></a>
-			<a class="indexterm" name="id2572815"></a>
+			<a class="indexterm" name="id341318"></a>
+			<a class="indexterm" name="id341325"></a>
 			From the Windows 9x/Me client, launch Windows Explorer: 
 			<span class="guiicon">[Desktop: right-click] Network Neighborhood</span>+<span class="guimenu">Explore</span> &#8594; <span class="guimenuitem">[Left Panel]  [+] Entire Network</span> &#8594; <span class="guimenuitem">[Left Panel] [+] Server</span> &#8594; <span class="guimenuitem">[Left Panel] [+] Plans</span>. In the right panel you should see the files and directories
 			(folders) that are in the <span class="guiicon">Plans</span> share.
-			</p></li></ol></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2572871"></a>Charity Administration Office</h3></div></div></div><p>
+			</p></li></ol></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id341373"></a>Charity Administration Office</h3></div></div></div><p>
 	The fictitious charity organization is called <span class="emphasis"><em>Abmas Vision NL</em></span>. This office
 	has five networked computers. Staff are all volunteers, staff changes are frequent.
 	Ms. Amy May, the director of operations, wants a no-hassle network. Anyone should be able to
@@ -216,8 +216,8 @@
 	that if the share name is not in lowercase, the application claims it cannot find the
 	file share.
 	</p><p>
-	<a class="indexterm" name="id2572937"></a>
-	<a class="indexterm" name="id2572943"></a>
+	<a class="indexterm" name="id341418"></a>
+	<a class="indexterm" name="id341424"></a>
 	Printer handling in Samba results in a significant level of confusion. Samba presents to the
 	MS Windows client only a print queue. The Samba <code class="literal">smbd</code> process passes a
 	print job sent to it from the Windows client to the native UNIX printing system. The native
@@ -231,7 +231,7 @@
 	to prevent leakage of confidential information. Only the five PCs owned by Abmas Vision NL are
 	used on this network.
 	</p><p>
-	<a class="indexterm" name="id2572978"></a>
+	<a class="indexterm" name="id341450"></a>
 	The central server was donated by a local computer store. It is a dual processor Pentium-III
 	server, has 1GB RAM, a 3-Ware IDE RAID Controller that has four 200GB IDE hard drives, and a
 	100-base-T network card. The office has 100-base-T permanent network connections that go to
@@ -242,11 +242,11 @@
 	office and letter printing. Your recommendation to allow only the Linux server to print directly
 	to the printers was accepted. You have supplied SUSE Enterprise Linux Server 9 and
 	have upgraded Samba to version 3.0.20.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2573001"></a>Dissection and Discussion</h4></div></div></div><p>
-		<a class="indexterm" name="id2573009"></a>
-		<a class="indexterm" name="id2573015"></a>
-		<a class="indexterm" name="id2573022"></a>
-		<a class="indexterm" name="id2573029"></a>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id341464"></a>Dissection and Discussion</h4></div></div></div><p>
+		<a class="indexterm" name="id341472"></a>
+		<a class="indexterm" name="id341478"></a>
+		<a class="indexterm" name="id341484"></a>
+		<a class="indexterm" name="id341491"></a>
 		This installation demands simplicity. Frequent turnover of volunteer staff indicates that
 		a network environment that requires users to logon might be problematic. It is suggested that the
 		best solution for this office would be one where the user can log onto any PC with any username
@@ -258,26 +258,26 @@
 		access control lists (Posix type) cannot be written to any file or directory. This prevents
 		an inadvertent ACL from overriding actual file permissions.
 		</p><p>
-		<a class="indexterm" name="id2573070"></a>
-		<a class="indexterm" name="id2573077"></a>
-		<a class="indexterm" name="id2573084"></a>
+		<a class="indexterm" name="id341523"></a>
+		<a class="indexterm" name="id341529"></a>
+		<a class="indexterm" name="id341536"></a>
 		This organization is a prime candidate for Share Mode security. The <em class="parameter"><code>force user</code></em>
 		allows all files to be owned by the same user and group. In addition, it would not hurt to
 		set SUID and set SGID shared directories. This means that all new files that are created, no matter
 		who creates it, are owned by the owner or group of the directory in which they are created.
 		For further information regarding the significance of the SUID/SGID settings, see <a class="link" href="appendix.html" title="Chapter 15. A Collection of Useful Tidbits">&#8220;A Collection of Useful Tidbits&#8221;</a>, <a class="link" href="appendix.html#ch12-SUIDSGID" title="Effect of Setting File and Directory SUID/SGID Permissions Explained">&#8220;Effect of Setting File and Directory SUID/SGID Permissions Explained&#8221;</a>.
 		</p><p>
-		<a class="indexterm" name="id2573123"></a>
-		<a class="indexterm" name="id2573130"></a>
-		<a class="indexterm" name="id2573139"></a>
-		<a class="indexterm" name="id2573146"></a>
+		<a class="indexterm" name="id341564"></a>
+		<a class="indexterm" name="id341571"></a>
+		<a class="indexterm" name="id341579"></a>
+		<a class="indexterm" name="id341585"></a>
 		All client workstations print to a print queue on the server. This ensures that print jobs
 		continue to print in the event that a user shuts down the workstation immediately after
 		sending a job to the printer. Today, both Red Hat Linux and SUSE Linux use CUPS-based printing. 
 		Older Linux systems offered a choice between the LPRng printing system or CUPS. It appears, however,
 		that CUPS has become the leading UNIX printing technology.
 		</p><p>
-		<a class="indexterm" name="id2573163"></a>
+		<a class="indexterm" name="id341599"></a>
 		The print queues are set up as <code class="constant">Raw</code> devices, which means that CUPS will 
 		not do intelligent print processing, and vendor-supplied drivers must be installed locally on the 
 		Windows clients.
@@ -297,21 +297,21 @@
 		printer. In this example, therefore, the resource called <code class="constant">PRINTQ</code>
 		really is just a print queue. The name of the print queue is representative of
 		the device to which the print spooler delivers print jobs.
-		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2573211"></a>Implementation</h4></div></div></div><p>
+		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id341634"></a>Implementation</h4></div></div></div><p>
 		It is assumed that the server is fully installed and ready for configuration of
 		Samba 3.0.20 and for necessary support files. All TCP/IP addresses should be hard-coded.
 		In our case, the IP address of the Samba server is 192.168.1.1 and the netmask is
 		255.255.255.0. The hostname of the server used is <code class="constant">server</code>.
 		The office network is built as shown in <a class="link" href="simple.html#charitynet" title="Figure 1.1. Charity Administration Office Network">&#8220;Charity Administration Office Network&#8221;</a>.
-		</p><div class="figure"><a name="charitynet"></a><p class="title"><b>Figure 1.1. Charity Administration Office Network</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/Charity-Network.png" width="432" alt="Charity Administration Office Network"></div></div></div><br class="figure-break"><div class="procedure"><a name="id2573277"></a><p class="title"><b>Procedure 1.3. Samba Server Configuration</b></p><ol type="1"><li><p>
-			<a class="indexterm" name="id2573289"></a>
+		</p><div class="figure"><a name="charitynet"></a><p class="title"><b>Figure 1.1. Charity Administration Office Network</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/Charity-Network.png" width="432" alt="Charity Administration Office Network"></div></div></div><br class="figure-break"><div class="procedure"><a name="id341689"></a><p class="title"><b>Procedure 1.3. Samba Server Configuration</b></p><ol type="1"><li><p>
+			<a class="indexterm" name="id341699"></a>
 			Create a group account for office file storage:
 </p><pre class="screen">
 <code class="prompt">root# </code> groupadd office
 </pre><p>
 			</p></li><li><p>
-			<a class="indexterm" name="id2573315"></a>
-			<a class="indexterm" name="id2573322"></a>
+			<a class="indexterm" name="id341722"></a>
+			<a class="indexterm" name="id341728"></a>
 			Create a user account for office file storage:
 </p><pre class="screen">
 <code class="prompt">root# </code> useradd -m abmas 
@@ -328,7 +328,7 @@
 				(Refer to the 3-Ware RAID Controller Manual for the manufacturer's preferred procedure.)
 				The resulting drive has a capacity of approximately 500GB of usable space.
 				</p></li><li><p>
-				<a class="indexterm" name="id2573369"></a>
+				<a class="indexterm" name="id341767"></a>
 				Create a mount point for the file system that can be used to store all data files.
 				Create a directory called <code class="filename">/data</code>:
 </p><pre class="screen">
@@ -360,7 +360,7 @@
 /data/officefiles/invitations
 /data/officefiles/misc
 </pre><p>
-				<a class="indexterm" name="id2573489"></a>
+				<a class="indexterm" name="id341866"></a>
 				The <code class="literal">chown</code> operation sets the owner to the user <code class="constant">abmas</code>
 				and the group to <code class="constant">office</code> on all directories just created.  It recursively
 				sets the permissions so that the owner and group have SUID/SGID with read, write, and execute
@@ -368,7 +368,7 @@
 				directories are created with the same owner and group as the directory in which they are
 				created. Any new directories created still have the same owner, group, and permissions as the
 				directory they are in. This should eliminate all permissions-based file access problems.  For
-				more information on this subject, refer to TOSHARG2<sup>[<a name="id2573520" href="#ftn.id2573520" class="footnote">3</a>]</sup> or refer
+				more information on this subject, refer to TOSHARG2<sup>[<a name="id341889" href="#ftn.id341889" class="footnote">3</a>]</sup> or refer
 				to the UNIX man page for the <code class="literal">chmod</code> and the <code class="literal">chown</code> commands.
 				</p></li><li><p>
 				Install the <code class="filename">smb.conf</code> file shown in <a class="link" href="simple.html#charity-smbconfnew" title="Example 1.2. Charity Administration Office smb.conf New-style File">&#8220;Charity Administration Office smb.conf New-style File&#8221;</a> in the
@@ -380,7 +380,7 @@
 				can install the file shown in <a class="link" href="simple.html#charity-smbconf" title="Example 1.3. Charity Administration Office smb.conf Old-style File">&#8220;Charity Administration Office smb.conf Old-style File&#8221;</a> in the
 				<code class="filename">/etc/samba</code> directory.
 				</p></li><li><p>
-				<a class="indexterm" name="id2573599"></a>
+				<a class="indexterm" name="id341951"></a>
 				We must ensure that the <code class="literal">smbd</code> can resolve the name of the Samba
 				server to its IP address. Verify that the <code class="filename">/etc/hosts</code> file
 				contains the following entry:
@@ -392,7 +392,7 @@
 				Follow the instructions in the manufacturer's manual to permit printing to port 9100
 				so that the CUPS spooler can print using raw mode protocols.
 				</p></li><li><p>
-				<a class="indexterm" name="id2573648"></a>
+				<a class="indexterm" name="id341993"></a>
 				Configure the CUPS Print Queues:
 </p><pre class="screen">
 <code class="prompt">root# </code> lpadmin -p PRINTQ -v socket://192.168.1.20:9100 -E
@@ -400,61 +400,61 @@
 </pre><p>
 				This creates the necessary print queues with no assigned print filter.
 				</p></li><li><p>
-				<a class="indexterm" name="id2573683"></a>
-				<a class="indexterm" name="id2573690"></a>
-				<a class="indexterm" name="id2573697"></a>
+				<a class="indexterm" name="id342022"></a>
+				<a class="indexterm" name="id342028"></a>
+				<a class="indexterm" name="id342034"></a>
 				Edit the file <code class="filename">/etc/cups/mime.convs</code> to uncomment the line:
 </p><pre class="screen">
 application/octet-stream     application/vnd.cups-raw      0     -
 </pre><p>
 				</p></li><li><p>
-				<a class="indexterm" name="id2573724"></a>
+				<a class="indexterm" name="id342058"></a>
 				Edit the file <code class="filename">/etc/cups/mime.types</code> to uncomment the line:
 </p><pre class="screen">
 application/octet-stream
 </pre><p>
 				</p></li><li><p>
-				<a class="indexterm" name="id2573751"></a>
+				<a class="indexterm" name="id342081"></a>
 				Use the standard system tool to start Samba and CUPS to configure them to restart
 				automatically at every system reboot. For example,
 				</p><p>
-				<a class="indexterm" name="id2573764"></a>
-				<a class="indexterm" name="id2573771"></a>
-				<a class="indexterm" name="id2573778"></a>
+				<a class="indexterm" name="id342091"></a>
+				<a class="indexterm" name="id342098"></a>
+				<a class="indexterm" name="id342104"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> chkconfig smb on
 <code class="prompt">root# </code> chkconfig cups on
 <code class="prompt">root# </code> /etc/rc.d/init.d/smb restart
 <code class="prompt">root# </code> /etc/rc.d/init.d/cups restart
 </pre><p>
-				</p></li></ol></div><div class="example"><a name="charity-smbconfnew"></a><p class="title"><b>Example 1.2. Charity Administration Office <code class="filename">smb.conf</code> New-style File</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global Parameters - Newer Configuration</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2573851"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id2573863"></a><em class="parameter"><code>printing = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id2573874"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id2573886"></a><em class="parameter"><code>map to guest = Bad User</code></em></td></tr><tr><td><a class="indexterm" name="id2573898"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id2573910"></a><em class="parameter"><code>wins support = yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[FTMFILES]</code></em></td></tr><tr><td><a class="indexterm" name="id2573931"></a><em class="parameter"><code>comment = Funds Tracking &amp; Management Files</code></em></td></tr><tr><td><a class="indexterm" name="id2573943"></a><em class="parameter"><code>path = /data/ftmfiles</code></em></td></tr><tr><td><a class="indexterm" name="id2573955"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2573967"></a><em class="parameter"><code>force user = abmas</code></em></td></tr><tr><td><a class="indexterm" name="id2573978"></a><em class="parameter"><code>force group = office</code></em></td></tr><tr><td><a class="indexterm" name="id2573990"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2574002"></a><em class="parameter"><code>nt acl support = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[office]</code></em></td></tr><tr><td><a class="indexterm" name="id2574022"></a><em class="parameter"><code>comment = General Office Files</code></em></td></tr><tr><td><a class="indexterm" name="id2574034"></a><em class="parameter"><code>path = /data/officefiles</code></em></td></tr><tr><td><a class="indexterm" name="id2574046"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2574057"></a><em class="parameter"><code>force user = abmas</code></em></td></tr><tr><td><a class="indexterm" name="id2574069"></a><em class="parameter"><code>force group = office</code></em></td></tr><tr><td><a class="indexterm" name="id2574081"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2574092"></a><em class="parameter"><code>nt acl support = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2574113"></a><em class="parameter"><code>comment = Print Temporary Spool Configuration</code></em></td></tr><tr><td><a class="indexterm" name="id2574125"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2574137"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2574148"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2574160"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2574172"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="charity-smbconf"></a><p class="title"><b>Example 1.3. Charity Administration Office <code class="filename">smb.conf</code> Old-style File</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global Parameters - Older Style Configuration</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2574219"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id2574230"></a><em class="parameter"><code>security = SHARE</code></em></td></tr><tr><td><a class="indexterm" name="id2574242"></a><em class="parameter"><code>printing = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id2574254"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id2574265"></a><em class="parameter"><code>disable spoolss = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2574277"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id2574289"></a><em class="parameter"><code>wins support = yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[FTMFILES]</code></em></td></tr><tr><td><a class="indexterm" name="id2574310"></a><em class="parameter"><code>comment = Funds Tracking &amp; Management Files</code></em></td></tr><tr><td><a class="indexterm" name="id2574322"></a><em class="parameter"><code>path = /data/ftmfiles</code></em></td></tr><tr><td><a class="indexterm" name="id2574334"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2574346"></a><em class="parameter"><code>force user = abmas</code></em></td></tr><tr><td><a class="indexterm" name="id2574357"></a><em class="parameter"><code>force group = office</code></em></td></tr><tr><td><a class="indexterm" name="id2574369"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2574381"></a><em class="parameter"><code>nt acl support = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[office]</code></em></td></tr><tr><td><a class="indexterm" name="id2574401"></a><em class="parameter"><code>comment = General Office Files</code></em></td></tr><tr><td><a class="indexterm" name="id2574413"></a><em class="parameter"><code>path = /data/officefiles</code></em></td></tr><tr><td><a class="indexterm" name="id2574425"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2574436"></a><em class="parameter"><code>force user = abmas</code></em></td></tr><tr><td><a class="indexterm" name="id2574448"></a><em class="parameter"><code>force group = office</code></em></td></tr><tr><td><a class="indexterm" name="id2574460"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2574471"></a><em class="parameter"><code>nt acl support = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2574492"></a><em class="parameter"><code>comment = Print Temporary Spool Configuration</code></em></td></tr><tr><td><a class="indexterm" name="id2574504"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2574516"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2574528"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2574539"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2574551"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"><div class="procedure"><a name="id2574564"></a><p class="title"><b>Procedure 1.4. Windows Client Configuration</b></p><ol type="1"><li><p>
+				</p></li></ol></div><div class="example"><a name="charity-smbconfnew"></a><p class="title"><b>Example 1.2. Charity Administration Office <code class="filename">smb.conf</code> New-style File</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global Parameters - Newer Configuration</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id342168"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id342178"></a><em class="parameter"><code>printing = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id342188"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id342199"></a><em class="parameter"><code>map to guest = Bad User</code></em></td></tr><tr><td><a class="indexterm" name="id342209"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id342220"></a><em class="parameter"><code>wins support = yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[FTMFILES]</code></em></td></tr><tr><td><a class="indexterm" name="id342238"></a><em class="parameter"><code>comment = Funds Tracking &amp; Management Files</code></em></td></tr><tr><td><a class="indexterm" name="id342249"></a><em class="parameter"><code>path = /data/ftmfiles</code></em></td></tr><tr><td><a class="indexterm" name="id342259"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id342270"></a><em class="parameter"><code>force user = abmas</code></em></td></tr><tr><td><a class="indexterm" name="id342280"></a><em class="parameter"><code>force group = office</code></em></td></tr><tr><td><a class="indexterm" name="id342290"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id342301"></a><em class="parameter"><code>nt acl support = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[office]</code></em></td></tr><tr><td><a class="indexterm" name="id342320"></a><em class="parameter"><code>comment = General Office Files</code></em></td></tr><tr><td><a class="indexterm" name="id342330"></a><em class="parameter"><code>path = /data/officefiles</code></em></td></tr><tr><td><a class="indexterm" name="id342340"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id342351"></a><em class="parameter"><code>force user = abmas</code></em></td></tr><tr><td><a class="indexterm" name="id342361"></a><em class="parameter"><code>force group = office</code></em></td></tr><tr><td><a class="indexterm" name="id342372"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id342382"></a><em class="parameter"><code>nt acl support = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id342401"></a><em class="parameter"><code>comment = Print Temporary Spool Configuration</code></em></td></tr><tr><td><a class="indexterm" name="id342411"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id342422"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id342432"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id342442"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id342453"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="charity-smbconf"></a><p class="title"><b>Example 1.3. Charity Administration Office <code class="filename">smb.conf</code> Old-style File</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global Parameters - Older Style Configuration</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id342494"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id342504"></a><em class="parameter"><code>security = SHARE</code></em></td></tr><tr><td><a class="indexterm" name="id342514"></a><em class="parameter"><code>printing = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id342525"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id342535"></a><em class="parameter"><code>disable spoolss = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id342546"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id342556"></a><em class="parameter"><code>wins support = yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[FTMFILES]</code></em></td></tr><tr><td><a class="indexterm" name="id342575"></a><em class="parameter"><code>comment = Funds Tracking &amp; Management Files</code></em></td></tr><tr><td><a class="indexterm" name="id342585"></a><em class="parameter"><code>path = /data/ftmfiles</code></em></td></tr><tr><td><a class="indexterm" name="id342596"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id342606"></a><em class="parameter"><code>force user = abmas</code></em></td></tr><tr><td><a class="indexterm" name="id342616"></a><em class="parameter"><code>force group = office</code></em></td></tr><tr><td><a class="indexterm" name="id342627"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id342637"></a><em class="parameter"><code>nt acl support = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[office]</code></em></td></tr><tr><td><a class="indexterm" name="id342656"></a><em class="parameter"><code>comment = General Office Files</code></em></td></tr><tr><td><a class="indexterm" name="id342666"></a><em class="parameter"><code>path = /data/officefiles</code></em></td></tr><tr><td><a class="indexterm" name="id342677"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id342687"></a><em class="parameter"><code>force user = abmas</code></em></td></tr><tr><td><a class="indexterm" name="id342698"></a><em class="parameter"><code>force group = office</code></em></td></tr><tr><td><a class="indexterm" name="id342708"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id342718"></a><em class="parameter"><code>nt acl support = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id342737"></a><em class="parameter"><code>comment = Print Temporary Spool Configuration</code></em></td></tr><tr><td><a class="indexterm" name="id342748"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id342758"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id342768"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id342779"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id342789"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"><div class="procedure"><a name="id342801"></a><p class="title"><b>Procedure 1.4. Windows Client Configuration</b></p><ol type="1"><li><p>
 				Configure clients to the network settings shown in <a class="link" href="simple.html#charitynet" title="Figure 1.1. Charity Administration Office Network">&#8220;Charity Administration Office Network&#8221;</a>.
 				</p></li><li><p>
 				Ensure that the netmask used on the Windows clients matches that used
 				for the Samba server. All clients must have the same netmask, such as
 				<code class="constant">255.255.255.0</code>.
 				</p></li><li><p>
-				<a class="indexterm" name="id2574601"></a>
+				<a class="indexterm" name="id342833"></a>
 				On all Windows clients, set the WINS Server address to <code class="constant">192.168.1.1</code>,
 				the IP address of the server.
 				</p></li><li><p>
 				Set the workgroup name on all clients to <code class="constant">MIDEARTH</code>.
 				</p></li><li><p>
-				<a class="indexterm" name="id2574631"></a>
+				<a class="indexterm" name="id342859"></a>
 				Install the &#8220;<span class="quote">Client for Microsoft Networks.</span>&#8221; Ensure that the only option
 				enabled in its properties is the option &#8220;<span class="quote">Logon and restore network connections.</span>&#8221;
 				</p></li><li><p>
 				Click <span class="guibutton">OK</span> when you are prompted to reboot the system. Reboot the
 				system, then log on using any username and password you choose.
 				</p></li><li><p>
-				<a class="indexterm" name="id2574669"></a>
+				<a class="indexterm" name="id342892"></a>
 				Verify on each client that the machine called <code class="constant">SERVER</code>
 				is visible in <span class="guimenu">My Network Places</span>, that it is
 				possible to connect to it and see the share <span class="guimenuitem">office</span>,
 				and that it is possible to open that share to reveal its contents.
 				</p></li><li><p>
-				<a class="indexterm" name="id2574701"></a>
-				<a class="indexterm" name="id2574708"></a>
+				<a class="indexterm" name="id342919"></a>
+				<a class="indexterm" name="id342925"></a>
 				Disable password caching on all Windows 9x/Me machines using the registry change file
 				shown in <a class="link" href="simple.html#MEreg" title="Example 1.4. Windows Me Registry Edit File: Disable Password Caching">&#8220;Windows Me  Registry Edit File: Disable Password Caching&#8221;</a>. Be sure to remove all files that have the
 				<code class="filename">PWL</code> extension that are in the <code class="filename">C:\WINDOWS</code>
@@ -532,7 +532,7 @@
 						It is a good idea to test the functionality of the complete installation before
 						handing the newly configured network over to the Charity Administration Office
 						for production use.
-						</p></li></ol></div></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2575153"></a>Validation</h4></div></div></div><p>
+						</p></li></ol></div></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id343306"></a>Validation</h4></div></div></div><p>
 		Use the same validation process as was followed in <a class="link" href="simple.html#validate1" title="Validation">&#8220;Validation&#8221;</a>.
 		</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="AccountingOffice"></a>Accounting Office</h3></div></div></div><p>
 	Abmas Accounting is a 40-year-old family-run business. There are nine permanent
@@ -551,7 +551,7 @@
 	and enter an assigned password; they do not need to enter a password when accessing their files 
 	on the server.
 	</p><p>
-	<a class="indexterm" name="id2575222"></a>
+	<a class="indexterm" name="id343354"></a>
 	The new server will run Red Hat Fedora Core2. You should install Samba-3.0.20 and 
 	copy all files from the old system to the new one. The existing Windows NT4 server has a parallel
 	port HP LaserJet 4 printer that is shared by all. The printer driver is installed on each
@@ -561,8 +561,8 @@
 	You have tried to educate Mr. Meany and found that he has no desire to understand networking.
 	He believes that Windows for Workgroups 3.11 was &#8220;<span class="quote">the best server Microsoft ever sold
 	</span>&#8221; and that Windows NT and 2000 are &#8220;<span class="quote">too fang-dangled complex!</span>&#8221;
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2575254"></a>Dissection and Discussion</h4></div></div></div><p>
-			<a class="indexterm" name="id2575262"></a>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id343378"></a>Dissection and Discussion</h4></div></div></div><p>
+			<a class="indexterm" name="id343386"></a>
 			The requirements of this network installation are not unusual. The staff are not interested in the
 			details of networking. Passwords are never changed. In this example solution, we demonstrate the use
 			of User Mode security in a simple context. Directories should be set SGID to ensure that members
@@ -582,7 +582,7 @@
 		share name is given in <a class="link" href="simple.html#acctingnet" title="Table 1.1. Accounting Office Network Information">&#8220;Accounting Office Network Information&#8221;</a>. The overall network topology is shown in
 		<a class="link" href="simple.html#acctingnet2" title="Figure 1.2. Accounting Office Network Topology">&#8220;Accounting Office Network Topology&#8221;</a>. All machines have been configured as indicated prior to the
 		start of Samba configuration. The following prescriptive steps may now commence.
-		</p><div class="figure"><a name="acctingnet2"></a><p class="title"><b>Figure 1.2. Accounting Office Network Topology</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/AccountingNetwork.png" width="459" alt="Accounting Office Network Topology"></div></div></div><br class="figure-break"><div class="table"><a name="acctingnet"></a><p class="title"><b>Table 1.1. Accounting Office Network Information</b></p><div class="table-contents"><table summary="Accounting Office Network Information" border="1"><colgroup><col align="left"><col align="left"><col align="left"><col align="left"><col align="left"><col align="left"></colgroup><thead><tr><th align="left">User</th><th align="left">Login-ID</th><th align="left">Password</th><th align="left">Share Name</th><th align="left">Directory</th><th align="left">Wkst</th></tr></thead><tbody><tr><td align="left">Alan Meany</td><td align="left">alan</td><td align="left">alm1961</td><td align="left">alan</td><td align="left">/data</td><td align="left">PC1</td></tr><tr><td align="left">James Meany</td><td align="left">james</td><td align="left">jimm1962</td><td align="left">james</td><td align="left">/data/james</td><td align="left">PC2</td></tr><tr><td align="left">Jeannie Meany</td><td align="left">jeannie</td><td align="left">jema1965</td><td align="left">jeannie</td><td align="left">/data/jeannie</td><td align="left">PC3</td></tr><tr><td align="left">Suzy Millicent</td><td align="left">suzy</td><td align="left">suzy1967</td><td align="left">suzy</td><td align="left">/data/suzy</td><td align="left">PC4</td></tr><tr><td align="left">Ursula Jenning</td><td align="left">ujen</td><td align="left">ujen1974</td><td align="left">ursula</td><td align="left">/data/ursula</td><td align="left">PC5</td></tr><tr><td align="left">Peter Pan</td><td align="left">peter</td><td align="left">pete1984</td><td align="left">peter</td><td align="left">/data/peter</td><td align="left">PC6</td></tr><tr><td align="left">Dale Roland</td><td align="left">dale</td><td align="left">dale1986</td><td align="left">dale</td><td align="left">/data/dale</td><td align="left">PC7</td></tr><tr><td align="left">Bertrand E Paoletti</td><td align="left">eric</td><td align="left">eric1993</td><td align="left">eric</td><td align="left">/data/eric</td><td align="left">PC8</td></tr><tr><td align="left">Russell Lewis</td><td align="left">russ</td><td align="left">russ2001</td><td align="left">russell</td><td align="left">/data/russell</td><td align="left">PC9</td></tr></tbody></table></div></div><br class="table-break"><div class="procedure"><a name="id2575662"></a><p class="title"><b>Procedure 1.5. Migration from Windows NT4 Workstation System to Samba-3</b></p><ol type="1"><li><p><a class="indexterm" name="id2575672"></a>
+		</p><div class="figure"><a name="acctingnet2"></a><p class="title"><b>Figure 1.2. Accounting Office Network Topology</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/AccountingNetwork.png" width="459" alt="Accounting Office Network Topology"></div></div></div><br class="figure-break"><div class="table"><a name="acctingnet"></a><p class="title"><b>Table 1.1. Accounting Office Network Information</b></p><div class="table-contents"><table summary="Accounting Office Network Information" border="1"><colgroup><col align="left"><col align="left"><col align="left"><col align="left"><col align="left"><col align="left"></colgroup><thead><tr><th align="left">User</th><th align="left">Login-ID</th><th align="left">Password</th><th align="left">Share Name</th><th align="left">Directory</th><th align="left">Wkst</th></tr></thead><tbody><tr><td align="left">Alan Meany</td><td align="left">alan</td><td align="left">alm1961</td><td align="left">alan</td><td align="left">/data</td><td align="left">PC1</td></tr><tr><td align="left">James Meany</td><td align="left">james</td><td align="left">jimm1962</td><td align="left">james</td><td align="left">/data/james</td><td align="left">PC2</td></tr><tr><td align="left">Jeannie Meany</td><td align="left">jeannie</td><td align="left">jema1965</td><td align="left">jeannie</td><td align="left">/data/jeannie</td><td align="left">PC3</td></tr><tr><td align="left">Suzy Millicent</td><td align="left">suzy</td><td align="left">suzy1967</td><td align="left">suzy</td><td align="left">/data/suzy</td><td align="left">PC4</td></tr><tr><td align="left">Ursula Jenning</td><td align="left">ujen</td><td align="left">ujen1974</td><td align="left">ursula</td><td align="left">/data/ursula</td><td align="left">PC5</td></tr><tr><td align="left">Peter Pan</td><td align="left">peter</td><td align="left">pete1984</td><td align="left">peter</td><td align="left">/data/peter</td><td align="left">PC6</td></tr><tr><td align="left">Dale Roland</td><td align="left">dale</td><td align="left">dale1986</td><td align="left">dale</td><td align="left">/data/dale</td><td align="left">PC7</td></tr><tr><td align="left">Bertrand E Paoletti</td><td align="left">eric</td><td align="left">eric1993</td><td align="left">eric</td><td align="left">/data/eric</td><td align="left">PC8</td></tr><tr><td align="left">Russell Lewis</td><td align="left">russ</td><td align="left">russ2001</td><td align="left">russell</td><td align="left">/data/russell</td><td align="left">PC9</td></tr></tbody></table></div></div><br class="table-break"><div class="procedure"><a name="id343742"></a><p class="title"><b>Procedure 1.5. Migration from Windows NT4 Workstation System to Samba-3</b></p><ol type="1"><li><p><a class="indexterm" name="id343753"></a>
 			Rename the old server from <code class="constant">CASHPOOL</code> to <code class="constant">STABLE</code>
 			by logging onto the console as the <code class="constant">Administrator</code>. Restart the machine
 			following system prompts.
@@ -593,19 +593,19 @@
 			Install the latest Samba-3 binary Red Hat Linux RPM that is available from the
 			Samba FTP site.
 			</p></li><li><p>
-			<a class="indexterm" name="id2575722"></a>
-			<a class="indexterm" name="id2575729"></a>
+			<a class="indexterm" name="id343795"></a>
+			<a class="indexterm" name="id343801"></a>
 			Add a group account for the office to use. Execute the following:
 </p><pre class="screen">
 <code class="prompt">root# </code> groupadd accts
 </pre><p>
 			</p></li><li><p>
-			Install the <code class="filename">smb.conf</code> file shown<sup>[<a name="id2575762" href="#ftn.id2575762" class="footnote">4</a>]</sup> 
+			Install the <code class="filename">smb.conf</code> file shown<sup>[<a name="id343830" href="#ftn.id343830" class="footnote">4</a>]</sup> 
 			in <a class="link" href="simple.html#acctconf" title="Example 1.5. Accounting Office Network smb.conf Old Style Configuration File">&#8220;Accounting Office Network smb.conf Old Style Configuration File&#8221;</a>.
 			</p></li><li><p>
-			<a class="indexterm" name="id2575800"></a>
-			<a class="indexterm" name="id2575806"></a>
-			<a class="indexterm" name="id2575813"></a>
+			<a class="indexterm" name="id343861"></a>
+			<a class="indexterm" name="id343867"></a>
+			<a class="indexterm" name="id343873"></a>
 			For each user who uses this system (see <a class="link" href="simple.html#acctingnet" title="Table 1.1. Accounting Office Network Information">&#8220;Accounting Office Network Information&#8221;</a>),
 			execute the following:
 </p><pre class="screen">
@@ -620,7 +620,7 @@
 Added user "LoginID"
 </pre><p>
 			</p></li><li><p>
-			<a class="indexterm" name="id2575867"></a>
+			<a class="indexterm" name="id343916"></a>
 			Create the directory structure for the file shares by executing the following:
 </p><pre class="screen">
 <code class="prompt">root# </code> mkdir -p /data
@@ -635,34 +635,34 @@
 </pre><p>
 			The data storage structure is now prepared for use.
 			</p></li><li><p>
-			<a class="indexterm" name="id2575921"></a>
+			<a class="indexterm" name="id343962"></a>
 			Configure the CUPS Print Queues:
 </p><pre class="screen">
 <code class="prompt">root# </code> lpadmin -p hplj -v parallel:/dev/lp0 -E
 </pre><p>
 			This creates the necessary print queues with no assigned print filter.
 			</p></li><li><p>
-			<a class="indexterm" name="id2575949"></a>
-			<a class="indexterm" name="id2575956"></a>
+			<a class="indexterm" name="id343986"></a>
+			<a class="indexterm" name="id343992"></a>
 			Edit the file <code class="filename">/etc/cups/mime.convs</code> to uncomment the line:
 </p><pre class="screen">
 application/octet-stream     application/vnd.cups-raw      0     -
 </pre><p>
 			</p></li><li><p>
-			<a class="indexterm" name="id2575983"></a>
-			<a class="indexterm" name="id2575990"></a>
+			<a class="indexterm" name="id344015"></a>
+			<a class="indexterm" name="id344022"></a>
 			Edit the file <code class="filename">/etc/cups/mime.types</code> to uncomment the line:
 </p><pre class="screen">
 application/octet-stream
 </pre><p>
 			</p></li><li><p>
-			<a class="indexterm" name="id2576017"></a>
+			<a class="indexterm" name="id344045"></a>
 			Use the standard system tool to start Samba and CUPS to configure them to restart
 			automatically at every system reboot. For example,
 			</p><p>
-			<a class="indexterm" name="id2576029"></a>
-			<a class="indexterm" name="id2576036"></a>
-			<a class="indexterm" name="id2576043"></a>
+			<a class="indexterm" name="id344055"></a>
+			<a class="indexterm" name="id344062"></a>
+			<a class="indexterm" name="id344068"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> chkconfig smb on
 <code class="prompt">root# </code> chkconfig cups on
@@ -707,40 +707,40 @@
 			The migration of all data should now be complete. It is time to validate the installation.
 			For this, you should make sure all applications, including printing, work before asking the
 			customer to test drive the new network.
-			</p></li></ol></div><div class="example"><a name="acctconf"></a><p class="title"><b>Example 1.5. Accounting Office Network <code class="filename">smb.conf</code> Old Style Configuration File</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2576294"></a><em class="parameter"><code>workgroup = BILLMORE</code></em></td></tr><tr><td><a class="indexterm" name="id2576305"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id2576317"></a><em class="parameter"><code>disable spoolss = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2576329"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id2576341"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[files]</code></em></td></tr><tr><td><a class="indexterm" name="id2576362"></a><em class="parameter"><code>comment = Work area files</code></em></td></tr><tr><td><a class="indexterm" name="id2576373"></a><em class="parameter"><code>path = /data/%U</code></em></td></tr><tr><td><a class="indexterm" name="id2576385"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[master]</code></em></td></tr><tr><td><a class="indexterm" name="id2576406"></a><em class="parameter"><code>comment = Master work area files</code></em></td></tr><tr><td><a class="indexterm" name="id2576417"></a><em class="parameter"><code>path = /data</code></em></td></tr><tr><td><a class="indexterm" name="id2576429"></a><em class="parameter"><code>valid users = alan</code></em></td></tr><tr><td><a class="indexterm" name="id2576441"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2576461"></a><em class="parameter"><code>comment = Print Temporary Spool Configuration</code></em></td></tr><tr><td><a class="indexterm" name="id2576473"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2576485"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2576497"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2576508"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2576520"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2576536"></a>Questions and Answers</h2></div></div></div><p>
+			</p></li></ol></div><div class="example"><a name="acctconf"></a><p class="title"><b>Example 1.5. Accounting Office Network <code class="filename">smb.conf</code> Old Style Configuration File</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id344279"></a><em class="parameter"><code>workgroup = BILLMORE</code></em></td></tr><tr><td><a class="indexterm" name="id344290"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id344300"></a><em class="parameter"><code>disable spoolss = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id344310"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id344321"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[files]</code></em></td></tr><tr><td><a class="indexterm" name="id344340"></a><em class="parameter"><code>comment = Work area files</code></em></td></tr><tr><td><a class="indexterm" name="id344350"></a><em class="parameter"><code>path = /data/%U</code></em></td></tr><tr><td><a class="indexterm" name="id344360"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[master]</code></em></td></tr><tr><td><a class="indexterm" name="id344379"></a><em class="parameter"><code>comment = Master work area files</code></em></td></tr><tr><td><a class="indexterm" name="id344390"></a><em class="parameter"><code>path = /data</code></em></td></tr><tr><td><a class="indexterm" name="id344400"></a><em class="parameter"><code>valid users = alan</code></em></td></tr><tr><td><a class="indexterm" name="id344410"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id344429"></a><em class="parameter"><code>comment = Print Temporary Spool Configuration</code></em></td></tr><tr><td><a class="indexterm" name="id344440"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id344450"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id344460"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id344471"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id344481"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id344496"></a>Questions and Answers</h2></div></div></div><p>
 	The following questions and answers draw from the examples in this chapter.
 	Many design decisions are impacted by the configurations chosen. The intent
 	is to expose some of the hidden implications.
-	</p><div class="qandaset"><dl><dt> <a href="simple.html#id2576555">
+	</p><div class="qandaset"><dl><dt> <a href="simple.html#id344512">
 		What makes an anonymous Samba server more simple than a non-anonymous Samba server?
-		</a></dt><dt> <a href="simple.html#id2576581">
+		</a></dt><dt> <a href="simple.html#id344535">
 		How is the operation of the parameter force user different from
 		setting the root directory of the share SUID?
-		</a></dt><dt> <a href="simple.html#id2576635">
+		</a></dt><dt> <a href="simple.html#id344580">
 		When would you both use the per share parameter force user and set
 		the share root directory SUID?
-		</a></dt><dt> <a href="simple.html#id2576662">
+		</a></dt><dt> <a href="simple.html#id344603">
 		What is better about CUPS printing than LPRng printing?
-		</a></dt><dt> <a href="simple.html#id2576706">
+		</a></dt><dt> <a href="simple.html#id344636">
 		When should Windows client IP addresses be hard-coded?
-		</a></dt><dt> <a href="simple.html#id2576732">
+		</a></dt><dt> <a href="simple.html#id344658">
 		Under what circumstances is it best to use a DHCP server?
-		</a></dt><dt> <a href="simple.html#id2576771">
+		</a></dt><dt> <a href="simple.html#id344688">
 		What is the purpose of setting the parameter guest ok on a share?
-		</a></dt><dt> <a href="simple.html#id2576796">
+		</a></dt><dt> <a href="simple.html#id344711">
 		When would you set the global parameter disable spoolss?
-		</a></dt><dt> <a href="simple.html#id2576886">
+		</a></dt><dt> <a href="simple.html#id344780">
 		Why would you disable password caching on Windows 9x/Me clients?
-		</a></dt><dt> <a href="simple.html#id2576911">
+		</a></dt><dt> <a href="simple.html#id344801">
 		The example of Abmas Accounting uses User Mode security. How does this provide anonymous access?
-		</a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%"><tbody><tr class="question"><td align="left" valign="top"><a name="id2576555"></a><a name="id2576557"></a></td><td align="left" valign="top"><p>
+		</a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%"><tbody><tr class="question"><td align="left" valign="top"><a name="id344512"></a><a name="id344515"></a></td><td align="left" valign="top"><p>
 		What makes an anonymous Samba server more simple than a non-anonymous Samba server?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		In the anonymous server, the only account used is the <code class="constant">guest</code> account.
 		In a non-anonymous configuration, it is necessary to add real user accounts to both the
 		UNIX system and to the Samba configuration. Non-anonymous servers require additional
 		administration.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2576581"></a><a name="id2576583"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id344535"></a><a name="id344537"></a></td><td align="left" valign="top"><p>
 		How is the operation of the parameter <em class="parameter"><code>force user</code></em> different from
 		setting the root directory of the share SUID?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
@@ -754,14 +754,14 @@
 		</p><p>
 		The parameter <em class="parameter"><code>force user</code></em> has potential security implications that go
 		beyond the actual share root directory. Be careful and wary of using this parameter.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2576635"></a><a name="id2576637"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id344580"></a><a name="id344582"></a></td><td align="left" valign="top"><p>
 		When would you both use the per share parameter <em class="parameter"><code>force user</code></em> and set
 		the share root directory SUID?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		You would use both parameters when it is necessary to guarantee that all share handling operations
 		are conducted as the forced user, while all file and directory creation are done as the SUID
 		directory owner.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2576662"></a><a name="id2576664"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id344603"></a><a name="id344605"></a></td><td align="left" valign="top"><p>
 		What is better about CUPS printing than LPRng printing?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		CUPS is a print spooling system that has integrated remote management facilities, provides completely
@@ -779,7 +779,7 @@
 		</p><p>
 		Which spooling system is better is a matter of personal taste. It depends on what you want to do and how you want to
 		do it and manage it. Most modern Linux systems ship with CUPS as the default print management system.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2576706"></a><a name="id2576708"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id344636"></a><a name="id344639"></a></td><td align="left" valign="top"><p>
 		When should Windows client IP addresses be hard-coded?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		When there are few MS Windows clients, little client change, no mobile users, and users are not
@@ -788,7 +788,7 @@
 		user ability to access network configuration controls, fixed configuration eliminates the need
 		for a DHCP server. This reduces maintenance overheads and eliminates a possible point of network
 		failure.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2576732"></a><a name="id2576734"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id344658"></a><a name="id344660"></a></td><td align="left" valign="top"><p>
 		Under what circumstances is it best to use a DHCP server?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		In network configurations where there are mobile users, or where Windows client PCs move around
@@ -804,12 +804,12 @@
 		Another benefit of modern DHCP servers is their ability to register dynamically
 		assigned IP addresses with the DNS server. The benefits of Dynamic DNS (DDNS) are considerable in 
 		a large Windows network environment.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2576771"></a><a name="id2576773"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id344688"></a><a name="id344691"></a></td><td align="left" valign="top"><p>
 		What is the purpose of setting the parameter <em class="parameter"><code>guest ok</code></em> on a share?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		If this parameter is set to yes for a service, then no password is required to connect to the service.
 		Privileges are those of the guest account.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2576796"></a><a name="id2576798"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id344711"></a><a name="id344713"></a></td><td align="left" valign="top"><p>
 		When would you set the global parameter <em class="parameter"><code>disable spoolss</code></em>?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		Setting this parameter to <code class="constant">Yes</code> disables Samba's support for the SPOOLSS set of 
@@ -833,14 +833,14 @@
 		that the client now displays an &#8220;<span class="quote">Access Denied; Unable to connect</span>&#8221; message in the printer queue window
 		(even though jobs may be printed successfully). This parameter MUST not be enabled on a print share that has a valid
 		print driver installed on the Samba server.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2576886"></a><a name="id2576888"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id344780"></a><a name="id344783"></a></td><td align="left" valign="top"><p>
 		Why would you disable password caching on Windows 9x/Me clients?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		Windows 9x/Me workstations that are set at default (password caching enabled) store the username and
 		password in files located in the Windows master directory. Such files can be scavenged (read off a client
 		machine) and decrypted, thus revealing the user's access credentials for all systems the user may have accessed.
 		It is most insecure to allow any Windows 9x/Me client to operate with password caching enabled.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2576911"></a><a name="id2576913"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id344801"></a><a name="id344803"></a></td><td align="left" valign="top"><p>
 		The example of Abmas Accounting uses User Mode security. How does this provide anonymous access?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		The example used does not provide anonymous access. Since the clients are all Windows 2000 Professional,
@@ -848,14 +848,14 @@
 		a remote server using currently logged in user credentials. By ensuring that the user's login ID and
 		password are the same as those set on the Samba server, access is transparent and does not require
 		separate user authentication.
-		</p></td></tr></tbody></table></div></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id2572027" href="#id2572027" class="para">1</a>] </sup>The examples given mirror those documented
+		</p></td></tr></tbody></table></div></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id340669" href="#id340669" class="para">1</a>] </sup>The examples given mirror those documented
 	in The Official Samba-3 HOWTO and Reference Guide, Second Edition (TOSHARG2) Chapter 2, Section 2.3.1. You may gain additional
 	insight from the standalone server configurations covered in TOSHARG2, sections 2.3.1.2 through 2.3.1.4.
-	</p></div><div class="footnote"><p><sup>[<a name="ftn.id2572213" href="#id2572213" class="para">2</a>] </sup>
+	</p></div><div class="footnote"><p><sup>[<a name="ftn.id340813" href="#id340813" class="para">2</a>] </sup>
 		This information is given purely as an example of how data may be stored in such a way that it
 		will be easy to locate records at a later date. The example is not meant to imply any instructions
 		that may be construed as essential to the design of the solution; this is something you will almost
-		certainly want to determine for yourself.</p></div><div class="footnote"></div><div class="footnote"><p><sup>[<a name="ftn.id2575762" href="#id2575762" class="para">4</a>] </sup>This example uses the 
+		certainly want to determine for yourself.</p></div><div class="footnote"></div><div class="footnote"><p><sup>[<a name="ftn.id343830" href="#id343830" class="para">4</a>] </sup>This example uses the 
 			<em class="parameter"><code>smbpasswd</code></em> file in an obtuse way, since the use of 
 			the <em class="parameter"><code>passdb backend</code></em> has not been specified in the <code class="filename">smb.conf</code> 
 			file. This means that you are depending on correct default behavior.</p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ExNetworks.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ExNetworks.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="small.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part I. Example Network Configurations </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 2. Small Office Networking</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/small.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/small.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/small.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 2. Small Office Networking</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="ExNetworks.html" title="Part I. Example Network Configurations"><link rel="prev" href="simple.html" title="Chapter 1. No-Frills Samba Servers"><link rel="next" href="secure.html" title="Chapter 3. Secure Office Networking"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 2. Small Office Networking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="simple.html">Prev</a> </td><th width="60%" align="center">Part I. Example Network Configurations</th><td width="20%" align="right"> <a accesskey="n" href="secure.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="small"></a>Chapter 2. Small Office Networking</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="small.html#id2577019">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="small.html#id2577042">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="small.html#id2577104">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="small.html#id2577157">Technical Issues</a></span></dt><dt><span class="sect2"><a href="small.html#id2577369">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="small.html#id2577390">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="small.html#id2579091">Validation</a></span></dt><dt><span class="sect2"><a href="small.html#id2579795">Notebook Computers: A Special Case</a></span></dt><dt><span class="sect2"><a href="small.html#id2579821">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="small.html#id2579897">Questions and Answers</a></span></dt></dl></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 2. Small Office Networking</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="ExNetworks.html" title="Part I. Example Network Configurations"><link rel="prev" href="simple.html" title="Chapter 1. No-Frills Samba Servers"><link rel="next" href="secure.html" title="Chapter 3. Secure Office Networking"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 2. Small Office Networking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="simple.html">Prev</a> </td><th width="60%" align="center">Part I. Example Network Configurations</th><td width="20%" align="right"> <a accesskey="n" href="secure.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="small"></a>Chapter 2. Small Office Networking</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="small.html#id344880">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="small.html#id344898">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="small.html#id344943">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="small.html#id344988">Technical Issues</a></span></dt><dt><span class="sect2"><a href="small.html#id345160">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="small.html#id345178">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="small.html#id346626">Validation</a></span></dt><dt><span class="sect2"><a href="small.html#id347201">Notebook Computers: A Special Case</a></span></dt><dt><span class="sect2"><a href="small.html#id347221">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="small.html#id347285">Questions and Answers</a></span></dt></dl></div><p>
 	<a class="link" href="simple.html" title="Chapter 1. No-Frills Samba Servers">&#8220;No-Frills Samba Servers&#8221;</a> focused on the basics of simple yet effective
 	network solutions. Network administrators who take pride in their work
 	(that's most of us, right?) take care to deliver what our users want,
@@ -8,7 +8,7 @@
 	operates. Some creativity is helpful, but keep it under control 
 	good advice that the following two scenarios illustrate.
 	</p><p>
-	<a class="indexterm" name="id2576975"></a>
+	<a class="indexterm" name="id344851"></a>
 	In one case the network administrator of a mid-sized company spent three
 	months building a new network to replace an old Netware server. What he
 	delivered had all the bells and whistles he could muster. There were a
@@ -36,7 +36,7 @@
 	and got it. He often told me, &#8220;<span class="quote">Always keep a few new tricks up your
 	sleeves for when you need them.</span>&#8221; Was he smart? You decide. Let's
 	get on with our next exercise.
-	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2577019"></a>Introduction</h2></div></div></div><p>
+	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id344880"></a>Introduction</h2></div></div></div><p>
 	Abmas Accounting has grown. Mr. Meany likes you and says he knew you
 	were the right person for the job. That's why he asked you to install the
 	new server. The past few months have been hard work. You advised Mr. Meany
@@ -47,8 +47,8 @@
 	Some of the Windows clients are nearly past their use-by date.  You found damaged and unusable software on
 	some of the workstations that came with the acquired business and found some machines in need of both
 	hardware and software maintenance.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577042"></a>Assignment Tasks</h3></div></div></div><p>
-		<a class="indexterm" name="id2577050"></a>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id344898"></a>Assignment Tasks</h3></div></div></div><p>
+		<a class="indexterm" name="id344905"></a>
 		Mr. Meany is retiring in 12 months. Before he goes, he wants you to help ensure
 		that the business is running efficiently. Many of the new staff want notebook
 		computers.  They visit customer business premises and need to use local network
@@ -80,14 +80,14 @@
 		Mr. Meany also asked if it would be possible for one of the staff to manage
 		user accounts from the Windows desktop. That person will be responsible for
 		basic operations.
-		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2577104"></a>Dissection and Discussion</h2></div></div></div><p>
+		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id344943"></a>Dissection and Discussion</h2></div></div></div><p>
 	What are the key requirements in this business example? A quick review indicates
 	a need for
 	</p><div class="itemizedlist"><ul type="disc"><li><p>
 		Scalability, from 52 to over 100 users in 12 months
 		</p></li><li><p>
 		Mobile computing capability
-		<a class="indexterm" name="id2577126"></a>
+		<a class="indexterm" name="id344963"></a>
 		</p></li><li><p>
 		Improved reliability and usability
 		</p></li><li><p>
@@ -96,12 +96,12 @@
 	In this instance the installed Linux system is assumed to be a Red Hat Linux Fedora Core2 server
 	(as in <a class="link" href="simple.html#AccountingOffice" title="Accounting Office">&#8220;Accounting Office&#8221;</a>).
 
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577157"></a>Technical Issues</h3></div></div></div><p>
-		<a class="indexterm" name="id2577165"></a>
-		<a class="indexterm" name="id2577171"></a>
-		<a class="indexterm" name="id2577178"></a>
-		<a class="indexterm" name="id2577185"></a>
-		<a class="indexterm" name="id2577192"></a>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id344988"></a>Technical Issues</h3></div></div></div><p>
+		<a class="indexterm" name="id344995"></a>
+		<a class="indexterm" name="id345002"></a>
+		<a class="indexterm" name="id345008"></a>
+		<a class="indexterm" name="id345014"></a>
+		<a class="indexterm" name="id345020"></a>
 		It is time to implement a domain security environment. You will use the <code class="constant">
 		smbpasswd</code> (default) backend. You should implement a DHCP server. There is no need to
 		run DNS at this time, but the system will use WINS. The domain name will be <code class="constant">
@@ -122,7 +122,7 @@
 		Later on, when the Internet connection is implemented, you will add DNS as well as
 		other enhancements. It is important that you plan accordingly.
 		</p><p>
-		<a class="indexterm" name="id2577256"></a>
+		<a class="indexterm" name="id345070"></a>
 		You have split the network into two separate areas. Each has its own Ethernet switch.
 		There are 20 users on the accounting network and 32 users on the financial services
 		network. The server has two network interfaces, one serving each network. The
@@ -137,8 +137,8 @@
 		Given that DNS will not be used, you will configure WINS name resolution for UNIX
 		hostname name resolution.
 		</p><p>
-		<a class="indexterm" name="id2577287"></a>
-		<a class="indexterm" name="id2577296"></a>
+		<a class="indexterm" name="id345093"></a>
+		<a class="indexterm" name="id345101"></a>
 		It is necessary to map Windows Domain Groups to UNIX groups. It is
 		advisable to also map Windows Local Groups to UNIX groups. Additionally, the two
 		key staff groups in the firm are accounting staff and financial services staff.
@@ -155,10 +155,10 @@
 		<span class="emphasis"><em>TOSHARG2</em></span>, Chapter 11, Section 11.3.1, Example 11.1, for
 		more information.
 		</p><p>
-		<a class="indexterm" name="id2577354"></a>
+		<a class="indexterm" name="id345147"></a>
 		Vendor-supplied printer drivers will be installed on each client. The CUPS print
 		spooler on the UNIX host will be operated in <code class="constant">raw</code> mode.
-		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577369"></a>Political Issues</h3></div></div></div><p>
+		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id345160"></a>Political Issues</h3></div></div></div><p>
 		Mr. Meany is an old-school manager. He sets the rules and wants to see compliance.
 		He is willing to spend money on things he believes are of value. You need more
 		time to convince him of real priorities.
@@ -166,8 +166,8 @@
 		Go ahead, buy better notebooks. Wouldn't it be neat if they happened to be
 		supplied with antivirus software? Above all, demonstrate good purchase value and remember
 		to make your users happy.
-		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2577390"></a>Implementation</h2></div></div></div><p>
-	<a class="indexterm" name="id2577398"></a>
+		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id345178"></a>Implementation</h2></div></div></div><p>
+	<a class="indexterm" name="id345185"></a>
 	In this example, the assumption is made that this server is being configured from a clean start.
 	The alternate approach could be to demonstrate the migration of the system that is documented
 	in <a class="link" href="simple.html#AcctgNet" title="Implementation">&#8220;Implementation&#8221;</a> to meet the new requirements. The decision to treat this case, as with
@@ -175,23 +175,23 @@
 	the migration steps from the information provided in <a class="link" href="ntmigration.html" title="Chapter 9. Migrating NT4 Domain to Samba-3">&#8220;Migrating NT4 Domain to Samba-3&#8221;</a>.
 	Additionally, a fresh installation makes the example easier to follow.
 	</p><p>
-	<a class="indexterm" name="id2577429"></a>
+	<a class="indexterm" name="id345207"></a>
 	Each user will be given a home directory on the UNIX system, which will be available as a private
 	share. Two additional shares will be created, one for the accounting department and the other for
 	the financial services department. Network users will be given access to these shares by way
 	of group membership.
 	</p><p>
-	<a class="indexterm" name="id2577445"></a>
+	<a class="indexterm" name="id345220"></a>
 	UNIX group membership is the primary mechanism by which Windows Domain users will be granted
 	rights and privileges within the Windows environment.
 	</p><p>
-	<a class="indexterm" name="id2577460"></a>
+	<a class="indexterm" name="id345232"></a>
 	The user <code class="literal">alanm</code> will be made the owner of all files. This will be preserved
 	by setting the sticky bit (set UID/GID) on the top-level directories.
-	</p><div class="figure"><a name="acct2net"></a><p class="title"><b>Figure 2.1. Abmas Accounting  52-User Network Topology</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/acct2net.png" alt="Abmas Accounting 52-User Network Topology"></div></div></div><br class="figure-break"><div class="procedure"><a name="id2577520"></a><p class="title"><b>Procedure 2.1. Server Installation Steps</b></p><ol type="1"><li><p>
+	</p><div class="figure"><a name="acct2net"></a><p class="title"><b>Figure 2.1. Abmas Accounting  52-User Network Topology</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/acct2net.png" alt="Abmas Accounting 52-User Network Topology"></div></div></div><br class="figure-break"><div class="procedure"><a name="id345285"></a><p class="title"><b>Procedure 2.1. Server Installation Steps</b></p><ol type="1"><li><p>
 		Using UNIX/Linux system tools, name the server <code class="constant">sleeth</code>.
 		</p></li><li><p>
-		<a class="indexterm" name="id2577542"></a>
+		<a class="indexterm" name="id345305"></a>
 		Place an entry for the machine <code class="constant">sleeth</code> in the <code class="filename">/etc/hosts</code>.
 		The printers are network attached, so there should be entries for the
 		network printers also. An example <code class="filename">/etc/hosts</code> file is shown here:
@@ -207,10 +207,10 @@
 		</p></li><li><p>
 		Install the ISC DHCP server using the UNIX/Linux system tools available to you.
 		</p></li><li><p>
-		<a class="indexterm" name="id2577598"></a>
-		<a class="indexterm" name="id2577605"></a>
-		<a class="indexterm" name="id2577612"></a>
-		<a class="indexterm" name="id2577618"></a>
+		<a class="indexterm" name="id345353"></a>
+		<a class="indexterm" name="id345359"></a>
+		<a class="indexterm" name="id345365"></a>
+		<a class="indexterm" name="id345372"></a>
 		Because Samba will be operating over two network interfaces and clients on each side
 		may want to be able to reach clients on the other side, it is imperative that IP forwarding
 		is enabled. Use the system tool of your choice to enable IP forwarding. In the
@@ -225,7 +225,7 @@
 		<a class="link" href="small.html#acct3conf" title="Example 2.4. Accounting Office Network smb.conf File Services and Shares Section">&#8220;Accounting Office Network smb.conf File  Services and Shares Section&#8221;</a>. Combine these two examples to form a single
 		<code class="filename">/etc/samba/smb.conf</code> file.
 		</p></li><li><p>
-		<a class="indexterm" name="id2577686"></a>
+		<a class="indexterm" name="id345424"></a>
 		Add the user <code class="literal">root</code> to the Samba password backend:
 </p><pre class="screen">
 <code class="prompt">root# </code> smbpasswd -a root
@@ -233,13 +233,13 @@
 Retype new SMB password: XXXXXXX
 <code class="prompt">root# </code>
 </pre><p>
-		<a class="indexterm" name="id2577718"></a>
+		<a class="indexterm" name="id345452"></a>
 		This is the Windows Domain Administrator password. Never delete this account from
 		the password backend after Windows Domain Groups have been initialized. If you delete
 		this account, your system is crippled. You cannot restore this account,
 		and your Samba server can no longer be administered.
 		</p></li><li><p>
-		<a class="indexterm" name="id2577737"></a>
+		<a class="indexterm" name="id345467"></a>
 		Create the username map file to permit the <code class="constant">root</code> account to be called
 		<code class="constant">Administrator</code> from the Windows network environment. To do this, create
 		the file <code class="filename">/etc/samba/smbusers</code> with the following contents:
@@ -266,13 +266,13 @@
 ####
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2577781"></a>
+		<a class="indexterm" name="id345501"></a>
 		Create and map Windows Domain Groups to UNIX groups. A sample script is provided in
 		<a class="link" href="small.html#initGrps" title="Example 2.1. Script to Map Windows NT Groups to UNIX Groups">&#8220;Script to Map Windows NT Groups to UNIX Groups&#8221;</a>. Create a file containing this script. We called ours
 		<code class="filename">/etc/samba/initGrps.sh</code>. Set this file so it can be executed,
 		and then execute the script. Sample output should be as follows:
 
-</p><div class="example"><a name="initGrps"></a><p class="title"><b>Example 2.1. Script to Map Windows NT Groups to UNIX Groups</b></p><div class="example-contents"><a class="indexterm" name="id2577814"></a><pre class="screen">
+</p><div class="example"><a name="initGrps"></a><p class="title"><b>Example 2.1. Script to Map Windows NT Groups to UNIX Groups</b></p><div class="example-contents"><a class="indexterm" name="id345527"></a><pre class="screen">
 #!/bin/bash
 #
 # initGrps.sh
@@ -322,17 +322,17 @@
 Users (S-1-5-32-545) -&gt; -1
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2577897"></a>
-		<a class="indexterm" name="id2577904"></a>
-		<a class="indexterm" name="id2577913"></a>
+		<a class="indexterm" name="id345591"></a>
+		<a class="indexterm" name="id345597"></a>
+		<a class="indexterm" name="id345606"></a>
 		For each user who needs to be given a Windows Domain account, make an entry in the
 		<code class="filename">/etc/passwd</code> file as well as in the Samba password backend.
 		Use the system tool of your choice to create the UNIX system accounts, and use the Samba
 		<code class="literal">smbpasswd</code> program to create the Domain user accounts.
 		</p><p>
-		<a class="indexterm" name="id2577940"></a>
-		<a class="indexterm" name="id2577946"></a>
-		<a class="indexterm" name="id2577953"></a>
+		<a class="indexterm" name="id345628"></a>
+		<a class="indexterm" name="id345634"></a>
+		<a class="indexterm" name="id345640"></a>
 		There are a number of tools for user management under UNIX, such as
 		<code class="literal">useradd</code> and <code class="literal">adduser</code>, as well as a plethora of custom
 		tools. With the tool of your choice, create a home directory for each user.
@@ -361,38 +361,38 @@
 		Configure the printers with the IP addresses as shown in <a class="link" href="small.html#acct2net" title="Figure 2.1. Abmas Accounting 52-User Network Topology">&#8220;Abmas Accounting  52-User Network Topology&#8221;</a>.
 		Follow the instructions in the manufacturers' manuals to permit printing to port 9100.
 		This allows the CUPS spooler to print using raw mode protocols.
-		<a class="indexterm" name="id2578112"></a>
-		<a class="indexterm" name="id2578118"></a>
+		<a class="indexterm" name="id345771"></a>
+		<a class="indexterm" name="id345777"></a>
 		</p></li><li><p>
-		<a class="indexterm" name="id2578132"></a>
-		<a class="indexterm" name="id2578141"></a>
+		<a class="indexterm" name="id345790"></a>
+		<a class="indexterm" name="id345798"></a>
 		Configure the CUPS Print Queues as follows:
 </p><pre class="screen">
 <code class="prompt">root# </code> lpadmin -p hplj4 -v socket://192.168.1.11:9100 -E
 <code class="prompt">root# </code> lpadmin -p hplj6 -v socket://192.168.1.10:9100 -E
 <code class="prompt">root# </code> lpadmin -p qms -v socket://192.168.2.10:9100 -E
 </pre><p>
-		<a class="indexterm" name="id2578174"></a>
+		<a class="indexterm" name="id345825"></a>
 		This creates the necessary print queues with no assigned print filter.
 		</p></li><li><p>
-		<a class="indexterm" name="id2578189"></a>
-		<a class="indexterm" name="id2578196"></a>
-		<a class="indexterm" name="id2578203"></a>
+		<a class="indexterm" name="id345839"></a>
+		<a class="indexterm" name="id345845"></a>
+		<a class="indexterm" name="id345851"></a>
 		Edit the file <code class="filename">/etc/cups/mime.convs</code> to uncomment the line:
 </p><pre class="screen">
 application/octet-stream     application/vnd.cups-raw      0     -
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2578230"></a>
+		<a class="indexterm" name="id345875"></a>
 		Edit the file <code class="filename">/etc/cups/mime.types</code> to uncomment the line:
 </p><pre class="screen">
 application/octet-stream
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2578257"></a>
+		<a class="indexterm" name="id345898"></a>
 		Using your favorite system editor, create an <code class="filename">/etc/dhcpd.conf</code> with the
 		contents as shown in <a class="link" href="small.html#dhcp01" title="Example 2.2. Abmas Accounting DHCP Server Configuration File /etc/dhcpd.conf">&#8220;Abmas Accounting DHCP Server Configuration File  /etc/dhcpd.conf&#8221;</a>.
-</p><div class="example"><a name="dhcp01"></a><p class="title"><b>Example 2.2. Abmas Accounting DHCP Server Configuration File  <code class="filename">/etc/dhcpd.conf</code></b></p><div class="example-contents"><a class="indexterm" name="id2578293"></a><pre class="screen">
+</p><div class="example"><a name="dhcp01"></a><p class="title"><b>Example 2.2. Abmas Accounting DHCP Server Configuration File  <code class="filename">/etc/dhcpd.conf</code></b></p><div class="example-contents"><a class="indexterm" name="id345927"></a><pre class="screen">
 default-lease-time 86400;
 max-lease-time 172800;
 default-lease-time 86400;
@@ -440,11 +440,11 @@
 		Use the standard system tool to start Samba and CUPS and configure them to start
 		automatically at every system reboot. For example,
 		</p><p>
-		<a class="indexterm" name="id2578338"></a>
-		<a class="indexterm" name="id2578345"></a>
-		<a class="indexterm" name="id2578352"></a>
-		<a class="indexterm" name="id2578359"></a>
-		<a class="indexterm" name="id2578366"></a>
+		<a class="indexterm" name="id345960"></a>
+		<a class="indexterm" name="id345966"></a>
+		<a class="indexterm" name="id345973"></a>
+		<a class="indexterm" name="id345979"></a>
+		<a class="indexterm" name="id345985"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> chkconfig dhcp on
 <code class="prompt">root# </code> chkconfig smb on
@@ -454,12 +454,12 @@
 <code class="prompt">root# </code> /etc/rc.d/init.d/cups restart
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2578422"></a>
-		<a class="indexterm" name="id2578429"></a>
-		<a class="indexterm" name="id2578438"></a>
-		<a class="indexterm" name="id2578445"></a>
-		<a class="indexterm" name="id2578452"></a>
-		<a class="indexterm" name="id2578458"></a>
+		<a class="indexterm" name="id346034"></a>
+		<a class="indexterm" name="id346040"></a>
+		<a class="indexterm" name="id346049"></a>
+		<a class="indexterm" name="id346055"></a>
+		<a class="indexterm" name="id346061"></a>
+		<a class="indexterm" name="id346068"></a>
 		Configure the name service switch (NSS) to handle WINS-based name resolution.
 		Since this system does not use a DNS server, it is safe to remove this option from
 		the NSS configuration. Edit the <code class="filename">/etc/nsswitch.conf</code> file so that
@@ -467,11 +467,11 @@
 </p><pre class="screen">
 hosts:	files wins
 </pre><p>
-		</p></li></ol></div><div class="example"><a name="acct2conf"></a><p class="title"><b>Example 2.3. Accounting Office Network <code class="filename">smb.conf</code> File  [globals] Section</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2578523"></a><em class="parameter"><code>workgroup = BILLMORE</code></em></td></tr><tr><td><a class="indexterm" name="id2578535"></a><em class="parameter"><code>passwd chat = *New*Password* %n\n*Re-enter*new*password* %n\n *Password*changed*</code></em></td></tr><tr><td><a class="indexterm" name="id2578547"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id2578559"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id2578571"></a><em class="parameter"><code>name resolve order = wins bcast hosts</code></em></td></tr><tr><td><a class="indexterm" name="id2578583"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id2578595"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id2578607"></a><em class="parameter"><code>add user script = /usr/sbin/useradd -m -G users '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2578619"></a><em class="parameter"><code>delete user script = /usr/sbin/userdel -r '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2578632"></a><em class="parameter"><code>add group script = /usr/sbin/groupadd '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id2578644"></a><em class="parameter"><code>delete group script = /usr/sbin/groupdel '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id2578656"></a><em class="parameter"><code>add user to group script = /usr/sbin/usermod -A '%g' '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2578669"></a><em class="parameter"><code>add machine script = /usr/sbin/useradd -s /bin/false -d /var/lib/nobody '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2578681"></a><em class="parameter"><code>logon script = scripts\login.bat</code></em></td></tr><tr><td><a class="indexterm" name="id2578693"></a><em class="parameter"><code>logon path =  </code></em></td></tr><tr><td><a class="indexterm" name="id2578705"></a><em class="parameter"><code>logon drive = X:</code></em></td></tr><tr><td><a class="indexterm" name="id2578717"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2578728"></a><em class="parameter"><code>preferred master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2578740"></a><em class="parameter"><code>wins support = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2578752"></a><em class="parameter"><code>printing = CUPS</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="acct3conf"></a><p class="title"><b>Example 2.4. Accounting Office Network <code class="filename">smb.conf</code> File  Services and Shares Section</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id2578797"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id2578809"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id2578820"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2578832"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2578852"></a><em class="parameter"><code>comment = SMB Print Spool</code></em></td></tr><tr><td><a class="indexterm" name="id2578864"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2578876"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2578888"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2578899"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2578911"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id2578932"></a><em class="parameter"><code>comment = Network Logon Service</code></em></td></tr><tr><td><a class="indexterm" name="id2578943"></a><em class="parameter"><code>path = /data/%U</code></em></td></tr><tr><td><a class="indexterm" name="id2578955"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id2578967"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[accounts]</code></em></td></tr><tr><td><a class="indexterm" name="id2578987"></a><em class="parameter"><code>comment = Accounting Files</code></em></td></tr><tr><td><a class="indexterm" name="id2578999"></a><em class="parameter"><code>path = /data/accounts</code></em></td></tr><tr><td><a class="indexterm" name="id2579011"></a><em class="parameter"><code>valid users = %G</code></em></td></tr><tr><td><a class="indexterm" name="id2579022"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[finsvcs]</code></em></td></tr><tr><td><a class="indexterm" name="id2579043"></a><em class="parameter"><code>comment = Financial Service Files</code></em></td></tr><tr><td><a class="indexterm" name="id2579055"></a><em class="parameter"><code>path = /data/finsvcs</code></em></td></tr><tr><td><a class="indexterm" name="id2579066"></a><em class="parameter"><code>valid users = %G</code></em></td></tr><tr><td><a class="indexterm" name="id2579078"></a><em class="parameter"><code>read only = No</code></em></td></tr></table></div></div><br class="example-break"><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579091"></a>Validation</h3></div></div></div><p>
+		</p></li></ol></div><div class="example"><a name="acct2conf"></a><p class="title"><b>Example 2.3. Accounting Office Network <code class="filename">smb.conf</code> File  [globals] Section</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id346123"></a><em class="parameter"><code>workgroup = BILLMORE</code></em></td></tr><tr><td><a class="indexterm" name="id346133"></a><em class="parameter"><code>passwd chat = *New*Password* %n\n*Re-enter*new*password* %n\n *Password*changed*</code></em></td></tr><tr><td><a class="indexterm" name="id346145"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id346155"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id346165"></a><em class="parameter"><code>name resolve order = wins bcast hosts</code></em></td></tr><tr><td><a class="indexterm" name="id346176"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id346186"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id346197"></a><em class="parameter"><code>add user script = /usr/sbin/useradd -m -G users '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id346207"></a><em class="parameter"><code>delete user script = /usr/sbin/userdel -r '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id346217"></a><em class="parameter"><code>add group script = /usr/sbin/groupadd '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id346228"></a><em class="parameter"><code>delete group script = /usr/sbin/groupdel '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id346238"></a><em class="parameter"><code>add user to group script = /usr/sbin/usermod -A '%g' '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id346249"></a><em class="parameter"><code>add machine script = /usr/sbin/useradd -s /bin/false -d /var/lib/nobody '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id346260"></a><em class="parameter"><code>logon script = scripts\login.bat</code></em></td></tr><tr><td><a class="indexterm" name="id346271"></a><em class="parameter"><code>logon path =  </code></em></td></tr><tr><td><a class="indexterm" name="id346281"></a><em class="parameter"><code>logon drive = X:</code></em></td></tr><tr><td><a class="indexterm" name="id346292"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id346302"></a><em class="parameter"><code>preferred master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id346312"></a><em class="parameter"><code>wins support = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id346323"></a><em class="parameter"><code>printing = CUPS</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="acct3conf"></a><p class="title"><b>Example 2.4. Accounting Office Network <code class="filename">smb.conf</code> File  Services and Shares Section</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id346363"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id346373"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id346383"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id346394"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id346413"></a><em class="parameter"><code>comment = SMB Print Spool</code></em></td></tr><tr><td><a class="indexterm" name="id346423"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id346433"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id346444"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id346454"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id346465"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id346483"></a><em class="parameter"><code>comment = Network Logon Service</code></em></td></tr><tr><td><a class="indexterm" name="id346494"></a><em class="parameter"><code>path = /data/%U</code></em></td></tr><tr><td><a class="indexterm" name="id346504"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id346515"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[accounts]</code></em></td></tr><tr><td><a class="indexterm" name="id346533"></a><em class="parameter"><code>comment = Accounting Files</code></em></td></tr><tr><td><a class="indexterm" name="id346544"></a><em class="parameter"><code>path = /data/accounts</code></em></td></tr><tr><td><a class="indexterm" name="id346554"></a><em class="parameter"><code>valid users = %G</code></em></td></tr><tr><td><a class="indexterm" name="id346565"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[finsvcs]</code></em></td></tr><tr><td><a class="indexterm" name="id346583"></a><em class="parameter"><code>comment = Financial Service Files</code></em></td></tr><tr><td><a class="indexterm" name="id346594"></a><em class="parameter"><code>path = /data/finsvcs</code></em></td></tr><tr><td><a class="indexterm" name="id346604"></a><em class="parameter"><code>valid users = %G</code></em></td></tr><tr><td><a class="indexterm" name="id346615"></a><em class="parameter"><code>read only = No</code></em></td></tr></table></div></div><br class="example-break"><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id346626"></a>Validation</h3></div></div></div><p>
 		Does everything function as it ought? That is the key question at this point.
 		Here are some simple steps to validate your Samba server configuration.
-		</p><div class="procedure"><a name="id2579102"></a><p class="title"><b>Procedure 2.2. Validation Steps</b></p><ol type="1"><li><p>
-			<a class="indexterm" name="id2579113"></a>
+		</p><div class="procedure"><a name="id346636"></a><p class="title"><b>Procedure 2.2. Validation Steps</b></p><ol type="1"><li><p>
+			<a class="indexterm" name="id346647"></a>
 			If your <code class="filename">smb.conf</code> file has bogus options or parameters, this may cause Samba
 			to refuse to start. The first step should always be to validate the contents
 			of this file by running:
@@ -518,10 +518,10 @@
 </pre><p>
 			Clear away all errors before proceeding, and start or restart samba as necessary.
 			</p></li><li><p>
-			<a class="indexterm" name="id2579196"></a>
-			<a class="indexterm" name="id2579203"></a>
-			<a class="indexterm" name="id2579210"></a>
-			<a class="indexterm" name="id2579216"></a>
+			<a class="indexterm" name="id346704"></a>
+			<a class="indexterm" name="id346710"></a>
+			<a class="indexterm" name="id346716"></a>
+			<a class="indexterm" name="id346722"></a>
 			Check that the Samba server is running:
 </p><pre class="screen">
 <code class="prompt">root# </code> ps ax | grep mbd
@@ -538,7 +538,7 @@
 			<span class="emphasis"><em>TOSHARG2</em></span>, Chapter 23, Section 23.3. The single instance of
 			<code class="literal">smbd</code> is normal.
 			</p></li><li><p>
-			<a class="indexterm" name="id2579272"></a>
+			<a class="indexterm" name="id346768"></a>
 			Check that an anonymous connection can be made to the Samba server:
 </p><pre class="screen">
 <code class="prompt">root# </code> smbclient -L localhost -U%
@@ -567,9 +567,9 @@
 			The <code class="constant">-U%</code> argument means to send a <code class="constant">NULL</code> username and
 			a <code class="constant">NULL</code> password.
 			</p></li><li><p>
-			<a class="indexterm" name="id2579326"></a>
-			<a class="indexterm" name="id2579333"></a>
-			<a class="indexterm" name="id2579340"></a>
+			<a class="indexterm" name="id346810"></a>
+			<a class="indexterm" name="id346816"></a>
+			<a class="indexterm" name="id346822"></a>
 			Verify that the printers have the IP addresses assigned in the DHCP server configuration file.
 			The easiest way to do this is to ping the printer name. Immediately after the ping response
 			has been received, execute <code class="literal">arp -a</code> to find the MAC address of the printer
@@ -588,7 +588,7 @@
 			IP address from which the printer has responded and the entry for it in the
 			<code class="filename">/etc/dhcpd.conf</code> file.
 			</p></li><li><p>
-			<a class="indexterm" name="id2579406"></a>
+			<a class="indexterm" name="id346876"></a>
 			Make an authenticated connection to the server using the <code class="literal">smbclient</code> tool:
 </p><pre class="screen">
 <code class="prompt">root# </code> smbclient //sleeth/accounts -U alanm
@@ -605,11 +605,11 @@
            65387 blocks of size 65536. 28590 blocks available
 smb: \&gt; q
 </pre><p>
-			</p></li></ol></div></div><div class="procedure"><a name="id2579457"></a><p class="title"><b>Procedure 2.3. Windows XP Professional Client Configuration</b></p><ol type="1"><li><p>
+			</p></li></ol></div></div><div class="procedure"><a name="id346912"></a><p class="title"><b>Procedure 2.3. Windows XP Professional Client Configuration</b></p><ol type="1"><li><p>
 		Configure clients to the network settings shown in <a class="link" href="small.html#acct2net" title="Figure 2.1. Abmas Accounting 52-User Network Topology">&#8220;Abmas Accounting  52-User Network Topology&#8221;</a>.
 		All clients use DHCP for TCP/IP protocol stack configuration.
-		<a class="indexterm" name="id2579477"></a>
-		<a class="indexterm" name="id2579483"></a>
+		<a class="indexterm" name="id346928"></a>
+		<a class="indexterm" name="id346934"></a>
 		DHCP configures all Windows clients to use the WINS Server address <code class="constant">192.168.1.1</code>.
 		</p></li><li><p>
 		Join the Windows Domain called <code class="constant">BILLMORE</code>. Use the Domain Administrator
@@ -651,7 +651,7 @@
 				</p></li><li><p>
 				Repeat the printer installation steps above for the HP LaserJet 6 printer
 				as well as for the QMS Magicolor XXXX laser printer.
-				</p></li></ol></div></li></ol></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579795"></a>Notebook Computers: A Special Case</h3></div></div></div><p>
+				</p></li></ol></div></li></ol></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347201"></a>Notebook Computers: A Special Case</h3></div></div></div><p>
 	As a network administrator, you already know how to create local machine accounts for Windows 200x/XP
 	Professional systems. This is the preferred solution to provide continuity of work for notebook users
 	so that absence from the office network environment does not become a barrier to productivity.
@@ -661,21 +661,21 @@
 	transparently access network resources as if logged onto the domain itself. There are some trade-offs
 	that mean that as the network is more tightly secured, it becomes necessary to modify Windows client
 	configuration somewhat.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579821"></a>Key Points Learned</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347221"></a>Key Points Learned</h3></div></div></div><p>
 		In this network design and implementation exercise, you created a Windows NT4-style Domain
 		Controller using Samba-3.0.20. Following these guidelines, you experienced
 		and implemented several important aspects of Windows networking. In the next chapter,
 		you build on the experience. These are the highlights from this chapter:
 		</p><div class="itemizedlist"><ul type="disc"><li><p>
-			<a class="indexterm" name="id2579841"></a>
+			<a class="indexterm" name="id347237"></a>
 			You implemented a DHCP server, and Microsoft Windows clients were able to obtain all necessary
 			network configuration settings from this server.
 			</p></li><li><p>
-			<a class="indexterm" name="id2579855"></a>
+			<a class="indexterm" name="id347249"></a>
 			You created a Windows Domain Controller. You were able to use the network logon service
 			and successfully joined Windows 200x/XP Professional clients to the Domain.
 			</p></li><li><p>
-			<a class="indexterm" name="id2579869"></a>
+			<a class="indexterm" name="id347262"></a>
 			You created raw print queues in the CUPS printing system. You maintained a simple
 			printing system so that all users can share centrally managed printers. You installed
 			native printer drivers on the Windows clients.
@@ -684,33 +684,33 @@
 			</p></li><li><p>
 			You offered Mobile notebook users a solution that allows them to continue to work
 			while away from the office and not connected to the corporate network.
-			</p></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2579897"></a>Questions and Answers</h2></div></div></div><p>
+			</p></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id347285"></a>Questions and Answers</h2></div></div></div><p>
 	Your new Domain Controller is ready to serve you. What does it mean? Here are some questions and answers that
 	may help.
-	</p><div class="qandaset"><dl><dt>1. <a href="small.html#id2579911">
+	</p><div class="qandaset"><dl><dt>1. <a href="small.html#id347297">
 		What is the key benefit of using DHCP to configure Windows client TCP/IP stacks?
-		</a></dt><dt>2. <a href="small.html#id2579937">
+		</a></dt><dt>2. <a href="small.html#id347318">
 		Are there any DHCP server configuration parameters in the /etc/dhcpd.conf
 		that should be noted in particular?
-		</a></dt><dt>3. <a href="small.html#id2579969">
+		</a></dt><dt>3. <a href="small.html#id347344">
 		Is it possible to create a Windows Domain account that is specifically called Administrator?
-		</a></dt><dt>4. <a href="small.html#id2580008">
+		</a></dt><dt>4. <a href="small.html#id347378">
 		Why is it necessary to give the Windows Domain Administrator a UNIX UID of 0?
-		</a></dt><dt>5. <a href="small.html#id2580049">
+		</a></dt><dt>5. <a href="small.html#id347411">
 		One of my junior staff needs the ability to add machines to the Domain, but I do not want to give him
 		root access. How can we do this?
-		</a></dt><dt>6. <a href="small.html#id2580091">
+		</a></dt><dt>6. <a href="small.html#id347447">
 		Why must I map Windows Domain Groups to UNIX groups?
-		</a></dt><dt>7. <a href="small.html#id2580130">
+		</a></dt><dt>7. <a href="small.html#id347481">
 		I deleted my root account and now I cannot add it back! What can I do?
-		</a></dt><dt>8. <a href="small.html#id2580203">
+		</a></dt><dt>8. <a href="small.html#id347546">
 		When I run net groupmap list, it reports a group called Administrators
 		as well as Domain Admins. What is the difference between them?
-		</a></dt><dt>9. <a href="small.html#id2580251">
+		</a></dt><dt>9. <a href="small.html#id347586">
 		What is the effect of changing the name of a Samba server or of changing the Domain name?
-		</a></dt><dt>10. <a href="small.html#id2580303">
+		</a></dt><dt>10. <a href="small.html#id347628">
 		How can I manage user accounts from my Windows XP Professional workstation?
-		</a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%"><tbody><tr class="question"><td align="left" valign="top"><a name="id2579911"></a><a name="id2579913"></a><p><b>1.</b></p></td><td align="left" valign="top"><p>
+		</a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%"><tbody><tr class="question"><td align="left" valign="top"><a name="id347297"></a><a name="id347299"></a><p><b>1.</b></p></td><td align="left" valign="top"><p>
 		What is the key benefit of using DHCP to configure Windows client TCP/IP stacks?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		First and foremost, portability. It means that notebook users can move between
@@ -719,7 +719,7 @@
 		either using DHCP assigned addressing or when using dial-up networking, settings such as
 		default routes and DNS server addresses that apply only to the Abmas office environment do
 		not interfere with remote operations. This is an extremely important feature of DHCP.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2579937"></a><a name="id2579940"></a><p><b>2.</b></p></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id347318"></a><a name="id347320"></a><p><b>2.</b></p></td><td align="left" valign="top"><p>
 		Are there any DHCP server configuration parameters in the <code class="filename">/etc/dhcpd.conf</code>
 		that should be noted in particular?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
@@ -728,14 +728,14 @@
 		with the WINS server, and then instructs the client to first query the WINS server when a
 		NetBIOS machine name needs to be resolved to an IP Address. This configuration
 		results in far lower UDP broadcast traffic than would be the case if WINS was not used.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2579969"></a><a name="id2579971"></a><p><b>3.</b></p></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id347344"></a><a name="id347346"></a><p><b>3.</b></p></td><td align="left" valign="top"><p>
 		Is it possible to create a Windows Domain account that is specifically called <code class="constant">Administrator</code>?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		You can surely create a Windows Domain account called <code class="constant">Administrator</code>. It is also
 		possible to map that account so that it has the effective UNIX UID of 0. This way it isn't
 		necessary to use the <em class="parameter"><code>username map</code></em> facility to map this account to the UNIX
 		account called <code class="constant">root</code>.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2580008"></a><a name="id2580010"></a><p><b>4.</b></p></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id347378"></a><a name="id347380"></a><p><b>4.</b></p></td><td align="left" valign="top"><p>
 		Why is it necessary to give the Windows Domain <code class="constant">Administrator</code> a UNIX UID of 0?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		The Windows Domain <code class="constant">Administrator</code> account is the most privileged account that
@@ -745,7 +745,7 @@
 		Administrator to manage accounts as well as permissions, privileges, and security
 		settings within the Domain and on the Samba server, equivalent rights must be assigned. This is
 		achieved with the <code class="constant">root</code> UID equal to 0.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2580049"></a><a name="id2580051"></a><p><b>5.</b></p></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id347411"></a><a name="id347414"></a><p><b>5.</b></p></td><td align="left" valign="top"><p>
 		One of my junior staff needs the ability to add machines to the Domain, but I do not want to give him
 		<code class="constant">root</code> access. How can we do this?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
@@ -754,13 +754,13 @@
 		(or the equivalent <code class="constant">wheel</code> on some UNIX systems) that has a GID of 0.
 		This must be the primary GID of the account of the user who is a member of the Windows <code class="constant">
 		Domain Admins</code> account.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2580091"></a><a name="id2580093"></a><p><b>6.</b></p></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id347447"></a><a name="id347449"></a><p><b>6.</b></p></td><td align="left" valign="top"><p>
 		Why must I map Windows Domain Groups to UNIX groups?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		Samba-3 does not permit a Domain Group to become visible to Domain network clients unless the account
 		has a UNIX group account equivalent. The Domain groups that should be given UNIX equivalents are
 		<span class="guimenu">Domain Guests</span>, <span class="guimenu">Domain Users</span>, and <span class="guimenu">Domain Admins</span>.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2580130"></a><a name="id2580132"></a><p><b>7.</b></p></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id347481"></a><a name="id347483"></a><p><b>7.</b></p></td><td align="left" valign="top"><p>
 		I deleted my <code class="constant">root</code> account and now I cannot add it back! What can I do?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		This is a nasty problem. Fortunately, there is a solution.
@@ -772,7 +772,7 @@
 			Use the <code class="literal">smbpasswd</code> to add the root account.
 			</p></li><li><p>
 			Restore the <code class="filename">group_mapping.tdb</code> file.
-			</p></li></ol></div></td></tr><tr class="question"><td align="left" valign="top"><a name="id2580203"></a><a name="id2580205"></a><p><b>8.</b></p></td><td align="left" valign="top"><p>
+			</p></li></ol></div></td></tr><tr class="question"><td align="left" valign="top"><a name="id347546"></a><a name="id347548"></a><p><b>8.</b></p></td><td align="left" valign="top"><p>
 		When I run <code class="literal">net groupmap list</code>, it reports a group called <span class="guimenu">Administrators</span>
 		as well as <span class="guimenu">Domain Admins</span>. What is the difference between them?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
@@ -780,7 +780,7 @@
 		present as the Local Group account on a Domain Member server or workstation. Samba uses only Domain
 		Groups at this time. A Workstation or Server Local Group has no meaning in a Samba context. This
 		may change at some later date. These accounts are provided only so that security objects are correctly shown.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2580251"></a><a name="id2580253"></a><p><b>9.</b></p></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id347586"></a><a name="id347588"></a><p><b>9.</b></p></td><td align="left" valign="top"><p>
 		What is the effect of changing the name of a Samba server or of changing the Domain name?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		If you elect to change the name of the Samba server, on restarting <code class="literal">smbd</code>,
@@ -792,7 +792,7 @@
 		SID before the change is made. You can back up the SID using the <code class="literal">net getlocalsid</code> (Samba-3)
 		or the <code class="literal">smbpasswd</code> (Samba-2.2.x). To change the SID, you use the same tool. Be sure
 		to check the man page for this command for detailed instructions regarding the steps involved.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2580303"></a><a name="id2580305"></a><p><b>10.</b></p></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id347628"></a><a name="id347630"></a><p><b>10.</b></p></td><td align="left" valign="top"><p>
 		How can I manage user accounts from my Windows XP Professional workstation?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		Samba-3 implements a Windows NT4-style security domain architecture. This type of Domain cannot

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/unixclients.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/unixclients.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/unixclients.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 7. Adding Domain Member Servers and Clients</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="DMSMig.html" title="Part II. Domain Members, Updating Samba and Migration"><link rel="prev" href="DMSMig.html" title="Part II. Domain Members, Updating Samba and Migration"><link rel="next" href="upgrades.html" title="Chapter 8. Updating Samba-3"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 7. Adding Domain Member Servers and Clients</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="DMSMig.html">Prev</a> </td><th width="60%" align="center">Part II. Domain Members, Updating Samba and Migration</th><td width="20%" align="right"> <a accesskey="n" href="upgrades.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="unixclients"></a>Chapter 7. Adding Domain Member Servers and Clients</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="unixclients.html#id2611392">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="unixclients.html#id2611445">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="unixclients.html#id2611480">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="unixclients.html#id2611509">Technical Issues</a></span></dt><dt><span class="sect2"><a href="unixclients.html#id2612158">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="unixclients.html#id2612258">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></span></dt><dt><span class="sect2"><a href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a></span></dt><dt><span class="sect2"><a href="unixclients.html#dcwonss">NT4/Samba Domain with Samba Domain Member Server without NSS Support</a></span></dt><dt><span class="sect2"><a href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></span></dt><dt><span class="sect2"><a href="unixclients.html#id2618464">UNIX/Linux Client Domain Member</a></span></dt><dt><span class="sect2"><a href="unixclients.html#id2619038">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="unixclients.html#id2619093">Questions and Answers</a></span></dt></dl></div><p><a class="indexterm" name="id2611293"></a><a class="indexterm" name="id2611301"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 7. Adding Domain Member Servers and Clients</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="DMSMig.html" title="Part II. Domain Members, Updating Samba and Migration"><link rel="prev" href="DMSMig.html" title="Part II. Domain Members, Updating Samba and Migration"><link rel="next" href="upgrades.html" title="Chapter 8. Updating Samba-3"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 7. Adding Domain Member Servers and Clients</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="DMSMig.html">Prev</a> </td><th width="60%" align="center">Part II. Domain Members, Updating Samba and Migration</th><td width="20%" align="right"> <a accesskey="n" href="upgrades.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="unixclients"></a>Chapter 7. Adding Domain Member Servers and Clients</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="unixclients.html#id375489">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="unixclients.html#id375537">Assignment Tasks</a></span></dt></dl></dd><dt><span class="sect1"><a href="unixclients.html#id375566">Dissection and Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="unixclients.html#id375589">Technical Issues</a></span></dt><dt><span class="sect2"><a href="unixclients.html#id376189">Political Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="unixclients.html#id376274">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="unixclients.html#sdcsdmldap">Samba Domain with Samba Domain Member Server  Using NSS LDAP</a></span></dt><dt><span class="sect2"><a href="unixclients.html#wdcsdm">NT4/Samba Domain with Samba Domain Member Server: Using NSS and Winbind</a></span></dt><dt><span class="sect2"><a href="unixclients.html#dcwonss">NT4/Samba Domain with Samba Domain Member Server without NSS Support</a></span></dt><dt><span class="sect2"><a href="unixclients.html#adssdm">Active Directory Domain with Samba Domain Member Server</a></span></dt><dt><span class="sect2"><a href="unixclients.html#id382025">UNIX/Linux Client Domain Member</a></span></dt><dt><span class="sect2"><a href="unixclients.html#id382521">Key Points Learned</a></span></dt></dl></dd><dt><span class="sect1"><a href="unixclients.html#id382565">Questions and Answers</a></span></dt></dl></div><p><a class="indexterm" name="id375400"></a><a class="indexterm" name="id375408"></a>
 	The most frequently discussed Samba subjects over the past 2 years have focused around domain control and printing. 
 	It is well known that Samba is a file and print server. A recent survey conducted by <span class="emphasis"><em>Open Magazine</em></span> found 
 	that of all respondents, 97 percent use Samba for file and print services, and 68 percent use Samba for Domain Control. See the 
@@ -11,16 +11,16 @@
 	exciting aspects of Samba deployment. This chapter directs your attention to provide important information on
 	the addition of Samba servers into your present Windows network  whatever the controlling technology
 	may be. So let's get back to our good friends at Abmas.
-	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2611392"></a>Introduction</h2></div></div></div><p><a class="indexterm" name="id2611398"></a><a class="indexterm" name="id2611406"></a>
+	</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id375489"></a>Introduction</h2></div></div></div><p><a class="indexterm" name="id375495"></a><a class="indexterm" name="id375503"></a>
 	Looking back over the achievements of the past year or two, daily events at Abmas are rather straightforward
 	with not too many distractions or problems. Your team is doing well, but a number of employees
 	are asking for Linux desktop systems. Your network has grown and demands additional domain member servers. Let's
 	get on with this; Christine and Stan are ready to go.
-	</p><p><a class="indexterm" name="id2611427"></a>
+	</p><p><a class="indexterm" name="id375521"></a>
 	Stan is firmly in control of the department of the future, while Christine is enjoying a stable and
 	predictable network environment. It is time to add more servers and to add Linux desktops. It is
 	time to meet the demands of future growth and endure trial by fire.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2611445"></a>Assignment Tasks</h3></div></div></div><p><a class="indexterm" name="id2611452"></a>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id375537"></a>Assignment Tasks</h3></div></div></div><p><a class="indexterm" name="id375544"></a>
 	You must now add UNIX/Linux domain member servers to your network. You have a friend who has a Windows 2003
 	Active Directory domain network who wants to add a Samba/Linux server and has asked Christine to help him
 	out. Your real objective is to help Christine to see more of the way the Microsoft world lives and use
@@ -30,8 +30,8 @@
 	these systems to make sure that Abmas is not building islands of technology. You ask Christine to
 	do likewise at Swodniw Biz NL (your friend's company) to help them to evaluate a Linux desktop. You want to make
 	the right decision, don't you?
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2611480"></a>Dissection and Discussion</h2></div></div></div><p>
-	<a class="indexterm" name="id2611488"></a>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id375566"></a>Dissection and Discussion</h2></div></div></div><p>
+	<a class="indexterm" name="id375573"></a>
 	Recent Samba mailing-list activity is witness to how many sites are using winbind. Some have no trouble
 	at all with it, yet to others the problems seem insurmountable. Periodically there are complaints concerning
 	an inability to achieve identical user and group IDs between Windows and UNIX environments.
@@ -39,28 +39,28 @@
 	You provide step-by-step implementations of the various tools that can be used for identity
 	resolution. You also provide working examples of solutions for integrated authentication for
 	both UNIX/Linux and Windows environments.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2611509"></a>Technical Issues</h3></div></div></div><p>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id375589"></a>Technical Issues</h3></div></div></div><p>
 		One of the great challenges we face when people ask us, &#8220;<span class="quote">What is the best way to solve
 		this problem?</span>&#8221; is to get beyond the facts so we not only can clearly comprehend
 		the immediate technical problem, but also can understand how needs may change.
 		</p><p>
-		<a class="indexterm" name="id2611528"></a>
+		<a class="indexterm" name="id375606"></a>
 		There are a few facts we should note when dealing with the question of how best to
 		integrate UNIX/Linux clients and servers into a Windows networking environment:
 		</p><div class="itemizedlist"><ul type="disc"><li><p>
-			<a class="indexterm" name="id2611544"></a>
-			<a class="indexterm" name="id2611551"></a>
-			<a class="indexterm" name="id2611558"></a>
-			<a class="indexterm" name="id2611567"></a>
-			<a class="indexterm" name="id2611574"></a>
+			<a class="indexterm" name="id375621"></a>
+			<a class="indexterm" name="id375628"></a>
+			<a class="indexterm" name="id375634"></a>
+			<a class="indexterm" name="id375644"></a>
+			<a class="indexterm" name="id375650"></a>
 			A domain controller (PDC or BDC) is always authoritative for all accounts in its domain.
 			This means that a BDC must (of necessity) be able to resolve all account UIDs and GIDs
 			to the same values that the PDC resolved them to.
 			</p></li><li><p>
-			<a class="indexterm" name="id2611589"></a>
-			<a class="indexterm" name="id2611596"></a>
-			<a class="indexterm" name="id2611608"></a>
-			<a class="indexterm" name="id2611614"></a>
+			<a class="indexterm" name="id375663"></a>
+			<a class="indexterm" name="id375670"></a>
+			<a class="indexterm" name="id375681"></a>
+			<a class="indexterm" name="id375688"></a>
 			A domain member can be authoritative for local accounts, but is never authoritative for
 			domain accounts. If a user is accessing a domain member server and that user's account
 			is not known locally, the domain member server must resolve the identity of that user
@@ -70,26 +70,26 @@
 			Samba, when running on a domain member server, can resolve user identities from a
 			number of sources:
 			</p><div class="itemizedlist"><ul type="circle"><li><p>
-				<a class="indexterm" name="id2611647"></a>
-				<a class="indexterm" name="id2611654"></a>
-				<a class="indexterm" name="id2611661"></a>
-				<a class="indexterm" name="id2611667"></a>
-				<a class="indexterm" name="id2611674"></a>
+				<a class="indexterm" name="id375716"></a>
+				<a class="indexterm" name="id375723"></a>
+				<a class="indexterm" name="id375730"></a>
+				<a class="indexterm" name="id375736"></a>
+				<a class="indexterm" name="id375743"></a>
 				By executing a system <code class="literal">getpwnam()</code> or <code class="literal">getgrnam()</code> call. 
 				On systems that support it, this utilizes the name service switch (NSS) facility to 
 				resolve names according to the configuration of the <code class="filename">/etc/nsswitch.conf</code> 
 				file. NSS can be configured to use LDAP, winbind, NIS, or local files.
 				</p></li><li><p>
-				<a class="indexterm" name="id2611707"></a>
-				<a class="indexterm" name="id2611714"></a>
-				<a class="indexterm" name="id2611721"></a>
+				<a class="indexterm" name="id375774"></a>
+				<a class="indexterm" name="id375781"></a>
+				<a class="indexterm" name="id375788"></a>
 				Performing, via NSS, a direct LDAP search (where an LDAP passdb backend has been configured).
 				This requires the use of the PADL nss_ldap tool (or equivalent).
 				</p></li><li><p>
-				<a class="indexterm" name="id2611735"></a>
-				<a class="indexterm" name="id2611742"></a>
-				<a class="indexterm" name="id2611748"></a>
-				<a class="indexterm" name="id2611755"></a>
+				<a class="indexterm" name="id375800"></a>
+				<a class="indexterm" name="id375807"></a>
+				<a class="indexterm" name="id375814"></a>
+				<a class="indexterm" name="id375821"></a>
 				Directly by querying <code class="literal">winbindd</code>. The <code class="literal">winbindd</code>
 				contacts a domain controller to attempt to resolve the identity of the user or group. It
 				receives the Windows networking security identifier (SID) for that appropriate
@@ -97,8 +97,8 @@
 				creates an entry in its <code class="filename">winbindd_idmap.tdb</code> and 
 				<code class="filename">winbindd_cache.tdb</code> files.
 				</p><p>
-				<a class="indexterm" name="id2611795"></a>
-				<a class="indexterm" name="id2611802"></a>
+				<a class="indexterm" name="id375857"></a>
+				<a class="indexterm" name="id375864"></a>
 				If the parameter <a class="link" href="smb.conf.5.html#IDMAPBACKEND">idmap backend = ldap:ldap://myserver.domain</a>
 				was specified and the LDAP server has been configured with a container in which it may
 				store the IDMAP entries, all domain members may share a common mapping.
@@ -111,37 +111,37 @@
 			in the <code class="filename">smb.conf</code> file. Some of the configuration options are rather less than obvious to the 
 			casual user.
 			</p></li><li><p>
-			<a class="indexterm" name="id2611866"></a>
-			<a class="indexterm" name="id2611874"></a>
-			<a class="indexterm" name="id2611883"></a>
+			<a class="indexterm" name="id375922"></a>
+			<a class="indexterm" name="id375929"></a>
+			<a class="indexterm" name="id375939"></a>
 			If you wish to make use of accounts (users and/or groups) that are local to (i.e., capable
 			of being resolved using) the NSS facility, it is possible to use the 
 			<a class="link" href="smb.conf.5.html#WINBINDTRUSTEDDOMAINSONLY">winbind trusted domains only = Yes</a>
 			in the <code class="filename">smb.conf</code> file. This parameter specifically applies to domain controllers, 
 			and to domain member servers.
 			</p></li></ul></div><p>
-		<a class="indexterm" name="id2611919"></a>
-		<a class="indexterm" name="id2611926"></a>
-		<a class="indexterm" name="id2611933"></a>
+		<a class="indexterm" name="id375970"></a>
+		<a class="indexterm" name="id375977"></a>
+		<a class="indexterm" name="id375983"></a>
 		For many administrators, it should be plain that the use of an LDAP-based repository for all network
 		accounts (both for POSIX accounts and for Samba accounts) provides the most elegant and
 		controllable facility. You eventually appreciate the decision to use LDAP.
 		</p><p>
-		<a class="indexterm" name="id2611947"></a>
-		<a class="indexterm" name="id2611954"></a>
-		<a class="indexterm" name="id2611961"></a>
+		<a class="indexterm" name="id375996"></a>
+		<a class="indexterm" name="id376003"></a>
+		<a class="indexterm" name="id376009"></a>
 		If your network account information resides in an LDAP repository, you should use it ahead of any
 		alternative method. This means that if it is humanly possible to use the <code class="literal">nss_ldap</code>
 		tools to resolve UNIX account UIDs/GIDs via LDAP, this is the preferred solution, because it provides
 		a more readily controllable method for asserting the exact same user and group identifiers 
 		throughout the network.
 		</p><p>
-		<a class="indexterm" name="id2611984"></a>
-		<a class="indexterm" name="id2611993"></a>
-		<a class="indexterm" name="id2612000"></a>
-		<a class="indexterm" name="id2612007"></a>
-		<a class="indexterm" name="id2612014"></a>
-		<a class="indexterm" name="id2612021"></a>
+		<a class="indexterm" name="id376029"></a>
+		<a class="indexterm" name="id376038"></a>
+		<a class="indexterm" name="id376045"></a>
+		<a class="indexterm" name="id376052"></a>
+		<a class="indexterm" name="id376058"></a>
+		<a class="indexterm" name="id376065"></a>
 		In the situation where UNIX accounts are held on the domain member server itself, the only effective
 		way to use them involves the <code class="filename">smb.conf</code> entry 
 		<a class="link" href="smb.conf.5.html#WINBINDTRUSTEDDOMAINSONLY">winbind trusted domains only = Yes</a>. This forces 
@@ -149,10 +149,10 @@
 		then be controlled via <code class="filename">/etc/nsswitch.conf</code> file settings. The use of this parameter
 		disables the use of Samba with trusted domains (i.e., external domains).
 		</p><p>
-		<a class="indexterm" name="id2612072"></a>
-		<a class="indexterm" name="id2612079"></a>
-		<a class="indexterm" name="id2612088"></a>
-		<a class="indexterm" name="id2612095"></a>
+		<a class="indexterm" name="id376113"></a>
+		<a class="indexterm" name="id376120"></a>
+		<a class="indexterm" name="id376129"></a>
+		<a class="indexterm" name="id376136"></a>
 		Winbind can be used to create an appliance mode domain member server. In this capacity, <code class="literal">winbindd</code>
 		is configured to automatically allocate UIDs/GIDs from numeric ranges set in the <code class="filename">smb.conf</code> file. The allocation
 		is made for all accounts that connect to that domain member server, whether within its own domain or from
@@ -161,16 +161,16 @@
 		same UID/GID on both servers  however, this is transparent to the Windows network user. This data
 		is stored in the <code class="filename">winbindd_idmap.tdb</code> and <code class="filename">winbindd_cache.tdb</code> files.
 		</p><p>
-		<a class="indexterm" name="id2612143"></a>
+		<a class="indexterm" name="id376177"></a>
 		The use of an LDAP backend for the Winbind IDMAP facility permits Windows domain SIDs
 		mappings to UIDs/GIDs to be stored centrally. The result is a consistent mapping across all domain member
 		servers so configured. This solves one of the major headaches for network administrators who need to copy
 		files between or across network file servers.
-		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2612158"></a>Political Issues</h3></div></div></div><p>
-		<a class="indexterm" name="id2612166"></a>
-		<a class="indexterm" name="id2612172"></a>
-		<a class="indexterm" name="id2612179"></a>
-		<a class="indexterm" name="id2612188"></a>
+		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id376189"></a>Political Issues</h3></div></div></div><p>
+		<a class="indexterm" name="id376197"></a>
+		<a class="indexterm" name="id376204"></a>
+		<a class="indexterm" name="id376210"></a>
+		<a class="indexterm" name="id376219"></a>
 		One of the most fierce conflicts recently being waged is resistance to the adoption of LDAP, in
 		particular OpenLDAP, as a replacement for UNIX NIS (previously called Yellow Pages). Let's face it, LDAP
 		is different and requires a new approach to the need for a better identity management solution. The more
@@ -182,23 +182,23 @@
 		you can't use Windows Active Directory in a heterogenous environment  it can be done, it just requires 
 		commercial integration products. But it's not what Active Directory was designed for.
 		</p><p>
-		<a class="indexterm" name="id2612227"></a>
-		<a class="indexterm" name="id2612233"></a>
+		<a class="indexterm" name="id376250"></a>
+		<a class="indexterm" name="id376256"></a>
 		A number of long-term UNIX devotees have recently commented in various communications that the Samba Team
 		is the first application group to almost force network administrators to use LDAP. It should be pointed
 		out that we resisted this for as long as we could. It is not out of laziness or malice that LDAP has
 		finally emerged as the preferred identity management backend for Samba. We recommend LDAP for your total
 		organizational directory needs.
-		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2612258"></a>Implementation</h2></div></div></div><p>
-	<a class="indexterm" name="id2612266"></a>
-	<a class="indexterm" name="id2612275"></a>
-	<a class="indexterm" name="id2612285"></a>
+		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id376274"></a>Implementation</h2></div></div></div><p>
+	<a class="indexterm" name="id376281"></a>
+	<a class="indexterm" name="id376291"></a>
+	<a class="indexterm" name="id376300"></a>
 	The domain member server and the domain member client are at the center of focus in this chapter.
 	Configuration of Samba-3 domain controller is covered in earlier chapters, so if your 
 	interest is in domain controller configuration, you will not find that here. You will find good
 	oil that helps you to add domain member servers and clients.
 	</p><p>
-	<a class="indexterm" name="id2612301"></a>
+	<a class="indexterm" name="id376313"></a>
 	In practice, domain member servers and domain member workstations are very different entities, but in
 	terms of technology they share similar core infrastructure. A technologist would argue that servers
 	and workstations are identical. Many users would argue otherwise, given that in a well-disciplined
@@ -206,15 +206,15 @@
 	are located on servers. A workstation is frequently viewed as a disposable (easy to replace) item,
 	but a server is viewed as a core component of the business.
 	</p><p>
-	<a class="indexterm" name="id2612323"></a>
+	<a class="indexterm" name="id376330"></a>
 	We can look at this another way. If a workstation breaks down, one user is affected, but if a
 	server breaks down, hundreds of users may not be able to work. The services that a workstation
 	must provide are document- and file-production oriented; a server provides information storage
 	and is distribution oriented.
 	</p><p>
-	<a class="indexterm" name="id2612339"></a>
-	<a class="indexterm" name="id2612346"></a>
-	<a class="indexterm" name="id2612353"></a>
+	<a class="indexterm" name="id376343"></a>
+	<a class="indexterm" name="id376350"></a>
+	<a class="indexterm" name="id376356"></a>
 	<span class="emphasis"><em>Why is this important?</em></span> For starters, we must identify what
 	components of the operating system and its environment must be configured. Also, it is necessary
 	to recognize where the interdependencies between the various services to be used are.
@@ -226,12 +226,12 @@
 	So, in this chapter we demonstrate how to implement the technology. It is done within a context of
 	what type of service need must be fulfilled.
 	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="sdcsdmldap"></a>Samba Domain with Samba Domain Member Server  Using NSS LDAP</h3></div></div></div><p>
-	<a class="indexterm" name="id2612394"></a>
-	<a class="indexterm" name="id2612400"></a>
-	<a class="indexterm" name="id2612407"></a>
-	<a class="indexterm" name="id2612414"></a>
-	<a class="indexterm" name="id2612423"></a>
-	<a class="indexterm" name="id2612430"></a>
+	<a class="indexterm" name="id376392"></a>
+	<a class="indexterm" name="id376398"></a>
+	<a class="indexterm" name="id376405"></a>
+	<a class="indexterm" name="id376411"></a>
+	<a class="indexterm" name="id376421"></a>
+	<a class="indexterm" name="id376427"></a>
 	In this example, it is assumed that you have Samba PDC/BDC servers. This means you are using
 	an LDAP ldapsam backend. We are adding to the LDAP backend database (directory)
 	containers for use by the IDMAP facility. This makes it possible to have globally consistent
@@ -247,9 +247,9 @@
 	<em class="parameter"><code>idmap gid</code></em> ranges. Where LDAP is used, the mappings can be stored in LDAP
 	so that all domain member servers can use a consistent mapping.
 	</p><p>
-	<a class="indexterm" name="id2612494"></a>
-	<a class="indexterm" name="id2612501"></a>
-	<a class="indexterm" name="id2612508"></a>
+	<a class="indexterm" name="id376482"></a>
+	<a class="indexterm" name="id376489"></a>
+	<a class="indexterm" name="id376496"></a>
 	If your installation is accessed only from clients that are members of your own domain, and all 
 	user accounts are present in a local passdb backend then it is not necessary to run
 	<code class="literal">winbindd</code>. The local passdb backend can be in smbpasswd, tdbsam, or in ldapsam.
@@ -259,19 +259,19 @@
 	<code class="literal">getpwnam()</code> system call. On NSS-enabled systems, the actual POSIX account
 	source can be provided from
 	</p><div class="itemizedlist"><ul type="disc"><li><p>
-		<a class="indexterm" name="id2612545"></a>
-		<a class="indexterm" name="id2612552"></a>
+		<a class="indexterm" name="id376528"></a>
+		<a class="indexterm" name="id376535"></a>
 		Accounts in <code class="filename">/etc/passwd</code> or in <code class="filename">/etc/group</code>.
 		</p></li><li><p>
-		<a class="indexterm" name="id2612575"></a>
-		<a class="indexterm" name="id2612582"></a>
-		<a class="indexterm" name="id2612588"></a>
-		<a class="indexterm" name="id2612595"></a>
-		<a class="indexterm" name="id2612602"></a>
-		<a class="indexterm" name="id2612609"></a>
-		<a class="indexterm" name="id2612616"></a>
-		<a class="indexterm" name="id2612623"></a>
-		<a class="indexterm" name="id2612629"></a>
+		<a class="indexterm" name="id376559"></a>
+		<a class="indexterm" name="id376565"></a>
+		<a class="indexterm" name="id376572"></a>
+		<a class="indexterm" name="id376579"></a>
+		<a class="indexterm" name="id376586"></a>
+		<a class="indexterm" name="id376592"></a>
+		<a class="indexterm" name="id376599"></a>
+		<a class="indexterm" name="id376606"></a>
+		<a class="indexterm" name="id376613"></a>
 		Resolution via NSS. On NSS-enabled systems, there is usually a facility to resolve IDs
 		via multiple methods. The methods typically include <code class="literal">files</code>,
 		<code class="literal">compat</code>, <code class="literal">db</code>, <code class="literal">ldap</code>, 
@@ -283,13 +283,13 @@
 	the user account backend is not shared by any other Samba server  instead, it is
 	used only locally on the Samba domain member server under discussion.
 	</p></div><p>
-	<a class="indexterm" name="id2612709"></a>
+	<a class="indexterm" name="id376687"></a>
 	The diagram in <a class="link" href="unixclients.html#ch9-sambadc" title="Figure 7.2. Samba Domain: Samba Member Server">&#8220;Samba Domain: Samba Member Server&#8221;</a> demonstrates the relationship of Samba and system 
 	components that are involved in the identity resolution process where Samba is used as a domain
 	member server within a Samba domain control network.
 	</p><div class="figure"><a name="ch9-sambadc"></a><p class="title"><b>Figure 7.2. Samba Domain: Samba Member Server</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/chap9-SambaDC.png" width="324" alt="Samba Domain: Samba Member Server"></div></div></div><br class="figure-break"><p>
-	<a class="indexterm" name="id2612771"></a>
-	<a class="indexterm" name="id2612778"></a>
+	<a class="indexterm" name="id376747"></a>
+	<a class="indexterm" name="id376754"></a>
 	In this example configuration, Samba will directly search the LDAP-based passwd backend ldapsam
 	to obtain authentication and user identity information. The IDMAP information is stored in the LDAP
 	backend so that it can be shared by all domain member servers so that every user will have a
@@ -300,11 +300,11 @@
 	The instructions given here apply to the Samba environment shown in <a class="link" href="happy.html" title="Chapter 5. Making Happy Users">&#8220;Making Happy Users&#8221;</a> and <a class="link" href="2000users.html" title="Chapter 6. A Distributed 2000-User Network">&#8220;A Distributed 2000-User Network&#8221;</a>.
 	If the network does not have an LDAP slave server (i.e., <a class="link" href="happy.html" title="Chapter 5. Making Happy Users">&#8220;Making Happy Users&#8221;</a> configuration), 
 	change the target LDAP server from <code class="constant">lapdc</code> to <code class="constant">massive.</code>
-	</p><div class="procedure"><a name="id2612826"></a><p class="title"><b>Procedure 7.1. Configuration of NSS_LDAP-Based Identity Resolution</b></p><ol type="1"><li><p>
+	</p><div class="procedure"><a name="id376795"></a><p class="title"><b>Procedure 7.1. Configuration of NSS_LDAP-Based Identity Resolution</b></p><ol type="1"><li><p>
 		Create the <code class="filename">smb.conf</code> file as shown in <a class="link" href="unixclients.html#ch9-sdmsdc" title="Example 7.1. Samba Domain Member in Samba Domain Using LDAP smb.conf File">&#8220;Samba Domain Member in Samba Domain Using LDAP  smb.conf File&#8221;</a>. Locate
 		this file in the directory <code class="filename">/etc/samba</code>.
 		</p></li><li><p>
-		<a class="indexterm" name="id2612864"></a>
+		<a class="indexterm" name="id376832"></a>
 		Configure the file that will be used by <code class="constant">nss_ldap</code> to
 		locate and communicate with the LDAP server. This file is called <code class="filename">ldap.conf</code>.
 		If your implementation of <code class="constant">nss_ldap</code> is consistent with
@@ -326,8 +326,8 @@
 		Configure the NSS control file so it matches the one shown in
 		<a class="link" href="unixclients.html#ch9-sdmnss" title="Example 7.4. NSS using LDAP for Identity Resolution File: /etc/nsswitch.conf">&#8220;NSS using LDAP for Identity Resolution  File: /etc/nsswitch.conf&#8221;</a>.
 		</p></li><li><p>
-		<a class="indexterm" name="id2612951"></a>
-		<a class="indexterm" name="id2612958"></a>
+		<a class="indexterm" name="id376912"></a>
+		<a class="indexterm" name="id376919"></a>
 		Before proceeding to configure Samba, validate the operation of the NSS identity 
 		resolution via LDAP by executing:
 </p><pre class="screen">
@@ -362,9 +362,9 @@
 PIOps:x:1002:
 sammy:x:4321:
 </pre><p>
-		<a class="indexterm" name="id2613022"></a>
-		<a class="indexterm" name="id2613029"></a>
-		<a class="indexterm" name="id2613036"></a>
+		<a class="indexterm" name="id376966"></a>
+		<a class="indexterm" name="id376973"></a>
+		<a class="indexterm" name="id376980"></a>
 		This shows that all is working as it should be. Notice that in the LDAP database
 		the users' primary and secondary group memberships are identical. It is not
 		necessary to add secondary group memberships (in the group database) if the
@@ -374,7 +374,7 @@
 		conditions. It is intended that these limitations with winbind will be resolved soon
 		after Samba-3.0.20 has been released.
 		</p></li><li><p>
-		<a class="indexterm" name="id2613060"></a>
+		<a class="indexterm" name="id376998"></a>
 		The LDAP directory must have a container object for IDMAP data. There are several ways you can
 		check that your LDAP database is able to receive IDMAP information. One of the simplest is to
 		execute:
@@ -383,7 +383,7 @@
 dn: ou=Idmap,dc=abmas,dc=biz
 ou: idmap
 </pre><p>
-		<a class="indexterm" name="id2613083"></a>
+		<a class="indexterm" name="id377019"></a>
 		If the execution of this command does not return IDMAP entries, you need to create an LDIF
 		template file (see <a class="link" href="unixclients.html#ch9-ldifadd" title="Example 7.2. LDIF IDMAP Add-On Load File File: /etc/openldap/idmap.LDIF">&#8220;LDIF IDMAP Add-On Load File  File: /etc/openldap/idmap.LDIF&#8221;</a>). You can add the required entries using
 		the following command:
@@ -399,8 +399,8 @@
 <code class="prompt">root# </code> smbpasswd -w not24get
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2613147"></a>
-		<a class="indexterm" name="id2613158"></a>
+		<a class="indexterm" name="id377078"></a>
+		<a class="indexterm" name="id377089"></a>
 		The system is ready to join the domain. Execute the following:
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc join -U root%not24get
@@ -418,10 +418,10 @@
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc join -S 'pdc-name' -U administrator%password -d 5
 </pre><p>
-		<a class="indexterm" name="id2613230"></a>
-		<a class="indexterm" name="id2613237"></a>
-		<a class="indexterm" name="id2613244"></a>
-		<a class="indexterm" name="id2613251"></a>
+		<a class="indexterm" name="id377156"></a>
+		<a class="indexterm" name="id377163"></a>
+		<a class="indexterm" name="id377169"></a>
+		<a class="indexterm" name="id377176"></a>
 		Note: Use "root" for UNIX/Linux and Samba, use "Administrator" for Windows NT4/200X. If the cause of
 		the failure appears to be related to a rejected or failed NT_SESSION_SETUP*  or an error message that
 		says NT_STATUS_ACCESS_DENIED immediately check the Windows registry setting that controls the
@@ -449,7 +449,7 @@
 Join to 'MEGANET2' failed.
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2613312"></a>
+		<a class="indexterm" name="id377228"></a>
 		Just joining the domain is not quite enough; you must now provide a privileged set
 		of credentials through which <code class="literal">winbindd</code> can interact with the 
 		domain servers. Execute the following to implant the necessary credentials:
@@ -460,7 +460,7 @@
 		</p></li><li><p>
 		You may now start Samba in the usual manner, and your Samba domain member server
 		is ready for use. Just add shares as required.
-		</p></li></ol></div><div class="example"><a name="ch9-sdmsdc"></a><p class="title"><b>Example 7.1. Samba Domain Member in Samba Domain Using LDAP  <code class="filename">smb.conf</code> File</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2613390"></a><em class="parameter"><code>unix charset = LOCALE</code></em></td></tr><tr><td><a class="indexterm" name="id2613402"></a><em class="parameter"><code>workgroup = MEGANET2</code></em></td></tr><tr><td><a class="indexterm" name="id2613414"></a><em class="parameter"><code>security = DOMAIN</code></em></td></tr><tr><td><a class="indexterm" name="id2613425"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id2613437"></a><em class="parameter"><code>log level = 10</code></em></td></tr><tr><td><a class="indexterm" name="id2613449"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id2613460"></a><em class="parameter"><code>log file = /var/log/samba/%m</code></em></td></tr><tr><td><a class="indexterm" name="id2613472"></a><em class="parameter"><code>max log size = 50</code></em></td></tr><tr><td><a class="indexterm" name="id2613484"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id2613496"></a><em class="parameter"><code>name resolve order = wins bcast hosts</code></em></td></tr><tr><td><a class="indexterm" name="id2613508"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id2613520"></a><em class="parameter"><code>wins server = 192.168.2.1</code></em></td></tr><tr><td><a class="indexterm" name="id2613531"></a><em class="parameter"><code>ldap suffix = dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id2613543"></a><em class="parameter"><code>ldap machine suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2613555"></a><em class="parameter"><code>ldap user suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2613567"></a><em class="parameter"><code>ldap group suffix = ou=Groups</code></em></td></tr><tr><td><a class="indexterm" name="id2613579"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr><tr><td><a class="indexterm" name="id2613591"></a><em class="parameter"><code>ldap admin dn = cn=Manager,dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id2613603"></a><em class="parameter"><code>idmap backend = ldap:ldap://lapdc.abmas.biz</code></em></td></tr><tr><td><a class="indexterm" name="id2613615"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2613627"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2613639"></a><em class="parameter"><code>winbind trusted domains only = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2613651"></a><em class="parameter"><code>printer admin = root</code></em></td></tr><tr><td><a class="indexterm" name="id2613663"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id2613684"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id2613695"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id2613707"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2613718"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2613739"></a><em class="parameter"><code>comment = SMB Print Spool</code></em></td></tr><tr><td><a class="indexterm" name="id2613751"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2613762"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2613774"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2613786"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[print$]</code></em></td></tr><tr><td><a class="indexterm" name="id2613806"></a><em class="parameter"><code>comment = Printer Drivers</code></em></td></tr><tr><td><a class="indexterm" name="id2613818"></a><em class="parameter"><code>path = /var/lib/samba/drivers</code></em></td></tr><tr><td><a class="indexterm" name="id2613830"></a><em class="parameter"><code>admin users = root, Administrator</code></em></td></tr><tr><td><a class="indexterm" name="id2613842"></a><em class="parameter"><code>write list = root</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch9-ldifadd"></a><p class="title"><b>Example 7.2. LDIF IDMAP Add-On Load File  File: /etc/openldap/idmap.LDIF</b></p><div class="example-contents"><pre class="screen">
+		</p></li></ol></div><div class="example"><a name="ch9-sdmsdc"></a><p class="title"><b>Example 7.1. Samba Domain Member in Samba Domain Using LDAP  <code class="filename">smb.conf</code> File</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id377301"></a><em class="parameter"><code>unix charset = LOCALE</code></em></td></tr><tr><td><a class="indexterm" name="id377313"></a><em class="parameter"><code>workgroup = MEGANET2</code></em></td></tr><tr><td><a class="indexterm" name="id377324"></a><em class="parameter"><code>security = DOMAIN</code></em></td></tr><tr><td><a class="indexterm" name="id377336"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id377347"></a><em class="parameter"><code>log level = 10</code></em></td></tr><tr><td><a class="indexterm" name="id377359"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id377370"></a><em class="parameter"><code>log file = /var/log/samba/%m</code></em></td></tr><tr><td><a class="indexterm" name="id377382"></a><em class="parameter"><code>max log size = 50</code></em></td></tr><tr><td><a class="indexterm" name="id377393"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id377405"></a><em class="parameter"><code>name resolve order = wins bcast hosts</code></em></td></tr><tr><td><a class="indexterm" name="id377416"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id377428"></a><em class="parameter"><code>wins server = 192.168.2.1</code></em></td></tr><tr><td><a class="indexterm" name="id377439"></a><em class="parameter"><code>ldap suffix = dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id377451"></a><em class="parameter"><code>ldap machine suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id377463"></a><em class="parameter"><code>ldap user suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id377474"></a><em class="parameter"><code>ldap group suffix = ou=Groups</code></em></td></tr><tr><td><a class="indexterm" name="id377486"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr><tr><td><a class="indexterm" name="id377497"></a><em class="parameter"><code>ldap admin dn = cn=Manager,dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id377509"></a><em class="parameter"><code>idmap backend = ldap:ldap://lapdc.abmas.biz</code></em></td></tr><tr><td><a class="indexterm" name="id377521"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id377532"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id377544"></a><em class="parameter"><code>winbind trusted domains only = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id377556"></a><em class="parameter"><code>printer admin = root</code></em></td></tr><tr><td><a class="indexterm" name="id377567"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id377587"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id377599"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id377610"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id377622"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id377642"></a><em class="parameter"><code>comment = SMB Print Spool</code></em></td></tr><tr><td><a class="indexterm" name="id377654"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id377665"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id377677"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id377688"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[print$]</code></em></td></tr><tr><td><a class="indexterm" name="id377709"></a><em class="parameter"><code>comment = Printer Drivers</code></em></td></tr><tr><td><a class="indexterm" name="id377720"></a><em class="parameter"><code>path = /var/lib/samba/drivers</code></em></td></tr><tr><td><a class="indexterm" name="id377732"></a><em class="parameter"><code>admin users = root, Administrator</code></em></td></tr><tr><td><a class="indexterm" name="id377744"></a><em class="parameter"><code>write list = root</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="ch9-ldifadd"></a><p class="title"><b>Example 7.2. LDIF IDMAP Add-On Load File  File: /etc/openldap/idmap.LDIF</b></p><div class="example-contents"><pre class="screen">
 dn: ou=Idmap,dc=abmas,dc=biz
 objectClass: organizationalUnit
 ou: idmap
@@ -507,18 +507,18 @@
 		</p></li><li><p>
 		The Samba domain member server must be part of a Windows NT4 Domain, or a Samba Domain.
 		</p></li></ul></div><p>
-	<a class="indexterm" name="id2613973"></a>
-	<a class="indexterm" name="id2613980"></a>
-	<a class="indexterm" name="id2613987"></a>
+	<a class="indexterm" name="id377863"></a>
+	<a class="indexterm" name="id377870"></a>
+	<a class="indexterm" name="id377877"></a>
 	Later in the chapter, you can see how to configure a Samba domain member server for a Windows ADS domain.
 	Right now your objective is to configure a Samba server that can be a member of a Windows NT4-style
 	domain and/or does not use LDAP.
 	</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-	<a class="indexterm" name="id2614002"></a>
+	<a class="indexterm" name="id377890"></a>
 	If you use <code class="literal">winbind</code> for identity resolution, make sure that there are no
 	duplicate accounts.
 	</p><p>
-	<a class="indexterm" name="id2614020"></a>
+	<a class="indexterm" name="id377907"></a>
 	For example, do not have more than one account that has UID=0 in the password database. If there 
 	is an account called <code class="constant">root</code> in the <code class="filename">/etc/passwd</code> database, 
 	it is okay to have an account called <code class="constant">root</code> in the LDAP ldapsam or in the 
@@ -526,32 +526,32 @@
 	break. This means that the <code class="constant">Administrator</code> account must be called 
 	<code class="constant">root</code>.
 	</p><p>
-	<a class="indexterm" name="id2614056"></a>
-	<a class="indexterm" name="id2614063"></a>
-	<a class="indexterm" name="id2614070"></a>
+	<a class="indexterm" name="id377940"></a>
+	<a class="indexterm" name="id377947"></a>
+	<a class="indexterm" name="id377954"></a>
 	Winbind will break if there is an account in <code class="filename">/etc/passwd</code> that has 
 	the same UID as an account that is in LDAP ldapsam (or in tdbsam) but that differs in name only.
 	</p></div><p>
-	<a class="indexterm" name="id2614088"></a>
-	<a class="indexterm" name="id2614095"></a>
-	<a class="indexterm" name="id2614102"></a>
-	<a class="indexterm" name="id2614109"></a>
-	<a class="indexterm" name="id2614118"></a>
+	<a class="indexterm" name="id377971"></a>
+	<a class="indexterm" name="id377978"></a>
+	<a class="indexterm" name="id377985"></a>
+	<a class="indexterm" name="id377991"></a>
+	<a class="indexterm" name="id378001"></a>
 	The following configuration uses CIFS/SMB protocols alone to obtain user and group credentials.
 	The winbind information is locally cached in the <code class="filename">winbindd_cache.tdb winbindd_idmap.tdb</code>
 	files. This provides considerable performance benefits compared with the LDAP solution, particularly
 	where the LDAP lookups must traverse WAN links. You may examine the contents of these
 	files using the tool <code class="literal">tdbdump</code>, though you may have to build this from the Samba
 	source code if it has not been supplied as part of a binary package distribution that you may be using.
-	</p><div class="procedure"><a name="id2614147"></a><p class="title"><b>Procedure 7.2. Configuration of Winbind-Based Identity Resolution</b></p><ol type="1"><li><p>
+	</p><div class="procedure"><a name="id378025"></a><p class="title"><b>Procedure 7.2. Configuration of Winbind-Based Identity Resolution</b></p><ol type="1"><li><p>
 		Using your favorite text editor, create the <code class="filename">smb.conf</code> file so it has the contents
 		shown in <a class="link" href="unixclients.html#ch0-NT4DSDM" title="Example 7.5. Samba Domain Member Server Using Winbind smb.conf File for NT4 Domain">&#8220;Samba Domain Member Server Using Winbind smb.conf File for NT4 Domain&#8221;</a>.
 		</p></li><li><p>
-		<a class="indexterm" name="id2614180"></a>
+		<a class="indexterm" name="id378056"></a>
 		Edit the <code class="filename">/etc/nsswitch.conf</code> so it has the entries shown in
 		<a class="link" href="unixclients.html#ch9-sdmnss" title="Example 7.4. NSS using LDAP for Identity Resolution File: /etc/nsswitch.conf">&#8220;NSS using LDAP for Identity Resolution  File: /etc/nsswitch.conf&#8221;</a>.
 		</p></li><li><p>
-		<a class="indexterm" name="id2614206"></a>
+		<a class="indexterm" name="id378081"></a>
 		The system is ready to join the domain. Execute the following:
 </p><pre class="screen">
 net rpc join -U root%not2g4et
@@ -560,8 +560,8 @@
 		This indicates that the domain join succeed.
 
 		</p></li><li><p>
-		<a class="indexterm" name="id2614232"></a>
-		<a class="indexterm" name="id2614239"></a>
+		<a class="indexterm" name="id378106"></a>
+		<a class="indexterm" name="id378113"></a>
 		Validate operation of <code class="literal">winbind</code> using the <code class="literal">wbinfo</code>
 		tool as follows:
 </p><pre class="screen">
@@ -588,9 +588,9 @@
 </pre><p>
 		This shows that domain groups have been correctly obtained also.
 		</p></li><li><p>
-		<a class="indexterm" name="id2614295"></a>
-		<a class="indexterm" name="id2614302"></a>
-		<a class="indexterm" name="id2614309"></a>
+		<a class="indexterm" name="id378165"></a>
+		<a class="indexterm" name="id378171"></a>
+		<a class="indexterm" name="id378178"></a>
 		The next step verifies that NSS is able to obtain this information
 		correctly from <code class="literal">winbind</code> also.
 </p><pre class="screen">
@@ -631,7 +631,7 @@
 </pre><p>
 		</p></li><li><p>
 		The Samba member server of a Windows NT4 domain is ready for use.
-		</p></li></ol></div><div class="example"><a name="ch0-NT4DSDM"></a><p class="title"><b>Example 7.5. Samba Domain Member Server Using Winbind <code class="filename">smb.conf</code> File for NT4 Domain</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2614420"></a><em class="parameter"><code>unix charset = LOCALE</code></em></td></tr><tr><td><a class="indexterm" name="id2614431"></a><em class="parameter"><code>workgroup = MEGANET2</code></em></td></tr><tr><td><a class="indexterm" name="id2614443"></a><em class="parameter"><code>security = DOMAIN</code></em></td></tr><tr><td><a class="indexterm" name="id2614455"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id2614467"></a><em class="parameter"><code>log level = 1</code></em></td></tr><tr><td><a class="indexterm" name="id2614478"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id2614490"></a><em class="parameter"><code>log file = /var/log/samba/%m</code></em></td></tr><tr><td><a class="indexterm" name="id2614502"></a><em class="parameter"><code>max log size = 0</code></em></td></tr><tr><td><a class="indexterm" name="id2614513"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id2614525"></a><em class="parameter"><code>name resolve order = wins bcast hosts</code></em></td></tr><tr><td><a class="indexterm" name="id2614537"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id2614549"></a><em class="parameter"><code>wins server = 192.168.2.1</code></em></td></tr><tr><td><a class="indexterm" name="id2614561"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2614572"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2614584"></a><em class="parameter"><code>template primary group = "Domain Users"</code></em></td></tr><tr><td><a class="indexterm" name="id2614596"></a><em class="parameter"><code>template shell = /bin/bash</code></em></td></tr><tr><td><a class="indexterm" name="id2614608"></a><em class="parameter"><code>winbind separator = +</code></em></td></tr><tr><td><a class="indexterm" name="id2614620"></a><em class="parameter"><code>printer admin = root</code></em></td></tr><tr><td><a class="indexterm" name="id2614632"></a><em class="parameter"><code>hosts allow = 192.168.2., 192.168.3., 127.</code></em></td></tr><tr><td><a class="indexterm" name="id2614644"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id2614665"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id2614676"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id2614688"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2614700"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2614720"></a><em class="parameter"><code>comment = SMB Print Spool</code></em></td></tr><tr><td><a class="indexterm" name="id2614732"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2614744"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2614755"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2614767"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[print$]</code></em></td></tr><tr><td><a class="indexterm" name="id2614787"></a><em class="parameter"><code>comment = Printer Drivers</code></em></td></tr><tr><td><a class="indexterm" name="id2614799"></a><em class="parameter"><code>path = /var/lib/samba/drivers</code></em></td></tr><tr><td><a class="indexterm" name="id2614811"></a><em class="parameter"><code>admin users = root, Administrator</code></em></td></tr><tr><td><a class="indexterm" name="id2614823"></a><em class="parameter"><code>write list = root</code></em></td></tr></table></div></div><br class="example-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="dcwonss"></a>NT4/Samba Domain with Samba Domain Member Server without NSS Support</h3></div></div></div><p>
+		</p></li></ol></div><div class="example"><a name="ch0-NT4DSDM"></a><p class="title"><b>Example 7.5. Samba Domain Member Server Using Winbind <code class="filename">smb.conf</code> File for NT4 Domain</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id378274"></a><em class="parameter"><code>unix charset = LOCALE</code></em></td></tr><tr><td><a class="indexterm" name="id378286"></a><em class="parameter"><code>workgroup = MEGANET2</code></em></td></tr><tr><td><a class="indexterm" name="id378297"></a><em class="parameter"><code>security = DOMAIN</code></em></td></tr><tr><td><a class="indexterm" name="id378309"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id378320"></a><em class="parameter"><code>log level = 1</code></em></td></tr><tr><td><a class="indexterm" name="id378332"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id378343"></a><em class="parameter"><code>log file = /var/log/samba/%m</code></em></td></tr><tr><td><a class="indexterm" name="id378355"></a><em class="parameter"><code>max log size = 0</code></em></td></tr><tr><td><a class="indexterm" name="id378366"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id378378"></a><em class="parameter"><code>name resolve order = wins bcast hosts</code></em></td></tr><tr><td><a class="indexterm" name="id378389"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id378401"></a><em class="parameter"><code>wins server = 192.168.2.1</code></em></td></tr><tr><td><a class="indexterm" name="id378412"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id378424"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id378435"></a><em class="parameter"><code>template primary group = "Domain Users"</code></em></td></tr><tr><td><a class="indexterm" name="id378447"></a><em class="parameter"><code>template shell = /bin/bash</code></em></td></tr><tr><td><a class="indexterm" name="id378459"></a><em class="parameter"><code>winbind separator = +</code></em></td></tr><tr><td><a class="indexterm" name="id378470"></a><em class="parameter"><code>printer admin = root</code></em></td></tr><tr><td><a class="indexterm" name="id378482"></a><em class="parameter"><code>hosts allow = 192.168.2., 192.168.3., 127.</code></em></td></tr><tr><td><a class="indexterm" name="id378493"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id378514"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id378525"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id378537"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id378548"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id378569"></a><em class="parameter"><code>comment = SMB Print Spool</code></em></td></tr><tr><td><a class="indexterm" name="id378580"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id378592"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id378603"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id378615"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[print$]</code></em></td></tr><tr><td><a class="indexterm" name="id378635"></a><em class="parameter"><code>comment = Printer Drivers</code></em></td></tr><tr><td><a class="indexterm" name="id378647"></a><em class="parameter"><code>path = /var/lib/samba/drivers</code></em></td></tr><tr><td><a class="indexterm" name="id378658"></a><em class="parameter"><code>admin users = root, Administrator</code></em></td></tr><tr><td><a class="indexterm" name="id378670"></a><em class="parameter"><code>write list = root</code></em></td></tr></table></div></div><br class="example-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="dcwonss"></a>NT4/Samba Domain with Samba Domain Member Server without NSS Support</h3></div></div></div><p>
 	No matter how many UNIX/Linux administrators there may be who believe that a UNIX operating
 	system that does not have NSS and PAM support to be outdated, the fact is there
 	are still many such systems in use today. Samba can be used without NSS support, but this
@@ -642,10 +642,10 @@
 	to the Samba server will cause the look-up of the incoming username. If the account
 	is found, it is used. If the account is not found, one will be automatically created
 	on the local machine so that it can then be used for all access controls.
-	</p><div class="procedure"><a name="id2614866"></a><p class="title"><b>Procedure 7.3. Configuration Using Local Accounts Only</b></p><ol type="1"><li><p>
+	</p><div class="procedure"><a name="id378706"></a><p class="title"><b>Procedure 7.3. Configuration Using Local Accounts Only</b></p><ol type="1"><li><p>
 		Using your favorite text editor, create the <code class="filename">smb.conf</code> file so it has the contents
 		shown in <a class="link" href="unixclients.html#ch0-NT4DSCM" title="Example 7.6. Samba Domain Member Server Using Local Accounts smb.conf File for NT4 Domain">&#8220;Samba Domain Member Server Using Local Accounts smb.conf File for NT4 Domain&#8221;</a>.
-		</p></li><li><p><a class="indexterm" name="id2614898"></a>
+		</p></li><li><p><a class="indexterm" name="id378737"></a>
 		The system is ready to join the domain. Execute the following:
 </p><pre class="screen">
 net rpc join -U root%not24get
@@ -656,10 +656,10 @@
 		Be sure to run all three Samba daemons: <code class="literal">smbd</code>, <code class="literal">nmbd</code>, <code class="literal">winbindd</code>.
 		</p></li><li><p>
 		The Samba member server of a Windows NT4 domain is ready for use.
-		</p></li></ol></div><div class="example"><a name="ch0-NT4DSCM"></a><p class="title"><b>Example 7.6. Samba Domain Member Server Using Local Accounts <code class="filename">smb.conf</code> File for NT4 Domain</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2614987"></a><em class="parameter"><code>unix charset = LOCALE</code></em></td></tr><tr><td><a class="indexterm" name="id2614999"></a><em class="parameter"><code>workgroup = MEGANET3</code></em></td></tr><tr><td><a class="indexterm" name="id2615011"></a><em class="parameter"><code>netbios name = BSDBOX</code></em></td></tr><tr><td><a class="indexterm" name="id2615022"></a><em class="parameter"><code>security = DOMAIN</code></em></td></tr><tr><td><a class="indexterm" name="id2615034"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id2615046"></a><em class="parameter"><code>log level = 1</code></em></td></tr><tr><td><a class="indexterm" name="id2615058"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id2615069"></a><em class="parameter"><code>add user script = /usr/sbin/useradd -m '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2615081"></a><em class="parameter"><code>add machine script = /usr/sbin/useradd -M '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2615094"></a><em class="parameter"><code>add group script = /usr/sbin/groupadd '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id2615106"></a><em class="parameter"><code>log file = /var/log/samba/%m</code></em></td></tr><tr><td><a class="indexterm" name="id2615118"></a><em class="parameter"><code>max log size = 0</code></em></td></tr><tr><td><a class="indexterm" name="id2615129"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id2615141"></a><em class="parameter"><code>name resolve order = wins bcast hosts</code></em></td></tr><tr><td><a class="indexterm" name="id2615153"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id2615165"></a><em class="parameter"><code>wins server = 192.168.2.1</code></em></td></tr><tr><td><a class="indexterm" name="id2615177"></a><em class="parameter"><code>printer admin = root</code></em></td></tr><tr><td><a class="indexterm" name="id2615188"></a><em class="parameter"><code>hosts allow = 192.168.2., 192.168.3., 127.</code></em></td></tr><tr><td><a class="indexterm" name="id2615200"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id2615221"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id2615233"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id2615244"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2615256"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2615276"></a><em class="parameter"><code>comment = SMB Print Spool</code></em></td></tr><tr><td><a class="indexterm" name="id2615288"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2615300"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2615312"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2615323"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[print$]</code></em></td></tr><tr><td><a class="indexterm" name="id2615344"></a><em class="parameter"><code>comment = Printer Drivers</code></em></td></tr><tr><td><a class="indexterm" name="id2615355"></a><em class="parameter"><code>path = /var/lib/samba/drivers</code></em></td></tr><tr><td><a class="indexterm" name="id2615367"></a><em class="parameter"><code>admin users = root, Administrator</code></em></td></tr><tr><td><a class="indexterm" name="id2615379"></a><em class="parameter"><code>write list = root</code></em></td></tr></table></div></div><br class="example-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="adssdm"></a>Active Directory Domain with Samba Domain Member Server</h3></div></div></div><p>
-	<a class="indexterm" name="id2615405"></a>
-	<a class="indexterm" name="id2615414"></a>
-	<a class="indexterm" name="id2615421"></a>
+		</p></li></ol></div><div class="example"><a name="ch0-NT4DSCM"></a><p class="title"><b>Example 7.6. Samba Domain Member Server Using Local Accounts <code class="filename">smb.conf</code> File for NT4 Domain</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id378822"></a><em class="parameter"><code>unix charset = LOCALE</code></em></td></tr><tr><td><a class="indexterm" name="id378834"></a><em class="parameter"><code>workgroup = MEGANET3</code></em></td></tr><tr><td><a class="indexterm" name="id378845"></a><em class="parameter"><code>netbios name = BSDBOX</code></em></td></tr><tr><td><a class="indexterm" name="id378857"></a><em class="parameter"><code>security = DOMAIN</code></em></td></tr><tr><td><a class="indexterm" name="id378868"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id378880"></a><em class="parameter"><code>log level = 1</code></em></td></tr><tr><td><a class="indexterm" name="id378891"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id378903"></a><em class="parameter"><code>add user script = /usr/sbin/useradd -m '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id378914"></a><em class="parameter"><code>add machine script = /usr/sbin/useradd -M '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id378926"></a><em class="parameter"><code>add group script = /usr/sbin/groupadd '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id378938"></a><em class="parameter"><code>log file = /var/log/samba/%m</code></em></td></tr><tr><td><a class="indexterm" name="id378950"></a><em class="parameter"><code>max log size = 0</code></em></td></tr><tr><td><a class="indexterm" name="id378961"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id378972"></a><em class="parameter"><code>name resolve order = wins bcast hosts</code></em></td></tr><tr><td><a class="indexterm" name="id378984"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id378996"></a><em class="parameter"><code>wins server = 192.168.2.1</code></em></td></tr><tr><td><a class="indexterm" name="id379007"></a><em class="parameter"><code>printer admin = root</code></em></td></tr><tr><td><a class="indexterm" name="id379019"></a><em class="parameter"><code>hosts allow = 192.168.2., 192.168.3., 127.</code></em></td></tr><tr><td><a class="indexterm" name="id379030"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id379051"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id379062"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id379074"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id379085"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id379106"></a><em class="parameter"><code>comment = SMB Print Spool</code></em></td></tr><tr><td><a class="indexterm" name="id379117"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id379129"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id379140"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id379152"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[print$]</code></em></td></tr><tr><td><a class="indexterm" name="id379172"></a><em class="parameter"><code>comment = Printer Drivers</code></em></td></tr><tr><td><a class="indexterm" name="id379184"></a><em class="parameter"><code>path = /var/lib/samba/drivers</code></em></td></tr><tr><td><a class="indexterm" name="id379195"></a><em class="parameter"><code>admin users = root, Administrator</code></em></td></tr><tr><td><a class="indexterm" name="id379207"></a><em class="parameter"><code>write list = root</code></em></td></tr></table></div></div><br class="example-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="adssdm"></a>Active Directory Domain with Samba Domain Member Server</h3></div></div></div><p>
+	<a class="indexterm" name="id379232"></a>
+	<a class="indexterm" name="id379241"></a>
+	<a class="indexterm" name="id379248"></a>
 	One of the much-sought-after features new to Samba-3 is the ability to join an Active Directory
 	domain using Kerberos protocols. This makes it possible to operate an entire Windows network
 	without the need to run NetBIOS over TCP/IP and permits more secure networking in general. An
@@ -667,10 +667,10 @@
 	later book may explore the intricacies of the NetBIOS-less operation that Samba-3 can participate
 	in. For now, we simply focus on how a Samba-3 server can be made a domain member server.
 	</p><p>
-	<a class="indexterm" name="id2615443"></a>
-	<a class="indexterm" name="id2615450"></a>
-	<a class="indexterm" name="id2615456"></a>
-	<a class="indexterm" name="id2615463"></a>
+	<a class="indexterm" name="id379265"></a>
+	<a class="indexterm" name="id379272"></a>
+	<a class="indexterm" name="id379278"></a>
+	<a class="indexterm" name="id379285"></a>
 	The diagram in <a class="link" href="unixclients.html#ch9-adsdc" title="Figure 7.3. Active Directory Domain: Samba Member Server">&#8220;Active Directory Domain: Samba Member Server&#8221;</a> demonstrates how Samba-3 interfaces with
 	Microsoft Active Directory components. It should be noted that if Microsoft Windows Services
 	for UNIX (SFU) has been installed and correctly configured, it is possible to use client LDAP
@@ -694,8 +694,8 @@
 	name of the server is <code class="constant">W2K3S</code>. In ADS realm terms, the domain controller
 	is known as <code class="constant">w2k3s.london.abmas.biz</code>. In NetBIOS nomenclature, the
 	domain name is <code class="constant">LONDON</code> and the server name is <code class="constant">W2K3S</code>.
-	</p><div class="figure"><a name="ch9-adsdc"></a><p class="title"><b>Figure 7.3. Active Directory Domain: Samba Member Server</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/chap9-ADSDC.png" width="324" alt="Active Directory Domain: Samba Member Server"></div></div></div><br class="figure-break"><div class="procedure"><a name="id2615577"></a><p class="title"><b>Procedure 7.4. Joining a Samba Server as an ADS Domain Member</b></p><ol type="1"><li><p>
-		<a class="indexterm" name="id2615588"></a>
+	</p><div class="figure"><a name="ch9-adsdc"></a><p class="title"><b>Figure 7.3. Active Directory Domain: Samba Member Server</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/chap9-ADSDC.png" width="324" alt="Active Directory Domain: Samba Member Server"></div></div></div><br class="figure-break"><div class="procedure"><a name="id379385"></a><p class="title"><b>Procedure 7.4. Joining a Samba Server as an ADS Domain Member</b></p><ol type="1"><li><p>
+		<a class="indexterm" name="id379396"></a>
 		Before you try to use Samba-3, you want to know for certain that your executables have
 		support for Kerberos and for LDAP. Execute the following to identify whether or
 		not this build is perhaps suitable for use:
@@ -762,15 +762,15 @@
 		This does look promising; <code class="literal">smbd</code> has been built with Kerberos and LDAP
 		support. You are relieved to know that it is safe to progress.
 		</p></li><li><p>
-		<a class="indexterm" name="id2615688"></a>
-		<a class="indexterm" name="id2615697"></a>
-		<a class="indexterm" name="id2615704"></a>
-		<a class="indexterm" name="id2615711"></a>
-		<a class="indexterm" name="id2615720"></a>
-		<a class="indexterm" name="id2615729"></a>
-		<a class="indexterm" name="id2615736"></a>
-		<a class="indexterm" name="id2615743"></a>
-		<a class="indexterm" name="id2615750"></a>
+		<a class="indexterm" name="id379478"></a>
+		<a class="indexterm" name="id379487"></a>
+		<a class="indexterm" name="id379494"></a>
+		<a class="indexterm" name="id379501"></a>
+		<a class="indexterm" name="id379510"></a>
+		<a class="indexterm" name="id379519"></a>
+		<a class="indexterm" name="id379526"></a>
+		<a class="indexterm" name="id379533"></a>
+		<a class="indexterm" name="id379540"></a>
 		The next step is to identify which version of the Kerberos libraries have been used.
 		In order to permit Samba-3 to interoperate with Windows 2003 Active Directory, it is
 		essential that it has been linked with either MIT Kerberos version 1.3.1 or later,
@@ -798,7 +798,7 @@
 		</p></li><li><p>
 		Edit or create the NSS control file so it has the contents shown in <a class="link" href="unixclients.html#ch9-sdmnss" title="Example 7.4. NSS using LDAP for Identity Resolution File: /etc/nsswitch.conf">&#8220;NSS using LDAP for Identity Resolution  File: /etc/nsswitch.conf&#8221;</a>.
 		</p></li><li><p>
-		<a class="indexterm" name="id2615851"></a>
+		<a class="indexterm" name="id379632"></a>
 		Delete the file <code class="filename">/etc/samba/secrets.tdb</code> if it exists. Of course, you
 		do keep a backup, don't you?
 		</p></li><li><p>
@@ -809,7 +809,7 @@
 <code class="prompt">root# </code> rm /var/lib/samba/*tdb
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2615895"></a>
+		<a class="indexterm" name="id379672"></a>
 		Validate your <code class="filename">smb.conf</code> file using <code class="literal">testparm</code> (as you have
 		done previously). Correct all errors reported before proceeding. The command you
 		execute is:
@@ -819,8 +819,8 @@
 		Now that you are satisfied that your Samba server is ready to join the Windows
 		ADS domain, let's move on.
 		</p></li><li><p>
-		<a class="indexterm" name="id2615937"></a>
-		<a class="indexterm" name="id2615948"></a>
+		<a class="indexterm" name="id379711"></a>
+		<a class="indexterm" name="id379722"></a>
 		This is a good time to double-check everything and then execute the following
 		command when everything you have done has checked out okay:
 </p><pre class="screen">
@@ -831,17 +831,17 @@
 		You have successfully made your Samba-3 server a member of the ADS domain
 		using Kerberos protocols.
 		</p><p>
-		<a class="indexterm" name="id2615976"></a>
-		<a class="indexterm" name="id2615982"></a>
+		<a class="indexterm" name="id379746"></a>
+		<a class="indexterm" name="id379753"></a>
 		In the event that you receive no output messages, a silent return means that the
 		domain join failed. You should use <code class="literal">ethereal</code> to identify what
 		may be failing. Common causes of a failed join include:
 
 		</p><div class="itemizedlist"><ul type="disc"><li><p>
-			<a class="indexterm" name="id2616004"></a>
+			<a class="indexterm" name="id379773"></a>
 			Defective or misconfigured DNS name resolution.
 			</p></li><li><p>
-			<a class="indexterm" name="id2616019"></a>
+			<a class="indexterm" name="id379787"></a>
 			Restrictive security settings on the Windows 200x ADS domain controller
 			preventing needed communications protocols. You can check this by searching
 			the Windows Server 200x Event Viewer.
@@ -853,16 +853,16 @@
 			functionality.
 			</p></li></ul></div><p>
 
-		<a class="indexterm" name="id2616050"></a>
-		<a class="indexterm" name="id2616061"></a>
-		<a class="indexterm" name="id2616068"></a>
+		<a class="indexterm" name="id379814"></a>
+		<a class="indexterm" name="id379825"></a>
+		<a class="indexterm" name="id379832"></a>
 		In any case, never execute the <code class="literal">net rpc join</code> command in an attempt
 		to join the Samba server to the domain, unless you wish not to use the Kerberos
 		security protocols. Use of the older RPC-based domain join facility requires that
 		Windows Server 200x ADS has been configured appropriately for mixed mode operation.
 		</p></li><li><p>
-		<a class="indexterm" name="id2616092"></a>
-		<a class="indexterm" name="id2616099"></a>
+		<a class="indexterm" name="id379854"></a>
+		<a class="indexterm" name="id379861"></a>
 		If the <code class="literal">tdbdump</code> is installed on your system (not essential),
 		you can look inside the <code class="filename">/etc/samba/secrets.tdb</code> file. If
 		you wish to do this, execute:
@@ -893,7 +893,7 @@
 		It is now time to start Samba in the usual way (as has been done many time before
 		in this book).	
 		</p></li><li><p>
-		<a class="indexterm" name="id2616156"></a>
+		<a class="indexterm" name="id379911"></a>
 		This is a good time to verify that everything is working. First, check that
 		winbind is able to obtain the list of users and groups from the ADS domain controller.
 		Execute the following:
@@ -919,7 +919,7 @@
 LONDON+DnsUpdateProxy
 </pre><p>
 		Excellent. That worked also, as expected.
-		</p></li><li><p><a class="indexterm" name="id2616203"></a>
+		</p></li><li><p><a class="indexterm" name="id379952"></a>
 		Now repeat this via NSS to validate that full identity resolution is
 		functional as required. Execute:
 </p><pre class="screen">
@@ -952,9 +952,9 @@
 </pre><p>
 		This is very pleasing. Everything works as expected.
 		</p></li><li><p>
-		<a class="indexterm" name="id2616260"></a>
-		<a class="indexterm" name="id2616271"></a>
-		<a class="indexterm" name="id2616280"></a>
+		<a class="indexterm" name="id380000"></a>
+		<a class="indexterm" name="id380011"></a>
+		<a class="indexterm" name="id380020"></a>
 		You may now perform final verification that communications between Samba-3 winbind and
 		the Active Directory server is using Kerberos protocols. Execute the following:
 </p><pre class="screen">
@@ -972,7 +972,7 @@
 		keep all server time clocks synchronized using the network time protocol (NTP).
 		In any case, the output we obtained confirms that all systems are operational.
 		</p></li><li><p>
-		<a class="indexterm" name="id2616316"></a>
+		<a class="indexterm" name="id380050"></a>
 		There is one more action you elect to take, just because you are paranoid and disbelieving,
 		so you execute the following command:
 </p><pre class="programlisting">
@@ -1142,21 +1142,21 @@
 </pre><p>
 	Now all is revealed. Your curiosity, as well as that of your team, has been put at ease.
 	May this server serve well all who happen upon it.
-	</p><div class="example"><a name="ch9-adssdm"></a><p class="title"><b>Example 7.7. Samba Domain Member <code class="filename">smb.conf</code> File for Active Directory Membership</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2616538"></a><em class="parameter"><code>unix charset = LOCALE</code></em></td></tr><tr><td><a class="indexterm" name="id2616549"></a><em class="parameter"><code>workgroup = LONDON</code></em></td></tr><tr><td><a class="indexterm" name="id2616561"></a><em class="parameter"><code>realm = LONDON.ABMAS.BIZ</code></em></td></tr><tr><td><a class="indexterm" name="id2616573"></a><em class="parameter"><code>server string = Samba 3.0.20</code></em></td></tr><tr><td><a class="indexterm" name="id2616585"></a><em class="parameter"><code>security = ADS</code></em></td></tr><tr><td><a class="indexterm" name="id2616596"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id2616608"></a><em class="parameter"><code>log level = 1</code></em></td></tr><tr><td><a class="indexterm" name="id2616620"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id2616631"></a><em class="parameter"><code>log file = /var/log/samba/%m</code></em></td></tr><tr><td><a class="indexterm" name="id2616643"></a><em class="parameter"><code>max log size = 50</code></em></td></tr><tr><td><a class="indexterm" name="id2616655"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id2616667"></a><em class="parameter"><code>ldap ssl = no</code></em></td></tr><tr><td><a class="indexterm" name="id2616678"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2616690"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2616702"></a><em class="parameter"><code>template primary group = "Domain Users"</code></em></td></tr><tr><td><a class="indexterm" name="id2616714"></a><em class="parameter"><code>template shell = /bin/bash</code></em></td></tr><tr><td><a class="indexterm" name="id2616726"></a><em class="parameter"><code>winbind separator = +</code></em></td></tr><tr><td><a class="indexterm" name="id2616738"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id2616758"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id2616770"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id2616782"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2616793"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2616814"></a><em class="parameter"><code>comment = SMB Print Spool</code></em></td></tr><tr><td><a class="indexterm" name="id2616826"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2616837"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2616849"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2616861"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[print$]</code></em></td></tr><tr><td><a class="indexterm" name="id2616881"></a><em class="parameter"><code>comment = Printer Drivers</code></em></td></tr><tr><td><a class="indexterm" name="id2616893"></a><em class="parameter"><code>path = /var/lib/samba/drivers</code></em></td></tr><tr><td><a class="indexterm" name="id2616905"></a><em class="parameter"><code>admin users = root, Administrator</code></em></td></tr><tr><td><a class="indexterm" name="id2616917"></a><em class="parameter"><code>write list = root</code></em></td></tr></table></div></div><br class="example-break"><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2616929"></a>IDMAP_RID with Winbind</h4></div></div></div><p>
-        <a class="indexterm" name="id2616937"></a>
-        <a class="indexterm" name="id2616944"></a>
-        <a class="indexterm" name="id2616951"></a>
-        <a class="indexterm" name="id2616957"></a>
+	</p><div class="example"><a name="ch9-adssdm"></a><p class="title"><b>Example 7.7. Samba Domain Member <code class="filename">smb.conf</code> File for Active Directory Membership</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id380204"></a><em class="parameter"><code>unix charset = LOCALE</code></em></td></tr><tr><td><a class="indexterm" name="id380215"></a><em class="parameter"><code>workgroup = LONDON</code></em></td></tr><tr><td><a class="indexterm" name="id380227"></a><em class="parameter"><code>realm = LONDON.ABMAS.BIZ</code></em></td></tr><tr><td><a class="indexterm" name="id380238"></a><em class="parameter"><code>server string = Samba 3.0.20</code></em></td></tr><tr><td><a class="indexterm" name="id380250"></a><em class="parameter"><code>security = ADS</code></em></td></tr><tr><td><a class="indexterm" name="id380262"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id380273"></a><em class="parameter"><code>log level = 1</code></em></td></tr><tr><td><a class="indexterm" name="id380285"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id380296"></a><em class="parameter"><code>log file = /var/log/samba/%m</code></em></td></tr><tr><td><a class="indexterm" name="id380308"></a><em class="parameter"><code>max log size = 50</code></em></td></tr><tr><td><a class="indexterm" name="id380319"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id380331"></a><em class="parameter"><code>ldap ssl = no</code></em></td></tr><tr><td><a class="indexterm" name="id380342"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id380354"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id380365"></a><em class="parameter"><code>template primary group = "Domain Users"</code></em></td></tr><tr><td><a class="indexterm" name="id380377"></a><em class="parameter"><code>template shell = /bin/bash</code></em></td></tr><tr><td><a class="indexterm" name="id380388"></a><em class="parameter"><code>winbind separator = +</code></em></td></tr><tr><td><a class="indexterm" name="id380400"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id380420"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id380432"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id380443"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id380455"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id380475"></a><em class="parameter"><code>comment = SMB Print Spool</code></em></td></tr><tr><td><a class="indexterm" name="id380487"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id380498"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id380510"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id380521"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[print$]</code></em></td></tr><tr><td><a class="indexterm" name="id380541"></a><em class="parameter"><code>comment = Printer Drivers</code></em></td></tr><tr><td><a class="indexterm" name="id380553"></a><em class="parameter"><code>path = /var/lib/samba/drivers</code></em></td></tr><tr><td><a class="indexterm" name="id380565"></a><em class="parameter"><code>admin users = root, Administrator</code></em></td></tr><tr><td><a class="indexterm" name="id380576"></a><em class="parameter"><code>write list = root</code></em></td></tr></table></div></div><br class="example-break"><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id380589"></a>IDMAP_RID with Winbind</h4></div></div></div><p>
+        <a class="indexterm" name="id380596"></a>
+        <a class="indexterm" name="id380603"></a>
+        <a class="indexterm" name="id380610"></a>
+        <a class="indexterm" name="id380616"></a>
         The <code class="literal">idmap_rid</code> facility is a new tool that, unlike native winbind, creates a
         predictable mapping of MS Windows SIDs to UNIX UIDs and GIDs. The key benefit of this method
         of implementing the Samba IDMAP facility is that it eliminates the need to store the IDMAP data
         in a central place. The downside is that it can be used only within a single ADS domain and
         is not compatible with trusted domain implementations.
         </p><p>
-        <a class="indexterm" name="id2616981"></a>
-        <a class="indexterm" name="id2616987"></a>
-        <a class="indexterm" name="id2616994"></a>
-        <a class="indexterm" name="id2617001"></a>
+        <a class="indexterm" name="id380636"></a>
+        <a class="indexterm" name="id380643"></a>
+        <a class="indexterm" name="id380649"></a>
+        <a class="indexterm" name="id380656"></a>
         This alternate method of SID to UID/GID  mapping can be achieved with the idmap_rid
         plug-in. This plug-in uses the RID of the user SID to derive the UID and GID by adding the
         RID to a base value specified. This utility requires that the parameter
@@ -1164,18 +1164,18 @@
         with multiple domain environments. The <em class="parameter"><code>idmap uid</code></em> and
         <em class="parameter"><code>idmap gid</code></em> ranges must be specified.
         </p><p>
-        <a class="indexterm" name="id2617034"></a>
-        <a class="indexterm" name="id2617041"></a>
+        <a class="indexterm" name="id380685"></a>
+        <a class="indexterm" name="id380692"></a>
         The idmap_rid facility can be used both for NT4/Samba-style domains as well as with Active Directory.
         To use this with an NT4 domain, the <em class="parameter"><code>realm</code></em> is not used. Additionally the
         method used to join the domain uses the <code class="constant">net rpc join</code> process.
         </p><p>
         An example <code class="filename">smb.conf</code> file for an ADS domain environment is shown in <a class="link" href="unixclients.html#sbe-idmapridex" title="Example 7.8. Example smb.conf File Using idmap_rid">&#8220;Example smb.conf File Using idmap_rid&#8221;</a>.
-        </p><div class="example"><a name="sbe-idmapridex"></a><p class="title"><b>Example 7.8. Example <code class="filename">smb.conf</code> File Using <code class="constant">idmap_rid</code></b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2617115"></a><em class="parameter"><code>workgroup = KPAK</code></em></td></tr><tr><td><a class="indexterm" name="id2617127"></a><em class="parameter"><code>netbios name = BIGJOE</code></em></td></tr><tr><td><a class="indexterm" name="id2617138"></a><em class="parameter"><code>realm = CORP.KPAK.COM</code></em></td></tr><tr><td><a class="indexterm" name="id2617150"></a><em class="parameter"><code>server string = Office Server</code></em></td></tr><tr><td><a class="indexterm" name="id2617162"></a><em class="parameter"><code>security = ADS</code></em></td></tr><tr><td><a class="indexterm" name="id2617174"></a><em class="parameter"><code>allow trusted domains = No</code></em></td></tr><tr><td><a class="indexterm" name="id2617186"></a><em class="parameter"><code>idmap backend = idmap_rid:KPAK=500-100000000</code></em></td></tr><tr><td><a class="indexterm" name="id2617198"></a><em class="parameter"><code>idmap uid = 500-100000000</code></em></td></tr><tr><td><a class="indexterm" name="id2617210"></a><em class="parameter"><code>idmap gid = 500-100000000</code></em></td></tr><tr><td><a class="indexterm" name="id2617222"></a><em class="parameter"><code>template shell = /bin/bash</code></em></td></tr><tr><td><a class="indexterm" name="id2617233"></a><em class="parameter"><code>winbind use default domain = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2617246"></a><em class="parameter"><code>winbind enum users = No</code></em></td></tr><tr><td><a class="indexterm" name="id2617257"></a><em class="parameter"><code>winbind enum groups = No</code></em></td></tr><tr><td><a class="indexterm" name="id2617269"></a><em class="parameter"><code>winbind nested groups = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2617281"></a><em class="parameter"><code>printer admin = "KPAK\Domain Admins"</code></em></td></tr></table></div></div><br class="example-break"><p>
-        <a class="indexterm" name="id2617297"></a>
-        <a class="indexterm" name="id2617304"></a>
-        <a class="indexterm" name="id2617310"></a>
-        <a class="indexterm" name="id2617317"></a>
+        </p><div class="example"><a name="sbe-idmapridex"></a><p class="title"><b>Example 7.8. Example <code class="filename">smb.conf</code> File Using <code class="constant">idmap_rid</code></b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id380764"></a><em class="parameter"><code>workgroup = KPAK</code></em></td></tr><tr><td><a class="indexterm" name="id380775"></a><em class="parameter"><code>netbios name = BIGJOE</code></em></td></tr><tr><td><a class="indexterm" name="id380787"></a><em class="parameter"><code>realm = CORP.KPAK.COM</code></em></td></tr><tr><td><a class="indexterm" name="id380798"></a><em class="parameter"><code>server string = Office Server</code></em></td></tr><tr><td><a class="indexterm" name="id380810"></a><em class="parameter"><code>security = ADS</code></em></td></tr><tr><td><a class="indexterm" name="id380821"></a><em class="parameter"><code>allow trusted domains = No</code></em></td></tr><tr><td><a class="indexterm" name="id380833"></a><em class="parameter"><code>idmap backend = idmap_rid:KPAK=500-100000000</code></em></td></tr><tr><td><a class="indexterm" name="id380845"></a><em class="parameter"><code>idmap uid = 500-100000000</code></em></td></tr><tr><td><a class="indexterm" name="id380856"></a><em class="parameter"><code>idmap gid = 500-100000000</code></em></td></tr><tr><td><a class="indexterm" name="id380868"></a><em class="parameter"><code>template shell = /bin/bash</code></em></td></tr><tr><td><a class="indexterm" name="id380880"></a><em class="parameter"><code>winbind use default domain = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id380891"></a><em class="parameter"><code>winbind enum users = No</code></em></td></tr><tr><td><a class="indexterm" name="id380903"></a><em class="parameter"><code>winbind enum groups = No</code></em></td></tr><tr><td><a class="indexterm" name="id380914"></a><em class="parameter"><code>winbind nested groups = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id380926"></a><em class="parameter"><code>printer admin = "KPAK\Domain Admins"</code></em></td></tr></table></div></div><br class="example-break"><p>
+        <a class="indexterm" name="id380941"></a>
+        <a class="indexterm" name="id380948"></a>
+        <a class="indexterm" name="id380954"></a>
+        <a class="indexterm" name="id380961"></a>
         In a large domain with many users, it is imperative to disable enumeration of users and groups.
         For example, at a site that has 22,000 users in Active Directory the winbind-based user and
         group resolution is unavailable for nearly 12 minutes following first start-up of
@@ -1185,8 +1185,8 @@
         commands. It will be possible to perform the lookup for individual users, as shown in the procedure
         below.
         </p><p>
-        <a class="indexterm" name="id2617356"></a>
-        <a class="indexterm" name="id2617363"></a>
+        <a class="indexterm" name="id380994"></a>
+        <a class="indexterm" name="id381001"></a>
         The use of this tool requires configuration of NSS as per the native use of winbind. Edit the
         <code class="filename">/etc/nsswitch.conf</code> so it has the following parameters:
 </p><pre class="screen">
@@ -1212,7 +1212,7 @@
 Joined 'BIGJOE' to realm 'CORP.KPAK.COM'
 </pre><p>
                 </p><p>
-                <a class="indexterm" name="id2617444"></a>
+                <a class="indexterm" name="id381076"></a>
                 An invalid or failed join can be detected by executing:
 </p><pre class="screen">
 <code class="prompt">root# </code> net ads testjoin
@@ -1228,30 +1228,30 @@
                 Start the <code class="literal">nmbd</code>, <code class="literal">winbind,</code> and <code class="literal">smbd</code> daemons in the order shown.
                 </p></li><li><p>
                 Validate the operation of this configuration by executing:
-                <a class="indexterm" name="id2617511"></a>
+                <a class="indexterm" name="id381137"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> getent passwd administrator
 administrator:x:1000:1013:Administrator:/home/BE/administrator:/bin/bash
 </pre><p>
-                </p></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2617533"></a>IDMAP Storage in LDAP using Winbind</h4></div></div></div><p>
-        <a class="indexterm" name="id2617541"></a>
-        <a class="indexterm" name="id2617548"></a>
+                </p></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id381158"></a>IDMAP Storage in LDAP using Winbind</h4></div></div></div><p>
+        <a class="indexterm" name="id381166"></a>
+        <a class="indexterm" name="id381173"></a>
         The storage of IDMAP information in LDAP can be used with both NT4/Samba-3-style domains as well as
         with ADS domains. OpenLDAP is a commonly used LDAP server for this purpose, although any standards-compliant
         LDAP server can be used. It is therefore possible to deploy this IDMAP configuration using
         the Sun iPlanet LDAP server, Novell eDirectory, Microsoft ADS plus ADAM, and so on.
         </p><p>
         The example in <a class="link" href="unixclients.html#sbeunxa" title="Example 7.9. Typical ADS Style Domain smb.conf File">&#8220;Typical ADS Style Domain smb.conf File&#8221;</a> is for an ADS-style domain.
-        </p><div class="example"><a name="sbeunxa"></a><p class="title"><b>Example 7.9. Typical ADS Style Domain <code class="filename">smb.conf</code> File</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2617608"></a><em class="parameter"><code>workgroup = SNOWSHOW</code></em></td></tr><tr><td><a class="indexterm" name="id2617619"></a><em class="parameter"><code>netbios name = GOODELF</code></em></td></tr><tr><td><a class="indexterm" name="id2617631"></a><em class="parameter"><code>realm = SNOWSHOW.COM</code></em></td></tr><tr><td><a class="indexterm" name="id2617643"></a><em class="parameter"><code>server string = Samba Server</code></em></td></tr><tr><td><a class="indexterm" name="id2617655"></a><em class="parameter"><code>security = ADS</code></em></td></tr><tr><td><a class="indexterm" name="id2617666"></a><em class="parameter"><code>log level = 1 ads:10 auth:10 sam:10 rpc:10</code></em></td></tr><tr><td><a class="indexterm" name="id2617678"></a><em class="parameter"><code>ldap admin dn = cn=Manager,dc=SNOWSHOW,dc=COM</code></em></td></tr><tr><td><a class="indexterm" name="id2617691"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr><tr><td><a class="indexterm" name="id2617703"></a><em class="parameter"><code>ldap suffix = dc=SNOWSHOW,dc=COM</code></em></td></tr><tr><td><a class="indexterm" name="id2617715"></a><em class="parameter"><code>idmap backend = ldap:ldap://ldap.snowshow.com</code></em></td></tr><tr><td><a class="indexterm" name="id2617727"></a><em class="parameter"><code>idmap uid = 150000-550000</code></em></td></tr><tr><td><a class="indexterm" name="id2617739"></a><em class="parameter"><code>idmap gid = 150000-550000</code></em></td></tr><tr><td><a class="indexterm" name="id2617750"></a><em class="parameter"><code>template shell = /bin/bash</code></em></td></tr><tr><td><a class="indexterm" name="id2617762"></a><em class="parameter"><code>winbind use default domain = Yes</code></em></td></tr></table></div></div><br class="example-break"><p>
-        <a class="indexterm" name="id2617778"></a>
+        </p><div class="example"><a name="sbeunxa"></a><p class="title"><b>Example 7.9. Typical ADS Style Domain <code class="filename">smb.conf</code> File</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id381227"></a><em class="parameter"><code>workgroup = SNOWSHOW</code></em></td></tr><tr><td><a class="indexterm" name="id381238"></a><em class="parameter"><code>netbios name = GOODELF</code></em></td></tr><tr><td><a class="indexterm" name="id381250"></a><em class="parameter"><code>realm = SNOWSHOW.COM</code></em></td></tr><tr><td><a class="indexterm" name="id381261"></a><em class="parameter"><code>server string = Samba Server</code></em></td></tr><tr><td><a class="indexterm" name="id381273"></a><em class="parameter"><code>security = ADS</code></em></td></tr><tr><td><a class="indexterm" name="id381284"></a><em class="parameter"><code>log level = 1 ads:10 auth:10 sam:10 rpc:10</code></em></td></tr><tr><td><a class="indexterm" name="id381296"></a><em class="parameter"><code>ldap admin dn = cn=Manager,dc=SNOWSHOW,dc=COM</code></em></td></tr><tr><td><a class="indexterm" name="id381308"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr><tr><td><a class="indexterm" name="id381319"></a><em class="parameter"><code>ldap suffix = dc=SNOWSHOW,dc=COM</code></em></td></tr><tr><td><a class="indexterm" name="id381331"></a><em class="parameter"><code>idmap backend = ldap:ldap://ldap.snowshow.com</code></em></td></tr><tr><td><a class="indexterm" name="id381343"></a><em class="parameter"><code>idmap uid = 150000-550000</code></em></td></tr><tr><td><a class="indexterm" name="id381354"></a><em class="parameter"><code>idmap gid = 150000-550000</code></em></td></tr><tr><td><a class="indexterm" name="id381366"></a><em class="parameter"><code>template shell = /bin/bash</code></em></td></tr><tr><td><a class="indexterm" name="id381378"></a><em class="parameter"><code>winbind use default domain = Yes</code></em></td></tr></table></div></div><br class="example-break"><p>
+        <a class="indexterm" name="id381392"></a>
         In the case of an NT4 or Samba-3-style domain the <em class="parameter"><code>realm</code></em> is not used, and the
         command used to join the domain is <code class="literal">net rpc join</code>. The above example also demonstrates
         advanced error reporting techniques that are documented in the chapter called "Reporting Bugs" in
 	&#8220;<span class="quote">The Official Samba-3 HOWTO and Reference Guide, Second Edition</span>&#8221; (TOSHARG2).
         </p><p>
-        <a class="indexterm" name="id2617809"></a>
-        <a class="indexterm" name="id2617816"></a>
-        <a class="indexterm" name="id2617823"></a>
+        <a class="indexterm" name="id381421"></a>
+        <a class="indexterm" name="id381428"></a>
+        <a class="indexterm" name="id381434"></a>
         Where MIT kerberos is installed (version 1.3.4 or later), edit the <code class="filename">/etc/krb5.conf</code>
         file so it has the following contents:
 </p><pre class="screen">
@@ -1306,8 +1306,8 @@
 ...
 </pre><p>
         </p><p>
-        <a class="indexterm" name="id2617907"></a>
-        <a class="indexterm" name="id2617914"></a>
+        <a class="indexterm" name="id381507"></a>
+        <a class="indexterm" name="id381514"></a>
         You will need the <a class="ulink" href="http://www.padl.com" target="_top">PADL</a> <code class="literal">nss_ldap</code>
         tool set for this solution. Configure the <code class="filename">/etc/ldap.conf</code> file so it has
         the information needed. The following is an example of a working file:
@@ -1370,20 +1370,20 @@
                 </p></li><li><p>
                 Start the <code class="literal">nmbd</code>, <code class="literal">winbind</code>, and <code class="literal">smbd</code> daemons in the order shown.
                 </p></li></ol></div><p>
-        <a class="indexterm" name="id2618114"></a>
+        <a class="indexterm" name="id381697"></a>
         Follow the diagnostic procedures shown earlier in this chapter to identify success or failure of the join.
         In many cases a failure is indicated by a silent return to the command prompt with no indication of the
         reason for failure.
-        </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2618127"></a>IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</h4></div></div></div><p>
-        <a class="indexterm" name="id2618136"></a>
-        <a class="indexterm" name="id2618143"></a>
+        </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id381708"></a>IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</h4></div></div></div><p>
+        <a class="indexterm" name="id381716"></a>
+        <a class="indexterm" name="id381723"></a>
         The use of this method is messy. The information provided in this section is for guidance only
         and is very definitely not complete. This method does work; it is used in a number of large sites
         and has an acceptable level of performance.
         </p><p>
         An example <code class="filename">smb.conf</code> file is shown in <a class="link" href="unixclients.html#sbewinbindex" title="Example 7.10. ADS Membership Using RFC2307bis Identity Resolution smb.conf File">&#8220;ADS Membership Using RFC2307bis Identity Resolution smb.conf File&#8221;</a>.
-        </p><div class="example"><a name="sbewinbindex"></a><p class="title"><b>Example 7.10. ADS Membership Using RFC2307bis Identity Resolution <code class="filename">smb.conf</code> File</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2618206"></a><em class="parameter"><code>workgroup = BUBBAH</code></em></td></tr><tr><td><a class="indexterm" name="id2618217"></a><em class="parameter"><code>netbios name = MADMAX</code></em></td></tr><tr><td><a class="indexterm" name="id2618229"></a><em class="parameter"><code>realm = BUBBAH.COM</code></em></td></tr><tr><td><a class="indexterm" name="id2618241"></a><em class="parameter"><code>server string = Samba Server</code></em></td></tr><tr><td><a class="indexterm" name="id2618253"></a><em class="parameter"><code>security = ADS</code></em></td></tr><tr><td><a class="indexterm" name="id2618264"></a><em class="parameter"><code>idmap uid = 150000-550000</code></em></td></tr><tr><td><a class="indexterm" name="id2618276"></a><em class="parameter"><code>idmap gid = 150000-550000</code></em></td></tr><tr><td><a class="indexterm" name="id2618288"></a><em class="parameter"><code>template shell = /bin/bash</code></em></td></tr><tr><td><a class="indexterm" name="id2618300"></a><em class="parameter"><code>winbind use default domain = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2618312"></a><em class="parameter"><code>winbind trusted domains only = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2618324"></a><em class="parameter"><code>winbind nested groups = Yes</code></em></td></tr></table></div></div><br class="example-break"><p>
-        <a class="indexterm" name="id2618339"></a>
+        </p><div class="example"><a name="sbewinbindex"></a><p class="title"><b>Example 7.10. ADS Membership Using RFC2307bis Identity Resolution <code class="filename">smb.conf</code> File</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id381782"></a><em class="parameter"><code>workgroup = BUBBAH</code></em></td></tr><tr><td><a class="indexterm" name="id381794"></a><em class="parameter"><code>netbios name = MADMAX</code></em></td></tr><tr><td><a class="indexterm" name="id381805"></a><em class="parameter"><code>realm = BUBBAH.COM</code></em></td></tr><tr><td><a class="indexterm" name="id381817"></a><em class="parameter"><code>server string = Samba Server</code></em></td></tr><tr><td><a class="indexterm" name="id381828"></a><em class="parameter"><code>security = ADS</code></em></td></tr><tr><td><a class="indexterm" name="id381840"></a><em class="parameter"><code>idmap uid = 150000-550000</code></em></td></tr><tr><td><a class="indexterm" name="id381851"></a><em class="parameter"><code>idmap gid = 150000-550000</code></em></td></tr><tr><td><a class="indexterm" name="id381863"></a><em class="parameter"><code>template shell = /bin/bash</code></em></td></tr><tr><td><a class="indexterm" name="id381874"></a><em class="parameter"><code>winbind use default domain = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id381886"></a><em class="parameter"><code>winbind trusted domains only = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id381898"></a><em class="parameter"><code>winbind nested groups = Yes</code></em></td></tr></table></div></div><br class="example-break"><p>
+        <a class="indexterm" name="id381913"></a>
         The DMS must be joined to the domain using the usual procedure. Additionally, it is necessary
         to build and install the PADL nss_ldap tool set. Be sure to build this tool set with the
         following:
@@ -1392,7 +1392,7 @@
 make install
 </pre><p>
         </p><p>
-        <a class="indexterm" name="id2618360"></a>
+        <a class="indexterm" name="id381931"></a>
         The following <code class="filename">/etc/nsswitch.conf</code> file contents are required:
 </p><pre class="screen">
 ...
@@ -1404,30 +1404,30 @@
 ...
 </pre><p>
         </p><p>
-        <a class="indexterm" name="id2618384"></a>
-        <a class="indexterm" name="id2618391"></a>
+        <a class="indexterm" name="id381954"></a>
+        <a class="indexterm" name="id381960"></a>
         The <code class="filename">/etc/ldap.conf</code> file must be configured also. Refer to the PADL documentation
         and source code for nss_ldap instructions.
         </p><p>
         The next step involves preparation on the ADS schema. This is briefly discussed in the remaining
         part of this chapter.
-        </p><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id2618413"></a>IDMAP, Active Directory, and MS Services for UNIX 3.5</h5></div></div></div><p>
-                <a class="indexterm" name="id2618422"></a>
+        </p><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id381980"></a>IDMAP, Active Directory, and MS Services for UNIX 3.5</h5></div></div></div><p>
+                <a class="indexterm" name="id381988"></a>
                 The Microsoft Windows Service for UNIX version 3.5 is available for free
                 <a class="ulink" href="http://www.microsoft.com/windows/sfu/" target="_top">download</a>
                 from the Microsoft Web site. You will need to download this tool and install it following
                 Microsoft instructions.
-                </p></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id2618442"></a>IDMAP, Active Directory, and AD4UNIX</h5></div></div></div><p>
+                </p></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id382005"></a>IDMAP, Active Directory, and AD4UNIX</h5></div></div></div><p>
                 Instructions for obtaining and installing the AD4UNIX tool set can be found from the
                 <a class="ulink" href="http://www.geekcomix.com/cgi-bin/classnotes/wiki.pl?LDAP01/An_Alternative_Approach" target="_top">
                 Geekcomix</a> Web site.
-                </p></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2618464"></a>UNIX/Linux Client Domain Member</h3></div></div></div><p><a class="indexterm" name="id2618471"></a>
+                </p></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id382025"></a>UNIX/Linux Client Domain Member</h3></div></div></div><p><a class="indexterm" name="id382032"></a>
 	So far this chapter has been mainly concerned with the provision of file and print
 	services for domain member servers. However, an increasing number of UNIX/Linux
 	workstations are being installed that do not act as file or print servers to anyone
 	other than a single desktop user. The key demand for desktop systems is to be able
 	to log onto any UNIX/Linux or Windows desktop using the same network user credentials.
-	</p><p><a class="indexterm" name="id2618489"></a>
+	</p><p><a class="indexterm" name="id382047"></a>
 	The ability to use a common set of user credential across a variety of network systems
 	is generally regarded as a single sign-on (SSO) solution. SSO systems are sold by a
 	large number of vendors and include a range of technologies such as:
@@ -1439,7 +1439,7 @@
 		Metadirectory server solutions
 		</p></li><li><p>
 		Replacement authentication systems
-		</p></li></ul></div><p><a class="indexterm" name="id2618531"></a>
+		</p></li></ul></div><p><a class="indexterm" name="id382085"></a>
 	There are really four solutions that provide integrated authentication and
 	user identity management facilities:
 	</p><div class="itemizedlist"><ul type="disc"><li><p>
@@ -1464,22 +1464,22 @@
 	provides logon services for UNIX/Linux users, while Windows users obtain their sign-on
 	support via Samba-3.
 	</p><p>
-	<a class="indexterm" name="id2618610"></a>
+	<a class="indexterm" name="id382152"></a>
 	On the other hand, if the authentication and identity resolution backend must be provided by
 	a Windows NT4-style domain or from an Active Directory Domain that does not have the Microsoft
 	Windows Services for UNIX installed, winbind is your best friend. Specific guidance for these
 	situations now follows.
 	</p><p>
-	<a class="indexterm" name="id2618628"></a>
-	<a class="indexterm" name="id2618634"></a>
-	<a class="indexterm" name="id2618641"></a>
+	<a class="indexterm" name="id382168"></a>
+	<a class="indexterm" name="id382174"></a>
+	<a class="indexterm" name="id382181"></a>
 	To permit users to log on to a Linux system using Windows network credentials, you need to
 	configure identity resolution (NSS) and PAM. This means that the basic steps include those
 	outlined above with the addition of PAM configuration. Given that most workstations (desktop/client)
 	usually do not need to provide file and print services to a group of users, the configuration
 	of shares and printers is generally less important. Often this allows the share specifications
 	to be entirely removed from the <code class="filename">smb.conf</code> file. That is obviously an administrator decision.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2618664"></a>NT4 Domain Member</h4></div></div></div><p>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id382199"></a>NT4 Domain Member</h4></div></div></div><p>
 		The following steps provide a Linux system that users can log onto using
 		Windows NT4 (or Samba-3) domain network credentials:
 		</p><div class="procedure"><ol type="1"><li><p>
@@ -1507,7 +1507,7 @@
 			</p></li><li><p>
 			Edit only one file at a time. Carefully validate its operation before attempting
 			to reboot the machine.
-			</p></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2618787"></a>ADS Domain Member</h4></div></div></div><p>
+			</p></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id382311"></a>ADS Domain Member</h4></div></div></div><p>
 		This procedure should be followed to permit a Linux network client (workstation/desktop)
 		to permit users to log on using Microsoft Active Directory-based user credentials.
 		</p><div class="procedure"><ol type="1"><li><p>
@@ -1587,7 +1587,7 @@
 session     required      /lib/security/$ISA/pam_limits.so
 session     sufficient    /lib/security/$ISA/pam_unix.so
 session     sufficient    /lib/security/$ISA/pam_winbind.so use_first_pass
-</pre></div></div><br class="example-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2619038"></a>Key Points Learned</h3></div></div></div><p>
+</pre></div></div><br class="example-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id382521"></a>Key Points Learned</h3></div></div></div><p>
 		The addition of UNIX/Linux Samba servers and clients is a common requirement. In this chapter, you
 		learned how to integrate such servers so that the UID/GID mappings they use can be consistent
 		across all domain member servers. You also discovered how to implement the ability to use Samba
@@ -1607,54 +1607,54 @@
 			</p></li><li><p>
 			On NSS/PAM enabled UNIX/Linux systems, NSS is responsible for identity management 
 			and PAM is responsible for authentication of logon credentials (username and password).
-			</p></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2619093"></a>Questions and Answers</h2></div></div></div><p>
+			</p></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id382565"></a>Questions and Answers</h2></div></div></div><p>
 	The following questions were obtained from the mailing list and also from private discussions
 	with Windows network administrators.
-	</p><div class="qandaset"><dl><dt> <a href="unixclients.html#id2619111">
+	</p><div class="qandaset"><dl><dt> <a href="unixclients.html#id382582">
 		We use NIS for all UNIX accounts. Why do we need winbind?
-		</a></dt><dt> <a href="unixclients.html#id2619226">
+		</a></dt><dt> <a href="unixclients.html#id382690">
 		Our IT management people do not like LDAP but are looking at Microsoft Active Directory. 
 	      Which is better?
-		</a></dt><dt> <a href="unixclients.html#id2619310">
+		</a></dt><dt> <a href="unixclients.html#id382763">
 		We want to implement a Samba PDC, four Samba BDCs, and 10 Samba servers. Is it possible 
 		to use NIS in place of LDAP?
-		</a></dt><dt> <a href="unixclients.html#id2619421">
+		</a></dt><dt> <a href="unixclients.html#id382867">
 		Are you suggesting that users should not log on to a domain member server? If so, why?
-		</a></dt><dt> <a href="unixclients.html#id2619548">
+		</a></dt><dt> <a href="unixclients.html#id382979">
 		We want to ensure that only users from our own domain plus from trusted domains can use our
 		Samba servers. In the smb.conf file on all servers, we have enabled the winbind
 		trusted domains only parameter. We now find that users from trusted domains 
 		cannot access our servers, and users from Windows clients that are not domain members
 		can also access our servers. Is this a Samba bug?
-		</a></dt><dt> <a href="unixclients.html#id2619724">
+		</a></dt><dt> <a href="unixclients.html#id383144">
 		What are the benefits of using LDAP for my domain member servers?
-		</a></dt><dt> <a href="unixclients.html#id2619907">
+		</a></dt><dt> <a href="unixclients.html#id383319">
 		Is proper DNS operation necessary for Samba-3 plus LDAP? If so, what must I put into
 		my DNS configuration?
-		</a></dt><dt> <a href="unixclients.html#id2620065">
+		</a></dt><dt> <a href="unixclients.html#id383466">
 		Our Windows 2003 Server Active Directory domain runs with NetBIOS disabled. Can we
 		use Samba-3 with that configuration?
-		</a></dt><dt> <a href="unixclients.html#id2620084">
+		</a></dt><dt> <a href="unixclients.html#id383484">
 		When I tried to execute net ads join, I got no output. It did not work, so
 		I think that it failed. I then executed net rpc join and that worked fine.
 		That is okay, isn't it?
-		</a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%"><tbody><tr class="question"><td align="left" valign="top"><a name="id2619111"></a><a name="id2619113"></a></td><td align="left" valign="top"><p>
+		</a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%"><tbody><tr class="question"><td align="left" valign="top"><a name="id382582"></a><a name="id382584"></a></td><td align="left" valign="top"><p>
 		We use NIS for all UNIX accounts. Why do we need winbind?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
-		<a class="indexterm" name="id2619125"></a>
-		<a class="indexterm" name="id2619131"></a>
-		<a class="indexterm" name="id2619138"></a>
-		<a class="indexterm" name="id2619145"></a>
-		<a class="indexterm" name="id2619152"></a>
-		<a class="indexterm" name="id2619159"></a>
+		<a class="indexterm" name="id382596"></a>
+		<a class="indexterm" name="id382602"></a>
+		<a class="indexterm" name="id382609"></a>
+		<a class="indexterm" name="id382616"></a>
+		<a class="indexterm" name="id382622"></a>
+		<a class="indexterm" name="id382629"></a>
 		You can use NIS for your UNIX accounts. NIS does not store the Windows encrypted
 		passwords that need to be stored in one of the acceptable passdb backends.
 		Your choice of backend is limited to <em class="parameter"><code>smbpasswd</code></em> or
 		<em class="parameter"><code>tdbsam</code></em>. Winbind is needed to handle the resolution of
 		SIDs from trusted domains to local UID/GID values.
 		</p><p>
-		<a class="indexterm" name="id2619186"></a>
-		<a class="indexterm" name="id2619193"></a>
+		<a class="indexterm" name="id382654"></a>
+		<a class="indexterm" name="id382661"></a>
 		On a domain member server, you effectively map Windows domain users to local users
 		that are in your NIS database by specifying the <em class="parameter"><code>winbind trusted domains
 		only</code></em>. This causes user and group account lookups to be routed via
@@ -1662,17 +1662,17 @@
 		this pushes the resolution of users and groups out through NIS.
 		</p><p>
 		As a general rule, it is always a good idea to run winbind on all Samba servers.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2619226"></a><a name="id2619228"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id382690"></a><a name="id382692"></a></td><td align="left" valign="top"><p>
 		Our IT management people do not like LDAP but are looking at Microsoft Active Directory. 
-	      Which is better?<a class="indexterm" name="id2619234"></a>
-		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id2619248"></a><a class="indexterm" name="id2619260"></a><a class="indexterm" name="id2619268"></a>
+	      Which is better?<a class="indexterm" name="id382697"></a>
+		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id382711"></a><a class="indexterm" name="id382723"></a><a class="indexterm" name="id382730"></a>
 		Microsoft Active Directory is an LDAP server that is intricately tied to a Kerberos
 		infrastructure. Most IT managers who object to LDAP do so because
 		an LDAP server is most often supplied as a raw tool that needs to be configured and
 		for which the administrator must create the schema, create the administration tools, and
 		devise the backup and recovery facilities in a site-dependent manner. LDAP servers
 		in general are seen as a high-energy, high-risk facility.
-		</p><p><a class="indexterm" name="id2619287"></a>
+		</p><p><a class="indexterm" name="id382746"></a>
 		Microsoft Active Directory by comparison is easy to install and configure and
 		is supplied with all tools necessary to implement and manage the directory. For sites
 		that lack a lot of technical competence, Active Directory is a good choice. For sites
@@ -1681,28 +1681,28 @@
 		the site want? If management wants a choice to use an alternative, they may want to
 		consider the options. On the other hand, if management just wants a solution that works,
 		Microsoft Active Directory is a good solution.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2619310"></a><a name="id2619312"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id382763"></a><a name="id382765"></a></td><td align="left" valign="top"><p>
 		We want to implement a Samba PDC, four Samba BDCs, and 10 Samba servers. Is it possible 
 		to use NIS in place of LDAP?
-		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id2619324"></a><a class="indexterm" name="id2619331"></a><a class="indexterm" name="id2619339"></a><a class="indexterm" name="id2619347"></a><a class="indexterm" name="id2619355"></a><a class="indexterm" name="id2619363"></a><a class="indexterm" name="id2619371"></a>
+		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id382776"></a><a class="indexterm" name="id382784"></a><a class="indexterm" name="id382792"></a><a class="indexterm" name="id382799"></a><a class="indexterm" name="id382807"></a><a class="indexterm" name="id382815"></a><a class="indexterm" name="id382823"></a>
 		Yes, it is possible to use NIS in place of LDAP, but there may be problems with keeping
 		the Windows (SMB) encrypted passwords database correctly synchronized across the entire
 		network. Workstations (Windows client machines) periodically change their domain
 		membership secure account password. How can you keep changes that are on remote BDCs
 		synchronized on the PDC?
-		</p><p><a class="indexterm" name="id2619388"></a><a class="indexterm" name="id2619396"></a><a class="indexterm" name="id2619404"></a>
+		</p><p><a class="indexterm" name="id382837"></a><a class="indexterm" name="id382845"></a><a class="indexterm" name="id382853"></a>
 		LDAP is a more elegant solution because it permits centralized storage and management
 		of all network identities (user, group, and machine accounts) together with all information
 		Samba needs to provide to network clients and their users.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2619421"></a><a name="id2619423"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id382867"></a><a name="id382869"></a></td><td align="left" valign="top"><p>
 		Are you suggesting that users should not log on to a domain member server? If so, why?
-		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id2619434"></a><a class="indexterm" name="id2619442"></a><a class="indexterm" name="id2619453"></a>
+		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id382880"></a><a class="indexterm" name="id382887"></a><a class="indexterm" name="id382899"></a>
 		Many UNIX administrators mock the model that the personal computer industry has adopted
 		as normative since the early days of Novell NetWare. The old
 		perception of the necessity to keep users off file and print servers was a result of
 		fears concerning the security and integrity of data. It was a simple and generally
 		effective measure to keep users away from servers, except through mapped drives.
-		</p><p><a class="indexterm" name="id2619478"></a><a class="indexterm" name="id2619486"></a><a class="indexterm" name="id2619494"></a><a class="indexterm" name="id2619502"></a><a class="indexterm" name="id2619510"></a>
+		</p><p><a class="indexterm" name="id382917"></a><a class="indexterm" name="id382925"></a><a class="indexterm" name="id382932"></a><a class="indexterm" name="id382940"></a><a class="indexterm" name="id382948"></a>
 		UNIX administrators are fully correct in asserting that UNIX servers and workstations
 		are identical in terms of the software that is installed. They correctly assert that
 		in a well-secured environment it is safe to store files on a system that has hundreds
@@ -1711,17 +1711,17 @@
 		server the risk to operations through simple user errors.
 		Only then can one begin to appraise the best strategy and adopt a site-specific
 		policy that best protects the needs of users and of the organization alike.
-		</p><p><a class="indexterm" name="id2619532"></a>
+		</p><p><a class="indexterm" name="id382965"></a>
 		From experience, it is my recommendation to keep general system-level logins to a
 		practical minimum and to eliminate them if possible. This should not be taken as a
 		hard rule, though. The better question is, what works best for the site?
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2619548"></a><a name="id2619551"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id2619554"></a><a class="indexterm" name="id2619562"></a><a class="indexterm" name="id2619573"></a><a class="indexterm" name="id2619581"></a>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id382979"></a><a name="id382981"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id382984"></a><a class="indexterm" name="id382992"></a><a class="indexterm" name="id383004"></a><a class="indexterm" name="id383012"></a>
 		We want to ensure that only users from our own domain plus from trusted domains can use our
 		Samba servers. In the <code class="filename">smb.conf</code> file on all servers, we have enabled the <em class="parameter"><code>winbind
 		trusted domains only</code></em> parameter. We now find that users from trusted domains 
 		cannot access our servers, and users from Windows clients that are not domain members
 		can also access our servers. Is this a Samba bug?
-		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id2619614"></a><a class="indexterm" name="id2619622"></a><a class="indexterm" name="id2619630"></a><a class="indexterm" name="id2619637"></a><a class="indexterm" name="id2619645"></a><a class="indexterm" name="id2619653"></a>
+		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id383041"></a><a class="indexterm" name="id383049"></a><a class="indexterm" name="id383056"></a><a class="indexterm" name="id383064"></a><a class="indexterm" name="id383072"></a><a class="indexterm" name="id383080"></a>
 		The manual page for this <em class="parameter"><code>winbind trusted domains only</code></em> parameter says,
 		&#8220;<span class="quote">This parameter is designed to allow Samba servers that are members of a Samba-controlled 
 		domain to use UNIX accounts distributed vi NIS, rsync, or LDAP as the UIDs for winbindd users 
@@ -1729,7 +1729,7 @@
 		mapped to the account <code class="constant">user1</code> in <code class="filename">/etc/passwd</code> instead 
 		of allocating a new UID for him or her.</span>&#8221; This clearly suggests that you are trying
 		to use this parameter inappropriately.
-		</p><p><a class="indexterm" name="id2619695"></a>
+		</p><p><a class="indexterm" name="id383118"></a>
 		A far better solution is to use the <em class="parameter"><code>valid users</code></em> by specifying
 		precisely the domain users and groups that should be permitted access to the shares. You could, 
 		for example, set the following parameters:
@@ -1738,24 +1738,24 @@
 	path = /export/demodata
 	valid users = @"Domain Users", @"OTHERDOMAIN\Domain Users"
 </pre><p>
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2619724"></a><a name="id2619726"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id383144"></a><a name="id383146"></a></td><td align="left" valign="top"><p>
 		What are the benefits of using LDAP for my domain member servers?
-		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id2619737"></a><a class="indexterm" name="id2619745"></a><a class="indexterm" name="id2619752"></a><a class="indexterm" name="id2619760"></a><a class="indexterm" name="id2619768"></a><a class="indexterm" name="id2619776"></a><a class="indexterm" name="id2619784"></a><a class="indexterm" name="id2619792"></a><a class="indexterm" name="id2619800"></a>
+		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id383156"></a><a class="indexterm" name="id383164"></a><a class="indexterm" name="id383172"></a><a class="indexterm" name="id383179"></a><a class="indexterm" name="id383187"></a><a class="indexterm" name="id383195"></a><a class="indexterm" name="id383203"></a><a class="indexterm" name="id383211"></a><a class="indexterm" name="id383218"></a>
 		The key benefit of using LDAP is that the UID of all users and the GID of all groups
 		are globally consistent on domain controllers as well as on domain member servers.
 		This means that it is possible to copy/replicate files across servers without
 		loss of identity.
-		</p><p><a class="indexterm" name="id2619815"></a><a class="indexterm" name="id2619823"></a><a class="indexterm" name="id2619831"></a><a class="indexterm" name="id2619839"></a><a class="indexterm" name="id2619847"></a><a class="indexterm" name="id2619855"></a><a class="indexterm" name="id2619866"></a><a class="indexterm" name="id2619874"></a>
+		</p><p><a class="indexterm" name="id383232"></a><a class="indexterm" name="id383240"></a><a class="indexterm" name="id383248"></a><a class="indexterm" name="id383256"></a><a class="indexterm" name="id383263"></a><a class="indexterm" name="id383271"></a><a class="indexterm" name="id383283"></a><a class="indexterm" name="id383290"></a>
 		When use is made of account identity resolution via winbind, even when an IDMAP backend
 		is stored in LDAP, the UID/GID on domain member servers is consistent, but differs
 		from the ID that the user/group has on domain controllers. The winbind allocated UID/GID
 		that is stored in LDAP (or locally) will be in the numeric range specified in the <em class="parameter"><code>
 		idmap uid/gid</code></em> in the <code class="filename">smb.conf</code> file. On domain controllers, the UID/GID is
 		that of the POSIX value assigned in the LDAP directory as part of the POSIX account information.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2619907"></a><a name="id2619909"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id383319"></a><a name="id383321"></a></td><td align="left" valign="top"><p>
 		Is proper DNS operation necessary for Samba-3 plus LDAP? If so, what must I put into
 		my DNS configuration?
-		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id2619921"></a><a class="indexterm" name="id2619932"></a><a class="indexterm" name="id2619943"></a><a class="indexterm" name="id2619951"></a><a class="indexterm" name="id2619959"></a><a class="indexterm" name="id2619966"></a><a class="indexterm" name="id2619974"></a>
+		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id383332"></a><a class="indexterm" name="id383343"></a><a class="indexterm" name="id383354"></a><a class="indexterm" name="id383362"></a><a class="indexterm" name="id383369"></a><a class="indexterm" name="id383377"></a><a class="indexterm" name="id383385"></a>
 		Samba depends on correctly functioning resolution of hostnames to their IP address. Samba
 		makes no direct DNS lookup calls, but rather redirects all name-to-address calls via the
 		<code class="literal">getXXXbyXXX()</code> function calls. The configuration of the <code class="constant">hosts</code>
@@ -1768,23 +1768,23 @@
 		this means that a hostname lookup first tries the <code class="filename">/etc/hosts</code>.
 		If this fails to resolve, it attempts a DNS lookup, and if that fails, it tries a
 		WINS lookup.
-		</p><p><a class="indexterm" name="id2620029"></a><a class="indexterm" name="id2620037"></a><a class="indexterm" name="id2620045"></a>
+		</p><p><a class="indexterm" name="id383435"></a><a class="indexterm" name="id383442"></a><a class="indexterm" name="id383450"></a>
 		The addition of the WINS-based name lookup makes sense only if NetBIOS over TCP/IP has
 		been enabled on all Windows clients. Where NetBIOS over TCP/IP has been disabled, DNS
 		is the preferred name resolution technology. This usually makes most sense when Samba
 		is a client of an Active Directory domain, where NetBIOS use has been disabled. In this
 		case, the Windows 200x autoregisters all locator records it needs with its own DNS
 		server or servers.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2620065"></a><a name="id2620067"></a></td><td align="left" valign="top"><p>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id383466"></a><a name="id383469"></a></td><td align="left" valign="top"><p>
 		Our Windows 2003 Server Active Directory domain runs with NetBIOS disabled. Can we
 		use Samba-3 with that configuration?
 		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
 		Yes.
-		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2620084"></a><a name="id2620086"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id2620089"></a><a class="indexterm" name="id2620103"></a>
+		</p></td></tr><tr class="question"><td align="left" valign="top"><a name="id383484"></a><a name="id383486"></a></td><td align="left" valign="top"><p><a class="indexterm" name="id383489"></a><a class="indexterm" name="id383504"></a>
 		When I tried to execute net ads join, I got no output. It did not work, so
 		I think that it failed. I then executed net rpc join and that worked fine.
 		That is okay, isn't it?
-		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id2620127"></a><a class="indexterm" name="id2620135"></a>
+		</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p><a class="indexterm" name="id383526"></a><a class="indexterm" name="id383534"></a>
 		No. This is not okay. It means that your Samba-3 client has joined the ADS domain as
 		a Windows NT4 client, and Samba-3 will not be using Kerberos-based authentication.
 		</p></td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="DMSMig.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="DMSMig.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="upgrades.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part II. Domain Members, Updating Samba and Migration </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 8. Updating Samba-3</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-ByExample/upgrades.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-ByExample/upgrades.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-ByExample/upgrades.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,14 +1,14 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 8. Updating Samba-3</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="DMSMig.html" title="Part II. Domain Members, Updating Samba and Migration"><link rel="prev" href="unixclients.html" title="Chapter 7. Adding Domain Member Servers and Clients"><link rel="next" href="ntmigration.html" title="Chapter 9. Migrating NT4 Domain to Samba-3"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 8. Updating Samba-3</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="unixclients.html">Prev</a> </td><th width="60%" align="center">Part II. Domain Members, Updating Samba and Migration</th><td width="20%" align="right"> <a accesskey="n" href="ntmigration.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="upgrades"></a>Chapter 8. Updating Samba-3</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="upgrades.html#id2620252">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrades.html#id2620348">Cautions and Notes</a></span></dt></dl></dd><dt><span class="sect1"><a href="upgrades.html#id2621677">Upgrading from Samba 1.x and 2.x to Samba-3</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a></span></dt><dt><span class="sect2"><a href="upgrades.html#id2622046">Applicable to All Samba 2.x to Samba-3 Upgrades</a></span></dt><dt><span class="sect2"><a href="upgrades.html#id2622379">Samba-2.x with LDAP Support</a></span></dt></dl></dd><dt><span class="sect1"><a href="upgrades.html#id2622561">Updating a Samba-3 Installation</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrades.html#id2622671">Samba-3 to Samba-3 Updates on the Same Server</a></span></dt><dt><span class="sect2"><a href="upgrades.html#id2622874">Migrating Samba-3 to a New Server</a></span></dt><dt><span class="sect2"><a href="upgrades.html#id2623289">Migration of Samba Accounts to Active Directory</a></span></dt></dl></dd></dl></div><p>
-<a class="indexterm" name="id2620168"></a>
-<a class="indexterm" name="id2620175"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 8. Updating Samba-3</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="Samba-3 by Example"><link rel="up" href="DMSMig.html" title="Part II. Domain Members, Updating Samba and Migration"><link rel="prev" href="unixclients.html" title="Chapter 7. Adding Domain Member Servers and Clients"><link rel="next" href="ntmigration.html" title="Chapter 9. Migrating NT4 Domain to Samba-3"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 8. Updating Samba-3</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="unixclients.html">Prev</a> </td><th width="60%" align="center">Part II. Domain Members, Updating Samba and Migration</th><td width="20%" align="right"> <a accesskey="n" href="ntmigration.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="upgrades"></a>Chapter 8. Updating Samba-3</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="upgrades.html#id383639">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrades.html#id383722">Cautions and Notes</a></span></dt></dl></dd><dt><span class="sect1"><a href="upgrades.html#id384934">Upgrading from Samba 1.x and 2.x to Samba-3</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrades.html#sbeug2">Samba 1.9.x and 2.x Versions Without LDAP</a></span></dt><dt><span class="sect2"><a href="upgrades.html#id385275">Applicable to All Samba 2.x to Samba-3 Upgrades</a></span></dt><dt><span class="sect2"><a href="upgrades.html#id385597">Samba-2.x with LDAP Support</a></span></dt></dl></dd><dt><span class="sect1"><a href="upgrades.html#id385712">Updating a Samba-3 Installation</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrades.html#id385807">Samba-3 to Samba-3 Updates on the Same Server</a></span></dt><dt><span class="sect2"><a href="upgrades.html#id385991">Migrating Samba-3 to a New Server</a></span></dt><dt><span class="sect2"><a href="upgrades.html#id386368">Migration of Samba Accounts to Active Directory</a></span></dt></dl></dd></dl></div><p>
+<a class="indexterm" name="id383565"></a>
+<a class="indexterm" name="id383571"></a>
 It was a little difficult to select an appropriate title for this chapter.
 From email messages on the Samba mailing lists it is clear that many people
 consider the updating and upgrading of Samba to be a migration matter. Others
 talk about migrating Samba servers when in fact the issue at hand is one of
 installing a new Samba server to replace an older existing Samba server.
 </p><p>
-<a class="indexterm" name="id2620191"></a>
-<a class="indexterm" name="id2620198"></a>
+<a class="indexterm" name="id383585"></a>
+<a class="indexterm" name="id383592"></a>
 There has also been much talk about migration of Samba-3 from an smbpasswd
 passdb backend to the use of the tdbsam or ldapsam facilities that are new
 to Samba-3.
@@ -17,19 +17,19 @@
 people apply to these modes by which Samba servers are updated. This is further 
 highlighted by an email posting that included the following neat remark:
 </p><div class="blockquote"><blockquote class="blockquote"><p>
-<a class="indexterm" name="id2620219"></a>
+<a class="indexterm" name="id383609"></a>
 I like the &#8220;<span class="quote">net rpc vampire</span>&#8221; on NT4, but that to my surprise does
 not seem to work against a Samba PDC and, if addressed in the Samba to Samba
 context in either book, I could not find it.
 </p></blockquote></div><p>
-<a class="indexterm" name="id2620240"></a>
+<a class="indexterm" name="id383629"></a>
 So in response to the significant request for these situations to be better 
 documented, this chapter has now been added. User contributions and documentation
 of real-world experiences are a most welcome addition to this chapter.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2620252"></a>Introduction</h2></div></div></div><p>
-<a class="indexterm" name="id2620260"></a>
-<a class="indexterm" name="id2620267"></a>
-<a class="indexterm" name="id2620274"></a>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id383639"></a>Introduction</h2></div></div></div><p>
+<a class="indexterm" name="id383646"></a>
+<a class="indexterm" name="id383653"></a>
+<a class="indexterm" name="id383660"></a>
 A Windows network administrator explained in an email what changes he was
 planning to make and followed with the question: &#8220;<span class="quote">Anyone done this
 before?</span>&#8221; Many of us have upgraded and updated Samba without incident.
@@ -44,28 +44,28 @@
 fails to take adequate steps to avoid situations that may inflict lost
 productivity on them.
 </p><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p>
-<a class="indexterm" name="id2620305"></a>
-<a class="indexterm" name="id2620312"></a>
+<a class="indexterm" name="id383685"></a>
+<a class="indexterm" name="id383692"></a>
 Samba makes it possible to upgrade and update configuration files, but it
 is not possible to downgrade the configuration files. Please ensure that
 all configuration and control files are backed up to permit a down-grade
 in the rare event that this may be necessary.
 </p></div><p>
-<a class="indexterm" name="id2620326"></a>
-<a class="indexterm" name="id2620333"></a>
+<a class="indexterm" name="id383704"></a>
+<a class="indexterm" name="id383711"></a>
 It is prudent also to backup all data files on the server before attempting
 to perform a major upgrade. Many administrators have experienced the consequences
 of failure to take adequate precautions. So what is adequate? That is simple!
 If data is lost during an upgrade or update and it can not be restored,
 the precautions taken were inadequate. If a backup was not needed, but was available,
 caution was on the side of the victor.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2620348"></a>Cautions and Notes</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id383722"></a>Cautions and Notes</h3></div></div></div><p>
 	Someone once said, &#8220;<span class="quote">It is good to be sorry, but better never to need to be!</span>&#8221;
 	These are wise words of advice to those contemplating a Samba upgrade or update.
 	</p><p>
-	<a class="indexterm" name="id2620366"></a>
-	<a class="indexterm" name="id2620373"></a>
-	<a class="indexterm" name="id2620380"></a>
+	<a class="indexterm" name="id383738"></a>
+	<a class="indexterm" name="id383745"></a>
+	<a class="indexterm" name="id383752"></a>
 	This is as good a time as any to define the terms <code class="constant">upgrade</code> and
 	<code class="constant">update</code>. The term <code class="constant">upgrade</code> refers to
 	the installation of a version of Samba that is a whole generation or more ahead of
@@ -73,12 +73,12 @@
 	number. So far Samba has been released in generations 1.x, 2.x, 3.x, and currently 4.0
 	is in development.
 	</p><p>
-	<a class="indexterm" name="id2620406"></a>
+	<a class="indexterm" name="id383776"></a>
 	The term <code class="constant">update</code> refers to a minor version number installation
 	in place of one of the same generation. For example, updating from Samba 3.0.10 to 3.0.14
 	is an update. The move from Samba 2.0.7 to 3.0.14 is an upgrade.
 	</p><p>
-	<a class="indexterm" name="id2620424"></a>
+	<a class="indexterm" name="id383791"></a>
 	While the use of these terms is an exercise in semantics, what needs to be realized
 	is that there are major functional differences between a Samba 2.x release and a Samba
 	3.0.x release. Such differences may require a significantly different approach to
@@ -90,13 +90,13 @@
 	the greater the risk that noone will read it, but where there is no documentation,
 	noone can read it!</span>&#8221; While true, some documentation is an evil necessity.
 	It is hoped that this update to the documentation will avoid both extremes.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2620452"></a>Security Identifiers (SIDs)</h4></div></div></div><p>
-	<a class="indexterm" name="id2620460"></a>
-	<a class="indexterm" name="id2620469"></a>
-	<a class="indexterm" name="id2620476"></a>
-	<a class="indexterm" name="id2620482"></a>
-	<a class="indexterm" name="id2620489"></a>
-	<a class="indexterm" name="id2620498"></a>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id383812"></a>Security Identifiers (SIDs)</h4></div></div></div><p>
+	<a class="indexterm" name="id383820"></a>
+	<a class="indexterm" name="id383829"></a>
+	<a class="indexterm" name="id383836"></a>
+	<a class="indexterm" name="id383843"></a>
+	<a class="indexterm" name="id383849"></a>
+	<a class="indexterm" name="id383858"></a>
 	Before the days of Windows NT and OS/2, every Windows and DOS networking client
 	that used the SMB protocols was an entirely autonomous entity. There was no concept
 	of a security identifier for a machine or a user outside of the username, the
@@ -104,46 +104,46 @@
 	in the same context as the way that the SID is used since the development of
 	Windows NT 3.10.
 	</p><p>
-	<a class="indexterm" name="id2620518"></a>
-	<a class="indexterm" name="id2620525"></a>
-	<a class="indexterm" name="id2620531"></a>
-	<a class="indexterm" name="id2620538"></a>
-	<a class="indexterm" name="id2620545"></a>
-	<a class="indexterm" name="id2620551"></a>
+	<a class="indexterm" name="id383874"></a>
+	<a class="indexterm" name="id383881"></a>
+	<a class="indexterm" name="id383888"></a>
+	<a class="indexterm" name="id383895"></a>
+	<a class="indexterm" name="id383901"></a>
+	<a class="indexterm" name="id383908"></a>
 	Versions of Samba prior to 1.9 did not make use of a SID. Instead they make exclusive use
 	of the username that is embedded in the SessionSetUpAndX component of the connection
 	setup process between a Windows client and an SMB/CIFS server. 
 	</p><p>
-	<a class="indexterm" name="id2620568"></a>
-	<a class="indexterm" name="id2620575"></a>
-	<a class="indexterm" name="id2620581"></a>
+	<a class="indexterm" name="id383922"></a>
+	<a class="indexterm" name="id383929"></a>
+	<a class="indexterm" name="id383936"></a>
 	Around November 1997 support was added to Samba-1.9 to handle the Windows security
 	RPC-based protocols that implemented support for Samba to store a machine SID. This
 	information was stored in a file called <code class="filename">MACHINE.SID.</code>
 	</p><p>
-	<a class="indexterm" name="id2620601"></a>
-	<a class="indexterm" name="id2620608"></a>
-	<a class="indexterm" name="id2620614"></a>
+	<a class="indexterm" name="id383953"></a>
+	<a class="indexterm" name="id383960"></a>
+	<a class="indexterm" name="id383967"></a>
 	Within the lifetime of the early Samba 2.x series, the machine SID information was
 	relocated into a tdb file called <code class="filename">secrets.tdb</code>, which is where
 	it is still located in Samba 3.0.x along with other information that pertains to the
 	local machine and its role within a domain security context.
 	</p><p>
-	<a class="indexterm" name="id2620635"></a>
-	<a class="indexterm" name="id2620644"></a>
-	<a class="indexterm" name="id2620654"></a>
-	<a class="indexterm" name="id2620660"></a>
+	<a class="indexterm" name="id383985"></a>
+	<a class="indexterm" name="id383994"></a>
+	<a class="indexterm" name="id384003"></a>
+	<a class="indexterm" name="id384010"></a>
 	There are two types of SID, those pertaining to the machine itself and the domain to
 	which it may belong, and those pertaining to users and groups within the security
 	context of the local machine, in the case of standalone servers (SAS) and domain member
 	servers (DMS).
 	</p><p>
-	<a class="indexterm" name="id2620675"></a>
-	<a class="indexterm" name="id2620682"></a>
-	<a class="indexterm" name="id2620689"></a>
-	<a class="indexterm" name="id2620695"></a>
-	<a class="indexterm" name="id2620702"></a>
-	<a class="indexterm" name="id2620709"></a>
+	<a class="indexterm" name="id384022"></a>
+	<a class="indexterm" name="id384029"></a>
+	<a class="indexterm" name="id384036"></a>
+	<a class="indexterm" name="id384043"></a>
+	<a class="indexterm" name="id384050"></a>
+	<a class="indexterm" name="id384056"></a>
 	When the Samba <code class="literal">smbd</code> daemon is first started, if the <code class="filename">secrets.tdb</code>
 	file does not exist, it is created at the first client connection attempt. If this file does
 	exist, <code class="literal">smbd</code> checks that there is a machine SID (if it is a domain controller,
@@ -153,7 +153,7 @@
 	manner. This means that each time it is generated for a particular combination of machine name
 	(hostname) and domain name (workgroup), it will be different.
 	</p><p>
-	<a class="indexterm" name="id2620758"></a>
+	<a class="indexterm" name="id384101"></a>
 	The SID is the key used by MS Windows networking for all networking operations. This means
 	that when the machine or domain SID changes, all security-encoded objects such as profiles
 	and ACLs may become unusable.
@@ -162,22 +162,22 @@
 	the event of a change of hostname (machine name) or domain name (workgroup) the SID can
 	be restored to its previous value.
 	</p></div><p>
-	<a class="indexterm" name="id2620780"></a>
-	<a class="indexterm" name="id2620787"></a>
-	<a class="indexterm" name="id2620793"></a>
-	<a class="indexterm" name="id2620800"></a>
-	<a class="indexterm" name="id2620807"></a>
-	<a class="indexterm" name="id2620814"></a>
-	<a class="indexterm" name="id2620820"></a>
-	<a class="indexterm" name="id2620827"></a>
-	<a class="indexterm" name="id2620834"></a>
-	<a class="indexterm" name="id2620841"></a>
+	<a class="indexterm" name="id384118"></a>
+	<a class="indexterm" name="id384125"></a>
+	<a class="indexterm" name="id384132"></a>
+	<a class="indexterm" name="id384138"></a>
+	<a class="indexterm" name="id384145"></a>
+	<a class="indexterm" name="id384152"></a>
+	<a class="indexterm" name="id384159"></a>
+	<a class="indexterm" name="id384166"></a>
+	<a class="indexterm" name="id384172"></a>
+	<a class="indexterm" name="id384179"></a>
 	In Samba-3 on a domain controller (PDC or BDC), the domain name controls the domain
 	SID. On all prior versions the hostname (computer name, or NetBIOS name) controlled
 	the SID. On a standalone server the hostname still controls the SID.
 	</p><p>
-	<a class="indexterm" name="id2620855"></a>
-	<a class="indexterm" name="id2620864"></a>
+	<a class="indexterm" name="id384191"></a>
+	<a class="indexterm" name="id384200"></a>
 	The local machine SID can be backed up using this procedure (Samba-3):
 </p><pre class="screen">
 <code class="prompt">root# </code> net getlocalsid &gt; /etc/samba/my-local-SID
@@ -200,7 +200,7 @@
 	ability to read the older tdb file and to perform an in-situ update to the latest tdb format.
 	This is not a reversible process  it is a one-way upgrade.
 	</p><p>
-	<a class="indexterm" name="id2620952"></a>
+	<a class="indexterm" name="id384281"></a>
 	In the course of the Samba 2.0.x series the <code class="literal">smbpasswd</code> was modified to
 	permit the domain SID to be captured to the <code class="filename">secrets.tdb</code> file by executing:
 </p><pre class="screen">
@@ -217,8 +217,8 @@
 <code class="prompt">root# </code> smbpasswd -W S-1-5-21-726309263-4128913605-1168186429
 </pre><p>
 	</p><p>
-	<a class="indexterm" name="id2621026"></a>
-	<a class="indexterm" name="id2621033"></a>
+	<a class="indexterm" name="id384350"></a>
+	<a class="indexterm" name="id384356"></a>
 	Domain security information, which includes the domain SID, can be obtained from Samba-2.2.x
 	systems by executing:
 </p><pre class="screen">
@@ -237,9 +237,9 @@
 	It is a very good practice to store this SID information in a safely kept file, just in
 	case it is ever needed at a later date.
 	</p><p>
-	<a class="indexterm" name="id2621079"></a>
-	<a class="indexterm" name="id2621086"></a>
-	<a class="indexterm" name="id2621093"></a>
+	<a class="indexterm" name="id384398"></a>
+	<a class="indexterm" name="id384405"></a>
+	<a class="indexterm" name="id384412"></a>
 	Take note that the domain SID is used extensively in Samba. Where LDAP is used for the
 	<em class="parameter"><code>passdb backend</code></em>, all user, group, and trust accounts are encoded
 	with the domain SID. This means that if the domain SID changes for any reason, the entire
@@ -250,9 +250,9 @@
 <code class="prompt">root# </code> slapcat -v -l filename.ldif
 </pre><p>
 	</p><p>
-	<a class="indexterm" name="id2621129"></a>
-	<a class="indexterm" name="id2621136"></a>
-	<a class="indexterm" name="id2621142"></a>
+	<a class="indexterm" name="id384443"></a>
+	<a class="indexterm" name="id384450"></a>
+	<a class="indexterm" name="id384456"></a>
 	When the domain SID has changed, roaming profiles cease to be functional. The recovery
 	of roaming profiles necessitates resetting of the domain portion of the user SID
 	that owns the profile. This is encoded in the <code class="filename">NTUser.DAT</code> and can be
@@ -261,9 +261,9 @@
 	complain to the Samba Team if this utility is missing; that issue that must be
 	addressed to the creator of the RPM package. The Samba Team do their best to make
 	available all the tools needed to manage a Samba-based Windows networking environment.
-	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2621180"></a>Change of hostname</h4></div></div></div><p>
-	<a class="indexterm" name="id2621188"></a>
-	<a class="indexterm" name="id2621197"></a>
+	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id384485"></a>Change of hostname</h4></div></div></div><p>
+	<a class="indexterm" name="id384493"></a>
+	<a class="indexterm" name="id384502"></a>
 	Samba uses two methods by which the primary NetBIOS machine name (also known as a computer
 	name or the hostname) may be determined: If the <code class="filename">smb.conf</code> file contains a
 	<em class="parameter"><code>netbios name</code></em> entry, its value will be used directly. In the absence
@@ -277,13 +277,13 @@
 	Do NOT change the hostname or the <em class="parameter"><code>netbios name</code></em>. If this
 	is changed, be sure to reset the machine SID to the original setting. Otherwise
 	there may be serious interoperability and/or operational problems.
-	</p></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2621245"></a>Change of Workgroup (Domain) Name</h4></div></div></div><p>
-	<a class="indexterm" name="id2621254"></a>
+	</p></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id384544"></a>Change of Workgroup (Domain) Name</h4></div></div></div><p>
+	<a class="indexterm" name="id384551"></a>
 	The domain name of a Samba server is identical to the workgroup name and is
 	set in the <code class="filename">smb.conf</code> file using the <em class="parameter"><code>workgroup</code></em> parameter.
 	This has been consistent throughout the history of Samba and across all versions.
 	</p><p>
-	<a class="indexterm" name="id2621279"></a>
+	<a class="indexterm" name="id384575"></a>
 	Be aware that when the workgroup name is changed, a new SID will be generated.
 	The old domain SID can be reset using the procedure outlined earlier in this chapter.
 	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="sbeug1"></a>Location of config files</h4></div></div></div><p>
@@ -292,7 +292,7 @@
 	have varied the location of the Samba control files. This has led to some confusion
 	for network administrators.
 	</p><p>
-	<a class="indexterm" name="id2621310"></a>
+	<a class="indexterm" name="id384602"></a>
 	The Samba 1.9.x <code class="filename">smb.conf</code> file may be found either in the <code class="filename">/etc</code>
 	directory or in <code class="filename">/usr/local/samba/lib</code>.
 	</p><p>
@@ -300,12 +300,12 @@
 	on Linux systems to the <code class="filename">/etc/samba</code> directory where it
 	remains located also for Samba 3.0.x installations.
 	</p><p>
-	<a class="indexterm" name="id2621357"></a>
+	<a class="indexterm" name="id384647"></a>
 	Samba 2.x introduced the <code class="filename">secrets.tdb</code> file that is also stored in the
 	<code class="filename">/etc/samba</code> directory, or in the <code class="filename">/usr/local/samba/lib</code>
 	directory subsystem.
 	</p><p>
-	<a class="indexterm" name="id2621386"></a>
+	<a class="indexterm" name="id384676"></a>
 	The location at which <code class="literal">smbd</code> expects to find all configuration and control
 	files is determined at the time of compilation of Samba. For versions of Samba prior to
 	3.0, one way to find the expected location of these files is to execute:
@@ -317,7 +317,7 @@
 	Note: The <code class="literal">smbd</code> executable may be located in the path
 	<code class="filename">/usr/local/samba/sbin</code>.
 	</p><p>
-	<a class="indexterm" name="id2621444"></a>
+	<a class="indexterm" name="id384730"></a>
 	Samba-3 provides a neat new way to track the location of all control files as well as to
 	find the compile-time options used as the Samba package was built. Here  is how the dark
 	secrets of the internals of the location of control files within Samba executables can
@@ -348,37 +348,37 @@
  ... 
 </pre><p>
 	</p><p>
-	<a class="indexterm" name="id2621482"></a>
+	<a class="indexterm" name="id384759"></a>
 	It is important that both the <code class="filename">smb.conf</code> file and the <code class="filename">secrets.tdb</code>
 	be backed up before attempting any upgrade. The <code class="filename">secrets.tdb</code> file
 	is version-encoded, and therefore a newer version may not work with an older version
 	of Samba. A backup means that it is always possible to revert a failed or problematic
 	upgrade.
-	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2621512"></a>International Language Support</h4></div></div></div><p>
-	<a class="indexterm" name="id2621520"></a>
-	<a class="indexterm" name="id2621527"></a>
-	<a class="indexterm" name="id2621534"></a>
-	<a class="indexterm" name="id2621540"></a>
+	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id384787"></a>International Language Support</h4></div></div></div><p>
+	<a class="indexterm" name="id384795"></a>
+	<a class="indexterm" name="id384801"></a>
+	<a class="indexterm" name="id384808"></a>
+	<a class="indexterm" name="id384815"></a>
 	Samba-2.x had no support for Unicode; instead, all national language character-set support in file names
 	was done using particular locale codepage mapping techniques. Samba-3 supports Unicode in file names, thus
 	providing true internationalization support.
 	</p><p>
-	<a class="indexterm" name="id2621555"></a>
+	<a class="indexterm" name="id384827"></a>
 	Non-English users whose national language character set has special characters and who upgrade naively will 
 	find that many files that have the special characters in the file name will see them garbled and jumbled up.
 	This typically happens with umlauts and accents because these characters were particular to the codepage
 	that was in use with Samba-2.x using an 8-bit encoding scheme.
 	</p><p>
-	<a class="indexterm" name="id2621572"></a>
+	<a class="indexterm" name="id384841"></a>
 	Files that are created with Samba-3 will use UTF-8 encoding. Should the file system ever end up with a
 	mix of codepage (unix charset)-encoded file names and UTF-8-encoded file names, the mess will take some
 	effort to set straight.
 	</p><p>
-	<a class="indexterm" name="id2621586"></a>
+	<a class="indexterm" name="id384853"></a>
 	A very helpful tool is available from Bjorn Jacke's <a class="ulink" href="http://j3e.de/linux/convmv/" target="_top">convmv</a>
 	work. Convmv is a tool that can be used to convert file and directory names from one encoding method to
 	another. The most common use for this tool is to convert locale-encoded files to UTF-8 Unicode encoding.
-	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2621606"></a>Updates and Changes in Idealx smbldap-tools</h4></div></div></div><p>
+	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id384870"></a>Updates and Changes in Idealx smbldap-tools</h4></div></div></div><p>
 	The smbldap-tools have been maturing rapidly over the past year. With maturation comes change.
 	The location of the <code class="filename">smbldap.conf</code> and the <code class="filename">smbldap_bind.conf</code>
 	configuration files have been moved from the directory <code class="filename">/etc/smbldap-tools</code> to
@@ -392,7 +392,7 @@
 	<code class="constant">sambaDomainName</code>. Anyone who updates from an older version to the
 	current release should note that the information stored under <code class="constant">NextFreeUnixId</code>
 	must now be relocated to the DIT object <code class="constant">sambaDomainName</code>.
-	</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2621677"></a>Upgrading from Samba 1.x and 2.x to Samba-3</h2></div></div></div><p>
+	</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id384934"></a>Upgrading from Samba 1.x and 2.x to Samba-3</h2></div></div></div><p>
 Sites that are being upgraded from Samba-2 (or earlier versions) to Samba-3
 may experience little difficulty or may require a lot of effort, depending
 on the complexity of the configuration. Samba-1.9.x upgrades to Samba-3 will
@@ -405,10 +405,10 @@
 </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="sbeug2"></a>Samba 1.9.x and 2.x Versions Without LDAP</h3></div></div></div><p>
 	Where it is necessary to upgrade an old Samba installation to Samba-3,
 	the following procedure can be followed:
-	</p><div class="procedure"><a name="id2621715"></a><p class="title"><b>Procedure 8.1. Upgrading from a Pre-Samba-3 Version</b></p><ol type="1"><li><p>
-		<a class="indexterm" name="id2621726"></a>
-		<a class="indexterm" name="id2621733"></a>
-		<a class="indexterm" name="id2621740"></a>
+	</p><div class="procedure"><a name="id384965"></a><p class="title"><b>Procedure 8.1. Upgrading from a Pre-Samba-3 Version</b></p><ol type="1"><li><p>
+		<a class="indexterm" name="id384976"></a>
+		<a class="indexterm" name="id384983"></a>
+		<a class="indexterm" name="id384989"></a>
 		Stop Samba. This can be done using the appropriate system tool
 		that is particular for each operating system or by executing the
 		<code class="literal">kill</code> command on <code class="literal">smbd</code>,
@@ -423,10 +423,10 @@
 		Find the location of the <code class="filename">secrets.tdb</code> file and
 		back it up to a safe location.
 		</p></li><li><p>
-		<a class="indexterm" name="id2621821"></a>
-		<a class="indexterm" name="id2621828"></a>
-		<a class="indexterm" name="id2621835"></a>
-		<a class="indexterm" name="id2621842"></a>
+		<a class="indexterm" name="id385068"></a>
+		<a class="indexterm" name="id385074"></a>
+		<a class="indexterm" name="id385081"></a>
+		<a class="indexterm" name="id385088"></a>
 		Find the location of the lock directory. This is the directory
 		in which Samba stores all its tdb control files. The default
 		location used by the Samba Team is in
@@ -437,7 +437,7 @@
 		<code class="filename">/var/lib/samba</code> directory. Copy all the
 		tdb files to a safe location.
 		</p></li><li><p>
-		<a class="indexterm" name="id2621880"></a>
+		<a class="indexterm" name="id385122"></a>
 		It is now safe to upgrade the Samba installation. On Linux systems
 		it is not necessary to remove the Samba RPMs because a simple
 		upgrade installation will automatically remove the old files.
@@ -456,7 +456,7 @@
 		</p></li><li><p>
 		Do not change the workgroup name.
 		</p></li><li><p>
-		<a class="indexterm" name="id2621936"></a>
+		<a class="indexterm" name="id385171"></a>
 		Execute the <code class="literal">testparm</code> to validate the <code class="filename">smb.conf</code> file.
 		This process will flag any parameters that are no longer supported.
 		It will also flag configuration settings that may be in conflict.
@@ -468,67 +468,67 @@
 <code class="prompt">root# </code> cd /etc/samba
 <code class="prompt">root# </code> testparm -s smb.conf.master &gt; smb.conf
 </pre><p>
-	<a class="indexterm" name="id2621993"></a>
+	<a class="indexterm" name="id385226"></a>
 		The resulting <code class="filename">smb.conf</code> file will be stripped of all comments
 		and of all nonconforming configuration settings.
 		</p></li><li><p>
-		<a class="indexterm" name="id2622015"></a>
+		<a class="indexterm" name="id385246"></a>
 		It is now safe to start Samba using the appropriate system tool.
 		Alternately, it is possible to just execute <code class="literal">nmbd</code>,
 		<code class="literal">smbd</code>, and <code class="literal">winbindd</code> for the command
 		line while logged in as the root user.
-		</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2622046"></a>Applicable to All Samba 2.x to Samba-3 Upgrades</h3></div></div></div><p>
-	<a class="indexterm" name="id2622054"></a>
-	<a class="indexterm" name="id2622060"></a>
-	<a class="indexterm" name="id2622067"></a>
+		</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id385275"></a>Applicable to All Samba 2.x to Samba-3 Upgrades</h3></div></div></div><p>
+	<a class="indexterm" name="id385283"></a>
+	<a class="indexterm" name="id385290"></a>
+	<a class="indexterm" name="id385297"></a>
 	Samba 2.x servers that were running as a domain controller (PDC)
 	require changes to the configuration of the scripting interface
 	tools that Samba uses to perform OS updates for
 	users, groups, and trust accounts (machines and interdomain).
 	</p><p>
-	<a class="indexterm" name="id2622082"></a>
+	<a class="indexterm" name="id385309"></a>
 	The following parameters are new to Samba-3 and should be correctly configured.
 	Please refer to <a class="link" href="secure.html" title="Chapter 3. Secure Office Networking">&#8220;Secure Office Networking&#8221;</a> through <a class="link" href="2000users.html" title="Chapter 6. A Distributed 2000-User Network">&#8220;A Distributed 2000-User Network&#8221;</a>
 	in this book for examples of use of the new parameters shown here:
-	<a class="indexterm" name="id2622103"></a>
-	<a class="indexterm" name="id2622110"></a>
-	<a class="indexterm" name="id2622116"></a>
-	<a class="indexterm" name="id2622124"></a>
-	<a class="indexterm" name="id2622130"></a>
-	<a class="indexterm" name="id2622138"></a>
-	<a class="indexterm" name="id2622145"></a>
+	<a class="indexterm" name="id385328"></a>
+	<a class="indexterm" name="id385335"></a>
+	<a class="indexterm" name="id385342"></a>
+	<a class="indexterm" name="id385349"></a>
+	<a class="indexterm" name="id385355"></a>
+	<a class="indexterm" name="id385362"></a>
+	<a class="indexterm" name="id385369"></a>
 	</p><p>
 	</p><table class="simplelist" border="0" summary="Simple list"><tr><td><p>add group script</p></td></tr><tr><td><p>add machine script</p></td></tr><tr><td><p>add user to group script</p></td></tr><tr><td><p>delete group script</p></td></tr><tr><td><p>delete user from group script</p></td></tr><tr><td><p>passdb backend</p></td></tr><tr><td><p>set primary group script</p></td></tr></table><p>
 	</p><p>
-	<a class="indexterm" name="id2622197"></a>
-	<a class="indexterm" name="id2622204"></a>
+	<a class="indexterm" name="id385420"></a>
+	<a class="indexterm" name="id385427"></a>
 	The <em class="parameter"><code>add machine script</code></em> functionality was previously
 	handled by the <em class="parameter"><code>add user script</code></em>, which in Samba-3 is
 	used exclusively to add user accounts.
 	</p><p>
-	<a class="indexterm" name="id2622228"></a>
-	<a class="indexterm" name="id2622235"></a>
-	<a class="indexterm" name="id2622242"></a>
-	<a class="indexterm" name="id2622248"></a>
-	<a class="indexterm" name="id2622255"></a>
-	<a class="indexterm" name="id2622262"></a>
-	<a class="indexterm" name="id2622269"></a>
-	<a class="indexterm" name="id2622276"></a>
-	<a class="indexterm" name="id2622282"></a>
+	<a class="indexterm" name="id385450"></a>
+	<a class="indexterm" name="id385457"></a>
+	<a class="indexterm" name="id385463"></a>
+	<a class="indexterm" name="id385470"></a>
+	<a class="indexterm" name="id385477"></a>
+	<a class="indexterm" name="id385484"></a>
+	<a class="indexterm" name="id385491"></a>
+	<a class="indexterm" name="id385497"></a>
+	<a class="indexterm" name="id385504"></a>
 	Where the <em class="parameter"><code>passdb backend</code></em> used is either <code class="constant">smbpasswd</code>
 	(the default) or the new <code class="constant">tdbsam</code>, the system interface scripts
 	are typically used. These involve use of OS tools such as <code class="literal">useradd</code>,
 	<code class="literal">usermod</code>, <code class="literal">userdel</code>, <code class="literal">groupadd</code>,
 	<code class="literal">groupmod</code>, <code class="literal">groupdel</code>, and so on.
 	</p><p>
-	<a class="indexterm" name="id2622343"></a>
-	<a class="indexterm" name="id2622350"></a>
-	<a class="indexterm" name="id2622357"></a>
+	<a class="indexterm" name="id385563"></a>
+	<a class="indexterm" name="id385570"></a>
+	<a class="indexterm" name="id385577"></a>
 	Where the <em class="parameter"><code>passdb backend</code></em> makes use of an LDAP directory,
 	it is necessary either to use the <code class="constant">smbldap-tools</code> provided
 	by Idealx or to use an alternate toolset provided by a third
 	party or else home-crafted to manage the LDAP directory accounts.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2622379"></a>Samba-2.x with LDAP Support</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id385597"></a>Samba-2.x with LDAP Support</h3></div></div></div><p>
 	Samba version 2.x could be compiled for use either with or without LDAP.
 	The LDAP control settings in the <code class="filename">smb.conf</code> file in this old version are
 	completely different (and less complete) than they are with Samba-3. This
@@ -538,8 +538,8 @@
 	Follow the procedure outlined in <a class="link" href="upgrades.html#sbeug2" title="Samba 1.9.x and 2.x Versions Without LDAP">&#8220;Samba 1.9.x and 2.x Versions Without LDAP&#8221;</a> to affect a migration
 	of all files to the correct locations.
 	</p><p>
-	<a class="indexterm" name="id2622414"></a>
-	<a class="indexterm" name="id2622420"></a>
+	<a class="indexterm" name="id385628"></a>
+	<a class="indexterm" name="id385634"></a>
 	The Samba SAM schema required for Samba-3 is significantly different from that
 	used with Samba 2.x. This means that the LDAP directory must be updated
 	using the procedure outlined in the Samba WHATSNEW.txt file that accompanies
@@ -694,19 +694,19 @@
 Due to a limitation in Samba's smb.conf parsing, you should not surround
 the DN's with quotation marks.
 </pre><p>
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2622561"></a>Updating a Samba-3 Installation</h2></div></div></div><p>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id385712"></a>Updating a Samba-3 Installation</h2></div></div></div><p>
 The key concern in this section is to deal with the changes that have been
 affected in Samba-3 between the Samba-3.0.0 release and the current update.
 Network administrators have expressed concerns over the steps that should be
 taken to update Samba-3 versions.
 </p><p>
-<a class="indexterm" name="id2622577"></a>
+<a class="indexterm" name="id385725"></a>
 The information in <a class="link" href="upgrades.html#sbeug1" title="Location of config files">&#8220;Location of config files&#8221;</a> would not be necessary if every
 person who has ever produced Samba executable (binary) files could agree on
 the preferred location of the <code class="filename">smb.conf</code> file and other Samba control files.
 Clearly, such agreement is further away than a pipedream.
 </p><p>
-<a class="indexterm" name="id2622603"></a>
+<a class="indexterm" name="id385749"></a>
 Vendors and packagers who produce Samba binary installable packages do not,
 as a rule, use the default paths used by the Samba-Team for the location of
 the binary files, the <code class="filename">smb.conf</code> file, and the Samba control files (tdb's
@@ -719,54 +719,54 @@
 uninformed administrator deals with apparent failure of the update to take
 effect.
 </p><p>
-<a class="indexterm" name="id2622636"></a>
+<a class="indexterm" name="id385777"></a>
 The best advice for those lacking in code compilation experience is to use
 only vendor (or Samba-Team) provided binary packages. The Samba packages
 that are provided by the Samba-Team are generally built to use file paths
 that are compatible with the original OS vendor's practices.
 </p><p>
-<a class="indexterm" name="id2622651"></a>
-<a class="indexterm" name="id2622658"></a>
+<a class="indexterm" name="id385789"></a>
+<a class="indexterm" name="id385796"></a>
 If you are not sure whether a binary package complies with the OS
 vendor's practices, it is better to ask the package maintainer via
 email than to waste much time dealing with the nuances.
 Alternately, just diagnose the paths specified by the binary files following
 the procedure outlined above.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2622671"></a>Samba-3 to Samba-3 Updates on the Same Server</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id385807"></a>Samba-3 to Samba-3 Updates on the Same Server</h3></div></div></div><p>
 	The guidance in this section deals with updates to an existing
 	Samba-3 server installation.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2622682"></a>Updating from Samba Versions Earlier than 3.0.5</h4></div></div></div><p>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id385817"></a>Updating from Samba Versions Earlier than 3.0.5</h4></div></div></div><p>
 	With the provision that the binary Samba-3 package has been built
 	with the same path and feature settings as the existing Samba-3
 	package that is being updated, an update of Samba-3 versions 3.0.0
 	through 3.0.4 can be updated to 3.0.5 without loss of functionality
 	and without need to change either the <code class="filename">smb.conf</code> file or, where
 	used, the LDAP schema.
-	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2622705"></a>Updating from Samba Versions between 3.0.6 and 3.0.10</h4></div></div></div><p>
-	<a class="indexterm" name="id2622713"></a>
-	<a class="indexterm" name="id2622720"></a>
+	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id385836"></a>Updating from Samba Versions between 3.0.6 and 3.0.10</h4></div></div></div><p>
+	<a class="indexterm" name="id385844"></a>
+	<a class="indexterm" name="id385851"></a>
 	When updating versions of Samba-3 prior to 3.0.6 to 3.0.6 through 3.0.10,
 	it is necessary only to update the LDAP schema (where LDAP is used).
 	Always use the LDAP schema file that is shipped with the latest Samba-3
 	update.
 	</p><p>
-	<a class="indexterm" name="id2622737"></a>
-	<a class="indexterm" name="id2622743"></a>
-	<a class="indexterm" name="id2622750"></a>
+	<a class="indexterm" name="id385865"></a>
+	<a class="indexterm" name="id385872"></a>
+	<a class="indexterm" name="id385879"></a>
 	Samba-3.0.6 introduced the ability to remember the last <span class="emphasis"><em>n</em></span> number
 	of passwords a user has used. This information will work only with
 	the <code class="constant">tdbsam</code> and <code class="constant">ldapsam</code>
 	<em class="parameter"><code>passdb backend</code></em> facilities.
 	</p><p>
 	After updating the LDAP schema, do not forget to re-index the LDAP database.
-	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2622783"></a>Updating from Samba Versions after 3.0.6 to a Current Release</h4></div></div></div><p>
-	<a class="indexterm" name="id2622792"></a>
+	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id385909"></a>Updating from Samba Versions after 3.0.6 to a Current Release</h4></div></div></div><p>
+	<a class="indexterm" name="id385918"></a>
 	Samba-3.0.8 introduced changes in how the <em class="parameter"><code>username map</code></em>
 	behaves. It also included a change in behavior of <code class="literal">winbindd</code>.
 	Please refer to the man page for <code class="filename">smb.conf</code> before implementing any update
 	from versions prior to 3.0.8 to a current version.
 	</p><p>
-	<a class="indexterm" name="id2622824"></a>
+	<a class="indexterm" name="id385947"></a>
 	In Samba-3.0.11 a new privileges interface was implemented. Please
 	refer to <a class="link" href="happy.html#sbehap-ppc" title="Addition of Machines to the Domain">&#8220;Addition of Machines to the Domain&#8221;</a> for information regarding this new
 	feature. It is not necessary to implement the privileges interface, but it
@@ -788,12 +788,12 @@
 below the machine suffix.  Previous Samba releases would fall
 back to searching the 'ldap suffix' in some cases.
 </pre><p>
-	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2622874"></a>Migrating Samba-3 to a New Server</h3></div></div></div><p>
+	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id385991"></a>Migrating Samba-3 to a New Server</h3></div></div></div><p>
 	The two most likely candidates for replacement of a server are
 	domain member servers and domain controllers. Each needs to be
 	handled slightly differently.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2622886"></a>Replacing a Domain Member Server</h4></div></div></div><p>
-	<a class="indexterm" name="id2622894"></a>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id386001"></a>Replacing a Domain Member Server</h4></div></div></div><p>
+	<a class="indexterm" name="id386009"></a>
 	Replacement of a domain member server should be done
 	using the same procedure as outlined in <a class="link" href="unixclients.html" title="Chapter 7. Adding Domain Member Servers and Clients">&#8220;Adding Domain Member Servers and Clients&#8221;</a>.
 	</p><p>
@@ -802,12 +802,12 @@
 	that the new server be renamed to that of the old server. This will
 	change its SID and will necessitate rejoining to the domain.
 	</p><p>
-	<a class="indexterm" name="id2622920"></a>
-	<a class="indexterm" name="id2622927"></a>
-	<a class="indexterm" name="id2622933"></a>
-	<a class="indexterm" name="id2622940"></a>
-	<a class="indexterm" name="id2622947"></a>
-	<a class="indexterm" name="id2622954"></a>
+	<a class="indexterm" name="id386031"></a>
+	<a class="indexterm" name="id386038"></a>
+	<a class="indexterm" name="id386045"></a>
+	<a class="indexterm" name="id386051"></a>
+	<a class="indexterm" name="id386058"></a>
+	<a class="indexterm" name="id386065"></a>
 	Following a change of hostname (NetBIOS name) it is a good idea on all servers
 	to shut down the Samba <code class="literal">smbd</code>, <code class="literal">nmbd</code>, and
 	<code class="literal">winbindd</code> services, delete the <code class="filename">wins.dat</code>
@@ -817,10 +817,10 @@
 	resolution problems. These problems usually clear within 45 minutes of a name
 	change, but can persist for a longer period of time.
 	</p><p>
-	<a class="indexterm" name="id2623001"></a>
-	<a class="indexterm" name="id2623008"></a>
-	<a class="indexterm" name="id2623015"></a>
-	<a class="indexterm" name="id2623021"></a>
+	<a class="indexterm" name="id386108"></a>
+	<a class="indexterm" name="id386115"></a>
+	<a class="indexterm" name="id386122"></a>
+	<a class="indexterm" name="id386129"></a>
 	If the old domain member server had local accounts, it is necessary to create
 	on the new domain member server the same accounts with the same UID and GID
 	for each account. Where the <em class="parameter"><code>passdb backend</code></em> database
@@ -831,13 +831,13 @@
 	<code class="filename">/etc/group</code> files. In this case, be sure to copy these
 	account entries to the new target server.
 	</p><p>
-	<a class="indexterm" name="id2623070"></a>
+	<a class="indexterm" name="id386173"></a>
 	Where the user accounts for both UNIX and Samba are stored in LDAP, the new
 	target server must be configured to use the <code class="literal">nss_ldap</code> tool set.
 	This will automatically ensure that the appropriate user entities are
 	available on the new server.
-	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2623089"></a>Replacing a Domain Controller</h4></div></div></div><p>
-	<a class="indexterm" name="id2623097"></a>
+	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id386190"></a>Replacing a Domain Controller</h4></div></div></div><p>
+	<a class="indexterm" name="id386198"></a>
 	In the past, people who replaced a Windows NT4 domain controller typically
 	installed a new server, created printers and file shares on it, then migrate across
 	all data that was destined to reside on it. The same can of course be done with
@@ -890,10 +890,10 @@
 	or the <em class="parameter"><code>netbios name</code></em> is set to the original server name, Samba
 	should correctly pick up the original SID and preserve all other settings. It is
 	sound advice to validate this before turning the system over to users.
-	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2623289"></a>Migration of Samba Accounts to Active Directory</h3></div></div></div><p>
+	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id386368"></a>Migration of Samba Accounts to Active Directory</h3></div></div></div><p>
 	Yes, it works. The Windows ADMT tool can be used to migrate Samba accounts
 	to MS Active Directory.  There are a few pitfalls to be aware of:
-	</p><div class="procedure"><a name="id2623301"></a><p class="title"><b>Procedure 8.2. Migration to Active Directory</b></p><ol type="1"><li><p>
+	</p><div class="procedure"><a name="id386378"></a><p class="title"><b>Procedure 8.2. Migration to Active Directory</b></p><ol type="1"><li><p>
 		Administrator password must be THE SAME on the Samba server,
 		the 2003 ADS, and the local Administrator account on the workstations. 
 		Perhaps this goes without saying, but there needs to be an account
@@ -914,7 +914,7 @@
 		Disable the Windows Firewall on all workstations. Otherwise, 
 		workstations won't be migrated to the new domain.
 		</p></li><li><p>
-		<a class="indexterm" name="id2623367"></a>
+		<a class="indexterm" name="id386436"></a>
 		When migrating machines, always test first (using ADMT's test mode) 
 		and satisfy all errors before committing the migration. Note that the 
 		test will always fail, because the machine will not have been actually 
@@ -922,7 +922,7 @@
 		failure was due to a problem or simply to the fact that it was just 
 		a test.
 		</p></li></ol></div><p>
-	<a class="indexterm" name="id2623384"></a>
+	<a class="indexterm" name="id386451"></a>
 	There are some significant benefits of using the ADMT, besides just 
 	migrating user accounts. ADMT can be found on the Windows 2003 CD.
 	</p><div class="itemizedlist"><ul type="disc"><li><p>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/CodingSuggestions.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/CodingSuggestions.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/CodingSuggestions.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 6. Coding Suggestions</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt02.html" title="Part II. Samba Basics"><link rel="prev" href="internals.html" title="Chapter 5. Samba Internals"><link rel="next" href="contributing.html" title="Chapter 7. Contributing code"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 6. Coding Suggestions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="internals.html">Prev</a> </td><th width="60%" align="center">Part II. Samba Basics</th><td width="20%" align="right"> <a accesskey="n" href="contributing.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="CodingSuggestions"></a>Chapter 6. Coding Suggestions</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Steve</span> <span class="surname">French</span></h3></div></div><div><div class="author"><h3 class="author"><span class="firstname">Simo</span> <span class="surname">Sorce</span></h3></div></div><div><div class="author"><h3 class="author"><span class="firstname">Andrew</span> <span class="surname">Bartlett</span></h3></div></div><div><div class="author"><h3 class="author"><span class="firstname">Tim</span> <span class="surname">Potter</span></h3></div></div><div><div class="author"><h3 class="author"><span class="firstname">Martin</span> <span class="surname">Pool</span></h3></div></div></div></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 6. Coding Suggestions</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt02.html" title="Part II. Samba Basics"><link rel="prev" href="internals.html" title="Chapter 5. Samba Internals"><link rel="next" href="contributing.html" title="Chapter 7. Contributing code"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 6. Coding Suggestions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="internals.html">Prev</a> </td><th width="60%" align="center">Part II. Samba Basics</th><td width="20%" align="right"> <a accesskey="n" href="contributing.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="CodingSuggestions"></a>Chapter 6. Coding Suggestions</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Steve</span> <span class="surname">French</span></h3></div></div><div><div class="author"><h3 class="author"><span class="firstname">Simo</span> <span class="surname">Sorce</span></h3></div></div><div><div class="author"><h3 class="author"><span class="firstname">Andrew</span> <span class="surname">Bartlett</span></h3></div></div><div><div class="author"><h3 class="author"><span class="firstname">Tim</span> <span class="surname">Potter</span></h3></div></div><div><div class="author"><h3 class="author"><span class="firstname">Martin</span> <span class="surname">Pool</span></h3></div></div></div></div><p>
 So you want to add code to Samba ...
 </p><p>
 One of the daunting tasks facing a programmer attempting to write code for

Modified: branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/Packaging.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/Packaging.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/Packaging.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,10 +1,10 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 16. Notes to packagers</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt05.html" title="Part V. Appendices"><link rel="prev" href="pt05.html" title="Part V. Appendices"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 16. Notes to packagers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pt05.html">Prev</a> </td><th width="60%" align="center">Part V. Appendices</th><td width="20%" align="right"> </td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="Packaging"></a>Chapter 16. Notes to packagers</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="surname">Vernooij</span></h3></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="Packaging.html#id2583594">Versioning</a></span></dt><dt><span class="sect1"><a href="Packaging.html#id2583622">Modules</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2583594"></a>Versioning</h2></div></div></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 16. Notes to packagers</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt05.html" title="Part V. Appendices"><link rel="prev" href="pt05.html" title="Part V. Appendices"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 16. Notes to packagers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pt05.html">Prev</a> </td><th width="60%" align="center">Part V. Appendices</th><td width="20%" align="right"> </td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="Packaging"></a>Chapter 16. Notes to packagers</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="surname">Vernooij</span></h3></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="Packaging.html#id350794">Versioning</a></span></dt><dt><span class="sect1"><a href="Packaging.html#id350817">Modules</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id350794"></a>Versioning</h2></div></div></div><p>
 Please, please update the version number in <code class="filename">source/include/version.h</code> to include the
 versioning of your package. This makes it easier to distinguish standard samba builds from custom-build samba
 builds (distributions often patch packages). For example, a good version would be:
 </p><pre class="programlisting">
 Version 2.999+3.0.alpha21-5 for Debian
-</pre></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2583622"></a>Modules</h2></div></div></div><p>
+</pre></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id350817"></a>Modules</h2></div></div></div><p>
 Samba3 has support for building parts of samba as plugins. This makes it possible to, for example,
 put ldap or mysql support in a separate package, thus making it possible to have a normal samba package not
 depending on ldap or mysql. To build as much parts of samba as a plugin, run:

Modified: branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/architecture.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/architecture.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/architecture.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 3. Samba Architecture</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt02.html" title="Part II. Samba Basics"><link rel="prev" href="pt02.html" title="Part II. Samba Basics"><link rel="next" href="debug.html" title="Chapter 4. The samba DEBUG system"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 3. Samba Architecture</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pt02.html">Prev</a> </td><th width="60%" align="center">Part II. Samba Basics</th><td width="20%" align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="architecture"></a>Chapter 3. Samba Architecture</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Dan</span> <span class="surname">Shearer</span></h3></div></div><div><p class="pubdate"> November 1997</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="architecture.html#id2578123">Introduction</a></span></dt><dt><span class="sect1"><a href="architecture.html#id2578167">Multithreading and Samba</a></span></dt><dt><span class="sect1"><a href="architecture.html#id2578199">Threading smbd</a></span></dt><dt><span class="sect1"><a href="architecture.html#id2578261">Threading nmbd</a></span></dt><dt><span class="sect1"><a href="architecture.html#id2578307">nbmd Design</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2578123"></a>Introduction</h2></div></div></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 3. Samba Architecture</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt02.html" title="Part II. Samba Basics"><link rel="prev" href="pt02.html" title="Part II. Samba Basics"><link rel="next" href="debug.html" title="Chapter 4. The samba DEBUG system"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 3. Samba Architecture</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pt02.html">Prev</a> </td><th width="60%" align="center">Part II. Samba Basics</th><td width="20%" align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="architecture"></a>Chapter 3. Samba Architecture</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Dan</span> <span class="surname">Shearer</span></h3></div></div><div><p class="pubdate"> November 1997</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="architecture.html#id346363">Introduction</a></span></dt><dt><span class="sect1"><a href="architecture.html#id346402">Multithreading and Samba</a></span></dt><dt><span class="sect1"><a href="architecture.html#id346426">Threading smbd</a></span></dt><dt><span class="sect1"><a href="architecture.html#id346478">Threading nmbd</a></span></dt><dt><span class="sect1"><a href="architecture.html#id346510">nbmd Design</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id346363"></a>Introduction</h2></div></div></div><p>
 This document gives a general overview of how Samba works
 internally. The Samba Team has tried to come up with a model which is
 the best possible compromise between elegance, portability, security
@@ -9,7 +9,7 @@
 </p><div class="orderedlist"><ol type="1"><li><p>
 	Is Samba secure when running on Unix? The xyz platform?
 	What about the root priveliges issue?
-</p></li><li><p>Pros and cons of multithreading in various parts of Samba</p></li><li><p>Why not have a separate process for name resolution, WINS, and browsing?</p></li></ol></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2578167"></a>Multithreading and Samba</h2></div></div></div><p>
+</p></li><li><p>Pros and cons of multithreading in various parts of Samba</p></li><li><p>Why not have a separate process for name resolution, WINS, and browsing?</p></li></ol></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id346402"></a>Multithreading and Samba</h2></div></div></div><p>
 People sometimes tout threads as a uniformly good thing. They are very
 nice in their place but are quite inappropriate for smbd. nmbd is
 another matter, and multi-threading it would be very nice. 
@@ -26,7 +26,7 @@
 slower, less scalable, less portable and much less robust. The fact
 that we use a separate process for each connection is one of Samba's
 biggest advantages.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2578199"></a>Threading smbd</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id346426"></a>Threading smbd</h2></div></div></div><p>
 A few problems that would arise from a threaded smbd are:
 </p><div class="orderedlist"><ol type="1"><li><p>
 	It's not only to create threads instead of processes, but you
@@ -51,7 +51,7 @@
 </p></li><li><p>
 	we couldn't use the system locking calls as the locking context of
 	fcntl() is a process, not a thread.
-</p></li></ol></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2578261"></a>Threading nmbd</h2></div></div></div><p>
+</p></li></ol></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id346478"></a>Threading nmbd</h2></div></div></div><p>
 This would be ideal, but gets sunk by portability requirements.
 </p><p>
 Andrew tried to write a test threads library for nmbd that used only
@@ -78,7 +78,7 @@
 nasty to program cleanly due to the enormous amount of shared data (in
 complex structures) between the processes. We can't rely on each
 platform having a shared memory system.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2578307"></a>nbmd Design</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id346510"></a>nbmd Design</h2></div></div></div><p>
 Originally Andrew used recursion to simulate a multi-threaded
 environment, which use the stack enormously and made for really
 confusing debugging sessions. Luke Leighton rewrote it to use a

Modified: branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/contributing.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/contributing.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/contributing.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 7. Contributing code</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt02.html" title="Part II. Samba Basics"><link rel="prev" href="CodingSuggestions.html" title="Chapter 6. Coding Suggestions"><link rel="next" href="modules.html" title="Chapter 8. Modules"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 7. Contributing code</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="CodingSuggestions.html">Prev</a> </td><th width="60%" align="center">Part II. Samba Basics</th><td width="20%" align="right"> <a accesskey="n" href="modules.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="contributing"></a>Chapter 7. Contributing code</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div></div></div><p>Here are a few tips and notes that might be useful if you are 
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 7. Contributing code</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt02.html" title="Part II. Samba Basics"><link rel="prev" href="CodingSuggestions.html" title="Chapter 6. Coding Suggestions"><link rel="next" href="modules.html" title="Chapter 8. Modules"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 7. Contributing code</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="CodingSuggestions.html">Prev</a> </td><th width="60%" align="center">Part II. Samba Basics</th><td width="20%" align="right"> <a accesskey="n" href="modules.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="contributing"></a>Chapter 7. Contributing code</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div></div></div><p>Here are a few tips and notes that might be useful if you are 
 	interested in modifying samba source code and getting it into 
 	samba's main branch.</p><div class="variablelist"><dl><dt><span class="term">Retrieving the source</span></dt><dd><p>In order to contribute code to samba, make sure you have the 
 			latest source. Retrieving the samba source code from CVS is 

Modified: branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/debug.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/debug.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/debug.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 4. The samba DEBUG system</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt02.html" title="Part II. Samba Basics"><link rel="prev" href="architecture.html" title="Chapter 3. Samba Architecture"><link rel="next" href="internals.html" title="Chapter 5. Samba Internals"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 4. The samba DEBUG system</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="architecture.html">Prev</a> </td><th width="60%" align="center">Part II. Samba Basics</th><td width="20%" align="right"> <a accesskey="n" href="internals.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="debug"></a>Chapter 4. The samba DEBUG system</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Chris</span> <span class="surname">Hertel</span></h3></div></div><div><p class="pubdate">July 1998</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="debug.html#id2578365">New Output Syntax</a></span></dt><dt><span class="sect1"><a href="debug.html#id2578477">The DEBUG() Macro</a></span></dt><dt><span class="sect1"><a href="debug.html#id2578586">The DEBUGADD() Macro</a></span></dt><dt><span class="sect1"><a href="debug.html#id2578623">The DEBUGLVL() Macro</a></span></dt><dt><span class="sect1"><a href="debug.html#id2578716">New Functions</a></span></dt><dd><dl><dt><span class="sect2"><a href="debug.html#id2578722">dbgtext()</a></span></dt><dt><span class="sect2"><a href="debug.html#id2578738">dbghdr()</a></span></dt><dt><span class="sect2"><a href="debug.html#id2578757">format_debug_text()</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2578365"></a>New Output Syntax</h2></div></div></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 4. The samba DEBUG system</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt02.html" title="Part II. Samba Basics"><link rel="prev" href="architecture.html" title="Chapter 3. Samba Architecture"><link rel="next" href="internals.html" title="Chapter 5. Samba Internals"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 4. The samba DEBUG system</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="architecture.html">Prev</a> </td><th width="60%" align="center">Part II. Samba Basics</th><td width="20%" align="right"> <a accesskey="n" href="internals.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="debug"></a>Chapter 4. The samba DEBUG system</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Chris</span> <span class="surname">Hertel</span></h3></div></div><div><p class="pubdate">July 1998</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="debug.html#id346556">New Output Syntax</a></span></dt><dt><span class="sect1"><a href="debug.html#id346649">The DEBUG() Macro</a></span></dt><dt><span class="sect1"><a href="debug.html#id346738">The DEBUGADD() Macro</a></span></dt><dt><span class="sect1"><a href="debug.html#id346768">The DEBUGLVL() Macro</a></span></dt><dt><span class="sect1"><a href="debug.html#id346843">New Functions</a></span></dt><dd><dl><dt><span class="sect2"><a href="debug.html#id346849">dbgtext()</a></span></dt><dt><span class="sect2"><a href="debug.html#id346862">dbghdr()</a></span></dt><dt><span class="sect2"><a href="debug.html#id346878">format_debug_text()</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id346556"></a>New Output Syntax</h2></div></div></div><p>
    The syntax of a debugging log file is represented as:
 </p><pre class="programlisting">
   &gt;debugfile&lt; :== { &gt;debugmsg&lt; }
@@ -51,7 +51,7 @@
 Note that in the above example the function names are not listed on
 the header line. That's because the example above was generated on an
 SGI Indy, and the SGI compiler doesn't support the __FUNCTION__ macro.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2578477"></a>The DEBUG() Macro</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id346649"></a>The DEBUG() Macro</h2></div></div></div><p>
 Use of the DEBUG() macro is unchanged. DEBUG() takes two parameters.
 The first is the message level, the second is the body of a function
 call to the Debug1() function.
@@ -102,7 +102,7 @@
     [1998/07/30 16:00:51, 0] file.c:function(261)
       .
 </pre><p>Which isn't much use. The format buffer kludge fixes this problem.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2578586"></a>The DEBUGADD() Macro</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id346738"></a>The DEBUGADD() Macro</h2></div></div></div><p>
 In addition to the kludgey solution to the broken line problem
 described above, there is a clean solution. The DEBUGADD() macro never
 generates a header. It will append new text to the current debug
@@ -116,7 +116,7 @@
       This is the first line.
       This is the second line.
       This is the third line.
-</pre></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2578623"></a>The DEBUGLVL() Macro</h2></div></div></div><p>
+</pre></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id346768"></a>The DEBUGLVL() Macro</h2></div></div></div><p>
 One of the problems with the DEBUG() macro was that DEBUG() lines
 tended to get a bit long. Consider this example from
 nmbd_sendannounce.c:
@@ -151,7 +151,7 @@
 </p></li><li><p>
 Processing that is only relevant to debug output can be contained
 within the DEBUGLVL() block.
-</p></li></ol></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2578716"></a>New Functions</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2578722"></a>dbgtext()</h3></div></div></div><p>
+</p></li></ol></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id346843"></a>New Functions</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id346849"></a>dbgtext()</h3></div></div></div><p>
 This function prints debug message text to the debug file (and
 possibly to syslog) via the format buffer. The function uses a
 variable argument list just like printf() or Debug1(). The
@@ -160,7 +160,7 @@
 
 If you use DEBUGLVL() you will probably print the body of the
 message using dbgtext(). 
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2578738"></a>dbghdr()</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id346862"></a>dbghdr()</h3></div></div></div><p>
 This is the function that writes a debug message header.
 Headers are not processed via the format buffer. Also note that
 if the format buffer is not empty, a call to dbghdr() will not
@@ -168,7 +168,7 @@
 </p><p>
 It is not likely that this function will be called directly. It
 is used by DEBUG() and DEBUGADD().
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2578757"></a>format_debug_text()</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id346878"></a>format_debug_text()</h3></div></div></div><p>
 This is a static function in debug.c. It stores the output text
 for the body of the message in a buffer until it encounters a
 newline. When the newline character is found, the buffer is

Modified: branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/devprinting.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/devprinting.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/devprinting.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,16 +1,16 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 15. Samba Printing Internals</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt04.html" title="Part IV. Debugging and tracing"><link rel="prev" href="tracing.html" title="Chapter 14. Tracing samba system calls"><link rel="next" href="pt05.html" title="Part V. Appendices"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 15. Samba Printing Internals</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tracing.html">Prev</a> </td><th width="60%" align="center">Part IV. Debugging and tracing</th><td width="20%" align="right"> <a accesskey="n" href="pt05.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="devprinting"></a>Chapter 15. Samba Printing Internals</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Gerald</span> <span class="surname">Carter</span></h3></div></div><div><p class="pubdate">October 2002</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="devprinting.html#id2582989">Abstract</a></span></dt><dt><span class="sect1"><a href="devprinting.html#id2583002">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 15. Samba Printing Internals</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt04.html" title="Part IV. Debugging and tracing"><link rel="prev" href="tracing.html" title="Chapter 14. Tracing samba system calls"><link rel="next" href="pt05.html" title="Part V. Appendices"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 15. Samba Printing Internals</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tracing.html">Prev</a> </td><th width="60%" align="center">Part IV. Debugging and tracing</th><td width="20%" align="right"> <a accesskey="n" href="pt05.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="devprinting"></a>Chapter 15. Samba Printing Internals</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Gerald</span> <span class="surname">Carter</span></h3></div></div><div><p class="pubdate">October 2002</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="devprinting.html#id350318">Abstract</a></span></dt><dt><span class="sect1"><a href="devprinting.html#id350330">
 Printing Interface to Various Back ends
-</a></span></dt><dt><span class="sect1"><a href="devprinting.html#id2583081">
+</a></span></dt><dt><span class="sect1"><a href="devprinting.html#id350399">
 Print Queue TDB's
-</a></span></dt><dt><span class="sect1"><a href="devprinting.html#id2583257">
+</a></span></dt><dt><span class="sect1"><a href="devprinting.html#id350533">
 ChangeID and Client Caching of Printer Information
-</a></span></dt><dt><span class="sect1"><a href="devprinting.html#id2583268">
+</a></span></dt><dt><span class="sect1"><a href="devprinting.html#id350542">
 Windows NT/2K Printer Change Notify
-</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2582989"></a>Abstract</h2></div></div></div><p>
+</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id350318"></a>Abstract</h2></div></div></div><p>
 The purpose of this document is to provide some insight into
 Samba's printing functionality and also to describe the semantics
 of certain features of Windows client printing.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2583002"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id350330"></a>
 Printing Interface to Various Back ends
 </h2></div></div></div><p>
 Samba uses a table of function pointers to seven functions.  The
@@ -21,7 +21,7 @@
 defined.
 </p><div class="itemizedlist"><ul type="disc"><li><p>a generic set of functions for working with standard UNIX
 	printing subsystems</p></li><li><p>a set of CUPS specific functions (this is only enabled if
-	the CUPS libraries were located at compile time).</p></li></ul></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2583081"></a>
+	the CUPS libraries were located at compile time).</p></li></ul></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id350399"></a>
 Print Queue TDB's
 </h2></div></div></div><p>
 Samba provides periodic caching of the output from the "lpq command"
@@ -110,11 +110,11 @@
 Only non-default Device Mode are stored with print jobs in the print
 queue TDB.  Otherwise, the Device Mode is obtained from the printer
 object when the client issues a GetJob(level == 2) request.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2583257"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id350533"></a>
 ChangeID and Client Caching of Printer Information
 </h2></div></div></div><p>
 [To be filled in later]
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2583268"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id350542"></a>
 Windows NT/2K Printer Change Notify
 </h2></div></div></div><p>
 When working with Windows NT+ clients, it is possible for a

Modified: branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/index.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/index.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/index.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>SAMBA Developers Guide</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><meta name="description" content="Last Update : Fri Oct 10 00:59:58 CEST 2003 This book is a collection of documents that might be useful for people developing samba or those interested in doing so. It's nothing more than a collection of documents written by samba developers about the internals of various parts of samba and the SMB protocol. It's still (and will always be) incomplete. The most recent version of this document can be found at http://devel.samba.org/. This documentation is distributed under the GNU General Public License (GPL) version 2. A copy of the license is included with the Samba source distribution. A copy can be found on-line at http://www.fsf.org/licenses/gpl.txt This document is incomplete and unmaintained. It is merely a collection of development-related notes."><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="next" href="pr01.html" title="Attribution"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">SAMBA Developers Guide</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="pr01.html">Next</a></td></tr></table><hr></div><div class="book" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="Samba-Developers-Guide"></a>SAMBA Developers Guide</h1></div><div><div class="authorgroup"><div class="editor"><h4 class="editedby">Edited by</h4><h3 class="editor"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div></div><div><div class="abstract"><p class="title"><b>Abstract</b></p><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>SAMBA Developers Guide</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><meta name="description" content="Last Update : Fri Oct 10 00:59:58 CEST 2003 This book is a collection of documents that might be useful for people developing samba or those interested in doing so. It's nothing more than a collection of documents written by samba developers about the internals of various parts of samba and the SMB protocol. It's still (and will always be) incomplete. The most recent version of this document can be found at http://devel.samba.org/. This documentation is distributed under the GNU General Public License (GPL) version 2. A copy of the license is included with the Samba source distribution. A copy can be found on-line at http://www.fsf.org/licenses/gpl.txt This document is incomplete and unmaintained. It is merely a collection of development-related notes."><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="next" href="pr01.html" title="Attribution"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">SAMBA Developers Guide</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="pr01.html">Next</a></td></tr></table><hr></div><div class="book" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="Samba-Developers-Guide"></a>SAMBA Developers Guide</h1></div><div><div class="authorgroup"><div class="editor"><h4 class="editedby">Edited by</h4><h3 class="editor"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div></div><div><div class="abstract"><p class="title"><b>Abstract</b></p><p>
 <span class="emphasis"><em>Last Update</em></span> : Fri Oct 10 00:59:58 CEST 2003
 </p><p>
 This book is a collection of documents that might be useful for 
@@ -12,12 +12,12 @@
 version 2.  A copy of the license is included with the Samba source
 distribution.  A copy can be found on-line at <a class="ulink" href="http://www.fsf.org/licenses/gpl.txt" target="_top">http://www.fsf.org/licenses/gpl.txt</a>
 </p><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p>This document is incomplete and unmaintained. It is merely a 
-	collection of development-related notes.</p></div></div></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="pr01.html">Attribution</a></span></dt><dt><span class="part"><a href="pt01.html">I. The protocol</a></span></dt><dd><dl><dt><span class="chapter"><a href="unix-smb.html">1. NetBIOS in a Unix World</a></span></dt><dd><dl><dt><span class="sect1"><a href="unix-smb.html#id2524015">Introduction</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id2524036">Usernames</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id2524368">File Ownership</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id2523694">Passwords</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id2523732">Locking</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id2523784">Deny Modes</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id2523816">Trapdoor UIDs</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id2571061">Port numbers</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id2571106">Protocol Complexity</a></span></dt></dl></dd><dt><span class="chapter"><a href="ntdomain.html">2. NT Domain RPC's</a></span></dt><dd><dl><dt><span class="sect1"><a href="ntdomain.html#id2571233">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id2571402">Sources</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2571430">Credits</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id2571462">Notes and Structures</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id2571468">Notes</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2571532">Enumerations</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2571703">Structures</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id2574068">MSRPC over Transact Named Pipe</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id2574078">MSRPC Pipes</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2574164">Header</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2574869">Tail</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2574905">RPC Bind / Bind Ack</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2575052">NTLSA Transact Named Pipe</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2575186">LSA Open Policy</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2575286">LSA Query Info Policy</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2575371">LSA Enumerate Trusted Domains</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2575444">LSA Open Secret</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2575532">LSA Close</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2575585">LSA Lookup SIDS</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2575753">LSA Lookup Names</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id2575934">NETLOGON rpc Transact Named Pipe</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id2576065">LSA Request Challenge</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2576179">LSA Authenticate 2</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2576297">LSA Server Password Set</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2576391">LSA SAM Logon</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2576474">LSA SAM Logoff</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id2576547">\\MAILSLOT\NET\NTLOGON</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id2576562">Query for PDC</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2576771">SAM Logon</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id2577032">SRVSVC Transact Named Pipe</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id2577067">Net Share Enum</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2577244">Net Server Get Info</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id2577337">Cryptographic side of NT Domain Authentication</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id2577343">Definitions</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2577473">Protocol</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2577554">Comments</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id2577596">SIDs and RIDs</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id2577629">Well-known SIDs</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2577880">Well-known RIDS</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="pt02.html">II. Samba Basics</a></span></dt><dd><dl><dt><span class="chapter"><a href="architecture.html">3. Samba Architecture</a></span></dt><dd><dl><dt><span class="sect1"><a href="architecture.html#id2578123">Introduction</a></span></dt><dt><span class="sect1"><a href="architecture.html#id2578167">Multithreading and Samba</a></span></dt><dt><span class="sect1"><a href="architecture.html#id2578199">Threading smbd</a></span></dt><dt><span class="sect1"><a href="architecture.html#id2578261">Threading nmbd</a></span></dt><dt><span class="sect1"><a href="architecture.html#id2578307">nbmd Design</a></span></dt></dl></dd><dt><span class="chapter"><a href="debug.html">4. The samba DEBUG system</a></span></dt><dd><dl><dt><span class="sect1"><a href="debug.html#id2578365">New Output Syntax</a></span></dt><dt><span class="sect1"><a href="debug.html#id2578477">The DEBUG() Macro</a></span></dt><dt><span class="sect1"><a href="debug.html#id2578586">The DEBUGADD() Macro</a></span></dt><dt><span class="sect1"><a href="debug.html#id2578623">The DEBUGLVL() Macro</a></span></dt><dt><span class="sect1"><a href="debug.html#id2578716">New Functions</a></span></dt><dd><dl><dt><span class="sect2"><a href="debug.html#id2578722">dbgtext()</a></span></dt><dt><span class="sect2"><a href="debug.html#id2578738">dbghdr()</a></span></dt><dt><span class="sect2"><a href="debug.html#id2578757">format_debug_text()</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="internals.html">5. Samba Internals</a></span></dt><dd><dl><dt><span class="sect1"><a href="internals.html#id2578812">Character Handling</a></span></dt><dt><span class="sect1"><a href="internals.html#id2578834">The new functions</a></span></dt><dt><span class="sect1"><a href="internals.html#id2578964">Macros in byteorder.h</a></span></dt><dd><dl><dt><span class="sect2"><a href="internals.html#id2578975">CVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2578987">PVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2578998">SCVAL(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579009">SVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579022">IVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579034">SVALS(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579046">IVALS(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579057">SSVAL(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579069">SIVAL(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579081">SSVALS(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579093">SIVALS(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579105">RSVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579116">RIVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579128">RSSVAL(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579141">RSIVAL(buf,pos,val)</a></span></dt></dl></dd><dt><span class="sect1"><a href="internals.html#id2579154">LAN Manager Samba API</a></span></dt><dd><dl><dt><span class="sect2"><a href="internals.html#id2579182">Parameters</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579308">Return value</a></span></dt></dl></dd><dt><span class="sect1"><a href="internals.html#id2579379">Code character table</a></span></dt></dl></dd><dt><span class="chapter"><a href="CodingSuggestions.html">6. Coding Suggestions</a></span></dt><dt><span class="chapter"><a href="contributing.html">7. Contributing code</a></span></dt><dt><span class="chapter"><a href="modules.html">8. Modules</a></span></dt><dd><dl><dt><span class="sect1"><a href="modules.html#id2580050">Advantages</a></span></dt><dt><span class="sect1"><a href="modules.html#id2580089">Loading modules</a></span></dt><dd><dl><dt><span class="sect2"><a href="modules.html#id2580116">Static modules</a></span></dt><dt><span class="sect2"><a href="modules.html#id2580150">Shared modules</a></span></dt></dl></dd><dt><span class="sect1"><a href="modules.html#id2580174">Writing modules</a></span></dt><dd><dl><dt><span class="sect2"><a href="modules.html#id2580225">Static/Shared selection in configure.in</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="pt03.html">III. Samba Subsystems</a></span></dt><dd><dl><dt><span class="chapter"><a href="rpc-plugin.html">9. RPC Pluggable Modules</a></span></dt><dd><dl><dt><span class="sect1"><a href="rpc-plugin.html#id2580396">About</a></span></dt><dt><span class="sect1"><a href="rpc-plugin.html#id2580411">General Overview</a></span></dt></dl></dd><dt><span class="chapter"><a href="vfs.html">10. VFS Modules</a></span></dt><dd><dl><dt><span class="sect1"><a href="vfs.html#id2580583">The Samba (Posix) VFS layer</a></span></dt><dd><dl><dt><span class="sect2"><a href="vfs.html#id2580625">The general interface</a></span></dt><dt><span class="sect2"><a href="vfs.html#id2580957">Possible VFS operation layers</a></span></dt></dl></dd><dt><span class="sect1"><a href="vfs.html#id2581018">The Interaction between the Samba VFS subsystem and the modules</a></span></dt><dd><dl><dt><span class="sect2"><a href="vfs.html#id2581024">Initialization and registration</a></span></dt><dt><span class="sect2"><a href="vfs.html#id2581175">How the Modules handle per connection data</a></span></dt></dl></dd><dt><span class="sect1"><a href="vfs.html#id2581379">Upgrading to the New VFS Interface</a></span></dt><dd><dl><dt><span class="sect2"><a href="vfs.html#id2581385">Upgrading from 2.2.* and 3.0alpha modules</a></span></dt></dl></dd><dt><span class="sect1"><a href="vfs.html#id2581803">Some Notes</a></span></dt><dd><dl><dt><span class="sect2"><a href="vfs.html#id2581809">Implement TRANSPARENT functions</a></span></dt><dt><span class="sect2"><a href="vfs.html#id2581828">Implement OPAQUE functions</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="parsing.html">11. The smb.conf file</a></span></dt><dd><dl><dt><span class="sect1"><a href="parsing.html#id2581889">Lexical Analysis</a></span></dt><dd><dl><dt><span class="sect2"><a href="parsing.html#id2581964">Handling of Whitespace</a></span></dt><dt><span class="sect2"><a href="parsing.html#id2582010">Handling of Line Continuation</a></span></dt><dt><span class="sect2"><a href="parsing.html#id2582063">Line Continuation Quirks</a></span></dt></dl></dd><dt><span class="sect1"><a href="parsing.html#id2582144">Syntax</a></span></dt><dd><dl><dt><span class="sect2"><a href="parsing.html#id2582203">About params.c</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="wins.html">12. Samba WINS Internals</a></span></dt><dd><dl><dt><span class="sect1"><a href="wins.html#id2582244">WINS Failover</a></span></dt></dl></dd><dt><span class="chapter"><a href="pwencrypt.html">13. LanMan and NT Password Encryption</a></span></dt><dd><dl><dt><span class="sect1"><a href="pwencrypt.html#id2582367">Introduction</a></span></dt><dt><span class="sect1"><a href="pwencrypt.html#id2582387">How does it work?</a></span></dt><dt><span class="sect1"><a href="pwencrypt.html#id2582472">The smbpasswd file</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="pt04.html">IV. Debugging and tracing</a></span></dt><dd><dl><dt><span class="chapter"><a href="tracing.html">14. Tracing samba system calls</a></span></dt><dt><span class="chapter"><a href="devprinting.html">15. Samba Printing Internals</a></span></dt><dd><dl><dt><span class="sect1"><a href="devprinting.html#id2582989">Abstract</a></span></dt><dt><span class="sect1"><a href="devprinting.html#id2583002">
+	collection of development-related notes.</p></div></div></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="pr01.html">Attribution</a></span></dt><dt><span class="part"><a href="pt01.html">I. The protocol</a></span></dt><dd><dl><dt><span class="chapter"><a href="unix-smb.html">1. NetBIOS in a Unix World</a></span></dt><dd><dl><dt><span class="sect1"><a href="unix-smb.html#id339707">Introduction</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id339724">Usernames</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id297652">File Ownership</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id297676">Passwords</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id297704">Locking</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id339928">Deny Modes</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id339950">Trapdoor UIDs</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id339967">Port numbers</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id339998">Protocol Complexity</a></span></dt></dl></dd><dt><span class="chapter"><a href="ntdomain.html">2. NT Domain RPC's</a></span></dt><dd><dl><dt><span class="sect1"><a href="ntdomain.html#id340101">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id340231">Sources</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id340255">Credits</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id340283">Notes and Structures</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id340288">Notes</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id340337">Enumerations</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id340498">Structures</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id342673">MSRPC over Transact Named Pipe</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id342683">MSRPC Pipes</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id342750">Header</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id343386">Tail</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id343421">RPC Bind / Bind Ack</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id343553">NTLSA Transact Named Pipe</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id343674">LSA Open Policy</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id343768">LSA Query Info Policy</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id343847">LSA Enumerate Trusted Domains</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id343915">LSA Open Secret</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id343997">LSA Close</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id344046">LSA Lookup SIDS</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id344201">LSA Lookup Names</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id344368">NETLOGON rpc Transact Named Pipe</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id344488">LSA Request Challenge</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id344589">LSA Authenticate 2</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id344698">LSA Server Password Set</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id344782">LSA SAM Logon</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id344856">LSA SAM Logoff</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id344925">\\MAILSLOT\NET\NTLOGON</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id344936">Query for PDC</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id345132">SAM Logon</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id345377">SRVSVC Transact Named Pipe</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id345410">Net Share Enum</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id345573">Net Server Get Info</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id345660">Cryptographic side of NT Domain Authentication</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id345665">Definitions</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id345785">Protocol</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id345847">Comments</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id345879">SIDs and RIDs</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id345907">Well-known SIDs</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id346144">Well-known RIDS</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="pt02.html">II. Samba Basics</a></span></dt><dd><dl><dt><span class="chapter"><a href="architecture.html">3. Samba Architecture</a></span></dt><dd><dl><dt><span class="sect1"><a href="architecture.html#id346363">Introduction</a></span></dt><dt><span class="sect1"><a href="architecture.html#id346402">Multithreading and Samba</a></span></dt><dt><span class="sect1"><a href="architecture.html#id346426">Threading smbd</a></span></dt><dt><span class="sect1"><a href="architecture.html#id346478">Threading nmbd</a></span></dt><dt><span class="sect1"><a href="architecture.html#id346510">nbmd Design</a></span></dt></dl></dd><dt><span class="chapter"><a href="debug.html">4. The samba DEBUG system</a></span></dt><dd><dl><dt><span class="sect1"><a href="debug.html#id346556">New Output Syntax</a></span></dt><dt><span class="sect1"><a href="debug.html#id346649">The DEBUG() Macro</a></span></dt><dt><span class="sect1"><a href="debug.html#id346738">The DEBUGADD() Macro</a></span></dt><dt><span class="sect1"><a href="debug.html#id346768">The DEBUGLVL() Macro</a></span></dt><dt><span class="sect1"><a href="debug.html#id346843">New Functions</a></span></dt><dd><dl><dt><span class="sect2"><a href="debug.html#id346849">dbgtext()</a></span></dt><dt><span class="sect2"><a href="debug.html#id346862">dbghdr()</a></span></dt><dt><span class="sect2"><a href="debug.html#id346878">format_debug_text()</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="internals.html">5. Samba Internals</a></span></dt><dd><dl><dt><span class="sect1"><a href="internals.html#id346925">Character Handling</a></span></dt><dt><span class="sect1"><a href="internals.html#id346942">The new functions</a></span></dt><dt><span class="sect1"><a href="internals.html#id347046">Macros in byteorder.h</a></span></dt><dd><dl><dt><span class="sect2"><a href="internals.html#id347056">CVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347066">PVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347076">SCVAL(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347087">SVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347098">IVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347108">SVALS(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347119">IVALS(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347130">SSVAL(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347140">SIVAL(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347151">SSVALS(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347161">SIVALS(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347172">RSVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347182">RIVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347193">RSSVAL(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347204">RSIVAL(buf,pos,val)</a></span></dt></dl></dd><dt><span class="sect1"><a href="internals.html#id347215">LAN Manager Samba API</a></span></dt><dd><dl><dt><span class="sect2"><a href="internals.html#id347239">Parameters</a></span></dt><dt><span class="sect2"><a href="internals.html#id347345">Return value</a></span></dt></dl></dd><dt><span class="sect1"><a href="internals.html#id347402">Code character table</a></span></dt></dl></dd><dt><span class="chapter"><a href="CodingSuggestions.html">6. Coding Suggestions</a></span></dt><dt><span class="chapter"><a href="contributing.html">7. Contributing code</a></span></dt><dt><span class="chapter"><a href="modules.html">8. Modules</a></span></dt><dd><dl><dt><span class="sect1"><a href="modules.html#id347970">Advantages</a></span></dt><dt><span class="sect1"><a href="modules.html#id348003">Loading modules</a></span></dt><dd><dl><dt><span class="sect2"><a href="modules.html#id348025">Static modules</a></span></dt><dt><span class="sect2"><a href="modules.html#id348054">Shared modules</a></span></dt></dl></dd><dt><span class="sect1"><a href="modules.html#id348073">Writing modules</a></span></dt><dd><dl><dt><span class="sect2"><a href="modules.html#id348114">Static/Shared selection in configure.in</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="pt03.html">III. Samba Subsystems</a></span></dt><dd><dl><dt><span class="chapter"><a href="rpc-plugin.html">9. RPC Pluggable Modules</a></span></dt><dd><dl><dt><span class="sect1"><a href="rpc-plugin.html#id348263">About</a></span></dt><dt><span class="sect1"><a href="rpc-plugin.html#id348276">General Overview</a></span></dt></dl></dd><dt><span class="chapter"><a href="vfs.html">10. VFS Modules</a></span></dt><dd><dl><dt><span class="sect1"><a href="vfs.html#id348426">The Samba (Posix) VFS layer</a></span></dt><dd><dl><dt><span class="sect2"><a href="vfs.html#id348454">The general interface</a></span></dt><dt><span class="sect2"><a href="vfs.html#id348708">Possible VFS operation layers</a></span></dt></dl></dd><dt><span class="sect1"><a href="vfs.html#id348752">The Interaction between the Samba VFS subsystem and the modules</a></span></dt><dd><dl><dt><span class="sect2"><a href="vfs.html#id348758">Initialization and registration</a></span></dt><dt><span class="sect2"><a href="vfs.html#id348885">How the Modules handle per connection data</a></span></dt></dl></dd><dt><span class="sect1"><a href="vfs.html#id349039">Upgrading to the New VFS Interface</a></span></dt><dd><dl><dt><span class="sect2"><a href="vfs.html#id349044">Upgrading from 2.2.* and 3.0aplha modules</a></span></dt></dl></dd><dt><span class="sect1"><a href="vfs.html#id349344">Some Notes</a></span></dt><dd><dl><dt><span class="sect2"><a href="vfs.html#id349350">Implement TRANSPARENT functions</a></span></dt><dt><span class="sect2"><a href="vfs.html#id349366">Implement OPAQUE functions</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="parsing.html">11. The smb.conf file</a></span></dt><dd><dl><dt><span class="sect1"><a href="parsing.html#id349417">Lexical Analysis</a></span></dt><dd><dl><dt><span class="sect2"><a href="parsing.html#id349483">Handling of Whitespace</a></span></dt><dt><span class="sect2"><a href="parsing.html#id349523">Handling of Line Continuation</a></span></dt><dt><span class="sect2"><a href="parsing.html#id349566">Line Continuation Quirks</a></span></dt></dl></dd><dt><span class="sect1"><a href="parsing.html#id349636">Syntax</a></span></dt><dd><dl><dt><span class="sect2"><a href="parsing.html#id349686">About params.c</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="wins.html">12. Samba WINS Internals</a></span></dt><dd><dl><dt><span class="sect1"><a href="wins.html#id349722">WINS Failover</a></span></dt></dl></dd><dt><span class="chapter"><a href="pwencrypt.html">13. LanMan and NT Password Encryption</a></span></dt><dd><dl><dt><span class="sect1"><a href="pwencrypt.html#id349822">Introduction</a></span></dt><dt><span class="sect1"><a href="pwencrypt.html#id349838">How does it work?</a></span></dt><dt><span class="sect1"><a href="pwencrypt.html#id349899">The smbpasswd file</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="pt04.html">IV. Debugging and tracing</a></span></dt><dd><dl><dt><span class="chapter"><a href="tracing.html">14. Tracing samba system calls</a></span></dt><dt><span class="chapter"><a href="devprinting.html">15. Samba Printing Internals</a></span></dt><dd><dl><dt><span class="sect1"><a href="devprinting.html#id350318">Abstract</a></span></dt><dt><span class="sect1"><a href="devprinting.html#id350330">
 Printing Interface to Various Back ends
-</a></span></dt><dt><span class="sect1"><a href="devprinting.html#id2583081">
+</a></span></dt><dt><span class="sect1"><a href="devprinting.html#id350399">
 Print Queue TDB's
-</a></span></dt><dt><span class="sect1"><a href="devprinting.html#id2583257">
+</a></span></dt><dt><span class="sect1"><a href="devprinting.html#id350533">
 ChangeID and Client Caching of Printer Information
-</a></span></dt><dt><span class="sect1"><a href="devprinting.html#id2583268">
+</a></span></dt><dt><span class="sect1"><a href="devprinting.html#id350542">
 Windows NT/2K Printer Change Notify
-</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="pt05.html">V. Appendices</a></span></dt><dd><dl><dt><span class="chapter"><a href="Packaging.html">16. Notes to packagers</a></span></dt><dd><dl><dt><span class="sect1"><a href="Packaging.html#id2583594">Versioning</a></span></dt><dt><span class="sect1"><a href="Packaging.html#id2583622">Modules</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="pr01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"> </td><td width="40%" align="right" valign="top"> Attribution</td></tr></table></div></body></html>
+</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="pt05.html">V. Appendices</a></span></dt><dd><dl><dt><span class="chapter"><a href="Packaging.html">16. Notes to packagers</a></span></dt><dd><dl><dt><span class="sect1"><a href="Packaging.html#id350794">Versioning</a></span></dt><dt><span class="sect1"><a href="Packaging.html#id350817">Modules</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="pr01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"> </td><td width="40%" align="right" valign="top"> Attribution</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/internals.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/internals.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/internals.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 5. Samba Internals</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt02.html" title="Part II. Samba Basics"><link rel="prev" href="debug.html" title="Chapter 4. The samba DEBUG system"><link rel="next" href="CodingSuggestions.html" title="Chapter 6. Coding Suggestions"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 5. Samba Internals</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug.html">Prev</a> </td><th width="60%" align="center">Part II. Samba Basics</th><td width="20%" align="right"> <a accesskey="n" href="CodingSuggestions.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="internals"></a>Chapter 5. Samba Internals</h2></div><div><div class="author"><h3 class="author"><span class="firstname">David</span> <span class="surname">Chappell</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:David.Chappell at mail.trincoll.edu">David.Chappell at mail.trincoll.edu</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">8 May 1996</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="internals.html#id2578812">Character Handling</a></span></dt><dt><span class="sect1"><a href="internals.html#id2578834">The new functions</a></span></dt><dt><span class="sect1"><a href="internals.html#id2578964">Macros in byteorder.h</a></span></dt><dd><dl><dt><span class="sect2"><a href="internals.html#id2578975">CVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2578987">PVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2578998">SCVAL(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579009">SVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579022">IVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579034">SVALS(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579046">IVALS(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579057">SSVAL(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579069">SIVAL(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579081">SSVALS(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579093">SIVALS(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579105">RSVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579116">RIVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579128">RSSVAL(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579141">RSIVAL(buf,pos,val)</a></span></dt></dl></dd><dt><span class="sect1"><a href="internals.html#id2579154">LAN Manager Samba API</a></span></dt><dd><dl><dt><span class="sect2"><a href="internals.html#id2579182">Parameters</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579308">Return value</a></span></dt></dl></dd><dt><span class="sect1"><a href="internals.html#id2579379">Code character table</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2578812"></a>Character Handling</h2></div></div></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 5. Samba Internals</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt02.html" title="Part II. Samba Basics"><link rel="prev" href="debug.html" title="Chapter 4. The samba DEBUG system"><link rel="next" href="CodingSuggestions.html" title="Chapter 6. Coding Suggestions"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 5. Samba Internals</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug.html">Prev</a> </td><th width="60%" align="center">Part II. Samba Basics</th><td width="20%" align="right"> <a accesskey="n" href="CodingSuggestions.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="internals"></a>Chapter 5. Samba Internals</h2></div><div><div class="author"><h3 class="author"><span class="firstname">David</span> <span class="surname">Chappell</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:David.Chappell at mail.trincoll.edu">David.Chappell at mail.trincoll.edu</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">8 May 1996</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="internals.html#id346925">Character Handling</a></span></dt><dt><span class="sect1"><a href="internals.html#id346942">The new functions</a></span></dt><dt><span class="sect1"><a href="internals.html#id347046">Macros in byteorder.h</a></span></dt><dd><dl><dt><span class="sect2"><a href="internals.html#id347056">CVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347066">PVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347076">SCVAL(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347087">SVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347098">IVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347108">SVALS(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347119">IVALS(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347130">SSVAL(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347140">SIVAL(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347151">SSVALS(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347161">SIVALS(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347172">RSVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347182">RIVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347193">RSSVAL(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347204">RSIVAL(buf,pos,val)</a></span></dt></dl></dd><dt><span class="sect1"><a href="internals.html#id347215">LAN Manager Samba API</a></span></dt><dd><dl><dt><span class="sect2"><a href="internals.html#id347239">Parameters</a></span></dt><dt><span class="sect2"><a href="internals.html#id347345">Return value</a></span></dt></dl></dd><dt><span class="sect1"><a href="internals.html#id347402">Code character table</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id346925"></a>Character Handling</h2></div></div></div><p>
 This section describes character set handling in Samba, as implemented in
 Samba 3.0 and above
 </p><p>
@@ -8,7 +8,7 @@
 telling if a particular char* is in dos codepage or unix
 codepage. This led to a nightmare of code that tried to cope with
 particular cases without handlingt the general case.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2578834"></a>The new functions</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id346942"></a>The new functions</h2></div></div></div><p>
 The new system works like this:
 </p><div class="orderedlist"><ol type="1"><li><p>
 	all char* strings inside Samba are "unix" strings. These are
@@ -70,28 +70,28 @@
 	parameters is gone.
 </p></li><li><p>
 	all vfs functions take unix strings. Don't convert when passing to them
-</p></li></ol></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2578964"></a>Macros in byteorder.h</h2></div></div></div><p>
+</p></li></ol></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id347046"></a>Macros in byteorder.h</h2></div></div></div><p>
 This section describes the macros defined in byteorder.h.  These macros 
 are used extensively in the Samba code.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2578975"></a>CVAL(buf,pos)</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347056"></a>CVAL(buf,pos)</h3></div></div></div><p>
 returns the byte at offset pos within buffer buf as an unsigned character.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2578987"></a>PVAL(buf,pos)</h3></div></div></div><p>returns the value of CVAL(buf,pos) cast to type unsigned integer.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2578998"></a>SCVAL(buf,pos,val)</h3></div></div></div><p>sets the byte at offset pos within buffer buf to value val.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579009"></a>SVAL(buf,pos)</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347066"></a>PVAL(buf,pos)</h3></div></div></div><p>returns the value of CVAL(buf,pos) cast to type unsigned integer.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347076"></a>SCVAL(buf,pos,val)</h3></div></div></div><p>sets the byte at offset pos within buffer buf to value val.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347087"></a>SVAL(buf,pos)</h3></div></div></div><p>
 	returns the value of the unsigned short (16 bit) little-endian integer at 
 	offset pos within buffer buf.  An integer of this type is sometimes
 	refered to as "USHORT".
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579022"></a>IVAL(buf,pos)</h3></div></div></div><p>returns the value of the unsigned 32 bit little-endian integer at offset 
-pos within buffer buf.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579034"></a>SVALS(buf,pos)</h3></div></div></div><p>returns the value of the signed short (16 bit) little-endian integer at 
-offset pos within buffer buf.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579046"></a>IVALS(buf,pos)</h3></div></div></div><p>returns the value of the signed 32 bit little-endian integer at offset pos
-within buffer buf.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579057"></a>SSVAL(buf,pos,val)</h3></div></div></div><p>sets the unsigned short (16 bit) little-endian integer at offset pos within 
-buffer buf to value val.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579069"></a>SIVAL(buf,pos,val)</h3></div></div></div><p>sets the unsigned 32 bit little-endian integer at offset pos within buffer 
-buf to the value val.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579081"></a>SSVALS(buf,pos,val)</h3></div></div></div><p>sets the short (16 bit) signed little-endian integer at offset pos within 
-buffer buf to the value val.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579093"></a>SIVALS(buf,pos,val)</h3></div></div></div><p>sets the signed 32 bit little-endian integer at offset pos withing buffer
-buf to the value val.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579105"></a>RSVAL(buf,pos)</h3></div></div></div><p>returns the value of the unsigned short (16 bit) big-endian integer at 
-offset pos within buffer buf.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579116"></a>RIVAL(buf,pos)</h3></div></div></div><p>returns the value of the unsigned 32 bit big-endian integer at offset 
-pos within buffer buf.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579128"></a>RSSVAL(buf,pos,val)</h3></div></div></div><p>sets the value of the unsigned short (16 bit) big-endian integer at 
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347098"></a>IVAL(buf,pos)</h3></div></div></div><p>returns the value of the unsigned 32 bit little-endian integer at offset 
+pos within buffer buf.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347108"></a>SVALS(buf,pos)</h3></div></div></div><p>returns the value of the signed short (16 bit) little-endian integer at 
+offset pos within buffer buf.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347119"></a>IVALS(buf,pos)</h3></div></div></div><p>returns the value of the signed 32 bit little-endian integer at offset pos
+within buffer buf.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347130"></a>SSVAL(buf,pos,val)</h3></div></div></div><p>sets the unsigned short (16 bit) little-endian integer at offset pos within 
+buffer buf to value val.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347140"></a>SIVAL(buf,pos,val)</h3></div></div></div><p>sets the unsigned 32 bit little-endian integer at offset pos within buffer 
+buf to the value val.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347151"></a>SSVALS(buf,pos,val)</h3></div></div></div><p>sets the short (16 bit) signed little-endian integer at offset pos within 
+buffer buf to the value val.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347161"></a>SIVALS(buf,pos,val)</h3></div></div></div><p>sets the signed 32 bit little-endian integer at offset pos withing buffer
+buf to the value val.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347172"></a>RSVAL(buf,pos)</h3></div></div></div><p>returns the value of the unsigned short (16 bit) big-endian integer at 
+offset pos within buffer buf.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347182"></a>RIVAL(buf,pos)</h3></div></div></div><p>returns the value of the unsigned 32 bit big-endian integer at offset 
+pos within buffer buf.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347193"></a>RSSVAL(buf,pos,val)</h3></div></div></div><p>sets the value of the unsigned short (16 bit) big-endian integer at 
 offset pos within buffer buf to value val.
-refered to as "USHORT".</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579141"></a>RSIVAL(buf,pos,val)</h3></div></div></div><p>sets the value of the unsigned 32 bit big-endian integer at offset 
-pos within buffer buf to value val.</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2579154"></a>LAN Manager Samba API</h2></div></div></div><p>
+refered to as "USHORT".</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347204"></a>RSIVAL(buf,pos,val)</h3></div></div></div><p>sets the value of the unsigned 32 bit big-endian integer at offset 
+pos within buffer buf to value val.</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id347215"></a>LAN Manager Samba API</h2></div></div></div><p>
 This section describes the functions need to make a LAN Manager RPC call.
 This information had been obtained by examining the Samba code and the LAN
 Manager 2.0 API documentation.  It should not be considered entirely
@@ -104,7 +104,7 @@
 </p><p>
 This function is defined in client.c.  It uses an SMB transaction to call a
 remote api.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579182"></a>Parameters</h3></div></div></div><p>The parameters are as follows:</p><div class="orderedlist"><ol type="1"><li><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347239"></a>Parameters</h3></div></div></div><p>The parameters are as follows:</p><div class="orderedlist"><ol type="1"><li><p>
 	prcnt: the number of bytes of parameters begin sent.
 </p></li><li><p>
 	drcnt:   the number of bytes of data begin sent.
@@ -149,7 +149,7 @@
 </p></li></ol></div><p>
 The code in client.c always calls call_api() with no data.  It is unclear
 when a non-zero length data buffer would be sent.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579308"></a>Return value</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347345"></a>Return value</h3></div></div></div><p>
 The returned parameters (pointed to by rparam), in their order of appearance
 are:</p><div class="orderedlist"><ol type="1"><li><p>
 An unsigned 16 bit integer which contains the API function's return code. 
@@ -180,7 +180,7 @@
 The third parameter (which may be read as "SVAL(rparam,4)") has something to
 do with indicating the amount of data returned or possibly the amount of
 data which can be returned if enough buffer space is allowed.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2579379"></a>Code character table</h2></div></div></div><p>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id347402"></a>Code character table</h2></div></div></div><p>
 Certain data structures are described by means of ASCIIz strings containing
 code characters.  These are the code characters:
 </p><div class="orderedlist"><ol type="1"><li><p>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/modules.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/modules.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/modules.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,7 +1,7 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 8. Modules</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt02.html" title="Part II. Samba Basics"><link rel="prev" href="contributing.html" title="Chapter 7. Contributing code"><link rel="next" href="pt03.html" title="Part III. Samba Subsystems"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 8. Modules</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="contributing.html">Prev</a> </td><th width="60%" align="center">Part II. Samba Basics</th><td width="20%" align="right"> <a accesskey="n" href="pt03.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="modules"></a>Chapter 8. Modules</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate"> 19 March 2003 </p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="modules.html#id2580050">Advantages</a></span></dt><dt><span class="sect1"><a href="modules.html#id2580089">Loading modules</a></span></dt><dd><dl><dt><span class="sect2"><a href="modules.html#id2580116">Static modules</a></span></dt><dt><span class="sect2"><a href="modules.html#id2580150">Shared modules</a></span></dt></dl></dd><dt><span class="sect1"><a href="modules.html#id2580174">Writing modules</a></span></dt><dd><dl><dt><span class="sect2"><a href="modules.html#id2580225">Static/Shared selection in configure.in</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2580050"></a>Advantages</h2></div></div></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 8. Modules</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt02.html" title="Part II. Samba Basics"><link rel="prev" href="contributing.html" title="Chapter 7. Contributing code"><link rel="next" href="pt03.html" title="Part III. Samba Subsystems"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 8. Modules</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="contributing.html">Prev</a> </td><th width="60%" align="center">Part II. Samba Basics</th><td width="20%" align="right"> <a accesskey="n" href="pt03.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="modules"></a>Chapter 8. Modules</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate"> 19 March 2003 </p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="modules.html#id347970">Advantages</a></span></dt><dt><span class="sect1"><a href="modules.html#id348003">Loading modules</a></span></dt><dd><dl><dt><span class="sect2"><a href="modules.html#id348025">Static modules</a></span></dt><dt><span class="sect2"><a href="modules.html#id348054">Shared modules</a></span></dt></dl></dd><dt><span class="sect1"><a href="modules.html#id348073">Writing modules</a></span></dt><dd><dl><dt><span class="sect2"><a href="modules.html#id348114">Static/Shared selection in configure.in</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id347970"></a>Advantages</h2></div></div></div><p>
 The new modules system has the following advantages:
 </p><table class="simplelist" border="0" summary="Simple list"><tr><td>Transparent loading of static and shared modules (no need 
-for a subsystem to know about modules)</td></tr><tr><td>Simple selection between shared and static modules at configure time</td></tr><tr><td>"preload modules" option for increasing performance for stable modules</td></tr><tr><td>No nasty #define stuff anymore</td></tr><tr><td>All backends are available as plugin now (including pdb_ldap and pdb_tdb)</td></tr></table></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2580089"></a>Loading modules</h2></div></div></div><p>
+for a subsystem to know about modules)</td></tr><tr><td>Simple selection between shared and static modules at configure time</td></tr><tr><td>"preload modules" option for increasing performance for stable modules</td></tr><tr><td>No nasty #define stuff anymore</td></tr><tr><td>All backends are available as plugin now (including pdb_ldap and pdb_tdb)</td></tr></table></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id348003"></a>Loading modules</h2></div></div></div><p>
 Some subsystems in samba use different backends. These backends can be 
 either statically linked in to samba or available as a plugin. A subsystem 
 should have a function that allows a module to register itself. For example, 
@@ -11,7 +11,7 @@
 </pre><p>
 This function will be called by the initialisation function of the module to 
 register itself. 
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2580116"></a>Static modules</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id348025"></a>Static modules</h3></div></div></div><p>
 The modules system compiles a list of initialisation functions for the 
 static modules of each subsystem. This is a define. For example, 
 it is here currently (from <code class="filename">include/config.h</code>): 
@@ -21,7 +21,7 @@
 </pre><p>
 These functions should be called before the subsystem is used. That 
 should be done when the subsystem is initialised or first used. 
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2580150"></a>Shared modules</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id348054"></a>Shared modules</h3></div></div></div><p>
 If a subsystem needs a certain backend, it should check if it has 
 already been registered. If the backend hasn't been registered already, 
 the subsystem should call smb_probe_module(char *subsystem, char *backend).
@@ -31,7 +31,7 @@
 absolute path specified in 'backend'.
 </p><p>After smb_probe_module() has been executed, the subsystem 
 should check again if the module has been registered. 
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2580174"></a>Writing modules</h2></div></div></div><p>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id348073"></a>Writing modules</h2></div></div></div><p>
 Each module has an initialisation function. For modules that are 
 included with samba this name is '<em class="replaceable"><code>subsystem</code></em>_<em class="replaceable"><code>backend</code></em>_init'. For external modules (that will never be built-in, but only available as a module) this name is always 'init_module'. (In the case of modules included with samba, the configure system will add a #define subsystem_backend_init() init_module()).
 The prototype for these functions is:
@@ -46,7 +46,7 @@
 smb_register_passdb(PASSDB_INTERFACE_VERSION, "ldapsam_nua", pdb_init_ldapsam_nua);
 	return NT_STATUS_OK;
 }
-</pre><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2580225"></a>Static/Shared selection in configure.in</h3></div></div></div><p>
+</pre><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id348114"></a>Static/Shared selection in configure.in</h3></div></div></div><p>
 Some macros in configure.in generate the various defines and substs that 
 are necessary for the system to work correct. All modules that should 
 be built by default have to be added to the variable 'default_modules'. 

Modified: branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/ntdomain.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/ntdomain.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/ntdomain.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 2. NT Domain RPC's</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt01.html" title="Part I. The protocol"><link rel="prev" href="unix-smb.html" title="Chapter 1. NetBIOS in a Unix World"><link rel="next" href="pt02.html" title="Part II. Samba Basics"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 2. NT Domain RPC's</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="unix-smb.html">Prev</a> </td><th width="60%" align="center">Part I. The protocol</th><td width="20%" align="right"> <a accesskey="n" href="pt02.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="ntdomain"></a>Chapter 2. NT Domain RPC's</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Luke</span> <span class="surname">Leighton</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:lkcl at switchboard.net">lkcl at switchboard.net</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Paul</span> <span class="surname">Ashton</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:paul at argo.demon.co.uk">paul at argo.demon.co.uk</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Duncan</span> <span class="surname">Stansfield</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:duncans at sco.com">duncans at sco.com</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">01 November 97(version 0.0.24)</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ntdomain.html#id2571233">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id2571402">Sources</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2571430">Credits</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id2571462">Notes and Structures</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id2571468">Notes</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2571532">Enumerations</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2571703">Structures</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id2574068">MSRPC over Transact Named Pipe</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id2574078">MSRPC Pipes</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2574164">Header</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2574869">Tail</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2574905">RPC Bind / Bind Ack</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2575052">NTLSA Transact Named Pipe</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2575186">LSA Open Policy</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2575286">LSA Query Info Policy</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2575371">LSA Enumerate Trusted Domains</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2575444">LSA Open Secret</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2575532">LSA Close</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2575585">LSA Lookup SIDS</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2575753">LSA Lookup Names</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id2575934">NETLOGON rpc Transact Named Pipe</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id2576065">LSA Request Challenge</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2576179">LSA Authenticate 2</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2576297">LSA Server Password Set</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2576391">LSA SAM Logon</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2576474">LSA SAM Logoff</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id2576547">\\MAILSLOT\NET\NTLOGON</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id2576562">Query for PDC</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2576771">SAM Logon</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id2577032">SRVSVC Transact Named Pipe</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id2577067">Net Share Enum</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2577244">Net Server Get Info</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id2577337">Cryptographic side of NT Domain Authentication</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id2577343">Definitions</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2577473">Protocol</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2577554">Comments</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id2577596">SIDs and RIDs</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id2577629">Well-known SIDs</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2577880">Well-known RIDS</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2571233"></a>Introduction</h2></div></div></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 2. NT Domain RPC's</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt01.html" title="Part I. The protocol"><link rel="prev" href="unix-smb.html" title="Chapter 1. NetBIOS in a Unix World"><link rel="next" href="pt02.html" title="Part II. Samba Basics"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 2. NT Domain RPC's</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="unix-smb.html">Prev</a> </td><th width="60%" align="center">Part I. The protocol</th><td width="20%" align="right"> <a accesskey="n" href="pt02.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="ntdomain"></a>Chapter 2. NT Domain RPC's</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Luke</span> <span class="surname">Leighton</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:lkcl at switchboard.net">lkcl at switchboard.net</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Paul</span> <span class="surname">Ashton</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:paul at argo.demon.co.uk">paul at argo.demon.co.uk</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Duncan</span> <span class="surname">Stansfield</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:duncans at sco.com">duncans at sco.com</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">01 November 97(version 0.0.24)</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ntdomain.html#id340101">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id340231">Sources</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id340255">Credits</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id340283">Notes and Structures</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id340288">Notes</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id340337">Enumerations</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id340498">Structures</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id342673">MSRPC over Transact Named Pipe</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id342683">MSRPC Pipes</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id342750">Header</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id343386">Tail</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id343421">RPC Bind / Bind Ack</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id343553">NTLSA Transact Named Pipe</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id343674">LSA Open Policy</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id343768">LSA Query Info Policy</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id343847">LSA Enumerate Trusted Domains</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id343915">LSA Open Secret</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id343997">LSA Close</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id344046">LSA Lookup SIDS</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id344201">LSA Lookup Names</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id344368">NETLOGON rpc Transact Named Pipe</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id344488">LSA Request Challenge</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id344589">LSA Authenticate 2</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id344698">LSA Server Password Set</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id344782">LSA SAM Logon</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id344856">LSA SAM Logoff</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id344925">\\MAILSLOT\NET\NTLOGON</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id344936">Query for PDC</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id345132">SAM Logon</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id345377">SRVSVC Transact Named Pipe</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id345410">Net Share Enum</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id345573">Net Server Get Info</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id345660">Cryptographic side of NT Domain Authentication</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id345665">Definitions</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id345785">Protocol</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id345847">Comments</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id345879">SIDs and RIDs</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id345907">Well-known SIDs</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id346144">Well-known RIDS</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id340101"></a>Introduction</h2></div></div></div><p>
 This document contains information to provide an NT workstation with login
 services, without the need for an NT server. It is the sgml version of <a class="ulink" href="http://mailhost.cb1.com/~lkcl/cifsntdomain.txt" target="_top">http://mailhost.cb1.com/~lkcl/cifsntdomain.txt</a>, controlled by Luke.
 </p><p>
@@ -44,7 +44,7 @@
 that it is already a member of the domain.</p></li><li><p>the cryptographic side of the NetrServerPasswordSet command, 
 which would allow the workstation to change its password.  This password is
 used to generate the long-term session key.  [It is possible to reject this
-command, and keep the default workstation password].</p></li></ol></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2571402"></a>Sources</h3></div></div></div><table class="simplelist" border="0" summary="Simple list"><tr><td>cket Traces from Netmonitor (Service Pack 1 and above)</td></tr><tr><td>ul Ashton and Luke Leighton's other "NT Domain" doc.</td></tr><tr><td>FS documentation - cifs6.txt</td></tr><tr><td>FS documentation - cifsrap2.txt</td></tr></table></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2571430"></a>Credits</h3></div></div></div><table class="simplelist" border="0" summary="Simple list"><tr><td>Paul Ashton: loads of work with Net Monitor; understanding the NT authentication system; reference implementation of the NT domain support on which this document is originally based.</td></tr><tr><td>Duncan Stansfield: low-level analysis of MSRPC Pipes.</td></tr><tr><td>Linus Nordberg: producing c-code from Paul's crypto spec.</td></tr><tr><td>Windows Sourcer development team</td></tr></table></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2571462"></a>Notes and Structures</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2571468"></a>Notes</h3></div></div></div><div class="orderedlist"><ol type="1"><li><p>
+command, and keep the default workstation password].</p></li></ol></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id340231"></a>Sources</h3></div></div></div><table class="simplelist" border="0" summary="Simple list"><tr><td>cket Traces from Netmonitor (Service Pack 1 and above)</td></tr><tr><td>ul Ashton and Luke Leighton's other "NT Domain" doc.</td></tr><tr><td>FS documentation - cifs6.txt</td></tr><tr><td>FS documentation - cifsrap2.txt</td></tr></table></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id340255"></a>Credits</h3></div></div></div><table class="simplelist" border="0" summary="Simple list"><tr><td>Paul Ashton: loads of work with Net Monitor; understanding the NT authentication system; reference implementation of the NT domain support on which this document is originally based.</td></tr><tr><td>Duncan Stansfield: low-level analysis of MSRPC Pipes.</td></tr><tr><td>Linus Nordberg: producing c-code from Paul's crypto spec.</td></tr><tr><td>Windows Sourcer development team</td></tr></table></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id340283"></a>Notes and Structures</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id340288"></a>Notes</h3></div></div></div><div class="orderedlist"><ol type="1"><li><p>
 In the SMB Transact pipes, some "Structures", described here, appear to be
 4-byte aligned with the SMB header, at their start.  Exactly which
 "Structures" need aligning is not precisely known or documented.
@@ -72,15 +72,15 @@
 the pointer is also non-zero.  immediately following the pointer is the
 count again, followed by an array of container sub-structures.  the count
 appears a third time after the last sub-structure.
-</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2571532"></a>Enumerations</h3></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2571537"></a>MSRPC Header type</h4></div></div></div><p>command number in the msrpc packet header</p><div class="variablelist"><dl><dt><span class="term">MSRPC_Request:</span></dt><dd><p>0x00</p></dd><dt><span class="term">MSRPC_Response:</span></dt><dd><p>0x02</p></dd><dt><span class="term">MSRPC_Bind:</span></dt><dd><p>0x0B</p></dd><dt><span class="term">MSRPC_BindAck:</span></dt><dd><p>0x0C</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2571598"></a>MSRPC Packet info</h4></div></div></div><p>The meaning of these flags is undocumented</p><div class="variablelist"><dl><dt><span class="term">FirstFrag:</span></dt><dd><p>0x01 </p></dd><dt><span class="term">LastFrag:</span></dt><dd><p>0x02 </p></dd><dt><span class="term">NotaFrag:</span></dt><dd><p>0x04  </p></dd><dt><span class="term">RecRespond:</span></dt><dd><p>0x08  </p></dd><dt><span class="term">NoMultiplex:</span></dt><dd><p>0x10  </p></dd><dt><span class="term">NotForIdemp:</span></dt><dd><p>0x20  </p></dd><dt><span class="term">NotforBcast:</span></dt><dd><p>0x40  </p></dd><dt><span class="term">NoUuid:</span></dt><dd><p>0x80 </p></dd></dl></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2571703"></a>Structures</h3></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2571709"></a>VOID *</h4></div></div></div><p>sizeof VOID* is 32 bits.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2571718"></a>char</h4></div></div></div><p>sizeof char is 8 bits.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2571727"></a>UTIME</h4></div></div></div><p>UTIME is 32 bits, indicating time in seconds since 01jan1970.  documented in cifs6.txt (section 3.5 page, page 30).</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2571738"></a>NTTIME</h4></div></div></div><p>NTTIME is 64 bits.  documented in cifs6.txt (section 3.5 page, page 30).</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2571748"></a>DOM_SID (domain SID structure)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>num of sub-authorities in domain SID</p></dd><dt><span class="term">UINT8</span></dt><dd><p>SID revision number</p></dd><dt><span class="term">UINT8</span></dt><dd><p>num of sub-authorities in domain SID</p></dd><dt><span class="term">UINT8[6]</span></dt><dd><p>6 bytes for domain SID - Identifier Authority.</p></dd><dt><span class="term">UINT16[n_subauths]</span></dt><dd><p>domain SID sub-authorities</p></dd></dl></div><p><span class="emphasis"><em>Note: the domain SID is documented elsewhere.</em></span>
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2571822"></a>STR (string)</h4></div></div></div><p>STR (string) is a char[] : a null-terminated string of ascii characters.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2571833"></a>UNIHDR (unicode string header) </h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT16</span></dt><dd><p>length of unicode string</p></dd><dt><span class="term">UINT16</span></dt><dd><p>max length of unicode string</p></dd><dt><span class="term">UINT32</span></dt><dd><p>4 - undocumented.</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2571878"></a>UNIHDR2 (unicode string header plus buffer pointer)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UNIHDR</span></dt><dd><p>unicode string header</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2571912"></a>UNISTR (unicode string)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT16[]</span></dt><dd><p>null-terminated string of unicode characters.</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2571934"></a>NAME (length-indicated unicode string)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>length of unicode string</p></dd><dt><span class="term">UINT16[]</span></dt><dd><p>null-terminated string of unicode characters.</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2571967"></a>UNISTR2 (aligned unicode string)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT8[]</span></dt><dd><p>padding to get unicode string 4-byte aligned with the start of the SMB header.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>max length of unicode string</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - undocumented</p></dd><dt><span class="term">UINT32</span></dt><dd><p>length of unicode string</p></dd><dt><span class="term">UINT16[]</span></dt><dd><p>string of uncode characters</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2572036"></a>OBJ_ATTR (object attributes)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>0x18 - length (in bytes) including the length field.</p></dd><dt><span class="term">VOID*</span></dt><dd><p>0 - root directory (pointer)</p></dd><dt><span class="term">VOID*</span></dt><dd><p>0 - object name (pointer)</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - attributes (undocumented)</p></dd><dt><span class="term">VOID*</span></dt><dd><p>0 - security descriptior (pointer)</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - security quality of service</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2572111"></a>POL_HND (LSA policy handle)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">char[20]</span></dt><dd><p>policy handle</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2572132"></a>DOM_SID2 (domain SID structure, SIDS stored in unicode)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>5 - SID type</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - undocumented</p></dd><dt><span class="term">UNIHDR2</span></dt><dd><p>domain SID unicode string header</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>domain SID unicode string</p></dd></dl></div><p><span class="emphasis"><em>Note:	there is a conflict between the unicode string header and the unicode string itself as to which to use to indicate string length.  this will need to be resolved.</em></span></p><p><span class="emphasis"><em>Note:	the SID type indicates, for example, an alias; a well-known group etc. this is documented somewhere.</em></span></p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2572202"></a>DOM_RID (domain RID structure)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>5 - well-known SID.  1 - user SID (see ShowACLs)</p></dd><dt><span class="term">UINT32</span></dt><dd><p>5 - undocumented</p></dd><dt><span class="term">UINT32</span></dt><dd><p>domain RID </p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - domain index out of above reference domains</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2572257"></a>LOG_INFO (server, account, client structure)</h4></div></div></div><p><span class="emphasis"><em>Note:	logon server name starts with two '\' characters and is upper case.</em></span></p><p><span class="emphasis"><em>Note:	account name is the logon client name from the LSA Request Challenge, with a $ on the end of it, in upper case.</em></span></p><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon server unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>account name unicode string</p></dd><dt><span class="term">UINT16</span></dt><dd><p>sec_chan - security channel type</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon client machine unicode string</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2572337"></a>CLNT_SRV (server, client names structure)</h4></div></div></div><p><span class="emphasis"><em>Note:	logon server name starts with two '\' characters and is upper case.</em></span></p><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon server unicode string</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon client machine unicode string</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2572399"></a>CREDS (credentials + time stamp)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">char[8]</span></dt><dd><p>credentials</p></dd><dt><span class="term">UTIME</span></dt><dd><p>time stamp</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2572432"></a>CLNT_INFO2 (server, client structure, client credentials)</h4></div></div></div><p><span class="emphasis"><em>Note: whenever this structure appears in a request, you must take a copy of the client-calculated credentials received, because they will beused in subsequent credential checks.  the presumed intention is to
-	maintain an authenticated request/response trail.</em></span></p><div class="variablelist"><dl><dt><span class="term">CLNT_SRV</span></dt><dd><p>client and server names</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>???? padding, for 4-byte alignment with SMB header.</p></dd><dt><span class="term">VOID*</span></dt><dd><p>pointer to client credentials.</p></dd><dt><span class="term">CREDS</span></dt><dd><p>client-calculated credentials + client time</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2572498"></a>CLNT_INFO (server, account, client structure, client credentials)</h4></div></div></div><p><span class="emphasis"><em>Note: whenever this structure appears in a request, you must take a copy of the client-calculated credentials received, because they will be used in subsequent credential checks.  the presumed intention is to maintain an authenticated request/response trail.</em></span></p><div class="variablelist"><dl><dt><span class="term">LOG_INFO</span></dt><dd><p>logon account info</p></dd><dt><span class="term">CREDS</span></dt><dd><p>client-calculated credentials + client time</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2572541"></a>ID_INFO_1 (id info structure, auth level 1)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>ptr_id_info_1</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>domain name unicode header</p></dd><dt><span class="term">UINT32</span></dt><dd><p>param control</p></dd><dt><span class="term">UINT64</span></dt><dd><p>logon ID</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>user name unicode header</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>workgroup name unicode header</p></dd><dt><span class="term">char[16]</span></dt><dd><p>arc4 LM OWF Password</p></dd><dt><span class="term">char[16]</span></dt><dd><p>arc4 NT OWF Password</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>domain name unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>user name unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>workstation name unicode string</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2572677"></a>SAM_INFO (sam logon/logoff id info structure)</h4></div></div></div><p><span class="emphasis"><em>Note: presumably, the return credentials is supposedly for the server to verify that the credential chain hasn't been compromised.</em></span></p><div class="variablelist"><dl><dt><span class="term">CLNT_INFO2</span></dt><dd><p>client identification/authentication info</p></dd><dt><span class="term">VOID*</span></dt><dd><p>pointer to return credentials.</p></dd><dt><span class="term">CRED</span></dt><dd><p>return credentials - ignored.</p></dd><dt><span class="term">UINT16</span></dt><dd><p>logon level</p></dd><dt><span class="term">UINT16</span></dt><dd><p>switch value</p></dd></dl></div><pre class="programlisting">
+</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id340337"></a>Enumerations</h3></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id340343"></a>MSRPC Header type</h4></div></div></div><p>command number in the msrpc packet header</p><div class="variablelist"><dl><dt><span class="term">MSRPC_Request:</span></dt><dd><p>0x00</p></dd><dt><span class="term">MSRPC_Response:</span></dt><dd><p>0x02</p></dd><dt><span class="term">MSRPC_Bind:</span></dt><dd><p>0x0B</p></dd><dt><span class="term">MSRPC_BindAck:</span></dt><dd><p>0x0C</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id340399"></a>MSRPC Packet info</h4></div></div></div><p>The meaning of these flags is undocumented</p><div class="variablelist"><dl><dt><span class="term">FirstFrag:</span></dt><dd><p>0x01 </p></dd><dt><span class="term">LastFrag:</span></dt><dd><p>0x02 </p></dd><dt><span class="term">NotaFrag:</span></dt><dd><p>0x04  </p></dd><dt><span class="term">RecRespond:</span></dt><dd><p>0x08  </p></dd><dt><span class="term">NoMultiplex:</span></dt><dd><p>0x10  </p></dd><dt><span class="term">NotForIdemp:</span></dt><dd><p>0x20  </p></dd><dt><span class="term">NotforBcast:</span></dt><dd><p>0x40  </p></dd><dt><span class="term">NoUuid:</span></dt><dd><p>0x80 </p></dd></dl></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id340498"></a>Structures</h3></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id340503"></a>VOID *</h4></div></div></div><p>sizeof VOID* is 32 bits.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id340512"></a>char</h4></div></div></div><p>sizeof char is 8 bits.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id340520"></a>UTIME</h4></div></div></div><p>UTIME is 32 bits, indicating time in seconds since 01jan1970.  documented in cifs6.txt (section 3.5 page, page 30).</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id340530"></a>NTTIME</h4></div></div></div><p>NTTIME is 64 bits.  documented in cifs6.txt (section 3.5 page, page 30).</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id340539"></a>DOM_SID (domain SID structure)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>num of sub-authorities in domain SID</p></dd><dt><span class="term">UINT8</span></dt><dd><p>SID revision number</p></dd><dt><span class="term">UINT8</span></dt><dd><p>num of sub-authorities in domain SID</p></dd><dt><span class="term">UINT8[6]</span></dt><dd><p>6 bytes for domain SID - Identifier Authority.</p></dd><dt><span class="term">UINT16[n_subauths]</span></dt><dd><p>domain SID sub-authorities</p></dd></dl></div><p><span class="emphasis"><em>Note: the domain SID is documented elsewhere.</em></span>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id340608"></a>STR (string)</h4></div></div></div><p>STR (string) is a char[] : a null-terminated string of ascii characters.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id340618"></a>UNIHDR (unicode string header) </h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT16</span></dt><dd><p>length of unicode string</p></dd><dt><span class="term">UINT16</span></dt><dd><p>max length of unicode string</p></dd><dt><span class="term">UINT32</span></dt><dd><p>4 - undocumented.</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id340660"></a>UNIHDR2 (unicode string header plus buffer pointer)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UNIHDR</span></dt><dd><p>unicode string header</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id340691"></a>UNISTR (unicode string)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT16[]</span></dt><dd><p>null-terminated string of unicode characters.</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id340711"></a>NAME (length-indicated unicode string)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>length of unicode string</p></dd><dt><span class="term">UINT16[]</span></dt><dd><p>null-terminated string of unicode characters.</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id340742"></a>UNISTR2 (aligned unicode string)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT8[]</span></dt><dd><p>padding to get unicode string 4-byte aligned with the start of the SMB header.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>max length of unicode string</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - undocumented</p></dd><dt><span class="term">UINT32</span></dt><dd><p>length of unicode string</p></dd><dt><span class="term">UINT16[]</span></dt><dd><p>string of uncode characters</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id340806"></a>OBJ_ATTR (object attributes)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>0x18 - length (in bytes) including the length field.</p></dd><dt><span class="term">VOID*</span></dt><dd><p>0 - root directory (pointer)</p></dd><dt><span class="term">VOID*</span></dt><dd><p>0 - object name (pointer)</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - attributes (undocumented)</p></dd><dt><span class="term">VOID*</span></dt><dd><p>0 - security descriptior (pointer)</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - security quality of service</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id340874"></a>POL_HND (LSA policy handle)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">char[20]</span></dt><dd><p>policy handle</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id340894"></a>DOM_SID2 (domain SID structure, SIDS stored in unicode)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>5 - SID type</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - undocumented</p></dd><dt><span class="term">UNIHDR2</span></dt><dd><p>domain SID unicode string header</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>domain SID unicode string</p></dd></dl></div><p><span class="emphasis"><em>Note:	there is a conflict between the unicode string header and the unicode string itself as to which to use to indicate string length.  this will need to be resolved.</em></span></p><p><span class="emphasis"><em>Note:	the SID type indicates, for example, an alias; a well-known group etc. this is documented somewhere.</em></span></p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id340957"></a>DOM_RID (domain RID structure)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>5 - well-known SID.  1 - user SID (see ShowACLs)</p></dd><dt><span class="term">UINT32</span></dt><dd><p>5 - undocumented</p></dd><dt><span class="term">UINT32</span></dt><dd><p>domain RID </p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - domain index out of above reference domains</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id341009"></a>LOG_INFO (server, account, client structure)</h4></div></div></div><p><span class="emphasis"><em>Note:	logon server name starts with two '\' characters and is upper case.</em></span></p><p><span class="emphasis"><em>Note:	account name is the logon client name from the LSA Request Challenge, with a $ on the end of it, in upper case.</em></span></p><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon server unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>account name unicode string</p></dd><dt><span class="term">UINT16</span></dt><dd><p>sec_chan - security channel type</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon client machine unicode string</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id341082"></a>CLNT_SRV (server, client names structure)</h4></div></div></div><p><span class="emphasis"><em>Note:	logon server name starts with two '\' characters and is upper case.</em></span></p><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon server unicode string</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon client machine unicode string</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id341139"></a>CREDS (credentials + time stamp)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">char[8]</span></dt><dd><p>credentials</p></dd><dt><span class="term">UTIME</span></dt><dd><p>time stamp</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id341170"></a>CLNT_INFO2 (server, client structure, client credentials)</h4></div></div></div><p><span class="emphasis"><em>Note: whenever this structure appears in a request, you must take a copy of the client-calculated credentials received, because they will beused in subsequent credential checks.  the presumed intention is to
+	maintain an authenticated request/response trail.</em></span></p><div class="variablelist"><dl><dt><span class="term">CLNT_SRV</span></dt><dd><p>client and server names</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>???? padding, for 4-byte alignment with SMB header.</p></dd><dt><span class="term">VOID*</span></dt><dd><p>pointer to client credentials.</p></dd><dt><span class="term">CREDS</span></dt><dd><p>client-calculated credentials + client time</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id341230"></a>CLNT_INFO (server, account, client structure, client credentials)</h4></div></div></div><p><span class="emphasis"><em>Note: whenever this structure appears in a request, you must take a copy of the client-calculated credentials received, because they will be used in subsequent credential checks.  the presumed intention is to maintain an authenticated request/response trail.</em></span></p><div class="variablelist"><dl><dt><span class="term">LOG_INFO</span></dt><dd><p>logon account info</p></dd><dt><span class="term">CREDS</span></dt><dd><p>client-calculated credentials + client time</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id341268"></a>ID_INFO_1 (id info structure, auth level 1)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>ptr_id_info_1</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>domain name unicode header</p></dd><dt><span class="term">UINT32</span></dt><dd><p>param control</p></dd><dt><span class="term">UINT64</span></dt><dd><p>logon ID</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>user name unicode header</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>workgroup name unicode header</p></dd><dt><span class="term">char[16]</span></dt><dd><p>arc4 LM OWF Password</p></dd><dt><span class="term">char[16]</span></dt><dd><p>arc4 NT OWF Password</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>domain name unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>user name unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>workstation name unicode string</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id341395"></a>SAM_INFO (sam logon/logoff id info structure)</h4></div></div></div><p><span class="emphasis"><em>Note: presumably, the return credentials is supposedly for the server to verify that the credential chain hasn't been compromised.</em></span></p><div class="variablelist"><dl><dt><span class="term">CLNT_INFO2</span></dt><dd><p>client identification/authentication info</p></dd><dt><span class="term">VOID*</span></dt><dd><p>pointer to return credentials.</p></dd><dt><span class="term">CRED</span></dt><dd><p>return credentials - ignored.</p></dd><dt><span class="term">UINT16</span></dt><dd><p>logon level</p></dd><dt><span class="term">UINT16</span></dt><dd><p>switch value</p></dd></dl></div><pre class="programlisting">
         switch (switch_value)
         case 1:
         {
             ID_INFO_1     id_info_1;
         }
-</pre></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2572760"></a>GID (group id info)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>group id</p></dd><dt><span class="term">UINT32</span></dt><dd><p>user attributes (only used by NT 3.1 and 3.51)</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2572791"></a>DOM_REF (domain reference info)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num referenced domains?</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented domain name buffer pointer.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>32 - max number of entries</p></dd><dt><span class="term">UINT32</span></dt><dd><p>4 - num referenced domains?</p></dd><dt><span class="term">UNIHDR2</span></dt><dd><p>domain name unicode string header</p></dd><dt><span class="term">UNIHDR2[num_ref_doms-1]</span></dt><dd><p>referenced domain unicode string headers</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>domain name unicode string</p></dd><dt><span class="term">DOM_SID[num_ref_doms]</span></dt><dd><p>referenced domain SIDs</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2572906"></a>DOM_INFO (domain info, levels 3 and 5 are the same))</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT8[]</span></dt><dd><p>??? padding to get 4-byte alignment with start of SMB header</p></dd><dt><span class="term">UINT16</span></dt><dd><p>domain name string length * 2</p></dd><dt><span class="term">UINT16</span></dt><dd><p>domain name string length * 2</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented domain name string buffer pointer</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented domain SID string buffer pointer</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>domain name (unicode string)</p></dd><dt><span class="term">DOM_SID</span></dt><dd><p>domain SID</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2572996"></a>USER_INFO (user logon info)</h4></div></div></div><p><span class="emphasis"><em>Note: it would be nice to know what the 16 byte user session key is for.</em></span></p><div class="variablelist"><dl><dt><span class="term">NTTIME</span></dt><dd><p>logon time</p></dd><dt><span class="term">NTTIME</span></dt><dd><p>logoff time</p></dd><dt><span class="term">NTTIME</span></dt><dd><p>kickoff time</p></dd><dt><span class="term">NTTIME</span></dt><dd><p>password last set time</p></dd><dt><span class="term">NTTIME</span></dt><dd><p>password can change time</p></dd><dt><span class="term">NTTIME</span></dt><dd><p>password must change time</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>username unicode string header</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>user's full name unicode string header</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>logon script unicode string header</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>profile path unicode string header</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>home directory unicode string header</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>home directory drive unicode string header</p></dd><dt><span class="term">UINT16</span></dt><dd><p>logon count</p></dd><dt><span class="term">UINT16</span></dt><dd><p>bad password count</p></dd><dt><span class="term">UINT32</span></dt><dd><p>User ID</p></dd><dt><span class="term">UINT32</span></dt><dd><p>Group ID</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num groups</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer to groups.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>user flags</p></dd><dt><span class="term">char[16]</span></dt><dd><p>user session key</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>logon server unicode string header</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>logon domain unicode string header</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented logon domain id pointer</p></dd><dt><span class="term">char[40]</span></dt><dd><p>40 undocumented padding bytes.  future expansion?</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - num_other_sids?</p></dd><dt><span class="term">VOID*</span></dt><dd><p>NULL - undocumented pointer to other domain SIDs.</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>username unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>user's full name unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon script unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>profile path unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>home directory unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>home directory drive unicode string</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num groups</p></dd><dt><span class="term">GID[num_groups]</span></dt><dd><p>group info</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon server unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon domain unicode string</p></dd><dt><span class="term">DOM_SID</span></dt><dd><p>domain SID</p></dd><dt><span class="term">DOM_SID[num_sids]</span></dt><dd><p>other domain SIDs?</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2573448"></a>SH_INFO_1_PTR (pointers to level 1 share info strings)</h4></div></div></div><p><span class="emphasis"><em>Note:	see cifsrap2.txt section5, page 10.</em></span></p><table class="simplelist" border="0" summary="Simple list"><tr><td>0 for shi1_type indicates a  Disk.</td></tr><tr><td>1 for shi1_type indicates a  Print Queue.</td></tr><tr><td>2 for shi1_type indicates a  Device.</td></tr><tr><td>3 for shi1_type indicates an IPC pipe.</td></tr><tr><td>0x8000 0000 (top bit set in shi1_type) indicates a hidden share.</td></tr></table><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>shi1_netname - pointer to net name</p></dd><dt><span class="term">UINT32</span></dt><dd><p>shi1_type    - type of share.  0 - undocumented.</p></dd><dt><span class="term">VOID*</span></dt><dd><p>shi1_remark  - pointer to comment.</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2573524"></a>SH_INFO_1_STR (level 1 share info strings)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UNISTR2</span></dt><dd><p>shi1_netname - unicode string of net name</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>shi1_remark  - unicode string of comment.</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2573558"></a>SHARE_INFO_1_CTR</h4></div></div></div><p>share container with 0 entries:</p><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>0 - EntriesRead</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - Buffer</p></dd></dl></div><p>share container with &gt; 0 entries:</p><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>EntriesRead</p></dd><dt><span class="term">UINT32</span></dt><dd><p>non-zero - Buffer</p></dd><dt><span class="term">UINT32</span></dt><dd><p>EntriesRead</p></dd><dt><span class="term">SH_INFO_1_PTR[EntriesRead]</span></dt><dd><p>share entry pointers</p></dd><dt><span class="term">SH_INFO_1_STR[EntriesRead]</span></dt><dd><p>share entry strings</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>padding to get unicode string 4-byte aligned with start of the SMB header.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>EntriesRead</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - padding</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2573694"></a>SERVER_INFO_101</h4></div></div></div><p><span class="emphasis"><em>Note:	see cifs6.txt section 6.4 - the fields described therein will be of assistance here.  for example, the type listed below is the 	same as fServerType, which is described in 6.4.1. </em></span></p><div class="variablelist"><dl><dt><span class="term">SV_TYPE_WORKSTATION</span></dt><dd><p>0x00000001  All workstations</p></dd><dt><span class="term">SV_TYPE_SERVER</span></dt><dd><p>0x00000002  All servers</p></dd><dt><span class="term">SV_TYPE_SQLSERVER</span></dt><dd><p>0x00000004  Any server running with SQL server</p></dd><dt><span class="term">SV_TYPE_DOMAIN_CTRL</span></dt><dd><p>0x00000008  Primary domain controller</p></dd><dt><span class="term">SV_TYPE_DOMAIN_BAKCTRL</span></dt><dd><p>0x00000010  Backup domain controller</p></dd><dt><span class="term">SV_TYPE_TIME_SOURCE</span></dt><dd><p>0x00000020  Server running the timesource service</p></dd><dt><span class="term">SV_TYPE_AFP</span></dt><dd><p>0x00000040  Apple File Protocol servers</p></dd><dt><span class="term">SV_TYPE_NOVELL</span></dt><dd><p>0x00000080  Novell servers</p></dd><dt><span class="term">SV_TYPE_DOMAIN_MEMBER</span></dt><dd><p>0x00000100  Domain Member</p></dd><dt><span class="term">SV_TYPE_PRINTQ_SERVER</span></dt><dd><p>0x00000200  Server sharing print queue</p></dd><dt><span class="term">SV_TYPE_DIALIN_SERVER</span></dt><dd><p>0x00000400  Server running dialin service.</p></dd><dt><span class="term">SV_TYPE_XENIX_SERVER</span></dt><dd><p>0x00000800  Xenix server</p></dd><dt><span class="term">SV_TYPE_NT</span></dt><dd><p>0x00001000  NT server</p></dd><dt><span class="term">SV_TYPE_WFW</span></dt><dd><p>0x00002000  Server running Windows for </p></dd><dt><span class="term">SV_TYPE_SERVER_NT</span></dt><dd><p>0x00008000  Windows NT non DC server</p></dd><dt><span class="term">SV_TYPE_POTENTIAL_BROWSER</span></dt><dd><p>0x00010000  Server that can run the browser service</p></dd><dt><span class="term">SV_TYPE_BACKUP_BROWSER</span></dt><dd><p>0x00020000  Backup browser server</p></dd><dt><span class="term">SV_TYPE_MASTER_BROWSER</span></dt><dd><p>0x00040000  Master browser server</p></dd><dt><span class="term">SV_TYPE_DOMAIN_MASTER</span></dt><dd><p>0x00080000  Domain Master Browser server</p></dd><dt><span class="term">SV_TYPE_LOCAL_LIST_ONLY</span></dt><dd><p>0x40000000  Enumerate only entries marked "local"</p></dd><dt><span class="term">SV_TYPE_DOMAIN_ENUM</span></dt><dd><p>0x80000000  Enumerate Domains. The pszServer and pszDomain parameters must be NULL.</p></dd></dl></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>500 - platform_id</p></dd><dt><span class="term">VOID*</span></dt><dd><p>pointer to name</p></dd><dt><span class="term">UINT32</span></dt><dd><p>5 - major version</p></dd><dt><span class="term">UINT32</span></dt><dd><p>4 - minor version</p></dd><dt><span class="term">UINT32</span></dt><dd><p>type (SV_TYPE_... bit field)</p></dd><dt><span class="term">VOID*</span></dt><dd><p>pointer to comment</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>sv101_name - unicode string of server name</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>sv_101_comment  - unicode string of server comment.</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>padding to get unicode string 4-byte aligned with start of the SMB header.</p></dd></dl></div></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2574068"></a>MSRPC over Transact Named Pipe</h2></div></div></div><p>For details on the SMB Transact Named Pipe, see cifs6.txt</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2574078"></a>MSRPC Pipes</h3></div></div></div><p>
+</pre></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id341470"></a>GID (group id info)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>group id</p></dd><dt><span class="term">UINT32</span></dt><dd><p>user attributes (only used by NT 3.1 and 3.51)</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id341499"></a>DOM_REF (domain reference info)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num referenced domains?</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented domain name buffer pointer.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>32 - max number of entries</p></dd><dt><span class="term">UINT32</span></dt><dd><p>4 - num referenced domains?</p></dd><dt><span class="term">UNIHDR2</span></dt><dd><p>domain name unicode string header</p></dd><dt><span class="term">UNIHDR2[num_ref_doms-1]</span></dt><dd><p>referenced domain unicode string headers</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>domain name unicode string</p></dd><dt><span class="term">DOM_SID[num_ref_doms]</span></dt><dd><p>referenced domain SIDs</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id341605"></a>DOM_INFO (domain info, levels 3 and 5 are the same))</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT8[]</span></dt><dd><p>??? padding to get 4-byte alignment with start of SMB header</p></dd><dt><span class="term">UINT16</span></dt><dd><p>domain name string length * 2</p></dd><dt><span class="term">UINT16</span></dt><dd><p>domain name string length * 2</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented domain name string buffer pointer</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented domain SID string buffer pointer</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>domain name (unicode string)</p></dd><dt><span class="term">DOM_SID</span></dt><dd><p>domain SID</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id341688"></a>USER_INFO (user logon info)</h4></div></div></div><p><span class="emphasis"><em>Note: it would be nice to know what the 16 byte user session key is for.</em></span></p><div class="variablelist"><dl><dt><span class="term">NTTIME</span></dt><dd><p>logon time</p></dd><dt><span class="term">NTTIME</span></dt><dd><p>logoff time</p></dd><dt><span class="term">NTTIME</span></dt><dd><p>kickoff time</p></dd><dt><span class="term">NTTIME</span></dt><dd><p>password last set time</p></dd><dt><span class="term">NTTIME</span></dt><dd><p>password can change time</p></dd><dt><span class="term">NTTIME</span></dt><dd><p>password must change time</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>username unicode string header</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>user's full name unicode string header</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>logon script unicode string header</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>profile path unicode string header</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>home directory unicode string header</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>home directory drive unicode string header</p></dd><dt><span class="term">UINT16</span></dt><dd><p>logon count</p></dd><dt><span class="term">UINT16</span></dt><dd><p>bad password count</p></dd><dt><span class="term">UINT32</span></dt><dd><p>User ID</p></dd><dt><span class="term">UINT32</span></dt><dd><p>Group ID</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num groups</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer to groups.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>user flags</p></dd><dt><span class="term">char[16]</span></dt><dd><p>user session key</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>logon server unicode string header</p></dd><dt><span class="term">UNIHDR</span></dt><dd><p>logon domain unicode string header</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented logon domain id pointer</p></dd><dt><span class="term">char[40]</span></dt><dd><p>40 undocumented padding bytes.  future expansion?</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - num_other_sids?</p></dd><dt><span class="term">VOID*</span></dt><dd><p>NULL - undocumented pointer to other domain SIDs.</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>username unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>user's full name unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon script unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>profile path unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>home directory unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>home directory drive unicode string</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num groups</p></dd><dt><span class="term">GID[num_groups]</span></dt><dd><p>group info</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon server unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon domain unicode string</p></dd><dt><span class="term">DOM_SID</span></dt><dd><p>domain SID</p></dd><dt><span class="term">DOM_SID[num_sids]</span></dt><dd><p>other domain SIDs?</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id342108"></a>SH_INFO_1_PTR (pointers to level 1 share info strings)</h4></div></div></div><p><span class="emphasis"><em>Note:	see cifsrap2.txt section5, page 10.</em></span></p><table class="simplelist" border="0" summary="Simple list"><tr><td>0 for shi1_type indicates a  Disk.</td></tr><tr><td>1 for shi1_type indicates a  Print Queue.</td></tr><tr><td>2 for shi1_type indicates a  Device.</td></tr><tr><td>3 for shi1_type indicates an IPC pipe.</td></tr><tr><td>0x8000 0000 (top bit set in shi1_type) indicates a hidden share.</td></tr></table><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>shi1_netname - pointer to net name</p></dd><dt><span class="term">UINT32</span></dt><dd><p>shi1_type    - type of share.  0 - undocumented.</p></dd><dt><span class="term">VOID*</span></dt><dd><p>shi1_remark  - pointer to comment.</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id342175"></a>SH_INFO_1_STR (level 1 share info strings)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UNISTR2</span></dt><dd><p>shi1_netname - unicode string of net name</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>shi1_remark  - unicode string of comment.</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id342206"></a>SHARE_INFO_1_CTR</h4></div></div></div><p>share container with 0 entries:</p><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>0 - EntriesRead</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - Buffer</p></dd></dl></div><p>share container with &gt; 0 entries:</p><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>EntriesRead</p></dd><dt><span class="term">UINT32</span></dt><dd><p>non-zero - Buffer</p></dd><dt><span class="term">UINT32</span></dt><dd><p>EntriesRead</p></dd><dt><span class="term">SH_INFO_1_PTR[EntriesRead]</span></dt><dd><p>share entry pointers</p></dd><dt><span class="term">SH_INFO_1_STR[EntriesRead]</span></dt><dd><p>share entry strings</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>padding to get unicode string 4-byte aligned with start of the SMB header.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>EntriesRead</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - padding</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id342333"></a>SERVER_INFO_101</h4></div></div></div><p><span class="emphasis"><em>Note:	see cifs6.txt section 6.4 - the fields described therein will be of assistance here.  for example, the type listed below is the 	same as fServerType, which is described in 6.4.1. </em></span></p><div class="variablelist"><dl><dt><span class="term">SV_TYPE_WORKSTATION</span></dt><dd><p>0x00000001  All workstations</p></dd><dt><span class="term">SV_TYPE_SERVER</span></dt><dd><p>0x00000002  All servers</p></dd><dt><span class="term">SV_TYPE_SQLSERVER</span></dt><dd><p>0x00000004  Any server running with SQL server</p></dd><dt><span class="term">SV_TYPE_DOMAIN_CTRL</span></dt><dd><p>0x00000008  Primary domain controller</p></dd><dt><span class="term">SV_TYPE_DOMAIN_BAKCTRL</span></dt><dd><p>0x00000010  Backup domain controller</p></dd><dt><span class="term">SV_TYPE_TIME_SOURCE</span></dt><dd><p>0x00000020  Server running the timesource service</p></dd><dt><span class="term">SV_TYPE_AFP</span></dt><dd><p>0x00000040  Apple File Protocol servers</p></dd><dt><span class="term">SV_TYPE_NOVELL</span></dt><dd><p>0x00000080  Novell servers</p></dd><dt><span class="term">SV_TYPE_DOMAIN_MEMBER</span></dt><dd><p>0x00000100  Domain Member</p></dd><dt><span class="term">SV_TYPE_PRINTQ_SERVER</span></dt><dd><p>0x00000200  Server sharing print queue</p></dd><dt><span class="term">SV_TYPE_DIALIN_SERVER</span></dt><dd><p>0x00000400  Server running dialin service.</p></dd><dt><span class="term">SV_TYPE_XENIX_SERVER</span></dt><dd><p>0x00000800  Xenix server</p></dd><dt><span class="term">SV_TYPE_NT</span></dt><dd><p>0x00001000  NT server</p></dd><dt><span class="term">SV_TYPE_WFW</span></dt><dd><p>0x00002000  Server running Windows for </p></dd><dt><span class="term">SV_TYPE_SERVER_NT</span></dt><dd><p>0x00008000  Windows NT non DC server</p></dd><dt><span class="term">SV_TYPE_POTENTIAL_BROWSER</span></dt><dd><p>0x00010000  Server that can run the browser service</p></dd><dt><span class="term">SV_TYPE_BACKUP_BROWSER</span></dt><dd><p>0x00020000  Backup browser server</p></dd><dt><span class="term">SV_TYPE_MASTER_BROWSER</span></dt><dd><p>0x00040000  Master browser server</p></dd><dt><span class="term">SV_TYPE_DOMAIN_MASTER</span></dt><dd><p>0x00080000  Domain Master Browser server</p></dd><dt><span class="term">SV_TYPE_LOCAL_LIST_ONLY</span></dt><dd><p>0x40000000  Enumerate only entries marked "local"</p></dd><dt><span class="term">SV_TYPE_DOMAIN_ENUM</span></dt><dd><p>0x80000000  Enumerate Domains. The pszServer and pszDomain parameters must be NULL.</p></dd></dl></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>500 - platform_id</p></dd><dt><span class="term">VOID*</span></dt><dd><p>pointer to name</p></dd><dt><span class="term">UINT32</span></dt><dd><p>5 - major version</p></dd><dt><span class="term">UINT32</span></dt><dd><p>4 - minor version</p></dd><dt><span class="term">UINT32</span></dt><dd><p>type (SV_TYPE_... bit field)</p></dd><dt><span class="term">VOID*</span></dt><dd><p>pointer to comment</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>sv101_name - unicode string of server name</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>sv_101_comment  - unicode string of server comment.</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>padding to get unicode string 4-byte aligned with start of the SMB header.</p></dd></dl></div></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id342673"></a>MSRPC over Transact Named Pipe</h2></div></div></div><p>For details on the SMB Transact Named Pipe, see cifs6.txt</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id342683"></a>MSRPC Pipes</h3></div></div></div><p>
 The MSRPC is conducted over an SMB Transact Pipe with a name of 
 <code class="filename">\PIPE\</code>.  You must first obtain a 16 bit file handle, by
 sending a SMBopenX with the pipe name <code class="filename">\PIPE\srvsvc</code> for
@@ -121,11 +121,11 @@
         initial SMBopenX request:         RPC API command 0x26 params:
         "\\PIPE\\lsarpc"                  0x65 0x63; 0x72 0x70; 0x44 0x65;
         "\\PIPE\\srvsvc"                  0x73 0x76; 0x4E 0x00; 0x5C 0x43;
-</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2574164"></a>Header</h3></div></div></div><p>[section to be rewritten, following receipt of work by Duncan Stansfield]</p><p>Interesting note: if you set packed data representation to 0x0100 0000
-then all 4-byte and 2-byte word ordering is turned around!</p><p>The start of each of the NTLSA and NETLOGON named pipes begins with:</p><div class="segmentedlist"><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>00</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT8</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>5 - RPC major version</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>01</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT8</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>0 - RPC minor version</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>02</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT8</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>2 - RPC response packet</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>03</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT8</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>3 - (FirstFrag bit-wise or with LastFrag)</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>04</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT32</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>0x1000 0000 - packed data representation</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>08</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT16</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>fragment length - data size (bytes) inc header and tail.</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>0A</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT16</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>0 - authentication length </div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>0C</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT32</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>call identifier. matches 12th UINT32 of incoming RPC data.</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>10</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT32</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>allocation hint - data size (bytes) minus header and tail.</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>14</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT16</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>0 - presentation context identifier</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>16</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT8</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>0 - cancel count</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>17</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT8</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>in replies: 0 - reserved; in requests: opnum - see #defines.</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>18</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>......</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>start of data (goes on for allocation_hint bytes)</div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2574321"></a>RPC_Packet for request, response, bind and bind acknowledgement</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT8 versionmaj</span></dt><dd><p>reply same as request (0x05)</p></dd><dt><span class="term">UINT8 versionmin</span></dt><dd><p>reply same as request (0x00)</p></dd><dt><span class="term">UINT8 type</span></dt><dd><p>one of the MSRPC_Type enums</p></dd><dt><span class="term">UINT8 flags</span></dt><dd><p>reply same as request (0x00 for Bind, 0x03 for Request)</p></dd><dt><span class="term">UINT32 representation</span></dt><dd><p>reply same as request (0x00000010)</p></dd><dt><span class="term">UINT16 fraglength</span></dt><dd><p>the length of the data section of the SMB trans packet</p></dd><dt><span class="term">UINT16 authlength</span></dt><dd><p></p></dd><dt><span class="term">UINT32 callid</span></dt><dd><p>call identifier. (e.g. 0x00149594)</p></dd><dt><span class="term">* stub USE TvPacket</span></dt><dd><p>the remainder of the packet depending on the "type"</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2574428"></a>Interface identification</h4></div></div></div><p>the interfaces are numbered. as yet I haven't seen more than one interface used on the same pipe name srvsvc</p><pre class="programlisting">
+</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id342750"></a>Header</h3></div></div></div><p>[section to be rewritten, following receipt of work by Duncan Stansfield]</p><p>Interesting note: if you set packed data representation to 0x0100 0000
+then all 4-byte and 2-byte word ordering is turned around!</p><p>The start of each of the NTLSA and NETLOGON named pipes begins with:</p><div class="segmentedlist"><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>00</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT8</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>5 - RPC major version</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>01</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT8</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>0 - RPC minor version</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>02</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT8</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>2 - RPC response packet</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>03</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT8</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>3 - (FirstFrag bit-wise or with LastFrag)</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>04</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT32</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>0x1000 0000 - packed data representation</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>08</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT16</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>fragment length - data size (bytes) inc header and tail.</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>0A</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT16</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>0 - authentication length </div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>0C</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT32</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>call identifier. matches 12th UINT32 of incoming RPC data.</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>10</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT32</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>allocation hint - data size (bytes) minus header and tail.</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>14</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT16</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>0 - presentation context identifier</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>16</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT8</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>0 - cancel count</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>17</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>UINT8</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>in replies: 0 - reserved; in requests: opnum - see #defines.</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">offset: </span></strong>18</div><div class="seg"><strong><span class="segtitle">Variable type: </span></strong>......</div><div class="seg"><strong><span class="segtitle">Variable data: </span></strong>start of data (goes on for allocation_hint bytes)</div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id342892"></a>RPC_Packet for request, response, bind and bind acknowledgement</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT8 versionmaj</span></dt><dd><p>reply same as request (0x05)</p></dd><dt><span class="term">UINT8 versionmin</span></dt><dd><p>reply same as request (0x00)</p></dd><dt><span class="term">UINT8 type</span></dt><dd><p>one of the MSRPC_Type enums</p></dd><dt><span class="term">UINT8 flags</span></dt><dd><p>reply same as request (0x00 for Bind, 0x03 for Request)</p></dd><dt><span class="term">UINT32 representation</span></dt><dd><p>reply same as request (0x00000010)</p></dd><dt><span class="term">UINT16 fraglength</span></dt><dd><p>the length of the data section of the SMB trans packet</p></dd><dt><span class="term">UINT16 authlength</span></dt><dd><p></p></dd><dt><span class="term">UINT32 callid</span></dt><dd><p>call identifier. (e.g. 0x00149594)</p></dd><dt><span class="term">* stub USE TvPacket</span></dt><dd><p>the remainder of the packet depending on the "type"</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id342988"></a>Interface identification</h4></div></div></div><p>the interfaces are numbered. as yet I haven't seen more than one interface used on the same pipe name srvsvc</p><pre class="programlisting">
 abstract (0x4B324FC8, 0x01D31670, 0x475A7812, 0x88E16EBF, 0x00000003)
 transfer (0x8A885D04, 0x11C91CEB, 0x0008E89F, 0x6048102B, 0x00000002)
-</pre></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2574449"></a>RPC_Iface RW</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT8 byte[16]</span></dt><dd><p>16 bytes of number</p></dd><dt><span class="term">UINT32 version</span></dt><dd><p>the interface number</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2574480"></a>RPC_ReqBind RW</h4></div></div></div><p>the remainder of the packet after the header if "type" was Bind in the response header, "type" should be BindAck</p><div class="variablelist"><dl><dt><span class="term">UINT16 maxtsize</span></dt><dd><p>maximum transmission fragment size (0x1630)</p></dd><dt><span class="term">UINT16 maxrsize</span></dt><dd><p>max receive fragment size (0x1630)</p></dd><dt><span class="term">UINT32 assocgid</span></dt><dd><p>associated group id (0x0)</p></dd><dt><span class="term">UINT32 numelements</span></dt><dd><p>the number of elements (0x1)</p></dd><dt><span class="term">UINT16 contextid</span></dt><dd><p>presentation context identifier (0x0)</p></dd><dt><span class="term">UINT8 numsyntaxes</span></dt><dd><p>the number of syntaxes (has always been 1?)(0x1)</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>4-byte alignment padding, against SMB header</p></dd><dt><span class="term">* abstractint USE RPC_Iface</span></dt><dd><p>num and vers. of interface client is using</p></dd><dt><span class="term">* transferint USE RPC_Iface</span></dt><dd><p>num and vers. of interface to use for replies</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2574593"></a>RPC_Address RW</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT16 length</span></dt><dd><p>length of the string including null terminator</p></dd><dt><span class="term">* port USE string</span></dt><dd><p>the string above in single byte, null terminated form</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2574625"></a>RPC_ResBind RW</h4></div></div></div><p>the response to place after the header in the reply packet</p><div class="variablelist"><dl><dt><span class="term">UINT16 maxtsize</span></dt><dd><p>same as request</p></dd><dt><span class="term">UINT16 maxrsize</span></dt><dd><p>same as request</p></dd><dt><span class="term">UINT32 assocgid</span></dt><dd><p>zero</p></dd><dt><span class="term">* secondaddr USE RPC_Address</span></dt><dd><p>the address string, as described earlier</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>4-byte alignment padding, against SMB header</p></dd><dt><span class="term">UINT8 numresults</span></dt><dd><p>the number of results (0x01)</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>4-byte alignment padding, against SMB header</p></dd><dt><span class="term">UINT16 result</span></dt><dd><p>result (0x00 = accept)</p></dd><dt><span class="term">UINT16 reason</span></dt><dd><p>reason (0x00 = no reason specified)</p></dd><dt><span class="term">* transfersyntax USE RPC_Iface</span></dt><dd><p>the transfer syntax from the request</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2574746"></a>RPC_ReqNorm RW</h4></div></div></div><p>the remainder of the packet after the header for every other other request</p><div class="variablelist"><dl><dt><span class="term">UINT32 allochint</span></dt><dd><p>the size of the stub data in bytes</p></dd><dt><span class="term">UINT16 prescontext</span></dt><dd><p>presentation context identifier (0x0)</p></dd><dt><span class="term">UINT16 opnum</span></dt><dd><p>operation number (0x15)</p></dd><dt><span class="term">* stub USE TvPacket</span></dt><dd><p>a packet dependent on the pipe name (probably the interface) and the op number)</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2574804"></a>RPC_ResNorm RW</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32 allochint</span></dt><dd><p># size of the stub data in bytes</p></dd><dt><span class="term">UINT16 prescontext</span></dt><dd><p># presentation context identifier (same as request)</p></dd><dt><span class="term">UINT8 cancelcount</span></dt><dd><p># cancel count? (0x0)</p></dd><dt><span class="term">UINT8 reserved</span></dt><dd><p># 0 - one byte padding</p></dd><dt><span class="term">* stub USE TvPacket</span></dt><dd><p># the remainder of the reply</p></dd></dl></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2574869"></a>Tail</h3></div></div></div><p>The end of each of the NTLSA and NETLOGON named pipes ends with:</p><div class="variablelist"><dl><dt><span class="term">......</span></dt><dd><p>end of data</p></dd><dt><span class="term">UINT32</span></dt><dd><p>return code</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2574905"></a>RPC Bind / Bind Ack</h3></div></div></div><p>
+</pre></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id343006"></a>RPC_Iface RW</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT8 byte[16]</span></dt><dd><p>16 bytes of number</p></dd><dt><span class="term">UINT32 version</span></dt><dd><p>the interface number</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id343035"></a>RPC_ReqBind RW</h4></div></div></div><p>the remainder of the packet after the header if "type" was Bind in the response header, "type" should be BindAck</p><div class="variablelist"><dl><dt><span class="term">UINT16 maxtsize</span></dt><dd><p>maximum transmission fragment size (0x1630)</p></dd><dt><span class="term">UINT16 maxrsize</span></dt><dd><p>max receive fragment size (0x1630)</p></dd><dt><span class="term">UINT32 assocgid</span></dt><dd><p>associated group id (0x0)</p></dd><dt><span class="term">UINT32 numelements</span></dt><dd><p>the number of elements (0x1)</p></dd><dt><span class="term">UINT16 contextid</span></dt><dd><p>presentation context identifier (0x0)</p></dd><dt><span class="term">UINT8 numsyntaxes</span></dt><dd><p>the number of syntaxes (has always been 1?)(0x1)</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>4-byte alignment padding, against SMB header</p></dd><dt><span class="term">* abstractint USE RPC_Iface</span></dt><dd><p>num and vers. of interface client is using</p></dd><dt><span class="term">* transferint USE RPC_Iface</span></dt><dd><p>num and vers. of interface to use for replies</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id343137"></a>RPC_Address RW</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT16 length</span></dt><dd><p>length of the string including null terminator</p></dd><dt><span class="term">* port USE string</span></dt><dd><p>the string above in single byte, null terminated form</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id343165"></a>RPC_ResBind RW</h4></div></div></div><p>the response to place after the header in the reply packet</p><div class="variablelist"><dl><dt><span class="term">UINT16 maxtsize</span></dt><dd><p>same as request</p></dd><dt><span class="term">UINT16 maxrsize</span></dt><dd><p>same as request</p></dd><dt><span class="term">UINT32 assocgid</span></dt><dd><p>zero</p></dd><dt><span class="term">* secondaddr USE RPC_Address</span></dt><dd><p>the address string, as described earlier</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>4-byte alignment padding, against SMB header</p></dd><dt><span class="term">UINT8 numresults</span></dt><dd><p>the number of results (0x01)</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>4-byte alignment padding, against SMB header</p></dd><dt><span class="term">UINT16 result</span></dt><dd><p>result (0x00 = accept)</p></dd><dt><span class="term">UINT16 reason</span></dt><dd><p>reason (0x00 = no reason specified)</p></dd><dt><span class="term">* transfersyntax USE RPC_Iface</span></dt><dd><p>the transfer syntax from the request</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id343275"></a>RPC_ReqNorm RW</h4></div></div></div><p>the remainder of the packet after the header for every other other request</p><div class="variablelist"><dl><dt><span class="term">UINT32 allochint</span></dt><dd><p>the size of the stub data in bytes</p></dd><dt><span class="term">UINT16 prescontext</span></dt><dd><p>presentation context identifier (0x0)</p></dd><dt><span class="term">UINT16 opnum</span></dt><dd><p>operation number (0x15)</p></dd><dt><span class="term">* stub USE TvPacket</span></dt><dd><p>a packet dependent on the pipe name (probably the interface) and the op number)</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id343328"></a>RPC_ResNorm RW</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32 allochint</span></dt><dd><p># size of the stub data in bytes</p></dd><dt><span class="term">UINT16 prescontext</span></dt><dd><p># presentation context identifier (same as request)</p></dd><dt><span class="term">UINT8 cancelcount</span></dt><dd><p># cancel count? (0x0)</p></dd><dt><span class="term">UINT8 reserved</span></dt><dd><p># 0 - one byte padding</p></dd><dt><span class="term">* stub USE TvPacket</span></dt><dd><p># the remainder of the reply</p></dd></dl></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343386"></a>Tail</h3></div></div></div><p>The end of each of the NTLSA and NETLOGON named pipes ends with:</p><div class="variablelist"><dl><dt><span class="term">......</span></dt><dd><p>end of data</p></dd><dt><span class="term">UINT32</span></dt><dd><p>return code</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343421"></a>RPC Bind / Bind Ack</h3></div></div></div><p>
 RPC Binds are the process of associating an RPC pipe (e.g \PIPE\lsarpc)
 with a "transfer syntax" (see RPC_Iface structure).  The purpose for doing
 this is unknown.
@@ -133,7 +133,7 @@
 	returned by the SMBopenX Transact response.</em></span></p><p><span class="emphasis"><em>Note:	The RPC_ResBind members maxtsize, maxrsize and assocgid are the same in the response as the same members in the RPC_ReqBind.  The
 	RPC_ResBind member transfersyntax is the same in the response as
 	the</em></span></p><p><span class="emphasis"><em>Note:	The RPC_ResBind response member secondaddr contains the name of what is presumed to be the service behind the RPC pipe.  The
-	mapping identified so far is:</em></span></p><div class="variablelist"><dl><dt><span class="term">initial SMBopenX request:</span></dt><dd><p>RPC_ResBind response:</p></dd><dt><span class="term">"\\PIPE\\srvsvc"</span></dt><dd><p>"\\PIPE\\ntsvcs"</p></dd><dt><span class="term">"\\PIPE\\samr"</span></dt><dd><p>"\\PIPE\\lsass"</p></dd><dt><span class="term">"\\PIPE\\lsarpc"</span></dt><dd><p>"\\PIPE\\lsass"</p></dd><dt><span class="term">"\\PIPE\\wkssvc"</span></dt><dd><p>"\\PIPE\\wksvcs"</p></dd><dt><span class="term">"\\PIPE\\NETLOGON"</span></dt><dd><p>"\\PIPE\\NETLOGON"</p></dd></dl></div><p><span class="emphasis"><em>Note:	The RPC_Packet fraglength member in both the Bind Request and Bind Acknowledgment must contain the length of the entire RPC data, including the RPC_Packet header.</em></span></p><p>Request:</p><table class="simplelist" border="0" summary="Simple list"><tr><td>RPC_Packet</td></tr><tr><td>RPC_ReqBind</td></tr></table><p>Response:</p><table class="simplelist" border="0" summary="Simple list"><tr><td>RPC_Packet</td></tr><tr><td>RPC_ResBind</td></tr></table></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575052"></a>NTLSA Transact Named Pipe</h3></div></div></div><p>The sequence of actions taken on this pipe are:</p><table class="simplelist" border="0" summary="Simple list"><tr><td>Establish a connection to the IPC$ share (SMBtconX).  use encrypted passwords.</td></tr><tr><td>Open an RPC Pipe with the name "\\PIPE\\lsarpc".  Store the file handle.</td></tr><tr><td>Using the file handle, send a Set Named Pipe Handle state to 0x4300.</td></tr><tr><td>Send an LSA Open Policy request.  Store the Policy Handle.</td></tr><tr><td>Using the Policy Handle, send LSA Query Info Policy requests, etc.</td></tr><tr><td>Using the Policy Handle, send an LSA Close.</td></tr><tr><td>Close the IPC$ share.</td></tr></table><p>Defines for this pipe, identifying the query are:</p><div class="variablelist"><dl><dt><span class="term">LSA Open Policy:</span></dt><dd><p>0x2c</p></dd><dt><span class="term">LSA Query Info Policy:</span></dt><dd><p>0x07</p></dd><dt><span class="term">LSA Enumerate Trusted Domains:</span></dt><dd><p>0x0d</p></dd><dt><span class="term">LSA Open Secret:</span></dt><dd><p>0xff</p></dd><dt><span class="term">LSA Lookup SIDs:</span></dt><dd><p>0xfe</p></dd><dt><span class="term">LSA Lookup Names:</span></dt><dd><p>0xfd</p></dd><dt><span class="term">LSA Close:</span></dt><dd><p>0x00</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575186"></a>LSA Open Policy</h3></div></div></div><p><span class="emphasis"><em>Note:	The policy handle can be anything you like.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2575196"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>buffer pointer</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>server name - unicode string starting with two '\'s</p></dd><dt><span class="term">OBJ_ATTR</span></dt><dd><p>object attributes</p></dd><dt><span class="term">UINT32</span></dt><dd><p>1 - desired access</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2575252"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">POL_HND</span></dt><dd><p>LSA policy handle</p></dd><dt><span class="term">return</span></dt><dd><p>0 - indicates success</p></dd></dl></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575286"></a>LSA Query Info Policy</h3></div></div></div><p><span class="emphasis"><em>Note:	The info class in response must be the same as that in the request.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2575297"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">POL_HND</span></dt><dd><p>LSA policy handle</p></dd><dt><span class="term">UINT16</span></dt><dd><p>info class (also a policy handle?)</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2575328"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">UINT16</span></dt><dd><p>info class (same as info class in request).</p></dd></dl></div><pre class="programlisting">
+	mapping identified so far is:</em></span></p><div class="variablelist"><dl><dt><span class="term">initial SMBopenX request:</span></dt><dd><p>RPC_ResBind response:</p></dd><dt><span class="term">"\\PIPE\\srvsvc"</span></dt><dd><p>"\\PIPE\\ntsvcs"</p></dd><dt><span class="term">"\\PIPE\\samr"</span></dt><dd><p>"\\PIPE\\lsass"</p></dd><dt><span class="term">"\\PIPE\\lsarpc"</span></dt><dd><p>"\\PIPE\\lsass"</p></dd><dt><span class="term">"\\PIPE\\wkssvc"</span></dt><dd><p>"\\PIPE\\wksvcs"</p></dd><dt><span class="term">"\\PIPE\\NETLOGON"</span></dt><dd><p>"\\PIPE\\NETLOGON"</p></dd></dl></div><p><span class="emphasis"><em>Note:	The RPC_Packet fraglength member in both the Bind Request and Bind Acknowledgment must contain the length of the entire RPC data, including the RPC_Packet header.</em></span></p><p>Request:</p><table class="simplelist" border="0" summary="Simple list"><tr><td>RPC_Packet</td></tr><tr><td>RPC_ReqBind</td></tr></table><p>Response:</p><table class="simplelist" border="0" summary="Simple list"><tr><td>RPC_Packet</td></tr><tr><td>RPC_ResBind</td></tr></table></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343553"></a>NTLSA Transact Named Pipe</h3></div></div></div><p>The sequence of actions taken on this pipe are:</p><table class="simplelist" border="0" summary="Simple list"><tr><td>Establish a connection to the IPC$ share (SMBtconX).  use encrypted passwords.</td></tr><tr><td>Open an RPC Pipe with the name "\\PIPE\\lsarpc".  Store the file handle.</td></tr><tr><td>Using the file handle, send a Set Named Pipe Handle state to 0x4300.</td></tr><tr><td>Send an LSA Open Policy request.  Store the Policy Handle.</td></tr><tr><td>Using the Policy Handle, send LSA Query Info Policy requests, etc.</td></tr><tr><td>Using the Policy Handle, send an LSA Close.</td></tr><tr><td>Close the IPC$ share.</td></tr></table><p>Defines for this pipe, identifying the query are:</p><div class="variablelist"><dl><dt><span class="term">LSA Open Policy:</span></dt><dd><p>0x2c</p></dd><dt><span class="term">LSA Query Info Policy:</span></dt><dd><p>0x07</p></dd><dt><span class="term">LSA Enumerate Trusted Domains:</span></dt><dd><p>0x0d</p></dd><dt><span class="term">LSA Open Secret:</span></dt><dd><p>0xff</p></dd><dt><span class="term">LSA Lookup SIDs:</span></dt><dd><p>0xfe</p></dd><dt><span class="term">LSA Lookup Names:</span></dt><dd><p>0xfd</p></dd><dt><span class="term">LSA Close:</span></dt><dd><p>0x00</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343674"></a>LSA Open Policy</h3></div></div></div><p><span class="emphasis"><em>Note:	The policy handle can be anything you like.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id343684"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>buffer pointer</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>server name - unicode string starting with two '\'s</p></dd><dt><span class="term">OBJ_ATTR</span></dt><dd><p>object attributes</p></dd><dt><span class="term">UINT32</span></dt><dd><p>1 - desired access</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id343736"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">POL_HND</span></dt><dd><p>LSA policy handle</p></dd><dt><span class="term">return</span></dt><dd><p>0 - indicates success</p></dd></dl></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343768"></a>LSA Query Info Policy</h3></div></div></div><p><span class="emphasis"><em>Note:	The info class in response must be the same as that in the request.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id343779"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">POL_HND</span></dt><dd><p>LSA policy handle</p></dd><dt><span class="term">UINT16</span></dt><dd><p>info class (also a policy handle?)</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id343808"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">UINT16</span></dt><dd><p>info class (same as info class in request).</p></dd></dl></div><pre class="programlisting">
 switch (info class)
 case 3:
 case 5:
@@ -142,11 +142,11 @@
 }
 
 return    0 - indicates success
-</pre></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575371"></a>LSA Enumerate Trusted Domains</h3></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2575377"></a>Request</h4></div></div></div><p>no extra data</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2575387"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>0 - enumeration context</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - entries read</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - trust information</p></dd><dt><span class="term">return</span></dt><dd><p>0x8000 001a - "no trusted domains" success code</p></dd></dl></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575444"></a>LSA Open Secret</h3></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2575450"></a>Request</h4></div></div></div><p>no extra data</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2575460"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>0 - undocumented</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - undocumented</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - undocumented</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - undocumented</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - undocumented</p></dd></dl></div><p>return    0x0C00 0034 - "no such secret" success code</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575532"></a>LSA Close</h3></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2575538"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">POL_HND</span></dt><dd><p>policy handle to be closed</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2575559"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">POL_HND</span></dt><dd><p>0s - closed policy handle (all zeros)</p></dd></dl></div><p>return    0 - indicates success</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575585"></a>LSA Lookup SIDS</h3></div></div></div><p><span class="emphasis"><em>Note:	num_entries in response must be same as num_entries in request.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2575596"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">POL_HND</span></dt><dd><p>LSA policy handle</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented domain SID buffer pointer</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented domain name buffer pointer</p></dd><dt><span class="term">VOID*[num_entries] undocumented domain SID pointers to be looked up.
-</span></dt><dd><p>DOM_SID[num_entries] domain SIDs to be looked up.</p></dd><dt><span class="term">char[16]</span></dt><dd><p>completely undocumented 16 bytes.</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2575675"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">DOM_REF</span></dt><dd><p>domain reference response</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries (listed above)</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries (listed above)</p></dd><dt><span class="term">DOM_SID2[num_entries]</span></dt><dd><p>domain SIDs (from Request, listed above).</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries (listed above)</p></dd></dl></div><p>return                0 - indicates success</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575753"></a>LSA Lookup Names</h3></div></div></div><p><span class="emphasis"><em>Note:	num_entries in response must be same as num_entries in request.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2575765"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">POL_HND</span></dt><dd><p>LSA policy handle</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented domain SID buffer pointer</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented domain name buffer pointer</p></dd><dt><span class="term">NAME[num_entries]</span></dt><dd><p>names to be looked up.</p></dd><dt><span class="term">char[]</span></dt><dd><p>undocumented bytes - falsely translated SID structure?</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2575855"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">DOM_REF</span></dt><dd><p>domain reference response</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries (listed above)</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries (listed above)</p></dd><dt><span class="term">DOM_RID[num_entries]</span></dt><dd><p>domain SIDs (from Request, listed above).</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries (listed above)</p></dd></dl></div><p>return                0 - indicates success</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2575934"></a>NETLOGON rpc Transact Named Pipe</h2></div></div></div><p>The sequence of actions taken on this pipe are:</p><table class="simplelist" border="0" summary="Simple list"><tr><td>tablish a connection to the IPC$ share (SMBtconX).  use encrypted passwords.</td></tr><tr><td>en an RPC Pipe with the name "\\PIPE\\NETLOGON".  Store the file handle.</td></tr><tr><td>ing the file handle, send a Set Named Pipe Handle state to 0x4300.</td></tr><tr><td>eate Client Challenge. Send LSA Request Challenge.  Store Server Challenge.</td></tr><tr><td>lculate Session Key.  Send an LSA Auth 2 Challenge.  Store Auth2 Challenge.</td></tr><tr><td>lc/Verify Client Creds.  Send LSA Srv PW Set.  Calc/Verify Server Creds.</td></tr><tr><td>lc/Verify Client Creds.  Send LSA SAM Logon .  Calc/Verify Server Creds.</td></tr><tr><td>lc/Verify Client Creds.  Send LSA SAM Logoff.  Calc/Verify Server Creds.</td></tr><tr><td>ose the IPC$ share.</td></tr></table><p>Defines for this pipe, identifying the query are</p><div class="variablelist"><dl><dt><span class="term">LSA Request Challenge:</span></dt><dd><p>0x04</p></dd><dt><span class="term">LSA Server Password Set:</span></dt><dd><p>0x06</p></dd><dt><span class="term">LSA SAM Logon:</span></dt><dd><p>0x02</p></dd><dt><span class="term">LSA SAM Logoff:</span></dt><dd><p>0x03</p></dd><dt><span class="term">LSA Auth 2:</span></dt><dd><p>0x0f</p></dd><dt><span class="term">LSA Logon Control:</span></dt><dd><p>0x0e</p></dd></dl></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2576065"></a>LSA Request Challenge</h3></div></div></div><p><span class="emphasis"><em>Note:	logon server name starts with two '\' characters and is upper case.</em></span></p><p><span class="emphasis"><em>Note:	logon client is the machine, not the user.</em></span></p><p><span class="emphasis"><em>Note:	the initial LanManager password hash, against which the challenge is issued, is the machine name itself (lower case).  there will becalls issued (LSA Server Password Set) which will change this, later. refusing these calls allows you to always deal with the same password (i.e the LM# of the machine name in lower case).</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2576097"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon server unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon client unicode string</p></dd><dt><span class="term">char[8]</span></dt><dd><p>client challenge</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2576153"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">char[8]</span></dt><dd><p>server challenge</p></dd></dl></div><p>return    0 - indicates success</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2576179"></a>LSA Authenticate 2</h3></div></div></div><p><span class="emphasis"><em>Note:	in between request and response, calculate the client credentials, and check them against the client-calculated credentials (this process uses the previously received client credentials).</em></span></p><p><span class="emphasis"><em>Note:	neg_flags in the response is the same as that in the request.</em></span></p><p><span class="emphasis"><em>Note:	you must take a copy of the client-calculated credentials received 	here, because they will be used in subsequent authentication packets.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2576204"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">LOG_INFO</span></dt><dd><p>client identification info</p></dd><dt><span class="term">char[8]</span></dt><dd><p>client-calculated credentials</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>padding to 4-byte align with start of SMB header.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>neg_flags - negotiated flags (usual value is 0x0000 01ff)</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2576259"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">char[8]</span></dt><dd><p>server credentials.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>neg_flags - same as neg_flags in request.</p></dd></dl></div><p>return    0 - indicates success.  failure value unknown.</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2576297"></a>LSA Server Password Set</h3></div></div></div><p><span class="emphasis"><em>Note: the new password is suspected to be a DES encryption using the old password to generate the key.</em></span></p><p><span class="emphasis"><em>Note: in between request and response, calculate the client credentials, and check them against the client-calculated credentials (this process uses the previously received client credentials).</em></span></p><p><span class="emphasis"><em>Note: the server credentials are constructed from the client-calculated credentials and the client time + 1 second.</em></span></p><p><span class="emphasis"><em>Note: you must take a copy of the client-calculated credentials received here, because they will be used in subsequent authentication packets.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2576330"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">CLNT_INFO</span></dt><dd><p>client identification/authentication info</p></dd><dt><span class="term">char[]</span></dt><dd><p>new password - undocumented.</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2576363"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">CREDS</span></dt><dd><p>server credentials.  server time stamp appears to be ignored.</p></dd></dl></div><p>return    0 - indicates success; 0xC000 006a indicates failure</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2576391"></a>LSA SAM Logon</h3></div></div></div><p><span class="emphasis"><em>
+</pre></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343847"></a>LSA Enumerate Trusted Domains</h3></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id343852"></a>Request</h4></div></div></div><p>no extra data</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id343862"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>0 - enumeration context</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - entries read</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - trust information</p></dd><dt><span class="term">return</span></dt><dd><p>0x8000 001a - "no trusted domains" success code</p></dd></dl></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343915"></a>LSA Open Secret</h3></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id343921"></a>Request</h4></div></div></div><p>no extra data</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id343930"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>0 - undocumented</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - undocumented</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - undocumented</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - undocumented</p></dd><dt><span class="term">UINT32</span></dt><dd><p>0 - undocumented</p></dd></dl></div><p>return    0x0C00 0034 - "no such secret" success code</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343997"></a>LSA Close</h3></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id344003"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">POL_HND</span></dt><dd><p>policy handle to be closed</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id344023"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">POL_HND</span></dt><dd><p>0s - closed policy handle (all zeros)</p></dd></dl></div><p>return    0 - indicates success</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id344046"></a>LSA Lookup SIDS</h3></div></div></div><p><span class="emphasis"><em>Note:	num_entries in response must be same as num_entries in request.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id344057"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">POL_HND</span></dt><dd><p>LSA policy handle</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented domain SID buffer pointer</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented domain name buffer pointer</p></dd><dt><span class="term">VOID*[num_entries] undocumented domain SID pointers to be looked up.
+</span></dt><dd><p>DOM_SID[num_entries] domain SIDs to be looked up.</p></dd><dt><span class="term">char[16]</span></dt><dd><p>completely undocumented 16 bytes.</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id344130"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">DOM_REF</span></dt><dd><p>domain reference response</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries (listed above)</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries (listed above)</p></dd><dt><span class="term">DOM_SID2[num_entries]</span></dt><dd><p>domain SIDs (from Request, listed above).</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries (listed above)</p></dd></dl></div><p>return                0 - indicates success</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id344201"></a>LSA Lookup Names</h3></div></div></div><p><span class="emphasis"><em>Note:	num_entries in response must be same as num_entries in request.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id344212"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">POL_HND</span></dt><dd><p>LSA policy handle</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented domain SID buffer pointer</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented domain name buffer pointer</p></dd><dt><span class="term">NAME[num_entries]</span></dt><dd><p>names to be looked up.</p></dd><dt><span class="term">char[]</span></dt><dd><p>undocumented bytes - falsely translated SID structure?</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id344296"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">DOM_REF</span></dt><dd><p>domain reference response</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries (listed above)</p></dd><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries (listed above)</p></dd><dt><span class="term">DOM_RID[num_entries]</span></dt><dd><p>domain SIDs (from Request, listed above).</p></dd><dt><span class="term">UINT32</span></dt><dd><p>num_entries (listed above)</p></dd></dl></div><p>return                0 - indicates success</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id344368"></a>NETLOGON rpc Transact Named Pipe</h2></div></div></div><p>The sequence of actions taken on this pipe are:</p><table class="simplelist" border="0" summary="Simple list"><tr><td>tablish a connection to the IPC$ share (SMBtconX).  use encrypted passwords.</td></tr><tr><td>en an RPC Pipe with the name "\\PIPE\\NETLOGON".  Store the file handle.</td></tr><tr><td>ing the file handle, send a Set Named Pipe Handle state to 0x4300.</td></tr><tr><td>eate Client Challenge. Send LSA Request Challenge.  Store Server Challenge.</td></tr><tr><td>lculate Session Key.  Send an LSA Auth 2 Challenge.  Store Auth2 Challenge.</td></tr><tr><td>lc/Verify Client Creds.  Send LSA Srv PW Set.  Calc/Verify Server Creds.</td></tr><tr><td>lc/Verify Client Creds.  Send LSA SAM Logon .  Calc/Verify Server Creds.</td></tr><tr><td>lc/Verify Client Creds.  Send LSA SAM Logoff.  Calc/Verify Server Creds.</td></tr><tr><td>ose the IPC$ share.</td></tr></table><p>Defines for this pipe, identifying the query are</p><div class="variablelist"><dl><dt><span class="term">LSA Request Challenge:</span></dt><dd><p>0x04</p></dd><dt><span class="term">LSA Server Password Set:</span></dt><dd><p>0x06</p></dd><dt><span class="term">LSA SAM Logon:</span></dt><dd><p>0x02</p></dd><dt><span class="term">LSA SAM Logoff:</span></dt><dd><p>0x03</p></dd><dt><span class="term">LSA Auth 2:</span></dt><dd><p>0x0f</p></dd><dt><span class="term">LSA Logon Control:</span></dt><dd><p>0x0e</p></dd></dl></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id344488"></a>LSA Request Challenge</h3></div></div></div><p><span class="emphasis"><em>Note:	logon server name starts with two '\' characters and is upper case.</em></span></p><p><span class="emphasis"><em>Note:	logon client is the machine, not the user.</em></span></p><p><span class="emphasis"><em>Note:	the initial LanManager password hash, against which the challenge is issued, is the machine name itself (lower case).  there will becalls issued (LSA Server Password Set) which will change this, later. refusing these calls allows you to always deal with the same password (i.e the LM# of the machine name in lower case).</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id344512"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon server unicode string</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>logon client unicode string</p></dd><dt><span class="term">char[8]</span></dt><dd><p>client challenge</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id344564"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">char[8]</span></dt><dd><p>server challenge</p></dd></dl></div><p>return    0 - indicates success</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id344589"></a>LSA Authenticate 2</h3></div></div></div><p><span class="emphasis"><em>Note:	in between request and response, calculate the client credentials, and check them against the client-calculated credentials (this process uses the previously received client credentials).</em></span></p><p><span class="emphasis"><em>Note:	neg_flags in the response is the same as that in the request.</em></span></p><p><span class="emphasis"><em>Note:	you must take a copy of the client-calculated credentials received 	here, because they will be used in subsequent authentication packets.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id344611"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">LOG_INFO</span></dt><dd><p>client identification info</p></dd><dt><span class="term">char[8]</span></dt><dd><p>client-calculated credentials</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>padding to 4-byte align with start of SMB header.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>neg_flags - negotiated flags (usual value is 0x0000 01ff)</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id344662"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">char[8]</span></dt><dd><p>server credentials.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>neg_flags - same as neg_flags in request.</p></dd></dl></div><p>return    0 - indicates success.  failure value unknown.</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id344698"></a>LSA Server Password Set</h3></div></div></div><p><span class="emphasis"><em>Note: the new password is suspected to be a DES encryption using the old password to generate the key.</em></span></p><p><span class="emphasis"><em>Note: in between request and response, calculate the client credentials, and check them against the client-calculated credentials (this process uses the previously received client credentials).</em></span></p><p><span class="emphasis"><em>Note: the server credentials are constructed from the client-calculated credentials and the client time + 1 second.</em></span></p><p><span class="emphasis"><em>Note: you must take a copy of the client-calculated credentials received here, because they will be used in subsequent authentication packets.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id344725"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">CLNT_INFO</span></dt><dd><p>client identification/authentication info</p></dd><dt><span class="term">char[]</span></dt><dd><p>new password - undocumented.</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id344756"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">CREDS</span></dt><dd><p>server credentials.  server time stamp appears to be ignored.</p></dd></dl></div><p>return    0 - indicates success; 0xC000 006a indicates failure</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id344782"></a>LSA SAM Logon</h3></div></div></div><p><span class="emphasis"><em>
 Note:	valid_user is True iff the username and password hash are valid for
 	the requested domain.
-</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2576402"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">SAM_INFO</span></dt><dd><p>sam_id structure</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2576424"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">CREDS</span></dt><dd><p>server credentials.  server time stamp appears to be ignored.</p></dd></dl></div><pre class="programlisting">
+</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id344792"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">SAM_INFO</span></dt><dd><p>sam_id structure</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id344813"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">CREDS</span></dt><dd><p>server credentials.  server time stamp appears to be ignored.</p></dd></dl></div><pre class="programlisting">
 if (valid_user)
 {
 	UINT16      3 - switch value indicating USER_INFO structure.
@@ -166,16 +166,16 @@
 
     return    0xC000 0064 - NT_STATUS_NO_SUCH_USER.
 }
-</pre></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2576474"></a>LSA SAM Logoff</h3></div></div></div><p><span class="emphasis"><em>
+</pre></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id344856"></a>LSA SAM Logoff</h3></div></div></div><p><span class="emphasis"><em>
 Note:	presumably, the SAM_INFO structure is validated, and a (currently
 	undocumented) error code returned if the Logoff is invalid.
-</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2576486"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">SAM_INFO</span></dt><dd><p>sam_id structure</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2576507"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">CREDS</span></dt><dd><p>server credentials.  server time stamp appears to be ignored.</p></dd></dl></div><p>return      0 - indicates success.  undocumented failure indication.</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2576547"></a>\\MAILSLOT\NET\NTLOGON</h2></div></div></div><p><span class="emphasis"><em>
+</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id344867"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">SAM_INFO</span></dt><dd><p>sam_id structure</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id344887"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>undocumented buffer pointer</p></dd><dt><span class="term">CREDS</span></dt><dd><p>server credentials.  server time stamp appears to be ignored.</p></dd></dl></div><p>return      0 - indicates success.  undocumented failure indication.</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id344925"></a>\\MAILSLOT\NET\NTLOGON</h2></div></div></div><p><span class="emphasis"><em>
 Note:	mailslots will contain a response mailslot, to which the response
 	should be sent.  the target NetBIOS name is REQUEST_NAME&lt;20&gt;, where
 	REQUEST_NAME is the name of the machine that sent the request.
-</em></span></p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2576562"></a>Query for PDC</h3></div></div></div><p><span class="emphasis"><em>Note:	NTversion, LMNTtoken, LM20token in response are the same as those 	given in the request.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2576574"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT16</span></dt><dd><p>0x0007 - Query for PDC</p></dd><dt><span class="term">STR</span></dt><dd><p>machine name</p></dd><dt><span class="term">STR</span></dt><dd><p>response mailslot</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>padding to 2-byte align with start of mailslot.</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>machine name</p></dd><dt><span class="term">UINT32</span></dt><dd><p>NTversion</p></dd><dt><span class="term">UINT16</span></dt><dd><p>LMNTtoken</p></dd><dt><span class="term">UINT16</span></dt><dd><p>LM20token</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2576674"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT16</span></dt><dd><p>0x000A - Respose to Query for PDC</p></dd><dt><span class="term">STR</span></dt><dd><p>machine name (in uppercase)</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>padding to 2-byte align with start of mailslot.</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>machine name</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>domain name</p></dd><dt><span class="term">UINT32</span></dt><dd><p>NTversion (same as received in request)</p></dd><dt><span class="term">UINT16</span></dt><dd><p>LMNTtoken (same as received in request)</p></dd><dt><span class="term">UINT16</span></dt><dd><p>LM20token (same as received in request)</p></dd></dl></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2576771"></a>SAM Logon</h3></div></div></div><p><span class="emphasis"><em>Note: machine name in response is preceded by two '\' characters.</em></span></p><p><span class="emphasis"><em>Note:	NTversion, LMNTtoken, LM20token in response are the same as those given in the request.</em></span></p><p><span class="emphasis"><em>Note:	user name in the response is presumably the same as that in the request.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2576794"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT16</span></dt><dd><p>0x0012 - SAM Logon</p></dd><dt><span class="term">UINT16</span></dt><dd><p>request count</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>machine name</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>user name</p></dd><dt><span class="term">STR</span></dt><dd><p>response mailslot</p></dd><dt><span class="term">UINT32</span></dt><dd><p>alloweable account</p></dd><dt><span class="term">UINT32</span></dt><dd><p>domain SID size</p></dd><dt><span class="term">char[sid_size]</span></dt><dd><p>domain SID, of sid_size bytes.</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>???? padding to 4? 2? -byte align with start of mailslot.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>NTversion</p></dd><dt><span class="term">UINT16</span></dt><dd><p>LMNTtoken</p></dd><dt><span class="term">UINT16</span></dt><dd><p>LM20token</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2576940"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT16</span></dt><dd><p>0x0013 - Response to SAM Logon</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>machine name</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>user name - workstation trust account</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>domain name </p></dd><dt><span class="term">UINT32</span></dt><dd><p>NTversion</p></dd><dt><span class="term">UINT16</span></dt><dd><p>LMNTtoken</p></dd><dt><span class="term">UINT16</span></dt><dd><p>LM20token</p></dd></dl></div></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2577032"></a>SRVSVC Transact Named Pipe</h2></div></div></div><p>Defines for this pipe, identifying the query are:</p><div class="variablelist"><dl><dt><span class="term">Net Share Enum</span></dt><dd><p>0x0f</p></dd><dt><span class="term">Net Server Get Info</span></dt><dd><p>0x15</p></dd></dl></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577067"></a>Net Share Enum</h3></div></div></div><p><span class="emphasis"><em>Note:	share level and switch value in the response are presumably the same as those in the request.</em></span></p><p><span class="emphasis"><em>Note:	cifsrap2.txt (section 5) may be of limited assistance here.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2577085"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>pointer (to server name?)</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>server name</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>padding to get unicode string 4-byte aligned with the start of the SMB header.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>share level</p></dd><dt><span class="term">UINT32</span></dt><dd><p>switch value</p></dd><dt><span class="term">VOID*</span></dt><dd><p>pointer to SHARE_INFO_1_CTR</p></dd><dt><span class="term">SHARE_INFO_1_CTR</span></dt><dd><p>share info with 0 entries</p></dd><dt><span class="term">UINT32</span></dt><dd><p>preferred maximum length (0xffff ffff)</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2577185"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>share level</p></dd><dt><span class="term">UINT32</span></dt><dd><p>switch value</p></dd><dt><span class="term">VOID*</span></dt><dd><p>pointer to SHARE_INFO_1_CTR</p></dd><dt><span class="term">SHARE_INFO_1_CTR</span></dt><dd><p>share info (only added if share info ptr is non-zero)</p></dd></dl></div><p>return            0 - indicates success</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577244"></a>Net Server Get Info</h3></div></div></div><p><span class="emphasis"><em>Note:	level is the same value as in the request.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2577255"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UNISTR2</span></dt><dd><p>server name</p></dd><dt><span class="term">UINT32</span></dt><dd><p>switch level</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2577287"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>switch level</p></dd><dt><span class="term">VOID*</span></dt><dd><p>pointer to SERVER_INFO_101</p></dd><dt><span class="term">SERVER_INFO_101</span></dt><dd><p>server info (only added if server info ptr is non-zero)</p></dd></dl></div><p>return            0 - indicates success</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2577337"></a>Cryptographic side of NT Domain Authentication</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577343"></a>Definitions</h3></div></div></div><div class="variablelist"><dl><dt><span class="term">Add(A1,A2)</span></dt><dd><p>Intel byte ordered addition of corresponding 4 byte words in arrays A1 and A2</p></dd><dt><span class="term">E(K,D)</span></dt><dd><p>DES ECB encryption of 8 byte data D using 7 byte key K</p></dd><dt><span class="term">lmowf()</span></dt><dd><p>Lan man hash</p></dd><dt><span class="term">ntowf()</span></dt><dd><p>NT hash</p></dd><dt><span class="term">PW</span></dt><dd><p>md4(machine_password) == md4(lsadump $machine.acc) ==
+</em></span></p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id344936"></a>Query for PDC</h3></div></div></div><p><span class="emphasis"><em>Note:	NTversion, LMNTtoken, LM20token in response are the same as those 	given in the request.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id344947"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT16</span></dt><dd><p>0x0007 - Query for PDC</p></dd><dt><span class="term">STR</span></dt><dd><p>machine name</p></dd><dt><span class="term">STR</span></dt><dd><p>response mailslot</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>padding to 2-byte align with start of mailslot.</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>machine name</p></dd><dt><span class="term">UINT32</span></dt><dd><p>NTversion</p></dd><dt><span class="term">UINT16</span></dt><dd><p>LMNTtoken</p></dd><dt><span class="term">UINT16</span></dt><dd><p>LM20token</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id345042"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT16</span></dt><dd><p>0x000A - Respose to Query for PDC</p></dd><dt><span class="term">STR</span></dt><dd><p>machine name (in uppercase)</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>padding to 2-byte align with start of mailslot.</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>machine name</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>domain name</p></dd><dt><span class="term">UINT32</span></dt><dd><p>NTversion (same as received in request)</p></dd><dt><span class="term">UINT16</span></dt><dd><p>LMNTtoken (same as received in request)</p></dd><dt><span class="term">UINT16</span></dt><dd><p>LM20token (same as received in request)</p></dd></dl></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id345132"></a>SAM Logon</h3></div></div></div><p><span class="emphasis"><em>Note: machine name in response is preceded by two '\' characters.</em></span></p><p><span class="emphasis"><em>Note:	NTversion, LMNTtoken, LM20token in response are the same as those given in the request.</em></span></p><p><span class="emphasis"><em>Note:	user name in the response is presumably the same as that in the request.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id345152"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT16</span></dt><dd><p>0x0012 - SAM Logon</p></dd><dt><span class="term">UINT16</span></dt><dd><p>request count</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>machine name</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>user name</p></dd><dt><span class="term">STR</span></dt><dd><p>response mailslot</p></dd><dt><span class="term">UINT32</span></dt><dd><p>alloweable account</p></dd><dt><span class="term">UINT32</span></dt><dd><p>domain SID size</p></dd><dt><span class="term">char[sid_size]</span></dt><dd><p>domain SID, of sid_size bytes.</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>???? padding to 4? 2? -byte align with start of mailslot.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>NTversion</p></dd><dt><span class="term">UINT16</span></dt><dd><p>LMNTtoken</p></dd><dt><span class="term">UINT16</span></dt><dd><p>LM20token</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id345290"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT16</span></dt><dd><p>0x0013 - Response to SAM Logon</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>machine name</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>user name - workstation trust account</p></dd><dt><span class="term">UNISTR</span></dt><dd><p>domain name </p></dd><dt><span class="term">UINT32</span></dt><dd><p>NTversion</p></dd><dt><span class="term">UINT16</span></dt><dd><p>LMNTtoken</p></dd><dt><span class="term">UINT16</span></dt><dd><p>LM20token</p></dd></dl></div></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id345377"></a>SRVSVC Transact Named Pipe</h2></div></div></div><p>Defines for this pipe, identifying the query are:</p><div class="variablelist"><dl><dt><span class="term">Net Share Enum</span></dt><dd><p>0x0f</p></dd><dt><span class="term">Net Server Get Info</span></dt><dd><p>0x15</p></dd></dl></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id345410"></a>Net Share Enum</h3></div></div></div><p><span class="emphasis"><em>Note:	share level and switch value in the response are presumably the same as those in the request.</em></span></p><p><span class="emphasis"><em>Note:	cifsrap2.txt (section 5) may be of limited assistance here.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id345425"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">VOID*</span></dt><dd><p>pointer (to server name?)</p></dd><dt><span class="term">UNISTR2</span></dt><dd><p>server name</p></dd><dt><span class="term">UINT8[]</span></dt><dd><p>padding to get unicode string 4-byte aligned with the start of the SMB header.</p></dd><dt><span class="term">UINT32</span></dt><dd><p>share level</p></dd><dt><span class="term">UINT32</span></dt><dd><p>switch value</p></dd><dt><span class="term">VOID*</span></dt><dd><p>pointer to SHARE_INFO_1_CTR</p></dd><dt><span class="term">SHARE_INFO_1_CTR</span></dt><dd><p>share info with 0 entries</p></dd><dt><span class="term">UINT32</span></dt><dd><p>preferred maximum length (0xffff ffff)</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id345519"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>share level</p></dd><dt><span class="term">UINT32</span></dt><dd><p>switch value</p></dd><dt><span class="term">VOID*</span></dt><dd><p>pointer to SHARE_INFO_1_CTR</p></dd><dt><span class="term">SHARE_INFO_1_CTR</span></dt><dd><p>share info (only added if share info ptr is non-zero)</p></dd></dl></div><p>return            0 - indicates success</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id345573"></a>Net Server Get Info</h3></div></div></div><p><span class="emphasis"><em>Note:	level is the same value as in the request.</em></span></p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id345583"></a>Request</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UNISTR2</span></dt><dd><p>server name</p></dd><dt><span class="term">UINT32</span></dt><dd><p>switch level</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id345614"></a>Response</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">UINT32</span></dt><dd><p>switch level</p></dd><dt><span class="term">VOID*</span></dt><dd><p>pointer to SERVER_INFO_101</p></dd><dt><span class="term">SERVER_INFO_101</span></dt><dd><p>server info (only added if server info ptr is non-zero)</p></dd></dl></div><p>return            0 - indicates success</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id345660"></a>Cryptographic side of NT Domain Authentication</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id345665"></a>Definitions</h3></div></div></div><div class="variablelist"><dl><dt><span class="term">Add(A1,A2)</span></dt><dd><p>Intel byte ordered addition of corresponding 4 byte words in arrays A1 and A2</p></dd><dt><span class="term">E(K,D)</span></dt><dd><p>DES ECB encryption of 8 byte data D using 7 byte key K</p></dd><dt><span class="term">lmowf()</span></dt><dd><p>Lan man hash</p></dd><dt><span class="term">ntowf()</span></dt><dd><p>NT hash</p></dd><dt><span class="term">PW</span></dt><dd><p>md4(machine_password) == md4(lsadump $machine.acc) ==
 pwdump(machine$) (initially) == md4(lmowf(unicode(machine)))
-</p></dd><dt><span class="term">ARC4(K,Lk,D,Ld)</span></dt><dd><p>ARC4 encryption of data D of length Ld with key K of length Lk</p></dd><dt><span class="term">v[m..n(,l)]</span></dt><dd><p>subset of v from bytes m to n, optionally padded with zeroes to length l</p></dd><dt><span class="term">Cred(K,D)</span></dt><dd><p>E(K[7..7,7],E(K[0..6],D)) computes a credential</p></dd><dt><span class="term">Time()</span></dt><dd><p>4 byte current time</p></dd><dt><span class="term">Cc,Cs</span></dt><dd><p>8 byte client and server challenges Rc,Rs: 8 byte client and server credentials</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577473"></a>Protocol</h3></div></div></div><pre class="programlisting">
+</p></dd><dt><span class="term">ARC4(K,Lk,D,Ld)</span></dt><dd><p>ARC4 encryption of data D of length Ld with key K of length Lk</p></dd><dt><span class="term">v[m..n(,l)]</span></dt><dd><p>subset of v from bytes m to n, optionally padded with zeroes to length l</p></dd><dt><span class="term">Cred(K,D)</span></dt><dd><p>E(K[7..7,7],E(K[0..6],D)) computes a credential</p></dd><dt><span class="term">Time()</span></dt><dd><p>4 byte current time</p></dd><dt><span class="term">Cc,Cs</span></dt><dd><p>8 byte client and server challenges Rc,Rs: 8 byte client and server credentials</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id345785"></a>Protocol</h3></div></div></div><pre class="programlisting">
 C-&gt;S ReqChal,Cc
 S-&gt;C Cs
 </pre><pre class="programlisting">
@@ -211,7 +211,7 @@
 S-&gt;C Cred(Ks,Cred(Ks,Rc+Tc+1)),userinfo(logon script,UID,SIDs,etc)
 C: assert(Rs == Cred(Ks,Cred(Rc+Tc+1))
 C: Rc = Cred(Ks,Rc+Tc+1)
-</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577554"></a>Comments</h3></div></div></div><p>
+</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id345847"></a>Comments</h3></div></div></div><p>
 On first joining the domain the session key could be computed by
 anyone listening in on the network as the machine password has a well
 known value. Until the machine is rebooted it will use this session
@@ -232,15 +232,15 @@
 The password OWFs should NOT be sent over the network reversibly
 encrypted. They should be sent using ARC4(Ks,md4(owf)) with the server
 computing the same function using the owf values in the SAM.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2577596"></a>SIDs and RIDs</h2></div></div></div><p>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id345879"></a>SIDs and RIDs</h2></div></div></div><p>
 SIDs and RIDs are well documented elsewhere.
 </p><p>
 A SID is an NT Security ID (see DOM_SID structure).  They are of the form:
 </p><table class="simplelist" border="0" summary="Simple list"><tr><td>revision-NN-SubAuth1-SubAuth2-SubAuth3... </td></tr><tr><td>revision-0xNNNNNNNNNNNN-SubAuth1-SubAuth2-SubAuth3...</td></tr></table><p>
 currently, the SID revision is 1.
 The Sub-Authorities are known as Relative IDs (RIDs).
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577629"></a>Well-known SIDs</h3></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2577635"></a>Universal well-known SIDs</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">Null SID</span></dt><dd><p>S-1-0-0</p></dd><dt><span class="term">World</span></dt><dd><p>S-1-1-0</p></dd><dt><span class="term">Local</span></dt><dd><p>S-1-2-0</p></dd><dt><span class="term">Creator Owner ID</span></dt><dd><p>S-1-3-0</p></dd><dt><span class="term">Creator Group ID</span></dt><dd><p>S-1-3-1</p></dd><dt><span class="term">Creator Owner Server ID</span></dt><dd><p>S-1-3-2</p></dd><dt><span class="term">Creator Group Server ID</span></dt><dd><p>S-1-3-3</p></dd><dt><span class="term">(Non-unique IDs)</span></dt><dd><p>S-1-4</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2577736"></a>NT well-known SIDs</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">NT Authority</span></dt><dd><p>S-1-5</p></dd><dt><span class="term">Dialup</span></dt><dd><p>S-1-5-1</p></dd><dt><span class="term">Network</span></dt><dd><p>S-1-5-2</p></dd><dt><span class="term">Batch</span></dt><dd><p>S-1-5-3</p></dd><dt><span class="term">Interactive</span></dt><dd><p>S-1-5-4</p></dd><dt><span class="term">Service</span></dt><dd><p>S-1-5-6</p></dd><dt><span class="term">AnonymousLogon(aka null logon session)</span></dt><dd><p>S-1-5-7</p></dd><dt><span class="term">Proxy</span></dt><dd><p>S-1-5-8</p></dd><dt><span class="term">ServerLogon(aka domain controller account)</span></dt><dd><p>S-1-5-8</p></dd><dt><span class="term">(Logon IDs)</span></dt><dd><p>S-1-5-5-X-Y</p></dd><dt><span class="term">(NT non-unique IDs)</span></dt><dd><p>S-1-5-0x15-...</p></dd><dt><span class="term">(Built-in domain)</span></dt><dd><p>s-1-5-0x20</p></dd></dl></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577880"></a>Well-known RIDS</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id345907"></a>Well-known SIDs</h3></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id345913"></a>Universal well-known SIDs</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">Null SID</span></dt><dd><p>S-1-0-0</p></dd><dt><span class="term">World</span></dt><dd><p>S-1-1-0</p></dd><dt><span class="term">Local</span></dt><dd><p>S-1-2-0</p></dd><dt><span class="term">Creator Owner ID</span></dt><dd><p>S-1-3-0</p></dd><dt><span class="term">Creator Group ID</span></dt><dd><p>S-1-3-1</p></dd><dt><span class="term">Creator Owner Server ID</span></dt><dd><p>S-1-3-2</p></dd><dt><span class="term">Creator Group Server ID</span></dt><dd><p>S-1-3-3</p></dd><dt><span class="term">(Non-unique IDs)</span></dt><dd><p>S-1-4</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id346008"></a>NT well-known SIDs</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">NT Authority</span></dt><dd><p>S-1-5</p></dd><dt><span class="term">Dialup</span></dt><dd><p>S-1-5-1</p></dd><dt><span class="term">Network</span></dt><dd><p>S-1-5-2</p></dd><dt><span class="term">Batch</span></dt><dd><p>S-1-5-3</p></dd><dt><span class="term">Interactive</span></dt><dd><p>S-1-5-4</p></dd><dt><span class="term">Service</span></dt><dd><p>S-1-5-6</p></dd><dt><span class="term">AnonymousLogon(aka null logon session)</span></dt><dd><p>S-1-5-7</p></dd><dt><span class="term">Proxy</span></dt><dd><p>S-1-5-8</p></dd><dt><span class="term">ServerLogon(aka domain controller account)</span></dt><dd><p>S-1-5-8</p></dd><dt><span class="term">(Logon IDs)</span></dt><dd><p>S-1-5-5-X-Y</p></dd><dt><span class="term">(NT non-unique IDs)</span></dt><dd><p>S-1-5-0x15-...</p></dd><dt><span class="term">(Built-in domain)</span></dt><dd><p>s-1-5-0x20</p></dd></dl></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id346144"></a>Well-known RIDS</h3></div></div></div><p>
 A RID is a sub-authority value, as part of either a SID, or in the case
 of Group RIDs, part of the DOM_GID structure, in the USER_INFO_1
 structure, in the LSA SAM Logon response.
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2577893"></a>Well-known RID users</h4></div></div></div><div class="segmentedlist"><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>DOMAIN_USER_RID_ADMIN</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>01F4</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>DOMAIN_USER_RID_GUEST</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>01F5</div></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2577932"></a>Well-known RID groups</h4></div></div></div><div class="segmentedlist"><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>	DOMAIN_GROUP_RID_ADMINS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0200</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>	DOMAIN_GROUP_RID_USERS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0201</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>	DOMAIN_GROUP_RID_GUESTS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0202</div></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2577981"></a>Well-known RID aliases</h4></div></div></div><div class="segmentedlist"><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>	DOMAIN_ALIAS_RID_ADMINS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0220</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>	DOMAIN_ALIAS_RID_USERS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0221</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>	DOMAIN_ALIAS_RID_GUESTS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0222</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>	DOMAIN_ALIAS_RID_POWER_USERS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0223</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>	DOMAIN_ALIAS_RID_ACCOUNT_OPS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0224</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>	DOMAIN_ALIAS_RID_SYSTEM_OPS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0225</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>	DOMAIN_ALIAS_RID_PRINT_OPS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0226</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>	DOMAIN_ALIAS_RID_BACKUP_OPS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0227</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>	DOMAIN_ALIAS_RID_REPLICATOR</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0228</div></div></div></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="unix-smb.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="pt01.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="pt02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 1. NetBIOS in a Unix World </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Part II. Samba Basics</td></tr></table></div></body></html>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id346154"></a>Well-known RID users</h4></div></div></div><div class="segmentedlist"><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>DOMAIN_USER_RID_ADMIN</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>01F4</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>DOMAIN_USER_RID_GUEST</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>01F5</div></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id346191"></a>Well-known RID groups</h4></div></div></div><div class="segmentedlist"><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>	DOMAIN_GROUP_RID_ADMINS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0200</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>	DOMAIN_GROUP_RID_USERS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0201</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>	DOMAIN_GROUP_RID_GUESTS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0202</div></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id346235"></a>Well-known RID aliases</h4></div></div></div><div class="segmentedlist"><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>	DOMAIN_ALIAS_RID_ADMINS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0220</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>	DOMAIN_ALIAS_RID_USERS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0221</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>	DOMAIN_ALIAS_RID_GUESTS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0222</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>	DOMAIN_ALIAS_RID_POWER_USERS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0223</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>	DOMAIN_ALIAS_RID_ACCOUNT_OPS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0224</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>	DOMAIN_ALIAS_RID_SYSTEM_OPS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0225</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>	DOMAIN_ALIAS_RID_PRINT_OPS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0226</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>	DOMAIN_ALIAS_RID_BACKUP_OPS</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0227</div></div><div class="seglistitem"><div class="seg"><strong><span class="segtitle">Groupname: </span></strong>	DOMAIN_ALIAS_RID_REPLICATOR</div><div class="seg"><strong><span class="segtitle">????: </span></strong>0x0000</div><div class="seg"><strong><span class="segtitle">RID: </span></strong>0228</div></div></div></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="unix-smb.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="pt01.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="pt02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 1. NetBIOS in a Unix World </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Part II. Samba Basics</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/parsing.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/parsing.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/parsing.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 11. The smb.conf file</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt03.html" title="Part III. Samba Subsystems"><link rel="prev" href="vfs.html" title="Chapter 10. VFS Modules"><link rel="next" href="wins.html" title="Chapter 12. Samba WINS Internals"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 11. The smb.conf file</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="vfs.html">Prev</a> </td><th width="60%" align="center">Part III. Samba Subsystems</th><td width="20%" align="right"> <a accesskey="n" href="wins.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="parsing"></a>Chapter 11. The smb.conf file</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Chris</span> <span class="surname">Hertel</span></h3></div></div><div><p class="pubdate">November 1997</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="parsing.html#id2581889">Lexical Analysis</a></span></dt><dd><dl><dt><span class="sect2"><a href="parsing.html#id2581964">Handling of Whitespace</a></span></dt><dt><span class="sect2"><a href="parsing.html#id2582010">Handling of Line Continuation</a></span></dt><dt><span class="sect2"><a href="parsing.html#id2582063">Line Continuation Quirks</a></span></dt></dl></dd><dt><span class="sect1"><a href="parsing.html#id2582144">Syntax</a></span></dt><dd><dl><dt><span class="sect2"><a href="parsing.html#id2582203">About params.c</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2581889"></a>Lexical Analysis</h2></div></div></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 11. The smb.conf file</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt03.html" title="Part III. Samba Subsystems"><link rel="prev" href="vfs.html" title="Chapter 10. VFS Modules"><link rel="next" href="wins.html" title="Chapter 12. Samba WINS Internals"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 11. The smb.conf file</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="vfs.html">Prev</a> </td><th width="60%" align="center">Part III. Samba Subsystems</th><td width="20%" align="right"> <a accesskey="n" href="wins.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="parsing"></a>Chapter 11. The smb.conf file</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Chris</span> <span class="surname">Hertel</span></h3></div></div><div><p class="pubdate">November 1997</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="parsing.html#id349417">Lexical Analysis</a></span></dt><dd><dl><dt><span class="sect2"><a href="parsing.html#id349483">Handling of Whitespace</a></span></dt><dt><span class="sect2"><a href="parsing.html#id349523">Handling of Line Continuation</a></span></dt><dt><span class="sect2"><a href="parsing.html#id349566">Line Continuation Quirks</a></span></dt></dl></dd><dt><span class="sect1"><a href="parsing.html#id349636">Syntax</a></span></dt><dd><dl><dt><span class="sect2"><a href="parsing.html#id349686">About params.c</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id349417"></a>Lexical Analysis</h2></div></div></div><p>
 Basically, the file is processed on a line by line basis.  There are
 four types of lines that are recognized by the lexical analyzer
 (params.c):
@@ -25,7 +25,7 @@
 These are the only tokens passed to the parameter loader
 (loadparm.c).  Parameter names and values are divided from one
 another by an equal sign: '='.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2581964"></a>Handling of Whitespace</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id349483"></a>Handling of Whitespace</h3></div></div></div><p>
 Whitespace is defined as all characters recognized by the isspace()
 function (see ctype(3C)) except for the newline character ('\n')
 The newline is excluded because it identifies the end of the line.
@@ -40,7 +40,7 @@
 are removed.
 </p></li><li><p>
 Leading and trailing whitespace is removed from names and values.
-</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2582010"></a>Handling of Line Continuation</h3></div></div></div><p>
+</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id349523"></a>Handling of Line Continuation</h3></div></div></div><p>
 Long section header and parameter lines may be extended across
 multiple lines by use of the backslash character ('\\').  Line
 continuation is ignored for blank and comment lines.
@@ -63,7 +63,7 @@
 Line continuation characters are ignored on blank lines and at the end
 of comments.  They are *only* recognized within section and parameter
 lines.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2582063"></a>Line Continuation Quirks</h3></div></div></div><p>Note the following example:</p><pre class="programlisting">
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id349566"></a>Line Continuation Quirks</h3></div></div></div><p>Note the following example:</p><pre class="programlisting">
 	param name = parameter value string \
     \
     with line continuation.
@@ -87,7 +87,7 @@
 </pre><p>are read as</p><pre class="programlisting">
 	[section name]
     param name = value
-</pre></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2582144"></a>Syntax</h2></div></div></div><p>The syntax of the smb.conf file is as follows:</p><pre class="programlisting">
+</pre></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id349636"></a>Syntax</h2></div></div></div><p>The syntax of the smb.conf file is as follows:</p><pre class="programlisting">
   &lt;file&gt;            :==  { &lt;section&gt; } EOF
   &lt;section&gt;         :==  &lt;section header&gt; { &lt;parameter line&gt; }
   &lt;section header&gt;  :==  '[' NAME ']'
@@ -106,7 +106,7 @@
 	A parameter line is divided into a NAME and a VALUE.  The *first*
 	equal sign on the line separates the NAME from the VALUE.  The
 	VALUE is terminated by a newline character (NL = '\n').
-</p></li></ol></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2582203"></a>About params.c</h3></div></div></div><p>
+</p></li></ol></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id349686"></a>About params.c</h3></div></div></div><p>
 The parsing of the config file is a bit unusual if you are used to
 lex, yacc, bison, etc.  Both lexical analysis (scanning) and parsing
 are performed by params.c.  Values are loaded via callbacks to

Modified: branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pr01.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pr01.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pr01.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Attribution</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="index.html" title="SAMBA Developers Guide"><link rel="prev" href="index.html" title="SAMBA Developers Guide"><link rel="next" href="pt01.html" title="Part I. The protocol"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Attribution</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="pt01.html">Next</a></td></tr></table><hr></div><div class="preface" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="id2561695"></a>Attribution</h2></div></div></div><p><a class="link" href="unix-smb.html" title="Chapter 1. NetBIOS in a Unix World">NetBIOS in a Unix World</a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Attribution</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="index.html" title="SAMBA Developers Guide"><link rel="prev" href="index.html" title="SAMBA Developers Guide"><link rel="next" href="pt01.html" title="Part I. The protocol"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Attribution</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="pt01.html">Next</a></td></tr></table><hr></div><div class="preface" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="id298055"></a>Attribution</h2></div></div></div><p><a class="link" href="unix-smb.html" title="Chapter 1. NetBIOS in a Unix World">NetBIOS in a Unix World</a>
 	</p><div class="itemizedlist"><ul type="disc"><li><p>Andrew Tridgell</p></li></ul></div><p>
 </p><p><a class="link" href="ntdomain.html" title="Chapter 2. NT Domain RPC's">NT Domain RPC's</a>
 	</p><div class="itemizedlist"><ul type="disc"><li><p>Luke Leighton<a class="ulink" href="mailto:lkcl at switchboard.net" target="_top">mailto:lkcl at switchboard.net</a></p></li><li><p>Paul Ashton<a class="ulink" href="mailto:paul at argo.demon.co.uk" target="_top">mailto:paul at argo.demon.co.uk</a></p></li><li><p>Duncan Stansfield<a class="ulink" href="mailto:duncans at sco.com" target="_top">mailto:duncans at sco.com</a></p></li></ul></div><p>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pt01.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pt01.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pt01.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1 +1 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part I. The protocol</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="index.html" title="SAMBA Developers Guide"><link rel="prev" href="pr01.html" title="Attribution"><link rel="next" href="unix-smb.html" title="Chapter 1. NetBIOS in a Unix World"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part I. The protocol</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pr01.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="unix-smb.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="id2523985"></a>Part I. The protocol</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="unix-smb.html">1. NetBIOS in a Unix World</a></span></dt><dd><dl><dt><span class="sect1"><a href="unix-smb.html#id2524015">Introduction</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id2524036">Usernames</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id2524368">File Ownership</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id2523694">Passwords</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id2523732">Locking</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id2523784">Deny Modes</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id2523816">Trapdoor UIDs</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id2571061">Port numbers</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id2571106">Protocol Complexity</a></span></dt></dl></dd><dt><span class="chapter"><a href="ntdomain.html">2. NT Domain RPC's</a></span></dt><dd><dl><dt><span class="sect1"><a href="ntdomain.html#id2571233">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id2571402">Sources</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2571430">Credits</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id2571462">Notes and Structures</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id2571468">Notes</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2571532">Enumerations</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2571703">Structures</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id2574068">MSRPC over Transact Named Pipe</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id2574078">MSRPC Pipes</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2574164">Header</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2574869">Tail</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2574905">RPC Bind / Bind Ack</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2575052">NTLSA Transact Named Pipe</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2575186">LSA Open Policy</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2575286">LSA Query Info Policy</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2575371">LSA Enumerate Trusted Domains</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2575444">LSA Open Secret</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2575532">LSA Close</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2575585">LSA Lookup SIDS</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2575753">LSA Lookup Names</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id2575934">NETLOGON rpc Transact Named Pipe</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id2576065">LSA Request Challenge</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2576179">LSA Authenticate 2</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2576297">LSA Server Password Set</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2576391">LSA SAM Logon</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2576474">LSA SAM Logoff</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id2576547">\\MAILSLOT\NET\NTLOGON</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id2576562">Query for PDC</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2576771">SAM Logon</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id2577032">SRVSVC Transact Named Pipe</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id2577067">Net Share Enum</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2577244">Net Server Get Info</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id2577337">Cryptographic side of NT Domain Authentication</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id2577343">Definitions</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2577473">Protocol</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2577554">Comments</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id2577596">SIDs and RIDs</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id2577629">Well-known SIDs</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id2577880">Well-known RIDS</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="pr01.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="unix-smb.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Attribution </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 1. NetBIOS in a Unix World</td></tr></table></div></body></html>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part I. The protocol</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="index.html" title="SAMBA Developers Guide"><link rel="prev" href="pr01.html" title="Attribution"><link rel="next" href="unix-smb.html" title="Chapter 1. NetBIOS in a Unix World"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part I. The protocol</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pr01.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="unix-smb.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="id339681"></a>Part I. The protocol</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="unix-smb.html">1. NetBIOS in a Unix World</a></span></dt><dd><dl><dt><span class="sect1"><a href="unix-smb.html#id339707">Introduction</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id339724">Usernames</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id297652">File Ownership</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id297676">Passwords</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id297704">Locking</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id339928">Deny Modes</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id339950">Trapdoor UIDs</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id339967">Port numbers</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id339998">Protocol Complexity</a></span></dt></dl></dd><dt><span class="chapter"><a href="ntdomain.html">2. NT Domain RPC's</a></span></dt><dd><dl><dt><span class="sect1"><a href="ntdomain.html#id340101">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id340231">Sources</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id340255">Credits</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id340283">Notes and Structures</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id340288">Notes</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id340337">Enumerations</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id340498">Structures</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id342673">MSRPC over Transact Named Pipe</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id342683">MSRPC Pipes</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id342750">Header</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id343386">Tail</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id343421">RPC Bind / Bind Ack</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id343553">NTLSA Transact Named Pipe</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id343674">LSA Open Policy</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id343768">LSA Query Info Policy</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id343847">LSA Enumerate Trusted Domains</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id343915">LSA Open Secret</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id343997">LSA Close</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id344046">LSA Lookup SIDS</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id344201">LSA Lookup Names</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id344368">NETLOGON rpc Transact Named Pipe</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id344488">LSA Request Challenge</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id344589">LSA Authenticate 2</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id344698">LSA Server Password Set</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id344782">LSA SAM Logon</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id344856">LSA SAM Logoff</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id344925">\\MAILSLOT\NET\NTLOGON</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id344936">Query for PDC</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id345132">SAM Logon</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id345377">SRVSVC Transact Named Pipe</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id345410">Net Share Enum</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id345573">Net Server Get Info</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id345660">Cryptographic side of NT Domain Authentication</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id345665">Definitions</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id345785">Protocol</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id345847">Comments</a></span></dt></dl></dd><dt><span class="sect1"><a href="ntdomain.html#id345879">SIDs and RIDs</a></span></dt><dd><dl><dt><span class="sect2"><a href="ntdomain.html#id345907">Well-known SIDs</a></span></dt><dt><span class="sect2"><a href="ntdomain.html#id346144">Well-known RIDS</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="pr01.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="unix-smb.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Attribution </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 1. NetBIOS in a Unix World</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pt02.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pt02.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pt02.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1 +1 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part II. Samba Basics</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="index.html" title="SAMBA Developers Guide"><link rel="prev" href="ntdomain.html" title="Chapter 2. NT Domain RPC's"><link rel="next" href="architecture.html" title="Chapter 3. Samba Architecture"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part II. Samba Basics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ntdomain.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="architecture.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="id2578093"></a>Part II. Samba Basics</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="architecture.html">3. Samba Architecture</a></span></dt><dd><dl><dt><span class="sect1"><a href="architecture.html#id2578123">Introduction</a></span></dt><dt><span class="sect1"><a href="architecture.html#id2578167">Multithreading and Samba</a></span></dt><dt><span class="sect1"><a href="architecture.html#id2578199">Threading smbd</a></span></dt><dt><span class="sect1"><a href="architecture.html#id2578261">Threading nmbd</a></span></dt><dt><span class="sect1"><a href="architecture.html#id2578307">nbmd Design</a></span></dt></dl></dd><dt><span class="chapter"><a href="debug.html">4. The samba DEBUG system</a></span></dt><dd><dl><dt><span class="sect1"><a href="debug.html#id2578365">New Output Syntax</a></span></dt><dt><span class="sect1"><a href="debug.html#id2578477">The DEBUG() Macro</a></span></dt><dt><span class="sect1"><a href="debug.html#id2578586">The DEBUGADD() Macro</a></span></dt><dt><span class="sect1"><a href="debug.html#id2578623">The DEBUGLVL() Macro</a></span></dt><dt><span class="sect1"><a href="debug.html#id2578716">New Functions</a></span></dt><dd><dl><dt><span class="sect2"><a href="debug.html#id2578722">dbgtext()</a></span></dt><dt><span class="sect2"><a href="debug.html#id2578738">dbghdr()</a></span></dt><dt><span class="sect2"><a href="debug.html#id2578757">format_debug_text()</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="internals.html">5. Samba Internals</a></span></dt><dd><dl><dt><span class="sect1"><a href="internals.html#id2578812">Character Handling</a></span></dt><dt><span class="sect1"><a href="internals.html#id2578834">The new functions</a></span></dt><dt><span class="sect1"><a href="internals.html#id2578964">Macros in byteorder.h</a></span></dt><dd><dl><dt><span class="sect2"><a href="internals.html#id2578975">CVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2578987">PVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2578998">SCVAL(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579009">SVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579022">IVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579034">SVALS(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579046">IVALS(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579057">SSVAL(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579069">SIVAL(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579081">SSVALS(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579093">SIVALS(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579105">RSVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579116">RIVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579128">RSSVAL(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579141">RSIVAL(buf,pos,val)</a></span></dt></dl></dd><dt><span class="sect1"><a href="internals.html#id2579154">LAN Manager Samba API</a></span></dt><dd><dl><dt><span class="sect2"><a href="internals.html#id2579182">Parameters</a></span></dt><dt><span class="sect2"><a href="internals.html#id2579308">Return value</a></span></dt></dl></dd><dt><span class="sect1"><a href="internals.html#id2579379">Code character table</a></span></dt></dl></dd><dt><span class="chapter"><a href="CodingSuggestions.html">6. Coding Suggestions</a></span></dt><dt><span class="chapter"><a href="contributing.html">7. Contributing code</a></span></dt><dt><span class="chapter"><a href="modules.html">8. Modules</a></span></dt><dd><dl><dt><span class="sect1"><a href="modules.html#id2580050">Advantages</a></span></dt><dt><span class="sect1"><a href="modules.html#id2580089">Loading modules</a></span></dt><dd><dl><dt><span class="sect2"><a href="modules.html#id2580116">Static modules</a></span></dt><dt><span class="sect2"><a href="modules.html#id2580150">Shared modules</a></span></dt></dl></dd><dt><span class="sect1"><a href="modules.html#id2580174">Writing modules</a></span></dt><dd><dl><dt><span class="sect2"><a href="modules.html#id2580225">Static/Shared selection in configure.in</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ntdomain.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="architecture.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 2. NT Domain RPC's </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 3. Samba Architecture</td></tr></table></div></body></html>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part II. Samba Basics</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="index.html" title="SAMBA Developers Guide"><link rel="prev" href="ntdomain.html" title="Chapter 2. NT Domain RPC's"><link rel="next" href="architecture.html" title="Chapter 3. Samba Architecture"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part II. Samba Basics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ntdomain.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="architecture.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="id346336"></a>Part II. Samba Basics</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="architecture.html">3. Samba Architecture</a></span></dt><dd><dl><dt><span class="sect1"><a href="architecture.html#id346363">Introduction</a></span></dt><dt><span class="sect1"><a href="architecture.html#id346402">Multithreading and Samba</a></span></dt><dt><span class="sect1"><a href="architecture.html#id346426">Threading smbd</a></span></dt><dt><span class="sect1"><a href="architecture.html#id346478">Threading nmbd</a></span></dt><dt><span class="sect1"><a href="architecture.html#id346510">nbmd Design</a></span></dt></dl></dd><dt><span class="chapter"><a href="debug.html">4. The samba DEBUG system</a></span></dt><dd><dl><dt><span class="sect1"><a href="debug.html#id346556">New Output Syntax</a></span></dt><dt><span class="sect1"><a href="debug.html#id346649">The DEBUG() Macro</a></span></dt><dt><span class="sect1"><a href="debug.html#id346738">The DEBUGADD() Macro</a></span></dt><dt><span class="sect1"><a href="debug.html#id346768">The DEBUGLVL() Macro</a></span></dt><dt><span class="sect1"><a href="debug.html#id346843">New Functions</a></span></dt><dd><dl><dt><span class="sect2"><a href="debug.html#id346849">dbgtext()</a></span></dt><dt><span class="sect2"><a href="debug.html#id346862">dbghdr()</a></span></dt><dt><span class="sect2"><a href="debug.html#id346878">format_debug_text()</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="internals.html">5. Samba Internals</a></span></dt><dd><dl><dt><span class="sect1"><a href="internals.html#id346925">Character Handling</a></span></dt><dt><span class="sect1"><a href="internals.html#id346942">The new functions</a></span></dt><dt><span class="sect1"><a href="internals.html#id347046">Macros in byteorder.h</a></span></dt><dd><dl><dt><span class="sect2"><a href="internals.html#id347056">CVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347066">PVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347076">SCVAL(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347087">SVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347098">IVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347108">SVALS(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347119">IVALS(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347130">SSVAL(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347140">SIVAL(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347151">SSVALS(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347161">SIVALS(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347172">RSVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347182">RIVAL(buf,pos)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347193">RSSVAL(buf,pos,val)</a></span></dt><dt><span class="sect2"><a href="internals.html#id347204">RSIVAL(buf,pos,val)</a></span></dt></dl></dd><dt><span class="sect1"><a href="internals.html#id347215">LAN Manager Samba API</a></span></dt><dd><dl><dt><span class="sect2"><a href="internals.html#id347239">Parameters</a></span></dt><dt><span class="sect2"><a href="internals.html#id347345">Return value</a></span></dt></dl></dd><dt><span class="sect1"><a href="internals.html#id347402">Code character table</a></span></dt></dl></dd><dt><span class="chapter"><a href="CodingSuggestions.html">6. Coding Suggestions</a></span></dt><dt><span class="chapter"><a href="contributing.html">7. Contributing code</a></span></dt><dt><span class="chapter"><a href="modules.html">8. Modules</a></span></dt><dd><dl><dt><span class="sect1"><a href="modules.html#id347970">Advantages</a></span></dt><dt><span class="sect1"><a href="modules.html#id348003">Loading modules</a></span></dt><dd><dl><dt><span class="sect2"><a href="modules.html#id348025">Static modules</a></span></dt><dt><span class="sect2"><a href="modules.html#id348054">Shared modules</a></span></dt></dl></dd><dt><span class="sect1"><a href="modules.html#id348073">Writing modules</a></span></dt><dd><dl><dt><span class="sect2"><a href="modules.html#id348114">Static/Shared selection in configure.in</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ntdomain.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="architecture.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 2. NT Domain RPC's </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 3. Samba Architecture</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pt03.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pt03.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pt03.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1 +1 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part III. Samba Subsystems</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="index.html" title="SAMBA Developers Guide"><link rel="prev" href="modules.html" title="Chapter 8. Modules"><link rel="next" href="rpc-plugin.html" title="Chapter 9. RPC Pluggable Modules"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part III. Samba Subsystems</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="modules.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="rpc-plugin.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="id2580328"></a>Part III. Samba Subsystems</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="rpc-plugin.html">9. RPC Pluggable Modules</a></span></dt><dd><dl><dt><span class="sect1"><a href="rpc-plugin.html#id2580396">About</a></span></dt><dt><span class="sect1"><a href="rpc-plugin.html#id2580411">General Overview</a></span></dt></dl></dd><dt><span class="chapter"><a href="vfs.html">10. VFS Modules</a></span></dt><dd><dl><dt><span class="sect1"><a href="vfs.html#id2580583">The Samba (Posix) VFS layer</a></span></dt><dd><dl><dt><span class="sect2"><a href="vfs.html#id2580625">The general interface</a></span></dt><dt><span class="sect2"><a href="vfs.html#id2580957">Possible VFS operation layers</a></span></dt></dl></dd><dt><span class="sect1"><a href="vfs.html#id2581018">The Interaction between the Samba VFS subsystem and the modules</a></span></dt><dd><dl><dt><span class="sect2"><a href="vfs.html#id2581024">Initialization and registration</a></span></dt><dt><span class="sect2"><a href="vfs.html#id2581175">How the Modules handle per connection data</a></span></dt></dl></dd><dt><span class="sect1"><a href="vfs.html#id2581379">Upgrading to the New VFS Interface</a></span></dt><dd><dl><dt><span class="sect2"><a href="vfs.html#id2581385">Upgrading from 2.2.* and 3.0alpha modules</a></span></dt></dl></dd><dt><span class="sect1"><a href="vfs.html#id2581803">Some Notes</a></span></dt><dd><dl><dt><span class="sect2"><a href="vfs.html#id2581809">Implement TRANSPARENT functions</a></span></dt><dt><span class="sect2"><a href="vfs.html#id2581828">Implement OPAQUE functions</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="parsing.html">11. The smb.conf file</a></span></dt><dd><dl><dt><span class="sect1"><a href="parsing.html#id2581889">Lexical Analysis</a></span></dt><dd><dl><dt><span class="sect2"><a href="parsing.html#id2581964">Handling of Whitespace</a></span></dt><dt><span class="sect2"><a href="parsing.html#id2582010">Handling of Line Continuation</a></span></dt><dt><span class="sect2"><a href="parsing.html#id2582063">Line Continuation Quirks</a></span></dt></dl></dd><dt><span class="sect1"><a href="parsing.html#id2582144">Syntax</a></span></dt><dd><dl><dt><span class="sect2"><a href="parsing.html#id2582203">About params.c</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="wins.html">12. Samba WINS Internals</a></span></dt><dd><dl><dt><span class="sect1"><a href="wins.html#id2582244">WINS Failover</a></span></dt></dl></dd><dt><span class="chapter"><a href="pwencrypt.html">13. LanMan and NT Password Encryption</a></span></dt><dd><dl><dt><span class="sect1"><a href="pwencrypt.html#id2582367">Introduction</a></span></dt><dt><span class="sect1"><a href="pwencrypt.html#id2582387">How does it work?</a></span></dt><dt><span class="sect1"><a href="pwencrypt.html#id2582472">The smbpasswd file</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="modules.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="rpc-plugin.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 8. Modules </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 9. RPC Pluggable Modules</td></tr></table></div></body></html>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part III. Samba Subsystems</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="index.html" title="SAMBA Developers Guide"><link rel="prev" href="modules.html" title="Chapter 8. Modules"><link rel="next" href="rpc-plugin.html" title="Chapter 9. RPC Pluggable Modules"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part III. Samba Subsystems</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="modules.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="rpc-plugin.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="id348202"></a>Part III. Samba Subsystems</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="rpc-plugin.html">9. RPC Pluggable Modules</a></span></dt><dd><dl><dt><span class="sect1"><a href="rpc-plugin.html#id348263">About</a></span></dt><dt><span class="sect1"><a href="rpc-plugin.html#id348276">General Overview</a></span></dt></dl></dd><dt><span class="chapter"><a href="vfs.html">10. VFS Modules</a></span></dt><dd><dl><dt><span class="sect1"><a href="vfs.html#id348426">The Samba (Posix) VFS layer</a></span></dt><dd><dl><dt><span class="sect2"><a href="vfs.html#id348454">The general interface</a></span></dt><dt><span class="sect2"><a href="vfs.html#id348708">Possible VFS operation layers</a></span></dt></dl></dd><dt><span class="sect1"><a href="vfs.html#id348752">The Interaction between the Samba VFS subsystem and the modules</a></span></dt><dd><dl><dt><span class="sect2"><a href="vfs.html#id348758">Initialization and registration</a></span></dt><dt><span class="sect2"><a href="vfs.html#id348885">How the Modules handle per connection data</a></span></dt></dl></dd><dt><span class="sect1"><a href="vfs.html#id349039">Upgrading to the New VFS Interface</a></span></dt><dd><dl><dt><span class="sect2"><a href="vfs.html#id349044">Upgrading from 2.2.* and 3.0aplha modules</a></span></dt></dl></dd><dt><span class="sect1"><a href="vfs.html#id349344">Some Notes</a></span></dt><dd><dl><dt><span class="sect2"><a href="vfs.html#id349350">Implement TRANSPARENT functions</a></span></dt><dt><span class="sect2"><a href="vfs.html#id349366">Implement OPAQUE functions</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="parsing.html">11. The smb.conf file</a></span></dt><dd><dl><dt><span class="sect1"><a href="parsing.html#id349417">Lexical Analysis</a></span></dt><dd><dl><dt><span class="sect2"><a href="parsing.html#id349483">Handling of Whitespace</a></span></dt><dt><span class="sect2"><a href="parsing.html#id349523">Handling of Line Continuation</a></span></dt><dt><span class="sect2"><a href="parsing.html#id349566">Line Continuation Quirks</a></span></dt></dl></dd><dt><span class="sect1"><a href="parsing.html#id349636">Syntax</a></span></dt><dd><dl><dt><span class="sect2"><a href="parsing.html#id349686">About params.c</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="wins.html">12. Samba WINS Internals</a></span></dt><dd><dl><dt><span class="sect1"><a href="wins.html#id349722">WINS Failover</a></span></dt></dl></dd><dt><span class="chapter"><a href="pwencrypt.html">13. LanMan and NT Password Encryption</a></span></dt><dd><dl><dt><span class="sect1"><a href="pwencrypt.html#id349822">Introduction</a></span></dt><dt><span class="sect1"><a href="pwencrypt.html#id349838">How does it work?</a></span></dt><dt><span class="sect1"><a href="pwencrypt.html#id349899">The smbpasswd file</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="modules.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="rpc-plugin.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 8. Modules </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 9. RPC Pluggable Modules</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pt04.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pt04.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pt04.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,9 +1,9 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part IV. Debugging and tracing</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="index.html" title="SAMBA Developers Guide"><link rel="prev" href="pwencrypt.html" title="Chapter 13. LanMan and NT Password Encryption"><link rel="next" href="tracing.html" title="Chapter 14. Tracing samba system calls"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part IV. Debugging and tracing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pwencrypt.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="tracing.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="id2582747"></a>Part IV. Debugging and tracing</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="tracing.html">14. Tracing samba system calls</a></span></dt><dt><span class="chapter"><a href="devprinting.html">15. Samba Printing Internals</a></span></dt><dd><dl><dt><span class="sect1"><a href="devprinting.html#id2582989">Abstract</a></span></dt><dt><span class="sect1"><a href="devprinting.html#id2583002">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part IV. Debugging and tracing</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="index.html" title="SAMBA Developers Guide"><link rel="prev" href="pwencrypt.html" title="Chapter 13. LanMan and NT Password Encryption"><link rel="next" href="tracing.html" title="Chapter 14. Tracing samba system calls"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part IV. Debugging and tracing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pwencrypt.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="tracing.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="id350123"></a>Part IV. Debugging and tracing</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="tracing.html">14. Tracing samba system calls</a></span></dt><dt><span class="chapter"><a href="devprinting.html">15. Samba Printing Internals</a></span></dt><dd><dl><dt><span class="sect1"><a href="devprinting.html#id350318">Abstract</a></span></dt><dt><span class="sect1"><a href="devprinting.html#id350330">
 Printing Interface to Various Back ends
-</a></span></dt><dt><span class="sect1"><a href="devprinting.html#id2583081">
+</a></span></dt><dt><span class="sect1"><a href="devprinting.html#id350399">
 Print Queue TDB's
-</a></span></dt><dt><span class="sect1"><a href="devprinting.html#id2583257">
+</a></span></dt><dt><span class="sect1"><a href="devprinting.html#id350533">
 ChangeID and Client Caching of Printer Information
-</a></span></dt><dt><span class="sect1"><a href="devprinting.html#id2583268">
+</a></span></dt><dt><span class="sect1"><a href="devprinting.html#id350542">
 Windows NT/2K Printer Change Notify
 </a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="pwencrypt.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="tracing.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 13. LanMan and NT Password Encryption </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 14. Tracing samba system calls</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pt05.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pt05.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pt05.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1 +1 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part V. Appendices</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="index.html" title="SAMBA Developers Guide"><link rel="prev" href="devprinting.html" title="Chapter 15. Samba Printing Internals"><link rel="next" href="Packaging.html" title="Chapter 16. Notes to packagers"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part V. Appendices</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="devprinting.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="Packaging.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="id2583569"></a>Part V. Appendices</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="Packaging.html">16. Notes to packagers</a></span></dt><dd><dl><dt><span class="sect1"><a href="Packaging.html#id2583594">Versioning</a></span></dt><dt><span class="sect1"><a href="Packaging.html#id2583622">Modules</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="devprinting.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="Packaging.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 15. Samba Printing Internals </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 16. Notes to packagers</td></tr></table></div></body></html>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part V. Appendices</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="index.html" title="SAMBA Developers Guide"><link rel="prev" href="devprinting.html" title="Chapter 15. Samba Printing Internals"><link rel="next" href="Packaging.html" title="Chapter 16. Notes to packagers"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part V. Appendices</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="devprinting.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="Packaging.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="id350771"></a>Part V. Appendices</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="Packaging.html">16. Notes to packagers</a></span></dt><dd><dl><dt><span class="sect1"><a href="Packaging.html#id350794">Versioning</a></span></dt><dt><span class="sect1"><a href="Packaging.html#id350817">Modules</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="devprinting.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="Packaging.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 15. Samba Printing Internals </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 16. Notes to packagers</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pwencrypt.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pwencrypt.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/pwencrypt.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,12 +1,12 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 13. LanMan and NT Password Encryption</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt03.html" title="Part III. Samba Subsystems"><link rel="prev" href="wins.html" title="Chapter 12. Samba WINS Internals"><link rel="next" href="pt04.html" title="Part IV. Debugging and tracing"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 13. LanMan and NT Password Encryption</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="wins.html">Prev</a> </td><th width="60%" align="center">Part III. Samba Subsystems</th><td width="20%" align="right"> <a accesskey="n" href="pt04.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="pwencrypt"></a>Chapter 13. LanMan and NT Password Encryption</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jeremy</span> <span class="surname">Allison</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><br>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 13. LanMan and NT Password Encryption</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt03.html" title="Part III. Samba Subsystems"><link rel="prev" href="wins.html" title="Chapter 12. Samba WINS Internals"><link rel="next" href="pt04.html" title="Part IV. Debugging and tracing"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 13. LanMan and NT Password Encryption</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="wins.html">Prev</a> </td><th width="60%" align="center">Part III. Samba Subsystems</th><td width="20%" align="right"> <a accesskey="n" href="pt04.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="pwencrypt"></a>Chapter 13. LanMan and NT Password Encryption</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jeremy</span> <span class="surname">Allison</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><br>
 				<code class="email">&lt;<a class="email" href="mailto:samba at samba.org">samba at samba.org</a>&gt;</code><br>
-			</p></div></div></div></div><div><p class="pubdate">19 Apr 1999</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="pwencrypt.html#id2582367">Introduction</a></span></dt><dt><span class="sect1"><a href="pwencrypt.html#id2582387">How does it work?</a></span></dt><dt><span class="sect1"><a href="pwencrypt.html#id2582472">The smbpasswd file</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2582367"></a>Introduction</h2></div></div></div><p>With the development of LanManager and Windows NT 
+			</p></div></div></div></div><div><p class="pubdate">19 Apr 1999</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="pwencrypt.html#id349822">Introduction</a></span></dt><dt><span class="sect1"><a href="pwencrypt.html#id349838">How does it work?</a></span></dt><dt><span class="sect1"><a href="pwencrypt.html#id349899">The smbpasswd file</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id349822"></a>Introduction</h2></div></div></div><p>With the development of LanManager and Windows NT 
 	compatible password encryption for Samba, it is now able 
 	to validate user connections in exactly the same way as 
 	a LanManager or Windows NT server.</p><p>This document describes how the SMB password encryption 
 	algorithm works and what issues there are in choosing whether 
 	you want to use it. You should read it carefully, especially 
-	the part about security and the "PROS and CONS" section.</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2582387"></a>How does it work?</h2></div></div></div><p>LanManager encryption is somewhat similar to UNIX 
+	the part about security and the "PROS and CONS" section.</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id349838"></a>How does it work?</h2></div></div></div><p>LanManager encryption is somewhat similar to UNIX 
 	password encryption. The server uses a file containing a 
 	hashed value of a user's password.  This is created by taking 
 	the user's plaintext password, capitalising it, and either 
@@ -43,7 +43,7 @@
 	know the correct password and is denied access.</p><p>Note that the Samba server never knows or stores the cleartext 
 	of the user's password - just the 16 byte hashed values derived from 
 	it. Also note that the cleartext password or 16 byte hashed values 
-	are never transmitted over the network - thus increasing security.</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2582472"></a>The smbpasswd file</h2></div></div></div><a name="SMBPASSWDFILEFORMAT"></a><p>In order for Samba to participate in the above protocol 
+	are never transmitted over the network - thus increasing security.</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id349899"></a>The smbpasswd file</h2></div></div></div><a name="SMBPASSWDFILEFORMAT"></a><p>In order for Samba to participate in the above protocol 
 	it must be able to look up the 16 byte hashed values given a user name.
 	Unfortunately, as the UNIX password value is also a one way hash
 	function (ie. it is impossible to retrieve the cleartext of the user's

Modified: branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/rpc-plugin.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/rpc-plugin.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/rpc-plugin.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,10 +1,10 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 9. RPC Pluggable Modules</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt03.html" title="Part III. Samba Subsystems"><link rel="prev" href="pt03.html" title="Part III. Samba Subsystems"><link rel="next" href="vfs.html" title="Chapter 10. VFS Modules"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 9. RPC Pluggable Modules</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pt03.html">Prev</a> </td><th width="60%" align="center">Part III. Samba Subsystems</th><td width="20%" align="right"> <a accesskey="n" href="vfs.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="rpc-plugin"></a>Chapter 9. RPC Pluggable Modules</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Anthony</span> <span class="surname">Liguori</span></h3><div class="affiliation"><span class="orgname">IBM<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:aliguor at us.ibm.com">aliguor at us.ibm.com</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">January 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="rpc-plugin.html#id2580396">About</a></span></dt><dt><span class="sect1"><a href="rpc-plugin.html#id2580411">General Overview</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2580396"></a>About</h2></div></div></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 9. RPC Pluggable Modules</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt03.html" title="Part III. Samba Subsystems"><link rel="prev" href="pt03.html" title="Part III. Samba Subsystems"><link rel="next" href="vfs.html" title="Chapter 10. VFS Modules"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 9. RPC Pluggable Modules</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pt03.html">Prev</a> </td><th width="60%" align="center">Part III. Samba Subsystems</th><td width="20%" align="right"> <a accesskey="n" href="vfs.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="rpc-plugin"></a>Chapter 9. RPC Pluggable Modules</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Anthony</span> <span class="surname">Liguori</span></h3><div class="affiliation"><span class="orgname">IBM<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:aliguor at us.ibm.com">aliguor at us.ibm.com</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">January 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="rpc-plugin.html#id348263">About</a></span></dt><dt><span class="sect1"><a href="rpc-plugin.html#id348276">General Overview</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id348263"></a>About</h2></div></div></div><p>
 This document describes how to make use the new RPC Pluggable Modules features
 of Samba 3.0.  This architecture was added to increase the maintainability of
 Samba allowing RPC Pipes to be worked on separately from the main CVS branch.
 The RPM architecture will also allow third-party vendors to add functionality
 to Samba through plug-ins.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2580411"></a>General Overview</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id348276"></a>General Overview</h2></div></div></div><p>
 When an RPC call is sent to smbd, smbd tries to load a shared library by the
 name <code class="filename">librpc_&lt;pipename&gt;.so</code> to handle the call if
 it doesn't know how to handle the call internally.  For instance, LSA calls

Modified: branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/tracing.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/tracing.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/tracing.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 14. Tracing samba system calls</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt04.html" title="Part IV. Debugging and tracing"><link rel="prev" href="pt04.html" title="Part IV. Debugging and tracing"><link rel="next" href="devprinting.html" title="Chapter 15. Samba Printing Internals"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 14. Tracing samba system calls</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pt04.html">Prev</a> </td><th width="60%" align="center">Part IV. Debugging and tracing</th><td width="20%" align="right"> <a accesskey="n" href="devprinting.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="tracing"></a>Chapter 14. Tracing samba system calls</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Andrew</span> <span class="surname">Tridgell</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span></div></div></div></div></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 14. Tracing samba system calls</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt04.html" title="Part IV. Debugging and tracing"><link rel="prev" href="pt04.html" title="Part IV. Debugging and tracing"><link rel="next" href="devprinting.html" title="Chapter 15. Samba Printing Internals"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 14. Tracing samba system calls</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pt04.html">Prev</a> </td><th width="60%" align="center">Part IV. Debugging and tracing</th><td width="20%" align="right"> <a accesskey="n" href="devprinting.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="tracing"></a>Chapter 14. Tracing samba system calls</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Andrew</span> <span class="surname">Tridgell</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span></div></div></div></div></div><p>
 This file describes how to do a system call trace on Samba to work out
 what its doing wrong. This is not for the faint of heart, but if you
 are reading this then you are probably desperate.

Modified: branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/unix-smb.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/unix-smb.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/unix-smb.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 1. NetBIOS in a Unix World</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt01.html" title="Part I. The protocol"><link rel="prev" href="pt01.html" title="Part I. The protocol"><link rel="next" href="ntdomain.html" title="Chapter 2. NT Domain RPC's"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 1. NetBIOS in a Unix World</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pt01.html">Prev</a> </td><th width="60%" align="center">Part I. The protocol</th><td width="20%" align="right"> <a accesskey="n" href="ntdomain.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="unix-smb"></a>Chapter 1. NetBIOS in a Unix World</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Andrew</span> <span class="surname">Tridgell</span></h3></div></div><div><p class="pubdate">April 1995</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="unix-smb.html#id2524015">Introduction</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id2524036">Usernames</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id2524368">File Ownership</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id2523694">Passwords</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id2523732">Locking</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id2523784">Deny Modes</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id2523816">Trapdoor UIDs</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id2571061">Port numbers</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id2571106">Protocol Complexity</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2524015"></a>Introduction</h2></div></div></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 1. NetBIOS in a Unix World</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt01.html" title="Part I. The protocol"><link rel="prev" href="pt01.html" title="Part I. The protocol"><link rel="next" href="ntdomain.html" title="Chapter 2. NT Domain RPC's"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 1. NetBIOS in a Unix World</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pt01.html">Prev</a> </td><th width="60%" align="center">Part I. The protocol</th><td width="20%" align="right"> <a accesskey="n" href="ntdomain.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="unix-smb"></a>Chapter 1. NetBIOS in a Unix World</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Andrew</span> <span class="surname">Tridgell</span></h3></div></div><div><p class="pubdate">April 1995</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="unix-smb.html#id339707">Introduction</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id339724">Usernames</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id297652">File Ownership</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id297676">Passwords</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id297704">Locking</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id339928">Deny Modes</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id339950">Trapdoor UIDs</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id339967">Port numbers</a></span></dt><dt><span class="sect1"><a href="unix-smb.html#id339998">Protocol Complexity</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id339707"></a>Introduction</h2></div></div></div><p>
 This is a short document that describes some of the issues that
 confront a SMB implementation on unix, and how Samba copes with
 them. They may help people who are looking at unix&lt;-&gt;PC
@@ -6,7 +6,7 @@
 </p><p>
 It was written to help out a person who was writing a paper on unix to
 PC connectivity.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2524036"></a>Usernames</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id339724"></a>Usernames</h2></div></div></div><p>
 The SMB protocol has only a loose username concept. Early SMB
 protocols (such as CORE and COREPLUS) have no username concept at
 all. Even in later protocols clients often attempt operations
@@ -43,7 +43,7 @@
 service%user syntax, the saving of session setup usernames for later
 validation and the derivation of the username from the service name
 (either directly or via the user= option).
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2524368"></a>File Ownership</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id297652"></a>File Ownership</h2></div></div></div><p>
 The commonly used SMB protocols have no way of saying "you can't do
 that because you don't own the file". They have, in fact, no concept
 of file ownership at all.
@@ -61,7 +61,7 @@
 There are several possible solutions to this problem, including
 username mapping, and forcing a specific username for particular
 shares.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2523694"></a>Passwords</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id297676"></a>Passwords</h2></div></div></div><p>
 Many SMB clients uppercase passwords before sending them. I have no
 idea why they do this. Interestingly WfWg uppercases the password only
 if the server is running a protocol greater than COREPLUS, so
@@ -83,7 +83,7 @@
 smbpasswd file containing these password hashes is only readable
 by the root user. See the documentation ENCRYPTION.txt for more
 details.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2523732"></a>Locking</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id297704"></a>Locking</h2></div></div></div><p>
 Since samba 2.2, samba supports other types of locking as well. This 
 section is outdated.
 </p><p>
@@ -114,7 +114,7 @@
 the same file, at which time the client will say if it is willing to
 give up its lock. Unix has no simple way of implementing
 opportunistic locking, and currently Samba has no support for it.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2523784"></a>Deny Modes</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id339928"></a>Deny Modes</h2></div></div></div><p>
 When a SMB client opens a file it asks for a particular "deny mode" to
 be placed on the file. These modes (DENY_NONE, DENY_READ, DENY_WRITE,
 DENY_ALL, DENY_FCB and DENY_DOS) specify what actions should be
@@ -128,7 +128,7 @@
 is clumsy and consumes processing and file resources,
 the shared memory implementation is vastly prefered and is turned on
 by default for those systems that support it.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2523816"></a>Trapdoor UIDs</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id339950"></a>Trapdoor UIDs</h2></div></div></div><p>
 A SMB session can run with several uids on the one socket. This
 happens when a user connects to two shares with different
 usernames. To cope with this the unix server needs to switch uids
@@ -138,7 +138,7 @@
 </p><p>
 Note that you can also get the "trapdoor uid" message for other
 reasons. Please see the FAQ for details.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2571061"></a>Port numbers</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id339967"></a>Port numbers</h2></div></div></div><p>
 There is a convention that clients on sockets use high "unprivileged"
 port numbers (&gt;1000) and connect to servers on low "privilegedg" port
 numbers. This is enforced in Unix as non-root users can't open a
@@ -161,7 +161,7 @@
 back, but it goes to port 137 which the unix user can't listen
 on. Interestingly WinNT3.1 got this right - it sends node status
 responses back to the source port in the request.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2571106"></a>Protocol Complexity</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id339998"></a>Protocol Complexity</h2></div></div></div><p>
 There are many "protocol levels" in the SMB protocol. It seems that
 each time new functionality was added to a Microsoft operating system,
 they added the equivalent functions in a new protocol level of the SMB

Modified: branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/vfs.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/vfs.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/vfs.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 10. VFS Modules</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt03.html" title="Part III. Samba Subsystems"><link rel="prev" href="rpc-plugin.html" title="Chapter 9. RPC Pluggable Modules"><link rel="next" href="parsing.html" title="Chapter 11. The smb.conf file"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 10. VFS Modules</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="rpc-plugin.html">Prev</a> </td><th width="60%" align="center">Part III. Samba Subsystems</th><td width="20%" align="right"> <a accesskey="n" href="parsing.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="vfs"></a>Chapter 10. VFS Modules</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Alexander</span> <span class="surname">Bokovoy</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:ab at samba.org">ab at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Stefan</span> <span class="surname">Metzmacher</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:metze at samba.org">metze at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate"> 27 May 2003 </p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="vfs.html#id2580583">The Samba (Posix) VFS layer</a></span></dt><dd><dl><dt><span class="sect2"><a href="vfs.html#id2580625">The general interface</a></span></dt><dt><span class="sect2"><a href="vfs.html#id2580957">Possible VFS operation layers</a></span></dt></dl></dd><dt><span class="sect1"><a href="vfs.html#id2581018">The Interaction between the Samba VFS subsystem and the modules</a></span></dt><dd><dl><dt><span class="sect2"><a href="vfs.html#id2581024">Initialization and registration</a></span></dt><dt><span class="sect2"><a href="vfs.html#id2581175">How the Modules handle per connection data</a></span></dt></dl></dd><dt><span class="sect1"><a href="vfs.html#id2581379">Upgrading to the New VFS Interface</a></span></dt><dd><dl><dt><span class="sect2"><a href="vfs.html#id2581385">Upgrading from 2.2.* and 3.0alpha modules</a></span></dt></dl></dd><dt><span class="sect1"><a href="vfs.html#id2581803">Some Notes</a></span></dt><dd><dl><dt><span class="sect2"><a href="vfs.html#id2581809">Implement TRANSPARENT functions</a></span></dt><dt><span class="sect2"><a href="vfs.html#id2581828">Implement OPAQUE functions</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2580583"></a>The Samba (Posix) VFS layer</h2></div></div></div><p>While most of Samba deployments are done using POSIX-compatible
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 10. VFS Modules</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt03.html" title="Part III. Samba Subsystems"><link rel="prev" href="rpc-plugin.html" title="Chapter 9. RPC Pluggable Modules"><link rel="next" href="parsing.html" title="Chapter 11. The smb.conf file"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 10. VFS Modules</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="rpc-plugin.html">Prev</a> </td><th width="60%" align="center">Part III. Samba Subsystems</th><td width="20%" align="right"> <a accesskey="n" href="parsing.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="vfs"></a>Chapter 10. VFS Modules</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Alexander</span> <span class="surname">Bokovoy</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:ab at samba.org">ab at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Stefan</span> <span class="surname">Metzmacher</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:metze at samba.org">metze at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate"> 27 May 2003 </p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="vfs.html#id348426">The Samba (Posix) VFS layer</a></span></dt><dd><dl><dt><span class="sect2"><a href="vfs.html#id348454">The general interface</a></span></dt><dt><span class="sect2"><a href="vfs.html#id348708">Possible VFS operation layers</a></span></dt></dl></dd><dt><span class="sect1"><a href="vfs.html#id348752">The Interaction between the Samba VFS subsystem and the modules</a></span></dt><dd><dl><dt><span class="sect2"><a href="vfs.html#id348758">Initialization and registration</a></span></dt><dt><span class="sect2"><a href="vfs.html#id348885">How the Modules handle per connection data</a></span></dt></dl></dd><dt><span class="sect1"><a href="vfs.html#id349039">Upgrading to the New VFS Interface</a></span></dt><dd><dl><dt><span class="sect2"><a href="vfs.html#id349044">Upgrading from 2.2.* and 3.0aplha modules</a></span></dt></dl></dd><dt><span class="sect1"><a href="vfs.html#id349344">Some Notes</a></span></dt><dd><dl><dt><span class="sect2"><a href="vfs.html#id349350">Implement TRANSPARENT functions</a></span></dt><dt><span class="sect2"><a href="vfs.html#id349366">Implement OPAQUE functions</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id348426"></a>The Samba (Posix) VFS layer</h2></div></div></div><p>While most of Samba deployments are done using POSIX-compatible
 operating systems, there is clearly more to a file system than what is
 required by POSIX when it comes to adopting semantics of NT file
 system. Since Samba 2.2 all file-system related operations go through
@@ -24,7 +24,7 @@
 VFS modules could be loaded at the same time and it is even possible
 to load several instances of the same VFS module with different
 parameters.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2580625"></a>The general interface</h3></div></div></div><p>A VFS module has three major components:
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id348454"></a>The general interface</h3></div></div></div><p>A VFS module has three major components:
 </p><div class="itemizedlist"><ul type="disc"><li><span class="emphasis"><em>An initialization function</em></span> that is
 called during the module load to register implemented
 operations.</li><li><span class="emphasis"><em>An operations table</em></span> representing a
@@ -187,7 +187,7 @@
 	 (tofd), (fsp), (fromfd), (header), (offset), (count)))
 
 ...
-</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2580957"></a>Possible VFS operation layers</h3></div></div></div><p>
+</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id348708"></a>Possible VFS operation layers</h3></div></div></div><p>
 These values are used by the VFS subsystem when building the conn-&gt;vfs 
 and conn-&gt;vfs_opaque structs for a connection with multiple VFS modules. 
 Internally, Samba differentiates only opaque and transparent layers at this process.
@@ -216,7 +216,7 @@
 	SMB_VFS_LAYER_SCANNER		/* - Checks data and possibly initiates additional */
 					/*   file activity like logging to files _inside_ samba VFS */
 } vfs_op_layer;
-</pre></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2581018"></a>The Interaction between the Samba VFS subsystem and the modules</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2581024"></a>Initialization and registration</h3></div></div></div><p>
+</pre></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id348752"></a>The Interaction between the Samba VFS subsystem and the modules</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id348758"></a>Initialization and registration</h3></div></div></div><p>
 As each Samba module a VFS module should have a 
 </p><pre class="programlisting">NTSTATUS vfs_example_init(void);</pre><p> function if it's staticly linked to samba or
 </p><pre class="programlisting">NTSTATUS init_module(void);</pre><p> function if it's a shared module.
@@ -256,7 +256,7 @@
 {
 	return smb_register_vfs(SMB_VFS_INTERFACE_VERSION, "example", example_op_tuples);
 }
-</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2581175"></a>How the Modules handle per connection data</h3></div></div></div><p>Each VFS function has as first parameter a pointer to the modules vfs_handle_struct.
+</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id348885"></a>How the Modules handle per connection data</h3></div></div></div><p>Each VFS function has as first parameter a pointer to the modules vfs_handle_struct.
 </p><pre class="programlisting">
 typedef struct vfs_handle_struct {
 	struct vfs_handle_struct  *next, *prev;
@@ -357,7 +357,7 @@
 	(handle)-&gt;vfs_next.handles.sendfile,\
 	 (tofd), (fsp), (fromfd), (header), (offset), (count)))
 ...
-</pre></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2581379"></a>Upgrading to the New VFS Interface</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2581385"></a>Upgrading from 2.2.* and 3.0alpha modules</h3></div></div></div><div class="orderedlist"><ol type="1"><li><p>
+</pre></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id349039"></a>Upgrading to the New VFS Interface</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id349044"></a>Upgrading from 2.2.* and 3.0aplha modules</h3></div></div></div><div class="orderedlist"><ol type="1"><li><p>
 Add "vfs_handle_struct *handle, " as first parameter to all vfs operation functions.
 e.g. example_connect(connection_struct *conn, const char *service, const char *user);
 -&gt;   example_connect(vfs_handle_struct *handle, connection_struct *conn, const char *service, const char *user);
@@ -605,7 +605,7 @@
 }
 </pre><p>
 </p></li><li><p>
-To make it easy to build 3rd party modules it would be useful to provide
+To make it easy to build 3rd party modules it would be usefull to provide
 configure.in, (configure), install.sh and Makefile.in with the module.
 (Take a look at the example in <code class="filename">examples/VFS</code>.)
 </p><p>
@@ -620,7 +620,7 @@
 </p></li><li><p>
 Compiling &amp; Testing...
 </p><table class="simplelist" border="0" summary="Simple list"><tr><td><strong class="userinput"><code>./configure <code class="option">--enable-developer</code></code></strong> ...</td></tr><tr><td><strong class="userinput"><code>make</code></strong></td></tr><tr><td>Try to fix all compiler warnings</td></tr><tr><td><strong class="userinput"><code>make</code></strong></td></tr><tr><td>Testing, Testing, Testing ...</td></tr></table><p>
-</p></li></ol></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2581803"></a>Some Notes</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2581809"></a>Implement TRANSPARENT functions</h3></div></div></div><p>
+</p></li></ol></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id349344"></a>Some Notes</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id349350"></a>Implement TRANSPARENT functions</h3></div></div></div><p>
 Avoid writing functions like this:
 
 </p><pre class="programlisting">
@@ -631,7 +631,7 @@
 </pre><p>
 
 Overload only the functions you really need to!
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2581828"></a>Implement OPAQUE functions</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id349366"></a>Implement OPAQUE functions</h3></div></div></div><p>
 If you want to just implement a better version of a 
 default samba opaque function
 (e.g. like a disk_free() function for a special filesystem) 

Modified: branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/wins.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/wins.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-Developers-Guide/wins.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 12. Samba WINS Internals</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt03.html" title="Part III. Samba Subsystems"><link rel="prev" href="parsing.html" title="Chapter 11. The smb.conf file"><link rel="next" href="pwencrypt.html" title="Chapter 13. LanMan and NT Password Encryption"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 12. Samba WINS Internals</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parsing.html">Prev</a> </td><th width="60%" align="center">Part III. Samba Subsystems</th><td width="20%" align="right"> <a accesskey="n" href="pwencrypt.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="wins"></a>Chapter 12. Samba WINS Internals</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Gerald</span> <span class="surname">Carter</span></h3></div></div><div><p class="pubdate">October 2002</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="wins.html#id2582244">WINS Failover</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2582244"></a>WINS Failover</h2></div></div></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 12. Samba WINS Internals</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="SAMBA Developers Guide"><link rel="up" href="pt03.html" title="Part III. Samba Subsystems"><link rel="prev" href="parsing.html" title="Chapter 11. The smb.conf file"><link rel="next" href="pwencrypt.html" title="Chapter 13. LanMan and NT Password Encryption"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 12. Samba WINS Internals</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parsing.html">Prev</a> </td><th width="60%" align="center">Part III. Samba Subsystems</th><td width="20%" align="right"> <a accesskey="n" href="pwencrypt.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="wins"></a>Chapter 12. Samba WINS Internals</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Gerald</span> <span class="surname">Carter</span></h3></div></div><div><p class="pubdate">October 2002</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="wins.html#id349722">WINS Failover</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id349722"></a>WINS Failover</h2></div></div></div><p>
 The current Samba codebase possesses the capability to use groups of WINS
 servers that share a common namespace for NetBIOS name registration and 
 resolution.  The formal parameter syntax is

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/AccessControls.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/AccessControls.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/AccessControls.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,59 +1,59 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 16. File, Directory, and Share Access Controls</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="rights.html" title="Chapter 15. User Rights and Privileges"><link rel="next" href="locking.html" title="Chapter 17. File and Record Locking"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 16. File, Directory, and Share Access Controls</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="rights.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="locking.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="AccessControls"></a>Chapter 16. File, Directory, and Share Access Controls</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jeremy</span> <span class="surname">Allison</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jra at samba.org">jra at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><span class="contrib">drawing</span> <div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">May 10, 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="AccessControls.html#id2632624">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="AccessControls.html#id2632819">File System Access Controls</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id2632834">MS Windows NTFS Comparison with UNIX File Systems</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2633169">Managing Directories</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2633292">File and Directory Access Control</a></span></dt></dl></dd><dt><span class="sect1"><a href="AccessControls.html#id2633958">Share Definition Access Controls</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id2633991">User- and Group-Based Controls</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2634357">File and Directory Permissions-Based Controls</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2634693">Miscellaneous Controls</a></span></dt></dl></dd><dt><span class="sect1"><a href="AccessControls.html#id2635030">Access Controls on Shares</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id2635178">Share Permissions Management</a></span></dt></dl></dd><dt><span class="sect1"><a href="AccessControls.html#id2635531">MS Windows Access Control Lists and UNIX Interoperability</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id2635537">Managing UNIX Permissions Using NT Security Dialogs</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2635584">Viewing File Security on a Samba Share</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2635654">Viewing File Ownership</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2635798">Viewing File or Directory Permissions</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2636013">Modifying File or Directory Permissions</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2636170">Interaction with the Standard Samba &#8220;<span class="quote">create mask</span>&#8221; Parameters</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2636539">Interaction with the Standard Samba File Attribute Mapping</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2636612">Windows NT/200X ACLs and POSIX ACLs Limitations</a></span></dt></dl></dd><dt><span class="sect1"><a href="AccessControls.html#id2637030">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id2637042">Users Cannot Write to a Public Share</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2637364">File Operations Done as <span class="emphasis"><em>root</em></span> with <span class="emphasis"><em>force user</em></span> Set</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2637410">MS Word with Samba Changes Owner of File</a></span></dt></dl></dd></dl></div><p>
-<a class="indexterm" name="id2632454"></a>
-<a class="indexterm" name="id2632461"></a>
-<a class="indexterm" name="id2632468"></a>
-<a class="indexterm" name="id2632475"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 16. File, Directory, and Share Access Controls</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="rights.html" title="Chapter 15. User Rights and Privileges"><link rel="next" href="locking.html" title="Chapter 17. File and Record Locking"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 16. File, Directory, and Share Access Controls</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="rights.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="locking.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="AccessControls"></a>Chapter 16. File, Directory, and Share Access Controls</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jeremy</span> <span class="surname">Allison</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jra at samba.org">jra at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><span class="contrib">drawing</span> <div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">May 10, 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="AccessControls.html#id395980">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="AccessControls.html#id396152">File System Access Controls</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id396164">MS Windows NTFS Comparison with UNIX File Systems</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id396461">Managing Directories</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id396582">File and Directory Access Control</a></span></dt></dl></dd><dt><span class="sect1"><a href="AccessControls.html#id397181">Share Definition Access Controls</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id397212">User- and Group-Based Controls</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id397552">File and Directory Permissions-Based Controls</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id397861">Miscellaneous Controls</a></span></dt></dl></dd><dt><span class="sect1"><a href="AccessControls.html#id398176">Access Controls on Shares</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id398312">Share Permissions Management</a></span></dt></dl></dd><dt><span class="sect1"><a href="AccessControls.html#id398637">MS Windows Access Control Lists and UNIX Interoperability</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id398643">Managing UNIX Permissions Using NT Security Dialogs</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id398682">Viewing File Security on a Samba Share</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id398747">Viewing File Ownership</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id398876">Viewing File or Directory Permissions</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id399067">Modifying File or Directory Permissions</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id399207">Interaction with the Standard Samba &#8220;<span class="quote">create mask</span>&#8221; Parameters</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id399542">Interaction with the Standard Samba File Attribute Mapping</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id399606">Windows NT/200X ACLs and POSIX ACLs Limitations</a></span></dt></dl></dd><dt><span class="sect1"><a href="AccessControls.html#id399970">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id399980">Users Cannot Write to a Public Share</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id400287">File Operations Done as <span class="emphasis"><em>root</em></span> with <span class="emphasis"><em>force user</em></span> Set</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id400330">MS Word with Samba Changes Owner of File</a></span></dt></dl></dd></dl></div><p>
+<a class="indexterm" name="id395828"></a>
+<a class="indexterm" name="id395835"></a>
+<a class="indexterm" name="id395842"></a>
+<a class="indexterm" name="id395849"></a>
 Advanced MS Windows users are frequently perplexed when file, directory, and share manipulation of
 resources shared via Samba do not behave in the manner they might expect. MS Windows network
 administrators are often confused regarding network access controls and how to
 provide users with the access they need while protecting resources from unauthorized access.
 </p><p>
-<a class="indexterm" name="id2632491"></a>
-<a class="indexterm" name="id2632498"></a>
+<a class="indexterm" name="id395862"></a>
+<a class="indexterm" name="id395869"></a>
 Many UNIX administrators are unfamiliar with the MS Windows environment and in particular
 have difficulty in visualizing what the MS Windows user wishes to achieve in attempts to set file
 and directory access permissions. 
 </p><p>
-<a class="indexterm" name="id2632512"></a>
-<a class="indexterm" name="id2632519"></a>
-<a class="indexterm" name="id2632526"></a>
-<a class="indexterm" name="id2632533"></a>
+<a class="indexterm" name="id395881"></a>
+<a class="indexterm" name="id395888"></a>
+<a class="indexterm" name="id395895"></a>
+<a class="indexterm" name="id395901"></a>
 The problem lies in the differences in how file and directory permissions and controls work
 between the two environments. This difference is one that Samba cannot completely hide, even
 though it does try to bridge the chasm to a degree.
 </p><p>
-<a class="indexterm" name="id2632546"></a>
-<a class="indexterm" name="id2632553"></a>
-<a class="indexterm" name="id2632562"></a>
-<a class="indexterm" name="id2632569"></a>
+<a class="indexterm" name="id395912"></a>
+<a class="indexterm" name="id395919"></a>
+<a class="indexterm" name="id395928"></a>
+<a class="indexterm" name="id395935"></a>
 POSIX Access Control List technology has been available (along with extended attributes)
 for UNIX for many years, yet there is little evidence today of any significant use. This
 explains to some extent the slow adoption of ACLs into commercial Linux products. MS Windows
 administrators are astounded at this, given that ACLs were a foundational capability of the now
 decade-old MS Windows NT operating system.
 </p><p>
-<a class="indexterm" name="id2632586"></a>
+<a class="indexterm" name="id395949"></a>
 The purpose of this chapter is to present each of the points of control that are possible with
 Samba-3 in the hope that this will help the network administrator to find the optimum method
 for delivering the best environment for MS Windows desktop users.
 </p><p>
-<a class="indexterm" name="id2632601"></a>
-<a class="indexterm" name="id2632608"></a>
+<a class="indexterm" name="id395961"></a>
+<a class="indexterm" name="id395968"></a>
 This is an opportune point to mention that Samba was created to provide a means of interoperability
 and interchange of data between differing operating environments. Samba has no intent to change
 UNIX/Linux into a platform like MS Windows. Instead the purpose was and is to provide a sufficient
 level of exchange of data between the two environments. What is available today extends well
 beyond early plans and expectations, yet the gap continues to shrink.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2632624"></a>Features and Benefits</h2></div></div></div><p>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id395980"></a>Features and Benefits</h2></div></div></div><p>
 	Samba offers much flexibility in file system access management. These are the key access control
 	facilities present in Samba today:
 	</p><div class="itemizedlist"><p class="title"><b>Samba Access Control Facilities</b></p><ul type="disc"><li><p>
-		<a class="indexterm" name="id2632644"></a>
+		<a class="indexterm" name="id395999"></a>
 		<span class="emphasis"><em>UNIX File and Directory Permissions</em></span>
 		</p><p>
-<a class="indexterm" name="id2632661"></a>
-<a class="indexterm" name="id2632668"></a>
-<a class="indexterm" name="id2632675"></a>
+<a class="indexterm" name="id396015"></a>
+<a class="indexterm" name="id396022"></a>
+<a class="indexterm" name="id396028"></a>
 			Samba honors and implements UNIX file system access controls. Users
 			who access a Samba server will do so as a particular MS Windows user.
 			This information is passed to the Samba server as part of the logon or
@@ -64,7 +64,7 @@
 			</p></li><li><p>
 		<span class="emphasis"><em>Samba Share Definitions</em></span>
 		</p><p>
-<a class="indexterm" name="id2632712"></a>
+<a class="indexterm" name="id396056"></a>
 			In configuring share settings and controls in the <code class="filename">smb.conf</code> file,
 			the network administrator can exercise overrides to native file
 			system permissions and behaviors. This can be handy and convenient
@@ -73,20 +73,20 @@
 			The basic options and techniques are described herein.
 			</p></li><li><p>
 		<span class="emphasis"><em>Samba Share ACLs</em></span>
-		<a class="indexterm" name="id2632744"></a>
+		<a class="indexterm" name="id396084"></a>
 		</p><p>
-<a class="indexterm" name="id2632756"></a>
+<a class="indexterm" name="id396097"></a>
 			Just as it is possible in MS Windows NT to set ACLs on shares
 			themselves, so it is possible to do in Samba.
 			Few people make use of this facility, yet it remains one of the
 			easiest ways to affect access controls (restrictions) and can often
 			do so with minimum invasiveness compared with other methods.
 			</p></li><li><p>
-				<a class="indexterm" name="id2632774"></a>
-				<a class="indexterm" name="id2632783"></a>
+				<a class="indexterm" name="id396112"></a>
+				<a class="indexterm" name="id396121"></a>
 		<span class="emphasis"><em>MS Windows ACLs through UNIX POSIX ACLs</em></span>
 		</p><p>
-<a class="indexterm" name="id2632799"></a>
+<a class="indexterm" name="id396137"></a>
 			The use of POSIX ACLs on UNIX/Linux is possible only if the underlying
 			operating system supports them. If not, then this option will not be
 			available to you. Current UNIX technology platforms have native support
@@ -94,16 +94,16 @@
 			this support. Sadly, few Linux platforms ship today with native ACLs and
 			extended attributes enabled. This chapter has pertinent information
 			for users of platforms that support them.
-			</p></li></ul></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2632819"></a>File System Access Controls</h2></div></div></div><p>
+			</p></li></ul></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id396152"></a>File System Access Controls</h2></div></div></div><p>
 Perhaps the most important recognition to be made is the simple fact that MS Windows NT4/200x/XP
 implement a totally divergent file system technology from what is provided in the UNIX operating system
 environment. First we consider what the most significant differences are, then we look
 at how Samba helps to bridge the differences.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2632834"></a>MS Windows NTFS Comparison with UNIX File Systems</h3></div></div></div><p>
-	<a class="indexterm" name="id2632842"></a>
-	<a class="indexterm" name="id2632849"></a>
-	<a class="indexterm" name="id2632856"></a>
-	<a class="indexterm" name="id2632865"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id396164"></a>MS Windows NTFS Comparison with UNIX File Systems</h3></div></div></div><p>
+	<a class="indexterm" name="id396172"></a>
+	<a class="indexterm" name="id396179"></a>
+	<a class="indexterm" name="id396186"></a>
+	<a class="indexterm" name="id396195"></a>
 	Samba operates on top of the UNIX file system. This means it is subject to UNIX file system conventions
 	and permissions. It also means that if the MS Windows networking environment requires file system
 	behavior, that differs from UNIX file system behavior then somehow Samba is responsible for emulating
@@ -114,7 +114,7 @@
 	but for the greater part we stay within the bounds of default behavior. Those wishing to explore
 	the depths of control ability should review the <code class="filename">smb.conf</code> man page.
 	</p><p>The following compares file system features for UNIX with those of MS Windows NT/200x:
-	<a class="indexterm" name="id2632900"></a>
+	<a class="indexterm" name="id396224"></a>
 	
 	</p><div class="variablelist"><dl><dt><span class="term">Name Space</span></dt><dd><p>
 		MS Windows NT4/200x/XP file names may be up to 254 characters long, and UNIX file names
@@ -123,8 +123,8 @@
 		</p><p>
 		What MS Windows calls a folder, UNIX calls a directory.
 		</p></dd><dt><span class="term">Case Sensitivity</span></dt><dd><p>
-		<a class="indexterm" name="id2632945"></a>
-		<a class="indexterm" name="id2632952"></a>
+		<a class="indexterm" name="id396265"></a>
+		<a class="indexterm" name="id396272"></a>
 		MS Windows file names are generally uppercase if made up of 8.3 (8-character file name
 		and 3 character extension. File names that are longer than 8.3 are case preserving and case
 		insensitive.
@@ -151,26 +151,26 @@
 		event that the UNIX directory contains multiple files that would match a case insensitive
 		file listing.
 		</p></dd><dt><span class="term">Directory Separators</span></dt><dd><p>
-		<a class="indexterm" name="id2633016"></a>
+		<a class="indexterm" name="id396325"></a>
 		MS Windows and DOS use the backslash <code class="constant">\</code> as a directory delimiter, and UNIX uses
 		the forward-slash <code class="constant">/</code> as its directory delimiter. This is handled transparently by Samba.
 		</p></dd><dt><span class="term">Drive Identification</span></dt><dd><p>
-		<a class="indexterm" name="id2633044"></a>
+		<a class="indexterm" name="id396350"></a>
 		MS Windows products support a notion of drive letters, like <code class="literal">C:</code>, to represent
 		disk partitions. UNIX has no concept of separate identifiers for file partitions; each
 		such file system is mounted to become part of the overall directory tree.
 		The UNIX directory tree begins at <code class="constant">/</code> just as the root of a DOS drive is specified as
 		<code class="constant">C:\</code>.
 		</p></dd><dt><span class="term">File Naming Conventions</span></dt><dd><p>
-		<a class="indexterm" name="id2633080"></a>
+		<a class="indexterm" name="id396383"></a>
 		MS Windows generally never experiences file names that begin with a dot (<code class="constant">.</code>), while in UNIX these
 		are commonly found in a user's home directory. Files that begin with a dot (<code class="constant">.</code>) are typically
 		startup files for various UNIX applications, or they may be files that contain
 		startup configuration data.
 		</p></dd><dt><span class="term">Links and Short-Cuts</span></dt><dd><p>
-		<a class="indexterm" name="id2633110"></a>
-		<a class="indexterm" name="id2633119"></a>
-		<a class="indexterm" name="id2633129"></a>
+		<a class="indexterm" name="id396410"></a>
+		<a class="indexterm" name="id396420"></a>
+		<a class="indexterm" name="id396429"></a>
 		MS Windows make use of <span class="emphasis"><em>links and shortcuts</em></span> that are actually special types of files that will
 		redirect an attempt to execute the file to the real location of the file. UNIX knows of file and directory
 		links, but they are entirely different from what MS Windows users are used to.
@@ -183,17 +183,17 @@
 	There are many other subtle differences that may cause the MS Windows administrator some temporary discomfort
 	in the process of becoming familiar with UNIX/Linux. These are best left for a text that is dedicated to the
 	purpose of UNIX/Linux training and education.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2633169"></a>Managing Directories</h3></div></div></div><p>
-<a class="indexterm" name="id2633177"></a>
-<a class="indexterm" name="id2633184"></a>
-<a class="indexterm" name="id2633191"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id396461"></a>Managing Directories</h3></div></div></div><p>
+<a class="indexterm" name="id396469"></a>
+<a class="indexterm" name="id396476"></a>
+<a class="indexterm" name="id396483"></a>
 	There are three basic operations for managing directories: <code class="literal">create</code>, <code class="literal">delete</code>,
 	<code class="literal">rename</code>. <a class="link" href="AccessControls.html#TOSH-Accesstbl" title="Table 16.1. Managing Directories with UNIX and Windows">Managing Directories with UNIX and
 	Windows</a> compares the commands in Windows and UNIX that implement these operations.
-	</p><div class="table"><a name="TOSH-Accesstbl"></a><p class="title"><b>Table 16.1. Managing Directories with UNIX and Windows</b></p><div class="table-contents"><table summary="Managing Directories with UNIX and Windows" border="1"><colgroup><col><col><col></colgroup><thead><tr><th align="center">Action</th><th align="center">MS Windows Command</th><th align="center">UNIX Command</th></tr></thead><tbody><tr><td align="center">create</td><td align="center">md folder</td><td align="center">mkdir folder</td></tr><tr><td align="center">delete</td><td align="center">rd folder</td><td align="center">rmdir folder</td></tr><tr><td align="center">rename</td><td align="center">rename oldname newname</td><td align="center">mv oldname newname</td></tr></tbody></table></div></div><br class="table-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2633292"></a>File and Directory Access Control</h3></div></div></div><p>
-	<a class="indexterm" name="id2633300"></a>
-<a class="indexterm" name="id2633310"></a>
-<a class="indexterm" name="id2633316"></a>
+	</p><div class="table"><a name="TOSH-Accesstbl"></a><p class="title"><b>Table 16.1. Managing Directories with UNIX and Windows</b></p><div class="table-contents"><table summary="Managing Directories with UNIX and Windows" border="1"><colgroup><col><col><col></colgroup><thead><tr><th align="center">Action</th><th align="center">MS Windows Command</th><th align="center">UNIX Command</th></tr></thead><tbody><tr><td align="center">create</td><td align="center">md folder</td><td align="center">mkdir folder</td></tr><tr><td align="center">delete</td><td align="center">rd folder</td><td align="center">rmdir folder</td></tr><tr><td align="center">rename</td><td align="center">rename oldname newname</td><td align="center">mv oldname newname</td></tr></tbody></table></div></div><br class="table-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id396582"></a>File and Directory Access Control</h3></div></div></div><p>
+	<a class="indexterm" name="id396590"></a>
+<a class="indexterm" name="id396599"></a>
+<a class="indexterm" name="id396606"></a>
 	The network administrator is strongly advised to read basic UNIX training manuals and reference materials
 	regarding file and directory permissions maintenance. Much can be achieved with the basic UNIX permissions
 	without having to resort to more complex facilities like POSIX ACLs or extended attributes (EAs).
@@ -226,47 +226,47 @@
 	</p><div class="figure"><a name="access1"></a><p class="title"><b>Figure 16.1. Overview of UNIX permissions field.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/access1.png" width="216" alt="Overview of UNIX permissions field."></div></div></div><br class="figure-break"><p>
 		Any bit flag may be unset. An unset bit flag is the equivalent of "cannot" and is represented
 		as a &#8220;<span class="quote">-</span>&#8221; character (see <a class="link" href="AccessControls.html#access2" title="Example 16.1. Example File">&#8220;Example File&#8221;</a>)
-<a class="indexterm" name="id2633458"></a>
-<a class="indexterm" name="id2633465"></a>
-<a class="indexterm" name="id2633472"></a>
-<a class="indexterm" name="id2633478"></a>
-<a class="indexterm" name="id2633485"></a>
-<a class="indexterm" name="id2633492"></a>
+<a class="indexterm" name="id396726"></a>
+<a class="indexterm" name="id396733"></a>
+<a class="indexterm" name="id396740"></a>
+<a class="indexterm" name="id396746"></a>
+<a class="indexterm" name="id396753"></a>
+<a class="indexterm" name="id396760"></a>
 	</p><div class="example"><a name="access2"></a><p class="title"><b>Example 16.1. Example File</b></p><div class="example-contents"><pre class="programlisting">
 -rwxr-x---   Means: 
  ^^^                The owner (user) can read, write, execute
     ^^^             the group can read and execute
        ^^^          everyone else cannot do anything with it.
 </pre></div></div><br class="example-break"><p>
-<a class="indexterm" name="id2633522"></a>
-<a class="indexterm" name="id2633528"></a>
-<a class="indexterm" name="id2633535"></a>
-<a class="indexterm" name="id2633542"></a>
+<a class="indexterm" name="id396787"></a>
+<a class="indexterm" name="id396794"></a>
+<a class="indexterm" name="id396801"></a>
+<a class="indexterm" name="id396808"></a>
 	Additional possibilities in the [type] field are c = character device, b = block device, p = pipe device,
 	s = UNIX Domain Socket.
 	</p><p>
-<a class="indexterm" name="id2633555"></a>
-<a class="indexterm" name="id2633561"></a>
-<a class="indexterm" name="id2633568"></a>
-<a class="indexterm" name="id2633575"></a>
-<a class="indexterm" name="id2633582"></a>
+<a class="indexterm" name="id396819"></a>
+<a class="indexterm" name="id396826"></a>
+<a class="indexterm" name="id396833"></a>
+<a class="indexterm" name="id396839"></a>
+<a class="indexterm" name="id396846"></a>
 	The letters <code class="constant">rwxXst</code> set permissions for the user, group, and others as read (r), write (w),
 	execute (or access for directories) (x), execute  only  if  the  file  is a directory or already has execute
 	permission for some user (X), set user (SUID) or group ID (SGID) on execution (s), sticky (t).
 	</p><p>
-<a class="indexterm" name="id2633600"></a>
-<a class="indexterm" name="id2633607"></a>
-<a class="indexterm" name="id2633614"></a>
-<a class="indexterm" name="id2633621"></a>
+<a class="indexterm" name="id396862"></a>
+<a class="indexterm" name="id396869"></a>
+<a class="indexterm" name="id396876"></a>
+<a class="indexterm" name="id396883"></a>
 	When the sticky bit is set on a directory, files in that directory may be unlinked (deleted) or renamed only by root or their owner. 
 	Without the sticky  bit, anyone able to write to the directory can delete or rename files. The sticky bit is commonly found on
 	directories, such as <code class="filename">/tmp</code>, that are world-writable.
 	</p><p>
-<a class="indexterm" name="id2633642"></a>
-<a class="indexterm" name="id2633649"></a>
-<a class="indexterm" name="id2633656"></a>
-<a class="indexterm" name="id2633663"></a>
-<a class="indexterm" name="id2633672"></a>
+<a class="indexterm" name="id396902"></a>
+<a class="indexterm" name="id396908"></a>
+<a class="indexterm" name="id396915"></a>
+<a class="indexterm" name="id396922"></a>
+<a class="indexterm" name="id396931"></a>
 	When the set user or group ID bit (s) is set on a directory, then all files created within it will be owned by the user and/or
 	group whose `set user or group' bit is set. This can be helpful in setting up directories for which it is desired that
 	all users who are in a group should be able to write to and read from a file, particularly when it is undesirable for that file
@@ -276,11 +276,11 @@
 	the (r) read flags are not set, files cannot be listed (seen) in the directory by anyone. The group can read files in the
 	directory but cannot create new files. If files in the directory are set to be readable and writable for the group, then
 	group members will be able to write to (or delete) them.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2633704"></a>Protecting Directories and Files from Deletion</h4></div></div></div><p>
-<a class="indexterm" name="id2633713"></a>
-<a class="indexterm" name="id2633720"></a>
-<a class="indexterm" name="id2633726"></a>
-<a class="indexterm" name="id2633733"></a>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id396956"></a>Protecting Directories and Files from Deletion</h4></div></div></div><p>
+<a class="indexterm" name="id396964"></a>
+<a class="indexterm" name="id396971"></a>
+<a class="indexterm" name="id396977"></a>
+<a class="indexterm" name="id396984"></a>
 	People have asked on the Samba mailing list how is it possible to protect files or directories from deletion by users.
 	For example, Windows NT/2K/XP provides the capacity to set access controls on a directory into which people can
 	write files but not delete them. It is possible to set an ACL on a Windows file that permits the file to be written to
@@ -288,27 +288,27 @@
 	anyone who has the ability to create a file can write to it. Anyone who has write permission on the
 	directory that contains a file and has write permission for it has the capability to delete it.
 	</p><p>
-<a class="indexterm" name="id2633755"></a>
-<a class="indexterm" name="id2633762"></a>
-<a class="indexterm" name="id2633769"></a>
+<a class="indexterm" name="id397000"></a>
+<a class="indexterm" name="id397007"></a>
+<a class="indexterm" name="id397014"></a>
 	For the record, in the UNIX environment the ability to delete a file is controlled by the permissions on
 	the directory that the file is in. In other words, a user can delete a file in a directory to which that
 	user has write access, even if that user does not own the file.
 	</p><p>
-<a class="indexterm" name="id2633784"></a>
-<a class="indexterm" name="id2633791"></a>
-<a class="indexterm" name="id2633798"></a>
-<a class="indexterm" name="id2633804"></a>
+<a class="indexterm" name="id397026"></a>
+<a class="indexterm" name="id397033"></a>
+<a class="indexterm" name="id397040"></a>
+<a class="indexterm" name="id397046"></a>
 	Of necessity, Samba is subject to the file system semantics of the host operating system. Samba is therefore
 	limited in the file system capabilities that can be made available through Windows ACLs, and therefore performs
 	a "best fit" translation to POSIX ACLs. Some UNIX file systems do, however support, a feature known
 	as extended attributes. Only the Windows concept of <span class="emphasis"><em>inheritance</em></span> is implemented by Samba through
 	the appropriate extended attribute.
 	</p><p>
-<a class="indexterm" name="id2633826"></a>
-<a class="indexterm" name="id2633833"></a>
-<a class="indexterm" name="id2633840"></a>
-<a class="indexterm" name="id2633846"></a>
+<a class="indexterm" name="id397064"></a>
+<a class="indexterm" name="id397071"></a>
+<a class="indexterm" name="id397078"></a>
+<a class="indexterm" name="id397084"></a>
 	The specific semantics of the extended attributes are not consistent across UNIX and UNIX-like systems such as Linux.
 	For example, it is possible on some implementations of the extended attributes to set a flag that prevents the directory
 	or file from being deleted. The extended attribute that may achieve this is called the <code class="constant">immutible</code> bit.
@@ -322,7 +322,7 @@
 </pre><p>
 	A simple test can be done to check if the immutible flag is supported on files in the file system of the Samba host
 	server.
-	</p><div class="procedure"><a name="id2633885"></a><p class="title"><b>Procedure 16.1. Test for File Immutibility Support</b></p><ol type="1"><li><p>
+	</p><div class="procedure"><a name="id397115"></a><p class="title"><b>Procedure 16.1. Test for File Immutibility Support</b></p><ol type="1"><li><p>
 	Create a file called <code class="filename">filename</code>.
 	</p></li><li><p>
 	Login as the <code class="constant">root</code> user, then set the immutibile flag on a test file as follows:
@@ -340,11 +340,11 @@
 	that cannot be deleted. Check the man page on your particular host system to determine whether or not
 	immutable directories are writable. If they are not, then the entire directory and its contents will effectively
 	be protected from writing (file creation also) and deletion.
-	</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2633958"></a>Share Definition Access Controls</h2></div></div></div><p>
-	<a class="indexterm" name="id2633966"></a>
+	</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id397181"></a>Share Definition Access Controls</h2></div></div></div><p>
+	<a class="indexterm" name="id397189"></a>
 	The following parameters in the <code class="filename">smb.conf</code> file sections define a share control or affect access controls.
 	Before using any of the following options, please refer to the man page for <code class="filename">smb.conf</code>.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2633991"></a>User- and Group-Based Controls</h3></div></div></div><p>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id397212"></a>User- and Group-Based Controls</h3></div></div></div><p>
 	User- and group-based controls can prove quite useful. In some situations it is distinctly desirable to
 	force all file system operations as if a single user were doing so. The use of the
 	<a class="link" href="smb.conf.5.html#FORCEUSER">force user</a> and <a class="link" href="smb.conf.5.html#FORCEGROUP">force group</a> behavior will achieve this.
@@ -385,7 +385,7 @@
 			List of users that should be allowed to login to this service.
 			</p></td></tr><tr><td align="left"><a class="link" href="smb.conf.5.html#WRITELIST">write list</a></td><td align="justify"><p>
 			List of users that are given read-write access to a service.
-			</p></td></tr></tbody></table></div></div><br class="table-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2634357"></a>File and Directory Permissions-Based Controls</h3></div></div></div><p>
+			</p></td></tr></tbody></table></div></div><br class="table-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id397552"></a>File and Directory Permissions-Based Controls</h3></div></div></div><p>
 	Directory permission-based controls, if misused, can result in considerable difficulty in diagnosing the causes of 
 	misconfiguration. Use them sparingly and carefully. By gradually introducing each, one at a time, undesirable side 
 	effects may be detected. In the event of a problem, always comment all of them out and then gradually reintroduce 
@@ -416,7 +416,7 @@
 			This parameter controls whether smbd will attempt to map UNIX permissions into Windows NT ACLs.
 			</p></td></tr><tr><td align="left"><a class="link" href="smb.conf.5.html#SECURITYMASK">security mask</a></td><td align="justify"><p>
 			Controls UNIX permission bits modified when a Windows NT client is manipulating the UNIX permissions on a file.
-			</p></td></tr></tbody></table></div></div><br class="table-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2634693"></a>Miscellaneous Controls</h3></div></div></div><p>
+			</p></td></tr></tbody></table></div></div><br class="table-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id397861"></a>Miscellaneous Controls</h3></div></div></div><p>
 	The parameter documented in <a class="link" href="AccessControls.html#mcoc" title="Table 16.4. Other Controls">Other Controls</a> are often used by administrators 
 	in ways that create inadvertent barriers to file access. Such are the consequences of not understanding the 
 	full implications of <code class="filename">smb.conf</code> file settings.
@@ -449,70 +449,70 @@
 			If this parameter is yes, then users of a service may not create or modify files in the service's directory.
 			</p></td></tr><tr><td align="justify"><a class="link" href="smb.conf.5.html#VETOFILES">veto files</a></td><td align="justify"><p>
 			List of files and directories that are neither visible nor accessible.
-			</p></td></tr></tbody></table></div></div><br class="table-break"></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2635030"></a>Access Controls on Shares</h2></div></div></div><p>
-<a class="indexterm" name="id2635038"></a>
-<a class="indexterm" name="id2635045"></a>
-<a class="indexterm" name="id2635052"></a>
-<a class="indexterm" name="id2635059"></a>
-	<a class="indexterm" name="id2635066"></a>
+			</p></td></tr></tbody></table></div></div><br class="table-break"></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id398176"></a>Access Controls on Shares</h2></div></div></div><p>
+<a class="indexterm" name="id398184"></a>
+<a class="indexterm" name="id398191"></a>
+<a class="indexterm" name="id398198"></a>
+<a class="indexterm" name="id398204"></a>
+	<a class="indexterm" name="id398211"></a>
 	This section deals with how to configure Samba per-share access control restrictions.
 	By default, Samba sets no restrictions on the share itself. Restrictions on the share itself
 	can be set on MS Windows NT4/200x/XP shares. This can be an effective way to limit who can
 	connect to a share. In the absence of specific restrictions, the default setting is to allow
 	the global user <code class="constant">Everyone - Full Control</code> (full control, change and read).
 	</p><p>
-<a class="indexterm" name="id2635089"></a>
-<a class="indexterm" name="id2635096"></a>
-<a class="indexterm" name="id2635103"></a>
+<a class="indexterm" name="id398231"></a>
+<a class="indexterm" name="id398238"></a>
+<a class="indexterm" name="id398244"></a>
 	At this time Samba does not provide a tool for configuring access control settings on the share
 	itself the only way to create those settings is to use either the NT4 Server Manager or the Windows 200x
 	Microsoft Management Console (MMC) for Computer Management. There are currently no plans to provide
 	this capability in the Samba command-line tool set.
 	</p><p>
-<a class="indexterm" name="id2635119"></a>
-<a class="indexterm" name="id2635126"></a>
-<a class="indexterm" name="id2635133"></a>
-<a class="indexterm" name="id2635140"></a>
+<a class="indexterm" name="id398257"></a>
+<a class="indexterm" name="id398264"></a>
+<a class="indexterm" name="id398271"></a>
+<a class="indexterm" name="id398278"></a>
 	Samba stores the per-share access control settings in a file called <code class="filename">share_info.tdb</code>.
 	The location of this file on your system will depend on how Samba was compiled. The default location
 	for Samba's tdb files is under <code class="filename">/usr/local/samba/var</code>. If the <code class="filename">tdbdump</code>
 	utility has been compiled and installed on your system, then you can examine the contents of this file
 	by executing <code class="literal">tdbdump share_info.tdb</code> in the directory containing the tdb files.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2635178"></a>Share Permissions Management</h3></div></div></div><p>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id398312"></a>Share Permissions Management</h3></div></div></div><p>
 		The best tool for share permissions management is platform-dependent. Choose the best tool for your environment.
-		</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2635190"></a>Windows NT4 Workstation/Server</h4></div></div></div><p>
-<a class="indexterm" name="id2635198"></a>
-<a class="indexterm" name="id2635205"></a>
-<a class="indexterm" name="id2635212"></a>
-<a class="indexterm" name="id2635219"></a>
+		</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id398322"></a>Windows NT4 Workstation/Server</h4></div></div></div><p>
+<a class="indexterm" name="id398330"></a>
+<a class="indexterm" name="id398337"></a>
+<a class="indexterm" name="id398344"></a>
+<a class="indexterm" name="id398351"></a>
 			The tool you need to manage share permissions on a Samba server from a Windows NT4 Workstation or Server
 			is the NT Server Manager.  Server Manager is shipped with Windows NT4 Server products but not with Windows
 			NT4 Workstation.  You can obtain the NT Server Manager for MS Windows NT4 Workstation from the Microsoft
 			web site <a class="ulink" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;173673" target="_top">support</a> section.
-			</p><div class="procedure"><a name="id2635245"></a><p class="title"><b>Procedure 16.2. Instructions</b></p><ol type="1"><li><p>
+			</p><div class="procedure"><a name="id398371"></a><p class="title"><b>Procedure 16.2. Instructions</b></p><ol type="1"><li><p>
 			Launch the <span class="application">NT4 Server Manager</span> and click on the Samba server you want to
 			administer. From the menu select <span class="guimenu">Computer</span>, then click on
 			<span class="guimenuitem">Shared Directories</span>.
 			</p></li><li><p>
 			Click on the share that you wish to manage and click the <span class="guilabel">Properties</span> tab, then click
 			the <span class="guilabel">Permissions</span> tab. Now you can add or change access control settings as you wish.
-			</p></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2635301"></a>Windows 200x/XP</h4></div></div></div><p>
-<a class="indexterm" name="id2635308"></a>
-<a class="indexterm" name="id2635315"></a>
-<a class="indexterm" name="id2635322"></a>
-<a class="indexterm" name="id2635329"></a>
+			</p></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id398424"></a>Windows 200x/XP</h4></div></div></div><p>
+<a class="indexterm" name="id398431"></a>
+<a class="indexterm" name="id398438"></a>
+<a class="indexterm" name="id398445"></a>
+<a class="indexterm" name="id398452"></a>
 			On <span class="application">MS Windows NT4/200x/XP</span> system, ACLs on the share itself are set using native
 			tools, usually from File Manager. For example, in Windows 200x, right-click on the shared folder,
 			then select <span class="guimenuitem">Sharing</span>, then click on <span class="guilabel">Permissions</span>. The default 
 			Windows NT4/200x permission allows "Everyone" full control on the share.
 			</p><p>
-<a class="indexterm" name="id2635362"></a>
-<a class="indexterm" name="id2635369"></a>
-<a class="indexterm" name="id2635375"></a>
+<a class="indexterm" name="id398482"></a>
+<a class="indexterm" name="id398489"></a>
+<a class="indexterm" name="id398495"></a>
 			MS Windows 200x and later versions come with a tool called the <span class="application">Computer Management</span>
 			snap-in for the MMC. This tool is located by clicking on <span class="guimenu">Control Panel -&gt;
 			Administrative Tools -&gt; Computer Management</span>.
-			</p><div class="procedure"><a name="id2635399"></a><p class="title"><b>Procedure 16.3. Instructions</b></p><ol type="1"><li><p>
+			</p><div class="procedure"><a name="id398517"></a><p class="title"><b>Procedure 16.3. Instructions</b></p><ol type="1"><li><p>
 			After launching the MMC with the Computer Management snap-in, click the menu item <span class="guimenuitem">Action</span>
 			and select <span class="guilabel">Connect to another computer</span>. If you are not logged onto a domain you will be prompted
 			to enter a domain login user identifier and a password. This will authenticate you to the domain.
@@ -523,7 +523,7 @@
 			<span class="guilabel">System Tools</span>, then on the <span class="guibutton">[+]</span> next to
 			<span class="guilabel">Shared Folders</span> in the left panel.
 			</p></li><li><p>
-<a class="indexterm" name="id2635480"></a>
+<a class="indexterm" name="id398593"></a>
 			In the right panel, double-click on the share on which you wish to set access control permissions.
 			Then click the tab <span class="guilabel">Share Permissions</span>. It is now possible to add access control entities
 			to the shared folder. Remember to set what type of access (full control, change, read) you
@@ -534,8 +534,8 @@
 			ACL precedence. Everyone with <span class="emphasis"><em>no access</em></span> means that <code class="constant">MaryK</code> who is
 			part of the group <code class="constant">Everyone</code> will have no access even if she is given explicit full
 			control access.
-			</p></div></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2635531"></a>MS Windows Access Control Lists and UNIX Interoperability</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2635537"></a>Managing UNIX Permissions Using NT Security Dialogs</h3></div></div></div><p>
-		<a class="indexterm" name="id2635545"></a>
+			</p></div></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id398637"></a>MS Windows Access Control Lists and UNIX Interoperability</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id398643"></a>Managing UNIX Permissions Using NT Security Dialogs</h3></div></div></div><p>
+		<a class="indexterm" name="id398651"></a>
 		Windows NT clients can use their native security settings dialog box to view and modify the
 		underlying UNIX permissions.
 		</p><p>
@@ -549,7 +549,7 @@
 		When trying to figure out file access problems, it is vitally important to find the identity of the Windows
 		user as it is presented by Samba at the point of file access. This can best be determined from the
 		Samba log files.
-		</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2635584"></a>Viewing File Security on a Samba Share</h3></div></div></div><p>
+		</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id398682"></a>Viewing File Security on a Samba Share</h3></div></div></div><p>
 		From an NT4/2000/XP client, right-click on any file or directory in a Samba-mounted drive letter
 		or UNC path. When the menu pops up, click on the <span class="guilabel">Properties</span> entry at the bottom
 		of the menu. This brings up the file <code class="constant">Properties</code> dialog box. Click on the 
@@ -560,7 +560,7 @@
 		to add auditing requirements to a file if the user is logged on as the NT administrator. This dialog is
 		nonfunctional with a Samba share at this time, because the only useful button, the <span class="guibutton">Add</span>
 		button, will not currently allow a list of users to be seen.
-		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2635654"></a>Viewing File Ownership</h3></div></div></div><p>
+		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id398747"></a>Viewing File Ownership</h3></div></div></div><p>
 		Clicking on the <span class="guibutton">Ownership</span> button brings up a dialog box telling you who owns
 		the given file. The owner name will be displayed like this:
 		</p><pre class="screen">
@@ -574,7 +574,7 @@
 		If the parameter <a class="link" href="smb.conf.5.html#NTACLSUPPORT">nt acl support</a> is set to <code class="constant">false</code>,
 		the file owner will be shown as the NT user <span class="emphasis"><em>Everyone</em></span>.
 		</p><p>
-<a class="indexterm" name="id2635728"></a>
+<a class="indexterm" name="id398814"></a>
 		The <span class="guibutton">Take Ownership</span> button will not allow you to change the ownership of this file to
 		yourself (clicking it will display a dialog box complaining that the user as whom you are currently logged onto
 		the NT client cannot be found). The reason for this is that changing the ownership of a file is a privileged
@@ -582,14 +582,14 @@
 		NT to attempt to change the ownership of a file to the current user logged into the NT client, this will
 		not work with Samba at this time.
 		</p><p>
-<a class="indexterm" name="id2635757"></a>
-<a class="indexterm" name="id2635764"></a>
-<a class="indexterm" name="id2635771"></a>
+<a class="indexterm" name="id398839"></a>
+<a class="indexterm" name="id398845"></a>
+<a class="indexterm" name="id398852"></a>
 		There is an NT <code class="literal">chown</code> command that will work with Samba and allow a user with administrator
 		privilege connected to a Samba server as root to change the ownership of files on both a local NTFS file system
 		or remote mounted NTFS or Samba drive. This is available as part of the <span class="application">Seclib</span> NT
 		security library written by Jeremy Allison of the Samba Team and is downloadable from the main Samba FTP site.
-		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2635798"></a>Viewing File or Directory Permissions</h3></div></div></div><p>
+		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id398876"></a>Viewing File or Directory Permissions</h3></div></div></div><p>
 		The third button is the <span class="guibutton">Permissions</span> button. Clicking on it brings up a dialog box
 		that shows both the permissions and the UNIX owner of the file or directory. The owner is displayed like this:
 		</p><p><code class="literal"><em class="replaceable"><code>SERVER</code></em>\
@@ -603,7 +603,7 @@
 		shown as NT <span class="emphasis"><em>Full Control</em></span>.
 		</p><p>
 		The permissions field is displayed differently for files and directories. Both are discussed next.
-		</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2635881"></a>File Permissions</h4></div></div></div><p>
+		</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id398953"></a>File Permissions</h4></div></div></div><p>
 		The standard UNIX user/group/world triplet and the corresponding <code class="constant">read, write,
 		execute</code> permissions triplets are mapped by Samba into a three-element NT ACL with the
 		&#8220;<span class="quote">r</span>&#8221;, &#8220;<span class="quote">w</span>&#8221;, and &#8220;<span class="quote">x</span>&#8221; bits mapped into the corresponding NT
@@ -621,7 +621,7 @@
 		<code class="constant">Take Ownership</code> ACL attribute (which has no meaning in UNIX) and reports a component with
 		no permissions as having the NT <code class="literal">O</code> bit set.  This was chosen, of course, to make it look
 		like a zero, meaning zero permissions. More details on the decision behind this action are given below.
-		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2635975"></a>Directory Permissions</h4></div></div></div><p>
+		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id399036"></a>Directory Permissions</h4></div></div></div><p>
 		Directories on an NT NTFS file system have two different sets of permissions. The first set is the ACL set on the
 		directory itself, which is usually displayed in the first set of parentheses in the normal <code class="constant">RW</code> 
 		NT style. This first set of permissions is created by Samba in exactly the same way as normal file permissions are, described 
@@ -632,7 +632,7 @@
 		</p><p>
 		Samba synthesizes these inherited permissions for NT by returning as an NT ACL the UNIX permission mode that a new file 
 		created by Samba on this share would receive.
-		</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2636013"></a>Modifying File or Directory Permissions</h3></div></div></div><p>
+		</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id399067"></a>Modifying File or Directory Permissions</h3></div></div></div><p>
 	Modifying file and directory permissions is as simple as changing the displayed permissions in the dialog box
 	and clicking on <span class="guibutton">OK</span>. However, there are limitations that a user needs to be aware of,
 	and also interactions with the standard Samba permission masks and mapping of DOS attributes that also need to
@@ -665,7 +665,7 @@
 	If you wish to remove all permissions from a user/group/world  component, you may either highlight the
 	component and click on the <span class="guibutton">Remove</span> button or set the component to only have the special
 	<code class="constant">Take Ownership</code> permission (displayed as <code class="literal">O</code>) highlighted.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2636170"></a>Interaction with the Standard Samba &#8220;<span class="quote">create mask</span>&#8221; Parameters</h3></div></div></div><p>There are four parameters that control interaction with the standard Samba <em class="parameter"><code>create mask</code></em> parameters:
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id399207"></a>Interaction with the Standard Samba &#8220;<span class="quote">create mask</span>&#8221; Parameters</h3></div></div></div><p>There are four parameters that control interaction with the standard Samba <em class="parameter"><code>create mask</code></em> parameters:
 	
 
 	</p><div class="itemizedlist"><ul type="disc"><li><p><a class="link" href="smb.conf.5.html#SECURITYMASK">security mask</a></p></li><li><p><a class="link" href="smb.conf.5.html#FORCESECURITYMODE">force security mode</a></p></li><li><p><a class="link" href="smb.conf.5.html#DIRECTORYSECURITYMASK">directory security mask</a></p></li><li><p><a class="link" href="smb.conf.5.html#FORCEDIRECTORYSECURITYMODE">force directory security mode</a></p></li></ul></div><p>
@@ -719,7 +719,7 @@
 	does not force any particular bits to be set <span class="emphasis"><em>on</em></span>,
 	then set the following parameters in the <code class="filename">smb.conf</code> file in that
 	share-specific section:
-	</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2636490"></a><em class="parameter"><code>security mask = 0777</code></em></td></tr><tr><td><a class="indexterm" name="id2636501"></a><em class="parameter"><code>force security mode = 0</code></em></td></tr><tr><td><a class="indexterm" name="id2636513"></a><em class="parameter"><code>directory security mask = 0777</code></em></td></tr><tr><td><a class="indexterm" name="id2636525"></a><em class="parameter"><code>force directory security mode = 0</code></em></td></tr></table></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2636539"></a>Interaction with the Standard Samba File Attribute Mapping</h3></div></div></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
+	</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id399494"></a><em class="parameter"><code>security mask = 0777</code></em></td></tr><tr><td><a class="indexterm" name="id399506"></a><em class="parameter"><code>force security mode = 0</code></em></td></tr><tr><td><a class="indexterm" name="id399517"></a><em class="parameter"><code>directory security mask = 0777</code></em></td></tr><tr><td><a class="indexterm" name="id399529"></a><em class="parameter"><code>force directory security mode = 0</code></em></td></tr></table></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id399542"></a>Interaction with the Standard Samba File Attribute Mapping</h3></div></div></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
 	Samba maps some of the DOS attribute bits (such as &#8220;<span class="quote">read-only</span>&#8221;)
 	into the UNIX permissions of a file. This means there can 
 	be a conflict between the permission bits set via the security 
@@ -740,7 +740,7 @@
 	attributes dialog, you should always press <span class="guibutton">Cancel</span> 
 	rather than <span class="guibutton">OK</span> to ensure that your changes 
 	are not overridden.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2636612"></a>Windows NT/200X ACLs and POSIX ACLs Limitations</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id399606"></a>Windows NT/200X ACLs and POSIX ACLs Limitations</h3></div></div></div><p>
 	Windows administrators are familiar with simple ACL controls, and they typically
 	consider that UNIX user/group/other (ugo) permissions are inadequate and not
 	sufficiently fine-grained.
@@ -768,7 +768,7 @@
 	ACLs as implemented in UNIX file systems. Samba provides support for <span class="emphasis"><em>masks</em></span>
 	that permit normal ugo and ACLs functionality to be overrided. This further complicates
 	the way in which Windows ACLs must be implemented.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2636676"></a>UNIX POSIX ACL Overview</h4></div></div></div><p>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id399652"></a>UNIX POSIX ACL Overview</h4></div></div></div><p>
 	In examining POSIX ACLs we must consider the manner in which they operate for 
 	both files and directories. File ACLs have the following significance:
 </p><pre class="screen">
@@ -797,7 +797,7 @@
 default:mask:rwx      &lt;-- inherited default mask
 default:other:---     &lt;-- inherited permissions for everyone (other)
 </pre><p>
-	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2636737"></a>Mapping of Windows File ACLs to UNIX POSIX ACLs</h4></div></div></div><p>
+	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id399693"></a>Mapping of Windows File ACLs to UNIX POSIX ACLs</h4></div></div></div><p>
 	Microsoft Windows NT4/200X ACLs must of necessity be mapped to POSIX ACLs.
 	The mappings for file permissions are shown in <a class="link" href="AccessControls.html#fdsacls" title="Table 16.5. How Windows File ACLs Map to UNIX POSIX File ACLs">How
 	Windows File ACLs Map to UNIX POSIX File ACLs</a>.
@@ -816,7 +816,7 @@
 	The UNIX administrator can set any directory permission from within the UNIX environment.
 	The Windows administrator is more restricted in that it is not possible from within 
 	Windows Explorer to remove read permission for the file owner.
-	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2637006"></a>Mapping of Windows Directory ACLs to UNIX POSIX ACLs</h4></div></div></div><p>
+	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id399950"></a>Mapping of Windows Directory ACLs to UNIX POSIX ACLs</h4></div></div></div><p>
 	Interesting things happen in the mapping of UNIX POSIX directory permissions and
 	UNIX POSIX ACLs to Windows ACEs (Access Control Entries, the discrete components of
 	an ACL) are mapped to Windows directory ACLs.
@@ -824,10 +824,10 @@
 	Directory permissions function in much the same way as shown for file permissions, but
 	there are some notable exceptions and a few peculiarities that the astute administrator
 	will want to take into account in the setting up of directory permissions.
-	</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2637030"></a>Common Errors</h2></div></div></div><p>
+	</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id399970"></a>Common Errors</h2></div></div></div><p>
 File, directory, and share access problems are common topics on the mailing list. The following
 are examples recently taken from the mailing list.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2637042"></a>Users Cannot Write to a Public Share</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id399980"></a>Users Cannot Write to a Public Share</h3></div></div></div><p>
 	The following complaint has frequently been voiced on the Samba mailing list: 
 	&#8220;<span class="quote">
 	We are facing some troubles with file/directory permissions. I can log on the domain as admin user (root),
@@ -887,11 +887,11 @@
 		</p></li><li><p>
 		If the user that must have write permission in the directory is not a member of the group
 		<span class="emphasis"><em>engr</em></span> set in the <code class="filename">smb.conf</code> entry for the share:
-		</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2637348"></a><em class="parameter"><code>force group = engr</code></em></td></tr></table><p>
-		</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2637364"></a>File Operations Done as <span class="emphasis"><em>root</em></span> with <span class="emphasis"><em>force user</em></span> Set</h3></div></div></div><p>
+		</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id400271"></a><em class="parameter"><code>force group = engr</code></em></td></tr></table><p>
+		</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id400287"></a>File Operations Done as <span class="emphasis"><em>root</em></span> with <span class="emphasis"><em>force user</em></span> Set</h3></div></div></div><p>
 		When you have a user in <a class="link" href="smb.conf.5.html#ADMINUSERS">admin users</a>, Samba will always do file operations for
 		this user as <span class="emphasis"><em>root</em></span>, even if <a class="link" href="smb.conf.5.html#FORCEUSER">force user</a> has been set.
-		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2637410"></a>MS Word with Samba Changes Owner of File</h3></div></div></div><p>
+		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id400330"></a>MS Word with Samba Changes Owner of File</h3></div></div></div><p>
 		<span class="emphasis"><em>Question:</em></span> &#8220;<span class="quote">When user B saves a word document that is owned by user A,
 		the updated file is now owned by user B.  Why is Samba doing this? How do I fix this?</span>&#8221;
 		</p><p>
@@ -906,7 +906,7 @@
 		in which you are changing Word documents: <code class="literal">chmod g+s `directory_name'.</code> This ensures that all files will
 		be created with the group that owns the directory. In <code class="filename">smb.conf</code> share declaration section set:
 		</p><p>
-		</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2637479"></a><em class="parameter"><code>force create mode = 0660</code></em></td></tr><tr><td><a class="indexterm" name="id2637491"></a><em class="parameter"><code>force directory mode = 0770</code></em></td></tr></table><p>
+		</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id400391"></a><em class="parameter"><code>force create mode = 0660</code></em></td></tr><tr><td><a class="indexterm" name="id400402"></a><em class="parameter"><code>force directory mode = 0770</code></em></td></tr></table><p>
 		</p><p>
 		These two settings will ensure that all directories and files that get created in the share will be readable/writable by the
 		owner and group set on the directory itself.

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/AdvancedNetworkManagement.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/AdvancedNetworkManagement.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/AdvancedNetworkManagement.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,9 +1,9 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 25. Advanced Network Management</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="winbind.html" title="Chapter 24. Winbind: Use of Domain Accounts"><link rel="next" href="PolicyMgmt.html" title="Chapter 26. System and Account Policies"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 25. Advanced Network Management</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="winbind.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="PolicyMgmt.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="AdvancedNetworkManagement"></a>Chapter 25. Advanced Network Management</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">June 15 2005</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="AdvancedNetworkManagement.html#id2679955">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="AdvancedNetworkManagement.html#id2679982">Remote Server Administration</a></span></dt><dt><span class="sect1"><a href="AdvancedNetworkManagement.html#id2680125">Remote Desktop Management</a></span></dt><dd><dl><dt><span class="sect2"><a href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a></span></dt><dt><span class="sect2"><a href="AdvancedNetworkManagement.html#id2680529">Remote Management with ThinLinc</a></span></dt></dl></dd><dt><span class="sect1"><a href="AdvancedNetworkManagement.html#id2680714">Network Logon Script Magic</a></span></dt><dd><dl><dt><span class="sect2"><a href="AdvancedNetworkManagement.html#id2680939">Adding Printers without User Intervention</a></span></dt><dt><span class="sect2"><a href="AdvancedNetworkManagement.html#id2680982">Limiting Logon Connections</a></span></dt></dl></dd></dl></div><p>
-<a class="indexterm" name="id2679943"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 25. Advanced Network Management</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="winbind.html" title="Chapter 24. Winbind: Use of Domain Accounts"><link rel="next" href="PolicyMgmt.html" title="Chapter 26. System and Account Policies"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 25. Advanced Network Management</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="winbind.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="PolicyMgmt.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="AdvancedNetworkManagement"></a>Chapter 25. Advanced Network Management</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">June 15 2005</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="AdvancedNetworkManagement.html#id439073">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="AdvancedNetworkManagement.html#id439095">Remote Server Administration</a></span></dt><dt><span class="sect1"><a href="AdvancedNetworkManagement.html#id439232">Remote Desktop Management</a></span></dt><dd><dl><dt><span class="sect2"><a href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a></span></dt><dt><span class="sect2"><a href="AdvancedNetworkManagement.html#id439596">Remote Management with ThinLinc</a></span></dt></dl></dd><dt><span class="sect1"><a href="AdvancedNetworkManagement.html#id439771">Network Logon Script Magic</a></span></dt><dd><dl><dt><span class="sect2"><a href="AdvancedNetworkManagement.html#id439937">Adding Printers without User Intervention</a></span></dt><dt><span class="sect2"><a href="AdvancedNetworkManagement.html#id439977">Limiting Logon Connections</a></span></dt></dl></dd></dl></div><p>
+<a class="indexterm" name="id439063"></a>
 This section documents peripheral issues that are of great importance to network
 administrators who want to improve network resource access control, to automate the user
 environment, and to make their lives a little easier.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2679955"></a>Features and Benefits</h2></div></div></div><p>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id439073"></a>Features and Benefits</h2></div></div></div><p>
 Often the difference between a working network environment and a well-appreciated one can
 best be measured by the <span class="emphasis"><em>little things</em></span> that make everything work more
 harmoniously. A key part of every network environment solution is the ability to remotely
@@ -13,48 +13,48 @@
 </p><p>
 This chapter presents information on each of these areas. They are placed here, and not in
 other chapters, for ease of reference.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2679982"></a>Remote Server Administration</h2></div></div></div><p>&#8220;<span class="quote">How do I get User Manager and Server Manager?</span>&#8221;</p><p>
-<a class="indexterm" name="id2679995"></a>
-<a class="indexterm" name="id2680002"></a>
-<a class="indexterm" name="id2680009"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id439095"></a>Remote Server Administration</h2></div></div></div><p>&#8220;<span class="quote">How do I get User Manager and Server Manager?</span>&#8221;</p><p>
+<a class="indexterm" name="id439108"></a>
+<a class="indexterm" name="id439114"></a>
+<a class="indexterm" name="id439121"></a>
 Since I do not need to buy an <span class="application">NT4 server</span>, how do I get the User Manager for Domains
 and the Server Manager?
 </p><p>
-<a class="indexterm" name="id2680027"></a>
-<a class="indexterm" name="id2680034"></a>
+<a class="indexterm" name="id439138"></a>
+<a class="indexterm" name="id439145"></a>
 Microsoft distributes a version of these tools called <code class="filename">Nexus.exe</code> for installation 
 on <span class="application">Windows 9x/Me</span> systems. The tools set includes:
 </p><div class="itemizedlist"><ul type="disc"><li><p>Server Manager</p></li><li><p>User Manager for Domains</p></li><li><p>Event Viewer</p></li></ul></div><p>
 Download the archived file at the Microsoft <a class="ulink" href="ftp://ftp.microsoft.com/Softlib/MSLFILES/NEXUS.EXE" target="_top">Nexus</a> link.
 </p><p>
-<a class="indexterm" name="id2680088"></a>
-<a class="indexterm" name="id2680095"></a>
-<a class="indexterm" name="id2680102"></a>
+<a class="indexterm" name="id439196"></a>
+<a class="indexterm" name="id439203"></a>
+<a class="indexterm" name="id439210"></a>
 The <span class="application">Windows NT 4.0</span> version of the User Manager for 
 Domains and Server Manager are available from Microsoft
 <a class="ulink" href="ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTOOLS.EXE" target="_top">via ftp</a>.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2680125"></a>Remote Desktop Management</h2></div></div></div><p>
-<a class="indexterm" name="id2680133"></a>
-<a class="indexterm" name="id2680140"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id439232"></a>Remote Desktop Management</h2></div></div></div><p>
+<a class="indexterm" name="id439240"></a>
+<a class="indexterm" name="id439247"></a>
 There are a number of possible remote desktop management solutions that range from free
 through costly. Do not let that put you off. Sometimes the most costly solution is the
 most cost effective. In any case, you will need to draw your own conclusions as to which
 is the best tool in your network environment.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2680154"></a>Remote Management from NoMachine.Com</h3></div></div></div><p>
-	<a class="indexterm" name="id2680162"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id439257"></a>Remote Management from NoMachine.Com</h3></div></div></div><p>
+	<a class="indexterm" name="id439265"></a>
 	The following information was posted to the Samba mailing list at Apr 3 23:33:50 GMT 2003.
 	It is presented in slightly edited form (with author details omitted for privacy reasons).
 	The entire answer is reproduced below with some comments removed.
 	</p><p>&#8220;<span class="quote">
-<a class="indexterm" name="id2680177"></a>
+<a class="indexterm" name="id439278"></a>
 		I have a wonderful Linux/Samba server running as PDC for a network. Now I would like to add remote
 		desktop capabilities so users outside could login to the system and get their desktop up from home or
 		another country.
 		</span>&#8221;</p><p>&#8220;<span class="quote">
-<a class="indexterm" name="id2680193"></a>
-<a class="indexterm" name="id2680200"></a>
-<a class="indexterm" name="id2680206"></a>
-<a class="indexterm" name="id2680213"></a>
+<a class="indexterm" name="id439292"></a>
+<a class="indexterm" name="id439298"></a>
+<a class="indexterm" name="id439305"></a>
+<a class="indexterm" name="id439312"></a>
 		Is there a way to accomplish this? Do I need a Windows Terminal server?  Do I need to configure it so
 		it is a member of the domain or a BDC or PDC? Are there any hacks for MS Windows XP to enable remote login
 		even if the computer is in a domain?
@@ -62,22 +62,22 @@
 		Answer provided: Check out the new offer of &#8220;<span class="quote">NX</span>&#8221; software from
 		<a class="ulink" href="http://www.nomachine.com/" target="_top">NoMachine</a>.
 		</p><p>
-<a class="indexterm" name="id2680243"></a>
-<a class="indexterm" name="id2680250"></a>
-<a class="indexterm" name="id2680257"></a>
+<a class="indexterm" name="id439339"></a>
+<a class="indexterm" name="id439346"></a>
+<a class="indexterm" name="id439353"></a>
 	It implements an easy-to-use interface to the Remote X protocol as
 	well as incorporating VNC/RFB and rdesktop/RDP into it, but at a speed
 	performance much better than anything you may have ever seen.
 	</p><p>
-<a class="indexterm" name="id2680271"></a>
+<a class="indexterm" name="id439365"></a>
 	Remote X is not new at all, but what they did achieve successfully is
 	a new way of compression and caching technologies that makes the thing
 	fast enough to run even over slow modem/ISDN connections.
 	</p><p>
-<a class="indexterm" name="id2680284"></a>
-<a class="indexterm" name="id2680291"></a>
-<a class="indexterm" name="id2680298"></a>
-<a class="indexterm" name="id2680305"></a>
+<a class="indexterm" name="id439376"></a>
+<a class="indexterm" name="id439383"></a>
+<a class="indexterm" name="id439390"></a>
+<a class="indexterm" name="id439397"></a>
 	I test drove their (public) Red Hat machine in Italy, over a loaded
 	Internet connection, with enabled thumbnail previews in KDE konqueror,
 	which popped up immediately on &#8220;<span class="quote">mouse-over</span>&#8221;. From inside that (remote X)
@@ -85,18 +85,18 @@
 	To test the performance, I played Pinball. I am proud to announce
 	that my score was 631,750 points at first try.
 	</p><p>
-<a class="indexterm" name="id2680324"></a>
-<a class="indexterm" name="id2680330"></a>
-<a class="indexterm" name="id2680337"></a>
-<a class="indexterm" name="id2680344"></a>
+<a class="indexterm" name="id439413"></a>
+<a class="indexterm" name="id439419"></a>
+<a class="indexterm" name="id439426"></a>
+<a class="indexterm" name="id439433"></a>
 	NX performs better on my local LAN than any of the other &#8220;<span class="quote">pure</span>&#8221;
 	connection methods I use from time to time: TightVNC, rdesktop or
 	Remote X. It is even faster than a direct crosslink connection between
 	two nodes.
 	</p><p>
-<a class="indexterm" name="id2680361"></a>
-<a class="indexterm" name="id2680368"></a>
-<a class="indexterm" name="id2680375"></a>
+<a class="indexterm" name="id439448"></a>
+<a class="indexterm" name="id439455"></a>
+<a class="indexterm" name="id439462"></a>
 	I even got sound playing from the Remote X app to my local boxes, and
 	had a working &#8220;<span class="quote">copy'n'paste</span>&#8221; from an NX  window (running a KDE session
 	in Italy) to my Mozilla mailing agent. These guys are certainly doing
@@ -118,7 +118,7 @@
 	full-screen, and after a short time you forget that it is a remote session
 	at all).
 	</p><p>
-<a class="indexterm" name="id2680424"></a>
+<a class="indexterm" name="id439502"></a>
 	Now the best thing for last: All the core compression and caching
 	technologies are released under the GPL and available as source code
 	to anybody who wants to build on it! These technologies are working,
@@ -140,37 +140,37 @@
 		you can now use a (very inconvenient) command line at no cost,
 		but you can buy a comfortable (proprietary) NX GUI front end for money.
 		</p></li><li><p>
-<a class="indexterm" name="id2680488"></a>
-<a class="indexterm" name="id2680494"></a>
-<a class="indexterm" name="id2680501"></a>
-<a class="indexterm" name="id2680508"></a>
-<a class="indexterm" name="id2680514"></a>
+<a class="indexterm" name="id439558"></a>
+<a class="indexterm" name="id439564"></a>
+<a class="indexterm" name="id439570"></a>
+<a class="indexterm" name="id439577"></a>
+<a class="indexterm" name="id439584"></a>
 		NoMachine is encouraging and offering help to OSS/Free Software implementations
 		for such a front-end too, even if it means competition to them (they have written
 		to this effect even to the LTSP, KDE, and GNOME developer mailing lists).
-		</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2680529"></a>Remote Management with ThinLinc</h3></div></div></div><p>
+		</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id439596"></a>Remote Management with ThinLinc</h3></div></div></div><p>
 	Another alternative for remote access is <span class="emphasis"><em>ThinLinc</em></span> from Cendio.
 	</p><p>
-<a class="indexterm" name="id2680545"></a>
-<a class="indexterm" name="id2680551"></a>
-<a class="indexterm" name="id2680558"></a>
-<a class="indexterm" name="id2680565"></a>
-<a class="indexterm" name="id2680572"></a>
-<a class="indexterm" name="id2680579"></a>
-<a class="indexterm" name="id2680585"></a>
-<a class="indexterm" name="id2680592"></a>
+<a class="indexterm" name="id439611"></a>
+<a class="indexterm" name="id439618"></a>
+<a class="indexterm" name="id439625"></a>
+<a class="indexterm" name="id439632"></a>
+<a class="indexterm" name="id439638"></a>
+<a class="indexterm" name="id439645"></a>
+<a class="indexterm" name="id439652"></a>
+<a class="indexterm" name="id439658"></a>
 	ThinLinc is a terminal server solution that is available for Linux and Solaris based on standard
 	protocols such as SSH, TightVNC, NFS and PulseAudio.
 	</p><p>
-<a class="indexterm" name="id2680604"></a>
-<a class="indexterm" name="id2680611"></a>
+<a class="indexterm" name="id439670"></a>
+<a class="indexterm" name="id439676"></a>
 	ThinLinc an be used both in the LAN environment to implement a Thin Client strategy for an organization, and as
 	secure remote access solution for people working from remote locations, even over smallband connections.
 	ThinLinc is free to use for a single concurrent user.
 	</p><p>
-<a class="indexterm" name="id2680626"></a>
-<a class="indexterm" name="id2680633"></a>
-<a class="indexterm" name="id2680640"></a>
+<a class="indexterm" name="id439689"></a>
+<a class="indexterm" name="id439695"></a>
+<a class="indexterm" name="id439702"></a>
 	The product can also be used as a frontend to access Windows Terminal Server or Citrix farms, or even Windows
 	XP machines, securing the connection via the ssh protocol. The client is available both for Linux (supporting
 	all Linux distributions as well as numerous thin terminals) and for Windows. A Java-based Web client is also
@@ -185,7 +185,7 @@
 	<a class="ulink" href="http://pulseaudio.org" target="_top">PulseAudio</a> , unfsd,
 	<a class="ulink" href="http://www.python.org" target="_top">Python</a> and
 	<a class="ulink" href="http://www.rdesktop.org" target="_top">rdesktop</a>.
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2680714"></a>Network Logon Script Magic</h2></div></div></div><p>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id439771"></a>Network Logon Script Magic</h2></div></div></div><p>
 There are several opportunities for creating a custom network startup configuration environment.
 </p><div class="itemizedlist"><ul type="disc"><li><p>No Logon Script.</p></li><li><p>Simple universal Logon Script that applies to all users.</p></li><li><p>Use of a conditional Logon Script that applies per-user or per-group attributes.</p></li><li><p>Use of Samba's preexec and postexec functions on access to the NETLOGON share to create
 		a custom logon script and then execute it.</p></li><li><p>User of a tool such as KixStart.</p></li></ul></div><p>
@@ -195,7 +195,7 @@
 </p><p>
 The following listings are from the genlogon directory.
 </p><p>
-<a class="indexterm" name="id2680784"></a>
+<a class="indexterm" name="id439837"></a>
 This is the <code class="filename">genlogon.pl</code> file:
 
 </p><pre class="programlisting">
@@ -274,15 +274,15 @@
 </pre><p>
 </p><p>
 Those wishing to use a more elaborate or capable logon processing system should check out these sites:
-</p><div class="itemizedlist"><ul type="disc"><li><p><a class="ulink" href="http://www.craigelachie.org/rhacer/ntlogon" target="_top">http://www.craigelachie.org/rhacer/ntlogon</a></p></li><li><p><a class="ulink" href="http://www.kixtart.org" target="_top">http://www.kixtart.org</a></p></li></ul></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2680939"></a>Adding Printers without User Intervention</h3></div></div></div><p>
-<a class="indexterm" name="id2680948"></a>
+</p><div class="itemizedlist"><ul type="disc"><li><p><a class="ulink" href="http://www.craigelachie.org/rhacer/ntlogon" target="_top">http://www.craigelachie.org/rhacer/ntlogon</a></p></li><li><p><a class="ulink" href="http://www.kixtart.org" target="_top">http://www.kixtart.org</a></p></li></ul></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id439937"></a>Adding Printers without User Intervention</h3></div></div></div><p>
+<a class="indexterm" name="id439945"></a>
 Printers may be added automatically during logon script processing through the use of:
 </p><pre class="screen">
 <code class="prompt">C:\&gt; </code><strong class="userinput"><code>rundll32 printui.dll,PrintUIEntry /?</code></strong>
 </pre><p>
 
 See the documentation in the <a class="ulink" href="http://support.microsoft.com/default.asp?scid=kb;en-us;189105" target="_top">Microsoft Knowledge Base article 189105</a>.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2680982"></a>Limiting Logon Connections</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id439977"></a>Limiting Logon Connections</h3></div></div></div><p>
 		Sometimes it is necessary to limit the number of concurrent connections to a
 		Samba shared resource. For example, a site may wish to permit only one network
 		logon per user.

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/Appendix.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/Appendix.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/Appendix.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1 +1 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part VI. Reference Section</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="bugreport.html" title="Chapter 40. Reporting Bugs"><link rel="next" href="compiling.html" title="Chapter 41. How to Compile Samba"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part VI. Reference Section</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bugreport.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="compiling.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="Appendix"></a>Part VI. Reference Section</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="compiling.html">41. How to Compile Samba</a></span></dt><dd><dl><dt><span class="sect1"><a href="compiling.html#id2709290">Access Samba Source Code via Subversion</a></span></dt><dd><dl><dt><span class="sect2"><a href="compiling.html#id2709296">Introduction</a></span></dt><dt><span class="sect2"><a href="compiling.html#id2709337">Subversion Access to samba.org</a></span></dt></dl></dd><dt><span class="sect1"><a href="compiling.html#id2709528">Accessing the Samba Sources via rsync and ftp</a></span></dt><dt><span class="sect1"><a href="compiling.html#id2709603">Verifying Samba's PGP Signature</a></span></dt><dt><span class="sect1"><a href="compiling.html#id2709741">Building the Binaries</a></span></dt><dd><dl><dt><span class="sect2"><a href="compiling.html#id2709978">Compiling Samba with Active Directory Support</a></span></dt></dl></dd><dt><span class="sect1"><a href="compiling.html#startingSamba">Starting the <span class="application">smbd</span> <span class="application">nmbd</span> and <span class="application">winbindd</span></a></span></dt><dd><dl><dt><span class="sect2"><a href="compiling.html#id2710248">Starting from inetd.conf</a></span></dt><dt><span class="sect2"><a href="compiling.html#id2710468">Alternative: Starting <span class="application">smbd</span> as a Daemon</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="Portability.html">42. Portability</a></span></dt><dd><dl><dt><span class="sect1"><a href="Portability.html#id2710853">HPUX</a></span></dt><dt><span class="sect1"><a href="Portability.html#id2710957">SCO UNIX</a></span></dt><dt><span class="sect1"><a href="Portability.html#id2710996">DNIX</a></span></dt><dt><span class="sect1"><a href="Portability.html#id2711137">Red Hat Linux</a></span></dt><dt><span class="sect1"><a href="Portability.html#id2711181">AIX: Sequential Read Ahead</a></span></dt><dt><span class="sect1"><a href="Portability.html#id2711242">Solaris</a></span></dt><dd><dl><dt><span class="sect2"><a href="Portability.html#id2711248">Locking Improvements</a></span></dt><dt><span class="sect2"><a href="Portability.html#winbind-solaris9">Winbind on Solaris 9</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="Other-Clients.html">43. Samba and Other CIFS Clients</a></span></dt><dd><dl><dt><span class="sect1"><a href="Other-Clients.html#id2711424">Macintosh Clients</a></span></dt><dt><span class="sect1"><a href="Other-Clients.html#id2711508">OS2 Client</a></span></dt><dd><dl><dt><span class="sect2"><a href="Other-Clients.html#id2711513">Configuring OS/2 Warp Connect or OS/2 Warp 4</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id2711633">Configuring Other Versions of OS/2</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id2711689">Printer Driver Download for OS/2 Clients</a></span></dt></dl></dd><dt><span class="sect1"><a href="Other-Clients.html#id2711782">Windows for Workgroups</a></span></dt><dd><dl><dt><span class="sect2"><a href="Other-Clients.html#id2711788">Latest TCP/IP Stack from Microsoft</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id2711871">Delete .pwl Files After Password Change</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id2711897">Configuring Windows for Workgroups Password Handling</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id2711956">Password Case Sensitivity</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id2711987">Use TCP/IP as Default Protocol</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#speedimpr">Speed Improvement</a></span></dt></dl></dd><dt><span class="sect1"><a href="Other-Clients.html#id2712044">Windows 95/98</a></span></dt><dd><dl><dt><span class="sect2"><a href="Other-Clients.html#id2712114">Speed Improvement</a></span></dt></dl></dd><dt><span class="sect1"><a href="Other-Clients.html#id2712134">Windows 2000 Service Pack 2</a></span></dt><dt><span class="sect1"><a href="Other-Clients.html#id2712331">Windows NT 3.1</a></span></dt></dl></dd><dt><span class="chapter"><a href="speed.html">44. Samba Performance Tuning</a></span></dt><dd><dl><dt><span class="sect1"><a href="speed.html#id2712438">Comparisons</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712476">Socket Options</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712572">Read Size</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712617">Max Xmit</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712665">Log Level</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712689">Read Raw</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712756">Write Raw</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712808">Slow Logins</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712831">Client Tuning</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712852">Samba Performance Problem Due to Changing Linux Kernel</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712944">Corrupt tdb Files</a></span></dt><dt><span class="sect1"><a href="speed.html#id2713039">Samba Performance is Very Slow</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch-ldap-tls.html">45. LDAP and Transport Layer Security</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch-ldap-tls.html#s1-intro-ldap-tls">Introduction</a></span></dt><dt><span class="sect1"><a href="ch-ldap-tls.html#s1-config-ldap-tls">Configuring</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch-ldap-tls.html#s1-config-ldap-tls-certs">Generating the Certificate Authority</a></span></dt><dt><span class="sect2"><a href="ch-ldap-tls.html#s1-config-ldap-tls-server">Generating the Server Certificate</a></span></dt><dt><span class="sect2"><a href="ch-ldap-tls.html#s1-config-ldap-tls-install">Installing the Certificates</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch-ldap-tls.html#s1-test-ldap-tls">Testing</a></span></dt><dt><span class="sect1"><a href="ch-ldap-tls.html#s1-int-ldap-tls">Troubleshooting</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch46.html">46. Samba Support</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch46.html#id2714245">Free Support</a></span></dt><dt><span class="sect1"><a href="ch46.html#id2714463">Commercial Support</a></span></dt></dl></dd><dt><span class="chapter"><a href="DNSDHCP.html">47. DNS and DHCP Configuration Guide</a></span></dt><dd><dl><dt><span class="sect1"><a href="DNSDHCP.html#id2714623">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="DNSDHCP.html#id2714801">Example Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="DNSDHCP.html#id2714892">Dynamic DNS</a></span></dt><dt><span class="sect2"><a href="DNSDHCP.html#DHCP">DHCP Server</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bugreport.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="compiling.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 40. Reporting Bugs </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 41. How to Compile Samba</td></tr></table></div></body></html>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part VI. Reference Section</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="bugreport.html" title="Chapter 40. Reporting Bugs"><link rel="next" href="compiling.html" title="Chapter 41. How to Compile Samba"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part VI. Reference Section</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bugreport.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="compiling.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="Appendix"></a>Part VI. Reference Section</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="compiling.html">41. How to Compile Samba</a></span></dt><dd><dl><dt><span class="sect1"><a href="compiling.html#id466211">Access Samba Source Code via Subversion</a></span></dt><dd><dl><dt><span class="sect2"><a href="compiling.html#id466217">Introduction</a></span></dt><dt><span class="sect2"><a href="compiling.html#id466255">Subversion Access to samba.org</a></span></dt></dl></dd><dt><span class="sect1"><a href="compiling.html#id466427">Accessing the Samba Sources via rsync and ftp</a></span></dt><dt><span class="sect1"><a href="compiling.html#id466494">Verifying Samba's PGP Signature</a></span></dt><dt><span class="sect1"><a href="compiling.html#id466623">Building the Binaries</a></span></dt><dd><dl><dt><span class="sect2"><a href="compiling.html#id466846">Compiling Samba with Active Directory Support</a></span></dt></dl></dd><dt><span class="sect1"><a href="compiling.html#startingSamba">Starting the <span class="application">smbd</span> <span class="application">nmbd</span> and <span class="application">winbindd</span></a></span></dt><dd><dl><dt><span class="sect2"><a href="compiling.html#id467095">Starting from inetd.conf</a></span></dt><dt><span class="sect2"><a href="compiling.html#id467302">Alternative: Starting <span class="application">smbd</span> as a Daemon</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="Portability.html">42. Portability</a></span></dt><dd><dl><dt><span class="sect1"><a href="Portability.html#id467664">HPUX</a></span></dt><dt><span class="sect1"><a href="Portability.html#id467759">SCO UNIX</a></span></dt><dt><span class="sect1"><a href="Portability.html#id467791">DNIX</a></span></dt><dt><span class="sect1"><a href="Portability.html#id467920">Red Hat Linux</a></span></dt><dt><span class="sect1"><a href="Portability.html#id467959">AIX: Sequential Read Ahead</a></span></dt><dt><span class="sect1"><a href="Portability.html#id468013">Solaris</a></span></dt><dd><dl><dt><span class="sect2"><a href="Portability.html#id468019">Locking Improvements</a></span></dt><dt><span class="sect2"><a href="Portability.html#winbind-solaris9">Winbind on Solaris 9</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="Other-Clients.html">43. Samba and Other CIFS Clients</a></span></dt><dd><dl><dt><span class="sect1"><a href="Other-Clients.html#id468182">Macintosh Clients</a></span></dt><dt><span class="sect1"><a href="Other-Clients.html#id468258">OS2 Client</a></span></dt><dd><dl><dt><span class="sect2"><a href="Other-Clients.html#id468263">Configuring OS/2 Warp Connect or OS/2 Warp 4</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id468374">Configuring Other Versions of OS/2</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id468424">Printer Driver Download for OS/2 Clients</a></span></dt></dl></dd><dt><span class="sect1"><a href="Other-Clients.html#id468507">Windows for Workgroups</a></span></dt><dd><dl><dt><span class="sect2"><a href="Other-Clients.html#id468513">Latest TCP/IP Stack from Microsoft</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id468591">Delete .pwl Files After Password Change</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id468612">Configuring Windows for Workgroups Password Handling</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id468666">Password Case Sensitivity</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id468694">Use TCP/IP as Default Protocol</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#speedimpr">Speed Improvement</a></span></dt></dl></dd><dt><span class="sect1"><a href="Other-Clients.html#id468745">Windows 95/98</a></span></dt><dd><dl><dt><span class="sect2"><a href="Other-Clients.html#id468809">Speed Improvement</a></span></dt></dl></dd><dt><span class="sect1"><a href="Other-Clients.html#id468827">Windows 2000 Service Pack 2</a></span></dt><dt><span class="sect1"><a href="Other-Clients.html#id469006">Windows NT 3.1</a></span></dt></dl></dd><dt><span class="chapter"><a href="speed.html">44. Samba Performance Tuning</a></span></dt><dd><dl><dt><span class="sect1"><a href="speed.html#id469111">Comparisons</a></span></dt><dt><span class="sect1"><a href="speed.html#id469140">Socket Options</a></span></dt><dt><span class="sect1"><a href="speed.html#id469225">Read Size</a></span></dt><dt><span class="sect1"><a href="speed.html#id469265">Max Xmit</a></span></dt><dt><span class="sect1"><a href="speed.html#id469307">Log Level</a></span></dt><dt><span class="sect1"><a href="speed.html#id469329">Read Raw</a></span></dt><dt><span class="sect1"><a href="speed.html#id469389">Write Raw</a></span></dt><dt><span class="sect1"><a href="speed.html#id469438">Slow Logins</a></span></dt><dt><span class="sect1"><a href="speed.html#id469459">Client Tuning</a></span></dt><dt><span class="sect1"><a href="speed.html#id469477">Samba Performance Problem Due to Changing Linux Kernel</a></span></dt><dt><span class="sect1"><a href="speed.html#id469561">Corrupt tdb Files</a></span></dt><dt><span class="sect1"><a href="speed.html#id469650">Samba Performance is Very Slow</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch-ldap-tls.html">45. LDAP and Transport Layer Security</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch-ldap-tls.html#s1-intro-ldap-tls">Introduction</a></span></dt><dt><span class="sect1"><a href="ch-ldap-tls.html#s1-config-ldap-tls">Configuring</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch-ldap-tls.html#s1-config-ldap-tls-certs">Generating the Certificate Authority</a></span></dt><dt><span class="sect2"><a href="ch-ldap-tls.html#s1-config-ldap-tls-server">Generating the Server Certificate</a></span></dt><dt><span class="sect2"><a href="ch-ldap-tls.html#s1-config-ldap-tls-install">Installing the Certificates</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch-ldap-tls.html#s1-test-ldap-tls">Testing</a></span></dt><dt><span class="sect1"><a href="ch-ldap-tls.html#s1-int-ldap-tls">Troubleshooting</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch46.html">46. Samba Support</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch46.html#id470724">Free Support</a></span></dt><dt><span class="sect1"><a href="ch46.html#id470922">Commercial Support</a></span></dt></dl></dd><dt><span class="chapter"><a href="DNSDHCP.html">47. DNS and DHCP Configuration Guide</a></span></dt><dd><dl><dt><span class="sect1"><a href="DNSDHCP.html#id471060">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="DNSDHCP.html#id471220">Example Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="DNSDHCP.html#id471296">Dynamic DNS</a></span></dt><dt><span class="sect2"><a href="DNSDHCP.html#DHCP">DHCP Server</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bugreport.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="compiling.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 40. Reporting Bugs </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 41. How to Compile Samba</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/Backup.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/Backup.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/Backup.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,33 +1,33 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 31. Backup Techniques</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="unicode.html" title="Chapter 30. Unicode/Charsets"><link rel="next" href="SambaHA.html" title="Chapter 32. High Availability"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 31. Backup Techniques</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="unicode.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="SambaHA.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="Backup"></a>Chapter 31. Backup Techniques</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="Backup.html#id2693704">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="Backup.html#id2693749">Discussion of Backup Solutions</a></span></dt><dd><dl><dt><span class="sect2"><a href="Backup.html#id2693846">BackupPC</a></span></dt><dt><span class="sect2"><a href="Backup.html#id2694017">Rsync</a></span></dt><dt><span class="sect2"><a href="Backup.html#id2694187">Amanda</a></span></dt><dt><span class="sect2"><a href="Backup.html#id2694236">BOBS: Browseable Online Backup System</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2693704"></a>Features and Benefits</h2></div></div></div><p>
-<a class="indexterm" name="id2693712"></a>
-<a class="indexterm" name="id2693719"></a>
-<a class="indexterm" name="id2693726"></a>
-<a class="indexterm" name="id2693733"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 31. Backup Techniques</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="unicode.html" title="Chapter 30. Unicode/Charsets"><link rel="next" href="SambaHA.html" title="Chapter 32. High Availability"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 31. Backup Techniques</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="unicode.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="SambaHA.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="Backup"></a>Chapter 31. Backup Techniques</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="Backup.html#id451585">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="Backup.html#id451626">Discussion of Backup Solutions</a></span></dt><dd><dl><dt><span class="sect2"><a href="Backup.html#id451712">BackupPC</a></span></dt><dt><span class="sect2"><a href="Backup.html#id451875">Rsync</a></span></dt><dt><span class="sect2"><a href="Backup.html#id452035">Amanda</a></span></dt><dt><span class="sect2"><a href="Backup.html#id452079">BOBS: Browseable Online Backup System</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id451585"></a>Features and Benefits</h2></div></div></div><p>
+<a class="indexterm" name="id451593"></a>
+<a class="indexterm" name="id451600"></a>
+<a class="indexterm" name="id451606"></a>
+<a class="indexterm" name="id451613"></a>
 The Samba project is over 10 years old. During the early history
 of Samba, UNIX administrators were its key implementors. UNIX administrators
 use UNIX system tools to backup UNIX system files. Over the past
 4 years, an increasing number of Microsoft network administrators have
 taken an interest in Samba. This is reflected in the questions about backup
 in general on the Samba mailing lists.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2693749"></a>Discussion of Backup Solutions</h2></div></div></div><p>
-<a class="indexterm" name="id2693757"></a>
-<a class="indexterm" name="id2693764"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id451626"></a>Discussion of Backup Solutions</h2></div></div></div><p>
+<a class="indexterm" name="id451634"></a>
+<a class="indexterm" name="id451640"></a>
 During discussions at a Microsoft Windows training course, one of
 the pro-UNIX delegates stunned the class when he pointed out that Windows
 NT4 is limiting compared with UNIX. He likened UNIX to a Meccano set
 that has an unlimited number of tools that are simple, efficient,
 and, in combination, capable of achieving any desired outcome.
 </p><p>
-<a class="indexterm" name="id2693780"></a>
-<a class="indexterm" name="id2693787"></a>
+<a class="indexterm" name="id451653"></a>
+<a class="indexterm" name="id451660"></a>
 One of the Windows networking advocates retorted that if she wanted a
 Meccano set, she would buy one. She made it clear that a complex single
 tool that does more than is needed but does it with a clear purpose and
 intent is preferred by some like her.
 </p><p>
-<a class="indexterm" name="id2693801"></a>
-<a class="indexterm" name="id2693808"></a>
-<a class="indexterm" name="id2693815"></a>
+<a class="indexterm" name="id451672"></a>
+<a class="indexterm" name="id451679"></a>
+<a class="indexterm" name="id451686"></a>
 Please note that all information here is provided as is and without recommendation
 of fitness or suitability. The network administrator is strongly encouraged to
 perform due diligence research before implementing any backup solution, whether free
@@ -38,31 +38,31 @@
 www.allmerchants.com</a>.
 </p><p>
 The following three free software projects might also merit consideration.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2693846"></a>BackupPC</h3></div></div></div><p>
-	<a class="indexterm" name="id2693854"></a>
-<a class="indexterm" name="id2693861"></a>
-<a class="indexterm" name="id2693867"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id451712"></a>BackupPC</h3></div></div></div><p>
+	<a class="indexterm" name="id451720"></a>
+<a class="indexterm" name="id451727"></a>
+<a class="indexterm" name="id451734"></a>
 	BackupPC version 2.0.0 has been released on <a class="ulink" href="http://backuppc.sourceforge.net" target="_top">SourceForge</a>.
 	 New features include support for <code class="literal">rsync/rsyncd</code> and internationalization of the CGI interface
 	(including English, French, Spanish, and German).
 	</p><p>
-<a class="indexterm" name="id2693892"></a>
-<a class="indexterm" name="id2693899"></a>
-<a class="indexterm" name="id2693906"></a>
-<a class="indexterm" name="id2693912"></a>
-<a class="indexterm" name="id2693919"></a>
-<a class="indexterm" name="id2693926"></a>
-<a class="indexterm" name="id2693932"></a>
-<a class="indexterm" name="id2693939"></a>
+<a class="indexterm" name="id451757"></a>
+<a class="indexterm" name="id451764"></a>
+<a class="indexterm" name="id451771"></a>
+<a class="indexterm" name="id451777"></a>
+<a class="indexterm" name="id451784"></a>
+<a class="indexterm" name="id451791"></a>
+<a class="indexterm" name="id451797"></a>
+<a class="indexterm" name="id451804"></a>
 	BackupPC is a high-performance Perl-based package for backing up Linux,
 	UNIX, and Windows PCs and laptops to a server's disk. BackupPC is highly
 	configurable and easy to install and maintain. SMB (via smbclient),
 	<code class="literal">tar</code> over <code class="literal">rsh/ssh</code>, or <code class="literal">rsync/rsyncd</code>
 	 are used to extract client data.
 	</p><p>
-<a class="indexterm" name="id2693971"></a>
-<a class="indexterm" name="id2693978"></a>
-<a class="indexterm" name="id2693984"></a>
+<a class="indexterm" name="id451834"></a>
+<a class="indexterm" name="id451840"></a>
+<a class="indexterm" name="id451847"></a>
 	Given the ever-decreasing cost of disks and RAID systems, it is now
 	practical and cost effective to backup a large number of machines onto
 	a server's local disk or network storage. This is what BackupPC does.
@@ -71,24 +71,24 @@
 	space), compression, and a comprehensive CGI interface that allows users
 	to browse backups and restore files.
 	</p><p>
-<a class="indexterm" name="id2694005"></a>
+<a class="indexterm" name="id451864"></a>
 	BackupPC is free software distributed under a GNU GPL license.
 	BackupPC runs on Linux/UNIX/freenix servers and has been tested
 	on Linux, UNIX, Windows 9x/Me, Windows 98, Windows 200x, Windows XP, and Mac OSX clients.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2694017"></a>Rsync</h3></div></div></div><p>
-<a class="indexterm" name="id2694025"></a>
-<a class="indexterm" name="id2694032"></a>
-<a class="indexterm" name="id2694038"></a>
-<a class="indexterm" name="id2694045"></a>
-<a class="indexterm" name="id2694052"></a>
-<a class="indexterm" name="id2694059"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id451875"></a>Rsync</h3></div></div></div><p>
+<a class="indexterm" name="id451883"></a>
+<a class="indexterm" name="id451889"></a>
+<a class="indexterm" name="id451896"></a>
+<a class="indexterm" name="id451903"></a>
+<a class="indexterm" name="id451910"></a>
+<a class="indexterm" name="id451916"></a>
 	<code class="literal">rsync</code> is a flexible program for efficiently copying files or
 		directory trees.</p><p><code class="literal">rsync</code> has many options to select which files will be copied
 	  and how they are to be transferred. It may be used as an
 	  alternative to <code class="literal">ftp, http, scp</code>, or <code class="literal">rcp</code>.</p><p>
-<a class="indexterm" name="id2694098"></a>
-<a class="indexterm" name="id2694105"></a>
-<a class="indexterm" name="id2694112"></a>
+<a class="indexterm" name="id451953"></a>
+<a class="indexterm" name="id451960"></a>
+<a class="indexterm" name="id451967"></a>
 	The rsync remote-update protocol allows rsync to transfer just
 	  the differences between two sets of files across the network link,
 	  using an efficient checksum-search algorithm described in the
@@ -107,10 +107,10 @@
 		  </p></li><li><p>
 		    Support for anonymous or authenticated rsync servers (ideal for
 		    mirroring).
-		  </p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2694187"></a>Amanda</h3></div></div></div><p>
-	<a class="indexterm" name="id2694195"></a>
-<a class="indexterm" name="id2694202"></a>
-<a class="indexterm" name="id2694209"></a>
+		  </p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id452035"></a>Amanda</h3></div></div></div><p>
+	<a class="indexterm" name="id452043"></a>
+<a class="indexterm" name="id452050"></a>
+<a class="indexterm" name="id452056"></a>
 	Amanda, the Advanced Maryland Automatic Network Disk Archiver, is a backup system that
 	allows the administrator of a LAN to set up a single master backup server to back up
 	multiple hosts to a single large capacity tape drive. Amanda uses native dump and/or
@@ -119,8 +119,8 @@
 	</p><p>
 	For more information regarding Amanda, please check the <a class="ulink" href="http://www.amanda.org/" target="_top">
 	www.amanda.org/ site</a>.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2694236"></a>BOBS: Browseable Online Backup System</h3></div></div></div><p>
-	<a class="indexterm" name="id2694244"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id452079"></a>BOBS: Browseable Online Backup System</h3></div></div></div><p>
+	<a class="indexterm" name="id452087"></a>
 	Browseable Online Backup System (BOBS) is a complete online backup system. Uses large
 	disks for storing backups and lets users browse the files using a Web browser. Handles
 	some special files like AppleDouble and icon files.

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/CUPS-printing.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/CUPS-printing.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/CUPS-printing.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,8 +1,8 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 22. CUPS Printing Support</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="classicalprinting.html" title="Chapter 21. Classical Printing Support"><link rel="next" href="VFS.html" title="Chapter 23. Stackable VFS modules"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 22. CUPS Printing Support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="classicalprinting.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="VFS.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="CUPS-printing"></a>Chapter 22. CUPS Printing Support</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Kurt</span> <span class="surname">Pfeifle</span></h3><div class="affiliation"><span class="orgname">Danka Deutschland GmbH <br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:kpfeifle at danka.de">kpfeifle at danka.de</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Ciprian</span> <span class="surname">Vizitiu</span></h3><span class="contrib">drawings</span> <div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:CVizitiu at gbif.org">CVizitiu at gbif.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><span class="contrib">drawings</span> <div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate"> (27 Jan 2004) </p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="CUPS-printing.html#id2655275">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2655281">Features and Benefits</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2655341">Overview</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2655466">Basic CUPS Support Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2655581">Linking smbd with libcups.so</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2655828">Simple <code class="filename">smb.conf</code> Settings for CUPS</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2656061">More Complex CUPS <code class="filename">smb.conf</code> Settings</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2656439">Advanced Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2656456">Central Spooling vs. &#8220;<span class="quote">Peer-to-Peer</span>&#8221; Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2656507">Raw Print Serving: Vendor Drivers on Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2656742">Installation of Windows Client Drivers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#cups-raw">Explicitly Enable &#8220;<span class="quote">raw</span>&#8221; Printing for <span class="emphasis"><em>application/octet-stream</em></span></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2657029">Driver Upload Methods</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2657150">Advanced Intelligent Printing with PostScript Driver Download</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#gdipost">GDI on Windows, PostScript on UNIX</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2657342">Windows Drivers, GDI, and EMF</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2657520">UNIX Printfile Conversion and GUI Basics</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#post-and-ghost">PostScript and Ghostscript</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2657878">Ghostscript: The Software RIP for Non-PostScript Printers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2658032">PostScript Printer Description (PPD) Specification</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2658122">Using Windows-Formatted Vendor PPDs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2658242">CUPS Also Uses PPDs for Non-PostScript Printers</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2658281">The CUPS Filtering Architecture</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2658945">MIME Type Conversion Rules</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2659153">Filtering  Overview</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2659310">Prefilters</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2659497">pstops</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2659665">pstoraster</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2659934">imagetops and imagetoraster</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2660019">rasterto [printers specific]</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2660239">CUPS Backends</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2660577">The Role of <em class="parameter"><code>cupsomatic/foomatic</code></em></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2660813">The Complete Picture</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2660826"><code class="filename">mime.convs</code></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2660894">&#8220;<span class="quote">Raw</span>&#8221; Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2661002">application/octet-stream Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2661282">PostScript Printer Descriptions for Non-PostScript Printers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2661565"><span class="emphasis"><em>cupsomatic/foomatic-rip</em></span> Versus <span class="emphasis"><em>Native CUPS</em></span> Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2661902">Examples for Filtering Chains</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2662330">Sources of CUPS Drivers/PPDs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2662453">Printing with Interface Scripts</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2662547">Network Printing (Purely Windows)</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2662564">From Windows Clients to an NT Print Server</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2662627">Driver Execution on the Client</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2662698">Driver Execution on the Server</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2662803">Network Printing (Windows Clients and UNIX/Samba Print
-Servers)</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2662821">From Windows Clients to a CUPS/Samba Print Server</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2663012">Samba Receiving Job-Files and Passing Them to CUPS</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2663091">Network PostScript RIP</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2663181">PPDs for Non-PS Printers on UNIX</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2663226">PPDs for Non-PS Printers on Windows</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2663294">Windows Terminal Servers (WTS) as CUPS Clients</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2663308">Printer Drivers Running in &#8220;<span class="quote">Kernel Mode</span>&#8221; Cause Many
-Problems</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2663347">Workarounds Impose Heavy Limitations</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2663364">CUPS: A &#8220;<span class="quote">Magical Stone</span>&#8221;?</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2663407">PostScript Drivers with No Major Problems, Even in Kernel
-Mode</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2663495">Configuring CUPS for Driver Download</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2663517"><span class="emphasis"><em>cupsaddsmb</em></span>: The Unknown Utility</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2663615">Prepare Your <code class="filename">smb.conf</code> for <code class="literal">cupsaddsmb</code></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2663896">CUPS &#8220;<span class="quote">PostScript Driver for Windows NT/200x/XP</span>&#8221;</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2664135">Recognizing Different Driver Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2664253">Acquiring the Adobe Driver Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2664279">ESP Print Pro PostScript Driver for Windows NT/200x/XP</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2664341">Caveats to Be Considered</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2664641">Windows CUPS PostScript Driver Versus Adobe Driver</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2664859">Run cupsaddsmb (Quiet Mode)</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2664999">Run cupsaddsmb with Verbose Output</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2665190">Understanding cupsaddsmb</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2665335">How to Recognize If cupsaddsmb Completed Successfully</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2665457">cupsaddsmb with a Samba PDC</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2665538">cupsaddsmb Flowchart</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2665619">Installing the PostScript Driver on a Client</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#cups-avoidps1">Avoiding Critical PostScript Driver Settings on the Client</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2665854">Installing PostScript Driver Files Manually Using rpcclient</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2666028">A Check of the rpcclient man Page</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2666199">Understanding the rpcclient man Page</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2666304">Producing an Example by Querying a Windows Box</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2666436">Requirements for adddriver and setdriver to Succeed</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2666661">Manual Driver Installation in 15 Steps</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2667620">Troubleshooting Revisited</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2667763">The Printing <code class="filename">*.tdb</code> Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2667965">Trivial Database Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2668033">Binary Format</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2668099">Losing <code class="filename">*.tdb</code> Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2668150">Using <code class="literal">tdbbackup</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2668269">CUPS Print Drivers from Linuxprinting.org</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2668444">foomatic-rip and Foomatic Explained</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2669256">foomatic-rip and Foomatic PPD Download and Installation</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2669728">Page Accounting with CUPS</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2669763">Setting Up Quotas</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2669817">Correct and Incorrect Accounting</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2669864">Adobe and CUPS PostScript Drivers for Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2670005">The page_log File Syntax</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2670149">Possible Shortcomings</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2670215">Future Developments</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2670255">Other Accounting Tools</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2670269">Additional Material</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id2670486">Autodeletion or Preservation of CUPS Spool Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2670562">CUPS Configuration Settings Explained</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2670647">Preconditions</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2670786">Manual Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2670834">Printing from CUPS to Windows-Attached Printers</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id2671129">More CUPS Filtering Chains</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id2671241">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2671246">Windows 9x/Me Client Can't Install Driver</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#root-ask-loop">&#8220;<span class="quote">cupsaddsmb</span>&#8221; Keeps Asking for Root Password in Never-ending Loop</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671323">&#8220;<span class="quote">cupsaddsmb</span>&#8221; or &#8220;<span class="quote">rpcclient addriver</span>&#8221; Emit Error</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671361">&#8220;<span class="quote">cupsaddsmb</span>&#8221; Errors</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671435">Client Can't Connect to Samba Printer</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671459">New Account Reconnection from Windows 200x/XP Troubles</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671551">Avoid Being Connected to the Samba Server as the Wrong User</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671602">Upgrading to CUPS Drivers from Adobe Drivers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671639">Can't Use &#8220;<span class="quote">cupsaddsmb</span>&#8221; on Samba Server, Which Is a PDC</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671675">Deleted Windows 200x Printer Driver Is Still Shown</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671710">Windows 200x/XP Local Security Policies</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671743">Administrator Cannot Install Printers for All Local Users</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671784">Print Change, Notify Functions on NT Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671810">Windows XP SP1</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671856">Print Options for All Users Can't Be Set on Windows 200x/XP</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2672139">Most Common Blunders in Driver Settings on Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2672194"><code class="literal">cupsaddsmb</code> Does Not Work with Newly Installed Printer</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2672244">Permissions on <code class="filename">/var/spool/samba/</code> Get Reset After Each Reboot</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2672342">Print Queue Called &#8220;<span class="quote">lp</span>&#8221; Mishandles Print Jobs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2672412">Location of Adobe PostScript Driver Files for &#8220;<span class="quote">cupsaddsmb</span>&#8221;</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2672465">Overview of the CUPS Printing Processes</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2655275"></a>Introduction</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2655281"></a>Features and Benefits</h3></div></div></div><p>
-<a class="indexterm" name="id2655289"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 22. CUPS Printing Support</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="classicalprinting.html" title="Chapter 21. Classical Printing Support"><link rel="next" href="VFS.html" title="Chapter 23. Stackable VFS modules"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 22. CUPS Printing Support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="classicalprinting.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="VFS.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="CUPS-printing"></a>Chapter 22. CUPS Printing Support</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Kurt</span> <span class="surname">Pfeifle</span></h3><div class="affiliation"><span class="orgname">Danka Deutschland GmbH <br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:kpfeifle at danka.de">kpfeifle at danka.de</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Ciprian</span> <span class="surname">Vizitiu</span></h3><span class="contrib">drawings</span> <div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:CVizitiu at gbif.org">CVizitiu at gbif.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><span class="contrib">drawings</span> <div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate"> (27 Jan 2004) </p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="CUPS-printing.html#id416419">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id416425">Features and Benefits</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id416476">Overview</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id416588">Basic CUPS Support Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id416695">Linking smbd with libcups.so</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id416919">Simple <code class="filename">smb.conf</code> Settings for CUPS</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id417155">More Complex CUPS <code class="filename">smb.conf</code> Settings</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id417537">Advanced Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id417551">Central Spooling vs. &#8220;<span class="quote">Peer-to-Peer</span>&#8221; Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id417596">Raw Print Serving: Vendor Drivers on Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id417810">Installation of Windows Client Drivers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#cups-raw">Explicitly Enable &#8220;<span class="quote">raw</span>&#8221; Printing for <span class="emphasis"><em>application/octet-stream</em></span></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id418073">Driver Upload Methods</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id418184">Advanced Intelligent Printing with PostScript Driver Download</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#gdipost">GDI on Windows, PostScript on UNIX</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id418358">Windows Drivers, GDI, and EMF</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id418524">UNIX Printfile Conversion and GUI Basics</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#post-and-ghost">PostScript and Ghostscript</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id418848">Ghostscript: The Software RIP for Non-PostScript Printers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id418988">PostScript Printer Description (PPD) Specification</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id419056">Using Windows-Formatted Vendor PPDs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id419165">CUPS Also Uses PPDs for Non-PostScript Printers</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id419200">The CUPS Filtering Architecture</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id419826">MIME Type Conversion Rules</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id420021">Filtering  Overview</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id420169">Prefilters</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id420346">pstops</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id420506">pstoraster</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id420757">imagetops and imagetoraster</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id420837">rasterto [printers specific]</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id421049">CUPS Backends</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id421357">The Role of <em class="parameter"><code>cupsomatic/foomatic</code></em></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id421572">The Complete Picture</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id421583"><code class="filename">mime.convs</code></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id421644">&#8220;<span class="quote">Raw</span>&#8221; Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id421744">application/octet-stream Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id422005">PostScript Printer Descriptions for Non-PostScript Printers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id422269"><span class="emphasis"><em>cupsomatic/foomatic-rip</em></span> Versus <span class="emphasis"><em>Native CUPS</em></span> Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id422583">Examples for Filtering Chains</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id422984">Sources of CUPS Drivers/PPDs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423093">Printing with Interface Scripts</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id423172">Network Printing (Purely Windows)</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id423186">From Windows Clients to an NT Print Server</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423245">Driver Execution on the Client</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423310">Driver Execution on the Server</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id423409">Network Printing (Windows Clients and UNIX/Samba Print
+Servers)</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id423425">From Windows Clients to a CUPS/Samba Print Server</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423600">Samba Receiving Job-Files and Passing Them to CUPS</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id423671">Network PostScript RIP</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id423751">PPDs for Non-PS Printers on UNIX</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423788">PPDs for Non-PS Printers on Windows</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id423848">Windows Terminal Servers (WTS) as CUPS Clients</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id423860">Printer Drivers Running in &#8220;<span class="quote">Kernel Mode</span>&#8221; Cause Many
+Problems</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423891">Workarounds Impose Heavy Limitations</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423905">CUPS: A &#8220;<span class="quote">Magical Stone</span>&#8221;?</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423941">PostScript Drivers with No Major Problems, Even in Kernel
+Mode</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id424020">Configuring CUPS for Driver Download</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id424038"><span class="emphasis"><em>cupsaddsmb</em></span>: The Unknown Utility</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id424126">Prepare Your <code class="filename">smb.conf</code> for <code class="literal">cupsaddsmb</code></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id424414">CUPS &#8220;<span class="quote">PostScript Driver for Windows NT/200x/XP</span>&#8221;</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id424635">Recognizing Different Driver Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id424746">Acquiring the Adobe Driver Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id424766">ESP Print Pro PostScript Driver for Windows NT/200x/XP</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id424821">Caveats to Be Considered</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425100">Windows CUPS PostScript Driver Versus Adobe Driver</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425295">Run cupsaddsmb (Quiet Mode)</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425429">Run cupsaddsmb with Verbose Output</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425560">Understanding cupsaddsmb</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425696">How to Recognize If cupsaddsmb Completed Successfully</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425806">cupsaddsmb with a Samba PDC</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425884">cupsaddsmb Flowchart</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425962">Installing the PostScript Driver on a Client</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#cups-avoidps1">Avoiding Critical PostScript Driver Settings on the Client</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id426171">Installing PostScript Driver Files Manually Using rpcclient</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id426337">A Check of the rpcclient man Page</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id426497">Understanding the rpcclient man Page</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id426589">Producing an Example by Querying a Windows Box</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id426709">Requirements for adddriver and setdriver to Succeed</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id426920">Manual Driver Installation in 15 Steps</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id427799">Troubleshooting Revisited</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id427930">The Printing <code class="filename">*.tdb</code> Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id428129">Trivial Database Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id428191">Binary Format</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id428252">Losing <code class="filename">*.tdb</code> Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id428299">Using <code class="literal">tdbbackup</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id428409">CUPS Print Drivers from Linuxprinting.org</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id428570">foomatic-rip and Foomatic Explained</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id429283">foomatic-rip and Foomatic PPD Download and Installation</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id429705">Page Accounting with CUPS</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id429735">Setting Up Quotas</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id429785">Correct and Incorrect Accounting</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id429818">Adobe and CUPS PostScript Drivers for Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id429949">The page_log File Syntax</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id430085">Possible Shortcomings</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id430143">Future Developments</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id430178">Other Accounting Tools</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id430191">Additional Material</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id430379">Autodeletion or Preservation of CUPS Spool Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id430451">CUPS Configuration Settings Explained</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id430528">Preconditions</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id430657">Manual Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id430701">Printing from CUPS to Windows-Attached Printers</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id430957">More CUPS Filtering Chains</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id431066">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id431072">Windows 9x/Me Client Can't Install Driver</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#root-ask-loop">&#8220;<span class="quote">cupsaddsmb</span>&#8221; Keeps Asking for Root Password in Never-ending Loop</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431141">&#8220;<span class="quote">cupsaddsmb</span>&#8221; or &#8220;<span class="quote">rpcclient addriver</span>&#8221; Emit Error</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431178">&#8220;<span class="quote">cupsaddsmb</span>&#8221; Errors</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431248">Client Can't Connect to Samba Printer</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431271">New Account Reconnection from Windows 200x/XP Troubles</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431352">Avoid Being Connected to the Samba Server as the Wrong User</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431398">Upgrading to CUPS Drivers from Adobe Drivers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431432">Can't Use &#8220;<span class="quote">cupsaddsmb</span>&#8221; on Samba Server, Which Is a PDC</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431467">Deleted Windows 200x Printer Driver Is Still Shown</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431498">Windows 200x/XP Local Security Policies</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431529">Administrator Cannot Install Printers for All Local Users</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431566">Print Change, Notify Functions on NT Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431589">Win XP-SP1</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431631">Print Options for All Users Can't Be Set on Windows 200x/XP</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431898">Most Common Blunders in Driver Settings on Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431951"><code class="literal">cupsaddsmb</code> Does Not Work with Newly Installed Printer</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431997">Permissions on <code class="filename">/var/spool/samba/</code> Get Reset After Each Reboot</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id432090">Print Queue Called &#8220;<span class="quote">lp</span>&#8221; Mishandles Print Jobs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id432153">Location of Adobe PostScript Driver Files for &#8220;<span class="quote">cupsaddsmb</span>&#8221;</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id432204">Overview of the CUPS Printing Processes</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id416419"></a>Introduction</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id416425"></a>Features and Benefits</h3></div></div></div><p>
+<a class="indexterm" name="id416433"></a>
 		The Common UNIX Print System (<a class="ulink" href="http://www.cups.org/" target="_top">CUPS</a>)
 		has become quite popular. All major Linux distributions now ship it as their default printing
 		system. To many, it is still a mystical tool. Mostly, it just works.  People tend to regard
@@ -11,21 +11,21 @@
 		<a class="link" href="classicalprinting.html" title="Chapter 21. Classical Printing Support">Classical Printing</a>, which contains much information
 		that is also relevant to CUPS.
 		</p><p>
-<a class="indexterm" name="id2655324"></a>
+<a class="indexterm" name="id416463"></a>
 		CUPS sports quite a few unique and powerful features. While its basic functions may be grasped quite
 		easily, they are also new. Because it is different from other, more traditional printing systems, it is best
 		not to try to apply any prior knowledge about printing to this new system. Rather, try to understand CUPS from
 		the beginning. This documentation will lead you to a complete understanding of CUPS. Let's start with the most
 		basic things first.
-		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2655341"></a>Overview</h3></div></div></div><p>
-<a class="indexterm" name="id2655349"></a>
-<a class="indexterm" name="id2655356"></a>
-<a class="indexterm" name="id2655363"></a>
-<a class="indexterm" name="id2655370"></a>
-<a class="indexterm" name="id2655376"></a>
-<a class="indexterm" name="id2655386"></a>
-<a class="indexterm" name="id2655396"></a>
-<a class="indexterm" name="id2655402"></a>
+		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id416476"></a>Overview</h3></div></div></div><p>
+<a class="indexterm" name="id416484"></a>
+<a class="indexterm" name="id416490"></a>
+<a class="indexterm" name="id416497"></a>
+<a class="indexterm" name="id416504"></a>
+<a class="indexterm" name="id416511"></a>
+<a class="indexterm" name="id416520"></a>
+<a class="indexterm" name="id416530"></a>
+<a class="indexterm" name="id416536"></a>
 	CUPS is more than just a print spooling system. It is a complete printer management system that
 	complies with the new Internet Printing Protocol (IPP). IPP is an industry and Internet Engineering Task Force
 	(IETF) standard for network printing. Many of its functions can be managed remotely (or locally) via a Web
@@ -33,19 +33,19 @@
 	traditional command line and several more modern GUI interfaces (GUI interfaces developed by third parties,
 	like KDE's overwhelming <a class="ulink" href="http://printing.kde.org/" target="_top">KDEPrint</a>).
 	</p><p>
-<a class="indexterm" name="id2655428"></a>
-<a class="indexterm" name="id2655435"></a>
+<a class="indexterm" name="id416557"></a>
+<a class="indexterm" name="id416564"></a>
 	CUPS allows creation of <span class="emphasis"><em>raw</em></span> printers (i.e., no print file format translation) as
 	well as <span class="emphasis"><em>smart</em></span> printers (i.e., CUPS does file format conversion as required for the
 	printer). In many ways, this gives CUPS capabilities similar to the MS Windows print monitoring system. Of
 	course, if you are a CUPS advocate, you would argue that CUPS is better! In any case, let us now explore how
 	to configure CUPS for interfacing with MS Windows print clients via Samba.
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2655466"></a>Basic CUPS Support Configuration</h2></div></div></div><p>
-<a class="indexterm" name="id2655474"></a>
-<a class="indexterm" name="id2655480"></a>
-<a class="indexterm" name="id2655487"></a>
-<a class="indexterm" name="id2655494"></a>
-<a class="indexterm" name="id2655501"></a>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id416588"></a>Basic CUPS Support Configuration</h2></div></div></div><p>
+<a class="indexterm" name="id416596"></a>
+<a class="indexterm" name="id416603"></a>
+<a class="indexterm" name="id416609"></a>
+<a class="indexterm" name="id416616"></a>
+<a class="indexterm" name="id416623"></a>
 Printing with CUPS in the most basic <code class="filename">smb.conf</code> setup in Samba-3.0 (as was true for 2.2.x) requires just two
 parameters: <a class="link" href="smb.conf.5.html#PRINTING">printing = cups</a> and <a class="link" href="smb.conf.5.html#PRINTCAP">printcap = cups</a>. CUPS does not need a printcap file.  However, the
 <code class="filename">cupsd.conf</code> configuration file knows of two related directives that control how such a
@@ -55,16 +55,16 @@
 print. Make sure CUPS is set to generate and maintain a printcap file. For details, see <code class="literal">man
 cupsd.conf</code> and other CUPS-related documentation, like the wealth of documents regarding the CUPS
 server itself available from the <a class="ulink" href="http://localhost:631/documentation.html" target="_top">CUPS</a> web site.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2655581"></a>Linking smbd with libcups.so</h3></div></div></div><p>
-<a class="indexterm" name="id2655589"></a>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id416695"></a>Linking smbd with libcups.so</h3></div></div></div><p>
+<a class="indexterm" name="id416703"></a>
 	Samba has a special relationship to CUPS. Samba can be compiled with CUPS library support.
 	Most recent installations have this support enabled. By default, CUPS linking is compiled
 	into smbd and other Samba binaries. Of course, you can use CUPS even
 	if Samba is not linked against <code class="filename">libcups.so</code>  but
 	there are some differences in required or supported configuration.
 	</p><p>
-<a class="indexterm" name="id2655614"></a>
-<a class="indexterm" name="id2655621"></a>
+<a class="indexterm" name="id416725"></a>
+<a class="indexterm" name="id416732"></a>
 	When Samba is compiled and linked with <code class="filename">libcups</code>, <a class="link" href="smb.conf.5.html#PRINTCAP">printcap = cups</a>
 	uses the CUPS API to list printers, submit jobs, query queues, and so on. Otherwise it maps to the System V
 	commands with an additional <code class="literal">-oraw</code> option for printing. On a Linux
@@ -79,7 +79,7 @@
 [....]
 </pre><p>
 	</p><p>
-<a class="indexterm" name="id2655691"></a>
+<a class="indexterm" name="id416796"></a>
 	The line <code class="computeroutput">libcups.so.2 =&gt; /usr/lib/libcups.so.2 (0x40123000)</code> shows
 	there is CUPS support compiled into this version of Samba. If this is the case, and printing = cups
 	is set, then <span class="emphasis"><em>any otherwise manually set print command in <code class="filename">smb.conf</code> is ignored</em></span>.
@@ -95,14 +95,14 @@
 	<a class="link" href="smb.conf.5.html#LPRMCOMMAND">lprm command</a>,
 	<a class="link" href="smb.conf.5.html#QUEUEPAUSECOMMAND">queuepause command</a> and
 	<a class="link" href="smb.conf.5.html#QUEUERESUMECOMMAND">queue resume command</a>).
-	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2655828"></a>Simple <code class="filename">smb.conf</code> Settings for CUPS</h3></div></div></div><p>
+	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id416919"></a>Simple <code class="filename">smb.conf</code> Settings for CUPS</h3></div></div></div><p>
 	To summarize, <a class="link" href="CUPS-printing.html#cups-exam-simple" title="Example 22.1. Simplest Printing-Related smb.conf">the Simplest Printing-Related 
 	<code class="filename">smb.conf</code> file</a> shows the simplest printing-related setup for <code class="filename">smb.conf</code> to 
 	enable basic CUPS support:
-	</p><div class="example"><a name="cups-exam-simple"></a><p class="title"><b>Example 22.1. Simplest Printing-Related smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2655888"></a><em class="parameter"><code>load printers = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2655899"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id2655911"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2655932"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id2655944"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2655955"></a><em class="parameter"><code>browseable = no</code></em></td></tr><tr><td><a class="indexterm" name="id2655967"></a><em class="parameter"><code>guest ok = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2655978"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id2655990"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2656002"></a><em class="parameter"><code>printer admin = root, @ntadmins, @smbprintadm</code></em></td></tr></table></div></div><br class="example-break"><p>
-<a class="indexterm" name="id2656017"></a>
-<a class="indexterm" name="id2656024"></a>
-<a class="indexterm" name="id2656031"></a>
+	</p><div class="example"><a name="cups-exam-simple"></a><p class="title"><b>Example 22.1. Simplest Printing-Related smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id416979"></a><em class="parameter"><code>load printers = yes</code></em></td></tr><tr><td><a class="indexterm" name="id416990"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id417002"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id417022"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id417034"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id417045"></a><em class="parameter"><code>browseable = no</code></em></td></tr><tr><td><a class="indexterm" name="id417057"></a><em class="parameter"><code>public = yes</code></em></td></tr><tr><td><a class="indexterm" name="id417068"></a><em class="parameter"><code>guest ok = yes</code></em></td></tr><tr><td><a class="indexterm" name="id417080"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id417091"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id417102"></a><em class="parameter"><code>printer admin = root, @ntadmins</code></em></td></tr></table></div></div><br class="example-break"><p>
+<a class="indexterm" name="id417117"></a>
+<a class="indexterm" name="id417124"></a>
+<a class="indexterm" name="id417131"></a>
 	This is all you need for basic printing setup for CUPS. It will print all graphic, text, PDF, and PostScript
 	files submitted from Windows clients. However, most of your Windows users would not know how to send these
 	kinds of files to print without opening a GUI application. Windows clients tend to have local printer drivers
@@ -112,25 +112,25 @@
 	hooked between the application's native format and the print data stream. If the backend printer is not a
 	PostScript device, the print data stream is &#8220;<span class="quote">binary,</span>&#8221; sensible only for the target printer. Read
 	on to learn what problem this may cause and how to avoid it.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2656061"></a>More Complex CUPS <code class="filename">smb.conf</code> Settings</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id417155"></a>More Complex CUPS <code class="filename">smb.conf</code> Settings</h3></div></div></div><p>
 	<a class="link" href="CUPS-printing.html#overridesettings" title="Example 22.2. Overriding Global CUPS Settings for One Printer">The Overriding Global CUPS Settings for One Printer example</a> 
 	is a slightly more complex printing-related setup for <code class="filename">smb.conf</code>. It enables general CUPS printing
 	support for all printers, but defines one printer share, which is set up differently. 
-	</p><div class="example"><a name="overridesettings"></a><p class="title"><b>Example 22.2. Overriding Global CUPS Settings for One Printer</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2656118"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id2656130"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td><a class="indexterm" name="id2656142"></a><em class="parameter"><code>load printers = yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2656162"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id2656174"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2656186"></a><em class="parameter"><code>guest ok = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2656197"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id2656209"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2656220"></a><em class="parameter"><code>printer admin = root, @ntadmins, @smbprintadm</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[special_printer]</code></em></td></tr><tr><td><a class="indexterm" name="id2656242"></a><em class="parameter"><code>comment = A special printer with his own settings</code></em></td></tr><tr><td><a class="indexterm" name="id2656254"></a><em class="parameter"><code>path = /var/spool/samba-special</code></em></td></tr><tr><td><a class="indexterm" name="id2656266"></a><em class="parameter"><code>printing = sysv</code></em></td></tr><tr><td><a class="indexterm" name="id2656277"></a><em class="parameter"><code>printcap = lpstat</code></em></td></tr><tr><td><a class="indexterm" name="id2656289"></a><em class="parameter"><code>print command = echo "NEW: `date`: printfile %f" &gt;&gt; /tmp/smbprn.log ; echo "     `date`: p-%p s-%s f-%f" &gt;&gt; /tmp/smbprn.log ; echo "     `date`: j-%j J-%J z-%z c-%c" &gt;&gt; /tmp/smbprn.log ; rm %f </code></em></td></tr><tr><td><a class="indexterm" name="id2656306"></a><em class="parameter"><code>guest ok = no</code></em></td></tr><tr><td><a class="indexterm" name="id2656317"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id2656329"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2656340"></a><em class="parameter"><code>printer admin = kurt</code></em></td></tr><tr><td><a class="indexterm" name="id2656352"></a><em class="parameter"><code>hosts deny = 0.0.0.0</code></em></td></tr><tr><td><a class="indexterm" name="id2656364"></a><em class="parameter"><code>hosts allow = turbo_xp, 10.160.50.23, 10.160.51.60</code></em></td></tr></table></div></div><br class="example-break"><p>
+	</p><div class="example"><a name="overridesettings"></a><p class="title"><b>Example 22.2. Overriding Global CUPS Settings for One Printer</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id417208"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id417220"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td><a class="indexterm" name="id417231"></a><em class="parameter"><code>load printers = yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id417252"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id417263"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id417274"></a><em class="parameter"><code>public = yes</code></em></td></tr><tr><td><a class="indexterm" name="id417286"></a><em class="parameter"><code>guest ok = yes</code></em></td></tr><tr><td><a class="indexterm" name="id417297"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id417309"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id417320"></a><em class="parameter"><code>printer admin = root, @ntadmins</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[special_printer]</code></em></td></tr><tr><td><a class="indexterm" name="id417341"></a><em class="parameter"><code>comment = A special printer with his own settings</code></em></td></tr><tr><td><a class="indexterm" name="id417353"></a><em class="parameter"><code>path = /var/spool/samba-special</code></em></td></tr><tr><td><a class="indexterm" name="id417364"></a><em class="parameter"><code>printing = sysv</code></em></td></tr><tr><td><a class="indexterm" name="id417376"></a><em class="parameter"><code>printcap = lpstat</code></em></td></tr><tr><td><a class="indexterm" name="id417387"></a><em class="parameter"><code>print command = echo "NEW: `date`: printfile %f" &gt;&gt; /tmp/smbprn.log ; echo "     `date`: p-%p s-%s f-%f" &gt;&gt; /tmp/smbprn.log ; echo "     `date`: j-%j J-%J z-%z c-%c" &gt;&gt; /tmp/smbprn.log ; rm %f </code></em></td></tr><tr><td><a class="indexterm" name="id417401"></a><em class="parameter"><code>public = no</code></em></td></tr><tr><td><a class="indexterm" name="id417412"></a><em class="parameter"><code>guest ok = no</code></em></td></tr><tr><td><a class="indexterm" name="id417424"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id417435"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id417447"></a><em class="parameter"><code>printer admin = kurt</code></em></td></tr><tr><td><a class="indexterm" name="id417458"></a><em class="parameter"><code>hosts deny = 0.0.0.0</code></em></td></tr><tr><td><a class="indexterm" name="id417470"></a><em class="parameter"><code>hosts allow = turbo_xp, 10.160.50.23, 10.160.51.60</code></em></td></tr></table></div></div><br class="example-break"><p>
 	This special share is only for testing purposes. It does not write the print job to a file. It just logs the job parameters
 	known to Samba into the <code class="filename">/tmp/smbprn.log</code> file and deletes the job-file. Moreover, the
 	<a class="link" href="smb.conf.5.html#PRINTERADMIN">printer admin</a> of this share is &#8220;<span class="quote">kurt</span>&#8221; (not the &#8220;<span class="quote">@ntadmins</span>&#8221; group),
 	guest access is not allowed, the share isn't published to the Network Neighborhood (so you need to know it is there), and it
 	allows access from only three hosts. To prevent CUPS from kicking in and taking over the print jobs for that share, we need to set
 	<a class="link" href="smb.conf.5.html#PRINTING">printing = sysv</a> and <a class="link" href="smb.conf.5.html#PRINTCAP">printcap = lpstat</a>.
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2656439"></a>Advanced Configuration</h2></div></div></div><p>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id417537"></a>Advanced Configuration</h2></div></div></div><p>
 	Before we delve into all the configuration options, let us clarify a few points. <span class="emphasis"><em>Network printing
 	needs to be organized and set up correctly</em></span>. This frequently doesn't happen. Legacy systems or small
 	business LAN environments often lack design and good housekeeping.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2656456"></a>Central Spooling vs. &#8220;<span class="quote">Peer-to-Peer</span>&#8221; Printing</h3></div></div></div><p>
-<a class="indexterm" name="id2656468"></a>
-	<a class="indexterm" name="id2656474"></a>
-	<a class="indexterm" name="id2656483"></a>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id417551"></a>Central Spooling vs. &#8220;<span class="quote">Peer-to-Peer</span>&#8221; Printing</h3></div></div></div><p>
+<a class="indexterm" name="id417563"></a>
+	<a class="indexterm" name="id417569"></a>
+	<a class="indexterm" name="id417579"></a>
 	Many small office or home networks, as well as badly organized larger environments, allow each client a direct
 	access to available network printers. This is generally a bad idea. It often blocks one client's access to the
 	printer when another client's job is printing. It might freeze the first client's application while it is
@@ -138,9 +138,9 @@
 	pages mixed with each other. A better concept is the use of a print server: it routes all jobs through one
 	central system, which responds immediately, takes jobs from multiple concurrent clients, and transfers them to
 	the printer(s) in the correct order.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2656507"></a>Raw Print Serving: Vendor Drivers on Windows Clients</h3></div></div></div><p>
-	<a class="indexterm" name="id2656515"></a>
-	<a class="indexterm" name="id2656521"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id417596"></a>Raw Print Serving: Vendor Drivers on Windows Clients</h3></div></div></div><p>
+	<a class="indexterm" name="id417604"></a>
+	<a class="indexterm" name="id417611"></a>
 	Most traditionally configured UNIX print servers acting on behalf of
 	Samba's Windows clients represented a really simple setup. Their only
 	task was to manage the &#8220;<span class="quote">raw</span>&#8221; spooling of all jobs handed to them by
@@ -149,8 +149,8 @@
 	device. In this case, a native (vendor-supplied) Windows printer driver needs to
 	be installed on each and every client for the target device.
 	</p><p>
-<a class="indexterm" name="id2656543"></a>
-<a class="indexterm" name="id2656550"></a>
+<a class="indexterm" name="id417628"></a>
+<a class="indexterm" name="id417635"></a>
 	It is possible to configure CUPS, Samba, and your Windows clients in the
 	same traditional and simple way. When CUPS printers are configured
 	for raw print-through mode operation, it is the responsibility of the
@@ -164,15 +164,15 @@
 	This is achieved by installation of the printer as if it were physically
 	attached to the Windows client. You then redirect output to a raw network
 	print queue. This procedure may be followed to achieve this:
-	</p><div class="procedure"><a name="id2656574"></a><p class="title"><b>Procedure 22.1. Configuration Steps for Raw CUPS Printing Support</b></p><ol type="1"><li><p>
-<a class="indexterm" name="id2656586"></a>
+	</p><div class="procedure"><a name="id417653"></a><p class="title"><b>Procedure 22.1. Configuration Steps for Raw CUPS Printing Support</b></p><ol type="1"><li><p>
+<a class="indexterm" name="id417664"></a>
 		Edit <code class="filename">/etc/cups/mime.types</code> to uncomment the line
 		near the end of the file that has:
 </p><pre class="screen">
 #application/octet-...
 </pre><p>
 		</p></li><li><p>
-<a class="indexterm" name="id2656613"></a>
+<a class="indexterm" name="id417690"></a>
 		Do the same for the file <code class="filename">/etc/cups/mime.convs</code>.
 		</p></li><li><p>
 		Add a raw printer using the Web interface. Point your browser at
@@ -193,27 +193,25 @@
 		you have configured above. Example: <code class="constant">\\server\raw_q</code>.
 		Here, the name <code class="constant">raw_q</code> is the name you gave the print
 		queue in the CUPS environment.
-		</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2656742"></a>Installation of Windows Client Drivers</h3></div></div></div><p>
+		</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id417810"></a>Installation of Windows Client Drivers</h3></div></div></div><p>
 	The printer drivers on the Windows clients may be installed
 	in two functionally different ways:
 	</p><div class="itemizedlist"><ul type="disc"><li><p>Manually install the drivers locally on each client,
 	one by one; this yields the old LanMan style
 	printing and uses a <code class="filename">\\sambaserver\printershare</code>
 	type of connection.</p></li><li><p>
-	<a class="indexterm" name="id2656771"></a>
+	<a class="indexterm" name="id417837"></a>
 			Deposit and prepare the drivers (for later download) on
 			the print server (Samba); this enables the clients to use
 	&#8220;<span class="quote">Point'n'Print</span>&#8221; to get drivers semi-automatically installed the
 	first time they access the printer; with this method NT/200x/XP
 	clients use the <span class="emphasis"><em>SPOOLSS/MS-RPC</em></span>
 	type printing calls.</p></li></ul></div><p>
-	The second method is recommended for use over the first as it reduces the
-	administrative efforts and prevents that different versions of the drivers
-	are used accidentally.
+	The second method is recommended for use over the first.
 	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="cups-raw"></a>Explicitly Enable &#8220;<span class="quote">raw</span>&#8221; Printing for <span class="emphasis"><em>application/octet-stream</em></span></h3></div></div></div><p>
-	<a class="indexterm" name="id2656818"></a>
-	<a class="indexterm" name="id2656824"></a>
-	<a class="indexterm" name="id2656831"></a>
+	<a class="indexterm" name="id417877"></a>
+	<a class="indexterm" name="id417884"></a>
+	<a class="indexterm" name="id417891"></a>
 	If you use the first option (drivers are installed on the client
 	side), there is one setting to take care of: CUPS needs to be told
 	that it should allow &#8220;<span class="quote">raw</span>&#8221; printing of deliberate (binary) file
@@ -225,10 +223,10 @@
 </p><pre class="programlisting">
 application/octet-stream
 </pre><p>
-	<a class="indexterm" name="id2656886"></a>
-	<a class="indexterm" name="id2656893"></a>
+	<a class="indexterm" name="id417941"></a>
+	<a class="indexterm" name="id417948"></a>
 	In <code class="filename">/etc/cups/mime.convs</code>, have this line:
-	<a class="indexterm" name="id2656907"></a>
+	<a class="indexterm" name="id417961"></a>
 </p><pre class="programlisting">
 application/octet-stream   application/vnd.cups-raw   0   - 
 </pre><p>
@@ -239,8 +237,8 @@
 	Editing the <code class="filename">mime.convs</code> and the <code class="filename">mime.types</code> file does
 	not <span class="emphasis"><em>enforce</em></span> &#8220;<span class="quote">raw</span>&#8221; printing, it only <span class="emphasis"><em>allows</em></span> it.
 	</p></div><p><b>Background. </b>
-	<a class="indexterm" name="id2656970"></a>
-<a class="indexterm" name="id2656978"></a>
+	<a class="indexterm" name="id418022"></a>
+<a class="indexterm" name="id418029"></a>
 	That CUPS is a more security-aware printing system than traditional ones does not by default allow a user to
 	send deliberate (possibly binary) data to printing devices. This could be easily abused to launch a
 	&#8220;<span class="quote">Denial of Service</span>&#8221; attack on your printer(s), causing at least the loss of a lot of paper and
@@ -254,11 +252,11 @@
 	locally installed. If you are not interested in background information about
 	more advanced CUPS/Samba printing, simply skip the remaining sections
 	of this chapter.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2657029"></a>Driver Upload Methods</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id418073"></a>Driver Upload Methods</h3></div></div></div><p>
 	This section describes three familiar methods, plus one new one, by which
 	printer drivers may be uploaded.
 	</p><p>
-	<a class="indexterm" name="id2657042"></a>
+	<a class="indexterm" name="id418085"></a>
 	If you want to use the MS-RPC-type printing, you must upload the
 	drivers onto the Samba server first (<em class="parameter"><code>[print$]</code></em>
 	share). For a discussion on how to deposit printer drivers on the
@@ -267,27 +265,27 @@
 	chapter</a> of this book. There you will find a description or reference to
 	three methods of preparing the client drivers on the Samba server:
 	</p><div class="itemizedlist"><ul type="disc"><li><p>
-		<a class="indexterm" name="id2657079"></a>
+		<a class="indexterm" name="id418118"></a>
 		The GUI, &#8220;<span class="quote">Add Printer Wizard</span>&#8221; <span class="emphasis"><em>upload-from-a-Windows-client</em></span> method.
 		</p></li><li><p>
 		The command line, &#8220;<span class="quote">smbclient/rpcclient</span>&#8221; upload-from-a-UNIX-workstation method.
 		</p></li><li><p>
-		<a class="indexterm" name="id2657108"></a>
+		<a class="indexterm" name="id418145"></a>
 		The Imprints tool set method.
 		</p></li></ul></div><p> 
-<a class="indexterm" name="id2657119"></a>
+<a class="indexterm" name="id418156"></a>
 	These three methods apply to CUPS all the same. The <code class="literal">cupsaddsmb</code> utility is a new and more
 	convenient way to load the Windows drivers into Samba and is provided if you use CUPS.
 	</p><p>
 	<code class="literal">cupsaddsmb</code> is discussed in much detail later in this chapter. But we first
 	explore the CUPS filtering system and compare the Windows and UNIX printing architectures.
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2657150"></a>Advanced Intelligent Printing with PostScript Driver Download</h2></div></div></div><p>
-	<a class="indexterm" name="id2657159"></a>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id418184"></a>Advanced Intelligent Printing with PostScript Driver Download</h2></div></div></div><p>
+	<a class="indexterm" name="id418192"></a>
 	We now know how to set up a &#8220;<span class="quote">dump</span>&#8221; print server, that is, a server that spools
 	print jobs &#8220;<span class="quote">raw</span>&#8221;, leaving the print data untouched.
 	</p><p>
 	You might need to set up CUPS in a smarter way. The reasons could be manifold:
-	</p><a class="indexterm" name="id2657183"></a><a class="indexterm" name="id2657190"></a><a class="indexterm" name="id2657197"></a><div class="itemizedlist"><ul type="disc"><li><p>Maybe your boss wants to get monthly statistics: Which
+	</p><a class="indexterm" name="id418215"></a><a class="indexterm" name="id418221"></a><a class="indexterm" name="id418228"></a><div class="itemizedlist"><ul type="disc"><li><p>Maybe your boss wants to get monthly statistics: Which
 	printer did how many pages? What was the average data size of a job?
 	What was the average print run per day? What are the typical hourly
 	peaks in printing? Which department prints how much?</p></li><li><p>Maybe you are asked to set up a print quota system:
@@ -303,28 +301,28 @@
 	Windows and UNIX printing, then a description of the
 	CUPS filtering system, how it works, and how you can tweak it.
 	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="gdipost"></a>GDI on Windows, PostScript on UNIX</h3></div></div></div><p>
-	<a class="indexterm" name="id2657266"></a>
-	<a class="indexterm" name="id2657273"></a>
+	<a class="indexterm" name="id418289"></a>
+	<a class="indexterm" name="id418296"></a>
 	Network printing is one of the most complicated and error-prone
 	day-to-day tasks any user or administrator may encounter. This is
 	true for all OS platforms, and there are reasons it is so.
 	</p><p>
-	<a class="indexterm" name="id2657286"></a>
-	<a class="indexterm" name="id2657293"></a>
-<a class="indexterm" name="id2657299"></a>
-<a class="indexterm" name="id2657306"></a>
-<a class="indexterm" name="id2657313"></a>
+	<a class="indexterm" name="id418307"></a>
+	<a class="indexterm" name="id418314"></a>
+<a class="indexterm" name="id418320"></a>
+<a class="indexterm" name="id418327"></a>
+<a class="indexterm" name="id418334"></a>
 	You can't expect to throw just any file format at a printer and have it get printed. A file format conversion
 	must take place. The problem is that there is no common standard for print file formats across all
 	manufacturers and printer types. While PostScript (trademark held by Adobe) and, to an extent, PCL (trademark
 	held by Hewlett-Packard) have developed into semi-official &#8220;<span class="quote">standards</span>&#8221; by being the most widely
 	used page description languages (PDLs), there are still many manufacturers who &#8220;<span class="quote">roll their own</span>&#8221;
 	(their reasons may be unacceptable license fees for using printer-embedded PostScript interpreters, and so on).
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2657342"></a>Windows Drivers, GDI, and EMF</h3></div></div></div><p>
-	<a class="indexterm" name="id2657350"></a>
-	<a class="indexterm" name="id2657356"></a>
-	<a class="indexterm" name="id2657363"></a>
-<a class="indexterm" name="id2657370"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id418358"></a>Windows Drivers, GDI, and EMF</h3></div></div></div><p>
+	<a class="indexterm" name="id418365"></a>
+	<a class="indexterm" name="id418372"></a>
+	<a class="indexterm" name="id418378"></a>
+<a class="indexterm" name="id418385"></a>
 	In Windows OS, the format conversion job is done by the printer drivers. On MS Windows OS platforms all
 	application programmers have at their disposal a built-in API, the graphical device interface (GDI), as part
 	and parcel of the OS itself to base themselves on. This GDI core is used as one common unified ground for all
@@ -335,21 +333,21 @@
 	the GDI, often produces a file format called Enhanced MetaFile (EMF). The EMF is processed by the printer
 	driver and converted to the printer-specific file format.
 	</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-	<a class="indexterm" name="id2657405"></a>
-<a class="indexterm" name="id2657412"></a>
-<a class="indexterm" name="id2657418"></a>
+	<a class="indexterm" name="id418413"></a>
+<a class="indexterm" name="id418420"></a>
+<a class="indexterm" name="id418426"></a>
 	To the GDI foundation in MS Windows, Apple has chosen to put paper and screen output on a common foundation
-	for its (BSD-UNIX-based, did you know?) Mac OS X and Darwin operating <a class="indexterm" name="id2657428"></a> <a class="indexterm" name="id2657435"></a>
-	<a class="indexterm" name="id2657442"></a> <a class="indexterm" name="id2657449"></a> systems.
+	for its (BSD-UNIX-based, did you know?) Mac OS X and Darwin operating <a class="indexterm" name="id418435"></a> <a class="indexterm" name="id418442"></a>
+	<a class="indexterm" name="id418448"></a> <a class="indexterm" name="id418455"></a> systems.
 	Apple's <span class="emphasis"><em>core graphic engine</em></span> uses a <span class="emphasis"><em>PDF</em></span> derivative for all display work.
 	</p></div><p>
 	The example in <a class="link" href="CUPS-printing.html#1small" title="Figure 22.1. Windows Printing to a Local Printer.">Windows Printing to a Local Printer</a> illustrates local Windows
 	printing.
-	</p><div class="figure"><a name="1small"></a><p class="title"><b>Figure 22.1. Windows Printing to a Local Printer.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/1small.png" alt="Windows Printing to a Local Printer."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2657520"></a>UNIX Printfile Conversion and GUI Basics</h3></div></div></div><p>
-	<a class="indexterm" name="id2657528"></a>
-	<a class="indexterm" name="id2657535"></a>
-	<a class="indexterm" name="id2657542"></a>
-	<a class="indexterm" name="id2657548"></a>
+	</p><div class="figure"><a name="1small"></a><p class="title"><b>Figure 22.1. Windows Printing to a Local Printer.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/1small.png" alt="Windows Printing to a Local Printer."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id418524"></a>UNIX Printfile Conversion and GUI Basics</h3></div></div></div><p>
+	<a class="indexterm" name="id418532"></a>
+	<a class="indexterm" name="id418538"></a>
+	<a class="indexterm" name="id418545"></a>
+	<a class="indexterm" name="id418552"></a>
 	In UNIX and Linux, there is no comparable layer built into the OS kernel(s) or the X (screen display) server.
 	Every application is responsible for itself to create its print output. Fortunately, most use PostScript and
 	that at least gives some common ground. Unfortunately, there are many different levels of quality for this
@@ -363,16 +361,16 @@
 	unfavorable inheritance up to the present day by looking into the various &#8220;<span class="quote">font</span>&#8221; directories on
 	your system; there are separate ones for fonts used for X display and fonts to be used on paper.
 	</p><p><b>Background. </b>
-	<a class="indexterm" name="id2657598"></a>
-<a class="indexterm" name="id2657605"></a>
-<a class="indexterm" name="id2657612"></a>
-<a class="indexterm" name="id2657619"></a>
-<a class="indexterm" name="id2657625"></a>
-<a class="indexterm" name="id2657632"></a>
-<a class="indexterm" name="id2657639"></a>
-<a class="indexterm" name="id2657646"></a>
-<a class="indexterm" name="id2657653"></a>
-<a class="indexterm" name="id2657660"></a>
+	<a class="indexterm" name="id418592"></a>
+<a class="indexterm" name="id418599"></a>
+<a class="indexterm" name="id418606"></a>
+<a class="indexterm" name="id418612"></a>
+<a class="indexterm" name="id418619"></a>
+<a class="indexterm" name="id418626"></a>
+<a class="indexterm" name="id418633"></a>
+<a class="indexterm" name="id418640"></a>
+<a class="indexterm" name="id418646"></a>
+<a class="indexterm" name="id418653"></a>
 	The PostScript programming language is an &#8220;<span class="quote">invention</span>&#8221; by Adobe, but its specifications have been
 	published extensively. Its strength lies in its powerful abilities to describe graphical objects (fonts,
 	shapes, patterns, lines, curves, and dots), their attributes (color, linewidth), and the way to manipulate
@@ -384,11 +382,11 @@
 	interpreted by a rasterizer. Rasterizers produce pixel images, which may be displayed on screen by a viewer
 	program or on paper by a printer.
 	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="post-and-ghost"></a>PostScript and Ghostscript</h3></div></div></div><p>
-	<a class="indexterm" name="id2657709"></a>
-	<a class="indexterm" name="id2657716"></a>
-	<a class="indexterm" name="id2657725"></a>
-<a class="indexterm" name="id2657734"></a>
-<a class="indexterm" name="id2657741"></a>
+	<a class="indexterm" name="id418694"></a>
+	<a class="indexterm" name="id418700"></a>
+	<a class="indexterm" name="id418709"></a>
+<a class="indexterm" name="id418718"></a>
+<a class="indexterm" name="id418725"></a>
 	So UNIX is lacking a common ground for printing on paper and displaying on screen. Despite this unfavorable
 	legacy for UNIX, basic printing is fairly easy if you have PostScript printers at your disposal. The reason is
 	that these devices have a built-in PostScript language &#8220;<span class="quote">interpreter,</span>&#8221; also called a raster image
@@ -397,31 +395,31 @@
 	commands into a bitmap picture as you see it on paper, in a resolution as done by your printer. This is no
 	different than PostScript printing a file from a Windows origin.
 	</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-	<a class="indexterm" name="id2657770"></a>
-<a class="indexterm" name="id2657777"></a>
-<a class="indexterm" name="id2657784"></a>
+	<a class="indexterm" name="id418748"></a>
+<a class="indexterm" name="id418755"></a>
+<a class="indexterm" name="id418761"></a>
 	Traditional UNIX programs and printing systems  while using PostScript  are largely not
 	PPD-aware. PPDs are &#8220;<span class="quote">PostScript Printer Description</span>&#8221; files. They enable you to specify and
 	control all options a printer supports: duplexing, stapling, and punching. Therefore, UNIX users for a long
 	time couldn't choose many of the supported device and job options, unlike Windows or Apple users. But now
 	there is CUPS. as illustrated in <a class="link" href="CUPS-printing.html#2small" title="Figure 22.2. Printing to a PostScript Printer.">Printing to a PostScript Printer</a>.
 	</p></div><div class="figure"><a name="2small"></a><p class="title"><b>Figure 22.2. Printing to a PostScript Printer.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/2small.png" alt="Printing to a PostScript Printer."></div></div></div><br class="figure-break"><p>
-	<a class="indexterm" name="id2657863"></a>
+	<a class="indexterm" name="id418835"></a>
 	However, there are other types of printers out there. These do not know how to print PostScript. They use
 	their own PDL, often proprietary. To print to them is much more demanding. Since your UNIX applications mostly
 	produce PostScript, and since these devices do not understand PostScript, you need to convert the print files
 	to a format suitable for your printer on the host before you can send it away.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2657878"></a>Ghostscript: The Software RIP for Non-PostScript Printers</h3></div></div></div><p>
-	<a class="indexterm" name="id2657887"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id418848"></a>Ghostscript: The Software RIP for Non-PostScript Printers</h3></div></div></div><p>
+	<a class="indexterm" name="id418856"></a>
 	Here is where Ghostscript kicks in. Ghostscript is the traditional (and quite powerful) PostScript interpreter
 	used on UNIX platforms. It is a RIP in software, capable of doing a <span class="emphasis"><em>lot</em></span> of file format
 	conversions for a very broad spectrum of hardware devices as well as software file formats.  Ghostscript
 	technology and drivers are what enable PostScript printing to non-PostScript hardware. This is shown in
 	<a class="link" href="CUPS-printing.html#3small" title="Figure 22.3. Ghostscript as a RIP for Non-PostScript Printers.">Ghostscript as a RIP for Non-PostScript Printers</a>.
 	</p><div class="figure"><a name="3small"></a><p class="title"><b>Figure 22.3. Ghostscript as a RIP for Non-PostScript Printers.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/3small.png" alt="Ghostscript as a RIP for Non-PostScript Printers."></div></div></div><br class="figure-break"><div class="tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p>
-<a class="indexterm" name="id2657958"></a>
-<a class="indexterm" name="id2657964"></a>
-<a class="indexterm" name="id2657971"></a>
+<a class="indexterm" name="id418922"></a>
+<a class="indexterm" name="id418928"></a>
+<a class="indexterm" name="id418935"></a>
 	Use the &#8220;<span class="quote">gs -h</span>&#8221; command to check for all built-in &#8220;<span class="quote">devices</span>&#8221; on your Ghostscript
 	version. If you specify a parameter of <em class="parameter"><code>-sDEVICE=png256</code></em> on your Ghostscript command
 	line, you are asking Ghostscript to convert the input into a PNG file. Naming a &#8220;<span class="quote">device</span>&#8221; on the
@@ -429,14 +427,14 @@
 	input. New Ghostscript versions are released at fairly regular intervals, now by artofcode LLC. They are
 	initially put under the &#8220;<span class="quote">AFPL</span>&#8221; license, but re-released under the GNU GPL as soon as the next
 	AFPL version appears. GNU Ghostscript is probably the version installed on most Samba systems. But it has some
-	deficiencies.  <a class="indexterm" name="id2658009"></a> Therefore, ESP Ghostscript was developed as an enhancement over GNU Ghostscript,
+	deficiencies.  <a class="indexterm" name="id418968"></a> Therefore, ESP Ghostscript was developed as an enhancement over GNU Ghostscript,
 	with lots of bug-fixes, additional devices, and improvements. It is jointly maintained by developers from
-	CUPS, Gutenprint, MandrakeSoft, SuSE, Red Hat, and Debian. It includes the &#8220;<span class="quote">cups</span>&#8221; device
+	CUPS, Gimp-Print, MandrakeSoft, SuSE, Red Hat, and Debian. It includes the &#8220;<span class="quote">cups</span>&#8221; device
 	(essential to print to non-PS printers from CUPS).
-	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2658032"></a>PostScript Printer Description (PPD) Specification</h3></div></div></div><p>
-	<a class="indexterm" name="id2658040"></a>
-<a class="indexterm" name="id2658047"></a>
-<a class="indexterm" name="id2658054"></a>
+	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id418988"></a>PostScript Printer Description (PPD) Specification</h3></div></div></div><p>
+	<a class="indexterm" name="id418996"></a>
+<a class="indexterm" name="id419002"></a>
+<a class="indexterm" name="id419009"></a>
 	While PostScript in essence is a PDL to represent the page layout in a device-independent way, real-world
 	print jobs are always ending up being output on hardware with device-specific features. To take care of all
 	the differences in hardware and to allow for innovations, Adobe has specified a syntax and file format for
@@ -458,17 +456,17 @@
 	PostScript, PJL, JCL, or vendor-dependent commands) into the PostScript
 	file created by the driver.
 	</p><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p>
-	<a class="indexterm" name="id2658101"></a>
-<a class="indexterm" name="id2658107"></a>
+	<a class="indexterm" name="id419038"></a>
+<a class="indexterm" name="id419044"></a>
 	A PostScript file that was created to contain device-specific commands
 	for achieving a certain print job output (e.g., duplexed, stapled, and
 	punched) on a specific target machine may not print as expected, or
 	may not be printable at all on other models; it also may not be fit
 	for further processing by software (e.g., by a PDF distilling program).
-	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2658122"></a>Using Windows-Formatted Vendor PPDs</h3></div></div></div><p>
-<a class="indexterm" name="id2658130"></a>
-<a class="indexterm" name="id2658137"></a>
-<a class="indexterm" name="id2658144"></a>
+	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id419056"></a>Using Windows-Formatted Vendor PPDs</h3></div></div></div><p>
+<a class="indexterm" name="id419064"></a>
+<a class="indexterm" name="id419071"></a>
+<a class="indexterm" name="id419078"></a>
 	CUPS can handle all spec-compliant PPDs as supplied by the manufacturers for their PostScript models. Even if
 	a vendor does not mention our favorite OS in his or her manuals and brochures, you can safely trust this:
 	<span class="emphasis"><em>If you get the Windows NT version of the PPD, you can use it unchanged in CUPS</em></span> and thus
@@ -479,31 +477,31 @@
 	parsing and checking code enabled; in case of printing trouble, this online resource should be one of your
 	first pit stops.
 	</p></div><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p>
-	<a class="indexterm" name="id2658184"></a>
-	<a class="indexterm" name="id2658190"></a>
+	<a class="indexterm" name="id419111"></a>
+	<a class="indexterm" name="id419118"></a>
 	For real PostScript printers, <span class="emphasis"><em>do not</em></span> use the <span class="emphasis"><em>Foomatic</em></span> or
 	<span class="emphasis"><em>cupsomatic</em></span> PPDs from Linuxprinting.org. With these devices, the original vendor-provided
 	PPDs are always the first choice.
 	</p></div><div class="tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p>
-<a class="indexterm" name="id2658215"></a>
+<a class="indexterm" name="id419141"></a>
 	If you are looking for an original vendor-provided PPD of a specific device, and you know that an NT4 box (or
 	any other Windows box) on your LAN has the PostScript driver installed, just use <code class="literal">smbclient
 	//NT4-box/print\$ -U username</code> to access the Windows directory where all printer driver files are
 	stored. First look in the <code class="filename">W32X86/2</code> subdirectory for the PPD you are seeking.
-	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2658242"></a>CUPS Also Uses PPDs for Non-PostScript Printers</h3></div></div></div><p>
-<a class="indexterm" name="id2658250"></a>
-<a class="indexterm" name="id2658257"></a>
-<a class="indexterm" name="id2658264"></a>
+	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id419165"></a>CUPS Also Uses PPDs for Non-PostScript Printers</h3></div></div></div><p>
+<a class="indexterm" name="id419173"></a>
+<a class="indexterm" name="id419180"></a>
+<a class="indexterm" name="id419186"></a>
 	CUPS also uses specially crafted PPDs to handle non-PostScript printers. These PPDs are usually not available
 	from the vendors (and no, you can't just take the PPD of a PostScript printer with the same model name and
 	hope it works for the non-PostScript version too). To understand how these PPDs work for non-PS printers, we
 	first need to dive deeply into the CUPS filtering and file format conversion architecture. Stay tuned.
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2658281"></a>The CUPS Filtering Architecture</h2></div></div></div><p>
-<a class="indexterm" name="id2658290"></a>
-<a class="indexterm" name="id2658296"></a>
-<a class="indexterm" name="id2658303"></a>
-<a class="indexterm" name="id2658310"></a>
-<a class="indexterm" name="id2658317"></a>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id419200"></a>The CUPS Filtering Architecture</h2></div></div></div><p>
+<a class="indexterm" name="id419208"></a>
+<a class="indexterm" name="id419215"></a>
+<a class="indexterm" name="id419222"></a>
+<a class="indexterm" name="id419228"></a>
+<a class="indexterm" name="id419235"></a>
 The core of the CUPS filtering system is based on Ghostscript. In addition to Ghostscript, CUPS uses some
 other filters of its own. You (or your OS vendor) may have plugged in even more filters. CUPS handles all data
 file formats under the label of various MIME types. Every incoming print file is subjected to an initial
@@ -514,118 +512,118 @@
 </p><p>
 If CUPS rasterizes a PostScript file natively to a bitmap, this is done in two stages:
 </p><div class="itemizedlist"><ul type="disc"><li><p>
-<a class="indexterm" name="id2658347"></a>
-<a class="indexterm" name="id2658354"></a>
+<a class="indexterm" name="id419258"></a>
+<a class="indexterm" name="id419265"></a>
 	The first stage uses a Ghostscript device named &#8220;<span class="quote">cups</span>&#8221;
 	(this is since version 1.1.15) and produces a generic raster format
 	called &#8220;<span class="quote">CUPS raster</span>&#8221;.
 	</p></li><li><p>
-<a class="indexterm" name="id2658374"></a>
+<a class="indexterm" name="id419284"></a>
 	The second stage uses a &#8220;<span class="quote">raster driver</span>&#8221; that converts
 	the generic CUPS raster to a device-specific raster.
 	</p></li></ul></div><p>
-<a class="indexterm" name="id2658391"></a>
-<a class="indexterm" name="id2658398"></a>
-<a class="indexterm" name="id2658404"></a>
+<a class="indexterm" name="id419300"></a>
+<a class="indexterm" name="id419307"></a>
+<a class="indexterm" name="id419314"></a>
 Make sure your Ghostscript version has the &#8220;<span class="quote">cups</span>&#8221; device compiled in (check with <code class="literal">gs -h |
 grep cups</code>). Otherwise you may encounter the dreaded <code class="computeroutput">Unable to convert file
 0</code> in your CUPS error_log file. To have &#8220;<span class="quote">cups</span>&#8221; as a device in your Ghostscript,
 you either need to patch GNU Ghostscript and recompile or use
-<a class="indexterm" name="id2658435"></a><a class="ulink" href="http://www.cups.org/ghostscript.php" target="_top">ESP Ghostscript</a>. The superior alternative is ESP
+<a class="indexterm" name="id419342"></a><a class="ulink" href="http://www.cups.org/ghostscript.php" target="_top">ESP Ghostscript</a>. The superior alternative is ESP
 Ghostscript. It supports not just CUPS, but 300 other devices (while GNU Ghostscript supports only about 180).
 Because of this broad output device support, ESP Ghostscript is the first choice for non-CUPS spoolers, too.
 It is now recommended by Linuxprinting.org for all spoolers.
 </p><p>
-<a class="indexterm" name="id2658458"></a>
-<a class="indexterm" name="id2658465"></a>
-<a class="indexterm" name="id2658471"></a>
-<a class="indexterm" name="id2658478"></a>
+<a class="indexterm" name="id419362"></a>
+<a class="indexterm" name="id419368"></a>
+<a class="indexterm" name="id419375"></a>
+<a class="indexterm" name="id419382"></a>
 CUPS printers may be set up to use external rendering paths. One of the most common is provided by the
 Foomatic/cupsomatic concept from <a class="ulink" href="http://www.linuxprinting.org/" target="_top">Linuxprinting.org</a>. This
 uses the classical Ghostscript approach, doing everything in one step.  It does not use the
 &#8220;<span class="quote">cups</span>&#8221; device, but one of the many others. However, even for Foomatic/cupsomatic usage, best
-results and <a class="indexterm" name="id2658501"></a> broadest printer
+results and <a class="indexterm" name="id419401"></a> broadest printer
 model support is provided by ESP Ghostscript (more about Foomatic/cupsomatic, particularly the new version
 called now <span class="emphasis"><em>foomatic-rip</em></span>, follows).
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2658517"></a>MIME Types and CUPS Filters</h3></div></div></div><p>
-	<a class="indexterm" name="id2658525"></a>
-	<a class="indexterm" name="id2658534"></a>
-<a class="indexterm" name="id2658541"></a>
-<a class="indexterm" name="id2658548"></a>
-<a class="indexterm" name="id2658555"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id419416"></a>MIME Types and CUPS Filters</h3></div></div></div><p>
+	<a class="indexterm" name="id419424"></a>
+	<a class="indexterm" name="id419433"></a>
+<a class="indexterm" name="id419440"></a>
+<a class="indexterm" name="id419447"></a>
+<a class="indexterm" name="id419454"></a>
 	CUPS reads the file <code class="filename">/etc/cups/mime.types</code> (and all other files carrying a
 	<code class="filename">*.types</code> suffix in the same directory) upon startup. These files contain the MIME type
 	recognition rules that are applied when CUPS runs its autotyping routines. The rule syntax is explained in the
 	man page for <code class="filename">mime.types</code> and in the comments section of the
 	<code class="filename">mime.types</code> file itself. A simple rule reads like this:
-	<a class="indexterm" name="id2658592"></a>
+	<a class="indexterm" name="id419487"></a>
 </p><pre class="programlisting">
 application/pdf         pdf string(0,%PDF)
 </pre><p>
-<a class="indexterm" name="id2658605"></a>
-<a class="indexterm" name="id2658612"></a>
+<a class="indexterm" name="id419500"></a>
+<a class="indexterm" name="id419507"></a>
 	This means if a filename has a <code class="filename">.pdf</code> suffix or if the magic string
 	<span class="emphasis"><em>%PDF</em></span> is right at the beginning of the file itself (offset 0 from the start), then it is a
 	PDF file (<em class="parameter"><code>application/pdf</code></em>).  Another rule is this:
 </p><pre class="programlisting">
 application/postscript  ai eps ps string(0,%!) string(0,&lt;04&gt;%!)
 </pre><p>
-<a class="indexterm" name="id2658645"></a>
-<a class="indexterm" name="id2658652"></a>
-<a class="indexterm" name="id2658659"></a>
-<a class="indexterm" name="id2658666"></a>
-<a class="indexterm" name="id2658672"></a>
-<a class="indexterm" name="id2658679"></a>
+<a class="indexterm" name="id419537"></a>
+<a class="indexterm" name="id419544"></a>
+<a class="indexterm" name="id419551"></a>
+<a class="indexterm" name="id419557"></a>
+<a class="indexterm" name="id419564"></a>
+<a class="indexterm" name="id419571"></a>
 	If the filename has one of the suffixes <code class="filename">.ai</code>, <code class="filename">.eps</code>,
 	<code class="filename">.ps</code>, or if the file itself starts with one of the strings <span class="emphasis"><em>%!</em></span> or
 	<span class="emphasis"><em>&lt;04&gt;%!</em></span>, it is a generic PostScript file
 	(<em class="parameter"><code>application/postscript</code></em>).
 	</p><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p>
-<a class="indexterm" name="id2658723"></a>
+<a class="indexterm" name="id419613"></a>
 	Don't confuse the other mime.types files your system might be using
 	with the one in the <code class="filename">/etc/cups/</code> directory.
 	</p></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2658742"></a>
-<a class="indexterm" name="id2658749"></a>
-<a class="indexterm" name="id2658756"></a>
-<a class="indexterm" name="id2658762"></a>
-<a class="indexterm" name="id2658769"></a>
+<a class="indexterm" name="id419631"></a>
+<a class="indexterm" name="id419638"></a>
+<a class="indexterm" name="id419644"></a>
+<a class="indexterm" name="id419651"></a>
+<a class="indexterm" name="id419658"></a>
 	There is an important difference between two similar MIME types in CUPS: one is
 	<em class="parameter"><code>application/postscript</code></em>, the other is
 	<em class="parameter"><code>application/vnd.cups-postscript</code></em>. While <em class="parameter"><code>application/postscript</code></em> is
 	meant to be device-independent, job options for the file are still outside the PS file content, embedded in
-	command line or environment variables by CUPS, <em class="parameter"><code>application/vnd.cups-postscript</code></em> may have
+	command-line or environment variables by CUPS, <em class="parameter"><code>application/vnd.cups-postscript</code></em> may have
 	the job options inserted into the PostScript data itself (where applicable). The transformation of the generic
 	PostScript (<em class="parameter"><code>application/postscript</code></em>) to the device-specific version
 	(<em class="parameter"><code>application/vnd.cups-postscript</code></em>) is the responsibility of the CUPS
 	<em class="parameter"><code>pstops</code></em> filter. pstops uses information contained in the PPD to do the transformation.
 	</p></div><p>
-<a class="indexterm" name="id2658831"></a>
-<a class="indexterm" name="id2658838"></a>
-<a class="indexterm" name="id2658845"></a>
-<a class="indexterm" name="id2658852"></a>
-<a class="indexterm" name="id2658858"></a>
-<a class="indexterm" name="id2658865"></a>
-<a class="indexterm" name="id2658871"></a>
-<a class="indexterm" name="id2658878"></a>
-<a class="indexterm" name="id2658885"></a>
-<a class="indexterm" name="id2658892"></a>
-<a class="indexterm" name="id2658898"></a>
-<a class="indexterm" name="id2658905"></a>
-<a class="indexterm" name="id2658912"></a>
-<a class="indexterm" name="id2658919"></a>
-<a class="indexterm" name="id2658926"></a>
-<a class="indexterm" name="id2658933"></a>
+<a class="indexterm" name="id419714"></a>
+<a class="indexterm" name="id419721"></a>
+<a class="indexterm" name="id419728"></a>
+<a class="indexterm" name="id419734"></a>
+<a class="indexterm" name="id419741"></a>
+<a class="indexterm" name="id419747"></a>
+<a class="indexterm" name="id419754"></a>
+<a class="indexterm" name="id419760"></a>
+<a class="indexterm" name="id419767"></a>
+<a class="indexterm" name="id419774"></a>
+<a class="indexterm" name="id419781"></a>
+<a class="indexterm" name="id419788"></a>
+<a class="indexterm" name="id419794"></a>
+<a class="indexterm" name="id419801"></a>
+<a class="indexterm" name="id419808"></a>
+<a class="indexterm" name="id419815"></a>
 	CUPS can handle ASCII text, HP-GL, PDF, PostScript, DVI, and
 	many image formats (GIF, PNG, TIFF, JPEG, Photo-CD, SUN-Raster,
 	PNM, PBM, SGI-RGB, and more) and their associated MIME types
 	with its filters.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2658945"></a>MIME Type Conversion Rules</h3></div></div></div><p>
-	<a class="indexterm" name="id2658953"></a>
-	<a class="indexterm" name="id2658960"></a>
-<a class="indexterm" name="id2658967"></a>
-<a class="indexterm" name="id2658974"></a>
-<a class="indexterm" name="id2658981"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id419826"></a>MIME Type Conversion Rules</h3></div></div></div><p>
+	<a class="indexterm" name="id419834"></a>
+	<a class="indexterm" name="id419840"></a>
+<a class="indexterm" name="id419847"></a>
+<a class="indexterm" name="id419854"></a>
+<a class="indexterm" name="id419861"></a>
 	CUPS reads the file <code class="filename">/etc/cups/mime.convs</code>
 	(and all other files named with a <code class="filename">*.convs</code>
 	suffix in the same directory) upon startup. These files contain
@@ -636,44 +634,44 @@
 </p><pre class="programlisting">
 application/pdf         application/postscript   33   pdftops
 </pre><p>
-<a class="indexterm" name="id2659013"></a>
+<a class="indexterm" name="id419888"></a>
 	This means that the <em class="parameter"><code>pdftops</code></em> filter will take
 	<em class="parameter"><code>application/pdf</code></em> as input and produce
 	<em class="parameter"><code>application/postscript</code></em> as output; the virtual
 	cost of this operation is 33 CUPS-$. The next filter is more
 	expensive, costing 66 CUPS-$:
-	<a class="indexterm" name="id2659041"></a>
+	<a class="indexterm" name="id419914"></a>
 </p><pre class="programlisting">
 application/vnd.hp-HPGL application/postscript   66   hpgltops
 </pre><p>
-<a class="indexterm" name="id2659054"></a>
+<a class="indexterm" name="id419927"></a>
 	This is the <em class="parameter"><code>hpgltops</code></em>, which processes HP-GL
 	plotter files to PostScript.
-	<a class="indexterm" name="id2659068"></a>
+	<a class="indexterm" name="id419940"></a>
 </p><pre class="programlisting">
 application/octet-stream
 </pre><p>
 	Here are two more examples: 
-	<a class="indexterm" name="id2659082"></a>
-<a class="indexterm" name="id2659089"></a>
-<a class="indexterm" name="id2659096"></a>
-<a class="indexterm" name="id2659102"></a>
+	<a class="indexterm" name="id419953"></a>
+<a class="indexterm" name="id419960"></a>
+<a class="indexterm" name="id419967"></a>
+<a class="indexterm" name="id419974"></a>
 </p><pre class="programlisting">
 application/x-shell     application/postscript   33    texttops
 text/plain              application/postscript   33    texttops
 </pre><p>
-<a class="indexterm" name="id2659117"></a>
+<a class="indexterm" name="id419987"></a>
 	The last two examples name the <em class="parameter"><code>texttops</code></em> filter to work on
 	<em class="parameter"><code>text/plain</code></em> as well as on <em class="parameter"><code>application/x-shell</code></em>. (Hint: This
 	differentiation is needed for the syntax highlighting feature of <em class="parameter"><code>texttops</code></em>).
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2659153"></a>Filtering  Overview</h3></div></div></div><p>
-	<a class="indexterm" name="id2659160"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id420021"></a>Filtering  Overview</h3></div></div></div><p>
+	<a class="indexterm" name="id420029"></a>
 	There are many more combinations named in <code class="filename">mime.convs</code>. However, you are not limited to use
 	the ones predefined there. You can plug in any filter you like to the CUPS framework. It must meet, or must be
 	made to meet, some minimal requirements. If you find (or write) a cool conversion filter of some kind, make
 	sure it complies with what CUPS needs and put in the right lines in <code class="filename">mime.types</code> and
 	<code class="filename">mime.convs</code>; then it will work seamlessly inside CUPS.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2659193"></a>Filter Requirements</h4></div></div></div><p>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id420058"></a>Filter Requirements</h4></div></div></div><p>
 	The &#8220;<span class="quote">CUPS requirements</span>&#8221; for filters are simple. Take filenames or <code class="filename">stdin</code> as
 	input and write to <code class="filename">stdout</code>. They should take these arguments:
 	</p><div class="variablelist"><dl><dt><span class="term">printer</span></dt><dd><p>
@@ -689,27 +687,27 @@
 			</p></dd><dt><span class="term">options</span></dt><dd><p>
 			The job options.
 			</p></dd><dt><span class="term">filename</span></dt><dd><p>
-			(optionally) The print request file (if missing, filters expect data
+			(optionally) The print request file (if missing, filters expected data
 			fed through <code class="filename">stdin</code>). In most cases, it is easy to
 			write a simple wrapper script around existing filters to make them work with CUPS.
-			</p></dd></dl></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2659310"></a>Prefilters</h3></div></div></div><p>
-	<a class="indexterm" name="id2659317"></a>
-<a class="indexterm" name="id2659324"></a>
-<a class="indexterm" name="id2659331"></a>
+			</p></dd></dl></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id420169"></a>Prefilters</h3></div></div></div><p>
+	<a class="indexterm" name="id420177"></a>
+<a class="indexterm" name="id420184"></a>
+<a class="indexterm" name="id420191"></a>
 	As previously stated, PostScript is the central file format to any UNIX-based
 	printing system. From PostScript, CUPS generates raster data to feed
 	non-PostScript printers.
 	</p><p>
-<a class="indexterm" name="id2659344"></a>
-<a class="indexterm" name="id2659351"></a>
-<a class="indexterm" name="id2659358"></a>
-<a class="indexterm" name="id2659365"></a>
-<a class="indexterm" name="id2659371"></a>
-<a class="indexterm" name="id2659378"></a>
-<a class="indexterm" name="id2659385"></a>
-<a class="indexterm" name="id2659391"></a>
-<a class="indexterm" name="id2659398"></a>
-<a class="indexterm" name="id2659405"></a>
+<a class="indexterm" name="id420202"></a>
+<a class="indexterm" name="id420209"></a>
+<a class="indexterm" name="id420216"></a>
+<a class="indexterm" name="id420223"></a>
+<a class="indexterm" name="id420229"></a>
+<a class="indexterm" name="id420236"></a>
+<a class="indexterm" name="id420242"></a>
+<a class="indexterm" name="id420249"></a>
+<a class="indexterm" name="id420256"></a>
+<a class="indexterm" name="id420263"></a>
 	But what happens if you send one of the supported non-PS formats to print? Then CUPS runs
 	&#8220;<span class="quote">prefilters</span>&#8221; on these input formats to generate PostScript first. There are prefilters to create
 	PostScript from ASCII text, PDF, DVI, or HP-GL. The outcome of these filters is always of MIME type
@@ -719,14 +717,14 @@
 	MIME type <em class="parameter"><code>application/vnd.cups-postscript</code></em> (not application/postscript), meaning it has
 	the print options already embedded into the file. This is shown in <a class="link" href="CUPS-printing.html#4small" title="Figure 22.4. Prefiltering in CUPS to Form PostScript.">Prefiltering in
 	CUPS to Form PostScript</a>.
-	</p><div class="figure"><a name="4small"></a><p class="title"><b>Figure 22.4. Prefiltering in CUPS to Form PostScript.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/4small.png" width="135" alt="Prefiltering in CUPS to Form PostScript."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2659497"></a>pstops</h3></div></div></div><p>
-<a class="indexterm" name="id2659505"></a>
-<a class="indexterm" name="id2659512"></a>
-<a class="indexterm" name="id2659519"></a>
-<a class="indexterm" name="id2659526"></a>
-<a class="indexterm" name="id2659533"></a>
-<a class="indexterm" name="id2659540"></a>
-<a class="indexterm" name="id2659546"></a>
+	</p><div class="figure"><a name="4small"></a><p class="title"><b>Figure 22.4. Prefiltering in CUPS to Form PostScript.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/4small.png" width="135" alt="Prefiltering in CUPS to Form PostScript."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id420346"></a>pstops</h3></div></div></div><p>
+<a class="indexterm" name="id420354"></a>
+<a class="indexterm" name="id420361"></a>
+<a class="indexterm" name="id420368"></a>
+<a class="indexterm" name="id420375"></a>
+<a class="indexterm" name="id420381"></a>
+<a class="indexterm" name="id420388"></a>
+<a class="indexterm" name="id420395"></a>
 	<span class="emphasis"><em>pstops</em></span> is a filter that is used to convert <em class="parameter"><code>application/postscript</code></em> to
 	<em class="parameter"><code>application/vnd.cups-postscript</code></em>. As stated earlier, this filter inserts all
 	device-specific print options (commands to the printer to ask for the duplexing of output, or stapling and
@@ -742,10 +740,10 @@
 		so-called &#8220;<span class="quote">number-up</span>&#8221; function).
 		</p></li><li><p>Counting the pages of the job to insert the accounting
 		information into the <code class="filename">/var/log/cups/page_log</code>.
-		</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2659665"></a>pstoraster</h3></div></div></div><p>
-<a class="indexterm" name="id2659672"></a>
-<a class="indexterm" name="id2659679"></a>
-<a class="indexterm" name="id2659686"></a>
+		</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id420506"></a>pstoraster</h3></div></div></div><p>
+<a class="indexterm" name="id420514"></a>
+<a class="indexterm" name="id420520"></a>
+<a class="indexterm" name="id420527"></a>
 	<em class="parameter"><code>pstoraster</code></em> is at the core of the CUPS filtering system. It is responsible for the first
 	stage of the rasterization process. Its input is of MIME type application/vnd.cups-postscript; its output is
 	application/vnd.cups-raster. This output format is not yet meant to be printable. Its aim is to serve as a
@@ -753,10 +751,10 @@
 	generate device-specific printer data. This is shown in <a class="link" href="CUPS-printing.html#cups-raster" title="Figure 22.6. PostScript to Intermediate Raster Format.">the PostScript to
 	Intermediate Raster Format diagram</a>.
 	</p><div class="figure"><a name="cups-raster"></a><p class="title"><b>Figure 22.6. PostScript to Intermediate Raster Format.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/6small.png" width="135" alt="PostScript to Intermediate Raster Format."></div></div></div><br class="figure-break"><p>
-<a class="indexterm" name="id2659762"></a>
-<a class="indexterm" name="id2659769"></a>
-<a class="indexterm" name="id2659776"></a>
-<a class="indexterm" name="id2659783"></a>
+<a class="indexterm" name="id420598"></a>
+<a class="indexterm" name="id420605"></a>
+<a class="indexterm" name="id420612"></a>
+<a class="indexterm" name="id420619"></a>
 	CUPS raster is a generic raster format with powerful features. It is able to include per-page information,
 	color profiles, and more, to be used by the downstream raster drivers. Its MIME type is registered with IANA
 	and its specification is, of course, completely open. It is designed to make it quite easy and inexpensive for
@@ -766,10 +764,10 @@
 	raster drivers). This is illustrated in <a class="link" href="CUPS-printing.html#cups-raster2" title="Figure 22.7. CUPS-Raster Production Using Ghostscript.">the CUPS-Raster Production Using
 	Ghostscript illustration</a>.
 	</p><div class="figure"><a name="cups-raster2"></a><p class="title"><b>Figure 22.7. CUPS-Raster Production Using Ghostscript.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/7small.png" alt="CUPS-Raster Production Using Ghostscript."></div></div></div><br class="figure-break"><p>
-<a class="indexterm" name="id2659855"></a>
-<a class="indexterm" name="id2659862"></a>
-<a class="indexterm" name="id2659869"></a>
-<a class="indexterm" name="id2659876"></a>
+<a class="indexterm" name="id420684"></a>
+<a class="indexterm" name="id420691"></a>
+<a class="indexterm" name="id420697"></a>
+<a class="indexterm" name="id420704"></a>
 	CUPS versions before version 1.1.15 shipped a binary (or source code) standalone filter, named
 	<em class="parameter"><code>pstoraster</code></em>. <em class="parameter"><code>pstoraster</code></em>, which was derived from GNU Ghostscript
 	5.50 and could be installed instead of and in addition to any GNU or AFPL Ghostscript package without
@@ -780,27 +778,27 @@
 	now a simple shell script calling <code class="literal">gs</code> with the <code class="literal">-sDEVICE=cups</code> parameter.
 	If your Ghostscript fails when this command is executed: <code class="literal">gs -h |grep cups</code>, you might not 
 	be able to print, update your Ghostscript.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2659934"></a>imagetops and imagetoraster</h3></div></div></div><p>
-<a class="indexterm" name="id2659942"></a>
-<a class="indexterm" name="id2659949"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id420757"></a>imagetops and imagetoraster</h3></div></div></div><p>
+<a class="indexterm" name="id420765"></a>
+<a class="indexterm" name="id420772"></a>
 	In the section about prefilters, we mentioned the prefilter
 	that generates PostScript from image formats. The <em class="parameter"><code>imagetoraster</code></em>
 	filter is used to convert directly from image to raster, without the
 	intermediate PostScript stage. It is used more often than the previously
 	mentioned prefilters. We summarize in a flowchart the image file
 	filtering in <a class="link" href="CUPS-printing.html#small8" title="Figure 22.8. Image Format to CUPS-Raster Format Conversion.">the Image Format to CUPS-Raster Format Conversion illustration</a>.
-	</p><div class="figure"><a name="small8"></a><p class="title"><b>Figure 22.8. Image Format to CUPS-Raster Format Conversion.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/8small.png" alt="Image Format to CUPS-Raster Format Conversion."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2660019"></a>rasterto [printers specific]</h3></div></div></div><p>
-<a class="indexterm" name="id2660027"></a>
-<a class="indexterm" name="id2660034"></a>
-<a class="indexterm" name="id2660041"></a>
-<a class="indexterm" name="id2660048"></a>
-<a class="indexterm" name="id2660055"></a>
-<a class="indexterm" name="id2660062"></a>
-<a class="indexterm" name="id2660068"></a>
-<a class="indexterm" name="id2660075"></a>
-<a class="indexterm" name="id2660082"></a>
-<a class="indexterm" name="id2660089"></a>
-<a class="indexterm" name="id2660096"></a>
+	</p><div class="figure"><a name="small8"></a><p class="title"><b>Figure 22.8. Image Format to CUPS-Raster Format Conversion.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/8small.png" alt="Image Format to CUPS-Raster Format Conversion."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id420837"></a>rasterto [printers specific]</h3></div></div></div><p>
+<a class="indexterm" name="id420845"></a>
+<a class="indexterm" name="id420852"></a>
+<a class="indexterm" name="id420858"></a>
+<a class="indexterm" name="id420865"></a>
+<a class="indexterm" name="id420872"></a>
+<a class="indexterm" name="id420879"></a>
+<a class="indexterm" name="id420886"></a>
+<a class="indexterm" name="id420892"></a>
+<a class="indexterm" name="id420899"></a>
+<a class="indexterm" name="id420906"></a>
+<a class="indexterm" name="id420913"></a>
 	CUPS ships with quite a variety of raster drivers for processing CUPS raster. On my system, I find in
 	/usr/lib/cups/filter/ the following: <em class="parameter"><code>rastertoalps</code></em>, <em class="parameter"><code>rastertobj</code></em>,
 	<em class="parameter"><code>rastertoepson</code></em>, <em class="parameter"><code>rastertoescp</code></em>, <em class="parameter"><code>rastertopcl</code></em>,
@@ -808,12 +806,12 @@
 	<em class="parameter"><code>rastertodymo</code></em>, <em class="parameter"><code>rastertoescp</code></em>, <em class="parameter"><code>rastertohp</code></em>,
 	and <em class="parameter"><code>rastertoprinter</code></em>. Don't worry if you have fewer drivers than this; some of these are
 	installed by commercial add-ons to CUPS (like <em class="parameter"><code>rastertoturboprint</code></em>), and others (like
-	<em class="parameter"><code>rastertoprinter</code></em>) by third-party driver development projects (such as Gutenprint)
+	<em class="parameter"><code>rastertoprinter</code></em>) by third-party driver development projects (such as Gimp-Print)
 	wanting to cooperate as closely as possible with CUPS. See <a class="link" href="CUPS-printing.html#small9" title="Figure 22.9. Raster to Printer-Specific Formats.">the Raster to
 	Printer-Specific Formats illustration</a>.
-	</p><div class="figure"><a name="small9"></a><p class="title"><b>Figure 22.9. Raster to Printer-Specific Formats.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/9small.png" alt="Raster to Printer-Specific Formats."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2660239"></a>CUPS Backends</h3></div></div></div><p>
-<a class="indexterm" name="id2660246"></a>
-<a class="indexterm" name="id2660254"></a>
+	</p><div class="figure"><a name="small9"></a><p class="title"><b>Figure 22.9. Raster to Printer-Specific Formats.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/9small.png" alt="Raster to Printer-Specific Formats."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id421049"></a>CUPS Backends</h3></div></div></div><p>
+<a class="indexterm" name="id421057"></a>
+<a class="indexterm" name="id421064"></a>
 	The last part of any CUPS filtering chain is a backend. Backends
 	are special programs that send the print-ready file to the final
 	device. There is a separate backend program for any transfer
@@ -887,8 +885,8 @@
 	email back to the $USER asking him or her to always specify the correct
 	printer name.)
 	</p><p>
-<a class="indexterm" name="id2660533"></a>
-<a class="indexterm" name="id2660540"></a>
+<a class="indexterm" name="id421315"></a>
+<a class="indexterm" name="id421322"></a>
 	Not all of the mentioned backends may be present on your system or
 	usable (depending on your hardware configuration). One test for all
 	available CUPS backends is provided by the <span class="emphasis"><em>lpinfo</em></span>
@@ -896,12 +894,12 @@
 	all available backends:
 	</p><pre class="screen">
 	<code class="prompt">$ </code><strong class="userinput"><code>lpinfo -v</code></strong>
-	</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2660577"></a>The Role of <em class="parameter"><code>cupsomatic/foomatic</code></em></h3></div></div></div><p>
-	<a class="indexterm" name="id2660590"></a>
-	<a class="indexterm" name="id2660597"></a>
-<a class="indexterm" name="id2660604"></a>
-<a class="indexterm" name="id2660610"></a>
-<a class="indexterm" name="id2660617"></a>
+	</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id421357"></a>The Role of <em class="parameter"><code>cupsomatic/foomatic</code></em></h3></div></div></div><p>
+	<a class="indexterm" name="id421369"></a>
+	<a class="indexterm" name="id421376"></a>
+<a class="indexterm" name="id421383"></a>
+<a class="indexterm" name="id421390"></a>
+<a class="indexterm" name="id421396"></a>
 	<em class="parameter"><code>cupsomatic</code></em> filters may be the most widely used on CUPS
 	installations. You must be clear that these were not
 	developed by the CUPS people. They are a third-party add-on to
@@ -921,26 +919,26 @@
 	file. If you have such a PPD installed, the printer shows up in the
 	CUPS Web interface with a <em class="parameter"><code>foomatic</code></em> namepart for
 	the driver description. <em class="parameter"><code>cupsomatic</code></em> is a Perl script that runs
-	Ghostscript with all the complicated command line options
-	autoconstructed from the selected PPD and command line options given to
+	Ghostscript with all the complicated command-line options
+	autoconstructed from the selected PPD and command line options give to
 	the print job.
 	</p><p>
-	<a class="indexterm" name="id2660684"></a>
-<a class="indexterm" name="id2660691"></a>
-<a class="indexterm" name="id2660698"></a>
-<a class="indexterm" name="id2660705"></a>
-<a class="indexterm" name="id2660712"></a>
-<a class="indexterm" name="id2660718"></a>
-<a class="indexterm" name="id2660725"></a>
-<a class="indexterm" name="id2660732"></a>
-<a class="indexterm" name="id2660739"></a>
-<a class="indexterm" name="id2660746"></a>
-<a class="indexterm" name="id2660752"></a>
+	<a class="indexterm" name="id421454"></a>
+<a class="indexterm" name="id421460"></a>
+<a class="indexterm" name="id421467"></a>
+<a class="indexterm" name="id421474"></a>
+<a class="indexterm" name="id421481"></a>
+<a class="indexterm" name="id421488"></a>
+<a class="indexterm" name="id421494"></a>
+<a class="indexterm" name="id421501"></a>
+<a class="indexterm" name="id421508"></a>
+<a class="indexterm" name="id421515"></a>
+<a class="indexterm" name="id421522"></a>
 	However, <em class="parameter"><code>cupsomatic</code></em> is now deprecated. Its PPDs (especially the first
 	generation of them, still in heavy use out there) are not meeting the
 	Adobe specifications. You might also suffer difficulties when you try
 	to download them with &#8220;<span class="quote">Point'n'Print</span>&#8221; to Windows clients. A better
-	and more powerful successor is now available: it is called <em class="parameter"><code>foomatic-rip</code></em>. To use
+	and more powerful successor is now in a stable beta-version: it is called <em class="parameter"><code>foomatic-rip</code></em>. To use
 	<em class="parameter"><code>foomatic-rip</code></em> as a filter with CUPS, you need the new type of PPDs, which
 	have a similar but different line:
 </p><pre class="programlisting">
@@ -957,11 +955,11 @@
 	best thing is that the new <code class="constant">foomatic-rip</code> works seamlessly with all
 	legacy spoolers too (like LPRng, BSD-LPD, PDQ, PPR, and so on), providing
 	for them access to use PPDs for their printing.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2660813"></a>The Complete Picture</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id421572"></a>The Complete Picture</h3></div></div></div><p>
 	If you want to see an overview of all the filters and how they
 	relate to each other, the complete picture of the puzzle is at the end
 	of this chapter.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2660826"></a><code class="filename">mime.convs</code></h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id421583"></a><code class="filename">mime.convs</code></h3></div></div></div><p>
 	CUPS autoconstructs all possible filtering chain paths for any given
 	MIME type and every printer installed. But how does it decide in
 	favor of or against a specific alternative?  (There may be cases
@@ -971,8 +969,8 @@
 	assigned to this filter. Every possible filtering chain will sum up to
 	a total &#8220;<span class="quote">filter cost.</span>&#8221; CUPS decides for the most &#8220;<span class="quote">inexpensive</span>&#8221; route.
 	</p><div class="tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p>
-<a class="indexterm" name="id2660857"></a>
-<a class="indexterm" name="id2660864"></a>
+<a class="indexterm" name="id421610"></a>
+<a class="indexterm" name="id421617"></a>
 	Setting <em class="parameter"><code>FilterLimit 1000</code></em> in
 	<code class="filename">cupsd.conf</code> will not allow more filters to
 	run concurrently than will consume a total of 1000 virtual filter
@@ -980,10 +978,10 @@
 	server by setting an appropriate &#8220;<span class="quote">FilterLimit</span>&#8221; value. A FilterLimit of
 	200 allows roughly one job at a time, while a FilterLimit of 1000 allows
 	approximately five jobs maximum at a time.
-	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2660894"></a>&#8220;<span class="quote">Raw</span>&#8221; Printing</h3></div></div></div><p>
-<a class="indexterm" name="id2660904"></a>
-<a class="indexterm" name="id2660911"></a>
-<a class="indexterm" name="id2660918"></a>
+	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id421644"></a>&#8220;<span class="quote">Raw</span>&#8221; Printing</h3></div></div></div><p>
+<a class="indexterm" name="id421654"></a>
+<a class="indexterm" name="id421661"></a>
+<a class="indexterm" name="id421668"></a>
 	You can tell CUPS to print (nearly) any file &#8220;<span class="quote">raw</span>&#8221;. &#8220;<span class="quote">Raw</span>&#8221; means it will not be
 	filtered. CUPS will send the file to the printer &#8220;<span class="quote">as is</span>&#8221; without bothering if the printer is able
 	to digest it. Users need to take care themselves that they send sensible data formats only. Raw printing can
@@ -1001,9 +999,9 @@
 	if it can't find a PPD associated with the queue. However, CUPS will
 	only send known MIME types (as defined in its own mime.types file) and
 	refuse others.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2661002"></a>application/octet-stream Printing</h3></div></div></div><p>
-<a class="indexterm" name="id2661010"></a>
-<a class="indexterm" name="id2661018"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id421744"></a>application/octet-stream Printing</h3></div></div></div><p>
+<a class="indexterm" name="id421752"></a>
+<a class="indexterm" name="id421759"></a>
 	Any MIME type with no rule in the <code class="filename">/etc/cups/mime.types</code> file is regarded as unknown
 	or <em class="parameter"><code>application/octet-stream</code></em> and will not be
 	sent. Because CUPS refuses to print unknown MIME types by default,
@@ -1016,11 +1014,11 @@
 	To enable the printing of <em class="parameter"><code>application/octet-stream</code></em> files, edit
 	these two files:
 	</p><div class="itemizedlist"><ul type="disc"><li><p><code class="filename">/etc/cups/mime.convs</code></p></li><li><p><code class="filename">/etc/cups/mime.types</code></p></li></ul></div><p>
-<a class="indexterm" name="id2661083"></a>
+<a class="indexterm" name="id421820"></a>
 	Both contain entries (at the end of the respective files) that must be uncommented to allow raw mode
 	operation for <em class="parameter"><code>application/octet-stream</code></em>. In <code class="filename">/etc/cups/mime.types</code>
 	make sure this line is present:
-	<a class="indexterm" name="id2661105"></a>
+	<a class="indexterm" name="id421840"></a>
 </p><pre class="programlisting">
 application/octet-stream
 </pre><p>
@@ -1031,7 +1029,7 @@
 </p><pre class="programlisting">
 application/octet-stream   application/vnd.cups-raw   0   -
 </pre><p>
-	<a class="indexterm" name="id2661140"></a>
+	<a class="indexterm" name="id421872"></a>
 	This line tells CUPS to use the <span class="emphasis"><em>Null Filter</em></span>
 	(denoted as &#8220;<span class="quote">-</span>&#8221;, doing nothing at all) on
 	<em class="parameter"><code>application/octet-stream</code></em>, and tag the result as
@@ -1042,10 +1040,10 @@
 	Editing the <code class="filename">mime.convs</code> and the <code class="filename">mime.types</code> file does not
 	<span class="emphasis"><em>enforce</em></span> &#8220;<span class="quote">raw</span>&#8221; printing, it only <span class="emphasis"><em>allows</em></span> it.
 	</p></div><p><b>Background. </b>
-<a class="indexterm" name="id2661206"></a>
-<a class="indexterm" name="id2661213"></a>
-<a class="indexterm" name="id2661220"></a>
-<a class="indexterm" name="id2661227"></a>
+<a class="indexterm" name="id421936"></a>
+<a class="indexterm" name="id421943"></a>
+<a class="indexterm" name="id421950"></a>
+<a class="indexterm" name="id421956"></a>
 	That CUPS is a more security-aware printing system than traditional ones
 	does not by default allow one to send deliberate (possibly binary)
 	data to printing devices. (This could be easily abused to launch a
@@ -1057,13 +1055,13 @@
 	<code class="filename">/etc/cups/mime.types</code> defines the &#8220;<span class="quote">rules</span>&#8221; of how CUPS
 	recognizes MIME types. The file <code class="filename">/etc/cups/mime.convs</code> decides which file
 	conversion filter(s) may be applied to which MIME types.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2661282"></a>PostScript Printer Descriptions for Non-PostScript Printers</h3></div></div></div><p>
-	<a class="indexterm" name="id2661290"></a>
-<a class="indexterm" name="id2661297"></a>
-<a class="indexterm" name="id2661304"></a>
-<a class="indexterm" name="id2661310"></a>
-<a class="indexterm" name="id2661317"></a>
-<a class="indexterm" name="id2661324"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id422005"></a>PostScript Printer Descriptions for Non-PostScript Printers</h3></div></div></div><p>
+	<a class="indexterm" name="id422013"></a>
+<a class="indexterm" name="id422020"></a>
+<a class="indexterm" name="id422026"></a>
+<a class="indexterm" name="id422033"></a>
+<a class="indexterm" name="id422040"></a>
+<a class="indexterm" name="id422046"></a>
 	Originally PPDs were meant to be used for PostScript printers
 	only. Here, they help to send device-specific commands and settings
 	to the RIP, which processes the job file. CUPS has extended this
@@ -1076,7 +1074,7 @@
 	</p><p>
 	PPDs for a non-PostScript printer have a few lines that are unique to
 	CUPS. The most important one looks similar to this:
-	<a class="indexterm" name="id2661346"></a>
+	<a class="indexterm" name="id422063"></a>
 </p><pre class="programlisting">
 *cupsFilter: application/vnd.cups-raster  66   rastertoprinter
 </pre><p>
@@ -1086,7 +1084,7 @@
 	file. Therefore, CUPS should autoconstruct a filtering chain, which
 	delivers as its last output the specified MIME type. This is then
 	taken as input to the specified <em class="parameter"><code>rastertoprinter</code></em> filter. After
-	the last filter has done its work (<em class="parameter"><code>rastertoprinter</code></em> is a Gutenprint
+	the last filter has done its work (<em class="parameter"><code>rastertoprinter</code></em> is a Gimp-Print
 	filter), the file should go to the backend, which sends it to the
 	output device.
 	</p><p>
@@ -1094,14 +1092,14 @@
 	several hundred printer models. You may not be able to control
 	different paper trays, or you may get larger margins than your
 	specific model supports. See Table 21.1<a class="link" href="CUPS-printing.html#cups-ppds" title="Table 22.1. PPDs Shipped with CUPS">&#8220;PPDs Shipped with CUPS&#8221;</a> for summary information.
-	</p><div class="table"><a name="cups-ppds"></a><p class="title"><b>Table 22.1. PPDs Shipped with CUPS</b></p><div class="table-contents"><table summary="PPDs Shipped with CUPS" border="1"><colgroup><col align="left"><col align="justify"></colgroup><thead><tr><th align="left">PPD file</th><th align="justify">Printer type</th></tr></thead><tbody><tr><td align="left">deskjet.ppd</td><td align="justify">older HP inkjet printers and compatible</td></tr><tr><td align="left">deskjet2.ppd</td><td align="justify">newer HP inkjet printers and compatible </td></tr><tr><td align="left">dymo.ppd</td><td align="justify">label printers </td></tr><tr><td align="left">epson9.ppd</td><td align="justify">Epson 24-pin impact printers and compatible </td></tr><tr><td align="left">epson24.ppd</td><td align="justify">Epson 24-pin impact printers and compatible </td></tr><tr><td align="left">okidata9.ppd</td><td align="justify">Okidata 9-pin impact printers and compatible </td></tr><tr><td align="left">okidat24.ppd</td><td align="justify">Okidata 24-pin impact printers and compatible </td></tr><tr><td align="left">stcolor.ppd</td><td align="justify">older Epson Stylus Color printers </td></tr><tr><td align="left">stcolor2.ppd</td><td align="justify">newer Epson Stylus Color printers </td></tr><tr><td align="left">stphoto.ppd</td><td align="justify">older Epson Stylus Photo printers </td></tr><tr><td align="left">stphoto2.ppd</td><td align="justify">newer Epson Stylus Photo printers </td></tr><tr><td align="left">laserjet.ppd</td><td align="justify">all PCL printers </td></tr></tbody></table></div></div><br class="table-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2661565"></a><span class="emphasis"><em>cupsomatic/foomatic-rip</em></span> Versus <span class="emphasis"><em>Native CUPS</em></span> Printing</h3></div></div></div><p>
-	<a class="indexterm" name="id2661579"></a>
-	<a class="indexterm" name="id2661586"></a>
+	</p><div class="table"><a name="cups-ppds"></a><p class="title"><b>Table 22.1. PPDs Shipped with CUPS</b></p><div class="table-contents"><table summary="PPDs Shipped with CUPS" border="1"><colgroup><col align="left"><col align="justify"></colgroup><thead><tr><th align="left">PPD file</th><th align="justify">Printer type</th></tr></thead><tbody><tr><td align="left">deskjet.ppd</td><td align="justify">older HP inkjet printers and compatible</td></tr><tr><td align="left">deskjet2.ppd</td><td align="justify">newer HP inkjet printers and compatible </td></tr><tr><td align="left">dymo.ppd</td><td align="justify">label printers </td></tr><tr><td align="left">epson9.ppd</td><td align="justify">Epson 24-pin impact printers and compatible </td></tr><tr><td align="left">epson24.ppd</td><td align="justify">Epson 24-pin impact printers and compatible </td></tr><tr><td align="left">okidata9.ppd</td><td align="justify">Okidata 9-pin impact printers and compatible </td></tr><tr><td align="left">okidat24.ppd</td><td align="justify">Okidata 24-pin impact printers and compatible </td></tr><tr><td align="left">stcolor.ppd</td><td align="justify">older Epson Stylus Color printers </td></tr><tr><td align="left">stcolor2.ppd</td><td align="justify">newer Epson Stylus Color printers </td></tr><tr><td align="left">stphoto.ppd</td><td align="justify">older Epson Stylus Photo printers </td></tr><tr><td align="left">stphoto2.ppd</td><td align="justify">newer Epson Stylus Photo printers </td></tr><tr><td align="left">laserjet.ppd</td><td align="justify">all PCL printers </td></tr></tbody></table></div></div><br class="table-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id422269"></a><span class="emphasis"><em>cupsomatic/foomatic-rip</em></span> Versus <span class="emphasis"><em>Native CUPS</em></span> Printing</h3></div></div></div><p>
+	<a class="indexterm" name="id422282"></a>
+	<a class="indexterm" name="id422289"></a>
 	Native CUPS rasterization works in two steps:
 	</p><div class="itemizedlist"><ul type="disc"><li><p>
-<a class="indexterm" name="id2661600"></a>
+<a class="indexterm" name="id422303"></a>
 		First is the <em class="parameter"><code>pstoraster</code></em> step. It uses the special CUPS
-		<a class="indexterm" name="id2661613"></a>
+		<a class="indexterm" name="id422316"></a>
 		device from ESP Ghostscript 7.05.x as its tool.
 		</p></li><li><p>
 		Second is the <em class="parameter"><code>rasterdriver</code></em> step. It uses various
@@ -1116,7 +1114,7 @@
 	One other method is the <em class="parameter"><code>cupsomatic/foomatic-rip</code></em>
 	way. Note that <em class="parameter"><code>cupsomatic</code></em> is <span class="emphasis"><em>not</em></span> made by the CUPS
 	developers. It is an independent contribution to printing development,
-	made by people from Linuxprinting.org.<sup>[<a name="id2661716" href="#ftn.id2661716" class="footnote">6</a>]</sup>
+	made by people from Linuxprinting.org.<sup>[<a name="id422411" href="#ftn.id422411" class="footnote">6</a>]</sup>
 	<em class="parameter"><code>cupsomatic</code></em> is no longer developed, maintained, or supported. It now been
 	replaced by <em class="parameter"><code>foomatic-rip</code></em>. <em class="parameter"><code>foomatic-rip</code></em> is a complete rewrite
 	of the old <em class="parameter"><code>cupsomatic</code></em> idea, but very much improved and generalized to
@@ -1124,8 +1122,8 @@
 	advised, especially if you are upgrading to a recent version of CUPS,
 	too.
 	</p><p>
-	<a class="indexterm" name="id2661766"></a>
-	<a class="indexterm" name="id2661773"></a>
+	<a class="indexterm" name="id422457"></a>
+	<a class="indexterm" name="id422464"></a>
 	Like the old <em class="parameter"><code>cupsomatic</code></em> method, the <em class="parameter"><code>foomatic-rip</code></em> (new) method
 	from Linuxprinting.org uses the traditional Ghostscript print file processing, doing everything in a single
 	step. It therefore relies on all the other devices built into Ghostscript. The quality is as good (or bad) as
@@ -1135,12 +1133,12 @@
 	Of course, you can use both methods side by side on one system (and even for one printer, if you set up
 	different queues) and find out which works best for you.
 	</p><p>
-<a class="indexterm" name="id2661808"></a>
-<a class="indexterm" name="id2661815"></a>
-<a class="indexterm" name="id2661822"></a>
-<a class="indexterm" name="id2661829"></a>
-<a class="indexterm" name="id2661836"></a>
-<a class="indexterm" name="id2661842"></a>
+<a class="indexterm" name="id422494"></a>
+<a class="indexterm" name="id422501"></a>
+<a class="indexterm" name="id422508"></a>
+<a class="indexterm" name="id422515"></a>
+<a class="indexterm" name="id422522"></a>
+<a class="indexterm" name="id422528"></a>
 	<em class="parameter"><code>cupsomatic</code></em> kidnaps the print file after the
 	<em class="parameter"><code>application/vnd.cups-postscript</code></em> stage and deviates it through the CUPS-external,
 	systemwide Ghostscript installation. Therefore, the print file bypasses the <em class="parameter"><code>pstoraster</code></em>
@@ -1149,14 +1147,14 @@
 	backend. <a class="link" href="CUPS-printing.html#cupsomatic-dia" title="Figure 22.10. cupsomatic/foomatic Processing Versus Native CUPS.">cupsomatic/foomatic Processing Versus Native
 	CUPS</a>, illustrates the difference between native CUPS rendering and the
 	<em class="parameter"><code>Foomatic/cupsomatic</code></em> method.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2661902"></a>Examples for Filtering Chains</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id422583"></a>Examples for Filtering Chains</h3></div></div></div><p>
 	Here are a few examples of commonly occurring filtering chains to
 	illustrate the workings of CUPS.
 	</p><p>
-<a class="indexterm" name="id2661915"></a>
-<a class="indexterm" name="id2661922"></a>
-<a class="indexterm" name="id2661929"></a>
-<a class="indexterm" name="id2661935"></a>
+<a class="indexterm" name="id422595"></a>
+<a class="indexterm" name="id422602"></a>
+<a class="indexterm" name="id422609"></a>
+<a class="indexterm" name="id422615"></a>
 	Assume you want to print a PDF file to an HP JetDirect-connected
 	PostScript printer, but you want to print pages 3-5, 7, and 11-13
 	only, and you want to print them &#8220;<span class="quote">two-up</span>&#8221; and &#8220;<span class="quote">duplex</span>&#8221;:
@@ -1166,7 +1164,7 @@
 	<em class="parameter"><code>pdftops</code></em> prefilter, which produces PostScript
 	MIME type <em class="parameter"><code>application/postscript</code></em> (a preview here
 	would still show all pages of the original PDF).</p></li><li><p>The file then passes the <em class="parameter"><code>pstops</code></em>
-	filter that applies the command line options: it selects pages
+	filter that applies the command-line options: it selects pages
 	2-5, 7, and 11-13, creates the imposed layout &#8220;<span class="quote">two pages on one sheet</span>&#8221;, and
 	inserts the correct &#8220;<span class="quote">duplex</span>&#8221; command (as defined in the printer's
 	PPD) into the new PostScript file; the file is now of PostScript MIME
@@ -1175,10 +1173,10 @@
 	backend, which transfers the job to the printers.</p></li></ul></div><p>
 	The resulting filter chain, therefore, is as shown in <a class="link" href="CUPS-printing.html#pdftosocket" title="Figure 22.11. PDF to Socket Chain.">the PDF to socket chain
 	illustration</a>.
-	</p><a class="indexterm" name="id2662046"></a><div class="figure"><a name="pdftosocket"></a><p class="title"><b>Figure 22.11. PDF to Socket Chain.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/pdftosocket.png" alt="PDF to Socket Chain."></div></div></div><br class="figure-break"><p>
-<a class="indexterm" name="id2662096"></a>
-<a class="indexterm" name="id2662103"></a>
-<a class="indexterm" name="id2662110"></a>
+	</p><a class="indexterm" name="id422717"></a><div class="figure"><a name="pdftosocket"></a><p class="title"><b>Figure 22.11. PDF to Socket Chain.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/pdftosocket.png" alt="PDF to Socket Chain."></div></div></div><br class="figure-break"><p>
+<a class="indexterm" name="id422765"></a>
+<a class="indexterm" name="id422772"></a>
+<a class="indexterm" name="id422779"></a>
 	Assume you want to print the same filter to an USB-connected Epson Stylus Photo Printer installed with the CUPS
 	<code class="filename">stphoto2.ppd</code>. The first few filtering stages are nearly the same:
 	</p><div class="itemizedlist"><ul type="disc"><li><p>
@@ -1188,16 +1186,16 @@
 		The (complete) PDF file is sent to CUPS and autotyped as
 		<em class="parameter"><code>application/pdf</code></em>.
 		</p></li><li><p>
-<a class="indexterm" name="id2662150"></a>
-<a class="indexterm" name="id2662157"></a>
+<a class="indexterm" name="id422816"></a>
+<a class="indexterm" name="id422823"></a>
 		The file must first pass the <em class="parameter"><code>pdftops</code></em> prefilter, which produces PostScript
 		MIME type <em class="parameter"><code>application/postscript</code></em> (a preview here would still show all
 		pages of the original PDF).
 		</p></li><li><p>
-<a class="indexterm" name="id2662182"></a>
-<a class="indexterm" name="id2662189"></a>
+<a class="indexterm" name="id422846"></a>
+<a class="indexterm" name="id422853"></a>
 		The file then passes the &#8220;<span class="quote">pstops</span>&#8221; filter that applies
-		the command line options: it selects the pages 2-5, 7, and 11-13,
+		the command-line options: it selects the pages 2-5, 7, and 11-13,
 		creates the imposed layout &#8220;<span class="quote">two pages on one sheet,</span>&#8221; and inserts the
 		correct &#8220;<span class="quote">duplex</span>&#8221; command (oops  this printer and PPD
 		do not support duplex printing at all, so this option will
@@ -1207,7 +1205,7 @@
 		The file then passes the <em class="parameter"><code>pstoraster</code></em> stage and becomes MIME type
 		<em class="parameter"><code>application/cups-raster</code></em>.
 		</p></li><li><p>
-<a class="indexterm" name="id2662244"></a>
+<a class="indexterm" name="id422904"></a>
 		Finally, the <em class="parameter"><code>rastertoepson</code></em> filter
 		does its work (as indicated in the printer's PPD), creating the
 		printer-specific raster data and embedding any user-selected
@@ -1217,11 +1215,11 @@
 		</p></li></ul></div><p>
 	The resulting filter chain therefore is as shown in <a class="link" href="CUPS-printing.html#pdftoepsonusb" title="Figure 22.12. PDF to USB Chain.">the PDF to USB Chain
 	illustration</a>.
-	</p><div class="figure"><a name="pdftoepsonusb"></a><p class="title"><b>Figure 22.12. PDF to USB Chain.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/pdftoepsonusb.png" alt="PDF to USB Chain."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2662330"></a>Sources of CUPS Drivers/PPDs</h3></div></div></div><p>
+	</p><div class="figure"><a name="pdftoepsonusb"></a><p class="title"><b>Figure 22.12. PDF to USB Chain.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/pdftoepsonusb.png" alt="PDF to USB Chain."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id422984"></a>Sources of CUPS Drivers/PPDs</h3></div></div></div><p>
 	On the Internet you can now find many thousands of CUPS-PPD files
 	(with their companion filters), in many national languages
 	supporting more than 1,000 non-PostScript models.
-	</p><div class="itemizedlist"><a class="indexterm" name="id2662344"></a><a class="indexterm" name="id2662353"></a><ul type="disc"><li><p>
+	</p><div class="itemizedlist"><a class="indexterm" name="id422997"></a><a class="indexterm" name="id423006"></a><ul type="disc"><li><p>
 		<a class="ulink" href="http://www.easysw.com/printpro/" target="_top">ESP PrintPro</a>
 		(commercial, non-free) is packaged with more than 3,000 PPDs, ready for
 		successful use &#8220;<span class="quote">out of the box</span>&#8221; on Linux, Mac OS X, IBM-AIX,
@@ -1230,9 +1228,9 @@
 		themselves and its sales help finance the further development of
 		CUPS, as they feed their creators).
 		</p></li><li><p>
-		The <a class="ulink" href="http://gimp-print.sourceforge.net/" target="_top">Gutenprint Project</a>
+		The <a class="ulink" href="http://gimp-print.sourceforge.net/" target="_top">Gimp-Print Project</a>
 		(GPL, free software) provides around 140 PPDs (supporting nearly 400 printers, many driven
-		to photo quality output), to be used alongside the Gutenprint CUPS filters.
+		to photo quality output), to be used alongside the Gimp-Print CUPS filters.
 		</p></li><li><p>
 		<a class="ulink" href="http://www.turboprint.de/english.html/" target="_top">TurboPrint </a> (shareware, non-free) supports
 		roughly the same number of printers in excellent quality.
@@ -1248,10 +1246,10 @@
 		</p></li><li><p>
 		<a class="ulink" href="http://www.linuxprinting.org/" target="_top">Foomatic/cupsomatic </a>
 		(LPGL, free) from Linuxprinting.org provide PPDs for practically every Ghostscript
-		filter known to the world (including Omni, Gutenprint, and HPIJS).
-		</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2662453"></a>Printing with Interface Scripts</h3></div></div></div><p>
-<a class="indexterm" name="id2662461"></a>
-<a class="indexterm" name="id2662467"></a>
+		filter known to the world (including Omni, Gimp-Print, and HPIJS).
+		</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id423093"></a>Printing with Interface Scripts</h3></div></div></div><p>
+<a class="indexterm" name="id423101"></a>
+<a class="indexterm" name="id423108"></a>
 	CUPS also supports the use of &#8220;<span class="quote">interface scripts</span>&#8221; as known from
 	System V AT&amp;T printing systems. These are often used for PCL
 	printers, from applications that generate PCL print jobs. Interface
@@ -1273,16 +1271,16 @@
 	use of interface scripts is found at
 	<a class="ulink" href="http://playground.sun.com/printing/documentation/interface.html" target="_top">
 	http://playground.sun.com/printing/documentation/interface.html</a>).
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2662547"></a>Network Printing (Purely Windows)</h2></div></div></div><p>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id423172"></a>Network Printing (Purely Windows)</h2></div></div></div><p>
 Network printing covers a lot of ground. To understand what exactly
 goes on with Samba when it is printing on behalf of its Windows
 clients, let's first look at a &#8220;<span class="quote">purely Windows</span>&#8221; setup: Windows clients
 with a Windows NT print server.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2662564"></a>From Windows Clients to an NT Print Server</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id423186"></a>From Windows Clients to an NT Print Server</h3></div></div></div><p>
 Windows clients printing to an NT-based print server have two
 options. They may:
-<a class="indexterm" name="id2662574"></a>
-<a class="indexterm" name="id2662580"></a>
+<a class="indexterm" name="id423195"></a>
+<a class="indexterm" name="id423202"></a>
 </p><div class="itemizedlist"><ul type="disc"><li><p>Execute the driver locally and render the GDI output
 			(EMF) into the printer-specific format on their own.
 	</p></li><li><p>Send the GDI output (EMF) to the server, where the
@@ -1291,7 +1289,7 @@
 Both print paths are shown in the flowcharts in <a class="link" href="CUPS-printing.html#small11" title="Figure 22.13. Print Driver Execution on the Client.">
 Print Driver Execution on the Client</a>, and
 <a class="link" href="CUPS-printing.html#small12" title="Figure 22.14. Print Driver Execution on the Server.">Print Driver Execution on the Server</a>.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2662627"></a>Driver Execution on the Client</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id423245"></a>Driver Execution on the Client</h3></div></div></div><p>
 In the first case, the print server must spool the file as raw, meaning it shouldn't touch the job file and try
 to convert it in any way. This is what a traditional UNIX-based print server can do too, and at a better
 performance and more reliably than an NT print server. This is what most Samba administrators probably are
@@ -1299,12 +1297,12 @@
 even if no driver(s) for UNIX is available. It is sufficient to have the Windows client drivers available and
 installed on the clients. This is illustrated in <a class="link" href="CUPS-printing.html#small11" title="Figure 22.13. Print Driver Execution on the Client.">the Print Driver Execution on the
 Client diagram</a>.
-</p><div class="figure"><a name="small11"></a><p class="title"><b>Figure 22.13. Print Driver Execution on the Client.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/11small.png" alt="Print Driver Execution on the Client."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2662698"></a>Driver Execution on the Server</h3></div></div></div><p>
-<a class="indexterm" name="id2662706"></a>
-<a class="indexterm" name="id2662713"></a>
-<a class="indexterm" name="id2662720"></a>
-<a class="indexterm" name="id2662726"></a>
-<a class="indexterm" name="id2662733"></a>
+</p><div class="figure"><a name="small11"></a><p class="title"><b>Figure 22.13. Print Driver Execution on the Client.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/11small.png" alt="Print Driver Execution on the Client."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id423310"></a>Driver Execution on the Server</h3></div></div></div><p>
+<a class="indexterm" name="id423318"></a>
+<a class="indexterm" name="id423325"></a>
+<a class="indexterm" name="id423331"></a>
+<a class="indexterm" name="id423338"></a>
+<a class="indexterm" name="id423344"></a>
 The other path executes the printer driver on the server. The client transfers print files in EMF format to
 the server. The server uses the PostScript, PCL, ESC/P, or other driver to convert the EMF file into the
 printer-specific language. It is not possible for UNIX to do the same. Currently, there is no program or
@@ -1312,14 +1310,14 @@
 This is illustrated in <a class="link" href="CUPS-printing.html#small12" title="Figure 22.14. Print Driver Execution on the Server.">the Print Driver Execution on the Server diagram</a>.
 </p><div class="figure"><a name="small12"></a><p class="title"><b>Figure 22.14. Print Driver Execution on the Server.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/12small.png" alt="Print Driver Execution on the Server."></div></div></div><br class="figure-break"><p>
 However, something similar is possible with CUPS, so read on.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2662803"></a>Network Printing (Windows Clients and UNIX/Samba Print
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id423409"></a>Network Printing (Windows Clients and UNIX/Samba Print
 Servers)</h2></div></div></div><p>
 Since UNIX print servers <span class="emphasis"><em>cannot</em></span> execute the Win32
 program code on their platform, the picture is somewhat
 different. However, this does not limit your options all that
 much. On the contrary, you may have a way here to implement printing
 features that are not possible otherwise.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2662821"></a>From Windows Clients to a CUPS/Samba Print Server</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id423425"></a>From Windows Clients to a CUPS/Samba Print Server</h3></div></div></div><p>
 Here is a simple recipe showing how you can take advantage of CUPS's
 powerful features for the benefit of your Windows network printing
 clients:
@@ -1331,7 +1329,7 @@
 </p><p>
 First, to enable CUPS-based printing through Samba, the following options should be set in your <code class="filename">smb.conf</code>
 file <em class="parameter"><code>[global]</code></em> section:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2662876"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id2662888"></a><em class="parameter"><code>printcap = cups</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id423474"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id423486"></a><em class="parameter"><code>printcap = cups</code></em></td></tr></table><p>
 When these parameters are specified, all manually set print directives (like <a class="link" href="smb.conf.5.html#PRINTCOMMAND">print command</a> or <a class="link" href="smb.conf.5.html#LPPAUSECOMMAND">lppause command</a>) in <code class="filename">smb.conf</code> (as well as in Samba itself) will be
 ignored. Instead, Samba will directly interface with CUPS through its application program interface (API), as
 long as Samba has been compiled with CUPS library (libcups) support. If Samba has not been compiled with CUPS
@@ -1339,7 +1337,7 @@
 AT&amp;T command set, with the -oraw option automatically passing through (if you want your own defined print
 commands to work with a Samba server that has CUPS support compiled in, simply use <a class="link" href="smb.conf.5.html#CLASSICALPRINTING">classicalprinting = sysv</a>). This is illustrated in <a class="link" href="CUPS-printing.html#13small" title="Figure 22.15. Printing via CUPS/Samba Server.">the Printing via
 CUPS/Samba Server diagram</a>.
-</p><div class="figure"><a name="13small"></a><p class="title"><b>Figure 22.15. Printing via CUPS/Samba Server.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/13small.png" alt="Printing via CUPS/Samba Server."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2663012"></a>Samba Receiving Job-Files and Passing Them to CUPS</h3></div></div></div><p>
+</p><div class="figure"><a name="13small"></a><p class="title"><b>Figure 22.15. Printing via CUPS/Samba Server.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/13small.png" alt="Printing via CUPS/Samba Server."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id423600"></a>Samba Receiving Job-Files and Passing Them to CUPS</h3></div></div></div><p>
 Samba <span class="emphasis"><em>must</em></span> use its own spool directory (it is set by a line similar to <a class="link" href="smb.conf.5.html#PATH">path = /var/spool/samba</a>, in the <em class="parameter"><code>[printers]</code></em> or <em class="parameter"><code>[printername]</code></em> section of <code class="filename">smb.conf</code>). Samba receives the job in its own spool space and passes it
 into the spool directory of CUPS (the CUPS spool directory is set by the <em class="parameter"><code>RequestRoot</code></em>
 directive in a line that defaults to <em class="parameter"><code>RequestRoot /var/spool/cups</code></em>). CUPS checks the
@@ -1351,13 +1349,13 @@
 configured). If Samba runs on the same host as CUPS, you only need to
 allow &#8220;<span class="quote">localhost</span>&#8221; to print. If it runs on different machines, you
 need to make sure the Samba host gets access to printing on CUPS.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2663091"></a>Network PostScript RIP</h2></div></div></div><p>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id423671"></a>Network PostScript RIP</h2></div></div></div><p>
 This section discusses the use of CUPS filters on the server  configuration where
 clients make use of a PostScript driver with CUPS-PPDs.
 </p><p>
-<a class="indexterm" name="id2663108"></a>
-<a class="indexterm" name="id2663115"></a>
-<a class="indexterm" name="id2663121"></a>
+<a class="indexterm" name="id423686"></a>
+<a class="indexterm" name="id423693"></a>
+<a class="indexterm" name="id423699"></a>
 PPDs can control all print device options. They are usually provided by the manufacturer  if you own
 a PostScript printer, that is. PPD files are always a component of PostScript printer drivers on MS Windows or
 Apple Mac OS systems. They are ASCII files containing user-selectable print options, mapped to appropriate
@@ -1366,12 +1364,12 @@
 </p><p>
 CUPS can load, without any conversions, the PPD file from any Windows (NT is recommended) PostScript driver
 and handle the options. There is a Web browser interface to the print options (select <a class="ulink" href="http://localhost:631/printers/" target="_top">http://localhost:631/printers/</a> and click on one
-<span class="guibutton">Configure Printer</span> button to see it) or a command line interface (see <code class="literal">man
+<span class="guibutton">Configure Printer</span> button to see it) or a command-line interface (see <code class="literal">man
 lpoptions</code> or see if you have <code class="literal">lphelp</code> on your system). There are also some
 different GUI front-ends on Linux/UNIX, which can present PPD options to users. PPD options are normally meant
 to be evaluated by the PostScript RIP on the real PostScript printer.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2663181"></a>PPDs for Non-PS Printers on UNIX</h3></div></div></div><p>
-<a class="indexterm" name="id2663189"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id423751"></a>PPDs for Non-PS Printers on UNIX</h3></div></div></div><p>
+<a class="indexterm" name="id423758"></a>
 CUPS does not limit itself to &#8220;<span class="quote">real</span>&#8221; PostScript printers in its use of PPDs. The CUPS developers
 have extended the scope of the PPD concept to also describe available device and driver options for
 non-PostScript printers through CUPS-PPDs.
@@ -1383,8 +1381,8 @@
 for the interpretation of the supplied PostScript. Thus CUPS lets all its printers appear as PostScript
 devices to its clients, because it can act as a PostScript RIP for those printers, processing the received
 PostScript code into a proper raster print format.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2663226"></a>PPDs for Non-PS Printers on Windows</h3></div></div></div><p>
-<a class="indexterm" name="id2663234"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id423788"></a>PPDs for Non-PS Printers on Windows</h3></div></div></div><p>
+<a class="indexterm" name="id423795"></a>
 CUPS-PPDs can also be used on Windows clients, on top of a &#8220;<span class="quote">core</span>&#8221; PostScript driver (now
 recommended is the CUPS PostScript Driver for Windows NT/200x/XP; you can also use the Adobe one, with
 limitations). This feature enables CUPS to do a few tricks no other spooler can do:
@@ -1398,11 +1396,11 @@
 	Enable clients to consolidate on a single PostScript driver, even for many different target printers.
 	</p></li></ul></div><p>
 Using CUPS PPDs on Windows clients enables them to control all print job settings just as a UNIX client can do.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2663294"></a>Windows Terminal Servers (WTS) as CUPS Clients</h2></div></div></div><p>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id423848"></a>Windows Terminal Servers (WTS) as CUPS Clients</h2></div></div></div><p>
 This setup may be of special interest to people experiencing major problems in WTS environments. WTS often
 need a multitude of non-PostScript drivers installed to run their clients' variety of different printer
 models. This often imposes the price of much increased instability.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2663308"></a>Printer Drivers Running in &#8220;<span class="quote">Kernel Mode</span>&#8221; Cause Many
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id423860"></a>Printer Drivers Running in &#8220;<span class="quote">Kernel Mode</span>&#8221; Cause Many
 Problems</h3></div></div></div><p>
 Windows NT printer drivers, which run in &#8220;<span class="quote">kernel mode</span>&#8221;, introduce a high risk for the stability
 of the system if the driver is not really stable and well-tested. And there are a lot of bad drivers out
@@ -1414,14 +1412,14 @@
 run in kernel mode. This might be because until now there have been only two different PostScript drivers: the
 one from Adobe and the one from Microsoft. Both are well-tested and are as stable as you can imagine on
 Windows. The CUPS driver is derived from the Microsoft one.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2663347"></a>Workarounds Impose Heavy Limitations</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id423891"></a>Workarounds Impose Heavy Limitations</h3></div></div></div><p>
 In an attempt to work around problems, site administrators have resorted to restricting the
 allowed drivers installed on their WTS to one generic PCL and one PostScript driver. This, however, restricts
 the number of printer options available for clients to use. Often they can't get out more than simplex
 prints from one standard paper tray, while their devices could do much better if driven by a different driver!
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2663364"></a>CUPS: A &#8220;<span class="quote">Magical Stone</span>&#8221;?</h3></div></div></div><p>
-<a class="indexterm" name="id2663376"></a>
-<a class="indexterm" name="id2663382"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id423905"></a>CUPS: A &#8220;<span class="quote">Magical Stone</span>&#8221;?</h3></div></div></div><p>
+<a class="indexterm" name="id423916"></a>
+<a class="indexterm" name="id423923"></a>
 Using a PostScript driver, enabled with a CUPS-PPD, seems to be a very elegant way to overcome all these
 shortcomings. There are, depending on the version of Windows OS you use, up to three different PostScript
 drivers now available: Adobe, Microsoft, and CUPS PostScript drivers. None of them is known to cause major
@@ -1430,14 +1428,14 @@
 server acting as a PostScript RIP for its clients requires more CPU and RAM than when just acting as a
 &#8220;<span class="quote">raw spooling</span>&#8221; device. Plus, this setup is not yet widely tested, although the first feedbacks
 look very promising.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2663407"></a>PostScript Drivers with No Major Problems, Even in Kernel
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id423941"></a>PostScript Drivers with No Major Problems, Even in Kernel
 Mode</h3></div></div></div><p>
-<a class="indexterm" name="id2663416"></a>
-<a class="indexterm" name="id2663423"></a>
-<a class="indexterm" name="id2663430"></a>
-<a class="indexterm" name="id2663437"></a>
-<a class="indexterm" name="id2663444"></a>
-<a class="indexterm" name="id2663450"></a>
+<a class="indexterm" name="id423950"></a>
+<a class="indexterm" name="id423956"></a>
+<a class="indexterm" name="id423963"></a>
+<a class="indexterm" name="id423970"></a>
+<a class="indexterm" name="id423977"></a>
+<a class="indexterm" name="id423984"></a>
 More recent printer drivers on W200x and XP no longer run in kernel mode (unlike Windows NT). However, both
 operating systems can still use the NT drivers, running in kernel mode (you can roughly tell which is which as
 the drivers in subdirectory &#8220;<span class="quote">2</span>&#8221; of &#8220;<span class="quote">W32X86</span>&#8221; are &#8220;<span class="quote">old</span>&#8221; ones). As was
@@ -1449,13 +1447,13 @@
 allow them to publish the whole of the source code.  However, they have released the &#8220;<span class="quote">diff</span>&#8221; under
 the GPL, and if you are the owner of an &#8220;<span class="quote">MS DDK for Windows NT,</span>&#8221; you can check the driver
 yourself.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2663495"></a>Configuring CUPS for Driver Download</h2></div></div></div><p>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id424020"></a>Configuring CUPS for Driver Download</h2></div></div></div><p>
 As we have said before, all previously known methods to prepare client printer drivers on the Samba server for
 download and Point'n'Print convenience of Windows workstations are working with CUPS, too. These methods were
 described in <a class="link" href="classicalprinting.html" title="Chapter 21. Classical Printing Support">Classical Printing</a>. In reality, this is a pure Samba
 business and relates only to the Samba-Windows client relationship.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2663517"></a><span class="emphasis"><em>cupsaddsmb</em></span>: The Unknown Utility</h3></div></div></div><p>
-<a class="indexterm" name="id2663528"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id424038"></a><span class="emphasis"><em>cupsaddsmb</em></span>: The Unknown Utility</h3></div></div></div><p>
+<a class="indexterm" name="id424048"></a>
 The <em class="parameter"><code>cupsaddsmb</code></em> utility (shipped with all current CUPS versions) is an alternative
 method to transfer printer drivers into the Samba <em class="parameter"><code>[print$]</code></em> share. Remember, this
 share is where clients expect drivers deposited and set up for download and installation. It makes the sharing
@@ -1472,11 +1470,11 @@
 However, currently only Windows NT, 2000, and XP are supported by the
 CUPS drivers. You will also need to get the respective part of the Adobe driver
 if you need to support Windows 95, 98, and Me clients.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2663615"></a>Prepare Your <code class="filename">smb.conf</code> for <code class="literal">cupsaddsmb</code></h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id424126"></a>Prepare Your <code class="filename">smb.conf</code> for <code class="literal">cupsaddsmb</code></h3></div></div></div><p>
 Prior to running <code class="literal">cupsaddsmb</code>, you need the settings in
 <code class="filename">smb.conf</code> as shown in <a class="link" href="CUPS-printing.html#cupsadd-ex" title="Example 22.3. smb.conf for cupsaddsmb Usage">the <code class="filename">smb.conf</code> for cupsaddsmb Usage</a>.
-</p><div class="example"><a name="cupsadd-ex"></a><p class="title"><b>Example 22.3. smb.conf for cupsaddsmb Usage</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2663684"></a><em class="parameter"><code>load printers = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2663696"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id2663708"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2663729"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id2663740"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2663752"></a><em class="parameter"><code>browseable = no</code></em></td></tr><tr><td># setting depends on your requirements</td></tr><tr><td><a class="indexterm" name="id2663768"></a><em class="parameter"><code>guest ok = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2663779"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id2663791"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2663802"></a><em class="parameter"><code>printer admin = root</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[print$]</code></em></td></tr><tr><td><a class="indexterm" name="id2663823"></a><em class="parameter"><code>comment = Printer Drivers</code></em></td></tr><tr><td><a class="indexterm" name="id2663835"></a><em class="parameter"><code>path = /etc/samba/drivers</code></em></td></tr><tr><td><a class="indexterm" name="id2663847"></a><em class="parameter"><code>browseable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2663858"></a><em class="parameter"><code>guest ok = no</code></em></td></tr><tr><td><a class="indexterm" name="id2663870"></a><em class="parameter"><code>read only = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2663882"></a><em class="parameter"><code>write list = root, @smbprintadm</code></em></td></tr></table></div></div><br class="example-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2663896"></a>CUPS &#8220;<span class="quote">PostScript Driver for Windows NT/200x/XP</span>&#8221;</h3></div></div></div><p>
-<a class="indexterm" name="id2663906"></a>
+</p><div class="example"><a name="cupsadd-ex"></a><p class="title"><b>Example 22.3. smb.conf for cupsaddsmb Usage</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id424195"></a><em class="parameter"><code>load printers = yes</code></em></td></tr><tr><td><a class="indexterm" name="id424206"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id424218"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id424238"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id424250"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id424261"></a><em class="parameter"><code>browseable = no</code></em></td></tr><tr><td><a class="indexterm" name="id424272"></a><em class="parameter"><code>public = yes</code></em></td></tr><tr><td># setting depends on your requirements</td></tr><tr><td><a class="indexterm" name="id424288"></a><em class="parameter"><code>guest ok = yes</code></em></td></tr><tr><td><a class="indexterm" name="id424299"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id424310"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id424322"></a><em class="parameter"><code>printer admin = root</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[print$]</code></em></td></tr><tr><td><a class="indexterm" name="id424342"></a><em class="parameter"><code>comment = Printer Drivers</code></em></td></tr><tr><td><a class="indexterm" name="id424354"></a><em class="parameter"><code>path = /etc/samba/drivers</code></em></td></tr><tr><td><a class="indexterm" name="id424366"></a><em class="parameter"><code>browseable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id424377"></a><em class="parameter"><code>guest ok = no</code></em></td></tr><tr><td><a class="indexterm" name="id424388"></a><em class="parameter"><code>read only = yes</code></em></td></tr><tr><td><a class="indexterm" name="id424400"></a><em class="parameter"><code>write list = root</code></em></td></tr></table></div></div><br class="example-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id424414"></a>CUPS &#8220;<span class="quote">PostScript Driver for Windows NT/200x/XP</span>&#8221;</h3></div></div></div><p>
+<a class="indexterm" name="id424424"></a>
 CUPS users may get the exact same package from <a class="ulink" href="http://www.cups.org/software.html" target="_top">http://www.cups.org/software.html</a>.  It is a separate package
 from the CUPS-based software files, tagged as CUPS 1.1.x Windows NT/200x/XP Printer Driver for Samba (tar.gz,
 192k). The filename to download is <code class="filename">cups-samba-1.1.x.tar.gz</code>. Upon untar and unzipping, it
@@ -1489,8 +1487,8 @@
 cups-samba.remove
 cups-samba.ss
 </pre><p>
-<a class="indexterm" name="id2663953"></a>
-<a class="indexterm" name="id2663962"></a>
+<a class="indexterm" name="id424466"></a>
+<a class="indexterm" name="id424475"></a>
 These have been packaged with the ESP meta-packager software EPM. The <code class="filename">*.install</code> and
 <code class="filename">*.remove</code> files are simple shell scripts, which untar the <code class="filename">*.ss</code> (the
 <code class="filename">*.ss</code> is nothing else but a tar archive, which can be untarred by &#8220;<span class="quote">tar</span>&#8221; too).
@@ -1522,32 +1520,32 @@
 around this, copy/move the file (after running the <code class="literal">./cups-samba.install</code> script) manually to
 the correct place.
 </p></div><p>
-<a class="indexterm" name="id2664114"></a>
+<a class="indexterm" name="id424618"></a>
 This new CUPS PostScript driver is currently binary only, but free of charge. No complete source code is
 provided (yet). The reason is that it has been developed with the help of the Microsoft DDK and compiled with
 Microsoft Visual Studio 6. Driver developers are not allowed to distribute the whole of the source code as
 free software. However, CUPS developers released the &#8220;<span class="quote">diff</span>&#8221; in source code under the GPL, so
 anybody with a license for Visual Studio and a DDK will be able to compile for himself or herself.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2664135"></a>Recognizing Different Driver Files</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id424635"></a>Recognizing Different Driver Files</h3></div></div></div><p>
 The CUPS drivers do not support the older Windows 95/98/Me, but only the Windows NT/2000/XP client.
 </p><p>Windows NT, 2000, and XP are supported by:</p><div class="itemizedlist"><ul type="disc"><li><p>cups.hlp</p></li><li><p>cupsdrvr.dll</p></li><li><p>cupsui.dll</p></li></ul></div><p>
 Adobe drivers are available for the older Windows 95/98/Me as well as
 for Windows NT/2000/XP clients. The set of files is different from the
 different platforms.
 </p><p>Windows 95, 98, and ME are supported by:</p><div class="itemizedlist"><ul type="disc"><li><p>ADFONTS.MFM</p></li><li><p>ADOBEPS4.DRV</p></li><li><p>ADOBEPS4.HLP</p></li><li><p>DEFPRTR2.PPD</p></li><li><p>ICONLIB.DLL</p></li><li><p>PSMON.DLL</p></li></ul></div><p>Windows NT, 2000, and XP are supported by:</p><div class="itemizedlist"><ul type="disc"><li><p>ADOBEPS5.DLL</p></li><li><p>ADOBEPSU.DLL</p></li><li><p>ADOBEPSU.HLP</p></li></ul></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2664232"></a>
+<a class="indexterm" name="id424728"></a>
 If both the Adobe driver files and the CUPS driver files for the support of Windows NT/200x/XP are presently
 installed on the server, the Adobe files will be ignored and the CUPS files will be used. If you prefer
  for whatever reason  to use Adobe-only drivers, move away the three CUPS driver files.
 The Windows 9x/Me clients use the Adobe drivers in any case.
-</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2664253"></a>Acquiring the Adobe Driver Files</h3></div></div></div><p>
+</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id424746"></a>Acquiring the Adobe Driver Files</h3></div></div></div><p>
 Acquiring the Adobe driver files seems to be unexpectedly difficult for many users. They are not available on
 the Adobe Web site as single files, and the self-extracting and/or self-installing Windows-.exe is not easy to
 locate either. You probably need to use the included native installer and run the installation process on one
 client once. This will install the drivers (and one generic PostScript printer) locally on the client. When
 they are installed, share the generic PostScript printer. After this, the client's <em class="parameter"><code>[print$]</code></em> share holds the Adobe files, which you can get with smbclient from the CUPS host.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2664279"></a>ESP Print Pro PostScript Driver for Windows NT/200x/XP</h3></div></div></div><p>
-<a class="indexterm" name="id2664287"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id424766"></a>ESP Print Pro PostScript Driver for Windows NT/200x/XP</h3></div></div></div><p>
+<a class="indexterm" name="id424774"></a>
 Users of the ESP Print Pro software are able to install the ESP print drivers package as an alternative to the
 Adobe PostScript drivers.  To do so, retrieve the driver files from the normal download area of the ESP Print
 Pro software at <a class="ulink" href="http://www.easysw.com/software.html" target="_top">Easy Software</a> web site.
@@ -1557,19 +1555,19 @@
 the menu. Of course, you need to have prepared Samba beforehand to handle the driver files; that is, set up
 the <em class="parameter"><code>[print$]</code></em> share, and so on. The ESP Print Pro package includes the CUPS driver
 files as well as a (licensed) set of Adobe drivers for the Windows 95/98/Me client family.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2664341"></a>Caveats to Be Considered</h3></div></div></div><p>
-<a class="indexterm" name="id2664349"></a>
-<a class="indexterm" name="id2664356"></a>
-<a class="indexterm" name="id2664363"></a>
-<a class="indexterm" name="id2664369"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id424821"></a>Caveats to Be Considered</h3></div></div></div><p>
+<a class="indexterm" name="id424829"></a>
+<a class="indexterm" name="id424835"></a>
+<a class="indexterm" name="id424842"></a>
+<a class="indexterm" name="id424849"></a>
 Once you have run the install script (and possibly manually moved the <code class="filename">cups.hlp</code> file to
 <code class="filename">/usr/share/cups/drivers/</code>), the driver is ready to be put into Samba's <em class="parameter"><code>[print$]</code></em> share (which often maps to <code class="filename">/etc/samba/drivers/</code> and contains a
 subdirectory tree with <span class="emphasis"><em>WIN40</em></span> and <span class="emphasis"><em>W32X86</em></span> branches). You do this by
 running <code class="literal">cupsaddsmb</code> (see also <code class="literal">man cupsaddsmb</code> for CUPS since release
 1.1.16).
 </p><div class="tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p>
-<a class="indexterm" name="id2664428"></a>
-<a class="indexterm" name="id2664435"></a>
+<a class="indexterm" name="id424905"></a>
+<a class="indexterm" name="id424912"></a>
 You may need to put root into the smbpasswd file by running <code class="literal">smbpasswd</code>; this is especially
 important if you should run this whole procedure for the first time and are not working in an environment
 where everything is configured for <span class="emphasis"><em>single sign-on</em></span> to a Windows Domain Controller.
@@ -1584,8 +1582,8 @@
 in the <code class="filename">/usr/share/cups/drivers/</code> directory. The new <code class="literal">cupsaddsmb</code> (from
 1.1.16) will automatically prefer its own drivers if it finds both.
 </p></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2664511"></a>
-<a class="indexterm" name="id2664518"></a>
+<a class="indexterm" name="id424981"></a>
+<a class="indexterm" name="id424988"></a>
 Should your Windows clients have had the old <code class="filename">ADOBE*.*</code> files for the Adobe PostScript
 driver installed, the download and installation of the new CUPS PostScript driver for Windows NT/200x/XP will
 fail at first. You need to wipe the old driver from the clients first. It is not enough to
@@ -1599,43 +1597,43 @@
 printers using this driver in the <span class="guilabel">Printers</span> folder first. You will need Administrator
 privileges to do this.
 </p></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2664593"></a>
-<a class="indexterm" name="id2664602"></a>
+<a class="indexterm" name="id425055"></a>
+<a class="indexterm" name="id425064"></a>
 Once you have successfully downloaded the CUPS PostScript driver to a client, you can easily switch all
 printers to this one by proceeding as described in <a class="link" href="classicalprinting.html" title="Chapter 21. Classical Printing Support">Classical Printing
 Support</a>. Either change a driver for an existing printer by running the <span class="guilabel">Printer
 Properties</span> dialog, or use <code class="literal">rpcclient</code> with the <code class="literal">setdriver</code>
 subcommand.
-</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2664641"></a>Windows CUPS PostScript Driver Versus Adobe Driver</h3></div></div></div><p>
+</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id425100"></a>Windows CUPS PostScript Driver Versus Adobe Driver</h3></div></div></div><p>
 Are you interested in a comparison between the CUPS and the Adobe PostScript drivers? For our purposes, these
 are the most important items that weigh in favor of CUPS:
 </p><div class="itemizedlist"><ul type="disc"><li><p>No hassle with the Adobe EULA.</p></li><li><p>No hassle with the question, &#8220;<span class="quote">Where do I
 	get the ADOBE*.* driver files?</span>&#8221;</p></li><li><p>
-	<a class="indexterm" name="id2664671"></a>
+	<a class="indexterm" name="id425128"></a>
 	The Adobe drivers (on request of the printer PPD associated with them) often put a PJL header in front of the
 	main PostScript part of the print file. Thus, the print file starts with <em class="parameter"><code>&lt;1B
 	&gt;%-12345X</code></em> or <em class="parameter"><code>&lt;escape&gt;%-12345X</code></em> instead of
 	<em class="parameter"><code>%!PS</code></em>. This leads to the CUPS daemon autotyping the incoming file as a print-ready file,
 	not initiating a pass through the <em class="parameter"><code>pstops</code></em> filter (to speak more technically, it is not
-	regarded as the generic MIME-type <a class="indexterm" name="id2664710"></a>
+	regarded as the generic MIME-type <a class="indexterm" name="id425162"></a>
 	<em class="parameter"><code>application/postscript</code></em>, but as the more special MIME type
-	<a class="indexterm" name="id2664723"></a>
+	<a class="indexterm" name="id425175"></a>
 	<em class="parameter"><code>application/cups.vnd-postscript</code></em>), which therefore also leads to the page accounting in
 	<em class="parameter"><code>/var/log/cups/page_log</code></em> not receiving the exact number of pages; instead the dummy page
 	number of &#8220;<span class="quote">1</span>&#8221; is logged in a standard setup).
 	</p></li><li><p>The Adobe driver has more options to misconfigure the
-<a class="indexterm" name="id2664754"></a>
+<a class="indexterm" name="id425204"></a>
 	PostScript generated by it (like setting it inadvertently to
 	<span class="guilabel">Optimize for Speed</span> instead of
 	<span class="guilabel">Optimize for Portability</span>, which
 	could lead to CUPS being unable to process it).</p></li><li><p>The CUPS PostScript driver output sent by Windows
-<a class="indexterm" name="id2664781"></a>
+<a class="indexterm" name="id425228"></a>
 	clients to the CUPS server is guaranteed to autotype 
 	as the generic MIME type <em class="parameter"><code>application/postscript</code></em>,
 	thus passing through the CUPS <em class="parameter"><code>pstops</code></em> filter and logging the
 	correct number of pages in the <code class="filename">page_log</code> for
 	accounting and quota purposes.</p></li><li><p>
-	<a class="indexterm" name="id2664814"></a>
+	<a class="indexterm" name="id425259"></a>
 	The CUPS PostScript driver supports the sending of additional standard (IPP) print options by Windows
 	NT/200x/XP clients. Such additional print options are naming the CUPS standard <span class="emphasis"><em>banner
 	pages</em></span> (or the custom ones, should they be installed at the time of driver download), using the CUPS
@@ -1648,9 +1646,9 @@
 	not disturb any other applications because they will regard it as a comment
 	and simply ignore it).</p></li><li><p>The CUPS PostScript driver will be the heart of the
 	fully fledged CUPS IPP client for Windows NT/200x/XP to be released soon
-	(probably alongside the first beta release for CUPS 1.2).</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2664859"></a>Run cupsaddsmb (Quiet Mode)</h3></div></div></div><p>
-<a class="indexterm" name="id2664867"></a>
-<a class="indexterm" name="id2664873"></a>
+	(probably alongside the first beta release for CUPS 1.2).</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id425295"></a>Run cupsaddsmb (Quiet Mode)</h3></div></div></div><p>
+<a class="indexterm" name="id425303"></a>
+<a class="indexterm" name="id425310"></a>
 The <code class="literal">cupsaddsmb</code> command copies the needed files into your <em class="parameter"><code>[print$]</code></em>
 share. Additionally, the PPD associated with this printer is copied from <code class="filename">/etc/cups/ppd/</code>
 to <em class="parameter"><code>[print$]</code></em>. There the files wait for convenient Windows client installations via
@@ -1658,26 +1656,26 @@
 Samba. If you have a small network, you are probably using user-level security (<a class="link" href="smb.conf.5.html#SECURITY">security = user</a>).
 </p><p>
 Here is an example of a successfully run <code class="literal">cupsaddsmb</code> command: 
-<a class="indexterm" name="id2664931"></a>
-<a class="indexterm" name="id2664938"></a>
+<a class="indexterm" name="id425364"></a>
+<a class="indexterm" name="id425371"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>cupsaddsmb -U root infotec_IS2027</code></strong>
 Password for root required to access localhost via Samba: <strong class="userinput"><code>['secret']</code></strong>
 </pre><p>
-<a class="indexterm" name="id2664970"></a>
+<a class="indexterm" name="id425402"></a>
 To share <span class="emphasis"><em>all</em></span> printers and drivers, use the
 <code class="option">-a</code> parameter instead of a printer name. Since
 <code class="literal">cupsaddsmb</code> &#8220;<span class="quote">exports</span>&#8221; the printer drivers to Samba, it should be
 obvious that it only works for queues with a CUPS driver associated.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2664999"></a>Run cupsaddsmb with Verbose Output</h3></div></div></div><p>
-<a class="indexterm" name="id2665007"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id425429"></a>Run cupsaddsmb with Verbose Output</h3></div></div></div><p>
+<a class="indexterm" name="id425437"></a>
 Probably you want to see what's going on. Use the
 <code class="option">-v</code> parameter to get a more verbose output. The
 output below was edited for better readability: all &#8220;<span class="quote">\</span>&#8221; at the end of
 a line indicate that I inserted an artificial line break plus some
 indentation here:
-<a class="indexterm" name="id2665025"></a>
-<a class="indexterm" name="id2665034"></a>
+<a class="indexterm" name="id425452"></a>
+<a class="indexterm" name="id425462"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>cupsaddsmb -U root -v infotec_2105</code></strong>
 Password for root required to access localhost via GANDALF:
@@ -1746,17 +1744,17 @@
 Also, if you look further, you may discover error messages like NT_STATUS_OBJECT_NAME_COLLISION in the output.
 This will occur when the directories WIN40 and W32X86 already existed in the <em class="parameter"><code>[print$]</code></em>
 driver download share (from a previous driver installation). These are harmless warning messages.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2665190"></a>Understanding cupsaddsmb</h3></div></div></div><p>
-<a class="indexterm" name="id2665198"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id425560"></a>Understanding cupsaddsmb</h3></div></div></div><p>
+<a class="indexterm" name="id425568"></a>
 What has happened? What did <code class="literal">cupsaddsmb</code> do? There are five stages of the procedure:
 </p><div class="orderedlist"><ol type="1"><li><p>
-	<a class="indexterm" name="id2665223"></a>
+	<a class="indexterm" name="id425592"></a>
 	Call the CUPS server via IPP and request the driver files and the PPD file for the named printer.</p></li><li><p>Store the files temporarily in the local TEMPDIR (as defined in <code class="filename">cupsd.conf</code>).</p></li><li><p>Connect via smbclient to the Samba server's <em class="parameter"><code>[print$]</code></em> share and put the files into the
 	 share's WIN40 (for Windows 9x/Me) and W32X86 (for Windows NT/200x/XP) subdirectories.</p></li><li><p>
-	<a class="indexterm" name="id2665260"></a>
+	<a class="indexterm" name="id425626"></a>
 	Connect via rpcclient to the Samba server and execute the <code class="literal">adddriver</code> command with the correct parameters.
 	</p></li><li><p>
-	<a class="indexterm" name="id2665281"></a>
+	<a class="indexterm" name="id425646"></a>
 	Connect via rpcclient to the Samba server a second time and execute the <code class="literal">setdriver</code> command.</p></li></ol></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
 You can run the <code class="literal">cupsaddsmb</code> utility with parameters to specify one remote host as Samba host
 and a second remote host as CUPS host. Especially if you want to get a deeper understanding, it is a good idea
@@ -1765,7 +1763,7 @@
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>cupsaddsmb -H sambaserver -h cupsserver -v printer</code></strong>
 </pre><p>
-</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2665335"></a>How to Recognize If cupsaddsmb Completed Successfully</h3></div></div></div><p>
+</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id425696"></a>How to Recognize If cupsaddsmb Completed Successfully</h3></div></div></div><p>
 You <span class="emphasis"><em>must</em></span> always check if the utility completed
 successfully in all fields. You need at minimum these three messages
 among the output:
@@ -1794,9 +1792,9 @@
 It is impossible to see any diagnostic output if you do not run <code class="literal">cupsaddsmb</code> in verbose mode.
 Therefore, we strongly recommend against use of the default quiet mode. It will hide any problems from you that
 might occur.
-</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2665457"></a>cupsaddsmb with a Samba PDC</h3></div></div></div><p>
-<a class="indexterm" name="id2665465"></a>
-<a class="indexterm" name="id2665472"></a>
+</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id425806"></a>cupsaddsmb with a Samba PDC</h3></div></div></div><p>
+<a class="indexterm" name="id425814"></a>
+<a class="indexterm" name="id425821"></a>
 Can't get the standard <code class="literal">cupsaddsmb</code> command to run on a Samba PDC?  Are you asked for the
 password credential again and again, and the command just will not take off at all? Try one of these
 variations:
@@ -1806,33 +1804,32 @@
 <code class="prompt">root# </code><strong class="userinput"><code>cupsaddsmb -H SAURON -U MIDEARTH\\root -h cups-server -v printername</code></strong>
 </pre><p>
 (Note the two backslashes: the first one is required to &#8220;<span class="quote">escape</span>&#8221; the second one).
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2665538"></a>cupsaddsmb Flowchart</h3></div></div></div><p>
-<a class="indexterm" name="id2665546"></a>
-<a class="indexterm" name="id2665553"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id425884"></a>cupsaddsmb Flowchart</h3></div></div></div><p>
+<a class="indexterm" name="id425891"></a>
+<a class="indexterm" name="id425898"></a>
 <a class="link" href="CUPS-printing.html#small14" title="Figure 22.16. cupsaddsmb Flowchart.">The cupsaddsmb Flowchart</a> shows a chart about the procedures, command flows, and
 data flows of the <code class="literal">cupaddsmb</code> command. Note again: cupsaddsmb is
 not intended to, and does not work with, raw print queues!
-</p><div class="figure"><a name="small14"></a><p class="title"><b>Figure 22.16. cupsaddsmb Flowchart.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/14small.png" alt="cupsaddsmb Flowchart."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2665619"></a>Installing the PostScript Driver on a Client</h3></div></div></div><p>
-<a class="indexterm" name="id2665627"></a>
-<a class="indexterm" name="id2665634"></a>
+</p><div class="figure"><a name="small14"></a><p class="title"><b>Figure 22.16. cupsaddsmb Flowchart.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/14small.png" alt="cupsaddsmb Flowchart."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id425962"></a>Installing the PostScript Driver on a Client</h3></div></div></div><p>
+<a class="indexterm" name="id425970"></a>
+<a class="indexterm" name="id425977"></a>
 After <code class="literal">cupsaddsmb</code> is completed, your driver is prepared for the clients to use. Here are the
 steps you must perform to download and install it via Point'n'Print. From a Windows client, browse to the
 CUPS/Samba server:
 </p><div class="itemizedlist"><ul type="disc"><li><p>
-	<a class="indexterm" name="id2665657"></a>
+	<a class="indexterm" name="id425998"></a>
 	Open the <span class="guilabel">Printers</span> share of Samba in Network Neighborhood.</p></li><li><p>Right-click on the printer in question.</p></li><li><p>From the opening context menu select
 	<span class="guimenuitem">Install...</span> or 
 	<span class="guimenuitem">Connect...</span> (depending on the Windows version you use).</p></li></ul></div><p>
 After a few seconds, there should be a new printer in your client's <span class="emphasis"><em>local</em></span>
 <span class="guilabel">Printers</span> folder. On Windows XP it will follow a naming convention of
 <span class="emphasis"><em>PrinterName on SambaServer</em></span>. (In my current case it is infotec_2105 on kde-bitshop). If
-you want to test it and send your first job from an application like Microsoft Word,
-the new printer appears in a
+you want to test it and send your first job from an application like Winword, the new printer appears in a
 <code class="filename">\\SambaServer\PrinterName</code> entry in the drop-down list of available printers.
 </p><p>
-<a class="indexterm" name="id2665726"></a>
-<a class="indexterm" name="id2665733"></a>
-<a class="indexterm" name="id2665740"></a>
+<a class="indexterm" name="id426062"></a>
+<a class="indexterm" name="id426069"></a>
+<a class="indexterm" name="id426076"></a>
 <code class="literal">cupsaddsmb</code> will only reliably work with CUPS version 1.1.15 or higher and with Samba
 version 2.2.4, or later. If it does not work, or if the automatic printer driver download to the clients does
 not succeed, you can still manually install the CUPS printer PPD on top of the Adobe PostScript driver on
@@ -1861,34 +1858,34 @@
 	Sometimes you can choose PostScript Language Level: in case of problems try 2
 	instead of 3 (the latest ESP Ghostscript package handles Level 3 PostScript very well; Adobe).
 	</p></li><li><p>
-	Say Yes to PostScript Error Handler (Adobe).</p></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2665854"></a>Installing PostScript Driver Files Manually Using rpcclient</h2></div></div></div><p>
+	Say Yes to PostScript Error Handler (Adobe).</p></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id426171"></a>Installing PostScript Driver Files Manually Using rpcclient</h2></div></div></div><p>
 Of course, you can run all the commands that are embedded into the
 cupsaddsmb convenience utility yourself, one by one, and upload
 and prepare the driver files for future client downloads.
 </p><div class="orderedlist"><ol type="1"><li><p>Prepare Samba (a CUPS print queue with the name of the
 	printer should be there. We are providing the driver now).</p></li><li><p>Copy all files to <em class="parameter"><code>[print$]</code></em>.</p></li><li><p>
-	<a class="indexterm" name="id2665893"></a>
+	<a class="indexterm" name="id426207"></a>
 	Run <code class="literal">rpcclient adddriver</code>
 	(for each client architecture you want to support).</p></li><li><p>
-	<a class="indexterm" name="id2665913"></a>
+	<a class="indexterm" name="id426227"></a>
 	Run <code class="literal">rpcclient setdriver.</code></p></li></ol></div><p>
-<a class="indexterm" name="id2665932"></a>
-<a class="indexterm" name="id2665941"></a>
-<a class="indexterm" name="id2665951"></a>
-<a class="indexterm" name="id2665960"></a>
-<a class="indexterm" name="id2665969"></a>
+<a class="indexterm" name="id426246"></a>
+<a class="indexterm" name="id426255"></a>
+<a class="indexterm" name="id426264"></a>
+<a class="indexterm" name="id426273"></a>
+<a class="indexterm" name="id426282"></a>
 We are going to do this now. First, read the man page on <em class="parameter"><code>rpcclient</code></em> to get a first idea.
 Look at all the printing-related subcommands: <code class="literal">enumprinters</code>, <code class="literal">enumdrivers</code>,
 <code class="literal">enumports</code>, <code class="literal">adddriver</code>, and <code class="literal">setdriver</code> are among the
 most interesting ones. <em class="parameter"><code>rpcclient</code></em> implements an important part of the MS-RPC protocol.
 You can use it to query (and command) a Windows NT (or 200x/XP) PC, too. MS-RPC is used by Windows clients,
 among other things, to benefit from the Point'n'Print features. Samba can now mimic this as well.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2666028"></a>A Check of the rpcclient man Page</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id426337"></a>A Check of the rpcclient man Page</h3></div></div></div><p>
 First let's check the <em class="parameter"><code>rpcclient</code></em> man page. Here are two relevant passages:
 </p><p>
-<a class="indexterm" name="id2666046"></a>
-<a class="indexterm" name="id2666053"></a>
-<a class="indexterm" name="id2666060"></a>
+<a class="indexterm" name="id426355"></a>
+<a class="indexterm" name="id426361"></a>
+<a class="indexterm" name="id426368"></a>
 <code class="literal">adddriver &lt;arch&gt; &lt;config&gt;</code> Execute an <code class="literal">AddPrinterDriver()</code> RPC
 to install the printer driver information on the server. The driver files should already exist in the
 directory returned by <code class="literal">getdriverdir</code>. Possible values for <em class="parameter"><code>arch</code></em> are the
@@ -1911,18 +1908,18 @@
 NT print server, the print monitor for a driver must already be installed before adding the driver or else the
 RPC will fail.
 </p><p>
-<a class="indexterm" name="id2666138"></a>
-<a class="indexterm" name="id2666145"></a>
+<a class="indexterm" name="id426439"></a>
+<a class="indexterm" name="id426445"></a>
 <code class="literal">setdriver &lt;printername&gt; &lt;drivername&gt;</code> Execute a <code class="literal">SetPrinter()</code>
 command to update the printer driver associated with an installed printer. The printer driver must already be
 correctly installed on the print server.
 </p><p>
-<a class="indexterm" name="id2666170"></a>
-<a class="indexterm" name="id2666177"></a>
+<a class="indexterm" name="id426469"></a>
+<a class="indexterm" name="id426476"></a>
 See also the <code class="literal">enumprinters</code> and <code class="literal">enumdrivers</code> commands to
 obtain a list of installed printers and drivers.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2666199"></a>Understanding the rpcclient man Page</h3></div></div></div><p>
-<a class="indexterm" name="id2666208"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id426497"></a>Understanding the rpcclient man Page</h3></div></div></div><p>
+<a class="indexterm" name="id426505"></a>
 The <span class="emphasis"><em>exact</em></span> format isn't made too clear by the man page, since you have to deal with some
 parameters containing spaces. Here is a better description for it. We have line-broken the command and
 indicated the breaks with &#8220;<span class="quote">\</span>&#8221;. Usually you would type the command in one line without the line
@@ -1946,9 +1943,9 @@
 listening to the traffic caused by Windows computers on the wire. We may as well turn to a Windows box now and
 access it from a UNIX workstation. We will query it with <code class="literal">rpcclient</code> to see what it tells us
 and try to understand the man page more clearly.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2666304"></a>Producing an Example by Querying a Windows Box</h3></div></div></div><p>
-<a class="indexterm" name="id2666313"></a>
-<a class="indexterm" name="id2666322"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id426589"></a>Producing an Example by Querying a Windows Box</h3></div></div></div><p>
+<a class="indexterm" name="id426597"></a>
+<a class="indexterm" name="id426606"></a>
 We could run <code class="literal">rpcclient</code> with a <code class="literal">getdriver</code> or a
 <code class="literal">getprinter</code> subcommand (in level 3 verbosity) against it. Just sit down at a UNIX or Linux
 workstation with the Samba utilities installed, then type the following command:
@@ -1956,7 +1953,7 @@
 <code class="prompt">root# </code><strong class="userinput"><code>rpcclient -U'user%secret' NT-SERVER -c 'getdriver printername 3'</code></strong>
 </pre><p>
 From the result it should become clear which is which. Here is an example from my installation:
-<a class="indexterm" name="id2666373"></a>
+<a class="indexterm" name="id426654"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>rpcclient -U'Danka%xxxx' W200xSERVER \
     -c'getdriver "DANKA InfoStream Virtual Printer" 3'</code></strong>
@@ -1987,10 +1984,10 @@
 would go into the last field <em class="parameter"><code>ListOfFiles,Comma-separated</code></em>. For the CUPS PostScript
 drivers, we do not need any (nor would we for the Adobe PostScript driver); therefore, the field will get a
 &#8220;<span class="quote">NULL</span>&#8221; entry.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2666436"></a>Requirements for adddriver and setdriver to Succeed</h3></div></div></div><p>
-<a class="indexterm" name="id2666445"></a>
-<a class="indexterm" name="id2666454"></a>
-<a class="indexterm" name="id2666461"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id426709"></a>Requirements for adddriver and setdriver to Succeed</h3></div></div></div><p>
+<a class="indexterm" name="id426717"></a>
+<a class="indexterm" name="id426726"></a>
+<a class="indexterm" name="id426733"></a>
 From the man page (and from the quoted output of <code class="literal">cupsaddsmb</code> above) it becomes clear that
 you need to have certain conditions in order to make the manual uploading and initializing of the driver files
 succeed. The two <code class="literal">rpcclient</code> subcommands (<code class="literal">adddriver</code> and
@@ -2007,19 +2004,19 @@
 	the <em class="parameter"><code>[print$]</code></em> share and create
 	subdirectories.</p></li><li><p>The printer you are going to set up for the Windows
 	clients needs to be installed in CUPS already.</p></li><li><p>
-	<a class="indexterm" name="id2666614"></a>
-	<a class="indexterm" name="id2666623"></a>
+	<a class="indexterm" name="id426877"></a>
+	<a class="indexterm" name="id426886"></a>
 	The CUPS printer must be known to Samba; otherwise the <code class="literal">setdriver</code> subcommand fails with an
 	NT_STATUS_UNSUCCESSFUL error. To check if the printer is known by Samba, you may use the
 	<code class="literal">enumprinters</code> subcommand to <code class="literal">rpcclient</code>. A long-standing bug prevented a
 	proper update of the printer list until every smbd process had received a SIGHUP or was restarted. Remember
 	this in case you've created the CUPS printer just recently and encounter problems: try restarting Samba.
-	</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2666661"></a>Manual Driver Installation in 15 Steps</h3></div></div></div><p>
+	</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id426920"></a>Manual Driver Installation in 15 Steps</h3></div></div></div><p>
 We are going to install a printer driver now by manually executing all
 required commands. Because this may seem a rather complicated process at
 first, we go through the procedure step by step, explaining every
 single action item as it comes up.
-</p><div class="procedure"><a name="id2666675"></a><p class="title"><b>Procedure 22.2. Manual Driver Installation</b></p><ol type="1"><li><p class="title"><b>Install the printer on CUPS.</b></p><pre class="screen">
+</p><div class="procedure"><a name="id426931"></a><p class="title"><b>Procedure 22.2. Manual Driver Installation</b></p><ol type="1"><li><p class="title"><b>Install the printer on CUPS.</b></p><pre class="screen">
 	<code class="prompt">root# </code><strong class="userinput"><code>lpadmin -p mysmbtstprn -v socket://10.160.51.131:9100 -E \
 				-P canonIR85.ppd</code></strong>
 	</pre><p>
@@ -2028,7 +2025,7 @@
 	(a.k.a. JetDirect or Direct TCP/IP) connection. You need to be root
 	for this step.
 	</p></li><li><p class="title"><b>(Optional.) Check if the printer is recognized by Samba.</b></p><p>
-	<a class="indexterm" name="id2666731"></a>
+	<a class="indexterm" name="id426984"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>rpcclient -Uroot%xxxx -c 'enumprinters' localhost \
   | grep -C2 mysmbtstprn</code></strong>
@@ -2048,8 +2045,8 @@
 	of the following steps. Alternatively, you can authenticate as one of the users from the &#8220;<span class="quote">write
 	list</span>&#8221; as defined in <code class="filename">smb.conf</code> for <em class="parameter"><code>[print$]</code></em>.
 	</p></li><li><p class="title"><b>(Optional.) Check if Samba knows a driver for the printer.</b></p><p>
-	<a class="indexterm" name="id2666829"></a>
-	<a class="indexterm" name="id2666838"></a>
+	<a class="indexterm" name="id427075"></a>
+	<a class="indexterm" name="id427085"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>rpcclient -Uroot%xxxx -c 'getprinter mysmbtstprn 2'\
  localhost | grep driver </code></strong>
@@ -2105,7 +2102,7 @@
 The driver files now are in the W32X86 architecture &#8220;<span class="quote">root</span>&#8221; of
 <em class="parameter"><code>[print$]</code></em>.
 </p></li><li><p class="title"><b>Tell Samba that these are driver files (<code class="literal">adddriver</code>).</b></p><p>
-<a class="indexterm" name="id2667027"></a>
+<a class="indexterm" name="id427255"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>rpcclient -Uroot%xxxx -c 'adddriver "Windows NT x86" \
 	"mydrivername:cupsdrvr.dll:mysmbtstprn.PPD: \
@@ -2136,7 +2133,7 @@
 Notice how step 6 also moved the driver files to the appropriate
 subdirectory. Compare this with the situation after step 5.
 </p></li><li><p class="title"><b>(Optional.) Verify if Samba now recognizes the driver.</b></p><p>
-<a class="indexterm" name="id2667134"></a>
+<a class="indexterm" name="id427350"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>rpcclient -Uroot%xxxx -c 'enumdrivers 3' \
 	localhost | grep -B2 -A5 mydrivername</code></strong>
@@ -2151,8 +2148,8 @@
 </pre><p>
 Remember, this command greps for the name you chose for the
 driver in step 6. This command must succeed before you can proceed.
-</p></li><li><p class="title"><b>Tell Samba which printer should use these driver files (<code class="literal">setdriver</code>).</b></p><p>
-<a class="indexterm" name="id2667189"></a>
+</p></li><li><p><span style="color: red">&lt;title&gt;Tell Samba which printer should use these driver files (<code class="literal">setdriver</code>).&lt;/title&gt;</span></p><p>
+<a class="indexterm" name="id427401"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>rpcclient -Uroot%xxxx -c 'setdriver mysmbtstprn mydrivername' \
 	localhost</code></strong>
@@ -2163,9 +2160,9 @@
 succeed. The only preconditions are that <code class="literal">enumdrivers</code> must find the driver and
 <code class="literal">enumprinters</code> must find the printer.
 </p></li><li><p class="title"><b>(Optional) Verify if Samba has recognized this association.</b></p><p>
-<a class="indexterm" name="id2667249"></a>
-<a class="indexterm" name="id2667258"></a>
-<a class="indexterm" name="id2667267"></a>
+<a class="indexterm" name="id427456"></a>
+<a class="indexterm" name="id427465"></a>
+<a class="indexterm" name="id427474"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>rpcclient -Uroot%xxxx -c 'getprinter mysmbtstprn 2' localhost \
   | grep driver</code></strong>
@@ -2205,13 +2202,13 @@
      comment:[mysmbtstprn]
 
 </pre><p>
-<a class="indexterm" name="id2667345"></a>
+<a class="indexterm" name="id427542"></a>
 Compare these results with the ones from steps 2 and 3. Every one of these commands show the driver is installed. Even
 the <code class="literal">enumprinters</code> command now lists the driver
 on the &#8220;<span class="quote">description</span>&#8221; line.
 </p></li><li><p class="title"><b>(Optional.) Tickle the driver into a correct
 device mode.</b></p><p>
-<a class="indexterm" name="id2667380"></a>
+<a class="indexterm" name="id427575"></a>
 You certainly know how to install the driver on the client. In case
 you are not particularly familiar with Windows, here is a short
 recipe: Browse the Network Neighborhood, go to the Samba server, and look
@@ -2234,12 +2231,12 @@
 Change any printer setting once (like changing <span class="emphasis"><em><span class="guilabel">portrait</span> to
 <span class="guilabel">landscape</span></em></span>), click on <span class="guibutton">Apply</span>, and change the setting back.
 </p></li><li><p class="title"><b>Install the printer on a client (Point'n'Print).</b></p><p>
-<a class="indexterm" name="id2667498"></a>
+<a class="indexterm" name="id427684"></a>
 </p><pre class="screen">
 <code class="prompt">C:\&gt; </code><strong class="userinput"><code>rundll32 printui.dll,PrintUIEntry /in /n "\\sambaserver\mysmbtstprn"</code></strong>
 </pre><p>
 If it does not work, it could be a permissions problem with the <em class="parameter"><code>[print$]</code></em> share.
-</p></li><li><p class="title"><b>(Optional) Print a test page.</b></p><a class="indexterm" name="id2667540"></a><pre class="screen">
+</p></li><li><p class="title"><b>(Optional) Print a test page.</b></p><a class="indexterm" name="id427724"></a><pre class="screen">
 <code class="prompt">C:\&gt; </code><strong class="userinput"><code>rundll32 printui.dll,PrintUIEntry /p /n "\\sambaserver\mysmbtstprn"</code></strong>
 </pre><p>
 Then hit [TAB] five times, [ENTER] twice, [TAB] once, and [ENTER] again, and march to the printer.
@@ -2249,8 +2246,8 @@
  why not just throw it away!
 </p></li><li><p class="title"><b>(Obligatory.) Enjoy. Jump. Celebrate your success.</b></p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>echo "Cheeeeerioooooo! Success..." &gt;&gt; /var/log/samba/log.smbd</code></strong>
-</pre></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2667620"></a>Troubleshooting Revisited</h3></div></div></div><p>
-<a class="indexterm" name="id2667628"></a>
+</pre></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id427799"></a>Troubleshooting Revisited</h3></div></div></div><p>
+<a class="indexterm" name="id427807"></a>
 The setdriver command will fail if in Samba's mind the queue is not
 already there. A successful installation displys the promising message that the:
 </p><pre class="screen">
@@ -2261,20 +2258,20 @@
 <code class="computeroutput">
 result was NT_STATUS_UNSUCCESSFUL
 </code></p><p>
-<a class="indexterm" name="id2667660"></a>
-<a class="indexterm" name="id2667666"></a>
+<a class="indexterm" name="id427836"></a>
+<a class="indexterm" name="id427842"></a>
 It is not good enough that you can see the queue in CUPS, using the <code class="literal">lpstat -p ir85wm</code>
 command. A bug in most recent versions of Samba prevents the proper update of the queue list. The recognition
 of newly installed CUPS printers fails unless you restart Samba or send a HUP to all smbd processes. To verify
 if this is the reason why Samba does not execute the <code class="literal">setdriver</code> command successfully, check
 if Samba &#8220;<span class="quote">sees</span>&#8221; the printer:
-<a class="indexterm" name="id2667696"></a>
+<a class="indexterm" name="id427868"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>rpcclient transmeta -N -U'root%xxxx' -c 'enumprinters 0'|grep ir85wm</code></strong>
         printername:[ir85wm]
 </pre><p>
 An alternate command could be this: 
-<a class="indexterm" name="id2667726"></a>
+<a class="indexterm" name="id427896"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>rpcclient transmeta -N -U'root%secret' -c 'getprinter ir85wm' </code></strong>
         cmd = getprinter ir85wm
@@ -2284,28 +2281,28 @@
         comment:[CUPS PostScript-Treiber for Windows NT/200x/XP]
 </pre><p>
 By the way, you can use these commands, plus a few more, of course, to install drivers on remote Windows NT print servers too!
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2667763"></a>The Printing <code class="filename">*.tdb</code> Files</h2></div></div></div><p>
-<a class="indexterm" name="id2667777"></a>
-<a class="indexterm" name="id2667783"></a>
-<a class="indexterm" name="id2667792"></a>
-<a class="indexterm" name="id2667801"></a>
-<a class="indexterm" name="id2667810"></a>
-<a class="indexterm" name="id2667820"></a>
-<a class="indexterm" name="id2667829"></a>
-<a class="indexterm" name="id2667838"></a>
-<a class="indexterm" name="id2667846"></a>
-<a class="indexterm" name="id2667855"></a>
-<a class="indexterm" name="id2667864"></a>
-<a class="indexterm" name="id2667874"></a>
-<a class="indexterm" name="id2667883"></a>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id427930"></a>The Printing <code class="filename">*.tdb</code> Files</h2></div></div></div><p>
+<a class="indexterm" name="id427944"></a>
+<a class="indexterm" name="id427950"></a>
+<a class="indexterm" name="id427959"></a>
+<a class="indexterm" name="id427968"></a>
+<a class="indexterm" name="id427977"></a>
+<a class="indexterm" name="id427986"></a>
+<a class="indexterm" name="id427995"></a>
+<a class="indexterm" name="id428004"></a>
+<a class="indexterm" name="id428013"></a>
+<a class="indexterm" name="id428022"></a>
+<a class="indexterm" name="id428031"></a>
+<a class="indexterm" name="id428040"></a>
+<a class="indexterm" name="id428049"></a>
 Some mystery is associated with the series of files with a tdb suffix appearing in every Samba installation.
 They are <code class="filename">connections.tdb</code>, <code class="filename">printing.tdb</code>,
 <code class="filename">share_info.tdb</code>, <code class="filename">ntdrivers.tdb</code>, <code class="filename">unexpected.tdb</code>,
 <code class="filename">brlock.tdb</code>, <code class="filename">locking.tdb</code>, <code class="filename">ntforms.tdb</code>,
 <code class="filename">messages.tdb</code> , <code class="filename">ntprinters.tdb</code>, <code class="filename">sessionid.tdb</code>,
 and <code class="filename">secrets.tdb</code>. What is their purpose?
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2667965"></a>Trivial Database Files</h3></div></div></div><p>
-<a class="indexterm" name="id2667973"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id428129"></a>Trivial Database Files</h3></div></div></div><p>
+<a class="indexterm" name="id428137"></a>
 A Windows NT (print) server keeps track of all information needed to serve its duty toward its clients by
 storing entries in the Windows registry. Client queries are answered by reading from the registry,
 Administrator or user configuration settings that are saved by writing into the registry. Samba and UNIX
@@ -2314,7 +2311,7 @@
 <code class="filename">/var/lib/samba/</code> or <code class="filename">/var/lock/samba/</code>. The printing-related files are
 <code class="filename">ntprinters.tdb</code>, <code class="filename">printing.tdb</code>,<code class="filename">ntforms.tdb</code>, and
 <code class="filename">ntdrivers.tdb</code>.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2668033"></a>Binary Format</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id428191"></a>Binary Format</h3></div></div></div><p>
 <code class="filename">*.tdb</code> files are not human readable. They are written in a binary format. &#8220;<span class="quote">Why not
 ASCII?</span>&#8221;, you may ask. &#8220;<span class="quote">After all, ASCII configuration files are a good and proven tradition on
 UNIX.</span>&#8221; The reason for this design decision by the Samba Team is mainly performance. Samba needs to be
@@ -2323,16 +2320,16 @@
 <code class="filename">*.tdb</code> file <span class="emphasis"><em>at the same time</em></span>. The file format of Samba's
 <code class="filename">*.tdb</code> files allows for this provision. Many smbd processes may write to the same
 <code class="filename">*.tdb</code> file at the same time. This wouldn't be possible with pure ASCII files.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2668099"></a>Losing <code class="filename">*.tdb</code> Files</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id428252"></a>Losing <code class="filename">*.tdb</code> Files</h3></div></div></div><p>
 It is very important that all <code class="filename">*.tdb</code> files remain consistent over all write and read
 accesses. However, it may happen that these files <span class="emphasis"><em>do</em></span> get corrupted. (A <code class="literal">kill -9
 `pidof smbd'</code> while a write access is in progress could do the damage, as could a power interruption,
 etc.). In cases of trouble, a deletion of the old printing-related <code class="filename">*.tdb</code> files may be the
 only option. After that, you need to re-create all print-related setups unless you have made a backup of the
 <code class="filename">*.tdb</code> files in time.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2668150"></a>Using <code class="literal">tdbbackup</code></h3></div></div></div><p>
-<a class="indexterm" name="id2668162"></a>
-<a class="indexterm" name="id2668173"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id428299"></a>Using <code class="literal">tdbbackup</code></h3></div></div></div><p>
+<a class="indexterm" name="id428311"></a>
+<a class="indexterm" name="id428322"></a>
 Samba ships with a little utility that helps the root user of your system to backup your
 <code class="filename">*.tdb</code> files. If you run it with no argument, it prints a usage message:
 </p><pre class="screen">
@@ -2359,10 +2356,10 @@
  -rw-------    1 root     root        40960 May  2 03:44 printing.tdb
  -rw-------    1 root     root        40960 May  2 03:44 printing.tdb.bak
 
-</pre></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2668269"></a>CUPS Print Drivers from Linuxprinting.org</h2></div></div></div><p>
-<a class="indexterm" name="id2668278"></a>
+</pre></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id428409"></a>CUPS Print Drivers from Linuxprinting.org</h2></div></div></div><p>
+<a class="indexterm" name="id428417"></a>
 CUPS ships with good support for HP LaserJet-type printers. You can install the generic driver as follows:
-<a class="indexterm" name="id2668287"></a>
+<a class="indexterm" name="id428425"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>lpadmin -p laserjet4plus -v parallel:/dev/lp0 -E -m laserjet.ppd</code></strong>
 </pre><p>
@@ -2378,9 +2375,9 @@
 the tireless work of Till Kamppeter from Mandrakesoft, who is also the principal author of the
 <code class="literal">foomatic-rip</code> utility.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2668375"></a>
-<a class="indexterm" name="id2668382"></a>
-<a class="indexterm" name="id2668389"></a>
+<a class="indexterm" name="id428506"></a>
+<a class="indexterm" name="id428513"></a>
+<a class="indexterm" name="id428520"></a>
 The former <code class="literal">cupsomatic</code> concept is now being replaced by the new successor, a much more
 powerful <code class="literal">foomatic-rip</code>.  <code class="literal">cupsomatic</code> is no longer maintained. Here is the
 new URL to the <a class="ulink" href="http://www.linuxprinting.org/driver_list.cgi" target="_top">Foomatic-3.0</a>
@@ -2389,9 +2386,9 @@
 <code class="literal">cupsomatic</code>. The new-style PPDs are 100% compliant with the Adobe PPD specification. They
 are also intended to be used by Samba and the cupsaddsmb utility, to provide the driver files for the Windows
 clients!
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2668444"></a>foomatic-rip and Foomatic Explained</h3></div></div></div><p>
-<a class="indexterm" name="id2668452"></a>
-<a class="indexterm" name="id2668459"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id428570"></a>foomatic-rip and Foomatic Explained</h3></div></div></div><p>
+<a class="indexterm" name="id428577"></a>
+<a class="indexterm" name="id428584"></a>
 Nowadays, most Linux distributions rely on the utilities from the <a class="ulink" href="http://www.linuxprinting.org/" target="_top">Linuxprinting.org</a> to create their printing-related software
 (which, by the way, works on all UNIXes and on Mac OS X and Darwin, too).  The utilities from this sire have a
 very end-user-friendly interface that allows for an easy update of drivers and PPDs for all supported models,
@@ -2402,8 +2399,8 @@
 Linuxprinting.org keeps all the important facts about printer drivers, supported models, and which options are
 available for the various driver/printer combinations in its <a class="ulink" href="http://www.linuxprinting.org/foomatic.html" target="_top">Foomatic</a> database. Currently there are <a class="ulink" href="http://www.linuxprinting.org/driver_list.cgi" target="_top">245 drivers</a> in the database. Many drivers support
 various models, and many models may be driven by different drivers  its your choice!
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2668514"></a>690 &#8220;<span class="quote">Perfect</span>&#8221; Printers</h4></div></div></div><p>
-<a class="indexterm" name="id2668525"></a>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id428630"></a>690 &#8220;<span class="quote">Perfect</span>&#8221; Printers</h4></div></div></div><p>
+<a class="indexterm" name="id428641"></a>
 At present, there are 690 devices dubbed as working perfectly: 181 are <span class="emphasis"><em>mostly</em></span> perfect, 96
 are <span class="emphasis"><em>partially</em></span> perfect, and 46 are paperweights. Keeping in mind that most of these are
 non-PostScript models (PostScript printers are automatically supported by CUPS to perfection by using their
@@ -2411,7 +2408,7 @@
 if it does not also scan and copy and fax under GNU/Linux  then this is a truly astonishing
 achievement! Three years ago the number was not more than 500, and Linux or UNIX printing at the time wasn't
 anywhere near the quality it is today.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2668555"></a>How the Printing HOWTO Started It All</h4></div></div></div><p>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id428666"></a>How the Printing HOWTO Started It All</h4></div></div></div><p>
 A few years ago <a class="ulink" href="http://www2.picante.com/" target="_top">Grant Taylor</a> started it all. The
 roots of today's Linuxprinting.org are in the first <a class="ulink" href="http://www.linuxprinting.org/foomatic2.9/howto/" target="_top">Linux Printing HOWTO</a> that he authored. As a
 side-project to this document, which served many Linux users and admins to guide their first steps in this
@@ -2420,8 +2417,8 @@
 Postgres database with information about the hardware and driver zoo that made up Linux printing of the time.
 This database became the core component of today's Foomatic collection of tools and data. In the meantime, it
 has moved to an XML representation of the data.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2668593"></a>Foomatic's Strange Name</h4></div></div></div><p>
-<a class="indexterm" name="id2668601"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id428697"></a>Foomatic's Strange Name</h4></div></div></div><p>
+<a class="indexterm" name="id428705"></a>
 &#8220;<span class="quote">Why the funny name?</span>&#8221; you ask. When it really took off, around spring 2000, CUPS was far less
 popular than today, and most systems used LPD, LPRng, or even PDQ to print. CUPS shipped with a few generic
 drivers (good for a few hundred different printer models). These didn't support many device-specific options.
@@ -2439,10 +2436,10 @@
 	to CUPS users (because often the traditional Ghostscript way of
 	printing was the only one available).</p></li><li><p>It gave all the advanced CUPS options (Web interface,
 	GUI driver configurations) to users wanting (or needing) to use
-	Ghostscript filters.</p></li></ul></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2668668"></a>cupsomatic, pdqomatic, lpdomatic, directomatic</h4></div></div></div><p>
-<a class="indexterm" name="id2668676"></a>
-<a class="indexterm" name="id2668683"></a>
-<a class="indexterm" name="id2668690"></a>
+	Ghostscript filters.</p></li></ul></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id428763"></a>cupsomatic, pdqomatic, lpdomatic, directomatic</h4></div></div></div><p>
+<a class="indexterm" name="id428771"></a>
+<a class="indexterm" name="id428778"></a>
+<a class="indexterm" name="id428785"></a>
 CUPS worked through a quickly hacked-up filter script named <a class="ulink" href="http://www.linuxprinting.org/download.cgi?filename=cupsomatic&amp;show=0" target="_top">cupsomatic</a>.  cupsomatic
 ran the printfile through Ghostscript, constructing automatically the rather complicated command line needed.
 It just needed to be copied into the CUPS system to make it work. To configure the way cupsomatic controls the
@@ -2463,8 +2460,8 @@
 behind the &#8220;<span class="quote">*omatic</span>&#8221; scripts.  Foomatic, up to versions 2.0.x, required (ugly) Perl data
 structures attached to Linuxprinting.org PPDs for CUPS. It had a different &#8220;<span class="quote">*omatic</span>&#8221; script for
 every spooler, as well as different printer configuration files.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2668823"></a>The <span class="emphasis"><em>Grand Unification</em></span> Achieved</h4></div></div></div><p>
-<a class="indexterm" name="id2668835"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id428901"></a>The <span class="emphasis"><em>Grand Unification</em></span> Achieved</h4></div></div></div><p>
+<a class="indexterm" name="id428913"></a>
 This has all changed in Foomatic versions 2.9 (beta) and released as &#8220;<span class="quote">stable</span>&#8221; 3.0. It has now
 achieved the convergence of all *omatic scripts and is called the <a class="ulink" href="http://www.linuxprinting.org/foomatic2.9/download.cgi?filename=foomatic-rip&amp;show=0" target="_top">foomatic-rip</a>.
 This single script is the unification of the previously different spooler-specific *omatic scripts.
@@ -2473,18 +2470,18 @@
 have the power of PPDs at their disposal. Users only need to plug foomatic-rip into their system. For users
 there is improved media type and source support  paper sizes and trays are easier to configure.
 </p><p>
-<a class="indexterm" name="id2668870"></a>
-<a class="indexterm" name="id2668877"></a>
-<a class="indexterm" name="id2668884"></a>
+<a class="indexterm" name="id428942"></a>
+<a class="indexterm" name="id428948"></a>
+<a class="indexterm" name="id428955"></a>
 Also, the new generation of Linuxprinting.org PPDs no longer contains Perl data structures. If you are a
 distro maintainer and have used the previous version of Foomatic, you may want to give the new one a spin, but
 remember to generate a new-version set of PPDs via the new <a class="ulink" href="http://www.linuxprinting.org/download/foomatic/foomatic-db-engine-3.0.0beta1.tar.gz" target="_top">foomatic-db-engine!</a>.
 Individual users just need to generate a single new PPD specific to their model by <a class="ulink" href="http://www.linuxprinting.org/kpfeifle/LinuxKongress2002/Tutorial/II.Foomatic-User/II.tutorial-handout-foomatic-user.html" target="_top">following
 the steps</a> outlined in the Foomatic tutorial or in this chapter. This new development is truly amazing.
 </p><p>
-<a class="indexterm" name="id2668917"></a>
-<a class="indexterm" name="id2668924"></a>
-<a class="indexterm" name="id2668930"></a>
+<a class="indexterm" name="id428982"></a>
+<a class="indexterm" name="id428989"></a>
+<a class="indexterm" name="id428995"></a>
 foomatic-rip is a very clever wrapper around the need to run Ghostscript with a different syntax, options,
 device selections, and/or filters for each different printer or spooler. At the same time, it can read the PPD
 associated with a print queue and modify the print job according to the user selections. Together with this
@@ -2492,8 +2489,8 @@
 Foomatic concept may surprise users. It will support custom paper sizes for many printers and will support
 printing on media drawn from different paper trays within the same job (in both cases, even where there is no
 support for this from Windows-based vendor printer drivers).
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2668951"></a>Driver Development Outside</h4></div></div></div><p>
-<a class="indexterm" name="id2668959"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id429010"></a>Driver Development Outside</h4></div></div></div><p>
+<a class="indexterm" name="id429018"></a>
 Most driver development itself does not happen within Linuxprinting.org. Drivers are written by independent
 maintainers.  Linuxprinting.org just pools all the information and stores it in its database. In addition, it
 also provides the Foomatic glue to integrate the many drivers into any modern (or legacy) printing system
@@ -2501,25 +2498,25 @@
 </p><p>
 Speaking of the different driver development groups, most of the work is currently done in three projects:
 </p><div class="itemizedlist"><ul type="disc"><li><p>
-<a class="indexterm" name="id2668984"></a>
+<a class="indexterm" name="id429039"></a>
 	<a class="ulink" href="http://www-124.ibm.com/developerworks/oss/linux/projects/omni/" target="_top">Omni</a>
 	 a free software project by IBM that tries to convert its printer
 	driver knowledge from good-ol' OS/2 times into a modern, modular,
 	universal driver architecture for Linux/UNIX (still beta). This
 	currently supports 437 models.</p></li><li><p>
-<a class="indexterm" name="id2669009"></a>
+<a class="indexterm" name="id429061"></a>
 	<a class="ulink" href="http://hpinkjet.sf.net/" target="_top">HPIJS</a> 
 	a free software project by HP to provide the support for its own
 	range of models (very mature, printing in most cases is perfect and
 	provides true photo quality). This currently supports 369
 	models.</p></li><li><p>
-<a class="indexterm" name="id2669032"></a>
-	<a class="ulink" href="http://gimp-print.sourceforge.net/" target="_top">Gutenprint</a>  a free software
+<a class="indexterm" name="id429082"></a>
+	<a class="ulink" href="http://gimp-print.sf.net/" target="_top">Gimp-Print</a>  a free software
 	effort, started by Michael Sweet (also lead developer for CUPS), now
 	directed by Robert Krawitz, which has achieved an amazing level of
 	photo print quality (many Epson users swear that its quality is
 	better than the vendor drivers provided by Epson for the Microsoft
-	platforms). This currently supports 522 models.</p></li></ul></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2669056"></a>Forums, Downloads, Tutorials, Howtos (Also for Mac OS X and Commercial UNIX)</h4></div></div></div><p>
+	platforms). This currently supports 522 models.</p></li></ul></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id429104"></a>Forums, Downloads, Tutorials, Howtos (Also for Mac OS X and Commercial UNIX)</h4></div></div></div><p>
 Linuxprinting.org today is the one-stop shop to download printer drivers. Look for printer information and
 <a class="ulink" href="http://www.linuxprinting.org//kpfeifle/LinuxKongress2002/Tutorial/" target="_top">tutorials</a> or solve
 printing problems in its popular <a class="ulink" href="http://www.linuxprinting.org/newsportal/" target="_top">forums</a>. This
@@ -2528,9 +2525,9 @@
 <a class="ulink" href="http://www.linuxprinting.org/newsportal/thread.php3?name=linuxprinting.macosx.general" target="_top">Mac OS X
 forum</a> has turned out to be one of the most frequented forums after only a few weeks.
 </p><p>
-<a class="indexterm" name="id2669101"></a>
-<a class="indexterm" name="id2669108"></a>
-<a class="indexterm" name="id2669114"></a>
+<a class="indexterm" name="id429142"></a>
+<a class="indexterm" name="id429149"></a>
+<a class="indexterm" name="id429156"></a>
 Linuxprinting.org and the Foomatic driver wrappers around Ghostscript are now a standard tool-chain for
 printing on all the important distros. Most of them also have CUPS underneath. While in recent years most
 printer data had been added by Kamppeter, many additional contributions came from engineers with SuSE, Red
@@ -2539,16 +2536,16 @@
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
 Till Kamppeter from Mandrakesoft is doing an excellent job in his spare time to maintain Linuxprinting.org and
 Foomatic. So if you use it often, please send him a note showing your appreciation.
-</p></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2669139"></a>Foomatic Database-Generated PPDs</h4></div></div></div><p>
-<a class="indexterm" name="id2669147"></a>
-<a class="indexterm" name="id2669154"></a>
-<a class="indexterm" name="id2669161"></a>
-<a class="indexterm" name="id2669168"></a>
-<a class="indexterm" name="id2669175"></a>
-<a class="indexterm" name="id2669182"></a>
-<a class="indexterm" name="id2669189"></a>
-<a class="indexterm" name="id2669196"></a>
-<a class="indexterm" name="id2669203"></a>
+</p></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id429175"></a>Foomatic Database-Generated PPDs</h4></div></div></div><p>
+<a class="indexterm" name="id429183"></a>
+<a class="indexterm" name="id429190"></a>
+<a class="indexterm" name="id429196"></a>
+<a class="indexterm" name="id429203"></a>
+<a class="indexterm" name="id429210"></a>
+<a class="indexterm" name="id429217"></a>
+<a class="indexterm" name="id429224"></a>
+<a class="indexterm" name="id429230"></a>
+<a class="indexterm" name="id429237"></a>
 The Foomatic database is an amazing piece of ingenuity in itself. Not only does it keep the printer and driver
 information, but it is organized in a way that it can generate PPD files on the fly from its internal
 XML-based datasets. While these PPDs are modeled to the Adobe specification of PPDs, the
@@ -2563,7 +2560,7 @@
 This usage of PPDs to describe the options of non-PostScript printers was the invention of the CUPS
 developers. The rest is easy.  GUI tools (like KDE's marvelous <a class="ulink" href="http://printing.kde.org/overview/kprinter.phtml" target="_top">kprinter</a> or the GNOME <a class="ulink" href="http://gtklp.sourceforge.net/" target="_top">gtklp</a> xpp and the CUPS Web interface) read the PPD as well and use
 this information to present the available settings to the user as an intuitive menu selection.
-</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2669256"></a>foomatic-rip and Foomatic PPD Download and Installation</h3></div></div></div><p>
+</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id429283"></a>foomatic-rip and Foomatic PPD Download and Installation</h3></div></div></div><p>
 Here are the steps to install a foomatic-rip-driven LaserJet 4 Plus-compatible
 printer in CUPS (note that recent distributions of SuSE, UnitedLinux and
 Mandrake may ship with a complete package of Foomatic-PPDs plus the
@@ -2656,8 +2653,8 @@
 	fit for your printer model's consumption.</p></li><li><p>Ghostscript <span class="emphasis"><em>must</em></span> (depending on
 	the driver/model) contain support for a certain device representing
 	the selected driver for your model (as shown by <code class="literal">gs -h</code>).</p></li><li><p>foomatic-rip needs a new version of PPDs (PPD versions
-	produced for cupsomatic do not work with foomatic-rip).</p></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2669728"></a>Page Accounting with CUPS</h2></div></div></div><p>
-<a class="indexterm" name="id2669736"></a>
+	produced for cupsomatic do not work with foomatic-rip).</p></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id429705"></a>Page Accounting with CUPS</h2></div></div></div><p>
+<a class="indexterm" name="id429713"></a>
 Often there are questions regarding print quotas where Samba users (that is, Windows clients) should not be
 able to print beyond a certain number of pages or data volume per day, week, or month. This feature is
 dependent on the real print subsystem you're using.  Samba's part is always to receive the job files from the
@@ -2665,18 +2662,18 @@
 </p><p>
 Of course one could hack things with one's own scripts. But then there is CUPS. CUPS supports quotas that can
 be based on the size of jobs or on the number of pages or both, and can span any time period you want.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2669763"></a>Setting Up Quotas</h3></div></div></div><p>
-<a class="indexterm" name="id2669771"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id429735"></a>Setting Up Quotas</h3></div></div></div><p>
+<a class="indexterm" name="id429742"></a>
 This is an example command of how root would set a print quota in CUPS, assuming an existing printer named
 &#8220;<span class="quote">quotaprinter</span>&#8221;:
-<a class="indexterm" name="id2669786"></a>
+<a class="indexterm" name="id429756"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>lpadmin -p quotaprinter -o job-quota-period=604800 \
 	-o job-k-limit=1024 -o job-page-limit=100</code></strong>
 </pre><p>
 This would limit every single user to print no more than 100 pages or 1024 KB of
 data (whichever comes first) within the last 604,800 seconds ( = 1 week).
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2669817"></a>Correct and Incorrect Accounting</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id429785"></a>Correct and Incorrect Accounting</h3></div></div></div><p>
 For CUPS to count correctly, the printfile needs to pass the CUPS pstops filter; otherwise it uses a dummy
 count of &#8220;<span class="quote">one</span>&#8221;. Some print files do not pass it (e.g., image files), but then those are mostly
 one-page jobs anyway. This also means that proprietary drivers for the target printer running on the client
@@ -2687,12 +2684,12 @@
 accounting done. If the printer is a non-PostScript model, you need to let CUPS do the job to convert the file
 to a print-ready format for the target printer. This is currently working for about a thousand different
 printer models.  Linuxprinting.org has a driver <a class="ulink" href="http://www.linuxprinting.org/printer_list.cgi" target="_top">list</a>.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2669864"></a>Adobe and CUPS PostScript Drivers for Windows Clients</h3></div></div></div><p>
-<a class="indexterm" name="id2669873"></a>
-<a class="indexterm" name="id2669880"></a>
-<a class="indexterm" name="id2669887"></a>
-<a class="indexterm" name="id2669893"></a>
-<a class="indexterm" name="id2669900"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id429818"></a>Adobe and CUPS PostScript Drivers for Windows Clients</h3></div></div></div><p>
+<a class="indexterm" name="id429826"></a>
+<a class="indexterm" name="id429833"></a>
+<a class="indexterm" name="id429840"></a>
+<a class="indexterm" name="id429846"></a>
+<a class="indexterm" name="id429853"></a>
 Before CUPS 1.1.16, your only option was to use the Adobe PostScript driver on the Windows clients. The output
 of this driver was not always passed through the <code class="literal">pstops</code> filter on the CUPS/Samba side, and
 therefore was not counted correctly (the reason is that it often, depending on the PPD being used, wrote a
@@ -2703,13 +2700,13 @@
 clients (which is tagged in the download area of <code class="filename">http://www.cups.org/</code> as the
 <code class="filename">cups-samba-1.1.16.tar.gz</code> package). It does <span class="emphasis"><em>not</em></span> work for Windows
 9x/Me clients, but it guarantees:
-</p><div class="itemizedlist"><ul type="disc"><li><p> <a class="indexterm" name="id2669960"></a> To not write a PJL-header.</p></li><li><p>To still read and support all PJL-options named in the
+</p><div class="itemizedlist"><ul type="disc"><li><p> <a class="indexterm" name="id429908"></a> To not write a PJL-header.</p></li><li><p>To still read and support all PJL-options named in the
 	driver PPD with its own means.</p></li><li><p>That the file will pass through the <code class="literal">pstops</code> filter
 	on the CUPS/Samba server.</p></li><li><p>To page-count correctly the print file.</p></li></ul></div><p>
 You can read more about the setup of this combination in the man page for <code class="literal">cupsaddsmb</code> (which
 is only present with CUPS installed, and only current from CUPS 1.1.16).
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2670005"></a>The page_log File Syntax</h3></div></div></div><p>
-<a class="indexterm" name="id2670013"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id429949"></a>The page_log File Syntax</h3></div></div></div><p>
+<a class="indexterm" name="id429957"></a>
 These are the items CUPS logs in the <code class="filename">page_log</code> for every page of a job:
 </p><div class="itemizedlist"><ul type="disc"><li><p>Printer name</p></li><li><p>User name</p></li><li><p>Job ID</p></li><li><p>Time of printing</p></li><li><p>Page number</p></li><li><p>Number of copies</p></li><li><p>A billing information string (optional)</p></li><li><p>The host that sent the job (included since version 1.1.19)</p></li></ul></div><p>
 Here is an extract of my CUPS server's <code class="filename">page_log</code> file to illustrate the
@@ -2727,7 +2724,7 @@
  The next job had ID <em class="parameter"><code>402</code></em>, was sent by user <em class="parameter"><code>boss</code></em>
 from IP address <code class="constant">10.160.51.33</code>, printed from one page 440 copies, and
 is set to be billed to <em class="parameter"><code>finance-dep</code></em>.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2670149"></a>Possible Shortcomings</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id430085"></a>Possible Shortcomings</h3></div></div></div><p>
 What flaws or shortcomings are there with this quota system?
 </p><div class="itemizedlist"><ul type="disc"><li><p>The ones named above (wrongly logged job in case of
 	printer hardware failure, and so on).</p></li><li><p>In reality, CUPS counts the job pages that are being
@@ -2741,7 +2738,7 @@
 	&#8220;<span class="quote">used-up</span>&#8221; number of current quota.</p></li><li><p>A user having used up 99 sheets of a 100 quota will
 	still be able to send and print a 1,000 sheet job.</p></li><li><p>A user being denied a job because of a filled-up quota
 	does not get a meaningful error message from CUPS other than
-	&#8220;<span class="quote">client-error-not-possible</span>&#8221;.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2670215"></a>Future Developments</h3></div></div></div><p>
+	&#8220;<span class="quote">client-error-not-possible</span>&#8221;.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id430143"></a>Future Developments</h3></div></div></div><p>
 This is the best system currently available, and there are huge
 improvements under development for CUPS 1.2:
 </p><div class="itemizedlist"><ul type="disc"><li><p>Page counting will go into the backends (these talk
@@ -2749,10 +2746,10 @@
 	actual printing process; thus, a jam at the fifth sheet will lead to a
 	stop in the counting).</p></li><li><p>Quotas will be handled more flexibly.</p></li><li><p>Probably there will be support for users to inquire
 	about their accounts in advance.</p></li><li><p>Probably there will be support for some other tools
-	around this topic.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2670255"></a>Other Accounting Tools</h3></div></div></div><p>
+	around this topic.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id430178"></a>Other Accounting Tools</h3></div></div></div><p>
 Other accounting tools that can be used includes: PrintAnalyzer, pyKota, printbill, LogReport.
 For more information regarding these tools you can try a Google search.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2670269"></a>Additional Material</h2></div></div></div><p>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id430191"></a>Additional Material</h2></div></div></div><p>
 A printer queue with <span class="emphasis"><em>no</em></span> PPD associated to it is a
 &#8220;<span class="quote">raw</span>&#8221; printer, and all files will go directly there as received by the
 spooler. The exceptions are file types <em class="parameter"><code>application/octet-stream</code></em>
@@ -2831,15 +2828,15 @@
 allowed to have direct access (such as when the operators often need
 to load the proper paper type before running the 10,000 page job
 requested by marketing for the mailing, and so on).
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2670486"></a>Autodeletion or Preservation of CUPS Spool Files</h2></div></div></div><p>
-<a class="indexterm" name="id2670495"></a>
-<a class="indexterm" name="id2670502"></a>
-<a class="indexterm" name="id2670508"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id430379"></a>Autodeletion or Preservation of CUPS Spool Files</h2></div></div></div><p>
+<a class="indexterm" name="id430387"></a>
+<a class="indexterm" name="id430394"></a>
+<a class="indexterm" name="id430401"></a>
 Samba print files pass through two spool directories. One is the incoming directory managed by Samba (set in
 the <a class="link" href="smb.conf.5.html#PATH">path = /var/spool/samba</a> directive in the <em class="parameter"><code>[printers]</code></em> section of <code class="filename">smb.conf</code>). The other is the spool directory of your UNIX print subsystem. For
 CUPS it is normally <code class="filename">/var/spool/cups/</code>, as set by the <code class="filename">cupsd.conf</code>
 directive <code class="filename">RequestRoot /var/spool/cups</code>.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2670562"></a>CUPS Configuration Settings Explained</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id430451"></a>CUPS Configuration Settings Explained</h3></div></div></div><p>
 Some important parameter settings in the CUPS configuration file
 <code class="filename">cupsd.conf</code> are:
 </p><div class="variablelist"><dl><dt><span class="term">PreserveJobHistory Yes</span></dt><dd><p>
@@ -2863,7 +2860,7 @@
 	</p></dd></dl></div><p>
 (There are also additional settings for <em class="parameter"><code>MaxJobsPerUser</code></em> and
 <em class="parameter"><code>MaxJobsPerPrinter</code></em>.)
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2670647"></a>Preconditions</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id430528"></a>Preconditions</h3></div></div></div><p>
 For everything to work as it should, you need to have three things:
 </p><div class="itemizedlist"><ul type="disc"><li><p>A Samba smbd that is compiled against <code class="filename">libcups</code> (check
 	on Linux by running <strong class="userinput"><code>ldd `which smbd'</code></strong>).</p></li><li><p>A Samba-<code class="filename">smb.conf</code> setting of
@@ -2876,14 +2873,14 @@
 <a class="link" href="smb.conf.5.html#LPPAUSECOMMAND">lppause command</a>, and
 <a class="link" href="smb.conf.5.html#LPRESUMECOMMAND">lpresume command</a>) are ignored, and they should normally have no
 influence whatsoever on your printing.
-</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2670786"></a>Manual Configuration</h3></div></div></div><p>
+</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id430657"></a>Manual Configuration</h3></div></div></div><p>
 If you want to do things manually, replace the <a class="link" href="smb.conf.5.html#PRINTING">printing = cups</a>
 by <a class="link" href="smb.conf.5.html#PRINTING">printing = bsd</a>. Then your manually set commands may work
 (I haven't tested this), and a <a class="link" href="smb.conf.5.html#PRINTCOMMAND">print command = lp -d %P %s; rm %s</a>
 may do what you need.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2670834"></a>Printing from CUPS to Windows-Attached Printers</h2></div></div></div><p>
-<a class="indexterm" name="id2670842"></a>
-<a class="indexterm" name="id2670848"></a>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id430701"></a>Printing from CUPS to Windows-Attached Printers</h2></div></div></div><p>
+<a class="indexterm" name="id430709"></a>
+<a class="indexterm" name="id430715"></a>
 From time to time the question arises, how can you print <span class="emphasis"><em>to</em></span> a Windows-attached printer
 <span class="emphasis"><em>from</em></span> Samba? Normally the local connection from Windows host to printer would be done by
 USB or parallel cable, but this does not matter to Samba. From here only an SMB connection needs to be opened
@@ -2918,8 +2915,8 @@
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>ln -s `which smbspool` /usr/lib/cups/backend/smb</code></strong>
 </pre><p>
-<a class="indexterm" name="id2670978"></a>
-<a class="indexterm" name="id2670985"></a>
+<a class="indexterm" name="id430824"></a>
+<a class="indexterm" name="id430831"></a>
 <code class="literal">smbspool</code> was written by Mike Sweet from the CUPS folks. It is included and ships with
 Samba. It may also be used with print subsystems other than CUPS, to spool jobs to Windows printer shares. To
 set up printer <em class="replaceable"><code>winprinter</code></em> on CUPS, you need to have a driver for it. Essentially
@@ -2934,9 +2931,9 @@
 <code class="prompt">root# </code><strong class="userinput"><code>lpadmin -p winprinter -v smb://WINDOWSNETBIOSNAME/printersharename \
   -P /path/to/PPD</code></strong>
 </pre><p>
-<a class="indexterm" name="id2671045"></a>
-<a class="indexterm" name="id2671052"></a>
-<a class="indexterm" name="id2671059"></a>
+<a class="indexterm" name="id430883"></a>
+<a class="indexterm" name="id430890"></a>
+<a class="indexterm" name="id430897"></a>
 The PPD must be able to direct CUPS to generate the print data for the target model. For PostScript printers,
 just use the PPD that would be used with the Windows NT PostScript driver. But what can you do if the printer
 is only accessible with a password? Or if the printer's host is part of another workgroup? This is provided
@@ -2949,10 +2946,10 @@
 Printing will only work if you have a working NetBIOS name resolution up and running. Note that this is a
 feature of CUPS and you do not necessarily need to have smbd running.
 
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2671129"></a>More CUPS Filtering Chains</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id430957"></a>More CUPS Filtering Chains</h2></div></div></div><p>
 The diagrams in <a class="link" href="CUPS-printing.html#cups1" title="Figure 22.17. Filtering Chain 1.">Filtering Chain 1</a> and <a class="link" href="CUPS-printing.html#cups2" title="Figure 22.18. Filtering Chain with cupsomatic">Filtering Chain with
 cupsomatic</a> show how CUPS handles print jobs.
-</p><div class="figure"><a name="cups1"></a><p class="title"><b>Figure 22.17. Filtering Chain 1.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/cups1.png" alt="Filtering Chain 1."></div></div></div><br class="figure-break"><div class="figure"><a name="cups2"></a><p class="title"><b>Figure 22.18. Filtering Chain with cupsomatic</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/cups2.png" width="243" alt="Filtering Chain with cupsomatic"></div></div></div><br class="figure-break"></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2671241"></a>Common Errors</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2671246"></a>Windows 9x/Me Client Can't Install Driver</h3></div></div></div><p>For Windows 9x/Me, clients require the printer names to be eight
+</p><div class="figure"><a name="cups1"></a><p class="title"><b>Figure 22.17. Filtering Chain 1.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/cups1.png" alt="Filtering Chain 1."></div></div></div><br class="figure-break"><div class="figure"><a name="cups2"></a><p class="title"><b>Figure 22.18. Filtering Chain with cupsomatic</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/cups2.png" width="243" alt="Filtering Chain with cupsomatic"></div></div></div><br class="figure-break"></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id431066"></a>Common Errors</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431072"></a>Windows 9x/Me Client Can't Install Driver</h3></div></div></div><p>For Windows 9x/Me, clients require the printer names to be eight
 	characters (or &#8220;<span class="quote">8 plus 3 chars suffix</span>&#8221;) max; otherwise, the driver files
 	will not get transferred when you want to download them from Samba.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="root-ask-loop"></a>&#8220;<span class="quote">cupsaddsmb</span>&#8221; Keeps Asking for Root Password in Never-ending Loop</h3></div></div></div><p>Have you set <a class="link" href="smb.conf.5.html#SECURITY">security = user</a>? Have
 	you used <code class="literal">smbpasswd</code> to give root a Samba account?
@@ -2963,10 +2960,10 @@
 	password).</p><p>
 	If the error is &#8220;<span class="quote">Tree connect failed: NT_STATUS_BAD_NETWORK_NAME</span>&#8221;, 
 	you may have forgotten to create the <code class="filename">/etc/samba/drivers</code> directory.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2671323"></a>&#8220;<span class="quote">cupsaddsmb</span>&#8221; or &#8220;<span class="quote">rpcclient addriver</span>&#8221; Emit Error</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431141"></a>&#8220;<span class="quote">cupsaddsmb</span>&#8221; or &#8220;<span class="quote">rpcclient addriver</span>&#8221; Emit Error</h3></div></div></div><p>
 	If <code class="literal">cupsaddsmb</code>, or <code class="literal">rpcclient addriver</code> emit the error message
 	WERR_BAD_PASSWORD, refer to <a class="link" href="CUPS-printing.html#root-ask-loop" title="&#8220;cupsaddsmb&#8221; Keeps Asking for Root Password in Never-ending Loop">the previous common error</a>.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2671361"></a>&#8220;<span class="quote">cupsaddsmb</span>&#8221; Errors</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431178"></a>&#8220;<span class="quote">cupsaddsmb</span>&#8221; Errors</h3></div></div></div><p>
 	The use of &#8220;<span class="quote">cupsaddsmb</span>&#8221; gives &#8220;<span class="quote">No PPD file for printer...</span>&#8221; 
 	message while PPD file is present.  What might the problem be?
 	</p><p>
@@ -2977,10 +2974,10 @@
 	<strong class="userinput"><code>cupsaddsmb -H sambaserver -h cupsserver -v printername</code></strong>.
 	</p><p>Is your <em class="parameter"><code>TempDir</code></em> directive in
 	<code class="filename">cupsd.conf</code> set to a valid value, and is it writable?
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2671435"></a>Client Can't Connect to Samba Printer</h3></div></div></div><p>Use <code class="literal">smbstatus</code> to check which user
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431248"></a>Client Can't Connect to Samba Printer</h3></div></div></div><p>Use <code class="literal">smbstatus</code> to check which user
 	you are from Samba's point of view. Do you have the privileges to
 	write into the <em class="parameter"><code>[print$]</code></em>
-	share?</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2671459"></a>New Account Reconnection from Windows 200x/XP Troubles</h3></div></div></div><p>
+	share?</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431271"></a>New Account Reconnection from Windows 200x/XP Troubles</h3></div></div></div><p>
 Once you are connected as the wrong user (for example, as <code class="constant">nobody</code>, which often occurs if
 you have <a class="link" href="smb.conf.5.html#MAPTOGUEST">map to guest = bad user</a>), Windows Explorer will not accept an
 attempt to connect again as a different user. There will not be any bytes transferred on the wire to Samba,
@@ -2995,47 +2992,47 @@
 connected under a different account. Now open the <span class="guilabel">Printers</span> folder (on the Samba server in
 the <span class="guilabel">Network Neighborhood</span>), right-click on the printer in question, and select
 <span class="guibutton">Connect....</span>.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2671551"></a>Avoid Being Connected to the Samba Server as the Wrong User</h3></div></div></div><p>
-<a class="indexterm" name="id2671559"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431352"></a>Avoid Being Connected to the Samba Server as the Wrong User</h3></div></div></div><p>
+<a class="indexterm" name="id431360"></a>
 You see per <code class="literal">smbstatus</code> that you are connected as user nobody, but you want to be root or
 printer admin. This is probably due to <a class="link" href="smb.conf.5.html#MAPTOGUEST">map to guest = bad user</a>, which
 silently connected you under the guest account when you gave (maybe by accident) an incorrect username. Remove
 <a class="link" href="smb.conf.5.html#MAPTOGUEST">map to guest</a> if you want to prevent this.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2671602"></a>Upgrading to CUPS Drivers from Adobe Drivers</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431398"></a>Upgrading to CUPS Drivers from Adobe Drivers</h3></div></div></div><p>
 This information came from a mailing list posting regarding problems experienced when
 upgrading from Adobe drivers to CUPS drivers on Microsoft Windows NT/200x/XP clients.
 </p><p>First delete all old Adobe-using printers. Then delete all old Adobe drivers. (On Windows 200x/XP, right-click in
 the background of <span class="guilabel">Printers</span> folder, select <span class="guimenuitem">Server Properties...</span>, select
-tab <span class="guilabel">Drivers</span>, and delete here).</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2671639"></a>Can't Use &#8220;<span class="quote">cupsaddsmb</span>&#8221; on Samba Server, Which Is a PDC</h3></div></div></div><p>Do you use the &#8220;<span class="quote">naked</span>&#8221; root user name? Try to do it
+tab <span class="guilabel">Drivers</span>, and delete here).</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431432"></a>Can't Use &#8220;<span class="quote">cupsaddsmb</span>&#8221; on Samba Server, Which Is a PDC</h3></div></div></div><p>Do you use the &#8220;<span class="quote">naked</span>&#8221; root user name? Try to do it
 this way: <strong class="userinput"><code>cupsaddsmb -U <em class="replaceable"><code>DOMAINNAME</code></em>\\root -v
 <em class="replaceable"><code>printername</code></em></code></strong>&gt; (note the two backslashes: the first one is
-required to &#8220;<span class="quote">escape</span>&#8221; the second one).</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2671675"></a>Deleted Windows 200x Printer Driver Is Still Shown</h3></div></div></div><p>Deleting a printer on the client will not delete the
+required to &#8220;<span class="quote">escape</span>&#8221; the second one).</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431467"></a>Deleted Windows 200x Printer Driver Is Still Shown</h3></div></div></div><p>Deleting a printer on the client will not delete the
 driver too (to verify, right-click on the white background of the
 <span class="guilabel">Printers</span> folder, select <span class="guimenuitem">Server Properties</span> and click on the
 <span class="guilabel">Drivers</span> tab). These same old drivers will be re-used when you try to
 install a printer with the same name. If you want to update to a new
 driver, delete the old ones first. Deletion is only possible if no
-other printer uses the same driver.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2671710"></a>Windows 200x/XP Local Security Policies</h3></div></div></div><a class="indexterm" name="id2671716"></a><a class="indexterm" name="id2671723"></a><p>Local security policies may not allow the installation of unsigned drivers  &#8220;<span class="quote">local
-security policies</span>&#8221; may not allow the installation of printer drivers at all.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2671743"></a>Administrator Cannot Install Printers for All Local Users</h3></div></div></div><p>
-<a class="indexterm" name="id2671752"></a>
-<a class="indexterm" name="id2671759"></a>
+other printer uses the same driver.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431498"></a>Windows 200x/XP Local Security Policies</h3></div></div></div><a class="indexterm" name="id431504"></a><a class="indexterm" name="id431510"></a><p>Local security policies may not allow the installation of unsigned drivers  &#8220;<span class="quote">local
+security policies</span>&#8221; may not allow the installation of printer drivers at all.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431529"></a>Administrator Cannot Install Printers for All Local Users</h3></div></div></div><p>
+<a class="indexterm" name="id431537"></a>
+<a class="indexterm" name="id431544"></a>
 Windows XP handles SMB printers on a &#8220;<span class="quote">per-user</span>&#8221; basis.
 This means every user needs to install the printer himself or herself. To have a printer available for
 everybody, you might want to use the built-in IPP client capabilities of Win XP. Add a printer with the print
 path of <em class="parameter"><code>http://cupsserver:631/printers/printername</code></em>.  We're still looking into this one.
 Maybe a logon script could automatically install printers for all users.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2671784"></a>Print Change, Notify Functions on NT Clients</h3></div></div></div><p>For print change, notify functions on NT++ clients.  These need to run the <code class="literal">Server</code>
-service first (renamed to <code class="literal">File &amp; Print Sharing for MS Networks</code> in XP).</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2671810"></a>Windows XP SP1</h3></div></div></div><p>Windows XP SP1 introduced a Point and Print Restriction Policy (this restriction does not apply to
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431566"></a>Print Change, Notify Functions on NT Clients</h3></div></div></div><p>For print change, notify functions on NT++ clients.  These need to run the <code class="literal">Server</code>
+service first (renamed to <code class="literal">File &amp; Print Sharing for MS Networks</code> in XP).</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431589"></a>Win XP-SP1</h3></div></div></div><p>Win XP-SP1 introduced a Point and Print Restriction Policy (this restriction does not apply to
 &#8220;<span class="quote">Administrator</span>&#8221; or &#8220;<span class="quote">Power User</span>&#8221; groups of users). In Group Policy Object Editor, go
 to <span class="guimenu">User Configuration -&gt; Administrative Templates -&gt; Control Panel -&gt; Printers</span>. The policy
 is automatically set to <code class="constant">Enabled</code> and the <code class="constant">Users can only Point and Print to
 machines in their Forest</code> . You probably need to change it to <code class="constant">Disabled</code> or
 <code class="constant">Users can only Point and Print to these servers</code> to make driver downloads from Samba
 possible.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2671856"></a>Print Options for All Users Can't Be Set on Windows 200x/XP</h3></div></div></div><p>How are you doing it? I bet the wrong way (it is not easy to find out, though). There are three
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431631"></a>Print Options for All Users Can't Be Set on Windows 200x/XP</h3></div></div></div><p>How are you doing it? I bet the wrong way (it is not easy to find out, though). There are three
 different ways to bring you to a dialog that <span class="emphasis"><em>seems</em></span> to set everything. All three dialogs
 <span class="emphasis"><em>look</em></span> the same, yet only one of them does what you intend. You need to be Administrator or
-Print Administrator to do this for all users. Here is how I do it on XP:
+Print Administrator to do this for all users. Here is how I do in on XP:
 </p><div class="orderedlist"><ol type="A"><li><p>The first wrong way:
 
 		</p><div class="orderedlist"><ol type="I"><li><p>Open the <span class="guilabel">Printers</span>
@@ -3065,33 +3062,33 @@
 (<a class="link" href="smb.conf.5.html#PRINTERADMIN">printer admin</a> in <code class="filename">smb.conf</code>) <span class="emphasis"><em>before</em></span> a client downloads the
 driver (the clients can later set their own <span class="emphasis"><em>per-user defaults</em></span> by following the procedures
 <span class="emphasis"><em>A</em></span> or <span class="emphasis"><em>B</em></span>).
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2672139"></a>Most Common Blunders in Driver Settings on Windows Clients</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431898"></a>Most Common Blunders in Driver Settings on Windows Clients</h3></div></div></div><p>
 Don't use <em class="parameter"><code>Optimize for Speed</code></em>, but use <em class="parameter"><code>Optimize for Portability</code></em>
 instead (Adobe PS Driver). Don't use <em class="parameter"><code>Page Independence: No</code></em>. Always settle with
 <em class="parameter"><code>Page Independence: Yes</code></em> (Microsoft PS Driver and CUPS PS Driver for Windows NT/200x/XP).
 If there are problems with fonts, use <em class="parameter"><code>Download as Softfont into printer</code></em> (Adobe PS
 Driver). For <span class="guilabel">TrueType Download Options</span> choose <code class="constant">Outline</code>. Use
 PostScript Level 2 if you are having trouble with a non-PS printer and if there is a choice.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2672194"></a><code class="literal">cupsaddsmb</code> Does Not Work with Newly Installed Printer</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431951"></a><code class="literal">cupsaddsmb</code> Does Not Work with Newly Installed Printer</h3></div></div></div><p>
 Symptom: The last command of <code class="literal">cupsaddsmb</code> does not complete successfully. If the <code class="literal">cmd
 = setdriver printername printername</code> result was NT_STATUS_UNSUCCESSFUL, then possibly the printer was
 not yet recognized by Samba. Did it show up in Network Neighborhood? Did it show up in <code class="literal">rpcclient
 hostname -c `enumprinters'</code>? Restart smbd (or send a <code class="literal">kill -HUP</code> to all processes
 listed by <code class="literal">smbstatus</code>, and try again.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2672244"></a>Permissions on <code class="filename">/var/spool/samba/</code> Get Reset After Each Reboot</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431997"></a>Permissions on <code class="filename">/var/spool/samba/</code> Get Reset After Each Reboot</h3></div></div></div><p>
 Have you ever by accident set the CUPS spool directory to the same location (<em class="parameter"><code>RequestRoot
 /var/spool/samba/</code></em> in <code class="filename">cupsd.conf</code> or the other way round:
 <code class="filename">/var/spool/cups/</code> is set as <a class="link" href="smb.conf.5.html#PATH">path</a>&gt; in the <em class="parameter"><code>[printers]</code></em> section)? These <em class="parameter"><code>must</code></em> be different. Set <em class="parameter"><code>RequestRoot
 /var/spool/cups/</code></em> in <code class="filename">cupsd.conf</code> and <a class="link" href="smb.conf.5.html#PATH">path = 
 /var/spool/samba</a> in the <em class="parameter"><code>[printers]</code></em> section of <code class="filename">smb.conf</code>. Otherwise,
 cupsd will sanitize permissions to its spool directory with each restart and printing will not work reliably.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2672342"></a>Print Queue Called &#8220;<span class="quote">lp</span>&#8221; Mishandles Print Jobs</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id432090"></a>Print Queue Called &#8220;<span class="quote">lp</span>&#8221; Mishandles Print Jobs</h3></div></div></div><p>
 In this case a print queue called &#8220;<span class="quote">lp</span>&#8221; intermittently swallows jobs and
 spits out completely different ones from what was sent.
 </p><p>
-<a class="indexterm" name="id2672363"></a>
-<a class="indexterm" name="id2672369"></a>
-<a class="indexterm" name="id2672376"></a>
+<a class="indexterm" name="id432109"></a>
+<a class="indexterm" name="id432115"></a>
+<a class="indexterm" name="id432122"></a>
 It is a bad idea to name any printer &#8220;<span class="quote">lp</span>&#8221;. This is the traditional UNIX name for the default
 printer. CUPS may be set up to do an automatic creation of Implicit Classes. This means, to group all printers
 with the same name to a pool of devices and load-balance the jobs across them in a round-robin fashion.
@@ -3100,13 +3097,13 @@
 <em class="parameter"><code>BrowseShortNames No</code></em>. It will present any printer as
 <em class="replaceable"><code>printername at cupshost</code></em>, which gives you better control over what may happen in a
 large networked environment.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2672412"></a>Location of Adobe PostScript Driver Files for &#8220;<span class="quote">cupsaddsmb</span>&#8221;</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id432153"></a>Location of Adobe PostScript Driver Files for &#8220;<span class="quote">cupsaddsmb</span>&#8221;</h3></div></div></div><p>
 Use <code class="literal">smbclient</code> to connect to any Windows box with a shared PostScript printer:
 <code class="literal">smbclient //windowsbox/print\$ -U guest</code>. You can navigate to the
 <code class="filename">W32X86/2</code> subdir to <code class="literal">mget ADOBE*</code> and other files or to
 <code class="filename">WIN40/0</code> to do the same.  Another option is to download the <code class="filename">*.exe</code>
 packaged files from the Adobe Web site.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2672465"></a>Overview of the CUPS Printing Processes</h2></div></div></div><p>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id432204"></a>Overview of the CUPS Printing Processes</h2></div></div></div><p>
 A complete overview of the CUPS printing processes can be found in <a class="link" href="CUPS-printing.html#a_small" title="Figure 22.19. CUPS Printing Overview.">the CUPS
 Printing Overview diagram</a>.
-</p><div class="figure"><a name="a_small"></a><p class="title"><b>Figure 22.19. CUPS Printing Overview.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/a_small.png" width="243" alt="CUPS Printing Overview."></div></div></div><br class="figure-break"></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id2661716" href="#id2661716" class="para">6</a>] </sup>See also <a class="ulink" href="http://www.cups.org/cups-help.html" target="_top">http://www.cups.org/cups-help.html</a></p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="classicalprinting.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="optional.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="VFS.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 21. Classical Printing Support </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 23. Stackable VFS modules</td></tr></table></div></body></html>
+</p><div class="figure"><a name="a_small"></a><p class="title"><b>Figure 22.19. CUPS Printing Overview.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/a_small.png" width="243" alt="CUPS Printing Overview."></div></div></div><br class="figure-break"></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id422411" href="#id422411" class="para">6</a>] </sup>See also <a class="ulink" href="http://www.cups.org/cups-help.html" target="_top">http://www.cups.org/cups-help.html</a></p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="classicalprinting.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="optional.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="VFS.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 21. Classical Printing Support </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 23. Stackable VFS modules</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ChangeNotes.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ChangeNotes.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ChangeNotes.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,10 +1,10 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 9. Important and Critical Change Notes for the Samba 3.x Series</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="optional.html" title="Part III. Advanced Configuration"><link rel="next" href="NetworkBrowsing.html" title="Chapter 10. Network Browsing"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 9. Important and Critical Change Notes for the Samba 3.x Series</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="optional.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="NetworkBrowsing.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="ChangeNotes"></a>Chapter 9. Important and Critical Change Notes for the Samba 3.x Series</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Gerald</span> <span class="othername">(Jerry)</span> <span class="surname">Carter</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jerry at samba.org">jerry at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ChangeNotes.html#id2600657">Important Samba-3.2.x Change Notes</a></span></dt><dt><span class="sect1"><a href="ChangeNotes.html#id2600668">Important Samba-3.0.x Change Notes</a></span></dt><dd><dl><dt><span class="sect2"><a href="ChangeNotes.html#id2600728">User and Group Changes</a></span></dt><dt><span class="sect2"><a href="ChangeNotes.html#id2601039">Essential Group Mappings</a></span></dt><dt><span class="sect2"><a href="ChangeNotes.html#id2601160">Passdb Changes</a></span></dt><dt><span class="sect2"><a href="ChangeNotes.html#id2601219">Group Mapping Changes in Samba-3.0.23</a></span></dt><dt><span class="sect2"><a href="ChangeNotes.html#id2601340">LDAP Changes in Samba-3.0.23</a></span></dt></dl></dd></dl></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 9. Important and Critical Change Notes for the Samba 3.x Series</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="optional.html" title="Part III. Advanced Configuration"><link rel="next" href="NetworkBrowsing.html" title="Chapter 10. Network Browsing"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 9. Important and Critical Change Notes for the Samba 3.x Series</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="optional.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="NetworkBrowsing.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="ChangeNotes"></a>Chapter 9. Important and Critical Change Notes for the Samba 3.x Series</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Gerald</span> <span class="othername">(Jerry)</span> <span class="surname">Carter</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jerry at samba.org">jerry at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ChangeNotes.html#id366427">Important Samba-3.2.x Change Notes</a></span></dt><dt><span class="sect1"><a href="ChangeNotes.html#id366438">Important Samba-3.0.x Change Notes</a></span></dt><dd><dl><dt><span class="sect2"><a href="ChangeNotes.html#id366486">User and Group Changes</a></span></dt><dt><span class="sect2"><a href="ChangeNotes.html#id366776">Essential Group Mappings</a></span></dt><dt><span class="sect2"><a href="ChangeNotes.html#id366887">Passdb Changes</a></span></dt><dt><span class="sect2"><a href="ChangeNotes.html#id366943">Group Mapping Changes in Samba-3.0.23</a></span></dt><dt><span class="sect2"><a href="ChangeNotes.html#id367059">LDAP Changes in Samba-3.0.23</a></span></dt></dl></dd></dl></div><p>
 Please read this chapter carefully before update or upgrading Samba.  You should expect to find only critical
 or very important information here. Comprehensive change notes and guidance information can be found in the
 section <a class="link" href="upgrading-to-3.0.html" title="Chapter 35. Updating and Upgrading Samba">Updating and Upgrading Samba</a>.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2600657"></a>Important Samba-3.2.x Change Notes</h2></div></div></div><p>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id366427"></a>Important Samba-3.2.x Change Notes</h2></div></div></div><p>
 !!!!!!!!!!!!Add all critical update notes here!!!!!!!!!!!!!
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2600668"></a>Important Samba-3.0.x Change Notes</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id366438"></a>Important Samba-3.0.x Change Notes</h2></div></div></div><p>
 These following notes pertain in particular to Samba 3.0.23 through Samba 3.0.25c (or more recent 3.0.25
 update).  Samba is a fluid and ever changing project. Changes throughout the 3.0.x series release are
 documented in this documention - See <a class="link" href="upgrading-to-3.0.html#oldupdatenotes" title="Upgrading from Samba-2.x to Samba-3.0.25">Upgrading from Samba-2.x to Samba-3.0.25</a>.
@@ -21,35 +21,35 @@
 </p><p>
 This chapter is new to the release of the HOWTO for Samba 3.0.23. It includes much of the notes provided
 in the <code class="filename">WHATSNEW.txt</code> file that is included with the Samba source code release tarball.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2600728"></a>User and Group Changes</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id366486"></a>User and Group Changes</h3></div></div></div><p>
 The change documented here affects unmapped user and group accounts only.
 </p><p>
-<a class="indexterm" name="id2600741"></a>
-<a class="indexterm" name="id2600747"></a>
-<a class="indexterm" name="id2600754"></a>
-<a class="indexterm" name="id2600763"></a>
-<a class="indexterm" name="id2600772"></a>
+<a class="indexterm" name="id366498"></a>
+<a class="indexterm" name="id366505"></a>
+<a class="indexterm" name="id366512"></a>
+<a class="indexterm" name="id366520"></a>
+<a class="indexterm" name="id366529"></a>
 The user and group internal management routines have been rewritten to prevent overlaps of
 assigned Relative Identifiers (RIDs).  In the past the has been a potential problem when
 either manually mapping Unix groups with the <code class="literal">net groupmap</code> command or
 when migrating a Windows domain to a Samba domain by executing:
 <code class="literal">net rpc vampire</code>.
 </p><p>
-<a class="indexterm" name="id2600804"></a>
-<a class="indexterm" name="id2600810"></a>
-<a class="indexterm" name="id2600817"></a>
-<a class="indexterm" name="id2600823"></a>
+<a class="indexterm" name="id366558"></a>
+<a class="indexterm" name="id366564"></a>
+<a class="indexterm" name="id366571"></a>
+<a class="indexterm" name="id366578"></a>
 Unmapped users are now assigned a SID in the <code class="literal">S-1-22-1</code> domain and unmapped
 groups are assigned a SID in the <code class="literal">S-1-22-2</code> domain.  Previously they were
 assigned a RID within the SAM on the Samba server.  For a domain controller this would have been under the
 authority of the domain SID where as on a member server or standalone server, this would have
 been under the authority of the local SAM (see the man page for <code class="literal">net getlocalsid</code>).
 </p><p>
-<a class="indexterm" name="id2600860"></a>
-<a class="indexterm" name="id2600867"></a>
-<a class="indexterm" name="id2600874"></a>
-<a class="indexterm" name="id2600880"></a>
-<a class="indexterm" name="id2600887"></a>
+<a class="indexterm" name="id366611"></a>
+<a class="indexterm" name="id366617"></a>
+<a class="indexterm" name="id366624"></a>
+<a class="indexterm" name="id366631"></a>
+<a class="indexterm" name="id366638"></a>
 The result is that any unmapped users or groups on an upgraded Samba domain controller may
 be assigned a new SID.  Because the SID rather than a name is stored in Windows security
 descriptors, this can cause a user to no longer have access to a resource for example if a
@@ -59,19 +59,19 @@
 </p><p>
 An example helps to illustrate the change:
 </p><p>
-<a class="indexterm" name="id2600909"></a>
-<a class="indexterm" name="id2600916"></a>
-<a class="indexterm" name="id2600923"></a>
-<a class="indexterm" name="id2600929"></a>
+<a class="indexterm" name="id366655"></a>
+<a class="indexterm" name="id366662"></a>
+<a class="indexterm" name="id366669"></a>
+<a class="indexterm" name="id366675"></a>
 Assume that a group named <span class="emphasis"><em>developers</em></span> exists with a UNIX GID of 782. In this
 case this user does not exist in Samba's group mapping table. It would be perfectly normal for
 this group to be appear in an ACL editor.  Prior to Samba-3.0.23, the group SID might appear as
 <code class="literal">S-1-5-21-647511796-4126122067-3123570092-2565</code>.
 </p><p>
-<a class="indexterm" name="id2600954"></a>
-<a class="indexterm" name="id2600960"></a>
-<a class="indexterm" name="id2600967"></a>
-<a class="indexterm" name="id2600974"></a>
+<a class="indexterm" name="id366697"></a>
+<a class="indexterm" name="id366703"></a>
+<a class="indexterm" name="id366710"></a>
+<a class="indexterm" name="id366717"></a>
 With the release of Samba-3.0.23, the group SID would be reported as <code class="literal">S-1-22-2-782</code>.  Any
 security descriptors associated with files stored on a Windows NTFS disk partition will not allow access based
 on the group permissions if the user was not a member of the
@@ -79,13 +79,13 @@
 <code class="literal">S-1-22-2-782</code> and not reported in a user's token, Windows would fail the authorization check
 even though both SIDs in some respect refer to the same UNIX group.
 </p><p>
-<a class="indexterm" name="id2601010"></a>
-<a class="indexterm" name="id2601017"></a>
+<a class="indexterm" name="id366748"></a>
+<a class="indexterm" name="id366755"></a>
 The workaround for versions of Samba prior to 3.0.23, is to create a manual domain group mapping
 entry for the group <span class="emphasis"><em>developers</em></span> to point at the
 <code class="literal">S-1-5-21-647511796-4126122067-3123570092-2565</code> SID. With the release of Samba-3.0.23 this
 workaround is no longer needed.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2601039"></a>Essential Group Mappings</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id366776"></a>Essential Group Mappings</h3></div></div></div><p>
 Samba 3.0.x series  releases before 3.0.23 automatically created group mappings for the essential Windows
 domain groups <code class="literal">Domain Admins, Domain Users, Domain Guests</code>. Commencing with Samba 3.0.23
 these mappings need to be created by the Samba administrator. Failure to do this may result in a failure to
@@ -102,39 +102,39 @@
 </p><p>
 For further information regarding group mappings see <a class="link" href="groupmapping.html" title="Chapter 12. Group Mapping: MS Windows and UNIX">Group Mapping: MS Windows
 and UNIX</a>.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2601160"></a>Passdb Changes</h3></div></div></div><p>
-<a class="indexterm" name="id2601167"></a>
-<a class="indexterm" name="id2601174"></a>
-<a class="indexterm" name="id2601180"></a>
-<a class="indexterm" name="id2601187"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id366887"></a>Passdb Changes</h3></div></div></div><p>
+<a class="indexterm" name="id366895"></a>
+<a class="indexterm" name="id366902"></a>
+<a class="indexterm" name="id366908"></a>
+<a class="indexterm" name="id366915"></a>
 The <a class="link" href="smb.conf.5.html#PASSDBBACKEND">passdb backend</a> parameter no long accepts multiple passdb backends in a
 chained configuration.  Also be aware that the SQL and XML based passdb modules have been
 removed in the Samba-3.0.23 release.  More information regarding external support for a SQL
 passdb module can be found on the  <a class="ulink" href="http://pdbsql.sourceforge.net/" target="_top">pdbsql</a> web site.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2601219"></a>Group Mapping Changes in Samba-3.0.23</h3></div></div></div><p>
-<a class="indexterm" name="id2601227"></a>
-<a class="indexterm" name="id2601234"></a>
-<a class="indexterm" name="id2601241"></a>
-<a class="indexterm" name="id2601248"></a>
-<a class="indexterm" name="id2601254"></a>
-<a class="indexterm" name="id2601261"></a>
-<a class="indexterm" name="id2601268"></a>
-<a class="indexterm" name="id2601275"></a>
-<a class="indexterm" name="id2601281"></a>
-<a class="indexterm" name="id2601288"></a>
-<a class="indexterm" name="id2601295"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id366943"></a>Group Mapping Changes in Samba-3.0.23</h3></div></div></div><p>
+<a class="indexterm" name="id366950"></a>
+<a class="indexterm" name="id366957"></a>
+<a class="indexterm" name="id366964"></a>
+<a class="indexterm" name="id366971"></a>
+<a class="indexterm" name="id366978"></a>
+<a class="indexterm" name="id366984"></a>
+<a class="indexterm" name="id366991"></a>
+<a class="indexterm" name="id366998"></a>
+<a class="indexterm" name="id367004"></a>
+<a class="indexterm" name="id367011"></a>
+<a class="indexterm" name="id367018"></a>
 The default mapping entries for groups such as <code class="literal">Domain Admins</code> are no longer
 created when using an <code class="literal">smbpasswd</code> file or a <code class="literal">tdbsam</code> passdb
 backend.  This means that it is necessary to explicitly execute the <code class="literal">net groupmap add</code>
 to create group mappings, rather than use the <code class="literal">net groupmap modify</code> method to create the
 Windows group SID to UNIX GID mappings.  This change has no effect on winbindd's IDMAP functionality
 for domain groups.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2601340"></a>LDAP Changes in Samba-3.0.23</h3></div></div></div><p>
-<a class="indexterm" name="id2601348"></a>
-<a class="indexterm" name="id2601355"></a>
-<a class="indexterm" name="id2601362"></a>
-<a class="indexterm" name="id2601368"></a>
-<a class="indexterm" name="id2601375"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id367059"></a>LDAP Changes in Samba-3.0.23</h3></div></div></div><p>
+<a class="indexterm" name="id367067"></a>
+<a class="indexterm" name="id367074"></a>
+<a class="indexterm" name="id367081"></a>
+<a class="indexterm" name="id367088"></a>
+<a class="indexterm" name="id367094"></a>
 There has been a minor update the Samba LDAP schema file. A substring matching rule has been
 added to the <code class="literal">sambaSID</code> attribute definition.  For OpenLDAP servers, this
 will require the addition of <code class="literal">index sambaSID sub</code> to the

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ClientConfig.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ClientConfig.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ClientConfig.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,20 +1,20 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 8. MS Windows Network Configuration Guide</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="type.html" title="Part II. Server Configuration Basics"><link rel="prev" href="StandAloneServer.html" title="Chapter 7. Standalone Servers"><link rel="next" href="optional.html" title="Part III. Advanced Configuration"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 8. MS Windows Network Configuration Guide</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="StandAloneServer.html">Prev</a> </td><th width="60%" align="center">Part II. Server Configuration Basics</th><td width="20%" align="right"> <a accesskey="n" href="optional.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="ClientConfig"></a>Chapter 8. MS Windows Network Configuration Guide</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ClientConfig.html#id2597573">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="ClientConfig.html#id2597633">Technical Details</a></span></dt><dd><dl><dt><span class="sect2"><a href="ClientConfig.html#id2597677">TCP/IP Configuration</a></span></dt><dt><span class="sect2"><a href="ClientConfig.html#id2599448">Joining a Domain: Windows 2000/XP Professional</a></span></dt><dt><span class="sect2"><a href="ClientConfig.html#id2599975">Domain Logon Configuration: Windows 9x/Me</a></span></dt></dl></dd><dt><span class="sect1"><a href="ClientConfig.html#id2600420">Common Errors</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2597573"></a>Features and Benefits</h2></div></div></div><p>
-<a class="indexterm" name="id2597581"></a>
-<a class="indexterm" name="id2597588"></a>
-<a class="indexterm" name="id2597595"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 8. MS Windows Network Configuration Guide</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="type.html" title="Part II. Server Configuration Basics"><link rel="prev" href="StandAloneServer.html" title="Chapter 7. Standalone Servers"><link rel="next" href="optional.html" title="Part III. Advanced Configuration"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 8. MS Windows Network Configuration Guide</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="StandAloneServer.html">Prev</a> </td><th width="60%" align="center">Part II. Server Configuration Basics</th><td width="20%" align="right"> <a accesskey="n" href="optional.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="ClientConfig"></a>Chapter 8. MS Windows Network Configuration Guide</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ClientConfig.html#id363475">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="ClientConfig.html#id363528">Technical Details</a></span></dt><dd><dl><dt><span class="sect2"><a href="ClientConfig.html#id363569">TCP/IP Configuration</a></span></dt><dt><span class="sect2"><a href="ClientConfig.html#id365265">Joining a Domain: Windows 2000/XP Professional</a></span></dt><dt><span class="sect2"><a href="ClientConfig.html#id365774">Domain Logon Configuration: Windows 9x/Me</a></span></dt></dl></dd><dt><span class="sect1"><a href="ClientConfig.html#id366202">Common Errors</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id363475"></a>Features and Benefits</h2></div></div></div><p>
+<a class="indexterm" name="id363482"></a>
+<a class="indexterm" name="id363489"></a>
+<a class="indexterm" name="id363496"></a>
 Occasionally network administrators report difficulty getting Microsoft Windows clients to interoperate
 correctly with Samba servers. It seems that some folks just cannot accept the fact that the right way
 to configure an MS Windows network client is precisely as one would do when using MS Windows NT4 or 200x
 servers. Yet there is repetitious need to provide detailed Windows client configuration instructions.
 </p><p>
-<a class="indexterm" name="id2597612"></a>
-<a class="indexterm" name="id2597620"></a>
+<a class="indexterm" name="id363510"></a>
+<a class="indexterm" name="id363517"></a>
 The purpose of this chapter is to graphically illustrate MS Windows client configuration for the most common
 critical aspects of such configuration. An experienced network administrator will not be interested in the
 details of this chapter.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2597633"></a>Technical Details</h2></div></div></div><p>
-<a class="indexterm" name="id2597641"></a>
-<a class="indexterm" name="id2597648"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id363528"></a>Technical Details</h2></div></div></div><p>
+<a class="indexterm" name="id363536"></a>
+<a class="indexterm" name="id363543"></a>
 This chapter discusses TCP/IP protocol configuration as well as network membership for the platforms
 that are in common use today. These are:
 </p><div class="itemizedlist"><ul type="disc"><li><p>
@@ -23,27 +23,27 @@
 	Windows 2000 Professional
 	</p></li><li><p>
 	Windows Millennium edition (Me)
-	</p></li></ul></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2597677"></a>TCP/IP Configuration</h3></div></div></div><p>
-<a class="indexterm" name="id2597685"></a>
-<a class="indexterm" name="id2597692"></a>
+	</p></li></ul></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id363569"></a>TCP/IP Configuration</h3></div></div></div><p>
+<a class="indexterm" name="id363577"></a>
+<a class="indexterm" name="id363584"></a>
 	The builder of a house must ensure that all construction takes place on a firm foundation.
 	The same is true for the builder of a TCP/IP-based networking system. Fundamental network configuration problems
 	will plague all network users until they are resolved. 
 	</p><p>
-<a class="indexterm" name="id2597707"></a>
-<a class="indexterm" name="id2597714"></a>
+<a class="indexterm" name="id363596"></a>
+<a class="indexterm" name="id363603"></a>
 	MS Windows workstations and servers can be configured either with fixed
 	IP addresses or via DHCP. The examples that follow demonstrate the use of DHCP
 	and make only passing reference to those situations where fixed IP configuration
 	settings can be effected.
 	</p><p>
-<a class="indexterm" name="id2597728"></a>
-<a class="indexterm" name="id2597735"></a>
+<a class="indexterm" name="id363615"></a>
+<a class="indexterm" name="id363622"></a>
 	It is possible to use shortcuts or abbreviated keystrokes to arrive at a
 	particular configuration screen. The decision was made to base all examples in this
 	chapter on use of the <span class="guibutton">Start</span> button.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2597752"></a>MS Windows XP Professional</h4></div></div></div><p>
-<a class="indexterm" name="id2597760"></a>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id363638"></a>MS Windows XP Professional</h4></div></div></div><p>
+<a class="indexterm" name="id363645"></a>
 		There are two paths to the Windows XP TCP/IP configuration panel. Choose the access method that you prefer:
 		</p><p>
 		Click <span class="guimenu">Start -&gt; Control Panel -&gt; Network Connections</span>.
@@ -51,48 +51,48 @@
 		<span class="emphasis"><em>Alternately,</em></span> click <span class="guimenu">Start -&gt;</span>, and right-click <span class="guimenu">My Network Places</span>
 		then select <span class="guimenuitem">Properties</span>.
 		</p><p>
-<a class="indexterm" name="id2597809"></a>
+<a class="indexterm" name="id363691"></a>
 		The following procedure steps through the Windows XP Professional TCP/IP configuration process:
 		</p><div class="procedure"><ol type="1"><li><p>
-<a class="indexterm" name="id2597826"></a>
-<a class="indexterm" name="id2597833"></a>
-<a class="indexterm" name="id2597840"></a>
+<a class="indexterm" name="id363708"></a>
+<a class="indexterm" name="id363714"></a>
+<a class="indexterm" name="id363721"></a>
 			On some installations the interface will be called <span class="guimenu">Local Area Connection</span> and
 			on others it will be called <span class="guimenu">Network Bridge</span>. On our system it is called <span class="guimenu">Network Bridge</span>.
 			Right-click on <span class="guimenu">Network Bridge -&gt; Properties</span>. See <a class="link" href="ClientConfig.html#WXPP002" title="Figure 8.1. Network Bridge Configuration.">&#8220;Network Bridge Configuration.&#8221;</a>.
 			</p><div class="figure"><a name="WXPP002"></a><p class="title"><b>Figure 8.1. Network Bridge Configuration.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/WXPP002.png" alt="Network Bridge Configuration."></div></div></div><p><br class="figure-break">
 			</p></li><li><p>
-<a class="indexterm" name="id2597925"></a>
-<a class="indexterm" name="id2597932"></a>
+<a class="indexterm" name="id363803"></a>
+<a class="indexterm" name="id363810"></a>
 			The Network Bridge Configuration, or Local Area Connection, panel is used to set TCP/IP protocol settings.
 			In <span class="guimenuitem">This connection uses the following items:</span> box,
 			click on <span class="guimenu">Internet Protocol (TCP/IP)</span>, then click on <span class="guibutton">Properties</span>.
 			</p><p>
-<a class="indexterm" name="id2597964"></a>
-<a class="indexterm" name="id2597971"></a>
+<a class="indexterm" name="id363840"></a>
+<a class="indexterm" name="id363847"></a>
 			The default setting is DHCP-enabled operation
 			(i.e., &#8220;<span class="quote">Obtain an IP address automatically</span>&#8221;). See <a class="link" href="ClientConfig.html#WXPP003" title="Figure 8.2. Internet Protocol (TCP/IP) Properties.">&#8220;Internet Protocol (TCP/IP) Properties.&#8221;</a>.
 			</p><div class="figure"><a name="WXPP003"></a><p class="title"><b>Figure 8.2. Internet Protocol (TCP/IP) Properties.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/WXPP003.png" alt="Internet Protocol (TCP/IP) Properties."></div></div></div><p><br class="figure-break">
 			</p><p>
-<a class="indexterm" name="id2598034"></a>
-<a class="indexterm" name="id2598041"></a>
-<a class="indexterm" name="id2598048"></a>
-<a class="indexterm" name="id2598054"></a>
+<a class="indexterm" name="id363908"></a>
+<a class="indexterm" name="id363915"></a>
+<a class="indexterm" name="id363922"></a>
+<a class="indexterm" name="id363928"></a>
 			Many network administrators will want to use DHCP to configure all client TCP/IP
 			protocol stack settings. (For information on how to configure the ISC DHCP server
 			for Windows client support see <a class="link" href="DNSDHCP.html#DHCP" title="DHCP Server">the DNS and DHCP Configuration Guide</a>,
 			<a class="link" href="DNSDHCP.html#DHCP" title="DHCP Server">DHCP Server</a>.
 			</p><p>
-<a class="indexterm" name="id2598083"></a>
-<a class="indexterm" name="id2598090"></a>
-<a class="indexterm" name="id2598097"></a>
+<a class="indexterm" name="id363955"></a>
+<a class="indexterm" name="id363962"></a>
+<a class="indexterm" name="id363968"></a>
 			If it is necessary to provide a fixed IP address, click on &#8220;<span class="quote">Use the following IP address</span>&#8221; and enter the
 			IP Address, the subnet mask, and the default gateway address in the boxes provided.
 			</p></li><li><p>
-<a class="indexterm" name="id2598117"></a>
-<a class="indexterm" name="id2598124"></a>
-<a class="indexterm" name="id2598132"></a>
-<a class="indexterm" name="id2598138"></a>
+<a class="indexterm" name="id363987"></a>
+<a class="indexterm" name="id363994"></a>
+<a class="indexterm" name="id364001"></a>
+<a class="indexterm" name="id364008"></a>
 			Click the <span class="guibutton">Advanced</span> button to proceed with TCP/IP configuration.
 			This opens a panel in which it is possible to create additional IP addresses for this interface.
 			The technical name for the additional addresses is <span class="emphasis"><em>IP aliases</em></span>, and additionally this
@@ -100,28 +100,28 @@
 			necessary to create additional settings. See <a class="link" href="ClientConfig.html#WXPP005" title="Figure 8.3. Advanced Network Settings">&#8220;Advanced Network Settings&#8221;</a> to see the appearance of this panel.
 			</p><div class="figure"><a name="WXPP005"></a><p class="title"><b>Figure 8.3. Advanced Network Settings</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/WXPP005.png" alt="Advanced Network Settings"></div></div></div><p><br class="figure-break">
 			</p><p>
-<a class="indexterm" name="id2598209"></a>
-<a class="indexterm" name="id2598215"></a>
-<a class="indexterm" name="id2598222"></a>
+<a class="indexterm" name="id364074"></a>
+<a class="indexterm" name="id364080"></a>
+<a class="indexterm" name="id364087"></a>
 			Fixed settings may be required for DNS and WINS if these settings are not provided automatically via DHCP.
 			</p></li><li><p>
-<a class="indexterm" name="id2598237"></a>
-<a class="indexterm" name="id2598244"></a>
+<a class="indexterm" name="id364101"></a>
+<a class="indexterm" name="id364108"></a>
 			Click the <span class="guimenu">DNS</span> tab to add DNS server settings. 
 			The example system uses manually configured DNS settings. When finished making changes, click the
 			<span class="guibutton">OK</span> to commit the settings. See <a class="link" href="ClientConfig.html#WXPP014" title="Figure 8.4. DNS Configuration.">&#8220;DNS Configuration.&#8221;</a>.
 			</p><div class="figure"><a name="WXPP014"></a><p class="title"><b>Figure 8.4. DNS Configuration.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/WXPP014.png" alt="DNS Configuration."></div></div></div><p><br class="figure-break">
 			</p></li><li><p>
-<a class="indexterm" name="id2598319"></a>
-<a class="indexterm" name="id2598326"></a>
+<a class="indexterm" name="id364181"></a>
+<a class="indexterm" name="id364188"></a>
 			Click the <span class="guibutton">WINS</span> tab to add manual WINS server entries. 
 			This step demonstrates an example system that uses manually configured WINS settings. 
 			When finished making changes, click <span class="guibutton">OK</span> to commit
                         the settings. See <a class="link" href="ClientConfig.html#WXPP009" title="Figure 8.5. WINS Configuration">&#8220;WINS Configuration&#8221;</a>.
 			</p><div class="figure"><a name="WXPP009"></a><p class="title"><b>Figure 8.5. WINS Configuration</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/WXPP009.png" alt="WINS Configuration"></div></div></div><p><br class="figure-break">
-			</p></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2598395"></a>MS Windows 2000</h4></div></div></div><p>
-<a class="indexterm" name="id2598403"></a>
-<a class="indexterm" name="id2598410"></a>
+			</p></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id364254"></a>MS Windows 2000</h4></div></div></div><p>
+<a class="indexterm" name="id364262"></a>
+<a class="indexterm" name="id364269"></a>
 		There are two paths to the Windows 2000 Professional TCP/IP configuration panel. Choose the access method that you prefer:
 		</p><p>
 		Click <span class="guimenu">Start -&gt; Control Panel -&gt; Network and Dial-up Connections</span>.
@@ -129,33 +129,33 @@
 		<span class="emphasis"><em>Alternatively,</em></span> click <span class="guimenu">Start</span>, then right-click <span class="guimenu">My Network Places</span>, and
 		select <span class="guimenuitem">Properties</span>.
 		</p><p>
-<a class="indexterm" name="id2598458"></a>
+<a class="indexterm" name="id364315"></a>
 		The following procedure steps through the Windows XP Professional TCP/IP configuration process:
 		</p><div class="procedure"><ol type="1"><li><p>
 			Right-click on <span class="guimenu">Local Area Connection</span>, then click
 			<span class="guimenuitem">Properties</span>. See <a class="link" href="ClientConfig.html#w2kp001" title="Figure 8.6. Local Area Connection Properties.">&#8220;Local Area Connection Properties.&#8221;</a>.
 			</p><div class="figure"><a name="w2kp001"></a><p class="title"><b>Figure 8.6. Local Area Connection Properties.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/w2kp001.png" alt="Local Area Connection Properties."></div></div></div><p><br class="figure-break">
 			</p></li><li><p>
-<a class="indexterm" name="id2598539"></a>
-<a class="indexterm" name="id2598547"></a>
+<a class="indexterm" name="id364393"></a>
+<a class="indexterm" name="id364400"></a>
 			The Local Area Connection Properties is used to set TCP/IP protocol settings. Click on
 			<span class="guimenu">Internet Protocol (TCP/IP)</span> in the <span class="guimenuitem">Components checked are used by this
 			connection:</span> box, then click the <span class="guibutton">Properties</span> button.
 			</p></li><li><p>
-<a class="indexterm" name="id2598581"></a>
-<a class="indexterm" name="id2598588"></a>
+<a class="indexterm" name="id364433"></a>
+<a class="indexterm" name="id364440"></a>
 			The default setting is DHCP-enabled operation
 			(i.e., &#8220;<span class="quote">Obtain an IP address automatically</span>&#8221;). See <a class="link" href="ClientConfig.html#w2kp002" title="Figure 8.7. Internet Protocol (TCP/IP) Properties.">&#8220;Internet Protocol (TCP/IP) Properties.&#8221;</a>.
 			</p><div class="figure"><a name="w2kp002"></a><p class="title"><b>Figure 8.7. Internet Protocol (TCP/IP) Properties.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/w2kp002.png" alt="Internet Protocol (TCP/IP) Properties."></div></div></div><p><br class="figure-break">
 			</p><p>
-<a class="indexterm" name="id2598648"></a>
-<a class="indexterm" name="id2598655"></a>
+<a class="indexterm" name="id364497"></a>
+<a class="indexterm" name="id364504"></a>
 			Many network administrators will want to use DHCP to configure all client TCP/IP
 			protocol stack settings. (For information on how to configure the ISC DHCP server
 			for Windows client support, see, <a class="link" href="DNSDHCP.html#DHCP" title="DHCP Server">&#8220;DHCP Server&#8221;</a>.
 			</p><p>
-<a class="indexterm" name="id2598674"></a>
-<a class="indexterm" name="id2598681"></a>
+<a class="indexterm" name="id364522"></a>
+<a class="indexterm" name="id364528"></a>
 			If it is necessary to provide a fixed IP address, click on &#8220;<span class="quote">Use the following IP address</span>&#8221; and enter the
 			IP Address, the subnet mask, and the default gateway address in the boxes provided.
 			For this example we are assuming that all network clients will be configured using DHCP.
@@ -164,50 +164,50 @@
 			Refer to <a class="link" href="ClientConfig.html#w2kp003" title="Figure 8.8. Advanced Network Settings.">&#8220;Advanced Network Settings.&#8221;</a>.
 			</p><div class="figure"><a name="w2kp003"></a><p class="title"><b>Figure 8.8. Advanced Network Settings.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/w2kp003.png" alt="Advanced Network Settings."></div></div></div><p><br class="figure-break">
 			</p><p>
-<a class="indexterm" name="id2598757"></a>
-<a class="indexterm" name="id2598764"></a>
-<a class="indexterm" name="id2598770"></a>
+<a class="indexterm" name="id364601"></a>
+<a class="indexterm" name="id364607"></a>
+<a class="indexterm" name="id364614"></a>
 			Fixed settings may be required for DNS and WINS if these settings are not provided automatically via DHCP.
 			</p></li><li><p>
-<a class="indexterm" name="id2598786"></a>
-<a class="indexterm" name="id2598793"></a>
+<a class="indexterm" name="id364628"></a>
+<a class="indexterm" name="id364635"></a>
 			Click the <span class="guimenu">DNS</span> tab to add DNS server settings. 
 			The example system uses manually configured DNS settings. When finished making changes,
 			click <span class="guibutton">OK</span> to commit the settings. See <a class="link" href="ClientConfig.html#w2kp004" title="Figure 8.9. DNS Configuration.">&#8220;DNS Configuration.&#8221;</a>.
 			</p><div class="figure"><a name="w2kp004"></a><p class="title"><b>Figure 8.9. DNS Configuration.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/w2kp004.png" alt="DNS Configuration."></div></div></div><p><br class="figure-break">
 			</p></li><li><p>
-<a class="indexterm" name="id2598864"></a>
-<a class="indexterm" name="id2598871"></a>
+<a class="indexterm" name="id364704"></a>
+<a class="indexterm" name="id364711"></a>
 			Click the <span class="guibutton">WINS</span> tab to add manual WINS server entries. 
 			This step demonstrates an example system that uses manually configured WINS settings. 
 			When finished making changes, click <span class="guibutton">OK</span> to commit the settings.
 			See <a class="link" href="ClientConfig.html#w2kp005" title="Figure 8.10. WINS Configuration.">&#8220;WINS Configuration.&#8221;</a>.
 			</p><div class="figure"><a name="w2kp005"></a><p class="title"><b>Figure 8.10. WINS Configuration.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/w2kp005.png" alt="WINS Configuration."></div></div></div><p><br class="figure-break">
-			</p></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2598942"></a>MS Windows Me</h4></div></div></div><p>
-<a class="indexterm" name="id2598950"></a>
-<a class="indexterm" name="id2598957"></a>
-<a class="indexterm" name="id2598964"></a>
+			</p></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id364780"></a>MS Windows Me</h4></div></div></div><p>
+<a class="indexterm" name="id364788"></a>
+<a class="indexterm" name="id364794"></a>
+<a class="indexterm" name="id364801"></a>
 		There are two paths to the Windows Millennium edition (Me) TCP/IP configuration panel. Choose the access method that you prefer:
 		</p><p>
 		Click <span class="guimenu">Start -&gt; Control Panel -&gt; Network Connections</span>.
 		</p><p>
-<a class="indexterm" name="id2598987"></a>
-<a class="indexterm" name="id2598994"></a>
+<a class="indexterm" name="id364822"></a>
+<a class="indexterm" name="id364829"></a>
 		<span class="emphasis"><em>Alternatively,</em></span> click on <span class="guimenu">Start -&gt;</span>, and right click on <span class="guimenu">My Network Places</span>
 		then select <span class="guimenuitem">Properties</span>.
 		</p><p>
-<a class="indexterm" name="id2599027"></a>
+<a class="indexterm" name="id364861"></a>
 		The following procedure steps through the Windows Me TCP/IP configuration process:
 		</p><div class="procedure"><ol type="1"><li><p>
-<a class="indexterm" name="id2599044"></a>
+<a class="indexterm" name="id364877"></a>
 			In the box labeled <span class="guimenuitem">The following network components are installed:</span>,
 			click on <span class="guimenu">Internet Protocol TCP/IP</span>, then click on the <span class="guibutton">Properties</span> button.
 			See <a class="link" href="ClientConfig.html#WME001" title="Figure 8.11. The Windows Me Network Configuration Panel.">&#8220;The Windows Me Network Configuration Panel.&#8221;</a>.
 			</p><div class="figure"><a name="WME001"></a><p class="title"><b>Figure 8.11. The Windows Me Network Configuration Panel.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/WME001.png" alt="The Windows Me Network Configuration Panel."></div></div></div><p><br class="figure-break">
 			</p></li><li><p>
-<a class="indexterm" name="id2599125"></a>
-<a class="indexterm" name="id2599132"></a>
-<a class="indexterm" name="id2599139"></a>
+<a class="indexterm" name="id364956"></a>
+<a class="indexterm" name="id364963"></a>
+<a class="indexterm" name="id364970"></a>
 			Many network administrators will want to use DHCP to configure all client TCP/IP
 			protocol stack settings. (For information on how to configure the ISC DHCP server
 			for Windows client support see <a class="link" href="DNSDHCP.html#DHCP" title="DHCP Server">the DNS and DHCP Configuration Guide</a>,
@@ -215,41 +215,41 @@
 			(i.e., <span class="guimenu">Obtain IP address automatically</span> is enabled). See <a class="link" href="ClientConfig.html#WME002" title="Figure 8.12. IP Address.">&#8220;IP Address.&#8221;</a>.
 			</p><div class="figure"><a name="WME002"></a><p class="title"><b>Figure 8.12. IP Address.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/WME002.png" alt="IP Address."></div></div></div><p><br class="figure-break">
 			</p><p>
-<a class="indexterm" name="id2599218"></a>
-<a class="indexterm" name="id2599225"></a>
-<a class="indexterm" name="id2599232"></a>
+<a class="indexterm" name="id365046"></a>
+<a class="indexterm" name="id365053"></a>
+<a class="indexterm" name="id365060"></a>
 			If it is necessary to provide a fixed IP address, click on <span class="guimenuitem">Specify an IP address</span> and enter the
 			IP Address and the subnet mask in the boxes provided. For this example we are assuming that all
 			network clients will be configured using DHCP.
 			</p></li><li><p>
-<a class="indexterm" name="id2599255"></a>
-<a class="indexterm" name="id2599262"></a>
+<a class="indexterm" name="id365081"></a>
+<a class="indexterm" name="id365087"></a>
 			Fixed settings may be required for DNS and WINS if these settings are not provided automatically via DHCP.
 			</p></li><li><p>
-<a class="indexterm" name="id2599277"></a>
+<a class="indexterm" name="id365102"></a>
 			If necessary, click the <span class="guimenu">DNS Configuration</span> tab to add DNS server settings. 
 			Click the <span class="guibutton">WINS Configuration</span> tab to add WINS server settings. 
 			The <span class="guimenu">Gateway</span> tab allows additional gateways (router addresses) to be added to the network
 			interface settings. In most cases where DHCP is used, it will not be necessary to
 			create these manual settings.
 			</p></li><li><p>
-<a class="indexterm" name="id2599314"></a>
-<a class="indexterm" name="id2599321"></a>
+<a class="indexterm" name="id365136"></a>
+<a class="indexterm" name="id365142"></a>
 			The following example uses manually configured WINS settings. See <a class="link" href="ClientConfig.html#WME005" title="Figure 8.13. DNS Configuration.">&#8220;DNS Configuration.&#8221;</a>.
 			When finished making changes, click <span class="guibutton">OK</span> to commit the settings.
 			</p><div class="figure"><a name="WME005"></a><p class="title"><b>Figure 8.13. DNS Configuration.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/WME005.png" alt="DNS Configuration."></div></div></div><p><br class="figure-break">
 			</p><p>
-<a class="indexterm" name="id2599382"></a>
-<a class="indexterm" name="id2599389"></a>
+<a class="indexterm" name="id365202"></a>
+<a class="indexterm" name="id365209"></a>
 			This is an example of a system that uses manually configured WINS settings. One situation where
 			this might apply is on a network that has a single DHCP server that provides settings for multiple
 			Windows workgroups or domains. See <a class="link" href="ClientConfig.html#WME003" title="Figure 8.14. WINS Configuration.">&#8220;WINS Configuration.&#8221;</a>.
 			</p><div class="figure"><a name="WME003"></a><p class="title"><b>Figure 8.14. WINS Configuration.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/WME003.png" alt="WINS Configuration."></div></div></div><p><br class="figure-break">
-			</p></li></ol></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2599448"></a>Joining a Domain: Windows 2000/XP Professional</h3></div></div></div><p>
-<a class="indexterm" name="id2599456"></a>
-<a class="indexterm" name="id2599463"></a>
-<a class="indexterm" name="id2599470"></a>
-<a class="indexterm" name="id2599477"></a>
+			</p></li></ol></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id365265"></a>Joining a Domain: Windows 2000/XP Professional</h3></div></div></div><p>
+<a class="indexterm" name="id365273"></a>
+<a class="indexterm" name="id365280"></a>
+<a class="indexterm" name="id365286"></a>
+<a class="indexterm" name="id365293"></a>
 	Microsoft Windows NT/200x/XP Professional platforms can participate in domain security.
 	This section steps through the process for making a Windows 200x/XP Professional machine a
 	member of a domain security environment. It should be noted that this process is identical
@@ -259,18 +259,18 @@
 		</p></li><li><p>
 		Right-click <span class="guimenu">My Computer</span>, then select <span class="guimenuitem">Properties</span>.
 		</p></li><li><p>
-<a class="indexterm" name="id2599531"></a>
+<a class="indexterm" name="id365343"></a>
 		The opening panel is the same one that can be reached by clicking <span class="guimenu">System</span> on the Control Panel.
 		See <a class="link" href="ClientConfig.html#wxpp001" title="Figure 8.15. The General Panel.">&#8220;The General Panel.&#8221;</a>.
 		</p><div class="figure"><a name="wxpp001"></a><p class="title"><b>Figure 8.15. The General Panel.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/wxpp001.png" alt="The General Panel."></div></div></div><p><br class="figure-break">
 		</p></li><li><p>
-<a class="indexterm" name="id2599597"></a>
+<a class="indexterm" name="id365408"></a>
 		Click the <span class="guimenu">Computer Name</span> tab.
 		This panel shows the <span class="guimenuitem">Computer Description</span>, the <span class="guimenuitem">Full computer name</span>,
 		and the <span class="guimenuitem">Workgroup</span> or <span class="guimenuitem">Domain name</span>.
 		</p><p>
-<a class="indexterm" name="id2599638"></a>
-<a class="indexterm" name="id2599645"></a>
+<a class="indexterm" name="id365448"></a>
+<a class="indexterm" name="id365455"></a>
 		Clicking the <span class="guimenu">Network ID</span> button will launch the configuration wizard. Do not use this with
 		Samba-3. If you wish to change the computer name or join or leave the domain, click the <span class="guimenu">Change</span> button.
 		See <a class="link" href="ClientConfig.html#wxpp004" title="Figure 8.16. The Computer Name Panel.">&#8220;The Computer Name Panel.&#8221;</a>.
@@ -280,38 +280,38 @@
 		We will join the domain called MIDEARTH. See <a class="link" href="ClientConfig.html#wxpp006" title="Figure 8.17. The Computer Name Changes Panel.">&#8220;The Computer Name Changes Panel.&#8221;</a>.
 		</p><div class="figure"><a name="wxpp006"></a><p class="title"><b>Figure 8.17. The Computer Name Changes Panel.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/wxpp006.png" alt="The Computer Name Changes Panel."></div></div></div><p><br class="figure-break">
         </p></li><li><p>
-<a class="indexterm" name="id2599777"></a>
+<a class="indexterm" name="id365583"></a>
 		Enter the name <span class="guimenu">MIDEARTH</span> in the field below the domain radio button.
 		</p><p>
 		This panel shows that our example machine (TEMPTATION) is set to join the domain called MIDEARTH. See <a class="link" href="ClientConfig.html#wxpp007" title="Figure 8.18. The Computer Name Changes Panel Domain MIDEARTH.">&#8220;The Computer Name Changes Panel  Domain MIDEARTH.&#8221;</a>.
 		</p><div class="figure"><a name="wxpp007"></a><p class="title"><b>Figure 8.18. The Computer Name Changes Panel  Domain MIDEARTH.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/wxpp007.png" alt="The Computer Name Changes Panel Domain MIDEARTH."></div></div></div><p><br class="figure-break">
         </p></li><li><p>
-<a class="indexterm" name="id2599849"></a>
-<a class="indexterm" name="id2599856"></a>
+<a class="indexterm" name="id365653"></a>
+<a class="indexterm" name="id365660"></a>
 		Now click the <span class="guimenu">OK</span> button. A dialog box should appear to allow you to provide the
 		credentials (username and password) of a domain administrative account that has the rights to add machines to
 		the domain.
 		</p><p>
-<a class="indexterm" name="id2599876"></a>
+<a class="indexterm" name="id365677"></a>
 		Enter the name &#8220;<span class="quote">root</span>&#8221; and the root password from your Samba-3 server. See <a class="link" href="ClientConfig.html#wxpp008" title="Figure 8.19. Computer Name Changes Username and Password Panel.">&#8220;Computer Name Changes  Username and Password Panel.&#8221;</a>.
 		</p><div class="figure"><a name="wxpp008"></a><p class="title"><b>Figure 8.19. Computer Name Changes  Username and Password Panel.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/wxpp008.png" alt="Computer Name Changes Username and Password Panel."></div></div></div><p><br class="figure-break">
         </p></li><li><p>
 		Click on <span class="guimenu">OK</span>.
         </p><p>
-<a class="indexterm" name="id2599952"></a>
-<a class="indexterm" name="id2599959"></a>
+<a class="indexterm" name="id365752"></a>
+<a class="indexterm" name="id365759"></a>
 		The &#8220;<span class="quote">Welcome to the MIDEARTH domain.</span>&#8221; dialog box should appear. At this point the machine must be rebooted.
 		Joining the domain is now complete.
-        </p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2599975"></a>Domain Logon Configuration: Windows 9x/Me</h3></div></div></div><p>
-<a class="indexterm" name="id2599984"></a>
-<a class="indexterm" name="id2599990"></a>
-<a class="indexterm" name="id2599997"></a>
+        </p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id365774"></a>Domain Logon Configuration: Windows 9x/Me</h3></div></div></div><p>
+<a class="indexterm" name="id365782"></a>
+<a class="indexterm" name="id365789"></a>
+<a class="indexterm" name="id365795"></a>
 	We follow the convention used by most in saying that Windows 9x/Me machines can participate in domain logons. The truth is
 	that these platforms can use only the LanManager network logon protocols.
 	</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2600012"></a>
-<a class="indexterm" name="id2600019"></a>
-<a class="indexterm" name="id2600026"></a>
+<a class="indexterm" name="id365808"></a>
+<a class="indexterm" name="id365815"></a>
+<a class="indexterm" name="id365822"></a>
 	Windows XP Home edition cannot participate in domain or LanManager network logons.
 	</p></div><div class="procedure"><ol type="1"><li><p>
 		Right-click on the <span class="guimenu">Network Neighborhood</span> icon.
@@ -320,44 +320,44 @@
                 See <a class="link" href="ClientConfig.html#WME009" title="Figure 8.20. The Network Panel.">&#8220;The Network Panel.&#8221;</a>.
 		</p><div class="figure"><a name="WME009"></a><p class="title"><b>Figure 8.20. The Network Panel.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/WME009.png" alt="The Network Panel."></div></div></div><p><br class="figure-break">
                 </p><p>
-<a class="indexterm" name="id2600105"></a>
-<a class="indexterm" name="id2600112"></a>
+<a class="indexterm" name="id365898"></a>
+<a class="indexterm" name="id365905"></a>
 		Make sure that the <span class="guimenu">Client for Microsoft Networks</span> driver is installed as shown.
 		Click on the <span class="guimenu">Client for Microsoft Networks</span> entry in <span class="guimenu">The following network
 		components are installed:</span> box. Then click the <span class="guibutton">Properties</span> button.
 		</p></li><li><p>
-<a class="indexterm" name="id2600152"></a>
-<a class="indexterm" name="id2600159"></a>
+<a class="indexterm" name="id365943"></a>
+<a class="indexterm" name="id365950"></a>
 		The Client for Microsoft Networks Properties panel is the correct location to configure network logon
 		settings. See <a class="link" href="ClientConfig.html#WME010" title="Figure 8.21. Client for Microsoft Networks Properties Panel.">&#8220;Client for Microsoft Networks Properties Panel.&#8221;</a>.
 		</p><div class="figure"><a name="WME010"></a><p class="title"><b>Figure 8.21. Client for Microsoft Networks Properties Panel.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/WME010.png" alt="Client for Microsoft Networks Properties Panel."></div></div></div><p><br class="figure-break">
                 </p><p>
-<a class="indexterm" name="id2600216"></a>
-<a class="indexterm" name="id2600223"></a>
+<a class="indexterm" name="id366005"></a>
+<a class="indexterm" name="id366012"></a>
 		Enter the Windows NT domain name, check the <span class="guimenu">Log on to Windows NT domain</span> box,
 		and click <span class="guimenu">OK</span>.
 		</p></li><li><p>
-<a class="indexterm" name="id2600249"></a>
-<a class="indexterm" name="id2600256"></a>
-<a class="indexterm" name="id2600263"></a>
+<a class="indexterm" name="id366038"></a>
+<a class="indexterm" name="id366044"></a>
+<a class="indexterm" name="id366051"></a>
 		Click on the <span class="guimenu">Identification</span> button. This is the location at which the workgroup
 		(domain) name and the machine name (computer name) need to be set. See <a class="link" href="ClientConfig.html#WME013" title="Figure 8.22. Identification Panel.">&#8220;Identification Panel.&#8221;</a>.
 		</p><div class="figure"><a name="WME013"></a><p class="title"><b>Figure 8.22. Identification Panel.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/WME013.png" alt="Identification Panel."></div></div></div><p><br class="figure-break">
                 </p></li><li><p>
-<a class="indexterm" name="id2600328"></a>
-<a class="indexterm" name="id2600335"></a>
-<a class="indexterm" name="id2600342"></a>
-<a class="indexterm" name="id2600349"></a>
+<a class="indexterm" name="id366114"></a>
+<a class="indexterm" name="id366121"></a>
+<a class="indexterm" name="id366128"></a>
+<a class="indexterm" name="id366135"></a>
 		Now click the <span class="guimenu">Access Control</span> button. If you want to be able to assign share access
 		permissions using domain user and group accounts, it is necessary to enable
 		<span class="guimenu">User-level access control</span> as shown in this panel.  See <a class="link" href="ClientConfig.html#WME014" title="Figure 8.23. Access Control Panel.">&#8220;Access Control Panel.&#8221;</a>.
 		</p><div class="figure"><a name="WME014"></a><p class="title"><b>Figure 8.23. Access Control Panel.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/WME014.png" alt="Access Control Panel."></div></div></div><p><br class="figure-break">
-                </p></li></ol></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2600420"></a>Common Errors</h2></div></div></div><p>
-<a class="indexterm" name="id2600427"></a>
-<a class="indexterm" name="id2600434"></a>
+                </p></li></ol></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id366202"></a>Common Errors</h2></div></div></div><p>
+<a class="indexterm" name="id366210"></a>
+<a class="indexterm" name="id366217"></a>
 The most common errors that can afflict Windows networking systems include:
 </p><div class="itemizedlist"><ul type="disc"><li><p>Incorrect IP address.</p></li><li><p>Incorrect or inconsistent netmasks.</p></li><li><p>Incorrect router address.</p></li><li><p>Incorrect DNS server address.</p></li><li><p>Incorrect WINS server address.</p></li><li><p>Use of a Network Scope setting  watch out for this one!</p></li></ul></div><p>
-<a class="indexterm" name="id2600482"></a>
-<a class="indexterm" name="id2600489"></a>
+<a class="indexterm" name="id366262"></a>
+<a class="indexterm" name="id366269"></a>
 The most common reasons for which a Windows NT/200x/XP Professional client cannot join the Samba controlled domain are:
 </p><div class="itemizedlist"><ul type="disc"><li><p><code class="filename">smb.conf</code> does not have correct <a class="link" href="smb.conf.5.html#ADDMACHINESCRIPT">add machine script</a> settings.</p></li><li><p>&#8220;<span class="quote">root</span>&#8221; account is not in password backend database.</p></li><li><p>Attempt to use a user account instead of the &#8220;<span class="quote">root</span>&#8221; account to join a machine to the domain.</p></li><li><p>Open connections from the workstation to the server.</p></li><li><p>Firewall or filter configurations in place on either the client or the Samba server.</p></li></ul></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="StandAloneServer.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="type.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="optional.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 7. Standalone Servers </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Part III. Advanced Configuration</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/DNSDHCP.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/DNSDHCP.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/DNSDHCP.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,6 +1,6 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 47. DNS and DHCP Configuration Guide</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="Appendix.html" title="Part VI. Reference Section"><link rel="prev" href="ch46.html" title="Chapter 46. Samba Support"><link rel="next" href="apa.html" title="Appendix A.  GNU General Public License version 3"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 47. DNS and DHCP Configuration Guide</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch46.html">Prev</a> </td><th width="60%" align="center">Part VI. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="apa.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="DNSDHCP"></a>Chapter 47. DNS and DHCP Configuration Guide</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="DNSDHCP.html#id2714623">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="DNSDHCP.html#id2714801">Example Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="DNSDHCP.html#id2714892">Dynamic DNS</a></span></dt><dt><span class="sect2"><a href="DNSDHCP.html#DHCP">DHCP Server</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2714623"></a>Features and Benefits</h2></div></div></div><p>
-<a class="indexterm" name="id2714631"></a>
-<a class="indexterm" name="id2714640"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 47. DNS and DHCP Configuration Guide</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="Appendix.html" title="Part VI. Reference Section"><link rel="prev" href="ch46.html" title="Chapter 46. Samba Support"><link rel="next" href="apa.html" title="Appendix A.  GNU General Public License version 3"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 47. DNS and DHCP Configuration Guide</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch46.html">Prev</a> </td><th width="60%" align="center">Part VI. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="apa.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="DNSDHCP"></a>Chapter 47. DNS and DHCP Configuration Guide</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="DNSDHCP.html#id471060">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="DNSDHCP.html#id471220">Example Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="DNSDHCP.html#id471296">Dynamic DNS</a></span></dt><dt><span class="sect2"><a href="DNSDHCP.html#DHCP">DHCP Server</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id471060"></a>Features and Benefits</h2></div></div></div><p>
+<a class="indexterm" name="id471068"></a>
+<a class="indexterm" name="id471077"></a>
 There are few subjects in the UNIX world that might raise as much contention as
 Domain Name System (DNS) and Dynamic Host Configuration Protocol (DHCP).
 Not all opinions held for or against particular implementations of DNS and DHCP
@@ -10,16 +10,16 @@
 and freedom. Microsoft Windows users in particular expect to be able to plug their
 notebook computer into a network port and have things &#8220;<span class="quote">just work.</span>&#8221;
 </p><p>
-<a class="indexterm" name="id2714667"></a>
+<a class="indexterm" name="id471100"></a>
 UNIX administrators have a point. Many of the normative practices in the Microsoft
 Windows world at best border on bad practice from a security perspective.
 Microsoft Windows networking protocols allow workstations to arbitrarily register
 themselves on a network. Windows 2000 Active Directory registers entries in the DNS namespace
 that are equally perplexing to UNIX administrators. Welcome to the new world!
 </p><p>
-<a class="indexterm" name="id2714684"></a>
-<a class="indexterm" name="id2714693"></a>
-<a class="indexterm" name="id2714702"></a>
+<a class="indexterm" name="id471114"></a>
+<a class="indexterm" name="id471123"></a>
+<a class="indexterm" name="id471132"></a>
 The purpose of this chapter is to demonstrate the configuration of the Internet
 Software Consortium (ISC) DNS and DHCP servers to provide dynamic services that are
 compatible with their equivalents in the Microsoft Windows 2000 Server products.
@@ -27,26 +27,26 @@
 This chapter provides no more than a working example of configuration files for both DNS and DHCP servers. The
 examples used match configuration examples used elsewhere in this document.
 </p><p>
-<a class="indexterm" name="id2714725"></a>
-<a class="indexterm" name="id2714732"></a>
-<a class="indexterm" name="id2714738"></a>
+<a class="indexterm" name="id471151"></a>
+<a class="indexterm" name="id471158"></a>
+<a class="indexterm" name="id471164"></a>
 This chapter explicitly does not provide a tutorial, nor does it pretend to be a reference guide on DNS and
 DHCP, as this is well beyond the scope and intent of this document as a whole. Anyone who wants more detailed
 reference materials on DNS or DHCP should visit the ISC Web site at <a class="ulink" href="http://www.isc.org" target="_top"> http://www.isc.org</a>.  Those wanting a written text might also be interested
 in the O'Reilly publications on DNS, see the <a class="ulink" href="http://www.oreilly.com/catalog/dns/index.htm" target="_top">O'Reilly</a> web site, and the <a class="ulink" href="http://www.bind9.net/books-dhcp" target="_top">BIND9.NET</a> web site for details.
 The books are:
-</p><div class="orderedlist"><ol type="1"><li><p>DNS and BIND, By Cricket Liu, Paul Albitz, ISBN: 1-56592-010-4</p></li><li><p>DNS &amp; Bind Cookbook, By Cricket Liu, ISBN: 0-596-00410-9</p></li><li><p>The DHCP Handbook (2nd Edition), By: Ralph Droms, Ted Lemon, ISBN 0-672-32327-3</p></li></ol></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2714801"></a>Example Configuration</h2></div></div></div><p>
-<a class="indexterm" name="id2714809"></a>
-<a class="indexterm" name="id2714816"></a>
+</p><div class="orderedlist"><ol type="1"><li><p>DNS and BIND, By Cricket Liu, Paul Albitz, ISBN: 1-56592-010-4</p></li><li><p>DNS &amp; Bind Cookbook, By Cricket Liu, ISBN: 0-596-00410-9</p></li><li><p>The DHCP Handbook (2nd Edition), By: Ralph Droms, Ted Lemon, ISBN 0-672-32327-3</p></li></ol></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id471220"></a>Example Configuration</h2></div></div></div><p>
+<a class="indexterm" name="id471228"></a>
+<a class="indexterm" name="id471235"></a>
 The DNS is to the Internet what water is to life. Nearly all information resources (host names) are resolved
 to their Internet protocol (IP) addresses through DNS.  Windows networking tried hard to avoid the
-complexities of DNS, but alas, DNS won.  <a class="indexterm" name="id2714827"></a> The alternative to
+complexities of DNS, but alas, DNS won.  <a class="indexterm" name="id471244"></a> The alternative to
 DNS, the Windows Internet Name Service (WINS)  an artifact of NetBIOS networking over the TCP/IP
 protocols  has demonstrated scalability problems as well as a flat, nonhierarchical namespace that
 became unmanageable as the size and complexity of information technology networks grew.
 </p><p>
-<a class="indexterm" name="id2714848"></a>
-<a class="indexterm" name="id2714855"></a>
+<a class="indexterm" name="id471262"></a>
+<a class="indexterm" name="id471268"></a>
 WINS is a Microsoft implementation of the RFC1001/1002 NetBIOS Name Service (NBNS).
 It allows NetBIOS clients (like Microsoft Windows machines) to register an arbitrary
 machine name that the administrator or user has chosen together with the IP
@@ -66,13 +66,13 @@
 </p><p>
 The following configurations demonstrate a simple, insecure dynamic DNS server and
 a simple DHCP server that matches the DNS configuration.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2714892"></a>Dynamic DNS</h3></div></div></div><p>
-	<a class="indexterm" name="id2714900"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id471296"></a>Dynamic DNS</h3></div></div></div><p>
+	<a class="indexterm" name="id471304"></a>
 	The example DNS configuration is for a private network in the IP address
 	space for network 192.168.1.0/24. The private class network address space
 	is set forth in RFC1918.
 	</p><p>
-	<a class="indexterm" name="id2714915"></a>
+	<a class="indexterm" name="id471318"></a>
 	It is assumed that this network will be situated behind a secure firewall.
 	The files that follow work with ISC BIND version 9. BIND is the Berkeley
 	Internet Name Daemon.
@@ -223,8 +223,8 @@
 2                       PTR     marvel.quenya.org.
 </pre><p>
 	</p><p>
-<a class="indexterm" name="id2715078"></a>
-<a class="indexterm" name="id2715085"></a>
+<a class="indexterm" name="id471444"></a>
+<a class="indexterm" name="id471451"></a>
 	The configuration files shown here were copied from a fully working system. All dynamically registered
 	entries have been removed. In addition to these files, BIND version 9 will
 	create for each of the dynamic registration files a file that has a 

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/FastStart.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/FastStart.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/FastStart.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 2. Fast Start: Cure for Impatience</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="introduction.html" title="Part I. General Installation"><link rel="prev" href="install.html" title="Chapter 1. How to Install and Test SAMBA"><link rel="next" href="type.html" title="Part II. Server Configuration Basics"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 2. Fast Start: Cure for Impatience</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="install.html">Prev</a> </td><th width="60%" align="center">Part I. General Installation</th><td width="20%" align="right"> <a accesskey="n" href="type.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="FastStart"></a>Chapter 2. Fast Start: Cure for Impatience</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="FastStart.html#id2575468">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="FastStart.html#id2575492">Description of Example Sites</a></span></dt><dt><span class="sect1"><a href="FastStart.html#id2575572">Worked Examples</a></span></dt><dd><dl><dt><span class="sect2"><a href="FastStart.html#id2575590">Standalone Server</a></span></dt><dt><span class="sect2"><a href="FastStart.html#id2577510">Domain Member Server</a></span></dt><dt><span class="sect2"><a href="FastStart.html#id2578435">Domain Controller</a></span></dt></dl></dd></dl></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 2. Fast Start: Cure for Impatience</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="introduction.html" title="Part I. General Installation"><link rel="prev" href="install.html" title="Chapter 1. How to Install and Test SAMBA"><link rel="next" href="type.html" title="Part II. Server Configuration Basics"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 2. Fast Start: Cure for Impatience</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="install.html">Prev</a> </td><th width="60%" align="center">Part I. General Installation</th><td width="20%" align="right"> <a accesskey="n" href="type.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="FastStart"></a>Chapter 2. Fast Start: Cure for Impatience</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="FastStart.html#id343766">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="FastStart.html#id343784">Description of Example Sites</a></span></dt><dt><span class="sect1"><a href="FastStart.html#id343841">Worked Examples</a></span></dt><dd><dl><dt><span class="sect2"><a href="FastStart.html#id343856">Standalone Server</a></span></dt><dt><span class="sect2"><a href="FastStart.html#id345489">Domain Member Server</a></span></dt><dt><span class="sect2"><a href="FastStart.html#id346287">Domain Controller</a></span></dt></dl></dd></dl></div><p>
 When we first asked for suggestions for inclusion in the Samba HOWTO documentation,
 someone wrote asking for example configurations  and lots of them. That is remarkably
 difficult to do without losing a lot of value that can be derived from presenting
@@ -22,7 +22,7 @@
 equivalent of the driver's guide that explains how to drive the car. If you want complete network
 configuration examples, go to <a class="ulink" href="http://www.samba.org/samba/docs/Samba3-ByExample.pdf" target="_top">Samba-3 by
 Example</a>.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2575468"></a>Features and Benefits</h2></div></div></div><p>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id343766"></a>Features and Benefits</h2></div></div></div><p>
 Samba needs very little configuration to create a basic working system.
 In this chapter we progress from the simple to the complex, for each providing
 all steps and configuration file changes needed to make each work. Please note
@@ -32,7 +32,7 @@
 The examples used here have been obtained from a number of people who made
 requests for example configurations. All identities have been obscured to protect
 the guilty, and any resemblance to unreal nonexistent sites is deliberate.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2575492"></a>Description of Example Sites</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id343784"></a>Description of Example Sites</h2></div></div></div><p>
 In the first set of configuration examples we consider the case of exceptionally simple system requirements.
 There is a real temptation to make something that should require little effort much too complex.
 </p><p>
@@ -53,15 +53,15 @@
 The later example consider more complex systems that will either integrate into existing MS Windows networks
 or replace them entirely. These cover domain member servers as well as Samba domain control (PDC/BDC) and
 finally describes in detail a large distributed network with branch offices in remote locations.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2575572"></a>Worked Examples</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id343841"></a>Worked Examples</h2></div></div></div><p>
 The configuration examples are designed to cover everything necessary to get Samba 
 running. They do not cover basic operating system platform configuration, which is
 clearly beyond the scope of this text.
 </p><p>
 It is also assumed that Samba has been correctly installed, either by way of installation
 of the packages that are provided by the operating system vendor or through other means.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575590"></a>Standalone Server</h3></div></div></div><p>
-	<a class="indexterm" name="id2575598"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343856"></a>Standalone Server</h3></div></div></div><p>
+	<a class="indexterm" name="id343864"></a>
 	A standalone server implies no more than the fact that it is not a domain controller
 	and it does not participate in domain control. It can be a simple, workgroup-like
 	server, or it can be a complex server that is a member of a domain security context.
@@ -69,7 +69,7 @@
 	As the examples are developed, every attempt is made to progress the system toward greater capability, just as
 	one might expect would happen in a real business office as that office grows in size and its needs change.
 	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="anon-ro"></a>Anonymous Read-Only Document Server</h4></div></div></div><p>
-		<a class="indexterm" name="id2575631"></a>
+		<a class="indexterm" name="id343890"></a>
 		The purpose of this type of server is to make available to any user
 		any documents or files that are placed on the shared resource. The
 		shared resource could be a CD-ROM drive, a CD-ROM image, or a file
@@ -82,7 +82,7 @@
 			<span class="emphasis"><em>m0r3pa1n</em></span>  of course, that's just the example we are
 			using; do not use this in a production environment because
 			all readers of this document will know it.
-			</p></li></ul></div><div class="procedure"><a name="id2575678"></a><p class="title"><b>Procedure 2.1. Installation Procedure: Read-Only Server</b></p><div class="example"><a name="anon-example"></a><p class="title"><b>Example 2.1. Anonymous Read-Only Server Configuration</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2575817"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id2575829"></a><em class="parameter"><code>netbios name = HOBBIT</code></em></td></tr><tr><td><a class="indexterm" name="id2575841"></a><em class="parameter"><code>security = share</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[data]</code></em></td></tr><tr><td><a class="indexterm" name="id2575861"></a><em class="parameter"><code>comment = Data</code></em></td></tr><tr><td><a class="indexterm" name="id2575873"></a><em class="parameter"><code>path = /export</code></em></td></tr><tr><td><a class="indexterm" name="id2575884"></a><em class="parameter"><code>read only = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2575896"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr></table></div></div><br class="example-break"><ol type="1"><li><p>
+			</p></li></ul></div><div class="procedure"><a name="id343930"></a><p class="title"><b>Procedure 2.1. Installation Procedure: Read-Only Server</b></p><div class="example"><a name="anon-example"></a><p class="title"><b>Example 2.1. Anonymous Read-Only Server Configuration</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id344049"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id344060"></a><em class="parameter"><code>netbios name = HOBBIT</code></em></td></tr><tr><td><a class="indexterm" name="id344070"></a><em class="parameter"><code>security = share</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[data]</code></em></td></tr><tr><td><a class="indexterm" name="id344089"></a><em class="parameter"><code>comment = Data</code></em></td></tr><tr><td><a class="indexterm" name="id344099"></a><em class="parameter"><code>path = /export</code></em></td></tr><tr><td><a class="indexterm" name="id344110"></a><em class="parameter"><code>read only = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id344120"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr></table></div></div><br class="example-break"><ol type="1"><li><p>
 			Add user to system (with creation of the user's home directory):
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>useradd -c "Jack Baumbach" -m -g users -p m0r3pa1n jackb</code></strong>
@@ -151,8 +151,8 @@
 			</p></li></ol></div><p>
 		The information above (following # Global parameters) provides the complete
 		contents of the <code class="filename">/etc/samba/smb.conf</code> file.
-		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2576046"></a>Anonymous Read-Write Document Server</h4></div></div></div><p>
-		<a class="indexterm" name="id2576054"></a>
+		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id344243"></a>Anonymous Read-Write Document Server</h4></div></div></div><p>
+		<a class="indexterm" name="id344250"></a>
 		We should view this configuration as a progression from the previous example.
 		The difference is that shared access is now forced to the user identity of jackb
 		and to the primary group jackb belongs to. One other refinement we can make is to
@@ -169,8 +169,8 @@
 		instead of to <span class="emphasis"><em>User Unknown</em></span>.
 		</p><p>
 		The complete, modified <code class="filename">smb.conf</code> file is as shown in <a class="link" href="FastStart.html#anon-rw" title="Example 2.2. Modified Anonymous Read-Write smb.conf">&#8220;Modified Anonymous Read-Write smb.conf&#8221;</a>.
-		</p><div class="example"><a name="anon-rw"></a><p class="title"><b>Example 2.2. Modified Anonymous Read-Write smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2576167"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id2576179"></a><em class="parameter"><code>netbios name = HOBBIT</code></em></td></tr><tr><td><a class="indexterm" name="id2576191"></a><em class="parameter"><code>security = SHARE</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[data]</code></em></td></tr><tr><td><a class="indexterm" name="id2576211"></a><em class="parameter"><code>comment = Data</code></em></td></tr><tr><td><a class="indexterm" name="id2576223"></a><em class="parameter"><code>path = /export</code></em></td></tr><tr><td><a class="indexterm" name="id2576235"></a><em class="parameter"><code>force user = jackb</code></em></td></tr><tr><td><a class="indexterm" name="id2576246"></a><em class="parameter"><code>force group = users</code></em></td></tr><tr><td><a class="indexterm" name="id2576258"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2576269"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr></table></div></div><br class="example-break"></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2576283"></a>Anonymous Print Server</h4></div></div></div><p>
-		<a class="indexterm" name="id2576291"></a>
+		</p><div class="example"><a name="anon-rw"></a><p class="title"><b>Example 2.2. Modified Anonymous Read-Write smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id344345"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id344355"></a><em class="parameter"><code>netbios name = HOBBIT</code></em></td></tr><tr><td><a class="indexterm" name="id344366"></a><em class="parameter"><code>security = SHARE</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[data]</code></em></td></tr><tr><td><a class="indexterm" name="id344384"></a><em class="parameter"><code>comment = Data</code></em></td></tr><tr><td><a class="indexterm" name="id344395"></a><em class="parameter"><code>path = /export</code></em></td></tr><tr><td><a class="indexterm" name="id344405"></a><em class="parameter"><code>force user = jackb</code></em></td></tr><tr><td><a class="indexterm" name="id344416"></a><em class="parameter"><code>force group = users</code></em></td></tr><tr><td><a class="indexterm" name="id344426"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id344436"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr></table></div></div><br class="example-break"></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id344449"></a>Anonymous Print Server</h4></div></div></div><p>
+		<a class="indexterm" name="id344456"></a>
 		An anonymous print server serves two purposes:
 		</p><div class="itemizedlist"><ul type="disc"><li><p>
 			It allows printing to all printers from a single location.
@@ -187,7 +187,7 @@
 		In this configuration, it is undesirable to present the Add Printer Wizard, and we do
 		not want to have automatic driver download, so we disable it in the following
 		configuration. <a class="link" href="FastStart.html#anon-print" title="Example 2.3. Anonymous Print Server smb.conf">&#8220;Anonymous Print Server smb.conf&#8221;</a> is the resulting <code class="filename">smb.conf</code> file.
-		</p><div class="example"><a name="anon-print"></a><p class="title"><b>Example 2.3. Anonymous Print Server smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2576374"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id2576386"></a><em class="parameter"><code>netbios name = LUTHIEN</code></em></td></tr><tr><td><a class="indexterm" name="id2576398"></a><em class="parameter"><code>security = share</code></em></td></tr><tr><td><a class="indexterm" name="id2576410"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td><a class="indexterm" name="id2576421"></a><em class="parameter"><code>disable spoolss = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2576433"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id2576445"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2576466"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id2576478"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2576489"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2576501"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2576513"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2576524"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"><p>
+		</p><div class="example"><a name="anon-print"></a><p class="title"><b>Example 2.3. Anonymous Print Server smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id344525"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id344535"></a><em class="parameter"><code>netbios name = LUTHIEN</code></em></td></tr><tr><td><a class="indexterm" name="id344545"></a><em class="parameter"><code>security = share</code></em></td></tr><tr><td><a class="indexterm" name="id344556"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td><a class="indexterm" name="id344566"></a><em class="parameter"><code>disable spoolss = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id344577"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id344587"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id344606"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id344616"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id344627"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id344637"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id344647"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id344658"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"><p>
 		The above configuration is not ideal. It uses no smart features, and it deliberately
 		presents a less than elegant solution. But it is basic, and it does print. Samba makes
 		use of the direct printing application program interface that is provided by CUPS.
@@ -220,14 +220,14 @@
 		The purpose of setting the sticky bit is to prevent who does not own the temporary print file
 		from being able to take control of it with the potential for devious misuse.
 			</p></li></ul></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-		<a class="indexterm" name="id2576640"></a>
-		<a class="indexterm" name="id2576649"></a>
+		<a class="indexterm" name="id344753"></a>
+		<a class="indexterm" name="id344762"></a>
 		On CUPS-enabled systems there is a facility to pass raw data directly to the printer without
 		intermediate processing via CUPS print filters. Where use of this mode of operation is desired,
 		it is necessary to configure a raw printing device. It is also necessary to enable the raw mime
 		handler in the <code class="filename">/etc/mime.conv</code> and <code class="filename">/etc/mime.types</code>
 		files. Refer to <a class="link" href="CUPS-printing.html#cups-raw" title="Explicitly Enable &#8220;raw&#8221; Printing for application/octet-stream">&#8220;Explicitly Enable raw Printing for application/octet-stream&#8221;</a>.
-		</p></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2576682"></a>Secure Read-Write File and Print Server</h4></div></div></div><p>
+		</p></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id344787"></a>Secure Read-Write File and Print Server</h4></div></div></div><p>
 		We progress now from simple systems to a server that is slightly more complex.
 		</p><p>
 		Our new server will require a public data storage area in which only authenticated
@@ -250,8 +250,8 @@
 		it is not necessary to enter it into the configuration file. Note that the guest backend is
 		added to the list of active passdb backends no matter whether it specified directly in Samba configuration
 		file or not.
-		</p><div class="procedure"><a name="id2576759"></a><p class="title"><b>Procedure 2.2. Installing the Secure Office Server</b></p><div class="example"><a name="OfficeServer"></a><p class="title"><b>Example 2.4. Secure Office Server smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2576864"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id2576876"></a><em class="parameter"><code>netbios name = OLORIN</code></em></td></tr><tr><td><a class="indexterm" name="id2576888"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td><a class="indexterm" name="id2576900"></a><em class="parameter"><code>disable spoolss = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2576912"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id2576924"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id2576944"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id2576956"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id2576968"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2576979"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[public]</code></em></td></tr><tr><td><a class="indexterm" name="id2577000"></a><em class="parameter"><code>comment = Data</code></em></td></tr><tr><td><a class="indexterm" name="id2577012"></a><em class="parameter"><code>path = /export</code></em></td></tr><tr><td><a class="indexterm" name="id2577023"></a><em class="parameter"><code>force user = maryo</code></em></td></tr><tr><td><a class="indexterm" name="id2577035"></a><em class="parameter"><code>force group = users</code></em></td></tr><tr><td><a class="indexterm" name="id2577046"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2577067"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id2577079"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2577090"></a><em class="parameter"><code>printer admin = root, maryo</code></em></td></tr><tr><td><a class="indexterm" name="id2577102"></a><em class="parameter"><code>create mask = 0600</code></em></td></tr><tr><td><a class="indexterm" name="id2577114"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2577125"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2577137"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2577149"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"><ol type="1"><li><p>
-		<a class="indexterm" name="id2576771"></a>
+		</p><div class="procedure"><a name="id344842"></a><p class="title"><b>Procedure 2.2. Installing the Secure Office Server</b></p><div class="example"><a name="OfficeServer"></a><p class="title"><b>Example 2.4. Secure Office Server smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id344934"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id344944"></a><em class="parameter"><code>netbios name = OLORIN</code></em></td></tr><tr><td><a class="indexterm" name="id344955"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td><a class="indexterm" name="id344965"></a><em class="parameter"><code>disable spoolss = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id344976"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id344986"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id345005"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id345015"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id345026"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id345036"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[public]</code></em></td></tr><tr><td><a class="indexterm" name="id345055"></a><em class="parameter"><code>comment = Data</code></em></td></tr><tr><td><a class="indexterm" name="id345065"></a><em class="parameter"><code>path = /export</code></em></td></tr><tr><td><a class="indexterm" name="id345076"></a><em class="parameter"><code>force user = maryo</code></em></td></tr><tr><td><a class="indexterm" name="id345086"></a><em class="parameter"><code>force group = users</code></em></td></tr><tr><td><a class="indexterm" name="id345096"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id345115"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id345126"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id345136"></a><em class="parameter"><code>printer admin = root, maryo</code></em></td></tr><tr><td><a class="indexterm" name="id345146"></a><em class="parameter"><code>create mask = 0600</code></em></td></tr><tr><td><a class="indexterm" name="id345157"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id345167"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id345178"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id345188"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"><ol type="1"><li><p>
+		<a class="indexterm" name="id344853"></a>
 			Add all users to the operating system:
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>useradd -c "Jack Baumbach" -m -g users -p m0r3pa1n jackb</code></strong>
@@ -290,10 +290,10 @@
 			</p></li><li><p>
 			Start Samba using the operating system administrative interface.
 			Alternately, this can be done manually by executing:
-			<a class="indexterm" name="id2577286"></a>
-			<a class="indexterm" name="id2577293"></a>
-			<a class="indexterm" name="id2577300"></a>
-			<a class="indexterm" name="id2577309"></a>
+			<a class="indexterm" name="id345305"></a>
+			<a class="indexterm" name="id345311"></a>
+			<a class="indexterm" name="id345317"></a>
+			<a class="indexterm" name="id345326"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code> nmbd; smbd;</code></strong>
 </pre><p>
@@ -358,8 +358,8 @@
 			By now you should be getting the hang of configuration basics. Clearly, it is time to
 			explore slightly more complex examples. For the remainder of this chapter we abbreviate
 			instructions, since there are previous examples.
-			</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577510"></a>Domain Member Server</h3></div></div></div><p>
-	<a class="indexterm" name="id2577518"></a>
+			</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id345489"></a>Domain Member Server</h3></div></div></div><p>
+	<a class="indexterm" name="id345496"></a>
 	In this instance we consider the simplest server configuration we can get away with
 	to make an accounting department happy. Let's be warned, the users are accountants and they
 	do have some nasty demands. There is a budget for only one server for this department.
@@ -390,11 +390,11 @@
 	file area for each member of her team that is private to that person, but she wants full
 	access to all areas. Users must have a private home share for personal work-related files
 	and for materials not related to departmental operations.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2577582"></a>Example Configuration</h4></div></div></div><p>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id345540"></a>Example Configuration</h4></div></div></div><p>
 		The server <span class="emphasis"><em>valinor</em></span> will be a member server of the company domain.
 		Accounting will have only a local server. User accounts will be on the domain controllers,
 		as will desktop profiles and all network policy files.
-		</p><div class="procedure"><div class="example"><a name="fast-member-server"></a><p class="title"><b>Example 2.5. Member Server smb.conf (Globals)</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2577667"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id2577678"></a><em class="parameter"><code>netbios name = VALINOR</code></em></td></tr><tr><td><a class="indexterm" name="id2577690"></a><em class="parameter"><code>security = DOMAIN</code></em></td></tr><tr><td><a class="indexterm" name="id2577702"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td><a class="indexterm" name="id2577714"></a><em class="parameter"><code>disable spoolss = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2577726"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id2577738"></a><em class="parameter"><code>idmap uid = 15000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2577749"></a><em class="parameter"><code>idmap gid = 15000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2577761"></a><em class="parameter"><code>winbind use default domain = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2577773"></a><em class="parameter"><code>printing = cups</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="fast-memberserver-shares"></a><p class="title"><b>Example 2.6. Member Server smb.conf (Shares and Services)</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id2577811"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id2577822"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id2577834"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2577845"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[spytfull]</code></em></td></tr><tr><td><a class="indexterm" name="id2577866"></a><em class="parameter"><code>comment = Accounting Application Only</code></em></td></tr><tr><td><a class="indexterm" name="id2577878"></a><em class="parameter"><code>path = /export/spytfull</code></em></td></tr><tr><td><a class="indexterm" name="id2577889"></a><em class="parameter"><code>valid users = @Accounts</code></em></td></tr><tr><td><a class="indexterm" name="id2577901"></a><em class="parameter"><code>admin users = maryo</code></em></td></tr><tr><td><a class="indexterm" name="id2577913"></a><em class="parameter"><code>read only = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[public]</code></em></td></tr><tr><td><a class="indexterm" name="id2577933"></a><em class="parameter"><code>comment = Data</code></em></td></tr><tr><td><a class="indexterm" name="id2577945"></a><em class="parameter"><code>path = /export/public</code></em></td></tr><tr><td><a class="indexterm" name="id2577957"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2577977"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id2577989"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2578001"></a><em class="parameter"><code>printer admin = root, maryo</code></em></td></tr><tr><td><a class="indexterm" name="id2578012"></a><em class="parameter"><code>create mask = 0600</code></em></td></tr><tr><td><a class="indexterm" name="id2578024"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2578036"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2578047"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2578059"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"><ol type="1"><li><p>
+		</p><div class="procedure"><div class="example"><a name="fast-member-server"></a><p class="title"><b>Example 2.5. Member Server smb.conf (Globals)</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id345609"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id345620"></a><em class="parameter"><code>netbios name = VALINOR</code></em></td></tr><tr><td><a class="indexterm" name="id345630"></a><em class="parameter"><code>security = DOMAIN</code></em></td></tr><tr><td><a class="indexterm" name="id345640"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td><a class="indexterm" name="id345651"></a><em class="parameter"><code>disable spoolss = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id345661"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id345672"></a><em class="parameter"><code>idmap uid = 15000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id345682"></a><em class="parameter"><code>idmap gid = 15000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id345692"></a><em class="parameter"><code>winbind use default domain = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id345703"></a><em class="parameter"><code>printing = cups</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="fast-memberserver-shares"></a><p class="title"><b>Example 2.6. Member Server smb.conf (Shares and Services)</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id345735"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id345746"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id345756"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id345766"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[spytfull]</code></em></td></tr><tr><td><a class="indexterm" name="id345785"></a><em class="parameter"><code>comment = Accounting Application Only</code></em></td></tr><tr><td><a class="indexterm" name="id345796"></a><em class="parameter"><code>path = /export/spytfull</code></em></td></tr><tr><td><a class="indexterm" name="id345806"></a><em class="parameter"><code>valid users = @Accounts</code></em></td></tr><tr><td><a class="indexterm" name="id345816"></a><em class="parameter"><code>admin users = maryo</code></em></td></tr><tr><td><a class="indexterm" name="id345827"></a><em class="parameter"><code>read only = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[public]</code></em></td></tr><tr><td><a class="indexterm" name="id345846"></a><em class="parameter"><code>comment = Data</code></em></td></tr><tr><td><a class="indexterm" name="id345856"></a><em class="parameter"><code>path = /export/public</code></em></td></tr><tr><td><a class="indexterm" name="id345866"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id345885"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id345896"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id345906"></a><em class="parameter"><code>printer admin = root, maryo</code></em></td></tr><tr><td><a class="indexterm" name="id345916"></a><em class="parameter"><code>create mask = 0600</code></em></td></tr><tr><td><a class="indexterm" name="id345927"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id345937"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id345948"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id345958"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"><ol type="1"><li><p>
 			Do not add users to the UNIX/Linux server; all of this will run off the
 			central domain.
 			</p></li><li><p>
@@ -402,7 +402,7 @@
 			(globals)</a> and <a class="link" href="FastStart.html#fast-memberserver-shares" title="Example 2.6. Member Server smb.conf (Shares and Services)">Member server smb.conf (shares
 			and services)</a>.
 			</p></li><li><p>
-			<a class="indexterm" name="id2578077"></a>
+			<a class="indexterm" name="id345975"></a>
 			Join the domain. Note: Do not start Samba until this step has been completed!
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>net rpc join -Uroot%'bigsecret'</code></strong>
@@ -414,12 +414,12 @@
 			</p></li><li><p>
 			Start Samba following the normal method for your operating system platform.
 			If you wish to do this manually, execute as root:
-			<a class="indexterm" name="id2578134"></a>
-			<a class="indexterm" name="id2578141"></a>
-			<a class="indexterm" name="id2578148"></a>
-			<a class="indexterm" name="id2578155"></a>
-			<a class="indexterm" name="id2578164"></a>
-			<a class="indexterm" name="id2578174"></a>
+			<a class="indexterm" name="id346023"></a>
+			<a class="indexterm" name="id346030"></a>
+			<a class="indexterm" name="id346036"></a>
+			<a class="indexterm" name="id346042"></a>
+			<a class="indexterm" name="id346051"></a>
+			<a class="indexterm" name="id346059"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>nmbd; smbd; winbindd;</code></strong>
 </pre><p>
@@ -480,8 +480,8 @@
 <code class="prompt">root# </code><strong class="userinput"><code>chmod ug=rwxS,o=x /export/{spytfull,public}</code></strong>
 <code class="prompt">root# </code><strong class="userinput"><code>chown maryo.Accounts /export/{spytfull,public}</code></strong>
 </pre><p>
-			</p></li></ol></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2578435"></a>Domain Controller</h3></div></div></div><p>
-	<a class="indexterm" name="id2578442"></a>
+			</p></li></ol></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id346287"></a>Domain Controller</h3></div></div></div><p>
+	<a class="indexterm" name="id346295"></a>
 	For the remainder of this chapter the focus is on the configuration of domain control.
 	The examples that follow are for two implementation strategies. Remember, our objective is
 	to create a simple but working solution. The remainder of this book should help to highlight
@@ -515,17 +515,17 @@
 	in Samba-3 for Security Account Manager database [SAM] replication).
 	</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
 	If you need more than one domain controller, do not use a tdbsam authentication backend.
-	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2578515"></a>Example: Engineering Office</h4></div></div></div><p>
+	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id346350"></a>Example: Engineering Office</h4></div></div></div><p>
 		The engineering office network server we present here is designed to demonstrate use
 		of the new tdbsam password backend. The tdbsam
 		facility is new to Samba-3. It is designed to provide many user and machine account controls
 		that are possible with Microsoft Windows NT4. It is safe to use this in smaller networks.
-		</p><div class="procedure"><div class="example"><a name="fast-engoffice-global"></a><p class="title"><b>Example 2.7. Engineering Office smb.conf (globals)</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2523772"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id2523783"></a><em class="parameter"><code>netbios name = FRODO</code></em></td></tr><tr><td><a class="indexterm" name="id2523795"></a><em class="parameter"><code>passdb backend = tdbsam</code></em></td></tr><tr><td><a class="indexterm" name="id2523807"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td><a class="indexterm" name="id2523819"></a><em class="parameter"><code>add user script = /usr/sbin/useradd -m %u</code></em></td></tr><tr><td><a class="indexterm" name="id2523831"></a><em class="parameter"><code>delete user script = /usr/sbin/userdel -r %u</code></em></td></tr><tr><td><a class="indexterm" name="id2523843"></a><em class="parameter"><code>add group script = /usr/sbin/groupadd %g</code></em></td></tr><tr><td><a class="indexterm" name="id2578811"></a><em class="parameter"><code>delete group script = /usr/sbin/groupdel %g</code></em></td></tr><tr><td><a class="indexterm" name="id2578823"></a><em class="parameter"><code>add user to group script = /usr/sbin/groupmod -A %u %g</code></em></td></tr><tr><td><a class="indexterm" name="id2578836"></a><em class="parameter"><code>delete user from group script = /usr/sbin/groupmod -R %u %g</code></em></td></tr><tr><td><a class="indexterm" name="id2578848"></a><em class="parameter"><code>add machine script = /usr/sbin/useradd -s /bin/false -d /var/lib/nobody %u</code></em></td></tr><tr><td># Note: The following specifies the default logon script.</td></tr><tr><td># Per user logon scripts can be specified in the user account using pdbedit </td></tr><tr><td><a class="indexterm" name="id2578870"></a><em class="parameter"><code>logon script = scripts\logon.bat</code></em></td></tr><tr><td># This sets the default profile path. Set per user paths with pdbedit</td></tr><tr><td><a class="indexterm" name="id2578886"></a><em class="parameter"><code>logon path = \\%L\Profiles\%U</code></em></td></tr><tr><td><a class="indexterm" name="id2578898"></a><em class="parameter"><code>logon drive = H:</code></em></td></tr><tr><td><a class="indexterm" name="id2578910"></a><em class="parameter"><code>logon home = \\%L\%U</code></em></td></tr><tr><td><a class="indexterm" name="id2578922"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2578933"></a><em class="parameter"><code>os level = 35</code></em></td></tr><tr><td><a class="indexterm" name="id2578945"></a><em class="parameter"><code>preferred master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2578957"></a><em class="parameter"><code>domain master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2578968"></a><em class="parameter"><code>idmap uid = 15000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2578980"></a><em class="parameter"><code>idmap gid = 15000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2578992"></a><em class="parameter"><code>printing = cups</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="fast-engoffice-shares"></a><p class="title"><b>Example 2.8. Engineering Office smb.conf (shares and services)</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id2579030"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id2579041"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id2579053"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2579064"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td># Printing auto-share (makes printers available thru CUPS)</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2579089"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id2579101"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2579113"></a><em class="parameter"><code>printer admin = root, maryo</code></em></td></tr><tr><td><a class="indexterm" name="id2579124"></a><em class="parameter"><code>create mask = 0600</code></em></td></tr><tr><td><a class="indexterm" name="id2579136"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2579148"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2579159"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[print$]</code></em></td></tr><tr><td><a class="indexterm" name="id2579180"></a><em class="parameter"><code>comment = Printer Drivers Share</code></em></td></tr><tr><td><a class="indexterm" name="id2579192"></a><em class="parameter"><code>path = /var/lib/samba/drivers</code></em></td></tr><tr><td><a class="indexterm" name="id2579204"></a><em class="parameter"><code>write list = maryo, root</code></em></td></tr><tr><td><a class="indexterm" name="id2579215"></a><em class="parameter"><code>printer admin = maryo, root</code></em></td></tr><tr><td># Needed to support domain logons</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id2579240"></a><em class="parameter"><code>comment = Network Logon Service</code></em></td></tr><tr><td><a class="indexterm" name="id2579252"></a><em class="parameter"><code>path = /var/lib/samba/netlogon</code></em></td></tr><tr><td><a class="indexterm" name="id2579264"></a><em class="parameter"><code>admin users = root, maryo</code></em></td></tr><tr><td><a class="indexterm" name="id2579275"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2579287"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td># For profiles to work, create a user directory under the path</td></tr><tr><td>#  shown. i.e., mkdir -p /var/lib/samba/profiles/maryo</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[Profiles]</code></em></td></tr><tr><td><a class="indexterm" name="id2579316"></a><em class="parameter"><code>comment = Roaming Profile Share</code></em></td></tr><tr><td><a class="indexterm" name="id2579328"></a><em class="parameter"><code>path = /var/lib/samba/profiles</code></em></td></tr><tr><td><a class="indexterm" name="id2579340"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2579352"></a><em class="parameter"><code>profile acls = Yes</code></em></td></tr><tr><td># Other resource (share/printer) definitions would follow below.</td></tr></table></div></div><br class="example-break"><ol type="1"><li><p>
+		</p><div class="procedure"><div class="example"><a name="fast-engoffice-global"></a><p class="title"><b>Example 2.7. Engineering Office smb.conf (globals)</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id297704"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id297716"></a><em class="parameter"><code>netbios name = FRODO</code></em></td></tr><tr><td><a class="indexterm" name="id346505"></a><em class="parameter"><code>passdb backend = tdbsam</code></em></td></tr><tr><td><a class="indexterm" name="id346516"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td><a class="indexterm" name="id346526"></a><em class="parameter"><code>add user script = /usr/sbin/useradd -m %u</code></em></td></tr><tr><td><a class="indexterm" name="id346536"></a><em class="parameter"><code>delete user script = /usr/sbin/userdel -r %u</code></em></td></tr><tr><td><a class="indexterm" name="id346547"></a><em class="parameter"><code>add group script = /usr/sbin/groupadd %g</code></em></td></tr><tr><td><a class="indexterm" name="id346557"></a><em class="parameter"><code>delete group script = /usr/sbin/groupdel %g</code></em></td></tr><tr><td><a class="indexterm" name="id346568"></a><em class="parameter"><code>add user to group script = /usr/sbin/groupmod -A %u %g</code></em></td></tr><tr><td><a class="indexterm" name="id346578"></a><em class="parameter"><code>delete user from group script = /usr/sbin/groupmod -R %u %g</code></em></td></tr><tr><td><a class="indexterm" name="id346589"></a><em class="parameter"><code>add machine script = /usr/sbin/useradd -s /bin/false -d /var/lib/nobody %u</code></em></td></tr><tr><td># Note: The following specifies the default logon script.</td></tr><tr><td># Per user logon scripts can be specified in the user account using pdbedit </td></tr><tr><td><a class="indexterm" name="id346608"></a><em class="parameter"><code>logon script = scripts\logon.bat</code></em></td></tr><tr><td># This sets the default profile path. Set per user paths with pdbedit</td></tr><tr><td><a class="indexterm" name="id346622"></a><em class="parameter"><code>logon path = \\%L\Profiles\%U</code></em></td></tr><tr><td><a class="indexterm" name="id346633"></a><em class="parameter"><code>logon drive = H:</code></em></td></tr><tr><td><a class="indexterm" name="id346643"></a><em class="parameter"><code>logon home = \\%L\%U</code></em></td></tr><tr><td><a class="indexterm" name="id346654"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id346664"></a><em class="parameter"><code>os level = 35</code></em></td></tr><tr><td><a class="indexterm" name="id346674"></a><em class="parameter"><code>preferred master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id346685"></a><em class="parameter"><code>domain master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id346695"></a><em class="parameter"><code>idmap uid = 15000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id346706"></a><em class="parameter"><code>idmap gid = 15000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id346716"></a><em class="parameter"><code>printing = cups</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="fast-engoffice-shares"></a><p class="title"><b>Example 2.8. Engineering Office smb.conf (shares and services)</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id346748"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id346759"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id346769"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id346780"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td># Printing auto-share (makes printers available thru CUPS)</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id346802"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id346813"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id346823"></a><em class="parameter"><code>printer admin = root, maryo</code></em></td></tr><tr><td><a class="indexterm" name="id346833"></a><em class="parameter"><code>create mask = 0600</code></em></td></tr><tr><td><a class="indexterm" name="id346844"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id346854"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id346865"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[print$]</code></em></td></tr><tr><td><a class="indexterm" name="id346883"></a><em class="parameter"><code>comment = Printer Drivers Share</code></em></td></tr><tr><td><a class="indexterm" name="id346894"></a><em class="parameter"><code>path = /var/lib/samba/drivers</code></em></td></tr><tr><td><a class="indexterm" name="id346904"></a><em class="parameter"><code>write list = maryo, root</code></em></td></tr><tr><td><a class="indexterm" name="id346915"></a><em class="parameter"><code>printer admin = maryo, root</code></em></td></tr><tr><td># Needed to support domain logons</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id346937"></a><em class="parameter"><code>comment = Network Logon Service</code></em></td></tr><tr><td><a class="indexterm" name="id346947"></a><em class="parameter"><code>path = /var/lib/samba/netlogon</code></em></td></tr><tr><td><a class="indexterm" name="id346957"></a><em class="parameter"><code>admin users = root, maryo</code></em></td></tr><tr><td><a class="indexterm" name="id346968"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id346978"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td># For profiles to work, create a user directory under the path</td></tr><tr><td>#  shown. i.e., mkdir -p /var/lib/samba/profiles/maryo</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[Profiles]</code></em></td></tr><tr><td><a class="indexterm" name="id347004"></a><em class="parameter"><code>comment = Roaming Profile Share</code></em></td></tr><tr><td><a class="indexterm" name="id347014"></a><em class="parameter"><code>path = /var/lib/samba/profiles</code></em></td></tr><tr><td><a class="indexterm" name="id347025"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id347035"></a><em class="parameter"><code>profile acls = Yes</code></em></td></tr><tr><td># Other resource (share/printer) definitions would follow below.</td></tr></table></div></div><br class="example-break"><ol type="1"><li><p>
 			A working PDC configuration using the tdbsam
 			password backend can be found in <a class="link" href="FastStart.html#fast-engoffice-global" title="Example 2.7. Engineering Office smb.conf (globals)">Engineering Office smb.conf
 			(globals)</a> together with <a class="link" href="FastStart.html#fast-engoffice-shares" title="Example 2.8. Engineering Office smb.conf (shares and services)">Engineering Office smb.conf
 			(shares and services)</a>:
-			<a class="indexterm" name="id2523740"></a>
+			<a class="indexterm" name="id297674"></a>
 			</p></li><li><p>
 			Create UNIX group accounts as needed using a suitable operating system tool:
 </p><pre class="screen">
@@ -541,8 +541,8 @@
 			on files, directories, printers, and as required for use in the Samba
 			environment.
 			</p></li><li><p>
-			<a class="indexterm" name="id2579442"></a>
-			<a class="indexterm" name="id2579451"></a>
+			<a class="indexterm" name="id347114"></a>
+			<a class="indexterm" name="id347123"></a>
 			Assign each of the UNIX groups to NT groups by executing this shell script
 			(You could name the script <code class="filename">initGroups.sh</code>):
 </p><pre class="screen">
@@ -570,13 +570,13 @@
 			</p></li></ol></div><p>
 		The above configuration provides a functional PDC
 		system to which must be added file shares and printers as required.
-		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2579536"></a>A Big Organization</h4></div></div></div><p>
+		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id347189"></a>A Big Organization</h4></div></div></div><p>
 		In this section we finally get to review in brief a Samba-3 configuration that
 		uses a Lightweight Directory Access (LDAP)-based authentication backend. The
 		main reasons for this choice are to provide the ability to host primary
 		and Backup Domain Control (BDC), as well as to enable a higher degree of
 		scalability to meet the needs of a very distributed environment.
-		</p><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id2579551"></a>The Primary Domain Controller</h5></div></div></div><p>
+		</p><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id347201"></a>The Primary Domain Controller</h5></div></div></div><p>
 			This is an example of a minimal configuration to run a Samba-3 PDC
 			using an LDAP authentication backend. It is assumed that the operating system
 			has been correctly configured.
@@ -587,13 +587,13 @@
 			distributions tend to install the Idealx scripts in the 
 			<code class="filename">/usr/share/doc/packages/sambaXXXXXX/examples/LDAP/smbldap-tools</code> directory.
 			Idealx scripts version <code class="constant">smbldap-tools-0.9.1</code> are known to work well.
-			</p><div class="procedure"><div class="example"><a name="fast-ldap"></a><p class="title"><b>Example 2.9. LDAP backend smb.conf for PDC</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2579796"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id2579808"></a><em class="parameter"><code>netbios name = FRODO</code></em></td></tr><tr><td><a class="indexterm" name="id2579820"></a><em class="parameter"><code>passdb backend = ldapsam:ldap://localhost</code></em></td></tr><tr><td><a class="indexterm" name="id2579832"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id2579844"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td><a class="indexterm" name="id2579856"></a><em class="parameter"><code>add user script = /usr/local/sbin/smbldap-useradd -m '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2579868"></a><em class="parameter"><code>delete user script = /usr/local/sbin/smbldap-userdel %u</code></em></td></tr><tr><td><a class="indexterm" name="id2579880"></a><em class="parameter"><code>add group script = /usr/local/sbin/smbldap-groupadd -p '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id2579893"></a><em class="parameter"><code>delete group script = /usr/local/sbin/smbldap-groupdel '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id2579905"></a><em class="parameter"><code>add user to group script = /usr/local/sbin/smbldap-groupmod -m '%u' '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id2579918"></a><em class="parameter"><code>delete user from group script = /usr/local/sbin/smbldap-groupmod -x '%u' '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id2579931"></a><em class="parameter"><code>set primary group script = /usr/local/sbin/smbldap-usermod -g '%g' '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2579944"></a><em class="parameter"><code>add machine script = /usr/local/sbin/smbldap-useradd -w '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2579956"></a><em class="parameter"><code>logon script = scripts\logon.bat</code></em></td></tr><tr><td><a class="indexterm" name="id2579968"></a><em class="parameter"><code>logon path = \\%L\Profiles\%U</code></em></td></tr><tr><td><a class="indexterm" name="id2579980"></a><em class="parameter"><code>logon drive = H:</code></em></td></tr><tr><td><a class="indexterm" name="id2579992"></a><em class="parameter"><code>logon home = \\%L\%U</code></em></td></tr><tr><td><a class="indexterm" name="id2580004"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2580015"></a><em class="parameter"><code>os level = 35</code></em></td></tr><tr><td><a class="indexterm" name="id2580027"></a><em class="parameter"><code>preferred master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2580039"></a><em class="parameter"><code>domain master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2580051"></a><em class="parameter"><code>ldap suffix = dc=quenya,dc=org</code></em></td></tr><tr><td><a class="indexterm" name="id2580062"></a><em class="parameter"><code>ldap machine suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2580074"></a><em class="parameter"><code>ldap user suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2580086"></a><em class="parameter"><code>ldap group suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2580098"></a><em class="parameter"><code>ldap idmap suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2580110"></a><em class="parameter"><code>ldap admin dn = cn=Manager</code></em></td></tr><tr><td><a class="indexterm" name="id2580122"></a><em class="parameter"><code>ldap ssl = no</code></em></td></tr><tr><td><a class="indexterm" name="id2580134"></a><em class="parameter"><code>ldap passwd sync = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2580146"></a><em class="parameter"><code>idmap uid = 15000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2580158"></a><em class="parameter"><code>idmap gid = 15000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2580169"></a><em class="parameter"><code>printing = cups</code></em></td></tr></table></div></div><br class="example-break"><ol type="1"><li><p>
+			</p><div class="procedure"><div class="example"><a name="fast-ldap"></a><p class="title"><b>Example 2.9. LDAP backend smb.conf for PDC</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id347397"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id347408"></a><em class="parameter"><code>netbios name = FRODO</code></em></td></tr><tr><td><a class="indexterm" name="id347418"></a><em class="parameter"><code>passdb backend = ldapsam:ldap://localhost</code></em></td></tr><tr><td><a class="indexterm" name="id347428"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id347439"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td><a class="indexterm" name="id347449"></a><em class="parameter"><code>add user script = /usr/local/sbin/smbldap-useradd -m '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id347460"></a><em class="parameter"><code>delete user script = /usr/local/sbin/smbldap-userdel %u</code></em></td></tr><tr><td><a class="indexterm" name="id347471"></a><em class="parameter"><code>add group script = /usr/local/sbin/smbldap-groupadd -p '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id347482"></a><em class="parameter"><code>delete group script = /usr/local/sbin/smbldap-groupdel '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id347493"></a><em class="parameter"><code>add user to group script = /usr/local/sbin/smbldap-groupmod -m '%u' '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id347504"></a><em class="parameter"><code>delete user from group script = /usr/local/sbin/smbldap-groupmod -x '%u' '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id347515"></a><em class="parameter"><code>set primary group script = /usr/local/sbin/smbldap-usermod -g '%g' '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id347526"></a><em class="parameter"><code>add machine script = /usr/local/sbin/smbldap-useradd -w '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id347537"></a><em class="parameter"><code>logon script = scripts\logon.bat</code></em></td></tr><tr><td><a class="indexterm" name="id347548"></a><em class="parameter"><code>logon path = \\%L\Profiles\%U</code></em></td></tr><tr><td><a class="indexterm" name="id347558"></a><em class="parameter"><code>logon drive = H:</code></em></td></tr><tr><td><a class="indexterm" name="id347569"></a><em class="parameter"><code>logon home = \\%L\%U</code></em></td></tr><tr><td><a class="indexterm" name="id347579"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id347589"></a><em class="parameter"><code>os level = 35</code></em></td></tr><tr><td><a class="indexterm" name="id347600"></a><em class="parameter"><code>preferred master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id347610"></a><em class="parameter"><code>domain master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id347621"></a><em class="parameter"><code>ldap suffix = dc=quenya,dc=org</code></em></td></tr><tr><td><a class="indexterm" name="id347631"></a><em class="parameter"><code>ldap machine suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id347641"></a><em class="parameter"><code>ldap user suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id347652"></a><em class="parameter"><code>ldap group suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id347662"></a><em class="parameter"><code>ldap idmap suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id347673"></a><em class="parameter"><code>ldap admin dn = cn=Manager</code></em></td></tr><tr><td><a class="indexterm" name="id347683"></a><em class="parameter"><code>ldap ssl = no</code></em></td></tr><tr><td><a class="indexterm" name="id347693"></a><em class="parameter"><code>ldap passwd sync = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id347704"></a><em class="parameter"><code>idmap uid = 15000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id347714"></a><em class="parameter"><code>idmap gid = 15000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id347725"></a><em class="parameter"><code>printing = cups</code></em></td></tr></table></div></div><br class="example-break"><ol type="1"><li><p>
 				Obtain from the Samba sources <code class="filename">~/examples/LDAP/samba.schema</code>
 				and copy it to the <code class="filename">/etc/openldap/schema/</code> directory.
 				</p></li><li><p>
 				Set up the LDAP server. This example is suitable for OpenLDAP 2.1.x.
 				The <code class="filename">/etc/openldap/slapd.conf</code> file.
-				<a class="indexterm" name="id2579625"></a>
+				<a class="indexterm" name="id347262"></a>
 <span style="color: red">&lt;title&gt;Example slapd.conf File&lt;/title&gt;</span>
 </p><pre class="screen">
 # Note commented out lines have been removed
@@ -629,7 +629,7 @@
 </pre><p>
 				</p></li><li><p>
 				Create the following file <code class="filename">initdb.ldif</code>:
-				<a class="indexterm" name="id2579672"></a>
+				<a class="indexterm" name="id347296"></a>
 </p><pre class="programlisting">
 # Organization for SambaXP Demo
 dn: dc=quenya,dc=org
@@ -684,11 +684,11 @@
 				Add users and groups as required. Users and groups added using Samba tools
 				will automatically be added to both the LDAP backend and the operating
 				system as required.
-				</p></li></ol></div></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id2580224"></a>Backup Domain Controller</h5></div></div></div><p>
+				</p></li></ol></div></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id347772"></a>Backup Domain Controller</h5></div></div></div><p>
 			<a class="link" href="FastStart.html#fast-bdc" title="Example 2.10. Remote LDAP BDC smb.conf">&#8220;Remote LDAP BDC smb.conf&#8221;</a> shows the example configuration for the BDC. Note that
 			the <code class="filename">smb.conf</code> file does not specify the smbldap-tools scripts  they are
 			not needed on a BDC. Add additional stanzas for shares and printers as required.
-			</p><div class="procedure"><div class="example"><a name="fast-bdc"></a><p class="title"><b>Example 2.10. Remote LDAP BDC smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2580303"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id2580315"></a><em class="parameter"><code>netbios name = GANDALF</code></em></td></tr><tr><td><a class="indexterm" name="id2580327"></a><em class="parameter"><code>passdb backend = ldapsam:ldap://frodo.quenya.org</code></em></td></tr><tr><td><a class="indexterm" name="id2580339"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id2580351"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td><a class="indexterm" name="id2580363"></a><em class="parameter"><code>logon script = scripts\logon.bat</code></em></td></tr><tr><td><a class="indexterm" name="id2580375"></a><em class="parameter"><code>logon path = \\%L\Profiles\%U</code></em></td></tr><tr><td><a class="indexterm" name="id2580387"></a><em class="parameter"><code>logon drive = H:</code></em></td></tr><tr><td><a class="indexterm" name="id2580398"></a><em class="parameter"><code>logon home = \\%L\%U</code></em></td></tr><tr><td><a class="indexterm" name="id2580410"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2580422"></a><em class="parameter"><code>os level = 33</code></em></td></tr><tr><td><a class="indexterm" name="id2580434"></a><em class="parameter"><code>preferred master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2580445"></a><em class="parameter"><code>domain master = No</code></em></td></tr><tr><td><a class="indexterm" name="id2580457"></a><em class="parameter"><code>ldap suffix = dc=quenya,dc=org</code></em></td></tr><tr><td><a class="indexterm" name="id2580469"></a><em class="parameter"><code>ldap machine suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2580481"></a><em class="parameter"><code>ldap user suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2580493"></a><em class="parameter"><code>ldap group suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2580505"></a><em class="parameter"><code>ldap idmap suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2580517"></a><em class="parameter"><code>ldap admin dn = cn=Manager</code></em></td></tr><tr><td><a class="indexterm" name="id2580529"></a><em class="parameter"><code>ldap ssl = no</code></em></td></tr><tr><td><a class="indexterm" name="id2580540"></a><em class="parameter"><code>ldap passwd sync = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2580552"></a><em class="parameter"><code>idmap uid = 15000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2580564"></a><em class="parameter"><code>idmap gid = 15000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2580576"></a><em class="parameter"><code>printing = cups</code></em></td></tr></table></div></div><br class="example-break"><ol type="1"><li><p>
+			</p><div class="procedure"><div class="example"><a name="fast-bdc"></a><p class="title"><b>Example 2.10. Remote LDAP BDC smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id347838"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id347848"></a><em class="parameter"><code>netbios name = GANDALF</code></em></td></tr><tr><td><a class="indexterm" name="id347859"></a><em class="parameter"><code>passdb backend = ldapsam:ldap://frodo.quenya.org</code></em></td></tr><tr><td><a class="indexterm" name="id347869"></a><em class="parameter"><code>username map = /etc/samba/smbusers</code></em></td></tr><tr><td><a class="indexterm" name="id347879"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td><a class="indexterm" name="id347890"></a><em class="parameter"><code>logon script = scripts\logon.bat</code></em></td></tr><tr><td><a class="indexterm" name="id347900"></a><em class="parameter"><code>logon path = \\%L\Profiles\%U</code></em></td></tr><tr><td><a class="indexterm" name="id347911"></a><em class="parameter"><code>logon drive = H:</code></em></td></tr><tr><td><a class="indexterm" name="id347921"></a><em class="parameter"><code>logon home = \\%L\%U</code></em></td></tr><tr><td><a class="indexterm" name="id347931"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id347942"></a><em class="parameter"><code>os level = 33</code></em></td></tr><tr><td><a class="indexterm" name="id347952"></a><em class="parameter"><code>preferred master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id347963"></a><em class="parameter"><code>domain master = No</code></em></td></tr><tr><td><a class="indexterm" name="id347973"></a><em class="parameter"><code>ldap suffix = dc=quenya,dc=org</code></em></td></tr><tr><td><a class="indexterm" name="id347983"></a><em class="parameter"><code>ldap machine suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id347994"></a><em class="parameter"><code>ldap user suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id348004"></a><em class="parameter"><code>ldap group suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id348015"></a><em class="parameter"><code>ldap idmap suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id348025"></a><em class="parameter"><code>ldap admin dn = cn=Manager</code></em></td></tr><tr><td><a class="indexterm" name="id348035"></a><em class="parameter"><code>ldap ssl = no</code></em></td></tr><tr><td><a class="indexterm" name="id348046"></a><em class="parameter"><code>ldap passwd sync = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id348056"></a><em class="parameter"><code>idmap uid = 15000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id348067"></a><em class="parameter"><code>idmap gid = 15000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id348077"></a><em class="parameter"><code>printing = cups</code></em></td></tr></table></div></div><br class="example-break"><ol type="1"><li><p>
 				Decide if the BDC should have its own LDAP server or not. If the BDC is to be
 				the LDAP server, change the following <code class="filename">smb.conf</code> as indicated. The default
 				configuration in <a class="link" href="FastStart.html#fast-bdc" title="Example 2.10. Remote LDAP BDC smb.conf">Remote LDAP BDC smb.conf</a>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/InterdomainTrusts.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/InterdomainTrusts.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/InterdomainTrusts.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,13 +1,13 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 19. Interdomain Trust Relationships</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="securing-samba.html" title="Chapter 18. Securing Samba"><link rel="next" href="msdfs.html" title="Chapter 20. Hosting a Microsoft Distributed File System Tree"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 19. Interdomain Trust Relationships</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="securing-samba.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="msdfs.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="InterdomainTrusts"></a>Chapter 19. Interdomain Trust Relationships</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Rafal</span> <span class="surname">Szczesniak</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:mimir at samba.org">mimir at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><span class="contrib">drawing</span> <div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Stephen</span> <span class="surname">Langasek</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:vorlon at netexpress.net">vorlon at netexpress.net</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">April 3, 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="InterdomainTrusts.html#id2641780">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a></span></dt><dt><span class="sect1"><a href="InterdomainTrusts.html#id2642130">Native MS Windows NT4 Trusts Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="InterdomainTrusts.html#id2642166">Creating an NT4 Domain Trust</a></span></dt><dt><span class="sect2"><a href="InterdomainTrusts.html#id2642263">Completing an NT4 Domain Trust</a></span></dt><dt><span class="sect2"><a href="InterdomainTrusts.html#id2642348">Interdomain Trust Facilities</a></span></dt></dl></dd><dt><span class="sect1"><a href="InterdomainTrusts.html#id2642557">Configuring Samba NT-Style Domain Trusts</a></span></dt><dd><dl><dt><span class="sect2"><a href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></span></dt><dt><span class="sect2"><a href="InterdomainTrusts.html#id2642897">Samba as the Trusting Domain</a></span></dt></dl></dd><dt><span class="sect1"><a href="InterdomainTrusts.html#id2643094">NT4-Style Domain Trusts with Windows 2000</a></span></dt><dt><span class="sect1"><a href="InterdomainTrusts.html#id2643243">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="InterdomainTrusts.html#id2643256">Browsing of Trusted Domain Fails</a></span></dt><dt><span class="sect2"><a href="InterdomainTrusts.html#id2643311">Problems with LDAP ldapsam and Older Versions of smbldap-tools</a></span></dt></dl></dd></dl></div><p>
-<a class="indexterm" name="id2641560"></a>
-<a class="indexterm" name="id2641567"></a>
-<a class="indexterm" name="id2641574"></a>
-<a class="indexterm" name="id2641581"></a>
-<a class="indexterm" name="id2641588"></a>
-<a class="indexterm" name="id2641595"></a>
-<a class="indexterm" name="id2641602"></a>
-<a class="indexterm" name="id2641609"></a>
-<a class="indexterm" name="id2641615"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 19. Interdomain Trust Relationships</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="securing-samba.html" title="Chapter 18. Securing Samba"><link rel="next" href="msdfs.html" title="Chapter 20. Hosting a Microsoft Distributed File System Tree"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 19. Interdomain Trust Relationships</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="securing-samba.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="msdfs.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="InterdomainTrusts"></a>Chapter 19. Interdomain Trust Relationships</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Rafal</span> <span class="surname">Szczesniak</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:mimir at samba.org">mimir at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><span class="contrib">drawing</span> <div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Stephen</span> <span class="surname">Langasek</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:vorlon at netexpress.net">vorlon at netexpress.net</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">April 3, 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="InterdomainTrusts.html#id404270">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="InterdomainTrusts.html#id404336">Trust Relationship Background</a></span></dt><dt><span class="sect1"><a href="InterdomainTrusts.html#id404590">Native MS Windows NT4 Trusts Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="InterdomainTrusts.html#id404624">Creating an NT4 Domain Trust</a></span></dt><dt><span class="sect2"><a href="InterdomainTrusts.html#id404714">Completing an NT4 Domain Trust</a></span></dt><dt><span class="sect2"><a href="InterdomainTrusts.html#id404795">Interdomain Trust Facilities</a></span></dt></dl></dd><dt><span class="sect1"><a href="InterdomainTrusts.html#id404991">Configuring Samba NT-Style Domain Trusts</a></span></dt><dd><dl><dt><span class="sect2"><a href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></span></dt><dt><span class="sect2"><a href="InterdomainTrusts.html#id405306">Samba as the Trusting Domain</a></span></dt></dl></dd><dt><span class="sect1"><a href="InterdomainTrusts.html#id405489">NT4-Style Domain Trusts with Windows 2000</a></span></dt><dt><span class="sect1"><a href="InterdomainTrusts.html#id405625">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="InterdomainTrusts.html#id405636">Browsing of Trusted Domain Fails</a></span></dt><dt><span class="sect2"><a href="InterdomainTrusts.html#id405678">Problems with LDAP ldapsam and Older Versions of smbldap-tools</a></span></dt></dl></dd></dl></div><p>
+<a class="indexterm" name="id404062"></a>
+<a class="indexterm" name="id404069"></a>
+<a class="indexterm" name="id404076"></a>
+<a class="indexterm" name="id404083"></a>
+<a class="indexterm" name="id404089"></a>
+<a class="indexterm" name="id404096"></a>
+<a class="indexterm" name="id404103"></a>
+<a class="indexterm" name="id404110"></a>
+<a class="indexterm" name="id404116"></a>
 Samba-3 supports NT4-style domain trust relationships. This is a feature that many sites
 will want to use if they migrate to Samba-3 from an NT4-style domain and do not want to
 adopt Active Directory or an LDAP-based authentication backend. This chapter explains
@@ -15,78 +15,78 @@
 possible for Samba-3 to trust NT4 (and vice versa), as well as to create Samba-to-Samba 
 trusts.
 </p><p>
-<a class="indexterm" name="id2641633"></a>
-<a class="indexterm" name="id2641640"></a>
-<a class="indexterm" name="id2641646"></a>
-<a class="indexterm" name="id2641653"></a>
-<a class="indexterm" name="id2641660"></a>
+<a class="indexterm" name="id404130"></a>
+<a class="indexterm" name="id404137"></a>
+<a class="indexterm" name="id404144"></a>
+<a class="indexterm" name="id404151"></a>
+<a class="indexterm" name="id404157"></a>
 The use of interdomain trusts requires use of <code class="literal">winbind</code>, so the
 <code class="literal">winbindd</code> daemon must be running. Winbind operation in this mode is
 dependent on the specification of a valid UID range and a valid GID range in the <code class="filename">smb.conf</code> file.
 These are specified respectively using:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2641694"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2641706"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr></table><p>
-<a class="indexterm" name="id2641718"></a>
-<a class="indexterm" name="id2641725"></a>
-<a class="indexterm" name="id2641732"></a>
-<a class="indexterm" name="id2641738"></a>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id404190"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id404201"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr></table><p>
+<a class="indexterm" name="id404212"></a>
+<a class="indexterm" name="id404219"></a>
+<a class="indexterm" name="id404226"></a>
+<a class="indexterm" name="id404233"></a>
 The range of values specified must not overlap values used by the host operating system and must
 not overlap values used in the passdb backend for POSIX user accounts. The maximum value is
 limited by the upper-most value permitted by the host operating system. This is a UNIX kernel
 limited parameter. Linux kernel 2.6-based systems support a maximum value of 4294967295 
 (32-bit unsigned variable).
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2641756"></a>
-<a class="indexterm" name="id2641763"></a>
-<a class="indexterm" name="id2641770"></a>
+<a class="indexterm" name="id404247"></a>
+<a class="indexterm" name="id404254"></a>
+<a class="indexterm" name="id404261"></a>
 The use of winbind is necessary only when Samba is the trusting domain, not when it is the
 trusted domain.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2641780"></a>Features and Benefits</h2></div></div></div><p>
-<a class="indexterm" name="id2641788"></a>
-<a class="indexterm" name="id2641795"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id404270"></a>Features and Benefits</h2></div></div></div><p>
+<a class="indexterm" name="id404278"></a>
+<a class="indexterm" name="id404284"></a>
 Samba-3 can participate in Samba-to-Samba as well as in Samba-to-MS Windows NT4-style
 trust relationships. This imparts to Samba scalability similar to that with MS Windows NT4.
 </p><p>
-<a class="indexterm" name="id2641808"></a>
-<a class="indexterm" name="id2641815"></a>
-<a class="indexterm" name="id2641822"></a>
-<a class="indexterm" name="id2641829"></a>
-<a class="indexterm" name="id2641836"></a>
+<a class="indexterm" name="id404296"></a>
+<a class="indexterm" name="id404303"></a>
+<a class="indexterm" name="id404310"></a>
+<a class="indexterm" name="id404316"></a>
+<a class="indexterm" name="id404323"></a>
 Given that Samba-3 can function with a scalable backend authentication database such as LDAP, and given its
 ability to run in primary as well as backup domain control modes, the administrator would be well-advised to
 consider alternatives to the use of interdomain trusts simply because, by the very nature of how trusts
 function, this system is fragile.  That was, after all, a key reason for the development and adoption of
 Microsoft Active Directory.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2641852"></a>Trust Relationship Background</h2></div></div></div><p>
-<a class="indexterm" name="id2641860"></a>
-<a class="indexterm" name="id2641867"></a>
-<a class="indexterm" name="id2641874"></a>
-<a class="indexterm" name="id2641881"></a>
-<a class="indexterm" name="id2641888"></a>
-<a class="indexterm" name="id2641895"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id404336"></a>Trust Relationship Background</h2></div></div></div><p>
+<a class="indexterm" name="id404344"></a>
+<a class="indexterm" name="id404350"></a>
+<a class="indexterm" name="id404357"></a>
+<a class="indexterm" name="id404364"></a>
+<a class="indexterm" name="id404371"></a>
+<a class="indexterm" name="id404378"></a>
 MS Windows NT3/4-type security domains employ a nonhierarchical security structure.
 The limitations of this architecture as it effects the scalability of MS Windows networking
 in large organizations is well known. Additionally, the flat namespace that results from
 this design significantly impacts the delegation of administrative responsibilities in
 large and diverse organizations.
 </p><p>
-<a class="indexterm" name="id2641912"></a>
-<a class="indexterm" name="id2641918"></a>
-<a class="indexterm" name="id2641925"></a>
-<a class="indexterm" name="id2641932"></a>
-<a class="indexterm" name="id2641939"></a>
+<a class="indexterm" name="id404391"></a>
+<a class="indexterm" name="id404398"></a>
+<a class="indexterm" name="id404404"></a>
+<a class="indexterm" name="id404411"></a>
+<a class="indexterm" name="id404418"></a>
 Microsoft developed Active Directory Service (ADS), based on Kerberos and LDAP, as a means
 of circumventing the limitations of the older technologies. Not every organization is ready
 or willing to embrace ADS. For small companies the older NT4-style domain security paradigm
 is quite adequate, and so there remains an entrenched user base for whom there is no direct
 desire to go through a disruptive change to adopt ADS.
 </p><p>
-<a class="indexterm" name="id2641956"></a>
-<a class="indexterm" name="id2641963"></a>
-<a class="indexterm" name="id2641970"></a>
-<a class="indexterm" name="id2641977"></a>
-<a class="indexterm" name="id2641984"></a>
-<a class="indexterm" name="id2641990"></a>
-<a class="indexterm" name="id2641997"></a>
+<a class="indexterm" name="id404432"></a>
+<a class="indexterm" name="id404438"></a>
+<a class="indexterm" name="id404445"></a>
+<a class="indexterm" name="id404452"></a>
+<a class="indexterm" name="id404459"></a>
+<a class="indexterm" name="id404466"></a>
+<a class="indexterm" name="id404472"></a>
 With Windows NT, Microsoft introduced the ability to allow different security domains
 to effect a mechanism so users from one domain may be given access rights and privileges
 in another domain. The language that describes this capability is couched in terms of
@@ -97,41 +97,41 @@
 so if users in both domains are to have privileges and rights in each others' domain, then it is
 necessary to establish two relationships, one in each direction.
 </p><p>
-<a class="indexterm" name="id2642027"></a>
-<a class="indexterm" name="id2642034"></a>
-<a class="indexterm" name="id2642041"></a>
-<a class="indexterm" name="id2642048"></a>
-<a class="indexterm" name="id2642055"></a>
+<a class="indexterm" name="id404496"></a>
+<a class="indexterm" name="id404503"></a>
+<a class="indexterm" name="id404510"></a>
+<a class="indexterm" name="id404516"></a>
+<a class="indexterm" name="id404523"></a>
 Further, in an NT4-style MS security domain, all trusts are nontransitive. This means that if there are three
 domains (let's call them red, white, and blue), where red and white have a trust relationship, and white and
 blue have a trust relationship, then it holds that there is no implied trust between the red and blue domains.
 Relationships are explicit and not transitive.
 </p><p>
-<a class="indexterm" name="id2642072"></a>
-<a class="indexterm" name="id2642078"></a>
-<a class="indexterm" name="id2642085"></a>
-<a class="indexterm" name="id2642092"></a>
-<a class="indexterm" name="id2642099"></a>
-<a class="indexterm" name="id2642106"></a>
-<a class="indexterm" name="id2642113"></a>
+<a class="indexterm" name="id404536"></a>
+<a class="indexterm" name="id404543"></a>
+<a class="indexterm" name="id404550"></a>
+<a class="indexterm" name="id404557"></a>
+<a class="indexterm" name="id404563"></a>
+<a class="indexterm" name="id404570"></a>
+<a class="indexterm" name="id404577"></a>
 New to MS Windows 2000 ADS security contexts is the fact that trust relationships are two-way by default.
 Also, all inter-ADS domain trusts are transitive. In the case of the red, white, and blue domains, with
 Windows 2000 and ADS, the red and blue domains can trust each other. This is an inherent feature of ADS
 domains. Samba-3 implements MS Windows NT4-style interdomain trusts and interoperates with MS Windows 200x ADS
 security domains in similar manner to MS Windows NT4-style domains.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2642130"></a>Native MS Windows NT4 Trusts Configuration</h2></div></div></div><p>
-<a class="indexterm" name="id2642138"></a>
-<a class="indexterm" name="id2642147"></a>
-<a class="indexterm" name="id2642154"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id404590"></a>Native MS Windows NT4 Trusts Configuration</h2></div></div></div><p>
+<a class="indexterm" name="id404598"></a>
+<a class="indexterm" name="id404607"></a>
+<a class="indexterm" name="id404614"></a>
 There are two steps to creating an interdomain trust relationship. To effect a two-way trust
 relationship, it is necessary for each domain administrator to create a trust account for the 
 other domain to use in verifying security credentials.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2642166"></a>Creating an NT4 Domain Trust</h3></div></div></div><p>
-<a class="indexterm" name="id2642174"></a>
-<a class="indexterm" name="id2642181"></a>
-<a class="indexterm" name="id2642188"></a>
-<a class="indexterm" name="id2642196"></a>
-<a class="indexterm" name="id2642203"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id404624"></a>Creating an NT4 Domain Trust</h3></div></div></div><p>
+<a class="indexterm" name="id404632"></a>
+<a class="indexterm" name="id404639"></a>
+<a class="indexterm" name="id404646"></a>
+<a class="indexterm" name="id404653"></a>
+<a class="indexterm" name="id404660"></a>
 For MS Windows NT4, all domain trust relationships are configured using the 
 <span class="application">Domain User Manager</span>. This is done from the Domain User Manager Policies
 entry on the menu bar. From the <span class="guimenu">Policy</span> menu, select
@@ -142,26 +142,26 @@
 your domain. You will also need to enter a password for this trust relationship, which the 
 trusting domain will use when authenticating users from the trusted domain.
 The password needs to be typed twice (for standard confirmation).
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2642263"></a>Completing an NT4 Domain Trust</h3></div></div></div><p>
-<a class="indexterm" name="id2642271"></a>
-<a class="indexterm" name="id2642278"></a>
-<a class="indexterm" name="id2642285"></a>
-<a class="indexterm" name="id2642292"></a>
-<a class="indexterm" name="id2642299"></a>
-<a class="indexterm" name="id2642306"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id404714"></a>Completing an NT4 Domain Trust</h3></div></div></div><p>
+<a class="indexterm" name="id404722"></a>
+<a class="indexterm" name="id404729"></a>
+<a class="indexterm" name="id404736"></a>
+<a class="indexterm" name="id404743"></a>
+<a class="indexterm" name="id404750"></a>
+<a class="indexterm" name="id404756"></a>
 A trust relationship will work only when the other (trusting) domain makes the appropriate connections
 with the trusted domain. To consummate the trust relationship, the administrator launches the
 Domain User Manager from the menu selects <span class="guilabel">Policies</span>, then select
 <span class="guilabel">Trust Relationships</span>, and clicks on the <span class="guibutton">Add</span> button
 next to the box that is labeled <span class="guilabel">Trusted Domains</span>. A panel opens in which
 must be entered the name of the remote domain as well as the password assigned to that trust.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2642348"></a>Interdomain Trust Facilities</h3></div></div></div><p>
-<a class="indexterm" name="id2642357"></a>
-<a class="indexterm" name="id2642364"></a>
-<a class="indexterm" name="id2642370"></a>
-<a class="indexterm" name="id2642377"></a>
-<a class="indexterm" name="id2642384"></a>
-<a class="indexterm" name="id2642391"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id404795"></a>Interdomain Trust Facilities</h3></div></div></div><p>
+<a class="indexterm" name="id404802"></a>
+<a class="indexterm" name="id404809"></a>
+<a class="indexterm" name="id404816"></a>
+<a class="indexterm" name="id404823"></a>
+<a class="indexterm" name="id404830"></a>
+<a class="indexterm" name="id404836"></a>
 A two-way trust relationship is created when two one-way trusts are created, one in each direction.
 Where a one-way trust has been established between two MS Windows NT4 domains (let's call them
 DomA and DomB), the following facilities are created:
@@ -201,26 +201,26 @@
 	</p></li><li><p>
 	Global groups from the trusted domain can be made members in local groups on
 	MS Windows domain member machines.
-	</p></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2642557"></a>Configuring Samba NT-Style Domain Trusts</h2></div></div></div><p>
-<a class="indexterm" name="id2642565"></a>
+	</p></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id404991"></a>Configuring Samba NT-Style Domain Trusts</h2></div></div></div><p>
+<a class="indexterm" name="id404999"></a>
 This description is meant to be a fairly short introduction about how to set up a Samba server so
 that it can participate in interdomain trust relationships. Trust relationship support in Samba
 is at an early stage, so do not be surprised if something does not function as it should.
 </p><p>
-<a class="indexterm" name="id2642580"></a>
-<a class="indexterm" name="id2642587"></a>
-<a class="indexterm" name="id2642594"></a>
-<a class="indexterm" name="id2642601"></a>
+<a class="indexterm" name="id405011"></a>
+<a class="indexterm" name="id405018"></a>
+<a class="indexterm" name="id405025"></a>
+<a class="indexterm" name="id405032"></a>
 Each of the procedures described next assumes the peer domain in the trust relationship is controlled by a
 Windows NT4 server. However, the remote end could just as well be another Samba-3  domain. It can be clearly
 seen, after reading this document, that combining Samba-specific parts of what's written in the following
 sections leads to trust between domains in a purely Samba environment.
 </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="samba-trusted-domain"></a>Samba as the Trusted Domain</h3></div></div></div><p>
-<a class="indexterm" name="id2642628"></a>
-<a class="indexterm" name="id2642635"></a>
-<a class="indexterm" name="id2642642"></a>
-<a class="indexterm" name="id2642649"></a>
-<a class="indexterm" name="id2642656"></a>
+<a class="indexterm" name="id405054"></a>
+<a class="indexterm" name="id405061"></a>
+<a class="indexterm" name="id405068"></a>
+<a class="indexterm" name="id405075"></a>
+<a class="indexterm" name="id405081"></a>
 In order to set the Samba PDC to be the trusted party of the relationship, you first need
 to create a special account for the domain that will be the trusting party. To do that,
 you can use the <code class="literal">smbpasswd</code> utility. Creating the trusted domain account is 
@@ -239,19 +239,19 @@
 passdb database and <code class="option">-i</code> means to &#8220;<span class="quote">create this
 account with the Interdomain trust flag</span>&#8221;.
 </p><p>
-<a class="indexterm" name="id2642724"></a>
-<a class="indexterm" name="id2642731"></a>
-<a class="indexterm" name="id2642738"></a>
-<a class="indexterm" name="id2642745"></a>
+<a class="indexterm" name="id405144"></a>
+<a class="indexterm" name="id405151"></a>
+<a class="indexterm" name="id405158"></a>
+<a class="indexterm" name="id405165"></a>
 The account name will be &#8220;<span class="quote">rumba$</span>&#8221; (the name of the remote domain).
 If this fails, you should check that the trust account has been added to the system
 password database (<code class="filename">/etc/passwd</code>). If it has not been added, you
 can add it manually and then repeat the previous step.
 </p><p>
-<a class="indexterm" name="id2642769"></a>
-<a class="indexterm" name="id2642776"></a>
-<a class="indexterm" name="id2642783"></a>
-<a class="indexterm" name="id2642790"></a>
+<a class="indexterm" name="id405187"></a>
+<a class="indexterm" name="id405194"></a>
+<a class="indexterm" name="id405200"></a>
+<a class="indexterm" name="id405207"></a>
 After issuing this command, you will be asked to enter the password for the account. You can use any password
 you want, but be aware that Windows NT will not change this password until 7 days following account creation.
 After the command returns successfully, you can look at the entry for the new account (in the standard way as
@@ -259,47 +259,47 @@
 &#8220;<span class="quote">I</span>&#8221; flag set in the flags field. Now you are ready to confirm the trust by establishing it from
 Windows NT Server.
 </p><p>
-<a class="indexterm" name="id2642812"></a>
-<a class="indexterm" name="id2642819"></a>
-<a class="indexterm" name="id2642826"></a>
-<a class="indexterm" name="id2642833"></a>
-<a class="indexterm" name="id2642840"></a>
+<a class="indexterm" name="id405225"></a>
+<a class="indexterm" name="id405232"></a>
+<a class="indexterm" name="id405239"></a>
+<a class="indexterm" name="id405246"></a>
+<a class="indexterm" name="id405252"></a>
 Open <span class="application">User Manager for Domains</span> and from the <span class="guimenu">Policies</span> menu, select
 <span class="guimenuitem">Trust Relationships...</span>.  Beside the <span class="guilabel">Trusted domains</span> list box,
 click the <span class="guimenu">Add...</span> button. You will be prompted for the trusted domain name and the
 relationship password. Type in SAMBA, as this is the name of the remote domain and the password used at the
 time of account creation.  Click on <span class="guibutton">OK</span> and, if everything went without incident, you
 will see the <code class="computeroutput">Trusted domain relationship successfully established</code> message.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2642897"></a>Samba as the Trusting Domain</h3></div></div></div><p>
-<a class="indexterm" name="id2642906"></a>
-<a class="indexterm" name="id2642913"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id405306"></a>Samba as the Trusting Domain</h3></div></div></div><p>
+<a class="indexterm" name="id405314"></a>
+<a class="indexterm" name="id405320"></a>
 This time activities are somewhat reversed. Again, we'll assume that your domain
 controlled by the Samba PDC is called SAMBA and the NT-controlled domain is called RUMBA.
 </p><p>
 The very first step is to add an account for the SAMBA domain on RUMBA's PDC.
 </p><p>
-<a class="indexterm" name="id2642930"></a>
-<a class="indexterm" name="id2642937"></a>
-<a class="indexterm" name="id2642944"></a>
+<a class="indexterm" name="id405336"></a>
+<a class="indexterm" name="id405342"></a>
+<a class="indexterm" name="id405349"></a>
 Launch the <span class="application">Domain User Manager</span>, then from the menu select
 <span class="guimenu">Policies</span>, <span class="guimenuitem">Trust Relationships</span>.
 Now, next to the <span class="guilabel">Trusting Domains</span> box, press the <span class="guibutton">Add</span>
 button and type in the name of the trusted domain (SAMBA) and the password to use in securing
 the relationship.
 </p><p>
-<a class="indexterm" name="id2642987"></a>
-<a class="indexterm" name="id2642993"></a>
+<a class="indexterm" name="id405390"></a>
+<a class="indexterm" name="id405397"></a>
 The password can be arbitrarily chosen. It is easy to change the password from the Samba server whenever you
 want. After you confirm the password, your account is ready for use. Now its Samba's turn.
 </p><p>
 Using your favorite shell while logged in as root, issue this command:
-<a class="indexterm" name="id2643008"></a>
+<a class="indexterm" name="id405409"></a>
 </p><p>
 <code class="prompt">root# </code><strong class="userinput"><code>net rpc trustdom establish rumba</code></strong>
 </p><p>
-<a class="indexterm" name="id2643037"></a>
-<a class="indexterm" name="id2643044"></a>
-<a class="indexterm" name="id2643051"></a>
+<a class="indexterm" name="id405437"></a>
+<a class="indexterm" name="id405444"></a>
+<a class="indexterm" name="id405451"></a>
 You will be prompted for the password you just typed on your Windows NT4 Server box.
 An error message, <code class="literal">"NT_STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT,"</code>
 that may be reported periodically is of no concern and may safely be ignored.
@@ -311,20 +311,20 @@
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
 You have to run this command as root because you must have write access to
 the <code class="filename">secrets.tdb</code> file.
-</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2643094"></a>NT4-Style Domain Trusts with Windows 2000</h2></div></div></div><p>
-<a class="indexterm" name="id2643102"></a>
-<a class="indexterm" name="id2643109"></a>
-<a class="indexterm" name="id2643116"></a>
-<a class="indexterm" name="id2643123"></a>
+</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id405489"></a>NT4-Style Domain Trusts with Windows 2000</h2></div></div></div><p>
+<a class="indexterm" name="id405497"></a>
+<a class="indexterm" name="id405503"></a>
+<a class="indexterm" name="id405510"></a>
+<a class="indexterm" name="id405517"></a>
 Although <span class="application">Domain User Manager</span> is not present in Windows 2000, it is 
 also possible to establish an NT4-style trust relationship with a Windows 2000 domain 
 controller running in mixed mode as the trusting server. It should also be possible for 
 Samba to trust a Windows 2000 server; however, more testing is still needed in this area.
 </p><p>
-<a class="indexterm" name="id2643144"></a>
-<a class="indexterm" name="id2643151"></a>
-<a class="indexterm" name="id2643158"></a>
-<a class="indexterm" name="id2643165"></a>
+<a class="indexterm" name="id405536"></a>
+<a class="indexterm" name="id405542"></a>
+<a class="indexterm" name="id405549"></a>
+<a class="indexterm" name="id405556"></a>
 After <a class="link" href="InterdomainTrusts.html#samba-trusted-domain" title="Samba as the Trusted Domain">creating the interdomain trust account on the Samba server</a>
 as described previously, open <span class="application">Active Directory Domains and Trusts</span> on the AD
 controller of the domain whose resources you wish Samba users to have access to. Remember that since NT4-style
@@ -338,11 +338,11 @@
 password. Press <span class="emphasis"><em>OK</em></span> and after a moment, Active Directory will respond with
 <code class="computeroutput">The trusted domain has been added and the trust has been verified.</code> Your
 Samba users can now be granted access to resources in the AD domain.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2643243"></a>Common Errors</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id405625"></a>Common Errors</h2></div></div></div><p>
 Interdomain trust relationships should not be attempted on networks that are unstable
 or that suffer regular outages. Network stability and integrity are key concerns with
 distributed trusted domains.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2643256"></a>Browsing of Trusted Domain Fails</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id405636"></a>Browsing of Trusted Domain Fails</h3></div></div></div><p>
 <span class="emphasis"><em>Browsing from a machine in a trusted Windows 200x domain to a Windows 200x member of
 a trusting Samba domain, I get the following error:</em></span>
 </p><pre class="screen">
@@ -360,7 +360,7 @@
 domain), the computer tries to automatically disable the computer account in 
 the domain.  If you are running as an account that has privileges to do this 
 when you unjoin the machine, it is done; otherwise it is not done.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2643311"></a>Problems with LDAP ldapsam and Older Versions of smbldap-tools</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id405678"></a>Problems with LDAP ldapsam and Older Versions of smbldap-tools</h3></div></div></div><p>
 If you use the <code class="literal">smbldap-useradd</code> script to create a trust
 account to set up interdomain trusts, the process of setting up the trust will
 fail. The account that was created in the LDAP database will have an account

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/IntroSMB.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/IntroSMB.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/IntroSMB.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Introduction</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="TOSHpreface.html" title="Preface"><link rel="next" href="introduction.html" title="Part I. General Installation"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Introduction</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="TOSHpreface.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="introduction.html">Next</a></td></tr></table><hr></div><div class="preface" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="IntroSMB"></a>Introduction</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">June 29, 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="IntroSMB.html#id2572666">What Is Samba?</a></span></dt><dt><span class="sect1"><a href="IntroSMB.html#id2572723">Why This Book?</a></span></dt><dt><span class="sect1"><a href="IntroSMB.html#id2572826">Book Structure and Layout</a></span></dt></dl></div><p>&#8220;<span class="quote">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Introduction</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="TOSHpreface.html" title="Preface"><link rel="next" href="introduction.html" title="Part I. General Installation"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Introduction</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="TOSHpreface.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="introduction.html">Next</a></td></tr></table><hr></div><div class="preface" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="IntroSMB"></a>Introduction</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">June 29, 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="IntroSMB.html#id341386">What Is Samba?</a></span></dt><dt><span class="sect1"><a href="IntroSMB.html#id341429">Why This Book?</a></span></dt><dt><span class="sect1"><a href="IntroSMB.html#id341504">Book Structure and Layout</a></span></dt></dl></div><p>&#8220;<span class="quote">
 A man's gift makes room for him before great men. Gifts are like hooks that can catch
 hold of the mind taking it beyond the reach of forces that otherwise might constrain it.
 </span>&#8221; --- Anon.
@@ -15,7 +15,7 @@
 Microsoft certified specialist, this book should meet your needs rather well.
 If you are a UNIX or Linux administrator, there is no need to feel badly  you
 should have no difficulty finding answers to your current concerns also.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2572666"></a>What Is Samba?</h2></div></div></div><p>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id341386"></a>What Is Samba?</h2></div></div></div><p>
 	Samba is a big, complex project. The Samba project is ambitious and exciting.
 	The team behind Samba is a group of some thirty individuals who are spread
 	the world over and come from an interesting range of backgrounds. This team
@@ -45,7 +45,7 @@
 	be done. User feedback drives Samba development. Samba-3 in particular incorporates
 	a huge amount of work done as a result of user requests, suggestions and direct
 	code contributions.
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2572723"></a>Why This Book?</h2></div></div></div><p>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id341429"></a>Why This Book?</h2></div></div></div><p>
 	There is admittedly a large number of Samba books on the market today and
 	each book has its place. Despite the apparent plethora of books, Samba
 	as a project continues to receive much criticism for failing to provide
@@ -97,7 +97,7 @@
 	are very different from that of the UNIX administrator. This book has been
 	arranged and the information presented from the perspective of someone with previous
 	Microsoft Windows network administrative training and experience.
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2572826"></a>Book Structure and Layout</h2></div></div></div><p>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id341504"></a>Book Structure and Layout</h2></div></div></div><p>
 	This book is presented in six parts:
 	</p><div class="variablelist"><dl><dt><span class="term">General Installation</span></dt><dd><p>
 			Designed to help you get Samba-3 running quickly.

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/NT4Migration.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/NT4Migration.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/NT4Migration.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,37 +1,37 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 36. Migration from NT4 PDC to Samba-3 PDC</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="migration.html" title="Part IV. Migration and Updating"><link rel="prev" href="upgrading-to-3.0.html" title="Chapter 35. Updating and Upgrading Samba"><link rel="next" href="SWAT.html" title="Chapter 37. SWAT: The Samba Web Administration Tool"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 36. Migration from NT4 PDC to Samba-3 PDC</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="upgrading-to-3.0.html">Prev</a> </td><th width="60%" align="center">Part IV. Migration and Updating</th><td width="20%" align="right"> <a accesskey="n" href="SWAT.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="NT4Migration"></a>Chapter 36. Migration from NT4 PDC to Samba-3 PDC</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">April 3, 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="NT4Migration.html#id2701377">Planning and Getting Started</a></span></dt><dd><dl><dt><span class="sect2"><a href="NT4Migration.html#id2701411">Objectives</a></span></dt><dt><span class="sect2"><a href="NT4Migration.html#id2702346">Steps in Migration Process</a></span></dt></dl></dd><dt><span class="sect1"><a href="NT4Migration.html#id2702581">Migration Options</a></span></dt><dd><dl><dt><span class="sect2"><a href="NT4Migration.html#id2702668">Planning for Success</a></span></dt><dt><span class="sect2"><a href="NT4Migration.html#id2702901">Samba-3 Implementation Choices</a></span></dt></dl></dd></dl></div><p>
-<a class="indexterm" name="id2701360"></a>
-<a class="indexterm" name="id2701367"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 36. Migration from NT4 PDC to Samba-3 PDC</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="migration.html" title="Part IV. Migration and Updating"><link rel="prev" href="upgrading-to-3.0.html" title="Chapter 35. Updating and Upgrading Samba"><link rel="next" href="SWAT.html" title="Chapter 37. SWAT: The Samba Web Administration Tool"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 36. Migration from NT4 PDC to Samba-3 PDC</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="upgrading-to-3.0.html">Prev</a> </td><th width="60%" align="center">Part IV. Migration and Updating</th><td width="20%" align="right"> <a accesskey="n" href="SWAT.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="NT4Migration"></a>Chapter 36. Migration from NT4 PDC to Samba-3 PDC</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">April 3, 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="NT4Migration.html#id458833">Planning and Getting Started</a></span></dt><dd><dl><dt><span class="sect2"><a href="NT4Migration.html#id458863">Objectives</a></span></dt><dt><span class="sect2"><a href="NT4Migration.html#id459730">Steps in Migration Process</a></span></dt></dl></dd><dt><span class="sect1"><a href="NT4Migration.html#id459954">Migration Options</a></span></dt><dd><dl><dt><span class="sect2"><a href="NT4Migration.html#id460036">Planning for Success</a></span></dt><dt><span class="sect2"><a href="NT4Migration.html#id460257">Samba-3 Implementation Choices</a></span></dt></dl></dd></dl></div><p>
+<a class="indexterm" name="id458818"></a>
+<a class="indexterm" name="id458824"></a>
 This is a rough guide to assist those wishing to migrate from NT4 domain control to
 Samba-3-based domain control.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2701377"></a>Planning and Getting Started</h2></div></div></div><p>
-<a class="indexterm" name="id2701385"></a>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id458833"></a>Planning and Getting Started</h2></div></div></div><p>
+<a class="indexterm" name="id458841"></a>
 In the IT world there is often a saying that all problems are encountered because of
 poor planning. The corollary to this saying is that not all problems can be anticipated
 and planned for. Then again, good planning will anticipate most show-stopper-type situations.
 </p><p>
-<a class="indexterm" name="id2701400"></a>
+<a class="indexterm" name="id458854"></a>
 Those wishing to migrate from MS Windows NT4 domain control to a Samba-3 domain control
 environment would do well to develop a detailed migration plan. So here are a few pointers to
 help migration get underway.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2701411"></a>Objectives</h3></div></div></div><p>
-<a class="indexterm" name="id2701419"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id458863"></a>Objectives</h3></div></div></div><p>
+<a class="indexterm" name="id458871"></a>
 The key objective for most organizations is to make the migration from MS Windows NT4 
 to Samba-3 domain control as painless as possible. One of the challenges you may experience
 in your migration process may well be convincing management that the new environment
 should remain in place. Many who have introduced open source technologies have experienced
 pressure to return to a Microsoft-based platform solution at the first sign of trouble. 
 </p><p>
-<a class="indexterm" name="id2701437"></a>
+<a class="indexterm" name="id458885"></a>
 Before attempting a migration to a Samba-3-controlled network, make every possible effort to
 gain all-round commitment to the change. Know precisely <span class="emphasis"><em>why</em></span> the change
 is important for the organization. Possible motivations to make a change include:
-</p><a class="indexterm" name="id2701453"></a><a class="indexterm" name="id2701460"></a><a class="indexterm" name="id2701467"></a><a class="indexterm" name="id2701474"></a><a class="indexterm" name="id2701480"></a><div class="itemizedlist"><ul type="disc"><li><p>Improve network manageability.</p></li><li><p>Obtain better user-level functionality.</p></li><li><p>Reduce network operating costs.</p></li><li><p>Reduce exposure caused by Microsoft withdrawal of NT4 support.</p></li><li><p>Avoid MS License 6 implications.</p></li><li><p>Reduce organization's dependency on Microsoft.</p></li></ul></div><p>
-<a class="indexterm" name="id2701523"></a>
-<a class="indexterm" name="id2701530"></a>
-<a class="indexterm" name="id2701537"></a>
-<a class="indexterm" name="id2701544"></a>
-<a class="indexterm" name="id2701551"></a>
-<a class="indexterm" name="id2701557"></a>
+</p><a class="indexterm" name="id458899"></a><a class="indexterm" name="id458905"></a><a class="indexterm" name="id458912"></a><a class="indexterm" name="id458919"></a><a class="indexterm" name="id458926"></a><div class="itemizedlist"><ul type="disc"><li><p>Improve network manageability.</p></li><li><p>Obtain better user-level functionality.</p></li><li><p>Reduce network operating costs.</p></li><li><p>Reduce exposure caused by Microsoft withdrawal of NT4 support.</p></li><li><p>Avoid MS License 6 implications.</p></li><li><p>Reduce organization's dependency on Microsoft.</p></li></ul></div><p>
+<a class="indexterm" name="id458966"></a>
+<a class="indexterm" name="id458973"></a>
+<a class="indexterm" name="id458980"></a>
+<a class="indexterm" name="id458987"></a>
+<a class="indexterm" name="id458994"></a>
+<a class="indexterm" name="id459000"></a>
 Make sure everyone knows that Samba-3 is not MS Windows NT4. Samba-3 offers
 an alternative solution that is both different from MS Windows NT4 and offers 
 advantages compared with it. Gain recognition that Samba-3 lacks many of the
@@ -39,32 +39,32 @@
 MS Windows 2000 and beyond (with or without Active Directory services).
 </p><p>
 What are the features that Samba-3 cannot provide?
-</p><a class="indexterm" name="id2701576"></a><a class="indexterm" name="id2701583"></a><a class="indexterm" name="id2701590"></a><a class="indexterm" name="id2701597"></a><a class="indexterm" name="id2701604"></a><div class="itemizedlist"><ul type="disc"><li><p>Active Directory Server.</p></li><li><p>Group Policy Objects (in Active Directory).</p></li><li><p>Machine Policy Objects.</p></li><li><p>Logon Scripts in Active Directory.</p></li><li><p>Software Application and Access Controls in Active Directory.</p></li></ul></div><p>
+</p><a class="indexterm" name="id459015"></a><a class="indexterm" name="id459022"></a><a class="indexterm" name="id459029"></a><a class="indexterm" name="id459036"></a><a class="indexterm" name="id459042"></a><div class="itemizedlist"><ul type="disc"><li><p>Active Directory Server.</p></li><li><p>Group Policy Objects (in Active Directory).</p></li><li><p>Machine Policy Objects.</p></li><li><p>Logon Scripts in Active Directory.</p></li><li><p>Software Application and Access Controls in Active Directory.</p></li></ul></div><p>
 The features that Samba-3 does provide and that may be of compelling interest to your site
 include:
-</p><a class="indexterm" name="id2701644"></a><a class="indexterm" name="id2701651"></a><a class="indexterm" name="id2701658"></a><a class="indexterm" name="id2701665"></a><a class="indexterm" name="id2701672"></a><a class="indexterm" name="id2701679"></a><a class="indexterm" name="id2701686"></a><a class="indexterm" name="id2701693"></a><a class="indexterm" name="id2701700"></a><a class="indexterm" name="id2701707"></a><a class="indexterm" name="id2701714"></a><a class="indexterm" name="id2701721"></a><a class="indexterm" name="id2701727"></a><a class="indexterm" name="id2701734"></a><a class="indexterm" name="id2701741"></a><div class="itemizedlist"><ul type="disc"><li><p>Lower cost of ownership.</p></li><li><p>Global availability of support with no strings attached.</p></li><li><p>Dynamic SMB servers (can run more than one SMB/CIFS server per UNIX/Linux system).</p></li><li><p>Creation of on-the-fly logon scripts.</p></li><li><p>Creation of on-the-fly policy files.</p></li><li><p>Greater stability, reliability, performance, and availability.</p></li><li><p>Manageability via an SSH connection.</p></li><li><p>Flexible choices of backend authentication technologies (tdbsam, ldapsam).</p></li><li><p>Ability to implement a full single-sign-on architecture.</p></li><li><p>Ability to distribute authentication systems for absolute minimum wide-area network bandwidth demand.</p></li></ul></div><p>
-<a class="indexterm" name="id2701807"></a>
+</p><a class="indexterm" name="id459080"></a><a class="indexterm" name="id459087"></a><a class="indexterm" name="id459094"></a><a class="indexterm" name="id459100"></a><a class="indexterm" name="id459107"></a><a class="indexterm" name="id459114"></a><a class="indexterm" name="id459121"></a><a class="indexterm" name="id459128"></a><a class="indexterm" name="id459135"></a><a class="indexterm" name="id459141"></a><a class="indexterm" name="id459148"></a><a class="indexterm" name="id459155"></a><a class="indexterm" name="id459162"></a><a class="indexterm" name="id459169"></a><a class="indexterm" name="id459175"></a><div class="itemizedlist"><ul type="disc"><li><p>Lower cost of ownership.</p></li><li><p>Global availability of support with no strings attached.</p></li><li><p>Dynamic SMB servers (can run more than one SMB/CIFS server per UNIX/Linux system).</p></li><li><p>Creation of on-the-fly logon scripts.</p></li><li><p>Creation of on-the-fly policy files.</p></li><li><p>Greater stability, reliability, performance, and availability.</p></li><li><p>Manageability via an SSH connection.</p></li><li><p>Flexible choices of backend authentication technologies (tdbsam, ldapsam).</p></li><li><p>Ability to implement a full single-sign-on architecture.</p></li><li><p>Ability to distribute authentication systems for absolute minimum wide-area network bandwidth demand.</p></li></ul></div><p>
+<a class="indexterm" name="id459236"></a>
 Before migrating a network from MS Windows NT4 to Samba-3, consider all necessary factors. Users
 should be educated about changes they may experience so the change will be a welcome one
 and not become an obstacle to the work they need to do. The following sections explain factors that will 
 help ensure a successful migration.
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2701821"></a>Domain Layout</h4></div></div></div><p>
-<a class="indexterm" name="id2701829"></a>
-<a class="indexterm" name="id2701836"></a>
-<a class="indexterm" name="id2701843"></a>
-<a class="indexterm" name="id2701850"></a>
-<a class="indexterm" name="id2701857"></a>
-<a class="indexterm" name="id2701864"></a>
-<a class="indexterm" name="id2701871"></a>
-<a class="indexterm" name="id2701878"></a>
-<a class="indexterm" name="id2701884"></a>
-<a class="indexterm" name="id2701891"></a>
-<a class="indexterm" name="id2701898"></a>
-<a class="indexterm" name="id2701905"></a>
-<a class="indexterm" name="id2701912"></a>
-<a class="indexterm" name="id2701919"></a>
-<a class="indexterm" name="id2701926"></a>
-<a class="indexterm" name="id2701933"></a>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id459247"></a>Domain Layout</h4></div></div></div><p>
+<a class="indexterm" name="id459255"></a>
+<a class="indexterm" name="id459262"></a>
+<a class="indexterm" name="id459269"></a>
+<a class="indexterm" name="id459276"></a>
+<a class="indexterm" name="id459282"></a>
+<a class="indexterm" name="id459289"></a>
+<a class="indexterm" name="id459296"></a>
+<a class="indexterm" name="id459303"></a>
+<a class="indexterm" name="id459309"></a>
+<a class="indexterm" name="id459316"></a>
+<a class="indexterm" name="id459323"></a>
+<a class="indexterm" name="id459330"></a>
+<a class="indexterm" name="id459336"></a>
+<a class="indexterm" name="id459343"></a>
+<a class="indexterm" name="id459350"></a>
+<a class="indexterm" name="id459357"></a>
 Samba-3 can be configured as a domain controller, a backup domain controller (probably best called
 a secondary controller), a domain member, or a standalone server. The Windows network security
 domain context should be sized and scoped before implementation. Particular attention needs to be
@@ -74,36 +74,36 @@
 complex organization, there can be a single LDAP database, which itself can be distributed (have
 a master server and multiple slave servers) that can simultaneously serve multiple domains.
 </p><p>
-<a class="indexterm" name="id2701956"></a>
+<a class="indexterm" name="id459373"></a>
 From a design perspective, the number of users per server as well as the number of servers per
 domain should be scaled taking into consideration server capacity and network bandwidth.
 </p><p>
-<a class="indexterm" name="id2701969"></a>
-<a class="indexterm" name="id2701976"></a>
-<a class="indexterm" name="id2701983"></a>
-<a class="indexterm" name="id2701990"></a>
-<a class="indexterm" name="id2701997"></a>
-<a class="indexterm" name="id2702003"></a>
+<a class="indexterm" name="id459385"></a>
+<a class="indexterm" name="id459392"></a>
+<a class="indexterm" name="id459399"></a>
+<a class="indexterm" name="id459406"></a>
+<a class="indexterm" name="id459412"></a>
+<a class="indexterm" name="id459419"></a>
 A physical network segment may house several domains. Each may span multiple network segments.
 Where domains span routed network segments, consider and test the performance implications of
 the design and layout of a network. A centrally located domain controller that is designed to
 serve multiple routed network segments may result in severe performance problems. Check the
 response time (ping timing) between the remote segment and the PDC. If it's long (more than 100 ms),
 locate a BDC on the remote segment to serve as the local authentication and access control server.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2702022"></a>Server Share and Directory Layout</h4></div></div></div><p>
-<a class="indexterm" name="id2702030"></a>
-<a class="indexterm" name="id2702037"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id459433"></a>Server Share and Directory Layout</h4></div></div></div><p>
+<a class="indexterm" name="id459441"></a>
+<a class="indexterm" name="id459448"></a>
 There are cardinal rules to effective network design that cannot be broken with impunity.
 The most important rule: Simplicity is king in every well-controlled network. Every part of
 the infrastructure must be managed; the more complex it is, the greater will be the demand
 of keeping systems secure and functional.
 </p><p>
-<a class="indexterm" name="id2702053"></a>
-<a class="indexterm" name="id2702060"></a>
-<a class="indexterm" name="id2702067"></a>
-<a class="indexterm" name="id2702073"></a>
-<a class="indexterm" name="id2702080"></a>
-<a class="indexterm" name="id2702087"></a>
+<a class="indexterm" name="id459460"></a>
+<a class="indexterm" name="id459467"></a>
+<a class="indexterm" name="id459474"></a>
+<a class="indexterm" name="id459481"></a>
+<a class="indexterm" name="id459488"></a>
+<a class="indexterm" name="id459494"></a>
 Keep in mind the nature of how data must be shared. Physical disk space layout should be considered
 carefully. Some data must be backed up. The simpler the disk layout, the easier it will be to
 keep track of backup needs. Identify what backup media will meet your needs; consider backup to tape,
@@ -111,18 +111,18 @@
 maintenance. Leave nothing to chance in your design; above all, do not leave backups to chance:
 backup, test, and validate every backup; create a disaster recovery plan and prove that it works.
 </p><p>
-<a class="indexterm" name="id2702107"></a>
-<a class="indexterm" name="id2702114"></a>
-<a class="indexterm" name="id2702121"></a>
+<a class="indexterm" name="id459514"></a>
+<a class="indexterm" name="id459521"></a>
+<a class="indexterm" name="id459528"></a>
 Users should be grouped according to data access control needs. File and directory access 
 is best controlled via group permissions, and the use of the &#8220;<span class="quote">sticky bit</span>&#8221; on group-controlled
 directories may substantially avoid file access complaints from Samba share users.
 </p><p>
-<a class="indexterm" name="id2702139"></a>
-<a class="indexterm" name="id2702146"></a>
-<a class="indexterm" name="id2702153"></a>
-<a class="indexterm" name="id2702160"></a>
-<a class="indexterm" name="id2702167"></a>
+<a class="indexterm" name="id459544"></a>
+<a class="indexterm" name="id459550"></a>
+<a class="indexterm" name="id459557"></a>
+<a class="indexterm" name="id459564"></a>
+<a class="indexterm" name="id459571"></a>
 Inexperienced  network administrators often attempt elaborate techniques to set access
 controls on files, directories, shares, as well as in share definitions.
 Keep your design and implementation simple and document your design extensively. Have others
@@ -131,8 +131,8 @@
 and downtime to users as the new administrator learns to untangle your knots. Keep access
 controls simple and effective, and make sure that users will never be interrupted by obtuse
 complexity.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2702187"></a>Logon Scripts</h4></div></div></div><p>
-<a class="indexterm" name="id2702195"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id459585"></a>Logon Scripts</h4></div></div></div><p>
+<a class="indexterm" name="id459593"></a>
 Logon scripts can help to ensure that all users gain the share and printer connections they need.
 </p><p>
 Logon scripts can be created on the fly so all commands executed are specific to the
@@ -140,55 +140,55 @@
 group membership so group information can be used to create a custom logon script using
 the <a class="link" href="smb.conf.5.html#ROOTPREEXEC">root preexec</a> parameters to the <em class="parameter"><code>NETLOGON</code></em> share.
 </p><p>
-<a class="indexterm" name="id2702233"></a>
+<a class="indexterm" name="id459627"></a>
 Some sites prefer to use a tool such as <code class="literal">kixstart</code> to establish a controlled
 user environment. In any case, you may wish to do a Google search for logon script process controls.
 In particular, you may wish to explore the use of the Microsoft Knowledge Base article KB189105 that
 deals with how to add printers without user intervention via the logon script process.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2702253"></a>Profile Migration/Creation</h4></div></div></div><p>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id459645"></a>Profile Migration/Creation</h4></div></div></div><p>
 User and group profiles may be migrated using the tools described in the section titled Desktop Profile
 Management.
 </p><p>
-<a class="indexterm" name="id2702267"></a>
-<a class="indexterm" name="id2702273"></a>
+<a class="indexterm" name="id459657"></a>
+<a class="indexterm" name="id459663"></a>
 Profiles may also be managed using the Samba-3 tool <code class="literal">profiles</code>. This tool allows the MS
 Windows NT-style security identifiers (SIDs) that are stored inside the profile
 <code class="filename">NTuser.DAT</code> file to be changed to the SID of the Samba-3 domain.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2702298"></a>User and Group Accounts</h4></div></div></div><p>
-<a class="indexterm" name="id2702306"></a>
-<a class="indexterm" name="id2702313"></a>
-<a class="indexterm" name="id2702320"></a>
-<a class="indexterm" name="id2702326"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id459686"></a>User and Group Accounts</h4></div></div></div><p>
+<a class="indexterm" name="id459694"></a>
+<a class="indexterm" name="id459700"></a>
+<a class="indexterm" name="id459707"></a>
+<a class="indexterm" name="id459714"></a>
 It is possible to migrate all account settings from an MS Windows NT4 domain to Samba-3. Before
 attempting to migrate user and group accounts, you are STRONGLY advised to create in Samba-3 the
 groups that are present on the MS Windows NT4 domain <span class="emphasis"><em>AND</em></span> to map them to
 suitable UNIX/Linux groups. By following this simple advice, all user and group attributes
 should migrate painlessly.
-</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2702346"></a>Steps in Migration Process</h3></div></div></div><p>
+</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id459730"></a>Steps in Migration Process</h3></div></div></div><p>
 The approximate migration process is described below.
 </p><div class="itemizedlist"><ul type="disc"><li><p>
 	You have an NT4 PDC that has the users, groups, policies, and profiles to be migrated.
 	</p></li><li><p>
-<a class="indexterm" name="id2702367"></a>
-<a class="indexterm" name="id2702374"></a>
-<a class="indexterm" name="id2702381"></a>
+<a class="indexterm" name="id459750"></a>
+<a class="indexterm" name="id459757"></a>
+<a class="indexterm" name="id459764"></a>
 	Samba-3 is set up as a domain controller with netlogon share, profile share, and so on. Configure the <code class="filename">smb.conf</code> file
 	to function as a BDC: <em class="parameter"><code>domain master = No</code></em>.
-	</p></li></ul></div><div class="procedure"><a name="id2702404"></a><p class="title"><b>Procedure 36.1. The Account Migration Process</b></p><a class="indexterm" name="id2702492"></a><ol type="1"><li><p>
-	<a class="indexterm" name="id2702416"></a>
+	</p></li></ul></div><div class="procedure"><a name="id459786"></a><p class="title"><b>Procedure 36.1. The Account Migration Process</b></p><a class="indexterm" name="id459872"></a><ol type="1"><li><p>
+	<a class="indexterm" name="id459797"></a>
 	Create a BDC account in the old NT4 domain for the Samba server using NT Server Manager.
 	<span class="emphasis"><em>Samba must not be running.</em></span>
 	</p></li><li><p>
-	<a class="indexterm" name="id2702434"></a>
+	<a class="indexterm" name="id459815"></a>
 	<strong class="userinput"><code>net rpc join -S <em class="replaceable"><code>NT4PDC</code></em> -w <em class="replaceable"><code>DOMNAME</code></em> -U
 	Administrator%<em class="replaceable"><code>passwd</code></em></code></strong>
 	</p></li><li><p>
-<a class="indexterm" name="id2702468"></a>
+<a class="indexterm" name="id459848"></a>
 	<strong class="userinput"><code>net rpc vampire -S <em class="replaceable"><code>NT4PDC</code></em> -U 
 	administrator%<em class="replaceable"><code>passwd</code></em></code></strong>
 	</p></li><li><p><strong class="userinput"><code>pdbedit -L</code></strong></p><p>Note: Did the users migrate?</p></li><li><p>
-	<a class="indexterm" name="id2702520"></a>
-	<a class="indexterm" name="id2702528"></a>
+	<a class="indexterm" name="id459899"></a>
+	<a class="indexterm" name="id459908"></a>
 	Now assign each of the UNIX groups to NT groups:
 	(It may be useful to copy this text to a script called <code class="filename">initGroups.sh</code>)
 	</p><pre class="programlisting">
@@ -208,11 +208,11 @@
 	</p></li><li><p><strong class="userinput"><code>net groupmap list</code></strong></p><p>Check that all groups are recognized.
 	</p></li></ol></div><p>
 Migrate all the profiles, then migrate all policy files.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2702581"></a>Migration Options</h2></div></div></div><p>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id459954"></a>Migration Options</h2></div></div></div><p>
 Sites that wish to migrate from MS Windows NT4 domain control to a Samba-based solution
 generally fit into three basic categories. <a class="link" href="NT4Migration.html#majtypes" title="Table 36.1. The Three Major Site Types">Following table</a> shows the possibilities.
 </p><div class="table"><a name="majtypes"></a><p class="title"><b>Table 36.1. The Three Major Site Types</b></p><div class="table-contents"><table summary="The Three Major Site Types" border="1"><colgroup><col align="left"><col align="justify"></colgroup><thead><tr><th align="left">Number of Users</th><th align="justify">Description</th></tr></thead><tbody><tr><td align="left">&lt; 50</td><td align="justify"><p>Want simple conversion with no pain.</p></td></tr><tr><td align="left">50 - 250</td><td align="justify"><p>Want new features; can manage some inhouse complexity.</p></td></tr><tr><td align="left">&gt; 250</td><td align="justify"><p>Solution/implementation must scale well; complex needs.
-		Cross-departmental decision process. Local expertise in most areas.</p></td></tr></tbody></table></div></div><br class="table-break"><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2702668"></a>Planning for Success</h3></div></div></div><p>
+		Cross-departmental decision process. Local expertise in most areas.</p></td></tr></tbody></table></div></div><br class="table-break"><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id460036"></a>Planning for Success</h3></div></div></div><p>
 There are three basic choices for sites that intend to migrate from MS Windows NT4
 to Samba-3:
 </p><div class="itemizedlist"><ul type="disc"><li><p>
@@ -233,31 +233,31 @@
 	Testing the full roll-out program, including workstation deployment.
 	</p></li></ul></div><p><a class="link" href="NT4Migration.html#natconchoices" title="Table 36.2. Nature of the Conversion Choices">Following table</a> lists the conversion choices given the type of migration
 being contemplated.
-</p><div class="table"><a name="natconchoices"></a><p class="title"><b>Table 36.2. Nature of the Conversion Choices</b></p><div class="table-contents"><table summary="Nature of the Conversion Choices" border="1"><colgroup><col align="justify"><col align="justify"><col align="justify"></colgroup><thead><tr><th align="justify">Simple Install</th><th align="justify">Upgrade Decisions</th><th align="justify">Redesign Decisions</th></tr></thead><tbody><tr><td align="justify"><p>Make use of minimal OS-specific features</p></td><td align="justify"><p>Translate NT4 features to new host OS features</p></td><td align="justify"><p>Improve on NT4 functionality, enhance management capabilities</p></td></tr><tr><td align="justify"><p>Move all accounts from NT4 into Samba-3</p></td><td align="justify"><p>Copy and improve</p></td><td align="justify"><p>Authentication regime (database location and access)</p></td></tr><tr><td align="justify"><p>Make least number of operational changes</p></td><td align="justify"><p>Make progressive improvements</p></td><td align="justify"><p>Desktop management methods</p></td></tr><tr><td align="justify"><p>Take least amount of time to migrate</p></td><td align="justify"><p>Minimize user impact</p></td><td align="justify"><p>Better control of Desktops/Users</p></td></tr><tr><td align="justify"><p>Live versus isolated conversion</p></td><td align="justify"><p>Maximize functionality</p></td><td align="justify"><p>Identify Needs for: <span class="emphasis"><em>Manageability, Scalability, Security, Availability</em></span></p></td></tr><tr><td align="justify"><p>Integrate Samba-3, then migrate while users are active, then change of control (swap out)</p></td><td align="justify"><p>Take advantage of lower maintenance opportunity</p></td><td align="justify"><p></p></td></tr></tbody></table></div></div><br class="table-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2702901"></a>Samba-3 Implementation Choices</h3></div></div></div><div class="variablelist"><dl><dt><span class="term">Authentication Database/Backend</span></dt><dd><p>
+</p><div class="table"><a name="natconchoices"></a><p class="title"><b>Table 36.2. Nature of the Conversion Choices</b></p><div class="table-contents"><table summary="Nature of the Conversion Choices" border="1"><colgroup><col align="justify"><col align="justify"><col align="justify"></colgroup><thead><tr><th align="justify">Simple Install</th><th align="justify">Upgrade Decisions</th><th align="justify">Redesign Decisions</th></tr></thead><tbody><tr><td align="justify"><p>Make use of minimal OS-specific features</p></td><td align="justify"><p>Translate NT4 features to new host OS features</p></td><td align="justify"><p>Improve on NT4 functionality, enhance management capabilities</p></td></tr><tr><td align="justify"><p>Move all accounts from NT4 into Samba-3</p></td><td align="justify"><p>Copy and improve</p></td><td align="justify"><p>Authentication regime (database location and access)</p></td></tr><tr><td align="justify"><p>Make least number of operational changes</p></td><td align="justify"><p>Make progressive improvements</p></td><td align="justify"><p>Desktop management methods</p></td></tr><tr><td align="justify"><p>Take least amount of time to migrate</p></td><td align="justify"><p>Minimize user impact</p></td><td align="justify"><p>Better control of Desktops/Users</p></td></tr><tr><td align="justify"><p>Live versus isolated conversion</p></td><td align="justify"><p>Maximize functionality</p></td><td align="justify"><p>Identify Needs for: <span class="emphasis"><em>Manageability, Scalability, Security, Availability</em></span></p></td></tr><tr><td align="justify"><p>Integrate Samba-3, then migrate while users are active, then change of control (swap out)</p></td><td align="justify"><p>Take advantage of lower maintenance opportunity</p></td><td align="justify"><p></p></td></tr></tbody></table></div></div><br class="table-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id460257"></a>Samba-3 Implementation Choices</h3></div></div></div><div class="variablelist"><dl><dt><span class="term">Authentication Database/Backend</span></dt><dd><p>
 		Samba-3 can use an external authentication backend:
 		</p><p>
 		</p><div class="itemizedlist"><ul type="disc"><li><p>Winbind (external Samba or NT4/200x server).</p></li><li><p>External server could use Active Directory or NT4 domain.</p></li><li><p>Can use pam_mkhomedir.so to autocreate home directories.</p></li><li><p> Samba-3 can use a local authentication backend: <em class="parameter"><code>smbpasswd</code></em>,
 				<em class="parameter"><code>tdbsam</code></em>, <em class="parameter"><code>ldapsam</code></em>
 			</p></li></ul></div></dd><dt><span class="term">Access Control Points</span></dt><dd><p>
 		Samba permits Access Control points to be set:
-		</p><a class="indexterm" name="id2702974"></a><a class="indexterm" name="id2702981"></a><a class="indexterm" name="id2702988"></a><a class="indexterm" name="id2702995"></a><div class="itemizedlist"><ul type="disc"><li><p>On the share itself  using share ACLs.</p></li><li><p>On the file system  using UNIX permissions on files and directories.</p><p>Note: Can enable Posix ACLs in file system also.</p></li><li><p>Through Samba share parameters  not recommended except as last resort.</p></li></ul></div></dd><dt><span class="term">Policies (migrate or create new ones)</span></dt><dd><p>
-<a class="indexterm" name="id2703043"></a>
-<a class="indexterm" name="id2703049"></a>
+		</p><a class="indexterm" name="id460327"></a><a class="indexterm" name="id460334"></a><a class="indexterm" name="id460340"></a><a class="indexterm" name="id460347"></a><div class="itemizedlist"><ul type="disc"><li><p>On the share itself  using share ACLs.</p></li><li><p>On the file system  using UNIX permissions on files and directories.</p><p>Note: Can enable Posix ACLs in file system also.</p></li><li><p>Through Samba share parameters  not recommended except as last resort.</p></li></ul></div></dd><dt><span class="term">Policies (migrate or create new ones)</span></dt><dd><p>
+<a class="indexterm" name="id460392"></a>
+<a class="indexterm" name="id460399"></a>
 		Exercise great caution when making registry changes; use the right tool and be aware
 		that changes made through NT4-style <code class="filename">NTConfig.POL</code> files can leave
 		permanent changes.
-<a class="indexterm" name="id2703065"></a>
-<a class="indexterm" name="id2703072"></a>
-<a class="indexterm" name="id2703079"></a>
+<a class="indexterm" name="id460413"></a>
+<a class="indexterm" name="id460420"></a>
+<a class="indexterm" name="id460427"></a>
 		</p><div class="itemizedlist"><ul type="disc"><li><p>Using Group Policy Editor (NT4).</p></li><li><p>Watch out for tattoo effect.</p></li></ul></div></dd><dt><span class="term">User and Group Profiles</span></dt><dd><p>
-<a class="indexterm" name="id2703110"></a>
-<a class="indexterm" name="id2703117"></a>
+<a class="indexterm" name="id460457"></a>
+<a class="indexterm" name="id460464"></a>
 		Platform-specific, so use platform tool to change from a local to a roaming profile.
 		Can use new profiles tool to change SIDs (<code class="filename">NTUser.DAT</code>).
 		</p></dd><dt><span class="term">Logon Scripts</span></dt><dd><p>
 		Know how they work.
 		</p></dd><dt><span class="term">User and Group Mapping to UNIX/Linux</span></dt><dd><p>
-		<a class="indexterm" name="id2703155"></a>
+		<a class="indexterm" name="id460500"></a>
 		User and group mapping code is new. Many problems have been experienced as network administrators
 		who are familiar with Samba-2.2.x migrate to Samba-3. Carefully study the chapters that document
 		the new password backend behavior and the new group mapping functionality.
@@ -274,6 +274,6 @@
 				(Linux 8 chars, NT4 up to 254 chars).</p></li><li><p>Add/Delete Machines: Applied only to domain members
 				(Note: machine names may be limited to 16 characters).</p></li><li><p>Use <code class="literal">net groupmap</code> to connect NT4 groups to UNIX groups.</p></li><li><p>Add/Delete Groups: Note OS limits on size and nature.
 				Linux limit is 16 char, no spaces, and no uppercase chars (<code class="literal">groupadd</code>).</p></li></ul></div></dd><dt><span class="term">Migration Tools</span></dt><dd><p>
-				<a class="indexterm" name="id2703273"></a>
+				<a class="indexterm" name="id460608"></a>
 				Domain Control (NT4-Style) Profiles, Policies, Access Controls, Security
 				</p><div class="itemizedlist"><ul type="disc"><li><p>Samba: <code class="literal">net, rpcclient, smbpasswd, pdbedit, profiles</code></p></li><li><p>Windows: <code class="literal">NT4 Domain User Manager, Server Manager (NEXUS)</code></p></li></ul></div></dd></dl></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="upgrading-to-3.0.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="migration.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="SWAT.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 35. Updating and Upgrading Samba </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 37. SWAT: The Samba Web Administration Tool</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/NetCommand.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/NetCommand.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/NetCommand.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,16 +1,16 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 13. Remote and Local Management: The Net Command</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="groupmapping.html" title="Chapter 12. Group Mapping: MS Windows and UNIX"><link rel="next" href="idmapper.html" title="Chapter 14. Identity Mapping (IDMAP)"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 13. Remote and Local Management: The Net Command</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="groupmapping.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="idmapper.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="NetCommand"></a>Chapter 13. Remote and Local Management: The Net Command</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Volker</span> <span class="surname">Lendecke</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:Volker.Lendecke at SerNet.DE">Volker.Lendecke at SerNet.DE</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Guenther</span> <span class="surname">Deschner</span></h3><div class="affiliation"><span class="orgname">SuSE<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:gd at suse.de">gd at suse.de</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">May 9, 2005</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="NetCommand.html#id2621069">Overview</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id2621363">Administrative Tasks and Methods</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id2621445">UNIX and Windows Group Management</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#id2621603">Adding, Renaming, or Deletion of Group Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#grpmemshipchg">Manipulating Group Memberships</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#nestedgrpmgmgt">Nested Group Support</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#id2622967">UNIX and Windows User Management</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#sbeuseraddn">Adding User Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id2623179">Deletion of User Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id2623227">Managing User Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id2623295">User Mapping</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#id2623379">Administering User Rights and Privileges</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id2623733">Managing Trust Relationships</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#id2623749">Machine Trust Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id2624117">Interdomain Trusts</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#id2624351">Managing Security Identifiers (SIDS)</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id2624573">Share Management</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#id2624619">Creating, Editing, and Removing Shares</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id2624807">Creating and Changing Share ACLs</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id2624837">Share, Directory, and File Migration</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id2625466">Printer Migration</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#id2625716">Controlling Open Files</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id2625736">Session and Connection Management</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id2625801">Printers and ADS</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id2625917">Manipulating the Samba Cache</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id2625934">Managing IDMAP UID/SID Mappings</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#id2625978">Creating an IDMAP Database Dump File</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id2626014">Restoring the IDMAP Database Dump File</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#netmisc1">Other Miscellaneous Operations</a></span></dt></dl></div><p>
-<a class="indexterm" name="id2620930"></a>
-<a class="indexterm" name="id2620937"></a>
-<a class="indexterm" name="id2620944"></a>
-<a class="indexterm" name="id2620950"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 13. Remote and Local Management: The Net Command</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="groupmapping.html" title="Chapter 12. Group Mapping: MS Windows and UNIX"><link rel="next" href="idmapper.html" title="Chapter 14. Identity Mapping (IDMAP)"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 13. Remote and Local Management: The Net Command</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="groupmapping.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="idmapper.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="NetCommand"></a>Chapter 13. Remote and Local Management: The Net Command</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Volker</span> <span class="surname">Lendecke</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:Volker.Lendecke at SerNet.DE">Volker.Lendecke at SerNet.DE</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Guenther</span> <span class="surname">Deschner</span></h3><div class="affiliation"><span class="orgname">SuSE<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:gd at suse.de">gd at suse.de</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">May 9, 2005</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="NetCommand.html#id385377">Overview</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id385653">Administrative Tasks and Methods</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id385728">UNIX and Windows Group Management</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#id385877">Adding, Renaming, or Deletion of Group Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#grpmemshipchg">Manipulating Group Memberships</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#nestedgrpmgmgt">Nested Group Support</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#id387104">UNIX and Windows User Management</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#sbeuseraddn">Adding User Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id387299">Deletion of User Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id387344">Managing User Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id387406">User Mapping</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#id387484">Administering User Rights and Privileges</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id387799">Managing Trust Relationships</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#id387811">Machine Trust Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id388148">Interdomain Trusts</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#id388358">Managing Security Identifiers (SIDS)</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id388559">Share Management</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#id388601">Creating, Editing, and Removing Shares</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id388770">Creating and Changing Share ACLs</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id388797">Share, Directory, and File Migration</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id389335">Printer Migration</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#id389550">Controlling Open Files</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id389567">Session and Connection Management</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id389627">Printers and ADS</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id389730">Manipulating the Samba Cache</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id389747">Managing IDMAP UID/SID Mappings</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#id389785">Creating an IDMAP Database Dump File</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id389816">Restoring the IDMAP Database Dump File</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#netmisc1">Other Miscellaneous Operations</a></span></dt></dl></div><p>
+<a class="indexterm" name="id385248"></a>
+<a class="indexterm" name="id385255"></a>
+<a class="indexterm" name="id385262"></a>
+<a class="indexterm" name="id385268"></a>
 The <code class="literal">net</code> command is one of the new features of Samba-3 and is an attempt to provide a useful
 tool for the majority of remote management operations necessary for common tasks. The <code class="literal">net</code>
 tool is flexible by design and is intended for command-line use as well as for scripted control application.
 </p><p>
-<a class="indexterm" name="id2620977"></a>
-<a class="indexterm" name="id2620983"></a>
-<a class="indexterm" name="id2620990"></a>
-<a class="indexterm" name="id2620997"></a>
+<a class="indexterm" name="id385292"></a>
+<a class="indexterm" name="id385299"></a>
+<a class="indexterm" name="id385306"></a>
+<a class="indexterm" name="id385313"></a>
 Originally introduced with the intent to mimic the Microsoft Windows command that has the same name, the
 <code class="literal">net</code> command has morphed into a very powerful instrument that has become an essential part
 of the Samba network administrator's toolbox. The Samba Team has introduced tools, such as
@@ -22,27 +22,27 @@
 </p><p>
 A Samba-3 administrator cannot afford to gloss over this chapter because to do so will almost certainly cause
 the infliction of self-induced pain, agony, and desperation. Be warned: this is an important chapter.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2621069"></a>Overview</h2></div></div></div><p>
-<a class="indexterm" name="id2621077"></a>
-<a class="indexterm" name="id2621083"></a>
-<a class="indexterm" name="id2621090"></a>
-<a class="indexterm" name="id2621097"></a>
-<a class="indexterm" name="id2621103"></a>
-<a class="indexterm" name="id2621110"></a>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id385377"></a>Overview</h2></div></div></div><p>
+<a class="indexterm" name="id385385"></a>
+<a class="indexterm" name="id385391"></a>
+<a class="indexterm" name="id385398"></a>
+<a class="indexterm" name="id385405"></a>
+<a class="indexterm" name="id385411"></a>
+<a class="indexterm" name="id385418"></a>
 	The tasks that follow the installation of a Samba-3 server, whether standalone or domain member, of a
 	domain controller (PDC or BDC) begins with the need to create administrative rights. Of course, the
 	creation of user and group accounts is essential for both a standalone server and a PDC.
 	In the case of a BDC or a Domain Member server (DMS), domain user and group accounts are obtained from
 	the central domain authentication backend.
 	</p><p>
-<a class="indexterm" name="id2621128"></a>
-<a class="indexterm" name="id2621134"></a>
-<a class="indexterm" name="id2621141"></a>
-<a class="indexterm" name="id2621148"></a>
-<a class="indexterm" name="id2621155"></a>
-<a class="indexterm" name="id2621162"></a>
-<a class="indexterm" name="id2621168"></a>
-<a class="indexterm" name="id2621175"></a>
+<a class="indexterm" name="id385432"></a>
+<a class="indexterm" name="id385438"></a>
+<a class="indexterm" name="id385445"></a>
+<a class="indexterm" name="id385452"></a>
+<a class="indexterm" name="id385459"></a>
+<a class="indexterm" name="id385465"></a>
+<a class="indexterm" name="id385472"></a>
+<a class="indexterm" name="id385479"></a>
 	Regardless of the type of server being installed, local UNIX groups must be mapped to the Windows
 	networking domain global group accounts. Do you ask why? Because Samba always limits its access to
 	the resources of the host server by way of traditional UNIX UID and GID controls. This means that local
@@ -50,41 +50,41 @@
 	global groups can be given access rights based on UIDs and GIDs local to the server that is hosting
 	Samba. Such mappings are implemented using the <code class="literal">net</code> command.
 	</p><p>
-<a class="indexterm" name="id2621200"></a>
-<a class="indexterm" name="id2621206"></a>
-<a class="indexterm" name="id2621213"></a>
-<a class="indexterm" name="id2621220"></a>
-<a class="indexterm" name="id2621226"></a>
-<a class="indexterm" name="id2621234"></a>
-<a class="indexterm" name="id2621240"></a>
+<a class="indexterm" name="id385499"></a>
+<a class="indexterm" name="id385506"></a>
+<a class="indexterm" name="id385512"></a>
+<a class="indexterm" name="id385519"></a>
+<a class="indexterm" name="id385525"></a>
+<a class="indexterm" name="id385532"></a>
+<a class="indexterm" name="id385539"></a>
 	UNIX systems that are hosting a Samba-3 server that is running as a member (PDC, BDC, or DMS) must have
 	a machine security account in the domain authentication database (or directory). The creation of such
 	security (or trust) accounts is also handled using the <code class="literal">net</code> command.
 	</p><p>
-<a class="indexterm" name="id2621260"></a>
-<a class="indexterm" name="id2621267"></a>
-<a class="indexterm" name="id2621274"></a>
-<a class="indexterm" name="id2621281"></a>
-<a class="indexterm" name="id2621288"></a>
-<a class="indexterm" name="id2621295"></a>
-<a class="indexterm" name="id2621302"></a>
-<a class="indexterm" name="id2621309"></a>
-<a class="indexterm" name="id2621316"></a>
+<a class="indexterm" name="id385557"></a>
+<a class="indexterm" name="id385564"></a>
+<a class="indexterm" name="id385570"></a>
+<a class="indexterm" name="id385577"></a>
+<a class="indexterm" name="id385584"></a>
+<a class="indexterm" name="id385591"></a>
+<a class="indexterm" name="id385597"></a>
+<a class="indexterm" name="id385604"></a>
+<a class="indexterm" name="id385611"></a>
 	The establishment of interdomain trusts is achieved using the <code class="literal">net</code> command also, as
 	may a plethora of typical administrative duties such as user management, group management, share and
 	printer management, file and printer migration, security identifier management, and so on.
 	</p><p>
-<a class="indexterm" name="id2621336"></a>
-<a class="indexterm" name="id2621343"></a>
+<a class="indexterm" name="id385629"></a>
+<a class="indexterm" name="id385636"></a>
 	The overall picture should be clear now: the <code class="literal">net</code> command plays a central role
 	on the Samba-3 stage. This role will continue to be developed. The inclusion of this chapter is
 	evidence of its importance, one that has grown in complexity to the point that it is no longer considered
 	prudent to cover its use fully in the online UNIX man pages.
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2621363"></a>Administrative Tasks and Methods</h2></div></div></div><p>
-<a class="indexterm" name="id2621371"></a>
-<a class="indexterm" name="id2621378"></a>
-<a class="indexterm" name="id2621384"></a>
-<a class="indexterm" name="id2621394"></a>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id385653"></a>Administrative Tasks and Methods</h2></div></div></div><p>
+<a class="indexterm" name="id385661"></a>
+<a class="indexterm" name="id385668"></a>
+<a class="indexterm" name="id385674"></a>
+<a class="indexterm" name="id385683"></a>
 	The basic operations of the <code class="literal">net</code> command are documented here. This documentation is not
 	exhaustive, and thus it is incomplete. Since the primary focus is on migration from Windows servers to a Samba
 	server, the emphasis is on the use of the Distributed Computing Environment Remote Procedure Call (DCE RPC)
@@ -94,36 +94,36 @@
 	automatically fall back via the <code class="constant">ads</code>, <code class="constant">rpc</code>, and
 	<code class="constant">rap</code> modes.  Please refer to the man page for a more comprehensive overview of the
 	capabilities of this utility.
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2621445"></a>UNIX and Windows Group Management</h2></div></div></div><p>
-<a class="indexterm" name="id2621453"></a>
-<a class="indexterm" name="id2621460"></a>
-<a class="indexterm" name="id2621468"></a>
-<a class="indexterm" name="id2621477"></a>
-<a class="indexterm" name="id2621486"></a>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id385728"></a>UNIX and Windows Group Management</h2></div></div></div><p>
+<a class="indexterm" name="id385735"></a>
+<a class="indexterm" name="id385742"></a>
+<a class="indexterm" name="id385751"></a>
+<a class="indexterm" name="id385760"></a>
+<a class="indexterm" name="id385768"></a>
 	As stated, the focus in most of this chapter is on use of the <code class="literal">net rpc</code> family of
 	operations that are supported by Samba. Most of them are supported by the <code class="literal">net ads</code>
 	mode when used in connection with Active Directory. The <code class="literal">net rap</code> operating mode is
 	also supported for some of these operations. RAP protocols are used by IBM OS/2 and by several
 	earlier SMB servers.
 	</p><p>
-<a class="indexterm" name="id2621519"></a>
-<a class="indexterm" name="id2621526"></a>
-<a class="indexterm" name="id2621533"></a>
+<a class="indexterm" name="id385799"></a>
+<a class="indexterm" name="id385805"></a>
+<a class="indexterm" name="id385812"></a>
 	Samba's <code class="literal">net</code> tool implements sufficient capability to permit all common administrative
 	tasks to be completed from the command line. In this section each of the essential user and group management
 	facilities are explored.
 	</p><p>
-<a class="indexterm" name="id2621552"></a>
-<a class="indexterm" name="id2621559"></a>
-<a class="indexterm" name="id2621568"></a>
-<a class="indexterm" name="id2621578"></a>
+<a class="indexterm" name="id385830"></a>
+<a class="indexterm" name="id385837"></a>
+<a class="indexterm" name="id385846"></a>
+<a class="indexterm" name="id385855"></a>
 	Samba-3 recognizes two types of groups: <span class="emphasis"><em>domain groups</em></span> and <span class="emphasis"><em>local
 	groups</em></span>. Domain groups can contain (have as members) only domain user accounts. Local groups
 	can contain local users, domain users, and domain groups as members.
 	</p><p>
 	The purpose of a local group is to permit file permission to be set for a group account that, like the
 	usual UNIX/Linux group, is persistent across redeployment of a Windows file server.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2621603"></a>Adding, Renaming, or Deletion of Group Accounts</h3></div></div></div><p>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id385877"></a>Adding, Renaming, or Deletion of Group Accounts</h3></div></div></div><p>
 	Samba provides file and print services to Windows clients. The file system resources it makes available
 	to the Windows environment must, of necessity, be provided in a manner that is compatible with the
 	Windows networking environment. UNIX groups are created and deleted as required to serve operational
@@ -143,11 +143,11 @@
 	between the UNIX group account and its members to the respective Windows group accounts. It goes on to
 	show how UNIX group members automatically pass-through to Windows group membership as soon as a logical
 	mapping has been created.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2621645"></a>Adding or Creating a New Group</h4></div></div></div><p>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id385906"></a>Adding or Creating a New Group</h4></div></div></div><p>
 	Before attempting to add a Windows group account, the currently available groups can be listed as shown
 	here:
-<a class="indexterm" name="id2621656"></a>
-<a class="indexterm" name="id2621667"></a>
+<a class="indexterm" name="id385915"></a>
+<a class="indexterm" name="id385926"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc group list -Uroot%not24get
 Password:
@@ -163,7 +163,7 @@
 	</p><p>
 	A Windows group account called &#8220;<span class="quote">SupportEngrs</span>&#8221; can be added by executing the following
 command:
-<a class="indexterm" name="id2621703"></a>
+<a class="indexterm" name="id385960"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc group add "SupportEngrs" -Uroot%not24get
 </pre><p>
@@ -183,9 +183,9 @@
 SupportEngrs
 </pre><p>
 	</p><p>
-<a class="indexterm" name="id2621746"></a>
-<a class="indexterm" name="id2621752"></a>
-<a class="indexterm" name="id2621759"></a>
+<a class="indexterm" name="id385999"></a>
+<a class="indexterm" name="id386006"></a>
+<a class="indexterm" name="id386013"></a>
 	The following demonstrates that the POSIX (UNIX/Linux system account) group has been created by calling
 	the <a class="link" href="smb.conf.5.html#ADDGROUPSCRIPT">add group script = /opt/IDEALX/sbin/smbldap-groupadd -p "%g"</a> interface
 	script:
@@ -205,7 +205,7 @@
 	The following demonstrates that the use of the <code class="literal">net</code> command to add a group account
 results in immediate mapping of the POSIX group that has been created to the Windows group account as shown
 here:
-<a class="indexterm" name="id2621806"></a>
+<a class="indexterm" name="id386052"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net groupmap list
 Domain Admins (S-1-5-21-72630-4128915-11681869-512) -&gt; Domain Admins
@@ -218,19 +218,19 @@
 Engineers (S-1-5-21-72630-4128915-11681869-3005) -&gt; Engineers
 SupportEngrs (S-1-5-21-72630-4128915-11681869-3007) -&gt; SupportEngrs
 </pre><p>
-	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2621847"></a>Mapping Windows Groups to UNIX Groups</h4></div></div></div><p>
-<a class="indexterm" name="id2621855"></a>
-<a class="indexterm" name="id2621861"></a>
-<a class="indexterm" name="id2621868"></a>
-<a class="indexterm" name="id2621875"></a>
+	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id386085"></a>Mapping Windows Groups to UNIX Groups</h4></div></div></div><p>
+<a class="indexterm" name="id386093"></a>
+<a class="indexterm" name="id386100"></a>
+<a class="indexterm" name="id386107"></a>
+<a class="indexterm" name="id386114"></a>
 	Windows groups must be mapped to UNIX system (POSIX) groups so that file system access controls
 	can be asserted in a manner that is consistent with the methods appropriate to the operating
 	system that is hosting the Samba server.
 	</p><p>
-<a class="indexterm" name="id2621889"></a>
-<a class="indexterm" name="id2621896"></a>
-<a class="indexterm" name="id2621903"></a>
-<a class="indexterm" name="id2621909"></a>
+<a class="indexterm" name="id386126"></a>
+<a class="indexterm" name="id386133"></a>
+<a class="indexterm" name="id386139"></a>
+<a class="indexterm" name="id386146"></a>
 	All file system (file and directory) access controls, within the file system of a UNIX/Linux server that is
 	hosting a Samba server, are implemented using a UID/GID identity tuple. Samba does not in any way override
 	or replace UNIX file system semantics. Thus it is necessary that all Windows networking operations that
@@ -238,22 +238,22 @@
 	account. The user account must also map to a locally known UID. Note that the <code class="literal">net</code>
 	command does not call any RPC-functions here but directly accesses the passdb.
 	</p><p>
-<a class="indexterm" name="id2621935"></a>
-<a class="indexterm" name="id2621942"></a>
-<a class="indexterm" name="id2621949"></a>
-<a class="indexterm" name="id2621956"></a>
-<a class="indexterm" name="id2621963"></a>
-<a class="indexterm" name="id2621970"></a>
-<a class="indexterm" name="id2621976"></a>
+<a class="indexterm" name="id386166"></a>
+<a class="indexterm" name="id386173"></a>
+<a class="indexterm" name="id386180"></a>
+<a class="indexterm" name="id386187"></a>
+<a class="indexterm" name="id386194"></a>
+<a class="indexterm" name="id386200"></a>
+<a class="indexterm" name="id386207"></a>
 	Samba depends on default mappings for the <code class="constant">Domain Admins, Domain Users</code>, and
 	<code class="constant">Domain Guests</code> global groups. Additional groups may be added as shown in the
 	examples just given. There are times when it is necessary to map an existing UNIX group account
 	to a Windows group. This operation, in effect, creates a Windows group account as a consequence
 	of creation of the mapping.
 	</p><p>
-<a class="indexterm" name="id2622000"></a>
-<a class="indexterm" name="id2622011"></a>
-<a class="indexterm" name="id2622022"></a>
+<a class="indexterm" name="id386228"></a>
+<a class="indexterm" name="id386239"></a>
+<a class="indexterm" name="id386250"></a>
 	The operations that are permitted include: <code class="constant">add</code>, <code class="constant">modify</code>,
 	and <code class="constant">delete</code>. An example of each operation is shown here.
 	</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
@@ -290,15 +290,15 @@
 	Supported mapping types are 'd' (domain global) and 'l' (domain local), a domain local group in Samba is
 	treated as local to the individual Samba server. Local groups can be used with Samba to enable multiple
 	nested group support.
-	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2622155"></a>Deleting a Group Account</h4></div></div></div><p>
-<a class="indexterm" name="id2622163"></a>
+	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id386366"></a>Deleting a Group Account</h4></div></div></div><p>
+<a class="indexterm" name="id386374"></a>
 	A group account may be deleted by executing the following command:
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc group delete SupportEngineers -Uroot%not24get
 </pre><p>
 	</p><p>
 	Validation of the deletion is advisable. The same commands may be executed as shown above.
-	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2622195"></a>Rename Group Accounts</h4></div></div></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
+	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id386404"></a>Rename Group Accounts</h4></div></div></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
 	This command is not documented in the man pages; it is implemented in the source code, but it does not
 	work at this time. The example given documents, from the source code, how it should work. Watch the
 	release notes of a future release to see when this may have been fixed.
@@ -306,7 +306,7 @@
 	Sometimes it is necessary to rename a group account. Good administrators know how painful some managers'
 	demands can be if this simple request is ignored. The following command demonstrates how the Windows group
 	&#8220;<span class="quote">SupportEngrs</span>&#8221; can be renamed to &#8220;<span class="quote">CustomerSupport</span>&#8221;:
-<a class="indexterm" name="id2622223"></a>
+<a class="indexterm" name="id386428"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc group rename SupportEngrs \
     CustomerSupport -Uroot%not24get
@@ -349,7 +349,7 @@
 	Given that the user <code class="constant">ajt</code> is already a member of the UNIX/Linux group and, via the
 	group mapping, a member of the Windows group, an attempt to add this account again should fail. This is
 	demonstrated here:
-<a class="indexterm" name="id2622355"></a>
+<a class="indexterm" name="id386539"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc group addmem "MIDEARTH\Engineers" ajt -Uroot%not24get
 Could not add ajt to MIDEARTH\Engineers: NT_STATUS_MEMBER_IN_GROUP
@@ -359,7 +359,7 @@
 	</p><p>
 	To permit the user <code class="constant">ajt</code> to be added using the <code class="literal">net rpc group</code> utility,
 	this account must first be removed. The removal and confirmation of its effect is shown here:
-<a class="indexterm" name="id2622397"></a>
+<a class="indexterm" name="id386578"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc group delmem "MIDEARTH\Engineers" ajt -Uroot%not24get
 <code class="prompt">root# </code> getent group Engineers
@@ -383,7 +383,7 @@
 	In this example the members of the Windows <code class="constant">Domain Users</code> account are validated using
 	the <code class="literal">net rpc group</code> utility. Note the this contents of the UNIX/Linux group was shown
 	four paragraphs earlier. The Windows (domain) group membership is shown here:
-<a class="indexterm" name="id2622494"></a>
+<a class="indexterm" name="id386667"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc group members "Domain Users" -Uroot%not24get
 MIDEARTH\jht
@@ -440,11 +440,11 @@
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc group delmem demo "DOM\jht" -Uroot%not24get
 </pre><p>
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2622674"></a>Managing Nest Groups on Workstations from the Samba Server</h4></div></div></div><p>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id386831"></a>Managing Nest Groups on Workstations from the Samba Server</h4></div></div></div><p>
 	Windows network administrators often ask on the Samba mailing list how it is possible to grant everyone
 	administrative rights on their own workstation. This is of course a very bad practice, but commonly done
 	to avoid user complaints. Here is how it can be done remotely from a Samba PDC or BDC:
-<a class="indexterm" name="id2622688"></a>
+<a class="indexterm" name="id386842"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc group addmem "Administrators" "Domain Users" \
     -S WINPC032 -Uadministrator%secret
@@ -452,19 +452,19 @@
 	</p><p>
 	This can be scripted, and can therefore be performed as a user logs onto the domain from a Windows
 	workstation. Here is a simple example that shows how this can be done.
-	</p><div class="procedure"><a name="id2622720"></a><p class="title"><b>Procedure 13.1. Automating User Addition to the Workstation Power Users Group</b></p><div class="example"><a name="autopoweruserscript"></a><p class="title"><b>Example 13.1. Script to Auto-add Domain Users to Workstation Power Users Group</b></p><div class="example-contents"><pre class="screen">
+	</p><div class="procedure"><a name="id386871"></a><p class="title"><b>Procedure 13.1. Automating User Addition to the Workstation Power Users Group</b></p><div class="example"><a name="autopoweruserscript"></a><p class="title"><b>Example 13.1. Script to Auto-add Domain Users to Workstation Power Users Group</b></p><div class="example-contents"><pre class="screen">
 #!/bin/bash
 
 /usr/bin/net rpc group addmem "Power Users" "DOMAIN_NAME\$1" \
                    -UAdministrator%secret -S $2
 
 exit 0
-</pre></div></div><br class="example-break"><div class="example"><a name="magicnetlogon"></a><p class="title"><b>Example 13.2. A Magic Netlogon Share</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id2622876"></a><em class="parameter"><code>comment = Netlogon Share</code></em></td></tr><tr><td><a class="indexterm" name="id2622887"></a><em class="parameter"><code>path = /var/lib/samba/netlogon</code></em></td></tr><tr><td><a class="indexterm" name="id2622899"></a><em class="parameter"><code>root preexec = /etc/samba/scripts/autopoweruser.sh %U %m</code></em></td></tr><tr><td><a class="indexterm" name="id2622912"></a><em class="parameter"><code>read only = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2622923"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr></table></div></div><br class="example-break"><ol type="1"><li><p>
+</pre></div></div><br class="example-break"><div class="example"><a name="magicnetlogon"></a><p class="title"><b>Example 13.2. A Magic Netlogon Share</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id387019"></a><em class="parameter"><code>comment = Netlogon Share</code></em></td></tr><tr><td><a class="indexterm" name="id387031"></a><em class="parameter"><code>path = /var/lib/samba/netlogon</code></em></td></tr><tr><td><a class="indexterm" name="id387042"></a><em class="parameter"><code>root preexec = /etc/samba/scripts/autopoweruser.sh %U %m</code></em></td></tr><tr><td><a class="indexterm" name="id387054"></a><em class="parameter"><code>read only = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id387066"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr></table></div></div><br class="example-break"><ol type="1"><li><p>
 		Create the script shown in <a class="link" href="NetCommand.html#autopoweruserscript" title="Example 13.1. Script to Auto-add Domain Users to Workstation Power Users Group">&#8220;Script to Auto-add Domain Users to Workstation Power Users Group&#8221;</a> and locate it in
 		the directory <code class="filename">/etc/samba/scripts</code>, named as <code class="filename">autopoweruser.sh</code>.
-<a class="indexterm" name="id2622752"></a>
-<a class="indexterm" name="id2622763"></a>
-<a class="indexterm" name="id2622770"></a>
+<a class="indexterm" name="id386901"></a>
+<a class="indexterm" name="id386912"></a>
+<a class="indexterm" name="id386919"></a>
 		</p></li><li><p>
 		Set the permissions on this script to permit it to be executed as part of the logon process:
 </p><pre class="screen">
@@ -484,15 +484,15 @@
 	in which case there is little justification for the use of this procedure. The key justification
 	for the use of this method is that it will guarantee that all users have appropriate rights on
 	the workstation.
-	</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2622967"></a>UNIX and Windows User Management</h2></div></div></div><p>
-<a class="indexterm" name="id2622975"></a>
-<a class="indexterm" name="id2622982"></a>
-<a class="indexterm" name="id2622989"></a>
-<a class="indexterm" name="id2622995"></a>
-<a class="indexterm" name="id2623002"></a>
-<a class="indexterm" name="id2623009"></a>
-<a class="indexterm" name="id2623016"></a>
-<a class="indexterm" name="id2623023"></a>
+	</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id387104"></a>UNIX and Windows User Management</h2></div></div></div><p>
+<a class="indexterm" name="id387112"></a>
+<a class="indexterm" name="id387118"></a>
+<a class="indexterm" name="id387125"></a>
+<a class="indexterm" name="id387132"></a>
+<a class="indexterm" name="id387139"></a>
+<a class="indexterm" name="id387145"></a>
+<a class="indexterm" name="id387152"></a>
+<a class="indexterm" name="id387159"></a>
 	Every Windows network user account must be translated to a UNIX/Linux user account. In actual fact,
 	the only account information the UNIX/Linux Samba server needs is a UID.  The UID is available either
 	from a system (POSIX) account or from a pool (range) of UID numbers that is set aside for the purpose
@@ -516,8 +516,8 @@
 </pre><p>
 	</p><p>
 	The following demonstrates the addition of an account to the server <code class="constant">FRODO</code>:
-<a class="indexterm" name="id2623121"></a>
-<a class="indexterm" name="id2623132"></a>
+<a class="indexterm" name="id387244"></a>
+<a class="indexterm" name="id387255"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc user add jacko -S FRODO -Uroot%not24get
 Added user jacko
@@ -528,24 +528,24 @@
 <code class="prompt">root# </code> net rpc user password jacko f4sth0rse \
     -S FRODO -Uroot%not24get
 </pre><p>
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2623179"></a>Deletion of User Accounts</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id387299"></a>Deletion of User Accounts</h3></div></div></div><p>
 	Deletion of a user account can be done using the following syntax:
 </p><pre class="screen">
 net [&lt;method&gt;] user DELETE &lt;name&gt; [misc. options] [targets]
 </pre><p>
 	The following command will delete the user account <code class="constant">jacko</code>:
-<a class="indexterm" name="id2623201"></a>
+<a class="indexterm" name="id387319"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc user delete jacko -Uroot%not24get
 Deleted user account
 </pre><p>
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2623227"></a>Managing User Accounts</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id387344"></a>Managing User Accounts</h3></div></div></div><p>
 	Two basic user account operations are routinely used: change of password and querying which groups a user
 	is a member of. The change of password operation is shown in <a class="link" href="NetCommand.html#sbeuseraddn" title="Adding User Accounts">&#8220;Adding User Accounts&#8221;</a>.
 	</p><p>
 	The ability to query Windows group membership can be essential. Here is how a remote server may be
 	interrogated to find which groups a user is a member of:
-<a class="indexterm" name="id2623250"></a>
+<a class="indexterm" name="id387364"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc user info jacko -S SAURON -Uroot%not24get
 net rpc user info jacko -S SAURON -Uroot%not24get
@@ -558,14 +558,14 @@
 </pre><p>
 	</p><p>
 	It is also possible to rename user accounts:
-<a class="indexterm" name="id2623279"></a>oldusername newusername
+<a class="indexterm" name="id387391"></a>oldusername newusername
 	Note that this operation does not yet work against Samba Servers. It is, however, possible to rename useraccounts on
 	Windows Servers.
 
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2623295"></a>User Mapping</h3></div></div></div><p>
-<a class="indexterm" name="id2623303"></a>
-<a class="indexterm" name="id2623310"></a>
-<a class="indexterm" name="id2623317"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id387406"></a>User Mapping</h3></div></div></div><p>
+<a class="indexterm" name="id387414"></a>
+<a class="indexterm" name="id387421"></a>
+<a class="indexterm" name="id387427"></a>
 	In some situations it is unavoidable that a user's Windows logon name will differ from the login ID
 	that user has on the Samba server. It is possible to create a special file on the Samba server that
 	will permit the Windows user name to be mapped to a different UNIX/Linux user name. The <code class="filename">smb.conf</code>
@@ -581,22 +581,22 @@
 	In this example the Windows user account &#8220;<span class="quote">William Parsons</span>&#8221; will be mapped to the UNIX user
 	<code class="constant">parsonsw</code>, and the Windows user account &#8220;<span class="quote">geeringm</span>&#8221; will be mapped to the
 	UNIX user <code class="constant">marygee</code>.
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2623379"></a>Administering User Rights and Privileges</h2></div></div></div><p>
-<a class="indexterm" name="id2623387"></a>
-<a class="indexterm" name="id2623394"></a>
-<a class="indexterm" name="id2623401"></a>
-<a class="indexterm" name="id2623408"></a>
-<a class="indexterm" name="id2623415"></a>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id387484"></a>Administering User Rights and Privileges</h2></div></div></div><p>
+<a class="indexterm" name="id387492"></a>
+<a class="indexterm" name="id387499"></a>
+<a class="indexterm" name="id387505"></a>
+<a class="indexterm" name="id387512"></a>
+<a class="indexterm" name="id387519"></a>
 	With all versions of Samba earlier than 3.0.11 the only account on a Samba server that could
 	manage users, groups, shares, printers, and such was the <code class="constant">root</code> account. This caused
 	problems for some users and was a frequent source of scorn over the necessity to hand out the
 	credentials for the most security-sensitive account on a UNIX/Linux system.
 	</p><p>
-<a class="indexterm" name="id2623434"></a>
-<a class="indexterm" name="id2623441"></a>
-<a class="indexterm" name="id2623448"></a>
-<a class="indexterm" name="id2623455"></a>
-<a class="indexterm" name="id2623462"></a>
+<a class="indexterm" name="id387536"></a>
+<a class="indexterm" name="id387543"></a>
+<a class="indexterm" name="id387549"></a>
+<a class="indexterm" name="id387556"></a>
+<a class="indexterm" name="id387563"></a>
 	New to Samba version 3.0.11 is the ability to delegate administrative privileges as necessary to either
 	a normal user or to groups of users. The significance of the administrative privileges is documented
 	in <a class="link" href="rights.html" title="Chapter 15. User Rights and Privileges">&#8220;User Rights and Privileges&#8221;</a>. Examples of use of the <code class="literal">net</code> for user rights and privilege
@@ -632,15 +632,15 @@
 	</p><p>
 	The <code class="literal">net</code> command can be used to obtain the currently supported capabilities for rights
 	and privileges using this method:
-<a class="indexterm" name="id2623536"></a>
-<a class="indexterm" name="id2623543"></a>
-<a class="indexterm" name="id2623550"></a>
-<a class="indexterm" name="id2623557"></a>
-<a class="indexterm" name="id2623564"></a>
-<a class="indexterm" name="id2623571"></a>
-<a class="indexterm" name="id2623578"></a>
-<a class="indexterm" name="id2623585"></a>
-<a class="indexterm" name="id2623592"></a>
+<a class="indexterm" name="id387626"></a>
+<a class="indexterm" name="id387633"></a>
+<a class="indexterm" name="id387640"></a>
+<a class="indexterm" name="id387647"></a>
+<a class="indexterm" name="id387654"></a>
+<a class="indexterm" name="id387661"></a>
+<a class="indexterm" name="id387667"></a>
+<a class="indexterm" name="id387674"></a>
+<a class="indexterm" name="id387681"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc rights list -U root%not24get
      SeMachineAccountPrivilege  Add machines to domain
@@ -659,7 +659,7 @@
 	In this example, all rights are assigned to the <code class="constant">Domain Admins</code> group. This is a good
 	idea since members of this group are generally expected to be all-powerful. This assignment makes that
 	the reality:
-<a class="indexterm" name="id2623638"></a>
+<a class="indexterm" name="id387719"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc rights grant "MIDEARTH\Domain Admins" \
     SeMachineAccountPrivilege SePrintOperatorPrivilege \
@@ -678,7 +678,7 @@
 </pre><p>
 	</p><p>
 	The following step permits validation of the changes just made:
-<a class="indexterm" name="id2623689"></a>
+<a class="indexterm" name="id387764"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc rights list accounts -U root%not24get
 MIDEARTH\jht
@@ -712,17 +712,17 @@
 SeRemoteShutdownPrivilege
 SeDiskOperatorPrivilege
 </pre><p>
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2623733"></a>Managing Trust Relationships</h2></div></div></div><p>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id387799"></a>Managing Trust Relationships</h2></div></div></div><p>
 	There are essentially two types of trust relationships: the first is between domain controllers and domain
 	member machines (network clients), the second is between domains (called interdomain trusts). All
 	Samba servers that participate in domain security require a domain membership trust account, as do like
 	Windows NT/200x/XP workstations.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2623749"></a>Machine Trust Accounts</h3></div></div></div><p>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id387811"></a>Machine Trust Accounts</h3></div></div></div><p>
 	The net command looks in the <code class="filename">smb.conf</code> file to obtain its own configuration settings. Thus, the following
 	command 'knows' which domain to join from the <code class="filename">smb.conf</code> file.
 	</p><p>
 	A Samba server domain trust account can be validated as shown in this example:
-<a class="indexterm" name="id2623776"></a>
+<a class="indexterm" name="id387836"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc testjoin
 Join to 'MIDEARTH' is OK
@@ -735,7 +735,7 @@
 </pre><p>
 	</p><p>
 	The equivalent command for joining a Samba server to a Windows ADS domain is shown here:
-<a class="indexterm" name="id2623813"></a>
+<a class="indexterm" name="id387870"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net ads testjoin
 Using short domain name -- TAKEAWAY
@@ -750,7 +750,7 @@
 	</p><p>
 	The following demonstrates the process of creating a machine trust account in the target domain for the
 	Samba server from which the command is executed:
-<a class="indexterm" name="id2623858"></a>
+<a class="indexterm" name="id387911"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc join -S FRODO -Uroot%not24get
 Joined domain MIDEARTH.
@@ -765,7 +765,7 @@
 	The S in the square brackets means this is a server (PDC/BDC) account. The domain join can be cast to join
 	purely as a workstation, in which case the S is replaced with a W (indicating a workstation account). The
 	following command can be used to affect this:
-<a class="indexterm" name="id2623902"></a>
+<a class="indexterm" name="id387950"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc join member -S FRODO -Uroot%not24get
 Joined domain MIDEARTH.
@@ -773,7 +773,7 @@
 	Note that the command-line parameter <code class="constant">member</code> makes this join specific. By default
 	the type is deduced from the <code class="filename">smb.conf</code> file configuration. To specifically join as a PDC or BDC, the
 	command-line parameter will be <code class="constant">[PDC | BDC]</code>. For example:
-<a class="indexterm" name="id2623943"></a>
+<a class="indexterm" name="id387988"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc join bdc -S FRODO -Uroot%not24get
 Joined domain MIDEARTH.
@@ -781,7 +781,7 @@
 	It is best to let Samba figure out the domain join type from the settings in the <code class="filename">smb.conf</code> file.
 	</p><p>
 	The command to join a Samba server to a Windows ADS domain is shown here:
-<a class="indexterm" name="id2623979"></a>
+<a class="indexterm" name="id388021"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net ads join -UAdministrator%not24get
 Using short domain name -- GDANSK
@@ -792,7 +792,7 @@
 	Windows machine is withdrawn from the domain, the domain membership account is not automatically removed
 	either. Inactive domain member accounts can be removed using any convenient tool. If necessary, the
 	machine account can be removed using the following <code class="literal">net</code> command:
-<a class="indexterm" name="id2624018"></a>
+<a class="indexterm" name="id388057"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc user delete HERRING\$ -Uroot%not24get
 Deleted user account.
@@ -802,26 +802,26 @@
 	</p><p>
 	A Samba-3 server that is a Windows ADS domain member can execute the following command to detach from the
 	domain:
-<a class="indexterm" name="id2624051"></a>
+<a class="indexterm" name="id388086"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net ads leave
 </pre><p>
 	</p><p>
 	Detailed information regarding an ADS domain can be obtained by a Samba DMS machine by executing the
 	following:
-<a class="indexterm" name="id2624079"></a>
+<a class="indexterm" name="id388113"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net ads status
 </pre><p>
 	The volume of information is extensive. Please refer to the book &#8220;<span class="quote">Samba-3 by Example</span>&#8221;,
 	Chapter 7 for more information regarding its use. This book may be obtained either in print or online from
 	the <a class="ulink" href="http://www.samba.org/samba/docs/Samba3-ByExample.pdf" target="_top">Samba-3 by Example</a>.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2624117"></a>Interdomain Trusts</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id388148"></a>Interdomain Trusts</h3></div></div></div><p>
 	Interdomain trust relationships form the primary mechanism by which users from one domain can be granted
 	access rights and privileges in another domain. 
 	</p><p>
 	To discover what trust relationships are in effect, execute this command:
-<a class="indexterm" name="id2624133"></a>
+<a class="indexterm" name="id388162"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc trustdom list -Uroot%not24get
 Trusted domains list:
@@ -837,7 +837,7 @@
 	It is necessary to create a trust account in the local domain. A domain controller in a second domain can
 	create a trusted connection with this account. That means that the foreign domain is being trusted
 	to access resources in the local domain. This command creates the local trust account:
-<a class="indexterm" name="id2624167"></a>
+<a class="indexterm" name="id388192"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc trustdom add DAMNATION f00db4r -Uroot%not24get
 </pre><p>
@@ -850,7 +850,7 @@
 	A trust account will always have an I in the field within the square brackets.
 	</p><p>
 	If the trusting domain is not capable of being reached, the following command will fail:
-<a class="indexterm" name="id2624217"></a>
+<a class="indexterm" name="id388238"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc trustdom list -Uroot%not24get
 Trusted domains list:
@@ -876,7 +876,7 @@
 	Where a trust account has been created on a foreign domain, Samba is able to establish the trust (connect with)
 	the foreign account. In the process it creates a one-way trust to the resources on the remote domain. This
 	command achieves the objective of joining the trust relationship:
-<a class="indexterm" name="id2624262"></a>
+<a class="indexterm" name="id388276"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc trustdom establish DAMNATION
 Password: xxxxxxx	== f00db4r
@@ -897,7 +897,7 @@
 	</p><p>
 	Sometimes it is necessary to remove the ability for local users to access a foreign domain. The trusting
 	connection can be revoked as shown here:
-<a class="indexterm" name="id2624309"></a>
+<a class="indexterm" name="id388318"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc trustdom revoke DAMNATION -Uroot%not24get
 </pre><p>
@@ -907,21 +907,21 @@
 <code class="prompt">root# </code> net rpc trustdom del DAMNATION -Uroot%not24get
 </pre><p>
 
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2624351"></a>Managing Security Identifiers (SIDS)</h2></div></div></div><p>
-<a class="indexterm" name="id2624360"></a>
-<a class="indexterm" name="id2624366"></a>
-<a class="indexterm" name="id2624373"></a>
-<a class="indexterm" name="id2624380"></a>
-<a class="indexterm" name="id2624387"></a>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id388358"></a>Managing Security Identifiers (SIDS)</h2></div></div></div><p>
+<a class="indexterm" name="id388366"></a>
+<a class="indexterm" name="id388372"></a>
+<a class="indexterm" name="id388379"></a>
+<a class="indexterm" name="id388386"></a>
+<a class="indexterm" name="id388392"></a>
 	The basic security identifier that is used by all Windows networking operations is the Windows security
 	identifier (SID). All Windows network machines (servers and workstations), users, and groups are
 	identified by their respective SID. All desktop profiles are also encoded with user and group SIDs that
 	are specific to the SID of the domain to which the user belongs.
 	</p><p>
-<a class="indexterm" name="id2624403"></a>
-<a class="indexterm" name="id2624410"></a>
-<a class="indexterm" name="id2624417"></a>
-<a class="indexterm" name="id2624423"></a>
+<a class="indexterm" name="id388406"></a>
+<a class="indexterm" name="id388413"></a>
+<a class="indexterm" name="id388419"></a>
+<a class="indexterm" name="id388426"></a>
 	It is truly prudent to store the machine and/or domain SID in a file for safekeeping. Why? Because 
 	a change in hostname or in the domain (workgroup) name may result in a change in the SID. When you
 	have the SID on hand, it is a simple matter to restore it. The alternative is to suffer the pain of
@@ -929,7 +929,7 @@
 	</p><p>
 	First, do not forget to store the local SID in a file. It is a good idea to put this in the directory
 	in which the <code class="filename">smb.conf</code> file is also stored. Here is a simple action to achieve this:
-<a class="indexterm" name="id2624449"></a>
+<a class="indexterm" name="id388447"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net getlocalsid &gt; /etc/samba/my-sid
 </pre><p>
@@ -945,7 +945,7 @@
 	If ever it becomes necessary to restore the SID that has been stored in the <code class="filename">my-sid</code>
 	file, simply copy the SID (the string of characters that begins with <code class="constant">S-1-5-21</code>) to
 	the command line shown here:
-<a class="indexterm" name="id2624512"></a>
+<a class="indexterm" name="id388504"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net setlocalsid S-1-5-21-1385457007-882775198-1210191635
 </pre><p>
@@ -956,7 +956,7 @@
 	DMS and workstation clients should have their own machine SID to avoid
 	any potential namespace collision. Here is the way that the BDC SID can be synchronized to that
 	of the PDC (this is the default NT4 domain practice also):
-<a class="indexterm" name="id2624544"></a>
+<a class="indexterm" name="id388532"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc getsid -S FRODO -Uroot%not24get
 Storing SID S-1-5-21-726309263-4128913605-1168186429 \
@@ -964,12 +964,12 @@
 </pre><p>
 	Usually it is not necessary to specify the target server (-S FRODO) or the administrator account
 	credentials (-Uroot%not24get).
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2624573"></a>Share Management</h2></div></div></div><p>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id388559"></a>Share Management</h2></div></div></div><p>
 	Share management is central to all file serving operations. Typical share operations include:
 	</p><div class="itemizedlist"><ul type="disc"><li><p>Creation/change/deletion of shares</p></li><li><p>Setting/changing ACLs on shares</p></li><li><p>Moving shares from one server to another</p></li><li><p>Change of permissions of share contents</p></li></ul></div><p>
 	Each of these are dealt with here insofar as they involve the use of the <code class="literal">net</code>
 	command. Operations outside of this command are covered elsewhere in this document.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2624619"></a>Creating, Editing, and Removing Shares</h3></div></div></div><p>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id388601"></a>Creating, Editing, and Removing Shares</h3></div></div></div><p>
 	A share can be added using the <code class="literal">net rpc share</code> command capabilities.
 	The target machine may be local or remote and is specified by the -S option. It must be noted
 	that the addition and deletion of shares using this tool depends on the availability of a suitable
@@ -982,7 +982,7 @@
 	utility. In the first step a share called <code class="constant">Bulge</code> is added. The sharepoint within the
 	file system is the directory <code class="filename">/data</code>. The command that can be executed to perform the
 	addition of this share is shown here:
-<a class="indexterm" name="id2624715"></a>
+<a class="indexterm" name="id388685"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc share add Bulge=/data -S MERLIN -Uroot%not24get
 </pre><p>
@@ -1003,7 +1003,7 @@
 	</p><p>
 	Often it is desirable also to permit a share to be removed using a command-line tool.
 	The following step permits the share that was previously added to be removed:
-<a class="indexterm" name="id2624766"></a>
+<a class="indexterm" name="id388732"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc share delete Bulge -S MERLIN -Uroot%not24get
 </pre><p>
@@ -1019,15 +1019,15 @@
 ADMIN$
 kyocera
 </pre><p>
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2624807"></a>Creating and Changing Share ACLs</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id388770"></a>Creating and Changing Share ACLs</h3></div></div></div><p>
 	At this time the <code class="literal">net</code> tool cannot be used to manage ACLs on Samba shares. In MS Windows 
 	language this is called Share Permissions.
 	</p><p>
 	It is possible to set ACLs on Samba shares using either the SRVTOOLS NT4 Domain Server Manager
 	or using the Computer Management MMC snap-in. Neither is covered here,
 	but see <a class="link" href="AccessControls.html" title="Chapter 16. File, Directory, and Share Access Controls">&#8220;File, Directory, and Share Access Controls&#8221;</a>.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2624837"></a>Share, Directory, and File Migration</h3></div></div></div><p>
-<a class="indexterm" name="id2624845"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id388797"></a>Share, Directory, and File Migration</h3></div></div></div><p>
+<a class="indexterm" name="id388805"></a>
 	Shares and files can be migrated in the same manner as user, machine, and group accounts.
 	It is possible to preserve access control settings (ACLs) as well as security settings
 	throughout the migration process. The <code class="literal">net rpc vampire</code> facility is used
@@ -1064,7 +1064,7 @@
 		</p></li><li><p>
 		Printer settings may not be fully or may be incorrectly migrated. This might in particular happen
 		when migrating a Windows 2003 print server to Samba.
-		</p></li></ol></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2624953"></a>Share Migration</h4></div></div></div><p>
+		</p></li></ol></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id388890"></a>Share Migration</h4></div></div></div><p>
 	The <code class="literal">net rpc share migrate</code> command operation permits the migration of plain
 	share stanzas. A stanza contains the parameters within which a file or print share are defined.
 	The use of this migration method will create share stanzas that have as parameters the file
@@ -1091,7 +1091,7 @@
 	When the parameter &lt;share-name&gt; is omitted, all shares will be migrated. The potentially
 	large list of available shares on the system that is being migrated can be limited using the
 	<em class="parameter"><code>--exclude</code></em> switch. For example:
-<a class="indexterm" name="id2625066"></a>
+<a class="indexterm" name="id388988"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc share migrate shares myshare\
          -S win2k -U administrator%secret"
@@ -1104,13 +1104,13 @@
 	identical on both systems. One precaution worth taking before commencement of migration of shares is
 	to validate that the migrated accounts (on the Samba server) have the needed rights and privileges.
 	This can be done as shown here:
-<a class="indexterm" name="id2625121"></a>
+<a class="indexterm" name="id389036"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc right list accounts -Uroot%not24get
 </pre><p>
 	The steps taken so far perform only the migration of shares. Directories and directory contents
 	are not migrated by the steps covered up to this point.
-	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2625149"></a>File and Directory Migration</h4></div></div></div><p>
+	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id389062"></a>File and Directory Migration</h4></div></div></div><p>
 	Everything covered to this point has been done in preparation for the migration of file and directory
 	data. For many people preparation is potentially boring and the real excitement only begins when file
 	data can be used. The next steps demonstrate the techniques that can be used to transfer (migrate)
@@ -1161,7 +1161,7 @@
 	</p><p>
 	An example for migration of files from a machine called <code class="constant">nt4box</code> to the Samba server
 	from which the process will be handled is shown here:
-<a class="indexterm" name="id2625324"></a>
+<a class="indexterm" name="id389206"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc share migrate files -S nt4box --acls \
     --attrs -U administrator%secret
@@ -1170,17 +1170,17 @@
 	This command  will migrate all files and directories from all file shares on the Windows server called
 	<code class="constant">nt4box</code> to the Samba server from which migration is initiated. Files that are group-owned
 	will be owned by the user account <code class="constant">administrator</code>.
-	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2625364"></a>Share-ACL Migration</h4></div></div></div><p>
+	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id389243"></a>Share-ACL Migration</h4></div></div></div><p>
 	It is possible to have share-ACLs (security descriptors) that won't allow you, even as Administrator, to
 	copy any files or directories into it. Therefor the migration of the share-ACLs has been put into a separate
 	function:
-<a class="indexterm" name="id2625376"></a>
+<a class="indexterm" name="id389252"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc share migrate security -S nt4box -U administrator%secret
 </pre><p>
 	</p><p>
 	This command will only copy the share-ACL of each share on nt4box to your local samba-system.
-	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2625406"></a>Simultaneous Share and File Migration</h4></div></div></div><p>
+	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id389282"></a>Simultaneous Share and File Migration</h4></div></div></div><p>
 	The operating mode shown here is just a combination of the previous three. It first migrates
 	share definitions and then all shared files and directories and finally migrates the share-ACLs:
 </p><pre class="screen">
@@ -1189,12 +1189,12 @@
 </pre><p>
 	</p><p>
 	An example of simultaneous migration is shown here:
-<a class="indexterm" name="id2625432"></a>
+<a class="indexterm" name="id389303"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc share migrate all -S w2k3server -U administrator%secret
 </pre><p>
 	This will generate a complete server clone of the <em class="parameter"><code>w2k3server</code></em> server.
-	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2625466"></a>Printer Migration</h3></div></div></div><p>
+	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id389335"></a>Printer Migration</h3></div></div></div><p>
 	The installation of a new server, as with the migration to a new network environment, often is similar to
 	building a house; progress is very rapid from the laying of foundations up to the stage at which
 	the house can be locked up, but the finishing off appears to take longer and longer as building
@@ -1231,29 +1231,29 @@
 	</p><p>
 	Printer migration from a Windows print server (NT4 or 200x) is shown. This instruction causes the
 	printer share to be created together with the underlying print queue:
-<a class="indexterm" name="id2625601"></a>
+<a class="indexterm" name="id389445"></a>
 </p><pre class="screen">
 net rpc printer MIGRATE PRINTERS [printer] [misc. options] [targets]
 </pre><p>
 	Printer drivers can be migrated from the Windows print server to the Samba server using this
 	command-line instruction:
-<a class="indexterm" name="id2625621"></a>
+<a class="indexterm" name="id389464"></a>
 </p><pre class="screen">
 net rpc printer MIGRATE DRIVERS [printer] [misc. options] [targets]
 </pre><p>
 	Printer forms can be migrated with the following operation:
-<a class="indexterm" name="id2625641"></a>
+<a class="indexterm" name="id389481"></a>
 </p><pre class="screen">
 net rpc printer MIGRATE FORMS [printer] [misc. options] [targets]
 </pre><p>
 	Printer security settings (ACLs) can be migrated from the Windows server to the Samba server using this command:
-<a class="indexterm" name="id2625661"></a>
+<a class="indexterm" name="id389500"></a>
 </p><pre class="screen">
 net rpc printer MIGRATE SECURITY [printer] [misc. options] [targets]
 </pre><p>
 	Printer configuration settings include factors such as paper size and default paper orientation.
 	These can be migrated from the Windows print server to the Samba server with this command:
-<a class="indexterm" name="id2625682"></a>
+<a class="indexterm" name="id389519"></a>
 </p><pre class="screen">
 net rpc printer MIGRATE SETTINGS [printer] [misc. options] [targets]
 </pre><p>
@@ -1263,14 +1263,14 @@
 </p><pre class="screen">
 net rpc printer MIGRATE ALL [printer] [misc. options] [targets]
 </pre><p>
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2625716"></a>Controlling Open Files</h2></div></div></div><p>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id389550"></a>Controlling Open Files</h2></div></div></div><p>
 	The man page documents the <code class="literal">net file</code> function suite, which provides the tools to
 	close open files using either RAP or RPC function calls. Please refer to the man page for specific
 	usage information.
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2625736"></a>Session and Connection Management</h2></div></div></div><p>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id389567"></a>Session and Connection Management</h2></div></div></div><p>
 	The session management interface of the <code class="literal">net session</code> command uses the old RAP
 	method to obtain the list of connections to the Samba server, as shown here:
-<a class="indexterm" name="id2625751"></a>
+<a class="indexterm" name="id389582"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rap session -S MERLIN -Uroot%not24get
 Computer             User name            Client Type        Opens Idle time
@@ -1285,11 +1285,11 @@
 </p><pre class="screen">
 <code class="prompt">root# </code> net rap session close marvel -Uroot%not24get
 </pre><p>
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2625801"></a>Printers and ADS</h2></div></div></div><p>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id389627"></a>Printers and ADS</h2></div></div></div><p>
 	When Samba-3 is used within an MS Windows ADS environment, printers shared via Samba will not be browseable
 	until they have been published to the ADS domain. Information regarding published printers may be obtained
 	from the ADS server by executing the <code class="literal">net ads print info</code> command following this syntax:
-<a class="indexterm" name="id2625820"></a>
+<a class="indexterm" name="id389643"></a>
 </p><pre class="screen">
 net ads printer info &lt;printer_name&gt; &lt;server_name&gt; -Uadministrator%secret
 </pre><p>
@@ -1297,26 +1297,26 @@
 	returned.
 	</p><p>
 	To publish (make available) a printer to ADS, execute the following command:
-<a class="indexterm" name="id2625846"></a>
+<a class="indexterm" name="id389666"></a>
 </p><pre class="screen">
 net ads printer publish &lt;printer_name&gt; -Uadministrator%secret
 </pre><p>
 	This publishes a printer from the local Samba server to ADS.
 	</p><p>
 	Removal of a Samba printer from ADS is achieved by executing this command:
-<a class="indexterm" name="id2625871"></a>
+<a class="indexterm" name="id389688"></a>
 </p><pre class="screen">
 net ads printer remove &lt;printer_name&gt; -Uadministrator%secret
 </pre><p>
 	</p><p>
 	A generic search (query) can also be made to locate a printer across the entire ADS domain by executing:
-<a class="indexterm" name="id2625895"></a>
+<a class="indexterm" name="id389710"></a>
 </p><pre class="screen">
 net ads printer search &lt;printer_name&gt; -Uadministrator%secret
 </pre><p>
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2625917"></a>Manipulating the Samba Cache</h2></div></div></div><p>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id389730"></a>Manipulating the Samba Cache</h2></div></div></div><p>
 	Please refer to the <code class="literal">net</code> command man page for information regarding cache management.
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2625934"></a>Managing IDMAP UID/SID Mappings</h2></div></div></div><p>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id389747"></a>Managing IDMAP UID/SID Mappings</h2></div></div></div><p>
 	The IDMAP UID to SID, and SID to UID, mappings that are created by <code class="literal">winbindd</code> can be
 	backed up to a text file. The text file can be manually edited, although it is highly recommended that
 	you attempt this only if you know precisely what you are doing.
@@ -1327,7 +1327,7 @@
 	</p><p>
 	Winbind must be shut down to dump the IDMAP file. Before restoring a dump file, shut down
 	<code class="literal">winbindd</code> and delete the old <code class="filename">winbindd_idmap.tdb</code> file.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2625978"></a>Creating an IDMAP Database Dump File</h3></div></div></div><p>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id389785"></a>Creating an IDMAP Database Dump File</h3></div></div></div><p>
 	The IDMAP database can be dumped to a text file as shown here:
 </p><pre class="screen">
 net idmap dump &lt;full_path_and_tdb_filename&gt; &gt; dumpfile.txt
@@ -1337,7 +1337,7 @@
 </p><pre class="screen">
 net idmap dump /var/lib/samba/winbindd_idmap.tdb &gt; idmap_dump.txt
 </pre><p>
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2626014"></a>Restoring the IDMAP Database Dump File</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id389816"></a>Restoring the IDMAP Database Dump File</h3></div></div></div><p>
 	The IDMAP dump file can be restored using the following command:
 </p><pre class="screen">
 net idmap restore &lt;full_path_and_tdb_filename&gt; &lt; dumpfile.txt
@@ -1350,7 +1350,7 @@
 	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="netmisc1"></a>Other Miscellaneous Operations</h2></div></div></div><p>
 	The following command is useful for obtaining basic statistics regarding a Samba domain. This command does
 	not work with current Windows XP Professional clients.
-<a class="indexterm" name="id2626065"></a>
+<a class="indexterm" name="id389862"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc info
 Domain Name: RAPIDFLY
@@ -1363,7 +1363,7 @@
 	</p><p>
 	Another useful tool is the <code class="literal">net time</code> tool set. This tool may be used to query the
 	current time on the target server as shown here:
-<a class="indexterm" name="id2626102"></a>
+<a class="indexterm" name="id389896"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net time -S SAURON
 Tue May 17 00:50:43 2005
@@ -1371,19 +1371,19 @@
 	In the event that it is the intent to pass the time information obtained to the UNIX
 	<code class="literal">/bin/time</code>, it is a good idea to obtain the time from the target server in a format
 	that is ready to be passed through. This may be done by executing:
-<a class="indexterm" name="id2626133"></a>
+<a class="indexterm" name="id389924"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net time system -S FRODO
 051700532005.16
 </pre><p>
 	The time can be set on a target server by executing:
-<a class="indexterm" name="id2626158"></a>
+<a class="indexterm" name="id389948"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net time set -S MAGGOT -U Administrator%not24get
 Tue May 17 00:55:30 MDT 2005
 </pre><p>
 	It is possible to obtain the time zone of a server by executing the following command against it:
-<a class="indexterm" name="id2626183"></a>
+<a class="indexterm" name="id389972"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net time zone -S SAURON
 -0600

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/NetworkBrowsing.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/NetworkBrowsing.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/NetworkBrowsing.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,36 +1,36 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 10. Network Browsing</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="ChangeNotes.html" title="Chapter 9. Important and Critical Change Notes for the Samba 3.x Series"><link rel="next" href="passdb.html" title="Chapter 11. Account Information Databases"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 10. Network Browsing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ChangeNotes.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="passdb.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="NetworkBrowsing"></a>Chapter 10. Network Browsing</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jonathan</span> <span class="surname">Johnson</span></h3><div class="affiliation"><span class="orgname">Sutinen Consulting, Inc.<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jon at sutinen.com">jon at sutinen.com</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">July 5, 1998</p></div><div><p class="pubdate">Updated: September 20, 2006</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="NetworkBrowsing.html#id2601603">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="NetworkBrowsing.html#id2601786">What Is Browsing?</a></span></dt><dt><span class="sect1"><a href="NetworkBrowsing.html#netdiscuss">Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2602859">TCP/IP without NetBIOS</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#adsdnstech">DNS and Active Directory</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id2603410">How Browsing Functions</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2604354">Domain Browsing Configuration</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2604955">Making Samba the Domain Master</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2605195">Note about Broadcast Addresses</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2605217">Multiple Interfaces</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2605403">Use of the Remote Announce Parameter</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2605543">Use of the Remote Browse Sync Parameter</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id2605636">WINS: The Windows Internetworking Name Server</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id2605907">WINS Server Configuration</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2606228">WINS Replication</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2606281">Static WINS Entries</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id2606512">Helpful Hints</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id2606524">Windows Networking Protocols</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2606674">Name Resolution Order</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id2606877">Technical Overview of Browsing</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id2606970">Browsing Support in Samba</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2607167">Problem Resolution</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2607418">Cross-Subnet Browsing</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id2608431">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id2608457">Flushing the Samba NetBIOS Name Cache</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2608530">Server Resources Cannot Be Listed</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2608579">I Get an "<span class="errorname">Unable to browse the network</span>" Error</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2608626">Browsing of Shares and Directories is Very Slow</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2608826">Invalid Cached Share References Affects Network Browsing</a></span></dt></dl></dd></dl></div><p>
-<a class="indexterm" name="id2601513"></a>
-<a class="indexterm" name="id2601520"></a>
-<a class="indexterm" name="id2601527"></a>
-<a class="indexterm" name="id2601534"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 10. Network Browsing</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="ChangeNotes.html" title="Chapter 9. Important and Critical Change Notes for the Samba 3.x Series"><link rel="next" href="passdb.html" title="Chapter 11. Account Information Databases"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 10. Network Browsing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ChangeNotes.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="passdb.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="NetworkBrowsing"></a>Chapter 10. Network Browsing</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jonathan</span> <span class="surname">Johnson</span></h3><div class="affiliation"><span class="orgname">Sutinen Consulting, Inc.<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jon at sutinen.com">jon at sutinen.com</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">July 5, 1998</p></div><div><p class="pubdate">Updated: September 20, 2006</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="NetworkBrowsing.html#id367309">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="NetworkBrowsing.html#id367475">What Is Browsing?</a></span></dt><dt><span class="sect1"><a href="NetworkBrowsing.html#netdiscuss">Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id368472">TCP/IP without NetBIOS</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#adsdnstech">DNS and Active Directory</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id368969">How Browsing Functions</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id369843">Domain Browsing Configuration</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id370405">Making Samba the Domain Master</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id370625">Note about Broadcast Addresses</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id370644">Multiple Interfaces</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id370820">Use of the Remote Announce Parameter</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id370948">Use of the Remote Browse Sync Parameter</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id371035">WINS: The Windows Internetworking Name Server</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id371282">WINS Server Configuration</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id371576">WINS Replication</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id371626">Static WINS Entries</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id371843">Helpful Hints</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id371853">Windows Networking Protocols</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id371983">Name Resolution Order</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id372177">Technical Overview of Browsing</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id372256">Browsing Support in Samba</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id372438">Problem Resolution</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id372672">Cross-Subnet Browsing</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id373613">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id373637">Flushing the Samba NetBIOS Name Cache</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id373702">Server Resources Cannot Be Listed</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id373747">I Get an "<span class="errorname">Unable to browse the network</span>" Error</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id373792">Browsing of Shares and Directories is Very Slow</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id373973">Invalid Cached Share References Affects Network Browsing</a></span></dt></dl></dd></dl></div><p>
+<a class="indexterm" name="id367228"></a>
+<a class="indexterm" name="id367234"></a>
+<a class="indexterm" name="id367241"></a>
+<a class="indexterm" name="id367248"></a>
 This chapter contains detailed information as well as a fast-track guide to
 implementing browsing across subnets and/or across workgroups (or domains).
 WINS is the best tool for resolution of NetBIOS names to IP addresses; however, WINS is
 not involved in browse list handling except by way of name-to-address resolution.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2601551"></a>
+<a class="indexterm" name="id367262"></a>
 What is WINS?
 </p><p>
 WINS is a facility that provides resolution of a NetBIOS name to its IP address. WINS is like a
 Dynamic-DNS service for NetBIOS networking names.
 </p></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2601568"></a>
-<a class="indexterm" name="id2601575"></a>
-<a class="indexterm" name="id2601582"></a>
-<a class="indexterm" name="id2601588"></a>
+<a class="indexterm" name="id367278"></a>
+<a class="indexterm" name="id367285"></a>
+<a class="indexterm" name="id367292"></a>
+<a class="indexterm" name="id367298"></a>
 MS Windows 2000 and later versions can be configured to operate with no NetBIOS
 over TCP/IP. Samba-3 and later versions also support this mode of operation.
 When the use of NetBIOS over TCP/IP has been disabled, the primary
 means for resolution of MS Windows machine names is via DNS and Active Directory.
 The following information assumes that your site is running NetBIOS over TCP/IP.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2601603"></a>Features and Benefits</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id367309"></a>Features and Benefits</h2></div></div></div><p>
 Charles Dickens once referred to the past in these words: &#8220;<span class="quote"><span class="emphasis"><em>It was the best of times,
 it was the worst of times.</em></span></span>&#8221; The more we look back, the more we long for what was and
 hope it never returns.
 </p><p>
-<a class="indexterm" name="id2601622"></a>
-<a class="indexterm" name="id2601629"></a>
-<a class="indexterm" name="id2601636"></a>
+<a class="indexterm" name="id367326"></a>
+<a class="indexterm" name="id367333"></a>
+<a class="indexterm" name="id367340"></a>
 For many MS Windows network administrators, that statement sums up their feelings about
 NetBIOS networking precisely. For those who mastered NetBIOS networking, its fickle
 nature was just par for the course. For those who never quite managed to tame its
@@ -43,40 +43,40 @@
 ability to germinate at any time of year, given the right conditions, are some of the
 features that make it such a persistent weed.
 </p><p>
-<a class="indexterm" name="id2601665"></a>
-<a class="indexterm" name="id2601675"></a>
-<a class="indexterm" name="id2601681"></a>
-<a class="indexterm" name="id2601688"></a>
-<a class="indexterm" name="id2601695"></a>
+<a class="indexterm" name="id367363"></a>
+<a class="indexterm" name="id367372"></a>
+<a class="indexterm" name="id367379"></a>
+<a class="indexterm" name="id367386"></a>
+<a class="indexterm" name="id367393"></a>
 In this chapter we explore vital aspects of Server Message Block (SMB) networking with
 a particular focus on SMB as implemented through running NetBIOS (Network Basic
 Input/Output System) over TCP/IP. Since Samba does not implement SMB or NetBIOS over
 any other protocols, we need to know how to configure our network environment and simply
 remember to use nothing but TCP/IP on all our MS Windows network clients.
 </p><p>
-<a class="indexterm" name="id2601712"></a>
-<a class="indexterm" name="id2601719"></a>
+<a class="indexterm" name="id367406"></a>
+<a class="indexterm" name="id367413"></a>
 Samba provides the ability to implement a WINS (Windows Internetworking Name Server)
 and implements extensions to Microsoft's implementation of WINS. These extensions
 help Samba to effect stable WINS operations beyond the normal scope of MS WINS.
 </p><p>
-<a class="indexterm" name="id2601733"></a>
-<a class="indexterm" name="id2601740"></a>
-<a class="indexterm" name="id2601747"></a>
+<a class="indexterm" name="id367425"></a>
+<a class="indexterm" name="id367432"></a>
+<a class="indexterm" name="id367439"></a>
 WINS is exclusively a service that applies only to those systems
 that run NetBIOS over TCP/IP. MS Windows 200x/XP have the capacity to operate with
 support for NetBIOS disabled, in which case WINS is of no relevance. Samba supports this also.
 </p><p>
-<a class="indexterm" name="id2601762"></a>
-<a class="indexterm" name="id2601768"></a>
-<a class="indexterm" name="id2601775"></a>
+<a class="indexterm" name="id367451"></a>
+<a class="indexterm" name="id367458"></a>
+<a class="indexterm" name="id367464"></a>
 For those networks on which NetBIOS has been disabled (i.e., WINS is not required),
 the use of DNS is necessary for hostname resolution.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2601786"></a>What Is Browsing?</h2></div></div></div><p>
-<a class="indexterm" name="id2601794"></a>
-<a class="indexterm" name="id2601801"></a>
-<a class="indexterm" name="id2601808"></a>
-<a class="indexterm" name="id2601815"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id367475"></a>What Is Browsing?</h2></div></div></div><p>
+<a class="indexterm" name="id367482"></a>
+<a class="indexterm" name="id367489"></a>
+<a class="indexterm" name="id367496"></a>
+<a class="indexterm" name="id367503"></a>
 To most people, browsing means they can see the MS Windows and Samba servers
 in the Network Neighborhood, and when the computer icon for a particular server is
 clicked, it opens up and shows the shares and printers available on the target server.
@@ -84,9 +84,9 @@
 What seems so simple is in fact a complex interaction of different technologies.
 The technologies (or methods) employed in making all of this work include:
 </p><div class="itemizedlist"><ul type="disc"><li><p>MS Windows machines register their presence to the network.</p></li><li><p>Machines announce themselves to other machines on the network.</p></li><li><p>One or more machines on the network collate the local announcements.</p></li><li><p>The client machine finds the machine that has the collated list of machines.</p></li><li><p>The client machine is able to resolve the machine names to IP addresses.</p></li><li><p>The client machine is able to connect to a target machine.</p></li></ul></div><p>
-<a class="indexterm" name="id2601872"></a>
-<a class="indexterm" name="id2601879"></a>
-<a class="indexterm" name="id2601886"></a>
+<a class="indexterm" name="id367553"></a>
+<a class="indexterm" name="id367560"></a>
+<a class="indexterm" name="id367566"></a>
 The Samba application that controls browse list management and name resolution is
 called <code class="filename">nmbd</code>. The configuration parameters involved in nmbd's operation are:
 </p><p>
@@ -99,33 +99,33 @@
 Those marked with an (*) are the only options that commonly may need to be modified. Even if none of these
 parameters is set, <code class="filename">nmbd</code> will still do its job.
 </p><p>
-<a class="indexterm" name="id2602121"></a>
-<a class="indexterm" name="id2602127"></a>
-<a class="indexterm" name="id2602134"></a>
-<a class="indexterm" name="id2602141"></a>
-<a class="indexterm" name="id2602148"></a>
+<a class="indexterm" name="id367790"></a>
+<a class="indexterm" name="id367797"></a>
+<a class="indexterm" name="id367804"></a>
+<a class="indexterm" name="id367810"></a>
+<a class="indexterm" name="id367817"></a>
 For Samba, the WINS Server and WINS Support are mutually exclusive options. When <code class="literal">nmbd</code> is
 started it will fail to execute if both options are set in the <code class="filename">smb.conf</code> file. The <code class="literal">nmbd</code>
 understands that when it spawns an instance of itself to run as a WINS server that it has to use its own WINS
 server also.
 </p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="netdiscuss"></a>Discussion</h2></div></div></div><p>
-<a class="indexterm" name="id2602190"></a>
-<a class="indexterm" name="id2602197"></a>
-<a class="indexterm" name="id2602204"></a>
-<a class="indexterm" name="id2602211"></a>
+<a class="indexterm" name="id367857"></a>
+<a class="indexterm" name="id367864"></a>
+<a class="indexterm" name="id367871"></a>
+<a class="indexterm" name="id367878"></a>
 All MS Windows networking uses SMB-based messaging.  SMB messaging may be implemented with or without NetBIOS.
 MS Windows 200x supports NetBIOS over TCP/IP for backwards compatibility. Microsoft appears intent on phasing
 out NetBIOS support.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2602223"></a>NetBIOS over TCP/IP</h3></div></div></div><p>
-<a class="indexterm" name="id2602231"></a>
-<a class="indexterm" name="id2602238"></a>
-<a class="indexterm" name="id2602245"></a>
-<a class="indexterm" name="id2602251"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id367888"></a>NetBIOS over TCP/IP</h3></div></div></div><p>
+<a class="indexterm" name="id367895"></a>
+<a class="indexterm" name="id367902"></a>
+<a class="indexterm" name="id367909"></a>
+<a class="indexterm" name="id367916"></a>
 Samba implements NetBIOS, as does MS Windows NT/200x/XP, by encapsulating it over TCP/IP.
 NetBIOS-based networking uses broadcast messaging to effect browse list management. When running NetBIOS over
 TCP/IP, this uses UDP-based messaging.  UDP messages can be broadcast or unicast.
 </p><p>
-<a class="indexterm" name="id2602266"></a>
+<a class="indexterm" name="id367928"></a>
 Normally, only unicast UDP messaging can be forwarded by routers. The <a class="link" href="smb.conf.5.html#REMOTEANNOUNCE">remote announce</a>
 parameter to smb.conf helps to project browse announcements to remote network segments via unicast UDP.
 Similarly, the <a class="link" href="smb.conf.5.html#REMOTEBROWSESYNC">remote browse sync</a> parameter of <code class="filename">smb.conf</code> implements browse list
@@ -133,54 +133,54 @@
 </p><p>
 The methods used by MS Windows to perform name lookup requests (name resolution) is determined by a
 configuration parameter called the NetBIOS node-type. There are four basic NetBIOS node types:
-</p><a class="indexterm" name="id2602314"></a><a class="indexterm" name="id2602321"></a><a class="indexterm" name="id2602328"></a><a class="indexterm" name="id2602335"></a><a class="indexterm" name="id2602342"></a><a class="indexterm" name="id2602348"></a><a class="indexterm" name="id2602355"></a><a class="indexterm" name="id2602362"></a><div class="itemizedlist"><ul type="disc"><li><p><span class="emphasis"><em>b-node (type 0x01):</em></span> The Windows client will use only
+</p><a class="indexterm" name="id367970"></a><a class="indexterm" name="id367977"></a><a class="indexterm" name="id367984"></a><a class="indexterm" name="id367991"></a><a class="indexterm" name="id367998"></a><a class="indexterm" name="id368004"></a><a class="indexterm" name="id368011"></a><a class="indexterm" name="id368018"></a><div class="itemizedlist"><ul type="disc"><li><p><span class="emphasis"><em>b-node (type 0x01):</em></span> The Windows client will use only
 	NetBIOS broadcast requests using UDP broadcast.</p></li><li><p><span class="emphasis"><em>p-node (type 0x02):</em></span> The Windows client will use point-to-point
 	(NetBIOS unicast) requests using UDP unicast directed to a WINS server.</p></li><li><p><span class="emphasis"><em>m-node (type 0x04):</em></span> The Windows client will first use
 	NetBIOS broadcast requests using UDP broadcast, then it will use (NetBIOS unicast)
 	requests using UDP unicast directed to a WINS server.</p></li><li><p><span class="emphasis"><em>h-node (type 0x08):</em></span> The Windows client will use
 	(NetBIOS unicast) requests using UDP unicast directed to a WINS server, then it will use
 	NetBIOS broadcast requests using UDP broadcast.</p></li></ul></div><p>
-<a class="indexterm" name="id2602411"></a>
-<a class="indexterm" name="id2602418"></a>
-<a class="indexterm" name="id2602424"></a>
-<a class="indexterm" name="id2602432"></a>
-<a class="indexterm" name="id2602438"></a>
-<a class="indexterm" name="id2602445"></a>
+<a class="indexterm" name="id368062"></a>
+<a class="indexterm" name="id368069"></a>
+<a class="indexterm" name="id368075"></a>
+<a class="indexterm" name="id368082"></a>
+<a class="indexterm" name="id368089"></a>
+<a class="indexterm" name="id368096"></a>
 The default Windows network client (or server) network configuration enables NetBIOS over TCP/IP
 and b-node configuration. The use of WINS makes most sense with h-node (hybrid mode) operation so that
 in the event of a WINS breakdown or non-availability, the client can use broadcast-based name resolution.
 </p><p>
-<a class="indexterm" name="id2602461"></a>
-<a class="indexterm" name="id2602470"></a>
-<a class="indexterm" name="id2602477"></a>
-<a class="indexterm" name="id2602483"></a>
-<a class="indexterm" name="id2602490"></a>
-<a class="indexterm" name="id2602497"></a>
-<a class="indexterm" name="id2602504"></a>
+<a class="indexterm" name="id368109"></a>
+<a class="indexterm" name="id368118"></a>
+<a class="indexterm" name="id368124"></a>
+<a class="indexterm" name="id368131"></a>
+<a class="indexterm" name="id368138"></a>
+<a class="indexterm" name="id368144"></a>
+<a class="indexterm" name="id368151"></a>
 In those networks where Samba is the only SMB server technology, wherever possible <code class="filename">nmbd</code>
 should be configured on one machine as the WINS server. This makes it easy to manage the browsing environment.
 If each network segment is configured with its own Samba WINS server, then the only way to get cross-segment
 browsing to work is by using the <a class="link" href="smb.conf.5.html#REMOTEANNOUNCE">remote announce</a> and the <a class="link" href="smb.conf.5.html#REMOTEBROWSESYNC">remote browse sync</a> parameters to your <code class="filename">smb.conf</code> file.
 </p><p>
-<a class="indexterm" name="id2602555"></a>
+<a class="indexterm" name="id368197"></a>
 If only one WINS server is used for an entire multisegment network, then
 the use of the <a class="link" href="smb.conf.5.html#REMOTEANNOUNCE">remote announce</a> and the
 <a class="link" href="smb.conf.5.html#REMOTEBROWSESYNC">remote browse sync</a> parameters should not be necessary.
 </p><p>
-<a class="indexterm" name="id2602590"></a>
+<a class="indexterm" name="id368230"></a>
 As of Samba-3, WINS replication is being worked on. The bulk of the code has been committed, but it still
 needs maturation. This is not a supported feature of the Samba-3.0.20 release. Hopefully, this will become a
 supported feature of one of the Samba-3 release series. The delay is caused by the fact that this feature has
 not been of sufficient significance to inspire someone to pay a developer to complete it.
 </p><p>
-<a class="indexterm" name="id2602609"></a>
-<a class="indexterm" name="id2602616"></a>
-<a class="indexterm" name="id2602623"></a>
-<a class="indexterm" name="id2602629"></a>
-<a class="indexterm" name="id2602636"></a>
-<a class="indexterm" name="id2602643"></a>
-<a class="indexterm" name="id2602650"></a>
-<a class="indexterm" name="id2602657"></a>
+<a class="indexterm" name="id368245"></a>
+<a class="indexterm" name="id368252"></a>
+<a class="indexterm" name="id368259"></a>
+<a class="indexterm" name="id368266"></a>
+<a class="indexterm" name="id368272"></a>
+<a class="indexterm" name="id368279"></a>
+<a class="indexterm" name="id368286"></a>
+<a class="indexterm" name="id368293"></a>
 Right now Samba WINS does not support MS-WINS replication. This means that when setting up Samba as a WINS
 server, there must only be one <code class="filename">nmbd</code> configured as a WINS server on the network. Some
 sites have used multiple Samba WINS servers for redundancy (one server per subnet) and then used
@@ -194,15 +194,15 @@
 DNS; consequently, DNS is a poor substitute for WINS given that when NetBIOS over TCP/IP is used, Windows
 clients are designed to use WINS.
 </p><p>
-<a class="indexterm" name="id2602718"></a>
-<a class="indexterm" name="id2602725"></a>
-<a class="indexterm" name="id2602732"></a>
+<a class="indexterm" name="id368342"></a>
+<a class="indexterm" name="id368349"></a>
+<a class="indexterm" name="id368356"></a>
 Lastly, take note that browse lists are a collection of unreliable broadcast
 messages that are repeated at intervals of not more than 15 minutes. This means
 that it will take time to establish a browse list, and it can take up to 45
 minutes to stabilize, particularly across network segments.
 </p><p>
-<a class="indexterm" name="id2602747"></a>
+<a class="indexterm" name="id368368"></a>
 When an MS Windows 200x/XP system attempts to resolve a host name to an IP address, it follows a defined path:
 </p><div class="orderedlist"><ol type="1"><li><p>
 	Checks the <code class="filename">hosts</code> file. It is located in <code class="filename">%SystemRoot%\System32\Drivers\etc</code>.
@@ -217,46 +217,46 @@
 	</p></li><li><p>
 	Looks up entries in LMHOSTS, located in <code class="filename">%SystemRoot%\System32\Drivers\etc</code>.
 	</p></li></ol></div><p>
-<a class="indexterm" name="id2602814"></a>
-<a class="indexterm" name="id2602821"></a>
-<a class="indexterm" name="id2602828"></a>
-<a class="indexterm" name="id2602835"></a>
+<a class="indexterm" name="id368433"></a>
+<a class="indexterm" name="id368440"></a>
+<a class="indexterm" name="id368446"></a>
+<a class="indexterm" name="id368453"></a>
 Given the nature of how the NetBIOS over TCP/IP protocol is implemented, only WINS is capable of resolving
 with any reliability name lookups for service-oriented names such as TEMPTATION&lt;1C&gt;  a NetBIOS
 name query that seeks to find network logon servers. DNS has no concept of service-oriented names such as
 this. In fact, the Microsoft ADS implementation specifically manages a whole range of extended
 service-oriented DNS entries. This type of facility is not implemented and is not supported for the NetBIOS
 over TCP/IP protocol namespace.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2602859"></a>TCP/IP without NetBIOS</h3></div></div></div><p>
-<a class="indexterm" name="id2602866"></a>
-<a class="indexterm" name="id2602873"></a>
-<a class="indexterm" name="id2602880"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id368472"></a>TCP/IP without NetBIOS</h3></div></div></div><p>
+<a class="indexterm" name="id368479"></a>
+<a class="indexterm" name="id368485"></a>
+<a class="indexterm" name="id368492"></a>
 All TCP/IP-enabled systems use various forms of hostname resolution. The primary
 methods for TCP/IP hostname resolution involve either a static file (<code class="filename">/etc/hosts</code>)
 or the Domain Name System (DNS). DNS is the technology that makes
 the Internet usable. DNS-based hostname resolution is supported by nearly all
 TCP/IP-enabled systems. Only a few embedded TCP/IP systems do not support DNS.
 </p><p>
-<a class="indexterm" name="id2602902"></a>
-<a class="indexterm" name="id2602909"></a>
-<a class="indexterm" name="id2602915"></a>
-<a class="indexterm" name="id2602922"></a>
+<a class="indexterm" name="id368511"></a>
+<a class="indexterm" name="id368518"></a>
+<a class="indexterm" name="id368524"></a>
+<a class="indexterm" name="id368531"></a>
 Windows 200x/XP can register its hostname with a Dynamic DNS server (DDNS). It is possible to force register with a
 dynamic DNS server in Windows 200x/XP using <code class="literal">ipconfig /registerdns</code>.
 </p><p>
-<a class="indexterm" name="id2602943"></a>
-<a class="indexterm" name="id2602950"></a>
-<a class="indexterm" name="id2602956"></a>
+<a class="indexterm" name="id368551"></a>
+<a class="indexterm" name="id368557"></a>
+<a class="indexterm" name="id368564"></a>
 With Active Directory, a correctly functioning DNS server is absolutely essential. In the absence of a working
 DNS server that has been correctly configured, MS Windows clients and servers will be unable to locate each
 other, so network services consequently will be severely impaired.
 </p><p>
-<a class="indexterm" name="id2602972"></a>
-<a class="indexterm" name="id2602978"></a>
-<a class="indexterm" name="id2602985"></a>
-<a class="indexterm" name="id2602992"></a>
-<a class="indexterm" name="id2602999"></a>
-<a class="indexterm" name="id2603006"></a>
+<a class="indexterm" name="id368576"></a>
+<a class="indexterm" name="id368583"></a>
+<a class="indexterm" name="id368590"></a>
+<a class="indexterm" name="id368597"></a>
+<a class="indexterm" name="id368604"></a>
+<a class="indexterm" name="id368610"></a>
 Use of raw SMB over TCP/IP (No NetBIOS layer) can be done only with Active Directory domains. Samba is not an
 Active Directory domain controller: ergo, it is not possible to run Samba as a domain controller and at the same
 time <span class="emphasis"><em>not</em></span> use NetBIOS. Where Samba is used as an Active Directory domain member server
@@ -265,11 +265,11 @@
 appropriate DNS entries for the Samba DMS because they will not be automatically generated either by Samba, or
 by the ADS environment.
 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="adsdnstech"></a>DNS and Active Directory</h3></div></div></div><p>
-<a class="indexterm" name="id2603041"></a>
-<a class="indexterm" name="id2603050"></a>
-<a class="indexterm" name="id2603056"></a>
-<a class="indexterm" name="id2603063"></a>
-<a class="indexterm" name="id2603070"></a>
+<a class="indexterm" name="id368639"></a>
+<a class="indexterm" name="id368648"></a>
+<a class="indexterm" name="id368655"></a>
+<a class="indexterm" name="id368661"></a>
+<a class="indexterm" name="id368668"></a>
 Occasionally we hear from UNIX network administrators who want to use a UNIX-based DDNS server in place
 of the Microsoft DNS server. While this might be desirable to some, the MS Windows 200x DNS server is
 autoconfigured to work with Active Directory. It is possible to use BIND version 8 or 9, but it will almost
@@ -277,9 +277,9 @@
 hostnames to locate essential network services.  The following are some of the default service records that
 Active Directory requires:
 </p><p>
-<a class="indexterm" name="id2603091"></a>
-<a class="indexterm" name="id2603098"></a>
-<a class="indexterm" name="id2603105"></a>
+<a class="indexterm" name="id368685"></a>
+<a class="indexterm" name="id368692"></a>
+<a class="indexterm" name="id368698"></a>
 The use of DDNS is highly recommended with Active Directory, in which case the use of BIND9 is preferred for
 its ability to adequately support the SRV (service) records that are needed for Active Directory. Of course,
 when running ADS, it makes sense to use Microsoft's own DDNS server because of the natural affinity between ADS
@@ -370,40 +370,40 @@
 ;; WHEN: Wed Oct  7 14:39:31 2004
 ;; MSG SIZE  rcvd: 171
 </pre><p>
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2603410"></a>How Browsing Functions</h2></div></div></div><p>
-<a class="indexterm" name="id2603418"></a>
-<a class="indexterm" name="id2603425"></a>
-<a class="indexterm" name="id2603432"></a>
-<a class="indexterm" name="id2603439"></a>
-<a class="indexterm" name="id2603446"></a>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id368969"></a>How Browsing Functions</h2></div></div></div><p>
+<a class="indexterm" name="id368977"></a>
+<a class="indexterm" name="id368984"></a>
+<a class="indexterm" name="id368991"></a>
+<a class="indexterm" name="id368997"></a>
+<a class="indexterm" name="id369004"></a>
 MS Windows machines register their NetBIOS names (i.e., the machine name for each service type in operation)
 on startup.  The exact method by which this name registration takes place is determined by whether or not the
 MS Windows client/server has been given a WINS server address, whether or not LMHOSTS lookup is enabled,
 whether or not DNS for NetBIOS name resolution is enabled, and so on.
 </p><p>
-<a class="indexterm" name="id2603462"></a>
-<a class="indexterm" name="id2603469"></a>
-<a class="indexterm" name="id2603476"></a>
+<a class="indexterm" name="id369018"></a>
+<a class="indexterm" name="id369024"></a>
+<a class="indexterm" name="id369031"></a>
 In the case where there is no WINS server, all name registrations as well as name lookups are done by UDP
 broadcast. This isolates name resolution to the local subnet, unless LMHOSTS is used to list all names and IP
 addresses. In such situations, Samba provides a means by which the Samba server name may be forcibly injected
 into the browse list of a remote MS Windows network (using the <a class="link" href="smb.conf.5.html#REMOTEANNOUNCE">remote announce</a>
 parameter).
 </p><p>
-<a class="indexterm" name="id2603505"></a>
-<a class="indexterm" name="id2603512"></a>
-<a class="indexterm" name="id2603518"></a>
+<a class="indexterm" name="id369055"></a>
+<a class="indexterm" name="id369062"></a>
+<a class="indexterm" name="id369068"></a>
 Where a WINS server is used, the MS Windows client will use UDP unicast to register with the WINS server. Such
 packets can be routed, and thus WINS allows name resolution to function across routed networks.
 </p><p>
-<a class="indexterm" name="id2603532"></a>
-<a class="indexterm" name="id2603538"></a>
-<a class="indexterm" name="id2603548"></a>
-<a class="indexterm" name="id2603554"></a>
-<a class="indexterm" name="id2603561"></a>
-<a class="indexterm" name="id2603568"></a>
-<a class="indexterm" name="id2603574"></a>
-<a class="indexterm" name="id2603581"></a>
+<a class="indexterm" name="id369080"></a>
+<a class="indexterm" name="id369087"></a>
+<a class="indexterm" name="id369096"></a>
+<a class="indexterm" name="id369103"></a>
+<a class="indexterm" name="id369109"></a>
+<a class="indexterm" name="id369116"></a>
+<a class="indexterm" name="id369123"></a>
+<a class="indexterm" name="id369130"></a>
 During the startup process, an election takes place to create a local master browser (LMB) if one does not
 already exist. On each NetBIOS network one machine will be elected to function as the domain master browser
 (DMB). This domain browsing has nothing to do with MS security Domain Control.  Instead, the DMB serves the
@@ -413,14 +413,14 @@
 the election criteria used, the machine with the highest uptime, or the most senior protocol version or other
 criteria, will win the election as DMB.
 </p><p>
-<a class="indexterm" name="id2603605"></a>
-<a class="indexterm" name="id2603612"></a>
-<a class="indexterm" name="id2603618"></a>
-<a class="indexterm" name="id2603625"></a>
-<a class="indexterm" name="id2603632"></a>
-<a class="indexterm" name="id2603639"></a>
-<a class="indexterm" name="id2603646"></a>
-<a class="indexterm" name="id2603653"></a>
+<a class="indexterm" name="id369146"></a>
+<a class="indexterm" name="id369153"></a>
+<a class="indexterm" name="id369160"></a>
+<a class="indexterm" name="id369166"></a>
+<a class="indexterm" name="id369173"></a>
+<a class="indexterm" name="id369180"></a>
+<a class="indexterm" name="id369187"></a>
+<a class="indexterm" name="id369194"></a>
 Where a WINS server is used, the DMB registers its IP address with the WINS server using the name of the
 domain and the NetBIOS name type 1B (e.g., DOMAIN&lt;1B&gt;). All LMBs register their IP addresses with the WINS
 server, also with the name of the domain and the NetBIOS name type of 1D. The 1B name is unique to one
@@ -428,20 +428,20 @@
 Machines that have registered the 1D name will be authoritive browse list maintainers for the network segment
 they are on. The DMB is responsible for synchronizing the browse lists it obtains from the LMBs.
 </p><p>
-<a class="indexterm" name="id2603689"></a>
+<a class="indexterm" name="id369217"></a>
 Clients wishing to browse the network make use of this list but also depend on the availability of correct
 name resolution to the respective IP address or addresses.
 </p><p>
-<a class="indexterm" name="id2603702"></a>
+<a class="indexterm" name="id369228"></a>
 Any configuration that breaks name resolution and/or browsing intrinsics will annoy users because they will
 have to put up with protracted inability to use the network services.
 </p><p>
-<a class="indexterm" name="id2603715"></a>
-<a class="indexterm" name="id2603722"></a>
-<a class="indexterm" name="id2603729"></a>
-<a class="indexterm" name="id2603736"></a>
-<a class="indexterm" name="id2603743"></a>
-<a class="indexterm" name="id2603749"></a>
+<a class="indexterm" name="id369240"></a>
+<a class="indexterm" name="id369246"></a>
+<a class="indexterm" name="id369253"></a>
+<a class="indexterm" name="id369260"></a>
+<a class="indexterm" name="id369267"></a>
+<a class="indexterm" name="id369273"></a>
 Samba supports a feature that allows forced synchronization of browse lists across routed networks using the
 <a class="link" href="smb.conf.5.html#REMOTEBROWSESYNC">remote browse sync</a> parameter in the <code class="filename">smb.conf</code> file. This causes Samba to contact the
 LMB on a remote network and to request browse list synchronization. This effectively bridges two networks that
@@ -451,12 +451,12 @@
 for cross-subnet browsing to function correctly, it is essential that a name-to-address resolution mechanism
 be provided. This mechanism could be via DNS, <code class="filename">/etc/hosts</code>, and so on.
 </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="DMB"></a>Configuring Workgroup Browsing</h3></div></div></div><p>
-<a class="indexterm" name="id2603818"></a>
-<a class="indexterm" name="id2603825"></a>
-<a class="indexterm" name="id2603832"></a>
-<a class="indexterm" name="id2603838"></a>
-<a class="indexterm" name="id2603845"></a>
-<a class="indexterm" name="id2603852"></a>
+<a class="indexterm" name="id369333"></a>
+<a class="indexterm" name="id369340"></a>
+<a class="indexterm" name="id369346"></a>
+<a class="indexterm" name="id369353"></a>
+<a class="indexterm" name="id369359"></a>
+<a class="indexterm" name="id369366"></a>
 To configure cross-subnet browsing on a network containing machines in a workgroup, not an NT domain, you need
 to set up one Samba server to be the DMB (note that this is not the same as a Primary Domain Controller,
 although in an NT domain the same machine plays both roles). The role of a DMB is to collate the browse lists
@@ -464,72 +464,72 @@
 as a DMB, each subnet would be an isolated workgroup unable to see any machines on another subnet. It is the
 presence of a DMB that makes cross-subnet browsing possible for a workgroup.
 </p><p>
-<a class="indexterm" name="id2603882"></a>
+<a class="indexterm" name="id369387"></a>
 In a workgroup environment the DMB must be a Samba server, and there must only be one DMB per workgroup name.
 To set up a Samba server as a DMB, set the following option in the <em class="parameter"><code>[global]</code></em> section
 of the <code class="filename">smb.conf</code> file:
 </p><p>
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2603913"></a><em class="parameter"><code>domain master = yes</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id369415"></a><em class="parameter"><code>domain master = yes</code></em></td></tr></table><p>
 </p><p>
-<a class="indexterm" name="id2603928"></a>
-<a class="indexterm" name="id2603934"></a>
+<a class="indexterm" name="id369430"></a>
+<a class="indexterm" name="id369437"></a>
 The DMB should preferably be the LMB for its own subnet. In order to achieve this, set the following options
 in the <em class="parameter"><code>[global]</code></em> section of the <code class="filename">smb.conf</code> file as shown in <a class="link" href="NetworkBrowsing.html#dmbexample" title="Example 10.1. Domain Master Browser smb.conf">Domain Master Browser smb.conf</a>
-</p><div class="example"><a name="dmbexample"></a><p class="title"><b>Example 10.1. Domain Master Browser smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2603989"></a><em class="parameter"><code>domain master = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2604001"></a><em class="parameter"><code>local master = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2604012"></a><em class="parameter"><code>preferred master = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2604024"></a><em class="parameter"><code>os level = 65</code></em></td></tr></table></div></div><br class="example-break"><p>
-<a class="indexterm" name="id2604039"></a>
-<a class="indexterm" name="id2604046"></a>
+</p><div class="example"><a name="dmbexample"></a><p class="title"><b>Example 10.1. Domain Master Browser smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id369489"></a><em class="parameter"><code>domain master = yes</code></em></td></tr><tr><td><a class="indexterm" name="id369501"></a><em class="parameter"><code>local master = yes</code></em></td></tr><tr><td><a class="indexterm" name="id369512"></a><em class="parameter"><code>preferred master = yes</code></em></td></tr><tr><td><a class="indexterm" name="id369524"></a><em class="parameter"><code>os level = 65</code></em></td></tr></table></div></div><br class="example-break"><p>
+<a class="indexterm" name="id369538"></a>
+<a class="indexterm" name="id369545"></a>
 The DMB may be the same machine as the WINS server, if necessary.
 </p><p>
-<a class="indexterm" name="id2604057"></a>
-<a class="indexterm" name="id2604064"></a>
-<a class="indexterm" name="id2604070"></a>
+<a class="indexterm" name="id369555"></a>
+<a class="indexterm" name="id369562"></a>
+<a class="indexterm" name="id369569"></a>
 Next, you should ensure that each of the subnets contains a machine that can act as an LMB for the workgroup.
 Any MS Windows NT/200x/XP machine should be able to do this, as will Windows 9x/Me machines (although these
 tend to get rebooted more often, so it is not such a good idea to use them). To make a Samba server an LMB,
 set the following options in the <em class="parameter"><code>[global]</code></em> section of the <code class="filename">smb.conf</code> file as shown in
 <a class="link" href="NetworkBrowsing.html#lmbexample" title="Example 10.2. Local master browser smb.conf">Local master browser smb.conf</a>
-</p><div class="example"><a name="lmbexample"></a><p class="title"><b>Example 10.2. Local master browser smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2604128"></a><em class="parameter"><code>domain master = no</code></em></td></tr><tr><td><a class="indexterm" name="id2604140"></a><em class="parameter"><code>local master = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2604151"></a><em class="parameter"><code>preferred master = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2604163"></a><em class="parameter"><code>os level = 65</code></em></td></tr></table></div></div><br class="example-break"><p>
-<a class="indexterm" name="id2604178"></a>
+</p><div class="example"><a name="lmbexample"></a><p class="title"><b>Example 10.2. Local master browser smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id369624"></a><em class="parameter"><code>domain master = no</code></em></td></tr><tr><td><a class="indexterm" name="id369635"></a><em class="parameter"><code>local master = yes</code></em></td></tr><tr><td><a class="indexterm" name="id369647"></a><em class="parameter"><code>preferred master = yes</code></em></td></tr><tr><td><a class="indexterm" name="id369658"></a><em class="parameter"><code>os level = 65</code></em></td></tr></table></div></div><br class="example-break"><p>
+<a class="indexterm" name="id369673"></a>
 Do not do this for more than one Samba server on each subnet, or they will war with
 each other over which is to be the LMB.
 </p><p>
-<a class="indexterm" name="id2604190"></a>
-<a class="indexterm" name="id2604196"></a>
+<a class="indexterm" name="id369684"></a>
+<a class="indexterm" name="id369690"></a>
 The <a class="link" href="smb.conf.5.html#LOCALMASTER">local master</a> parameter allows Samba to act as a
 LMB. The <a class="link" href="smb.conf.5.html#PREFERREDMASTER">preferred master</a> causes <code class="literal">nmbd</code>
 to force a browser election on startup and the <a class="link" href="smb.conf.5.html#OSLEVEL">os level</a>
 parameter sets Samba high enough so it should win any browser elections.
 </p><p>
-<a class="indexterm" name="id2604249"></a>
+<a class="indexterm" name="id369739"></a>
 If you have an NT machine on the subnet that you wish to be the LMB, you can disable Samba from
 becoming an LMB by setting the following options in the <em class="parameter"><code>[global]</code></em> section of the
 <code class="filename">smb.conf</code> file as shown in <a class="link" href="NetworkBrowsing.html#nombexample" title="Example 10.3. smb.conf for Not Being a Master Browser">smb.conf for Not Being a Master Browser</a>.
 </p><p>
-</p><div class="example"><a name="nombexample"></a><p class="title"><b>Example 10.3. smb.conf for Not Being a Master Browser</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2604304"></a><em class="parameter"><code>domain master = no</code></em></td></tr><tr><td><a class="indexterm" name="id2604316"></a><em class="parameter"><code>local master = no</code></em></td></tr><tr><td><a class="indexterm" name="id2604328"></a><em class="parameter"><code>preferred master = no</code></em></td></tr><tr><td><a class="indexterm" name="id2604340"></a><em class="parameter"><code>os level = 0</code></em></td></tr></table></div></div><p><br class="example-break">
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2604354"></a>Domain Browsing Configuration</h3></div></div></div><p>
-<a class="indexterm" name="id2604362"></a>
-<a class="indexterm" name="id2604369"></a>
-<a class="indexterm" name="id2604376"></a>
-<a class="indexterm" name="id2604382"></a>
+</p><div class="example"><a name="nombexample"></a><p class="title"><b>Example 10.3. smb.conf for Not Being a Master Browser</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id369794"></a><em class="parameter"><code>domain master = no</code></em></td></tr><tr><td><a class="indexterm" name="id369805"></a><em class="parameter"><code>local master = no</code></em></td></tr><tr><td><a class="indexterm" name="id369816"></a><em class="parameter"><code>preferred master = no</code></em></td></tr><tr><td><a class="indexterm" name="id369828"></a><em class="parameter"><code>os level = 0</code></em></td></tr></table></div></div><p><br class="example-break">
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id369843"></a>Domain Browsing Configuration</h3></div></div></div><p>
+<a class="indexterm" name="id369850"></a>
+<a class="indexterm" name="id369857"></a>
+<a class="indexterm" name="id369864"></a>
+<a class="indexterm" name="id369870"></a>
 If you are adding Samba servers to a Windows NT domain, then you must not set up a Samba server as a DMB.  By
 default, a Windows NT PDC for a domain is also the DMB for that domain. Network browsing may break if a Samba
 server other than the PDC registers the DMB NetBIOS name (<em class="replaceable"><code>DOMAIN</code></em>&lt;1B&gt;) with
 WINS.
 </p><p>
-<a class="indexterm" name="id2604401"></a>
+<a class="indexterm" name="id369887"></a>
 For subnets other than the one containing the Windows NT PDC, you may set up Samba servers as LMBs as
 described. To make a Samba server a Local Master Browser, set the following options in the <em class="parameter"><code>[global]</code></em> section of the <code class="filename">smb.conf</code> file as shown in <a class="link" href="NetworkBrowsing.html#remsmb" title="Example 10.4. Local Master Browser smb.conf">Local Master Browser
 smb.conf</a>
-</p><div class="example"><a name="remsmb"></a><p class="title"><b>Example 10.4. Local Master Browser smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2604457"></a><em class="parameter"><code>domain master = no</code></em></td></tr><tr><td><a class="indexterm" name="id2604469"></a><em class="parameter"><code>local master = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2604481"></a><em class="parameter"><code>preferred master = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2604492"></a><em class="parameter"><code>os level = 65</code></em></td></tr></table></div></div><br class="example-break"><p>
-<a class="indexterm" name="id2604507"></a>
-<a class="indexterm" name="id2604514"></a>
+</p><div class="example"><a name="remsmb"></a><p class="title"><b>Example 10.4. Local Master Browser smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id369940"></a><em class="parameter"><code>domain master = no</code></em></td></tr><tr><td><a class="indexterm" name="id369952"></a><em class="parameter"><code>local master = yes</code></em></td></tr><tr><td><a class="indexterm" name="id369963"></a><em class="parameter"><code>preferred master = yes</code></em></td></tr><tr><td><a class="indexterm" name="id369975"></a><em class="parameter"><code>os level = 65</code></em></td></tr></table></div></div><br class="example-break"><p>
+<a class="indexterm" name="id369989"></a>
+<a class="indexterm" name="id369996"></a>
 If you wish to have a Samba server fight the election with machines on the same subnet, you may set the
 <a class="link" href="smb.conf.5.html#OSLEVEL">os level</a> parameter to lower levels.  By doing this you can tune the order of machines
 that will become LMBs if they are running. For more details on this, refer to <a class="link" href="NetworkBrowsing.html#browse-force-master" title="Forcing Samba to Be the Master">Forcing Samba to Be the Master</a>.
 </p><p>
-<a class="indexterm" name="id2604549"></a>
-<a class="indexterm" name="id2604556"></a>
-<a class="indexterm" name="id2604563"></a>
+<a class="indexterm" name="id370027"></a>
+<a class="indexterm" name="id370033"></a>
+<a class="indexterm" name="id370040"></a>
 If you have Windows NT machines that are members of the domain on all subnets and you are sure they will
 always be running, you can disable Samba from taking part in browser elections and ever becoming an LMB by
 setting the following options in the <em class="parameter"><code>[global]</code></em> section of the <code class="filename">smb.conf</code> file as shown
@@ -537,13 +537,13 @@
 </p><p>
 </p><div class="example"><a name="xremmb"></a><p class="title"><b>Example 10.5. <code class="filename">smb.conf</code> for Not Being a master browser</b></p><div class="example-contents"><em class="parameter"><code>[global]</code></em><a class="link" href="smb.conf.5.html#DOMAINMASTER">domain master = no</a><a class="link" href="smb.conf.5.html#LOCALMASTER">local master = no</a><a class="link" href="smb.conf.5.html#PREFERREDMASTER">preferred master = no</a><a class="link" href="smb.conf.5.html#OSLEVEL">os level = 0</a></div></div><p><br class="example-break">
 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="browse-force-master"></a>Forcing Samba to Be the Master</h3></div></div></div><p>
-<a class="indexterm" name="id2604681"></a>
-<a class="indexterm" name="id2604687"></a>
-<a class="indexterm" name="id2604694"></a>
-<a class="indexterm" name="id2604700"></a>
-<a class="indexterm" name="id2604707"></a>
-<a class="indexterm" name="id2604714"></a>
-<a class="indexterm" name="id2604721"></a>
+<a class="indexterm" name="id370152"></a>
+<a class="indexterm" name="id370158"></a>
+<a class="indexterm" name="id370165"></a>
+<a class="indexterm" name="id370172"></a>
+<a class="indexterm" name="id370178"></a>
+<a class="indexterm" name="id370185"></a>
+<a class="indexterm" name="id370192"></a>
 Who becomes the master browser is determined by an election process using broadcasts. Each election packet
 contains a number of parameters that determine what precedence (bias) a host should have in the election. By
 default Samba uses a low precedence and thus loses elections to just about every Windows network server or
@@ -557,10 +557,10 @@
 not MS Windows NT/200x Server. An MS Windows NT/200x Server domain controller uses level 32. The maximum os
 level is 255.
 </p><p>
-<a class="indexterm" name="id2604778"></a>
-<a class="indexterm" name="id2604784"></a>
-<a class="indexterm" name="id2604792"></a>
-<a class="indexterm" name="id2604798"></a>
+<a class="indexterm" name="id370242"></a>
+<a class="indexterm" name="id370248"></a>
+<a class="indexterm" name="id370255"></a>
+<a class="indexterm" name="id370262"></a>
 If you want Samba to force an election on startup, set the <a class="link" href="smb.conf.5.html#PREFERREDMASTER">preferred master</a> global
 option in <code class="filename">smb.conf</code> to <code class="constant">yes</code>.  Samba will then have a slight advantage over other
 potential master browsers that are not preferred master browsers.  Use this parameter with care, because if
@@ -568,34 +568,34 @@
 with <a class="link" href="smb.conf.5.html#PREFERREDMASTER">preferred master</a> to <code class="constant">yes</code>, then periodically and continually
 they will force an election in order to become the LMB.
 </p><p>
-<a class="indexterm" name="id2604852"></a>
-<a class="indexterm" name="id2604858"></a>
-<a class="indexterm" name="id2604864"></a>
-<a class="indexterm" name="id2604871"></a>
-<a class="indexterm" name="id2604877"></a>
+<a class="indexterm" name="id370309"></a>
+<a class="indexterm" name="id370316"></a>
+<a class="indexterm" name="id370322"></a>
+<a class="indexterm" name="id370329"></a>
+<a class="indexterm" name="id370336"></a>
 If you want Samba to be a <span class="emphasis"><em>DMB</em></span>, then it is recommended that you also set <a class="link" href="smb.conf.5.html#PREFERREDMASTER">preferred master</a> to <code class="constant">yes</code>, because Samba will not become a DMB for the whole of
 your LAN or WAN if it is not also a LMB on its own broadcast isolated subnet.
 </p><p>
-<a class="indexterm" name="id2604910"></a>
-<a class="indexterm" name="id2604916"></a>
-<a class="indexterm" name="id2604924"></a>
-<a class="indexterm" name="id2604930"></a>
-<a class="indexterm" name="id2604937"></a>
+<a class="indexterm" name="id370365"></a>
+<a class="indexterm" name="id370371"></a>
+<a class="indexterm" name="id370378"></a>
+<a class="indexterm" name="id370385"></a>
+<a class="indexterm" name="id370391"></a>
 It is possible to configure two Samba servers to attempt to become the DMB for a domain. The first server that
 comes up will be the DMB. All other Samba servers will attempt to become the DMB every 5 minutes. They will
 find that another Samba server is already the DMB and will fail. This provides automatic redundancy should the
 current DMB fail. The network bandwidth overhead of browser elections is relatively small, requiring
 approximately four UDP packets per machine per election. The maximum size of a UDP packet is 576 bytes.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2604955"></a>Making Samba the Domain Master</h3></div></div></div><p>
-<a class="indexterm" name="id2604963"></a>
-<a class="indexterm" name="id2604969"></a>
-<a class="indexterm" name="id2604976"></a>
-<a class="indexterm" name="id2604983"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id370405"></a>Making Samba the Domain Master</h3></div></div></div><p>
+<a class="indexterm" name="id370413"></a>
+<a class="indexterm" name="id370419"></a>
+<a class="indexterm" name="id370426"></a>
+<a class="indexterm" name="id370433"></a>
 The domain master browser is responsible for collating the browse lists of multiple subnets so browsing can
 occur between subnets. You can make Samba act as the domain master browser by setting <a class="link" href="smb.conf.5.html#DOMAINMASTER">domain master = yes</a> in <code class="filename">smb.conf</code>. By default it will not be a domain master browser.
 </p><p>
-<a class="indexterm" name="id2605015"></a>
-<a class="indexterm" name="id2605022"></a>
+<a class="indexterm" name="id370462"></a>
+<a class="indexterm" name="id370468"></a>
 Do not set Samba to be the domain master for a workgroup that has the same name as an NT/200x domain.  If
 Samba is configured to be the domain master for a workgroup that is present on the same network as a Windows
 NT/200x domain that has the same name, network browsing problems will certainly be experienced.
@@ -603,26 +603,26 @@
 When Samba is the domain master and the master browser, it will listen for master announcements (made roughly
 every 12 minutes) from LMBs on other subnets and then contact them to synchronize browse lists.
 </p><p>
-<a class="indexterm" name="id2605044"></a>
-<a class="indexterm" name="id2605051"></a>
+<a class="indexterm" name="id370486"></a>
+<a class="indexterm" name="id370493"></a>
 If you want Samba to be the domain master, you should also set the <a class="link" href="smb.conf.5.html#OSLEVEL">os level</a> high
 enough to make sure it wins elections, and set <a class="link" href="smb.conf.5.html#PREFERREDMASTER">preferred master</a> to
 <code class="constant">yes</code>, to get Samba to force an election on startup.
 </p><p>
-<a class="indexterm" name="id2605090"></a>
-<a class="indexterm" name="id2605097"></a>
+<a class="indexterm" name="id370529"></a>
+<a class="indexterm" name="id370536"></a>
 All servers (including Samba) and clients should be using a WINS server to resolve NetBIOS names. If your
 clients are only using broadcasting to resolve NetBIOS names, then two things will occur:
 </p><div class="orderedlist"><ol type="1"><li><p>
-<a class="indexterm" name="id2605120"></a>
-<a class="indexterm" name="id2605126"></a>
+<a class="indexterm" name="id370556"></a>
+<a class="indexterm" name="id370563"></a>
 	LMBs will be unable to find a DMB because they will be looking only on the local subnet.
 	</p></li><li><p>
-<a class="indexterm" name="id2605141"></a>
+<a class="indexterm" name="id370576"></a>
 	If a client happens to get hold of a domain-wide browse list and a user attempts to access a
 	host in that list, it will be unable to resolve the NetBIOS name of that host.
 	</p></li></ol></div><p>
-<a class="indexterm" name="id2605156"></a>
+<a class="indexterm" name="id370590"></a>
 If, however, both Samba and your clients are using a WINS server, then:
 </p><div class="orderedlist"><ol type="1"><li><p>
 	LMBs will contact the WINS server and, as long as Samba has registered that it is a DMB with the WINS
@@ -631,44 +631,44 @@
 	When a client receives a domain-wide browse list and a user attempts to access a host in that list, it will
 	contact the WINS server to resolve the NetBIOS name of that host. As long as that host has registered its
 	NetBIOS name with the same WINS server, the user will be able to see that host..
-	</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2605195"></a>Note about Broadcast Addresses</h3></div></div></div><p>
-<a class="indexterm" name="id2605203"></a>
+	</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id370625"></a>Note about Broadcast Addresses</h3></div></div></div><p>
+<a class="indexterm" name="id370632"></a>
 If your network uses a zero-based broadcast address (for example, if it ends in a 0), then you will strike
 problems. Windows for Workgroups does not seem to support a zeros broadcast, and you will probably find that
 browsing and name lookups will not work.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2605217"></a>Multiple Interfaces</h3></div></div></div><p>
-<a class="indexterm" name="id2605225"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id370644"></a>Multiple Interfaces</h3></div></div></div><p>
+<a class="indexterm" name="id370651"></a>
 Samba supports machines with multiple network interfaces. If you have multiple interfaces, you will
 need to use the <a class="link" href="smb.conf.5.html#INTERFACES">interfaces</a> option in <code class="filename">smb.conf</code> to configure them. For example, the
 machine you are working with has 4 network interfaces; <code class="literal">eth0</code>, <code class="literal">eth1</code>,
 <code class="literal">eth2</code>, <code class="literal">eth3</code> and only interfaces <code class="literal">eth1</code> and
 <code class="literal">eth4</code> should be used by Samba. In this case, the following <code class="filename">smb.conf</code> file entries would
 permit that intent:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2605301"></a><em class="parameter"><code>interfaces = eth1, eth4</code></em></td></tr><tr><td><a class="indexterm" name="id2605313"></a><em class="parameter"><code>bind interfaces only = Yes</code></em></td></tr></table><p>
-<a class="indexterm" name="id2605325"></a>
-<a class="indexterm" name="id2605331"></a>
-<a class="indexterm" name="id2605338"></a>
-<a class="indexterm" name="id2605345"></a>
-<a class="indexterm" name="id2605352"></a>
-<a class="indexterm" name="id2605359"></a>
-<a class="indexterm" name="id2605365"></a>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id370725"></a><em class="parameter"><code>interfaces = eth1, eth4</code></em></td></tr><tr><td><a class="indexterm" name="id370736"></a><em class="parameter"><code>bind interfaces only = Yes</code></em></td></tr></table><p>
+<a class="indexterm" name="id370748"></a>
+<a class="indexterm" name="id370755"></a>
+<a class="indexterm" name="id370762"></a>
+<a class="indexterm" name="id370768"></a>
+<a class="indexterm" name="id370775"></a>
+<a class="indexterm" name="id370782"></a>
+<a class="indexterm" name="id370788"></a>
 The <a class="link" href="smb.conf.5.html#BINDINTERFACESONLY">bind interfaces only = Yes</a> is necessary to exclude TCP/IP session
 services (ports 135, 139, and 445) over the interfaces that are not specified. Please be aware that
 <code class="literal">nmbd</code> will listen for incoming UDP port 137 packets on the unlisted interfaces, but it will
 not answer them. It will, however, send its broadcast packets over the unlisted interfaces. Total isolation of
 ethernet interface requires the use of a firewall to block ports 137 and 138 (UDP), and ports 135, 139, and
 445 (TCP) on all network interfaces that must not be able to access the Samba server.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2605403"></a>Use of the Remote Announce Parameter</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id370820"></a>Use of the Remote Announce Parameter</h3></div></div></div><p>
 The <a class="link" href="smb.conf.5.html#REMOTEANNOUNCE">remote announce</a> parameter of <code class="filename">smb.conf</code> can be used to forcibly ensure that all
 the NetBIOS names on a network get announced to a remote network.  The syntax of the <a class="link" href="smb.conf.5.html#REMOTEANNOUNCE">remote announce</a> parameter is:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2605448"></a><em class="parameter"><code>remote announce = 192.168.12.23 [172.16.21.255] ...</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id370861"></a><em class="parameter"><code>remote announce = 192.168.12.23 [172.16.21.255] ...</code></em></td></tr></table><p>
 <span class="emphasis"><em>or</em></span>
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2605469"></a><em class="parameter"><code>remote announce = 192.168.12.23/MIDEARTH [172.16.21.255/ELVINDORF] ...</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id370882"></a><em class="parameter"><code>remote announce = 192.168.12.23/MIDEARTH [172.16.21.255/ELVINDORF] ...</code></em></td></tr></table><p>
 
 where:
 </p><div class="variablelist"><dl><dt><span class="term"><em class="replaceable"><code>192.168.12.23</code></em> and <em class="replaceable"><code>172.16.21.255</code></em></span></dt><dd><p>
-<a class="indexterm" name="id2605497"></a>
-<a class="indexterm" name="id2605506"></a>
+<a class="indexterm" name="id370908"></a>
+<a class="indexterm" name="id370917"></a>
 		is either the LMB IP address or the broadcast address of the remote network.
 		That is, the LMB is at 192.168.1.23, or the address could be given as 172.16.21.255 where the netmask
 		is assumed to be 24 bits (255.255.255.0). When the remote announcement is made to the broadcast
@@ -678,24 +678,24 @@
 		workgroup name of the remote network, our NetBIOS machine names will end up looking like
 		they belong to that workgroup. This may cause name resolution problems and should be avoided.
 		</p></dd></dl></div><p>
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2605543"></a>Use of the Remote Browse Sync Parameter</h3></div></div></div><p>
-<a class="indexterm" name="id2605550"></a>
-<a class="indexterm" name="id2605557"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id370948"></a>Use of the Remote Browse Sync Parameter</h3></div></div></div><p>
+<a class="indexterm" name="id370956"></a>
+<a class="indexterm" name="id370963"></a>
 The <a class="link" href="smb.conf.5.html#REMOTEBROWSESYNC">remote browse sync</a> parameter of <code class="filename">smb.conf</code> is used to announce to another LMB that
 it must synchronize its NetBIOS name list with our Samba LMB. This works only if the Samba server that has
 this option is simultaneously the LMB on its network segment.
 </p><p>
 The syntax of the <a class="link" href="smb.conf.5.html#REMOTEBROWSESYNC">remote browse sync</a> parameter is:
 
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2605607"></a></td></tr></table><p>
-<a class="indexterm" name="id2605613"></a>
-<a class="indexterm" name="id2605620"></a>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id371007"></a></td></tr></table><p>
+<a class="indexterm" name="id371014"></a>
+<a class="indexterm" name="id371021"></a>
 where <em class="replaceable"><code>192.168.10.40</code></em> is either the IP address of the
 remote LMB or the network broadcast address of the remote segment.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2605636"></a>WINS: The Windows Internetworking Name Server</h2></div></div></div><p>
-<a class="indexterm" name="id2605644"></a>
-<a class="indexterm" name="id2605651"></a>
-<a class="indexterm" name="id2605658"></a>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id371035"></a>WINS: The Windows Internetworking Name Server</h2></div></div></div><p>
+<a class="indexterm" name="id371043"></a>
+<a class="indexterm" name="id371050"></a>
+<a class="indexterm" name="id371057"></a>
 Use of WINS (either Samba WINS or MS Windows NT Server WINS) is highly
 recommended. Every NetBIOS machine registers its name together with a
 name_type value for each of several types of service it has available.
@@ -704,18 +704,18 @@
 server service (used to make shares and printers available to other users)
 by registering the server (the type 0x20) name.
 </p><p>
-<a class="indexterm" name="id2605676"></a>
-<a class="indexterm" name="id2605683"></a>
+<a class="indexterm" name="id371071"></a>
+<a class="indexterm" name="id371078"></a>
 All NetBIOS names are up to 15 characters in length. The name_type variable
 is added to the end of the name, thus creating a 16 character name. Any
 name that is shorter than 15 characters is padded with spaces to the 15th
 character. Thus, all NetBIOS names are 16 characters long (including the
 name_type information).
 </p><p>
-<a class="indexterm" name="id2605698"></a>
-<a class="indexterm" name="id2605705"></a>
-<a class="indexterm" name="id2605712"></a>
-<a class="indexterm" name="id2605719"></a>
+<a class="indexterm" name="id371090"></a>
+<a class="indexterm" name="id371097"></a>
+<a class="indexterm" name="id371104"></a>
+<a class="indexterm" name="id371111"></a>
 WINS can store these 16-character names as they get registered. A client
 that wants to log onto the network can ask the WINS server for a list
 of all names that have registered the NetLogon service name_type. This saves
@@ -725,21 +725,21 @@
 <code class="filename">lmhosts</code> file that must reside on all clients in the
 absence of WINS.
 </p><p>
-<a class="indexterm" name="id2605743"></a>
-<a class="indexterm" name="id2605750"></a>
-<a class="indexterm" name="id2605757"></a>
-<a class="indexterm" name="id2605763"></a>
-<a class="indexterm" name="id2605770"></a>
+<a class="indexterm" name="id371131"></a>
+<a class="indexterm" name="id371138"></a>
+<a class="indexterm" name="id371144"></a>
+<a class="indexterm" name="id371151"></a>
+<a class="indexterm" name="id371158"></a>
 WINS also forces browse list synchronization by all LMBs. LMBs must synchronize their browse list with the
 DMB, and WINS helps the LMB to identify its DMB. By definition this will work only within a single workgroup.
 Note that the DMB has nothing to do with what is referred to as an MS Windows NT domain. The latter is a
 reference to a security environment, while the DMB refers to the master controller for browse list information
 only.
 </p><p>
-<a class="indexterm" name="id2605788"></a>
-<a class="indexterm" name="id2605794"></a>
-<a class="indexterm" name="id2605802"></a>
-<a class="indexterm" name="id2605808"></a>
+<a class="indexterm" name="id371172"></a>
+<a class="indexterm" name="id371178"></a>
+<a class="indexterm" name="id371185"></a>
+<a class="indexterm" name="id371192"></a>
 WINS will work correctly only if every client TCP/IP protocol stack
 is configured to use the WINS servers. Any client that is not
 configured to use the WINS server will continue to use only broadcast-based
@@ -756,16 +756,16 @@
 </p><div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Important</h3><p>
 Never use <a class="link" href="smb.conf.5.html#WINSSUPPORT">wins support = yes</a> together with <a class="link" href="smb.conf.5.html#WINSSERVER">wins server = 10.0.0.18</a> particularly not using its own IP address. Specifying both will cause <span class="application">nmbd</span>
 to refuse to start!
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2605907"></a>WINS Server Configuration</h3></div></div></div><p>
-<a class="indexterm" name="id2605915"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id371282"></a>WINS Server Configuration</h3></div></div></div><p>
+<a class="indexterm" name="id371290"></a>
 Either a Samba server or a Windows NT server machine may be set up
 as a WINS server. To configure a Samba server to be a WINS server, you must
 add to the <code class="filename">smb.conf</code> file on the selected Server the following line to
 the <em class="parameter"><code>[global]</code></em> section:
 </p><p>
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2605946"></a><em class="parameter"><code>wins support = yes</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id371320"></a><em class="parameter"><code>wins support = yes</code></em></td></tr></table><p>
 </p><p>
-<a class="indexterm" name="id2605961"></a>
+<a class="indexterm" name="id371334"></a>
 Versions of Samba prior to 1.9.17 had this parameter default to
 yes. If you have any older versions of Samba on your network, it is
 strongly suggested you upgrade to a recent version, or at the very
@@ -774,14 +774,14 @@
 Machines configured with <a class="link" href="smb.conf.5.html#WINSSUPPORT">wins support = yes</a> will keep a list of
 all NetBIOS names registered with them, acting as a DNS for NetBIOS names.
 </p><p>
-<a class="indexterm" name="id2605996"></a>
+<a class="indexterm" name="id371365"></a>
 It is strongly recommended to set up only one WINS server. Do not set the <a class="link" href="smb.conf.5.html#WINSSUPPORT">wins support = yes</a> option on more than one Samba server on a network.
 </p><p>
-<a class="indexterm" name="id2606019"></a>
-<a class="indexterm" name="id2606028"></a>
-<a class="indexterm" name="id2606035"></a>
-<a class="indexterm" name="id2606042"></a>
-<a class="indexterm" name="id2606049"></a>
+<a class="indexterm" name="id371386"></a>
+<a class="indexterm" name="id371395"></a>
+<a class="indexterm" name="id371402"></a>
+<a class="indexterm" name="id371409"></a>
+<a class="indexterm" name="id371416"></a>
 To configure Windows NT/200x Server as a WINS server, install and configure the WINS service. See the Windows
 NT/200x documentation for details.  Windows NT/200x WINS servers can replicate to each other, allowing more
 than one to be set up in a complex subnet environment. Because Microsoft refuses to document the replication
@@ -789,14 +789,14 @@
 replication protocol may be defined in the future, in which case more than one Samba machine could be set up
 as a WINS server.  Currently only one Samba server should have the <a class="link" href="smb.conf.5.html#WINSSUPPORT">wins support = yes</a> parameter set.
 </p><p>
-<a class="indexterm" name="id2606081"></a>
-<a class="indexterm" name="id2606087"></a>
+<a class="indexterm" name="id371442"></a>
+<a class="indexterm" name="id371448"></a>
 After the WINS server has been configured, you must ensure that all machines participating on the network are
 configured with the address of this WINS server. If your WINS server is a Samba machine, fill in the Samba
 machine IP address in the <span class="guilabel">Primary WINS Server</span> field of the <span class="guilabel">Control
 Panel-&gt;Network-&gt;Protocols-&gt;TCP-&gt;WINS Server</span> dialogs in Windows 9x/Me or Windows NT/200x. To tell a
 Samba server the IP address of the WINS server, add the following line to the <em class="parameter"><code>[global]</code></em> section of all <code class="filename">smb.conf</code> files:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2606132"></a><em class="parameter"><code>wins server = &lt;name or IP address&gt;</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id371488"></a><em class="parameter"><code>wins server = &lt;name or IP address&gt;</code></em></td></tr></table><p>
 where &lt;name or IP address&gt; is either the DNS name of the WINS server
 machine or its IP address.
 </p><p>
@@ -806,18 +806,18 @@
 <a class="link" href="smb.conf.5.html#WINSSERVER">wins server = &lt;name&gt;</a> option then
 <code class="literal">nmbd</code> will fail to start.
 </p><p>
-<a class="indexterm" name="id2606192"></a>
-<a class="indexterm" name="id2606200"></a>
-<a class="indexterm" name="id2606206"></a>
-<a class="indexterm" name="id2606213"></a>
+<a class="indexterm" name="id371543"></a>
+<a class="indexterm" name="id371550"></a>
+<a class="indexterm" name="id371557"></a>
+<a class="indexterm" name="id371564"></a>
 There are two possible scenarios for setting up cross-subnet browsing.
 The first details setting up cross-subnet browsing on a network containing
 Windows 9x/Me, Samba, and Windows NT/200x machines that are not configured as
 part of a Windows NT domain. The second details setting up cross-subnet
 browsing on networks that contain NT domains.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2606228"></a>WINS Replication</h3></div></div></div><p>
-<a class="indexterm" name="id2606236"></a>
-<a class="indexterm" name="id2606245"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id371576"></a>WINS Replication</h3></div></div></div><p>
+<a class="indexterm" name="id371583"></a>
+<a class="indexterm" name="id371593"></a>
 Samba-3 does not support native WINS replication. There was an approach to implement it, called
 <code class="filename">wrepld</code>, but it was never ready for action and the development is now discontinued.
 </p><p>
@@ -825,11 +825,11 @@
 run the Samba-4 WINS server parallel to Samba-3 since version 3.0.21. More information about
 <code class="filename">samba4WINS</code> are available at http://ftp.sernet.de/pub/samba4WINS.
 
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2606281"></a>Static WINS Entries</h3></div></div></div><p>
-<a class="indexterm" name="id2606289"></a>
-<a class="indexterm" name="id2606296"></a>
-<a class="indexterm" name="id2606303"></a>
-<a class="indexterm" name="id2606310"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id371626"></a>Static WINS Entries</h3></div></div></div><p>
+<a class="indexterm" name="id371634"></a>
+<a class="indexterm" name="id371640"></a>
+<a class="indexterm" name="id371647"></a>
+<a class="indexterm" name="id371654"></a>
 Adding static entries to your Samba WINS server is actually fairly easy.  All you have to do is add a line to
 <code class="filename">wins.dat</code>, typically located in <code class="filename">/usr/local/samba/var/locks</code> or <code class="filename">/var/run/samba</code>.
 </p><p>
@@ -837,8 +837,8 @@
 </p><pre class="programlisting">
 "NAME#TYPE" TTL ADDRESS+ FLAGS
 </pre><p>
-<a class="indexterm" name="id2606356"></a>
-<a class="indexterm" name="id2606362"></a>
+<a class="indexterm" name="id371698"></a>
+<a class="indexterm" name="id371704"></a>
 where NAME is the NetBIOS name, TYPE is the NetBIOS type, TTL is the time-to-live as an absolute time in
 seconds, ADDRESS+ is one or more addresses corresponding to the registration, and FLAGS are the NetBIOS flags
 for the registration.
@@ -856,47 +856,47 @@
 "MADMAN#03" 0 192.168.1.2 66R
 </pre><p>
 </p><p>
-<a class="indexterm" name="id2606435"></a>
-<a class="indexterm" name="id2606442"></a>
-<a class="indexterm" name="id2606448"></a>
-<a class="indexterm" name="id2606455"></a>
-<a class="indexterm" name="id2606462"></a>
-<a class="indexterm" name="id2606469"></a>
-<a class="indexterm" name="id2606476"></a>
+<a class="indexterm" name="id371770"></a>
+<a class="indexterm" name="id371777"></a>
+<a class="indexterm" name="id371784"></a>
+<a class="indexterm" name="id371791"></a>
+<a class="indexterm" name="id371798"></a>
+<a class="indexterm" name="id371804"></a>
+<a class="indexterm" name="id371811"></a>
 The NetBIOS flags may be interpreted as additive hexadecimal values: 00 - Broadcast node registration, 20 -
 Peer node registration, 40 - Meta node registration, 60 - Hybrid node registration, 02 - Permanent name, 04 -
 Active name, 80 - Group name. The 'R' indicates this is a registration record. Thus 66R means: Hybrid node
 active and permanent NetBIOS name. These values may be found in the <code class="filename">nameserv.h</code> header
 file from the Samba source code repository. These are the values for the NB flags.
 </p><p>
-<a class="indexterm" name="id2606500"></a>
+<a class="indexterm" name="id371831"></a>
 Though this method works with early Samba-3 versions, there is a possibility that it may change in future
 versions if WINS replication is added.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2606512"></a>Helpful Hints</h2></div></div></div><p>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id371843"></a>Helpful Hints</h2></div></div></div><p>
 The following hints should be carefully considered because they are stumbling points
 for many new network administrators.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2606524"></a>Windows Networking Protocols</h3></div></div></div><p>
-<a class="indexterm" name="id2606532"></a>
-<a class="indexterm" name="id2606539"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id371853"></a>Windows Networking Protocols</h3></div></div></div><p>
+<a class="indexterm" name="id371861"></a>
+<a class="indexterm" name="id371867"></a>
 A common cause of browsing problems results from the installation of more than one protocol on an MS Windows
 machine.
 </p><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p>
 Do not use more than one protocol on MS Windows clients.
 </p></div><p>
-<a class="indexterm" name="id2606556"></a>
-<a class="indexterm" name="id2606563"></a>
+<a class="indexterm" name="id371883"></a>
+<a class="indexterm" name="id371890"></a>
 Every NetBIOS machine takes part in a process of electing the LMB (and DMB)
 every 15 minutes. A set of election criteria is used to determine the order
 of precedence for winning this election process. A machine running Samba or
 Windows NT will be biased, so the most suitable machine will predictably
 win and thus retain its role.
 </p><p>
-<a class="indexterm" name="id2606578"></a>
-<a class="indexterm" name="id2606585"></a>
-<a class="indexterm" name="id2606592"></a>
-<a class="indexterm" name="id2606599"></a>
-<a class="indexterm" name="id2606605"></a>
-<a class="indexterm" name="id2606612"></a>
+<a class="indexterm" name="id371903"></a>
+<a class="indexterm" name="id371910"></a>
+<a class="indexterm" name="id371916"></a>
+<a class="indexterm" name="id371923"></a>
+<a class="indexterm" name="id371929"></a>
+<a class="indexterm" name="id371936"></a>
 The election process is <span class="emphasis"><em>fought out, so to speak</em></span> over every NetBIOS network interface. In
 the case of a Windows 9x/Me machine that has both TCP/IP and IPX installed and has NetBIOS enabled over both
 protocols, the election will be decided over both protocols. As often happens, if the Windows 9x/Me machine is
@@ -904,8 +904,8 @@
 Samba will then lose the LMB role because Windows 9x/Me will insist it knows who the LMB is. Samba will then
 cease to function as an LMB, and browse list operation on all TCP/IP-only machines will therefore fail.
 </p><p>
-<a class="indexterm" name="id2606646"></a>
-<a class="indexterm" name="id2606653"></a>
+<a class="indexterm" name="id371960"></a>
+<a class="indexterm" name="id371967"></a>
 Windows 95, 98, 98se, and Me are referred to generically as Windows 9x/Me.  The Windows NT4, 200x, and XP use
 common protocols. These are roughly referred to as the Windows NT family, but it should be recognized that
 2000 and XP/2003 introduce new protocol extensions that cause them to behave differently from MS Windows NT4.
@@ -913,31 +913,31 @@
 protocols.
 </p><p>
 The safest rule of all to follow is: Use only one protocol!
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2606674"></a>Name Resolution Order</h3></div></div></div><p>
-<a class="indexterm" name="id2606682"></a>
-<a class="indexterm" name="id2606689"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id371983"></a>Name Resolution Order</h3></div></div></div><p>
+<a class="indexterm" name="id371991"></a>
+<a class="indexterm" name="id371998"></a>
 Resolution of NetBIOS names to IP addresses can take place using a number
 of methods. The only ones that can provide NetBIOS name_type information
 are:
 </p><div class="itemizedlist"><ul type="disc"><li><p>WINS  the best tool.</p></li><li><p>LMHOSTS  static and hard to maintain.</p></li><li><p>Broadcast  uses UDP and cannot resolve names across remote segments.</p></li></ul></div><p>
 Alternative means of name resolution include:
 </p><div class="itemizedlist"><ul type="disc"><li><p>Static <code class="filename">/etc/hosts</code>   hard to maintain and lacks name_type info.</p></li><li><p>DNS  is a good choice but lacks essential NetBIOS name_type information.</p></li></ul></div><p>
-<a class="indexterm" name="id2606758"></a>
-<a class="indexterm" name="id2606764"></a>
+<a class="indexterm" name="id372063"></a>
+<a class="indexterm" name="id372070"></a>
 Many sites want to restrict DNS lookups and avoid broadcast name
 resolution traffic. The <em class="parameter"><code>name resolve order</code></em> parameter is of great help here.
 The syntax of the <em class="parameter"><code>name resolve order</code></em> parameter is:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2606791"></a><em class="parameter"><code>name resolve order = wins lmhosts bcast host</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id372095"></a><em class="parameter"><code>name resolve order = wins lmhosts bcast host</code></em></td></tr></table><p>
 <span class="emphasis"><em>or</em></span>
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2606812"></a><em class="parameter"><code>name resolve order = wins lmhosts  	(eliminates bcast and host)</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id372115"></a><em class="parameter"><code>name resolve order = wins lmhosts  	(eliminates bcast and host)</code></em></td></tr></table><p>
 The default is:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2606831"></a><em class="parameter"><code>name resolve order = host lmhost wins bcast</code></em></td></tr></table><p>
-<a class="indexterm" name="id2606843"></a>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id372133"></a><em class="parameter"><code>name resolve order = host lmhost wins bcast</code></em></td></tr></table><p>
+<a class="indexterm" name="id372145"></a>
 where &#8220;<span class="quote">host</span>&#8221; refers to the native methods used by the UNIX system to implement the
 gethostbyname() function call. This is normally controlled by <code class="filename">/etc/host.conf</code>,
 <code class="filename">/etc/nsswitch.conf</code> and <code class="filename">/etc/resolv.conf</code>.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2606877"></a>Technical Overview of Browsing</h2></div></div></div><p>
-<a class="indexterm" name="id2606885"></a>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id372177"></a>Technical Overview of Browsing</h2></div></div></div><p>
+<a class="indexterm" name="id372185"></a>
 SMB networking provides a mechanism by which clients can access a list
 of machines in a network called <a class="link" href="smb.conf.5.html#BROWSELIST">browse list</a>. This list
 contains machines that are ready to offer file and/or print services
@@ -947,48 +947,48 @@
 browsing has been problematic for some Samba users, hence this
 document.
 </p><p>
-<a class="indexterm" name="id2606920"></a>
-<a class="indexterm" name="id2606927"></a>
-<a class="indexterm" name="id2606934"></a>
+<a class="indexterm" name="id372212"></a>
+<a class="indexterm" name="id372219"></a>
+<a class="indexterm" name="id372226"></a>
 MS Windows 2000 and later versions, as with Samba-3 and later versions, can be
 configured to not use NetBIOS over TCP/IP. When configured this way,
 it is imperative that name resolution (using DNS/LDAP/ADS) be correctly
 configured and operative. Browsing will not work if name resolution
 from SMB machine names to IP addresses does not function correctly.
 </p><p>
-<a class="indexterm" name="id2606950"></a>
-<a class="indexterm" name="id2606957"></a>
+<a class="indexterm" name="id372239"></a>
+<a class="indexterm" name="id372246"></a>
 Where NetBIOS over TCP/IP is enabled, use of a WINS server is highly
 recommended to aid the resolution of NetBIOS (SMB) names to IP addresses.
 WINS allows remote segment clients to obtain NetBIOS name_type information
 that cannot be provided by any other means of name resolution.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2606970"></a>Browsing Support in Samba</h3></div></div></div><p>
-<a class="indexterm" name="id2606978"></a>
-<a class="indexterm" name="id2606985"></a>
-<a class="indexterm" name="id2606991"></a>
-<a class="indexterm" name="id2606998"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id372256"></a>Browsing Support in Samba</h3></div></div></div><p>
+<a class="indexterm" name="id372264"></a>
+<a class="indexterm" name="id372271"></a>
+<a class="indexterm" name="id372277"></a>
+<a class="indexterm" name="id372284"></a>
 Samba facilitates browsing. The browsing is supported by <span class="application">nmbd</span>
 and is also controlled by options in the <code class="filename">smb.conf</code> file.
 Samba can act as an LMB for a workgroup, and the ability
 to support domain logons and scripts is now available.
 </p><p>
-<a class="indexterm" name="id2607023"></a>
-<a class="indexterm" name="id2607030"></a>
-<a class="indexterm" name="id2607036"></a>
+<a class="indexterm" name="id372308"></a>
+<a class="indexterm" name="id372315"></a>
+<a class="indexterm" name="id372321"></a>
 Samba can also act as a DMB for a workgroup. This
 means that it will collate lists from LMBs into a
 wide-area network server list. In order for browse clients to
 resolve the names they may find in this list, it is recommended that
 both Samba and your clients use a WINS server.
 </p><p>
-<a class="indexterm" name="id2607051"></a>
+<a class="indexterm" name="id372334"></a>
 Do not set Samba to be the domain master for a workgroup that has the same
 name as an NT Domain. On each wide-area network, you must only ever have one
 DMB per workgroup, regardless of whether it is NT, Samba,
 or any other type of domain master that is providing this service.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2607067"></a>
-<a class="indexterm" name="id2607074"></a>
+<a class="indexterm" name="id372347"></a>
+<a class="indexterm" name="id372354"></a>
 <code class="literal">nmbd</code> can be configured as a WINS server, but it is not
 necessary to specifically use Samba as your WINS server. MS Windows
 NT4, Server or Advanced Server 200x can be configured as
@@ -997,40 +997,40 @@
 WINS server capabilities. In a Samba-only environment, it is
 recommended that you use one and only one Samba server as the WINS server.
 </p></div><p>
-<a class="indexterm" name="id2607097"></a>
+<a class="indexterm" name="id372373"></a>
 To get browsing to work, you need to run <code class="literal">nmbd</code> as usual, but must
 use the <a class="link" href="smb.conf.5.html#WORKGROUP">workgroup</a> option in <code class="filename">smb.conf</code>
 to control what workgroup Samba becomes a part of.
 </p><p>
-<a class="indexterm" name="id2607133"></a>
+<a class="indexterm" name="id372407"></a>
 Samba also has a useful option for a Samba server to offer itself for browsing on another subnet. It is
 recommended that this option is used only for &#8220;<span class="quote">unusual</span>&#8221; purposes: announcements over the
 Internet, for example. See <a class="link" href="smb.conf.5.html#REMOTEANNOUNCE">remote announce</a> in the <code class="filename">smb.conf</code> man page.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2607167"></a>Problem Resolution</h3></div></div></div><p>
-<a class="indexterm" name="id2607174"></a>
-<a class="indexterm" name="id2607181"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id372438"></a>Problem Resolution</h3></div></div></div><p>
+<a class="indexterm" name="id372445"></a>
+<a class="indexterm" name="id372452"></a>
 If something does not work, the <code class="filename">log.nmbd</code> file will help
 to track down the problem. Try a <a class="link" href="smb.conf.5.html#LOGLEVEL">log level</a> of 2 or 3 for finding
 problems. Also note that the current browse list usually gets stored
 in text form in a file called <code class="filename">browse.dat</code>.
 </p><p>
-<a class="indexterm" name="id2607217"></a>
-<a class="indexterm" name="id2607224"></a>
+<a class="indexterm" name="id372486"></a>
+<a class="indexterm" name="id372493"></a>
 If it does not work, you should still be able to
 type the server name as <code class="filename">\\SERVER</code> in <code class="literal">filemanager</code>, then
 press enter, and <code class="literal">filemanager</code> should display the list of available shares.
 </p><p>
-<a class="indexterm" name="id2607254"></a>
-<a class="indexterm" name="id2607261"></a>
+<a class="indexterm" name="id372522"></a>
+<a class="indexterm" name="id372529"></a>
 Some people find browsing fails because they do not have the global
 <a class="link" href="smb.conf.5.html#GUESTACCOUNT">guest account</a> set to a valid account. Remember that the
 IPC$ connection that lists the shares is done as guest and so you must have a valid guest account.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2607289"></a>
-<a class="indexterm" name="id2607295"></a>
-<a class="indexterm" name="id2607302"></a>
-<a class="indexterm" name="id2607309"></a>
-<a class="indexterm" name="id2607316"></a>
+<a class="indexterm" name="id372553"></a>
+<a class="indexterm" name="id372560"></a>
+<a class="indexterm" name="id372567"></a>
+<a class="indexterm" name="id372573"></a>
+<a class="indexterm" name="id372580"></a>
 The <code class="literal">IPC$</code> share is used by all SMB/CIFS clients to obtain the list of resources that is
 available on the server. This is the source of the list of shares and printers when browsing an SMB/CIFS
 server (also Windows machines) using the Windows Explorer to browse resources through the Windows Network
@@ -1038,10 +1038,10 @@
 a connection to the <code class="literal">\\server\IPC4</code> resource.  Clicking on a share will then open up a
 connection to the <code class="literal">\\server\share</code>.
 </p></div><p>
-<a class="indexterm" name="id2607352"></a>
-<a class="indexterm" name="id2607359"></a>
-<a class="indexterm" name="id2607366"></a>
-<a class="indexterm" name="id2607373"></a>
+<a class="indexterm" name="id372612"></a>
+<a class="indexterm" name="id372619"></a>
+<a class="indexterm" name="id372626"></a>
+<a class="indexterm" name="id372632"></a>
 MS Windows 2000 and later (as with Samba) can be configured to disallow
 anonymous (i.e., guest account) access to the IPC$ share. In that case, the
 MS Windows 2000/XP/2003 machine acting as an SMB/CIFS client will use the
@@ -1049,22 +1049,22 @@
 9x/Me clients are not able to do this and thus will not be able to browse
 server resources.
 </p><p>
-<a class="indexterm" name="id2607390"></a>
+<a class="indexterm" name="id372646"></a>
 The other big problem people have is that their broadcast address,
 netmask, or IP address is wrong (specified with the <a class="link" href="smb.conf.5.html#INTERFACES">interfaces</a> option
 in <code class="filename">smb.conf</code>)
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2607418"></a>Cross-Subnet Browsing</h3></div></div></div><p>
-<a class="indexterm" name="id2607426"></a>
-<a class="indexterm" name="id2607435"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id372672"></a>Cross-Subnet Browsing</h3></div></div></div><p>
+<a class="indexterm" name="id372680"></a>
+<a class="indexterm" name="id372689"></a>
 Since the release of Samba 1.9.17 (alpha1), Samba has supported the replication of browse lists across subnet
 boundaries. This section describes how to set this feature up in different settings.
 </p><p>
-<a class="indexterm" name="id2607449"></a>
-<a class="indexterm" name="id2607456"></a>
-<a class="indexterm" name="id2607463"></a>
-<a class="indexterm" name="id2607469"></a>
-<a class="indexterm" name="id2607476"></a>
-<a class="indexterm" name="id2607483"></a>
+<a class="indexterm" name="id372701"></a>
+<a class="indexterm" name="id372708"></a>
+<a class="indexterm" name="id372714"></a>
+<a class="indexterm" name="id372721"></a>
+<a class="indexterm" name="id372728"></a>
+<a class="indexterm" name="id372734"></a>
 To see browse lists that span TCP/IP subnets (i.e., networks separated by routers that do not pass broadcast
 traffic), you must set up at least one WINS server. The WINS server acts as a DNS for NetBIOS names. This will
 allow NetBIOS name-to-IP address translation to be completed by a direct query of the WINS server. This is
@@ -1076,33 +1076,33 @@
 propagation. The hacks are not a universal solution and they should not be used in place of WINS, they are
 considered last resort methods.
 </p><p>
-<a class="indexterm" name="id2607520"></a>
-<a class="indexterm" name="id2607527"></a>
-<a class="indexterm" name="id2607534"></a>
-<a class="indexterm" name="id2607541"></a>
+<a class="indexterm" name="id372764"></a>
+<a class="indexterm" name="id372771"></a>
+<a class="indexterm" name="id372778"></a>
+<a class="indexterm" name="id372785"></a>
 Remember, for browsing across subnets to work correctly, all machines, be they Windows 95, Windows NT, or
 Samba servers, must have the IP address of a WINS server given to them by a DHCP server or by manual
 configuration: for Windows 9x/Me and Windows NT/200x/XP, this is in the TCP/IP Properties, under Network
 settings; for Samba, this is in the <code class="filename">smb.conf</code> file.
 </p><p>
-<a class="indexterm" name="id2607563"></a>
-<a class="indexterm" name="id2607570"></a>
-<a class="indexterm" name="id2607576"></a>
+<a class="indexterm" name="id372804"></a>
+<a class="indexterm" name="id372810"></a>
+<a class="indexterm" name="id372817"></a>
 It is possible to operate Samba-3 without NetBIOS over TCP/IP. If you do this, be warned that if used outside
 of MS ADS, this will forgo network browsing support. ADS permits network browsing support through DNS,
 providing appropriate DNS records are inserted for all Samba servers.
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2607589"></a>Behavior of Cross-Subnet Browsing</h4></div></div></div><p>
-<a class="indexterm" name="id2607597"></a>
-<a class="indexterm" name="id2607604"></a>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id372827"></a>Behavior of Cross-Subnet Browsing</h4></div></div></div><p>
+<a class="indexterm" name="id372835"></a>
+<a class="indexterm" name="id372842"></a>
 Cross-subnet browsing is a complicated dance, containing multiple moving parts. It has taken Microsoft several
 years to get the code that correctly achieves this, and Samba lags behind in some areas.  Samba is capable of
 cross-subnet browsing when configured correctly.
 </p><p>
 Consider a network set up as in <a class="link" href="NetworkBrowsing.html#browsing1" title="Figure 10.1. Cross-Subnet Browsing Example.">Cross-Subnet Browsing Example</a>.
 </p><div class="figure"><a name="browsing1"></a><p class="title"><b>Figure 10.1. Cross-Subnet Browsing Example.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/browsing1.png" width="216" alt="Cross-Subnet Browsing Example."></div></div></div><br class="figure-break"><p>
-<a class="indexterm" name="id2607672"></a>
-<a class="indexterm" name="id2607678"></a>
-<a class="indexterm" name="id2607685"></a>
+<a class="indexterm" name="id372906"></a>
+<a class="indexterm" name="id372913"></a>
+<a class="indexterm" name="id372919"></a>
 This consists of three subnets (1, 2, 3) connected by two routers (R1, R2), which do not pass broadcasts.
 Subnet 1 has five machines on it, subnet 2 has four machines, and subnet 3 has four machines. Assume for the
 moment that all machines are configured to be in the same workgroup (for simplicity's sake). Machine N1_C on
@@ -1110,9 +1110,9 @@
 configured as a WINS server, and all the other machines are configured to register their NetBIOS names with
 it.
 </p><p>
-<a class="indexterm" name="id2607704"></a>
-<a class="indexterm" name="id2607711"></a>
-<a class="indexterm" name="id2607718"></a>
+<a class="indexterm" name="id372934"></a>
+<a class="indexterm" name="id372941"></a>
+<a class="indexterm" name="id372947"></a>
 As these machines are booted up, elections for master browsers
 take place on each of the three subnets. Assume that machine
 N1_C wins on subnet 1, N2_B wins on subnet 2, and N3_D wins on
@@ -1120,19 +1120,19 @@
 their particular subnet. N1_C has an advantage in winning as the
 LMB on subnet 1 because it is set up as DMB.
 </p><p>
-<a class="indexterm" name="id2607733"></a>
-<a class="indexterm" name="id2607740"></a>
+<a class="indexterm" name="id372960"></a>
+<a class="indexterm" name="id372966"></a>
 On each of the three networks, machines that are configured to offer sharing services will broadcast that they
 are offering these services. The LMB on each subnet will receive these broadcasts and keep a record of the
 fact that the machine is offering a service. This list of records is the basis of the browse list. For this
 case, assume that all the machines are configured to offer services, so all machines will be on the browse
 list.
 </p><p>
-<a class="indexterm" name="id2607757"></a>
-<a class="indexterm" name="id2607764"></a>
-<a class="indexterm" name="id2607771"></a>
-<a class="indexterm" name="id2607777"></a>
-<a class="indexterm" name="id2607784"></a>
+<a class="indexterm" name="id372980"></a>
+<a class="indexterm" name="id372987"></a>
+<a class="indexterm" name="id372994"></a>
+<a class="indexterm" name="id373000"></a>
+<a class="indexterm" name="id373007"></a>
 For each network, the LMB on that network is
 considered <span class="emphasis"><em>authoritative</em></span> for all the names it receives via
 local broadcast. This is because a machine seen by the LMB
@@ -1143,7 +1143,7 @@
 browse lists have not been directly seen. These records are
 called <span class="emphasis"><em>non-authoritative.</em></span>
 </p><p>
-<a class="indexterm" name="id2607816"></a>
+<a class="indexterm" name="id373035"></a>
 At this point the browse lists appear as shown in <a class="link" href="NetworkBrowsing.html#browsubnet" title="Table 10.1. Browse Subnet Example 1">Browse Subnet Example 1</a>
 (these are the machines you would see in your network neighborhood if you looked in it on a particular network
 right now).
@@ -1152,19 +1152,19 @@
 </p><p>
 At this point all the subnets are separate, and no machine is seen across any of the subnets.
 </p><p>
-<a class="indexterm" name="id2607910"></a>
-<a class="indexterm" name="id2607916"></a>
-<a class="indexterm" name="id2607923"></a>
-<a class="indexterm" name="id2607930"></a>
+<a class="indexterm" name="id373125"></a>
+<a class="indexterm" name="id373132"></a>
+<a class="indexterm" name="id373138"></a>
+<a class="indexterm" name="id373145"></a>
 Now examine subnet 2 in <a class="link" href="NetworkBrowsing.html#brsbex" title="Table 10.2. Browse Subnet Example 2">Browse Subnet Example 2</a>.  As soon as N2_B has become the
 LMB, it looks for a DMB with which to synchronize its browse list. It does this by querying the WINS server
 (N2_D) for the IP address associated with the NetBIOS name WORKGROUP&lt;1B&gt;. This name was registered by
 the DMB (N1_C) with the WINS server as soon as it was started.
 </p><p>
-<a class="indexterm" name="id2607956"></a>
-<a class="indexterm" name="id2607962"></a>
-<a class="indexterm" name="id2607969"></a>
-<a class="indexterm" name="id2607976"></a>
+<a class="indexterm" name="id373167"></a>
+<a class="indexterm" name="id373174"></a>
+<a class="indexterm" name="id373180"></a>
+<a class="indexterm" name="id373187"></a>
 Once N2_B knows the address of the DMB, it tells it that is the LMB for subnet 2 by sending a
 <span class="emphasis"><em>MasterAnnouncement</em></span> packet as a UDP port 138 packet.  It then synchronizes with it by
 doing a <span class="emphasis"><em>NetServerEnum2</em></span> call. This tells the DMB to send it all the server names it knows
@@ -1174,14 +1174,14 @@
 </p><div class="table"><a name="brsbex"></a><p class="title"><b>Table 10.2. Browse Subnet Example 2</b></p><div class="table-contents"><table summary="Browse Subnet Example 2" border="1"><colgroup><col align="left"><col align="left"><col align="justify"></colgroup><thead><tr><th align="left">Subnet</th><th align="left">Browse Master</th><th align="justify">List</th></tr></thead><tbody><tr><td align="left">Subnet1</td><td align="left">N1_C</td><td align="justify">N1_A, N1_B, N1_C, N1_D, N1_E,
 N2_A(*), N2_B(*), N2_C(*), N2_D(*)</td></tr><tr><td align="left">Subnet2</td><td align="left">N2_B</td><td align="justify">N2_A, N2_B, N2_C, N2_D, N1_A(*),
 N1_B(*), N1_C(*), N1_D(*), N1_E(*)</td></tr><tr><td align="left">Subnet3</td><td align="left">N3_D</td><td align="justify">N3_A, N3_B, N3_C, N3_D</td></tr></tbody></table></div></div><br class="table-break"><p>
-<a class="indexterm" name="id2608090"></a>
+<a class="indexterm" name="id373295"></a>
 Servers with an (*) after them are non-authoritative names.
 </p><p>
-<a class="indexterm" name="id2608102"></a>
+<a class="indexterm" name="id373306"></a>
 At this point users looking in their Network Neighborhood on subnets 1 or 2 will see all the servers on both;
 users on subnet 3 will still see only the servers on their own subnet.
 </p><p>
-<a class="indexterm" name="id2608115"></a>
+<a class="indexterm" name="id373317"></a>
 The same sequence of events that occurred for N2_B now occurs for the LMB on subnet 3 (N3_D). When it
 synchronizes browse lists with the DMB (N1_A) it gets both the server entries on subnet 1 and those on subnet
 2. After N3_D has synchronized with N1_C and vica versa, the browse lists will appear as shown in <a class="link" href="NetworkBrowsing.html#brsex2" title="Table 10.3. Browse Subnet Example 3">Browse Subnet Example 3</a>
@@ -1195,9 +1195,9 @@
 subnets 1 or 3 will see all the servers on all subnets, while users on
 subnet 2 will still see only the servers on subnets 1 and 2, but not 3.
 </p><p>
-<a class="indexterm" name="id2608232"></a>
-<a class="indexterm" name="id2608239"></a>
-<a class="indexterm" name="id2608245"></a>
+<a class="indexterm" name="id373427"></a>
+<a class="indexterm" name="id373433"></a>
+<a class="indexterm" name="id373440"></a>
 Finally, the LMB for subnet 2 (N2_B) will sync again
 with the DMB (N1_C) and will receive the missing
 server entries. Finally, as when a steady state (if no machines
@@ -1218,7 +1218,7 @@
 </p><p>
 If either router R1 or R2 fails, the following will occur:
 </p><div class="orderedlist"><ol type="1"><li><p>
-<a class="indexterm" name="id2608375"></a>
+<a class="indexterm" name="id373562"></a>
 	Names of computers on each side of the inaccessible network fragments
 	will be maintained for as long as 36 minutes in the Network Neighborhood
 	lists.
@@ -1226,26 +1226,26 @@
 	Attempts to connect to these inaccessible computers will fail, but the
 	names will not be removed from the Network Neighborhood lists.
 	</p></li><li><p>
-<a class="indexterm" name="id2608400"></a>
-<a class="indexterm" name="id2608407"></a>
-<a class="indexterm" name="id2608414"></a>
+<a class="indexterm" name="id373584"></a>
+<a class="indexterm" name="id373591"></a>
+<a class="indexterm" name="id373598"></a>
 	If one of the fragments is cut off from the WINS server, it will only
 	be able to access servers on its local subnet using subnet-isolated
 	broadcast NetBIOS name resolution. The effect is similar to that of
 	losing access to a DNS server.
-	</p></li></ol></div></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2608431"></a>Common Errors</h2></div></div></div><p>
-<a class="indexterm" name="id2608439"></a>
-<a class="indexterm" name="id2608446"></a>
+	</p></li></ol></div></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id373613"></a>Common Errors</h2></div></div></div><p>
+<a class="indexterm" name="id373621"></a>
+<a class="indexterm" name="id373627"></a>
 Many questions are asked on the mailing lists regarding browsing. The majority of browsing
 problems originate from incorrect configuration of NetBIOS name resolution. Some are of
 particular note.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2608457"></a>Flushing the Samba NetBIOS Name Cache</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id373637"></a>Flushing the Samba NetBIOS Name Cache</h3></div></div></div><p>
 How Can One Flush the Samba NetBIOS Name Cache without Restarting Samba?
 </p><p>
-<a class="indexterm" name="id2608470"></a>
-<a class="indexterm" name="id2608477"></a>
-<a class="indexterm" name="id2608484"></a>
-<a class="indexterm" name="id2608491"></a>
+<a class="indexterm" name="id373649"></a>
+<a class="indexterm" name="id373656"></a>
+<a class="indexterm" name="id373662"></a>
+<a class="indexterm" name="id373669"></a>
 Samba's <code class="literal">nmbd</code> process controls all browse list handling. Under normal circumstances it is
 safe to restart <code class="literal">nmbd</code>. This will effectively flush the Samba NetBIOS name cache and cause it
 to be rebuilt. This does not make certain that a rogue machine name will not reappear
@@ -1255,47 +1255,47 @@
 shut down and restarted after all machines are down. Failing a complete restart, the only
 other thing you can do is wait until the entry times out and is then flushed from the list.
 This may take a long time on some networks (perhaps months).
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2608530"></a>Server Resources Cannot Be Listed</h3></div></div></div><p>&#8220;<span class="quote">My Client Reports "&#8216;<span class="quote">This server is not configured to list shared resources."</span>&#8217;</span>&#8221;</p><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id373702"></a>Server Resources Cannot Be Listed</h3></div></div></div><p>&#8220;<span class="quote">My Client Reports "&#8216;<span class="quote">This server is not configured to list shared resources."</span>&#8217;</span>&#8221;</p><p>
 Your guest account is probably invalid for some reason. Samba uses the
 guest account for browsing in <code class="literal">smbd</code>. Check that your guest account is
 valid.
-</p><p>Also see <a class="link" href="smb.conf.5.html#GUESTACCOUNT">guest account</a> in the <code class="filename">smb.conf</code> man page.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2608579"></a>I Get an "<span class="errorname">Unable to browse the network</span>" Error</h3></div></div></div><p>This error can have multiple causes:
-<a class="indexterm" name="id2608591"></a>
+</p><p>Also see <a class="link" href="smb.conf.5.html#GUESTACCOUNT">guest account</a> in the <code class="filename">smb.conf</code> man page.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id373747"></a>I Get an "<span class="errorname">Unable to browse the network</span>" Error</h3></div></div></div><p>This error can have multiple causes:
+<a class="indexterm" name="id373759"></a>
 	</p><div class="itemizedlist"><ul type="disc"><li><p>There is no LMB. Configure <span class="application">nmbd</span>
 			or any other machine to serve as LMB.</p></li><li><p>You cannot log onto the machine that is the LMB.
 			Can you log on to it as a guest user? </p></li><li><p>There is no IP connectivity to the LMB.
-			Can you reach it by broadcast?</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2608626"></a>Browsing of Shares and Directories is Very Slow</h3></div></div></div><p>&#8220;<span class="quote">
-<a class="indexterm" name="id2608635"></a>
+			Can you reach it by broadcast?</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id373792"></a>Browsing of Shares and Directories is Very Slow</h3></div></div></div><p>&#8220;<span class="quote">
+<a class="indexterm" name="id373801"></a>
 There are only two machines on a test network. One is a Samba server, the other a Windows XP machine.
 Authentication and logons work perfectly, but when I try to explore shares on the Samba server, the
 Windows XP client becomes unresponsive. Sometimes it does not respond for some minutes. Eventually,
 Windows Explorer will respond and displays files and directories without problem.
 </span>&#8221;
 </p><p>&#8220;<span class="quote">
-<a class="indexterm" name="id2608654"></a>
+<a class="indexterm" name="id373817"></a>
 But, the share is immediately available from a command shell (<code class="literal">cmd</code>, followed by
 exploration with DOS command. Is this a Samba problem, or is it a Windows problem? How can I solve this?
 </span>&#8221;</p><p>
 Here are a few possibilities:
 </p><div class="variablelist"><dl><dt><span class="term">Bad Networking Hardware</span></dt><dd><p>
-<a class="indexterm" name="id2608686"></a>
-<a class="indexterm" name="id2608693"></a>
-<a class="indexterm" name="id2608700"></a>
-<a class="indexterm" name="id2608706"></a>
-<a class="indexterm" name="id2608714"></a>
+<a class="indexterm" name="id373846"></a>
+<a class="indexterm" name="id373853"></a>
+<a class="indexterm" name="id373860"></a>
+<a class="indexterm" name="id373867"></a>
+<a class="indexterm" name="id373874"></a>
 		Most common defective hardware problems center around low cost or defective hubs, routers,
 		network interface controllers (NICs), and bad wiring. If one piece of hardware is defective,
 		the whole network may suffer. Bad networking hardware can cause data corruption. Most bad
 		networking hardware problems are accompanied by an increase in apparent network traffic,
 		but not all.
 		</p></dd><dt><span class="term">The Windows XP WebClient</span></dt><dd><p>
-<a class="indexterm" name="id2608738"></a>
+<a class="indexterm" name="id373895"></a>
 		A number of sites have reported similar slow network browsing problems and found that when
 		the WebClient service is turned off, the problem disappears. This is certainly something
 		that should be explored because it is a simple solution  if it works.
 		</p></dd><dt><span class="term">Inconsistent WINS Configuration</span></dt><dd><p>
-<a class="indexterm" name="id2608764"></a>
-<a class="indexterm" name="id2608771"></a>
+<a class="indexterm" name="id373918"></a>
+<a class="indexterm" name="id373924"></a>
 		This type of problem is common when one client is configured to use a WINS server (that is
 		a TCP/IP configuration setting) and there is no WINS server on the network. Alternatively,
 		this will happen if there is a WINS server and Samba is not configured to use it. The use of
@@ -1303,14 +1303,14 @@
 		of NetBIOS over TCP/IP is disabled on all clients, Samba should not be configured as a WINS
 		server, nor should it be configured to use one.
 		</p></dd><dt><span class="term">Incorrect DNS Configuration</span></dt><dd><p>
-<a class="indexterm" name="id2608797"></a>
-<a class="indexterm" name="id2608804"></a>
+<a class="indexterm" name="id373947"></a>
+<a class="indexterm" name="id373953"></a>
 		If use of NetBIOS over TCP/IP is disabled, Active Directory is in use and the DNS server
 		has been incorrectly configured. For further information refer to
 		<a class="link" href="NetworkBrowsing.html#adsdnstech" title="DNS and Active Directory">DNS and Active Directory</a>.
-		</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2608826"></a>Invalid Cached Share References Affects Network Browsing</h3></div></div></div><p>
-<a class="indexterm" name="id2608834"></a>
-<a class="indexterm" name="id2608841"></a>
+		</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id373973"></a>Invalid Cached Share References Affects Network Browsing</h3></div></div></div><p>
+<a class="indexterm" name="id373981"></a>
+<a class="indexterm" name="id373988"></a>
 Cached references on your MS Windows client (workstation or server) to shares or servers that no longer exist
 can cause MS Windows Explorer to appear unresponsive as it tries to connect to these shares. After a delay
 (can take a long time) it times out and browsing will appear to be mostly normal again.
@@ -1328,7 +1328,7 @@
 shortcuts from the MS Windows Explorer in <code class="literal">My Network Places</code> just by right-clicking them and
 selecting <span class="emphasis"><em>Delete.</em></span>
 </p></div><p>
-<a class="indexterm" name="id2608914"></a>
+<a class="indexterm" name="id374051"></a>
 Samba users have reported that these stale references negatively affect network browsing with Windows, Samba,
 and Novell servers. It is suspected to be a universal problem not directly related to the Samba
 server. Samba users may experience this more often due to Samba being somewhat viewed as an experimenter's

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/Other-Clients.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/Other-Clients.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/Other-Clients.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,17 +1,17 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 43. Samba and Other CIFS Clients</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="Appendix.html" title="Part VI. Reference Section"><link rel="prev" href="Portability.html" title="Chapter 42. Portability"><link rel="next" href="speed.html" title="Chapter 44. Samba Performance Tuning"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 43. Samba and Other CIFS Clients</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="Portability.html">Prev</a> </td><th width="60%" align="center">Part VI. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="speed.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="Other-Clients"></a>Chapter 43. Samba and Other CIFS Clients</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Dan</span> <span class="surname">Shearer</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:dan at samba.org">dan at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jim</span> <span class="surname">McDonough</span></h3><span class="contrib">OS/2</span> <div class="affiliation"><span class="orgname">IBM<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jmcd at us.ibm.com">jmcd at us.ibm.com</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">5 Mar 2001</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="Other-Clients.html#id2711424">Macintosh Clients</a></span></dt><dt><span class="sect1"><a href="Other-Clients.html#id2711508">OS2 Client</a></span></dt><dd><dl><dt><span class="sect2"><a href="Other-Clients.html#id2711513">Configuring OS/2 Warp Connect or OS/2 Warp 4</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id2711633">Configuring Other Versions of OS/2</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id2711689">Printer Driver Download for OS/2 Clients</a></span></dt></dl></dd><dt><span class="sect1"><a href="Other-Clients.html#id2711782">Windows for Workgroups</a></span></dt><dd><dl><dt><span class="sect2"><a href="Other-Clients.html#id2711788">Latest TCP/IP Stack from Microsoft</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id2711871">Delete .pwl Files After Password Change</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id2711897">Configuring Windows for Workgroups Password Handling</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id2711956">Password Case Sensitivity</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id2711987">Use TCP/IP as Default Protocol</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#speedimpr">Speed Improvement</a></span></dt></dl></dd><dt><span class="sect1"><a href="Other-Clients.html#id2712044">Windows 95/98</a></span></dt><dd><dl><dt><span class="sect2"><a href="Other-Clients.html#id2712114">Speed Improvement</a></span></dt></dl></dd><dt><span class="sect1"><a href="Other-Clients.html#id2712134">Windows 2000 Service Pack 2</a></span></dt><dt><span class="sect1"><a href="Other-Clients.html#id2712331">Windows NT 3.1</a></span></dt></dl></div><p>This chapter contains client-specific information.</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2711424"></a>Macintosh Clients</h2></div></div></div><p>
-<a class="indexterm" name="id2711431"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 43. Samba and Other CIFS Clients</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="Appendix.html" title="Part VI. Reference Section"><link rel="prev" href="Portability.html" title="Chapter 42. Portability"><link rel="next" href="speed.html" title="Chapter 44. Samba Performance Tuning"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 43. Samba and Other CIFS Clients</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="Portability.html">Prev</a> </td><th width="60%" align="center">Part VI. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="speed.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="Other-Clients"></a>Chapter 43. Samba and Other CIFS Clients</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Dan</span> <span class="surname">Shearer</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:dan at samba.org">dan at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jim</span> <span class="surname">McDonough</span></h3><span class="contrib">OS/2</span> <div class="affiliation"><span class="orgname">IBM<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jmcd at us.ibm.com">jmcd at us.ibm.com</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">5 Mar 2001</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="Other-Clients.html#id468182">Macintosh Clients</a></span></dt><dt><span class="sect1"><a href="Other-Clients.html#id468258">OS2 Client</a></span></dt><dd><dl><dt><span class="sect2"><a href="Other-Clients.html#id468263">Configuring OS/2 Warp Connect or OS/2 Warp 4</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id468374">Configuring Other Versions of OS/2</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id468424">Printer Driver Download for OS/2 Clients</a></span></dt></dl></dd><dt><span class="sect1"><a href="Other-Clients.html#id468507">Windows for Workgroups</a></span></dt><dd><dl><dt><span class="sect2"><a href="Other-Clients.html#id468513">Latest TCP/IP Stack from Microsoft</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id468591">Delete .pwl Files After Password Change</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id468612">Configuring Windows for Workgroups Password Handling</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id468666">Password Case Sensitivity</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id468694">Use TCP/IP as Default Protocol</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#speedimpr">Speed Improvement</a></span></dt></dl></dd><dt><span class="sect1"><a href="Other-Clients.html#id468745">Windows 95/98</a></span></dt><dd><dl><dt><span class="sect2"><a href="Other-Clients.html#id468809">Speed Improvement</a></span></dt></dl></dd><dt><span class="sect1"><a href="Other-Clients.html#id468827">Windows 2000 Service Pack 2</a></span></dt><dt><span class="sect1"><a href="Other-Clients.html#id469006">Windows NT 3.1</a></span></dt></dl></div><p>This chapter contains client-specific information.</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id468182"></a>Macintosh Clients</h2></div></div></div><p>
+<a class="indexterm" name="id468190"></a>
 Yes. <a class="ulink" href="http://www.thursby.com/" target="_top">Thursby</a> has a CIFS client/server called <a class="ulink" href="http://www.thursby.com/products/dave.html" target="_top">DAVE</a>.  They test it against Windows 95, Windows
 NT/200x/XP, and Samba for compatibility issues. At the time of this writing, DAVE was at version 5.1. Please
 refer to Thursby's Web site for more information regarding this product.
 </p><p> 
-<a class="indexterm" name="id2711458"></a>
-<a class="indexterm" name="id2711465"></a>
+<a class="indexterm" name="id468214"></a>
+<a class="indexterm" name="id468221"></a>
 Alternatives include two free implementations of AppleTalk for several kinds of UNIX machines and several more
 commercial ones.  These products allow you to run file services and print services natively to Macintosh
 users, with no additional support required on the Macintosh. The two free implementations are <a class="ulink" href="http://www.umich.edu/~rsug/netatalk/" target="_top">Netatalk</a> and <a class="ulink" href="http://www.cs.mu.oz.au/appletalk/atalk.html" target="_top">CAP</a>.  What Samba offers MS Windows users, these
 packages offer to Macs.  For more info on these packages, Samba, and Linux (and other UNIX-based systems), see
 <a class="ulink" href="http://www.eats.com/linux_mac_win.html" target="_top">http://www.eats.com/linux_mac_win.html.</a>
-</p><p>Newer versions of the Macintosh (Mac OS X) include Samba.</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2711508"></a>OS2 Client</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2711513"></a>Configuring OS/2 Warp Connect or OS/2 Warp 4</h3></div></div></div><p>Basically, you need three components:</p><div class="itemizedlist"><ul type="disc"><li><p>The File and Print Client (IBM peer)</p></li><li><p>TCP/IP (Internet support) </p></li><li><p>The &#8220;<span class="quote">NetBIOS over TCP/IP</span>&#8221; driver (TCPBEUI)</p></li></ul></div><p>Installing the first two together with the base operating 
+</p><p>Newer versions of the Macintosh (Mac OS X) include Samba.</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id468258"></a>OS2 Client</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id468263"></a>Configuring OS/2 Warp Connect or OS/2 Warp 4</h3></div></div></div><p>Basically, you need three components:</p><div class="itemizedlist"><ul type="disc"><li><p>The File and Print Client (IBM peer)</p></li><li><p>TCP/IP (Internet support) </p></li><li><p>The &#8220;<span class="quote">NetBIOS over TCP/IP</span>&#8221; driver (TCPBEUI)</p></li></ul></div><p>Installing the first two together with the base operating 
 		system on a blank system is explained in the Warp manual. If Warp 
 		has already been installed, but you now want to install the 
 		networking support, use the &#8220;<span class="quote">Selective Install for Networking</span>&#8221; 
@@ -26,7 +26,7 @@
 		to the <span class="guimenu">Names List</span> or specify a  WINS server (NetBIOS 
 		Nameserver in IBM and RFC terminology). For Warp Connect, you 
 		may need to download an update for <code class="constant">IBM Peer</code> to bring it on 
-		the same level as Warp 4. See the IBM OS/2 Warp Web page</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2711633"></a>Configuring Other Versions of OS/2</h3></div></div></div><p>This sections deals with configuring OS/2 Warp 3 (not Connect), OS/2 1.2, 1.3 or 2.x.</p><p>You can use the free Microsoft LAN Manager 2.2c Client for OS/2 that is
+		the same level as Warp 4. See the IBM OS/2 Warp Web page</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id468374"></a>Configuring Other Versions of OS/2</h3></div></div></div><p>This sections deals with configuring OS/2 Warp 3 (not Connect), OS/2 1.2, 1.3 or 2.x.</p><p>You can use the free Microsoft LAN Manager 2.2c Client for OS/2 that is
 		available from 
 		<a class="ulink" href="ftp://ftp.microsoft.com/BusSys/Clients/LANMAN.OS2/" target="_top">
 		ftp://ftp.microsoft.com/BusSys/Clients/LANMAN.OS2/</a>. In a nutshell, edit
@@ -37,7 +37,7 @@
 		</pre><p>before you install the client. Also, do not use the included NE2000 driver because it is buggy.
 		Try the NE2000 or NS2000 driver from <a class="ulink" href="ftp://ftp.cdrom.com/pub/os2/network/ndis/" target="_top">
  		ftp://ftp.cdrom.com/pub/os2/network/ndis/</a> instead.
-		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2711689"></a>Printer Driver Download for OS/2 Clients</h3></div></div></div><p>Create a share called <em class="parameter"><code>[PRINTDRV]</code></em> that is 
+		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id468424"></a>Printer Driver Download for OS/2 Clients</h3></div></div></div><p>Create a share called <em class="parameter"><code>[PRINTDRV]</code></em> that is 
 		world-readable. Copy your OS/2 driver files there. The <code class="filename">.EA_</code>
 		files must still be separate, so you will need to use the original install files
 		and not copy an installed driver from an OS/2 system.</p><p>Install the NT driver first for that printer. Then, add to your <code class="filename">smb.conf</code> a parameter,
@@ -50,7 +50,7 @@
 		you the driver is not available. On the second attempt, it 
 		will work. This is fixed simply by adding the device name
   		 to the mapping, after which it will work on the first attempt.
-		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2711782"></a>Windows for Workgroups</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2711788"></a>Latest TCP/IP Stack from Microsoft</h3></div></div></div><p>Use the latest TCP/IP stack from Microsoft if you use Windows
+		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id468507"></a>Windows for Workgroups</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id468513"></a>Latest TCP/IP Stack from Microsoft</h3></div></div></div><p>Use the latest TCP/IP stack from Microsoft if you use Windows
 for Workgroups. The early TCP/IP stacks had lots of bugs.</p><p> 
 Microsoft has released an incremental upgrade to its TCP/IP 32-bit VxD drivers. The latest release can be
 found at ftp.microsoft.com, located in <code class="filename">/Softlib/MSLFILES/TCP32B.EXE</code>.  There is an
@@ -60,7 +60,7 @@
 <code class="filename">NETSTAT.EXE</code>, and <code class="filename">NBTSTAT.EXE</code>.
 </p><p>
 More information about this patch is available in <a class="ulink" href="http://support.microsoft.com/kb/q99891/" target="_top">Knowledge Base article 99891</a>.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2711871"></a>Delete .pwl Files After Password Change</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id468591"></a>Delete .pwl Files After Password Change</h3></div></div></div><p>
 Windows for Workgroups does a lousy job with passwords. When you change passwords on either
 the UNIX box or the PC, the safest thing to do is delete the .pwl files in the Windows
 directory. The PC will complain about not finding the files, but will soon get over it,
@@ -70,16 +70,16 @@
 password, even if you told it a new one.
 </p><p> 
 Often Windows for Workgroups will totally ignore a password you give it in a dialog box.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2711897"></a>Configuring Windows for Workgroups Password Handling</h3></div></div></div><p>
-<a class="indexterm" name="id2711906"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id468612"></a>Configuring Windows for Workgroups Password Handling</h3></div></div></div><p>
+<a class="indexterm" name="id468620"></a>
 There is a program call <code class="filename">admincfg.exe</code> on the last disk (disk 8) of the WFW 3.11 disk set.
 To install it, type <strong class="userinput"><code>EXPAND A:\ADMINCFG.EX_ C:\WINDOWS\ADMINCFG.EXE</code></strong>.  Then add an icon
 for it via the <span class="application">Program Manager</span> <span class="guimenu">New</span> menu.  This program allows
 you to control how WFW handles passwords, Disable Password Caching and so on, for use with <a class="link" href="smb.conf.5.html#SECURITY">security = user</a>.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2711956"></a>Password Case Sensitivity</h3></div></div></div><p>Windows for Workgroups uppercases the password before sending it to the server.
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id468666"></a>Password Case Sensitivity</h3></div></div></div><p>Windows for Workgroups uppercases the password before sending it to the server.
 UNIX passwords can be case-sensitive though. Check the <code class="filename">smb.conf</code> information on
 <a class="link" href="smb.conf.5.html#PASSWORDLEVEL">password level</a> to specify what characters
-Samba should try to uppercase when checking.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2711987"></a>Use TCP/IP as Default Protocol</h3></div></div></div><p>To support print queue reporting, you may find
+Samba should try to uppercase when checking.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id468694"></a>Use TCP/IP as Default Protocol</h3></div></div></div><p>To support print queue reporting, you may find
 that you have to use TCP/IP as the default protocol under
 Windows for Workgroups. For some reason, if you leave NetBEUI as the default,
 it may break the print queue reporting on some systems.
@@ -94,7 +94,7 @@
 reported that anything over 3072 slows things down enormously. One
 person even reported a speed drop of a factor of 30 when he went from
 3072 to 8192.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2712044"></a>Windows 95/98</h2></div></div></div><p>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id468745"></a>Windows 95/98</h2></div></div></div><p>
 When using Windows 95 OEM SR2, the following updates are recommended where Samba
 is being used. Please note that the changes documented in 
 <a class="link" href="Other-Clients.html#speedimpr" title="Speed Improvement">Speed Improvement</a> will affect you once these
@@ -109,11 +109,11 @@
 fix may stop your machine from hanging for an extended period when exiting
 Outlook, and you may notice a significant speedup when accessing network
 neighborhood services.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2712114"></a>Speed Improvement</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id468809"></a>Speed Improvement</h3></div></div></div><p>
 Configure the Windows 95 TCP/IP registry settings to give better
 performance. I use a program called <code class="literal">MTUSPEED.exe</code> that I got off the
 Internet. There are various other utilities of this type freely available.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2712134"></a>Windows 2000 Service Pack 2</h2></div></div></div><p> 
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id468827"></a>Windows 2000 Service Pack 2</h2></div></div></div><p> 
 There are several annoyances with Windows 2000 SP2, one of which
 only appears when using a Samba server to host user profiles
 to Windows 2000 SP2 clients in a Windows domain. This assumes
@@ -133,7 +133,7 @@
 releases prior to Samba 2.2.2.
 </p><p> 
 <a class="link" href="Other-Clients.html#minimalprofile" title="Example 43.1. Minimal Profile Share">Following example</a> provides a minimal profile share.
-</p><div class="example"><a name="minimalprofile"></a><p class="title"><b>Example 43.1. Minimal Profile Share</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[profile]</code></em></td></tr><tr><td><a class="indexterm" name="id2712225"></a><em class="parameter"><code>path = /export/profile</code></em></td></tr><tr><td><a class="indexterm" name="id2712237"></a><em class="parameter"><code>create mask = 0600</code></em></td></tr><tr><td><a class="indexterm" name="id2712248"></a><em class="parameter"><code>directory mask = 0700</code></em></td></tr><tr><td><a class="indexterm" name="id2712260"></a><em class="parameter"><code>nt acl support = no</code></em></td></tr><tr><td><a class="indexterm" name="id2712272"></a><em class="parameter"><code>read only = no</code></em></td></tr></table></div></div><br class="example-break"><p>
+</p><div class="example"><a name="minimalprofile"></a><p class="title"><b>Example 43.1. Minimal Profile Share</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[profile]</code></em></td></tr><tr><td><a class="indexterm" name="id468908"></a><em class="parameter"><code>path = /export/profile</code></em></td></tr><tr><td><a class="indexterm" name="id468920"></a><em class="parameter"><code>create mask = 0600</code></em></td></tr><tr><td><a class="indexterm" name="id468931"></a><em class="parameter"><code>directory mask = 0700</code></em></td></tr><tr><td><a class="indexterm" name="id468943"></a><em class="parameter"><code>nt acl support = no</code></em></td></tr><tr><td><a class="indexterm" name="id468954"></a><em class="parameter"><code>read only = no</code></em></td></tr></table></div></div><br class="example-break"><p>
 The reason for this bug is that the Windows 200x SP2 client copies
 the security descriptor for the profile that contains
 the Samba server's SID, and not the domain SID. The client
@@ -145,7 +145,7 @@
 the Windows 200x client a response to the QuerySecurityDescriptor trans2 call, which causes the client
 to set a default ACL for the profile. This default ACL includes:
 </p><p><span class="emphasis"><em>DOMAIN\user 	&#8220;<span class="quote">Full Control</span>&#8221;</em></span>&gt;</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>This bug does not occur when using Winbind to
-create accounts on the Samba host for Domain users.</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2712331"></a>Windows NT 3.1</h2></div></div></div><p>If you have problems communicating across routers with Windows 
+create accounts on the Samba host for Domain users.</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id469006"></a>Windows NT 3.1</h2></div></div></div><p>If you have problems communicating across routers with Windows 
 NT 3.1 workstations, read <a class="ulink" href="http://support.microsoft.com/default.aspx?scid=kb;Q103765" target="_top">this Microsoft Knowledge Base article:</a>.
 
 </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="Portability.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="Appendix.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="speed.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 42. Portability </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 44. Samba Performance Tuning</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/PolicyMgmt.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/PolicyMgmt.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/PolicyMgmt.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,24 +1,24 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 26. System and Account Policies</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="AdvancedNetworkManagement.html" title="Chapter 25. Advanced Network Management"><link rel="next" href="ProfileMgmt.html" title="Chapter 27. Desktop Profile Management"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 26. System and Account Policies</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="AdvancedNetworkManagement.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="ProfileMgmt.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="PolicyMgmt"></a>Chapter 26. System and Account Policies</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">April 3 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="PolicyMgmt.html#id2681125">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="PolicyMgmt.html#id2681239">Creating and Managing System Policies</a></span></dt><dd><dl><dt><span class="sect2"><a href="PolicyMgmt.html#id2681428">Windows 9x/ME Policies</a></span></dt><dt><span class="sect2"><a href="PolicyMgmt.html#id2681565">Windows NT4-Style Policy Files</a></span></dt><dt><span class="sect2"><a href="PolicyMgmt.html#id2681787">MS Windows 200x/XP Professional Policies</a></span></dt></dl></dd><dt><span class="sect1"><a href="PolicyMgmt.html#id2682235">Managing Account/User Policies</a></span></dt><dt><span class="sect1"><a href="PolicyMgmt.html#id2682462">Management Tools</a></span></dt><dd><dl><dt><span class="sect2"><a href="PolicyMgmt.html#id2682475">Samba Editreg Toolset</a></span></dt><dt><span class="sect2"><a href="PolicyMgmt.html#id2682557">Windows NT4/200x</a></span></dt><dt><span class="sect2"><a href="PolicyMgmt.html#id2682597">Samba PDC</a></span></dt></dl></dd><dt><span class="sect1"><a href="PolicyMgmt.html#id2682662">System Startup and Logon Processing Overview</a></span></dt><dt><span class="sect1"><a href="PolicyMgmt.html#id2682820">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="PolicyMgmt.html#id2682831">Policy Does Not Work</a></span></dt></dl></dd></dl></div><p>
-<a class="indexterm" name="id2681111"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 26. System and Account Policies</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="AdvancedNetworkManagement.html" title="Chapter 25. Advanced Network Management"><link rel="next" href="ProfileMgmt.html" title="Chapter 27. Desktop Profile Management"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 26. System and Account Policies</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="AdvancedNetworkManagement.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="ProfileMgmt.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="PolicyMgmt"></a>Chapter 26. System and Account Policies</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">April 3 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="PolicyMgmt.html#id440104">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="PolicyMgmt.html#id440199">Creating and Managing System Policies</a></span></dt><dd><dl><dt><span class="sect2"><a href="PolicyMgmt.html#id440369">Windows 9x/ME Policies</a></span></dt><dt><span class="sect2"><a href="PolicyMgmt.html#id440493">Windows NT4-Style Policy Files</a></span></dt><dt><span class="sect2"><a href="PolicyMgmt.html#id440699">MS Windows 200x/XP Professional Policies</a></span></dt></dl></dd><dt><span class="sect1"><a href="PolicyMgmt.html#id441101">Managing Account/User Policies</a></span></dt><dt><span class="sect1"><a href="PolicyMgmt.html#id441305">Management Tools</a></span></dt><dd><dl><dt><span class="sect2"><a href="PolicyMgmt.html#id441316">Samba Editreg Toolset</a></span></dt><dt><span class="sect2"><a href="PolicyMgmt.html#id441392">Windows NT4/200x</a></span></dt><dt><span class="sect2"><a href="PolicyMgmt.html#id441429">Samba PDC</a></span></dt></dl></dd><dt><span class="sect1"><a href="PolicyMgmt.html#id441492">System Startup and Logon Processing Overview</a></span></dt><dt><span class="sect1"><a href="PolicyMgmt.html#id441634">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="PolicyMgmt.html#id441644">Policy Does Not Work</a></span></dt></dl></dd></dl></div><p>
+<a class="indexterm" name="id440093"></a>
 This chapter summarizes the current state of knowledge derived from personal
 practice and knowledge from Samba mailing list subscribers. Before reproduction
 of posted information, every effort has been made to validate the information given.
 Where additional information was uncovered through this validation, it is provided
 also.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2681125"></a>Features and Benefits</h2></div></div></div><p>
-<a class="indexterm" name="id2681133"></a>
-<a class="indexterm" name="id2681140"></a>
-<a class="indexterm" name="id2681146"></a>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id440104"></a>Features and Benefits</h2></div></div></div><p>
+<a class="indexterm" name="id440112"></a>
+<a class="indexterm" name="id440119"></a>
+<a class="indexterm" name="id440125"></a>
 When MS Windows NT 3.5 was introduced, the hot new topic was the ability to implement
 Group Policies for users and groups. Then along came MS Windows NT4 and a few sites
 started to adopt this capability. How do we know that? By the number of &#8220;<span class="quote">boo-boos</span>&#8221;
 (or mistakes) administrators made and then requested help to resolve.
 </p><p>
-<a class="indexterm" name="id2681165"></a>
-<a class="indexterm" name="id2681172"></a>
-<a class="indexterm" name="id2681181"></a>
-<a class="indexterm" name="id2681188"></a>
-<a class="indexterm" name="id2681195"></a>
+<a class="indexterm" name="id440142"></a>
+<a class="indexterm" name="id440148"></a>
+<a class="indexterm" name="id440157"></a>
+<a class="indexterm" name="id440164"></a>
+<a class="indexterm" name="id440171"></a>
 By the time that MS Windows 2000 and Active Directory was released, administrators
 got the message: Group Policies are a good thing! They can help reduce administrative
 costs and actually make happier users. But adoption of the true
@@ -27,16 +27,16 @@
 mailing list back in 2000 and 2001 when there were few postings regarding GPOs and
 how to replicate them in a Samba environment.
 </p><p>
-<a class="indexterm" name="id2681225"></a>
+<a class="indexterm" name="id440188"></a>
 Judging by the traffic volume since mid 2002, GPOs have become a standard part of
 the deployment in many sites. This chapter reviews techniques and methods that can
 be used to exploit opportunities for automation of control over user desktops and
 network client workstations.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2681239"></a>Creating and Managing System Policies</h2></div></div></div><p>
-<a class="indexterm" name="id2681247"></a>
-<a class="indexterm" name="id2681254"></a>
-<a class="indexterm" name="id2681261"></a>
-<a class="indexterm" name="id2681268"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id440199"></a>Creating and Managing System Policies</h2></div></div></div><p>
+<a class="indexterm" name="id440207"></a>
+<a class="indexterm" name="id440214"></a>
+<a class="indexterm" name="id440220"></a>
+<a class="indexterm" name="id440227"></a>
 Under MS Windows platforms, particularly those following the release of MS Windows
 NT4 and MS Windows 95, it is possible to create a type of file that would be placed
 in the NETLOGON share of a domain controller. As the client logs onto the network,
@@ -44,9 +44,9 @@
 machine. This file allows changes to be made to those parts of the registry that
 affect users, groups of users, or machines.
 </p><p>
-<a class="indexterm" name="id2681286"></a>
-<a class="indexterm" name="id2681293"></a>
-<a class="indexterm" name="id2681299"></a>
+<a class="indexterm" name="id440241"></a>
+<a class="indexterm" name="id440248"></a>
+<a class="indexterm" name="id440255"></a>
 For MS Windows 9x/Me, this file must be called <code class="filename">Config.POL</code> and may
 be generated using a tool called <code class="filename">poledit.exe</code>, better known as the
 Policy Editor. The policy editor was provided on the Windows 98 installation CD-ROM, but
@@ -54,12 +54,12 @@
 comments of MS Windows network administrators, it would appear that this tool became
 a part of the MS Windows Me Resource Kit.
 </p><p>
-<a class="indexterm" name="id2681328"></a>
+<a class="indexterm" name="id440280"></a>
 MS Windows NT4 server products include the <span class="emphasis"><em>System Policy Editor</em></span>
 under <span class="guimenu">Start -&gt; Programs -&gt; Administrative Tools</span>.
 For MS Windows NT4 and later clients, this file must be called <code class="filename">NTConfig.POL</code>.
 </p><p>
-<a class="indexterm" name="id2681357"></a>
+<a class="indexterm" name="id440307"></a>
 New with the introduction of MS Windows 2000 was the Microsoft Management Console
 or MMC. This tool is the new wave in the ever-changing landscape of Microsoft
 methods for management of network access and security. Every new Microsoft product
@@ -67,10 +67,10 @@
 complex tools and methods. To Microsoft's credit, the MMC does appear to
 be a step forward, but improved functionality comes at a great price.
 </p><p>
-<a class="indexterm" name="id2681374"></a>
-<a class="indexterm" name="id2681381"></a>
-<a class="indexterm" name="id2681388"></a>
-<a class="indexterm" name="id2681395"></a>
+<a class="indexterm" name="id440321"></a>
+<a class="indexterm" name="id440327"></a>
+<a class="indexterm" name="id440334"></a>
+<a class="indexterm" name="id440341"></a>
 Before embarking on the configuration of network and system policies, it is highly
 advisable to read the documentation available from Microsoft's Web site regarding
 <a class="ulink" href="http://www.microsoft.com/ntserver/techresources/management/prof_policies.asp" target="_top">
@@ -80,16 +80,16 @@
 </p><p>
 What follows is a brief discussion with some helpful notes. The information provided
 here is incomplete  you are warned.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2681428"></a>Windows 9x/ME Policies</h3></div></div></div><p>
-<a class="indexterm" name="id2681436"></a>
-<a class="indexterm" name="id2681443"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id440369"></a>Windows 9x/ME Policies</h3></div></div></div><p>
+<a class="indexterm" name="id440377"></a>
+<a class="indexterm" name="id440383"></a>
 	You need the Windows 98 Group Policy Editor to set up Group Profiles under Windows 9x/Me.
 	It can be found on the original full-product Windows 98 installation CD-ROM under
 	<code class="filename">tools\reskit\netadmin\poledit</code>. Install this using the
 	Add/Remove Programs facility, and then click on <span class="guiicon">Have Disk</span>.
 	</p><p>
-<a class="indexterm" name="id2681469"></a>
-<a class="indexterm" name="id2681476"></a>
+<a class="indexterm" name="id440408"></a>
+<a class="indexterm" name="id440414"></a>
 	Use the Group Policy Editor to create a policy file that specifies the location of
 	user profiles and/or <code class="filename">My Documents</code>, and so on. Then save these
 	settings in a file called <code class="filename">Config.POL</code> that needs to be placed in the
@@ -99,25 +99,25 @@
 	</p><p>
 	Further details are covered in the Windows 98 Resource Kit documentation.
 	</p><p>
-<a class="indexterm" name="id2681515"></a>
+<a class="indexterm" name="id440449"></a>
 	If you do not take the correct steps, then every so often Windows 9x/Me will check the
 	integrity of the registry and restore its settings from the backup
 	copy of the registry it stores on each Windows 9x/Me machine. So, you will
 	occasionally notice things changing back to the original settings.
 	</p><p>
-<a class="indexterm" name="id2681530"></a>
-<a class="indexterm" name="id2681537"></a>
+<a class="indexterm" name="id440462"></a>
+<a class="indexterm" name="id440469"></a>
 	Install the Group Policy handler for Windows 9x/Me to pick up Group Policies. Look on the
 	Windows 98 CD-ROM in <code class="filename">\tools\reskit\netadmin\poledit</code>.
 	Install Group Policies on a Windows 9x/Me client by double-clicking on
 	<code class="filename">grouppol.inf</code>. Log off and on again a couple of times and see
 	if Windows 98 picks up Group Policies. Unfortunately, this needs to be done on every
 	Windows 9x/Me machine that uses Group Policies.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2681565"></a>Windows NT4-Style Policy Files</h3></div></div></div><p>
-<a class="indexterm" name="id2681573"></a>
-<a class="indexterm" name="id2681580"></a>
-<a class="indexterm" name="id2681587"></a>
-<a class="indexterm" name="id2681594"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id440493"></a>Windows NT4-Style Policy Files</h3></div></div></div><p>
+<a class="indexterm" name="id440501"></a>
+<a class="indexterm" name="id440508"></a>
+<a class="indexterm" name="id440514"></a>
+<a class="indexterm" name="id440521"></a>
 	To create or edit <code class="filename">ntconfig.pol</code>, you must use the NT Server
 	Policy Editor, <code class="literal">poledit.exe</code>, which is included with NT4 Server
 	but not with NT workstation. There is a Policy Editor on an NT4
@@ -126,19 +126,19 @@
 	workstation/server, it will not work with NT clients. However, the files from
 	the NT Server will run happily enough on an NT4 workstation.
 	</p><p>
-<a class="indexterm" name="id2681624"></a>
-<a class="indexterm" name="id2681630"></a>
-<a class="indexterm" name="id2681637"></a>
-<a class="indexterm" name="id2681644"></a>
+<a class="indexterm" name="id440547"></a>
+<a class="indexterm" name="id440554"></a>
+<a class="indexterm" name="id440560"></a>
+<a class="indexterm" name="id440567"></a>
 	You need <code class="filename">poledit.exe</code>, <code class="filename">common.adm</code>, and <code class="filename">winnt.adm</code>.
 	It is convenient to put the two <code class="filename">*.adm</code> files in  the <code class="filename">c:\winnt\inf</code> 
 	directory, which is where the binary will look for them unless told otherwise. This
 	directory is normally &#8220;<span class="quote">hidden.</span>&#8221;
 	</p><p>
-<a class="indexterm" name="id2681690"></a>
-<a class="indexterm" name="id2681697"></a>
-<a class="indexterm" name="id2681704"></a>
-<a class="indexterm" name="id2681711"></a>
+<a class="indexterm" name="id440612"></a>
+<a class="indexterm" name="id440618"></a>
+<a class="indexterm" name="id440625"></a>
+<a class="indexterm" name="id440632"></a>
 	The Windows NT Policy Editor is also included with the Service Pack 3 (and
 	later) for Windows NT 4.0. Extract the files using <code class="literal">servicepackname /x</code>
 	 that's <code class="literal">Nt4sp6ai.exe /x</code> for Service Pack 6a. The Policy Editor,
@@ -146,17 +146,17 @@
 	be extracted as well. It is also possible to download the policy template
 	files for Office97 and get a copy of the Policy Editor. Another possible
 	location is with the Zero Administration Kit available for download from Microsoft.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2681747"></a>Registry Spoiling</h4></div></div></div><p>
-<a class="indexterm" name="id2681755"></a>
-<a class="indexterm" name="id2681762"></a>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id440664"></a>Registry Spoiling</h4></div></div></div><p>
+<a class="indexterm" name="id440672"></a>
+<a class="indexterm" name="id440679"></a>
 			With NT4-style registry-based policy changes, a large number of settings are not
 			automatically reversed as the user logs off. The settings that were in the
 			<code class="filename">NTConfig.POL</code> file were applied to the client machine registry and apply to the
 			hive key HKEY_LOCAL_MACHINE are permanent until explicitly reversed. This is known
 			as tattooing. It can have serious consequences downstream, and the administrator must
 			be extremely careful not to lock out the ability to manage the machine at a later date.
-			</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2681787"></a>MS Windows 200x/XP Professional Policies</h3></div></div></div><p>
-<a class="indexterm" name="id2681795"></a>
+			</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id440699"></a>MS Windows 200x/XP Professional Policies</h3></div></div></div><p>
+<a class="indexterm" name="id440707"></a>
 	Windows NT4 system policies allow the setting of registry parameters specific to
 	users, groups, and computers (client workstations) that are members of the NT4-style
 	domain. Such policy files will work with MS Windows 200x/XP clients also.
@@ -165,8 +165,8 @@
 	a superset of capabilities compared with NT4-style policies. Obviously, the tool used
 	to create them is different, and the mechanism for implementing them is much improved.
 	</p><p>
-	<a class="indexterm" name="id2681817"></a>
-<a class="indexterm" name="id2681824"></a>
+	<a class="indexterm" name="id440725"></a>
+<a class="indexterm" name="id440731"></a>
 	The older NT4-style registry-based policies are known as <span class="emphasis"><em>Administrative Templates</em></span>
 	in MS Windows 2000/XP GPOs. The latter includes the ability to set various security
 	configurations, enforce Internet Explorer browser settings, change and redirect aspects of the
@@ -175,23 +175,23 @@
 	feature is the ability to make available particular software Windows applications to particular
 	users and/or groups.
 	</p><p>
-<a class="indexterm" name="id2681852"></a>
-<a class="indexterm" name="id2681859"></a>
-<a class="indexterm" name="id2681866"></a>
+<a class="indexterm" name="id440756"></a>
+<a class="indexterm" name="id440762"></a>
+<a class="indexterm" name="id440769"></a>
 	Remember, NT4 policy files are named <code class="filename">NTConfig.POL</code> and are stored in the root
 	of the NETLOGON share on the domain controllers. A Windows NT4 user enters a username and password
 	and selects the domain name to which the logon will attempt to take place. During the logon process,
 	the client machine reads the <code class="filename">NTConfig.POL</code> file from the NETLOGON share on
 	the authenticating server and modifies the local registry values according to the settings in this file.
 	</p><p>
-<a class="indexterm" name="id2681896"></a>
-<a class="indexterm" name="id2681903"></a>
-<a class="indexterm" name="id2681910"></a>
-<a class="indexterm" name="id2681916"></a>
-<a class="indexterm" name="id2681923"></a>
-<a class="indexterm" name="id2681930"></a>
-<a class="indexterm" name="id2681939"></a>
-<a class="indexterm" name="id2681949"></a>
+<a class="indexterm" name="id440795"></a>
+<a class="indexterm" name="id440801"></a>
+<a class="indexterm" name="id440808"></a>
+<a class="indexterm" name="id440815"></a>
+<a class="indexterm" name="id440822"></a>
+<a class="indexterm" name="id440828"></a>
+<a class="indexterm" name="id440837"></a>
+<a class="indexterm" name="id440846"></a>
 	Windows 200x GPOs are feature-rich. They are not stored in the NETLOGON share, but rather part of
 	a Windows 200x policy file is stored in the Active Directory itself and the other part is stored
 	in a shared (and replicated) volume called the SYSVOL folder. This folder is present on all Active
@@ -199,7 +199,7 @@
 	Group Policy Container (GPC), and the part that is stored in the replicated share called SYSVOL is
 	known as the Group Policy Template (GPT).
 	</p><p>
-<a class="indexterm" name="id2681968"></a>
+<a class="indexterm" name="id440861"></a>
 	With NT4 clients, the policy file is read and executed only as each user logs onto the network.
 	MS Windows 200x policies are much more complex  GPOs are processed and applied at client machine
 	startup (machine specific part), and when the user logs onto the network, the user-specific part
@@ -207,19 +207,19 @@
 	to any number of concurrently applicable (and applied) policy sets (GPOs). Active Directory allows
 	the administrator to also set filters over the policy settings. No such equivalent capability
 	exists with NT4-style policy files.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2681990"></a>Administration of Windows 200x/XP Policies</h4></div></div></div><p>
-		<a class="indexterm" name="id2681998"></a>
-		<a class="indexterm" name="id2682004"></a>
-<a class="indexterm" name="id2682011"></a>
-<a class="indexterm" name="id2682018"></a>
-<a class="indexterm" name="id2682025"></a>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id440878"></a>Administration of Windows 200x/XP Policies</h4></div></div></div><p>
+		<a class="indexterm" name="id440885"></a>
+		<a class="indexterm" name="id440892"></a>
+<a class="indexterm" name="id440899"></a>
+<a class="indexterm" name="id440905"></a>
+<a class="indexterm" name="id440912"></a>
 		Instead of using the tool called <span class="application">the System Policy Editor</span>, commonly called Poledit (from the
 		executable name <code class="literal">poledit.exe</code>), <acronym class="acronym">GPOs</acronym> are created and managed using a 
 		<span class="application">Microsoft Management Console</span> <acronym class="acronym">(MMC)</acronym> snap-in as follows:</p><div class="procedure"><ol type="1"><li><p>
 			Go to the Windows 200x/XP menu <span class="guimenu">Start-&gt;Programs-&gt;Administrative Tools</span>
 			and select the MMC snap-in called <span class="guimenuitem">Active Directory Users and Computers</span>
 			</p></li><li><p>
-<a class="indexterm" name="id2682089"></a>
+<a class="indexterm" name="id440973"></a>
 			Select the domain or organizational unit (OU) that you wish to manage, then right-click
 			to open the context menu for that object, and select the <span class="guibutton">Properties</span>.
 			</p></li><li><p>
@@ -237,13 +237,13 @@
 		refer to the Microsoft Windows Resource Kit for your particular
 		version of MS Windows.
 		</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2682155"></a>
-<a class="indexterm" name="id2682161"></a>
-<a class="indexterm" name="id2682168"></a>
+<a class="indexterm" name="id441030"></a>
+<a class="indexterm" name="id441037"></a>
+<a class="indexterm" name="id441044"></a>
 		The MS Windows 2000 Resource Kit contains a tool called <code class="literal">gpolmig.exe</code>. This tool can be used
 		to migrate an NT4 <code class="filename">NTConfig.POL</code> file into a Windows 200x style GPO. Be VERY careful how you
 		use this powerful tool. Please refer to the resource kit manuals for specific usage information.
-		</p></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2682195"></a>Custom System Policy Templates</h4></div></div></div><p>
+		</p></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id441068"></a>Custom System Policy Templates</h4></div></div></div><p>
 		Over the past year, there has been a bit of talk regarding the creation of customized
 		templates for the Windows Sytem Policy Editor. A recent announcement on the Samba mailing
 		list is worthy of mention.
@@ -256,15 +256,15 @@
 		</p><p>
 		For further information please see the <a class="ulink" href="http://www.pcc-services.com/custom_poledit.html" target="_top">Petersen</a> Computer Consulting web site. There is
 		a download link for the template file.
-		</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2682235"></a>Managing Account/User Policies</h2></div></div></div><p>
-<a class="indexterm" name="id2682244"></a>
-<a class="indexterm" name="id2682250"></a>
-<a class="indexterm" name="id2682257"></a>
+		</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id441101"></a>Managing Account/User Policies</h2></div></div></div><p>
+<a class="indexterm" name="id441109"></a>
+<a class="indexterm" name="id441115"></a>
+<a class="indexterm" name="id441122"></a>
 Policies can define a specific user's settings or the settings for a group of users. The resulting
 policy file contains the registry settings for all users, groups, and computers that will be using
 the policy file. Separate policy files for each user, group, or computer are not necessary.
 </p><p>
-<a class="indexterm" name="id2682272"></a>
+<a class="indexterm" name="id441135"></a>
 If you create a policy that will be automatically downloaded from validating domain controllers,
 you should name the file <code class="filename">NTConfig.POL</code>. As system administrator, you have the option of renaming the
 policy file and, by modifying the Windows NT-based workstation, directing the computer to update
@@ -272,46 +272,46 @@
 the System Policy Editor. This can even be a local path such that each machine has its own policy file,
 but if a change is necessary to all machines, it must be made individually to each workstation.
 </p><p>
-<a class="indexterm" name="id2682298"></a>
-<a class="indexterm" name="id2682305"></a>
+<a class="indexterm" name="id441156"></a>
+<a class="indexterm" name="id441162"></a>
 When a Windows NT4/200x/XP machine logs onto the network, the client looks in the NETLOGON share on
 the authenticating domain controller for the presence of the <code class="filename">NTConfig.POL</code> file. If one exists, it is 
 downloaded, parsed, and then applied to the user's part of the registry.
 </p><p>
-<a class="indexterm" name="id2682326"></a>
-<a class="indexterm" name="id2682333"></a>
-<a class="indexterm" name="id2682339"></a>
-<a class="indexterm" name="id2682346"></a>
+<a class="indexterm" name="id441181"></a>
+<a class="indexterm" name="id441187"></a>
+<a class="indexterm" name="id441194"></a>
+<a class="indexterm" name="id441201"></a>
 MS Windows 200x/XP clients that log onto an MS Windows Active Directory security domain may additionally
 acquire policy settings through GPOs that are defined and stored in Active Directory
 itself. The key benefit of using AD GPOs is that they impose no registry <span class="emphasis"><em>spoiling</em></span> effect.
 This has considerable advantage compared with the use of <code class="filename">NTConfig.POL</code> (NT4) style policy updates.
 </p><p>
-<a class="indexterm" name="id2682372"></a>
-<a class="indexterm" name="id2682379"></a>
+<a class="indexterm" name="id441224"></a>
+<a class="indexterm" name="id441230"></a>
 In addition to user access controls that may be imposed or applied via system and/or group policies
 in a manner that works in conjunction with user profiles, the user management environment under
 MS Windows NT4/200x/XP allows per-domain as well as per-user account restrictions to be applied.
 Common restrictions that are frequently used include:
 </p><p>
-<a class="indexterm" name="id2682395"></a>
+<a class="indexterm" name="id441243"></a>
 </p><div class="itemizedlist"><ul type="disc"><li><p>Logon hours</p></li><li><p>Password aging</p></li><li><p>Permitted logon from certain machines only</p></li><li><p>Account type (local or global)</p></li><li><p>User rights</p></li></ul></div><p>
 </p><p>
-<a class="indexterm" name="id2682432"></a>
-<a class="indexterm" name="id2682439"></a>
+<a class="indexterm" name="id441280"></a>
+<a class="indexterm" name="id441286"></a>
 Samba-3.0.20 does not yet implement all account controls that are common to MS Windows NT4/200x/XP.
 While it is possible to set many controls using the Domain User Manager for MS Windows NT4, only password
 expiry is functional today. Most of the remaining controls at this time have only stub routines
 that may eventually be completed to provide actual control. Do not be misled by the fact that a
 parameter can be set using the NT4 Domain User Manager or in the <code class="filename">NTConfig.POL</code>.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2682462"></a>Management Tools</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id441305"></a>Management Tools</h2></div></div></div><p>
 Anyone who wishes to create or manage Group Policies will need to be familiar with a number of tools.
 The following sections describe a few key tools that will help you to create a low-maintenance user
 environment.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2682475"></a>Samba Editreg Toolset</h3></div></div></div><p>
-	<a class="indexterm" name="id2682483"></a>
-	<a class="indexterm" name="id2682490"></a>
-	<a class="indexterm" name="id2682496"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id441316"></a>Samba Editreg Toolset</h3></div></div></div><p>
+	<a class="indexterm" name="id441324"></a>
+	<a class="indexterm" name="id441330"></a>
+	<a class="indexterm" name="id441337"></a>
 	A new tool called <code class="literal">editreg</code> is under development. This tool can be used
 	to edit registry files (called <code class="filename">NTUser.DAT</code>) that are stored in user
 	and group profiles. <code class="filename">NTConfig.POL</code> files have the same structure as the
@@ -320,33 +320,33 @@
 	permit the building of new <code class="filename">NTConfig.POL</code> files with extended capabilities. It is proving difficult
 	to realize this capability, so do not be surprised if this feature does not materialize. Formal
 	capabilities will be announced at the time that this tool is released for production use.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2682557"></a>Windows NT4/200x</h3></div></div></div><p>
-<a class="indexterm" name="id2682565"></a>
-<a class="indexterm" name="id2682572"></a>
-<a class="indexterm" name="id2682579"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id441392"></a>Windows NT4/200x</h3></div></div></div><p>
+<a class="indexterm" name="id441400"></a>
+<a class="indexterm" name="id441407"></a>
+<a class="indexterm" name="id441414"></a>
 	The tools that may be used to configure these types of controls from the MS Windows environment are
 	the NT4 User Manager for Domains, the NT4 System and Group Policy Editor, and the Registry Editor (regedt32.exe).
 	Under MS Windows 200x/XP, this is done using the MMC with appropriate
 	&#8220;<span class="quote">snap-ins,</span>&#8221; the registry editor, and potentially also the NT4 System and Group Policy Editor.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2682597"></a>Samba PDC</h3></div></div></div><p>
-<a class="indexterm" name="id2682605"></a>
-<a class="indexterm" name="id2682612"></a>
-<a class="indexterm" name="id2682619"></a>
-<a class="indexterm" name="id2682626"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id441429"></a>Samba PDC</h3></div></div></div><p>
+<a class="indexterm" name="id441437"></a>
+<a class="indexterm" name="id441444"></a>
+<a class="indexterm" name="id441450"></a>
+<a class="indexterm" name="id441457"></a>
 	With a Samba domain controller, the new tools for managing user account and policy information include:
 	<code class="literal">smbpasswd</code>, <code class="literal">pdbedit</code>, <code class="literal">net</code>, and <code class="literal">rpcclient</code>. 
 	The administrator should read the man pages for these tools and become familiar with their use.
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2682662"></a>System Startup and Logon Processing Overview</h2></div></div></div><p>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id441492"></a>System Startup and Logon Processing Overview</h2></div></div></div><p>
 The following attempts to document the order of processing the system and user policies following a system
 reboot and as part of the user logon:
 </p><div class="orderedlist"><ol type="1"><li><p>
-<a class="indexterm" name="id2682684"></a>
-<a class="indexterm" name="id2682694"></a>
+<a class="indexterm" name="id441512"></a>
+<a class="indexterm" name="id441522"></a>
 	Network starts, then Remote Procedure Call System Service (RPCSS) and multiple universal naming
 	convention provider (MUP) start.
 	</p></li><li><p>
-<a class="indexterm" name="id2682710"></a>
-<a class="indexterm" name="id2682717"></a>
+<a class="indexterm" name="id441536"></a>
+<a class="indexterm" name="id441543"></a>
 	Where Active Directory is involved, an ordered list of GPOs is downloaded
 	and applied. The list may include GPOs that:
 </p><div class="itemizedlist"><ul type="disc"><li><p>Apply to the location of machines in a directory.</p></li><li><p>Apply only when settings have changed.</p></li><li><p>Depend on configuration of the scope of applicability: local,
@@ -371,10 +371,10 @@
 	</p></li><li><p>
 	The user interface as determined from the GPOs is presented. Note: In a Samba domain (like an NT4
 	domain), machine (system) policies are applied at startup; user policies are applied at logon.
-	</p></li></ol></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2682820"></a>Common Errors</h2></div></div></div><p>
+	</p></li></ol></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id441634"></a>Common Errors</h2></div></div></div><p>
 Policy-related problems can be quite difficult to diagnose and even more difficult to rectify. The following
 collection demonstrates only basic issues.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2682831"></a>Policy Does Not Work</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id441644"></a>Policy Does Not Work</h3></div></div></div><p>
 &#8220;<span class="quote">We have created the <code class="filename">Config.POL</code> file and put it in the <span class="emphasis"><em>NETLOGON</em></span> share.
 It has made no difference to our Win XP Pro machines, they just do not see it. It worked fine with Win 98 but does not
 work any longer since we upgraded to Win XP Pro. Any hints?</span>&#8221;

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/Portability.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/Portability.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/Portability.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 42. Portability</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="Appendix.html" title="Part VI. Reference Section"><link rel="prev" href="compiling.html" title="Chapter 41. How to Compile Samba"><link rel="next" href="Other-Clients.html" title="Chapter 43. Samba and Other CIFS Clients"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 42. Portability</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="compiling.html">Prev</a> </td><th width="60%" align="center">Part VI. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="Other-Clients.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="Portability"></a>Chapter 42. Portability</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="Portability.html#id2710853">HPUX</a></span></dt><dt><span class="sect1"><a href="Portability.html#id2710957">SCO UNIX</a></span></dt><dt><span class="sect1"><a href="Portability.html#id2710996">DNIX</a></span></dt><dt><span class="sect1"><a href="Portability.html#id2711137">Red Hat Linux</a></span></dt><dt><span class="sect1"><a href="Portability.html#id2711181">AIX: Sequential Read Ahead</a></span></dt><dt><span class="sect1"><a href="Portability.html#id2711242">Solaris</a></span></dt><dd><dl><dt><span class="sect2"><a href="Portability.html#id2711248">Locking Improvements</a></span></dt><dt><span class="sect2"><a href="Portability.html#winbind-solaris9">Winbind on Solaris 9</a></span></dt></dl></dd></dl></div><p>
-<a class="indexterm" name="id2710835"></a>
-<a class="indexterm" name="id2710842"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 42. Portability</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="Appendix.html" title="Part VI. Reference Section"><link rel="prev" href="compiling.html" title="Chapter 41. How to Compile Samba"><link rel="next" href="Other-Clients.html" title="Chapter 43. Samba and Other CIFS Clients"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 42. Portability</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="compiling.html">Prev</a> </td><th width="60%" align="center">Part VI. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="Other-Clients.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="Portability"></a>Chapter 42. Portability</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="Portability.html#id467664">HPUX</a></span></dt><dt><span class="sect1"><a href="Portability.html#id467759">SCO UNIX</a></span></dt><dt><span class="sect1"><a href="Portability.html#id467791">DNIX</a></span></dt><dt><span class="sect1"><a href="Portability.html#id467920">Red Hat Linux</a></span></dt><dt><span class="sect1"><a href="Portability.html#id467959">AIX: Sequential Read Ahead</a></span></dt><dt><span class="sect1"><a href="Portability.html#id468013">Solaris</a></span></dt><dd><dl><dt><span class="sect2"><a href="Portability.html#id468019">Locking Improvements</a></span></dt><dt><span class="sect2"><a href="Portability.html#winbind-solaris9">Winbind on Solaris 9</a></span></dt></dl></dd></dl></div><p>
+<a class="indexterm" name="id467648"></a>
+<a class="indexterm" name="id467654"></a>
 Samba works on a wide range of platforms, but the interface all the 
 platforms provide is not always compatible. This chapter contains 
-platform-specific information about compiling and using Samba.</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2710853"></a>HPUX</h2></div></div></div><p>
-<a class="indexterm" name="id2710861"></a>
-<a class="indexterm" name="id2710868"></a>
+platform-specific information about compiling and using Samba.</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id467664"></a>HPUX</h2></div></div></div><p>
+<a class="indexterm" name="id467672"></a>
+<a class="indexterm" name="id467678"></a>
 Hewlett-Packard's implementation of supplementary groups is nonstandard (for
 historical reasons). There are two group files, <code class="filename">/etc/group</code> and
 <code class="filename">/etc/logingroup</code>; the system maps UIDs to numbers using the former, but
@@ -23,11 +23,11 @@
 </p><p>
 This is documented in the HP manual pages under setgroups(2) and passwd(4).
 </p><p>
-<a class="indexterm" name="id2710938"></a>
-<a class="indexterm" name="id2710945"></a>
+<a class="indexterm" name="id467742"></a>
+<a class="indexterm" name="id467749"></a>
 On HP-UX you must use gcc or the HP ANSI compiler. The free compiler
 that comes with HP-UX is not ANSI compliant and cannot compile Samba.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2710957"></a>SCO UNIX</h2></div></div></div><p> 
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id467759"></a>SCO UNIX</h2></div></div></div><p> 
 If you run an old version of SCO UNIX, you may need to get important 
 TCP/IP patches for Samba to work correctly. Without the patch, you may 
 encounter corrupt data transfers using Samba.
@@ -43,7 +43,7 @@
 problems with your installation. To build Samba for SCO UNIX products  may
 require significant patching of Samba source code. It is much easier to obtain binary
 packages directly from SCO.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2710996"></a>DNIX</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id467791"></a>DNIX</h2></div></div></div><p>
 DNIX has a problem with seteuid() and setegid(). These routines are
 needed for Samba to work correctly, but they were left out of the DNIX
 C library for some reason.
@@ -100,14 +100,14 @@
 You should then remove the line:
 </p><pre class="programlisting">
 #define NO_EID
-</pre><p>from the DNIX section of <code class="filename">includes.h</code>.</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2711137"></a>Red Hat Linux</h2></div></div></div><p>
+</pre><p>from the DNIX section of <code class="filename">includes.h</code>.</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id467920"></a>Red Hat Linux</h2></div></div></div><p>
 By default during installation, some versions of Red Hat Linux add an
 entry to <code class="filename">/etc/hosts</code> as follows:
 </p><pre class="programlisting">
 127.0.0.1 loopback "hostname"."domainname"
 </pre><p>
 </p><p>
-<a class="indexterm" name="id2711162"></a>
+<a class="indexterm" name="id467944"></a>
 This causes Samba to loop back onto the loopback interface.
 The result is that Samba fails to communicate correctly with
 the world and therefore may fail to correctly negotiate who
@@ -115,7 +115,7 @@
 </p><p>
 Corrective action: Delete the entry after the word "loopback"
 in the line starting 127.0.0.1.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2711181"></a>AIX: Sequential Read Ahead</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id467959"></a>AIX: Sequential Read Ahead</h2></div></div></div><p>
 Disabling sequential read ahead can improve Samba performance significantly
 when there is a relatively high level of multiprogramming (many smbd processes
 or mixed with another workload), not an abundance of physical memory or slower
@@ -134,7 +134,7 @@
 </p><p>
 If you have a mix of jfs and jfs2 filesystems on the same host, simply use both
 ioo commands.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2711242"></a>Solaris</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2711248"></a>Locking Improvements</h3></div></div></div><p>Some people have been experiencing problems with F_SETLKW64/fcntl 
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id468013"></a>Solaris</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id468019"></a>Locking Improvements</h3></div></div></div><p>Some people have been experiencing problems with F_SETLKW64/fcntl 
 when running Samba on Solaris. The built-in file-locking mechanism was
 not scalable. Performance would degrade to the point where processes would
 get into loops of trying to lock a file. It would try a lock, then fail,

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ProfileMgmt.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ProfileMgmt.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ProfileMgmt.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,42 +1,42 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 27. Desktop Profile Management</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="PolicyMgmt.html" title="Chapter 26. System and Account Policies"><link rel="next" href="pam.html" title="Chapter 28. PAM-Based Distributed Authentication"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 27. Desktop Profile Management</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="PolicyMgmt.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="pam.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="ProfileMgmt"></a>Chapter 27. Desktop Profile Management</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">April 3 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ProfileMgmt.html#id2682916">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="ProfileMgmt.html#id2682966">Roaming Profiles</a></span></dt><dd><dl><dt><span class="sect2"><a href="ProfileMgmt.html#id2683020">Samba Configuration for Profile Handling</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2683625">Windows Client Profile Configuration Information</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2684970">User Profile Hive Cleanup Service</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2685003">Sharing Profiles between Windows 9x/Me and NT4/200x/XP Workstations</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2685102">Profile Migration from Windows NT4/200x Server to Samba</a></span></dt></dl></dd><dt><span class="sect1"><a href="ProfileMgmt.html#id2685453">Mandatory Profiles</a></span></dt><dt><span class="sect1"><a href="ProfileMgmt.html#id2685594">Creating and Managing Group Profiles</a></span></dt><dt><span class="sect1"><a href="ProfileMgmt.html#id2685664">Default Profile for Windows Users</a></span></dt><dd><dl><dt><span class="sect2"><a href="ProfileMgmt.html#id2685694">MS Windows 9x/Me</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2685846">MS Windows NT4 Workstation</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2686408">MS Windows 200x/XP</a></span></dt></dl></dd><dt><span class="sect1"><a href="ProfileMgmt.html#id2686913">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="ProfileMgmt.html#id2686924">Configuring Roaming Profiles for a Few Users or Groups</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2686985">Cannot Use Roaming Profiles</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2687156">Changing the Default Profile</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2687320">Debugging Roaming Profiles and NT4-style Domain Policies</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2682916"></a>Features and Benefits</h2></div></div></div><p>
-<a class="indexterm" name="id2682924"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 27. Desktop Profile Management</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="PolicyMgmt.html" title="Chapter 26. System and Account Policies"><link rel="next" href="pam.html" title="Chapter 28. PAM-Based Distributed Authentication"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 27. Desktop Profile Management</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="PolicyMgmt.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="pam.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="ProfileMgmt"></a>Chapter 27. Desktop Profile Management</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">April 3 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ProfileMgmt.html#id441723">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="ProfileMgmt.html#id441766">Roaming Profiles</a></span></dt><dd><dl><dt><span class="sect2"><a href="ProfileMgmt.html#id441814">Samba Configuration for Profile Handling</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id442383">Windows Client Profile Configuration Information</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id443652">User Profile Hive Cleanup Service</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id443680">Sharing Profiles between Windows 9x/Me and NT4/200x/XP Workstations</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id443770">Profile Migration from Windows NT4/200x Server to Samba</a></span></dt></dl></dd><dt><span class="sect1"><a href="ProfileMgmt.html#id444102">Mandatory Profiles</a></span></dt><dt><span class="sect1"><a href="ProfileMgmt.html#id444230">Creating and Managing Group Profiles</a></span></dt><dt><span class="sect1"><a href="ProfileMgmt.html#id444297">Default Profile for Windows Users</a></span></dt><dd><dl><dt><span class="sect2"><a href="ProfileMgmt.html#id444323">MS Windows 9x/Me</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id444459">MS Windows NT4 Workstation</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id444984">MS Windows 200x/XP</a></span></dt></dl></dd><dt><span class="sect1"><a href="ProfileMgmt.html#id445446">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="ProfileMgmt.html#id445456">Configuring Roaming Profiles for a Few Users or Groups</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id445509">Cannot Use Roaming Profiles</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id445658">Changing the Default Profile</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id445812">Debugging Roaming Profiles and NT4-style Domain Policies</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id441723"></a>Features and Benefits</h2></div></div></div><p>
+<a class="indexterm" name="id441731"></a>
 Roaming profiles are feared by some, hated by a few, loved by many, and a godsend for
 some administrators.
 </p><p>
-<a class="indexterm" name="id2682936"></a>
+<a class="indexterm" name="id441742"></a>
 Roaming profiles allow an administrator to make available a consistent user desktop
 as the user moves from one machine to another. This chapter provides much information
 regarding how to configure and manage roaming profiles.
 </p><p>
-<a class="indexterm" name="id2682950"></a>
+<a class="indexterm" name="id441754"></a>
 While roaming profiles might sound like nirvana to some, they are a real and tangible
 problem to others. In particular, users of mobile computing tools, where often there may not
 be a sustained network connection, are often better served by purely local profiles.
 This chapter provides information to help the Samba administrator deal with those
 situations.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2682966"></a>Roaming Profiles</h2></div></div></div><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id441766"></a>Roaming Profiles</h2></div></div></div><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p>
 Roaming profiles support is different for Windows 9x/Me and Windows NT4/200x.
 </p></div><p>
 Before discussing how to configure roaming profiles, it is useful to see how
 Windows 9x/Me and Windows NT4/200x clients implement these features.
 </p><p>
-<a class="indexterm" name="id2682987"></a>
+<a class="indexterm" name="id441785"></a>
 Windows 9x/Me clients send a NetUserGetInfo request to the server to get the user's
 profiles location. However, the response does not have room for a separate
 profiles location field, only the user's home share. This means that Windows 9x/Me
 profiles are restricted to being stored in the user's home directory.
 </p><p>
-<a class="indexterm" name="id2683002"></a>
-<a class="indexterm" name="id2683009"></a>
+<a class="indexterm" name="id441798"></a>
+<a class="indexterm" name="id441805"></a>
 Windows NT4/200x  clients send a NetSAMLogon RPC request, which contains many fields
 including a separate field for the location of the user's profiles.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2683020"></a>Samba Configuration for Profile Handling</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id441814"></a>Samba Configuration for Profile Handling</h3></div></div></div><p>
 This section documents how to configure Samba for MS Windows client profile support.
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2683030"></a>NT4/200x User Profiles</h4></div></div></div><p>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id441824"></a>NT4/200x User Profiles</h4></div></div></div><p>
 For example, to support Windows NT4/200x clients, set the following in the [global] section of the <code class="filename">smb.conf</code> file:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2683053"></a><em class="parameter"><code>logon path =  \\profileserver\profileshare\profilepath\%U\moreprofilepath</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id441845"></a><em class="parameter"><code>logon path =  \\profileserver\profileshare\profilepath\%U\moreprofilepath</code></em></td></tr></table><p>
 This is typically implemented like:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2683074"></a><em class="parameter"><code>logon path = \\%L\Profiles\%U</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id441865"></a><em class="parameter"><code>logon path = \\%L\Profiles\%U</code></em></td></tr></table><p>
 where &#8220;<span class="quote">%L</span>&#8221; translates to the name of the Samba server and &#8220;<span class="quote">%U</span>&#8221; translates to the username.
 </p><p>
 The default for this option is <code class="filename">\\%N\%U\profile</code>, namely, <code class="filename">\\sambaserver\username\profile</code>. 
@@ -45,55 +45,55 @@
 browseable. Please refer to the man page for <code class="filename">smb.conf</code> regarding the different
 semantics of &#8220;<span class="quote">%L</span>&#8221; and &#8220;<span class="quote">%N</span>&#8221;, as well as &#8220;<span class="quote">%U</span>&#8221; and &#8220;<span class="quote">%u</span>&#8221;.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2683144"></a>
-<a class="indexterm" name="id2683151"></a>
+<a class="indexterm" name="id441932"></a>
+<a class="indexterm" name="id441938"></a>
 MS Windows NT/200x clients at times do not disconnect a connection to a server between logons. It is recommended
 to not use the <em class="parameter"><code>homes</code></em> metaservice name as part of the profile share path.
-</p></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2683169"></a>Windows 9x/Me User Profiles</h4></div></div></div><p>
-<a class="indexterm" name="id2683177"></a>
-<a class="indexterm" name="id2683184"></a>
+</p></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id441955"></a>Windows 9x/Me User Profiles</h4></div></div></div><p>
+<a class="indexterm" name="id441963"></a>
+<a class="indexterm" name="id441970"></a>
 To support Windows 9x/Me clients, you must use the <a class="link" href="smb.conf.5.html#LOGONHOME">logon home</a>
 parameter. Samba has been fixed so <strong class="userinput"><code>net use /home</code></strong> now works as well and it, too, relies
 on the <em class="parameter"><code>logon home</code></em> parameter.
 </p><p>
-<a class="indexterm" name="id2683220"></a>
-<a class="indexterm" name="id2683227"></a>
-<a class="indexterm" name="id2683234"></a>
+<a class="indexterm" name="id442003"></a>
+<a class="indexterm" name="id442010"></a>
+<a class="indexterm" name="id442017"></a>
 By using the <em class="parameter"><code>logon home</code></em> parameter, you are restricted to putting Windows 9x/Me profiles
 in the user's home directory.  But wait! There is a trick you can use. If you set the following in the
 <em class="parameter"><code>[global]</code></em> section of your <code class="filename">smb.conf</code> file:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2683267"></a><em class="parameter"><code>logon home = \\%L\%U\.profiles</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id442048"></a><em class="parameter"><code>logon home = \\%L\%U\.profiles</code></em></td></tr></table><p>
 then your Windows 9x/Me clients will dutifully put their clients in a subdirectory
 of your home directory called <code class="filename">.profiles</code> (making them hidden).
 </p><p>
-<a class="indexterm" name="id2683290"></a>
+<a class="indexterm" name="id442070"></a>
 Not only that, but <strong class="userinput"><code>net use /home</code></strong> will also work because of a feature in
 Windows 9x/Me. It removes any directory stuff off the end of the home directory area
 and only uses the server and share portion. That is, it looks like you
 specified <code class="filename">\\%L\%U</code> for <a class="link" href="smb.conf.5.html#LOGONHOME">logon home</a>.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2683327"></a>Mixed Windows Windows 9x/Me and NT4/200x User Profiles</h4></div></div></div><p>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id442104"></a>Mixed Windows Windows 9x/Me and NT4/200x User Profiles</h4></div></div></div><p>
 You can support profiles for Windows 9x and Windows NT clients by setting both the
 <a class="link" href="smb.conf.5.html#LOGONHOME">logon home</a> and <a class="link" href="smb.conf.5.html#LOGONPATH">logon path</a> parameters. For example,
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2683367"></a><em class="parameter"><code>logon home = \\%L\%U\.profiles</code></em></td></tr><tr><td><a class="indexterm" name="id2683379"></a><em class="parameter"><code>logon path = \\%L\profiles\%U</code></em></td></tr></table><p>
-<a class="indexterm" name="id2683393"></a>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id442141"></a><em class="parameter"><code>logon home = \\%L\%U\.profiles</code></em></td></tr><tr><td><a class="indexterm" name="id442153"></a><em class="parameter"><code>logon path = \\%L\profiles\%U</code></em></td></tr></table><p>
+<a class="indexterm" name="id442166"></a>
 Windows 9x/Me and NT4 and later profiles should not be stored in the same location because
 Windows NT4 and later will experience problems with mixed profile environments.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2683405"></a>Disabling Roaming Profile Support</h4></div></div></div><p>
-<a class="indexterm" name="id2683413"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id442177"></a>Disabling Roaming Profile Support</h4></div></div></div><p>
+<a class="indexterm" name="id442185"></a>
 The question often asked is, &#8220;<span class="quote">How may I enforce use of local profiles?</span>&#8221; or
 &#8220;<span class="quote">How do I disable roaming profiles?</span>&#8221;
 </p><p>
-<a class="indexterm" name="id2683431"></a>
+<a class="indexterm" name="id442203"></a>
 There are three ways of doing this:
-</p><a class="indexterm" name="id2683440"></a><div class="variablelist"><dl><dt><span class="term">In <code class="filename">smb.conf</code></span></dt><dd><p>
+</p><a class="indexterm" name="id442211"></a><div class="variablelist"><dl><dt><span class="term">In <code class="filename">smb.conf</code></span></dt><dd><p>
 		Affect the following settings and ALL clients will be forced to use a local profile:
 		<a class="link" href="smb.conf.5.html#LOGONHOME">logon home =  </a> and <a class="link" href="smb.conf.5.html#LOGONPATH">logon path =  </a>
 		</p><p>
 		The arguments to these parameters must be left blank. It is necessary to include the <code class="constant">=</code> sign
 		to specifically assign the empty value.
 		</p></dd><dt><span class="term">MS Windows Registry:</span></dt><dd><p>
-<a class="indexterm" name="id2683510"></a>
-<a class="indexterm" name="id2683516"></a>
+<a class="indexterm" name="id442277"></a>
+<a class="indexterm" name="id442283"></a>
 		Use the Microsoft Management Console (MMC) <code class="literal">gpedit.msc</code> to instruct your MS Windows XP
 		machine to use only a local profile. This, of course, modifies registry settings. The full
 		path to the option is:
@@ -116,11 +116,11 @@
 Consult the MS Windows registry guide for your particular MS Windows version for more information
 about which registry keys to change to enforce use of only local user profiles.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2683610"></a>
+<a class="indexterm" name="id442371"></a>
 The specifics of how to convert a local profile to a roaming profile, or a roaming profile
 to a local one, vary according to the version of MS Windows you are running. Consult the Microsoft MS
 Windows Resource Kit for your version of Windows for specific information.
-</p></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2683625"></a>Windows Client Profile Configuration Information</h3></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2683631"></a>Windows 9x/Me Profile Setup</h4></div></div></div><p>
+</p></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id442383"></a>Windows Client Profile Configuration Information</h3></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id442389"></a>Windows 9x/Me Profile Setup</h4></div></div></div><p>
 When a user first logs in on Windows 9x, the file user.DAT is created, as are folders <code class="filename">Start
 Menu</code>, <code class="filename">Desktop</code>, <code class="filename">Programs</code>, and
 <code class="filename">Nethood</code>. These directories and their contents will be merged with the local versions
@@ -128,8 +128,8 @@
 each.	You will need to use the <em class="parameter"><code>[global]</code></em> options <a class="link" href="smb.conf.5.html#PRESERVECASE">preserve case = yes</a>, <a class="link" href="smb.conf.5.html#SHORTPRESERVECASE">short preserve case = yes</a>, and <a class="link" href="smb.conf.5.html#CASESENSITIVE">case sensitive = no</a> in order to maintain capital letters in shortcuts in any of the
 profile folders.
 </p><p>
-<a class="indexterm" name="id2683721"></a>
-<a class="indexterm" name="id2683727"></a>
+<a class="indexterm" name="id442471"></a>
+<a class="indexterm" name="id442478"></a>
 The <code class="filename">user.DAT</code> file contains all the user's preferences. If you wish to enforce a set of preferences,
 rename their <code class="filename">user.DAT</code> file to <code class="filename">user.MAN</code>, and deny them write access to this file.
 </p><div class="orderedlist"><ol type="1"><li><p>
@@ -144,16 +144,16 @@
 	ensure that the Primary Logon is <span class="guilabel">Client for Microsoft Networks</span>. Press
 	<span class="guibutton">OK</span>, and this time allow the computer to reboot.
 	</p></li></ol></div><p>
-<a class="indexterm" name="id2683849"></a>
-<a class="indexterm" name="id2683856"></a>
-<a class="indexterm" name="id2683863"></a>
-<a class="indexterm" name="id2683869"></a>
+<a class="indexterm" name="id442595"></a>
+<a class="indexterm" name="id442602"></a>
+<a class="indexterm" name="id442609"></a>
+<a class="indexterm" name="id442616"></a>
 Under Windows 9x/Me, profiles are downloaded from the Primary Logon. If you have the Primary Logon
 as &#8220;<span class="quote">Client for Novell Networks</span>&#8221;, then the profiles and logon script will be downloaded from
 your Novell server. If you have the Primary Logon as &#8220;<span class="quote">Windows Logon</span>&#8221;, then the profiles will
 be loaded from the local machine  a bit against the concept of roaming profiles, it would seem! 
 </p><p>
-<a class="indexterm" name="id2683896"></a>
+<a class="indexterm" name="id442639"></a>
 You will now find that the Microsoft Networks Login box contains <code class="constant">[user, password, domain]</code> instead
 of just <code class="constant">[user, password]</code>. Type in the Samba server's domain name (or any other domain known to exist,
 but bear in mind that the user will be authenticated against this domain and profiles downloaded from it
@@ -168,28 +168,28 @@
 the Samba server and verify that the <code class="filename">Desktop</code>, <code class="filename">Start Menu</code>,
 <code class="filename">Programs</code>, and <code class="filename">Nethood</code> folders have been created.
 </p><p>
-<a class="indexterm" name="id2683983"></a>
-<a class="indexterm" name="id2683990"></a>
-<a class="indexterm" name="id2683997"></a>
+<a class="indexterm" name="id442720"></a>
+<a class="indexterm" name="id442726"></a>
+<a class="indexterm" name="id442733"></a>
 These folders will be cached locally on the client and updated when the user logs off (if
 you haven't made them read-only by then). You will find that if the user creates further folders or
 shortcuts, the client will merge the profile contents downloaded with the contents of the profile
 directory already on the local client, taking the newest folders and shortcut from each set.
 </p><p>
-<a class="indexterm" name="id2684013"></a>
-<a class="indexterm" name="id2684020"></a>
-<a class="indexterm" name="id2684027"></a>
-<a class="indexterm" name="id2684034"></a>
+<a class="indexterm" name="id442746"></a>
+<a class="indexterm" name="id442753"></a>
+<a class="indexterm" name="id442760"></a>
+<a class="indexterm" name="id442767"></a>
 If you have made the folders/files read-only on the Samba server, then you will get errors from
 the Windows 9x/Me machine on logon and logout as it attempts to merge the local and remote profile.
 Basically, if you have any errors reported by the Windows 9x/Me machine, check the UNIX file permissions
 and ownership rights on the profile directory contents, on the Samba server.
 </p><p>
-<a class="indexterm" name="id2684051"></a>
-<a class="indexterm" name="id2684058"></a>
-<a class="indexterm" name="id2684065"></a>
-<a class="indexterm" name="id2684072"></a>
-<a class="indexterm" name="id2684079"></a>
+<a class="indexterm" name="id442780"></a>
+<a class="indexterm" name="id442787"></a>
+<a class="indexterm" name="id442794"></a>
+<a class="indexterm" name="id442801"></a>
+<a class="indexterm" name="id442808"></a>
 If you have problems creating user profiles, you can reset the user's local desktop cache, as shown below.
 When this user next logs in, the user will be told that he/she is logging in &#8220;<span class="quote">for the first
 time</span>&#8221;.
@@ -214,7 +214,7 @@
 	described above) and delete the <code class="filename">user.DAT</code> or <code class="filename">user.MAN</code>
 	file for the user, making a backup if required. 
 	</p></li></ol></div><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p>
-<a class="indexterm" name="id2684210"></a>
+<a class="indexterm" name="id442930"></a>
 Before deleting the contents of the directory listed in the <em class="parameter"><code>ProfilePath</code></em>
 (this is likely to be <code class="filename">c:\windows\profiles\username)</code>, ask whether the owner has
 any important files stored on his or her desktop or start menu. Delete the contents of the
@@ -224,19 +224,19 @@
 in their profile directory, as well as the local &#8220;<span class="quote">desktop,</span>&#8221; &#8220;<span class="quote">nethood,</span>&#8221;
 &#8220;<span class="quote">start menu,</span>&#8221; and &#8220;<span class="quote">programs</span>&#8221; folders.
 </p></div><p>
-<a class="indexterm" name="id2684268"></a>
-<a class="indexterm" name="id2684275"></a>
-<a class="indexterm" name="id2684282"></a>
-<a class="indexterm" name="id2684289"></a>
+<a class="indexterm" name="id442985"></a>
+<a class="indexterm" name="id442992"></a>
+<a class="indexterm" name="id442999"></a>
+<a class="indexterm" name="id443006"></a>
 If all else fails, increase Samba's debug log levels to between 3 and 10, and/or run a packet
 sniffer program such as ethereal or <code class="literal">netmon.exe</code>, and look for error messages.
 </p><p>
-<a class="indexterm" name="id2684307"></a>
-<a class="indexterm" name="id2684314"></a>
+<a class="indexterm" name="id443023"></a>
+<a class="indexterm" name="id443030"></a>
 If you have access to an Windows NT4/200x server, then first set up roaming profiles and/or
 netlogons on the Windows NT4/200x server. Make a packet trace, or examine the example packet traces
 provided with Windows NT4/200x server, and see what the differences are with the equivalent Samba trace.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2684328"></a>Windows NT4 Workstation</h4></div></div></div><p>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id443041"></a>Windows NT4 Workstation</h4></div></div></div><p>
 When a user first logs in to a Windows NT workstation, the profile NTuser.DAT is created. The profile
 location can be now specified through the <a class="link" href="smb.conf.5.html#LOGONPATH">logon path</a> parameter.
 </p><p>
@@ -244,22 +244,22 @@
 This should be set to <code class="filename">H:</code> or any other drive, and should be used in conjunction with
 the new <a class="link" href="smb.conf.5.html#LOGONHOME">logon home</a> parameter.
 </p><p>
-<a class="indexterm" name="id2684388"></a>
-<a class="indexterm" name="id2684395"></a>
+<a class="indexterm" name="id443097"></a>
+<a class="indexterm" name="id443103"></a>
 The entry for the NT4 profile is a directory, not a file. The NT help on profiles mentions that a
 directory is also created with a .PDS extension. The user, while logging in, must have write permission
 to create the full profile path (and the folder with the .PDS extension for those situations where it
 might be created). 
 </p><p>
-<a class="indexterm" name="id2684411"></a>
+<a class="indexterm" name="id443116"></a>
 In the profile directory, Windows NT4 creates more folders than Windows 9x/Me. It creates
 <code class="filename">Application Data</code> and others, as well as <code class="filename">Desktop</code>,
 <code class="filename">Nethood</code>, <code class="filename">Start Menu,</code> and <code class="filename">Programs</code>.
 The profile itself is stored in a file <code class="filename">NTuser.DAT</code>. Nothing appears to be stored
 in the .PDS directory, and its purpose is currently unknown.
 </p><p>
-<a class="indexterm" name="id2684460"></a>
-<a class="indexterm" name="id2684466"></a>
+<a class="indexterm" name="id443164"></a>
+<a class="indexterm" name="id443170"></a>
 You can use the <span class="application">System Control Panel</span> to copy a local profile onto
 a Samba server (see NT help on profiles; it is also capable of firing up the correct location in the
 <span class="application">System Control Panel</span> for you). The NT help file also mentions that renaming
@@ -267,7 +267,7 @@
 </p><p>
 The case of the profile is significant.	The file must be called <code class="filename">NTuser.DAT</code>
 or, for a mandatory profile, <code class="filename">NTuser.MAN</code>.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2684520"></a>Windows 2000/XP Professional</h4></div></div></div><p>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id443221"></a>Windows 2000/XP Professional</h4></div></div></div><p>
 You must first convert the profile from a local profile to a domain profile on the MS Windows
 workstation as follows: </p><div class="procedure"><ol type="1"><li><p> Log on as the <span class="emphasis"><em>local</em></span> workstation administrator. </p></li><li><p> Right-click on the <span class="guiicon">My Computer</span> icon, and select
 	<span class="guimenuitem">Properties</span>.</p></li><li><p> Click on the <span class="guilabel">User Profiles</span> tab.</p></li><li><p> Select the profile you wish to convert (click it once).</p></li><li><p> Click on the <span class="guibutton">Copy To</span> button.</p></li><li><p> In the <span class="guilabel">Permitted to use</span> box, click on the
@@ -280,7 +280,7 @@
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
 Under Windows NT/200x, the use of mandatory profiles forces the use of MS Exchange storage of mail
 data and keeps it out of the desktop profile. That keeps desktop profiles from becoming unusable.
-</p></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id2684702"></a>Windows XP Service Pack 1</h5></div></div></div><p>
+</p></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id443394"></a>Windows XP Service Pack 1</h5></div></div></div><p>
 	There is a security check new to Windows XP (or maybe only Windows XP service pack 1).
 	It can be disabled via a group policy in the Active Directory. The policy is called:
 </p><pre class="screen">
@@ -296,18 +296,18 @@
 	</p><div class="procedure"><ol type="1"><li><p>On the XP workstation, log in with an administrative account.</p></li><li><p>Click on <span class="guimenu">Start</span> -&gt; <span class="guimenuitem">Run</span>.</p></li><li><p>Type <code class="literal">mmc</code>.</p></li><li><p>Click on <span class="guibutton">OK</span>.</p></li><li><p>A Microsoft Management Console should appear.</p></li><li><p>Click on <span class="guimenu">File</span> -&gt; <span class="guimenuitem">Add/Remove Snap-in</span> -&gt; <span class="guimenuitem">Add</span>.</p></li><li><p>Double-click on <span class="guiicon">Group Policy</span>.</p></li><li><p>Click on <span class="guibutton">Finish</span> -&gt; <span class="guibutton">Close</span>.</p></li><li><p>Click on <span class="guibutton">OK</span>.</p></li><li><p>In the &#8220;<span class="quote">Console Root</span>&#8221; window expand <span class="guiicon">Local Computer Policy</span> -&gt;
 		<span class="guiicon">Computer Configuration</span> -&gt; <span class="guiicon">Administrative Templates</span> -&gt; 
 		<span class="guiicon">System</span> -&gt; <span class="guiicon">User Profiles</span>.</p></li><li><p>Double-click on <span class="guilabel">Do not check for user ownership of Roaming Profile Folders</span>.</p></li><li><p>Select <span class="guilabel">Enabled</span>.</p></li><li><p>Click on <span class="guibutton">OK</span>.</p></li><li><p>Close the whole console. You do not need to save the settings (this refers to the
-	console settings rather than the policies you have changed).</p></li><li><p>Reboot.</p></li></ol></div></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2684970"></a>User Profile Hive Cleanup Service</h3></div></div></div><p>
+	console settings rather than the policies you have changed).</p></li><li><p>Reboot.</p></li></ol></div></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id443652"></a>User Profile Hive Cleanup Service</h3></div></div></div><p>
 There are certain situations that cause a cached local copy of roaming profile not to be deleted on exit, even if
 the policy to force such deletion is set. To deal with that situation, a special service was created. The application 
 <code class="literal">UPHClean</code> (User Profile Hive Cleanup) can be installed as a service on Windows NT4/2000/XP Professional
 and Windows 2003.
 </p><p>
 The UPHClean software package can be downloaded from the User Profile Hive Cleanup
-Service<sup>[<a name="id2684994" href="#ftn.id2684994" class="footnote">7</a>]</sup>
+Service<sup>[<a name="id443673" href="#ftn.id443673" class="footnote">7</a>]</sup>
 web site.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2685003"></a>Sharing Profiles between Windows 9x/Me and NT4/200x/XP Workstations</h3></div></div></div><p>
-<a class="indexterm" name="id2685012"></a>
-<a class="indexterm" name="id2685019"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id443680"></a>Sharing Profiles between Windows 9x/Me and NT4/200x/XP Workstations</h3></div></div></div><p>
+<a class="indexterm" name="id443688"></a>
+<a class="indexterm" name="id443695"></a>
 Sharing of desktop profiles between Windows versions is not recommended. Desktop profiles are an
 evolving phenomenon, and profiles for later versions of MS Windows clients add features that may interfere
 with earlier versions of MS Windows clients. Probably the more salient reason to not mix profiles is
@@ -319,20 +319,20 @@
 location for the profiles. The <code class="filename">smb.conf</code> parameters that need to be common are 
 <a class="link" href="smb.conf.5.html#LOGONPATH">logon path</a> and <a class="link" href="smb.conf.5.html#LOGONHOME">logon home</a>.
 </p><p>
-<a class="indexterm" name="id2685074"></a>
-<a class="indexterm" name="id2685080"></a>
+<a class="indexterm" name="id443742"></a>
+<a class="indexterm" name="id443748"></a>
 If you have this set up correctly, you will find separate <code class="filename">user.DAT</code> and
 <code class="filename">NTuser.DAT</code> files in the same profile directory.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2685102"></a>Profile Migration from Windows NT4/200x Server to Samba</h3></div></div></div><p>
-<a class="indexterm" name="id2685110"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id443770"></a>Profile Migration from Windows NT4/200x Server to Samba</h3></div></div></div><p>
+<a class="indexterm" name="id443778"></a>
 There is nothing to stop you from specifying any path that you like for the location of users' profiles.
 Therefore, you could specify that the profile be stored on a Samba server or any other SMB server,
 as long as that SMB server supports encrypted passwords.
 </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="profilemigrn"></a>Windows NT4 Profile Management Tools</h4></div></div></div><p>
-<a class="indexterm" name="id2685135"></a>
+<a class="indexterm" name="id443800"></a>
 Unfortunately, the resource kit information is specific to the version of MS Windows NT4/200x. The
 correct resource kit is required for each platform.
-</p><p>Here is a quick guide:</p><div class="procedure"><a name="id2685149"></a><p class="title"><b>Procedure 27.1. Profile Migration Procedure</b></p><ol type="1"><li><p> On your NT4 domain controller, right-click on <span class="guiicon">My Computer</span>, then select 
+</p><p>Here is a quick guide:</p><div class="procedure"><a name="id443812"></a><p class="title"><b>Procedure 27.1. Profile Migration Procedure</b></p><ol type="1"><li><p> On your NT4 domain controller, right-click on <span class="guiicon">My Computer</span>, then select 
 	<span class="guilabel">Properties</span>, then the tab labeled <span class="guilabel">User Profiles</span>. </p></li><li><p> Select a user profile you want to migrate and click on it. </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>I am using the term &#8220;<span class="quote">migrate</span>&#8221; loosely. You can copy a profile to create a group
 	profile. You can give the user <em class="parameter"><code>Everyone</code></em> rights to the profile you copy this to. That
 	is what you need to do, since your Samba domain is not a member of a trust relationship with your NT4
@@ -340,21 +340,21 @@
 	<code class="filename">c:\temp\foobar</code></p></li><li><p>Click on <span class="guibutton">Change</span> in the <span class="guilabel">Permitted to use</span> box.</p></li><li><p>Click on the group &#8220;<span class="quote">Everyone</span>&#8221;, click on <span class="guibutton">OK</span>. This
 	closes the &#8220;<span class="quote">choose user</span>&#8221; box.</p></li><li><p>Now click on <span class="guibutton">OK</span>.</p></li></ol></div><p>
 Follow these steps for every profile you need to migrate.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2685296"></a>Side Bar Notes</h4></div></div></div><p>
-<a class="indexterm" name="id2685304"></a>
-<a class="indexterm" name="id2685310"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id443953"></a>Side Bar Notes</h4></div></div></div><p>
+<a class="indexterm" name="id443961"></a>
+<a class="indexterm" name="id443968"></a>
 You should obtain the SID of your NT4 domain. You can use the <code class="literal">net rpc info</code> to do this.
 See <a class="link" href="NetCommand.html" title="Chapter 13. Remote and Local Management: The Net Command">The Net Command Chapter</a>, <a class="link" href="NetCommand.html#netmisc1" title="Other Miscellaneous Operations">Other Miscellaneous Operations</a> for more information.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2685347"></a>moveuser.exe</h4></div></div></div><p>
-<a class="indexterm" name="id2685355"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id444002"></a>moveuser.exe</h4></div></div></div><p>
+<a class="indexterm" name="id444010"></a>
 The Windows 200x professional resource kit has <code class="literal">moveuser.exe</code>.
 <code class="literal">moveuser.exe</code> changes the security of a profile from one user to another. This allows the
 account domain to change and/or the username to change.
 </p><p>
 This command is like the Samba <code class="literal">profiles</code> tool.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2685388"></a>Get SID</h4></div></div></div><p>
-<a class="indexterm" name="id2685396"></a>
-<a class="indexterm" name="id2685403"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id444042"></a>Get SID</h4></div></div></div><p>
+<a class="indexterm" name="id444049"></a>
+<a class="indexterm" name="id444056"></a>
 You can identify the SID by using <code class="literal">GetSID.exe</code> from the Windows NT Server 4.0 Resource Kit.
 </p><p>
 Windows NT 4.0 stores the local profile information in the registry under the following key:
@@ -364,60 +364,60 @@
 on to this computer. (To find the profile information for the user whose locally cached profile you want
 to move, find the SID for the user with the <code class="literal">GetSID.exe</code> utility.) Inside the appropriate user's subkey,
 you will see a string value named <em class="parameter"><code>ProfileImagePath</code></em>.
-</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2685453"></a>Mandatory Profiles</h2></div></div></div><p>
-<a class="indexterm" name="id2685461"></a>
+</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id444102"></a>Mandatory Profiles</h2></div></div></div><p>
+<a class="indexterm" name="id444110"></a>
 A mandatory profile is a profile that the user does not have the ability to overwrite. During the
 user's session, it may be possible to change the desktop environment; however, as the user logs out, all changes
 made will be lost. If it is desired to not allow the user any ability to change the desktop environment,
 then this must be done through policy settings. See <a class="link" href="PolicyMgmt.html" title="Chapter 26. System and Account Policies">System and Account
 Policies</a>.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p> 
-<a class="indexterm" name="id2685486"></a>
-<a class="indexterm" name="id2685493"></a>
-<a class="indexterm" name="id2685500"></a>
+<a class="indexterm" name="id444131"></a>
+<a class="indexterm" name="id444137"></a>
+<a class="indexterm" name="id444144"></a>
 Under NO circumstances should the profile directory (or its contents) be made read-only because this may
 render the profile unusable.  Where it is essential to make a profile read-only within the UNIX file system,
 this can be done, but then you absolutely must use the <code class="literal">fake-permissions</code> VFS module to
 instruct MS Windows NT/200x/XP clients that the Profile has write permission for the user.  See <a class="link" href="VFS.html#fakeperms" title="fake_perms">fake_perms VFS module</a>.
 </p></div><p>
-<a class="indexterm" name="id2685530"></a>
-<a class="indexterm" name="id2685537"></a>
+<a class="indexterm" name="id444171"></a>
+<a class="indexterm" name="id444177"></a>
 For MS Windows NT4/200x/XP, the procedure shown in <a class="link" href="ProfileMgmt.html#profilemigrn" title="Windows NT4 Profile Management Tools">Profile Migration from Windows
 NT4/200x Server to Samba</a> can also be used to create mandatory profiles. To convert a group profile into
 a mandatory profile, simply locate the <code class="filename">NTUser.DAT</code> file in the copied profile and rename
 it to <code class="filename">NTUser.MAN</code>.
 </p><p>
-<a class="indexterm" name="id2685571"></a>
+<a class="indexterm" name="id444208"></a>
 For MS Windows 9x/Me, it is the <code class="filename">User.DAT</code> file that must be renamed to
 <code class="filename">User.MAN</code> to effect a mandatory profile.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2685594"></a>Creating and Managing Group Profiles</h2></div></div></div><p>
-<a class="indexterm" name="id2685602"></a>
-<a class="indexterm" name="id2685608"></a>
-<a class="indexterm" name="id2685615"></a>
-<a class="indexterm" name="id2685622"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id444230"></a>Creating and Managing Group Profiles</h2></div></div></div><p>
+<a class="indexterm" name="id444238"></a>
+<a class="indexterm" name="id444245"></a>
+<a class="indexterm" name="id444252"></a>
+<a class="indexterm" name="id444258"></a>
 Most organizations are arranged into departments. There is a nice benefit in this fact, since usually
 most users in a department require the same desktop applications and the same desktop layout. MS
 Windows NT4/200x/XP will allow the use of group profiles. A group profile is a profile that is created
 first using a template (example) user. Then using the profile migration tool (see above), the profile is
 assigned access rights for the user group that needs to be given access to the group profile.
 </p><p>
-<a class="indexterm" name="id2685641"></a>
+<a class="indexterm" name="id444277"></a>
 The next step is rather important. Instead of assigning a group profile to users (Using User Manager)
 on a &#8220;<span class="quote">per-user</span>&#8221; basis, the group itself is assigned the now modified profile.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
 Be careful with group profiles. If the user who is a member of a group also has a personal
 profile, then the result will be a fusion (merge) of the two.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2685664"></a>Default Profile for Windows Users</h2></div></div></div><p>
-<a class="indexterm" name="id2685672"></a>
-<a class="indexterm" name="id2685679"></a>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id444297"></a>Default Profile for Windows Users</h2></div></div></div><p>
+<a class="indexterm" name="id444305"></a>
+<a class="indexterm" name="id444311"></a>
 MS Windows 9x/Me and NT4/200x/XP will use a default profile for any user for whom a profile
 does not already exist. Armed with a knowledge of where the default profile is located on the Windows
 workstation, and knowing which registry keys affect the path from which the default profile is created,
 it is possible to modify the default profile to one that has been optimized for the site. This has
 significant administrative advantages.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2685694"></a>MS Windows 9x/Me</h3></div></div></div><p>
-<a class="indexterm" name="id2685702"></a>
-<a class="indexterm" name="id2685709"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id444323"></a>MS Windows 9x/Me</h3></div></div></div><p>
+<a class="indexterm" name="id444331"></a>
+<a class="indexterm" name="id444338"></a>
 To enable default per-use profiles in Windows 9x/Me, you can either use the <span class="application">Windows
 98 System Policy Editor</span> or change the registry directly.
 </p><p>
@@ -427,12 +427,12 @@
 select <span class="guilabel">User Profiles</span>, and click on the enable box. Remember to save the registry
 changes.
 </p><p>
-<a class="indexterm" name="id2685770"></a>
+<a class="indexterm" name="id444395"></a>
 To modify the registry directly, launch the <span class="application">Registry Editor</span>
 (<code class="literal">regedit.exe</code>) and select the hive <code class="filename">HKEY_LOCAL_MACHINE\Network\Logon</code>.
 Now add a DWORD type key with the name &#8220;<span class="quote">User Profiles.</span>&#8221; To enable user profiles to set the value
 to 1; to disable user profiles set it to 0.
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2685803"></a>User Profile Handling with Windows 9x/Me</h4></div></div></div><p>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id444426"></a>User Profile Handling with Windows 9x/Me</h4></div></div></div><p>
 When a user logs on to a Windows 9x/Me machine, the local profile path,
 <code class="filename">HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ProfileList</code>, is checked
 for an existing entry for that user.
@@ -448,7 +448,7 @@
 9x/Me machine is used and copied to a newly created folder for the logged on user. At log off, any
 changes that the user made are written to the user's local profile. If the user has a roaming profile,
 the changes are written to the user's profile on the server.
-</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2685846"></a>MS Windows NT4 Workstation</h3></div></div></div><p>
+</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id444459"></a>MS Windows NT4 Workstation</h3></div></div></div><p>
 On MS Windows NT4, the default user profile is obtained from the location
 <code class="filename">%SystemRoot%\Profiles</code>, which in a default installation will translate to
 <code class="filename">C:\Windows NT\Profiles</code>. Under this directory on a clean install, there will be three
@@ -462,7 +462,7 @@
 </p><p>
 When a new user first logs onto an MS Windows NT4 machine, a new profile is created from:
 </p><div class="itemizedlist"><ul type="disc"><li><p>All Users settings.</p></li><li><p>Default User settings (contains the default <code class="filename">NTUser.DAT</code> file).</p></li></ul></div><p>
-<a class="indexterm" name="id2685933"></a>
+<a class="indexterm" name="id444540"></a>
 When a user logs on to an MS Windows NT4 machine that is a member of a Microsoft security domain,
 the following steps are followed for profile handling: 
 </p><div class="procedure"><ol type="1"><li><p> The user's account information that is obtained during the logon process
@@ -474,11 +474,11 @@
 	location. </p></li><li><p> If the user account has a profile path, but at its location a profile does not
 	exist, then a new profile is created in the <code class="filename">%SystemRoot%\Profiles\%USERNAME%</code>
 	directory from reading the <code class="filename">Default User</code> profile. </p></li><li><p>
-<a class="indexterm" name="id2686010"></a>
-<a class="indexterm" name="id2686017"></a>
-<a class="indexterm" name="id2686024"></a>
-<a class="indexterm" name="id2686031"></a>
-<a class="indexterm" name="id2686038"></a>
+<a class="indexterm" name="id444610"></a>
+<a class="indexterm" name="id444617"></a>
+<a class="indexterm" name="id444624"></a>
+<a class="indexterm" name="id444631"></a>
+<a class="indexterm" name="id444638"></a>
 	If the NETLOGON share on the authenticating server (logon server) contains
 	a policy file (<code class="filename">NTConfig.POL</code>), then its contents are applied to the
 	<code class="filename">NTUser.DAT</code>, which is applied to the <code class="filename">HKEY_CURRENT_USER</code>
@@ -500,7 +500,7 @@
 In this case, the local copy (in <code class="filename">%SystemRoot%\Profiles\%USERNAME%</code>) will be deleted
 on logout.
 </p><p>
-<a class="indexterm" name="id2686145"></a>
+<a class="indexterm" name="id444736"></a>
 Under MS Windows NT4, default locations for common resources like <code class="filename">My Documents</code>
 may be redirected to a network share by modifying the following registry keys. These changes may be
 made via use of the System Policy Editor. To do so may require that you create your own template
@@ -519,7 +519,7 @@
 					\Explorer
 						\User Shell Folders
 </pre><p>
-<a class="indexterm" name="id2686185"></a>
+<a class="indexterm" name="id444770"></a>
 </p><p>  The above hive key contains a list of automatically managed
 folders. The default entries are shown in <a class="link" href="ProfileMgmt.html#ProfileLocs" title="Table 27.1. User Shell Folder Registry Keys Default Values">the next table</a>.
 </p><div class="table"><a name="ProfileLocs"></a><p class="title"><b>Table 27.1. User Shell Folder Registry Keys Default Values</b></p><div class="table-contents"><table summary="User Shell Folder Registry Keys Default Values" border="1"><colgroup><col align="left"><col align="left"></colgroup><thead><tr><th align="left">Name</th><th align="left">Default Value</th></tr></thead><tbody><tr><td align="left">AppData</td><td align="left">%USERPROFILE%\Application Data</td></tr><tr><td align="left">Desktop</td><td align="left">%USERPROFILE%\Desktop</td></tr><tr><td align="left">Favorites</td><td align="left">%USERPROFILE%\Favorites</td></tr><tr><td align="left">NetHood</td><td align="left">%USERPROFILE%\NetHood</td></tr><tr><td align="left">PrintHood</td><td align="left">%USERPROFILE%\PrintHood</td></tr><tr><td align="left">Programs</td><td align="left">%USERPROFILE%\Start Menu\Programs</td></tr><tr><td align="left">Recent</td><td align="left">%USERPROFILE%\Recent</td></tr><tr><td align="left">SendTo</td><td align="left">%USERPROFILE%\SendTo</td></tr><tr><td align="left">Start Menu </td><td align="left">%USERPROFILE%\Start Menu</td></tr><tr><td align="left">Startup</td><td align="left">%USERPROFILE%\Start Menu\Programs\Startup</td></tr></tbody></table></div></div><br class="table-break"><p> The registry key that contains the location of the default profile settings is:
@@ -529,24 +529,24 @@
 </pre><p>
 </p><p>
 The default entries are shown in <a class="link" href="ProfileMgmt.html#regkeys" title="Table 27.2. Defaults of Profile Settings Registry Keys">Defaults of Profile Settings Registry Keys</a>.
-</p><div class="table"><a name="regkeys"></a><p class="title"><b>Table 27.2. Defaults of Profile Settings Registry Keys</b></p><div class="table-contents"><table summary="Defaults of Profile Settings Registry Keys" border="1"><colgroup><col align="left"><col align="left"></colgroup><tbody><tr><td align="left">Common Desktop</td><td align="left">%SystemRoot%\Profiles\All Users\Desktop</td></tr><tr><td align="left">Common Programs</td><td align="left">%SystemRoot%\Profiles\All Users\Programs</td></tr><tr><td align="left">Common Start Menu</td><td align="left">%SystemRoot%\Profiles\All Users\Start Menu</td></tr><tr><td align="left">Common Startup</td><td align="left">%SystemRoot%\Profiles\All Users\Start Menu\Programs\Startup</td></tr></tbody></table></div></div><br class="table-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2686408"></a>MS Windows 200x/XP</h3></div></div></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2686417"></a>
-<a class="indexterm" name="id2686424"></a>
-<a class="indexterm" name="id2686431"></a>
-<a class="indexterm" name="id2686437"></a>
+</p><div class="table"><a name="regkeys"></a><p class="title"><b>Table 27.2. Defaults of Profile Settings Registry Keys</b></p><div class="table-contents"><table summary="Defaults of Profile Settings Registry Keys" border="1"><colgroup><col align="left"><col align="left"></colgroup><tbody><tr><td align="left">Common Desktop</td><td align="left">%SystemRoot%\Profiles\All Users\Desktop</td></tr><tr><td align="left">Common Programs</td><td align="left">%SystemRoot%\Profiles\All Users\Programs</td></tr><tr><td align="left">Common Start Menu</td><td align="left">%SystemRoot%\Profiles\All Users\Start Menu</td></tr><tr><td align="left">Common Startup</td><td align="left">%SystemRoot%\Profiles\All Users\Start Menu\Programs\Startup</td></tr></tbody></table></div></div><br class="table-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id444984"></a>MS Windows 200x/XP</h3></div></div></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
+<a class="indexterm" name="id444993"></a>
+<a class="indexterm" name="id445000"></a>
+<a class="indexterm" name="id445006"></a>
+<a class="indexterm" name="id445013"></a>
 MS Windows XP Home Edition does use default per-user profiles, but cannot participate
 in domain security, cannot log onto an NT/ADS-style domain, and thus can obtain the profile only
 from itself. While there are benefits in doing this, the beauty of those MS Windows clients that
 can participate in domain logon processes is that they allow the administrator to create a global default
 profile and enforce it through the use of Group Policy Objects (GPOs).
 </p></div><p>
-<a class="indexterm" name="id2686455"></a>
+<a class="indexterm" name="id445027"></a>
 When a new user first logs onto an MS Windows 200x/XP machine, the default profile is obtained from
 <code class="filename">C:\Documents and Settings\Default User</code>. The administrator can modify or change the
 contents of this location, and MS Windows 200x/XP will gladly use it. This is far from the optimum arrangement,
 since it will involve copying a new default profile to every MS Windows 200x/XP client workstation.
 </p><p>
-<a class="indexterm" name="id2686478"></a>
+<a class="indexterm" name="id445046"></a>
 When MS Windows 200x/XP participates in a domain security context, and if the default user profile is not
 found, then the client will search for a default profile in the NETLOGON share of the authenticating server.
 In MS Windows parlance, it is <code class="filename">%LOGONSERVER%\NETLOGON\Default User,</code>
@@ -568,7 +568,7 @@
 Folders\</code> </p><p>
 This hive key contains a list of automatically managed folders. The default entries are shown
 in <a class="link" href="ProfileMgmt.html#defregpthkeys" title="Table 27.3. Defaults of Default User Profile Paths Registry Keys">the next table</a>
-<a class="indexterm" name="id2686615"></a>
+<a class="indexterm" name="id445166"></a>
 </p><div class="table"><a name="defregpthkeys"></a><p class="title"><b>Table 27.3. Defaults of Default User Profile Paths Registry Keys</b></p><div class="table-contents"><table summary="Defaults of Default User Profile Paths Registry Keys" border="1"><colgroup><col align="left"><col align="left"></colgroup><thead><tr><th align="left">Name</th><th align="left">Default Value</th></tr></thead><tbody><tr><td align="left">AppData</td><td align="left">%USERPROFILE%\Application Data</td></tr><tr><td align="left">Cache</td><td align="left">%USERPROFILE%\Local Settings\Temporary Internet Files</td></tr><tr><td align="left">Cookies</td><td align="left">%USERPROFILE%\Cookies</td></tr><tr><td align="left">Desktop</td><td align="left">%USERPROFILE%\Desktop</td></tr><tr><td align="left">Favorites</td><td align="left">%USERPROFILE%\Favorites</td></tr><tr><td align="left">History</td><td align="left">%USERPROFILE%\Local Settings\History</td></tr><tr><td align="left">Local AppData</td><td align="left">%USERPROFILE%\Local Settings\Application Data</td></tr><tr><td align="left">Local Settings</td><td align="left">%USERPROFILE%\Local Settings</td></tr><tr><td align="left">My Pictures</td><td align="left">%USERPROFILE%\My Documents\My Pictures</td></tr><tr><td align="left">NetHood</td><td align="left">%USERPROFILE%\NetHood</td></tr><tr><td align="left">Personal</td><td align="left">%USERPROFILE%\My Documents</td></tr><tr><td align="left">PrintHood</td><td align="left">%USERPROFILE%\PrintHood</td></tr><tr><td align="left">Programs</td><td align="left">%USERPROFILE%\Start Menu\Programs</td></tr><tr><td align="left">Recent</td><td align="left">%USERPROFILE%\Recent</td></tr><tr><td align="left">SendTo</td><td align="left">%USERPROFILE%\SendTo</td></tr><tr><td align="left">Start Menu</td><td align="left">%USERPROFILE%\Start Menu</td></tr><tr><td align="left">Startup</td><td align="left">%USERPROFILE%\Start Menu\Programs\Startup</td></tr><tr><td align="left">Templates</td><td align="left">%USERPROFILE%\Templates</td></tr></tbody></table></div></div><br class="table-break"><p> There is also an entry called &#8220;<span class="quote">Default</span>&#8221; that has no value set. The default entry is
 of type <code class="constant">REG_SZ</code>; all the others are of type <code class="constant">REG_EXPAND_SZ</code>. </p><p> It makes a huge difference to the speed of handling roaming user profiles if all the folders are
 stored on a dedicated location on a network server. This means that it will not be necessary to write
@@ -589,13 +589,13 @@
 (default or custom) to it. </p><p> MS Windows 200x/XP profiles may be <span class="emphasis"><em>local</em></span> or <span class="emphasis"><em>roaming</em></span>.
 	A roaming profile is cached locally unless the following registry key is created: 
 
-<a class="indexterm" name="id2686888"></a>
+<a class="indexterm" name="id445423"></a>
 </p><p> </p><pre class="programlisting"> HKEY_LOCAL_MACHINE\SYSTEM\Software\Microsoft\Windows NT\CurrentVersion\
 	winlogon\"DeleteRoamingCache"=dword:00000001</pre><p>
 In this case, the local cache copy is deleted on logout.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2686913"></a>Common Errors</h2></div></div></div><p>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id445446"></a>Common Errors</h2></div></div></div><p>
 The following are some typical errors, problems, and questions that have been asked on the Samba mailing lists.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2686924"></a>Configuring Roaming Profiles for a Few Users or Groups</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id445456"></a>Configuring Roaming Profiles for a Few Users or Groups</h3></div></div></div><p>
 With Samba-2.2.x, the choice you have is to enable or disable roaming profiles support. It is a
 global-only setting. The default is to have roaming profiles, and the default path will locate them in
 the user's home directory.
@@ -605,7 +605,7 @@
 it is necessary to disable roaming profile handling in the registry of each such machine.
 </p><p>
 With Samba-3, you can have a global profile setting in <code class="filename">smb.conf</code>, and you can override this by
-per-user settings using the Domain User Manager (as with MS Windows NT4/200x). </p><p> In any case, you can configure only one profile per user. That profile can be either: </p><div class="itemizedlist"><ul type="disc"><li><p>A profile unique to that user.</p></li><li><p>A mandatory profile (one the user cannot change).</p></li><li><p>A group profile (really should be mandatory  that is, unchangable).</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2686985"></a>Cannot Use Roaming Profiles</h3></div></div></div><p> A user requested the following: &#8220;<span class="quote"> I do not want roaming profiles to be implemented. I want
+per-user settings using the Domain User Manager (as with MS Windows NT4/200x). </p><p> In any case, you can configure only one profile per user. That profile can be either: </p><div class="itemizedlist"><ul type="disc"><li><p>A profile unique to that user.</p></li><li><p>A mandatory profile (one the user cannot change).</p></li><li><p>A group profile (really should be mandatory  that is, unchangable).</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id445509"></a>Cannot Use Roaming Profiles</h3></div></div></div><p> A user requested the following: &#8220;<span class="quote"> I do not want roaming profiles to be implemented. I want
 to give users a local profile alone. I am totally lost with this error. For the past
 two days I tried everything, I googled around but found no useful pointers. Please help me. </span>&#8221;</p><p> The choices are: </p><div class="variablelist"><dl><dt><span class="term">Local profiles</span></dt><dd><p> I know of no registry keys that will allow
 		autodeletion of LOCAL profiles on log out.</p></dd><dt><span class="term">Roaming profiles</span></dt><dd><p> As a user logs onto the network, a centrally
@@ -625,18 +625,18 @@
 changed as well as good discipline make for a problem-free site. </p><p> Microsoft's answer to the PST problem is to store all email in an MS Exchange Server backend. This
 removes the need for a PST file. </p><p>Local profiles mean: </p><div class="itemizedlist"><ul type="disc"><li><p>If each machine is used by many users, then much local disk storage is needed
 	for local profiles.</p></li><li><p>Every workstation the user logs into has
-	its own profile; these can be very different from machine to machine.</p></li></ul></div><p> On the other hand, use of roaming profiles means: </p><div class="itemizedlist"><ul type="disc"><li><p>The network administrator can control the desktop environment of all users.</p></li><li><p>Use of mandatory profiles drastically reduces network management overheads.</p></li><li><p>In the long run, users will experience fewer problems.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2687156"></a>Changing the Default Profile</h3></div></div></div><p>&#8220;<span class="quote">When the client logs onto the domain controller, it searches
+	its own profile; these can be very different from machine to machine.</p></li></ul></div><p> On the other hand, use of roaming profiles means: </p><div class="itemizedlist"><ul type="disc"><li><p>The network administrator can control the desktop environment of all users.</p></li><li><p>Use of mandatory profiles drastically reduces network management overheads.</p></li><li><p>In the long run, users will experience fewer problems.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id445658"></a>Changing the Default Profile</h3></div></div></div><p>&#8220;<span class="quote">When the client logs onto the domain controller, it searches
 for a profile to download. Where do I put this default profile?</span>&#8221;</p><p>
-<a class="indexterm" name="id2687171"></a>
+<a class="indexterm" name="id445672"></a>
 First, the Samba server needs to be configured as a domain controller. This can be done by
-setting in <code class="filename">smb.conf</code>: </p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2687192"></a><em class="parameter"><code>security = user</code></em></td></tr><tr><td><a class="indexterm" name="id2687204"></a><em class="parameter"><code>os level = 32 (or more)</code></em></td></tr><tr><td><a class="indexterm" name="id2687215"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr></table><p> There must be a <em class="parameter"><code>[netlogon]</code></em> share that is world readable. It is
+setting in <code class="filename">smb.conf</code>: </p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id445692"></a><em class="parameter"><code>security = user</code></em></td></tr><tr><td><a class="indexterm" name="id445703"></a><em class="parameter"><code>os level = 32 (or more)</code></em></td></tr><tr><td><a class="indexterm" name="id445714"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr></table><p> There must be a <em class="parameter"><code>[netlogon]</code></em> share that is world readable. It is
 a good idea to add a logon script to preset printer and drive connections. There is also a facility
 for automatically synchronizing the workstation time clock with that of the logon server (another good
 thing to do). </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p> To invoke autodeletion of roaming profiles from the local workstation cache (disk storage), use
 the <span class="application">Group Policy Editor</span> to create a file called <code class="filename">NTConfig.POL</code>
 with the appropriate entries. This file needs to be located in the <em class="parameter"><code>netlogon</code></em>
 share root directory.</p></div><p> Windows clients need to be members of the domain. Workgroup machines do not use network logons,
-so they do not interoperate with domain profiles. </p><p> For roaming profiles, add to <code class="filename">smb.conf</code>: </p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2687288"></a><em class="parameter"><code>logon path = \\%N\profiles\%U</code></em></td></tr><tr><td># Default logon drive is Z:</td></tr><tr><td><a class="indexterm" name="id2687303"></a><em class="parameter"><code>logon drive = H:</code></em></td></tr><tr><td># This requires a PROFILES share that is world writable.</td></tr></table></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2687320"></a>Debugging Roaming Profiles and NT4-style Domain Policies</h3></div></div></div><p>
+so they do not interoperate with domain profiles. </p><p> For roaming profiles, add to <code class="filename">smb.conf</code>: </p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id445780"></a><em class="parameter"><code>logon path = \\%N\profiles\%U</code></em></td></tr><tr><td># Default logon drive is Z:</td></tr><tr><td><a class="indexterm" name="id445796"></a><em class="parameter"><code>logon drive = H:</code></em></td></tr><tr><td># This requires a PROFILES share that is world writable.</td></tr></table></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id445812"></a>Debugging Roaming Profiles and NT4-style Domain Policies</h3></div></div></div><p>
 Roaming profiles and domain policies are implemented via <code class="literal">USERENV.DLL</code>. 
 Microsoft Knowledge Base articles <a class="ulink" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;221833" target="_top">221833</a> and 
 <a class="ulink" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;154120" target="_top">154120</a>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/SWAT.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/SWAT.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/SWAT.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,27 +1,27 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 37. SWAT: The Samba Web Administration Tool</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="migration.html" title="Part IV. Migration and Updating"><link rel="prev" href="NT4Migration.html" title="Chapter 36. Migration from NT4 PDC to Samba-3 PDC"><link rel="next" href="troubleshooting.html" title="Part V. Troubleshooting"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 37. SWAT: The Samba Web Administration Tool</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="NT4Migration.html">Prev</a> </td><th width="60%" align="center">Part IV. Migration and Updating</th><td width="20%" align="right"> <a accesskey="n" href="troubleshooting.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="SWAT"></a>Chapter 37. SWAT: The Samba Web Administration Tool</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">April 21, 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="SWAT.html#id2703390">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="SWAT.html#id2703514">Guidelines and Technical Tips</a></span></dt><dd><dl><dt><span class="sect2"><a href="SWAT.html#id2703534">Validate SWAT Installation</a></span></dt><dt><span class="sect2"><a href="SWAT.html#xinetd">Enabling SWAT for Use</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704171">Securing SWAT through SSL</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704323">Enabling SWAT Internationalization Support</a></span></dt></dl></dd><dt><span class="sect1"><a href="SWAT.html#id2704521">Overview and Quick Tour</a></span></dt><dd><dl><dt><span class="sect2"><a href="SWAT.html#id2704534">The SWAT Home Page</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704595">Global Settings</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704697">Share Settings</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704752">Printers Settings</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704809">The SWAT Wizard</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704872">The Status Page</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704916">The View Page</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704935">The Password Change Page</a></span></dt></dl></dd></dl></div><p>
-<a class="indexterm" name="id2703354"></a>
-<a class="indexterm" name="id2703361"></a>
-<a class="indexterm" name="id2703368"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 37. SWAT: The Samba Web Administration Tool</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="migration.html" title="Part IV. Migration and Updating"><link rel="prev" href="NT4Migration.html" title="Chapter 36. Migration from NT4 PDC to Samba-3 PDC"><link rel="next" href="troubleshooting.html" title="Part V. Troubleshooting"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 37. SWAT: The Samba Web Administration Tool</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="NT4Migration.html">Prev</a> </td><th width="60%" align="center">Part IV. Migration and Updating</th><td width="20%" align="right"> <a accesskey="n" href="troubleshooting.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="SWAT"></a>Chapter 37. SWAT: The Samba Web Administration Tool</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">April 21, 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="SWAT.html#id460718">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="SWAT.html#id460830">Guidelines and Technical Tips</a></span></dt><dd><dl><dt><span class="sect2"><a href="SWAT.html#id460847">Validate SWAT Installation</a></span></dt><dt><span class="sect2"><a href="SWAT.html#xinetd">Enabling SWAT for Use</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id461421">Securing SWAT through SSL</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id461566">Enabling SWAT Internationalization Support</a></span></dt></dl></dd><dt><span class="sect1"><a href="SWAT.html#id461751">Overview and Quick Tour</a></span></dt><dd><dl><dt><span class="sect2"><a href="SWAT.html#id461762">The SWAT Home Page</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id461815">Global Settings</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id461912">Share Settings</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id461964">Printers Settings</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id462016">The SWAT Wizard</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id462072">The Status Page</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id462111">The View Page</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id462129">The Password Change Page</a></span></dt></dl></dd></dl></div><p>
+<a class="indexterm" name="id460686"></a>
+<a class="indexterm" name="id460693"></a>
+<a class="indexterm" name="id460700"></a>
 There are many and varied opinions regarding the usefulness of SWAT.  No matter how hard one tries to produce
 the perfect configuration tool, it remains an object of personal taste. SWAT is a tool that allows Web-based
 configuration of Samba. It has a wizard that may help to get Samba configured quickly, it has
 context-sensitive help on each <code class="filename">smb.conf</code> parameter, it provides for monitoring of current state of connection
 information, and it allows networkwide MS Windows network password management.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2703390"></a>Features and Benefits</h2></div></div></div><p>
-<a class="indexterm" name="id2703398"></a>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id460718"></a>Features and Benefits</h2></div></div></div><p>
+<a class="indexterm" name="id460726"></a>
 SWAT is a facility that is part of the Samba suite. The main executable is called
 <code class="literal">swat</code> and is invoked by the internetworking super daemon.
 See <a class="link" href="SWAT.html#xinetd" title="Enabling SWAT for Use">appropriate section</a> for details.
 </p><p>
-<a class="indexterm" name="id2703426"></a>
+<a class="indexterm" name="id460751"></a>
 SWAT uses integral Samba components to locate parameters supported by the particular
 version of Samba. Unlike tools and utilities that are external to Samba, SWAT is always
 up to date as known Samba parameters change. SWAT provides context-sensitive help for each
 configuration parameter, directly from <code class="literal">man</code> page entries.
 </p><p>
-<a class="indexterm" name="id2703446"></a>
-<a class="indexterm" name="id2703453"></a>
-<a class="indexterm" name="id2703460"></a>
+<a class="indexterm" name="id460769"></a>
+<a class="indexterm" name="id460776"></a>
+<a class="indexterm" name="id460783"></a>
 Some network administrators believe that it is a good idea to write systems
 documentation inside configuration files, and for them SWAT will always be a nasty tool. SWAT
 does not store the configuration file in any intermediate form; rather, it stores only the
@@ -30,38 +30,38 @@
 as well as parameters that are no longer supported, will be lost from the <code class="filename">smb.conf</code> file.
 Additionally, the parameters will be written back in internal ordering.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2703493"></a>
+<a class="indexterm" name="id460811"></a>
 Before using SWAT, please be warned  SWAT will completely replace your <code class="filename">smb.conf</code> with
 a fully optimized file that has been stripped of all comments you might have placed there
 and only nondefault settings will be written to the file.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2703514"></a>Guidelines and Technical Tips</h2></div></div></div><p>
-<a class="indexterm" name="id2703522"></a>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id460830"></a>Guidelines and Technical Tips</h2></div></div></div><p>
+<a class="indexterm" name="id460838"></a>
 This section aims to unlock the dark secrets behind how SWAT may be made to work,
 how it can be made more secure, and how to solve internationalization support problems.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2703534"></a>Validate SWAT Installation</h3></div></div></div><p>
-<a class="indexterm" name="id2703542"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id460847"></a>Validate SWAT Installation</h3></div></div></div><p>
+<a class="indexterm" name="id460855"></a>
 The very first step that should be taken before attempting to configure a host
 system for SWAT operation is to check that it is installed. This may seem a trivial
 point to some, but several Linux distributions do not install SWAT by default,
 even though they do ship an installable binary support package containing SWAT
 on the distribution media.
 </p><p>
-<a class="indexterm" name="id2703558"></a>
+<a class="indexterm" name="id460868"></a>
 When you have confirmed that SWAT is installed, it is necessary to validate
 that the installation includes the binary <code class="literal">swat</code> file as well
 as all the supporting text and Web files. A number of operating system distributions
 in the past have failed to include the necessary support files, even though the
 <code class="literal">swat</code> binary executable file was installed. 
 </p><p>
-<a class="indexterm" name="id2703585"></a>
-<a class="indexterm" name="id2703592"></a>
+<a class="indexterm" name="id460893"></a>
+<a class="indexterm" name="id460900"></a>
 Finally, when you are sure that SWAT has been fully installed, please check that SWAT
 is enabled in the control file for the internetworking super-daemon (inetd or xinetd)
 that is used on your operating system platform. 
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2703604"></a>Locating the <code class="literal">SWAT</code> File</h4></div></div></div><p>
-<a class="indexterm" name="id2703618"></a>
-<a class="indexterm" name="id2703625"></a>
-<a class="indexterm" name="id2703632"></a>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id460910"></a>Locating the <code class="literal">SWAT</code> File</h4></div></div></div><p>
+<a class="indexterm" name="id460923"></a>
+<a class="indexterm" name="id460930"></a>
+<a class="indexterm" name="id460937"></a>
 To validate that SWAT is installed, first locate the <code class="literal">swat</code> binary
 file on the system. It may be found under the following directories:</p><table class="simplelist" border="0" summary="Simple list"><tr><td><code class="filename">/usr/local/samba/bin</code>  the default Samba location</td></tr><tr><td><code class="filename">/usr/sbin</code>  the default location on most Linux systems</td></tr><tr><td><code class="filename">/opt/samba/bin</code></td></tr></table><p>
 </p><p>
@@ -71,9 +71,9 @@
 There are a number of methods that may be used to locate the <code class="literal">swat</code> binary file.
 The following methods may be helpful.
 </p><p>
-<a class="indexterm" name="id2703704"></a>
-<a class="indexterm" name="id2703711"></a>
-<a class="indexterm" name="id2703718"></a>
+<a class="indexterm" name="id461005"></a>
+<a class="indexterm" name="id461012"></a>
+<a class="indexterm" name="id461019"></a>
 If <code class="literal">swat</code> is in your current operating system search path, it will be easy to 
 find it. You can ask what are the command-line options for <code class="literal">swat</code> as shown here:
 </p><pre class="screen">
@@ -91,7 +91,7 @@
   -l, --log-basename=LOGFILEBASE       Basename for log/debug files
   -V, --version                        Print version
 </pre><p>
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2703756"></a>Locating the SWAT Support Files</h4></div></div></div><p>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id461051"></a>Locating the SWAT Support Files</h4></div></div></div><p>
 Now that you have found that <code class="literal">swat</code> is in the search path, it is easy
 to identify where the file is located. Here is another simple way this may be done:
 </p><pre class="screen">
@@ -173,7 +173,7 @@
 or in a similar location.
 </p><p>
 The control entry for the older style file might be:
-<a class="indexterm" name="id2703949"></a>
+<a class="indexterm" name="id461213"></a>
 </p><pre class="programlisting">
 	# swat is the Samba Web Administration Tool
 	swat stream tcp nowait.400 root /usr/sbin/swat swat
@@ -201,10 +201,10 @@
 This means that SWAT is disabled. To enable use of SWAT, set this parameter to <code class="constant">no</code>
 as shown.
 </p><p>
-<a class="indexterm" name="id2704004"></a>
-<a class="indexterm" name="id2704011"></a>
-<a class="indexterm" name="id2704018"></a>
-<a class="indexterm" name="id2704025"></a>
+<a class="indexterm" name="id461262"></a>
+<a class="indexterm" name="id461269"></a>
+<a class="indexterm" name="id461276"></a>
+<a class="indexterm" name="id461283"></a>
 Both of the previous examples assume that the <code class="literal">swat</code> binary has been
 located in the <code class="filename">/usr/sbin</code> directory. In addition to the above,
 SWAT will use a directory access point from which it will load its Help files
@@ -212,8 +212,8 @@
 systems is in the directory <code class="filename">/usr/share/samba/swat</code>. The default
 location using Samba defaults will be <code class="filename">/usr/local/samba/swat</code>.
 </p><p>
-<a class="indexterm" name="id2704065"></a>
-<a class="indexterm" name="id2704072"></a>
+<a class="indexterm" name="id461319"></a>
+<a class="indexterm" name="id461326"></a>
 Access to SWAT will prompt for a logon. If you log onto SWAT as any non-root user,
 the only permission allowed is to view certain aspects of configuration as well as
 access to the password change facility. The buttons that will be exposed to the non-root
@@ -225,21 +225,21 @@
 full change and commit ability. The buttons that will be exposed include
 <span class="guibutton">HOME</span>, <span class="guibutton">GLOBALS</span>, <span class="guibutton">SHARES</span>, <span class="guibutton">PRINTERS</span>, 
 <span class="guibutton">WIZARD</span>, <span class="guibutton">STATUS</span>, <span class="guibutton">VIEW</span>, and <span class="guibutton">PASSWORD</span>.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2704171"></a>Securing SWAT through SSL</h3></div></div></div><p>
-<a class="indexterm" name="id2704179"></a>
-<a class="indexterm" name="id2704186"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id461421"></a>Securing SWAT through SSL</h3></div></div></div><p>
+<a class="indexterm" name="id461429"></a>
+<a class="indexterm" name="id461436"></a>
 Many people have asked about how to set up SWAT with SSL to allow for secure remote
 administration of Samba. Here is a method that works, courtesy of Markus Krieger.
 </p><p>
 Modifications to the SWAT setup are as follows: 
 </p><div class="procedure"><ol type="1"><li><p>
-<a class="indexterm" name="id2704211"></a>
+<a class="indexterm" name="id461459"></a>
 	Install OpenSSL.
 	</p></li><li><p>
-<a class="indexterm" name="id2704225"></a>
-<a class="indexterm" name="id2704231"></a>
+<a class="indexterm" name="id461472"></a>
+<a class="indexterm" name="id461479"></a>
 	Generate certificate and private key.
-<a class="indexterm" name="id2704239"></a>
+<a class="indexterm" name="id461486"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>/usr/bin/openssl req -new -x509 -days 365 -nodes -config \
 	/usr/share/doc/packages/stunnel/stunnel.cnf \
@@ -247,7 +247,7 @@
 </pre></li><li><p>
 	Remove SWAT entry from [x]inetd.
 	</p></li><li><p>
-<a class="indexterm" name="id2704277"></a>
+<a class="indexterm" name="id461523"></a>
 	Start <code class="literal">stunnel</code>.
 
 </p><pre class="screen">
@@ -255,7 +255,7 @@
 	 -l /usr/local/samba/bin/swat swat </code></strong>
 </pre></li></ol></div><p>
 Afterward, simply connect to SWAT by using the URL <a class="ulink" href="https://myhost:901" target="_top">https://myhost:901</a>, accept the certificate, and the SSL connection is up.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2704323"></a>Enabling SWAT Internationalization Support</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id461566"></a>Enabling SWAT Internationalization Support</h3></div></div></div><p>
 SWAT can be configured to display its messages to match the settings of
 the language configurations of your Web browser. It will be passed to SWAT 
 in the Accept-Language header of the HTTP request.
@@ -267,14 +267,14 @@
 	</p></li><li><p>
 	Set your browsers language setting.
 	</p></li></ul></div><p>
-<a class="indexterm" name="id2704367"></a>
-<a class="indexterm" name="id2704374"></a>
-<a class="indexterm" name="id2704380"></a>
-<a class="indexterm" name="id2704387"></a>
+<a class="indexterm" name="id461607"></a>
+<a class="indexterm" name="id461614"></a>
+<a class="indexterm" name="id461621"></a>
+<a class="indexterm" name="id461628"></a>
 The name of the <code class="literal">msg</code> file is the same as the language ID sent by the browser. For
 example, <span class="emphasis"><em>en</em></span> means English, <span class="emphasis"><em>ja</em></span> means Japanese, <span class="emphasis"><em>fr</em></span> means French.
 </p><p>
-<a class="indexterm" name="id2704416"></a>
+<a class="indexterm" name="id461655"></a>
 If you do not like some of messages, or there are no <code class="literal">msg</code> files for
 your locale, you can create them simply by copying the <code class="literal">en.msg</code> files
 to the directory for &#8220;<span class="quote">your language ID.msg</span>&#8221; and filling in proper strings
@@ -284,20 +284,20 @@
 msgid "Set Default"
 msgstr "Imposta Default"
 </pre><p>
-<a class="indexterm" name="id2704464"></a>
+<a class="indexterm" name="id461700"></a>
 and so on. If you find a mistake or create a new <code class="literal">msg</code> file, please email it
 to us so we will consider it in the next release of Samba. The <code class="literal">msg</code> file should be encoded in UTF-8.
 </p><p>
-<a class="indexterm" name="id2704488"></a>
+<a class="indexterm" name="id461722"></a>
 Note that if you enable this feature and the <a class="link" href="smb.conf.5.html#DISPLAYCHARSET">display charset</a> is not
 matched to your browser's setting, the SWAT display may be corrupted.  In a future version of
 Samba, SWAT will always display messages with UTF-8 encoding. You will then not need to set
 this <code class="filename">smb.conf</code> file parameter.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2704521"></a>Overview and Quick Tour</h2></div></div></div><p>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id461751"></a>Overview and Quick Tour</h2></div></div></div><p>
 SWAT is a tool that may be used to configure Samba or just to obtain useful links
 to important reference materials such as the contents of this book as well as other
 documents that have been found useful for solving Windows networking problems.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2704534"></a>The SWAT Home Page</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id461762"></a>The SWAT Home Page</h3></div></div></div><p>
 The SWAT title page provides access to the latest Samba documentation. The manual page for
 each Samba component is accessible from this page, as are the Samba3-HOWTO (this 
 document) as well as the O'Reilly book &#8220;<span class="quote">Using Samba.</span>&#8221;
@@ -312,7 +312,7 @@
 changes to <code class="filename">smb.conf</code> as well as general operation with root privileges. The option that
 creates this ability is the <code class="option">-a</code> flag to SWAT. <span class="emphasis"><em>Do not use this in a
 production environment.</em></span>
-</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2704595"></a>Global Settings</h3></div></div></div><p>
+</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id461815"></a>Global Settings</h3></div></div></div><p>
 The <span class="guibutton">GLOBALS</span> button exposes a page that allows configuration of the global parameters
 in <code class="filename">smb.conf</code>. There are two levels of exposure of the parameters:
 </p><div class="itemizedlist"><ul type="disc"><li><p>
@@ -332,7 +332,7 @@
 SWAT has context-sensitive help. To find out what each parameter is
 for, simply click on the
 <span class="guibutton">Help</span> link to the left of the configuration parameter.
-</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2704697"></a>Share Settings</h3></div></div></div><p>
+</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id461912"></a>Share Settings</h3></div></div></div><p>
 To affect a currently configured share, simply click on the pull-down button between the
 <span class="guibutton">Choose Share</span> and the <span class="guibutton">Delete Share</span> buttons and
 select the share you wish to operate on. To edit the settings,
@@ -343,7 +343,7 @@
 To create a new share, next to the button labeled <span class="guibutton">Create Share</span>, enter
 into the text field the name of the share to be created, then click on the 
 <span class="guibutton">Create Share</span> button.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2704752"></a>Printers Settings</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id461964"></a>Printers Settings</h3></div></div></div><p>
 To affect a currently configured printer, simply click on the pull-down button between the
 <span class="guibutton">Choose Printer</span> and the <span class="guibutton">Delete Printer</span> buttons and
 select the printer you wish to operate on. To edit the settings,
@@ -354,7 +354,7 @@
 To create a new printer, next to the button labeled <span class="guibutton">Create Printer</span>, enter
 into the text field the name of the share to be created, then click on the 
 <span class="guibutton">Create Printer</span> button.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2704809"></a>The SWAT Wizard</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id462016"></a>The SWAT Wizard</h3></div></div></div><p>
 The purpose of the SWAT Wizard is to help the Microsoft-knowledgeable network administrator
 to configure Samba with a minimum of effort.
 </p><p>
@@ -370,7 +370,7 @@
 will be configured for, whether it will be a WINS server, participate as a WINS client, or
 operate with no WINS support. By clicking one button, you can elect to expose (or not) user
 home directories.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2704872"></a>The Status Page</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id462072"></a>The Status Page</h3></div></div></div><p>
 The status page serves a limited purpose. First, it allows control of the Samba daemons.
 The key daemons that create the Samba server environment are <span class="application">smbd</span>, <span class="application">nmbd</span>, and <span class="application">winbindd</span>.
 </p><p>
@@ -381,11 +381,11 @@
 </p><p>
 Finally, the status page may be used to terminate specific smbd client connections in order to
 free files that may be locked.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2704916"></a>The View Page</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id462111"></a>The View Page</h3></div></div></div><p>
 The view page allows you to view the optimized <code class="filename">smb.conf</code> file and, if you are
 particularly masochistic, permits you also to see all possible global configuration
 parameters and their settings.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2704935"></a>The Password Change Page</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id462129"></a>The Password Change Page</h3></div></div></div><p>
 The password change page is a popular tool that allows the creation, deletion, deactivation,
 and reactivation of MS Windows networking users on the local machine. You can also use
 this tool to change a local password for a user account.

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/SambaHA.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/SambaHA.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/SambaHA.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,17 +1,17 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 32. High Availability</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="Backup.html" title="Chapter 31. Backup Techniques"><link rel="next" href="largefile.html" title="Chapter 33. Handling Large Directories"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 32. High Availability</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="Backup.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="largefile.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="SambaHA"></a>Chapter 32. High Availability</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jeremy</span> <span class="surname">Allison</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jra at samba.org">jra at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="SambaHA.html#id2694331">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="SambaHA.html#id2694452">Technical Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="SambaHA.html#id2694486">The Ultimate Goal</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id2694616">Why Is This So Hard?</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id2695329">A Simple Solution</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id2695410">High-Availability Server Products</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id2695550">MS-DFS: The Poor Man's Cluster</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id2695587">Conclusions</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2694331"></a>Features and Benefits</h2></div></div></div><p>
-<a class="indexterm" name="id2694339"></a>
-<a class="indexterm" name="id2694346"></a>
-<a class="indexterm" name="id2694353"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 32. High Availability</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="Backup.html" title="Chapter 31. Backup Techniques"><link rel="next" href="largefile.html" title="Chapter 33. Handling Large Directories"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 32. High Availability</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="Backup.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="largefile.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="SambaHA"></a>Chapter 32. High Availability</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jeremy</span> <span class="surname">Allison</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jra at samba.org">jra at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="SambaHA.html#id452170">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="SambaHA.html#id452277">Technical Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="SambaHA.html#id452309">The Ultimate Goal</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id452431">Why Is This So Hard?</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id453095">A Simple Solution</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id453168">High-Availability Server Products</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id453296">MS-DFS: The Poor Man's Cluster</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id453329">Conclusions</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id452170"></a>Features and Benefits</h2></div></div></div><p>
+<a class="indexterm" name="id452178"></a>
+<a class="indexterm" name="id452185"></a>
+<a class="indexterm" name="id452192"></a>
 Network administrators are often concerned about the availability of file and print
 services. Network users are inclined toward intolerance of the services they depend
 on to perform vital task responsibilities.
 </p><p>
 A sign in a computer room served to remind staff of their responsibilities. It read:
 </p><div class="blockquote"><blockquote class="blockquote"><p>
-<a class="indexterm" name="id2694374"></a>
-<a class="indexterm" name="id2694381"></a>
-<a class="indexterm" name="id2694388"></a>
-<a class="indexterm" name="id2694394"></a>
+<a class="indexterm" name="id452210"></a>
+<a class="indexterm" name="id452216"></a>
+<a class="indexterm" name="id452223"></a>
+<a class="indexterm" name="id452230"></a>
 All humans fail, in both great and small ways we fail continually. Machines fail too.
 Computers are machines that are managed by humans, the fallout from failure
 can be spectacular. Your responsibility is to deal with failure, to anticipate it
@@ -21,9 +21,9 @@
 If we are to deal with failure in a planned and productive manner, then first we must
 understand the problem. That is the purpose of this chapter.
 </p><p>
-<a class="indexterm" name="id2694418"></a>
-<a class="indexterm" name="id2694425"></a>
-<a class="indexterm" name="id2694432"></a>
+<a class="indexterm" name="id452249"></a>
+<a class="indexterm" name="id452256"></a>
+<a class="indexterm" name="id452262"></a>
 Parenthetically, in the following discussion there are seeds of information on how to
 provision a network infrastructure against failure. Our purpose here is not to provide
 a lengthy dissertation on the subject of high availability. Additionally, we have made
@@ -32,37 +32,37 @@
 rise to the challenge of providing a detailed document that is focused purely on
 presentation of the current state of knowledge and practice in high availability as it
 applies to the deployment of Samba and other CIFS/SMB technologies.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2694452"></a>Technical Discussion</h2></div></div></div><p>
-<a class="indexterm" name="id2694460"></a>
-<a class="indexterm" name="id2694467"></a>
-<a class="indexterm" name="id2694474"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id452277"></a>Technical Discussion</h2></div></div></div><p>
+<a class="indexterm" name="id452285"></a>
+<a class="indexterm" name="id452292"></a>
+<a class="indexterm" name="id452298"></a>
 The following summary was part of a presentation by Jeremy Allison at the SambaXP 2003
 conference that was held at Goettingen, Germany, in April 2003. Material has been added
 from other sources, but it was Jeremy who inspired the structure that follows.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2694486"></a>The Ultimate Goal</h3></div></div></div><p>
-<a class="indexterm" name="id2694494"></a>
-<a class="indexterm" name="id2694501"></a>
-<a class="indexterm" name="id2694508"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id452309"></a>The Ultimate Goal</h3></div></div></div><p>
+<a class="indexterm" name="id452316"></a>
+<a class="indexterm" name="id452323"></a>
+<a class="indexterm" name="id452330"></a>
 	All clustering technologies aim to achieve one or more of the following:
 	</p><div class="itemizedlist"><ul type="disc"><li><p>Obtain the maximum affordable computational power.</p></li><li><p>Obtain faster program execution.</p></li><li><p>Deliver unstoppable services.</p></li><li><p>Avert points of failure.</p></li><li><p>Exact most effective utilization of resources.</p></li></ul></div><p>
 	A clustered file server ideally has the following properties:
-<a class="indexterm" name="id2694549"></a>
-<a class="indexterm" name="id2694556"></a>
-<a class="indexterm" name="id2694563"></a>
-<a class="indexterm" name="id2694570"></a>
-	</p><div class="itemizedlist"><ul type="disc"><li><p>All clients can connect transparently to any server.</p></li><li><p>A server can fail and clients are transparently reconnected to another server.</p></li><li><p>All servers serve out the same set of files.</p></li><li><p>All file changes are immediately seen on all servers.</p><div class="itemizedlist"><ul type="circle"><li><p>Requires a distributed file system.</p></li></ul></div></li><li><p>Infinite ability to scale by adding more servers or disks.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2694616"></a>Why Is This So Hard?</h3></div></div></div><p>
+<a class="indexterm" name="id452368"></a>
+<a class="indexterm" name="id452375"></a>
+<a class="indexterm" name="id452382"></a>
+<a class="indexterm" name="id452389"></a>
+	</p><div class="itemizedlist"><ul type="disc"><li><p>All clients can connect transparently to any server.</p></li><li><p>A server can fail and clients are transparently reconnected to another server.</p></li><li><p>All servers serve out the same set of files.</p></li><li><p>All file changes are immediately seen on all servers.</p><div class="itemizedlist"><ul type="circle"><li><p>Requires a distributed file system.</p></li></ul></div></li><li><p>Infinite ability to scale by adding more servers or disks.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id452431"></a>Why Is This So Hard?</h3></div></div></div><p>
 	In short, the problem is one of <span class="emphasis"><em>state</em></span>.
 	</p><div class="itemizedlist"><ul type="disc"><li><p>
-<a class="indexterm" name="id2694635"></a>
+<a class="indexterm" name="id452450"></a>
 			All TCP/IP connections are dependent on state information.
 			</p><p>
-<a class="indexterm" name="id2694647"></a>
+<a class="indexterm" name="id452461"></a>
 			The TCP connection involves a packet sequence number. This
 			sequence number would need to be dynamically updated on all
 			machines in the cluster to effect seamless TCP failover.
 			</p></li><li><p>
-<a class="indexterm" name="id2694663"></a>
-<a class="indexterm" name="id2694670"></a>
+<a class="indexterm" name="id452476"></a>
+<a class="indexterm" name="id452482"></a>
 			CIFS/SMB (the Windows networking protocols) uses TCP connections.
 			</p><p>
 			This means that from a basic design perspective, failover is not
@@ -71,91 +71,91 @@
 				All current SMB clusters are failover solutions
 				 they rely on the clients to reconnect. They provide server
 				failover, but clients can lose information due to a server failure.
-<a class="indexterm" name="id2694695"></a>
+<a class="indexterm" name="id452504"></a>
 				</p></li></ul></div><p>
 			</p></li><li><p>
 			Servers keep state information about client connections.
-			</p><div class="itemizedlist"><a class="indexterm" name="id2694713"></a><ul type="circle"><li><p>CIFS/SMB involves a lot of state.</p></li><li><p>Every file open must be compared with other open files
+			</p><div class="itemizedlist"><a class="indexterm" name="id452522"></a><ul type="circle"><li><p>CIFS/SMB involves a lot of state.</p></li><li><p>Every file open must be compared with other open files
 						to check share modes.</p></li></ul></div><p>
-			</p></li></ul></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2694735"></a>The Front-End Challenge</h4></div></div></div><p>
-<a class="indexterm" name="id2694743"></a>
-<a class="indexterm" name="id2694750"></a>
-<a class="indexterm" name="id2694757"></a>
-<a class="indexterm" name="id2694764"></a>
-<a class="indexterm" name="id2694771"></a>
-<a class="indexterm" name="id2694778"></a>
-<a class="indexterm" name="id2694784"></a>
+			</p></li></ul></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id452542"></a>The Front-End Challenge</h4></div></div></div><p>
+<a class="indexterm" name="id452550"></a>
+<a class="indexterm" name="id452557"></a>
+<a class="indexterm" name="id452564"></a>
+<a class="indexterm" name="id452571"></a>
+<a class="indexterm" name="id452578"></a>
+<a class="indexterm" name="id452584"></a>
+<a class="indexterm" name="id452591"></a>
 		To make it possible for a cluster of file servers to appear as a single server that has one
 		name and one IP address, the incoming TCP data streams from clients must be processed by the
 		front-end virtual server. This server must de-multiplex the incoming packets at the SMB protocol
 		layer level and then feed the SMB packet to different servers in the cluster.
 		</p><p>
-<a class="indexterm" name="id2694800"></a>
-<a class="indexterm" name="id2694807"></a>
+<a class="indexterm" name="id452604"></a>
+<a class="indexterm" name="id452611"></a>
 		One could split all IPC$ connections and RPC calls to one server to handle printing and user
 		lookup requirements. RPC printing handles are shared between different IPC4 sessions  it is
 		hard to split this across clustered servers!
 		</p><p>
 		Conceptually speaking, all other servers would then provide only file services. This is a simpler
 		problem to concentrate on.
-		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2694829"></a>Demultiplexing SMB Requests</h4></div></div></div><p>
-<a class="indexterm" name="id2694837"></a>
-<a class="indexterm" name="id2694844"></a>
-<a class="indexterm" name="id2694851"></a>
-<a class="indexterm" name="id2694858"></a>
+		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id452629"></a>Demultiplexing SMB Requests</h4></div></div></div><p>
+<a class="indexterm" name="id452637"></a>
+<a class="indexterm" name="id452644"></a>
+<a class="indexterm" name="id452650"></a>
+<a class="indexterm" name="id452657"></a>
 		De-multiplexing of SMB requests requires knowledge of SMB state information,
 		all of which must be held by the front-end <span class="emphasis"><em>virtual</em></span> server.
 		This is a perplexing and complicated problem to solve.
 		</p><p>
-<a class="indexterm" name="id2694875"></a>
-<a class="indexterm" name="id2694882"></a>
-<a class="indexterm" name="id2694889"></a>
+<a class="indexterm" name="id452673"></a>
+<a class="indexterm" name="id452679"></a>
+<a class="indexterm" name="id452686"></a>
 		Windows XP and later have changed semantics so state information (vuid, tid, fid)
 		must match for a successful operation. This makes things simpler than before and is a
 		positive step forward.
 		</p><p>
-<a class="indexterm" name="id2694902"></a>
-<a class="indexterm" name="id2694909"></a>
+<a class="indexterm" name="id452698"></a>
+<a class="indexterm" name="id452705"></a>
 		SMB requests are sent by vuid to their associated server. No code exists today to
 		effect this solution. This problem is conceptually similar to the problem of
 		correctly handling requests from multiple requests from Windows 2000
 		Terminal Server in Samba.
 		</p><p>
-<a class="indexterm" name="id2694924"></a>
+<a class="indexterm" name="id452717"></a>
 		One possibility is to start by exposing the server pool to clients directly.
 		This could eliminate the de-multiplexing step.
-		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2694935"></a>The Distributed File System Challenge</h4></div></div></div><p>
-<a class="indexterm" name="id2694944"></a>
+		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id452727"></a>The Distributed File System Challenge</h4></div></div></div><p>
+<a class="indexterm" name="id452735"></a>
 		There exists many distributed file systems for UNIX and Linux.
 		</p><p>
-<a class="indexterm" name="id2694955"></a>
-<a class="indexterm" name="id2694962"></a>
-<a class="indexterm" name="id2694969"></a>
-<a class="indexterm" name="id2694976"></a>
-<a class="indexterm" name="id2694982"></a>
-<a class="indexterm" name="id2694989"></a>
+<a class="indexterm" name="id452746"></a>
+<a class="indexterm" name="id452753"></a>
+<a class="indexterm" name="id452760"></a>
+<a class="indexterm" name="id452766"></a>
+<a class="indexterm" name="id452773"></a>
+<a class="indexterm" name="id452780"></a>
 		Many could be adopted to backend our cluster, so long as awareness of SMB
 		semantics is kept in mind (share modes, locking, and oplock issues in particular).
 		Common free distributed file systems include:
-<a class="indexterm" name="id2695000"></a>
-<a class="indexterm" name="id2695006"></a>
-<a class="indexterm" name="id2695013"></a>
-<a class="indexterm" name="id2695020"></a>
+<a class="indexterm" name="id452789"></a>
+<a class="indexterm" name="id452795"></a>
+<a class="indexterm" name="id452802"></a>
+<a class="indexterm" name="id452809"></a>
 		</p><div class="itemizedlist"><ul type="disc"><li><p>NFS</p></li><li><p>AFS</p></li><li><p>OpenGFS</p></li><li><p>Lustre</p></li></ul></div><p>
-<a class="indexterm" name="id2695051"></a>
+<a class="indexterm" name="id452840"></a>
 		The server pool (cluster) can use any distributed file system backend if all SMB
 		semantics are performed within this pool.
-		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2695062"></a>Restrictive Constraints on Distributed File Systems</h4></div></div></div><p>
-<a class="indexterm" name="id2695071"></a>
-<a class="indexterm" name="id2695078"></a>
-<a class="indexterm" name="id2695084"></a>
-<a class="indexterm" name="id2695091"></a>
+		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id452850"></a>Restrictive Constraints on Distributed File Systems</h4></div></div></div><p>
+<a class="indexterm" name="id452858"></a>
+<a class="indexterm" name="id452865"></a>
+<a class="indexterm" name="id452872"></a>
+<a class="indexterm" name="id452878"></a>
 		Where a clustered server provides purely SMB services, oplock handling
 		may be done within the server pool without imposing a need for this to
 		be passed to the backend file system pool.
 		</p><p>
-<a class="indexterm" name="id2695105"></a>
-<a class="indexterm" name="id2695111"></a>
+<a class="indexterm" name="id452890"></a>
+<a class="indexterm" name="id452897"></a>
 		On the other hand, where the server pool also provides NFS or other file services,
 		it will be essential that the implementation be oplock-aware so it can
 		interoperate with SMB services. This is a significant challenge today. A failure
@@ -163,25 +163,25 @@
 		sorely noted by users of Microsoft Windows clients.
 		</p><p>
 		Last, all state information must be shared across the server pool.
-		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2695132"></a>Server Pool Communications</h4></div></div></div><p>
-<a class="indexterm" name="id2695140"></a>
-<a class="indexterm" name="id2695147"></a>
-<a class="indexterm" name="id2695153"></a>
-<a class="indexterm" name="id2695160"></a>
+		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id452913"></a>Server Pool Communications</h4></div></div></div><p>
+<a class="indexterm" name="id452921"></a>
+<a class="indexterm" name="id452928"></a>
+<a class="indexterm" name="id452934"></a>
+<a class="indexterm" name="id452941"></a>
 		Most backend file systems support POSIX file semantics. This makes it difficult
 		to push SMB semantics back into the file system. POSIX locks have different properties
 		and semantics from SMB locks.
 		</p><p>
-<a class="indexterm" name="id2695174"></a>
-<a class="indexterm" name="id2695180"></a>
-<a class="indexterm" name="id2695187"></a>
+<a class="indexterm" name="id452953"></a>
+<a class="indexterm" name="id452960"></a>
+<a class="indexterm" name="id452966"></a>
 		All <code class="literal">smbd</code> processes in the server pool must of necessity communicate
 		very quickly. For this, the current <em class="parameter"><code>tdb</code></em> file structure that Samba
 		uses is not suitable for use across a network. Clustered <code class="literal">smbd</code>s must use something else.
-		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2695217"></a>Server Pool Communications Demands</h4></div></div></div><p>
+		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id452995"></a>Server Pool Communications Demands</h4></div></div></div><p>
 		High-speed interserver communications in the server pool is a design prerequisite
 		for a fully functional system. Possibilities for this include:
-		</p><div class="itemizedlist"><a class="indexterm" name="id2695231"></a><a class="indexterm" name="id2695238"></a><ul type="disc"><li><p>
+		</p><div class="itemizedlist"><a class="indexterm" name="id453007"></a><a class="indexterm" name="id453014"></a><ul type="disc"><li><p>
 			Proprietary shared memory bus (example: Myrinet or SCI [scalable coherent interface]).
 			These are high-cost items.
 			</p></li><li><p>
@@ -191,7 +191,7 @@
 			</p></li></ul></div><p>
 		We have yet to identify metrics for  performance demands to enable this to happen
 		effectively.
-		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2695272"></a>Required Modifications to Samba</h4></div></div></div><p>
+		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id453044"></a>Required Modifications to Samba</h4></div></div></div><p>
 		Samba needs to be significantly modified to work with a high-speed server interconnect
 		system to permit transparent failover clustering.
 		</p><p>
@@ -200,8 +200,8 @@
 			The locking database, oplock notifications,
 			and the share mode database.
 			</p></li><li><p>
-<a class="indexterm" name="id2695299"></a>
-<a class="indexterm" name="id2695306"></a>
+<a class="indexterm" name="id453069"></a>
+<a class="indexterm" name="id453076"></a>
 			Failure semantics need to be defined. Samba behaves the same way as Windows.
 			When oplock messages fail, a file open request is allowed, but this is 
 			potentially dangerous in a clustered environment. So how should interserver
@@ -209,58 +209,58 @@
 			</p></li><li><p>
 			Should this be implemented using a point-to-point lock manager, or can this
 			be done using multicast techniques?
-			</p></li></ul></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2695329"></a>A Simple Solution</h3></div></div></div><p>
-<a class="indexterm" name="id2695337"></a>
-<a class="indexterm" name="id2695344"></a>
-<a class="indexterm" name="id2695351"></a>
+			</p></li></ul></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id453095"></a>A Simple Solution</h3></div></div></div><p>
+<a class="indexterm" name="id453103"></a>
+<a class="indexterm" name="id453110"></a>
+<a class="indexterm" name="id453116"></a>
 	Allowing failover servers to handle different functions within the exported file system
 	removes the problem of requiring a distributed locking protocol.
 	</p><p>
-<a class="indexterm" name="id2695364"></a>
-<a class="indexterm" name="id2695371"></a>
+<a class="indexterm" name="id453128"></a>
+<a class="indexterm" name="id453135"></a>
 	If only one server is active in a pair, the need for high-speed server interconnect is avoided.
 	This allows the use of existing high-availability solutions, instead of inventing a new one.
 	This simpler solution comes at a price  the cost of which is the need to manage a more
 	complex file name space. Since there is now not a single file system, administrators
 	must remember where all services are located  a complexity not easily dealt with.
 	</p><p>
-<a class="indexterm" name="id2695395"></a>
+<a class="indexterm" name="id453154"></a>
 	The <span class="emphasis"><em>virtual server</em></span> is still needed to redirect requests to backend
 	servers. Backend file space integrity is the responsibility of the administrator.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2695410"></a>High-Availability Server Products</h3></div></div></div><p>
-<a class="indexterm" name="id2695418"></a>
-<a class="indexterm" name="id2695425"></a>
-<a class="indexterm" name="id2695432"></a>
-<a class="indexterm" name="id2695439"></a>
-<a class="indexterm" name="id2695445"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id453168"></a>High-Availability Server Products</h3></div></div></div><p>
+<a class="indexterm" name="id453176"></a>
+<a class="indexterm" name="id453182"></a>
+<a class="indexterm" name="id453189"></a>
+<a class="indexterm" name="id453196"></a>
+<a class="indexterm" name="id453203"></a>
 	Failover servers must communicate in order to handle resource failover. This is essential
 	for high-availability services. The use of a dedicated heartbeat is a common technique to
 	introduce some intelligence into the failover process. This is often done over a dedicated
 	link (LAN or serial).
 	</p><p>
-<a class="indexterm" name="id2695461"></a>
-<a class="indexterm" name="id2695467"></a>
-<a class="indexterm" name="id2695474"></a>
-<a class="indexterm" name="id2695481"></a>
-<a class="indexterm" name="id2695488"></a>
+<a class="indexterm" name="id453215"></a>
+<a class="indexterm" name="id453222"></a>
+<a class="indexterm" name="id453229"></a>
+<a class="indexterm" name="id453236"></a>
+<a class="indexterm" name="id453243"></a>
 	Many failover solutions (like Red Hat Cluster Manager and Microsoft Wolfpack)
 	can use a shared SCSI of Fiber Channel disk storage array for failover communication.
 	Information regarding Red Hat high availability solutions for Samba may be obtained from
 	<a class="ulink" href="http://www.redhat.com/docs/manuals/enterprise/RHEL-AS-2.1-Manual/cluster-manager/s1-service-samba.html" target="_top">www.redhat.com</a>.
 	</p><p>
-<a class="indexterm" name="id2695510"></a>
+<a class="indexterm" name="id453261"></a>
 	The Linux High Availability project is a resource worthy of consultation if your desire is
 	to build a highly available Samba file server solution. Please consult the home page at
 	<a class="ulink" href="http://www.linux-ha.org/" target="_top">www.linux-ha.org/</a>.
 	</p><p>
-<a class="indexterm" name="id2695530"></a>
-<a class="indexterm" name="id2695537"></a>
+<a class="indexterm" name="id453279"></a>
+<a class="indexterm" name="id453286"></a>
 	Front-end server complexity remains a challenge for high availability because it must deal
 	gracefully with backend failures, while at the same time providing continuity of service
 	to all network clients.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2695550"></a>MS-DFS: The Poor Man's Cluster</h3></div></div></div><p>
-<a class="indexterm" name="id2695558"></a>
-<a class="indexterm" name="id2695565"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id453296"></a>MS-DFS: The Poor Man's Cluster</h3></div></div></div><p>
+<a class="indexterm" name="id453304"></a>
+<a class="indexterm" name="id453311"></a>
 	MS-DFS links can be used to redirect clients to disparate backend servers. This pushes
 	complexity back to the network client, something already included by Microsoft.
 	MS-DFS creates the illusion of a simple, continuous file system name space that works even
@@ -268,4 +268,4 @@
 	</p><p>
 	Above all, at the cost of complexity of management, a distributed system (pseudo-cluster) can
 	be created using existing Samba functionality.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2695587"></a>Conclusions</h3></div></div></div><div class="itemizedlist"><ul type="disc"><li><p>Transparent SMB clustering is hard to do!</p></li><li><p>Client failover is the best we can do today.</p></li><li><p>Much more work is needed before a practical and manageable high-availability transparent cluster solution will be possible.</p></li><li><p>MS-DFS can be used to create the illusion of a single transparent cluster.</p></li></ul></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="Backup.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="optional.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="largefile.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 31. Backup Techniques </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 33. Handling Large Directories</td></tr></table></div></body></html>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id453329"></a>Conclusions</h3></div></div></div><div class="itemizedlist"><ul type="disc"><li><p>Transparent SMB clustering is hard to do!</p></li><li><p>Client failover is the best we can do today.</p></li><li><p>Much more work is needed before a practical and manageable high-availability transparent cluster solution will be possible.</p></li><li><p>MS-DFS can be used to create the illusion of a single transparent cluster.</p></li></ul></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="Backup.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="optional.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="largefile.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 31. Backup Techniques </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 33. Handling Large Directories</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ServerType.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ServerType.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ServerType.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,6 +1,6 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 3. Server Types and Security Modes</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="type.html" title="Part II. Server Configuration Basics"><link rel="prev" href="type.html" title="Part II. Server Configuration Basics"><link rel="next" href="samba-pdc.html" title="Chapter 4. Domain Control"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 3. Server Types and Security Modes</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="type.html">Prev</a> </td><th width="60%" align="center">Part II. Server Configuration Basics</th><td width="20%" align="right"> <a accesskey="n" href="samba-pdc.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="ServerType"></a>Chapter 3. Server Types and Security Modes</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Andrew</span> <span class="surname">Tridgell</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:tridge at samba.org">tridge at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ServerType.html#id2580765">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="ServerType.html#id2580932">Server Types</a></span></dt><dt><span class="sect1"><a href="ServerType.html#id2581092">Samba Security Modes</a></span></dt><dd><dl><dt><span class="sect2"><a href="ServerType.html#id2581256">User Level Security</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id2581430">Share-Level Security</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id2581638">Domain Security Mode (User-Level Security)</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id2582161">ADS Security Mode (User-Level Security)</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id2582318">Server Security (User Level Security)</a></span></dt></dl></dd><dt><span class="sect1"><a href="ServerType.html#id2582616">Password Checking</a></span></dt><dt><span class="sect1"><a href="ServerType.html#id2582821">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="ServerType.html#id2582844">What Makes Samba a Server?</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id2582881">What Makes Samba a Domain Controller?</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id2582924">What Makes Samba a Domain Member?</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id2582956">Constantly Losing Connections to Password Server</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id2583013">Stand-alone Server is converted to Domain Controller  Now User accounts don't work</a></span></dt></dl></dd></dl></div><p>
-<a class="indexterm" name="id2580724"></a>
-<a class="indexterm" name="id2580731"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 3. Server Types and Security Modes</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="type.html" title="Part II. Server Configuration Basics"><link rel="prev" href="type.html" title="Part II. Server Configuration Basics"><link rel="next" href="samba-pdc.html" title="Chapter 4. Domain Control"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 3. Server Types and Security Modes</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="type.html">Prev</a> </td><th width="60%" align="center">Part II. Server Configuration Basics</th><td width="20%" align="right"> <a accesskey="n" href="samba-pdc.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="ServerType"></a>Chapter 3. Server Types and Security Modes</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Andrew</span> <span class="surname">Tridgell</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:tridge at samba.org">tridge at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ServerType.html#id348242">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="ServerType.html#id348385">Server Types</a></span></dt><dt><span class="sect1"><a href="ServerType.html#id348521">Samba Security Modes</a></span></dt><dd><dl><dt><span class="sect2"><a href="ServerType.html#id348658">User Level Security</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id348806">Share-Level Security</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id348971">Domain Security Mode (User-Level Security)</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id349419">ADS Security Mode (User-Level Security)</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id349552">Server Security (User Level Security)</a></span></dt></dl></dd><dt><span class="sect1"><a href="ServerType.html#id349792">Password Checking</a></span></dt><dt><span class="sect1"><a href="ServerType.html#id349947">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="ServerType.html#id349965">What Makes Samba a Server?</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id349993">What Makes Samba a Domain Controller?</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id350027">What Makes Samba a Domain Member?</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id350051">Constantly Losing Connections to Password Server</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id350090">Stand-alone Server is converted to Domain Controller  Now User accounts don't work</a></span></dt></dl></dd></dl></div><p>
+<a class="indexterm" name="id348211"></a>
+<a class="indexterm" name="id348217"></a>
 This chapter provides information regarding the types of server that Samba may be configured to be. A
 Microsoft network administrator who wishes to migrate to or use Samba will want to know the meaning, within a
 Samba context, of terms familiar to the MS Windows administrator. This means that it is essential also to
@@ -14,7 +14,7 @@
 highlights features and benefits. We hope that the information provided will help to answer this question. Be
 warned though, we want to be fair and reasonable, so not all features are positive toward Samba. The benefit
 may be on the side of our competition.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2580765"></a>Features and Benefits</h2></div></div></div><p>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id348242"></a>Features and Benefits</h2></div></div></div><p>
 Two men were walking down a dusty road, when one suddenly kicked up a small red stone. It
 hurt his toe and lodged in his sandal. He took the stone out and cursed it with a passion
 and fury befitting his anguish. The other looked at the stone and said, &#8220;<span class="quote">This is a garnet.
@@ -25,8 +25,8 @@
 pleasure, but if you are forced to use it and have no time for its secrets, then it can be
 a source of discomfort.
 </p><p>
-<a class="indexterm" name="id2580794"></a>
-<a class="indexterm" name="id2580803"></a>
+<a class="indexterm" name="id348264"></a>
+<a class="indexterm" name="id348273"></a>
 Samba started out as a project that sought to provide interoperability for MS Windows 3.x
 clients with a UNIX server. It has grown up a lot since its humble beginnings and now provides
 features and functionality fit for large-scale deployment. It also has some warts. In sections
@@ -34,41 +34,41 @@
 </p><p>
 So, what are the benefits of the features mentioned in this chapter?
 </p><div class="itemizedlist"><ul type="disc"><li><p>
-	<a class="indexterm" name="id2580826"></a>
+	<a class="indexterm" name="id348292"></a>
 	Samba-3 can replace an MS Windows NT4 domain controller.
 	</p></li><li><p>
-	<a class="indexterm" name="id2580841"></a>
+	<a class="indexterm" name="id348305"></a>
 	Samba-3 offers excellent interoperability with MS Windows NT4-style
 	domains as well as natively with Microsoft Active Directory domains.
 	</p></li><li><p>
-	<a class="indexterm" name="id2580855"></a>
+	<a class="indexterm" name="id348317"></a>
 	Samba-3 permits full NT4-style interdomain trusts.
 	</p></li><li><p>
-	<a class="indexterm" name="id2580869"></a>
-	<a class="indexterm" name="id2580876"></a>
+	<a class="indexterm" name="id348330"></a>
+	<a class="indexterm" name="id348336"></a>
 	Samba has security modes that permit more flexible authentication
 	than is possible with MS Windows NT4 domain controllers.
 	</p></li><li><p>
-	<a class="indexterm" name="id2580892"></a>
-	<a class="indexterm" name="id2580904"></a>
+	<a class="indexterm" name="id348350"></a>
+	<a class="indexterm" name="id348361"></a>
 	Samba-3 permits use of multiple concurrent account database backends.
 	(Encrypted passwords that are stored in the account database are in
 	formats that are unique to Windows networking).
 	</p></li><li><p>
-	<a class="indexterm" name="id2580918"></a>
+	<a class="indexterm" name="id348373"></a>
 	The account database backends can be distributed
 	and replicated using multiple methods. This gives Samba-3
 	greater flexibility than MS Windows NT4 and in many cases a
 	significantly higher utility than Active Directory domains
 	with MS Windows 200x.
-	</p></li></ul></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2580932"></a>Server Types</h2></div></div></div><p>
-<a class="indexterm" name="id2580940"></a>
+	</p></li></ul></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id348385"></a>Server Types</h2></div></div></div><p>
+<a class="indexterm" name="id348392"></a>
 Administrators of Microsoft networks often refer to three different types of servers:
 </p><div class="itemizedlist"><ul type="disc"><li><p>Domain Controller</p><div class="itemizedlist"><ul type="circle"><li><p>Primary Domain Controller (PDC)</p></li><li><p>Backup Domain Controller (BDC)</p></li><li><p>ADS Domain Controller</p></li></ul></div></li><li><p>Domain Member Server</p><div class="itemizedlist"><ul type="circle"><li><p>Active Directory Domain Server</p></li><li><p>NT4 Style Domain Domain Server</p></li></ul></div></li><li><p>Standalone Server</p></li></ul></div><p>
-<a class="indexterm" name="id2581002"></a>
-<a class="indexterm" name="id2581011"></a>
-<a class="indexterm" name="id2581021"></a>
-<a class="indexterm" name="id2581030"></a>
+<a class="indexterm" name="id348448"></a>
+<a class="indexterm" name="id348457"></a>
+<a class="indexterm" name="id348465"></a>
+<a class="indexterm" name="id348473"></a>
 The chapters covering domain control (<a class="link" href="samba-pdc.html" title="Chapter 4. Domain Control">Domain Control</a>), 
 backup domain control (<a class="link" href="samba-bdc.html" title="Chapter 5. Backup Domain Control">Backup Domain Control</a>), and 
 domain membership (<a class="link" href="domain-member.html" title="Chapter 6. Domain Membership">Domain Membership</a>) provide
@@ -76,27 +76,27 @@
 You are strongly encouraged to become intimately familiar with these chapters because
 they lay the foundation for deployment of Samba domain security.
 </p><p>
-<a class="indexterm" name="id2581069"></a>
+<a class="indexterm" name="id348503"></a>
 A Standalone server is autonomous in respect of the source of its account backend.
 Refer to <a class="link" href="StandAloneServer.html" title="Chapter 7. Standalone Servers">Standalone Servers</a> to gain a wider appreciation
 of what is meant by a server being configured as a <span class="emphasis"><em>standalone</em></span> server.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2581092"></a>Samba Security Modes</h2></div></div></div><p>
-<a class="indexterm" name="id2581100"></a>
-<a class="indexterm" name="id2581107"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id348521"></a>Samba Security Modes</h2></div></div></div><p>
+<a class="indexterm" name="id348529"></a>
+<a class="indexterm" name="id348535"></a>
 In this section, the function and purpose of Samba's security modes are described. An accurate understanding of
 how Samba implements each security mode as well as how to configure MS Windows clients for each mode will
 significantly reduce user complaints and administrator heartache.
 </p><p>
-<a class="indexterm" name="id2581122"></a>
-<a class="indexterm" name="id2581131"></a>
+<a class="indexterm" name="id348547"></a>
+<a class="indexterm" name="id348555"></a>
 Microsoft Windows networking uses a protocol that was originally called the Server Message Block (SMB)
 protocol. Since some time around 1996 the protocol has been better known as the Common Internet Filesystem
 (CIFS) protocol.
 </p><p>
-<a class="indexterm" name="id2581148"></a>
-<a class="indexterm" name="id2581155"></a>
-<a class="indexterm" name="id2581162"></a>
-<a class="indexterm" name="id2581169"></a>
+<a class="indexterm" name="id348569"></a>
+<a class="indexterm" name="id348575"></a>
+<a class="indexterm" name="id348582"></a>
+<a class="indexterm" name="id348588"></a>
 In the SMB/CIFS networking world, there are only two types of security: <span class="emphasis"><em>user-level</em></span> and
 <span class="emphasis"><em>share level</em></span>. We refer to these collectively as <span class="emphasis"><em>security levels</em></span>.  In
 implementing these two security levels, Samba provides flexibilities that are not available with MS Windows
@@ -116,43 +116,43 @@
 The term <code class="literal">client</code> refers to all agents whether it is a Windows workstation, a Windows server,
 another Samba server, or any vanilla SMB or CIFS client application (e.g., <code class="literal">smbclient</code>) that
 make use of services provided by an SMB/CIFS server.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2581256"></a>User Level Security</h3></div></div></div><p>
-<a class="indexterm" name="id2581264"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id348658"></a>User Level Security</h3></div></div></div><p>
+<a class="indexterm" name="id348666"></a>
 We describe user-level security first because its simpler.  In user-level security, the client sends a session
 setup request directly following protocol negotiation.  This request provides a username and password. The
 server can either accept or reject that username/password combination. At this stage the server has no idea
 what share the client will eventually try to connect to, so it can't base the
 <span class="emphasis"><em>accept/reject</em></span> on anything other than:
 </p><div class="orderedlist"><ol type="1"><li><p>the username/password.</p></li><li><p>the name of the client machine.</p></li></ol></div><p>
-<a class="indexterm" name="id2581302"></a>
+<a class="indexterm" name="id348697"></a>
 If the server accepts the username/password credentials, the client expects to be able to mount shares (using
 a <span class="emphasis"><em>tree connection</em></span>) without further specifying a password. It expects that all access
 rights will be as the username/password credentials set that was specified in the initial <span class="emphasis"><em>session
 setup</em></span>.
 </p><p>
-<a class="indexterm" name="id2581324"></a>
+<a class="indexterm" name="id348716"></a>
 It is also possible for a client to send multiple <span class="emphasis"><em>session setup</em></span>
 requests. When the server responds, it gives the client a <span class="emphasis"><em>uid</em></span> to use
 as an authentication tag for that username/password. The client can maintain multiple
 authentication contexts in this way (WinDD is an example of an application that does this).
 </p><p>
-<a class="indexterm" name="id2581347"></a>
-<a class="indexterm" name="id2581354"></a>
-<a class="indexterm" name="id2581361"></a>
-<a class="indexterm" name="id2581368"></a>
-<a class="indexterm" name="id2581374"></a>
+<a class="indexterm" name="id348734"></a>
+<a class="indexterm" name="id348740"></a>
+<a class="indexterm" name="id348747"></a>
+<a class="indexterm" name="id348753"></a>
+<a class="indexterm" name="id348759"></a>
 Windows networking user account names are case-insensitive, meaning that upper-case and lower-case characters
 in the account name are considered equivalent. They are said to be case-preserving, but not case significant.
 Windows and LanManager systems previous to Windows NT version 3.10 have case-insensitive passwords that were
 not necessarilty case-preserving. All Windows NT family systems treat passwords as case-preserving and
 case-sensitive.
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2581390"></a>Example Configuration</h4></div></div></div><p>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id348770"></a>Example Configuration</h4></div></div></div><p>
 The <code class="filename">smb.conf</code> parameter that sets user-level security is:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2581412"></a><em class="parameter"><code>security = user</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id348790"></a><em class="parameter"><code>security = user</code></em></td></tr></table><p>
 This is the default setting since Samba-2.2.x.
-</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2581430"></a>Share-Level Security</h3></div></div></div><p>
-<a class="indexterm" name="id2581438"></a>
-<a class="indexterm" name="id2581445"></a>
+</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id348806"></a>Share-Level Security</h3></div></div></div><p>
+<a class="indexterm" name="id348814"></a>
+<a class="indexterm" name="id348820"></a>
 In share-level security, the client authenticates itself separately for each share. It sends a password along
 with each tree connection request (share mount), but it does not explicitly send a username with this
 operation. The client expects a password to be associated with each share, independent of the user. This means
@@ -171,9 +171,9 @@
 The password is then checked in turn against these possible usernames. If a match is found, then the client is
 authenticated as that user.
 </p><p>
-<a class="indexterm" name="id2581516"></a>
-<a class="indexterm" name="id2581525"></a>
-<a class="indexterm" name="id2581532"></a>
+<a class="indexterm" name="id348866"></a>
+<a class="indexterm" name="id348875"></a>
+<a class="indexterm" name="id348881"></a>
 Where the list of possible user names is not provided, Samba makes a UNIX system call to find the user
 account that has a password that matches the one provided from the standard account database. On a system that
 has no name service switch (NSS) facility, such lookups will be from the <code class="filename">/etc/passwd</code>
@@ -184,21 +184,21 @@
 shadow: files nis ldap
 group: files nis ldap
 </pre><p>
-<a class="indexterm" name="id2581565"></a>
-<a class="indexterm" name="id2581572"></a>
-<a class="indexterm" name="id2581579"></a>
+<a class="indexterm" name="id348908"></a>
+<a class="indexterm" name="id348914"></a>
+<a class="indexterm" name="id348920"></a>
 In the example shown here (not likely to be used in practice) the lookup will check
 <code class="filename">/etc/passwd</code> and <code class="filename">/etc/group</code>, if not found it will check NIS, then
 LDAP.
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2581601"></a>Example Configuration</h4></div></div></div><p>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id348939"></a>Example Configuration</h4></div></div></div><p>
 The <code class="filename">smb.conf</code> parameter that sets share-level security is:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2581624"></a><em class="parameter"><code>security = share</code></em></td></tr></table></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2581638"></a>Domain Security Mode (User-Level Security)</h3></div></div></div><p>
-<a class="indexterm" name="id2581645"></a>
-<a class="indexterm" name="id2581654"></a>
-<a class="indexterm" name="id2581663"></a>
-<a class="indexterm" name="id2581670"></a>
-<a class="indexterm" name="id2581676"></a>
-<a class="indexterm" name="id2581683"></a>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id348959"></a><em class="parameter"><code>security = share</code></em></td></tr></table></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id348971"></a>Domain Security Mode (User-Level Security)</h3></div></div></div><p>
+<a class="indexterm" name="id348979"></a>
+<a class="indexterm" name="id348987"></a>
+<a class="indexterm" name="id348996"></a>
+<a class="indexterm" name="id349002"></a>
+<a class="indexterm" name="id349008"></a>
+<a class="indexterm" name="id349014"></a>
 Domain security provides a mechanism for storing all user and group accounts in a central, shared, account
 repository. The centralized account repository is shared between domain (security) controllers. Servers that
 act as domain controllers provide authentication and validation services to all machines that participate in
@@ -207,21 +207,21 @@
 logon and authentication services. Usually, BDCs will answer network logon requests more responsively than
 will a PDC.
 </p><p>
-<a class="indexterm" name="id2581705"></a>
-<a class="indexterm" name="id2581712"></a>
-<a class="indexterm" name="id2581718"></a>
-<a class="indexterm" name="id2581728"></a>
-<a class="indexterm" name="id2581737"></a>
+<a class="indexterm" name="id349030"></a>
+<a class="indexterm" name="id349036"></a>
+<a class="indexterm" name="id349042"></a>
+<a class="indexterm" name="id349051"></a>
+<a class="indexterm" name="id349059"></a>
 When Samba is operating in <a class="link" href="smb.conf.5.html#SECURITY">security = domain</a> mode, the Samba server has a
 domain security trust account (a machine account) and causes all authentication requests to be passed through
 to the domain controllers.  In other words, this configuration makes the Samba server a domain member server,
 even when it is in fact acting as a domain controller. All machines that participate in domain security must
 have a machine account in the security database.
 </p><p>
-<a class="indexterm" name="id2581770"></a>
-<a class="indexterm" name="id2581778"></a>
-<a class="indexterm" name="id2581787"></a>
-<a class="indexterm" name="id2581797"></a>
+<a class="indexterm" name="id349081"></a>
+<a class="indexterm" name="id349090"></a>
+<a class="indexterm" name="id349098"></a>
+<a class="indexterm" name="id349107"></a>
 Within the domain security environment, the underlying security architecture uses user-level security. Even
 machines that are domain members must authenticate on startup. The machine account consists of an account
 entry in the accounts database, the name of which is the NetBIOS name of the machine and of which the password
@@ -231,30 +231,30 @@
 </p><p>
 There are three possible domain member configurations:
 </p><div class="orderedlist"><ol type="1"><li><p>Primary domain controller (PDC) - of which there is one per domain.</p></li><li><p>Backup domain controller (BDC) - of which there can be any number per domain.</p></li><li><p>Domain member server (DMS) - of which there can be any number per domain.</p></li></ol></div><p>
-<a class="indexterm" name="id2581846"></a>
+<a class="indexterm" name="id349148"></a>
 We will discuss each of these in separate chapters. For now, we are most interested in basic DMS
 configuration.
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2581855"></a>Example Configuration</h4></div></div></div><p><span class="emphasis"><em>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id349156"></a>Example Configuration</h4></div></div></div><p><span class="emphasis"><em>
 Samba as a Domain Member Server
 </em></span></p><p>
-<a class="indexterm" name="id2581868"></a>
+<a class="indexterm" name="id349168"></a>
 This method involves addition of the following parameters in the <code class="filename">smb.conf</code> file:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2581890"></a><em class="parameter"><code>security = domain</code></em></td></tr><tr><td><a class="indexterm" name="id2581901"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id349187"></a><em class="parameter"><code>security = domain</code></em></td></tr><tr><td><a class="indexterm" name="id349198"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr></table><p>
 </p><p>
 In order for this method to work, the Samba server needs to join the MS Windows NT
 security domain. This is done as follows:
-<a class="indexterm" name="id2581919"></a>
-<a class="indexterm" name="id2581927"></a>
+<a class="indexterm" name="id349212"></a>
+<a class="indexterm" name="id349221"></a>
 </p><div class="procedure"><ol type="1"><li><p>On the MS Windows NT domain controller, using
         the Server Manager, add a machine account for the Samba server.
         </p></li><li><p>On the UNIX/Linux system execute:</p><pre class="screen"><code class="prompt">root# </code><strong class="userinput"><code>net rpc join -U administrator%password</code></strong></pre></li></ol></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2581977"></a>
+<a class="indexterm" name="id349265"></a>
 Samba-2.2.4 and later Samba 2.2.x series releases can autojoin a Windows NT4-style domain just by executing:
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>smbpasswd -j <em class="replaceable"><code>DOMAIN_NAME</code></em> -r <em class="replaceable"><code>PDC_NAME</code></em> \
 	 -U Administrator%<em class="replaceable"><code>password</code></em></code></strong>
 </pre><p>
-<a class="indexterm" name="id2582012"></a>
+<a class="indexterm" name="id349295"></a>
 Samba-3 can do the same by executing:
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>net rpc join -U Administrator%<em class="replaceable"><code>password</code></em></code></strong>
@@ -262,26 +262,26 @@
 It is not necessary with Samba-3 to specify the <em class="replaceable"><code>DOMAIN_NAME</code></em> or the
 <em class="replaceable"><code>PDC_NAME</code></em>, as it figures this out from the <code class="filename">smb.conf</code> file settings.
 </p></div><p>
-<a class="indexterm" name="id2582061"></a>
-<a class="indexterm" name="id2582068"></a>
-<a class="indexterm" name="id2582075"></a>
+<a class="indexterm" name="id349337"></a>
+<a class="indexterm" name="id349344"></a>
+<a class="indexterm" name="id349350"></a>
 Use of this mode of authentication requires there to be a standard UNIX account for each user in order to
 assign a UID once the account has been authenticated by the Windows domain controller. This account can be
 blocked to prevent logons by clients other than MS Windows through means such as setting an invalid shell in
 the <code class="filename">/etc/passwd</code> entry. The best way to allocate an invalid shell to a user account is to
 set the shell to the file <code class="filename">/bin/false</code>.
 </p><p>
-<a class="indexterm" name="id2582104"></a>
-<a class="indexterm" name="id2582110"></a>
+<a class="indexterm" name="id349373"></a>
+<a class="indexterm" name="id349380"></a>
 Domain controllers can be located anywhere that is convenient. The best advice is to have a BDC on every
 physical network segment, and if the PDC is on a remote network segment the use of WINS (see <a class="link" href="NetworkBrowsing.html" title="Chapter 10. Network Browsing">Network Browsing</a> for more information) is almost essential.
 </p><p>
 An alternative to assigning UIDs to Windows users on a Samba member server is presented in <a class="link" href="winbind.html" title="Chapter 24. Winbind: Use of Domain Accounts">Winbind</a>, <a class="link" href="winbind.html" title="Chapter 24. Winbind: Use of Domain Accounts">Winbind: Use of Domain Accounts</a>.
 </p><p>
 For more information regarding domain membership, <a class="link" href="domain-member.html" title="Chapter 6. Domain Membership">Domain Membership</a>.
-</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2582161"></a>ADS Security Mode (User-Level Security)</h3></div></div></div><p>
-<a class="indexterm" name="id2582169"></a>
-<a class="indexterm" name="id2582176"></a>
+</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id349419"></a>ADS Security Mode (User-Level Security)</h3></div></div></div><p>
+<a class="indexterm" name="id349426"></a>
+<a class="indexterm" name="id349433"></a>
 Both Samba-2.2, and Samba-3 can join an Active Directory domain using NT4 style RPC based security.  This is
 possible if the domain is run in native mode. Active Directory in native mode perfectly allows NT4-style
 domain members. This is contrary to popular belief.
@@ -292,24 +292,24 @@
 domain, would still require NT-compatible authentication data. Samba in AD-member mode can accept Kerberos
 tickets.
 </p><p>
-<a class="indexterm" name="id2582201"></a>
-<a class="indexterm" name="id2582208"></a>
+<a class="indexterm" name="id349452"></a>
+<a class="indexterm" name="id349458"></a>
 Sites that use Microsoft Windows active directory services (ADS) should be aware of the significance of the
 terms: <code class="literal">native mode</code> and <code class="literal">mixed mode</code> ADS operation. The term
 <code class="literal">realm</code> is used to describe a Kerberos-based security architecture (such as is used by
 Microsoft ADS).
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2582238"></a>Example Configuration</h4></div></div></div><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2582250"></a><em class="parameter"><code>realm = your.kerberos.REALM</code></em></td></tr><tr><td><a class="indexterm" name="id2582262"></a><em class="parameter"><code>security = ADS</code></em></td></tr></table><p>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id349483"></a>Example Configuration</h4></div></div></div><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id349494"></a><em class="parameter"><code>realm = your.kerberos.REALM</code></em></td></tr><tr><td><a class="indexterm" name="id349505"></a><em class="parameter"><code>security = ADS</code></em></td></tr></table><p>
 The following parameter may be required:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2582284"></a><em class="parameter"><code>password server = your.kerberos.server</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id349525"></a><em class="parameter"><code>password server = your.kerberos.server</code></em></td></tr></table><p>
 Please refer to <a class="link" href="domain-member.html" title="Chapter 6. Domain Membership">Domain Membership</a>, and <a class="link" href="domain-member.html#ads-member" title="Samba ADS Domain Membership">Samba
 ADS Domain Membership</a> for more information regarding this configuration option.
-</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2582318"></a>Server Security (User Level Security)</h3></div></div></div><p>
+</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id349552"></a>Server Security (User Level Security)</h3></div></div></div><p>
 Server security mode is left over from the time when Samba was not capable of acting
 as a domain member server. It is highly recommended not to use this feature. Server
 security mode has many drawbacks that include:
 </p><div class="itemizedlist"><ul type="disc"><li><p>Potential account lockout on MS Windows NT4/200x password servers.</p></li><li><p>Lack of assurance that the password server is the one specified.</p></li><li><p>Does not work with Winbind, which is particularly needed when storing profiles remotely.</p></li><li><p>This mode may open connections to the password server and keep them open for extended periods.</p></li><li><p>Security on the Samba server breaks badly when the remote password server suddenly shuts down.</p></li><li><p>With this mode there is NO security account in the domain that the password server belongs to for the Samba server.</p></li></ul></div><p>
-<a class="indexterm" name="id2582372"></a>
-<a class="indexterm" name="id2582378"></a>
+<a class="indexterm" name="id349598"></a>
+<a class="indexterm" name="id349604"></a>
 In server security mode the Samba server reports to the client that it is in user-level security. The client
 then does a session setup as described earlier.  The Samba server takes the username/password that the client
 sends and attempts to log into the <a class="link" href="smb.conf.5.html#PASSWORDSERVER">password server</a> by sending exactly the same
@@ -317,8 +317,8 @@
 password, then Samba accepts the client's connection. This parameter allows the Samba server to use another
 SMB server as the <a class="link" href="smb.conf.5.html#PASSWORDSERVER">password server</a>.
 </p><p>
-<a class="indexterm" name="id2582421"></a>
-<a class="indexterm" name="id2582428"></a>
+<a class="indexterm" name="id349633"></a>
+<a class="indexterm" name="id349639"></a>
 You should also note that at the start of all this, when the server tells the client
 what security level it is in, it also tells the client if it supports encryption. If it
 does, it supplies the client with a random cryptkey. The client will then send all
@@ -330,24 +330,24 @@
 the real authentication server.  The real authentication server can be another Samba server, or it can be a
 Windows NT server, the latter being natively capable of encrypted password support.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2582481"></a>
-<a class="indexterm" name="id2582488"></a>
+<a class="indexterm" name="id349677"></a>
+<a class="indexterm" name="id349683"></a>
 When Samba is running in <span class="emphasis"><em>server security mode</em></span>, it is essential that the parameter
 <span class="emphasis"><em>password server</em></span> is set to the precise NetBIOS machine name of the target authentication
 server. Samba cannot determine this from NetBIOS name lookups because the choice of the target authentication
 server is arbitrary and cannot be determined from a domain name. In essence, a Samba server that is in
 <span class="emphasis"><em>server security mode</em></span> is operating in what used to be known as workgroup mode.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2582513"></a>Example Configuration</h4></div></div></div><p><span class="emphasis"><em>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id349704"></a>Example Configuration</h4></div></div></div><p><span class="emphasis"><em>
 Using MS Windows NT as an Authentication Server
 </em></span></p><p>
 This method involves the additions of the following parameters in the <code class="filename">smb.conf</code> file:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2582541"></a><em class="parameter"><code>encrypt passwords = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2582553"></a><em class="parameter"><code>security = server</code></em></td></tr><tr><td><a class="indexterm" name="id2582564"></a><em class="parameter"><code>password server = "NetBIOS_name_of_a_DC"</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id349728"></a><em class="parameter"><code>encrypt passwords = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id349739"></a><em class="parameter"><code>security = server</code></em></td></tr><tr><td><a class="indexterm" name="id349749"></a><em class="parameter"><code>password server = "NetBIOS_name_of_a_DC"</code></em></td></tr></table><p>
 There are two ways of identifying whether or not a username and password pair is valid.
 One uses the reply information provided as part of the authentication messaging
 process, the other uses just an error code.
 </p><p>
-<a class="indexterm" name="id2582586"></a>
-<a class="indexterm" name="id2582592"></a>
+<a class="indexterm" name="id349767"></a>
+<a class="indexterm" name="id349773"></a>
 The downside of this mode of configuration is that for security reasons Samba
 will send the password server a bogus username and a bogus password, and if the remote
 server fails to reject the bogus username and password pair, then an alternative mode of
@@ -356,15 +356,15 @@
 </p><p>
 Use of this mode of authentication requires a standard UNIX account for the user.
 This account can be blocked to prevent logons by non-SMB/CIFS clients.
-</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2582616"></a>Password Checking</h2></div></div></div><p>
+</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id349792"></a>Password Checking</h2></div></div></div><p>
 MS Windows clients may use encrypted passwords as part of a challenge/response
 authentication model (a.k.a. NTLMv1 and NTLMv2) or alone, or clear-text strings for simple
 password-based authentication. It should be realized that with the SMB protocol,
 the password is passed over the network either in plaintext or encrypted, but
 not both in the same authentication request.
 </p><p>
-<a class="indexterm" name="id2582634"></a>
-<a class="indexterm" name="id2582641"></a>
+<a class="indexterm" name="id349806"></a>
+<a class="indexterm" name="id349812"></a>
 When encrypted passwords are used, a password that has been entered by the user
 is encrypted in two ways:
 </p><div class="itemizedlist"><ul type="disc"><li><p>An MD4 hash of the unicode of the password
@@ -375,12 +375,12 @@
         form two 56-bit DES keys to encrypt a "magic" 8-byte value.
         The resulting 16 bytes form the LanMan hash.
         </p></li></ul></div><p>
-<a class="indexterm" name="id2582671"></a>
+<a class="indexterm" name="id349838"></a>
 MS Windows 95 pre-service pack 1 and MS Windows NT versions 3.x and version 4.0 pre-service pack 3 will use
 either mode of password authentication. All versions of MS Windows that follow these versions no longer
 support plain-text passwords by default.
 </p><p>
-<a class="indexterm" name="id2582688"></a>
+<a class="indexterm" name="id349852"></a>
 MS Windows clients have a habit of dropping network mappings that have been idle
 for 10 minutes or longer. When the user attempts to use the mapped drive
 connection that has been dropped, the client re-establishes the connection using
@@ -396,13 +396,13 @@
 The following parameters can be used to work around the issue of Windows 9x/Me clients
 uppercasing usernames and passwords before transmitting them to the SMB server
 when using clear-text authentication:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2582729"></a></td></tr><tr><td><a class="indexterm" name="id2582736"></a></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id349883"></a></td></tr><tr><td><a class="indexterm" name="id349890"></a></td></tr></table><p>
 By default Samba will convert to lowercase the username before attempting to lookup the user
 in the database of local system accounts. Because UNIX usernames conventionally
 only contain lowercase characters, the <a class="link" href="smb.conf.5.html#USERNAME-LEVEL">username-level</a> parameter
 is rarely needed.
 </p><p>
-<a class="indexterm" name="id2582766"></a>
+<a class="indexterm" name="id349910"></a>
 However, passwords on UNIX systems often make use of mixed-case characters.  This means that in order for a
 user on a Windows 9x/Me client to connect to a Samba server using clear-text authentication, the
 <a class="link" href="smb.conf.5.html#PASSWORDLEVEL">password level</a> must be set to the maximum number of uppercase letters that
@@ -414,7 +414,7 @@
 The best option to adopt is to enable support for encrypted passwords wherever
 Samba is used. Most attempts to apply the registry change to re-enable plaintext
 passwords will eventually lead to user complaints and unhappiness.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2582821"></a>Common Errors</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id349947"></a>Common Errors</h2></div></div></div><p>
 We all make mistakes. It is okay to make mistakes, as long as they are made in the right places
 and at the right time. A mistake that causes lost productivity is seldom tolerated; however, a mistake
 made in a developmental test lab is expected.
@@ -424,7 +424,7 @@
 a Samba implementation. Some are the result of a misunderstanding of the English language,
 which has many phrases that are potentially vague and may be highly confusing
 to those for whom English is not their native tongue.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2582844"></a>What Makes Samba a Server?</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id349965"></a>What Makes Samba a Server?</h3></div></div></div><p>
 To some, the nature of the Samba security mode is obvious, but entirely
 wrong all the same. It is assumed that <a class="link" href="smb.conf.5.html#SECURITY">security = server</a> means that Samba
 will act as a server. Not so! This setting means that Samba will <span class="emphasis"><em>try</em></span>
@@ -433,15 +433,15 @@
 Samba is a server regardless of which security mode is chosen. When Samba is used outside of a domain security
 context, it is best to leave the security mode at the default setting. By default Samba-3 uses user-mode
 security.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2582881"></a>What Makes Samba a Domain Controller?</h3></div></div></div><p>
-<a class="indexterm" name="id2582888"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id349993"></a>What Makes Samba a Domain Controller?</h3></div></div></div><p>
+<a class="indexterm" name="id350000"></a>
 The <code class="filename">smb.conf</code> parameter <a class="link" href="smb.conf.5.html#SECURITY">security = domain</a> does not really make Samba behave
 as a domain controller. This setting means we want Samba to be a domain member. See <a class="link" href="samba-pdc.html" title="Chapter 4. Domain Control">Samba as a PDC</a> for more information.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2582924"></a>What Makes Samba a Domain Member?</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id350027"></a>What Makes Samba a Domain Member?</h3></div></div></div><p>
 Guess! So many others do. But whatever you do, do not think that <a class="link" href="smb.conf.5.html#SECURITY">security = user</a>
 makes Samba act as a domain member. Read the manufacturer's manual before the warranty expires. See 
 <a class="link" href="domain-member.html" title="Chapter 6. Domain Membership">Domain Membership</a>, for more information.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2582956"></a>Constantly Losing Connections to Password Server</h3></div></div></div><p>&#8220;<span class="quote">
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id350051"></a>Constantly Losing Connections to Password Server</h3></div></div></div><p>&#8220;<span class="quote">
 Why does server_validate() simply give up rather than re-establish its connection to the
 password server?  Though I am not fluent in the SMB protocol, perhaps the cluster server
 process passes along to its client workstation the session key it receives from the password
@@ -451,7 +451,7 @@
 Indeed. That's why <a class="link" href="smb.conf.5.html#SECURITY">security = server</a>
 is at best a nasty hack. Please use <a class="link" href="smb.conf.5.html#SECURITY">security = domain</a>;
 <a class="link" href="smb.conf.5.html#SECURITY">security = server</a> mode is also known as pass-through authentication.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2583013"></a>Stand-alone Server is converted to Domain Controller  Now User accounts don't work</h3></div></div></div><p>&#8220;<span class="quote">
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id350090"></a>Stand-alone Server is converted to Domain Controller  Now User accounts don't work</h3></div></div></div><p>&#8220;<span class="quote">
 When I try to log in to the DOMAIN, the eventlog shows <span class="emphasis"><em>tried credentials DOMAIN/username; effective
 credentials SERVER/username</em></span>
 </span>&#8221;</p><p>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/StandAloneServer.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/StandAloneServer.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/StandAloneServer.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,22 +1,22 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 7. Standalone Servers</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="type.html" title="Part II. Server Configuration Basics"><link rel="prev" href="domain-member.html" title="Chapter 6. Domain Membership"><link rel="next" href="ClientConfig.html" title="Chapter 8. MS Windows Network Configuration Guide"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 7. Standalone Servers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="domain-member.html">Prev</a> </td><th width="60%" align="center">Part II. Server Configuration Basics</th><td width="20%" align="right"> <a accesskey="n" href="ClientConfig.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="StandAloneServer"></a>Chapter 7. Standalone Servers</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="StandAloneServer.html#id2596235">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="StandAloneServer.html#id2596329">Background</a></span></dt><dt><span class="sect1"><a href="StandAloneServer.html#id2596521">Example Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="StandAloneServer.html#RefDocServer">Reference Documentation Server</a></span></dt><dt><span class="sect2"><a href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></span></dt></dl></dd><dt><span class="sect1"><a href="StandAloneServer.html#id2597506">Common Errors</a></span></dt></dl></div><p>
-<a class="indexterm" name="id2596208"></a>
-<a class="indexterm" name="id2596215"></a>
-<a class="indexterm" name="id2596222"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 7. Standalone Servers</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="type.html" title="Part II. Server Configuration Basics"><link rel="prev" href="domain-member.html" title="Chapter 6. Domain Membership"><link rel="next" href="ClientConfig.html" title="Chapter 8. MS Windows Network Configuration Guide"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 7. Standalone Servers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="domain-member.html">Prev</a> </td><th width="60%" align="center">Part II. Server Configuration Basics</th><td width="20%" align="right"> <a accesskey="n" href="ClientConfig.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="StandAloneServer"></a>Chapter 7. Standalone Servers</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="StandAloneServer.html#id362210">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="StandAloneServer.html#id362296">Background</a></span></dt><dt><span class="sect1"><a href="StandAloneServer.html#id362473">Example Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="StandAloneServer.html#RefDocServer">Reference Documentation Server</a></span></dt><dt><span class="sect2"><a href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></span></dt></dl></dd><dt><span class="sect1"><a href="StandAloneServer.html#id363410">Common Errors</a></span></dt></dl></div><p>
+<a class="indexterm" name="id362186"></a>
+<a class="indexterm" name="id362193"></a>
+<a class="indexterm" name="id362199"></a>
 Standalone servers are independent of domain controllers on the network.
 They are not domain members and function more like workgroup servers. In many
 cases a standalone server is configured with a minimum of security control
 with the intent that all data served will be readily accessible to all users.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2596235"></a>Features and Benefits</h2></div></div></div><p>
-<a class="indexterm" name="id2596243"></a>
-<a class="indexterm" name="id2596250"></a>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id362210"></a>Features and Benefits</h2></div></div></div><p>
+<a class="indexterm" name="id362218"></a>
+<a class="indexterm" name="id362225"></a>
 Standalone servers can be as secure or as insecure as needs dictate. They can
 have simple or complex configurations. Above all, despite the hoopla about
 domain security, they remain a common installation.
 </p><p>
-<a class="indexterm" name="id2596264"></a>
-<a class="indexterm" name="id2596271"></a>
-<a class="indexterm" name="id2596277"></a>
-<a class="indexterm" name="id2596284"></a>
+<a class="indexterm" name="id362236"></a>
+<a class="indexterm" name="id362243"></a>
+<a class="indexterm" name="id362250"></a>
+<a class="indexterm" name="id362257"></a>
 If all that is needed is a server for read-only files, or for
 printers alone, it may not make sense to effect a complex installation.
 For example, a drafting office needs to store old drawings and reference
@@ -24,26 +24,26 @@
 important that all documents remain unaltered. A share-mode read-only standalone
 server is an ideal solution.
 </p><p>
-<a class="indexterm" name="id2596301"></a>
-<a class="indexterm" name="id2596308"></a>
-<a class="indexterm" name="id2596315"></a>
+<a class="indexterm" name="id362270"></a>
+<a class="indexterm" name="id362277"></a>
+<a class="indexterm" name="id362284"></a>
 Another situation that warrants simplicity is an office that has many printers
 that are queued off a single central server. Everyone needs to be able to print
 to the printers, there is no need to effect any access controls, and no files will
 be served from the print server. Again, a share-mode standalone server makes
 a great solution.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2596329"></a>Background</h2></div></div></div><p>
-<a class="indexterm" name="id2596337"></a>
-<a class="indexterm" name="id2596344"></a>
-<a class="indexterm" name="id2596351"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id362296"></a>Background</h2></div></div></div><p>
+<a class="indexterm" name="id362304"></a>
+<a class="indexterm" name="id362310"></a>
+<a class="indexterm" name="id362317"></a>
 The term <span class="emphasis"><em>standalone server</em></span> means that it will provide local authentication and access
 control for all resources that are available from it. In general this means that there will be a local user
 database. In more technical terms, it means resources on the machine will be made available in either
 <span class="emphasis"><em>share</em></span> mode or in <span class="emphasis"><em>user</em></span> mode.
 </p><p>
-<a class="indexterm" name="id2596377"></a>
-<a class="indexterm" name="id2596384"></a>
-<a class="indexterm" name="id2596392"></a>
+<a class="indexterm" name="id362341"></a>
+<a class="indexterm" name="id362348"></a>
+<a class="indexterm" name="id362354"></a>
 No special action is needed other than to create user accounts. Standalone
 servers do not provide network logon services. This means that machines that
 use this server do not perform a domain logon to it. Whatever logon facility
@@ -52,51 +52,51 @@
 be translated (mapped) locally on the standalone server to a locally known
 user name. There are several ways this can be done.
 </p><p>
-<a class="indexterm" name="id2596410"></a>
-<a class="indexterm" name="id2596417"></a>
-<a class="indexterm" name="id2596424"></a>
+<a class="indexterm" name="id362369"></a>
+<a class="indexterm" name="id362376"></a>
+<a class="indexterm" name="id362382"></a>
 Samba tends to blur the distinction a little in defining
 a standalone server. This is because the authentication database may be
 local or on a remote server, even if from the SMB protocol perspective
 the Samba server is not a member of a domain security context.
 </p><p>
-<a class="indexterm" name="id2596438"></a>
-<a class="indexterm" name="id2596444"></a>
-<a class="indexterm" name="id2596451"></a>
-<a class="indexterm" name="id2596458"></a>
-<a class="indexterm" name="id2596465"></a>
-<a class="indexterm" name="id2596472"></a>
-<a class="indexterm" name="id2596479"></a>
-<a class="indexterm" name="id2596486"></a>
+<a class="indexterm" name="id362395"></a>
+<a class="indexterm" name="id362401"></a>
+<a class="indexterm" name="id362408"></a>
+<a class="indexterm" name="id362415"></a>
+<a class="indexterm" name="id362421"></a>
+<a class="indexterm" name="id362428"></a>
+<a class="indexterm" name="id362435"></a>
+<a class="indexterm" name="id362442"></a>
 Through the use of Pluggable Authentication Modules (PAM) (see <a class="link" href="pam.html" title="Chapter 28. PAM-Based Distributed Authentication">the chapter on PAM</a>)
 and the name service switcher (NSS), which maintains the UNIX-user database, the source of authentication may
 reside on another server. We would be inclined to call this the authentication server.  This means that the
 Samba server may use the local UNIX/Linux system password database (<code class="filename">/etc/passwd</code> or
 <code class="filename">/etc/shadow</code>), may use a local smbpasswd file, or may use an LDAP backend, or even via PAM
 and Winbind another CIFS/SMB server for authentication.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2596521"></a>Example Configuration</h2></div></div></div><p>
-<a class="indexterm" name="id2596529"></a>
-<a class="indexterm" name="id2596536"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id362473"></a>Example Configuration</h2></div></div></div><p>
+<a class="indexterm" name="id362481"></a>
+<a class="indexterm" name="id362488"></a>
 <a class="link" href="StandAloneServer.html#simplynice" title="Example 7.1. smb.conf for Reference Documentation Server">The example Reference Documentation Server</a> and <a class="link" href="StandAloneServer.html#SimplePrintServer" title="Central Print Serving">Central Print Serving</a> are designed to inspire simplicity. It is too easy to
 attempt a high level of creativity and to introduce too much complexity in server and network design.
 </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="RefDocServer"></a>Reference Documentation Server</h3></div></div></div><p>
-<a class="indexterm" name="id2596574"></a>
-<a class="indexterm" name="id2596581"></a>
-<a class="indexterm" name="id2596588"></a>
-<a class="indexterm" name="id2596594"></a>
+<a class="indexterm" name="id362523"></a>
+<a class="indexterm" name="id362530"></a>
+<a class="indexterm" name="id362536"></a>
+<a class="indexterm" name="id362543"></a>
 Configuration of a read-only data server that everyone can access is very simple. By default, all shares are
 read-only, unless set otherwise in the <code class="filename">smb.conf</code> file. <a class="link" href="StandAloneServer.html#simplynice" title="Example 7.1. smb.conf for Reference Documentation Server">The example - Reference
 Documentation Server</a> is the <code class="filename">smb.conf</code> file that will do this. Assume that all the reference documents
 are stored in the directory <code class="filename">/export</code>, and the documents are owned by a user other than
 nobody. No home directories are shared, and there are no users in the <code class="filename">/etc/passwd</code> UNIX
 system database. This is a simple system to administer.
-</p><div class="example"><a name="simplynice"></a><p class="title"><b>Example 7.1. smb.conf for Reference Documentation Server</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td>#  Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2596668"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id2596680"></a><em class="parameter"><code>netbios name = GANDALF</code></em></td></tr><tr><td><a class="indexterm" name="id2596692"></a><em class="parameter"><code>security = SHARE</code></em></td></tr><tr><td><a class="indexterm" name="id2596703"></a><em class="parameter"><code>passdb backend = guest</code></em></td></tr><tr><td><a class="indexterm" name="id2596715"></a><em class="parameter"><code>wins server = 192.168.1.1</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[data]</code></em></td></tr><tr><td><a class="indexterm" name="id2596736"></a><em class="parameter"><code>comment = Data</code></em></td></tr><tr><td><a class="indexterm" name="id2596748"></a><em class="parameter"><code>path = /export</code></em></td></tr><tr><td><a class="indexterm" name="id2596759"></a><em class="parameter"><code>guest only = Yes</code></em></td></tr></table></div></div><br class="example-break"><div class="blockquote"><table border="0" width="100%" cellspacing="0" cellpadding="0" class="blockquote" summary="Block quote"><tr><td width="10%" valign="top"> </td><td width="80%" valign="top"><p>
+</p><div class="example"><a name="simplynice"></a><p class="title"><b>Example 7.1. smb.conf for Reference Documentation Server</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td>#  Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id362612"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id362624"></a><em class="parameter"><code>netbios name = GANDALF</code></em></td></tr><tr><td><a class="indexterm" name="id362635"></a><em class="parameter"><code>security = SHARE</code></em></td></tr><tr><td><a class="indexterm" name="id362647"></a><em class="parameter"><code>passdb backend = guest</code></em></td></tr><tr><td><a class="indexterm" name="id362658"></a><em class="parameter"><code>wins server = 192.168.1.1</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[data]</code></em></td></tr><tr><td><a class="indexterm" name="id362679"></a><em class="parameter"><code>comment = Data</code></em></td></tr><tr><td><a class="indexterm" name="id362690"></a><em class="parameter"><code>path = /export</code></em></td></tr><tr><td><a class="indexterm" name="id362702"></a><em class="parameter"><code>guest only = Yes</code></em></td></tr></table></div></div><br class="example-break"><div class="blockquote"><table border="0" width="100%" cellspacing="0" cellpadding="0" class="blockquote" summary="Block quote"><tr><td width="10%" valign="top"> </td><td width="80%" valign="top"><p>
 I would have spoken more briefly, if I'd had more time to prepare.
 </p></td><td width="10%" valign="top"> </td></tr><tr><td width="10%" valign="top"> </td><td colspan="2" align="right" valign="top">--<span class="attribution">Mark Twain</span></td></tr></table></div><p>
-<a class="indexterm" name="id2596785"></a>
-<a class="indexterm" name="id2596792"></a>
-<a class="indexterm" name="id2596799"></a>
-<a class="indexterm" name="id2596806"></a>
+<a class="indexterm" name="id362727"></a>
+<a class="indexterm" name="id362734"></a>
+<a class="indexterm" name="id362740"></a>
+<a class="indexterm" name="id362747"></a>
 In <a class="link" href="StandAloneServer.html#simplynice" title="Example 7.1. smb.conf for Reference Documentation Server">this example</a>, the machine name is set to GANDALF, and the
 workgroup is set to the name of the local workgroup (MIDEARTH) so the machine will appear together
 with systems with which users are familiar. The only password backend required is the &#8220;<span class="quote">guest</span>&#8221;
@@ -107,8 +107,8 @@
 sound reasons for avoiding complexity as well as for avoiding a technically perfect solution. Unfortunately,
 many network administrators still need to learn the art of doing just enough to keep out of trouble.
 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="SimplePrintServer"></a>Central Print Serving</h3></div></div></div><p>
-<a class="indexterm" name="id2596855"></a>
-<a class="indexterm" name="id2596862"></a>
+<a class="indexterm" name="id362790"></a>
+<a class="indexterm" name="id362797"></a>
 Configuration of a simple print server is easy if you have all the right tools on your system.
 </p><div class="orderedlist"><p class="title"><b> Assumptions</b></p><ol type="1"><li><p>
 	The print server must require no administration.
@@ -122,17 +122,17 @@
 	All workstations will use only PostScript drivers. The printer driver
 	of choice is the one shipped with the Windows OS for the Apple Color LaserWriter.
 	</p></li></ol></div><p>
-<a class="indexterm" name="id2596918"></a>
-<a class="indexterm" name="id2596925"></a>
-<a class="indexterm" name="id2596932"></a>
+<a class="indexterm" name="id362848"></a>
+<a class="indexterm" name="id362854"></a>
+<a class="indexterm" name="id362861"></a>
 In this example our print server will spool all incoming print jobs to
 <code class="filename">/var/spool/samba</code> until the job is ready to be submitted by
 Samba to the CUPS print processor. Since all incoming connections will be as
 the anonymous (guest) user, two things will be required to enable anonymous printing.
 </p><div class="itemizedlist"><p class="title"><b>Enabling Anonymous Printing</b></p><ul type="disc"><li><p>
-<a class="indexterm" name="id2596960"></a>
-<a class="indexterm" name="id2596967"></a>
-<a class="indexterm" name="id2596973"></a>
+<a class="indexterm" name="id362886"></a>
+<a class="indexterm" name="id362893"></a>
+<a class="indexterm" name="id362900"></a>
 	The UNIX/Linux system must have a <code class="literal">guest</code> account.
 	The default for this is usually the account <code class="literal">nobody</code>.
 	To find the correct name to use for your version of Samba, do the 
@@ -140,13 +140,13 @@
 </p><pre class="screen">
 <code class="prompt">$ </code><strong class="userinput"><code>testparm -s -v | grep "guest account"</code></strong>
 </pre><p>
-<a class="indexterm" name="id2597011"></a>
+<a class="indexterm" name="id362936"></a>
 	Make sure that this account exists in your system password
 	database (<code class="filename">/etc/passwd</code>).
 	</p><p>
-<a class="indexterm" name="id2597029"></a>
-<a class="indexterm" name="id2597036"></a>
-<a class="indexterm" name="id2597042"></a>
+<a class="indexterm" name="id362953"></a>
+<a class="indexterm" name="id362959"></a>
+<a class="indexterm" name="id362966"></a>
 	It is a good idea either to set a password on this account, or else to lock it
 	from UNIX use. Assuming that the guest account is called <code class="literal">pcguest</code>,
 	it can be locked by executing:
@@ -155,12 +155,12 @@
 </pre><p>
 	The exact command may vary depending on your UNIX/Linux distribution.
 	</p></li><li><p>
-<a class="indexterm" name="id2597075"></a>
-<a class="indexterm" name="id2597082"></a>
-<a class="indexterm" name="id2597089"></a>
-<a class="indexterm" name="id2597096"></a>
-<a class="indexterm" name="id2597103"></a>
-<a class="indexterm" name="id2597110"></a>
+<a class="indexterm" name="id362997"></a>
+<a class="indexterm" name="id363004"></a>
+<a class="indexterm" name="id363011"></a>
+<a class="indexterm" name="id363017"></a>
+<a class="indexterm" name="id363024"></a>
+<a class="indexterm" name="id363031"></a>
 	The directory into which Samba will spool the file must have write
 	access for the guest account. The following commands will ensure that
 	this directory is available for use:
@@ -171,31 +171,31 @@
 </pre><p>
 	</p></li></ul></div><p>
 The contents of the <code class="filename">smb.conf</code> file is shown in <a class="link" href="StandAloneServer.html#AnonPtrSvr" title="Example 7.2. smb.conf for Anonymous Printing">the Anonymous Printing example</a>.
-</p><div class="example"><a name="AnonPtrSvr"></a><p class="title"><b>Example 7.2. <code class="filename">smb.conf</code> for Anonymous Printing</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td>#  Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2597209"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id2597221"></a><em class="parameter"><code>netbios name = GANDALF</code></em></td></tr><tr><td><a class="indexterm" name="id2597233"></a><em class="parameter"><code>security = SHARE</code></em></td></tr><tr><td><a class="indexterm" name="id2597244"></a><em class="parameter"><code>passdb backend = guest</code></em></td></tr><tr><td><a class="indexterm" name="id2597256"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id2597268"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2597289"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id2597300"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2597312"></a><em class="parameter"><code>printer admin = root</code></em></td></tr><tr><td><a class="indexterm" name="id2597324"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2597336"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2597347"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2597359"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2597375"></a>
-<a class="indexterm" name="id2597384"></a>
-<a class="indexterm" name="id2597391"></a>
-<a class="indexterm" name="id2597398"></a>
-<a class="indexterm" name="id2597405"></a>
+</p><div class="example"><a name="AnonPtrSvr"></a><p class="title"><b>Example 7.2. <code class="filename">smb.conf</code> for Anonymous Printing</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td>#  Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id363127"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id363138"></a><em class="parameter"><code>netbios name = GANDALF</code></em></td></tr><tr><td><a class="indexterm" name="id363150"></a><em class="parameter"><code>security = SHARE</code></em></td></tr><tr><td><a class="indexterm" name="id363161"></a><em class="parameter"><code>passdb backend = guest</code></em></td></tr><tr><td><a class="indexterm" name="id363173"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id363184"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id363204"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id363216"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id363227"></a><em class="parameter"><code>printer admin = root</code></em></td></tr><tr><td><a class="indexterm" name="id363239"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id363250"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id363262"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id363273"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
+<a class="indexterm" name="id363289"></a>
+<a class="indexterm" name="id363298"></a>
+<a class="indexterm" name="id363305"></a>
+<a class="indexterm" name="id363312"></a>
+<a class="indexterm" name="id363318"></a>
 On CUPS-enabled systems there is a facility to pass raw data directly to the printer without intermediate
 processing via CUPS print filters. Where use of this mode of operation is desired, it is necessary to
 configure a raw printing device. It is also necessary to enable the raw mime handler in the
 <code class="filename">/etc/mime.conv</code> and <code class="filename">/etc/mime.types</code> files. Refer to <a class="link" href="CUPS-printing.html" title="Chapter 22. CUPS Printing Support">CUPS Printing Support</a>, <a class="link" href="CUPS-printing.html#cups-raw" title="Explicitly Enable &#8220;raw&#8221; Printing for application/octet-stream">Explicitly Enable raw Printing
 for application/octet-stream</a>.
 </p></div><p>
-<a class="indexterm" name="id2597447"></a>
-<a class="indexterm" name="id2597454"></a>
-<a class="indexterm" name="id2597461"></a>
-<a class="indexterm" name="id2597468"></a>
+<a class="indexterm" name="id363357"></a>
+<a class="indexterm" name="id363364"></a>
+<a class="indexterm" name="id363370"></a>
+<a class="indexterm" name="id363377"></a>
 The example in <a class="link" href="StandAloneServer.html#AnonPtrSvr" title="Example 7.2. smb.conf for Anonymous Printing">the Anonymous Printing example</a> uses CUPS for direct printing
 via the CUPS libarary API. This means that all printers will be exposed to Windows users without need to
 configure a printcap file. If there is necessity to expose only a sub-set of printers, or to define a special
 type of printer (for example, a PDF filter) the <em class="parameter"><code>printcap name = cups</code></em> can be replaced
 with the entry <em class="parameter"><code>printcap name = /etc/samba/myprintcap</code></em>. In this case the file specified
 should contain a list of the printer names that should be exposed to Windows network users.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2597506"></a>Common Errors</h2></div></div></div><p>
-<a class="indexterm" name="id2597513"></a>
-<a class="indexterm" name="id2597520"></a>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id363410"></a>Common Errors</h2></div></div></div><p>
+<a class="indexterm" name="id363418"></a>
+<a class="indexterm" name="id363424"></a>
 The greatest mistake so often made is to make a network configuration too complex.
 It pays to use the simplest solution that will meet the needs of the moment.
 </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="domain-member.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="type.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ClientConfig.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 6. Domain Membership </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 8. MS Windows Network Configuration Guide</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/TOSHpreface.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/TOSHpreface.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/TOSHpreface.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Preface</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="pr03.html" title="Foreword"><link rel="next" href="IntroSMB.html" title="Introduction"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Preface</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pr03.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="IntroSMB.html">Next</a></td></tr></table><hr></div><div class="preface" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="TOSHpreface"></a>Preface</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="TOSHpreface.html#id2572474">Conventions Used</a></span></dt></dl></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Preface</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="pr03.html" title="Foreword"><link rel="next" href="IntroSMB.html" title="Introduction"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Preface</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pr03.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="IntroSMB.html">Next</a></td></tr></table><hr></div><div class="preface" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="TOSHpreface"></a>Preface</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="TOSHpreface.html#id341222">Conventions Used</a></span></dt></dl></div><p>
 The editors wish to thank you for your decision to purchase this book.
 The Official Samba-3 HOWTO and Reference Guide is the result of many years
 of accumulation of information, feedback, tips, hints, and happy solutions.
@@ -28,7 +28,7 @@
 We wish to advise that only original and unencumbered material can be published. Please do not submit
 content that is not your own work unless proof of consent from the copyright holder accompanies your
 submission.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2572474"></a>Conventions Used</h2></div></div></div><p>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id341222"></a>Conventions Used</h2></div></div></div><p>
     The following notation conventions are used throughout this book:
     </p><div class="itemizedlist"><ul type="disc"><li><p>
 	TOSHARG2 is used as an abbreviation for the book, &#8220;<span class="quote">The Official Samba-3

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/VFS.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/VFS.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/VFS.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,51 +1,51 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 23. Stackable VFS modules</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="CUPS-printing.html" title="Chapter 22. CUPS Printing Support"><link rel="next" href="winbind.html" title="Chapter 24. Winbind: Use of Domain Accounts"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 23. Stackable VFS modules</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="CUPS-printing.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="winbind.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="VFS"></a>Chapter 23. Stackable VFS modules</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Tim</span> <span class="surname">Potter</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:tpot at samba.org">tpot at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Simo</span> <span class="surname">Sorce</span></h3><span class="contrib">original vfs_skel README</span> </div></div><div><div class="author"><h3 class="author"><span class="firstname">Alexander</span> <span class="surname">Bokovoy</span></h3><span class="contrib">original vfs_netatalk docs</span> </div></div><div><div class="author"><h3 class="author"><span class="firstname">Stefan</span> <span class="surname">Metzmacher</span></h3><span class="contrib">Update for multiple modules</span> </div></div><div><div class="author"><h3 class="author"><span class="firstname">Ed</span> <span class="surname">Riddle</span></h3><span class="contrib">original shadow_copy docs</span> </div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="VFS.html#id2672652">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="VFS.html#id2672690">Discussion</a></span></dt><dt><span class="sect1"><a href="VFS.html#id2673086">Included Modules</a></span></dt><dd><dl><dt><span class="sect2"><a href="VFS.html#id2673092">audit</a></span></dt><dt><span class="sect2"><a href="VFS.html#id2673133">default_quota</a></span></dt><dt><span class="sect2"><a href="VFS.html#id2673350">extd_audit</a></span></dt><dt><span class="sect2"><a href="VFS.html#fakeperms">fake_perms</a></span></dt><dt><span class="sect2"><a href="VFS.html#id2673676">recycle</a></span></dt><dt><span class="sect2"><a href="VFS.html#id2674073">netatalk</a></span></dt><dt><span class="sect2"><a href="VFS.html#id2674123">shadow_copy</a></span></dt></dl></dd><dt><span class="sect1"><a href="VFS.html#id2675024">VFS Modules Available Elsewhere</a></span></dt><dd><dl><dt><span class="sect2"><a href="VFS.html#id2675049">DatabaseFS</a></span></dt><dt><span class="sect2"><a href="VFS.html#id2675109">vscan</a></span></dt><dt><span class="sect2"><a href="VFS.html#id2675148">vscan-clamav</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2672652"></a>Features and Benefits</h2></div></div></div><p>
-<a class="indexterm" name="id2672660"></a>
-<a class="indexterm" name="id2672669"></a>
-<a class="indexterm" name="id2672676"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 23. Stackable VFS modules</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="CUPS-printing.html" title="Chapter 22. CUPS Printing Support"><link rel="next" href="winbind.html" title="Chapter 24. Winbind: Use of Domain Accounts"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 23. Stackable VFS modules</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="CUPS-printing.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="winbind.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="VFS"></a>Chapter 23. Stackable VFS modules</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Tim</span> <span class="surname">Potter</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:tpot at samba.org">tpot at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Simo</span> <span class="surname">Sorce</span></h3><span class="contrib">original vfs_skel README</span> </div></div><div><div class="author"><h3 class="author"><span class="firstname">Alexander</span> <span class="surname">Bokovoy</span></h3><span class="contrib">original vfs_netatalk docs</span> </div></div><div><div class="author"><h3 class="author"><span class="firstname">Stefan</span> <span class="surname">Metzmacher</span></h3><span class="contrib">Update for multiple modules</span> </div></div><div><div class="author"><h3 class="author"><span class="firstname">Ed</span> <span class="surname">Riddle</span></h3><span class="contrib">original shadow_copy docs</span> </div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="VFS.html#id432386">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="VFS.html#id432421">Discussion</a></span></dt><dt><span class="sect1"><a href="VFS.html#id432802">Included Modules</a></span></dt><dd><dl><dt><span class="sect2"><a href="VFS.html#id432808">audit</a></span></dt><dt><span class="sect2"><a href="VFS.html#id432847">default_quota</a></span></dt><dt><span class="sect2"><a href="VFS.html#id433040">extd_audit</a></span></dt><dt><span class="sect2"><a href="VFS.html#fakeperms">fake_perms</a></span></dt><dt><span class="sect2"><a href="VFS.html#id433348">recycle</a></span></dt><dt><span class="sect2"><a href="VFS.html#id433719">netatalk</a></span></dt><dt><span class="sect2"><a href="VFS.html#id433767">shadow_copy</a></span></dt></dl></dd><dt><span class="sect1"><a href="VFS.html#id434600">VFS Modules Available Elsewhere</a></span></dt><dd><dl><dt><span class="sect2"><a href="VFS.html#id434622">DatabaseFS</a></span></dt><dt><span class="sect2"><a href="VFS.html#id434675">vscan</a></span></dt><dt><span class="sect2"><a href="VFS.html#id434712">vscan-clamav</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id432386"></a>Features and Benefits</h2></div></div></div><p>
+<a class="indexterm" name="id432394"></a>
+<a class="indexterm" name="id432403"></a>
+<a class="indexterm" name="id432410"></a>
 Stackable VFS (Virtual File System) modules support was new to Samba-3 and has proven quite popular. Samba
 passes each request to access the UNIX file system through the loaded VFS modules. This chapter covers the
 modules that come with the Samba source and provides references to some external modules.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2672690"></a>Discussion</h2></div></div></div><p>
-<a class="indexterm" name="id2672698"></a>
-<a class="indexterm" name="id2672705"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id432421"></a>Discussion</h2></div></div></div><p>
+<a class="indexterm" name="id432429"></a>
+<a class="indexterm" name="id432436"></a>
 If not supplied with your platform distribution binary Samba package, you may have problems compiling these
 modules, as shared libraries are compiled and linked in different ways on different systems. They currently
 have been tested against GNU/Linux and IRIX.
 </p><p>
-<a class="indexterm" name="id2672719"></a>
-<a class="indexterm" name="id2672726"></a>
-<a class="indexterm" name="id2672733"></a>
+<a class="indexterm" name="id432448"></a>
+<a class="indexterm" name="id432455"></a>
+<a class="indexterm" name="id432462"></a>
 To use the VFS modules, create a share similar to the one below. The important parameter is the <a class="link" href="smb.conf.5.html#VFSOBJECTS">vfs objects</a> parameter where you can list one or more VFS modules by name. For example, to log all
 access to files and put deleted files in a recycle bin, see <a class="link" href="VFS.html#vfsrecyc" title="Example 23.1. smb.conf with VFS modules">the smb.conf with VFS
 modules example</a>:
-</p><div class="example"><a name="vfsrecyc"></a><p class="title"><b>Example 23.1. smb.conf with VFS modules</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[audit]</code></em></td></tr><tr><td><a class="indexterm" name="id2672788"></a><em class="parameter"><code>comment = Audited /data directory</code></em></td></tr><tr><td><a class="indexterm" name="id2672800"></a><em class="parameter"><code>path = /data</code></em></td></tr><tr><td><a class="indexterm" name="id2672812"></a><em class="parameter"><code>vfs objects = audit recycle</code></em></td></tr><tr><td><a class="indexterm" name="id2672823"></a><em class="parameter"><code>writeable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2672835"></a><em class="parameter"><code>browseable = yes</code></em></td></tr></table></div></div><br class="example-break"><p>
-<a class="indexterm" name="id2672850"></a>
-<a class="indexterm" name="id2672857"></a>
-<a class="indexterm" name="id2672864"></a>
+</p><div class="example"><a name="vfsrecyc"></a><p class="title"><b>Example 23.1. smb.conf with VFS modules</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[audit]</code></em></td></tr><tr><td><a class="indexterm" name="id432515"></a><em class="parameter"><code>comment = Audited /data directory</code></em></td></tr><tr><td><a class="indexterm" name="id432526"></a><em class="parameter"><code>path = /data</code></em></td></tr><tr><td><a class="indexterm" name="id432538"></a><em class="parameter"><code>vfs objects = audit recycle</code></em></td></tr><tr><td><a class="indexterm" name="id432549"></a><em class="parameter"><code>writeable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id432561"></a><em class="parameter"><code>browseable = yes</code></em></td></tr></table></div></div><br class="example-break"><p>
+<a class="indexterm" name="id432576"></a>
+<a class="indexterm" name="id432582"></a>
+<a class="indexterm" name="id432589"></a>
 The modules are used in the order in which they are specified.  Let's say that you want to both have a virus
 scanner module and a recycle bin module. It is wise to put the virus scanner module as the first one so that
 it is the first to get run and may detect a virus immediately, before any action is performed on that file.
 <a class="link" href="smb.conf.5.html#VFSOBJECTS">vfs objects = vscan-clamav recycle</a>
 </p><p>
-<a class="indexterm" name="id2672892"></a>
-<a class="indexterm" name="id2672898"></a>
+<a class="indexterm" name="id432613"></a>
+<a class="indexterm" name="id432620"></a>
 Samba will attempt to load modules from the <code class="filename">/lib</code> directory in the root directory of the
 Samba installation (usually <code class="filename">/usr/lib/samba/vfs</code> or
 <code class="filename">/usr/local/samba/lib/vfs</code>).
 </p><p>
-<a class="indexterm" name="id2672928"></a>
-<a class="indexterm" name="id2672935"></a>
-<a class="indexterm" name="id2672942"></a>
-<a class="indexterm" name="id2672949"></a>
+<a class="indexterm" name="id432648"></a>
+<a class="indexterm" name="id432655"></a>
+<a class="indexterm" name="id432661"></a>
+<a class="indexterm" name="id432668"></a>
 Some modules can be used twice for the same share.  This can be done using a configuration similar to the one
 shown in <a class="link" href="VFS.html#multimodule" title="Example 23.2. smb.conf with multiple VFS modules">the smb.conf with multiple VFS modules</a>.
 
-</p><div class="example"><a name="multimodule"></a><p class="title"><b>Example 23.2. smb.conf with multiple VFS modules</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[test]</code></em></td></tr><tr><td><a class="indexterm" name="id2672989"></a><em class="parameter"><code>comment = VFS TEST</code></em></td></tr><tr><td><a class="indexterm" name="id2673000"></a><em class="parameter"><code>path = /data</code></em></td></tr><tr><td><a class="indexterm" name="id2673012"></a><em class="parameter"><code>writeable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2673023"></a><em class="parameter"><code>browseable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2673035"></a><em class="parameter"><code>vfs objects = example:example1 example example:test</code></em></td></tr><tr><td><a class="indexterm" name="id2673047"></a><em class="parameter"><code>example1: parameter = 1</code></em></td></tr><tr><td><a class="indexterm" name="id2673059"></a><em class="parameter"><code>example:  parameter = 5</code></em></td></tr><tr><td><a class="indexterm" name="id2673071"></a><em class="parameter"><code>test:     parameter = 7</code></em></td></tr></table></div></div><p><br class="example-break">
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2673086"></a>Included Modules</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2673092"></a>audit</h3></div></div></div><p>
-<a class="indexterm" name="id2673099"></a>
+</p><div class="example"><a name="multimodule"></a><p class="title"><b>Example 23.2. smb.conf with multiple VFS modules</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[test]</code></em></td></tr><tr><td><a class="indexterm" name="id432707"></a><em class="parameter"><code>comment = VFS TEST</code></em></td></tr><tr><td><a class="indexterm" name="id432718"></a><em class="parameter"><code>path = /data</code></em></td></tr><tr><td><a class="indexterm" name="id432730"></a><em class="parameter"><code>writeable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id432741"></a><em class="parameter"><code>browseable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id432753"></a><em class="parameter"><code>vfs objects = example:example1 example example:test</code></em></td></tr><tr><td><a class="indexterm" name="id432765"></a><em class="parameter"><code>example1: parameter = 1</code></em></td></tr><tr><td><a class="indexterm" name="id432776"></a><em class="parameter"><code>example:  parameter = 5</code></em></td></tr><tr><td><a class="indexterm" name="id432788"></a><em class="parameter"><code>test:     parameter = 7</code></em></td></tr></table></div></div><p><br class="example-break">
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id432802"></a>Included Modules</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id432808"></a>audit</h3></div></div></div><p>
+<a class="indexterm" name="id432816"></a>
 		A simple module to audit file access to the syslog facility. The following operations are logged:
 		</p><div class="itemizedlist"><ul type="disc"><li><p>share</p></li><li><p>connect/disconnect</p></li><li><p>directory opens/create/remove</p></li><li><p>file open/close/rename/unlink/chmod</p></li></ul></div><p>
-		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2673133"></a>default_quota</h3></div></div></div><p>
+		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id432847"></a>default_quota</h3></div></div></div><p>
 	This module allows the default quota values, in the windows explorer GUI, to be stored on a Samba-3 server.
 	The challenge is that linux filesystems only store quotas for users and groups, but no default quotas.
 	</p><p>
@@ -117,17 +117,17 @@
 quotasettings:	gid nolimit = no
 ...
 </pre><p>
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2673350"></a>extd_audit</h3></div></div></div><p>
-<a class="indexterm" name="id2673358"></a>
-<a class="indexterm" name="id2673365"></a>
-<a class="indexterm" name="id2673372"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id433040"></a>extd_audit</h3></div></div></div><p>
+<a class="indexterm" name="id433048"></a>
+<a class="indexterm" name="id433055"></a>
+<a class="indexterm" name="id433062"></a>
 		This module is identical with the <code class="literal">audit</code> module above except
 		that it sends audit logs to both syslog as well as the <code class="literal">smbd</code> log files. The 
 		<a class="link" href="smb.conf.5.html#LOGLEVEL">log level</a> for this module is set in the <code class="filename">smb.conf</code> file. 
 		</p><p>
 		Valid settings and the information that will be recorded are shown in <a class="link" href="VFS.html#xtdaudit" title="Table 23.1. Extended Auditing Log Information">the next table</a>.
-		</p><div class="table"><a name="xtdaudit"></a><p class="title"><b>Table 23.1. Extended Auditing Log Information</b></p><div class="table-contents"><table summary="Extended Auditing Log Information" border="1"><colgroup><col><col></colgroup><thead><tr><th align="center">Log Level</th><th align="center">Log Details - File and Directory Operations</th></tr></thead><tbody><tr><td align="center">0</td><td align="left">Make Directory, Remove Directory, Unlink</td></tr><tr><td align="center">1</td><td align="left">Open Directory, Rename File, Change Permissions/ACLs</td></tr><tr><td align="center">2</td><td align="left">Open &amp; Close File</td></tr><tr><td align="center">10</td><td align="left">Maximum Debug Level</td></tr></tbody></table></div></div><br class="table-break"><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2673507"></a>Configuration of Auditing</h4></div></div></div><p>
-<a class="indexterm" name="id2673515"></a>
+		</p><div class="table"><a name="xtdaudit"></a><p class="title"><b>Table 23.1. Extended Auditing Log Information</b></p><div class="table-contents"><table summary="Extended Auditing Log Information" border="1"><colgroup><col><col></colgroup><thead><tr><th align="center">Log Level</th><th align="center">Log Details - File and Directory Operations</th></tr></thead><tbody><tr><td align="center">0</td><td align="left">Make Directory, Remove Directory, Unlink</td></tr><tr><td align="center">1</td><td align="left">Open Directory, Rename File, Change Permissions/ACLs</td></tr><tr><td align="center">2</td><td align="left">Open &amp; Close File</td></tr><tr><td align="center">10</td><td align="left">Maximum Debug Level</td></tr></tbody></table></div></div><br class="table-break"><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id433192"></a>Configuration of Auditing</h4></div></div></div><p>
+<a class="indexterm" name="id433200"></a>
 		This auditing tool is more felxible than most people readily will recognize. There are a number of ways
 		by which useful logging information can be recorded.
 		</p><div class="itemizedlist"><ul type="disc"><li><p>Syslog can be used to record all transaction. This can be disabled by setting
@@ -145,26 +145,26 @@
 		it is essential that the <a class="link" href="smb.conf.5.html#MAXLOGSIZE">max log size = 0</a> be set
 		in the <code class="filename">smb.conf</code> file.
 		</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="fakeperms"></a>fake_perms</h3></div></div></div><p>
-<a class="indexterm" name="id2673640"></a>
-<a class="indexterm" name="id2673647"></a>
-<a class="indexterm" name="id2673654"></a>
-<a class="indexterm" name="id2673661"></a>
+<a class="indexterm" name="id433316"></a>
+<a class="indexterm" name="id433323"></a>
+<a class="indexterm" name="id433329"></a>
+<a class="indexterm" name="id433336"></a>
 		This module was created to allow Roaming Profile files and directories to be set (on the Samba server
 		under UNIX) as read only. This module will, if installed on the Profiles share, report to the client
 		that the Profile files and directories are writeable. This satisfies the client even though the files
 		will never be overwritten as the client logs out or shuts down.
-		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2673676"></a>recycle</h3></div></div></div><p>
-<a class="indexterm" name="id2673684"></a>
-<a class="indexterm" name="id2673691"></a>
-<a class="indexterm" name="id2673698"></a>
+		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id433348"></a>recycle</h3></div></div></div><p>
+<a class="indexterm" name="id433356"></a>
+<a class="indexterm" name="id433363"></a>
+<a class="indexterm" name="id433370"></a>
 		A Recycle Bin-like module. Where used, unlink calls will be intercepted and files moved
 		to the recycle directory instead of being deleted. This gives the same effect as the
 		<span class="guiicon">Recycle Bin</span> on Windows computers.
 		</p><p>
-<a class="indexterm" name="id2673718"></a>
-<a class="indexterm" name="id2673724"></a>
-<a class="indexterm" name="id2673731"></a>
-<a class="indexterm" name="id2673738"></a>
+<a class="indexterm" name="id433388"></a>
+<a class="indexterm" name="id433394"></a>
+<a class="indexterm" name="id433401"></a>
+<a class="indexterm" name="id433408"></a>
 		The <span class="guiicon">Recycle Bin</span> will not appear in
 		<span class="application">Windows Explorer</span> views of the network
 		file system (share) nor on any mapped drive. Instead, a directory
@@ -179,10 +179,10 @@
 		file was deleted.
 		</p><p>Supported options for the <code class="literal">recycle</code> module are as follow:
 		</p><div class="variablelist"><dl><dt><span class="term">recycle:repository</span></dt><dd><p>
-<a class="indexterm" name="id2673816"></a>
+<a class="indexterm" name="id433480"></a>
 				Path of the directory where deleted files should be moved.
 				</p></dd><dt><span class="term">recycle:directory_mode</span></dt><dd><p>
-<a class="indexterm" name="id2673835"></a>
+<a class="indexterm" name="id433499"></a>
 				Set it to the octal mode you want for the recycle directory. With
 				this mode the recycle directory	will be created if it not
 				exists and the first file is deleted.
@@ -191,7 +191,7 @@
 				If <em class="parameter"><code>directory_mode</code></em> not exists, the default
 				mode 0700 is used.
 				</p></dd><dt><span class="term">recycle:subdir_mode</span></dt><dd><p>
-<a class="indexterm" name="id2673870"></a>
+<a class="indexterm" name="id433531"></a>
 				Set it to the octal mode you want for the sub directories of
 				the recycle directory. With this mode	the sub directories will
 				be created.
@@ -199,48 +199,48 @@
 				sub directories will be created with the mode from
 				<em class="parameter"><code>directory_mode</code></em>.
 				</p></dd><dt><span class="term">recycle:keeptree</span></dt><dd><p>
-<a class="indexterm" name="id2673905"></a>
+<a class="indexterm" name="id433563"></a>
 				Specifies whether the directory structure should be kept or if the files in the directory that is being 
 				deleted should be kept separately in the recycle bin.
 				</p></dd><dt><span class="term">recycle:versions</span></dt><dd><p>
-<a class="indexterm" name="id2673926"></a>
+<a class="indexterm" name="id433582"></a>
 				If this option is set, two files 
 				with the same name that are deleted will both 
 				be kept in the recycle bin. Newer deleted versions 
 				of a file will be called &#8220;<span class="quote">Copy #x of <em class="replaceable"><code>filename</code></em></span>&#8221;.
 				</p></dd><dt><span class="term">recycle:touch</span></dt><dd><p>
-<a class="indexterm" name="id2673953"></a>
+<a class="indexterm" name="id433608"></a>
 				Specifies whether a file's access date should be touched when the file is moved to the recycle bin.
 				</p></dd><dt><span class="term">recycle:touch_mtime</span></dt><dd><p>
-<a class="indexterm" name="id2673973"></a>
+<a class="indexterm" name="id433626"></a>
 				Specifies whether a file's last modify date date should be touched when the file is moved to the recycle bin.
 				</p></dd><dt><span class="term">recycle:maxsize</span></dt><dd><p>
-<a class="indexterm" name="id2673993"></a>
+<a class="indexterm" name="id433645"></a>
 				Files that are larger than the number of bytes specified by this parameter will not be put into the recycle bin.
 				</p></dd><dt><span class="term">recycle:exclude</span></dt><dd><p>
-<a class="indexterm" name="id2674014"></a>
+<a class="indexterm" name="id433664"></a>
 				List of files that should not be put into the recycle bin when deleted, but deleted in the regular way.
 				</p></dd><dt><span class="term">recycle:exclude_dir</span></dt><dd><p>
-<a class="indexterm" name="id2674034"></a>
+<a class="indexterm" name="id433683"></a>
 				Contains a list of directories. When files from these directories are
 				deleted, they are not put into the
 				recycle bin but are deleted in the
 				regular way.
 				</p></dd><dt><span class="term">recycle:noversions</span></dt><dd><p>
-<a class="indexterm" name="id2674055"></a>
+<a class="indexterm" name="id433702"></a>
 				Specifies a list of paths (wildcards such as * and ? are supported) for which no versioning
 				should be used. Only useful when <span class="emphasis"><em>recycle:versions</em></span> is enabled.
 				</p></dd></dl></div><p>
-		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2674073"></a>netatalk</h3></div></div></div><p>
-<a class="indexterm" name="id2674081"></a>
+		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id433719"></a>netatalk</h3></div></div></div><p>
+<a class="indexterm" name="id433727"></a>
 		A netatalk module will ease co-existence of Samba and netatalk file sharing services.
 		</p><p>Advantages compared to the old netatalk module:
-		</p><div class="itemizedlist"><a class="indexterm" name="id2674096"></a><ul type="disc"><li><p>Does not care about creating .AppleDouble forks, just keeps them in sync.</p></li><li><p>If a share in <code class="filename">smb.conf</code> does not contain .AppleDouble item in hide or veto list, it will be added automatically.</p></li></ul></div><p>
-		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2674123"></a>shadow_copy</h3></div></div></div><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p>
-<a class="indexterm" name="id2674132"></a>
+		</p><div class="itemizedlist"><a class="indexterm" name="id433741"></a><ul type="disc"><li><p>Does not care about creating .AppleDouble forks, just keeps them in sync.</p></li><li><p>If a share in <code class="filename">smb.conf</code> does not contain .AppleDouble item in hide or veto list, it will be added automatically.</p></li></ul></div><p>
+		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id433767"></a>shadow_copy</h3></div></div></div><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p>
+<a class="indexterm" name="id433776"></a>
 	<span class="emphasis"><em>THIS IS NOT A BACKUP, ARCHIVAL, OR VERSION CONTROL SOLUTION!</em></span>
 	</p><p>
-<a class="indexterm" name="id2674147"></a>
+<a class="indexterm" name="id433790"></a>
 	With Samba or Windows servers, shadow_copy is designed to be an end-user tool only.  It does not replace or
 	enhance your backup and archival solutions and should in no way be considered as such.  Additionally, if you
 	need version control, implement a version control system.  You have been warned.
@@ -251,12 +251,12 @@
 	additional requirements for pre-Windows XP clients.  I did not test this functionality with any pre-Windows XP
 	clients.  You should be able to get more information about MS Shadow Copy <a class="ulink" href="http://www.microsoft.com/windowsserver2003/techinfo/overview/scr.mspx" target="_top">from the Microsoft's site</a>.
 	</p><p>
-<a class="indexterm" name="id2674192"></a>
-<a class="indexterm" name="id2674198"></a>
-<a class="indexterm" name="id2674205"></a>
-<a class="indexterm" name="id2674212"></a>
-<a class="indexterm" name="id2674219"></a>
-<a class="indexterm" name="id2674226"></a>
+<a class="indexterm" name="id433826"></a>
+<a class="indexterm" name="id433833"></a>
+<a class="indexterm" name="id433840"></a>
+<a class="indexterm" name="id433847"></a>
+<a class="indexterm" name="id433853"></a>
+<a class="indexterm" name="id433860"></a>
 	The shadow_copy VFS module requires some underlying file system setup with some sort of Logical Volume Manager
 	(LVM) such as LVM1, LVM2, or EVMS.  Setting up LVM is beyond the scope of this document; however, we will
 	outline the steps we took to test this functionality for <span class="emphasis"><em>example purposes only.</em></span> You need
@@ -269,9 +269,9 @@
 	      See <a class="ulink" href="http://www-106.ibm.com/developerworks/linux/library/l-lvm/" target="_top">Learning
 	      Linux LVM, Part 1</a> and <a class="ulink" href="http://www-106.ibm.com/developerworks/library/l-lvm2.html" target="_top">Learning
 	      Linux LWM, Part 2</a> for Daniel Robbins' well-written, two part tutorial on Linux and LVM using LVM
-	      source code and reiserfs.</p></li></ul></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2674311"></a>Shadow Copy Setup</h4></div></div></div><p>
-<a class="indexterm" name="id2674319"></a>
-<a class="indexterm" name="id2674326"></a>
+	      source code and reiserfs.</p></li></ul></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id433938"></a>Shadow Copy Setup</h4></div></div></div><p>
+<a class="indexterm" name="id433945"></a>
+<a class="indexterm" name="id433952"></a>
 	At the time of this writing, not much testing has been done.  I tested the shadow copy VFS module with a
 	specific scenario which was not deployed in a production environment, but more as a proof of concept.  The
 	scenario involved a Samba-3 file server on Debian Sarge with an XFS file system and LVM1.  I do NOT recommend
@@ -286,8 +286,8 @@
 		It doesn't matter if it is a Domain Controller or Member File Server, but it is assumed that you have a
 		working Samba 3.0.3 or later server running.
 		</p></li><li><p><b>Install &amp; Configure LVM. </b>
-<a class="indexterm" name="id2674404"></a>
-<a class="indexterm" name="id2674411"></a>
+<a class="indexterm" name="id434020"></a>
+<a class="indexterm" name="id434027"></a>
 		Before you can make shadow copies available to the client, you have to create the shadow copies.  This is
 		done by taking some sort of file system snapshot.  Snapshots are a typical feature of Logical Volume
 		Managers such as LVM, so we first need to have that setup.
@@ -295,69 +295,69 @@
 		The following is provided as an example and will be most helpful for Debian users.  Again, this was tested
 		using the "testing" or "Sarge" distribution.
 		</p><ul type="disc"><li><p>
-<a class="indexterm" name="id2674436"></a>
-<a class="indexterm" name="id2674443"></a>
-<a class="indexterm" name="id2674450"></a>
-<a class="indexterm" name="id2674456"></a>
-<a class="indexterm" name="id2674463"></a>
+<a class="indexterm" name="id434048"></a>
+<a class="indexterm" name="id434055"></a>
+<a class="indexterm" name="id434062"></a>
+<a class="indexterm" name="id434069"></a>
+<a class="indexterm" name="id434076"></a>
 			Install lvm10 and devfsd packages if you have not done so already.  On Debian systems, you are warned of the
 			interaction of devfs and lvm1 which requires the use of devfs filenames.  Running <code class="literal">apt-get update
 			&amp;&amp; apt-get install lvm10 devfsd xfsprogs</code> should do the trick for this example.
 			</p></li><li><p>
-<a class="indexterm" name="id2674487"></a>
-<a class="indexterm" name="id2674494"></a>
-<a class="indexterm" name="id2674500"></a>
-<a class="indexterm" name="id2674507"></a>
-<a class="indexterm" name="id2674514"></a>
+<a class="indexterm" name="id434096"></a>
+<a class="indexterm" name="id434103"></a>
+<a class="indexterm" name="id434110"></a>
+<a class="indexterm" name="id434116"></a>
+<a class="indexterm" name="id434123"></a>
 			Now you need to create a volume.  You will need to create a partition (or partitions) to add to your volume.
 			Use your favorite partitioning tool (e.g., Linux fdisk, cfdisk, etc.).  The partition type should be set to
 			0x8e for "Linux LVM."  In this example, we will use /dev/hdb1.
 			</p><p>
-<a class="indexterm" name="id2674529"></a>
-<a class="indexterm" name="id2674536"></a>
-<a class="indexterm" name="id2674543"></a>
+<a class="indexterm" name="id434136"></a>
+<a class="indexterm" name="id434142"></a>
+<a class="indexterm" name="id434149"></a>
 			Once you have the Linux LVM partition (type 0x8e), you can run a series of commands to create the LVM volume.
 			You can use several disks and/or partitions, but we will use only one in this example.  You may also need to
 			load the kernel module with something like <code class="literal">modprobe lvm-mod</code> and set your system up to load
 			it on reboot by adding it to (<code class="filename">/etc/modules</code>).
 			</p></li><li><p>
-<a class="indexterm" name="id2674572"></a>
+<a class="indexterm" name="id434175"></a>
 			Create the physical volume with <code class="literal">pvcreate /dev/hdb1</code>
 			</p></li><li><p>
-<a class="indexterm" name="id2674590"></a>
-<a class="indexterm" name="id2674596"></a>
+<a class="indexterm" name="id434192"></a>
+<a class="indexterm" name="id434199"></a>
 			Create the volume group and add /dev/hda1 to it with <code class="literal">vgcreate shadowvol /dev/hdb1</code>
 			</p><p>
-<a class="indexterm" name="id2674614"></a>
+<a class="indexterm" name="id434216"></a>
 			You can use <code class="literal">vgdisplay</code> to review information about the volume group.
 			</p></li><li><p>
-<a class="indexterm" name="id2674632"></a>
+<a class="indexterm" name="id434233"></a>
 			Now you can create the logical volume with something like <code class="literal">lvcreate -L400M -nsh_test shadowvol</code>
 			</p><p>
-<a class="indexterm" name="id2674649"></a>
+<a class="indexterm" name="id434250"></a>
 			This creates the logical volume of 400 MBs named "sh_test" in the volume group we created called shadowvol.
 			If everything is working so far, you should see them in <code class="filename">/dev/shadowvol</code>.
 			</p></li><li><p>
-<a class="indexterm" name="id2674669"></a>
+<a class="indexterm" name="id434268"></a>
 			Now we should be ready to format the logical volume we named sh_test with <code class="literal">mkfs.xfs
 			/dev/shadowvol/sh_test</code>
 			</p><p>
-<a class="indexterm" name="id2674687"></a>
-<a class="indexterm" name="id2674694"></a>
-<a class="indexterm" name="id2674700"></a>
-<a class="indexterm" name="id2674707"></a>
-<a class="indexterm" name="id2674714"></a>
+<a class="indexterm" name="id434285"></a>
+<a class="indexterm" name="id434292"></a>
+<a class="indexterm" name="id434298"></a>
+<a class="indexterm" name="id434305"></a>
+<a class="indexterm" name="id434312"></a>
 			You can format the logical volume with any file system you choose, but make sure to use one that allows you to
 			take advantage of the additional features of LVM such as freezing, resizing, and growing your file systems.
 			</p><p>
-<a class="indexterm" name="id2674728"></a>
-<a class="indexterm" name="id2674735"></a>
-<a class="indexterm" name="id2674742"></a>
+<a class="indexterm" name="id434324"></a>
+<a class="indexterm" name="id434331"></a>
+<a class="indexterm" name="id434338"></a>
 			Now we have an LVM volume where we can play with the shadow_copy VFS module.
 			</p></li><li><p>
-<a class="indexterm" name="id2674754"></a>
-<a class="indexterm" name="id2674761"></a>
-<a class="indexterm" name="id2674768"></a>
+<a class="indexterm" name="id434350"></a>
+<a class="indexterm" name="id434356"></a>
+<a class="indexterm" name="id434363"></a>
 			Now we need to prepare the directory with something like
 </p><pre class="screen">
 <code class="prompt">root# </code> mkdir -p /data/shadow_share
@@ -366,19 +366,19 @@
 			you can use it.  If in doubt, use <code class="literal">chmod 777 /data/shadow_share</code> and tighten the permissions
 			once you get things working.
 			</p></li><li><p>
-<a class="indexterm" name="id2674802"></a>
+<a class="indexterm" name="id434394"></a>
 			Mount the LVM volume using something like <code class="literal">mount /dev/shadowvol/sh_test /data/shadow_share</code>
 			</p><p>
-<a class="indexterm" name="id2674820"></a>
+<a class="indexterm" name="id434411"></a>
 			You may also want to edit your <code class="filename">/etc/fstab</code> so that this partition mounts during the system boot.
 			</p></li></ul></div></li><li><p><b>Install &amp; Configure the shadow_copy VFS Module. </b>
 		Finally we get to the actual shadow_copy VFS module.  The shadow_copy VFS module should be available in Samba
 		3.0.3 and higher.  The smb.conf configuration is pretty standard.  Here is our example of a share configured
 		with the shadow_copy VFS module:
-		</p><div class="example"><a name="vfsshadow"></a><p class="title"><b>Example 23.3. Share With shadow_copy VFS</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[shadow_share]</code></em></td></tr><tr><td><a class="indexterm" name="id2674877"></a><em class="parameter"><code>comment = Shadow Copy Enabled Share</code></em></td></tr><tr><td><a class="indexterm" name="id2674889"></a><em class="parameter"><code>path = /data/shadow_share</code></em></td></tr><tr><td><a class="indexterm" name="id2674901"></a><em class="parameter"><code>vfs objects = shadow_copy</code></em></td></tr><tr><td><a class="indexterm" name="id2674912"></a><em class="parameter"><code>writeable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2674924"></a><em class="parameter"><code>browseable = yes</code></em></td></tr></table></div></div><br class="example-break"></li><li><p><b>Create Snapshots and Make Them Available to shadow_copy.so. </b>
-<a class="indexterm" name="id2674947"></a>
-<a class="indexterm" name="id2674954"></a>
-<a class="indexterm" name="id2674961"></a>
+		</p><div class="example"><a name="vfsshadow"></a><p class="title"><b>Example 23.3. Share With shadow_copy VFS</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[shadow_share]</code></em></td></tr><tr><td><a class="indexterm" name="id434464"></a><em class="parameter"><code>comment = Shadow Copy Enabled Share</code></em></td></tr><tr><td><a class="indexterm" name="id434476"></a><em class="parameter"><code>path = /data/shadow_share</code></em></td></tr><tr><td><a class="indexterm" name="id434487"></a><em class="parameter"><code>vfs objects = shadow_copy</code></em></td></tr><tr><td><a class="indexterm" name="id434499"></a><em class="parameter"><code>writeable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id434510"></a><em class="parameter"><code>browseable = yes</code></em></td></tr></table></div></div><br class="example-break"></li><li><p><b>Create Snapshots and Make Them Available to shadow_copy.so. </b>
+<a class="indexterm" name="id434533"></a>
+<a class="indexterm" name="id434540"></a>
+<a class="indexterm" name="id434547"></a>
 		Before you can browse the shadow copies, you must create them and mount them.  This will most likely be done
 		with a script that runs as a cron job.  With this particular solution, the shadow_copy VFS module is used to
 		browse LVM snapshots.  Those snapshots are not created by the module.  They are not made available by the
@@ -404,15 +404,15 @@
 		your XP client you can right-click on specific files or in the empty space of the shadow_share and view the
 		"properties."  If anything has changed, then you will see it on the "Previous Versions" tab of the properties
 		window.
-		</p></li></ol></div></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2675024"></a>VFS Modules Available Elsewhere</h2></div></div></div><p>
-<a class="indexterm" name="id2675032"></a>
+		</p></li></ol></div></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id434600"></a>VFS Modules Available Elsewhere</h2></div></div></div><p>
+<a class="indexterm" name="id434608"></a>
 This section contains a listing of various other VFS modules that have been posted but do not currently reside
 in the Samba CVS tree for one reason or another (e.g., it is easy for the maintainer to have his or her own
 CVS tree).
 </p><p>
 No statements about the stability or functionality of any module should be implied due to its presence here.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2675049"></a>DatabaseFS</h3></div></div></div><p>
-<a class="indexterm" name="id2675057"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id434622"></a>DatabaseFS</h3></div></div></div><p>
+<a class="indexterm" name="id434630"></a>
 URL: <a class="ulink" href="http://www.css.tayloru.edu/~elorimer/databasefs/index.php" target="_top">
 Taylors University DatabaeFS</a>
 </p><p>By <a class="ulink" href="mailto:elorimer at css.tayloru.edu" target="_top">Eric Lorimer.</a></p><p>
@@ -425,13 +425,13 @@
 </p><p>
 Any feedback would be appreciated: comments, suggestions, patches, and so on. If nothing else, it
 might prove useful for someone else who wishes to create a virtual filesystem.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2675109"></a>vscan</h3></div></div></div><a class="indexterm" name="id2675114"></a><p>URL: <a class="ulink" href="http://www.openantivirus.org/projects.php#samba-vscan" target="_top">
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id434675"></a>vscan</h3></div></div></div><a class="indexterm" name="id434680"></a><p>URL: <a class="ulink" href="http://www.openantivirus.org/projects.php#samba-vscan" target="_top">
 Open Anti-Virus vscan</a>
 </p><p>
-<a class="indexterm" name="id2675136"></a>
+<a class="indexterm" name="id434701"></a>
 samba-vscan is a proof-of-concept module for Samba, which provides on-access anti-virus support for files
 shared using Samba.  samba-vscan supports various virus scanners and is maintained by Rainer Link.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2675148"></a>vscan-clamav</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id434712"></a>vscan-clamav</h3></div></div></div><p>
 Samba users have been using the RPMS from SerNet without a problem.
 OpenSUSE Linux users have also used the vscan scanner for quite some time
 with excellent results. It does impact overall write performance though.

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/apa.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/apa.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/apa.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,50 +1,50 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Appendix A.  GNU General Public License version 3</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="DNSDHCP.html" title="Chapter 47. DNS and DHCP Configuration Guide"><link rel="next" href="go01.html" title="Glossary"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix A. 
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Appendix A.  GNU General Public License version 3</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="DNSDHCP.html" title="Chapter 47. DNS and DHCP Configuration Guide"><link rel="next" href="go01.html" title="Glossary"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix A. 
     <acronym class="acronym">GNU</acronym> General Public License version 3
-  </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="DNSDHCP.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="go01.html">Next</a></td></tr></table><hr></div><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="id2715190"></a>Appendix A. 
+  </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="DNSDHCP.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="go01.html">Next</a></td></tr></table><hr></div><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="id471538"></a>Appendix A. 
     <acronym class="acronym">GNU</acronym> General Public License version 3
-  </h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="bridgehead"><a href="apa.html#id2715218">A. 
+  </h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="bridgehead"><a href="apa.html#id471564">A. 
     Preamble
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2715362">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id471673">A. 
     TERMS AND CONDITIONS
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2715366">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id471677">A. 
     0. Definitions.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2715458">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id471740">A. 
     1. Source Code.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2715557">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id471802">A. 
     2. Basic Permissions.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2715597">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id471830">A. 
     3. Protecting Users&#8217; Legal Rights From Anti-Circumvention Law.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2715628">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id471854">A. 
     4. Conveying Verbatim Copies.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2715655">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id471873">A. 
     5. Conveying Modified Source Versions.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2715751">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id471945">A. 
     6. Conveying Non-Source Forms.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2715946">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472077">A. 
      7. Additional Terms.
-   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2716081">A. 
+   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472182">A. 
      8. Termination.
-   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2716125">A. 
+   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472214">A. 
      9. Acceptance Not Required for Having Copies.
-   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2716154">A. 
+   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472233">A. 
      10. Automatic Licensing of Downstream Recipients.
-   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2716206">A. 
+   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472267">A. 
     11. Patents.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2716352">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472350">A. 
     12. No Surrender of Others&#8217; Freedom.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2716374">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472366">A. 
     13. Use with the ???TITLE??? Affero General Public License.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2716402">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472390">A. 
     14. Revised Versions of this License.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2716465">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472437">A. 
     15. Disclaimer of Warranty.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2716491">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472454">A. 
     16. Limitation of Liability.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2716511">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472469">A. 
     17. Interpretation of Sections 15 and 16.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2716528">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472482">A. 
     END OF TERMS AND CONDITIONS
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2716532">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472485">A. 
     How to Apply These Terms to Your New Programs
   </a></span></dt></dl></div><p>
     Version 3, 29 June 2007
@@ -54,7 +54,7 @@
   </p><p>
     Everyone is permitted to copy and distribute verbatim copies of this license
     document, but changing it is not allowed.
-  </p><h2><a name="id2715218"></a>
+  </p><h2><a name="id471564"></a>
     Preamble
   </h2><p>
     The <acronym class="acronym">GNU</acronym> General Public License is a free, copyleft
@@ -118,9 +118,9 @@
   </p><p>
     The precise terms and conditions for copying, distribution and modification
     follow.
-  </p><h2><a name="id2715362"></a>
+  </p><h2><a name="id471673"></a>
     TERMS AND CONDITIONS
-  </h2><h2><a name="id2715366"></a>
+  </h2><h2><a name="id471677"></a>
     0. Definitions.
   </h2><p>
     &#8220;This License&#8221; refers to version 3 of the <acronym class="acronym">GNU</acronym>
@@ -162,7 +162,7 @@
     License, and how to view a copy of this License.  If the interface presents
     a list of user commands or options, such as a menu, a prominent item in the
     list meets this criterion.
-  </p><h2><a name="id2715458"></a>
+  </p><h2><a name="id471740"></a>
     1. Source Code.
   </h2><p>
     The &#8220;source code&#8221; for a work means the preferred form of the
@@ -202,7 +202,7 @@
     automatically from other parts of the Corresponding Source.
   </p><p>
     The Corresponding Source for a work in source code form is that same work.
-  </p><h2><a name="id2715557"></a>
+  </p><h2><a name="id471802"></a>
     2. Basic Permissions.
   </h2><p>
     All rights granted under this License are granted for the term of copyright
@@ -227,7 +227,7 @@
     Conveying under any other circumstances is permitted solely under the
     conditions stated below.  Sublicensing is not allowed; section 10 makes it
     unnecessary.
-  </p><h2><a name="id2715597"></a>
+  </p><h2><a name="id471830"></a>
     3. Protecting Users&#8217; Legal Rights From Anti-Circumvention Law.
   </h2><p>
     No covered work shall be deemed part of an effective technological measure
@@ -242,7 +242,7 @@
     the work as a means of enforcing, against the work&#8217;s users, your or
     third parties&#8217; legal rights to forbid circumvention of technological
     measures.
-  </p><h2><a name="id2715628"></a>
+  </p><h2><a name="id471854"></a>
     4. Conveying Verbatim Copies.
   </h2><p>
     You may convey verbatim copies of the Program&#8217;s source code as you
@@ -255,7 +255,7 @@
   </p><p>
     You may charge any price or no price for each copy that you convey, and you
     may offer support or warranty protection for a fee.
-  </p><h2><a name="id2715655"></a>
+  </p><h2><a name="id471873"></a>
     5. Conveying Modified Source Versions.
   </h2><p>
     You may convey a work based on the Program, or the modifications to produce
@@ -291,7 +291,7 @@
     or legal rights of the compilation&#8217;s users beyond what the individual works
     permit.  Inclusion of a covered work in an aggregate does not cause
     this License to apply to the other parts of the aggregate.
-  </p><h2><a name="id2715751"></a>
+  </p><h2><a name="id471945"></a>
     6. Conveying Non-Source Forms.
   </h2><p>
     You may convey a covered work in object code form under the terms of
@@ -386,7 +386,7 @@
     (and with an implementation available to the public in source code form),
     and must require no special password or key for unpacking, reading or
     copying.
-  </p><h2><a name="id2715946"></a>
+  </p><h2><a name="id472077"></a>
      7. Additional Terms.
    </h2><p>
      &#8220;Additional permissions&#8221; are terms that supplement the terms of
@@ -450,7 +450,7 @@
      Additional terms, permissive or non-permissive, may be stated in the form
      of a separately written license, or stated as exceptions; the above
      requirements apply either way.
-   </p><h2><a name="id2716081"></a>
+   </p><h2><a name="id472182"></a>
      8. Termination.
    </h2><p>
      You may not propagate or modify a covered work except as expressly provided
@@ -476,7 +476,7 @@
      License.  If your rights have been terminated and not permanently
      reinstated, you do not qualify to receive new licenses for the same
      material under section 10.
-   </p><h2><a name="id2716125"></a>
+   </p><h2><a name="id472214"></a>
      9. Acceptance Not Required for Having Copies.
    </h2><p>
      You are not required to accept this License in order to receive or run a
@@ -487,7 +487,7 @@
      These actions infringe copyright if you do not accept this License.
      Therefore, by modifying or propagating a covered work, you indicate your
      acceptance of this License to do so.
-   </p><h2><a name="id2716154"></a>
+   </p><h2><a name="id472233"></a>
      10. Automatic Licensing of Downstream Recipients.
    </h2><p>
      Each time you convey a covered work, the recipient automatically receives a
@@ -512,7 +512,7 @@
      or counterclaim in a lawsuit) alleging that any patent claim is infringed
      by making, using, selling, offering for sale, or importing the Program or
      any portion of it.
-   </p><h2><a name="id2716206"></a>
+   </p><h2><a name="id472267"></a>
     11. Patents.
   </h2><p>
     A &#8220;contributor&#8221; is a copyright holder who authorizes use under
@@ -579,7 +579,7 @@
     Nothing in this License shall be construed as excluding or limiting any
     implied license or other defenses to infringement that may otherwise be
     available to you under applicable patent law.
-  </p><h2><a name="id2716352"></a>
+  </p><h2><a name="id472350"></a>
     12. No Surrender of Others&#8217; Freedom.
   </h2><p>
     If conditions are imposed on you (whether by court order, agreement or
@@ -591,7 +591,7 @@
     to collect a royalty for further conveying from those to whom you convey the
     Program, the only way you could satisfy both those terms and this License
     would be to refrain entirely from conveying the Program.
-  </p><h2><a name="id2716374"></a>
+  </p><h2><a name="id472366"></a>
     13. Use with the <acronym class="acronym">GNU</acronym> Affero General Public License.
   </h2><p>
     Notwithstanding any other provision of this License, you have permission to
@@ -602,7 +602,7 @@
     requirements of the <acronym class="acronym">GNU</acronym> Affero General Public License,
     section 13, concerning interaction through a network will apply to the
     combination as such.
-  </p><h2><a name="id2716402"></a>
+  </p><h2><a name="id472390"></a>
     14. Revised Versions of this License.
   </h2><p>
     The Free Software Foundation may publish revised and/or new versions of the
@@ -627,7 +627,7 @@
     Later license versions may give you additional or different permissions.
     However, no additional obligations are imposed on any author or copyright
     holder as a result of your choosing to follow a later version.
-  </p><h2><a name="id2716465"></a>
+  </p><h2><a name="id472437"></a>
     15. Disclaimer of Warranty.
   </h2><p>
     THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
@@ -638,7 +638,7 @@
     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH
     YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
     NECESSARY SERVICING, REPAIR OR CORRECTION.
-  </p><h2><a name="id2716491"></a>
+  </p><h2><a name="id472454"></a>
     16. Limitation of Liability.
   </h2><p>
     IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
@@ -650,7 +650,7 @@
     PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
     EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
     SUCH DAMAGES.
-  </p><h2><a name="id2716511"></a>
+  </p><h2><a name="id472469"></a>
     17. Interpretation of Sections 15 and 16.
   </h2><p>
     If the disclaimer of warranty and limitation of liability provided above
@@ -659,9 +659,9 @@
     waiver of all civil liability in connection with the Program, unless a
     warranty or assumption of liability accompanies a copy of the Program in
     return for a fee.
-  </p><h2><a name="id2716528"></a>
+  </p><h2><a name="id472482"></a>
     END OF TERMS AND CONDITIONS
-  </h2><h2><a name="id2716532"></a>
+  </h2><h2><a name="id472485"></a>
     How to Apply These Terms to Your New Programs
   </h2><p>
     If you develop a new program, and you want it to be of the greatest possible

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/bugreport.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/bugreport.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/bugreport.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,6 +1,6 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 40. Reporting Bugs</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="troubleshooting.html" title="Part V. Troubleshooting"><link rel="prev" href="problems.html" title="Chapter 39. Analyzing and Solving Samba Problems"><link rel="next" href="Appendix.html" title="Part VI. Reference Section"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 40. Reporting Bugs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="problems.html">Prev</a> </td><th width="60%" align="center">Part V. Troubleshooting</th><td width="20%" align="right"> <a accesskey="n" href="Appendix.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="bugreport"></a>Chapter 40. Reporting Bugs</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Andrew</span> <span class="surname">Tridgell</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:tridge at samba.org">tridge at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate"> 27 June 1997 </p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="bugreport.html#id2708335">Introduction</a></span></dt><dt><span class="sect1"><a href="bugreport.html#id2708425">General Information</a></span></dt><dt><span class="sect1"><a href="bugreport.html#dbglvl">Debug Levels</a></span></dt><dd><dl><dt><span class="sect2"><a href="bugreport.html#id2708660">Debugging-Specific Operations</a></span></dt></dl></dd><dt><span class="sect1"><a href="bugreport.html#id2708862">Internal Errors</a></span></dt><dt><span class="sect1"><a href="bugreport.html#id2708995">Attaching to a Running Process</a></span></dt><dt><span class="sect1"><a href="bugreport.html#id2709120">Patches</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2708335"></a>Introduction</h2></div></div></div><p>
-<a class="indexterm" name="id2708343"></a>
-<a class="indexterm" name="id2708350"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 40. Reporting Bugs</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="troubleshooting.html" title="Part V. Troubleshooting"><link rel="prev" href="problems.html" title="Chapter 39. Analyzing and Solving Samba Problems"><link rel="next" href="Appendix.html" title="Part VI. Reference Section"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 40. Reporting Bugs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="problems.html">Prev</a> </td><th width="60%" align="center">Part V. Troubleshooting</th><td width="20%" align="right"> <a accesskey="n" href="Appendix.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="bugreport"></a>Chapter 40. Reporting Bugs</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Andrew</span> <span class="surname">Tridgell</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:tridge at samba.org">tridge at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate"> 27 June 1997 </p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="bugreport.html#id465317">Introduction</a></span></dt><dt><span class="sect1"><a href="bugreport.html#id465397">General Information</a></span></dt><dt><span class="sect1"><a href="bugreport.html#dbglvl">Debug Levels</a></span></dt><dd><dl><dt><span class="sect2"><a href="bugreport.html#id465615">Debugging-Specific Operations</a></span></dt></dl></dd><dt><span class="sect1"><a href="bugreport.html#id465810">Internal Errors</a></span></dt><dt><span class="sect1"><a href="bugreport.html#id465932">Attaching to a Running Process</a></span></dt><dt><span class="sect1"><a href="bugreport.html#id466047">Patches</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id465317"></a>Introduction</h2></div></div></div><p>
+<a class="indexterm" name="id465325"></a>
+<a class="indexterm" name="id465332"></a>
 Please report bugs using Samba's <a class="ulink" href="https://bugzilla.samba.org/" target="_top">Bugzilla</a> facilities and take
 the time to read this file before you submit a bug report. Also, check to see if it has changed between
 releases, as we may be changing the bug reporting mechanism at some point.
@@ -12,9 +12,9 @@
 and a fix if you send us a &#8220;<span class="quote">developer-friendly</span>&#8221; bug report that lets
 us fix it fast. 
 </p><p>
-<a class="indexterm" name="id2708382"></a>
-<a class="indexterm" name="id2708389"></a>
-<a class="indexterm" name="id2708396"></a>
+<a class="indexterm" name="id465360"></a>
+<a class="indexterm" name="id465366"></a>
+<a class="indexterm" name="id465373"></a>
 If you post the bug to the comp.protocols.smb
 newsgroup or the mailing list, do not assume that we will read it. If you suspect that your 
 problem is not a bug but a configuration problem, it is better to send 
@@ -24,7 +24,7 @@
 You may also like to look though the recent mailing list archives,
 which are conveniently accessible on the Samba Web pages
 at <a class="ulink" href="http://samba.org/samba/" target="_top">http://samba.org/samba/</a>.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2708425"></a>General Information</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id465397"></a>General Information</h2></div></div></div><p>
 Before submitting a bug report, check your config for silly
 errors. Look in your log files for obvious messages that tell
 you've misconfigured something. Run testparm to check your config
@@ -42,13 +42,13 @@
 10 showing the problem may be appropriate. A higher level gives more
 detail but may use too much disk space.
 </p><p>
-<a class="indexterm" name="id2708476"></a>
-<a class="indexterm" name="id2708483"></a>
+<a class="indexterm" name="id465442"></a>
+<a class="indexterm" name="id465448"></a>
 To set the debug level, use the <a class="link" href="smb.conf.5.html#LOGLEVEL">log level</a> in your 
 <code class="filename">smb.conf</code>. You may also find it useful to set the log 
 level higher for just one machine and keep separate logs for each machine. 
 To do this, add the following lines to your main <code class="filename">smb.conf</code> file:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2708523"></a><em class="parameter"><code>log level = 10</code></em></td></tr><tr><td><a class="indexterm" name="id2708535"></a><em class="parameter"><code>log file = /usr/local/samba/lib/log.%m</code></em></td></tr><tr><td><a class="indexterm" name="id2708546"></a><em class="parameter"><code>include = /usr/local/samba/lib/smb.conf.%m</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id465486"></a><em class="parameter"><code>log level = 10</code></em></td></tr><tr><td><a class="indexterm" name="id465498"></a><em class="parameter"><code>log file = /usr/local/samba/lib/log.%m</code></em></td></tr><tr><td><a class="indexterm" name="id465509"></a><em class="parameter"><code>include = /usr/local/samba/lib/smb.conf.%m</code></em></td></tr></table><p>
 and create a file <code class="filename">/usr/local/samba/lib/smb.conf.<em class="replaceable"><code>machine</code></em></code> where
 <em class="replaceable"><code>machine</code></em> is the name of the client you wish to debug. In that file put any
 <code class="filename">smb.conf</code> commands you want; for example, <a class="link" href="smb.conf.5.html#LOGLEVEL">log level</a> may be useful. This also allows
@@ -61,23 +61,23 @@
 debugging information. For most debugging operations, you may not need a setting higher than
 <code class="constant">3</code>. Nearly all bugs can be tracked at a setting of <code class="constant">10</code>, but be
 prepared for a large volume of log data.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2708660"></a>Debugging-Specific Operations</h3></div></div></div><p>
-<a class="indexterm" name="id2708668"></a>
-<a class="indexterm" name="id2708675"></a>
-<a class="indexterm" name="id2708681"></a>
-<a class="indexterm" name="id2708688"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id465615"></a>Debugging-Specific Operations</h3></div></div></div><p>
+<a class="indexterm" name="id465623"></a>
+<a class="indexterm" name="id465629"></a>
+<a class="indexterm" name="id465636"></a>
+<a class="indexterm" name="id465643"></a>
 	Samba-3.x permits debugging (logging) of specific functional components without unnecessarily
 	cluttering the log files with detailed logs for all operations. An example configuration to 
 	achieve this is shown in:
 	</p><p>
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2708708"></a><em class="parameter"><code>log level = 0 tdb:3 passdb:5 auth:4 vfs:2</code></em></td></tr><tr><td><a class="indexterm" name="id2708719"></a><em class="parameter"><code>max log size = 0</code></em></td></tr><tr><td><a class="indexterm" name="id2708731"></a><em class="parameter"><code>log file = /var/log/samba/%U.%m.log</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id465660"></a><em class="parameter"><code>log level = 0 tdb:3 passdb:5 auth:4 vfs:2</code></em></td></tr><tr><td><a class="indexterm" name="id465672"></a><em class="parameter"><code>max log size = 0</code></em></td></tr><tr><td><a class="indexterm" name="id465684"></a><em class="parameter"><code>log file = /var/log/samba/%U.%m.log</code></em></td></tr></table><p>
 </p><p>
 	This will cause the level of detail to be expanded to the debug class (log level) passed to
 	each functional area per the value shown above. The first value passed to the <em class="parameter"><code>log level</code></em>
 	of <code class="constant">0</code> means turn off all unnecessary debugging except the debug classes set for
 	the functional areas as specified. The table shown in <a class="link" href="bugreport.html#dbgclass" title="Table 40.1. Debuggable Functions">Debuggable Functions</a>
 	may be used to attain very precise analysis of each SMB operation Samba is conducting.
-	</p><div class="table"><a name="dbgclass"></a><p class="title"><b>Table 40.1. Debuggable Functions</b></p><div class="table-contents"><table summary="Debuggable Functions" border="1"><colgroup><col><col></colgroup><thead><tr><th align="center">Function Name</th><th align="center">Function Name</th></tr></thead><tbody><tr><td align="center">all</td><td align="center">passdb</td></tr><tr><td align="center">tdb</td><td align="center">sam</td></tr><tr><td align="center">printdrivers</td><td align="center">auth</td></tr><tr><td align="center">lanman</td><td align="center">winbind</td></tr><tr><td align="center">smb</td><td align="center">vfs</td></tr><tr><td align="center">rpc_parse</td><td align="center">idmap</td></tr><tr><td align="center">rpc_srv</td><td align="center">quota</td></tr><tr><td align="center">rpc_cli</td><td align="center">acls</td></tr></tbody></table></div></div><br class="table-break"></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2708862"></a>Internal Errors</h2></div></div></div><p>
+	</p><div class="table"><a name="dbgclass"></a><p class="title"><b>Table 40.1. Debuggable Functions</b></p><div class="table-contents"><table summary="Debuggable Functions" border="1"><colgroup><col><col></colgroup><thead><tr><th align="center">Function Name</th><th align="center">Function Name</th></tr></thead><tbody><tr><td align="center">all</td><td align="center">passdb</td></tr><tr><td align="center">tdb</td><td align="center">sam</td></tr><tr><td align="center">printdrivers</td><td align="center">auth</td></tr><tr><td align="center">lanman</td><td align="center">winbind</td></tr><tr><td align="center">smb</td><td align="center">vfs</td></tr><tr><td align="center">rpc_parse</td><td align="center">idmap</td></tr><tr><td align="center">rpc_srv</td><td align="center">quota</td></tr><tr><td align="center">rpc_cli</td><td align="center">acls</td></tr></tbody></table></div></div><br class="table-break"></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id465810"></a>Internal Errors</h2></div></div></div><p>
 If you get the message &#8220;<span class="quote"><span class="errorname">INTERNAL ERROR</span></span>&#8221; in your log files, 
 it means that Samba got an unexpected signal while running. It is probably a
 segmentation fault and almost certainly means a bug in Samba (unless
@@ -91,35 +91,35 @@
 You should also detail how to reproduce the problem, if
 possible. Please make this reasonably detailed.
 </p><p>
-<a class="indexterm" name="id2708894"></a>
+<a class="indexterm" name="id465837"></a>
 You may also find that a core file appeared in a <code class="filename">corefiles</code>
 subdirectory of the directory where you keep your Samba log
 files. This file is the most useful tool for tracking down the bug. To
 use it, you do this:
-<a class="indexterm" name="id2708910"></a>
-<a class="indexterm" name="id2708917"></a>
+<a class="indexterm" name="id465852"></a>
+<a class="indexterm" name="id465858"></a>
 </p><pre class="screen">
 <code class="prompt">$ </code><strong class="userinput"><code>gdb smbd core</code></strong>
 </pre><p>
 </p><p>
-<a class="indexterm" name="id2708942"></a>
-<a class="indexterm" name="id2708949"></a>
+<a class="indexterm" name="id465884"></a>
+<a class="indexterm" name="id465890"></a>
 adding appropriate paths to smbd and core so gdb can find them. If you
 do not have gdb, try <strong class="userinput"><code>dbx</code></strong>. Then within the debugger,
 use the command <code class="literal">where</code> to give a stack trace of where the
 problem occurred. Include this in your report.
 </p><p>
-<a class="indexterm" name="id2708974"></a>
+<a class="indexterm" name="id465914"></a>
 If you know any assembly language, do a <code class="literal">disass</code> of the routine
 where the problem occurred (if it's in a library routine, then
 disassemble the routine that called it) and try to work out exactly
 where the problem is by looking at the surrounding code. Even if you
 do not know assembly, including this information in the bug report can be
 useful. 
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2708995"></a>Attaching to a Running Process</h2></div></div></div><p>
-<a class="indexterm" name="id2709003"></a>
-<a class="indexterm" name="id2709010"></a>
-<a class="indexterm" name="id2709016"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id465932"></a>Attaching to a Running Process</h2></div></div></div><p>
+<a class="indexterm" name="id465940"></a>
+<a class="indexterm" name="id465946"></a>
+<a class="indexterm" name="id465953"></a>
 Unfortunately, some UNIXes (in particular some recent Linux kernels)
 refuse to dump a core file if the task has changed UID (which smbd
 does often). To debug with this sort of system, you could try to attach
@@ -145,12 +145,12 @@
 </p><pre class="screen">
 <code class="prompt">root# </code> gdb /usr/local/samba/sbin/smbd
 </pre><p>
-<a class="indexterm" name="id2709101"></a>
+<a class="indexterm" name="id466030"></a>
 then &#8220;<span class="quote">attach `pid'</span>&#8221; (of the spinning process), then type &#8220;<span class="quote">bt</span>&#8221; to
 get a backtrace to see where the smbd is in the call path.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2709120"></a>Patches</h2></div></div></div><p>
-<a class="indexterm" name="id2709127"></a>
-<a class="indexterm" name="id2709134"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id466047"></a>Patches</h2></div></div></div><p>
+<a class="indexterm" name="id466054"></a>
+<a class="indexterm" name="id466061"></a>
 The best sort of bug report is one that includes a fix! If you send us
 patches, please use <strong class="userinput"><code>diff -u</code></strong> format if your version of 
 diff supports it; otherwise, use <strong class="userinput"><code>diff -c4</code></strong>. Make sure 

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/cfgsmarts.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/cfgsmarts.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/cfgsmarts.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,52 +1,52 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 34. Advanced Configuration Techniques</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="largefile.html" title="Chapter 33. Handling Large Directories"><link rel="next" href="migration.html" title="Part IV. Migration and Updating"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 34. Advanced Configuration Techniques</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="largefile.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="migration.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="cfgsmarts"></a>Chapter 34. Advanced Configuration Techniques</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">June 30, 2005</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="cfgsmarts.html#id2696218">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="cfgsmarts.html#id2696226">Multiple Server Hosting</a></span></dt><dt><span class="sect2"><a href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></span></dt><dt><span class="sect2"><a href="cfgsmarts.html#id2697638">Multiple Virtual Server Hosting</a></span></dt></dl></dd></dl></div><p>
-<a class="indexterm" name="id2696061"></a>
-<a class="indexterm" name="id2696068"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 34. Advanced Configuration Techniques</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="largefile.html" title="Chapter 33. Handling Large Directories"><link rel="next" href="migration.html" title="Part IV. Migration and Updating"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 34. Advanced Configuration Techniques</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="largefile.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="migration.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="cfgsmarts"></a>Chapter 34. Advanced Configuration Techniques</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">June 30, 2005</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="cfgsmarts.html#id453913">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="cfgsmarts.html#id453922">Multiple Server Hosting</a></span></dt><dt><span class="sect2"><a href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></span></dt><dt><span class="sect2"><a href="cfgsmarts.html#id455267">Multiple Virtual Server Hosting</a></span></dt></dl></dd></dl></div><p>
+<a class="indexterm" name="id453775"></a>
+<a class="indexterm" name="id453782"></a>
 Since the release of the first edition of this book there have been repeated requests to better document
 configuration techniques that may help a network administrator to get more out of Samba. Some users have asked
 for documentation regarding the use of the <a class="link" href="smb.conf.5.html#INCLUDE">include = file-name</a> parameter.
 </p><p>
-<a class="indexterm" name="id2696096"></a>
-<a class="indexterm" name="id2696103"></a>
+<a class="indexterm" name="id453806"></a>
+<a class="indexterm" name="id453812"></a>
 Commencing around mid-2004 there has been increasing interest in the ability to host multiple Samba servers on
 one machine. There has also been an interest in the hosting of multiple Samba server personalities on one
 server.
 </p><p>
-<a class="indexterm" name="id2696117"></a>
-<a class="indexterm" name="id2696124"></a>
+<a class="indexterm" name="id453824"></a>
+<a class="indexterm" name="id453831"></a>
 Feedback from technical reviewers made the inclusion of this chapter a necessity. So, here is an 
 answer the questions that have to date not been adequately addressed. Additional user input is welcome as
 it will help this chapter to mature. What is presented here is just a small beginning.
 </p><p>
-<a class="indexterm" name="id2696139"></a>
-<a class="indexterm" name="id2696146"></a>
-<a class="indexterm" name="id2696153"></a>
+<a class="indexterm" name="id453844"></a>
+<a class="indexterm" name="id453851"></a>
+<a class="indexterm" name="id453857"></a>
 There are a number of ways in which multiple servers can be hosted on a single Samba server. Multiple server
 hosting makes it possible to host multiple domain controllers on one machine. Each such machine is
 independent, and each can be stopped or started without affecting another.
 </p><p>
-<a class="indexterm" name="id2696168"></a>
-<a class="indexterm" name="id2696175"></a>
-<a class="indexterm" name="id2696181"></a>
+<a class="indexterm" name="id453870"></a>
+<a class="indexterm" name="id453877"></a>
+<a class="indexterm" name="id453883"></a>
 Sometimes it is desirable to host multiple servers, each with its own security mode. For example, a single
 UNIX/Linux host may be a domain member server (DMS) as well as a generic anonymous print server. In this case,
 only domain member machines and domain users can access the DMS, but even guest users can access the generic
 print server. Another example of a situation where it may be beneficial to host a generic (anonymous) server
 is to host a CDROM server.
 </p><p>
-<a class="indexterm" name="id2696199"></a>
-<a class="indexterm" name="id2696206"></a>
+<a class="indexterm" name="id453897"></a>
+<a class="indexterm" name="id453904"></a>
 Some environments dictate the need to have separate servers, each with their own resources, each of which are
 accessible only by certain users or groups. This is one of the simple, but highly effective, ways that Samba
 can replace many physical Windows servers in one Samba installation.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2696218"></a>Implementation</h2></div></div></div><p>
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2696226"></a>Multiple Server Hosting</h3></div></div></div><p>
-<a class="indexterm" name="id2696234"></a>
-<a class="indexterm" name="id2696242"></a>
-<a class="indexterm" name="id2696248"></a>
-<a class="indexterm" name="id2696255"></a>
-<a class="indexterm" name="id2696262"></a>
-<a class="indexterm" name="id2696269"></a>
-<a class="indexterm" name="id2696276"></a>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id453913"></a>Implementation</h2></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id453922"></a>Multiple Server Hosting</h3></div></div></div><p>
+<a class="indexterm" name="id453930"></a>
+<a class="indexterm" name="id453936"></a>
+<a class="indexterm" name="id453943"></a>
+<a class="indexterm" name="id453950"></a>
+<a class="indexterm" name="id453957"></a>
+<a class="indexterm" name="id453964"></a>
+<a class="indexterm" name="id453970"></a>
 The use of multiple server hosting involves running multiple separate instances of Samba, each with it's own
 configuration file. This method is complicated by the fact that each instance of <span class="application">nmbd</span>, <span class="application">smbd</span> and <span class="application">winbindd</span>
 must have write access to entirely separate TDB files. The ability to keep separate the TDB files used by
@@ -54,58 +54,58 @@
 own default TDB directories, or by configuring these in the <code class="filename">smb.conf</code> file, in which case each instance of
 <span class="application">nmbd</span>, <span class="application">smbd</span> and <span class="application">winbindd</span> must be told to start up with its own <code class="filename">smb.conf</code> configuration file.
 </p><p>
-<a class="indexterm" name="id2696358"></a>
-<a class="indexterm" name="id2696365"></a>
-<a class="indexterm" name="id2696372"></a>
-<a class="indexterm" name="id2696379"></a>
+<a class="indexterm" name="id454049"></a>
+<a class="indexterm" name="id454056"></a>
+<a class="indexterm" name="id454063"></a>
+<a class="indexterm" name="id454070"></a>
 Each instance should operate on its own IP address (that independent IP address can be an IP Alias).
 Each instance of <span class="application">nmbd</span>, <span class="application">smbd</span> and <span class="application">winbindd</span> should listen only on its own IP socket. This can be secured
 using the <a class="link" href="smb.conf.5.html#SOCKETADDRESS">socket address</a> parameter. Each instance of the Samba server will have its
 own SID also, this means that the servers are discrete and independent of each other.
 </p><p>
-<a class="indexterm" name="id2696425"></a>
-<a class="indexterm" name="id2696432"></a>
-<a class="indexterm" name="id2696438"></a>
-<a class="indexterm" name="id2696445"></a>
-<a class="indexterm" name="id2696452"></a>
-<a class="indexterm" name="id2696459"></a>
-<a class="indexterm" name="id2696466"></a>
-<a class="indexterm" name="id2696473"></a>
-<a class="indexterm" name="id2696480"></a>
+<a class="indexterm" name="id454112"></a>
+<a class="indexterm" name="id454118"></a>
+<a class="indexterm" name="id454125"></a>
+<a class="indexterm" name="id454132"></a>
+<a class="indexterm" name="id454139"></a>
+<a class="indexterm" name="id454145"></a>
+<a class="indexterm" name="id454152"></a>
+<a class="indexterm" name="id454159"></a>
+<a class="indexterm" name="id454166"></a>
 The user of multiple server hosting is non-trivial, and requires careful configuration of each aspect of
 process management and start up. The <code class="filename">smb.conf</code> parameters that must be carefully configured includes:
 <a class="link" href="smb.conf.5.html#PRIVATEDIR">private dir</a>, <a class="link" href="smb.conf.5.html#PIDDIRECTORY">pid directory</a>,<a class="link" href="smb.conf.5.html#LOCKDIRECTORY">lock directory</a>, <a class="link" href="smb.conf.5.html#INTERFACES">interfaces</a>, <a class="link" href="smb.conf.5.html#BINDINTERFACESONLY">bind interfaces only</a>, <a class="link" href="smb.conf.5.html#NETBIOSNAME">netbios name</a>, <a class="link" href="smb.conf.5.html#WORKGROUP">workgroup</a>, <a class="link" href="smb.conf.5.html#SOCKETADDRESS">socket address</a>.
 </p><p>
-<a class="indexterm" name="id2696592"></a>
-<a class="indexterm" name="id2696599"></a>
-<a class="indexterm" name="id2696605"></a>
+<a class="indexterm" name="id454270"></a>
+<a class="indexterm" name="id454277"></a>
+<a class="indexterm" name="id454284"></a>
 Those who elect to create multiple Samba servers should have the ability to read and follow
 the Samba source code, and to modify it as needed. This mode of deployment is considered beyond the scope of
 this book. However, if someone will contribute more comprehensive documentation we will gladly review it, and
 if it is suitable extend this section of this chapter. Until such documentation becomes available the hosting
 of multiple samba servers on a single host is considered not supported for Samba-3 by the Samba Team.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2696624"></a>Multiple Virtual Server Personalities</h3></div></div></div><p>
-<a class="indexterm" name="id2696631"></a>
-<a class="indexterm" name="id2696638"></a>
-<a class="indexterm" name="id2696645"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id454297"></a>Multiple Virtual Server Personalities</h3></div></div></div><p>
+<a class="indexterm" name="id454305"></a>
+<a class="indexterm" name="id454312"></a>
+<a class="indexterm" name="id454319"></a>
 Samba has the ability to host multiple virtual servers, each of which have their own personality.  This is
 achieved by configuring an <code class="filename">smb.conf</code> file that is common to all personalities hosted.  Each server
 personality is hosted using its own <a class="link" href="smb.conf.5.html#NETBIOSALIAS">netbios alias</a> name, and each has its own distinct
 <a class="link" href="smb.conf.5.html#%5BGLOBAL%5D">[global]</a> section. Each server may have its own stanzas for services and meta-services.
 </p><p>
-<a class="indexterm" name="id2696693"></a>
-<a class="indexterm" name="id2696699"></a>
-<a class="indexterm" name="id2696706"></a>
+<a class="indexterm" name="id454361"></a>
+<a class="indexterm" name="id454368"></a>
+<a class="indexterm" name="id454374"></a>
 When hosting multiple virtual servers, each with their own personality, each can be in a different workgroup.
 Only the primary server can be a domain member or a domain controller. The personality is defined by the
 combination of the <a class="link" href="smb.conf.5.html#SECURITY">security</a> mode it is operating in, the <a class="link" href="smb.conf.5.html#NETBIOSALIASES">netbios aliases</a> it has, and the <a class="link" href="smb.conf.5.html#WORKGROUP">workgroup</a> that is defined for it.
 </p><p>
-<a class="indexterm" name="id2696756"></a>
-<a class="indexterm" name="id2696762"></a>
-<a class="indexterm" name="id2696769"></a>
-<a class="indexterm" name="id2696776"></a>
-<a class="indexterm" name="id2696783"></a>
-<a class="indexterm" name="id2696790"></a>
+<a class="indexterm" name="id454420"></a>
+<a class="indexterm" name="id454426"></a>
+<a class="indexterm" name="id454433"></a>
+<a class="indexterm" name="id454440"></a>
+<a class="indexterm" name="id454447"></a>
+<a class="indexterm" name="id454454"></a>
 This configuration style can be used either with NetBIOS names, or using NetBIOS-less SMB over TCP services.
 If run using NetBIOS mode (the most common method) it is important that the parameter <a class="link" href="smb.conf.5.html#SMBPORTS">smb ports = 139</a> should be specified in the primary <code class="filename">smb.conf</code> file. Failure to do this will result
 in Samba operating over TCP port 445 and problematic operation at best, and at worst only being able to obtain
@@ -114,10 +114,10 @@
 the value of this parameter is set at <em class="parameter"><code>139 445</code></em> then the <code class="literal">%L</code> macro
 is not serviceable.
 </p><p>
-<a class="indexterm" name="id2696868"></a>
-<a class="indexterm" name="id2696875"></a>
-<a class="indexterm" name="id2696882"></a>
-<a class="indexterm" name="id2696889"></a>
+<a class="indexterm" name="id454526"></a>
+<a class="indexterm" name="id454532"></a>
+<a class="indexterm" name="id454539"></a>
+<a class="indexterm" name="id454546"></a>
 It is possible to host multiple servers, each with their own personality, using port 445 (the NetBIOS-less SMB
 port), in which case the <code class="literal">%i</code> macro can be used to provide separate server identities (by
 IP Address). Each can have its own <a class="link" href="smb.conf.5.html#SECURITY">security</a> mode. It will be necessary to use the
@@ -125,7 +125,7 @@
 the <a class="link" href="smb.conf.5.html#NETBIOSNAME">netbios name</a> parameters to create the virtual servers. This method is considerably
 more complex than that using NetBIOS names only using TCP port 139.
 </p><p>
-<a class="indexterm" name="id2696957"></a>
+<a class="indexterm" name="id454607"></a>
 Consider an example environment that consists of a standalone, user-mode security Samba server and a read-only
 Windows 95 file server that has to be replaced. Instead of replacing the Windows 95 machine with a new PC, it
 is possible to add this server as a read-only anonymous file server that is hosted on the Samba server. Here
@@ -135,46 +135,46 @@
 The CDROM server is called <code class="literal">CDSERVER</code> and its workgroup is <code class="literal">ARTSDEPT</code>. A
 possible implementation is shown here:
 </p><p>
-<a class="indexterm" name="id2697001"></a>
-<a class="indexterm" name="id2697008"></a>
-<a class="indexterm" name="id2697015"></a>
-<a class="indexterm" name="id2697022"></a>
+<a class="indexterm" name="id454648"></a>
+<a class="indexterm" name="id454655"></a>
+<a class="indexterm" name="id454662"></a>
+<a class="indexterm" name="id454668"></a>
 The <code class="filename">smb.conf</code> file for the master server is shown in <a class="link" href="cfgsmarts.html#elastic" title="Example 34.1. Elastic smb.conf File">Elastic smb.conf File</a>.
 This file is placed in the <code class="filename">/etc/samba</code> directory. Only the <span class="application">nmbd</span> and the <span class="application">smbd</span> daemons
 are needed. When started the server will appear in Windows Network Neighborhood as the machine
 <code class="literal">ELASTIC</code> under the workgroup <code class="literal">ROBINSNEST</code>. It is helpful if the Windows
 clients that must access this server are also in the workgroup <code class="literal">ROBINSNEST</code> as this will make
 browsing much more reliable.
-</p><div class="example"><a name="elastic"></a><p class="title"><b>Example 34.1. Elastic smb.conf File</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2697112"></a><em class="parameter"><code>workgroup = ROBINSNEST</code></em></td></tr><tr><td><a class="indexterm" name="id2697124"></a><em class="parameter"><code>netbios name = ELASTIC</code></em></td></tr><tr><td><a class="indexterm" name="id2697136"></a><em class="parameter"><code>netbios aliases = CDSERVER</code></em></td></tr><tr><td><a class="indexterm" name="id2697147"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id2697159"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td><a class="indexterm" name="id2697171"></a><em class="parameter"><code>disable spoolss = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2697183"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id2697195"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id2697206"></a><em class="parameter"><code>include = /etc/samba/smb-%L.conf</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id2697227"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id2697239"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id2697251"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2697262"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[office]</code></em></td></tr><tr><td><a class="indexterm" name="id2697283"></a><em class="parameter"><code>comment = Data</code></em></td></tr><tr><td><a class="indexterm" name="id2697294"></a><em class="parameter"><code>path = /data</code></em></td></tr><tr><td><a class="indexterm" name="id2697306"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2697326"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id2697338"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2697350"></a><em class="parameter"><code>create mask = 0600</code></em></td></tr><tr><td><a class="indexterm" name="id2697362"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2697373"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2697385"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2697397"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"><p>
-<a class="indexterm" name="id2697411"></a>
+</p><div class="example"><a name="elastic"></a><p class="title"><b>Example 34.1. Elastic smb.conf File</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id454756"></a><em class="parameter"><code>workgroup = ROBINSNEST</code></em></td></tr><tr><td><a class="indexterm" name="id454767"></a><em class="parameter"><code>netbios name = ELASTIC</code></em></td></tr><tr><td><a class="indexterm" name="id454778"></a><em class="parameter"><code>netbios aliases = CDSERVER</code></em></td></tr><tr><td><a class="indexterm" name="id454790"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id454802"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td><a class="indexterm" name="id454813"></a><em class="parameter"><code>disable spoolss = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id454824"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id454836"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id454848"></a><em class="parameter"><code>include = /etc/samba/smb-%L.conf</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id454868"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id454880"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id454891"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id454903"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[office]</code></em></td></tr><tr><td><a class="indexterm" name="id454923"></a><em class="parameter"><code>comment = Data</code></em></td></tr><tr><td><a class="indexterm" name="id454934"></a><em class="parameter"><code>path = /data</code></em></td></tr><tr><td><a class="indexterm" name="id454946"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id454966"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id454978"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id454989"></a><em class="parameter"><code>create mask = 0600</code></em></td></tr><tr><td><a class="indexterm" name="id455001"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id455012"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id455024"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id455035"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"><p>
+<a class="indexterm" name="id455050"></a>
 The configuration file for the CDROM server is listed in <a class="link" href="cfgsmarts.html#cdserver" title="Example 34.2. CDROM Server smb-cdserver.conf file">CDROM Server
 smb-cdserver.conf file</a>. This file is called <code class="filename">smb-cdserver.conf</code> and it should be
 located in the <code class="filename">/etc/samba</code> directory. Machines that are in the workgroup
 <code class="literal">ARTSDEPT</code> will be able to browse this server freely.
-</p><div class="example"><a name="cdserver"></a><p class="title"><b>Example 34.2. CDROM Server smb-cdserver.conf file</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2697477"></a><em class="parameter"><code>workgroup = ARTSDEPT</code></em></td></tr><tr><td><a class="indexterm" name="id2697489"></a><em class="parameter"><code>netbios name = CDSERVER</code></em></td></tr><tr><td><a class="indexterm" name="id2697501"></a><em class="parameter"><code>map to guest = Bad User</code></em></td></tr><tr><td><a class="indexterm" name="id2697512"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[carousel]</code></em></td></tr><tr><td><a class="indexterm" name="id2697533"></a><em class="parameter"><code>comment = CDROM Share</code></em></td></tr><tr><td><a class="indexterm" name="id2697545"></a><em class="parameter"><code>path = /export/cddata</code></em></td></tr><tr><td><a class="indexterm" name="id2697556"></a><em class="parameter"><code>read only = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2697568"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr></table></div></div><br class="example-break"><p>
-<a class="indexterm" name="id2697583"></a>
-<a class="indexterm" name="id2697590"></a>
-<a class="indexterm" name="id2697597"></a>
-<a class="indexterm" name="id2697604"></a>
+</p><div class="example"><a name="cdserver"></a><p class="title"><b>Example 34.2. CDROM Server smb-cdserver.conf file</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id455113"></a><em class="parameter"><code>workgroup = ARTSDEPT</code></em></td></tr><tr><td><a class="indexterm" name="id455124"></a><em class="parameter"><code>netbios name = CDSERVER</code></em></td></tr><tr><td><a class="indexterm" name="id455136"></a><em class="parameter"><code>map to guest = Bad User</code></em></td></tr><tr><td><a class="indexterm" name="id455147"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[carousel]</code></em></td></tr><tr><td><a class="indexterm" name="id455167"></a><em class="parameter"><code>comment = CDROM Share</code></em></td></tr><tr><td><a class="indexterm" name="id455179"></a><em class="parameter"><code>path = /export/cddata</code></em></td></tr><tr><td><a class="indexterm" name="id455190"></a><em class="parameter"><code>read only = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id455202"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr></table></div></div><br class="example-break"><p>
+<a class="indexterm" name="id455216"></a>
+<a class="indexterm" name="id455223"></a>
+<a class="indexterm" name="id455230"></a>
+<a class="indexterm" name="id455237"></a>
 The two servers have different resources and are in separate workgroups. The server <code class="literal">ELASTIC</code>
 can only be accessed by uses who have an appropriate account on the host server. All users will be able to
 access the CDROM data that is stored in the <code class="filename">/export/cddata</code> directory. File system
 permissions should set so that the <code class="literal">others</code> user has read-only access to the directory and its
 contents. The files can be owned by root (any user other than the nobody account).
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2697638"></a>Multiple Virtual Server Hosting</h3></div></div></div><p>
-<a class="indexterm" name="id2697646"></a>
-<a class="indexterm" name="id2697653"></a>
-<a class="indexterm" name="id2697660"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id455267"></a>Multiple Virtual Server Hosting</h3></div></div></div><p>
+<a class="indexterm" name="id455275"></a>
+<a class="indexterm" name="id455282"></a>
+<a class="indexterm" name="id455289"></a>
 In this example, the requirement is for a primary domain controller for the domain called
 <code class="literal">MIDEARTH</code>. The PDC will be called <code class="literal">MERLIN</code>. An extra machine called
 <code class="literal">SAURON</code> is required. Each machine will have only its own shares. Both machines belong to the
 same domain/workgroup.
 </p><p>
-<a class="indexterm" name="id2697692"></a>
-<a class="indexterm" name="id2697699"></a>
-<a class="indexterm" name="id2697706"></a>
+<a class="indexterm" name="id455319"></a>
+<a class="indexterm" name="id455326"></a>
+<a class="indexterm" name="id455332"></a>
 The master <code class="filename">smb.conf</code> file is shown in <a class="link" href="cfgsmarts.html#mastersmbc" title="Example 34.3. Master smb.conf File Global Section">the Master smb.conf File Global Section</a>.
 The two files that specify the share information for each server are shown in <a class="link" href="cfgsmarts.html#merlinsmbc" title="Example 34.4. MERLIN smb-merlin.conf File Share Section">the
 smb-merlin.conf File Share Section</a>, and <a class="link" href="cfgsmarts.html#sauronsmbc" title="Example 34.5. SAURON smb-sauron.conf File Share Section">the smb-sauron.conf File Share
 Section</a>. All three files are locate in the <code class="filename">/etc/samba</code> directory.
-</p><div class="example"><a name="mastersmbc"></a><p class="title"><b>Example 34.3. Master smb.conf File Global Section</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2697781"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id2697793"></a><em class="parameter"><code>netbios name = MERLIN</code></em></td></tr><tr><td><a class="indexterm" name="id2697805"></a><em class="parameter"><code>netbios aliases = SAURON</code></em></td></tr><tr><td><a class="indexterm" name="id2697817"></a><em class="parameter"><code>passdb backend = tdbsam</code></em></td></tr><tr><td><a class="indexterm" name="id2697828"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id2697840"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id2697852"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id2697863"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id2697876"></a><em class="parameter"><code>add user script = /usr/sbin/useradd -m '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2697888"></a><em class="parameter"><code>delete user script = /usr/sbin/userdel -r '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2697900"></a><em class="parameter"><code>add group script = /usr/sbin/groupadd '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id2697912"></a><em class="parameter"><code>delete group script = /usr/sbin/groupdel '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id2697924"></a><em class="parameter"><code>add user to group script = /usr/sbin/usermod -G '%g' '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2697937"></a><em class="parameter"><code>add machine script = /usr/sbin/useradd -s /bin/false -d /var/lib/nobody '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id2697950"></a><em class="parameter"><code>logon script = scripts\login.bat</code></em></td></tr><tr><td><a class="indexterm" name="id2697962"></a><em class="parameter"><code>logon path =  </code></em></td></tr><tr><td><a class="indexterm" name="id2697973"></a><em class="parameter"><code>logon drive = X:</code></em></td></tr><tr><td><a class="indexterm" name="id2697985"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2697997"></a><em class="parameter"><code>preferred master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2698008"></a><em class="parameter"><code>wins support = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2698020"></a><em class="parameter"><code>printing = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id2698032"></a><em class="parameter"><code>include = /etc/samba/smb-%L.conf</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="merlinsmbc"></a><p class="title"><b>Example 34.4. MERLIN smb-merlin.conf File Share Section</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2698072"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id2698084"></a><em class="parameter"><code>netbios name = MERLIN</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id2698105"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id2698117"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id2698128"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id2698140"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[office]</code></em></td></tr><tr><td><a class="indexterm" name="id2698160"></a><em class="parameter"><code>comment = Data</code></em></td></tr><tr><td><a class="indexterm" name="id2698172"></a><em class="parameter"><code>path = /data</code></em></td></tr><tr><td><a class="indexterm" name="id2698184"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id2698204"></a><em class="parameter"><code>comment = NETLOGON</code></em></td></tr><tr><td><a class="indexterm" name="id2698216"></a><em class="parameter"><code>path = /var/lib/samba/netlogon</code></em></td></tr><tr><td><a class="indexterm" name="id2698228"></a><em class="parameter"><code>read only = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2698239"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2698260"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id2698272"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2698283"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2698295"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2698307"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="sauronsmbc"></a><p class="title"><b>Example 34.5. SAURON smb-sauron.conf File Share Section</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2698347"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id2698359"></a><em class="parameter"><code>netbios name = SAURON</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[www]</code></em></td></tr><tr><td><a class="indexterm" name="id2698380"></a><em class="parameter"><code>comment = Web Pages</code></em></td></tr><tr><td><a class="indexterm" name="id2698391"></a><em class="parameter"><code>path = /srv/www/htdocs</code></em></td></tr><tr><td><a class="indexterm" name="id2698403"></a><em class="parameter"><code>read only = No</code></em></td></tr></table></div></div><br class="example-break"></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="largefile.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="optional.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="migration.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 33. Handling Large Directories </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Part IV. Migration and Updating</td></tr></table></div></body></html>
+</p><div class="example"><a name="mastersmbc"></a><p class="title"><b>Example 34.3. Master smb.conf File Global Section</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id455403"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id455415"></a><em class="parameter"><code>netbios name = MERLIN</code></em></td></tr><tr><td><a class="indexterm" name="id455426"></a><em class="parameter"><code>netbios aliases = SAURON</code></em></td></tr><tr><td><a class="indexterm" name="id455438"></a><em class="parameter"><code>passdb backend = tdbsam</code></em></td></tr><tr><td><a class="indexterm" name="id455449"></a><em class="parameter"><code>smb ports = 139</code></em></td></tr><tr><td><a class="indexterm" name="id455461"></a><em class="parameter"><code>syslog = 0</code></em></td></tr><tr><td><a class="indexterm" name="id455472"></a><em class="parameter"><code>printcap name = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id455484"></a><em class="parameter"><code>show add printer wizard = No</code></em></td></tr><tr><td><a class="indexterm" name="id455495"></a><em class="parameter"><code>add user script = /usr/sbin/useradd -m '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id455507"></a><em class="parameter"><code>delete user script = /usr/sbin/userdel -r '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id455519"></a><em class="parameter"><code>add group script = /usr/sbin/groupadd '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id455530"></a><em class="parameter"><code>delete group script = /usr/sbin/groupdel '%g'</code></em></td></tr><tr><td><a class="indexterm" name="id455542"></a><em class="parameter"><code>add user to group script = /usr/sbin/usermod -G '%g' '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id455554"></a><em class="parameter"><code>add machine script = /usr/sbin/useradd -s /bin/false -d /var/lib/nobody '%u'</code></em></td></tr><tr><td><a class="indexterm" name="id455566"></a><em class="parameter"><code>logon script = scripts\login.bat</code></em></td></tr><tr><td><a class="indexterm" name="id455578"></a><em class="parameter"><code>logon path =  </code></em></td></tr><tr><td><a class="indexterm" name="id455589"></a><em class="parameter"><code>logon drive = X:</code></em></td></tr><tr><td><a class="indexterm" name="id455601"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id455612"></a><em class="parameter"><code>preferred master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id455624"></a><em class="parameter"><code>wins support = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id455635"></a><em class="parameter"><code>printing = CUPS</code></em></td></tr><tr><td><a class="indexterm" name="id455646"></a><em class="parameter"><code>include = /etc/samba/smb-%L.conf</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="merlinsmbc"></a><p class="title"><b>Example 34.4. MERLIN smb-merlin.conf File Share Section</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id455686"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id455698"></a><em class="parameter"><code>netbios name = MERLIN</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id455718"></a><em class="parameter"><code>comment = Home Directories</code></em></td></tr><tr><td><a class="indexterm" name="id455730"></a><em class="parameter"><code>valid users = %S</code></em></td></tr><tr><td><a class="indexterm" name="id455741"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td><a class="indexterm" name="id455753"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[office]</code></em></td></tr><tr><td><a class="indexterm" name="id455773"></a><em class="parameter"><code>comment = Data</code></em></td></tr><tr><td><a class="indexterm" name="id455785"></a><em class="parameter"><code>path = /data</code></em></td></tr><tr><td><a class="indexterm" name="id455796"></a><em class="parameter"><code>read only = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id455817"></a><em class="parameter"><code>comment = NETLOGON</code></em></td></tr><tr><td><a class="indexterm" name="id455828"></a><em class="parameter"><code>path = /var/lib/samba/netlogon</code></em></td></tr><tr><td><a class="indexterm" name="id455840"></a><em class="parameter"><code>read only = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id455851"></a><em class="parameter"><code>browseable = No</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id455872"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id455883"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id455894"></a><em class="parameter"><code>printable = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id455906"></a><em class="parameter"><code>use client driver = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id455917"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"><div class="example"><a name="sauronsmbc"></a><p class="title"><b>Example 34.5. SAURON smb-sauron.conf File Share Section</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id455957"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id455969"></a><em class="parameter"><code>netbios name = SAURON</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[www]</code></em></td></tr><tr><td><a class="indexterm" name="id455989"></a><em class="parameter"><code>comment = Web Pages</code></em></td></tr><tr><td><a class="indexterm" name="id456001"></a><em class="parameter"><code>path = /srv/www/htdocs</code></em></td></tr><tr><td><a class="indexterm" name="id456012"></a><em class="parameter"><code>read only = No</code></em></td></tr></table></div></div><br class="example-break"></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="largefile.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="optional.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="migration.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 33. Handling Large Directories </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Part IV. Migration and Updating</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ch-ldap-tls.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ch-ldap-tls.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ch-ldap-tls.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,40 +1,40 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 45. LDAP and Transport Layer Security</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="Appendix.html" title="Part VI. Reference Section"><link rel="prev" href="speed.html" title="Chapter 44. Samba Performance Tuning"><link rel="next" href="ch46.html" title="Chapter 46. Samba Support"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 45. LDAP and Transport Layer Security</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="speed.html">Prev</a> </td><th width="60%" align="center">Part VI. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="ch46.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="ch-ldap-tls"></a>Chapter 45. LDAP and Transport Layer Security</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Gavin</span> <span class="surname">Henry</span></h3><div class="affiliation"><span class="orgname">Suretec Systems Limited, UK<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:ghenry at suretecsystems.com">ghenry at suretecsystems.com</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">July 8, 2005</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ch-ldap-tls.html#s1-intro-ldap-tls">Introduction</a></span></dt><dt><span class="sect1"><a href="ch-ldap-tls.html#s1-config-ldap-tls">Configuring</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch-ldap-tls.html#s1-config-ldap-tls-certs">Generating the Certificate Authority</a></span></dt><dt><span class="sect2"><a href="ch-ldap-tls.html#s1-config-ldap-tls-server">Generating the Server Certificate</a></span></dt><dt><span class="sect2"><a href="ch-ldap-tls.html#s1-config-ldap-tls-install">Installing the Certificates</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch-ldap-tls.html#s1-test-ldap-tls">Testing</a></span></dt><dt><span class="sect1"><a href="ch-ldap-tls.html#s1-int-ldap-tls">Troubleshooting</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="s1-intro-ldap-tls"></a>Introduction</h2></div></div></div><p>
-	<a class="indexterm" name="id2713168"></a>
-<a class="indexterm" name="id2713178"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 45. LDAP and Transport Layer Security</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="Appendix.html" title="Part VI. Reference Section"><link rel="prev" href="speed.html" title="Chapter 44. Samba Performance Tuning"><link rel="next" href="ch46.html" title="Chapter 46. Samba Support"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 45. LDAP and Transport Layer Security</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="speed.html">Prev</a> </td><th width="60%" align="center">Part VI. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="ch46.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="ch-ldap-tls"></a>Chapter 45. LDAP and Transport Layer Security</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Gavin</span> <span class="surname">Henry</span></h3><div class="affiliation"><span class="orgname">Suretec Systems Limited, UK<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:ghenry at suretecsystems.com">ghenry at suretecsystems.com</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">July 8, 2005</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ch-ldap-tls.html#s1-intro-ldap-tls">Introduction</a></span></dt><dt><span class="sect1"><a href="ch-ldap-tls.html#s1-config-ldap-tls">Configuring</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch-ldap-tls.html#s1-config-ldap-tls-certs">Generating the Certificate Authority</a></span></dt><dt><span class="sect2"><a href="ch-ldap-tls.html#s1-config-ldap-tls-server">Generating the Server Certificate</a></span></dt><dt><span class="sect2"><a href="ch-ldap-tls.html#s1-config-ldap-tls-install">Installing the Certificates</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch-ldap-tls.html#s1-test-ldap-tls">Testing</a></span></dt><dt><span class="sect1"><a href="ch-ldap-tls.html#s1-int-ldap-tls">Troubleshooting</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="s1-intro-ldap-tls"></a>Introduction</h2></div></div></div><p>
+	<a class="indexterm" name="id469768"></a>
+<a class="indexterm" name="id469778"></a>
 	Up until now, we have discussed the straightforward configuration of <span class="trademark">OpenLDAP</span>&#8482;,
 	with some advanced features such as ACLs. This does not however, deal with the fact that the network
 	transmissions are still in plain text. This is where <em class="firstterm">Transport Layer Security (TLS)</em>
 	comes in.
 	</p><p>
-<a class="indexterm" name="id2713202"></a>
+<a class="indexterm" name="id469799"></a>
 	<span class="trademark">OpenLDAP</span>&#8482; clients and servers are capable of using the Transport Layer Security (TLS)
 	framework to provide integrity and confidentiality protections in accordance with <a class="ulink" href="http://rfc.net/rfc2830.html" target="_top">RFC 2830</a>; <span class="emphasis"><em>Lightweight Directory Access Protocol (v3):
 	Extension for Transport Layer Security.</em></span>
 	</p><p>
-<a class="indexterm" name="id2713231"></a>
+<a class="indexterm" name="id469826"></a>
 	TLS uses X.509 certificates. All servers are required to have valid certificates, whereas client certificates
 	are optional. We will only be discussing server certificates.
 	</p><div class="tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p>
-<a class="indexterm" name="id2713246"></a>
-<a class="indexterm" name="id2713252"></a>
-<a class="indexterm" name="id2713259"></a>
+<a class="indexterm" name="id469839"></a>
+<a class="indexterm" name="id469846"></a>
+<a class="indexterm" name="id469852"></a>
 	The DN of a server certificate must use the CN attribute to name the server, and the CN must carry the
 	server's fully qualified domain name (FQDN). Additional alias names and wildcards may be present in the
 	<code class="option">subjectAltName</code> certificate extension. More details on server certificate names are in <a class="ulink" href="http://rfc.net/rfc2830.html" target="_top">RFC2830</a>.
 	</p></div><p>
 	We will discuss this more in the next sections.
 	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="s1-config-ldap-tls"></a>Configuring</h2></div></div></div><p>
-	<a class="indexterm" name="id2713299"></a>
+	<a class="indexterm" name="id469888"></a>
 	Now on to the good bit.
 	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="s1-config-ldap-tls-certs"></a>Generating the Certificate Authority</h3></div></div></div><p>
-<a class="indexterm" name="id2713322"></a>
+<a class="indexterm" name="id469911"></a>
 	In order to create the relevant certificates, we need to become our own Certificate Authority (CA).
-	<sup>[<a name="id2713333" href="#ftn.id2713333" class="footnote">8</a>]</sup> This is necessary, so we can sign the server certificate.
+	<sup>[<a name="id469921" href="#ftn.id469921" class="footnote">8</a>]</sup> This is necessary, so we can sign the server certificate.
 	</p><p>
-<a class="indexterm" name="id2713362"></a>
-	We will be using the <a class="ulink" href="http://www.openssl.org" target="_top">OpenSSL</a> <sup>[<a name="id2713375" href="#ftn.id2713375" class="footnote">9</a>]</sup> software for this, which is included with every great <span class="trademark">Linux</span>® distribution.
+<a class="indexterm" name="id469948"></a>
+	We will be using the <a class="ulink" href="http://www.openssl.org" target="_top">OpenSSL</a> <sup>[<a name="id469961" href="#ftn.id469961" class="footnote">9</a>]</sup> software for this, which is included with every great <span class="trademark">Linux</span>® distribution.
 	</p><p>
-	TLS is used for many types of servers, but the instructions<sup>[<a name="id2713394" href="#ftn.id2713394" class="footnote">10</a>]</sup> presented here, are tailored for <span class="application">OpenLDAP</span>.
+	TLS is used for many types of servers, but the instructions<sup>[<a name="id469977" href="#ftn.id469977" class="footnote">10</a>]</sup> presented here, are tailored for <span class="application">OpenLDAP</span>.
 	</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
 	The <span class="emphasis"><em>Common Name (CN)</em></span>, in the following example, <span class="emphasis"><em>MUST</em></span> be
 	the fully qualified domain name (FQDN) of your ldap server.
@@ -51,7 +51,7 @@
 <code class="prompt">root# </code> cd myCA
 </code>
 </pre><p>
-	Now generate the CA:<sup>[<a name="id2713470" href="#ftn.id2713470" class="footnote">11</a>]</sup>
+	Now generate the CA:<sup>[<a name="id470049" href="#ftn.id470049" class="footnote">11</a>]</sup>
 </p><pre class="screen">
 <code class="computeroutput">
 <code class="prompt">root# </code> /usr/share/ssl/misc/CA.pl -newca
@@ -209,7 +209,7 @@
 	</p><p>
 	That's all there is to it. Now on to <a class="xref" href="ch-ldap-tls.html#s1-test-ldap-tls" title="Testing">the section called &#8220;Testing&#8221;</a>
 	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="s1-test-ldap-tls"></a>Testing</h2></div></div></div><p>
-<a class="indexterm" name="id2713894"></a>
+<a class="indexterm" name="id470412"></a>
 This is the easy part. Restart the server:
 </p><pre class="screen">
 <code class="computeroutput">
@@ -220,7 +220,7 @@
 </code>
 </pre><p>
 	Then, using <code class="literal">ldapsearch</code>, test an anonymous search with the
-	<code class="option">-ZZ</code><sup>[<a name="id2713936" href="#ftn.id2713936" class="footnote">12</a>]</sup> option:
+	<code class="option">-ZZ</code><sup>[<a name="id470452" href="#ftn.id470452" class="footnote">12</a>]</sup> option:
 </p><pre class="screen">
 <code class="computeroutput">
 <code class="prompt">root# </code> ldapsearch -x -b "dc=ldap,dc=abmas,dc=biz" \
@@ -265,7 +265,7 @@
 </pre><p>
 	If you have any problems, please read <a class="xref" href="ch-ldap-tls.html#s1-int-ldap-tls" title="Troubleshooting">the section called &#8220;Troubleshooting&#8221;</a>
 </p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="s1-int-ldap-tls"></a>Troubleshooting</h2></div></div></div><p>
-<a class="indexterm" name="id2714034"></a>
+<a class="indexterm" name="id470533"></a>
 The most common error when configuring TLS, as I have already mentioned numerous times, is that the
 <span class="emphasis"><em>Common Name (CN)</em></span> you entered in <a class="xref" href="ch-ldap-tls.html#s1-config-ldap-tls-server" title="Generating the Server Certificate">the section called &#8220;Generating the Server Certificate&#8221;</a> is
 <span class="emphasis"><em>NOT</em></span> the Fully Qualified Domain Name (FQDN) of your ldap server.
@@ -275,13 +275,13 @@
 files. They should be set with <code class="literal">chmod 640</code>, as per <a class="xref" href="ch-ldap-tls.html#s1-config-ldap-tls-install" title="Installing the Certificates">the section called &#8220;Installing the Certificates&#8221;</a>.
 </p><p>
 For anything else, it's best to read through your ldap logfile or join the <span class="application">OpenLDAP</span> mailing list.
-</p></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id2713333" href="#id2713333" class="para">8</a>] </sup>We could however, get our generated server certificate signed by proper CAs, like <a class="ulink" href="http://www.thawte.com/" target="_top">Thawte</a> and <a class="ulink" href="http://www.verisign.com/" target="_top">VeriSign</a>, which
+</p></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id469921" href="#id469921" class="para">8</a>] </sup>We could however, get our generated server certificate signed by proper CAs, like <a class="ulink" href="http://www.thawte.com/" target="_top">Thawte</a> and <a class="ulink" href="http://www.verisign.com/" target="_top">VeriSign</a>, which
 	you pay for, or the free ones, via <a class="ulink" href="http://www.cacert.org/" target="_top">CAcert</a>
-	</p></div><div class="footnote"><p><sup>[<a name="ftn.id2713375" href="#id2713375" class="para">9</a>] </sup>The downside to
+	</p></div><div class="footnote"><p><sup>[<a name="ftn.id469961" href="#id469961" class="para">9</a>] </sup>The downside to
 	making our own CA, is that the certificate is not automatically recognized by clients, like the commercial
-	ones are.</p></div><div class="footnote"><p><sup>[<a name="ftn.id2713394" href="#id2713394" class="para">10</a>] </sup>For information straight from the
+	ones are.</p></div><div class="footnote"><p><sup>[<a name="ftn.id469977" href="#id469977" class="para">10</a>] </sup>For information straight from the
 	horse's mouth, please visit <a class="ulink" href="http://www.openssl.org/docs/HOWTO/" target="_top">http://www.openssl.org/docs/HOWTO/</a>; the main OpenSSL
-	site.</p></div><div class="footnote"><p><sup>[<a name="ftn.id2713470" href="#id2713470" class="para">11</a>] </sup>Your <code class="filename">CA.pl</code> or <code class="filename">CA.sh</code> might not be
+	site.</p></div><div class="footnote"><p><sup>[<a name="ftn.id470049" href="#id470049" class="para">11</a>] </sup>Your <code class="filename">CA.pl</code> or <code class="filename">CA.sh</code> might not be
 	in the same location as mine is, you can find it by using the <code class="literal">locate</code> command, i.e.,
 	<code class="literal">locate CA.pl</code>.  If the command complains about the database being too old, run
-	<code class="literal">updatedb</code> as <span class="emphasis"><em>root</em></span> to update it.</p></div><div class="footnote"><p><sup>[<a name="ftn.id2713936" href="#id2713936" class="para">12</a>] </sup>See <code class="literal">man ldapsearch</code></p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="speed.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="Appendix.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch46.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 44. Samba Performance Tuning </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 46. Samba Support</td></tr></table></div></body></html>
+	<code class="literal">updatedb</code> as <span class="emphasis"><em>root</em></span> to update it.</p></div><div class="footnote"><p><sup>[<a name="ftn.id470452" href="#id470452" class="para">12</a>] </sup>See <code class="literal">man ldapsearch</code></p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="speed.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="Appendix.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch46.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 44. Samba Performance Tuning </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 46. Samba Support</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ch46.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ch46.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ch46.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,9 +1,9 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 46. Samba Support</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="Appendix.html" title="Part VI. Reference Section"><link rel="prev" href="ch-ldap-tls.html" title="Chapter 45. LDAP and Transport Layer Security"><link rel="next" href="DNSDHCP.html" title="Chapter 47. DNS and DHCP Configuration Guide"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 46. Samba Support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch-ldap-tls.html">Prev</a> </td><th width="60%" align="center">Part VI. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="DNSDHCP.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en-US"><div class="titlepage"><div><div><h2 class="title"><a name="id2714115"></a>Chapter 46. Samba Support</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ch46.html#id2714245">Free Support</a></span></dt><dt><span class="sect1"><a href="ch46.html#id2714463">Commercial Support</a></span></dt></dl></div><p>
-<a class="indexterm" name="id2714124"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 46. Samba Support</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="Appendix.html" title="Part VI. Reference Section"><link rel="prev" href="ch-ldap-tls.html" title="Chapter 45. LDAP and Transport Layer Security"><link rel="next" href="DNSDHCP.html" title="Chapter 47. DNS and DHCP Configuration Guide"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 46. Samba Support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch-ldap-tls.html">Prev</a> </td><th width="60%" align="center">Part VI. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="DNSDHCP.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en-US"><div class="titlepage"><div><div><h2 class="title"><a name="id470609"></a>Chapter 46. Samba Support</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ch46.html#id470724">Free Support</a></span></dt><dt><span class="sect1"><a href="ch46.html#id470922">Commercial Support</a></span></dt></dl></div><p>
+<a class="indexterm" name="id470618"></a>
 One of the most difficult to answer questions in the information technology industry is, &#8220;<span class="quote">What is
 support?</span>&#8221;. That question irritates some folks, as much as common answers may annoy others.
 </p><p>
-<a class="indexterm" name="id2714141"></a>
+<a class="indexterm" name="id470633"></a>
 The most aggravating situation pertaining to support is typified when, as a Linux user, a call is made to
 an Internet service provider who, instead of listening to the problem to find a solution, blandly replies:
 &#8220;<span class="quote">Oh, Linux? We do not support Linux!</span>&#8221;. It has happened to me, and similar situations happen
@@ -15,50 +15,50 @@
 at the right time, no matter the situation. Support is all that it takes to take away pain, disruption,
 inconvenience, loss of productivity, disorientation, uncertainty, and real or perceived risk.
 </p><p>
-<a class="indexterm" name="id2714172"></a>
-<a class="indexterm" name="id2714178"></a>
-<a class="indexterm" name="id2714185"></a>
+<a class="indexterm" name="id470657"></a>
+<a class="indexterm" name="id470663"></a>
+<a class="indexterm" name="id470670"></a>
 One of the forces that has become a driving force for the adoption of open source software is the fact that
 many IT businesses have provided services that have perhaps failed to deliver what the customer expected, or
 that have been found wanting for other reasons.
 </p><p>
-<a class="indexterm" name="id2714200"></a>
-<a class="indexterm" name="id2714207"></a>
+<a class="indexterm" name="id470683"></a>
+<a class="indexterm" name="id470689"></a>
 In recognition of the need for needs satisfaction as the primary experience an information technology user or
 consumer expects, the information provided in this chapter may help someone to avoid an unpleasant experience
 in respect of problem resolution.
 </p><p>
-<a class="indexterm" name="id2714222"></a>
-<a class="indexterm" name="id2714228"></a>
-<a class="indexterm" name="id2714235"></a>
+<a class="indexterm" name="id470702"></a>
+<a class="indexterm" name="id470708"></a>
+<a class="indexterm" name="id470715"></a>
 In the open source software arena there are two support options: free support and paid-for (commercial)
 support.
-</p><div class="sect1" lang="en-US"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2714245"></a>Free Support</h2></div></div></div><p>
-<a class="indexterm" name="id2714253"></a>
-<a class="indexterm" name="id2714260"></a>
-<a class="indexterm" name="id2714267"></a>
-<a class="indexterm" name="id2714274"></a>
-<a class="indexterm" name="id2714281"></a>
-<a class="indexterm" name="id2714288"></a>
+</p><div class="sect1" lang="en-US"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id470724"></a>Free Support</h2></div></div></div><p>
+<a class="indexterm" name="id470732"></a>
+<a class="indexterm" name="id470739"></a>
+<a class="indexterm" name="id470746"></a>
+<a class="indexterm" name="id470752"></a>
+<a class="indexterm" name="id470759"></a>
+<a class="indexterm" name="id470766"></a>
 	Free support may be obtained from friends, colleagues, user groups, mailing lists, and interactive help
 	facilities. An example of an interactive dacility is the Internet relay chat (IRC) channels that host user
 	supported mutual assistance.
 	</p><p>
-<a class="indexterm" name="id2714302"></a>
-<a class="indexterm" name="id2714309"></a>
-<a class="indexterm" name="id2714316"></a>
-<a class="indexterm" name="id2714323"></a>
-<a class="indexterm" name="id2714329"></a>
+<a class="indexterm" name="id470778"></a>
+<a class="indexterm" name="id470785"></a>
+<a class="indexterm" name="id470792"></a>
+<a class="indexterm" name="id470798"></a>
+<a class="indexterm" name="id470805"></a>
 	The Samba project maintains a mailing list that is commonly used to discuss solutions to Samba deployments.
 	Information regarding subscription to the Samba mailing list can be found on the Samba <a class="ulink" href="https://lists.samba.org/mailman/" target="_top">web</a> site. The public mailing list that can be used to obtain
 	free, user contributed, support is called the <code class="literal">samba</code> list. The email address for this list
 	is at <code class="literal">mail:samba at samba.org</code>.  Information regarding the Samba IRC channels may be found on
 	the Samba <a class="ulink" href="http://www.samba.org/samba.irc.html" target="_top">IRC</a> web page.
 	</p><p>
-<a class="indexterm" name="id2714370"></a>
-<a class="indexterm" name="id2714377"></a>
-<a class="indexterm" name="id2714384"></a>
-<a class="indexterm" name="id2714391"></a>
+<a class="indexterm" name="id470842"></a>
+<a class="indexterm" name="id470849"></a>
+<a class="indexterm" name="id470856"></a>
+<a class="indexterm" name="id470862"></a>
 	As a general rule, it is considered poor net behavior to contact a Samba Team member directly
 	for free support. Most active members of the Samba Team work exceptionally long hours to assist
 	users who have demonstrated a qualified problem. Some team members may respond to direct email
@@ -66,9 +66,9 @@
 	Team members actually provide professional paid-for Samba support and it is therefore wise
 	to show appropriate discretion and reservation in all direct contact.
 	</p><p>
-<a class="indexterm" name="id2714410"></a>
-<a class="indexterm" name="id2714417"></a>
-<a class="indexterm" name="id2714424"></a>
+<a class="indexterm" name="id470877"></a>
+<a class="indexterm" name="id470884"></a>
+<a class="indexterm" name="id470891"></a>
 	When you stumble across a Samba bug, often the quickest way to get it resolved is by posting
 	a bug <a class="ulink" href="https://bugzilla.samba.org/" target="_top">report</a>. All such reports are mailed to
 	the responsible code maintainer for action. The better the report, and the more serious it is,
@@ -76,16 +76,16 @@
 	the reported bug it is likely to be rejected. It is up to you to provide sufficient information
 	that will permit the problem to be reproduced.
 	</p><p>
-<a class="indexterm" name="id2714449"></a>
+<a class="indexterm" name="id470911"></a>
 	We all recognize that sometimes free support does not provide the answer that is sought within
 	the time-frame required. At other times the problem is elusive and you may lack the experience
 	necessary to isolate the problem and thus to resolve it. This is a situation where is may be
 	prudent to purchase paid-for support.
-	</p></div><div class="sect1" lang="en-US"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2714463"></a>Commercial Support</h2></div></div></div><p>
+	</p></div><div class="sect1" lang="en-US"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id470922"></a>Commercial Support</h2></div></div></div><p>
 	There are six basic support oriented services that are most commonly sought by Samba sites:
 	</p><div class="itemizedlist"><ul type="disc"><li><p>Assistance with network design</p></li><li><p>Staff Training</p></li><li><p>Assistance with Samba network deployment and installation</p></li><li><p>Priority telephone or email Samba configuration assistance</p></li><li><p>Trouble-shooting and diagnostic assistance</p></li><li><p>Provision of quality assured ready-to-install Samba binary packages</p></li></ul></div><p>
-<a class="indexterm" name="id2714510"></a>
-<a class="indexterm" name="id2714517"></a>
+<a class="indexterm" name="id470966"></a>
+<a class="indexterm" name="id470973"></a>
 	Information regarding companies that provide professional Samba support can be obtained by performing a Google
 	search, as well as by reference to the Samba <a class="ulink" href="http://www.samba.org/samba/support.html" target="_top">Support</a> web page. Companies who notify the Samba Team
 	that they provide commercial support are given a free listing that is sorted by the country of origin.
@@ -93,13 +93,13 @@
 	provider and to satisfy yourself that both the company and its staff are able to deliver what is required of
 	them.
 	</p><p>
-<a class="indexterm" name="id2714543"></a>
+<a class="indexterm" name="id470994"></a>
 	The policy within the Samba Team is to treat all commercial support providers equally and to show no
 	preference. As a result, Samba Team members who provide commercial support are lumped in with everyone else.
 	You are encouraged to obtain the services needed from a company in your local area. The open source movement
 	is pro-community; so do what you can to help a local business to prosper.
 	</p><p>
-<a class="indexterm" name="id2714566"></a>
+<a class="indexterm" name="id471007"></a>
 	Open source software support can be found in any quality, at any price and in any place you can
 	to obtain it. Over 180 companies around the world provide Samba support, there is no excuse for
 	suffering in the mistaken belief that Samba is unsupported software  it is supported.

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/classicalprinting.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/classicalprinting.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/classicalprinting.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,22 +1,22 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 21. Classical Printing Support</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="msdfs.html" title="Chapter 20. Hosting a Microsoft Distributed File System Tree"><link rel="next" href="CUPS-printing.html" title="Chapter 22. CUPS Printing Support"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 21. Classical Printing Support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="msdfs.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="CUPS-printing.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="classicalprinting"></a>Chapter 21. Classical Printing Support</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Kurt</span> <span class="surname">Pfeifle</span></h3><div class="affiliation"><span class="orgname">Danka Deutschland GmbH<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:kpfeifle at danka.de">kpfeifle at danka.de</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Gerald</span> <span class="othername">(Jerry)</span> <span class="surname">Carter</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jerry at samba.org">jerry at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">May 31, 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="classicalprinting.html#id2644133">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id2644356">Technical Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2644515">Client to Samba Print Job Processing</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2644574">Printing-Related Configuration Parameters</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id2644675">Simple Print Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2644958">Verifying Configuration with <code class="literal">testparm</code></a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2645155">Rapid Configuration Validation</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id2645543">Extended Printing Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2645998">Detailed Explanation Settings</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2648726">Point'n'Print Client Drivers on Samba Servers</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2648895">The Obsoleted [printer$] Section</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2649017">Creating the [print$] Share</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2649234">[print$] Stanza Parameters</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2649554">The [print$] Share Directory</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id2649696">Installing Drivers into [print$]</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2649789">Add Printer Wizard Driver Installation</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#inst-rpc">Installing Print Drivers Using <code class="literal">rpcclient</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id2651729">Client Driver Installation Procedure</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2651745">First Client Driver Installation</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#prt-modeset">Setting Device Modes on New Printers</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2578531">Additional Client Driver Installation</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2578650">Always Make First Client Connection as root or &#8220;<span class="quote">printer admin</span>&#8221;</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id2652868">Other Gotchas</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2652888">Setting Default Print Options for Client Drivers</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2653255">Supporting Large Numbers of Printers</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2653512">Adding New Printers with the Windows NT APW</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2653771">Error Message: &#8220;<span class="quote">Cannot connect under a different Name</span>&#8221;</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2653885">Take Care When Assembling Driver Files</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2654194">Samba and Printer Ports</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2654303">Avoiding Common Client Driver Misconfiguration</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id2654341">The Imprints Toolset</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2654398">What Is Imprints?</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2654432">Creating Printer Driver Packages</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2654447">The Imprints Server</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2654464">The Installation Client</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id2654598">Adding Network Printers without User Interaction</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id2654869">The <code class="literal">addprinter</code> Command</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id2654908">Migration of Classical Printing to Samba</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id2655057">Publishing Printer Information in Active Directory or LDAP</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id2655086">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2655092">I Give My Root Password but I Do Not Get Access</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2655133">My Print Jobs Get Spooled into the Spooling Directory, but Then Get Lost</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2644133"></a>Features and Benefits</h2></div></div></div><p>
-<a class="indexterm" name="id2644141"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 21. Classical Printing Support</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="msdfs.html" title="Chapter 20. Hosting a Microsoft Distributed File System Tree"><link rel="next" href="CUPS-printing.html" title="Chapter 22. CUPS Printing Support"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 21. Classical Printing Support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="msdfs.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="CUPS-printing.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="classicalprinting"></a>Chapter 21. Classical Printing Support</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Kurt</span> <span class="surname">Pfeifle</span></h3><div class="affiliation"><span class="orgname">Danka Deutschland GmbH<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:kpfeifle at danka.de">kpfeifle at danka.de</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Gerald</span> <span class="othername">(Jerry)</span> <span class="surname">Carter</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jerry at samba.org">jerry at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">May 31, 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="classicalprinting.html#id406449">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id406652">Technical Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id406793">Client to Samba Print Job Processing</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id406846">Printing-Related Configuration Parameters</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id406941">Simple Print Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id407208">Verifying Configuration with <code class="literal">testparm</code></a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id407391">Rapid Configuration Validation</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id407742">Extended Printing Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id408182">Detailed Explanation Settings</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id410712">Point'n'Print Client Drivers on Samba Servers</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id410866">The Obsoleted [printer$] Section</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id410977">Creating the [print$] Share</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id411183">[print$] Stanza Parameters</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id411476">The [print$] Share Directory</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id411602">Installing Drivers into [print$]</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id411687">Add Printer Wizard Driver Installation</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#inst-rpc">Installing Print Drivers Using <code class="literal">rpcclient</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id413392">Client Driver Installation Procedure</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id413407">First Client Driver Installation</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#prt-modeset">Setting Device Modes on New Printers</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id346362">Additional Client Driver Installation</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id346474">Always Make First Client Connection as root or &#8220;<span class="quote">printer admin</span>&#8221;</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id414319">Other Gotchas</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id414335">Setting Default Print Options for Client Drivers</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id414671">Supporting Large Numbers of Printers</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id414907">Adding New Printers with the Windows NT APW</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id415143">Error Message: &#8220;<span class="quote">Cannot connect under a different Name</span>&#8221;</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id415242">Take Care When Assembling Driver Files</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id415466">Samba and Printer Ports</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id415565">Avoiding Common Client Driver Misconfiguration</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id415598">The Imprints Toolset</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id415641">What Is Imprints?</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id415671">Creating Printer Driver Packages</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id415684">The Imprints Server</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id415698">The Installation Client</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id415814">Adding Network Printers without User Interaction</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id416053">The <code class="literal">addprinter</code> Command</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id416087">Migration of Classical Printing to Samba</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id416218">Publishing Printer Information in Active Directory or LDAP</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id416245">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id416250">I Give My Root Password but I Do Not Get Access</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id416288">My Print Jobs Get Spooled into the Spooling Directory, but Then Get Lost</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id406449"></a>Features and Benefits</h2></div></div></div><p>
+<a class="indexterm" name="id406457"></a>
 Printing is often a mission-critical service for the users. Samba can provide this service reliably and
 seamlessly for a client network consisting of Windows workstations.
 </p><p>
-<a class="indexterm" name="id2644154"></a>
-<a class="indexterm" name="id2644161"></a>
-<a class="indexterm" name="id2644168"></a>
-<a class="indexterm" name="id2644175"></a>
-<a class="indexterm" name="id2644182"></a>
-<a class="indexterm" name="id2644189"></a>
-<a class="indexterm" name="id2644196"></a>
-<a class="indexterm" name="id2644203"></a>
-<a class="indexterm" name="id2644210"></a>
-<a class="indexterm" name="id2644216"></a>
-<a class="indexterm" name="id2644223"></a>
-<a class="indexterm" name="id2644230"></a>
-<a class="indexterm" name="id2644237"></a>
-<a class="indexterm" name="id2644244"></a>
+<a class="indexterm" name="id406469"></a>
+<a class="indexterm" name="id406476"></a>
+<a class="indexterm" name="id406482"></a>
+<a class="indexterm" name="id406489"></a>
+<a class="indexterm" name="id406496"></a>
+<a class="indexterm" name="id406503"></a>
+<a class="indexterm" name="id406510"></a>
+<a class="indexterm" name="id406516"></a>
+<a class="indexterm" name="id406523"></a>
+<a class="indexterm" name="id406530"></a>
+<a class="indexterm" name="id406537"></a>
+<a class="indexterm" name="id406544"></a>
+<a class="indexterm" name="id406550"></a>
+<a class="indexterm" name="id406557"></a>
 A Samba print service may be run on a standalone or domain member server, side by side with file serving
 functions, or on a dedicated print server.  It can be made as tightly or as loosely secured as needs dictate.
 Configurations may be simple or complex. Available authentication schemes are essentially the same as
@@ -30,23 +30,23 @@
 page and supplying the raw data for all sorts of statistical reports) is required, this function is best
 supported by the newer Common UNIX Printing System (CUPS) as the print subsystem underneath the Samba hood.
 </p><p>
-<a class="indexterm" name="id2644295"></a>
-<a class="indexterm" name="id2644301"></a>
+<a class="indexterm" name="id406597"></a>
+<a class="indexterm" name="id406604"></a>
 This chapter outlines the fundamentals of Samba printing as implemented by the more traditional UNIX
 BSD- and System V-style printing systems. Much of the information in this chapter applies also to CUPS.  If
 you use CUPS, you may be tempted to jump to the next chapter, but you will certainly miss a few things if you
 do. For further information refer to <a class="link" href="CUPS-printing.html" title="Chapter 22. CUPS Printing Support">CUPS Printing Support</a>.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2644327"></a>
-<a class="indexterm" name="id2644334"></a>
-<a class="indexterm" name="id2644341"></a>
+<a class="indexterm" name="id406626"></a>
+<a class="indexterm" name="id406633"></a>
+<a class="indexterm" name="id406639"></a>
 Most of the following examples have been verified on Windows XP Professional clients. Where this document
 describes the responses to commands given, bear in mind that Windows 200x/XP clients are quite similar but may
 differ in minor details. Windows NT4 is somewhat different again.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2644356"></a>Technical Introduction</h2></div></div></div><p>
-<a class="indexterm" name="id2644364"></a>
-<a class="indexterm" name="id2644371"></a>
-<a class="indexterm" name="id2644378"></a>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id406652"></a>Technical Introduction</h2></div></div></div><p>
+<a class="indexterm" name="id406660"></a>
+<a class="indexterm" name="id406666"></a>
+<a class="indexterm" name="id406673"></a>
 Samba's printing support always relies on the installed print subsystem of the UNIX OS it runs on. Samba is a
 <code class="literal">middleman.</code> It takes print files from Windows (or other SMB) clients and passes them to the real
 printing system for further processing; therefore, it needs to communicate with both sides: the Windows print
@@ -54,42 +54,42 @@
 of which behave differently, as well as the various UNIX print subsystems, which themselves have different
 features and are accessed differently.
 </p><p>
-<a class="indexterm" name="id2644411"></a>
-<a class="indexterm" name="id2644418"></a>
+<a class="indexterm" name="id406698"></a>
+<a class="indexterm" name="id406704"></a>
 This chapter deals with the traditional way of UNIX printing. The next chapter covers in great detail the more
 modern CUPS.
 </p><div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Important</h3><p>
-<a class="indexterm" name="id2644431"></a>
+<a class="indexterm" name="id406717"></a>
 CUPS users, be warned: do not just jump on to the next chapter. You might miss important information only found here!
 </p></div><p>
-<a class="indexterm" name="id2644443"></a>
-<a class="indexterm" name="id2644450"></a>
-<a class="indexterm" name="id2644457"></a>
-<a class="indexterm" name="id2644464"></a>
+<a class="indexterm" name="id406728"></a>
+<a class="indexterm" name="id406735"></a>
+<a class="indexterm" name="id406741"></a>
+<a class="indexterm" name="id406748"></a>
 It is apparent from postings on the Samba mailing list that print configuration is one of the most problematic
 aspects of Samba administration today. Many new Samba administrators have the impression that Samba performs
 some sort of print processing. Rest assured, Samba does not perform any type of print processing. It does not
 do any form of print filtering.
 </p><p>
-<a class="indexterm" name="id2644480"></a>
-<a class="indexterm" name="id2644487"></a>
-<a class="indexterm" name="id2644494"></a>
-<a class="indexterm" name="id2644501"></a>
+<a class="indexterm" name="id406761"></a>
+<a class="indexterm" name="id406768"></a>
+<a class="indexterm" name="id406775"></a>
+<a class="indexterm" name="id406782"></a>
 Samba obtains from its clients a data stream (print job) that it spools to a local spool area. When the entire
 print job has been received, Samba invokes a local UNIX/Linux print command and passes the spooled file to it.
 It is up to the local system printing subsystems to correctly process the print job and to submit it to the
 printer.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2644515"></a>Client to Samba Print Job Processing</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id406793"></a>Client to Samba Print Job Processing</h3></div></div></div><p>
 Successful printing from a Windows client via a Samba print server to a UNIX
 printer involves six (potentially seven) stages:
 </p><div class="orderedlist"><ol type="1"><li><p>Windows opens a connection to the printer share.</p></li><li><p>Samba must authenticate the user.</p></li><li><p>Windows sends a copy of the print file over the network
 	into Samba's spooling area.</p></li><li><p>Windows closes the connection.</p></li><li><p>Samba invokes the print command to hand the file over
 	to the UNIX print subsystem's spooling area.</p></li><li><p>The UNIX print subsystem processes the print job.</p></li><li><p>The print file may need to be explicitly deleted
 	from the Samba spooling area. This item depends on your print spooler
-	configuration settings.</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2644574"></a>Printing-Related Configuration Parameters</h3></div></div></div><p>
-<a class="indexterm" name="id2644582"></a>
-<a class="indexterm" name="id2644589"></a>
-<a class="indexterm" name="id2644596"></a>
+	configuration settings.</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id406846"></a>Printing-Related Configuration Parameters</h3></div></div></div><p>
+<a class="indexterm" name="id406854"></a>
+<a class="indexterm" name="id406861"></a>
+<a class="indexterm" name="id406868"></a>
 There are a number of configuration parameters to control Samba's printing behavior. Please refer to the man
 page for <code class="filename">smb.conf</code> for an overview of these. As with other parameters, there are global-level (tagged with a
 <span class="emphasis"><em>G</em></span> in the listings) and service-level (<span class="emphasis"><em>S</em></span>) parameters.
@@ -103,20 +103,20 @@
 		or service-level shares (provided they do not have a different
 		setting defined for the same parameter, thus overriding the
 		global default).
-		</p></dd></dl></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2644675"></a>Simple Print Configuration</h2></div></div></div><p>
-<a class="indexterm" name="id2644683"></a>
-<a class="indexterm" name="id2644690"></a>
-<a class="indexterm" name="id2644697"></a>
-<a class="indexterm" name="id2644704"></a>
+		</p></dd></dl></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id406941"></a>Simple Print Configuration</h2></div></div></div><p>
+<a class="indexterm" name="id406949"></a>
+<a class="indexterm" name="id406955"></a>
+<a class="indexterm" name="id406962"></a>
+<a class="indexterm" name="id406969"></a>
 <a class="link" href="classicalprinting.html#simpleprc" title="Example 21.1. Simple Configuration with BSD Printing">Simple Configuration with BSD Printing</a> shows a simple printing configuration.
 If you compare this with your own, you may find additional parameters that have been preconfigured by your OS
 vendor. Following is a discussion and explanation of the parameters. This example does not use many
 parameters.  However, in many environments these are enough to provide a valid <code class="filename">smb.conf</code> file that enables
 all clients to print.
-</p><div class="example"><a name="simpleprc"></a><p class="title"><b>Example 21.1. Simple Configuration with BSD Printing</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2644756"></a><em class="parameter"><code>printing = bsd</code></em></td></tr><tr><td><a class="indexterm" name="id2644767"></a><em class="parameter"><code>load printers = yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2644788"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2644800"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2644811"></a><em class="parameter"><code>public = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2644823"></a><em class="parameter"><code>writable = no</code></em></td></tr></table></div></div><br class="example-break"><p>
-<a class="indexterm" name="id2644838"></a>
-<a class="indexterm" name="id2644844"></a>
-<a class="indexterm" name="id2644851"></a>
+</p><div class="example"><a name="simpleprc"></a><p class="title"><b>Example 21.1. Simple Configuration with BSD Printing</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id407017"></a><em class="parameter"><code>printing = bsd</code></em></td></tr><tr><td><a class="indexterm" name="id407028"></a><em class="parameter"><code>load printers = yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id407049"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id407060"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id407072"></a><em class="parameter"><code>public = yes</code></em></td></tr><tr><td><a class="indexterm" name="id407083"></a><em class="parameter"><code>writable = no</code></em></td></tr></table></div></div><br class="example-break"><p>
+<a class="indexterm" name="id407098"></a>
+<a class="indexterm" name="id407104"></a>
+<a class="indexterm" name="id407111"></a>
 This is only an example configuration. Samba assigns default values to all configuration parameters. The
 defaults are conservative and sensible. When a parameter is specified in the <code class="filename">smb.conf</code> file, this overwrites
 the default value. The <code class="literal">testparm</code> utility when run as root is capable of reporting all
@@ -124,26 +124,26 @@
 misconfigured settings. The complete output is easily 360 lines and more, so you may want to pipe it through a
 pager program.
 </p><p>  
-<a class="indexterm" name="id2644893"></a>
-<a class="indexterm" name="id2644900"></a>
-<a class="indexterm" name="id2644908"></a>
+<a class="indexterm" name="id407149"></a>
+<a class="indexterm" name="id407156"></a>
+<a class="indexterm" name="id407163"></a>
 The syntax for the configuration file is easy to grasp. You should know that  is not very picky about its
 syntax. As has been explained elsewhere in this book, Samba tolerates some spelling errors (such as
 <a class="link" href="smb.conf.5.html#BROWSEABLE">browseable</a> instead of <a class="link" href="smb.conf.5.html#BROWSABLE">browsable</a>), and spelling is
 case-insensitive. It is permissible to use <em class="parameter"><code>Yes/No</code></em> or <em class="parameter"><code>True/False</code></em>
 for Boolean settings. Lists of names may be separated by commas, spaces, or tabs.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2644958"></a>Verifying Configuration with <code class="literal">testparm</code></h3></div></div></div><p>
-<a class="indexterm" name="id2644970"></a>
-<a class="indexterm" name="id2644978"></a>
-<a class="indexterm" name="id2644984"></a>
-<a class="indexterm" name="id2644991"></a>
-<a class="indexterm" name="id2644998"></a>
-<a class="indexterm" name="id2645005"></a>
-<a class="indexterm" name="id2645012"></a>
-<a class="indexterm" name="id2645018"></a>
-<a class="indexterm" name="id2645025"></a>
-<a class="indexterm" name="id2645032"></a>
-<a class="indexterm" name="id2645039"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id407208"></a>Verifying Configuration with <code class="literal">testparm</code></h3></div></div></div><p>
+<a class="indexterm" name="id407220"></a>
+<a class="indexterm" name="id407227"></a>
+<a class="indexterm" name="id407234"></a>
+<a class="indexterm" name="id407241"></a>
+<a class="indexterm" name="id407248"></a>
+<a class="indexterm" name="id407255"></a>
+<a class="indexterm" name="id407261"></a>
+<a class="indexterm" name="id407268"></a>
+<a class="indexterm" name="id407275"></a>
+<a class="indexterm" name="id407282"></a>
+<a class="indexterm" name="id407289"></a>
 To see all (or at least most) printing-related settings in Samba, including the implicitly used ones, try the
 command outlined below. This command greps for all occurrences of <code class="constant">lp</code>,
 <code class="constant">print</code>, <code class="constant">spool</code>, <code class="constant">driver</code>,
@@ -194,11 +194,11 @@
 The <code class="literal">testparm</code> in Samba-3 behaves differently from that in 2.2.x: used without the
 &#8220;<span class="quote">-v</span>&#8221; switch, it only shows you the settings actually written into! To see the complete
 configuration used, add the &#8220;<span class="quote">-v</span>&#8221; parameter to testparm.
-</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2645155"></a>Rapid Configuration Validation</h3></div></div></div><p> 
-<a class="indexterm" name="id2645163"></a>
-<a class="indexterm" name="id2645170"></a>
-<a class="indexterm" name="id2645177"></a>
-<a class="indexterm" name="id2645184"></a>
+</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id407391"></a>Rapid Configuration Validation</h3></div></div></div><p> 
+<a class="indexterm" name="id407398"></a>
+<a class="indexterm" name="id407405"></a>
+<a class="indexterm" name="id407412"></a>
+<a class="indexterm" name="id407419"></a>
 Should you need to troubleshoot at any stage, please always come back to this point first and verify if
 <code class="literal">testparm</code> shows the parameters you expect. To give you a warning from personal experience,
 try to just comment out the <a class="link" href="smb.conf.5.html#LOADPRINTERS">load printers</a> parameter. If your 2.2.x system behaves like
@@ -211,8 +211,8 @@
 <code class="prompt">root# </code>testparm -v /etc/samba/smb.conf | egrep "(load printers)"
         load printers = Yes
 </pre><p>
-<a class="indexterm" name="id2645239"></a>
-<a class="indexterm" name="id2645246"></a>
+<a class="indexterm" name="id407469"></a>
+<a class="indexterm" name="id407475"></a>
 I assumed that commenting out of this setting should prevent Samba from
 publishing my printers, but it still did. It took some time to figure out
 the reason. But I am no longer fooled ... at least not by this.
@@ -226,7 +226,7 @@
 <code class="prompt">root# </code><strong class="userinput"><code>testparm -s -v smb.conf.simpleprinting | egrep "(load printers)"</code></strong>
         load printers = No
 </pre><p>
-<a class="indexterm" name="id2645290"></a>
+<a class="indexterm" name="id407515"></a>
 Only when the parameter is explicitly set to <a class="link" href="smb.conf.5.html#LOADPRINTERS">load printers = No</a> would
 Samba conform with my intentions. So, my strong advice is:
 </p><div class="itemizedlist"><ul type="disc"><li><p>Never rely on commented-out parameters.</p></li><li><p>Always set parameters explicitly as you intend them to
@@ -237,8 +237,8 @@
 <code class="prompt">root# </code><strong class="userinput"><code>cat /etc/samba/smb.conf-minimal</code></strong>
         [printers]
 </pre><p>
-<a class="indexterm" name="id2645358"></a>
-<a class="indexterm" name="id2645365"></a>
+<a class="indexterm" name="id407579"></a>
+<a class="indexterm" name="id407586"></a>
 This example should show that you can use <code class="literal">testparm</code> to test any Samba configuration file.
 Actually, we encourage you <span class="emphasis"><em>not</em></span> to change your working system (unless you know exactly
 what you are doing). Don't rely on the assumption that changes will only take effect after you restart smbd!
@@ -276,10 +276,10 @@
 </pre><p>
 <code class="literal">testparm</code> issued two warnings:
 </p><div class="itemizedlist"><ul type="disc"><li><p>We did not specify the <em class="parameter"><code>[printers]</code></em> section as printable.</p></li><li><p>We did not tell Samba which spool directory to use.</p></li></ul></div><p>
-<a class="indexterm" name="id2645458"></a>
-<a class="indexterm" name="id2645465"></a>
-<a class="indexterm" name="id2645470"></a>
-<a class="indexterm" name="id2645476"></a>
+<a class="indexterm" name="id407665"></a>
+<a class="indexterm" name="id407672"></a>
+<a class="indexterm" name="id407678"></a>
+<a class="indexterm" name="id407683"></a>
 However, this was not fatal, and Samba will default to values that will work. Please, do not rely on this and
 do not use this example. This was included to encourage you to be careful to design and specify your setup to
 do precisely what you require. The outcome on your system may vary for some parameters given, since Samba may
@@ -288,15 +288,15 @@
 put the comment sign at the front). At first I regarded this as a bug in my Samba versions. But the man page
 clearly says: <code class="literal">Internal whitespace in a parameter value is retained verbatim.</code> This means
 that a line consisting of, for example,
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td># This defines LPRng as the printing system</td></tr><tr><td><a class="indexterm" name="id2645516"></a><em class="parameter"><code>printing =  lprng</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td># This defines LPRng as the printing system</td></tr><tr><td><a class="indexterm" name="id407717"></a><em class="parameter"><code>printing =  lprng</code></em></td></tr></table><p>
 </p><p>
 will regard the whole of the string after the <code class="literal">=</code> sign as the value you want to define. This
 is an invalid value that will be ignored, and a default value will be used in its place.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2645543"></a>Extended Printing Configuration</h2></div></div></div><p>
-<a class="indexterm" name="id2645551"></a>
-<a class="indexterm" name="id2645558"></a>
-<a class="indexterm" name="id2645565"></a>
-<a class="indexterm" name="id2645572"></a>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id407742"></a>Extended Printing Configuration</h2></div></div></div><p>
+<a class="indexterm" name="id407750"></a>
+<a class="indexterm" name="id407757"></a>
+<a class="indexterm" name="id407763"></a>
+<a class="indexterm" name="id407770"></a>
 <a class="link" href="classicalprinting.html#extbsdpr" title="Example 21.2. Extended BSD Printing Configuration">Extended BSD Printing Configuration</a> shows a more verbose configuration for
 print-related settings in a BSD-style printing environment. What follows is a discussion and explanation of
 the various parameters. We chose to use BSD-style printing here because it is still the most commonly used
@@ -304,22 +304,22 @@
 separate chapter. The example explicitly names many parameters that do not need to be specified because they
 are set by default. You could use a much leaner <code class="filename">smb.conf</code> file, or you can use <code class="literal">testparm</code> or
 <code class="literal">SWAT</code> to optimize the <code class="filename">smb.conf</code> file to remove all parameters that are set at default.
-</p><div class="example"><a name="extbsdpr"></a><p class="title"><b>Example 21.2. Extended BSD Printing Configuration</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2645646"></a><em class="parameter"><code>printing = bsd</code></em></td></tr><tr><td><a class="indexterm" name="id2645657"></a><em class="parameter"><code>load printers = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2645669"></a><em class="parameter"><code>show add printer wizard = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2645681"></a><em class="parameter"><code>printcap name = /etc/printcap</code></em></td></tr><tr><td><a class="indexterm" name="id2645693"></a><em class="parameter"><code>printer admin = @ntadmin, root</code></em></td></tr><tr><td><a class="indexterm" name="id2645705"></a><em class="parameter"><code>max print jobs = 100</code></em></td></tr><tr><td><a class="indexterm" name="id2645717"></a><em class="parameter"><code>lpq cache time = 20</code></em></td></tr><tr><td><a class="indexterm" name="id2645729"></a><em class="parameter"><code>use client driver = no</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id2645750"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id2645761"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2645773"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id2645785"></a><em class="parameter"><code>browseable = no</code></em></td></tr><tr><td><a class="indexterm" name="id2645796"></a><em class="parameter"><code>guest ok = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2645808"></a><em class="parameter"><code>public = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2645819"></a><em class="parameter"><code>read only = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2645831"></a><em class="parameter"><code>writable = no       </code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[my_printer_name]</code></em></td></tr><tr><td><a class="indexterm" name="id2645852"></a><em class="parameter"><code>comment = Printer with Restricted Access</code></em></td></tr><tr><td><a class="indexterm" name="id2645864"></a><em class="parameter"><code>path = /var/spool/samba_my_printer</code></em></td></tr><tr><td><a class="indexterm" name="id2645876"></a><em class="parameter"><code>printer admin = kurt</code></em></td></tr><tr><td><a class="indexterm" name="id2645888"></a><em class="parameter"><code>browseable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2645899"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2645911"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id2645922"></a><em class="parameter"><code>hosts allow = 0.0.0.0</code></em></td></tr><tr><td><a class="indexterm" name="id2645934"></a><em class="parameter"><code>hosts deny = turbo_xp, 10.160.50.23, 10.160.51.60</code></em></td></tr><tr><td><a class="indexterm" name="id2645946"></a><em class="parameter"><code>guest ok = no</code></em></td></tr></table></div></div><br class="example-break"><p>
-<a class="indexterm" name="id2645960"></a>
-<a class="indexterm" name="id2645965"></a>
-<a class="indexterm" name="id2645971"></a>
+</p><div class="example"><a name="extbsdpr"></a><p class="title"><b>Example 21.2. Extended BSD Printing Configuration</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id407838"></a><em class="parameter"><code>printing = bsd</code></em></td></tr><tr><td><a class="indexterm" name="id407850"></a><em class="parameter"><code>load printers = yes</code></em></td></tr><tr><td><a class="indexterm" name="id407861"></a><em class="parameter"><code>show add printer wizard = yes</code></em></td></tr><tr><td><a class="indexterm" name="id407873"></a><em class="parameter"><code>printcap name = /etc/printcap</code></em></td></tr><tr><td><a class="indexterm" name="id407884"></a><em class="parameter"><code>printer admin = @ntadmin, root</code></em></td></tr><tr><td><a class="indexterm" name="id407896"></a><em class="parameter"><code>max print jobs = 100</code></em></td></tr><tr><td><a class="indexterm" name="id407908"></a><em class="parameter"><code>lpq cache time = 20</code></em></td></tr><tr><td><a class="indexterm" name="id407919"></a><em class="parameter"><code>use client driver = no</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id407939"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id407951"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id407962"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id407974"></a><em class="parameter"><code>browseable = no</code></em></td></tr><tr><td><a class="indexterm" name="id407985"></a><em class="parameter"><code>guest ok = yes</code></em></td></tr><tr><td><a class="indexterm" name="id407997"></a><em class="parameter"><code>public = yes</code></em></td></tr><tr><td><a class="indexterm" name="id408008"></a><em class="parameter"><code>read only = yes</code></em></td></tr><tr><td><a class="indexterm" name="id408020"></a><em class="parameter"><code>writable = no       </code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[my_printer_name]</code></em></td></tr><tr><td><a class="indexterm" name="id408040"></a><em class="parameter"><code>comment = Printer with Restricted Access</code></em></td></tr><tr><td><a class="indexterm" name="id408052"></a><em class="parameter"><code>path = /var/spool/samba_my_printer</code></em></td></tr><tr><td><a class="indexterm" name="id408063"></a><em class="parameter"><code>printer admin = kurt</code></em></td></tr><tr><td><a class="indexterm" name="id408075"></a><em class="parameter"><code>browseable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id408086"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id408098"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id408109"></a><em class="parameter"><code>hosts allow = 0.0.0.0</code></em></td></tr><tr><td><a class="indexterm" name="id408121"></a><em class="parameter"><code>hosts deny = turbo_xp, 10.160.50.23, 10.160.51.60</code></em></td></tr><tr><td><a class="indexterm" name="id408132"></a><em class="parameter"><code>guest ok = no</code></em></td></tr></table></div></div><br class="example-break"><p>
+<a class="indexterm" name="id408146"></a>
+<a class="indexterm" name="id408152"></a>
+<a class="indexterm" name="id408157"></a>
 This is an example configuration. You may not find all the settings that are in the configuration file that
 was provided by the OS vendor. Samba configuration parameters, if not explicitly set, default to a sensible
 value.  To see all settings, as <code class="constant">root</code> use the <code class="literal">testparm</code> utility.
 <code class="literal">testparm</code> gives warnings for misconfigured settings.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2645998"></a>Detailed Explanation Settings</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id408182"></a>Detailed Explanation Settings</h3></div></div></div><p>
 The following is a discussion of the settings from <a class="link" href="classicalprinting.html#extbsdpr" title="Example 21.2. Extended BSD Printing Configuration">Extended BSD Printing
 Configuration</a> <a class="link" href="classicalprinting.html#extbsdpr" title="Example 21.2. Extended BSD Printing Configuration">Extended BSD Printing Configuration</a>.
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2646023"></a>The [global] Section</h4></div></div></div><p>
-<a class="indexterm" name="id2646031"></a>
-<a class="indexterm" name="id2646037"></a>
-<a class="indexterm" name="id2646044"></a>
-<a class="indexterm" name="id2646051"></a>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id408205"></a>The [global] Section</h4></div></div></div><p>
+<a class="indexterm" name="id408213"></a>
+<a class="indexterm" name="id408219"></a>
+<a class="indexterm" name="id408226"></a>
+<a class="indexterm" name="id408233"></a>
 The <em class="parameter"><code>[global]</code></em> section is one of four special sections (along with <em class="parameter"><code>[homes]</code></em>, <em class="parameter"><code>[printers]</code></em>, and <em class="parameter"><code>[print$]</code></em>). The
 <em class="parameter"><code>[global]</code></em> contains all parameters that apply to the server as a whole. It is the place
 for parameters that have only a global meaning. It may also contain service-level parameters that define
@@ -327,33 +327,33 @@
 setting the same value repeatedly. (Within each individual section or share, you may, however, override these
 globally set share settings and specify other values).
 </p><div class="variablelist"><dl><dt><span class="term"><a class="link" href="smb.conf.5.html#PRINTING">printing = bsd </a></span></dt><dd><p>
-<a class="indexterm" name="id2646118"></a>
-<a class="indexterm" name="id2646125"></a>
-<a class="indexterm" name="id2646131"></a>
-<a class="indexterm" name="id2646138"></a>
-<a class="indexterm" name="id2646145"></a>
-<a class="indexterm" name="id2646152"></a>
-<a class="indexterm" name="id2646158"></a>
-<a class="indexterm" name="id2646165"></a>
-<a class="indexterm" name="id2646172"></a>
-<a class="indexterm" name="id2646178"></a>
-<a class="indexterm" name="id2646185"></a>
-<a class="indexterm" name="id2646192"></a>
+<a class="indexterm" name="id408294"></a>
+<a class="indexterm" name="id408300"></a>
+<a class="indexterm" name="id408307"></a>
+<a class="indexterm" name="id408314"></a>
+<a class="indexterm" name="id408321"></a>
+<a class="indexterm" name="id408327"></a>
+<a class="indexterm" name="id408334"></a>
+<a class="indexterm" name="id408341"></a>
+<a class="indexterm" name="id408348"></a>
+<a class="indexterm" name="id408354"></a>
+<a class="indexterm" name="id408361"></a>
+<a class="indexterm" name="id408368"></a>
 		Causes Samba to use default print commands applicable for the BSD (also known as RFC 1179 style or LPR/LPD)
 		printing system. In general, the <em class="parameter"><code>printing</code></em> parameter informs Samba about the print
 		subsystem it should expect. Samba supports CUPS, LPD, LPRNG, SYSV, HPUX, AIX, QNX, and PLP. Each of these
 		systems defaults to a different <a class="link" href="smb.conf.5.html#PRINTCOMMAND">print command</a> (and other queue control commands).
 		</p><div class="caution" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Caution</h3><p>
-<a class="indexterm" name="id2646228"></a>
-<a class="indexterm" name="id2646235"></a>
+<a class="indexterm" name="id408400"></a>
+<a class="indexterm" name="id408406"></a>
 		The <a class="link" href="smb.conf.5.html#PRINTING">printing</a> parameter is normally a service-level parameter. Since it is included
 		here in the <em class="parameter"><code>[global]</code></em> section, it will take effect for all printer shares that are not
 		defined differently. Samba-3 no longer supports the SOFTQ printing system.
 		</p></div></dd><dt><span class="term"><a class="link" href="smb.conf.5.html#LOADPRINTERS">load printers = yes </a></span></dt><dd><p>
-<a class="indexterm" name="id2646283"></a>
-<a class="indexterm" name="id2646289"></a>
-<a class="indexterm" name="id2646296"></a>
-<a class="indexterm" name="id2646303"></a>
+<a class="indexterm" name="id408450"></a>
+<a class="indexterm" name="id408456"></a>
+<a class="indexterm" name="id408463"></a>
+<a class="indexterm" name="id408470"></a>
 		Tells Samba to create automatically all available printer shares. Available printer shares are discovered by
 		scanning the printcap file. All created printer shares are also loaded for browsing. If you use this
 		parameter, you do not need to specify separate shares for each printer. Each automatically created printer
@@ -361,11 +361,11 @@
 		<em class="parameter"><code>load printers = no</code></em> setting will allow you to specify each UNIX printer you want to
 		share separately, leaving out some you do not want to be publicly visible and available).
 		</p></dd><dt><span class="term"><a class="link" href="smb.conf.5.html#SHOWADDPRINTERWIZARD">show add printer wizard = yes </a></span></dt><dd><p>
-<a class="indexterm" name="id2646351"></a>
-<a class="indexterm" name="id2646358"></a>
-<a class="indexterm" name="id2646364"></a>
-<a class="indexterm" name="id2646371"></a>
-<a class="indexterm" name="id2646378"></a>
+<a class="indexterm" name="id408512"></a>
+<a class="indexterm" name="id408519"></a>
+<a class="indexterm" name="id408526"></a>
+<a class="indexterm" name="id408532"></a>
+<a class="indexterm" name="id408539"></a>
 		Setting is normally enabled by default (even if the parameter is not specified in <code class="filename">smb.conf</code>).  It causes the
 		<span class="guiicon">Add Printer Wizard</span> icon to appear in the <span class="guiicon">Printers</span> folder of the Samba
 		host's share listing (as shown in <span class="guiicon">Network Neighborhood</span> or by the <code class="literal">net
@@ -374,23 +374,23 @@
 		the <em class="parameter"><code>[print$]</code></em> share and associate it with a printer (if the respective queue exists
 		before the action), or exchange a printer's driver for any other previously uploaded driver.
 		</p></dd><dt><span class="term"><a class="link" href="smb.conf.5.html#MAXPRINTJOBS">max print jobs = 100 </a></span></dt><dd><p>
-<a class="indexterm" name="id2646460"></a>
+<a class="indexterm" name="id408614"></a>
 		Sets the upper limit to 100 print jobs being active on the Samba server at any one time. Should a client
 		submit a job that exceeds this number, a "no more space available on server" type of error message will be
 		returned by Samba to the client. A setting of zero (the default) means there is <span class="emphasis"><em>no</em></span> limit
 		at all.
 		</p></dd><dt><span class="term"><a class="link" href="smb.conf.5.html#PRINTCAPNAME">printcap name = /etc/printcap </a></span></dt><dd><p>
-<a class="indexterm" name="id2646496"></a>
-<a class="indexterm" name="id2646502"></a>
-<a class="indexterm" name="id2646509"></a>
+<a class="indexterm" name="id408647"></a>
+<a class="indexterm" name="id408653"></a>
+<a class="indexterm" name="id408660"></a>
 		Tells Samba where to look for a list of available printer names. Where CUPS is used, make sure that a printcap
 		file is written. This is controlled by the <code class="constant">Printcap</code> directive in the
 		<code class="filename">cupsd.conf</code> file.
 	</p></dd><dt><span class="term"><a class="link" href="smb.conf.5.html#PRINTERADMIN">printer admin = @ntadmin </a></span></dt><dd><p>
-<a class="indexterm" name="id2646547"></a>
-<a class="indexterm" name="id2646553"></a>
-<a class="indexterm" name="id2646560"></a>
-<a class="indexterm" name="id2646567"></a>
+<a class="indexterm" name="id408695"></a>
+<a class="indexterm" name="id408701"></a>
+<a class="indexterm" name="id408708"></a>
+<a class="indexterm" name="id408715"></a>
 		Members of the ntadmin group should be able to add drivers and set printer properties
 		(<code class="constant">ntadmin</code> is only an example name; it needs to be a valid UNIX group name); root is
 		implicitly always a <a class="link" href="smb.conf.5.html#PRINTERADMIN">printer admin</a>. The <code class="literal">@</code> sign precedes group names
@@ -399,20 +399,20 @@
 		Samba-2.2</a>).  In larger installations, the <a class="link" href="smb.conf.5.html#PRINTERADMIN">printer admin</a> parameter is normally a
 		per-share parameter. This permits different groups to administer each printer share.
 	</p></dd><dt><span class="term"><a class="link" href="smb.conf.5.html#LPQCACHETIME">lpq cache time = 20 </a></span></dt><dd><p>
-<a class="indexterm" name="id2646648"></a>
-<a class="indexterm" name="id2646654"></a>
+<a class="indexterm" name="id408788"></a>
+<a class="indexterm" name="id408795"></a>
 		Controls the cache time for the results of the lpq command. It prevents the lpq command being called too often
 		and reduces the load on a heavily used print server.
 	</p></dd><dt><span class="term"><a class="link" href="smb.conf.5.html#USECLIENTDRIVER">use client driver = no </a></span></dt><dd><p>
-<a class="indexterm" name="id2646683"></a>
+<a class="indexterm" name="id408821"></a>
 		If set to <code class="constant">yes</code>, only takes effect for Windows NT/200x/XP clients (and not for Win
 		95/98/ME). Its default value is <code class="constant">No</code> (or <code class="constant">False</code>).  It must
 		<span class="emphasis"><em>not</em></span> be enabled on print shares (with a <code class="constant">yes</code> or
 		<code class="constant">true</code> setting) that have valid drivers installed on the Samba server. For more detailed
 		explanations, see the <code class="filename">smb.conf</code> man page.
 	</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="ptrsect"></a>The [printers] Section</h4></div></div></div><p>
-<a class="indexterm" name="id2646735"></a>
-<a class="indexterm" name="id2646742"></a>
+<a class="indexterm" name="id408871"></a>
+<a class="indexterm" name="id408878"></a>
 The printers section is the second special section. If a section with this name appears in the <code class="filename">smb.conf</code>,
 users are able to connect to any printer specified in the Samba host's printcap file, because Samba on startup
 then creates a printer share for every printer name it finds in the printcap file. You could regard this
@@ -468,9 +468,9 @@
 		connection), but only via print spooling operations. Normal write operations are not permitted.
 		</p></dd><dt><span class="term"><a class="link" href="smb.conf.5.html#WRITABLE">writable = no </a></span></dt><dd><p>
 		Is a synonym for <a class="link" href="smb.conf.5.html#READONLY">read only = yes</a>.
-		</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2647129"></a>Any [my_printer_name] Section</h4></div></div></div><p>
-<a class="indexterm" name="id2647137"></a>
-<a class="indexterm" name="id2647144"></a>
+		</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id409231"></a>Any [my_printer_name] Section</h4></div></div></div><p>
+<a class="indexterm" name="id409238"></a>
+<a class="indexterm" name="id409245"></a>
 If a <em class="parameter"><code>[my_printer_name]</code></em> section appears in the <code class="filename">smb.conf</code> file, which includes the
 parameter <a class="link" href="smb.conf.5.html#PRINTABLE">printable = yes</a> Samba will configure it as a printer share.
 Windows 9x/Me clients may have problems with connecting or loading printer drivers if the share name has more
@@ -502,11 +502,11 @@
 		you can see, you could name IP addresses as well as NetBIOS hostnames here.
 		</p></dd><dt><span class="term"><a class="link" href="smb.conf.5.html#GUESTOK">guest ok = no </a></span></dt><dd><p>
 		This printer is not open for the guest account.
-		</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2647431"></a>Print Commands</h4></div></div></div><p>
-<a class="indexterm" name="id2647439"></a>
-<a class="indexterm" name="id2647445"></a>
-<a class="indexterm" name="id2647452"></a>
-<a class="indexterm" name="id2647459"></a>
+		</p></dd></dl></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id409507"></a>Print Commands</h4></div></div></div><p>
+<a class="indexterm" name="id409515"></a>
+<a class="indexterm" name="id409522"></a>
+<a class="indexterm" name="id409528"></a>
+<a class="indexterm" name="id409535"></a>
 In each section defining a printer (or in the <em class="parameter"><code>[printers]</code></em> section),
 a <em class="parameter"><code>print command</code></em> parameter may be defined. It sets a command to process the files
 that have been placed into the Samba print spool directory for that printer. (That spool directory was,
@@ -518,8 +518,8 @@
 to debug printing. If you craft your own print commands (or even develop print command shell scripts),
 make sure you pay attention to the need to remove the files from the Samba spool directory. Otherwise,
 your hard disk may soon suffer from shortage of free space.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2647507"></a>Default UNIX System Printing Commands</h4></div></div></div><p>
-<a class="indexterm" name="id2647514"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id409575"></a>Default UNIX System Printing Commands</h4></div></div></div><p>
+<a class="indexterm" name="id409582"></a>
 You learned earlier that Samba, in most cases, uses its built-in settings for many parameters if it cannot
 find an explicitly stated one in its configuration file. The same is true for the <a class="link" href="smb.conf.5.html#PRINTCOMMAND">print command</a>. The default print command varies depending on the <a class="link" href="smb.conf.5.html#PRINTING">printing</a> parameter
 setting. In the commands listed in <a class="link" href="classicalprinting.html#printOptions" title="Table 21.1. Default Printing Settings">Default Printing Settings</a> , you will
@@ -528,29 +528,29 @@
 explained in more detail in <a class="link" href="classicalprinting.html#printOptions" title="Table 21.1. Default Printing Settings">Default Printing Settings</a> presents an overview
 of key printing options but excludes the special case of CUPS, is discussed in <a class="link" href="CUPS-printing.html" title="Chapter 22. CUPS Printing Support">CUPS Printing Support</a>.
 </p><div class="table"><a name="printOptions"></a><p class="title"><b>Table 21.1. Default Printing Settings</b></p><div class="table-contents"><table summary="Default Printing Settings" border="1"><colgroup><col align="left"><col align="left"></colgroup><thead><tr><th align="left">Setting</th><th align="left">Default Printing Commands</th></tr></thead><tbody><tr><td align="left"><a class="link" href="smb.conf.5.html#PRINTING">printing = bsd|aix|lprng|plp</a></td><td align="left">print command is <code class="literal">lpr -r -P%p %s</code></td></tr><tr><td align="left"><a class="link" href="smb.conf.5.html#PRINTING">printing = sysv|hpux</a></td><td align="left">print command is <code class="literal">lp -c -P%p %s; rm %s</code></td></tr><tr><td align="left"> <a class="link" href="smb.conf.5.html#PRINTING">printing = qnx</a></td><td align="left">print command is <code class="literal">lp -r -P%p -s %s</code></td></tr><tr><td align="left"><a class="link" href="smb.conf.5.html#PRINTING">printing = bsd|aix|lprng|plp</a></td><td align="left">lpq command is <code class="literal">lpq -P%p</code></td></tr><tr><td align="left"><a class="link" href="smb.conf.5.html#PRINTING">printing = sysv|hpux</a></td><td align="left">lpq command is <code class="literal">lpstat -o%p</code></td></tr><tr><td align="left"><a class="link" href="smb.conf.5.html#PRINTING">printing = qnx</a></td><td align="left">lpq command is <code class="literal">lpq -P%p</code></td></tr><tr><td align="left"><a class="link" href="smb.conf.5.html#PRINTING">printing = bsd|aix|lprng|plp</a></td><td align="left">lprm command is <code class="literal">lprm -P%p %j</code></td></tr><tr><td align="left"><a class="link" href="smb.conf.5.html#PRINTING">printing = sysv|hpux</a></td><td align="left">lprm command is <code class="literal">cancel %p-%j</code></td></tr><tr><td align="left"><a class="link" href="smb.conf.5.html#PRINTING">printing = qnx</a></td><td align="left">lprm command is <code class="literal">cancel %p-%j</code></td></tr><tr><td align="left"><a class="link" href="smb.conf.5.html#PRINTING">printing = bsd|aix|lprng|plp</a></td><td align="left">lppause command is <code class="literal">lp -i %p-%j -H hold</code></td></tr><tr><td align="left"><a class="link" href="smb.conf.5.html#PRINTING">printing = sysv|hpux</a></td><td align="left">lppause command   (...is empty)</td></tr><tr><td align="left"><a class="link" href="smb.conf.5.html#PRINTING">printing = qnx</a></td><td align="left">lppause command   (...is empty)</td></tr><tr><td align="left"><a class="link" href="smb.conf.5.html#PRINTING">printing = bsd|aix|lprng|plp</a></td><td align="left">lpresume command is <code class="literal">lp -i %p-%j -H resume</code></td></tr><tr><td align="left"><a class="link" href="smb.conf.5.html#PRINTING">printing = sysv|hpux</a></td><td align="left">lpresume command   (...is empty)</td></tr><tr><td align="left"><a class="link" href="smb.conf.5.html#PRINTING">printing = qnx</a></td><td align="left">lpresume command   (...is empty)</td></tr></tbody></table></div></div><br class="table-break"><p>
-<a class="indexterm" name="id2647978"></a>
-<a class="indexterm" name="id2647985"></a>
-<a class="indexterm" name="id2647991"></a>
-<a class="indexterm" name="id2647998"></a>
+<a class="indexterm" name="id410022"></a>
+<a class="indexterm" name="id410029"></a>
+<a class="indexterm" name="id410036"></a>
+<a class="indexterm" name="id410042"></a>
 For <em class="parameter"><code>printing = CUPS</code></em>, if Samba is compiled against libcups, it uses the CUPS API to
 submit jobs. (It is a good idea also to set <a class="link" href="smb.conf.5.html#PRINTCAP">printcap = cups</a> in case your
 <code class="filename">cupsd.conf</code> is set to write its autogenerated printcap file to an unusual place).
 Otherwise, Samba maps to the System V printing commands with the -oraw option for printing; that is, it uses
 <code class="literal">lp -c -d%p -oraw; rm %s</code>. With <em class="parameter"><code>printing = cups</code></em>, and if Samba is
 compiled against libcups, any manually set print command will be ignored!
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2648051"></a>Custom Print Commands</h4></div></div></div><p>
-<a class="indexterm" name="id2648059"></a>
-<a class="indexterm" name="id2648065"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id410090"></a>Custom Print Commands</h4></div></div></div><p>
+<a class="indexterm" name="id410098"></a>
+<a class="indexterm" name="id410105"></a>
 After a print job has finished spooling to a service, the <a class="link" href="smb.conf.5.html#PRINTCOMMAND">print command</a> will be used
 by Samba via a system() call to process the spool file. Usually the command specified will submit the spool
 file to the host's printing subsystem. But there is no requirement at all that this must be the case. The
 print subsystem may not remove the spool file on its own, so whatever command you specify, you should ensure
 that the spool file is deleted after it has been processed.
 </p><p>
-<a class="indexterm" name="id2648102"></a>
-<a class="indexterm" name="id2648108"></a>
-<a class="indexterm" name="id2648115"></a>
-<a class="indexterm" name="id2648122"></a>
+<a class="indexterm" name="id410133"></a>
+<a class="indexterm" name="id410139"></a>
+<a class="indexterm" name="id410146"></a>
+<a class="indexterm" name="id410153"></a>
 There is no difficulty with using your own customized print commands with the traditional printing systems.
 However, if you do not wish to roll your own, you should be well informed about the default built-in commands
 that Samba uses for each printing subsystem (see <a class="link" href="classicalprinting.html#printOptions" title="Table 21.1. Default Printing Settings">Default Printing
@@ -560,28 +560,28 @@
 appropriate value automatically. Print commands can handle all Samba macro substitutions. In regard to
 printing, the following ones do have special relevance:
 </p><div class="itemizedlist"><ul type="disc"><li><p><em class="parameter"><code>%s, %f</code></em>  the path to the spool file name.</p></li><li><p><em class="parameter"><code>%p</code></em>  the appropriate printer name.</p></li><li><p><em class="parameter"><code>%J</code></em>  the job name as transmitted by the client.</p></li><li><p><em class="parameter"><code>%c</code></em>  the number of printed pages of the spooled job (if known).</p></li><li><p><em class="parameter"><code>%z</code></em>  the size of the spooled print job (in bytes).</p></li></ul></div><p>
-<a class="indexterm" name="id2648221"></a>
+<a class="indexterm" name="id410244"></a>
 The print command must contain at least one occurrence of <em class="parameter"><code>%s</code></em> or
 <em class="parameter"><code>%f</code></em>. The <em class="parameter"><code>%p</code></em> is optional. If no printer name is supplied,
 the <em class="parameter"><code>%p</code></em> will be silently removed from the print command. In this case, the job is
 sent to the default printer.
 </p><p>
-<a class="indexterm" name="id2648257"></a>
-<a class="indexterm" name="id2648264"></a>
+<a class="indexterm" name="id410279"></a>
+<a class="indexterm" name="id410286"></a>
 If specified in the <em class="parameter"><code>[global]</code></em> section, the print command given will be
 used for any printable service that does not have its own print command specified. If there is neither a
 specified print command for a printable service nor a global print command, spool files will be created
 but not processed! Most importantly, print files will not be removed, so they will consume disk space.
 </p><p>
-<a class="indexterm" name="id2648286"></a>
-<a class="indexterm" name="id2648293"></a>
+<a class="indexterm" name="id410305"></a>
+<a class="indexterm" name="id410311"></a>
 Printing may fail on some UNIX systems when using the <span class="emphasis"><em>nobody</em></span> account. If this happens, create an
 alternative guest account and give it the privilege to print. Set up this guest account in the
 <em class="parameter"><code>[global]</code></em> section with the <em class="parameter"><code>guest account</code></em> parameter.
 </p><p>
-<a class="indexterm" name="id2648322"></a>
-<a class="indexterm" name="id2648329"></a>
-<a class="indexterm" name="id2648336"></a>
+<a class="indexterm" name="id410339"></a>
+<a class="indexterm" name="id410345"></a>
+<a class="indexterm" name="id410352"></a>
 You can form quite complex print commands. You need to realize that print commands are just
 passed to a UNIX shell. The shell is able to expand the included environment variables as
 usual. (The syntax to include a UNIX environment variable <em class="parameter"><code>$variable</code></em>
@@ -589,15 +589,15 @@
 <a class="link" href="smb.conf.5.html#PRINTCOMMAND">print command</a> example, the following will log a print job
 to <code class="filename">/tmp/print.log</code>, print the file, then remove it. The semicolon (&#8220;<span class="quote">;</span>&#8221;
 is the usual separator for commands in shell scripts:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2648392"></a><em class="parameter"><code>print command = echo Printing %s &gt;&gt; /tmp/print.log; lpr -P %p %s; rm %s</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id410402"></a><em class="parameter"><code>print command = echo Printing %s &gt;&gt; /tmp/print.log; lpr -P %p %s; rm %s</code></em></td></tr></table><p>
 You may have to vary your own command considerably from this example depending on how you normally print
 files on your system. The default for the <a class="link" href="smb.conf.5.html#PRINTCOMMAND">print command</a>
 parameter varies depending on the setting of the <a class="link" href="smb.conf.5.html#PRINTING">printing</a>
 parameter. Another example is:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2648442"></a><em class="parameter"><code>print command = /usr/local/samba/bin/myprintscript %p %s</code></em></td></tr></table></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="cups-msrpc"></a>Printing Developments Since Samba-2.2</h2></div></div></div><p>
-<a class="indexterm" name="id2648469"></a>
-<a class="indexterm" name="id2648475"></a>
-<a class="indexterm" name="id2648482"></a>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id410447"></a><em class="parameter"><code>print command = /usr/local/samba/bin/myprintscript %p %s</code></em></td></tr></table></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="cups-msrpc"></a>Printing Developments Since Samba-2.2</h2></div></div></div><p>
+<a class="indexterm" name="id410474"></a>
+<a class="indexterm" name="id410481"></a>
+<a class="indexterm" name="id410488"></a>
 Prior to Samba-2.2.x, print server support for Windows clients was limited to <span class="emphasis"><em>LanMan</em></span>
 printing calls. This is the same protocol level as Windows 9x/Me PCs offer when they share printers.
 Beginning with the 2.2.0 release, Samba started to support the native Windows NT printing mechanisms. These
@@ -606,67 +606,67 @@
 </p><p>
 The additional functionality provided by the new SPOOLSS support includes:
 </p><div class="itemizedlist"><ul type="disc"><li><p>
-<a class="indexterm" name="id2648517"></a>
+<a class="indexterm" name="id410519"></a>
 	Support for downloading printer driver files to Windows 95/98/NT/2000 clients upon
 	demand (<span class="emphasis"><em>Point'n'Print</em></span>).
 	</p></li><li><p>
-<a class="indexterm" name="id2648534"></a>
+<a class="indexterm" name="id410535"></a>
 	Uploading of printer drivers via the Windows NT <span class="emphasis"><em>Add Printer Wizard</em></span> (APW)
 	or the <a class="ulink" href="http://imprints.sourceforge.net/" target="_top">Imprints</a> tool set.
 	</p></li><li><p>	
-<a class="indexterm" name="id2648557"></a>
-<a class="indexterm" name="id2648564"></a>
-<a class="indexterm" name="id2648570"></a>
-<a class="indexterm" name="id2648577"></a>
-<a class="indexterm" name="id2648584"></a>
+<a class="indexterm" name="id410556"></a>
+<a class="indexterm" name="id410563"></a>
+<a class="indexterm" name="id410570"></a>
+<a class="indexterm" name="id410576"></a>
+<a class="indexterm" name="id410583"></a>
 	Support for the native MS-RPC printing calls such as StartDocPrinter, EnumJobs(), and so on. (See the
 	<a class="ulink" href="http://msdn.microsoft.com/" target="_top">MSDN documentation</a> for more information on the
 	Win32 printing API).
 	</p></li><li><p>
-<a class="indexterm" name="id2648604"></a>
-<a class="indexterm" name="id2648611"></a>
+<a class="indexterm" name="id410602"></a>
+<a class="indexterm" name="id410608"></a>
 	Support for NT Access Control Lists (ACL) on printer objects.
 	</p></li><li><p>
-<a class="indexterm" name="id2648623"></a>
+<a class="indexterm" name="id410620"></a>
 	Improved support for printer queue manipulation through the use of internal databases for spooled
 	job information (implemented by various <code class="filename">*.tdb</code> files).
 	</p></li></ul></div><p>
-<a class="indexterm" name="id2648643"></a>
-<a class="indexterm" name="id2648650"></a>
+<a class="indexterm" name="id410638"></a>
+<a class="indexterm" name="id410645"></a>
 A benefit of updating is that Samba-3 is able to publish its printers to Active Directory (or LDAP).
 </p><p>
-<a class="indexterm" name="id2648662"></a>
+<a class="indexterm" name="id410656"></a>
 A fundamental difference exists between MS Windows NT print servers and Samba operation. Windows NT
 permits the installation of local printers that are not shared. This is an artifact of the fact that
 any Windows NT machine (server or client) may be used by a user as a workstation. Samba will publish all
 printers that are made available, either by default or by specific declaration via printer-specific shares.
 </p><p>
-<a class="indexterm" name="id2648679"></a>
-<a class="indexterm" name="id2648685"></a>
-<a class="indexterm" name="id2648692"></a>
-<a class="indexterm" name="id2648699"></a>
-<a class="indexterm" name="id2648706"></a>
+<a class="indexterm" name="id410670"></a>
+<a class="indexterm" name="id410676"></a>
+<a class="indexterm" name="id410683"></a>
+<a class="indexterm" name="id410690"></a>
+<a class="indexterm" name="id410696"></a>
 Windows NT/200x/XP Professional clients do not have to use the standard SMB printer share; they can
 print directly to any printer on another Windows NT host using MS-RPC. This, of course, assumes that
 the client has the necessary privileges on the remote host that serves the printer resource. The
 default permissions assigned by Windows NT to a printer gives the print permissions to the well-known
 <span class="emphasis"><em>Everyone</em></span> group. (The older clients of type Windows 9x/Me can only print to shared
 printers.)
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2648726"></a>Point'n'Print Client Drivers on Samba Servers</h3></div></div></div><p>
-<a class="indexterm" name="id2648734"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id410712"></a>Point'n'Print Client Drivers on Samba Servers</h3></div></div></div><p>
+<a class="indexterm" name="id410720"></a>
 There is much confusion about what all this means. The question is often asked, &#8220;<span class="quote">Is it or is
 it not necessary for printer drivers to be installed on a Samba host in order to support printing from
 Windows clients?</span>&#8221; The answer to this is no, it is not necessary.
 </p><p>
-<a class="indexterm" name="id2648752"></a>
-<a class="indexterm" name="id2648759"></a>
+<a class="indexterm" name="id410736"></a>
+<a class="indexterm" name="id410743"></a>
 Windows NT/2000 clients can, of course, also run their APW to install drivers <span class="emphasis"><em>locally</em></span>
 (which then connect to a Samba-served print queue). This is the same method used by Windows 9x/Me
 clients. (However, a bug existed in Samba 2.2.0 that made Windows NT/2000 clients
 require that the Samba server possess a valid driver for the printer. This was fixed in Samba 2.2.1).
 </p><p>
-<a class="indexterm" name="id2648779"></a>
-<a class="indexterm" name="id2648786"></a>
+<a class="indexterm" name="id410760"></a>
+<a class="indexterm" name="id410766"></a>
 But it is a new capability to install the printer drivers into the <em class="parameter"><code>[print$]</code></em>
 share of the Samba server, and a big convenience, too. Then <span class="emphasis"><em>all</em></span> clients
 (including 95/98/ME) get the driver installed when they first connect to this printer share. The
@@ -682,16 +682,16 @@
 	</p></li><li><p>
 	Using <span class="emphasis"><em>cupsaddsmb</em></span> (only works for the CUPS printing system, not for LPR/LPD, LPRng, and so on).
 	</p></li></ul></div><p>
-<a class="indexterm" name="id2648868"></a>
-<a class="indexterm" name="id2648875"></a>
+<a class="indexterm" name="id410843"></a>
+<a class="indexterm" name="id410850"></a>
 Samba does not use these uploaded drivers in any way to process spooled files. These drivers are utilized
 entirely by the clients who download and install them via the &#8220;<span class="quote">Point'n'Print</span>&#8221; mechanism
 supported by Samba. The clients use these drivers to generate print files in the format the printer
 (or the UNIX print system) requires. Print files received by Samba are handed over to the UNIX printing
 system, which is responsible for all further processing, as needed.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2648895"></a>The Obsoleted [printer$] Section</h3></div></div></div><p>
-<a class="indexterm" name="id2648903"></a>
-<a class="indexterm" name="id2648910"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id410866"></a>The Obsoleted [printer$] Section</h3></div></div></div><p>
+<a class="indexterm" name="id410874"></a>
+<a class="indexterm" name="id410881"></a>
 	Versions of Samba prior to 2.2 made it possible to use a share named <em class="parameter"><code>[printer$]</code></em>. This
 	name was taken from the same named service created by Windows 9x/Me clients when a printer was shared by them.
 	Windows 9x/Me printer servers always have a <em class="parameter"><code>[printer$]</code></em> service that provides
@@ -701,9 +701,9 @@
 	parameter named <em class="parameter"><code>printer driver</code></em> provided a means of defining the printer driver name to
 	be sent to the client.
 	</p><p>
-<a class="indexterm" name="id2648955"></a>
-<a class="indexterm" name="id2648962"></a>
-<a class="indexterm" name="id2648969"></a>
+<a class="indexterm" name="id410920"></a>
+<a class="indexterm" name="id410927"></a>
+<a class="indexterm" name="id410934"></a>
 	These parameters, including the <em class="parameter"><code>printer driver file</code></em> parameter,
 	are now removed and cannot be used in installations of Samba-3. The share name
 	<em class="parameter"><code>[print$]</code></em> is now used for the location of downloadable printer
@@ -713,8 +713,8 @@
 	of its ACLs) to support printer driver downloads and uploads. This does not mean Windows
 	9x/Me clients are now thrown aside. They can use Samba's <em class="parameter"><code>[print$]</code></em>
 	share support just fine.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2649017"></a>Creating the [print$] Share</h3></div></div></div><p>
-<a class="indexterm" name="id2649025"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id410977"></a>Creating the [print$] Share</h3></div></div></div><p>
+<a class="indexterm" name="id410984"></a>
 In order to support the uploading and downloading of printer driver files, you must first configure a
 file share named <em class="parameter"><code>[print$]</code></em>. The public name of this share is hard coded
 in the MS Windows clients. It cannot be renamed, since Windows clients are programmed to search for a
@@ -724,15 +724,15 @@
 <em class="parameter"><code>[print$]</code></em> file share (of course, some of the parameter values, such
 as <a class="link" href="smb.conf.5.html#PATH">path</a>, are arbitrary and should be replaced with appropriate values for your
 site). See <a class="link" href="classicalprinting.html#prtdollar" title="Example 21.3. [print$] Example">[print\$] Example</a>.
-</p><div class="example"><a name="prtdollar"></a><p class="title"><b>Example 21.3. [print$] Example</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td># members of the ntadmin group should be able to add drivers and set</td></tr><tr><td># printer properties. root is implicitly always a 'printer admin'.</td></tr><tr><td><a class="indexterm" name="id2649109"></a><em class="parameter"><code>printer admin = @ntadmin</code></em></td></tr><tr><td># ...</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td># ...</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[print$]</code></em></td></tr><tr><td><a class="indexterm" name="id2649146"></a><em class="parameter"><code>comment = Printer Driver Download Area</code></em></td></tr><tr><td><a class="indexterm" name="id2649157"></a><em class="parameter"><code>path = /etc/samba/drivers</code></em></td></tr><tr><td><a class="indexterm" name="id2649169"></a><em class="parameter"><code>browseable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2649180"></a><em class="parameter"><code>guest ok = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2649192"></a><em class="parameter"><code>read only = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2649203"></a><em class="parameter"><code>write list = @ntadmin, root</code></em></td></tr></table></div></div><br class="example-break"><p>
+</p><div class="example"><a name="prtdollar"></a><p class="title"><b>Example 21.3. [print$] Example</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td># members of the ntadmin group should be able to add drivers and set</td></tr><tr><td># printer properties. root is implicitly always a 'printer admin'.</td></tr><tr><td><a class="indexterm" name="id411061"></a><em class="parameter"><code>printer admin = @ntadmin</code></em></td></tr><tr><td># ...</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td># ...</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[print$]</code></em></td></tr><tr><td><a class="indexterm" name="id411097"></a><em class="parameter"><code>comment = Printer Driver Download Area</code></em></td></tr><tr><td><a class="indexterm" name="id411109"></a><em class="parameter"><code>path = /etc/samba/drivers</code></em></td></tr><tr><td><a class="indexterm" name="id411120"></a><em class="parameter"><code>browseable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id411132"></a><em class="parameter"><code>guest ok = yes</code></em></td></tr><tr><td><a class="indexterm" name="id411143"></a><em class="parameter"><code>read only = yes</code></em></td></tr><tr><td><a class="indexterm" name="id411155"></a><em class="parameter"><code>write list = @ntadmin, root</code></em></td></tr></table></div></div><br class="example-break"><p>
 Of course, you also need to ensure that the directory named by the
 <a class="link" href="smb.conf.5.html#PATH">path</a> parameter exists on the UNIX file system.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2649234"></a>[print$] Stanza Parameters</h3></div></div></div><p>
-<a class="indexterm" name="id2649242"></a>
-<a class="indexterm" name="id2649248"></a>
-<a class="indexterm" name="id2649255"></a>
-<a class="indexterm" name="id2649262"></a>
-<a class="indexterm" name="id2649269"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id411183"></a>[print$] Stanza Parameters</h3></div></div></div><p>
+<a class="indexterm" name="id411191"></a>
+<a class="indexterm" name="id411198"></a>
+<a class="indexterm" name="id411205"></a>
+<a class="indexterm" name="id411211"></a>
+<a class="indexterm" name="id411218"></a>
 The <em class="parameter"><code>[print$]</code></em> is a special section in <code class="filename">smb.conf</code>. It contains settings relevant to
 potential printer driver download and is used by Windows clients for local print driver installation.
 The following parameters are frequently needed in this share section:
@@ -777,7 +777,7 @@
 		can copy files to the share. If this is a non-root account, then the account should also
 		be mentioned in the global <a class="link" href="smb.conf.5.html#PRINTERADMIN">printer admin</a>
 		parameter. See the <code class="filename">smb.conf</code> man page for more information on configuring file shares.
-		</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2649554"></a>The [print$] Share Directory</h3></div></div></div><p>
+		</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id411476"></a>The [print$] Share Directory</h3></div></div></div><p>
 In order for a Windows NT print server to support the downloading of driver files by multiple client
 architectures, you must create several subdirectories within the <em class="parameter"><code>[print$]</code></em>
 service (i.e., the UNIX directory named by the <a class="link" href="smb.conf.5.html#PATH">path</a>
@@ -812,7 +812,7 @@
 Neighborhood</span> or <span class="guiicon">My Network Places</span> and browse for the Samba host. Once you
 have located the server, navigate to its <span class="guiicon">Printers and Faxes</span> folder. You should see
 an initial listing of printers that matches the printer shares defined on your Samba host.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2649696"></a>Installing Drivers into [print$]</h2></div></div></div><p>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id411602"></a>Installing Drivers into [print$]</h2></div></div></div><p>
 Have you successfully created the <em class="parameter"><code>[print$]</code></em> share in <code class="filename">smb.conf</code>, and have you forced
 Samba to reread its <code class="filename">smb.conf</code> file? Good. But you are not yet ready to use the new facility. The client
 driver files need to be installed into this share. So far, it is still an empty share. Unfortunately, it is
@@ -828,7 +828,7 @@
 	from any Windows NT/200x/XP client workstation.
 	</p></li></ul></div><p>
 The latter option is probably the easier one (even if the process may seem a little bit weird at first).
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2649789"></a>Add Printer Wizard Driver Installation</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id411687"></a>Add Printer Wizard Driver Installation</h3></div></div></div><p>
 The printers initially listed in the Samba host's <span class="guiicon">Printers</span> folder accessed from a
 client's Explorer will have no real printer driver assigned to them. By default this driver name is set
 to a null string. This must be changed now. The local <span class="guiicon">Add Printer Wizard</span> (APW), run from
@@ -879,10 +879,10 @@
 	Run <code class="literal">rpcclient</code> a second time with the <code class="literal">setdriver</code> subcommand.
 	</p></li></ol></div><p>
 We provide detailed hints for each of these steps in the paragraphs that follow.
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2650065"></a>Identifying Driver Files</h4></div></div></div><p>
-<a class="indexterm" name="id2650073"></a>
-<a class="indexterm" name="id2650080"></a>
-<a class="indexterm" name="id2650087"></a>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id411938"></a>Identifying Driver Files</h4></div></div></div><p>
+<a class="indexterm" name="id411946"></a>
+<a class="indexterm" name="id411953"></a>
+<a class="indexterm" name="id411960"></a>
 To find out about the driver files, you have two options. You can check the contents of the driver
 CDROM that came with your printer. Study the <code class="filename">*.inf</code> files located on the CD-ROM. This
 may not be possible, since the <code class="filename">*.inf</code> file might be missing. Unfortunately, vendors have now started
@@ -890,14 +890,14 @@
 archive format. Additionally, the files may be re-named during the installation process. This makes it
 extremely difficult to identify the driver files required.
 </p><p>
-<a class="indexterm" name="id2650118"></a>
+<a class="indexterm" name="id411986"></a>
 Then you have the second option. Install the driver locally on a Windows client and
 investigate which filenames and paths it uses after they are installed. (You need to repeat
 this procedure for every client platform you want to support. We show it here for the
 <span class="application">W32X86</span> platform only, a name used by Microsoft for all Windows NT/200x/XP
 clients.)
 </p><p>
-<a class="indexterm" name="id2650140"></a>
+<a class="indexterm" name="id412005"></a>
 A good method to recognize the driver files is to print the test page from the driver's
 <span class="guilabel">Properties</span> dialog (<span class="guilabel">General</span> tab). Then look at the list of
 driver files named on the printout. You'll need to recognize what Windows (and Samba) are calling the
@@ -905,9 +905,9 @@
 <span class="guilabel">Help File</span>, and (optionally) <span class="guilabel">Dependent Driver Files</span>
 (this may vary slightly for Windows NT). You need to note all filenames for the next steps.
 </p><p>
-<a class="indexterm" name="id2650197"></a>
-<a class="indexterm" name="id2650204"></a>
-<a class="indexterm" name="id2650210"></a>
+<a class="indexterm" name="id412059"></a>
+<a class="indexterm" name="id412066"></a>
+<a class="indexterm" name="id412072"></a>
 Another method to quickly test the driver filenames and related paths is provided by the
 <code class="literal">rpcclient</code> utility. Run it with <code class="literal">enumdrivers</code> or with the
 <code class="literal">getdriver</code> subcommand, each at the <code class="filename">3</code> info level. In the following example,
@@ -948,10 +948,10 @@
   Monitorname: []
   Defaultdatatype: []
 </pre><p>
-<a class="indexterm" name="id2650326"></a>
-<a class="indexterm" name="id2650333"></a>
-<a class="indexterm" name="id2650339"></a>
-<a class="indexterm" name="id2650346"></a>
+<a class="indexterm" name="id412169"></a>
+<a class="indexterm" name="id412176"></a>
+<a class="indexterm" name="id412183"></a>
+<a class="indexterm" name="id412190"></a>
 You may notice that this driver has quite a large number of <span class="guilabel">Dependent files</span>
 (there are worse cases, however). Also, strangely, the
 <span class="guilabel">Driver File</span> is tagged here
@@ -961,9 +961,9 @@
 addition to those for <span class="application">W32X86</span> (i.e., the Windows NT 2000/XP clients) onto a
 Windows PC. This PC can also host the Windows 9x/Me drivers, even if it runs on Windows NT, 2000, or XP.
 </p><p>
-<a class="indexterm" name="id2650395"></a>
-<a class="indexterm" name="id2650402"></a>
-<a class="indexterm" name="id2650408"></a>
+<a class="indexterm" name="id412234"></a>
+<a class="indexterm" name="id412240"></a>
+<a class="indexterm" name="id412247"></a>
 Since the <em class="parameter"><code>[print$]</code></em> share is usually accessible through the <span class="guiicon">Network
 Neighborhood</span>, you can also use the UNC notation from Windows Explorer to poke at it. The Windows
 9x/Me driver files will end up in subdirectory <code class="filename">0</code> of the <code class="filename">WIN40</code>
@@ -974,7 +974,7 @@
 mode. Windows 2000 changed this. While it still can use the kernel mode drivers (if this is enabled by
 the Admin), its native mode for printer drivers is user mode execution. This requires drivers designed
 for this purpose. These types of drivers install into the &#8220;<span class="quote">3</span>&#8221; subdirectory.
-</p></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2650472"></a>Obtaining Driver Files from Windows Client [print$] Shares</h4></div></div></div><p>
+</p></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id412304"></a>Obtaining Driver Files from Windows Client [print$] Shares</h4></div></div></div><p>
 Now we need to collect all the driver files we identified in our previous step. Where do we get them
 from? Well, why not retrieve them from the very PC and the same <em class="parameter"><code>[print$]</code></em>
 share that we investigated in our last step to identify the files? We can use <code class="literal">smbclient</code>
@@ -999,12 +999,12 @@
 This ensures that all commands are executed in sequence on the remote Windows server before
 <code class="literal">smbclient</code> exits again.
 </p><p>
-<a class="indexterm" name="id2650580"></a>
+<a class="indexterm" name="id412401"></a>
 Remember to repeat the procedure for the <span class="application">WIN40</span> architecture should you need to
 support Windows 9x/Me/XP clients. Remember too, the files for these architectures are in the
 <code class="filename">WIN40/0/</code> subdirectory. Once this is complete, we can run <code class="literal">smbclient. .
 .put</code> to store the collected files on the Samba server's <em class="parameter"><code>[print$]</code></em> share.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2650617"></a>Installing Driver Files into [print$]</h4></div></div></div><p>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id412436"></a>Installing Driver Files into [print$]</h4></div></div></div><p>
 We are now going to locate the driver files into the <em class="parameter"><code>[print$]</code></em> share. Remember, the
 UNIX path to this share has been defined previously in your <code class="filename">smb.conf</code> file. You also have created
 subdirectories for the different Windows client types you want to support. If, for example, your
@@ -1017,8 +1017,8 @@
 	For all Windows 95, 98, and Me clients, <code class="filename">/etc/samba/drivers/WIN40/</code> but not
 	(yet) into the <code class="filename">0</code> subdirectory.
 	</p></li></ul></div><p>
-<a class="indexterm" name="id2650696"></a>
-<a class="indexterm" name="id2650703"></a>
+<a class="indexterm" name="id412510"></a>
+<a class="indexterm" name="id412517"></a>
 We again use smbclient to transfer the driver files across the network. We specify the same files
 and paths as were leaked to us by running <code class="literal">getdriver</code> against the original
 <span class="emphasis"><em>Windows</em></span> install. However, now we are going to store the files into a
@@ -1055,18 +1055,18 @@
 putting file HDNIS01Aux.dll as \W32X86\HDNIS01Aux.dll
 putting file HDNIS01_de.NTF as \W32X86\HDNIS01_de.NTF
 </pre><p>
-<a class="indexterm" name="id2650775"></a>
-<a class="indexterm" name="id2650782"></a>
-<a class="indexterm" name="id2650789"></a>
+<a class="indexterm" name="id412574"></a>
+<a class="indexterm" name="id412581"></a>
+<a class="indexterm" name="id412588"></a>
 Whew  that was a lot of typing! Most drivers are a lot smaller  many have only three generic
 PostScript driver files plus one PPD. While we did retrieve the files from the <code class="filename">2</code>
 subdirectory of the <code class="filename">W32X86</code> directory from the Windows box, we do not put them
 (for now) in this same subdirectory of the Samba box. This relocation will automatically be done by the
 <code class="literal">adddriver</code> command, which we will run shortly (and do not forget to also put the files
 for the Windows 9x/Me architecture into the <code class="filename">WIN40/</code> subdirectory should you need them).
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2650835"></a><code class="literal">smbclient</code> to Confirm Driver Installation</h4></div></div></div><p>
-<a class="indexterm" name="id2650848"></a>
-<a class="indexterm" name="id2650855"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id412629"></a><code class="literal">smbclient</code> to Confirm Driver Installation</h4></div></div></div><p>
+<a class="indexterm" name="id412642"></a>
+<a class="indexterm" name="id412649"></a>
 For now we verify that our files are there. This can be done with <code class="literal">smbclient</code>, too
 (but, of course, you can log in via SSH also and do this through a standard UNIX shell access):
 </p><pre class="screen">
@@ -1107,9 +1107,9 @@
 PDFcreator2.PPD                     A    15746  Sun Apr 20 22:24:07 2003
               40976 blocks of size 262144. 709 blocks available
 </pre><p>
-<a class="indexterm" name="id2650930"></a>
-<a class="indexterm" name="id2650937"></a>
-<a class="indexterm" name="id2650944"></a>
+<a class="indexterm" name="id412703"></a>
+<a class="indexterm" name="id412709"></a>
+<a class="indexterm" name="id412716"></a>
 Notice that there are already driver files present in the <code class="filename">2</code> subdirectory (probably from a
 previous installation). Once the files for the new driver are there too, you are still a few steps away from
 being able to use them on the clients. The only thing you could do now is retrieve them from a client just
@@ -1117,10 +1117,10 @@
 install them per Point'n'Print. The reason is that Samba does not yet know that these files are something
 special, namely <span class="emphasis"><em>printer driver files</em></span>, and it does not know to which print queue(s) these
 driver files belong.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2650980"></a>Running <code class="literal">rpcclient</code> with <code class="literal">adddriver</code></h4></div></div></div><p>
-<a class="indexterm" name="id2650999"></a>
-<a class="indexterm" name="id2651006"></a>
-<a class="indexterm" name="id2651013"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id412744"></a>Running <code class="literal">rpcclient</code> with <code class="literal">adddriver</code></h4></div></div></div><p>
+<a class="indexterm" name="id412762"></a>
+<a class="indexterm" name="id412769"></a>
+<a class="indexterm" name="id412776"></a>
 Next, you must tell Samba about the special category of the files you just uploaded into the
 <em class="parameter"><code>[print$]</code></em> share. This is done by the <code class="literal">adddriver</code>
 command. It will prompt Samba to register the driver files into its internal TDB database files. The
@@ -1144,16 +1144,16 @@
 
 Printer Driver dm9110 successfully installed.
 </pre><p>
-<a class="indexterm" name="id2651067"></a>
-<a class="indexterm" name="id2651074"></a>
-<a class="indexterm" name="id2651081"></a>
+<a class="indexterm" name="id412821"></a>
+<a class="indexterm" name="id412828"></a>
+<a class="indexterm" name="id412835"></a>
 After this step, the driver should be recognized by Samba on the print server. You need to be very
 careful when typing the command. Don't exchange the order of the fields. Some changes would lead to
 an <code class="computeroutput">NT_STATUS_UNSUCCESSFUL</code> error message. These become obvious. Other
 changes might install the driver files successfully but render the driver unworkable. So take care!
 Hints about the syntax of the adddriver command are in the man page. 
 provides a more detailed description, should you need it.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2651104"></a>Checking <code class="literal">adddriver</code> Completion</h4></div></div></div><p>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id412854"></a>Checking <code class="literal">adddriver</code> Completion</h4></div></div></div><p>
 One indication for Samba's recognition of the files as driver files is the <code class="computeroutput">successfully
 installed</code> message. Another one is the fact that our files have been moved by the
 <code class="literal">adddriver</code> command into the <code class="filename">2</code> subdirectory. You can check this
@@ -1198,17 +1198,17 @@
 </pre><p>
 Another verification is that the timestamp of the printing TDB files is now updated
 (and possibly their file size has increased).
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2651246"></a>Check Samba for Driver Recognition</h4></div></div></div><p>
-<a class="indexterm" name="id2651254"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id412953"></a>Check Samba for Driver Recognition</h4></div></div></div><p>
+<a class="indexterm" name="id412961"></a>
 Now the driver should be registered with Samba. We can easily verify this and will do so in a
 moment. However, this driver is not yet associated with a particular printer. We may check the driver
 status of the files by at least three methods:
 </p><div class="itemizedlist"><ul type="disc"><li><p>
-<a class="indexterm" name="id2651272"></a>
-<a class="indexterm" name="id2651279"></a>
-<a class="indexterm" name="id2651286"></a>
-<a class="indexterm" name="id2651293"></a>
-<a class="indexterm" name="id2651300"></a>
+<a class="indexterm" name="id412976"></a>
+<a class="indexterm" name="id412983"></a>
+<a class="indexterm" name="id412990"></a>
+<a class="indexterm" name="id412997"></a>
+<a class="indexterm" name="id413004"></a>
 	From any Windows client browse Network Neighborhood, find the Samba host, and open the Samba
 	<span class="guiicon">Printers and Faxes</span> folder. Select any printer icon, right-click and select
 	the printer <span class="guimenuitem">Properties</span>. Click the <span class="guilabel">Advanced</span>
@@ -1218,7 +1218,7 @@
 	see only its own architecture's list. If you do not have every driver installed for each platform,
 	the list will differ if you look at it from Windows95/98/ME or Windows NT/2000/XP.)
 	</p></li><li><p>
-<a class="indexterm" name="id2651340"></a>
+<a class="indexterm" name="id413038"></a>
 	From a Windows 200x/XP client (not Windows NT) browse <span class="guiicon">Network Neighborhood</span>,
 	search for the Samba server, open the server's <span class="guiicon">Printers</span> folder,
 	and right-click on the white background (with no printer highlighted). Select <span class="guimenuitem">Server
@@ -1247,8 +1247,8 @@
 	for <span class="application">Windows NT 4.0 or 2000</span>. To have it present for <span class="application">Windows
 	95, 98, and Me</span>, you'll have to repeat the whole procedure with the WIN40 architecture
 	and subdirectory.
-	</p></li></ul></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2651474"></a>Specific Driver Name Flexibility</h4></div></div></div><p>
-<a class="indexterm" name="id2651482"></a>
+	</p></li></ul></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id413159"></a>Specific Driver Name Flexibility</h4></div></div></div><p>
+<a class="indexterm" name="id413167"></a>
 You can name the driver as you like. If you repeat the <code class="literal">adddriver</code> step with the same
 files as before but with a different driver name, it will work the same:
 </p><pre class="screen">
@@ -1271,18 +1271,18 @@
 
 Printer Driver mydrivername successfully installed.
 </pre><p>
-<a class="indexterm" name="id2651529"></a>
-<a class="indexterm" name="id2651536"></a>
-<a class="indexterm" name="id2651543"></a>
+<a class="indexterm" name="id413206"></a>
+<a class="indexterm" name="id413213"></a>
+<a class="indexterm" name="id413220"></a>
 You will be able to bind that driver to any print queue (however, you are responsible that
 you associate drivers to queues that make sense with respect to target printers). You cannot run the
 <code class="literal">rpcclient</code> <code class="literal">adddriver</code> command repeatedly. Each run consumes the
 files you had put into the <em class="parameter"><code>[print$]</code></em> share by moving them into the
 respective subdirectories, so you must execute an <code class="literal">smbclient ... put</code> command before
 each <code class="literal">rpcclient ... adddriver</code> command.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2651588"></a>Running <code class="literal">rpcclient</code> with <code class="literal">setdriver</code></h4></div></div></div><p> 
-<a class="indexterm" name="id2651606"></a>
-<a class="indexterm" name="id2651613"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id413261"></a>Running <code class="literal">rpcclient</code> with <code class="literal">setdriver</code></h4></div></div></div><p> 
+<a class="indexterm" name="id413279"></a>
+<a class="indexterm" name="id413286"></a>
 Samba needs to know which printer owns which driver. Create a mapping of the driver to a printer, and
 store this information in Samba's memory, the TDB files. The <code class="literal">rpcclient setdriver</code> command
 achieves exactly this:
@@ -1309,11 +1309,11 @@
 bug in 2.2.x prevented Samba from recognizing freshly installed printers. You had to restart Samba,
 or at least send an HUP signal to all running smbd processes to work around this: <strong class="userinput"><code>kill -HUP
 `pidof smbd`</code></strong>.
-</p></div></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2651729"></a>Client Driver Installation Procedure</h2></div></div></div><p>
+</p></div></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id413392"></a>Client Driver Installation Procedure</h2></div></div></div><p>
 As Don Quixote said, &#8220;<span class="quote">The proof of the pudding is in the eating.</span>&#8221; The proof
 for our setup lies in the printing. So let's install the printer driver onto the client PCs. This is
 not as straightforward as it may seem. Read on.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2651745"></a>First Client Driver Installation</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id413407"></a>First Client Driver Installation</h3></div></div></div><p>
 Especially important is the installation onto the first client PC (for each architectural platform
 separately). Once this is done correctly, all further clients are easy to set up and shouldn't need further
 attention. What follows is a description for the recommended first procedure. You now work from a client
@@ -1347,7 +1347,7 @@
 <span class="guimenuitem">Settings</span> -&gt; <span class="guimenuitem">Control Panel</span> -&gt; <span class="guiicon">Printers
 and Faxes</span>).
 </p><p>
-<a class="indexterm" name="id2651916"></a>
+<a class="indexterm" name="id413563"></a>
 Most likely you are tempted to try to print a test page. After all, you now can open the printer
 properties, and on the <span class="guimenu">General</span> tab there is a button offering to do just that. But
 chances are that you get an error message saying "<code class="literal">Unable to print Test Page</code>." The
@@ -1359,18 +1359,18 @@
 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="prt-modeset"></a>Setting Device Modes on New Printers</h3></div></div></div><p>
 For a printer to be truly usable by a Windows NT/200x/XP client, it must possess:
 </p><div class="itemizedlist"><ul type="disc"><li><p>
-<a class="indexterm" name="id2651978"></a>
+<a class="indexterm" name="id413620"></a>
 	A valid <span class="emphasis"><em>device mode</em></span> generated by the driver for the printer (defining things
 	like paper size, orientation and duplex settings).
 	</p></li><li><p>
-<a class="indexterm" name="id2651994"></a>
+<a class="indexterm" name="id413635"></a>
 	A complete set of <span class="emphasis"><em>printer driver data</em></span> generated by the driver.
 	</p></li></ul></div><p>
-<a class="indexterm" name="id2652010"></a>
-<a class="indexterm" name="id2652017"></a>
-<a class="indexterm" name="id2652024"></a>
-<a class="indexterm" name="id2652031"></a>
-<a class="indexterm" name="id2652038"></a>
+<a class="indexterm" name="id413650"></a>
+<a class="indexterm" name="id413657"></a>
+<a class="indexterm" name="id413664"></a>
+<a class="indexterm" name="id413671"></a>
+<a class="indexterm" name="id413678"></a>
 If either of these is incomplete, the clients can produce less than optimal output at best. In the
 worst cases, unreadable garbage or nothing at all comes from the printer, or it produces a harvest of
 error messages when attempting to print. Samba stores the named values and all printing-related information in
@@ -1396,7 +1396,7 @@
 the server's printer. This executes enough of the printer driver program on the client for the desired
 effect to happen and feeds back the new device mode to our Samba server. You can use the native Windows
 NT/200x/XP printer properties page from a Window client for this:
-</p><div class="procedure"><a name="id2652128"></a><p class="title"><b>Procedure 21.1. Procedure to Initialize the Printer Driver Settings</b></p><ol type="1"><li><p>
+</p><div class="procedure"><a name="id413750"></a><p class="title"><b>Procedure 21.1. Procedure to Initialize the Printer Driver Settings</b></p><ol type="1"><li><p>
 	Browse the <span class="guiicon">Network Neighborhood</span>.
 	</p></li><li><p>
 	Find the Samba server.
@@ -1426,13 +1426,13 @@
 you can follow the analogous steps by accessing the <span class="emphasis"><em>local</em></span> <span class="guiicon">Printers</span>
 folder, too, if you are a Samba printer admin user. From now on, printing should work as expected.
 </p><p>
-<a class="indexterm" name="id2652282"></a>
+<a class="indexterm" name="id413895"></a>
 Samba includes a service-level parameter name <em class="parameter"><code>default devmode</code></em> for generating a default
 device mode for a printer. Some drivers function well with Samba's default set of properties. Others
 may crash the client's spooler service. So use this parameter with caution. It is always better to have
 the client generate a valid device mode for the printer and store it on the server for you.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2578531"></a>Additional Client Driver Installation</h3></div></div></div><p>
-<a class="indexterm" name="id2578539"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id346362"></a>Additional Client Driver Installation</h3></div></div></div><p>
+<a class="indexterm" name="id346370"></a>
 Every additional driver may be installed in the same way as just described.  Browse <code class="literal">Network
 Neighborhood</code>, open the <span class="guiicon">Printers</span> folder on Samba server, right-click on
 <span class="guiicon">Printer</span>, and choose <span class="guimenuitem">Connect...</span>. Once this completes (should be
@@ -1445,14 +1445,14 @@
 <strong class="userinput"><code>rundll32 shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder</code></strong>
 </pre><p>
 or this command on Windows NT 4.0 workstations:
-<a class="indexterm" name="id2578606"></a>
+<a class="indexterm" name="id346432"></a>
 </p><pre class="screen">
 <strong class="userinput"><code>rundll32 shell32.dll,Control_RunDLL MAIN.CPL @2</code></strong>
 </pre><p>
 </p><p>
 You can enter the commands either inside a <span class="guilabel">DOS box</span> window or in the <span class="guimenuitem">Run
 command...</span> field from the <span class="guimenu">Start</span> menu.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2578650"></a>Always Make First Client Connection as root or &#8220;<span class="quote">printer admin</span>&#8221;</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id346474"></a>Always Make First Client Connection as root or &#8220;<span class="quote">printer admin</span>&#8221;</h3></div></div></div><p>
 After you installed the driver on the Samba server (in its <em class="parameter"><code>[print$]</code></em> share), you
 should always make sure that your first client installation completes correctly. Make it a habit for yourself
 to build the very first connection from a client as <a class="link" href="smb.conf.5.html#PRINTERADMIN">printer admin</a>. This is to make
@@ -1467,7 +1467,7 @@
 <span class="guiicon">Letter</span> when you are all using <span class="guiicon">A4</span>, right? You may want to set the
 printer for <span class="guiicon">duplex</span> as the default, and so on).
 </p><p>
-<a class="indexterm" name="id2578744"></a>
+<a class="indexterm" name="id414248"></a>
 To connect as root to a Samba printer, try this command from a Windows 200x/XP DOS box command prompt:
 </p><pre class="screen">
 <code class="prompt">C:\&gt; </code><strong class="userinput"><code>runas /netonly /user:root "rundll32 printui.dll,PrintUIEntry /p /t3 /n 
@@ -1481,13 +1481,13 @@
 Now all the other users downloading and installing the driver the same way (using
 <code class="literal">Point'n'Print</code>) will have the same defaults set for them. If you miss this step, you'll get a
 lot of help desk calls from your users, but maybe you like to talk to people.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2652868"></a>Other Gotchas</h2></div></div></div><p>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id414319"></a>Other Gotchas</h2></div></div></div><p>
 Your driver is installed. It is now ready for Point'n'Print installation by the clients. You may have tried to
 download and use it on your first client machine, but wait. Let's make sure you are acquainted first with a
 few tips and tricks you may find useful. For example, suppose you did not set the defaults on the printer, as
 advised in the preceding paragraphs. Your users complain about various issues (such as, &#8220;<span class="quote">We need to set
 the paper size for each job from Letter to A4 and it will not store it</span>&#8221;).
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2652888"></a>Setting Default Print Options for Client Drivers</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id414335"></a>Setting Default Print Options for Client Drivers</h3></div></div></div><p>
 The last sentence might be viewed with mixed feelings by some users and Admins. They have struggled for hours
 and could not arrive at a point where their settings seemed to be saved. It is not their fault. The confusing
 thing is that in the multitabbed dialog that pops up when you right-click on the printer name and select
@@ -1536,7 +1536,7 @@
 there is now a different path to arrive at an identical-looking, but functionally different, dialog to set
 defaults for all users.
 </p><div class="tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p>Try (on Windows 200x/XP) to run this command (as a user with the right privileges):
-<a class="indexterm" name="id2653182"></a>
+<a class="indexterm" name="id414601"></a>
 </p><p><strong class="userinput"><code>
 rundll32 printui.dll,PrintUIEntry /p /t3 /n\\<em class="replaceable"><code>SAMBA-SERVER</code></em>\<em class="replaceable"><code>printersharename</code></em>
 </code></strong></p><p>
@@ -1547,7 +1547,7 @@
 To see the tab with the <span class="guilabel">Printing Preferences</span>
 button (the one that does not set systemwide defaults), you can
 start the commands from inside a DOS box or from <span class="guimenu">Start</span> -&gt; <span class="guimenuitem">Run</span>.
-</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2653255"></a>Supporting Large Numbers of Printers</h3></div></div></div><p>
+</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id414671"></a>Supporting Large Numbers of Printers</h3></div></div></div><p>
 One issue that has arisen during the recent development phase of Samba is the need to support driver
 downloads for hundreds of printers. Using Windows NT APW for this task is somewhat awkward (to say the least). If
 you do not want to acquire RSS pains from the printer installation clicking orgy alone, you need
@@ -1630,7 +1630,7 @@
 &#8220;<span class="quote">dm9110</span>&#8221; printer with an empty string where the driver should have been listed (between
 the two commas in the description field). After the <code class="literal">setdriver</code> command
 succeeds, all is well.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2653512"></a>Adding New Printers with the Windows NT APW</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id414907"></a>Adding New Printers with the Windows NT APW</h3></div></div></div><p>
 By default, Samba exhibits all printer shares defined in <code class="filename">smb.conf</code> in the <span class="guiicon">Printers</span>
 folder. Also located in this folder is the Windows NT Add Printer Wizard icon. The APW will be shown only if:
 </p><div class="itemizedlist"><ul type="disc"><li><p>
@@ -1670,11 +1670,11 @@
 necessarily a root account. A <a class="link" href="smb.conf.5.html#MAPTOGUEST">map to guest = bad user</a> may have connected
 you unwittingly under the wrong privilege. You should check it by using the <code class="literal">smbstatus</code>
 command.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2653771"></a>Error Message: &#8220;<span class="quote">Cannot connect under a different Name</span>&#8221;</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id415143"></a>Error Message: &#8220;<span class="quote">Cannot connect under a different Name</span>&#8221;</h3></div></div></div><p>
 Once you are connected with the wrong credentials, there is no means to reverse the situation other than
 to close all Explorer windows, and perhaps reboot.
 </p><div class="itemizedlist"><ul type="disc"><li><p>
-<a class="indexterm" name="id2653790"></a>
+<a class="indexterm" name="id415161"></a>
 	The <code class="literal">net use \\SAMBA-SERVER\sharename /user:root</code> gives you an error message:
 	&#8220;<span class="quote">Multiple connections to a server or a shared resource by the same user utilizing
 	several user names are not allowed. Disconnect all previous connections to the server,
@@ -1700,7 +1700,7 @@
 <code class="prompt">C:\&gt; </code> net use * /delete
 </pre><p>
 This will also disconnect all mapped drives and will allow you create fresh connection as required.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2653885"></a>Take Care When Assembling Driver Files</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id415242"></a>Take Care When Assembling Driver Files</h3></div></div></div><p>
 You need to be extremely careful when you take notes about the files belonging to a particular
 driver. Don't confuse the files for driver version &#8220;<span class="quote">0</span>&#8221; (for Windows 9x/Me, going into
 <code class="filename">[print$]/WIN/0/</code>), driver version <code class="filename">2</code> (kernel mode driver for Windows NT,
@@ -1831,11 +1831,11 @@
 In my example were even more differences than shown here. Conclusion: you must be careful to select the
 correct driver files for each driver version. Don't rely on the names alone, and don't interchange files
 belonging to different driver versions.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2654194"></a>Samba and Printer Ports</h3></div></div></div><p>
-<a class="indexterm" name="id2654202"></a>
-<a class="indexterm" name="id2654209"></a>
-<a class="indexterm" name="id2654216"></a>
-<a class="indexterm" name="id2654222"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id415466"></a>Samba and Printer Ports</h3></div></div></div><p>
+<a class="indexterm" name="id415474"></a>
+<a class="indexterm" name="id415481"></a>
+<a class="indexterm" name="id415488"></a>
+<a class="indexterm" name="id415494"></a>
 Windows NT/2000 print servers associate a port with each printer. These normally take the form of
 <code class="filename">LPT1:</code>, <code class="filename">COM1:</code>, <code class="filename">FILE:</code>, and so on. Samba must also
 support the concept of ports associated with a printer. By default, only one printer port, named &#8220;<span class="quote">Samba
@@ -1844,22 +1844,22 @@
 they request this information; otherwise, they throw an error message at you. So Samba fakes the port
 information to keep the Windows clients happy.
 </p><p>
-<a class="indexterm" name="id2654267"></a>
+<a class="indexterm" name="id415534"></a>
 Samba does not support the concept of <code class="constant">Printer Pooling</code> internally either. Printer
 pooling assigns a logical printer to multiple ports as a form of load balancing or failover.
 </p><p>
 If you require multiple ports to be defined for some reason or another (my users and my boss should not know
 that they are working with Samba), configure the <a class="link" href="smb.conf.5.html#ENUMPORTSCOMMAND">enumports command</a>,
 which can be used to define an external program that generates a listing of ports on a system.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2654303"></a>Avoiding Common Client Driver Misconfiguration</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id415565"></a>Avoiding Common Client Driver Misconfiguration</h3></div></div></div><p>
 So now the printing works, but there are still problems. Most jobs print well, some do not print at
 all. Some jobs have problems with fonts, which do not look good. Some jobs print fast and some
 are dead-slow. We cannot cover it all, but we want to encourage you to read the brief paragraph about
 &#8220;<span class="quote">Avoiding the Wrong PostScript Driver Settings</span>&#8221; in <a class="link" href="CUPS-printing.html" title="Chapter 22. CUPS Printing Support">CUPS Printing
 Chapter</a>, <a class="link" href="CUPS-printing.html#cups-avoidps1" title="Avoiding Critical PostScript Driver Settings on the Client">Avoiding Critical PostScript Driver Settings on the
 Client</a>.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2654341"></a>The Imprints Toolset</h2></div></div></div><p>
-<a class="indexterm" name="id2654349"></a>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id415598"></a>The Imprints Toolset</h2></div></div></div><p>
+<a class="indexterm" name="id415605"></a>
 The Imprints tool set provides a UNIX equivalent of the Windows NT APW.  For complete information, please
 refer to the <a class="ulink" href="http://imprints.sourceforge.net/" target="_top">Imprints</a> Web site as well as the
 documentation included with the Imprints source distribution. This section provides only a brief introduction
@@ -1871,7 +1871,7 @@
 mailing list. The toolset is still in usable form, but only for a series of older printer models where
 there are prepared packages to use. Packages for more up-to-date print devices are needed if Imprints
 should have a future. Information regarding the Imprints toolset can be obtained from the <a class="ulink" href="http://imprints.sourceforge.net/" target="_top">Imprints</a> home page.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2654398"></a>What Is Imprints?</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id415641"></a>What Is Imprints?</h3></div></div></div><p>
 Imprints is a collection of tools for supporting these goals:
 </p><div class="itemizedlist"><ul type="disc"><li><p>
 	Providing a central repository of information regarding Windows NT and 95/98 printer driver packages.
@@ -1880,19 +1880,19 @@
 	</p></li><li><p>
 	Providing an installation client that will obtain printer drivers from a central Internet (or intranet) Imprints Server
 	repository and install them on remote Samba and Windows NT4 print servers.
-	</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2654432"></a>Creating Printer Driver Packages</h3></div></div></div><p>
+	</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id415671"></a>Creating Printer Driver Packages</h3></div></div></div><p>
 The process of creating printer driver packages is beyond the scope of this document (refer to Imprints.txt,
 included with the Samba distribution for more information). In short, an Imprints driver package
 is a gzipped tarball containing the driver files, related INF files, and a control file needed by the
 installation client.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2654447"></a>The Imprints Server</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id415684"></a>The Imprints Server</h3></div></div></div><p>
 The Imprints server is really a database server that may be queried via standard HTTP mechanisms. Each
 printer entry in the database has an associated URL for the actual downloading of the package. Each
 package is digitally signed via GnuPG, which can be used to verify that
 the package downloaded is actually
 the one referred in the Imprints database. It is strongly recommended that this security check
 not be disabled.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2654464"></a>The Installation Client</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id415698"></a>The Installation Client</h3></div></div></div><p>
 More information regarding the Imprints installation client is available from the documentation file
 <code class="filename">Imprints-Client-HOWTO.ps</code> that is included with the Imprints source package. The Imprints
 installation client comes in two forms:
@@ -1922,7 +1922,7 @@
 </p><p>
 The way of sidestepping this limitation is to require that all Imprints printer driver packages include both the Intel Windows NT and
 95/98 printer drivers and that the NT driver is installed first.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2654598"></a>Adding Network Printers without User Interaction</h2></div></div></div><p>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id415814"></a>Adding Network Printers without User Interaction</h2></div></div></div><p>
 The following MS Knowledge Base article may be of some help if you need to handle Windows 2000 clients:
 <span class="emphasis"><em>How to Add Printers with No User Interaction in Windows 2000,</em></span> (<a class="ulink" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;189105" target="_top">Microsoft KB 189105</a>).  It also
 applies to Windows XP Professional clients.  The ideas sketched out in this section are inspired by this
@@ -1981,7 +1981,7 @@
 up to date. The few extra seconds at logon time will not really be noticeable. Printers can be centrally
 added, changed, and deleted at will on the server with no user intervention required from the clients
 (you just need to keep the logon scripts up to date).
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2654869"></a>The <code class="literal">addprinter</code> Command</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id416053"></a>The <code class="literal">addprinter</code> Command</h2></div></div></div><p>
 The <code class="literal">addprinter</code> command can be configured to be a shell script or program executed by
 Samba. It is triggered by running the APW from a client against the Samba print server. The APW asks
 the user to fill in several fields (such as printer name, driver to be used, comment, port monitor,
@@ -1989,7 +1989,7 @@
 way that it can create a new printer (through writing correct printcap entries on legacy systems or
 by executing the <code class="literal">lpadmin</code> command on more modern systems) and create the associated share,
 then the APW will in effect really create a new printer on Samba and the UNIX print subsystem!
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2654908"></a>Migration of Classical Printing to Samba</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id416087"></a>Migration of Classical Printing to Samba</h2></div></div></div><p>
 The basic NT-style printer driver management has not changed considerably in 3.0 over the 2.2.x releases
 (apart from many small improvements). Here migration should be quite easy, especially if you followed
 previous advice to stop using deprecated parameters in your setup. For migrations from an existing 2.0.x
@@ -2019,11 +2019,11 @@
 	solution is to use the Windows NT APW to install the NT drivers and the 9x/Me drivers. This can be scripted
 	using smbclient and rpcclient. See the Imprints installation client on the <a class="ulink" href="http://imprints.sourceforge.net/" target="_top">Imprints</a> web site for example. See also the discussion of
 	rpcclient usage in <a class="link" href="CUPS-printing.html" title="Chapter 22. CUPS Printing Support">CUPS Printing</a>.
-	</p></li></ul></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2655057"></a>Publishing Printer Information in Active Directory or LDAP</h2></div></div></div><p>
+	</p></li></ul></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id416218"></a>Publishing Printer Information in Active Directory or LDAP</h2></div></div></div><p>
 This topic has also been addressed in <a class="link" href="NetCommand.html" title="Chapter 13. Remote and Local Management: The Net Command">Remote and Local Management  The
 Net Command</a>. If you wish to volunteer your services to help document this further, please contact 
 <a class="ulink" href="mail://jht@samba.org" target="_top">John H. Terpstra</a>.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2655086"></a>Common Errors</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2655092"></a>I Give My Root Password but I Do Not Get Access</h3></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id416245"></a>Common Errors</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id416250"></a>I Give My Root Password but I Do Not Get Access</h3></div></div></div><p>
 Do not confuse the root password, which is valid for the UNIX system (and in most cases stored in the
 form of a one-way hash in a file named <code class="filename">/etc/shadow</code>), with the password used to
 authenticate against Samba. Samba does not know the UNIX password. Root access to Samba resources
@@ -2034,7 +2034,7 @@
 New SMB password: secret
 Retype new SMB password: secret
 </pre><p>
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2655133"></a>My Print Jobs Get Spooled into the Spooling Directory, but Then Get Lost</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id416288"></a>My Print Jobs Get Spooled into the Spooling Directory, but Then Get Lost</h3></div></div></div><p>
 Do not use the existing UNIX print system spool directory for the Samba spool directory. It may seem
 convenient and a savings of space, but it only leads to problems. The two must be separate. The UNIX/Linux
 system print spool directory (e.g., <code class="filename">/var/spool/cups</code>) is typically owned by a

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/compiling.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/compiling.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/compiling.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,9 +1,9 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 41. How to Compile Samba</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="Appendix.html" title="Part VI. Reference Section"><link rel="prev" href="Appendix.html" title="Part VI. Reference Section"><link rel="next" href="Portability.html" title="Chapter 42. Portability"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 41. How to Compile Samba</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="Appendix.html">Prev</a> </td><th width="60%" align="center">Part VI. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="Portability.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="compiling"></a>Chapter 41. How to Compile Samba</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Andrew</span> <span class="surname">Tridgell</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:tridge at samba.org">tridge at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate"> 22 May 2001 </p></div><div><p class="pubdate"> 18 March 2003 </p></div><div><p class="pubdate"> June 2005 </p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="compiling.html#id2709290">Access Samba Source Code via Subversion</a></span></dt><dd><dl><dt><span class="sect2"><a href="compiling.html#id2709296">Introduction</a></span></dt><dt><span class="sect2"><a href="compiling.html#id2709337">Subversion Access to samba.org</a></span></dt></dl></dd><dt><span class="sect1"><a href="compiling.html#id2709528">Accessing the Samba Sources via rsync and ftp</a></span></dt><dt><span class="sect1"><a href="compiling.html#id2709603">Verifying Samba's PGP Signature</a></span></dt><dt><span class="sect1"><a href="compiling.html#id2709741">Building the Binaries</a></span></dt><dd><dl><dt><span class="sect2"><a href="compiling.html#id2709978">Compiling Samba with Active Directory Support</a></span></dt></dl></dd><dt><span class="sect1"><a href="compiling.html#startingSamba">Starting the <span class="application">smbd</span> <span class="application">nmbd</span> and <span class="application">winbindd</span></a></span></dt><dd><dl><dt><span class="sect2"><a href="compiling.html#id2710248">Starting from inetd.conf</a></span></dt><dt><span class="sect2"><a href="compiling.html#id2710468">Alternative: Starting <span class="application">smbd</span> as a Daemon</a></span></dt></dl></dd></dl></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 41. How to Compile Samba</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="Appendix.html" title="Part VI. Reference Section"><link rel="prev" href="Appendix.html" title="Part VI. Reference Section"><link rel="next" href="Portability.html" title="Chapter 42. Portability"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 41. How to Compile Samba</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="Appendix.html">Prev</a> </td><th width="60%" align="center">Part VI. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="Portability.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="compiling"></a>Chapter 41. How to Compile Samba</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Andrew</span> <span class="surname">Tridgell</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:tridge at samba.org">tridge at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate"> 22 May 2001 </p></div><div><p class="pubdate"> 18 March 2003 </p></div><div><p class="pubdate"> June 2005 </p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="compiling.html#id466211">Access Samba Source Code via Subversion</a></span></dt><dd><dl><dt><span class="sect2"><a href="compiling.html#id466217">Introduction</a></span></dt><dt><span class="sect2"><a href="compiling.html#id466255">Subversion Access to samba.org</a></span></dt></dl></dd><dt><span class="sect1"><a href="compiling.html#id466427">Accessing the Samba Sources via rsync and ftp</a></span></dt><dt><span class="sect1"><a href="compiling.html#id466494">Verifying Samba's PGP Signature</a></span></dt><dt><span class="sect1"><a href="compiling.html#id466623">Building the Binaries</a></span></dt><dd><dl><dt><span class="sect2"><a href="compiling.html#id466846">Compiling Samba with Active Directory Support</a></span></dt></dl></dd><dt><span class="sect1"><a href="compiling.html#startingSamba">Starting the <span class="application">smbd</span> <span class="application">nmbd</span> and <span class="application">winbindd</span></a></span></dt><dd><dl><dt><span class="sect2"><a href="compiling.html#id467095">Starting from inetd.conf</a></span></dt><dt><span class="sect2"><a href="compiling.html#id467302">Alternative: Starting <span class="application">smbd</span> as a Daemon</a></span></dt></dl></dd></dl></div><p>
 You can obtain the Samba source file from the
 <a class="ulink" href="http://samba.org/" target="_top">Samba Web site</a>. To obtain a development version, 
 you can download Samba from Subversion or using <code class="literal">rsync</code>.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2709290"></a>Access Samba Source Code via Subversion</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2709296"></a>Introduction</h3></div></div></div><p>
-<a class="indexterm" name="id2709304"></a>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id466211"></a>Access Samba Source Code via Subversion</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id466217"></a>Introduction</h3></div></div></div><p>
+<a class="indexterm" name="id466224"></a>
 Samba is developed in an open environment. Developers use a
 Subversion to &#8220;<span class="quote">checkin</span>&#8221; (also known as 
 &#8220;<span class="quote">commit</span>&#8221;) new source code. Samba's various Subversion branches can
@@ -12,13 +12,13 @@
 </p><p>
 This chapter is a modified version of the instructions found at the
 <a class="ulink" href="http://samba.org/samba/subversion.html" target="_top">Samba</a> Web site.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2709337"></a>Subversion Access to samba.org</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id466255"></a>Subversion Access to samba.org</h3></div></div></div><p>
 The machine samba.org runs a publicly accessible Subversion
 repository for access to the source code of several packages, 
 including Samba, rsync, distcc, ccache, and jitterbug. There are two main ways
 of accessing the Subversion server on this host.
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2709350"></a>Access via ViewCVS</h4></div></div></div><p>
-<a class="indexterm" name="id2709358"></a>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id466266"></a>Access via ViewCVS</h4></div></div></div><p>
+<a class="indexterm" name="id466274"></a>
 You can access the source code via your favorite WWW browser. This allows you to access
 the contents of individual files in the repository and also to look at the revision 
 history and commit logs of individual files. You can also ask for a diff 
@@ -26,8 +26,8 @@
 </p><p>
 Use the URL
 <a class="ulink" href="http://viewcvs.samba.org/" target="_top">http://viewcvs.samba.org/</a>.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2709386"></a>Access via Subversion</h4></div></div></div><p>
-<a class="indexterm" name="id2709394"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id466298"></a>Access via Subversion</h4></div></div></div><p>
+<a class="indexterm" name="id466306"></a>
 You can also access the source code via a normal Subversion client. This gives you much more control over what
 you can do with the repository and allows you to check out whole source trees and keep them up to date via
 normal Subversion commands. This is the preferred method of access if you are a developer and not just a
@@ -37,7 +37,7 @@
 sources from <a class="ulink" href="http://subversion.tigris.org/" target="_top">http://subversion.tigris.org/</a>.
 </p><p>
 To gain access via anonymous Subversion, use the following steps. 
-</p><div class="procedure"><a name="id2709427"></a><p class="title"><b>Procedure 41.1. Retrieving Samba using Subversion</b></p><ol type="1"><li><p>
+</p><div class="procedure"><a name="id466334"></a><p class="title"><b>Procedure 41.1. Retrieving Samba using Subversion</b></p><ol type="1"><li><p>
 	Install a recent copy of Subversion. All you really need is a 
 	copy of the Subversion client binary. 
 	</p></li><li><p>
@@ -62,9 +62,9 @@
 	</p><pre class="screen">
 	<strong class="userinput"><code>svn update</code></strong>
 	</pre><p>
-	</p></li></ol></div></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2709528"></a>Accessing the Samba Sources via rsync and ftp</h2></div></div></div><p>
-	<a class="indexterm" name="id2709537"></a>
-	<a class="indexterm" name="id2709544"></a>
+	</p></li></ol></div></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id466427"></a>Accessing the Samba Sources via rsync and ftp</h2></div></div></div><p>
+	<a class="indexterm" name="id466435"></a>
+	<a class="indexterm" name="id466442"></a>
 	<em class="parameter"><code>pserver.samba.org</code></em> also exports unpacked copies of most parts of the Subversion tree
 	at the Samba <a class="ulink" href="ftp://pserver.samba.org/pub/unpacked" target="_top">pserver</a> location and also
 	via anonymous rsync at the Samba <a class="ulink" href="rsync://pserver.samba.org/ftp/unpacked/" target="_top">rsync</a> server location.  I recommend using rsync rather
@@ -74,9 +74,9 @@
 	The disadvantage of the unpacked trees is that they do not support automatic
 	merging of local changes as Subversion does. <code class="literal">rsync</code> access is most convenient 
 	for an initial install.                      
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2709603"></a>Verifying Samba's PGP Signature</h2></div></div></div><p>
-<a class="indexterm" name="id2709611"></a>
-<a class="indexterm" name="id2709618"></a>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id466494"></a>Verifying Samba's PGP Signature</h2></div></div></div><p>
+<a class="indexterm" name="id466502"></a>
+<a class="indexterm" name="id466509"></a>
 It is strongly recommended that you verify the PGP signature for any source file before
 installing it. Even if you're not downloading from a mirror site, verifying PGP signatures
 should be a standard reflex. Many people today use the GNU GPG tool set in place of PGP.
@@ -87,7 +87,7 @@
 <code class="prompt">$ </code><strong class="userinput"><code>wget http://us1.samba.org/samba/ftp/samba-3.0.20.tar.asc</code></strong>
 <code class="prompt">$ </code><strong class="userinput"><code>wget http://us1.samba.org/samba/ftp/samba-pubkey.asc</code></strong>
 </pre><p>
-<a class="indexterm" name="id2709666"></a>
+<a class="indexterm" name="id466553"></a>
 The first file is the PGP signature for the Samba source file; the other is the Samba public
 PGP key itself. Import the public PGP key with:
 </p><pre class="screen">
@@ -105,9 +105,9 @@
 </p><pre class="screen">
 gpg: BAD signature from &#8220;<span class="quote">Samba Distribution Verification Key</span>&#8221;
 </pre><p>
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2709741"></a>Building the Binaries</h2></div></div></div><p>
-	<a class="indexterm" name="id2709749"></a>
-<a class="indexterm" name="id2709756"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id466623"></a>Building the Binaries</h2></div></div></div><p>
+	<a class="indexterm" name="id466631"></a>
+<a class="indexterm" name="id466638"></a>
 	After the source tarball has been unpacked, the next step involves
 	configuration to match Samba to your operating system platform.
 	If your source directory does not contain the <code class="literal">configure</code> script,
@@ -120,7 +120,7 @@
 <code class="prompt">root# </code> ./autogen.sh
 </pre><p>
 	</p><p>
-	<a class="indexterm" name="id2709798"></a>
+	<a class="indexterm" name="id466675"></a>
 	To build the binaries, run the program <strong class="userinput"><code>./configure
 	</code></strong> in the source directory. This should automatically 
 	configure Samba for your operating system. If you have unusual 
@@ -135,7 +135,7 @@
 <code class="prompt">root# </code><strong class="userinput"><code>./configure <em class="replaceable"><code>[... arguments ...]</code></em></code></strong>
 </pre><p>
 	</p><p>
-	<a class="indexterm" name="id2709863"></a>
+	<a class="indexterm" name="id466737"></a>
 	Execute the following create the binaries:
 </p><pre class="screen">
 <code class="prompt">root# </code> <strong class="userinput"><code>make</code></strong>
@@ -164,7 +164,7 @@
 </pre><p>
 	As you can see from this, building and installing Samba does not need to
 	result in disaster!
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2709978"></a>Compiling Samba with Active Directory Support</h3></div></div></div><p>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id466846"></a>Compiling Samba with Active Directory Support</h3></div></div></div><p>
 	In order to compile Samba with ADS support, you need to have installed
 	on your system:
 	</p><div class="itemizedlist"><ul type="disc"><li><p>
@@ -187,13 +187,13 @@
 	If it does not, configure did not find your KRB5 libraries or
 	your LDAP libraries. Look in <code class="filename">config.log</code> to figure
 	out why and fix it.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2710044"></a>Installing the Required Packages for Debian</h4></div></div></div><p>On Debian, you need to install the following packages:</p><p>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id466906"></a>Installing the Required Packages for Debian</h4></div></div></div><p>On Debian, you need to install the following packages:</p><p>
 		</p><div class="itemizedlist"><ul type="disc"><li><p>libkrb5-dev</p></li><li><p>krb5-user</p></li></ul></div><p>
-	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2710071"></a>Installing the Required Packages for Red Hat Linux</h4></div></div></div><p>On Red Hat Linux, this means you should have at least: </p><p>
+	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id466932"></a>Installing the Required Packages for Red Hat Linux</h4></div></div></div><p>On Red Hat Linux, this means you should have at least: </p><p>
 		</p><div class="itemizedlist"><ul type="disc"><li><p>krb5-workstation (for kinit)</p></li><li><p>krb5-libs (for linking with)</p></li><li><p>krb5-devel (because you are compiling from source)</p></li></ul></div><p>
 	</p><p>in addition to the standard development environment.</p><p>If these files are not installed on your system, you should check the installation
 	CDs to find which has them and install the files using your tool of choice. If in doubt
-	about what tool to use, refer to the Red Hat Linux documentation.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2710115"></a>SuSE Linux Package Requirements</h4></div></div></div><p>
+	about what tool to use, refer to the Red Hat Linux documentation.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id466972"></a>SuSE Linux Package Requirements</h4></div></div></div><p>
 	SuSE Linux installs Heimdal packages that may be required to allow you to build
 	binary packages. You should verify that the development libraries have been installed on
 	your system.
@@ -204,7 +204,7 @@
 	the maximum capabilities that are available. You should consider using SuSE-provided
 	packages where they are available.
 	</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="startingSamba"></a>Starting the <span class="application">smbd</span> <span class="application">nmbd</span> and <span class="application">winbindd</span></h2></div></div></div><p>
-	<a class="indexterm" name="id2710169"></a>
+	<a class="indexterm" name="id467020"></a>
 	You must choose to start <span class="application">smbd</span>, <span class="application">winbindd</span>  and <span class="application">nmbd</span> either as daemons or from
 	<span class="application">inetd</span>. Don't try to do both!  Either you can put
 	them in <code class="filename"> inetd.conf</code> and have them started on demand by
@@ -216,7 +216,7 @@
 	</p><p>
 	The main advantage of starting <span class="application">smbd</span> and <span class="application">nmbd</span> using the recommended daemon method
 	is that they will respond slightly more quickly to an initial connection request.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2710248"></a>Starting from inetd.conf</h3></div></div></div><a class="indexterm" name="id2710254"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>The following will be different if 
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id467095"></a>Starting from inetd.conf</h3></div></div></div><a class="indexterm" name="id467101"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>The following will be different if 
 	you use NIS, NIS+, or LDAP to distribute services maps.</p></div><p>Look at your <code class="filename">/etc/services</code>. 
 	What is defined at port 139/tcp? If nothing is defined, 
 	then add a line like this:</p><pre class="programlisting">netbios-ssn     139/tcp</pre><p>Similarly for 137/udp, you should have an entry like:</p><pre class="programlisting">netbios-ns	137/udp</pre><p>
@@ -225,12 +225,12 @@
 netbios-ssn stream tcp nowait root /usr/local/samba/sbin/smbd smbd 
 netbios-ns dgram udp wait root /usr/local/samba/sbin/nmbd nmbd 
 </pre><p>
-	</p><a class="indexterm" name="id2710317"></a><p>
+	</p><a class="indexterm" name="id467158"></a><p>
 	The exact syntax of <code class="filename">/etc/inetd.conf</code> 
 	varies between UNIXes. Look at the other entries in inetd.conf 
 	for a guide.
 	</p><p>
-	<a class="indexterm" name="id2710337"></a>
+	<a class="indexterm" name="id467177"></a>
 	Some distributions use xinetd instead of inetd. Consult the 
 	xinetd manual for configuration information.
 	</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>Some UNIXes already have entries like netbios_ns 
@@ -238,7 +238,7 @@
 	You must edit <code class="filename">/etc/services</code> or
 	<code class="filename">/etc/inetd.conf</code> to make them consistent.
 	</p></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-	<a class="indexterm" name="id2710375"></a>
+	<a class="indexterm" name="id467213"></a>
 	On many systems you may need to use the
 	<a class="link" href="smb.conf.5.html#INTERFACES">interfaces</a> option in <code class="filename">smb.conf</code> to specify
 	the IP address and netmask of your interfaces. Run 
@@ -253,13 +253,13 @@
 	</p></div><p>
 	Restart <span class="application">inetd</span>, perhaps just send it a HUP,
 	like this:
-<a class="indexterm" name="id2710443"></a>
+<a class="indexterm" name="id467277"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>killall -HUP inetd</code></strong>
 </pre><p>
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2710468"></a>Alternative: Starting <span class="application">smbd</span> as a Daemon</h3></div></div></div><p>
-	<a class="indexterm" name="id2710482"></a>
-<a class="indexterm" name="id2710489"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id467302"></a>Alternative: Starting <span class="application">smbd</span> as a Daemon</h3></div></div></div><p>
+	<a class="indexterm" name="id467316"></a>
+<a class="indexterm" name="id467323"></a>
 	To start the server as a daemon, you should create a script something
 	like this one, perhaps calling it <code class="filename">startsmb</code>.
 	</p><pre class="programlisting">
@@ -278,7 +278,7 @@
 	If you use the SVR4-style init system, you may like to look at the
 	<code class="filename">examples/svr4-startup</code> script to make Samba fit
 	into that system.
-	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2710567"></a>Starting Samba for Red Hat Linux</h4></div></div></div><p>
+	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id467396"></a>Starting Samba for Red Hat Linux</h4></div></div></div><p>
 	Red Hat Linux has not always included all Samba components in the standard installation.
 	So versions of Red Hat Linux do not install the winbind utility, even though it is present
 	on the installation CDROM media. Check to see if the <code class="literal">winbindd</code> is present
@@ -311,7 +311,7 @@
 <code class="prompt">root# </code> chkconfig winbind on
 </pre><p>
 	Samba will be started automatically at every system reboot.
-	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2710690"></a>Starting Samba for Novell SUSE Linux</h4></div></div></div><p>
+	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id467509"></a>Starting Samba for Novell SUSE Linux</h4></div></div></div><p>
 	Novell SUSE Linux products automatically install all essential Samba components in a default installation.
 	Configure your <code class="filename">smb.conf</code> file, then execute the following to start Samba:
 </p><pre class="screen">

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/diagnosis.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/diagnosis.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/diagnosis.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,5 +1,5 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 38. The Samba Checklist</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="troubleshooting.html" title="Part V. Troubleshooting"><link rel="prev" href="troubleshooting.html" title="Part V. Troubleshooting"><link rel="next" href="problems.html" title="Chapter 39. Analyzing and Solving Samba Problems"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 38. The Samba Checklist</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="troubleshooting.html">Prev</a> </td><th width="60%" align="center">Part V. Troubleshooting</th><td width="20%" align="right"> <a accesskey="n" href="problems.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="diagnosis"></a>Chapter 38. The Samba Checklist</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Andrew</span> <span class="surname">Tridgell</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:tridge at samba.org">tridge at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Dan</span> <span class="surname">Shearer</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:dan at samba.org">dan at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">Wed Jan 15</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="diagnosis.html#id2705069">Introduction</a></span></dt><dt><span class="sect1"><a href="diagnosis.html#id2705108">Assumptions</a></span></dt><dt><span class="sect1"><a href="diagnosis.html#id2705401">The Tests</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2705069"></a>Introduction</h2></div></div></div><p>
-<a class="indexterm" name="id2705077"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 38. The Samba Checklist</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="troubleshooting.html" title="Part V. Troubleshooting"><link rel="prev" href="troubleshooting.html" title="Part V. Troubleshooting"><link rel="next" href="problems.html" title="Chapter 39. Analyzing and Solving Samba Problems"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 38. The Samba Checklist</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="troubleshooting.html">Prev</a> </td><th width="60%" align="center">Part V. Troubleshooting</th><td width="20%" align="right"> <a accesskey="n" href="problems.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="diagnosis"></a>Chapter 38. The Samba Checklist</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Andrew</span> <span class="surname">Tridgell</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:tridge at samba.org">tridge at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Dan</span> <span class="surname">Shearer</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:dan at samba.org">dan at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">Wed Jan 15</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="diagnosis.html#id462256">Introduction</a></span></dt><dt><span class="sect1"><a href="diagnosis.html#id462289">Assumptions</a></span></dt><dt><span class="sect1"><a href="diagnosis.html#id462567">The Tests</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id462256"></a>Introduction</h2></div></div></div><p>
+<a class="indexterm" name="id462264"></a>
 This file contains a list of tests you can perform to validate your
 Samba server. It also tells you what the likely cause of the problem
 is if it fails any one of these steps. If it passes all these tests,
@@ -14,7 +14,7 @@
 If you send one of the Samba mailing lists  an email saying, &#8220;<span class="quote">It does not work,</span>&#8221;
 and you have not followed this test procedure, you should not be surprised
 if your email is ignored.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2705108"></a>Assumptions</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id462289"></a>Assumptions</h2></div></div></div><p>
 In all of the tests, it is assumed you have a Samba server called 
 BIGSERVER and a PC called ACLIENT, both in workgroup TESTGROUP.
 </p><p>
@@ -24,31 +24,31 @@
 <code class="filename">smb.conf</code>. I for our examples this share is called <em class="parameter"><code>tmp</code></em>.
 You can add a <em class="parameter"><code>tmp</code></em> share like this by adding the
 lines shown in <a class="link" href="diagnosis.html#tmpshare" title="Example 38.1. smb.conf with [tmp] Share">the next example</a>.
-</p><div class="example"><a name="tmpshare"></a><p class="title"><b>Example 38.1. smb.conf with [tmp] Share</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[tmp]</code></em></td></tr><tr><td><a class="indexterm" name="id2705179"></a><em class="parameter"><code>comment = temporary files </code></em></td></tr><tr><td><a class="indexterm" name="id2705191"></a><em class="parameter"><code>path = /tmp</code></em></td></tr><tr><td><a class="indexterm" name="id2705202"></a><em class="parameter"><code>read only = yes</code></em></td></tr></table></div></div><br class="example-break"><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
+</p><div class="example"><a name="tmpshare"></a><p class="title"><b>Example 38.1. smb.conf with [tmp] Share</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[tmp]</code></em></td></tr><tr><td><a class="indexterm" name="id462356"></a><em class="parameter"><code>comment = temporary files </code></em></td></tr><tr><td><a class="indexterm" name="id462368"></a><em class="parameter"><code>path = /tmp</code></em></td></tr><tr><td><a class="indexterm" name="id462379"></a><em class="parameter"><code>read only = yes</code></em></td></tr></table></div></div><br class="example-break"><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
 These tests assume version 3.0.0 or later of the Samba suite.
 Some commands shown did not exist in earlier versions. 
 </p></div><p>
-<a class="indexterm" name="id2705224"></a>
-<a class="indexterm" name="id2705231"></a>
-<a class="indexterm" name="id2705238"></a>
+<a class="indexterm" name="id462399"></a>
+<a class="indexterm" name="id462406"></a>
+<a class="indexterm" name="id462413"></a>
 Please pay attention to the error messages you receive. If any error message
 reports that your server is being unfriendly, you should first check that your
 IP name resolution is correctly set up. Make sure your <code class="filename">/etc/resolv.conf</code>
 file points to name servers that really do exist.
 </p><p>
-<a class="indexterm" name="id2705258"></a>
-<a class="indexterm" name="id2705265"></a>
-<a class="indexterm" name="id2705272"></a>
-<a class="indexterm" name="id2705279"></a>
+<a class="indexterm" name="id462431"></a>
+<a class="indexterm" name="id462438"></a>
+<a class="indexterm" name="id462445"></a>
+<a class="indexterm" name="id462452"></a>
 Also, if you do not have DNS server access for name resolution, please check
 that the settings for your <code class="filename">smb.conf</code> file results in <em class="parameter"><code>dns proxy = no</code></em>. The
 best way to check this is with <code class="literal">testparm smb.conf</code>.
 </p><p>
-<a class="indexterm" name="id2705309"></a>
-<a class="indexterm" name="id2705316"></a>
-<a class="indexterm" name="id2705323"></a>
-<a class="indexterm" name="id2705330"></a>
-<a class="indexterm" name="id2705337"></a>
+<a class="indexterm" name="id462480"></a>
+<a class="indexterm" name="id462487"></a>
+<a class="indexterm" name="id462494"></a>
+<a class="indexterm" name="id462501"></a>
+<a class="indexterm" name="id462508"></a>
 It is helpful to monitor the log files during testing by using the
 <code class="literal">tail -F log_file_name</code> in a separate
 terminal console (use ctrl-alt-F1 through F6 or multiple terminals in X). 
@@ -59,36 +59,36 @@
 </p><p>
 If you make changes to your <code class="filename">smb.conf</code> file while going through these test,
 remember to restart <span class="application">smbd</span> and <span class="application">nmbd</span>.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2705401"></a>The Tests</h2></div></div></div><div class="procedure"><a name="id2705407"></a><p class="title"><b>Procedure 38.1. Diagnosing Your Samba Server</b></p><ol type="1"><li><p>
-<a class="indexterm" name="id2705419"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id462567"></a>The Tests</h2></div></div></div><div class="procedure"><a name="id462573"></a><p class="title"><b>Procedure 38.1. Diagnosing Your Samba Server</b></p><ol type="1"><li><p>
+<a class="indexterm" name="id462585"></a>
 In the directory in which you store your <code class="filename">smb.conf</code> file, run the command
 <code class="literal">testparm smb.conf</code>. If it reports any errors, then your <code class="filename">smb.conf</code>
 configuration file is faulty.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2705450"></a>
-<a class="indexterm" name="id2705457"></a>
+<a class="indexterm" name="id462615"></a>
+<a class="indexterm" name="id462622"></a>
 Your <code class="filename">smb.conf</code> file may be located in <code class="filename">/etc/samba</code>
 or in <code class="filename">/usr/local/samba/lib</code>.
 </p></div></li><li><p>
-<a class="indexterm" name="id2705491"></a>
+<a class="indexterm" name="id462655"></a>
 Run the command <code class="literal">ping BIGSERVER</code> from the PC and
 <code class="literal">ping ACLIENT</code> from the UNIX box. If you do not get a valid response,
 then your TCP/IP software is not correctly installed. 
 </p><p>
 You will need to start a &#8220;<span class="quote">DOS prompt</span>&#8221; window on the PC to run ping.
 </p><p>
-<a class="indexterm" name="id2705524"></a>
-<a class="indexterm" name="id2705531"></a>
-<a class="indexterm" name="id2705537"></a>
+<a class="indexterm" name="id462686"></a>
+<a class="indexterm" name="id462693"></a>
+<a class="indexterm" name="id462699"></a>
 If you get a message saying &#8220;<span class="quote"><span class="errorname">host not found</span></span>&#8221; or a similar message, then
 your DNS software or <code class="filename">/etc/hosts</code> file is not correctly set up.  If using DNS, check that
 the <code class="filename">/etc/resolv.conf</code> has correct, current, entries in it. It is possible to run
 Samba without DNS entries for the server and client, but it is assumed you do have correct entries for the
 remainder of these tests.
 </p><p>
-<a class="indexterm" name="id2705570"></a>
-<a class="indexterm" name="id2705576"></a>
-<a class="indexterm" name="id2705583"></a>
+<a class="indexterm" name="id462729"></a>
+<a class="indexterm" name="id462735"></a>
+<a class="indexterm" name="id462742"></a>
 Another reason why ping might fail is if your host is running firewall 
 software. You will need to relax the rules to let in the workstation
 in question, perhaps by allowing access from another subnet (on Linux
@@ -98,8 +98,8 @@
 Modern Linux distributions install ipchains/iptables by default. 
 This is a common problem that is often overlooked.
 </p></div><p>
-<a class="indexterm" name="id2705618"></a>
-<a class="indexterm" name="id2705625"></a>
+<a class="indexterm" name="id462774"></a>
+<a class="indexterm" name="id462781"></a>
 If you wish to check what firewall rules may be present in a system under test, simply run
 <code class="literal">iptables -L -v</code>, or if <em class="parameter"><code>ipchains</code></em>-based firewall rules are in use,
 <code class="literal">ipchains -L -v</code>.
@@ -133,12 +133,12 @@
 Run the command <code class="literal">smbclient -L BIGSERVER</code>
 on the UNIX box. You should get back a list of available shares. 
 </p><p>
-<a class="indexterm" name="id2705717"></a>
-<a class="indexterm" name="id2705724"></a>
-<a class="indexterm" name="id2705730"></a>
-<a class="indexterm" name="id2705737"></a>
-<a class="indexterm" name="id2705744"></a>
-<a class="indexterm" name="id2705751"></a>
+<a class="indexterm" name="id462852"></a>
+<a class="indexterm" name="id462859"></a>
+<a class="indexterm" name="id462865"></a>
+<a class="indexterm" name="id462872"></a>
+<a class="indexterm" name="id462879"></a>
+<a class="indexterm" name="id462886"></a>
 If you get an error message containing the string &#8220;<span class="quote">bad password</span>&#8221;, then
 you probably have either an incorrect <em class="parameter"><code>hosts allow</code></em>, 
 <em class="parameter"><code>hosts deny</code></em>, or <em class="parameter"><code>valid users</code></em> line in your 
@@ -146,15 +146,15 @@
 temporarily remove any <em class="parameter"><code>hosts allow</code></em>, <em class="parameter"><code>hosts deny</code></em>,
 <em class="parameter"><code>valid users</code></em>, or <em class="parameter"><code>invalid users</code></em> lines.
 </p><p>
-<a class="indexterm" name="id2705822"></a>
+<a class="indexterm" name="id462954"></a>
 If you get a message <code class="literal">connection refused</code> response, then the <code class="literal">smbd</code> server may
 not be running. If you installed it in <code class="filename">inetd.conf</code>, then you probably edited
 that file incorrectly. If you installed it as a daemon, then check that
 it is running and check that the netbios-ssn port is in a LISTEN
 state using <code class="literal">netstat -a</code>.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2705861"></a>
-<a class="indexterm" name="id2705868"></a>
+<a class="indexterm" name="id462991"></a>
+<a class="indexterm" name="id462998"></a>
 Some UNIX/Linux systems use <code class="literal">xinetd</code> in place of
 <code class="literal">inetd</code>. Check your system documentation for the location
 of the control files for your particular system implementation of
@@ -171,36 +171,36 @@
 There are a number of reasons for which smbd may refuse or decline
 a session request. The most common of these involve one or more of
 the <code class="filename">smb.conf</code> file entries as shown in <a class="link" href="diagnosis.html#modif1" title="Example 38.2. Configuration for Allowing Connections Only from a Certain Subnet">the next example</a>.
-</p><div class="example"><a name="modif1"></a><p class="title"><b>Example 38.2. Configuration for Allowing Connections Only from a Certain Subnet</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[globals]</code></em></td></tr><tr><td><a class="indexterm" name="id2705980"></a><em class="parameter"><code>hosts deny = ALL</code></em></td></tr><tr><td><a class="indexterm" name="id2705992"></a><em class="parameter"><code>hosts allow = xxx.xxx.xxx.xxx/yy</code></em></td></tr><tr><td><a class="indexterm" name="id2706004"></a><em class="parameter"><code>interfaces = eth0</code></em></td></tr><tr><td><a class="indexterm" name="id2706016"></a><em class="parameter"><code>bind interfaces only = Yes</code></em></td></tr></table></div></div><br class="example-break"><p>
-<a class="indexterm" name="id2706031"></a>
+</p><div class="example"><a name="modif1"></a><p class="title"><b>Example 38.2. Configuration for Allowing Connections Only from a Certain Subnet</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[globals]</code></em></td></tr><tr><td><a class="indexterm" name="id463104"></a><em class="parameter"><code>hosts deny = ALL</code></em></td></tr><tr><td><a class="indexterm" name="id463115"></a><em class="parameter"><code>hosts allow = xxx.xxx.xxx.xxx/yy</code></em></td></tr><tr><td><a class="indexterm" name="id463127"></a><em class="parameter"><code>interfaces = eth0</code></em></td></tr><tr><td><a class="indexterm" name="id463138"></a><em class="parameter"><code>bind interfaces only = Yes</code></em></td></tr></table></div></div><br class="example-break"><p>
+<a class="indexterm" name="id463153"></a>
 In <a class="link" href="diagnosis.html#modif1" title="Example 38.2. Configuration for Allowing Connections Only from a Certain Subnet">Configuration for Allowing Connections Only from a Certain Subnet</a>, no
 allowance has been made for any session requests that will automatically translate to the loopback adapter
 address 127.0.0.1.  To solve this problem, change these lines as shown in <a class="link" href="diagnosis.html#modif2" title="Example 38.3. Configuration for Allowing Connections from a Certain Subnet and localhost">the following
 example</a>.
-</p><div class="example"><a name="modif2"></a><p class="title"><b>Example 38.3. Configuration for Allowing Connections from a Certain Subnet and localhost</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[globals]</code></em></td></tr><tr><td><a class="indexterm" name="id2706082"></a><em class="parameter"><code>hosts deny = ALL</code></em></td></tr><tr><td><a class="indexterm" name="id2706094"></a><em class="parameter"><code>hosts allow = xxx.xxx.xxx.xxx/yy 127.</code></em></td></tr><tr><td><a class="indexterm" name="id2706106"></a><em class="parameter"><code>interfaces = eth0 lo</code></em></td></tr></table></div></div><br class="example-break"><p>
-<a class="indexterm" name="id2706121"></a>
-<a class="indexterm" name="id2706128"></a>
+</p><div class="example"><a name="modif2"></a><p class="title"><b>Example 38.3. Configuration for Allowing Connections from a Certain Subnet and localhost</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[globals]</code></em></td></tr><tr><td><a class="indexterm" name="id463202"></a><em class="parameter"><code>hosts deny = ALL</code></em></td></tr><tr><td><a class="indexterm" name="id463213"></a><em class="parameter"><code>hosts allow = xxx.xxx.xxx.xxx/yy 127.</code></em></td></tr><tr><td><a class="indexterm" name="id463225"></a><em class="parameter"><code>interfaces = eth0 lo</code></em></td></tr></table></div></div><br class="example-break"><p>
+<a class="indexterm" name="id463240"></a>
+<a class="indexterm" name="id463246"></a>
 Another common cause of these two errors is having something already running on port <code class="constant">139</code>,
 such as Samba (<span class="application">smbd</span> is running from <span class="application">inetd</span> already) or Digital's Pathworks. Check
 your <code class="filename">inetd.conf</code> file before trying to start <span class="application">smbd</span> as a daemon  it can avoid a
 lot of frustration!
 </p><p>
-<a class="indexterm" name="id2706172"></a>
-<a class="indexterm" name="id2706178"></a>
-<a class="indexterm" name="id2706185"></a>
-<a class="indexterm" name="id2706192"></a>
-<a class="indexterm" name="id2706199"></a>
+<a class="indexterm" name="id463288"></a>
+<a class="indexterm" name="id463295"></a>
+<a class="indexterm" name="id463301"></a>
+<a class="indexterm" name="id463308"></a>
+<a class="indexterm" name="id463315"></a>
 And yet another possible cause for failure of this test is when the subnet mask and/or broadcast address
 settings are incorrect. Please check that the network interface IP address/broadcast address/subnet mask
 settings are correct and that Samba has correctly noted these in the <code class="filename">log.nmbd</code> file.
 </p></li><li><p>
-<a class="indexterm" name="id2706225"></a>
+<a class="indexterm" name="id463339"></a>
 Run the command <code class="literal">nmblookup -B BIGSERVER __SAMBA__</code>.
 You should get back the IP address of your Samba server.
 </p><p>
-<a class="indexterm" name="id2706243"></a>
-<a class="indexterm" name="id2706250"></a>
-<a class="indexterm" name="id2706257"></a>
+<a class="indexterm" name="id463356"></a>
+<a class="indexterm" name="id463363"></a>
+<a class="indexterm" name="id463369"></a>
 If you do not, then <span class="application">nmbd</span> is incorrectly installed. Check your <code class="filename">inetd.conf</code>
 if you run it from there, or that the daemon is running and listening to UDP port 137.
 </p><p>
@@ -209,7 +209,7 @@
 one-line script that contains the right parameters and run that from
 inetd.
 </p></li><li><p>
-<a class="indexterm" name="id2706293"></a>
+<a class="indexterm" name="id463403"></a>
 Run the command <code class="literal">nmblookup -B ACLIENT `*'</code>.
 </p><p>
 You should get the PC's IP address back. If you do not, then the client
@@ -228,7 +228,7 @@
 should see the <code class="literal">got a positive name query response</code>
 messages from several hosts.
 </p><p>
-<a class="indexterm" name="id2706351"></a>
+<a class="indexterm" name="id463455"></a>
 If this does not give a result similar to the previous test, then nmblookup isn't correctly getting your
 broadcast address through its automatic mechanism. In this case you should experiment with the <a class="link" href="smb.conf.5.html#INTERFACES">interfaces</a> option in <code class="filename">smb.conf</code> to manually configure your IP address, broadcast, and netmask.
 </p><p>
@@ -238,7 +238,7 @@
 This test will probably fail if your subnet mask and broadcast address are
 not correct. (Refer to test 3 notes above).
 </p></li><li><p>
-<a class="indexterm" name="id2706403"></a>
+<a class="indexterm" name="id463501"></a>
 Run the command <code class="literal">smbclient //BIGSERVER/TMP</code>. You should 
 then be prompted for a password. You should use the password of the account
 with which you are logged into the UNIX box. If you want to test with
@@ -266,20 +266,20 @@
 	You enabled password encryption but didn't map UNIX to Samba users. Run
 	<code class="literal">smbpasswd -a username</code>
 	</p></li></ol></div><p>
-<a class="indexterm" name="id2706588"></a>
-<a class="indexterm" name="id2706594"></a>
-<a class="indexterm" name="id2706601"></a>
-<a class="indexterm" name="id2706608"></a>
+<a class="indexterm" name="id463675"></a>
+<a class="indexterm" name="id463682"></a>
+<a class="indexterm" name="id463689"></a>
+<a class="indexterm" name="id463695"></a>
 Once connected, you should be able to use the commands <code class="literal">dir</code>, <code class="literal">get</code>,
 <code class="literal">put</code>, and so on. Type <code class="literal">help command</code> for instructions. You should
 especially check that the amount of free disk space shown is correct when you type <code class="literal">dir</code>.
 </p></li><li><p>
-<a class="indexterm" name="id2706654"></a>
+<a class="indexterm" name="id463740"></a>
 On the PC, type the command <code class="literal">net view \\BIGSERVER</code>. You will 
 need to do this from within a DOS prompt window. You should get back a 
 list of shares available on the server.
 </p><p>
-<a class="indexterm" name="id2706673"></a>
+<a class="indexterm" name="id463758"></a>
 If you get a message <code class="literal">network name not found</code> or similar error, then NetBIOS
 name resolution is not working. This is usually caused by a problem in <code class="literal">nmbd</code>.
 To overcome it, you could do one of the following (you only need to choose one of them):

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/domain-member.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/domain-member.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/domain-member.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,14 +1,14 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 6. Domain Membership</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="type.html" title="Part II. Server Configuration Basics"><link rel="prev" href="samba-bdc.html" title="Chapter 5. Backup Domain Control"><link rel="next" href="StandAloneServer.html" title="Chapter 7. Standalone Servers"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 6. Domain Membership</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="samba-bdc.html">Prev</a> </td><th width="60%" align="center">Part II. Server Configuration Basics</th><td width="20%" align="right"> <a accesskey="n" href="StandAloneServer.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="domain-member"></a>Chapter 6. Domain Membership</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jeremy</span> <span class="surname">Allison</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jra at samba.org">jra at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Gerald</span> <span class="othername">(Jerry)</span> <span class="surname">Carter</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jerry at samba.org">jerry at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Andrew</span> <span class="surname">Tridgell</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:tridge at samba.org">tridge at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Guenther</span> <span class="surname">Deschner</span></h3><span class="contrib">LDAP updates</span> <div class="affiliation"><span class="orgname">SuSE<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:gd at suse.de">gd at suse.de</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="domain-member.html#id2591202">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></span></dt><dd><dl><dt><span class="sect2"><a href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id2592325">Managing Domain Machine Accounts using NT4 Server Manager</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id2592605">On-the-Fly Creation of Machine Trust Accounts</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id2592711">Making an MS Windows Workstation or Server a Domain Member</a></span></dt></dl></dd><dt><span class="sect1"><a href="domain-member.html#domain-member-server">Domain Member Server</a></span></dt><dd><dl><dt><span class="sect2"><a href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id2593911">Why Is This Better Than <em class="parameter"><code>security = server</code></em>?</a></span></dt></dl></dd><dt><span class="sect1"><a href="domain-member.html#ads-member">Samba ADS Domain Membership</a></span></dt><dd><dl><dt><span class="sect2"><a href="domain-member.html#id2594193">Configure <code class="filename">smb.conf</code></a></span></dt><dt><span class="sect2"><a href="domain-member.html#id2594384">Configure <code class="filename">/etc/krb5.conf</code></a></span></dt><dt><span class="sect2"><a href="domain-member.html#ads-create-machine-account">Create the Computer Account</a></span></dt><dt><span class="sect2"><a href="domain-member.html#ads-test-server">Testing Server Setup</a></span></dt><dt><span class="sect2"><a href="domain-member.html#ads-test-smbclient">Testing with <span class="application">smbclient</span></a></span></dt><dt><span class="sect2"><a href="domain-member.html#id2595479">Notes</a></span></dt></dl></dd><dt><span class="sect1"><a href="domain-member.html#id2595551">Sharing User ID Mappings between Samba Domain Members</a></span></dt><dt><span class="sect1"><a href="domain-member.html#id2595757">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="domain-member.html#id2595797">Cannot Add Machine Back to Domain</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id2595873">Adding Machine to Domain Fails</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id2596109">I Can't Join a Windows 2003 PDC</a></span></dt></dl></dd></dl></div><p>
-<a class="indexterm" name="id2591150"></a>
-<a class="indexterm" name="id2591156"></a>
-<a class="indexterm" name="id2591164"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 6. Domain Membership</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="type.html" title="Part II. Server Configuration Basics"><link rel="prev" href="samba-bdc.html" title="Chapter 5. Backup Domain Control"><link rel="next" href="StandAloneServer.html" title="Chapter 7. Standalone Servers"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 6. Domain Membership</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="samba-bdc.html">Prev</a> </td><th width="60%" align="center">Part II. Server Configuration Basics</th><td width="20%" align="right"> <a accesskey="n" href="StandAloneServer.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="domain-member"></a>Chapter 6. Domain Membership</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jeremy</span> <span class="surname">Allison</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jra at samba.org">jra at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Gerald</span> <span class="othername">(Jerry)</span> <span class="surname">Carter</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jerry at samba.org">jerry at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Andrew</span> <span class="surname">Tridgell</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:tridge at samba.org">tridge at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Guenther</span> <span class="surname">Deschner</span></h3><span class="contrib">LDAP updates</span> <div class="affiliation"><span class="orgname">SuSE<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:gd at suse.de">gd at suse.de</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="domain-member.html#id357484">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></span></dt><dd><dl><dt><span class="sect2"><a href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id358537">Managing Domain Machine Accounts using NT4 Server Manager</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id358802">On-the-Fly Creation of Machine Trust Accounts</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id358901">Making an MS Windows Workstation or Server a Domain Member</a></span></dt></dl></dd><dt><span class="sect1"><a href="domain-member.html#domain-member-server">Domain Member Server</a></span></dt><dd><dl><dt><span class="sect2"><a href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id360028">Why Is This Better Than <em class="parameter"><code>security = server</code></em>?</a></span></dt></dl></dd><dt><span class="sect1"><a href="domain-member.html#ads-member">Samba ADS Domain Membership</a></span></dt><dd><dl><dt><span class="sect2"><a href="domain-member.html#id360288">Configure <code class="filename">smb.conf</code></a></span></dt><dt><span class="sect2"><a href="domain-member.html#id360470">Configure <code class="filename">/etc/krb5.conf</code></a></span></dt><dt><span class="sect2"><a href="domain-member.html#ads-create-machine-account">Create the Computer Account</a></span></dt><dt><span class="sect2"><a href="domain-member.html#ads-test-server">Testing Server Setup</a></span></dt><dt><span class="sect2"><a href="domain-member.html#ads-test-smbclient">Testing with <span class="application">smbclient</span></a></span></dt><dt><span class="sect2"><a href="domain-member.html#id361503">Notes</a></span></dt></dl></dd><dt><span class="sect1"><a href="domain-member.html#id361572">Sharing User ID Mappings between Samba Domain Members</a></span></dt><dt><span class="sect1"><a href="domain-member.html#id361768">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="domain-member.html#id361802">Cannot Add Machine Back to Domain</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id361872">Adding Machine to Domain Fails</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id362092">I Can't Join a Windows 2003 PDC</a></span></dt></dl></dd></dl></div><p>
+<a class="indexterm" name="id357439"></a>
+<a class="indexterm" name="id357445"></a>
+<a class="indexterm" name="id357452"></a>
 Domain membership is a subject of vital concern. Samba must be able to
 participate as a member server in a Microsoft domain security context, and
 Samba must be capable of providing domain machine member trust accounts;
 otherwise it would not be able to offer a viable option for many users.
 </p><p>
-<a class="indexterm" name="id2591179"></a>
-<a class="indexterm" name="id2591186"></a>
+<a class="indexterm" name="id357465"></a>
+<a class="indexterm" name="id357472"></a>
 This chapter covers background information pertaining to domain membership,
 the Samba configuration for it, and MS Windows client procedures for joining a
 domain. Why is this necessary? Because both are areas in which there exists
@@ -16,10 +16,10 @@
 UNIX/Linux networking and administration world, a considerable level of
 misinformation, incorrect understanding, and lack of knowledge. Hopefully
 this chapter will fill the voids.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2591202"></a>Features and Benefits</h2></div></div></div><p>
-<a class="indexterm" name="id2591210"></a>
-<a class="indexterm" name="id2591217"></a>
-<a class="indexterm" name="id2591224"></a>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id357484"></a>Features and Benefits</h2></div></div></div><p>
+<a class="indexterm" name="id357491"></a>
+<a class="indexterm" name="id357498"></a>
+<a class="indexterm" name="id357505"></a>
 MS Windows workstations and servers that want to participate in domain security need to
 be made domain members. Participating in domain security is often called 
 <span class="emphasis"><em>single sign-on</em></span>, or <acronym class="acronym">SSO</acronym> for short. This
@@ -27,68 +27,68 @@
 (or another server  be it an <span class="application">MS Windows NT4/200x</span>
 server) or a Samba server a member of an MS Windows domain security context.
 </p><p>
-<a class="indexterm" name="id2591256"></a>
-<a class="indexterm" name="id2591262"></a>
-<a class="indexterm" name="id2591269"></a>
-<a class="indexterm" name="id2591276"></a>
+<a class="indexterm" name="id357533"></a>
+<a class="indexterm" name="id357540"></a>
+<a class="indexterm" name="id357547"></a>
+<a class="indexterm" name="id357554"></a>
 Samba-3 can join an MS Windows NT4-style domain as a native member server, an 
 MS Windows Active Directory domain as a native member server, or a Samba domain
 control network. Domain membership has many advantages:
 </p><div class="itemizedlist"><ul type="disc"><li><p>
-	<a class="indexterm" name="id2591295"></a>
+	<a class="indexterm" name="id357571"></a>
 	MS Windows workstation users get the benefit of SSO.
 	</p></li><li><p>
-	<a class="indexterm" name="id2591307"></a>
-	<a class="indexterm" name="id2591314"></a>
-	<a class="indexterm" name="id2591321"></a>
-	<a class="indexterm" name="id2591328"></a>
+	<a class="indexterm" name="id357583"></a>
+	<a class="indexterm" name="id357589"></a>
+	<a class="indexterm" name="id357596"></a>
+	<a class="indexterm" name="id357603"></a>
 	Domain user access rights and file ownership/access controls can be set
 	from the single Domain Security Account Manager (SAM) database 
 	(works with domain member servers as well as with MS Windows workstations
 	that are domain members).
 	</p></li><li><p>
-	<a class="indexterm" name="id2591343"></a>
-	<a class="indexterm" name="id2591350"></a>
+	<a class="indexterm" name="id357616"></a>
+	<a class="indexterm" name="id357623"></a>
 	Only <span class="application">MS Windows NT4/200x/XP Professional</span>
 	workstations that are domain members can use network logon facilities.
 	</p></li><li><p>
-	<a class="indexterm" name="id2591369"></a>
-	<a class="indexterm" name="id2591376"></a>
-	<a class="indexterm" name="id2591383"></a>
-	<a class="indexterm" name="id2591390"></a>
+	<a class="indexterm" name="id357641"></a>
+	<a class="indexterm" name="id357648"></a>
+	<a class="indexterm" name="id357654"></a>
+	<a class="indexterm" name="id357661"></a>
 	Domain member workstations can be better controlled through the use of
 	policy files (<code class="filename">NTConfig.POL</code>) and desktop profiles.
 	</p></li><li><p>
-	<a class="indexterm" name="id2591409"></a>
-	<a class="indexterm" name="id2591416"></a>
-	<a class="indexterm" name="id2591423"></a>
+	<a class="indexterm" name="id357679"></a>
+	<a class="indexterm" name="id357686"></a>
+	<a class="indexterm" name="id357693"></a>
 	Through the use of logon scripts, users can be given transparent access to network
 	applications that run off application servers.
 	</p></li><li><p>
-	<a class="indexterm" name="id2591436"></a>
-	<a class="indexterm" name="id2591443"></a>
-	<a class="indexterm" name="id2591450"></a>
-	<a class="indexterm" name="id2591457"></a>
+	<a class="indexterm" name="id357705"></a>
+	<a class="indexterm" name="id357712"></a>
+	<a class="indexterm" name="id357718"></a>
+	<a class="indexterm" name="id357725"></a>
 	Network administrators gain better application and user access management
 	abilities because there is no need to maintain user accounts on any network
 	client or server other than the central domain database 
 	(either NT4/Samba SAM-style domain, NT4 domain that is backend-ed with an
 	LDAP directory, or via an Active Directory infrastructure).
 	</p></li></ul></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="machine-trust-accounts"></a>MS Windows Workstation/Server Machine Trust Accounts</h2></div></div></div><p>
-<a class="indexterm" name="id2591485"></a>
-<a class="indexterm" name="id2591492"></a>
-<a class="indexterm" name="id2591499"></a>
-<a class="indexterm" name="id2591506"></a>
+<a class="indexterm" name="id357749"></a>
+<a class="indexterm" name="id357756"></a>
+<a class="indexterm" name="id357763"></a>
+<a class="indexterm" name="id357770"></a>
 A Machine Trust Account is an account that is used to authenticate a client machine (rather than a user) to
 the domain controller server. In Windows terminology, this is known as a &#8220;<span class="quote">computer account.</span>&#8221; The
 purpose of the machine trust account is to prevent a rogue user and domain controller from colluding to gain
 access to a domain member workstation.
 </p><p>
-<a class="indexterm" name="id2591525"></a>
-<a class="indexterm" name="id2591534"></a>
-<a class="indexterm" name="id2591541"></a>
-<a class="indexterm" name="id2591548"></a>
-<a class="indexterm" name="id2591556"></a>
+<a class="indexterm" name="id357786"></a>
+<a class="indexterm" name="id357795"></a>
+<a class="indexterm" name="id357802"></a>
+<a class="indexterm" name="id357809"></a>
+<a class="indexterm" name="id357816"></a>
 The password of a Machine Trust Account acts as the shared secret for secure communication with the domain
 controller. This is a security feature to prevent an unauthorized machine with the same NetBIOS name from
 joining the domain, participating in domain security operations, and gaining access to domain user/group
@@ -96,10 +96,10 @@
 clients do not. Hence, a Windows 9x/Me/XP Home client is never a true member of a domain because it does not
 possess a Machine Trust Account, and, thus, has no shared secret with the domain controller.
 </p><p>
-<a class="indexterm" name="id2591576"></a>
-<a class="indexterm" name="id2591583"></a>
-<a class="indexterm" name="id2591590"></a>
-<a class="indexterm" name="id2591596"></a>
+<a class="indexterm" name="id357831"></a>
+<a class="indexterm" name="id357838"></a>
+<a class="indexterm" name="id357844"></a>
+<a class="indexterm" name="id357851"></a>
 A Windows NT4 PDC stores each Machine Trust Account in the Windows Registry.
 The introduction of MS Windows 2000 saw the introduction of Active Directory,
 the new repository for Machine Trust Accounts. A Samba PDC, however, stores
@@ -107,69 +107,69 @@
 as follows:
 
 </p><div class="itemizedlist"><ul type="disc"><li><p>
-	<a class="indexterm" name="id2591614"></a>
-	<a class="indexterm" name="id2591621"></a>
-	<a class="indexterm" name="id2591628"></a>
+	<a class="indexterm" name="id357866"></a>
+	<a class="indexterm" name="id357872"></a>
+	<a class="indexterm" name="id357879"></a>
 	A domain security account (stored in the <a class="link" href="smb.conf.5.html#PASSDBBACKEND">passdb backend</a>) that has been configured in
 	the <code class="filename">smb.conf</code> file. The precise nature of the account information that is stored depends on the type of
 	backend database that has been chosen.
 	</p><p>
-	<a class="indexterm" name="id2591659"></a>
-	<a class="indexterm" name="id2591666"></a>
-	<a class="indexterm" name="id2591673"></a>
-	<a class="indexterm" name="id2591680"></a>
-	<a class="indexterm" name="id2591686"></a>
-	<a class="indexterm" name="id2591694"></a>
+	<a class="indexterm" name="id357907"></a>
+	<a class="indexterm" name="id357914"></a>
+	<a class="indexterm" name="id357921"></a>
+	<a class="indexterm" name="id357928"></a>
+	<a class="indexterm" name="id357934"></a>
+	<a class="indexterm" name="id357941"></a>
 	The older format of this data is the <code class="filename">smbpasswd</code> database
 	that contains the UNIX login ID, the UNIX user identifier (UID), and the
 	LanMan and NT-encrypted passwords. There is also some other information in
 	this file that we do not need to concern ourselves with here.
 	</p><p>
-	<a class="indexterm" name="id2591716"></a>
-	<a class="indexterm" name="id2591722"></a>
-	<a class="indexterm" name="id2591729"></a>
-	<a class="indexterm" name="id2591736"></a>
+	<a class="indexterm" name="id357961"></a>
+	<a class="indexterm" name="id357968"></a>
+	<a class="indexterm" name="id357975"></a>
+	<a class="indexterm" name="id357982"></a>
 	The two newer database types are called ldapsam and tdbsam. Both store considerably more data than the older
 	<code class="filename">smbpasswd</code> file did. The extra information enables new user account controls to be
 	implemented.
 	</p></li><li><p>
-	<a class="indexterm" name="id2591756"></a>
-	<a class="indexterm" name="id2591763"></a>
+	<a class="indexterm" name="id358001"></a>
+	<a class="indexterm" name="id358007"></a>
 	A corresponding UNIX account, typically stored in <code class="filename">/etc/passwd</code>. Work is in progress to
 	allow a simplified mode of operation that does not require UNIX user accounts, but this has not been a feature
 	of the early releases of Samba-3, and is not currently planned for release either.
 	</p></li></ul></div><p>
 </p><p>
-<a class="indexterm" name="id2591789"></a>
+<a class="indexterm" name="id358031"></a>
 There are three ways to create Machine Trust Accounts:
 </p><div class="itemizedlist"><ul type="disc"><li><p>
-	<a class="indexterm" name="id2591806"></a>
+	<a class="indexterm" name="id358046"></a>
 	Manual creation from the UNIX/Linux command line. Here, both the Samba and
 	corresponding UNIX account are created by hand.
 	</p></li><li><p>
-	<a class="indexterm" name="id2591819"></a>
-	<a class="indexterm" name="id2591826"></a>
+	<a class="indexterm" name="id358059"></a>
+	<a class="indexterm" name="id358066"></a>
 	Using the MS Windows NT4 Server Manager, either from an NT4 domain member
 	server or using the Nexus toolkit available from the Microsoft Web site.
 	This tool can be run from any MS Windows machine as long as the user is
 	logged on as the administrator account.
 	</p></li><li><p>
-	<a class="indexterm" name="id2591842"></a>
-	<a class="indexterm" name="id2591849"></a>
+	<a class="indexterm" name="id358079"></a>
+	<a class="indexterm" name="id358086"></a>
 	&#8220;<span class="quote">On-the-fly</span>&#8221; creation. The Samba Machine Trust Account is automatically
 	created by Samba at the time the client is joined to the domain.
 	(For security, this is the recommended method.) The corresponding UNIX
 	account may be created automatically or manually. 
 	</p></li></ul></div><p>
-<a class="indexterm" name="id2591868"></a>
-<a class="indexterm" name="id2591875"></a>
+<a class="indexterm" name="id358103"></a>
+<a class="indexterm" name="id358110"></a>
 Neither MS Windows NT4/200x/XP Professional, nor Samba, provide any method for enforcing the method of machine
 trust account creation. This is a matter of the administrator's choice.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2591889"></a>Manual Creation of Machine Trust Accounts</h3></div></div></div><p>
-<a class="indexterm" name="id2591897"></a>
-<a class="indexterm" name="id2591904"></a>
-<a class="indexterm" name="id2591909"></a>
-<a class="indexterm" name="id2591916"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id358122"></a>Manual Creation of Machine Trust Accounts</h3></div></div></div><p>
+<a class="indexterm" name="id358130"></a>
+<a class="indexterm" name="id358136"></a>
+<a class="indexterm" name="id358142"></a>
+<a class="indexterm" name="id358149"></a>
 The first step in manually creating a Machine Trust Account is to manually
 create the corresponding UNIX account in <code class="filename">/etc/passwd</code>. 
 This can be done using <code class="literal">vipw</code> or another &#8220;<span class="quote">adduser</span>&#8221; command
@@ -183,25 +183,25 @@
 <code class="prompt">root# </code><strong class="userinput"><code>passwd -l <em class="replaceable"><code>machine_name</code></em>$</code></strong>
 </pre><p>
 </p><p>
-<a class="indexterm" name="id2591985"></a>
-<a class="indexterm" name="id2591992"></a>
-<a class="indexterm" name="id2591998"></a>
+<a class="indexterm" name="id358214"></a>
+<a class="indexterm" name="id358221"></a>
+<a class="indexterm" name="id358227"></a>
 In the example above there is an existing system group &#8220;<span class="quote">machines</span>&#8221; which is used
 as the primary group for all machine accounts. In the following examples the &#8220;<span class="quote">machines</span>&#8221; group
 numeric GID is 100.
 </p><p>
-<a class="indexterm" name="id2592018"></a>
-<a class="indexterm" name="id2592025"></a>
+<a class="indexterm" name="id358246"></a>
+<a class="indexterm" name="id358253"></a>
 On *BSD systems, this can be done using the <code class="literal">chpass</code> utility:
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>chpass -a \
 '<em class="replaceable"><code>machine_name</code></em>$:*:101:100::0:0:Windows <em class="replaceable"><code>machine_name</code></em>:/dev/null:/sbin/nologin'</code></strong>
 </pre><p>
 </p><p>
-<a class="indexterm" name="id2592066"></a>
-<a class="indexterm" name="id2592073"></a>
-<a class="indexterm" name="id2592080"></a>
-<a class="indexterm" name="id2592086"></a>
+<a class="indexterm" name="id358293"></a>
+<a class="indexterm" name="id358300"></a>
+<a class="indexterm" name="id358306"></a>
+<a class="indexterm" name="id358313"></a>
 The <code class="filename">/etc/passwd</code> entry will list the machine name 
 with a &#8220;<span class="quote">$</span>&#8221; appended, and will not have a password, will have a null shell and no 
 home directory. For example, a machine named &#8220;<span class="quote">doppy</span>&#8221; would have an 
@@ -210,9 +210,9 @@
 doppy$:x:505:100:<em class="replaceable"><code>machine_nickname</code></em>:/dev/null:/bin/false
 </pre><p>
 </p><p>
-<a class="indexterm" name="id2592129"></a>
-<a class="indexterm" name="id2592136"></a>
-<a class="indexterm" name="id2592143"></a>
+<a class="indexterm" name="id358353"></a>
+<a class="indexterm" name="id358360"></a>
+<a class="indexterm" name="id358366"></a>
 in which <em class="replaceable"><code>machine_nickname</code></em> can be any
 descriptive name for the client, such as BasementComputer.
 <em class="replaceable"><code>machine_name</code></em> absolutely must be the NetBIOS
@@ -220,9 +220,9 @@
 appended to the NetBIOS name of the client or Samba will not recognize
 this as a Machine Trust Account.
 </p><p>
-<a class="indexterm" name="id2592168"></a>
-<a class="indexterm" name="id2592175"></a>
-<a class="indexterm" name="id2592182"></a>
+<a class="indexterm" name="id358389"></a>
+<a class="indexterm" name="id358396"></a>
+<a class="indexterm" name="id358403"></a>
 Now that the corresponding UNIX account has been created, the next step is to create 
 the Samba account for the client containing the well-known initial 
 Machine Trust Account password. This can be done using the 
@@ -232,48 +232,48 @@
 <code class="prompt">root# </code><strong class="userinput"><code>smbpasswd -a -m <em class="replaceable"><code>machine_name</code></em></code></strong>
 </pre><p>
 </p><p>
-<a class="indexterm" name="id2592224"></a>
-<a class="indexterm" name="id2592231"></a>
-<a class="indexterm" name="id2592238"></a>
-<a class="indexterm" name="id2592244"></a>
+<a class="indexterm" name="id358442"></a>
+<a class="indexterm" name="id358448"></a>
+<a class="indexterm" name="id358455"></a>
+<a class="indexterm" name="id358462"></a>
 where <em class="replaceable"><code>machine_name</code></em> is the machine's NetBIOS
 name. The RID of the new machine account is generated from the UID of 
 the corresponding UNIX account.
 </p><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Join the client to the domain immediately</h3><p>
-<a class="indexterm" name="id2592266"></a>
-<a class="indexterm" name="id2592273"></a>
-<a class="indexterm" name="id2592280"></a>
-<a class="indexterm" name="id2592287"></a>
-<a class="indexterm" name="id2592294"></a>
+<a class="indexterm" name="id358482"></a>
+<a class="indexterm" name="id358489"></a>
+<a class="indexterm" name="id358496"></a>
+<a class="indexterm" name="id358502"></a>
+<a class="indexterm" name="id358509"></a>
 Manually creating a Machine Trust Account using this method is the 
 equivalent of creating a Machine Trust Account on a Windows NT PDC using 
-<a class="indexterm" name="id2592303"></a>
+<a class="indexterm" name="id358517"></a>
 the <span class="application">Server Manager</span>. From the time at which the 
 account is created to the time the client joins the domain and 
 changes the password, your domain is vulnerable to an intruder joining 
 your domain using a machine with the same NetBIOS name. A PDC inherently 
 trusts members of the domain and will serve out a large degree of user 
 information to such clients. You have been warned!
-</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2592325"></a>Managing Domain Machine Accounts using NT4 Server Manager</h3></div></div></div><p>
-<a class="indexterm" name="id2592334"></a>
-<a class="indexterm" name="id2592341"></a>
-<a class="indexterm" name="id2592348"></a>
+</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id358537"></a>Managing Domain Machine Accounts using NT4 Server Manager</h3></div></div></div><p>
+<a class="indexterm" name="id358545"></a>
+<a class="indexterm" name="id358552"></a>
+<a class="indexterm" name="id358558"></a>
 A working <a class="link" href="smb.conf.5.html#ADDMACHINESCRIPT">add machine script</a> is essential
 for machine trust accounts to be automatically created. This applies no matter whether
 you use automatic account creation or the NT4 Domain Server Manager.
 </p><p>
-<a class="indexterm" name="id2592374"></a>
-<a class="indexterm" name="id2592381"></a>
-<a class="indexterm" name="id2592387"></a>
-<a class="indexterm" name="id2592394"></a>
+<a class="indexterm" name="id358581"></a>
+<a class="indexterm" name="id358587"></a>
+<a class="indexterm" name="id358594"></a>
+<a class="indexterm" name="id358601"></a>
 If the machine from which you are trying to manage the domain is an 
 <span class="application">MS Windows NT4 workstation or MS Windows 200x/XP Professional</span>,
 the tool of choice is the package called <code class="literal">SRVTOOLS.EXE</code>. 
 When executed in the target directory it will unpack <code class="literal">SrvMgr.exe</code>
 and <code class="literal">UsrMgr.exe</code> (both are domain management tools for MS Windows NT4 workstation).
 </p><p>
-<a class="indexterm" name="id2592432"></a>
-<a class="indexterm" name="id2592439"></a>
+<a class="indexterm" name="id358637"></a>
+<a class="indexterm" name="id358644"></a>
 If your workstation is a <span class="application">Microsoft Windows 9x/Me</span> family product,
  you should download the <code class="literal">Nexus.exe</code> package from the Microsoft Web site.
 When executed from the target directory, it will unpack the same tools but for use on 
@@ -283,10 +283,10 @@
 <a class="ulink" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;173673" target="_top">173673</a>, and
 <a class="ulink" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;172540" target="_top">172540</a>
 </p><p>
-<a class="indexterm" name="id2592483"></a>
-<a class="indexterm" name="id2592490"></a>
+<a class="indexterm" name="id358684"></a>
+<a class="indexterm" name="id358691"></a>
 Launch the <code class="literal">srvmgr.exe</code> (Server Manager for Domains) and follow these steps:
-</p><div class="procedure"><a name="id2592505"></a><p class="title"><b>Procedure 6.1. Server Manager Account Machine Account Management</b></p><ol type="1"><li><p>
+</p><div class="procedure"><a name="id358706"></a><p class="title"><b>Procedure 6.1. Server Manager Account Machine Account Management</b></p><ol type="1"><li><p>
 	From the menu select <span class="guimenu">Computer</span>.
 	</p></li><li><p>
 	Click <span class="guimenuitem">Select Domain</span>.
@@ -303,82 +303,82 @@
 	<span class="guilabel">Add NT Workstation of Server</span>, then
 	enter the machine name in the field provided, and click the 
 	<span class="guibutton">Add</span> button.
-	</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2592605"></a>On-the-Fly Creation of Machine Trust Accounts</h3></div></div></div><p>
-<a class="indexterm" name="id2592614"></a>
+	</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id358802"></a>On-the-Fly Creation of Machine Trust Accounts</h3></div></div></div><p>
+<a class="indexterm" name="id358810"></a>
 The third (and recommended) way of creating Machine Trust Accounts is simply to allow the Samba server to
 create them as needed when the client is joined to the domain.
 </p><p>
-<a class="indexterm" name="id2592629"></a>
-<a class="indexterm" name="id2592639"></a>
-<a class="indexterm" name="id2592646"></a>
+<a class="indexterm" name="id358824"></a>
+<a class="indexterm" name="id358833"></a>
+<a class="indexterm" name="id358840"></a>
 Since each Samba Machine Trust Account requires a corresponding UNIX account, a method
 for automatically creating the UNIX account is usually supplied; this requires configuration of the
 add machine script option in <code class="filename">smb.conf</code>. This method is not required; however, corresponding UNIX
 accounts may also be created manually.
 </p><p>
-<a class="indexterm" name="id2592667"></a>
-<a class="indexterm" name="id2592674"></a>
+<a class="indexterm" name="id358859"></a>
+<a class="indexterm" name="id358865"></a>
 Here is an example for a Red Hat Linux system:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2592696"></a><em class="parameter"><code>add machine script = /usr/sbin/useradd -d /var/lib/nobody -g 100 -s /bin/false -M %u</code></em></td></tr></table><p>
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2592711"></a>Making an MS Windows Workstation or Server a Domain Member</h3></div></div></div><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id358887"></a><em class="parameter"><code>add machine script = /usr/sbin/useradd -d /var/lib/nobody -g 100 -s /bin/false -M %u</code></em></td></tr></table><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id358901"></a>Making an MS Windows Workstation or Server a Domain Member</h3></div></div></div><p>
 The procedure for making an MS Windows workstation or server a member of the domain varies
 with the version of Windows.
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2592722"></a>Windows 200x/XP Professional Client</h4></div></div></div><p>
-<a class="indexterm" name="id2592730"></a>
-<a class="indexterm" name="id2592737"></a>
-<a class="indexterm" name="id2592746"></a>
-<a class="indexterm" name="id2592753"></a>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id358911"></a>Windows 200x/XP Professional Client</h4></div></div></div><p>
+<a class="indexterm" name="id358918"></a>
+<a class="indexterm" name="id358925"></a>
+<a class="indexterm" name="id358934"></a>
+<a class="indexterm" name="id358941"></a>
 	When the user elects to make the client a domain member, Windows 200x prompts for
 	an account and password that has privileges to create  machine accounts in the domain.
 	A Samba administrator account (i.e., a Samba account that has <code class="constant">root</code> privileges on the
 	Samba server) must be entered here; the operation will fail if an ordinary user
 	account is given. 
 	</p><p>
-<a class="indexterm" name="id2592773"></a>
-<a class="indexterm" name="id2592780"></a>
+<a class="indexterm" name="id358958"></a>
+<a class="indexterm" name="id358965"></a>
 	For security reasons, the password for this administrator account should be set
 	to a password that is other than that used for the root user in <code class="filename">/etc/passwd</code>.
 	</p><p>
-<a class="indexterm" name="id2592798"></a>
-<a class="indexterm" name="id2592805"></a>
-<a class="indexterm" name="id2592812"></a>
-<a class="indexterm" name="id2592819"></a>
+<a class="indexterm" name="id358982"></a>
+<a class="indexterm" name="id358989"></a>
+<a class="indexterm" name="id358996"></a>
+<a class="indexterm" name="id359002"></a>
 	The name of the account that is used to create domain member machine trust accounts can be
 	anything the network administrator may choose. If it is other than <code class="constant">root</code>,
 	then this is easily mapped to <code class="constant">root</code> in the file named in the <code class="filename">smb.conf</code> parameter
 	<a class="link" href="smb.conf.5.html#USERNAMEMAP">username map = /etc/samba/smbusers</a>.
 	</p><p>
-<a class="indexterm" name="id2592859"></a>
-<a class="indexterm" name="id2592866"></a>
-<a class="indexterm" name="id2592872"></a>
+<a class="indexterm" name="id359039"></a>
+<a class="indexterm" name="id359045"></a>
+<a class="indexterm" name="id359052"></a>
 	The session key of the Samba administrator account acts as an encryption key for setting the password of the machine trust
 	account. The Machine Trust Account will be created on-the-fly, or updated if it already exists.
-	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2592886"></a>Windows NT4 Client</h4></div></div></div><p>
-<a class="indexterm" name="id2592893"></a>
-<a class="indexterm" name="id2592900"></a>
-<a class="indexterm" name="id2592908"></a>
+	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id359063"></a>Windows NT4 Client</h4></div></div></div><p>
+<a class="indexterm" name="id359071"></a>
+<a class="indexterm" name="id359078"></a>
+<a class="indexterm" name="id359084"></a>
 	If the Machine Trust Account was created manually, on the
 	Identification Changes menu enter the domain name, but do not
 	check the box <span class="guilabel">Create a Computer Account in the Domain</span>.
 	In this case, the existing Machine Trust Account is used to join the machine 
 	to the domain.
 	</p><p>
-<a class="indexterm" name="id2592927"></a>
-<a class="indexterm" name="id2592934"></a>
-<a class="indexterm" name="id2592941"></a>
-<a class="indexterm" name="id2592948"></a>
+<a class="indexterm" name="id359103"></a>
+<a class="indexterm" name="id359109"></a>
+<a class="indexterm" name="id359116"></a>
+<a class="indexterm" name="id359123"></a>
 	If the Machine Trust Account is to be created on the fly, on the Identification Changes menu enter the domain
 	name and check the box <span class="guilabel">Create a Computer Account in the Domain</span>. In this case, joining
 	the domain proceeds as above for Windows 2000 (i.e., you must supply a Samba administrator account when
 	prompted).
-	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2592968"></a>Samba Client</h4></div></div></div><p>
-<a class="indexterm" name="id2592976"></a>
+	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id359140"></a>Samba Client</h4></div></div></div><p>
+<a class="indexterm" name="id359148"></a>
 	Joining a Samba client to a domain is documented in <a class="link" href="domain-member.html#domain-member-server" title="Domain Member Server">the next section</a>.
 	</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="domain-member-server"></a>Domain Member Server</h2></div></div></div><p>
-<a class="indexterm" name="id2593008"></a>
-<a class="indexterm" name="id2593014"></a>
-<a class="indexterm" name="id2593021"></a>
-<a class="indexterm" name="id2593028"></a>
+<a class="indexterm" name="id359177"></a>
+<a class="indexterm" name="id359184"></a>
+<a class="indexterm" name="id359190"></a>
+<a class="indexterm" name="id359197"></a>
 This mode of server operation involves the Samba machine being made a member
 of a domain security context. This means by definition that all user
 authentication will be done from a centrally defined authentication regime. 
@@ -387,106 +387,106 @@
 MS Windows 2000 or later.
 </p><p>
 <span class="emphasis"><em>
-<a class="indexterm" name="id2593047"></a>
-<a class="indexterm" name="id2593057"></a>
-<a class="indexterm" name="id2593064"></a>
-<a class="indexterm" name="id2593070"></a>
-<a class="indexterm" name="id2593077"></a>
-<a class="indexterm" name="id2593084"></a>
-<a class="indexterm" name="id2593091"></a>
-<a class="indexterm" name="id2593097"></a>
+<a class="indexterm" name="id359213"></a>
+<a class="indexterm" name="id359222"></a>
+<a class="indexterm" name="id359229"></a>
+<a class="indexterm" name="id359235"></a>
+<a class="indexterm" name="id359242"></a>
+<a class="indexterm" name="id359249"></a>
+<a class="indexterm" name="id359256"></a>
+<a class="indexterm" name="id359262"></a>
 Of course it should be clear that the authentication backend itself could be
 from any distributed directory architecture server that is supported by Samba.
 This can be LDAP (from OpenLDAP), or Sun's iPlanet, or Novell e-Directory
 Server, and so on.
 </em></span>
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2593114"></a>
-<a class="indexterm" name="id2593121"></a>
-<a class="indexterm" name="id2593128"></a>
+<a class="indexterm" name="id359277"></a>
+<a class="indexterm" name="id359284"></a>
+<a class="indexterm" name="id359290"></a>
 When Samba is configured to use an LDAP or other identity management and/or
 directory service, it is Samba that continues to perform user and machine
 authentication. It should be noted that the LDAP server does not perform
 authentication handling in place of what Samba is designed to do.
 </p></div><p>
-<a class="indexterm" name="id2593143"></a>
-<a class="indexterm" name="id2593150"></a>
-<a class="indexterm" name="id2593157"></a>
+<a class="indexterm" name="id359303"></a>
+<a class="indexterm" name="id359310"></a>
+<a class="indexterm" name="id359317"></a>
 Please refer to <a class="link" href="samba-pdc.html" title="Chapter 4. Domain Control">Domain Control</a>, for more information regarding
 how to create a domain machine account for a domain member server as well as for
 information on how to enable the Samba domain member machine to join the domain
 and be fully trusted by it.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2593176"></a>Joining an NT4-type Domain with Samba-3</h3></div></div></div><p><a class="link" href="domain-member.html#assumptions" title="Table 6.1. Assumptions">Assumptions</a> lists names that are used in the remainder of this chapter.</p><div class="table"><a name="assumptions"></a><p class="title"><b>Table 6.1. Assumptions</b></p><div class="table-contents"><table summary="Assumptions" border="1"><colgroup><col align="right"><col align="left"></colgroup><tbody><tr><td align="right">Samba DMS NetBIOS name:</td><td align="left">SERV1</td></tr><tr><td align="right">Windows 200x/NT domain name:</td><td align="left">MIDEARTH</td></tr><tr><td align="right">Domain's PDC NetBIOS name:</td><td align="left">DOMPDC</td></tr><tr><td align="right">Domain's BDC NetBIOS names:</td><td align="left">DOMBDC1 and DOMBDC2</td></tr></tbody></table></div></div><br class="table-break"><p>
-<a class="indexterm" name="id2593261"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id359333"></a>Joining an NT4-type Domain with Samba-3</h3></div></div></div><p><a class="link" href="domain-member.html#assumptions" title="Table 6.1. Assumptions">Assumptions</a> lists names that are used in the remainder of this chapter.</p><div class="table"><a name="assumptions"></a><p class="title"><b>Table 6.1. Assumptions</b></p><div class="table-contents"><table summary="Assumptions" border="1"><colgroup><col align="right"><col align="left"></colgroup><tbody><tr><td align="right">Samba DMS NetBIOS name:</td><td align="left">SERV1</td></tr><tr><td align="right">Windows 200x/NT domain name:</td><td align="left">MIDEARTH</td></tr><tr><td align="right">Domain's PDC NetBIOS name:</td><td align="left">DOMPDC</td></tr><tr><td align="right">Domain's BDC NetBIOS names:</td><td align="left">DOMBDC1 and DOMBDC2</td></tr></tbody></table></div></div><br class="table-break"><p>
+<a class="indexterm" name="id359416"></a>
 First, you must edit your <code class="filename">smb.conf</code> file to tell Samba it should now use domain security.
 </p><p>
-<a class="indexterm" name="id2593277"></a>
-<a class="indexterm" name="id2593284"></a>
-<a class="indexterm" name="id2593291"></a>
-<a class="indexterm" name="id2593298"></a>
+<a class="indexterm" name="id359431"></a>
+<a class="indexterm" name="id359438"></a>
+<a class="indexterm" name="id359445"></a>
+<a class="indexterm" name="id359452"></a>
 Change (or add) your <a class="link" href="smb.conf.5.html#SECURITY">security</a> line in the [global] section 
 of your <code class="filename">smb.conf</code> to read:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2593328"></a><em class="parameter"><code>security = domain</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id359481"></a><em class="parameter"><code>security = domain</code></em></td></tr></table><p>
 Note that if the parameter <em class="parameter"><code>security = user</code></em> is used, this machine would function as a
 standalone server and not as a domain member server. Domain security mode causes Samba to work within the
 domain security context.
 </p><p>
 Next change the <a class="link" href="smb.conf.5.html#WORKGROUP">workgroup</a> line in the <em class="parameter"><code>[global]</code></em>
 section to read: 
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2593376"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id359526"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr></table><p>
 This is the name of the domain we are joining.
 </p><p>
-<a class="indexterm" name="id2593392"></a>
-<a class="indexterm" name="id2593399"></a>
+<a class="indexterm" name="id359541"></a>
+<a class="indexterm" name="id359548"></a>
 You must also have the parameter <a class="link" href="smb.conf.5.html#ENCRYPTPASSWORDS">encrypt passwords</a>
 set to <code class="constant">yes</code> in order for your users to authenticate to the NT PDC.
 This is the default setting if this parameter is not specified. There is no need to specify this
 parameter, but if it is specified in the <code class="filename">smb.conf</code> file, it must be set to <code class="constant">Yes</code>.
 </p><p>
-<a class="indexterm" name="id2593438"></a>
-<a class="indexterm" name="id2593444"></a>
-<a class="indexterm" name="id2593451"></a>
-<a class="indexterm" name="id2593458"></a>
+<a class="indexterm" name="id359584"></a>
+<a class="indexterm" name="id359590"></a>
+<a class="indexterm" name="id359597"></a>
+<a class="indexterm" name="id359604"></a>
 Finally, add (or modify) a <a class="link" href="smb.conf.5.html#PASSWORDSERVER">password server</a> line in the [global]
 section to read: 
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2593482"></a><em class="parameter"><code>password server = DOMPDC DOMBDC1 DOMBDC2</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id359627"></a><em class="parameter"><code>password server = DOMPDC DOMBDC1 DOMBDC2</code></em></td></tr></table><p>
 These are the PDC and BDCs Samba 
 will attempt to contact in order to authenticate users. Samba will 
 try to contact each of these servers in order, so you may want to 
 rearrange this list in order to spread out the authentication load 
 among Domain Controllers.
 </p><p>
-<a class="indexterm" name="id2593502"></a>
-<a class="indexterm" name="id2593509"></a>
-<a class="indexterm" name="id2593516"></a>
-<a class="indexterm" name="id2593523"></a>
+<a class="indexterm" name="id359645"></a>
+<a class="indexterm" name="id359652"></a>
+<a class="indexterm" name="id359658"></a>
+<a class="indexterm" name="id359665"></a>
 Alternatively, if you want smbd to determine automatically the list of domain controllers to use for
 authentication, you may set this line to be:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2593538"></a><em class="parameter"><code>password server = *</code></em></td></tr></table><p>
-<a class="indexterm" name="id2593550"></a>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id359679"></a><em class="parameter"><code>password server = *</code></em></td></tr></table><p>
+<a class="indexterm" name="id359690"></a>
 This method allows Samba to use exactly the same mechanism that NT does. The 
 method either uses broadcast-based name resolution, performs a WINS database
 lookup in order to find a domain controller against which to authenticate,
 or locates the domain controller using DNS name resolution.
 </p><p>
 To join the domain, run this command:
-<a class="indexterm" name="id2593566"></a>
+<a class="indexterm" name="id359703"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>net rpc join -S DOMPDC -U<em class="replaceable"><code>Administrator%password</code></em></code></strong>
 </pre><p>
 </p><p>
-<a class="indexterm" name="id2593599"></a>
-<a class="indexterm" name="id2593606"></a>
-<a class="indexterm" name="id2593612"></a>
-<a class="indexterm" name="id2593619"></a>
+<a class="indexterm" name="id359736"></a>
+<a class="indexterm" name="id359743"></a>
+<a class="indexterm" name="id359749"></a>
+<a class="indexterm" name="id359756"></a>
 If the <code class="option">-S DOMPDC</code> argument is not given, the domain name will be obtained from <code class="filename">smb.conf</code> and
 the NetBIOS name of the PDC will be obtained either using a WINS lookup or via NetBIOS broadcast based name
 look up.
 </p><p>
-<a class="indexterm" name="id2593642"></a>
-<a class="indexterm" name="id2593649"></a>
-<a class="indexterm" name="id2593655"></a>
-<a class="indexterm" name="id2593662"></a>
+<a class="indexterm" name="id359777"></a>
+<a class="indexterm" name="id359784"></a>
+<a class="indexterm" name="id359791"></a>
+<a class="indexterm" name="id359798"></a>
 The machine is joining the domain DOM, and the PDC for that domain (the only machine
 that has write access to the domain SAM database) is DOMPDC; therefore, use the <code class="option">-S</code>
 option. The <em class="replaceable"><code>Administrator%password</code></em> is the login name and
@@ -497,9 +497,9 @@
 <code class="computeroutput">Joined domain DOM.</code>
 </pre><p>
 </p><p>
-<a class="indexterm" name="id2593699"></a>
-<a class="indexterm" name="id2593710"></a>
-<a class="indexterm" name="id2593716"></a>
+<a class="indexterm" name="id359829"></a>
+<a class="indexterm" name="id359840"></a>
+<a class="indexterm" name="id359847"></a>
 Where Active Directory is used, the command used to join the ADS domain is:
 </p><pre class="screen">
 <code class="prompt">root# </code> net ads join -U<em class="replaceable"><code>Administrator%password</code></em>
@@ -512,64 +512,64 @@
 Refer to the <code class="literal">net</code> man page and to <a class="link" href="NetCommand.html" title="Chapter 13. Remote and Local Management: The Net Command">the chapter on remote
 administration</a> for further information.
 </p><p>
-<a class="indexterm" name="id2593774"></a>
-<a class="indexterm" name="id2593780"></a>
-<a class="indexterm" name="id2593788"></a>
+<a class="indexterm" name="id359901"></a>
+<a class="indexterm" name="id359908"></a>
+<a class="indexterm" name="id359915"></a>
 This process joins the server to the domain without separately having to create the machine
 trust account on the PDC beforehand.
 </p><p>
-<a class="indexterm" name="id2593800"></a>
-<a class="indexterm" name="id2593809"></a>
-<a class="indexterm" name="id2593816"></a>
-<a class="indexterm" name="id2593824"></a>
+<a class="indexterm" name="id359926"></a>
+<a class="indexterm" name="id359935"></a>
+<a class="indexterm" name="id359942"></a>
+<a class="indexterm" name="id359949"></a>
 This command goes through the machine account password change protocol, then writes the new (random) machine
 account password for this Samba server into a file in the same directory in which a smbpasswd file would be
 normally stored. The trust account information that is needed by the DMS is written into the file
 <code class="filename">/usr/local/samba/private/secrets.tdb</code> or <code class="filename">/etc/samba/secrets.tdb</code>.
 </p><p>
-<a class="indexterm" name="id2593852"></a>
-<a class="indexterm" name="id2593859"></a>
+<a class="indexterm" name="id359974"></a>
+<a class="indexterm" name="id359980"></a>
 This file is created and owned by root and is not readable by any other user. It is
 the key to the domain-level security for your system and should be treated as carefully 
 as a shadow password file.
 </p><p>
-<a class="indexterm" name="id2593873"></a>
-<a class="indexterm" name="id2593880"></a>
-<a class="indexterm" name="id2593887"></a>
+<a class="indexterm" name="id359992"></a>
+<a class="indexterm" name="id359999"></a>
+<a class="indexterm" name="id360006"></a>
 Finally, restart your Samba daemons and get ready for clients to begin using domain
 security. The way you can restart your Samba daemons depends on your distribution,
 but in most cases the following will suffice:
 </p><pre class="screen">
 <code class="prompt">root# </code>/etc/init.d/samba restart
 </pre><p>
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2593911"></a>Why Is This Better Than <em class="parameter"><code>security = server</code></em>?</h3></div></div></div><p>
-<a class="indexterm" name="id2593925"></a>
-<a class="indexterm" name="id2593932"></a>
-<a class="indexterm" name="id2593939"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id360028"></a>Why Is This Better Than <em class="parameter"><code>security = server</code></em>?</h3></div></div></div><p>
+<a class="indexterm" name="id360042"></a>
+<a class="indexterm" name="id360049"></a>
+<a class="indexterm" name="id360056"></a>
 Currently, domain security in Samba does not free you from having to create local UNIX users to represent the
 users attaching to your server. This means that if domain user <code class="constant">DOM\fred</code> attaches to your
 domain security Samba server, there needs to be a local UNIX user fred to represent that user in the UNIX file
 system. This is similar to the older Samba security mode <a class="link" href="smb.conf.5.html#SECURITY">security = server</a>, where Samba would pass through the authentication request to a Windows
 NT server in the same way as a Windows 95 or Windows 98 server would.
 </p><p>
-<a class="indexterm" name="id2593973"></a>
-<a class="indexterm" name="id2593980"></a>
-<a class="indexterm" name="id2593986"></a>
+<a class="indexterm" name="id360084"></a>
+<a class="indexterm" name="id360091"></a>
+<a class="indexterm" name="id360097"></a>
 Please refer to <a class="link" href="winbind.html" title="Chapter 24. Winbind: Use of Domain Accounts">Winbind: Use of Domain Accounts</a>, for information on a system
 to automatically assign UNIX UIDs and GIDs to Windows NT domain users and groups.
 </p><p>
-<a class="indexterm" name="id2594006"></a>
-<a class="indexterm" name="id2594012"></a>
-<a class="indexterm" name="id2594019"></a>
+<a class="indexterm" name="id360115"></a>
+<a class="indexterm" name="id360122"></a>
+<a class="indexterm" name="id360129"></a>
 The advantage of domain-level security is that the authentication in domain-level security is passed down the
 authenticated RPC channel in exactly the same way that an NT server would do it. This means Samba servers now
 participate in domain trust relationships in exactly the same way NT servers do (i.e., you can add Samba
 servers into a resource domain and have the authentication passed on from a resource domain PDC to an account
 domain PDC).
 </p><p>
-<a class="indexterm" name="id2594037"></a>
-<a class="indexterm" name="id2594044"></a>
-<a class="indexterm" name="id2594050"></a>
+<a class="indexterm" name="id360143"></a>
+<a class="indexterm" name="id360149"></a>
+<a class="indexterm" name="id360156"></a>
 In addition, with <a class="link" href="smb.conf.5.html#SECURITY">security = server</a>, every Samba daemon on a server has to
 keep a connection open to the authenticating server for as long as that daemon lasts. This can drain the
 connection resources on a Microsoft NT server and cause it to run out of available connections. With
@@ -577,10 +577,10 @@
 only for as long as is necessary to authenticate the user and then drop the connection, thus conserving PDC
 connection resources.
 </p><p>
-<a class="indexterm" name="id2594090"></a>
-<a class="indexterm" name="id2594097"></a>
-<a class="indexterm" name="id2594103"></a>
-<a class="indexterm" name="id2594110"></a>
+<a class="indexterm" name="id360191"></a>
+<a class="indexterm" name="id360197"></a>
+<a class="indexterm" name="id360204"></a>
+<a class="indexterm" name="id360210"></a>
 Finally, acting in the same manner as an NT server authenticating to a PDC means that as part of the
 authentication reply, the Samba server gets the user identification information such as the user SID, the list
 of NT groups the user belongs to, and so on.
@@ -589,58 +589,58 @@
 <a class="ulink" href="http://www.linuxworld.com" target="_top"><span class="emphasis"><em>LinuxWorld</em></span></a> as the article <a class="ulink" href="http://www.linuxworld.com/linuxworld/lw-1998-10/lw-10-samba.html" target="_top">http://www.linuxworld.com/linuxworld/lw-1998-10/lw-10-samba.html</a>
 <span class="emphasis"><em>Doing the NIS/NT Samba</em></span>.
 </p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="ads-member"></a>Samba ADS Domain Membership</h2></div></div></div><p>
-<a class="indexterm" name="id2594160"></a>
-<a class="indexterm" name="id2594167"></a>
-<a class="indexterm" name="id2594176"></a>
-<a class="indexterm" name="id2594183"></a>
+<a class="indexterm" name="id360257"></a>
+<a class="indexterm" name="id360263"></a>
+<a class="indexterm" name="id360272"></a>
+<a class="indexterm" name="id360279"></a>
 This is a rough guide to setting up Samba-3 with Kerberos authentication against a
 Windows 200x KDC. A familiarity with Kerberos is assumed.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2594193"></a>Configure <code class="filename">smb.conf</code></h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id360288"></a>Configure <code class="filename">smb.conf</code></h3></div></div></div><p>
 You must use at least the following three options in <code class="filename">smb.conf</code>:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2594219"></a><em class="parameter"><code>realm = your.kerberos.REALM</code></em></td></tr><tr><td><a class="indexterm" name="id2594231"></a><em class="parameter"><code>security = ADS</code></em></td></tr><tr><td># The following parameter need only be specified if present.</td></tr><tr><td># The default setting if not present is Yes.</td></tr><tr><td><a class="indexterm" name="id2594251"></a><em class="parameter"><code>encrypt passwords = yes</code></em></td></tr></table><p>
-<a class="indexterm" name="id2594265"></a>
-<a class="indexterm" name="id2594271"></a>
-<a class="indexterm" name="id2594278"></a>
-<a class="indexterm" name="id2594285"></a>
-<a class="indexterm" name="id2594291"></a>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id360314"></a><em class="parameter"><code>realm = your.kerberos.REALM</code></em></td></tr><tr><td><a class="indexterm" name="id360325"></a><em class="parameter"><code>security = ADS</code></em></td></tr><tr><td># The following parameter need only be specified if present.</td></tr><tr><td># The default setting if not present is Yes.</td></tr><tr><td><a class="indexterm" name="id360344"></a><em class="parameter"><code>encrypt passwords = yes</code></em></td></tr></table><p>
+<a class="indexterm" name="id360358"></a>
+<a class="indexterm" name="id360364"></a>
+<a class="indexterm" name="id360371"></a>
+<a class="indexterm" name="id360378"></a>
+<a class="indexterm" name="id360384"></a>
 In case samba cannot correctly identify the appropriate ADS server using the realm name, use the 
 <a class="link" href="smb.conf.5.html#PASSWORDSERVER">password server</a> option in <code class="filename">smb.conf</code>:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2594323"></a><em class="parameter"><code>password server = your.kerberos.server</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id360414"></a><em class="parameter"><code>password server = your.kerberos.server</code></em></td></tr></table><p>
 The most common reason for which Samba may not be able to locate the ADS domain controller is a consequence of
 sites maintaining some DNS servers on UNIX systems without regard for the DNS requirements of the ADS
 infrastructure. There is no harm in specifying a preferred ADS domain controller using the <em class="parameter"><code>password
 server</code></em>.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2594349"></a>
-<a class="indexterm" name="id2594356"></a>
+<a class="indexterm" name="id360438"></a>
+<a class="indexterm" name="id360445"></a>
 You do <span class="emphasis"><em>not</em></span> need an smbpasswd file, and older clients will be authenticated as 
 if <a class="link" href="smb.conf.5.html#SECURITY">security = domain</a>, although it will not do any harm and 
 allows you to have local users not in the domain.
-</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2594384"></a>Configure <code class="filename">/etc/krb5.conf</code></h3></div></div></div><p>
-<a class="indexterm" name="id2594396"></a>
-<a class="indexterm" name="id2594403"></a>
-<a class="indexterm" name="id2594412"></a>
-<a class="indexterm" name="id2594419"></a>
+</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id360470"></a>Configure <code class="filename">/etc/krb5.conf</code></h3></div></div></div><p>
+<a class="indexterm" name="id360482"></a>
+<a class="indexterm" name="id360489"></a>
+<a class="indexterm" name="id360498"></a>
+<a class="indexterm" name="id360505"></a>
 With both MIT and Heimdal Kerberos, it is unnecessary to configure the <code class="filename">/etc/krb5.conf</code>,
 and it may be detrimental.
 </p><p>
-<a class="indexterm" name="id2594437"></a>
-<a class="indexterm" name="id2594444"></a>
-<a class="indexterm" name="id2594451"></a>
-<a class="indexterm" name="id2594457"></a>
-<a class="indexterm" name="id2594464"></a>
+<a class="indexterm" name="id360522"></a>
+<a class="indexterm" name="id360528"></a>
+<a class="indexterm" name="id360535"></a>
+<a class="indexterm" name="id360542"></a>
+<a class="indexterm" name="id360548"></a>
 Microsoft ADS automatically create SRV records in the DNS zone 
 <em class="parameter"><code>_kerberos._tcp.REALM.NAME</code></em> for each KDC in the realm. This is part
 of the installation and configuration process used to create an Active Directory domain.
 A KDC is a Kerberos Key Distribution Center and forms an integral part of the Microsoft
 active directory infrastructure.
 </p><p>
-<a class="indexterm" name="id2594486"></a>
-<a class="indexterm" name="id2594492"></a>
-<a class="indexterm" name="id2594499"></a>
-<a class="indexterm" name="id2594506"></a>
-<a class="indexterm" name="id2594513"></a>
-<a class="indexterm" name="id2594520"></a>
+<a class="indexterm" name="id360567"></a>
+<a class="indexterm" name="id360574"></a>
+<a class="indexterm" name="id360581"></a>
+<a class="indexterm" name="id360588"></a>
+<a class="indexterm" name="id360594"></a>
+<a class="indexterm" name="id360601"></a>
 UNIX systems can use kinit and the DES-CBC-MD5 or DES-CBC-CRC encryption types to authenticate to the Windows
 2000 KDC. For further information regarding Windows 2000 ADS kerberos interoperability please refer to the
 Microsoft Windows 2000 Kerberos <a class="ulink" href="http://www.microsoft.com/windows2000/techinfo/planning/security/kerbsteps.asp" target="_top">Interoperability</a>
@@ -648,18 +648,18 @@
 interoperability is <a class="ulink" href="http://www.ietf.org/rfc/rfc1510.txt?number=1510" target="_top">RFC1510</a>. This RFC
 explains much of the magic behind the operation of Kerberos.
 </p><p>
-<a class="indexterm" name="id2594551"></a>
-<a class="indexterm" name="id2594558"></a>
-<a class="indexterm" name="id2594565"></a>
-<a class="indexterm" name="id2594571"></a>
-<a class="indexterm" name="id2594578"></a>
-<a class="indexterm" name="id2594585"></a>
+<a class="indexterm" name="id360628"></a>
+<a class="indexterm" name="id360634"></a>
+<a class="indexterm" name="id360641"></a>
+<a class="indexterm" name="id360648"></a>
+<a class="indexterm" name="id360655"></a>
+<a class="indexterm" name="id360662"></a>
 MIT's, as well as Heimdal's, recent KRB5 libraries default to checking for SRV records, so they will 
 automatically find the KDCs. In addition, <code class="filename">krb5.conf</code> only allows specifying 
 a single KDC, even there if there may be more than one. Using the DNS lookup allows the KRB5 
 libraries to use whichever KDCs are available.
 </p><p>
-<a class="indexterm" name="id2594606"></a>
+<a class="indexterm" name="id360680"></a>
 When manually configuring <code class="filename">krb5.conf</code>, the minimal configuration is:
 </p><pre class="screen">
 [libdefaults]
@@ -674,7 +674,7 @@
 	.kerberos.server = YOUR.KERBEROS.REALM
 </pre><p>
 </p><p>
-<a class="indexterm" name="id2594632"></a>
+<a class="indexterm" name="id360704"></a>
 When using Heimdal versions before 0.6, use the following configuration settings:
 </p><pre class="screen">
 [libdefaults]
@@ -691,16 +691,16 @@
         .kerberos.server = YOUR.KERBEROS.REALM
 </pre><p>
 </p><p>
-<a class="indexterm" name="id2594654"></a>
-<a class="indexterm" name="id2594660"></a>
+<a class="indexterm" name="id360722"></a>
+<a class="indexterm" name="id360729"></a>
 Test your config by doing a <strong class="userinput"><code>kinit
 <em class="replaceable"><code>USERNAME</code></em>@<em class="replaceable"><code>REALM</code></em></code></strong> and
 making sure that your password is accepted by the Win2000 KDC.
 </p><p>
-<a class="indexterm" name="id2594684"></a>
-<a class="indexterm" name="id2594691"></a>
-<a class="indexterm" name="id2594697"></a>
-<a class="indexterm" name="id2594704"></a>
+<a class="indexterm" name="id360752"></a>
+<a class="indexterm" name="id360758"></a>
+<a class="indexterm" name="id360765"></a>
+<a class="indexterm" name="id360772"></a>
 With Heimdal versions earlier than 0.6.x you can use only newly created accounts
 in ADS or accounts that have had the password changed once after migration, or
 in case of <code class="constant">Administrator</code> after installation. At the
@@ -708,50 +708,50 @@
 (and no default etypes in krb5.conf). Unfortunately, this whole area is still
 in a state of flux.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2594725"></a>
-<a class="indexterm" name="id2594732"></a>
-<a class="indexterm" name="id2594739"></a>
+<a class="indexterm" name="id360790"></a>
+<a class="indexterm" name="id360796"></a>
+<a class="indexterm" name="id360803"></a>
 The realm must be in uppercase or you will get a &#8220;<span class="quote"><span class="errorname">Cannot find KDC for
 requested realm while getting initial credentials</span></span>&#8221; error (Kerberos
 is case-sensitive!).
 </p></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2594756"></a>
-<a class="indexterm" name="id2594763"></a>
-<a class="indexterm" name="id2594770"></a>
-<a class="indexterm" name="id2594777"></a>
+<a class="indexterm" name="id360820"></a>
+<a class="indexterm" name="id360827"></a>
+<a class="indexterm" name="id360833"></a>
+<a class="indexterm" name="id360840"></a>
 Time between the two servers must be synchronized. You will get a &#8220;<span class="quote"><span class="errorname">kinit(v5): Clock skew too
 great while getting initial credentials</span></span>&#8221; if the time difference (clock skew) is more than five minutes.
 </p></div><p>
-<a class="indexterm" name="id2594795"></a>
-<a class="indexterm" name="id2594802"></a>
+<a class="indexterm" name="id360856"></a>
+<a class="indexterm" name="id360863"></a>
 Clock skew limits are configurable in the Kerberos protocols. The default setting is five minutes.
 </p><p>
-<a class="indexterm" name="id2594813"></a>
-<a class="indexterm" name="id2594820"></a>
-<a class="indexterm" name="id2594826"></a>
-<a class="indexterm" name="id2594833"></a>
+<a class="indexterm" name="id360874"></a>
+<a class="indexterm" name="id360881"></a>
+<a class="indexterm" name="id360887"></a>
+<a class="indexterm" name="id360894"></a>
 You also must ensure that you can do a reverse DNS lookup on the IP address of your KDC. Also, the name that
 this reverse lookup maps to must either be the NetBIOS name of the KDC (i.e., the hostname with no domain
 attached) or it can be the NetBIOS name followed by the realm.
 </p><p>
-<a class="indexterm" name="id2594848"></a>
-<a class="indexterm" name="id2594855"></a>
-<a class="indexterm" name="id2594861"></a>
+<a class="indexterm" name="id360906"></a>
+<a class="indexterm" name="id360913"></a>
+<a class="indexterm" name="id360920"></a>
 The easiest way to ensure you get this right is to add a <code class="filename">/etc/hosts</code> entry mapping the IP
 address of your KDC to its NetBIOS name. If you do not get this correct, then you will get a <span class="errorname">local
 error</span> when you try to join the realm.
 </p><p>
-<a class="indexterm" name="id2594884"></a>
-<a class="indexterm" name="id2594891"></a>
-<a class="indexterm" name="id2594898"></a>
-<a class="indexterm" name="id2594905"></a>
+<a class="indexterm" name="id360941"></a>
+<a class="indexterm" name="id360948"></a>
+<a class="indexterm" name="id360955"></a>
+<a class="indexterm" name="id360962"></a>
 If all you want is Kerberos support in <span class="application">smbclient</span>, then you can skip directly to <a class="link" href="domain-member.html#ads-test-smbclient" title="Testing with smbclient">Testing with <span class="application">smbclient</span></a> now.  <a class="link" href="domain-member.html#ads-create-machine-account" title="Create the Computer Account">Create the Computer Account</a> and <a class="link" href="domain-member.html#ads-test-server" title="Testing Server Setup">Testing Server Setup</a> are needed only if you want Kerberos support for <span class="application">smbd</span>
 and <span class="application">winbindd</span>.
 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="ads-create-machine-account"></a>Create the Computer Account</h3></div></div></div><p>
-<a class="indexterm" name="id2594977"></a>
-<a class="indexterm" name="id2594983"></a>
-<a class="indexterm" name="id2594990"></a>
-<a class="indexterm" name="id2594997"></a>
+<a class="indexterm" name="id361027"></a>
+<a class="indexterm" name="id361034"></a>
+<a class="indexterm" name="id361041"></a>
+<a class="indexterm" name="id361048"></a>
 As a user who has write permission on the Samba private directory (usually root), run:
 </p><pre class="screen">
 <code class="prompt">root# </code> <strong class="userinput"><code>net ads join -U Administrator%password</code></strong>
@@ -760,12 +760,12 @@
 permission to add machines to the ADS domain. It is, of course, a good idea to use an account other than Administrator.
 On the UNIX/Linux system, this command must be executed by an account that has UID=0 (root).
 </p><p>
-<a class="indexterm" name="id2595032"></a>
-<a class="indexterm" name="id2595038"></a>
-<a class="indexterm" name="id2595045"></a>
-<a class="indexterm" name="id2595052"></a>
-<a class="indexterm" name="id2595059"></a>
-<a class="indexterm" name="id2595066"></a>
+<a class="indexterm" name="id361078"></a>
+<a class="indexterm" name="id361085"></a>
+<a class="indexterm" name="id361092"></a>
+<a class="indexterm" name="id361098"></a>
+<a class="indexterm" name="id361105"></a>
+<a class="indexterm" name="id361112"></a>
 When making a Windows client a member of an ADS domain within a complex organization, you
 may want to create the machine trust account within a particular organizational unit. Samba-3 permits
 this to be done using the following syntax:
@@ -775,10 +775,10 @@
 </pre><p>
 Your ADS manager will be able to advise what should be specified for the "organizational_unit" parameter.
 </p><p>
-<a class="indexterm" name="id2595116"></a>
-<a class="indexterm" name="id2595123"></a>
-<a class="indexterm" name="id2595130"></a>
-<a class="indexterm" name="id2595137"></a>
+<a class="indexterm" name="id361158"></a>
+<a class="indexterm" name="id361165"></a>
+<a class="indexterm" name="id361172"></a>
+<a class="indexterm" name="id361179"></a>
 For example, you may want to create the machine trust account in a container called &#8220;<span class="quote">Servers</span>&#8221;
 under the organizational directory &#8220;<span class="quote">Computers/BusinessUnit/Department,</span>&#8221; like this:
 </p><pre class="screen">
@@ -789,90 +789,90 @@
 before executing this command.  Please note that forward slashes must be used, because backslashes are both
 valid characters in an OU name and used as escapes for other characters.  If you need a backslash in an OU 
 name, it may need to be quadrupled to pass through the shell escape and ldap escape.
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2595186"></a>Possible Errors</h4></div></div></div><p>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id361222"></a>Possible Errors</h4></div></div></div><p>
 </p><div class="variablelist"><dl><dt><span class="term"><span class="errorname">ADS support not compiled in</span></span></dt><dd><p>
-	<a class="indexterm" name="id2595205"></a>
-	<a class="indexterm" name="id2595212"></a>
-	<a class="indexterm" name="id2595219"></a>
+	<a class="indexterm" name="id361241"></a>
+	<a class="indexterm" name="id361248"></a>
+	<a class="indexterm" name="id361255"></a>
 	Samba must be reconfigured (remove config.cache) and recompiled (make clean all install) after the
 	Kerberos libraries and headers files are installed.
 	</p></dd><dt><span class="term"><span class="errorname">net ads join prompts for user name</span></span></dt><dd><p>
-	<a class="indexterm" name="id2595239"></a>
-	<a class="indexterm" name="id2595246"></a>
+	<a class="indexterm" name="id361273"></a>
+	<a class="indexterm" name="id361280"></a>
 	You need to log in to the domain using <strong class="userinput"><code>kinit
 	<em class="replaceable"><code>USERNAME</code></em>@<em class="replaceable"><code>REALM</code></em></code></strong>.
 	<em class="replaceable"><code>USERNAME</code></em> must be a user who has rights to add a machine to the domain.
 	</p></dd><dt><span class="term">Unsupported encryption/or checksum types</span></dt><dd><p>
-	<a class="indexterm" name="id2595279"></a>
-	<a class="indexterm" name="id2595286"></a>
-	<a class="indexterm" name="id2595293"></a>
+	<a class="indexterm" name="id361312"></a>
+	<a class="indexterm" name="id361319"></a>
+	<a class="indexterm" name="id361325"></a>
 	Make sure that the <code class="filename">/etc/krb5.conf</code> is correctly configured
 	for the type and version of Kerberos installed on the system.
 	</p></dd></dl></div><p>
 </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="ads-test-server"></a>Testing Server Setup</h3></div></div></div><p>
-<a class="indexterm" name="id2595325"></a>
-<a class="indexterm" name="id2595331"></a>
-<a class="indexterm" name="id2595338"></a>
+<a class="indexterm" name="id361355"></a>
+<a class="indexterm" name="id361362"></a>
+<a class="indexterm" name="id361369"></a>
 If the join was successful, you will see a new computer account with the
 NetBIOS name of your Samba server in Active Directory (in the &#8220;<span class="quote">Computers</span>&#8221;
 folder under Users and Computers.
 </p><p>
-<a class="indexterm" name="id2595354"></a>
-<a class="indexterm" name="id2595361"></a>
-<a class="indexterm" name="id2595370"></a>
+<a class="indexterm" name="id361384"></a>
+<a class="indexterm" name="id361391"></a>
+<a class="indexterm" name="id361400"></a>
 On a Windows 2000 client, try <strong class="userinput"><code>net use * \\server\share</code></strong>. You should
 be logged in with Kerberos without needing to know a password. If this fails, then run
 <strong class="userinput"><code>klist tickets</code></strong>. Did you get a ticket for the server? Does it have
 an encryption type of DES-CBC-MD5? 
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2595398"></a>
-<a class="indexterm" name="id2595404"></a>
-<a class="indexterm" name="id2595411"></a>
+<a class="indexterm" name="id361424"></a>
+<a class="indexterm" name="id361431"></a>
+<a class="indexterm" name="id361438"></a>
 Samba can use both DES-CBC-MD5 encryption as well as ARCFOUR-HMAC-MD5 encoding.
 </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="ads-test-smbclient"></a>Testing with <span class="application">smbclient</span></h3></div></div></div><p>
-<a class="indexterm" name="id2595438"></a>
-<a class="indexterm" name="id2595445"></a>
-<a class="indexterm" name="id2595452"></a>
+<a class="indexterm" name="id361463"></a>
+<a class="indexterm" name="id361470"></a>
+<a class="indexterm" name="id361477"></a>
 On your Samba server try to log in to a Windows 2000 server or your Samba
 server using <span class="application">smbclient</span> and Kerberos. Use <span class="application">smbclient</span> as usual, but
 specify the <code class="option">-k</code> option to choose Kerberos authentication.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2595479"></a>Notes</h3></div></div></div><p>
-<a class="indexterm" name="id2595487"></a>
-<a class="indexterm" name="id2595494"></a>
-<a class="indexterm" name="id2595501"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id361503"></a>Notes</h3></div></div></div><p>
+<a class="indexterm" name="id361510"></a>
+<a class="indexterm" name="id361517"></a>
+<a class="indexterm" name="id361524"></a>
 You must change the administrator password at least once after installing a domain controller, 
 to create the right encryption types.
 </p><p>
-<a class="indexterm" name="id2595513"></a>
-<a class="indexterm" name="id2595520"></a>
-<a class="indexterm" name="id2595527"></a>
+<a class="indexterm" name="id361535"></a>
+<a class="indexterm" name="id361542"></a>
+<a class="indexterm" name="id361549"></a>
 Windows 200x does not seem to create the <em class="parameter"><code>_kerberos._udp</code></em> and
 <em class="parameter"><code>_ldap._tcp</code></em> in the default DNS setup. Perhaps this will be fixed later in service packs.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2595551"></a>Sharing User ID Mappings between Samba Domain Members</h2></div></div></div><p>
-<a class="indexterm" name="id2595560"></a>
-<a class="indexterm" name="id2595567"></a>
-<a class="indexterm" name="id2595573"></a>
-<a class="indexterm" name="id2595580"></a>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id361572"></a>Sharing User ID Mappings between Samba Domain Members</h2></div></div></div><p>
+<a class="indexterm" name="id361580"></a>
+<a class="indexterm" name="id361587"></a>
+<a class="indexterm" name="id361593"></a>
+<a class="indexterm" name="id361600"></a>
 Samba maps UNIX users and groups (identified by UIDs and GIDs) to Windows users and groups (identified by SIDs).
 These mappings are done by the <em class="parameter"><code>idmap</code></em> subsystem of Samba.
 </p><p>
-<a class="indexterm" name="id2595598"></a>
-<a class="indexterm" name="id2595605"></a>
-<a class="indexterm" name="id2595612"></a>
+<a class="indexterm" name="id361617"></a>
+<a class="indexterm" name="id361624"></a>
+<a class="indexterm" name="id361630"></a>
 In some cases it is useful to share these mappings between Samba domain members,
 so <span class="emphasis"><em>name-&gt;id</em></span> mapping is identical on all machines.
 This may be needed in particular when sharing files over both CIFS and NFS.
 </p><p>
-<a class="indexterm" name="id2595629"></a>
-<a class="indexterm" name="id2595636"></a>
+<a class="indexterm" name="id361646"></a>
+<a class="indexterm" name="id361653"></a>
 To use the <span class="emphasis"><em>LDAP</em></span> <em class="parameter"><code>ldap idmap suffix</code></em>, set:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2595660"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id361676"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr></table><p>
 See the <code class="filename">smb.conf</code> man page entry for the <a class="link" href="smb.conf.5.html#LDAPIDMAPSUFFIX">ldap idmap suffix</a>
 parameter for further information.
 </p><p>
-<a class="indexterm" name="id2595696"></a>
-<a class="indexterm" name="id2595702"></a>
-<a class="indexterm" name="id2595709"></a>
+<a class="indexterm" name="id361710"></a>
+<a class="indexterm" name="id361716"></a>
+<a class="indexterm" name="id361723"></a>
 Do not forget to specify also the <a class="link" href="smb.conf.5.html#LDAPADMINDN">ldap admin dn</a>
 and to make certain to set the LDAP administrative password into the <code class="filename">secrets.tdb</code> using:
 </p><pre class="screen">
@@ -880,9 +880,9 @@
 </pre><p>
 In place of <code class="literal">ldap-admin-password</code>, substitute the LDAP administration password for your
 system.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2595757"></a>Common Errors</h2></div></div></div><p>
-<a class="indexterm" name="id2595765"></a>
-<a class="indexterm" name="id2595772"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id361768"></a>Common Errors</h2></div></div></div><p>
+<a class="indexterm" name="id361776"></a>
+<a class="indexterm" name="id361782"></a>
 In the process of adding/deleting/re-adding domain member machine trust accounts, there are
 many traps for the unwary player and many &#8220;<span class="quote">little</span>&#8221; things that can go wrong.
 It is particularly interesting how often subscribers on the Samba mailing list have concluded
@@ -890,16 +890,16 @@
 MS Windows on the machine. In truth, it is seldom necessary to reinstall because of this type
 of problem. The real solution is often quite simple, and with an understanding of how MS Windows
 networking functions, it is easy to overcome.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2595797"></a>Cannot Add Machine Back to Domain</h3></div></div></div><p>
-<a class="indexterm" name="id2595805"></a>
-<a class="indexterm" name="id2595812"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id361802"></a>Cannot Add Machine Back to Domain</h3></div></div></div><p>
+<a class="indexterm" name="id361810"></a>
+<a class="indexterm" name="id361817"></a>
 &#8220;<span class="quote">A Windows workstation was reinstalled. The original domain machine trust
 account was deleted and added immediately. The workstation will not join the domain if I use 
 the same machine name. Attempts to add the machine fail with a message that the machine already
 exists on the network  I know it does not. Why is this failing?</span>&#8221;
 </p><p>
-<a class="indexterm" name="id2595834"></a>
-<a class="indexterm" name="id2595840"></a>
+<a class="indexterm" name="id361836"></a>
+<a class="indexterm" name="id361843"></a>
 The original name is still in the NetBIOS name cache and must expire after machine account
 deletion before adding that same name as a domain member again. The best advice is to delete
 the old account and then add the machine with a new name. Alternately, the name cache can be flushed and
@@ -907,14 +907,14 @@
 </p><pre class="screen">
 <code class="prompt">C:\&gt; </code> nbtstat -R
 </pre><p>
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2595873"></a>Adding Machine to Domain Fails</h3></div></div></div><p>
-<a class="indexterm" name="id2595881"></a>
-<a class="indexterm" name="id2595887"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id361872"></a>Adding Machine to Domain Fails</h3></div></div></div><p>
+<a class="indexterm" name="id361880"></a>
+<a class="indexterm" name="id361886"></a>
 &#8220;<span class="quote">Adding a Windows 200x or XP Professional machine to the Samba PDC Domain fails with a
 message that says, <span class="errorname">"The machine could not be added at this time, there is a network problem.
 Please try again later."</span> Why?</span>&#8221;
 </p><p>
-<a class="indexterm" name="id2595908"></a>
+<a class="indexterm" name="id361905"></a>
 You should check that there is an <a class="link" href="smb.conf.5.html#ADDMACHINESCRIPT">add machine script</a> in your <code class="filename">smb.conf</code>
 file. If there is not, please add one that is appropriate for your OS platform. If a script
 has been defined, you will need to debug its operation. Increase the <a class="link" href="smb.conf.5.html#LOGLEVEL">log level</a>
@@ -923,38 +923,38 @@
 </p><p>
 Possible causes include:
 </p><div class="itemizedlist"><ul type="disc"><li><p>
-<a class="indexterm" name="id2595966"></a>
-<a class="indexterm" name="id2595972"></a>
+<a class="indexterm" name="id361958"></a>
+<a class="indexterm" name="id361965"></a>
 	The script does not actually exist, or could not be located in the path specified.
 	</p><p>
-<a class="indexterm" name="id2595984"></a>
-<a class="indexterm" name="id2595991"></a>
+<a class="indexterm" name="id361976"></a>
+<a class="indexterm" name="id361983"></a>
 	<span class="emphasis"><em>Corrective action:</em></span> Fix it. Make sure when run manually
 	that the script will add both the UNIX system account and the Samba SAM account.
 	</p></li><li><p>
-<a class="indexterm" name="id2596008"></a>
-<a class="indexterm" name="id2596015"></a>
+<a class="indexterm" name="id361998"></a>
+<a class="indexterm" name="id362005"></a>
 	The machine could not be added to the UNIX system accounts file <code class="filename">/etc/passwd</code>.
 	</p><p>
-<a class="indexterm" name="id2596032"></a>
-<a class="indexterm" name="id2596039"></a>
+<a class="indexterm" name="id362022"></a>
+<a class="indexterm" name="id362029"></a>
 	<span class="emphasis"><em>Corrective action:</em></span> Check that the machine name is a legal UNIX
 	system account name. If the UNIX utility <code class="literal">useradd</code> is called,
 	then make sure that the machine name you are trying to add can be added using this
 	tool. <code class="literal">Useradd</code> on some systems will not allow any uppercase characters
 	nor will it allow spaces in the name.
 	</p></li></ul></div><p>
-<a class="indexterm" name="id2596070"></a>
-<a class="indexterm" name="id2596077"></a>
-<a class="indexterm" name="id2596084"></a>
+<a class="indexterm" name="id362057"></a>
+<a class="indexterm" name="id362064"></a>
+<a class="indexterm" name="id362071"></a>
 The <a class="link" href="smb.conf.5.html#ADDMACHINESCRIPT">add machine script</a> does not create the
 machine account in the Samba backend database; it is there only to create a UNIX system
 account to which the Samba backend database account can be mapped.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2596109"></a>I Can't Join a Windows 2003 PDC</h3></div></div></div><p>
-<a class="indexterm" name="id2596117"></a>
-<a class="indexterm" name="id2596123"></a>
-<a class="indexterm" name="id2596130"></a>
-<a class="indexterm" name="id2596136"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id362092"></a>I Can't Join a Windows 2003 PDC</h3></div></div></div><p>
+<a class="indexterm" name="id362100"></a>
+<a class="indexterm" name="id362107"></a>
+<a class="indexterm" name="id362113"></a>
+<a class="indexterm" name="id362120"></a>
 	Windows 2003 requires SMB signing. Client-side SMB signing has been implemented in Samba-3.0.
 	Set <a class="link" href="smb.conf.5.html#CLIENTUSESPNEGO">client use spnego = yes</a> when communicating 
 	with a Windows 2003 server. This will not interfere with other Windows clients that do not

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/go01.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/go01.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/go01.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Glossary</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="apa.html" title="Appendix A.  GNU General Public License version 3"><link rel="next" href="ix01.html" title="Index"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Glossary</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="apa.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ix01.html">Next</a></td></tr></table><hr></div><div class="glossary"><div class="titlepage"><div><div><h2 class="title"><a name="id2716719"></a>Glossary</h2></div></div></div><dl><dt>Access Control List</dt><dd><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Glossary</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="apa.html" title="Appendix A.  GNU General Public License version 3"><link rel="next" href="ix01.html" title="Index"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Glossary</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="apa.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ix01.html">Next</a></td></tr></table><hr></div><div class="glossary"><div class="titlepage"><div><div><h2 class="title"><a name="id472643"></a>Glossary</h2></div></div></div><dl><dt>Access Control List</dt><dd><p>
 		A detailed list of permissions granted to users or groups with respect to file and network resource access.
 		 See <a class="link" href="AccessControls.html" title="Chapter 16. File, Directory, and Share Access Controls">&#8220;File, Directory, and Share Access Controls&#8221;</a>, 
 		for details.</p></dd><dt>Active Directory Service</dt><dd><p>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/groupmapping.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/groupmapping.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/groupmapping.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,38 +1,38 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 12. Group Mapping: MS Windows and UNIX</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="passdb.html" title="Chapter 11. Account Information Databases"><link rel="next" href="NetCommand.html" title="Chapter 13. Remote and Local Management: The Net Command"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 12. Group Mapping: MS Windows and UNIX</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="passdb.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="NetCommand.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="groupmapping"></a>Chapter 12. Group Mapping: MS Windows and UNIX</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jean François</span> <span class="surname">Micouleau</span></h3></div></div><div><div class="author"><h3 class="author"><span class="firstname">Gerald</span> <span class="othername">(Jerry)</span> <span class="surname">Carter</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jerry at samba.org">jerry at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="groupmapping.html#id2617939">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="groupmapping.html#id2618354">Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="groupmapping.html#id2618690">Warning: User Private Group Problems</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id2619324">Important Administrative Information</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id2619564">Default Users, Groups, and Relative Identifiers</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id2620187">Example Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="groupmapping.html#id2620264">Configuration Scripts</a></span></dt><dd><dl><dt><span class="sect2"><a href="groupmapping.html#id2620275">Sample <code class="filename">smb.conf</code> Add Group Script</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id2620447">Script to Configure Group Mapping</a></span></dt></dl></dd><dt><span class="sect1"><a href="groupmapping.html#id2620574">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="groupmapping.html#id2620587">Adding Groups Fails</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id2620674">Adding Domain Users to the Workstation Power Users Group</a></span></dt></dl></dd></dl></div><p>
-<a class="indexterm" name="id2617813"></a>
-<a class="indexterm" name="id2617822"></a>
-<a class="indexterm" name="id2617829"></a>
-<a class="indexterm" name="id2617836"></a>
-<a class="indexterm" name="id2617842"></a>
-<a class="indexterm" name="id2617849"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 12. Group Mapping: MS Windows and UNIX</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="passdb.html" title="Chapter 11. Account Information Databases"><link rel="next" href="NetCommand.html" title="Chapter 13. Remote and Local Management: The Net Command"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 12. Group Mapping: MS Windows and UNIX</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="passdb.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="NetCommand.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="groupmapping"></a>Chapter 12. Group Mapping: MS Windows and UNIX</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jean François</span> <span class="surname">Micouleau</span></h3></div></div><div><div class="author"><h3 class="author"><span class="firstname">Gerald</span> <span class="othername">(Jerry)</span> <span class="surname">Carter</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jerry at samba.org">jerry at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="groupmapping.html#id382442">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="groupmapping.html#id382834">Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="groupmapping.html#id383149">Warning: User Private Group Problems</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id383730">Important Administrative Information</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id383950">Default Users, Groups, and Relative Identifiers</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id384556">Example Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="groupmapping.html#id384627">Configuration Scripts</a></span></dt><dd><dl><dt><span class="sect2"><a href="groupmapping.html#id384638">Sample <code class="filename">smb.conf</code> Add Group Script</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id384798">Script to Configure Group Mapping</a></span></dt></dl></dd><dt><span class="sect1"><a href="groupmapping.html#id384912">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="groupmapping.html#id384922">Adding Groups Fails</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id385002">Adding Domain Users to the Workstation Power Users Group</a></span></dt></dl></dd></dl></div><p>
+<a class="indexterm" name="id382324"></a>
+<a class="indexterm" name="id382333"></a>
+<a class="indexterm" name="id382339"></a>
+<a class="indexterm" name="id382346"></a>
+<a class="indexterm" name="id382353"></a>
+<a class="indexterm" name="id382360"></a>
 	Starting with Samba-3, new group mapping functionality is available to create associations
 	between Windows group SIDs and UNIX group GIDs. The <code class="literal">groupmap</code> subcommand
 	included with the <span class="application">net</span> tool can be used to manage these associations.
 	</p><p>
-<a class="indexterm" name="id2617874"></a>
-<a class="indexterm" name="id2617881"></a>
+<a class="indexterm" name="id382383"></a>
+<a class="indexterm" name="id382390"></a>
 	The new facility for mapping NT groups to UNIX system groups allows the administrator to decide
 	which NT domain groups are to be exposed to MS Windows clients. Only those NT groups that map
 	to a UNIX group that has a value other than the default (<code class="constant">-1</code>) will be exposed
 	in group selection lists in tools that access domain users and groups.
 	</p><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p>
-	<a class="indexterm" name="id2617903"></a>
-<a class="indexterm" name="id2617910"></a>
+	<a class="indexterm" name="id382408"></a>
+<a class="indexterm" name="id382415"></a>
 	The <em class="parameter"><code>domain admin group</code></em> parameter has been removed in Samba-3 and should no longer
 	be specified in <code class="filename">smb.conf</code>. In Samba-2.2.x, this parameter was used to give the listed users membership in the
 	<code class="constant">Domain Admins</code> Windows group, which gave local admin rights on their workstations
 	(in default configurations).
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2617939"></a>Features and Benefits</h2></div></div></div><p>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id382442"></a>Features and Benefits</h2></div></div></div><p>
 	Samba allows the administrator to create MS Windows NT4/200x group accounts and to
 	arbitrarily associate them with UNIX/Linux group accounts.
 	</p><p>
-	<a class="indexterm" name="id2617953"></a>
-	<a class="indexterm" name="id2617959"></a>
-	<a class="indexterm" name="id2617966"></a>
-<a class="indexterm" name="id2617972"></a>
-<a class="indexterm" name="id2617979"></a>
-<a class="indexterm" name="id2617986"></a>
-<a class="indexterm" name="id2617993"></a>
+	<a class="indexterm" name="id382454"></a>
+	<a class="indexterm" name="id382460"></a>
+	<a class="indexterm" name="id382467"></a>
+<a class="indexterm" name="id382474"></a>
+<a class="indexterm" name="id382480"></a>
+<a class="indexterm" name="id382487"></a>
+<a class="indexterm" name="id382494"></a>
 	Group accounts can be managed using the MS Windows NT4 or MS Windows 200x/XP Professional MMC tools.
 	Appropriate interface scripts should be provided in <code class="filename">smb.conf</code> if it is desired that UNIX/Linux system
 	accounts should be automatically created when these tools are used. In the absence of these scripts, and
@@ -41,19 +41,19 @@
 	<a class="link" href="smb.conf.5.html#IDMAPUID">idmap uid</a>/<a class="link" href="smb.conf.5.html#IDMAPGID">idmap gid</a>
 	parameters in the <code class="filename">smb.conf</code> file.
 	</p><div class="figure"><a name="idmap-sid2gid"></a><p class="title"><b>Figure 12.1. IDMAP: Group SID-to-GID Resolution.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/idmap-sid2gid.png" width="270" alt="IDMAP: Group SID-to-GID Resolution."></div></div></div><br class="figure-break"><div class="figure"><a name="idmap-gid2sid"></a><p class="title"><b>Figure 12.2. IDMAP: GID Resolution to Matching SID.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/idmap-gid2sid.png" width="270" alt="IDMAP: GID Resolution to Matching SID."></div></div></div><br class="figure-break"><p>
-	<a class="indexterm" name="id2618135"></a>
-<a class="indexterm" name="id2618142"></a>
-<a class="indexterm" name="id2618148"></a>
-<a class="indexterm" name="id2618157"></a>
+	<a class="indexterm" name="id382629"></a>
+<a class="indexterm" name="id382636"></a>
+<a class="indexterm" name="id382643"></a>
+<a class="indexterm" name="id382652"></a>
 	In both cases, when winbindd is not running, only locally resolvable groups can be recognized. Please refer to
 	<a class="link" href="groupmapping.html#idmap-sid2gid" title="Figure 12.1. IDMAP: Group SID-to-GID Resolution.">IDMAP: Group SID-to-GID Resolution</a> and <a class="link" href="groupmapping.html#idmap-gid2sid" title="Figure 12.2. IDMAP: GID Resolution to Matching SID.">IDMAP: GID Resolution to Matching SID</a>.  The <code class="literal">net groupmap</code> is
 	used to establish UNIX group to NT SID mappings as shown in <a class="link" href="groupmapping.html#idmap-store-gid2sid" title="Figure 12.3. IDMAP Storing Group Mappings.">IDMAP: storing
 	group mappings</a>.
 	</p><div class="figure"><a name="idmap-store-gid2sid"></a><p class="title"><b>Figure 12.3. IDMAP Storing Group Mappings.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/idmap-store-gid2sid.png" width="270" alt="IDMAP Storing Group Mappings."></div></div></div><br class="figure-break"><p>
-	<a class="indexterm" name="id2618243"></a>
-	<a class="indexterm" name="id2618250"></a>
-<a class="indexterm" name="id2618257"></a>
-<a class="indexterm" name="id2618264"></a>
+	<a class="indexterm" name="id382733"></a>
+	<a class="indexterm" name="id382739"></a>
+<a class="indexterm" name="id382746"></a>
+<a class="indexterm" name="id382753"></a>
 	Administrators should be aware that where <code class="filename">smb.conf</code> group interface scripts make
 	direct calls to the UNIX/Linux system tools (the shadow utilities, <code class="literal">groupadd</code>,
 	<code class="literal">groupdel</code>, and <code class="literal">groupmod</code>), the resulting UNIX/Linux group names will be subject
@@ -62,48 +62,48 @@
 	<code class="literal">Engineering Managers</code> will attempt to create an identically named
 	UNIX/Linux group, an attempt that will of course fail.
 	</p><p>
-	<a class="indexterm" name="id2618311"></a>
-	<a class="indexterm" name="id2618318"></a>
+	<a class="indexterm" name="id382796"></a>
+	<a class="indexterm" name="id382803"></a>
 	There are several possible workarounds for the operating system tools limitation. One
 	method is to use a script that generates a name for the UNIX/Linux system group that
 	fits the operating system limits and that then just passes the UNIX/Linux group ID (GID)
 	back to the calling Samba interface. This will provide a dynamic workaround solution.
 	</p><p>
-<a class="indexterm" name="id2618333"></a>
+<a class="indexterm" name="id382816"></a>
 	Another workaround is to manually create a UNIX/Linux group, then manually create the
 	MS Windows NT4/200x group on the Samba server, and then use the <code class="literal">net groupmap</code>
 	tool to connect the two to each other.
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2618354"></a>Discussion</h2></div></div></div><p>
-<a class="indexterm" name="id2618362"></a>
-<a class="indexterm" name="id2618368"></a>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id382834"></a>Discussion</h2></div></div></div><p>
+<a class="indexterm" name="id382842"></a>
+<a class="indexterm" name="id382849"></a>
 	When you install <span class="application">MS Windows NT4/200x</span> on a computer, the installation
 	program creates default users and groups, notably the <code class="constant">Administrators</code> group,
 	and gives that group privileges necessary to perform essential system tasks,
 	such as the ability to change the date and time or to kill (or close) any process running on the
 	local machine.
 	</p><p>
-	<a class="indexterm" name="id2618394"></a>
+	<a class="indexterm" name="id382871"></a>
 	The <code class="constant">Administrator</code> user is a member of the <code class="constant">Administrators</code> group, and thus inherits
 	<code class="constant">Administrators</code> group privileges. If a <code class="constant">joe</code> user is created to be a member of the
 	<code class="constant">Administrators</code> group, <code class="constant">joe</code> has exactly the same rights as the user
 	<code class="constant">Administrator</code>.
 	</p><p>
-<a class="indexterm" name="id2618432"></a>
-<a class="indexterm" name="id2618439"></a>
-<a class="indexterm" name="id2618446"></a>
-<a class="indexterm" name="id2618453"></a>
+<a class="indexterm" name="id382908"></a>
+<a class="indexterm" name="id382915"></a>
+<a class="indexterm" name="id382921"></a>
+<a class="indexterm" name="id382928"></a>
 	When an MS Windows NT4/200x/XP machine is made a domain member, the &#8220;<span class="quote">Domain Admins</span>&#8221; group of the
 	PDC is added to the local <code class="constant">Administrators</code> group of the workstation. Every member of the
 	<code class="constant">Domain Admins</code> group inherits the rights of the local <code class="constant">Administrators</code> group when
 	logging on the workstation.
 	</p><p>
-<a class="indexterm" name="id2618481"></a>
-<a class="indexterm" name="id2618488"></a>
+<a class="indexterm" name="id382955"></a>
+<a class="indexterm" name="id382961"></a>
 	The following steps describe how to make Samba PDC users members of the <code class="constant">Domain Admins</code> group.
 	</p><div class="orderedlist"><ol type="1"><li><p>
 		Create a UNIX group (usually in <code class="filename">/etc/group</code>); let's call it <code class="constant">domadm</code>.
 		</p></li><li><p>
-<a class="indexterm" name="id2618526"></a>
+<a class="indexterm" name="id382998"></a>
 		Add to this group the users that must be &#8220;<span class="quote">Administrators</span>&#8221;. For example,
 		if you want <code class="constant">joe, john</code>, and <code class="constant">mary</code> to be administrators,
 		your entry in <code class="filename">/etc/group</code> will look like this:
@@ -117,13 +117,13 @@
 <code class="prompt">root# </code><strong class="userinput"><code>net groupmap add ntgroup="Domain Admins" unixgroup=domadm rid=512 type=d</code></strong>
 </pre><p>
 		</p><p>
-		<a class="indexterm" name="id2618593"></a>
+		<a class="indexterm" name="id383062"></a>
 		The quotes around &#8220;<span class="quote">Domain Admins</span>&#8221; are necessary due to the space in the group name.
 		Also make sure to leave no white space surrounding the equal character (=).
 		</p></li></ol></div><p>
 	Now <code class="constant">joe, john</code>, and <code class="constant">mary</code> are domain administrators.
 	</p><p>
-	<a class="indexterm" name="id2618622"></a>
+	<a class="indexterm" name="id383089"></a>
 	It is possible to map any arbitrary UNIX group to any Windows NT4/200x group as well as
 	to make any UNIX group a Windows domain group. For example, if you wanted to include a
 	UNIX group (e.g., acct) in an ACL on a local file or printer on a Domain Member machine,
@@ -135,54 +135,54 @@
 	The <code class="literal">ntgroup</code> value must be in quotes if it contains space characters to prevent
 	the space from being interpreted as a command delimiter.
 	</p><p>
-<a class="indexterm" name="id2618669"></a>
-<a class="indexterm" name="id2618676"></a>
+<a class="indexterm" name="id383131"></a>
+<a class="indexterm" name="id383138"></a>
 	Be aware that the RID parameter is an unsigned 32-bit integer that should
 	normally start at 1000. However, this RID must not overlap with any RID assigned
 	to a user. Verification for this is done differently depending on the passdb backend
 	you are using. Future versions of the tools may perform the verification automatically,
 	but for now the burden is on you.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2618690"></a>Warning: User Private Group Problems</h3></div></div></div><p>
-<a class="indexterm" name="id2618698"></a>
-<a class="indexterm" name="id2618705"></a>
-<a class="indexterm" name="id2618712"></a>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id383149"></a>Warning: User Private Group Problems</h3></div></div></div><p>
+<a class="indexterm" name="id383157"></a>
+<a class="indexterm" name="id383164"></a>
+<a class="indexterm" name="id383170"></a>
 	Windows does not permit user and group accounts to have the same name.
 	This has serious implications for all sites that use private group accounts.
 	A private group account is an administrative practice whereby users are each
 	given their own group account. Red Hat Linux, as well as several free distributions
 	of Linux, by default create private groups.
 	</p><p>
-<a class="indexterm" name="id2618728"></a>
-<a class="indexterm" name="id2618735"></a>
+<a class="indexterm" name="id383184"></a>
+<a class="indexterm" name="id383190"></a>
 	When mapping a UNIX/Linux group to a Windows group account, all conflict can
 	be avoided by assuring that the Windows domain group name does not overlap
 	with any user account name.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2618748"></a>Nested Groups: Adding Windows Domain Groups to Windows Local Groups</h3></div></div></div><a class="indexterm" name="id2618754"></a><p>
-<a class="indexterm" name="id2618765"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id383201"></a>Nested Groups: Adding Windows Domain Groups to Windows Local Groups</h3></div></div></div><a class="indexterm" name="id383207"></a><p>
+<a class="indexterm" name="id383218"></a>
 	This functionality is known as <code class="constant">nested groups</code> and was first added to
 	Samba-3.0.3.
 	</p><p>
-<a class="indexterm" name="id2618781"></a>
+<a class="indexterm" name="id383233"></a>
 	All MS Windows products since the release of Windows NT 3.10 support the use of nested groups.
 	Many Windows network administrators depend on this capability because it greatly simplifies security
 	administration.
 	</p><p>
-<a class="indexterm" name="id2618794"></a>
-<a class="indexterm" name="id2618801"></a>
-<a class="indexterm" name="id2618808"></a>
-<a class="indexterm" name="id2618815"></a>
-<a class="indexterm" name="id2618822"></a>
-<a class="indexterm" name="id2618829"></a>
-<a class="indexterm" name="id2618836"></a>
+<a class="indexterm" name="id383245"></a>
+<a class="indexterm" name="id383251"></a>
+<a class="indexterm" name="id383258"></a>
+<a class="indexterm" name="id383265"></a>
+<a class="indexterm" name="id383272"></a>
+<a class="indexterm" name="id383279"></a>
+<a class="indexterm" name="id383285"></a>
 	The nested group architecture was designed with the premise that day-to-day user and group membership
 	management should be performed on the domain security database. The application of group security
 	should be implemented on domain member servers using only local groups. On the domain member server,
 	all file system security controls are then limited to use of the local groups, which will contain
 	domain global groups and domain global users.
 	</p><p>
-<a class="indexterm" name="id2618854"></a>
-<a class="indexterm" name="id2618861"></a>
-<a class="indexterm" name="id2618868"></a>
+<a class="indexterm" name="id383299"></a>
+<a class="indexterm" name="id383306"></a>
+<a class="indexterm" name="id383313"></a>
 	You may ask, What are the benefits of this arrangement? The answer is obvious to those who have plumbed
 	the dark depths of Windows networking architecture. Consider for a moment a server on which are stored
 	200,000 files, each with individual domain user and domain group settings. The company that owns the
@@ -190,10 +190,10 @@
 	it is made a member of a different domain. Who would you think now owns all the files and directories?
 	Answer: Account Unknown.
 	</p><p>
-<a class="indexterm" name="id2618888"></a>
-<a class="indexterm" name="id2618895"></a>
-<a class="indexterm" name="id2618902"></a>
-<a class="indexterm" name="id2618908"></a>
+<a class="indexterm" name="id383328"></a>
+<a class="indexterm" name="id383335"></a>
+<a class="indexterm" name="id383341"></a>
+<a class="indexterm" name="id383348"></a>
 	Unraveling the file ownership mess is an unenviable administrative task that can be avoided simply
 	by using local groups to control all file and directory access control. In this case, only the members
 	of the local groups will have been lost. The files and directories in the storage subsystem will still
@@ -201,14 +201,14 @@
 	to delete the <code class="constant">Account Unknown</code> membership entries inside local groups with appropriate
 	entries for domain global groups in the new domain that the server has been made a member of.
 	</p><p>
-<a class="indexterm" name="id2618932"></a>
-<a class="indexterm" name="id2618939"></a>
-<a class="indexterm" name="id2618946"></a>
-<a class="indexterm" name="id2618953"></a>
-<a class="indexterm" name="id2618960"></a>
-<a class="indexterm" name="id2618967"></a>
-<a class="indexterm" name="id2618974"></a>
-<a class="indexterm" name="id2618981"></a>
+<a class="indexterm" name="id383367"></a>
+<a class="indexterm" name="id383373"></a>
+<a class="indexterm" name="id383380"></a>
+<a class="indexterm" name="id383387"></a>
+<a class="indexterm" name="id383394"></a>
+<a class="indexterm" name="id383401"></a>
+<a class="indexterm" name="id383408"></a>
+<a class="indexterm" name="id383414"></a>
 	Another prominent example of the use of nested groups involves implementation of administrative privileges
 	on domain member workstations and servers. Administrative privileges are given to all members of the
 	built-in local group <code class="constant">Administrators</code> on each domain member machine. To ensure that all domain
@@ -217,10 +217,10 @@
 	logged into the domain as a member of the Domain Admins group is also granted local administrative
 	privileges on each domain member.
 	</p><p>
-<a class="indexterm" name="id2619009"></a>
-<a class="indexterm" name="id2619016"></a>
-<a class="indexterm" name="id2619023"></a>
-<a class="indexterm" name="id2619029"></a>
+<a class="indexterm" name="id383437"></a>
+<a class="indexterm" name="id383444"></a>
+<a class="indexterm" name="id383451"></a>
+<a class="indexterm" name="id383457"></a>
 	UNIX/Linux has no concept of support for nested groups, and thus Samba has for a long time not supported
 	them either. The problem is that you would have to enter UNIX groups as auxiliary members of a group in
 	<code class="filename">/etc/group</code>. This does not work because it was not a design requirement at the time
@@ -228,11 +228,11 @@
 	<code class="filename">/etc/group</code> entries on demand by obtaining user and group information from the domain
 	controller that the Samba server is a member of.
 	</p><p>
-<a class="indexterm" name="id2619060"></a>
-<a class="indexterm" name="id2619067"></a>
-<a class="indexterm" name="id2619074"></a>
-<a class="indexterm" name="id2619081"></a>
-<a class="indexterm" name="id2619088"></a>
+<a class="indexterm" name="id383484"></a>
+<a class="indexterm" name="id383490"></a>
+<a class="indexterm" name="id383497"></a>
+<a class="indexterm" name="id383504"></a>
+<a class="indexterm" name="id383511"></a>
 	In effect, Samba supplements the <code class="filename">/etc/group</code> data via the dynamic
 	<code class="literal">libnss_winbind</code> mechanism. Beginning with Samba-3.0.3, this facility is used to provide
 	local groups in the same manner as Windows. It works by expanding the local groups on the
@@ -242,13 +242,13 @@
 	group. By definition, it can only contain user objects, which can then be faked to be member of the
 	UNIX/Linux group <code class="constant">demo</code>.
 	</p><p>
-<a class="indexterm" name="id2619134"></a>
-<a class="indexterm" name="id2619141"></a>
-<a class="indexterm" name="id2619148"></a>
-<a class="indexterm" name="id2619154"></a>
-<a class="indexterm" name="id2619161"></a>
-<a class="indexterm" name="id2619168"></a>
-<a class="indexterm" name="id2619175"></a>
+<a class="indexterm" name="id383552"></a>
+<a class="indexterm" name="id383558"></a>
+<a class="indexterm" name="id383565"></a>
+<a class="indexterm" name="id383572"></a>
+<a class="indexterm" name="id383579"></a>
+<a class="indexterm" name="id383585"></a>
+<a class="indexterm" name="id383592"></a>
 	To enable the use of nested groups, <code class="literal">winbindd</code> must be used with NSS winbind.
 	Creation and administration of the local groups is done best via the Windows Domain User Manager or its
 	Samba equivalent, the utility <code class="literal">net rpc group</code>. Creating the local group
@@ -256,8 +256,8 @@
 	</p><pre class="screen">
 	<code class="prompt">root# </code> net rpc group add demo -L -Uroot%not24get
 	</pre><p>
-<a class="indexterm" name="id2619218"></a>
-<a class="indexterm" name="id2619225"></a>
+<a class="indexterm" name="id383633"></a>
+<a class="indexterm" name="id383640"></a>
 	Here the -L switch means that you want to create a local group. It may be necessary to add -S and -U
 	switches for accessing the correct host with appropriate user or root privileges. Adding and removing
 	group members can be done via the <code class="constant">addmem</code> and <code class="constant">delmem</code> subcommands of
@@ -266,10 +266,10 @@
 	</p><pre class="screen">
 	net rpc group addmem demo "DOM\Domain Users"
 	</pre><p>
-<a class="indexterm" name="id2619265"></a>
-<a class="indexterm" name="id2619272"></a>
-<a class="indexterm" name="id2619279"></a>
-<a class="indexterm" name="id2619286"></a>
+<a class="indexterm" name="id383676"></a>
+<a class="indexterm" name="id383682"></a>
+<a class="indexterm" name="id383689"></a>
+<a class="indexterm" name="id383696"></a>
 	Having completed these two steps, the execution of <code class="literal">getent group demo</code> will show demo
 	members of the global <code class="constant">Domain Users</code> group as members of  the group
 	<code class="constant">demo</code>.  This also works with any local or domain user. In case the domain DOM trusts
@@ -277,46 +277,46 @@
 	<code class="constant">demo</code>. The users from the foreign domain who are members of the group that has been
 	added to the <code class="constant">demo</code> group now have the same local access permissions as local domain
 	users have. 
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2619324"></a>Important Administrative Information</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id383730"></a>Important Administrative Information</h3></div></div></div><p>
 	Administrative rights are necessary in two specific forms:
 	</p><div class="orderedlist"><ol type="1"><li><p>For Samba-3 domain controllers and domain member servers/clients.</p></li><li><p>To manage domain member Windows workstations.</p></li></ol></div><p>
-<a class="indexterm" name="id2619355"></a>
-<a class="indexterm" name="id2619362"></a>
-<a class="indexterm" name="id2619369"></a>
+<a class="indexterm" name="id383759"></a>
+<a class="indexterm" name="id383766"></a>
+<a class="indexterm" name="id383772"></a>
 	Versions of Samba up to and including 3.0.10 do not provide a means for assigning rights and privileges
 	that are necessary for system administration tasks from a Windows domain member client machine, so
 	domain administration tasks such as adding, deleting, and changing user and group account information, and
 	managing workstation domain membership accounts, can be handled by any account other than root.
 	</p><p>
-<a class="indexterm" name="id2619386"></a>
-<a class="indexterm" name="id2619393"></a>
-<a class="indexterm" name="id2619400"></a>
+<a class="indexterm" name="id383786"></a>
+<a class="indexterm" name="id383793"></a>
+<a class="indexterm" name="id383800"></a>
 	Samba-3.0.11 introduced a new privilege management interface (see <a class="link" href="rights.html" title="Chapter 15. User Rights and Privileges">User Rights and Privileges</a>)
 	that permits these tasks to be delegated to non-root (i.e., accounts other than the equivalent of the
 	MS Windows Administrator) accounts.
 	</p><p>
-<a class="indexterm" name="id2619421"></a>
-<a class="indexterm" name="id2619428"></a>
+<a class="indexterm" name="id383819"></a>
+<a class="indexterm" name="id383825"></a>
 	Administrative tasks on a Windows domain member workstation can be done by anyone who is a member of the
 	<code class="constant">Domain Admins</code> group. This group can be mapped to any convenient UNIX group.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2619442"></a>Applicable Only to Versions Earlier than 3.0.11</h4></div></div></div><p>
-<a class="indexterm" name="id2619451"></a>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id383838"></a>Applicable Only to Versions Earlier than 3.0.11</h4></div></div></div><p>
+<a class="indexterm" name="id383846"></a>
 	Administrative tasks on UNIX/Linux systems, such as adding users or groups, requires
 	<code class="constant">root</code>-level privilege. The addition of a Windows client to a Samba domain involves the
 	addition of a user account for the Windows client.
 	</p><p>
-<a class="indexterm" name="id2619468"></a>
-<a class="indexterm" name="id2619475"></a>
+<a class="indexterm" name="id383862"></a>
+<a class="indexterm" name="id383869"></a>
 	Many UNIX administrators continue to request that the Samba Team make it possible to add Windows workstations, or 
 	the ability to add, delete, or modify user accounts, without requiring <code class="constant">root</code> privileges. 
 	Such a request violates every understanding of basic UNIX system security.
 	</p><p>
-<a class="indexterm" name="id2619494"></a>
-<a class="indexterm" name="id2619500"></a>
-<a class="indexterm" name="id2619507"></a>
-<a class="indexterm" name="id2619514"></a>
-<a class="indexterm" name="id2619521"></a>
-<a class="indexterm" name="id2619528"></a>
+<a class="indexterm" name="id383885"></a>
+<a class="indexterm" name="id383892"></a>
+<a class="indexterm" name="id383898"></a>
+<a class="indexterm" name="id383905"></a>
+<a class="indexterm" name="id383912"></a>
+<a class="indexterm" name="id383919"></a>
 	There is no safe way to provide access on a UNIX/Linux system without providing
 	<code class="constant">root</code>-level privileges. Provision of <code class="constant">root</code> privileges can be done
 	either by logging on to the Domain as the user <code class="constant">root</code> or by permitting particular users to
@@ -324,15 +324,15 @@
 	can use tools like the NT4 Domain User Manager and the NT4 Domain Server Manager to manage user and group
 	accounts as well as domain member server and client accounts. This level of privilege is also needed to manage
 	share-level ACLs.
-	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2619564"></a>Default Users, Groups, and Relative Identifiers</h3></div></div></div><p>
-	<a class="indexterm" name="id2619572"></a>
-	<a class="indexterm" name="id2619582"></a>
-<a class="indexterm" name="id2619588"></a>
-<a class="indexterm" name="id2619595"></a>
-<a class="indexterm" name="id2619602"></a>
-<a class="indexterm" name="id2619609"></a>
-<a class="indexterm" name="id2619616"></a>
-<a class="indexterm" name="id2619622"></a>
+	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id383950"></a>Default Users, Groups, and Relative Identifiers</h3></div></div></div><p>
+	<a class="indexterm" name="id383958"></a>
+	<a class="indexterm" name="id383967"></a>
+<a class="indexterm" name="id383974"></a>
+<a class="indexterm" name="id383980"></a>
+<a class="indexterm" name="id383987"></a>
+<a class="indexterm" name="id383994"></a>
+<a class="indexterm" name="id384001"></a>
+<a class="indexterm" name="id384008"></a>
 	When first installed, Windows NT4/200x/XP are preconfigured with certain user, group, and
 	alias entities. Each has a well-known RID. These must be preserved for continued
 	integrity of operation. Samba must be provisioned with certain essential domain groups that require
@@ -340,23 +340,23 @@
 	domain groups are automatically created. It is the LDAP administrator's responsibility to create
 	(provision) the default NT groups.
 	</p><p>
-<a class="indexterm" name="id2619644"></a>
-<a class="indexterm" name="id2619651"></a>
-<a class="indexterm" name="id2619658"></a>
-<a class="indexterm" name="id2619665"></a>
+<a class="indexterm" name="id384025"></a>
+<a class="indexterm" name="id384032"></a>
+<a class="indexterm" name="id384039"></a>
+<a class="indexterm" name="id384046"></a>
 	Each essential domain group must be assigned its respective well-known RID. The default users, groups,
 	aliases, and RIDs are shown in <a class="link" href="groupmapping.html#WKURIDS" title="Table 12.1. Well-Known User Default RIDs">Well-Known User Default RIDs</a>.
 	</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2619687"></a>
-<a class="indexterm" name="id2619693"></a>
-<a class="indexterm" name="id2619700"></a>
-<a class="indexterm" name="id2619707"></a>
-<a class="indexterm" name="id2619714"></a>
+<a class="indexterm" name="id384066"></a>
+<a class="indexterm" name="id384072"></a>
+<a class="indexterm" name="id384079"></a>
+<a class="indexterm" name="id384086"></a>
+<a class="indexterm" name="id384093"></a>
 	It is the administrator's responsibility to create the essential domain groups and to assign each
 	its default RID.
 	</p></div><p>
-<a class="indexterm" name="id2619726"></a>
-<a class="indexterm" name="id2619733"></a>
+<a class="indexterm" name="id384103"></a>
+<a class="indexterm" name="id384110"></a>
 	It is permissible to create any domain group that may be necessary; just make certain that the essential
 	domain groups (well known) have been created and assigned their default RIDs. Other groups you create may
 	be assigned any arbitrary RID you care to use.
@@ -365,12 +365,12 @@
 	will be available for use as an NT domain group.
 	</p><p>
 	</p><div class="table"><a name="WKURIDS"></a><p class="title"><b>Table 12.1. Well-Known User Default RIDs</b></p><div class="table-contents"><table summary="Well-Known User Default RIDs" border="1"><colgroup><col align="left"><col align="left"><col align="left"><col align="center"></colgroup><thead><tr><th align="left">Well-Known Entity</th><th align="left">RID</th><th align="left">Type</th><th align="center">Essential</th></tr></thead><tbody><tr><td align="left">Domain Administrator</td><td align="left">500</td><td align="left">User</td><td align="center">No</td></tr><tr><td align="left">Domain Guest</td><td align="left">501</td><td align="left">User</td><td align="center">No</td></tr><tr><td align="left">Domain KRBTGT</td><td align="left">502</td><td align="left">User</td><td align="center">No</td></tr><tr><td align="left">Domain Admins</td><td align="left">512</td><td align="left">Group</td><td align="center">Yes</td></tr><tr><td align="left">Domain Users</td><td align="left">513</td><td align="left">Group</td><td align="center">Yes</td></tr><tr><td align="left">Domain Guests</td><td align="left">514</td><td align="left">Group</td><td align="center">Yes</td></tr><tr><td align="left">Domain Computers</td><td align="left">515</td><td align="left">Group</td><td align="center">No</td></tr><tr><td align="left">Domain Controllers</td><td align="left">516</td><td align="left">Group</td><td align="center">No</td></tr><tr><td align="left">Domain Certificate Admins</td><td align="left">517</td><td align="left">Group</td><td align="center">No</td></tr><tr><td align="left">Domain Schema Admins</td><td align="left">518</td><td align="left">Group</td><td align="center">No</td></tr><tr><td align="left">Domain Enterprise Admins</td><td align="left">519</td><td align="left">Group</td><td align="center">No</td></tr><tr><td align="left">Domain Policy Admins</td><td align="left">520</td><td align="left">Group</td><td align="center">No</td></tr><tr><td align="left">Builtin Admins</td><td align="left">544</td><td align="left">Alias</td><td align="center">No</td></tr><tr><td align="left">Builtin users</td><td align="left">545</td><td align="left">Alias</td><td align="center">No</td></tr><tr><td align="left">Builtin Guests</td><td align="left">546</td><td align="left">Alias</td><td align="center">No</td></tr><tr><td align="left">Builtin Power Users</td><td align="left">547</td><td align="left">Alias</td><td align="center">No</td></tr><tr><td align="left">Builtin Account Operators</td><td align="left">548</td><td align="left">Alias</td><td align="center">No</td></tr><tr><td align="left">Builtin System Operators</td><td align="left">549</td><td align="left">Alias</td><td align="center">No</td></tr><tr><td align="left">Builtin Print Operators</td><td align="left">550</td><td align="left">Alias</td><td align="center">No</td></tr><tr><td align="left">Builtin Backup Operators</td><td align="left">551</td><td align="left">Alias</td><td align="center">No</td></tr><tr><td align="left">Builtin Replicator</td><td align="left">552</td><td align="left">Alias</td><td align="center">No</td></tr><tr><td align="left">Builtin RAS Servers</td><td align="left">553</td><td align="left">Alias</td><td align="center">No</td></tr></tbody></table></div></div><p><br class="table-break">
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2620187"></a>Example Configuration</h3></div></div></div><p>
-<a class="indexterm" name="id2620195"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id384556"></a>Example Configuration</h3></div></div></div><p>
+<a class="indexterm" name="id384564"></a>
 		You can list the various groups in the mapping database by executing
 		<code class="literal">net groupmap list</code>. Here is an example:
 		</p><p>
-<a class="indexterm" name="id2620217"></a>
+<a class="indexterm" name="id384585"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> <strong class="userinput"><code>net groupmap list</code></strong>
 Domain Admins (S-1-5-21-2547222302-1596225915-2414751004-512) -&gt; domadmin
@@ -379,15 +379,15 @@
 </pre><p>
 		</p><p>
 		For complete details on <code class="literal">net groupmap</code>, refer to the net(8) man page.
-		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2620264"></a>Configuration Scripts</h2></div></div></div><p>
+		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id384627"></a>Configuration Scripts</h2></div></div></div><p>
 	Everyone needs tools. Some of us like to create our own, others prefer to use canned tools
 	(i.e., prepared by someone else for general use). 
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2620275"></a>Sample <code class="filename">smb.conf</code> Add Group Script</h3></div></div></div><p>
-		<a class="indexterm" name="id2620289"></a>
-		<a class="indexterm" name="id2620296"></a>
-		<a class="indexterm" name="id2620303"></a>
-<a class="indexterm" name="id2620310"></a>
-<a class="indexterm" name="id2620317"></a>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id384638"></a>Sample <code class="filename">smb.conf</code> Add Group Script</h3></div></div></div><p>
+		<a class="indexterm" name="id384651"></a>
+		<a class="indexterm" name="id384658"></a>
+		<a class="indexterm" name="id384665"></a>
+<a class="indexterm" name="id384672"></a>
+<a class="indexterm" name="id384678"></a>
 		A script to create complying group names for use by the Samba group interfaces
 		is provided in <a class="link" href="groupmapping.html#smbgrpadd.sh" title="Example 12.1. smbgrpadd.sh">smbgrpadd.sh</a>. This script
 		adds a temporary entry in the <code class="filename">/etc/group</code> file and then renames
@@ -415,15 +415,15 @@
 		The <code class="filename">smb.conf</code> entry for the above script shown in <a class="link" href="groupmapping.html#smbgrpadd" title="Example 12.2. Configuration of smb.conf for the add group Script">the configuration of
 		<code class="filename">smb.conf</code> for the add group Script</a> demonstrates how it may be used.
 
-</p><div class="example"><a name="smbgrpadd"></a><p class="title"><b>Example 12.2. Configuration of <code class="filename">smb.conf</code> for the add group Script</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2620432"></a><em class="parameter"><code>add group script = /path_to_tool/smbgrpadd.sh "%g"</code></em></td></tr></table></div></div><p><br class="example-break">
-		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2620447"></a>Script to Configure Group Mapping</h3></div></div></div><p>
-<a class="indexterm" name="id2620455"></a>
+</p><div class="example"><a name="smbgrpadd"></a><p class="title"><b>Example 12.2. Configuration of <code class="filename">smb.conf</code> for the add group Script</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id384783"></a><em class="parameter"><code>add group script = /path_to_tool/smbgrpadd.sh "%g"</code></em></td></tr></table></div></div><p><br class="example-break">
+		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id384798"></a>Script to Configure Group Mapping</h3></div></div></div><p>
+<a class="indexterm" name="id384806"></a>
 	In our example we have created a UNIX/Linux group called <code class="literal">ntadmin</code>.
 	Our script will create the additional groups <code class="literal">Orks</code>, <code class="literal">Elves</code>, and <code class="literal">Gnomes</code>.
 	It is a good idea to save this shell script for later use just in case you ever need to rebuild your mapping database.
 	For the sake of convenience we elect to save this script as a file called <code class="filename">initGroups.sh</code>.
 	This script is given in <a class="link" href="groupmapping.html#set-group-map" title="Example 12.3. Script to Set Group Mapping">intGroups.sh</a>.
-<a class="indexterm" name="id2620505"></a>
+<a class="indexterm" name="id384852"></a>
 </p><div class="example"><a name="set-group-map"></a><p class="title"><b>Example 12.3. Script to Set Group Mapping</b></p><div class="example-contents"><pre class="programlisting">
 #!/bin/bash
 
@@ -450,32 +450,32 @@
 	trouble. Commencing with Samba-3.0.23 this annomaly has been fixed - thus all Windows groups
 	must now be manually and explicitly created and mapped to a valid UNIX GID by the Samba 
 	administrator.
-	</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2620574"></a>Common Errors</h2></div></div></div><p>
+	</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id384912"></a>Common Errors</h2></div></div></div><p>
 At this time there are many little surprises for the unwary administrator. In a real sense
 it is imperative that every step of automated control scripts be carefully tested
 manually before putting it into active service.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2620587"></a>Adding Groups Fails</h3></div></div></div><p>
-<a class="indexterm" name="id2620595"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id384922"></a>Adding Groups Fails</h3></div></div></div><p>
+<a class="indexterm" name="id384930"></a>
 		This is a common problem when the <code class="literal">groupadd</code> is called directly
 		by the Samba interface script for the <a class="link" href="smb.conf.5.html#ADDGROUPSCRIPT">add group script</a> in
 		the <code class="filename">smb.conf</code> file.
 		</p><p>
-<a class="indexterm" name="id2620632"></a>
-<a class="indexterm" name="id2620639"></a>
+<a class="indexterm" name="id384965"></a>
+<a class="indexterm" name="id384972"></a>
 		The most common cause of failure is an attempt to add an MS Windows group account
 		that has an uppercase character and/or a space character in it.
 		</p><p>
-<a class="indexterm" name="id2620652"></a>
+<a class="indexterm" name="id384983"></a>
 		There are three possible workarounds. First, use only group names that comply
 		with the limitations of the UNIX/Linux <code class="literal">groupadd</code> system tool.
 		Second, it involves the use of the script mentioned earlier in this chapter, and
 		third is the option is to manually create a UNIX/Linux group account that can substitute
 		for the MS Windows group name, then use the procedure listed above to map that group
 		to the MS Windows group.
-		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2620674"></a>Adding Domain Users to the Workstation Power Users Group</h3></div></div></div><p>&#8220;<span class="quote">
+		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id385002"></a>Adding Domain Users to the Workstation Power Users Group</h3></div></div></div><p>&#8220;<span class="quote">
 		What must I do to add domain users to the Power Users group?
 		</span>&#8221;</p><p>
-<a class="indexterm" name="id2620688"></a>
+<a class="indexterm" name="id385015"></a>
 		The Power Users group is a group that is local to each Windows 200x/XP Professional workstation.
 		You cannot add the Domain Users group to the Power Users group automatically, it must be done on
 		each workstation by logging in as the local workstation <span class="emphasis"><em>administrator</em></span> and

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/idmapper.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/idmapper.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/idmapper.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 14. Identity Mapping (IDMAP)</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="NetCommand.html" title="Chapter 13. Remote and Local Management: The Net Command"><link rel="next" href="rights.html" title="Chapter 15. User Rights and Privileges"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 14. Identity Mapping (IDMAP)</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="NetCommand.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="rights.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="idmapper"></a>Chapter 14. Identity Mapping (IDMAP)</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="idmapper.html#id2626535">Samba Server Deployment Types and IDMAP</a></span></dt><dd><dl><dt><span class="sect2"><a href="idmapper.html#id2626560">Standalone Samba Server</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id2627583">Primary Domain Controller</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id2627818">Backup Domain Controller</a></span></dt></dl></dd><dt><span class="sect1"><a href="idmapper.html#id2627889">Examples of IDMAP Backend Usage</a></span></dt><dd><dl><dt><span class="sect2"><a href="idmapper.html#id2627952">Default Winbind TDB</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id2628674">IDMAP_RID with Winbind</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id2629264">IDMAP Storage in LDAP Using Winbind</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id2629850">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a></span></dt></dl></dd></dl></div><p>
-<a class="indexterm" name="id2626251"></a>
-<a class="indexterm" name="id2626258"></a>
-<a class="indexterm" name="id2626265"></a>
-<a class="indexterm" name="id2626272"></a>
-<a class="indexterm" name="id2626281"></a>
-<a class="indexterm" name="id2626287"></a>
-<a class="indexterm" name="id2626294"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 14. Identity Mapping (IDMAP)</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="NetCommand.html" title="Chapter 13. Remote and Local Management: The Net Command"><link rel="next" href="rights.html" title="Chapter 15. User Rights and Privileges"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 14. Identity Mapping (IDMAP)</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="NetCommand.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="rights.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="idmapper"></a>Chapter 14. Identity Mapping (IDMAP)</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="idmapper.html#id390297">Samba Server Deployment Types and IDMAP</a></span></dt><dd><dl><dt><span class="sect2"><a href="idmapper.html#id390321">Standalone Samba Server</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id391274">Primary Domain Controller</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id391492">Backup Domain Controller</a></span></dt></dl></dd><dt><span class="sect1"><a href="idmapper.html#id391558">Examples of IDMAP Backend Usage</a></span></dt><dd><dl><dt><span class="sect2"><a href="idmapper.html#id391619">Default Winbind TDB</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id392312">IDMAP_RID with Winbind</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id392871">IDMAP Storage in LDAP Using Winbind</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id393417">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a></span></dt></dl></dd></dl></div><p>
+<a class="indexterm" name="id390039"></a>
+<a class="indexterm" name="id390045"></a>
+<a class="indexterm" name="id390052"></a>
+<a class="indexterm" name="id390059"></a>
+<a class="indexterm" name="id390068"></a>
+<a class="indexterm" name="id390075"></a>
+<a class="indexterm" name="id390081"></a>
 The Microsoft Windows operating system has a number of features that impose specific challenges
 to interoperability with the operating systems on which Samba is implemented. This chapter deals
 explicitly with the mechanisms Samba-3 (version 3.0.8 and later) uses to overcome one of the
@@ -16,24 +16,24 @@
 To ensure sufficient coverage, each possible Samba deployment type is discussed.
 This is followed by an overview of how the IDMAP facility may be implemented.
 </p><p>
-<a class="indexterm" name="id2626318"></a>
-<a class="indexterm" name="id2626325"></a>
-<a class="indexterm" name="id2626332"></a>
-<a class="indexterm" name="id2626339"></a>
+<a class="indexterm" name="id390100"></a>
+<a class="indexterm" name="id390107"></a>
+<a class="indexterm" name="id390113"></a>
+<a class="indexterm" name="id390120"></a>
 The IDMAP facility is of concern where more than one Samba server (or Samba network client)
 is installed in a domain. Where there is a single Samba server, do not be too concerned regarding
 the IDMAP infrastructure  the default behavior of Samba is nearly always sufficient.
 Where mulitple Samba servers are used it is often necessary to move data off one server and onto
 another, and that is where the fun begins!
 </p><p>
-<a class="indexterm" name="id2626359"></a>
-<a class="indexterm" name="id2626366"></a>
-<a class="indexterm" name="id2626372"></a>
-<a class="indexterm" name="id2626379"></a>
-<a class="indexterm" name="id2626385"></a>
-<a class="indexterm" name="id2626392"></a>
-<a class="indexterm" name="id2626399"></a>
-<a class="indexterm" name="id2626406"></a>
+<a class="indexterm" name="id390137"></a>
+<a class="indexterm" name="id390143"></a>
+<a class="indexterm" name="id390150"></a>
+<a class="indexterm" name="id390156"></a>
+<a class="indexterm" name="id390163"></a>
+<a class="indexterm" name="id390170"></a>
+<a class="indexterm" name="id390176"></a>
+<a class="indexterm" name="id390183"></a>
 Where user and group account information is stored in an LDAP directory every server can have the same
 consistent UID and GID for users and groups. This is achieved using NSS and the nss_ldap tool. Samba
 can be configured to use only local accounts, in which case the scope of the IDMAP problem is somewhat
@@ -41,75 +41,75 @@
 are not needed. On the other hand, if the Samba servers are NT4 domain members, or ADS  domain members,
 or if there is a need to keep the security name-space separate (i.e., the user
 <code class="literal">DOMINICUS\FJones</code> must not be given access to the account resources of the user 
-<code class="literal">FRANCISCUS\FJones</code><sup>[<a name="id2626444" href="#ftn.id2626444" class="footnote">4</a>]</sup> free from inadvertent cross-over, close attention should be given
+<code class="literal">FRANCISCUS\FJones</code><sup>[<a name="id390211" href="#ftn.id390211" class="footnote">4</a>]</sup> free from inadvertent cross-over, close attention should be given
 to the way that the IDMAP facility is configured.
 </p><p>
-<a class="indexterm" name="id2626472"></a>
-<a class="indexterm" name="id2626479"></a>
-<a class="indexterm" name="id2626486"></a>
-<a class="indexterm" name="id2626492"></a>
-<a class="indexterm" name="id2626499"></a>
-<a class="indexterm" name="id2626505"></a>
+<a class="indexterm" name="id390237"></a>
+<a class="indexterm" name="id390244"></a>
+<a class="indexterm" name="id390251"></a>
+<a class="indexterm" name="id390257"></a>
+<a class="indexterm" name="id390264"></a>
+<a class="indexterm" name="id390270"></a>
 The use of IDMAP is important where the Samba server will be accessed by workstations or servers from
 more than one domain, in which case it is important to run winbind so it can handle the resolution (ID mapping)
 of foreign SIDs to local UNIX UIDs and GIDs.
 </p><p>
-<a class="indexterm" name="id2626520"></a>
+<a class="indexterm" name="id390282"></a>
 The use of the IDMAP facility requires the execution of the <code class="literal">winbindd</code> upon Samba startup.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2626535"></a>Samba Server Deployment Types and IDMAP</h2></div></div></div><p>
-<a class="indexterm" name="id2626544"></a>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id390297"></a>Samba Server Deployment Types and IDMAP</h2></div></div></div><p>
+<a class="indexterm" name="id390305"></a>
 There are four basic server deployment types, as documented in <a class="link" href="ServerType.html" title="Chapter 3. Server Types and Security Modes">the chapter
 on Server Types and Security Modes</a>.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2626560"></a>Standalone Samba Server</h3></div></div></div><p>
-	<a class="indexterm" name="id2626568"></a>
-	<a class="indexterm" name="id2626575"></a>
-	<a class="indexterm" name="id2626582"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id390321"></a>Standalone Samba Server</h3></div></div></div><p>
+	<a class="indexterm" name="id390328"></a>
+	<a class="indexterm" name="id390335"></a>
+	<a class="indexterm" name="id390342"></a>
 	A standalone Samba server is an implementation that is not a member of a Windows NT4 domain,
 	a Windows 200X Active Directory domain, or a Samba domain.
 	</p><p>
-	<a class="indexterm" name="id2626595"></a>
-	<a class="indexterm" name="id2626602"></a>
-	<a class="indexterm" name="id2626608"></a>
+	<a class="indexterm" name="id390353"></a>
+	<a class="indexterm" name="id390360"></a>
+	<a class="indexterm" name="id390367"></a>
 	By definition, this means that users and groups will be created and controlled locally, and
 	the identity of a network user must match a local UNIX/Linux user login. The IDMAP facility
 	is therefore of little to no interest, winbind will not be necessary, and the IDMAP facility
 	will not be relevant or of interest.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2626623"></a>Domain Member Server or Domain Member Client</h3></div></div></div><p>
-	<a class="indexterm" name="id2626631"></a>
-	<a class="indexterm" name="id2626638"></a>
-	<a class="indexterm" name="id2626644"></a>
-	<a class="indexterm" name="id2626651"></a>
-	<a class="indexterm" name="id2626657"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id390378"></a>Domain Member Server or Domain Member Client</h3></div></div></div><p>
+	<a class="indexterm" name="id390386"></a>
+	<a class="indexterm" name="id390393"></a>
+	<a class="indexterm" name="id390400"></a>
+	<a class="indexterm" name="id390406"></a>
+	<a class="indexterm" name="id390413"></a>
 	Samba-3 can act as a Windows NT4 PDC or BDC, thereby providing domain control protocols that
 	are compatible with Windows NT4. Samba-3 file and print sharing protocols are compatible with
 	all versions of MS Windows products. Windows NT4, as with MS Active Directory,
 	extensively makes use of Windows SIDs.
 	</p><p>
-	<a class="indexterm" name="id2626673"></a>
-	<a class="indexterm" name="id2626680"></a>
-	<a class="indexterm" name="id2626686"></a>
+	<a class="indexterm" name="id390425"></a>
+	<a class="indexterm" name="id390432"></a>
+	<a class="indexterm" name="id390439"></a>
 	Samba-3 domain member servers and clients must interact correctly with MS Windows SIDs. Incoming
 	Windows SIDs must be translated to local UNIX UIDs and GIDs. Outgoing information from the Samba
 	server must provide to MS Windows clients and servers appropriate SIDs.
 	</p><p>
-	<a class="indexterm" name="id2626701"></a>
-	<a class="indexterm" name="id2626707"></a>
+	<a class="indexterm" name="id390451"></a>
+	<a class="indexterm" name="id390457"></a>
 	A Samba member of a Windows networking domain (NT4-style or ADS) can be configured to handle 
 	identity mapping in a variety of ways. The mechanism it uses depends on whether or not
 	the <code class="literal">winbindd</code> daemon is used and how the winbind functionality is configured.
 	The configuration options are briefly described here:
 	</p><div class="variablelist"><dl><dt><span class="term">Winbind is not used; users and groups are local: </span></dt><dd><p>
-				<a class="indexterm" name="id2626738"></a>
-				<a class="indexterm" name="id2626745"></a>
-				<a class="indexterm" name="id2626751"></a>
-				<a class="indexterm" name="id2626758"></a>
-				<a class="indexterm" name="id2626765"></a>
-				<a class="indexterm" name="id2626772"></a>
-				<a class="indexterm" name="id2626779"></a>
-				<a class="indexterm" name="id2626785"></a>
-				<a class="indexterm" name="id2626792"></a>
-				<a class="indexterm" name="id2626799"></a>
-				<a class="indexterm" name="id2626806"></a>
+				<a class="indexterm" name="id390485"></a>
+				<a class="indexterm" name="id390492"></a>
+				<a class="indexterm" name="id390499"></a>
+				<a class="indexterm" name="id390505"></a>
+				<a class="indexterm" name="id390512"></a>
+				<a class="indexterm" name="id390519"></a>
+				<a class="indexterm" name="id390526"></a>
+				<a class="indexterm" name="id390532"></a>
+				<a class="indexterm" name="id390539"></a>
+				<a class="indexterm" name="id390546"></a>
+				<a class="indexterm" name="id390553"></a>
 				Where <code class="literal">winbindd</code> is not used Samba (<code class="literal">smbd</code>)
 				uses the underlying UNIX/Linux mechanisms to resolve the identity of incoming
 				network traffic. This is done using the LoginID (account name) in the
@@ -119,51 +119,51 @@
 				we are implying that they are stored only on the local system, in the
 				<code class="filename">/etc/passwd</code> and <code class="filename">/etc/group</code> respectively.
 				</p><p>
-				<a class="indexterm" name="id2626848"></a>
-				<a class="indexterm" name="id2626855"></a>
+				<a class="indexterm" name="id390591"></a>
+				<a class="indexterm" name="id390598"></a>
 				For example, when the user <code class="literal">BERYLIUM\WambatW</code> tries to open a
 				connection to a Samba server the incoming SessionSetupAndX request will make a 
 				system call to look up the user <code class="literal">WambatW</code> in the
 				<code class="filename">/etc/passwd</code> file.
 				</p><p>
-				<a class="indexterm" name="id2626886"></a>
-				<a class="indexterm" name="id2626893"></a>
-				<a class="indexterm" name="id2626900"></a>
-				<a class="indexterm" name="id2626907"></a>
-				<a class="indexterm" name="id2626913"></a>
-				<a class="indexterm" name="id2626920"></a>
-				<a class="indexterm" name="id2626926"></a>
-				<a class="indexterm" name="id2626933"></a>
+				<a class="indexterm" name="id390627"></a>
+				<a class="indexterm" name="id390634"></a>
+				<a class="indexterm" name="id390641"></a>
+				<a class="indexterm" name="id390647"></a>
+				<a class="indexterm" name="id390654"></a>
+				<a class="indexterm" name="id390660"></a>
+				<a class="indexterm" name="id390667"></a>
+				<a class="indexterm" name="id390674"></a>
 				This configuration may be used with standalone Samba servers, domain member
 				servers (NT4 or ADS), and for a PDC that uses either an smbpasswd
 				or a tdbsam-based Samba passdb backend.
 				</p></dd><dt><span class="term">Winbind is not used; users and groups resolved via NSS: </span></dt><dd><p>
-				<a class="indexterm" name="id2626956"></a>
-				<a class="indexterm" name="id2626963"></a>
-				<a class="indexterm" name="id2626970"></a>
-				<a class="indexterm" name="id2626977"></a>
-				<a class="indexterm" name="id2626984"></a>
-				<a class="indexterm" name="id2626991"></a>
+				<a class="indexterm" name="id390695"></a>
+				<a class="indexterm" name="id390702"></a>
+				<a class="indexterm" name="id390708"></a>
+				<a class="indexterm" name="id390715"></a>
+				<a class="indexterm" name="id390722"></a>
+				<a class="indexterm" name="id390728"></a>
 				In this situation user and group accounts are treated as if they are local
 				accounts. The only way in which this differs from having local accounts is
 				that the accounts are stored in a repository that can be shared. In practice
 				this means that they will reside in either an NIS-type database or else in LDAP.
 				</p><p>
-				<a class="indexterm" name="id2627006"></a>
-				<a class="indexterm" name="id2627013"></a>
-				<a class="indexterm" name="id2627020"></a>
-				<a class="indexterm" name="id2627027"></a>
-				<a class="indexterm" name="id2627033"></a>
-				<a class="indexterm" name="id2627040"></a>
-				<a class="indexterm" name="id2627046"></a>
+				<a class="indexterm" name="id390741"></a>
+				<a class="indexterm" name="id390748"></a>
+				<a class="indexterm" name="id390755"></a>
+				<a class="indexterm" name="id390762"></a>
+				<a class="indexterm" name="id390768"></a>
+				<a class="indexterm" name="id390775"></a>
+				<a class="indexterm" name="id390781"></a>
 				This configuration may be used with standalone Samba servers, domain member
 				servers (NT4 or ADS), and for a PDC that uses either an smbpasswd
 				or a tdbsam-based Samba passdb backend.
 				</p></dd><dt><span class="term">Winbind/NSS with the default local IDMAP table: </span></dt><dd><p>
-				<a class="indexterm" name="id2627069"></a>
-				<a class="indexterm" name="id2627076"></a>
-				<a class="indexterm" name="id2627083"></a>
-				<a class="indexterm" name="id2627090"></a>
+				<a class="indexterm" name="id390802"></a>
+				<a class="indexterm" name="id390809"></a>
+				<a class="indexterm" name="id390816"></a>
+				<a class="indexterm" name="id390823"></a>
 				There are many sites that require only a simple Samba server or a single Samba
 				server that is a member of a Windows NT4 domain or an ADS domain. A typical example
 				is an appliance like file server on which no local accounts are configured and
@@ -171,21 +171,21 @@
 				domain. The domain control can be provided by Samba-3, MS Windows NT4, or MS Windows
 				Active Directory.
 				</p><p>
-				<a class="indexterm" name="id2627108"></a>
-				<a class="indexterm" name="id2627114"></a>
-				<a class="indexterm" name="id2627121"></a>
-				<a class="indexterm" name="id2627128"></a>
-				<a class="indexterm" name="id2627135"></a>
+				<a class="indexterm" name="id390837"></a>
+				<a class="indexterm" name="id390843"></a>
+				<a class="indexterm" name="id390850"></a>
+				<a class="indexterm" name="id390857"></a>
+				<a class="indexterm" name="id390864"></a>
 				Winbind is a great convenience in this situation. All that is needed is a range of
 				UID numbers and GID numbers that can be defined in the <code class="filename">smb.conf</code> file. The
 				<code class="filename">/etc/nsswitch.conf</code> file is configured to use <code class="literal">winbind</code>,
 				which does all the difficult work of mapping incoming SIDs to appropriate UIDs and GIDs.
 				The SIDs are allocated a UID/GID in the order in which winbind receives them.
 				</p><p>
-				<a class="indexterm" name="id2627169"></a>
-				<a class="indexterm" name="id2627175"></a>
-				<a class="indexterm" name="id2627182"></a>
-				<a class="indexterm" name="id2627189"></a>
+				<a class="indexterm" name="id390894"></a>
+				<a class="indexterm" name="id390901"></a>
+				<a class="indexterm" name="id390907"></a>
+				<a class="indexterm" name="id390914"></a>
 				This configuration is not convenient or practical in sites that have more than one
 				Samba server and that require the same UID or GID for the same user or group across
 				all servers. One of the hazards of this method is that in the event that the winbind
@@ -194,10 +194,10 @@
 				result that MS Windows files that are stored on the Samba server may now not belong to
 				the rightful owners.
 				</p></dd><dt><span class="term">Winbind/NSS uses RID based IDMAP: </span></dt><dd><p>
-				<a class="indexterm" name="id2627227"></a>
-				<a class="indexterm" name="id2627233"></a>
-				<a class="indexterm" name="id2627240"></a>
-				<a class="indexterm" name="id2627247"></a>
+				<a class="indexterm" name="id390943"></a>
+				<a class="indexterm" name="id390949"></a>
+				<a class="indexterm" name="id390956"></a>
+				<a class="indexterm" name="id390962"></a>
 				The IDMAP_RID facility is new to Samba version 3.0.8. It was added to make life easier
 				for a number of sites that are committed to use of MS ADS, that do not apply
 				an ADS schema extension, and that do not have an installed an LDAP directory server just for
@@ -205,14 +205,14 @@
 				domains, and not multiple domain trees) and you want a simple cookie-cutter solution to the
 				IDMAP table problem, then IDMAP_RID is an obvious choice.
 				</p><p>
-				<a class="indexterm" name="id2627266"></a>
-				<a class="indexterm" name="id2627272"></a>
-				<a class="indexterm" name="id2627279"></a>
-				<a class="indexterm" name="id2627286"></a>
-				<a class="indexterm" name="id2627293"></a>
-				<a class="indexterm" name="id2627299"></a>
-				<a class="indexterm" name="id2627306"></a>
-				<a class="indexterm" name="id2627313"></a>
+				<a class="indexterm" name="id390977"></a>
+				<a class="indexterm" name="id390984"></a>
+				<a class="indexterm" name="id390991"></a>
+				<a class="indexterm" name="id390997"></a>
+				<a class="indexterm" name="id391004"></a>
+				<a class="indexterm" name="id391010"></a>
+				<a class="indexterm" name="id391017"></a>
+				<a class="indexterm" name="id391024"></a>
 				This facility requires the allocation of the <em class="parameter"><code>idmap uid</code></em> and the
 				<em class="parameter"><code>idmap gid</code></em> ranges, and within the <em class="parameter"><code>idmap uid</code></em>
 				it is possible to allocate a subset of this range for automatic mapping of the relative
@@ -222,23 +222,23 @@
 				a SID is encountered that has the value <code class="constant">S-1-5-21-34567898-12529001-32973135-1234</code>,
 				the resulting UID will be <code class="constant">1000 + 1234 = 2234</code>.
 				</p></dd><dt><span class="term">Winbind with an NSS/LDAP backend-based IDMAP facility: </span></dt><dd><p>
-				<a class="indexterm" name="id2627381"></a>
-				<a class="indexterm" name="id2627388"></a>
-				<a class="indexterm" name="id2627395"></a>
-				<a class="indexterm" name="id2627401"></a>
-				<a class="indexterm" name="id2627408"></a>
-				<a class="indexterm" name="id2627414"></a>
-				<a class="indexterm" name="id2627421"></a>
-				<a class="indexterm" name="id2627428"></a>
+				<a class="indexterm" name="id391087"></a>
+				<a class="indexterm" name="id391094"></a>
+				<a class="indexterm" name="id391101"></a>
+				<a class="indexterm" name="id391107"></a>
+				<a class="indexterm" name="id391114"></a>
+				<a class="indexterm" name="id391120"></a>
+				<a class="indexterm" name="id391127"></a>
+				<a class="indexterm" name="id391134"></a>
 				In this configuration <code class="literal">winbind</code> resolved SIDs to UIDs and GIDs from
 				the <em class="parameter"><code>idmap uid</code></em> and <em class="parameter"><code>idmap gid</code></em> ranges specified
 				in the <code class="filename">smb.conf</code> file, but instead of using a local winbind IDMAP table, it is stored
 				in an LDAP directory so that all domain member machines (clients and servers) can share
 				a common IDMAP table.
 				</p><p>
-				<a class="indexterm" name="id2627466"></a>
-				<a class="indexterm" name="id2627473"></a>
-				<a class="indexterm" name="id2627480"></a>
+				<a class="indexterm" name="id391170"></a>
+				<a class="indexterm" name="id391177"></a>
+				<a class="indexterm" name="id391184"></a>
 				It is important that all LDAP IDMAP clients use only the master LDAP server because the
 				<em class="parameter"><code>idmap backend</code></em> facility in the <code class="filename">smb.conf</code> file does not correctly
 				handle LDAP redirects.
@@ -247,17 +247,17 @@
 				domain member servers. It is a neat method for assuring that UIDs, GIDs, and the matching
 				SIDs are consistent across all servers.
 				</p><p>
-				<a class="indexterm" name="id2627522"></a>
-				<a class="indexterm" name="id2627529"></a>
+				<a class="indexterm" name="id391222"></a>
+				<a class="indexterm" name="id391228"></a>
 				The use of the LDAP-based passdb backend requires use of the PADL nss_ldap utility or
 				an equivalent. In this situation winbind is used to handle foreign SIDs, that is, SIDs from
 				standalone Windows clients (i.e., not a member of our domain) as well as SIDs from 
 				another domain. The foreign UID/GID is mapped from allocated ranges (idmap uid and idmap gid)
 				in precisely the same manner as when using winbind with a local IDMAP table.
 				</p><p>
-				<a class="indexterm" name="id2627546"></a>
-				<a class="indexterm" name="id2627553"></a>
-				<a class="indexterm" name="id2627560"></a>
+				<a class="indexterm" name="id391242"></a>
+				<a class="indexterm" name="id391249"></a>
+				<a class="indexterm" name="id391256"></a>
 				The nss_ldap tool set can be used to access UIDs and GIDs via LDAP as well as via Active
 				Directory. In order to use Active Directory, it is necessary to modify the ADS schema by
 				installing either the AD4UNIX schema extension or using the Microsoft Services for UNIX
@@ -266,11 +266,11 @@
 				installed to permit the UNIX credentials to be set and managed from the ADS User and Computer
 				Management tool. Each account must be separately UNIX-enabled before the UID and GID data can
 				be used by Samba.
-				</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2627583"></a>Primary Domain Controller</h3></div></div></div><p>
-	<a class="indexterm" name="id2627591"></a>
-	<a class="indexterm" name="id2627598"></a>
-	<a class="indexterm" name="id2627605"></a>
-	<a class="indexterm" name="id2627611"></a>
+				</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id391274"></a>Primary Domain Controller</h3></div></div></div><p>
+	<a class="indexterm" name="id391282"></a>
+	<a class="indexterm" name="id391288"></a>
+	<a class="indexterm" name="id391295"></a>
+	<a class="indexterm" name="id391302"></a>
 	Microsoft Windows domain security systems generate the user and group SID as part
 	of the process of creation of an account. Windows does not have a concept of the UNIX UID or a GID; rather,
 	it has its own type of security descriptor. When Samba is used as a domain controller, it provides a method
@@ -278,50 +278,50 @@
 	adds an RID that is calculated algorithmically from a base value that can be specified
 	in the <code class="filename">smb.conf</code> file, plus twice (2x) the UID or GID. This method is called &#8220;<span class="quote">algorithmic mapping</span>&#8221;.
 	</p><p>
-	<a class="indexterm" name="id2627641"></a>
+	<a class="indexterm" name="id391326"></a>
 	For example, if a user has a UID of 4321, and the algorithmic RID base has a value of 1000, the RID will
 	be <code class="literal">1000 + (2 x 4321) = 9642</code>. Thus, if the domain SID is
 	<code class="literal">S-1-5-21-89238497-92787123-12341112</code>, the resulting SID is
 	<code class="literal">S-1-5-21-89238497-92787123-12341112-9642</code>.
 	</p><p>
-	<a class="indexterm" name="id2627672"></a>
-	<a class="indexterm" name="id2627679"></a>
-	<a class="indexterm" name="id2627686"></a>
-	<a class="indexterm" name="id2627692"></a>
+	<a class="indexterm" name="id391355"></a>
+	<a class="indexterm" name="id391362"></a>
+	<a class="indexterm" name="id391369"></a>
+	<a class="indexterm" name="id391376"></a>
 	The foregoing type of SID is produced by Samba as an automatic function and is either produced on the fly
 	(as is the case when using a <em class="parameter"><code>passdb backend = [tdbsam | smbpasswd]</code></em>), or may be stored
 	as a permanent part of an account in an LDAP-based ldapsam.
 	</p><p>
-	<a class="indexterm" name="id2627713"></a>
-	<a class="indexterm" name="id2627719"></a>
-	<a class="indexterm" name="id2627726"></a>
-	<a class="indexterm" name="id2627733"></a>
-	<a class="indexterm" name="id2627740"></a>
-	<a class="indexterm" name="id2627746"></a>
-	<a class="indexterm" name="id2627753"></a>
-	<a class="indexterm" name="id2627760"></a>
-	<a class="indexterm" name="id2627767"></a>
+	<a class="indexterm" name="id391394"></a>
+	<a class="indexterm" name="id391400"></a>
+	<a class="indexterm" name="id391407"></a>
+	<a class="indexterm" name="id391414"></a>
+	<a class="indexterm" name="id391420"></a>
+	<a class="indexterm" name="id391427"></a>
+	<a class="indexterm" name="id391434"></a>
+	<a class="indexterm" name="id391440"></a>
+	<a class="indexterm" name="id391447"></a>
 	ADS uses a directory schema that can be extended to accommodate additional
 	account attributes such as UIDs and GIDs. The installation of Microsoft Service for UNIX 3.5 will expand
 	the normal ADS schema to include UNIX account attributes. These must of course be managed separately
 	through a snap-in module to the normal ADS account management MMC interface.
 	</p><p>
-	<a class="indexterm" name="id2627783"></a>
-	<a class="indexterm" name="id2627789"></a>
-	<a class="indexterm" name="id2627796"></a>
-	<a class="indexterm" name="id2627803"></a>
+	<a class="indexterm" name="id391460"></a>
+	<a class="indexterm" name="id391467"></a>
+	<a class="indexterm" name="id391473"></a>
+	<a class="indexterm" name="id391480"></a>
 	Security identifiers used within a domain must be managed to avoid conflict and to preserve itegrity.
 	In an NT4 domain context, the PDC manages the distribution of all security credentials to the backup
 	domain controllers (BDCs). At this time the only passdb backend for a Samba domain controller that is suitable
 	for such information is an LDAP backend.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2627818"></a>Backup Domain Controller</h3></div></div></div><p>
-	<a class="indexterm" name="id2627826"></a>
-	<a class="indexterm" name="id2627832"></a>
-	<a class="indexterm" name="id2627839"></a>
-	<a class="indexterm" name="id2627846"></a>
-	<a class="indexterm" name="id2627853"></a>
-	<a class="indexterm" name="id2627860"></a>
-	<a class="indexterm" name="id2627867"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id391492"></a>Backup Domain Controller</h3></div></div></div><p>
+	<a class="indexterm" name="id391500"></a>
+	<a class="indexterm" name="id391506"></a>
+	<a class="indexterm" name="id391513"></a>
+	<a class="indexterm" name="id391520"></a>
+	<a class="indexterm" name="id391527"></a>
+	<a class="indexterm" name="id391534"></a>
+	<a class="indexterm" name="id391540"></a>
 	BDCs have read-only access to security credentials that are stored in LDAP.
 	Changes in user or group account information are passed by the BDC to the PDC. Only the PDC can write
 	changes to the directory.
@@ -330,27 +330,27 @@
 	have access to the master (writable) LDAP server. Samba-3 at this time does not handle LDAP redirects
 	in the IDMAP backend. This means that it is is unsafe to use a slave (replicate) LDAP server with
 	the IDMAP facility.
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2627889"></a>Examples of IDMAP Backend Usage</h2></div></div></div><p>
-<a class="indexterm" name="id2627897"></a>
-<a class="indexterm" name="id2627907"></a>
-<a class="indexterm" name="id2627916"></a>
-<a class="indexterm" name="id2627922"></a>
-<a class="indexterm" name="id2627929"></a>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id391558"></a>Examples of IDMAP Backend Usage</h2></div></div></div><p>
+<a class="indexterm" name="id391566"></a>
+<a class="indexterm" name="id391575"></a>
+<a class="indexterm" name="id391584"></a>
+<a class="indexterm" name="id391591"></a>
+<a class="indexterm" name="id391597"></a>
 Anyone who wishes to use <code class="literal">winbind</code> will find the following example configurations helpful.
 Remember that in the majority of cases <code class="literal">winbind</code> is of primary interest for use with
 domain member servers (DMSs) and domain member clients (DMCs).
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2627952"></a>Default Winbind TDB</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id391619"></a>Default Winbind TDB</h3></div></div></div><p>
 	Two common configurations are used:
 	</p><div class="itemizedlist"><ul type="disc"><li><p>
 		Networks that have an NT4 PDC (with or without BDCs) or a Samba PDC (with or without BDCs).
 		</p></li><li><p>
 		Networks that use MS Windows 200x ADS.
-		</p></li></ul></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2627976"></a>NT4-Style Domains (Includes Samba Domains)</h4></div></div></div><p>
+		</p></li></ul></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id391641"></a>NT4-Style Domains (Includes Samba Domains)</h4></div></div></div><p>
 	<a class="link" href="idmapper.html#idmapnt4dms" title="Example 14.1. NT4 Domain Member Server smb.conf">NT4 Domain Member Server smb.con</a> is a simple example of an NT4 DMS
 	<code class="filename">smb.conf</code> file that shows only the global section.
-	</p><div class="example"><a name="idmapnt4dms"></a><p class="title"><b>Example 14.1. NT4 Domain Member Server smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2628029"></a><em class="parameter"><code>workgroup = MEGANET2</code></em></td></tr><tr><td><a class="indexterm" name="id2628041"></a><em class="parameter"><code>security = DOMAIN</code></em></td></tr><tr><td><a class="indexterm" name="id2628053"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2628064"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2628076"></a><em class="parameter"><code>template primary group = "Domain Users"</code></em></td></tr><tr><td><a class="indexterm" name="id2628088"></a><em class="parameter"><code>template shell = /bin/bash</code></em></td></tr></table></div></div><br class="example-break"><p>
-	<a class="indexterm" name="id2628103"></a>
-	<a class="indexterm" name="id2628110"></a>
+	</p><div class="example"><a name="idmapnt4dms"></a><p class="title"><b>Example 14.1. NT4 Domain Member Server smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id391692"></a><em class="parameter"><code>workgroup = MEGANET2</code></em></td></tr><tr><td><a class="indexterm" name="id391704"></a><em class="parameter"><code>security = DOMAIN</code></em></td></tr><tr><td><a class="indexterm" name="id391715"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id391727"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id391738"></a><em class="parameter"><code>template primary group = "Domain Users"</code></em></td></tr><tr><td><a class="indexterm" name="id391750"></a><em class="parameter"><code>template shell = /bin/bash</code></em></td></tr></table></div></div><br class="example-break"><p>
+	<a class="indexterm" name="id391764"></a>
+	<a class="indexterm" name="id391771"></a>
 	The use of <code class="literal">winbind</code> requires configuration of NSS. Edit the <code class="filename">/etc/nsswitch.conf</code>
 	so it includes the following entries:
 </p><pre class="screen">
@@ -373,37 +373,37 @@
 <code class="prompt">root# </code> net rpc join -UAdministrator%password
 Joined domain MEGANET2.
 </pre><p>
-	<a class="indexterm" name="id2628179"></a>
+	<a class="indexterm" name="id391836"></a>
 	The success of the join can be confirmed with the following command:
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc testjoin
 Join to 'MIDEARTH' is OK
 </pre><p>
 		A failed join would report an error message like the following:
-		<a class="indexterm" name="id2628201"></a>
+		<a class="indexterm" name="id391856"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc testjoin
 [2004/11/05 16:34:12, 0] utils/net_rpc_join.c:net_rpc_join_ok(66)
 Join to domain 'MEGANET2' is not valid
 </pre><p>
 		</p></li><li><p>
-		<a class="indexterm" name="id2628228"></a>
-		<a class="indexterm" name="id2628234"></a>
-		<a class="indexterm" name="id2628241"></a>
+		<a class="indexterm" name="id391882"></a>
+		<a class="indexterm" name="id391888"></a>
+		<a class="indexterm" name="id391895"></a>
 		Start the <code class="literal">nmbd, winbind,</code> and <code class="literal">smbd</code> daemons in the order shown.
-		</p></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2628264"></a>ADS Domains</h4></div></div></div><p>
-	<a class="indexterm" name="id2628272"></a>
-	<a class="indexterm" name="id2628279"></a>
+		</p></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id391918"></a>ADS Domains</h4></div></div></div><p>
+	<a class="indexterm" name="id391925"></a>
+	<a class="indexterm" name="id391932"></a>
 	The procedure for joining an ADS domain is similar to the NT4 domain join, except the <code class="filename">smb.conf</code> file
 	will have the contents shown in <a class="link" href="idmapper.html#idmapadsdms" title="Example 14.2. ADS Domain Member Server smb.conf">ADS Domain Member Server smb.conf</a>
-	</p><div class="example"><a name="idmapadsdms"></a><p class="title"><b>Example 14.2. ADS Domain Member Server smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2628330"></a><em class="parameter"><code>workgroup = BUTTERNET</code></em></td></tr><tr><td><a class="indexterm" name="id2628342"></a><em class="parameter"><code>netbios name = GARGOYLE</code></em></td></tr><tr><td><a class="indexterm" name="id2628353"></a><em class="parameter"><code>realm = BUTTERNET.BIZ</code></em></td></tr><tr><td><a class="indexterm" name="id2628365"></a><em class="parameter"><code>security = ADS</code></em></td></tr><tr><td><a class="indexterm" name="id2628377"></a><em class="parameter"><code>template shell = /bin/bash</code></em></td></tr><tr><td><a class="indexterm" name="id2628389"></a><em class="parameter"><code>idmap uid = 500-10000000</code></em></td></tr><tr><td><a class="indexterm" name="id2628400"></a><em class="parameter"><code>idmap gid = 500-10000000</code></em></td></tr><tr><td><a class="indexterm" name="id2628412"></a><em class="parameter"><code>winbind use default domain = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2628424"></a><em class="parameter"><code>winbind nested groups = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2628436"></a><em class="parameter"><code>printer admin = "BUTTERNET\Domain Admins"</code></em></td></tr></table></div></div><br class="example-break"><p>
-	<a class="indexterm" name="id2628452"></a>
-	<a class="indexterm" name="id2628458"></a>
-	<a class="indexterm" name="id2628465"></a>
-	<a class="indexterm" name="id2628472"></a>
-	<a class="indexterm" name="id2628479"></a>
-	<a class="indexterm" name="id2628486"></a>
-	<a class="indexterm" name="id2628492"></a>
+	</p><div class="example"><a name="idmapadsdms"></a><p class="title"><b>Example 14.2. ADS Domain Member Server smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id391982"></a><em class="parameter"><code>workgroup = BUTTERNET</code></em></td></tr><tr><td><a class="indexterm" name="id391993"></a><em class="parameter"><code>netbios name = GARGOYLE</code></em></td></tr><tr><td><a class="indexterm" name="id392004"></a><em class="parameter"><code>realm = BUTTERNET.BIZ</code></em></td></tr><tr><td><a class="indexterm" name="id392016"></a><em class="parameter"><code>security = ADS</code></em></td></tr><tr><td><a class="indexterm" name="id392027"></a><em class="parameter"><code>template shell = /bin/bash</code></em></td></tr><tr><td><a class="indexterm" name="id392039"></a><em class="parameter"><code>idmap uid = 500-10000000</code></em></td></tr><tr><td><a class="indexterm" name="id392051"></a><em class="parameter"><code>idmap gid = 500-10000000</code></em></td></tr><tr><td><a class="indexterm" name="id392062"></a><em class="parameter"><code>winbind use default domain = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id392074"></a><em class="parameter"><code>winbind nested groups = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id392086"></a><em class="parameter"><code>printer admin = "BUTTERNET\Domain Admins"</code></em></td></tr></table></div></div><br class="example-break"><p>
+	<a class="indexterm" name="id392100"></a>
+	<a class="indexterm" name="id392107"></a>
+	<a class="indexterm" name="id392114"></a>
+	<a class="indexterm" name="id392121"></a>
+	<a class="indexterm" name="id392127"></a>
+	<a class="indexterm" name="id392134"></a>
+	<a class="indexterm" name="id392141"></a>
 	ADS DMS operation requires use of kerberos (KRB). For this to work, the <code class="filename">krb5.conf</code>
 	must be configured. The exact requirements depends on which version of MIT or Heimdal Kerberos is being
 	used. It is sound advice to use only the latest version, which at this time are MIT Kerberos version
@@ -416,7 +416,7 @@
 		Edit the <code class="filename">/etc/nsswitch.conf</code> file as shown above.
 		</p></li><li><p>
 		Execute:
-		<a class="indexterm" name="id2628551"></a>
+		<a class="indexterm" name="id392195"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net ads join -UAdministrator%password
 Joined domain BUTTERNET.
@@ -436,30 +436,30 @@
   ads_connect: No results returned
 Join to domain is not valid
 </pre><p>
-		<a class="indexterm" name="id2628607"></a>
-		<a class="indexterm" name="id2628614"></a>
-		<a class="indexterm" name="id2628621"></a>
-		<a class="indexterm" name="id2628628"></a>
+		<a class="indexterm" name="id392248"></a>
+		<a class="indexterm" name="id392254"></a>
+		<a class="indexterm" name="id392261"></a>
+		<a class="indexterm" name="id392268"></a>
 		The specific error message may differ from the above because it depends on the type of failure that
 		may have occurred. Increase the <em class="parameter"><code>log level</code></em> to 10, repeat the test,
 		and then examine the log files produced to identify the nature of the failure.
 		</p></li><li><p>
 		Start the <code class="literal">nmbd</code>, <code class="literal">winbind</code>, and <code class="literal">smbd</code> daemons in the order shown.
-		</p></li></ol></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2628674"></a>IDMAP_RID with Winbind</h3></div></div></div><p>
-	<a class="indexterm" name="id2628682"></a>
-	<a class="indexterm" name="id2628689"></a>
-	<a class="indexterm" name="id2628695"></a>
-	<a class="indexterm" name="id2628702"></a>
+		</p></li></ol></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id392312"></a>IDMAP_RID with Winbind</h3></div></div></div><p>
+	<a class="indexterm" name="id392320"></a>
+	<a class="indexterm" name="id392326"></a>
+	<a class="indexterm" name="id392333"></a>
+	<a class="indexterm" name="id392340"></a>
 	The <code class="literal">idmap_rid</code> facility is a new tool that, unlike native winbind, creates a
 	predictable mapping of MS Windows SIDs to UNIX UIDs and GIDs. The key benefit of this method
 	of implementing the Samba IDMAP facility is that it eliminates the need to store the IDMAP data
 	in a central place. The downside is that it can be used only within a single ADS domain and
 	is not compatible with trusted domain implementations.
 	</p><p>
-	<a class="indexterm" name="id2628725"></a>
-	<a class="indexterm" name="id2628731"></a>
-	<a class="indexterm" name="id2628738"></a>
-	<a class="indexterm" name="id2628745"></a>
+	<a class="indexterm" name="id392359"></a>
+	<a class="indexterm" name="id392366"></a>
+	<a class="indexterm" name="id392372"></a>
+	<a class="indexterm" name="id392379"></a>
 	This alternate method of SID to UID/GID  mapping can be achieved using the idmap_rid
         plug-in. This plug-in uses the RID of the user SID to derive the UID and GID by adding the
         RID to a base value specified. This utility requires that the parameter
@@ -467,19 +467,19 @@
         with multiple domain environments. The <em class="parameter"><code>idmap uid</code></em> and 
 	<em class="parameter"><code>idmap gid</code></em> ranges must be specified.
 	</p><p>
-	<a class="indexterm" name="id2628778"></a>
-	<a class="indexterm" name="id2628784"></a>
+	<a class="indexterm" name="id392408"></a>
+	<a class="indexterm" name="id392415"></a>
 	The idmap_rid facility can be used both for NT4/Samba-style domains and Active Directory.
 	To use this with an NT4 domain, do not include the <em class="parameter"><code>realm</code></em> parameter; additionally, the
 	method used to join the domain uses the <code class="constant">net rpc join</code> process.
 	</p><p>
 	An example <code class="filename">smb.conf</code> file for and ADS domain environment is shown in <a class="link" href="idmapper.html#idmapadsridDMS" title="Example 14.3. ADS Domain Member smb.conf using idmap_rid">ADS
 	Domain Member smb.conf using idmap_rid</a>.
-	</p><div class="example"><a name="idmapadsridDMS"></a><p class="title"><b>Example 14.3. ADS Domain Member smb.conf using idmap_rid</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2628852"></a><em class="parameter"><code>workgroup = KPAK</code></em></td></tr><tr><td><a class="indexterm" name="id2628864"></a><em class="parameter"><code>netbios name = BIGJOE</code></em></td></tr><tr><td><a class="indexterm" name="id2628875"></a><em class="parameter"><code>realm = CORP.KPAK.COM</code></em></td></tr><tr><td><a class="indexterm" name="id2628887"></a><em class="parameter"><code>server string = Office Server</code></em></td></tr><tr><td><a class="indexterm" name="id2628899"></a><em class="parameter"><code>security = ADS</code></em></td></tr><tr><td><a class="indexterm" name="id2628911"></a><em class="parameter"><code>allow trusted domains = No</code></em></td></tr><tr><td><a class="indexterm" name="id2628923"></a><em class="parameter"><code>idmap backend = idmap_rid:KPAK=500-100000000</code></em></td></tr><tr><td><a class="indexterm" name="id2628935"></a><em class="parameter"><code>idmap uid = 500-100000000</code></em></td></tr><tr><td><a class="indexterm" name="id2628947"></a><em class="parameter"><code>idmap gid = 500-100000000</code></em></td></tr><tr><td><a class="indexterm" name="id2628958"></a><em class="parameter"><code>template shell = /bin/bash</code></em></td></tr><tr><td><a class="indexterm" name="id2628970"></a><em class="parameter"><code>winbind use default domain = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2628982"></a><em class="parameter"><code>winbind enum users = No</code></em></td></tr><tr><td><a class="indexterm" name="id2628994"></a><em class="parameter"><code>winbind enum groups = No</code></em></td></tr><tr><td><a class="indexterm" name="id2629006"></a><em class="parameter"><code>winbind nested groups = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2629018"></a><em class="parameter"><code>printer admin = "Domain Admins"</code></em></td></tr></table></div></div><br class="example-break"><p>
-	<a class="indexterm" name="id2629033"></a>
-	<a class="indexterm" name="id2629040"></a>
-	<a class="indexterm" name="id2629047"></a>
-	<a class="indexterm" name="id2629054"></a>
+	</p><div class="example"><a name="idmapadsridDMS"></a><p class="title"><b>Example 14.3. ADS Domain Member smb.conf using idmap_rid</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id392479"></a><em class="parameter"><code>workgroup = KPAK</code></em></td></tr><tr><td><a class="indexterm" name="id392490"></a><em class="parameter"><code>netbios name = BIGJOE</code></em></td></tr><tr><td><a class="indexterm" name="id392502"></a><em class="parameter"><code>realm = CORP.KPAK.COM</code></em></td></tr><tr><td><a class="indexterm" name="id392513"></a><em class="parameter"><code>server string = Office Server</code></em></td></tr><tr><td><a class="indexterm" name="id392525"></a><em class="parameter"><code>security = ADS</code></em></td></tr><tr><td><a class="indexterm" name="id392536"></a><em class="parameter"><code>allow trusted domains = No</code></em></td></tr><tr><td><a class="indexterm" name="id392548"></a><em class="parameter"><code>idmap backend = idmap_rid:KPAK=500-100000000</code></em></td></tr><tr><td><a class="indexterm" name="id392560"></a><em class="parameter"><code>idmap uid = 500-100000000</code></em></td></tr><tr><td><a class="indexterm" name="id392571"></a><em class="parameter"><code>idmap gid = 500-100000000</code></em></td></tr><tr><td><a class="indexterm" name="id392583"></a><em class="parameter"><code>template shell = /bin/bash</code></em></td></tr><tr><td><a class="indexterm" name="id392595"></a><em class="parameter"><code>winbind use default domain = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id392606"></a><em class="parameter"><code>winbind enum users = No</code></em></td></tr><tr><td><a class="indexterm" name="id392618"></a><em class="parameter"><code>winbind enum groups = No</code></em></td></tr><tr><td><a class="indexterm" name="id392629"></a><em class="parameter"><code>winbind nested groups = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id392641"></a><em class="parameter"><code>printer admin = "Domain Admins"</code></em></td></tr></table></div></div><br class="example-break"><p>
+	<a class="indexterm" name="id392656"></a>
+	<a class="indexterm" name="id392663"></a>
+	<a class="indexterm" name="id392669"></a>
+	<a class="indexterm" name="id392676"></a>
 	In a large domain with many users it is imperative to disable enumeration of users and groups.
 	For example, at a site that has 22,000 users in Active Directory the winbind-based user and
 	group resolution is unavailable for nearly 12 minutes following first startup of 
@@ -488,8 +488,8 @@
 	or groups using the <code class="literal">getent passwd</code> and <code class="literal">getent group</code>
 	commands. It will be possible to perform the lookup for individual users, as shown in the following procedure.
 	</p><p>
-	<a class="indexterm" name="id2629092"></a>
-	<a class="indexterm" name="id2629098"></a>
+	<a class="indexterm" name="id392709"></a>
+	<a class="indexterm" name="id392715"></a>
 	The use of this tool requires configuration of NSS as per the native use of winbind. Edit the
 	<code class="filename">/etc/nsswitch.conf</code> so it has the following parameters:
 </p><pre class="screen">
@@ -515,7 +515,7 @@
 Joined 'BIGJOE' to realm 'CORP.KPAK.COM'
 </pre><p>
 		</p><p>
-		<a class="indexterm" name="id2629178"></a>
+		<a class="indexterm" name="id392790"></a>
 		An invalid or failed join can be detected by executing:
 </p><pre class="screen">
 <code class="prompt">root# </code> net ads testjoin
@@ -531,14 +531,14 @@
 		Start the <code class="literal">nmbd</code>, <code class="literal">winbind</code>, and <code class="literal">smbd</code> daemons in the order shown.
 		</p></li><li><p>
 		Validate the operation of this configuration by executing:
-		<a class="indexterm" name="id2629242"></a>
+		<a class="indexterm" name="id392850"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> getent passwd administrator
 administrator:x:1000:1013:Administrator:/home/BE/administrator:/bin/bash
 </pre><p>
-		</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2629264"></a>IDMAP Storage in LDAP Using Winbind</h3></div></div></div><p>
-	<a class="indexterm" name="id2629272"></a>
-	<a class="indexterm" name="id2629279"></a>
+		</p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id392871"></a>IDMAP Storage in LDAP Using Winbind</h3></div></div></div><p>
+	<a class="indexterm" name="id392879"></a>
+	<a class="indexterm" name="id392885"></a>
 	The storage of IDMAP information in LDAP can be used with both NT4/Samba-3-style domains and
 	ADS domains. OpenLDAP is a commonly used LDAP server for this purpose, although any
 	standards-complying LDAP server can be used. It is therefore possible to deploy this IDMAP
@@ -547,15 +547,15 @@
 	</p><p>
 	An example is for an ADS domain is shown in <a class="link" href="idmapper.html#idmapldapDMS" title="Example 14.4. ADS Domain Member Server using LDAP">ADS Domain Member Server using
 	LDAP</a>.
-	</p><div class="example"><a name="idmapldapDMS"></a><p class="title"><b>Example 14.4. ADS Domain Member Server using LDAP</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2629333"></a><em class="parameter"><code>workgroup = SNOWSHOW</code></em></td></tr><tr><td><a class="indexterm" name="id2629345"></a><em class="parameter"><code>netbios name = GOODELF</code></em></td></tr><tr><td><a class="indexterm" name="id2629357"></a><em class="parameter"><code>realm = SNOWSHOW.COM</code></em></td></tr><tr><td><a class="indexterm" name="id2629368"></a><em class="parameter"><code>server string = Samba Server</code></em></td></tr><tr><td><a class="indexterm" name="id2629380"></a><em class="parameter"><code>security = ADS</code></em></td></tr><tr><td><a class="indexterm" name="id2629392"></a><em class="parameter"><code>log level = 1 ads:10 auth:10 sam:10 rpc:10</code></em></td></tr><tr><td><a class="indexterm" name="id2629404"></a><em class="parameter"><code>ldap admin dn = cn=Manager,dc=SNOWSHOW,dc=COM</code></em></td></tr><tr><td><a class="indexterm" name="id2629416"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr><tr><td><a class="indexterm" name="id2629428"></a><em class="parameter"><code>ldap suffix = dc=SNOWSHOW,dc=COM</code></em></td></tr><tr><td><a class="indexterm" name="id2629440"></a><em class="parameter"><code>idmap backend = ldap:ldap://ldap.snowshow.com</code></em></td></tr><tr><td><a class="indexterm" name="id2629452"></a><em class="parameter"><code>idmap uid = 150000-550000</code></em></td></tr><tr><td><a class="indexterm" name="id2629464"></a><em class="parameter"><code>idmap gid = 150000-550000</code></em></td></tr><tr><td><a class="indexterm" name="id2629476"></a><em class="parameter"><code>template shell = /bin/bash</code></em></td></tr><tr><td><a class="indexterm" name="id2629488"></a><em class="parameter"><code>winbind use default domain = Yes</code></em></td></tr></table></div></div><br class="example-break"><p>
-	<a class="indexterm" name="id2629503"></a>
+	</p><div class="example"><a name="idmapldapDMS"></a><p class="title"><b>Example 14.4. ADS Domain Member Server using LDAP</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id392934"></a><em class="parameter"><code>workgroup = SNOWSHOW</code></em></td></tr><tr><td><a class="indexterm" name="id392946"></a><em class="parameter"><code>netbios name = GOODELF</code></em></td></tr><tr><td><a class="indexterm" name="id392957"></a><em class="parameter"><code>realm = SNOWSHOW.COM</code></em></td></tr><tr><td><a class="indexterm" name="id392969"></a><em class="parameter"><code>server string = Samba Server</code></em></td></tr><tr><td><a class="indexterm" name="id392980"></a><em class="parameter"><code>security = ADS</code></em></td></tr><tr><td><a class="indexterm" name="id392992"></a><em class="parameter"><code>log level = 1 ads:10 auth:10 sam:10 rpc:10</code></em></td></tr><tr><td><a class="indexterm" name="id393004"></a><em class="parameter"><code>ldap admin dn = cn=Manager,dc=SNOWSHOW,dc=COM</code></em></td></tr><tr><td><a class="indexterm" name="id393015"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr><tr><td><a class="indexterm" name="id393027"></a><em class="parameter"><code>ldap suffix = dc=SNOWSHOW,dc=COM</code></em></td></tr><tr><td><a class="indexterm" name="id393038"></a><em class="parameter"><code>idmap backend = ldap:ldap://ldap.snowshow.com</code></em></td></tr><tr><td><a class="indexterm" name="id393050"></a><em class="parameter"><code>idmap uid = 150000-550000</code></em></td></tr><tr><td><a class="indexterm" name="id393062"></a><em class="parameter"><code>idmap gid = 150000-550000</code></em></td></tr><tr><td><a class="indexterm" name="id393073"></a><em class="parameter"><code>template shell = /bin/bash</code></em></td></tr><tr><td><a class="indexterm" name="id393085"></a><em class="parameter"><code>winbind use default domain = Yes</code></em></td></tr></table></div></div><br class="example-break"><p>
+	<a class="indexterm" name="id393100"></a>
 	In the case of an NT4 or Samba-3-style domain the <em class="parameter"><code>realm</code></em> is not used, and the
 	command used to join the domain is <code class="literal">net rpc join</code>. The above example also demonstrates
 	advanced error-reporting techniques that are documented in <a class="link" href="bugreport.html#dbglvl" title="Debug Levels">Reporting Bugs</a>.
 	</p><p>
-	<a class="indexterm" name="id2629537"></a>
-	<a class="indexterm" name="id2629544"></a>
-	<a class="indexterm" name="id2629551"></a>
+	<a class="indexterm" name="id393132"></a>
+	<a class="indexterm" name="id393138"></a>
+	<a class="indexterm" name="id393145"></a>
 	Where MIT kerberos is installed (version 1.3.4 or later), edit the <code class="filename">/etc/krb5.conf</code> 
 	file so it has the following contents:
 </p><pre class="screen">
@@ -610,8 +610,8 @@
 ...
 </pre><p>
 	</p><p>
-	<a class="indexterm" name="id2629634"></a>
-	<a class="indexterm" name="id2629641"></a>
+	<a class="indexterm" name="id393217"></a>
+	<a class="indexterm" name="id393224"></a>
 	You will need the <a class="ulink" href="http://www.padl.com" target="_top">PADL</a> <code class="literal">nss_ldap</code> 
 	tool set for this solution. Configure the <code class="filename">/etc/ldap.conf</code> file so it has 
 	the information needed. The following is an example of a working file:
@@ -674,21 +674,21 @@
 		</p></li><li><p>
 		Start the <code class="literal">nmbd</code>, <code class="literal">winbind</code>, and <code class="literal">smbd</code> daemons in the order shown.
 		</p></li></ol></div><p>
-	<a class="indexterm" name="id2629837"></a>
+	<a class="indexterm" name="id393406"></a>
 	Follow the diagnositic procedures shown earlier in this chapter to identify success or failure of the join.
 	In many cases a failure is indicated by a silent return to the command prompt with no indication of the
 	reason for failure.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2629850"></a>IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</h3></div></div></div><p>
-	<a class="indexterm" name="id2629858"></a>
-	<a class="indexterm" name="id2629865"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id393417"></a>IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</h3></div></div></div><p>
+	<a class="indexterm" name="id393425"></a>
+	<a class="indexterm" name="id393432"></a>
 	The use of this method is messy. The information provided in the following is for guidance only
 	and is very definitely not complete. This method does work; it is used in a number of large sites
 	and has an acceptable level of performance.
 	</p><p>
 	An example <code class="filename">smb.conf</code> file is shown in <a class="link" href="idmapper.html#idmaprfc2307" title="Example 14.5. ADS Domain Member Server using RFC2307bis Schema Extension Date via NSS">ADS Domain Member Server using
 RFC2307bis Schema Extension Date via NSS</a>.
-	</p><div class="example"><a name="idmaprfc2307"></a><p class="title"><b>Example 14.5. ADS Domain Member Server using RFC2307bis Schema Extension Date via NSS</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2629925"></a><em class="parameter"><code>workgroup = BOBBY</code></em></td></tr><tr><td><a class="indexterm" name="id2629936"></a><em class="parameter"><code>realm = BOBBY.COM</code></em></td></tr><tr><td><a class="indexterm" name="id2629948"></a><em class="parameter"><code>security = ADS</code></em></td></tr><tr><td><a class="indexterm" name="id2629960"></a><em class="parameter"><code>idmap uid = 150000-550000</code></em></td></tr><tr><td><a class="indexterm" name="id2629971"></a><em class="parameter"><code>idmap gid = 150000-550000</code></em></td></tr><tr><td><a class="indexterm" name="id2629983"></a><em class="parameter"><code>template shell = /bin/bash</code></em></td></tr><tr><td><a class="indexterm" name="id2629995"></a><em class="parameter"><code>winbind cache time = 5</code></em></td></tr><tr><td><a class="indexterm" name="id2630007"></a><em class="parameter"><code>winbind use default domain = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2630019"></a><em class="parameter"><code>winbind trusted domains only = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2630031"></a><em class="parameter"><code>winbind nested groups = Yes</code></em></td></tr></table></div></div><br class="example-break"><p>
-	<a class="indexterm" name="id2630046"></a>
+	</p><div class="example"><a name="idmaprfc2307"></a><p class="title"><b>Example 14.5. ADS Domain Member Server using RFC2307bis Schema Extension Date via NSS</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td># Global parameters</td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id393487"></a><em class="parameter"><code>workgroup = BOBBY</code></em></td></tr><tr><td><a class="indexterm" name="id393498"></a><em class="parameter"><code>realm = BOBBY.COM</code></em></td></tr><tr><td><a class="indexterm" name="id393510"></a><em class="parameter"><code>security = ADS</code></em></td></tr><tr><td><a class="indexterm" name="id393521"></a><em class="parameter"><code>idmap uid = 150000-550000</code></em></td></tr><tr><td><a class="indexterm" name="id393533"></a><em class="parameter"><code>idmap gid = 150000-550000</code></em></td></tr><tr><td><a class="indexterm" name="id393545"></a><em class="parameter"><code>template shell = /bin/bash</code></em></td></tr><tr><td><a class="indexterm" name="id393556"></a><em class="parameter"><code>winbind cache time = 5</code></em></td></tr><tr><td><a class="indexterm" name="id393568"></a><em class="parameter"><code>winbind use default domain = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id393579"></a><em class="parameter"><code>winbind trusted domains only = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id393591"></a><em class="parameter"><code>winbind nested groups = Yes</code></em></td></tr></table></div></div><br class="example-break"><p>
+	<a class="indexterm" name="id393606"></a>
 	The DMS must be joined to the domain using the usual procedure. Additionally, it is necessary
 	to build and install the PADL nss_ldap tool set. Be sure to build this tool set with the
 	following:
@@ -697,7 +697,7 @@
 make install
 </pre><p> 
 	</p><p>
-	<a class="indexterm" name="id2630067"></a>
+	<a class="indexterm" name="id393624"></a>
 	The following <code class="filename">/etc/nsswitch.conf</code> file contents are required:
 </p><pre class="screen">
 ...
@@ -709,21 +709,21 @@
 ...
 </pre><p>
 	</p><p>
-	<a class="indexterm" name="id2630091"></a>
-	<a class="indexterm" name="id2630098"></a>
+	<a class="indexterm" name="id393647"></a>
+	<a class="indexterm" name="id393653"></a>
 	The <code class="filename">/etc/ldap.conf</code> file must be configured also. Refer to the PADL documentation
 	and source code for nss_ldap to specific instructions.
 	</p><p>
 	The next step involves preparation of the ADS schema. This is briefly discussed in the remaining
 	part of this chapter.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2630120"></a>IDMAP, Active Directory, and MS Services for UNIX 3.5</h4></div></div></div><p>
-		<a class="indexterm" name="id2630128"></a>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id393673"></a>IDMAP, Active Directory, and MS Services for UNIX 3.5</h4></div></div></div><p>
+		<a class="indexterm" name="id393681"></a>
 		The Microsoft Windows Service for UNIX (SFU) version 3.5 is available for free 
 		<a class="ulink" href="http://www.microsoft.com/windows/sfu/" target="_top">download</a>
 		from the Microsoft Web site. You will need to download this tool and install it following
 		Microsoft instructions.
-		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2630147"></a>IDMAP, Active Directory and AD4UNIX</h4></div></div></div><p>
+		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id393697"></a>IDMAP, Active Directory and AD4UNIX</h4></div></div></div><p>
 		Instructions for obtaining and installing the AD4UNIX tool set can be found from the
 		<a class="ulink" href="http://www.geekcomix.com/cgi-bin/classnotes/wiki.pl?LDAP01/An_Alternative_Approach" target="_top">
 		Geekcomix</a> Web site.
-		</p></div></div></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><code class="literal"><sup>[<a name="ftn.id2626444" href="#id2626444" class="literal">4</a>] </sup>DOMINICUS\FJones</code><code class="literal">FRANCISCUS\FJones</code><code class="literal">FJones</code></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="NetCommand.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="optional.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="rights.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 13. Remote and Local Management: The Net Command </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 15. User Rights and Privileges</td></tr></table></div></body></html>
+		</p></div></div></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><code class="literal"><sup>[<a name="ftn.id390211" href="#id390211" class="literal">4</a>] </sup>DOMINICUS\FJones</code><code class="literal">FRANCISCUS\FJones</code><code class="literal">FJones</code></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="NetCommand.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="optional.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="rights.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 13. Remote and Local Management: The Net Command </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 15. User Rights and Privileges</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/access1.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/browsing1.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/cups1.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/cups2.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/domain.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/idmap-gid2sid.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/idmap-sid2gid.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/idmap-sid2uid.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/idmap-store-gid2sid.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/idmap-uid2sid.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/pdftoepsonusb.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/pdftosocket.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/images/trusts1.png
===================================================================
(Binary files differ)

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/index.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/index.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/index.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,50 +1,50 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>The Official Samba 3.2.x HOWTO and Reference Guide</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="next" href="pr01.html" title="About the Cover Artwork"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The Official Samba 3.2.x HOWTO and Reference Guide</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="pr01.html">Next</a></td></tr></table><hr></div><div class="book" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="Samba-HOWTO-Collection"></a>The Official Samba 3.2.x HOWTO and Reference Guide</h1></div><div><div class="authorgroup"><div class="editor"><h4 class="editedby">Edited by</h4><h3 class="editor"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div><div class="editor"><h4 class="editedby">Edited by</h4><h3 class="editor"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div><div class="editor"><h4 class="editedby">Edited by</h4><h3 class="editor"><span class="firstname">Gerald</span> <span class="othername">(Jerry)</span> <span class="surname">Carter</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jerry at samba.org">jerry at samba.org</a>&gt;</code></p></div></div></div></div></div><div><p class="pubdate"></p></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="pr01.html">About the Cover Artwork</a></span></dt><dt><span class="preface"><a href="pr02.html">Attribution</a></span></dt><dt><span class="preface"><a href="pr03.html">Foreword</a></span></dt><dt><span class="preface"><a href="TOSHpreface.html">Preface</a></span></dt><dd><dl><dt><span class="sect1"><a href="TOSHpreface.html#id2572474">Conventions Used</a></span></dt></dl></dd><dt><span class="preface"><a href="IntroSMB.html">Introduction</a></span></dt><dd><dl><dt><span class="sect1"><a href="IntroSMB.html#id2572666">What Is Samba?</a></span></dt><dt><span class="sect1"><a href="IntroSMB.html#id2572723">Why This Book?</a></span></dt><dt><span class="sect1"><a href="IntroSMB.html#id2572826">Book Structure and Layout</a></span></dt></dl></dd><dt><span class="part"><a href="introduction.html">I. General Installation</a></span></dt><dd><dl><dt><span class="chapter"><a href="install.html">1. How to Install and Test SAMBA</a></span></dt><dd><dl><dt><span class="sect1"><a href="install.html#id2573105">Obtaining and Installing Samba</a></span></dt><dt><span class="sect1"><a href="install.html#id2573150">Configuring Samba (smb.conf)</a></span></dt><dd><dl><dt><span class="sect2"><a href="install.html#id2573195">Configuration File Syntax</a></span></dt><dt><span class="sect2"><a href="install.html#tdbdocs">TDB Database File Information</a></span></dt><dt><span class="sect2"><a href="install.html#id2574163">Starting Samba</a></span></dt><dt><span class="sect2"><a href="install.html#id2574356">Example Configuration</a></span></dt><dt><span class="sect2"><a href="install.html#id2574798">SWAT</a></span></dt></dl></dd><dt><span class="sect1"><a href="install.html#id2574859">List Shares Available on the Server</a></span></dt><dt><span class="sect1"><a href="install.html#id2574914">Connect with a UNIX Client</a></span></dt><dt><span class="sect1"><a href="install.html#id2575014">Connect from a Remote SMB Client</a></span></dt><dd><dl><dt><span class="sect2"><a href="install.html#id2575101">What If Things Don't Work?</a></span></dt><dt><span class="sect2"><a href="install.html#id2575146">Still Stuck?</a></span></dt></dl></dd><dt><span class="sect1"><a href="install.html#id2575180">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="install.html#id2575190">Large Number of smbd Processes</a></span></dt><dt><span class="sect2"><a href="install.html#id2575285">Error Message: open_oplock_ipc</a></span></dt><dt><span class="sect2"><a href="install.html#id2575319">&#8220;<span class="quote"><span class="errorname">The network name cannot be found</span></span>&#8221;</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="FastStart.html">2. Fast Start: Cure for Impatience</a></span></dt><dd><dl><dt><span class="sect1"><a href="FastStart.html#id2575468">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="FastStart.html#id2575492">Description of Example Sites</a></span></dt><dt><span class="sect1"><a href="FastStart.html#id2575572">Worked Examples</a></span></dt><dd><dl><dt><span class="sect2"><a href="FastStart.html#id2575590">Standalone Server</a></span></dt><dt><span class="sect2"><a href="FastStart.html#id2577510">Domain Member Server</a></span></dt><dt><span class="sect2"><a href="FastStart.html#id2578435">Domain Controller</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="type.html">II. Server Configuration Basics</a></span></dt><dd><dl><dt><span class="chapter"><a href="ServerType.html">3. Server Types and Security Modes</a></span></dt><dd><dl><dt><span class="sect1"><a href="ServerType.html#id2580765">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="ServerType.html#id2580932">Server Types</a></span></dt><dt><span class="sect1"><a href="ServerType.html#id2581092">Samba Security Modes</a></span></dt><dd><dl><dt><span class="sect2"><a href="ServerType.html#id2581256">User Level Security</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id2581430">Share-Level Security</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id2581638">Domain Security Mode (User-Level Security)</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id2582161">ADS Security Mode (User-Level Security)</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id2582318">Server Security (User Level Security)</a></span></dt></dl></dd><dt><span class="sect1"><a href="ServerType.html#id2582616">Password Checking</a></span></dt><dt><span class="sect1"><a href="ServerType.html#id2582821">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="ServerType.html#id2582844">What Makes Samba a Server?</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id2582881">What Makes Samba a Domain Controller?</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id2582924">What Makes Samba a Domain Member?</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id2582956">Constantly Losing Connections to Password Server</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id2583013">Stand-alone Server is converted to Domain Controller  Now User accounts don't work</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="samba-pdc.html">4. Domain Control</a></span></dt><dd><dl><dt><span class="sect1"><a href="samba-pdc.html#id2583338">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></span></dt><dt><span class="sect1"><a href="samba-pdc.html#id2584572">Basics of Domain Control</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-pdc.html#id2584592">Domain Controller Types</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id2585096">Preparing for Domain Control</a></span></dt></dl></dd><dt><span class="sect1"><a href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a></span></dt><dt><span class="sect1"><a href="samba-pdc.html#id2586348">Samba ADS Domain Control</a></span></dt><dt><span class="sect1"><a href="samba-pdc.html#id2586412">Domain and Network Logon Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-pdc.html#id2586431">Domain Network Logon Service</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id2587021">Security Mode and Master Browsers</a></span></dt></dl></dd><dt><span class="sect1"><a href="samba-pdc.html#id2587294">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-pdc.html#id2587300">&#8220;<span class="quote">$</span>&#8221; Cannot Be Included in Machine Name</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id2587400">Joining Domain Fails Because of Existing Machine Account</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id2587465">The System Cannot Log You On (C000019B)</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id2587541">The Machine Trust Account Is Not Accessible</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id2587660">Account Disabled</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id2587688">Domain Controller Unavailable</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id2587706">Cannot Log onto Domain Member Workstation After Joining Domain</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="samba-bdc.html">5. Backup Domain Control</a></span></dt><dd><dl><dt><span class="sect1"><a href="samba-bdc.html#id2587890">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="samba-bdc.html#id2588303">Essential Background Information</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id2589047">LDAP Configuration Notes</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id2589411">Active Directory Domain Control</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id2589470">What Qualifies a Domain Controller on the Network?</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id2589560">How Does a Workstation find its Domain Controller?</a></span></dt></dl></dd><dt><span class="sect1"><a href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-bdc.html#id2590243">Example Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="samba-bdc.html#id2590700">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-bdc.html#id2590743">Machine Accounts Keep Expiring</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id2590798">Can Samba Be a Backup Domain Controller to an NT4 PDC?</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id2590853">How Do I Replicate the smbpasswd File?</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id2590958">Can I Do This All with LDAP?</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="domain-member.html">6. Domain Membership</a></span></dt><dd><dl><dt><span class="sect1"><a href="domain-member.html#id2591202">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></span></dt><dd><dl><dt><span class="sect2"><a href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id2592325">Managing Domain Machine Accounts using NT4 Server Manager</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id2592605">On-the-Fly Creation of Machine Trust Accounts</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id2592711">Making an MS Windows Workstation or Server a Domain Member</a></span></dt></dl></dd><dt><span class="sect1"><a href="domain-member.html#domain-member-server">Domain Member Server</a></span></dt><dd><dl><dt><span class="sect2"><a href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id2593911">Why Is This Better Than <em class="parameter"><code>security = server</code></em>?</a></span></dt></dl></dd><dt><span class="sect1"><a href="domain-member.html#ads-member">Samba ADS Domain Membership</a></span></dt><dd><dl><dt><span class="sect2"><a href="domain-member.html#id2594193">Configure <code class="filename">smb.conf</code></a></span></dt><dt><span class="sect2"><a href="domain-member.html#id2594384">Configure <code class="filename">/etc/krb5.conf</code></a></span></dt><dt><span class="sect2"><a href="domain-member.html#ads-create-machine-account">Create the Computer Account</a></span></dt><dt><span class="sect2"><a href="domain-member.html#ads-test-server">Testing Server Setup</a></span></dt><dt><span class="sect2"><a href="domain-member.html#ads-test-smbclient">Testing with <span class="application">smbclient</span></a></span></dt><dt><span class="sect2"><a href="domain-member.html#id2595479">Notes</a></span></dt></dl></dd><dt><span class="sect1"><a href="domain-member.html#id2595551">Sharing User ID Mappings between Samba Domain Members</a></span></dt><dt><span class="sect1"><a href="domain-member.html#id2595757">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="domain-member.html#id2595797">Cannot Add Machine Back to Domain</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id2595873">Adding Machine to Domain Fails</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id2596109">I Can't Join a Windows 2003 PDC</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="StandAloneServer.html">7. Standalone Servers</a></span></dt><dd><dl><dt><span class="sect1"><a href="StandAloneServer.html#id2596235">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="StandAloneServer.html#id2596329">Background</a></span></dt><dt><span class="sect1"><a href="StandAloneServer.html#id2596521">Example Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="StandAloneServer.html#RefDocServer">Reference Documentation Server</a></span></dt><dt><span class="sect2"><a href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></span></dt></dl></dd><dt><span class="sect1"><a href="StandAloneServer.html#id2597506">Common Errors</a></span></dt></dl></dd><dt><span class="chapter"><a href="ClientConfig.html">8. MS Windows Network Configuration Guide</a></span></dt><dd><dl><dt><span class="sect1"><a href="ClientConfig.html#id2597573">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="ClientConfig.html#id2597633">Technical Details</a></span></dt><dd><dl><dt><span class="sect2"><a href="ClientConfig.html#id2597677">TCP/IP Configuration</a></span></dt><dt><span class="sect2"><a href="ClientConfig.html#id2599448">Joining a Domain: Windows 2000/XP Professional</a></span></dt><dt><span class="sect2"><a href="ClientConfig.html#id2599975">Domain Logon Configuration: Windows 9x/Me</a></span></dt></dl></dd><dt><span class="sect1"><a href="ClientConfig.html#id2600420">Common Errors</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="optional.html">III. Advanced Configuration</a></span></dt><dd><dl><dt><span class="chapter"><a href="ChangeNotes.html">9. Important and Critical Change Notes for the Samba 3.x Series</a></span></dt><dd><dl><dt><span class="sect1"><a href="ChangeNotes.html#id2600657">Important Samba-3.2.x Change Notes</a></span></dt><dt><span class="sect1"><a href="ChangeNotes.html#id2600668">Important Samba-3.0.x Change Notes</a></span></dt><dd><dl><dt><span class="sect2"><a href="ChangeNotes.html#id2600728">User and Group Changes</a></span></dt><dt><span class="sect2"><a href="ChangeNotes.html#id2601039">Essential Group Mappings</a></span></dt><dt><span class="sect2"><a href="ChangeNotes.html#id2601160">Passdb Changes</a></span></dt><dt><span class="sect2"><a href="ChangeNotes.html#id2601219">Group Mapping Changes in Samba-3.0.23</a></span></dt><dt><span class="sect2"><a href="ChangeNotes.html#id2601340">LDAP Changes in Samba-3.0.23</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="NetworkBrowsing.html">10. Network Browsing</a></span></dt><dd><dl><dt><span class="sect1"><a href="NetworkBrowsing.html#id2601603">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="NetworkBrowsing.html#id2601786">What Is Browsing?</a></span></dt><dt><span class="sect1"><a href="NetworkBrowsing.html#netdiscuss">Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2602859">TCP/IP without NetBIOS</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#adsdnstech">DNS and Active Directory</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id2603410">How Browsing Functions</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2604354">Domain Browsing Configuration</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2604955">Making Samba the Domain Master</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2605195">Note about Broadcast Addresses</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2605217">Multiple Interfaces</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2605403">Use of the Remote Announce Parameter</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2605543">Use of the Remote Browse Sync Parameter</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id2605636">WINS: The Windows Internetworking Name Server</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id2605907">WINS Server Configuration</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2606228">WINS Replication</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2606281">Static WINS Entries</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id2606512">Helpful Hints</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id2606524">Windows Networking Protocols</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2606674">Name Resolution Order</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id2606877">Technical Overview of Browsing</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id2606970">Browsing Support in Samba</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2607167">Problem Resolution</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2607418">Cross-Subnet Browsing</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id2608431">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id2608457">Flushing the Samba NetBIOS Name Cache</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2608530">Server Resources Cannot Be Listed</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2608579">I Get an "<span class="errorname">Unable to browse the network</span>" Error</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2608626">Browsing of Shares and Directories is Very Slow</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2608826">Invalid Cached Share References Affects Network Browsing</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="passdb.html">11. Account Information Databases</a></span></dt><dd><dl><dt><span class="sect1"><a href="passdb.html#id2609320">Features and Benefits</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id2609356">Backward Compatibility Account Storage Systems</a></span></dt><dt><span class="sect2"><a href="passdb.html#id2609540">New Account Storage Systems</a></span></dt></dl></dd><dt><span class="sect1"><a href="passdb.html#passdbtech">Technical Information</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id2610108">Important Notes About Security</a></span></dt><dt><span class="sect2"><a href="passdb.html#id2610628">Mapping User Identifiers between MS Windows and UNIX</a></span></dt><dt><span class="sect2"><a href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a></span></dt><dt><span class="sect2"><a href="passdb.html#id2611176">Comments Regarding LDAP</a></span></dt><dt><span class="sect2"><a href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a></span></dt></dl></dd><dt><span class="sect1"><a href="passdb.html#acctmgmttools">Account Management Tools</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id2612037">The <code class="literal">smbpasswd</code> Tool</a></span></dt><dt><span class="sect2"><a href="passdb.html#pdbeditthing">The <code class="literal">pdbedit</code> Tool</a></span></dt></dl></dd><dt><span class="sect1"><a href="passdb.html#id2614558">Password Backends</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id2614612">Plaintext</a></span></dt><dt><span class="sect2"><a href="passdb.html#id2614688">smbpasswd: Encrypted Password Database</a></span></dt><dt><span class="sect2"><a href="passdb.html#id2614953">tdbsam</a></span></dt><dt><span class="sect2"><a href="passdb.html#id2615111">ldapsam</a></span></dt></dl></dd><dt><span class="sect1"><a href="passdb.html#id2617645">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id2617650">Users Cannot Logon</a></span></dt><dt><span class="sect2"><a href="passdb.html#id2617688">Configuration of <em class="parameter"><code>auth methods</code></em></a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="groupmapping.html">12. Group Mapping: MS Windows and UNIX</a></span></dt><dd><dl><dt><span class="sect1"><a href="groupmapping.html#id2617939">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="groupmapping.html#id2618354">Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="groupmapping.html#id2618690">Warning: User Private Group Problems</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id2619324">Important Administrative Information</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id2619564">Default Users, Groups, and Relative Identifiers</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id2620187">Example Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="groupmapping.html#id2620264">Configuration Scripts</a></span></dt><dd><dl><dt><span class="sect2"><a href="groupmapping.html#id2620275">Sample <code class="filename">smb.conf</code> Add Group Script</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id2620447">Script to Configure Group Mapping</a></span></dt></dl></dd><dt><span class="sect1"><a href="groupmapping.html#id2620574">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="groupmapping.html#id2620587">Adding Groups Fails</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id2620674">Adding Domain Users to the Workstation Power Users Group</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="NetCommand.html">13. Remote and Local Management: The Net Command</a></span></dt><dd><dl><dt><span class="sect1"><a href="NetCommand.html#id2621069">Overview</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id2621363">Administrative Tasks and Methods</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id2621445">UNIX and Windows Group Management</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#id2621603">Adding, Renaming, or Deletion of Group Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#grpmemshipchg">Manipulating Group Memberships</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#nestedgrpmgmgt">Nested Group Support</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#id2622967">UNIX and Windows User Management</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#sbeuseraddn">Adding User Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id2623179">Deletion of User Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id2623227">Managing User Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id2623295">User Mapping</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#id2623379">Administering User Rights and Privileges</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id2623733">Managing Trust Relationships</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#id2623749">Machine Trust Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id2624117">Interdomain Trusts</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#id2624351">Managing Security Identifiers (SIDS)</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id2624573">Share Management</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#id2624619">Creating, Editing, and Removing Shares</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id2624807">Creating and Changing Share ACLs</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id2624837">Share, Directory, and File Migration</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id2625466">Printer Migration</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#id2625716">Controlling Open Files</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id2625736">Session and Connection Management</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id2625801">Printers and ADS</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id2625917">Manipulating the Samba Cache</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id2625934">Managing IDMAP UID/SID Mappings</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#id2625978">Creating an IDMAP Database Dump File</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id2626014">Restoring the IDMAP Database Dump File</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#netmisc1">Other Miscellaneous Operations</a></span></dt></dl></dd><dt><span class="chapter"><a href="idmapper.html">14. Identity Mapping (IDMAP)</a></span></dt><dd><dl><dt><span class="sect1"><a href="idmapper.html#id2626535">Samba Server Deployment Types and IDMAP</a></span></dt><dd><dl><dt><span class="sect2"><a href="idmapper.html#id2626560">Standalone Samba Server</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id2627583">Primary Domain Controller</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id2627818">Backup Domain Controller</a></span></dt></dl></dd><dt><span class="sect1"><a href="idmapper.html#id2627889">Examples of IDMAP Backend Usage</a></span></dt><dd><dl><dt><span class="sect2"><a href="idmapper.html#id2627952">Default Winbind TDB</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id2628674">IDMAP_RID with Winbind</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id2629264">IDMAP Storage in LDAP Using Winbind</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id2629850">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="rights.html">15. User Rights and Privileges</a></span></dt><dd><dl><dt><span class="sect1"><a href="rights.html#id2630518">Rights Management Capabilities</a></span></dt><dd><dl><dt><span class="sect2"><a href="rights.html#id2630793">Using the &#8220;<span class="quote">net rpc rights</span>&#8221; Utility</a></span></dt><dt><span class="sect2"><a href="rights.html#id2631138">Description of Privileges</a></span></dt><dt><span class="sect2"><a href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></span></dt></dl></dd><dt><span class="sect1"><a href="rights.html#id2631943">The Administrator Domain SID</a></span></dt><dt><span class="sect1"><a href="rights.html#id2632120">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="rights.html#id2632126">What Rights and Privileges Will Permit Windows Client Administration?</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="AccessControls.html">16. File, Directory, and Share Access Controls</a></span></dt><dd><dl><dt><span class="sect1"><a href="AccessControls.html#id2632624">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="AccessControls.html#id2632819">File System Access Controls</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id2632834">MS Windows NTFS Comparison with UNIX File Systems</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2633169">Managing Directories</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2633292">File and Directory Access Control</a></span></dt></dl></dd><dt><span class="sect1"><a href="AccessControls.html#id2633958">Share Definition Access Controls</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id2633991">User- and Group-Based Controls</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2634357">File and Directory Permissions-Based Controls</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2634693">Miscellaneous Controls</a></span></dt></dl></dd><dt><span class="sect1"><a href="AccessControls.html#id2635030">Access Controls on Shares</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id2635178">Share Permissions Management</a></span></dt></dl></dd><dt><span class="sect1"><a href="AccessControls.html#id2635531">MS Windows Access Control Lists and UNIX Interoperability</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id2635537">Managing UNIX Permissions Using NT Security Dialogs</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2635584">Viewing File Security on a Samba Share</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2635654">Viewing File Ownership</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2635798">Viewing File or Directory Permissions</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2636013">Modifying File or Directory Permissions</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2636170">Interaction with the Standard Samba &#8220;<span class="quote">create mask</span>&#8221; Parameters</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2636539">Interaction with the Standard Samba File Attribute Mapping</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2636612">Windows NT/200X ACLs and POSIX ACLs Limitations</a></span></dt></dl></dd><dt><span class="sect1"><a href="AccessControls.html#id2637030">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id2637042">Users Cannot Write to a Public Share</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2637364">File Operations Done as <span class="emphasis"><em>root</em></span> with <span class="emphasis"><em>force user</em></span> Set</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2637410">MS Word with Samba Changes Owner of File</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="locking.html">17. File and Record Locking</a></span></dt><dd><dl><dt><span class="sect1"><a href="locking.html#id2637637">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="locking.html#id2637734">Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="locking.html#id2637992">Opportunistic Locking Overview</a></span></dt></dl></dd><dt><span class="sect1"><a href="locking.html#id2638966">Samba Oplocks Control</a></span></dt><dd><dl><dt><span class="sect2"><a href="locking.html#id2639060">Example Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="locking.html#id2639474">MS Windows Oplocks and Caching Controls</a></span></dt><dd><dl><dt><span class="sect2"><a href="locking.html#id2639661">Workstation Service Entries</a></span></dt><dt><span class="sect2"><a href="locking.html#id2639683">Server Service Entries</a></span></dt></dl></dd><dt><span class="sect1"><a href="locking.html#id2639749">Persistent Data Corruption</a></span></dt><dt><span class="sect1"><a href="locking.html#id2639774">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="locking.html#id2639842">locking.tdb Error Messages</a></span></dt><dt><span class="sect2"><a href="locking.html#id2639872">Problems Saving Files in MS Office on Windows XP</a></span></dt><dt><span class="sect2"><a href="locking.html#id2639897">Long Delays Deleting Files over Network with XP SP1</a></span></dt></dl></dd><dt><span class="sect1"><a href="locking.html#id2639928">Additional Reading</a></span></dt></dl></dd><dt><span class="chapter"><a href="securing-samba.html">18. Securing Samba</a></span></dt><dd><dl><dt><span class="sect1"><a href="securing-samba.html#id2640103">Introduction</a></span></dt><dt><span class="sect1"><a href="securing-samba.html#id2640202">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="securing-samba.html#id2640348">Technical Discussion of Protective Measures and Issues</a></span></dt><dd><dl><dt><span class="sect2"><a href="securing-samba.html#id2640364">Using Host-Based Protection</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id2640518">User-Based Protection</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id2640578">Using Interface Protection</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#firewallports">Using a Firewall</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id2640934">Using IPC$ Share-Based Denials </a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id2641078">NTLMv2 Security</a></span></dt></dl></dd><dt><span class="sect1"><a href="securing-samba.html#id2641132">Upgrading Samba</a></span></dt><dt><span class="sect1"><a href="securing-samba.html#id2641176">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="securing-samba.html#id2641192">Smbclient Works on Localhost, but the Network Is Dead</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id2641220">Why Can Users Access Other Users' Home Directories?</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="InterdomainTrusts.html">19. Interdomain Trust Relationships</a></span></dt><dd><dl><dt><span class="sect1"><a href="InterdomainTrusts.html#id2641780">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a></span></dt><dt><span class="sect1"><a href="InterdomainTrusts.html#id2642130">Native MS Windows NT4 Trusts Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="InterdomainTrusts.html#id2642166">Creating an NT4 Domain Trust</a></span></dt><dt><span class="sect2"><a href="InterdomainTrusts.html#id2642263">Completing an NT4 Domain Trust</a></span></dt><dt><span class="sect2"><a href="InterdomainTrusts.html#id2642348">Interdomain Trust Facilities</a></span></dt></dl></dd><dt><span class="sect1"><a href="InterdomainTrusts.html#id2642557">Configuring Samba NT-Style Domain Trusts</a></span></dt><dd><dl><dt><span class="sect2"><a href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></span></dt><dt><span class="sect2"><a href="InterdomainTrusts.html#id2642897">Samba as the Trusting Domain</a></span></dt></dl></dd><dt><span class="sect1"><a href="InterdomainTrusts.html#id2643094">NT4-Style Domain Trusts with Windows 2000</a></span></dt><dt><span class="sect1"><a href="InterdomainTrusts.html#id2643243">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="InterdomainTrusts.html#id2643256">Browsing of Trusted Domain Fails</a></span></dt><dt><span class="sect2"><a href="InterdomainTrusts.html#id2643311">Problems with LDAP ldapsam and Older Versions of smbldap-tools</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="msdfs.html">20. Hosting a Microsoft Distributed File System Tree</a></span></dt><dd><dl><dt><span class="sect1"><a href="msdfs.html#id2643489">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="msdfs.html#id2643901">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="msdfs.html#id2643934">MSDFS UNIX Path Is Case-Critical</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="classicalprinting.html">21. Classical Printing Support</a></span></dt><dd><dl><dt><span class="sect1"><a href="classicalprinting.html#id2644133">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id2644356">Technical Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2644515">Client to Samba Print Job Processing</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2644574">Printing-Related Configuration Parameters</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id2644675">Simple Print Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2644958">Verifying Configuration with <code class="literal">testparm</code></a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2645155">Rapid Configuration Validation</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id2645543">Extended Printing Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2645998">Detailed Explanation Settings</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2648726">Point'n'Print Client Drivers on Samba Servers</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2648895">The Obsoleted [printer$] Section</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2649017">Creating the [print$] Share</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2649234">[print$] Stanza Parameters</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2649554">The [print$] Share Directory</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id2649696">Installing Drivers into [print$]</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2649789">Add Printer Wizard Driver Installation</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#inst-rpc">Installing Print Drivers Using <code class="literal">rpcclient</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id2651729">Client Driver Installation Procedure</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2651745">First Client Driver Installation</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#prt-modeset">Setting Device Modes on New Printers</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2578531">Additional Client Driver Installation</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2578650">Always Make First Client Connection as root or &#8220;<span class="quote">printer admin</span>&#8221;</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id2652868">Other Gotchas</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2652888">Setting Default Print Options for Client Drivers</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2653255">Supporting Large Numbers of Printers</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2653512">Adding New Printers with the Windows NT APW</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2653771">Error Message: &#8220;<span class="quote">Cannot connect under a different Name</span>&#8221;</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2653885">Take Care When Assembling Driver Files</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2654194">Samba and Printer Ports</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2654303">Avoiding Common Client Driver Misconfiguration</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id2654341">The Imprints Toolset</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2654398">What Is Imprints?</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2654432">Creating Printer Driver Packages</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2654447">The Imprints Server</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2654464">The Installation Client</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id2654598">Adding Network Printers without User Interaction</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id2654869">The <code class="literal">addprinter</code> Command</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id2654908">Migration of Classical Printing to Samba</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id2655057">Publishing Printer Information in Active Directory or LDAP</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id2655086">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2655092">I Give My Root Password but I Do Not Get Access</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2655133">My Print Jobs Get Spooled into the Spooling Directory, but Then Get Lost</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="CUPS-printing.html">22. CUPS Printing Support</a></span></dt><dd><dl><dt><span class="sect1"><a href="CUPS-printing.html#id2655275">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2655281">Features and Benefits</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2655341">Overview</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2655466">Basic CUPS Support Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2655581">Linking smbd with libcups.so</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2655828">Simple <code class="filename">smb.conf</code> Settings for CUPS</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2656061">More Complex CUPS <code class="filename">smb.conf</code> Settings</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2656439">Advanced Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2656456">Central Spooling vs. &#8220;<span class="quote">Peer-to-Peer</span>&#8221; Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2656507">Raw Print Serving: Vendor Drivers on Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2656742">Installation of Windows Client Drivers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#cups-raw">Explicitly Enable &#8220;<span class="quote">raw</span>&#8221; Printing for <span class="emphasis"><em>application/octet-stream</em></span></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2657029">Driver Upload Methods</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2657150">Advanced Intelligent Printing with PostScript Driver Download</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#gdipost">GDI on Windows, PostScript on UNIX</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2657342">Windows Drivers, GDI, and EMF</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2657520">UNIX Printfile Conversion and GUI Basics</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#post-and-ghost">PostScript and Ghostscript</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2657878">Ghostscript: The Software RIP for Non-PostScript Printers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2658032">PostScript Printer Description (PPD) Specification</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2658122">Using Windows-Formatted Vendor PPDs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2658242">CUPS Also Uses PPDs for Non-PostScript Printers</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2658281">The CUPS Filtering Architecture</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2658945">MIME Type Conversion Rules</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2659153">Filtering  Overview</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2659310">Prefilters</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2659497">pstops</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2659665">pstoraster</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2659934">imagetops and imagetoraster</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2660019">rasterto [printers specific]</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2660239">CUPS Backends</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2660577">The Role of <em class="parameter"><code>cupsomatic/foomatic</code></em></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2660813">The Complete Picture</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2660826"><code class="filename">mime.convs</code></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2660894">&#8220;<span class="quote">Raw</span>&#8221; Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2661002">application/octet-stream Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2661282">PostScript Printer Descriptions for Non-PostScript Printers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2661565"><span class="emphasis"><em>cupsomatic/foomatic-rip</em></span> Versus <span class="emphasis"><em>Native CUPS</em></span> Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2661902">Examples for Filtering Chains</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2662330">Sources of CUPS Drivers/PPDs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2662453">Printing with Interface Scripts</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2662547">Network Printing (Purely Windows)</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2662564">From Windows Clients to an NT Print Server</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2662627">Driver Execution on the Client</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2662698">Driver Execution on the Server</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2662803">Network Printing (Windows Clients and UNIX/Samba Print
-Servers)</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2662821">From Windows Clients to a CUPS/Samba Print Server</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2663012">Samba Receiving Job-Files and Passing Them to CUPS</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2663091">Network PostScript RIP</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2663181">PPDs for Non-PS Printers on UNIX</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2663226">PPDs for Non-PS Printers on Windows</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2663294">Windows Terminal Servers (WTS) as CUPS Clients</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2663308">Printer Drivers Running in &#8220;<span class="quote">Kernel Mode</span>&#8221; Cause Many
-Problems</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2663347">Workarounds Impose Heavy Limitations</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2663364">CUPS: A &#8220;<span class="quote">Magical Stone</span>&#8221;?</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2663407">PostScript Drivers with No Major Problems, Even in Kernel
-Mode</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2663495">Configuring CUPS for Driver Download</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2663517"><span class="emphasis"><em>cupsaddsmb</em></span>: The Unknown Utility</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2663615">Prepare Your <code class="filename">smb.conf</code> for <code class="literal">cupsaddsmb</code></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2663896">CUPS &#8220;<span class="quote">PostScript Driver for Windows NT/200x/XP</span>&#8221;</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2664135">Recognizing Different Driver Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2664253">Acquiring the Adobe Driver Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2664279">ESP Print Pro PostScript Driver for Windows NT/200x/XP</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2664341">Caveats to Be Considered</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2664641">Windows CUPS PostScript Driver Versus Adobe Driver</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2664859">Run cupsaddsmb (Quiet Mode)</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2664999">Run cupsaddsmb with Verbose Output</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2665190">Understanding cupsaddsmb</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2665335">How to Recognize If cupsaddsmb Completed Successfully</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2665457">cupsaddsmb with a Samba PDC</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2665538">cupsaddsmb Flowchart</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2665619">Installing the PostScript Driver on a Client</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#cups-avoidps1">Avoiding Critical PostScript Driver Settings on the Client</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2665854">Installing PostScript Driver Files Manually Using rpcclient</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2666028">A Check of the rpcclient man Page</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2666199">Understanding the rpcclient man Page</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2666304">Producing an Example by Querying a Windows Box</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2666436">Requirements for adddriver and setdriver to Succeed</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2666661">Manual Driver Installation in 15 Steps</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2667620">Troubleshooting Revisited</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2667763">The Printing <code class="filename">*.tdb</code> Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2667965">Trivial Database Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2668033">Binary Format</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2668099">Losing <code class="filename">*.tdb</code> Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2668150">Using <code class="literal">tdbbackup</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2668269">CUPS Print Drivers from Linuxprinting.org</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2668444">foomatic-rip and Foomatic Explained</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2669256">foomatic-rip and Foomatic PPD Download and Installation</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2669728">Page Accounting with CUPS</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2669763">Setting Up Quotas</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2669817">Correct and Incorrect Accounting</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2669864">Adobe and CUPS PostScript Drivers for Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2670005">The page_log File Syntax</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2670149">Possible Shortcomings</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2670215">Future Developments</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2670255">Other Accounting Tools</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2670269">Additional Material</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id2670486">Autodeletion or Preservation of CUPS Spool Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2670562">CUPS Configuration Settings Explained</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2670647">Preconditions</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2670786">Manual Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2670834">Printing from CUPS to Windows-Attached Printers</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id2671129">More CUPS Filtering Chains</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id2671241">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2671246">Windows 9x/Me Client Can't Install Driver</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#root-ask-loop">&#8220;<span class="quote">cupsaddsmb</span>&#8221; Keeps Asking for Root Password in Never-ending Loop</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671323">&#8220;<span class="quote">cupsaddsmb</span>&#8221; or &#8220;<span class="quote">rpcclient addriver</span>&#8221; Emit Error</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671361">&#8220;<span class="quote">cupsaddsmb</span>&#8221; Errors</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671435">Client Can't Connect to Samba Printer</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671459">New Account Reconnection from Windows 200x/XP Troubles</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671551">Avoid Being Connected to the Samba Server as the Wrong User</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671602">Upgrading to CUPS Drivers from Adobe Drivers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671639">Can't Use &#8220;<span class="quote">cupsaddsmb</span>&#8221; on Samba Server, Which Is a PDC</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671675">Deleted Windows 200x Printer Driver Is Still Shown</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671710">Windows 200x/XP Local Security Policies</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671743">Administrator Cannot Install Printers for All Local Users</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671784">Print Change, Notify Functions on NT Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671810">Windows XP SP1</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671856">Print Options for All Users Can't Be Set on Windows 200x/XP</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2672139">Most Common Blunders in Driver Settings on Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2672194"><code class="literal">cupsaddsmb</code> Does Not Work with Newly Installed Printer</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2672244">Permissions on <code class="filename">/var/spool/samba/</code> Get Reset After Each Reboot</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2672342">Print Queue Called &#8220;<span class="quote">lp</span>&#8221; Mishandles Print Jobs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2672412">Location of Adobe PostScript Driver Files for &#8220;<span class="quote">cupsaddsmb</span>&#8221;</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2672465">Overview of the CUPS Printing Processes</a></span></dt></dl></dd><dt><span class="chapter"><a href="VFS.html">23. Stackable VFS modules</a></span></dt><dd><dl><dt><span class="sect1"><a href="VFS.html#id2672652">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="VFS.html#id2672690">Discussion</a></span></dt><dt><span class="sect1"><a href="VFS.html#id2673086">Included Modules</a></span></dt><dd><dl><dt><span class="sect2"><a href="VFS.html#id2673092">audit</a></span></dt><dt><span class="sect2"><a href="VFS.html#id2673133">default_quota</a></span></dt><dt><span class="sect2"><a href="VFS.html#id2673350">extd_audit</a></span></dt><dt><span class="sect2"><a href="VFS.html#fakeperms">fake_perms</a></span></dt><dt><span class="sect2"><a href="VFS.html#id2673676">recycle</a></span></dt><dt><span class="sect2"><a href="VFS.html#id2674073">netatalk</a></span></dt><dt><span class="sect2"><a href="VFS.html#id2674123">shadow_copy</a></span></dt></dl></dd><dt><span class="sect1"><a href="VFS.html#id2675024">VFS Modules Available Elsewhere</a></span></dt><dd><dl><dt><span class="sect2"><a href="VFS.html#id2675049">DatabaseFS</a></span></dt><dt><span class="sect2"><a href="VFS.html#id2675109">vscan</a></span></dt><dt><span class="sect2"><a href="VFS.html#id2675148">vscan-clamav</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="winbind.html">24. Winbind: Use of Domain Accounts</a></span></dt><dd><dl><dt><span class="sect1"><a href="winbind.html#id2675430">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="winbind.html#id2675773">Introduction</a></span></dt><dt><span class="sect1"><a href="winbind.html#id2675862">What Winbind Provides</a></span></dt><dd><dl><dt><span class="sect2"><a href="winbind.html#id2676016">Target Uses</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2676061">Handling of Foreign SIDs</a></span></dt></dl></dd><dt><span class="sect1"><a href="winbind.html#id2676186">How Winbind Works</a></span></dt><dd><dl><dt><span class="sect2"><a href="winbind.html#id2676237">Microsoft Remote Procedure Calls</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2676324">Microsoft Active Directory Services</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2676371">Name Service Switch</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2676603">Pluggable Authentication Modules</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2676758">User and Group ID Allocation</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2676847">Result Caching</a></span></dt></dl></dd><dt><span class="sect1"><a href="winbind.html#id2676904">Installation and Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="winbind.html#id2676910">Introduction</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2677024">Requirements</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2677176">Testing Things Out</a></span></dt></dl></dd><dt><span class="sect1"><a href="winbind.html#id2679639">Conclusion</a></span></dt><dt><span class="sect1"><a href="winbind.html#id2679688">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="winbind.html#id2679730">NSCD Problem Warning</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2679766">Winbind Is Not Resolving Users and Groups</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="AdvancedNetworkManagement.html">25. Advanced Network Management</a></span></dt><dd><dl><dt><span class="sect1"><a href="AdvancedNetworkManagement.html#id2679955">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="AdvancedNetworkManagement.html#id2679982">Remote Server Administration</a></span></dt><dt><span class="sect1"><a href="AdvancedNetworkManagement.html#id2680125">Remote Desktop Management</a></span></dt><dd><dl><dt><span class="sect2"><a href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a></span></dt><dt><span class="sect2"><a href="AdvancedNetworkManagement.html#id2680529">Remote Management with ThinLinc</a></span></dt></dl></dd><dt><span class="sect1"><a href="AdvancedNetworkManagement.html#id2680714">Network Logon Script Magic</a></span></dt><dd><dl><dt><span class="sect2"><a href="AdvancedNetworkManagement.html#id2680939">Adding Printers without User Intervention</a></span></dt><dt><span class="sect2"><a href="AdvancedNetworkManagement.html#id2680982">Limiting Logon Connections</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="PolicyMgmt.html">26. System and Account Policies</a></span></dt><dd><dl><dt><span class="sect1"><a href="PolicyMgmt.html#id2681125">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="PolicyMgmt.html#id2681239">Creating and Managing System Policies</a></span></dt><dd><dl><dt><span class="sect2"><a href="PolicyMgmt.html#id2681428">Windows 9x/ME Policies</a></span></dt><dt><span class="sect2"><a href="PolicyMgmt.html#id2681565">Windows NT4-Style Policy Files</a></span></dt><dt><span class="sect2"><a href="PolicyMgmt.html#id2681787">MS Windows 200x/XP Professional Policies</a></span></dt></dl></dd><dt><span class="sect1"><a href="PolicyMgmt.html#id2682235">Managing Account/User Policies</a></span></dt><dt><span class="sect1"><a href="PolicyMgmt.html#id2682462">Management Tools</a></span></dt><dd><dl><dt><span class="sect2"><a href="PolicyMgmt.html#id2682475">Samba Editreg Toolset</a></span></dt><dt><span class="sect2"><a href="PolicyMgmt.html#id2682557">Windows NT4/200x</a></span></dt><dt><span class="sect2"><a href="PolicyMgmt.html#id2682597">Samba PDC</a></span></dt></dl></dd><dt><span class="sect1"><a href="PolicyMgmt.html#id2682662">System Startup and Logon Processing Overview</a></span></dt><dt><span class="sect1"><a href="PolicyMgmt.html#id2682820">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="PolicyMgmt.html#id2682831">Policy Does Not Work</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ProfileMgmt.html">27. Desktop Profile Management</a></span></dt><dd><dl><dt><span class="sect1"><a href="ProfileMgmt.html#id2682916">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="ProfileMgmt.html#id2682966">Roaming Profiles</a></span></dt><dd><dl><dt><span class="sect2"><a href="ProfileMgmt.html#id2683020">Samba Configuration for Profile Handling</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2683625">Windows Client Profile Configuration Information</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2684970">User Profile Hive Cleanup Service</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2685003">Sharing Profiles between Windows 9x/Me and NT4/200x/XP Workstations</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2685102">Profile Migration from Windows NT4/200x Server to Samba</a></span></dt></dl></dd><dt><span class="sect1"><a href="ProfileMgmt.html#id2685453">Mandatory Profiles</a></span></dt><dt><span class="sect1"><a href="ProfileMgmt.html#id2685594">Creating and Managing Group Profiles</a></span></dt><dt><span class="sect1"><a href="ProfileMgmt.html#id2685664">Default Profile for Windows Users</a></span></dt><dd><dl><dt><span class="sect2"><a href="ProfileMgmt.html#id2685694">MS Windows 9x/Me</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2685846">MS Windows NT4 Workstation</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2686408">MS Windows 200x/XP</a></span></dt></dl></dd><dt><span class="sect1"><a href="ProfileMgmt.html#id2686913">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="ProfileMgmt.html#id2686924">Configuring Roaming Profiles for a Few Users or Groups</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2686985">Cannot Use Roaming Profiles</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2687156">Changing the Default Profile</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2687320">Debugging Roaming Profiles and NT4-style Domain Policies</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="pam.html">28. PAM-Based Distributed Authentication</a></span></dt><dd><dl><dt><span class="sect1"><a href="pam.html#id2687502">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="pam.html#id2688133">Technical Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="pam.html#id2688187">PAM Configuration Syntax</a></span></dt><dt><span class="sect2"><a href="pam.html#id2689193">Example System Configurations</a></span></dt><dt><span class="sect2"><a href="pam.html#id2689500"><code class="filename">smb.conf</code> PAM Configuration</a></span></dt><dt><span class="sect2"><a href="pam.html#id2689580">Remote CIFS Authentication Using <code class="filename">winbindd.so</code></a></span></dt><dt><span class="sect2"><a href="pam.html#id2689683">Password Synchronization Using <code class="filename">pam_smbpass.so</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="pam.html#id2690083">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="pam.html#id2690094">pam_winbind Problem</a></span></dt><dt><span class="sect2"><a href="pam.html#id2690192">Winbind Is Not Resolving Users and Groups</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="integrate-ms-networks.html">29. Integrating MS Windows Networks with Samba</a></span></dt><dd><dl><dt><span class="sect1"><a href="integrate-ms-networks.html#id2690415">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="integrate-ms-networks.html#id2690436">Background Information</a></span></dt><dt><span class="sect1"><a href="integrate-ms-networks.html#id2690564">Name Resolution in a Pure UNIX/Linux World</a></span></dt><dd><dl><dt><span class="sect2"><a href="integrate-ms-networks.html#id2690637"><code class="filename">/etc/hosts</code></a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2690816"><code class="filename">/etc/resolv.conf</code></a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2690852"><code class="filename">/etc/host.conf</code></a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2690904"><code class="filename">/etc/nsswitch.conf</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="integrate-ms-networks.html#id2691028">Name Resolution as Used within MS Windows Networking</a></span></dt><dd><dl><dt><span class="sect2"><a href="integrate-ms-networks.html#id2691462">The NetBIOS Name Cache</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2691548">The LMHOSTS File</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2691714">HOSTS File</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2691742">DNS Lookup</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2691769">WINS Lookup</a></span></dt></dl></dd><dt><span class="sect1"><a href="integrate-ms-networks.html#id2691907">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="integrate-ms-networks.html#id2691920">Pinging Works Only One Way</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2691951">Very Slow Network Connections</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2691993">Samba Server Name-Change Problem</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="unicode.html">30. Unicode/Charsets</a></span></dt><dd><dl><dt><span class="sect1"><a href="unicode.html#id2692198">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="unicode.html#id2692250">What Are Charsets and Unicode?</a></span></dt><dt><span class="sect1"><a href="unicode.html#id2692384">Samba and Charsets</a></span></dt><dt><span class="sect1"><a href="unicode.html#id2692520">Conversion from Old Names</a></span></dt><dt><span class="sect1"><a href="unicode.html#id2692552">Japanese Charsets</a></span></dt><dd><dl><dt><span class="sect2"><a href="unicode.html#id2692681">Basic Parameter Setting</a></span></dt><dt><span class="sect2"><a href="unicode.html#id2693322">Individual Implementations</a></span></dt><dt><span class="sect2"><a href="unicode.html#id2693445">Migration from Samba-2.2 Series</a></span></dt></dl></dd><dt><span class="sect1"><a href="unicode.html#id2693591">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="unicode.html#id2693597">CP850.so Can't Be Found</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="Backup.html">31. Backup Techniques</a></span></dt><dd><dl><dt><span class="sect1"><a href="Backup.html#id2693704">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="Backup.html#id2693749">Discussion of Backup Solutions</a></span></dt><dd><dl><dt><span class="sect2"><a href="Backup.html#id2693846">BackupPC</a></span></dt><dt><span class="sect2"><a href="Backup.html#id2694017">Rsync</a></span></dt><dt><span class="sect2"><a href="Backup.html#id2694187">Amanda</a></span></dt><dt><span class="sect2"><a href="Backup.html#id2694236">BOBS: Browseable Online Backup System</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="SambaHA.html">32. High Availability</a></span></dt><dd><dl><dt><span class="sect1"><a href="SambaHA.html#id2694331">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="SambaHA.html#id2694452">Technical Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="SambaHA.html#id2694486">The Ultimate Goal</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id2694616">Why Is This So Hard?</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id2695329">A Simple Solution</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id2695410">High-Availability Server Products</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id2695550">MS-DFS: The Poor Man's Cluster</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id2695587">Conclusions</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="largefile.html">33. Handling Large Directories</a></span></dt><dt><span class="chapter"><a href="cfgsmarts.html">34. Advanced Configuration Techniques</a></span></dt><dd><dl><dt><span class="sect1"><a href="cfgsmarts.html#id2696218">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="cfgsmarts.html#id2696226">Multiple Server Hosting</a></span></dt><dt><span class="sect2"><a href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></span></dt><dt><span class="sect2"><a href="cfgsmarts.html#id2697638">Multiple Virtual Server Hosting</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="migration.html">IV. Migration and Updating</a></span></dt><dd><dl><dt><span class="chapter"><a href="upgrading-to-3.0.html">35. Updating and Upgrading Samba</a></span></dt><dd><dl><dt><span class="sect1"><a href="upgrading-to-3.0.html#id2698533">Key Update Requirements</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrading-to-3.0.html#id2698561">Upgrading from Samba-3.0.x to Samba-3.2.0</a></span></dt><dt><span class="sect2"><a href="upgrading-to-3.0.html#oldupdatenotes">Upgrading from Samba-2.x to Samba-3.0.25</a></span></dt><dt><span class="sect2"><a href="upgrading-to-3.0.html#id2698610">Quick Migration Guide</a></span></dt></dl></dd><dt><span class="sect1"><a href="upgrading-to-3.0.html#id2698762">New Featuers in Samba-3.x Series</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrading-to-3.0.html#id2698771">New Features in Samba-3.2.x Series</a></span></dt><dt><span class="sect2"><a href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a></span></dt><dt><span class="sect2"><a href="upgrading-to-3.0.html#id2699981">New Functionality</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="NT4Migration.html">36. Migration from NT4 PDC to Samba-3 PDC</a></span></dt><dd><dl><dt><span class="sect1"><a href="NT4Migration.html#id2701377">Planning and Getting Started</a></span></dt><dd><dl><dt><span class="sect2"><a href="NT4Migration.html#id2701411">Objectives</a></span></dt><dt><span class="sect2"><a href="NT4Migration.html#id2702346">Steps in Migration Process</a></span></dt></dl></dd><dt><span class="sect1"><a href="NT4Migration.html#id2702581">Migration Options</a></span></dt><dd><dl><dt><span class="sect2"><a href="NT4Migration.html#id2702668">Planning for Success</a></span></dt><dt><span class="sect2"><a href="NT4Migration.html#id2702901">Samba-3 Implementation Choices</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="SWAT.html">37. SWAT: The Samba Web Administration Tool</a></span></dt><dd><dl><dt><span class="sect1"><a href="SWAT.html#id2703390">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="SWAT.html#id2703514">Guidelines and Technical Tips</a></span></dt><dd><dl><dt><span class="sect2"><a href="SWAT.html#id2703534">Validate SWAT Installation</a></span></dt><dt><span class="sect2"><a href="SWAT.html#xinetd">Enabling SWAT for Use</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704171">Securing SWAT through SSL</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704323">Enabling SWAT Internationalization Support</a></span></dt></dl></dd><dt><span class="sect1"><a href="SWAT.html#id2704521">Overview and Quick Tour</a></span></dt><dd><dl><dt><span class="sect2"><a href="SWAT.html#id2704534">The SWAT Home Page</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704595">Global Settings</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704697">Share Settings</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704752">Printers Settings</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704809">The SWAT Wizard</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704872">The Status Page</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704916">The View Page</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704935">The Password Change Page</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="troubleshooting.html">V. Troubleshooting</a></span></dt><dd><dl><dt><span class="chapter"><a href="diagnosis.html">38. The Samba Checklist</a></span></dt><dd><dl><dt><span class="sect1"><a href="diagnosis.html#id2705069">Introduction</a></span></dt><dt><span class="sect1"><a href="diagnosis.html#id2705108">Assumptions</a></span></dt><dt><span class="sect1"><a href="diagnosis.html#id2705401">The Tests</a></span></dt></dl></dd><dt><span class="chapter"><a href="problems.html">39. Analyzing and Solving Samba Problems</a></span></dt><dd><dl><dt><span class="sect1"><a href="problems.html#id2707164">Diagnostics Tools</a></span></dt><dd><dl><dt><span class="sect2"><a href="problems.html#id2707216">Debugging with Samba Itself</a></span></dt><dt><span class="sect2"><a href="problems.html#id2707471">Tcpdump</a></span></dt><dt><span class="sect2"><a href="problems.html#id2707522">Ethereal</a></span></dt><dt><span class="sect2"><a href="problems.html#id2707665">The Windows Network Monitor</a></span></dt></dl></dd><dt><span class="sect1"><a href="problems.html#id2707992">Useful URLs</a></span></dt><dt><span class="sect1"><a href="problems.html#id2708029">Getting Mailing List Help</a></span></dt><dt><span class="sect1"><a href="problems.html#id2708204">How to Get Off the Mailing Lists</a></span></dt></dl></dd><dt><span class="chapter"><a href="bugreport.html">40. Reporting Bugs</a></span></dt><dd><dl><dt><span class="sect1"><a href="bugreport.html#id2708335">Introduction</a></span></dt><dt><span class="sect1"><a href="bugreport.html#id2708425">General Information</a></span></dt><dt><span class="sect1"><a href="bugreport.html#dbglvl">Debug Levels</a></span></dt><dd><dl><dt><span class="sect2"><a href="bugreport.html#id2708660">Debugging-Specific Operations</a></span></dt></dl></dd><dt><span class="sect1"><a href="bugreport.html#id2708862">Internal Errors</a></span></dt><dt><span class="sect1"><a href="bugreport.html#id2708995">Attaching to a Running Process</a></span></dt><dt><span class="sect1"><a href="bugreport.html#id2709120">Patches</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="Appendix.html">VI. Reference Section</a></span></dt><dd><dl><dt><span class="chapter"><a href="compiling.html">41. How to Compile Samba</a></span></dt><dd><dl><dt><span class="sect1"><a href="compiling.html#id2709290">Access Samba Source Code via Subversion</a></span></dt><dd><dl><dt><span class="sect2"><a href="compiling.html#id2709296">Introduction</a></span></dt><dt><span class="sect2"><a href="compiling.html#id2709337">Subversion Access to samba.org</a></span></dt></dl></dd><dt><span class="sect1"><a href="compiling.html#id2709528">Accessing the Samba Sources via rsync and ftp</a></span></dt><dt><span class="sect1"><a href="compiling.html#id2709603">Verifying Samba's PGP Signature</a></span></dt><dt><span class="sect1"><a href="compiling.html#id2709741">Building the Binaries</a></span></dt><dd><dl><dt><span class="sect2"><a href="compiling.html#id2709978">Compiling Samba with Active Directory Support</a></span></dt></dl></dd><dt><span class="sect1"><a href="compiling.html#startingSamba">Starting the <span class="application">smbd</span> <span class="application">nmbd</span> and <span class="application">winbindd</span></a></span></dt><dd><dl><dt><span class="sect2"><a href="compiling.html#id2710248">Starting from inetd.conf</a></span></dt><dt><span class="sect2"><a href="compiling.html#id2710468">Alternative: Starting <span class="application">smbd</span> as a Daemon</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="Portability.html">42. Portability</a></span></dt><dd><dl><dt><span class="sect1"><a href="Portability.html#id2710853">HPUX</a></span></dt><dt><span class="sect1"><a href="Portability.html#id2710957">SCO UNIX</a></span></dt><dt><span class="sect1"><a href="Portability.html#id2710996">DNIX</a></span></dt><dt><span class="sect1"><a href="Portability.html#id2711137">Red Hat Linux</a></span></dt><dt><span class="sect1"><a href="Portability.html#id2711181">AIX: Sequential Read Ahead</a></span></dt><dt><span class="sect1"><a href="Portability.html#id2711242">Solaris</a></span></dt><dd><dl><dt><span class="sect2"><a href="Portability.html#id2711248">Locking Improvements</a></span></dt><dt><span class="sect2"><a href="Portability.html#winbind-solaris9">Winbind on Solaris 9</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="Other-Clients.html">43. Samba and Other CIFS Clients</a></span></dt><dd><dl><dt><span class="sect1"><a href="Other-Clients.html#id2711424">Macintosh Clients</a></span></dt><dt><span class="sect1"><a href="Other-Clients.html#id2711508">OS2 Client</a></span></dt><dd><dl><dt><span class="sect2"><a href="Other-Clients.html#id2711513">Configuring OS/2 Warp Connect or OS/2 Warp 4</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id2711633">Configuring Other Versions of OS/2</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id2711689">Printer Driver Download for OS/2 Clients</a></span></dt></dl></dd><dt><span class="sect1"><a href="Other-Clients.html#id2711782">Windows for Workgroups</a></span></dt><dd><dl><dt><span class="sect2"><a href="Other-Clients.html#id2711788">Latest TCP/IP Stack from Microsoft</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id2711871">Delete .pwl Files After Password Change</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id2711897">Configuring Windows for Workgroups Password Handling</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id2711956">Password Case Sensitivity</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id2711987">Use TCP/IP as Default Protocol</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#speedimpr">Speed Improvement</a></span></dt></dl></dd><dt><span class="sect1"><a href="Other-Clients.html#id2712044">Windows 95/98</a></span></dt><dd><dl><dt><span class="sect2"><a href="Other-Clients.html#id2712114">Speed Improvement</a></span></dt></dl></dd><dt><span class="sect1"><a href="Other-Clients.html#id2712134">Windows 2000 Service Pack 2</a></span></dt><dt><span class="sect1"><a href="Other-Clients.html#id2712331">Windows NT 3.1</a></span></dt></dl></dd><dt><span class="chapter"><a href="speed.html">44. Samba Performance Tuning</a></span></dt><dd><dl><dt><span class="sect1"><a href="speed.html#id2712438">Comparisons</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712476">Socket Options</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712572">Read Size</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712617">Max Xmit</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712665">Log Level</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712689">Read Raw</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712756">Write Raw</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712808">Slow Logins</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712831">Client Tuning</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712852">Samba Performance Problem Due to Changing Linux Kernel</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712944">Corrupt tdb Files</a></span></dt><dt><span class="sect1"><a href="speed.html#id2713039">Samba Performance is Very Slow</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch-ldap-tls.html">45. LDAP and Transport Layer Security</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch-ldap-tls.html#s1-intro-ldap-tls">Introduction</a></span></dt><dt><span class="sect1"><a href="ch-ldap-tls.html#s1-config-ldap-tls">Configuring</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch-ldap-tls.html#s1-config-ldap-tls-certs">Generating the Certificate Authority</a></span></dt><dt><span class="sect2"><a href="ch-ldap-tls.html#s1-config-ldap-tls-server">Generating the Server Certificate</a></span></dt><dt><span class="sect2"><a href="ch-ldap-tls.html#s1-config-ldap-tls-install">Installing the Certificates</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch-ldap-tls.html#s1-test-ldap-tls">Testing</a></span></dt><dt><span class="sect1"><a href="ch-ldap-tls.html#s1-int-ldap-tls">Troubleshooting</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch46.html">46. Samba Support</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch46.html#id2714245">Free Support</a></span></dt><dt><span class="sect1"><a href="ch46.html#id2714463">Commercial Support</a></span></dt></dl></dd><dt><span class="chapter"><a href="DNSDHCP.html">47. DNS and DHCP Configuration Guide</a></span></dt><dd><dl><dt><span class="sect1"><a href="DNSDHCP.html#id2714623">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="DNSDHCP.html#id2714801">Example Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="DNSDHCP.html#id2714892">Dynamic DNS</a></span></dt><dt><span class="sect2"><a href="DNSDHCP.html#DHCP">DHCP Server</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="appendix"><a href="apa.html">A. 
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>The Official Samba 3.2.x HOWTO and Reference Guide</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="next" href="pr01.html" title="About the Cover Artwork"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The Official Samba 3.2.x HOWTO and Reference Guide</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="pr01.html">Next</a></td></tr></table><hr></div><div class="book" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="Samba-HOWTO-Collection"></a>The Official Samba 3.2.x HOWTO and Reference Guide</h1></div><div><div class="authorgroup"><div class="editor"><h4 class="editedby">Edited by</h4><h3 class="editor"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div><div class="editor"><h4 class="editedby">Edited by</h4><h3 class="editor"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div><div class="editor"><h4 class="editedby">Edited by</h4><h3 class="editor"><span class="firstname">Gerald</span> <span class="othername">(Jerry)</span> <span class="surname">Carter</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jerry at samba.org">jerry at samba.org</a>&gt;</code></p></div></div></div></div></div><div><p class="pubdate"></p></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="pr01.html">About the Cover Artwork</a></span></dt><dt><span class="preface"><a href="pr02.html">Attribution</a></span></dt><dt><span class="preface"><a href="pr03.html">Foreword</a></span></dt><dt><span class="preface"><a href="TOSHpreface.html">Preface</a></span></dt><dd><dl><dt><span class="sect1"><a href="TOSHpreface.html#id341222">Conventions Used</a></span></dt></dl></dd><dt><span class="preface"><a href="IntroSMB.html">Introduction</a></span></dt><dd><dl><dt><span class="sect1"><a href="IntroSMB.html#id341386">What Is Samba?</a></span></dt><dt><span class="sect1"><a href="IntroSMB.html#id341429">Why This Book?</a></span></dt><dt><span class="sect1"><a href="IntroSMB.html#id341504">Book Structure and Layout</a></span></dt></dl></dd><dt><span class="part"><a href="introduction.html">I. General Installation</a></span></dt><dd><dl><dt><span class="chapter"><a href="install.html">1. How to Install and Test SAMBA</a></span></dt><dd><dl><dt><span class="sect1"><a href="install.html#id341745">Obtaining and Installing Samba</a></span></dt><dt><span class="sect1"><a href="install.html#id341784">Configuring Samba (smb.conf)</a></span></dt><dd><dl><dt><span class="sect2"><a href="install.html#id341822">Configuration File Syntax</a></span></dt><dt><span class="sect2"><a href="install.html#tdbdocs">TDB Database File Information</a></span></dt><dt><span class="sect2"><a href="install.html#id342668">Starting Samba</a></span></dt><dt><span class="sect2"><a href="install.html#id342835">Example Configuration</a></span></dt><dt><span class="sect2"><a href="install.html#id343214">SWAT</a></span></dt></dl></dd><dt><span class="sect1"><a href="install.html#id343263">List Shares Available on the Server</a></span></dt><dt><span class="sect1"><a href="install.html#id343310">Connect with a UNIX Client</a></span></dt><dt><span class="sect1"><a href="install.html#id343396">Connect from a Remote SMB Client</a></span></dt><dd><dl><dt><span class="sect2"><a href="install.html#id343468">What If Things Don't Work?</a></span></dt><dt><span class="sect2"><a href="install.html#id343501">Still Stuck?</a></span></dt></dl></dd><dt><span class="sect1"><a href="install.html#id343527">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="install.html#id343536">Large Number of smbd Processes</a></span></dt><dt><span class="sect2"><a href="install.html#id343615">Error Message: open_oplock_ipc</a></span></dt><dt><span class="sect2"><a href="install.html#id343643">&#8220;<span class="quote"><span class="errorname">The network name cannot be found</span></span>&#8221;</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="FastStart.html">2. Fast Start: Cure for Impatience</a></span></dt><dd><dl><dt><span class="sect1"><a href="FastStart.html#id343766">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="FastStart.html#id343784">Description of Example Sites</a></span></dt><dt><span class="sect1"><a href="FastStart.html#id343841">Worked Examples</a></span></dt><dd><dl><dt><span class="sect2"><a href="FastStart.html#id343856">Standalone Server</a></span></dt><dt><span class="sect2"><a href="FastStart.html#id345489">Domain Member Server</a></span></dt><dt><span class="sect2"><a href="FastStart.html#id346287">Domain Controller</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="type.html">II. Server Configuration Basics</a></span></dt><dd><dl><dt><span class="chapter"><a href="ServerType.html">3. Server Types and Security Modes</a></span></dt><dd><dl><dt><span class="sect1"><a href="ServerType.html#id348242">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="ServerType.html#id348385">Server Types</a></span></dt><dt><span class="sect1"><a href="ServerType.html#id348521">Samba Security Modes</a></span></dt><dd><dl><dt><span class="sect2"><a href="ServerType.html#id348658">User Level Security</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id348806">Share-Level Security</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id348971">Domain Security Mode (User-Level Security)</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id349419">ADS Security Mode (User-Level Security)</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id349552">Server Security (User Level Security)</a></span></dt></dl></dd><dt><span class="sect1"><a href="ServerType.html#id349792">Password Checking</a></span></dt><dt><span class="sect1"><a href="ServerType.html#id349947">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="ServerType.html#id349965">What Makes Samba a Server?</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id349993">What Makes Samba a Domain Controller?</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id350027">What Makes Samba a Domain Member?</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id350051">Constantly Losing Connections to Password Server</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id350090">Stand-alone Server is converted to Domain Controller  Now User accounts don't work</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="samba-pdc.html">4. Domain Control</a></span></dt><dd><dl><dt><span class="sect1"><a href="samba-pdc.html#id350366">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></span></dt><dt><span class="sect1"><a href="samba-pdc.html#id351396">Basics of Domain Control</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-pdc.html#id351413">Domain Controller Types</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id351870">Preparing for Domain Control</a></span></dt></dl></dd><dt><span class="sect1"><a href="samba-pdc.html#id352336">Domain Control: Example Configuration</a></span></dt><dt><span class="sect1"><a href="samba-pdc.html#id353048">Samba ADS Domain Control</a></span></dt><dt><span class="sect1"><a href="samba-pdc.html#id353096">Domain and Network Logon Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-pdc.html#id353114">Domain Network Logon Service</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id353648">Security Mode and Master Browsers</a></span></dt></dl></dd><dt><span class="sect1"><a href="samba-pdc.html#id353878">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-pdc.html#id353884">&#8220;<span class="quote">$</span>&#8221; Cannot Be Included in Machine Name</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id353978">Joining Domain Fails Because of Existing Machine Account</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id354037">The System Cannot Log You On (C000019B)</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id354104">The Machine Trust Account Is Not Accessible</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id354209">Account Disabled</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id354234">Domain Controller Unavailable</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id354251">Cannot Log onto Domain Member Workstation After Joining Domain</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="samba-bdc.html">5. Backup Domain Control</a></span></dt><dd><dl><dt><span class="sect1"><a href="samba-bdc.html#id354424">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="samba-bdc.html#id354803">Essential Background Information</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id355488">LDAP Configuration Notes</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id355820">Active Directory Domain Control</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id355874">What Qualifies a Domain Controller on the Network?</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id355957">How Does a Workstation find its Domain Controller?</a></span></dt></dl></dd><dt><span class="sect1"><a href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-bdc.html#id356586">Example Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="samba-bdc.html#id357015">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-bdc.html#id357055">Machine Accounts Keep Expiring</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id357103">Can Samba Be a Backup Domain Controller to an NT4 PDC?</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id357154">How Do I Replicate the smbpasswd File?</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id357252">Can I Do This All with LDAP?</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="domain-member.html">6. Domain Membership</a></span></dt><dd><dl><dt><span class="sect1"><a href="domain-member.html#id357484">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></span></dt><dd><dl><dt><span class="sect2"><a href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id358537">Managing Domain Machine Accounts using NT4 Server Manager</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id358802">On-the-Fly Creation of Machine Trust Accounts</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id358901">Making an MS Windows Workstation or Server a Domain Member</a></span></dt></dl></dd><dt><span class="sect1"><a href="domain-member.html#domain-member-server">Domain Member Server</a></span></dt><dd><dl><dt><span class="sect2"><a href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id360028">Why Is This Better Than <em class="parameter"><code>security = server</code></em>?</a></span></dt></dl></dd><dt><span class="sect1"><a href="domain-member.html#ads-member">Samba ADS Domain Membership</a></span></dt><dd><dl><dt><span class="sect2"><a href="domain-member.html#id360288">Configure <code class="filename">smb.conf</code></a></span></dt><dt><span class="sect2"><a href="domain-member.html#id360470">Configure <code class="filename">/etc/krb5.conf</code></a></span></dt><dt><span class="sect2"><a href="domain-member.html#ads-create-machine-account">Create the Computer Account</a></span></dt><dt><span class="sect2"><a href="domain-member.html#ads-test-server">Testing Server Setup</a></span></dt><dt><span class="sect2"><a href="domain-member.html#ads-test-smbclient">Testing with <span class="application">smbclient</span></a></span></dt><dt><span class="sect2"><a href="domain-member.html#id361503">Notes</a></span></dt></dl></dd><dt><span class="sect1"><a href="domain-member.html#id361572">Sharing User ID Mappings between Samba Domain Members</a></span></dt><dt><span class="sect1"><a href="domain-member.html#id361768">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="domain-member.html#id361802">Cannot Add Machine Back to Domain</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id361872">Adding Machine to Domain Fails</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id362092">I Can't Join a Windows 2003 PDC</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="StandAloneServer.html">7. Standalone Servers</a></span></dt><dd><dl><dt><span class="sect1"><a href="StandAloneServer.html#id362210">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="StandAloneServer.html#id362296">Background</a></span></dt><dt><span class="sect1"><a href="StandAloneServer.html#id362473">Example Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="StandAloneServer.html#RefDocServer">Reference Documentation Server</a></span></dt><dt><span class="sect2"><a href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></span></dt></dl></dd><dt><span class="sect1"><a href="StandAloneServer.html#id363410">Common Errors</a></span></dt></dl></dd><dt><span class="chapter"><a href="ClientConfig.html">8. MS Windows Network Configuration Guide</a></span></dt><dd><dl><dt><span class="sect1"><a href="ClientConfig.html#id363475">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="ClientConfig.html#id363528">Technical Details</a></span></dt><dd><dl><dt><span class="sect2"><a href="ClientConfig.html#id363569">TCP/IP Configuration</a></span></dt><dt><span class="sect2"><a href="ClientConfig.html#id365265">Joining a Domain: Windows 2000/XP Professional</a></span></dt><dt><span class="sect2"><a href="ClientConfig.html#id365774">Domain Logon Configuration: Windows 9x/Me</a></span></dt></dl></dd><dt><span class="sect1"><a href="ClientConfig.html#id366202">Common Errors</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="optional.html">III. Advanced Configuration</a></span></dt><dd><dl><dt><span class="chapter"><a href="ChangeNotes.html">9. Important and Critical Change Notes for the Samba 3.x Series</a></span></dt><dd><dl><dt><span class="sect1"><a href="ChangeNotes.html#id366427">Important Samba-3.2.x Change Notes</a></span></dt><dt><span class="sect1"><a href="ChangeNotes.html#id366438">Important Samba-3.0.x Change Notes</a></span></dt><dd><dl><dt><span class="sect2"><a href="ChangeNotes.html#id366486">User and Group Changes</a></span></dt><dt><span class="sect2"><a href="ChangeNotes.html#id366776">Essential Group Mappings</a></span></dt><dt><span class="sect2"><a href="ChangeNotes.html#id366887">Passdb Changes</a></span></dt><dt><span class="sect2"><a href="ChangeNotes.html#id366943">Group Mapping Changes in Samba-3.0.23</a></span></dt><dt><span class="sect2"><a href="ChangeNotes.html#id367059">LDAP Changes in Samba-3.0.23</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="NetworkBrowsing.html">10. Network Browsing</a></span></dt><dd><dl><dt><span class="sect1"><a href="NetworkBrowsing.html#id367309">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="NetworkBrowsing.html#id367475">What Is Browsing?</a></span></dt><dt><span class="sect1"><a href="NetworkBrowsing.html#netdiscuss">Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id368472">TCP/IP without NetBIOS</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#adsdnstech">DNS and Active Directory</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id368969">How Browsing Functions</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id369843">Domain Browsing Configuration</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id370405">Making Samba the Domain Master</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id370625">Note about Broadcast Addresses</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id370644">Multiple Interfaces</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id370820">Use of the Remote Announce Parameter</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id370948">Use of the Remote Browse Sync Parameter</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id371035">WINS: The Windows Internetworking Name Server</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id371282">WINS Server Configuration</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id371576">WINS Replication</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id371626">Static WINS Entries</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id371843">Helpful Hints</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id371853">Windows Networking Protocols</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id371983">Name Resolution Order</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id372177">Technical Overview of Browsing</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id372256">Browsing Support in Samba</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id372438">Problem Resolution</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id372672">Cross-Subnet Browsing</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id373613">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id373637">Flushing the Samba NetBIOS Name Cache</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id373702">Server Resources Cannot Be Listed</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id373747">I Get an "<span class="errorname">Unable to browse the network</span>" Error</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id373792">Browsing of Shares and Directories is Very Slow</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id373973">Invalid Cached Share References Affects Network Browsing</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="passdb.html">11. Account Information Databases</a></span></dt><dd><dl><dt><span class="sect1"><a href="passdb.html#id374429">Features and Benefits</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id374464">Backward Compatibility Account Storage Systems</a></span></dt><dt><span class="sect2"><a href="passdb.html#id374634">New Account Storage Systems</a></span></dt></dl></dd><dt><span class="sect1"><a href="passdb.html#passdbtech">Technical Information</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id375167">Important Notes About Security</a></span></dt><dt><span class="sect2"><a href="passdb.html#id375648">Mapping User Identifiers between MS Windows and UNIX</a></span></dt><dt><span class="sect2"><a href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a></span></dt><dt><span class="sect2"><a href="passdb.html#id376168">Comments Regarding LDAP</a></span></dt><dt><span class="sect2"><a href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a></span></dt></dl></dd><dt><span class="sect1"><a href="passdb.html#acctmgmttools">Account Management Tools</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id376958">The <code class="literal">smbpasswd</code> Tool</a></span></dt><dt><span class="sect2"><a href="passdb.html#pdbeditthing">The <code class="literal">pdbedit</code> Tool</a></span></dt></dl></dd><dt><span class="sect1"><a href="passdb.html#id379310">Password Backends</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id379357">Plaintext</a></span></dt><dt><span class="sect2"><a href="passdb.html#id379428">smbpasswd: Encrypted Password Database</a></span></dt><dt><span class="sect2"><a href="passdb.html#id379677">tdbsam</a></span></dt><dt><span class="sect2"><a href="passdb.html#id379822">ldapsam</a></span></dt></dl></dd><dt><span class="sect1"><a href="passdb.html#id382162">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id382168">Users Cannot Logon</a></span></dt><dt><span class="sect2"><a href="passdb.html#id382202">Configuration of <em class="parameter"><code>auth methods</code></em></a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="groupmapping.html">12. Group Mapping: MS Windows and UNIX</a></span></dt><dd><dl><dt><span class="sect1"><a href="groupmapping.html#id382442">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="groupmapping.html#id382834">Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="groupmapping.html#id383149">Warning: User Private Group Problems</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id383730">Important Administrative Information</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id383950">Default Users, Groups, and Relative Identifiers</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id384556">Example Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="groupmapping.html#id384627">Configuration Scripts</a></span></dt><dd><dl><dt><span class="sect2"><a href="groupmapping.html#id384638">Sample <code class="filename">smb.conf</code> Add Group Script</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id384798">Script to Configure Group Mapping</a></span></dt></dl></dd><dt><span class="sect1"><a href="groupmapping.html#id384912">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="groupmapping.html#id384922">Adding Groups Fails</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id385002">Adding Domain Users to the Workstation Power Users Group</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="NetCommand.html">13. Remote and Local Management: The Net Command</a></span></dt><dd><dl><dt><span class="sect1"><a href="NetCommand.html#id385377">Overview</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id385653">Administrative Tasks and Methods</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id385728">UNIX and Windows Group Management</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#id385877">Adding, Renaming, or Deletion of Group Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#grpmemshipchg">Manipulating Group Memberships</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#nestedgrpmgmgt">Nested Group Support</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#id387104">UNIX and Windows User Management</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#sbeuseraddn">Adding User Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id387299">Deletion of User Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id387344">Managing User Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id387406">User Mapping</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#id387484">Administering User Rights and Privileges</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id387799">Managing Trust Relationships</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#id387811">Machine Trust Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id388148">Interdomain Trusts</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#id388358">Managing Security Identifiers (SIDS)</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id388559">Share Management</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#id388601">Creating, Editing, and Removing Shares</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id388770">Creating and Changing Share ACLs</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id388797">Share, Directory, and File Migration</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id389335">Printer Migration</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#id389550">Controlling Open Files</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id389567">Session and Connection Management</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id389627">Printers and ADS</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id389730">Manipulating the Samba Cache</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id389747">Managing IDMAP UID/SID Mappings</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#id389785">Creating an IDMAP Database Dump File</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id389816">Restoring the IDMAP Database Dump File</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#netmisc1">Other Miscellaneous Operations</a></span></dt></dl></dd><dt><span class="chapter"><a href="idmapper.html">14. Identity Mapping (IDMAP)</a></span></dt><dd><dl><dt><span class="sect1"><a href="idmapper.html#id390297">Samba Server Deployment Types and IDMAP</a></span></dt><dd><dl><dt><span class="sect2"><a href="idmapper.html#id390321">Standalone Samba Server</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id391274">Primary Domain Controller</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id391492">Backup Domain Controller</a></span></dt></dl></dd><dt><span class="sect1"><a href="idmapper.html#id391558">Examples of IDMAP Backend Usage</a></span></dt><dd><dl><dt><span class="sect2"><a href="idmapper.html#id391619">Default Winbind TDB</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id392312">IDMAP_RID with Winbind</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id392871">IDMAP Storage in LDAP Using Winbind</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id393417">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="rights.html">15. User Rights and Privileges</a></span></dt><dd><dl><dt><span class="sect1"><a href="rights.html#id394039">Rights Management Capabilities</a></span></dt><dd><dl><dt><span class="sect2"><a href="rights.html#id394300">Using the &#8220;<span class="quote">net rpc rights</span>&#8221; Utility</a></span></dt><dt><span class="sect2"><a href="rights.html#id394618">Description of Privileges</a></span></dt><dt><span class="sect2"><a href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></span></dt></dl></dd><dt><span class="sect1"><a href="rights.html#id395344">The Administrator Domain SID</a></span></dt><dt><span class="sect1"><a href="rights.html#id395509">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="rights.html#id395514">What Rights and Privileges Will Permit Windows Client Administration?</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="AccessControls.html">16. File, Directory, and Share Access Controls</a></span></dt><dd><dl><dt><span class="sect1"><a href="AccessControls.html#id395980">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="AccessControls.html#id396152">File System Access Controls</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id396164">MS Windows NTFS Comparison with UNIX File Systems</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id396461">Managing Directories</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id396582">File and Directory Access Control</a></span></dt></dl></dd><dt><span class="sect1"><a href="AccessControls.html#id397181">Share Definition Access Controls</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id397212">User- and Group-Based Controls</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id397552">File and Directory Permissions-Based Controls</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id397861">Miscellaneous Controls</a></span></dt></dl></dd><dt><span class="sect1"><a href="AccessControls.html#id398176">Access Controls on Shares</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id398312">Share Permissions Management</a></span></dt></dl></dd><dt><span class="sect1"><a href="AccessControls.html#id398637">MS Windows Access Control Lists and UNIX Interoperability</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id398643">Managing UNIX Permissions Using NT Security Dialogs</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id398682">Viewing File Security on a Samba Share</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id398747">Viewing File Ownership</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id398876">Viewing File or Directory Permissions</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id399067">Modifying File or Directory Permissions</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id399207">Interaction with the Standard Samba &#8220;<span class="quote">create mask</span>&#8221; Parameters</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id399542">Interaction with the Standard Samba File Attribute Mapping</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id399606">Windows NT/200X ACLs and POSIX ACLs Limitations</a></span></dt></dl></dd><dt><span class="sect1"><a href="AccessControls.html#id399970">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id399980">Users Cannot Write to a Public Share</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id400287">File Operations Done as <span class="emphasis"><em>root</em></span> with <span class="emphasis"><em>force user</em></span> Set</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id400330">MS Word with Samba Changes Owner of File</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="locking.html">17. File and Record Locking</a></span></dt><dd><dl><dt><span class="sect1"><a href="locking.html#id400544">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="locking.html#id400630">Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="locking.html#id400867">Opportunistic Locking Overview</a></span></dt></dl></dd><dt><span class="sect1"><a href="locking.html#id401718">Samba Oplocks Control</a></span></dt><dd><dl><dt><span class="sect2"><a href="locking.html#id401786">Example Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="locking.html#id402171">MS Windows Oplocks and Caching Controls</a></span></dt><dd><dl><dt><span class="sect2"><a href="locking.html#id402323">Workstation Service Entries</a></span></dt><dt><span class="sect2"><a href="locking.html#id402342">Server Service Entries</a></span></dt></dl></dd><dt><span class="sect1"><a href="locking.html#id402398">Persistent Data Corruption</a></span></dt><dt><span class="sect1"><a href="locking.html#id402418">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="locking.html#id402468">locking.tdb Error Messages</a></span></dt><dt><span class="sect2"><a href="locking.html#id402497">Problems Saving Files in MS Office on Windows XP</a></span></dt><dt><span class="sect2"><a href="locking.html#id402519">Long Delays Deleting Files over Network with XP SP1</a></span></dt></dl></dd><dt><span class="sect1"><a href="locking.html#id402548">Additional Reading</a></span></dt></dl></dd><dt><span class="chapter"><a href="securing-samba.html">18. Securing Samba</a></span></dt><dd><dl><dt><span class="sect1"><a href="securing-samba.html#id402714">Introduction</a></span></dt><dt><span class="sect1"><a href="securing-samba.html#id402802">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="securing-samba.html#id402937">Technical Discussion of Protective Measures and Issues</a></span></dt><dd><dl><dt><span class="sect2"><a href="securing-samba.html#id402949">Using Host-Based Protection</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id403094">User-Based Protection</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id403151">Using Interface Protection</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#firewallports">Using a Firewall</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id403481">Using IPC$ Share-Based Denials </a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id403614">NTLMv2 Security</a></span></dt></dl></dd><dt><span class="sect1"><a href="securing-samba.html#id403662">Upgrading Samba</a></span></dt><dt><span class="sect1"><a href="securing-samba.html#id403703">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="securing-samba.html#id403715">Smbclient Works on Localhost, but the Network Is Dead</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id403740">Why Can Users Access Other Users' Home Directories?</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="InterdomainTrusts.html">19. Interdomain Trust Relationships</a></span></dt><dd><dl><dt><span class="sect1"><a href="InterdomainTrusts.html#id404270">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="InterdomainTrusts.html#id404336">Trust Relationship Background</a></span></dt><dt><span class="sect1"><a href="InterdomainTrusts.html#id404590">Native MS Windows NT4 Trusts Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="InterdomainTrusts.html#id404624">Creating an NT4 Domain Trust</a></span></dt><dt><span class="sect2"><a href="InterdomainTrusts.html#id404714">Completing an NT4 Domain Trust</a></span></dt><dt><span class="sect2"><a href="InterdomainTrusts.html#id404795">Interdomain Trust Facilities</a></span></dt></dl></dd><dt><span class="sect1"><a href="InterdomainTrusts.html#id404991">Configuring Samba NT-Style Domain Trusts</a></span></dt><dd><dl><dt><span class="sect2"><a href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></span></dt><dt><span class="sect2"><a href="InterdomainTrusts.html#id405306">Samba as the Trusting Domain</a></span></dt></dl></dd><dt><span class="sect1"><a href="InterdomainTrusts.html#id405489">NT4-Style Domain Trusts with Windows 2000</a></span></dt><dt><span class="sect1"><a href="InterdomainTrusts.html#id405625">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="InterdomainTrusts.html#id405636">Browsing of Trusted Domain Fails</a></span></dt><dt><span class="sect2"><a href="InterdomainTrusts.html#id405678">Problems with LDAP ldapsam and Older Versions of smbldap-tools</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="msdfs.html">20. Hosting a Microsoft Distributed File System Tree</a></span></dt><dd><dl><dt><span class="sect1"><a href="msdfs.html#id405843">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="msdfs.html#id406232">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="msdfs.html#id406261">MSDFS UNIX Path Is Case-Critical</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="classicalprinting.html">21. Classical Printing Support</a></span></dt><dd><dl><dt><span class="sect1"><a href="classicalprinting.html#id406449">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id406652">Technical Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id406793">Client to Samba Print Job Processing</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id406846">Printing-Related Configuration Parameters</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id406941">Simple Print Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id407208">Verifying Configuration with <code class="literal">testparm</code></a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id407391">Rapid Configuration Validation</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id407742">Extended Printing Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id408182">Detailed Explanation Settings</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id410712">Point'n'Print Client Drivers on Samba Servers</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id410866">The Obsoleted [printer$] Section</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id410977">Creating the [print$] Share</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id411183">[print$] Stanza Parameters</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id411476">The [print$] Share Directory</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id411602">Installing Drivers into [print$]</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id411687">Add Printer Wizard Driver Installation</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#inst-rpc">Installing Print Drivers Using <code class="literal">rpcclient</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id413392">Client Driver Installation Procedure</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id413407">First Client Driver Installation</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#prt-modeset">Setting Device Modes on New Printers</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id346362">Additional Client Driver Installation</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id346474">Always Make First Client Connection as root or &#8220;<span class="quote">printer admin</span>&#8221;</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id414319">Other Gotchas</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id414335">Setting Default Print Options for Client Drivers</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id414671">Supporting Large Numbers of Printers</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id414907">Adding New Printers with the Windows NT APW</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id415143">Error Message: &#8220;<span class="quote">Cannot connect under a different Name</span>&#8221;</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id415242">Take Care When Assembling Driver Files</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id415466">Samba and Printer Ports</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id415565">Avoiding Common Client Driver Misconfiguration</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id415598">The Imprints Toolset</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id415641">What Is Imprints?</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id415671">Creating Printer Driver Packages</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id415684">The Imprints Server</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id415698">The Installation Client</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id415814">Adding Network Printers without User Interaction</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id416053">The <code class="literal">addprinter</code> Command</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id416087">Migration of Classical Printing to Samba</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id416218">Publishing Printer Information in Active Directory or LDAP</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id416245">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id416250">I Give My Root Password but I Do Not Get Access</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id416288">My Print Jobs Get Spooled into the Spooling Directory, but Then Get Lost</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="CUPS-printing.html">22. CUPS Printing Support</a></span></dt><dd><dl><dt><span class="sect1"><a href="CUPS-printing.html#id416419">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id416425">Features and Benefits</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id416476">Overview</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id416588">Basic CUPS Support Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id416695">Linking smbd with libcups.so</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id416919">Simple <code class="filename">smb.conf</code> Settings for CUPS</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id417155">More Complex CUPS <code class="filename">smb.conf</code> Settings</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id417537">Advanced Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id417551">Central Spooling vs. &#8220;<span class="quote">Peer-to-Peer</span>&#8221; Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id417596">Raw Print Serving: Vendor Drivers on Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id417810">Installation of Windows Client Drivers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#cups-raw">Explicitly Enable &#8220;<span class="quote">raw</span>&#8221; Printing for <span class="emphasis"><em>application/octet-stream</em></span></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id418073">Driver Upload Methods</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id418184">Advanced Intelligent Printing with PostScript Driver Download</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#gdipost">GDI on Windows, PostScript on UNIX</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id418358">Windows Drivers, GDI, and EMF</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id418524">UNIX Printfile Conversion and GUI Basics</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#post-and-ghost">PostScript and Ghostscript</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id418848">Ghostscript: The Software RIP for Non-PostScript Printers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id418988">PostScript Printer Description (PPD) Specification</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id419056">Using Windows-Formatted Vendor PPDs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id419165">CUPS Also Uses PPDs for Non-PostScript Printers</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id419200">The CUPS Filtering Architecture</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id419826">MIME Type Conversion Rules</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id420021">Filtering  Overview</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id420169">Prefilters</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id420346">pstops</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id420506">pstoraster</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id420757">imagetops and imagetoraster</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id420837">rasterto [printers specific]</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id421049">CUPS Backends</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id421357">The Role of <em class="parameter"><code>cupsomatic/foomatic</code></em></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id421572">The Complete Picture</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id421583"><code class="filename">mime.convs</code></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id421644">&#8220;<span class="quote">Raw</span>&#8221; Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id421744">application/octet-stream Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id422005">PostScript Printer Descriptions for Non-PostScript Printers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id422269"><span class="emphasis"><em>cupsomatic/foomatic-rip</em></span> Versus <span class="emphasis"><em>Native CUPS</em></span> Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id422583">Examples for Filtering Chains</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id422984">Sources of CUPS Drivers/PPDs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423093">Printing with Interface Scripts</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id423172">Network Printing (Purely Windows)</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id423186">From Windows Clients to an NT Print Server</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423245">Driver Execution on the Client</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423310">Driver Execution on the Server</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id423409">Network Printing (Windows Clients and UNIX/Samba Print
+Servers)</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id423425">From Windows Clients to a CUPS/Samba Print Server</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423600">Samba Receiving Job-Files and Passing Them to CUPS</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id423671">Network PostScript RIP</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id423751">PPDs for Non-PS Printers on UNIX</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423788">PPDs for Non-PS Printers on Windows</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id423848">Windows Terminal Servers (WTS) as CUPS Clients</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id423860">Printer Drivers Running in &#8220;<span class="quote">Kernel Mode</span>&#8221; Cause Many
+Problems</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423891">Workarounds Impose Heavy Limitations</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423905">CUPS: A &#8220;<span class="quote">Magical Stone</span>&#8221;?</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423941">PostScript Drivers with No Major Problems, Even in Kernel
+Mode</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id424020">Configuring CUPS for Driver Download</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id424038"><span class="emphasis"><em>cupsaddsmb</em></span>: The Unknown Utility</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id424126">Prepare Your <code class="filename">smb.conf</code> for <code class="literal">cupsaddsmb</code></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id424414">CUPS &#8220;<span class="quote">PostScript Driver for Windows NT/200x/XP</span>&#8221;</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id424635">Recognizing Different Driver Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id424746">Acquiring the Adobe Driver Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id424766">ESP Print Pro PostScript Driver for Windows NT/200x/XP</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id424821">Caveats to Be Considered</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425100">Windows CUPS PostScript Driver Versus Adobe Driver</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425295">Run cupsaddsmb (Quiet Mode)</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425429">Run cupsaddsmb with Verbose Output</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425560">Understanding cupsaddsmb</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425696">How to Recognize If cupsaddsmb Completed Successfully</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425806">cupsaddsmb with a Samba PDC</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425884">cupsaddsmb Flowchart</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425962">Installing the PostScript Driver on a Client</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#cups-avoidps1">Avoiding Critical PostScript Driver Settings on the Client</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id426171">Installing PostScript Driver Files Manually Using rpcclient</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id426337">A Check of the rpcclient man Page</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id426497">Understanding the rpcclient man Page</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id426589">Producing an Example by Querying a Windows Box</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id426709">Requirements for adddriver and setdriver to Succeed</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id426920">Manual Driver Installation in 15 Steps</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id427799">Troubleshooting Revisited</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id427930">The Printing <code class="filename">*.tdb</code> Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id428129">Trivial Database Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id428191">Binary Format</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id428252">Losing <code class="filename">*.tdb</code> Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id428299">Using <code class="literal">tdbbackup</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id428409">CUPS Print Drivers from Linuxprinting.org</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id428570">foomatic-rip and Foomatic Explained</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id429283">foomatic-rip and Foomatic PPD Download and Installation</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id429705">Page Accounting with CUPS</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id429735">Setting Up Quotas</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id429785">Correct and Incorrect Accounting</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id429818">Adobe and CUPS PostScript Drivers for Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id429949">The page_log File Syntax</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id430085">Possible Shortcomings</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id430143">Future Developments</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id430178">Other Accounting Tools</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id430191">Additional Material</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id430379">Autodeletion or Preservation of CUPS Spool Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id430451">CUPS Configuration Settings Explained</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id430528">Preconditions</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id430657">Manual Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id430701">Printing from CUPS to Windows-Attached Printers</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id430957">More CUPS Filtering Chains</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id431066">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id431072">Windows 9x/Me Client Can't Install Driver</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#root-ask-loop">&#8220;<span class="quote">cupsaddsmb</span>&#8221; Keeps Asking for Root Password in Never-ending Loop</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431141">&#8220;<span class="quote">cupsaddsmb</span>&#8221; or &#8220;<span class="quote">rpcclient addriver</span>&#8221; Emit Error</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431178">&#8220;<span class="quote">cupsaddsmb</span>&#8221; Errors</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431248">Client Can't Connect to Samba Printer</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431271">New Account Reconnection from Windows 200x/XP Troubles</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431352">Avoid Being Connected to the Samba Server as the Wrong User</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431398">Upgrading to CUPS Drivers from Adobe Drivers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431432">Can't Use &#8220;<span class="quote">cupsaddsmb</span>&#8221; on Samba Server, Which Is a PDC</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431467">Deleted Windows 200x Printer Driver Is Still Shown</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431498">Windows 200x/XP Local Security Policies</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431529">Administrator Cannot Install Printers for All Local Users</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431566">Print Change, Notify Functions on NT Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431589">Win XP-SP1</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431631">Print Options for All Users Can't Be Set on Windows 200x/XP</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431898">Most Common Blunders in Driver Settings on Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431951"><code class="literal">cupsaddsmb</code> Does Not Work with Newly Installed Printer</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431997">Permissions on <code class="filename">/var/spool/samba/</code> Get Reset After Each Reboot</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id432090">Print Queue Called &#8220;<span class="quote">lp</span>&#8221; Mishandles Print Jobs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id432153">Location of Adobe PostScript Driver Files for &#8220;<span class="quote">cupsaddsmb</span>&#8221;</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id432204">Overview of the CUPS Printing Processes</a></span></dt></dl></dd><dt><span class="chapter"><a href="VFS.html">23. Stackable VFS modules</a></span></dt><dd><dl><dt><span class="sect1"><a href="VFS.html#id432386">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="VFS.html#id432421">Discussion</a></span></dt><dt><span class="sect1"><a href="VFS.html#id432802">Included Modules</a></span></dt><dd><dl><dt><span class="sect2"><a href="VFS.html#id432808">audit</a></span></dt><dt><span class="sect2"><a href="VFS.html#id432847">default_quota</a></span></dt><dt><span class="sect2"><a href="VFS.html#id433040">extd_audit</a></span></dt><dt><span class="sect2"><a href="VFS.html#fakeperms">fake_perms</a></span></dt><dt><span class="sect2"><a href="VFS.html#id433348">recycle</a></span></dt><dt><span class="sect2"><a href="VFS.html#id433719">netatalk</a></span></dt><dt><span class="sect2"><a href="VFS.html#id433767">shadow_copy</a></span></dt></dl></dd><dt><span class="sect1"><a href="VFS.html#id434600">VFS Modules Available Elsewhere</a></span></dt><dd><dl><dt><span class="sect2"><a href="VFS.html#id434622">DatabaseFS</a></span></dt><dt><span class="sect2"><a href="VFS.html#id434675">vscan</a></span></dt><dt><span class="sect2"><a href="VFS.html#id434712">vscan-clamav</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="winbind.html">24. Winbind: Use of Domain Accounts</a></span></dt><dd><dl><dt><span class="sect1"><a href="winbind.html#id434945">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="winbind.html#id435268">Introduction</a></span></dt><dt><span class="sect1"><a href="winbind.html#id435346">What Winbind Provides</a></span></dt><dd><dl><dt><span class="sect2"><a href="winbind.html#id435485">Target Uses</a></span></dt><dt><span class="sect2"><a href="winbind.html#id435524">Handling of Foreign SIDs</a></span></dt></dl></dd><dt><span class="sect1"><a href="winbind.html#id435636">How Winbind Works</a></span></dt><dd><dl><dt><span class="sect2"><a href="winbind.html#id435683">Microsoft Remote Procedure Calls</a></span></dt><dt><span class="sect2"><a href="winbind.html#id435761">Microsoft Active Directory Services</a></span></dt><dt><span class="sect2"><a href="winbind.html#id435805">Name Service Switch</a></span></dt><dt><span class="sect2"><a href="winbind.html#id436017">Pluggable Authentication Modules</a></span></dt><dt><span class="sect2"><a href="winbind.html#id436158">User and Group ID Allocation</a></span></dt><dt><span class="sect2"><a href="winbind.html#id436226">Result Caching</a></span></dt></dl></dd><dt><span class="sect1"><a href="winbind.html#id436276">Installation and Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="winbind.html#id436282">Introduction</a></span></dt><dt><span class="sect2"><a href="winbind.html#id436389">Requirements</a></span></dt><dt><span class="sect2"><a href="winbind.html#id436531">Testing Things Out</a></span></dt></dl></dd><dt><span class="sect1"><a href="winbind.html#id438782">Conclusion</a></span></dt><dt><span class="sect1"><a href="winbind.html#id438828">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="winbind.html#id438861">NSCD Problem Warning</a></span></dt><dt><span class="sect2"><a href="winbind.html#id438895">Winbind Is Not Resolving Users and Groups</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="AdvancedNetworkManagement.html">25. Advanced Network Management</a></span></dt><dd><dl><dt><span class="sect1"><a href="AdvancedNetworkManagement.html#id439073">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="AdvancedNetworkManagement.html#id439095">Remote Server Administration</a></span></dt><dt><span class="sect1"><a href="AdvancedNetworkManagement.html#id439232">Remote Desktop Management</a></span></dt><dd><dl><dt><span class="sect2"><a href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a></span></dt><dt><span class="sect2"><a href="AdvancedNetworkManagement.html#id439596">Remote Management with ThinLinc</a></span></dt></dl></dd><dt><span class="sect1"><a href="AdvancedNetworkManagement.html#id439771">Network Logon Script Magic</a></span></dt><dd><dl><dt><span class="sect2"><a href="AdvancedNetworkManagement.html#id439937">Adding Printers without User Intervention</a></span></dt><dt><span class="sect2"><a href="AdvancedNetworkManagement.html#id439977">Limiting Logon Connections</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="PolicyMgmt.html">26. System and Account Policies</a></span></dt><dd><dl><dt><span class="sect1"><a href="PolicyMgmt.html#id440104">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="PolicyMgmt.html#id440199">Creating and Managing System Policies</a></span></dt><dd><dl><dt><span class="sect2"><a href="PolicyMgmt.html#id440369">Windows 9x/ME Policies</a></span></dt><dt><span class="sect2"><a href="PolicyMgmt.html#id440493">Windows NT4-Style Policy Files</a></span></dt><dt><span class="sect2"><a href="PolicyMgmt.html#id440699">MS Windows 200x/XP Professional Policies</a></span></dt></dl></dd><dt><span class="sect1"><a href="PolicyMgmt.html#id441101">Managing Account/User Policies</a></span></dt><dt><span class="sect1"><a href="PolicyMgmt.html#id441305">Management Tools</a></span></dt><dd><dl><dt><span class="sect2"><a href="PolicyMgmt.html#id441316">Samba Editreg Toolset</a></span></dt><dt><span class="sect2"><a href="PolicyMgmt.html#id441392">Windows NT4/200x</a></span></dt><dt><span class="sect2"><a href="PolicyMgmt.html#id441429">Samba PDC</a></span></dt></dl></dd><dt><span class="sect1"><a href="PolicyMgmt.html#id441492">System Startup and Logon Processing Overview</a></span></dt><dt><span class="sect1"><a href="PolicyMgmt.html#id441634">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="PolicyMgmt.html#id441644">Policy Does Not Work</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ProfileMgmt.html">27. Desktop Profile Management</a></span></dt><dd><dl><dt><span class="sect1"><a href="ProfileMgmt.html#id441723">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="ProfileMgmt.html#id441766">Roaming Profiles</a></span></dt><dd><dl><dt><span class="sect2"><a href="ProfileMgmt.html#id441814">Samba Configuration for Profile Handling</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id442383">Windows Client Profile Configuration Information</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id443652">User Profile Hive Cleanup Service</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id443680">Sharing Profiles between Windows 9x/Me and NT4/200x/XP Workstations</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id443770">Profile Migration from Windows NT4/200x Server to Samba</a></span></dt></dl></dd><dt><span class="sect1"><a href="ProfileMgmt.html#id444102">Mandatory Profiles</a></span></dt><dt><span class="sect1"><a href="ProfileMgmt.html#id444230">Creating and Managing Group Profiles</a></span></dt><dt><span class="sect1"><a href="ProfileMgmt.html#id444297">Default Profile for Windows Users</a></span></dt><dd><dl><dt><span class="sect2"><a href="ProfileMgmt.html#id444323">MS Windows 9x/Me</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id444459">MS Windows NT4 Workstation</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id444984">MS Windows 200x/XP</a></span></dt></dl></dd><dt><span class="sect1"><a href="ProfileMgmt.html#id445446">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="ProfileMgmt.html#id445456">Configuring Roaming Profiles for a Few Users or Groups</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id445509">Cannot Use Roaming Profiles</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id445658">Changing the Default Profile</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id445812">Debugging Roaming Profiles and NT4-style Domain Policies</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="pam.html">28. PAM-Based Distributed Authentication</a></span></dt><dd><dl><dt><span class="sect1"><a href="pam.html#id445976">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="pam.html#id446577">Technical Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="pam.html#id446627">PAM Configuration Syntax</a></span></dt><dt><span class="sect2"><a href="pam.html#id447529">Example System Configurations</a></span></dt><dt><span class="sect2"><a href="pam.html#id447799"><code class="filename">smb.conf</code> PAM Configuration</a></span></dt><dt><span class="sect2"><a href="pam.html#id447870">Remote CIFS Authentication Using <code class="filename">winbindd.so</code></a></span></dt><dt><span class="sect2"><a href="pam.html#id447960">Password Synchronization Using <code class="filename">pam_smbpass.so</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="pam.html#id448317">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="pam.html#id448327">pam_winbind Problem</a></span></dt><dt><span class="sect2"><a href="pam.html#id448416">Winbind Is Not Resolving Users and Groups</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="integrate-ms-networks.html">29. Integrating MS Windows Networks with Samba</a></span></dt><dd><dl><dt><span class="sect1"><a href="integrate-ms-networks.html#id448624">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="integrate-ms-networks.html#id448641">Background Information</a></span></dt><dt><span class="sect1"><a href="integrate-ms-networks.html#id448760">Name Resolution in a Pure UNIX/Linux World</a></span></dt><dd><dl><dt><span class="sect2"><a href="integrate-ms-networks.html#id448831"><code class="filename">/etc/hosts</code></a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id448992"><code class="filename">/etc/resolv.conf</code></a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id449025"><code class="filename">/etc/host.conf</code></a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id449073"><code class="filename">/etc/nsswitch.conf</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="integrate-ms-networks.html#id449183">Name Resolution as Used within MS Windows Networking</a></span></dt><dd><dl><dt><span class="sect2"><a href="integrate-ms-networks.html#id449576">The NetBIOS Name Cache</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id449659">The LMHOSTS File</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id449764">HOSTS File</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id449789">DNS Lookup</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id449811">WINS Lookup</a></span></dt></dl></dd><dt><span class="sect1"><a href="integrate-ms-networks.html#id449942">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="integrate-ms-networks.html#id449953">Pinging Works Only One Way</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id449980">Very Slow Network Connections</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id450018">Samba Server Name-Change Problem</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="unicode.html">30. Unicode/Charsets</a></span></dt><dd><dl><dt><span class="sect1"><a href="unicode.html#id450204">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="unicode.html#id450250">What Are Charsets and Unicode?</a></span></dt><dt><span class="sect1"><a href="unicode.html#id450371">Samba and Charsets</a></span></dt><dt><span class="sect1"><a href="unicode.html#id450497">Conversion from Old Names</a></span></dt><dt><span class="sect1"><a href="unicode.html#id450526">Japanese Charsets</a></span></dt><dd><dl><dt><span class="sect2"><a href="unicode.html#id450646">Basic Parameter Setting</a></span></dt><dt><span class="sect2"><a href="unicode.html#id451226">Individual Implementations</a></span></dt><dt><span class="sect2"><a href="unicode.html#id451340">Migration from Samba-2.2 Series</a></span></dt></dl></dd><dt><span class="sect1"><a href="unicode.html#id451479">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="unicode.html#id451484">CP850.so Can't Be Found</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="Backup.html">31. Backup Techniques</a></span></dt><dd><dl><dt><span class="sect1"><a href="Backup.html#id451585">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="Backup.html#id451626">Discussion of Backup Solutions</a></span></dt><dd><dl><dt><span class="sect2"><a href="Backup.html#id451712">BackupPC</a></span></dt><dt><span class="sect2"><a href="Backup.html#id451875">Rsync</a></span></dt><dt><span class="sect2"><a href="Backup.html#id452035">Amanda</a></span></dt><dt><span class="sect2"><a href="Backup.html#id452079">BOBS: Browseable Online Backup System</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="SambaHA.html">32. High Availability</a></span></dt><dd><dl><dt><span class="sect1"><a href="SambaHA.html#id452170">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="SambaHA.html#id452277">Technical Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="SambaHA.html#id452309">The Ultimate Goal</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id452431">Why Is This So Hard?</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id453095">A Simple Solution</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id453168">High-Availability Server Products</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id453296">MS-DFS: The Poor Man's Cluster</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id453329">Conclusions</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="largefile.html">33. Handling Large Directories</a></span></dt><dt><span class="chapter"><a href="cfgsmarts.html">34. Advanced Configuration Techniques</a></span></dt><dd><dl><dt><span class="sect1"><a href="cfgsmarts.html#id453913">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="cfgsmarts.html#id453922">Multiple Server Hosting</a></span></dt><dt><span class="sect2"><a href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></span></dt><dt><span class="sect2"><a href="cfgsmarts.html#id455267">Multiple Virtual Server Hosting</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="migration.html">IV. Migration and Updating</a></span></dt><dd><dl><dt><span class="chapter"><a href="upgrading-to-3.0.html">35. Updating and Upgrading Samba</a></span></dt><dd><dl><dt><span class="sect1"><a href="upgrading-to-3.0.html#id456137">Key Update Requirements</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrading-to-3.0.html#id456157">Upgrading from Samba-3.0.x to Samba-3.2.0</a></span></dt><dt><span class="sect2"><a href="upgrading-to-3.0.html#oldupdatenotes">Upgrading from Samba-2.x to Samba-3.0.25</a></span></dt><dt><span class="sect2"><a href="upgrading-to-3.0.html#id456203">Quick Migration Guide</a></span></dt></dl></dd><dt><span class="sect1"><a href="upgrading-to-3.0.html#id456340">New Featuers in Samba-3.x Series</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrading-to-3.0.html#id456349">New Features in Samba-3.2.x Series</a></span></dt><dt><span class="sect2"><a href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a></span></dt><dt><span class="sect2"><a href="upgrading-to-3.0.html#id457510">New Functionality</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="NT4Migration.html">36. Migration from NT4 PDC to Samba-3 PDC</a></span></dt><dd><dl><dt><span class="sect1"><a href="NT4Migration.html#id458833">Planning and Getting Started</a></span></dt><dd><dl><dt><span class="sect2"><a href="NT4Migration.html#id458863">Objectives</a></span></dt><dt><span class="sect2"><a href="NT4Migration.html#id459730">Steps in Migration Process</a></span></dt></dl></dd><dt><span class="sect1"><a href="NT4Migration.html#id459954">Migration Options</a></span></dt><dd><dl><dt><span class="sect2"><a href="NT4Migration.html#id460036">Planning for Success</a></span></dt><dt><span class="sect2"><a href="NT4Migration.html#id460257">Samba-3 Implementation Choices</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="SWAT.html">37. SWAT: The Samba Web Administration Tool</a></span></dt><dd><dl><dt><span class="sect1"><a href="SWAT.html#id460718">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="SWAT.html#id460830">Guidelines and Technical Tips</a></span></dt><dd><dl><dt><span class="sect2"><a href="SWAT.html#id460847">Validate SWAT Installation</a></span></dt><dt><span class="sect2"><a href="SWAT.html#xinetd">Enabling SWAT for Use</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id461421">Securing SWAT through SSL</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id461566">Enabling SWAT Internationalization Support</a></span></dt></dl></dd><dt><span class="sect1"><a href="SWAT.html#id461751">Overview and Quick Tour</a></span></dt><dd><dl><dt><span class="sect2"><a href="SWAT.html#id461762">The SWAT Home Page</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id461815">Global Settings</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id461912">Share Settings</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id461964">Printers Settings</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id462016">The SWAT Wizard</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id462072">The Status Page</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id462111">The View Page</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id462129">The Password Change Page</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="troubleshooting.html">V. Troubleshooting</a></span></dt><dd><dl><dt><span class="chapter"><a href="diagnosis.html">38. The Samba Checklist</a></span></dt><dd><dl><dt><span class="sect1"><a href="diagnosis.html#id462256">Introduction</a></span></dt><dt><span class="sect1"><a href="diagnosis.html#id462289">Assumptions</a></span></dt><dt><span class="sect1"><a href="diagnosis.html#id462567">The Tests</a></span></dt></dl></dd><dt><span class="chapter"><a href="problems.html">39. Analyzing and Solving Samba Problems</a></span></dt><dd><dl><dt><span class="sect1"><a href="problems.html#id464214">Diagnostics Tools</a></span></dt><dd><dl><dt><span class="sect2"><a href="problems.html#id464263">Debugging with Samba Itself</a></span></dt><dt><span class="sect2"><a href="problems.html#id464508">Tcpdump</a></span></dt><dt><span class="sect2"><a href="problems.html#id464556">Ethereal</a></span></dt><dt><span class="sect2"><a href="problems.html#id464695">The Windows Network Monitor</a></span></dt></dl></dd><dt><span class="sect1"><a href="problems.html#id465001">Useful URLs</a></span></dt><dt><span class="sect1"><a href="problems.html#id465036">Getting Mailing List Help</a></span></dt><dt><span class="sect1"><a href="problems.html#id465191">How to Get Off the Mailing Lists</a></span></dt></dl></dd><dt><span class="chapter"><a href="bugreport.html">40. Reporting Bugs</a></span></dt><dd><dl><dt><span class="sect1"><a href="bugreport.html#id465317">Introduction</a></span></dt><dt><span class="sect1"><a href="bugreport.html#id465397">General Information</a></span></dt><dt><span class="sect1"><a href="bugreport.html#dbglvl">Debug Levels</a></span></dt><dd><dl><dt><span class="sect2"><a href="bugreport.html#id465615">Debugging-Specific Operations</a></span></dt></dl></dd><dt><span class="sect1"><a href="bugreport.html#id465810">Internal Errors</a></span></dt><dt><span class="sect1"><a href="bugreport.html#id465932">Attaching to a Running Process</a></span></dt><dt><span class="sect1"><a href="bugreport.html#id466047">Patches</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="Appendix.html">VI. Reference Section</a></span></dt><dd><dl><dt><span class="chapter"><a href="compiling.html">41. How to Compile Samba</a></span></dt><dd><dl><dt><span class="sect1"><a href="compiling.html#id466211">Access Samba Source Code via Subversion</a></span></dt><dd><dl><dt><span class="sect2"><a href="compiling.html#id466217">Introduction</a></span></dt><dt><span class="sect2"><a href="compiling.html#id466255">Subversion Access to samba.org</a></span></dt></dl></dd><dt><span class="sect1"><a href="compiling.html#id466427">Accessing the Samba Sources via rsync and ftp</a></span></dt><dt><span class="sect1"><a href="compiling.html#id466494">Verifying Samba's PGP Signature</a></span></dt><dt><span class="sect1"><a href="compiling.html#id466623">Building the Binaries</a></span></dt><dd><dl><dt><span class="sect2"><a href="compiling.html#id466846">Compiling Samba with Active Directory Support</a></span></dt></dl></dd><dt><span class="sect1"><a href="compiling.html#startingSamba">Starting the <span class="application">smbd</span> <span class="application">nmbd</span> and <span class="application">winbindd</span></a></span></dt><dd><dl><dt><span class="sect2"><a href="compiling.html#id467095">Starting from inetd.conf</a></span></dt><dt><span class="sect2"><a href="compiling.html#id467302">Alternative: Starting <span class="application">smbd</span> as a Daemon</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="Portability.html">42. Portability</a></span></dt><dd><dl><dt><span class="sect1"><a href="Portability.html#id467664">HPUX</a></span></dt><dt><span class="sect1"><a href="Portability.html#id467759">SCO UNIX</a></span></dt><dt><span class="sect1"><a href="Portability.html#id467791">DNIX</a></span></dt><dt><span class="sect1"><a href="Portability.html#id467920">Red Hat Linux</a></span></dt><dt><span class="sect1"><a href="Portability.html#id467959">AIX: Sequential Read Ahead</a></span></dt><dt><span class="sect1"><a href="Portability.html#id468013">Solaris</a></span></dt><dd><dl><dt><span class="sect2"><a href="Portability.html#id468019">Locking Improvements</a></span></dt><dt><span class="sect2"><a href="Portability.html#winbind-solaris9">Winbind on Solaris 9</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="Other-Clients.html">43. Samba and Other CIFS Clients</a></span></dt><dd><dl><dt><span class="sect1"><a href="Other-Clients.html#id468182">Macintosh Clients</a></span></dt><dt><span class="sect1"><a href="Other-Clients.html#id468258">OS2 Client</a></span></dt><dd><dl><dt><span class="sect2"><a href="Other-Clients.html#id468263">Configuring OS/2 Warp Connect or OS/2 Warp 4</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id468374">Configuring Other Versions of OS/2</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id468424">Printer Driver Download for OS/2 Clients</a></span></dt></dl></dd><dt><span class="sect1"><a href="Other-Clients.html#id468507">Windows for Workgroups</a></span></dt><dd><dl><dt><span class="sect2"><a href="Other-Clients.html#id468513">Latest TCP/IP Stack from Microsoft</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id468591">Delete .pwl Files After Password Change</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id468612">Configuring Windows for Workgroups Password Handling</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id468666">Password Case Sensitivity</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#id468694">Use TCP/IP as Default Protocol</a></span></dt><dt><span class="sect2"><a href="Other-Clients.html#speedimpr">Speed Improvement</a></span></dt></dl></dd><dt><span class="sect1"><a href="Other-Clients.html#id468745">Windows 95/98</a></span></dt><dd><dl><dt><span class="sect2"><a href="Other-Clients.html#id468809">Speed Improvement</a></span></dt></dl></dd><dt><span class="sect1"><a href="Other-Clients.html#id468827">Windows 2000 Service Pack 2</a></span></dt><dt><span class="sect1"><a href="Other-Clients.html#id469006">Windows NT 3.1</a></span></dt></dl></dd><dt><span class="chapter"><a href="speed.html">44. Samba Performance Tuning</a></span></dt><dd><dl><dt><span class="sect1"><a href="speed.html#id469111">Comparisons</a></span></dt><dt><span class="sect1"><a href="speed.html#id469140">Socket Options</a></span></dt><dt><span class="sect1"><a href="speed.html#id469225">Read Size</a></span></dt><dt><span class="sect1"><a href="speed.html#id469265">Max Xmit</a></span></dt><dt><span class="sect1"><a href="speed.html#id469307">Log Level</a></span></dt><dt><span class="sect1"><a href="speed.html#id469329">Read Raw</a></span></dt><dt><span class="sect1"><a href="speed.html#id469389">Write Raw</a></span></dt><dt><span class="sect1"><a href="speed.html#id469438">Slow Logins</a></span></dt><dt><span class="sect1"><a href="speed.html#id469459">Client Tuning</a></span></dt><dt><span class="sect1"><a href="speed.html#id469477">Samba Performance Problem Due to Changing Linux Kernel</a></span></dt><dt><span class="sect1"><a href="speed.html#id469561">Corrupt tdb Files</a></span></dt><dt><span class="sect1"><a href="speed.html#id469650">Samba Performance is Very Slow</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch-ldap-tls.html">45. LDAP and Transport Layer Security</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch-ldap-tls.html#s1-intro-ldap-tls">Introduction</a></span></dt><dt><span class="sect1"><a href="ch-ldap-tls.html#s1-config-ldap-tls">Configuring</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch-ldap-tls.html#s1-config-ldap-tls-certs">Generating the Certificate Authority</a></span></dt><dt><span class="sect2"><a href="ch-ldap-tls.html#s1-config-ldap-tls-server">Generating the Server Certificate</a></span></dt><dt><span class="sect2"><a href="ch-ldap-tls.html#s1-config-ldap-tls-install">Installing the Certificates</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch-ldap-tls.html#s1-test-ldap-tls">Testing</a></span></dt><dt><span class="sect1"><a href="ch-ldap-tls.html#s1-int-ldap-tls">Troubleshooting</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch46.html">46. Samba Support</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch46.html#id470724">Free Support</a></span></dt><dt><span class="sect1"><a href="ch46.html#id470922">Commercial Support</a></span></dt></dl></dd><dt><span class="chapter"><a href="DNSDHCP.html">47. DNS and DHCP Configuration Guide</a></span></dt><dd><dl><dt><span class="sect1"><a href="DNSDHCP.html#id471060">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="DNSDHCP.html#id471220">Example Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="DNSDHCP.html#id471296">Dynamic DNS</a></span></dt><dt><span class="sect2"><a href="DNSDHCP.html#DHCP">DHCP Server</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="appendix"><a href="apa.html">A. 
     <acronym class="acronym">GNU</acronym> General Public License version 3
-  </a></span></dt><dd><dl><dt><span class="bridgehead"><a href="apa.html#id2715218">A. 
+  </a></span></dt><dd><dl><dt><span class="bridgehead"><a href="apa.html#id471564">A. 
     Preamble
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2715362">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id471673">A. 
     TERMS AND CONDITIONS
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2715366">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id471677">A. 
     0. Definitions.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2715458">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id471740">A. 
     1. Source Code.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2715557">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id471802">A. 
     2. Basic Permissions.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2715597">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id471830">A. 
     3. Protecting Users&#8217; Legal Rights From Anti-Circumvention Law.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2715628">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id471854">A. 
     4. Conveying Verbatim Copies.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2715655">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id471873">A. 
     5. Conveying Modified Source Versions.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2715751">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id471945">A. 
     6. Conveying Non-Source Forms.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2715946">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472077">A. 
      7. Additional Terms.
-   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2716081">A. 
+   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472182">A. 
      8. Termination.
-   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2716125">A. 
+   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472214">A. 
      9. Acceptance Not Required for Having Copies.
-   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2716154">A. 
+   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472233">A. 
      10. Automatic Licensing of Downstream Recipients.
-   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2716206">A. 
+   </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472267">A. 
     11. Patents.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2716352">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472350">A. 
     12. No Surrender of Others&#8217; Freedom.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2716374">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472366">A. 
     13. Use with the ???TITLE??? Affero General Public License.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2716402">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472390">A. 
     14. Revised Versions of this License.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2716465">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472437">A. 
     15. Disclaimer of Warranty.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2716491">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472454">A. 
     16. Limitation of Liability.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2716511">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472469">A. 
     17. Interpretation of Sections 15 and 16.
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2716528">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472482">A. 
     END OF TERMS AND CONDITIONS
-  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id2716532">A. 
+  </a></span></dt><dt><span class="bridgehead"><a href="apa.html#id472485">A. 
     How to Apply These Terms to Your New Programs
   </a></span></dt></dl></dd><dt><span class="glossary"><a href="go01.html">Glossary</a></span></dt><dt><span class="index"><a href="ix01.html">Index</a></span></dt></dl></div><div class="list-of-figures"><p><b>List of Figures</b></p><dl><dt>4.1. <a href="samba-pdc.html#domain-example">An Example Domain.</a></dt><dt>8.1. <a href="ClientConfig.html#WXPP002">Network Bridge Configuration.</a></dt><dt>8.2. <a href="ClientConfig.html#WXPP003">Internet Protocol (TCP/IP) Properties.</a></dt><dt>8.3. <a href="ClientConfig.html#WXPP005">Advanced Network Settings</a></dt><dt>8.4. <a href="ClientConfig.html#WXPP014">DNS Configuration.</a></dt><dt>8.5. <a href="ClientConfig.html#WXPP009">WINS Configuration</a></dt><dt>8.6. <a href="ClientConfig.html#w2kp001">Local Area Connection Properties.</a></dt><dt>8.7. <a href="ClientConfig.html#w2kp002">Internet Protocol (TCP/IP) Properties.</a></dt><dt>8.8. <a href="ClientConfig.html#w2kp003">Advanced Network Settings.</a></dt><dt>8.9. <a href="ClientConfig.html#w2kp004">DNS Configuration.</a></dt><dt>8.10. <a href="ClientConfig.html#w2kp005">WINS Configuration.</a></dt><dt>8.11. <a href="ClientConfig.html#WME001">The Windows Me Network Configuration Panel.</a></dt><dt>8.12. <a href="ClientConfig.html#WME002">IP Address.</a></dt><dt>8.13. <a href="ClientConfig.html#WME005">DNS Configuration.</a></dt><dt>8.14. <a href="ClientConfig.html#WME003">WINS Configuration.</a></dt><dt>8.15. <a href="ClientConfig.html#wxpp001">The General Panel.</a></dt><dt>8.16. <a href="ClientConfig.html#wxpp004">The Computer Name Panel.</a></dt><dt>8.17. <a href="ClientConfig.html#wxpp006">The Computer Name Changes Panel.</a></dt><dt>8.18. <a href="ClientConfig.html#wxpp007">The Computer Name Changes Panel  Domain MIDEARTH.</a></dt><dt>8.19. <a href="ClientConfig.html#wxpp008">Computer Name Changes  Username and Password Panel.</a></dt><dt>8.20. <a href="ClientConfig.html#WME009">The Network Panel.</a></dt><dt>8.21. <a href="ClientConfig.html#WME010">Client for Microsoft Networks Properties Panel.</a></dt><dt>8.22. <a href="ClientConfig.html#WME013">Identification Panel.</a></dt><dt>8.23. <a href="ClientConfig.html#WME014">Access Control Panel.</a></dt><dt>10.1. <a href="NetworkBrowsing.html#browsing1">Cross-Subnet Browsing Example.</a></dt><dt>11.1. <a href="passdb.html#idmap-sid2uid">IDMAP: Resolution of SIDs to UIDs.</a></dt><dt>11.2. <a href="passdb.html#idmap-uid2sid">IDMAP: Resolution of UIDs to SIDs.</a></dt><dt>12.1. <a href="groupmapping.html#idmap-sid2gid">IDMAP: Group SID-to-GID Resolution.</a></dt><dt>12.2. <a href="groupmapping.html#idmap-gid2sid">IDMAP: GID Resolution to Matching SID.</a></dt><dt>12.3. <a href="groupmapping.html#idmap-store-gid2sid">IDMAP Storing Group Mappings.</a></dt><dt>16.1. <a href="AccessControls.html#access1">Overview of UNIX permissions field.</a></dt><dt>19.1. <a href="InterdomainTrusts.html#trusts1">Trusts overview.</a></dt><dt>22.1. <a href="CUPS-printing.html#1small">Windows Printing to a Local Printer.</a></dt><dt>22.2. <a href="CUPS-printing.html#2small">Printing to a PostScript Printer.</a></dt><dt>22.3. <a href="CUPS-printing.html#3small">Ghostscript as a RIP for Non-PostScript Printers.</a></dt><dt>22.4. <a href="CUPS-printing.html#4small">Prefiltering in CUPS to Form PostScript.</a></dt><dt>22.5. <a href="CUPS-printing.html#5small">Adding Device-Specific Print Options.</a></dt><dt>22.6. <a href="CUPS-printing.html#cups-raster">PostScript to Intermediate Raster Format.</a></dt><dt>22.7. <a href="CUPS-printing.html#cups-raster2">CUPS-Raster Production Using Ghostscript.</a></dt><dt>22.8. <a href="CUPS-printing.html#small8">Image Format to CUPS-Raster Format Conversion.</a></dt><dt>22.9. <a href="CUPS-printing.html#small9">Raster to Printer-Specific Formats.</a></dt><dt>22.10. <a href="CUPS-printing.html#cupsomatic-dia">cupsomatic/foomatic Processing Versus Native CUPS.</a></dt><dt>22.11. <a href="CUPS-printing.html#pdftosocket">PDF to Socket Chain.</a></dt><dt>22.12. <a href="CUPS-printing.html#pdftoepsonusb">PDF to USB Chain.</a></dt><dt>22.13. <a href="CUPS-printing.html#small11">Print Driver Execution on the Client.</a></dt><dt>22.14. <a href="CUPS-printing.html#small12">Print Driver Execution on the Server.</a></dt><dt>22.15. <a href="CUPS-printing.html#13small">Printing via CUPS/Samba Server.</a></dt><dt>22.16. <a href="CUPS-printing.html#small14">cupsaddsmb Flowchart.</a></dt><dt>22.17. <a href="CUPS-printing.html#cups1">Filtering Chain 1.</a></dt><dt>22.18. <a href="CUPS-printing.html#cups2">Filtering Chain with cupsomatic</a></dt><dt>22.19. <a href="CUPS-printing.html#a_small">CUPS Printing Overview.</a></dt><dt>24.1. <a href="winbind.html#winbind_idmap">Winbind Idmap</a></dt><dt>39.1. <a href="problems.html#ethereal1">Starting a Capture.</a></dt><dt>39.2. <a href="problems.html#ethereal2">Main Ethereal Data Window.</a></dt></dl></div><div class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>1.1. <a href="install.html#tdbpermfiledesc">Persistent TDB File Descriptions</a></dt><dt>1.2. <a href="install.html#tdbtempfiledesc">Temporary TDB File Descriptions</a></dt><dt>5.1. <a href="samba-bdc.html#pdc-bdc-table">Domain Backend Account Distribution Options</a></dt><dt>6.1. <a href="domain-member.html#assumptions">Assumptions</a></dt><dt>9.1. <a href="ChangeNotes.html#TOSH-domgroups">Essential Domain Group Mappings</a></dt><dt>10.1. <a href="NetworkBrowsing.html#browsubnet">Browse Subnet Example 1</a></dt><dt>10.2. <a href="NetworkBrowsing.html#brsbex">Browse Subnet Example 2</a></dt><dt>10.3. <a href="NetworkBrowsing.html#brsex2">Browse Subnet Example 3</a></dt><dt>10.4. <a href="NetworkBrowsing.html#brsex3">Browse Subnet Example 4</a></dt><dt>11.1. <a href="passdb.html#policycontrols">NT4 Domain v's Samba Policy Controls</a></dt><dt>11.2. <a href="passdb.html#accountflags">Samba SAM Account Control Block Flags</a></dt><dt>11.3. <a href="passdb.html#attribobjclPartA">Attributes in the sambaSamAccount ObjectClass (LDAP), Part A</a></dt><dt>11.4. <a href="passdb.html#attribobjclPartB">Attributes in the sambaSamAccount ObjectClass (LDAP), Part B</a></dt><dt>11.5. <a href="passdb.html#ldappwsync">Possible <em class="parameter"><code>ldap passwd sync</code></em> Values</a></dt><dt>12.1. <a href="groupmapping.html#WKURIDS">Well-Known User Default RIDs</a></dt><dt>15.1. <a href="rights.html#rp-privs">Current Privilege Capabilities</a></dt><dt>16.1. <a href="AccessControls.html#TOSH-Accesstbl">Managing Directories with UNIX and Windows</a></dt><dt>16.2. <a href="AccessControls.html#ugbc">User- and Group-Based Controls</a></dt><dt>16.3. <a href="AccessControls.html#fdpbc">File and Directory Permission-Based Controls</a></dt><dt>16.4. <a href="AccessControls.html#mcoc">Other Controls</a></dt><dt>16.5. <a href="AccessControls.html#fdsacls">How Windows File ACLs Map to UNIX POSIX File ACLs</a></dt><dt>21.1. <a href="classicalprinting.html#printOptions">Default Printing Settings</a></dt><dt>22.1. <a href="CUPS-printing.html#cups-ppds">PPDs Shipped with CUPS</a></dt><dt>23.1. <a href="VFS.html#xtdaudit">Extended Auditing Log Information</a></dt><dt>27.1. <a href="ProfileMgmt.html#ProfileLocs">User Shell Folder Registry Keys Default Values</a></dt><dt>27.2. <a href="ProfileMgmt.html#regkeys">Defaults of Profile Settings Registry Keys</a></dt><dt>27.3. <a href="ProfileMgmt.html#defregpthkeys">Defaults of Default User Profile Paths Registry Keys</a></dt><dt>28.1. <a href="pam.html#smbpassoptions">Options recognized by <em class="parameter"><code>pam_smbpass</code></em></a></dt><dt>29.1. <a href="integrate-ms-networks.html#uniqnetbiosnames">Unique NetBIOS Names</a></dt><dt>29.2. <a href="integrate-ms-networks.html#netbiosnamesgrp">Group Names</a></dt><dt>30.1. <a href="unicode.html#japancharsets">Japanese Character Sets in Samba-2.2 and Samba-3</a></dt><dt>35.1. <a href="upgrading-to-3.0.html#oldtdbfiledesc">Samba-2.2.x TDB File Descriptions</a></dt><dt>36.1. <a href="NT4Migration.html#majtypes">The Three Major Site Types</a></dt><dt>36.2. <a href="NT4Migration.html#natconchoices">Nature of the Conversion Choices</a></dt><dt>40.1. <a href="bugreport.html#dbgclass">Debuggable Functions</a></dt></dl></div><div class="list-of-examples"><p><b>List of Examples</b></p><dl><dt>1.1. <a href="install.html#smbconfminimal">A minimal smb.conf</a></dt><dt>1.2. <a href="install.html#simple-example">Another simple smb.conf File</a></dt><dt>2.1. <a href="FastStart.html#anon-example">Anonymous Read-Only Server Configuration</a></dt><dt>2.2. <a href="FastStart.html#anon-rw">Modified Anonymous Read-Write smb.conf</a></dt><dt>2.3. <a href="FastStart.html#anon-print">Anonymous Print Server smb.conf</a></dt><dt>2.4. <a href="FastStart.html#OfficeServer">Secure Office Server smb.conf</a></dt><dt>2.5. <a href="FastStart.html#fast-member-server">Member Server smb.conf (Globals)</a></dt><dt>2.6. <a href="FastStart.html#fast-memberserver-shares">Member Server smb.conf (Shares and Services)</a></dt><dt>2.7. <a href="FastStart.html#fast-engoffice-global">Engineering Office smb.conf (globals)</a></dt><dt>2.8. <a href="FastStart.html#fast-engoffice-shares">Engineering Office smb.conf (shares and services)</a></dt><dt>2.9. <a href="FastStart.html#fast-ldap">LDAP backend smb.conf for PDC</a></dt><dt>2.10. <a href="FastStart.html#fast-bdc">Remote LDAP BDC smb.conf</a></dt><dt>4.1. <a href="samba-pdc.html#pdc-example">smb.conf for being a PDC</a></dt><dt>4.2. <a href="samba-pdc.html#PDC-config">smb.conf for being a PDC</a></dt><dt>5.1. <a href="samba-bdc.html#minimalPDC">Minimal smb.conf for a PDC in Use with a BDC  LDAP Server on PDC</a></dt><dt>5.2. <a href="samba-bdc.html#mulitldapcfg">Multiple LDAP Servers in <code class="filename">smb.conf</code></a></dt><dt>5.3. <a href="samba-bdc.html#minim-bdc">Minimal Setup for Being a BDC</a></dt><dt>7.1. <a href="StandAloneServer.html#simplynice">smb.conf for Reference Documentation Server</a></dt><dt>7.2. <a href="StandAloneServer.html#AnonPtrSvr"><code class="filename">smb.conf</code> for Anonymous Printing</a></dt><dt>10.1. <a href="NetworkBrowsing.html#dmbexample">Domain Master Browser smb.conf</a></dt><dt>10.2. <a href="NetworkBrowsing.html#lmbexample">Local master browser smb.conf</a></dt><dt>10.3. <a href="NetworkBrowsing.html#nombexample">smb.conf for Not Being a Master Browser</a></dt><dt>10.4. <a href="NetworkBrowsing.html#remsmb">Local Master Browser smb.conf</a></dt><dt>10.5. <a href="NetworkBrowsing.html#xremmb"><code class="filename">smb.conf</code> for Not Being a master browser</a></dt><dt>11.1. <a href="passdb.html#idmapbackendexample">Example Configuration with the LDAP idmap Backend</a></dt><dt>11.2. <a href="passdb.html#confldapex">Configuration with LDAP</a></dt><dt>12.1. <a href="groupmapping.html#smbgrpadd.sh">smbgrpadd.sh</a></dt><dt>12.2. <a href="groupmapping.html#smbgrpadd">Configuration of <code class="filename">smb.conf</code> for the add group Script</a></dt><dt>12.3. <a href="groupmapping.html#set-group-map">Script to Set Group Mapping</a></dt><dt>13.1. <a href="NetCommand.html#autopoweruserscript">Script to Auto-add Domain Users to Workstation Power Users Group</a></dt><dt>13.2. <a href="NetCommand.html#magicnetlogon">A Magic Netlogon Share</a></dt><dt>14.1. <a href="idmapper.html#idmapnt4dms">NT4 Domain Member Server smb.conf</a></dt><dt>14.2. <a href="idmapper.html#idmapadsdms">ADS Domain Member Server smb.conf</a></dt><dt>14.3. <a href="idmapper.html#idmapadsridDMS">ADS Domain Member smb.conf using idmap_rid</a></dt><dt>14.4. <a href="idmapper.html#idmapldapDMS">ADS Domain Member Server using LDAP</a></dt><dt>14.5. <a href="idmapper.html#idmaprfc2307">ADS Domain Member Server using RFC2307bis Schema Extension Date via NSS</a></dt><dt>16.1. <a href="AccessControls.html#access2">Example File</a></dt><dt>17.1. <a href="locking.html#far1">Share with Some Files Oplocked</a></dt><dt>17.2. <a href="locking.html#far3">Configuration with Oplock Break Contention Limit</a></dt><dt>20.1. <a href="msdfs.html#dfscfg">smb.conf with DFS Configured</a></dt><dt>21.1. <a href="classicalprinting.html#simpleprc">Simple Configuration with BSD Printing</a></dt><dt>21.2. <a href="classicalprinting.html#extbsdpr">Extended BSD Printing Configuration</a></dt><dt>21.3. <a href="classicalprinting.html#prtdollar">[print$] Example</a></dt><dt>22.1. <a href="CUPS-printing.html#cups-exam-simple">Simplest Printing-Related smb.conf</a></dt><dt>22.2. <a href="CUPS-printing.html#overridesettings">Overriding Global CUPS Settings for One Printer</a></dt><dt>22.3. <a href="CUPS-printing.html#cupsadd-ex">smb.conf for cupsaddsmb Usage</a></dt><dt>23.1. <a href="VFS.html#vfsrecyc">smb.conf with VFS modules</a></dt><dt>23.2. <a href="VFS.html#multimodule">smb.conf with multiple VFS modules</a></dt><dt>23.3. <a href="VFS.html#vfsshadow">Share With shadow_copy VFS</a></dt><dt>24.1. <a href="winbind.html#winbindcfg">smb.conf for Winbind Setup</a></dt><dt>25.1. <a href="AdvancedNetworkManagement.html#Tpees">Script to Enforce Single Resource Logon</a></dt><dt>30.1. <a href="unicode.html#vfscap-intl">VFS CAP</a></dt><dt>34.1. <a href="cfgsmarts.html#elastic">Elastic smb.conf File</a></dt><dt>34.2. <a href="cfgsmarts.html#cdserver">CDROM Server smb-cdserver.conf file</a></dt><dt>34.3. <a href="cfgsmarts.html#mastersmbc">Master smb.conf File Global Section</a></dt><dt>34.4. <a href="cfgsmarts.html#merlinsmbc">MERLIN smb-merlin.conf File Share Section</a></dt><dt>34.5. <a href="cfgsmarts.html#sauronsmbc">SAURON smb-sauron.conf File Share Section</a></dt><dt>38.1. <a href="diagnosis.html#tmpshare">smb.conf with [tmp] Share</a></dt><dt>38.2. <a href="diagnosis.html#modif1">Configuration for Allowing Connections Only from a Certain Subnet</a></dt><dt>38.3. <a href="diagnosis.html#modif2">Configuration for Allowing Connections from a Certain Subnet and localhost</a></dt><dt>43.1. <a href="Other-Clients.html#minimalprofile">Minimal Profile Share</a></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="pr01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"> </td><td width="40%" align="right" valign="top"> About the Cover Artwork</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/install.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/install.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/install.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,32 +1,32 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 1. How to Install and Test SAMBA</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="introduction.html" title="Part I. General Installation"><link rel="prev" href="introduction.html" title="Part I. General Installation"><link rel="next" href="FastStart.html" title="Chapter 2. Fast Start: Cure for Impatience"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 1. How to Install and Test SAMBA</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="introduction.html">Prev</a> </td><th width="60%" align="center">Part I. General Installation</th><td width="20%" align="right"> <a accesskey="n" href="FastStart.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="install"></a>Chapter 1. How to Install and Test SAMBA</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Andrew</span> <span class="surname">Tridgell</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:tridge at samba.org">tridge at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Karl</span> <span class="surname">Auer</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:kauer at biplane.com.au">kauer at biplane.com.au</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Dan</span> <span class="surname">Shearer</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:dan at samba.org">dan at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="install.html#id2573105">Obtaining and Installing Samba</a></span></dt><dt><span class="sect1"><a href="install.html#id2573150">Configuring Samba (smb.conf)</a></span></dt><dd><dl><dt><span class="sect2"><a href="install.html#id2573195">Configuration File Syntax</a></span></dt><dt><span class="sect2"><a href="install.html#tdbdocs">TDB Database File Information</a></span></dt><dt><span class="sect2"><a href="install.html#id2574163">Starting Samba</a></span></dt><dt><span class="sect2"><a href="install.html#id2574356">Example Configuration</a></span></dt><dt><span class="sect2"><a href="install.html#id2574798">SWAT</a></span></dt></dl></dd><dt><span class="sect1"><a href="install.html#id2574859">List Shares Available on the Server</a></span></dt><dt><span class="sect1"><a href="install.html#id2574914">Connect with a UNIX Client</a></span></dt><dt><span class="sect1"><a href="install.html#id2575014">Connect from a Remote SMB Client</a></span></dt><dd><dl><dt><span class="sect2"><a href="install.html#id2575101">What If Things Don't Work?</a></span></dt><dt><span class="sect2"><a href="install.html#id2575146">Still Stuck?</a></span></dt></dl></dd><dt><span class="sect1"><a href="install.html#id2575180">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="install.html#id2575190">Large Number of smbd Processes</a></span></dt><dt><span class="sect2"><a href="install.html#id2575285">Error Message: open_oplock_ipc</a></span></dt><dt><span class="sect2"><a href="install.html#id2575319">&#8220;<span class="quote"><span class="errorname">The network name cannot be found</span></span>&#8221;</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2573105"></a>Obtaining and Installing Samba</h2></div></div></div><p>
-	<a class="indexterm" name="id2573114"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 1. How to Install and Test SAMBA</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="introduction.html" title="Part I. General Installation"><link rel="prev" href="introduction.html" title="Part I. General Installation"><link rel="next" href="FastStart.html" title="Chapter 2. Fast Start: Cure for Impatience"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 1. How to Install and Test SAMBA</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="introduction.html">Prev</a> </td><th width="60%" align="center">Part I. General Installation</th><td width="20%" align="right"> <a accesskey="n" href="FastStart.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="install"></a>Chapter 1. How to Install and Test SAMBA</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Andrew</span> <span class="surname">Tridgell</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:tridge at samba.org">tridge at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Karl</span> <span class="surname">Auer</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:kauer at biplane.com.au">kauer at biplane.com.au</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Dan</span> <span class="surname">Shearer</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:dan at samba.org">dan at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="install.html#id341745">Obtaining and Installing Samba</a></span></dt><dt><span class="sect1"><a href="install.html#id341784">Configuring Samba (smb.conf)</a></span></dt><dd><dl><dt><span class="sect2"><a href="install.html#id341822">Configuration File Syntax</a></span></dt><dt><span class="sect2"><a href="install.html#tdbdocs">TDB Database File Information</a></span></dt><dt><span class="sect2"><a href="install.html#id342668">Starting Samba</a></span></dt><dt><span class="sect2"><a href="install.html#id342835">Example Configuration</a></span></dt><dt><span class="sect2"><a href="install.html#id343214">SWAT</a></span></dt></dl></dd><dt><span class="sect1"><a href="install.html#id343263">List Shares Available on the Server</a></span></dt><dt><span class="sect1"><a href="install.html#id343310">Connect with a UNIX Client</a></span></dt><dt><span class="sect1"><a href="install.html#id343396">Connect from a Remote SMB Client</a></span></dt><dd><dl><dt><span class="sect2"><a href="install.html#id343468">What If Things Don't Work?</a></span></dt><dt><span class="sect2"><a href="install.html#id343501">Still Stuck?</a></span></dt></dl></dd><dt><span class="sect1"><a href="install.html#id343527">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="install.html#id343536">Large Number of smbd Processes</a></span></dt><dt><span class="sect2"><a href="install.html#id343615">Error Message: open_oplock_ipc</a></span></dt><dt><span class="sect2"><a href="install.html#id343643">&#8220;<span class="quote"><span class="errorname">The network name cannot be found</span></span>&#8221;</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id341745"></a>Obtaining and Installing Samba</h2></div></div></div><p>
+	<a class="indexterm" name="id341753"></a>
 	Binary packages of Samba are included in almost any Linux or UNIX distribution. There are also some
 	packages available at <a class="ulink" href="http://samba.org/" target="_top">the Samba home page</a>. Refer to the manual of your
 	operating system for details on installing packages for your specific operating system.
 	</p><p>
-	<a class="indexterm" name="id2573133"></a>
+	<a class="indexterm" name="id341770"></a>
 	If you need to compile Samba from source, check <a class="link" href="compiling.html" title="Chapter 41. How to Compile Samba">How to Compile Samba</a>.
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2573150"></a>Configuring Samba (smb.conf)</h2></div></div></div><p>
-	<a class="indexterm" name="id2573158"></a>
-	<a class="indexterm" name="id2573165"></a>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id341784"></a>Configuring Samba (smb.conf)</h2></div></div></div><p>
+	<a class="indexterm" name="id341791"></a>
+	<a class="indexterm" name="id341797"></a>
 	Samba's configuration is stored in the <code class="filename">smb.conf</code> file, which usually resides in
 	<code class="filename">/etc/samba/smb.conf</code> or <code class="filename">/usr/local/samba/lib/smb.conf</code>. You can either
 	edit this file yourself or do it using one of the many graphical tools that are available, such as the
 	Web-based interface SWAT, that is included with Samba.
-	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2573195"></a>Configuration File Syntax</h3></div></div></div><p>
-	<a class="indexterm" name="id2573203"></a>
+	</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id341822"></a>Configuration File Syntax</h3></div></div></div><p>
+	<a class="indexterm" name="id341829"></a>
 	The <code class="filename">smb.conf</code> file uses the same syntax as the various old <code class="filename">.ini</code> files in Windows
 	3.1: Each file consists of various sections, which are started by putting the section name between brackets
 	(<code class="literal">[]</code>) on a new line. Each contains zero or more key/value pairs separated by an equality
 	sign (<code class="literal">=</code>). The file is just a plaintext file, so you can open and edit it with your favorite
 	editing tool.
 	</p><p>
-	<a class="indexterm" name="id2573243"></a>
-	<a class="indexterm" name="id2573250"></a>
-	<a class="indexterm" name="id2573259"></a>
-	<a class="indexterm" name="id2573266"></a>
-	<a class="indexterm" name="id2573273"></a>
-	<a class="indexterm" name="id2573282"></a>
+	<a class="indexterm" name="id341863"></a>
+	<a class="indexterm" name="id341869"></a>
+	<a class="indexterm" name="id341877"></a>
+	<a class="indexterm" name="id341884"></a>
+	<a class="indexterm" name="id341890"></a>
+	<a class="indexterm" name="id341898"></a>
 	Each section in the <code class="filename">smb.conf</code> file represents either a share or a meta-service on the Samba server. The
 	section <code class="literal">[global]</code> is special, since it contains settings that apply to the whole Samba
 	server.  Samba supports a number of meta-services, each of which serves its own purpose. For example, the
@@ -35,12 +35,12 @@
 	and that specifies the location of the intermediate spool directory into which print jobs are received
 	from Windows clients prior to being dispatched to the UNIX/Linux print spooler.
 	</p><p>
-<a class="indexterm" name="id2573328"></a>
-<a class="indexterm" name="id2573335"></a>
-<a class="indexterm" name="id2573342"></a>
-<a class="indexterm" name="id2573349"></a>
-<a class="indexterm" name="id2573356"></a>
-<a class="indexterm" name="id2573362"></a>
+<a class="indexterm" name="id341936"></a>
+<a class="indexterm" name="id341942"></a>
+<a class="indexterm" name="id341949"></a>
+<a class="indexterm" name="id341955"></a>
+<a class="indexterm" name="id341961"></a>
+<a class="indexterm" name="id341968"></a>
 	The <code class="literal">printers</code> meta-service will cause every printer that is either specified in a
 	<code class="literal">printcap</code> file, via the <code class="literal">lpstat</code>,  or via the CUPS API, to be
 	published as a shared print queue. The <code class="literal">printers</code> stanza in the <code class="filename">smb.conf</code> file can
@@ -49,20 +49,20 @@
 	available as Windows print queues. If a <code class="literal">comment</code> parameter is specified, the value
 	of it will be displayed as part of the printer name in Windows Explorer browse lists.
 	</p><p>
-	<a class="indexterm" name="id2573417"></a>
+	<a class="indexterm" name="id342013"></a>
 	Each section of the <code class="filename">smb.conf</code> file that specifies a share, or a meta-service, is called a stanza.
 	The <code class="literal">global</code> stanza specifies settings that affect all the other stanzas in the
 	<code class="filename">smb.conf</code> file. Configuration parameters are documented in the <code class="filename">smb.conf</code> man page. Some parameters
 	can be used only in the <code class="literal">global</code> stanza, some only in share or meta-service stanzas,
 	and some can be used globally or just within a share or meta-service stanza.
 	</p><p>
-	<a class="indexterm" name="id2573464"></a>
+	<a class="indexterm" name="id342051"></a>
 	<a class="link" href="install.html#smbconfminimal" title="Example 1.1. A minimal smb.conf">A minimal smb.conf</a> contains a very minimal <code class="filename">smb.conf</code>.
-	<a class="indexterm" name="id2573487"></a>
-	</p><div class="example"><a name="smbconfminimal"></a><p class="title"><b>Example 1.1. A minimal smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2573519"></a><em class="parameter"><code>workgroup = WKG</code></em></td></tr><tr><td><a class="indexterm" name="id2573530"></a><em class="parameter"><code>netbios name = MYNAME</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[share1]</code></em></td></tr><tr><td><a class="indexterm" name="id2573551"></a><em class="parameter"><code>path = /tmp</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[share2]</code></em></td></tr><tr><td><a class="indexterm" name="id2573572"></a><em class="parameter"><code>path = /my_shared_folder</code></em></td></tr><tr><td><a class="indexterm" name="id2573583"></a><em class="parameter"><code>comment = Some random files</code></em></td></tr></table></div></div><br class="example-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="tdbdocs"></a>TDB Database File Information</h3></div></div></div><p>
+	<a class="indexterm" name="id342070"></a>
+	</p><div class="example"><a name="smbconfminimal"></a><p class="title"><b>Example 1.1. A minimal smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id342098"></a><em class="parameter"><code>workgroup = WKG</code></em></td></tr><tr><td><a class="indexterm" name="id342109"></a><em class="parameter"><code>netbios name = MYNAME</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[share1]</code></em></td></tr><tr><td><a class="indexterm" name="id342127"></a><em class="parameter"><code>path = /tmp</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[share2]</code></em></td></tr><tr><td><a class="indexterm" name="id342146"></a><em class="parameter"><code>path = /my_shared_folder</code></em></td></tr><tr><td><a class="indexterm" name="id342157"></a><em class="parameter"><code>comment = Some random files</code></em></td></tr></table></div></div><br class="example-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="tdbdocs"></a>TDB Database File Information</h3></div></div></div><p>
 	This section contains brief descriptions of the databases that are used by Samba-3.
 	</p><p>
-<a class="indexterm" name="id2573614"></a>
+<a class="indexterm" name="id342183"></a>
 	The directory in which Samba stores the tdb files is determined by compile-time directives. Samba-3 stores
 	tdb files in two locations. The best way to determine these locations is to execute the following
 	command:
@@ -80,7 +80,7 @@
 	Therefore the remaining control files will, in the example shown, be stored in the
 	<code class="filename">/var/lib/samba</code> directory.
 	</p><p>
-<a class="indexterm" name="id2573670"></a>
+<a class="indexterm" name="id342229"></a>
 	The persistent tdb files are described in <a class="link" href="install.html#tdbpermfiledesc" title="Table 1.1. Persistent TDB File Descriptions">the Persistent TDB File
 	Descriptions table</a>. All persistent tdb files should be regularly backed up. Use the
 	<code class="literal">tdbbackup</code> utility to backup the tdb files. All persistent tdb files must be
@@ -106,27 +106,27 @@
 				information so that clients that have temporarily disconnected can reconnect without
 				needing to renegotiate the connection setup process.
 			</p></td><td align="left">no</td></tr><tr><td align="left">sessionid</td><td align="justify"><p>Temporary cache for miscellaneous session information and for utmp handling.</p></td><td align="left">no</td></tr><tr><td align="left">unexpected</td><td align="justify"><p>Stores packets received for which no process is actively listening.</p></td><td align="left">no</td></tr><tr><td align="left">winbindd_cache</td><td align="justify"><p>Cache of Identity information received from an NT4 domain or from ADS. Includes user
-				lists, etc.</p></td><td align="left">yes</td></tr></tbody></table></div></div><br class="table-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2574163"></a>Starting Samba</h3></div></div></div><p>
-	<a class="indexterm" name="id2574171"></a>
+				lists, etc.</p></td><td align="left">yes</td></tr></tbody></table></div></div><br class="table-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id342668"></a>Starting Samba</h3></div></div></div><p>
+	<a class="indexterm" name="id342675"></a>
 	Samba essentially consists of two or three daemons. A daemon is a UNIX application that runs in the background and provides services.
 	An example of a service is the Apache Web server for which the daemon is called <code class="literal">httpd</code>. In the case of Samba there
 	are three daemons, two of which are needed as a minimum.
 	</p><p>
 	The Samba server is made up of the following daemons:
 	</p><div class="variablelist"><dl><dt><span class="term">nmbd</span></dt><dd><p>
-			<a class="indexterm" name="id2574204"></a>
-			<a class="indexterm" name="id2574210"></a>
+			<a class="indexterm" name="id342704"></a>
+			<a class="indexterm" name="id342710"></a>
 			This daemon handles all name registration and resolution requests. It is the primary vehicle involved
 			in network browsing. It handles all UDP-based protocols. The <code class="literal">nmbd</code> daemon should
 			be the first command started as part of the Samba startup process.
 			</p></dd><dt><span class="term">smbd</span></dt><dd><p>
-			<a class="indexterm" name="id2574240"></a>
-			<a class="indexterm" name="id2574247"></a>
+			<a class="indexterm" name="id342736"></a>
+			<a class="indexterm" name="id342742"></a>
 			This daemon handles all TCP/IP-based connection services for file- and print-based operations. It also
 			manages local authentication. It should be started immediately following the startup of <code class="literal">nmbd</code>.
 			</p></dd><dt><span class="term">winbindd</span></dt><dd><p>
-			<a class="indexterm" name="id2574275"></a>
-			<a class="indexterm" name="id2574282"></a>
+			<a class="indexterm" name="id342767"></a>
+			<a class="indexterm" name="id342774"></a>
 			This daemon should be started when Samba is a member of a Windows NT4 or ADS domain. It is also needed when
 			Samba has trust relationships with another domain. The <code class="literal">winbindd</code> daemon will check the
 			<code class="filename">smb.conf</code> file for the presence of the <em class="parameter"><code>idmap uid</code></em> and <em class="parameter"><code>idmap gid</code></em>
@@ -134,36 +134,36 @@
 			for UID and GID allocation. If these parameters are not specified, <code class="literal">winbindd</code>
 			will start but it will not be able to allocate UIDs or GIDs.
 			</p></dd></dl></div><p>
-	<a class="indexterm" name="id2574339"></a>
+	<a class="indexterm" name="id342822"></a>
 	When Samba has been packaged by an operating system vendor, the startup process is typically a custom feature of its
 	integration into the platform as a whole. Please refer to your operating system platform administration manuals for
 	specific information pertaining to correct management of Samba startup.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2574356"></a>Example Configuration</h3></div></div></div><p>
-	<a class="indexterm" name="id2574364"></a>
-	<a class="indexterm" name="id2574371"></a>
-	<a class="indexterm" name="id2574378"></a>
-	<a class="indexterm" name="id2574384"></a>
-	<a class="indexterm" name="id2574391"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id342835"></a>Example Configuration</h3></div></div></div><p>
+	<a class="indexterm" name="id342843"></a>
+	<a class="indexterm" name="id342849"></a>
+	<a class="indexterm" name="id342855"></a>
+	<a class="indexterm" name="id342861"></a>
+	<a class="indexterm" name="id342868"></a>
 	There are sample configuration files in the examples subdirectory in the source code distribution tarball
 	package. It is suggested you read them carefully so you can see how the options go together in practice. See
 	the man page for all the options.  It might be worthwhile to start out with the
 	<code class="filename">smb.conf.default</code> configuration file and adapt it to your needs. It contains plenty of comments.
 	</p><p>
-	<a class="indexterm" name="id2574414"></a>
+	<a class="indexterm" name="id342886"></a>
 	The simplest useful configuration file would contain something like that shown in
 	<a class="link" href="install.html#simple-example" title="Example 1.2. Another simple smb.conf File">Another simple smb.conf File</a>.
-	<a class="indexterm" name="id2574434"></a>
-	</p><div class="example"><a name="simple-example"></a><p class="title"><b>Example 1.2. Another simple smb.conf File</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2574466"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id2574486"></a><em class="parameter"><code>guest ok = no</code></em></td></tr><tr><td><a class="indexterm" name="id2574498"></a><em class="parameter"><code>read only = no</code></em></td></tr></table></div></div><br class="example-break"><p>
-	<a class="indexterm" name="id2574512"></a>
-	<a class="indexterm" name="id2574519"></a>
-	<a class="indexterm" name="id2574526"></a>
-	<a class="indexterm" name="id2574533"></a>
+	<a class="indexterm" name="id342900"></a>
+	</p><div class="example"><a name="simple-example"></a><p class="title"><b>Example 1.2. Another simple smb.conf File</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id342928"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[homes]</code></em></td></tr><tr><td><a class="indexterm" name="id342947"></a><em class="parameter"><code>guest ok = no</code></em></td></tr><tr><td><a class="indexterm" name="id342958"></a><em class="parameter"><code>read only = no</code></em></td></tr></table></div></div><br class="example-break"><p>
+	<a class="indexterm" name="id342971"></a>
+	<a class="indexterm" name="id342978"></a>
+	<a class="indexterm" name="id342984"></a>
+	<a class="indexterm" name="id342990"></a>
 	This will allow connections by anyone with an account on the server, using either
 	their login name or <em class="parameter"><code>homes</code></em> as the service name.
 	(Note: The workgroup that Samba should appear in must also be set. The default
 	workgroup name is WORKGROUP.)
 	</p><p>
-	<a class="indexterm" name="id2574553"></a>
+	<a class="indexterm" name="id343007"></a>
 	Make sure you put the <code class="filename">smb.conf</code> file in the correct place. Note, the correct location of this file
 	depends on how the binary files were built. You can discover the correct location by executing from
 	the directory that contains the <code class="literal">smbd</code> command file:
@@ -171,13 +171,13 @@
 <code class="prompt">root# </code> smbd -b | grep smb.conf
 </pre><p>
 	</p><p>
-	<a class="indexterm" name="id2574591"></a>
+	<a class="indexterm" name="id343039"></a>
 	For more information about security settings for the <em class="parameter"><code>[homes]</code></em> share, please refer to 
 	<a class="link" href="securing-samba.html" title="Chapter 18. Securing Samba">Securing Samba</a>.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2574615"></a>Test Your Config File with <code class="literal">testparm</code></h4></div></div></div><p>
-	<a class="indexterm" name="id2574628"></a>
-	<a class="indexterm" name="id2574635"></a>
-	<a class="indexterm" name="id2574642"></a>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id343059"></a>Test Your Config File with <code class="literal">testparm</code></h4></div></div></div><p>
+	<a class="indexterm" name="id343071"></a>
+	<a class="indexterm" name="id343077"></a>
+	<a class="indexterm" name="id343083"></a>
 	It's important to validate the contents of the <code class="filename">smb.conf</code> file using the <span class="application">testparm</span> program.
 	If testparm runs correctly, it will list the loaded services. If not, it will give an error message.
 	Make sure it runs correctly and that the services look reasonable before proceeding. Enter the command: 
@@ -189,10 +189,10 @@
 	</p><p>
 	Always run testparm again whenever the <code class="filename">smb.conf</code> file is changed!
 	</p><p>
-	<a class="indexterm" name="id2574693"></a>
-	<a class="indexterm" name="id2574700"></a>
-	<a class="indexterm" name="id2574707"></a>
-	<a class="indexterm" name="id2574714"></a>
+	<a class="indexterm" name="id343126"></a>
+	<a class="indexterm" name="id343132"></a>
+	<a class="indexterm" name="id343138"></a>
+	<a class="indexterm" name="id343144"></a>
 	The <code class="filename">smb.conf</code> file is constantly checked by the Samba daemons <code class="literal">smbd</code> and every instance of
 	itself that it spawns, <code class="literal">nmbd</code> and <code class="literal">winbindd</code>. It is good practice to
 	keep this file as small as possible. Many administrators prefer to document Samba configuration settings
@@ -205,8 +205,8 @@
 </pre><p>
 	This administrative method makes it possible to maintain detailed configuration change records while at
 	the same time keeping the working <code class="filename">smb.conf</code> file size to the minimum necessary.
-	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2574798"></a>SWAT</h3></div></div></div><p>
-	<a class="indexterm" name="id2574806"></a>
+	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343214"></a>SWAT</h3></div></div></div><p>
+	<a class="indexterm" name="id343221"></a>
 	SWAT is a Web-based interface that can be used to facilitate the configuration of Samba.  SWAT might not
 	be available in the Samba package that shipped with your platform, but in a separate package. If it is
 	necesaary to built SWAT please read the SWAT man page regarding compilation, installation, and
@@ -221,7 +221,7 @@
 	machine leaves your connection open to password sniffing because passwords will be sent over the wire in the clear. 
 	</p><p>
 	More information about SWAT can be found in <a class="link" href="SWAT.html" title="Chapter 37. SWAT: The Samba Web Administration Tool">The Samba Web Administration Tool</a>.
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2574859"></a>List Shares Available on the Server</h2></div></div></div><p>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id343263"></a>List Shares Available on the Server</h2></div></div></div><p>
 	To list shares that are available from the configured Samba server, execute the
 	following command:
 	</p><pre class="screen">
@@ -235,7 +235,7 @@
 	before it will list the shares. See the <code class="literal">smbclient</code> man page for details.
 	You can force it to list the shares without a password by adding the option
 	<code class="option">-N</code> to the command line. 
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2574914"></a>Connect with a UNIX Client</h2></div></div></div><p>
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id343310"></a>Connect with a UNIX Client</h2></div></div></div><p>
 	Enter the following command:
 </p><pre class="screen">
 <code class="prompt">$ </code><strong class="userinput"><code>smbclient <em class="replaceable"><code> //yourhostname/aservice</code></em></code></strong>
@@ -244,7 +244,7 @@
 	file. Try your username if you just have a <em class="parameter"><code>[homes]</code></em> section in the <code class="filename">smb.conf</code> file.</p><p>Example: If the UNIX host is called <em class="replaceable"><code>bambi</code></em> and a valid login name
 	is <em class="replaceable"><code>fred</code></em>, you would type:</p><pre class="screen">
 <code class="prompt">$ </code><strong class="userinput"><code>smbclient //<em class="replaceable"><code>bambi</code></em>/<em class="replaceable"><code>fred</code></em></code></strong>
-</pre></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2575014"></a>Connect from a Remote SMB Client</h2></div></div></div><p>
+</pre></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id343396"></a>Connect from a Remote SMB Client</h2></div></div></div><p>
 	Now that Samba is working correctly locally, you can try to access it from other clients. Within a few
 	minutes, the Samba host should be listed in the Network Neighborhood on all Windows clients of its subnet.
 	Try browsing the server from another client or "mounting" it.
@@ -265,7 +265,7 @@
 	be sent to the printer that owns the spoolservice that has been specified.
 	</p><p>
 </p><pre class="screen"><code class="prompt">C:\&gt; </code><strong class="userinput"><code>print filename</code></strong>
-</pre><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575101"></a>What If Things Don't Work?</h3></div></div></div><p>
+</pre><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343468"></a>What If Things Don't Work?</h3></div></div></div><p>
 	You might want to read <a class="link" href="diagnosis.html" title="Chapter 38. The Samba Checklist">The Samba Checklist</a>.  If you are still
 	stuck, refer to <a class="link" href="problems.html" title="Chapter 39. Analyzing and Solving Samba Problems">Analyzing and Solving Samba Problems</a>.  Samba has
 	been successfully installed at thousands of sites worldwide.  It is unlikely that your particular problem is
@@ -277,7 +277,7 @@
 	Simply choose from the first five chapters the network design that most closely matches site needs,
 	then follow the simple step-by-step procedure to deploy it. Later, when you have a working network
 	you may well want to refer back to this book for further insight into opportunities for improvement.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575146"></a>Still Stuck?</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343501"></a>Still Stuck?</h3></div></div></div><p>
 	The best advice under the stress of abject frustration is to cool down! That may be challenging
 	of itself, but while you are angry or annoyed your ability to seek out a solution is somewhat
 	undermined. A cool head clears the way to finding the answer you are looking for. Just remember,
@@ -286,9 +286,9 @@
 	</p><p>
 	Now that you have cooled down a bit, please refer to <a class="link" href="diagnosis.html" title="Chapter 38. The Samba Checklist">the Samba Checklist</a>
 	for a process that can be followed to identify the cause of your problem.
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2575180"></a>Common Errors</h2></div></div></div><p>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id343527"></a>Common Errors</h2></div></div></div><p>
 The following questions and issues are raised repeatedly on the Samba mailing list.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575190"></a>Large Number of smbd Processes</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343536"></a>Large Number of smbd Processes</h3></div></div></div><p>
 	Samba consists of three core programs: <span class="application">nmbd</span>, <span class="application">smbd</span>, and <span class="application">winbindd</span>. <span class="application">nmbd</span> is the name server message daemon,
 	<span class="application">smbd</span> is the server message daemon, and <span class="application">winbindd</span> is the daemon that handles communication with domain controllers.
 	</p><p>
@@ -301,14 +301,14 @@
 	</p><p>
 	<span class="application">winbindd</span> will run as one or two daemons, depending on whether or not it is being
 	run in <span class="emphasis"><em>split mode</em></span> (in which case there will be two instances).
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575285"></a>Error Message: open_oplock_ipc</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343615"></a>Error Message: open_oplock_ipc</h3></div></div></div><p>
 	An error message is observed in the log files when <span class="application">smbd</span> is started: &#8220;<span class="quote">open_oplock_ipc: Failed to
 	get local UDP socket for address 100007f. Error was Cannot assign requested.</span>&#8221;
 	</p><p>
 	Your loopback device isn't working correctly. Make sure it is configured correctly. The loopback
 	device is an internal (virtual) network device with the IP address <span class="emphasis"><em>127.0.0.1</em></span>.
 	Read your OS documentation for details on how to configure the loopback on your system.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575319"></a>&#8220;<span class="quote"><span class="errorname">The network name cannot be found</span></span>&#8221;</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343643"></a>&#8220;<span class="quote"><span class="errorname">The network name cannot be found</span></span>&#8221;</h3></div></div></div><p>
 		This error can be caused by one of these misconfigurations:
 		</p><div class="itemizedlist"><ul type="disc"><li><p>You specified a nonexisting path
 			for the share in <code class="filename">smb.conf</code>.</p></li><li><p>The user you are trying to access the share with does not 

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/integrate-ms-networks.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/integrate-ms-networks.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/integrate-ms-networks.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,18 +1,18 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 29. Integrating MS Windows Networks with Samba</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="pam.html" title="Chapter 28. PAM-Based Distributed Authentication"><link rel="next" href="unicode.html" title="Chapter 30. Unicode/Charsets"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 29. Integrating MS Windows Networks with Samba</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pam.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="unicode.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="integrate-ms-networks"></a>Chapter 29. Integrating MS Windows Networks with Samba</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate"> (Jan 01 2001) </p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="integrate-ms-networks.html#id2690415">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="integrate-ms-networks.html#id2690436">Background Information</a></span></dt><dt><span class="sect1"><a href="integrate-ms-networks.html#id2690564">Name Resolution in a Pure UNIX/Linux World</a></span></dt><dd><dl><dt><span class="sect2"><a href="integrate-ms-networks.html#id2690637"><code class="filename">/etc/hosts</code></a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2690816"><code class="filename">/etc/resolv.conf</code></a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2690852"><code class="filename">/etc/host.conf</code></a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2690904"><code class="filename">/etc/nsswitch.conf</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="integrate-ms-networks.html#id2691028">Name Resolution as Used within MS Windows Networking</a></span></dt><dd><dl><dt><span class="sect2"><a href="integrate-ms-networks.html#id2691462">The NetBIOS Name Cache</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2691548">The LMHOSTS File</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2691714">HOSTS File</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2691742">DNS Lookup</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2691769">WINS Lookup</a></span></dt></dl></dd><dt><span class="sect1"><a href="integrate-ms-networks.html#id2691907">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="integrate-ms-networks.html#id2691920">Pinging Works Only One Way</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2691951">Very Slow Network Connections</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2691993">Samba Server Name-Change Problem</a></span></dt></dl></dd></dl></div><p>
-<a class="indexterm" name="id2690373"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 29. Integrating MS Windows Networks with Samba</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="pam.html" title="Chapter 28. PAM-Based Distributed Authentication"><link rel="next" href="unicode.html" title="Chapter 30. Unicode/Charsets"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 29. Integrating MS Windows Networks with Samba</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pam.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="unicode.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="integrate-ms-networks"></a>Chapter 29. Integrating MS Windows Networks with Samba</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate"> (Jan 01 2001) </p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="integrate-ms-networks.html#id448624">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="integrate-ms-networks.html#id448641">Background Information</a></span></dt><dt><span class="sect1"><a href="integrate-ms-networks.html#id448760">Name Resolution in a Pure UNIX/Linux World</a></span></dt><dd><dl><dt><span class="sect2"><a href="integrate-ms-networks.html#id448831"><code class="filename">/etc/hosts</code></a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id448992"><code class="filename">/etc/resolv.conf</code></a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id449025"><code class="filename">/etc/host.conf</code></a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id449073"><code class="filename">/etc/nsswitch.conf</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="integrate-ms-networks.html#id449183">Name Resolution as Used within MS Windows Networking</a></span></dt><dd><dl><dt><span class="sect2"><a href="integrate-ms-networks.html#id449576">The NetBIOS Name Cache</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id449659">The LMHOSTS File</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id449764">HOSTS File</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id449789">DNS Lookup</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id449811">WINS Lookup</a></span></dt></dl></dd><dt><span class="sect1"><a href="integrate-ms-networks.html#id449942">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="integrate-ms-networks.html#id449953">Pinging Works Only One Way</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id449980">Very Slow Network Connections</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id450018">Samba Server Name-Change Problem</a></span></dt></dl></dd></dl></div><p>
+<a class="indexterm" name="id448587"></a>
 This chapter deals with NetBIOS over TCP/IP name to IP address resolution. If
 your MS Windows clients are not configured to use NetBIOS over TCP/IP, then this
 section does not apply to your installation. If your installation involves the use of
 NetBIOS over TCP/IP, then this chapter may help you to resolve networking problems.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2690391"></a>
-<a class="indexterm" name="id2690397"></a>
+<a class="indexterm" name="id448602"></a>
+<a class="indexterm" name="id448609"></a>
 NetBIOS over TCP/IP has nothing to do with NetBEUI. NetBEUI is NetBIOS
 over Logical Link Control (LLC). On modern networks it is highly advised
 to not run NetBEUI at all. Note also that there is no such thing as
 NetBEUI over TCP/IP  the existence of such a protocol is a complete
 and utter misapprehension.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2690415"></a>Features and Benefits</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id448624"></a>Features and Benefits</h2></div></div></div><p>
 Many MS Windows network administrators have never been exposed to basic TCP/IP
 networking as it is implemented in a UNIX/Linux operating system. Likewise, many UNIX and
 Linux administrators have not been exposed to the intricacies of MS Windows TCP/IP-based
@@ -20,12 +20,12 @@
 </p><p>
 This chapter gives a short introduction to the basics of how a name can be resolved to 
 its IP address for each operating system environment.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2690436"></a>Background Information</h2></div></div></div><p>
-<a class="indexterm" name="id2690443"></a>
-<a class="indexterm" name="id2690450"></a>
-<a class="indexterm" name="id2690457"></a>
-<a class="indexterm" name="id2690464"></a>
-<a class="indexterm" name="id2690471"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id448641"></a>Background Information</h2></div></div></div><p>
+<a class="indexterm" name="id448648"></a>
+<a class="indexterm" name="id448655"></a>
+<a class="indexterm" name="id448662"></a>
+<a class="indexterm" name="id448669"></a>
+<a class="indexterm" name="id448676"></a>
 Since the introduction of MS Windows 2000, it is possible to run MS Windows networking
 without the use of NetBIOS over TCP/IP. NetBIOS over TCP/IP uses UDP port 137 for NetBIOS
 name resolution and uses TCP port 139 for NetBIOS session services. When NetBIOS over
@@ -36,43 +36,43 @@
 the client will use UDP port 137 (NetBIOS Name Service, also known as the Windows Internet
 Name Service, or WINS), TCP port 139, and TCP port 445 (for actual file and print traffic).
 </p></div><p>
-<a class="indexterm" name="id2690499"></a>
-<a class="indexterm" name="id2690505"></a>
-<a class="indexterm" name="id2690512"></a>
-<a class="indexterm" name="id2690519"></a>
-<a class="indexterm" name="id2690526"></a>
-<a class="indexterm" name="id2690532"></a>
+<a class="indexterm" name="id448698"></a>
+<a class="indexterm" name="id448704"></a>
+<a class="indexterm" name="id448711"></a>
+<a class="indexterm" name="id448718"></a>
+<a class="indexterm" name="id448724"></a>
+<a class="indexterm" name="id448731"></a>
 When NetBIOS over TCP/IP is disabled, the use of DNS is essential. Most installations that disable NetBIOS
 over TCP/IP today use MS Active Directory Service (ADS). ADS requires
-<a class="indexterm" name="id2690542"></a> dynamic DNS with Service Resource
-Records (SRV RR) and with Incremental Zone Transfers (IXFR).  <a class="indexterm" name="id2690553"></a>
+<a class="indexterm" name="id448740"></a> dynamic DNS with Service Resource
+Records (SRV RR) and with Incremental Zone Transfers (IXFR).  <a class="indexterm" name="id448750"></a>
 Use of DHCP with ADS is recommended as a further means of maintaining central control over the client
 workstation network configuration.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2690564"></a>Name Resolution in a Pure UNIX/Linux World</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id448760"></a>Name Resolution in a Pure UNIX/Linux World</h2></div></div></div><p>
 The key configuration files covered in this section are:
-</p><a class="indexterm" name="id2690575"></a><a class="indexterm" name="id2690581"></a><a class="indexterm" name="id2690588"></a><a class="indexterm" name="id2690595"></a><div class="itemizedlist"><ul type="disc"><li><p><code class="filename">/etc/hosts</code></p></li><li><p><code class="filename">/etc/resolv.conf</code></p></li><li><p><code class="filename">/etc/host.conf</code></p></li><li><p><code class="filename">/etc/nsswitch.conf</code></p></li></ul></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2690637"></a><code class="filename">/etc/hosts</code></h3></div></div></div><p>
+</p><a class="indexterm" name="id448770"></a><a class="indexterm" name="id448776"></a><a class="indexterm" name="id448783"></a><a class="indexterm" name="id448790"></a><div class="itemizedlist"><ul type="disc"><li><p><code class="filename">/etc/hosts</code></p></li><li><p><code class="filename">/etc/resolv.conf</code></p></li><li><p><code class="filename">/etc/host.conf</code></p></li><li><p><code class="filename">/etc/nsswitch.conf</code></p></li></ul></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id448831"></a><code class="filename">/etc/hosts</code></h3></div></div></div><p>
 This file contains a static list of IP addresses and names.
 </p><pre class="programlisting">
 127.0.0.1	localhost localhost.localdomain
 192.168.1.1	bigbox.quenya.org	bigbox	alias4box
 </pre><p>
 </p><p>
-<a class="indexterm" name="id2690660"></a>
-<a class="indexterm" name="id2690667"></a>
+<a class="indexterm" name="id448853"></a>
+<a class="indexterm" name="id448860"></a>
 The purpose of <code class="filename">/etc/hosts</code> is to provide a 
 name resolution mechanism so users do not need to remember 
 IP addresses.
 </p><p>
-<a class="indexterm" name="id2690685"></a>
-<a class="indexterm" name="id2690692"></a>
-<a class="indexterm" name="id2690699"></a>
+<a class="indexterm" name="id448876"></a>
+<a class="indexterm" name="id448883"></a>
+<a class="indexterm" name="id448890"></a>
 Network packets that are sent over the physical network transport 
 layer communicate not via IP addresses but rather using the Media 
 Access Control address, or MAC address. IP addresses are currently 
 32 bits in length and are typically presented as four decimal 
 numbers that are separated by a dot (or period)  for example, 168.192.1.1.
 </p><p>
-<a class="indexterm" name="id2690718"></a>
+<a class="indexterm" name="id448906"></a>
 MAC addresses use 48 bits (or 6 bytes) and are typically represented 
 as two-digit hexadecimal numbers separated by colons: 40:8e:0a:12:34:56.
 </p><p>
@@ -84,14 +84,14 @@
 address can be assigned per MAC address. One address must be the primary IP address  this is the
 address that will be returned in the Address Resolution Protocol (ARP) reply.
 </p><p>
-<a class="indexterm" name="id2690748"></a>
+<a class="indexterm" name="id448929"></a>
 When a user or a process wants to communicate with another machine, 
 the protocol implementation ensures that the &#8220;<span class="quote">machine name</span>&#8221; or &#8220;<span class="quote">host 
 name</span>&#8221; is resolved to an IP address in a manner that is controlled 
 by the TCP/IP configuration control files. The file 
 <code class="filename">/etc/hosts</code> is one such file.
 </p><p>
-<a class="indexterm" name="id2690775"></a>
+<a class="indexterm" name="id448954"></a>
 When the IP address of the destination interface has been determined, a protocol called ARP/RARP is used to
 identify the MAC address of the target interface. ARP is a broadcast-oriented method that uses User Datagram
 Protocol (UDP) to send a request to all interfaces on the local network segment using the all 1s MAC address.
@@ -99,7 +99,7 @@
 address ff:ff:ff:ff:ff:ff. The reply packet from an ARP request will contain the MAC address and the primary
 IP address for each interface.
 </p><p>
-<a class="indexterm" name="id2690795"></a>
+<a class="indexterm" name="id448974"></a>
 The <code class="filename">/etc/hosts</code> file is foundational to all 
 UNIX/Linux TCP/IP installations and as a minimum will contain 
 the localhost and local network interface IP addresses and the 
@@ -107,7 +107,7 @@
 This file helps to prime the pump so a basic level of name 
 resolution can exist before any other method of name resolution 
 becomes available.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2690816"></a><code class="filename">/etc/resolv.conf</code></h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id448992"></a><code class="filename">/etc/resolv.conf</code></h3></div></div></div><p>
 This file tells the name resolution libraries:
 </p><div class="itemizedlist"><ul type="disc"><li><p>The name of the domain to which the machine 
 	belongs.
@@ -117,8 +117,8 @@
 	</p></li><li><p>The name or IP address of available domain 
 	name servers that may be asked to perform name-to-address 
 	translation lookups.
-	</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2690852"></a><code class="filename">/etc/host.conf</code></h3></div></div></div><p>
-<a class="indexterm" name="id2690864"></a>
+	</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id449025"></a><code class="filename">/etc/host.conf</code></h3></div></div></div><p>
+<a class="indexterm" name="id449036"></a>
 <code class="filename">/etc/host.conf</code> is the primary means by which the setting in
 <code class="filename">/etc/resolv.conf</code> may be effected. It is a critical configuration file. This file controls
 the order by which name resolution may proceed. The typical structure is:
@@ -127,8 +127,8 @@
 multi on
 </pre><p>Both addresses should be returned. Please refer to the 
 man page for <code class="filename">host.conf</code> for further details.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2690904"></a><code class="filename">/etc/nsswitch.conf</code></h3></div></div></div><p>
-<a class="indexterm" name="id2690915"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id449073"></a><code class="filename">/etc/nsswitch.conf</code></h3></div></div></div><p>
+<a class="indexterm" name="id449084"></a>
 This file controls the actual name resolution targets. The 
 file typically has resolver object specifications as follows:
 </p><pre class="programlisting">
@@ -160,11 +160,11 @@
 sent, TCP/IP networks are silent. All TCP/IP communications assume a 
 principal of speaking only when necessary.
 </p><p>
-<a class="indexterm" name="id2690951"></a>
-<a class="indexterm" name="id2690958"></a>
-<a class="indexterm" name="id2690965"></a>
-<a class="indexterm" name="id2690972"></a>
-<a class="indexterm" name="id2690979"></a>
+<a class="indexterm" name="id449113"></a>
+<a class="indexterm" name="id449120"></a>
+<a class="indexterm" name="id449126"></a>
+<a class="indexterm" name="id449133"></a>
+<a class="indexterm" name="id449140"></a>
 Starting with version 2.2.0, Samba has Linux support for extensions to 
 the name service switch infrastructure so Linux clients will 
 be able to obtain resolution of MS Windows NetBIOS names to IP 
@@ -177,11 +177,11 @@
 will be possible to ping any MS Windows machine by its NetBIOS 
 machine name, as long as that machine is within the workgroup to 
 which both the Samba machine and the MS Windows machine belong.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2691028"></a>Name Resolution as Used within MS Windows Networking</h2></div></div></div><p>
-<a class="indexterm" name="id2691036"></a>
-<a class="indexterm" name="id2691043"></a>
-<a class="indexterm" name="id2691050"></a>
-<a class="indexterm" name="id2691057"></a>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id449183"></a>Name Resolution as Used within MS Windows Networking</h2></div></div></div><p>
+<a class="indexterm" name="id449191"></a>
+<a class="indexterm" name="id449198"></a>
+<a class="indexterm" name="id449204"></a>
+<a class="indexterm" name="id449211"></a>
 MS Windows networking is predicated on the name each machine is given. This name is known variously (and
 inconsistently) as the &#8220;<span class="quote">computer name,</span>&#8221; &#8220;<span class="quote">machine name,</span>&#8221; &#8220;<span class="quote">networking
 name,</span>&#8221; &#8220;<span class="quote">NetBIOS name,</span>&#8221; or &#8220;<span class="quote">SMB name.</span>&#8221; All terms mean the same thing with the
@@ -195,16 +195,16 @@
 <a class="link" href="integrate-ms-networks.html#uniqnetbiosnames" title="Table 29.1. Unique NetBIOS Names">Unique NetBIOS names</a> and <a class="link" href="integrate-ms-networks.html#netbiosnamesgrp" title="Table 29.2. Group Names">group names</a> tables 
 list typical NetBIOS name/service type registrations.
 </p><div class="table"><a name="uniqnetbiosnames"></a><p class="title"><b>Table 29.1. Unique NetBIOS Names</b></p><div class="table-contents"><table summary="Unique NetBIOS Names" border="1"><colgroup><col align="left"><col align="justify"></colgroup><tbody><tr><td align="left">MACHINENAME&lt;00&gt;</td><td align="justify">Server Service is running on MACHINENAME</td></tr><tr><td align="left">MACHINENAME&lt;03&gt;</td><td align="justify">Generic machine name (NetBIOS name)</td></tr><tr><td align="left">MACHINENAME&lt;20&gt;</td><td align="justify">LanMan server service is running on MACHINENAME</td></tr><tr><td align="left">WORKGROUP&lt;1b&gt;</td><td align="justify">Domain master browser</td></tr></tbody></table></div></div><br class="table-break"><div class="table"><a name="netbiosnamesgrp"></a><p class="title"><b>Table 29.2. Group Names</b></p><div class="table-contents"><table summary="Group Names" border="1"><colgroup><col align="left"><col align="justify"></colgroup><tbody><tr><td align="left">WORKGROUP&lt;03&gt;</td><td align="justify">Generic name registered by all members of WORKGROUP</td></tr><tr><td align="left">WORKGROUP&lt;1c&gt;</td><td align="justify">Domain cntrollers/netlogon servers</td></tr><tr><td align="left">WORKGROUP&lt;1d&gt;</td><td align="justify">Local master browsers</td></tr><tr><td align="left">WORKGROUP&lt;1e&gt;</td><td align="justify">Browser election service</td></tr></tbody></table></div></div><br class="table-break"><p>
-<a class="indexterm" name="id2691253"></a>
+<a class="indexterm" name="id449393"></a>
 It should be noted that all NetBIOS machines register their own 
 names as per <a class="link" href="integrate-ms-networks.html#uniqnetbiosnames" title="Table 29.1. Unique NetBIOS Names">Unique NetBIOS names</a> and <a class="link" href="integrate-ms-networks.html#netbiosnamesgrp" title="Table 29.2. Group Names">group names</a>. This is in vast contrast to TCP/IP 
 installations where the system administrator traditionally 
 determines in the <code class="filename">/etc/hosts</code> or in the DNS database what names 
 are associated with each IP address.
 </p><p>
-<a class="indexterm" name="id2691288"></a>
-<a class="indexterm" name="id2691295"></a>
-<a class="indexterm" name="id2691302"></a>
+<a class="indexterm" name="id449425"></a>
+<a class="indexterm" name="id449432"></a>
+<a class="indexterm" name="id449439"></a>
 One further point of clarification should be noted. The <code class="filename">/etc/hosts</code> 
 file and the DNS records do not provide the NetBIOS name information 
 that MS Windows clients depend on to locate the type of service that may 
@@ -216,8 +216,8 @@
 IP address that is returned in the enumerated list of IP addresses.
 Whichever machine first replies, it then ends up providing the logon services.
 </p><p>
-<a class="indexterm" name="id2691333"></a>
-<a class="indexterm" name="id2691340"></a>
+<a class="indexterm" name="id449463"></a>
+<a class="indexterm" name="id449469"></a>
 The name &#8220;<span class="quote">workgroup</span>&#8221; or &#8220;<span class="quote">domain</span>&#8221; really can be confusing, since these 
 have the added significance of indicating what is the security 
 architecture of the MS Windows network. The term &#8220;<span class="quote">workgroup</span>&#8221; indicates 
@@ -230,14 +230,14 @@
 user-level security in a workgroup environment, thus requiring the use 
 of a username and a matching password.
 </p><p>
-<a class="indexterm" name="id2691373"></a>
-<a class="indexterm" name="id2691379"></a>
-<a class="indexterm" name="id2691389"></a>
-<a class="indexterm" name="id2691398"></a>
-<a class="indexterm" name="id2691408"></a>
-<a class="indexterm" name="id2691417"></a>
-<a class="indexterm" name="id2691424"></a>
-<a class="indexterm" name="id2691431"></a>
+<a class="indexterm" name="id449496"></a>
+<a class="indexterm" name="id449503"></a>
+<a class="indexterm" name="id449512"></a>
+<a class="indexterm" name="id449521"></a>
+<a class="indexterm" name="id449531"></a>
+<a class="indexterm" name="id449540"></a>
+<a class="indexterm" name="id449546"></a>
+<a class="indexterm" name="id449553"></a>
 MS Windows networking is thus predetermined to use machine names 
 for all local and remote machine message passing. The protocol used is 
 called Server Message Block (SMB), and this is implemented using 
@@ -252,10 +252,10 @@
 MS Windows machines use a complex array of name resolution mechanisms. 
 Since we are primarily concerned with TCP/IP, this demonstration is 
 limited to this area.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2691462"></a>The NetBIOS Name Cache</h3></div></div></div><p>
-<a class="indexterm" name="id2691470"></a>
-<a class="indexterm" name="id2691476"></a>
-<a class="indexterm" name="id2691483"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id449576"></a>The NetBIOS Name Cache</h3></div></div></div><p>
+<a class="indexterm" name="id449584"></a>
+<a class="indexterm" name="id449591"></a>
+<a class="indexterm" name="id449598"></a>
 All MS Windows machines employ an in-memory buffer in which is 
 stored the NetBIOS names and IP addresses for all external 
 machines that machine has communicated with over the 
@@ -263,7 +263,7 @@
 for a machine from the local cache than it is to go through all the 
 configured name resolution mechanisms.
 </p><p>
-<a class="indexterm" name="id2691498"></a>
+<a class="indexterm" name="id449609"></a>
 If a machine whose name is in the local name cache is shut 
 down before the name is expired and flushed from the cache, then 
 an attempt to exchange a message with that machine will be subject 
@@ -271,14 +271,14 @@
 lookup will succeed, but the machine cannot respond. This can be 
 frustrating for users but is a characteristic of the protocol.
 </p><p>
-<a class="indexterm" name="id2691514"></a>
-<a class="indexterm" name="id2691521"></a>
-<a class="indexterm" name="id2691528"></a>
+<a class="indexterm" name="id449626"></a>
+<a class="indexterm" name="id449633"></a>
+<a class="indexterm" name="id449640"></a>
 The MS Windows utility that allows examination of the NetBIOS 
 name cache is called &#8220;<span class="quote">nbtstat.</span>&#8221; The Samba equivalent
 is called <code class="literal">nmblookup</code>.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2691548"></a>The LMHOSTS File</h3></div></div></div><p>
-<a class="indexterm" name="id2691556"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id449659"></a>The LMHOSTS File</h3></div></div></div><p>
+<a class="indexterm" name="id449667"></a>
 This file is usually located in MS Windows NT 4.0 or Windows 200x/XP in the directory
 <code class="filename">%SystemRoot%\SYSTEM32\DRIVERS\ETC</code> and contains the IP address
 and the machine name in matched pairs. The <code class="filename">LMHOSTS</code> file
@@ -363,15 +363,15 @@
 # so keeping the number of comments to a minimum will improve performance.
 # Therefore it is not advisable to simply add lmhosts file entries onto the
 # end of this file.
-</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2691714"></a>HOSTS File</h3></div></div></div><p>
+</pre></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id449764"></a>HOSTS File</h3></div></div></div><p>
 This file is usually located in MS Windows NT 4.0 or Windows 200x/XP in 
 the directory <code class="filename">%SystemRoot%\SYSTEM32\DRIVERS\ETC</code> and contains 
 the IP address and the IP hostname in matched pairs. It can be 
 used by the name resolution infrastructure in MS Windows, depending 
 on how the TCP/IP environment is configured. This file is in 
 every way the equivalent of the UNIX/Linux <code class="filename">/etc/hosts</code> file.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2691742"></a>DNS Lookup</h3></div></div></div><p>
-<a class="indexterm" name="id2691750"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id449789"></a>DNS Lookup</h3></div></div></div><p>
+<a class="indexterm" name="id449796"></a>
 This capability is configured in the TCP/IP setup area in the network 
 configuration facility. If enabled, an elaborate name resolution sequence 
 is followed, the precise nature of which is dependent on how the NetBIOS 
@@ -382,10 +382,10 @@
 Node Type 8, then a NetBIOS Unicast (over UDP Unicast) is sent to the 
 WINS server to obtain a lookup before DNS, HOSTS, LMHOSTS, or broadcast 
 lookup is used.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2691769"></a>WINS Lookup</h3></div></div></div><p>
-<a class="indexterm" name="id2691777"></a>
-<a class="indexterm" name="id2691784"></a>
-<a class="indexterm" name="id2691794"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id449811"></a>WINS Lookup</h3></div></div></div><p>
+<a class="indexterm" name="id449818"></a>
+<a class="indexterm" name="id449825"></a>
+<a class="indexterm" name="id449835"></a>
 A WINS (Windows Internet Name Server) service is the equivalent of the 
 rfc1001/1002 specified NBNS (NetBIOS Name Server). A WINS server stores 
 the names and IP addresses that are registered by a Windows client 
@@ -393,19 +393,19 @@
 </p><p>
 To configure Samba to be a WINS server, the following parameter needs 
 to be added to the <code class="filename">smb.conf</code> file:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2691826"></a><em class="parameter"><code>wins support = Yes</code></em></td></tr></table><p>
-<a class="indexterm" name="id2691840"></a>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id449864"></a><em class="parameter"><code>wins support = Yes</code></em></td></tr></table><p>
+<a class="indexterm" name="id449878"></a>
 To configure Samba to use a WINS server, the following parameters are 
 needed in the <code class="filename">smb.conf</code> file:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2691862"></a><em class="parameter"><code>wins support = No</code></em></td></tr><tr><td><a class="indexterm" name="id2691874"></a><em class="parameter"><code>wins server = xxx.xxx.xxx.xxx</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id449899"></a><em class="parameter"><code>wins support = No</code></em></td></tr><tr><td><a class="indexterm" name="id449910"></a><em class="parameter"><code>wins server = xxx.xxx.xxx.xxx</code></em></td></tr></table><p>
 where <em class="replaceable"><code>xxx.xxx.xxx.xxx</code></em> is the IP address 
 of the WINS server.
 </p><p>For information about setting up Samba as a WINS server, read 
-<a class="link" href="NetworkBrowsing.html" title="Chapter 10. Network Browsing">Network Browsing</a>.</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2691907"></a>Common Errors</h2></div></div></div><p>
+<a class="link" href="NetworkBrowsing.html" title="Chapter 10. Network Browsing">Network Browsing</a>.</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id449942"></a>Common Errors</h2></div></div></div><p>
 TCP/IP network configuration problems find every network administrator sooner or later.
 The cause can be anything from keyboard mishaps to forgetfulness to simple mistakes to
 carelessness. Of course, no one is ever deliberately careless!
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2691920"></a>Pinging Works Only One Way</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id449953"></a>Pinging Works Only One Way</h3></div></div></div><p>
 	&#8220;<span class="quote">I can ping my Samba server from Windows, but I cannot ping my Windows
 	machine from the Samba server.</span>&#8221;
 	</p><p>
@@ -415,10 +415,10 @@
 	</p><p>
 	Due to inconsistent netmasks, the Windows machine was on network 192.168.1.0/24, while
 	the Samba server was on network 192.168.1.128/25  logically a different network.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2691951"></a>Very Slow Network Connections</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id449980"></a>Very Slow Network Connections</h3></div></div></div><p>
 	A common cause of slow network response includes:
 	</p><div class="itemizedlist"><ul type="disc"><li><p>Client is configured to use DNS and the DNS server is down.</p></li><li><p>Client is configured to use remote DNS server, but the
-		remote connection is down.</p></li><li><p>Client is configured to use a WINS server, but there is no WINS server.</p></li><li><p>Client is not configured to use a WINS server, but there is a WINS server.</p></li><li><p>Firewall is filtering out DNS or WINS traffic.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2691993"></a>Samba Server Name-Change Problem</h3></div></div></div><p>
+		remote connection is down.</p></li><li><p>Client is configured to use a WINS server, but there is no WINS server.</p></li><li><p>Client is not configured to use a WINS server, but there is a WINS server.</p></li><li><p>Firewall is filtering out DNS or WINS traffic.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id450018"></a>Samba Server Name-Change Problem</h3></div></div></div><p>
 	&#8220;<span class="quote">The name of the Samba server was changed, Samba was restarted, and now the Samba server cannot be
 	pinged by its new name from an MS Windows NT4 workstation, but it does still respond to pinging using
 	the old name. Why?</span>&#8221;

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/introduction.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/introduction.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/introduction.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,5 +1,5 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part I. General Installation</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="IntroSMB.html" title="Introduction"><link rel="next" href="install.html" title="Chapter 1. How to Install and Test SAMBA"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part I. General Installation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="IntroSMB.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="install.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="introduction"></a>Part I. General Installation</h1></div></div></div><div class="partintro" lang="en"><div><div><div><h1 class="title"><a name="id2572956"></a>Preparing Samba for Configuration</h1></div></div></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part I. General Installation</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="IntroSMB.html" title="Introduction"><link rel="next" href="install.html" title="Chapter 1. How to Install and Test SAMBA"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part I. General Installation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="IntroSMB.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="install.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="introduction"></a>Part I. General Installation</h1></div></div></div><div class="partintro" lang="en"><div><div><div><h1 class="title"><a name="id341610"></a>Preparing Samba for Configuration</h1></div></div></div><p>
 This section of the Samba-HOWTO-Collection contains general info on how to install Samba 
 and how to configure the parts of Samba you will most likely need.
 PLEASE read this.
-</p><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="install.html">1. How to Install and Test SAMBA</a></span></dt><dd><dl><dt><span class="sect1"><a href="install.html#id2573105">Obtaining and Installing Samba</a></span></dt><dt><span class="sect1"><a href="install.html#id2573150">Configuring Samba (smb.conf)</a></span></dt><dd><dl><dt><span class="sect2"><a href="install.html#id2573195">Configuration File Syntax</a></span></dt><dt><span class="sect2"><a href="install.html#tdbdocs">TDB Database File Information</a></span></dt><dt><span class="sect2"><a href="install.html#id2574163">Starting Samba</a></span></dt><dt><span class="sect2"><a href="install.html#id2574356">Example Configuration</a></span></dt><dt><span class="sect2"><a href="install.html#id2574798">SWAT</a></span></dt></dl></dd><dt><span class="sect1"><a href="install.html#id2574859">List Shares Available on the Server</a></span></dt><dt><span class="sect1"><a href="install.html#id2574914">Connect with a UNIX Client</a></span></dt><dt><span class="sect1"><a href="install.html#id2575014">Connect from a Remote SMB Client</a></span></dt><dd><dl><dt><span class="sect2"><a href="install.html#id2575101">What If Things Don't Work?</a></span></dt><dt><span class="sect2"><a href="install.html#id2575146">Still Stuck?</a></span></dt></dl></dd><dt><span class="sect1"><a href="install.html#id2575180">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="install.html#id2575190">Large Number of smbd Processes</a></span></dt><dt><span class="sect2"><a href="install.html#id2575285">Error Message: open_oplock_ipc</a></span></dt><dt><span class="sect2"><a href="install.html#id2575319">&#8220;<span class="quote"><span class="errorname">The network name cannot be found</span></span>&#8221;</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="FastStart.html">2. Fast Start: Cure for Impatience</a></span></dt><dd><dl><dt><span class="sect1"><a href="FastStart.html#id2575468">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="FastStart.html#id2575492">Description of Example Sites</a></span></dt><dt><span class="sect1"><a href="FastStart.html#id2575572">Worked Examples</a></span></dt><dd><dl><dt><span class="sect2"><a href="FastStart.html#id2575590">Standalone Server</a></span></dt><dt><span class="sect2"><a href="FastStart.html#id2577510">Domain Member Server</a></span></dt><dt><span class="sect2"><a href="FastStart.html#id2578435">Domain Controller</a></span></dt></dl></dd></dl></dd></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="IntroSMB.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="install.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Introduction </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 1. How to Install and Test SAMBA</td></tr></table></div></body></html>
+</p><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="install.html">1. How to Install and Test SAMBA</a></span></dt><dd><dl><dt><span class="sect1"><a href="install.html#id341745">Obtaining and Installing Samba</a></span></dt><dt><span class="sect1"><a href="install.html#id341784">Configuring Samba (smb.conf)</a></span></dt><dd><dl><dt><span class="sect2"><a href="install.html#id341822">Configuration File Syntax</a></span></dt><dt><span class="sect2"><a href="install.html#tdbdocs">TDB Database File Information</a></span></dt><dt><span class="sect2"><a href="install.html#id342668">Starting Samba</a></span></dt><dt><span class="sect2"><a href="install.html#id342835">Example Configuration</a></span></dt><dt><span class="sect2"><a href="install.html#id343214">SWAT</a></span></dt></dl></dd><dt><span class="sect1"><a href="install.html#id343263">List Shares Available on the Server</a></span></dt><dt><span class="sect1"><a href="install.html#id343310">Connect with a UNIX Client</a></span></dt><dt><span class="sect1"><a href="install.html#id343396">Connect from a Remote SMB Client</a></span></dt><dd><dl><dt><span class="sect2"><a href="install.html#id343468">What If Things Don't Work?</a></span></dt><dt><span class="sect2"><a href="install.html#id343501">Still Stuck?</a></span></dt></dl></dd><dt><span class="sect1"><a href="install.html#id343527">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="install.html#id343536">Large Number of smbd Processes</a></span></dt><dt><span class="sect2"><a href="install.html#id343615">Error Message: open_oplock_ipc</a></span></dt><dt><span class="sect2"><a href="install.html#id343643">&#8220;<span class="quote"><span class="errorname">The network name cannot be found</span></span>&#8221;</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="FastStart.html">2. Fast Start: Cure for Impatience</a></span></dt><dd><dl><dt><span class="sect1"><a href="FastStart.html#id343766">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="FastStart.html#id343784">Description of Example Sites</a></span></dt><dt><span class="sect1"><a href="FastStart.html#id343841">Worked Examples</a></span></dt><dd><dl><dt><span class="sect2"><a href="FastStart.html#id343856">Standalone Server</a></span></dt><dt><span class="sect2"><a href="FastStart.html#id345489">Domain Member Server</a></span></dt><dt><span class="sect2"><a href="FastStart.html#id346287">Domain Controller</a></span></dt></dl></dd></dl></dd></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="IntroSMB.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="install.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Introduction </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 1. How to Install and Test SAMBA</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ix01.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ix01.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/ix01.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,9 +1,9 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Index</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="go01.html" title="Glossary"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Index</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="go01.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> </td></tr></table><hr></div><div class="index"><div class="titlepage"><div><div><h2 class="title"><a name="id2717237"></a>Index</h2></div></div></div><div class="index"><div class="indexdiv"><h3>Symbols</h3><dl><dt>"Printers" folder, <a class="indexterm" href="CUPS-printing.html#id2664341">Caveats to Be Considered</a>, <a class="indexterm" href="CUPS-printing.html#id2665619">Installing the PostScript Driver on a Client</a>, <a class="indexterm" href="CUPS-printing.html#id2666661">Manual Driver Installation in 15 Steps</a></dt><dt>$, <a class="indexterm" href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a></dt><dt>%i macro, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></dt><dt>%L, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></dt><dt>%PDF, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></dt><dt>%SystemRoot%\System32\config, <a class="indexterm" href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a></dt><dt>../source/nsswitch, <a class="indexterm" href="winbind.html#id2678970">Configure Winbind and PAM</a></dt><dt>.ai, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></dt><dt>.AppleDouble, <a class="indexterm" href="VFS.html#id2674073">netatalk</a></dt><dt>.eps, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></dt><dt>.pdf, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></dt><dt>.PDS extension, <a class="indexterm" href="ProfileMgmt.html#id2684328">Windows NT4 Workstation</a></dt><dt>.profiles, <a class="indexterm" href="ProfileMgmt.html#id2683169">Windows 9x/Me User Profiles</a></dt><dt>.ps, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></dt><dt>.recycle, <a class="indexterm" href="VFS.html#id2673676">recycle</a></dt><dt>/bin/false, <a class="indexterm" href="ServerType.html#id2581855">Example Configuration</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>/dev/null, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>/dev/shadowvol, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>/etc/cups/, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></dt><dt>/etc/cups/mime.convs, <a class="indexterm" href="CUPS-printing.html#id2656507">Raw Print Serving: Vendor Drivers on Windows Clients</a>, <a class="indexterm" href="CUPS-printing.html#cups-raw">Explicitly Enable &#8220;raw&#8221; Printing for application/octet-stream</a>, <a class="indexterm" href="CUPS-printing.html#id2658945">MIME Type Conversion Rules</a>, <a class="indexterm" href="CUPS-printing.html#id2661002">application/octet-stream Printing</a></dt><dt>/etc/cups/mime.types, <a class="indexterm" href="CUPS-printing.html#id2656507">Raw Print Serving: Vendor Drivers on Windows Clients</a>, <a class="indexterm" href="CUPS-printing.html#cups-raw">Explicitly Enable &#8220;raw&#8221; Printing for application/octet-stream</a>, <a class="indexterm" href="CUPS-printing.html#id2661002">application/octet-stream Printing</a></dt><dt>/etc/fstab, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>/etc/group, <a class="indexterm" href="ServerType.html#id2581430">Share-Level Security</a>, <a class="indexterm" href="groupmapping.html#id2618354">Discussion</a>, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="groupmapping.html#id2620275">Sample smb.conf Add Group Script</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a>, <a class="indexterm" href="winbind.html#id2675430">Features and Benefits</a>, <a class="indexterm" href="Portability.html#id2710853">HPUX</a></dt><dt>/etc/groups, <a class="indexterm" href="pam.html#id2688266">Anatomy of /etc/pam.d Entries</a></dt><dt>/etc/host.conf, <a class="indexterm" href="integrate-ms-networks.html#id2690564">Name Resolution in a Pure UNIX/Linux World</a>, <a class="indexterm" href="integrate-ms-networks.html#id2690852">/etc/host.conf</a></dt><dt>/etc/hosts, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a>, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a>, <a class="indexterm" href="integrate-ms-networks.html#id2690564">Name Resolution in a Pure UNIX/Linux World</a>, <a class="indexterm" href="integrate-ms-networks.html#id2690637">/etc/hosts</a>, <a class="indexterm" href="integrate-ms-networks.html#id2691028">Name Resolution as Used within MS Windows Networking</a>, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>/etc/hosts&gt;, <a class="indexterm" href="integrate-ms-networks.html#id2690637">/etc/hosts</a></dt><dt>/etc/inetd.conf, <a class="indexterm" href="winbind.html#id2679136">Linux/FreeBSD-Specific PAM Configuration</a>, <a class="indexterm" href="compiling.html#id2710248">Starting from inetd.conf</a></dt><dt>/etc/init.d/samba, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="winbind.html#id2678575">Linux</a></dt><dt>/etc/init.d/samba.server, <a class="indexterm" href="winbind.html#id2678780">Solaris</a></dt><dt>/etc/init.d/smb, <a class="indexterm" href="winbind.html#id2678575">Linux</a></dt><dt>/etc/krb5.conf, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a>, <a class="indexterm" href="domain-member.html#id2595186">Possible Errors</a>, <a class="indexterm" href="idmapper.html#id2628264">ADS Domains</a>, <a class="indexterm" href="idmapper.html#id2629264">IDMAP Storage in LDAP Using Winbind</a></dt><dt>/etc/ldap.conf, <a class="indexterm" href="idmapper.html#id2629264">IDMAP Storage in LDAP Using Winbind</a>, <a class="indexterm" href="idmapper.html#id2629850">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a></dt><dt>/etc/logingroup, <a class="indexterm" href="Portability.html#id2710853">HPUX</a></dt><dt>/etc/mime.conv, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dt>/etc/mime.types, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dt>/etc/nsswitch.conf, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id2627976">NT4-Style Domains (Includes Samba Domains)</a>, <a class="indexterm" href="idmapper.html#id2628674">IDMAP_RID with Winbind</a>, <a class="indexterm" href="idmapper.html#id2629850">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a>, <a class="indexterm" href="winbind.html#id2676371">Name Service Switch</a>, <a class="indexterm" href="winbind.html#id2677263">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a>, <a class="indexterm" href="integrate-ms-networks.html#id2690564">Name Resolution in a Pure UNIX/Linux World</a>, <a class="indexterm" href="integrate-ms-networks.html#id2690904">/etc/nsswitch.conf</a></dt><dt>/etc/openldap/slapd.conf, <a class="indexterm" href="FastStart.html#id2579551">The Primary Domain Controller</a></dt><dt>/etc/openldap/sldap.conf, <a class="indexterm" href="passdb.html#id2616531">Accounts and Groups Management</a></dt><dt>/etc/pam.conf, <a class="indexterm" href="winbind.html#id2679482">Solaris-Specific Configuration</a>, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a>, <a class="indexterm" href="pam.html#id2688133">Technical Discussion</a>, <a class="indexterm" href="pam.html#id2688266">Anatomy of /etc/pam.d Entries</a></dt><dt>/etc/pam.d, <a class="indexterm" href="winbind.html#id2677024">Requirements</a>, <a class="indexterm" href="winbind.html#id2677176">Testing Things Out</a>, <a class="indexterm" href="winbind.html#id2678970">Configure Winbind and PAM</a>, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>/etc/pam.d/, <a class="indexterm" href="winbind.html#id2676603">Pluggable Authentication Modules</a>, <a class="indexterm" href="pam.html#id2688133">Technical Discussion</a></dt><dt>/etc/pam.d/ftp, <a class="indexterm" href="winbind.html#id2679136">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>/etc/pam.d/login, <a class="indexterm" href="winbind.html#id2679136">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>/etc/pam.d/samba, <a class="indexterm" href="winbind.html#id2679136">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>/etc/passwd, <a class="indexterm" href="ServerType.html#id2581430">Share-Level Security</a>, <a class="indexterm" href="ServerType.html#id2581855">Example Configuration</a>, <a class="indexterm" href="samba-pdc.html#id2587300">&#8220;$&#8221; Cannot Be Included in Machine Name</a>, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id2592722">Windows 200x/XP Professional Client</a>, <a class="indexterm" href="domain-member.html#id2595873">Adding Machine to Domain Fails</a>, <a class="indexterm" href="StandAloneServer.html#id2596329">Background</a>, <a class="indexterm" href="StandAloneServer.html#RefDocServer">Reference Documentation Server</a>, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="passdb.html#id2609356">Backward Compatibility Account Storage Systems</a>, <a class="indexterm" href="passdb.html#id2614612">Plaintext</a>, <a class="indexterm" href="passdb.html#id2615414">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="groupmapping.html#id2619442">Applicable Only to Versions Earlier than 3.0.11</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a>, <a class="indexterm" href="winbind.html#id2675430">Features and Benefits</a>, <a class="indexterm" href="winbind.html#id2678214">Starting and Testing the winbindd Daemon</a>, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>/etc/printcap, <a class="indexterm" href="CUPS-printing.html#id2655466">Basic CUPS Support Configuration</a></dt><dt>/etc/resolv.conf, <a class="indexterm" href="integrate-ms-networks.html#id2690564">Name Resolution in a Pure UNIX/Linux World</a>, <a class="indexterm" href="diagnosis.html#id2705108">Assumptions</a>, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>/etc/samba, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a>, <a class="indexterm" href="cfgsmarts.html#id2697638">Multiple Virtual Server Hosting</a>, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>/etc/samba/scripts, <a class="indexterm" href="NetCommand.html#id2622674">Managing Nest Groups on Workstations from the Samba Server</a></dt><dt>/etc/samba/secrets.tdb, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></dt><dt>/etc/samba/smb.conf, <a class="indexterm" href="install.html#id2573150">Configuring Samba (smb.conf)</a></dt><dt>/etc/samba/smbpasswd, <a class="indexterm" href="passdb.html#id2614612">Plaintext</a></dt><dt>/etc/samba/smbusers, <a class="indexterm" href="NetCommand.html#id2623295">User Mapping</a></dt><dt>/etc/shadow, <a class="indexterm" href="StandAloneServer.html#id2596329">Background</a>, <a class="indexterm" href="passdb.html#id2609356">Backward Compatibility Account Storage Systems</a></dt><dt>/etc/smbpasswd, <a class="indexterm" href="passdb.html#id2614612">Plaintext</a></dt><dt>/etc/ssl/certs/slapd.pem, <a class="indexterm" href="samba-bdc.html#id2589047">LDAP Configuration Notes</a></dt><dt>/etc/xinetd.d, <a class="indexterm" href="winbind.html#id2679136">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>/etc/xinetd.d/telnet, <a class="indexterm" href="winbind.html#id2679136">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>/export, <a class="indexterm" href="StandAloneServer.html#RefDocServer">Reference Documentation Server</a></dt><dt>/lib/libnss_example.so, <a class="indexterm" href="winbind.html#id2676371">Name Service Switch</a></dt><dt>/lib/libnss_files.so, <a class="indexterm" href="winbind.html#id2676371">Name Service Switch</a></dt><dt>/lib/security, <a class="indexterm" href="winbind.html#id2678970">Configure Winbind and PAM</a>, <a class="indexterm" href="pam.html#id2688187">PAM Configuration Syntax</a></dt><dt>/lib/security/, <a class="indexterm" href="winbind.html#id2676603">Pluggable Authentication Modules</a></dt><dt>/opt/samba/bin, <a class="indexterm" href="SWAT.html#id2703604">Locating the SWAT File</a></dt><dt>/tmp, <a class="indexterm" href="AccessControls.html#id2633292">File and Directory Access Control</a></dt><dt>/usr/bin/openssl, <a class="indexterm" href="SWAT.html#id2704171">Securing SWAT through SSL</a></dt><dt>/usr/lib/samba/vfs, <a class="indexterm" href="VFS.html#id2672690">Discussion</a></dt><dt>/usr/lib/security, <a class="indexterm" href="winbind.html#id2677666">NSS Winbind on AIX</a>, <a class="indexterm" href="winbind.html#id2678970">Configure Winbind and PAM</a></dt><dt>/usr/lib/security/methods.cfg, <a class="indexterm" href="winbind.html#id2677666">NSS Winbind on AIX</a></dt><dt>/usr/local/lib, <a class="indexterm" href="winbind.html#id2677263">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a></dt><dt>/usr/local/samba, <a class="indexterm" href="winbind.html#id2678214">Starting and Testing the winbindd Daemon</a></dt><dt>/usr/local/samba/bin, <a class="indexterm" href="winbind.html#id2678575">Linux</a>, <a class="indexterm" href="winbind.html#id2678780">Solaris</a>, <a class="indexterm" href="SWAT.html#id2703604">Locating the SWAT File</a></dt><dt>/usr/local/samba/lib, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>/usr/local/samba/lib/vfs, <a class="indexterm" href="VFS.html#id2672690">Discussion</a></dt><dt>/usr/local/samba/private/secrets.tdb, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></dt><dt>/usr/local/samba/swat, <a class="indexterm" href="SWAT.html#xinetd">Enabling SWAT for Use</a></dt><dt>/usr/local/samba/var, <a class="indexterm" href="AccessControls.html#id2635030">Access Controls on Shares</a>, <a class="indexterm" href="diagnosis.html#id2705108">Assumptions</a></dt><dt>/usr/local/samba/var/locks, <a class="indexterm" href="NetworkBrowsing.html#id2606281">Static WINS Entries</a></dt><dt>/usr/sbin, <a class="indexterm" href="SWAT.html#id2703604">Locating the SWAT File</a>, <a class="indexterm" href="SWAT.html#xinetd">Enabling SWAT for Use</a></dt><dt>/usr/share/samba/swat, <a class="indexterm" href="SWAT.html#xinetd">Enabling SWAT for Use</a></dt><dt>/var/locks/*.tdb, <a class="indexterm" href="speed.html#id2712944">Corrupt tdb Files</a></dt><dt>/var/log/samba, <a class="indexterm" href="diagnosis.html#id2705108">Assumptions</a></dt><dt>/var/run/samba, <a class="indexterm" href="NetworkBrowsing.html#id2606281">Static WINS Entries</a></dt><dt>/var/spool/cups/, <a class="indexterm" href="CUPS-printing.html#id2670486">Autodeletion or Preservation of CUPS Spool Files</a></dt><dt>/var/spool/samba, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="CUPS-printing.html#id2670486">Autodeletion or Preservation of CUPS Spool Files</a></dt><dt>250-user limit, <a class="indexterm" href="passdb.html#id2614953">tdbsam</a></dt><dt>3.0.11, <a class="indexterm" href="rights.html#id2631943">The Administrator Domain SID</a></dt><dt>4,500 user accounts, <a class="indexterm" href="passdb.html#id2614953">tdbsam</a></dt><dt>4294967295, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a></dt><dt>8.3 file names, <a class="indexterm" href="AccessControls.html#id2632834">MS Windows NTFS Comparison with UNIX File Systems</a></dt><dt>&gt;Domain User Manager, <a class="indexterm" href="InterdomainTrusts.html#id2642166">Creating an NT4 Domain Trust</a></dt><dt>\\%L\%U\.profiles, <a class="indexterm" href="ProfileMgmt.html#id2683169">Windows 9x/Me User Profiles</a></dt><dt>\\SERVER, <a class="indexterm" href="NetworkBrowsing.html#id2607167">Problem Resolution</a></dt><dt>_kerberos.REALM.NAME, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a></dt><dt>_kerberos._udp, <a class="indexterm" href="domain-member.html#id2595479">Notes</a></dt><dt>_ldap._tcp, <a class="indexterm" href="domain-member.html#id2595479">Notes</a></dt><dt>_ldap._tcp.pdc._msdcs.quenya.org, <a class="indexterm" href="samba-bdc.html#id2589683">NetBIOS Over TCP/IP Disabled</a></dt></dl></div><div class="indexdiv"><h3></h3><dl><dt>, <a class="indexterm" href="install.html#id2573195">Configuration File Syntax</a>, <a class="indexterm" href="install.html#id2574356">Example Configuration</a>, <a class="indexterm" href="FastStart.html#anon-ro">Anonymous Read-Only Document Server</a>, <a class="indexterm" href="FastStart.html#id2576046">Anonymous Read-Write Document Server</a>, <a class="indexterm" href="FastStart.html#id2576283">Anonymous Print Server</a>, <a class="indexterm" href="FastStart.html#id2576682">Secure Read-Write File and Print Server</a>, <a class="indexterm" href="FastStart.html#id2577582">Example Configuration</a>, <a class="indexterm" href="FastStart.html#id2578515">Example: Engineering Office</a>, <a class="indexterm" href="FastStart.html#id2579551">The Primary Domain Controller</a>, <a class="indexterm" href="FastStart.html#id2580224">Backup Domain Controller</a>, <a class="indexterm" href="ServerType.html#id2581390">Example Configuration</a>, <a class="indexterm" href="ServerType.html#id2581601">Example Configuration</a>, <a class="indexterm" href="ServerType.html#id2581855">Example Configuration</a>, <a class="indexterm" href="ServerType.html#id2582238">Example Configuration</a>, <a class="indexterm" href="ServerType.html#id2582513">Example Configuration</a>, <a class="indexterm" href="ServerType.html#id2582616">Password Checking</a>, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a>, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a>, <a class="indexterm" href="samba-pdc.html#id2586478">Example Configuration</a>, <a class="indexterm" href="samba-bdc.html#id2588796">Example PDC Configuration</a>, <a class="indexterm" href="samba-bdc.html#id2589047">LDAP Configuration Notes</a>, <a class="indexterm" href="samba-bdc.html#id2590243">Example Configuration</a>, <a class="indexterm" href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id2592605">On-the-Fly Creation of Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id2592968">Samba Client</a>, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="domain-member.html#id2594193">Configure smb.conf</a>, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a>, <a class="indexterm" href="domain-member.html#id2595551">Sharing User ID Mappings between Samba Domain Members</a>, <a class="indexterm" href="StandAloneServer.html#RefDocServer">Reference Documentation Server</a>, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id2604354">Domain Browsing Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#id2605217">Multiple Interfaces</a>, <a class="indexterm" href="NetworkBrowsing.html#id2605403">Use of the Remote Announce Parameter</a>, <a class="indexterm" href="NetworkBrowsing.html#id2605543">Use of the Remote Browse Sync Parameter</a>, <a class="indexterm" href="NetworkBrowsing.html#id2605907">WINS Server Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#id2606674">Name Resolution Order</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="passdb.html#id2616106">Configuring Samba</a>, <a class="indexterm" href="groupmapping.html#id2620275">Sample smb.conf Add Group Script</a>, <a class="indexterm" href="NetCommand.html#id2622674">Managing Nest Groups on Workstations from the Samba Server</a>, <a class="indexterm" href="idmapper.html#id2627976">NT4-Style Domains (Includes Samba Domains)</a>, <a class="indexterm" href="idmapper.html#id2628264">ADS Domains</a>, <a class="indexterm" href="idmapper.html#id2628674">IDMAP_RID with Winbind</a>, <a class="indexterm" href="idmapper.html#id2629264">IDMAP Storage in LDAP Using Winbind</a>, <a class="indexterm" href="idmapper.html#id2629850">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a>, <a class="indexterm" href="rights.html#id2630793">Using the &#8220;net rpc rights&#8221; Utility</a>, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a>, <a class="indexterm" href="AccessControls.html#id2636170">Interaction with the Standard Samba &#8220;create mask&#8221; Parameters</a>, <a class="indexterm" href="AccessControls.html#id2637042">Users Cannot Write to a Public Share</a>, <a class="indexterm" href="AccessControls.html#id2637410">MS Word with Samba Changes Owner of File</a>, <a class="indexterm" href="locking.html#id2639071">Disabling Oplocks</a>, <a class="indexterm" href="locking.html#id2639166">Disabling Kernel Oplocks</a>, <a class="indexterm" href="securing-samba.html#id2640202">Features and Benefits</a>, <a class="indexterm" href="securing-samba.html#id2640364">Using Host-Based Protection</a>, <a class="indexterm" href="securing-samba.html#id2640518">User-Based Protection</a>, <a class="indexterm" href="securing-samba.html#id2640578">Using Interface Protection</a>, <a class="indexterm" href="securing-samba.html#id2640934">Using IPC$ Share-Based Denials </a>, <a class="indexterm" href="securing-samba.html#id2641220">Why Can Users Access Other Users' Home Directories?</a>, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a>, <a class="indexterm" href="msdfs.html#id2643489">Features and Benefits</a>, <a class="indexterm" href="msdfs.html#id2643934">MSDFS UNIX Path Is Case-Critical</a>, <a class="indexterm" href="classicalprinting.html#id2644675">Simple Print Configuration</a>, <a class="indexterm" href="classicalprinting.html#id2645155">Rapid Configuration Validation</a>, <a class="indexterm" href="classicalprinting.html#id2645543">Extended Printing Configuration</a>, <a class="indexterm" href="classicalprinting.html#id2648051">Custom Print Commands</a>, <a class="indexterm" href="classicalprinting.html#id2649017">Creating the [print$] Share</a>, <a class="indexterm" href="classicalprinting.html#id2650065">Identifying Driver Files</a>, <a class="indexterm" href="CUPS-printing.html#id2655828">Simple smb.conf Settings for CUPS</a>, <a class="indexterm" href="CUPS-printing.html#id2656061">More Complex CUPS smb.conf Settings</a>, <a class="indexterm" href="CUPS-printing.html#id2662821">From Windows Clients to a CUPS/Samba Print Server</a>, <a class="indexterm" href="CUPS-printing.html#id2663615">Prepare Your smb.conf for cupsaddsmb</a>, <a class="indexterm" href="VFS.html#id2672690">Discussion</a>, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a>, <a class="indexterm" href="winbind.html#id2675430">Features and Benefits</a>, <a class="indexterm" href="winbind.html#id2677779">Configure smb.conf</a>, <a class="indexterm" href="winbind.html#id2678575">Linux</a>, <a class="indexterm" href="winbind.html#id2679482">Solaris-Specific Configuration</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a>, <a class="indexterm" href="ProfileMgmt.html#id2683030">NT4/200x User Profiles</a>, <a class="indexterm" href="ProfileMgmt.html#id2683169">Windows 9x/Me User Profiles</a>, <a class="indexterm" href="ProfileMgmt.html#id2683327">Mixed Windows Windows 9x/Me and NT4/200x User Profiles</a>, <a class="indexterm" href="ProfileMgmt.html#id2687156">Changing the Default Profile</a>, <a class="indexterm" href="integrate-ms-networks.html#id2691462">The NetBIOS Name Cache</a>, <a class="indexterm" href="integrate-ms-networks.html#id2691769">WINS Lookup</a>, <a class="indexterm" href="unicode.html#id2692681">Basic Parameter Setting</a>, <a class="indexterm" href="unicode.html#id2693322">Individual Implementations</a>, <a class="indexterm" href="largefile.html">Handling Large Directories</a>, <a class="indexterm" href="cfgsmarts.html">Advanced Configuration Techniques</a>, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a>, <a class="indexterm" href="cfgsmarts.html#id2697638">Multiple Virtual Server Hosting</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2701208">IdMap LDAP Support</a>, <a class="indexterm" href="diagnosis.html#id2705108">Assumptions</a>, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a>, <a class="indexterm" href="bugreport.html#dbglvl">Debug Levels</a>, <a class="indexterm" href="bugreport.html#id2708660">Debugging-Specific Operations</a>, <a class="indexterm" href="Other-Clients.html#id2712134">Windows 2000 Service Pack 2</a> (see SSO)</dt><dd><dl><dt>backend, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a></dt><dt>logon</dt><dd><dl><dt>service, <a class="indexterm" href="samba-bdc.html#id2588303">Essential Background Information</a></dt></dl></dd></dl></dd></dl></div><div class="indexdiv"><h3>A</h3><dl><dt>abbreviated keystrokes, <a class="indexterm" href="ClientConfig.html#id2597677">TCP/IP Configuration</a></dt><dt>aborting shutdown, <a class="indexterm" href="rights.html#id2631138">Description of Privileges</a></dt><dt>accept connections, <a class="indexterm" href="securing-samba.html#id2640578">Using Interface Protection</a></dt><dt>access, <a class="indexterm" href="ChangeNotes.html#id2600728">User and Group Changes</a></dt><dt>Access, <a class="indexterm" href="rights.html#id2630793">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>access authentication, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a></dt><dt>access control, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a>, <a class="indexterm" href="StandAloneServer.html#id2596329">Background</a>, <a class="indexterm" href="AccessControls.html#id2635030">Access Controls on Shares</a>, <a class="indexterm" href="AdvancedNetworkManagement.html">Advanced Network Management</a></dt><dt>Access Control, <a class="indexterm" href="ClientConfig.html#id2599975">Domain Logon Configuration: Windows 9x/Me</a></dt><dt>Access Control Entries (see ACE)</dt><dt>Access Control List, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a></dt><dt>access control needs, <a class="indexterm" href="NT4Migration.html#id2702022">Server Share and Directory Layout</a></dt><dt>access controls, <a class="indexterm" href="domain-member.html#id2591202">Features and Benefits</a>, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a>, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a>, <a class="indexterm" href="NetCommand.html#id2621847">Mapping Windows Groups to UNIX Groups</a>, <a class="indexterm" href="AccessControls.html#id2632624">Features and Benefits</a>, <a class="indexterm" href="AccessControls.html#id2633704">Protecting Directories and Files from Deletion</a></dt><dt>Access Controls, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>access denied, <a class="indexterm" href="securing-samba.html#id2640934">Using IPC$ Share-Based Denials </a></dt><dt>access policies, <a class="indexterm" href="passdb.html#id2614272">Domain Account Policy Managment</a></dt><dt>access rights, <a class="indexterm" href="domain-member.html#id2591202">Features and Benefits</a>, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a>, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a></dt><dt>account, <a class="indexterm" href="install.html#id2574356">Example Configuration</a>, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="domain-member.html#id2592722">Windows 200x/XP Professional Client</a>, <a class="indexterm" href="pam.html#id2688266">Anatomy of /etc/pam.d Entries</a></dt><dd><dl><dt>backend, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a></dt><dt>database, <a class="indexterm" href="ServerType.html#id2581638">Domain Security Mode (User-Level Security)</a></dt><dd><dl><dt>backends, <a class="indexterm" href="ServerType.html#id2580765">Features and Benefits</a></dt></dl></dd></dl></dd><dt>account access controls, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a></dt><dt>account attributes, <a class="indexterm" href="idmapper.html#id2627583">Primary Domain Controller</a></dt><dt>account backends, <a class="indexterm" href="passdb.html">Account Information Databases</a></dt><dt>account containers, <a class="indexterm" href="passdb.html#id2615921">Initialize the LDAP Database</a></dt><dt>account control block (see ACB)</dt><dt>account control flags, <a class="indexterm" href="passdb.html#TOSHARG-acctflags">Account Flags Management</a></dt><dt>account controls, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>Account Controls, <a class="indexterm" href="PolicyMgmt.html#id2682235">Managing Account/User Policies</a></dt><dt>account database, <a class="indexterm" href="passdb.html#id2614558">Password Backends</a></dt><dt>account deleted, <a class="indexterm" href="passdb.html#id2613544">Deleting Accounts</a></dt><dt>account encode_bits, <a class="indexterm" href="passdb.html#TOSHARG-acctflags">Account Flags Management</a></dt><dt>account flag order, <a class="indexterm" href="passdb.html#TOSHARG-acctflags">Account Flags Management</a></dt><dt>Account Flags, <a class="indexterm" href="passdb.html#id2613222">Listing User and Machine Accounts</a></dt><dt>account flags, <a class="indexterm" href="passdb.html#TOSHARG-acctflags">Account Flags Management</a></dt><dt>account import/export, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a>, <a class="indexterm" href="passdb.html#id2614433">Account Import/Export</a></dt><dt>account information, <a class="indexterm" href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a>, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="passdb.html#id2615414">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="NetCommand.html#id2622967">UNIX and Windows User Management</a></dt><dt>account information database, <a class="indexterm" href="passdb.html#id2610628">Mapping User Identifiers between MS Windows and UNIX</a></dt><dt>account management, <a class="indexterm" href="idmapper.html#id2627583">Primary Domain Controller</a></dt><dt>account name, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a>, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></dt><dt>account policies, <a class="indexterm" href="samba-pdc.html#id2585096">Preparing for Domain Control</a></dt><dt>account policy, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a></dt><dt>account restrictions, <a class="indexterm" href="PolicyMgmt.html#id2682235">Managing Account/User Policies</a></dt><dt>account security, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a></dt><dt>account storage backends, <a class="indexterm" href="upgrading-to-3.0.html#id2700456">Passdb Backends and Authentication</a></dt><dt>account storage mechanisms, <a class="indexterm" href="passdb.html">Account Information Databases</a></dt><dt>account storage system, <a class="indexterm" href="passdb.html">Account Information Databases</a></dt><dt>Account Unknown, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>accountability, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a></dt><dt>accounts, <a class="indexterm" href="winbind.html#id2676910">Introduction</a></dt><dt>ACL, <a class="indexterm" href="ChangeNotes.html#id2600728">User and Group Changes</a>, <a class="indexterm" href="passdb.html#id2616644">Security and sambaSamAccount</a>, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="rights.html#id2631138">Description of Privileges</a>, <a class="indexterm" href="securing-samba.html#id2640202">Features and Benefits</a>, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a>, <a class="indexterm" href="ch-ldap-tls.html#s1-intro-ldap-tls">Introduction</a></dt><dt>ACLs, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a>, <a class="indexterm" href="classicalprinting.html#id2648895">The Obsoleted [printer$] Section</a></dt><dd><dl><dt>File System, <a class="indexterm" href="AccessControls.html#id2633292">File and Directory Access Control</a></dt><dt>POSIX, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a>, <a class="indexterm" href="AccessControls.html#id2632624">Features and Benefits</a></dt><dt>share, <a class="indexterm" href="AccessControls.html#id2632624">Features and Benefits</a></dt><dt>Windows, <a class="indexterm" href="AccessControls.html#id2632624">Features and Benefits</a></dt></dl></dd><dt>ACLs on share, <a class="indexterm" href="AccessControls.html#id2635301">Windows 200x/XP</a></dt><dt>ACLs on shares, <a class="indexterm" href="AccessControls.html#id2632624">Features and Benefits</a></dt><dt>across network segments, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a></dt><dt>active directory, <a class="indexterm" href="ServerType.html#id2580765">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a>, <a class="indexterm" href="samba-pdc.html#id2585096">Preparing for Domain Control</a>, <a class="indexterm" href="samba-pdc.html#id2586348">Samba ADS Domain Control</a></dt><dt>Active Directory, <a class="indexterm" href="samba-bdc.html#id2589411">Active Directory Domain Control</a>, <a class="indexterm" href="domain-member.html#ads-member">Samba ADS Domain Membership</a>, <a class="indexterm" href="NetCommand.html#id2621445">UNIX and Windows Group Management</a>, <a class="indexterm" href="idmapper.html#id2626560">Standalone Samba Server</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id2628674">IDMAP_RID with Winbind</a>, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a></dt><dt>Active Directory Server, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>AD4UNIX, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a></dt><dt>ADAM, <a class="indexterm" href="idmapper.html#id2629264">IDMAP Storage in LDAP Using Winbind</a></dt><dt>add a user account, <a class="indexterm" href="passdb.html#id2613456">Adding User Accounts</a></dt><dt>add client machines, <a class="indexterm" href="rights.html#id2630793">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>add domain users and groups to a local group, <a class="indexterm" href="rights.html#id2632126">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>add drivers, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>add machine script, <a class="indexterm" href="domain-member.html#id2592605">On-the-Fly Creation of Machine Trust Accounts</a>, <a class="indexterm" href="rights.html#id2630793">Using the &#8220;net rpc rights&#8221; Utility</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2700359">Changes in Behavior</a></dt><dt>Add Printer Wizard, <a class="indexterm" href="classicalprinting.html#id2644133">Features and Benefits</a>, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a>, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>add printer wizard, <a class="indexterm" href="CUPS-printing.html#id2657029">Driver Upload Methods</a></dt><dt>add user script, <a class="indexterm" href="passdb.html#id2613105">User Account Management</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2700359">Changes in Behavior</a></dt><dt>add/delete/change share, <a class="indexterm" href="rights.html#id2631138">Description of Privileges</a></dt><dt>adddriver, <a class="indexterm" href="classicalprinting.html#id2650617">Installing Driver Files into [print$]</a>, <a class="indexterm" href="classicalprinting.html#id2650980">Running rpcclient with adddriver</a>, <a class="indexterm" href="classicalprinting.html#id2651474">Specific Driver Name Flexibility</a>, <a class="indexterm" href="CUPS-printing.html#id2666028">A Check of the rpcclient man Page</a>, <a class="indexterm" href="CUPS-printing.html#id2667620">Troubleshooting Revisited</a></dt><dt>additional driver, <a class="indexterm" href="classicalprinting.html#id2578531">Additional Client Driver Installation</a></dt><dt>additional privileges, <a class="indexterm" href="rights.html#id2631138">Description of Privileges</a></dt><dt>addmem, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>AddPrinterDriver(), <a class="indexterm" href="CUPS-printing.html#id2666028">A Check of the rpcclient man Page</a></dt><dt>admincfg.exe, <a class="indexterm" href="Other-Clients.html#id2711897">Configuring Windows for Workgroups Password Handling</a></dt><dt>administrative actions, <a class="indexterm" href="rights.html#id2630793">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>administrative duties, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a></dt><dt>administrative privileges, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="winbind.html#id2677976">Join the Samba Server to the PDC Domain</a></dt><dt>administrative responsibilities, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a></dt><dt>administrative rights, <a class="indexterm" href="rights.html#id2631138">Description of Privileges</a>, <a class="indexterm" href="rights.html#id2632126">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>administrative rights and privileges, <a class="indexterm" href="rights.html#id2632126">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>Administrative Templates, <a class="indexterm" href="PolicyMgmt.html#id2681787">MS Windows 200x/XP Professional Policies</a></dt><dt>Administrator, <a class="indexterm" href="groupmapping.html#id2618354">Discussion</a>, <a class="indexterm" href="groupmapping.html#id2619324">Important Administrative Information</a>, <a class="indexterm" href="winbind.html#id2677976">Join the Samba Server to the PDC Domain</a></dt><dt>administrator account, <a class="indexterm" href="domain-member.html#id2592722">Windows 200x/XP Professional Client</a>, <a class="indexterm" href="domain-member.html#id2592886">Windows NT4 Client</a></dt><dt>Administrator account, <a class="indexterm" href="domain-member.html#ads-create-machine-account">Create the Computer Account</a></dt><dt>administrator password, <a class="indexterm" href="domain-member.html#id2595479">Notes</a></dt><dt>Administrator%password, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></dt><dt>Adobe, <a class="indexterm" href="CUPS-printing.html#gdipost">GDI on Windows, PostScript on UNIX</a>, <a class="indexterm" href="CUPS-printing.html#id2663407">PostScript Drivers with No Major Problems, Even in Kernel
-Mode</a>, <a class="indexterm" href="CUPS-printing.html#id2668823">The Grand Unification Achieved</a></dt><dt>Adobe driver, <a class="indexterm" href="CUPS-printing.html#id2664641">Windows CUPS PostScript Driver Versus Adobe Driver</a></dt><dt>Adobe driver files, <a class="indexterm" href="CUPS-printing.html#id2664135">Recognizing Different Driver Files</a></dt><dt>Adobe PostScript, <a class="indexterm" href="CUPS-printing.html#id2664341">Caveats to Be Considered</a>, <a class="indexterm" href="CUPS-printing.html#id2669864">Adobe and CUPS PostScript Drivers for Windows Clients</a></dt><dt>Adobe PostScript driver, <a class="indexterm" href="CUPS-printing.html#id2665619">Installing the PostScript Driver on a Client</a></dt><dt>Adobe PPD, <a class="indexterm" href="CUPS-printing.html#id2668269">CUPS Print Drivers from Linuxprinting.org</a></dt><dt>Adobe specifications, <a class="indexterm" href="CUPS-printing.html#id2660577">The Role of cupsomatic/foomatic</a></dt><dt>ADS, <a class="indexterm" href="ServerType.html#id2582161">ADS Security Mode (User-Level Security)</a>, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a>, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a>, <a class="indexterm" href="domain-member.html#id2591202">Features and Benefits</a>, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a>, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="domain-member.html#id2594193">Configure smb.conf</a>, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a>, <a class="indexterm" href="domain-member.html#ads-create-machine-account">Create the Computer Account</a>, <a class="indexterm" href="domain-member.html#ads-test-server">Testing Server Setup</a>, <a class="indexterm" href="NetworkBrowsing.html">Network Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id2602859">TCP/IP without NetBIOS</a>, <a class="indexterm" href="NetworkBrowsing.html#adsdnstech">DNS and Active Directory</a>, <a class="indexterm" href="NetworkBrowsing.html#id2607418">Cross-Subnet Browsing</a>, <a class="indexterm" href="passdb.html">Account Information Databases</a>, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a>, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a>, <a class="indexterm" href="passdb.html#id2616531">Accounts and Groups Management</a>, <a class="indexterm" href="NetCommand.html#id2621363">Administrative Tasks and Methods</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id2627583">Primary Domain Controller</a>, <a class="indexterm" href="idmapper.html#id2629264">IDMAP Storage in LDAP Using Winbind</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a>, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a>, <a class="indexterm" href="InterdomainTrusts.html#id2641780">Features and Benefits</a>, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a>, <a class="indexterm" href="InterdomainTrusts.html#id2643094">NT4-Style Domain Trusts with Windows 2000</a>, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a>, <a class="indexterm" href="winbind.html#id2675430">Features and Benefits</a>, <a class="indexterm" href="winbind.html#id2676847">Result Caching</a>, <a class="indexterm" href="PolicyMgmt.html#id2681125">Features and Benefits</a>, <a class="indexterm" href="PolicyMgmt.html#id2681787">MS Windows 200x/XP Professional Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id2682235">Managing Account/User Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id2682662">System Startup and Logon Processing Overview</a>, <a class="indexterm" href="ProfileMgmt.html#id2686408">MS Windows 200x/XP</a>, <a class="indexterm" href="pam.html">PAM-Based Distributed Authentication</a>, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a>, <a class="indexterm" href="integrate-ms-networks.html#id2690436">Background Information</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2700456">Passdb Backends and Authentication</a>, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a>, <a class="indexterm" href="DNSDHCP.html#id2714623">Features and Benefits</a> (see Active Directory)</dt><dt>ADS DC, <a class="indexterm" href="domain-member.html#id2594193">Configure smb.conf</a></dt><dt>ADS domain, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id2628264">ADS Domains</a></dt><dt>ADS domain members, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a></dt><dt>ADS manager, <a class="indexterm" href="domain-member.html#ads-create-machine-account">Create the Computer Account</a></dt><dt>ADS schema, <a class="indexterm" href="idmapper.html#id2627583">Primary Domain Controller</a></dt><dt>Advanced TCP/IP configuration, <a class="indexterm" href="ClientConfig.html#id2597752">MS Windows XP Professional</a></dt><dt>advantages, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>affect users, <a class="indexterm" href="PolicyMgmt.html#id2681239">Creating and Managing System Policies</a></dt><dt>affordable power, <a class="indexterm" href="SambaHA.html#id2694486">The Ultimate Goal</a></dt><dt>AFPL, <a class="indexterm" href="CUPS-printing.html#id2657878">Ghostscript: The Software RIP for Non-PostScript Printers</a></dt><dt>AFPL Ghostscript, <a class="indexterm" href="CUPS-printing.html#id2659665">pstoraster</a></dt><dt>AFS, <a class="indexterm" href="SambaHA.html#id2694935">The Distributed File System Challenge</a></dt><dt>AIX, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a>, <a class="indexterm" href="winbind.html#id2677666">NSS Winbind on AIX</a></dt><dt>algorithmic mapping, <a class="indexterm" href="idmapper.html#id2627583">Primary Domain Controller</a></dt><dt>alias group, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>allow access, <a class="indexterm" href="securing-samba.html#id2640364">Using Host-Based Protection</a></dt><dt>allow trusted domains, <a class="indexterm" href="idmapper.html#id2628674">IDMAP_RID with Winbind</a></dt><dt>already exists, <a class="indexterm" href="domain-member.html#id2595797">Cannot Add Machine Back to Domain</a></dt><dt>alternative solution, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>Amanda, <a class="indexterm" href="Backup.html#id2694187">Amanda</a></dt><dt>analyzes data, <a class="indexterm" href="problems.html#id2707164">Diagnostics Tools</a></dt><dt>anonymous, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dd><dl><dt>print server, <a class="indexterm" href="FastStart.html#id2576283">Anonymous Print Server</a></dt><dt>read-write server, <a class="indexterm" href="FastStart.html#id2576046">Anonymous Read-Write Document Server</a></dt></dl></dd><dt>anonymous access, <a class="indexterm" href="NetworkBrowsing.html#id2607167">Problem Resolution</a></dt><dt>anonymous file server, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></dt><dt>anonymous server, <a class="indexterm" href="cfgsmarts.html">Advanced Configuration Techniques</a></dt><dt>ANSI compiler, <a class="indexterm" href="Portability.html#id2710853">HPUX</a></dt><dt>anticipate failure, <a class="indexterm" href="SambaHA.html#id2694331">Features and Benefits</a></dt><dt>API, <a class="indexterm" href="passdb.html#id2614688">smbpasswd: Encrypted Password Database</a></dt><dt>Appliances, <a class="indexterm" href="winbind.html#id2676016">Target Uses</a></dt><dt>application servers, <a class="indexterm" href="domain-member.html#id2591202">Features and Benefits</a></dt><dt>application/cups.vnd-postscript, <a class="indexterm" href="CUPS-printing.html#id2664641">Windows CUPS PostScript Driver Versus Adobe Driver</a></dt><dt>application/octet-stream, <a class="indexterm" href="CUPS-printing.html#cups-raw">Explicitly Enable &#8220;raw&#8221; Printing for application/octet-stream</a>, <a class="indexterm" href="CUPS-printing.html#id2658945">MIME Type Conversion Rules</a>, <a class="indexterm" href="CUPS-printing.html#id2661002">application/octet-stream Printing</a></dt><dt>application/pdf, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a>, <a class="indexterm" href="CUPS-printing.html#id2658945">MIME Type Conversion Rules</a></dt><dt>application/postscript, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a>, <a class="indexterm" href="CUPS-printing.html#id2658945">MIME Type Conversion Rules</a>, <a class="indexterm" href="CUPS-printing.html#id2659310">Prefilters</a>, <a class="indexterm" href="CUPS-printing.html#id2659497">pstops</a>, <a class="indexterm" href="CUPS-printing.html#id2664641">Windows CUPS PostScript Driver Versus Adobe Driver</a></dt><dt>application/vnd.cups-postscript, <a class="indexterm" href="CUPS-printing.html#id2659310">Prefilters</a>, <a class="indexterm" href="CUPS-printing.html#id2659497">pstops</a></dt><dt>application/vnd.cups-raster, <a class="indexterm" href="CUPS-printing.html#id2661282">PostScript Printer Descriptions for Non-PostScript Printers</a></dt><dt>application/vnd.cups-raw, <a class="indexterm" href="CUPS-printing.html#cups-raw">Explicitly Enable &#8220;raw&#8221; Printing for application/octet-stream</a></dt><dt>application/x-shell, <a class="indexterm" href="CUPS-printing.html#id2658945">MIME Type Conversion Rules</a></dt><dt>apt-get, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>ARCFOUR-HMAC-MD5, <a class="indexterm" href="domain-member.html#ads-test-server">Testing Server Setup</a></dt><dt>architecture, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a></dt><dt>ARP/RARP, <a class="indexterm" href="integrate-ms-networks.html#id2690637">/etc/hosts</a></dt><dt>ASCII, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a>, <a class="indexterm" href="unicode.html#id2692250">What Are Charsets and Unicode?</a>, <a class="indexterm" href="unicode.html#id2692552">Japanese Charsets</a></dt><dt>ASCII text, <a class="indexterm" href="CUPS-printing.html#id2659310">Prefilters</a></dt><dt>assign rights, <a class="indexterm" href="rights.html#id2630793">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>assigned RID, <a class="indexterm" href="groupmapping.html#id2618354">Discussion</a></dt><dt>assistance, <a class="indexterm" href="ch46.html#id2714245">Free Support</a></dt><dt>associations, <a class="indexterm" href="groupmapping.html">Group Mapping: MS Windows and UNIX</a></dt><dt>attach gdb, <a class="indexterm" href="problems.html#id2707216">Debugging with Samba Itself</a></dt><dt>attribute, <a class="indexterm" href="passdb.html#id2615649">OpenLDAP Configuration</a></dt><dt>attributes, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a></dt><dt>audit file access, <a class="indexterm" href="VFS.html#id2673092">audit</a></dt><dt>audit module, <a class="indexterm" href="VFS.html#id2673350">extd_audit</a></dt><dt>auth, <a class="indexterm" href="pam.html#id2688266">Anatomy of /etc/pam.d Entries</a></dt><dt>authenticate, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></dt><dt>authenticate users, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></dt><dt>authenticated, <a class="indexterm" href="domain-member.html#id2594193">Configure smb.conf</a></dt><dt>authenticating server, <a class="indexterm" href="ProfileMgmt.html#id2685846">MS Windows NT4 Workstation</a></dt><dt>authentication, <a class="indexterm" href="ServerType.html#id2580765">Features and Benefits</a>, <a class="indexterm" href="ServerType.html#id2581638">Domain Security Mode (User-Level Security)</a>, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a>, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a>, <a class="indexterm" href="samba-pdc.html#id2586627">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="domain-member.html#id2593911">Why Is This Better Than security = server?</a>, <a class="indexterm" href="passdb.html#id2610108">Important Notes About Security</a>, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a>, <a class="indexterm" href="passdb.html#id2614433">Account Import/Export</a>, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a>, <a class="indexterm" href="winbind.html#id2678970">Configure Winbind and PAM</a>, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dd><dl><dt>backend, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a></dt></dl></dd><dt>authentication agents, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></dt><dt>authentication architecture, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></dt><dt>authentication backend, <a class="indexterm" href="NT4Migration.html#id2701821">Domain Layout</a></dt><dt>authentication control, <a class="indexterm" href="winbind.html#id2676910">Introduction</a></dt><dt>authentication database, <a class="indexterm" href="InterdomainTrusts.html#id2641780">Features and Benefits</a></dt><dt>authentication management, <a class="indexterm" href="winbind.html#id2676603">Pluggable Authentication Modules</a></dt><dt>authentication mechanisms, <a class="indexterm" href="winbind.html#id2676910">Introduction</a></dt><dt>authentication methods, <a class="indexterm" href="winbind.html#id2676603">Pluggable Authentication Modules</a></dt><dt>authentication module API, <a class="indexterm" href="winbind.html#id2677666">NSS Winbind on AIX</a></dt><dt>authentication regime, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a></dt><dt>authentication reply, <a class="indexterm" href="domain-member.html#id2593911">Why Is This Better Than security = server?</a></dt><dt>authentication server, <a class="indexterm" href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a></dt><dt>authentication service, <a class="indexterm" href="winbind.html#id2679136">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>authentication system, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a></dt><dt>authenticatior, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a></dt><dt>authoritative, <a class="indexterm" href="NetworkBrowsing.html#id2607589">Behavior of Cross-Subnet Browsing</a></dt><dt>authoritive, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a></dt><dt>authorization, <a class="indexterm" href="winbind.html#id2676603">Pluggable Authentication Modules</a></dt><dt>auto-reconnect, <a class="indexterm" href="passdb.html#id2610108">Important Notes About Security</a></dt><dt>autogen.sh, <a class="indexterm" href="compiling.html#id2709741">Building the Binaries</a></dt><dt>autogenerated printcap, <a class="indexterm" href="classicalprinting.html#id2647507">Default UNIX System Printing Commands</a></dt><dt>automatic account creation, <a class="indexterm" href="domain-member.html#id2592325">Managing Domain Machine Accounts using NT4 Server Manager</a></dt><dt>automatic mapping, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a></dt><dt>automatic reconnects, <a class="indexterm" href="passdb.html#id2610423">Advantages of Encrypted Passwords</a></dt><dt>automatic redundancy, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></dt><dt>autopoweruser.sh, <a class="indexterm" href="NetCommand.html#id2622674">Managing Nest Groups on Workstations from the Samba Server</a></dt><dt>autotyping, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></dt><dt>AUXILIARY, <a class="indexterm" href="passdb.html#id2615414">Schema and Relationship to the RFC 2307 posixAccount</a></dt><dt>auxiliary members, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>availability, <a class="indexterm" href="SambaHA.html#id2694331">Features and Benefits</a>, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>available, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dt>available port, <a class="indexterm" href="classicalprinting.html#id2654194">Samba and Printer Ports</a></dt><dt>available printerd, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>available rights, <a class="indexterm" href="rights.html#id2630793">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>average print run, <a class="indexterm" href="CUPS-printing.html#id2657150">Advanced Intelligent Printing with PostScript Driver Download</a></dt></dl></div><div class="indexdiv"><h3>B</h3><dl><dt>b-node, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a></dt><dt>back up, <a class="indexterm" href="winbind.html#id2677024">Requirements</a></dt><dt>backed up, <a class="indexterm" href="NT4Migration.html#id2702022">Server Share and Directory Layout</a></dt><dt>backend, <a class="indexterm" href="SambaHA.html#id2694935">The Distributed File System Challenge</a></dt><dt>backend authentication, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>backend database, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a>, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id2595873">Adding Machine to Domain Fails</a></dt><dt>backend failures, <a class="indexterm" href="SambaHA.html#id2695410">High-Availability Server Products</a></dt><dt>backend file system pool, <a class="indexterm" href="SambaHA.html#id2695062">Restrictive Constraints on Distributed File Systems</a></dt><dt>backends, <a class="indexterm" href="ChangeNotes.html#id2601160">Passdb Changes</a>, <a class="indexterm" href="CUPS-printing.html#id2670834">Printing from CUPS to Windows-Attached Printers</a></dt><dt>backup, <a class="indexterm" href="Backup.html#id2693704">Features and Benefits</a>, <a class="indexterm" href="NT4Migration.html#id2702022">Server Share and Directory Layout</a></dt><dt>backup domain controller, <a class="indexterm" href="NT4Migration.html#id2701821">Domain Layout</a></dt><dt>backup solution, <a class="indexterm" href="Backup.html#id2693749">Discussion of Backup Solutions</a></dt><dt>BackupPC, <a class="indexterm" href="Backup.html#id2693846">BackupPC</a></dt><dt>bad hardware, <a class="indexterm" href="NetworkBrowsing.html#id2608626">Browsing of Shares and Directories is Very Slow</a></dt><dt>bad logon attempts, <a class="indexterm" href="passdb.html#id2613628">Changing User Accounts</a></dt><dt>Bad networking hardware, <a class="indexterm" href="NetworkBrowsing.html#id2608626">Browsing of Shares and Directories is Very Slow</a></dt><dt>bad password, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>banner pages, <a class="indexterm" href="CUPS-printing.html#id2664641">Windows CUPS PostScript Driver Versus Adobe Driver</a>, <a class="indexterm" href="CUPS-printing.html#id2664859">Run cupsaddsmb (Quiet Mode)</a></dt><dt>barriers, <a class="indexterm" href="securing-samba.html#id2640103">Introduction</a></dt><dt>Batch Oplock, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>BDC, <a class="indexterm" href="ServerType.html#id2581638">Domain Security Mode (User-Level Security)</a>, <a class="indexterm" href="ServerType.html#id2581855">Example Configuration</a>, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a>, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a>, <a class="indexterm" href="samba-bdc.html#id2587890">Features and Benefits</a>, <a class="indexterm" href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a>, <a class="indexterm" href="samba-bdc.html#id2589047">LDAP Configuration Notes</a>, <a class="indexterm" href="samba-bdc.html#id2589411">Active Directory Domain Control</a>, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a>, <a class="indexterm" href="samba-bdc.html#id2590243">Example Configuration</a>, <a class="indexterm" href="samba-bdc.html#id2590798">Can Samba Be a Backup Domain Controller to an NT4 PDC?</a>, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="domain-member.html#id2593911">Why Is This Better Than security = server?</a>, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a>, <a class="indexterm" href="passdb.html#id2610423">Advantages of Encrypted Passwords</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="passdb.html#id2614953">tdbsam</a>, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id2627583">Primary Domain Controller</a>, <a class="indexterm" href="idmapper.html#id2627818">Backup Domain Controller</a>, <a class="indexterm" href="winbind.html#id2677976">Join the Samba Server to the PDC Domain</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a>, <a class="indexterm" href="NT4Migration.html#id2701821">Domain Layout</a>, <a class="indexterm" href="NT4Migration.html#id2702346">Steps in Migration Process</a></dt><dt>BDCs, <a class="indexterm" href="NT4Migration.html#id2701821">Domain Layout</a></dt><dt>behavior approximately same, <a class="indexterm" href="upgrading-to-3.0.html#id2698610">Quick Migration Guide</a></dt><dt>between domains, <a class="indexterm" href="InterdomainTrusts.html#id2642557">Configuring Samba NT-Style Domain Trusts</a></dt><dt>bias, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></dt><dt>binary format TDB, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a></dt><dt>BIND, <a class="indexterm" href="DNSDHCP.html#id2714892">Dynamic DNS</a></dt><dt>bind interfaces only, <a class="indexterm" href="cfgsmarts.html#id2696226">Multiple Server Hosting</a></dt><dt>BIND9, <a class="indexterm" href="NetworkBrowsing.html#adsdnstech">DNS and Active Directory</a></dt><dt>BIND9.NET, <a class="indexterm" href="DNSDHCP.html#id2714623">Features and Benefits</a></dt><dt>bindery-enabled, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>block device, <a class="indexterm" href="AccessControls.html#id2633292">File and Directory Access Control</a></dt><dt>block incoming packets, <a class="indexterm" href="securing-samba.html#firewallports">Using a Firewall</a></dt><dt>BOBS, <a class="indexterm" href="Backup.html#id2694236">BOBS: Browseable Online Backup System</a></dt><dt>bogus, <a class="indexterm" href="ServerType.html#id2582513">Example Configuration</a></dt><dt>boot disk`, <a class="indexterm" href="winbind.html#id2677024">Requirements</a></dt><dt>bridge, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a></dt><dt>bridges networks, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a></dt><dt>brlock.tdb, <a class="indexterm" href="CUPS-printing.html#id2667763">The Printing *.tdb Files</a></dt><dd><dl><dt>(see also TDB)</dt></dl></dd><dt>broadcast, <a class="indexterm" href="samba-bdc.html#id2589470">What Qualifies a Domain Controller on the Network?</a>, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a></dt><dt>broadcast address, <a class="indexterm" href="NetworkBrowsing.html#id2607167">Problem Resolution</a>, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>broadcast isolated subnet, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></dt><dt>broadcast messages, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a></dt><dt>broadcast messaging, <a class="indexterm" href="samba-bdc.html#id2589560">How Does a Workstation find its Domain Controller?</a></dt><dt>Broadcast node, <a class="indexterm" href="NetworkBrowsing.html#id2606281">Static WINS Entries</a></dt><dt>broadcast request, <a class="indexterm" href="samba-pdc.html#id2586627">The Special Case of Windows 9x/Me</a></dt><dt>broadcast traffic, <a class="indexterm" href="NetworkBrowsing.html#id2607418">Cross-Subnet Browsing</a></dt><dt>broadcast-based, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a></dt><dt>broadcast-based name resolution, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></dt><dt>broadcasts, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a>, <a class="indexterm" href="NetworkBrowsing.html#id2607589">Behavior of Cross-Subnet Browsing</a></dt><dt>browse across subnet, <a class="indexterm" href="NetworkBrowsing.html#id2607418">Cross-Subnet Browsing</a></dt><dt>browse list, <a class="indexterm" href="samba-pdc.html#id2585096">Preparing for Domain Control</a>, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a>, <a class="indexterm" href="NetworkBrowsing.html#id2605636">WINS: The Windows Internetworking Name Server</a>, <a class="indexterm" href="NetworkBrowsing.html#id2607589">Behavior of Cross-Subnet Browsing</a></dt><dt>browse list handling, <a class="indexterm" href="NetworkBrowsing.html">Network Browsing</a></dt><dt>browse list maintainers, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a></dt><dt>browse list management, <a class="indexterm" href="samba-pdc.html#id2587021">Security Mode and Master Browsers</a>, <a class="indexterm" href="NetworkBrowsing.html#id2601786">What Is Browsing?</a></dt><dt>browse lists, <a class="indexterm" href="NetworkBrowsing.html#id2604955">Making Samba the Domain Master</a>, <a class="indexterm" href="NetworkBrowsing.html#id2607418">Cross-Subnet Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id2607589">Behavior of Cross-Subnet Browsing</a></dt><dt>browse resources, <a class="indexterm" href="NetworkBrowsing.html#id2607167">Problem Resolution</a></dt><dt>browse server resources, <a class="indexterm" href="NetworkBrowsing.html#id2607167">Problem Resolution</a></dt><dt>browse shares, <a class="indexterm" href="securing-samba.html#id2640934">Using IPC$ Share-Based Denials </a></dt><dt>browse.dat, <a class="indexterm" href="NetworkBrowsing.html#id2607167">Problem Resolution</a></dt><dt>browseable, <a class="indexterm" href="install.html#id2573195">Configuration File Syntax</a></dt><dt>browser election, <a class="indexterm" href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a></dt><dt>browser elections, <a class="indexterm" href="NetworkBrowsing.html#id2604354">Domain Browsing Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></dt><dt>BrowseShortNames, <a class="indexterm" href="CUPS-printing.html#id2672342">Print Queue Called &#8220;lp&#8221; Mishandles Print Jobs</a></dt><dt>browsing, <a class="indexterm" href="samba-pdc.html#id2586627">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="NetworkBrowsing.html#id2601786">What Is Browsing?</a>, <a class="indexterm" href="NetworkBrowsing.html#id2604955">Making Samba the Domain Master</a>, <a class="indexterm" href="NetworkBrowsing.html#id2606970">Browsing Support in Samba</a></dt><dt>browsing across subnets, <a class="indexterm" href="NetworkBrowsing.html">Network Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id2607418">Cross-Subnet Browsing</a></dt><dt>browsing another subnet, <a class="indexterm" href="NetworkBrowsing.html#id2606970">Browsing Support in Samba</a></dt><dt>browsing intrinsics, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a></dt><dt>browsing problems, <a class="indexterm" href="NetworkBrowsing.html#id2606524">Windows Networking Protocols</a>, <a class="indexterm" href="NetworkBrowsing.html#id2608431">Common Errors</a>, <a class="indexterm" href="NetworkBrowsing.html#id2608579">I Get an "Unable to browse the network" Error</a></dt><dt>BSD, <a class="indexterm" href="samba-pdc.html#id2587300">&#8220;$&#8221; Cannot Be Included in Machine Name</a>, <a class="indexterm" href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="classicalprinting.html#id2644133">Features and Benefits</a></dt><dt>BSD Printing, <a class="indexterm" href="classicalprinting.html#id2644675">Simple Print Configuration</a></dt><dt>BSD-style printing, <a class="indexterm" href="classicalprinting.html#id2645543">Extended Printing Configuration</a></dt><dt>bug report, <a class="indexterm" href="ch46.html#id2714245">Free Support</a></dt><dt>bug reports, <a class="indexterm" href="bugreport.html#id2708335">Introduction</a></dt><dt>Bugzilla, <a class="indexterm" href="bugreport.html#id2708335">Introduction</a></dt><dt>built-in commands, <a class="indexterm" href="classicalprinting.html#id2648051">Custom Print Commands</a></dt><dt>bypasses privilege, <a class="indexterm" href="rights.html#id2630793">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>byte ranges, <a class="indexterm" href="locking.html#id2637734">Discussion</a></dt><dt>byte-range lock, <a class="indexterm" href="locking.html#id2637734">Discussion</a></dt><dt>byte-range locking, <a class="indexterm" href="locking.html#id2637734">Discussion</a>, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt></dl></div><div class="indexdiv"><h3>C</h3><dl><dt>c:\winnt\inf, <a class="indexterm" href="PolicyMgmt.html#id2681565">Windows NT4-Style Policy Files</a></dt><dt>C:\WinNT\System32\config, <a class="indexterm" href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a></dt><dt>cached</dt><dd><dl><dt>password, <a class="indexterm" href="ServerType.html#id2582616">Password Checking</a></dt></dl></dd><dt>cached encrypted password, <a class="indexterm" href="passdb.html#id2610108">Important Notes About Security</a></dt><dt>cached in memory, <a class="indexterm" href="passdb.html#id2610564">Advantages of Non-Encrypted Passwords</a></dt><dt>cached local file, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>cached locally, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a></dt><dt>cached references, <a class="indexterm" href="NetworkBrowsing.html#id2608826">Invalid Cached Share References Affects Network Browsing</a></dt><dt>caching, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>caching reads, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>caching scheme, <a class="indexterm" href="winbind.html#id2676847">Result Caching</a></dt><dt>caching writes, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>called name, <a class="indexterm" href="securing-samba.html#id2640364">Using Host-Based Protection</a></dt><dt>cannot join domain, <a class="indexterm" href="ClientConfig.html#id2600420">Common Errors</a></dt><dt>canonicalize files, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>CAP, <a class="indexterm" href="unicode.html#id2692552">Japanese Charsets</a>, <a class="indexterm" href="unicode.html#id2692681">Basic Parameter Setting</a>, <a class="indexterm" href="Other-Clients.html#id2711424">Macintosh Clients</a></dt><dt>cap-share, <a class="indexterm" href="unicode.html#id2692681">Basic Parameter Setting</a></dt><dt>capability to delete, <a class="indexterm" href="AccessControls.html#id2633704">Protecting Directories and Files from Deletion</a></dt><dt>CAP_LINUX_IMMUTABLE, <a class="indexterm" href="AccessControls.html#id2633704">Protecting Directories and Files from Deletion</a></dt><dt>case options, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>case sensitivity, <a class="indexterm" href="pam.html#id2688187">PAM Configuration Syntax</a></dt><dt>case-insensitive, <a class="indexterm" href="ServerType.html#id2581256">User Level Security</a>, <a class="indexterm" href="classicalprinting.html#id2644675">Simple Print Configuration</a>, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>case-preserving, <a class="indexterm" href="ServerType.html#id2581256">User Level Security</a></dt><dt>central environment, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a></dt><dt>centralized</dt><dd><dl><dt>authentication, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></dt></dl></dd><dt>centralized identity management, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></dt><dt>centrally managed, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>certificate, <a class="indexterm" href="SWAT.html#id2704171">Securing SWAT through SSL</a></dt><dt>Certificate Authority (see CA)</dt><dt>cfdisk, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>challenge/response mechanis, <a class="indexterm" href="passdb.html#id2610108">Important Notes About Security</a></dt><dt>change capabilities, <a class="indexterm" href="passdb.html#id2612037">The smbpasswd Tool</a></dt><dt>change motivations, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>change password, <a class="indexterm" href="domain-member.html#id2595479">Notes</a></dt><dt>change passwords, <a class="indexterm" href="passdb.html#id2612037">The smbpasswd Tool</a></dt><dt>changed parameters, <a class="indexterm" href="upgrading-to-3.0.html#oldupdatenotes">Upgrading from Samba-2.x to Samba-3.0.25</a></dt><dt>changes password, <a class="indexterm" href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a></dt><dt>character device, <a class="indexterm" href="AccessControls.html#id2633292">File and Directory Access Control</a></dt><dt>character set, <a class="indexterm" href="unicode.html#id2692250">What Are Charsets and Unicode?</a></dt><dt>character sets, <a class="indexterm" href="unicode.html#id2692384">Samba and Charsets</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a></dt><dt>charset, <a class="indexterm" href="unicode.html#id2692250">What Are Charsets and Unicode?</a></dt><dt>charset conversion, <a class="indexterm" href="unicode.html#id2692520">Conversion from Old Names</a></dt><dt>chattr, <a class="indexterm" href="AccessControls.html#id2633704">Protecting Directories and Files from Deletion</a></dt><dt>check for locks, <a class="indexterm" href="locking.html#id2637734">Discussion</a></dt><dt>check logs, <a class="indexterm" href="domain-member.html#id2595873">Adding Machine to Domain Fails</a></dt><dt>checksum-search, <a class="indexterm" href="Backup.html#id2694017">Rsync</a></dt><dt>chmod, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>chown, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="AccessControls.html#id2635654">Viewing File Ownership</a>, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>chpass, <a class="indexterm" href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a></dt><dt>CIFS, <a class="indexterm" href="domain-member.html#id2595551">Sharing User ID Mappings between Samba Domain Members</a></dt><dt>CIFS function calls, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>CIFS/SMB, <a class="indexterm" href="SambaHA.html#id2694331">Features and Benefits</a>, <a class="indexterm" href="SambaHA.html#id2694616">Why Is This So Hard?</a></dt><dt>Citrix, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680529">Remote Management with ThinLinc</a></dt><dt>clear purpose preferred, <a class="indexterm" href="Backup.html#id2693749">Discussion of Backup Solutions</a></dt><dt>clear-text, <a class="indexterm" href="ServerType.html#id2582616">Password Checking</a>, <a class="indexterm" href="passdb.html#id2610108">Important Notes About Security</a>, <a class="indexterm" href="passdb.html#id2616644">Security and sambaSamAccount</a></dt><dt>clear-text passwords, <a class="indexterm" href="passdb.html#id2610108">Important Notes About Security</a></dt><dt>client client instructions, <a class="indexterm" href="ClientConfig.html#id2597573">Features and Benefits</a></dt><dt>Client for Microsoft Networks, <a class="indexterm" href="ClientConfig.html#id2599975">Domain Logon Configuration: Windows 9x/Me</a></dt><dt>Client for Novell Networks, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a></dt><dt>client-server mode, <a class="indexterm" href="passdb.html#id2612037">The smbpasswd Tool</a></dt><dt>client-side caching, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>client-side data caching, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a>, <a class="indexterm" href="locking.html#id2638685">PDM Data Shares</a></dt><dt>clock skew, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a></dt><dt>cluster servers, <a class="indexterm" href="SambaHA.html#id2694735">The Front-End Challenge</a></dt><dt>clustered file server, <a class="indexterm" href="SambaHA.html#id2694486">The Ultimate Goal</a></dt><dt>Clustered smbds, <a class="indexterm" href="SambaHA.html#id2695132">Server Pool Communications</a></dt><dt>clustering technologies, <a class="indexterm" href="SambaHA.html#id2694486">The Ultimate Goal</a></dt><dt>cluttering, <a class="indexterm" href="bugreport.html#id2708660">Debugging-Specific Operations</a></dt><dt>cmd, <a class="indexterm" href="NetworkBrowsing.html#id2608626">Browsing of Shares and Directories is Very Slow</a>, <a class="indexterm" href="rights.html#id2632126">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>cmd shell, <a class="indexterm" href="rights.html#id2632126">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>CN, <a class="indexterm" href="samba-bdc.html#id2589047">LDAP Configuration Notes</a>, <a class="indexterm" href="ch-ldap-tls.html#s1-intro-ldap-tls">Introduction</a></dt><dt>code maintainer, <a class="indexterm" href="ch46.html#id2714245">Free Support</a></dt><dt>codepages, <a class="indexterm" href="unicode.html#id2692198">Features and Benefits</a></dt><dt>collating, <a class="indexterm" href="NetworkBrowsing.html#id2604955">Making Samba the Domain Master</a></dt><dt>collisions, <a class="indexterm" href="speed.html#id2712852">Samba Performance Problem Due to Changing Linux Kernel</a></dt><dt>color, <a class="indexterm" href="CUPS-printing.html#id2657520">UNIX Printfile Conversion and GUI Basics</a></dt><dt>COM1:, <a class="indexterm" href="classicalprinting.html#id2654194">Samba and Printer Ports</a></dt><dt>command-line, <a class="indexterm" href="NetCommand.html">Remote and Local Management: The Net Command</a></dt><dt>command-line utility, <a class="indexterm" href="rights.html#id2630793">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>commenting out setting, <a class="indexterm" href="classicalprinting.html#id2645155">Rapid Configuration Validation</a></dt><dt>commercial Linux products, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a></dt><dt>commercial support, <a class="indexterm" href="ch46.html">Samba Support</a>, <a class="indexterm" href="ch46.html#id2714463">Commercial Support</a></dt><dt>commit the settings, <a class="indexterm" href="ClientConfig.html#id2598395">MS Windows 2000</a></dt><dt>Common Internet Filesystem (see CIFS)</dt><dt>Common restrictions, <a class="indexterm" href="PolicyMgmt.html#id2682235">Managing Account/User Policies</a></dt><dt>Common UNIX Printing System (see CUPS)</dt><dt>common.adm, <a class="indexterm" href="PolicyMgmt.html#id2681565">Windows NT4-Style Policy Files</a></dt><dt>comp.protocols.smb, <a class="indexterm" href="bugreport.html#id2708335">Introduction</a></dt><dt>compatible, <a class="indexterm" href="passdb.html#id2610108">Important Notes About Security</a>, <a class="indexterm" href="Portability.html">Portability</a></dt><dt>compile, <a class="indexterm" href="install.html#id2573105">Obtaining and Installing Samba</a></dt><dt>compile-time options, <a class="indexterm" href="classicalprinting.html#id2645155">Rapid Configuration Validation</a></dt><dt>complex file name space, <a class="indexterm" href="SambaHA.html#id2695329">A Simple Solution</a></dt><dt>complex organization, <a class="indexterm" href="NT4Migration.html#id2701821">Domain Layout</a></dt><dt>complexity, <a class="indexterm" href="StandAloneServer.html#id2596521">Example Configuration</a></dt><dt>compliance, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a></dt><dt>complicated, <a class="indexterm" href="NetworkBrowsing.html#id2607589">Behavior of Cross-Subnet Browsing</a></dt><dt>complicated problem, <a class="indexterm" href="SambaHA.html#id2694829">Demultiplexing SMB Requests</a></dt><dt>comprehensive documentation, <a class="indexterm" href="cfgsmarts.html#id2696226">Multiple Server Hosting</a></dt><dt>Computer Account, <a class="indexterm" href="domain-member.html#id2592886">Windows NT4 Client</a></dt><dt>computer account, <a class="indexterm" href="domain-member.html#ads-test-server">Testing Server Setup</a></dt><dt>computer accounts, <a class="indexterm" href="passdb.html">Account Information Databases</a>, <a class="indexterm" href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>Computer Management, <a class="indexterm" href="AccessControls.html#id2635030">Access Controls on Shares</a>, <a class="indexterm" href="AccessControls.html#id2635301">Windows 200x/XP</a></dt><dt>Computer Name, <a class="indexterm" href="ClientConfig.html#id2599448">Joining a Domain: Windows 2000/XP Professional</a></dt><dt>computer name, <a class="indexterm" href="ClientConfig.html#id2599975">Domain Logon Configuration: Windows 9x/Me</a>, <a class="indexterm" href="integrate-ms-networks.html#id2691028">Name Resolution as Used within MS Windows Networking</a></dt><dt>concurrent access, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>Conectiva, <a class="indexterm" href="CUPS-printing.html#id2669056">Forums, Downloads, Tutorials, Howtos (Also for Mac OS X and Commercial UNIX)</a></dt><dt>config.cache, <a class="indexterm" href="domain-member.html#id2595186">Possible Errors</a></dt><dt>CONFIG.POL, <a class="indexterm" href="samba-pdc.html#id2586627">The Special Case of Windows 9x/Me</a></dt><dt>Config.POL, <a class="indexterm" href="PolicyMgmt.html#id2681239">Creating and Managing System Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id2681428">Windows 9x/ME Policies</a></dt><dt>configuration</dt><dd><dl><dt>documentation, <a class="indexterm" href="install.html#id2574615">Test Your Config File with testparm</a></dt></dl></dd><dt>configuration files, <a class="indexterm" href="SWAT.html#id2703390">Features and Benefits</a></dt><dt>configuration problem, <a class="indexterm" href="bugreport.html#id2708335">Introduction</a></dt><dt>configuration syntax, <a class="indexterm" href="classicalprinting.html#id2644675">Simple Print Configuration</a></dt><dt>configuration techniques, <a class="indexterm" href="cfgsmarts.html">Advanced Configuration Techniques</a></dt><dt>configuration too complex, <a class="indexterm" href="StandAloneServer.html#id2597506">Common Errors</a></dt><dt>configuration tool, <a class="indexterm" href="SWAT.html">SWAT: The Samba Web Administration Tool</a></dt><dt>configuration wizard, <a class="indexterm" href="ClientConfig.html#id2599448">Joining a Domain: Windows 2000/XP Professional</a></dt><dt>configure, <a class="indexterm" href="compiling.html#id2709741">Building the Binaries</a></dt><dt>configuring a firewall, <a class="indexterm" href="securing-samba.html#firewallports">Using a Firewall</a></dt><dt>confirm address, <a class="indexterm" href="securing-samba.html#id2640578">Using Interface Protection</a></dt><dt>confirm the password, <a class="indexterm" href="InterdomainTrusts.html#id2642897">Samba as the Trusting Domain</a></dt><dt>confirm the trust, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></dt><dt>connect transparently, <a class="indexterm" href="SambaHA.html#id2694486">The Ultimate Goal</a></dt><dt>connection resources, <a class="indexterm" href="domain-member.html#id2593911">Why Is This Better Than security = server?</a></dt><dt>connections, <a class="indexterm" href="install.html#id2574356">Example Configuration</a></dt><dt>connections.tdb, <a class="indexterm" href="CUPS-printing.html#id2667763">The Printing *.tdb Files</a></dt><dd><dl><dt>(see also TDB)</dt></dl></dd><dt>consistent case, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>console, <a class="indexterm" href="winbind.html#id2679136">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>consumer expects, <a class="indexterm" href="ch46.html">Samba Support</a></dt><dt>container, <a class="indexterm" href="domain-member.html#ads-create-machine-account">Create the Computer Account</a></dt><dt>continuity of service, <a class="indexterm" href="SambaHA.html#id2695410">High-Availability Server Products</a></dt><dt>contribute, <a class="indexterm" href="cfgsmarts.html#id2696226">Multiple Server Hosting</a></dt><dt>Control Panel, <a class="indexterm" href="ClientConfig.html#id2599448">Joining a Domain: Windows 2000/XP Professional</a></dt><dt>convert</dt><dd><dl><dt>domain member server, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a></dt></dl></dd><dt>converted, <a class="indexterm" href="passdb.html#passdbtech">Technical Information</a></dt><dt>copy'n'paste, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a></dt><dt>core files, <a class="indexterm" href="bugreport.html#id2708862">Internal Errors</a></dt><dt>core graphic engine, <a class="indexterm" href="CUPS-printing.html#id2657342">Windows Drivers, GDI, and EMF</a></dt><dt>core values, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>corrupted file, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a></dt><dt>cosine.schema, <a class="indexterm" href="passdb.html#id2615649">OpenLDAP Configuration</a></dt><dt>country of origin, <a class="indexterm" href="ch46.html#id2714463">Commercial Support</a></dt><dt>CP850, <a class="indexterm" href="unicode.html#id2692384">Samba and Charsets</a></dt><dt>CP932, <a class="indexterm" href="unicode.html#id2692681">Basic Parameter Setting</a></dt><dt>cracker, <a class="indexterm" href="securing-samba.html#id2640578">Using Interface Protection</a></dt><dt>create, <a class="indexterm" href="AccessControls.html#id2633169">Managing Directories</a></dt><dt>Create a Computer Account, <a class="indexterm" href="domain-member.html#id2592886">Windows NT4 Client</a></dt><dt>create a domain machine account, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a></dt><dt>create domain member, <a class="indexterm" href="domain-member.html#id2592722">Windows 200x/XP Professional Client</a></dt><dt>create machine trust account, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></dt><dt>create partition, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>Create the Computer Account, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a></dt><dt>create user accounts, <a class="indexterm" href="StandAloneServer.html#id2596329">Background</a></dt><dt>create volume, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>credentials, <a class="indexterm" href="ServerType.html#id2581256">User Level Security</a>, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a>, <a class="indexterm" href="samba-bdc.html#id2589047">LDAP Configuration Notes</a>, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a>, <a class="indexterm" href="ClientConfig.html#id2599448">Joining a Domain: Windows 2000/XP Professional</a>, <a class="indexterm" href="NetCommand.html#id2623379">Administering User Rights and Privileges</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>credentials validation, <a class="indexterm" href="samba-bdc.html#id2589617">NetBIOS Over TCP/IP Enabled</a></dt><dt>critical aspects of configuration, <a class="indexterm" href="ClientConfig.html#id2597573">Features and Benefits</a></dt><dt>crle, <a class="indexterm" href="winbind.html#id2677263">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a></dt><dt>cron, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a></dt><dt>cross post, <a class="indexterm" href="problems.html#id2708029">Getting Mailing List Help</a></dt><dt>cross-segment browsing, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a></dt><dt>cross-subnet browsing, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a>, <a class="indexterm" href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id2605907">WINS Server Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#id2607589">Behavior of Cross-Subnet Browsing</a></dt><dt>CUPS, <a class="indexterm" href="classicalprinting.html#id2644133">Features and Benefits</a>, <a class="indexterm" href="classicalprinting.html#id2644356">Technical Introduction</a>, <a class="indexterm" href="classicalprinting.html#id2645543">Extended Printing Configuration</a>, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a>, <a class="indexterm" href="CUPS-printing.html#id2655281">Features and Benefits</a>, <a class="indexterm" href="CUPS-printing.html#id2655341">Overview</a>, <a class="indexterm" href="CUPS-printing.html#id2655466">Basic CUPS Support Configuration</a>, <a class="indexterm" href="CUPS-printing.html#id2658122">Using Windows-Formatted Vendor PPDs</a></dt><dd><dl><dt>Page Accounting, <a class="indexterm" href="CUPS-printing.html#id2669728">Page Accounting with CUPS</a></dt><dt>quotas, <a class="indexterm" href="CUPS-printing.html#id2669763">Setting Up Quotas</a></dt></dl></dd><dt>CUPS API, <a class="indexterm" href="install.html#id2573195">Configuration File Syntax</a>, <a class="indexterm" href="classicalprinting.html#id2647507">Default UNIX System Printing Commands</a></dt><dt>CUPS backends, <a class="indexterm" href="CUPS-printing.html#id2660239">CUPS Backends</a></dt><dt>CUPS filtering, <a class="indexterm" href="CUPS-printing.html#id2658242">CUPS Also Uses PPDs for Non-PostScript Printers</a>, <a class="indexterm" href="CUPS-printing.html#id2658281">The CUPS Filtering Architecture</a></dt><dt>CUPS filtering chain, <a class="indexterm" href="CUPS-printing.html#id2660239">CUPS Backends</a></dt><dt>CUPS libarary API, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dt>CUPS PostScript, <a class="indexterm" href="CUPS-printing.html#id2664341">Caveats to Be Considered</a></dt><dt>CUPS PostScript driver, <a class="indexterm" href="CUPS-printing.html#id2664641">Windows CUPS PostScript Driver Versus Adobe Driver</a></dt><dt>CUPS print filters, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dt>CUPS raster, <a class="indexterm" href="CUPS-printing.html#id2658281">The CUPS Filtering Architecture</a>, <a class="indexterm" href="CUPS-printing.html#id2659665">pstoraster</a></dt><dt>CUPS-PPD, <a class="indexterm" href="CUPS-printing.html#id2668668">cupsomatic, pdqomatic, lpdomatic, directomatic</a></dt><dt>cups.hlp, <a class="indexterm" href="CUPS-printing.html#id2664341">Caveats to Be Considered</a></dt><dt>cupsaddsmb, <a class="indexterm" href="CUPS-printing.html#id2657029">Driver Upload Methods</a>, <a class="indexterm" href="CUPS-printing.html#id2663517">cupsaddsmb: The Unknown Utility</a>, <a class="indexterm" href="CUPS-printing.html#id2664341">Caveats to Be Considered</a>, <a class="indexterm" href="CUPS-printing.html#id2664859">Run cupsaddsmb (Quiet Mode)</a>, <a class="indexterm" href="CUPS-printing.html#id2664999">Run cupsaddsmb with Verbose Output</a>, <a class="indexterm" href="CUPS-printing.html#id2665190">Understanding cupsaddsmb</a>, <a class="indexterm" href="CUPS-printing.html#id2665457">cupsaddsmb with a Samba PDC</a>, <a class="indexterm" href="CUPS-printing.html#id2665538">cupsaddsmb Flowchart</a>, <a class="indexterm" href="CUPS-printing.html#id2665619">Installing the PostScript Driver on a Client</a>, <a class="indexterm" href="CUPS-printing.html#id2666436">Requirements for adddriver and setdriver to Succeed</a></dt><dt>cupsd.conf, <a class="indexterm" href="classicalprinting.html#id2647507">Default UNIX System Printing Commands</a>, <a class="indexterm" href="CUPS-printing.html#id2655466">Basic CUPS Support Configuration</a>, <a class="indexterm" href="CUPS-printing.html#id2660826">mime.convs</a>, <a class="indexterm" href="CUPS-printing.html#id2670486">Autodeletion or Preservation of CUPS Spool Files</a></dt><dt>cupsomatic, <a class="indexterm" href="CUPS-printing.html#id2658122">Using Windows-Formatted Vendor PPDs</a>, <a class="indexterm" href="CUPS-printing.html#id2658281">The CUPS Filtering Architecture</a>, <a class="indexterm" href="CUPS-printing.html#id2660577">The Role of cupsomatic/foomatic</a>, <a class="indexterm" href="CUPS-printing.html#id2661565">cupsomatic/foomatic-rip Versus Native CUPS Printing</a>, <a class="indexterm" href="CUPS-printing.html#id2668269">CUPS Print Drivers from Linuxprinting.org</a>, <a class="indexterm" href="CUPS-printing.html#id2668668">cupsomatic, pdqomatic, lpdomatic, directomatic</a></dt><dt>custom scripts, <a class="indexterm" href="passdb.html#id2614688">smbpasswd: Encrypted Password Database</a></dt><dt>customer expected, <a class="indexterm" href="ch46.html">Samba Support</a></dt><dt>customers, <a class="indexterm" href="ch46.html">Samba Support</a></dt><dt>customized print commands, <a class="indexterm" href="classicalprinting.html#id2648051">Custom Print Commands</a></dt></dl></div><div class="indexdiv"><h3>D</h3><dl><dt>daemon, <a class="indexterm" href="install.html#id2574163">Starting Samba</a>, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a>, <a class="indexterm" href="winbind.html#id2677024">Requirements</a>, <a class="indexterm" href="compiling.html#id2710468">Alternative: Starting smbd as a Daemon</a></dt><dt>daemon running, <a class="indexterm" href="winbind.html#id2678214">Starting and Testing the winbindd Daemon</a></dt><dt>daemons, <a class="indexterm" href="winbind.html#id2678925">Restarting</a></dt><dt>damaged data, <a class="indexterm" href="passdb.html#TOSHARG-acctflags">Account Flags Management</a></dt><dt>data caching, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>data corruption, <a class="indexterm" href="NetworkBrowsing.html#id2608626">Browsing of Shares and Directories is Very Slow</a>, <a class="indexterm" href="locking.html#id2638561">UNIX or NFS Client-Accessed Files</a></dt><dt>data interchange, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a></dt><dt>data stream, <a class="indexterm" href="classicalprinting.html#id2644356">Technical Introduction</a></dt><dt>database, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2698610">Quick Migration Guide</a></dt><dt>DatabaseFS, <a class="indexterm" href="VFS.html#id2675049">DatabaseFS</a></dt><dt>DAVE, <a class="indexterm" href="Other-Clients.html#id2711424">Macintosh Clients</a></dt><dt>dbx, <a class="indexterm" href="bugreport.html#id2708862">Internal Errors</a></dt><dt>DCE RPC, <a class="indexterm" href="winbind.html#id2677976">Join the Samba Server to the PDC Domain</a></dt><dt>DDK, <a class="indexterm" href="CUPS-printing.html#id2663407">PostScript Drivers with No Major Problems, Even in Kernel
-Mode</a>, <a class="indexterm" href="CUPS-printing.html#id2663896">CUPS &#8220;PostScript Driver for Windows NT/200x/XP&#8221;</a></dt><dt>DDNS, <a class="indexterm" href="NetworkBrowsing.html#id2602859">TCP/IP without NetBIOS</a>, <a class="indexterm" href="NetworkBrowsing.html#adsdnstech">DNS and Active Directory</a>, <a class="indexterm" href="integrate-ms-networks.html#id2690436">Background Information</a></dt><dt>de-multiplex, <a class="indexterm" href="SambaHA.html#id2694735">The Front-End Challenge</a></dt><dt>de-multiplexing, <a class="indexterm" href="SambaHA.html#id2694829">Demultiplexing SMB Requests</a></dt><dt>Debian, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>Debian Sarge, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>debug, <a class="indexterm" href="bugreport.html#id2708862">Internal Errors</a></dt><dt>debug level, <a class="indexterm" href="problems.html#id2707216">Debugging with Samba Itself</a>, <a class="indexterm" href="bugreport.html#dbglvl">Debug Levels</a></dt><dt>debugging, <a class="indexterm" href="problems.html#id2707216">Debugging with Samba Itself</a>, <a class="indexterm" href="bugreport.html#id2708660">Debugging-Specific Operations</a></dt><dt>debugging passwords, <a class="indexterm" href="problems.html#id2707216">Debugging with Samba Itself</a></dt><dt>debugging problems, <a class="indexterm" href="problems.html#id2707216">Debugging with Samba Itself</a></dt><dt>dedicated heartbeat, <a class="indexterm" href="SambaHA.html#id2695410">High-Availability Server Products</a></dt><dt>dedicated print server, <a class="indexterm" href="classicalprinting.html#id2644133">Features and Benefits</a></dt><dt>default accounts, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a></dt><dt>default aliases, <a class="indexterm" href="groupmapping.html#id2619564">Default Users, Groups, and Relative Identifiers</a></dt><dt>default behavior, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a></dt><dt>default devmode, <a class="indexterm" href="classicalprinting.html#prt-modeset">Setting Device Modes on New Printers</a></dt><dt>default DNS setup, <a class="indexterm" href="domain-member.html#id2595479">Notes</a></dt><dt>default gateways, <a class="indexterm" href="ClientConfig.html#id2597752">MS Windows XP Professional</a></dt><dt>default groups, <a class="indexterm" href="groupmapping.html#id2619564">Default Users, Groups, and Relative Identifiers</a></dt><dt>default mapping, <a class="indexterm" href="ChangeNotes.html#id2601219">Group Mapping Changes in Samba-3.0.23</a></dt><dt>default mappings, <a class="indexterm" href="NetCommand.html#id2621847">Mapping Windows Groups to UNIX Groups</a></dt><dt>default print command, <a class="indexterm" href="classicalprinting.html#id2647507">Default UNIX System Printing Commands</a></dt><dt>default print commands, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>default printer, <a class="indexterm" href="classicalprinting.html#id2648051">Custom Print Commands</a></dt><dt>default printing, <a class="indexterm" href="CUPS-printing.html#id2655281">Features and Benefits</a></dt><dt>default profile, <a class="indexterm" href="ProfileMgmt.html#id2685664">Default Profile for Windows Users</a>, <a class="indexterm" href="ProfileMgmt.html#id2687156">Changing the Default Profile</a></dt><dt>default settings, <a class="indexterm" href="passdb.html#TOSHARG-acctflags">Account Flags Management</a></dt><dt>default shells, <a class="indexterm" href="winbind.html#id2678214">Starting and Testing the winbindd Daemon</a></dt><dt>Default User, <a class="indexterm" href="ProfileMgmt.html#id2686408">MS Windows 200x/XP</a></dt><dt>default users, <a class="indexterm" href="groupmapping.html#id2619564">Default Users, Groups, and Relative Identifiers</a></dt><dt>defective hardware, <a class="indexterm" href="NetworkBrowsing.html#id2608626">Browsing of Shares and Directories is Very Slow</a></dt><dt>deferred open, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>defined shares, <a class="indexterm" href="securing-samba.html#id2641220">Why Can Users Access Other Users' Home Directories?</a></dt><dt>delegate administrative privileges, <a class="indexterm" href="NetCommand.html#id2623379">Administering User Rights and Privileges</a></dt><dt>delegated, <a class="indexterm" href="groupmapping.html#id2619324">Important Administrative Information</a></dt><dt>delegation, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a></dt><dt>delete, <a class="indexterm" href="AccessControls.html#id2633169">Managing Directories</a></dt><dt>delete a file, <a class="indexterm" href="AccessControls.html#id2633704">Protecting Directories and Files from Deletion</a></dt><dt>delete roaming profiles, <a class="indexterm" href="ProfileMgmt.html#id2686408">MS Windows 200x/XP</a></dt><dt>delete user script, <a class="indexterm" href="passdb.html#id2613544">Deleting Accounts</a></dt><dt>deleted files, <a class="indexterm" href="VFS.html#id2673676">recycle</a></dt><dt>deleted parameters, <a class="indexterm" href="upgrading-to-3.0.html#id2699110">Removed Parameters</a></dt><dt>delmem, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>demote, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a></dt><dt>demoted, <a class="indexterm" href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a></dt><dt>denial of service, <a class="indexterm" href="securing-samba.html#id2640578">Using Interface Protection</a></dt><dt>deny, <a class="indexterm" href="securing-samba.html#id2640934">Using IPC$ Share-Based Denials </a></dt><dt>deny access, <a class="indexterm" href="securing-samba.html#firewallports">Using a Firewall</a></dt><dt>deny modes, <a class="indexterm" href="locking.html#id2637734">Discussion</a></dt><dt>deny-none, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>DENY_ALL, <a class="indexterm" href="locking.html#id2637734">Discussion</a></dt><dt>DENY_DOS, <a class="indexterm" href="locking.html#id2637734">Discussion</a></dt><dt>DENY_FCB, <a class="indexterm" href="locking.html#id2637734">Discussion</a></dt><dt>DENY_NONE, <a class="indexterm" href="locking.html#id2637734">Discussion</a></dt><dt>DENY_READ, <a class="indexterm" href="locking.html#id2637734">Discussion</a></dt><dt>DENY_WRITE, <a class="indexterm" href="locking.html#id2637734">Discussion</a></dt><dt>deployment, <a class="indexterm" href="ch46.html#id2714245">Free Support</a></dt><dt>deployment guidelines, <a class="indexterm" href="passdb.html#id2611451">Caution Regarding LDAP and Samba</a></dt><dt>DES-CBC-CRC, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a></dt><dt>DES-CBC-MD5, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a>, <a class="indexterm" href="domain-member.html#ads-test-server">Testing Server Setup</a></dt><dt>desirable solution, <a class="indexterm" href="rights.html#id2632126">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>desktop cache, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a></dt><dt>desktop profile, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a>, <a class="indexterm" href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a></dt><dt>desktop profiles, <a class="indexterm" href="domain-member.html#id2591202">Features and Benefits</a>, <a class="indexterm" href="NetCommand.html#id2624351">Managing Security Identifiers (SIDS)</a></dt><dt>deterents, <a class="indexterm" href="securing-samba.html#id2640103">Introduction</a></dt><dt>development libraries, <a class="indexterm" href="winbind.html#id2677024">Requirements</a></dt><dt>devfsd package, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>device mode, <a class="indexterm" href="classicalprinting.html#prt-modeset">Setting Device Modes on New Printers</a></dt><dt>device-specific commands, <a class="indexterm" href="CUPS-printing.html#id2661282">PostScript Printer Descriptions for Non-PostScript Printers</a></dt><dt>DFS, <a class="indexterm" href="msdfs.html#id2643489">Features and Benefits</a> (see MS-DFS, Distributed File Systems)</dt><dt>DFS junction, <a class="indexterm" href="msdfs.html#id2643489">Features and Benefits</a></dt><dt>DFS links, <a class="indexterm" href="msdfs.html#id2643489">Features and Benefits</a></dt><dt>DFS root, <a class="indexterm" href="msdfs.html#id2643489">Features and Benefits</a></dt><dt>DFS server, <a class="indexterm" href="msdfs.html#id2643489">Features and Benefits</a></dt><dt>DFS tree, <a class="indexterm" href="msdfs.html#id2643489">Features and Benefits</a></dt><dt>DFS-aware, <a class="indexterm" href="msdfs.html#id2643489">Features and Benefits</a></dt><dt>DFS-aware clients, <a class="indexterm" href="msdfs.html#id2643489">Features and Benefits</a></dt><dt>DHCP, <a class="indexterm" href="ClientConfig.html#id2597677">TCP/IP Configuration</a>, <a class="indexterm" href="ClientConfig.html#id2597752">MS Windows XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id2598395">MS Windows 2000</a>, <a class="indexterm" href="ClientConfig.html#id2598942">MS Windows Me</a>, <a class="indexterm" href="NetworkBrowsing.html#id2607418">Cross-Subnet Browsing</a>, <a class="indexterm" href="integrate-ms-networks.html#id2690436">Background Information</a>, <a class="indexterm" href="DNSDHCP.html#id2714623">Features and Benefits</a></dt><dt>DHCP servers, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a></dt><dt>DHCP-enabled, <a class="indexterm" href="ClientConfig.html#id2598395">MS Windows 2000</a></dt><dt>DHCP-enabled operation, <a class="indexterm" href="ClientConfig.html#id2597752">MS Windows XP Professional</a></dt><dt>diagnostic, <a class="indexterm" href="idmapper.html#id2629264">IDMAP Storage in LDAP Using Winbind</a></dt><dt>diagnostic tools, <a class="indexterm" href="problems.html#id2707216">Debugging with Samba Itself</a></dt><dt>diff, <a class="indexterm" href="bugreport.html#id2709120">Patches</a></dt><dt>differences, <a class="indexterm" href="Backup.html#id2694017">Rsync</a></dt><dt>different resources, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></dt><dt>differently encrypted passwords, <a class="indexterm" href="passdb.html#passdbtech">Technical Information</a></dt><dt>differing protocol, <a class="indexterm" href="upgrading-to-3.0.html#id2698610">Quick Migration Guide</a></dt><dt>dir, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>direct internet access, <a class="indexterm" href="securing-samba.html#id2640103">Introduction</a></dt><dt>directory, <a class="indexterm" href="samba-bdc.html#id2589411">Active Directory Domain Control</a>, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="idmapper.html#id2627818">Backup Domain Controller</a></dt><dt>directory access control, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>directory access permissions, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a></dt><dt>directory controls, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a></dt><dt>Directory Information Tree (see DIT)</dt><dt>directory permissions, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a>, <a class="indexterm" href="AccessControls.html#id2633704">Protecting Directories and Files from Deletion</a></dt><dt>directory schema, <a class="indexterm" href="idmapper.html#id2627583">Primary Domain Controller</a></dt><dt>Directory Separators, <a class="indexterm" href="AccessControls.html#id2632834">MS Windows NTFS Comparison with UNIX File Systems</a></dt><dt>directory server, <a class="indexterm" href="passdb.html#id2615111">ldapsam</a></dt><dt>directory_mode, <a class="indexterm" href="VFS.html#id2673676">recycle</a></dt><dt>disable LMB, <a class="indexterm" href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a></dt><dt>disable locking, <a class="indexterm" href="locking.html#id2637637">Features and Benefits</a></dt><dt>disable roaming profiles, <a class="indexterm" href="ProfileMgmt.html#id2683405">Disabling Roaming Profile Support</a></dt><dt>disabling oplocks, <a class="indexterm" href="locking.html#id2638685">PDM Data Shares</a></dt><dt>disass, <a class="indexterm" href="bugreport.html#id2708862">Internal Errors</a></dt><dt>disaster recovery, <a class="indexterm" href="NT4Migration.html#id2702022">Server Share and Directory Layout</a></dt><dt>disconnect a connection, <a class="indexterm" href="ProfileMgmt.html#id2683030">NT4/200x User Profiles</a></dt><dt>disk, <a class="indexterm" href="passdb.html#id2610423">Advantages of Encrypted Passwords</a></dt><dt>disk space, <a class="indexterm" href="NT4Migration.html#id2702022">Server Share and Directory Layout</a></dt><dt>disparate information systems, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></dt><dt>display PostScript, <a class="indexterm" href="CUPS-printing.html#id2657520">UNIX Printfile Conversion and GUI Basics</a></dt><dt>displayName, <a class="indexterm" href="passdb.html#id2615649">OpenLDAP Configuration</a></dt><dt>distort, <a class="indexterm" href="CUPS-printing.html#id2657520">UNIX Printfile Conversion and GUI Basics</a></dt><dt>distribute authentication systems, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>distributed, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a></dt><dt>distributed account, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a></dt><dt>Distributed Computing Environment (see DCE)</dt><dt>distributed directory, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a></dt><dt>distributed file system, <a class="indexterm" href="SambaHA.html#id2694486">The Ultimate Goal</a> (see DFS)</dt><dt>Distributed File Systems, <a class="indexterm" href="SambaHA.html#id2694935">The Distributed File System Challenge</a></dt><dt>distributed file systems, <a class="indexterm" href="SambaHA.html#id2694935">The Distributed File System Challenge</a></dt><dt>distributed locking protocol, <a class="indexterm" href="SambaHA.html#id2695329">A Simple Solution</a></dt><dt>distribution, <a class="indexterm" href="install.html#id2574356">Example Configuration</a>, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></dt><dt>dithering algorithm, <a class="indexterm" href="CUPS-printing.html#id2660577">The Role of cupsomatic/foomatic</a></dt><dt>DMB, <a class="indexterm" href="samba-pdc.html#id2585096">Preparing for Domain Control</a>, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a>, <a class="indexterm" href="samba-pdc.html#id2587021">Security Mode and Master Browsers</a>, <a class="indexterm" href="samba-bdc.html#id2589470">What Qualifies a Domain Controller on the Network?</a>, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a>, <a class="indexterm" href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id2604354">Domain Browsing Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a>, <a class="indexterm" href="NetworkBrowsing.html#id2604955">Making Samba the Domain Master</a>, <a class="indexterm" href="NetworkBrowsing.html#id2605636">WINS: The Windows Internetworking Name Server</a>, <a class="indexterm" href="NetworkBrowsing.html#id2606524">Windows Networking Protocols</a>, <a class="indexterm" href="NetworkBrowsing.html#id2607589">Behavior of Cross-Subnet Browsing</a></dt><dt>DMB for a workgroup, <a class="indexterm" href="NetworkBrowsing.html#id2606970">Browsing Support in Samba</a></dt><dt>DMC, <a class="indexterm" href="idmapper.html#id2627889">Examples of IDMAP Backend Usage</a></dt><dt>DMS, <a class="indexterm" href="ServerType.html#id2581638">Domain Security Mode (User-Level Security)</a>, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a>, <a class="indexterm" href="idmapper.html#id2627889">Examples of IDMAP Backend Usage</a>, <a class="indexterm" href="cfgsmarts.html">Advanced Configuration Techniques</a></dt><dt>DN, <a class="indexterm" href="samba-bdc.html#id2589047">LDAP Configuration Notes</a>, <a class="indexterm" href="ch-ldap-tls.html#s1-intro-ldap-tls">Introduction</a></dt><dt>DNS, <a class="indexterm" href="samba-pdc.html#id2585096">Preparing for Domain Control</a>, <a class="indexterm" href="samba-bdc.html#id2589560">How Does a Workstation find its Domain Controller?</a>, <a class="indexterm" href="samba-bdc.html#id2589683">NetBIOS Over TCP/IP Disabled</a>, <a class="indexterm" href="domain-member.html#id2594193">Configure smb.conf</a>, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a>, <a class="indexterm" href="ClientConfig.html#id2597752">MS Windows XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id2598395">MS Windows 2000</a>, <a class="indexterm" href="ClientConfig.html#id2598942">MS Windows Me</a>, <a class="indexterm" href="NetworkBrowsing.html">Network Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id2601603">Features and Benefits</a>, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a>, <a class="indexterm" href="NetworkBrowsing.html#id2602859">TCP/IP without NetBIOS</a>, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a>, <a class="indexterm" href="NetworkBrowsing.html#id2607418">Cross-Subnet Browsing</a>, <a class="indexterm" href="passdb.html#id2615921">Initialize the LDAP Database</a>, <a class="indexterm" href="winbind.html#id2676371">Name Service Switch</a>, <a class="indexterm" href="integrate-ms-networks.html#id2690436">Background Information</a>, <a class="indexterm" href="integrate-ms-networks.html#id2691742">DNS Lookup</a>, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a>, <a class="indexterm" href="DNSDHCP.html#id2714623">Features and Benefits</a>, <a class="indexterm" href="DNSDHCP.html#id2714801">Example Configuration</a></dt><dd><dl><dt>Active Directory, <a class="indexterm" href="NetworkBrowsing.html#adsdnstech">DNS and Active Directory</a></dt><dt>Dynamic, <a class="indexterm" href="integrate-ms-networks.html#id2690436">Background Information</a>, <a class="indexterm" href="DNSDHCP.html#id2714892">Dynamic DNS</a></dt><dt>SRV records, <a class="indexterm" href="NetworkBrowsing.html#adsdnstech">DNS and Active Directory</a></dt></dl></dd><dt>DNS Configuration, <a class="indexterm" href="NetworkBrowsing.html#id2608626">Browsing of Shares and Directories is Very Slow</a></dt><dt>DNS lookup, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a></dt><dt>DNS name resolution, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></dt><dt>dns proxy, <a class="indexterm" href="diagnosis.html#id2705108">Assumptions</a></dt><dt>DNS server, <a class="indexterm" href="NetworkBrowsing.html#id2607589">Behavior of Cross-Subnet Browsing</a></dt><dt>DNS server access, <a class="indexterm" href="diagnosis.html#id2705108">Assumptions</a></dt><dt>DNS server settings, <a class="indexterm" href="ClientConfig.html#id2597752">MS Windows XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id2598395">MS Windows 2000</a></dt><dt>DNS servers, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a></dt><dt>DNS zon, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a></dt><dt>DNS/LDAP/ADS, <a class="indexterm" href="NetworkBrowsing.html#id2606877">Technical Overview of Browsing</a></dt><dt>document design, <a class="indexterm" href="NT4Migration.html#id2702022">Server Share and Directory Layout</a></dt><dt>documentation, <a class="indexterm" href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="SWAT.html#id2703390">Features and Benefits</a>, <a class="indexterm" href="problems.html">Analyzing and Solving Samba Problems</a></dt><dt>domain, <a class="indexterm" href="samba-pdc.html#id2586627">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="passdb.html#id2613456">Adding User Accounts</a>, <a class="indexterm" href="integrate-ms-networks.html#id2691028">Name Resolution as Used within MS Windows Networking</a></dt><dd><dl><dt>control, <a class="indexterm" href="ServerType.html#id2580932">Server Types</a></dt><dd><dl><dt>role, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a></dt></dl></dd><dt>controller, <a class="indexterm" href="ServerType.html#id2580765">Features and Benefits</a>, <a class="indexterm" href="ServerType.html#id2581638">Domain Security Mode (User-Level Security)</a>, <a class="indexterm" href="samba-pdc.html">Domain Control</a>, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a></dt><dd><dl><dt>convert, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a></dt><dt>hierarchy, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a></dt></dl></dd><dt>controllers, <a class="indexterm" href="ServerType.html#id2581638">Domain Security Mode (User-Level Security)</a></dt><dt>groups, <a class="indexterm" href="NetCommand.html#id2621445">UNIX and Windows Group Management</a></dt><dt>master</dt><dd><dl><dt>browser, <a class="indexterm" href="samba-pdc.html#id2585096">Preparing for Domain Control</a></dt></dl></dd><dt>member, <a class="indexterm" href="ServerType.html#id2580932">Server Types</a>, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a></dt><dd><dl><dt>server, <a class="indexterm" href="samba-bdc.html#id2587890">Features and Benefits</a></dt></dl></dd><dt>member server, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a></dt><dt>security, <a class="indexterm" href="ServerType.html#id2581638">Domain Security Mode (User-Level Security)</a></dt><dd><dl><dt>protocols, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a></dt></dl></dd><dt>trust account, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a></dt></dl></dd><dt>domain access, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a></dt><dt>domain account access policies, <a class="indexterm" href="passdb.html#id2614272">Domain Account Policy Managment</a></dt><dt>domain admin group, <a class="indexterm" href="groupmapping.html">Group Mapping: MS Windows and UNIX</a></dt><dt>domain Administrator, <a class="indexterm" href="rights.html#id2631943">The Administrator Domain SID</a></dt><dt>Domain Admins, <a class="indexterm" href="ChangeNotes.html#id2601219">Group Mapping Changes in Samba-3.0.23</a>, <a class="indexterm" href="groupmapping.html#id2618354">Discussion</a>, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="groupmapping.html#id2619324">Important Administrative Information</a>, <a class="indexterm" href="NetCommand.html#id2621847">Mapping Windows Groups to UNIX Groups</a>, <a class="indexterm" href="rights.html#id2630793">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>Domain Admins group, <a class="indexterm" href="groupmapping.html#id2618354">Discussion</a></dt><dt>domain authentication, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a></dt><dt>domain context, <a class="indexterm" href="NT4Migration.html#id2701821">Domain Layout</a></dt><dt>domain control, <a class="indexterm" href="samba-pdc.html#id2584572">Basics of Domain Control</a>, <a class="indexterm" href="samba-pdc.html#id2587021">Security Mode and Master Browsers</a>, <a class="indexterm" href="samba-bdc.html#id2590700">Common Errors</a>, <a class="indexterm" href="domain-member.html#id2591202">Features and Benefits</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="NT4Migration.html">Migration from NT4 PDC to Samba-3 PDC</a></dt><dd><dl><dt>backup, <a class="indexterm" href="ServerType.html#id2580932">Server Types</a></dt><dt>primary, <a class="indexterm" href="ServerType.html#id2580932">Server Types</a></dt></dl></dd><dt>domain control database (see SAM)</dt><dt>domain controller, <a class="indexterm" href="samba-pdc.html#id2587021">Security Mode and Master Browsers</a>, <a class="indexterm" href="samba-bdc.html#id2588303">Essential Background Information</a>, <a class="indexterm" href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a>, <a class="indexterm" href="samba-bdc.html#id2589411">Active Directory Domain Control</a>, <a class="indexterm" href="samba-bdc.html#id2589617">NetBIOS Over TCP/IP Enabled</a>, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a>, <a class="indexterm" href="winbind.html#id2675862">What Winbind Provides</a>, <a class="indexterm" href="winbind.html#id2677976">Join the Samba Server to the PDC Domain</a>, <a class="indexterm" href="PolicyMgmt.html#id2681239">Creating and Managing System Policies</a>, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a>, <a class="indexterm" href="NT4Migration.html#id2701821">Domain Layout</a>, <a class="indexterm" href="NT4Migration.html#id2702346">Steps in Migration Process</a></dt><dt>Domain Controller, <a class="indexterm" href="CUPS-printing.html#id2664341">Caveats to Be Considered</a></dt><dt>domain controllers, <a class="indexterm" href="samba-pdc.html#id2586348">Samba ADS Domain Control</a>, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="PolicyMgmt.html#id2681787">MS Windows 200x/XP Professional Policies</a>, <a class="indexterm" href="cfgsmarts.html">Advanced Configuration Techniques</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a></dt><dt>domain environment, <a class="indexterm" href="passdb.html#id2610108">Important Notes About Security</a></dt><dt>domain global, <a class="indexterm" href="rights.html#id2632126">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>domain global group, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a>, <a class="indexterm" href="rights.html#id2632126">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>domain global groups, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>domain global user, <a class="indexterm" href="rights.html#id2632126">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>domain global users, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>domain group, <a class="indexterm" href="winbind.html#id2675430">Features and Benefits</a></dt><dt>domain group settings, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>domain groups, <a class="indexterm" href="ChangeNotes.html#id2601219">Group Mapping Changes in Samba-3.0.23</a>, <a class="indexterm" href="groupmapping.html">Group Mapping: MS Windows and UNIX</a>, <a class="indexterm" href="groupmapping.html#id2619564">Default Users, Groups, and Relative Identifiers</a></dt><dt>Domain Groups, <a class="indexterm" href="passdb.html#id2616531">Accounts and Groups Management</a></dt><dt>Domain Guests, <a class="indexterm" href="NetCommand.html#id2621847">Mapping Windows Groups to UNIX Groups</a></dt><dt>domain information, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a></dt><dt>domain join, <a class="indexterm" href="idmapper.html#id2628264">ADS Domains</a>, <a class="indexterm" href="winbind.html#id2677976">Join the Samba Server to the PDC Domain</a></dt><dt>domain joining, <a class="indexterm" href="ClientConfig.html#id2599448">Joining a Domain: Windows 2000/XP Professional</a></dt><dt>domain logon, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a>, <a class="indexterm" href="samba-pdc.html#id2586412">Domain and Network Logon Configuration</a>, <a class="indexterm" href="samba-pdc.html#id2586431">Domain Network Logon Service</a>, <a class="indexterm" href="samba-bdc.html#id2588796">Example PDC Configuration</a>, <a class="indexterm" href="ClientConfig.html#id2599975">Domain Logon Configuration: Windows 9x/Me</a></dt><dt>domain logon server, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a></dt><dt>domain logons, <a class="indexterm" href="samba-pdc.html#id2586627">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="NetworkBrowsing.html#id2606970">Browsing Support in Samba</a>, <a class="indexterm" href="passdb.html#id2610108">Important Notes About Security</a></dt><dt>domain management tools, <a class="indexterm" href="domain-member.html#id2592325">Managing Domain Machine Accounts using NT4 Server Manager</a></dt><dt>domain master, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#id2606970">Browsing Support in Samba</a></dt><dt>domain member, <a class="indexterm" href="ServerType.html#id2581638">Domain Security Mode (User-Level Security)</a>, <a class="indexterm" href="samba-pdc.html#id2585096">Preparing for Domain Control</a>, <a class="indexterm" href="domain-member.html">Domain Membership</a>, <a class="indexterm" href="domain-member.html#id2591202">Features and Benefits</a>, <a class="indexterm" href="domain-member.html#id2592722">Windows 200x/XP Professional Client</a>, <a class="indexterm" href="domain-member.html#id2595757">Common Errors</a>, <a class="indexterm" href="ClientConfig.html#id2599448">Joining a Domain: Windows 2000/XP Professional</a>, <a class="indexterm" href="passdb.html#id2610108">Important Notes About Security</a>, <a class="indexterm" href="groupmapping.html#id2618354">Discussion</a>, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a>, <a class="indexterm" href="winbind.html#id2676061">Handling of Foreign SIDs</a>, <a class="indexterm" href="NT4Migration.html#id2701821">Domain Layout</a></dt><dt>Domain Member, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a></dt><dd><dl><dt>joining, <a class="indexterm" href="ServerType.html#id2581855">Example Configuration</a></dt></dl></dd><dt>domain member client, <a class="indexterm" href="groupmapping.html#id2619324">Important Administrative Information</a></dt><dt>Domain Member Client (see DMC)</dt><dt>domain member server, <a class="indexterm" href="samba-bdc.html#id2590243">Example Configuration</a>, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a>, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="NetworkBrowsing.html#id2602859">TCP/IP without NetBIOS</a>, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="classicalprinting.html#id2644133">Features and Benefits</a></dt><dt>Domain Member Server (see DMS)</dt><dt>domain member servers, <a class="indexterm" href="samba-bdc.html#id2590243">Example Configuration</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>domain member workstations, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>domain members, <a class="indexterm" href="domain-member.html#id2591202">Features and Benefits</a>, <a class="indexterm" href="NetworkBrowsing.html#id2604354">Domain Browsing Configuration</a>, <a class="indexterm" href="winbind.html#id2676910">Introduction</a></dt><dt>domain membership, <a class="indexterm" href="samba-pdc.html#id2585096">Preparing for Domain Control</a>, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a>, <a class="indexterm" href="domain-member.html">Domain Membership</a></dt><dt>domain name, <a class="indexterm" href="ClientConfig.html#id2599975">Domain Logon Configuration: Windows 9x/Me</a></dt><dt>Domain Name System (see DNS)</dt><dt>domain non-member, <a class="indexterm" href="winbind.html#id2676061">Handling of Foreign SIDs</a></dt><dt>domain policies, <a class="indexterm" href="PolicyMgmt.html#id2681565">Windows NT4-Style Policy Files</a></dt><dt>domain radio button, <a class="indexterm" href="ClientConfig.html#id2599448">Joining a Domain: Windows 2000/XP Professional</a></dt><dt>domain security, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a>, <a class="indexterm" href="domain-member.html">Domain Membership</a>, <a class="indexterm" href="domain-member.html#id2591202">Features and Benefits</a>, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a>, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="domain-member.html#id2593911">Why Is This Better Than security = server?</a>, <a class="indexterm" href="ClientConfig.html#id2599448">Joining a Domain: Windows 2000/XP Professional</a>, <a class="indexterm" href="passdb.html#id2610108">Important Notes About Security</a>, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="idmapper.html#id2627583">Primary Domain Controller</a>, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a>, <a class="indexterm" href="winbind.html#id2677976">Join the Samba Server to the PDC Domain</a>, <a class="indexterm" href="ProfileMgmt.html#id2686408">MS Windows 200x/XP</a></dt><dt>domain security account, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>Domain Server Manager, <a class="indexterm" href="groupmapping.html#id2619442">Applicable Only to Versions Earlier than 3.0.11</a></dt><dt>domain SID, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a>, <a class="indexterm" href="NetCommand.html#id2624351">Managing Security Identifiers (SIDS)</a></dt><dt>domain trust, <a class="indexterm" href="samba-bdc.html#id2587890">Features and Benefits</a>, <a class="indexterm" href="InterdomainTrusts.html#id2642166">Creating an NT4 Domain Trust</a></dt><dt>domain user, <a class="indexterm" href="ClientConfig.html#id2599975">Domain Logon Configuration: Windows 9x/Me</a>, <a class="indexterm" href="winbind.html#id2675430">Features and Benefits</a>, <a class="indexterm" href="winbind.html#id2675862">What Winbind Provides</a></dt><dt>domain user accounts, <a class="indexterm" href="NetCommand.html#id2621445">UNIX and Windows Group Management</a></dt><dt>domain user manager, <a class="indexterm" href="passdb.html#id2613105">User Account Management</a></dt><dt>Domain User Manager, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="groupmapping.html#id2619442">Applicable Only to Versions Earlier than 3.0.11</a>, <a class="indexterm" href="PolicyMgmt.html#id2682235">Managing Account/User Policies</a></dt><dt>Domain Users, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="NetCommand.html#id2621847">Mapping Windows Groups to UNIX Groups</a></dt><dt>domain users, <a class="indexterm" href="winbind.html#id2677024">Requirements</a>, <a class="indexterm" href="winbind.html#id2679136">Linux/FreeBSD-Specific PAM Configuration</a>, <a class="indexterm" href="winbind.html#id2679639">Conclusion</a></dt><dt>Domain Users group, <a class="indexterm" href="groupmapping.html#id2620674">Adding Domain Users to the Workstation Power Users Group</a></dt><dt>domain-level, <a class="indexterm" href="domain-member.html#id2593911">Why Is This Better Than security = server?</a></dt><dt>domain-level security, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></dt><dt>domain-wide browse list, <a class="indexterm" href="NetworkBrowsing.html#id2604955">Making Samba the Domain Master</a></dt><dt>DOMAIN&lt;1B&gt;, <a class="indexterm" href="samba-pdc.html#id2587021">Security Mode and Master Browsers</a></dt><dt>DOMAIN&lt;1C&gt;, <a class="indexterm" href="samba-pdc.html#id2586627">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="samba-pdc.html#id2587021">Security Mode and Master Browsers</a></dt><dt>DOMAIN&lt;1D&gt;, <a class="indexterm" href="samba-pdc.html#id2587021">Security Mode and Master Browsers</a></dt><dt>draft, <a class="indexterm" href="CUPS-printing.html#id2660577">The Role of cupsomatic/foomatic</a></dt><dt>Drive Identification, <a class="indexterm" href="AccessControls.html#id2632834">MS Windows NTFS Comparison with UNIX File Systems</a></dt><dt>driver, <a class="indexterm" href="classicalprinting.html#id2644958">Verifying Configuration with testparm</a></dt><dt>driver CDROM, <a class="indexterm" href="classicalprinting.html#id2650065">Identifying Driver Files</a></dt><dt>driver download, <a class="indexterm" href="classicalprinting.html#id2649234">[print$] Stanza Parameters</a></dt><dt>Driver File, <a class="indexterm" href="classicalprinting.html#id2650065">Identifying Driver Files</a></dt><dt>driver files, <a class="indexterm" href="classicalprinting.html#id2650065">Identifying Driver Files</a></dt><dt>Driver Path, <a class="indexterm" href="classicalprinting.html#id2650065">Identifying Driver Files</a></dt><dt>dual-daemon winbindd, <a class="indexterm" href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a></dt><dt>due diligence, <a class="indexterm" href="Backup.html#id2693749">Discussion of Backup Solutions</a></dt><dt>duplex, <a class="indexterm" href="CUPS-printing.html#id2661902">Examples for Filtering Chains</a></dt><dt>duplex printing, <a class="indexterm" href="CUPS-printing.html#id2661902">Examples for Filtering Chains</a></dt><dt>duplicate, <a class="indexterm" href="samba-bdc.html#id2589047">LDAP Configuration Notes</a></dt><dt>duplication of information, <a class="indexterm" href="winbind.html#id2675773">Introduction</a></dt><dt>DVI, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a>, <a class="indexterm" href="CUPS-printing.html#id2659310">Prefilters</a></dt><dt>Dynamic DNS (see DDNS)</dt><dt>Dynamic Host Configuration Protocol (see DHCP)</dt><dt>dynamic link loader, <a class="indexterm" href="winbind.html#id2677263">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a></dt><dt>dynamic registration files, <a class="indexterm" href="DNSDHCP.html#id2714892">Dynamic DNS</a></dt><dt>Dynamic SMB servers, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>dynamically loadable library modules, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt></dl></div><div class="indexdiv"><h3>E</h3><dl><dt>e-Directory, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a>, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a></dt><dt>EAs, <a class="indexterm" href="AccessControls.html#id2633292">File and Directory Access Control</a></dt><dt>economically wise, <a class="indexterm" href="SambaHA.html#id2694331">Features and Benefits</a></dt><dt>eDirectory, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a></dt><dt>editreg, <a class="indexterm" href="PolicyMgmt.html#id2682475">Samba Editreg Toolset</a></dt><dt>efficient authentication, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>election, <a class="indexterm" href="samba-pdc.html#id2587021">Security Mode and Master Browsers</a>, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a>, <a class="indexterm" href="NetworkBrowsing.html#id2604354">Domain Browsing Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></dt><dt>election criteria, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a></dt><dt>election packet, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></dt><dt>election process, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></dt><dt>EMF, <a class="indexterm" href="CUPS-printing.html#id2657342">Windows Drivers, GDI, and EMF</a>, <a class="indexterm" href="CUPS-printing.html#id2662564">From Windows Clients to an NT Print Server</a>, <a class="indexterm" href="CUPS-printing.html#id2662698">Driver Execution on the Server</a></dt><dt>enables clients to print, <a class="indexterm" href="classicalprinting.html#id2644675">Simple Print Configuration</a></dt><dt>enables NetBIOS over TCP/IP, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a></dt><dt>encapsulating, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a></dt><dt>encoding, <a class="indexterm" href="domain-member.html#ads-test-server">Testing Server Setup</a></dt><dt>encryped password, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a></dt><dt>encrypted, <a class="indexterm" href="ServerType.html#id2580765">Features and Benefits</a>, <a class="indexterm" href="ServerType.html#id2582616">Password Checking</a>, <a class="indexterm" href="passdb.html#id2610108">Important Notes About Security</a></dt><dt>encrypted password, <a class="indexterm" href="passdb.html#id2610423">Advantages of Encrypted Passwords</a></dt><dt>encrypted passwords, <a class="indexterm" href="ServerType.html#id2582616">Password Checking</a>, <a class="indexterm" href="passdb.html#id2609320">Features and Benefits</a>, <a class="indexterm" href="passdb.html#passdbtech">Technical Information</a>, <a class="indexterm" href="passdb.html#id2610108">Important Notes About Security</a>, <a class="indexterm" href="passdb.html#id2610423">Advantages of Encrypted Passwords</a>, <a class="indexterm" href="ProfileMgmt.html#id2685102">Profile Migration from Windows NT4/200x Server to Samba</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2700456">Passdb Backends and Authentication</a></dt><dt>encrypted session, <a class="indexterm" href="passdb.html#id2616644">Security and sambaSamAccount</a></dt><dt>encryption, <a class="indexterm" href="ServerType.html#id2582318">Server Security (User Level Security)</a></dt><dt>encryption key, <a class="indexterm" href="domain-member.html#id2592722">Windows 200x/XP Professional Client</a></dt><dt>encryption types, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a>, <a class="indexterm" href="domain-member.html#id2595479">Notes</a></dt><dt>enforcing, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>English, <a class="indexterm" href="unicode.html#id2692552">Japanese Charsets</a>, <a class="indexterm" href="SWAT.html#id2704323">Enabling SWAT Internationalization Support</a></dt><dt>Enhanced MetaFile (see EMF)</dt><dt>enterprise, <a class="indexterm" href="passdb.html#id2614688">smbpasswd: Encrypted Password Database</a></dt><dt>enumdrivers, <a class="indexterm" href="classicalprinting.html#id2650065">Identifying Driver Files</a>, <a class="indexterm" href="CUPS-printing.html#id2666028">A Check of the rpcclient man Page</a></dt><dt>enumerate domain groups, <a class="indexterm" href="winbind.html#id2676237">Microsoft Remote Procedure Calls</a></dt><dt>enumerate domain users, <a class="indexterm" href="winbind.html#id2676237">Microsoft Remote Procedure Calls</a></dt><dt>EnumJobs(), <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>enumprinters, <a class="indexterm" href="CUPS-printing.html#id2666028">A Check of the rpcclient man Page</a></dt><dt>environment variables, <a class="indexterm" href="classicalprinting.html#id2648051">Custom Print Commands</a></dt><dt>EPM (see ESP meta packager)</dt><dt>Epson Stylus, <a class="indexterm" href="CUPS-printing.html#id2661902">Examples for Filtering Chains</a></dt><dt>Epson Stylus inkjet, <a class="indexterm" href="CUPS-printing.html#id2669139">Foomatic Database-Generated PPDs</a></dt><dt>equivalence, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>equivalent rights and privileges, <a class="indexterm" href="rights.html#id2631943">The Administrator Domain SID</a></dt><dt>error message, <a class="indexterm" href="idmapper.html#id2628264">ADS Domains</a>, <a class="indexterm" href="classicalprinting.html#id2650980">Running rpcclient with adddriver</a></dt><dt>error messages, <a class="indexterm" href="diagnosis.html#id2705108">Assumptions</a></dt><dt>errors that can afflict, <a class="indexterm" href="ClientConfig.html#id2600420">Common Errors</a></dt><dt>ESC/P, <a class="indexterm" href="CUPS-printing.html#id2662698">Driver Execution on the Server</a></dt><dt>ESP, <a class="indexterm" href="CUPS-printing.html#id2657878">Ghostscript: The Software RIP for Non-PostScript Printers</a></dt><dd><dl><dt>Ghostscript, <a class="indexterm" href="CUPS-printing.html#id2658281">The CUPS Filtering Architecture</a>, <a class="indexterm" href="CUPS-printing.html#id2661565">cupsomatic/foomatic-rip Versus Native CUPS Printing</a></dt><dt>meta packager, <a class="indexterm" href="CUPS-printing.html#id2663896">CUPS &#8220;PostScript Driver for Windows NT/200x/XP&#8221;</a></dt><dt>Print Pro, <a class="indexterm" href="CUPS-printing.html#id2662330">Sources of CUPS Drivers/PPDs</a>, <a class="indexterm" href="CUPS-printing.html#id2664279">ESP Print Pro PostScript Driver for Windows NT/200x/XP</a></dt></dl></dd><dt>ESP Ghostscript, <a class="indexterm" href="CUPS-printing.html#id2658281">The CUPS Filtering Architecture</a></dt><dt>established, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></dt><dt>ethereal, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a>, <a class="indexterm" href="problems.html#id2707471">Tcpdump</a>, <a class="indexterm" href="problems.html#id2707522">Ethereal</a>, <a class="indexterm" href="problems.html#id2707665">The Windows Network Monitor</a></dt><dt>Ethernet adapters, <a class="indexterm" href="securing-samba.html#id2640578">Using Interface Protection</a></dt><dt>EUC-JP, <a class="indexterm" href="unicode.html#id2692552">Japanese Charsets</a>, <a class="indexterm" href="unicode.html#id2692681">Basic Parameter Setting</a></dt><dt>eucJP-ms locale, <a class="indexterm" href="unicode.html#id2692681">Basic Parameter Setting</a></dt><dt>Event Viewer, <a class="indexterm" href="AdvancedNetworkManagement.html#id2679982">Remote Server Administration</a></dt><dt>Everyone - Full Control, <a class="indexterm" href="AccessControls.html#id2635030">Access Controls on Shares</a></dt><dt>Everyone group, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>EVMS, <a class="indexterm" href="VFS.html#id2674123">shadow_copy</a></dt><dt>examples, <a class="indexterm" href="install.html#id2574356">Example Configuration</a></dt><dt>examples/LDAP, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a></dt><dt>execute, <a class="indexterm" href="AccessControls.html#id2633292">File and Directory Access Control</a></dt><dt>existing LDAP DIT, <a class="indexterm" href="passdb.html#id2611451">Caution Regarding LDAP and Samba</a></dt><dt>expands control abilities, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a></dt><dt>expired password, <a class="indexterm" href="passdb.html#id2613628">Changing User Accounts</a></dt><dt>explicit trust, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a></dt><dt>explicitly set, <a class="indexterm" href="classicalprinting.html#id2645155">Rapid Configuration Validation</a></dt><dt>exploit opportunities, <a class="indexterm" href="PolicyMgmt.html#id2681125">Features and Benefits</a></dt><dt>exploitation, <a class="indexterm" href="securing-samba.html#id2640578">Using Interface Protection</a></dt><dt>exported file system, <a class="indexterm" href="SambaHA.html#id2695329">A Simple Solution</a></dt><dt>exposed, <a class="indexterm" href="securing-samba.html#firewallports">Using a Firewall</a></dt><dt>extd_audit module, <a class="indexterm" href="VFS.html#id2673350">extd_audit</a></dt><dt>Extended Attributes, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a></dt><dt>extended attributes, <a class="indexterm" href="AccessControls.html#id2633704">Protecting Directories and Files from Deletion</a></dt><dt>Extended BSD Printing, <a class="indexterm" href="classicalprinting.html#id2645543">Extended Printing Configuration</a></dt><dt>extended characters, <a class="indexterm" href="unicode.html#id2692250">What Are Charsets and Unicode?</a></dt><dt>extended protocol, <a class="indexterm" href="NetworkBrowsing.html#id2606524">Windows Networking Protocols</a></dt><dt>extended SAM, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a></dt><dt>extra machine, <a class="indexterm" href="cfgsmarts.html#id2697638">Multiple Virtual Server Hosting</a></dt></dl></div><div class="indexdiv"><h3>F</h3><dl><dt>fail, <a class="indexterm" href="SambaHA.html#id2694331">Features and Benefits</a></dt><dt>failed join, <a class="indexterm" href="idmapper.html#id2627976">NT4-Style Domains (Includes Samba Domains)</a>, <a class="indexterm" href="idmapper.html#id2628674">IDMAP_RID with Winbind</a></dt><dt>failed logins, <a class="indexterm" href="passdb.html#acctmgmttools">Account Management Tools</a></dt><dt>failover communication, <a class="indexterm" href="SambaHA.html#id2695410">High-Availability Server Products</a></dt><dt>failover process, <a class="indexterm" href="SambaHA.html#id2695410">High-Availability Server Products</a></dt><dt>failover servers, <a class="indexterm" href="SambaHA.html#id2695329">A Simple Solution</a></dt><dt>fails, <a class="indexterm" href="domain-member.html#id2595873">Adding Machine to Domain Fails</a></dt><dt>failure, <a class="indexterm" href="idmapper.html#id2628264">ADS Domains</a></dt><dt>failure semantics, <a class="indexterm" href="SambaHA.html#id2695272">Required Modifications to Samba</a></dt><dt>fake-permissions module, <a class="indexterm" href="ProfileMgmt.html#id2685453">Mandatory Profiles</a></dt><dt>fake_permissions, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a></dt><dt>fake_perms, <a class="indexterm" href="VFS.html#fakeperms">fake_perms</a>, <a class="indexterm" href="ProfileMgmt.html#id2685453">Mandatory Profiles</a></dt><dt>fdisk, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>Federated Identity Management (see FIM)</dt><dt>federated organizations, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></dt><dt>federated-identity, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></dt><dt>Fiber Channel, <a class="indexterm" href="SambaHA.html#id2695410">High-Availability Server Products</a></dt><dt>fickle, <a class="indexterm" href="NetworkBrowsing.html#id2601603">Features and Benefits</a></dt><dt>fid, <a class="indexterm" href="SambaHA.html#id2694829">Demultiplexing SMB Requests</a></dt><dt>file access permissions, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a></dt><dt>File Naming Conventions, <a class="indexterm" href="AccessControls.html#id2632834">MS Windows NTFS Comparison with UNIX File Systems</a></dt><dt>file ownership, <a class="indexterm" href="domain-member.html#id2591202">Features and Benefits</a></dt><dt>file serving, <a class="indexterm" href="classicalprinting.html#id2644133">Features and Benefits</a></dt><dt>File System, <a class="indexterm" href="AccessControls.html#id2632834">MS Windows NTFS Comparison with UNIX File Systems</a></dt><dd><dl><dt>case sensitivity, <a class="indexterm" href="AccessControls.html#id2632834">MS Windows NTFS Comparison with UNIX File Systems</a></dt><dt>feature comparison, <a class="indexterm" href="AccessControls.html#id2632834">MS Windows NTFS Comparison with UNIX File Systems</a></dt><dt>UNIX, <a class="indexterm" href="AccessControls.html#id2632834">MS Windows NTFS Comparison with UNIX File Systems</a></dt><dt>Windows, <a class="indexterm" href="AccessControls.html#id2632834">MS Windows NTFS Comparison with UNIX File Systems</a></dt></dl></dd><dt>file system capabilities, <a class="indexterm" href="AccessControls.html#id2633704">Protecting Directories and Files from Deletion</a></dt><dt>FILE:, <a class="indexterm" href="classicalprinting.html#id2654194">Samba and Printer Ports</a></dt><dt>filemanager, <a class="indexterm" href="NetworkBrowsing.html#id2607167">Problem Resolution</a></dt><dt>filename mangling, <a class="indexterm" href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a></dt><dt>filter, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></dt><dt>Filter Oplock, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>FilterLimit, <a class="indexterm" href="CUPS-printing.html#id2660826">mime.convs</a></dt><dt>filters, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></dt><dt>FIM, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a>, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a></dt><dt>firewall, <a class="indexterm" href="securing-samba.html#id2640103">Introduction</a>, <a class="indexterm" href="securing-samba.html#id2640578">Using Interface Protection</a>, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>firewall active, <a class="indexterm" href="securing-samba.html#firewallports">Using a Firewall</a></dt><dt>firewall setups, <a class="indexterm" href="securing-samba.html#firewallports">Using a Firewall</a></dt><dt>fixed IP address, <a class="indexterm" href="ClientConfig.html#id2597752">MS Windows XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id2598395">MS Windows 2000</a></dt><dt>fixed IP addresses, <a class="indexterm" href="ClientConfig.html#id2597677">TCP/IP Configuration</a></dt><dt>flush local locks, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>flush name cache, <a class="indexterm" href="NetworkBrowsing.html#id2608457">Flushing the Samba NetBIOS Name Cache</a></dt><dt>foomatic, <a class="indexterm" href="CUPS-printing.html#id2658122">Using Windows-Formatted Vendor PPDs</a>, <a class="indexterm" href="CUPS-printing.html#id2658281">The CUPS Filtering Architecture</a>, <a class="indexterm" href="CUPS-printing.html#id2660577">The Role of cupsomatic/foomatic</a>, <a class="indexterm" href="CUPS-printing.html#id2661565">cupsomatic/foomatic-rip Versus Native CUPS Printing</a>, <a class="indexterm" href="CUPS-printing.html#id2668444">foomatic-rip and Foomatic Explained</a>, <a class="indexterm" href="CUPS-printing.html#id2668593">Foomatic's Strange Name</a></dt><dt>Foomatic database, <a class="indexterm" href="CUPS-printing.html#id2669139">Foomatic Database-Generated PPDs</a></dt><dt>Foomatic Printer, <a class="indexterm" href="CUPS-printing.html#id2660577">The Role of cupsomatic/foomatic</a></dt><dt>Foomatic tutorial, <a class="indexterm" href="CUPS-printing.html#id2668823">The Grand Unification Achieved</a></dt><dt>foomatic-rip, <a class="indexterm" href="CUPS-printing.html#id2658281">The CUPS Filtering Architecture</a>, <a class="indexterm" href="CUPS-printing.html#id2660577">The Role of cupsomatic/foomatic</a>, <a class="indexterm" href="CUPS-printing.html#id2661565">cupsomatic/foomatic-rip Versus Native CUPS Printing</a>, <a class="indexterm" href="CUPS-printing.html#id2668269">CUPS Print Drivers from Linuxprinting.org</a>, <a class="indexterm" href="CUPS-printing.html#id2668444">foomatic-rip and Foomatic Explained</a>, <a class="indexterm" href="CUPS-printing.html#id2668823">The Grand Unification Achieved</a></dt><dt>Foomatic/cupsomatic, <a class="indexterm" href="CUPS-printing.html#id2661565">cupsomatic/foomatic-rip Versus Native CUPS Printing</a></dt><dt>force an election, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></dt><dt>force election, <a class="indexterm" href="NetworkBrowsing.html#id2604955">Making Samba the Domain Master</a></dt><dt>forced synchronization, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a></dt><dt>foreign domain, <a class="indexterm" href="passdb.html#id2610628">Mapping User Identifiers between MS Windows and UNIX</a>, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>foreign SID, <a class="indexterm" href="winbind.html#id2676061">Handling of Foreign SIDs</a></dt><dt>foreign user, <a class="indexterm" href="winbind.html#id2676061">Handling of Foreign SIDs</a></dt><dt>FQDN, <a class="indexterm" href="ch-ldap-tls.html#s1-intro-ldap-tls">Introduction</a></dt><dt>framing error, <a class="indexterm" href="speed.html#id2712852">Samba Performance Problem Due to Changing Linux Kernel</a></dt><dt>free support, <a class="indexterm" href="ch46.html">Samba Support</a>, <a class="indexterm" href="ch46.html#id2714245">Free Support</a></dt><dt>FreeBSD, <a class="indexterm" href="samba-pdc.html#id2587300">&#8220;$&#8221; Cannot Be Included in Machine Name</a>, <a class="indexterm" href="unicode.html#id2692681">Basic Parameter Setting</a></dt><dt>freezing, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>French, <a class="indexterm" href="SWAT.html#id2704323">Enabling SWAT Internationalization Support</a></dt><dt>front-end virtual server, <a class="indexterm" href="SambaHA.html#id2694735">The Front-End Challenge</a>, <a class="indexterm" href="SambaHA.html#id2694829">Demultiplexing SMB Requests</a></dt><dt>frustrating experience, <a class="indexterm" href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a></dt><dt>FTP, <a class="indexterm" href="passdb.html#id2610564">Advantages of Non-Encrypted Passwords</a></dt><dt>ftp, <a class="indexterm" href="Backup.html#id2694017">Rsync</a>, <a class="indexterm" href="compiling.html#id2709528">Accessing the Samba Sources via rsync and ftp</a></dt><dt>ftp access, <a class="indexterm" href="winbind.html#id2679136">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>ftp service, <a class="indexterm" href="winbind.html#id2679136">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>ftp services, <a class="indexterm" href="winbind.html#id2679136">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>ftpd, <a class="indexterm" href="pam.html#id2688266">Anatomy of /etc/pam.d Entries</a></dt><dt>full rights, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>functional components, <a class="indexterm" href="bugreport.html#id2708660">Debugging-Specific Operations</a></dt><dt>functionality, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt></dl></div><div class="indexdiv"><h3>G</h3><dl><dt>gateway address, <a class="indexterm" href="ClientConfig.html#id2597752">MS Windows XP Professional</a></dt><dt>gcc, <a class="indexterm" href="problems.html#id2707216">Debugging with Samba Itself</a>, <a class="indexterm" href="Portability.html#id2710853">HPUX</a></dt><dt>gdb, <a class="indexterm" href="problems.html#id2707216">Debugging with Samba Itself</a>, <a class="indexterm" href="bugreport.html#id2708862">Internal Errors</a>, <a class="indexterm" href="bugreport.html#id2708995">Attaching to a Running Process</a></dt><dt>GDI, <a class="indexterm" href="CUPS-printing.html#gdipost">GDI on Windows, PostScript on UNIX</a>, <a class="indexterm" href="CUPS-printing.html#id2657342">Windows Drivers, GDI, and EMF</a>, <a class="indexterm" href="CUPS-printing.html#id2662564">From Windows Clients to an NT Print Server</a>, <a class="indexterm" href="CUPS-printing.html#id2662698">Driver Execution on the Server</a></dt><dt>general security service application programming interface (see GSSAPI)</dt><dt>generic PostScript, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></dt><dt>generic raster, <a class="indexterm" href="CUPS-printing.html#id2659665">pstoraster</a></dt><dt>generic raster format, <a class="indexterm" href="CUPS-printing.html#id2658281">The CUPS Filtering Architecture</a></dt><dt>genlogon.pl, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680714">Network Logon Script Magic</a></dt><dt>Gentoo, <a class="indexterm" href="speed.html#id2712852">Samba Performance Problem Due to Changing Linux Kernel</a></dt><dt>Germany, <a class="indexterm" href="SambaHA.html#id2694452">Technical Discussion</a></dt><dt>get, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>getdriver, <a class="indexterm" href="classicalprinting.html#id2650065">Identifying Driver Files</a>, <a class="indexterm" href="classicalprinting.html#id2650617">Installing Driver Files into [print$]</a></dt><dt>getdriverdir, <a class="indexterm" href="CUPS-printing.html#id2666028">A Check of the rpcclient man Page</a></dt><dt>getent, <a class="indexterm" href="NetCommand.html#id2621645">Adding or Creating a New Group</a>, <a class="indexterm" href="idmapper.html#id2628674">IDMAP_RID with Winbind</a>, <a class="indexterm" href="winbind.html#id2678214">Starting and Testing the winbindd Daemon</a></dt><dt>getent group demo, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>gethostbyname() function call, <a class="indexterm" href="NetworkBrowsing.html#id2606674">Name Resolution Order</a></dt><dt>getpwnam, <a class="indexterm" href="passdb.html#id2615414">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a></dt><dt>getpwnam() call, <a class="indexterm" href="upgrading-to-3.0.html#id2700359">Changes in Behavior</a></dt><dt>GetSID.exe, <a class="indexterm" href="ProfileMgmt.html#id2685388">Get SID</a></dt><dt>GhostScript, <a class="indexterm" href="CUPS-printing.html#post-and-ghost">PostScript and Ghostscript</a>, <a class="indexterm" href="CUPS-printing.html#id2657878">Ghostscript: The Software RIP for Non-PostScript Printers</a></dt><dd><dl><dt>(see also PostScript)</dt></dl></dd><dt>Ghostscript, <a class="indexterm" href="CUPS-printing.html#id2658281">The CUPS Filtering Architecture</a>, <a class="indexterm" href="CUPS-printing.html#id2661282">PostScript Printer Descriptions for Non-PostScript Printers</a></dt><dd><dl><dt>ESP (see ESP
-	GhostScript)</dt></dl></dd><dt>GID, <a class="indexterm" href="samba-bdc.html#id2590243">Example Configuration</a>, <a class="indexterm" href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id2593911">Why Is This Better Than security = server?</a>, <a class="indexterm" href="domain-member.html#id2595551">Sharing User ID Mappings between Samba Domain Members</a>, <a class="indexterm" href="ChangeNotes.html#id2600728">User and Group Changes</a>, <a class="indexterm" href="ChangeNotes.html#id2601160">Passdb Changes</a>, <a class="indexterm" href="ChangeNotes.html#id2601219">Group Mapping Changes in Samba-3.0.23</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="groupmapping.html#id2617939">Features and Benefits</a>, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a>, <a class="indexterm" href="NetCommand.html#id2621847">Mapping Windows Groups to UNIX Groups</a>, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id2627583">Primary Domain Controller</a>, <a class="indexterm" href="winbind.html#id2675430">Features and Benefits</a>, <a class="indexterm" href="winbind.html#id2676061">Handling of Foreign SIDs</a>, <a class="indexterm" href="winbind.html#id2678214">Starting and Testing the winbindd Daemon</a></dt><dt>GID numbers, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a></dt><dt>GID range, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a></dt><dt>GIF, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></dt><dt>global print command, <a class="indexterm" href="classicalprinting.html#id2648051">Custom Print Commands</a></dt><dt>global right, <a class="indexterm" href="rights.html#id2631138">Description of Privileges</a></dt><dt>global section, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>Global support, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>global-level, <a class="indexterm" href="classicalprinting.html#id2644574">Printing-Related Configuration Parameters</a></dt><dt>GNOME, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a></dt><dt>GNU Ghostscript, <a class="indexterm" href="CUPS-printing.html#id2658281">The CUPS Filtering Architecture</a>, <a class="indexterm" href="CUPS-printing.html#id2659665">pstoraster</a></dt><dt>GNU GPL, <a class="indexterm" href="Backup.html#id2693846">BackupPC</a></dt><dt>GNU tar, <a class="indexterm" href="Backup.html#id2694187">Amanda</a></dt><dt>GNU/Linux, <a class="indexterm" href="VFS.html#id2672690">Discussion</a></dt><dt>GPG, <a class="indexterm" href="compiling.html#id2709603">Verifying Samba's PGP Signature</a></dt><dt>GPL, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a></dt><dt>gpolmig.exe, <a class="indexterm" href="PolicyMgmt.html#id2681990">Administration of Windows 200x/XP Policies</a></dt><dt>GPOs, <a class="indexterm" href="PolicyMgmt.html#id2681125">Features and Benefits</a>, <a class="indexterm" href="PolicyMgmt.html#id2681787">MS Windows 200x/XP Professional Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id2681990">Administration of Windows 200x/XP Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id2682235">Managing Account/User Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id2682662">System Startup and Logon Processing Overview</a>, <a class="indexterm" href="ProfileMgmt.html#id2686408">MS Windows 200x/XP</a></dt><dt>grace time, <a class="indexterm" href="passdb.html#id2613628">Changing User Accounts</a></dt><dt>grant rights, <a class="indexterm" href="rights.html#id2630793">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>graphical objects, <a class="indexterm" href="CUPS-printing.html#id2657520">UNIX Printfile Conversion and GUI Basics</a></dt><dt>graphically illustrated client configuration, <a class="indexterm" href="ClientConfig.html#id2597573">Features and Benefits</a></dt><dt>grayscale, <a class="indexterm" href="CUPS-printing.html#id2660577">The Role of cupsomatic/foomatic</a></dt><dt>greater scalability, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a></dt><dt>greatest mistake, <a class="indexterm" href="StandAloneServer.html#id2597506">Common Errors</a></dt><dt>grep, <a class="indexterm" href="winbind.html#id2677263">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a></dt><dt>group, <a class="indexterm" href="samba-bdc.html#id2590243">Example Configuration</a>, <a class="indexterm" href="ChangeNotes.html#id2600728">User and Group Changes</a>, <a class="indexterm" href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="AccessControls.html#id2633292">File and Directory Access Control</a></dt><dd><dl><dt>account, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a></dt><dt>mapping, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a></dt></dl></dd><dt>group account, <a class="indexterm" href="groupmapping.html#id2619324">Important Administrative Information</a>, <a class="indexterm" href="idmapper.html#id2627818">Backup Domain Controller</a></dt><dt>group accounts, <a class="indexterm" href="ClientConfig.html#id2599975">Domain Logon Configuration: Windows 9x/Me</a>, <a class="indexterm" href="passdb.html#id2611451">Caution Regarding LDAP and Samba</a>, <a class="indexterm" href="groupmapping.html#id2617939">Features and Benefits</a>, <a class="indexterm" href="groupmapping.html#id2618690">Warning: User Private Group Problems</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a></dt><dt>group management, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a>, <a class="indexterm" href="NetCommand.html#id2621445">UNIX and Windows Group Management</a></dt><dt>group mapping, <a class="indexterm" href="ChangeNotes.html#id2600728">User and Group Changes</a>, <a class="indexterm" href="groupmapping.html">Group Mapping: MS Windows and UNIX</a></dt><dt>group mappings, <a class="indexterm" href="ChangeNotes.html#id2601219">Group Mapping Changes in Samba-3.0.23</a>, <a class="indexterm" href="groupmapping.html#id2617939">Features and Benefits</a></dt><dt>group membership, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>group ownership, <a class="indexterm" href="winbind.html#id2675430">Features and Benefits</a></dt><dt>group permissions, <a class="indexterm" href="ChangeNotes.html#id2600728">User and Group Changes</a>, <a class="indexterm" href="NT4Migration.html#id2702022">Server Share and Directory Layout</a></dt><dt>Group Policies, <a class="indexterm" href="PolicyMgmt.html#id2681125">Features and Benefits</a></dt><dt>group policies, <a class="indexterm" href="PolicyMgmt.html#id2681125">Features and Benefits</a></dt><dt>group policy, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a></dt><dt>Group Policy, <a class="indexterm" href="PolicyMgmt.html#id2681428">Windows 9x/ME Policies</a></dt><dt>Group Policy Container (see GPC)</dt><dt>Group Policy Editor, <a class="indexterm" href="PolicyMgmt.html#id2681428">Windows 9x/ME Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id2682557">Windows NT4/200x</a>, <a class="indexterm" href="NT4Migration.html#id2702901">Samba-3 Implementation Choices</a></dt><dt>Group Policy Objects, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a> (see GPO)</dt><dt>group policy objects (see GPOs)</dt><dt>Group Policy Template (see GPT)</dt><dt>group privileges, <a class="indexterm" href="groupmapping.html#id2618354">Discussion</a></dt><dt>group profiles, <a class="indexterm" href="ProfileMgmt.html#id2685594">Creating and Managing Group Profiles</a></dt><dt>group SID, <a class="indexterm" href="NetCommand.html#id2624351">Managing Security Identifiers (SIDS)</a></dt><dt>groupadd, <a class="indexterm" href="groupmapping.html#id2617939">Features and Benefits</a>, <a class="indexterm" href="groupmapping.html#id2620275">Sample smb.conf Add Group Script</a>, <a class="indexterm" href="groupmapping.html#id2620587">Adding Groups Fails</a></dt><dt>groupadd limitations, <a class="indexterm" href="groupmapping.html#id2620275">Sample smb.conf Add Group Script</a></dt><dt>groupdel, <a class="indexterm" href="groupmapping.html#id2617939">Features and Benefits</a></dt><dt>groupmap, <a class="indexterm" href="groupmapping.html">Group Mapping: MS Windows and UNIX</a></dt><dt>groupmod, <a class="indexterm" href="groupmapping.html#id2617939">Features and Benefits</a></dt><dt>grouppol.inf, <a class="indexterm" href="PolicyMgmt.html#id2681428">Windows 9x/ME Policies</a></dt><dt>groups, <a class="indexterm" href="NetCommand.html#id2621445">UNIX and Windows Group Management</a>, <a class="indexterm" href="PolicyMgmt.html#id2681125">Features and Benefits</a></dt><dd><dl><dt>domain, <a class="indexterm" href="groupmapping.html#id2618354">Discussion</a></dt><dt>mapping, <a class="indexterm" href="groupmapping.html">Group Mapping: MS Windows and UNIX</a></dt><dt>nested, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt></dl></dd><dt>groups of users, <a class="indexterm" href="NetCommand.html#id2623379">Administering User Rights and Privileges</a></dt><dt>growing, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>GSSAPI, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></dt><dt>gtklp, <a class="indexterm" href="CUPS-printing.html#id2669139">Foomatic Database-Generated PPDs</a></dt><dt>guest, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a>, <a class="indexterm" href="StandAloneServer.html#RefDocServer">Reference Documentation Server</a></dt><dt>guest account, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="NetworkBrowsing.html#id2607167">Problem Resolution</a>, <a class="indexterm" href="classicalprinting.html#id2648051">Custom Print Commands</a>, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>GUI, <a class="indexterm" href="CUPS-printing.html#id2655341">Overview</a></dt><dt>Gutenprint, <a class="indexterm" href="CUPS-printing.html#id2660019">rasterto [printers specific]</a>, <a class="indexterm" href="CUPS-printing.html#id2668951">Driver Development Outside</a></dt></dl></div><div class="indexdiv"><h3>H</h3><dl><dt>h-node, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a></dt><dt>harvesting password hashes, <a class="indexterm" href="passdb.html#id2616644">Security and sambaSamAccount</a></dt><dt>hashed password equivalent, <a class="indexterm" href="passdb.html#id2610108">Important Notes About Security</a></dt><dt>headers files, <a class="indexterm" href="domain-member.html#id2595186">Possible Errors</a></dt><dt>Heimdal, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a>, <a class="indexterm" href="idmapper.html#id2628264">ADS Domains</a>, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>Heimdal kerberos, <a class="indexterm" href="idmapper.html#id2628264">ADS Domains</a>, <a class="indexterm" href="idmapper.html#id2629264">IDMAP Storage in LDAP Using Winbind</a></dt><dt>help, <a class="indexterm" href="ch46.html#id2714245">Free Support</a></dt><dt>help command, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>heterogeneous computing, <a class="indexterm" href="winbind.html#id2675430">Features and Benefits</a></dt><dt>HEX, <a class="indexterm" href="unicode.html#id2692552">Japanese Charsets</a></dt><dt>hi-res photo, <a class="indexterm" href="CUPS-printing.html#id2660577">The Role of cupsomatic/foomatic</a></dt><dt>high availability, <a class="indexterm" href="SambaHA.html#id2694331">Features and Benefits</a></dt><dt>high order ports, <a class="indexterm" href="securing-samba.html#firewallports">Using a Firewall</a></dt><dt>high-availability, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>high-availability services, <a class="indexterm" href="SambaHA.html#id2695410">High-Availability Server Products</a></dt><dt>high-speed server interconnect, <a class="indexterm" href="SambaHA.html#id2695329">A Simple Solution</a></dt><dt>higher availability, <a class="indexterm" href="msdfs.html#id2643489">Features and Benefits</a></dt><dt>HKEY_CURRENT_USER, <a class="indexterm" href="ProfileMgmt.html#id2685846">MS Windows NT4 Workstation</a></dt><dt>HKEY_LOCAL_MACHINE, <a class="indexterm" href="PolicyMgmt.html#id2681747">Registry Spoiling</a></dt><dt>holy grail, <a class="indexterm" href="winbind.html#id2675430">Features and Benefits</a></dt><dt>home directories, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a>, <a class="indexterm" href="winbind.html#id2678214">Starting and Testing the winbindd Daemon</a></dt><dt>home directory, <a class="indexterm" href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="passdb.html#id2614688">smbpasswd: Encrypted Password Database</a></dt><dt>home directory template, <a class="indexterm" href="winbind.html#id2679136">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>home drive, <a class="indexterm" href="samba-bdc.html#id2588796">Example PDC Configuration</a></dt><dt>host multiple servers, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></dt><dt>host security, <a class="indexterm" href="securing-samba.html#id2640202">Features and Benefits</a></dt><dt>host-based protection, <a class="indexterm" href="securing-samba.html#id2640202">Features and Benefits</a></dt><dt>hostname, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a></dt><dt>hosts allow, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>hosts deny, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>house-keeping, <a class="indexterm" href="rights.html#id2631138">Description of Privileges</a></dt><dt>HOWTO documents, <a class="indexterm" href="passdb.html#id2611451">Caution Regarding LDAP and Samba</a></dt><dt>HP JetDirect, <a class="indexterm" href="CUPS-printing.html#id2661902">Examples for Filtering Chains</a></dt><dt>HP Photosmart, <a class="indexterm" href="CUPS-printing.html#id2669139">Foomatic Database-Generated PPDs</a></dt><dt>HP-GL, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></dt><dt>HP-GL., <a class="indexterm" href="CUPS-printing.html#id2659310">Prefilters</a></dt><dt>hpgltops, <a class="indexterm" href="CUPS-printing.html#id2658945">MIME Type Conversion Rules</a></dt><dt>HPIJS, <a class="indexterm" href="CUPS-printing.html#id2668951">Driver Development Outside</a></dt><dt>HPUX, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>http, <a class="indexterm" href="Backup.html#id2694017">Rsync</a></dt><dt>hybrid, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a></dt><dt>Hybrid node, <a class="indexterm" href="NetworkBrowsing.html#id2606281">Static WINS Entries</a></dt></dl></div><div class="indexdiv"><h3>I</h3><dl><dt>IANA, <a class="indexterm" href="CUPS-printing.html#id2659665">pstoraster</a></dt><dt>ID mapping, <a class="indexterm" href="samba-bdc.html#id2590243">Example Configuration</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a></dt><dt>ID mapping database, <a class="indexterm" href="winbind.html#id2676758">User and Group ID Allocation</a></dt><dt>ID range, <a class="indexterm" href="groupmapping.html#id2617939">Features and Benefits</a></dt><dt>IDEALX, <a class="indexterm" href="passdb.html#id2615111">ldapsam</a></dt><dt>Identification, <a class="indexterm" href="ClientConfig.html#id2599975">Domain Logon Configuration: Windows 9x/Me</a></dt><dt>identify, <a class="indexterm" href="idmapper.html#id2628264">ADS Domains</a></dt><dt>identity, <a class="indexterm" href="idmapper.html#id2626560">Standalone Samba Server</a></dt><dt>identity information, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></dt><dt>identity management, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a>, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a></dt><dd><dl><dt>centralized, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></dt></dl></dd><dt>identity resolution, <a class="indexterm" href="winbind.html#id2675430">Features and Benefits</a></dt><dt>IDMAP, <a class="indexterm" href="ChangeNotes.html#id2601219">Group Mapping Changes in Samba-3.0.23</a>, <a class="indexterm" href="groupmapping.html#id2617939">Features and Benefits</a>, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a>, <a class="indexterm" href="idmapper.html#id2626560">Standalone Samba Server</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id2628674">IDMAP_RID with Winbind</a></dt><dt>idmap, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a></dt><dt>idmap backend, <a class="indexterm" href="samba-bdc.html#id2590243">Example Configuration</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="winbind.html#id2675430">Features and Benefits</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2701208">IdMap LDAP Support</a></dt><dt>IDMAP backend, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a></dt><dt>idmap gid, <a class="indexterm" href="passdb.html#id2610628">Mapping User Identifiers between MS Windows and UNIX</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id2628674">IDMAP_RID with Winbind</a>, <a class="indexterm" href="winbind.html#id2675430">Features and Benefits</a></dt><dt>idmap GID, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a></dt><dt>IDMAP infrastructure, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a></dt><dt>idmap uid, <a class="indexterm" href="passdb.html#id2610628">Mapping User Identifiers between MS Windows and UNIX</a>, <a class="indexterm" href="groupmapping.html#id2617939">Features and Benefits</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id2628674">IDMAP_RID with Winbind</a>, <a class="indexterm" href="winbind.html#id2675430">Features and Benefits</a></dt><dt>idmap UID, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a></dt><dt>idmap_ad, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a></dt><dt>idmap_ldap module, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a></dt><dt>idmap_rid, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id2628674">IDMAP_RID with Winbind</a></dt><dt>IETF, <a class="indexterm" href="CUPS-printing.html#id2655341">Overview</a></dt><dt>ifconfig, <a class="indexterm" href="compiling.html#id2710248">Starting from inetd.conf</a>, <a class="indexterm" href="speed.html#id2712852">Samba Performance Problem Due to Changing Linux Kernel</a></dt><dt>ignore connection, <a class="indexterm" href="securing-samba.html#id2640578">Using Interface Protection</a></dt><dt>imagetoraster, <a class="indexterm" href="CUPS-printing.html#id2659934">imagetops and imagetoraster</a></dt><dt>immutible, <a class="indexterm" href="AccessControls.html#id2633704">Protecting Directories and Files from Deletion</a></dt><dt>impersonate, <a class="indexterm" href="passdb.html#id2616644">Security and sambaSamAccount</a></dt><dt>implementing oplocks, <a class="indexterm" href="locking.html#id2638829">Advanced Samba Oplocks Parameters</a></dt><dt>Implicit Classes, <a class="indexterm" href="CUPS-printing.html#id2672342">Print Queue Called &#8220;lp&#8221; Mishandles Print Jobs</a></dt><dt>important announcements, <a class="indexterm" href="securing-samba.html#id2641132">Upgrading Samba</a></dt><dt>Imprints, <a class="indexterm" href="classicalprinting.html#id2654341">The Imprints Toolset</a></dt><dt>imprints, <a class="indexterm" href="CUPS-printing.html#id2657029">Driver Upload Methods</a></dt><dt>include, <a class="indexterm" href="cfgsmarts.html">Advanced Configuration Techniques</a></dt><dt>independent, <a class="indexterm" href="StandAloneServer.html#id2596329">Background</a>, <a class="indexterm" href="cfgsmarts.html#id2696226">Multiple Server Hosting</a></dt><dt>individual domain user, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>individual section, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>inetd, <a class="indexterm" href="SWAT.html#id2703534">Validate SWAT Installation</a>, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a>, <a class="indexterm" href="compiling.html#startingSamba">Starting the smbd nmbd and winbindd</a>, <a class="indexterm" href="compiling.html#id2710248">Starting from inetd.conf</a></dt><dt>inetd.conf, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>inetorgperson.schema, <a class="indexterm" href="passdb.html#id2615649">OpenLDAP Configuration</a></dt><dt>inf file, <a class="indexterm" href="classicalprinting.html#id2650065">Identifying Driver Files</a></dt><dt>infrastructure, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a>, <a class="indexterm" href="winbind.html#id2676016">Target Uses</a></dt><dt>inheritance, <a class="indexterm" href="AccessControls.html#id2633704">Protecting Directories and Files from Deletion</a></dt><dt>inherits rights, <a class="indexterm" href="groupmapping.html#id2618354">Discussion</a></dt><dt>initdb.ldif, <a class="indexterm" href="FastStart.html#id2579551">The Primary Domain Controller</a></dt><dt>initGroups.sh, <a class="indexterm" href="FastStart.html#id2578515">Example: Engineering Office</a>, <a class="indexterm" href="groupmapping.html#id2620447">Script to Configure Group Mapping</a>, <a class="indexterm" href="NT4Migration.html#id2702346">Steps in Migration Process</a></dt><dt>inktype, <a class="indexterm" href="CUPS-printing.html#id2660577">The Role of cupsomatic/foomatic</a></dt><dt>insecure, <a class="indexterm" href="StandAloneServer.html#id2596235">Features and Benefits</a>, <a class="indexterm" href="securing-samba.html#id2640364">Using Host-Based Protection</a></dt><dt>inspire simplicity, <a class="indexterm" href="StandAloneServer.html#id2596521">Example Configuration</a></dt><dt>inspired structure, <a class="indexterm" href="SambaHA.html#id2694452">Technical Discussion</a></dt><dt>install drivers, <a class="indexterm" href="classicalprinting.html#id2644133">Features and Benefits</a>, <a class="indexterm" href="classicalprinting.html#id2648726">Point'n'Print Client Drivers on Samba Servers</a></dt><dt>interactive help, <a class="indexterm" href="ch46.html#id2714245">Free Support</a></dt><dt>interdomain</dt><dd><dl><dt>trust</dt><dd><dl><dt>account, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a></dt></dl></dd><dt>trustrs, <a class="indexterm" href="ServerType.html#id2580765">Features and Benefits</a></dt></dl></dd><dt>interdomain connection, <a class="indexterm" href="InterdomainTrusts.html#id2642897">Samba as the Trusting Domain</a></dt><dt>interdomain trust, <a class="indexterm" href="InterdomainTrusts.html#id2642557">Configuring Samba NT-Style Domain Trusts</a>, <a class="indexterm" href="InterdomainTrusts.html#id2643094">NT4-Style Domain Trusts with Windows 2000</a></dt><dt>interdomain trust accounts, <a class="indexterm" href="passdb.html">Account Information Databases</a>, <a class="indexterm" href="passdb.html#id2611451">Caution Regarding LDAP and Samba</a></dt><dt>interdomain trusts, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a>, <a class="indexterm" href="InterdomainTrusts.html#id2641780">Features and Benefits</a></dt><dt>Interdomain Trusts, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a></dt><dd><dl><dt>Completing, <a class="indexterm" href="InterdomainTrusts.html#id2642263">Completing an NT4 Domain Trust</a></dt><dt>creating, <a class="indexterm" href="InterdomainTrusts.html#id2642130">Native MS Windows NT4 Trusts Configuration</a></dt><dt>Facilities, <a class="indexterm" href="InterdomainTrusts.html#id2642348">Interdomain Trust Facilities</a></dt></dl></dd><dt>interface, <a class="indexterm" href="ClientConfig.html#id2597752">MS Windows XP Professional</a></dt><dt>interface scripts, <a class="indexterm" href="passdb.html#id2613105">User Account Management</a></dt><dt>interface-based exclusion, <a class="indexterm" href="securing-samba.html#id2640202">Features and Benefits</a></dt><dt>interfaces, <a class="indexterm" href="securing-samba.html#id2640578">Using Interface Protection</a>, <a class="indexterm" href="cfgsmarts.html#id2696226">Multiple Server Hosting</a></dt><dt>intermediate information, <a class="indexterm" href="passdb.html#id2611451">Caution Regarding LDAP and Samba</a></dt><dt>intermediate tools, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a></dt><dt>internal ordering, <a class="indexterm" href="SWAT.html#id2703390">Features and Benefits</a></dt><dt>internationalization support, <a class="indexterm" href="SWAT.html#id2703514">Guidelines and Technical Tips</a></dt><dt>Internet, <a class="indexterm" href="securing-samba.html#id2640364">Using Host-Based Protection</a>, <a class="indexterm" href="securing-samba.html#id2640578">Using Interface Protection</a></dt><dt>Internet Engineering Task Force (see IETF)</dt><dt>Internet Printing Protocol (see IPP)</dt><dt>Internet Protocol TCP/IP, <a class="indexterm" href="ClientConfig.html#id2598942">MS Windows Me</a></dt><dt>Internetworking Packet Exchange (see IPX)</dt><dt>internetworking super daemon, <a class="indexterm" href="SWAT.html#id2703390">Features and Benefits</a></dt><dt>interoperability, <a class="indexterm" href="ServerType.html#id2580765">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a>, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a>, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a>, <a class="indexterm" href="winbind.html#id2675430">Features and Benefits</a>, <a class="indexterm" href="SambaHA.html#id2695062">Restrictive Constraints on Distributed File Systems</a></dt><dt>intolerance, <a class="indexterm" href="SambaHA.html#id2694331">Features and Benefits</a></dt><dt>invalid shell, <a class="indexterm" href="ServerType.html#id2581855">Example Configuration</a></dt><dt>invalid users, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>IP address, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>IP address automatically, <a class="indexterm" href="ClientConfig.html#id2597752">MS Windows XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id2598395">MS Windows 2000</a></dt><dt>IP addresses, <a class="indexterm" href="integrate-ms-networks.html#id2690637">/etc/hosts</a></dt><dt>IP aliases, <a class="indexterm" href="ClientConfig.html#id2597752">MS Windows XP Professional</a></dt><dt>IPC$, <a class="indexterm" href="samba-pdc.html#id2586627">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="NetworkBrowsing.html#id2607167">Problem Resolution</a>, <a class="indexterm" href="securing-samba.html#id2640934">Using IPC$ Share-Based Denials </a></dt><dt>IPC$ connections, <a class="indexterm" href="SambaHA.html#id2694735">The Front-End Challenge</a></dt><dt>ipchains, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>ipconfig, <a class="indexterm" href="NetworkBrowsing.html#id2602859">TCP/IP without NetBIOS</a></dt><dt>iPlanet, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a></dt><dt>IPP, <a class="indexterm" href="CUPS-printing.html#id2665190">Understanding cupsaddsmb</a></dt><dt>IPP client, <a class="indexterm" href="CUPS-printing.html#id2671743">Administrator Cannot Install Printers for All Local Users</a></dt><dt>iptables, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>IPX, <a class="indexterm" href="NetworkBrowsing.html#id2606524">Windows Networking Protocols</a></dt><dt>IRC, <a class="indexterm" href="ch46.html#id2714245">Free Support</a></dt><dt>IRIX, <a class="indexterm" href="VFS.html#id2672690">Discussion</a>, <a class="indexterm" href="unicode.html#id2692681">Basic Parameter Setting</a></dt><dt>ISC</dt><dd><dl><dt>DHCP, <a class="indexterm" href="DNSDHCP.html#id2714623">Features and Benefits</a></dt><dt>DNS, <a class="indexterm" href="DNSDHCP.html#id2714623">Features and Benefits</a></dt></dl></dd><dt>ISC DHCP server, <a class="indexterm" href="ClientConfig.html#id2597752">MS Windows XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id2598942">MS Windows Me</a></dt><dt>isolated workgroup, <a class="indexterm" href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a></dt><dt>IXFR, <a class="indexterm" href="integrate-ms-networks.html#id2690436">Background Information</a></dt></dl></div><div class="indexdiv"><h3>J</h3><dl><dt>Japanese, <a class="indexterm" href="unicode.html#id2692552">Japanese Charsets</a>, <a class="indexterm" href="SWAT.html#id2704323">Enabling SWAT Internationalization Support</a></dt><dt>Japanese locale, <a class="indexterm" href="unicode.html#id2692681">Basic Parameter Setting</a></dt><dt>Japanese UNIX, <a class="indexterm" href="unicode.html#id2692681">Basic Parameter Setting</a></dt><dt>Java, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680529">Remote Management with ThinLinc</a>, <a class="indexterm" href="unicode.html#id2692681">Basic Parameter Setting</a></dt><dt>JIS X 0208, <a class="indexterm" href="unicode.html#id2692552">Japanese Charsets</a></dt><dt>join, <a class="indexterm" href="idmapper.html#id2627976">NT4-Style Domains (Includes Samba Domains)</a></dt><dt>join client, <a class="indexterm" href="rights.html#id2631138">Description of Privileges</a></dt><dt>join domain, <a class="indexterm" href="samba-pdc.html#id2587400">Joining Domain Fails Because of Existing Machine Account</a></dt><dt>join the ADS domain, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></dt><dt>join the domain, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a>, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></dt><dt>join the machine, <a class="indexterm" href="domain-member.html#id2592886">Windows NT4 Client</a></dt><dt>joined client, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>Joined domain, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></dt><dt>joining domain, <a class="indexterm" href="winbind.html#id2677976">Join the Samba Server to the PDC Domain</a></dt><dt>joining the domain, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></dt><dt>JPEG, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></dt></dl></div><div class="indexdiv"><h3>K</h3><dl><dt>KB 129202, <a class="indexterm" href="locking.html#id2639928">Additional Reading</a></dt><dt>KB 224992, <a class="indexterm" href="locking.html#id2639928">Additional Reading</a></dt><dt>KB 296264, <a class="indexterm" href="locking.html#id2639928">Additional Reading</a></dt><dt>KB 811492, <a class="indexterm" href="locking.html#id2639897">Long Delays Deleting Files over Network with XP SP1</a></dt><dt>KB 812937, <a class="indexterm" href="locking.html#id2639872">Problems Saving Files in MS Office on Windows XP</a></dt><dt>KDC, <a class="indexterm" href="domain-member.html#ads-member">Samba ADS Domain Membership</a>, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a></dt><dt>KDE, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a></dt><dt>KDE konqueror, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a></dt><dt>KDE session, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a></dt><dt>KDEPrint, <a class="indexterm" href="CUPS-printing.html#id2655341">Overview</a></dt><dt>kerberos, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a>, <a class="indexterm" href="idmapper.html#id2628264">ADS Domains</a></dt><dt>Kerberos, <a class="indexterm" href="domain-member.html#ads-member">Samba ADS Domain Membership</a>, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a>, <a class="indexterm" href="domain-member.html#id2595186">Possible Errors</a>, <a class="indexterm" href="domain-member.html#ads-test-smbclient">Testing with smbclient</a>, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a>, <a class="indexterm" href="winbind.html#id2676324">Microsoft Active Directory Services</a>, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2700456">Passdb Backends and Authentication</a></dt><dd><dl><dt>/etc/krb5.conf, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a></dt></dl></dd><dt>Kerberos authentication, <a class="indexterm" href="domain-member.html#ads-test-smbclient">Testing with smbclient</a></dt><dt>killall, <a class="indexterm" href="compiling.html#id2710248">Starting from inetd.conf</a></dt><dt>kinit, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a>, <a class="indexterm" href="domain-member.html#ads-create-machine-account">Create the Computer Account</a>, <a class="indexterm" href="domain-member.html#id2595186">Possible Errors</a></dt><dt>kixstart, <a class="indexterm" href="NT4Migration.html#id2702187">Logon Scripts</a></dt><dt>kprinter, <a class="indexterm" href="CUPS-printing.html#id2669139">Foomatic Database-Generated PPDs</a></dt><dt>KRB, <a class="indexterm" href="idmapper.html#id2628264">ADS Domains</a></dt><dt>KRB5, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a></dt><dt>krb5.conf, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a></dt></dl></div><div class="indexdiv"><h3>L</h3><dl><dt>LAN, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680529">Remote Management with ThinLinc</a>, <a class="indexterm" href="SambaHA.html#id2695410">High-Availability Server Products</a>, <a class="indexterm" href="problems.html#id2707164">Diagnostics Tools</a></dt><dt>LanMan, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="samba-bdc.html#id2588303">Essential Background Information</a>, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="passdb.html#passdbtech">Technical Information</a>, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>LanMan logon service, <a class="indexterm" href="samba-pdc.html#id2585096">Preparing for Domain Control</a></dt><dt>LanMan passwords, <a class="indexterm" href="passdb.html#id2609356">Backward Compatibility Account Storage Systems</a></dt><dt>LanManager, <a class="indexterm" href="ServerType.html#id2581256">User Level Security</a>, <a class="indexterm" href="ClientConfig.html#id2599975">Domain Logon Configuration: Windows 9x/Me</a></dt><dt>LanManager-compatible, <a class="indexterm" href="NetworkBrowsing.html#id2605636">WINS: The Windows Internetworking Name Server</a></dt><dt>LanManger password, <a class="indexterm" href="passdb.html#id2613222">Listing User and Machine Accounts</a></dt><dt>laptops, <a class="indexterm" href="Backup.html#id2693846">BackupPC</a></dt><dt>large directory, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>large domain, <a class="indexterm" href="idmapper.html#id2628674">IDMAP_RID with Winbind</a></dt><dt>large numbers of files, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>large organizations, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a></dt><dt>last change time, <a class="indexterm" href="passdb.html#id2613222">Listing User and Machine Accounts</a></dt><dt>latency, <a class="indexterm" href="locking.html#id2638596">Slow and/or Unreliable Networks</a></dt><dt>laws, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a></dt><dt>LCT (see last change time)</dt><dt>LDAP, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a>, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a>, <a class="indexterm" href="samba-bdc.html#id2589047">LDAP Configuration Notes</a>, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a>, <a class="indexterm" href="samba-bdc.html#id2590853">How Do I Replicate the smbpasswd File?</a>, <a class="indexterm" href="samba-bdc.html#id2590958">Can I Do This All with LDAP?</a>, <a class="indexterm" href="domain-member.html#id2591202">Features and Benefits</a>, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a>, <a class="indexterm" href="domain-member.html#id2595551">Sharing User ID Mappings between Samba Domain Members</a>, <a class="indexterm" href="passdb.html">Account Information Databases</a>, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a>, <a class="indexterm" href="passdb.html#id2610108">Important Notes About Security</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a>, <a class="indexterm" href="passdb.html#id2611451">Caution Regarding LDAP and Samba</a>, <a class="indexterm" href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="passdb.html#id2615111">ldapsam</a>, <a class="indexterm" href="passdb.html#id2615359">Supported LDAP Servers</a>, <a class="indexterm" href="passdb.html#id2615414">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="passdb.html#id2615921">Initialize the LDAP Database</a>, <a class="indexterm" href="passdb.html#id2616106">Configuring Samba</a>, <a class="indexterm" href="groupmapping.html#id2619564">Default Users, Groups, and Relative Identifiers</a>, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id2627818">Backup Domain Controller</a>, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a>, <a class="indexterm" href="InterdomainTrusts.html#id2641780">Features and Benefits</a>, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a>, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a>, <a class="indexterm" href="winbind.html#id2676324">Microsoft Active Directory Services</a>, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2700456">Passdb Backends and Authentication</a>, <a class="indexterm" href="NT4Migration.html#id2701821">Domain Layout</a></dt><dd><dl><dt>directories, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a></dt><dt>master, <a class="indexterm" href="samba-bdc.html#id2589047">LDAP Configuration Notes</a></dt><dt>server, <a class="indexterm" href="samba-bdc.html#id2589047">LDAP Configuration Notes</a></dt><dt>slave, <a class="indexterm" href="samba-bdc.html#id2587890">Features and Benefits</a>, <a class="indexterm" href="samba-bdc.html#id2589047">LDAP Configuration Notes</a></dt></dl></dd><dt>LDAP administration password, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a></dt><dt>LDAP administrative password, <a class="indexterm" href="domain-member.html#id2595551">Sharing User ID Mappings between Samba Domain Members</a></dt><dt>LDAP backend, <a class="indexterm" href="StandAloneServer.html#id2596329">Background</a>, <a class="indexterm" href="idmapper.html#id2627583">Primary Domain Controller</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2698610">Quick Migration Guide</a></dt><dt>LDAP backends, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a></dt><dt>LDAP database, <a class="indexterm" href="samba-bdc.html#id2590243">Example Configuration</a>, <a class="indexterm" href="passdb.html#id2615921">Initialize the LDAP Database</a>, <a class="indexterm" href="NT4Migration.html#id2701821">Domain Layout</a></dt><dt>LDAP deployment, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a></dt><dt>LDAP directory, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a>, <a class="indexterm" href="passdb.html#TOSHARG-acctflags">Account Flags Management</a>, <a class="indexterm" href="passdb.html#id2615111">ldapsam</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a></dt><dt>ldap group suffix, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2701043">New Suffix for Searching</a></dt><dt>LDAP idmap Backend, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a></dt><dt>ldap idmap suffix, <a class="indexterm" href="domain-member.html#id2595551">Sharing User ID Mappings between Samba Domain Members</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2701043">New Suffix for Searching</a></dt><dt>ldap machine suffix, <a class="indexterm" href="upgrading-to-3.0.html#id2701043">New Suffix for Searching</a></dt><dt>LDAP queries, <a class="indexterm" href="upgrading-to-3.0.html#id2701043">New Suffix for Searching</a></dt><dt>LDAP redirects, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a></dt><dt>LDAP schema, <a class="indexterm" href="ChangeNotes.html#id2601340">LDAP Changes in Samba-3.0.23</a></dt><dt>LDAP server, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a></dt><dt>ldap suffix, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2701043">New Suffix for Searching</a></dt><dt>ldap user suffix, <a class="indexterm" href="upgrading-to-3.0.html#id2701043">New Suffix for Searching</a></dt><dt>LDAP-based, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a></dt><dt>LDAP., <a class="indexterm" href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a></dt><dt>LDAP/Kerberos, <a class="indexterm" href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a></dt><dt>LDAPS, <a class="indexterm" href="passdb.html#id2616644">Security and sambaSamAccount</a></dt><dt>ldapsam, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a>, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="passdb.html">Account Information Databases</a>, <a class="indexterm" href="passdb.html#id2614688">smbpasswd: Encrypted Password Database</a>, <a class="indexterm" href="passdb.html#id2615111">ldapsam</a>, <a class="indexterm" href="passdb.html#id2615359">Supported LDAP Servers</a>, <a class="indexterm" href="groupmapping.html#id2619564">Default Users, Groups, and Relative Identifiers</a>, <a class="indexterm" href="idmapper.html#id2627583">Primary Domain Controller</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a>, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>ldapsam_compat, <a class="indexterm" href="passdb.html#id2609356">Backward Compatibility Account Storage Systems</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a></dt><dt>ldapsearch, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a></dt><dt>LDAPv3, <a class="indexterm" href="passdb.html#id2616644">Security and sambaSamAccount</a></dt><dt>ldconfig, <a class="indexterm" href="winbind.html#id2677263">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a></dt><dt>ldd, <a class="indexterm" href="CUPS-printing.html#id2655581">Linking smbd with libcups.so</a></dt><dt>LDIF, <a class="indexterm" href="passdb.html#id2615921">Initialize the LDAP Database</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a></dt><dt>LDIF file, <a class="indexterm" href="passdb.html#id2615921">Initialize the LDAP Database</a></dt><dt>legacy systems, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></dt><dt>legal UNIX system account name, <a class="indexterm" href="domain-member.html#id2595873">Adding Machine to Domain Fails</a></dt><dt>Level1 Oplock, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>Level1 oplock, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>Level2 Oplock, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>LGPL, <a class="indexterm" href="passdb.html#id2615111">ldapsam</a></dt><dt>libcups, <a class="indexterm" href="classicalprinting.html#id2647507">Default UNIX System Printing Commands</a>, <a class="indexterm" href="CUPS-printing.html#id2655581">Linking smbd with libcups.so</a></dt><dt>libcups.so, <a class="indexterm" href="CUPS-printing.html#id2655581">Linking smbd with libcups.so</a></dt><dt>libcups.so.2, <a class="indexterm" href="CUPS-printing.html#id2655581">Linking smbd with libcups.so</a></dt><dt>Liberty Alliance, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></dt><dt>libiconv, <a class="indexterm" href="unicode.html#id2692681">Basic Parameter Setting</a></dt><dt>libnss_winbind, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="winbind.html#id2677263">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a></dt><dt>libnss_winbind.so, <a class="indexterm" href="winbind.html#id2676371">Name Service Switch</a>, <a class="indexterm" href="winbind.html#id2677263">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a></dt><dt>libnss_wins.so, <a class="indexterm" href="integrate-ms-networks.html#id2690904">/etc/nsswitch.conf</a></dt><dt>libraries, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a></dt><dt>licensing, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>limitations, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a></dt><dt>linewidth, <a class="indexterm" href="CUPS-printing.html#id2657520">UNIX Printfile Conversion and GUI Basics</a></dt><dt>link loader configuration, <a class="indexterm" href="winbind.html#id2677263">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a></dt><dt>Links</dt><dd><dl><dt>hard, <a class="indexterm" href="AccessControls.html#id2632834">MS Windows NTFS Comparison with UNIX File Systems</a></dt><dt>soft, <a class="indexterm" href="AccessControls.html#id2632834">MS Windows NTFS Comparison with UNIX File Systems</a></dt></dl></dd><dt>Linux, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680529">Remote Management with ThinLinc</a>, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a>, <a class="indexterm" href="unicode.html#id2692681">Basic Parameter Setting</a></dt><dt>Linux High Availability project, <a class="indexterm" href="SambaHA.html#id2695410">High-Availability Server Products</a></dt><dt>Linux LVM, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>Linux LVM partition, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>LinuxKongress2002, <a class="indexterm" href="CUPS-printing.html#id2668823">The Grand Unification Achieved</a></dt><dt>Linuxprinting.org, <a class="indexterm" href="CUPS-printing.html#id2660577">The Role of cupsomatic/foomatic</a>, <a class="indexterm" href="CUPS-printing.html#id2668269">CUPS Print Drivers from Linuxprinting.org</a>, <a class="indexterm" href="CUPS-printing.html#id2668951">Driver Development Outside</a></dt><dt>list of domain controllers, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></dt><dt>listen for connections, <a class="indexterm" href="securing-samba.html#id2640578">Using Interface Protection</a></dt><dt>listen own socket, <a class="indexterm" href="cfgsmarts.html#id2696226">Multiple Server Hosting</a></dt><dt>LLC, <a class="indexterm" href="integrate-ms-networks.html">Integrating MS Windows Networks with Samba</a></dt><dt>LM/NT password hashes, <a class="indexterm" href="passdb.html#id2614688">smbpasswd: Encrypted Password Database</a>, <a class="indexterm" href="passdb.html#id2616644">Security and sambaSamAccount</a></dt><dt>LMB, <a class="indexterm" href="samba-pdc.html#id2585096">Preparing for Domain Control</a>, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a>, <a class="indexterm" href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id2604354">Domain Browsing Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a>, <a class="indexterm" href="NetworkBrowsing.html#id2604955">Making Samba the Domain Master</a>, <a class="indexterm" href="NetworkBrowsing.html#id2605543">Use of the Remote Browse Sync Parameter</a>, <a class="indexterm" href="NetworkBrowsing.html#id2605636">WINS: The Windows Internetworking Name Server</a>, <a class="indexterm" href="NetworkBrowsing.html#id2606524">Windows Networking Protocols</a>, <a class="indexterm" href="NetworkBrowsing.html#id2606970">Browsing Support in Samba</a>, <a class="indexterm" href="NetworkBrowsing.html#id2607589">Behavior of Cross-Subnet Browsing</a> (see Local Master Browser)</dt><dt>LMHOSTS, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a>, <a class="indexterm" href="integrate-ms-networks.html#id2691548">The LMHOSTS File</a></dt><dt>lmhosts, <a class="indexterm" href="NetworkBrowsing.html#id2605636">WINS: The Windows Internetworking Name Server</a></dt><dt>load balancing, <a class="indexterm" href="msdfs.html#id2643489">Features and Benefits</a></dt><dt>loaded modules, <a class="indexterm" href="VFS.html#id2672652">Features and Benefits</a></dt><dt>loading printer drivers, <a class="indexterm" href="classicalprinting.html#id2647129">Any [my_printer_name] Section</a></dt><dt>local</dt><dd><dl><dt>groups, <a class="indexterm" href="NetCommand.html#id2621445">UNIX and Windows Group Management</a></dt><dt>master</dt><dd><dl><dt>browser, <a class="indexterm" href="samba-pdc.html#id2585096">Preparing for Domain Control</a></dt></dl></dd></dl></dd><dt>local access permissions, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>local accounts, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a></dt><dt>local administrative privileges, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>Local Area Connection, <a class="indexterm" href="ClientConfig.html#id2597752">MS Windows XP Professional</a></dt><dt>Local Area Connection Properties, <a class="indexterm" href="ClientConfig.html#id2598395">MS Windows 2000</a></dt><dt>local authentication, <a class="indexterm" href="StandAloneServer.html#id2596329">Background</a></dt><dt>local authentication database, <a class="indexterm" href="StandAloneServer.html#id2596329">Background</a></dt><dt>local cache, <a class="indexterm" href="integrate-ms-networks.html#id2691462">The NetBIOS Name Cache</a></dt><dt>local disk, <a class="indexterm" href="Backup.html#id2693846">BackupPC</a></dt><dt>local domain, <a class="indexterm" href="winbind.html#id2676061">Handling of Foreign SIDs</a></dt><dt>local group, <a class="indexterm" href="rights.html#id2632126">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>local groups, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="winbind.html#id2676371">Name Service Switch</a></dt><dt>Local Machine Trust Account, <a class="indexterm" href="samba-bdc.html#id2590743">Machine Accounts Keep Expiring</a></dt><dt>Local Master Browser, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a>, <a class="indexterm" href="NetworkBrowsing.html#id2604354">Domain Browsing Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#id2605403">Use of the Remote Announce Parameter</a></dt><dt>local master browser (see LMB)</dt><dt>local names, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a></dt><dt>local print driver, <a class="indexterm" href="classicalprinting.html#id2649234">[print$] Stanza Parameters</a></dt><dt>local profile, <a class="indexterm" href="ProfileMgmt.html#id2683405">Disabling Roaming Profile Support</a>, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a></dt><dt>local profiles, <a class="indexterm" href="ProfileMgmt.html#id2682916">Features and Benefits</a></dt><dt>local registry values, <a class="indexterm" href="PolicyMgmt.html#id2681787">MS Windows 200x/XP Professional Policies</a></dt><dt>Local security policies, <a class="indexterm" href="CUPS-printing.html#id2671710">Windows 200x/XP Local Security Policies</a></dt><dt>local smbpasswd file, <a class="indexterm" href="StandAloneServer.html#id2596329">Background</a></dt><dt>local spool area, <a class="indexterm" href="classicalprinting.html#id2644356">Technical Introduction</a></dt><dt>local subnet, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></dt><dt>local system printing, <a class="indexterm" href="classicalprinting.html#id2644356">Technical Introduction</a></dt><dt>local UNIX groups, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a></dt><dt>local user, <a class="indexterm" href="idmapper.html#id2626560">Standalone Samba Server</a>, <a class="indexterm" href="winbind.html#id2678925">Restarting</a></dt><dt>local user account, <a class="indexterm" href="passdb.html#id2610628">Mapping User Identifiers between MS Windows and UNIX</a></dt><dt>local users, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="winbind.html#id2676371">Name Service Switch</a></dt><dt>locale, <a class="indexterm" href="SWAT.html#id2704323">Enabling SWAT Internationalization Support</a></dt><dt>localhost, <a class="indexterm" href="securing-samba.html#id2640364">Using Host-Based Protection</a></dt><dt>locally known UID, <a class="indexterm" href="NetCommand.html#id2621847">Mapping Windows Groups to UNIX Groups</a></dt><dt>locate domain controller, <a class="indexterm" href="samba-bdc.html#id2589560">How Does a Workstation find its Domain Controller?</a></dt><dt>Lock caching, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>lock directory, <a class="indexterm" href="cfgsmarts.html#id2696226">Multiple Server Hosting</a></dt><dt>lock password, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dt>lock the account, <a class="indexterm" href="passdb.html#id2613628">Changing User Accounts</a></dt><dt>locking, <a class="indexterm" href="locking.html">File and Record Locking</a>, <a class="indexterm" href="locking.html#id2637637">Features and Benefits</a>, <a class="indexterm" href="locking.html#id2637734">Discussion</a>, <a class="indexterm" href="SambaHA.html#id2694935">The Distributed File System Challenge</a></dt><dt>locking protocol, <a class="indexterm" href="locking.html#id2637637">Features and Benefits</a></dt><dt>locking semantics, <a class="indexterm" href="locking.html#id2637637">Features and Benefits</a>, <a class="indexterm" href="locking.html#id2637734">Discussion</a></dt><dt>locking.tdb, <a class="indexterm" href="CUPS-printing.html#id2667763">The Printing *.tdb Files</a></dt><dd><dl><dt>(see also TDB)</dt></dl></dd><dt>lockout, <a class="indexterm" href="ServerType.html#id2582513">Example Configuration</a></dt><dt>log files, <a class="indexterm" href="diagnosis.html#id2705108">Assumptions</a></dt><dd><dl><dt>monitoring, <a class="indexterm" href="diagnosis.html#id2705108">Assumptions</a></dt></dl></dd><dt>log level, <a class="indexterm" href="idmapper.html#id2628264">ADS Domains</a>, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a>, <a class="indexterm" href="problems.html#id2707216">Debugging with Samba Itself</a>, <a class="indexterm" href="bugreport.html#dbglvl">Debug Levels</a></dt><dt>log.nmbd, <a class="indexterm" href="NetworkBrowsing.html#id2607167">Problem Resolution</a>, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>logging, <a class="indexterm" href="VFS.html#id2673507">Configuration of Auditing</a>, <a class="indexterm" href="bugreport.html#id2708660">Debugging-Specific Operations</a></dt><dt>logical directories, <a class="indexterm" href="msdfs.html#id2643489">Features and Benefits</a></dt><dt>Logical Link Control (see LLC)</dt><dt>logical volume, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>Logical Volume Manager (see LVM)</dt><dt>Login, <a class="indexterm" href="passdb.html#id2610564">Advantages of Non-Encrypted Passwords</a></dt><dt>login, <a class="indexterm" href="winbind.html#id2679136">Linux/FreeBSD-Specific PAM Configuration</a>, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>login id, <a class="indexterm" href="passdb.html#id2613222">Listing User and Machine Accounts</a></dt><dt>login name, <a class="indexterm" href="install.html#id2574356">Example Configuration</a></dt><dt>login shells, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a></dt><dt>LoginID, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a></dt><dt>logon, <a class="indexterm" href="ServerType.html#id2581638">Domain Security Mode (User-Level Security)</a></dt><dt>logon authentication, <a class="indexterm" href="samba-bdc.html#id2589683">NetBIOS Over TCP/IP Disabled</a></dt><dt>logon drive, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a></dt><dt>logon home, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a>, <a class="indexterm" href="ProfileMgmt.html#id2683169">Windows 9x/Me User Profiles</a></dt><dt>logon name, <a class="indexterm" href="NetCommand.html#id2623295">User Mapping</a></dt><dt>logon path, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a></dt><dt>logon processing, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a></dt><dt>logon requests, <a class="indexterm" href="samba-bdc.html#id2588303">Essential Background Information</a>, <a class="indexterm" href="samba-bdc.html#id2589617">NetBIOS Over TCP/IP Enabled</a>, <a class="indexterm" href="samba-bdc.html#id2590798">Can Samba Be a Backup Domain Controller to an NT4 PDC?</a></dt><dt>logon script, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a>, <a class="indexterm" href="domain-member.html#id2591202">Features and Benefits</a></dt><dt>Logon Scripts, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>Logon scripts, <a class="indexterm" href="NT4Migration.html#id2702187">Logon Scripts</a></dt><dt>logon server, <a class="indexterm" href="samba-pdc.html#id2586627">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="ProfileMgmt.html#id2685846">MS Windows NT4 Workstation</a></dt><dt>logons, <a class="indexterm" href="ProfileMgmt.html#id2683030">NT4/200x User Profiles</a></dt><dt>lookups, <a class="indexterm" href="passdb.html#id2614688">smbpasswd: Encrypted Password Database</a></dt><dt>loopback adapter, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>loopback interface, <a class="indexterm" href="securing-samba.html#id2640578">Using Interface Protection</a>, <a class="indexterm" href="Portability.html#id2711137">Red Hat Linux</a></dt><dt>lower-case, <a class="indexterm" href="ServerType.html#id2581256">User Level Security</a></dt><dt>lowercase filenames, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>lp, <a class="indexterm" href="classicalprinting.html#id2644958">Verifying Configuration with testparm</a>, <a class="indexterm" href="CUPS-printing.html#id2672342">Print Queue Called &#8220;lp&#8221; Mishandles Print Jobs</a></dt><dt>lpadmin, <a class="indexterm" href="CUPS-printing.html#id2660894">&#8220;Raw&#8221; Printing</a>, <a class="indexterm" href="CUPS-printing.html#id2662453">Printing with Interface Scripts</a>, <a class="indexterm" href="CUPS-printing.html#id2668269">CUPS Print Drivers from Linuxprinting.org</a>, <a class="indexterm" href="CUPS-printing.html#id2669763">Setting Up Quotas</a></dt><dt>LPD, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>lpinfo, <a class="indexterm" href="CUPS-printing.html#id2660239">CUPS Backends</a></dt><dt>lpq cache time, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>lpq command, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>LPRNG, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>lpstat, <a class="indexterm" href="install.html#id2573195">Configuration File Syntax</a>, <a class="indexterm" href="CUPS-printing.html#id2667620">Troubleshooting Revisited</a></dt><dt>LPT1:, <a class="indexterm" href="classicalprinting.html#id2654194">Samba and Printer Ports</a></dt><dt>LsaEnumTrustedDomains, <a class="indexterm" href="problems.html#id2707216">Debugging with Samba Itself</a></dt><dt>LTSP, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a></dt><dt>Lustre, <a class="indexterm" href="SambaHA.html#id2694935">The Distributed File System Challenge</a></dt><dt>lvcreate, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>LVM, <a class="indexterm" href="VFS.html#id2674123">shadow_copy</a>, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>LVM snapshots, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>LVM volume, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>lvm10 package, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt></dl></div><div class="indexdiv"><h3>M</h3><dl><dt>m-node, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a></dt><dt>MAC address, <a class="indexterm" href="integrate-ms-networks.html#id2690637">/etc/hosts</a></dt><dt>MAC Addresses, <a class="indexterm" href="integrate-ms-networks.html#id2690637">/etc/hosts</a></dt><dt>Mac OS X , <a class="indexterm" href="unicode.html#id2692681">Basic Parameter Setting</a></dt><dt>machine, <a class="indexterm" href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a></dt><dd><dl><dt>account, <a class="indexterm" href="ServerType.html#id2581638">Domain Security Mode (User-Level Security)</a></dt></dl></dd><dt>machine account, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a>, <a class="indexterm" href="samba-bdc.html#id2589047">LDAP Configuration Notes</a>, <a class="indexterm" href="passdb.html#TOSHARG-acctflags">Account Flags Management</a>, <a class="indexterm" href="passdb.html#id2614953">tdbsam</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>machine account password</dt><dd><dl><dt>change protocol, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></dt></dl></dd><dt>machine accounts, <a class="indexterm" href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="passdb.html#acctmgmttools">Account Management Tools</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>machine accounts database, <a class="indexterm" href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a></dt><dt>machine authentication, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a></dt><dt>machine name, <a class="indexterm" href="integrate-ms-networks.html#id2690637">/etc/hosts</a>, <a class="indexterm" href="integrate-ms-networks.html#id2691028">Name Resolution as Used within MS Windows Networking</a></dt><dt>Machine Policy Objects, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>machine SID, <a class="indexterm" href="NetCommand.html#id2624351">Managing Security Identifiers (SIDS)</a></dt><dt>machine trust account, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id2585096">Preparing for Domain Control</a>, <a class="indexterm" href="samba-pdc.html#id2586627">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="domain-member.html">Domain Membership</a>, <a class="indexterm" href="domain-member.html#id2592722">Windows 200x/XP Professional Client</a>, <a class="indexterm" href="domain-member.html#ads-create-machine-account">Create the Computer Account</a>, <a class="indexterm" href="domain-member.html#id2595797">Cannot Add Machine Back to Domain</a></dt><dd><dl><dt>create privilege, <a class="indexterm" href="domain-member.html#id2592722">Windows 200x/XP Professional Client</a></dt><dt>creation, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>password, <a class="indexterm" href="samba-pdc.html#id2585096">Preparing for Domain Control</a>, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt></dl></dd><dt>Machine Trust Account, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id2592886">Windows NT4 Client</a></dt><dd><dl><dt>creation, <a class="indexterm" href="domain-member.html#id2592605">On-the-Fly Creation of Machine Trust Accounts</a></dt><dt>password, <a class="indexterm" href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a></dt><dt>UNIX account, <a class="indexterm" href="domain-member.html#id2592605">On-the-Fly Creation of Machine Trust Accounts</a></dt></dl></dd><dt>Machine Trust Accounts, <a class="indexterm" href="samba-bdc.html#id2590743">Machine Accounts Keep Expiring</a>, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dd><dl><dt>creating, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt></dl></dd><dt>machine trust accounts, <a class="indexterm" href="samba-bdc.html#id2590853">How Do I Replicate the smbpasswd File?</a>, <a class="indexterm" href="domain-member.html#id2592325">Managing Domain Machine Accounts using NT4 Server Manager</a>, <a class="indexterm" href="domain-member.html#id2595757">Common Errors</a>, <a class="indexterm" href="passdb.html">Account Information Databases</a>, <a class="indexterm" href="passdb.html#id2611451">Caution Regarding LDAP and Samba</a></dt><dt>machine_name, <a class="indexterm" href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a></dt><dt>machine_nickname, <a class="indexterm" href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a></dt><dt>Macintosh, <a class="indexterm" href="unicode.html#id2692681">Basic Parameter Setting</a></dt><dt>macros, <a class="indexterm" href="classicalprinting.html#id2648051">Custom Print Commands</a></dt><dt>mail, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a></dt><dt>mailing list, <a class="indexterm" href="ch46.html#id2714245">Free Support</a></dt><dt>mailing lists, <a class="indexterm" href="ch46.html#id2714245">Free Support</a></dt><dt>maintaining ids, <a class="indexterm" href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a></dt><dt>major changes, <a class="indexterm" href="upgrading-to-3.0.html#id2699981">New Functionality</a></dt><dt>make, <a class="indexterm" href="integrate-ms-networks.html#id2690904">/etc/nsswitch.conf</a>, <a class="indexterm" href="compiling.html#id2709741">Building the Binaries</a></dt><dt>man, <a class="indexterm" href="SWAT.html#id2703390">Features and Benefits</a></dt><dt>man page, <a class="indexterm" href="winbind.html#id2677779">Configure smb.conf</a></dt><dt>man pages, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a></dt><dt>man-in-the-middle, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>manage accounts, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a></dt><dt>manage drivers, <a class="indexterm" href="classicalprinting.html#id2644133">Features and Benefits</a></dt><dt>manage groups, <a class="indexterm" href="NetCommand.html#id2623379">Administering User Rights and Privileges</a></dt><dt>manage printers, <a class="indexterm" href="NetCommand.html#id2623379">Administering User Rights and Privileges</a></dt><dt>manage privileges, <a class="indexterm" href="rights.html#id2630518">Rights Management Capabilities</a></dt><dt>manage roaming profiles, <a class="indexterm" href="ProfileMgmt.html#id2682916">Features and Benefits</a></dt><dt>manage share permissions, <a class="indexterm" href="AccessControls.html#id2635190">Windows NT4 Workstation/Server</a></dt><dt>manage share-level ACL, <a class="indexterm" href="groupmapping.html#id2619442">Applicable Only to Versions Earlier than 3.0.11</a></dt><dt>manage shares, <a class="indexterm" href="NetCommand.html#id2623379">Administering User Rights and Privileges</a></dt><dt>manage users, <a class="indexterm" href="NetCommand.html#id2623379">Administering User Rights and Privileges</a></dt><dt>manageability, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>Manageability, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>managed by humans, <a class="indexterm" href="SambaHA.html#id2694331">Features and Benefits</a></dt><dt>management bottleneck, <a class="indexterm" href="locking.html#id2638644">Multiuser Databases</a></dt><dt>management costs, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a></dt><dt>management overheads, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></dt><dt>management procedures, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></dt><dt>management tools, <a class="indexterm" href="passdb.html#acctmgmttools">Account Management Tools</a></dt><dt>managing rights, <a class="indexterm" href="rights.html#id2630793">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>mandatory profiles, <a class="indexterm" href="ProfileMgmt.html#id2685453">Mandatory Profiles</a></dt><dt>Mandrake, <a class="indexterm" href="CUPS-printing.html#id2669056">Forums, Downloads, Tutorials, Howtos (Also for Mac OS X and Commercial UNIX)</a></dt><dt>Mandriva, <a class="indexterm" href="CUPS-printing.html#id2669056">Forums, Downloads, Tutorials, Howtos (Also for Mac OS X and Commercial UNIX)</a></dt><dt>manual UNIX account creation, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>manual WINS server entries, <a class="indexterm" href="ClientConfig.html#id2597752">MS Windows XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id2598395">MS Windows 2000</a></dt><dt>manually configured, <a class="indexterm" href="ClientConfig.html#id2598942">MS Windows Me</a></dt><dt>manually configured DNS settings, <a class="indexterm" href="ClientConfig.html#id2597752">MS Windows XP Professional</a></dt><dt>map, <a class="indexterm" href="domain-member.html#id2592722">Windows 200x/XP Professional Client</a>, <a class="indexterm" href="NT4Migration.html#id2702298">User and Group Accounts</a></dt><dt>mapped, <a class="indexterm" href="groupmapping.html#id2619324">Important Administrative Information</a>, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a>, <a class="indexterm" href="NetCommand.html#id2621847">Mapping Windows Groups to UNIX Groups</a></dt><dt>mapping, <a class="indexterm" href="passdb.html#id2610628">Mapping User Identifiers between MS Windows and UNIX</a>, <a class="indexterm" href="NetCommand.html#id2621847">Mapping Windows Groups to UNIX Groups</a></dt><dt>mapping home directory, <a class="indexterm" href="securing-samba.html#id2641220">Why Can Users Access Other Users' Home Directories?</a></dt><dt>mapping printer driver, <a class="indexterm" href="classicalprinting.html#id2651588">Running rpcclient with setdriver</a></dt><dt>mappings, <a class="indexterm" href="domain-member.html#id2595551">Sharing User ID Mappings between Samba Domain Members</a></dt><dt>maps UNIX users and groups, <a class="indexterm" href="domain-member.html#id2595551">Sharing User ID Mappings between Samba Domain Members</a></dt><dt>master browser, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></dt><dt>master browsers, <a class="indexterm" href="NetworkBrowsing.html#id2607589">Behavior of Cross-Subnet Browsing</a></dt><dt>master server, <a class="indexterm" href="NT4Migration.html#id2701821">Domain Layout</a></dt><dt>master smb.conf, <a class="indexterm" href="cfgsmarts.html#id2697638">Multiple Virtual Server Hosting</a></dt><dt>MasterAnnouncement, <a class="indexterm" href="NetworkBrowsing.html#id2607589">Behavior of Cross-Subnet Browsing</a></dt><dt>match case, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>maximum value, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a></dt><dt>mbd kept spawning, <a class="indexterm" href="speed.html#id2712944">Corrupt tdb Files</a></dt><dt>Meccano set, <a class="indexterm" href="Backup.html#id2693749">Discussion of Backup Solutions</a></dt><dt>mechanism, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></dt><dt>media type, <a class="indexterm" href="CUPS-printing.html#id2660577">The Role of cupsomatic/foomatic</a></dt><dt>member, <a class="indexterm" href="samba-pdc.html#id2585096">Preparing for Domain Control</a>, <a class="indexterm" href="rights.html#id2630793">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>member machine, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>memory, <a class="indexterm" href="passdb.html#id2610423">Advantages of Encrypted Passwords</a></dt><dt>messages.tdb, <a class="indexterm" href="CUPS-printing.html#id2667763">The Printing *.tdb Files</a></dt><dd><dl><dt>(see also TDB)</dt></dl></dd><dt>messaging systems, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a></dt><dt>Meta node, <a class="indexterm" href="NetworkBrowsing.html#id2606281">Static WINS Entries</a></dt><dt>meta-directory, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></dt><dt>meta-service, <a class="indexterm" href="install.html#id2573195">Configuration File Syntax</a></dt><dt>meta-services, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></dt><dt>Microsoft Active Directory, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>Microsoft Developer Network CDs, <a class="indexterm" href="problems.html#id2707665">The Windows Network Monitor</a></dt><dt>Microsoft driver, <a class="indexterm" href="CUPS-printing.html#id2663407">PostScript Drivers with No Major Problems, Even in Kernel
-Mode</a></dt><dt>Microsoft management console (see MMC)</dt><dt>Microsoft Remote Procedure Call (see MSRPC)</dt><dt>Microsoft Windows 9x/Me, <a class="indexterm" href="domain-member.html#id2592325">Managing Domain Machine Accounts using NT4 Server Manager</a></dt><dt>Microsoft Wolfpack, <a class="indexterm" href="SambaHA.html#id2695410">High-Availability Server Products</a></dt><dt>middle-ware, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a></dt><dt>migrate, <a class="indexterm" href="ServerType.html">Server Types and Security Modes</a>, <a class="indexterm" href="NT4Migration.html">Migration from NT4 PDC to Samba-3 PDC</a></dt><dt>migrate account settings, <a class="indexterm" href="NT4Migration.html#id2702298">User and Group Accounts</a></dt><dt>migrate group, <a class="indexterm" href="NT4Migration.html#id2702298">User and Group Accounts</a></dt><dt>migrate user, <a class="indexterm" href="NT4Migration.html#id2702298">User and Group Accounts</a></dt><dt>migrating, <a class="indexterm" href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a></dt><dt>migration, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>migration plan, <a class="indexterm" href="NT4Migration.html#id2701377">Planning and Getting Started</a></dt><dt>migration process, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>MIME, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a>, <a class="indexterm" href="CUPS-printing.html#id2658945">MIME Type Conversion Rules</a>, <a class="indexterm" href="CUPS-printing.html#id2659153">Filtering  Overview</a>, <a class="indexterm" href="CUPS-printing.html#id2661002">application/octet-stream Printing</a></dt><dd><dl><dt>filters, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></dt><dt>raw, <a class="indexterm" href="FastStart.html#id2576283">Anonymous Print Server</a>, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="CUPS-printing.html#cups-raw">Explicitly Enable &#8220;raw&#8221; Printing for application/octet-stream</a></dt></dl></dd><dt>MIME conversion rules, <a class="indexterm" href="CUPS-printing.html#id2658281">The CUPS Filtering Architecture</a></dt><dt>MIME recognition, <a class="indexterm" href="CUPS-printing.html#id2658281">The CUPS Filtering Architecture</a></dt><dt>MIME type, <a class="indexterm" href="CUPS-printing.html#cups-raw">Explicitly Enable &#8220;raw&#8221; Printing for application/octet-stream</a>, <a class="indexterm" href="CUPS-printing.html#id2658281">The CUPS Filtering Architecture</a>, <a class="indexterm" href="CUPS-printing.html#id2659310">Prefilters</a>, <a class="indexterm" href="CUPS-printing.html#id2661002">application/octet-stream Printing</a></dt><dt>mime.types, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></dt><dt>minimal</dt><dd><dl><dt>configuration, <a class="indexterm" href="install.html#id2573195">Configuration File Syntax</a></dt></dl></dd><dt>minimal configuration, <a class="indexterm" href="install.html#id2573195">Configuration File Syntax</a></dt><dt>minimum security control, <a class="indexterm" href="StandAloneServer.html">Standalone Servers</a></dt><dt>misconfigurations, <a class="indexterm" href="install.html#id2574615">Test Your Config File with testparm</a></dt><dt>misconfigured settings, <a class="indexterm" href="classicalprinting.html#id2644675">Simple Print Configuration</a></dt><dt>misinformation, <a class="indexterm" href="domain-member.html">Domain Membership</a></dt><dt>mission-critical, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a>, <a class="indexterm" href="classicalprinting.html#id2644133">Features and Benefits</a></dt><dt>MIT, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a>, <a class="indexterm" href="idmapper.html#id2628264">ADS Domains</a></dt><dt>MIT kerberos, <a class="indexterm" href="idmapper.html#id2628264">ADS Domains</a>, <a class="indexterm" href="idmapper.html#id2629264">IDMAP Storage in LDAP Using Winbind</a></dt><dt>MIT Kerberos, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>mixed mode, <a class="indexterm" href="ServerType.html#id2582161">ADS Security Mode (User-Level Security)</a>, <a class="indexterm" href="InterdomainTrusts.html#id2643094">NT4-Style Domain Trusts with Windows 2000</a></dt><dt>mixed profile, <a class="indexterm" href="ProfileMgmt.html#id2683327">Mixed Windows Windows 9x/Me and NT4/200x User Profiles</a></dt><dt>mkdir, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>mkfs.xfs, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>MMC, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="groupmapping.html#id2617939">Features and Benefits</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id2627583">Primary Domain Controller</a>, <a class="indexterm" href="AccessControls.html#id2635030">Access Controls on Shares</a>, <a class="indexterm" href="AccessControls.html#id2635301">Windows 200x/XP</a>, <a class="indexterm" href="PolicyMgmt.html#id2681239">Creating and Managing System Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id2682557">Windows NT4/200x</a>, <a class="indexterm" href="ProfileMgmt.html#id2683405">Disabling Roaming Profile Support</a></dt><dt>MMC snap-in, <a class="indexterm" href="PolicyMgmt.html#id2681990">Administration of Windows 200x/XP Policies</a></dt><dt>modem/ISDN, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a></dt><dt>moderately secure, <a class="indexterm" href="securing-samba.html#id2640202">Features and Benefits</a></dt><dt>modprobe, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>module, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>modules, <a class="indexterm" href="VFS.html#id2672652">Features and Benefits</a>, <a class="indexterm" href="VFS.html#id2672690">Discussion</a></dt><dt>more than one protocol, <a class="indexterm" href="NetworkBrowsing.html#id2606524">Windows Networking Protocols</a></dt><dt>mount, <a class="indexterm" href="ServerType.html#id2581430">Share-Level Security</a>, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>mouse-over, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a></dt><dt>moveuser.exe, <a class="indexterm" href="ProfileMgmt.html#id2685347">moveuser.exe</a></dt><dt>MS DCE RPC, <a class="indexterm" href="winbind.html#id2677976">Join the Samba Server to the PDC Domain</a></dt><dt>MS Windows 2000, <a class="indexterm" href="samba-bdc.html#id2589411">Active Directory Domain Control</a></dt><dt>MS Windows NT4/200x, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a></dt><dt>MS Windows SID, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a></dt><dt>MS WINS, <a class="indexterm" href="NetworkBrowsing.html#id2601603">Features and Benefits</a></dt><dt>MS-DFS, <a class="indexterm" href="SambaHA.html#id2695550">MS-DFS: The Poor Man's Cluster</a></dt><dt>MS-RPC, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>MS-WINS replication, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a></dt><dt>msdfs links, <a class="indexterm" href="msdfs.html#id2643489">Features and Benefits</a></dt><dt>msg, <a class="indexterm" href="SWAT.html#id2704323">Enabling SWAT Internationalization Support</a></dt><dt>msg file, <a class="indexterm" href="SWAT.html#id2704323">Enabling SWAT Internationalization Support</a></dt><dt>MSRPC, <a class="indexterm" href="winbind.html#id2676237">Microsoft Remote Procedure Calls</a>, <a class="indexterm" href="winbind.html#id2676371">Name Service Switch</a></dt><dt>multibyte character sets, <a class="indexterm" href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a></dt><dt>multibyte charsets, <a class="indexterm" href="unicode.html#id2692250">What Are Charsets and Unicode?</a></dt><dt>multiple backends, <a class="indexterm" href="passdb.html#id2614558">Password Backends</a></dt><dt>multiple domains, <a class="indexterm" href="NT4Migration.html#id2701821">Domain Layout</a></dt><dt>multiple hosting, <a class="indexterm" href="cfgsmarts.html">Advanced Configuration Techniques</a></dt><dt>multiple modules, <a class="indexterm" href="VFS.html#id2672690">Discussion</a></dt><dt>multiple network interfaces, <a class="indexterm" href="NetworkBrowsing.html#id2605217">Multiple Interfaces</a></dt><dt>multiple network segments, <a class="indexterm" href="NT4Migration.html#id2701821">Domain Layout</a></dt><dt>multiple personality, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></dt><dt>multiple server hosting, <a class="indexterm" href="cfgsmarts.html#id2696226">Multiple Server Hosting</a></dt><dt>multiple server personalities, <a class="indexterm" href="cfgsmarts.html">Advanced Configuration Techniques</a></dt><dt>multiple servers, <a class="indexterm" href="cfgsmarts.html">Advanced Configuration Techniques</a>, <a class="indexterm" href="cfgsmarts.html#id2696226">Multiple Server Hosting</a></dt><dt>multiple universal naming convention provider (see MUP)</dt><dt>multiple VFS, <a class="indexterm" href="VFS.html#id2672690">Discussion</a></dt><dt>multiple virtual servers, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></dt><dt>multiple Windows workgroups or domains, <a class="indexterm" href="ClientConfig.html#id2598942">MS Windows Me</a></dt><dt>multiple WINS servers, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a></dt><dt>Multiuser databases, <a class="indexterm" href="locking.html#id2638644">Multiuser Databases</a></dt><dt>mutual assistance, <a class="indexterm" href="ch46.html#id2714245">Free Support</a></dt><dt>mutually exclusive options, <a class="indexterm" href="NetworkBrowsing.html#id2601786">What Is Browsing?</a></dt><dt>My Network Places, <a class="indexterm" href="ClientConfig.html#id2598942">MS Windows Me</a>, <a class="indexterm" href="NetworkBrowsing.html#id2607167">Problem Resolution</a></dt><dt>Myrinet, <a class="indexterm" href="SambaHA.html#id2695217">Server Pool Communications Demands</a></dt></dl></div><div class="indexdiv"><h3>N</h3><dl><dt>n security context, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a></dt><dt>n-memory buffer, <a class="indexterm" href="integrate-ms-networks.html#id2691462">The NetBIOS Name Cache</a></dt><dt>name conflict, <a class="indexterm" href="classicalprinting.html#id2647129">Any [my_printer_name] Section</a></dt><dt>name lookup, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a>, <a class="indexterm" href="integrate-ms-networks.html#id2691462">The NetBIOS Name Cache</a></dt><dt>name lookups, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a>, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a></dt><dt>name registration, <a class="indexterm" href="samba-bdc.html#id2589470">What Qualifies a Domain Controller on the Network?</a></dt><dt>name resolution, <a class="indexterm" href="NetworkBrowsing.html#id2601786">What Is Browsing?</a>, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a>, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a>, <a class="indexterm" href="NetworkBrowsing.html#id2606877">Technical Overview of Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id2608431">Common Errors</a>, <a class="indexterm" href="integrate-ms-networks.html#id2690637">/etc/hosts</a>, <a class="indexterm" href="diagnosis.html#id2705108">Assumptions</a></dt><dt>name resolution across routed networks, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a></dt><dt>name resolve order, <a class="indexterm" href="NetworkBrowsing.html#id2606674">Name Resolution Order</a></dt><dt>name service switch (see NSS)</dt><dt>name-to-address, <a class="indexterm" href="NetworkBrowsing.html#id2605636">WINS: The Windows Internetworking Name Server</a></dt><dt>nameserv.h, <a class="indexterm" href="NetworkBrowsing.html#id2606281">Static WINS Entries</a></dt><dt>name_type, <a class="indexterm" href="NetworkBrowsing.html#id2605636">WINS: The Windows Internetworking Name Server</a>, <a class="indexterm" href="NetworkBrowsing.html#id2606674">Name Resolution Order</a></dt><dt>native ACLs, <a class="indexterm" href="AccessControls.html#id2632624">Features and Benefits</a></dt><dt>native dump, <a class="indexterm" href="Backup.html#id2694187">Amanda</a></dt><dt>native member, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a>, <a class="indexterm" href="domain-member.html#id2591202">Features and Benefits</a></dt><dt>native mode, <a class="indexterm" href="ServerType.html#id2582161">ADS Security Mode (User-Level Security)</a>, <a class="indexterm" href="winbind.html#id2676324">Microsoft Active Directory Services</a></dt><dt>NBT, <a class="indexterm" href="integrate-ms-networks.html#id2691028">Name Resolution as Used within MS Windows Networking</a></dt><dt>nbtstat, <a class="indexterm" href="domain-member.html#id2595797">Cannot Add Machine Back to Domain</a>, <a class="indexterm" href="integrate-ms-networks.html#id2691462">The NetBIOS Name Cache</a></dt><dt>necessary rights, <a class="indexterm" href="rights.html#id2630793">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>negotiate, <a class="indexterm" href="passdb.html#id2610108">Important Notes About Security</a></dt><dt>negotiating the charset, <a class="indexterm" href="unicode.html#id2692250">What Are Charsets and Unicode?</a></dt><dt>nested group, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>Nested Group Support, <a class="indexterm" href="rights.html#id2632126">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>nested groups, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>net, <a class="indexterm" href="passdb.html#acctmgmttools">Account Management Tools</a>, <a class="indexterm" href="groupmapping.html">Group Mapping: MS Windows and UNIX</a>, <a class="indexterm" href="NetCommand.html">Remote and Local Management: The Net Command</a>, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a>, <a class="indexterm" href="NetCommand.html#id2621363">Administrative Tasks and Methods</a>, <a class="indexterm" href="NetCommand.html#id2621445">UNIX and Windows Group Management</a>, <a class="indexterm" href="rights.html#id2632126">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dd><dl><dt>ads, <a class="indexterm" href="NetCommand.html#id2621445">UNIX and Windows Group Management</a></dt><dd><dl><dt>join, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="domain-member.html#ads-create-machine-account">Create the Computer Account</a>, <a class="indexterm" href="NetCommand.html#id2623749">Machine Trust Accounts</a>, <a class="indexterm" href="idmapper.html#id2628264">ADS Domains</a></dt><dt>leave, <a class="indexterm" href="NetCommand.html#id2623749">Machine Trust Accounts</a></dt><dt>printer info, <a class="indexterm" href="NetCommand.html#id2625801">Printers and ADS</a></dt><dt>printer publish, <a class="indexterm" href="NetCommand.html#id2625801">Printers and ADS</a></dt><dt>printer remove, <a class="indexterm" href="NetCommand.html#id2625801">Printers and ADS</a></dt><dt>printer search, <a class="indexterm" href="NetCommand.html#id2625801">Printers and ADS</a></dt><dt>status, <a class="indexterm" href="NetCommand.html#id2623749">Machine Trust Accounts</a></dt><dt>testjoin, <a class="indexterm" href="NetCommand.html#id2623749">Machine Trust Accounts</a></dt></dl></dd><dt>getlocalsid, <a class="indexterm" href="ChangeNotes.html#id2600728">User and Group Changes</a>, <a class="indexterm" href="NetCommand.html#id2624351">Managing Security Identifiers (SIDS)</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a></dt><dt>groupmap, <a class="indexterm" href="FastStart.html#id2578515">Example: Engineering Office</a>, <a class="indexterm" href="ChangeNotes.html#id2600728">User and Group Changes</a>, <a class="indexterm" href="groupmapping.html#id2617939">Features and Benefits</a>, <a class="indexterm" href="groupmapping.html#id2620187">Example Configuration</a>, <a class="indexterm" href="NT4Migration.html#id2702346">Steps in Migration Process</a></dt><dd><dl><dt>add, <a class="indexterm" href="NetCommand.html#id2621847">Mapping Windows Groups to UNIX Groups</a></dt><dt>delete, <a class="indexterm" href="NetCommand.html#id2621847">Mapping Windows Groups to UNIX Groups</a></dt><dt>list, <a class="indexterm" href="groupmapping.html#id2620187">Example Configuration</a>, <a class="indexterm" href="NetCommand.html#id2621645">Adding or Creating a New Group</a></dt><dt>modify, <a class="indexterm" href="NetCommand.html#id2621847">Mapping Windows Groups to UNIX Groups</a></dt></dl></dd><dt>localgroup, <a class="indexterm" href="rights.html#id2632126">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>rap, <a class="indexterm" href="NetCommand.html#id2621445">UNIX and Windows Group Management</a></dt><dd><dl><dt>session, <a class="indexterm" href="NetCommand.html#id2625736">Session and Connection Management</a></dt></dl></dd><dt>rpc, <a class="indexterm" href="FastStart.html#id2577582">Example Configuration</a>, <a class="indexterm" href="ServerType.html#id2581855">Example Configuration</a>, <a class="indexterm" href="samba-bdc.html#id2587890">Features and Benefits</a>, <a class="indexterm" href="NetCommand.html#id2621445">UNIX and Windows Group Management</a></dt><dd><dl><dt>getsid, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a>, <a class="indexterm" href="NetCommand.html#id2624351">Managing Security Identifiers (SIDS)</a></dt><dt>group, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="NetCommand.html#id2621645">Adding or Creating a New Group</a></dt><dt>group add, <a class="indexterm" href="NetCommand.html#id2621645">Adding or Creating a New Group</a></dt><dt>group addmem, <a class="indexterm" href="NetCommand.html#grpmemshipchg">Manipulating Group Memberships</a>, <a class="indexterm" href="NetCommand.html#id2622674">Managing Nest Groups on Workstations from the Samba Server</a></dt><dt>group delete, <a class="indexterm" href="NetCommand.html#id2622155">Deleting a Group Account</a></dt><dt>group delmem, <a class="indexterm" href="NetCommand.html#grpmemshipchg">Manipulating Group Memberships</a></dt><dt>group list, <a class="indexterm" href="NetCommand.html#id2621645">Adding or Creating a New Group</a></dt><dt>group members, <a class="indexterm" href="NetCommand.html#grpmemshipchg">Manipulating Group Memberships</a></dt><dt>group rename, <a class="indexterm" href="NetCommand.html#id2622195">Rename Group Accounts</a></dt><dt>info, <a class="indexterm" href="NetCommand.html#netmisc1">Other Miscellaneous Operations</a>, <a class="indexterm" href="ProfileMgmt.html#id2685296">Side Bar Notes</a></dt><dt>join, <a class="indexterm" href="ServerType.html#id2581855">Example Configuration</a>, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="NetCommand.html#id2623749">Machine Trust Accounts</a>, <a class="indexterm" href="winbind.html#id2677976">Join the Samba Server to the PDC Domain</a>, <a class="indexterm" href="NT4Migration.html#id2702346">Steps in Migration Process</a></dt><dt>join bdc, <a class="indexterm" href="NetCommand.html#id2623749">Machine Trust Accounts</a></dt><dt>join member, <a class="indexterm" href="NetCommand.html#id2623749">Machine Trust Accounts</a></dt><dt>list, <a class="indexterm" href="rights.html#id2630793">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>printer migrate drivers, <a class="indexterm" href="NetCommand.html#id2625466">Printer Migration</a></dt><dt>printer migrate forms, <a class="indexterm" href="NetCommand.html#id2625466">Printer Migration</a></dt><dt>printer migrate printers, <a class="indexterm" href="NetCommand.html#id2625466">Printer Migration</a></dt><dt>printer migrate security, <a class="indexterm" href="NetCommand.html#id2625466">Printer Migration</a></dt><dt>printer migrate settings, <a class="indexterm" href="NetCommand.html#id2625466">Printer Migration</a></dt><dt>right list accounts, <a class="indexterm" href="NetCommand.html#id2624953">Share Migration</a></dt><dt>rights grant, <a class="indexterm" href="NetCommand.html#id2623379">Administering User Rights and Privileges</a>, <a class="indexterm" href="rights.html#id2630793">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>rights list, <a class="indexterm" href="NetCommand.html#id2623379">Administering User Rights and Privileges</a></dt><dt>rights list accounts, <a class="indexterm" href="NetCommand.html#id2623379">Administering User Rights and Privileges</a></dt><dt>share add, <a class="indexterm" href="NetCommand.html#id2624619">Creating, Editing, and Removing Shares</a></dt><dt>share delete, <a class="indexterm" href="NetCommand.html#id2624619">Creating, Editing, and Removing Shares</a></dt><dt>share migrate, <a class="indexterm" href="NetCommand.html#id2624953">Share Migration</a></dt><dt>share migrate all, <a class="indexterm" href="NetCommand.html#id2625406">Simultaneous Share and File Migration</a></dt><dt>share migrate files, <a class="indexterm" href="NetCommand.html#id2625149">File and Directory Migration</a></dt><dt>share migrate security, <a class="indexterm" href="NetCommand.html#id2625364">Share-ACL Migration</a></dt><dt>testjoin, <a class="indexterm" href="NetCommand.html#id2623749">Machine Trust Accounts</a></dt><dt>trustdom add, <a class="indexterm" href="NetCommand.html#id2624117">Interdomain Trusts</a></dt><dt>trustdom establish, <a class="indexterm" href="NetCommand.html#id2624117">Interdomain Trusts</a>, <a class="indexterm" href="InterdomainTrusts.html#id2642897">Samba as the Trusting Domain</a></dt><dt>trustdom list, <a class="indexterm" href="NetCommand.html#id2624117">Interdomain Trusts</a></dt><dt>trustdom revoke, <a class="indexterm" href="NetCommand.html#id2624117">Interdomain Trusts</a></dt><dt>user add, <a class="indexterm" href="NetCommand.html#sbeuseraddn">Adding User Accounts</a></dt><dt>user delete, <a class="indexterm" href="NetCommand.html#id2623179">Deletion of User Accounts</a>, <a class="indexterm" href="NetCommand.html#id2623749">Machine Trust Accounts</a></dt><dt>user info, <a class="indexterm" href="NetCommand.html#id2623227">Managing User Accounts</a></dt><dt>user password, <a class="indexterm" href="NetCommand.html#sbeuseraddn">Adding User Accounts</a></dt><dt>user rename, <a class="indexterm" href="NetCommand.html#id2623227">Managing User Accounts</a></dt><dt>vampire, <a class="indexterm" href="ChangeNotes.html#id2600728">User and Group Changes</a>, <a class="indexterm" href="NetCommand.html#id2624837">Share, Directory, and File Migration</a>, <a class="indexterm" href="NT4Migration.html#id2702346">Steps in Migration Process</a></dt></dl></dd><dt>setlocalsid, <a class="indexterm" href="NetCommand.html#id2624351">Managing Security Identifiers (SIDS)</a></dt><dt>time, <a class="indexterm" href="NetCommand.html#netmisc1">Other Miscellaneous Operations</a></dt><dd><dl><dt>set, <a class="indexterm" href="NetCommand.html#netmisc1">Other Miscellaneous Operations</a></dt><dt>system, <a class="indexterm" href="NetCommand.html#netmisc1">Other Miscellaneous Operations</a></dt><dt>zone, <a class="indexterm" href="NetCommand.html#netmisc1">Other Miscellaneous Operations</a></dt></dl></dd><dt>use, <a class="indexterm" href="domain-member.html#ads-test-server">Testing Server Setup</a></dt></dl></dd><dt>NET, <a class="indexterm" href="PolicyMgmt.html#id2682597">Samba PDC</a></dt><dt>net command, <a class="indexterm" href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a></dt><dt>net getlocalsid, <a class="indexterm" href="rights.html#id2631943">The Administrator Domain SID</a></dt><dt>net groupmap, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a></dt><dt>net rpc user add, <a class="indexterm" href="rights.html#id2631138">Description of Privileges</a></dt><dt>net tool, <a class="indexterm" href="upgrading-to-3.0.html#id2700456">Passdb Backends and Authentication</a></dt><dt>net use, <a class="indexterm" href="classicalprinting.html#id2653771">Error Message: &#8220;Cannot connect under a different Name&#8221;</a></dt><dt>net use /home, <a class="indexterm" href="ProfileMgmt.html#id2683169">Windows 9x/Me User Profiles</a></dt><dt>net use lpt1:, <a class="indexterm" href="CUPS-printing.html#id2665619">Installing the PostScript Driver on a Client</a></dt><dt>net view, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a>, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>netatalk, <a class="indexterm" href="VFS.html#id2674073">netatalk</a></dt><dt>NetAtalk, <a class="indexterm" href="unicode.html#id2692681">Basic Parameter Setting</a></dt><dt>Netatalk, <a class="indexterm" href="Other-Clients.html#id2711424">Macintosh Clients</a></dt><dt>NetBEUI, <a class="indexterm" href="integrate-ms-networks.html">Integrating MS Windows Networks with Samba</a></dt><dt>NetBIOS, <a class="indexterm" href="ServerType.html#id2581638">Domain Security Mode (User-Level Security)</a>, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="samba-bdc.html#id2589470">What Qualifies a Domain Controller on the Network?</a>, <a class="indexterm" href="samba-bdc.html#id2589560">How Does a Workstation find its Domain Controller?</a>, <a class="indexterm" href="samba-bdc.html#id2590243">Example Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#id2601603">Features and Benefits</a>, <a class="indexterm" href="NetworkBrowsing.html#netdiscuss">Discussion</a>, <a class="indexterm" href="NetworkBrowsing.html#id2602859">TCP/IP without NetBIOS</a>, <a class="indexterm" href="NetworkBrowsing.html#id2606877">Technical Overview of Browsing</a>, <a class="indexterm" href="integrate-ms-networks.html">Integrating MS Windows Networks with Samba</a>, <a class="indexterm" href="integrate-ms-networks.html#id2691028">Name Resolution as Used within MS Windows Networking</a>, <a class="indexterm" href="integrate-ms-networks.html#id2691462">The NetBIOS Name Cache</a></dt><dd><dl><dt>brooadcast, <a class="indexterm" href="samba-pdc.html#id2585096">Preparing for Domain Control</a></dt><dt>name, <a class="indexterm" href="ServerType.html#id2581638">Domain Security Mode (User-Level Security)</a></dt></dl></dd><dt>netbios alias, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></dt><dt>netbios aliases, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></dt><dt>NetBIOS broadcast, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></dt><dt>NetBIOS disabled, <a class="indexterm" href="NetworkBrowsing.html#id2601603">Features and Benefits</a></dt><dt>NetBIOS flags, <a class="indexterm" href="NetworkBrowsing.html#id2606281">Static WINS Entries</a></dt><dt>NetBIOS name, <a class="indexterm" href="samba-pdc.html#id2587021">Security Mode and Master Browsers</a>, <a class="indexterm" href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="integrate-ms-networks.html#id2691028">Name Resolution as Used within MS Windows Networking</a>, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></dt><dt>netbios name, <a class="indexterm" href="cfgsmarts.html#id2696226">Multiple Server Hosting</a></dt><dt>NetBIOS name cache, <a class="indexterm" href="domain-member.html#id2595797">Cannot Add Machine Back to Domain</a>, <a class="indexterm" href="NetworkBrowsing.html#id2608457">Flushing the Samba NetBIOS Name Cache</a></dt><dt>NetBIOS name length, <a class="indexterm" href="NetworkBrowsing.html#id2605636">WINS: The Windows Internetworking Name Server</a></dt><dt>NetBIOS name resolution, <a class="indexterm" href="NetworkBrowsing.html#id2607589">Behavior of Cross-Subnet Browsing</a></dt><dt>NetBIOS Name Server (see NBNS)</dt><dt>NetBIOS name type, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a></dt><dt>NetBIOS names, <a class="indexterm" href="NetworkBrowsing.html#id2606674">Name Resolution Order</a>, <a class="indexterm" href="integrate-ms-networks.html#id2690904">/etc/nsswitch.conf</a></dt><dt>NetBIOS network interface, <a class="indexterm" href="NetworkBrowsing.html#id2606524">Windows Networking Protocols</a></dt><dt>NetBIOS networking, <a class="indexterm" href="NetworkBrowsing.html#id2601603">Features and Benefits</a></dt><dt>NetBIOS over TCP/IP, <a class="indexterm" href="NetworkBrowsing.html">Network Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id2601603">Features and Benefits</a>, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a>, <a class="indexterm" href="NetworkBrowsing.html#id2606877">Technical Overview of Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id2607418">Cross-Subnet Browsing</a>, <a class="indexterm" href="integrate-ms-networks.html#id2690436">Background Information</a></dt><dt>NetBIOS over TCP/IP disabled, <a class="indexterm" href="NetworkBrowsing.html#id2608626">Browsing of Shares and Directories is Very Slow</a></dt><dt>NetBIOS-less, <a class="indexterm" href="NetworkBrowsing.html#id2602859">TCP/IP without NetBIOS</a>, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></dt><dt>NetBIOS-less SMB, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></dt><dt>NetBIOSless SMB over TCP/IP, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a></dt><dt>NetBT, <a class="indexterm" href="integrate-ms-networks.html#id2691028">Name Resolution as Used within MS Windows Networking</a></dt><dt>netlogon, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a></dt><dt>NETLOGON, <a class="indexterm" href="samba-pdc.html#id2585096">Preparing for Domain Control</a>, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a>, <a class="indexterm" href="PolicyMgmt.html#id2681239">Creating and Managing System Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id2681787">MS Windows 200x/XP Professional Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id2682235">Managing Account/User Policies</a>, <a class="indexterm" href="ProfileMgmt.html#id2685846">MS Windows NT4 Workstation</a>, <a class="indexterm" href="ProfileMgmt.html#id2686408">MS Windows 200x/XP</a></dt><dt>Netlogon, <a class="indexterm" href="samba-bdc.html#id2588303">Essential Background Information</a></dt><dt>NetLogon service, <a class="indexterm" href="NetworkBrowsing.html#id2605636">WINS: The Windows Internetworking Name Server</a></dt><dt>netlogon share, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a>, <a class="indexterm" href="NT4Migration.html#id2702346">Steps in Migration Process</a></dt><dt>Netmon, <a class="indexterm" href="problems.html#id2707665">The Windows Network Monitor</a></dt><dt>Netmon., <a class="indexterm" href="problems.html#id2707725">Installing Network Monitor on an NT Workstation</a></dt><dt>netmon.exe, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a></dt><dt>NetSAMLogon, <a class="indexterm" href="ProfileMgmt.html#id2682966">Roaming Profiles</a></dt><dt>Netscape's Directory Server, <a class="indexterm" href="passdb.html#id2615359">Supported LDAP Servers</a></dt><dt>NetServerEnum2, <a class="indexterm" href="NetworkBrowsing.html#id2607589">Behavior of Cross-Subnet Browsing</a></dt><dt>NetUserGetInfo, <a class="indexterm" href="samba-pdc.html#id2586627">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="ProfileMgmt.html#id2682966">Roaming Profiles</a></dt><dt>NetWare, <a class="indexterm" href="integrate-ms-networks.html#id2691028">Name Resolution as Used within MS Windows Networking</a></dt><dt>NetWare Bindery, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>NetWare Core Protocol-based server, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>NetWkstaUserLogon, <a class="indexterm" href="samba-pdc.html#id2586627">The Special Case of Windows 9x/Me</a></dt><dt>network</dt><dd><dl><dt>browsing, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a></dt><dt>logon, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a></dt><dd><dl><dt>service, <a class="indexterm" href="samba-pdc.html#id2587021">Security Mode and Master Browsers</a></dt></dl></dd><dt>performance, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a></dt><dt>wide-area, <a class="indexterm" href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a></dt></dl></dd><dt>network access controls, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a></dt><dt>network access profile, <a class="indexterm" href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a></dt><dt>network administrator, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a></dt><dt>network administrator's toolbox, <a class="indexterm" href="NetCommand.html">Remote and Local Management: The Net Command</a></dt><dt>network administrators, <a class="indexterm" href="NT4Migration.html#id2702022">Server Share and Directory Layout</a></dt><dt>network analyzer, <a class="indexterm" href="problems.html#id2707164">Diagnostics Tools</a></dt><dt>network bandwidth, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a>, <a class="indexterm" href="NT4Migration.html#id2701821">Domain Layout</a></dt><dt>Network Basic Extended User Interface (see NetBEUI)</dt><dt>Network Basic Input/Output System (see NetBIOS)</dt><dt>Network Bridge, <a class="indexterm" href="ClientConfig.html#id2597752">MS Windows XP Professional</a></dt><dt>Network Bridge Configuration, <a class="indexterm" href="ClientConfig.html#id2597752">MS Windows XP Professional</a></dt><dt>network browsing problems, <a class="indexterm" href="NetworkBrowsing.html#id2604955">Making Samba the Domain Master</a>, <a class="indexterm" href="NetworkBrowsing.html#id2608626">Browsing of Shares and Directories is Very Slow</a></dt><dt>network client, <a class="indexterm" href="ClientConfig.html#id2597573">Features and Benefits</a>, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a></dt><dt>network clients, <a class="indexterm" href="ClientConfig.html#id2598395">MS Windows 2000</a></dt><dt>network configuration problems, <a class="indexterm" href="ClientConfig.html#id2597677">TCP/IP Configuration</a></dt><dt>network difficulty, <a class="indexterm" href="ClientConfig.html#id2597573">Features and Benefits</a></dt><dt>network environment, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680125">Remote Desktop Management</a></dt><dt>Network ID, <a class="indexterm" href="ClientConfig.html#id2599448">Joining a Domain: Windows 2000/XP Professional</a></dt><dt>network interface, <a class="indexterm" href="securing-samba.html#id2640578">Using Interface Protection</a>, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>network logon, <a class="indexterm" href="samba-pdc.html#id2586627">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="domain-member.html#id2591202">Features and Benefits</a>, <a class="indexterm" href="ClientConfig.html#id2599975">Domain Logon Configuration: Windows 9x/Me</a></dt><dt>network logon services, <a class="indexterm" href="samba-pdc.html#id2586627">The Special Case of Windows 9x/Me</a></dt><dt>network membership, <a class="indexterm" href="ClientConfig.html#id2597633">Technical Details</a></dt><dt>Network Monitor, <a class="indexterm" href="problems.html#id2707665">The Windows Network Monitor</a></dt><dt>Network Monitor Tools and Agent, <a class="indexterm" href="problems.html#id2707725">Installing Network Monitor on an NT Workstation</a></dt><dt>Network Neighborhood, <a class="indexterm" href="NetworkBrowsing.html#id2601786">What Is Browsing?</a>, <a class="indexterm" href="NetworkBrowsing.html#id2607167">Problem Resolution</a>, <a class="indexterm" href="NetworkBrowsing.html#id2607589">Behavior of Cross-Subnet Browsing</a>, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a>, <a class="indexterm" href="classicalprinting.html#id2651246">Check Samba for Driver Recognition</a></dt><dt>network neighborhood, <a class="indexterm" href="NetworkBrowsing.html#id2607589">Behavior of Cross-Subnet Browsing</a></dt><dt>network policies, <a class="indexterm" href="PolicyMgmt.html#id2681239">Creating and Managing System Policies</a></dt><dt>network security, <a class="indexterm" href="NT4Migration.html#id2701821">Domain Layout</a></dt><dt>network segment, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a>, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a>, <a class="indexterm" href="NT4Migration.html#id2701821">Domain Layout</a></dt><dt>Network settings, <a class="indexterm" href="NetworkBrowsing.html#id2607418">Cross-Subnet Browsing</a></dt><dt>network sniffer, <a class="indexterm" href="passdb.html#id2610423">Advantages of Encrypted Passwords</a></dt><dt>network storage, <a class="indexterm" href="Backup.html#id2693846">BackupPC</a></dt><dt>network traffic, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a></dt><dt>networked workstation, <a class="indexterm" href="winbind.html#id2676371">Name Service Switch</a></dt><dt>networking advocates, <a class="indexterm" href="Backup.html#id2693749">Discussion of Backup Solutions</a></dt><dt>networking environment, <a class="indexterm" href="passdb.html#id2611451">Caution Regarding LDAP and Samba</a></dt><dt>networking systems, <a class="indexterm" href="ClientConfig.html#id2600420">Common Errors</a></dt><dt>networks access, <a class="indexterm" href="speed.html#id2713039">Samba Performance is Very Slow</a></dt><dt>Networks Properties, <a class="indexterm" href="ClientConfig.html#id2599975">Domain Logon Configuration: Windows 9x/Me</a></dt><dt>new account, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></dt><dt>new parameters, <a class="indexterm" href="upgrading-to-3.0.html#id2699281">New Parameters</a></dt><dt>newsgroup, <a class="indexterm" href="bugreport.html#id2708335">Introduction</a></dt><dt>Nexus toolkit, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>Nexus.exe, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="domain-member.html#id2592325">Managing Domain Machine Accounts using NT4 Server Manager</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id2679982">Remote Server Administration</a></dt><dt>NFS, <a class="indexterm" href="domain-member.html#id2595551">Sharing User ID Mappings between Samba Domain Members</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680529">Remote Management with ThinLinc</a>, <a class="indexterm" href="SambaHA.html#id2694935">The Distributed File System Challenge</a>, <a class="indexterm" href="SambaHA.html#id2695062">Restrictive Constraints on Distributed File Systems</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2701208">IdMap LDAP Support</a></dt><dt>NFS clients, <a class="indexterm" href="locking.html#id2638561">UNIX or NFS Client-Accessed Files</a></dt><dt>NIS, <a class="indexterm" href="ServerType.html#id2581430">Share-Level Security</a>, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a>, <a class="indexterm" href="passdb.html#id2615414">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="winbind.html#id2676371">Name Service Switch</a></dt><dt>NIS database, <a class="indexterm" href="winbind.html#id2676603">Pluggable Authentication Modules</a></dt><dt>nmbd, <a class="indexterm" href="install.html#id2574163">Starting Samba</a>, <a class="indexterm" href="install.html#id2574615">Test Your Config File with testparm</a>, <a class="indexterm" href="FastStart.html#id2576682">Secure Read-Write File and Print Server</a>, <a class="indexterm" href="FastStart.html#id2577582">Example Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#id2601786">What Is Browsing?</a>, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a>, <a class="indexterm" href="NetworkBrowsing.html#id2606970">Browsing Support in Samba</a>, <a class="indexterm" href="NetworkBrowsing.html#id2608457">Flushing the Samba NetBIOS Name Cache</a>, <a class="indexterm" href="idmapper.html#id2627976">NT4-Style Domains (Includes Samba Domains)</a>, <a class="indexterm" href="winbind.html#id2677176">Testing Things Out</a>, <a class="indexterm" href="winbind.html#id2678575">Linux</a>, <a class="indexterm" href="winbind.html#id2678780">Solaris</a>, <a class="indexterm" href="cfgsmarts.html#id2696226">Multiple Server Hosting</a>, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a>, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a>, <a class="indexterm" href="problems.html#id2707216">Debugging with Samba Itself</a>, <a class="indexterm" href="speed.html#id2712944">Corrupt tdb Files</a></dt><dt>nmblookup, <a class="indexterm" href="integrate-ms-networks.html#id2691462">The NetBIOS Name Cache</a>, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>No NetBIOS layer, <a class="indexterm" href="NetworkBrowsing.html#id2602859">TCP/IP without NetBIOS</a></dt><dt>no network logon service, <a class="indexterm" href="StandAloneServer.html#id2596329">Background</a></dt><dt>no printcap file, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dt>nobody, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dt>nobody account, <a class="indexterm" href="classicalprinting.html#id2648051">Custom Print Commands</a>, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></dt><dt>node-type, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a></dt><dt>NoMachine, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a></dt><dt>NoMachine.Com, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a></dt><dt>non-authentication-based account management, <a class="indexterm" href="pam.html#id2688266">Anatomy of /etc/pam.d Entries</a></dt><dt>non-authoritative, <a class="indexterm" href="NetworkBrowsing.html#id2607589">Behavior of Cross-Subnet Browsing</a></dt><dt>non-LDAP</dt><dd><dl><dt>backend, <a class="indexterm" href="samba-bdc.html#id2587890">Features and Benefits</a></dt></dl></dd><dt>non-member Windows client, <a class="indexterm" href="passdb.html#id2610628">Mapping User Identifiers between MS Windows and UNIX</a></dt><dt>non-PostScript, <a class="indexterm" href="CUPS-printing.html#id2658242">CUPS Also Uses PPDs for Non-PostScript Printers</a>, <a class="indexterm" href="CUPS-printing.html#id2661282">PostScript Printer Descriptions for Non-PostScript Printers</a></dt><dt>non-PostScript printers, <a class="indexterm" href="CUPS-printing.html#id2659310">Prefilters</a>, <a class="indexterm" href="CUPS-printing.html#id2669139">Foomatic Database-Generated PPDs</a></dt><dt>nonhierarchical, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a></dt><dt>nontransitive, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a></dt><dt>normal color, <a class="indexterm" href="CUPS-printing.html#id2660577">The Role of cupsomatic/foomatic</a></dt><dt>normal user, <a class="indexterm" href="NetCommand.html#id2623379">Administering User Rights and Privileges</a></dt><dt>not domain member, <a class="indexterm" href="StandAloneServer.html#id2596329">Background</a></dt><dt>not domain members, <a class="indexterm" href="StandAloneServer.html">Standalone Servers</a></dt><dt>not part of domain, <a class="indexterm" href="NetworkBrowsing.html#id2605907">WINS Server Configuration</a></dt><dt>not stored anywhere, <a class="indexterm" href="passdb.html#id2610423">Advantages of Encrypted Passwords</a></dt><dt>not transitive, <a class="indexterm" href="InterdomainTrusts.html#id2643094">NT4-Style Domain Trusts with Windows 2000</a></dt><dt>Novell, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a>, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a></dt><dt>Novell eDirectory server, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>NSS, <a class="indexterm" href="StandAloneServer.html#id2596329">Background</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="passdb.html#id2615111">ldapsam</a>, <a class="indexterm" href="passdb.html#id2615414">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="passdb.html#id2616531">Accounts and Groups Management</a>, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id2628674">IDMAP_RID with Winbind</a>, <a class="indexterm" href="winbind.html#id2675430">Features and Benefits</a>, <a class="indexterm" href="winbind.html#id2675862">What Winbind Provides</a>, <a class="indexterm" href="winbind.html#id2676186">How Winbind Works</a>, <a class="indexterm" href="winbind.html#id2676371">Name Service Switch</a>, <a class="indexterm" href="winbind.html#id2678970">Configure Winbind and PAM</a>, <a class="indexterm" href="winbind.html#id2679639">Conclusion</a></dt><dt>nsswitch.conf, <a class="indexterm" href="ServerType.html#id2581430">Share-Level Security</a></dt><dt>nss_ldap, <a class="indexterm" href="samba-bdc.html#id2590243">Example Configuration</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id2629850">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a></dt><dt>nss_winbind.so.1, <a class="indexterm" href="winbind.html#id2677263">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a></dt><dt>NT domain, <a class="indexterm" href="winbind.html#id2675862">What Winbind Provides</a></dt><dt>NT groups, <a class="indexterm" href="domain-member.html#id2593911">Why Is This Better Than security = server?</a>, <a class="indexterm" href="groupmapping.html#id2619564">Default Users, Groups, and Relative Identifiers</a></dt><dt>NT migration scripts, <a class="indexterm" href="passdb.html#id2615111">ldapsam</a></dt><dt>NT password, <a class="indexterm" href="passdb.html#id2613222">Listing User and Machine Accounts</a></dt><dt>NT Server Manager, <a class="indexterm" href="AccessControls.html#id2635190">Windows NT4 Workstation/Server</a></dt><dt>NT-controlled domain, <a class="indexterm" href="InterdomainTrusts.html#id2642897">Samba as the Trusting Domain</a></dt><dt>NT-encrypted password, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>NT-encrypted passwords, <a class="indexterm" href="passdb.html#id2609356">Backward Compatibility Account Storage Systems</a></dt><dt>NT4, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a></dt><dt>NT4 Domain, <a class="indexterm" href="idmapper.html#id2626560">Standalone Samba Server</a></dt><dt>NT4 domain, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="winbind.html#id2675430">Features and Benefits</a></dt><dt>NT4 domain members, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a></dt><dt>NT4 style policy updates, <a class="indexterm" href="PolicyMgmt.html#id2682235">Managing Account/User Policies</a></dt><dt>NT4 User Manager for Domains, <a class="indexterm" href="rights.html#id2630793">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>NT4-style, <a class="indexterm" href="InterdomainTrusts.html#id2643094">NT4-Style Domain Trusts with Windows 2000</a></dt><dt>NT4-style domain, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a></dt><dt>NT4-style domains, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a></dt><dt>Nt4sp6ai.exe, <a class="indexterm" href="PolicyMgmt.html#id2681565">Windows NT4-Style Policy Files</a></dt><dt>NTConfig.POL, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a>, <a class="indexterm" href="domain-member.html#id2591202">Features and Benefits</a>, <a class="indexterm" href="PolicyMgmt.html#id2681428">Windows 9x/ME Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id2681747">Registry Spoiling</a>, <a class="indexterm" href="PolicyMgmt.html#id2681787">MS Windows 200x/XP Professional Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id2681990">Administration of Windows 200x/XP Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id2682235">Managing Account/User Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id2682475">Samba Editreg Toolset</a>, <a class="indexterm" href="ProfileMgmt.html#id2685846">MS Windows NT4 Workstation</a>, <a class="indexterm" href="NT4Migration.html#id2702901">Samba-3 Implementation Choices</a></dt><dt>ntconfig.pol, <a class="indexterm" href="PolicyMgmt.html#id2681565">Windows NT4-Style Policy Files</a></dt><dt>ntdrivers.tdb, <a class="indexterm" href="classicalprinting.html#prt-modeset">Setting Device Modes on New Printers</a>, <a class="indexterm" href="CUPS-printing.html#id2667763">The Printing *.tdb Files</a></dt><dd><dl><dt>(see also TDB)</dt></dl></dd><dt>ntforms.tdb, <a class="indexterm" href="classicalprinting.html#prt-modeset">Setting Device Modes on New Printers</a>, <a class="indexterm" href="CUPS-printing.html#id2667763">The Printing *.tdb Files</a></dt><dd><dl><dt>(see also TDB)</dt></dl></dd><dt>NTFS, <a class="indexterm" href="ChangeNotes.html#id2600728">User and Group Changes</a>, <a class="indexterm" href="AccessControls.html#id2632834">MS Windows NTFS Comparison with UNIX File Systems</a></dt><dt>NTLMv2, <a class="indexterm" href="securing-samba.html#id2641078">NTLMv2 Security</a></dt><dt>ntlm_auth, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></dt><dt>ntprinters.tdb, <a class="indexterm" href="classicalprinting.html#prt-modeset">Setting Device Modes on New Printers</a>, <a class="indexterm" href="CUPS-printing.html#id2667763">The Printing *.tdb Files</a></dt><dd><dl><dt>(see also TDB)</dt></dl></dd><dt>NTUser.DAT, <a class="indexterm" href="PolicyMgmt.html#id2682475">Samba Editreg Toolset</a>, <a class="indexterm" href="ProfileMgmt.html#id2685453">Mandatory Profiles</a>, <a class="indexterm" href="NT4Migration.html#id2702901">Samba-3 Implementation Choices</a></dt><dt>NTuser.DAT, <a class="indexterm" href="ProfileMgmt.html#id2684328">Windows NT4 Workstation</a>, <a class="indexterm" href="ProfileMgmt.html#id2685003">Sharing Profiles between Windows 9x/Me and NT4/200x/XP Workstations</a>, <a class="indexterm" href="NT4Migration.html#id2702253">Profile Migration/Creation</a></dt><dt>NTuser.MAN, <a class="indexterm" href="ProfileMgmt.html#id2684328">Windows NT4 Workstation</a></dt><dt>NTUser.MAN, <a class="indexterm" href="ProfileMgmt.html#id2685453">Mandatory Profiles</a></dt><dt>NT_STATUS_LOGON_FAILURE, <a class="indexterm" href="upgrading-to-3.0.html#id2700359">Changes in Behavior</a></dt><dt>NT_STATUS_UNSUCCESSFUL, <a class="indexterm" href="classicalprinting.html#id2650980">Running rpcclient with adddriver</a></dt><dt>null shell, <a class="indexterm" href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a></dt><dt>NX, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a></dt></dl></div><div class="indexdiv"><h3>O</h3><dl><dt>object class, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a></dt><dt>object class declaration, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a></dt><dt>object module dependencies, <a class="indexterm" href="winbind.html#id2677263">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a></dt><dt>ObjectClass, <a class="indexterm" href="passdb.html#id2615414">Schema and Relationship to the RFC 2307 posixAccount</a></dt><dt>ObjectClasses, <a class="indexterm" href="passdb.html#id2615414">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="passdb.html#id2615649">OpenLDAP Configuration</a></dt><dt>obtuse complexity, <a class="indexterm" href="NT4Migration.html#id2702022">Server Share and Directory Layout</a></dt><dt>office server, <a class="indexterm" href="FastStart.html#id2576682">Secure Read-Write File and Print Server</a></dt><dt>OID, <a class="indexterm" href="passdb.html#id2615414">Schema and Relationship to the RFC 2307 posixAccount</a></dt><dt>old sambaAccount, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a></dt><dt>Omni, <a class="indexterm" href="CUPS-printing.html#id2668951">Driver Development Outside</a></dt><dt>on the fly, <a class="indexterm" href="domain-member.html#id2592886">Windows NT4 Client</a></dt><dt>on-the-fly, <a class="indexterm" href="idmapper.html#id2627583">Primary Domain Controller</a></dt><dt>on-the-fly logon scripts, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>on-the-fly policy files, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>one direction, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a></dt><dt>one domain, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a></dt><dt>one-way trust, <a class="indexterm" href="InterdomainTrusts.html#id2642348">Interdomain Trust Facilities</a></dt><dt>only one WINS server, <a class="indexterm" href="NetworkBrowsing.html#id2605907">WINS Server Configuration</a></dt><dt>OpenGFS, <a class="indexterm" href="SambaHA.html#id2694935">The Distributed File System Challenge</a></dt><dt>OpenLDAP, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a>, <a class="indexterm" href="samba-bdc.html#id2589047">LDAP Configuration Notes</a>, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a>, <a class="indexterm" href="ChangeNotes.html#id2601340">LDAP Changes in Samba-3.0.23</a>, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a>, <a class="indexterm" href="passdb.html#id2615359">Supported LDAP Servers</a>, <a class="indexterm" href="passdb.html#id2615414">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="passdb.html#id2615649">OpenLDAP Configuration</a>, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>OpenLDAP backend, <a class="indexterm" href="passdb.html#id2609356">Backward Compatibility Account Storage Systems</a></dt><dt>OpenSSL, <a class="indexterm" href="SWAT.html#id2704171">Securing SWAT through SSL</a>, <a class="indexterm" href="ch-ldap-tls.html#s1-config-ldap-tls-certs">Generating the Certificate Authority</a></dt><dt>operating costs, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>operating system search path, <a class="indexterm" href="SWAT.html#id2703604">Locating the SWAT File</a></dt><dt>oplock, <a class="indexterm" href="SambaHA.html#id2694935">The Distributed File System Challenge</a></dt><dt>oplock break, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a>, <a class="indexterm" href="locking.html#id2638741">Beware of Force User</a></dt><dt>oplock handling, <a class="indexterm" href="SambaHA.html#id2695062">Restrictive Constraints on Distributed File Systems</a></dt><dt>oplock mechanism, <a class="indexterm" href="locking.html#id2638829">Advanced Samba Oplocks Parameters</a></dt><dt>oplock messages, <a class="indexterm" href="SambaHA.html#id2695272">Required Modifications to Samba</a></dt><dt>oplock parameters, <a class="indexterm" href="locking.html#id2638829">Advanced Samba Oplocks Parameters</a></dt><dt>oplocks, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>oplocks disabled, <a class="indexterm" href="locking.html#id2638644">Multiuser Databases</a></dt><dt>oplocks management, <a class="indexterm" href="locking.html#id2638685">PDM Data Shares</a></dt><dt>opportunistic locking, <a class="indexterm" href="locking.html#id2637637">Features and Benefits</a>, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>Opportunistic locking, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>optional, <a class="indexterm" href="pam.html#id2688266">Anatomy of /etc/pam.d Entries</a></dt><dt>ordinary connection, <a class="indexterm" href="InterdomainTrusts.html#id2642897">Samba as the Trusting Domain</a></dt><dt>Organization for the Advancement of Structured Information Standards (see OASIS)</dt><dt>organizational directory, <a class="indexterm" href="domain-member.html#ads-create-machine-account">Create the Computer Account</a></dt><dt>organizational unit, <a class="indexterm" href="domain-member.html#ads-create-machine-account">Create the Computer Account</a> (see OU)</dt><dt>os level, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a></dt><dt>OSS/Free Software, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a></dt><dt>other, <a class="indexterm" href="AccessControls.html#id2633292">File and Directory Access Control</a></dt><dt>output duplexing, <a class="indexterm" href="CUPS-printing.html#id2659497">pstops</a></dt><dt>outside threat, <a class="indexterm" href="securing-samba.html#id2640364">Using Host-Based Protection</a></dt><dt>own home directory, <a class="indexterm" href="securing-samba.html#id2641220">Why Can Users Access Other Users' Home Directories?</a></dt><dt>ownership, <a class="indexterm" href="AccessControls.html#id2635654">Viewing File Ownership</a></dt><dt>ownership cost, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>ownership rights, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a></dt></dl></div><div class="indexdiv"><h3>P</h3><dl><dt>p-node, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a></dt><dt>package, <a class="indexterm" href="install.html#id2574356">Example Configuration</a></dt><dt>packages, <a class="indexterm" href="install.html#id2573105">Obtaining and Installing Samba</a></dt><dt>packet sniffer, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a></dt><dt>packet trace, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a></dt><dt>PADL, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id2629264">IDMAP Storage in LDAP Using Winbind</a></dt><dt>PADL Software, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a></dt><dt>page description languages (see PDL)</dt><dt>pager program, <a class="indexterm" href="classicalprinting.html#id2644675">Simple Print Configuration</a></dt><dt>page_log, <a class="indexterm" href="CUPS-printing.html#id2670005">The page_log File Syntax</a></dt><dt>paid-for support, <a class="indexterm" href="ch46.html">Samba Support</a></dt><dt>PAM, <a class="indexterm" href="StandAloneServer.html#id2596329">Background</a>, <a class="indexterm" href="passdb.html#id2609356">Backward Compatibility Account Storage Systems</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="passdb.html#id2614612">Plaintext</a>, <a class="indexterm" href="passdb.html#id2615111">ldapsam</a>, <a class="indexterm" href="winbind.html#id2676186">How Winbind Works</a>, <a class="indexterm" href="winbind.html#id2676603">Pluggable Authentication Modules</a>, <a class="indexterm" href="winbind.html#id2677024">Requirements</a>, <a class="indexterm" href="winbind.html#id2677176">Testing Things Out</a>, <a class="indexterm" href="winbind.html#id2677263">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a>, <a class="indexterm" href="winbind.html#id2678970">Configure Winbind and PAM</a>, <a class="indexterm" href="winbind.html#id2679639">Conclusion</a>, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a>, <a class="indexterm" href="pam.html#id2688133">Technical Discussion</a></dt><dt>PAM authentication module, <a class="indexterm" href="pam.html#id2688187">PAM Configuration Syntax</a></dt><dt>PAM configuration, <a class="indexterm" href="winbind.html#id2677024">Requirements</a></dt><dt>PAM management, <a class="indexterm" href="pam.html">PAM-Based Distributed Authentication</a></dt><dt>PAM module, <a class="indexterm" href="winbind.html#id2677666">NSS Winbind on AIX</a></dt><dt>PAM modules, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>PAM-capable, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>pam-devel, <a class="indexterm" href="winbind.html#id2677263">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a></dt><dt>PAM-enabled, <a class="indexterm" href="winbind.html#id2675862">What Winbind Provides</a>, <a class="indexterm" href="pam.html">PAM-Based Distributed Authentication</a>, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>PAM-specific tokens, <a class="indexterm" href="pam.html#id2688187">PAM Configuration Syntax</a></dt><dt>pam_krb5.so, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>pam_ldap, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a></dt><dt>pam_ldap.so, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>pam_mkhomedir, <a class="indexterm" href="winbind.html#id2679136">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>pam_ncp_auth.so, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>pam_pwdb.so, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>pam_securetty.so, <a class="indexterm" href="winbind.html#id2679136">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>pam_smbpass.so, <a class="indexterm" href="pam.html">PAM-Based Distributed Authentication</a>, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>pam_smbpasswd.so, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>pam_smb_auth.so, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>pam_unix.so, <a class="indexterm" href="winbind.html#id2679136">Linux/FreeBSD-Specific PAM Configuration</a>, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>pam_unix2.so, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>pam_userdb.so, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>pam_winbind.so, <a class="indexterm" href="winbind.html#id2676603">Pluggable Authentication Modules</a>, <a class="indexterm" href="winbind.html#id2678970">Configure Winbind and PAM</a>, <a class="indexterm" href="winbind.html#id2679136">Linux/FreeBSD-Specific PAM Configuration</a>, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>parameters, <a class="indexterm" href="classicalprinting.html#id2645155">Rapid Configuration Validation</a></dt><dt>paranoid, <a class="indexterm" href="winbind.html#id2678214">Starting and Testing the winbindd Daemon</a></dt><dt>passdb, <a class="indexterm" href="samba-bdc.html#id2590743">Machine Accounts Keep Expiring</a></dt><dt>passdb backend, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a>, <a class="indexterm" href="ChangeNotes.html#id2601219">Group Mapping Changes in Samba-3.0.23</a>, <a class="indexterm" href="passdb.html">Account Information Databases</a>, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a>, <a class="indexterm" href="passdb.html#id2612037">The smbpasswd Tool</a>, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a>, <a class="indexterm" href="passdb.html#id2613544">Deleting Accounts</a>, <a class="indexterm" href="passdb.html#id2614953">tdbsam</a>, <a class="indexterm" href="groupmapping.html#id2619564">Default Users, Groups, and Relative Identifiers</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id2627583">Primary Domain Controller</a>, <a class="indexterm" href="rights.html#id2631943">The Administrator Domain SID</a>, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a>, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2701043">New Suffix for Searching</a></dt><dt>passdb backends, <a class="indexterm" href="passdb.html#id2614688">smbpasswd: Encrypted Password Database</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a></dt><dt>passed across the network, <a class="indexterm" href="passdb.html#id2610423">Advantages of Encrypted Passwords</a></dt><dt>passwd, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="passdb.html#id2612037">The smbpasswd Tool</a>, <a class="indexterm" href="winbind.html#id2676371">Name Service Switch</a>, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>password, <a class="indexterm" href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a>, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a>, <a class="indexterm" href="InterdomainTrusts.html#id2642897">Samba as the Trusting Domain</a>, <a class="indexterm" href="pam.html#id2688266">Anatomy of /etc/pam.d Entries</a></dt><dd><dl><dt>plaintext, <a class="indexterm" href="samba-pdc.html#id2586627">The Special Case of Windows 9x/Me</a></dt></dl></dd><dt>password aging, <a class="indexterm" href="passdb.html#acctmgmttools">Account Management Tools</a></dt><dt>password assigned, <a class="indexterm" href="InterdomainTrusts.html#id2642263">Completing an NT4 Domain Trust</a></dt><dt>password backend, <a class="indexterm" href="StandAloneServer.html#RefDocServer">Reference Documentation Server</a>, <a class="indexterm" href="passdb.html#id2613222">Listing User and Machine Accounts</a></dt><dt>password backends, <a class="indexterm" href="passdb.html">Account Information Databases</a></dt><dt>password change facility, <a class="indexterm" href="SWAT.html#xinetd">Enabling SWAT for Use</a></dt><dt>password database, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a>, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></dt><dt>password encryption, <a class="indexterm" href="passdb.html#id2614612">Plaintext</a></dt><dt>password expiration, <a class="indexterm" href="passdb.html#id2614688">smbpasswd: Encrypted Password Database</a></dt><dt>password expired, <a class="indexterm" href="passdb.html#id2613628">Changing User Accounts</a></dt><dt>password history, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></dt><dt>password management, <a class="indexterm" href="winbind.html#id2676603">Pluggable Authentication Modules</a></dt><dt>password prompt, <a class="indexterm" href="passdb.html#id2610423">Advantages of Encrypted Passwords</a></dt><dt>password scheme, <a class="indexterm" href="passdb.html#id2610108">Important Notes About Security</a></dt><dt>password server, <a class="indexterm" href="ServerType.html#id2582318">Server Security (User Level Security)</a>, <a class="indexterm" href="domain-member.html#id2594193">Configure smb.conf</a></dt><dt>password uniqueness, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></dt><dt>passwords, <a class="indexterm" href="winbind.html#id2675773">Introduction</a></dt><dt>patch, <a class="indexterm" href="bugreport.html#id2709120">Patches</a></dt><dt>path specified, <a class="indexterm" href="domain-member.html#id2595873">Adding Machine to Domain Fails</a></dt><dt>pauses, <a class="indexterm" href="speed.html#id2713039">Samba Performance is Very Slow</a></dt><dt>PBM, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></dt><dt>PCL, <a class="indexterm" href="CUPS-printing.html#gdipost">GDI on Windows, PostScript on UNIX</a>, <a class="indexterm" href="CUPS-printing.html#id2657342">Windows Drivers, GDI, and EMF</a>, <a class="indexterm" href="CUPS-printing.html#id2657520">UNIX Printfile Conversion and GUI Basics</a>, <a class="indexterm" href="CUPS-printing.html#id2662453">Printing with Interface Scripts</a>, <a class="indexterm" href="CUPS-printing.html#id2662698">Driver Execution on the Server</a>, <a class="indexterm" href="CUPS-printing.html#id2663091">Network PostScript RIP</a></dt><dt>pdbedit, <a class="indexterm" href="FastStart.html#id2578515">Example: Engineering Office</a>, <a class="indexterm" href="passdb.html#acctmgmttools">Account Management Tools</a>, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a>, <a class="indexterm" href="passdb.html#id2613105">User Account Management</a>, <a class="indexterm" href="passdb.html#id2613222">Listing User and Machine Accounts</a>, <a class="indexterm" href="passdb.html#id2613456">Adding User Accounts</a>, <a class="indexterm" href="passdb.html#id2613544">Deleting Accounts</a>, <a class="indexterm" href="passdb.html#id2613628">Changing User Accounts</a>, <a class="indexterm" href="passdb.html#TOSHARG-acctflags">Account Flags Management</a>, <a class="indexterm" href="passdb.html#id2614433">Account Import/Export</a>, <a class="indexterm" href="rights.html#id2631943">The Administrator Domain SID</a>, <a class="indexterm" href="PolicyMgmt.html#id2682597">Samba PDC</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2698610">Quick Migration Guide</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2700456">Passdb Backends and Authentication</a>, <a class="indexterm" href="NT4Migration.html#id2702346">Steps in Migration Process</a>, <a class="indexterm" href="NT4Migration.html#id2702901">Samba-3 Implementation Choices</a></dt><dt>pdb_ldap, <a class="indexterm" href="samba-bdc.html#id2590958">Can I Do This All with LDAP?</a></dt><dt>PDC, <a class="indexterm" href="ServerType.html#id2581638">Domain Security Mode (User-Level Security)</a>, <a class="indexterm" href="ServerType.html#id2581855">Example Configuration</a>, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a>, <a class="indexterm" href="samba-pdc.html#id2587021">Security Mode and Master Browsers</a>, <a class="indexterm" href="samba-bdc.html#id2587890">Features and Benefits</a>, <a class="indexterm" href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a>, <a class="indexterm" href="samba-bdc.html#id2588796">Example PDC Configuration</a>, <a class="indexterm" href="samba-bdc.html#id2589047">LDAP Configuration Notes</a>, <a class="indexterm" href="samba-bdc.html#id2589470">What Qualifies a Domain Controller on the Network?</a>, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a>, <a class="indexterm" href="samba-bdc.html#id2590243">Example Configuration</a>, <a class="indexterm" href="samba-bdc.html#id2590798">Can Samba Be a Backup Domain Controller to an NT4 PDC?</a>, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="domain-member.html#id2593911">Why Is This Better Than security = server?</a>, <a class="indexterm" href="domain-member.html#id2595873">Adding Machine to Domain Fails</a>, <a class="indexterm" href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id2604354">Domain Browsing Configuration</a>, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a>, <a class="indexterm" href="passdb.html#id2610423">Advantages of Encrypted Passwords</a>, <a class="indexterm" href="passdb.html#id2614953">tdbsam</a>, <a class="indexterm" href="passdb.html#id2616879">LDAP Special Attributes for sambaSamAccounts</a>, <a class="indexterm" href="groupmapping.html#id2618354">Discussion</a>, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id2627583">Primary Domain Controller</a>, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a>, <a class="indexterm" href="InterdomainTrusts.html#id2642897">Samba as the Trusting Domain</a>, <a class="indexterm" href="CUPS-printing.html#id2665457">cupsaddsmb with a Samba PDC</a>, <a class="indexterm" href="winbind.html#id2676061">Handling of Foreign SIDs</a>, <a class="indexterm" href="winbind.html#id2676237">Microsoft Remote Procedure Calls</a>, <a class="indexterm" href="winbind.html#id2676603">Pluggable Authentication Modules</a>, <a class="indexterm" href="winbind.html#id2676847">Result Caching</a>, <a class="indexterm" href="winbind.html#id2676910">Introduction</a>, <a class="indexterm" href="winbind.html#id2677976">Join the Samba Server to the PDC Domain</a>, <a class="indexterm" href="winbind.html#id2678214">Starting and Testing the winbindd Daemon</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a>, <a class="indexterm" href="NT4Migration.html#id2701821">Domain Layout</a>, <a class="indexterm" href="problems.html#id2708029">Getting Mailing List Help</a>, <a class="indexterm" href="speed.html#id2712944">Corrupt tdb Files</a></dt><dt>PDF, <a class="indexterm" href="CUPS-printing.html#id2655828">Simple smb.conf Settings for CUPS</a>, <a class="indexterm" href="CUPS-printing.html#id2657342">Windows Drivers, GDI, and EMF</a>, <a class="indexterm" href="CUPS-printing.html#id2658032">PostScript Printer Description (PPD) Specification</a>, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a>, <a class="indexterm" href="CUPS-printing.html#id2659310">Prefilters</a>, <a class="indexterm" href="CUPS-printing.html#id2661902">Examples for Filtering Chains</a></dt><dt>pdf, <a class="indexterm" href="CUPS-printing.html#id2658945">MIME Type Conversion Rules</a></dt><dt>PDF distilling, <a class="indexterm" href="CUPS-printing.html#id2658032">PostScript Printer Description (PPD) Specification</a></dt><dt>PDF filter, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dt>pdftops, <a class="indexterm" href="CUPS-printing.html#id2658945">MIME Type Conversion Rules</a>, <a class="indexterm" href="CUPS-printing.html#id2661902">Examples for Filtering Chains</a></dt><dt>pdftosocket, <a class="indexterm" href="CUPS-printing.html#id2661902">Examples for Filtering Chains</a></dt><dt>PDL, <a class="indexterm" href="CUPS-printing.html#gdipost">GDI on Windows, PostScript on UNIX</a>, <a class="indexterm" href="CUPS-printing.html#post-and-ghost">PostScript and Ghostscript</a>, <a class="indexterm" href="CUPS-printing.html#id2658032">PostScript Printer Description (PPD) Specification</a></dt><dt>PDM, <a class="indexterm" href="locking.html#id2638685">PDM Data Shares</a></dt><dt>peer domain, <a class="indexterm" href="InterdomainTrusts.html#id2642557">Configuring Samba NT-Style Domain Trusts</a></dt><dt>Peer node, <a class="indexterm" href="NetworkBrowsing.html#id2606281">Static WINS Entries</a></dt><dt>per-share access control, <a class="indexterm" href="AccessControls.html#id2635030">Access Controls on Shares</a></dt><dt>performance, <a class="indexterm" href="largefile.html">Handling Large Directories</a>, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>performance advantage, <a class="indexterm" href="locking.html#id2637637">Features and Benefits</a></dt><dt>performance degradation, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>performance enhancement, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>performance improvement, <a class="indexterm" href="locking.html#id2638596">Slow and/or Unreliable Networks</a></dt><dt>performance-based, <a class="indexterm" href="passdb.html#id2614953">tdbsam</a></dt><dt>performed as root, <a class="indexterm" href="rights.html#id2630793">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>perimeter firewall, <a class="indexterm" href="securing-samba.html#id2640202">Features and Benefits</a></dt><dt>permanent changes, <a class="indexterm" href="NT4Migration.html#id2702901">Samba-3 Implementation Choices</a></dt><dt>Permanent name, <a class="indexterm" href="NetworkBrowsing.html#id2606281">Static WINS Entries</a></dt><dt>permissions, <a class="indexterm" href="securing-samba.html#id2641220">Why Can Users Access Other Users' Home Directories?</a>, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dd><dl><dt>file/directory ACLs, <a class="indexterm" href="AccessControls.html#id2635537">Managing UNIX Permissions Using NT Security Dialogs</a></dt><dt>share, <a class="indexterm" href="AccessControls.html#id2633958">Share Definition Access Controls</a></dt><dt>share ACLs, <a class="indexterm" href="AccessControls.html#id2635030">Access Controls on Shares</a></dt><dt>UNIX file and directory, <a class="indexterm" href="AccessControls.html#id2632624">Features and Benefits</a></dt></dl></dd><dt>Permissions, <a class="indexterm" href="AccessControls.html#id2635301">Windows 200x/XP</a></dt><dt>permissions and controls, <a class="indexterm" href="AccessControls.html#id2632624">Features and Benefits</a></dt><dt>PGP, <a class="indexterm" href="compiling.html#id2709603">Verifying Samba's PGP Signature</a></dt><dt>phasing out NetBIOS, <a class="indexterm" href="NetworkBrowsing.html#netdiscuss">Discussion</a></dt><dt>Photo-CD, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></dt><dt>physical locations, <a class="indexterm" href="msdfs.html#id2643489">Features and Benefits</a></dt><dt>physical network transport layer, <a class="indexterm" href="integrate-ms-networks.html#id2690637">/etc/hosts</a></dt><dt>PID, <a class="indexterm" href="bugreport.html#id2708995">Attaching to a Running Process</a></dt><dt>pid directory, <a class="indexterm" href="cfgsmarts.html#id2696226">Multiple Server Hosting</a></dt><dt>ping, <a class="indexterm" href="NT4Migration.html#id2701821">Domain Layout</a>, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>pipe device, <a class="indexterm" href="AccessControls.html#id2633292">File and Directory Access Control</a></dt><dt>PJL, <a class="indexterm" href="CUPS-printing.html#id2663091">Network PostScript RIP</a>, <a class="indexterm" href="CUPS-printing.html#id2664641">Windows CUPS PostScript Driver Versus Adobe Driver</a>, <a class="indexterm" href="CUPS-printing.html#id2669864">Adobe and CUPS PostScript Drivers for Windows Clients</a></dt><dt>PJL-header, <a class="indexterm" href="CUPS-printing.html#id2669864">Adobe and CUPS PostScript Drivers for Windows Clients</a></dt><dt>plague network users, <a class="indexterm" href="ClientConfig.html#id2597677">TCP/IP Configuration</a></dt><dt>plain-text</dt><dd><dl><dt>passwords, <a class="indexterm" href="ServerType.html#id2582616">Password Checking</a></dt></dl></dd><dt>plaintext, <a class="indexterm" href="passdb.html#id2609356">Backward Compatibility Account Storage Systems</a></dt><dt>plaintext authentication, <a class="indexterm" href="passdb.html#id2609356">Backward Compatibility Account Storage Systems</a></dt><dt>plaintext password, <a class="indexterm" href="samba-pdc.html#id2586627">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="samba-bdc.html#id2590853">How Do I Replicate the smbpasswd File?</a></dt><dt>plaintext passwords, <a class="indexterm" href="passdb.html#passdbtech">Technical Information</a>, <a class="indexterm" href="passdb.html#id2610108">Important Notes About Security</a></dt><dt>platforms, <a class="indexterm" href="Portability.html">Portability</a></dt><dt>PLP, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>Pluggable Authentication Modules (see PAM)</dt><dt>PNG, <a class="indexterm" href="CUPS-printing.html#id2657878">Ghostscript: The Software RIP for Non-PostScript Printers</a>, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></dt><dt>PNM, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></dt><dt>point 'n' print, <a class="indexterm" href="CUPS-printing.html#id2656742">Installation of Windows Client Drivers</a>, <a class="indexterm" href="CUPS-printing.html#id2664859">Run cupsaddsmb (Quiet Mode)</a>, <a class="indexterm" href="CUPS-printing.html#id2666661">Manual Driver Installation in 15 Steps</a></dt><dt>Point'n'Print, <a class="indexterm" href="classicalprinting.html#id2644133">Features and Benefits</a>, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a>, <a class="indexterm" href="classicalprinting.html#id2648726">Point'n'Print Client Drivers on Samba Servers</a>, <a class="indexterm" href="classicalprinting.html#id2650835">smbclient to Confirm Driver Installation</a></dt><dt>point'n'print, <a class="indexterm" href="CUPS-printing.html#id2657029">Driver Upload Methods</a>, <a class="indexterm" href="CUPS-printing.html#id2660577">The Role of cupsomatic/foomatic</a>, <a class="indexterm" href="CUPS-printing.html#id2665619">Installing the PostScript Driver on a Client</a></dt><dt>Poledit, <a class="indexterm" href="PolicyMgmt.html#id2681990">Administration of Windows 200x/XP Policies</a></dt><dt>poledit.exe, <a class="indexterm" href="PolicyMgmt.html#id2681239">Creating and Managing System Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id2681565">Windows NT4-Style Policy Files</a>, <a class="indexterm" href="PolicyMgmt.html#id2681990">Administration of Windows 200x/XP Policies</a></dt><dt>Policies, <a class="indexterm" href="PolicyMgmt.html#id2681239">Creating and Managing System Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id2682235">Managing Account/User Policies</a></dt><dt>policies, <a class="indexterm" href="NT4Migration.html#id2702901">Samba-3 Implementation Choices</a></dt><dt>policy editor, <a class="indexterm" href="PolicyMgmt.html#id2681239">Creating and Managing System Policies</a></dt><dt>Policy Editor, <a class="indexterm" href="PolicyMgmt.html#id2681565">Windows NT4-Style Policy Files</a></dt><dt>policy file , <a class="indexterm" href="PolicyMgmt.html#id2682235">Managing Account/User Policies</a></dt><dt>policy files, <a class="indexterm" href="domain-member.html#id2591202">Features and Benefits</a></dt><dt>policy settings, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a></dt><dt>port 135, <a class="indexterm" href="NetworkBrowsing.html#id2605217">Multiple Interfaces</a></dt><dt>Port 135/TCP, <a class="indexterm" href="securing-samba.html#firewallports">Using a Firewall</a></dt><dt>port 137, <a class="indexterm" href="NetworkBrowsing.html#id2605217">Multiple Interfaces</a>, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>Port 137/UDP, <a class="indexterm" href="securing-samba.html#firewallports">Using a Firewall</a></dt><dt>port 138, <a class="indexterm" href="NetworkBrowsing.html#id2605217">Multiple Interfaces</a></dt><dt>Port 138/UDP, <a class="indexterm" href="securing-samba.html#firewallports">Using a Firewall</a></dt><dt>port 139, <a class="indexterm" href="NetworkBrowsing.html#id2605217">Multiple Interfaces</a></dt><dt>Port 139/TCP, <a class="indexterm" href="securing-samba.html#firewallports">Using a Firewall</a></dt><dt>port 445, <a class="indexterm" href="NetworkBrowsing.html#id2605217">Multiple Interfaces</a></dt><dt>Port 445/TCP, <a class="indexterm" href="securing-samba.html#firewallports">Using a Firewall</a></dt><dt>ports, <a class="indexterm" href="classicalprinting.html#id2644958">Verifying Configuration with testparm</a>, <a class="indexterm" href="problems.html#id2707522">Ethereal</a></dt><dt>POSIX, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a>, <a class="indexterm" href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="passdb.html#id2616531">Accounts and Groups Management</a>, <a class="indexterm" href="NetCommand.html#id2621645">Adding or Creating a New Group</a></dt><dt>POSIX account, <a class="indexterm" href="passdb.html#id2613105">User Account Management</a>, <a class="indexterm" href="NetCommand.html#id2622967">UNIX and Windows User Management</a></dt><dt>POSIX ACLs, <a class="indexterm" href="AccessControls.html#id2633292">File and Directory Access Control</a>, <a class="indexterm" href="AccessControls.html#id2633704">Protecting Directories and Files from Deletion</a></dt><dt>POSIX ACLS, <a class="indexterm" href="NT4Migration.html#id2702901">Samba-3 Implementation Choices</a></dt><dt>POSIX identity, <a class="indexterm" href="passdb.html#id2611451">Caution Regarding LDAP and Samba</a></dt><dt>POSIX locks, <a class="indexterm" href="SambaHA.html#id2695132">Server Pool Communications</a></dt><dt>POSIX semantics, <a class="indexterm" href="SambaHA.html#id2695132">Server Pool Communications</a></dt><dt>POSIX user accounts, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a></dt><dt>posixAccount, <a class="indexterm" href="passdb.html#id2615414">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="passdb.html#id2615649">OpenLDAP Configuration</a></dt><dt>posixGroup, <a class="indexterm" href="passdb.html#id2615649">OpenLDAP Configuration</a>, <a class="indexterm" href="passdb.html#id2616531">Accounts and Groups Management</a></dt><dt>PostScript, <a class="indexterm" href="CUPS-printing.html#id2655828">Simple smb.conf Settings for CUPS</a>, <a class="indexterm" href="CUPS-printing.html#id2657150">Advanced Intelligent Printing with PostScript Driver Download</a>, <a class="indexterm" href="CUPS-printing.html#gdipost">GDI on Windows, PostScript on UNIX</a>, <a class="indexterm" href="CUPS-printing.html#id2657342">Windows Drivers, GDI, and EMF</a>, <a class="indexterm" href="CUPS-printing.html#id2657520">UNIX Printfile Conversion and GUI Basics</a>, <a class="indexterm" href="CUPS-printing.html#post-and-ghost">PostScript and Ghostscript</a>, <a class="indexterm" href="CUPS-printing.html#id2658032">PostScript Printer Description (PPD) Specification</a>, <a class="indexterm" href="CUPS-printing.html#id2658122">Using Windows-Formatted Vendor PPDs</a>, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a>, <a class="indexterm" href="CUPS-printing.html#id2659310">Prefilters</a>, <a class="indexterm" href="CUPS-printing.html#id2659497">pstops</a>, <a class="indexterm" href="CUPS-printing.html#id2661282">PostScript Printer Descriptions for Non-PostScript Printers</a>, <a class="indexterm" href="CUPS-printing.html#id2661902">Examples for Filtering Chains</a>, <a class="indexterm" href="CUPS-printing.html#id2662698">Driver Execution on the Server</a>, <a class="indexterm" href="CUPS-printing.html#id2663091">Network PostScript RIP</a>, <a class="indexterm" href="CUPS-printing.html#id2663364">CUPS: A &#8220;Magical Stone&#8221;?</a>, <a class="indexterm" href="CUPS-printing.html#id2663407">PostScript Drivers with No Major Problems, Even in Kernel
-Mode</a>, <a class="indexterm" href="CUPS-printing.html#id2663896">CUPS &#8220;PostScript Driver for Windows NT/200x/XP&#8221;</a></dt><dd><dl><dt>(see also Ghostscript)</dt><dt>RIP, <a class="indexterm" href="CUPS-printing.html#post-and-ghost">PostScript and Ghostscript</a></dt></dl></dd><dt>PostScript driver, <a class="indexterm" href="classicalprinting.html#id2650617">Installing Driver Files into [print$]</a></dt><dt>PostScript interpreter, <a class="indexterm" href="CUPS-printing.html#post-and-ghost">PostScript and Ghostscript</a></dt><dt>PostScript Printer Description (see PPD)</dt><dt>PostScript printers, <a class="indexterm" href="CUPS-printing.html#id2670834">Printing from CUPS to Windows-Attached Printers</a></dt><dt>potential master browsers, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></dt><dt>potential printer, <a class="indexterm" href="classicalprinting.html#id2649234">[print$] Stanza Parameters</a></dt><dt>Power Users, <a class="indexterm" href="rights.html#id2632126">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>powerful, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a></dt><dt>PPD, <a class="indexterm" href="classicalprinting.html#id2650617">Installing Driver Files into [print$]</a>, <a class="indexterm" href="CUPS-printing.html#post-and-ghost">PostScript and Ghostscript</a>, <a class="indexterm" href="CUPS-printing.html#id2658032">PostScript Printer Description (PPD) Specification</a>, <a class="indexterm" href="CUPS-printing.html#id2658242">CUPS Also Uses PPDs for Non-PostScript Printers</a>, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a>, <a class="indexterm" href="CUPS-printing.html#id2660894">&#8220;Raw&#8221; Printing</a>, <a class="indexterm" href="CUPS-printing.html#id2661282">PostScript Printer Descriptions for Non-PostScript Printers</a>, <a class="indexterm" href="CUPS-printing.html#id2663181">PPDs for Non-PS Printers on UNIX</a>, <a class="indexterm" href="CUPS-printing.html#id2663226">PPDs for Non-PS Printers on Windows</a>, <a class="indexterm" href="CUPS-printing.html#id2663364">CUPS: A &#8220;Magical Stone&#8221;?</a>, <a class="indexterm" href="CUPS-printing.html#id2665619">Installing the PostScript Driver on a Client</a>, <a class="indexterm" href="CUPS-printing.html#id2669864">Adobe and CUPS PostScript Drivers for Windows Clients</a>, <a class="indexterm" href="CUPS-printing.html#id2670834">Printing from CUPS to Windows-Attached Printers</a></dt><dd><dl><dt>CUPS (see CUPS-PPD)</dt></dl></dd><dt>PPD-aware, <a class="indexterm" href="CUPS-printing.html#post-and-ghost">PostScript and Ghostscript</a></dt><dt>PPDs, <a class="indexterm" href="CUPS-printing.html#id2658122">Using Windows-Formatted Vendor PPDs</a>, <a class="indexterm" href="CUPS-printing.html#id2660577">The Role of cupsomatic/foomatic</a>, <a class="indexterm" href="CUPS-printing.html#id2668823">The Grand Unification Achieved</a></dt><dt>PPP, <a class="indexterm" href="securing-samba.html#id2640578">Using Interface Protection</a></dt><dt>precedence, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></dt><dt>preferred master, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a></dt><dt>prefilter, <a class="indexterm" href="CUPS-printing.html#id2659934">imagetops and imagetoraster</a></dt><dt>prefilters, <a class="indexterm" href="CUPS-printing.html#id2659310">Prefilters</a></dt><dt>primary domain controller, <a class="indexterm" href="cfgsmarts.html#id2697638">Multiple Virtual Server Hosting</a></dt><dt>primary group, <a class="indexterm" href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a></dt><dt>Primary Logon, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a></dt><dt>Primary WINS Server, <a class="indexterm" href="NetworkBrowsing.html#id2605907">WINS Server Configuration</a></dt><dt>print, <a class="indexterm" href="classicalprinting.html#id2644958">Verifying Configuration with testparm</a></dt><dd><dl><dt>queue, <a class="indexterm" href="install.html#id2573195">Configuration File Syntax</a></dt><dt>spooler, <a class="indexterm" href="install.html#id2573195">Configuration File Syntax</a></dt></dl></dd><dt>print accounting, <a class="indexterm" href="classicalprinting.html#id2644133">Features and Benefits</a></dt><dt>print command, <a class="indexterm" href="classicalprinting.html#id2647431">Print Commands</a></dt><dt>print commands, <a class="indexterm" href="classicalprinting.html#id2648051">Custom Print Commands</a></dt><dt>print configuration, <a class="indexterm" href="classicalprinting.html#id2644356">Technical Introduction</a>, <a class="indexterm" href="classicalprinting.html#id2644958">Verifying Configuration with testparm</a></dt><dt>print environment, <a class="indexterm" href="classicalprinting.html#id2644675">Simple Print Configuration</a></dt><dt>print filtering, <a class="indexterm" href="classicalprinting.html#id2644356">Technical Introduction</a></dt><dt>print job, <a class="indexterm" href="classicalprinting.html#id2648051">Custom Print Commands</a></dt><dt>print jobs, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>print processing, <a class="indexterm" href="classicalprinting.html#id2644356">Technical Introduction</a></dt><dt>print queue, <a class="indexterm" href="classicalprinting.html#id2648726">Point'n'Print Client Drivers on Samba Servers</a>, <a class="indexterm" href="classicalprinting.html#id2650835">smbclient to Confirm Driver Installation</a>, <a class="indexterm" href="classicalprinting.html#id2651474">Specific Driver Name Flexibility</a>, <a class="indexterm" href="CUPS-printing.html#id2660239">CUPS Backends</a></dt><dt>print quota, <a class="indexterm" href="CUPS-printing.html#id2657150">Advanced Intelligent Printing with PostScript Driver Download</a></dt><dt>print server, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="classicalprinting.html#id2644133">Features and Benefits</a></dt><dt>print service, <a class="indexterm" href="classicalprinting.html#id2644133">Features and Benefits</a></dt><dt>print spooling, <a class="indexterm" href="winbind.html#id2676237">Microsoft Remote Procedure Calls</a></dt><dt>print spooling system, <a class="indexterm" href="CUPS-printing.html#id2655341">Overview</a></dt><dt>print statistics, <a class="indexterm" href="CUPS-printing.html#id2657150">Advanced Intelligent Printing with PostScript Driver Download</a></dt><dt>print subsystem, <a class="indexterm" href="classicalprinting.html#id2644356">Technical Introduction</a>, <a class="indexterm" href="classicalprinting.html#id2647431">Print Commands</a></dt><dt>print test page, <a class="indexterm" href="classicalprinting.html#id2651745">First Client Driver Installation</a></dt><dt>printcap, <a class="indexterm" href="install.html#id2573195">Configuration File Syntax</a>, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a>, <a class="indexterm" href="classicalprinting.html#ptrsect">The [printers] Section</a></dt><dt>Printcap, <a class="indexterm" href="CUPS-printing.html#id2655466">Basic CUPS Support Configuration</a></dt><dt>printcap name, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dt>PrintcapFormat, <a class="indexterm" href="CUPS-printing.html#id2655466">Basic CUPS Support Configuration</a></dt><dt>printer attributes publishing, <a class="indexterm" href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a></dt><dt>printer default permissions, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>printer driver, <a class="indexterm" href="classicalprinting.html#id2648895">The Obsoleted [printer$] Section</a>, <a class="indexterm" href="classicalprinting.html#id2649017">Creating the [print$] Share</a>, <a class="indexterm" href="CUPS-printing.html#id2655828">Simple smb.conf Settings for CUPS</a></dt><dt>printer driver data, <a class="indexterm" href="classicalprinting.html#prt-modeset">Setting Device Modes on New Printers</a></dt><dt>printer driver file, <a class="indexterm" href="classicalprinting.html#id2648895">The Obsoleted [printer$] Section</a></dt><dt>printer driver files, <a class="indexterm" href="classicalprinting.html#id2650835">smbclient to Confirm Driver Installation</a></dt><dt>printer drivers, <a class="indexterm" href="classicalprinting.html#id2648726">Point'n'Print Client Drivers on Samba Servers</a>, <a class="indexterm" href="CUPS-printing.html#id2668823">The Grand Unification Achieved</a></dt><dt>printer icon, <a class="indexterm" href="classicalprinting.html#id2651246">Check Samba for Driver Recognition</a></dt><dt>printer management, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a></dt><dt>printer management system, <a class="indexterm" href="CUPS-printing.html#id2655341">Overview</a></dt><dt>printer migration, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a></dt><dt>printer monitor, <a class="indexterm" href="speed.html#id2713039">Samba Performance is Very Slow</a></dt><dt>printer objects, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>Printer Pooling, <a class="indexterm" href="classicalprinting.html#id2654194">Samba and Printer Ports</a></dt><dt>printer queue, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>printer share, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>printer shares , <a class="indexterm" href="classicalprinting.html#id2644958">Verifying Configuration with testparm</a>, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>printer$ share, <a class="indexterm" href="classicalprinting.html#id2648895">The Obsoleted [printer$] Section</a></dt><dt>printers, <a class="indexterm" href="install.html#id2573195">Configuration File Syntax</a>, <a class="indexterm" href="StandAloneServer.html#id2596235">Features and Benefits</a></dt><dt>Printers, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>printers admin, <a class="indexterm" href="rights.html#id2631138">Description of Privileges</a></dt><dt>Printers and Faxes, <a class="indexterm" href="classicalprinting.html#id2651246">Check Samba for Driver Recognition</a></dt><dt>printers available, <a class="indexterm" href="NetworkBrowsing.html#id2601786">What Is Browsing?</a></dt><dt>printers section, <a class="indexterm" href="classicalprinting.html#ptrsect">The [printers] Section</a></dt><dt>printing, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>printing behavior, <a class="indexterm" href="classicalprinting.html#id2644574">Printing-Related Configuration Parameters</a></dt><dt>printing calls, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>printing now, <a class="indexterm" href="speed.html#id2713039">Samba Performance is Very Slow</a></dt><dt>printing support, <a class="indexterm" href="classicalprinting.html#id2644133">Features and Benefits</a>, <a class="indexterm" href="classicalprinting.html#id2644356">Technical Introduction</a></dt><dt>printing system, <a class="indexterm" href="classicalprinting.html#id2644356">Technical Introduction</a></dt><dt>printing systems, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a></dt><dt>printing-related settings, <a class="indexterm" href="classicalprinting.html#id2644958">Verifying Configuration with testparm</a></dt><dt>printing.tdb, <a class="indexterm" href="classicalprinting.html#prt-modeset">Setting Device Modes on New Printers</a>, <a class="indexterm" href="CUPS-printing.html#id2667763">The Printing *.tdb Files</a></dt><dd><dl><dt>(see also TDB)</dt></dl></dd><dt>PrintPro (see ESP Print Pro)</dt><dt>private dir, <a class="indexterm" href="cfgsmarts.html#id2696226">Multiple Server Hosting</a></dt><dt>private groups, <a class="indexterm" href="groupmapping.html#id2618690">Warning: User Private Group Problems</a></dt><dt>private key, <a class="indexterm" href="SWAT.html#id2704171">Securing SWAT through SSL</a></dt><dt>private network, <a class="indexterm" href="securing-samba.html#id2640103">Introduction</a></dt><dt>private networks, <a class="indexterm" href="securing-samba.html#id2640364">Using Host-Based Protection</a></dt><dt>private/MACHINE.SID, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a></dt><dt>private/secrets.tdb, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a></dt><dt>privilege, <a class="indexterm" href="groupmapping.html#id2619442">Applicable Only to Versions Earlier than 3.0.11</a>, <a class="indexterm" href="rights.html#id2631138">Description of Privileges</a></dt><dt>privilege management, <a class="indexterm" href="groupmapping.html#id2619324">Important Administrative Information</a>, <a class="indexterm" href="NetCommand.html#id2623379">Administering User Rights and Privileges</a></dt><dt>privilege model, <a class="indexterm" href="rights.html#id2630518">Rights Management Capabilities</a></dt><dt>privilege-granting applications, <a class="indexterm" href="pam.html#id2688133">Technical Discussion</a></dt><dt>privileged accounts, <a class="indexterm" href="rights.html#id2630793">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>privileges, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a>, <a class="indexterm" href="domain-member.html#id2592722">Windows 200x/XP Professional Client</a>, <a class="indexterm" href="groupmapping.html#id2619442">Applicable Only to Versions Earlier than 3.0.11</a>, <a class="indexterm" href="rights.html#id2630518">Rights Management Capabilities</a>, <a class="indexterm" href="rights.html#id2631138">Description of Privileges</a>, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a>, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>privileges assigned, <a class="indexterm" href="rights.html#id2630793">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>problem report, <a class="indexterm" href="ch46.html#id2714245">Free Support</a></dt><dt>problem resolution, <a class="indexterm" href="ch46.html">Samba Support</a></dt><dt>problematic print, <a class="indexterm" href="classicalprinting.html#id2644356">Technical Introduction</a></dt><dt>Process data management, <a class="indexterm" href="locking.html#id2638685">PDM Data Shares</a></dt><dt>professional support, <a class="indexterm" href="ch46.html#id2714245">Free Support</a></dt><dt>profile, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a>, <a class="indexterm" href="samba-pdc.html#id2586627">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a>, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a>, <a class="indexterm" href="passdb.html#passdbtech">Technical Information</a></dt><dt>profile access rights, <a class="indexterm" href="ProfileMgmt.html#id2685594">Creating and Managing Group Profiles</a></dt><dt>profile contents, <a class="indexterm" href="ProfileMgmt.html#id2685003">Sharing Profiles between Windows 9x/Me and NT4/200x/XP Workstations</a></dt><dt>profile directory, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a></dt><dt>profile migration tool, <a class="indexterm" href="ProfileMgmt.html#id2685594">Creating and Managing Group Profiles</a></dt><dt>profile path, <a class="indexterm" href="samba-bdc.html#id2588796">Example PDC Configuration</a>, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a>, <a class="indexterm" href="ProfileMgmt.html#id2684328">Windows NT4 Workstation</a></dt><dt>profile sharing, <a class="indexterm" href="ProfileMgmt.html#id2685003">Sharing Profiles between Windows 9x/Me and NT4/200x/XP Workstations</a></dt><dt>Profile Type, <a class="indexterm" href="ProfileMgmt.html#id2683405">Disabling Roaming Profile Support</a></dt><dt>ProfilePath, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a></dt><dt>profiles, <a class="indexterm" href="samba-pdc.html#id2586627">The Special Case of Windows 9x/Me</a></dt><dt>Profiles, <a class="indexterm" href="PolicyMgmt.html#id2681239">Creating and Managing System Policies</a></dt><dt>project, <a class="indexterm" href="ch46.html#id2714245">Free Support</a></dt><dt>promiscuous mode, <a class="indexterm" href="problems.html#id2707665">The Windows Network Monitor</a></dt><dt>promote, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a></dt><dt>promoted, <a class="indexterm" href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a></dt><dt>propagate, <a class="indexterm" href="samba-bdc.html#id2587890">Features and Benefits</a></dt><dt>Properties, <a class="indexterm" href="ClientConfig.html#id2598942">MS Windows Me</a>, <a class="indexterm" href="ClientConfig.html#id2599975">Domain Logon Configuration: Windows 9x/Me</a></dt><dt>protect directories, <a class="indexterm" href="AccessControls.html#id2633704">Protecting Directories and Files from Deletion</a></dt><dt>protect files, <a class="indexterm" href="AccessControls.html#id2633704">Protecting Directories and Files from Deletion</a></dt><dt>protection against attackers, <a class="indexterm" href="securing-samba.html#id2640934">Using IPC$ Share-Based Denials </a></dt><dt>protocol stack settings, <a class="indexterm" href="ClientConfig.html#id2598395">MS Windows 2000</a></dt><dt>provided services, <a class="indexterm" href="ch46.html">Samba Support</a></dt><dt>provisioned, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></dt><dt>pstops, <a class="indexterm" href="CUPS-printing.html#id2659310">Prefilters</a>, <a class="indexterm" href="CUPS-printing.html#id2659497">pstops</a>, <a class="indexterm" href="CUPS-printing.html#id2661902">Examples for Filtering Chains</a>, <a class="indexterm" href="CUPS-printing.html#id2669864">Adobe and CUPS PostScript Drivers for Windows Clients</a></dt><dt>pstoraster, <a class="indexterm" href="CUPS-printing.html#id2659665">pstoraster</a>, <a class="indexterm" href="CUPS-printing.html#id2661565">cupsomatic/foomatic-rip Versus Native CUPS Printing</a>, <a class="indexterm" href="CUPS-printing.html#id2669864">Adobe and CUPS PostScript Drivers for Windows Clients</a></dt><dt>publish printers, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>publishing printers, <a class="indexterm" href="classicalprinting.html#id2645155">Rapid Configuration Validation</a></dt><dt>PulseAudio, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680529">Remote Management with ThinLinc</a></dt><dt>punching, <a class="indexterm" href="CUPS-printing.html#id2659497">pstops</a></dt><dt>purchase support, <a class="indexterm" href="ch46.html#id2714245">Free Support</a></dt><dt>put, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>pvcreate, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt></dl></div><div class="indexdiv"><h3>Q</h3><dl><dt>QNX, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>qualified problem, <a class="indexterm" href="ch46.html#id2714245">Free Support</a></dt><dt>queue control, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>quota controls, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a></dt></dl></div><div class="indexdiv"><h3>R</h3><dl><dt>RAID, <a class="indexterm" href="Backup.html#id2693846">BackupPC</a></dt><dt>random machine account password, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></dt><dt>range, <a class="indexterm" href="NetCommand.html#id2622967">UNIX and Windows User Management</a></dt><dt>range of hosts, <a class="indexterm" href="securing-samba.html#id2640364">Using Host-Based Protection</a></dt><dt>RAP, <a class="indexterm" href="NetCommand.html#id2621445">UNIX and Windows Group Management</a></dt><dt>raster, <a class="indexterm" href="CUPS-printing.html#id2659310">Prefilters</a>, <a class="indexterm" href="CUPS-printing.html#id2669139">Foomatic Database-Generated PPDs</a></dt><dt>raster driver, <a class="indexterm" href="CUPS-printing.html#id2658281">The CUPS Filtering Architecture</a></dt><dt>raster drivers, <a class="indexterm" href="CUPS-printing.html#id2659665">pstoraster</a></dt><dt>raster image processor (see RIP)</dt><dt>raster images, <a class="indexterm" href="CUPS-printing.html#id2657520">UNIX Printfile Conversion and GUI Basics</a></dt><dt>rasterization, <a class="indexterm" href="CUPS-printing.html#id2659665">pstoraster</a>, <a class="indexterm" href="CUPS-printing.html#id2661565">cupsomatic/foomatic-rip Versus Native CUPS Printing</a></dt><dt>rastertoalps, <a class="indexterm" href="CUPS-printing.html#id2660019">rasterto [printers specific]</a></dt><dt>rastertobj, <a class="indexterm" href="CUPS-printing.html#id2660019">rasterto [printers specific]</a></dt><dt>rastertoepson, <a class="indexterm" href="CUPS-printing.html#id2660019">rasterto [printers specific]</a>, <a class="indexterm" href="CUPS-printing.html#id2661902">Examples for Filtering Chains</a></dt><dt>rastertoescp, <a class="indexterm" href="CUPS-printing.html#id2660019">rasterto [printers specific]</a></dt><dt>rastertohp, <a class="indexterm" href="CUPS-printing.html#id2660019">rasterto [printers specific]</a></dt><dt>rastertopcl, <a class="indexterm" href="CUPS-printing.html#id2660019">rasterto [printers specific]</a></dt><dt>rastertoprinter, <a class="indexterm" href="CUPS-printing.html#id2660019">rasterto [printers specific]</a></dt><dt>rastertosomething, <a class="indexterm" href="CUPS-printing.html#id2661565">cupsomatic/foomatic-rip Versus Native CUPS Printing</a></dt><dt>rastertoturboprint, <a class="indexterm" href="CUPS-printing.html#id2660019">rasterto [printers specific]</a></dt><dt>raw mode, <a class="indexterm" href="CUPS-printing.html#id2661002">application/octet-stream Printing</a></dt><dt>raw print, <a class="indexterm" href="CUPS-printing.html#id2665538">cupsaddsmb Flowchart</a></dt><dt>raw printers, <a class="indexterm" href="CUPS-printing.html#id2655341">Overview</a></dt><dt>raw printing, <a class="indexterm" href="FastStart.html#id2576283">Anonymous Print Server</a>, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="CUPS-printing.html#id2656507">Raw Print Serving: Vendor Drivers on Windows Clients</a>, <a class="indexterm" href="CUPS-printing.html#cups-raw">Explicitly Enable &#8220;raw&#8221; Printing for application/octet-stream</a></dt><dt>raw SMB, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a></dt><dt>raw SMB over TCP/IP, <a class="indexterm" href="NetworkBrowsing.html#id2602859">TCP/IP without NetBIOS</a></dt><dt>rawprinter, <a class="indexterm" href="CUPS-printing.html#id2660894">&#8220;Raw&#8221; Printing</a></dt><dt>rcp, <a class="indexterm" href="Backup.html#id2694017">Rsync</a></dt><dt>rdesktop, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a></dt><dt>rdesktop/RDP, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a></dt><dt>read, <a class="indexterm" href="AccessControls.html#id2633292">File and Directory Access Control</a></dt><dt>read directory into memory, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>read only, <a class="indexterm" href="VFS.html#fakeperms">fake_perms</a></dt><dd><dl><dt>server, <a class="indexterm" href="FastStart.html#anon-ro">Anonymous Read-Only Document Server</a></dt></dl></dd><dt>Read-ahead, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>read-only, <a class="indexterm" href="StandAloneServer.html#id2596235">Features and Benefits</a>, <a class="indexterm" href="StandAloneServer.html#RefDocServer">Reference Documentation Server</a></dt><dt>read-only access, <a class="indexterm" href="idmapper.html#id2627818">Backup Domain Controller</a>, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></dt><dt>read-only files, <a class="indexterm" href="StandAloneServer.html#id2596235">Features and Benefits</a></dt><dt>read-write access, <a class="indexterm" href="classicalprinting.html#id2648895">The Obsoleted [printer$] Section</a></dt><dt>realm, <a class="indexterm" href="ServerType.html#id2582161">ADS Security Mode (User-Level Security)</a>, <a class="indexterm" href="samba-bdc.html#id2589683">NetBIOS Over TCP/IP Disabled</a>, <a class="indexterm" href="domain-member.html#id2594193">Configure smb.conf</a>, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a>, <a class="indexterm" href="idmapper.html#id2628674">IDMAP_RID with Winbind</a>, <a class="indexterm" href="idmapper.html#id2629264">IDMAP Storage in LDAP Using Winbind</a></dt><dt>rebooted, <a class="indexterm" href="ClientConfig.html#id2599448">Joining a Domain: Windows 2000/XP Professional</a>, <a class="indexterm" href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a></dt><dt>rebooting server, <a class="indexterm" href="rights.html#id2631138">Description of Privileges</a></dt><dt>recompiling, <a class="indexterm" href="cfgsmarts.html#id2696226">Multiple Server Hosting</a></dt><dt>reconfiguration, <a class="indexterm" href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a></dt><dt>record locking, <a class="indexterm" href="locking.html#id2637734">Discussion</a></dt><dt>recycle, <a class="indexterm" href="VFS.html#id2673676">recycle</a></dt><dt>recycle bin, <a class="indexterm" href="VFS.html#id2672690">Discussion</a></dt><dt>recycle directory, <a class="indexterm" href="VFS.html#id2673676">recycle</a></dt><dt>recycle:exclude, <a class="indexterm" href="VFS.html#id2673676">recycle</a></dt><dt>recycle:exclude_dir, <a class="indexterm" href="VFS.html#id2673676">recycle</a></dt><dt>recycle:keeptree, <a class="indexterm" href="VFS.html#id2673676">recycle</a></dt><dt>recycle:maxsize, <a class="indexterm" href="VFS.html#id2673676">recycle</a></dt><dt>recycle:noversions, <a class="indexterm" href="VFS.html#id2673676">recycle</a></dt><dt>recycle:repository, <a class="indexterm" href="VFS.html#id2673676">recycle</a></dt><dt>recycle:subdir_mode, <a class="indexterm" href="VFS.html#id2673676">recycle</a></dt><dt>recycle:touch, <a class="indexterm" href="VFS.html#id2673676">recycle</a></dt><dt>recycle:versions, <a class="indexterm" href="VFS.html#id2673676">recycle</a></dt><dt>Red Hat Cluster Manager, <a class="indexterm" href="SambaHA.html#id2695410">High-Availability Server Products</a></dt><dt>Red Hat Linux, <a class="indexterm" href="samba-bdc.html#id2589047">LDAP Configuration Notes</a>, <a class="indexterm" href="domain-member.html#id2592605">On-the-Fly Creation of Machine Trust Accounts</a>, <a class="indexterm" href="groupmapping.html#id2618690">Warning: User Private Group Problems</a></dt><dt>redirect, <a class="indexterm" href="samba-bdc.html#id2590243">Example Configuration</a></dt><dt>redirection, <a class="indexterm" href="winbind.html#id2675862">What Winbind Provides</a></dt><dt>redirector, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>redundancy, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a></dt><dt>reference documents, <a class="indexterm" href="StandAloneServer.html#RefDocServer">Reference Documentation Server</a></dt><dt>refusing connection, <a class="indexterm" href="securing-samba.html#id2640578">Using Interface Protection</a></dt><dt>regedit.exe, <a class="indexterm" href="ProfileMgmt.html#id2685694">MS Windows 9x/Me</a></dt><dt>regedt32, <a class="indexterm" href="ProfileMgmt.html#id2685846">MS Windows NT4 Workstation</a></dt><dt>regedt32.exe, <a class="indexterm" href="PolicyMgmt.html#id2682557">Windows NT4/200x</a></dt><dt>register driver files, <a class="indexterm" href="classicalprinting.html#id2650980">Running rpcclient with adddriver</a></dt><dt>register NetBIOS names, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a></dt><dt>registered, <a class="indexterm" href="NetworkBrowsing.html#id2605636">WINS: The Windows Internetworking Name Server</a>, <a class="indexterm" href="classicalprinting.html#id2651246">Check Samba for Driver Recognition</a></dt><dt>registers, <a class="indexterm" href="NetworkBrowsing.html#id2604354">Domain Browsing Configuration</a></dt><dt>registry, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a>, <a class="indexterm" href="passdb.html#passdbtech">Technical Information</a>, <a class="indexterm" href="locking.html#id2637637">Features and Benefits</a>, <a class="indexterm" href="PolicyMgmt.html#id2681239">Creating and Managing System Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id2681428">Windows 9x/ME Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id2681787">MS Windows 200x/XP Professional Policies</a>, <a class="indexterm" href="ProfileMgmt.html#id2685694">MS Windows 9x/Me</a></dt><dt>registry change, <a class="indexterm" href="passdb.html#id2610108">Important Notes About Security</a></dt><dt>registry keys, <a class="indexterm" href="ProfileMgmt.html#id2685664">Default Profile for Windows Users</a></dt><dt>registry settings, <a class="indexterm" href="PolicyMgmt.html#id2682235">Managing Account/User Policies</a></dt><dt>regulations, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a></dt><dt>rejoin, <a class="indexterm" href="NetCommand.html#id2624351">Managing Security Identifiers (SIDS)</a></dt><dt>relationship password, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></dt><dt>relative identifier, <a class="indexterm" href="passdb.html#id2614688">smbpasswd: Encrypted Password Database</a> (see RID)</dt><dt>Relative Identifier (see RID)</dt><dt>Relative Identifiers (see RID)</dt><dt>reliability, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>Remote Access Dial-In User Service (see RADIUS)</dt><dt>remote announce, <a class="indexterm" href="NetworkBrowsing.html#id2607418">Cross-Subnet Browsing</a></dt><dt>remote browse sync, <a class="indexterm" href="NetworkBrowsing.html#id2607418">Cross-Subnet Browsing</a></dt><dt>remote desktop capabilities, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a></dt><dt>remote desktop management, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680125">Remote Desktop Management</a></dt><dt>remote domain, <a class="indexterm" href="InterdomainTrusts.html#id2642166">Creating an NT4 Domain Trust</a>, <a class="indexterm" href="InterdomainTrusts.html#id2642263">Completing an NT4 Domain Trust</a>, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></dt><dt>remote login, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a></dt><dt>remote management, <a class="indexterm" href="NetCommand.html">Remote and Local Management: The Net Command</a>, <a class="indexterm" href="winbind.html#id2676237">Microsoft Remote Procedure Calls</a></dt><dt>Remote Procedure Call (see RPC)</dt><dt>Remote Procedure Call System Service (see RPCSS)</dt><dt>remote profile, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a></dt><dt>remote segment, <a class="indexterm" href="NetworkBrowsing.html#id2605543">Use of the Remote Browse Sync Parameter</a>, <a class="indexterm" href="NT4Migration.html#id2701821">Domain Layout</a></dt><dt>Remote X, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a></dt><dt>Remote X protocol, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a></dt><dt>remote-update protocol, <a class="indexterm" href="Backup.html#id2694017">Rsync</a></dt><dt>rename, <a class="indexterm" href="AccessControls.html#id2633169">Managing Directories</a></dt><dt>render, <a class="indexterm" href="CUPS-printing.html#id2656507">Raw Print Serving: Vendor Drivers on Windows Clients</a></dt><dt>rendering, <a class="indexterm" href="CUPS-printing.html#id2661565">cupsomatic/foomatic-rip Versus Native CUPS Printing</a></dt><dt>repeated intervals, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a></dt><dt>replicate, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a>, <a class="indexterm" href="passdb.html#id2614688">smbpasswd: Encrypted Password Database</a></dt><dt>replicated, <a class="indexterm" href="ServerType.html#id2580765">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="samba-bdc.html#id2589411">Active Directory Domain Control</a>, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a>, <a class="indexterm" href="PolicyMgmt.html#id2681787">MS Windows 200x/XP Professional Policies</a></dt><dt>replicated SYSVOL, <a class="indexterm" href="PolicyMgmt.html#id2681787">MS Windows 200x/XP Professional Policies</a></dt><dt>replication, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="samba-bdc.html#id2589047">LDAP Configuration Notes</a></dt><dd><dl><dt>browse lists, <a class="indexterm" href="NetworkBrowsing.html#id2607418">Cross-Subnet Browsing</a></dt><dt>SAM, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a>, <a class="indexterm" href="samba-bdc.html#id2587890">Features and Benefits</a>, <a class="indexterm" href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a>, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a>, <a class="indexterm" href="samba-bdc.html#id2590798">Can Samba Be a Backup Domain Controller to an NT4 PDC?</a>, <a class="indexterm" href="samba-bdc.html#id2590853">How Do I Replicate the smbpasswd File?</a></dt><dt>WINS, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a>, <a class="indexterm" href="NetworkBrowsing.html#id2605907">WINS Server Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#id2606228">WINS Replication</a></dt></dl></dd><dt>replication protocols, <a class="indexterm" href="NetworkBrowsing.html#id2605907">WINS Server Configuration</a></dt><dt>repository, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a></dt><dt>requesting payment, <a class="indexterm" href="ch46.html#id2714245">Free Support</a></dt><dt>required, <a class="indexterm" href="pam.html#id2688266">Anatomy of /etc/pam.d Entries</a></dt><dt>requisite, <a class="indexterm" href="pam.html#id2688266">Anatomy of /etc/pam.d Entries</a></dt><dt>research, <a class="indexterm" href="Backup.html#id2693749">Discussion of Backup Solutions</a></dt><dt>resizing, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>resolution, <a class="indexterm" href="CUPS-printing.html#id2660577">The Role of cupsomatic/foomatic</a></dt><dt>resolution of NetBIOS names, <a class="indexterm" href="NetworkBrowsing.html">Network Browsing</a></dt><dt>resolve NetBIOS names, <a class="indexterm" href="NetworkBrowsing.html#id2604955">Making Samba the Domain Master</a></dt><dt>resolver functions, <a class="indexterm" href="winbind.html#id2676371">Name Service Switch</a></dt><dt>resource failover, <a class="indexterm" href="SambaHA.html#id2695410">High-Availability Server Products</a></dt><dt>resource kit, <a class="indexterm" href="PolicyMgmt.html#id2681990">Administration of Windows 200x/XP Policies</a>, <a class="indexterm" href="ProfileMgmt.html#profilemigrn">Windows NT4 Profile Management Tools</a></dt><dt>resource-based exclusion, <a class="indexterm" href="securing-samba.html#id2640202">Features and Benefits</a></dt><dt>response, <a class="indexterm" href="idmapper.html#id2628674">IDMAP_RID with Winbind</a></dt><dt>restrict DNS, <a class="indexterm" href="NetworkBrowsing.html#id2606674">Name Resolution Order</a></dt><dt>reviewers, <a class="indexterm" href="cfgsmarts.html">Advanced Configuration Techniques</a></dt><dt>revoke privileges, <a class="indexterm" href="rights.html#id2630793">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>RFC 1001, <a class="indexterm" href="DNSDHCP.html#id2714801">Example Configuration</a></dt><dt>RFC 1002, <a class="indexterm" href="DNSDHCP.html#id2714801">Example Configuration</a></dt><dt>RFC 1179, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>RFC 2307, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a></dt><dt>RFC 2307., <a class="indexterm" href="passdb.html#id2615414">Schema and Relationship to the RFC 2307 posixAccount</a></dt><dt>RFC 2830, <a class="indexterm" href="ch-ldap-tls.html#s1-intro-ldap-tls">Introduction</a></dt><dt>rfc2307bis, <a class="indexterm" href="idmapper.html#id2629850">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a></dt><dt>RFC2830, <a class="indexterm" href="samba-bdc.html#id2589047">LDAP Configuration Notes</a></dt><dt>RFCs, <a class="indexterm" href="problems.html">Analyzing and Solving Samba Problems</a></dt><dt>rich database backend, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a></dt><dt>rich directory backend, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a></dt><dt>RID, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="ChangeNotes.html#id2600728">User and Group Changes</a>, <a class="indexterm" href="groupmapping.html#id2618354">Discussion</a>, <a class="indexterm" href="groupmapping.html#id2619564">Default Users, Groups, and Relative Identifiers</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id2627583">Primary Domain Controller</a>, <a class="indexterm" href="idmapper.html#id2628674">IDMAP_RID with Winbind</a>, <a class="indexterm" href="rights.html#id2631943">The Administrator Domain SID</a>, <a class="indexterm" href="winbind.html#id2676758">User and Group ID Allocation</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a></dt><dt>RID 500, <a class="indexterm" href="rights.html#id2631943">The Administrator Domain SID</a></dt><dt>RID base, <a class="indexterm" href="idmapper.html#id2627583">Primary Domain Controller</a></dt><dt>right to join domain, <a class="indexterm" href="rights.html#id2631138">Description of Privileges</a></dt><dt>rights, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a>, <a class="indexterm" href="samba-pdc.html#id2586627">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="domain-member.html#id2595186">Possible Errors</a>, <a class="indexterm" href="rights.html#id2630518">Rights Management Capabilities</a></dt><dt>rights and privilege, <a class="indexterm" href="NetCommand.html#id2623379">Administering User Rights and Privileges</a></dt><dt>rights and privileges, <a class="indexterm" href="groupmapping.html#id2619324">Important Administrative Information</a>, <a class="indexterm" href="rights.html#id2631943">The Administrator Domain SID</a></dt><dt>rights assigned, <a class="indexterm" href="rights.html#id2630518">Rights Management Capabilities</a>, <a class="indexterm" href="rights.html#id2630793">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>RIP, <a class="indexterm" href="CUPS-printing.html#id2661282">PostScript Printer Descriptions for Non-PostScript Printers</a></dt><dt>rlogind, <a class="indexterm" href="pam.html#id2688266">Anatomy of /etc/pam.d Entries</a></dt><dt>Roaming Profile, <a class="indexterm" href="VFS.html#fakeperms">fake_perms</a></dt><dt>roaming profiles, <a class="indexterm" href="samba-pdc.html#id2585096">Preparing for Domain Control</a>, <a class="indexterm" href="ProfileMgmt.html#id2682916">Features and Benefits</a>, <a class="indexterm" href="ProfileMgmt.html#id2683405">Disabling Roaming Profile Support</a>, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a></dt><dt>rogue machine, <a class="indexterm" href="NetworkBrowsing.html#id2608457">Flushing the Samba NetBIOS Name Cache</a></dt><dt>rogue user, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>root, <a class="indexterm" href="domain-member.html#id2592722">Windows 200x/XP Professional Client</a>, <a class="indexterm" href="ClientConfig.html#id2599448">Joining a Domain: Windows 2000/XP Professional</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>root account, <a class="indexterm" href="rights.html">User Rights and Privileges</a>, <a class="indexterm" href="rights.html#id2631943">The Administrator Domain SID</a></dt><dt>root user, <a class="indexterm" href="rights.html#id2630793">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>rotate, <a class="indexterm" href="CUPS-printing.html#id2657520">UNIX Printfile Conversion and GUI Basics</a></dt><dt>RPC, <a class="indexterm" href="domain-member.html#id2593911">Why Is This Better Than security = server?</a>, <a class="indexterm" href="winbind.html#id2675430">Features and Benefits</a>, <a class="indexterm" href="winbind.html#id2677976">Join the Samba Server to the PDC Domain</a>, <a class="indexterm" href="ProfileMgmt.html#id2682966">Roaming Profiles</a></dt><dt>RPC calls, <a class="indexterm" href="winbind.html#id2679639">Conclusion</a>, <a class="indexterm" href="SambaHA.html#id2694735">The Front-End Challenge</a></dt><dt>RPC modules, <a class="indexterm" href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a></dt><dt>rpc.lockd, <a class="indexterm" href="locking.html#id2637734">Discussion</a></dt><dt>rpcclient, <a class="indexterm" href="NetCommand.html">Remote and Local Management: The Net Command</a>, <a class="indexterm" href="classicalprinting.html#id2650065">Identifying Driver Files</a>, <a class="indexterm" href="classicalprinting.html#id2651474">Specific Driver Name Flexibility</a>, <a class="indexterm" href="CUPS-printing.html#id2667620">Troubleshooting Revisited</a>, <a class="indexterm" href="PolicyMgmt.html#id2682597">Samba PDC</a></dt><dd><dl><dt>adddriver, <a class="indexterm" href="CUPS-printing.html#id2664999">Run cupsaddsmb with Verbose Output</a>, <a class="indexterm" href="CUPS-printing.html#id2665190">Understanding cupsaddsmb</a>, <a class="indexterm" href="CUPS-printing.html#id2665854">Installing PostScript Driver Files Manually Using rpcclient</a>, <a class="indexterm" href="CUPS-printing.html#id2666199">Understanding the rpcclient man Page</a>, <a class="indexterm" href="CUPS-printing.html#id2666436">Requirements for adddriver and setdriver to Succeed</a>, <a class="indexterm" href="CUPS-printing.html#id2666661">Manual Driver Installation in 15 Steps</a></dt><dt>enumdrivers, <a class="indexterm" href="CUPS-printing.html#id2665854">Installing PostScript Driver Files Manually Using rpcclient</a>, <a class="indexterm" href="CUPS-printing.html#id2666661">Manual Driver Installation in 15 Steps</a></dt><dt>enumports, <a class="indexterm" href="CUPS-printing.html#id2665854">Installing PostScript Driver Files Manually Using rpcclient</a></dt><dt>enumprinters, <a class="indexterm" href="CUPS-printing.html#id2665854">Installing PostScript Driver Files Manually Using rpcclient</a>, <a class="indexterm" href="CUPS-printing.html#id2666436">Requirements for adddriver and setdriver to Succeed</a>, <a class="indexterm" href="CUPS-printing.html#id2666661">Manual Driver Installation in 15 Steps</a>, <a class="indexterm" href="CUPS-printing.html#id2667620">Troubleshooting Revisited</a></dt><dt>getdriver, <a class="indexterm" href="CUPS-printing.html#id2666304">Producing an Example by Querying a Windows Box</a>, <a class="indexterm" href="CUPS-printing.html#id2666661">Manual Driver Installation in 15 Steps</a></dt><dt>getprinter, <a class="indexterm" href="CUPS-printing.html#id2666304">Producing an Example by Querying a Windows Box</a>, <a class="indexterm" href="CUPS-printing.html#id2666661">Manual Driver Installation in 15 Steps</a>, <a class="indexterm" href="CUPS-printing.html#id2667620">Troubleshooting Revisited</a></dt><dt>setdriver, <a class="indexterm" href="CUPS-printing.html#id2664341">Caveats to Be Considered</a>, <a class="indexterm" href="CUPS-printing.html#id2664999">Run cupsaddsmb with Verbose Output</a>, <a class="indexterm" href="CUPS-printing.html#id2665190">Understanding cupsaddsmb</a>, <a class="indexterm" href="CUPS-printing.html#id2665854">Installing PostScript Driver Files Manually Using rpcclient</a>, <a class="indexterm" href="CUPS-printing.html#id2666436">Requirements for adddriver and setdriver to Succeed</a>, <a class="indexterm" href="CUPS-printing.html#id2666661">Manual Driver Installation in 15 Steps</a></dt></dl></dd><dt>rsh, <a class="indexterm" href="Backup.html#id2693846">BackupPC</a></dt><dt>rsync, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a>, <a class="indexterm" href="samba-bdc.html#id2590853">How Do I Replicate the smbpasswd File?</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="passdb.html#id2614688">smbpasswd: Encrypted Password Database</a>, <a class="indexterm" href="Backup.html#id2693846">BackupPC</a>, <a class="indexterm" href="Backup.html#id2694017">Rsync</a>, <a class="indexterm" href="compiling.html#id2709528">Accessing the Samba Sources via rsync and ftp</a></dt><dt>rsyncd, <a class="indexterm" href="Backup.html#id2693846">BackupPC</a></dt><dt>runas, <a class="indexterm" href="classicalprinting.html#id2578650">Always Make First Client Connection as root or &#8220;printer admin&#8221;</a></dt><dt>rundll32, <a class="indexterm" href="classicalprinting.html#id2578531">Additional Client Driver Installation</a>, <a class="indexterm" href="classicalprinting.html#id2652888">Setting Default Print Options for Client Drivers</a>, <a class="indexterm" href="CUPS-printing.html#id2666661">Manual Driver Installation in 15 Steps</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680939">Adding Printers without User Intervention</a></dt></dl></div><div class="indexdiv"><h3>S</h3><dl><dt>SAM, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a>, <a class="indexterm" href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a>, <a class="indexterm" href="samba-bdc.html#id2590743">Machine Accounts Keep Expiring</a>, <a class="indexterm" href="samba-bdc.html#id2590798">Can Samba Be a Backup Domain Controller to an NT4 PDC?</a>, <a class="indexterm" href="samba-bdc.html#id2590853">How Do I Replicate the smbpasswd File?</a>, <a class="indexterm" href="domain-member.html#id2591202">Features and Benefits</a>, <a class="indexterm" href="ChangeNotes.html#id2600728">User and Group Changes</a>, <a class="indexterm" href="passdb.html#id2609356">Backward Compatibility Account Storage Systems</a>, <a class="indexterm" href="passdb.html#id2610628">Mapping User Identifiers between MS Windows and UNIX</a>, <a class="indexterm" href="winbind.html#id2676847">Result Caching</a></dt><dd><dl><dt>delta file, <a class="indexterm" href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a></dt><dt>replication, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a>, <a class="indexterm" href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a></dt></dl></dd><dt>SAM backend, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a></dt><dd><dl><dt>LDAP, <a class="indexterm" href="samba-bdc.html#id2587890">Features and Benefits</a></dt><dt>ldapsam, <a class="indexterm" href="samba-bdc.html#id2587890">Features and Benefits</a>, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="passdb.html#id2615111">ldapsam</a></dt><dt>ldapsam_compat, <a class="indexterm" href="passdb.html#id2609320">Features and Benefits</a></dt><dt>non-LDAP, <a class="indexterm" href="samba-bdc.html#id2587890">Features and Benefits</a></dt><dt>smbpasswd, <a class="indexterm" href="passdb.html#id2609320">Features and Benefits</a>, <a class="indexterm" href="passdb.html#id2614688">smbpasswd: Encrypted Password Database</a></dt><dt>tdbsam, <a class="indexterm" href="samba-bdc.html#id2587890">Features and Benefits</a>, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a>, <a class="indexterm" href="passdb.html#id2614953">tdbsam</a></dt></dl></dd><dt>Samba 1.9.17, <a class="indexterm" href="NetworkBrowsing.html#id2605907">WINS Server Configuration</a></dt><dt>Samba account, <a class="indexterm" href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a></dt><dt>Samba administrator, <a class="indexterm" href="winbind.html#id2676910">Introduction</a></dt><dt>Samba backend database, <a class="indexterm" href="domain-member.html#id2595873">Adding Machine to Domain Fails</a></dt><dt>Samba daemons, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></dt><dt>Samba differences, <a class="indexterm" href="upgrading-to-3.0.html#oldupdatenotes">Upgrading from Samba-2.x to Samba-3.0.25</a></dt><dt>Samba mailing lists, <a class="indexterm" href="Backup.html#id2693704">Features and Benefits</a></dt><dt>Samba private directory, <a class="indexterm" href="domain-member.html#ads-create-machine-account">Create the Computer Account</a></dt><dt>Samba SAM, <a class="indexterm" href="passdb.html#id2610628">Mapping User Identifiers between MS Windows and UNIX</a></dt><dt>Samba SAM account, <a class="indexterm" href="domain-member.html#id2595873">Adding Machine to Domain Fails</a></dt><dt>Samba SAM account flags, <a class="indexterm" href="passdb.html#TOSHARG-acctflags">Account Flags Management</a></dt><dt>Samba schema, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a></dt><dt>Samba security, <a class="indexterm" href="securing-samba.html#id2640202">Features and Benefits</a></dt><dt>Samba-2.2.x LDAP schema, <a class="indexterm" href="passdb.html#id2609356">Backward Compatibility Account Storage Systems</a></dt><dt>Samba-3-compatible LDAP backend, <a class="indexterm" href="upgrading-to-3.0.html#id2698610">Quick Migration Guide</a></dt><dt>Samba-PDC-LDAP-HOWTO, <a class="indexterm" href="passdb.html#id2615111">ldapsam</a></dt><dt>samba-to-samba trusts, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a></dt><dt>samba-vscan, <a class="indexterm" href="VFS.html#id2675109">vscan</a></dt><dt>samba.schema, <a class="indexterm" href="passdb.html#id2615414">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="passdb.html#id2615649">OpenLDAP Configuration</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a></dt><dt>sambaDomain, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a></dt><dt>sambaGroupMapping, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a></dt><dt>sambaHomeDrive, <a class="indexterm" href="passdb.html#id2616879">LDAP Special Attributes for sambaSamAccounts</a></dt><dt>sambaHomePath, <a class="indexterm" href="passdb.html#id2616879">LDAP Special Attributes for sambaSamAccounts</a></dt><dt>sambaIdmapEntry, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a></dt><dt>sambaLogonScript, <a class="indexterm" href="passdb.html#id2616879">LDAP Special Attributes for sambaSamAccounts</a></dt><dt>SambaNTPassword, <a class="indexterm" href="passdb.html#id2616644">Security and sambaSamAccount</a></dt><dt>sambaProfilePath, <a class="indexterm" href="passdb.html#id2616879">LDAP Special Attributes for sambaSamAccounts</a></dt><dt>SambaSAMAccount, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a>, <a class="indexterm" href="passdb.html#acctmgmttools">Account Management Tools</a>, <a class="indexterm" href="passdb.html#id2613456">Adding User Accounts</a>, <a class="indexterm" href="passdb.html#id2613544">Deleting Accounts</a>, <a class="indexterm" href="passdb.html#id2613628">Changing User Accounts</a>, <a class="indexterm" href="passdb.html#id2614953">tdbsam</a></dt><dt>sambaSamAccount, <a class="indexterm" href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="passdb.html#id2615414">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="passdb.html#id2615649">OpenLDAP Configuration</a>, <a class="indexterm" href="passdb.html#id2616531">Accounts and Groups Management</a>, <a class="indexterm" href="passdb.html#id2616879">LDAP Special Attributes for sambaSamAccounts</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a></dt><dt>sambaSAMAccount, <a class="indexterm" href="passdb.html#id2616644">Security and sambaSamAccount</a></dt><dt>sambaSID, <a class="indexterm" href="ChangeNotes.html#id2601340">LDAP Changes in Samba-3.0.23</a></dt><dt>sambaUNIXIdPool, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a></dt><dt>SambaXP conference, <a class="indexterm" href="SambaHA.html#id2694452">Technical Discussion</a></dt><dt>samdb interface, <a class="indexterm" href="passdb.html#id2614688">smbpasswd: Encrypted Password Database</a></dt><dt>same domain/workgroup, <a class="indexterm" href="cfgsmarts.html#id2697638">Multiple Virtual Server Hosting</a></dt><dt>Sarbanes-Oxley, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a></dt><dt>scalability, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="samba-bdc.html#id2587890">Features and Benefits</a>, <a class="indexterm" href="passdb.html">Account Information Databases</a>, <a class="indexterm" href="passdb.html#id2614953">tdbsam</a>, <a class="indexterm" href="InterdomainTrusts.html#id2641780">Features and Benefits</a></dt><dt>scalable, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a></dt><dt>scalable backend, <a class="indexterm" href="InterdomainTrusts.html#id2641780">Features and Benefits</a></dt><dt>scalable coherent interface (see SCI)</dt><dt>scale, <a class="indexterm" href="CUPS-printing.html#id2657520">UNIX Printfile Conversion and GUI Basics</a></dt><dt>scanner module, <a class="indexterm" href="VFS.html#id2672690">Discussion</a></dt><dt>schannel, <a class="indexterm" href="samba-pdc.html#id2587706">Cannot Log onto Domain Member Workstation After Joining Domain</a></dt><dt>schema, <a class="indexterm" href="idmapper.html#id2629850">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a></dt><dt>schema file, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a></dt><dt>scp, <a class="indexterm" href="Backup.html#id2694017">Rsync</a></dt><dt>script, <a class="indexterm" href="domain-member.html#id2595873">Adding Machine to Domain Fails</a></dt><dt>scripted control, <a class="indexterm" href="NetCommand.html">Remote and Local Management: The Net Command</a></dt><dt>scripts, <a class="indexterm" href="NetworkBrowsing.html#id2606970">Browsing Support in Samba</a>, <a class="indexterm" href="passdb.html#id2611451">Caution Regarding LDAP and Samba</a></dt><dt>SCSI, <a class="indexterm" href="SambaHA.html#id2695410">High-Availability Server Products</a></dt><dt>SeAddUsersPrivilege, <a class="indexterm" href="NetCommand.html#id2623379">Administering User Rights and Privileges</a>, <a class="indexterm" href="rights.html#id2630518">Rights Management Capabilities</a>, <a class="indexterm" href="rights.html#id2631138">Description of Privileges</a></dt><dt>SeAssignPrimaryTokenPrivilege, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeAuditPrivilege, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeBackupPrivilege, <a class="indexterm" href="NetCommand.html#id2623379">Administering User Rights and Privileges</a>, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeChangeNotifyPrivilege, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>Seclib, <a class="indexterm" href="AccessControls.html#id2635654">Viewing File Ownership</a></dt><dt>secondary controller, <a class="indexterm" href="NT4Migration.html#id2701821">Domain Layout</a></dt><dt>SeCreateGlobalPrivilege, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeCreatePagefilePrivilege, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeCreatePermanentPrivilege, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeCreateTokenPrivilege, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>secret, <a class="indexterm" href="passdb.html#id2610108">Important Notes About Security</a></dt><dt>secrets.tdb, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a>, <a class="indexterm" href="domain-member.html#id2595551">Sharing User ID Mappings between Samba Domain Members</a>, <a class="indexterm" href="passdb.html#id2615921">Initialize the LDAP Database</a>, <a class="indexterm" href="CUPS-printing.html#id2667763">The Printing *.tdb Files</a></dt><dd><dl><dt>(see also TDB)</dt></dl></dd><dt>section name, <a class="indexterm" href="install.html#id2573195">Configuration File Syntax</a></dt><dt>secure, <a class="indexterm" href="StandAloneServer.html#id2596235">Features and Benefits</a></dt><dt>secure access, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></dt><dt>secure authentication, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>secure communications, <a class="indexterm" href="passdb.html#id2616644">Security and sambaSamAccount</a></dt><dt>secured networks, <a class="indexterm" href="securing-samba.html#id2640103">Introduction</a></dt><dt>security, <a class="indexterm" href="ServerType.html#id2581092">Samba Security Modes</a>, <a class="indexterm" href="samba-pdc.html#id2585096">Preparing for Domain Control</a>, <a class="indexterm" href="securing-samba.html#id2640103">Introduction</a>, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></dt><dd><dl><dt>controllers, <a class="indexterm" href="ServerType.html#id2581638">Domain Security Mode (User-Level Security)</a></dt><dt>modes, <a class="indexterm" href="ServerType.html#id2580765">Features and Benefits</a></dt><dt>settings, <a class="indexterm" href="install.html#id2574356">Example Configuration</a></dt></dl></dd><dt>security = user, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></dt><dt>security account, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a></dt><dt>Security Account Manager (see SAM)</dt><dt>Security Assertion Markup Language (see SAML)</dt><dt>security context, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a></dt><dt>security contexts, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a></dt><dt>security credentials, <a class="indexterm" href="idmapper.html#id2627818">Backup Domain Controller</a>, <a class="indexterm" href="InterdomainTrusts.html#id2642130">Native MS Windows NT4 Trusts Configuration</a></dt><dt>security domain, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a></dt><dt>security domains, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a></dt><dt>security flaw, <a class="indexterm" href="securing-samba.html#id2641220">Why Can Users Access Other Users' Home Directories?</a></dt><dt>security hole, <a class="indexterm" href="securing-samba.html#id2640934">Using IPC$ Share-Based Denials </a></dt><dt>security identifier, <a class="indexterm" href="NetCommand.html#id2624351">Managing Security Identifiers (SIDS)</a> (see SID)</dt><dt>security level, <a class="indexterm" href="ServerType.html#id2582318">Server Security (User Level Security)</a></dt><dt>security levels, <a class="indexterm" href="ServerType.html#id2581092">Samba Security Modes</a></dt><dt>security mode, <a class="indexterm" href="ServerType.html">Server Types and Security Modes</a>, <a class="indexterm" href="samba-pdc.html#id2587021">Security Mode and Master Browsers</a></dt><dt>Security Mode, <a class="indexterm" href="ServerType.html#id2581092">Samba Security Modes</a></dt><dt>security modes, <a class="indexterm" href="ServerType.html#id2581092">Samba Security Modes</a></dt><dt>security name-space, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a></dt><dt>security policies, <a class="indexterm" href="securing-samba.html#id2641220">Why Can Users Access Other Users' Home Directories?</a></dt><dt>security settings, <a class="indexterm" href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a></dt><dt>security structure, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a></dt><dt>security vulnerability, <a class="indexterm" href="securing-samba.html#id2641132">Upgrading Samba</a></dt><dt>security-aware, <a class="indexterm" href="CUPS-printing.html#id2661002">application/octet-stream Printing</a></dt><dt>SeDebugPrivilege, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeDiskOperatorPrivilege, <a class="indexterm" href="NetCommand.html#id2623379">Administering User Rights and Privileges</a>, <a class="indexterm" href="rights.html#id2630518">Rights Management Capabilities</a>, <a class="indexterm" href="rights.html#id2631138">Description of Privileges</a></dt><dt>SeEnableDelegationPrivilege, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeImpersonatePrivilege, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeIncreaseBasePriorityPrivilege, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeIncreaseQuotaPrivilege, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeLoadDriverPrivilege, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeLockMemoryPrivilege, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeMachineAccountPrivilege, <a class="indexterm" href="NetCommand.html#id2623379">Administering User Rights and Privileges</a>, <a class="indexterm" href="rights.html#id2630518">Rights Management Capabilities</a>, <a class="indexterm" href="rights.html#id2631138">Description of Privileges</a>, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeManageVolumePrivilege, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>separate instances, <a class="indexterm" href="cfgsmarts.html#id2696226">Multiple Server Hosting</a></dt><dt>separate servers, <a class="indexterm" href="cfgsmarts.html">Advanced Configuration Techniques</a></dt><dt>separate shares, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>separate workgroups, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></dt><dt>SePrintOperatorPrivilege, <a class="indexterm" href="NetCommand.html#id2623379">Administering User Rights and Privileges</a>, <a class="indexterm" href="rights.html#id2630518">Rights Management Capabilities</a>, <a class="indexterm" href="rights.html#id2631138">Description of Privileges</a></dt><dt>SeProfileSingleProcessPrivilege, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeRemoteShutdownPrivilege, <a class="indexterm" href="NetCommand.html#id2623379">Administering User Rights and Privileges</a>, <a class="indexterm" href="rights.html#id2630518">Rights Management Capabilities</a>, <a class="indexterm" href="rights.html#id2631138">Description of Privileges</a>, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeRestorePrivilege, <a class="indexterm" href="NetCommand.html#id2623379">Administering User Rights and Privileges</a>, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>server failure, <a class="indexterm" href="SambaHA.html#id2694616">Why Is This So Hard?</a></dt><dt>Server Manager, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id2592325">Managing Domain Machine Accounts using NT4 Server Manager</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id2679982">Remote Server Administration</a></dt><dt>Server Manager for Domains, <a class="indexterm" href="domain-member.html#id2592325">Managing Domain Machine Accounts using NT4 Server Manager</a></dt><dt>Server Message Block (see SMB)</dt><dt>server pool, <a class="indexterm" href="SambaHA.html#id2694935">The Distributed File System Challenge</a>, <a class="indexterm" href="SambaHA.html#id2695062">Restrictive Constraints on Distributed File Systems</a></dt><dt>Server Type, <a class="indexterm" href="ServerType.html#id2580932">Server Types</a></dt><dd><dl><dt>Domain Controller, <a class="indexterm" href="FastStart.html#id2578435">Domain Controller</a></dt><dt>Domain Member, <a class="indexterm" href="FastStart.html#id2577510">Domain Member Server</a>, <a class="indexterm" href="samba-bdc.html#id2590243">Example Configuration</a>, <a class="indexterm" href="domain-member.html#id2591202">Features and Benefits</a></dt><dt>Stand-alone, <a class="indexterm" href="FastStart.html#id2575590">Standalone Server</a></dt></dl></dd><dt>server type, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a></dt><dd><dl><dt>domain member, <a class="indexterm" href="ServerType.html#id2581855">Example Configuration</a></dt></dl></dd><dt>Server Types, <a class="indexterm" href="idmapper.html#id2626535">Samba Server Deployment Types and IDMAP</a></dt><dt>server-mode, <a class="indexterm" href="ServerType.html#id2582881">What Makes Samba a Domain Controller?</a></dt><dt>service name, <a class="indexterm" href="install.html#id2574356">Example Configuration</a></dt><dt>service-level, <a class="indexterm" href="classicalprinting.html#id2644574">Printing-Related Configuration Parameters</a>, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>services provided, <a class="indexterm" href="ch46.html">Samba Support</a></dt><dt>SeSecurityPrivilege, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeShutdownPrivilege, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>session, <a class="indexterm" href="pam.html#id2688266">Anatomy of /etc/pam.d Entries</a></dt><dt>session services, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a></dt><dt>session setup, <a class="indexterm" href="ServerType.html#id2581256">User Level Security</a>, <a class="indexterm" href="ServerType.html#id2582318">Server Security (User Level Security)</a></dt><dt>sessionid.tdb, <a class="indexterm" href="CUPS-printing.html#id2667763">The Printing *.tdb Files</a></dt><dd><dl><dt>(see also TDB)</dt></dl></dd><dt>SessionSetupAndX, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a></dt><dt>SeSyncAgentPrivilege, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeSystemEnvironmentPrivilege, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeSystemProfilePrivilege, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeSystemtimePrivilege, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>set a password, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dt>set group id (see SGID)</dt><dt>set printer properties, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>set user id (see SUID)</dt><dt>SeTakeOwnershipPrivilege, <a class="indexterm" href="NetCommand.html#id2623379">Administering User Rights and Privileges</a>, <a class="indexterm" href="rights.html#id2630518">Rights Management Capabilities</a>, <a class="indexterm" href="rights.html#id2631138">Description of Privileges</a>, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeTcbPrivilege, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>setdriver, <a class="indexterm" href="CUPS-printing.html#id2666028">A Check of the rpcclient man Page</a>, <a class="indexterm" href="CUPS-printing.html#id2666436">Requirements for adddriver and setdriver to Succeed</a></dt><dt>SetPrinter(), <a class="indexterm" href="CUPS-printing.html#id2666028">A Check of the rpcclient man Page</a></dt><dt>setting up directories, <a class="indexterm" href="AccessControls.html#id2633292">File and Directory Access Control</a></dt><dt>SeUndockPrivilege, <a class="indexterm" href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>severely impaired, <a class="indexterm" href="NetworkBrowsing.html#id2602859">TCP/IP without NetBIOS</a></dt><dt>SFU, <a class="indexterm" href="idmapper.html#id2630120">IDMAP, Active Directory, and MS Services for UNIX 3.5</a></dt><dt>SFU 3.5, <a class="indexterm" href="idmapper.html#id2627583">Primary Domain Controller</a></dt><dt>SGI-RGB, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></dt><dt>SGID, <a class="indexterm" href="AccessControls.html#id2633292">File and Directory Access Control</a></dt><dt>shadow, <a class="indexterm" href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a></dt><dt>shadow copies, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>shadow password file, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></dt><dt>shadow utilities, <a class="indexterm" href="groupmapping.html#id2617939">Features and Benefits</a></dt><dt>shadow_copy, <a class="indexterm" href="VFS.html#id2674123">shadow_copy</a>, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>shadow_copy module, <a class="indexterm" href="VFS.html#id2674123">shadow_copy</a></dt><dt>share, <a class="indexterm" href="install.html#id2573195">Configuration File Syntax</a>, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a>, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>share access, <a class="indexterm" href="AccessControls.html#id2635030">Access Controls on Shares</a></dt><dt>share ACLs, <a class="indexterm" href="NT4Migration.html#id2702901">Samba-3 Implementation Choices</a></dt><dt>share management, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a></dt><dt>share modes, <a class="indexterm" href="SambaHA.html#id2694935">The Distributed File System Challenge</a></dt><dt>share permissions, <a class="indexterm" href="AccessControls.html#id2635190">Windows NT4 Workstation/Server</a></dt><dt>Share Permissions, <a class="indexterm" href="AccessControls.html#id2635301">Windows 200x/XP</a></dt><dt>share settings, <a class="indexterm" href="AccessControls.html#id2632624">Features and Benefits</a></dt><dt>share stanza controls, <a class="indexterm" href="NT4Migration.html#id2702901">Samba-3 Implementation Choices</a></dt><dt>share-level, <a class="indexterm" href="ServerType.html#id2581092">Samba Security Modes</a>, <a class="indexterm" href="ServerType.html#id2581430">Share-Level Security</a>, <a class="indexterm" href="msdfs.html#id2643489">Features and Benefits</a></dt><dt>share-level ACLs, <a class="indexterm" href="groupmapping.html#id2619442">Applicable Only to Versions Earlier than 3.0.11</a></dt><dt>share-mode, <a class="indexterm" href="StandAloneServer.html#id2596235">Features and Benefits</a></dt><dt>share-mode security, <a class="indexterm" href="samba-pdc.html#id2587021">Security Mode and Master Browsers</a></dt><dt>share-mode server, <a class="indexterm" href="StandAloneServer.html#id2596235">Features and Benefits</a></dt><dt>shared secret, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>shares, <a class="indexterm" href="NetworkBrowsing.html#id2601786">What Is Browsing?</a></dt><dt>shares and files, <a class="indexterm" href="winbind.html#id2677024">Requirements</a></dt><dt>share_info.tdb, <a class="indexterm" href="AccessControls.html#id2635030">Access Controls on Shares</a>, <a class="indexterm" href="CUPS-printing.html#id2667763">The Printing *.tdb Files</a></dt><dd><dl><dt>(see also TDB)</dt></dl></dd><dt>Sharing, <a class="indexterm" href="AccessControls.html#id2635301">Windows 200x/XP</a></dt><dt>shell scripts, <a class="indexterm" href="classicalprinting.html#id2647431">Print Commands</a></dt><dt>shift, <a class="indexterm" href="CUPS-printing.html#id2657520">UNIX Printfile Conversion and GUI Basics</a></dt><dt>Shift_JIS, <a class="indexterm" href="unicode.html#id2692552">Japanese Charsets</a>, <a class="indexterm" href="unicode.html#id2692681">Basic Parameter Setting</a></dt><dt>shortcuts, <a class="indexterm" href="ClientConfig.html#id2597677">TCP/IP Configuration</a>, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a></dt><dt>Shortcuts, <a class="indexterm" href="AccessControls.html#id2632834">MS Windows NTFS Comparison with UNIX File Systems</a></dt><dt>show-stopper-type, <a class="indexterm" href="NT4Migration.html#id2701377">Planning and Getting Started</a></dt><dt>SID, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id2587465">The System Cannot Log You On (C000019B)</a>, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a>, <a class="indexterm" href="samba-bdc.html#id2590243">Example Configuration</a>, <a class="indexterm" href="domain-member.html#id2593911">Why Is This Better Than security = server?</a>, <a class="indexterm" href="domain-member.html#id2595551">Sharing User ID Mappings between Samba Domain Members</a>, <a class="indexterm" href="ChangeNotes.html#id2600728">User and Group Changes</a>, <a class="indexterm" href="ChangeNotes.html#id2601219">Group Mapping Changes in Samba-3.0.23</a>, <a class="indexterm" href="passdb.html#passdbtech">Technical Information</a>, <a class="indexterm" href="passdb.html#id2610628">Mapping User Identifiers between MS Windows and UNIX</a>, <a class="indexterm" href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="groupmapping.html">Group Mapping: MS Windows and UNIX</a>, <a class="indexterm" href="groupmapping.html#id2617939">Features and Benefits</a>, <a class="indexterm" href="NetCommand.html#id2624351">Managing Security Identifiers (SIDS)</a>, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id2627583">Primary Domain Controller</a>, <a class="indexterm" href="idmapper.html#id2628674">IDMAP_RID with Winbind</a>, <a class="indexterm" href="rights.html#id2630518">Rights Management Capabilities</a>, <a class="indexterm" href="rights.html#id2631943">The Administrator Domain SID</a>, <a class="indexterm" href="winbind.html#id2675430">Features and Benefits</a>, <a class="indexterm" href="winbind.html#id2676061">Handling of Foreign SIDs</a>, <a class="indexterm" href="ProfileMgmt.html#id2685296">Side Bar Notes</a>, <a class="indexterm" href="ProfileMgmt.html#id2685388">Get SID</a>, <a class="indexterm" href="cfgsmarts.html#id2696226">Multiple Server Hosting</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a>, <a class="indexterm" href="NT4Migration.html#id2702253">Profile Migration/Creation</a></dt><dt>SID management, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a></dt><dt>SID-to-GID, <a class="indexterm" href="groupmapping.html#id2617939">Features and Benefits</a></dt><dt>SIDs, <a class="indexterm" href="NT4Migration.html#id2702901">Samba-3 Implementation Choices</a></dt><dt>signing, <a class="indexterm" href="samba-pdc.html#id2587706">Cannot Log onto Domain Member Workstation After Joining Domain</a></dt><dt>simple access controls, <a class="indexterm" href="NT4Migration.html#id2702022">Server Share and Directory Layout</a></dt><dt>simple configuration, <a class="indexterm" href="install.html#id2574356">Example Configuration</a></dt><dt>simple guide, <a class="indexterm" href="upgrading-to-3.0.html#oldupdatenotes">Upgrading from Samba-2.x to Samba-3.0.25</a></dt><dt>Simple Object Access Protocol (see SOAP)</dt><dt>simple operation, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a></dt><dt>simple print server, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dt>simple printing, <a class="indexterm" href="classicalprinting.html#id2644675">Simple Print Configuration</a></dt><dt>simplest</dt><dd><dl><dt>configuration, <a class="indexterm" href="install.html#id2574356">Example Configuration</a></dt></dl></dd><dt>simplicity, <a class="indexterm" href="StandAloneServer.html#id2596235">Features and Benefits</a></dt><dt>Simplicity is king, <a class="indexterm" href="NT4Migration.html#id2702022">Server Share and Directory Layout</a></dt><dt>single DHCP server, <a class="indexterm" href="ClientConfig.html#id2598942">MS Windows Me</a></dt><dt>single repository, <a class="indexterm" href="passdb.html">Account Information Databases</a></dt><dt>single server, <a class="indexterm" href="SambaHA.html#id2694735">The Front-End Challenge</a></dt><dt>single sign-on, <a class="indexterm" href="domain-member.html#id2591202">Features and Benefits</a> (see SSO)</dt><dt>Single Sign-On, <a class="indexterm" href="CUPS-printing.html#id2664341">Caveats to Be Considered</a></dt><dt>single-byte charsets, <a class="indexterm" href="unicode.html#id2692250">What Are Charsets and Unicode?</a></dt><dt>single-logon, <a class="indexterm" href="samba-pdc.html#id2586627">The Special Case of Windows 9x/Me</a></dt><dt>single-sign-on, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>single-user mode, <a class="indexterm" href="winbind.html#id2677024">Requirements</a></dt><dt>slapadd, <a class="indexterm" href="passdb.html#id2615921">Initialize the LDAP Database</a></dt><dt>slapd, <a class="indexterm" href="passdb.html#id2615649">OpenLDAP Configuration</a></dt><dt>slapd.conf, <a class="indexterm" href="ChangeNotes.html#id2601340">LDAP Changes in Samba-3.0.23</a>, <a class="indexterm" href="passdb.html#id2615649">OpenLDAP Configuration</a>, <a class="indexterm" href="passdb.html#id2616644">Security and sambaSamAccount</a></dt><dt>slapd.pem, <a class="indexterm" href="samba-bdc.html#id2589047">LDAP Configuration Notes</a></dt><dt>slapindex, <a class="indexterm" href="ChangeNotes.html#id2601340">LDAP Changes in Samba-3.0.23</a></dt><dt>slappasswd, <a class="indexterm" href="passdb.html#id2615921">Initialize the LDAP Database</a></dt><dt>slave servers, <a class="indexterm" href="NT4Migration.html#id2701821">Domain Layout</a></dt><dt>slow browsing, <a class="indexterm" href="NetworkBrowsing.html#id2608626">Browsing of Shares and Directories is Very Slow</a></dt><dt>slow network, <a class="indexterm" href="speed.html#id2712852">Samba Performance Problem Due to Changing Linux Kernel</a></dt><dt>slow network browsing, <a class="indexterm" href="NetworkBrowsing.html#id2608826">Invalid Cached Share References Affects Network Browsing</a></dt><dt>slow performance, <a class="indexterm" href="speed.html#id2713039">Samba Performance is Very Slow</a></dt><dt>smart printers, <a class="indexterm" href="CUPS-printing.html#id2655341">Overview</a></dt><dt>SMB, <a class="indexterm" href="ServerType.html#id2582318">Server Security (User Level Security)</a>, <a class="indexterm" href="domain-member.html#id2596109">I Can't Join a Windows 2003 PDC</a>, <a class="indexterm" href="StandAloneServer.html#id2596329">Background</a>, <a class="indexterm" href="NetworkBrowsing.html#id2601603">Features and Benefits</a>, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a>, <a class="indexterm" href="NetworkBrowsing.html#id2606877">Technical Overview of Browsing</a>, <a class="indexterm" href="securing-samba.html#id2640578">Using Interface Protection</a>, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a>, <a class="indexterm" href="integrate-ms-networks.html#id2691028">Name Resolution as Used within MS Windows Networking</a>, <a class="indexterm" href="Backup.html#id2693846">BackupPC</a>, <a class="indexterm" href="SambaHA.html#id2694735">The Front-End Challenge</a>, <a class="indexterm" href="SambaHA.html#id2695132">Server Pool Communications</a>, <a class="indexterm" href="problems.html">Analyzing and Solving Samba Problems</a></dt><dt>SMB encryption, <a class="indexterm" href="passdb.html#id2610423">Advantages of Encrypted Passwords</a></dt><dt>SMB locks, <a class="indexterm" href="SambaHA.html#id2695132">Server Pool Communications</a></dt><dt>SMB name, <a class="indexterm" href="integrate-ms-networks.html#id2691028">Name Resolution as Used within MS Windows Networking</a></dt><dt>SMB networking, <a class="indexterm" href="problems.html#id2707164">Diagnostics Tools</a></dt><dt>SMB password, <a class="indexterm" href="passdb.html#id2612037">The smbpasswd Tool</a></dt><dt>SMB Password, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>SMB password encryption, <a class="indexterm" href="passdb.html#id2610108">Important Notes About Security</a></dt><dt>smb ports, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></dt><dt>SMB printers, <a class="indexterm" href="CUPS-printing.html#id2671743">Administrator Cannot Install Printers for All Local Users</a></dt><dt>SMB requests, <a class="indexterm" href="SambaHA.html#id2694829">Demultiplexing SMB Requests</a></dt><dt>SMB semantics, <a class="indexterm" href="SambaHA.html#id2694935">The Distributed File System Challenge</a></dt><dt>SMB server, <a class="indexterm" href="passdb.html#id2610423">Advantages of Encrypted Passwords</a></dt><dt>SMB Server, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>SMB services, <a class="indexterm" href="SambaHA.html#id2695062">Restrictive Constraints on Distributed File Systems</a></dt><dt>SMB signing, <a class="indexterm" href="domain-member.html#id2596109">I Can't Join a Windows 2003 PDC</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a></dt><dt>SMB state information, <a class="indexterm" href="SambaHA.html#id2694829">Demultiplexing SMB Requests</a></dt><dt>SMB-based messaging, <a class="indexterm" href="NetworkBrowsing.html#netdiscuss">Discussion</a></dt><dt>smb-cdserver.conf, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></dt><dt>smb.conf, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></dt><dt>SMB/CIFS, <a class="indexterm" href="samba-bdc.html#id2589470">What Qualifies a Domain Controller on the Network?</a>, <a class="indexterm" href="domain-member.html#id2596109">I Can't Join a Windows 2003 PDC</a>, <a class="indexterm" href="passdb.html#id2610108">Important Notes About Security</a>, <a class="indexterm" href="unicode.html#id2692250">What Are Charsets and Unicode?</a></dt><dt>SMB/CIFS server, <a class="indexterm" href="passdb.html#id2614558">Password Backends</a></dt><dt>smbclient, <a class="indexterm" href="domain-member.html#ads-test-smbclient">Testing with smbclient</a>, <a class="indexterm" href="classicalprinting.html#id2650617">Installing Driver Files into [print$]</a>, <a class="indexterm" href="classicalprinting.html#id2650835">smbclient to Confirm Driver Installation</a>, <a class="indexterm" href="Backup.html#id2693846">BackupPC</a>, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a>, <a class="indexterm" href="problems.html#id2707216">Debugging with Samba Itself</a></dt><dt>smbd, <a class="indexterm" href="install.html#id2574163">Starting Samba</a>, <a class="indexterm" href="install.html#id2574356">Example Configuration</a>, <a class="indexterm" href="install.html#id2574615">Test Your Config File with testparm</a>, <a class="indexterm" href="FastStart.html#id2576682">Secure Read-Write File and Print Server</a>, <a class="indexterm" href="FastStart.html#id2577582">Example Configuration</a>, <a class="indexterm" href="passdb.html#id2614688">smbpasswd: Encrypted Password Database</a>, <a class="indexterm" href="passdb.html#id2615414">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="passdb.html#id2616106">Configuring Samba</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id2627976">NT4-Style Domains (Includes Samba Domains)</a>, <a class="indexterm" href="rights.html#id2631138">Description of Privileges</a>, <a class="indexterm" href="classicalprinting.html#id2644958">Verifying Configuration with testparm</a>, <a class="indexterm" href="classicalprinting.html#id2645155">Rapid Configuration Validation</a>, <a class="indexterm" href="VFS.html#id2673350">extd_audit</a>, <a class="indexterm" href="winbind.html#id2675430">Features and Benefits</a>, <a class="indexterm" href="winbind.html#id2677176">Testing Things Out</a>, <a class="indexterm" href="winbind.html#id2677976">Join the Samba Server to the PDC Domain</a>, <a class="indexterm" href="winbind.html#id2678575">Linux</a>, <a class="indexterm" href="winbind.html#id2678780">Solaris</a>, <a class="indexterm" href="SambaHA.html#id2695132">Server Pool Communications</a>, <a class="indexterm" href="largefile.html">Handling Large Directories</a>, <a class="indexterm" href="cfgsmarts.html#id2696226">Multiple Server Hosting</a>, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a>, <a class="indexterm" href="problems.html#id2707216">Debugging with Samba Itself</a></dt><dt>smbgroupedit, <a class="indexterm" href="NetCommand.html">Remote and Local Management: The Net Command</a></dt><dt>smbgrpadd.sh, <a class="indexterm" href="groupmapping.html#id2620275">Sample smb.conf Add Group Script</a></dt><dt>smbHome, <a class="indexterm" href="passdb.html#id2616879">LDAP Special Attributes for sambaSamAccounts</a></dt><dt>smbldap-groupadd, <a class="indexterm" href="NetCommand.html#id2621645">Adding or Creating a New Group</a></dt><dt>smbldap-tools, <a class="indexterm" href="passdb.html#id2615111">ldapsam</a></dt><dt>smbpasswd, <a class="indexterm" href="ServerType.html#id2581855">Example Configuration</a>, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a>, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a>, <a class="indexterm" href="samba-bdc.html#id2590853">How Do I Replicate the smbpasswd File?</a>, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id2594193">Configure smb.conf</a>, <a class="indexterm" href="domain-member.html#id2595551">Sharing User ID Mappings between Samba Domain Members</a>, <a class="indexterm" href="ChangeNotes.html#id2601219">Group Mapping Changes in Samba-3.0.23</a>, <a class="indexterm" href="passdb.html">Account Information Databases</a>, <a class="indexterm" href="passdb.html#id2609356">Backward Compatibility Account Storage Systems</a>, <a class="indexterm" href="passdb.html#acctmgmttools">Account Management Tools</a>, <a class="indexterm" href="passdb.html#id2612037">The smbpasswd Tool</a>, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a>, <a class="indexterm" href="passdb.html#id2613105">User Account Management</a>, <a class="indexterm" href="passdb.html#id2614433">Account Import/Export</a>, <a class="indexterm" href="passdb.html#id2614688">smbpasswd: Encrypted Password Database</a>, <a class="indexterm" href="passdb.html#id2615111">ldapsam</a>, <a class="indexterm" href="passdb.html#id2615414">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="passdb.html#id2615921">Initialize the LDAP Database</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a>, <a class="indexterm" href="PolicyMgmt.html#id2682597">Samba PDC</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2700456">Passdb Backends and Authentication</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2700650">New Schema</a></dt><dt>smbpasswd format, <a class="indexterm" href="passdb.html#id2613222">Listing User and Machine Accounts</a></dt><dt>smbpasswd plaintext database, <a class="indexterm" href="passdb.html#id2614688">smbpasswd: Encrypted Password Database</a></dt><dt>SMBsessetupX, <a class="indexterm" href="samba-pdc.html#id2586627">The Special Case of Windows 9x/Me</a></dt><dt>smbspool, <a class="indexterm" href="CUPS-printing.html#id2670834">Printing from CUPS to Windows-Attached Printers</a></dt><dt>smbstatus, <a class="indexterm" href="CUPS-printing.html#id2671551">Avoid Being Connected to the Samba Server as the Wrong User</a>, <a class="indexterm" href="bugreport.html#id2708995">Attaching to a Running Process</a></dt><dt>SMBtconX, <a class="indexterm" href="samba-pdc.html#id2586627">The Special Case of Windows 9x/Me</a></dt><dt>smbusers, <a class="indexterm" href="securing-samba.html#id2640518">User-Based Protection</a></dt><dt>SMS, <a class="indexterm" href="problems.html#id2707665">The Windows Network Monitor</a></dt><dt>Snapshots, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>sniffer, <a class="indexterm" href="samba-pdc.html#id2586627">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="problems.html#id2707164">Diagnostics Tools</a></dt><dt>socket, <a class="indexterm" href="cfgsmarts.html#id2696226">Multiple Server Hosting</a></dt><dt>socket address, <a class="indexterm" href="cfgsmarts.html#id2696226">Multiple Server Hosting</a></dt><dt>SOFTQ printing system, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>Solaris, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="winbind.html#id2678970">Configure Winbind and PAM</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680529">Remote Management with ThinLinc</a>, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a>, <a class="indexterm" href="unicode.html#id2692681">Basic Parameter Setting</a></dt><dt>Solaris 9, <a class="indexterm" href="winbind.html#id2678780">Solaris</a></dt><dt>source code, <a class="indexterm" href="install.html#id2574356">Example Configuration</a></dt><dt>space character, <a class="indexterm" href="groupmapping.html#id2620587">Adding Groups Fails</a></dt><dt>special account, <a class="indexterm" href="rights.html">User Rights and Privileges</a>, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></dt><dt>special section, <a class="indexterm" href="classicalprinting.html#id2649234">[print$] Stanza Parameters</a></dt><dt>special sections, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>special stanza, <a class="indexterm" href="classicalprinting.html#id2649234">[print$] Stanza Parameters</a></dt><dt>specific restrictions, <a class="indexterm" href="AccessControls.html#id2635030">Access Controls on Shares</a></dt><dt>Specify an IP address, <a class="indexterm" href="ClientConfig.html#id2598942">MS Windows Me</a></dt><dt>spinning process, <a class="indexterm" href="bugreport.html#id2708995">Attaching to a Running Process</a></dt><dt>spool, <a class="indexterm" href="classicalprinting.html#id2644958">Verifying Configuration with testparm</a></dt><dd><dl><dt>directory, <a class="indexterm" href="install.html#id2573195">Configuration File Syntax</a></dt></dl></dd><dt>spool files, <a class="indexterm" href="classicalprinting.html#id2648051">Custom Print Commands</a></dt><dt>spooled file, <a class="indexterm" href="classicalprinting.html#id2644356">Technical Introduction</a></dt><dt>spooler., <a class="indexterm" href="install.html#id2573195">Configuration File Syntax</a></dt><dt>spooling, <a class="indexterm" href="classicalprinting.html#id2648051">Custom Print Commands</a>, <a class="indexterm" href="CUPS-printing.html#id2656456">Central Spooling vs. &#8220;Peer-to-Peer&#8221; Printing</a></dt><dd><dl><dt>central, <a class="indexterm" href="CUPS-printing.html#id2656456">Central Spooling vs. &#8220;Peer-to-Peer&#8221; Printing</a></dt><dt>peer-to-peer, <a class="indexterm" href="CUPS-printing.html#id2656456">Central Spooling vs. &#8220;Peer-to-Peer&#8221; Printing</a></dt></dl></dd><dt>spooling path, <a class="indexterm" href="classicalprinting.html#id2644958">Verifying Configuration with testparm</a></dt><dt>spooling-only, <a class="indexterm" href="CUPS-printing.html#id2656507">Raw Print Serving: Vendor Drivers on Windows Clients</a></dt><dt>SPOOLSS, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>SQL, <a class="indexterm" href="ChangeNotes.html#id2601160">Passdb Changes</a></dt><dt>SQUID, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></dt><dt>SRV records, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a>, <a class="indexterm" href="NetworkBrowsing.html#adsdnstech">DNS and Active Directory</a></dt><dt>SRV RR, <a class="indexterm" href="integrate-ms-networks.html#id2690436">Background Information</a></dt><dt>SrvMgr.exe, <a class="indexterm" href="domain-member.html#id2592325">Managing Domain Machine Accounts using NT4 Server Manager</a></dt><dt>srvmgr.exe, <a class="indexterm" href="domain-member.html#id2592325">Managing Domain Machine Accounts using NT4 Server Manager</a></dt><dt>SRVTOOLS.EXE, <a class="indexterm" href="domain-member.html#id2592325">Managing Domain Machine Accounts using NT4 Server Manager</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id2679982">Remote Server Administration</a></dt><dt>ssh, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a>, <a class="indexterm" href="samba-bdc.html#id2590853">How Do I Replicate the smbpasswd File?</a>, <a class="indexterm" href="passdb.html#id2614688">smbpasswd: Encrypted Password Database</a>, <a class="indexterm" href="Backup.html#id2693846">BackupPC</a></dt><dt>SSH, <a class="indexterm" href="classicalprinting.html#id2650835">smbclient to Confirm Driver Installation</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680529">Remote Management with ThinLinc</a></dt><dt>SSL, <a class="indexterm" href="SWAT.html#id2704171">Securing SWAT through SSL</a></dt><dt>SSO, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a>, <a class="indexterm" href="domain-member.html#id2591202">Features and Benefits</a>, <a class="indexterm" href="passdb.html#id2611176">Comments Regarding LDAP</a></dt><dt>stability, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>stack trace, <a class="indexterm" href="bugreport.html#id2708862">Internal Errors</a></dt><dt>stale network links, <a class="indexterm" href="NetworkBrowsing.html#id2608826">Invalid Cached Share References Affects Network Browsing</a></dt><dt>stand-alone server, <a class="indexterm" href="idmapper.html#id2626560">Standalone Samba Server</a></dt><dt>standalone, <a class="indexterm" href="ServerType.html#id2580932">Server Types</a>, <a class="indexterm" href="samba-pdc.html#id2585096">Preparing for Domain Control</a>, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a></dt><dt>standalone filter, <a class="indexterm" href="CUPS-printing.html#id2659665">pstoraster</a></dt><dt>standalone server, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="StandAloneServer.html">Standalone Servers</a>, <a class="indexterm" href="StandAloneServer.html#id2596235">Features and Benefits</a>, <a class="indexterm" href="StandAloneServer.html#id2596329">Background</a>, <a class="indexterm" href="passdb.html#id2613456">Adding User Accounts</a>, <a class="indexterm" href="classicalprinting.html#id2644133">Features and Benefits</a>, <a class="indexterm" href="NT4Migration.html#id2701821">Domain Layout</a></dt><dt>standard confirmation, <a class="indexterm" href="InterdomainTrusts.html#id2642166">Creating an NT4 Domain Trust</a></dt><dt>stanza, <a class="indexterm" href="install.html#id2573195">Configuration File Syntax</a>, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>stapling, <a class="indexterm" href="CUPS-printing.html#id2659497">pstops</a></dt><dt>StartDocPrinter, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>starting samba</dt><dd><dl><dt>nmbd, <a class="indexterm" href="install.html#id2574163">Starting Samba</a>, <a class="indexterm" href="FastStart.html#id2576682">Secure Read-Write File and Print Server</a>, <a class="indexterm" href="FastStart.html#id2577582">Example Configuration</a></dt><dt>smbd, <a class="indexterm" href="install.html#id2574163">Starting Samba</a>, <a class="indexterm" href="FastStart.html#id2576682">Secure Read-Write File and Print Server</a>, <a class="indexterm" href="FastStart.html#id2577582">Example Configuration</a></dt><dt>winbindd, <a class="indexterm" href="install.html#id2574163">Starting Samba</a>, <a class="indexterm" href="FastStart.html#id2577582">Example Configuration</a>, <a class="indexterm" href="winbind.html#id2675430">Features and Benefits</a></dt></dl></dd><dt>startsmb, <a class="indexterm" href="compiling.html#id2710468">Alternative: Starting smbd as a Daemon</a></dt><dt>StartTLS, <a class="indexterm" href="passdb.html#id2616644">Security and sambaSamAccount</a></dt><dt>startup</dt><dd><dl><dt>process, <a class="indexterm" href="install.html#id2574163">Starting Samba</a></dt></dl></dd><dt>startup script, <a class="indexterm" href="winbind.html#id2678214">Starting and Testing the winbindd Daemon</a></dt><dt>state, <a class="indexterm" href="SambaHA.html#id2694616">Why Is This So Hard?</a></dt><dt>state information, <a class="indexterm" href="SambaHA.html#id2694616">Why Is This So Hard?</a></dt><dt>state of knowledge, <a class="indexterm" href="SambaHA.html#id2694331">Features and Benefits</a></dt><dt>static WINS entries, <a class="indexterm" href="NetworkBrowsing.html#id2606281">Static WINS Entries</a></dt><dt>status32 codes, <a class="indexterm" href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a></dt><dt>sticky bit, <a class="indexterm" href="AccessControls.html#id2633292">File and Directory Access Control</a>, <a class="indexterm" href="NT4Migration.html#id2702022">Server Share and Directory Layout</a></dt><dt>storage mechanism, <a class="indexterm" href="passdb.html#acctmgmttools">Account Management Tools</a></dt><dt>storage methods, <a class="indexterm" href="passdb.html#id2612037">The smbpasswd Tool</a></dt><dt>stphoto2.ppd, <a class="indexterm" href="CUPS-printing.html#id2661902">Examples for Filtering Chains</a></dt><dt>strange delete semantics, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>stripped of comments, <a class="indexterm" href="SWAT.html#id2703390">Features and Benefits</a></dt><dt>strptime, <a class="indexterm" href="passdb.html#id2613628">Changing User Accounts</a></dt><dt>stunnel, <a class="indexterm" href="SWAT.html#id2704171">Securing SWAT through SSL</a></dt><dt>su, <a class="indexterm" href="pam.html#id2688266">Anatomy of /etc/pam.d Entries</a></dt><dt>subnet mask, <a class="indexterm" href="ClientConfig.html#id2597752">MS Windows XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id2598942">MS Windows Me</a>, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>subnets, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a>, <a class="indexterm" href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a></dt><dt>subscription, <a class="indexterm" href="ch46.html#id2714245">Free Support</a></dt><dt>subsuffix parameters, <a class="indexterm" href="upgrading-to-3.0.html#id2701043">New Suffix for Searching</a></dt><dt>Subversion, <a class="indexterm" href="compiling.html#id2709296">Introduction</a>, <a class="indexterm" href="compiling.html#id2709386">Access via Subversion</a></dt><dt>successful join, <a class="indexterm" href="domain-member.html#ads-test-server">Testing Server Setup</a></dt><dt>successful migration, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>sufficient, <a class="indexterm" href="pam.html#id2688266">Anatomy of /etc/pam.d Entries</a></dt><dt>suffixes, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></dt><dt>SUID, <a class="indexterm" href="AccessControls.html#id2633292">File and Directory Access Control</a></dt><dt>Sun, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a></dt><dt>Sun ONE iDentity server, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>Sun Solaris, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>SUN-Raster, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></dt><dt>support, <a class="indexterm" href="ch46.html">Samba Support</a></dt><dt>support exposure, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>SVN</dt><dd><dl><dt>web, <a class="indexterm" href="compiling.html#id2709350">Access via ViewCVS</a></dt></dl></dd><dt>SVRTOOLS.EXE, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a></dt><dt>SWAT, <a class="indexterm" href="install.html#id2573150">Configuring Samba (smb.conf)</a>, <a class="indexterm" href="SWAT.html">SWAT: The Samba Web Administration Tool</a></dt><dt>swat, <a class="indexterm" href="install.html#id2574798">SWAT</a>, <a class="indexterm" href="SWAT.html#id2703534">Validate SWAT Installation</a>, <a class="indexterm" href="SWAT.html#id2703604">Locating the SWAT File</a>, <a class="indexterm" href="SWAT.html#xinetd">Enabling SWAT for Use</a></dt><dd><dl><dt>enable, <a class="indexterm" href="SWAT.html#xinetd">Enabling SWAT for Use</a></dt><dt>security, <a class="indexterm" href="SWAT.html#id2704171">Securing SWAT through SSL</a></dt></dl></dd><dt>SWAT binary support, <a class="indexterm" href="SWAT.html#id2703534">Validate SWAT Installation</a></dt><dt>swat command-line options, <a class="indexterm" href="SWAT.html#id2703604">Locating the SWAT File</a></dt><dt>SWAT permission allowed, <a class="indexterm" href="SWAT.html#xinetd">Enabling SWAT for Use</a></dt><dt>symbolic links, <a class="indexterm" href="msdfs.html#id2643489">Features and Benefits</a></dt><dt>synchronization, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a>, <a class="indexterm" href="samba-pdc.html#id2587021">Security Mode and Master Browsers</a>, <a class="indexterm" href="NetworkBrowsing.html#id2605636">WINS: The Windows Internetworking Name Server</a>, <a class="indexterm" href="NetworkBrowsing.html#id2607589">Behavior of Cross-Subnet Browsing</a></dt><dt>synchronization problems, <a class="indexterm" href="winbind.html#id2675773">Introduction</a></dt><dt>synchronize, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a>, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a>, <a class="indexterm" href="NetworkBrowsing.html#id2605543">Use of the Remote Browse Sync Parameter</a>, <a class="indexterm" href="NetworkBrowsing.html#id2607589">Behavior of Cross-Subnet Browsing</a></dt><dt>synchronized, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a></dt><dt>syntax tolerates spelling errors, <a class="indexterm" href="classicalprinting.html#id2644675">Simple Print Configuration</a></dt><dt>system access controls, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a></dt><dt>system accounts, <a class="indexterm" href="passdb.html#id2613105">User Account Management</a></dt><dt>system administrator, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>system groups, <a class="indexterm" href="NetCommand.html#id2621847">Mapping Windows Groups to UNIX Groups</a></dt><dt>system interface scripts, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>system policies, <a class="indexterm" href="PolicyMgmt.html#id2681239">Creating and Managing System Policies</a></dt><dt>System Policy Editor, <a class="indexterm" href="PolicyMgmt.html#id2681239">Creating and Managing System Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id2681990">Administration of Windows 200x/XP Policies</a>, <a class="indexterm" href="ProfileMgmt.html#id2685694">MS Windows 9x/Me</a></dt><dt>system security, <a class="indexterm" href="groupmapping.html#id2619442">Applicable Only to Versions Earlier than 3.0.11</a></dt><dt>system tools, <a class="indexterm" href="Backup.html#id2693704">Features and Benefits</a></dt><dt>SYSV, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>SYSVOL, <a class="indexterm" href="PolicyMgmt.html#id2681787">MS Windows 200x/XP Professional Policies</a></dt></dl></div><div class="indexdiv"><h3>T</h3><dl><dt>tail, <a class="indexterm" href="diagnosis.html#id2705108">Assumptions</a></dt><dt>take ownership, <a class="indexterm" href="rights.html#id2631138">Description of Privileges</a></dt><dt>Take Ownership, <a class="indexterm" href="AccessControls.html#id2635654">Viewing File Ownership</a></dt><dt>tape, <a class="indexterm" href="NT4Migration.html#id2702022">Server Share and Directory Layout</a></dt><dt>tar, <a class="indexterm" href="Backup.html#id2693846">BackupPC</a></dt><dt>tarball, <a class="indexterm" href="install.html#id2574356">Example Configuration</a></dt><dt>tattoo effect, <a class="indexterm" href="NT4Migration.html#id2702901">Samba-3 Implementation Choices</a></dt><dt>TCP, <a class="indexterm" href="NetworkBrowsing.html#id2605217">Multiple Interfaces</a>, <a class="indexterm" href="SambaHA.html#id2694616">Why Is This So Hard?</a></dt><dt>TCP data streams, <a class="indexterm" href="SambaHA.html#id2694735">The Front-End Challenge</a></dt><dt>TCP failover, <a class="indexterm" href="SambaHA.html#id2694616">Why Is This So Hard?</a></dt><dt>TCP port, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a></dt><dt>TCP port 139, <a class="indexterm" href="integrate-ms-networks.html#id2690436">Background Information</a>, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></dt><dt>TCP port 445, <a class="indexterm" href="integrate-ms-networks.html#id2690436">Background Information</a>, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></dt><dt>tcp ports, <a class="indexterm" href="winbind.html#id2677976">Join the Samba Server to the PDC Domain</a></dt><dt>TCP/IP, <a class="indexterm" href="ClientConfig.html#id2597752">MS Windows XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id2598942">MS Windows Me</a>, <a class="indexterm" href="NetworkBrowsing.html#id2601603">Features and Benefits</a>, <a class="indexterm" href="NetworkBrowsing.html#id2606524">Windows Networking Protocols</a></dt><dt>TCP/IP configuration, <a class="indexterm" href="ClientConfig.html#id2597752">MS Windows XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id2598942">MS Windows Me</a></dt><dt>TCP/IP configuration panel, <a class="indexterm" href="ClientConfig.html#id2598395">MS Windows 2000</a></dt><dt>TCP/IP protocol configuration, <a class="indexterm" href="ClientConfig.html#id2597633">Technical Details</a></dt><dt>TCP/IP protocol settings, <a class="indexterm" href="ClientConfig.html#id2597752">MS Windows XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id2598395">MS Windows 2000</a></dt><dt>TCP/IP protocol stack, <a class="indexterm" href="NetworkBrowsing.html#id2605636">WINS: The Windows Internetworking Name Server</a></dt><dt>TCP/IP-only, <a class="indexterm" href="NetworkBrowsing.html#id2606524">Windows Networking Protocols</a></dt><dt>tcpdump, <a class="indexterm" href="problems.html#id2707471">Tcpdump</a></dt><dt>TDB, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a>, <a class="indexterm" href="classicalprinting.html#id2651588">Running rpcclient with setdriver</a>, <a class="indexterm" href="CUPS-printing.html#id2667763">The Printing *.tdb Files</a>, <a class="indexterm" href="CUPS-printing.html#id2667965">Trivial Database Files</a>, <a class="indexterm" href="cfgsmarts.html#id2696226">Multiple Server Hosting</a></dt><dd><dl><dt>backing up (see tdbbackup)</dt></dl></dd><dt>tdb, <a class="indexterm" href="winbind.html#id2676758">User and Group ID Allocation</a>, <a class="indexterm" href="SambaHA.html#id2695132">Server Pool Communications</a></dt><dt>tdb data files, <a class="indexterm" href="upgrading-to-3.0.html#id2700008">TDB Data Files</a></dt><dt>TDB database, <a class="indexterm" href="classicalprinting.html#id2650980">Running rpcclient with adddriver</a></dt><dt>TDB database files, <a class="indexterm" href="classicalprinting.html#prt-modeset">Setting Device Modes on New Printers</a></dt><dt>tdb file backup, <a class="indexterm" href="upgrading-to-3.0.html#id2700008">TDB Data Files</a></dt><dt>tdb file descriptions, <a class="indexterm" href="install.html#tdbdocs">TDB Database File Information</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2700008">TDB Data Files</a></dt><dt>tdb file locations, <a class="indexterm" href="install.html#tdbdocs">TDB Database File Information</a></dt><dt>tdb files, <a class="indexterm" href="AccessControls.html#id2635030">Access Controls on Shares</a></dt><dt>tdbbackup, <a class="indexterm" href="CUPS-printing.html#id2668150">Using tdbbackup</a>, <a class="indexterm" href="speed.html#id2712944">Corrupt tdb Files</a></dt><dt>tdbdump, <a class="indexterm" href="AccessControls.html#id2635030">Access Controls on Shares</a></dt><dt>tdbsam, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a>, <a class="indexterm" href="ChangeNotes.html#id2601219">Group Mapping Changes in Samba-3.0.23</a>, <a class="indexterm" href="passdb.html">Account Information Databases</a>, <a class="indexterm" href="passdb.html#passdbtech">Technical Information</a>, <a class="indexterm" href="passdb.html#id2613222">Listing User and Machine Accounts</a>, <a class="indexterm" href="passdb.html#id2614688">smbpasswd: Encrypted Password Database</a>, <a class="indexterm" href="passdb.html#id2614953">tdbsam</a>, <a class="indexterm" href="groupmapping.html#id2619564">Default Users, Groups, and Relative Identifiers</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>tdbsam databases, <a class="indexterm" href="passdb.html#id2614558">Password Backends</a></dt><dt>technical reviewers, <a class="indexterm" href="cfgsmarts.html">Advanced Configuration Techniques</a></dt><dt>Telnet, <a class="indexterm" href="passdb.html#id2610564">Advantages of Non-Encrypted Passwords</a></dt><dt>telnet logins, <a class="indexterm" href="winbind.html#id2679136">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>template, <a class="indexterm" href="ProfileMgmt.html#id2685594">Creating and Managing Group Profiles</a></dt><dt>temporary location, <a class="indexterm" href="classicalprinting.html#id2647431">Print Commands</a></dt><dt>terminal server, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680529">Remote Management with ThinLinc</a></dt><dt>Terminal Server, <a class="indexterm" href="SambaHA.html#id2694829">Demultiplexing SMB Requests</a></dt><dt>Testing Server Setup, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a></dt><dt>testparm, <a class="indexterm" href="install.html#id2574615">Test Your Config File with testparm</a>, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="classicalprinting.html#id2644675">Simple Print Configuration</a>, <a class="indexterm" href="classicalprinting.html#id2644958">Verifying Configuration with testparm</a>, <a class="indexterm" href="classicalprinting.html#id2645155">Rapid Configuration Validation</a>, <a class="indexterm" href="classicalprinting.html#id2645543">Extended Printing Configuration</a>, <a class="indexterm" href="diagnosis.html#id2705108">Assumptions</a>, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a>, <a class="indexterm" href="problems.html#id2707216">Debugging with Samba Itself</a></dt><dt>tethereal, <a class="indexterm" href="problems.html#id2707471">Tcpdump</a></dt><dt>text/plain, <a class="indexterm" href="CUPS-printing.html#id2658945">MIME Type Conversion Rules</a></dt><dt>texttops, <a class="indexterm" href="CUPS-printing.html#id2658945">MIME Type Conversion Rules</a></dt><dt>thin client, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680529">Remote Management with ThinLinc</a></dt><dt>ThinLinc, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680529">Remote Management with ThinLinc</a></dt><dt>tid, <a class="indexterm" href="SambaHA.html#id2694829">Demultiplexing SMB Requests</a></dt><dt>TIFF, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></dt><dt>TightVNC, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680529">Remote Management with ThinLinc</a></dt><dt>time difference, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a></dt><dt>time format, <a class="indexterm" href="passdb.html#id2613628">Changing User Accounts</a></dt><dt>time-to-live (see TTL)</dt><dt>tool, <a class="indexterm" href="AccessControls.html#id2635301">Windows 200x/XP</a></dt><dt>tools, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="passdb.html#id2611451">Caution Regarding LDAP and Samba</a></dt><dt>tools\reskit\netadmin\poledit, <a class="indexterm" href="PolicyMgmt.html#id2681428">Windows 9x/ME Policies</a></dt><dt>traditional printing, <a class="indexterm" href="classicalprinting.html#id2648051">Custom Print Commands</a></dt><dt>training course, <a class="indexterm" href="Backup.html#id2693749">Discussion of Backup Solutions</a></dt><dt>transfer differences, <a class="indexterm" href="Backup.html#id2694017">Rsync</a></dt><dt>transformation, <a class="indexterm" href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></dt><dt>transitive, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a></dt><dt>transparent access, <a class="indexterm" href="domain-member.html#id2591202">Features and Benefits</a></dt><dt>transparently reconnected, <a class="indexterm" href="SambaHA.html#id2694486">The Ultimate Goal</a></dt><dt>transport connection loss, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>Transport Layer Seccurity, TLS</dt><dd><dl><dt>Configuring, <a class="indexterm" href="ch-ldap-tls.html#s1-config-ldap-tls">Configuring</a></dt><dt>Introduction, <a class="indexterm" href="ch-ldap-tls.html#s1-intro-ldap-tls">Introduction</a></dt></dl></dd><dt>transport layer security (see TLS)</dt><dt>Transport Layer Security, TLS</dt><dd><dl><dt>Testing, <a class="indexterm" href="ch-ldap-tls.html#s1-test-ldap-tls">Testing</a></dt><dt>Troubleshooting, <a class="indexterm" href="ch-ldap-tls.html#s1-int-ldap-tls">Troubleshooting</a></dt></dl></dd><dt>trigger, <a class="indexterm" href="samba-pdc.html#id2585096">Preparing for Domain Control</a>, <a class="indexterm" href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a></dt><dt>trivial database, <a class="indexterm" href="passdb.html#id2609540">New Account Storage Systems</a> (see TDB)</dt><dt>troubleshoot, <a class="indexterm" href="classicalprinting.html#id2645155">Rapid Configuration Validation</a></dt><dt>troubleshooting, <a class="indexterm" href="CUPS-printing.html#id2670834">Printing from CUPS to Windows-Attached Printers</a></dt><dt>Tru64 UNIX, <a class="indexterm" href="unicode.html#id2692681">Basic Parameter Setting</a></dt><dt>trust, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a></dt><dd><dl><dt>account, <a class="indexterm" href="ServerType.html#id2581638">Domain Security Mode (User-Level Security)</a></dt></dl></dd><dt>trust account, <a class="indexterm" href="ServerType.html#id2581638">Domain Security Mode (User-Level Security)</a>, <a class="indexterm" href="passdb.html#TOSHARG-acctflags">Account Flags Management</a>, <a class="indexterm" href="InterdomainTrusts.html#id2643094">NT4-Style Domain Trusts with Windows 2000</a></dt><dd><dl><dt>interdomain, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a></dt><dt>machine, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a></dt></dl></dd><dt>trust account password, <a class="indexterm" href="samba-bdc.html#id2587890">Features and Benefits</a></dt><dt>trust accounts, <a class="indexterm" href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a></dt><dt>trust established, <a class="indexterm" href="InterdomainTrusts.html#id2642348">Interdomain Trust Facilities</a></dt><dt>trust relationship, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a>, <a class="indexterm" href="InterdomainTrusts.html#id2642263">Completing an NT4 Domain Trust</a>, <a class="indexterm" href="InterdomainTrusts.html#id2642348">Interdomain Trust Facilities</a>, <a class="indexterm" href="InterdomainTrusts.html#id2642557">Configuring Samba NT-Style Domain Trusts</a>, <a class="indexterm" href="InterdomainTrusts.html#id2643094">NT4-Style Domain Trusts with Windows 2000</a></dt><dt>trust relationships, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a>, <a class="indexterm" href="InterdomainTrusts.html#id2641780">Features and Benefits</a>, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a>, <a class="indexterm" href="InterdomainTrusts.html#id2642166">Creating an NT4 Domain Trust</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a></dt><dt>trusted, <a class="indexterm" href="NetworkBrowsing.html#id2607589">Behavior of Cross-Subnet Browsing</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>trusted domain, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a>, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a>, <a class="indexterm" href="InterdomainTrusts.html#id2642263">Completing an NT4 Domain Trust</a>, <a class="indexterm" href="InterdomainTrusts.html#id2642897">Samba as the Trusting Domain</a>, <a class="indexterm" href="winbind.html#id2676371">Name Service Switch</a></dt><dt>trusted domain name, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></dt><dt>trusted party, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></dt><dt>trusting domain, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a>, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a>, <a class="indexterm" href="InterdomainTrusts.html#id2642263">Completing an NT4 Domain Trust</a></dt><dt>trusting party, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></dt><dt>trusts, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a>, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a></dt><dt>TTL, <a class="indexterm" href="NetworkBrowsing.html#id2606281">Static WINS Entries</a></dt><dt>turn oplocks off, <a class="indexterm" href="locking.html#id2638829">Advanced Samba Oplocks Parameters</a></dt><dt>turnkey solution, <a class="indexterm" href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a></dt><dt>two-up, <a class="indexterm" href="CUPS-printing.html#id2661902">Examples for Filtering Chains</a></dt><dt>two-way</dt><dd><dl><dt>propagation, <a class="indexterm" href="samba-bdc.html#id2587890">Features and Benefits</a></dt></dl></dd><dt>two-way trust, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a>, <a class="indexterm" href="InterdomainTrusts.html#id2642130">Native MS Windows NT4 Trusts Configuration</a>, <a class="indexterm" href="InterdomainTrusts.html#id2642348">Interdomain Trust Facilities</a></dt></dl></div><div class="indexdiv"><h3>U</h3><dl><dt>UCS-2, <a class="indexterm" href="unicode.html#id2692552">Japanese Charsets</a></dt><dt>UDP, <a class="indexterm" href="samba-pdc.html#id2585096">Preparing for Domain Control</a>, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a>, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a>, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a>, <a class="indexterm" href="NetworkBrowsing.html#id2605217">Multiple Interfaces</a>, <a class="indexterm" href="NetworkBrowsing.html#id2607418">Cross-Subnet Browsing</a></dt><dt>UDP port 137, <a class="indexterm" href="integrate-ms-networks.html#id2690436">Background Information</a></dt><dt>udp ports, <a class="indexterm" href="winbind.html#id2677976">Join the Samba Server to the PDC Domain</a></dt><dt>UDP unicast, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a></dt><dt>UID, <a class="indexterm" href="samba-bdc.html#id2590243">Example Configuration</a>, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id2593911">Why Is This Better Than security = server?</a>, <a class="indexterm" href="domain-member.html#id2595551">Sharing User ID Mappings between Samba Domain Members</a>, <a class="indexterm" href="passdb.html#passdbtech">Technical Information</a>, <a class="indexterm" href="passdb.html#id2610628">Mapping User Identifiers between MS Windows and UNIX</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="passdb.html#id2613222">Listing User and Machine Accounts</a>, <a class="indexterm" href="groupmapping.html#id2617939">Features and Benefits</a>, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a>, <a class="indexterm" href="NetCommand.html#id2621847">Mapping Windows Groups to UNIX Groups</a>, <a class="indexterm" href="NetCommand.html#id2622967">UNIX and Windows User Management</a>, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id2627583">Primary Domain Controller</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a>, <a class="indexterm" href="winbind.html#id2675430">Features and Benefits</a>, <a class="indexterm" href="winbind.html#id2676061">Handling of Foreign SIDs</a>, <a class="indexterm" href="winbind.html#id2678214">Starting and Testing the winbindd Daemon</a></dt><dt>uid, <a class="indexterm" href="passdb.html#id2615649">OpenLDAP Configuration</a></dt><dt>UID numbers, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a></dt><dt>UID range, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a></dt><dt>unauthorized, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>unauthorized access, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a></dt><dt>UNC notation, <a class="indexterm" href="classicalprinting.html#id2650065">Identifying Driver Files</a></dt><dt>unexpected.tdb, <a class="indexterm" href="CUPS-printing.html#id2667763">The Printing *.tdb Files</a></dt><dd><dl><dt>(see also TDB)</dt></dl></dd><dt>unicast, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a></dt><dt>unicode, <a class="indexterm" href="unicode.html#id2692250">What Are Charsets and Unicode?</a></dt><dt>Unicode, <a class="indexterm" href="unicode.html#id2692384">Samba and Charsets</a>, <a class="indexterm" href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a></dt><dt>Unicode UTF-8, <a class="indexterm" href="unicode.html#id2692681">Basic Parameter Setting</a></dt><dt>unified logon, <a class="indexterm" href="winbind.html#id2675773">Introduction</a></dt><dt>UNIX, <a class="indexterm" href="unicode.html#id2692681">Basic Parameter Setting</a></dt><dd><dl><dt>server, <a class="indexterm" href="ServerType.html#id2580765">Features and Benefits</a></dt></dl></dd><dt>UNIX account, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id2592605">On-the-Fly Creation of Machine Trust Accounts</a></dt><dt>unix charset, <a class="indexterm" href="unicode.html#id2692681">Basic Parameter Setting</a></dt><dt>UNIX Domain Socket, <a class="indexterm" href="AccessControls.html#id2633292">File and Directory Access Control</a></dt><dt>UNIX domain socket, <a class="indexterm" href="winbind.html#id2676186">How Winbind Works</a></dt><dt>UNIX file system access controls, <a class="indexterm" href="AccessControls.html#id2632624">Features and Benefits</a></dt><dt>UNIX group, <a class="indexterm" href="NetCommand.html#id2621847">Mapping Windows Groups to UNIX Groups</a></dt><dt>UNIX groups, <a class="indexterm" href="groupmapping.html">Group Mapping: MS Windows and UNIX</a>, <a class="indexterm" href="winbind.html#id2675862">What Winbind Provides</a></dt><dt>UNIX home directories, <a class="indexterm" href="securing-samba.html#id2641220">Why Can Users Access Other Users' Home Directories?</a></dt><dt>UNIX host system, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>UNIX ID, <a class="indexterm" href="winbind.html#id2676758">User and Group ID Allocation</a></dt><dt>UNIX locking, <a class="indexterm" href="locking.html#id2637734">Discussion</a></dt><dt>UNIX login ID, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>UNIX permissions, <a class="indexterm" href="NT4Migration.html#id2702901">Samba-3 Implementation Choices</a></dt><dt>UNIX printer, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>UNIX printing, <a class="indexterm" href="classicalprinting.html#id2644356">Technical Introduction</a></dt><dt>UNIX system account, <a class="indexterm" href="domain-member.html#id2595873">Adding Machine to Domain Fails</a></dt><dt>UNIX system accounts, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>UNIX system files, <a class="indexterm" href="Backup.html#id2693704">Features and Benefits</a></dt><dt>UNIX user identifier (see UID)</dt><dt>UNIX users, <a class="indexterm" href="domain-member.html#id2593911">Why Is This Better Than security = server?</a>, <a class="indexterm" href="winbind.html#id2675862">What Winbind Provides</a></dt><dt>UNIX-style encrypted passwords, <a class="indexterm" href="passdb.html#passdbtech">Technical Information</a></dt><dt>UNIX-user database, <a class="indexterm" href="StandAloneServer.html#id2596329">Background</a></dt><dt>UNIX/Linux group, <a class="indexterm" href="groupmapping.html#id2618690">Warning: User Private Group Problems</a></dt><dt>UNIX/Linux user account, <a class="indexterm" href="NetCommand.html#id2622967">UNIX and Windows User Management</a></dt><dt>unlink calls, <a class="indexterm" href="VFS.html#id2673676">recycle</a></dt><dt>unlinked, <a class="indexterm" href="AccessControls.html#id2633292">File and Directory Access Control</a></dt><dt>unmapped groups, <a class="indexterm" href="ChangeNotes.html#id2600728">User and Group Changes</a></dt><dt>unmapped users, <a class="indexterm" href="ChangeNotes.html#id2600728">User and Group Changes</a></dt><dt>unprivileged account names, <a class="indexterm" href="StandAloneServer.html#RefDocServer">Reference Documentation Server</a></dt><dt>unsigned drivers, <a class="indexterm" href="CUPS-printing.html#id2671710">Windows 200x/XP Local Security Policies</a></dt><dt>unstoppable services, <a class="indexterm" href="SambaHA.html#id2694486">The Ultimate Goal</a></dt><dt>unsupported encryption, <a class="indexterm" href="domain-member.html#id2595186">Possible Errors</a></dt><dt>unsupported software, <a class="indexterm" href="ch46.html#id2714463">Commercial Support</a></dt><dt>updates, <a class="indexterm" href="securing-samba.html#id2641132">Upgrading Samba</a></dt><dt>upload drivers, <a class="indexterm" href="classicalprinting.html#id2644133">Features and Benefits</a></dt><dt>uploaded driver, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>uploaded drivers, <a class="indexterm" href="classicalprinting.html#id2648726">Point'n'Print Client Drivers on Samba Servers</a></dt><dt>uploading, <a class="indexterm" href="classicalprinting.html#id2648726">Point'n'Print Client Drivers on Samba Servers</a></dt><dt>upper-case, <a class="indexterm" href="ServerType.html#id2581256">User Level Security</a></dt><dt>uppercase, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a>, <a class="indexterm" href="domain-member.html#id2595873">Adding Machine to Domain Fails</a>, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>uppercase character, <a class="indexterm" href="groupmapping.html#id2620587">Adding Groups Fails</a></dt><dt>USB, <a class="indexterm" href="CUPS-printing.html#id2661902">Examples for Filtering Chains</a></dt><dt>use computer anywhere, <a class="indexterm" href="unicode.html#id2692198">Features and Benefits</a></dt><dt>user, <a class="indexterm" href="ChangeNotes.html#id2600728">User and Group Changes</a>, <a class="indexterm" href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="AccessControls.html#id2633292">File and Directory Access Control</a></dt><dt>user access management, <a class="indexterm" href="domain-member.html#id2591202">Features and Benefits</a></dt><dt>user account, <a class="indexterm" href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="passdb.html#id2613105">User Account Management</a>, <a class="indexterm" href="passdb.html#TOSHARG-acctflags">Account Flags Management</a>, <a class="indexterm" href="passdb.html#id2614688">smbpasswd: Encrypted Password Database</a>, <a class="indexterm" href="NetCommand.html#id2622967">UNIX and Windows User Management</a></dt><dd><dl><dt>Adding/Deleting, <a class="indexterm" href="passdb.html#id2612037">The smbpasswd Tool</a></dt></dl></dd><dt>user account database, <a class="indexterm" href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a></dt><dt>user accounts, <a class="indexterm" href="passdb.html#id2611451">Caution Regarding LDAP and Samba</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>User Accounts</dt><dd><dl><dt>Adding/Deleting, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a>, <a class="indexterm" href="passdb.html#id2616531">Accounts and Groups Management</a></dt></dl></dd><dt>user and group, <a class="indexterm" href="winbind.html#id2675862">What Winbind Provides</a></dt><dt>user and trust accounts, <a class="indexterm" href="passdb.html">Account Information Databases</a></dt><dt>user attributes, <a class="indexterm" href="passdb.html#id2614688">smbpasswd: Encrypted Password Database</a></dt><dt>user authentication, <a class="indexterm" href="winbind.html#id2676237">Microsoft Remote Procedure Calls</a></dt><dt>user database, <a class="indexterm" href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a>, <a class="indexterm" href="passdb.html#id2614612">Plaintext</a></dt><dt>user encoded, <a class="indexterm" href="NetCommand.html#id2624351">Managing Security Identifiers (SIDS)</a></dt><dt>user groups, <a class="indexterm" href="ch46.html#id2714245">Free Support</a></dt><dt>user logons, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>user management, <a class="indexterm" href="passdb.html#id2612037">The smbpasswd Tool</a>, <a class="indexterm" href="NetCommand.html#id2621069">Overview</a>, <a class="indexterm" href="NetCommand.html#id2621445">UNIX and Windows Group Management</a></dt><dt>User Management, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a>, <a class="indexterm" href="passdb.html#id2616531">Accounts and Groups Management</a></dt><dt>User Manager, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a>, <a class="indexterm" href="InterdomainTrusts.html#id2642897">Samba as the Trusting Domain</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id2679982">Remote Server Administration</a>, <a class="indexterm" href="ProfileMgmt.html#id2685594">Creating and Managing Group Profiles</a></dt><dt>User Manager for Domains, <a class="indexterm" href="AdvancedNetworkManagement.html#id2679982">Remote Server Administration</a></dt><dt>user or group, <a class="indexterm" href="rights.html#id2630793">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>user profiles, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a></dt><dt>User Rights and Privileges, <a class="indexterm" href="rights.html#id2631943">The Administrator Domain SID</a></dt><dt>user-level, <a class="indexterm" href="ServerType.html#id2581092">Samba Security Modes</a>, <a class="indexterm" href="ServerType.html#id2581256">User Level Security</a></dt><dt>User-level access control, <a class="indexterm" href="ClientConfig.html#id2599975">Domain Logon Configuration: Windows 9x/Me</a></dt><dt>user-level security, <a class="indexterm" href="passdb.html#id2610423">Advantages of Encrypted Passwords</a></dt><dt>user-mode security, <a class="indexterm" href="samba-pdc.html#id2587021">Security Mode and Master Browsers</a></dt><dt>user.DAT, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a>, <a class="indexterm" href="ProfileMgmt.html#id2685003">Sharing Profiles between Windows 9x/Me and NT4/200x/XP Workstations</a></dt><dt>user.MAN, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a></dt><dt>User.MAN, <a class="indexterm" href="ProfileMgmt.html#id2685453">Mandatory Profiles</a></dt><dt>useradd, <a class="indexterm" href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id2592605">On-the-Fly Creation of Machine Trust Accounts</a></dt><dt>username, <a class="indexterm" href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a></dt><dt>username and password, <a class="indexterm" href="ClientConfig.html#id2599448">Joining a Domain: Windows 2000/XP Professional</a></dt><dt>username map, <a class="indexterm" href="NetCommand.html#id2623295">User Mapping</a></dt><dt>userPassword, <a class="indexterm" href="passdb.html#id2615921">Initialize the LDAP Database</a></dt><dt>users, <a class="indexterm" href="PolicyMgmt.html#id2681125">Features and Benefits</a></dt><dt>UsrMgr.exe, <a class="indexterm" href="domain-member.html#id2592325">Managing Domain Machine Accounts using NT4 Server Manager</a></dt><dt>UTF-8, <a class="indexterm" href="unicode.html#id2692384">Samba and Charsets</a>, <a class="indexterm" href="unicode.html#id2692681">Basic Parameter Setting</a></dt><dt>UTF-8 encoding, <a class="indexterm" href="SWAT.html#id2704323">Enabling SWAT Internationalization Support</a></dt></dl></div><div class="indexdiv"><h3>V</h3><dl><dt>valid username/password, <a class="indexterm" href="securing-samba.html#id2640934">Using IPC$ Share-Based Denials </a></dt><dt>valid users, <a class="indexterm" href="diagnosis.html#id2705401">The Tests</a></dt><dt>validate, <a class="indexterm" href="install.html#id2574615">Test Your Config File with testparm</a>, <a class="indexterm" href="diagnosis.html#id2705069">Introduction</a></dt><dt>validate every backup, <a class="indexterm" href="NT4Migration.html#id2702022">Server Share and Directory Layout</a></dt><dt>validation, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a>, <a class="indexterm" href="PolicyMgmt.html">System and Account Policies</a></dt><dt>vendor-provided drivers, <a class="indexterm" href="CUPS-printing.html#id2656507">Raw Print Serving: Vendor Drivers on Windows Clients</a></dt><dt>verifiable, <a class="indexterm" href="NetworkBrowsing.html#id2607589">Behavior of Cross-Subnet Browsing</a></dt><dt>verify, <a class="indexterm" href="classicalprinting.html#id2645155">Rapid Configuration Validation</a></dt><dt>version control, <a class="indexterm" href="VFS.html#id2674123">shadow_copy</a></dt><dt>VFS, <a class="indexterm" href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a>, <a class="indexterm" href="VFS.html#id2672690">Discussion</a></dt><dt>VFS module, <a class="indexterm" href="VFS.html#id2674123">shadow_copy</a>, <a class="indexterm" href="ProfileMgmt.html#id2685453">Mandatory Profiles</a></dt><dt>VFS modules, <a class="indexterm" href="VFS.html#id2672690">Discussion</a>, <a class="indexterm" href="VFS.html#id2675024">VFS Modules Available Elsewhere</a></dt><dt>vgcreate, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>vgdisplay, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>vipw, <a class="indexterm" href="samba-pdc.html#id2587300">&#8220;$&#8221; Cannot Be Included in Machine Name</a>, <a class="indexterm" href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a></dt><dt>Virtual File System (see VFS)</dt><dt>virtual server, <a class="indexterm" href="SambaHA.html#id2694735">The Front-End Challenge</a>, <a class="indexterm" href="SambaHA.html#id2695329">A Simple Solution</a></dt><dt>virus scanner, <a class="indexterm" href="VFS.html#id2672690">Discussion</a></dt><dt>Visual Studio, <a class="indexterm" href="CUPS-printing.html#id2663407">PostScript Drivers with No Major Problems, Even in Kernel
-Mode</a></dt><dt>vital task, <a class="indexterm" href="SambaHA.html#id2694331">Features and Benefits</a></dt><dt>VNC/RFB, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a></dt><dt>volume group, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>volunteers, <a class="indexterm" href="problems.html#id2708029">Getting Mailing List Help</a></dt><dt>vscan, <a class="indexterm" href="VFS.html#id2675109">vscan</a></dt><dt>vuid, <a class="indexterm" href="SambaHA.html#id2694829">Demultiplexing SMB Requests</a></dt></dl></div><div class="indexdiv"><h3>W</h3><dl><dt>W32X86, <a class="indexterm" href="classicalprinting.html#id2650065">Identifying Driver Files</a>, <a class="indexterm" href="CUPS-printing.html#id2663407">PostScript Drivers with No Major Problems, Even in Kernel
-Mode</a>, <a class="indexterm" href="CUPS-printing.html#id2664341">Caveats to Be Considered</a></dt><dt>W32X86/2, <a class="indexterm" href="CUPS-printing.html#id2658122">Using Windows-Formatted Vendor PPDs</a></dt><dt>WAN, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a>, <a class="indexterm" href="locking.html#id2638596">Slow and/or Unreliable Networks</a></dt><dt>wbinfo, <a class="indexterm" href="winbind.html#id2678214">Starting and Testing the winbindd Daemon</a></dt><dt>Web-based configuration, <a class="indexterm" href="SWAT.html">SWAT: The Samba Web Administration Tool</a></dt><dt>WebClient, <a class="indexterm" href="NetworkBrowsing.html#id2608626">Browsing of Shares and Directories is Very Slow</a></dt><dt>Welcome, <a class="indexterm" href="ClientConfig.html#id2599448">Joining a Domain: Windows 2000/XP Professional</a></dt><dt>well known RID, <a class="indexterm" href="rights.html#id2631943">The Administrator Domain SID</a></dt><dt>well-controlled network, <a class="indexterm" href="NT4Migration.html#id2702022">Server Share and Directory Layout</a></dt><dt>well-known RID, <a class="indexterm" href="groupmapping.html#id2619564">Default Users, Groups, and Relative Identifiers</a></dt><dt>wide-area network bandwidth, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>win election, <a class="indexterm" href="NetworkBrowsing.html#id2604955">Making Samba the Domain Master</a></dt><dt>Win32 printing API, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>WIN40, <a class="indexterm" href="classicalprinting.html#id2650065">Identifying Driver Files</a>, <a class="indexterm" href="classicalprinting.html#id2650472">Obtaining Driver Files from Windows Client [print$] Shares</a>, <a class="indexterm" href="CUPS-printing.html#id2664341">Caveats to Be Considered</a></dt><dt>winbind, <a class="indexterm" href="domain-member.html#id2593911">Why Is This Better Than security = server?</a>, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id2627889">Examples of IDMAP Backend Usage</a>, <a class="indexterm" href="idmapper.html#id2627976">NT4-Style Domains (Includes Samba Domains)</a>, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a>, <a class="indexterm" href="winbind.html#id2675430">Features and Benefits</a>, <a class="indexterm" href="winbind.html#id2677779">Configure smb.conf</a></dt><dt>Winbind, <a class="indexterm" href="StandAloneServer.html#id2596329">Background</a>, <a class="indexterm" href="winbind.html#id2676016">Target Uses</a>, <a class="indexterm" href="winbind.html#id2676324">Microsoft Active Directory Services</a>, <a class="indexterm" href="winbind.html#id2676603">Pluggable Authentication Modules</a>, <a class="indexterm" href="winbind.html#id2676758">User and Group ID Allocation</a>, <a class="indexterm" href="winbind.html#id2676847">Result Caching</a>, <a class="indexterm" href="winbind.html#id2676910">Introduction</a>, <a class="indexterm" href="winbind.html#id2677263">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a>, <a class="indexterm" href="winbind.html#id2677666">NSS Winbind on AIX</a>, <a class="indexterm" href="winbind.html#id2678214">Starting and Testing the winbindd Daemon</a>, <a class="indexterm" href="winbind.html#id2679136">Linux/FreeBSD-Specific PAM Configuration</a>, <a class="indexterm" href="winbind.html#id2679639">Conclusion</a>, <a class="indexterm" href="pam.html">PAM-Based Distributed Authentication</a>, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt><dt>Winbind architecture, <a class="indexterm" href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a></dt><dt>Winbind hooks, <a class="indexterm" href="winbind.html#id2675862">What Winbind Provides</a></dt><dt>Winbind services, <a class="indexterm" href="winbind.html#id2678214">Starting and Testing the winbindd Daemon</a></dt><dt>Winbind-based authentication, <a class="indexterm" href="pam.html">PAM-Based Distributed Authentication</a></dt><dt>winbind.so, <a class="indexterm" href="winbind.html#id2679482">Solaris-Specific Configuration</a></dt><dt>winbindd, <a class="indexterm" href="install.html#id2574163">Starting Samba</a>, <a class="indexterm" href="install.html#id2574615">Test Your Config File with testparm</a>, <a class="indexterm" href="FastStart.html#id2577582">Example Configuration</a>, <a class="indexterm" href="samba-bdc.html#id2590243">Example Configuration</a>, <a class="indexterm" href="ChangeNotes.html#id2601219">Group Mapping Changes in Samba-3.0.23</a>, <a class="indexterm" href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="groupmapping.html#id2617939">Features and Benefits</a>, <a class="indexterm" href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="NetCommand.html#id2622967">UNIX and Windows User Management</a>, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a>, <a class="indexterm" href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a>, <a class="indexterm" href="winbind.html#id2675430">Features and Benefits</a>, <a class="indexterm" href="winbind.html#id2676186">How Winbind Works</a>, <a class="indexterm" href="winbind.html#id2677024">Requirements</a>, <a class="indexterm" href="winbind.html#id2677176">Testing Things Out</a>, <a class="indexterm" href="winbind.html#id2677263">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a>, <a class="indexterm" href="winbind.html#id2677779">Configure smb.conf</a>, <a class="indexterm" href="winbind.html#id2678214">Starting and Testing the winbindd Daemon</a>, <a class="indexterm" href="winbind.html#id2678780">Solaris</a>, <a class="indexterm" href="winbind.html#id2678970">Configure Winbind and PAM</a>, <a class="indexterm" href="cfgsmarts.html#id2696226">Multiple Server Hosting</a></dt><dt>winbindd daemon, <a class="indexterm" href="winbind.html#id2678575">Linux</a></dt><dt>Windows, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a>, <a class="indexterm" href="unicode.html#id2692681">Basic Parameter Setting</a></dt><dt>Windows 2000, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a>, <a class="indexterm" href="domain-member.html#ads-test-server">Testing Server Setup</a>, <a class="indexterm" href="NetworkBrowsing.html">Network Browsing</a>, <a class="indexterm" href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a></dt><dt>Windows 2000 Professional TCP/IP, <a class="indexterm" href="ClientConfig.html#id2598395">MS Windows 2000</a></dt><dt>Windows 2000 server, <a class="indexterm" href="InterdomainTrusts.html#id2643094">NT4-Style Domain Trusts with Windows 2000</a></dt><dt>Windows 2003, <a class="indexterm" href="domain-member.html#id2594384">Configure /etc/krb5.conf</a>, <a class="indexterm" href="domain-member.html#id2596109">I Can't Join a Windows 2003 PDC</a></dt><dt>Windows 200x/XP, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a>, <a class="indexterm" href="classicalprinting.html#id2644133">Features and Benefits</a></dt><dt>Windows 9x/Me, <a class="indexterm" href="ClientConfig.html#id2599975">Domain Logon Configuration: Windows 9x/Me</a>, <a class="indexterm" href="NetworkBrowsing.html#id2605907">WINS Server Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#id2606524">Windows Networking Protocols</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id2679982">Remote Server Administration</a></dt><dt>Windows 9x/Me/XP Home, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>Windows account management, <a class="indexterm" href="winbind.html#id2675862">What Winbind Provides</a></dt><dt>Windows client, <a class="indexterm" href="rights.html#id2632126">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>Windows client failover, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>Windows domain, <a class="indexterm" href="upgrading-to-3.0.html#id2700359">Changes in Behavior</a></dt><dt>Windows Explorer, <a class="indexterm" href="NetworkBrowsing.html#id2607167">Problem Resolution</a>, <a class="indexterm" href="classicalprinting.html#id2650065">Identifying Driver Files</a></dt><dt>Windows group, <a class="indexterm" href="groupmapping.html">Group Mapping: MS Windows and UNIX</a>, <a class="indexterm" href="groupmapping.html#id2618690">Warning: User Private Group Problems</a>, <a class="indexterm" href="NetCommand.html#id2621847">Mapping Windows Groups to UNIX Groups</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>Windows group account, <a class="indexterm" href="rights.html#id2631943">The Administrator Domain SID</a></dt><dt>Windows groups, <a class="indexterm" href="NetCommand.html#id2621847">Mapping Windows Groups to UNIX Groups</a></dt><dt>Windows Internet Name Server (see WINS)</dt><dt>Windows Logon, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a></dt><dt>Windows Me TCP/IP, <a class="indexterm" href="ClientConfig.html#id2598942">MS Windows Me</a></dt><dt>Windows Millennium, <a class="indexterm" href="ClientConfig.html#id2598942">MS Windows Me</a></dt><dt>Windows Millennium edition (Me) TCP/IP, <a class="indexterm" href="ClientConfig.html#id2598942">MS Windows Me</a></dt><dt>Windows network clients, <a class="indexterm" href="NetworkBrowsing.html#id2601603">Features and Benefits</a></dt><dt>Windows NT domain name, <a class="indexterm" href="ClientConfig.html#id2599975">Domain Logon Configuration: Windows 9x/Me</a></dt><dt>Windows NT PostScript driver, <a class="indexterm" href="CUPS-printing.html#id2670834">Printing from CUPS to Windows-Attached Printers</a></dt><dt>Windows NT Server, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></dt><dt>Windows NT/2000/XP, <a class="indexterm" href="classicalprinting.html#id2651246">Check Samba for Driver Recognition</a></dt><dt>Windows NT/200x, <a class="indexterm" href="NetworkBrowsing.html#id2605907">WINS Server Configuration</a>, <a class="indexterm" href="winbind.html#id2676910">Introduction</a></dt><dt>Windows NT/200x/XP, <a class="indexterm" href="classicalprinting.html#id2646023">The [global] Section</a></dt><dt>Windows NT/200x/XP Professional, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="ClientConfig.html#id2599448">Joining a Domain: Windows 2000/XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id2600420">Common Errors</a></dt><dt>Windows NT3.10, <a class="indexterm" href="samba-bdc.html#id2588303">Essential Background Information</a></dt><dt>Windows NT4, <a class="indexterm" href="AccessControls.html#id2635190">Windows NT4 Workstation/Server</a>, <a class="indexterm" href="classicalprinting.html#id2644133">Features and Benefits</a></dt><dt>Windows NT4 domains, <a class="indexterm" href="InterdomainTrusts.html#id2642348">Interdomain Trust Facilities</a></dt><dt>Windows NT4 Server, <a class="indexterm" href="InterdomainTrusts.html#id2642557">Configuring Samba NT-Style Domain Trusts</a></dt><dt>Windows NT4/200X, <a class="indexterm" href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a></dt><dt>Windows NT4/200x, <a class="indexterm" href="groupmapping.html#id2618354">Discussion</a></dt><dt>Windows NT4/200x/XP, <a class="indexterm" href="samba-bdc.html#id2589617">NetBIOS Over TCP/IP Enabled</a>, <a class="indexterm" href="groupmapping.html#id2619564">Default Users, Groups, and Relative Identifiers</a>, <a class="indexterm" href="AccessControls.html#id2635301">Windows 200x/XP</a></dt><dt>Windows NT4/2kX/XPPro, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>Windows PPD, <a class="indexterm" href="CUPS-printing.html#id2668514">690 &#8220;Perfect&#8221; Printers</a></dt><dt>Windows privilege model, <a class="indexterm" href="rights.html#id2630518">Rights Management Capabilities</a></dt><dt>Windows Registry, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>windows registry settings, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a></dt><dd><dl><dt>default profile locations, <a class="indexterm" href="ProfileMgmt.html#id2685846">MS Windows NT4 Workstation</a>, <a class="indexterm" href="ProfileMgmt.html#id2686408">MS Windows 200x/XP</a></dt><dt>profile path, <a class="indexterm" href="ProfileMgmt.html#id2683631">Windows 9x/Me Profile Setup</a></dt><dt>roaming profiles, <a class="indexterm" href="ProfileMgmt.html#id2683405">Disabling Roaming Profile Support</a></dt></dl></dd><dt>Windows Resource Kit, <a class="indexterm" href="ProfileMgmt.html#id2683405">Disabling Roaming Profile Support</a></dt><dt>Windows Security Identifiers (see SID)</dt><dt>Windows Terminal server, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a></dt><dt>Windows Terminal Server, <a class="indexterm" href="AdvancedNetworkManagement.html#id2680529">Remote Management with ThinLinc</a></dt><dt>Windows user, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>Windows user accounts, <a class="indexterm" href="NetCommand.html#id2622967">UNIX and Windows User Management</a></dt><dt>Windows workstation., <a class="indexterm" href="rights.html#id2632126">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>Windows XP Home, <a class="indexterm" href="passdb.html#id2610108">Important Notes About Security</a></dt><dt>Windows XP Home edition, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id2586588">The Special Case of MS Windows XP Home Edition</a>, <a class="indexterm" href="ClientConfig.html#id2599975">Domain Logon Configuration: Windows 9x/Me</a></dt><dt>Windows XP Home Edition, <a class="indexterm" href="ProfileMgmt.html#id2686408">MS Windows 200x/XP</a></dt><dt>Windows XP Professional, <a class="indexterm" href="ClientConfig.html#id2597752">MS Windows XP Professional</a>, <a class="indexterm" href="classicalprinting.html#id2644133">Features and Benefits</a></dt><dt>Windows XP Professional TCP/IP, <a class="indexterm" href="ClientConfig.html#id2598395">MS Windows 2000</a></dt><dt>Windows XP TCP/IP, <a class="indexterm" href="ClientConfig.html#id2597752">MS Windows XP Professional</a></dt><dt>Windows95/98/ME, <a class="indexterm" href="classicalprinting.html#id2651246">Check Samba for Driver Recognition</a></dt><dt>winnt.adm, <a class="indexterm" href="PolicyMgmt.html#id2681565">Windows NT4-Style Policy Files</a></dt><dt>WINS, <a class="indexterm" href="samba-pdc.html#id2583338">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id2584592">Domain Controller Types</a>, <a class="indexterm" href="samba-pdc.html#id2585096">Preparing for Domain Control</a>, <a class="indexterm" href="samba-bdc.html#id2589470">What Qualifies a Domain Controller on the Network?</a>, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="StandAloneServer.html#RefDocServer">Reference Documentation Server</a>, <a class="indexterm" href="ClientConfig.html#id2597752">MS Windows XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id2598395">MS Windows 2000</a>, <a class="indexterm" href="ClientConfig.html#id2598942">MS Windows Me</a>, <a class="indexterm" href="NetworkBrowsing.html">Network Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id2601603">Features and Benefits</a>, <a class="indexterm" href="NetworkBrowsing.html#id2601786">What Is Browsing?</a>, <a class="indexterm" href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a>, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a>, <a class="indexterm" href="NetworkBrowsing.html#id2604354">Domain Browsing Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#id2604955">Making Samba the Domain Master</a>, <a class="indexterm" href="NetworkBrowsing.html#id2605636">WINS: The Windows Internetworking Name Server</a>, <a class="indexterm" href="NetworkBrowsing.html#id2605907">WINS Server Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#id2606877">Technical Overview of Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id2606970">Browsing Support in Samba</a>, <a class="indexterm" href="NetworkBrowsing.html#id2607418">Cross-Subnet Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id2607589">Behavior of Cross-Subnet Browsing</a>, <a class="indexterm" href="integrate-ms-networks.html#id2691769">WINS Lookup</a>, <a class="indexterm" href="DNSDHCP.html#id2714801">Example Configuration</a></dt><dt>wins, <a class="indexterm" href="integrate-ms-networks.html#id2690904">/etc/nsswitch.conf</a></dt><dt>WINS Configuration, <a class="indexterm" href="NetworkBrowsing.html#id2608626">Browsing of Shares and Directories is Very Slow</a></dt><dt>WINS lookup, <a class="indexterm" href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></dt><dt>WINS replication, <a class="indexterm" href="NetworkBrowsing.html#id2606228">WINS Replication</a>, <a class="indexterm" href="NetworkBrowsing.html#id2606281">Static WINS Entries</a></dt><dt>WINS Server, <a class="indexterm" href="NetworkBrowsing.html#id2601786">What Is Browsing?</a></dt><dt>WINS server, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a>, <a class="indexterm" href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id2604955">Making Samba the Domain Master</a>, <a class="indexterm" href="NetworkBrowsing.html#id2605907">WINS Server Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#id2606970">Browsing Support in Samba</a>, <a class="indexterm" href="NetworkBrowsing.html#id2608626">Browsing of Shares and Directories is Very Slow</a></dt><dt>WINS server address, <a class="indexterm" href="NetworkBrowsing.html#id2603410">How Browsing Functions</a></dt><dt>WINS server settings, <a class="indexterm" href="ClientConfig.html#id2598942">MS Windows Me</a></dt><dt>WINS servers, <a class="indexterm" href="NetworkBrowsing.html#id2605636">WINS: The Windows Internetworking Name Server</a></dt><dt>WINS service, <a class="indexterm" href="NetworkBrowsing.html#id2605907">WINS Server Configuration</a></dt><dt>WINS Support, <a class="indexterm" href="NetworkBrowsing.html#id2601786">What Is Browsing?</a></dt><dt>wins.dat, <a class="indexterm" href="NetworkBrowsing.html#id2606281">Static WINS Entries</a></dt><dt>without Administrator account, <a class="indexterm" href="rights.html#id2631943">The Administrator Domain SID</a></dt><dt>without ADS, <a class="indexterm" href="NT4Migration.html#id2701411">Objectives</a></dt><dt>work-flow protocol, <a class="indexterm" href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></dt><dt>workgroup, <a class="indexterm" href="ServerType.html#id2582318">Server Security (User Level Security)</a>, <a class="indexterm" href="samba-pdc.html#id2585096">Preparing for Domain Control</a>, <a class="indexterm" href="samba-pdc.html#id2586627">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="ClientConfig.html#id2599975">Domain Logon Configuration: Windows 9x/Me</a>, <a class="indexterm" href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id2604955">Making Samba the Domain Master</a>, <a class="indexterm" href="integrate-ms-networks.html#id2691028">Name Resolution as Used within MS Windows Networking</a>, <a class="indexterm" href="cfgsmarts.html#id2696226">Multiple Server Hosting</a>, <a class="indexterm" href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></dt><dd><dl><dt>membership, <a class="indexterm" href="samba-pdc.html#id2585096">Preparing for Domain Control</a></dt></dl></dd><dt>workstations, <a class="indexterm" href="passdb.html#passdbtech">Technical Information</a></dt><dt>world-writable, <a class="indexterm" href="AccessControls.html#id2633292">File and Directory Access Control</a></dt><dt>write, <a class="indexterm" href="AccessControls.html#id2633292">File and Directory Access Control</a></dt><dt>write access, <a class="indexterm" href="AccessControls.html#id2633704">Protecting Directories and Files from Deletion</a></dt><dt>Write caching, <a class="indexterm" href="locking.html#id2637992">Opportunistic Locking Overview</a></dt><dt>write changes, <a class="indexterm" href="idmapper.html#id2627818">Backup Domain Controller</a></dt><dt>write permission, <a class="indexterm" href="domain-member.html#ads-create-machine-account">Create the Computer Account</a></dt><dt>writeable, <a class="indexterm" href="VFS.html#fakeperms">fake_perms</a></dt><dt>WYSIWYG, <a class="indexterm" href="CUPS-printing.html#id2657342">Windows Drivers, GDI, and EMF</a></dt></dl></div><div class="indexdiv"><h3>X</h3><dl><dt>X Window
-	System, <a class="indexterm" href="CUPS-printing.html#id2657342">Windows Drivers, GDI, and EMF</a>, <a class="indexterm" href="CUPS-printing.html#id2657520">UNIX Printfile Conversion and GUI Basics</a></dt><dt>X.509 certificates, <a class="indexterm" href="ch-ldap-tls.html#s1-intro-ldap-tls">Introduction</a></dt><dt>XFS file system, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>xfsprogs, <a class="indexterm" href="VFS.html#id2674311">Shadow Copy Setup</a></dt><dt>xinetd, <a class="indexterm" href="SWAT.html#id2703534">Validate SWAT Installation</a>, <a class="indexterm" href="compiling.html#id2710248">Starting from inetd.conf</a> (see inetd)</dt><dt>XML, <a class="indexterm" href="ChangeNotes.html#id2601160">Passdb Changes</a></dt><dt>XML-based datasets, <a class="indexterm" href="CUPS-printing.html#id2669139">Foomatic Database-Generated PPDs</a></dt><dt>xpp, <a class="indexterm" href="CUPS-printing.html#id2669139">Foomatic Database-Generated PPDs</a></dt><dt>Xprint, <a class="indexterm" href="CUPS-printing.html#id2657342">Windows Drivers, GDI, and EMF</a>, <a class="indexterm" href="CUPS-printing.html#id2657520">UNIX Printfile Conversion and GUI Basics</a></dt><dt>xxxxBSD, <a class="indexterm" href="pam.html#id2687502">Features and Benefits</a></dt></dl></div><div class="indexdiv"><h3>Y</h3><dl><dt>yppasswd, <a class="indexterm" href="passdb.html#id2612037">The smbpasswd Tool</a></dt></dl></div><div class="indexdiv"><h3>Z</h3><dl><dt>Zero Administration Kit, <a class="indexterm" href="PolicyMgmt.html#id2681565">Windows NT4-Style Policy Files</a></dt><dt>zero-based broadcast, <a class="indexterm" href="NetworkBrowsing.html#id2605195">Note about Broadcast Addresses</a></dt></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="go01.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top">Glossary </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Index</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="go01.html" title="Glossary"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Index</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="go01.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> </td></tr></table><hr></div><div class="index"><div class="titlepage"><div><div><h2 class="title"><a name="id473101"></a>Index</h2></div></div></div><div class="index"><div class="indexdiv"><h3>Symbols</h3><dl><dt>"Printers" folder, <a class="indexterm" href="CUPS-printing.html#id424821">Caveats to Be Considered</a>, <a class="indexterm" href="CUPS-printing.html#id425962">Installing the PostScript Driver on a Client</a>, <a class="indexterm" href="CUPS-printing.html#id426920">Manual Driver Installation in 15 Steps</a></dt><dt>$, <a class="indexterm" href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a></dt><dt>%i macro, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></dt><dt>%L, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></dt><dt>%PDF, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></dt><dt>%SystemRoot%\System32\config, <a class="indexterm" href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a></dt><dt>../source/nsswitch, <a class="indexterm" href="winbind.html#id438194">Configure Winbind and PAM</a></dt><dt>.ai, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></dt><dt>.AppleDouble, <a class="indexterm" href="VFS.html#id433719">netatalk</a></dt><dt>.eps, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></dt><dt>.pdf, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></dt><dt>.PDS extension, <a class="indexterm" href="ProfileMgmt.html#id443041">Windows NT4 Workstation</a></dt><dt>.profiles, <a class="indexterm" href="ProfileMgmt.html#id441955">Windows 9x/Me User Profiles</a></dt><dt>.ps, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></dt><dt>.recycle, <a class="indexterm" href="VFS.html#id433348">recycle</a></dt><dt>/bin/false, <a class="indexterm" href="ServerType.html#id349156">Example Configuration</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>/dev/null, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>/dev/shadowvol, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>/etc/cups/, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></dt><dt>/etc/cups/mime.convs, <a class="indexterm" href="CUPS-printing.html#id417596">Raw Print Serving: Vendor Drivers on Windows Clients</a>, <a class="indexterm" href="CUPS-printing.html#cups-raw">Explicitly Enable &#8220;raw&#8221; Printing for application/octet-stream</a>, <a class="indexterm" href="CUPS-printing.html#id419826">MIME Type Conversion Rules</a>, <a class="indexterm" href="CUPS-printing.html#id421744">application/octet-stream Printing</a></dt><dt>/etc/cups/mime.types, <a class="indexterm" href="CUPS-printing.html#id417596">Raw Print Serving: Vendor Drivers on Windows Clients</a>, <a class="indexterm" href="CUPS-printing.html#cups-raw">Explicitly Enable &#8220;raw&#8221; Printing for application/octet-stream</a>, <a class="indexterm" href="CUPS-printing.html#id421744">application/octet-stream Printing</a></dt><dt>/etc/fstab, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>/etc/group, <a class="indexterm" href="ServerType.html#id348806">Share-Level Security</a>, <a class="indexterm" href="groupmapping.html#id382834">Discussion</a>, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="groupmapping.html#id384638">Sample smb.conf Add Group Script</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a>, <a class="indexterm" href="winbind.html#id434945">Features and Benefits</a>, <a class="indexterm" href="Portability.html#id467664">HPUX</a></dt><dt>/etc/groups, <a class="indexterm" href="pam.html#id446697">Anatomy of /etc/pam.d Entries</a></dt><dt>/etc/host.conf, <a class="indexterm" href="integrate-ms-networks.html#id448760">Name Resolution in a Pure UNIX/Linux World</a>, <a class="indexterm" href="integrate-ms-networks.html#id449025">/etc/host.conf</a></dt><dt>/etc/hosts, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a>, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a>, <a class="indexterm" href="integrate-ms-networks.html#id448760">Name Resolution in a Pure UNIX/Linux World</a>, <a class="indexterm" href="integrate-ms-networks.html#id448831">/etc/hosts</a>, <a class="indexterm" href="integrate-ms-networks.html#id449183">Name Resolution as Used within MS Windows Networking</a>, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>/etc/hosts&gt;, <a class="indexterm" href="integrate-ms-networks.html#id448831">/etc/hosts</a></dt><dt>/etc/inetd.conf, <a class="indexterm" href="winbind.html#id438353">Linux/FreeBSD-Specific PAM Configuration</a>, <a class="indexterm" href="compiling.html#id467095">Starting from inetd.conf</a></dt><dt>/etc/init.d/samba, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="winbind.html#id437848">Linux</a></dt><dt>/etc/init.d/samba.server, <a class="indexterm" href="winbind.html#id438031">Solaris</a></dt><dt>/etc/init.d/smb, <a class="indexterm" href="winbind.html#id437848">Linux</a></dt><dt>/etc/krb5.conf, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a>, <a class="indexterm" href="domain-member.html#id361222">Possible Errors</a>, <a class="indexterm" href="idmapper.html#id391918">ADS Domains</a>, <a class="indexterm" href="idmapper.html#id392871">IDMAP Storage in LDAP Using Winbind</a></dt><dt>/etc/ldap.conf, <a class="indexterm" href="idmapper.html#id392871">IDMAP Storage in LDAP Using Winbind</a>, <a class="indexterm" href="idmapper.html#id393417">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a></dt><dt>/etc/logingroup, <a class="indexterm" href="Portability.html#id467664">HPUX</a></dt><dt>/etc/mime.conv, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dt>/etc/mime.types, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dt>/etc/nsswitch.conf, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id391641">NT4-Style Domains (Includes Samba Domains)</a>, <a class="indexterm" href="idmapper.html#id392312">IDMAP_RID with Winbind</a>, <a class="indexterm" href="idmapper.html#id393417">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a>, <a class="indexterm" href="winbind.html#id435805">Name Service Switch</a>, <a class="indexterm" href="winbind.html#id436613">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a>, <a class="indexterm" href="integrate-ms-networks.html#id448760">Name Resolution in a Pure UNIX/Linux World</a>, <a class="indexterm" href="integrate-ms-networks.html#id449073">/etc/nsswitch.conf</a></dt><dt>/etc/openldap/slapd.conf, <a class="indexterm" href="FastStart.html#id347201">The Primary Domain Controller</a></dt><dt>/etc/openldap/sldap.conf, <a class="indexterm" href="passdb.html#id381139">Accounts and Groups Management</a></dt><dt>/etc/pam.conf, <a class="indexterm" href="winbind.html#id438670">Solaris-Specific Configuration</a>, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a>, <a class="indexterm" href="pam.html#id446577">Technical Discussion</a>, <a class="indexterm" href="pam.html#id446697">Anatomy of /etc/pam.d Entries</a></dt><dt>/etc/pam.d, <a class="indexterm" href="winbind.html#id436389">Requirements</a>, <a class="indexterm" href="winbind.html#id436531">Testing Things Out</a>, <a class="indexterm" href="winbind.html#id438194">Configure Winbind and PAM</a>, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>/etc/pam.d/, <a class="indexterm" href="winbind.html#id436017">Pluggable Authentication Modules</a>, <a class="indexterm" href="pam.html#id446577">Technical Discussion</a></dt><dt>/etc/pam.d/ftp, <a class="indexterm" href="winbind.html#id438353">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>/etc/pam.d/login, <a class="indexterm" href="winbind.html#id438353">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>/etc/pam.d/samba, <a class="indexterm" href="winbind.html#id438353">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>/etc/passwd, <a class="indexterm" href="ServerType.html#id348806">Share-Level Security</a>, <a class="indexterm" href="ServerType.html#id349156">Example Configuration</a>, <a class="indexterm" href="samba-pdc.html#id353884">&#8220;$&#8221; Cannot Be Included in Machine Name</a>, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id358911">Windows 200x/XP Professional Client</a>, <a class="indexterm" href="domain-member.html#id361872">Adding Machine to Domain Fails</a>, <a class="indexterm" href="StandAloneServer.html#id362296">Background</a>, <a class="indexterm" href="StandAloneServer.html#RefDocServer">Reference Documentation Server</a>, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="passdb.html#id374464">Backward Compatibility Account Storage Systems</a>, <a class="indexterm" href="passdb.html#id379357">Plaintext</a>, <a class="indexterm" href="passdb.html#id380104">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="groupmapping.html#id383838">Applicable Only to Versions Earlier than 3.0.11</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a>, <a class="indexterm" href="winbind.html#id434945">Features and Benefits</a>, <a class="indexterm" href="winbind.html#id437506">Starting and Testing the winbindd Daemon</a>, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>/etc/printcap, <a class="indexterm" href="CUPS-printing.html#id416588">Basic CUPS Support Configuration</a></dt><dt>/etc/resolv.conf, <a class="indexterm" href="integrate-ms-networks.html#id448760">Name Resolution in a Pure UNIX/Linux World</a>, <a class="indexterm" href="diagnosis.html#id462289">Assumptions</a>, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>/etc/samba, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a>, <a class="indexterm" href="cfgsmarts.html#id455267">Multiple Virtual Server Hosting</a>, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>/etc/samba/scripts, <a class="indexterm" href="NetCommand.html#id386831">Managing Nest Groups on Workstations from the Samba Server</a></dt><dt>/etc/samba/secrets.tdb, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></dt><dt>/etc/samba/smb.conf, <a class="indexterm" href="install.html#id341784">Configuring Samba (smb.conf)</a></dt><dt>/etc/samba/smbpasswd, <a class="indexterm" href="passdb.html#id379357">Plaintext</a></dt><dt>/etc/samba/smbusers, <a class="indexterm" href="NetCommand.html#id387406">User Mapping</a></dt><dt>/etc/shadow, <a class="indexterm" href="StandAloneServer.html#id362296">Background</a>, <a class="indexterm" href="passdb.html#id374464">Backward Compatibility Account Storage Systems</a></dt><dt>/etc/smbpasswd, <a class="indexterm" href="passdb.html#id379357">Plaintext</a></dt><dt>/etc/ssl/certs/slapd.pem, <a class="indexterm" href="samba-bdc.html#id355488">LDAP Configuration Notes</a></dt><dt>/etc/xinetd.d, <a class="indexterm" href="winbind.html#id438353">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>/etc/xinetd.d/telnet, <a class="indexterm" href="winbind.html#id438353">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>/export, <a class="indexterm" href="StandAloneServer.html#RefDocServer">Reference Documentation Server</a></dt><dt>/lib/libnss_example.so, <a class="indexterm" href="winbind.html#id435805">Name Service Switch</a></dt><dt>/lib/libnss_files.so, <a class="indexterm" href="winbind.html#id435805">Name Service Switch</a></dt><dt>/lib/security, <a class="indexterm" href="winbind.html#id438194">Configure Winbind and PAM</a>, <a class="indexterm" href="pam.html#id446627">PAM Configuration Syntax</a></dt><dt>/lib/security/, <a class="indexterm" href="winbind.html#id436017">Pluggable Authentication Modules</a></dt><dt>/opt/samba/bin, <a class="indexterm" href="SWAT.html#id460910">Locating the SWAT File</a></dt><dt>/tmp, <a class="indexterm" href="AccessControls.html#id396582">File and Directory Access Control</a></dt><dt>/usr/bin/openssl, <a class="indexterm" href="SWAT.html#id461421">Securing SWAT through SSL</a></dt><dt>/usr/lib/samba/vfs, <a class="indexterm" href="VFS.html#id432421">Discussion</a></dt><dt>/usr/lib/security, <a class="indexterm" href="winbind.html#id436987">NSS Winbind on AIX</a>, <a class="indexterm" href="winbind.html#id438194">Configure Winbind and PAM</a></dt><dt>/usr/lib/security/methods.cfg, <a class="indexterm" href="winbind.html#id436987">NSS Winbind on AIX</a></dt><dt>/usr/local/lib, <a class="indexterm" href="winbind.html#id436613">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a></dt><dt>/usr/local/samba, <a class="indexterm" href="winbind.html#id437506">Starting and Testing the winbindd Daemon</a></dt><dt>/usr/local/samba/bin, <a class="indexterm" href="winbind.html#id437848">Linux</a>, <a class="indexterm" href="winbind.html#id438031">Solaris</a>, <a class="indexterm" href="SWAT.html#id460910">Locating the SWAT File</a></dt><dt>/usr/local/samba/lib, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>/usr/local/samba/lib/vfs, <a class="indexterm" href="VFS.html#id432421">Discussion</a></dt><dt>/usr/local/samba/private/secrets.tdb, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></dt><dt>/usr/local/samba/swat, <a class="indexterm" href="SWAT.html#xinetd">Enabling SWAT for Use</a></dt><dt>/usr/local/samba/var, <a class="indexterm" href="AccessControls.html#id398176">Access Controls on Shares</a>, <a class="indexterm" href="diagnosis.html#id462289">Assumptions</a></dt><dt>/usr/local/samba/var/locks, <a class="indexterm" href="NetworkBrowsing.html#id371626">Static WINS Entries</a></dt><dt>/usr/sbin, <a class="indexterm" href="SWAT.html#id460910">Locating the SWAT File</a>, <a class="indexterm" href="SWAT.html#xinetd">Enabling SWAT for Use</a></dt><dt>/usr/share/samba/swat, <a class="indexterm" href="SWAT.html#xinetd">Enabling SWAT for Use</a></dt><dt>/var/locks/*.tdb, <a class="indexterm" href="speed.html#id469561">Corrupt tdb Files</a></dt><dt>/var/log/samba, <a class="indexterm" href="diagnosis.html#id462289">Assumptions</a></dt><dt>/var/run/samba, <a class="indexterm" href="NetworkBrowsing.html#id371626">Static WINS Entries</a></dt><dt>/var/spool/cups/, <a class="indexterm" href="CUPS-printing.html#id430379">Autodeletion or Preservation of CUPS Spool Files</a></dt><dt>/var/spool/samba, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="CUPS-printing.html#id430379">Autodeletion or Preservation of CUPS Spool Files</a></dt><dt>250-user limit, <a class="indexterm" href="passdb.html#id379677">tdbsam</a></dt><dt>3.0.11, <a class="indexterm" href="rights.html#id395344">The Administrator Domain SID</a></dt><dt>4,500 user accounts, <a class="indexterm" href="passdb.html#id379677">tdbsam</a></dt><dt>4294967295, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a></dt><dt>8.3 file names, <a class="indexterm" href="AccessControls.html#id396164">MS Windows NTFS Comparison with UNIX File Systems</a></dt><dt>&gt;Domain User Manager, <a class="indexterm" href="InterdomainTrusts.html#id404624">Creating an NT4 Domain Trust</a></dt><dt>\\%L\%U\.profiles, <a class="indexterm" href="ProfileMgmt.html#id441955">Windows 9x/Me User Profiles</a></dt><dt>\\SERVER, <a class="indexterm" href="NetworkBrowsing.html#id372438">Problem Resolution</a></dt><dt>_kerberos.REALM.NAME, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a></dt><dt>_kerberos._udp, <a class="indexterm" href="domain-member.html#id361503">Notes</a></dt><dt>_ldap._tcp, <a class="indexterm" href="domain-member.html#id361503">Notes</a></dt><dt>_ldap._tcp.pdc._msdcs.quenya.org, <a class="indexterm" href="samba-bdc.html#id356060">NetBIOS Over TCP/IP Disabled</a></dt></dl></div><div class="indexdiv"><h3></h3><dl><dt>, <a class="indexterm" href="install.html#id341822">Configuration File Syntax</a>, <a class="indexterm" href="install.html#id342835">Example Configuration</a>, <a class="indexterm" href="FastStart.html#anon-ro">Anonymous Read-Only Document Server</a>, <a class="indexterm" href="FastStart.html#id344243">Anonymous Read-Write Document Server</a>, <a class="indexterm" href="FastStart.html#id344449">Anonymous Print Server</a>, <a class="indexterm" href="FastStart.html#id344787">Secure Read-Write File and Print Server</a>, <a class="indexterm" href="FastStart.html#id345540">Example Configuration</a>, <a class="indexterm" href="FastStart.html#id346350">Example: Engineering Office</a>, <a class="indexterm" href="FastStart.html#id347201">The Primary Domain Controller</a>, <a class="indexterm" href="FastStart.html#id347772">Backup Domain Controller</a>, <a class="indexterm" href="ServerType.html#id348770">Example Configuration</a>, <a class="indexterm" href="ServerType.html#id348939">Example Configuration</a>, <a class="indexterm" href="ServerType.html#id349156">Example Configuration</a>, <a class="indexterm" href="ServerType.html#id349483">Example Configuration</a>, <a class="indexterm" href="ServerType.html#id349704">Example Configuration</a>, <a class="indexterm" href="ServerType.html#id349792">Password Checking</a>, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a>, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a>, <a class="indexterm" href="samba-pdc.html#id353156">Example Configuration</a>, <a class="indexterm" href="samba-bdc.html#id355248">Example PDC Configuration</a>, <a class="indexterm" href="samba-bdc.html#id355488">LDAP Configuration Notes</a>, <a class="indexterm" href="samba-bdc.html#id356586">Example Configuration</a>, <a class="indexterm" href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id358802">On-the-Fly Creation of Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id359140">Samba Client</a>, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="domain-member.html#id360288">Configure smb.conf</a>, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a>, <a class="indexterm" href="domain-member.html#id361572">Sharing User ID Mappings between Samba Domain Members</a>, <a class="indexterm" href="StandAloneServer.html#RefDocServer">Reference Documentation Server</a>, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id369843">Domain Browsing Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#id370644">Multiple Interfaces</a>, <a class="indexterm" href="NetworkBrowsing.html#id370820">Use of the Remote Announce Parameter</a>, <a class="indexterm" href="NetworkBrowsing.html#id370948">Use of the Remote Browse Sync Parameter</a>, <a class="indexterm" href="NetworkBrowsing.html#id371282">WINS Server Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#id371983">Name Resolution Order</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="passdb.html#id380734">Configuring Samba</a>, <a class="indexterm" href="groupmapping.html#id384638">Sample smb.conf Add Group Script</a>, <a class="indexterm" href="NetCommand.html#id386831">Managing Nest Groups on Workstations from the Samba Server</a>, <a class="indexterm" href="idmapper.html#id391641">NT4-Style Domains (Includes Samba Domains)</a>, <a class="indexterm" href="idmapper.html#id391918">ADS Domains</a>, <a class="indexterm" href="idmapper.html#id392312">IDMAP_RID with Winbind</a>, <a class="indexterm" href="idmapper.html#id392871">IDMAP Storage in LDAP Using Winbind</a>, <a class="indexterm" href="idmapper.html#id393417">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a>, <a class="indexterm" href="rights.html#id394300">Using the &#8220;net rpc rights&#8221; Utility</a>, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a>, <a class="indexterm" href="AccessControls.html#id399207">Interaction with the Standard Samba &#8220;create mask&#8221; Parameters</a>, <a class="indexterm" href="AccessControls.html#id399980">Users Cannot Write to a Public Share</a>, <a class="indexterm" href="AccessControls.html#id400330">MS Word with Samba Changes Owner of File</a>, <a class="indexterm" href="locking.html#id401796">Disabling Oplocks</a>, <a class="indexterm" href="locking.html#id401886">Disabling Kernel Oplocks</a>, <a class="indexterm" href="securing-samba.html#id402802">Features and Benefits</a>, <a class="indexterm" href="securing-samba.html#id402949">Using Host-Based Protection</a>, <a class="indexterm" href="securing-samba.html#id403094">User-Based Protection</a>, <a class="indexterm" href="securing-samba.html#id403151">Using Interface Protection</a>, <a class="indexterm" href="securing-samba.html#id403481">Using IPC$ Share-Based Denials </a>, <a class="indexterm" href="securing-samba.html#id403740">Why Can Users Access Other Users' Home Directories?</a>, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a>, <a class="indexterm" href="msdfs.html#id405843">Features and Benefits</a>, <a class="indexterm" href="msdfs.html#id406261">MSDFS UNIX Path Is Case-Critical</a>, <a class="indexterm" href="classicalprinting.html#id406941">Simple Print Configuration</a>, <a class="indexterm" href="classicalprinting.html#id407391">Rapid Configuration Validation</a>, <a class="indexterm" href="classicalprinting.html#id407742">Extended Printing Configuration</a>, <a class="indexterm" href="classicalprinting.html#id410090">Custom Print Commands</a>, <a class="indexterm" href="classicalprinting.html#id410977">Creating the [print$] Share</a>, <a class="indexterm" href="classicalprinting.html#id411938">Identifying Driver Files</a>, <a class="indexterm" href="CUPS-printing.html#id416919">Simple smb.conf Settings for CUPS</a>, <a class="indexterm" href="CUPS-printing.html#id417155">More Complex CUPS smb.conf Settings</a>, <a class="indexterm" href="CUPS-printing.html#id423425">From Windows Clients to a CUPS/Samba Print Server</a>, <a class="indexterm" href="CUPS-printing.html#id424126">Prepare Your smb.conf for cupsaddsmb</a>, <a class="indexterm" href="VFS.html#id432421">Discussion</a>, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a>, <a class="indexterm" href="winbind.html#id434945">Features and Benefits</a>, <a class="indexterm" href="winbind.html#id437089">Configure smb.conf</a>, <a class="indexterm" href="winbind.html#id437848">Linux</a>, <a class="indexterm" href="winbind.html#id438670">Solaris-Specific Configuration</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a>, <a class="indexterm" href="ProfileMgmt.html#id441824">NT4/200x User Profiles</a>, <a class="indexterm" href="ProfileMgmt.html#id441955">Windows 9x/Me User Profiles</a>, <a class="indexterm" href="ProfileMgmt.html#id442104">Mixed Windows Windows 9x/Me and NT4/200x User Profiles</a>, <a class="indexterm" href="ProfileMgmt.html#id445658">Changing the Default Profile</a>, <a class="indexterm" href="integrate-ms-networks.html#id449576">The NetBIOS Name Cache</a>, <a class="indexterm" href="integrate-ms-networks.html#id449811">WINS Lookup</a>, <a class="indexterm" href="unicode.html#id450646">Basic Parameter Setting</a>, <a class="indexterm" href="unicode.html#id451226">Individual Implementations</a>, <a class="indexterm" href="largefile.html">Handling Large Directories</a>, <a class="indexterm" href="cfgsmarts.html">Advanced Configuration Techniques</a>, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a>, <a class="indexterm" href="cfgsmarts.html#id455267">Multiple Virtual Server Hosting</a>, <a class="indexterm" href="upgrading-to-3.0.html#id458672">IdMap LDAP Support</a>, <a class="indexterm" href="diagnosis.html#id462289">Assumptions</a>, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a>, <a class="indexterm" href="bugreport.html#dbglvl">Debug Levels</a>, <a class="indexterm" href="bugreport.html#id465615">Debugging-Specific Operations</a>, <a class="indexterm" href="Other-Clients.html#id468827">Windows 2000 Service Pack 2</a> (see SSO)</dt><dd><dl><dt>backend, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a></dt><dt>logon</dt><dd><dl><dt>service, <a class="indexterm" href="samba-bdc.html#id354803">Essential Background Information</a></dt></dl></dd></dl></dd></dl></div><div class="indexdiv"><h3>A</h3><dl><dt>abbreviated keystrokes, <a class="indexterm" href="ClientConfig.html#id363569">TCP/IP Configuration</a></dt><dt>aborting shutdown, <a class="indexterm" href="rights.html#id394618">Description of Privileges</a></dt><dt>accept connections, <a class="indexterm" href="securing-samba.html#id403151">Using Interface Protection</a></dt><dt>access, <a class="indexterm" href="ChangeNotes.html#id366486">User and Group Changes</a></dt><dt>Access, <a class="indexterm" href="rights.html#id394300">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>access authentication, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a></dt><dt>access control, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a>, <a class="indexterm" href="StandAloneServer.html#id362296">Background</a>, <a class="indexterm" href="AccessControls.html#id398176">Access Controls on Shares</a>, <a class="indexterm" href="AdvancedNetworkManagement.html">Advanced Network Management</a></dt><dt>Access Control, <a class="indexterm" href="ClientConfig.html#id365774">Domain Logon Configuration: Windows 9x/Me</a></dt><dt>Access Control Entries (see ACE)</dt><dt>Access Control List, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a></dt><dt>access control needs, <a class="indexterm" href="NT4Migration.html#id459433">Server Share and Directory Layout</a></dt><dt>access controls, <a class="indexterm" href="domain-member.html#id357484">Features and Benefits</a>, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a>, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a>, <a class="indexterm" href="NetCommand.html#id386085">Mapping Windows Groups to UNIX Groups</a>, <a class="indexterm" href="AccessControls.html#id395980">Features and Benefits</a>, <a class="indexterm" href="AccessControls.html#id396956">Protecting Directories and Files from Deletion</a></dt><dt>Access Controls, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>access denied, <a class="indexterm" href="securing-samba.html#id403481">Using IPC$ Share-Based Denials </a></dt><dt>access policies, <a class="indexterm" href="passdb.html#id379045">Domain Account Policy Managment</a></dt><dt>access rights, <a class="indexterm" href="domain-member.html#id357484">Features and Benefits</a>, <a class="indexterm" href="NetCommand.html#id385377">Overview</a>, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a></dt><dt>account, <a class="indexterm" href="install.html#id342835">Example Configuration</a>, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="domain-member.html#id358911">Windows 200x/XP Professional Client</a>, <a class="indexterm" href="pam.html#id446697">Anatomy of /etc/pam.d Entries</a></dt><dd><dl><dt>backend, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a></dt><dt>database, <a class="indexterm" href="ServerType.html#id348971">Domain Security Mode (User-Level Security)</a></dt><dd><dl><dt>backends, <a class="indexterm" href="ServerType.html#id348242">Features and Benefits</a></dt></dl></dd></dl></dd><dt>account access controls, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a></dt><dt>account attributes, <a class="indexterm" href="idmapper.html#id391274">Primary Domain Controller</a></dt><dt>account backends, <a class="indexterm" href="passdb.html">Account Information Databases</a></dt><dt>account containers, <a class="indexterm" href="passdb.html#id380567">Initialize the LDAP Database</a></dt><dt>account control block (see ACB)</dt><dt>account control flags, <a class="indexterm" href="passdb.html#TOSHARG-acctflags">Account Flags Management</a></dt><dt>account controls, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>Account Controls, <a class="indexterm" href="PolicyMgmt.html#id441101">Managing Account/User Policies</a></dt><dt>account database, <a class="indexterm" href="passdb.html#id379310">Password Backends</a></dt><dt>account deleted, <a class="indexterm" href="passdb.html#id378376">Deleting Accounts</a></dt><dt>account encode_bits, <a class="indexterm" href="passdb.html#TOSHARG-acctflags">Account Flags Management</a></dt><dt>account flag order, <a class="indexterm" href="passdb.html#TOSHARG-acctflags">Account Flags Management</a></dt><dt>Account Flags, <a class="indexterm" href="passdb.html#id378089">Listing User and Machine Accounts</a></dt><dt>account flags, <a class="indexterm" href="passdb.html#TOSHARG-acctflags">Account Flags Management</a></dt><dt>account import/export, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a>, <a class="indexterm" href="passdb.html#id379189">Account Import/Export</a></dt><dt>account information, <a class="indexterm" href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a>, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="passdb.html#id380104">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="NetCommand.html#id387104">UNIX and Windows User Management</a></dt><dt>account information database, <a class="indexterm" href="passdb.html#id375648">Mapping User Identifiers between MS Windows and UNIX</a></dt><dt>account management, <a class="indexterm" href="idmapper.html#id391274">Primary Domain Controller</a></dt><dt>account name, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a>, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></dt><dt>account policies, <a class="indexterm" href="samba-pdc.html#id351870">Preparing for Domain Control</a></dt><dt>account policy, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a></dt><dt>account restrictions, <a class="indexterm" href="PolicyMgmt.html#id441101">Managing Account/User Policies</a></dt><dt>account security, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a></dt><dt>account storage backends, <a class="indexterm" href="upgrading-to-3.0.html#id457959">Passdb Backends and Authentication</a></dt><dt>account storage mechanisms, <a class="indexterm" href="passdb.html">Account Information Databases</a></dt><dt>account storage system, <a class="indexterm" href="passdb.html">Account Information Databases</a></dt><dt>Account Unknown, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>accountability, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a></dt><dt>accounts, <a class="indexterm" href="winbind.html#id436282">Introduction</a></dt><dt>ACL, <a class="indexterm" href="ChangeNotes.html#id366486">User and Group Changes</a>, <a class="indexterm" href="passdb.html#id381244">Security and sambaSamAccount</a>, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="rights.html#id394618">Description of Privileges</a>, <a class="indexterm" href="securing-samba.html#id402802">Features and Benefits</a>, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a>, <a class="indexterm" href="ch-ldap-tls.html#s1-intro-ldap-tls">Introduction</a></dt><dt>ACLs, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a>, <a class="indexterm" href="classicalprinting.html#id410866">The Obsoleted [printer$] Section</a></dt><dd><dl><dt>File System, <a class="indexterm" href="AccessControls.html#id396582">File and Directory Access Control</a></dt><dt>POSIX, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a>, <a class="indexterm" href="AccessControls.html#id395980">Features and Benefits</a></dt><dt>share, <a class="indexterm" href="AccessControls.html#id395980">Features and Benefits</a></dt><dt>Windows, <a class="indexterm" href="AccessControls.html#id395980">Features and Benefits</a></dt></dl></dd><dt>ACLs on share, <a class="indexterm" href="AccessControls.html#id398424">Windows 200x/XP</a></dt><dt>ACLs on shares, <a class="indexterm" href="AccessControls.html#id395980">Features and Benefits</a></dt><dt>across network segments, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a></dt><dt>active directory, <a class="indexterm" href="ServerType.html#id348242">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a>, <a class="indexterm" href="samba-pdc.html#id351870">Preparing for Domain Control</a>, <a class="indexterm" href="samba-pdc.html#id353048">Samba ADS Domain Control</a></dt><dt>Active Directory, <a class="indexterm" href="samba-bdc.html#id355820">Active Directory Domain Control</a>, <a class="indexterm" href="domain-member.html#ads-member">Samba ADS Domain Membership</a>, <a class="indexterm" href="NetCommand.html#id385728">UNIX and Windows Group Management</a>, <a class="indexterm" href="idmapper.html#id390321">Standalone Samba Server</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id392312">IDMAP_RID with Winbind</a>, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a></dt><dt>Active Directory Server, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>AD4UNIX, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a></dt><dt>ADAM, <a class="indexterm" href="idmapper.html#id392871">IDMAP Storage in LDAP Using Winbind</a></dt><dt>add a user account, <a class="indexterm" href="passdb.html#id378299">Adding User Accounts</a></dt><dt>add client machines, <a class="indexterm" href="rights.html#id394300">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>add domain users and groups to a local group, <a class="indexterm" href="rights.html#id395514">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>add drivers, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>add machine script, <a class="indexterm" href="domain-member.html#id358802">On-the-Fly Creation of Machine Trust Accounts</a>, <a class="indexterm" href="rights.html#id394300">Using the &#8220;net rpc rights&#8221; Utility</a>, <a class="indexterm" href="upgrading-to-3.0.html#id457871">Changes in Behavior</a></dt><dt>Add Printer Wizard, <a class="indexterm" href="classicalprinting.html#id406449">Features and Benefits</a>, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a>, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>add printer wizard, <a class="indexterm" href="CUPS-printing.html#id418073">Driver Upload Methods</a></dt><dt>add user script, <a class="indexterm" href="passdb.html#id377980">User Account Management</a>, <a class="indexterm" href="upgrading-to-3.0.html#id457871">Changes in Behavior</a></dt><dt>add/delete/change share, <a class="indexterm" href="rights.html#id394618">Description of Privileges</a></dt><dt>adddriver, <a class="indexterm" href="classicalprinting.html#id412436">Installing Driver Files into [print$]</a>, <a class="indexterm" href="classicalprinting.html#id412744">Running rpcclient with adddriver</a>, <a class="indexterm" href="classicalprinting.html#id413159">Specific Driver Name Flexibility</a>, <a class="indexterm" href="CUPS-printing.html#id426337">A Check of the rpcclient man Page</a>, <a class="indexterm" href="CUPS-printing.html#id427799">Troubleshooting Revisited</a></dt><dt>additional driver, <a class="indexterm" href="classicalprinting.html#id346362">Additional Client Driver Installation</a></dt><dt>additional privileges, <a class="indexterm" href="rights.html#id394618">Description of Privileges</a></dt><dt>addmem, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>AddPrinterDriver(), <a class="indexterm" href="CUPS-printing.html#id426337">A Check of the rpcclient man Page</a></dt><dt>admincfg.exe, <a class="indexterm" href="Other-Clients.html#id468612">Configuring Windows for Workgroups Password Handling</a></dt><dt>administrative actions, <a class="indexterm" href="rights.html#id394300">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>administrative duties, <a class="indexterm" href="NetCommand.html#id385377">Overview</a></dt><dt>administrative privileges, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="winbind.html#id437279">Join the Samba Server to the PDC Domain</a></dt><dt>administrative responsibilities, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a></dt><dt>administrative rights, <a class="indexterm" href="rights.html#id394618">Description of Privileges</a>, <a class="indexterm" href="rights.html#id395514">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>administrative rights and privileges, <a class="indexterm" href="rights.html#id395514">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>Administrative Templates, <a class="indexterm" href="PolicyMgmt.html#id440699">MS Windows 200x/XP Professional Policies</a></dt><dt>Administrator, <a class="indexterm" href="groupmapping.html#id382834">Discussion</a>, <a class="indexterm" href="groupmapping.html#id383730">Important Administrative Information</a>, <a class="indexterm" href="winbind.html#id437279">Join the Samba Server to the PDC Domain</a></dt><dt>administrator account, <a class="indexterm" href="domain-member.html#id358911">Windows 200x/XP Professional Client</a>, <a class="indexterm" href="domain-member.html#id359063">Windows NT4 Client</a></dt><dt>Administrator account, <a class="indexterm" href="domain-member.html#ads-create-machine-account">Create the Computer Account</a></dt><dt>administrator password, <a class="indexterm" href="domain-member.html#id361503">Notes</a></dt><dt>Administrator%password, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></dt><dt>Adobe, <a class="indexterm" href="CUPS-printing.html#gdipost">GDI on Windows, PostScript on UNIX</a>, <a class="indexterm" href="CUPS-printing.html#id423941">PostScript Drivers with No Major Problems, Even in Kernel
+Mode</a>, <a class="indexterm" href="CUPS-printing.html#id428901">The Grand Unification Achieved</a></dt><dt>Adobe driver, <a class="indexterm" href="CUPS-printing.html#id425100">Windows CUPS PostScript Driver Versus Adobe Driver</a></dt><dt>Adobe driver files, <a class="indexterm" href="CUPS-printing.html#id424635">Recognizing Different Driver Files</a></dt><dt>Adobe PostScript, <a class="indexterm" href="CUPS-printing.html#id424821">Caveats to Be Considered</a>, <a class="indexterm" href="CUPS-printing.html#id429818">Adobe and CUPS PostScript Drivers for Windows Clients</a></dt><dt>Adobe PostScript driver, <a class="indexterm" href="CUPS-printing.html#id425962">Installing the PostScript Driver on a Client</a></dt><dt>Adobe PPD, <a class="indexterm" href="CUPS-printing.html#id428409">CUPS Print Drivers from Linuxprinting.org</a></dt><dt>Adobe specifications, <a class="indexterm" href="CUPS-printing.html#id421357">The Role of cupsomatic/foomatic</a></dt><dt>ADS, <a class="indexterm" href="ServerType.html#id349419">ADS Security Mode (User-Level Security)</a>, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a>, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a>, <a class="indexterm" href="domain-member.html#id357484">Features and Benefits</a>, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a>, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="domain-member.html#id360288">Configure smb.conf</a>, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a>, <a class="indexterm" href="domain-member.html#ads-create-machine-account">Create the Computer Account</a>, <a class="indexterm" href="domain-member.html#ads-test-server">Testing Server Setup</a>, <a class="indexterm" href="NetworkBrowsing.html">Network Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id368472">TCP/IP without NetBIOS</a>, <a class="indexterm" href="NetworkBrowsing.html#adsdnstech">DNS and Active Directory</a>, <a class="indexterm" href="NetworkBrowsing.html#id372672">Cross-Subnet Browsing</a>, <a class="indexterm" href="passdb.html">Account Information Databases</a>, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a>, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a>, <a class="indexterm" href="passdb.html#id381139">Accounts and Groups Management</a>, <a class="indexterm" href="NetCommand.html#id385653">Administrative Tasks and Methods</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id391274">Primary Domain Controller</a>, <a class="indexterm" href="idmapper.html#id392871">IDMAP Storage in LDAP Using Winbind</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a>, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a>, <a class="indexterm" href="InterdomainTrusts.html#id404270">Features and Benefits</a>, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a>, <a class="indexterm" href="InterdomainTrusts.html#id405489">NT4-Style Domain Trusts with Windows 2000</a>, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a>, <a class="indexterm" href="winbind.html#id434945">Features and Benefits</a>, <a class="indexterm" href="winbind.html#id436226">Result Caching</a>, <a class="indexterm" href="PolicyMgmt.html#id440104">Features and Benefits</a>, <a class="indexterm" href="PolicyMgmt.html#id440699">MS Windows 200x/XP Professional Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id441101">Managing Account/User Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id441492">System Startup and Logon Processing Overview</a>, <a class="indexterm" href="ProfileMgmt.html#id444984">MS Windows 200x/XP</a>, <a class="indexterm" href="pam.html">PAM-Based Distributed Authentication</a>, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a>, <a class="indexterm" href="integrate-ms-networks.html#id448641">Background Information</a>, <a class="indexterm" href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a>, <a class="indexterm" href="upgrading-to-3.0.html#id457959">Passdb Backends and Authentication</a>, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a>, <a class="indexterm" href="DNSDHCP.html#id471060">Features and Benefits</a> (see Active Directory)</dt><dt>ADS DC, <a class="indexterm" href="domain-member.html#id360288">Configure smb.conf</a></dt><dt>ADS domain, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id391918">ADS Domains</a></dt><dt>ADS domain members, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a></dt><dt>ADS manager, <a class="indexterm" href="domain-member.html#ads-create-machine-account">Create the Computer Account</a></dt><dt>ADS schema, <a class="indexterm" href="idmapper.html#id391274">Primary Domain Controller</a></dt><dt>Advanced TCP/IP configuration, <a class="indexterm" href="ClientConfig.html#id363638">MS Windows XP Professional</a></dt><dt>advantages, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>affect users, <a class="indexterm" href="PolicyMgmt.html#id440199">Creating and Managing System Policies</a></dt><dt>affordable power, <a class="indexterm" href="SambaHA.html#id452309">The Ultimate Goal</a></dt><dt>AFPL, <a class="indexterm" href="CUPS-printing.html#id418848">Ghostscript: The Software RIP for Non-PostScript Printers</a></dt><dt>AFPL Ghostscript, <a class="indexterm" href="CUPS-printing.html#id420506">pstoraster</a></dt><dt>AFS, <a class="indexterm" href="SambaHA.html#id452727">The Distributed File System Challenge</a></dt><dt>AIX, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a>, <a class="indexterm" href="winbind.html#id436987">NSS Winbind on AIX</a></dt><dt>algorithmic mapping, <a class="indexterm" href="idmapper.html#id391274">Primary Domain Controller</a></dt><dt>alias group, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>allow access, <a class="indexterm" href="securing-samba.html#id402949">Using Host-Based Protection</a></dt><dt>allow trusted domains, <a class="indexterm" href="idmapper.html#id392312">IDMAP_RID with Winbind</a></dt><dt>already exists, <a class="indexterm" href="domain-member.html#id361802">Cannot Add Machine Back to Domain</a></dt><dt>alternative solution, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>Amanda, <a class="indexterm" href="Backup.html#id452035">Amanda</a></dt><dt>analyzes data, <a class="indexterm" href="problems.html#id464214">Diagnostics Tools</a></dt><dt>anonymous, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dd><dl><dt>print server, <a class="indexterm" href="FastStart.html#id344449">Anonymous Print Server</a></dt><dt>read-write server, <a class="indexterm" href="FastStart.html#id344243">Anonymous Read-Write Document Server</a></dt></dl></dd><dt>anonymous access, <a class="indexterm" href="NetworkBrowsing.html#id372438">Problem Resolution</a></dt><dt>anonymous file server, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></dt><dt>anonymous server, <a class="indexterm" href="cfgsmarts.html">Advanced Configuration Techniques</a></dt><dt>ANSI compiler, <a class="indexterm" href="Portability.html#id467664">HPUX</a></dt><dt>anticipate failure, <a class="indexterm" href="SambaHA.html#id452170">Features and Benefits</a></dt><dt>API, <a class="indexterm" href="passdb.html#id379428">smbpasswd: Encrypted Password Database</a></dt><dt>Appliances, <a class="indexterm" href="winbind.html#id435485">Target Uses</a></dt><dt>application servers, <a class="indexterm" href="domain-member.html#id357484">Features and Benefits</a></dt><dt>application/cups.vnd-postscript, <a class="indexterm" href="CUPS-printing.html#id425100">Windows CUPS PostScript Driver Versus Adobe Driver</a></dt><dt>application/octet-stream, <a class="indexterm" href="CUPS-printing.html#cups-raw">Explicitly Enable &#8220;raw&#8221; Printing for application/octet-stream</a>, <a class="indexterm" href="CUPS-printing.html#id419826">MIME Type Conversion Rules</a>, <a class="indexterm" href="CUPS-printing.html#id421744">application/octet-stream Printing</a></dt><dt>application/pdf, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a>, <a class="indexterm" href="CUPS-printing.html#id419826">MIME Type Conversion Rules</a></dt><dt>application/postscript, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a>, <a class="indexterm" href="CUPS-printing.html#id419826">MIME Type Conversion Rules</a>, <a class="indexterm" href="CUPS-printing.html#id420169">Prefilters</a>, <a class="indexterm" href="CUPS-printing.html#id420346">pstops</a>, <a class="indexterm" href="CUPS-printing.html#id425100">Windows CUPS PostScript Driver Versus Adobe Driver</a></dt><dt>application/vnd.cups-postscript, <a class="indexterm" href="CUPS-printing.html#id420169">Prefilters</a>, <a class="indexterm" href="CUPS-printing.html#id420346">pstops</a></dt><dt>application/vnd.cups-raster, <a class="indexterm" href="CUPS-printing.html#id422005">PostScript Printer Descriptions for Non-PostScript Printers</a></dt><dt>application/vnd.cups-raw, <a class="indexterm" href="CUPS-printing.html#cups-raw">Explicitly Enable &#8220;raw&#8221; Printing for application/octet-stream</a></dt><dt>application/x-shell, <a class="indexterm" href="CUPS-printing.html#id419826">MIME Type Conversion Rules</a></dt><dt>apt-get, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>ARCFOUR-HMAC-MD5, <a class="indexterm" href="domain-member.html#ads-test-server">Testing Server Setup</a></dt><dt>architecture, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a></dt><dt>ARP/RARP, <a class="indexterm" href="integrate-ms-networks.html#id448831">/etc/hosts</a></dt><dt>ASCII, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a>, <a class="indexterm" href="unicode.html#id450250">What Are Charsets and Unicode?</a>, <a class="indexterm" href="unicode.html#id450526">Japanese Charsets</a></dt><dt>ASCII text, <a class="indexterm" href="CUPS-printing.html#id420169">Prefilters</a></dt><dt>assign rights, <a class="indexterm" href="rights.html#id394300">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>assigned RID, <a class="indexterm" href="groupmapping.html#id382834">Discussion</a></dt><dt>assistance, <a class="indexterm" href="ch46.html#id470724">Free Support</a></dt><dt>associations, <a class="indexterm" href="groupmapping.html">Group Mapping: MS Windows and UNIX</a></dt><dt>attach gdb, <a class="indexterm" href="problems.html#id464263">Debugging with Samba Itself</a></dt><dt>attribute, <a class="indexterm" href="passdb.html#id380315">OpenLDAP Configuration</a></dt><dt>attributes, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a></dt><dt>audit file access, <a class="indexterm" href="VFS.html#id432808">audit</a></dt><dt>audit module, <a class="indexterm" href="VFS.html#id433040">extd_audit</a></dt><dt>auth, <a class="indexterm" href="pam.html#id446697">Anatomy of /etc/pam.d Entries</a></dt><dt>authenticate, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></dt><dt>authenticate users, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></dt><dt>authenticated, <a class="indexterm" href="domain-member.html#id360288">Configure smb.conf</a></dt><dt>authenticating server, <a class="indexterm" href="ProfileMgmt.html#id444459">MS Windows NT4 Workstation</a></dt><dt>authentication, <a class="indexterm" href="ServerType.html#id348242">Features and Benefits</a>, <a class="indexterm" href="ServerType.html#id348971">Domain Security Mode (User-Level Security)</a>, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a>, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a>, <a class="indexterm" href="samba-pdc.html#id353296">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="domain-member.html#id360028">Why Is This Better Than security = server?</a>, <a class="indexterm" href="passdb.html#id375167">Important Notes About Security</a>, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a>, <a class="indexterm" href="passdb.html#id379189">Account Import/Export</a>, <a class="indexterm" href="NetCommand.html#id385377">Overview</a>, <a class="indexterm" href="winbind.html#id438194">Configure Winbind and PAM</a>, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dd><dl><dt>backend, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a></dt></dl></dd><dt>authentication agents, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></dt><dt>authentication architecture, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></dt><dt>authentication backend, <a class="indexterm" href="NT4Migration.html#id459247">Domain Layout</a></dt><dt>authentication control, <a class="indexterm" href="winbind.html#id436282">Introduction</a></dt><dt>authentication database, <a class="indexterm" href="InterdomainTrusts.html#id404270">Features and Benefits</a></dt><dt>authentication management, <a class="indexterm" href="winbind.html#id436017">Pluggable Authentication Modules</a></dt><dt>authentication mechanisms, <a class="indexterm" href="winbind.html#id436282">Introduction</a></dt><dt>authentication methods, <a class="indexterm" href="winbind.html#id436017">Pluggable Authentication Modules</a></dt><dt>authentication module API, <a class="indexterm" href="winbind.html#id436987">NSS Winbind on AIX</a></dt><dt>authentication regime, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a></dt><dt>authentication reply, <a class="indexterm" href="domain-member.html#id360028">Why Is This Better Than security = server?</a></dt><dt>authentication server, <a class="indexterm" href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a></dt><dt>authentication service, <a class="indexterm" href="winbind.html#id438353">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>authentication system, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a>, <a class="indexterm" href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a></dt><dt>authenticatior, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a></dt><dt>authoritative, <a class="indexterm" href="NetworkBrowsing.html#id372827">Behavior of Cross-Subnet Browsing</a></dt><dt>authoritive, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a></dt><dt>authorization, <a class="indexterm" href="winbind.html#id436017">Pluggable Authentication Modules</a></dt><dt>auto-reconnect, <a class="indexterm" href="passdb.html#id375167">Important Notes About Security</a></dt><dt>autogen.sh, <a class="indexterm" href="compiling.html#id466623">Building the Binaries</a></dt><dt>autogenerated printcap, <a class="indexterm" href="classicalprinting.html#id409575">Default UNIX System Printing Commands</a></dt><dt>automatic account creation, <a class="indexterm" href="domain-member.html#id358537">Managing Domain Machine Accounts using NT4 Server Manager</a></dt><dt>automatic mapping, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a></dt><dt>automatic reconnects, <a class="indexterm" href="passdb.html#id375454">Advantages of Encrypted Passwords</a></dt><dt>automatic redundancy, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></dt><dt>autopoweruser.sh, <a class="indexterm" href="NetCommand.html#id386831">Managing Nest Groups on Workstations from the Samba Server</a></dt><dt>autotyping, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></dt><dt>AUXILIARY, <a class="indexterm" href="passdb.html#id380104">Schema and Relationship to the RFC 2307 posixAccount</a></dt><dt>auxiliary members, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>availability, <a class="indexterm" href="SambaHA.html#id452170">Features and Benefits</a>, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>available, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dt>available port, <a class="indexterm" href="classicalprinting.html#id415466">Samba and Printer Ports</a></dt><dt>available printerd, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>available rights, <a class="indexterm" href="rights.html#id394300">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>average print run, <a class="indexterm" href="CUPS-printing.html#id418184">Advanced Intelligent Printing with PostScript Driver Download</a></dt></dl></div><div class="indexdiv"><h3>B</h3><dl><dt>b-node, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a></dt><dt>back up, <a class="indexterm" href="winbind.html#id436389">Requirements</a></dt><dt>backed up, <a class="indexterm" href="NT4Migration.html#id459433">Server Share and Directory Layout</a></dt><dt>backend, <a class="indexterm" href="SambaHA.html#id452727">The Distributed File System Challenge</a></dt><dt>backend authentication, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>backend database, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a>, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id361872">Adding Machine to Domain Fails</a></dt><dt>backend failures, <a class="indexterm" href="SambaHA.html#id453168">High-Availability Server Products</a></dt><dt>backend file system pool, <a class="indexterm" href="SambaHA.html#id452850">Restrictive Constraints on Distributed File Systems</a></dt><dt>backends, <a class="indexterm" href="ChangeNotes.html#id366887">Passdb Changes</a>, <a class="indexterm" href="CUPS-printing.html#id430701">Printing from CUPS to Windows-Attached Printers</a></dt><dt>backup, <a class="indexterm" href="Backup.html#id451585">Features and Benefits</a>, <a class="indexterm" href="NT4Migration.html#id459433">Server Share and Directory Layout</a></dt><dt>backup domain controller, <a class="indexterm" href="NT4Migration.html#id459247">Domain Layout</a></dt><dt>backup solution, <a class="indexterm" href="Backup.html#id451626">Discussion of Backup Solutions</a></dt><dt>BackupPC, <a class="indexterm" href="Backup.html#id451712">BackupPC</a></dt><dt>bad hardware, <a class="indexterm" href="NetworkBrowsing.html#id373792">Browsing of Shares and Directories is Very Slow</a></dt><dt>bad logon attempts, <a class="indexterm" href="passdb.html#id378456">Changing User Accounts</a></dt><dt>Bad networking hardware, <a class="indexterm" href="NetworkBrowsing.html#id373792">Browsing of Shares and Directories is Very Slow</a></dt><dt>bad password, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>banner pages, <a class="indexterm" href="CUPS-printing.html#id425100">Windows CUPS PostScript Driver Versus Adobe Driver</a>, <a class="indexterm" href="CUPS-printing.html#id425295">Run cupsaddsmb (Quiet Mode)</a></dt><dt>barriers, <a class="indexterm" href="securing-samba.html#id402714">Introduction</a></dt><dt>Batch Oplock, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>BDC, <a class="indexterm" href="ServerType.html#id348971">Domain Security Mode (User-Level Security)</a>, <a class="indexterm" href="ServerType.html#id349156">Example Configuration</a>, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a>, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a>, <a class="indexterm" href="samba-bdc.html#id354424">Features and Benefits</a>, <a class="indexterm" href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a>, <a class="indexterm" href="samba-bdc.html#id355488">LDAP Configuration Notes</a>, <a class="indexterm" href="samba-bdc.html#id355820">Active Directory Domain Control</a>, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a>, <a class="indexterm" href="samba-bdc.html#id356586">Example Configuration</a>, <a class="indexterm" href="samba-bdc.html#id357103">Can Samba Be a Backup Domain Controller to an NT4 PDC?</a>, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="domain-member.html#id360028">Why Is This Better Than security = server?</a>, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a>, <a class="indexterm" href="passdb.html#id375454">Advantages of Encrypted Passwords</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="passdb.html#id379677">tdbsam</a>, <a class="indexterm" href="NetCommand.html#id385377">Overview</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id391274">Primary Domain Controller</a>, <a class="indexterm" href="idmapper.html#id391492">Backup Domain Controller</a>, <a class="indexterm" href="winbind.html#id437279">Join the Samba Server to the PDC Domain</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a>, <a class="indexterm" href="NT4Migration.html#id459247">Domain Layout</a>, <a class="indexterm" href="NT4Migration.html#id459730">Steps in Migration Process</a></dt><dt>BDCs, <a class="indexterm" href="NT4Migration.html#id459247">Domain Layout</a></dt><dt>behavior approximately same, <a class="indexterm" href="upgrading-to-3.0.html#id456203">Quick Migration Guide</a></dt><dt>between domains, <a class="indexterm" href="InterdomainTrusts.html#id404991">Configuring Samba NT-Style Domain Trusts</a></dt><dt>bias, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></dt><dt>binary format TDB, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a></dt><dt>BIND, <a class="indexterm" href="DNSDHCP.html#id471296">Dynamic DNS</a></dt><dt>bind interfaces only, <a class="indexterm" href="cfgsmarts.html#id453922">Multiple Server Hosting</a></dt><dt>BIND9, <a class="indexterm" href="NetworkBrowsing.html#adsdnstech">DNS and Active Directory</a></dt><dt>BIND9.NET, <a class="indexterm" href="DNSDHCP.html#id471060">Features and Benefits</a></dt><dt>bindery-enabled, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>block device, <a class="indexterm" href="AccessControls.html#id396582">File and Directory Access Control</a></dt><dt>block incoming packets, <a class="indexterm" href="securing-samba.html#firewallports">Using a Firewall</a></dt><dt>BOBS, <a class="indexterm" href="Backup.html#id452079">BOBS: Browseable Online Backup System</a></dt><dt>bogus, <a class="indexterm" href="ServerType.html#id349704">Example Configuration</a></dt><dt>boot disk`, <a class="indexterm" href="winbind.html#id436389">Requirements</a></dt><dt>bridge, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a></dt><dt>bridges networks, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a></dt><dt>brlock.tdb, <a class="indexterm" href="CUPS-printing.html#id427930">The Printing *.tdb Files</a></dt><dd><dl><dt>(see also TDB)</dt></dl></dd><dt>broadcast, <a class="indexterm" href="samba-bdc.html#id355874">What Qualifies a Domain Controller on the Network?</a>, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a></dt><dt>broadcast address, <a class="indexterm" href="NetworkBrowsing.html#id372438">Problem Resolution</a>, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>broadcast isolated subnet, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></dt><dt>broadcast messages, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a></dt><dt>broadcast messaging, <a class="indexterm" href="samba-bdc.html#id355957">How Does a Workstation find its Domain Controller?</a></dt><dt>Broadcast node, <a class="indexterm" href="NetworkBrowsing.html#id371626">Static WINS Entries</a></dt><dt>broadcast request, <a class="indexterm" href="samba-pdc.html#id353296">The Special Case of Windows 9x/Me</a></dt><dt>broadcast traffic, <a class="indexterm" href="NetworkBrowsing.html#id372672">Cross-Subnet Browsing</a></dt><dt>broadcast-based, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a></dt><dt>broadcast-based name resolution, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></dt><dt>broadcasts, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a>, <a class="indexterm" href="NetworkBrowsing.html#id372827">Behavior of Cross-Subnet Browsing</a></dt><dt>browse across subnet, <a class="indexterm" href="NetworkBrowsing.html#id372672">Cross-Subnet Browsing</a></dt><dt>browse list, <a class="indexterm" href="samba-pdc.html#id351870">Preparing for Domain Control</a>, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a>, <a class="indexterm" href="NetworkBrowsing.html#id371035">WINS: The Windows Internetworking Name Server</a>, <a class="indexterm" href="NetworkBrowsing.html#id372827">Behavior of Cross-Subnet Browsing</a></dt><dt>browse list handling, <a class="indexterm" href="NetworkBrowsing.html">Network Browsing</a></dt><dt>browse list maintainers, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a></dt><dt>browse list management, <a class="indexterm" href="samba-pdc.html#id353648">Security Mode and Master Browsers</a>, <a class="indexterm" href="NetworkBrowsing.html#id367475">What Is Browsing?</a></dt><dt>browse lists, <a class="indexterm" href="NetworkBrowsing.html#id370405">Making Samba the Domain Master</a>, <a class="indexterm" href="NetworkBrowsing.html#id372672">Cross-Subnet Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id372827">Behavior of Cross-Subnet Browsing</a></dt><dt>browse resources, <a class="indexterm" href="NetworkBrowsing.html#id372438">Problem Resolution</a></dt><dt>browse server resources, <a class="indexterm" href="NetworkBrowsing.html#id372438">Problem Resolution</a></dt><dt>browse shares, <a class="indexterm" href="securing-samba.html#id403481">Using IPC$ Share-Based Denials </a></dt><dt>browse.dat, <a class="indexterm" href="NetworkBrowsing.html#id372438">Problem Resolution</a></dt><dt>browseable, <a class="indexterm" href="install.html#id341822">Configuration File Syntax</a></dt><dt>browser election, <a class="indexterm" href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a></dt><dt>browser elections, <a class="indexterm" href="NetworkBrowsing.html#id369843">Domain Browsing Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></dt><dt>BrowseShortNames, <a class="indexterm" href="CUPS-printing.html#id432090">Print Queue Called &#8220;lp&#8221; Mishandles Print Jobs</a></dt><dt>browsing, <a class="indexterm" href="samba-pdc.html#id353296">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="NetworkBrowsing.html#id367475">What Is Browsing?</a>, <a class="indexterm" href="NetworkBrowsing.html#id370405">Making Samba the Domain Master</a>, <a class="indexterm" href="NetworkBrowsing.html#id372256">Browsing Support in Samba</a></dt><dt>browsing across subnets, <a class="indexterm" href="NetworkBrowsing.html">Network Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id372672">Cross-Subnet Browsing</a></dt><dt>browsing another subnet, <a class="indexterm" href="NetworkBrowsing.html#id372256">Browsing Support in Samba</a></dt><dt>browsing intrinsics, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a></dt><dt>browsing problems, <a class="indexterm" href="NetworkBrowsing.html#id371853">Windows Networking Protocols</a>, <a class="indexterm" href="NetworkBrowsing.html#id373613">Common Errors</a>, <a class="indexterm" href="NetworkBrowsing.html#id373747">I Get an "Unable to browse the network" Error</a></dt><dt>BSD, <a class="indexterm" href="samba-pdc.html#id353884">&#8220;$&#8221; Cannot Be Included in Machine Name</a>, <a class="indexterm" href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="classicalprinting.html#id406449">Features and Benefits</a></dt><dt>BSD Printing, <a class="indexterm" href="classicalprinting.html#id406941">Simple Print Configuration</a></dt><dt>BSD-style printing, <a class="indexterm" href="classicalprinting.html#id407742">Extended Printing Configuration</a></dt><dt>bug report, <a class="indexterm" href="ch46.html#id470724">Free Support</a></dt><dt>bug reports, <a class="indexterm" href="bugreport.html#id465317">Introduction</a></dt><dt>Bugzilla, <a class="indexterm" href="bugreport.html#id465317">Introduction</a></dt><dt>built-in commands, <a class="indexterm" href="classicalprinting.html#id410090">Custom Print Commands</a></dt><dt>bypasses privilege, <a class="indexterm" href="rights.html#id394300">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>byte ranges, <a class="indexterm" href="locking.html#id400630">Discussion</a></dt><dt>byte-range lock, <a class="indexterm" href="locking.html#id400630">Discussion</a></dt><dt>byte-range locking, <a class="indexterm" href="locking.html#id400630">Discussion</a>, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt></dl></div><div class="indexdiv"><h3>C</h3><dl><dt>c:\winnt\inf, <a class="indexterm" href="PolicyMgmt.html#id440493">Windows NT4-Style Policy Files</a></dt><dt>C:\WinNT\System32\config, <a class="indexterm" href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a></dt><dt>cached</dt><dd><dl><dt>password, <a class="indexterm" href="ServerType.html#id349792">Password Checking</a></dt></dl></dd><dt>cached encrypted password, <a class="indexterm" href="passdb.html#id375167">Important Notes About Security</a></dt><dt>cached in memory, <a class="indexterm" href="passdb.html#id375587">Advantages of Non-Encrypted Passwords</a></dt><dt>cached local file, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>cached locally, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a></dt><dt>cached references, <a class="indexterm" href="NetworkBrowsing.html#id373973">Invalid Cached Share References Affects Network Browsing</a></dt><dt>caching, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>caching reads, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>caching scheme, <a class="indexterm" href="winbind.html#id436226">Result Caching</a></dt><dt>caching writes, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>called name, <a class="indexterm" href="securing-samba.html#id402949">Using Host-Based Protection</a></dt><dt>cannot join domain, <a class="indexterm" href="ClientConfig.html#id366202">Common Errors</a></dt><dt>canonicalize files, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>CAP, <a class="indexterm" href="unicode.html#id450526">Japanese Charsets</a>, <a class="indexterm" href="unicode.html#id450646">Basic Parameter Setting</a>, <a class="indexterm" href="Other-Clients.html#id468182">Macintosh Clients</a></dt><dt>cap-share, <a class="indexterm" href="unicode.html#id450646">Basic Parameter Setting</a></dt><dt>capability to delete, <a class="indexterm" href="AccessControls.html#id396956">Protecting Directories and Files from Deletion</a></dt><dt>CAP_LINUX_IMMUTABLE, <a class="indexterm" href="AccessControls.html#id396956">Protecting Directories and Files from Deletion</a></dt><dt>case options, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>case sensitivity, <a class="indexterm" href="pam.html#id446627">PAM Configuration Syntax</a></dt><dt>case-insensitive, <a class="indexterm" href="ServerType.html#id348658">User Level Security</a>, <a class="indexterm" href="classicalprinting.html#id406941">Simple Print Configuration</a>, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>case-preserving, <a class="indexterm" href="ServerType.html#id348658">User Level Security</a></dt><dt>central environment, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a></dt><dt>centralized</dt><dd><dl><dt>authentication, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></dt></dl></dd><dt>centralized identity management, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></dt><dt>centrally managed, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>certificate, <a class="indexterm" href="SWAT.html#id461421">Securing SWAT through SSL</a></dt><dt>Certificate Authority (see CA)</dt><dt>cfdisk, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>challenge/response mechanis, <a class="indexterm" href="passdb.html#id375167">Important Notes About Security</a></dt><dt>change capabilities, <a class="indexterm" href="passdb.html#id376958">The smbpasswd Tool</a></dt><dt>change motivations, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>change password, <a class="indexterm" href="domain-member.html#id361503">Notes</a></dt><dt>change passwords, <a class="indexterm" href="passdb.html#id376958">The smbpasswd Tool</a></dt><dt>changed parameters, <a class="indexterm" href="upgrading-to-3.0.html#oldupdatenotes">Upgrading from Samba-2.x to Samba-3.0.25</a></dt><dt>changes password, <a class="indexterm" href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a></dt><dt>character device, <a class="indexterm" href="AccessControls.html#id396582">File and Directory Access Control</a></dt><dt>character set, <a class="indexterm" href="unicode.html#id450250">What Are Charsets and Unicode?</a></dt><dt>character sets, <a class="indexterm" href="unicode.html#id450371">Samba and Charsets</a>, <a class="indexterm" href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a></dt><dt>charset, <a class="indexterm" href="unicode.html#id450250">What Are Charsets and Unicode?</a></dt><dt>charset conversion, <a class="indexterm" href="unicode.html#id450497">Conversion from Old Names</a></dt><dt>chattr, <a class="indexterm" href="AccessControls.html#id396956">Protecting Directories and Files from Deletion</a></dt><dt>check for locks, <a class="indexterm" href="locking.html#id400630">Discussion</a></dt><dt>check logs, <a class="indexterm" href="domain-member.html#id361872">Adding Machine to Domain Fails</a></dt><dt>checksum-search, <a class="indexterm" href="Backup.html#id451875">Rsync</a></dt><dt>chmod, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>chown, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="AccessControls.html#id398747">Viewing File Ownership</a>, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>chpass, <a class="indexterm" href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a></dt><dt>CIFS, <a class="indexterm" href="domain-member.html#id361572">Sharing User ID Mappings between Samba Domain Members</a></dt><dt>CIFS function calls, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>CIFS/SMB, <a class="indexterm" href="SambaHA.html#id452170">Features and Benefits</a>, <a class="indexterm" href="SambaHA.html#id452431">Why Is This So Hard?</a></dt><dt>Citrix, <a class="indexterm" href="AdvancedNetworkManagement.html#id439596">Remote Management with ThinLinc</a></dt><dt>clear purpose preferred, <a class="indexterm" href="Backup.html#id451626">Discussion of Backup Solutions</a></dt><dt>clear-text, <a class="indexterm" href="ServerType.html#id349792">Password Checking</a>, <a class="indexterm" href="passdb.html#id375167">Important Notes About Security</a>, <a class="indexterm" href="passdb.html#id381244">Security and sambaSamAccount</a></dt><dt>clear-text passwords, <a class="indexterm" href="passdb.html#id375167">Important Notes About Security</a></dt><dt>client client instructions, <a class="indexterm" href="ClientConfig.html#id363475">Features and Benefits</a></dt><dt>Client for Microsoft Networks, <a class="indexterm" href="ClientConfig.html#id365774">Domain Logon Configuration: Windows 9x/Me</a></dt><dt>Client for Novell Networks, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a></dt><dt>client-server mode, <a class="indexterm" href="passdb.html#id376958">The smbpasswd Tool</a></dt><dt>client-side caching, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>client-side data caching, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a>, <a class="indexterm" href="locking.html#id401473">PDM Data Shares</a></dt><dt>clock skew, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a></dt><dt>cluster servers, <a class="indexterm" href="SambaHA.html#id452542">The Front-End Challenge</a></dt><dt>clustered file server, <a class="indexterm" href="SambaHA.html#id452309">The Ultimate Goal</a></dt><dt>Clustered smbds, <a class="indexterm" href="SambaHA.html#id452913">Server Pool Communications</a></dt><dt>clustering technologies, <a class="indexterm" href="SambaHA.html#id452309">The Ultimate Goal</a></dt><dt>cluttering, <a class="indexterm" href="bugreport.html#id465615">Debugging-Specific Operations</a></dt><dt>cmd, <a class="indexterm" href="NetworkBrowsing.html#id373792">Browsing of Shares and Directories is Very Slow</a>, <a class="indexterm" href="rights.html#id395514">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>cmd shell, <a class="indexterm" href="rights.html#id395514">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>CN, <a class="indexterm" href="samba-bdc.html#id355488">LDAP Configuration Notes</a>, <a class="indexterm" href="ch-ldap-tls.html#s1-intro-ldap-tls">Introduction</a></dt><dt>code maintainer, <a class="indexterm" href="ch46.html#id470724">Free Support</a></dt><dt>codepages, <a class="indexterm" href="unicode.html#id450204">Features and Benefits</a></dt><dt>collating, <a class="indexterm" href="NetworkBrowsing.html#id370405">Making Samba the Domain Master</a></dt><dt>collisions, <a class="indexterm" href="speed.html#id469477">Samba Performance Problem Due to Changing Linux Kernel</a></dt><dt>color, <a class="indexterm" href="CUPS-printing.html#id418524">UNIX Printfile Conversion and GUI Basics</a></dt><dt>COM1:, <a class="indexterm" href="classicalprinting.html#id415466">Samba and Printer Ports</a></dt><dt>command-line, <a class="indexterm" href="NetCommand.html">Remote and Local Management: The Net Command</a></dt><dt>command-line utility, <a class="indexterm" href="rights.html#id394300">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>commenting out setting, <a class="indexterm" href="classicalprinting.html#id407391">Rapid Configuration Validation</a></dt><dt>commercial Linux products, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a></dt><dt>commercial support, <a class="indexterm" href="ch46.html">Samba Support</a>, <a class="indexterm" href="ch46.html#id470922">Commercial Support</a></dt><dt>commit the settings, <a class="indexterm" href="ClientConfig.html#id364254">MS Windows 2000</a></dt><dt>Common Internet Filesystem (see CIFS)</dt><dt>Common restrictions, <a class="indexterm" href="PolicyMgmt.html#id441101">Managing Account/User Policies</a></dt><dt>Common UNIX Printing System (see CUPS)</dt><dt>common.adm, <a class="indexterm" href="PolicyMgmt.html#id440493">Windows NT4-Style Policy Files</a></dt><dt>comp.protocols.smb, <a class="indexterm" href="bugreport.html#id465317">Introduction</a></dt><dt>compatible, <a class="indexterm" href="passdb.html#id375167">Important Notes About Security</a>, <a class="indexterm" href="Portability.html">Portability</a></dt><dt>compile, <a class="indexterm" href="install.html#id341745">Obtaining and Installing Samba</a></dt><dt>compile-time options, <a class="indexterm" href="classicalprinting.html#id407391">Rapid Configuration Validation</a></dt><dt>complex file name space, <a class="indexterm" href="SambaHA.html#id453095">A Simple Solution</a></dt><dt>complex organization, <a class="indexterm" href="NT4Migration.html#id459247">Domain Layout</a></dt><dt>complexity, <a class="indexterm" href="StandAloneServer.html#id362473">Example Configuration</a></dt><dt>compliance, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a></dt><dt>complicated, <a class="indexterm" href="NetworkBrowsing.html#id372827">Behavior of Cross-Subnet Browsing</a></dt><dt>complicated problem, <a class="indexterm" href="SambaHA.html#id452629">Demultiplexing SMB Requests</a></dt><dt>comprehensive documentation, <a class="indexterm" href="cfgsmarts.html#id453922">Multiple Server Hosting</a></dt><dt>Computer Account, <a class="indexterm" href="domain-member.html#id359063">Windows NT4 Client</a></dt><dt>computer account, <a class="indexterm" href="domain-member.html#ads-test-server">Testing Server Setup</a></dt><dt>computer accounts, <a class="indexterm" href="passdb.html">Account Information Databases</a>, <a class="indexterm" href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>Computer Management, <a class="indexterm" href="AccessControls.html#id398176">Access Controls on Shares</a>, <a class="indexterm" href="AccessControls.html#id398424">Windows 200x/XP</a></dt><dt>Computer Name, <a class="indexterm" href="ClientConfig.html#id365265">Joining a Domain: Windows 2000/XP Professional</a></dt><dt>computer name, <a class="indexterm" href="ClientConfig.html#id365774">Domain Logon Configuration: Windows 9x/Me</a>, <a class="indexterm" href="integrate-ms-networks.html#id449183">Name Resolution as Used within MS Windows Networking</a></dt><dt>concurrent access, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>Conectiva, <a class="indexterm" href="CUPS-printing.html#id429104">Forums, Downloads, Tutorials, Howtos (Also for Mac OS X and Commercial UNIX)</a></dt><dt>config.cache, <a class="indexterm" href="domain-member.html#id361222">Possible Errors</a></dt><dt>CONFIG.POL, <a class="indexterm" href="samba-pdc.html#id353296">The Special Case of Windows 9x/Me</a></dt><dt>Config.POL, <a class="indexterm" href="PolicyMgmt.html#id440199">Creating and Managing System Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id440369">Windows 9x/ME Policies</a></dt><dt>configuration</dt><dd><dl><dt>documentation, <a class="indexterm" href="install.html#id343059">Test Your Config File with testparm</a></dt></dl></dd><dt>configuration files, <a class="indexterm" href="SWAT.html#id460718">Features and Benefits</a></dt><dt>configuration problem, <a class="indexterm" href="bugreport.html#id465317">Introduction</a></dt><dt>configuration syntax, <a class="indexterm" href="classicalprinting.html#id406941">Simple Print Configuration</a></dt><dt>configuration techniques, <a class="indexterm" href="cfgsmarts.html">Advanced Configuration Techniques</a></dt><dt>configuration too complex, <a class="indexterm" href="StandAloneServer.html#id363410">Common Errors</a></dt><dt>configuration tool, <a class="indexterm" href="SWAT.html">SWAT: The Samba Web Administration Tool</a></dt><dt>configuration wizard, <a class="indexterm" href="ClientConfig.html#id365265">Joining a Domain: Windows 2000/XP Professional</a></dt><dt>configure, <a class="indexterm" href="compiling.html#id466623">Building the Binaries</a></dt><dt>configuring a firewall, <a class="indexterm" href="securing-samba.html#firewallports">Using a Firewall</a></dt><dt>confirm address, <a class="indexterm" href="securing-samba.html#id403151">Using Interface Protection</a></dt><dt>confirm the password, <a class="indexterm" href="InterdomainTrusts.html#id405306">Samba as the Trusting Domain</a></dt><dt>confirm the trust, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></dt><dt>connect transparently, <a class="indexterm" href="SambaHA.html#id452309">The Ultimate Goal</a></dt><dt>connection resources, <a class="indexterm" href="domain-member.html#id360028">Why Is This Better Than security = server?</a></dt><dt>connections, <a class="indexterm" href="install.html#id342835">Example Configuration</a></dt><dt>connections.tdb, <a class="indexterm" href="CUPS-printing.html#id427930">The Printing *.tdb Files</a></dt><dd><dl><dt>(see also TDB)</dt></dl></dd><dt>consistent case, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>console, <a class="indexterm" href="winbind.html#id438353">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>consumer expects, <a class="indexterm" href="ch46.html">Samba Support</a></dt><dt>container, <a class="indexterm" href="domain-member.html#ads-create-machine-account">Create the Computer Account</a></dt><dt>continuity of service, <a class="indexterm" href="SambaHA.html#id453168">High-Availability Server Products</a></dt><dt>contribute, <a class="indexterm" href="cfgsmarts.html#id453922">Multiple Server Hosting</a></dt><dt>Control Panel, <a class="indexterm" href="ClientConfig.html#id365265">Joining a Domain: Windows 2000/XP Professional</a></dt><dt>convert</dt><dd><dl><dt>domain member server, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a></dt></dl></dd><dt>converted, <a class="indexterm" href="passdb.html#passdbtech">Technical Information</a></dt><dt>copy'n'paste, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a></dt><dt>core files, <a class="indexterm" href="bugreport.html#id465810">Internal Errors</a></dt><dt>core graphic engine, <a class="indexterm" href="CUPS-printing.html#id418358">Windows Drivers, GDI, and EMF</a></dt><dt>core values, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>corrupted file, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a></dt><dt>cosine.schema, <a class="indexterm" href="passdb.html#id380315">OpenLDAP Configuration</a></dt><dt>country of origin, <a class="indexterm" href="ch46.html#id470922">Commercial Support</a></dt><dt>CP850, <a class="indexterm" href="unicode.html#id450371">Samba and Charsets</a></dt><dt>CP932, <a class="indexterm" href="unicode.html#id450646">Basic Parameter Setting</a></dt><dt>cracker, <a class="indexterm" href="securing-samba.html#id403151">Using Interface Protection</a></dt><dt>create, <a class="indexterm" href="AccessControls.html#id396461">Managing Directories</a></dt><dt>Create a Computer Account, <a class="indexterm" href="domain-member.html#id359063">Windows NT4 Client</a></dt><dt>create a domain machine account, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a></dt><dt>create domain member, <a class="indexterm" href="domain-member.html#id358911">Windows 200x/XP Professional Client</a></dt><dt>create machine trust account, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></dt><dt>create partition, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>Create the Computer Account, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a></dt><dt>create user accounts, <a class="indexterm" href="StandAloneServer.html#id362296">Background</a></dt><dt>create volume, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>credentials, <a class="indexterm" href="ServerType.html#id348658">User Level Security</a>, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a>, <a class="indexterm" href="samba-bdc.html#id355488">LDAP Configuration Notes</a>, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a>, <a class="indexterm" href="ClientConfig.html#id365265">Joining a Domain: Windows 2000/XP Professional</a>, <a class="indexterm" href="NetCommand.html#id387484">Administering User Rights and Privileges</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>credentials validation, <a class="indexterm" href="samba-bdc.html#id356009">NetBIOS Over TCP/IP Enabled</a></dt><dt>critical aspects of configuration, <a class="indexterm" href="ClientConfig.html#id363475">Features and Benefits</a></dt><dt>crle, <a class="indexterm" href="winbind.html#id436613">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a></dt><dt>cron, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a></dt><dt>cross post, <a class="indexterm" href="problems.html#id465036">Getting Mailing List Help</a></dt><dt>cross-segment browsing, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a></dt><dt>cross-subnet browsing, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a>, <a class="indexterm" href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id371282">WINS Server Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#id372827">Behavior of Cross-Subnet Browsing</a></dt><dt>CUPS, <a class="indexterm" href="classicalprinting.html#id406449">Features and Benefits</a>, <a class="indexterm" href="classicalprinting.html#id406652">Technical Introduction</a>, <a class="indexterm" href="classicalprinting.html#id407742">Extended Printing Configuration</a>, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a>, <a class="indexterm" href="CUPS-printing.html#id416425">Features and Benefits</a>, <a class="indexterm" href="CUPS-printing.html#id416476">Overview</a>, <a class="indexterm" href="CUPS-printing.html#id416588">Basic CUPS Support Configuration</a>, <a class="indexterm" href="CUPS-printing.html#id419056">Using Windows-Formatted Vendor PPDs</a></dt><dd><dl><dt>Page Accounting, <a class="indexterm" href="CUPS-printing.html#id429705">Page Accounting with CUPS</a></dt><dt>quotas, <a class="indexterm" href="CUPS-printing.html#id429735">Setting Up Quotas</a></dt></dl></dd><dt>CUPS API, <a class="indexterm" href="install.html#id341822">Configuration File Syntax</a>, <a class="indexterm" href="classicalprinting.html#id409575">Default UNIX System Printing Commands</a></dt><dt>CUPS backends, <a class="indexterm" href="CUPS-printing.html#id421049">CUPS Backends</a></dt><dt>CUPS filtering, <a class="indexterm" href="CUPS-printing.html#id419165">CUPS Also Uses PPDs for Non-PostScript Printers</a>, <a class="indexterm" href="CUPS-printing.html#id419200">The CUPS Filtering Architecture</a></dt><dt>CUPS filtering chain, <a class="indexterm" href="CUPS-printing.html#id421049">CUPS Backends</a></dt><dt>CUPS libarary API, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dt>CUPS PostScript, <a class="indexterm" href="CUPS-printing.html#id424821">Caveats to Be Considered</a></dt><dt>CUPS PostScript driver, <a class="indexterm" href="CUPS-printing.html#id425100">Windows CUPS PostScript Driver Versus Adobe Driver</a></dt><dt>CUPS print filters, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dt>CUPS raster, <a class="indexterm" href="CUPS-printing.html#id419200">The CUPS Filtering Architecture</a>, <a class="indexterm" href="CUPS-printing.html#id420506">pstoraster</a></dt><dt>CUPS-PPD, <a class="indexterm" href="CUPS-printing.html#id428763">cupsomatic, pdqomatic, lpdomatic, directomatic</a></dt><dt>cups.hlp, <a class="indexterm" href="CUPS-printing.html#id424821">Caveats to Be Considered</a></dt><dt>cupsaddsmb, <a class="indexterm" href="CUPS-printing.html#id418073">Driver Upload Methods</a>, <a class="indexterm" href="CUPS-printing.html#id424038">cupsaddsmb: The Unknown Utility</a>, <a class="indexterm" href="CUPS-printing.html#id424821">Caveats to Be Considered</a>, <a class="indexterm" href="CUPS-printing.html#id425295">Run cupsaddsmb (Quiet Mode)</a>, <a class="indexterm" href="CUPS-printing.html#id425429">Run cupsaddsmb with Verbose Output</a>, <a class="indexterm" href="CUPS-printing.html#id425560">Understanding cupsaddsmb</a>, <a class="indexterm" href="CUPS-printing.html#id425806">cupsaddsmb with a Samba PDC</a>, <a class="indexterm" href="CUPS-printing.html#id425884">cupsaddsmb Flowchart</a>, <a class="indexterm" href="CUPS-printing.html#id425962">Installing the PostScript Driver on a Client</a>, <a class="indexterm" href="CUPS-printing.html#id426709">Requirements for adddriver and setdriver to Succeed</a></dt><dt>cupsd.conf, <a class="indexterm" href="classicalprinting.html#id409575">Default UNIX System Printing Commands</a>, <a class="indexterm" href="CUPS-printing.html#id416588">Basic CUPS Support Configuration</a>, <a class="indexterm" href="CUPS-printing.html#id421583">mime.convs</a>, <a class="indexterm" href="CUPS-printing.html#id430379">Autodeletion or Preservation of CUPS Spool Files</a></dt><dt>cupsomatic, <a class="indexterm" href="CUPS-printing.html#id419056">Using Windows-Formatted Vendor PPDs</a>, <a class="indexterm" href="CUPS-printing.html#id419200">The CUPS Filtering Architecture</a>, <a class="indexterm" href="CUPS-printing.html#id421357">The Role of cupsomatic/foomatic</a>, <a class="indexterm" href="CUPS-printing.html#id422269">cupsomatic/foomatic-rip Versus Native CUPS Printing</a>, <a class="indexterm" href="CUPS-printing.html#id428409">CUPS Print Drivers from Linuxprinting.org</a>, <a class="indexterm" href="CUPS-printing.html#id428763">cupsomatic, pdqomatic, lpdomatic, directomatic</a></dt><dt>custom scripts, <a class="indexterm" href="passdb.html#id379428">smbpasswd: Encrypted Password Database</a></dt><dt>customer expected, <a class="indexterm" href="ch46.html">Samba Support</a></dt><dt>customers, <a class="indexterm" href="ch46.html">Samba Support</a></dt><dt>customized print commands, <a class="indexterm" href="classicalprinting.html#id410090">Custom Print Commands</a></dt></dl></div><div class="indexdiv"><h3>D</h3><dl><dt>daemon, <a class="indexterm" href="install.html#id342668">Starting Samba</a>, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a>, <a class="indexterm" href="winbind.html#id436389">Requirements</a>, <a class="indexterm" href="compiling.html#id467302">Alternative: Starting smbd as a Daemon</a></dt><dt>daemon running, <a class="indexterm" href="winbind.html#id437506">Starting and Testing the winbindd Daemon</a></dt><dt>daemons, <a class="indexterm" href="winbind.html#id438150">Restarting</a></dt><dt>damaged data, <a class="indexterm" href="passdb.html#TOSHARG-acctflags">Account Flags Management</a></dt><dt>data caching, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>data corruption, <a class="indexterm" href="NetworkBrowsing.html#id373792">Browsing of Shares and Directories is Very Slow</a>, <a class="indexterm" href="locking.html#id401364">UNIX or NFS Client-Accessed Files</a></dt><dt>data interchange, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a></dt><dt>data stream, <a class="indexterm" href="classicalprinting.html#id406652">Technical Introduction</a></dt><dt>database, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="upgrading-to-3.0.html#id456203">Quick Migration Guide</a></dt><dt>DatabaseFS, <a class="indexterm" href="VFS.html#id434622">DatabaseFS</a></dt><dt>DAVE, <a class="indexterm" href="Other-Clients.html#id468182">Macintosh Clients</a></dt><dt>dbx, <a class="indexterm" href="bugreport.html#id465810">Internal Errors</a></dt><dt>DCE RPC, <a class="indexterm" href="winbind.html#id437279">Join the Samba Server to the PDC Domain</a></dt><dt>DDK, <a class="indexterm" href="CUPS-printing.html#id423941">PostScript Drivers with No Major Problems, Even in Kernel
+Mode</a>, <a class="indexterm" href="CUPS-printing.html#id424414">CUPS &#8220;PostScript Driver for Windows NT/200x/XP&#8221;</a></dt><dt>DDNS, <a class="indexterm" href="NetworkBrowsing.html#id368472">TCP/IP without NetBIOS</a>, <a class="indexterm" href="NetworkBrowsing.html#adsdnstech">DNS and Active Directory</a>, <a class="indexterm" href="integrate-ms-networks.html#id448641">Background Information</a></dt><dt>de-multiplex, <a class="indexterm" href="SambaHA.html#id452542">The Front-End Challenge</a></dt><dt>de-multiplexing, <a class="indexterm" href="SambaHA.html#id452629">Demultiplexing SMB Requests</a></dt><dt>Debian, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>Debian Sarge, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>debug, <a class="indexterm" href="bugreport.html#id465810">Internal Errors</a></dt><dt>debug level, <a class="indexterm" href="problems.html#id464263">Debugging with Samba Itself</a>, <a class="indexterm" href="bugreport.html#dbglvl">Debug Levels</a></dt><dt>debugging, <a class="indexterm" href="problems.html#id464263">Debugging with Samba Itself</a>, <a class="indexterm" href="bugreport.html#id465615">Debugging-Specific Operations</a></dt><dt>debugging passwords, <a class="indexterm" href="problems.html#id464263">Debugging with Samba Itself</a></dt><dt>debugging problems, <a class="indexterm" href="problems.html#id464263">Debugging with Samba Itself</a></dt><dt>dedicated heartbeat, <a class="indexterm" href="SambaHA.html#id453168">High-Availability Server Products</a></dt><dt>dedicated print server, <a class="indexterm" href="classicalprinting.html#id406449">Features and Benefits</a></dt><dt>default accounts, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a></dt><dt>default aliases, <a class="indexterm" href="groupmapping.html#id383950">Default Users, Groups, and Relative Identifiers</a></dt><dt>default behavior, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a></dt><dt>default devmode, <a class="indexterm" href="classicalprinting.html#prt-modeset">Setting Device Modes on New Printers</a></dt><dt>default DNS setup, <a class="indexterm" href="domain-member.html#id361503">Notes</a></dt><dt>default gateways, <a class="indexterm" href="ClientConfig.html#id363638">MS Windows XP Professional</a></dt><dt>default groups, <a class="indexterm" href="groupmapping.html#id383950">Default Users, Groups, and Relative Identifiers</a></dt><dt>default mapping, <a class="indexterm" href="ChangeNotes.html#id366943">Group Mapping Changes in Samba-3.0.23</a></dt><dt>default mappings, <a class="indexterm" href="NetCommand.html#id386085">Mapping Windows Groups to UNIX Groups</a></dt><dt>default print command, <a class="indexterm" href="classicalprinting.html#id409575">Default UNIX System Printing Commands</a></dt><dt>default print commands, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>default printer, <a class="indexterm" href="classicalprinting.html#id410090">Custom Print Commands</a></dt><dt>default printing, <a class="indexterm" href="CUPS-printing.html#id416425">Features and Benefits</a></dt><dt>default profile, <a class="indexterm" href="ProfileMgmt.html#id444297">Default Profile for Windows Users</a>, <a class="indexterm" href="ProfileMgmt.html#id445658">Changing the Default Profile</a></dt><dt>default settings, <a class="indexterm" href="passdb.html#TOSHARG-acctflags">Account Flags Management</a></dt><dt>default shells, <a class="indexterm" href="winbind.html#id437506">Starting and Testing the winbindd Daemon</a></dt><dt>Default User, <a class="indexterm" href="ProfileMgmt.html#id444984">MS Windows 200x/XP</a></dt><dt>default users, <a class="indexterm" href="groupmapping.html#id383950">Default Users, Groups, and Relative Identifiers</a></dt><dt>defective hardware, <a class="indexterm" href="NetworkBrowsing.html#id373792">Browsing of Shares and Directories is Very Slow</a></dt><dt>deferred open, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>defined shares, <a class="indexterm" href="securing-samba.html#id403740">Why Can Users Access Other Users' Home Directories?</a></dt><dt>delegate administrative privileges, <a class="indexterm" href="NetCommand.html#id387484">Administering User Rights and Privileges</a></dt><dt>delegated, <a class="indexterm" href="groupmapping.html#id383730">Important Administrative Information</a></dt><dt>delegation, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a></dt><dt>delete, <a class="indexterm" href="AccessControls.html#id396461">Managing Directories</a></dt><dt>delete a file, <a class="indexterm" href="AccessControls.html#id396956">Protecting Directories and Files from Deletion</a></dt><dt>delete roaming profiles, <a class="indexterm" href="ProfileMgmt.html#id444984">MS Windows 200x/XP</a></dt><dt>delete user script, <a class="indexterm" href="passdb.html#id378376">Deleting Accounts</a></dt><dt>deleted files, <a class="indexterm" href="VFS.html#id433348">recycle</a></dt><dt>deleted parameters, <a class="indexterm" href="upgrading-to-3.0.html#id456667">Removed Parameters</a></dt><dt>delmem, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>demote, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a></dt><dt>demoted, <a class="indexterm" href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a></dt><dt>denial of service, <a class="indexterm" href="securing-samba.html#id403151">Using Interface Protection</a></dt><dt>deny, <a class="indexterm" href="securing-samba.html#id403481">Using IPC$ Share-Based Denials </a></dt><dt>deny access, <a class="indexterm" href="securing-samba.html#firewallports">Using a Firewall</a></dt><dt>deny modes, <a class="indexterm" href="locking.html#id400630">Discussion</a></dt><dt>deny-none, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>DENY_ALL, <a class="indexterm" href="locking.html#id400630">Discussion</a></dt><dt>DENY_DOS, <a class="indexterm" href="locking.html#id400630">Discussion</a></dt><dt>DENY_FCB, <a class="indexterm" href="locking.html#id400630">Discussion</a></dt><dt>DENY_NONE, <a class="indexterm" href="locking.html#id400630">Discussion</a></dt><dt>DENY_READ, <a class="indexterm" href="locking.html#id400630">Discussion</a></dt><dt>DENY_WRITE, <a class="indexterm" href="locking.html#id400630">Discussion</a></dt><dt>deployment, <a class="indexterm" href="ch46.html#id470724">Free Support</a></dt><dt>deployment guidelines, <a class="indexterm" href="passdb.html#id376419">Caution Regarding LDAP and Samba</a></dt><dt>DES-CBC-CRC, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a></dt><dt>DES-CBC-MD5, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a>, <a class="indexterm" href="domain-member.html#ads-test-server">Testing Server Setup</a></dt><dt>desirable solution, <a class="indexterm" href="rights.html#id395514">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>desktop cache, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a></dt><dt>desktop profile, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a>, <a class="indexterm" href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a></dt><dt>desktop profiles, <a class="indexterm" href="domain-member.html#id357484">Features and Benefits</a>, <a class="indexterm" href="NetCommand.html#id388358">Managing Security Identifiers (SIDS)</a></dt><dt>deterents, <a class="indexterm" href="securing-samba.html#id402714">Introduction</a></dt><dt>development libraries, <a class="indexterm" href="winbind.html#id436389">Requirements</a></dt><dt>devfsd package, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>device mode, <a class="indexterm" href="classicalprinting.html#prt-modeset">Setting Device Modes on New Printers</a></dt><dt>device-specific commands, <a class="indexterm" href="CUPS-printing.html#id422005">PostScript Printer Descriptions for Non-PostScript Printers</a></dt><dt>DFS, <a class="indexterm" href="msdfs.html#id405843">Features and Benefits</a> (see MS-DFS, Distributed File Systems)</dt><dt>DFS junction, <a class="indexterm" href="msdfs.html#id405843">Features and Benefits</a></dt><dt>DFS links, <a class="indexterm" href="msdfs.html#id405843">Features and Benefits</a></dt><dt>DFS root, <a class="indexterm" href="msdfs.html#id405843">Features and Benefits</a></dt><dt>DFS server, <a class="indexterm" href="msdfs.html#id405843">Features and Benefits</a></dt><dt>DFS tree, <a class="indexterm" href="msdfs.html#id405843">Features and Benefits</a></dt><dt>DFS-aware, <a class="indexterm" href="msdfs.html#id405843">Features and Benefits</a></dt><dt>DFS-aware clients, <a class="indexterm" href="msdfs.html#id405843">Features and Benefits</a></dt><dt>DHCP, <a class="indexterm" href="ClientConfig.html#id363569">TCP/IP Configuration</a>, <a class="indexterm" href="ClientConfig.html#id363638">MS Windows XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id364254">MS Windows 2000</a>, <a class="indexterm" href="ClientConfig.html#id364780">MS Windows Me</a>, <a class="indexterm" href="NetworkBrowsing.html#id372672">Cross-Subnet Browsing</a>, <a class="indexterm" href="integrate-ms-networks.html#id448641">Background Information</a>, <a class="indexterm" href="DNSDHCP.html#id471060">Features and Benefits</a></dt><dt>DHCP servers, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a></dt><dt>DHCP-enabled, <a class="indexterm" href="ClientConfig.html#id364254">MS Windows 2000</a></dt><dt>DHCP-enabled operation, <a class="indexterm" href="ClientConfig.html#id363638">MS Windows XP Professional</a></dt><dt>diagnostic, <a class="indexterm" href="idmapper.html#id392871">IDMAP Storage in LDAP Using Winbind</a></dt><dt>diagnostic tools, <a class="indexterm" href="problems.html#id464263">Debugging with Samba Itself</a></dt><dt>diff, <a class="indexterm" href="bugreport.html#id466047">Patches</a></dt><dt>differences, <a class="indexterm" href="Backup.html#id451875">Rsync</a></dt><dt>different resources, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></dt><dt>differently encrypted passwords, <a class="indexterm" href="passdb.html#passdbtech">Technical Information</a></dt><dt>differing protocol, <a class="indexterm" href="upgrading-to-3.0.html#id456203">Quick Migration Guide</a></dt><dt>dir, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>direct internet access, <a class="indexterm" href="securing-samba.html#id402714">Introduction</a></dt><dt>directory, <a class="indexterm" href="samba-bdc.html#id355820">Active Directory Domain Control</a>, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="idmapper.html#id391492">Backup Domain Controller</a></dt><dt>directory access control, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>directory access permissions, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a></dt><dt>directory controls, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a></dt><dt>Directory Information Tree (see DIT)</dt><dt>directory permissions, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a>, <a class="indexterm" href="AccessControls.html#id396956">Protecting Directories and Files from Deletion</a></dt><dt>directory schema, <a class="indexterm" href="idmapper.html#id391274">Primary Domain Controller</a></dt><dt>Directory Separators, <a class="indexterm" href="AccessControls.html#id396164">MS Windows NTFS Comparison with UNIX File Systems</a></dt><dt>directory server, <a class="indexterm" href="passdb.html#id379822">ldapsam</a></dt><dt>directory_mode, <a class="indexterm" href="VFS.html#id433348">recycle</a></dt><dt>disable LMB, <a class="indexterm" href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a></dt><dt>disable locking, <a class="indexterm" href="locking.html#id400544">Features and Benefits</a></dt><dt>disable roaming profiles, <a class="indexterm" href="ProfileMgmt.html#id442177">Disabling Roaming Profile Support</a></dt><dt>disabling oplocks, <a class="indexterm" href="locking.html#id401473">PDM Data Shares</a></dt><dt>disass, <a class="indexterm" href="bugreport.html#id465810">Internal Errors</a></dt><dt>disaster recovery, <a class="indexterm" href="NT4Migration.html#id459433">Server Share and Directory Layout</a></dt><dt>disconnect a connection, <a class="indexterm" href="ProfileMgmt.html#id441824">NT4/200x User Profiles</a></dt><dt>disk, <a class="indexterm" href="passdb.html#id375454">Advantages of Encrypted Passwords</a></dt><dt>disk space, <a class="indexterm" href="NT4Migration.html#id459433">Server Share and Directory Layout</a></dt><dt>disparate information systems, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></dt><dt>display PostScript, <a class="indexterm" href="CUPS-printing.html#id418524">UNIX Printfile Conversion and GUI Basics</a></dt><dt>displayName, <a class="indexterm" href="passdb.html#id380315">OpenLDAP Configuration</a></dt><dt>distort, <a class="indexterm" href="CUPS-printing.html#id418524">UNIX Printfile Conversion and GUI Basics</a></dt><dt>distribute authentication systems, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>distributed, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a></dt><dt>distributed account, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a></dt><dt>Distributed Computing Environment (see DCE)</dt><dt>distributed directory, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a></dt><dt>distributed file system, <a class="indexterm" href="SambaHA.html#id452309">The Ultimate Goal</a> (see DFS)</dt><dt>Distributed File Systems, <a class="indexterm" href="SambaHA.html#id452727">The Distributed File System Challenge</a></dt><dt>distributed file systems, <a class="indexterm" href="SambaHA.html#id452727">The Distributed File System Challenge</a></dt><dt>distributed locking protocol, <a class="indexterm" href="SambaHA.html#id453095">A Simple Solution</a></dt><dt>distribution, <a class="indexterm" href="install.html#id342835">Example Configuration</a>, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></dt><dt>dithering algorithm, <a class="indexterm" href="CUPS-printing.html#id421357">The Role of cupsomatic/foomatic</a></dt><dt>DMB, <a class="indexterm" href="samba-pdc.html#id351870">Preparing for Domain Control</a>, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a>, <a class="indexterm" href="samba-pdc.html#id353648">Security Mode and Master Browsers</a>, <a class="indexterm" href="samba-bdc.html#id355874">What Qualifies a Domain Controller on the Network?</a>, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a>, <a class="indexterm" href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id369843">Domain Browsing Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a>, <a class="indexterm" href="NetworkBrowsing.html#id370405">Making Samba the Domain Master</a>, <a class="indexterm" href="NetworkBrowsing.html#id371035">WINS: The Windows Internetworking Name Server</a>, <a class="indexterm" href="NetworkBrowsing.html#id371853">Windows Networking Protocols</a>, <a class="indexterm" href="NetworkBrowsing.html#id372827">Behavior of Cross-Subnet Browsing</a></dt><dt>DMB for a workgroup, <a class="indexterm" href="NetworkBrowsing.html#id372256">Browsing Support in Samba</a></dt><dt>DMC, <a class="indexterm" href="idmapper.html#id391558">Examples of IDMAP Backend Usage</a></dt><dt>DMS, <a class="indexterm" href="ServerType.html#id348971">Domain Security Mode (User-Level Security)</a>, <a class="indexterm" href="NetCommand.html#id385377">Overview</a>, <a class="indexterm" href="idmapper.html#id391558">Examples of IDMAP Backend Usage</a>, <a class="indexterm" href="cfgsmarts.html">Advanced Configuration Techniques</a></dt><dt>DN, <a class="indexterm" href="samba-bdc.html#id355488">LDAP Configuration Notes</a>, <a class="indexterm" href="ch-ldap-tls.html#s1-intro-ldap-tls">Introduction</a></dt><dt>DNS, <a class="indexterm" href="samba-pdc.html#id351870">Preparing for Domain Control</a>, <a class="indexterm" href="samba-bdc.html#id355957">How Does a Workstation find its Domain Controller?</a>, <a class="indexterm" href="samba-bdc.html#id356060">NetBIOS Over TCP/IP Disabled</a>, <a class="indexterm" href="domain-member.html#id360288">Configure smb.conf</a>, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a>, <a class="indexterm" href="ClientConfig.html#id363638">MS Windows XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id364254">MS Windows 2000</a>, <a class="indexterm" href="ClientConfig.html#id364780">MS Windows Me</a>, <a class="indexterm" href="NetworkBrowsing.html">Network Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id367309">Features and Benefits</a>, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a>, <a class="indexterm" href="NetworkBrowsing.html#id368472">TCP/IP without NetBIOS</a>, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a>, <a class="indexterm" href="NetworkBrowsing.html#id372672">Cross-Subnet Browsing</a>, <a class="indexterm" href="passdb.html#id380567">Initialize the LDAP Database</a>, <a class="indexterm" href="winbind.html#id435805">Name Service Switch</a>, <a class="indexterm" href="integrate-ms-networks.html#id448641">Background Information</a>, <a class="indexterm" href="integrate-ms-networks.html#id449789">DNS Lookup</a>, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a>, <a class="indexterm" href="DNSDHCP.html#id471060">Features and Benefits</a>, <a class="indexterm" href="DNSDHCP.html#id471220">Example Configuration</a></dt><dd><dl><dt>Active Directory, <a class="indexterm" href="NetworkBrowsing.html#adsdnstech">DNS and Active Directory</a></dt><dt>Dynamic, <a class="indexterm" href="integrate-ms-networks.html#id448641">Background Information</a>, <a class="indexterm" href="DNSDHCP.html#id471296">Dynamic DNS</a></dt><dt>SRV records, <a class="indexterm" href="NetworkBrowsing.html#adsdnstech">DNS and Active Directory</a></dt></dl></dd><dt>DNS Configuration, <a class="indexterm" href="NetworkBrowsing.html#id373792">Browsing of Shares and Directories is Very Slow</a></dt><dt>DNS lookup, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a></dt><dt>DNS name resolution, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></dt><dt>dns proxy, <a class="indexterm" href="diagnosis.html#id462289">Assumptions</a></dt><dt>DNS server, <a class="indexterm" href="NetworkBrowsing.html#id372827">Behavior of Cross-Subnet Browsing</a></dt><dt>DNS server access, <a class="indexterm" href="diagnosis.html#id462289">Assumptions</a></dt><dt>DNS server settings, <a class="indexterm" href="ClientConfig.html#id363638">MS Windows XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id364254">MS Windows 2000</a></dt><dt>DNS servers, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a></dt><dt>DNS zon, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a></dt><dt>DNS/LDAP/ADS, <a class="indexterm" href="NetworkBrowsing.html#id372177">Technical Overview of Browsing</a></dt><dt>document design, <a class="indexterm" href="NT4Migration.html#id459433">Server Share and Directory Layout</a></dt><dt>documentation, <a class="indexterm" href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="SWAT.html#id460718">Features and Benefits</a>, <a class="indexterm" href="problems.html">Analyzing and Solving Samba Problems</a></dt><dt>domain, <a class="indexterm" href="samba-pdc.html#id353296">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="passdb.html#id378299">Adding User Accounts</a>, <a class="indexterm" href="integrate-ms-networks.html#id449183">Name Resolution as Used within MS Windows Networking</a></dt><dd><dl><dt>control, <a class="indexterm" href="ServerType.html#id348385">Server Types</a></dt><dd><dl><dt>role, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a></dt></dl></dd><dt>controller, <a class="indexterm" href="ServerType.html#id348242">Features and Benefits</a>, <a class="indexterm" href="ServerType.html#id348971">Domain Security Mode (User-Level Security)</a>, <a class="indexterm" href="samba-pdc.html">Domain Control</a>, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a></dt><dd><dl><dt>convert, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a></dt><dt>hierarchy, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a></dt></dl></dd><dt>controllers, <a class="indexterm" href="ServerType.html#id348971">Domain Security Mode (User-Level Security)</a></dt><dt>groups, <a class="indexterm" href="NetCommand.html#id385728">UNIX and Windows Group Management</a></dt><dt>master</dt><dd><dl><dt>browser, <a class="indexterm" href="samba-pdc.html#id351870">Preparing for Domain Control</a></dt></dl></dd><dt>member, <a class="indexterm" href="ServerType.html#id348385">Server Types</a>, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a></dt><dd><dl><dt>server, <a class="indexterm" href="samba-bdc.html#id354424">Features and Benefits</a></dt></dl></dd><dt>member server, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a></dt><dt>security, <a class="indexterm" href="ServerType.html#id348971">Domain Security Mode (User-Level Security)</a></dt><dd><dl><dt>protocols, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a></dt></dl></dd><dt>trust account, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a></dt></dl></dd><dt>domain access, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a></dt><dt>domain account access policies, <a class="indexterm" href="passdb.html#id379045">Domain Account Policy Managment</a></dt><dt>domain admin group, <a class="indexterm" href="groupmapping.html">Group Mapping: MS Windows and UNIX</a></dt><dt>domain Administrator, <a class="indexterm" href="rights.html#id395344">The Administrator Domain SID</a></dt><dt>Domain Admins, <a class="indexterm" href="ChangeNotes.html#id366943">Group Mapping Changes in Samba-3.0.23</a>, <a class="indexterm" href="groupmapping.html#id382834">Discussion</a>, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="groupmapping.html#id383730">Important Administrative Information</a>, <a class="indexterm" href="NetCommand.html#id386085">Mapping Windows Groups to UNIX Groups</a>, <a class="indexterm" href="rights.html#id394300">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>Domain Admins group, <a class="indexterm" href="groupmapping.html#id382834">Discussion</a></dt><dt>domain authentication, <a class="indexterm" href="NetCommand.html#id385377">Overview</a></dt><dt>domain context, <a class="indexterm" href="NT4Migration.html#id459247">Domain Layout</a></dt><dt>domain control, <a class="indexterm" href="samba-pdc.html#id351396">Basics of Domain Control</a>, <a class="indexterm" href="samba-pdc.html#id353648">Security Mode and Master Browsers</a>, <a class="indexterm" href="samba-bdc.html#id357015">Common Errors</a>, <a class="indexterm" href="domain-member.html#id357484">Features and Benefits</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="NT4Migration.html">Migration from NT4 PDC to Samba-3 PDC</a></dt><dd><dl><dt>backup, <a class="indexterm" href="ServerType.html#id348385">Server Types</a></dt><dt>primary, <a class="indexterm" href="ServerType.html#id348385">Server Types</a></dt></dl></dd><dt>domain control database (see SAM)</dt><dt>domain controller, <a class="indexterm" href="samba-pdc.html#id353648">Security Mode and Master Browsers</a>, <a class="indexterm" href="samba-bdc.html#id354803">Essential Background Information</a>, <a class="indexterm" href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a>, <a class="indexterm" href="samba-bdc.html#id355820">Active Directory Domain Control</a>, <a class="indexterm" href="samba-bdc.html#id356009">NetBIOS Over TCP/IP Enabled</a>, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a>, <a class="indexterm" href="winbind.html#id435346">What Winbind Provides</a>, <a class="indexterm" href="winbind.html#id437279">Join the Samba Server to the PDC Domain</a>, <a class="indexterm" href="PolicyMgmt.html#id440199">Creating and Managing System Policies</a>, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a>, <a class="indexterm" href="NT4Migration.html#id459247">Domain Layout</a>, <a class="indexterm" href="NT4Migration.html#id459730">Steps in Migration Process</a></dt><dt>Domain Controller, <a class="indexterm" href="CUPS-printing.html#id424821">Caveats to Be Considered</a></dt><dt>domain controllers, <a class="indexterm" href="samba-pdc.html#id353048">Samba ADS Domain Control</a>, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="PolicyMgmt.html#id440699">MS Windows 200x/XP Professional Policies</a>, <a class="indexterm" href="cfgsmarts.html">Advanced Configuration Techniques</a>, <a class="indexterm" href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a></dt><dt>domain environment, <a class="indexterm" href="passdb.html#id375167">Important Notes About Security</a></dt><dt>domain global, <a class="indexterm" href="rights.html#id395514">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>domain global group, <a class="indexterm" href="NetCommand.html#id385377">Overview</a>, <a class="indexterm" href="rights.html#id395514">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>domain global groups, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>domain global user, <a class="indexterm" href="rights.html#id395514">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>domain global users, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>domain group, <a class="indexterm" href="winbind.html#id434945">Features and Benefits</a></dt><dt>domain group settings, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>domain groups, <a class="indexterm" href="ChangeNotes.html#id366943">Group Mapping Changes in Samba-3.0.23</a>, <a class="indexterm" href="groupmapping.html">Group Mapping: MS Windows and UNIX</a>, <a class="indexterm" href="groupmapping.html#id383950">Default Users, Groups, and Relative Identifiers</a></dt><dt>Domain Groups, <a class="indexterm" href="passdb.html#id381139">Accounts and Groups Management</a></dt><dt>Domain Guests, <a class="indexterm" href="NetCommand.html#id386085">Mapping Windows Groups to UNIX Groups</a></dt><dt>domain information, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a></dt><dt>domain join, <a class="indexterm" href="idmapper.html#id391918">ADS Domains</a>, <a class="indexterm" href="winbind.html#id437279">Join the Samba Server to the PDC Domain</a></dt><dt>domain joining, <a class="indexterm" href="ClientConfig.html#id365265">Joining a Domain: Windows 2000/XP Professional</a></dt><dt>domain logon, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a>, <a class="indexterm" href="samba-pdc.html#id353096">Domain and Network Logon Configuration</a>, <a class="indexterm" href="samba-pdc.html#id353114">Domain Network Logon Service</a>, <a class="indexterm" href="samba-bdc.html#id355248">Example PDC Configuration</a>, <a class="indexterm" href="ClientConfig.html#id365774">Domain Logon Configuration: Windows 9x/Me</a></dt><dt>domain logon server, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a></dt><dt>domain logons, <a class="indexterm" href="samba-pdc.html#id353296">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="NetworkBrowsing.html#id372256">Browsing Support in Samba</a>, <a class="indexterm" href="passdb.html#id375167">Important Notes About Security</a></dt><dt>domain management tools, <a class="indexterm" href="domain-member.html#id358537">Managing Domain Machine Accounts using NT4 Server Manager</a></dt><dt>domain master, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#id372256">Browsing Support in Samba</a></dt><dt>domain member, <a class="indexterm" href="ServerType.html#id348971">Domain Security Mode (User-Level Security)</a>, <a class="indexterm" href="samba-pdc.html#id351870">Preparing for Domain Control</a>, <a class="indexterm" href="domain-member.html">Domain Membership</a>, <a class="indexterm" href="domain-member.html#id357484">Features and Benefits</a>, <a class="indexterm" href="domain-member.html#id358911">Windows 200x/XP Professional Client</a>, <a class="indexterm" href="domain-member.html#id361768">Common Errors</a>, <a class="indexterm" href="ClientConfig.html#id365265">Joining a Domain: Windows 2000/XP Professional</a>, <a class="indexterm" href="passdb.html#id375167">Important Notes About Security</a>, <a class="indexterm" href="groupmapping.html#id382834">Discussion</a>, <a class="indexterm" href="NetCommand.html#id385377">Overview</a>, <a class="indexterm" href="winbind.html#id435524">Handling of Foreign SIDs</a>, <a class="indexterm" href="NT4Migration.html#id459247">Domain Layout</a></dt><dt>Domain Member, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a></dt><dd><dl><dt>joining, <a class="indexterm" href="ServerType.html#id349156">Example Configuration</a></dt></dl></dd><dt>domain member client, <a class="indexterm" href="groupmapping.html#id383730">Important Administrative Information</a></dt><dt>Domain Member Client (see DMC)</dt><dt>domain member server, <a class="indexterm" href="samba-bdc.html#id356586">Example Configuration</a>, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a>, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="NetworkBrowsing.html#id368472">TCP/IP without NetBIOS</a>, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="classicalprinting.html#id406449">Features and Benefits</a></dt><dt>Domain Member Server (see DMS)</dt><dt>domain member servers, <a class="indexterm" href="samba-bdc.html#id356586">Example Configuration</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>domain member workstations, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>domain members, <a class="indexterm" href="domain-member.html#id357484">Features and Benefits</a>, <a class="indexterm" href="NetworkBrowsing.html#id369843">Domain Browsing Configuration</a>, <a class="indexterm" href="winbind.html#id436282">Introduction</a></dt><dt>domain membership, <a class="indexterm" href="samba-pdc.html#id351870">Preparing for Domain Control</a>, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a>, <a class="indexterm" href="domain-member.html">Domain Membership</a></dt><dt>domain name, <a class="indexterm" href="ClientConfig.html#id365774">Domain Logon Configuration: Windows 9x/Me</a></dt><dt>Domain Name System (see DNS)</dt><dt>domain non-member, <a class="indexterm" href="winbind.html#id435524">Handling of Foreign SIDs</a></dt><dt>domain policies, <a class="indexterm" href="PolicyMgmt.html#id440493">Windows NT4-Style Policy Files</a></dt><dt>domain radio button, <a class="indexterm" href="ClientConfig.html#id365265">Joining a Domain: Windows 2000/XP Professional</a></dt><dt>domain security, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a>, <a class="indexterm" href="domain-member.html">Domain Membership</a>, <a class="indexterm" href="domain-member.html#id357484">Features and Benefits</a>, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a>, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="domain-member.html#id360028">Why Is This Better Than security = server?</a>, <a class="indexterm" href="ClientConfig.html#id365265">Joining a Domain: Windows 2000/XP Professional</a>, <a class="indexterm" href="passdb.html#id375167">Important Notes About Security</a>, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="idmapper.html#id391274">Primary Domain Controller</a>, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a>, <a class="indexterm" href="winbind.html#id437279">Join the Samba Server to the PDC Domain</a>, <a class="indexterm" href="ProfileMgmt.html#id444984">MS Windows 200x/XP</a></dt><dt>domain security account, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>Domain Server Manager, <a class="indexterm" href="groupmapping.html#id383838">Applicable Only to Versions Earlier than 3.0.11</a></dt><dt>domain SID, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a>, <a class="indexterm" href="NetCommand.html#id388358">Managing Security Identifiers (SIDS)</a></dt><dt>domain trust, <a class="indexterm" href="samba-bdc.html#id354424">Features and Benefits</a>, <a class="indexterm" href="InterdomainTrusts.html#id404624">Creating an NT4 Domain Trust</a></dt><dt>domain user, <a class="indexterm" href="ClientConfig.html#id365774">Domain Logon Configuration: Windows 9x/Me</a>, <a class="indexterm" href="winbind.html#id434945">Features and Benefits</a>, <a class="indexterm" href="winbind.html#id435346">What Winbind Provides</a></dt><dt>domain user accounts, <a class="indexterm" href="NetCommand.html#id385728">UNIX and Windows Group Management</a></dt><dt>domain user manager, <a class="indexterm" href="passdb.html#id377980">User Account Management</a></dt><dt>Domain User Manager, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="groupmapping.html#id383838">Applicable Only to Versions Earlier than 3.0.11</a>, <a class="indexterm" href="PolicyMgmt.html#id441101">Managing Account/User Policies</a></dt><dt>Domain Users, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="NetCommand.html#id386085">Mapping Windows Groups to UNIX Groups</a></dt><dt>domain users, <a class="indexterm" href="winbind.html#id436389">Requirements</a>, <a class="indexterm" href="winbind.html#id438353">Linux/FreeBSD-Specific PAM Configuration</a>, <a class="indexterm" href="winbind.html#id438782">Conclusion</a></dt><dt>Domain Users group, <a class="indexterm" href="groupmapping.html#id385002">Adding Domain Users to the Workstation Power Users Group</a></dt><dt>domain-level, <a class="indexterm" href="domain-member.html#id360028">Why Is This Better Than security = server?</a></dt><dt>domain-level security, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></dt><dt>domain-wide browse list, <a class="indexterm" href="NetworkBrowsing.html#id370405">Making Samba the Domain Master</a></dt><dt>DOMAIN&lt;1B&gt;, <a class="indexterm" href="samba-pdc.html#id353648">Security Mode and Master Browsers</a></dt><dt>DOMAIN&lt;1C&gt;, <a class="indexterm" href="samba-pdc.html#id353296">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="samba-pdc.html#id353648">Security Mode and Master Browsers</a></dt><dt>DOMAIN&lt;1D&gt;, <a class="indexterm" href="samba-pdc.html#id353648">Security Mode and Master Browsers</a></dt><dt>draft, <a class="indexterm" href="CUPS-printing.html#id421357">The Role of cupsomatic/foomatic</a></dt><dt>Drive Identification, <a class="indexterm" href="AccessControls.html#id396164">MS Windows NTFS Comparison with UNIX File Systems</a></dt><dt>driver, <a class="indexterm" href="classicalprinting.html#id407208">Verifying Configuration with testparm</a></dt><dt>driver CDROM, <a class="indexterm" href="classicalprinting.html#id411938">Identifying Driver Files</a></dt><dt>driver download, <a class="indexterm" href="classicalprinting.html#id411183">[print$] Stanza Parameters</a></dt><dt>Driver File, <a class="indexterm" href="classicalprinting.html#id411938">Identifying Driver Files</a></dt><dt>driver files, <a class="indexterm" href="classicalprinting.html#id411938">Identifying Driver Files</a></dt><dt>Driver Path, <a class="indexterm" href="classicalprinting.html#id411938">Identifying Driver Files</a></dt><dt>dual-daemon winbindd, <a class="indexterm" href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a></dt><dt>due diligence, <a class="indexterm" href="Backup.html#id451626">Discussion of Backup Solutions</a></dt><dt>duplex, <a class="indexterm" href="CUPS-printing.html#id422583">Examples for Filtering Chains</a></dt><dt>duplex printing, <a class="indexterm" href="CUPS-printing.html#id422583">Examples for Filtering Chains</a></dt><dt>duplicate, <a class="indexterm" href="samba-bdc.html#id355488">LDAP Configuration Notes</a></dt><dt>duplication of information, <a class="indexterm" href="winbind.html#id435268">Introduction</a></dt><dt>DVI, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a>, <a class="indexterm" href="CUPS-printing.html#id420169">Prefilters</a></dt><dt>Dynamic DNS (see DDNS)</dt><dt>Dynamic Host Configuration Protocol (see DHCP)</dt><dt>dynamic link loader, <a class="indexterm" href="winbind.html#id436613">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a></dt><dt>dynamic registration files, <a class="indexterm" href="DNSDHCP.html#id471296">Dynamic DNS</a></dt><dt>Dynamic SMB servers, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>dynamically loadable library modules, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt></dl></div><div class="indexdiv"><h3>E</h3><dl><dt>e-Directory, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a>, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a></dt><dt>EAs, <a class="indexterm" href="AccessControls.html#id396582">File and Directory Access Control</a></dt><dt>economically wise, <a class="indexterm" href="SambaHA.html#id452170">Features and Benefits</a></dt><dt>eDirectory, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a></dt><dt>editreg, <a class="indexterm" href="PolicyMgmt.html#id441316">Samba Editreg Toolset</a></dt><dt>efficient authentication, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>election, <a class="indexterm" href="samba-pdc.html#id353648">Security Mode and Master Browsers</a>, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a>, <a class="indexterm" href="NetworkBrowsing.html#id369843">Domain Browsing Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></dt><dt>election criteria, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a></dt><dt>election packet, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></dt><dt>election process, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></dt><dt>EMF, <a class="indexterm" href="CUPS-printing.html#id418358">Windows Drivers, GDI, and EMF</a>, <a class="indexterm" href="CUPS-printing.html#id423186">From Windows Clients to an NT Print Server</a>, <a class="indexterm" href="CUPS-printing.html#id423310">Driver Execution on the Server</a></dt><dt>enables clients to print, <a class="indexterm" href="classicalprinting.html#id406941">Simple Print Configuration</a></dt><dt>enables NetBIOS over TCP/IP, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a></dt><dt>encapsulating, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a></dt><dt>encoding, <a class="indexterm" href="domain-member.html#ads-test-server">Testing Server Setup</a></dt><dt>encryped password, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a></dt><dt>encrypted, <a class="indexterm" href="ServerType.html#id348242">Features and Benefits</a>, <a class="indexterm" href="ServerType.html#id349792">Password Checking</a>, <a class="indexterm" href="passdb.html#id375167">Important Notes About Security</a></dt><dt>encrypted password, <a class="indexterm" href="passdb.html#id375454">Advantages of Encrypted Passwords</a></dt><dt>encrypted passwords, <a class="indexterm" href="ServerType.html#id349792">Password Checking</a>, <a class="indexterm" href="passdb.html#id374429">Features and Benefits</a>, <a class="indexterm" href="passdb.html#passdbtech">Technical Information</a>, <a class="indexterm" href="passdb.html#id375167">Important Notes About Security</a>, <a class="indexterm" href="passdb.html#id375454">Advantages of Encrypted Passwords</a>, <a class="indexterm" href="ProfileMgmt.html#id443770">Profile Migration from Windows NT4/200x Server to Samba</a>, <a class="indexterm" href="upgrading-to-3.0.html#id457959">Passdb Backends and Authentication</a></dt><dt>encrypted session, <a class="indexterm" href="passdb.html#id381244">Security and sambaSamAccount</a></dt><dt>encryption, <a class="indexterm" href="ServerType.html#id349552">Server Security (User Level Security)</a></dt><dt>encryption key, <a class="indexterm" href="domain-member.html#id358911">Windows 200x/XP Professional Client</a></dt><dt>encryption types, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a>, <a class="indexterm" href="domain-member.html#id361503">Notes</a></dt><dt>enforcing, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>English, <a class="indexterm" href="unicode.html#id450526">Japanese Charsets</a>, <a class="indexterm" href="SWAT.html#id461566">Enabling SWAT Internationalization Support</a></dt><dt>Enhanced MetaFile (see EMF)</dt><dt>enterprise, <a class="indexterm" href="passdb.html#id379428">smbpasswd: Encrypted Password Database</a></dt><dt>enumdrivers, <a class="indexterm" href="classicalprinting.html#id411938">Identifying Driver Files</a>, <a class="indexterm" href="CUPS-printing.html#id426337">A Check of the rpcclient man Page</a></dt><dt>enumerate domain groups, <a class="indexterm" href="winbind.html#id435683">Microsoft Remote Procedure Calls</a></dt><dt>enumerate domain users, <a class="indexterm" href="winbind.html#id435683">Microsoft Remote Procedure Calls</a></dt><dt>EnumJobs(), <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>enumprinters, <a class="indexterm" href="CUPS-printing.html#id426337">A Check of the rpcclient man Page</a></dt><dt>environment variables, <a class="indexterm" href="classicalprinting.html#id410090">Custom Print Commands</a></dt><dt>EPM (see ESP meta packager)</dt><dt>Epson Stylus, <a class="indexterm" href="CUPS-printing.html#id422583">Examples for Filtering Chains</a></dt><dt>Epson Stylus inkjet, <a class="indexterm" href="CUPS-printing.html#id429175">Foomatic Database-Generated PPDs</a></dt><dt>equivalence, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>equivalent rights and privileges, <a class="indexterm" href="rights.html#id395344">The Administrator Domain SID</a></dt><dt>error message, <a class="indexterm" href="idmapper.html#id391918">ADS Domains</a>, <a class="indexterm" href="classicalprinting.html#id412744">Running rpcclient with adddriver</a></dt><dt>error messages, <a class="indexterm" href="diagnosis.html#id462289">Assumptions</a></dt><dt>errors that can afflict, <a class="indexterm" href="ClientConfig.html#id366202">Common Errors</a></dt><dt>ESC/P, <a class="indexterm" href="CUPS-printing.html#id423310">Driver Execution on the Server</a></dt><dt>ESP, <a class="indexterm" href="CUPS-printing.html#id418848">Ghostscript: The Software RIP for Non-PostScript Printers</a></dt><dd><dl><dt>Ghostscript, <a class="indexterm" href="CUPS-printing.html#id419200">The CUPS Filtering Architecture</a>, <a class="indexterm" href="CUPS-printing.html#id422269">cupsomatic/foomatic-rip Versus Native CUPS Printing</a></dt><dt>meta packager, <a class="indexterm" href="CUPS-printing.html#id424414">CUPS &#8220;PostScript Driver for Windows NT/200x/XP&#8221;</a></dt><dt>Print Pro, <a class="indexterm" href="CUPS-printing.html#id422984">Sources of CUPS Drivers/PPDs</a>, <a class="indexterm" href="CUPS-printing.html#id424766">ESP Print Pro PostScript Driver for Windows NT/200x/XP</a></dt></dl></dd><dt>ESP Ghostscript, <a class="indexterm" href="CUPS-printing.html#id419200">The CUPS Filtering Architecture</a></dt><dt>established, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></dt><dt>ethereal, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a>, <a class="indexterm" href="problems.html#id464508">Tcpdump</a>, <a class="indexterm" href="problems.html#id464556">Ethereal</a>, <a class="indexterm" href="problems.html#id464695">The Windows Network Monitor</a></dt><dt>Ethernet adapters, <a class="indexterm" href="securing-samba.html#id403151">Using Interface Protection</a></dt><dt>EUC-JP, <a class="indexterm" href="unicode.html#id450526">Japanese Charsets</a>, <a class="indexterm" href="unicode.html#id450646">Basic Parameter Setting</a></dt><dt>eucJP-ms locale, <a class="indexterm" href="unicode.html#id450646">Basic Parameter Setting</a></dt><dt>Event Viewer, <a class="indexterm" href="AdvancedNetworkManagement.html#id439095">Remote Server Administration</a></dt><dt>Everyone - Full Control, <a class="indexterm" href="AccessControls.html#id398176">Access Controls on Shares</a></dt><dt>Everyone group, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>EVMS, <a class="indexterm" href="VFS.html#id433767">shadow_copy</a></dt><dt>examples, <a class="indexterm" href="install.html#id342835">Example Configuration</a></dt><dt>examples/LDAP, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a></dt><dt>execute, <a class="indexterm" href="AccessControls.html#id396582">File and Directory Access Control</a></dt><dt>existing LDAP DIT, <a class="indexterm" href="passdb.html#id376419">Caution Regarding LDAP and Samba</a></dt><dt>expands control abilities, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a></dt><dt>expired password, <a class="indexterm" href="passdb.html#id378456">Changing User Accounts</a></dt><dt>explicit trust, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a></dt><dt>explicitly set, <a class="indexterm" href="classicalprinting.html#id407391">Rapid Configuration Validation</a></dt><dt>exploit opportunities, <a class="indexterm" href="PolicyMgmt.html#id440104">Features and Benefits</a></dt><dt>exploitation, <a class="indexterm" href="securing-samba.html#id403151">Using Interface Protection</a></dt><dt>exported file system, <a class="indexterm" href="SambaHA.html#id453095">A Simple Solution</a></dt><dt>exposed, <a class="indexterm" href="securing-samba.html#firewallports">Using a Firewall</a></dt><dt>extd_audit module, <a class="indexterm" href="VFS.html#id433040">extd_audit</a></dt><dt>Extended Attributes, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a></dt><dt>extended attributes, <a class="indexterm" href="AccessControls.html#id396956">Protecting Directories and Files from Deletion</a></dt><dt>Extended BSD Printing, <a class="indexterm" href="classicalprinting.html#id407742">Extended Printing Configuration</a></dt><dt>extended characters, <a class="indexterm" href="unicode.html#id450250">What Are Charsets and Unicode?</a></dt><dt>extended protocol, <a class="indexterm" href="NetworkBrowsing.html#id371853">Windows Networking Protocols</a></dt><dt>extended SAM, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a></dt><dt>extra machine, <a class="indexterm" href="cfgsmarts.html#id455267">Multiple Virtual Server Hosting</a></dt></dl></div><div class="indexdiv"><h3>F</h3><dl><dt>fail, <a class="indexterm" href="SambaHA.html#id452170">Features and Benefits</a></dt><dt>failed join, <a class="indexterm" href="idmapper.html#id391641">NT4-Style Domains (Includes Samba Domains)</a>, <a class="indexterm" href="idmapper.html#id392312">IDMAP_RID with Winbind</a></dt><dt>failed logins, <a class="indexterm" href="passdb.html#acctmgmttools">Account Management Tools</a></dt><dt>failover communication, <a class="indexterm" href="SambaHA.html#id453168">High-Availability Server Products</a></dt><dt>failover process, <a class="indexterm" href="SambaHA.html#id453168">High-Availability Server Products</a></dt><dt>failover servers, <a class="indexterm" href="SambaHA.html#id453095">A Simple Solution</a></dt><dt>fails, <a class="indexterm" href="domain-member.html#id361872">Adding Machine to Domain Fails</a></dt><dt>failure, <a class="indexterm" href="idmapper.html#id391918">ADS Domains</a></dt><dt>failure semantics, <a class="indexterm" href="SambaHA.html#id453044">Required Modifications to Samba</a></dt><dt>fake-permissions module, <a class="indexterm" href="ProfileMgmt.html#id444102">Mandatory Profiles</a></dt><dt>fake_permissions, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a></dt><dt>fake_perms, <a class="indexterm" href="VFS.html#fakeperms">fake_perms</a>, <a class="indexterm" href="ProfileMgmt.html#id444102">Mandatory Profiles</a></dt><dt>fdisk, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>Federated Identity Management (see FIM)</dt><dt>federated organizations, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></dt><dt>federated-identity, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></dt><dt>Fiber Channel, <a class="indexterm" href="SambaHA.html#id453168">High-Availability Server Products</a></dt><dt>fickle, <a class="indexterm" href="NetworkBrowsing.html#id367309">Features and Benefits</a></dt><dt>fid, <a class="indexterm" href="SambaHA.html#id452629">Demultiplexing SMB Requests</a></dt><dt>file access permissions, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a></dt><dt>File Naming Conventions, <a class="indexterm" href="AccessControls.html#id396164">MS Windows NTFS Comparison with UNIX File Systems</a></dt><dt>file ownership, <a class="indexterm" href="domain-member.html#id357484">Features and Benefits</a></dt><dt>file serving, <a class="indexterm" href="classicalprinting.html#id406449">Features and Benefits</a></dt><dt>File System, <a class="indexterm" href="AccessControls.html#id396164">MS Windows NTFS Comparison with UNIX File Systems</a></dt><dd><dl><dt>case sensitivity, <a class="indexterm" href="AccessControls.html#id396164">MS Windows NTFS Comparison with UNIX File Systems</a></dt><dt>feature comparison, <a class="indexterm" href="AccessControls.html#id396164">MS Windows NTFS Comparison with UNIX File Systems</a></dt><dt>UNIX, <a class="indexterm" href="AccessControls.html#id396164">MS Windows NTFS Comparison with UNIX File Systems</a></dt><dt>Windows, <a class="indexterm" href="AccessControls.html#id396164">MS Windows NTFS Comparison with UNIX File Systems</a></dt></dl></dd><dt>file system capabilities, <a class="indexterm" href="AccessControls.html#id396956">Protecting Directories and Files from Deletion</a></dt><dt>FILE:, <a class="indexterm" href="classicalprinting.html#id415466">Samba and Printer Ports</a></dt><dt>filemanager, <a class="indexterm" href="NetworkBrowsing.html#id372438">Problem Resolution</a></dt><dt>filename mangling, <a class="indexterm" href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a></dt><dt>filter, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></dt><dt>Filter Oplock, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>FilterLimit, <a class="indexterm" href="CUPS-printing.html#id421583">mime.convs</a></dt><dt>filters, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></dt><dt>FIM, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a>, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a></dt><dt>firewall, <a class="indexterm" href="securing-samba.html#id402714">Introduction</a>, <a class="indexterm" href="securing-samba.html#id403151">Using Interface Protection</a>, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>firewall active, <a class="indexterm" href="securing-samba.html#firewallports">Using a Firewall</a></dt><dt>firewall setups, <a class="indexterm" href="securing-samba.html#firewallports">Using a Firewall</a></dt><dt>fixed IP address, <a class="indexterm" href="ClientConfig.html#id363638">MS Windows XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id364254">MS Windows 2000</a></dt><dt>fixed IP addresses, <a class="indexterm" href="ClientConfig.html#id363569">TCP/IP Configuration</a></dt><dt>flush local locks, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>flush name cache, <a class="indexterm" href="NetworkBrowsing.html#id373637">Flushing the Samba NetBIOS Name Cache</a></dt><dt>foomatic, <a class="indexterm" href="CUPS-printing.html#id419056">Using Windows-Formatted Vendor PPDs</a>, <a class="indexterm" href="CUPS-printing.html#id419200">The CUPS Filtering Architecture</a>, <a class="indexterm" href="CUPS-printing.html#id421357">The Role of cupsomatic/foomatic</a>, <a class="indexterm" href="CUPS-printing.html#id422269">cupsomatic/foomatic-rip Versus Native CUPS Printing</a>, <a class="indexterm" href="CUPS-printing.html#id428570">foomatic-rip and Foomatic Explained</a>, <a class="indexterm" href="CUPS-printing.html#id428697">Foomatic's Strange Name</a></dt><dt>Foomatic database, <a class="indexterm" href="CUPS-printing.html#id429175">Foomatic Database-Generated PPDs</a></dt><dt>Foomatic Printer, <a class="indexterm" href="CUPS-printing.html#id421357">The Role of cupsomatic/foomatic</a></dt><dt>Foomatic tutorial, <a class="indexterm" href="CUPS-printing.html#id428901">The Grand Unification Achieved</a></dt><dt>foomatic-rip, <a class="indexterm" href="CUPS-printing.html#id419200">The CUPS Filtering Architecture</a>, <a class="indexterm" href="CUPS-printing.html#id421357">The Role of cupsomatic/foomatic</a>, <a class="indexterm" href="CUPS-printing.html#id422269">cupsomatic/foomatic-rip Versus Native CUPS Printing</a>, <a class="indexterm" href="CUPS-printing.html#id428409">CUPS Print Drivers from Linuxprinting.org</a>, <a class="indexterm" href="CUPS-printing.html#id428570">foomatic-rip and Foomatic Explained</a>, <a class="indexterm" href="CUPS-printing.html#id428901">The Grand Unification Achieved</a></dt><dt>Foomatic/cupsomatic, <a class="indexterm" href="CUPS-printing.html#id422269">cupsomatic/foomatic-rip Versus Native CUPS Printing</a></dt><dt>force an election, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></dt><dt>force election, <a class="indexterm" href="NetworkBrowsing.html#id370405">Making Samba the Domain Master</a></dt><dt>forced synchronization, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a></dt><dt>foreign domain, <a class="indexterm" href="passdb.html#id375648">Mapping User Identifiers between MS Windows and UNIX</a>, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>foreign SID, <a class="indexterm" href="winbind.html#id435524">Handling of Foreign SIDs</a></dt><dt>foreign user, <a class="indexterm" href="winbind.html#id435524">Handling of Foreign SIDs</a></dt><dt>FQDN, <a class="indexterm" href="ch-ldap-tls.html#s1-intro-ldap-tls">Introduction</a></dt><dt>framing error, <a class="indexterm" href="speed.html#id469477">Samba Performance Problem Due to Changing Linux Kernel</a></dt><dt>free support, <a class="indexterm" href="ch46.html">Samba Support</a>, <a class="indexterm" href="ch46.html#id470724">Free Support</a></dt><dt>FreeBSD, <a class="indexterm" href="samba-pdc.html#id353884">&#8220;$&#8221; Cannot Be Included in Machine Name</a>, <a class="indexterm" href="unicode.html#id450646">Basic Parameter Setting</a></dt><dt>freezing, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>French, <a class="indexterm" href="SWAT.html#id461566">Enabling SWAT Internationalization Support</a></dt><dt>front-end virtual server, <a class="indexterm" href="SambaHA.html#id452542">The Front-End Challenge</a>, <a class="indexterm" href="SambaHA.html#id452629">Demultiplexing SMB Requests</a></dt><dt>frustrating experience, <a class="indexterm" href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a></dt><dt>FTP, <a class="indexterm" href="passdb.html#id375587">Advantages of Non-Encrypted Passwords</a></dt><dt>ftp, <a class="indexterm" href="Backup.html#id451875">Rsync</a>, <a class="indexterm" href="compiling.html#id466427">Accessing the Samba Sources via rsync and ftp</a></dt><dt>ftp access, <a class="indexterm" href="winbind.html#id438353">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>ftp service, <a class="indexterm" href="winbind.html#id438353">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>ftp services, <a class="indexterm" href="winbind.html#id438353">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>ftpd, <a class="indexterm" href="pam.html#id446697">Anatomy of /etc/pam.d Entries</a></dt><dt>full rights, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>functional components, <a class="indexterm" href="bugreport.html#id465615">Debugging-Specific Operations</a></dt><dt>functionality, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt></dl></div><div class="indexdiv"><h3>G</h3><dl><dt>gateway address, <a class="indexterm" href="ClientConfig.html#id363638">MS Windows XP Professional</a></dt><dt>gcc, <a class="indexterm" href="problems.html#id464263">Debugging with Samba Itself</a>, <a class="indexterm" href="Portability.html#id467664">HPUX</a></dt><dt>gdb, <a class="indexterm" href="problems.html#id464263">Debugging with Samba Itself</a>, <a class="indexterm" href="bugreport.html#id465810">Internal Errors</a>, <a class="indexterm" href="bugreport.html#id465932">Attaching to a Running Process</a></dt><dt>GDI, <a class="indexterm" href="CUPS-printing.html#gdipost">GDI on Windows, PostScript on UNIX</a>, <a class="indexterm" href="CUPS-printing.html#id418358">Windows Drivers, GDI, and EMF</a>, <a class="indexterm" href="CUPS-printing.html#id423186">From Windows Clients to an NT Print Server</a>, <a class="indexterm" href="CUPS-printing.html#id423310">Driver Execution on the Server</a></dt><dt>general security service application programming interface (see GSSAPI)</dt><dt>generic PostScript, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></dt><dt>generic raster, <a class="indexterm" href="CUPS-printing.html#id420506">pstoraster</a></dt><dt>generic raster format, <a class="indexterm" href="CUPS-printing.html#id419200">The CUPS Filtering Architecture</a></dt><dt>genlogon.pl, <a class="indexterm" href="AdvancedNetworkManagement.html#id439771">Network Logon Script Magic</a></dt><dt>Gentoo, <a class="indexterm" href="speed.html#id469477">Samba Performance Problem Due to Changing Linux Kernel</a></dt><dt>Germany, <a class="indexterm" href="SambaHA.html#id452277">Technical Discussion</a></dt><dt>get, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>getdriver, <a class="indexterm" href="classicalprinting.html#id411938">Identifying Driver Files</a>, <a class="indexterm" href="classicalprinting.html#id412436">Installing Driver Files into [print$]</a></dt><dt>getdriverdir, <a class="indexterm" href="CUPS-printing.html#id426337">A Check of the rpcclient man Page</a></dt><dt>getent, <a class="indexterm" href="NetCommand.html#id385906">Adding or Creating a New Group</a>, <a class="indexterm" href="idmapper.html#id392312">IDMAP_RID with Winbind</a>, <a class="indexterm" href="winbind.html#id437506">Starting and Testing the winbindd Daemon</a></dt><dt>getent group demo, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>gethostbyname() function call, <a class="indexterm" href="NetworkBrowsing.html#id371983">Name Resolution Order</a></dt><dt>getpwnam, <a class="indexterm" href="passdb.html#id380104">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a></dt><dt>getpwnam() call, <a class="indexterm" href="upgrading-to-3.0.html#id457871">Changes in Behavior</a></dt><dt>GetSID.exe, <a class="indexterm" href="ProfileMgmt.html#id444042">Get SID</a></dt><dt>GhostScript, <a class="indexterm" href="CUPS-printing.html#post-and-ghost">PostScript and Ghostscript</a>, <a class="indexterm" href="CUPS-printing.html#id418848">Ghostscript: The Software RIP for Non-PostScript Printers</a></dt><dd><dl><dt>(see also PostScript)</dt></dl></dd><dt>Ghostscript, <a class="indexterm" href="CUPS-printing.html#id419200">The CUPS Filtering Architecture</a>, <a class="indexterm" href="CUPS-printing.html#id422005">PostScript Printer Descriptions for Non-PostScript Printers</a></dt><dd><dl><dt>ESP (see ESP
+	GhostScript)</dt></dl></dd><dt>GID, <a class="indexterm" href="samba-bdc.html#id356586">Example Configuration</a>, <a class="indexterm" href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id360028">Why Is This Better Than security = server?</a>, <a class="indexterm" href="domain-member.html#id361572">Sharing User ID Mappings between Samba Domain Members</a>, <a class="indexterm" href="ChangeNotes.html#id366486">User and Group Changes</a>, <a class="indexterm" href="ChangeNotes.html#id366887">Passdb Changes</a>, <a class="indexterm" href="ChangeNotes.html#id366943">Group Mapping Changes in Samba-3.0.23</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="groupmapping.html#id382442">Features and Benefits</a>, <a class="indexterm" href="NetCommand.html#id385377">Overview</a>, <a class="indexterm" href="NetCommand.html#id386085">Mapping Windows Groups to UNIX Groups</a>, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id391274">Primary Domain Controller</a>, <a class="indexterm" href="winbind.html#id434945">Features and Benefits</a>, <a class="indexterm" href="winbind.html#id435524">Handling of Foreign SIDs</a>, <a class="indexterm" href="winbind.html#id437506">Starting and Testing the winbindd Daemon</a></dt><dt>GID numbers, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a></dt><dt>GID range, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a></dt><dt>GIF, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></dt><dt>Gimp-Print, <a class="indexterm" href="CUPS-printing.html#id420837">rasterto [printers specific]</a>, <a class="indexterm" href="CUPS-printing.html#id429010">Driver Development Outside</a></dt><dt>global print command, <a class="indexterm" href="classicalprinting.html#id410090">Custom Print Commands</a></dt><dt>global right, <a class="indexterm" href="rights.html#id394618">Description of Privileges</a></dt><dt>global section, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>Global support, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>global-level, <a class="indexterm" href="classicalprinting.html#id406846">Printing-Related Configuration Parameters</a></dt><dt>GNOME, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a></dt><dt>GNU Ghostscript, <a class="indexterm" href="CUPS-printing.html#id419200">The CUPS Filtering Architecture</a>, <a class="indexterm" href="CUPS-printing.html#id420506">pstoraster</a></dt><dt>GNU GPL, <a class="indexterm" href="Backup.html#id451712">BackupPC</a></dt><dt>GNU tar, <a class="indexterm" href="Backup.html#id452035">Amanda</a></dt><dt>GNU/Linux, <a class="indexterm" href="VFS.html#id432421">Discussion</a></dt><dt>GPG, <a class="indexterm" href="compiling.html#id466494">Verifying Samba's PGP Signature</a></dt><dt>GPL, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a></dt><dt>gpolmig.exe, <a class="indexterm" href="PolicyMgmt.html#id440878">Administration of Windows 200x/XP Policies</a></dt><dt>GPOs, <a class="indexterm" href="PolicyMgmt.html#id440104">Features and Benefits</a>, <a class="indexterm" href="PolicyMgmt.html#id440699">MS Windows 200x/XP Professional Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id440878">Administration of Windows 200x/XP Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id441101">Managing Account/User Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id441492">System Startup and Logon Processing Overview</a>, <a class="indexterm" href="ProfileMgmt.html#id444984">MS Windows 200x/XP</a></dt><dt>grace time, <a class="indexterm" href="passdb.html#id378456">Changing User Accounts</a></dt><dt>grant rights, <a class="indexterm" href="rights.html#id394300">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>graphical objects, <a class="indexterm" href="CUPS-printing.html#id418524">UNIX Printfile Conversion and GUI Basics</a></dt><dt>graphically illustrated client configuration, <a class="indexterm" href="ClientConfig.html#id363475">Features and Benefits</a></dt><dt>grayscale, <a class="indexterm" href="CUPS-printing.html#id421357">The Role of cupsomatic/foomatic</a></dt><dt>greater scalability, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a></dt><dt>greatest mistake, <a class="indexterm" href="StandAloneServer.html#id363410">Common Errors</a></dt><dt>grep, <a class="indexterm" href="winbind.html#id436613">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a></dt><dt>group, <a class="indexterm" href="samba-bdc.html#id356586">Example Configuration</a>, <a class="indexterm" href="ChangeNotes.html#id366486">User and Group Changes</a>, <a class="indexterm" href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="AccessControls.html#id396582">File and Directory Access Control</a></dt><dd><dl><dt>account, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a></dt><dt>mapping, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a></dt></dl></dd><dt>group account, <a class="indexterm" href="groupmapping.html#id383730">Important Administrative Information</a>, <a class="indexterm" href="idmapper.html#id391492">Backup Domain Controller</a></dt><dt>group accounts, <a class="indexterm" href="ClientConfig.html#id365774">Domain Logon Configuration: Windows 9x/Me</a>, <a class="indexterm" href="passdb.html#id376419">Caution Regarding LDAP and Samba</a>, <a class="indexterm" href="groupmapping.html#id382442">Features and Benefits</a>, <a class="indexterm" href="groupmapping.html#id383149">Warning: User Private Group Problems</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a></dt><dt>group management, <a class="indexterm" href="NetCommand.html#id385377">Overview</a>, <a class="indexterm" href="NetCommand.html#id385728">UNIX and Windows Group Management</a></dt><dt>group mapping, <a class="indexterm" href="ChangeNotes.html#id366486">User and Group Changes</a>, <a class="indexterm" href="groupmapping.html">Group Mapping: MS Windows and UNIX</a></dt><dt>group mappings, <a class="indexterm" href="ChangeNotes.html#id366943">Group Mapping Changes in Samba-3.0.23</a>, <a class="indexterm" href="groupmapping.html#id382442">Features and Benefits</a></dt><dt>group membership, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>group ownership, <a class="indexterm" href="winbind.html#id434945">Features and Benefits</a></dt><dt>group permissions, <a class="indexterm" href="ChangeNotes.html#id366486">User and Group Changes</a>, <a class="indexterm" href="NT4Migration.html#id459433">Server Share and Directory Layout</a></dt><dt>Group Policies, <a class="indexterm" href="PolicyMgmt.html#id440104">Features and Benefits</a></dt><dt>group policies, <a class="indexterm" href="PolicyMgmt.html#id440104">Features and Benefits</a></dt><dt>group policy, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a></dt><dt>Group Policy, <a class="indexterm" href="PolicyMgmt.html#id440369">Windows 9x/ME Policies</a></dt><dt>Group Policy Container (see GPC)</dt><dt>Group Policy Editor, <a class="indexterm" href="PolicyMgmt.html#id440369">Windows 9x/ME Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id441392">Windows NT4/200x</a>, <a class="indexterm" href="NT4Migration.html#id460257">Samba-3 Implementation Choices</a></dt><dt>Group Policy Objects, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a> (see GPO)</dt><dt>group policy objects (see GPOs)</dt><dt>Group Policy Template (see GPT)</dt><dt>group privileges, <a class="indexterm" href="groupmapping.html#id382834">Discussion</a></dt><dt>group profiles, <a class="indexterm" href="ProfileMgmt.html#id444230">Creating and Managing Group Profiles</a></dt><dt>group SID, <a class="indexterm" href="NetCommand.html#id388358">Managing Security Identifiers (SIDS)</a></dt><dt>groupadd, <a class="indexterm" href="groupmapping.html#id382442">Features and Benefits</a>, <a class="indexterm" href="groupmapping.html#id384638">Sample smb.conf Add Group Script</a>, <a class="indexterm" href="groupmapping.html#id384922">Adding Groups Fails</a></dt><dt>groupadd limitations, <a class="indexterm" href="groupmapping.html#id384638">Sample smb.conf Add Group Script</a></dt><dt>groupdel, <a class="indexterm" href="groupmapping.html#id382442">Features and Benefits</a></dt><dt>groupmap, <a class="indexterm" href="groupmapping.html">Group Mapping: MS Windows and UNIX</a></dt><dt>groupmod, <a class="indexterm" href="groupmapping.html#id382442">Features and Benefits</a></dt><dt>grouppol.inf, <a class="indexterm" href="PolicyMgmt.html#id440369">Windows 9x/ME Policies</a></dt><dt>groups, <a class="indexterm" href="NetCommand.html#id385728">UNIX and Windows Group Management</a>, <a class="indexterm" href="PolicyMgmt.html#id440104">Features and Benefits</a></dt><dd><dl><dt>domain, <a class="indexterm" href="groupmapping.html#id382834">Discussion</a></dt><dt>mapping, <a class="indexterm" href="groupmapping.html">Group Mapping: MS Windows and UNIX</a></dt><dt>nested, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt></dl></dd><dt>groups of users, <a class="indexterm" href="NetCommand.html#id387484">Administering User Rights and Privileges</a></dt><dt>growing, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>GSSAPI, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></dt><dt>gtklp, <a class="indexterm" href="CUPS-printing.html#id429175">Foomatic Database-Generated PPDs</a></dt><dt>guest, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a>, <a class="indexterm" href="StandAloneServer.html#RefDocServer">Reference Documentation Server</a></dt><dt>guest account, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="NetworkBrowsing.html#id372438">Problem Resolution</a>, <a class="indexterm" href="classicalprinting.html#id410090">Custom Print Commands</a>, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>GUI, <a class="indexterm" href="CUPS-printing.html#id416476">Overview</a></dt></dl></div><div class="indexdiv"><h3>H</h3><dl><dt>h-node, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a></dt><dt>harvesting password hashes, <a class="indexterm" href="passdb.html#id381244">Security and sambaSamAccount</a></dt><dt>hashed password equivalent, <a class="indexterm" href="passdb.html#id375167">Important Notes About Security</a></dt><dt>headers files, <a class="indexterm" href="domain-member.html#id361222">Possible Errors</a></dt><dt>Heimdal, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a>, <a class="indexterm" href="idmapper.html#id391918">ADS Domains</a>, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>Heimdal kerberos, <a class="indexterm" href="idmapper.html#id391918">ADS Domains</a>, <a class="indexterm" href="idmapper.html#id392871">IDMAP Storage in LDAP Using Winbind</a></dt><dt>help, <a class="indexterm" href="ch46.html#id470724">Free Support</a></dt><dt>help command, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>heterogeneous computing, <a class="indexterm" href="winbind.html#id434945">Features and Benefits</a></dt><dt>HEX, <a class="indexterm" href="unicode.html#id450526">Japanese Charsets</a></dt><dt>hi-res photo, <a class="indexterm" href="CUPS-printing.html#id421357">The Role of cupsomatic/foomatic</a></dt><dt>high availability, <a class="indexterm" href="SambaHA.html#id452170">Features and Benefits</a></dt><dt>high order ports, <a class="indexterm" href="securing-samba.html#firewallports">Using a Firewall</a></dt><dt>high-availability, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>high-availability services, <a class="indexterm" href="SambaHA.html#id453168">High-Availability Server Products</a></dt><dt>high-speed server interconnect, <a class="indexterm" href="SambaHA.html#id453095">A Simple Solution</a></dt><dt>higher availability, <a class="indexterm" href="msdfs.html#id405843">Features and Benefits</a></dt><dt>HKEY_CURRENT_USER, <a class="indexterm" href="ProfileMgmt.html#id444459">MS Windows NT4 Workstation</a></dt><dt>HKEY_LOCAL_MACHINE, <a class="indexterm" href="PolicyMgmt.html#id440664">Registry Spoiling</a></dt><dt>holy grail, <a class="indexterm" href="winbind.html#id434945">Features and Benefits</a></dt><dt>home directories, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a>, <a class="indexterm" href="winbind.html#id437506">Starting and Testing the winbindd Daemon</a></dt><dt>home directory, <a class="indexterm" href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="passdb.html#id379428">smbpasswd: Encrypted Password Database</a></dt><dt>home directory template, <a class="indexterm" href="winbind.html#id438353">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>home drive, <a class="indexterm" href="samba-bdc.html#id355248">Example PDC Configuration</a></dt><dt>host multiple servers, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></dt><dt>host security, <a class="indexterm" href="securing-samba.html#id402802">Features and Benefits</a></dt><dt>host-based protection, <a class="indexterm" href="securing-samba.html#id402802">Features and Benefits</a></dt><dt>hostname, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a></dt><dt>hosts allow, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>hosts deny, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>house-keeping, <a class="indexterm" href="rights.html#id394618">Description of Privileges</a></dt><dt>HOWTO documents, <a class="indexterm" href="passdb.html#id376419">Caution Regarding LDAP and Samba</a></dt><dt>HP JetDirect, <a class="indexterm" href="CUPS-printing.html#id422583">Examples for Filtering Chains</a></dt><dt>HP Photosmart, <a class="indexterm" href="CUPS-printing.html#id429175">Foomatic Database-Generated PPDs</a></dt><dt>HP-GL, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></dt><dt>HP-GL., <a class="indexterm" href="CUPS-printing.html#id420169">Prefilters</a></dt><dt>hpgltops, <a class="indexterm" href="CUPS-printing.html#id419826">MIME Type Conversion Rules</a></dt><dt>HPIJS, <a class="indexterm" href="CUPS-printing.html#id429010">Driver Development Outside</a></dt><dt>HPUX, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>http, <a class="indexterm" href="Backup.html#id451875">Rsync</a></dt><dt>hybrid, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a></dt><dt>Hybrid node, <a class="indexterm" href="NetworkBrowsing.html#id371626">Static WINS Entries</a></dt></dl></div><div class="indexdiv"><h3>I</h3><dl><dt>IANA, <a class="indexterm" href="CUPS-printing.html#id420506">pstoraster</a></dt><dt>ID mapping, <a class="indexterm" href="samba-bdc.html#id356586">Example Configuration</a>, <a class="indexterm" href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a></dt><dt>ID mapping database, <a class="indexterm" href="winbind.html#id436158">User and Group ID Allocation</a></dt><dt>ID range, <a class="indexterm" href="groupmapping.html#id382442">Features and Benefits</a></dt><dt>IDEALX, <a class="indexterm" href="passdb.html#id379822">ldapsam</a></dt><dt>Identification, <a class="indexterm" href="ClientConfig.html#id365774">Domain Logon Configuration: Windows 9x/Me</a></dt><dt>identify, <a class="indexterm" href="idmapper.html#id391918">ADS Domains</a></dt><dt>identity, <a class="indexterm" href="idmapper.html#id390321">Standalone Samba Server</a></dt><dt>identity information, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></dt><dt>identity management, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a>, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a></dt><dd><dl><dt>centralized, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></dt></dl></dd><dt>identity resolution, <a class="indexterm" href="winbind.html#id434945">Features and Benefits</a></dt><dt>IDMAP, <a class="indexterm" href="ChangeNotes.html#id366943">Group Mapping Changes in Samba-3.0.23</a>, <a class="indexterm" href="groupmapping.html#id382442">Features and Benefits</a>, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a>, <a class="indexterm" href="idmapper.html#id390321">Standalone Samba Server</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id392312">IDMAP_RID with Winbind</a></dt><dt>idmap, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a></dt><dt>idmap backend, <a class="indexterm" href="samba-bdc.html#id356586">Example Configuration</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="winbind.html#id434945">Features and Benefits</a>, <a class="indexterm" href="upgrading-to-3.0.html#id458672">IdMap LDAP Support</a></dt><dt>IDMAP backend, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a></dt><dt>idmap gid, <a class="indexterm" href="passdb.html#id375648">Mapping User Identifiers between MS Windows and UNIX</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id392312">IDMAP_RID with Winbind</a>, <a class="indexterm" href="winbind.html#id434945">Features and Benefits</a></dt><dt>idmap GID, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a></dt><dt>IDMAP infrastructure, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a></dt><dt>idmap uid, <a class="indexterm" href="passdb.html#id375648">Mapping User Identifiers between MS Windows and UNIX</a>, <a class="indexterm" href="groupmapping.html#id382442">Features and Benefits</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id392312">IDMAP_RID with Winbind</a>, <a class="indexterm" href="winbind.html#id434945">Features and Benefits</a></dt><dt>idmap UID, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a></dt><dt>idmap_ad, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a></dt><dt>idmap_ldap module, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a></dt><dt>idmap_rid, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id392312">IDMAP_RID with Winbind</a></dt><dt>IETF, <a class="indexterm" href="CUPS-printing.html#id416476">Overview</a></dt><dt>ifconfig, <a class="indexterm" href="compiling.html#id467095">Starting from inetd.conf</a>, <a class="indexterm" href="speed.html#id469477">Samba Performance Problem Due to Changing Linux Kernel</a></dt><dt>ignore connection, <a class="indexterm" href="securing-samba.html#id403151">Using Interface Protection</a></dt><dt>imagetoraster, <a class="indexterm" href="CUPS-printing.html#id420757">imagetops and imagetoraster</a></dt><dt>immutible, <a class="indexterm" href="AccessControls.html#id396956">Protecting Directories and Files from Deletion</a></dt><dt>impersonate, <a class="indexterm" href="passdb.html#id381244">Security and sambaSamAccount</a></dt><dt>implementing oplocks, <a class="indexterm" href="locking.html#id401603">Advanced Samba Oplocks Parameters</a></dt><dt>Implicit Classes, <a class="indexterm" href="CUPS-printing.html#id432090">Print Queue Called &#8220;lp&#8221; Mishandles Print Jobs</a></dt><dt>important announcements, <a class="indexterm" href="securing-samba.html#id403662">Upgrading Samba</a></dt><dt>Imprints, <a class="indexterm" href="classicalprinting.html#id415598">The Imprints Toolset</a></dt><dt>imprints, <a class="indexterm" href="CUPS-printing.html#id418073">Driver Upload Methods</a></dt><dt>include, <a class="indexterm" href="cfgsmarts.html">Advanced Configuration Techniques</a></dt><dt>independent, <a class="indexterm" href="StandAloneServer.html#id362296">Background</a>, <a class="indexterm" href="cfgsmarts.html#id453922">Multiple Server Hosting</a></dt><dt>individual domain user, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>individual section, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>inetd, <a class="indexterm" href="SWAT.html#id460847">Validate SWAT Installation</a>, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a>, <a class="indexterm" href="compiling.html#startingSamba">Starting the smbd nmbd and winbindd</a>, <a class="indexterm" href="compiling.html#id467095">Starting from inetd.conf</a></dt><dt>inetd.conf, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>inetorgperson.schema, <a class="indexterm" href="passdb.html#id380315">OpenLDAP Configuration</a></dt><dt>inf file, <a class="indexterm" href="classicalprinting.html#id411938">Identifying Driver Files</a></dt><dt>infrastructure, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a>, <a class="indexterm" href="winbind.html#id435485">Target Uses</a></dt><dt>inheritance, <a class="indexterm" href="AccessControls.html#id396956">Protecting Directories and Files from Deletion</a></dt><dt>inherits rights, <a class="indexterm" href="groupmapping.html#id382834">Discussion</a></dt><dt>initdb.ldif, <a class="indexterm" href="FastStart.html#id347201">The Primary Domain Controller</a></dt><dt>initGroups.sh, <a class="indexterm" href="FastStart.html#id346350">Example: Engineering Office</a>, <a class="indexterm" href="groupmapping.html#id384798">Script to Configure Group Mapping</a>, <a class="indexterm" href="NT4Migration.html#id459730">Steps in Migration Process</a></dt><dt>inktype, <a class="indexterm" href="CUPS-printing.html#id421357">The Role of cupsomatic/foomatic</a></dt><dt>insecure, <a class="indexterm" href="StandAloneServer.html#id362210">Features and Benefits</a>, <a class="indexterm" href="securing-samba.html#id402949">Using Host-Based Protection</a></dt><dt>inspire simplicity, <a class="indexterm" href="StandAloneServer.html#id362473">Example Configuration</a></dt><dt>inspired structure, <a class="indexterm" href="SambaHA.html#id452277">Technical Discussion</a></dt><dt>install drivers, <a class="indexterm" href="classicalprinting.html#id406449">Features and Benefits</a>, <a class="indexterm" href="classicalprinting.html#id410712">Point'n'Print Client Drivers on Samba Servers</a></dt><dt>interactive help, <a class="indexterm" href="ch46.html#id470724">Free Support</a></dt><dt>interdomain</dt><dd><dl><dt>trust</dt><dd><dl><dt>account, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a></dt></dl></dd><dt>trustrs, <a class="indexterm" href="ServerType.html#id348242">Features and Benefits</a></dt></dl></dd><dt>interdomain connection, <a class="indexterm" href="InterdomainTrusts.html#id405306">Samba as the Trusting Domain</a></dt><dt>interdomain trust, <a class="indexterm" href="InterdomainTrusts.html#id404991">Configuring Samba NT-Style Domain Trusts</a>, <a class="indexterm" href="InterdomainTrusts.html#id405489">NT4-Style Domain Trusts with Windows 2000</a></dt><dt>interdomain trust accounts, <a class="indexterm" href="passdb.html">Account Information Databases</a>, <a class="indexterm" href="passdb.html#id376419">Caution Regarding LDAP and Samba</a></dt><dt>interdomain trusts, <a class="indexterm" href="NetCommand.html#id385377">Overview</a>, <a class="indexterm" href="InterdomainTrusts.html#id404270">Features and Benefits</a></dt><dt>Interdomain Trusts, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a></dt><dd><dl><dt>Completing, <a class="indexterm" href="InterdomainTrusts.html#id404714">Completing an NT4 Domain Trust</a></dt><dt>creating, <a class="indexterm" href="InterdomainTrusts.html#id404590">Native MS Windows NT4 Trusts Configuration</a></dt><dt>Facilities, <a class="indexterm" href="InterdomainTrusts.html#id404795">Interdomain Trust Facilities</a></dt></dl></dd><dt>interface, <a class="indexterm" href="ClientConfig.html#id363638">MS Windows XP Professional</a></dt><dt>interface scripts, <a class="indexterm" href="passdb.html#id377980">User Account Management</a></dt><dt>interface-based exclusion, <a class="indexterm" href="securing-samba.html#id402802">Features and Benefits</a></dt><dt>interfaces, <a class="indexterm" href="securing-samba.html#id403151">Using Interface Protection</a>, <a class="indexterm" href="cfgsmarts.html#id453922">Multiple Server Hosting</a></dt><dt>intermediate information, <a class="indexterm" href="passdb.html#id376419">Caution Regarding LDAP and Samba</a></dt><dt>intermediate tools, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a></dt><dt>internal ordering, <a class="indexterm" href="SWAT.html#id460718">Features and Benefits</a></dt><dt>internationalization support, <a class="indexterm" href="SWAT.html#id460830">Guidelines and Technical Tips</a></dt><dt>Internet, <a class="indexterm" href="securing-samba.html#id402949">Using Host-Based Protection</a>, <a class="indexterm" href="securing-samba.html#id403151">Using Interface Protection</a></dt><dt>Internet Engineering Task Force (see IETF)</dt><dt>Internet Printing Protocol (see IPP)</dt><dt>Internet Protocol TCP/IP, <a class="indexterm" href="ClientConfig.html#id364780">MS Windows Me</a></dt><dt>Internetworking Packet Exchange (see IPX)</dt><dt>internetworking super daemon, <a class="indexterm" href="SWAT.html#id460718">Features and Benefits</a></dt><dt>interoperability, <a class="indexterm" href="ServerType.html#id348242">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a>, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a>, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a>, <a class="indexterm" href="winbind.html#id434945">Features and Benefits</a>, <a class="indexterm" href="SambaHA.html#id452850">Restrictive Constraints on Distributed File Systems</a></dt><dt>intolerance, <a class="indexterm" href="SambaHA.html#id452170">Features and Benefits</a></dt><dt>invalid shell, <a class="indexterm" href="ServerType.html#id349156">Example Configuration</a></dt><dt>invalid users, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>IP address, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>IP address automatically, <a class="indexterm" href="ClientConfig.html#id363638">MS Windows XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id364254">MS Windows 2000</a></dt><dt>IP addresses, <a class="indexterm" href="integrate-ms-networks.html#id448831">/etc/hosts</a></dt><dt>IP aliases, <a class="indexterm" href="ClientConfig.html#id363638">MS Windows XP Professional</a></dt><dt>IPC$, <a class="indexterm" href="samba-pdc.html#id353296">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="NetworkBrowsing.html#id372438">Problem Resolution</a>, <a class="indexterm" href="securing-samba.html#id403481">Using IPC$ Share-Based Denials </a></dt><dt>IPC$ connections, <a class="indexterm" href="SambaHA.html#id452542">The Front-End Challenge</a></dt><dt>ipchains, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>ipconfig, <a class="indexterm" href="NetworkBrowsing.html#id368472">TCP/IP without NetBIOS</a></dt><dt>iPlanet, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a></dt><dt>IPP, <a class="indexterm" href="CUPS-printing.html#id425560">Understanding cupsaddsmb</a></dt><dt>IPP client, <a class="indexterm" href="CUPS-printing.html#id431529">Administrator Cannot Install Printers for All Local Users</a></dt><dt>iptables, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>IPX, <a class="indexterm" href="NetworkBrowsing.html#id371853">Windows Networking Protocols</a></dt><dt>IRC, <a class="indexterm" href="ch46.html#id470724">Free Support</a></dt><dt>IRIX, <a class="indexterm" href="VFS.html#id432421">Discussion</a>, <a class="indexterm" href="unicode.html#id450646">Basic Parameter Setting</a></dt><dt>ISC</dt><dd><dl><dt>DHCP, <a class="indexterm" href="DNSDHCP.html#id471060">Features and Benefits</a></dt><dt>DNS, <a class="indexterm" href="DNSDHCP.html#id471060">Features and Benefits</a></dt></dl></dd><dt>ISC DHCP server, <a class="indexterm" href="ClientConfig.html#id363638">MS Windows XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id364780">MS Windows Me</a></dt><dt>isolated workgroup, <a class="indexterm" href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a></dt><dt>IXFR, <a class="indexterm" href="integrate-ms-networks.html#id448641">Background Information</a></dt></dl></div><div class="indexdiv"><h3>J</h3><dl><dt>Japanese, <a class="indexterm" href="unicode.html#id450526">Japanese Charsets</a>, <a class="indexterm" href="SWAT.html#id461566">Enabling SWAT Internationalization Support</a></dt><dt>Japanese locale, <a class="indexterm" href="unicode.html#id450646">Basic Parameter Setting</a></dt><dt>Japanese UNIX, <a class="indexterm" href="unicode.html#id450646">Basic Parameter Setting</a></dt><dt>Java, <a class="indexterm" href="AdvancedNetworkManagement.html#id439596">Remote Management with ThinLinc</a>, <a class="indexterm" href="unicode.html#id450646">Basic Parameter Setting</a></dt><dt>JIS X 0208, <a class="indexterm" href="unicode.html#id450526">Japanese Charsets</a></dt><dt>join, <a class="indexterm" href="idmapper.html#id391641">NT4-Style Domains (Includes Samba Domains)</a></dt><dt>join client, <a class="indexterm" href="rights.html#id394618">Description of Privileges</a></dt><dt>join domain, <a class="indexterm" href="samba-pdc.html#id353978">Joining Domain Fails Because of Existing Machine Account</a></dt><dt>join the ADS domain, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></dt><dt>join the domain, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a>, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></dt><dt>join the machine, <a class="indexterm" href="domain-member.html#id359063">Windows NT4 Client</a></dt><dt>joined client, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>Joined domain, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></dt><dt>joining domain, <a class="indexterm" href="winbind.html#id437279">Join the Samba Server to the PDC Domain</a></dt><dt>joining the domain, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></dt><dt>JPEG, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></dt></dl></div><div class="indexdiv"><h3>K</h3><dl><dt>KB 129202, <a class="indexterm" href="locking.html#id402548">Additional Reading</a></dt><dt>KB 224992, <a class="indexterm" href="locking.html#id402548">Additional Reading</a></dt><dt>KB 296264, <a class="indexterm" href="locking.html#id402548">Additional Reading</a></dt><dt>KB 811492, <a class="indexterm" href="locking.html#id402519">Long Delays Deleting Files over Network with XP SP1</a></dt><dt>KB 812937, <a class="indexterm" href="locking.html#id402497">Problems Saving Files in MS Office on Windows XP</a></dt><dt>KDC, <a class="indexterm" href="domain-member.html#ads-member">Samba ADS Domain Membership</a>, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a></dt><dt>KDE, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a></dt><dt>KDE konqueror, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a></dt><dt>KDE session, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a></dt><dt>KDEPrint, <a class="indexterm" href="CUPS-printing.html#id416476">Overview</a></dt><dt>kerberos, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a>, <a class="indexterm" href="idmapper.html#id391918">ADS Domains</a></dt><dt>Kerberos, <a class="indexterm" href="domain-member.html#ads-member">Samba ADS Domain Membership</a>, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a>, <a class="indexterm" href="domain-member.html#id361222">Possible Errors</a>, <a class="indexterm" href="domain-member.html#ads-test-smbclient">Testing with smbclient</a>, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a>, <a class="indexterm" href="winbind.html#id435761">Microsoft Active Directory Services</a>, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a>, <a class="indexterm" href="upgrading-to-3.0.html#id457959">Passdb Backends and Authentication</a></dt><dd><dl><dt>/etc/krb5.conf, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a></dt></dl></dd><dt>Kerberos authentication, <a class="indexterm" href="domain-member.html#ads-test-smbclient">Testing with smbclient</a></dt><dt>killall, <a class="indexterm" href="compiling.html#id467095">Starting from inetd.conf</a></dt><dt>kinit, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a>, <a class="indexterm" href="domain-member.html#ads-create-machine-account">Create the Computer Account</a>, <a class="indexterm" href="domain-member.html#id361222">Possible Errors</a></dt><dt>kixstart, <a class="indexterm" href="NT4Migration.html#id459585">Logon Scripts</a></dt><dt>kprinter, <a class="indexterm" href="CUPS-printing.html#id429175">Foomatic Database-Generated PPDs</a></dt><dt>KRB, <a class="indexterm" href="idmapper.html#id391918">ADS Domains</a></dt><dt>KRB5, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a></dt><dt>krb5.conf, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a></dt></dl></div><div class="indexdiv"><h3>L</h3><dl><dt>LAN, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id439596">Remote Management with ThinLinc</a>, <a class="indexterm" href="SambaHA.html#id453168">High-Availability Server Products</a>, <a class="indexterm" href="problems.html#id464214">Diagnostics Tools</a></dt><dt>LanMan, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="samba-bdc.html#id354803">Essential Background Information</a>, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="passdb.html#passdbtech">Technical Information</a>, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>LanMan logon service, <a class="indexterm" href="samba-pdc.html#id351870">Preparing for Domain Control</a></dt><dt>LanMan passwords, <a class="indexterm" href="passdb.html#id374464">Backward Compatibility Account Storage Systems</a></dt><dt>LanManager, <a class="indexterm" href="ServerType.html#id348658">User Level Security</a>, <a class="indexterm" href="ClientConfig.html#id365774">Domain Logon Configuration: Windows 9x/Me</a></dt><dt>LanManager-compatible, <a class="indexterm" href="NetworkBrowsing.html#id371035">WINS: The Windows Internetworking Name Server</a></dt><dt>LanManger password, <a class="indexterm" href="passdb.html#id378089">Listing User and Machine Accounts</a></dt><dt>laptops, <a class="indexterm" href="Backup.html#id451712">BackupPC</a></dt><dt>large directory, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>large domain, <a class="indexterm" href="idmapper.html#id392312">IDMAP_RID with Winbind</a></dt><dt>large numbers of files, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>large organizations, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a></dt><dt>last change time, <a class="indexterm" href="passdb.html#id378089">Listing User and Machine Accounts</a></dt><dt>latency, <a class="indexterm" href="locking.html#id401395">Slow and/or Unreliable Networks</a></dt><dt>laws, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a></dt><dt>LCT (see last change time)</dt><dt>LDAP, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a>, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a>, <a class="indexterm" href="samba-bdc.html#id355488">LDAP Configuration Notes</a>, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a>, <a class="indexterm" href="samba-bdc.html#id357154">How Do I Replicate the smbpasswd File?</a>, <a class="indexterm" href="samba-bdc.html#id357252">Can I Do This All with LDAP?</a>, <a class="indexterm" href="domain-member.html#id357484">Features and Benefits</a>, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a>, <a class="indexterm" href="domain-member.html#id361572">Sharing User ID Mappings between Samba Domain Members</a>, <a class="indexterm" href="passdb.html">Account Information Databases</a>, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a>, <a class="indexterm" href="passdb.html#id375167">Important Notes About Security</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a>, <a class="indexterm" href="passdb.html#id376419">Caution Regarding LDAP and Samba</a>, <a class="indexterm" href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="passdb.html#id379822">ldapsam</a>, <a class="indexterm" href="passdb.html#id380053">Supported LDAP Servers</a>, <a class="indexterm" href="passdb.html#id380104">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="passdb.html#id380567">Initialize the LDAP Database</a>, <a class="indexterm" href="passdb.html#id380734">Configuring Samba</a>, <a class="indexterm" href="groupmapping.html#id383950">Default Users, Groups, and Relative Identifiers</a>, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id391492">Backup Domain Controller</a>, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a>, <a class="indexterm" href="InterdomainTrusts.html#id404270">Features and Benefits</a>, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a>, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a>, <a class="indexterm" href="winbind.html#id435761">Microsoft Active Directory Services</a>, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a>, <a class="indexterm" href="upgrading-to-3.0.html#id457959">Passdb Backends and Authentication</a>, <a class="indexterm" href="NT4Migration.html#id459247">Domain Layout</a></dt><dd><dl><dt>directories, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a></dt><dt>master, <a class="indexterm" href="samba-bdc.html#id355488">LDAP Configuration Notes</a></dt><dt>server, <a class="indexterm" href="samba-bdc.html#id355488">LDAP Configuration Notes</a></dt><dt>slave, <a class="indexterm" href="samba-bdc.html#id354424">Features and Benefits</a>, <a class="indexterm" href="samba-bdc.html#id355488">LDAP Configuration Notes</a></dt></dl></dd><dt>LDAP administration password, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a></dt><dt>LDAP administrative password, <a class="indexterm" href="domain-member.html#id361572">Sharing User ID Mappings between Samba Domain Members</a></dt><dt>LDAP backend, <a class="indexterm" href="StandAloneServer.html#id362296">Background</a>, <a class="indexterm" href="idmapper.html#id391274">Primary Domain Controller</a>, <a class="indexterm" href="upgrading-to-3.0.html#id456203">Quick Migration Guide</a></dt><dt>LDAP backends, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a></dt><dt>LDAP database, <a class="indexterm" href="samba-bdc.html#id356586">Example Configuration</a>, <a class="indexterm" href="passdb.html#id380567">Initialize the LDAP Database</a>, <a class="indexterm" href="NT4Migration.html#id459247">Domain Layout</a></dt><dt>LDAP deployment, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a></dt><dt>LDAP directory, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a>, <a class="indexterm" href="passdb.html#TOSHARG-acctflags">Account Flags Management</a>, <a class="indexterm" href="passdb.html#id379822">ldapsam</a>, <a class="indexterm" href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a></dt><dt>ldap group suffix, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a>, <a class="indexterm" href="upgrading-to-3.0.html#id458516">New Suffix for Searching</a></dt><dt>LDAP idmap Backend, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a></dt><dt>ldap idmap suffix, <a class="indexterm" href="domain-member.html#id361572">Sharing User ID Mappings between Samba Domain Members</a>, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a>, <a class="indexterm" href="upgrading-to-3.0.html#id458516">New Suffix for Searching</a></dt><dt>ldap machine suffix, <a class="indexterm" href="upgrading-to-3.0.html#id458516">New Suffix for Searching</a></dt><dt>LDAP queries, <a class="indexterm" href="upgrading-to-3.0.html#id458516">New Suffix for Searching</a></dt><dt>LDAP redirects, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a></dt><dt>LDAP schema, <a class="indexterm" href="ChangeNotes.html#id367059">LDAP Changes in Samba-3.0.23</a></dt><dt>LDAP server, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a></dt><dt>ldap suffix, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a>, <a class="indexterm" href="upgrading-to-3.0.html#id458516">New Suffix for Searching</a></dt><dt>ldap user suffix, <a class="indexterm" href="upgrading-to-3.0.html#id458516">New Suffix for Searching</a></dt><dt>LDAP-based, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a></dt><dt>LDAP., <a class="indexterm" href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a></dt><dt>LDAP/Kerberos, <a class="indexterm" href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a></dt><dt>LDAPS, <a class="indexterm" href="passdb.html#id381244">Security and sambaSamAccount</a></dt><dt>ldapsam, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a>, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="passdb.html">Account Information Databases</a>, <a class="indexterm" href="passdb.html#id379428">smbpasswd: Encrypted Password Database</a>, <a class="indexterm" href="passdb.html#id379822">ldapsam</a>, <a class="indexterm" href="passdb.html#id380053">Supported LDAP Servers</a>, <a class="indexterm" href="groupmapping.html#id383950">Default Users, Groups, and Relative Identifiers</a>, <a class="indexterm" href="idmapper.html#id391274">Primary Domain Controller</a>, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a>, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>ldapsam_compat, <a class="indexterm" href="passdb.html#id374464">Backward Compatibility Account Storage Systems</a>, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a></dt><dt>ldapsearch, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a></dt><dt>LDAPv3, <a class="indexterm" href="passdb.html#id381244">Security and sambaSamAccount</a></dt><dt>ldconfig, <a class="indexterm" href="winbind.html#id436613">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a></dt><dt>ldd, <a class="indexterm" href="CUPS-printing.html#id416695">Linking smbd with libcups.so</a></dt><dt>LDIF, <a class="indexterm" href="passdb.html#id380567">Initialize the LDAP Database</a>, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a></dt><dt>LDIF file, <a class="indexterm" href="passdb.html#id380567">Initialize the LDAP Database</a></dt><dt>legacy systems, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></dt><dt>legal UNIX system account name, <a class="indexterm" href="domain-member.html#id361872">Adding Machine to Domain Fails</a></dt><dt>Level1 Oplock, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>Level1 oplock, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>Level2 Oplock, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>LGPL, <a class="indexterm" href="passdb.html#id379822">ldapsam</a></dt><dt>libcups, <a class="indexterm" href="classicalprinting.html#id409575">Default UNIX System Printing Commands</a>, <a class="indexterm" href="CUPS-printing.html#id416695">Linking smbd with libcups.so</a></dt><dt>libcups.so, <a class="indexterm" href="CUPS-printing.html#id416695">Linking smbd with libcups.so</a></dt><dt>libcups.so.2, <a class="indexterm" href="CUPS-printing.html#id416695">Linking smbd with libcups.so</a></dt><dt>Liberty Alliance, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></dt><dt>libiconv, <a class="indexterm" href="unicode.html#id450646">Basic Parameter Setting</a></dt><dt>libnss_winbind, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="winbind.html#id436613">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a></dt><dt>libnss_winbind.so, <a class="indexterm" href="winbind.html#id435805">Name Service Switch</a>, <a class="indexterm" href="winbind.html#id436613">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a></dt><dt>libnss_wins.so, <a class="indexterm" href="integrate-ms-networks.html#id449073">/etc/nsswitch.conf</a></dt><dt>libraries, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a></dt><dt>licensing, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>limitations, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a></dt><dt>linewidth, <a class="indexterm" href="CUPS-printing.html#id418524">UNIX Printfile Conversion and GUI Basics</a></dt><dt>link loader configuration, <a class="indexterm" href="winbind.html#id436613">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a></dt><dt>Links</dt><dd><dl><dt>hard, <a class="indexterm" href="AccessControls.html#id396164">MS Windows NTFS Comparison with UNIX File Systems</a></dt><dt>soft, <a class="indexterm" href="AccessControls.html#id396164">MS Windows NTFS Comparison with UNIX File Systems</a></dt></dl></dd><dt>Linux, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id439596">Remote Management with ThinLinc</a>, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a>, <a class="indexterm" href="unicode.html#id450646">Basic Parameter Setting</a></dt><dt>Linux High Availability project, <a class="indexterm" href="SambaHA.html#id453168">High-Availability Server Products</a></dt><dt>Linux LVM, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>Linux LVM partition, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>LinuxKongress2002, <a class="indexterm" href="CUPS-printing.html#id428901">The Grand Unification Achieved</a></dt><dt>Linuxprinting.org, <a class="indexterm" href="CUPS-printing.html#id421357">The Role of cupsomatic/foomatic</a>, <a class="indexterm" href="CUPS-printing.html#id428409">CUPS Print Drivers from Linuxprinting.org</a>, <a class="indexterm" href="CUPS-printing.html#id429010">Driver Development Outside</a></dt><dt>list of domain controllers, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></dt><dt>listen for connections, <a class="indexterm" href="securing-samba.html#id403151">Using Interface Protection</a></dt><dt>listen own socket, <a class="indexterm" href="cfgsmarts.html#id453922">Multiple Server Hosting</a></dt><dt>LLC, <a class="indexterm" href="integrate-ms-networks.html">Integrating MS Windows Networks with Samba</a></dt><dt>LM/NT password hashes, <a class="indexterm" href="passdb.html#id379428">smbpasswd: Encrypted Password Database</a>, <a class="indexterm" href="passdb.html#id381244">Security and sambaSamAccount</a></dt><dt>LMB, <a class="indexterm" href="samba-pdc.html#id351870">Preparing for Domain Control</a>, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a>, <a class="indexterm" href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id369843">Domain Browsing Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a>, <a class="indexterm" href="NetworkBrowsing.html#id370405">Making Samba the Domain Master</a>, <a class="indexterm" href="NetworkBrowsing.html#id370948">Use of the Remote Browse Sync Parameter</a>, <a class="indexterm" href="NetworkBrowsing.html#id371035">WINS: The Windows Internetworking Name Server</a>, <a class="indexterm" href="NetworkBrowsing.html#id371853">Windows Networking Protocols</a>, <a class="indexterm" href="NetworkBrowsing.html#id372256">Browsing Support in Samba</a>, <a class="indexterm" href="NetworkBrowsing.html#id372827">Behavior of Cross-Subnet Browsing</a> (see Local Master Browser)</dt><dt>LMHOSTS, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a>, <a class="indexterm" href="integrate-ms-networks.html#id449659">The LMHOSTS File</a></dt><dt>lmhosts, <a class="indexterm" href="NetworkBrowsing.html#id371035">WINS: The Windows Internetworking Name Server</a></dt><dt>load balancing, <a class="indexterm" href="msdfs.html#id405843">Features and Benefits</a></dt><dt>loaded modules, <a class="indexterm" href="VFS.html#id432386">Features and Benefits</a></dt><dt>loading printer drivers, <a class="indexterm" href="classicalprinting.html#id409231">Any [my_printer_name] Section</a></dt><dt>local</dt><dd><dl><dt>groups, <a class="indexterm" href="NetCommand.html#id385728">UNIX and Windows Group Management</a></dt><dt>master</dt><dd><dl><dt>browser, <a class="indexterm" href="samba-pdc.html#id351870">Preparing for Domain Control</a></dt></dl></dd></dl></dd><dt>local access permissions, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>local accounts, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a></dt><dt>local administrative privileges, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>Local Area Connection, <a class="indexterm" href="ClientConfig.html#id363638">MS Windows XP Professional</a></dt><dt>Local Area Connection Properties, <a class="indexterm" href="ClientConfig.html#id364254">MS Windows 2000</a></dt><dt>local authentication, <a class="indexterm" href="StandAloneServer.html#id362296">Background</a></dt><dt>local authentication database, <a class="indexterm" href="StandAloneServer.html#id362296">Background</a></dt><dt>local cache, <a class="indexterm" href="integrate-ms-networks.html#id449576">The NetBIOS Name Cache</a></dt><dt>local disk, <a class="indexterm" href="Backup.html#id451712">BackupPC</a></dt><dt>local domain, <a class="indexterm" href="winbind.html#id435524">Handling of Foreign SIDs</a></dt><dt>local group, <a class="indexterm" href="rights.html#id395514">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>local groups, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="winbind.html#id435805">Name Service Switch</a></dt><dt>Local Machine Trust Account, <a class="indexterm" href="samba-bdc.html#id357055">Machine Accounts Keep Expiring</a></dt><dt>Local Master Browser, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a>, <a class="indexterm" href="NetworkBrowsing.html#id369843">Domain Browsing Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#id370820">Use of the Remote Announce Parameter</a></dt><dt>local master browser (see LMB)</dt><dt>local names, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a></dt><dt>local print driver, <a class="indexterm" href="classicalprinting.html#id411183">[print$] Stanza Parameters</a></dt><dt>local profile, <a class="indexterm" href="ProfileMgmt.html#id442177">Disabling Roaming Profile Support</a>, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a></dt><dt>local profiles, <a class="indexterm" href="ProfileMgmt.html#id441723">Features and Benefits</a></dt><dt>local registry values, <a class="indexterm" href="PolicyMgmt.html#id440699">MS Windows 200x/XP Professional Policies</a></dt><dt>Local security policies, <a class="indexterm" href="CUPS-printing.html#id431498">Windows 200x/XP Local Security Policies</a></dt><dt>local smbpasswd file, <a class="indexterm" href="StandAloneServer.html#id362296">Background</a></dt><dt>local spool area, <a class="indexterm" href="classicalprinting.html#id406652">Technical Introduction</a></dt><dt>local subnet, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></dt><dt>local system printing, <a class="indexterm" href="classicalprinting.html#id406652">Technical Introduction</a></dt><dt>local UNIX groups, <a class="indexterm" href="NetCommand.html#id385377">Overview</a></dt><dt>local user, <a class="indexterm" href="idmapper.html#id390321">Standalone Samba Server</a>, <a class="indexterm" href="winbind.html#id438150">Restarting</a></dt><dt>local user account, <a class="indexterm" href="passdb.html#id375648">Mapping User Identifiers between MS Windows and UNIX</a></dt><dt>local users, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="winbind.html#id435805">Name Service Switch</a></dt><dt>locale, <a class="indexterm" href="SWAT.html#id461566">Enabling SWAT Internationalization Support</a></dt><dt>localhost, <a class="indexterm" href="securing-samba.html#id402949">Using Host-Based Protection</a></dt><dt>locally known UID, <a class="indexterm" href="NetCommand.html#id386085">Mapping Windows Groups to UNIX Groups</a></dt><dt>locate domain controller, <a class="indexterm" href="samba-bdc.html#id355957">How Does a Workstation find its Domain Controller?</a></dt><dt>Lock caching, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>lock directory, <a class="indexterm" href="cfgsmarts.html#id453922">Multiple Server Hosting</a></dt><dt>lock password, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dt>lock the account, <a class="indexterm" href="passdb.html#id378456">Changing User Accounts</a></dt><dt>locking, <a class="indexterm" href="locking.html">File and Record Locking</a>, <a class="indexterm" href="locking.html#id400544">Features and Benefits</a>, <a class="indexterm" href="locking.html#id400630">Discussion</a>, <a class="indexterm" href="SambaHA.html#id452727">The Distributed File System Challenge</a></dt><dt>locking protocol, <a class="indexterm" href="locking.html#id400544">Features and Benefits</a></dt><dt>locking semantics, <a class="indexterm" href="locking.html#id400544">Features and Benefits</a>, <a class="indexterm" href="locking.html#id400630">Discussion</a></dt><dt>locking.tdb, <a class="indexterm" href="CUPS-printing.html#id427930">The Printing *.tdb Files</a></dt><dd><dl><dt>(see also TDB)</dt></dl></dd><dt>lockout, <a class="indexterm" href="ServerType.html#id349704">Example Configuration</a></dt><dt>log files, <a class="indexterm" href="diagnosis.html#id462289">Assumptions</a></dt><dd><dl><dt>monitoring, <a class="indexterm" href="diagnosis.html#id462289">Assumptions</a></dt></dl></dd><dt>log level, <a class="indexterm" href="idmapper.html#id391918">ADS Domains</a>, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a>, <a class="indexterm" href="problems.html#id464263">Debugging with Samba Itself</a>, <a class="indexterm" href="bugreport.html#dbglvl">Debug Levels</a></dt><dt>log.nmbd, <a class="indexterm" href="NetworkBrowsing.html#id372438">Problem Resolution</a>, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>logging, <a class="indexterm" href="VFS.html#id433192">Configuration of Auditing</a>, <a class="indexterm" href="bugreport.html#id465615">Debugging-Specific Operations</a></dt><dt>logical directories, <a class="indexterm" href="msdfs.html#id405843">Features and Benefits</a></dt><dt>Logical Link Control (see LLC)</dt><dt>logical volume, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>Logical Volume Manager (see LVM)</dt><dt>Login, <a class="indexterm" href="passdb.html#id375587">Advantages of Non-Encrypted Passwords</a></dt><dt>login, <a class="indexterm" href="winbind.html#id438353">Linux/FreeBSD-Specific PAM Configuration</a>, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>login id, <a class="indexterm" href="passdb.html#id378089">Listing User and Machine Accounts</a></dt><dt>login name, <a class="indexterm" href="install.html#id342835">Example Configuration</a></dt><dt>login shells, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a></dt><dt>LoginID, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a></dt><dt>logon, <a class="indexterm" href="ServerType.html#id348971">Domain Security Mode (User-Level Security)</a></dt><dt>logon authentication, <a class="indexterm" href="samba-bdc.html#id356060">NetBIOS Over TCP/IP Disabled</a></dt><dt>logon drive, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a></dt><dt>logon home, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a>, <a class="indexterm" href="ProfileMgmt.html#id441955">Windows 9x/Me User Profiles</a></dt><dt>logon name, <a class="indexterm" href="NetCommand.html#id387406">User Mapping</a></dt><dt>logon path, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a></dt><dt>logon processing, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a></dt><dt>logon requests, <a class="indexterm" href="samba-bdc.html#id354803">Essential Background Information</a>, <a class="indexterm" href="samba-bdc.html#id356009">NetBIOS Over TCP/IP Enabled</a>, <a class="indexterm" href="samba-bdc.html#id357103">Can Samba Be a Backup Domain Controller to an NT4 PDC?</a></dt><dt>logon script, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a>, <a class="indexterm" href="domain-member.html#id357484">Features and Benefits</a></dt><dt>Logon Scripts, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>Logon scripts, <a class="indexterm" href="NT4Migration.html#id459585">Logon Scripts</a></dt><dt>logon server, <a class="indexterm" href="samba-pdc.html#id353296">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="ProfileMgmt.html#id444459">MS Windows NT4 Workstation</a></dt><dt>logons, <a class="indexterm" href="ProfileMgmt.html#id441824">NT4/200x User Profiles</a></dt><dt>lookups, <a class="indexterm" href="passdb.html#id379428">smbpasswd: Encrypted Password Database</a></dt><dt>loopback adapter, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>loopback interface, <a class="indexterm" href="securing-samba.html#id403151">Using Interface Protection</a>, <a class="indexterm" href="Portability.html#id467920">Red Hat Linux</a></dt><dt>lower-case, <a class="indexterm" href="ServerType.html#id348658">User Level Security</a></dt><dt>lowercase filenames, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>lp, <a class="indexterm" href="classicalprinting.html#id407208">Verifying Configuration with testparm</a>, <a class="indexterm" href="CUPS-printing.html#id432090">Print Queue Called &#8220;lp&#8221; Mishandles Print Jobs</a></dt><dt>lpadmin, <a class="indexterm" href="CUPS-printing.html#id421644">&#8220;Raw&#8221; Printing</a>, <a class="indexterm" href="CUPS-printing.html#id423093">Printing with Interface Scripts</a>, <a class="indexterm" href="CUPS-printing.html#id428409">CUPS Print Drivers from Linuxprinting.org</a>, <a class="indexterm" href="CUPS-printing.html#id429735">Setting Up Quotas</a></dt><dt>LPD, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>lpinfo, <a class="indexterm" href="CUPS-printing.html#id421049">CUPS Backends</a></dt><dt>lpq cache time, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>lpq command, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>LPRNG, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>lpstat, <a class="indexterm" href="install.html#id341822">Configuration File Syntax</a>, <a class="indexterm" href="CUPS-printing.html#id427799">Troubleshooting Revisited</a></dt><dt>LPT1:, <a class="indexterm" href="classicalprinting.html#id415466">Samba and Printer Ports</a></dt><dt>LsaEnumTrustedDomains, <a class="indexterm" href="problems.html#id464263">Debugging with Samba Itself</a></dt><dt>LTSP, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a></dt><dt>Lustre, <a class="indexterm" href="SambaHA.html#id452727">The Distributed File System Challenge</a></dt><dt>lvcreate, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>LVM, <a class="indexterm" href="VFS.html#id433767">shadow_copy</a>, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>LVM snapshots, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>LVM volume, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>lvm10 package, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt></dl></div><div class="indexdiv"><h3>M</h3><dl><dt>m-node, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a></dt><dt>MAC address, <a class="indexterm" href="integrate-ms-networks.html#id448831">/etc/hosts</a></dt><dt>MAC Addresses, <a class="indexterm" href="integrate-ms-networks.html#id448831">/etc/hosts</a></dt><dt>Mac OS X , <a class="indexterm" href="unicode.html#id450646">Basic Parameter Setting</a></dt><dt>machine, <a class="indexterm" href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a></dt><dd><dl><dt>account, <a class="indexterm" href="ServerType.html#id348971">Domain Security Mode (User-Level Security)</a></dt></dl></dd><dt>machine account, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a>, <a class="indexterm" href="samba-bdc.html#id355488">LDAP Configuration Notes</a>, <a class="indexterm" href="passdb.html#TOSHARG-acctflags">Account Flags Management</a>, <a class="indexterm" href="passdb.html#id379677">tdbsam</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>machine account password</dt><dd><dl><dt>change protocol, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></dt></dl></dd><dt>machine accounts, <a class="indexterm" href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="passdb.html#acctmgmttools">Account Management Tools</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>machine accounts database, <a class="indexterm" href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a></dt><dt>machine authentication, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a></dt><dt>machine name, <a class="indexterm" href="integrate-ms-networks.html#id448831">/etc/hosts</a>, <a class="indexterm" href="integrate-ms-networks.html#id449183">Name Resolution as Used within MS Windows Networking</a></dt><dt>Machine Policy Objects, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>machine SID, <a class="indexterm" href="NetCommand.html#id388358">Managing Security Identifiers (SIDS)</a></dt><dt>machine trust account, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id351870">Preparing for Domain Control</a>, <a class="indexterm" href="samba-pdc.html#id353296">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="domain-member.html">Domain Membership</a>, <a class="indexterm" href="domain-member.html#id358911">Windows 200x/XP Professional Client</a>, <a class="indexterm" href="domain-member.html#ads-create-machine-account">Create the Computer Account</a>, <a class="indexterm" href="domain-member.html#id361802">Cannot Add Machine Back to Domain</a></dt><dd><dl><dt>create privilege, <a class="indexterm" href="domain-member.html#id358911">Windows 200x/XP Professional Client</a></dt><dt>creation, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>password, <a class="indexterm" href="samba-pdc.html#id351870">Preparing for Domain Control</a>, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt></dl></dd><dt>Machine Trust Account, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id359063">Windows NT4 Client</a></dt><dd><dl><dt>creation, <a class="indexterm" href="domain-member.html#id358802">On-the-Fly Creation of Machine Trust Accounts</a></dt><dt>password, <a class="indexterm" href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a></dt><dt>UNIX account, <a class="indexterm" href="domain-member.html#id358802">On-the-Fly Creation of Machine Trust Accounts</a></dt></dl></dd><dt>Machine Trust Accounts, <a class="indexterm" href="samba-bdc.html#id357055">Machine Accounts Keep Expiring</a>, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dd><dl><dt>creating, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt></dl></dd><dt>machine trust accounts, <a class="indexterm" href="samba-bdc.html#id357154">How Do I Replicate the smbpasswd File?</a>, <a class="indexterm" href="domain-member.html#id358537">Managing Domain Machine Accounts using NT4 Server Manager</a>, <a class="indexterm" href="domain-member.html#id361768">Common Errors</a>, <a class="indexterm" href="passdb.html">Account Information Databases</a>, <a class="indexterm" href="passdb.html#id376419">Caution Regarding LDAP and Samba</a></dt><dt>machine_name, <a class="indexterm" href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a></dt><dt>machine_nickname, <a class="indexterm" href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a></dt><dt>Macintosh, <a class="indexterm" href="unicode.html#id450646">Basic Parameter Setting</a></dt><dt>macros, <a class="indexterm" href="classicalprinting.html#id410090">Custom Print Commands</a></dt><dt>mail, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a></dt><dt>mailing list, <a class="indexterm" href="ch46.html#id470724">Free Support</a></dt><dt>mailing lists, <a class="indexterm" href="ch46.html#id470724">Free Support</a></dt><dt>maintaining ids, <a class="indexterm" href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a></dt><dt>major changes, <a class="indexterm" href="upgrading-to-3.0.html#id457510">New Functionality</a></dt><dt>make, <a class="indexterm" href="integrate-ms-networks.html#id449073">/etc/nsswitch.conf</a>, <a class="indexterm" href="compiling.html#id466623">Building the Binaries</a></dt><dt>man, <a class="indexterm" href="SWAT.html#id460718">Features and Benefits</a></dt><dt>man page, <a class="indexterm" href="winbind.html#id437089">Configure smb.conf</a></dt><dt>man pages, <a class="indexterm" href="NetCommand.html#id385377">Overview</a></dt><dt>man-in-the-middle, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>manage accounts, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a></dt><dt>manage drivers, <a class="indexterm" href="classicalprinting.html#id406449">Features and Benefits</a></dt><dt>manage groups, <a class="indexterm" href="NetCommand.html#id387484">Administering User Rights and Privileges</a></dt><dt>manage printers, <a class="indexterm" href="NetCommand.html#id387484">Administering User Rights and Privileges</a></dt><dt>manage privileges, <a class="indexterm" href="rights.html#id394039">Rights Management Capabilities</a></dt><dt>manage roaming profiles, <a class="indexterm" href="ProfileMgmt.html#id441723">Features and Benefits</a></dt><dt>manage share permissions, <a class="indexterm" href="AccessControls.html#id398322">Windows NT4 Workstation/Server</a></dt><dt>manage share-level ACL, <a class="indexterm" href="groupmapping.html#id383838">Applicable Only to Versions Earlier than 3.0.11</a></dt><dt>manage shares, <a class="indexterm" href="NetCommand.html#id387484">Administering User Rights and Privileges</a></dt><dt>manage users, <a class="indexterm" href="NetCommand.html#id387484">Administering User Rights and Privileges</a></dt><dt>manageability, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>Manageability, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>managed by humans, <a class="indexterm" href="SambaHA.html#id452170">Features and Benefits</a></dt><dt>management bottleneck, <a class="indexterm" href="locking.html#id401436">Multiuser Databases</a></dt><dt>management costs, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a></dt><dt>management overheads, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></dt><dt>management procedures, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></dt><dt>management tools, <a class="indexterm" href="passdb.html#acctmgmttools">Account Management Tools</a></dt><dt>managing rights, <a class="indexterm" href="rights.html#id394300">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>mandatory profiles, <a class="indexterm" href="ProfileMgmt.html#id444102">Mandatory Profiles</a></dt><dt>Mandrake, <a class="indexterm" href="CUPS-printing.html#id429104">Forums, Downloads, Tutorials, Howtos (Also for Mac OS X and Commercial UNIX)</a></dt><dt>Mandriva, <a class="indexterm" href="CUPS-printing.html#id429104">Forums, Downloads, Tutorials, Howtos (Also for Mac OS X and Commercial UNIX)</a></dt><dt>manual UNIX account creation, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>manual WINS server entries, <a class="indexterm" href="ClientConfig.html#id363638">MS Windows XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id364254">MS Windows 2000</a></dt><dt>manually configured, <a class="indexterm" href="ClientConfig.html#id364780">MS Windows Me</a></dt><dt>manually configured DNS settings, <a class="indexterm" href="ClientConfig.html#id363638">MS Windows XP Professional</a></dt><dt>map, <a class="indexterm" href="domain-member.html#id358911">Windows 200x/XP Professional Client</a>, <a class="indexterm" href="NT4Migration.html#id459686">User and Group Accounts</a></dt><dt>mapped, <a class="indexterm" href="groupmapping.html#id383730">Important Administrative Information</a>, <a class="indexterm" href="NetCommand.html#id385377">Overview</a>, <a class="indexterm" href="NetCommand.html#id386085">Mapping Windows Groups to UNIX Groups</a></dt><dt>mapping, <a class="indexterm" href="passdb.html#id375648">Mapping User Identifiers between MS Windows and UNIX</a>, <a class="indexterm" href="NetCommand.html#id386085">Mapping Windows Groups to UNIX Groups</a></dt><dt>mapping home directory, <a class="indexterm" href="securing-samba.html#id403740">Why Can Users Access Other Users' Home Directories?</a></dt><dt>mapping printer driver, <a class="indexterm" href="classicalprinting.html#id413261">Running rpcclient with setdriver</a></dt><dt>mappings, <a class="indexterm" href="domain-member.html#id361572">Sharing User ID Mappings between Samba Domain Members</a></dt><dt>maps UNIX users and groups, <a class="indexterm" href="domain-member.html#id361572">Sharing User ID Mappings between Samba Domain Members</a></dt><dt>master browser, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></dt><dt>master browsers, <a class="indexterm" href="NetworkBrowsing.html#id372827">Behavior of Cross-Subnet Browsing</a></dt><dt>master server, <a class="indexterm" href="NT4Migration.html#id459247">Domain Layout</a></dt><dt>master smb.conf, <a class="indexterm" href="cfgsmarts.html#id455267">Multiple Virtual Server Hosting</a></dt><dt>MasterAnnouncement, <a class="indexterm" href="NetworkBrowsing.html#id372827">Behavior of Cross-Subnet Browsing</a></dt><dt>match case, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>maximum value, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a></dt><dt>mbd kept spawning, <a class="indexterm" href="speed.html#id469561">Corrupt tdb Files</a></dt><dt>Meccano set, <a class="indexterm" href="Backup.html#id451626">Discussion of Backup Solutions</a></dt><dt>mechanism, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></dt><dt>media type, <a class="indexterm" href="CUPS-printing.html#id421357">The Role of cupsomatic/foomatic</a></dt><dt>member, <a class="indexterm" href="samba-pdc.html#id351870">Preparing for Domain Control</a>, <a class="indexterm" href="rights.html#id394300">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>member machine, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>memory, <a class="indexterm" href="passdb.html#id375454">Advantages of Encrypted Passwords</a></dt><dt>messages.tdb, <a class="indexterm" href="CUPS-printing.html#id427930">The Printing *.tdb Files</a></dt><dd><dl><dt>(see also TDB)</dt></dl></dd><dt>messaging systems, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a></dt><dt>Meta node, <a class="indexterm" href="NetworkBrowsing.html#id371626">Static WINS Entries</a></dt><dt>meta-directory, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></dt><dt>meta-service, <a class="indexterm" href="install.html#id341822">Configuration File Syntax</a></dt><dt>meta-services, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></dt><dt>Microsoft Active Directory, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>Microsoft Developer Network CDs, <a class="indexterm" href="problems.html#id464695">The Windows Network Monitor</a></dt><dt>Microsoft driver, <a class="indexterm" href="CUPS-printing.html#id423941">PostScript Drivers with No Major Problems, Even in Kernel
+Mode</a></dt><dt>Microsoft management console (see MMC)</dt><dt>Microsoft Remote Procedure Call (see MSRPC)</dt><dt>Microsoft Windows 9x/Me, <a class="indexterm" href="domain-member.html#id358537">Managing Domain Machine Accounts using NT4 Server Manager</a></dt><dt>Microsoft Wolfpack, <a class="indexterm" href="SambaHA.html#id453168">High-Availability Server Products</a></dt><dt>middle-ware, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a></dt><dt>migrate, <a class="indexterm" href="ServerType.html">Server Types and Security Modes</a>, <a class="indexterm" href="NT4Migration.html">Migration from NT4 PDC to Samba-3 PDC</a></dt><dt>migrate account settings, <a class="indexterm" href="NT4Migration.html#id459686">User and Group Accounts</a></dt><dt>migrate group, <a class="indexterm" href="NT4Migration.html#id459686">User and Group Accounts</a></dt><dt>migrate user, <a class="indexterm" href="NT4Migration.html#id459686">User and Group Accounts</a></dt><dt>migrating, <a class="indexterm" href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a></dt><dt>migration, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>migration plan, <a class="indexterm" href="NT4Migration.html#id458833">Planning and Getting Started</a></dt><dt>migration process, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>MIME, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a>, <a class="indexterm" href="CUPS-printing.html#id419826">MIME Type Conversion Rules</a>, <a class="indexterm" href="CUPS-printing.html#id420021">Filtering  Overview</a>, <a class="indexterm" href="CUPS-printing.html#id421744">application/octet-stream Printing</a></dt><dd><dl><dt>filters, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></dt><dt>raw, <a class="indexterm" href="FastStart.html#id344449">Anonymous Print Server</a>, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="CUPS-printing.html#cups-raw">Explicitly Enable &#8220;raw&#8221; Printing for application/octet-stream</a></dt></dl></dd><dt>MIME conversion rules, <a class="indexterm" href="CUPS-printing.html#id419200">The CUPS Filtering Architecture</a></dt><dt>MIME recognition, <a class="indexterm" href="CUPS-printing.html#id419200">The CUPS Filtering Architecture</a></dt><dt>MIME type, <a class="indexterm" href="CUPS-printing.html#cups-raw">Explicitly Enable &#8220;raw&#8221; Printing for application/octet-stream</a>, <a class="indexterm" href="CUPS-printing.html#id419200">The CUPS Filtering Architecture</a>, <a class="indexterm" href="CUPS-printing.html#id420169">Prefilters</a>, <a class="indexterm" href="CUPS-printing.html#id421744">application/octet-stream Printing</a></dt><dt>mime.types, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></dt><dt>minimal</dt><dd><dl><dt>configuration, <a class="indexterm" href="install.html#id341822">Configuration File Syntax</a></dt></dl></dd><dt>minimal configuration, <a class="indexterm" href="install.html#id341822">Configuration File Syntax</a></dt><dt>minimum security control, <a class="indexterm" href="StandAloneServer.html">Standalone Servers</a></dt><dt>misconfigurations, <a class="indexterm" href="install.html#id343059">Test Your Config File with testparm</a></dt><dt>misconfigured settings, <a class="indexterm" href="classicalprinting.html#id406941">Simple Print Configuration</a></dt><dt>misinformation, <a class="indexterm" href="domain-member.html">Domain Membership</a></dt><dt>mission-critical, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a>, <a class="indexterm" href="classicalprinting.html#id406449">Features and Benefits</a></dt><dt>MIT, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a>, <a class="indexterm" href="idmapper.html#id391918">ADS Domains</a></dt><dt>MIT kerberos, <a class="indexterm" href="idmapper.html#id391918">ADS Domains</a>, <a class="indexterm" href="idmapper.html#id392871">IDMAP Storage in LDAP Using Winbind</a></dt><dt>MIT Kerberos, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>mixed mode, <a class="indexterm" href="ServerType.html#id349419">ADS Security Mode (User-Level Security)</a>, <a class="indexterm" href="InterdomainTrusts.html#id405489">NT4-Style Domain Trusts with Windows 2000</a></dt><dt>mixed profile, <a class="indexterm" href="ProfileMgmt.html#id442104">Mixed Windows Windows 9x/Me and NT4/200x User Profiles</a></dt><dt>mkdir, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>mkfs.xfs, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>MMC, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="groupmapping.html#id382442">Features and Benefits</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id391274">Primary Domain Controller</a>, <a class="indexterm" href="AccessControls.html#id398176">Access Controls on Shares</a>, <a class="indexterm" href="AccessControls.html#id398424">Windows 200x/XP</a>, <a class="indexterm" href="PolicyMgmt.html#id440199">Creating and Managing System Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id441392">Windows NT4/200x</a>, <a class="indexterm" href="ProfileMgmt.html#id442177">Disabling Roaming Profile Support</a></dt><dt>MMC snap-in, <a class="indexterm" href="PolicyMgmt.html#id440878">Administration of Windows 200x/XP Policies</a></dt><dt>modem/ISDN, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a></dt><dt>moderately secure, <a class="indexterm" href="securing-samba.html#id402802">Features and Benefits</a></dt><dt>modprobe, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>module, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>modules, <a class="indexterm" href="VFS.html#id432386">Features and Benefits</a>, <a class="indexterm" href="VFS.html#id432421">Discussion</a></dt><dt>more than one protocol, <a class="indexterm" href="NetworkBrowsing.html#id371853">Windows Networking Protocols</a></dt><dt>mount, <a class="indexterm" href="ServerType.html#id348806">Share-Level Security</a>, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>mouse-over, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a></dt><dt>moveuser.exe, <a class="indexterm" href="ProfileMgmt.html#id444002">moveuser.exe</a></dt><dt>MS DCE RPC, <a class="indexterm" href="winbind.html#id437279">Join the Samba Server to the PDC Domain</a></dt><dt>MS Windows 2000, <a class="indexterm" href="samba-bdc.html#id355820">Active Directory Domain Control</a></dt><dt>MS Windows NT4/200x, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a></dt><dt>MS Windows SID, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a></dt><dt>MS WINS, <a class="indexterm" href="NetworkBrowsing.html#id367309">Features and Benefits</a></dt><dt>MS-DFS, <a class="indexterm" href="SambaHA.html#id453296">MS-DFS: The Poor Man's Cluster</a></dt><dt>MS-RPC, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>MS-WINS replication, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a></dt><dt>msdfs links, <a class="indexterm" href="msdfs.html#id405843">Features and Benefits</a></dt><dt>msg, <a class="indexterm" href="SWAT.html#id461566">Enabling SWAT Internationalization Support</a></dt><dt>msg file, <a class="indexterm" href="SWAT.html#id461566">Enabling SWAT Internationalization Support</a></dt><dt>MSRPC, <a class="indexterm" href="winbind.html#id435683">Microsoft Remote Procedure Calls</a>, <a class="indexterm" href="winbind.html#id435805">Name Service Switch</a></dt><dt>multibyte character sets, <a class="indexterm" href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a></dt><dt>multibyte charsets, <a class="indexterm" href="unicode.html#id450250">What Are Charsets and Unicode?</a></dt><dt>multiple backends, <a class="indexterm" href="passdb.html#id379310">Password Backends</a></dt><dt>multiple domains, <a class="indexterm" href="NT4Migration.html#id459247">Domain Layout</a></dt><dt>multiple hosting, <a class="indexterm" href="cfgsmarts.html">Advanced Configuration Techniques</a></dt><dt>multiple modules, <a class="indexterm" href="VFS.html#id432421">Discussion</a></dt><dt>multiple network interfaces, <a class="indexterm" href="NetworkBrowsing.html#id370644">Multiple Interfaces</a></dt><dt>multiple network segments, <a class="indexterm" href="NT4Migration.html#id459247">Domain Layout</a></dt><dt>multiple personality, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></dt><dt>multiple server hosting, <a class="indexterm" href="cfgsmarts.html#id453922">Multiple Server Hosting</a></dt><dt>multiple server personalities, <a class="indexterm" href="cfgsmarts.html">Advanced Configuration Techniques</a></dt><dt>multiple servers, <a class="indexterm" href="cfgsmarts.html">Advanced Configuration Techniques</a>, <a class="indexterm" href="cfgsmarts.html#id453922">Multiple Server Hosting</a></dt><dt>multiple universal naming convention provider (see MUP)</dt><dt>multiple VFS, <a class="indexterm" href="VFS.html#id432421">Discussion</a></dt><dt>multiple virtual servers, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></dt><dt>multiple Windows workgroups or domains, <a class="indexterm" href="ClientConfig.html#id364780">MS Windows Me</a></dt><dt>multiple WINS servers, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a></dt><dt>Multiuser databases, <a class="indexterm" href="locking.html#id401436">Multiuser Databases</a></dt><dt>mutual assistance, <a class="indexterm" href="ch46.html#id470724">Free Support</a></dt><dt>mutually exclusive options, <a class="indexterm" href="NetworkBrowsing.html#id367475">What Is Browsing?</a></dt><dt>My Network Places, <a class="indexterm" href="ClientConfig.html#id364780">MS Windows Me</a>, <a class="indexterm" href="NetworkBrowsing.html#id372438">Problem Resolution</a></dt><dt>Myrinet, <a class="indexterm" href="SambaHA.html#id452995">Server Pool Communications Demands</a></dt></dl></div><div class="indexdiv"><h3>N</h3><dl><dt>n security context, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a></dt><dt>n-memory buffer, <a class="indexterm" href="integrate-ms-networks.html#id449576">The NetBIOS Name Cache</a></dt><dt>name conflict, <a class="indexterm" href="classicalprinting.html#id409231">Any [my_printer_name] Section</a></dt><dt>name lookup, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a>, <a class="indexterm" href="integrate-ms-networks.html#id449576">The NetBIOS Name Cache</a></dt><dt>name lookups, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a>, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a></dt><dt>name registration, <a class="indexterm" href="samba-bdc.html#id355874">What Qualifies a Domain Controller on the Network?</a></dt><dt>name resolution, <a class="indexterm" href="NetworkBrowsing.html#id367475">What Is Browsing?</a>, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a>, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a>, <a class="indexterm" href="NetworkBrowsing.html#id372177">Technical Overview of Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id373613">Common Errors</a>, <a class="indexterm" href="integrate-ms-networks.html#id448831">/etc/hosts</a>, <a class="indexterm" href="diagnosis.html#id462289">Assumptions</a></dt><dt>name resolution across routed networks, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a></dt><dt>name resolve order, <a class="indexterm" href="NetworkBrowsing.html#id371983">Name Resolution Order</a></dt><dt>name service switch (see NSS)</dt><dt>name-to-address, <a class="indexterm" href="NetworkBrowsing.html#id371035">WINS: The Windows Internetworking Name Server</a></dt><dt>nameserv.h, <a class="indexterm" href="NetworkBrowsing.html#id371626">Static WINS Entries</a></dt><dt>name_type, <a class="indexterm" href="NetworkBrowsing.html#id371035">WINS: The Windows Internetworking Name Server</a>, <a class="indexterm" href="NetworkBrowsing.html#id371983">Name Resolution Order</a></dt><dt>native ACLs, <a class="indexterm" href="AccessControls.html#id395980">Features and Benefits</a></dt><dt>native dump, <a class="indexterm" href="Backup.html#id452035">Amanda</a></dt><dt>native member, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a>, <a class="indexterm" href="domain-member.html#id357484">Features and Benefits</a></dt><dt>native mode, <a class="indexterm" href="ServerType.html#id349419">ADS Security Mode (User-Level Security)</a>, <a class="indexterm" href="winbind.html#id435761">Microsoft Active Directory Services</a></dt><dt>NBT, <a class="indexterm" href="integrate-ms-networks.html#id449183">Name Resolution as Used within MS Windows Networking</a></dt><dt>nbtstat, <a class="indexterm" href="domain-member.html#id361802">Cannot Add Machine Back to Domain</a>, <a class="indexterm" href="integrate-ms-networks.html#id449576">The NetBIOS Name Cache</a></dt><dt>necessary rights, <a class="indexterm" href="rights.html#id394300">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>negotiate, <a class="indexterm" href="passdb.html#id375167">Important Notes About Security</a></dt><dt>negotiating the charset, <a class="indexterm" href="unicode.html#id450250">What Are Charsets and Unicode?</a></dt><dt>nested group, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>Nested Group Support, <a class="indexterm" href="rights.html#id395514">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>nested groups, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></dt><dt>net, <a class="indexterm" href="passdb.html#acctmgmttools">Account Management Tools</a>, <a class="indexterm" href="groupmapping.html">Group Mapping: MS Windows and UNIX</a>, <a class="indexterm" href="NetCommand.html">Remote and Local Management: The Net Command</a>, <a class="indexterm" href="NetCommand.html#id385377">Overview</a>, <a class="indexterm" href="NetCommand.html#id385653">Administrative Tasks and Methods</a>, <a class="indexterm" href="NetCommand.html#id385728">UNIX and Windows Group Management</a>, <a class="indexterm" href="rights.html#id395514">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dd><dl><dt>ads, <a class="indexterm" href="NetCommand.html#id385728">UNIX and Windows Group Management</a></dt><dd><dl><dt>join, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="domain-member.html#ads-create-machine-account">Create the Computer Account</a>, <a class="indexterm" href="NetCommand.html#id387811">Machine Trust Accounts</a>, <a class="indexterm" href="idmapper.html#id391918">ADS Domains</a></dt><dt>leave, <a class="indexterm" href="NetCommand.html#id387811">Machine Trust Accounts</a></dt><dt>printer info, <a class="indexterm" href="NetCommand.html#id389627">Printers and ADS</a></dt><dt>printer publish, <a class="indexterm" href="NetCommand.html#id389627">Printers and ADS</a></dt><dt>printer remove, <a class="indexterm" href="NetCommand.html#id389627">Printers and ADS</a></dt><dt>printer search, <a class="indexterm" href="NetCommand.html#id389627">Printers and ADS</a></dt><dt>status, <a class="indexterm" href="NetCommand.html#id387811">Machine Trust Accounts</a></dt><dt>testjoin, <a class="indexterm" href="NetCommand.html#id387811">Machine Trust Accounts</a></dt></dl></dd><dt>getlocalsid, <a class="indexterm" href="ChangeNotes.html#id366486">User and Group Changes</a>, <a class="indexterm" href="NetCommand.html#id388358">Managing Security Identifiers (SIDS)</a>, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a></dt><dt>groupmap, <a class="indexterm" href="FastStart.html#id346350">Example: Engineering Office</a>, <a class="indexterm" href="ChangeNotes.html#id366486">User and Group Changes</a>, <a class="indexterm" href="groupmapping.html#id382442">Features and Benefits</a>, <a class="indexterm" href="groupmapping.html#id384556">Example Configuration</a>, <a class="indexterm" href="NT4Migration.html#id459730">Steps in Migration Process</a></dt><dd><dl><dt>add, <a class="indexterm" href="NetCommand.html#id386085">Mapping Windows Groups to UNIX Groups</a></dt><dt>delete, <a class="indexterm" href="NetCommand.html#id386085">Mapping Windows Groups to UNIX Groups</a></dt><dt>list, <a class="indexterm" href="groupmapping.html#id384556">Example Configuration</a>, <a class="indexterm" href="NetCommand.html#id385906">Adding or Creating a New Group</a></dt><dt>modify, <a class="indexterm" href="NetCommand.html#id386085">Mapping Windows Groups to UNIX Groups</a></dt></dl></dd><dt>localgroup, <a class="indexterm" href="rights.html#id395514">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>rap, <a class="indexterm" href="NetCommand.html#id385728">UNIX and Windows Group Management</a></dt><dd><dl><dt>session, <a class="indexterm" href="NetCommand.html#id389567">Session and Connection Management</a></dt></dl></dd><dt>rpc, <a class="indexterm" href="FastStart.html#id345540">Example Configuration</a>, <a class="indexterm" href="ServerType.html#id349156">Example Configuration</a>, <a class="indexterm" href="samba-bdc.html#id354424">Features and Benefits</a>, <a class="indexterm" href="NetCommand.html#id385728">UNIX and Windows Group Management</a></dt><dd><dl><dt>getsid, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a>, <a class="indexterm" href="NetCommand.html#id388358">Managing Security Identifiers (SIDS)</a></dt><dt>group, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="NetCommand.html#id385906">Adding or Creating a New Group</a></dt><dt>group add, <a class="indexterm" href="NetCommand.html#id385906">Adding or Creating a New Group</a></dt><dt>group addmem, <a class="indexterm" href="NetCommand.html#grpmemshipchg">Manipulating Group Memberships</a>, <a class="indexterm" href="NetCommand.html#id386831">Managing Nest Groups on Workstations from the Samba Server</a></dt><dt>group delete, <a class="indexterm" href="NetCommand.html#id386366">Deleting a Group Account</a></dt><dt>group delmem, <a class="indexterm" href="NetCommand.html#grpmemshipchg">Manipulating Group Memberships</a></dt><dt>group list, <a class="indexterm" href="NetCommand.html#id385906">Adding or Creating a New Group</a></dt><dt>group members, <a class="indexterm" href="NetCommand.html#grpmemshipchg">Manipulating Group Memberships</a></dt><dt>group rename, <a class="indexterm" href="NetCommand.html#id386404">Rename Group Accounts</a></dt><dt>info, <a class="indexterm" href="NetCommand.html#netmisc1">Other Miscellaneous Operations</a>, <a class="indexterm" href="ProfileMgmt.html#id443953">Side Bar Notes</a></dt><dt>join, <a class="indexterm" href="ServerType.html#id349156">Example Configuration</a>, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="NetCommand.html#id387811">Machine Trust Accounts</a>, <a class="indexterm" href="winbind.html#id437279">Join the Samba Server to the PDC Domain</a>, <a class="indexterm" href="NT4Migration.html#id459730">Steps in Migration Process</a></dt><dt>join bdc, <a class="indexterm" href="NetCommand.html#id387811">Machine Trust Accounts</a></dt><dt>join member, <a class="indexterm" href="NetCommand.html#id387811">Machine Trust Accounts</a></dt><dt>list, <a class="indexterm" href="rights.html#id394300">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>printer migrate drivers, <a class="indexterm" href="NetCommand.html#id389335">Printer Migration</a></dt><dt>printer migrate forms, <a class="indexterm" href="NetCommand.html#id389335">Printer Migration</a></dt><dt>printer migrate printers, <a class="indexterm" href="NetCommand.html#id389335">Printer Migration</a></dt><dt>printer migrate security, <a class="indexterm" href="NetCommand.html#id389335">Printer Migration</a></dt><dt>printer migrate settings, <a class="indexterm" href="NetCommand.html#id389335">Printer Migration</a></dt><dt>right list accounts, <a class="indexterm" href="NetCommand.html#id388890">Share Migration</a></dt><dt>rights grant, <a class="indexterm" href="NetCommand.html#id387484">Administering User Rights and Privileges</a>, <a class="indexterm" href="rights.html#id394300">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>rights list, <a class="indexterm" href="NetCommand.html#id387484">Administering User Rights and Privileges</a></dt><dt>rights list accounts, <a class="indexterm" href="NetCommand.html#id387484">Administering User Rights and Privileges</a></dt><dt>share add, <a class="indexterm" href="NetCommand.html#id388601">Creating, Editing, and Removing Shares</a></dt><dt>share delete, <a class="indexterm" href="NetCommand.html#id388601">Creating, Editing, and Removing Shares</a></dt><dt>share migrate, <a class="indexterm" href="NetCommand.html#id388890">Share Migration</a></dt><dt>share migrate all, <a class="indexterm" href="NetCommand.html#id389282">Simultaneous Share and File Migration</a></dt><dt>share migrate files, <a class="indexterm" href="NetCommand.html#id389062">File and Directory Migration</a></dt><dt>share migrate security, <a class="indexterm" href="NetCommand.html#id389243">Share-ACL Migration</a></dt><dt>testjoin, <a class="indexterm" href="NetCommand.html#id387811">Machine Trust Accounts</a></dt><dt>trustdom add, <a class="indexterm" href="NetCommand.html#id388148">Interdomain Trusts</a></dt><dt>trustdom establish, <a class="indexterm" href="NetCommand.html#id388148">Interdomain Trusts</a>, <a class="indexterm" href="InterdomainTrusts.html#id405306">Samba as the Trusting Domain</a></dt><dt>trustdom list, <a class="indexterm" href="NetCommand.html#id388148">Interdomain Trusts</a></dt><dt>trustdom revoke, <a class="indexterm" href="NetCommand.html#id388148">Interdomain Trusts</a></dt><dt>user add, <a class="indexterm" href="NetCommand.html#sbeuseraddn">Adding User Accounts</a></dt><dt>user delete, <a class="indexterm" href="NetCommand.html#id387299">Deletion of User Accounts</a>, <a class="indexterm" href="NetCommand.html#id387811">Machine Trust Accounts</a></dt><dt>user info, <a class="indexterm" href="NetCommand.html#id387344">Managing User Accounts</a></dt><dt>user password, <a class="indexterm" href="NetCommand.html#sbeuseraddn">Adding User Accounts</a></dt><dt>user rename, <a class="indexterm" href="NetCommand.html#id387344">Managing User Accounts</a></dt><dt>vampire, <a class="indexterm" href="ChangeNotes.html#id366486">User and Group Changes</a>, <a class="indexterm" href="NetCommand.html#id388797">Share, Directory, and File Migration</a>, <a class="indexterm" href="NT4Migration.html#id459730">Steps in Migration Process</a></dt></dl></dd><dt>setlocalsid, <a class="indexterm" href="NetCommand.html#id388358">Managing Security Identifiers (SIDS)</a></dt><dt>time, <a class="indexterm" href="NetCommand.html#netmisc1">Other Miscellaneous Operations</a></dt><dd><dl><dt>set, <a class="indexterm" href="NetCommand.html#netmisc1">Other Miscellaneous Operations</a></dt><dt>system, <a class="indexterm" href="NetCommand.html#netmisc1">Other Miscellaneous Operations</a></dt><dt>zone, <a class="indexterm" href="NetCommand.html#netmisc1">Other Miscellaneous Operations</a></dt></dl></dd><dt>use, <a class="indexterm" href="domain-member.html#ads-test-server">Testing Server Setup</a></dt></dl></dd><dt>NET, <a class="indexterm" href="PolicyMgmt.html#id441429">Samba PDC</a></dt><dt>net command, <a class="indexterm" href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a></dt><dt>net getlocalsid, <a class="indexterm" href="rights.html#id395344">The Administrator Domain SID</a></dt><dt>net groupmap, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a></dt><dt>net rpc user add, <a class="indexterm" href="rights.html#id394618">Description of Privileges</a></dt><dt>net tool, <a class="indexterm" href="upgrading-to-3.0.html#id457959">Passdb Backends and Authentication</a></dt><dt>net use, <a class="indexterm" href="classicalprinting.html#id415143">Error Message: &#8220;Cannot connect under a different Name&#8221;</a></dt><dt>net use /home, <a class="indexterm" href="ProfileMgmt.html#id441955">Windows 9x/Me User Profiles</a></dt><dt>net use lpt1:, <a class="indexterm" href="CUPS-printing.html#id425962">Installing the PostScript Driver on a Client</a></dt><dt>net view, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a>, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>netatalk, <a class="indexterm" href="VFS.html#id433719">netatalk</a></dt><dt>NetAtalk, <a class="indexterm" href="unicode.html#id450646">Basic Parameter Setting</a></dt><dt>Netatalk, <a class="indexterm" href="Other-Clients.html#id468182">Macintosh Clients</a></dt><dt>NetBEUI, <a class="indexterm" href="integrate-ms-networks.html">Integrating MS Windows Networks with Samba</a></dt><dt>NetBIOS, <a class="indexterm" href="ServerType.html#id348971">Domain Security Mode (User-Level Security)</a>, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="samba-bdc.html#id355874">What Qualifies a Domain Controller on the Network?</a>, <a class="indexterm" href="samba-bdc.html#id355957">How Does a Workstation find its Domain Controller?</a>, <a class="indexterm" href="samba-bdc.html#id356586">Example Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#id367309">Features and Benefits</a>, <a class="indexterm" href="NetworkBrowsing.html#netdiscuss">Discussion</a>, <a class="indexterm" href="NetworkBrowsing.html#id368472">TCP/IP without NetBIOS</a>, <a class="indexterm" href="NetworkBrowsing.html#id372177">Technical Overview of Browsing</a>, <a class="indexterm" href="integrate-ms-networks.html">Integrating MS Windows Networks with Samba</a>, <a class="indexterm" href="integrate-ms-networks.html#id449183">Name Resolution as Used within MS Windows Networking</a>, <a class="indexterm" href="integrate-ms-networks.html#id449576">The NetBIOS Name Cache</a></dt><dd><dl><dt>brooadcast, <a class="indexterm" href="samba-pdc.html#id351870">Preparing for Domain Control</a></dt><dt>name, <a class="indexterm" href="ServerType.html#id348971">Domain Security Mode (User-Level Security)</a></dt></dl></dd><dt>netbios alias, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></dt><dt>netbios aliases, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></dt><dt>NetBIOS broadcast, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></dt><dt>NetBIOS disabled, <a class="indexterm" href="NetworkBrowsing.html#id367309">Features and Benefits</a></dt><dt>NetBIOS flags, <a class="indexterm" href="NetworkBrowsing.html#id371626">Static WINS Entries</a></dt><dt>NetBIOS name, <a class="indexterm" href="samba-pdc.html#id353648">Security Mode and Master Browsers</a>, <a class="indexterm" href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="integrate-ms-networks.html#id449183">Name Resolution as Used within MS Windows Networking</a>, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></dt><dt>netbios name, <a class="indexterm" href="cfgsmarts.html#id453922">Multiple Server Hosting</a></dt><dt>NetBIOS name cache, <a class="indexterm" href="domain-member.html#id361802">Cannot Add Machine Back to Domain</a>, <a class="indexterm" href="NetworkBrowsing.html#id373637">Flushing the Samba NetBIOS Name Cache</a></dt><dt>NetBIOS name length, <a class="indexterm" href="NetworkBrowsing.html#id371035">WINS: The Windows Internetworking Name Server</a></dt><dt>NetBIOS name resolution, <a class="indexterm" href="NetworkBrowsing.html#id372827">Behavior of Cross-Subnet Browsing</a></dt><dt>NetBIOS Name Server (see NBNS)</dt><dt>NetBIOS name type, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a></dt><dt>NetBIOS names, <a class="indexterm" href="NetworkBrowsing.html#id371983">Name Resolution Order</a>, <a class="indexterm" href="integrate-ms-networks.html#id449073">/etc/nsswitch.conf</a></dt><dt>NetBIOS network interface, <a class="indexterm" href="NetworkBrowsing.html#id371853">Windows Networking Protocols</a></dt><dt>NetBIOS networking, <a class="indexterm" href="NetworkBrowsing.html#id367309">Features and Benefits</a></dt><dt>NetBIOS over TCP/IP, <a class="indexterm" href="NetworkBrowsing.html">Network Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id367309">Features and Benefits</a>, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a>, <a class="indexterm" href="NetworkBrowsing.html#id372177">Technical Overview of Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id372672">Cross-Subnet Browsing</a>, <a class="indexterm" href="integrate-ms-networks.html#id448641">Background Information</a></dt><dt>NetBIOS over TCP/IP disabled, <a class="indexterm" href="NetworkBrowsing.html#id373792">Browsing of Shares and Directories is Very Slow</a></dt><dt>NetBIOS-less, <a class="indexterm" href="NetworkBrowsing.html#id368472">TCP/IP without NetBIOS</a>, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></dt><dt>NetBIOS-less SMB, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></dt><dt>NetBIOSless SMB over TCP/IP, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a></dt><dt>NetBT, <a class="indexterm" href="integrate-ms-networks.html#id449183">Name Resolution as Used within MS Windows Networking</a></dt><dt>netlogon, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a></dt><dt>NETLOGON, <a class="indexterm" href="samba-pdc.html#id351870">Preparing for Domain Control</a>, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a>, <a class="indexterm" href="PolicyMgmt.html#id440199">Creating and Managing System Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id440699">MS Windows 200x/XP Professional Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id441101">Managing Account/User Policies</a>, <a class="indexterm" href="ProfileMgmt.html#id444459">MS Windows NT4 Workstation</a>, <a class="indexterm" href="ProfileMgmt.html#id444984">MS Windows 200x/XP</a></dt><dt>Netlogon, <a class="indexterm" href="samba-bdc.html#id354803">Essential Background Information</a></dt><dt>NetLogon service, <a class="indexterm" href="NetworkBrowsing.html#id371035">WINS: The Windows Internetworking Name Server</a></dt><dt>netlogon share, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a>, <a class="indexterm" href="NT4Migration.html#id459730">Steps in Migration Process</a></dt><dt>Netmon, <a class="indexterm" href="problems.html#id464695">The Windows Network Monitor</a></dt><dt>Netmon., <a class="indexterm" href="problems.html#id464750">Installing Network Monitor on an NT Workstation</a></dt><dt>netmon.exe, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a></dt><dt>NetSAMLogon, <a class="indexterm" href="ProfileMgmt.html#id441766">Roaming Profiles</a></dt><dt>Netscape's Directory Server, <a class="indexterm" href="passdb.html#id380053">Supported LDAP Servers</a></dt><dt>NetServerEnum2, <a class="indexterm" href="NetworkBrowsing.html#id372827">Behavior of Cross-Subnet Browsing</a></dt><dt>NetUserGetInfo, <a class="indexterm" href="samba-pdc.html#id353296">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="ProfileMgmt.html#id441766">Roaming Profiles</a></dt><dt>NetWare, <a class="indexterm" href="integrate-ms-networks.html#id449183">Name Resolution as Used within MS Windows Networking</a></dt><dt>NetWare Bindery, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>NetWare Core Protocol-based server, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>NetWkstaUserLogon, <a class="indexterm" href="samba-pdc.html#id353296">The Special Case of Windows 9x/Me</a></dt><dt>network</dt><dd><dl><dt>browsing, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a></dt><dt>logon, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a></dt><dd><dl><dt>service, <a class="indexterm" href="samba-pdc.html#id353648">Security Mode and Master Browsers</a></dt></dl></dd><dt>performance, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a></dt><dt>wide-area, <a class="indexterm" href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a></dt></dl></dd><dt>network access controls, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a></dt><dt>network access profile, <a class="indexterm" href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a></dt><dt>network administrator, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a></dt><dt>network administrator's toolbox, <a class="indexterm" href="NetCommand.html">Remote and Local Management: The Net Command</a></dt><dt>network administrators, <a class="indexterm" href="NT4Migration.html#id459433">Server Share and Directory Layout</a></dt><dt>network analyzer, <a class="indexterm" href="problems.html#id464214">Diagnostics Tools</a></dt><dt>network bandwidth, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a>, <a class="indexterm" href="NT4Migration.html#id459247">Domain Layout</a></dt><dt>Network Basic Extended User Interface (see NetBEUI)</dt><dt>Network Basic Input/Output System (see NetBIOS)</dt><dt>Network Bridge, <a class="indexterm" href="ClientConfig.html#id363638">MS Windows XP Professional</a></dt><dt>Network Bridge Configuration, <a class="indexterm" href="ClientConfig.html#id363638">MS Windows XP Professional</a></dt><dt>network browsing problems, <a class="indexterm" href="NetworkBrowsing.html#id370405">Making Samba the Domain Master</a>, <a class="indexterm" href="NetworkBrowsing.html#id373792">Browsing of Shares and Directories is Very Slow</a></dt><dt>network client, <a class="indexterm" href="ClientConfig.html#id363475">Features and Benefits</a>, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a></dt><dt>network clients, <a class="indexterm" href="ClientConfig.html#id364254">MS Windows 2000</a></dt><dt>network configuration problems, <a class="indexterm" href="ClientConfig.html#id363569">TCP/IP Configuration</a></dt><dt>network difficulty, <a class="indexterm" href="ClientConfig.html#id363475">Features and Benefits</a></dt><dt>network environment, <a class="indexterm" href="AdvancedNetworkManagement.html#id439232">Remote Desktop Management</a></dt><dt>Network ID, <a class="indexterm" href="ClientConfig.html#id365265">Joining a Domain: Windows 2000/XP Professional</a></dt><dt>network interface, <a class="indexterm" href="securing-samba.html#id403151">Using Interface Protection</a>, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>network logon, <a class="indexterm" href="samba-pdc.html#id353296">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="domain-member.html#id357484">Features and Benefits</a>, <a class="indexterm" href="ClientConfig.html#id365774">Domain Logon Configuration: Windows 9x/Me</a></dt><dt>network logon services, <a class="indexterm" href="samba-pdc.html#id353296">The Special Case of Windows 9x/Me</a></dt><dt>network membership, <a class="indexterm" href="ClientConfig.html#id363528">Technical Details</a></dt><dt>Network Monitor, <a class="indexterm" href="problems.html#id464695">The Windows Network Monitor</a></dt><dt>Network Monitor Tools and Agent, <a class="indexterm" href="problems.html#id464750">Installing Network Monitor on an NT Workstation</a></dt><dt>Network Neighborhood, <a class="indexterm" href="NetworkBrowsing.html#id367475">What Is Browsing?</a>, <a class="indexterm" href="NetworkBrowsing.html#id372438">Problem Resolution</a>, <a class="indexterm" href="NetworkBrowsing.html#id372827">Behavior of Cross-Subnet Browsing</a>, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a>, <a class="indexterm" href="classicalprinting.html#id412953">Check Samba for Driver Recognition</a></dt><dt>network neighborhood, <a class="indexterm" href="NetworkBrowsing.html#id372827">Behavior of Cross-Subnet Browsing</a></dt><dt>network policies, <a class="indexterm" href="PolicyMgmt.html#id440199">Creating and Managing System Policies</a></dt><dt>network security, <a class="indexterm" href="NT4Migration.html#id459247">Domain Layout</a></dt><dt>network segment, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a>, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a>, <a class="indexterm" href="NT4Migration.html#id459247">Domain Layout</a></dt><dt>Network settings, <a class="indexterm" href="NetworkBrowsing.html#id372672">Cross-Subnet Browsing</a></dt><dt>network sniffer, <a class="indexterm" href="passdb.html#id375454">Advantages of Encrypted Passwords</a></dt><dt>network storage, <a class="indexterm" href="Backup.html#id451712">BackupPC</a></dt><dt>network traffic, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a></dt><dt>networked workstation, <a class="indexterm" href="winbind.html#id435805">Name Service Switch</a></dt><dt>networking advocates, <a class="indexterm" href="Backup.html#id451626">Discussion of Backup Solutions</a></dt><dt>networking environment, <a class="indexterm" href="passdb.html#id376419">Caution Regarding LDAP and Samba</a></dt><dt>networking systems, <a class="indexterm" href="ClientConfig.html#id366202">Common Errors</a></dt><dt>networks access, <a class="indexterm" href="speed.html#id469650">Samba Performance is Very Slow</a></dt><dt>Networks Properties, <a class="indexterm" href="ClientConfig.html#id365774">Domain Logon Configuration: Windows 9x/Me</a></dt><dt>new account, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></dt><dt>new parameters, <a class="indexterm" href="upgrading-to-3.0.html#id456833">New Parameters</a></dt><dt>newsgroup, <a class="indexterm" href="bugreport.html#id465317">Introduction</a></dt><dt>Nexus toolkit, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>Nexus.exe, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="domain-member.html#id358537">Managing Domain Machine Accounts using NT4 Server Manager</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id439095">Remote Server Administration</a></dt><dt>NFS, <a class="indexterm" href="domain-member.html#id361572">Sharing User ID Mappings between Samba Domain Members</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id439596">Remote Management with ThinLinc</a>, <a class="indexterm" href="SambaHA.html#id452727">The Distributed File System Challenge</a>, <a class="indexterm" href="SambaHA.html#id452850">Restrictive Constraints on Distributed File Systems</a>, <a class="indexterm" href="upgrading-to-3.0.html#id458672">IdMap LDAP Support</a></dt><dt>NFS clients, <a class="indexterm" href="locking.html#id401364">UNIX or NFS Client-Accessed Files</a></dt><dt>NIS, <a class="indexterm" href="ServerType.html#id348806">Share-Level Security</a>, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a>, <a class="indexterm" href="passdb.html#id380104">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="winbind.html#id435805">Name Service Switch</a></dt><dt>NIS database, <a class="indexterm" href="winbind.html#id436017">Pluggable Authentication Modules</a></dt><dt>nmbd, <a class="indexterm" href="install.html#id342668">Starting Samba</a>, <a class="indexterm" href="install.html#id343059">Test Your Config File with testparm</a>, <a class="indexterm" href="FastStart.html#id344787">Secure Read-Write File and Print Server</a>, <a class="indexterm" href="FastStart.html#id345540">Example Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#id367475">What Is Browsing?</a>, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a>, <a class="indexterm" href="NetworkBrowsing.html#id372256">Browsing Support in Samba</a>, <a class="indexterm" href="NetworkBrowsing.html#id373637">Flushing the Samba NetBIOS Name Cache</a>, <a class="indexterm" href="idmapper.html#id391641">NT4-Style Domains (Includes Samba Domains)</a>, <a class="indexterm" href="winbind.html#id436531">Testing Things Out</a>, <a class="indexterm" href="winbind.html#id437848">Linux</a>, <a class="indexterm" href="winbind.html#id438031">Solaris</a>, <a class="indexterm" href="cfgsmarts.html#id453922">Multiple Server Hosting</a>, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a>, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a>, <a class="indexterm" href="problems.html#id464263">Debugging with Samba Itself</a>, <a class="indexterm" href="speed.html#id469561">Corrupt tdb Files</a></dt><dt>nmblookup, <a class="indexterm" href="integrate-ms-networks.html#id449576">The NetBIOS Name Cache</a>, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>No NetBIOS layer, <a class="indexterm" href="NetworkBrowsing.html#id368472">TCP/IP without NetBIOS</a></dt><dt>no network logon service, <a class="indexterm" href="StandAloneServer.html#id362296">Background</a></dt><dt>no printcap file, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dt>nobody, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dt>nobody account, <a class="indexterm" href="classicalprinting.html#id410090">Custom Print Commands</a>, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></dt><dt>node-type, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a></dt><dt>NoMachine, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a></dt><dt>NoMachine.Com, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a></dt><dt>non-authentication-based account management, <a class="indexterm" href="pam.html#id446697">Anatomy of /etc/pam.d Entries</a></dt><dt>non-authoritative, <a class="indexterm" href="NetworkBrowsing.html#id372827">Behavior of Cross-Subnet Browsing</a></dt><dt>non-LDAP</dt><dd><dl><dt>backend, <a class="indexterm" href="samba-bdc.html#id354424">Features and Benefits</a></dt></dl></dd><dt>non-member Windows client, <a class="indexterm" href="passdb.html#id375648">Mapping User Identifiers between MS Windows and UNIX</a></dt><dt>non-PostScript, <a class="indexterm" href="CUPS-printing.html#id419165">CUPS Also Uses PPDs for Non-PostScript Printers</a>, <a class="indexterm" href="CUPS-printing.html#id422005">PostScript Printer Descriptions for Non-PostScript Printers</a></dt><dt>non-PostScript printers, <a class="indexterm" href="CUPS-printing.html#id420169">Prefilters</a>, <a class="indexterm" href="CUPS-printing.html#id429175">Foomatic Database-Generated PPDs</a></dt><dt>nonhierarchical, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a></dt><dt>nontransitive, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a></dt><dt>normal color, <a class="indexterm" href="CUPS-printing.html#id421357">The Role of cupsomatic/foomatic</a></dt><dt>normal user, <a class="indexterm" href="NetCommand.html#id387484">Administering User Rights and Privileges</a></dt><dt>not domain member, <a class="indexterm" href="StandAloneServer.html#id362296">Background</a></dt><dt>not domain members, <a class="indexterm" href="StandAloneServer.html">Standalone Servers</a></dt><dt>not part of domain, <a class="indexterm" href="NetworkBrowsing.html#id371282">WINS Server Configuration</a></dt><dt>not stored anywhere, <a class="indexterm" href="passdb.html#id375454">Advantages of Encrypted Passwords</a></dt><dt>not transitive, <a class="indexterm" href="InterdomainTrusts.html#id405489">NT4-Style Domain Trusts with Windows 2000</a></dt><dt>Novell, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a>, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a></dt><dt>Novell eDirectory server, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>NSS, <a class="indexterm" href="StandAloneServer.html#id362296">Background</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="passdb.html#id379822">ldapsam</a>, <a class="indexterm" href="passdb.html#id380104">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="passdb.html#id381139">Accounts and Groups Management</a>, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id392312">IDMAP_RID with Winbind</a>, <a class="indexterm" href="winbind.html#id434945">Features and Benefits</a>, <a class="indexterm" href="winbind.html#id435346">What Winbind Provides</a>, <a class="indexterm" href="winbind.html#id435636">How Winbind Works</a>, <a class="indexterm" href="winbind.html#id435805">Name Service Switch</a>, <a class="indexterm" href="winbind.html#id438194">Configure Winbind and PAM</a>, <a class="indexterm" href="winbind.html#id438782">Conclusion</a></dt><dt>nsswitch.conf, <a class="indexterm" href="ServerType.html#id348806">Share-Level Security</a></dt><dt>nss_ldap, <a class="indexterm" href="samba-bdc.html#id356586">Example Configuration</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id393417">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a></dt><dt>nss_winbind.so.1, <a class="indexterm" href="winbind.html#id436613">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a></dt><dt>NT domain, <a class="indexterm" href="winbind.html#id435346">What Winbind Provides</a></dt><dt>NT groups, <a class="indexterm" href="domain-member.html#id360028">Why Is This Better Than security = server?</a>, <a class="indexterm" href="groupmapping.html#id383950">Default Users, Groups, and Relative Identifiers</a></dt><dt>NT migration scripts, <a class="indexterm" href="passdb.html#id379822">ldapsam</a></dt><dt>NT password, <a class="indexterm" href="passdb.html#id378089">Listing User and Machine Accounts</a></dt><dt>NT Server Manager, <a class="indexterm" href="AccessControls.html#id398322">Windows NT4 Workstation/Server</a></dt><dt>NT-controlled domain, <a class="indexterm" href="InterdomainTrusts.html#id405306">Samba as the Trusting Domain</a></dt><dt>NT-encrypted password, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>NT-encrypted passwords, <a class="indexterm" href="passdb.html#id374464">Backward Compatibility Account Storage Systems</a></dt><dt>NT4, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a></dt><dt>NT4 Domain, <a class="indexterm" href="idmapper.html#id390321">Standalone Samba Server</a></dt><dt>NT4 domain, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="winbind.html#id434945">Features and Benefits</a></dt><dt>NT4 domain members, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a></dt><dt>NT4 style policy updates, <a class="indexterm" href="PolicyMgmt.html#id441101">Managing Account/User Policies</a></dt><dt>NT4 User Manager for Domains, <a class="indexterm" href="rights.html#id394300">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>NT4-style, <a class="indexterm" href="InterdomainTrusts.html#id405489">NT4-Style Domain Trusts with Windows 2000</a></dt><dt>NT4-style domain, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a></dt><dt>NT4-style domains, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a></dt><dt>Nt4sp6ai.exe, <a class="indexterm" href="PolicyMgmt.html#id440493">Windows NT4-Style Policy Files</a></dt><dt>NTConfig.POL, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a>, <a class="indexterm" href="domain-member.html#id357484">Features and Benefits</a>, <a class="indexterm" href="PolicyMgmt.html#id440369">Windows 9x/ME Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id440664">Registry Spoiling</a>, <a class="indexterm" href="PolicyMgmt.html#id440699">MS Windows 200x/XP Professional Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id440878">Administration of Windows 200x/XP Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id441101">Managing Account/User Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id441316">Samba Editreg Toolset</a>, <a class="indexterm" href="ProfileMgmt.html#id444459">MS Windows NT4 Workstation</a>, <a class="indexterm" href="NT4Migration.html#id460257">Samba-3 Implementation Choices</a></dt><dt>ntconfig.pol, <a class="indexterm" href="PolicyMgmt.html#id440493">Windows NT4-Style Policy Files</a></dt><dt>ntdrivers.tdb, <a class="indexterm" href="classicalprinting.html#prt-modeset">Setting Device Modes on New Printers</a>, <a class="indexterm" href="CUPS-printing.html#id427930">The Printing *.tdb Files</a></dt><dd><dl><dt>(see also TDB)</dt></dl></dd><dt>ntforms.tdb, <a class="indexterm" href="classicalprinting.html#prt-modeset">Setting Device Modes on New Printers</a>, <a class="indexterm" href="CUPS-printing.html#id427930">The Printing *.tdb Files</a></dt><dd><dl><dt>(see also TDB)</dt></dl></dd><dt>NTFS, <a class="indexterm" href="ChangeNotes.html#id366486">User and Group Changes</a>, <a class="indexterm" href="AccessControls.html#id396164">MS Windows NTFS Comparison with UNIX File Systems</a></dt><dt>NTLMv2, <a class="indexterm" href="securing-samba.html#id403614">NTLMv2 Security</a></dt><dt>ntlm_auth, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></dt><dt>ntprinters.tdb, <a class="indexterm" href="classicalprinting.html#prt-modeset">Setting Device Modes on New Printers</a>, <a class="indexterm" href="CUPS-printing.html#id427930">The Printing *.tdb Files</a></dt><dd><dl><dt>(see also TDB)</dt></dl></dd><dt>NTUser.DAT, <a class="indexterm" href="PolicyMgmt.html#id441316">Samba Editreg Toolset</a>, <a class="indexterm" href="ProfileMgmt.html#id444102">Mandatory Profiles</a>, <a class="indexterm" href="NT4Migration.html#id460257">Samba-3 Implementation Choices</a></dt><dt>NTuser.DAT, <a class="indexterm" href="ProfileMgmt.html#id443041">Windows NT4 Workstation</a>, <a class="indexterm" href="ProfileMgmt.html#id443680">Sharing Profiles between Windows 9x/Me and NT4/200x/XP Workstations</a>, <a class="indexterm" href="NT4Migration.html#id459645">Profile Migration/Creation</a></dt><dt>NTuser.MAN, <a class="indexterm" href="ProfileMgmt.html#id443041">Windows NT4 Workstation</a></dt><dt>NTUser.MAN, <a class="indexterm" href="ProfileMgmt.html#id444102">Mandatory Profiles</a></dt><dt>NT_STATUS_LOGON_FAILURE, <a class="indexterm" href="upgrading-to-3.0.html#id457871">Changes in Behavior</a></dt><dt>NT_STATUS_UNSUCCESSFUL, <a class="indexterm" href="classicalprinting.html#id412744">Running rpcclient with adddriver</a></dt><dt>null shell, <a class="indexterm" href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a></dt><dt>NX, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a></dt></dl></div><div class="indexdiv"><h3>O</h3><dl><dt>object class, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a></dt><dt>object class declaration, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a></dt><dt>object module dependencies, <a class="indexterm" href="winbind.html#id436613">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a></dt><dt>ObjectClass, <a class="indexterm" href="passdb.html#id380104">Schema and Relationship to the RFC 2307 posixAccount</a></dt><dt>ObjectClasses, <a class="indexterm" href="passdb.html#id380104">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="passdb.html#id380315">OpenLDAP Configuration</a></dt><dt>obtuse complexity, <a class="indexterm" href="NT4Migration.html#id459433">Server Share and Directory Layout</a></dt><dt>office server, <a class="indexterm" href="FastStart.html#id344787">Secure Read-Write File and Print Server</a></dt><dt>OID, <a class="indexterm" href="passdb.html#id380104">Schema and Relationship to the RFC 2307 posixAccount</a></dt><dt>old sambaAccount, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a></dt><dt>Omni, <a class="indexterm" href="CUPS-printing.html#id429010">Driver Development Outside</a></dt><dt>on the fly, <a class="indexterm" href="domain-member.html#id359063">Windows NT4 Client</a></dt><dt>on-the-fly, <a class="indexterm" href="idmapper.html#id391274">Primary Domain Controller</a></dt><dt>on-the-fly logon scripts, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>on-the-fly policy files, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>one direction, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a></dt><dt>one domain, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a></dt><dt>one-way trust, <a class="indexterm" href="InterdomainTrusts.html#id404795">Interdomain Trust Facilities</a></dt><dt>only one WINS server, <a class="indexterm" href="NetworkBrowsing.html#id371282">WINS Server Configuration</a></dt><dt>OpenGFS, <a class="indexterm" href="SambaHA.html#id452727">The Distributed File System Challenge</a></dt><dt>OpenLDAP, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a>, <a class="indexterm" href="samba-bdc.html#id355488">LDAP Configuration Notes</a>, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a>, <a class="indexterm" href="ChangeNotes.html#id367059">LDAP Changes in Samba-3.0.23</a>, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a>, <a class="indexterm" href="passdb.html#id380053">Supported LDAP Servers</a>, <a class="indexterm" href="passdb.html#id380104">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="passdb.html#id380315">OpenLDAP Configuration</a>, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>OpenLDAP backend, <a class="indexterm" href="passdb.html#id374464">Backward Compatibility Account Storage Systems</a></dt><dt>OpenSSL, <a class="indexterm" href="SWAT.html#id461421">Securing SWAT through SSL</a>, <a class="indexterm" href="ch-ldap-tls.html#s1-config-ldap-tls-certs">Generating the Certificate Authority</a></dt><dt>operating costs, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>operating system search path, <a class="indexterm" href="SWAT.html#id460910">Locating the SWAT File</a></dt><dt>oplock, <a class="indexterm" href="SambaHA.html#id452727">The Distributed File System Challenge</a></dt><dt>oplock break, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a>, <a class="indexterm" href="locking.html#id401522">Beware of Force User</a></dt><dt>oplock handling, <a class="indexterm" href="SambaHA.html#id452850">Restrictive Constraints on Distributed File Systems</a></dt><dt>oplock mechanism, <a class="indexterm" href="locking.html#id401603">Advanced Samba Oplocks Parameters</a></dt><dt>oplock messages, <a class="indexterm" href="SambaHA.html#id453044">Required Modifications to Samba</a></dt><dt>oplock parameters, <a class="indexterm" href="locking.html#id401603">Advanced Samba Oplocks Parameters</a></dt><dt>oplocks, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>oplocks disabled, <a class="indexterm" href="locking.html#id401436">Multiuser Databases</a></dt><dt>oplocks management, <a class="indexterm" href="locking.html#id401473">PDM Data Shares</a></dt><dt>opportunistic locking, <a class="indexterm" href="locking.html#id400544">Features and Benefits</a>, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>Opportunistic locking, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>optional, <a class="indexterm" href="pam.html#id446697">Anatomy of /etc/pam.d Entries</a></dt><dt>ordinary connection, <a class="indexterm" href="InterdomainTrusts.html#id405306">Samba as the Trusting Domain</a></dt><dt>Organization for the Advancement of Structured Information Standards (see OASIS)</dt><dt>organizational directory, <a class="indexterm" href="domain-member.html#ads-create-machine-account">Create the Computer Account</a></dt><dt>organizational unit, <a class="indexterm" href="domain-member.html#ads-create-machine-account">Create the Computer Account</a> (see OU)</dt><dt>os level, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a></dt><dt>OSS/Free Software, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a></dt><dt>other, <a class="indexterm" href="AccessControls.html#id396582">File and Directory Access Control</a></dt><dt>output duplexing, <a class="indexterm" href="CUPS-printing.html#id420346">pstops</a></dt><dt>outside threat, <a class="indexterm" href="securing-samba.html#id402949">Using Host-Based Protection</a></dt><dt>own home directory, <a class="indexterm" href="securing-samba.html#id403740">Why Can Users Access Other Users' Home Directories?</a></dt><dt>ownership, <a class="indexterm" href="AccessControls.html#id398747">Viewing File Ownership</a></dt><dt>ownership cost, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>ownership rights, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a></dt></dl></div><div class="indexdiv"><h3>P</h3><dl><dt>p-node, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a></dt><dt>package, <a class="indexterm" href="install.html#id342835">Example Configuration</a></dt><dt>packages, <a class="indexterm" href="install.html#id341745">Obtaining and Installing Samba</a></dt><dt>packet sniffer, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a></dt><dt>packet trace, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a></dt><dt>PADL, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id392871">IDMAP Storage in LDAP Using Winbind</a></dt><dt>PADL Software, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a></dt><dt>page description languages (see PDL)</dt><dt>pager program, <a class="indexterm" href="classicalprinting.html#id406941">Simple Print Configuration</a></dt><dt>page_log, <a class="indexterm" href="CUPS-printing.html#id429949">The page_log File Syntax</a></dt><dt>paid-for support, <a class="indexterm" href="ch46.html">Samba Support</a></dt><dt>PAM, <a class="indexterm" href="StandAloneServer.html#id362296">Background</a>, <a class="indexterm" href="passdb.html#id374464">Backward Compatibility Account Storage Systems</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="passdb.html#id379357">Plaintext</a>, <a class="indexterm" href="passdb.html#id379822">ldapsam</a>, <a class="indexterm" href="winbind.html#id435636">How Winbind Works</a>, <a class="indexterm" href="winbind.html#id436017">Pluggable Authentication Modules</a>, <a class="indexterm" href="winbind.html#id436389">Requirements</a>, <a class="indexterm" href="winbind.html#id436531">Testing Things Out</a>, <a class="indexterm" href="winbind.html#id436613">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a>, <a class="indexterm" href="winbind.html#id438194">Configure Winbind and PAM</a>, <a class="indexterm" href="winbind.html#id438782">Conclusion</a>, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a>, <a class="indexterm" href="pam.html#id446577">Technical Discussion</a></dt><dt>PAM authentication module, <a class="indexterm" href="pam.html#id446627">PAM Configuration Syntax</a></dt><dt>PAM configuration, <a class="indexterm" href="winbind.html#id436389">Requirements</a></dt><dt>PAM management, <a class="indexterm" href="pam.html">PAM-Based Distributed Authentication</a></dt><dt>PAM module, <a class="indexterm" href="winbind.html#id436987">NSS Winbind on AIX</a></dt><dt>PAM modules, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>PAM-capable, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>pam-devel, <a class="indexterm" href="winbind.html#id436613">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a></dt><dt>PAM-enabled, <a class="indexterm" href="winbind.html#id435346">What Winbind Provides</a>, <a class="indexterm" href="pam.html">PAM-Based Distributed Authentication</a>, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>PAM-specific tokens, <a class="indexterm" href="pam.html#id446627">PAM Configuration Syntax</a></dt><dt>pam_krb5.so, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>pam_ldap, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a></dt><dt>pam_ldap.so, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>pam_mkhomedir, <a class="indexterm" href="winbind.html#id438353">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>pam_ncp_auth.so, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>pam_pwdb.so, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>pam_securetty.so, <a class="indexterm" href="winbind.html#id438353">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>pam_smbpass.so, <a class="indexterm" href="pam.html">PAM-Based Distributed Authentication</a>, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>pam_smbpasswd.so, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>pam_smb_auth.so, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>pam_unix.so, <a class="indexterm" href="winbind.html#id438353">Linux/FreeBSD-Specific PAM Configuration</a>, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>pam_unix2.so, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>pam_userdb.so, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>pam_winbind.so, <a class="indexterm" href="winbind.html#id436017">Pluggable Authentication Modules</a>, <a class="indexterm" href="winbind.html#id438194">Configure Winbind and PAM</a>, <a class="indexterm" href="winbind.html#id438353">Linux/FreeBSD-Specific PAM Configuration</a>, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>parameters, <a class="indexterm" href="classicalprinting.html#id407391">Rapid Configuration Validation</a></dt><dt>paranoid, <a class="indexterm" href="winbind.html#id437506">Starting and Testing the winbindd Daemon</a></dt><dt>passdb, <a class="indexterm" href="samba-bdc.html#id357055">Machine Accounts Keep Expiring</a></dt><dt>passdb backend, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a>, <a class="indexterm" href="ChangeNotes.html#id366943">Group Mapping Changes in Samba-3.0.23</a>, <a class="indexterm" href="passdb.html">Account Information Databases</a>, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a>, <a class="indexterm" href="passdb.html#id376958">The smbpasswd Tool</a>, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a>, <a class="indexterm" href="passdb.html#id378376">Deleting Accounts</a>, <a class="indexterm" href="passdb.html#id379677">tdbsam</a>, <a class="indexterm" href="groupmapping.html#id383950">Default Users, Groups, and Relative Identifiers</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id391274">Primary Domain Controller</a>, <a class="indexterm" href="rights.html#id395344">The Administrator Domain SID</a>, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a>, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a>, <a class="indexterm" href="upgrading-to-3.0.html#id458516">New Suffix for Searching</a></dt><dt>passdb backends, <a class="indexterm" href="passdb.html#id379428">smbpasswd: Encrypted Password Database</a>, <a class="indexterm" href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a></dt><dt>passed across the network, <a class="indexterm" href="passdb.html#id375454">Advantages of Encrypted Passwords</a></dt><dt>passwd, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="passdb.html#id376958">The smbpasswd Tool</a>, <a class="indexterm" href="winbind.html#id435805">Name Service Switch</a>, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>password, <a class="indexterm" href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a>, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a>, <a class="indexterm" href="InterdomainTrusts.html#id405306">Samba as the Trusting Domain</a>, <a class="indexterm" href="pam.html#id446697">Anatomy of /etc/pam.d Entries</a></dt><dd><dl><dt>plaintext, <a class="indexterm" href="samba-pdc.html#id353296">The Special Case of Windows 9x/Me</a></dt></dl></dd><dt>password aging, <a class="indexterm" href="passdb.html#acctmgmttools">Account Management Tools</a></dt><dt>password assigned, <a class="indexterm" href="InterdomainTrusts.html#id404714">Completing an NT4 Domain Trust</a></dt><dt>password backend, <a class="indexterm" href="StandAloneServer.html#RefDocServer">Reference Documentation Server</a>, <a class="indexterm" href="passdb.html#id378089">Listing User and Machine Accounts</a></dt><dt>password backends, <a class="indexterm" href="passdb.html">Account Information Databases</a></dt><dt>password change facility, <a class="indexterm" href="SWAT.html#xinetd">Enabling SWAT for Use</a></dt><dt>password database, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a>, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></dt><dt>password encryption, <a class="indexterm" href="passdb.html#id379357">Plaintext</a></dt><dt>password expiration, <a class="indexterm" href="passdb.html#id379428">smbpasswd: Encrypted Password Database</a></dt><dt>password expired, <a class="indexterm" href="passdb.html#id378456">Changing User Accounts</a></dt><dt>password history, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></dt><dt>password management, <a class="indexterm" href="winbind.html#id436017">Pluggable Authentication Modules</a></dt><dt>password prompt, <a class="indexterm" href="passdb.html#id375454">Advantages of Encrypted Passwords</a></dt><dt>password scheme, <a class="indexterm" href="passdb.html#id375167">Important Notes About Security</a></dt><dt>password server, <a class="indexterm" href="ServerType.html#id349552">Server Security (User Level Security)</a>, <a class="indexterm" href="domain-member.html#id360288">Configure smb.conf</a></dt><dt>password uniqueness, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></dt><dt>passwords, <a class="indexterm" href="winbind.html#id435268">Introduction</a></dt><dt>patch, <a class="indexterm" href="bugreport.html#id466047">Patches</a></dt><dt>path specified, <a class="indexterm" href="domain-member.html#id361872">Adding Machine to Domain Fails</a></dt><dt>pauses, <a class="indexterm" href="speed.html#id469650">Samba Performance is Very Slow</a></dt><dt>PBM, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></dt><dt>PCL, <a class="indexterm" href="CUPS-printing.html#gdipost">GDI on Windows, PostScript on UNIX</a>, <a class="indexterm" href="CUPS-printing.html#id418358">Windows Drivers, GDI, and EMF</a>, <a class="indexterm" href="CUPS-printing.html#id418524">UNIX Printfile Conversion and GUI Basics</a>, <a class="indexterm" href="CUPS-printing.html#id423093">Printing with Interface Scripts</a>, <a class="indexterm" href="CUPS-printing.html#id423310">Driver Execution on the Server</a>, <a class="indexterm" href="CUPS-printing.html#id423671">Network PostScript RIP</a></dt><dt>pdbedit, <a class="indexterm" href="FastStart.html#id346350">Example: Engineering Office</a>, <a class="indexterm" href="passdb.html#acctmgmttools">Account Management Tools</a>, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a>, <a class="indexterm" href="passdb.html#id377980">User Account Management</a>, <a class="indexterm" href="passdb.html#id378089">Listing User and Machine Accounts</a>, <a class="indexterm" href="passdb.html#id378299">Adding User Accounts</a>, <a class="indexterm" href="passdb.html#id378376">Deleting Accounts</a>, <a class="indexterm" href="passdb.html#id378456">Changing User Accounts</a>, <a class="indexterm" href="passdb.html#TOSHARG-acctflags">Account Flags Management</a>, <a class="indexterm" href="passdb.html#id379189">Account Import/Export</a>, <a class="indexterm" href="rights.html#id395344">The Administrator Domain SID</a>, <a class="indexterm" href="PolicyMgmt.html#id441429">Samba PDC</a>, <a class="indexterm" href="upgrading-to-3.0.html#id456203">Quick Migration Guide</a>, <a class="indexterm" href="upgrading-to-3.0.html#id457959">Passdb Backends and Authentication</a>, <a class="indexterm" href="NT4Migration.html#id459730">Steps in Migration Process</a>, <a class="indexterm" href="NT4Migration.html#id460257">Samba-3 Implementation Choices</a></dt><dt>pdb_ldap, <a class="indexterm" href="samba-bdc.html#id357252">Can I Do This All with LDAP?</a></dt><dt>PDC, <a class="indexterm" href="ServerType.html#id348971">Domain Security Mode (User-Level Security)</a>, <a class="indexterm" href="ServerType.html#id349156">Example Configuration</a>, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a>, <a class="indexterm" href="samba-pdc.html#id353648">Security Mode and Master Browsers</a>, <a class="indexterm" href="samba-bdc.html#id354424">Features and Benefits</a>, <a class="indexterm" href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a>, <a class="indexterm" href="samba-bdc.html#id355248">Example PDC Configuration</a>, <a class="indexterm" href="samba-bdc.html#id355488">LDAP Configuration Notes</a>, <a class="indexterm" href="samba-bdc.html#id355874">What Qualifies a Domain Controller on the Network?</a>, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a>, <a class="indexterm" href="samba-bdc.html#id356586">Example Configuration</a>, <a class="indexterm" href="samba-bdc.html#id357103">Can Samba Be a Backup Domain Controller to an NT4 PDC?</a>, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="domain-member.html#id360028">Why Is This Better Than security = server?</a>, <a class="indexterm" href="domain-member.html#id361872">Adding Machine to Domain Fails</a>, <a class="indexterm" href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id369843">Domain Browsing Configuration</a>, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a>, <a class="indexterm" href="passdb.html#id375454">Advantages of Encrypted Passwords</a>, <a class="indexterm" href="passdb.html#id379677">tdbsam</a>, <a class="indexterm" href="passdb.html#id381461">LDAP Special Attributes for sambaSamAccounts</a>, <a class="indexterm" href="groupmapping.html#id382834">Discussion</a>, <a class="indexterm" href="NetCommand.html#id385377">Overview</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id391274">Primary Domain Controller</a>, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a>, <a class="indexterm" href="InterdomainTrusts.html#id405306">Samba as the Trusting Domain</a>, <a class="indexterm" href="CUPS-printing.html#id425806">cupsaddsmb with a Samba PDC</a>, <a class="indexterm" href="winbind.html#id435524">Handling of Foreign SIDs</a>, <a class="indexterm" href="winbind.html#id435683">Microsoft Remote Procedure Calls</a>, <a class="indexterm" href="winbind.html#id436017">Pluggable Authentication Modules</a>, <a class="indexterm" href="winbind.html#id436226">Result Caching</a>, <a class="indexterm" href="winbind.html#id436282">Introduction</a>, <a class="indexterm" href="winbind.html#id437279">Join the Samba Server to the PDC Domain</a>, <a class="indexterm" href="winbind.html#id437506">Starting and Testing the winbindd Daemon</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a>, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a>, <a class="indexterm" href="NT4Migration.html#id459247">Domain Layout</a>, <a class="indexterm" href="problems.html#id465036">Getting Mailing List Help</a>, <a class="indexterm" href="speed.html#id469561">Corrupt tdb Files</a></dt><dt>PDF, <a class="indexterm" href="CUPS-printing.html#id416919">Simple smb.conf Settings for CUPS</a>, <a class="indexterm" href="CUPS-printing.html#id418358">Windows Drivers, GDI, and EMF</a>, <a class="indexterm" href="CUPS-printing.html#id418988">PostScript Printer Description (PPD) Specification</a>, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a>, <a class="indexterm" href="CUPS-printing.html#id420169">Prefilters</a>, <a class="indexterm" href="CUPS-printing.html#id422583">Examples for Filtering Chains</a></dt><dt>pdf, <a class="indexterm" href="CUPS-printing.html#id419826">MIME Type Conversion Rules</a></dt><dt>PDF distilling, <a class="indexterm" href="CUPS-printing.html#id418988">PostScript Printer Description (PPD) Specification</a></dt><dt>PDF filter, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dt>pdftops, <a class="indexterm" href="CUPS-printing.html#id419826">MIME Type Conversion Rules</a>, <a class="indexterm" href="CUPS-printing.html#id422583">Examples for Filtering Chains</a></dt><dt>pdftosocket, <a class="indexterm" href="CUPS-printing.html#id422583">Examples for Filtering Chains</a></dt><dt>PDL, <a class="indexterm" href="CUPS-printing.html#gdipost">GDI on Windows, PostScript on UNIX</a>, <a class="indexterm" href="CUPS-printing.html#post-and-ghost">PostScript and Ghostscript</a>, <a class="indexterm" href="CUPS-printing.html#id418988">PostScript Printer Description (PPD) Specification</a></dt><dt>PDM, <a class="indexterm" href="locking.html#id401473">PDM Data Shares</a></dt><dt>peer domain, <a class="indexterm" href="InterdomainTrusts.html#id404991">Configuring Samba NT-Style Domain Trusts</a></dt><dt>Peer node, <a class="indexterm" href="NetworkBrowsing.html#id371626">Static WINS Entries</a></dt><dt>per-share access control, <a class="indexterm" href="AccessControls.html#id398176">Access Controls on Shares</a></dt><dt>performance, <a class="indexterm" href="largefile.html">Handling Large Directories</a>, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>performance advantage, <a class="indexterm" href="locking.html#id400544">Features and Benefits</a></dt><dt>performance degradation, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>performance enhancement, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>performance improvement, <a class="indexterm" href="locking.html#id401395">Slow and/or Unreliable Networks</a></dt><dt>performance-based, <a class="indexterm" href="passdb.html#id379677">tdbsam</a></dt><dt>performed as root, <a class="indexterm" href="rights.html#id394300">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>perimeter firewall, <a class="indexterm" href="securing-samba.html#id402802">Features and Benefits</a></dt><dt>permanent changes, <a class="indexterm" href="NT4Migration.html#id460257">Samba-3 Implementation Choices</a></dt><dt>Permanent name, <a class="indexterm" href="NetworkBrowsing.html#id371626">Static WINS Entries</a></dt><dt>permissions, <a class="indexterm" href="securing-samba.html#id403740">Why Can Users Access Other Users' Home Directories?</a>, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dd><dl><dt>file/directory ACLs, <a class="indexterm" href="AccessControls.html#id398643">Managing UNIX Permissions Using NT Security Dialogs</a></dt><dt>share, <a class="indexterm" href="AccessControls.html#id397181">Share Definition Access Controls</a></dt><dt>share ACLs, <a class="indexterm" href="AccessControls.html#id398176">Access Controls on Shares</a></dt><dt>UNIX file and directory, <a class="indexterm" href="AccessControls.html#id395980">Features and Benefits</a></dt></dl></dd><dt>Permissions, <a class="indexterm" href="AccessControls.html#id398424">Windows 200x/XP</a></dt><dt>permissions and controls, <a class="indexterm" href="AccessControls.html#id395980">Features and Benefits</a></dt><dt>PGP, <a class="indexterm" href="compiling.html#id466494">Verifying Samba's PGP Signature</a></dt><dt>phasing out NetBIOS, <a class="indexterm" href="NetworkBrowsing.html#netdiscuss">Discussion</a></dt><dt>Photo-CD, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></dt><dt>physical locations, <a class="indexterm" href="msdfs.html#id405843">Features and Benefits</a></dt><dt>physical network transport layer, <a class="indexterm" href="integrate-ms-networks.html#id448831">/etc/hosts</a></dt><dt>PID, <a class="indexterm" href="bugreport.html#id465932">Attaching to a Running Process</a></dt><dt>pid directory, <a class="indexterm" href="cfgsmarts.html#id453922">Multiple Server Hosting</a></dt><dt>ping, <a class="indexterm" href="NT4Migration.html#id459247">Domain Layout</a>, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>pipe device, <a class="indexterm" href="AccessControls.html#id396582">File and Directory Access Control</a></dt><dt>PJL, <a class="indexterm" href="CUPS-printing.html#id423671">Network PostScript RIP</a>, <a class="indexterm" href="CUPS-printing.html#id425100">Windows CUPS PostScript Driver Versus Adobe Driver</a>, <a class="indexterm" href="CUPS-printing.html#id429818">Adobe and CUPS PostScript Drivers for Windows Clients</a></dt><dt>PJL-header, <a class="indexterm" href="CUPS-printing.html#id429818">Adobe and CUPS PostScript Drivers for Windows Clients</a></dt><dt>plague network users, <a class="indexterm" href="ClientConfig.html#id363569">TCP/IP Configuration</a></dt><dt>plain-text</dt><dd><dl><dt>passwords, <a class="indexterm" href="ServerType.html#id349792">Password Checking</a></dt></dl></dd><dt>plaintext, <a class="indexterm" href="passdb.html#id374464">Backward Compatibility Account Storage Systems</a></dt><dt>plaintext authentication, <a class="indexterm" href="passdb.html#id374464">Backward Compatibility Account Storage Systems</a></dt><dt>plaintext password, <a class="indexterm" href="samba-pdc.html#id353296">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="samba-bdc.html#id357154">How Do I Replicate the smbpasswd File?</a></dt><dt>plaintext passwords, <a class="indexterm" href="passdb.html#passdbtech">Technical Information</a>, <a class="indexterm" href="passdb.html#id375167">Important Notes About Security</a></dt><dt>platforms, <a class="indexterm" href="Portability.html">Portability</a></dt><dt>PLP, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>Pluggable Authentication Modules (see PAM)</dt><dt>PNG, <a class="indexterm" href="CUPS-printing.html#id418848">Ghostscript: The Software RIP for Non-PostScript Printers</a>, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></dt><dt>PNM, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></dt><dt>point 'n' print, <a class="indexterm" href="CUPS-printing.html#id417810">Installation of Windows Client Drivers</a>, <a class="indexterm" href="CUPS-printing.html#id425295">Run cupsaddsmb (Quiet Mode)</a>, <a class="indexterm" href="CUPS-printing.html#id426920">Manual Driver Installation in 15 Steps</a></dt><dt>Point'n'Print, <a class="indexterm" href="classicalprinting.html#id406449">Features and Benefits</a>, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a>, <a class="indexterm" href="classicalprinting.html#id410712">Point'n'Print Client Drivers on Samba Servers</a>, <a class="indexterm" href="classicalprinting.html#id412629">smbclient to Confirm Driver Installation</a></dt><dt>point'n'print, <a class="indexterm" href="CUPS-printing.html#id418073">Driver Upload Methods</a>, <a class="indexterm" href="CUPS-printing.html#id421357">The Role of cupsomatic/foomatic</a>, <a class="indexterm" href="CUPS-printing.html#id425962">Installing the PostScript Driver on a Client</a></dt><dt>Poledit, <a class="indexterm" href="PolicyMgmt.html#id440878">Administration of Windows 200x/XP Policies</a></dt><dt>poledit.exe, <a class="indexterm" href="PolicyMgmt.html#id440199">Creating and Managing System Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id440493">Windows NT4-Style Policy Files</a>, <a class="indexterm" href="PolicyMgmt.html#id440878">Administration of Windows 200x/XP Policies</a></dt><dt>Policies, <a class="indexterm" href="PolicyMgmt.html#id440199">Creating and Managing System Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id441101">Managing Account/User Policies</a></dt><dt>policies, <a class="indexterm" href="NT4Migration.html#id460257">Samba-3 Implementation Choices</a></dt><dt>policy editor, <a class="indexterm" href="PolicyMgmt.html#id440199">Creating and Managing System Policies</a></dt><dt>Policy Editor, <a class="indexterm" href="PolicyMgmt.html#id440493">Windows NT4-Style Policy Files</a></dt><dt>policy file , <a class="indexterm" href="PolicyMgmt.html#id441101">Managing Account/User Policies</a></dt><dt>policy files, <a class="indexterm" href="domain-member.html#id357484">Features and Benefits</a></dt><dt>policy settings, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a></dt><dt>port 135, <a class="indexterm" href="NetworkBrowsing.html#id370644">Multiple Interfaces</a></dt><dt>Port 135/TCP, <a class="indexterm" href="securing-samba.html#firewallports">Using a Firewall</a></dt><dt>port 137, <a class="indexterm" href="NetworkBrowsing.html#id370644">Multiple Interfaces</a>, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>Port 137/UDP, <a class="indexterm" href="securing-samba.html#firewallports">Using a Firewall</a></dt><dt>port 138, <a class="indexterm" href="NetworkBrowsing.html#id370644">Multiple Interfaces</a></dt><dt>Port 138/UDP, <a class="indexterm" href="securing-samba.html#firewallports">Using a Firewall</a></dt><dt>port 139, <a class="indexterm" href="NetworkBrowsing.html#id370644">Multiple Interfaces</a></dt><dt>Port 139/TCP, <a class="indexterm" href="securing-samba.html#firewallports">Using a Firewall</a></dt><dt>port 445, <a class="indexterm" href="NetworkBrowsing.html#id370644">Multiple Interfaces</a></dt><dt>Port 445/TCP, <a class="indexterm" href="securing-samba.html#firewallports">Using a Firewall</a></dt><dt>ports, <a class="indexterm" href="classicalprinting.html#id407208">Verifying Configuration with testparm</a>, <a class="indexterm" href="problems.html#id464556">Ethereal</a></dt><dt>POSIX, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a>, <a class="indexterm" href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="passdb.html#id381139">Accounts and Groups Management</a>, <a class="indexterm" href="NetCommand.html#id385906">Adding or Creating a New Group</a></dt><dt>POSIX account, <a class="indexterm" href="passdb.html#id377980">User Account Management</a>, <a class="indexterm" href="NetCommand.html#id387104">UNIX and Windows User Management</a></dt><dt>POSIX ACLs, <a class="indexterm" href="AccessControls.html#id396582">File and Directory Access Control</a>, <a class="indexterm" href="AccessControls.html#id396956">Protecting Directories and Files from Deletion</a></dt><dt>POSIX ACLS, <a class="indexterm" href="NT4Migration.html#id460257">Samba-3 Implementation Choices</a></dt><dt>POSIX identity, <a class="indexterm" href="passdb.html#id376419">Caution Regarding LDAP and Samba</a></dt><dt>POSIX locks, <a class="indexterm" href="SambaHA.html#id452913">Server Pool Communications</a></dt><dt>POSIX semantics, <a class="indexterm" href="SambaHA.html#id452913">Server Pool Communications</a></dt><dt>POSIX user accounts, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a></dt><dt>posixAccount, <a class="indexterm" href="passdb.html#id380104">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="passdb.html#id380315">OpenLDAP Configuration</a></dt><dt>posixGroup, <a class="indexterm" href="passdb.html#id380315">OpenLDAP Configuration</a>, <a class="indexterm" href="passdb.html#id381139">Accounts and Groups Management</a></dt><dt>PostScript, <a class="indexterm" href="CUPS-printing.html#id416919">Simple smb.conf Settings for CUPS</a>, <a class="indexterm" href="CUPS-printing.html#id418184">Advanced Intelligent Printing with PostScript Driver Download</a>, <a class="indexterm" href="CUPS-printing.html#gdipost">GDI on Windows, PostScript on UNIX</a>, <a class="indexterm" href="CUPS-printing.html#id418358">Windows Drivers, GDI, and EMF</a>, <a class="indexterm" href="CUPS-printing.html#id418524">UNIX Printfile Conversion and GUI Basics</a>, <a class="indexterm" href="CUPS-printing.html#post-and-ghost">PostScript and Ghostscript</a>, <a class="indexterm" href="CUPS-printing.html#id418988">PostScript Printer Description (PPD) Specification</a>, <a class="indexterm" href="CUPS-printing.html#id419056">Using Windows-Formatted Vendor PPDs</a>, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a>, <a class="indexterm" href="CUPS-printing.html#id420169">Prefilters</a>, <a class="indexterm" href="CUPS-printing.html#id420346">pstops</a>, <a class="indexterm" href="CUPS-printing.html#id422005">PostScript Printer Descriptions for Non-PostScript Printers</a>, <a class="indexterm" href="CUPS-printing.html#id422583">Examples for Filtering Chains</a>, <a class="indexterm" href="CUPS-printing.html#id423310">Driver Execution on the Server</a>, <a class="indexterm" href="CUPS-printing.html#id423671">Network PostScript RIP</a>, <a class="indexterm" href="CUPS-printing.html#id423905">CUPS: A &#8220;Magical Stone&#8221;?</a>, <a class="indexterm" href="CUPS-printing.html#id423941">PostScript Drivers with No Major Problems, Even in Kernel
+Mode</a>, <a class="indexterm" href="CUPS-printing.html#id424414">CUPS &#8220;PostScript Driver for Windows NT/200x/XP&#8221;</a></dt><dd><dl><dt>(see also Ghostscript)</dt><dt>RIP, <a class="indexterm" href="CUPS-printing.html#post-and-ghost">PostScript and Ghostscript</a></dt></dl></dd><dt>PostScript driver, <a class="indexterm" href="classicalprinting.html#id412436">Installing Driver Files into [print$]</a></dt><dt>PostScript interpreter, <a class="indexterm" href="CUPS-printing.html#post-and-ghost">PostScript and Ghostscript</a></dt><dt>PostScript Printer Description (see PPD)</dt><dt>PostScript printers, <a class="indexterm" href="CUPS-printing.html#id430701">Printing from CUPS to Windows-Attached Printers</a></dt><dt>potential master browsers, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></dt><dt>potential printer, <a class="indexterm" href="classicalprinting.html#id411183">[print$] Stanza Parameters</a></dt><dt>Power Users, <a class="indexterm" href="rights.html#id395514">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>powerful, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a></dt><dt>PPD, <a class="indexterm" href="classicalprinting.html#id412436">Installing Driver Files into [print$]</a>, <a class="indexterm" href="CUPS-printing.html#post-and-ghost">PostScript and Ghostscript</a>, <a class="indexterm" href="CUPS-printing.html#id418988">PostScript Printer Description (PPD) Specification</a>, <a class="indexterm" href="CUPS-printing.html#id419165">CUPS Also Uses PPDs for Non-PostScript Printers</a>, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a>, <a class="indexterm" href="CUPS-printing.html#id421644">&#8220;Raw&#8221; Printing</a>, <a class="indexterm" href="CUPS-printing.html#id422005">PostScript Printer Descriptions for Non-PostScript Printers</a>, <a class="indexterm" href="CUPS-printing.html#id423751">PPDs for Non-PS Printers on UNIX</a>, <a class="indexterm" href="CUPS-printing.html#id423788">PPDs for Non-PS Printers on Windows</a>, <a class="indexterm" href="CUPS-printing.html#id423905">CUPS: A &#8220;Magical Stone&#8221;?</a>, <a class="indexterm" href="CUPS-printing.html#id425962">Installing the PostScript Driver on a Client</a>, <a class="indexterm" href="CUPS-printing.html#id429818">Adobe and CUPS PostScript Drivers for Windows Clients</a>, <a class="indexterm" href="CUPS-printing.html#id430701">Printing from CUPS to Windows-Attached Printers</a></dt><dd><dl><dt>CUPS (see CUPS-PPD)</dt></dl></dd><dt>PPD-aware, <a class="indexterm" href="CUPS-printing.html#post-and-ghost">PostScript and Ghostscript</a></dt><dt>PPDs, <a class="indexterm" href="CUPS-printing.html#id419056">Using Windows-Formatted Vendor PPDs</a>, <a class="indexterm" href="CUPS-printing.html#id421357">The Role of cupsomatic/foomatic</a>, <a class="indexterm" href="CUPS-printing.html#id428901">The Grand Unification Achieved</a></dt><dt>PPP, <a class="indexterm" href="securing-samba.html#id403151">Using Interface Protection</a></dt><dt>precedence, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></dt><dt>preferred master, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a></dt><dt>prefilter, <a class="indexterm" href="CUPS-printing.html#id420757">imagetops and imagetoraster</a></dt><dt>prefilters, <a class="indexterm" href="CUPS-printing.html#id420169">Prefilters</a></dt><dt>primary domain controller, <a class="indexterm" href="cfgsmarts.html#id455267">Multiple Virtual Server Hosting</a></dt><dt>primary group, <a class="indexterm" href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a></dt><dt>Primary Logon, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a></dt><dt>Primary WINS Server, <a class="indexterm" href="NetworkBrowsing.html#id371282">WINS Server Configuration</a></dt><dt>print, <a class="indexterm" href="classicalprinting.html#id407208">Verifying Configuration with testparm</a></dt><dd><dl><dt>queue, <a class="indexterm" href="install.html#id341822">Configuration File Syntax</a></dt><dt>spooler, <a class="indexterm" href="install.html#id341822">Configuration File Syntax</a></dt></dl></dd><dt>print accounting, <a class="indexterm" href="classicalprinting.html#id406449">Features and Benefits</a></dt><dt>print command, <a class="indexterm" href="classicalprinting.html#id409507">Print Commands</a></dt><dt>print commands, <a class="indexterm" href="classicalprinting.html#id410090">Custom Print Commands</a></dt><dt>print configuration, <a class="indexterm" href="classicalprinting.html#id406652">Technical Introduction</a>, <a class="indexterm" href="classicalprinting.html#id407208">Verifying Configuration with testparm</a></dt><dt>print environment, <a class="indexterm" href="classicalprinting.html#id406941">Simple Print Configuration</a></dt><dt>print filtering, <a class="indexterm" href="classicalprinting.html#id406652">Technical Introduction</a></dt><dt>print job, <a class="indexterm" href="classicalprinting.html#id410090">Custom Print Commands</a></dt><dt>print jobs, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>print processing, <a class="indexterm" href="classicalprinting.html#id406652">Technical Introduction</a></dt><dt>print queue, <a class="indexterm" href="classicalprinting.html#id410712">Point'n'Print Client Drivers on Samba Servers</a>, <a class="indexterm" href="classicalprinting.html#id412629">smbclient to Confirm Driver Installation</a>, <a class="indexterm" href="classicalprinting.html#id413159">Specific Driver Name Flexibility</a>, <a class="indexterm" href="CUPS-printing.html#id421049">CUPS Backends</a></dt><dt>print quota, <a class="indexterm" href="CUPS-printing.html#id418184">Advanced Intelligent Printing with PostScript Driver Download</a></dt><dt>print server, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="classicalprinting.html#id406449">Features and Benefits</a></dt><dt>print service, <a class="indexterm" href="classicalprinting.html#id406449">Features and Benefits</a></dt><dt>print spooling, <a class="indexterm" href="winbind.html#id435683">Microsoft Remote Procedure Calls</a></dt><dt>print spooling system, <a class="indexterm" href="CUPS-printing.html#id416476">Overview</a></dt><dt>print statistics, <a class="indexterm" href="CUPS-printing.html#id418184">Advanced Intelligent Printing with PostScript Driver Download</a></dt><dt>print subsystem, <a class="indexterm" href="classicalprinting.html#id406652">Technical Introduction</a>, <a class="indexterm" href="classicalprinting.html#id409507">Print Commands</a></dt><dt>print test page, <a class="indexterm" href="classicalprinting.html#id413407">First Client Driver Installation</a></dt><dt>printcap, <a class="indexterm" href="install.html#id341822">Configuration File Syntax</a>, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a>, <a class="indexterm" href="classicalprinting.html#ptrsect">The [printers] Section</a></dt><dt>Printcap, <a class="indexterm" href="CUPS-printing.html#id416588">Basic CUPS Support Configuration</a></dt><dt>printcap name, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dt>PrintcapFormat, <a class="indexterm" href="CUPS-printing.html#id416588">Basic CUPS Support Configuration</a></dt><dt>printer attributes publishing, <a class="indexterm" href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a></dt><dt>printer default permissions, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>printer driver, <a class="indexterm" href="classicalprinting.html#id410866">The Obsoleted [printer$] Section</a>, <a class="indexterm" href="classicalprinting.html#id410977">Creating the [print$] Share</a>, <a class="indexterm" href="CUPS-printing.html#id416919">Simple smb.conf Settings for CUPS</a></dt><dt>printer driver data, <a class="indexterm" href="classicalprinting.html#prt-modeset">Setting Device Modes on New Printers</a></dt><dt>printer driver file, <a class="indexterm" href="classicalprinting.html#id410866">The Obsoleted [printer$] Section</a></dt><dt>printer driver files, <a class="indexterm" href="classicalprinting.html#id412629">smbclient to Confirm Driver Installation</a></dt><dt>printer drivers, <a class="indexterm" href="classicalprinting.html#id410712">Point'n'Print Client Drivers on Samba Servers</a>, <a class="indexterm" href="CUPS-printing.html#id428901">The Grand Unification Achieved</a></dt><dt>printer icon, <a class="indexterm" href="classicalprinting.html#id412953">Check Samba for Driver Recognition</a></dt><dt>printer management, <a class="indexterm" href="NetCommand.html#id385377">Overview</a></dt><dt>printer management system, <a class="indexterm" href="CUPS-printing.html#id416476">Overview</a></dt><dt>printer migration, <a class="indexterm" href="NetCommand.html#id385377">Overview</a></dt><dt>printer monitor, <a class="indexterm" href="speed.html#id469650">Samba Performance is Very Slow</a></dt><dt>printer objects, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>Printer Pooling, <a class="indexterm" href="classicalprinting.html#id415466">Samba and Printer Ports</a></dt><dt>printer queue, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>printer share, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>printer shares , <a class="indexterm" href="classicalprinting.html#id407208">Verifying Configuration with testparm</a>, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>printer$ share, <a class="indexterm" href="classicalprinting.html#id410866">The Obsoleted [printer$] Section</a></dt><dt>printers, <a class="indexterm" href="install.html#id341822">Configuration File Syntax</a>, <a class="indexterm" href="StandAloneServer.html#id362210">Features and Benefits</a></dt><dt>Printers, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>printers admin, <a class="indexterm" href="rights.html#id394618">Description of Privileges</a></dt><dt>Printers and Faxes, <a class="indexterm" href="classicalprinting.html#id412953">Check Samba for Driver Recognition</a></dt><dt>printers available, <a class="indexterm" href="NetworkBrowsing.html#id367475">What Is Browsing?</a></dt><dt>printers section, <a class="indexterm" href="classicalprinting.html#ptrsect">The [printers] Section</a></dt><dt>printing, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>printing behavior, <a class="indexterm" href="classicalprinting.html#id406846">Printing-Related Configuration Parameters</a></dt><dt>printing calls, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>printing now, <a class="indexterm" href="speed.html#id469650">Samba Performance is Very Slow</a></dt><dt>printing support, <a class="indexterm" href="classicalprinting.html#id406449">Features and Benefits</a>, <a class="indexterm" href="classicalprinting.html#id406652">Technical Introduction</a></dt><dt>printing system, <a class="indexterm" href="classicalprinting.html#id406652">Technical Introduction</a></dt><dt>printing systems, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a></dt><dt>printing-related settings, <a class="indexterm" href="classicalprinting.html#id407208">Verifying Configuration with testparm</a></dt><dt>printing.tdb, <a class="indexterm" href="classicalprinting.html#prt-modeset">Setting Device Modes on New Printers</a>, <a class="indexterm" href="CUPS-printing.html#id427930">The Printing *.tdb Files</a></dt><dd><dl><dt>(see also TDB)</dt></dl></dd><dt>PrintPro (see ESP Print Pro)</dt><dt>private dir, <a class="indexterm" href="cfgsmarts.html#id453922">Multiple Server Hosting</a></dt><dt>private groups, <a class="indexterm" href="groupmapping.html#id383149">Warning: User Private Group Problems</a></dt><dt>private key, <a class="indexterm" href="SWAT.html#id461421">Securing SWAT through SSL</a></dt><dt>private network, <a class="indexterm" href="securing-samba.html#id402714">Introduction</a></dt><dt>private networks, <a class="indexterm" href="securing-samba.html#id402949">Using Host-Based Protection</a></dt><dt>private/MACHINE.SID, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a></dt><dt>private/secrets.tdb, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a></dt><dt>privilege, <a class="indexterm" href="groupmapping.html#id383838">Applicable Only to Versions Earlier than 3.0.11</a>, <a class="indexterm" href="rights.html#id394618">Description of Privileges</a></dt><dt>privilege management, <a class="indexterm" href="groupmapping.html#id383730">Important Administrative Information</a>, <a class="indexterm" href="NetCommand.html#id387484">Administering User Rights and Privileges</a></dt><dt>privilege model, <a class="indexterm" href="rights.html#id394039">Rights Management Capabilities</a></dt><dt>privilege-granting applications, <a class="indexterm" href="pam.html#id446577">Technical Discussion</a></dt><dt>privileged accounts, <a class="indexterm" href="rights.html#id394300">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>privileges, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a>, <a class="indexterm" href="domain-member.html#id358911">Windows 200x/XP Professional Client</a>, <a class="indexterm" href="groupmapping.html#id383838">Applicable Only to Versions Earlier than 3.0.11</a>, <a class="indexterm" href="rights.html#id394039">Rights Management Capabilities</a>, <a class="indexterm" href="rights.html#id394618">Description of Privileges</a>, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a>, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>privileges assigned, <a class="indexterm" href="rights.html#id394300">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>problem report, <a class="indexterm" href="ch46.html#id470724">Free Support</a></dt><dt>problem resolution, <a class="indexterm" href="ch46.html">Samba Support</a></dt><dt>problematic print, <a class="indexterm" href="classicalprinting.html#id406652">Technical Introduction</a></dt><dt>Process data management, <a class="indexterm" href="locking.html#id401473">PDM Data Shares</a></dt><dt>professional support, <a class="indexterm" href="ch46.html#id470724">Free Support</a></dt><dt>profile, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a>, <a class="indexterm" href="samba-pdc.html#id353296">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a>, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a>, <a class="indexterm" href="passdb.html#passdbtech">Technical Information</a></dt><dt>profile access rights, <a class="indexterm" href="ProfileMgmt.html#id444230">Creating and Managing Group Profiles</a></dt><dt>profile contents, <a class="indexterm" href="ProfileMgmt.html#id443680">Sharing Profiles between Windows 9x/Me and NT4/200x/XP Workstations</a></dt><dt>profile directory, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a></dt><dt>profile migration tool, <a class="indexterm" href="ProfileMgmt.html#id444230">Creating and Managing Group Profiles</a></dt><dt>profile path, <a class="indexterm" href="samba-bdc.html#id355248">Example PDC Configuration</a>, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a>, <a class="indexterm" href="ProfileMgmt.html#id443041">Windows NT4 Workstation</a></dt><dt>profile sharing, <a class="indexterm" href="ProfileMgmt.html#id443680">Sharing Profiles between Windows 9x/Me and NT4/200x/XP Workstations</a></dt><dt>Profile Type, <a class="indexterm" href="ProfileMgmt.html#id442177">Disabling Roaming Profile Support</a></dt><dt>ProfilePath, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a></dt><dt>profiles, <a class="indexterm" href="samba-pdc.html#id353296">The Special Case of Windows 9x/Me</a></dt><dt>Profiles, <a class="indexterm" href="PolicyMgmt.html#id440199">Creating and Managing System Policies</a></dt><dt>project, <a class="indexterm" href="ch46.html#id470724">Free Support</a></dt><dt>promiscuous mode, <a class="indexterm" href="problems.html#id464695">The Windows Network Monitor</a></dt><dt>promote, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a></dt><dt>promoted, <a class="indexterm" href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a></dt><dt>propagate, <a class="indexterm" href="samba-bdc.html#id354424">Features and Benefits</a></dt><dt>Properties, <a class="indexterm" href="ClientConfig.html#id364780">MS Windows Me</a>, <a class="indexterm" href="ClientConfig.html#id365774">Domain Logon Configuration: Windows 9x/Me</a></dt><dt>protect directories, <a class="indexterm" href="AccessControls.html#id396956">Protecting Directories and Files from Deletion</a></dt><dt>protect files, <a class="indexterm" href="AccessControls.html#id396956">Protecting Directories and Files from Deletion</a></dt><dt>protection against attackers, <a class="indexterm" href="securing-samba.html#id403481">Using IPC$ Share-Based Denials </a></dt><dt>protocol stack settings, <a class="indexterm" href="ClientConfig.html#id364254">MS Windows 2000</a></dt><dt>provided services, <a class="indexterm" href="ch46.html">Samba Support</a></dt><dt>provisioned, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></dt><dt>pstops, <a class="indexterm" href="CUPS-printing.html#id420169">Prefilters</a>, <a class="indexterm" href="CUPS-printing.html#id420346">pstops</a>, <a class="indexterm" href="CUPS-printing.html#id422583">Examples for Filtering Chains</a>, <a class="indexterm" href="CUPS-printing.html#id429818">Adobe and CUPS PostScript Drivers for Windows Clients</a></dt><dt>pstoraster, <a class="indexterm" href="CUPS-printing.html#id420506">pstoraster</a>, <a class="indexterm" href="CUPS-printing.html#id422269">cupsomatic/foomatic-rip Versus Native CUPS Printing</a>, <a class="indexterm" href="CUPS-printing.html#id429818">Adobe and CUPS PostScript Drivers for Windows Clients</a></dt><dt>publish printers, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>publishing printers, <a class="indexterm" href="classicalprinting.html#id407391">Rapid Configuration Validation</a></dt><dt>PulseAudio, <a class="indexterm" href="AdvancedNetworkManagement.html#id439596">Remote Management with ThinLinc</a></dt><dt>punching, <a class="indexterm" href="CUPS-printing.html#id420346">pstops</a></dt><dt>purchase support, <a class="indexterm" href="ch46.html#id470724">Free Support</a></dt><dt>put, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>pvcreate, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt></dl></div><div class="indexdiv"><h3>Q</h3><dl><dt>QNX, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>qualified problem, <a class="indexterm" href="ch46.html#id470724">Free Support</a></dt><dt>queue control, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>quota controls, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a></dt></dl></div><div class="indexdiv"><h3>R</h3><dl><dt>RAID, <a class="indexterm" href="Backup.html#id451712">BackupPC</a></dt><dt>random machine account password, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></dt><dt>range, <a class="indexterm" href="NetCommand.html#id387104">UNIX and Windows User Management</a></dt><dt>range of hosts, <a class="indexterm" href="securing-samba.html#id402949">Using Host-Based Protection</a></dt><dt>RAP, <a class="indexterm" href="NetCommand.html#id385728">UNIX and Windows Group Management</a></dt><dt>raster, <a class="indexterm" href="CUPS-printing.html#id420169">Prefilters</a>, <a class="indexterm" href="CUPS-printing.html#id429175">Foomatic Database-Generated PPDs</a></dt><dt>raster driver, <a class="indexterm" href="CUPS-printing.html#id419200">The CUPS Filtering Architecture</a></dt><dt>raster drivers, <a class="indexterm" href="CUPS-printing.html#id420506">pstoraster</a></dt><dt>raster image processor (see RIP)</dt><dt>raster images, <a class="indexterm" href="CUPS-printing.html#id418524">UNIX Printfile Conversion and GUI Basics</a></dt><dt>rasterization, <a class="indexterm" href="CUPS-printing.html#id420506">pstoraster</a>, <a class="indexterm" href="CUPS-printing.html#id422269">cupsomatic/foomatic-rip Versus Native CUPS Printing</a></dt><dt>rastertoalps, <a class="indexterm" href="CUPS-printing.html#id420837">rasterto [printers specific]</a></dt><dt>rastertobj, <a class="indexterm" href="CUPS-printing.html#id420837">rasterto [printers specific]</a></dt><dt>rastertoepson, <a class="indexterm" href="CUPS-printing.html#id420837">rasterto [printers specific]</a>, <a class="indexterm" href="CUPS-printing.html#id422583">Examples for Filtering Chains</a></dt><dt>rastertoescp, <a class="indexterm" href="CUPS-printing.html#id420837">rasterto [printers specific]</a></dt><dt>rastertohp, <a class="indexterm" href="CUPS-printing.html#id420837">rasterto [printers specific]</a></dt><dt>rastertopcl, <a class="indexterm" href="CUPS-printing.html#id420837">rasterto [printers specific]</a></dt><dt>rastertoprinter, <a class="indexterm" href="CUPS-printing.html#id420837">rasterto [printers specific]</a></dt><dt>rastertosomething, <a class="indexterm" href="CUPS-printing.html#id422269">cupsomatic/foomatic-rip Versus Native CUPS Printing</a></dt><dt>rastertoturboprint, <a class="indexterm" href="CUPS-printing.html#id420837">rasterto [printers specific]</a></dt><dt>raw mode, <a class="indexterm" href="CUPS-printing.html#id421744">application/octet-stream Printing</a></dt><dt>raw print, <a class="indexterm" href="CUPS-printing.html#id425884">cupsaddsmb Flowchart</a></dt><dt>raw printers, <a class="indexterm" href="CUPS-printing.html#id416476">Overview</a></dt><dt>raw printing, <a class="indexterm" href="FastStart.html#id344449">Anonymous Print Server</a>, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="CUPS-printing.html#id417596">Raw Print Serving: Vendor Drivers on Windows Clients</a>, <a class="indexterm" href="CUPS-printing.html#cups-raw">Explicitly Enable &#8220;raw&#8221; Printing for application/octet-stream</a></dt><dt>raw SMB, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a></dt><dt>raw SMB over TCP/IP, <a class="indexterm" href="NetworkBrowsing.html#id368472">TCP/IP without NetBIOS</a></dt><dt>rawprinter, <a class="indexterm" href="CUPS-printing.html#id421644">&#8220;Raw&#8221; Printing</a></dt><dt>rcp, <a class="indexterm" href="Backup.html#id451875">Rsync</a></dt><dt>rdesktop, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a></dt><dt>rdesktop/RDP, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a></dt><dt>read, <a class="indexterm" href="AccessControls.html#id396582">File and Directory Access Control</a></dt><dt>read directory into memory, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>read only, <a class="indexterm" href="VFS.html#fakeperms">fake_perms</a></dt><dd><dl><dt>server, <a class="indexterm" href="FastStart.html#anon-ro">Anonymous Read-Only Document Server</a></dt></dl></dd><dt>Read-ahead, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>read-only, <a class="indexterm" href="StandAloneServer.html#id362210">Features and Benefits</a>, <a class="indexterm" href="StandAloneServer.html#RefDocServer">Reference Documentation Server</a></dt><dt>read-only access, <a class="indexterm" href="idmapper.html#id391492">Backup Domain Controller</a>, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></dt><dt>read-only files, <a class="indexterm" href="StandAloneServer.html#id362210">Features and Benefits</a></dt><dt>read-write access, <a class="indexterm" href="classicalprinting.html#id410866">The Obsoleted [printer$] Section</a></dt><dt>realm, <a class="indexterm" href="ServerType.html#id349419">ADS Security Mode (User-Level Security)</a>, <a class="indexterm" href="samba-bdc.html#id356060">NetBIOS Over TCP/IP Disabled</a>, <a class="indexterm" href="domain-member.html#id360288">Configure smb.conf</a>, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a>, <a class="indexterm" href="idmapper.html#id392312">IDMAP_RID with Winbind</a>, <a class="indexterm" href="idmapper.html#id392871">IDMAP Storage in LDAP Using Winbind</a></dt><dt>rebooted, <a class="indexterm" href="ClientConfig.html#id365265">Joining a Domain: Windows 2000/XP Professional</a>, <a class="indexterm" href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a></dt><dt>rebooting server, <a class="indexterm" href="rights.html#id394618">Description of Privileges</a></dt><dt>recompiling, <a class="indexterm" href="cfgsmarts.html#id453922">Multiple Server Hosting</a></dt><dt>reconfiguration, <a class="indexterm" href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a></dt><dt>record locking, <a class="indexterm" href="locking.html#id400630">Discussion</a></dt><dt>recycle, <a class="indexterm" href="VFS.html#id433348">recycle</a></dt><dt>recycle bin, <a class="indexterm" href="VFS.html#id432421">Discussion</a></dt><dt>recycle directory, <a class="indexterm" href="VFS.html#id433348">recycle</a></dt><dt>recycle:exclude, <a class="indexterm" href="VFS.html#id433348">recycle</a></dt><dt>recycle:exclude_dir, <a class="indexterm" href="VFS.html#id433348">recycle</a></dt><dt>recycle:keeptree, <a class="indexterm" href="VFS.html#id433348">recycle</a></dt><dt>recycle:maxsize, <a class="indexterm" href="VFS.html#id433348">recycle</a></dt><dt>recycle:noversions, <a class="indexterm" href="VFS.html#id433348">recycle</a></dt><dt>recycle:repository, <a class="indexterm" href="VFS.html#id433348">recycle</a></dt><dt>recycle:subdir_mode, <a class="indexterm" href="VFS.html#id433348">recycle</a></dt><dt>recycle:touch, <a class="indexterm" href="VFS.html#id433348">recycle</a></dt><dt>recycle:versions, <a class="indexterm" href="VFS.html#id433348">recycle</a></dt><dt>Red Hat Cluster Manager, <a class="indexterm" href="SambaHA.html#id453168">High-Availability Server Products</a></dt><dt>Red Hat Linux, <a class="indexterm" href="samba-bdc.html#id355488">LDAP Configuration Notes</a>, <a class="indexterm" href="domain-member.html#id358802">On-the-Fly Creation of Machine Trust Accounts</a>, <a class="indexterm" href="groupmapping.html#id383149">Warning: User Private Group Problems</a></dt><dt>redirect, <a class="indexterm" href="samba-bdc.html#id356586">Example Configuration</a></dt><dt>redirection, <a class="indexterm" href="winbind.html#id435346">What Winbind Provides</a></dt><dt>redirector, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>redundancy, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a></dt><dt>reference documents, <a class="indexterm" href="StandAloneServer.html#RefDocServer">Reference Documentation Server</a></dt><dt>refusing connection, <a class="indexterm" href="securing-samba.html#id403151">Using Interface Protection</a></dt><dt>regedit.exe, <a class="indexterm" href="ProfileMgmt.html#id444323">MS Windows 9x/Me</a></dt><dt>regedt32, <a class="indexterm" href="ProfileMgmt.html#id444459">MS Windows NT4 Workstation</a></dt><dt>regedt32.exe, <a class="indexterm" href="PolicyMgmt.html#id441392">Windows NT4/200x</a></dt><dt>register driver files, <a class="indexterm" href="classicalprinting.html#id412744">Running rpcclient with adddriver</a></dt><dt>register NetBIOS names, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a></dt><dt>registered, <a class="indexterm" href="NetworkBrowsing.html#id371035">WINS: The Windows Internetworking Name Server</a>, <a class="indexterm" href="classicalprinting.html#id412953">Check Samba for Driver Recognition</a></dt><dt>registers, <a class="indexterm" href="NetworkBrowsing.html#id369843">Domain Browsing Configuration</a></dt><dt>registry, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a>, <a class="indexterm" href="passdb.html#passdbtech">Technical Information</a>, <a class="indexterm" href="locking.html#id400544">Features and Benefits</a>, <a class="indexterm" href="PolicyMgmt.html#id440199">Creating and Managing System Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id440369">Windows 9x/ME Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id440699">MS Windows 200x/XP Professional Policies</a>, <a class="indexterm" href="ProfileMgmt.html#id444323">MS Windows 9x/Me</a></dt><dt>registry change, <a class="indexterm" href="passdb.html#id375167">Important Notes About Security</a></dt><dt>registry keys, <a class="indexterm" href="ProfileMgmt.html#id444297">Default Profile for Windows Users</a></dt><dt>registry settings, <a class="indexterm" href="PolicyMgmt.html#id441101">Managing Account/User Policies</a></dt><dt>regulations, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a></dt><dt>rejoin, <a class="indexterm" href="NetCommand.html#id388358">Managing Security Identifiers (SIDS)</a></dt><dt>relationship password, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></dt><dt>relative identifier, <a class="indexterm" href="passdb.html#id379428">smbpasswd: Encrypted Password Database</a> (see RID)</dt><dt>Relative Identifier (see RID)</dt><dt>Relative Identifiers (see RID)</dt><dt>reliability, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>Remote Access Dial-In User Service (see RADIUS)</dt><dt>remote announce, <a class="indexterm" href="NetworkBrowsing.html#id372672">Cross-Subnet Browsing</a></dt><dt>remote browse sync, <a class="indexterm" href="NetworkBrowsing.html#id372672">Cross-Subnet Browsing</a></dt><dt>remote desktop capabilities, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a></dt><dt>remote desktop management, <a class="indexterm" href="AdvancedNetworkManagement.html#id439232">Remote Desktop Management</a></dt><dt>remote domain, <a class="indexterm" href="InterdomainTrusts.html#id404624">Creating an NT4 Domain Trust</a>, <a class="indexterm" href="InterdomainTrusts.html#id404714">Completing an NT4 Domain Trust</a>, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></dt><dt>remote login, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a></dt><dt>remote management, <a class="indexterm" href="NetCommand.html">Remote and Local Management: The Net Command</a>, <a class="indexterm" href="winbind.html#id435683">Microsoft Remote Procedure Calls</a></dt><dt>Remote Procedure Call (see RPC)</dt><dt>Remote Procedure Call System Service (see RPCSS)</dt><dt>remote profile, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a></dt><dt>remote segment, <a class="indexterm" href="NetworkBrowsing.html#id370948">Use of the Remote Browse Sync Parameter</a>, <a class="indexterm" href="NT4Migration.html#id459247">Domain Layout</a></dt><dt>Remote X, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a></dt><dt>Remote X protocol, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a></dt><dt>remote-update protocol, <a class="indexterm" href="Backup.html#id451875">Rsync</a></dt><dt>rename, <a class="indexterm" href="AccessControls.html#id396461">Managing Directories</a></dt><dt>render, <a class="indexterm" href="CUPS-printing.html#id417596">Raw Print Serving: Vendor Drivers on Windows Clients</a></dt><dt>rendering, <a class="indexterm" href="CUPS-printing.html#id422269">cupsomatic/foomatic-rip Versus Native CUPS Printing</a></dt><dt>repeated intervals, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a></dt><dt>replicate, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a>, <a class="indexterm" href="passdb.html#id379428">smbpasswd: Encrypted Password Database</a></dt><dt>replicated, <a class="indexterm" href="ServerType.html#id348242">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="samba-bdc.html#id355820">Active Directory Domain Control</a>, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a>, <a class="indexterm" href="PolicyMgmt.html#id440699">MS Windows 200x/XP Professional Policies</a></dt><dt>replicated SYSVOL, <a class="indexterm" href="PolicyMgmt.html#id440699">MS Windows 200x/XP Professional Policies</a></dt><dt>replication, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="samba-bdc.html#id355488">LDAP Configuration Notes</a></dt><dd><dl><dt>browse lists, <a class="indexterm" href="NetworkBrowsing.html#id372672">Cross-Subnet Browsing</a></dt><dt>SAM, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a>, <a class="indexterm" href="samba-bdc.html#id354424">Features and Benefits</a>, <a class="indexterm" href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a>, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a>, <a class="indexterm" href="samba-bdc.html#id357103">Can Samba Be a Backup Domain Controller to an NT4 PDC?</a>, <a class="indexterm" href="samba-bdc.html#id357154">How Do I Replicate the smbpasswd File?</a></dt><dt>WINS, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a>, <a class="indexterm" href="NetworkBrowsing.html#id371282">WINS Server Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#id371576">WINS Replication</a></dt></dl></dd><dt>replication protocols, <a class="indexterm" href="NetworkBrowsing.html#id371282">WINS Server Configuration</a></dt><dt>repository, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a></dt><dt>requesting payment, <a class="indexterm" href="ch46.html#id470724">Free Support</a></dt><dt>required, <a class="indexterm" href="pam.html#id446697">Anatomy of /etc/pam.d Entries</a></dt><dt>requisite, <a class="indexterm" href="pam.html#id446697">Anatomy of /etc/pam.d Entries</a></dt><dt>research, <a class="indexterm" href="Backup.html#id451626">Discussion of Backup Solutions</a></dt><dt>resizing, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>resolution, <a class="indexterm" href="CUPS-printing.html#id421357">The Role of cupsomatic/foomatic</a></dt><dt>resolution of NetBIOS names, <a class="indexterm" href="NetworkBrowsing.html">Network Browsing</a></dt><dt>resolve NetBIOS names, <a class="indexterm" href="NetworkBrowsing.html#id370405">Making Samba the Domain Master</a></dt><dt>resolver functions, <a class="indexterm" href="winbind.html#id435805">Name Service Switch</a></dt><dt>resource failover, <a class="indexterm" href="SambaHA.html#id453168">High-Availability Server Products</a></dt><dt>resource kit, <a class="indexterm" href="PolicyMgmt.html#id440878">Administration of Windows 200x/XP Policies</a>, <a class="indexterm" href="ProfileMgmt.html#profilemigrn">Windows NT4 Profile Management Tools</a></dt><dt>resource-based exclusion, <a class="indexterm" href="securing-samba.html#id402802">Features and Benefits</a></dt><dt>response, <a class="indexterm" href="idmapper.html#id392312">IDMAP_RID with Winbind</a></dt><dt>restrict DNS, <a class="indexterm" href="NetworkBrowsing.html#id371983">Name Resolution Order</a></dt><dt>reviewers, <a class="indexterm" href="cfgsmarts.html">Advanced Configuration Techniques</a></dt><dt>revoke privileges, <a class="indexterm" href="rights.html#id394300">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>RFC 1001, <a class="indexterm" href="DNSDHCP.html#id471220">Example Configuration</a></dt><dt>RFC 1002, <a class="indexterm" href="DNSDHCP.html#id471220">Example Configuration</a></dt><dt>RFC 1179, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>RFC 2307, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a></dt><dt>RFC 2307., <a class="indexterm" href="passdb.html#id380104">Schema and Relationship to the RFC 2307 posixAccount</a></dt><dt>RFC 2830, <a class="indexterm" href="ch-ldap-tls.html#s1-intro-ldap-tls">Introduction</a></dt><dt>rfc2307bis, <a class="indexterm" href="idmapper.html#id393417">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a></dt><dt>RFC2830, <a class="indexterm" href="samba-bdc.html#id355488">LDAP Configuration Notes</a></dt><dt>RFCs, <a class="indexterm" href="problems.html">Analyzing and Solving Samba Problems</a></dt><dt>rich database backend, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a></dt><dt>rich directory backend, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a></dt><dt>RID, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="ChangeNotes.html#id366486">User and Group Changes</a>, <a class="indexterm" href="groupmapping.html#id382834">Discussion</a>, <a class="indexterm" href="groupmapping.html#id383950">Default Users, Groups, and Relative Identifiers</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id391274">Primary Domain Controller</a>, <a class="indexterm" href="idmapper.html#id392312">IDMAP_RID with Winbind</a>, <a class="indexterm" href="rights.html#id395344">The Administrator Domain SID</a>, <a class="indexterm" href="winbind.html#id436158">User and Group ID Allocation</a>, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a></dt><dt>RID 500, <a class="indexterm" href="rights.html#id395344">The Administrator Domain SID</a></dt><dt>RID base, <a class="indexterm" href="idmapper.html#id391274">Primary Domain Controller</a></dt><dt>right to join domain, <a class="indexterm" href="rights.html#id394618">Description of Privileges</a></dt><dt>rights, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a>, <a class="indexterm" href="samba-pdc.html#id353296">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="domain-member.html#id361222">Possible Errors</a>, <a class="indexterm" href="rights.html#id394039">Rights Management Capabilities</a></dt><dt>rights and privilege, <a class="indexterm" href="NetCommand.html#id387484">Administering User Rights and Privileges</a></dt><dt>rights and privileges, <a class="indexterm" href="groupmapping.html#id383730">Important Administrative Information</a>, <a class="indexterm" href="rights.html#id395344">The Administrator Domain SID</a></dt><dt>rights assigned, <a class="indexterm" href="rights.html#id394039">Rights Management Capabilities</a>, <a class="indexterm" href="rights.html#id394300">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>RIP, <a class="indexterm" href="CUPS-printing.html#id422005">PostScript Printer Descriptions for Non-PostScript Printers</a></dt><dt>rlogind, <a class="indexterm" href="pam.html#id446697">Anatomy of /etc/pam.d Entries</a></dt><dt>Roaming Profile, <a class="indexterm" href="VFS.html#fakeperms">fake_perms</a></dt><dt>roaming profiles, <a class="indexterm" href="samba-pdc.html#id351870">Preparing for Domain Control</a>, <a class="indexterm" href="ProfileMgmt.html#id441723">Features and Benefits</a>, <a class="indexterm" href="ProfileMgmt.html#id442177">Disabling Roaming Profile Support</a>, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a></dt><dt>rogue machine, <a class="indexterm" href="NetworkBrowsing.html#id373637">Flushing the Samba NetBIOS Name Cache</a></dt><dt>rogue user, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>root, <a class="indexterm" href="domain-member.html#id358911">Windows 200x/XP Professional Client</a>, <a class="indexterm" href="ClientConfig.html#id365265">Joining a Domain: Windows 2000/XP Professional</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>root account, <a class="indexterm" href="rights.html">User Rights and Privileges</a>, <a class="indexterm" href="rights.html#id395344">The Administrator Domain SID</a></dt><dt>root user, <a class="indexterm" href="rights.html#id394300">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>rotate, <a class="indexterm" href="CUPS-printing.html#id418524">UNIX Printfile Conversion and GUI Basics</a></dt><dt>RPC, <a class="indexterm" href="domain-member.html#id360028">Why Is This Better Than security = server?</a>, <a class="indexterm" href="winbind.html#id434945">Features and Benefits</a>, <a class="indexterm" href="winbind.html#id437279">Join the Samba Server to the PDC Domain</a>, <a class="indexterm" href="ProfileMgmt.html#id441766">Roaming Profiles</a></dt><dt>RPC calls, <a class="indexterm" href="winbind.html#id438782">Conclusion</a>, <a class="indexterm" href="SambaHA.html#id452542">The Front-End Challenge</a></dt><dt>RPC modules, <a class="indexterm" href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a></dt><dt>rpc.lockd, <a class="indexterm" href="locking.html#id400630">Discussion</a></dt><dt>rpcclient, <a class="indexterm" href="NetCommand.html">Remote and Local Management: The Net Command</a>, <a class="indexterm" href="classicalprinting.html#id411938">Identifying Driver Files</a>, <a class="indexterm" href="classicalprinting.html#id413159">Specific Driver Name Flexibility</a>, <a class="indexterm" href="CUPS-printing.html#id427799">Troubleshooting Revisited</a>, <a class="indexterm" href="PolicyMgmt.html#id441429">Samba PDC</a></dt><dd><dl><dt>adddriver, <a class="indexterm" href="CUPS-printing.html#id425429">Run cupsaddsmb with Verbose Output</a>, <a class="indexterm" href="CUPS-printing.html#id425560">Understanding cupsaddsmb</a>, <a class="indexterm" href="CUPS-printing.html#id426171">Installing PostScript Driver Files Manually Using rpcclient</a>, <a class="indexterm" href="CUPS-printing.html#id426497">Understanding the rpcclient man Page</a>, <a class="indexterm" href="CUPS-printing.html#id426709">Requirements for adddriver and setdriver to Succeed</a>, <a class="indexterm" href="CUPS-printing.html#id426920">Manual Driver Installation in 15 Steps</a></dt><dt>enumdrivers, <a class="indexterm" href="CUPS-printing.html#id426171">Installing PostScript Driver Files Manually Using rpcclient</a>, <a class="indexterm" href="CUPS-printing.html#id426920">Manual Driver Installation in 15 Steps</a></dt><dt>enumports, <a class="indexterm" href="CUPS-printing.html#id426171">Installing PostScript Driver Files Manually Using rpcclient</a></dt><dt>enumprinters, <a class="indexterm" href="CUPS-printing.html#id426171">Installing PostScript Driver Files Manually Using rpcclient</a>, <a class="indexterm" href="CUPS-printing.html#id426709">Requirements for adddriver and setdriver to Succeed</a>, <a class="indexterm" href="CUPS-printing.html#id426920">Manual Driver Installation in 15 Steps</a>, <a class="indexterm" href="CUPS-printing.html#id427799">Troubleshooting Revisited</a></dt><dt>getdriver, <a class="indexterm" href="CUPS-printing.html#id426589">Producing an Example by Querying a Windows Box</a>, <a class="indexterm" href="CUPS-printing.html#id426920">Manual Driver Installation in 15 Steps</a></dt><dt>getprinter, <a class="indexterm" href="CUPS-printing.html#id426589">Producing an Example by Querying a Windows Box</a>, <a class="indexterm" href="CUPS-printing.html#id426920">Manual Driver Installation in 15 Steps</a>, <a class="indexterm" href="CUPS-printing.html#id427799">Troubleshooting Revisited</a></dt><dt>setdriver, <a class="indexterm" href="CUPS-printing.html#id424821">Caveats to Be Considered</a>, <a class="indexterm" href="CUPS-printing.html#id425429">Run cupsaddsmb with Verbose Output</a>, <a class="indexterm" href="CUPS-printing.html#id425560">Understanding cupsaddsmb</a>, <a class="indexterm" href="CUPS-printing.html#id426171">Installing PostScript Driver Files Manually Using rpcclient</a>, <a class="indexterm" href="CUPS-printing.html#id426709">Requirements for adddriver and setdriver to Succeed</a>, <a class="indexterm" href="CUPS-printing.html#id426920">Manual Driver Installation in 15 Steps</a></dt></dl></dd><dt>rsh, <a class="indexterm" href="Backup.html#id451712">BackupPC</a></dt><dt>rsync, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a>, <a class="indexterm" href="samba-bdc.html#id357154">How Do I Replicate the smbpasswd File?</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="passdb.html#id379428">smbpasswd: Encrypted Password Database</a>, <a class="indexterm" href="Backup.html#id451712">BackupPC</a>, <a class="indexterm" href="Backup.html#id451875">Rsync</a>, <a class="indexterm" href="compiling.html#id466427">Accessing the Samba Sources via rsync and ftp</a></dt><dt>rsyncd, <a class="indexterm" href="Backup.html#id451712">BackupPC</a></dt><dt>runas, <a class="indexterm" href="classicalprinting.html#id346474">Always Make First Client Connection as root or &#8220;printer admin&#8221;</a></dt><dt>rundll32, <a class="indexterm" href="classicalprinting.html#id346362">Additional Client Driver Installation</a>, <a class="indexterm" href="classicalprinting.html#id414335">Setting Default Print Options for Client Drivers</a>, <a class="indexterm" href="CUPS-printing.html#id426920">Manual Driver Installation in 15 Steps</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id439937">Adding Printers without User Intervention</a></dt></dl></div><div class="indexdiv"><h3>S</h3><dl><dt>SAM, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a>, <a class="indexterm" href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a>, <a class="indexterm" href="samba-bdc.html#id357055">Machine Accounts Keep Expiring</a>, <a class="indexterm" href="samba-bdc.html#id357103">Can Samba Be a Backup Domain Controller to an NT4 PDC?</a>, <a class="indexterm" href="samba-bdc.html#id357154">How Do I Replicate the smbpasswd File?</a>, <a class="indexterm" href="domain-member.html#id357484">Features and Benefits</a>, <a class="indexterm" href="ChangeNotes.html#id366486">User and Group Changes</a>, <a class="indexterm" href="passdb.html#id374464">Backward Compatibility Account Storage Systems</a>, <a class="indexterm" href="passdb.html#id375648">Mapping User Identifiers between MS Windows and UNIX</a>, <a class="indexterm" href="winbind.html#id436226">Result Caching</a></dt><dd><dl><dt>delta file, <a class="indexterm" href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a></dt><dt>replication, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a>, <a class="indexterm" href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a></dt></dl></dd><dt>SAM backend, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a></dt><dd><dl><dt>LDAP, <a class="indexterm" href="samba-bdc.html#id354424">Features and Benefits</a></dt><dt>ldapsam, <a class="indexterm" href="samba-bdc.html#id354424">Features and Benefits</a>, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="passdb.html#id379822">ldapsam</a></dt><dt>ldapsam_compat, <a class="indexterm" href="passdb.html#id374429">Features and Benefits</a></dt><dt>non-LDAP, <a class="indexterm" href="samba-bdc.html#id354424">Features and Benefits</a></dt><dt>smbpasswd, <a class="indexterm" href="passdb.html#id374429">Features and Benefits</a>, <a class="indexterm" href="passdb.html#id379428">smbpasswd: Encrypted Password Database</a></dt><dt>tdbsam, <a class="indexterm" href="samba-bdc.html#id354424">Features and Benefits</a>, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a>, <a class="indexterm" href="passdb.html#id379677">tdbsam</a></dt></dl></dd><dt>Samba 1.9.17, <a class="indexterm" href="NetworkBrowsing.html#id371282">WINS Server Configuration</a></dt><dt>Samba account, <a class="indexterm" href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a></dt><dt>Samba administrator, <a class="indexterm" href="winbind.html#id436282">Introduction</a></dt><dt>Samba backend database, <a class="indexterm" href="domain-member.html#id361872">Adding Machine to Domain Fails</a></dt><dt>Samba daemons, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></dt><dt>Samba differences, <a class="indexterm" href="upgrading-to-3.0.html#oldupdatenotes">Upgrading from Samba-2.x to Samba-3.0.25</a></dt><dt>Samba mailing lists, <a class="indexterm" href="Backup.html#id451585">Features and Benefits</a></dt><dt>Samba private directory, <a class="indexterm" href="domain-member.html#ads-create-machine-account">Create the Computer Account</a></dt><dt>Samba SAM, <a class="indexterm" href="passdb.html#id375648">Mapping User Identifiers between MS Windows and UNIX</a></dt><dt>Samba SAM account, <a class="indexterm" href="domain-member.html#id361872">Adding Machine to Domain Fails</a></dt><dt>Samba SAM account flags, <a class="indexterm" href="passdb.html#TOSHARG-acctflags">Account Flags Management</a></dt><dt>Samba schema, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a></dt><dt>Samba security, <a class="indexterm" href="securing-samba.html#id402802">Features and Benefits</a></dt><dt>Samba-2.2.x LDAP schema, <a class="indexterm" href="passdb.html#id374464">Backward Compatibility Account Storage Systems</a></dt><dt>Samba-3-compatible LDAP backend, <a class="indexterm" href="upgrading-to-3.0.html#id456203">Quick Migration Guide</a></dt><dt>Samba-PDC-LDAP-HOWTO, <a class="indexterm" href="passdb.html#id379822">ldapsam</a></dt><dt>samba-to-samba trusts, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a></dt><dt>samba-vscan, <a class="indexterm" href="VFS.html#id434675">vscan</a></dt><dt>samba.schema, <a class="indexterm" href="passdb.html#id380104">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="passdb.html#id380315">OpenLDAP Configuration</a>, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a></dt><dt>sambaDomain, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a></dt><dt>sambaGroupMapping, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a></dt><dt>sambaHomeDrive, <a class="indexterm" href="passdb.html#id381461">LDAP Special Attributes for sambaSamAccounts</a></dt><dt>sambaHomePath, <a class="indexterm" href="passdb.html#id381461">LDAP Special Attributes for sambaSamAccounts</a></dt><dt>sambaIdmapEntry, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a></dt><dt>sambaLogonScript, <a class="indexterm" href="passdb.html#id381461">LDAP Special Attributes for sambaSamAccounts</a></dt><dt>SambaNTPassword, <a class="indexterm" href="passdb.html#id381244">Security and sambaSamAccount</a></dt><dt>sambaProfilePath, <a class="indexterm" href="passdb.html#id381461">LDAP Special Attributes for sambaSamAccounts</a></dt><dt>SambaSAMAccount, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a>, <a class="indexterm" href="passdb.html#acctmgmttools">Account Management Tools</a>, <a class="indexterm" href="passdb.html#id378299">Adding User Accounts</a>, <a class="indexterm" href="passdb.html#id378376">Deleting Accounts</a>, <a class="indexterm" href="passdb.html#id378456">Changing User Accounts</a>, <a class="indexterm" href="passdb.html#id379677">tdbsam</a></dt><dt>sambaSamAccount, <a class="indexterm" href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="passdb.html#id380104">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="passdb.html#id380315">OpenLDAP Configuration</a>, <a class="indexterm" href="passdb.html#id381139">Accounts and Groups Management</a>, <a class="indexterm" href="passdb.html#id381461">LDAP Special Attributes for sambaSamAccounts</a>, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a></dt><dt>sambaSAMAccount, <a class="indexterm" href="passdb.html#id381244">Security and sambaSamAccount</a></dt><dt>sambaSID, <a class="indexterm" href="ChangeNotes.html#id367059">LDAP Changes in Samba-3.0.23</a></dt><dt>sambaUNIXIdPool, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a></dt><dt>SambaXP conference, <a class="indexterm" href="SambaHA.html#id452277">Technical Discussion</a></dt><dt>samdb interface, <a class="indexterm" href="passdb.html#id379428">smbpasswd: Encrypted Password Database</a></dt><dt>same domain/workgroup, <a class="indexterm" href="cfgsmarts.html#id455267">Multiple Virtual Server Hosting</a></dt><dt>Sarbanes-Oxley, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a></dt><dt>scalability, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="samba-bdc.html#id354424">Features and Benefits</a>, <a class="indexterm" href="passdb.html">Account Information Databases</a>, <a class="indexterm" href="passdb.html#id379677">tdbsam</a>, <a class="indexterm" href="InterdomainTrusts.html#id404270">Features and Benefits</a></dt><dt>scalable, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a></dt><dt>scalable backend, <a class="indexterm" href="InterdomainTrusts.html#id404270">Features and Benefits</a></dt><dt>scalable coherent interface (see SCI)</dt><dt>scale, <a class="indexterm" href="CUPS-printing.html#id418524">UNIX Printfile Conversion and GUI Basics</a></dt><dt>scanner module, <a class="indexterm" href="VFS.html#id432421">Discussion</a></dt><dt>schannel, <a class="indexterm" href="samba-pdc.html#id354251">Cannot Log onto Domain Member Workstation After Joining Domain</a></dt><dt>schema, <a class="indexterm" href="idmapper.html#id393417">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a></dt><dt>schema file, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a></dt><dt>scp, <a class="indexterm" href="Backup.html#id451875">Rsync</a></dt><dt>script, <a class="indexterm" href="domain-member.html#id361872">Adding Machine to Domain Fails</a></dt><dt>scripted control, <a class="indexterm" href="NetCommand.html">Remote and Local Management: The Net Command</a></dt><dt>scripts, <a class="indexterm" href="NetworkBrowsing.html#id372256">Browsing Support in Samba</a>, <a class="indexterm" href="passdb.html#id376419">Caution Regarding LDAP and Samba</a></dt><dt>SCSI, <a class="indexterm" href="SambaHA.html#id453168">High-Availability Server Products</a></dt><dt>SeAddUsersPrivilege, <a class="indexterm" href="NetCommand.html#id387484">Administering User Rights and Privileges</a>, <a class="indexterm" href="rights.html#id394039">Rights Management Capabilities</a>, <a class="indexterm" href="rights.html#id394618">Description of Privileges</a></dt><dt>SeAssignPrimaryTokenPrivilege, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeAuditPrivilege, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeBackupPrivilege, <a class="indexterm" href="NetCommand.html#id387484">Administering User Rights and Privileges</a>, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeChangeNotifyPrivilege, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>Seclib, <a class="indexterm" href="AccessControls.html#id398747">Viewing File Ownership</a></dt><dt>secondary controller, <a class="indexterm" href="NT4Migration.html#id459247">Domain Layout</a></dt><dt>SeCreateGlobalPrivilege, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeCreatePagefilePrivilege, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeCreatePermanentPrivilege, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeCreateTokenPrivilege, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>secret, <a class="indexterm" href="passdb.html#id375167">Important Notes About Security</a></dt><dt>secrets.tdb, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a>, <a class="indexterm" href="domain-member.html#id361572">Sharing User ID Mappings between Samba Domain Members</a>, <a class="indexterm" href="passdb.html#id380567">Initialize the LDAP Database</a>, <a class="indexterm" href="CUPS-printing.html#id427930">The Printing *.tdb Files</a></dt><dd><dl><dt>(see also TDB)</dt></dl></dd><dt>section name, <a class="indexterm" href="install.html#id341822">Configuration File Syntax</a></dt><dt>secure, <a class="indexterm" href="StandAloneServer.html#id362210">Features and Benefits</a></dt><dt>secure access, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></dt><dt>secure authentication, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>secure communications, <a class="indexterm" href="passdb.html#id381244">Security and sambaSamAccount</a></dt><dt>secured networks, <a class="indexterm" href="securing-samba.html#id402714">Introduction</a></dt><dt>security, <a class="indexterm" href="ServerType.html#id348521">Samba Security Modes</a>, <a class="indexterm" href="samba-pdc.html#id351870">Preparing for Domain Control</a>, <a class="indexterm" href="securing-samba.html#id402714">Introduction</a>, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></dt><dd><dl><dt>controllers, <a class="indexterm" href="ServerType.html#id348971">Domain Security Mode (User-Level Security)</a></dt><dt>modes, <a class="indexterm" href="ServerType.html#id348242">Features and Benefits</a></dt><dt>settings, <a class="indexterm" href="install.html#id342835">Example Configuration</a></dt></dl></dd><dt>security = user, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></dt><dt>security account, <a class="indexterm" href="NetCommand.html#id385377">Overview</a></dt><dt>Security Account Manager (see SAM)</dt><dt>Security Assertion Markup Language (see SAML)</dt><dt>security context, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a></dt><dt>security contexts, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a></dt><dt>security credentials, <a class="indexterm" href="idmapper.html#id391492">Backup Domain Controller</a>, <a class="indexterm" href="InterdomainTrusts.html#id404590">Native MS Windows NT4 Trusts Configuration</a></dt><dt>security domain, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a></dt><dt>security domains, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a></dt><dt>security flaw, <a class="indexterm" href="securing-samba.html#id403740">Why Can Users Access Other Users' Home Directories?</a></dt><dt>security hole, <a class="indexterm" href="securing-samba.html#id403481">Using IPC$ Share-Based Denials </a></dt><dt>security identifier, <a class="indexterm" href="NetCommand.html#id388358">Managing Security Identifiers (SIDS)</a> (see SID)</dt><dt>security level, <a class="indexterm" href="ServerType.html#id349552">Server Security (User Level Security)</a></dt><dt>security levels, <a class="indexterm" href="ServerType.html#id348521">Samba Security Modes</a></dt><dt>security mode, <a class="indexterm" href="ServerType.html">Server Types and Security Modes</a>, <a class="indexterm" href="samba-pdc.html#id353648">Security Mode and Master Browsers</a></dt><dt>Security Mode, <a class="indexterm" href="ServerType.html#id348521">Samba Security Modes</a></dt><dt>security modes, <a class="indexterm" href="ServerType.html#id348521">Samba Security Modes</a></dt><dt>security name-space, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a></dt><dt>security policies, <a class="indexterm" href="securing-samba.html#id403740">Why Can Users Access Other Users' Home Directories?</a></dt><dt>security settings, <a class="indexterm" href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a></dt><dt>security structure, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a></dt><dt>security vulnerability, <a class="indexterm" href="securing-samba.html#id403662">Upgrading Samba</a></dt><dt>security-aware, <a class="indexterm" href="CUPS-printing.html#id421744">application/octet-stream Printing</a></dt><dt>SeDebugPrivilege, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeDiskOperatorPrivilege, <a class="indexterm" href="NetCommand.html#id387484">Administering User Rights and Privileges</a>, <a class="indexterm" href="rights.html#id394039">Rights Management Capabilities</a>, <a class="indexterm" href="rights.html#id394618">Description of Privileges</a></dt><dt>SeEnableDelegationPrivilege, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeImpersonatePrivilege, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeIncreaseBasePriorityPrivilege, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeIncreaseQuotaPrivilege, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeLoadDriverPrivilege, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeLockMemoryPrivilege, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeMachineAccountPrivilege, <a class="indexterm" href="NetCommand.html#id387484">Administering User Rights and Privileges</a>, <a class="indexterm" href="rights.html#id394039">Rights Management Capabilities</a>, <a class="indexterm" href="rights.html#id394618">Description of Privileges</a>, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeManageVolumePrivilege, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>separate instances, <a class="indexterm" href="cfgsmarts.html#id453922">Multiple Server Hosting</a></dt><dt>separate servers, <a class="indexterm" href="cfgsmarts.html">Advanced Configuration Techniques</a></dt><dt>separate shares, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>separate workgroups, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></dt><dt>SePrintOperatorPrivilege, <a class="indexterm" href="NetCommand.html#id387484">Administering User Rights and Privileges</a>, <a class="indexterm" href="rights.html#id394039">Rights Management Capabilities</a>, <a class="indexterm" href="rights.html#id394618">Description of Privileges</a></dt><dt>SeProfileSingleProcessPrivilege, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeRemoteShutdownPrivilege, <a class="indexterm" href="NetCommand.html#id387484">Administering User Rights and Privileges</a>, <a class="indexterm" href="rights.html#id394039">Rights Management Capabilities</a>, <a class="indexterm" href="rights.html#id394618">Description of Privileges</a>, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeRestorePrivilege, <a class="indexterm" href="NetCommand.html#id387484">Administering User Rights and Privileges</a>, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>server failure, <a class="indexterm" href="SambaHA.html#id452431">Why Is This So Hard?</a></dt><dt>Server Manager, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id358537">Managing Domain Machine Accounts using NT4 Server Manager</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id439095">Remote Server Administration</a></dt><dt>Server Manager for Domains, <a class="indexterm" href="domain-member.html#id358537">Managing Domain Machine Accounts using NT4 Server Manager</a></dt><dt>Server Message Block (see SMB)</dt><dt>server pool, <a class="indexterm" href="SambaHA.html#id452727">The Distributed File System Challenge</a>, <a class="indexterm" href="SambaHA.html#id452850">Restrictive Constraints on Distributed File Systems</a></dt><dt>Server Type, <a class="indexterm" href="ServerType.html#id348385">Server Types</a></dt><dd><dl><dt>Domain Controller, <a class="indexterm" href="FastStart.html#id346287">Domain Controller</a></dt><dt>Domain Member, <a class="indexterm" href="FastStart.html#id345489">Domain Member Server</a>, <a class="indexterm" href="samba-bdc.html#id356586">Example Configuration</a>, <a class="indexterm" href="domain-member.html#id357484">Features and Benefits</a></dt><dt>Stand-alone, <a class="indexterm" href="FastStart.html#id343856">Standalone Server</a></dt></dl></dd><dt>server type, <a class="indexterm" href="NetCommand.html#id385377">Overview</a></dt><dd><dl><dt>domain member, <a class="indexterm" href="ServerType.html#id349156">Example Configuration</a></dt></dl></dd><dt>Server Types, <a class="indexterm" href="idmapper.html#id390297">Samba Server Deployment Types and IDMAP</a></dt><dt>server-mode, <a class="indexterm" href="ServerType.html#id349993">What Makes Samba a Domain Controller?</a></dt><dt>service name, <a class="indexterm" href="install.html#id342835">Example Configuration</a></dt><dt>service-level, <a class="indexterm" href="classicalprinting.html#id406846">Printing-Related Configuration Parameters</a>, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>services provided, <a class="indexterm" href="ch46.html">Samba Support</a></dt><dt>SeSecurityPrivilege, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeShutdownPrivilege, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>session, <a class="indexterm" href="pam.html#id446697">Anatomy of /etc/pam.d Entries</a></dt><dt>session services, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a></dt><dt>session setup, <a class="indexterm" href="ServerType.html#id348658">User Level Security</a>, <a class="indexterm" href="ServerType.html#id349552">Server Security (User Level Security)</a></dt><dt>sessionid.tdb, <a class="indexterm" href="CUPS-printing.html#id427930">The Printing *.tdb Files</a></dt><dd><dl><dt>(see also TDB)</dt></dl></dd><dt>SessionSetupAndX, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a></dt><dt>SeSyncAgentPrivilege, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeSystemEnvironmentPrivilege, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeSystemProfilePrivilege, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeSystemtimePrivilege, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>set a password, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dt>set group id (see SGID)</dt><dt>set printer properties, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>set user id (see SUID)</dt><dt>SeTakeOwnershipPrivilege, <a class="indexterm" href="NetCommand.html#id387484">Administering User Rights and Privileges</a>, <a class="indexterm" href="rights.html#id394039">Rights Management Capabilities</a>, <a class="indexterm" href="rights.html#id394618">Description of Privileges</a>, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>SeTcbPrivilege, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>setdriver, <a class="indexterm" href="CUPS-printing.html#id426337">A Check of the rpcclient man Page</a>, <a class="indexterm" href="CUPS-printing.html#id426709">Requirements for adddriver and setdriver to Succeed</a></dt><dt>SetPrinter(), <a class="indexterm" href="CUPS-printing.html#id426337">A Check of the rpcclient man Page</a></dt><dt>setting up directories, <a class="indexterm" href="AccessControls.html#id396582">File and Directory Access Control</a></dt><dt>SeUndockPrivilege, <a class="indexterm" href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></dt><dt>severely impaired, <a class="indexterm" href="NetworkBrowsing.html#id368472">TCP/IP without NetBIOS</a></dt><dt>SFU, <a class="indexterm" href="idmapper.html#id393673">IDMAP, Active Directory, and MS Services for UNIX 3.5</a></dt><dt>SFU 3.5, <a class="indexterm" href="idmapper.html#id391274">Primary Domain Controller</a></dt><dt>SGI-RGB, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></dt><dt>SGID, <a class="indexterm" href="AccessControls.html#id396582">File and Directory Access Control</a></dt><dt>shadow, <a class="indexterm" href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a></dt><dt>shadow copies, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>shadow password file, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></dt><dt>shadow utilities, <a class="indexterm" href="groupmapping.html#id382442">Features and Benefits</a></dt><dt>shadow_copy, <a class="indexterm" href="VFS.html#id433767">shadow_copy</a>, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>shadow_copy module, <a class="indexterm" href="VFS.html#id433767">shadow_copy</a></dt><dt>share, <a class="indexterm" href="install.html#id341822">Configuration File Syntax</a>, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a>, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>share access, <a class="indexterm" href="AccessControls.html#id398176">Access Controls on Shares</a></dt><dt>share ACLs, <a class="indexterm" href="NT4Migration.html#id460257">Samba-3 Implementation Choices</a></dt><dt>share management, <a class="indexterm" href="NetCommand.html#id385377">Overview</a></dt><dt>share modes, <a class="indexterm" href="SambaHA.html#id452727">The Distributed File System Challenge</a></dt><dt>share permissions, <a class="indexterm" href="AccessControls.html#id398322">Windows NT4 Workstation/Server</a></dt><dt>Share Permissions, <a class="indexterm" href="AccessControls.html#id398424">Windows 200x/XP</a></dt><dt>share settings, <a class="indexterm" href="AccessControls.html#id395980">Features and Benefits</a></dt><dt>share stanza controls, <a class="indexterm" href="NT4Migration.html#id460257">Samba-3 Implementation Choices</a></dt><dt>share-level, <a class="indexterm" href="ServerType.html#id348521">Samba Security Modes</a>, <a class="indexterm" href="ServerType.html#id348806">Share-Level Security</a>, <a class="indexterm" href="msdfs.html#id405843">Features and Benefits</a></dt><dt>share-level ACLs, <a class="indexterm" href="groupmapping.html#id383838">Applicable Only to Versions Earlier than 3.0.11</a></dt><dt>share-mode, <a class="indexterm" href="StandAloneServer.html#id362210">Features and Benefits</a></dt><dt>share-mode security, <a class="indexterm" href="samba-pdc.html#id353648">Security Mode and Master Browsers</a></dt><dt>share-mode server, <a class="indexterm" href="StandAloneServer.html#id362210">Features and Benefits</a></dt><dt>shared secret, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>shares, <a class="indexterm" href="NetworkBrowsing.html#id367475">What Is Browsing?</a></dt><dt>shares and files, <a class="indexterm" href="winbind.html#id436389">Requirements</a></dt><dt>share_info.tdb, <a class="indexterm" href="AccessControls.html#id398176">Access Controls on Shares</a>, <a class="indexterm" href="CUPS-printing.html#id427930">The Printing *.tdb Files</a></dt><dd><dl><dt>(see also TDB)</dt></dl></dd><dt>Sharing, <a class="indexterm" href="AccessControls.html#id398424">Windows 200x/XP</a></dt><dt>shell scripts, <a class="indexterm" href="classicalprinting.html#id409507">Print Commands</a></dt><dt>shift, <a class="indexterm" href="CUPS-printing.html#id418524">UNIX Printfile Conversion and GUI Basics</a></dt><dt>Shift_JIS, <a class="indexterm" href="unicode.html#id450526">Japanese Charsets</a>, <a class="indexterm" href="unicode.html#id450646">Basic Parameter Setting</a></dt><dt>shortcuts, <a class="indexterm" href="ClientConfig.html#id363569">TCP/IP Configuration</a>, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a></dt><dt>Shortcuts, <a class="indexterm" href="AccessControls.html#id396164">MS Windows NTFS Comparison with UNIX File Systems</a></dt><dt>show-stopper-type, <a class="indexterm" href="NT4Migration.html#id458833">Planning and Getting Started</a></dt><dt>SID, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id354037">The System Cannot Log You On (C000019B)</a>, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a>, <a class="indexterm" href="samba-bdc.html#id356586">Example Configuration</a>, <a class="indexterm" href="domain-member.html#id360028">Why Is This Better Than security = server?</a>, <a class="indexterm" href="domain-member.html#id361572">Sharing User ID Mappings between Samba Domain Members</a>, <a class="indexterm" href="ChangeNotes.html#id366486">User and Group Changes</a>, <a class="indexterm" href="ChangeNotes.html#id366943">Group Mapping Changes in Samba-3.0.23</a>, <a class="indexterm" href="passdb.html#passdbtech">Technical Information</a>, <a class="indexterm" href="passdb.html#id375648">Mapping User Identifiers between MS Windows and UNIX</a>, <a class="indexterm" href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="groupmapping.html">Group Mapping: MS Windows and UNIX</a>, <a class="indexterm" href="groupmapping.html#id382442">Features and Benefits</a>, <a class="indexterm" href="NetCommand.html#id388358">Managing Security Identifiers (SIDS)</a>, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id391274">Primary Domain Controller</a>, <a class="indexterm" href="idmapper.html#id392312">IDMAP_RID with Winbind</a>, <a class="indexterm" href="rights.html#id394039">Rights Management Capabilities</a>, <a class="indexterm" href="rights.html#id395344">The Administrator Domain SID</a>, <a class="indexterm" href="winbind.html#id434945">Features and Benefits</a>, <a class="indexterm" href="winbind.html#id435524">Handling of Foreign SIDs</a>, <a class="indexterm" href="ProfileMgmt.html#id443953">Side Bar Notes</a>, <a class="indexterm" href="ProfileMgmt.html#id444042">Get SID</a>, <a class="indexterm" href="cfgsmarts.html#id453922">Multiple Server Hosting</a>, <a class="indexterm" href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a>, <a class="indexterm" href="NT4Migration.html#id459645">Profile Migration/Creation</a></dt><dt>SID management, <a class="indexterm" href="NetCommand.html#id385377">Overview</a></dt><dt>SID-to-GID, <a class="indexterm" href="groupmapping.html#id382442">Features and Benefits</a></dt><dt>SIDs, <a class="indexterm" href="NT4Migration.html#id460257">Samba-3 Implementation Choices</a></dt><dt>signing, <a class="indexterm" href="samba-pdc.html#id354251">Cannot Log onto Domain Member Workstation After Joining Domain</a></dt><dt>simple access controls, <a class="indexterm" href="NT4Migration.html#id459433">Server Share and Directory Layout</a></dt><dt>simple configuration, <a class="indexterm" href="install.html#id342835">Example Configuration</a></dt><dt>simple guide, <a class="indexterm" href="upgrading-to-3.0.html#oldupdatenotes">Upgrading from Samba-2.x to Samba-3.0.25</a></dt><dt>Simple Object Access Protocol (see SOAP)</dt><dt>simple operation, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a></dt><dt>simple print server, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></dt><dt>simple printing, <a class="indexterm" href="classicalprinting.html#id406941">Simple Print Configuration</a></dt><dt>simplest</dt><dd><dl><dt>configuration, <a class="indexterm" href="install.html#id342835">Example Configuration</a></dt></dl></dd><dt>simplicity, <a class="indexterm" href="StandAloneServer.html#id362210">Features and Benefits</a></dt><dt>Simplicity is king, <a class="indexterm" href="NT4Migration.html#id459433">Server Share and Directory Layout</a></dt><dt>single DHCP server, <a class="indexterm" href="ClientConfig.html#id364780">MS Windows Me</a></dt><dt>single repository, <a class="indexterm" href="passdb.html">Account Information Databases</a></dt><dt>single server, <a class="indexterm" href="SambaHA.html#id452542">The Front-End Challenge</a></dt><dt>single sign-on, <a class="indexterm" href="domain-member.html#id357484">Features and Benefits</a> (see SSO)</dt><dt>Single Sign-On, <a class="indexterm" href="CUPS-printing.html#id424821">Caveats to Be Considered</a></dt><dt>single-byte charsets, <a class="indexterm" href="unicode.html#id450250">What Are Charsets and Unicode?</a></dt><dt>single-logon, <a class="indexterm" href="samba-pdc.html#id353296">The Special Case of Windows 9x/Me</a></dt><dt>single-sign-on, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>single-user mode, <a class="indexterm" href="winbind.html#id436389">Requirements</a></dt><dt>slapadd, <a class="indexterm" href="passdb.html#id380567">Initialize the LDAP Database</a></dt><dt>slapd, <a class="indexterm" href="passdb.html#id380315">OpenLDAP Configuration</a></dt><dt>slapd.conf, <a class="indexterm" href="ChangeNotes.html#id367059">LDAP Changes in Samba-3.0.23</a>, <a class="indexterm" href="passdb.html#id380315">OpenLDAP Configuration</a>, <a class="indexterm" href="passdb.html#id381244">Security and sambaSamAccount</a></dt><dt>slapd.pem, <a class="indexterm" href="samba-bdc.html#id355488">LDAP Configuration Notes</a></dt><dt>slapindex, <a class="indexterm" href="ChangeNotes.html#id367059">LDAP Changes in Samba-3.0.23</a></dt><dt>slappasswd, <a class="indexterm" href="passdb.html#id380567">Initialize the LDAP Database</a></dt><dt>slave servers, <a class="indexterm" href="NT4Migration.html#id459247">Domain Layout</a></dt><dt>slow browsing, <a class="indexterm" href="NetworkBrowsing.html#id373792">Browsing of Shares and Directories is Very Slow</a></dt><dt>slow network, <a class="indexterm" href="speed.html#id469477">Samba Performance Problem Due to Changing Linux Kernel</a></dt><dt>slow network browsing, <a class="indexterm" href="NetworkBrowsing.html#id373973">Invalid Cached Share References Affects Network Browsing</a></dt><dt>slow performance, <a class="indexterm" href="speed.html#id469650">Samba Performance is Very Slow</a></dt><dt>smart printers, <a class="indexterm" href="CUPS-printing.html#id416476">Overview</a></dt><dt>SMB, <a class="indexterm" href="ServerType.html#id349552">Server Security (User Level Security)</a>, <a class="indexterm" href="domain-member.html#id362092">I Can't Join a Windows 2003 PDC</a>, <a class="indexterm" href="StandAloneServer.html#id362296">Background</a>, <a class="indexterm" href="NetworkBrowsing.html#id367309">Features and Benefits</a>, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a>, <a class="indexterm" href="NetworkBrowsing.html#id372177">Technical Overview of Browsing</a>, <a class="indexterm" href="securing-samba.html#id403151">Using Interface Protection</a>, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a>, <a class="indexterm" href="integrate-ms-networks.html#id449183">Name Resolution as Used within MS Windows Networking</a>, <a class="indexterm" href="Backup.html#id451712">BackupPC</a>, <a class="indexterm" href="SambaHA.html#id452542">The Front-End Challenge</a>, <a class="indexterm" href="SambaHA.html#id452913">Server Pool Communications</a>, <a class="indexterm" href="problems.html">Analyzing and Solving Samba Problems</a></dt><dt>SMB encryption, <a class="indexterm" href="passdb.html#id375454">Advantages of Encrypted Passwords</a></dt><dt>SMB locks, <a class="indexterm" href="SambaHA.html#id452913">Server Pool Communications</a></dt><dt>SMB name, <a class="indexterm" href="integrate-ms-networks.html#id449183">Name Resolution as Used within MS Windows Networking</a></dt><dt>SMB networking, <a class="indexterm" href="problems.html#id464214">Diagnostics Tools</a></dt><dt>SMB password, <a class="indexterm" href="passdb.html#id376958">The smbpasswd Tool</a></dt><dt>SMB Password, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>SMB password encryption, <a class="indexterm" href="passdb.html#id375167">Important Notes About Security</a></dt><dt>smb ports, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></dt><dt>SMB printers, <a class="indexterm" href="CUPS-printing.html#id431529">Administrator Cannot Install Printers for All Local Users</a></dt><dt>SMB requests, <a class="indexterm" href="SambaHA.html#id452629">Demultiplexing SMB Requests</a></dt><dt>SMB semantics, <a class="indexterm" href="SambaHA.html#id452727">The Distributed File System Challenge</a></dt><dt>SMB server, <a class="indexterm" href="passdb.html#id375454">Advantages of Encrypted Passwords</a></dt><dt>SMB Server, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>SMB services, <a class="indexterm" href="SambaHA.html#id452850">Restrictive Constraints on Distributed File Systems</a></dt><dt>SMB signing, <a class="indexterm" href="domain-member.html#id362092">I Can't Join a Windows 2003 PDC</a>, <a class="indexterm" href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a></dt><dt>SMB state information, <a class="indexterm" href="SambaHA.html#id452629">Demultiplexing SMB Requests</a></dt><dt>SMB-based messaging, <a class="indexterm" href="NetworkBrowsing.html#netdiscuss">Discussion</a></dt><dt>smb-cdserver.conf, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></dt><dt>smb.conf, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></dt><dt>SMB/CIFS, <a class="indexterm" href="samba-bdc.html#id355874">What Qualifies a Domain Controller on the Network?</a>, <a class="indexterm" href="domain-member.html#id362092">I Can't Join a Windows 2003 PDC</a>, <a class="indexterm" href="passdb.html#id375167">Important Notes About Security</a>, <a class="indexterm" href="unicode.html#id450250">What Are Charsets and Unicode?</a></dt><dt>SMB/CIFS server, <a class="indexterm" href="passdb.html#id379310">Password Backends</a></dt><dt>smbclient, <a class="indexterm" href="domain-member.html#ads-test-smbclient">Testing with smbclient</a>, <a class="indexterm" href="classicalprinting.html#id412436">Installing Driver Files into [print$]</a>, <a class="indexterm" href="classicalprinting.html#id412629">smbclient to Confirm Driver Installation</a>, <a class="indexterm" href="Backup.html#id451712">BackupPC</a>, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a>, <a class="indexterm" href="problems.html#id464263">Debugging with Samba Itself</a></dt><dt>smbd, <a class="indexterm" href="install.html#id342668">Starting Samba</a>, <a class="indexterm" href="install.html#id342835">Example Configuration</a>, <a class="indexterm" href="install.html#id343059">Test Your Config File with testparm</a>, <a class="indexterm" href="FastStart.html#id344787">Secure Read-Write File and Print Server</a>, <a class="indexterm" href="FastStart.html#id345540">Example Configuration</a>, <a class="indexterm" href="passdb.html#id379428">smbpasswd: Encrypted Password Database</a>, <a class="indexterm" href="passdb.html#id380104">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="passdb.html#id380734">Configuring Samba</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id391641">NT4-Style Domains (Includes Samba Domains)</a>, <a class="indexterm" href="rights.html#id394618">Description of Privileges</a>, <a class="indexterm" href="classicalprinting.html#id407208">Verifying Configuration with testparm</a>, <a class="indexterm" href="classicalprinting.html#id407391">Rapid Configuration Validation</a>, <a class="indexterm" href="VFS.html#id433040">extd_audit</a>, <a class="indexterm" href="winbind.html#id434945">Features and Benefits</a>, <a class="indexterm" href="winbind.html#id436531">Testing Things Out</a>, <a class="indexterm" href="winbind.html#id437279">Join the Samba Server to the PDC Domain</a>, <a class="indexterm" href="winbind.html#id437848">Linux</a>, <a class="indexterm" href="winbind.html#id438031">Solaris</a>, <a class="indexterm" href="SambaHA.html#id452913">Server Pool Communications</a>, <a class="indexterm" href="largefile.html">Handling Large Directories</a>, <a class="indexterm" href="cfgsmarts.html#id453922">Multiple Server Hosting</a>, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a>, <a class="indexterm" href="problems.html#id464263">Debugging with Samba Itself</a></dt><dt>smbgroupedit, <a class="indexterm" href="NetCommand.html">Remote and Local Management: The Net Command</a></dt><dt>smbgrpadd.sh, <a class="indexterm" href="groupmapping.html#id384638">Sample smb.conf Add Group Script</a></dt><dt>smbHome, <a class="indexterm" href="passdb.html#id381461">LDAP Special Attributes for sambaSamAccounts</a></dt><dt>smbldap-groupadd, <a class="indexterm" href="NetCommand.html#id385906">Adding or Creating a New Group</a></dt><dt>smbldap-tools, <a class="indexterm" href="passdb.html#id379822">ldapsam</a></dt><dt>smbpasswd, <a class="indexterm" href="ServerType.html#id349156">Example Configuration</a>, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a>, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a>, <a class="indexterm" href="samba-bdc.html#id357154">How Do I Replicate the smbpasswd File?</a>, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id360288">Configure smb.conf</a>, <a class="indexterm" href="domain-member.html#id361572">Sharing User ID Mappings between Samba Domain Members</a>, <a class="indexterm" href="ChangeNotes.html#id366943">Group Mapping Changes in Samba-3.0.23</a>, <a class="indexterm" href="passdb.html">Account Information Databases</a>, <a class="indexterm" href="passdb.html#id374464">Backward Compatibility Account Storage Systems</a>, <a class="indexterm" href="passdb.html#acctmgmttools">Account Management Tools</a>, <a class="indexterm" href="passdb.html#id376958">The smbpasswd Tool</a>, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a>, <a class="indexterm" href="passdb.html#id377980">User Account Management</a>, <a class="indexterm" href="passdb.html#id379189">Account Import/Export</a>, <a class="indexterm" href="passdb.html#id379428">smbpasswd: Encrypted Password Database</a>, <a class="indexterm" href="passdb.html#id379822">ldapsam</a>, <a class="indexterm" href="passdb.html#id380104">Schema and Relationship to the RFC 2307 posixAccount</a>, <a class="indexterm" href="passdb.html#id380567">Initialize the LDAP Database</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a>, <a class="indexterm" href="PolicyMgmt.html#id441429">Samba PDC</a>, <a class="indexterm" href="upgrading-to-3.0.html#id457959">Passdb Backends and Authentication</a>, <a class="indexterm" href="upgrading-to-3.0.html#id458141">New Schema</a></dt><dt>smbpasswd format, <a class="indexterm" href="passdb.html#id378089">Listing User and Machine Accounts</a></dt><dt>smbpasswd plaintext database, <a class="indexterm" href="passdb.html#id379428">smbpasswd: Encrypted Password Database</a></dt><dt>SMBsessetupX, <a class="indexterm" href="samba-pdc.html#id353296">The Special Case of Windows 9x/Me</a></dt><dt>smbspool, <a class="indexterm" href="CUPS-printing.html#id430701">Printing from CUPS to Windows-Attached Printers</a></dt><dt>smbstatus, <a class="indexterm" href="CUPS-printing.html#id431352">Avoid Being Connected to the Samba Server as the Wrong User</a>, <a class="indexterm" href="bugreport.html#id465932">Attaching to a Running Process</a></dt><dt>SMBtconX, <a class="indexterm" href="samba-pdc.html#id353296">The Special Case of Windows 9x/Me</a></dt><dt>smbusers, <a class="indexterm" href="securing-samba.html#id403094">User-Based Protection</a></dt><dt>SMS, <a class="indexterm" href="problems.html#id464695">The Windows Network Monitor</a></dt><dt>Snapshots, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>sniffer, <a class="indexterm" href="samba-pdc.html#id353296">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="problems.html#id464214">Diagnostics Tools</a></dt><dt>socket, <a class="indexterm" href="cfgsmarts.html#id453922">Multiple Server Hosting</a></dt><dt>socket address, <a class="indexterm" href="cfgsmarts.html#id453922">Multiple Server Hosting</a></dt><dt>SOFTQ printing system, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>Solaris, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="winbind.html#id438194">Configure Winbind and PAM</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id439596">Remote Management with ThinLinc</a>, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a>, <a class="indexterm" href="unicode.html#id450646">Basic Parameter Setting</a></dt><dt>Solaris 9, <a class="indexterm" href="winbind.html#id438031">Solaris</a></dt><dt>source code, <a class="indexterm" href="install.html#id342835">Example Configuration</a></dt><dt>space character, <a class="indexterm" href="groupmapping.html#id384922">Adding Groups Fails</a></dt><dt>special account, <a class="indexterm" href="rights.html">User Rights and Privileges</a>, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></dt><dt>special section, <a class="indexterm" href="classicalprinting.html#id411183">[print$] Stanza Parameters</a></dt><dt>special sections, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>special stanza, <a class="indexterm" href="classicalprinting.html#id411183">[print$] Stanza Parameters</a></dt><dt>specific restrictions, <a class="indexterm" href="AccessControls.html#id398176">Access Controls on Shares</a></dt><dt>Specify an IP address, <a class="indexterm" href="ClientConfig.html#id364780">MS Windows Me</a></dt><dt>spinning process, <a class="indexterm" href="bugreport.html#id465932">Attaching to a Running Process</a></dt><dt>spool, <a class="indexterm" href="classicalprinting.html#id407208">Verifying Configuration with testparm</a></dt><dd><dl><dt>directory, <a class="indexterm" href="install.html#id341822">Configuration File Syntax</a></dt></dl></dd><dt>spool files, <a class="indexterm" href="classicalprinting.html#id410090">Custom Print Commands</a></dt><dt>spooled file, <a class="indexterm" href="classicalprinting.html#id406652">Technical Introduction</a></dt><dt>spooler., <a class="indexterm" href="install.html#id341822">Configuration File Syntax</a></dt><dt>spooling, <a class="indexterm" href="classicalprinting.html#id410090">Custom Print Commands</a>, <a class="indexterm" href="CUPS-printing.html#id417551">Central Spooling vs. &#8220;Peer-to-Peer&#8221; Printing</a></dt><dd><dl><dt>central, <a class="indexterm" href="CUPS-printing.html#id417551">Central Spooling vs. &#8220;Peer-to-Peer&#8221; Printing</a></dt><dt>peer-to-peer, <a class="indexterm" href="CUPS-printing.html#id417551">Central Spooling vs. &#8220;Peer-to-Peer&#8221; Printing</a></dt></dl></dd><dt>spooling path, <a class="indexterm" href="classicalprinting.html#id407208">Verifying Configuration with testparm</a></dt><dt>spooling-only, <a class="indexterm" href="CUPS-printing.html#id417596">Raw Print Serving: Vendor Drivers on Windows Clients</a></dt><dt>SPOOLSS, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>SQL, <a class="indexterm" href="ChangeNotes.html#id366887">Passdb Changes</a></dt><dt>SQUID, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></dt><dt>SRV records, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a>, <a class="indexterm" href="NetworkBrowsing.html#adsdnstech">DNS and Active Directory</a></dt><dt>SRV RR, <a class="indexterm" href="integrate-ms-networks.html#id448641">Background Information</a></dt><dt>SrvMgr.exe, <a class="indexterm" href="domain-member.html#id358537">Managing Domain Machine Accounts using NT4 Server Manager</a></dt><dt>srvmgr.exe, <a class="indexterm" href="domain-member.html#id358537">Managing Domain Machine Accounts using NT4 Server Manager</a></dt><dt>SRVTOOLS.EXE, <a class="indexterm" href="domain-member.html#id358537">Managing Domain Machine Accounts using NT4 Server Manager</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id439095">Remote Server Administration</a></dt><dt>ssh, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a>, <a class="indexterm" href="samba-bdc.html#id357154">How Do I Replicate the smbpasswd File?</a>, <a class="indexterm" href="passdb.html#id379428">smbpasswd: Encrypted Password Database</a>, <a class="indexterm" href="Backup.html#id451712">BackupPC</a></dt><dt>SSH, <a class="indexterm" href="classicalprinting.html#id412629">smbclient to Confirm Driver Installation</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id439596">Remote Management with ThinLinc</a></dt><dt>SSL, <a class="indexterm" href="SWAT.html#id461421">Securing SWAT through SSL</a></dt><dt>SSO, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a>, <a class="indexterm" href="domain-member.html#id357484">Features and Benefits</a>, <a class="indexterm" href="passdb.html#id376168">Comments Regarding LDAP</a></dt><dt>stability, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>stack trace, <a class="indexterm" href="bugreport.html#id465810">Internal Errors</a></dt><dt>stale network links, <a class="indexterm" href="NetworkBrowsing.html#id373973">Invalid Cached Share References Affects Network Browsing</a></dt><dt>stand-alone server, <a class="indexterm" href="idmapper.html#id390321">Standalone Samba Server</a></dt><dt>standalone, <a class="indexterm" href="ServerType.html#id348385">Server Types</a>, <a class="indexterm" href="samba-pdc.html#id351870">Preparing for Domain Control</a>, <a class="indexterm" href="NetCommand.html#id385377">Overview</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a></dt><dt>standalone filter, <a class="indexterm" href="CUPS-printing.html#id420506">pstoraster</a></dt><dt>standalone server, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="StandAloneServer.html">Standalone Servers</a>, <a class="indexterm" href="StandAloneServer.html#id362210">Features and Benefits</a>, <a class="indexterm" href="StandAloneServer.html#id362296">Background</a>, <a class="indexterm" href="passdb.html#id378299">Adding User Accounts</a>, <a class="indexterm" href="classicalprinting.html#id406449">Features and Benefits</a>, <a class="indexterm" href="NT4Migration.html#id459247">Domain Layout</a></dt><dt>standard confirmation, <a class="indexterm" href="InterdomainTrusts.html#id404624">Creating an NT4 Domain Trust</a></dt><dt>stanza, <a class="indexterm" href="install.html#id341822">Configuration File Syntax</a>, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>stapling, <a class="indexterm" href="CUPS-printing.html#id420346">pstops</a></dt><dt>StartDocPrinter, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>starting samba</dt><dd><dl><dt>nmbd, <a class="indexterm" href="install.html#id342668">Starting Samba</a>, <a class="indexterm" href="FastStart.html#id344787">Secure Read-Write File and Print Server</a>, <a class="indexterm" href="FastStart.html#id345540">Example Configuration</a></dt><dt>smbd, <a class="indexterm" href="install.html#id342668">Starting Samba</a>, <a class="indexterm" href="FastStart.html#id344787">Secure Read-Write File and Print Server</a>, <a class="indexterm" href="FastStart.html#id345540">Example Configuration</a></dt><dt>winbindd, <a class="indexterm" href="install.html#id342668">Starting Samba</a>, <a class="indexterm" href="FastStart.html#id345540">Example Configuration</a>, <a class="indexterm" href="winbind.html#id434945">Features and Benefits</a></dt></dl></dd><dt>startsmb, <a class="indexterm" href="compiling.html#id467302">Alternative: Starting smbd as a Daemon</a></dt><dt>StartTLS, <a class="indexterm" href="passdb.html#id381244">Security and sambaSamAccount</a></dt><dt>startup</dt><dd><dl><dt>process, <a class="indexterm" href="install.html#id342668">Starting Samba</a></dt></dl></dd><dt>startup script, <a class="indexterm" href="winbind.html#id437506">Starting and Testing the winbindd Daemon</a></dt><dt>state, <a class="indexterm" href="SambaHA.html#id452431">Why Is This So Hard?</a></dt><dt>state information, <a class="indexterm" href="SambaHA.html#id452431">Why Is This So Hard?</a></dt><dt>state of knowledge, <a class="indexterm" href="SambaHA.html#id452170">Features and Benefits</a></dt><dt>static WINS entries, <a class="indexterm" href="NetworkBrowsing.html#id371626">Static WINS Entries</a></dt><dt>status32 codes, <a class="indexterm" href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a></dt><dt>sticky bit, <a class="indexterm" href="AccessControls.html#id396582">File and Directory Access Control</a>, <a class="indexterm" href="NT4Migration.html#id459433">Server Share and Directory Layout</a></dt><dt>storage mechanism, <a class="indexterm" href="passdb.html#acctmgmttools">Account Management Tools</a></dt><dt>storage methods, <a class="indexterm" href="passdb.html#id376958">The smbpasswd Tool</a></dt><dt>stphoto2.ppd, <a class="indexterm" href="CUPS-printing.html#id422583">Examples for Filtering Chains</a></dt><dt>strange delete semantics, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>stripped of comments, <a class="indexterm" href="SWAT.html#id460718">Features and Benefits</a></dt><dt>strptime, <a class="indexterm" href="passdb.html#id378456">Changing User Accounts</a></dt><dt>stunnel, <a class="indexterm" href="SWAT.html#id461421">Securing SWAT through SSL</a></dt><dt>su, <a class="indexterm" href="pam.html#id446697">Anatomy of /etc/pam.d Entries</a></dt><dt>subnet mask, <a class="indexterm" href="ClientConfig.html#id363638">MS Windows XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id364780">MS Windows Me</a>, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>subnets, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a>, <a class="indexterm" href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a></dt><dt>subscription, <a class="indexterm" href="ch46.html#id470724">Free Support</a></dt><dt>subsuffix parameters, <a class="indexterm" href="upgrading-to-3.0.html#id458516">New Suffix for Searching</a></dt><dt>Subversion, <a class="indexterm" href="compiling.html#id466217">Introduction</a>, <a class="indexterm" href="compiling.html#id466298">Access via Subversion</a></dt><dt>successful join, <a class="indexterm" href="domain-member.html#ads-test-server">Testing Server Setup</a></dt><dt>successful migration, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>sufficient, <a class="indexterm" href="pam.html#id446697">Anatomy of /etc/pam.d Entries</a></dt><dt>suffixes, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></dt><dt>SUID, <a class="indexterm" href="AccessControls.html#id396582">File and Directory Access Control</a></dt><dt>Sun, <a class="indexterm" href="domain-member.html#domain-member-server">Domain Member Server</a></dt><dt>Sun ONE iDentity server, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>Sun Solaris, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>SUN-Raster, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></dt><dt>support, <a class="indexterm" href="ch46.html">Samba Support</a></dt><dt>support exposure, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>SVN</dt><dd><dl><dt>web, <a class="indexterm" href="compiling.html#id466266">Access via ViewCVS</a></dt></dl></dd><dt>SVRTOOLS.EXE, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a></dt><dt>SWAT, <a class="indexterm" href="install.html#id341784">Configuring Samba (smb.conf)</a>, <a class="indexterm" href="SWAT.html">SWAT: The Samba Web Administration Tool</a></dt><dt>swat, <a class="indexterm" href="install.html#id343214">SWAT</a>, <a class="indexterm" href="SWAT.html#id460847">Validate SWAT Installation</a>, <a class="indexterm" href="SWAT.html#id460910">Locating the SWAT File</a>, <a class="indexterm" href="SWAT.html#xinetd">Enabling SWAT for Use</a></dt><dd><dl><dt>enable, <a class="indexterm" href="SWAT.html#xinetd">Enabling SWAT for Use</a></dt><dt>security, <a class="indexterm" href="SWAT.html#id461421">Securing SWAT through SSL</a></dt></dl></dd><dt>SWAT binary support, <a class="indexterm" href="SWAT.html#id460847">Validate SWAT Installation</a></dt><dt>swat command-line options, <a class="indexterm" href="SWAT.html#id460910">Locating the SWAT File</a></dt><dt>SWAT permission allowed, <a class="indexterm" href="SWAT.html#xinetd">Enabling SWAT for Use</a></dt><dt>symbolic links, <a class="indexterm" href="msdfs.html#id405843">Features and Benefits</a></dt><dt>synchronization, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a>, <a class="indexterm" href="samba-pdc.html#id353648">Security Mode and Master Browsers</a>, <a class="indexterm" href="NetworkBrowsing.html#id371035">WINS: The Windows Internetworking Name Server</a>, <a class="indexterm" href="NetworkBrowsing.html#id372827">Behavior of Cross-Subnet Browsing</a></dt><dt>synchronization problems, <a class="indexterm" href="winbind.html#id435268">Introduction</a></dt><dt>synchronize, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a>, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a>, <a class="indexterm" href="NetworkBrowsing.html#id370948">Use of the Remote Browse Sync Parameter</a>, <a class="indexterm" href="NetworkBrowsing.html#id372827">Behavior of Cross-Subnet Browsing</a></dt><dt>synchronized, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a></dt><dt>syntax tolerates spelling errors, <a class="indexterm" href="classicalprinting.html#id406941">Simple Print Configuration</a></dt><dt>system access controls, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a></dt><dt>system accounts, <a class="indexterm" href="passdb.html#id377980">User Account Management</a></dt><dt>system administrator, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>system groups, <a class="indexterm" href="NetCommand.html#id386085">Mapping Windows Groups to UNIX Groups</a></dt><dt>system interface scripts, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>system policies, <a class="indexterm" href="PolicyMgmt.html#id440199">Creating and Managing System Policies</a></dt><dt>System Policy Editor, <a class="indexterm" href="PolicyMgmt.html#id440199">Creating and Managing System Policies</a>, <a class="indexterm" href="PolicyMgmt.html#id440878">Administration of Windows 200x/XP Policies</a>, <a class="indexterm" href="ProfileMgmt.html#id444323">MS Windows 9x/Me</a></dt><dt>system security, <a class="indexterm" href="groupmapping.html#id383838">Applicable Only to Versions Earlier than 3.0.11</a></dt><dt>system tools, <a class="indexterm" href="Backup.html#id451585">Features and Benefits</a></dt><dt>SYSV, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>SYSVOL, <a class="indexterm" href="PolicyMgmt.html#id440699">MS Windows 200x/XP Professional Policies</a></dt></dl></div><div class="indexdiv"><h3>T</h3><dl><dt>tail, <a class="indexterm" href="diagnosis.html#id462289">Assumptions</a></dt><dt>take ownership, <a class="indexterm" href="rights.html#id394618">Description of Privileges</a></dt><dt>Take Ownership, <a class="indexterm" href="AccessControls.html#id398747">Viewing File Ownership</a></dt><dt>tape, <a class="indexterm" href="NT4Migration.html#id459433">Server Share and Directory Layout</a></dt><dt>tar, <a class="indexterm" href="Backup.html#id451712">BackupPC</a></dt><dt>tarball, <a class="indexterm" href="install.html#id342835">Example Configuration</a></dt><dt>tattoo effect, <a class="indexterm" href="NT4Migration.html#id460257">Samba-3 Implementation Choices</a></dt><dt>TCP, <a class="indexterm" href="NetworkBrowsing.html#id370644">Multiple Interfaces</a>, <a class="indexterm" href="SambaHA.html#id452431">Why Is This So Hard?</a></dt><dt>TCP data streams, <a class="indexterm" href="SambaHA.html#id452542">The Front-End Challenge</a></dt><dt>TCP failover, <a class="indexterm" href="SambaHA.html#id452431">Why Is This So Hard?</a></dt><dt>TCP port, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a></dt><dt>TCP port 139, <a class="indexterm" href="integrate-ms-networks.html#id448641">Background Information</a>, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></dt><dt>TCP port 445, <a class="indexterm" href="integrate-ms-networks.html#id448641">Background Information</a>, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></dt><dt>tcp ports, <a class="indexterm" href="winbind.html#id437279">Join the Samba Server to the PDC Domain</a></dt><dt>TCP/IP, <a class="indexterm" href="ClientConfig.html#id363638">MS Windows XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id364780">MS Windows Me</a>, <a class="indexterm" href="NetworkBrowsing.html#id367309">Features and Benefits</a>, <a class="indexterm" href="NetworkBrowsing.html#id371853">Windows Networking Protocols</a></dt><dt>TCP/IP configuration, <a class="indexterm" href="ClientConfig.html#id363638">MS Windows XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id364780">MS Windows Me</a></dt><dt>TCP/IP configuration panel, <a class="indexterm" href="ClientConfig.html#id364254">MS Windows 2000</a></dt><dt>TCP/IP protocol configuration, <a class="indexterm" href="ClientConfig.html#id363528">Technical Details</a></dt><dt>TCP/IP protocol settings, <a class="indexterm" href="ClientConfig.html#id363638">MS Windows XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id364254">MS Windows 2000</a></dt><dt>TCP/IP protocol stack, <a class="indexterm" href="NetworkBrowsing.html#id371035">WINS: The Windows Internetworking Name Server</a></dt><dt>TCP/IP-only, <a class="indexterm" href="NetworkBrowsing.html#id371853">Windows Networking Protocols</a></dt><dt>tcpdump, <a class="indexterm" href="problems.html#id464508">Tcpdump</a></dt><dt>TDB, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a>, <a class="indexterm" href="classicalprinting.html#id413261">Running rpcclient with setdriver</a>, <a class="indexterm" href="CUPS-printing.html#id427930">The Printing *.tdb Files</a>, <a class="indexterm" href="CUPS-printing.html#id428129">Trivial Database Files</a>, <a class="indexterm" href="cfgsmarts.html#id453922">Multiple Server Hosting</a></dt><dd><dl><dt>backing up (see tdbbackup)</dt></dl></dd><dt>tdb, <a class="indexterm" href="winbind.html#id436158">User and Group ID Allocation</a>, <a class="indexterm" href="SambaHA.html#id452913">Server Pool Communications</a></dt><dt>tdb data files, <a class="indexterm" href="upgrading-to-3.0.html#id457533">TDB Data Files</a></dt><dt>TDB database, <a class="indexterm" href="classicalprinting.html#id412744">Running rpcclient with adddriver</a></dt><dt>TDB database files, <a class="indexterm" href="classicalprinting.html#prt-modeset">Setting Device Modes on New Printers</a></dt><dt>tdb file backup, <a class="indexterm" href="upgrading-to-3.0.html#id457533">TDB Data Files</a></dt><dt>tdb file descriptions, <a class="indexterm" href="install.html#tdbdocs">TDB Database File Information</a>, <a class="indexterm" href="upgrading-to-3.0.html#id457533">TDB Data Files</a></dt><dt>tdb file locations, <a class="indexterm" href="install.html#tdbdocs">TDB Database File Information</a></dt><dt>tdb files, <a class="indexterm" href="AccessControls.html#id398176">Access Controls on Shares</a></dt><dt>tdbbackup, <a class="indexterm" href="CUPS-printing.html#id428299">Using tdbbackup</a>, <a class="indexterm" href="speed.html#id469561">Corrupt tdb Files</a></dt><dt>tdbdump, <a class="indexterm" href="AccessControls.html#id398176">Access Controls on Shares</a></dt><dt>tdbsam, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a>, <a class="indexterm" href="ChangeNotes.html#id366943">Group Mapping Changes in Samba-3.0.23</a>, <a class="indexterm" href="passdb.html">Account Information Databases</a>, <a class="indexterm" href="passdb.html#passdbtech">Technical Information</a>, <a class="indexterm" href="passdb.html#id378089">Listing User and Machine Accounts</a>, <a class="indexterm" href="passdb.html#id379428">smbpasswd: Encrypted Password Database</a>, <a class="indexterm" href="passdb.html#id379677">tdbsam</a>, <a class="indexterm" href="groupmapping.html#id383950">Default Users, Groups, and Relative Identifiers</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>tdbsam databases, <a class="indexterm" href="passdb.html#id379310">Password Backends</a></dt><dt>technical reviewers, <a class="indexterm" href="cfgsmarts.html">Advanced Configuration Techniques</a></dt><dt>Telnet, <a class="indexterm" href="passdb.html#id375587">Advantages of Non-Encrypted Passwords</a></dt><dt>telnet logins, <a class="indexterm" href="winbind.html#id438353">Linux/FreeBSD-Specific PAM Configuration</a></dt><dt>template, <a class="indexterm" href="ProfileMgmt.html#id444230">Creating and Managing Group Profiles</a></dt><dt>temporary location, <a class="indexterm" href="classicalprinting.html#id409507">Print Commands</a></dt><dt>terminal server, <a class="indexterm" href="AdvancedNetworkManagement.html#id439596">Remote Management with ThinLinc</a></dt><dt>Terminal Server, <a class="indexterm" href="SambaHA.html#id452629">Demultiplexing SMB Requests</a></dt><dt>Testing Server Setup, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a></dt><dt>testparm, <a class="indexterm" href="install.html#id343059">Test Your Config File with testparm</a>, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="classicalprinting.html#id406941">Simple Print Configuration</a>, <a class="indexterm" href="classicalprinting.html#id407208">Verifying Configuration with testparm</a>, <a class="indexterm" href="classicalprinting.html#id407391">Rapid Configuration Validation</a>, <a class="indexterm" href="classicalprinting.html#id407742">Extended Printing Configuration</a>, <a class="indexterm" href="diagnosis.html#id462289">Assumptions</a>, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a>, <a class="indexterm" href="problems.html#id464263">Debugging with Samba Itself</a></dt><dt>tethereal, <a class="indexterm" href="problems.html#id464508">Tcpdump</a></dt><dt>text/plain, <a class="indexterm" href="CUPS-printing.html#id419826">MIME Type Conversion Rules</a></dt><dt>texttops, <a class="indexterm" href="CUPS-printing.html#id419826">MIME Type Conversion Rules</a></dt><dt>thin client, <a class="indexterm" href="AdvancedNetworkManagement.html#id439596">Remote Management with ThinLinc</a></dt><dt>ThinLinc, <a class="indexterm" href="AdvancedNetworkManagement.html#id439596">Remote Management with ThinLinc</a></dt><dt>tid, <a class="indexterm" href="SambaHA.html#id452629">Demultiplexing SMB Requests</a></dt><dt>TIFF, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></dt><dt>TightVNC, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id439596">Remote Management with ThinLinc</a></dt><dt>time difference, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a></dt><dt>time format, <a class="indexterm" href="passdb.html#id378456">Changing User Accounts</a></dt><dt>time-to-live (see TTL)</dt><dt>tool, <a class="indexterm" href="AccessControls.html#id398424">Windows 200x/XP</a></dt><dt>tools, <a class="indexterm" href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a>, <a class="indexterm" href="passdb.html#id376419">Caution Regarding LDAP and Samba</a></dt><dt>tools\reskit\netadmin\poledit, <a class="indexterm" href="PolicyMgmt.html#id440369">Windows 9x/ME Policies</a></dt><dt>traditional printing, <a class="indexterm" href="classicalprinting.html#id410090">Custom Print Commands</a></dt><dt>training course, <a class="indexterm" href="Backup.html#id451626">Discussion of Backup Solutions</a></dt><dt>transfer differences, <a class="indexterm" href="Backup.html#id451875">Rsync</a></dt><dt>transformation, <a class="indexterm" href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></dt><dt>transitive, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a></dt><dt>transparent access, <a class="indexterm" href="domain-member.html#id357484">Features and Benefits</a></dt><dt>transparently reconnected, <a class="indexterm" href="SambaHA.html#id452309">The Ultimate Goal</a></dt><dt>transport connection loss, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>Transport Layer Seccurity, TLS</dt><dd><dl><dt>Configuring, <a class="indexterm" href="ch-ldap-tls.html#s1-config-ldap-tls">Configuring</a></dt><dt>Introduction, <a class="indexterm" href="ch-ldap-tls.html#s1-intro-ldap-tls">Introduction</a></dt></dl></dd><dt>transport layer security (see TLS)</dt><dt>Transport Layer Security, TLS</dt><dd><dl><dt>Testing, <a class="indexterm" href="ch-ldap-tls.html#s1-test-ldap-tls">Testing</a></dt><dt>Troubleshooting, <a class="indexterm" href="ch-ldap-tls.html#s1-int-ldap-tls">Troubleshooting</a></dt></dl></dd><dt>trigger, <a class="indexterm" href="samba-pdc.html#id351870">Preparing for Domain Control</a>, <a class="indexterm" href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a></dt><dt>trivial database, <a class="indexterm" href="passdb.html#id374634">New Account Storage Systems</a> (see TDB)</dt><dt>troubleshoot, <a class="indexterm" href="classicalprinting.html#id407391">Rapid Configuration Validation</a></dt><dt>troubleshooting, <a class="indexterm" href="CUPS-printing.html#id430701">Printing from CUPS to Windows-Attached Printers</a></dt><dt>Tru64 UNIX, <a class="indexterm" href="unicode.html#id450646">Basic Parameter Setting</a></dt><dt>trust, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a></dt><dd><dl><dt>account, <a class="indexterm" href="ServerType.html#id348971">Domain Security Mode (User-Level Security)</a></dt></dl></dd><dt>trust account, <a class="indexterm" href="ServerType.html#id348971">Domain Security Mode (User-Level Security)</a>, <a class="indexterm" href="passdb.html#TOSHARG-acctflags">Account Flags Management</a>, <a class="indexterm" href="InterdomainTrusts.html#id405489">NT4-Style Domain Trusts with Windows 2000</a></dt><dd><dl><dt>interdomain, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a></dt><dt>machine, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a></dt></dl></dd><dt>trust account password, <a class="indexterm" href="samba-bdc.html#id354424">Features and Benefits</a></dt><dt>trust accounts, <a class="indexterm" href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="NetCommand.html#id385377">Overview</a></dt><dt>trust established, <a class="indexterm" href="InterdomainTrusts.html#id404795">Interdomain Trust Facilities</a></dt><dt>trust relationship, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a>, <a class="indexterm" href="InterdomainTrusts.html#id404714">Completing an NT4 Domain Trust</a>, <a class="indexterm" href="InterdomainTrusts.html#id404795">Interdomain Trust Facilities</a>, <a class="indexterm" href="InterdomainTrusts.html#id404991">Configuring Samba NT-Style Domain Trusts</a>, <a class="indexterm" href="InterdomainTrusts.html#id405489">NT4-Style Domain Trusts with Windows 2000</a></dt><dt>trust relationships, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a>, <a class="indexterm" href="InterdomainTrusts.html#id404270">Features and Benefits</a>, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a>, <a class="indexterm" href="InterdomainTrusts.html#id404624">Creating an NT4 Domain Trust</a>, <a class="indexterm" href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a></dt><dt>trusted, <a class="indexterm" href="NetworkBrowsing.html#id372827">Behavior of Cross-Subnet Browsing</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>trusted domain, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a>, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a>, <a class="indexterm" href="InterdomainTrusts.html#id404714">Completing an NT4 Domain Trust</a>, <a class="indexterm" href="InterdomainTrusts.html#id405306">Samba as the Trusting Domain</a>, <a class="indexterm" href="winbind.html#id435805">Name Service Switch</a></dt><dt>trusted domain name, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></dt><dt>trusted party, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></dt><dt>trusting domain, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a>, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a>, <a class="indexterm" href="InterdomainTrusts.html#id404714">Completing an NT4 Domain Trust</a></dt><dt>trusting party, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></dt><dt>trusts, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a>, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a></dt><dt>TTL, <a class="indexterm" href="NetworkBrowsing.html#id371626">Static WINS Entries</a></dt><dt>turn oplocks off, <a class="indexterm" href="locking.html#id401603">Advanced Samba Oplocks Parameters</a></dt><dt>turnkey solution, <a class="indexterm" href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a></dt><dt>two-up, <a class="indexterm" href="CUPS-printing.html#id422583">Examples for Filtering Chains</a></dt><dt>two-way</dt><dd><dl><dt>propagation, <a class="indexterm" href="samba-bdc.html#id354424">Features and Benefits</a></dt></dl></dd><dt>two-way trust, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a>, <a class="indexterm" href="InterdomainTrusts.html#id404590">Native MS Windows NT4 Trusts Configuration</a>, <a class="indexterm" href="InterdomainTrusts.html#id404795">Interdomain Trust Facilities</a></dt></dl></div><div class="indexdiv"><h3>U</h3><dl><dt>UCS-2, <a class="indexterm" href="unicode.html#id450526">Japanese Charsets</a></dt><dt>UDP, <a class="indexterm" href="samba-pdc.html#id351870">Preparing for Domain Control</a>, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a>, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a>, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a>, <a class="indexterm" href="NetworkBrowsing.html#id370644">Multiple Interfaces</a>, <a class="indexterm" href="NetworkBrowsing.html#id372672">Cross-Subnet Browsing</a></dt><dt>UDP port 137, <a class="indexterm" href="integrate-ms-networks.html#id448641">Background Information</a></dt><dt>udp ports, <a class="indexterm" href="winbind.html#id437279">Join the Samba Server to the PDC Domain</a></dt><dt>UDP unicast, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a></dt><dt>UID, <a class="indexterm" href="samba-bdc.html#id356586">Example Configuration</a>, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id360028">Why Is This Better Than security = server?</a>, <a class="indexterm" href="domain-member.html#id361572">Sharing User ID Mappings between Samba Domain Members</a>, <a class="indexterm" href="passdb.html#passdbtech">Technical Information</a>, <a class="indexterm" href="passdb.html#id375648">Mapping User Identifiers between MS Windows and UNIX</a>, <a class="indexterm" href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a>, <a class="indexterm" href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="passdb.html#id378089">Listing User and Machine Accounts</a>, <a class="indexterm" href="groupmapping.html#id382442">Features and Benefits</a>, <a class="indexterm" href="NetCommand.html#id385377">Overview</a>, <a class="indexterm" href="NetCommand.html#id386085">Mapping Windows Groups to UNIX Groups</a>, <a class="indexterm" href="NetCommand.html#id387104">UNIX and Windows User Management</a>, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id391274">Primary Domain Controller</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a>, <a class="indexterm" href="winbind.html#id434945">Features and Benefits</a>, <a class="indexterm" href="winbind.html#id435524">Handling of Foreign SIDs</a>, <a class="indexterm" href="winbind.html#id437506">Starting and Testing the winbindd Daemon</a></dt><dt>uid, <a class="indexterm" href="passdb.html#id380315">OpenLDAP Configuration</a></dt><dt>UID numbers, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a></dt><dt>UID range, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a></dt><dt>unauthorized, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>unauthorized access, <a class="indexterm" href="AccessControls.html">File, Directory, and Share Access Controls</a></dt><dt>UNC notation, <a class="indexterm" href="classicalprinting.html#id411938">Identifying Driver Files</a></dt><dt>unexpected.tdb, <a class="indexterm" href="CUPS-printing.html#id427930">The Printing *.tdb Files</a></dt><dd><dl><dt>(see also TDB)</dt></dl></dd><dt>unicast, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a></dt><dt>unicode, <a class="indexterm" href="unicode.html#id450250">What Are Charsets and Unicode?</a></dt><dt>Unicode, <a class="indexterm" href="unicode.html#id450371">Samba and Charsets</a>, <a class="indexterm" href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a></dt><dt>Unicode UTF-8, <a class="indexterm" href="unicode.html#id450646">Basic Parameter Setting</a></dt><dt>unified logon, <a class="indexterm" href="winbind.html#id435268">Introduction</a></dt><dt>UNIX, <a class="indexterm" href="unicode.html#id450646">Basic Parameter Setting</a></dt><dd><dl><dt>server, <a class="indexterm" href="ServerType.html#id348242">Features and Benefits</a></dt></dl></dd><dt>UNIX account, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id358802">On-the-Fly Creation of Machine Trust Accounts</a></dt><dt>unix charset, <a class="indexterm" href="unicode.html#id450646">Basic Parameter Setting</a></dt><dt>UNIX Domain Socket, <a class="indexterm" href="AccessControls.html#id396582">File and Directory Access Control</a></dt><dt>UNIX domain socket, <a class="indexterm" href="winbind.html#id435636">How Winbind Works</a></dt><dt>UNIX file system access controls, <a class="indexterm" href="AccessControls.html#id395980">Features and Benefits</a></dt><dt>UNIX group, <a class="indexterm" href="NetCommand.html#id386085">Mapping Windows Groups to UNIX Groups</a></dt><dt>UNIX groups, <a class="indexterm" href="groupmapping.html">Group Mapping: MS Windows and UNIX</a>, <a class="indexterm" href="winbind.html#id435346">What Winbind Provides</a></dt><dt>UNIX home directories, <a class="indexterm" href="securing-samba.html#id403740">Why Can Users Access Other Users' Home Directories?</a></dt><dt>UNIX host system, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>UNIX ID, <a class="indexterm" href="winbind.html#id436158">User and Group ID Allocation</a></dt><dt>UNIX locking, <a class="indexterm" href="locking.html#id400630">Discussion</a></dt><dt>UNIX login ID, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>UNIX permissions, <a class="indexterm" href="NT4Migration.html#id460257">Samba-3 Implementation Choices</a></dt><dt>UNIX printer, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>UNIX printing, <a class="indexterm" href="classicalprinting.html#id406652">Technical Introduction</a></dt><dt>UNIX system account, <a class="indexterm" href="domain-member.html#id361872">Adding Machine to Domain Fails</a></dt><dt>UNIX system accounts, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>UNIX system files, <a class="indexterm" href="Backup.html#id451585">Features and Benefits</a></dt><dt>UNIX user identifier (see UID)</dt><dt>UNIX users, <a class="indexterm" href="domain-member.html#id360028">Why Is This Better Than security = server?</a>, <a class="indexterm" href="winbind.html#id435346">What Winbind Provides</a></dt><dt>UNIX-style encrypted passwords, <a class="indexterm" href="passdb.html#passdbtech">Technical Information</a></dt><dt>UNIX-user database, <a class="indexterm" href="StandAloneServer.html#id362296">Background</a></dt><dt>UNIX/Linux group, <a class="indexterm" href="groupmapping.html#id383149">Warning: User Private Group Problems</a></dt><dt>UNIX/Linux user account, <a class="indexterm" href="NetCommand.html#id387104">UNIX and Windows User Management</a></dt><dt>unlink calls, <a class="indexterm" href="VFS.html#id433348">recycle</a></dt><dt>unlinked, <a class="indexterm" href="AccessControls.html#id396582">File and Directory Access Control</a></dt><dt>unmapped groups, <a class="indexterm" href="ChangeNotes.html#id366486">User and Group Changes</a></dt><dt>unmapped users, <a class="indexterm" href="ChangeNotes.html#id366486">User and Group Changes</a></dt><dt>unprivileged account names, <a class="indexterm" href="StandAloneServer.html#RefDocServer">Reference Documentation Server</a></dt><dt>unsigned drivers, <a class="indexterm" href="CUPS-printing.html#id431498">Windows 200x/XP Local Security Policies</a></dt><dt>unstoppable services, <a class="indexterm" href="SambaHA.html#id452309">The Ultimate Goal</a></dt><dt>unsupported encryption, <a class="indexterm" href="domain-member.html#id361222">Possible Errors</a></dt><dt>unsupported software, <a class="indexterm" href="ch46.html#id470922">Commercial Support</a></dt><dt>updates, <a class="indexterm" href="securing-samba.html#id403662">Upgrading Samba</a></dt><dt>upload drivers, <a class="indexterm" href="classicalprinting.html#id406449">Features and Benefits</a></dt><dt>uploaded driver, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>uploaded drivers, <a class="indexterm" href="classicalprinting.html#id410712">Point'n'Print Client Drivers on Samba Servers</a></dt><dt>uploading, <a class="indexterm" href="classicalprinting.html#id410712">Point'n'Print Client Drivers on Samba Servers</a></dt><dt>upper-case, <a class="indexterm" href="ServerType.html#id348658">User Level Security</a></dt><dt>uppercase, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a>, <a class="indexterm" href="domain-member.html#id361872">Adding Machine to Domain Fails</a>, <a class="indexterm" href="largefile.html">Handling Large Directories</a></dt><dt>uppercase character, <a class="indexterm" href="groupmapping.html#id384922">Adding Groups Fails</a></dt><dt>USB, <a class="indexterm" href="CUPS-printing.html#id422583">Examples for Filtering Chains</a></dt><dt>use computer anywhere, <a class="indexterm" href="unicode.html#id450204">Features and Benefits</a></dt><dt>user, <a class="indexterm" href="ChangeNotes.html#id366486">User and Group Changes</a>, <a class="indexterm" href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="AccessControls.html#id396582">File and Directory Access Control</a></dt><dt>user access management, <a class="indexterm" href="domain-member.html#id357484">Features and Benefits</a></dt><dt>user account, <a class="indexterm" href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="passdb.html#id377980">User Account Management</a>, <a class="indexterm" href="passdb.html#TOSHARG-acctflags">Account Flags Management</a>, <a class="indexterm" href="passdb.html#id379428">smbpasswd: Encrypted Password Database</a>, <a class="indexterm" href="NetCommand.html#id387104">UNIX and Windows User Management</a></dt><dd><dl><dt>Adding/Deleting, <a class="indexterm" href="passdb.html#id376958">The smbpasswd Tool</a></dt></dl></dd><dt>user account database, <a class="indexterm" href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a></dt><dt>user accounts, <a class="indexterm" href="passdb.html#id376419">Caution Regarding LDAP and Samba</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>User Accounts</dt><dd><dl><dt>Adding/Deleting, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a>, <a class="indexterm" href="passdb.html#id381139">Accounts and Groups Management</a></dt></dl></dd><dt>user and group, <a class="indexterm" href="winbind.html#id435346">What Winbind Provides</a></dt><dt>user and trust accounts, <a class="indexterm" href="passdb.html">Account Information Databases</a></dt><dt>user attributes, <a class="indexterm" href="passdb.html#id379428">smbpasswd: Encrypted Password Database</a></dt><dt>user authentication, <a class="indexterm" href="winbind.html#id435683">Microsoft Remote Procedure Calls</a></dt><dt>user database, <a class="indexterm" href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a>, <a class="indexterm" href="passdb.html#id379357">Plaintext</a></dt><dt>user encoded, <a class="indexterm" href="NetCommand.html#id388358">Managing Security Identifiers (SIDS)</a></dt><dt>user groups, <a class="indexterm" href="ch46.html#id470724">Free Support</a></dt><dt>user logons, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>user management, <a class="indexterm" href="passdb.html#id376958">The smbpasswd Tool</a>, <a class="indexterm" href="NetCommand.html#id385377">Overview</a>, <a class="indexterm" href="NetCommand.html#id385728">UNIX and Windows Group Management</a></dt><dt>User Management, <a class="indexterm" href="passdb.html#pdbeditthing">The pdbedit Tool</a>, <a class="indexterm" href="passdb.html#id381139">Accounts and Groups Management</a></dt><dt>User Manager, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a>, <a class="indexterm" href="InterdomainTrusts.html#id405306">Samba as the Trusting Domain</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id439095">Remote Server Administration</a>, <a class="indexterm" href="ProfileMgmt.html#id444230">Creating and Managing Group Profiles</a></dt><dt>User Manager for Domains, <a class="indexterm" href="AdvancedNetworkManagement.html#id439095">Remote Server Administration</a></dt><dt>user or group, <a class="indexterm" href="rights.html#id394300">Using the &#8220;net rpc rights&#8221; Utility</a></dt><dt>user profiles, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a></dt><dt>User Rights and Privileges, <a class="indexterm" href="rights.html#id395344">The Administrator Domain SID</a></dt><dt>user-level, <a class="indexterm" href="ServerType.html#id348521">Samba Security Modes</a>, <a class="indexterm" href="ServerType.html#id348658">User Level Security</a></dt><dt>User-level access control, <a class="indexterm" href="ClientConfig.html#id365774">Domain Logon Configuration: Windows 9x/Me</a></dt><dt>user-level security, <a class="indexterm" href="passdb.html#id375454">Advantages of Encrypted Passwords</a></dt><dt>user-mode security, <a class="indexterm" href="samba-pdc.html#id353648">Security Mode and Master Browsers</a></dt><dt>user.DAT, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a>, <a class="indexterm" href="ProfileMgmt.html#id443680">Sharing Profiles between Windows 9x/Me and NT4/200x/XP Workstations</a></dt><dt>user.MAN, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a></dt><dt>User.MAN, <a class="indexterm" href="ProfileMgmt.html#id444102">Mandatory Profiles</a></dt><dt>useradd, <a class="indexterm" href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a>, <a class="indexterm" href="domain-member.html#id358802">On-the-Fly Creation of Machine Trust Accounts</a></dt><dt>username, <a class="indexterm" href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a></dt><dt>username and password, <a class="indexterm" href="ClientConfig.html#id365265">Joining a Domain: Windows 2000/XP Professional</a></dt><dt>username map, <a class="indexterm" href="NetCommand.html#id387406">User Mapping</a></dt><dt>userPassword, <a class="indexterm" href="passdb.html#id380567">Initialize the LDAP Database</a></dt><dt>users, <a class="indexterm" href="PolicyMgmt.html#id440104">Features and Benefits</a></dt><dt>UsrMgr.exe, <a class="indexterm" href="domain-member.html#id358537">Managing Domain Machine Accounts using NT4 Server Manager</a></dt><dt>UTF-8, <a class="indexterm" href="unicode.html#id450371">Samba and Charsets</a>, <a class="indexterm" href="unicode.html#id450646">Basic Parameter Setting</a></dt><dt>UTF-8 encoding, <a class="indexterm" href="SWAT.html#id461566">Enabling SWAT Internationalization Support</a></dt></dl></div><div class="indexdiv"><h3>V</h3><dl><dt>valid username/password, <a class="indexterm" href="securing-samba.html#id403481">Using IPC$ Share-Based Denials </a></dt><dt>valid users, <a class="indexterm" href="diagnosis.html#id462567">The Tests</a></dt><dt>validate, <a class="indexterm" href="install.html#id343059">Test Your Config File with testparm</a>, <a class="indexterm" href="diagnosis.html#id462256">Introduction</a></dt><dt>validate every backup, <a class="indexterm" href="NT4Migration.html#id459433">Server Share and Directory Layout</a></dt><dt>validation, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a>, <a class="indexterm" href="PolicyMgmt.html">System and Account Policies</a></dt><dt>vendor-provided drivers, <a class="indexterm" href="CUPS-printing.html#id417596">Raw Print Serving: Vendor Drivers on Windows Clients</a></dt><dt>verifiable, <a class="indexterm" href="NetworkBrowsing.html#id372827">Behavior of Cross-Subnet Browsing</a></dt><dt>verify, <a class="indexterm" href="classicalprinting.html#id407391">Rapid Configuration Validation</a></dt><dt>version control, <a class="indexterm" href="VFS.html#id433767">shadow_copy</a></dt><dt>VFS, <a class="indexterm" href="samba-pdc.html#id352336">Domain Control: Example Configuration</a>, <a class="indexterm" href="VFS.html#id432421">Discussion</a></dt><dt>VFS module, <a class="indexterm" href="VFS.html#id433767">shadow_copy</a>, <a class="indexterm" href="ProfileMgmt.html#id444102">Mandatory Profiles</a></dt><dt>VFS modules, <a class="indexterm" href="VFS.html#id432421">Discussion</a>, <a class="indexterm" href="VFS.html#id434600">VFS Modules Available Elsewhere</a></dt><dt>vgcreate, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>vgdisplay, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>vipw, <a class="indexterm" href="samba-pdc.html#id353884">&#8220;$&#8221; Cannot Be Included in Machine Name</a>, <a class="indexterm" href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a></dt><dt>Virtual File System (see VFS)</dt><dt>virtual server, <a class="indexterm" href="SambaHA.html#id452542">The Front-End Challenge</a>, <a class="indexterm" href="SambaHA.html#id453095">A Simple Solution</a></dt><dt>virus scanner, <a class="indexterm" href="VFS.html#id432421">Discussion</a></dt><dt>Visual Studio, <a class="indexterm" href="CUPS-printing.html#id423941">PostScript Drivers with No Major Problems, Even in Kernel
+Mode</a></dt><dt>vital task, <a class="indexterm" href="SambaHA.html#id452170">Features and Benefits</a></dt><dt>VNC/RFB, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a></dt><dt>volume group, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>volunteers, <a class="indexterm" href="problems.html#id465036">Getting Mailing List Help</a></dt><dt>vscan, <a class="indexterm" href="VFS.html#id434675">vscan</a></dt><dt>vuid, <a class="indexterm" href="SambaHA.html#id452629">Demultiplexing SMB Requests</a></dt></dl></div><div class="indexdiv"><h3>W</h3><dl><dt>W32X86, <a class="indexterm" href="classicalprinting.html#id411938">Identifying Driver Files</a>, <a class="indexterm" href="CUPS-printing.html#id423941">PostScript Drivers with No Major Problems, Even in Kernel
+Mode</a>, <a class="indexterm" href="CUPS-printing.html#id424821">Caveats to Be Considered</a></dt><dt>W32X86/2, <a class="indexterm" href="CUPS-printing.html#id419056">Using Windows-Formatted Vendor PPDs</a></dt><dt>WAN, <a class="indexterm" href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a>, <a class="indexterm" href="locking.html#id401395">Slow and/or Unreliable Networks</a></dt><dt>wbinfo, <a class="indexterm" href="winbind.html#id437506">Starting and Testing the winbindd Daemon</a></dt><dt>Web-based configuration, <a class="indexterm" href="SWAT.html">SWAT: The Samba Web Administration Tool</a></dt><dt>WebClient, <a class="indexterm" href="NetworkBrowsing.html#id373792">Browsing of Shares and Directories is Very Slow</a></dt><dt>Welcome, <a class="indexterm" href="ClientConfig.html#id365265">Joining a Domain: Windows 2000/XP Professional</a></dt><dt>well known RID, <a class="indexterm" href="rights.html#id395344">The Administrator Domain SID</a></dt><dt>well-controlled network, <a class="indexterm" href="NT4Migration.html#id459433">Server Share and Directory Layout</a></dt><dt>well-known RID, <a class="indexterm" href="groupmapping.html#id383950">Default Users, Groups, and Relative Identifiers</a></dt><dt>wide-area network bandwidth, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>win election, <a class="indexterm" href="NetworkBrowsing.html#id370405">Making Samba the Domain Master</a></dt><dt>Win32 printing API, <a class="indexterm" href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></dt><dt>WIN40, <a class="indexterm" href="classicalprinting.html#id411938">Identifying Driver Files</a>, <a class="indexterm" href="classicalprinting.html#id412304">Obtaining Driver Files from Windows Client [print$] Shares</a>, <a class="indexterm" href="CUPS-printing.html#id424821">Caveats to Be Considered</a></dt><dt>winbind, <a class="indexterm" href="domain-member.html#id360028">Why Is This Better Than security = server?</a>, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="idmapper.html#id391558">Examples of IDMAP Backend Usage</a>, <a class="indexterm" href="idmapper.html#id391641">NT4-Style Domains (Includes Samba Domains)</a>, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a>, <a class="indexterm" href="winbind.html#id434945">Features and Benefits</a>, <a class="indexterm" href="winbind.html#id437089">Configure smb.conf</a></dt><dt>Winbind, <a class="indexterm" href="StandAloneServer.html#id362296">Background</a>, <a class="indexterm" href="winbind.html#id435485">Target Uses</a>, <a class="indexterm" href="winbind.html#id435761">Microsoft Active Directory Services</a>, <a class="indexterm" href="winbind.html#id436017">Pluggable Authentication Modules</a>, <a class="indexterm" href="winbind.html#id436158">User and Group ID Allocation</a>, <a class="indexterm" href="winbind.html#id436226">Result Caching</a>, <a class="indexterm" href="winbind.html#id436282">Introduction</a>, <a class="indexterm" href="winbind.html#id436613">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a>, <a class="indexterm" href="winbind.html#id436987">NSS Winbind on AIX</a>, <a class="indexterm" href="winbind.html#id437506">Starting and Testing the winbindd Daemon</a>, <a class="indexterm" href="winbind.html#id438353">Linux/FreeBSD-Specific PAM Configuration</a>, <a class="indexterm" href="winbind.html#id438782">Conclusion</a>, <a class="indexterm" href="pam.html">PAM-Based Distributed Authentication</a>, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt><dt>Winbind architecture, <a class="indexterm" href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a></dt><dt>Winbind hooks, <a class="indexterm" href="winbind.html#id435346">What Winbind Provides</a></dt><dt>Winbind services, <a class="indexterm" href="winbind.html#id437506">Starting and Testing the winbindd Daemon</a></dt><dt>Winbind-based authentication, <a class="indexterm" href="pam.html">PAM-Based Distributed Authentication</a></dt><dt>winbind.so, <a class="indexterm" href="winbind.html#id438670">Solaris-Specific Configuration</a></dt><dt>winbindd, <a class="indexterm" href="install.html#id342668">Starting Samba</a>, <a class="indexterm" href="install.html#id343059">Test Your Config File with testparm</a>, <a class="indexterm" href="FastStart.html#id345540">Example Configuration</a>, <a class="indexterm" href="samba-bdc.html#id356586">Example Configuration</a>, <a class="indexterm" href="ChangeNotes.html#id366943">Group Mapping Changes in Samba-3.0.23</a>, <a class="indexterm" href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a>, <a class="indexterm" href="groupmapping.html#id382442">Features and Benefits</a>, <a class="indexterm" href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a>, <a class="indexterm" href="NetCommand.html#id387104">UNIX and Windows User Management</a>, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a>, <a class="indexterm" href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a>, <a class="indexterm" href="InterdomainTrusts.html">Interdomain Trust Relationships</a>, <a class="indexterm" href="winbind.html#id434945">Features and Benefits</a>, <a class="indexterm" href="winbind.html#id435636">How Winbind Works</a>, <a class="indexterm" href="winbind.html#id436389">Requirements</a>, <a class="indexterm" href="winbind.html#id436531">Testing Things Out</a>, <a class="indexterm" href="winbind.html#id436613">Configure nsswitch.conf and the Winbind Libraries on Linux and Solaris</a>, <a class="indexterm" href="winbind.html#id437089">Configure smb.conf</a>, <a class="indexterm" href="winbind.html#id437506">Starting and Testing the winbindd Daemon</a>, <a class="indexterm" href="winbind.html#id438031">Solaris</a>, <a class="indexterm" href="winbind.html#id438194">Configure Winbind and PAM</a>, <a class="indexterm" href="cfgsmarts.html#id453922">Multiple Server Hosting</a></dt><dt>winbindd daemon, <a class="indexterm" href="winbind.html#id437848">Linux</a></dt><dt>Windows, <a class="indexterm" href="idmapper.html">Identity Mapping (IDMAP)</a>, <a class="indexterm" href="unicode.html#id450646">Basic Parameter Setting</a></dt><dt>Windows 2000, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a>, <a class="indexterm" href="domain-member.html#ads-test-server">Testing Server Setup</a>, <a class="indexterm" href="NetworkBrowsing.html">Network Browsing</a>, <a class="indexterm" href="InterdomainTrusts.html#id404336">Trust Relationship Background</a></dt><dt>Windows 2000 Professional TCP/IP, <a class="indexterm" href="ClientConfig.html#id364254">MS Windows 2000</a></dt><dt>Windows 2000 server, <a class="indexterm" href="InterdomainTrusts.html#id405489">NT4-Style Domain Trusts with Windows 2000</a></dt><dt>Windows 2003, <a class="indexterm" href="domain-member.html#id360470">Configure /etc/krb5.conf</a>, <a class="indexterm" href="domain-member.html#id362092">I Can't Join a Windows 2003 PDC</a></dt><dt>Windows 200x/XP, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a>, <a class="indexterm" href="classicalprinting.html#id406449">Features and Benefits</a></dt><dt>Windows 9x/Me, <a class="indexterm" href="ClientConfig.html#id365774">Domain Logon Configuration: Windows 9x/Me</a>, <a class="indexterm" href="NetworkBrowsing.html#id371282">WINS Server Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#id371853">Windows Networking Protocols</a>, <a class="indexterm" href="AdvancedNetworkManagement.html#id439095">Remote Server Administration</a></dt><dt>Windows 9x/Me/XP Home, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>Windows account management, <a class="indexterm" href="winbind.html#id435346">What Winbind Provides</a></dt><dt>Windows client, <a class="indexterm" href="rights.html#id395514">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>Windows client failover, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>Windows domain, <a class="indexterm" href="upgrading-to-3.0.html#id457871">Changes in Behavior</a></dt><dt>Windows Explorer, <a class="indexterm" href="NetworkBrowsing.html#id372438">Problem Resolution</a>, <a class="indexterm" href="classicalprinting.html#id411938">Identifying Driver Files</a></dt><dt>Windows group, <a class="indexterm" href="groupmapping.html">Group Mapping: MS Windows and UNIX</a>, <a class="indexterm" href="groupmapping.html#id383149">Warning: User Private Group Problems</a>, <a class="indexterm" href="NetCommand.html#id386085">Mapping Windows Groups to UNIX Groups</a>, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>Windows group account, <a class="indexterm" href="rights.html#id395344">The Administrator Domain SID</a></dt><dt>Windows groups, <a class="indexterm" href="NetCommand.html#id386085">Mapping Windows Groups to UNIX Groups</a></dt><dt>Windows Internet Name Server (see WINS)</dt><dt>Windows Logon, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a></dt><dt>Windows Me TCP/IP, <a class="indexterm" href="ClientConfig.html#id364780">MS Windows Me</a></dt><dt>Windows Millennium, <a class="indexterm" href="ClientConfig.html#id364780">MS Windows Me</a></dt><dt>Windows Millennium edition (Me) TCP/IP, <a class="indexterm" href="ClientConfig.html#id364780">MS Windows Me</a></dt><dt>Windows network clients, <a class="indexterm" href="NetworkBrowsing.html#id367309">Features and Benefits</a></dt><dt>Windows NT domain name, <a class="indexterm" href="ClientConfig.html#id365774">Domain Logon Configuration: Windows 9x/Me</a></dt><dt>Windows NT PostScript driver, <a class="indexterm" href="CUPS-printing.html#id430701">Printing from CUPS to Windows-Attached Printers</a></dt><dt>Windows NT Server, <a class="indexterm" href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></dt><dt>Windows NT/2000/XP, <a class="indexterm" href="classicalprinting.html#id412953">Check Samba for Driver Recognition</a></dt><dt>Windows NT/200x, <a class="indexterm" href="NetworkBrowsing.html#id371282">WINS Server Configuration</a>, <a class="indexterm" href="winbind.html#id436282">Introduction</a></dt><dt>Windows NT/200x/XP, <a class="indexterm" href="classicalprinting.html#id408205">The [global] Section</a></dt><dt>Windows NT/200x/XP Professional, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a>, <a class="indexterm" href="ClientConfig.html#id365265">Joining a Domain: Windows 2000/XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id366202">Common Errors</a></dt><dt>Windows NT3.10, <a class="indexterm" href="samba-bdc.html#id354803">Essential Background Information</a></dt><dt>Windows NT4, <a class="indexterm" href="AccessControls.html#id398322">Windows NT4 Workstation/Server</a>, <a class="indexterm" href="classicalprinting.html#id406449">Features and Benefits</a></dt><dt>Windows NT4 domains, <a class="indexterm" href="InterdomainTrusts.html#id404795">Interdomain Trust Facilities</a></dt><dt>Windows NT4 Server, <a class="indexterm" href="InterdomainTrusts.html#id404991">Configuring Samba NT-Style Domain Trusts</a></dt><dt>Windows NT4/200X, <a class="indexterm" href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a></dt><dt>Windows NT4/200x, <a class="indexterm" href="groupmapping.html#id382834">Discussion</a></dt><dt>Windows NT4/200x/XP, <a class="indexterm" href="samba-bdc.html#id356009">NetBIOS Over TCP/IP Enabled</a>, <a class="indexterm" href="groupmapping.html#id383950">Default Users, Groups, and Relative Identifiers</a>, <a class="indexterm" href="AccessControls.html#id398424">Windows 200x/XP</a></dt><dt>Windows NT4/2kX/XPPro, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>Windows PPD, <a class="indexterm" href="CUPS-printing.html#id428630">690 &#8220;Perfect&#8221; Printers</a></dt><dt>Windows privilege model, <a class="indexterm" href="rights.html#id394039">Rights Management Capabilities</a></dt><dt>Windows Registry, <a class="indexterm" href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></dt><dt>windows registry settings, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a></dt><dd><dl><dt>default profile locations, <a class="indexterm" href="ProfileMgmt.html#id444459">MS Windows NT4 Workstation</a>, <a class="indexterm" href="ProfileMgmt.html#id444984">MS Windows 200x/XP</a></dt><dt>profile path, <a class="indexterm" href="ProfileMgmt.html#id442389">Windows 9x/Me Profile Setup</a></dt><dt>roaming profiles, <a class="indexterm" href="ProfileMgmt.html#id442177">Disabling Roaming Profile Support</a></dt></dl></dd><dt>Windows Resource Kit, <a class="indexterm" href="ProfileMgmt.html#id442177">Disabling Roaming Profile Support</a></dt><dt>Windows Security Identifiers (see SID)</dt><dt>Windows Terminal server, <a class="indexterm" href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a></dt><dt>Windows Terminal Server, <a class="indexterm" href="AdvancedNetworkManagement.html#id439596">Remote Management with ThinLinc</a></dt><dt>Windows user, <a class="indexterm" href="rights.html">User Rights and Privileges</a></dt><dt>Windows user accounts, <a class="indexterm" href="NetCommand.html#id387104">UNIX and Windows User Management</a></dt><dt>Windows workstation., <a class="indexterm" href="rights.html#id395514">What Rights and Privileges Will Permit Windows Client Administration?</a></dt><dt>Windows XP Home, <a class="indexterm" href="passdb.html#id375167">Important Notes About Security</a></dt><dt>Windows XP Home edition, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id353265">The Special Case of MS Windows XP Home Edition</a>, <a class="indexterm" href="ClientConfig.html#id365774">Domain Logon Configuration: Windows 9x/Me</a></dt><dt>Windows XP Home Edition, <a class="indexterm" href="ProfileMgmt.html#id444984">MS Windows 200x/XP</a></dt><dt>Windows XP Professional, <a class="indexterm" href="ClientConfig.html#id363638">MS Windows XP Professional</a>, <a class="indexterm" href="classicalprinting.html#id406449">Features and Benefits</a></dt><dt>Windows XP Professional TCP/IP, <a class="indexterm" href="ClientConfig.html#id364254">MS Windows 2000</a></dt><dt>Windows XP TCP/IP, <a class="indexterm" href="ClientConfig.html#id363638">MS Windows XP Professional</a></dt><dt>Windows95/98/ME, <a class="indexterm" href="classicalprinting.html#id412953">Check Samba for Driver Recognition</a></dt><dt>winnt.adm, <a class="indexterm" href="PolicyMgmt.html#id440493">Windows NT4-Style Policy Files</a></dt><dt>WINS, <a class="indexterm" href="samba-pdc.html#id350366">Features and Benefits</a>, <a class="indexterm" href="samba-pdc.html#id351413">Domain Controller Types</a>, <a class="indexterm" href="samba-pdc.html#id351870">Preparing for Domain Control</a>, <a class="indexterm" href="samba-bdc.html#id355874">What Qualifies a Domain Controller on the Network?</a>, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a>, <a class="indexterm" href="StandAloneServer.html#RefDocServer">Reference Documentation Server</a>, <a class="indexterm" href="ClientConfig.html#id363638">MS Windows XP Professional</a>, <a class="indexterm" href="ClientConfig.html#id364254">MS Windows 2000</a>, <a class="indexterm" href="ClientConfig.html#id364780">MS Windows Me</a>, <a class="indexterm" href="NetworkBrowsing.html">Network Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id367309">Features and Benefits</a>, <a class="indexterm" href="NetworkBrowsing.html#id367475">What Is Browsing?</a>, <a class="indexterm" href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a>, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a>, <a class="indexterm" href="NetworkBrowsing.html#id369843">Domain Browsing Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#id370405">Making Samba the Domain Master</a>, <a class="indexterm" href="NetworkBrowsing.html#id371035">WINS: The Windows Internetworking Name Server</a>, <a class="indexterm" href="NetworkBrowsing.html#id371282">WINS Server Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#id372177">Technical Overview of Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id372256">Browsing Support in Samba</a>, <a class="indexterm" href="NetworkBrowsing.html#id372672">Cross-Subnet Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id372827">Behavior of Cross-Subnet Browsing</a>, <a class="indexterm" href="integrate-ms-networks.html#id449811">WINS Lookup</a>, <a class="indexterm" href="DNSDHCP.html#id471220">Example Configuration</a></dt><dt>wins, <a class="indexterm" href="integrate-ms-networks.html#id449073">/etc/nsswitch.conf</a></dt><dt>WINS Configuration, <a class="indexterm" href="NetworkBrowsing.html#id373792">Browsing of Shares and Directories is Very Slow</a></dt><dt>WINS lookup, <a class="indexterm" href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></dt><dt>WINS replication, <a class="indexterm" href="NetworkBrowsing.html#id371576">WINS Replication</a>, <a class="indexterm" href="NetworkBrowsing.html#id371626">Static WINS Entries</a></dt><dt>WINS Server, <a class="indexterm" href="NetworkBrowsing.html#id367475">What Is Browsing?</a></dt><dt>WINS server, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a>, <a class="indexterm" href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id370405">Making Samba the Domain Master</a>, <a class="indexterm" href="NetworkBrowsing.html#id371282">WINS Server Configuration</a>, <a class="indexterm" href="NetworkBrowsing.html#id372256">Browsing Support in Samba</a>, <a class="indexterm" href="NetworkBrowsing.html#id373792">Browsing of Shares and Directories is Very Slow</a></dt><dt>WINS server address, <a class="indexterm" href="NetworkBrowsing.html#id368969">How Browsing Functions</a></dt><dt>WINS server settings, <a class="indexterm" href="ClientConfig.html#id364780">MS Windows Me</a></dt><dt>WINS servers, <a class="indexterm" href="NetworkBrowsing.html#id371035">WINS: The Windows Internetworking Name Server</a></dt><dt>WINS service, <a class="indexterm" href="NetworkBrowsing.html#id371282">WINS Server Configuration</a></dt><dt>WINS Support, <a class="indexterm" href="NetworkBrowsing.html#id367475">What Is Browsing?</a></dt><dt>wins.dat, <a class="indexterm" href="NetworkBrowsing.html#id371626">Static WINS Entries</a></dt><dt>without Administrator account, <a class="indexterm" href="rights.html#id395344">The Administrator Domain SID</a></dt><dt>without ADS, <a class="indexterm" href="NT4Migration.html#id458863">Objectives</a></dt><dt>work-flow protocol, <a class="indexterm" href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></dt><dt>workgroup, <a class="indexterm" href="ServerType.html#id349552">Server Security (User Level Security)</a>, <a class="indexterm" href="samba-pdc.html#id351870">Preparing for Domain Control</a>, <a class="indexterm" href="samba-pdc.html#id353296">The Special Case of Windows 9x/Me</a>, <a class="indexterm" href="ClientConfig.html#id365774">Domain Logon Configuration: Windows 9x/Me</a>, <a class="indexterm" href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a>, <a class="indexterm" href="NetworkBrowsing.html#id370405">Making Samba the Domain Master</a>, <a class="indexterm" href="integrate-ms-networks.html#id449183">Name Resolution as Used within MS Windows Networking</a>, <a class="indexterm" href="cfgsmarts.html#id453922">Multiple Server Hosting</a>, <a class="indexterm" href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></dt><dd><dl><dt>membership, <a class="indexterm" href="samba-pdc.html#id351870">Preparing for Domain Control</a></dt></dl></dd><dt>workstations, <a class="indexterm" href="passdb.html#passdbtech">Technical Information</a></dt><dt>world-writable, <a class="indexterm" href="AccessControls.html#id396582">File and Directory Access Control</a></dt><dt>write, <a class="indexterm" href="AccessControls.html#id396582">File and Directory Access Control</a></dt><dt>write access, <a class="indexterm" href="AccessControls.html#id396956">Protecting Directories and Files from Deletion</a></dt><dt>Write caching, <a class="indexterm" href="locking.html#id400867">Opportunistic Locking Overview</a></dt><dt>write changes, <a class="indexterm" href="idmapper.html#id391492">Backup Domain Controller</a></dt><dt>write permission, <a class="indexterm" href="domain-member.html#ads-create-machine-account">Create the Computer Account</a></dt><dt>writeable, <a class="indexterm" href="VFS.html#fakeperms">fake_perms</a></dt><dt>WYSIWYG, <a class="indexterm" href="CUPS-printing.html#id418358">Windows Drivers, GDI, and EMF</a></dt></dl></div><div class="indexdiv"><h3>X</h3><dl><dt>X Window
+	System, <a class="indexterm" href="CUPS-printing.html#id418358">Windows Drivers, GDI, and EMF</a>, <a class="indexterm" href="CUPS-printing.html#id418524">UNIX Printfile Conversion and GUI Basics</a></dt><dt>X.509 certificates, <a class="indexterm" href="ch-ldap-tls.html#s1-intro-ldap-tls">Introduction</a></dt><dt>XFS file system, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>xfsprogs, <a class="indexterm" href="VFS.html#id433938">Shadow Copy Setup</a></dt><dt>xinetd, <a class="indexterm" href="SWAT.html#id460847">Validate SWAT Installation</a>, <a class="indexterm" href="compiling.html#id467095">Starting from inetd.conf</a> (see inetd)</dt><dt>XML, <a class="indexterm" href="ChangeNotes.html#id366887">Passdb Changes</a></dt><dt>XML-based datasets, <a class="indexterm" href="CUPS-printing.html#id429175">Foomatic Database-Generated PPDs</a></dt><dt>xpp, <a class="indexterm" href="CUPS-printing.html#id429175">Foomatic Database-Generated PPDs</a></dt><dt>Xprint, <a class="indexterm" href="CUPS-printing.html#id418358">Windows Drivers, GDI, and EMF</a>, <a class="indexterm" href="CUPS-printing.html#id418524">UNIX Printfile Conversion and GUI Basics</a></dt><dt>xxxxBSD, <a class="indexterm" href="pam.html#id445976">Features and Benefits</a></dt></dl></div><div class="indexdiv"><h3>Y</h3><dl><dt>yppasswd, <a class="indexterm" href="passdb.html#id376958">The smbpasswd Tool</a></dt></dl></div><div class="indexdiv"><h3>Z</h3><dl><dt>Zero Administration Kit, <a class="indexterm" href="PolicyMgmt.html#id440493">Windows NT4-Style Policy Files</a></dt><dt>zero-based broadcast, <a class="indexterm" href="NetworkBrowsing.html#id370625">Note about Broadcast Addresses</a></dt></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="go01.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top">Glossary </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/largefile.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/largefile.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/largefile.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,39 +1,39 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 33. Handling Large Directories</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="SambaHA.html" title="Chapter 32. High Availability"><link rel="next" href="cfgsmarts.html" title="Chapter 34. Advanced Configuration Techniques"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 33. Handling Large Directories</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="SambaHA.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="cfgsmarts.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="largefile"></a>Chapter 33. Handling Large Directories</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jeremy</span> <span class="surname">Allison</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jra at samba.org">jra at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">March 5, 2005</p></div></div></div><p>
-<a class="indexterm" name="id2695688"></a>
-<a class="indexterm" name="id2695695"></a>
-<a class="indexterm" name="id2695702"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 33. Handling Large Directories</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="SambaHA.html" title="Chapter 32. High Availability"><link rel="next" href="cfgsmarts.html" title="Chapter 34. Advanced Configuration Techniques"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 33. Handling Large Directories</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="SambaHA.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="cfgsmarts.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="largefile"></a>Chapter 33. Handling Large Directories</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jeremy</span> <span class="surname">Allison</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jra at samba.org">jra at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">March 5, 2005</p></div></div></div><p>
+<a class="indexterm" name="id453428"></a>
+<a class="indexterm" name="id453434"></a>
+<a class="indexterm" name="id453441"></a>
 Samba-3.0.12 and later implements a solution for sites that have experienced performance degradation due to the
 problem of using Samba-3 with applications that need large numbers of files (100,000 or more) per directory.
 </p><p>
-<a class="indexterm" name="id2695716"></a>
-<a class="indexterm" name="id2695723"></a>
+<a class="indexterm" name="id453453"></a>
+<a class="indexterm" name="id453460"></a>
 The key was fixing the directory handling to read only the current list requested instead of the old
 (up to samba-3.0.11) behavior of reading the entire directory into memory before doling out names.
 Normally this would have broken OS/2 applications, which have very strange delete semantics, but by
 stealing logic from Samba4 (thanks, Tridge), the current code in 3.0.12 handles this correctly.
 </p><p>
-<a class="indexterm" name="id2695740"></a>
-<a class="indexterm" name="id2695747"></a>
+<a class="indexterm" name="id453474"></a>
+<a class="indexterm" name="id453481"></a>
 To set up an application that needs large numbers of files per directory in a way that does not
 damage performance unduly, follow these steps:
 </p><p>
-<a class="indexterm" name="id2695760"></a>
+<a class="indexterm" name="id453492"></a>
 First, you need to canonicalize all the files in the directory to have one case, upper or lower  take your
 pick (I chose upper because all my files were already uppercase names). Then set up a new custom share for the
 application as follows:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[bigshare]</code></em></td></tr><tr><td><a class="indexterm" name="id2695788"></a><em class="parameter"><code>path = /data/manyfilesdir</code></em></td></tr><tr><td><a class="indexterm" name="id2695800"></a><em class="parameter"><code>read only = no</code></em></td></tr><tr><td><a class="indexterm" name="id2695811"></a><em class="parameter"><code>case sensitive = True</code></em></td></tr><tr><td><a class="indexterm" name="id2695823"></a><em class="parameter"><code>default case = upper</code></em></td></tr><tr><td><a class="indexterm" name="id2695835"></a><em class="parameter"><code>preserve case = no</code></em></td></tr><tr><td><a class="indexterm" name="id2695847"></a><em class="parameter"><code>short preserve case = no</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[bigshare]</code></em></td></tr><tr><td><a class="indexterm" name="id453518"></a><em class="parameter"><code>path = /data/manyfilesdir</code></em></td></tr><tr><td><a class="indexterm" name="id453529"></a><em class="parameter"><code>read only = no</code></em></td></tr><tr><td><a class="indexterm" name="id453541"></a><em class="parameter"><code>case sensitive = True</code></em></td></tr><tr><td><a class="indexterm" name="id453552"></a><em class="parameter"><code>default case = upper</code></em></td></tr><tr><td><a class="indexterm" name="id453564"></a><em class="parameter"><code>preserve case = no</code></em></td></tr><tr><td><a class="indexterm" name="id453575"></a><em class="parameter"><code>short preserve case = no</code></em></td></tr></table><p>
 </p><p>
-<a class="indexterm" name="id2695862"></a>
-<a class="indexterm" name="id2695869"></a>
-<a class="indexterm" name="id2695876"></a>
+<a class="indexterm" name="id453590"></a>
+<a class="indexterm" name="id453597"></a>
+<a class="indexterm" name="id453604"></a>
 Of course, use your own path and settings, but set the case options to match the case of all the files in your
 directory. The path should point at the large directory needed for the application  any new files created in
 there and in any paths under it will be forced by smbd into uppercase, but smbd will no longer have to scan
 the directory for names: it knows that if a file does not exist in uppercase, then it doesn't exist at all.
 </p><p>
-<a class="indexterm" name="id2695896"></a>
-<a class="indexterm" name="id2695902"></a>
-<a class="indexterm" name="id2695909"></a>
+<a class="indexterm" name="id453621"></a>
+<a class="indexterm" name="id453627"></a>
+<a class="indexterm" name="id453634"></a>
 The secret to this is really in the <a class="link" href="smb.conf.5.html#CASESENSITIVE">case sensitive = True</a>
 line. This tells smbd never to scan for case-insensitive versions of names. So if an application asks for a file
 called <code class="filename">FOO</code>, and it cannot be found by a simple stat call, then smbd will return file not
@@ -41,9 +41,9 @@
 <code class="filename">xxx case xxx</code> lines make this work by forcing a consistent case on all files created by
 <span class="application">smbd</span>.
 </p><p>
-<a class="indexterm" name="id2695956"></a>
-<a class="indexterm" name="id2695963"></a>
-<a class="indexterm" name="id2695970"></a>
+<a class="indexterm" name="id453675"></a>
+<a class="indexterm" name="id453682"></a>
+<a class="indexterm" name="id453688"></a>
 Remember, all files and directories under the <em class="parameter"><code>path</code></em> directory must be in uppercase
 with this <code class="filename">smb.conf</code> stanza because <span class="application">smbd</span> will not be able to find lowercase filenames with these settings. Also
 note that this is done on a per-share basis, allowing this parameter to be set only for a share servicing an application with

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/locking.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/locking.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/locking.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,19 +1,19 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 17. File and Record Locking</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="AccessControls.html" title="Chapter 16. File, Directory, and Share Access Controls"><link rel="next" href="securing-samba.html" title="Chapter 18. Securing Samba"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 17. File and Record Locking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="AccessControls.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="securing-samba.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="locking"></a>Chapter 17. File and Record Locking</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jeremy</span> <span class="surname">Allison</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jra at samba.org">jra at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Eric</span> <span class="surname">Roseme</span></h3><div class="affiliation"><span class="orgname">HP Oplocks Usage Recommendations Whitepaper<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:eric.roseme at hp.com">eric.roseme at hp.com</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="locking.html#id2637637">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="locking.html#id2637734">Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="locking.html#id2637992">Opportunistic Locking Overview</a></span></dt></dl></dd><dt><span class="sect1"><a href="locking.html#id2638966">Samba Oplocks Control</a></span></dt><dd><dl><dt><span class="sect2"><a href="locking.html#id2639060">Example Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="locking.html#id2639474">MS Windows Oplocks and Caching Controls</a></span></dt><dd><dl><dt><span class="sect2"><a href="locking.html#id2639661">Workstation Service Entries</a></span></dt><dt><span class="sect2"><a href="locking.html#id2639683">Server Service Entries</a></span></dt></dl></dd><dt><span class="sect1"><a href="locking.html#id2639749">Persistent Data Corruption</a></span></dt><dt><span class="sect1"><a href="locking.html#id2639774">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="locking.html#id2639842">locking.tdb Error Messages</a></span></dt><dt><span class="sect2"><a href="locking.html#id2639872">Problems Saving Files in MS Office on Windows XP</a></span></dt><dt><span class="sect2"><a href="locking.html#id2639897">Long Delays Deleting Files over Network with XP SP1</a></span></dt></dl></dd><dt><span class="sect1"><a href="locking.html#id2639928">Additional Reading</a></span></dt></dl></div><p>
-<a class="indexterm" name="id2637626"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 17. File and Record Locking</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="AccessControls.html" title="Chapter 16. File, Directory, and Share Access Controls"><link rel="next" href="securing-samba.html" title="Chapter 18. Securing Samba"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 17. File and Record Locking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="AccessControls.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="securing-samba.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="locking"></a>Chapter 17. File and Record Locking</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jeremy</span> <span class="surname">Allison</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jra at samba.org">jra at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Eric</span> <span class="surname">Roseme</span></h3><div class="affiliation"><span class="orgname">HP Oplocks Usage Recommendations Whitepaper<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:eric.roseme at hp.com">eric.roseme at hp.com</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="locking.html#id400544">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="locking.html#id400630">Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="locking.html#id400867">Opportunistic Locking Overview</a></span></dt></dl></dd><dt><span class="sect1"><a href="locking.html#id401718">Samba Oplocks Control</a></span></dt><dd><dl><dt><span class="sect2"><a href="locking.html#id401786">Example Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="locking.html#id402171">MS Windows Oplocks and Caching Controls</a></span></dt><dd><dl><dt><span class="sect2"><a href="locking.html#id402323">Workstation Service Entries</a></span></dt><dt><span class="sect2"><a href="locking.html#id402342">Server Service Entries</a></span></dt></dl></dd><dt><span class="sect1"><a href="locking.html#id402398">Persistent Data Corruption</a></span></dt><dt><span class="sect1"><a href="locking.html#id402418">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="locking.html#id402468">locking.tdb Error Messages</a></span></dt><dt><span class="sect2"><a href="locking.html#id402497">Problems Saving Files in MS Office on Windows XP</a></span></dt><dt><span class="sect2"><a href="locking.html#id402519">Long Delays Deleting Files over Network with XP SP1</a></span></dt></dl></dd><dt><span class="sect1"><a href="locking.html#id402548">Additional Reading</a></span></dt></dl></div><p>
+<a class="indexterm" name="id400534"></a>
 One area that causes trouble for many network administrators is locking.
 The extent of the problem is readily evident from searches over the Internet.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2637637"></a>Features and Benefits</h2></div></div></div><p>
-<a class="indexterm" name="id2637645"></a>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id400544"></a>Features and Benefits</h2></div></div></div><p>
+<a class="indexterm" name="id400551"></a>
 Samba provides all the same locking semantics that MS Windows clients expect
 and that MS Windows NT4/200x servers also provide.
 </p><p>
-<a class="indexterm" name="id2637657"></a>
+<a class="indexterm" name="id400562"></a>
 The term <span class="emphasis"><em>locking</em></span> has exceptionally broad meaning and covers
 a range of functions that are all categorized under this one term.
 </p><p>
-<a class="indexterm" name="id2637673"></a>
-<a class="indexterm" name="id2637680"></a>
-<a class="indexterm" name="id2637687"></a>
+<a class="indexterm" name="id400577"></a>
+<a class="indexterm" name="id400584"></a>
+<a class="indexterm" name="id400591"></a>
 Opportunistic locking is a desirable feature when it can enhance the
 perceived performance of applications on a networked client. However, the
 opportunistic locking protocol is not robust and therefore can
@@ -23,27 +23,27 @@
 repetitive errors can offset the perceived performance advantage that
 it is intended to provide.
 </p><p>
-<a class="indexterm" name="id2637706"></a>
+<a class="indexterm" name="id400605"></a>
 The MS Windows network administrator needs to be aware that file and record
 locking semantics (behavior) can be controlled either in Samba or by way of registry
 settings on the MS Windows client.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2637721"></a>
+<a class="indexterm" name="id400619"></a>
 Sometimes it is necessary to disable locking control settings on the Samba
 server as well as on each MS Windows client!
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2637734"></a>Discussion</h2></div></div></div><p>
-<a class="indexterm" name="id2637741"></a>
-<a class="indexterm" name="id2637748"></a>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id400630"></a>Discussion</h2></div></div></div><p>
+<a class="indexterm" name="id400638"></a>
+<a class="indexterm" name="id400645"></a>
 There are two types of locking that need to be performed by an SMB server.
 The first is <span class="emphasis"><em>record locking</em></span> that allows a client to lock
 a range of bytes in an open file. The second is the <span class="emphasis"><em>deny modes</em></span>
 that are specified when a file is open.
 </p><p>
-<a class="indexterm" name="id2637769"></a>
-<a class="indexterm" name="id2637776"></a>
-<a class="indexterm" name="id2637783"></a>
-<a class="indexterm" name="id2637790"></a>
-<a class="indexterm" name="id2637797"></a>
+<a class="indexterm" name="id400664"></a>
+<a class="indexterm" name="id400671"></a>
+<a class="indexterm" name="id400678"></a>
+<a class="indexterm" name="id400684"></a>
+<a class="indexterm" name="id400691"></a>
 Record locking semantics under UNIX are very different from record locking under
 Windows. Versions of Samba before 2.2 have tried to use the native fcntl() UNIX
 system call to implement proper record locking between different Samba clients.
@@ -53,15 +53,15 @@
 So it is not possible to correctly satisfy a lock request above 2^31. There are
 many more differences, too many to be listed here.
 </p><p>
-<a class="indexterm" name="id2637817"></a>
-<a class="indexterm" name="id2637824"></a>
+<a class="indexterm" name="id400706"></a>
+<a class="indexterm" name="id400713"></a>
 Samba 2.2 and above implement record locking completely independently of the
 underlying UNIX system. If a byte-range lock that the client requests happens
 to fall into the range of 0 to 2^31, Samba hands this request down to the UNIX system.
 No other locks can be seen by UNIX, anyway.
 </p><p>
-<a class="indexterm" name="id2637839"></a>
-<a class="indexterm" name="id2637846"></a>
+<a class="indexterm" name="id400726"></a>
+<a class="indexterm" name="id400732"></a>
 Strictly speaking, an SMB server should check for locks before every read and write call on
 a file. Unfortunately, with the way fcntl() works, this can be slow and may overstress
 the <code class="literal">rpc.lockd</code>. This is almost always unnecessary because clients are 
@@ -70,57 +70,57 @@
 to by a client, but if you set <a class="link" href="smb.conf.5.html#STRICTLOCKING">strict locking = yes</a>, it
 will make lock checking calls on <span class="emphasis"><em>every</em></span> read and write call.
 </p><p>
-<a class="indexterm" name="id2637888"></a>
+<a class="indexterm" name="id400768"></a>
 You can also disable byte-range locking completely by using
 <a class="link" href="smb.conf.5.html#LOCKING">locking = no</a>.
 This is useful for those shares that do not support locking or do not need it
 (such as CD-ROMs). In this case, Samba fakes the return codes of locking calls to
 tell clients that everything is okay.
 </p><p>
-<a class="indexterm" name="id2637915"></a>
-<a class="indexterm" name="id2637921"></a>
-<a class="indexterm" name="id2637928"></a>
-<a class="indexterm" name="id2637935"></a>
-<a class="indexterm" name="id2637942"></a>
-<a class="indexterm" name="id2637948"></a>
-<a class="indexterm" name="id2637955"></a>
+<a class="indexterm" name="id400792"></a>
+<a class="indexterm" name="id400798"></a>
+<a class="indexterm" name="id400805"></a>
+<a class="indexterm" name="id400812"></a>
+<a class="indexterm" name="id400819"></a>
+<a class="indexterm" name="id400826"></a>
+<a class="indexterm" name="id400832"></a>
 The second class of locking is the <span class="emphasis"><em>deny modes</em></span>. These 
 are set by an application when it opens a file to determine what types of
 access should be allowed simultaneously with its open. A client may ask for
 <code class="constant">DENY_NONE</code>, <code class="constant">DENY_READ</code>, 
 <code class="constant">DENY_WRITE</code>, or <code class="constant">DENY_ALL</code>. There are also special compatibility
 modes called <code class="constant">DENY_FCB</code> and <code class="constant">DENY_DOS</code>.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2637992"></a>Opportunistic Locking Overview</h3></div></div></div><p>
-<a class="indexterm" name="id2638000"></a>
-<a class="indexterm" name="id2638007"></a>
-<a class="indexterm" name="id2638014"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id400867"></a>Opportunistic Locking Overview</h3></div></div></div><p>
+<a class="indexterm" name="id400875"></a>
+<a class="indexterm" name="id400882"></a>
+<a class="indexterm" name="id400889"></a>
 Opportunistic locking (oplocks) is invoked by the Windows file system
 (as opposed to an API) via registry entries (on the server and the client)
 for the purpose of enhancing network performance when accessing a file
 residing on a server. Performance is enhanced by caching the file
 locally on the client that allows the following:
 </p><div class="variablelist"><dl><dt><span class="term">Read-ahead:</span></dt><dd><p>
-<a class="indexterm" name="id2638037"></a>
+<a class="indexterm" name="id400910"></a>
 		The client reads the local copy of the file, eliminating network latency.
 		</p></dd><dt><span class="term">Write caching:</span></dt><dd><p>
-<a class="indexterm" name="id2638055"></a>
+<a class="indexterm" name="id400927"></a>
 		The client writes to the local copy of the file, eliminating network latency.
 		</p></dd><dt><span class="term">Lock caching:</span></dt><dd><p>
-<a class="indexterm" name="id2638074"></a>
+<a class="indexterm" name="id400944"></a>
 		The client caches application locks locally, eliminating network latency.
 		</p></dd></dl></div><p>
-<a class="indexterm" name="id2638088"></a>
-<a class="indexterm" name="id2638095"></a>
-<a class="indexterm" name="id2638101"></a>
+<a class="indexterm" name="id400957"></a>
+<a class="indexterm" name="id400964"></a>
+<a class="indexterm" name="id400971"></a>
 The performance enhancement of oplocks is due to the opportunity of
 exclusive access to the file  even if it is opened with deny-none 
 because Windows monitors the file's status for concurrent access from
 other processes.
 </p><div class="variablelist"><p class="title"><b>Windows Defines Four Kinds of Oplocks:</b></p><dl><dt><span class="term">Level1 Oplock</span></dt><dd><p>
-<a class="indexterm" name="id2638133"></a>
-<a class="indexterm" name="id2638139"></a>
-<a class="indexterm" name="id2638146"></a>
-<a class="indexterm" name="id2638153"></a>
+<a class="indexterm" name="id400999"></a>
+<a class="indexterm" name="id401006"></a>
+<a class="indexterm" name="id401013"></a>
+<a class="indexterm" name="id401020"></a>
 			The redirector sees that the file was opened with deny
 			none (allowing concurrent access), verifies that no
 			other process is accessing the file, checks that
@@ -128,10 +128,10 @@
 			access to the file. The client now performs
 			operations on the cached local file.
 			</p><p>
-<a class="indexterm" name="id2638168"></a>
-<a class="indexterm" name="id2638175"></a>
-<a class="indexterm" name="id2638182"></a>
-<a class="indexterm" name="id2638189"></a>
+<a class="indexterm" name="id401033"></a>
+<a class="indexterm" name="id401039"></a>
+<a class="indexterm" name="id401046"></a>
+<a class="indexterm" name="id401053"></a>
 			If a second process attempts to open the file, the open
 			is deferred while the redirector "breaks" the original
 			oplock. The oplock break signals the caching client to
@@ -145,31 +145,31 @@
 			second process is granted limited or no access, despite
 			the oplock break.
 			</p></dd><dt><span class="term">Level2 Oplock</span></dt><dd><p>
-<a class="indexterm" name="id2638217"></a>
-<a class="indexterm" name="id2638224"></a>
-<a class="indexterm" name="id2638231"></a>
+<a class="indexterm" name="id401075"></a>
+<a class="indexterm" name="id401082"></a>
+<a class="indexterm" name="id401089"></a>
 				Performs like a Level1 oplock, except caching is only
                 operative for reads. All other operations are performed
                 on the server disk copy of the file.
                 </p></dd><dt><span class="term">Filter Oplock</span></dt><dd><p>
-<a class="indexterm" name="id2638251"></a>
+<a class="indexterm" name="id401107"></a>
 				Does not allow write or delete file access.
                 </p></dd><dt><span class="term">Batch Oplock</span></dt><dd><p>
-<a class="indexterm" name="id2638270"></a>
+<a class="indexterm" name="id401125"></a>
 				Manipulates file openings and closings and allows caching
                 of file attributes.
                 </p></dd></dl></div><p>
-<a class="indexterm" name="id2638284"></a>
+<a class="indexterm" name="id401138"></a>
 An important detail is that oplocks are invoked by the file system, not
 an application API. Therefore, an application can close an oplocked
 file, but the file system does not relinquish the oplock. When the
 oplock break is issued, the file system then simply closes the file in
 preparation for the subsequent open by the second process.
 </p><p>
-<a class="indexterm" name="id2638300"></a>
-<a class="indexterm" name="id2638307"></a>
-<a class="indexterm" name="id2638314"></a>
-<a class="indexterm" name="id2638321"></a>
+<a class="indexterm" name="id401151"></a>
+<a class="indexterm" name="id401158"></a>
+<a class="indexterm" name="id401165"></a>
+<a class="indexterm" name="id401171"></a>
 <span class="emphasis"><em>Opportunistic locking</em></span> is actually an improper name for this feature.
 The true benefit of this feature is client-side data caching, and
 oplocks is merely a notification mechanism for writing data back to the
@@ -179,7 +179,7 @@
 (usually due to timing out for any number of reasons), then the
 client-side caching benefit is negated.
 </p><p>
-<a class="indexterm" name="id2638343"></a>
+<a class="indexterm" name="id401189"></a>
 The actual decision that a user or administrator should consider is
 whether it is sensible to share among multiple users data that will
 be cached locally on a client. In many cases the answer is no.
@@ -189,15 +189,15 @@
 reliable. Turn it &#8220;<span class="quote">off</span>&#8221; when client-side caching is redundant,
 unreliable, or counterproductive.
 </p><p>
-<a class="indexterm" name="id2638368"></a>
+<a class="indexterm" name="id401210"></a>
 Oplocks is by default set to &#8220;<span class="quote">on</span>&#8221; by Samba on all
 configured shares, so careful attention should be given to each case to
 determine if the potential benefit is worth the potential for delays.
 The following recommendations will help to characterize the environment
 where oplocks may be effectively configured.
 </p><p>
-<a class="indexterm" name="id2638386"></a>
-<a class="indexterm" name="id2638393"></a>
+<a class="indexterm" name="id401226"></a>
+<a class="indexterm" name="id401233"></a>
 Windows oplocks is a lightweight performance-enhancing
 feature. It is not a robust and reliable protocol. Every
 implementation of oplocks should be evaluated as a
@@ -208,7 +208,7 @@
 mission-critical multiuser corporate database during a tropical
 storm. This configuration will likely encounter problems with oplocks.
 </p><p>
-<a class="indexterm" name="id2638422"></a>
+<a class="indexterm" name="id401252"></a>
 Oplocks can be beneficial to perceived client performance when treated
 as a configuration toggle for client-side data caching. If the data
 caching is likely to be interrupted, then oplock usage should be
@@ -222,8 +222,8 @@
 failover replacement will be available immediately to provide
 continuous data availability.
 </p><p>
-<a class="indexterm" name="id2638445"></a>
-<a class="indexterm" name="id2638452"></a>
+<a class="indexterm" name="id401268"></a>
+<a class="indexterm" name="id401275"></a>
 Windows client failover behavior is more at risk of application
 interruption than other platforms because it is dependent upon an
 established TCP transport connection. If the connection is interrupted
@@ -233,9 +233,9 @@
 will experience some sort of interruption  at worst, abort and
 require restarting.
 </p><p>
-<a class="indexterm" name="id2638479"></a>
-<a class="indexterm" name="id2638485"></a>
-<a class="indexterm" name="id2638492"></a>
+<a class="indexterm" name="id401298"></a>
+<a class="indexterm" name="id401304"></a>
+<a class="indexterm" name="id401311"></a>
 If a client session has been caching writes and reads locally due to
 oplocks, it is likely that the data will be lost when the
 application restarts or recovers from the TCP interrupt. When the TCP
@@ -250,7 +250,7 @@
 should be given to oplocks. Ideally, comprehensive
 testing should be done with all affected applications with oplocks
 enabled and disabled.
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2638516"></a>Exclusively Accessed Shares</h4></div></div></div><p>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id401329"></a>Exclusively Accessed Shares</h4></div></div></div><p>
 Oplocks is most effective when it is confined to shares
 that are exclusively accessed by a single user, or by only one user at
 a time. Because the true value of oplocks is the local
@@ -259,7 +259,7 @@
 </p><p>
 Home directories are the most obvious examples of where the performance
 benefit of oplocks can be safely realized.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2638537"></a>Multiple-Accessed Shares or Files</h4></div></div></div><p>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id401346"></a>Multiple-Accessed Shares or Files</h4></div></div></div><p>
 As each additional user accesses a file in a share with oplocks
 enabled, the potential for delays and resulting perceived poor
 performance increases. When multiple users are accessing a file on a
@@ -271,9 +271,9 @@
 As each additional client attempts to access a file with oplocks set,
 the potential performance improvement is negated and eventually results
 in a performance bottleneck.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2638561"></a>UNIX or NFS Client-Accessed Files</h4></div></div></div><p>
-<a class="indexterm" name="id2638569"></a>
-<a class="indexterm" name="id2638576"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id401364"></a>UNIX or NFS Client-Accessed Files</h4></div></div></div><p>
+<a class="indexterm" name="id401372"></a>
+<a class="indexterm" name="id401379"></a>
 Local UNIX and NFS clients access files without a mandatory
 file-locking mechanism. Thus, these client platforms are incapable of
 initiating an oplock break request from the server to a Windows client
@@ -283,10 +283,10 @@
 </p><p>
 If files are shared between Windows clients and either local UNIX 
 or NFS users, turn oplocks off.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2638596"></a>Slow and/or Unreliable Networks</h4></div></div></div><p>
-<a class="indexterm" name="id2638604"></a>
-<a class="indexterm" name="id2638611"></a>
-<a class="indexterm" name="id2638618"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id401395"></a>Slow and/or Unreliable Networks</h4></div></div></div><p>
+<a class="indexterm" name="id401403"></a>
+<a class="indexterm" name="id401410"></a>
+<a class="indexterm" name="id401416"></a>
 The biggest potential performance improvement for oplocks
 occurs when the client-side caching of reads and writes delivers the
 most differential over sending those reads and writes over the wire.
@@ -301,20 +301,20 @@
 If the network is slow, unreliable, or a WAN, then do not configure
 oplocks if there is any chance of multiple users
 regularly opening the same file.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2638644"></a>Multiuser Databases</h4></div></div></div><p>
-<a class="indexterm" name="id2638652"></a>
-<a class="indexterm" name="id2638658"></a>
-<a class="indexterm" name="id2638666"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id401436"></a>Multiuser Databases</h4></div></div></div><p>
+<a class="indexterm" name="id401443"></a>
+<a class="indexterm" name="id401450"></a>
+<a class="indexterm" name="id401457"></a>
 Multiuser databases clearly pose a risk due to their very nature  they are typically heavily
 accessed by numerous users at random intervals. Placing a multiuser database on a share with oplocks enabled
 will likely result in a locking management bottleneck on the Samba server. Whether the database application is
 developed in-house or a commercially available product, ensure that the share has oplocks disabled.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2638685"></a>PDM Data Shares</h4></div></div></div><p>
-<a class="indexterm" name="id2638692"></a>
-<a class="indexterm" name="id2638699"></a>
-<a class="indexterm" name="id2638706"></a>
-<a class="indexterm" name="id2638713"></a>
-<a class="indexterm" name="id2638720"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id401473"></a>PDM Data Shares</h4></div></div></div><p>
+<a class="indexterm" name="id401480"></a>
+<a class="indexterm" name="id401487"></a>
+<a class="indexterm" name="id401493"></a>
+<a class="indexterm" name="id401500"></a>
+<a class="indexterm" name="id401507"></a>
 Process data management (PDM) applications such as IMAN, Enovia, and Clearcase are increasing in usage with
 Windows client platforms and therefore with SMB datastores. PDM applications manage multiuser environments for
 critical data security and access. The typical PDM environment is usually associated with sophisticated client
@@ -322,8 +322,8 @@
 monitor the data state of each client.  In this case, client-side data caching is best left to the local
 application and PDM server to negotiate and maintain. It is appropriate to eliminate the client OS from any
 caching tasks, and the server from any oplocks management, by disabling oplocks on the share.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2638741"></a>Beware of Force User</h4></div></div></div><p>
-<a class="indexterm" name="id2638749"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id401522"></a>Beware of Force User</h4></div></div></div><p>
+<a class="indexterm" name="id401530"></a>
 Samba includes an <code class="filename">smb.conf</code> parameter called <a class="link" href="smb.conf.5.html#FORCEUSER">force user</a> that changes the user
 accessing a share from the incoming user to whatever user is defined by the <code class="filename">smb.conf</code> variable. If oplocks is
 enabled on a share, the change in user access causes an oplock break to be sent to the client, even if the
@@ -338,10 +338,10 @@
 	Slow or unreliable networks.
 	</p></li><li><p>
 	Oplocks enabled.
-	</p></li></ul></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2638829"></a>Advanced Samba Oplocks Parameters</h4></div></div></div><p>
-<a class="indexterm" name="id2638837"></a>
-<a class="indexterm" name="id2638844"></a>
-<a class="indexterm" name="id2638851"></a>
+	</p></li></ul></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id401603"></a>Advanced Samba Oplocks Parameters</h4></div></div></div><p>
+<a class="indexterm" name="id401610"></a>
+<a class="indexterm" name="id401617"></a>
+<a class="indexterm" name="id401624"></a>
 Samba provides oplock parameters that allow the
 administrator to adjust various properties of the oplock mechanism to
 account for timing and usage levels. These parameters provide good
@@ -350,13 +350,13 @@
 <a class="link" href="smb.conf.5.html#OPLOCKBREAKWAITTIME">oplock break wait time</a>, and
 <a class="link" href="smb.conf.5.html#OPLOCKCONTENTIONLIMIT">oplock contention limit</a>.
 </p><p>
-<a class="indexterm" name="id2638891"></a>
+<a class="indexterm" name="id401660"></a>
 For most users, administrators, and environments, if these parameters
 are required, then the better option is simply to turn oplocks off.
 The Samba SWAT help text for both parameters reads: &#8220;<span class="quote">Do not change
 this parameter unless you have read and understood the Samba oplock code.</span>&#8221;
 This is good advice.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2638909"></a>Mission-Critical, High-Availability</h4></div></div></div><p>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id401674"></a>Mission-Critical, High-Availability</h4></div></div></div><p>
 In mission-critical, high-availability environments, data integrity is
 often a priority. Complex and expensive configurations are implemented
 to ensure that if a client loses connectivity with a file server, a
@@ -386,7 +386,7 @@
 should be given to oplocks. Ideally, comprehensive
 testing should be done with all affected applications with oplocks
 enabled and disabled.
-</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2638966"></a>Samba Oplocks Control</h2></div></div></div><p>
+</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id401718"></a>Samba Oplocks Control</h2></div></div></div><p>
 Oplocks is a unique Windows file locking feature. It is
 not really file locking, but is included in most discussions of Windows
 file locking, so is considered a de facto locking feature.
@@ -436,23 +436,23 @@
 </p><p>
 Another factor to consider is the perceived performance of file access. If oplocks provide no
 measurable speed benefit on your network, it might not be worth the hassle of dealing with them.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2639060"></a>Example Configuration</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id401786"></a>Example Configuration</h3></div></div></div><p>
 In the following section we examine two distinct aspects of Samba locking controls.
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2639071"></a>Disabling Oplocks</h4></div></div></div><p>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id401796"></a>Disabling Oplocks</h4></div></div></div><p>
 You can disable oplocks on a per-share basis with the following:
 </p><p>
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[acctdata]</code></em></td></tr><tr><td><a class="indexterm" name="id2639098"></a><em class="parameter"><code>oplocks = False</code></em></td></tr><tr><td><a class="indexterm" name="id2639109"></a><em class="parameter"><code>level2 oplocks = False</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[acctdata]</code></em></td></tr><tr><td><a class="indexterm" name="id401822"></a><em class="parameter"><code>oplocks = False</code></em></td></tr><tr><td><a class="indexterm" name="id401834"></a><em class="parameter"><code>level2 oplocks = False</code></em></td></tr></table><p>
 </p><p>
 The default oplock type is Level1. Level2 oplocks are enabled on a per-share basis
 in the <code class="filename">smb.conf</code> file.
 </p><p>
 Alternately, you could disable oplocks on a per-file basis within the share:
 </p><p>
-	</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2639145"></a><em class="parameter"><code>veto oplock files = /*.mdb/*.MDB/*.dbf/*.DBF/</code></em></td></tr></table><p>
+	</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id401868"></a><em class="parameter"><code>veto oplock files = /*.mdb/*.MDB/*.dbf/*.DBF/</code></em></td></tr></table><p>
 </p><p>
 If you are experiencing problems with oplocks, as apparent from Samba's log entries,
 you may want to play it safe and disable oplocks and Level2 oplocks.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2639166"></a>Disabling Kernel Oplocks</h4></div></div></div><p>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id401886"></a>Disabling Kernel Oplocks</h4></div></div></div><p>
 Kernel oplocks is an <code class="filename">smb.conf</code> parameter that notifies Samba (if
 the UNIX kernel has the capability to send a Windows client an oplock
 break) when a UNIX process is attempting to open the file that is
@@ -465,7 +465,7 @@
 to send the oplock break. Kernel oplocks are enabled on a per-server
 basis in the <code class="filename">smb.conf</code> file.
 </p><p>
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2639206"></a><em class="parameter"><code>kernel oplocks = yes</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id401921"></a><em class="parameter"><code>kernel oplocks = yes</code></em></td></tr></table><p>
 The default is no.
 </p><p>
 <span class="emphasis"><em>Veto oplocks</em></span> is an <code class="filename">smb.conf</code> parameter that identifies specific files for
@@ -480,14 +480,14 @@
 enabled on a per-share basis, or globally for the entire server, in the
 <code class="filename">smb.conf</code> file as shown in <a class="link" href="locking.html#far1" title="Example 17.1. Share with Some Files Oplocked">&#8220;Share with Some Files Oplocked&#8221;</a>.
 </p><p>
-</p><div class="example"><a name="far1"></a><p class="title"><b>Example 17.1. Share with Some Files Oplocked</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2639282"></a><em class="parameter"><code>veto oplock files = /filename.htm/*.txt/</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[share_name]</code></em></td></tr><tr><td><a class="indexterm" name="id2639304"></a><em class="parameter"><code>veto oplock files = /*.exe/filename.ext/</code></em></td></tr></table></div></div><p><br class="example-break">
+</p><div class="example"><a name="far1"></a><p class="title"><b>Example 17.1. Share with Some Files Oplocked</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id401990"></a><em class="parameter"><code>veto oplock files = /filename.htm/*.txt/</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[share_name]</code></em></td></tr><tr><td><a class="indexterm" name="id402010"></a><em class="parameter"><code>veto oplock files = /*.exe/filename.ext/</code></em></td></tr></table></div></div><p><br class="example-break">
 </p><p>
 <a class="link" href="smb.conf.5.html#OPLOCKBREAKWAITTIME">oplock break wait time</a> is an <code class="filename">smb.conf</code> parameter
 that adjusts the time interval for Samba to reply to an oplock break request. Samba recommends:
 &#8220;<span class="quote">Do not change this parameter unless you have read and understood the Samba oplock code.</span>&#8221;
 Oplock break wait time can only be configured globally in the <code class="filename">smb.conf</code> file as shown:
 </p><p>
-	</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2639361"></a><em class="parameter"><code>oplock break wait time =  0 (default)</code></em></td></tr></table><p>
+	</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id402063"></a><em class="parameter"><code>oplock break wait time =  0 (default)</code></em></td></tr></table><p>
 </p><p>
 <span class="emphasis"><em>Oplock break contention limit</em></span> is an <code class="filename">smb.conf</code> parameter that limits the
 response of the Samba server to grant an oplock if the configured
@@ -496,8 +496,8 @@
 Oplock break contention limit can be enabled on a per-share basis, or globally for
 the entire server, in the <code class="filename">smb.conf</code> file as shown in <a class="link" href="locking.html#far3" title="Example 17.2. Configuration with Oplock Break Contention Limit">&#8220;Configuration with Oplock Break Contention Limit&#8221;</a>.
 </p><p>
-</p><div class="example"><a name="far3"></a><p class="title"><b>Example 17.2. Configuration with Oplock Break Contention Limit</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2639435"></a><em class="parameter"><code>oplock break contention limit =  2 (default)</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[share_name]</code></em></td></tr><tr><td><a class="indexterm" name="id2639456"></a><em class="parameter"><code>oplock break contention limit =  2 (default)</code></em></td></tr></table></div></div><p><br class="example-break">
-</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2639474"></a>MS Windows Oplocks and Caching Controls</h2></div></div></div><p>
+</p><div class="example"><a name="far3"></a><p class="title"><b>Example 17.2. Configuration with Oplock Break Contention Limit</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id402133"></a><em class="parameter"><code>oplock break contention limit =  2 (default)</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[share_name]</code></em></td></tr><tr><td><a class="indexterm" name="id402154"></a><em class="parameter"><code>oplock break contention limit =  2 (default)</code></em></td></tr></table></div></div><p><br class="example-break">
+</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id402171"></a>MS Windows Oplocks and Caching Controls</h2></div></div></div><p>
 There is a known issue when running applications (like Norton Antivirus) on a Windows 2000/ XP
 workstation computer that can affect any application attempting to access shared database files
 across a network. This is a result of a default setting configured in the Windows 2000/XP
@@ -512,7 +512,7 @@
 (meaning that data files are stored there and accessed by other Windows PCs) may need to
 have oplocks disabled in order to minimize the risk of data file corruption.
 This includes Windows 9x/Me, Windows NT, Windows 200x, and Windows XP.
-<sup>[<a name="id2639506" href="#ftn.id2639506" class="footnote">5</a>]</sup>
+<sup>[<a name="id402194" href="#ftn.id402194" class="footnote">5</a>]</sup>
 </p><p>
 If you are using a Windows NT family workstation in place of a server, you must also
 disable oplocks on that workstation. For example, if you use a
@@ -590,7 +590,7 @@
 	station holds any oplock on the file. Because the workstations can have no cached
 	writes or locks at this point, they need not respond to the break-to-none advisory;
 	all they need do is invalidate locally cashed read-ahead data.
-	</p></li></ul></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2639661"></a>Workstation Service Entries</h3></div></div></div><pre class="programlisting">
+	</p></li></ul></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id402323"></a>Workstation Service Entries</h3></div></div></div><pre class="programlisting">
 	\HKEY_LOCAL_MACHINE\System\
 		CurrentControlSet\Services\LanmanWorkstation\Parameters
 
@@ -599,7 +599,7 @@
 </pre><p>
 This indicates whether the redirector should use oplocks performance
 enhancement. This parameter should be disabled only to isolate problems.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2639683"></a>Server Service Entries</h3></div></div></div><pre class="programlisting">
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id402342"></a>Server Service Entries</h3></div></div></div><pre class="programlisting">
 	\HKEY_LOCAL_MACHINE\System\
 		CurrentControlSet\Services\LanmanServer\Parameters
 
@@ -628,7 +628,7 @@
 This specifies the time that the server waits for a client to respond to an oplock break
 request. Smaller values can allow detection of crashed clients more quickly but can
 potentially cause loss of cached data.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2639749"></a>Persistent Data Corruption</h2></div></div></div><p>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id402398"></a>Persistent Data Corruption</h2></div></div></div><p>
 If you have applied all of the settings discussed in this chapter but data corruption problems
 and other symptoms persist, here are some additional things to check out.
 </p><p>
@@ -639,7 +639,7 @@
 same definition as the file to be rebuilt and transferring the data from the old file
 to the new one. There are several known methods for doing this that can be found in
 our knowledge base.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2639774"></a>Common Errors</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id402418"></a>Common Errors</h2></div></div></div><p>
 In some sites locking problems surface as soon as a server is installed; in other sites
 locking problems may not surface for a long time. Almost without exception, when a locking
 problem does surface, it will cause embarrassment and potential data corruption.
@@ -669,7 +669,7 @@
 	report on Samba <a class="ulink" href="https://bugzilla.samba.org" target="_top">Bugzilla</a> without delay.
 	Make sure that you give as much information as you possibly can to help isolate the
 	cause and to allow replication of the problem (an essential step in problem isolation and correction).
-	</p></li></ul></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2639842"></a>locking.tdb Error Messages</h3></div></div></div><p>
+	</p></li></ul></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id402468"></a>locking.tdb Error Messages</h3></div></div></div><p>
 		&#8220;<span class="quote">
 			We are seeing lots of errors in the Samba logs, like:
 		</span>&#8221;
@@ -683,29 +683,29 @@
 		</span>&#8221;
 	</p><p>
 	This error indicates a corrupted tdb. Stop all instances of smbd, delete locking.tdb, and restart smbd.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2639872"></a>Problems Saving Files in MS Office on Windows XP</h3></div></div></div><a class="indexterm" name="id2639879"></a><p>This is a bug in Windows XP. More information can be 
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id402497"></a>Problems Saving Files in MS Office on Windows XP</h3></div></div></div><a class="indexterm" name="id402502"></a><p>This is a bug in Windows XP. More information can be 
 		found in <a class="ulink" href="http://support.microsoft.com/?id=812937" target="_top">Microsoft Knowledge Base article 812937</a></p>.
 
-	</div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2639897"></a>Long Delays Deleting Files over Network with XP SP1</h3></div></div></div><p>&#8220;<span class="quote">It sometimes takes approximately 35 seconds to delete files over the network after XP SP1 has been applied.</span>&#8221;</p><a class="indexterm" name="id2639909"></a><p>This is a bug in Windows XP. More information can be found in <a class="ulink" href="http://support.microsoft.com/?id=811492" target="_top">
+	</div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id402519"></a>Long Delays Deleting Files over Network with XP SP1</h3></div></div></div><p>&#8220;<span class="quote">It sometimes takes approximately 35 seconds to delete files over the network after XP SP1 has been applied.</span>&#8221;</p><a class="indexterm" name="id402531"></a><p>This is a bug in Windows XP. More information can be found in <a class="ulink" href="http://support.microsoft.com/?id=811492" target="_top">
 				Microsoft Knowledge Base article 811492</a></p>.
-	</div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2639928"></a>Additional Reading</h2></div></div></div><p>
+	</div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id402548"></a>Additional Reading</h2></div></div></div><p>
 You may want to check for an updated documentation regarding file and record locking issues on the Microsoft
 <a class="ulink" href="http://support.microsoft.com/" target="_top">Support</a> web site. Additionally, search for the word
 <code class="literal">locking</code> on the Samba <a class="ulink" href="http://www.samba.org/" target="_top">web</a> site.
 </p><p>
 Section of the Microsoft MSDN Library on opportunistic locking: 
 </p><p>
-<a class="indexterm" name="id2639966"></a>
+<a class="indexterm" name="id402583"></a>
 Microsoft Knowledge Base, &#8220;<span class="quote">Maintaining Transactional Integrity with OPLOCKS</span>&#8221;,
 Microsoft Corporation, April 1999, <a class="ulink" href="http://support.microsoft.com/?id=224992" target="_top">Microsoft
 KB Article 224992</a>.
 </p><p>
-<a class="indexterm" name="id2639990"></a>
+<a class="indexterm" name="id402605"></a>
 Microsoft Knowledge Base, &#8220;<span class="quote">Configuring Opportunistic Locking in Windows 2000</span>&#8221;,
 Microsoft Corporation, April 2001 <a class="ulink" href="http://support.microsoft.com/?id=296264" target="_top">Microsoft KB Article 296264</a>.
 </p><p>
-<a class="indexterm" name="id2640014"></a>
+<a class="indexterm" name="id402628"></a>
 Microsoft Knowledge Base, &#8220;<span class="quote">PC Ext: Explanation of Opportunistic Locking on Windows NT</span>&#8221;,
 Microsoft Corporation, April 1995 <a class="ulink" href="http://support.microsoft.com/?id=129202" target="_top">Microsoft
 KB Article 129202</a>.
-</p></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id2639506" href="#id2639506" class="para">5</a>] </sup>Microsoft has documented this in Knowledge Base article 300216.</p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="AccessControls.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="optional.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="securing-samba.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 16. File, Directory, and Share Access Controls </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 18. Securing Samba</td></tr></table></div></body></html>
+</p></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id402194" href="#id402194" class="para">5</a>] </sup>Microsoft has documented this in Knowledge Base article 300216.</p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="AccessControls.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="optional.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="securing-samba.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 16. File, Directory, and Share Access Controls </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 18. Securing Samba</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/migration.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/migration.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/migration.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1 +1 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part IV. Migration and Updating</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="cfgsmarts.html" title="Chapter 34. Advanced Configuration Techniques"><link rel="next" href="upgrading-to-3.0.html" title="Chapter 35. Updating and Upgrading Samba"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part IV. Migration and Updating</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="cfgsmarts.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="upgrading-to-3.0.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="migration"></a>Part IV. Migration and Updating</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="upgrading-to-3.0.html">35. Updating and Upgrading Samba</a></span></dt><dd><dl><dt><span class="sect1"><a href="upgrading-to-3.0.html#id2698533">Key Update Requirements</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrading-to-3.0.html#id2698561">Upgrading from Samba-3.0.x to Samba-3.2.0</a></span></dt><dt><span class="sect2"><a href="upgrading-to-3.0.html#oldupdatenotes">Upgrading from Samba-2.x to Samba-3.0.25</a></span></dt><dt><span class="sect2"><a href="upgrading-to-3.0.html#id2698610">Quick Migration Guide</a></span></dt></dl></dd><dt><span class="sect1"><a href="upgrading-to-3.0.html#id2698762">New Featuers in Samba-3.x Series</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrading-to-3.0.html#id2698771">New Features in Samba-3.2.x Series</a></span></dt><dt><span class="sect2"><a href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a></span></dt><dt><span class="sect2"><a href="upgrading-to-3.0.html#id2699981">New Functionality</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="NT4Migration.html">36. Migration from NT4 PDC to Samba-3 PDC</a></span></dt><dd><dl><dt><span class="sect1"><a href="NT4Migration.html#id2701377">Planning and Getting Started</a></span></dt><dd><dl><dt><span class="sect2"><a href="NT4Migration.html#id2701411">Objectives</a></span></dt><dt><span class="sect2"><a href="NT4Migration.html#id2702346">Steps in Migration Process</a></span></dt></dl></dd><dt><span class="sect1"><a href="NT4Migration.html#id2702581">Migration Options</a></span></dt><dd><dl><dt><span class="sect2"><a href="NT4Migration.html#id2702668">Planning for Success</a></span></dt><dt><span class="sect2"><a href="NT4Migration.html#id2702901">Samba-3 Implementation Choices</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="SWAT.html">37. SWAT: The Samba Web Administration Tool</a></span></dt><dd><dl><dt><span class="sect1"><a href="SWAT.html#id2703390">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="SWAT.html#id2703514">Guidelines and Technical Tips</a></span></dt><dd><dl><dt><span class="sect2"><a href="SWAT.html#id2703534">Validate SWAT Installation</a></span></dt><dt><span class="sect2"><a href="SWAT.html#xinetd">Enabling SWAT for Use</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704171">Securing SWAT through SSL</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704323">Enabling SWAT Internationalization Support</a></span></dt></dl></dd><dt><span class="sect1"><a href="SWAT.html#id2704521">Overview and Quick Tour</a></span></dt><dd><dl><dt><span class="sect2"><a href="SWAT.html#id2704534">The SWAT Home Page</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704595">Global Settings</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704697">Share Settings</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704752">Printers Settings</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704809">The SWAT Wizard</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704872">The Status Page</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704916">The View Page</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id2704935">The Password Change Page</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="cfgsmarts.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="upgrading-to-3.0.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 34. Advanced Configuration Techniques </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 35. Updating and Upgrading Samba</td></tr></table></div></body></html>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part IV. Migration and Updating</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="cfgsmarts.html" title="Chapter 34. Advanced Configuration Techniques"><link rel="next" href="upgrading-to-3.0.html" title="Chapter 35. Updating and Upgrading Samba"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part IV. Migration and Updating</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="cfgsmarts.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="upgrading-to-3.0.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="migration"></a>Part IV. Migration and Updating</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="upgrading-to-3.0.html">35. Updating and Upgrading Samba</a></span></dt><dd><dl><dt><span class="sect1"><a href="upgrading-to-3.0.html#id456137">Key Update Requirements</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrading-to-3.0.html#id456157">Upgrading from Samba-3.0.x to Samba-3.2.0</a></span></dt><dt><span class="sect2"><a href="upgrading-to-3.0.html#oldupdatenotes">Upgrading from Samba-2.x to Samba-3.0.25</a></span></dt><dt><span class="sect2"><a href="upgrading-to-3.0.html#id456203">Quick Migration Guide</a></span></dt></dl></dd><dt><span class="sect1"><a href="upgrading-to-3.0.html#id456340">New Featuers in Samba-3.x Series</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrading-to-3.0.html#id456349">New Features in Samba-3.2.x Series</a></span></dt><dt><span class="sect2"><a href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a></span></dt><dt><span class="sect2"><a href="upgrading-to-3.0.html#id457510">New Functionality</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="NT4Migration.html">36. Migration from NT4 PDC to Samba-3 PDC</a></span></dt><dd><dl><dt><span class="sect1"><a href="NT4Migration.html#id458833">Planning and Getting Started</a></span></dt><dd><dl><dt><span class="sect2"><a href="NT4Migration.html#id458863">Objectives</a></span></dt><dt><span class="sect2"><a href="NT4Migration.html#id459730">Steps in Migration Process</a></span></dt></dl></dd><dt><span class="sect1"><a href="NT4Migration.html#id459954">Migration Options</a></span></dt><dd><dl><dt><span class="sect2"><a href="NT4Migration.html#id460036">Planning for Success</a></span></dt><dt><span class="sect2"><a href="NT4Migration.html#id460257">Samba-3 Implementation Choices</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="SWAT.html">37. SWAT: The Samba Web Administration Tool</a></span></dt><dd><dl><dt><span class="sect1"><a href="SWAT.html#id460718">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="SWAT.html#id460830">Guidelines and Technical Tips</a></span></dt><dd><dl><dt><span class="sect2"><a href="SWAT.html#id460847">Validate SWAT Installation</a></span></dt><dt><span class="sect2"><a href="SWAT.html#xinetd">Enabling SWAT for Use</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id461421">Securing SWAT through SSL</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id461566">Enabling SWAT Internationalization Support</a></span></dt></dl></dd><dt><span class="sect1"><a href="SWAT.html#id461751">Overview and Quick Tour</a></span></dt><dd><dl><dt><span class="sect2"><a href="SWAT.html#id461762">The SWAT Home Page</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id461815">Global Settings</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id461912">Share Settings</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id461964">Printers Settings</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id462016">The SWAT Wizard</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id462072">The Status Page</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id462111">The View Page</a></span></dt><dt><span class="sect2"><a href="SWAT.html#id462129">The Password Change Page</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="cfgsmarts.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="upgrading-to-3.0.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 34. Advanced Configuration Techniques </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 35. Updating and Upgrading Samba</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/msdfs.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/msdfs.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/msdfs.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,27 +1,27 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 20. Hosting a Microsoft Distributed File System Tree</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="InterdomainTrusts.html" title="Chapter 19. Interdomain Trust Relationships"><link rel="next" href="classicalprinting.html" title="Chapter 21. Classical Printing Support"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 20. Hosting a Microsoft Distributed File System Tree</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="InterdomainTrusts.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="classicalprinting.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="msdfs"></a>Chapter 20. Hosting a Microsoft Distributed File System Tree</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Shirish</span> <span class="surname">Kalele</span></h3><div class="affiliation"><span class="orgname">Samba Team &amp; Veritas Software<br></span><div class="address"><p><br>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 20. Hosting a Microsoft Distributed File System Tree</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="InterdomainTrusts.html" title="Chapter 19. Interdomain Trust Relationships"><link rel="next" href="classicalprinting.html" title="Chapter 21. Classical Printing Support"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 20. Hosting a Microsoft Distributed File System Tree</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="InterdomainTrusts.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="classicalprinting.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="msdfs"></a>Chapter 20. Hosting a Microsoft Distributed File System Tree</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Shirish</span> <span class="surname">Kalele</span></h3><div class="affiliation"><span class="orgname">Samba Team &amp; Veritas Software<br></span><div class="address"><p><br>
 				<code class="email">&lt;<a class="email" href="mailto:samba at samba.org">samba at samba.org</a>&gt;</code><br>
-			</p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">12 Jul 2000</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="msdfs.html#id2643489">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="msdfs.html#id2643901">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="msdfs.html#id2643934">MSDFS UNIX Path Is Case-Critical</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2643489"></a>Features and Benefits</h2></div></div></div><p>
-<a class="indexterm" name="id2643497"></a>
-<a class="indexterm" name="id2643507"></a>
-<a class="indexterm" name="id2643514"></a>
-<a class="indexterm" name="id2643521"></a>
-<a class="indexterm" name="id2643528"></a>
+			</p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">12 Jul 2000</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="msdfs.html#id405843">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="msdfs.html#id406232">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="msdfs.html#id406261">MSDFS UNIX Path Is Case-Critical</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id405843"></a>Features and Benefits</h2></div></div></div><p>
+<a class="indexterm" name="id405851"></a>
+<a class="indexterm" name="id405860"></a>
+<a class="indexterm" name="id405867"></a>
+<a class="indexterm" name="id405874"></a>
+<a class="indexterm" name="id405881"></a>
 	The distributed file system (DFS) provides a means of separating the logical
 	view of files and directories that users see from the actual physical locations
 	of these resources on the network. It allows for higher availability, smoother
 	storage expansion, load balancing, and so on.
 	</p><p>
-<a class="indexterm" name="id2643543"></a>
-<a class="indexterm" name="id2643549"></a>
-<a class="indexterm" name="id2643556"></a>
+<a class="indexterm" name="id405893"></a>
+<a class="indexterm" name="id405900"></a>
+<a class="indexterm" name="id405906"></a>
 	For information about DFS, refer to the <a class="ulink" href="http://www.microsoft.com/NTServer/nts/downloads/winfeatures/NTSDistrFile/AdminGuide.asp" target="_top">Microsoft
 	documentation</a>.  This document explains how to host a DFS tree on a UNIX machine (for DFS-aware clients
 	to browse) using Samba.
 	</p><p>
-<a class="indexterm" name="id2643576"></a>
-<a class="indexterm" name="id2643583"></a>
-<a class="indexterm" name="id2643590"></a>
-<a class="indexterm" name="id2643597"></a>
+<a class="indexterm" name="id405924"></a>
+<a class="indexterm" name="id405931"></a>
+<a class="indexterm" name="id405938"></a>
+<a class="indexterm" name="id405945"></a>
 	A Samba server can be made a DFS server by setting the global Boolean <a class="link" href="smb.conf.5.html#HOSTMSDFS">host msdfs</a>
 	parameter in the <code class="filename">smb.conf</code> file. You designate a share as a DFS root using the share-level Boolean
 	<a class="link" href="smb.conf.5.html#MSDFSROOT">msdfs root</a> parameter. A DFS root directory on Samba hosts DFS links in the form of
@@ -30,10 +30,10 @@
 	DFS-aware clients attempt to access the junction link, they are redirected to the storage location (in this
 	case, <em class="parameter"><code>\\storage1\share1</code></em>).
 	</p><p>
-<a class="indexterm" name="id2643659"></a>
-<a class="indexterm" name="id2643666"></a>
-<a class="indexterm" name="id2643672"></a>
-<a class="indexterm" name="id2643679"></a>
+<a class="indexterm" name="id406000"></a>
+<a class="indexterm" name="id406007"></a>
+<a class="indexterm" name="id406014"></a>
+<a class="indexterm" name="id406020"></a>
 	DFS trees on Samba work with all DFS-aware clients ranging from Windows 95 to 200x.
 	<a class="link" href="msdfs.html#dfscfg" title="Example 20.1. smb.conf with DFS Configured">The following sample configuration</a> shows how to setup a DFS tree on a Samba server.
 	In the <code class="filename">/export/dfsroot</code> directory, you set up your DFS links to 
@@ -45,28 +45,28 @@
 <code class="prompt">root# </code><strong class="userinput"><code>ln -s msdfs:storageA\\shareA linka</code></strong>
 <code class="prompt">root# </code><strong class="userinput"><code>ln -s msdfs:serverB\\share,serverC\\share linkb</code></strong>
 </pre><p>
-</p><div class="example"><a name="dfscfg"></a><p class="title"><b>Example 20.1. smb.conf with DFS Configured</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2643788"></a><em class="parameter"><code>netbios name = GANDALF</code></em></td></tr><tr><td><a class="indexterm" name="id2643800"></a><em class="parameter"><code>host msdfs   = yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[dfs]</code></em></td></tr><tr><td><a class="indexterm" name="id2643821"></a><em class="parameter"><code>path = /export/dfsroot</code></em></td></tr><tr><td><a class="indexterm" name="id2643832"></a><em class="parameter"><code>msdfs root = yes</code></em></td></tr></table></div></div><br class="example-break"><p>
-<a class="indexterm" name="id2643847"></a>
-<a class="indexterm" name="id2643854"></a>
-<a class="indexterm" name="id2643861"></a>
+</p><div class="example"><a name="dfscfg"></a><p class="title"><b>Example 20.1. smb.conf with DFS Configured</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id406126"></a><em class="parameter"><code>netbios name = GANDALF</code></em></td></tr><tr><td><a class="indexterm" name="id406137"></a><em class="parameter"><code>host msdfs   = yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[dfs]</code></em></td></tr><tr><td><a class="indexterm" name="id406158"></a><em class="parameter"><code>path = /export/dfsroot</code></em></td></tr><tr><td><a class="indexterm" name="id406169"></a><em class="parameter"><code>msdfs root = yes</code></em></td></tr></table></div></div><br class="example-break"><p>
+<a class="indexterm" name="id406184"></a>
+<a class="indexterm" name="id406191"></a>
+<a class="indexterm" name="id406197"></a>
 	You should set up the permissions and ownership of the directory acting as the DFS root so that only
 	designated users can create, delete, or modify the msdfs links. Also note that symlink names should be all
 	lowercase. This limitation exists to have Samba avoid trying all the case combinations to get at the link
 	name. Finally, set up the symbolic links to point to the network shares you want and start Samba.
 	</p><p>
-<a class="indexterm" name="id2643878"></a>
-<a class="indexterm" name="id2643885"></a>
+<a class="indexterm" name="id406211"></a>
+<a class="indexterm" name="id406218"></a>
 	Users on DFS-aware clients can now browse the DFS tree on the Samba server at
 	<code class="constant">\\samba\dfs</code>. Accessing links linka or linkb (which appear as directories to the client)
 	takes users directly to the appropriate shares on the network.
-	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2643901"></a>Common Errors</h2></div></div></div><div class="itemizedlist"><ul type="disc"><li><p>Windows clients need to be rebooted 
+	</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id406232"></a>Common Errors</h2></div></div></div><div class="itemizedlist"><ul type="disc"><li><p>Windows clients need to be rebooted 
 		if a previously mounted non-DFS share is made a DFS 
 		root, or vice versa. A better way is to introduce a 
 		new share and make it the DFS root.</p></li><li><p>Currently, there's a restriction that msdfs 
 		symlink names should all be lowercase.</p></li><li><p>For security purposes, the directory 
 		acting as the root of the DFS tree should have ownership 
 		and permissions set so only designated users can 
-		modify the symbolic links in the directory.</p></li></ul></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2643934"></a>MSDFS UNIX Path Is Case-Critical</h3></div></div></div><p>
+		modify the symbolic links in the directory.</p></li></ul></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id406261"></a>MSDFS UNIX Path Is Case-Critical</h3></div></div></div><p>
 		A network administrator sent advice to the Samba mailing list
 		after long sessions trying to determine why DFS was not working.
 		His advice is worth noting.
@@ -78,7 +78,7 @@
 		in lowercase as well.
 		</span>&#8221;</p><p>
 		&#8220;<span class="quote">For example, I had a share defined as such:</span>&#8221;
-		</p><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[pub]</code></em></td></tr><tr><td><a class="indexterm" name="id2643975"></a><em class="parameter"><code>path = /export/home/Shares/public_share</code></em></td></tr><tr><td><a class="indexterm" name="id2643987"></a><em class="parameter"><code>msdfs root = yes</code></em></td></tr></table><p>
+		</p><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[pub]</code></em></td></tr><tr><td><a class="indexterm" name="id406299"></a><em class="parameter"><code>path = /export/home/Shares/public_share</code></em></td></tr><tr><td><a class="indexterm" name="id406310"></a><em class="parameter"><code>msdfs root = yes</code></em></td></tr></table><p>
 		&#8220;<span class="quote">and I could not make my Windows 9x/Me (with the dfs client installed) follow this symlink:</span>&#8221;
 		</p><pre class="screen">
 		damage1 -&gt; msdfs:damage\test-share

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/optional.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/optional.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/optional.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,7 +1,7 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part III. Advanced Configuration</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="ClientConfig.html" title="Chapter 8. MS Windows Network Configuration Guide"><link rel="next" href="ChangeNotes.html" title="Chapter 9. Important and Critical Change Notes for the Samba 3.x Series"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part III. Advanced Configuration</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ClientConfig.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ChangeNotes.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="optional"></a>Part III. Advanced Configuration</h1></div></div></div><div class="partintro" lang="en"><div><div><div><h1 class="title"><a name="id2600566"></a>Valuable Nuts and Bolts Information</h1></div></div></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part III. Advanced Configuration</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="ClientConfig.html" title="Chapter 8. MS Windows Network Configuration Guide"><link rel="next" href="ChangeNotes.html" title="Chapter 9. Important and Critical Change Notes for the Samba 3.x Series"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part III. Advanced Configuration</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ClientConfig.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ChangeNotes.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="optional"></a>Part III. Advanced Configuration</h1></div></div></div><div class="partintro" lang="en"><div><div><div><h1 class="title"><a name="id366341"></a>Valuable Nuts and Bolts Information</h1></div></div></div><p>
 Samba has several features that you might want or might not want to use.
 The chapters in this part each cover specific Samba features.
-</p><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="ChangeNotes.html">9. Important and Critical Change Notes for the Samba 3.x Series</a></span></dt><dd><dl><dt><span class="sect1"><a href="ChangeNotes.html#id2600657">Important Samba-3.2.x Change Notes</a></span></dt><dt><span class="sect1"><a href="ChangeNotes.html#id2600668">Important Samba-3.0.x Change Notes</a></span></dt><dd><dl><dt><span class="sect2"><a href="ChangeNotes.html#id2600728">User and Group Changes</a></span></dt><dt><span class="sect2"><a href="ChangeNotes.html#id2601039">Essential Group Mappings</a></span></dt><dt><span class="sect2"><a href="ChangeNotes.html#id2601160">Passdb Changes</a></span></dt><dt><span class="sect2"><a href="ChangeNotes.html#id2601219">Group Mapping Changes in Samba-3.0.23</a></span></dt><dt><span class="sect2"><a href="ChangeNotes.html#id2601340">LDAP Changes in Samba-3.0.23</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="NetworkBrowsing.html">10. Network Browsing</a></span></dt><dd><dl><dt><span class="sect1"><a href="NetworkBrowsing.html#id2601603">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="NetworkBrowsing.html#id2601786">What Is Browsing?</a></span></dt><dt><span class="sect1"><a href="NetworkBrowsing.html#netdiscuss">Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id2602223">NetBIOS over TCP/IP</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2602859">TCP/IP without NetBIOS</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#adsdnstech">DNS and Active Directory</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id2603410">How Browsing Functions</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2604354">Domain Browsing Configuration</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2604955">Making Samba the Domain Master</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2605195">Note about Broadcast Addresses</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2605217">Multiple Interfaces</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2605403">Use of the Remote Announce Parameter</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2605543">Use of the Remote Browse Sync Parameter</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id2605636">WINS: The Windows Internetworking Name Server</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id2605907">WINS Server Configuration</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2606228">WINS Replication</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2606281">Static WINS Entries</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id2606512">Helpful Hints</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id2606524">Windows Networking Protocols</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2606674">Name Resolution Order</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id2606877">Technical Overview of Browsing</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id2606970">Browsing Support in Samba</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2607167">Problem Resolution</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2607418">Cross-Subnet Browsing</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id2608431">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id2608457">Flushing the Samba NetBIOS Name Cache</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2608530">Server Resources Cannot Be Listed</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2608579">I Get an "<span class="errorname">Unable to browse the network</span>" Error</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2608626">Browsing of Shares and Directories is Very Slow</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id2608826">Invalid Cached Share References Affects Network Browsing</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="passdb.html">11. Account Information Databases</a></span></dt><dd><dl><dt><span class="sect1"><a href="passdb.html#id2609320">Features and Benefits</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id2609356">Backward Compatibility Account Storage Systems</a></span></dt><dt><span class="sect2"><a href="passdb.html#id2609540">New Account Storage Systems</a></span></dt></dl></dd><dt><span class="sect1"><a href="passdb.html#passdbtech">Technical Information</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id2610108">Important Notes About Security</a></span></dt><dt><span class="sect2"><a href="passdb.html#id2610628">Mapping User Identifiers between MS Windows and UNIX</a></span></dt><dt><span class="sect2"><a href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a></span></dt><dt><span class="sect2"><a href="passdb.html#id2611176">Comments Regarding LDAP</a></span></dt><dt><span class="sect2"><a href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a></span></dt></dl></dd><dt><span class="sect1"><a href="passdb.html#acctmgmttools">Account Management Tools</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id2612037">The <code class="literal">smbpasswd</code> Tool</a></span></dt><dt><span class="sect2"><a href="passdb.html#pdbeditthing">The <code class="literal">pdbedit</code> Tool</a></span></dt></dl></dd><dt><span class="sect1"><a href="passdb.html#id2614558">Password Backends</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id2614612">Plaintext</a></span></dt><dt><span class="sect2"><a href="passdb.html#id2614688">smbpasswd: Encrypted Password Database</a></span></dt><dt><span class="sect2"><a href="passdb.html#id2614953">tdbsam</a></span></dt><dt><span class="sect2"><a href="passdb.html#id2615111">ldapsam</a></span></dt></dl></dd><dt><span class="sect1"><a href="passdb.html#id2617645">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id2617650">Users Cannot Logon</a></span></dt><dt><span class="sect2"><a href="passdb.html#id2617688">Configuration of <em class="parameter"><code>auth methods</code></em></a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="groupmapping.html">12. Group Mapping: MS Windows and UNIX</a></span></dt><dd><dl><dt><span class="sect1"><a href="groupmapping.html#id2617939">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="groupmapping.html#id2618354">Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="groupmapping.html#id2618690">Warning: User Private Group Problems</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id2618748">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id2619324">Important Administrative Information</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id2619564">Default Users, Groups, and Relative Identifiers</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id2620187">Example Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="groupmapping.html#id2620264">Configuration Scripts</a></span></dt><dd><dl><dt><span class="sect2"><a href="groupmapping.html#id2620275">Sample <code class="filename">smb.conf</code> Add Group Script</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id2620447">Script to Configure Group Mapping</a></span></dt></dl></dd><dt><span class="sect1"><a href="groupmapping.html#id2620574">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="groupmapping.html#id2620587">Adding Groups Fails</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id2620674">Adding Domain Users to the Workstation Power Users Group</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="NetCommand.html">13. Remote and Local Management: The Net Command</a></span></dt><dd><dl><dt><span class="sect1"><a href="NetCommand.html#id2621069">Overview</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id2621363">Administrative Tasks and Methods</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id2621445">UNIX and Windows Group Management</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#id2621603">Adding, Renaming, or Deletion of Group Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#grpmemshipchg">Manipulating Group Memberships</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#nestedgrpmgmgt">Nested Group Support</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#id2622967">UNIX and Windows User Management</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#sbeuseraddn">Adding User Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id2623179">Deletion of User Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id2623227">Managing User Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id2623295">User Mapping</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#id2623379">Administering User Rights and Privileges</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id2623733">Managing Trust Relationships</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#id2623749">Machine Trust Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id2624117">Interdomain Trusts</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#id2624351">Managing Security Identifiers (SIDS)</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id2624573">Share Management</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#id2624619">Creating, Editing, and Removing Shares</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id2624807">Creating and Changing Share ACLs</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id2624837">Share, Directory, and File Migration</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id2625466">Printer Migration</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#id2625716">Controlling Open Files</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id2625736">Session and Connection Management</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id2625801">Printers and ADS</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id2625917">Manipulating the Samba Cache</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id2625934">Managing IDMAP UID/SID Mappings</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#id2625978">Creating an IDMAP Database Dump File</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id2626014">Restoring the IDMAP Database Dump File</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#netmisc1">Other Miscellaneous Operations</a></span></dt></dl></dd><dt><span class="chapter"><a href="idmapper.html">14. Identity Mapping (IDMAP)</a></span></dt><dd><dl><dt><span class="sect1"><a href="idmapper.html#id2626535">Samba Server Deployment Types and IDMAP</a></span></dt><dd><dl><dt><span class="sect2"><a href="idmapper.html#id2626560">Standalone Samba Server</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id2626623">Domain Member Server or Domain Member Client</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id2627583">Primary Domain Controller</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id2627818">Backup Domain Controller</a></span></dt></dl></dd><dt><span class="sect1"><a href="idmapper.html#id2627889">Examples of IDMAP Backend Usage</a></span></dt><dd><dl><dt><span class="sect2"><a href="idmapper.html#id2627952">Default Winbind TDB</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id2628674">IDMAP_RID with Winbind</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id2629264">IDMAP Storage in LDAP Using Winbind</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id2629850">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="rights.html">15. User Rights and Privileges</a></span></dt><dd><dl><dt><span class="sect1"><a href="rights.html#id2630518">Rights Management Capabilities</a></span></dt><dd><dl><dt><span class="sect2"><a href="rights.html#id2630793">Using the &#8220;<span class="quote">net rpc rights</span>&#8221; Utility</a></span></dt><dt><span class="sect2"><a href="rights.html#id2631138">Description of Privileges</a></span></dt><dt><span class="sect2"><a href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></span></dt></dl></dd><dt><span class="sect1"><a href="rights.html#id2631943">The Administrator Domain SID</a></span></dt><dt><span class="sect1"><a href="rights.html#id2632120">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="rights.html#id2632126">What Rights and Privileges Will Permit Windows Client Administration?</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="AccessControls.html">16. File, Directory, and Share Access Controls</a></span></dt><dd><dl><dt><span class="sect1"><a href="AccessControls.html#id2632624">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="AccessControls.html#id2632819">File System Access Controls</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id2632834">MS Windows NTFS Comparison with UNIX File Systems</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2633169">Managing Directories</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2633292">File and Directory Access Control</a></span></dt></dl></dd><dt><span class="sect1"><a href="AccessControls.html#id2633958">Share Definition Access Controls</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id2633991">User- and Group-Based Controls</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2634357">File and Directory Permissions-Based Controls</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2634693">Miscellaneous Controls</a></span></dt></dl></dd><dt><span class="sect1"><a href="AccessControls.html#id2635030">Access Controls on Shares</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id2635178">Share Permissions Management</a></span></dt></dl></dd><dt><span class="sect1"><a href="AccessControls.html#id2635531">MS Windows Access Control Lists and UNIX Interoperability</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id2635537">Managing UNIX Permissions Using NT Security Dialogs</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2635584">Viewing File Security on a Samba Share</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2635654">Viewing File Ownership</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2635798">Viewing File or Directory Permissions</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2636013">Modifying File or Directory Permissions</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2636170">Interaction with the Standard Samba &#8220;<span class="quote">create mask</span>&#8221; Parameters</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2636539">Interaction with the Standard Samba File Attribute Mapping</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2636612">Windows NT/200X ACLs and POSIX ACLs Limitations</a></span></dt></dl></dd><dt><span class="sect1"><a href="AccessControls.html#id2637030">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id2637042">Users Cannot Write to a Public Share</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2637364">File Operations Done as <span class="emphasis"><em>root</em></span> with <span class="emphasis"><em>force user</em></span> Set</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id2637410">MS Word with Samba Changes Owner of File</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="locking.html">17. File and Record Locking</a></span></dt><dd><dl><dt><span class="sect1"><a href="locking.html#id2637637">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="locking.html#id2637734">Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="locking.html#id2637992">Opportunistic Locking Overview</a></span></dt></dl></dd><dt><span class="sect1"><a href="locking.html#id2638966">Samba Oplocks Control</a></span></dt><dd><dl><dt><span class="sect2"><a href="locking.html#id2639060">Example Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="locking.html#id2639474">MS Windows Oplocks and Caching Controls</a></span></dt><dd><dl><dt><span class="sect2"><a href="locking.html#id2639661">Workstation Service Entries</a></span></dt><dt><span class="sect2"><a href="locking.html#id2639683">Server Service Entries</a></span></dt></dl></dd><dt><span class="sect1"><a href="locking.html#id2639749">Persistent Data Corruption</a></span></dt><dt><span class="sect1"><a href="locking.html#id2639774">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="locking.html#id2639842">locking.tdb Error Messages</a></span></dt><dt><span class="sect2"><a href="locking.html#id2639872">Problems Saving Files in MS Office on Windows XP</a></span></dt><dt><span class="sect2"><a href="locking.html#id2639897">Long Delays Deleting Files over Network with XP SP1</a></span></dt></dl></dd><dt><span class="sect1"><a href="locking.html#id2639928">Additional Reading</a></span></dt></dl></dd><dt><span class="chapter"><a href="securing-samba.html">18. Securing Samba</a></span></dt><dd><dl><dt><span class="sect1"><a href="securing-samba.html#id2640103">Introduction</a></span></dt><dt><span class="sect1"><a href="securing-samba.html#id2640202">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="securing-samba.html#id2640348">Technical Discussion of Protective Measures and Issues</a></span></dt><dd><dl><dt><span class="sect2"><a href="securing-samba.html#id2640364">Using Host-Based Protection</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id2640518">User-Based Protection</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id2640578">Using Interface Protection</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#firewallports">Using a Firewall</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id2640934">Using IPC$ Share-Based Denials </a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id2641078">NTLMv2 Security</a></span></dt></dl></dd><dt><span class="sect1"><a href="securing-samba.html#id2641132">Upgrading Samba</a></span></dt><dt><span class="sect1"><a href="securing-samba.html#id2641176">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="securing-samba.html#id2641192">Smbclient Works on Localhost, but the Network Is Dead</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id2641220">Why Can Users Access Other Users' Home Directories?</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="InterdomainTrusts.html">19. Interdomain Trust Relationships</a></span></dt><dd><dl><dt><span class="sect1"><a href="InterdomainTrusts.html#id2641780">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="InterdomainTrusts.html#id2641852">Trust Relationship Background</a></span></dt><dt><span class="sect1"><a href="InterdomainTrusts.html#id2642130">Native MS Windows NT4 Trusts Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="InterdomainTrusts.html#id2642166">Creating an NT4 Domain Trust</a></span></dt><dt><span class="sect2"><a href="InterdomainTrusts.html#id2642263">Completing an NT4 Domain Trust</a></span></dt><dt><span class="sect2"><a href="InterdomainTrusts.html#id2642348">Interdomain Trust Facilities</a></span></dt></dl></dd><dt><span class="sect1"><a href="InterdomainTrusts.html#id2642557">Configuring Samba NT-Style Domain Trusts</a></span></dt><dd><dl><dt><span class="sect2"><a href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></span></dt><dt><span class="sect2"><a href="InterdomainTrusts.html#id2642897">Samba as the Trusting Domain</a></span></dt></dl></dd><dt><span class="sect1"><a href="InterdomainTrusts.html#id2643094">NT4-Style Domain Trusts with Windows 2000</a></span></dt><dt><span class="sect1"><a href="InterdomainTrusts.html#id2643243">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="InterdomainTrusts.html#id2643256">Browsing of Trusted Domain Fails</a></span></dt><dt><span class="sect2"><a href="InterdomainTrusts.html#id2643311">Problems with LDAP ldapsam and Older Versions of smbldap-tools</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="msdfs.html">20. Hosting a Microsoft Distributed File System Tree</a></span></dt><dd><dl><dt><span class="sect1"><a href="msdfs.html#id2643489">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="msdfs.html#id2643901">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="msdfs.html#id2643934">MSDFS UNIX Path Is Case-Critical</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="classicalprinting.html">21. Classical Printing Support</a></span></dt><dd><dl><dt><span class="sect1"><a href="classicalprinting.html#id2644133">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id2644356">Technical Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2644515">Client to Samba Print Job Processing</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2644574">Printing-Related Configuration Parameters</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id2644675">Simple Print Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2644958">Verifying Configuration with <code class="literal">testparm</code></a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2645155">Rapid Configuration Validation</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id2645543">Extended Printing Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2645998">Detailed Explanation Settings</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2648726">Point'n'Print Client Drivers on Samba Servers</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2648895">The Obsoleted [printer$] Section</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2649017">Creating the [print$] Share</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2649234">[print$] Stanza Parameters</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2649554">The [print$] Share Directory</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id2649696">Installing Drivers into [print$]</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2649789">Add Printer Wizard Driver Installation</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#inst-rpc">Installing Print Drivers Using <code class="literal">rpcclient</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id2651729">Client Driver Installation Procedure</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2651745">First Client Driver Installation</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#prt-modeset">Setting Device Modes on New Printers</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2578531">Additional Client Driver Installation</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2578650">Always Make First Client Connection as root or &#8220;<span class="quote">printer admin</span>&#8221;</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id2652868">Other Gotchas</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2652888">Setting Default Print Options for Client Drivers</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2653255">Supporting Large Numbers of Printers</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2653512">Adding New Printers with the Windows NT APW</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2653771">Error Message: &#8220;<span class="quote">Cannot connect under a different Name</span>&#8221;</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2653885">Take Care When Assembling Driver Files</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2654194">Samba and Printer Ports</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2654303">Avoiding Common Client Driver Misconfiguration</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id2654341">The Imprints Toolset</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2654398">What Is Imprints?</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2654432">Creating Printer Driver Packages</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2654447">The Imprints Server</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2654464">The Installation Client</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id2654598">Adding Network Printers without User Interaction</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id2654869">The <code class="literal">addprinter</code> Command</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id2654908">Migration of Classical Printing to Samba</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id2655057">Publishing Printer Information in Active Directory or LDAP</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id2655086">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id2655092">I Give My Root Password but I Do Not Get Access</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id2655133">My Print Jobs Get Spooled into the Spooling Directory, but Then Get Lost</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="CUPS-printing.html">22. CUPS Printing Support</a></span></dt><dd><dl><dt><span class="sect1"><a href="CUPS-printing.html#id2655275">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2655281">Features and Benefits</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2655341">Overview</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2655466">Basic CUPS Support Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2655581">Linking smbd with libcups.so</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2655828">Simple <code class="filename">smb.conf</code> Settings for CUPS</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2656061">More Complex CUPS <code class="filename">smb.conf</code> Settings</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2656439">Advanced Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2656456">Central Spooling vs. &#8220;<span class="quote">Peer-to-Peer</span>&#8221; Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2656507">Raw Print Serving: Vendor Drivers on Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2656742">Installation of Windows Client Drivers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#cups-raw">Explicitly Enable &#8220;<span class="quote">raw</span>&#8221; Printing for <span class="emphasis"><em>application/octet-stream</em></span></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2657029">Driver Upload Methods</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2657150">Advanced Intelligent Printing with PostScript Driver Download</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#gdipost">GDI on Windows, PostScript on UNIX</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2657342">Windows Drivers, GDI, and EMF</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2657520">UNIX Printfile Conversion and GUI Basics</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#post-and-ghost">PostScript and Ghostscript</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2657878">Ghostscript: The Software RIP for Non-PostScript Printers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2658032">PostScript Printer Description (PPD) Specification</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2658122">Using Windows-Formatted Vendor PPDs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2658242">CUPS Also Uses PPDs for Non-PostScript Printers</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2658281">The CUPS Filtering Architecture</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2658517">MIME Types and CUPS Filters</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2658945">MIME Type Conversion Rules</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2659153">Filtering  Overview</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2659310">Prefilters</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2659497">pstops</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2659665">pstoraster</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2659934">imagetops and imagetoraster</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2660019">rasterto [printers specific]</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2660239">CUPS Backends</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2660577">The Role of <em class="parameter"><code>cupsomatic/foomatic</code></em></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2660813">The Complete Picture</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2660826"><code class="filename">mime.convs</code></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2660894">&#8220;<span class="quote">Raw</span>&#8221; Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2661002">application/octet-stream Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2661282">PostScript Printer Descriptions for Non-PostScript Printers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2661565"><span class="emphasis"><em>cupsomatic/foomatic-rip</em></span> Versus <span class="emphasis"><em>Native CUPS</em></span> Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2661902">Examples for Filtering Chains</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2662330">Sources of CUPS Drivers/PPDs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2662453">Printing with Interface Scripts</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2662547">Network Printing (Purely Windows)</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2662564">From Windows Clients to an NT Print Server</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2662627">Driver Execution on the Client</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2662698">Driver Execution on the Server</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2662803">Network Printing (Windows Clients and UNIX/Samba Print
-Servers)</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2662821">From Windows Clients to a CUPS/Samba Print Server</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2663012">Samba Receiving Job-Files and Passing Them to CUPS</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2663091">Network PostScript RIP</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2663181">PPDs for Non-PS Printers on UNIX</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2663226">PPDs for Non-PS Printers on Windows</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2663294">Windows Terminal Servers (WTS) as CUPS Clients</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2663308">Printer Drivers Running in &#8220;<span class="quote">Kernel Mode</span>&#8221; Cause Many
-Problems</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2663347">Workarounds Impose Heavy Limitations</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2663364">CUPS: A &#8220;<span class="quote">Magical Stone</span>&#8221;?</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2663407">PostScript Drivers with No Major Problems, Even in Kernel
-Mode</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2663495">Configuring CUPS for Driver Download</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2663517"><span class="emphasis"><em>cupsaddsmb</em></span>: The Unknown Utility</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2663615">Prepare Your <code class="filename">smb.conf</code> for <code class="literal">cupsaddsmb</code></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2663896">CUPS &#8220;<span class="quote">PostScript Driver for Windows NT/200x/XP</span>&#8221;</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2664135">Recognizing Different Driver Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2664253">Acquiring the Adobe Driver Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2664279">ESP Print Pro PostScript Driver for Windows NT/200x/XP</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2664341">Caveats to Be Considered</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2664641">Windows CUPS PostScript Driver Versus Adobe Driver</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2664859">Run cupsaddsmb (Quiet Mode)</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2664999">Run cupsaddsmb with Verbose Output</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2665190">Understanding cupsaddsmb</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2665335">How to Recognize If cupsaddsmb Completed Successfully</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2665457">cupsaddsmb with a Samba PDC</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2665538">cupsaddsmb Flowchart</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2665619">Installing the PostScript Driver on a Client</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#cups-avoidps1">Avoiding Critical PostScript Driver Settings on the Client</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2665854">Installing PostScript Driver Files Manually Using rpcclient</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2666028">A Check of the rpcclient man Page</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2666199">Understanding the rpcclient man Page</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2666304">Producing an Example by Querying a Windows Box</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2666436">Requirements for adddriver and setdriver to Succeed</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2666661">Manual Driver Installation in 15 Steps</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2667620">Troubleshooting Revisited</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2667763">The Printing <code class="filename">*.tdb</code> Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2667965">Trivial Database Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2668033">Binary Format</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2668099">Losing <code class="filename">*.tdb</code> Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2668150">Using <code class="literal">tdbbackup</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2668269">CUPS Print Drivers from Linuxprinting.org</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2668444">foomatic-rip and Foomatic Explained</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2669256">foomatic-rip and Foomatic PPD Download and Installation</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2669728">Page Accounting with CUPS</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2669763">Setting Up Quotas</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2669817">Correct and Incorrect Accounting</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2669864">Adobe and CUPS PostScript Drivers for Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2670005">The page_log File Syntax</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2670149">Possible Shortcomings</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2670215">Future Developments</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2670255">Other Accounting Tools</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2670269">Additional Material</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id2670486">Autodeletion or Preservation of CUPS Spool Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2670562">CUPS Configuration Settings Explained</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2670647">Preconditions</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2670786">Manual Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2670834">Printing from CUPS to Windows-Attached Printers</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id2671129">More CUPS Filtering Chains</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id2671241">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id2671246">Windows 9x/Me Client Can't Install Driver</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#root-ask-loop">&#8220;<span class="quote">cupsaddsmb</span>&#8221; Keeps Asking for Root Password in Never-ending Loop</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671323">&#8220;<span class="quote">cupsaddsmb</span>&#8221; or &#8220;<span class="quote">rpcclient addriver</span>&#8221; Emit Error</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671361">&#8220;<span class="quote">cupsaddsmb</span>&#8221; Errors</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671435">Client Can't Connect to Samba Printer</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671459">New Account Reconnection from Windows 200x/XP Troubles</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671551">Avoid Being Connected to the Samba Server as the Wrong User</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671602">Upgrading to CUPS Drivers from Adobe Drivers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671639">Can't Use &#8220;<span class="quote">cupsaddsmb</span>&#8221; on Samba Server, Which Is a PDC</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671675">Deleted Windows 200x Printer Driver Is Still Shown</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671710">Windows 200x/XP Local Security Policies</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671743">Administrator Cannot Install Printers for All Local Users</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671784">Print Change, Notify Functions on NT Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671810">Windows XP SP1</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2671856">Print Options for All Users Can't Be Set on Windows 200x/XP</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2672139">Most Common Blunders in Driver Settings on Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2672194"><code class="literal">cupsaddsmb</code> Does Not Work with Newly Installed Printer</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2672244">Permissions on <code class="filename">/var/spool/samba/</code> Get Reset After Each Reboot</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2672342">Print Queue Called &#8220;<span class="quote">lp</span>&#8221; Mishandles Print Jobs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id2672412">Location of Adobe PostScript Driver Files for &#8220;<span class="quote">cupsaddsmb</span>&#8221;</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id2672465">Overview of the CUPS Printing Processes</a></span></dt></dl></dd><dt><span class="chapter"><a href="VFS.html">23. Stackable VFS modules</a></span></dt><dd><dl><dt><span class="sect1"><a href="VFS.html#id2672652">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="VFS.html#id2672690">Discussion</a></span></dt><dt><span class="sect1"><a href="VFS.html#id2673086">Included Modules</a></span></dt><dd><dl><dt><span class="sect2"><a href="VFS.html#id2673092">audit</a></span></dt><dt><span class="sect2"><a href="VFS.html#id2673133">default_quota</a></span></dt><dt><span class="sect2"><a href="VFS.html#id2673350">extd_audit</a></span></dt><dt><span class="sect2"><a href="VFS.html#fakeperms">fake_perms</a></span></dt><dt><span class="sect2"><a href="VFS.html#id2673676">recycle</a></span></dt><dt><span class="sect2"><a href="VFS.html#id2674073">netatalk</a></span></dt><dt><span class="sect2"><a href="VFS.html#id2674123">shadow_copy</a></span></dt></dl></dd><dt><span class="sect1"><a href="VFS.html#id2675024">VFS Modules Available Elsewhere</a></span></dt><dd><dl><dt><span class="sect2"><a href="VFS.html#id2675049">DatabaseFS</a></span></dt><dt><span class="sect2"><a href="VFS.html#id2675109">vscan</a></span></dt><dt><span class="sect2"><a href="VFS.html#id2675148">vscan-clamav</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="winbind.html">24. Winbind: Use of Domain Accounts</a></span></dt><dd><dl><dt><span class="sect1"><a href="winbind.html#id2675430">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="winbind.html#id2675773">Introduction</a></span></dt><dt><span class="sect1"><a href="winbind.html#id2675862">What Winbind Provides</a></span></dt><dd><dl><dt><span class="sect2"><a href="winbind.html#id2676016">Target Uses</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2676061">Handling of Foreign SIDs</a></span></dt></dl></dd><dt><span class="sect1"><a href="winbind.html#id2676186">How Winbind Works</a></span></dt><dd><dl><dt><span class="sect2"><a href="winbind.html#id2676237">Microsoft Remote Procedure Calls</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2676324">Microsoft Active Directory Services</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2676371">Name Service Switch</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2676603">Pluggable Authentication Modules</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2676758">User and Group ID Allocation</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2676847">Result Caching</a></span></dt></dl></dd><dt><span class="sect1"><a href="winbind.html#id2676904">Installation and Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="winbind.html#id2676910">Introduction</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2677024">Requirements</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2677176">Testing Things Out</a></span></dt></dl></dd><dt><span class="sect1"><a href="winbind.html#id2679639">Conclusion</a></span></dt><dt><span class="sect1"><a href="winbind.html#id2679688">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="winbind.html#id2679730">NSCD Problem Warning</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2679766">Winbind Is Not Resolving Users and Groups</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="AdvancedNetworkManagement.html">25. Advanced Network Management</a></span></dt><dd><dl><dt><span class="sect1"><a href="AdvancedNetworkManagement.html#id2679955">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="AdvancedNetworkManagement.html#id2679982">Remote Server Administration</a></span></dt><dt><span class="sect1"><a href="AdvancedNetworkManagement.html#id2680125">Remote Desktop Management</a></span></dt><dd><dl><dt><span class="sect2"><a href="AdvancedNetworkManagement.html#id2680154">Remote Management from NoMachine.Com</a></span></dt><dt><span class="sect2"><a href="AdvancedNetworkManagement.html#id2680529">Remote Management with ThinLinc</a></span></dt></dl></dd><dt><span class="sect1"><a href="AdvancedNetworkManagement.html#id2680714">Network Logon Script Magic</a></span></dt><dd><dl><dt><span class="sect2"><a href="AdvancedNetworkManagement.html#id2680939">Adding Printers without User Intervention</a></span></dt><dt><span class="sect2"><a href="AdvancedNetworkManagement.html#id2680982">Limiting Logon Connections</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="PolicyMgmt.html">26. System and Account Policies</a></span></dt><dd><dl><dt><span class="sect1"><a href="PolicyMgmt.html#id2681125">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="PolicyMgmt.html#id2681239">Creating and Managing System Policies</a></span></dt><dd><dl><dt><span class="sect2"><a href="PolicyMgmt.html#id2681428">Windows 9x/ME Policies</a></span></dt><dt><span class="sect2"><a href="PolicyMgmt.html#id2681565">Windows NT4-Style Policy Files</a></span></dt><dt><span class="sect2"><a href="PolicyMgmt.html#id2681787">MS Windows 200x/XP Professional Policies</a></span></dt></dl></dd><dt><span class="sect1"><a href="PolicyMgmt.html#id2682235">Managing Account/User Policies</a></span></dt><dt><span class="sect1"><a href="PolicyMgmt.html#id2682462">Management Tools</a></span></dt><dd><dl><dt><span class="sect2"><a href="PolicyMgmt.html#id2682475">Samba Editreg Toolset</a></span></dt><dt><span class="sect2"><a href="PolicyMgmt.html#id2682557">Windows NT4/200x</a></span></dt><dt><span class="sect2"><a href="PolicyMgmt.html#id2682597">Samba PDC</a></span></dt></dl></dd><dt><span class="sect1"><a href="PolicyMgmt.html#id2682662">System Startup and Logon Processing Overview</a></span></dt><dt><span class="sect1"><a href="PolicyMgmt.html#id2682820">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="PolicyMgmt.html#id2682831">Policy Does Not Work</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ProfileMgmt.html">27. Desktop Profile Management</a></span></dt><dd><dl><dt><span class="sect1"><a href="ProfileMgmt.html#id2682916">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="ProfileMgmt.html#id2682966">Roaming Profiles</a></span></dt><dd><dl><dt><span class="sect2"><a href="ProfileMgmt.html#id2683020">Samba Configuration for Profile Handling</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2683625">Windows Client Profile Configuration Information</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2684970">User Profile Hive Cleanup Service</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2685003">Sharing Profiles between Windows 9x/Me and NT4/200x/XP Workstations</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2685102">Profile Migration from Windows NT4/200x Server to Samba</a></span></dt></dl></dd><dt><span class="sect1"><a href="ProfileMgmt.html#id2685453">Mandatory Profiles</a></span></dt><dt><span class="sect1"><a href="ProfileMgmt.html#id2685594">Creating and Managing Group Profiles</a></span></dt><dt><span class="sect1"><a href="ProfileMgmt.html#id2685664">Default Profile for Windows Users</a></span></dt><dd><dl><dt><span class="sect2"><a href="ProfileMgmt.html#id2685694">MS Windows 9x/Me</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2685846">MS Windows NT4 Workstation</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2686408">MS Windows 200x/XP</a></span></dt></dl></dd><dt><span class="sect1"><a href="ProfileMgmt.html#id2686913">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="ProfileMgmt.html#id2686924">Configuring Roaming Profiles for a Few Users or Groups</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2686985">Cannot Use Roaming Profiles</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2687156">Changing the Default Profile</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id2687320">Debugging Roaming Profiles and NT4-style Domain Policies</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="pam.html">28. PAM-Based Distributed Authentication</a></span></dt><dd><dl><dt><span class="sect1"><a href="pam.html#id2687502">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="pam.html#id2688133">Technical Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="pam.html#id2688187">PAM Configuration Syntax</a></span></dt><dt><span class="sect2"><a href="pam.html#id2689193">Example System Configurations</a></span></dt><dt><span class="sect2"><a href="pam.html#id2689500"><code class="filename">smb.conf</code> PAM Configuration</a></span></dt><dt><span class="sect2"><a href="pam.html#id2689580">Remote CIFS Authentication Using <code class="filename">winbindd.so</code></a></span></dt><dt><span class="sect2"><a href="pam.html#id2689683">Password Synchronization Using <code class="filename">pam_smbpass.so</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="pam.html#id2690083">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="pam.html#id2690094">pam_winbind Problem</a></span></dt><dt><span class="sect2"><a href="pam.html#id2690192">Winbind Is Not Resolving Users and Groups</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="integrate-ms-networks.html">29. Integrating MS Windows Networks with Samba</a></span></dt><dd><dl><dt><span class="sect1"><a href="integrate-ms-networks.html#id2690415">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="integrate-ms-networks.html#id2690436">Background Information</a></span></dt><dt><span class="sect1"><a href="integrate-ms-networks.html#id2690564">Name Resolution in a Pure UNIX/Linux World</a></span></dt><dd><dl><dt><span class="sect2"><a href="integrate-ms-networks.html#id2690637"><code class="filename">/etc/hosts</code></a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2690816"><code class="filename">/etc/resolv.conf</code></a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2690852"><code class="filename">/etc/host.conf</code></a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2690904"><code class="filename">/etc/nsswitch.conf</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="integrate-ms-networks.html#id2691028">Name Resolution as Used within MS Windows Networking</a></span></dt><dd><dl><dt><span class="sect2"><a href="integrate-ms-networks.html#id2691462">The NetBIOS Name Cache</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2691548">The LMHOSTS File</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2691714">HOSTS File</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2691742">DNS Lookup</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2691769">WINS Lookup</a></span></dt></dl></dd><dt><span class="sect1"><a href="integrate-ms-networks.html#id2691907">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="integrate-ms-networks.html#id2691920">Pinging Works Only One Way</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2691951">Very Slow Network Connections</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id2691993">Samba Server Name-Change Problem</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="unicode.html">30. Unicode/Charsets</a></span></dt><dd><dl><dt><span class="sect1"><a href="unicode.html#id2692198">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="unicode.html#id2692250">What Are Charsets and Unicode?</a></span></dt><dt><span class="sect1"><a href="unicode.html#id2692384">Samba and Charsets</a></span></dt><dt><span class="sect1"><a href="unicode.html#id2692520">Conversion from Old Names</a></span></dt><dt><span class="sect1"><a href="unicode.html#id2692552">Japanese Charsets</a></span></dt><dd><dl><dt><span class="sect2"><a href="unicode.html#id2692681">Basic Parameter Setting</a></span></dt><dt><span class="sect2"><a href="unicode.html#id2693322">Individual Implementations</a></span></dt><dt><span class="sect2"><a href="unicode.html#id2693445">Migration from Samba-2.2 Series</a></span></dt></dl></dd><dt><span class="sect1"><a href="unicode.html#id2693591">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="unicode.html#id2693597">CP850.so Can't Be Found</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="Backup.html">31. Backup Techniques</a></span></dt><dd><dl><dt><span class="sect1"><a href="Backup.html#id2693704">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="Backup.html#id2693749">Discussion of Backup Solutions</a></span></dt><dd><dl><dt><span class="sect2"><a href="Backup.html#id2693846">BackupPC</a></span></dt><dt><span class="sect2"><a href="Backup.html#id2694017">Rsync</a></span></dt><dt><span class="sect2"><a href="Backup.html#id2694187">Amanda</a></span></dt><dt><span class="sect2"><a href="Backup.html#id2694236">BOBS: Browseable Online Backup System</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="SambaHA.html">32. High Availability</a></span></dt><dd><dl><dt><span class="sect1"><a href="SambaHA.html#id2694331">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="SambaHA.html#id2694452">Technical Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="SambaHA.html#id2694486">The Ultimate Goal</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id2694616">Why Is This So Hard?</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id2695329">A Simple Solution</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id2695410">High-Availability Server Products</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id2695550">MS-DFS: The Poor Man's Cluster</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id2695587">Conclusions</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="largefile.html">33. Handling Large Directories</a></span></dt><dt><span class="chapter"><a href="cfgsmarts.html">34. Advanced Configuration Techniques</a></span></dt><dd><dl><dt><span class="sect1"><a href="cfgsmarts.html#id2696218">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="cfgsmarts.html#id2696226">Multiple Server Hosting</a></span></dt><dt><span class="sect2"><a href="cfgsmarts.html#id2696624">Multiple Virtual Server Personalities</a></span></dt><dt><span class="sect2"><a href="cfgsmarts.html#id2697638">Multiple Virtual Server Hosting</a></span></dt></dl></dd></dl></dd></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ClientConfig.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ChangeNotes.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 8. MS Windows Network Configuration Guide </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 9. Important and Critical Change Notes for the Samba 3.x Series</td></tr></table></div></body></html>
+</p><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="ChangeNotes.html">9. Important and Critical Change Notes for the Samba 3.x Series</a></span></dt><dd><dl><dt><span class="sect1"><a href="ChangeNotes.html#id366427">Important Samba-3.2.x Change Notes</a></span></dt><dt><span class="sect1"><a href="ChangeNotes.html#id366438">Important Samba-3.0.x Change Notes</a></span></dt><dd><dl><dt><span class="sect2"><a href="ChangeNotes.html#id366486">User and Group Changes</a></span></dt><dt><span class="sect2"><a href="ChangeNotes.html#id366776">Essential Group Mappings</a></span></dt><dt><span class="sect2"><a href="ChangeNotes.html#id366887">Passdb Changes</a></span></dt><dt><span class="sect2"><a href="ChangeNotes.html#id366943">Group Mapping Changes in Samba-3.0.23</a></span></dt><dt><span class="sect2"><a href="ChangeNotes.html#id367059">LDAP Changes in Samba-3.0.23</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="NetworkBrowsing.html">10. Network Browsing</a></span></dt><dd><dl><dt><span class="sect1"><a href="NetworkBrowsing.html#id367309">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="NetworkBrowsing.html#id367475">What Is Browsing?</a></span></dt><dt><span class="sect1"><a href="NetworkBrowsing.html#netdiscuss">Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id367888">NetBIOS over TCP/IP</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id368472">TCP/IP without NetBIOS</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#adsdnstech">DNS and Active Directory</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id368969">How Browsing Functions</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#DMB">Configuring Workgroup Browsing</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id369843">Domain Browsing Configuration</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#browse-force-master">Forcing Samba to Be the Master</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id370405">Making Samba the Domain Master</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id370625">Note about Broadcast Addresses</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id370644">Multiple Interfaces</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id370820">Use of the Remote Announce Parameter</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id370948">Use of the Remote Browse Sync Parameter</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id371035">WINS: The Windows Internetworking Name Server</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id371282">WINS Server Configuration</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id371576">WINS Replication</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id371626">Static WINS Entries</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id371843">Helpful Hints</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id371853">Windows Networking Protocols</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id371983">Name Resolution Order</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id372177">Technical Overview of Browsing</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id372256">Browsing Support in Samba</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id372438">Problem Resolution</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id372672">Cross-Subnet Browsing</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetworkBrowsing.html#id373613">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetworkBrowsing.html#id373637">Flushing the Samba NetBIOS Name Cache</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id373702">Server Resources Cannot Be Listed</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id373747">I Get an "<span class="errorname">Unable to browse the network</span>" Error</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id373792">Browsing of Shares and Directories is Very Slow</a></span></dt><dt><span class="sect2"><a href="NetworkBrowsing.html#id373973">Invalid Cached Share References Affects Network Browsing</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="passdb.html">11. Account Information Databases</a></span></dt><dd><dl><dt><span class="sect1"><a href="passdb.html#id374429">Features and Benefits</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id374464">Backward Compatibility Account Storage Systems</a></span></dt><dt><span class="sect2"><a href="passdb.html#id374634">New Account Storage Systems</a></span></dt></dl></dd><dt><span class="sect1"><a href="passdb.html#passdbtech">Technical Information</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id375167">Important Notes About Security</a></span></dt><dt><span class="sect2"><a href="passdb.html#id375648">Mapping User Identifiers between MS Windows and UNIX</a></span></dt><dt><span class="sect2"><a href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a></span></dt><dt><span class="sect2"><a href="passdb.html#id376168">Comments Regarding LDAP</a></span></dt><dt><span class="sect2"><a href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a></span></dt></dl></dd><dt><span class="sect1"><a href="passdb.html#acctmgmttools">Account Management Tools</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id376958">The <code class="literal">smbpasswd</code> Tool</a></span></dt><dt><span class="sect2"><a href="passdb.html#pdbeditthing">The <code class="literal">pdbedit</code> Tool</a></span></dt></dl></dd><dt><span class="sect1"><a href="passdb.html#id379310">Password Backends</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id379357">Plaintext</a></span></dt><dt><span class="sect2"><a href="passdb.html#id379428">smbpasswd: Encrypted Password Database</a></span></dt><dt><span class="sect2"><a href="passdb.html#id379677">tdbsam</a></span></dt><dt><span class="sect2"><a href="passdb.html#id379822">ldapsam</a></span></dt></dl></dd><dt><span class="sect1"><a href="passdb.html#id382162">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id382168">Users Cannot Logon</a></span></dt><dt><span class="sect2"><a href="passdb.html#id382202">Configuration of <em class="parameter"><code>auth methods</code></em></a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="groupmapping.html">12. Group Mapping: MS Windows and UNIX</a></span></dt><dd><dl><dt><span class="sect1"><a href="groupmapping.html#id382442">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="groupmapping.html#id382834">Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="groupmapping.html#id383149">Warning: User Private Group Problems</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id383201">Nested Groups: Adding Windows Domain Groups to Windows Local Groups</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id383730">Important Administrative Information</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id383950">Default Users, Groups, and Relative Identifiers</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id384556">Example Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="groupmapping.html#id384627">Configuration Scripts</a></span></dt><dd><dl><dt><span class="sect2"><a href="groupmapping.html#id384638">Sample <code class="filename">smb.conf</code> Add Group Script</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id384798">Script to Configure Group Mapping</a></span></dt></dl></dd><dt><span class="sect1"><a href="groupmapping.html#id384912">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="groupmapping.html#id384922">Adding Groups Fails</a></span></dt><dt><span class="sect2"><a href="groupmapping.html#id385002">Adding Domain Users to the Workstation Power Users Group</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="NetCommand.html">13. Remote and Local Management: The Net Command</a></span></dt><dd><dl><dt><span class="sect1"><a href="NetCommand.html#id385377">Overview</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id385653">Administrative Tasks and Methods</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id385728">UNIX and Windows Group Management</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#id385877">Adding, Renaming, or Deletion of Group Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#grpmemshipchg">Manipulating Group Memberships</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#nestedgrpmgmgt">Nested Group Support</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#id387104">UNIX and Windows User Management</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#sbeuseraddn">Adding User Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id387299">Deletion of User Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id387344">Managing User Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id387406">User Mapping</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#id387484">Administering User Rights and Privileges</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id387799">Managing Trust Relationships</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#id387811">Machine Trust Accounts</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id388148">Interdomain Trusts</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#id388358">Managing Security Identifiers (SIDS)</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id388559">Share Management</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#id388601">Creating, Editing, and Removing Shares</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id388770">Creating and Changing Share ACLs</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id388797">Share, Directory, and File Migration</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id389335">Printer Migration</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#id389550">Controlling Open Files</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id389567">Session and Connection Management</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id389627">Printers and ADS</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id389730">Manipulating the Samba Cache</a></span></dt><dt><span class="sect1"><a href="NetCommand.html#id389747">Managing IDMAP UID/SID Mappings</a></span></dt><dd><dl><dt><span class="sect2"><a href="NetCommand.html#id389785">Creating an IDMAP Database Dump File</a></span></dt><dt><span class="sect2"><a href="NetCommand.html#id389816">Restoring the IDMAP Database Dump File</a></span></dt></dl></dd><dt><span class="sect1"><a href="NetCommand.html#netmisc1">Other Miscellaneous Operations</a></span></dt></dl></dd><dt><span class="chapter"><a href="idmapper.html">14. Identity Mapping (IDMAP)</a></span></dt><dd><dl><dt><span class="sect1"><a href="idmapper.html#id390297">Samba Server Deployment Types and IDMAP</a></span></dt><dd><dl><dt><span class="sect2"><a href="idmapper.html#id390321">Standalone Samba Server</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id390378">Domain Member Server or Domain Member Client</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id391274">Primary Domain Controller</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id391492">Backup Domain Controller</a></span></dt></dl></dd><dt><span class="sect1"><a href="idmapper.html#id391558">Examples of IDMAP Backend Usage</a></span></dt><dd><dl><dt><span class="sect2"><a href="idmapper.html#id391619">Default Winbind TDB</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id392312">IDMAP_RID with Winbind</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id392871">IDMAP Storage in LDAP Using Winbind</a></span></dt><dt><span class="sect2"><a href="idmapper.html#id393417">IDMAP and NSS Using LDAP from ADS with RFC2307bis Schema Extension</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="rights.html">15. User Rights and Privileges</a></span></dt><dd><dl><dt><span class="sect1"><a href="rights.html#id394039">Rights Management Capabilities</a></span></dt><dd><dl><dt><span class="sect2"><a href="rights.html#id394300">Using the &#8220;<span class="quote">net rpc rights</span>&#8221; Utility</a></span></dt><dt><span class="sect2"><a href="rights.html#id394618">Description of Privileges</a></span></dt><dt><span class="sect2"><a href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></span></dt></dl></dd><dt><span class="sect1"><a href="rights.html#id395344">The Administrator Domain SID</a></span></dt><dt><span class="sect1"><a href="rights.html#id395509">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="rights.html#id395514">What Rights and Privileges Will Permit Windows Client Administration?</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="AccessControls.html">16. File, Directory, and Share Access Controls</a></span></dt><dd><dl><dt><span class="sect1"><a href="AccessControls.html#id395980">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="AccessControls.html#id396152">File System Access Controls</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id396164">MS Windows NTFS Comparison with UNIX File Systems</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id396461">Managing Directories</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id396582">File and Directory Access Control</a></span></dt></dl></dd><dt><span class="sect1"><a href="AccessControls.html#id397181">Share Definition Access Controls</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id397212">User- and Group-Based Controls</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id397552">File and Directory Permissions-Based Controls</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id397861">Miscellaneous Controls</a></span></dt></dl></dd><dt><span class="sect1"><a href="AccessControls.html#id398176">Access Controls on Shares</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id398312">Share Permissions Management</a></span></dt></dl></dd><dt><span class="sect1"><a href="AccessControls.html#id398637">MS Windows Access Control Lists and UNIX Interoperability</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id398643">Managing UNIX Permissions Using NT Security Dialogs</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id398682">Viewing File Security on a Samba Share</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id398747">Viewing File Ownership</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id398876">Viewing File or Directory Permissions</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id399067">Modifying File or Directory Permissions</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id399207">Interaction with the Standard Samba &#8220;<span class="quote">create mask</span>&#8221; Parameters</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id399542">Interaction with the Standard Samba File Attribute Mapping</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id399606">Windows NT/200X ACLs and POSIX ACLs Limitations</a></span></dt></dl></dd><dt><span class="sect1"><a href="AccessControls.html#id399970">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="AccessControls.html#id399980">Users Cannot Write to a Public Share</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id400287">File Operations Done as <span class="emphasis"><em>root</em></span> with <span class="emphasis"><em>force user</em></span> Set</a></span></dt><dt><span class="sect2"><a href="AccessControls.html#id400330">MS Word with Samba Changes Owner of File</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="locking.html">17. File and Record Locking</a></span></dt><dd><dl><dt><span class="sect1"><a href="locking.html#id400544">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="locking.html#id400630">Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="locking.html#id400867">Opportunistic Locking Overview</a></span></dt></dl></dd><dt><span class="sect1"><a href="locking.html#id401718">Samba Oplocks Control</a></span></dt><dd><dl><dt><span class="sect2"><a href="locking.html#id401786">Example Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="locking.html#id402171">MS Windows Oplocks and Caching Controls</a></span></dt><dd><dl><dt><span class="sect2"><a href="locking.html#id402323">Workstation Service Entries</a></span></dt><dt><span class="sect2"><a href="locking.html#id402342">Server Service Entries</a></span></dt></dl></dd><dt><span class="sect1"><a href="locking.html#id402398">Persistent Data Corruption</a></span></dt><dt><span class="sect1"><a href="locking.html#id402418">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="locking.html#id402468">locking.tdb Error Messages</a></span></dt><dt><span class="sect2"><a href="locking.html#id402497">Problems Saving Files in MS Office on Windows XP</a></span></dt><dt><span class="sect2"><a href="locking.html#id402519">Long Delays Deleting Files over Network with XP SP1</a></span></dt></dl></dd><dt><span class="sect1"><a href="locking.html#id402548">Additional Reading</a></span></dt></dl></dd><dt><span class="chapter"><a href="securing-samba.html">18. Securing Samba</a></span></dt><dd><dl><dt><span class="sect1"><a href="securing-samba.html#id402714">Introduction</a></span></dt><dt><span class="sect1"><a href="securing-samba.html#id402802">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="securing-samba.html#id402937">Technical Discussion of Protective Measures and Issues</a></span></dt><dd><dl><dt><span class="sect2"><a href="securing-samba.html#id402949">Using Host-Based Protection</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id403094">User-Based Protection</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id403151">Using Interface Protection</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#firewallports">Using a Firewall</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id403481">Using IPC$ Share-Based Denials </a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id403614">NTLMv2 Security</a></span></dt></dl></dd><dt><span class="sect1"><a href="securing-samba.html#id403662">Upgrading Samba</a></span></dt><dt><span class="sect1"><a href="securing-samba.html#id403703">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="securing-samba.html#id403715">Smbclient Works on Localhost, but the Network Is Dead</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id403740">Why Can Users Access Other Users' Home Directories?</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="InterdomainTrusts.html">19. Interdomain Trust Relationships</a></span></dt><dd><dl><dt><span class="sect1"><a href="InterdomainTrusts.html#id404270">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="InterdomainTrusts.html#id404336">Trust Relationship Background</a></span></dt><dt><span class="sect1"><a href="InterdomainTrusts.html#id404590">Native MS Windows NT4 Trusts Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="InterdomainTrusts.html#id404624">Creating an NT4 Domain Trust</a></span></dt><dt><span class="sect2"><a href="InterdomainTrusts.html#id404714">Completing an NT4 Domain Trust</a></span></dt><dt><span class="sect2"><a href="InterdomainTrusts.html#id404795">Interdomain Trust Facilities</a></span></dt></dl></dd><dt><span class="sect1"><a href="InterdomainTrusts.html#id404991">Configuring Samba NT-Style Domain Trusts</a></span></dt><dd><dl><dt><span class="sect2"><a href="InterdomainTrusts.html#samba-trusted-domain">Samba as the Trusted Domain</a></span></dt><dt><span class="sect2"><a href="InterdomainTrusts.html#id405306">Samba as the Trusting Domain</a></span></dt></dl></dd><dt><span class="sect1"><a href="InterdomainTrusts.html#id405489">NT4-Style Domain Trusts with Windows 2000</a></span></dt><dt><span class="sect1"><a href="InterdomainTrusts.html#id405625">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="InterdomainTrusts.html#id405636">Browsing of Trusted Domain Fails</a></span></dt><dt><span class="sect2"><a href="InterdomainTrusts.html#id405678">Problems with LDAP ldapsam and Older Versions of smbldap-tools</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="msdfs.html">20. Hosting a Microsoft Distributed File System Tree</a></span></dt><dd><dl><dt><span class="sect1"><a href="msdfs.html#id405843">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="msdfs.html#id406232">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="msdfs.html#id406261">MSDFS UNIX Path Is Case-Critical</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="classicalprinting.html">21. Classical Printing Support</a></span></dt><dd><dl><dt><span class="sect1"><a href="classicalprinting.html#id406449">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id406652">Technical Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id406793">Client to Samba Print Job Processing</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id406846">Printing-Related Configuration Parameters</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id406941">Simple Print Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id407208">Verifying Configuration with <code class="literal">testparm</code></a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id407391">Rapid Configuration Validation</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id407742">Extended Printing Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id408182">Detailed Explanation Settings</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#cups-msrpc">Printing Developments Since Samba-2.2</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id410712">Point'n'Print Client Drivers on Samba Servers</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id410866">The Obsoleted [printer$] Section</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id410977">Creating the [print$] Share</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id411183">[print$] Stanza Parameters</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id411476">The [print$] Share Directory</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id411602">Installing Drivers into [print$]</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id411687">Add Printer Wizard Driver Installation</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#inst-rpc">Installing Print Drivers Using <code class="literal">rpcclient</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id413392">Client Driver Installation Procedure</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id413407">First Client Driver Installation</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#prt-modeset">Setting Device Modes on New Printers</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id346362">Additional Client Driver Installation</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id346474">Always Make First Client Connection as root or &#8220;<span class="quote">printer admin</span>&#8221;</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id414319">Other Gotchas</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id414335">Setting Default Print Options for Client Drivers</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id414671">Supporting Large Numbers of Printers</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id414907">Adding New Printers with the Windows NT APW</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id415143">Error Message: &#8220;<span class="quote">Cannot connect under a different Name</span>&#8221;</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id415242">Take Care When Assembling Driver Files</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id415466">Samba and Printer Ports</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id415565">Avoiding Common Client Driver Misconfiguration</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id415598">The Imprints Toolset</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id415641">What Is Imprints?</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id415671">Creating Printer Driver Packages</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id415684">The Imprints Server</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id415698">The Installation Client</a></span></dt></dl></dd><dt><span class="sect1"><a href="classicalprinting.html#id415814">Adding Network Printers without User Interaction</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id416053">The <code class="literal">addprinter</code> Command</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id416087">Migration of Classical Printing to Samba</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id416218">Publishing Printer Information in Active Directory or LDAP</a></span></dt><dt><span class="sect1"><a href="classicalprinting.html#id416245">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="classicalprinting.html#id416250">I Give My Root Password but I Do Not Get Access</a></span></dt><dt><span class="sect2"><a href="classicalprinting.html#id416288">My Print Jobs Get Spooled into the Spooling Directory, but Then Get Lost</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="CUPS-printing.html">22. CUPS Printing Support</a></span></dt><dd><dl><dt><span class="sect1"><a href="CUPS-printing.html#id416419">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id416425">Features and Benefits</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id416476">Overview</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id416588">Basic CUPS Support Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id416695">Linking smbd with libcups.so</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id416919">Simple <code class="filename">smb.conf</code> Settings for CUPS</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id417155">More Complex CUPS <code class="filename">smb.conf</code> Settings</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id417537">Advanced Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id417551">Central Spooling vs. &#8220;<span class="quote">Peer-to-Peer</span>&#8221; Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id417596">Raw Print Serving: Vendor Drivers on Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id417810">Installation of Windows Client Drivers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#cups-raw">Explicitly Enable &#8220;<span class="quote">raw</span>&#8221; Printing for <span class="emphasis"><em>application/octet-stream</em></span></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id418073">Driver Upload Methods</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id418184">Advanced Intelligent Printing with PostScript Driver Download</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#gdipost">GDI on Windows, PostScript on UNIX</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id418358">Windows Drivers, GDI, and EMF</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id418524">UNIX Printfile Conversion and GUI Basics</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#post-and-ghost">PostScript and Ghostscript</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id418848">Ghostscript: The Software RIP for Non-PostScript Printers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id418988">PostScript Printer Description (PPD) Specification</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id419056">Using Windows-Formatted Vendor PPDs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id419165">CUPS Also Uses PPDs for Non-PostScript Printers</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id419200">The CUPS Filtering Architecture</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id419826">MIME Type Conversion Rules</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id420021">Filtering  Overview</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id420169">Prefilters</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id420346">pstops</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id420506">pstoraster</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id420757">imagetops and imagetoraster</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id420837">rasterto [printers specific]</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id421049">CUPS Backends</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id421357">The Role of <em class="parameter"><code>cupsomatic/foomatic</code></em></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id421572">The Complete Picture</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id421583"><code class="filename">mime.convs</code></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id421644">&#8220;<span class="quote">Raw</span>&#8221; Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id421744">application/octet-stream Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id422005">PostScript Printer Descriptions for Non-PostScript Printers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id422269"><span class="emphasis"><em>cupsomatic/foomatic-rip</em></span> Versus <span class="emphasis"><em>Native CUPS</em></span> Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id422583">Examples for Filtering Chains</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id422984">Sources of CUPS Drivers/PPDs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423093">Printing with Interface Scripts</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id423172">Network Printing (Purely Windows)</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id423186">From Windows Clients to an NT Print Server</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423245">Driver Execution on the Client</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423310">Driver Execution on the Server</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id423409">Network Printing (Windows Clients and UNIX/Samba Print
+Servers)</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id423425">From Windows Clients to a CUPS/Samba Print Server</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423600">Samba Receiving Job-Files and Passing Them to CUPS</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id423671">Network PostScript RIP</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id423751">PPDs for Non-PS Printers on UNIX</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423788">PPDs for Non-PS Printers on Windows</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id423848">Windows Terminal Servers (WTS) as CUPS Clients</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id423860">Printer Drivers Running in &#8220;<span class="quote">Kernel Mode</span>&#8221; Cause Many
+Problems</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423891">Workarounds Impose Heavy Limitations</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423905">CUPS: A &#8220;<span class="quote">Magical Stone</span>&#8221;?</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423941">PostScript Drivers with No Major Problems, Even in Kernel
+Mode</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id424020">Configuring CUPS for Driver Download</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id424038"><span class="emphasis"><em>cupsaddsmb</em></span>: The Unknown Utility</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id424126">Prepare Your <code class="filename">smb.conf</code> for <code class="literal">cupsaddsmb</code></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id424414">CUPS &#8220;<span class="quote">PostScript Driver for Windows NT/200x/XP</span>&#8221;</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id424635">Recognizing Different Driver Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id424746">Acquiring the Adobe Driver Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id424766">ESP Print Pro PostScript Driver for Windows NT/200x/XP</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id424821">Caveats to Be Considered</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425100">Windows CUPS PostScript Driver Versus Adobe Driver</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425295">Run cupsaddsmb (Quiet Mode)</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425429">Run cupsaddsmb with Verbose Output</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425560">Understanding cupsaddsmb</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425696">How to Recognize If cupsaddsmb Completed Successfully</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425806">cupsaddsmb with a Samba PDC</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425884">cupsaddsmb Flowchart</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425962">Installing the PostScript Driver on a Client</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#cups-avoidps1">Avoiding Critical PostScript Driver Settings on the Client</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id426171">Installing PostScript Driver Files Manually Using rpcclient</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id426337">A Check of the rpcclient man Page</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id426497">Understanding the rpcclient man Page</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id426589">Producing an Example by Querying a Windows Box</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id426709">Requirements for adddriver and setdriver to Succeed</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id426920">Manual Driver Installation in 15 Steps</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id427799">Troubleshooting Revisited</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id427930">The Printing <code class="filename">*.tdb</code> Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id428129">Trivial Database Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id428191">Binary Format</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id428252">Losing <code class="filename">*.tdb</code> Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id428299">Using <code class="literal">tdbbackup</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id428409">CUPS Print Drivers from Linuxprinting.org</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id428570">foomatic-rip and Foomatic Explained</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id429283">foomatic-rip and Foomatic PPD Download and Installation</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id429705">Page Accounting with CUPS</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id429735">Setting Up Quotas</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id429785">Correct and Incorrect Accounting</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id429818">Adobe and CUPS PostScript Drivers for Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id429949">The page_log File Syntax</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id430085">Possible Shortcomings</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id430143">Future Developments</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id430178">Other Accounting Tools</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id430191">Additional Material</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id430379">Autodeletion or Preservation of CUPS Spool Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id430451">CUPS Configuration Settings Explained</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id430528">Preconditions</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id430657">Manual Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id430701">Printing from CUPS to Windows-Attached Printers</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id430957">More CUPS Filtering Chains</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id431066">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id431072">Windows 9x/Me Client Can't Install Driver</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#root-ask-loop">&#8220;<span class="quote">cupsaddsmb</span>&#8221; Keeps Asking for Root Password in Never-ending Loop</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431141">&#8220;<span class="quote">cupsaddsmb</span>&#8221; or &#8220;<span class="quote">rpcclient addriver</span>&#8221; Emit Error</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431178">&#8220;<span class="quote">cupsaddsmb</span>&#8221; Errors</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431248">Client Can't Connect to Samba Printer</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431271">New Account Reconnection from Windows 200x/XP Troubles</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431352">Avoid Being Connected to the Samba Server as the Wrong User</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431398">Upgrading to CUPS Drivers from Adobe Drivers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431432">Can't Use &#8220;<span class="quote">cupsaddsmb</span>&#8221; on Samba Server, Which Is a PDC</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431467">Deleted Windows 200x Printer Driver Is Still Shown</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431498">Windows 200x/XP Local Security Policies</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431529">Administrator Cannot Install Printers for All Local Users</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431566">Print Change, Notify Functions on NT Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431589">Win XP-SP1</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431631">Print Options for All Users Can't Be Set on Windows 200x/XP</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431898">Most Common Blunders in Driver Settings on Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431951"><code class="literal">cupsaddsmb</code> Does Not Work with Newly Installed Printer</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431997">Permissions on <code class="filename">/var/spool/samba/</code> Get Reset After Each Reboot</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id432090">Print Queue Called &#8220;<span class="quote">lp</span>&#8221; Mishandles Print Jobs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id432153">Location of Adobe PostScript Driver Files for &#8220;<span class="quote">cupsaddsmb</span>&#8221;</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id432204">Overview of the CUPS Printing Processes</a></span></dt></dl></dd><dt><span class="chapter"><a href="VFS.html">23. Stackable VFS modules</a></span></dt><dd><dl><dt><span class="sect1"><a href="VFS.html#id432386">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="VFS.html#id432421">Discussion</a></span></dt><dt><span class="sect1"><a href="VFS.html#id432802">Included Modules</a></span></dt><dd><dl><dt><span class="sect2"><a href="VFS.html#id432808">audit</a></span></dt><dt><span class="sect2"><a href="VFS.html#id432847">default_quota</a></span></dt><dt><span class="sect2"><a href="VFS.html#id433040">extd_audit</a></span></dt><dt><span class="sect2"><a href="VFS.html#fakeperms">fake_perms</a></span></dt><dt><span class="sect2"><a href="VFS.html#id433348">recycle</a></span></dt><dt><span class="sect2"><a href="VFS.html#id433719">netatalk</a></span></dt><dt><span class="sect2"><a href="VFS.html#id433767">shadow_copy</a></span></dt></dl></dd><dt><span class="sect1"><a href="VFS.html#id434600">VFS Modules Available Elsewhere</a></span></dt><dd><dl><dt><span class="sect2"><a href="VFS.html#id434622">DatabaseFS</a></span></dt><dt><span class="sect2"><a href="VFS.html#id434675">vscan</a></span></dt><dt><span class="sect2"><a href="VFS.html#id434712">vscan-clamav</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="winbind.html">24. Winbind: Use of Domain Accounts</a></span></dt><dd><dl><dt><span class="sect1"><a href="winbind.html#id434945">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="winbind.html#id435268">Introduction</a></span></dt><dt><span class="sect1"><a href="winbind.html#id435346">What Winbind Provides</a></span></dt><dd><dl><dt><span class="sect2"><a href="winbind.html#id435485">Target Uses</a></span></dt><dt><span class="sect2"><a href="winbind.html#id435524">Handling of Foreign SIDs</a></span></dt></dl></dd><dt><span class="sect1"><a href="winbind.html#id435636">How Winbind Works</a></span></dt><dd><dl><dt><span class="sect2"><a href="winbind.html#id435683">Microsoft Remote Procedure Calls</a></span></dt><dt><span class="sect2"><a href="winbind.html#id435761">Microsoft Active Directory Services</a></span></dt><dt><span class="sect2"><a href="winbind.html#id435805">Name Service Switch</a></span></dt><dt><span class="sect2"><a href="winbind.html#id436017">Pluggable Authentication Modules</a></span></dt><dt><span class="sect2"><a href="winbind.html#id436158">User and Group ID Allocation</a></span></dt><dt><span class="sect2"><a href="winbind.html#id436226">Result Caching</a></span></dt></dl></dd><dt><span class="sect1"><a href="winbind.html#id436276">Installation and Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="winbind.html#id436282">Introduction</a></span></dt><dt><span class="sect2"><a href="winbind.html#id436389">Requirements</a></span></dt><dt><span class="sect2"><a href="winbind.html#id436531">Testing Things Out</a></span></dt></dl></dd><dt><span class="sect1"><a href="winbind.html#id438782">Conclusion</a></span></dt><dt><span class="sect1"><a href="winbind.html#id438828">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="winbind.html#id438861">NSCD Problem Warning</a></span></dt><dt><span class="sect2"><a href="winbind.html#id438895">Winbind Is Not Resolving Users and Groups</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="AdvancedNetworkManagement.html">25. Advanced Network Management</a></span></dt><dd><dl><dt><span class="sect1"><a href="AdvancedNetworkManagement.html#id439073">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="AdvancedNetworkManagement.html#id439095">Remote Server Administration</a></span></dt><dt><span class="sect1"><a href="AdvancedNetworkManagement.html#id439232">Remote Desktop Management</a></span></dt><dd><dl><dt><span class="sect2"><a href="AdvancedNetworkManagement.html#id439257">Remote Management from NoMachine.Com</a></span></dt><dt><span class="sect2"><a href="AdvancedNetworkManagement.html#id439596">Remote Management with ThinLinc</a></span></dt></dl></dd><dt><span class="sect1"><a href="AdvancedNetworkManagement.html#id439771">Network Logon Script Magic</a></span></dt><dd><dl><dt><span class="sect2"><a href="AdvancedNetworkManagement.html#id439937">Adding Printers without User Intervention</a></span></dt><dt><span class="sect2"><a href="AdvancedNetworkManagement.html#id439977">Limiting Logon Connections</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="PolicyMgmt.html">26. System and Account Policies</a></span></dt><dd><dl><dt><span class="sect1"><a href="PolicyMgmt.html#id440104">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="PolicyMgmt.html#id440199">Creating and Managing System Policies</a></span></dt><dd><dl><dt><span class="sect2"><a href="PolicyMgmt.html#id440369">Windows 9x/ME Policies</a></span></dt><dt><span class="sect2"><a href="PolicyMgmt.html#id440493">Windows NT4-Style Policy Files</a></span></dt><dt><span class="sect2"><a href="PolicyMgmt.html#id440699">MS Windows 200x/XP Professional Policies</a></span></dt></dl></dd><dt><span class="sect1"><a href="PolicyMgmt.html#id441101">Managing Account/User Policies</a></span></dt><dt><span class="sect1"><a href="PolicyMgmt.html#id441305">Management Tools</a></span></dt><dd><dl><dt><span class="sect2"><a href="PolicyMgmt.html#id441316">Samba Editreg Toolset</a></span></dt><dt><span class="sect2"><a href="PolicyMgmt.html#id441392">Windows NT4/200x</a></span></dt><dt><span class="sect2"><a href="PolicyMgmt.html#id441429">Samba PDC</a></span></dt></dl></dd><dt><span class="sect1"><a href="PolicyMgmt.html#id441492">System Startup and Logon Processing Overview</a></span></dt><dt><span class="sect1"><a href="PolicyMgmt.html#id441634">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="PolicyMgmt.html#id441644">Policy Does Not Work</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ProfileMgmt.html">27. Desktop Profile Management</a></span></dt><dd><dl><dt><span class="sect1"><a href="ProfileMgmt.html#id441723">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="ProfileMgmt.html#id441766">Roaming Profiles</a></span></dt><dd><dl><dt><span class="sect2"><a href="ProfileMgmt.html#id441814">Samba Configuration for Profile Handling</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id442383">Windows Client Profile Configuration Information</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id443652">User Profile Hive Cleanup Service</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id443680">Sharing Profiles between Windows 9x/Me and NT4/200x/XP Workstations</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id443770">Profile Migration from Windows NT4/200x Server to Samba</a></span></dt></dl></dd><dt><span class="sect1"><a href="ProfileMgmt.html#id444102">Mandatory Profiles</a></span></dt><dt><span class="sect1"><a href="ProfileMgmt.html#id444230">Creating and Managing Group Profiles</a></span></dt><dt><span class="sect1"><a href="ProfileMgmt.html#id444297">Default Profile for Windows Users</a></span></dt><dd><dl><dt><span class="sect2"><a href="ProfileMgmt.html#id444323">MS Windows 9x/Me</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id444459">MS Windows NT4 Workstation</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id444984">MS Windows 200x/XP</a></span></dt></dl></dd><dt><span class="sect1"><a href="ProfileMgmt.html#id445446">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="ProfileMgmt.html#id445456">Configuring Roaming Profiles for a Few Users or Groups</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id445509">Cannot Use Roaming Profiles</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id445658">Changing the Default Profile</a></span></dt><dt><span class="sect2"><a href="ProfileMgmt.html#id445812">Debugging Roaming Profiles and NT4-style Domain Policies</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="pam.html">28. PAM-Based Distributed Authentication</a></span></dt><dd><dl><dt><span class="sect1"><a href="pam.html#id445976">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="pam.html#id446577">Technical Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="pam.html#id446627">PAM Configuration Syntax</a></span></dt><dt><span class="sect2"><a href="pam.html#id447529">Example System Configurations</a></span></dt><dt><span class="sect2"><a href="pam.html#id447799"><code class="filename">smb.conf</code> PAM Configuration</a></span></dt><dt><span class="sect2"><a href="pam.html#id447870">Remote CIFS Authentication Using <code class="filename">winbindd.so</code></a></span></dt><dt><span class="sect2"><a href="pam.html#id447960">Password Synchronization Using <code class="filename">pam_smbpass.so</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="pam.html#id448317">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="pam.html#id448327">pam_winbind Problem</a></span></dt><dt><span class="sect2"><a href="pam.html#id448416">Winbind Is Not Resolving Users and Groups</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="integrate-ms-networks.html">29. Integrating MS Windows Networks with Samba</a></span></dt><dd><dl><dt><span class="sect1"><a href="integrate-ms-networks.html#id448624">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="integrate-ms-networks.html#id448641">Background Information</a></span></dt><dt><span class="sect1"><a href="integrate-ms-networks.html#id448760">Name Resolution in a Pure UNIX/Linux World</a></span></dt><dd><dl><dt><span class="sect2"><a href="integrate-ms-networks.html#id448831"><code class="filename">/etc/hosts</code></a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id448992"><code class="filename">/etc/resolv.conf</code></a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id449025"><code class="filename">/etc/host.conf</code></a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id449073"><code class="filename">/etc/nsswitch.conf</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="integrate-ms-networks.html#id449183">Name Resolution as Used within MS Windows Networking</a></span></dt><dd><dl><dt><span class="sect2"><a href="integrate-ms-networks.html#id449576">The NetBIOS Name Cache</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id449659">The LMHOSTS File</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id449764">HOSTS File</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id449789">DNS Lookup</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id449811">WINS Lookup</a></span></dt></dl></dd><dt><span class="sect1"><a href="integrate-ms-networks.html#id449942">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="integrate-ms-networks.html#id449953">Pinging Works Only One Way</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id449980">Very Slow Network Connections</a></span></dt><dt><span class="sect2"><a href="integrate-ms-networks.html#id450018">Samba Server Name-Change Problem</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="unicode.html">30. Unicode/Charsets</a></span></dt><dd><dl><dt><span class="sect1"><a href="unicode.html#id450204">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="unicode.html#id450250">What Are Charsets and Unicode?</a></span></dt><dt><span class="sect1"><a href="unicode.html#id450371">Samba and Charsets</a></span></dt><dt><span class="sect1"><a href="unicode.html#id450497">Conversion from Old Names</a></span></dt><dt><span class="sect1"><a href="unicode.html#id450526">Japanese Charsets</a></span></dt><dd><dl><dt><span class="sect2"><a href="unicode.html#id450646">Basic Parameter Setting</a></span></dt><dt><span class="sect2"><a href="unicode.html#id451226">Individual Implementations</a></span></dt><dt><span class="sect2"><a href="unicode.html#id451340">Migration from Samba-2.2 Series</a></span></dt></dl></dd><dt><span class="sect1"><a href="unicode.html#id451479">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="unicode.html#id451484">CP850.so Can't Be Found</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="Backup.html">31. Backup Techniques</a></span></dt><dd><dl><dt><span class="sect1"><a href="Backup.html#id451585">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="Backup.html#id451626">Discussion of Backup Solutions</a></span></dt><dd><dl><dt><span class="sect2"><a href="Backup.html#id451712">BackupPC</a></span></dt><dt><span class="sect2"><a href="Backup.html#id451875">Rsync</a></span></dt><dt><span class="sect2"><a href="Backup.html#id452035">Amanda</a></span></dt><dt><span class="sect2"><a href="Backup.html#id452079">BOBS: Browseable Online Backup System</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="SambaHA.html">32. High Availability</a></span></dt><dd><dl><dt><span class="sect1"><a href="SambaHA.html#id452170">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="SambaHA.html#id452277">Technical Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="SambaHA.html#id452309">The Ultimate Goal</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id452431">Why Is This So Hard?</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id453095">A Simple Solution</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id453168">High-Availability Server Products</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id453296">MS-DFS: The Poor Man's Cluster</a></span></dt><dt><span class="sect2"><a href="SambaHA.html#id453329">Conclusions</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="largefile.html">33. Handling Large Directories</a></span></dt><dt><span class="chapter"><a href="cfgsmarts.html">34. Advanced Configuration Techniques</a></span></dt><dd><dl><dt><span class="sect1"><a href="cfgsmarts.html#id453913">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="cfgsmarts.html#id453922">Multiple Server Hosting</a></span></dt><dt><span class="sect2"><a href="cfgsmarts.html#id454297">Multiple Virtual Server Personalities</a></span></dt><dt><span class="sect2"><a href="cfgsmarts.html#id455267">Multiple Virtual Server Hosting</a></span></dt></dl></dd></dl></dd></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ClientConfig.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ChangeNotes.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 8. MS Windows Network Configuration Guide </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 9. Important and Critical Change Notes for the Samba 3.x Series</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/pam.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/pam.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/pam.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,30 +1,30 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 28. PAM-Based Distributed Authentication</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="ProfileMgmt.html" title="Chapter 27. Desktop Profile Management"><link rel="next" href="integrate-ms-networks.html" title="Chapter 29. Integrating MS Windows Networks with Samba"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 28. PAM-Based Distributed Authentication</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ProfileMgmt.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="integrate-ms-networks.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="pam"></a>Chapter 28. PAM-Based Distributed Authentication</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Stephen</span> <span class="surname">Langasek</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:vorlon at netexpress.net">vorlon at netexpress.net</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">May 31, 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="pam.html#id2687502">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="pam.html#id2688133">Technical Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="pam.html#id2688187">PAM Configuration Syntax</a></span></dt><dt><span class="sect2"><a href="pam.html#id2689193">Example System Configurations</a></span></dt><dt><span class="sect2"><a href="pam.html#id2689500"><code class="filename">smb.conf</code> PAM Configuration</a></span></dt><dt><span class="sect2"><a href="pam.html#id2689580">Remote CIFS Authentication Using <code class="filename">winbindd.so</code></a></span></dt><dt><span class="sect2"><a href="pam.html#id2689683">Password Synchronization Using <code class="filename">pam_smbpass.so</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="pam.html#id2690083">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="pam.html#id2690094">pam_winbind Problem</a></span></dt><dt><span class="sect2"><a href="pam.html#id2690192">Winbind Is Not Resolving Users and Groups</a></span></dt></dl></dd></dl></div><p>
-<a class="indexterm" name="id2687420"></a>
-<a class="indexterm" name="id2687427"></a>
-<a class="indexterm" name="id2687433"></a>
-<a class="indexterm" name="id2687440"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 28. PAM-Based Distributed Authentication</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="ProfileMgmt.html" title="Chapter 27. Desktop Profile Management"><link rel="next" href="integrate-ms-networks.html" title="Chapter 29. Integrating MS Windows Networks with Samba"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 28. PAM-Based Distributed Authentication</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ProfileMgmt.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="integrate-ms-networks.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="pam"></a>Chapter 28. PAM-Based Distributed Authentication</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Stephen</span> <span class="surname">Langasek</span></h3><div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:vorlon at netexpress.net">vorlon at netexpress.net</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">May 31, 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="pam.html#id445976">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="pam.html#id446577">Technical Discussion</a></span></dt><dd><dl><dt><span class="sect2"><a href="pam.html#id446627">PAM Configuration Syntax</a></span></dt><dt><span class="sect2"><a href="pam.html#id447529">Example System Configurations</a></span></dt><dt><span class="sect2"><a href="pam.html#id447799"><code class="filename">smb.conf</code> PAM Configuration</a></span></dt><dt><span class="sect2"><a href="pam.html#id447870">Remote CIFS Authentication Using <code class="filename">winbindd.so</code></a></span></dt><dt><span class="sect2"><a href="pam.html#id447960">Password Synchronization Using <code class="filename">pam_smbpass.so</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="pam.html#id448317">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="pam.html#id448327">pam_winbind Problem</a></span></dt><dt><span class="sect2"><a href="pam.html#id448416">Winbind Is Not Resolving Users and Groups</a></span></dt></dl></dd></dl></div><p>
+<a class="indexterm" name="id445907"></a>
+<a class="indexterm" name="id445914"></a>
+<a class="indexterm" name="id445921"></a>
+<a class="indexterm" name="id445928"></a>
 This chapter should help you to deploy Winbind-based authentication on any PAM-enabled
 UNIX/Linux system. Winbind can be used to enable user-level application access authentication
 from any MS Windows NT domain, MS Windows 200x Active Directory-based
 domain, or any Samba-based domain environment. It will also help you to configure PAM-based local host access
 controls that are appropriate to your Samba configuration.
 </p><p>
-<a class="indexterm" name="id2687464"></a>
-<a class="indexterm" name="id2687471"></a>
+<a class="indexterm" name="id445941"></a>
+<a class="indexterm" name="id445948"></a>
 In addition to knowing how to configure Winbind into PAM, you will learn generic PAM management
 possibilities and in particular how to deploy tools like <code class="filename">pam_smbpass.so</code> to your advantage.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
 The use of Winbind requires more than PAM configuration alone.
 Please refer to <a class="link" href="winbind.html" title="Chapter 24. Winbind: Use of Domain Accounts">Winbind: Use of Domain Accounts</a>, for further information regarding Winbind.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2687502"></a>Features and Benefits</h2></div></div></div><p>
-<a class="indexterm" name="id2687510"></a>
-<a class="indexterm" name="id2687517"></a>
-<a class="indexterm" name="id2687524"></a>
-<a class="indexterm" name="id2687531"></a>
-<a class="indexterm" name="id2687540"></a>
-<a class="indexterm" name="id2687547"></a>
-<a class="indexterm" name="id2687554"></a>
-<a class="indexterm" name="id2687560"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id445976"></a>Features and Benefits</h2></div></div></div><p>
+<a class="indexterm" name="id445984"></a>
+<a class="indexterm" name="id445990"></a>
+<a class="indexterm" name="id445997"></a>
+<a class="indexterm" name="id446004"></a>
+<a class="indexterm" name="id446013"></a>
+<a class="indexterm" name="id446020"></a>
+<a class="indexterm" name="id446027"></a>
+<a class="indexterm" name="id446033"></a>
 A number of UNIX systems (e.g., Sun Solaris), as well as the xxxxBSD family and Linux,
 now utilize the Pluggable Authentication Modules (PAM) facility to provide all authentication, 
 authorization, and resource control services. Prior to the introduction of PAM, a decision
@@ -33,17 +33,17 @@
 Such a choice would involve provision of alternatives to programs such as <code class="literal">login</code>, 
 <code class="literal">passwd</code>, <code class="literal">chown</code>, and so on.
 </p><p>
-<a class="indexterm" name="id2687602"></a>
-<a class="indexterm" name="id2687609"></a>
-<a class="indexterm" name="id2687616"></a>
-<a class="indexterm" name="id2687622"></a>
+<a class="indexterm" name="id446071"></a>
+<a class="indexterm" name="id446078"></a>
+<a class="indexterm" name="id446084"></a>
+<a class="indexterm" name="id446091"></a>
 PAM provides a mechanism that disconnects these security programs from the underlying
 authentication/authorization infrastructure. PAM is configured by making appropriate modifications to one file,
 <code class="filename">/etc/pam.conf</code> (Solaris), or by editing individual control files that are
 located in <code class="filename">/etc/pam.d</code>.
 </p><p>
-<a class="indexterm" name="id2687649"></a>
-<a class="indexterm" name="id2687656"></a>
+<a class="indexterm" name="id446115"></a>
+<a class="indexterm" name="id446122"></a>
 On PAM-enabled UNIX/Linux systems, it is an easy matter to configure the system to use any
 authentication backend so long as the appropriate dynamically loadable library modules
 are available for it. The backend may be local to the system or may be centralized on a
@@ -51,94 +51,94 @@
 </p><p>
 PAM support modules are available for:
 </p><div class="variablelist"><dl><dt><span class="term"><code class="filename">/etc/passwd</code></span></dt><dd><p>
-<a class="indexterm" name="id2687686"></a>
-<a class="indexterm" name="id2687693"></a>
-<a class="indexterm" name="id2687700"></a>
-<a class="indexterm" name="id2687706"></a>
-<a class="indexterm" name="id2687713"></a>
-<a class="indexterm" name="id2687720"></a>
+<a class="indexterm" name="id446149"></a>
+<a class="indexterm" name="id446156"></a>
+<a class="indexterm" name="id446163"></a>
+<a class="indexterm" name="id446170"></a>
+<a class="indexterm" name="id446177"></a>
+<a class="indexterm" name="id446183"></a>
 		There are several PAM modules that interact with this standard UNIX user database. The most common are called
 		<code class="filename">pam_unix.so</code>, <code class="filename">pam_unix2.so</code>, <code class="filename">pam_pwdb.so</code> and
 		<code class="filename">pam_userdb.so</code>.
 		</p></dd><dt><span class="term">Kerberos</span></dt><dd><p>
-<a class="indexterm" name="id2687763"></a>
-<a class="indexterm" name="id2687770"></a>
-<a class="indexterm" name="id2687776"></a>
-<a class="indexterm" name="id2687783"></a>
-<a class="indexterm" name="id2687790"></a>
+<a class="indexterm" name="id446225"></a>
+<a class="indexterm" name="id446231"></a>
+<a class="indexterm" name="id446238"></a>
+<a class="indexterm" name="id446245"></a>
+<a class="indexterm" name="id446252"></a>
 		The <code class="filename">pam_krb5.so</code> module allows the use of any Kerberos-compliant server.
 		This tool is used to access MIT Kerberos, Heimdal Kerberos, and potentially
 		Microsoft Active Directory (if enabled).
 		</p></dd><dt><span class="term">LDAP</span></dt><dd><p>
-<a class="indexterm" name="id2687816"></a>
-<a class="indexterm" name="id2687822"></a>
-<a class="indexterm" name="id2687829"></a>
-<a class="indexterm" name="id2687836"></a>
-<a class="indexterm" name="id2687843"></a>
-<a class="indexterm" name="id2687850"></a>
+<a class="indexterm" name="id446276"></a>
+<a class="indexterm" name="id446283"></a>
+<a class="indexterm" name="id446289"></a>
+<a class="indexterm" name="id446296"></a>
+<a class="indexterm" name="id446303"></a>
+<a class="indexterm" name="id446310"></a>
 		The <code class="filename">pam_ldap.so</code> module allows the use of any LDAP v2- or v3-compatible backend
 		server. Commonly used LDAP backend servers include OpenLDAP v2.0 and v2.1,
 		Sun ONE iDentity server, Novell eDirectory server, and Microsoft Active Directory.
 		</p></dd><dt><span class="term">NetWare Bindery</span></dt><dd><p>
-<a class="indexterm" name="id2687877"></a>
-<a class="indexterm" name="id2687884"></a>
-<a class="indexterm" name="id2687891"></a>
-<a class="indexterm" name="id2687898"></a>
+<a class="indexterm" name="id446335"></a>
+<a class="indexterm" name="id446342"></a>
+<a class="indexterm" name="id446348"></a>
+<a class="indexterm" name="id446355"></a>
 		The <code class="filename">pam_ncp_auth.so</code> module allows authentication off any bindery-enabled
 		NetWare Core Protocol-based server.
 		</p></dd><dt><span class="term">SMB Password</span></dt><dd><p>
-<a class="indexterm" name="id2687923"></a>
-<a class="indexterm" name="id2687930"></a>
-<a class="indexterm" name="id2687937"></a>
+<a class="indexterm" name="id446379"></a>
+<a class="indexterm" name="id446386"></a>
+<a class="indexterm" name="id446392"></a>
 		This module, called <code class="filename">pam_smbpass.so</code>, allows user authentication of
 		the passdb backend that is configured in the Samba <code class="filename">smb.conf</code> file.
 		</p></dd><dt><span class="term">SMB Server</span></dt><dd><p>
-<a class="indexterm" name="id2687968"></a>
-<a class="indexterm" name="id2687975"></a>
+<a class="indexterm" name="id446422"></a>
+<a class="indexterm" name="id446429"></a>
 		The <code class="filename">pam_smb_auth.so</code> module is the original MS Windows networking authentication
 		tool. This module has been somewhat outdated by the Winbind module.
 		</p></dd><dt><span class="term">Winbind</span></dt><dd><p>
-<a class="indexterm" name="id2688000"></a>
-<a class="indexterm" name="id2688007"></a>
-<a class="indexterm" name="id2688014"></a>
-<a class="indexterm" name="id2688021"></a>
+<a class="indexterm" name="id446453"></a>
+<a class="indexterm" name="id446459"></a>
+<a class="indexterm" name="id446466"></a>
+<a class="indexterm" name="id446473"></a>
 		The <code class="filename">pam_winbind.so</code> module allows Samba to obtain authentication from any
 		MS Windows domain controller. It can just as easily be used to authenticate
 		users for access to any PAM-enabled application.
 		</p></dd><dt><span class="term">RADIUS</span></dt><dd><p>
-<a class="indexterm" name="id2688047"></a>
+<a class="indexterm" name="id446497"></a>
 		There is a PAM RADIUS (Remote Access Dial-In User Service) authentication
 		module. In most cases, administrators need to locate the source code
 		for this tool and compile and install it themselves. RADIUS protocols are
 		used by many routers and terminal servers.
 		</p></dd></dl></div><p>
-<a class="indexterm" name="id2688066"></a>
-<a class="indexterm" name="id2688073"></a>
+<a class="indexterm" name="id446514"></a>
+<a class="indexterm" name="id446521"></a>
 Of the modules listed, Samba provides the <code class="filename">pam_smbpasswd.so</code> and the
 <code class="filename">pam_winbind.so</code> modules alone.
 </p><p>
-<a class="indexterm" name="id2688097"></a>
-<a class="indexterm" name="id2688104"></a>
-<a class="indexterm" name="id2688111"></a>
-<a class="indexterm" name="id2688118"></a>
+<a class="indexterm" name="id446544"></a>
+<a class="indexterm" name="id446551"></a>
+<a class="indexterm" name="id446558"></a>
+<a class="indexterm" name="id446564"></a>
 Once configured, these permit a remarkable level of flexibility in the location and use
 of distributed Samba domain controllers that can provide wide-area network bandwidth,
 efficient authentication services for PAM-capable systems. In effect, this allows the
 deployment of centrally managed and maintained distributed authentication from a
 single-user account database.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2688133"></a>Technical Discussion</h2></div></div></div><p>
-<a class="indexterm" name="id2688141"></a>
-<a class="indexterm" name="id2688148"></a>
-<a class="indexterm" name="id2688155"></a>
-<a class="indexterm" name="id2688162"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id446577"></a>Technical Discussion</h2></div></div></div><p>
+<a class="indexterm" name="id446584"></a>
+<a class="indexterm" name="id446591"></a>
+<a class="indexterm" name="id446598"></a>
+<a class="indexterm" name="id446605"></a>
 PAM is designed to provide system administrators with a great deal of flexibility in
 configuration of the privilege-granting applications of their system. The local
 configuration of system security controlled by PAM is contained in one of two places:
 either the single system file <code class="filename">/etc/pam.conf</code> or the
 <code class="filename">/etc/pam.d/</code> directory.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2688187"></a>PAM Configuration Syntax</h3></div></div></div><p>
-<a class="indexterm" name="id2688195"></a>
-<a class="indexterm" name="id2688202"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id446627"></a>PAM Configuration Syntax</h3></div></div></div><p>
+<a class="indexterm" name="id446635"></a>
+<a class="indexterm" name="id446642"></a>
 In this section we discuss the correct syntax of and generic options respected by entries to these files.
 PAM-specific tokens in the configuration file are case insensitive. The module paths, however, are case
 sensitive, since they indicate a file's name and reflect the case dependence of typical file systems.  The
@@ -148,8 +148,8 @@
 of the system administrator: comments are preceded by a &#8220;<span class="quote">#</span>&#8221; and extend to the next end-of-line; also,
 module specification lines may be extended with a &#8220;<span class="quote">\</span>&#8221;-escaped newline. 
 </p><p>
-<a class="indexterm" name="id2688233"></a>
-<a class="indexterm" name="id2688240"></a>
+<a class="indexterm" name="id446668"></a>
+<a class="indexterm" name="id446674"></a>
 If the PAM authentication module (loadable link library file) is located in the
 default location, then it is not necessary to specify the path. In the case of
 Linux, the default location is <code class="filename">/lib/security</code>. If the module
@@ -157,12 +157,12 @@
 </p><pre class="programlisting">
 auth  required  /other_path/pam_strange_module.so
 </pre><p>
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2688266"></a>Anatomy of <code class="filename">/etc/pam.d</code> Entries</h4></div></div></div><p>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id446697"></a>Anatomy of <code class="filename">/etc/pam.d</code> Entries</h4></div></div></div><p>
 The remaining information in this subsection was taken from the documentation of the Linux-PAM
 project. For more information on PAM, see 
 <a class="ulink" href="http://ftp.kernel.org/pub/linux/libs/pam/" target="_top">the Official Linux-PAM home page</a>.
 </p><p>
-<a class="indexterm" name="id2688292"></a>
+<a class="indexterm" name="id446721"></a>
 A general configuration line of the <code class="filename">/etc/pam.conf</code> file has the following form:
 </p><pre class="programlisting">
 service-name   module-type   control-flag   module-path   args
@@ -172,9 +172,9 @@
 way of configuring Linux-PAM is via the contents of the <code class="filename">/etc/pam.d/</code> directory.
 Once we have explained the meaning of the tokens, we describe this method.
 </p><div class="variablelist"><dl><dt><span class="term">service-name</span></dt><dd><p>
-<a class="indexterm" name="id2688337"></a>
-<a class="indexterm" name="id2688344"></a>
-<a class="indexterm" name="id2688350"></a>
+<a class="indexterm" name="id446762"></a>
+<a class="indexterm" name="id446769"></a>
+<a class="indexterm" name="id446776"></a>
 		The name of the service associated with this entry. Frequently, the service-name is the conventional
 		name of the given application  for example, <code class="literal">ftpd</code>, <code class="literal">rlogind</code> and
 		<code class="literal">su</code>, and so on.
@@ -186,28 +186,28 @@
 		</p></dd><dt><span class="term">module-type</span></dt><dd><p>
 		One of (currently) four types of module. The four types are as follows:
 		</p><div class="itemizedlist"><ul type="disc"><li><p>
-<a class="indexterm" name="id2688418"></a>
-<a class="indexterm" name="id2688425"></a>
+<a class="indexterm" name="id446840"></a>
+<a class="indexterm" name="id446847"></a>
 			<em class="parameter"><code>auth:</code></em> This module type provides two aspects of authenticating the user.
 			It establishes that the user is who he or she claims to be by instructing the application
 			to prompt the user for a password or other means of identification. Second, the module can
 			grant group membership (independently of the <code class="filename">/etc/groups</code> file)
 			or other privileges through its credential-granting properties.
 			</p></li><li><p>
-<a class="indexterm" name="id2688454"></a>
-<a class="indexterm" name="id2688461"></a>
+<a class="indexterm" name="id446873"></a>
+<a class="indexterm" name="id446880"></a>
 			<em class="parameter"><code>account:</code></em> This module performs non-authentication-based account management.
 			It is typically used to restrict/permit access to a service based on the time of day, currently
 		 	available system resources (maximum number of users), or perhaps the location of the user 
 			login. For example, the &#8220;<span class="quote">root</span>&#8221; login may be permitted only on the console.
 			</p></li><li><p>
-<a class="indexterm" name="id2688488"></a>
+<a class="indexterm" name="id446903"></a>
 			<em class="parameter"><code>session:</code></em> Primarily, this module is associated with doing things that need
 			to be done for the user before and after he or she can be given service. Such things include logging
 			information concerning the opening and closing of some data exchange with a user, mounting
 			directories, and so on.
 			</p></li><li><p>
-<a class="indexterm" name="id2688510"></a>
+<a class="indexterm" name="id446922"></a>
 			<em class="parameter"><code>password:</code></em> This last module type is required for updating the authentication
 			token associated with the user. Typically, there is one module for each
 			&#8220;<span class="quote">challenge/response</span>&#8221; authentication <em class="parameter"><code>(auth)</code></em> module type.
@@ -221,10 +221,10 @@
 		<code class="filename">/etc/pam.conf</code> file; earlier entries are executed before later ones.
 		As of Linux-PAM v0.60, this control-flag can be defined with one of two syntaxes.
 		</p><p>
-<a class="indexterm" name="id2688574"></a>
-<a class="indexterm" name="id2688581"></a>
-<a class="indexterm" name="id2688588"></a>
-<a class="indexterm" name="id2688595"></a>
+<a class="indexterm" name="id446979"></a>
+<a class="indexterm" name="id446986"></a>
+<a class="indexterm" name="id446993"></a>
+<a class="indexterm" name="id446999"></a>
 		The simpler (and historical) syntax for the control-flag is a single keyword defined to indicate the
 		severity of concern associated with the success or failure of a specific module. There are four such
 		keywords: <em class="parameter"><code>required</code></em>, <em class="parameter"><code>requisite</code></em>,
@@ -350,13 +350,13 @@
 		Any line in one of the configuration files that is not formatted correctly will generally tend (erring on the
 		side of caution) to make the authentication process fail. A corresponding error is written to the system log files
 		with a call to syslog(3). 
-		</p></dd></dl></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2689193"></a>Example System Configurations</h3></div></div></div><p>
+		</p></dd></dl></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id447529"></a>Example System Configurations</h3></div></div></div><p>
 The following is an example <code class="filename">/etc/pam.d/login</code> configuration file. 
 This example had all options uncommented and is probably not usable 
 because it stacks many conditions before allowing successful completion 
 of the login process. Essentially, all conditions can be disabled 
 by commenting them out, except the calls to <code class="filename">pam_pwdb.so</code>.
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2689220"></a>PAM: Original Login Config</h4></div></div></div><p>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id447553"></a>PAM: Original Login Config</h4></div></div></div><p>
 	</p><pre class="programlisting">
 #%PAM-1.0
 # The PAM configuration file for the &#8220;<span class="quote">login</span>&#8221; service
@@ -373,7 +373,7 @@
 # password   required    pam_cracklib.so retry=3
 password     required    pam_pwdb.so shadow md5
 </pre><p>
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2689248"></a>PAM: Login Using <code class="filename">pam_smbpass</code></h4></div></div></div><p>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id447576"></a>PAM: Login Using <code class="filename">pam_smbpass</code></h4></div></div></div><p>
 PAM allows use of replaceable modules. Those available on a sample system include:
 </p><p><code class="prompt">$</code><strong class="userinput"><code>/bin/ls /lib/security</code></strong>
 </p><pre class="programlisting">
@@ -456,7 +456,7 @@
 on the basis that it allows for easier administration. As with all issues in 
 life, though, every decision has trade-offs, so you may want to examine the 
 PAM documentation for further helpful information.
-</p></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2689500"></a><code class="filename">smb.conf</code> PAM Configuration</h3></div></div></div><p>
+</p></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id447799"></a><code class="filename">smb.conf</code> PAM Configuration</h3></div></div></div><p>
 There is an option in <code class="filename">smb.conf</code> called <a class="link" href="smb.conf.5.html#OBEYPAMRESTRICTIONS">obey pam restrictions</a>.
 The following is from the online help for this option in SWAT:
 </p><div class="blockquote"><blockquote class="blockquote"><p>
@@ -466,7 +466,7 @@
 ignores PAM for authentication in the case of <a class="link" href="smb.conf.5.html#ENCRYPTPASSWORDS">encrypt passwords = yes</a>. 
 The reason is that PAM modules cannot support the challenge/response authentication mechanism needed in the presence of SMB 
 password encryption. 
-</p><p>Default: <a class="link" href="smb.conf.5.html#OBEYPAMRESTRICTIONS">obey pam restrictions = no</a></p></blockquote></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2689580"></a>Remote CIFS Authentication Using <code class="filename">winbindd.so</code></h3></div></div></div><p>
+</p><p>Default: <a class="link" href="smb.conf.5.html#OBEYPAMRESTRICTIONS">obey pam restrictions = no</a></p></blockquote></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id447870"></a>Remote CIFS Authentication Using <code class="filename">winbindd.so</code></h3></div></div></div><p>
 All operating systems depend on the provision of user credentials acceptable to the platform.
 UNIX requires the provision of a user identifier (UID) as well as a group identifier (GID).
 These are both simple integer numbers that are obtained from a password backend such
@@ -493,7 +493,7 @@
 The RID to UNIX ID database is the only location where the user and group  mappings are 
 stored by <code class="literal">winbindd</code>. If this file is deleted or corrupted, there is no way for <code class="literal">winbindd</code>
 to determine which user and group IDs correspond to Windows NT user and group RIDs.
-</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2689683"></a>Password Synchronization Using <code class="filename">pam_smbpass.so</code></h3></div></div></div><p>
+</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id447960"></a>Password Synchronization Using <code class="filename">pam_smbpass.so</code></h3></div></div></div><p>
 <code class="filename">pam_smbpass</code> is a PAM module that can be used on conforming systems to
 keep the <code class="filename">smbpasswd</code> (Samba password) database in sync with the UNIX
 password file. PAM is an API supported
@@ -511,7 +511,7 @@
 The following are examples of the use of <code class="filename">pam_smbpass.so</code> in the format of the Linux
 <code class="filename">/etc/pam.d/</code> files structure. Those wishing to implement this
 tool on other platforms will need to adapt this appropriately.
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2689902"></a>Password Synchronization Configuration</h4></div></div></div><p>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id448165"></a>Password Synchronization Configuration</h4></div></div></div><p>
 The following is a sample PAM configuration that shows the use of pam_smbpass to make
 sure <code class="filename">private/smbpasswd</code> is kept in sync when <code class="filename">/etc/passwd (/etc/shadow)</code>
 is changed. It is useful when an expired password might be changed by an
@@ -528,7 +528,7 @@
 password   requisite    pam_unix.so shadow md5 use_authtok try_first_pass
 password   required     pam_smbpass.so nullok use_authtok try_first_pass
 session    required     pam_unix.so
-</pre></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2689948"></a>Password Migration Configuration</h4></div></div></div><p>
+</pre></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id448205"></a>Password Migration Configuration</h4></div></div></div><p>
 The following PAM configuration shows the use of <code class="filename">pam_smbpass</code> to migrate
 from plaintext to encrypted passwords for Samba. Unlike other methods,
 this can be used for users who have never connected to Samba shares:
@@ -548,7 +548,7 @@
 password   requisite   pam_unix.so shadow md5 use_authtok try_first_pass
 password   optional    pam_smbpass.so nullok use_authtok try_first_pass
 session    required    pam_unix.so
-</pre></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2689996"></a>Mature Password Configuration</h4></div></div></div><p>
+</pre></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id448246"></a>Mature Password Configuration</h4></div></div></div><p>
 The following is a sample PAM configuration for a mature <code class="filename">smbpasswd</code> installation.
 <code class="filename">private/smbpasswd</code> is fully populated, and we consider it an error if
 the SMB password does not exist or does not match the UNIX password.
@@ -564,7 +564,7 @@
 password   requisite    pam_unix.so shadow md5 use_authtok try_first_pass
 password   required     pam_smbpass.so use_authtok use_first_pass
 session    required     pam_unix.so
-</pre></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2690035"></a>Kerberos Password Integration Configuration</h4></div></div></div><p>
+</pre></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id448281"></a>Kerberos Password Integration Configuration</h4></div></div></div><p>
 The following is a sample PAM configuration that shows <em class="parameter"><code>pam_smbpass</code></em> used together with
 <em class="parameter"><code>pam_krb5</code></em>. This could be useful on a Samba PDC that is also a member of
 a Kerberos realm.
@@ -581,10 +581,10 @@
 password   optional    pam_smbpass.so nullok use_authtok try_first_pass
 password   required    pam_krb5.so use_authtok try_first_pass
 session    required    pam_krb5.so
-</pre></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2690083"></a>Common Errors</h2></div></div></div><p>
+</pre></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id448317"></a>Common Errors</h2></div></div></div><p>
 PAM can be fickle and sensitive to configuration glitches. Here we look at a few cases from
 the Samba mailing list.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2690094"></a>pam_winbind Problem</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id448327"></a>pam_winbind Problem</h3></div></div></div><p>
 	A user reported, <span class="emphasis"><em>I have the following PAM configuration</em></span>:
 	</p><p>
 </p><pre class="programlisting">
@@ -608,7 +608,7 @@
 	<code class="filename">/etc/pam.d/system-auth</code> and copy only what you need from it into your
 	<code class="filename">/etc/pam.d/login</code> file. Alternatively, if you want all services to use
 	Winbind, you can put the Winbind-specific stuff in <code class="filename">/etc/pam.d/system-auth</code>.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2690192"></a>Winbind Is Not Resolving Users and Groups</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id448416"></a>Winbind Is Not Resolving Users and Groups</h3></div></div></div><p>
 	&#8220;<span class="quote">
 	My <code class="filename">smb.conf</code> file is correctly configured. I have specified 
 	<a class="link" href="smb.conf.5.html#IDMAPUID">idmap uid = 12000</a> 

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/passdb.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/passdb.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/passdb.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,18 +1,18 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 11. Account Information Databases</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="NetworkBrowsing.html" title="Chapter 10. Network Browsing"><link rel="next" href="groupmapping.html" title="Chapter 12. Group Mapping: MS Windows and UNIX"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 11. Account Information Databases</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="NetworkBrowsing.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="groupmapping.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="passdb"></a>Chapter 11. Account Information Databases</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Gerald</span> <span class="othername">(Jerry)</span> <span class="surname">Carter</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jerry at samba.org">jerry at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jeremy</span> <span class="surname">Allison</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jra at samba.org">jra at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Guenther</span> <span class="surname">Deschner</span></h3><span class="contrib">LDAP updates</span> <div class="affiliation"><span class="orgname">SuSE<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:gd at suse.de">gd at suse.de</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Olivier (lem)</span> <span class="surname">Lemaire</span></h3><div class="affiliation"><span class="orgname">IDEALX<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:olem at IDEALX.org">olem at IDEALX.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">May 24, 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="passdb.html#id2609320">Features and Benefits</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id2609356">Backward Compatibility Account Storage Systems</a></span></dt><dt><span class="sect2"><a href="passdb.html#id2609540">New Account Storage Systems</a></span></dt></dl></dd><dt><span class="sect1"><a href="passdb.html#passdbtech">Technical Information</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id2610108">Important Notes About Security</a></span></dt><dt><span class="sect2"><a href="passdb.html#id2610628">Mapping User Identifiers between MS Windows and UNIX</a></span></dt><dt><span class="sect2"><a href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a></span></dt><dt><span class="sect2"><a href="passdb.html#id2611176">Comments Regarding LDAP</a></span></dt><dt><span class="sect2"><a href="passdb.html#id2611596">LDAP Directories and Windows Computer Accounts</a></span></dt></dl></dd><dt><span class="sect1"><a href="passdb.html#acctmgmttools">Account Management Tools</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id2612037">The <code class="literal">smbpasswd</code> Tool</a></span></dt><dt><span class="sect2"><a href="passdb.html#pdbeditthing">The <code class="literal">pdbedit</code> Tool</a></span></dt></dl></dd><dt><span class="sect1"><a href="passdb.html#id2614558">Password Backends</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id2614612">Plaintext</a></span></dt><dt><span class="sect2"><a href="passdb.html#id2614688">smbpasswd: Encrypted Password Database</a></span></dt><dt><span class="sect2"><a href="passdb.html#id2614953">tdbsam</a></span></dt><dt><span class="sect2"><a href="passdb.html#id2615111">ldapsam</a></span></dt></dl></dd><dt><span class="sect1"><a href="passdb.html#id2617645">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id2617650">Users Cannot Logon</a></span></dt><dt><span class="sect2"><a href="passdb.html#id2617688">Configuration of <em class="parameter"><code>auth methods</code></em></a></span></dt></dl></dd></dl></div><p>
-<a class="indexterm" name="id2609123"></a>
-<a class="indexterm" name="id2609130"></a>
-<a class="indexterm" name="id2609136"></a>
-<a class="indexterm" name="id2609143"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 11. Account Information Databases</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="NetworkBrowsing.html" title="Chapter 10. Network Browsing"><link rel="next" href="groupmapping.html" title="Chapter 12. Group Mapping: MS Windows and UNIX"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 11. Account Information Databases</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="NetworkBrowsing.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="groupmapping.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="passdb"></a>Chapter 11. Account Information Databases</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Gerald</span> <span class="othername">(Jerry)</span> <span class="surname">Carter</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jerry at samba.org">jerry at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jeremy</span> <span class="surname">Allison</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jra at samba.org">jra at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Guenther</span> <span class="surname">Deschner</span></h3><span class="contrib">LDAP updates</span> <div class="affiliation"><span class="orgname">SuSE<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:gd at suse.de">gd at suse.de</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Olivier (lem)</span> <span class="surname">Lemaire</span></h3><div class="affiliation"><span class="orgname">IDEALX<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:olem at IDEALX.org">olem at IDEALX.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">May 24, 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="passdb.html#id374429">Features and Benefits</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id374464">Backward Compatibility Account Storage Systems</a></span></dt><dt><span class="sect2"><a href="passdb.html#id374634">New Account Storage Systems</a></span></dt></dl></dd><dt><span class="sect1"><a href="passdb.html#passdbtech">Technical Information</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id375167">Important Notes About Security</a></span></dt><dt><span class="sect2"><a href="passdb.html#id375648">Mapping User Identifiers between MS Windows and UNIX</a></span></dt><dt><span class="sect2"><a href="passdb.html#idmapbackend">Mapping Common UIDs/GIDs on Distributed Machines</a></span></dt><dt><span class="sect2"><a href="passdb.html#id376168">Comments Regarding LDAP</a></span></dt><dt><span class="sect2"><a href="passdb.html#id376546">LDAP Directories and Windows Computer Accounts</a></span></dt></dl></dd><dt><span class="sect1"><a href="passdb.html#acctmgmttools">Account Management Tools</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id376958">The <code class="literal">smbpasswd</code> Tool</a></span></dt><dt><span class="sect2"><a href="passdb.html#pdbeditthing">The <code class="literal">pdbedit</code> Tool</a></span></dt></dl></dd><dt><span class="sect1"><a href="passdb.html#id379310">Password Backends</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id379357">Plaintext</a></span></dt><dt><span class="sect2"><a href="passdb.html#id379428">smbpasswd: Encrypted Password Database</a></span></dt><dt><span class="sect2"><a href="passdb.html#id379677">tdbsam</a></span></dt><dt><span class="sect2"><a href="passdb.html#id379822">ldapsam</a></span></dt></dl></dd><dt><span class="sect1"><a href="passdb.html#id382162">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="passdb.html#id382168">Users Cannot Logon</a></span></dt><dt><span class="sect2"><a href="passdb.html#id382202">Configuration of <em class="parameter"><code>auth methods</code></em></a></span></dt></dl></dd></dl></div><p>
+<a class="indexterm" name="id374245"></a>
+<a class="indexterm" name="id374251"></a>
+<a class="indexterm" name="id374258"></a>
+<a class="indexterm" name="id374265"></a>
 Early releases of Samba-3 implemented new capability to work concurrently with multiple account backends. This
 capability was removed beginning with release of Samba 3.0.23. Commencing with Samba 3.0.23 it is possible to
 work with only one specified passwd backend.
 </p><p>
-<a class="indexterm" name="id2609158"></a>
-<a class="indexterm" name="id2609164"></a>
-<a class="indexterm" name="id2609171"></a>
-<a class="indexterm" name="id2609178"></a>
-<a class="indexterm" name="id2609185"></a>
-<a class="indexterm" name="id2609192"></a>
+<a class="indexterm" name="id374277"></a>
+<a class="indexterm" name="id374284"></a>
+<a class="indexterm" name="id374291"></a>
+<a class="indexterm" name="id374298"></a>
+<a class="indexterm" name="id374304"></a>
+<a class="indexterm" name="id374311"></a>
 The three passdb backends that are fully maintained (actively supported) by the Samba Team are:
 <code class="literal">smbpasswd</code> (being obsoleted), <code class="literal">tdbsam</code> (a tdb-based binary file format),
 and <code class="literal">ldapsam</code> (LDAP directory).  Of these, only the <code class="literal">ldapsam</code> backend
@@ -23,30 +23,30 @@
 obsolete (smbpasswd). It is recommended to use the <code class="literal">tdbsam</code> method for all simple systems. Use
 <code class="literal">ldapsam</code> for larger and more complex networks.
 </p><p>
-<a class="indexterm" name="id2609262"></a>
-<a class="indexterm" name="id2609269"></a>
-<a class="indexterm" name="id2609276"></a>
-<a class="indexterm" name="id2609283"></a>
-<a class="indexterm" name="id2609290"></a>
-<a class="indexterm" name="id2609297"></a>
-<a class="indexterm" name="id2609304"></a>
+<a class="indexterm" name="id374376"></a>
+<a class="indexterm" name="id374383"></a>
+<a class="indexterm" name="id374390"></a>
+<a class="indexterm" name="id374397"></a>
+<a class="indexterm" name="id374404"></a>
+<a class="indexterm" name="id374410"></a>
+<a class="indexterm" name="id374417"></a>
 In a strict and literal sense, the passdb backends are account storage mechanisms (or methods) alone. The choice
 of terminology can be misleading, however we are stuck with this choice of wording. This chapter documents the
 nature of the account storage system with a focus on user and trust accounts. Trust accounts have two forms,
 machine trust accounts (computer accounts) and interdomain trust accounts. These are all treated as user-like
 entities.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2609320"></a>Features and Benefits</h2></div></div></div><p>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id374429"></a>Features and Benefits</h2></div></div></div><p>
 Samba-3 provides for complete backward compatibility with Samba-2.2.x functionality
 as follows:
-<a class="indexterm" name="id2609330"></a>
-<a class="indexterm" name="id2609339"></a>
-<a class="indexterm" name="id2609348"></a>
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2609356"></a>Backward Compatibility Account Storage Systems</h3></div></div></div><div class="variablelist"><dl><dt><span class="term">Plaintext</span></dt><dd><p>
-<a class="indexterm" name="id2609374"></a>
-<a class="indexterm" name="id2609380"></a>
-<a class="indexterm" name="id2609387"></a>
-<a class="indexterm" name="id2609394"></a>
-<a class="indexterm" name="id2609401"></a>
+<a class="indexterm" name="id374438"></a>
+<a class="indexterm" name="id374447"></a>
+<a class="indexterm" name="id374456"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id374464"></a>Backward Compatibility Account Storage Systems</h3></div></div></div><div class="variablelist"><dl><dt><span class="term">Plaintext</span></dt><dd><p>
+<a class="indexterm" name="id374481"></a>
+<a class="indexterm" name="id374488"></a>
+<a class="indexterm" name="id374495"></a>
+<a class="indexterm" name="id374501"></a>
+<a class="indexterm" name="id374508"></a>
 			This isn't really a backend at all, but is listed here for simplicity.  Samba can be configured to pass
 			plaintext authentication requests to the traditional UNIX/Linux <code class="filename">/etc/passwd</code> and
 			<code class="filename">/etc/shadow</code>-style subsystems.  On systems that have Pluggable Authentication Modules
@@ -54,10 +54,10 @@
 			protocol limitations imposed by MS Windows clients apply likewise. Please refer to <a class="link" href="passdb.html#passdbtech" title="Technical Information">Technical Information</a>, for more information regarding the limitations of plaintext
 			password usage.
 			</p></dd><dt><span class="term">smbpasswd</span></dt><dd><p>
-<a class="indexterm" name="id2609448"></a>
-<a class="indexterm" name="id2609455"></a>
-<a class="indexterm" name="id2609462"></a>
-<a class="indexterm" name="id2609469"></a>
+<a class="indexterm" name="id374551"></a>
+<a class="indexterm" name="id374558"></a>
+<a class="indexterm" name="id374565"></a>
+<a class="indexterm" name="id374572"></a>
 			This option allows continued use of the <code class="filename">smbpasswd</code>
 			file that maintains a plain ASCII (text) layout that includes the MS Windows
 			LanMan and NT-encrypted passwords as well as a field that stores some
@@ -69,32 +69,32 @@
 			This backend should be used only for backward compatibility with older
 			versions of Samba. It may be deprecated in future releases.
 			</p></dd><dt><span class="term">ldapsam_compat (Samba-2.2 LDAP Compatibility)</span></dt><dd><p>
-<a class="indexterm" name="id2609508"></a>
-<a class="indexterm" name="id2609515"></a>
-<a class="indexterm" name="id2609522"></a>
+<a class="indexterm" name="id374605"></a>
+<a class="indexterm" name="id374612"></a>
+<a class="indexterm" name="id374619"></a>
 			There is a password backend option that allows continued operation with
 			an existing OpenLDAP backend that uses the Samba-2.2.x LDAP schema extension.
 			This option is provided primarily as a migration tool, although there is
 			no reason to force migration at this time. This tool will eventually
 			be deprecated.
-			</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2609540"></a>New Account Storage Systems</h3></div></div></div><p>
+			</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id374634"></a>New Account Storage Systems</h3></div></div></div><p>
 Samba-3 introduces a number of new password backend capabilities.
-<a class="indexterm" name="id2609549"></a>
-<a class="indexterm" name="id2609558"></a>
+<a class="indexterm" name="id374642"></a>
+<a class="indexterm" name="id374651"></a>
 </p><div class="variablelist"><dl><dt><span class="term">tdbsam</span></dt><dd><p>
-<a class="indexterm" name="id2609580"></a>
-<a class="indexterm" name="id2609587"></a>
-<a class="indexterm" name="id2609593"></a>
+<a class="indexterm" name="id374672"></a>
+<a class="indexterm" name="id374679"></a>
+<a class="indexterm" name="id374686"></a>
 			This backend provides a rich database backend for local servers. This
 			backend is not suitable for multiple domain controllers (i.e., PDC + one
 			or more BDC) installations.
 			</p><p>
-<a class="indexterm" name="id2609606"></a>
-<a class="indexterm" name="id2609613"></a>
-<a class="indexterm" name="id2609620"></a>
-<a class="indexterm" name="id2609627"></a>
-<a class="indexterm" name="id2609634"></a>
-<a class="indexterm" name="id2609641"></a>
+<a class="indexterm" name="id374697"></a>
+<a class="indexterm" name="id374704"></a>
+<a class="indexterm" name="id374711"></a>
+<a class="indexterm" name="id374717"></a>
+<a class="indexterm" name="id374724"></a>
+<a class="indexterm" name="id374731"></a>
 			The <span class="emphasis"><em>tdbsam</em></span> password backend stores the old <span class="emphasis"><em>
 			smbpasswd</em></span> information plus the extended MS Windows NT/200x
 			SAM information into a binary format TDB (trivial database) file.
@@ -102,63 +102,63 @@
 			to implement the same account and system access controls that are possible
 			with MS Windows NT4/200x-based systems.
 			</p><p>
-<a class="indexterm" name="id2609664"></a>
-<a class="indexterm" name="id2609671"></a>
-<a class="indexterm" name="id2609678"></a>
+<a class="indexterm" name="id374751"></a>
+<a class="indexterm" name="id374758"></a>
+<a class="indexterm" name="id374765"></a>
 			The inclusion of the <span class="emphasis"><em>tdbsam</em></span> capability is a direct
 			response to user requests to allow simple site operation without the overhead
 			of the complexities of running OpenLDAP. It is recommended to use this only
 			for sites that have fewer than 250 users. For larger sites or implementations,
 			the use of OpenLDAP or of Active Directory integration is strongly recommended.
 			</p></dd><dt><span class="term">ldapsam</span></dt><dd><p>
-<a class="indexterm" name="id2609706"></a>
-<a class="indexterm" name="id2609714"></a>
+<a class="indexterm" name="id374790"></a>
+<a class="indexterm" name="id374797"></a>
 			This provides a rich directory backend for distributed account installation.
 			</p><p>
-<a class="indexterm" name="id2609725"></a>
-<a class="indexterm" name="id2609732"></a>
-<a class="indexterm" name="id2609739"></a>
-<a class="indexterm" name="id2609746"></a>
-<a class="indexterm" name="id2609753"></a>
+<a class="indexterm" name="id374808"></a>
+<a class="indexterm" name="id374815"></a>
+<a class="indexterm" name="id374822"></a>
+<a class="indexterm" name="id374828"></a>
+<a class="indexterm" name="id374835"></a>
 			Samba-3 has a new and extended LDAP implementation that requires configuration
 			of OpenLDAP with a new format Samba schema. The new format schema file is
 			included in the <code class="filename">examples/LDAP</code> directory of the Samba distribution.
 			</p><p>
-<a class="indexterm" name="id2609775"></a>
-<a class="indexterm" name="id2609782"></a>
-<a class="indexterm" name="id2609789"></a>
-<a class="indexterm" name="id2609796"></a>
-<a class="indexterm" name="id2609803"></a>
+<a class="indexterm" name="id374855"></a>
+<a class="indexterm" name="id374862"></a>
+<a class="indexterm" name="id374869"></a>
+<a class="indexterm" name="id374876"></a>
+<a class="indexterm" name="id374883"></a>
 			The new LDAP implementation significantly expands the control abilities that
 			were possible with prior versions of Samba. It is now possible to specify
 			&#8220;<span class="quote">per-user</span>&#8221; profile settings, home directories, account access controls, and
 			much more. Corporate sites will see that the Samba Team has listened to their
 			requests both for capability and greater scalability.
 			</p></dd></dl></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="passdbtech"></a>Technical Information</h2></div></div></div><p>
-<a class="indexterm" name="id2609837"></a>
-<a class="indexterm" name="id2609844"></a>
+<a class="indexterm" name="id374914"></a>
+<a class="indexterm" name="id374921"></a>
 	Old Windows clients send plaintext passwords over the wire. Samba can check these
 	passwords by encrypting them and comparing them to the hash stored in the UNIX user database.
 	</p><p>
-<a class="indexterm" name="id2609857"></a>
-<a class="indexterm" name="id2609864"></a>
-<a class="indexterm" name="id2609871"></a>
-<a class="indexterm" name="id2609878"></a>
+<a class="indexterm" name="id374932"></a>
+<a class="indexterm" name="id374939"></a>
+<a class="indexterm" name="id374946"></a>
+<a class="indexterm" name="id374953"></a>
 	Newer Windows clients send encrypted passwords (LanMan and NT hashes) instead of plaintext passwords over
 	the wire. The newest clients will send only encrypted passwords and refuse to send plaintext passwords unless
 	their registry is tweaked.
 	</p><p>
-<a class="indexterm" name="id2609892"></a>
-<a class="indexterm" name="id2609899"></a>
+<a class="indexterm" name="id374965"></a>
+<a class="indexterm" name="id374972"></a>
 	Many people ask why Samba cannot simply use the UNIX password database. Windows requires
 	passwords that are encrypted in its own format.  The UNIX passwords can't be converted to
 	UNIX-style encrypted passwords. Because of that, you can't use the standard UNIX user
 	database, and you have to store the LanMan and NT hashes somewhere else.
 	</p><p>
-<a class="indexterm" name="id2609915"></a>
-<a class="indexterm" name="id2609922"></a>
-<a class="indexterm" name="id2609929"></a>
-<a class="indexterm" name="id2609936"></a>
+<a class="indexterm" name="id374985"></a>
+<a class="indexterm" name="id374992"></a>
+<a class="indexterm" name="id374999"></a>
+<a class="indexterm" name="id375006"></a>
 	In addition to differently encrypted passwords, Windows also stores certain data for each
 	user that is not stored in a UNIX user database: for example, workstations the user may logon from,
 	the location where the user's profile is stored, and so on. Samba retrieves and stores this
@@ -166,18 +166,18 @@
 	tdbsam, and plain text file. For more information, see the man page for <code class="filename">smb.conf</code> regarding the
 	<a class="link" href="smb.conf.5.html#PASSDBBACKEND">passdb backend</a> parameter.
 	</p><div class="figure"><a name="idmap-sid2uid"></a><p class="title"><b>Figure 11.1. IDMAP: Resolution of SIDs to UIDs.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/idmap-sid2uid.png" width="216" alt="IDMAP: Resolution of SIDs to UIDs."></div></div></div><br class="figure-break"><p>
-	<a class="indexterm" name="id2610026"></a>
-<a class="indexterm" name="id2610032"></a>
-<a class="indexterm" name="id2610039"></a>
+	<a class="indexterm" name="id375087"></a>
+<a class="indexterm" name="id375094"></a>
+<a class="indexterm" name="id375100"></a>
 	The resolution of SIDs to UIDs is fundamental to correct operation of Samba. In both cases shown, if winbindd
 	is not running or cannot be contacted, then only local SID/UID resolution is possible. See <a class="link" href="passdb.html#idmap-sid2uid" title="Figure 11.1. IDMAP: Resolution of SIDs to UIDs.">resolution of SIDs to UIDs</a> and <a class="link" href="passdb.html#idmap-uid2sid" title="Figure 11.2. IDMAP: Resolution of UIDs to SIDs.">resolution of UIDs
 	to SIDs</a> diagrams.
-	</p><div class="figure"><a name="idmap-uid2sid"></a><p class="title"><b>Figure 11.2. IDMAP: Resolution of UIDs to SIDs.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/idmap-uid2sid.png" width="270" alt="IDMAP: Resolution of UIDs to SIDs."></div></div></div><br class="figure-break"><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2610108"></a>Important Notes About Security</h3></div></div></div><p>
-<a class="indexterm" name="id2610116"></a>
-<a class="indexterm" name="id2610123"></a>
-<a class="indexterm" name="id2610130"></a>
-<a class="indexterm" name="id2610137"></a>
-<a class="indexterm" name="id2610144"></a>
+	</p><div class="figure"><a name="idmap-uid2sid"></a><p class="title"><b>Figure 11.2. IDMAP: Resolution of UIDs to SIDs.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/idmap-uid2sid.png" width="270" alt="IDMAP: Resolution of UIDs to SIDs."></div></div></div><br class="figure-break"><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id375167"></a>Important Notes About Security</h3></div></div></div><p>
+<a class="indexterm" name="id375175"></a>
+<a class="indexterm" name="id375182"></a>
+<a class="indexterm" name="id375188"></a>
+<a class="indexterm" name="id375195"></a>
+<a class="indexterm" name="id375202"></a>
 		The UNIX and SMB password encryption techniques seem similar on the surface. This
 		similarity is, however, only skin deep. The UNIX scheme typically sends clear-text
 		passwords over the network when logging in. This is bad. The SMB encryption scheme
@@ -191,217 +191,217 @@
 		passwords of all your users. Its contents must be kept secret, and the file should
 		be protected accordingly.
 		</p><p>
-<a class="indexterm" name="id2610174"></a>
-<a class="indexterm" name="id2610180"></a>
-<a class="indexterm" name="id2610187"></a>
+<a class="indexterm" name="id375224"></a>
+<a class="indexterm" name="id375230"></a>
+<a class="indexterm" name="id375237"></a>
 		Ideally, we would like a password scheme that involves neither plaintext passwords
 		on the network nor plaintext passwords on disk. Unfortunately, this is not available because Samba is stuck with
 		having to be compatible with other SMB systems (Windows NT, Windows for Workgroups, Windows 9x/Me).
 		</p><p>
-<a class="indexterm" name="id2610202"></a>
-<a class="indexterm" name="id2610209"></a>
+<a class="indexterm" name="id375250"></a>
+<a class="indexterm" name="id375257"></a>
 		Windows NT 4.0 Service Pack 3 changed the default setting so plaintext passwords
 		are disabled from being sent over the wire. This mandates either the use of encrypted
 		password support or editing the Windows NT registry to re-enable plaintext passwords.
 		</p><p>
-<a class="indexterm" name="id2610224"></a>
-<a class="indexterm" name="id2610230"></a>
+<a class="indexterm" name="id375269"></a>
+<a class="indexterm" name="id375276"></a>
 		The following versions of Microsoft Windows do not support full domain security protocols,
 		although they may log onto a domain environment:
 		</p><div class="itemizedlist"><ul type="disc"><li><p>MS DOS Network client 3.0 with the basic network redirector installed.</p></li><li><p>Windows 95 with the network redirector update installed.</p></li><li><p>Windows 98 [Second Edition].</p></li><li><p>Windows Me.</p></li></ul></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2610269"></a>
-<a class="indexterm" name="id2610276"></a>
-<a class="indexterm" name="id2610283"></a>
+<a class="indexterm" name="id375311"></a>
+<a class="indexterm" name="id375318"></a>
+<a class="indexterm" name="id375325"></a>
  		MS Windows XP Home does not have facilities to become a domain member, and it cannot participate in domain logons.
 		</p></div><p>
 		The following versions of MS Windows fully support domain security protocols.
 		</p><div class="itemizedlist"><ul type="disc"><li><p>Windows NT 3.5x.</p></li><li><p>Windows NT 4.0.</p></li><li><p>Windows 2000 Professional.</p></li><li><p>Windows 200x Server/Advanced Server.</p></li><li><p>Windows XP Professional.</p></li></ul></div><p>
-<a class="indexterm" name="id2610328"></a>
-<a class="indexterm" name="id2610335"></a>
-<a class="indexterm" name="id2610342"></a>
-<a class="indexterm" name="id2610349"></a>
-<a class="indexterm" name="id2610356"></a>
-<a class="indexterm" name="id2610362"></a>
+<a class="indexterm" name="id375368"></a>
+<a class="indexterm" name="id375374"></a>
+<a class="indexterm" name="id375381"></a>
+<a class="indexterm" name="id375388"></a>
+<a class="indexterm" name="id375395"></a>
+<a class="indexterm" name="id375402"></a>
 		All current releases of Microsoft SMB/CIFS clients support authentication via the
 		SMB challenge/response mechanism described here. Enabling clear-text authentication
 		does not disable the ability of the client to participate in encrypted authentication.
 		Instead, it allows the client to negotiate either plaintext or encrypted password
 		handling.
 		</p><p>
-<a class="indexterm" name="id2610378"></a>
-<a class="indexterm" name="id2610386"></a>
-<a class="indexterm" name="id2610392"></a>
-<a class="indexterm" name="id2610399"></a>
-<a class="indexterm" name="id2610406"></a>
+<a class="indexterm" name="id375415"></a>
+<a class="indexterm" name="id375422"></a>
+<a class="indexterm" name="id375428"></a>
+<a class="indexterm" name="id375435"></a>
+<a class="indexterm" name="id375442"></a>
 		MS Windows clients will cache the encrypted password alone. Where plaintext passwords
 		are re-enabled through the appropriate registry change, the plaintext password is never
 		cached. This means that in the event that a network connections should become disconnected
 		(broken), only the cached (encrypted) password will be sent to the resource server to
 		effect an auto-reconnect. If the resource server does not support encrypted passwords, the
 		auto-reconnect will fail. Use of encrypted passwords is strongly advised.
-		</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2610423"></a>Advantages of Encrypted Passwords</h4></div></div></div><div class="itemizedlist"><ul type="disc"><li><p>
-<a class="indexterm" name="id2610435"></a>
-<a class="indexterm" name="id2610442"></a>
-<a class="indexterm" name="id2610449"></a>
+		</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id375454"></a>Advantages of Encrypted Passwords</h4></div></div></div><div class="itemizedlist"><ul type="disc"><li><p>
+<a class="indexterm" name="id375466"></a>
+<a class="indexterm" name="id375472"></a>
+<a class="indexterm" name="id375479"></a>
 				Plaintext passwords are not passed across the network. Someone using a network sniffer
 				cannot just record passwords going to the SMB server.
 				</p></li><li><p>
-<a class="indexterm" name="id2610462"></a>
-<a class="indexterm" name="id2610469"></a>
-<a class="indexterm" name="id2610476"></a>
+<a class="indexterm" name="id375492"></a>
+<a class="indexterm" name="id375499"></a>
+<a class="indexterm" name="id375505"></a>
 				Plaintext passwords are not stored anywhere in memory or on disk.
 				</p></li><li><p>
-<a class="indexterm" name="id2610488"></a>
-<a class="indexterm" name="id2610495"></a>
-<a class="indexterm" name="id2610502"></a>
-<a class="indexterm" name="id2610509"></a>
+<a class="indexterm" name="id375517"></a>
+<a class="indexterm" name="id375524"></a>
+<a class="indexterm" name="id375531"></a>
+<a class="indexterm" name="id375538"></a>
 				Windows NT does not like talking to a server that does not support encrypted passwords. It will refuse to
 				browse the server if the server is also in user-level security mode. It will insist on prompting the user for
 				the password on each connection, which is very annoying. The only thing you can do to stop this is to use SMB
 				encryption.
 				</p></li><li><p>
-<a class="indexterm" name="id2610527"></a>
-<a class="indexterm" name="id2610534"></a>
+<a class="indexterm" name="id375552"></a>
+<a class="indexterm" name="id375559"></a>
 				Encrypted password support allows automatic share (resource) reconnects.
 				</p></li><li><p>
-<a class="indexterm" name="id2610546"></a>
-<a class="indexterm" name="id2610553"></a>
+<a class="indexterm" name="id375570"></a>
+<a class="indexterm" name="id375577"></a>
 				Encrypted passwords are essential for PDC/BDC operation.
-				</p></li></ul></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2610564"></a>Advantages of Non-Encrypted Passwords</h4></div></div></div><div class="itemizedlist"><ul type="disc"><li><p>
-<a class="indexterm" name="id2610575"></a>
+				</p></li></ul></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id375587"></a>Advantages of Non-Encrypted Passwords</h4></div></div></div><div class="itemizedlist"><ul type="disc"><li><p>
+<a class="indexterm" name="id375598"></a>
 				Plaintext passwords are not kept on disk and are not cached in memory.
 				</p></li><li><p>
-<a class="indexterm" name="id2610588"></a>
-<a class="indexterm" name="id2610595"></a>
+<a class="indexterm" name="id375610"></a>
+<a class="indexterm" name="id375617"></a>
 				Plaintext passwords use the same password file as other UNIX services, such as Login and FTP.
 				</p></li><li><p>
-<a class="indexterm" name="id2610607"></a>
-<a class="indexterm" name="id2610614"></a>
+<a class="indexterm" name="id375629"></a>
+<a class="indexterm" name="id375636"></a>
 				Use of other services (such as Telnet and FTP) that send plaintext passwords over
 				the network makes sending them for SMB not such a big deal.
-				</p></li></ul></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2610628"></a>Mapping User Identifiers between MS Windows and UNIX</h3></div></div></div><p>
-<a class="indexterm" name="id2610636"></a>
-<a class="indexterm" name="id2610643"></a>
-<a class="indexterm" name="id2610649"></a>
+				</p></li></ul></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id375648"></a>Mapping User Identifiers between MS Windows and UNIX</h3></div></div></div><p>
+<a class="indexterm" name="id375656"></a>
+<a class="indexterm" name="id375662"></a>
+<a class="indexterm" name="id375669"></a>
 	Every operation in UNIX/Linux requires a user identifier (UID), just as in
 	MS Windows NT4/200x this requires a security identifier (SID). Samba provides
 	two means for mapping an MS Windows user to a UNIX/Linux UID.
 	</p><p>
-<a class="indexterm" name="id2610663"></a>
-<a class="indexterm" name="id2610670"></a>
-<a class="indexterm" name="id2610676"></a>
-<a class="indexterm" name="id2610683"></a>
-<a class="indexterm" name="id2610690"></a>
+<a class="indexterm" name="id375681"></a>
+<a class="indexterm" name="id375688"></a>
+<a class="indexterm" name="id375694"></a>
+<a class="indexterm" name="id375701"></a>
+<a class="indexterm" name="id375708"></a>
 	First, all Samba SAM database accounts require a UNIX/Linux UID that the account will map to. As users are
 	added to the account information database, Samba will call the <a class="link" href="smb.conf.5.html#ADDUSERSCRIPT">add user script</a>
 	interface to add the account to the Samba host OS. In essence all accounts in the local SAM require a local
 	user account.
 	</p><p>
-	<a class="indexterm" name="id2610719"></a>
-	<a class="indexterm" name="id2610725"></a>
-	<a class="indexterm" name="id2610732"></a>
-	<a class="indexterm" name="id2610738"></a>
-	<a class="indexterm" name="id2610745"></a>
-	<a class="indexterm" name="id2610752"></a>
-	<a class="indexterm" name="id2610759"></a>
+	<a class="indexterm" name="id375732"></a>
+	<a class="indexterm" name="id375738"></a>
+	<a class="indexterm" name="id375745"></a>
+	<a class="indexterm" name="id375752"></a>
+	<a class="indexterm" name="id375758"></a>
+	<a class="indexterm" name="id375765"></a>
+	<a class="indexterm" name="id375772"></a>
 	The second way to map Windows SID to UNIX UID is via the <span class="emphasis"><em>idmap uid</em></span> and
 	<span class="emphasis"><em>idmap gid</em></span> parameters in <code class="filename">smb.conf</code>.  Please refer to the man page for information about
 	these parameters.  These parameters are essential when mapping users from a remote (non-member Windows client
 	or a member of a foreign domain) SAM server.
 	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="idmapbackend"></a>Mapping Common UIDs/GIDs on Distributed Machines</h3></div></div></div><p>
-<a class="indexterm" name="id2610798"></a>
-<a class="indexterm" name="id2610805"></a>
-<a class="indexterm" name="id2610811"></a>
-<a class="indexterm" name="id2610818"></a>
-<a class="indexterm" name="id2610825"></a>
-<a class="indexterm" name="id2610831"></a>
+<a class="indexterm" name="id375808"></a>
+<a class="indexterm" name="id375814"></a>
+<a class="indexterm" name="id375821"></a>
+<a class="indexterm" name="id375827"></a>
+<a class="indexterm" name="id375834"></a>
+<a class="indexterm" name="id375840"></a>
 	Samba-3 has a special facility that makes it possible to maintain identical UIDs and GIDs
 	on all servers in a distributed network. A distributed network is one where there exists
 	a PDC, one or more BDCs, and/or one or more domain member servers. Why is this important?
 	This is important if files are being shared over more than one protocol (e.g., NFS) and where
 	users are copying files across UNIX/Linux systems using tools such as <code class="literal">rsync</code>.
 	</p><p>
-<a class="indexterm" name="id2610855"></a>
-<a class="indexterm" name="id2610861"></a>
-<a class="indexterm" name="id2610868"></a>
-<a class="indexterm" name="id2610874"></a>
-<a class="indexterm" name="id2610881"></a>
-<a class="indexterm" name="id2610888"></a>
-<a class="indexterm" name="id2610895"></a>
-	<a class="indexterm" name="id2610902"></a>
+<a class="indexterm" name="id375860"></a>
+<a class="indexterm" name="id375867"></a>
+<a class="indexterm" name="id375874"></a>
+<a class="indexterm" name="id375880"></a>
+<a class="indexterm" name="id375887"></a>
+<a class="indexterm" name="id375893"></a>
+<a class="indexterm" name="id375900"></a>
+	<a class="indexterm" name="id375907"></a>
 	The special facility is enabled using a parameter called <em class="parameter"><code>idmap backend</code></em>.
 	The default setting for this parameter is an empty string. Technically it is possible to use
 	an LDAP-based idmap backend for UIDs and GIDs, but it makes most sense when this is done for
 	network configurations that also use LDAP for the SAM backend.
 	<a class="link" href="passdb.html#idmapbackendexample" title="Example 11.1. Example Configuration with the LDAP idmap Backend">Example Configuration with the LDAP idmap Backend</a>
 	shows that configuration.
-	</p><a class="indexterm" name="id2610931"></a><div class="example"><a name="idmapbackendexample"></a><p class="title"><b>Example 11.1. Example Configuration with the LDAP idmap Backend</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2610965"></a><em class="parameter"><code>idmap backend = ldap:ldap://ldap-server.quenya.org:636</code></em></td></tr><tr><td># Alternatively, this could be specified as:</td></tr><tr><td><a class="indexterm" name="id2610981"></a><em class="parameter"><code>idmap backend = ldap:ldaps://ldap-server.quenya.org</code></em></td></tr></table></div></div><br class="example-break"><p>
-<a class="indexterm" name="id2610996"></a>
-<a class="indexterm" name="id2611003"></a>
+	</p><a class="indexterm" name="id375932"></a><div class="example"><a name="idmapbackendexample"></a><p class="title"><b>Example 11.1. Example Configuration with the LDAP idmap Backend</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id375964"></a><em class="parameter"><code>idmap backend = ldap:ldap://ldap-server.quenya.org:636</code></em></td></tr><tr><td># Alternatively, this could be specified as:</td></tr><tr><td><a class="indexterm" name="id375980"></a><em class="parameter"><code>idmap backend = ldap:ldaps://ldap-server.quenya.org</code></em></td></tr></table></div></div><br class="example-break"><p>
+<a class="indexterm" name="id375995"></a>
+<a class="indexterm" name="id376001"></a>
 	A network administrator who wants to make significant use of LDAP backends will sooner or later be
 	exposed to the excellent work done by PADL Software. PADL <a class="ulink" href="http://www.padl.com" target="_top">http://www.padl.com</a> have
 	produced and released to open source an array of tools that might be of interest. These tools include:
 	</p><div class="itemizedlist"><ul type="disc"><li><p>
-<a class="indexterm" name="id2611027"></a>
-<a class="indexterm" name="id2611034"></a>
-<a class="indexterm" name="id2611040"></a>
-<a class="indexterm" name="id2611047"></a>
-<a class="indexterm" name="id2611054"></a>
-<a class="indexterm" name="id2611060"></a>
-<a class="indexterm" name="id2611067"></a>
-<a class="indexterm" name="id2611074"></a>
+<a class="indexterm" name="id376023"></a>
+<a class="indexterm" name="id376029"></a>
+<a class="indexterm" name="id376036"></a>
+<a class="indexterm" name="id376042"></a>
+<a class="indexterm" name="id376049"></a>
+<a class="indexterm" name="id376056"></a>
+<a class="indexterm" name="id376063"></a>
+<a class="indexterm" name="id376069"></a>
 		<span class="emphasis"><em>nss_ldap:</em></span> An LDAP name service switch (NSS) module to provide native
 		name service support for AIX, Linux, Solaris, and other operating systems. This tool
 		can be used for centralized storage and retrieval of UIDs and GIDs.
 		</p></li><li><p>
-<a class="indexterm" name="id2611094"></a>
-<a class="indexterm" name="id2611101"></a>
-<a class="indexterm" name="id2611107"></a>
-<a class="indexterm" name="id2611114"></a>
+<a class="indexterm" name="id376088"></a>
+<a class="indexterm" name="id376095"></a>
+<a class="indexterm" name="id376101"></a>
+<a class="indexterm" name="id376108"></a>
 		<span class="emphasis"><em>pam_ldap:</em></span> A PAM module that provides LDAP integration for UNIX/Linux
 		system access authentication.
 		</p></li><li><p>
-<a class="indexterm" name="id2611133"></a>
-<a class="indexterm" name="id2611140"></a>
-<a class="indexterm" name="id2611146"></a>
-<a class="indexterm" name="id2611153"></a>
+<a class="indexterm" name="id376126"></a>
+<a class="indexterm" name="id376132"></a>
+<a class="indexterm" name="id376139"></a>
+<a class="indexterm" name="id376146"></a>
 		<span class="emphasis"><em>idmap_ad:</em></span> An IDMAP backend that supports the Microsoft Services for
 		UNIX RFC 2307 schema available from the PADL Web
 		<a class="ulink" href="http://www.padl.com/download/xad_oss_plugins.tar.gz" target="_top">site</a>.
-		</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2611176"></a>Comments Regarding LDAP</h3></div></div></div><p>
-<a class="indexterm" name="id2611184"></a>
-<a class="indexterm" name="id2611194"></a>
-<a class="indexterm" name="id2611201"></a>
-<a class="indexterm" name="id2611207"></a>
+		</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id376168"></a>Comments Regarding LDAP</h3></div></div></div><p>
+<a class="indexterm" name="id376176"></a>
+<a class="indexterm" name="id376185"></a>
+<a class="indexterm" name="id376192"></a>
+<a class="indexterm" name="id376198"></a>
 	There is much excitement and interest in LDAP directories in the information technology world
 	today. The LDAP architecture was designed to be highly scalable. It was also designed for
 	use across a huge number of potential areas of application encompassing a wide range of operating
 	systems and platforms. LDAP technologies are at the heart of the current generations of Federated
 	Identity Management (FIM) solutions that can underlie a corporate Single Sign-On (SSO) environment.
 	</p><p>
-<a class="indexterm" name="id2611225"></a>
-<a class="indexterm" name="id2611232"></a>
-<a class="indexterm" name="id2611239"></a>
-<a class="indexterm" name="id2611245"></a>
+<a class="indexterm" name="id376212"></a>
+<a class="indexterm" name="id376219"></a>
+<a class="indexterm" name="id376226"></a>
+<a class="indexterm" name="id376232"></a>
 	LDAP implementations have been built across a wide variety of platforms. It lies at the core of Microsoft
 	Windows Active Directory services (ADS), Novell's eDirectory, as well as many others. Implementation of the
 	directory services LDAP involves interaction with legacy as well as new generation applications, all of which
 	depend on some form of authentication services.
 	</p><p>
-<a class="indexterm" name="id2611262"></a>
-<a class="indexterm" name="id2611269"></a>
-<a class="indexterm" name="id2611276"></a>
-<a class="indexterm" name="id2611283"></a>
-<a class="indexterm" name="id2611290"></a>
-<a class="indexterm" name="id2611296"></a>
-<a class="indexterm" name="id2611303"></a>
-<a class="indexterm" name="id2611310"></a>
-<a class="indexterm" name="id2611317"></a>
-<a class="indexterm" name="id2611324"></a>
-<a class="indexterm" name="id2611331"></a>
-<a class="indexterm" name="id2611338"></a>
-<a class="indexterm" name="id2611345"></a>
-<a class="indexterm" name="id2611352"></a>
+<a class="indexterm" name="id376245"></a>
+<a class="indexterm" name="id376252"></a>
+<a class="indexterm" name="id376259"></a>
+<a class="indexterm" name="id376266"></a>
+<a class="indexterm" name="id376273"></a>
+<a class="indexterm" name="id376279"></a>
+<a class="indexterm" name="id376286"></a>
+<a class="indexterm" name="id376293"></a>
+<a class="indexterm" name="id376300"></a>
+<a class="indexterm" name="id376307"></a>
+<a class="indexterm" name="id376313"></a>
+<a class="indexterm" name="id376320"></a>
+<a class="indexterm" name="id376327"></a>
+<a class="indexterm" name="id376334"></a>
 	UNIX services can utilize LDAP directory information for authentication and access controls
 	through intermediate tools and utilities. The total environment that consists of the LDAP directory
 	and the middle-ware tools and utilities makes it possible for all user access to the UNIX platform
@@ -410,12 +410,12 @@
 	shells, mail and messaging systems, quota controls, printing systems, DNS servers, DHCP servers,
 	and also Samba.
 	</p><p>
-<a class="indexterm" name="id2611372"></a>
-<a class="indexterm" name="id2611378"></a>
-<a class="indexterm" name="id2611385"></a>
-<a class="indexterm" name="id2611392"></a>
-<a class="indexterm" name="id2611398"></a>
-<a class="indexterm" name="id2611405"></a>
+<a class="indexterm" name="id376349"></a>
+<a class="indexterm" name="id376356"></a>
+<a class="indexterm" name="id376363"></a>
+<a class="indexterm" name="id376369"></a>
+<a class="indexterm" name="id376376"></a>
+<a class="indexterm" name="id376383"></a>
 	Many sites are installing LDAP for the first time in order to provide a scalable passdb backend
 	for Samba. Others are faced with the need to adapt an existing LDAP directory to new uses such
 	as for the Samba SAM backend. Whatever your particular need and attraction to Samba may be,
@@ -423,37 +423,37 @@
 	are of a durable nature for the site. These have far-reaching implications that affect long-term
 	information systems management costs.
 	</p><p>
-<a class="indexterm" name="id2611424"></a>
-<a class="indexterm" name="id2611431"></a>
+<a class="indexterm" name="id376398"></a>
+<a class="indexterm" name="id376404"></a>
 	Do not rush into an LDAP deployment. Take the time to understand how the design of the Directory
 	Information Tree (DIT) may impact current and future site needs, as well as the ability to meet
 	them. The way that Samba SAM information should be stored within the DIT varies from site to site
 	and with each implementation new experience is gained. It is well understood by LDAP veterans that
 	first implementations create awakening, second implementations of LDAP create fear, and
 	third-generation deployments bring peace and tranquility.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2611451"></a>Caution Regarding LDAP and Samba</h4></div></div></div><p>
-<a class="indexterm" name="id2611459"></a>
-<a class="indexterm" name="id2611466"></a>
-<a class="indexterm" name="id2611473"></a>
-<a class="indexterm" name="id2611480"></a>
-<a class="indexterm" name="id2611487"></a>
-<a class="indexterm" name="id2611494"></a>
-<a class="indexterm" name="id2611501"></a>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id376419"></a>Caution Regarding LDAP and Samba</h4></div></div></div><p>
+<a class="indexterm" name="id376427"></a>
+<a class="indexterm" name="id376434"></a>
+<a class="indexterm" name="id376441"></a>
+<a class="indexterm" name="id376447"></a>
+<a class="indexterm" name="id376454"></a>
+<a class="indexterm" name="id376461"></a>
+<a class="indexterm" name="id376468"></a>
 	Samba requires UNIX POSIX identity information as well as a place to store information that is
 	specific to Samba and the Windows networking environment. The most used information that must
 	be dealt with includes: user accounts, group accounts, machine trust accounts, interdomain
 	trust accounts, and intermediate information specific to Samba internals.
 	</p><p>
-<a class="indexterm" name="id2611517"></a>
-<a class="indexterm" name="id2611524"></a>
-<a class="indexterm" name="id2611531"></a>
+<a class="indexterm" name="id376481"></a>
+<a class="indexterm" name="id376488"></a>
+<a class="indexterm" name="id376495"></a>
 	The example deployment guidelines in this book, as well as other books and HOWTO documents
 	available from the internet may not fit with established directory designs and implementations.
 	The existing DIT may not be able to accommodate the simple information layout proposed in common
 	sources. Additionally, you may find that the common scripts and tools that are used to provision
 	the LDAP directory for use with Samba may not suit your needs.
 	</p><p>
-<a class="indexterm" name="id2611556"></a>
+<a class="indexterm" name="id376512"></a>
 	It is not uncommon, for sites that have existing LDAP DITs to find necessity to generate a
 	set of site-specific scripts and utilities to make it possible to deploy Samba within the
 	scope of site operations. The way that user and group accounts are distributed throughout
@@ -461,63 +461,63 @@
 	the journey to it may be challenging. Take time to understand site needs and do not rush
 	into deployment.
 	</p><p>
-<a class="indexterm" name="id2611575"></a>
-<a class="indexterm" name="id2611581"></a>
+<a class="indexterm" name="id376527"></a>
+<a class="indexterm" name="id376533"></a>
 	Above all, do not blindly use scripts and tools that are not suitable for your site. Check
 	and validate all scripts before you execute them to make sure that the existing infrastructure
 	will not be damaged by inadvertent use of an inappropriate tool.
-	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2611596"></a>LDAP Directories and Windows Computer Accounts</h3></div></div></div><p>
-<a class="indexterm" name="id2611604"></a>
-<a class="indexterm" name="id2611611"></a>
-<a class="indexterm" name="id2611618"></a>
+	</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id376546"></a>LDAP Directories and Windows Computer Accounts</h3></div></div></div><p>
+<a class="indexterm" name="id376554"></a>
+<a class="indexterm" name="id376560"></a>
+<a class="indexterm" name="id376567"></a>
 		Samba doesn't provide a turnkey solution to LDAP. It is best to deal with the design and
 		configuration of an LDAP directory prior to integration with Samba. A working knowledge
 		of LDAP makes Samba integration easy, and the lack of a working knowledge of LDAP can make
 		it a frustrating experience.
 		</p><p>
-<a class="indexterm" name="id2611634"></a>
-<a class="indexterm" name="id2611640"></a>
-<a class="indexterm" name="id2611647"></a>
+<a class="indexterm" name="id376580"></a>
+<a class="indexterm" name="id376587"></a>
+<a class="indexterm" name="id376594"></a>
 		Computer (machine) accounts can be placed wherever you like in an LDAP directory subject
 		to some constraints that are described in this chapter.
 		</p><p>
-<a class="indexterm" name="id2611660"></a>
-<a class="indexterm" name="id2611667"></a>
-<a class="indexterm" name="id2611674"></a>
-<a class="indexterm" name="id2611681"></a>
-<a class="indexterm" name="id2611688"></a>
-<a class="indexterm" name="id2611695"></a>
-<a class="indexterm" name="id2611702"></a>
+<a class="indexterm" name="id376605"></a>
+<a class="indexterm" name="id376612"></a>
+<a class="indexterm" name="id376619"></a>
+<a class="indexterm" name="id376625"></a>
+<a class="indexterm" name="id376632"></a>
+<a class="indexterm" name="id376639"></a>
+<a class="indexterm" name="id376646"></a>
 		The POSIX and sambaSamAccount components of computer (machine) accounts are both used by Samba.
 		Thus, machine accounts are treated inside Samba in the same way that Windows NT4/200X treats
 		them. A user account and a machine account are indistinquishable from each other, except that
 		the machine account ends in a $ character, as do trust accounts.
 		</p><p>
-<a class="indexterm" name="id2611718"></a>
-<a class="indexterm" name="id2611725"></a>
-<a class="indexterm" name="id2611731"></a>
-<a class="indexterm" name="id2611738"></a>
-<a class="indexterm" name="id2611745"></a>
+<a class="indexterm" name="id376659"></a>
+<a class="indexterm" name="id376666"></a>
+<a class="indexterm" name="id376672"></a>
+<a class="indexterm" name="id376679"></a>
+<a class="indexterm" name="id376686"></a>
 		The need for Windows user, group, machine, trust, and other accounts to be tied to a valid UNIX
 		UID is a design decision that was made a long way back in the history of Samba development. It
 		is unlikely that this decision will be reversed or changed during the remaining life of the
 		Samba-3.x series.
 		</p><p>
-<a class="indexterm" name="id2611760"></a>
-<a class="indexterm" name="id2611767"></a>
-<a class="indexterm" name="id2611773"></a>
+<a class="indexterm" name="id376699"></a>
+<a class="indexterm" name="id376705"></a>
+<a class="indexterm" name="id376712"></a>
 		The resolution of a UID from the Windows SID is achieved within Samba through a mechanism that
 		must refer back to the host operating system on which Samba is running. The NSS is the preferred
 		mechanism that shields applications (like Samba) from the need to know everything about every
 		host OS it runs on.
 		</p><p>
-<a class="indexterm" name="id2611788"></a>
-<a class="indexterm" name="id2611795"></a>
-<a class="indexterm" name="id2611802"></a>
-<a class="indexterm" name="id2611808"></a>
-<a class="indexterm" name="id2611815"></a>
-<a class="indexterm" name="id2611822"></a>
-<a class="indexterm" name="id2611829"></a>
+<a class="indexterm" name="id376724"></a>
+<a class="indexterm" name="id376731"></a>
+<a class="indexterm" name="id376738"></a>
+<a class="indexterm" name="id376744"></a>
+<a class="indexterm" name="id376751"></a>
+<a class="indexterm" name="id376758"></a>
+<a class="indexterm" name="id376764"></a>
 		Samba asks the host OS to provide a UID via the &#8220;<span class="quote">passwd</span>&#8221;, &#8220;<span class="quote">shadow</span>&#8221;,
 		and &#8220;<span class="quote">group</span>&#8221; facilities in the NSS control (configuration) file. The best tool
 		for achieving this is left up to the UNIX administrator to determine. It is not imposed by
@@ -525,64 +525,64 @@
 		possible to do this via LDAP, and for that Samba provides the appropriate hooks so that
 		all account entities can be located in an LDAP directory.
 		</p><p>
-<a class="indexterm" name="id2611857"></a>
-<a class="indexterm" name="id2611864"></a>
-<a class="indexterm" name="id2611870"></a>
-<a class="indexterm" name="id2611877"></a>
-<a class="indexterm" name="id2611884"></a>
+<a class="indexterm" name="id376789"></a>
+<a class="indexterm" name="id376796"></a>
+<a class="indexterm" name="id376803"></a>
+<a class="indexterm" name="id376809"></a>
+<a class="indexterm" name="id376816"></a>
 		For many the weapon of choice is to use the PADL nss_ldap utility. This utility must
 		be configured so that computer accounts can be resolved to a POSIX/UNIX account UID. That
 		is fundamentally an LDAP design question.  The information provided on the Samba list and
 		in the documentation is directed at providing working examples only. The design
 		of an LDAP directory is a complex subject that is beyond the scope of this documentation.
 		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="acctmgmttools"></a>Account Management Tools</h2></div></div></div><p>
-<a class="indexterm" name="id2611914"></a>
-<a class="indexterm" name="id2611921"></a>
-<a class="indexterm" name="id2611928"></a>
+<a class="indexterm" name="id376842"></a>
+<a class="indexterm" name="id376848"></a>
+<a class="indexterm" name="id376855"></a>
 Samba provides two tools for management of user and machine accounts:
 <code class="literal">smbpasswd</code> and <code class="literal">pdbedit</code>.
 </p><p>
-<a class="indexterm" name="id2611951"></a>
-<a class="indexterm" name="id2611958"></a>
-<a class="indexterm" name="id2611964"></a>
+<a class="indexterm" name="id376878"></a>
+<a class="indexterm" name="id376884"></a>
+<a class="indexterm" name="id376891"></a>
 The <code class="literal">pdbedit</code> can be used to manage account policies in addition to
 Samba user account information. The policy management capability is used to administer
 domain default settings for password aging and management controls to handle failed login
 attempts.
 </p><p>
-<a class="indexterm" name="id2611985"></a>
-<a class="indexterm" name="id2611992"></a>
-<a class="indexterm" name="id2611998"></a>
-<a class="indexterm" name="id2612005"></a>
+<a class="indexterm" name="id376909"></a>
+<a class="indexterm" name="id376916"></a>
+<a class="indexterm" name="id376923"></a>
+<a class="indexterm" name="id376930"></a>
 Some people are confused when reference is made to <code class="literal">smbpasswd</code> because the
 name refers to a storage mechanism for SambaSAMAccount information, but it is also the name
 of a utility tool. That tool is destined to eventually be replaced by new functionality that
 is being added to the <code class="literal">net</code> toolset (see <a class="link" href="NetCommand.html" title="Chapter 13. Remote and Local Management: The Net Command">the Net Command</a>.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2612037"></a>The <code class="literal">smbpasswd</code> Tool</h3></div></div></div><p>
-<a class="indexterm" name="id2612050"></a>
-<a class="indexterm" name="id2612057"></a>
-<a class="indexterm" name="id2612064"></a>
-<a class="indexterm" name="id2612070"></a>
-<a class="indexterm" name="id2612077"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id376958"></a>The <code class="literal">smbpasswd</code> Tool</h3></div></div></div><p>
+<a class="indexterm" name="id376972"></a>
+<a class="indexterm" name="id376979"></a>
+<a class="indexterm" name="id376985"></a>
+<a class="indexterm" name="id376992"></a>
+<a class="indexterm" name="id376999"></a>
 		The <code class="literal">smbpasswd</code> utility is similar to the <code class="literal">passwd</code>
 		and <code class="literal">yppasswd</code> programs. It maintains the two 32 byte password
 		fields in the passdb backend. This utility operates independently of the actual
 		account and password storage methods used (as specified by the <em class="parameter"><code>passdb
 		backend</code></em> in the <code class="filename">smb.conf</code> file.
 		</p><p>
-<a class="indexterm" name="id2612121"></a>
-<a class="indexterm" name="id2612128"></a>
+<a class="indexterm" name="id377041"></a>
+<a class="indexterm" name="id377048"></a>
 		<code class="literal">smbpasswd</code> works in a client-server mode where it contacts the
 		local smbd to change the user's password on its behalf. This has enormous benefits.
 		</p><p>
-<a class="indexterm" name="id2612147"></a>
-<a class="indexterm" name="id2612153"></a>
+<a class="indexterm" name="id377065"></a>
+<a class="indexterm" name="id377072"></a>
 		<code class="literal">smbpasswd</code> has the capability to change passwords on Windows NT
 		servers (this only works when the request is sent to the NT PDC if changing an NT
 		domain user's password).
 		</p><p>
-		<a class="indexterm" name="id2612172"></a>
-		<a class="indexterm" name="id2612179"></a>
+		<a class="indexterm" name="id377089"></a>
+		<a class="indexterm" name="id377096"></a>
 		<code class="literal">smbpasswd</code> can be used to:
 		</p><div class="itemizedlist"><ul type="disc"><li><p><span class="emphasis"><em>add</em></span> user or machine accounts.</p></li><li><p><span class="emphasis"><em>delete</em></span> user or machine accounts.</p></li><li><p><span class="emphasis"><em>enable</em></span> user or machine accounts.</p></li><li><p><span class="emphasis"><em>disable</em></span> user or machine accounts.</p></li><li><p><span class="emphasis"><em>set to NULL</em></span> user passwords.</p></li><li><p><span class="emphasis"><em>manage</em></span> interdomain trust accounts.</p></li></ul></div><p>
 		To run smbpasswd as a normal user, just type:
@@ -601,56 +601,56 @@
 		If the old value does not match the current value stored for that user, or the two
 		new values do not match each other, then the password will not be changed.
 		</p><p>
-<a class="indexterm" name="id2612319"></a>
+<a class="indexterm" name="id377231"></a>
 		When invoked by an ordinary user, the command will allow only the user to change his or her own
 		SMB password.
 		</p><p>
-<a class="indexterm" name="id2612331"></a>
-<a class="indexterm" name="id2612338"></a>
+<a class="indexterm" name="id377242"></a>
+<a class="indexterm" name="id377249"></a>
 		When run by root, <code class="literal">smbpasswd</code> may take an optional argument specifying
 		the username whose SMB password you wish to change. When run as root, <code class="literal">smbpasswd</code>
 		does not prompt for or check the old password value, thus allowing root to set passwords
 		for users who have forgotten their passwords.
 		</p><p>
-<a class="indexterm" name="id2612365"></a>
-<a class="indexterm" name="id2612371"></a>
-<a class="indexterm" name="id2612378"></a>
-<a class="indexterm" name="id2612385"></a>
+<a class="indexterm" name="id377273"></a>
+<a class="indexterm" name="id377280"></a>
+<a class="indexterm" name="id377286"></a>
+<a class="indexterm" name="id377293"></a>
 		<code class="literal">smbpasswd</code> is designed to work in the way familiar to UNIX
 		users who use the <code class="literal">passwd</code> or <code class="literal">yppasswd</code> commands.
 		While designed for administrative use, this tool provides essential user-level
 		password change capabilities.
 		</p><p>
-<a class="indexterm" name="id2612416"></a>
+<a class="indexterm" name="id377323"></a>
 		For more details on using <code class="literal">smbpasswd</code>, refer to the man page (the
 		definitive reference).
 		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="pdbeditthing"></a>The <code class="literal">pdbedit</code> Tool</h3></div></div></div><p>
-		<a class="indexterm" name="id2612451"></a>
-		<a class="indexterm" name="id2612458"></a>
-		<a class="indexterm" name="id2612464"></a>
-		<a class="indexterm" name="id2612471"></a>
+		<a class="indexterm" name="id377356"></a>
+		<a class="indexterm" name="id377363"></a>
+		<a class="indexterm" name="id377370"></a>
+		<a class="indexterm" name="id377376"></a>
 		<code class="literal">pdbedit</code> is a tool that can be used only by root. It is used to
 		manage the passdb backend, as well as domain-wide account policy settings. <code class="literal">pdbedit</code>
 		can be used to:
 		</p><div class="itemizedlist"><ul type="disc"><li><p>add, remove, or modify user accounts.</p></li><li><p>list user accounts.</p></li><li><p>migrate user accounts.</p></li><li><p>migrate group accounts.</p></li><li><p>manage account policies.</p></li><li><p>manage domain access policy settings.</p></li></ul></div><p>
-		<a class="indexterm" name="id2612531"></a>
+		<a class="indexterm" name="id377432"></a>
 		Under the terms of the Sarbanes-Oxley Act of 2002, American businesses and organizations are mandated to
 		implement a series of <code class="literal">internal controls</code> and procedures to communicate, store,
 		and protect financial data. The Sarbanes-Oxley Act has far reaching implications in respect of:
 		</p><div class="orderedlist"><ol type="1"><li><p>Who has access to information systems that store financial data.</p></li><li><p>How personal and financial information is treated among employees and business
 				partners.</p></li><li><p>How security vulnerabilities are managed.</p></li><li><p>Security and patch level maintenance for all information systems.</p></li><li><p>How information systems changes are documented and tracked.</p></li><li><p>How information access controls are implemented and managed.</p></li><li><p>Auditability of all information systems in respect of change and security.</p></li><li><p>Disciplinary procedures and controls to ensure privacy.</p></li></ol></div><p>
-		<a class="indexterm" name="id2612603"></a>
-		<a class="indexterm" name="id2612610"></a>
+		<a class="indexterm" name="id377498"></a>
+		<a class="indexterm" name="id377505"></a>
 		In short, the Sarbanes-Oxley Act of 2002 is an instrument that enforces accountability in respect of
 		business related information systems so as to ensure the compliance of all information systems that
 		are used to store personal information and particularly for financial records processing. Similar
 		accountabilities are being demanded around the world.
 		</p><p>
-		<a class="indexterm" name="id2612626"></a>
-		<a class="indexterm" name="id2612633"></a>
-		<a class="indexterm" name="id2612640"></a>
-		<a class="indexterm" name="id2612647"></a>
-		<a class="indexterm" name="id2612654"></a>
+		<a class="indexterm" name="id377518"></a>
+		<a class="indexterm" name="id377525"></a>
+		<a class="indexterm" name="id377532"></a>
+		<a class="indexterm" name="id377538"></a>
+		<a class="indexterm" name="id377545"></a>
 		The need to be familiar with the Samba tools and facilities that permit information systems operation
 		in compliance with government laws and regulations is clear to all. The <code class="literal">pdbedit</code> is
 		currently the only Samba tool that provides the capacity to manage account and systems access controls
@@ -660,27 +660,27 @@
 		Domain global policy controls available in Windows NT4 compared with Samba
 		is shown in <a class="link" href="passdb.html#policycontrols" title="Table 11.1. NT4 Domain v's Samba Policy Controls">NT4 Domain v's Samba Policy Controls</a>.
 		</p><div class="table"><a name="policycontrols"></a><p class="title"><b>Table 11.1. NT4 Domain v's Samba Policy Controls</b></p><div class="table-contents"><table summary="NT4 Domain v's Samba Policy Controls" border="1"><colgroup><col align="left"><col align="left"><col align="center"><col align="center"><col align="center"></colgroup><thead><tr><th align="left"><p>NT4 policy Name</p></th><th align="left"><p>Samba Policy Name</p></th><th align="center"><p>NT4 Range</p></th><th align="center"><p>Samba Range</p></th><th align="center"><p>Samba Default</p></th></tr></thead><tbody><tr><td align="left"><p>Maximum Password Age</p></td><td align="left"><p>maximum password age</p></td><td align="center"><p>0 - 999 (days)</p></td><td align="center"><p>0 - 4294967295 (sec)</p></td><td align="center"><p>4294967295</p></td></tr><tr><td align="left"><p>Minimum Password Age</p></td><td align="left"><p>minimum password age</p></td><td align="center"><p>0 - 999 (days)</p></td><td align="center"><p>0 - 4294967295 (sec)</p></td><td align="center"><p>0</p></td></tr><tr><td align="left"><p>Mimimum Password Length</p></td><td align="left"><p>min password length</p></td><td align="center"><p>1 - 14 (Chars)</p></td><td align="center"><p>0 - 4294967295 (Chars)</p></td><td align="center"><p>5</p></td></tr><tr><td align="left"><p>Password Uniqueness</p></td><td align="left"><p>password history</p></td><td align="center"><p>0 - 23 (#)</p></td><td align="center"><p>0 - 4294967295 (#)</p></td><td align="center"><p>0</p></td></tr><tr><td align="left"><p>Account Lockout - Reset count after</p></td><td align="left"><p>reset count minutes</p></td><td align="center"><p>1 - 99998 (min)</p></td><td align="center"><p>0 - 4294967295 (min)</p></td><td align="center"><p>30</p></td></tr><tr><td align="left"><p>Lockout after bad logon attempts</p></td><td align="left"><p>bad lockout attempt</p></td><td align="center"><p>0 - 998 (#)</p></td><td align="center"><p>0 - 4294967295 (#)</p></td><td align="center"><p>0</p></td></tr><tr><td align="left"><p>*** Not Known ***</p></td><td align="left"><p>disconnect time</p></td><td align="center"><p>TBA</p></td><td align="center"><p>0 - 4294967295</p></td><td align="center"><p>0</p></td></tr><tr><td align="left"><p>Lockout Duration</p></td><td align="left"><p>lockout duration</p></td><td align="center"><p>1 - 99998 (min)</p></td><td align="center"><p>0 - 4294967295 (min)</p></td><td align="center"><p>30</p></td></tr><tr><td align="left"><p>Users must log on in order to change password</p></td><td align="left"><p>user must logon to change password</p></td><td align="center"><p>0/1</p></td><td align="center"><p>0 - 4294967295</p></td><td align="center"><p>0</p></td></tr><tr><td align="left"><p>*** Registry Setting ***</p></td><td align="left"><p>refuse machine password change</p></td><td align="center"><p>0/1</p></td><td align="center"><p>0 - 4294967295</p></td><td align="center"><p>0</p></td></tr></tbody></table></div></div><br class="table-break"><p>
-		<a class="indexterm" name="id2613035"></a>
-<a class="indexterm" name="id2613042"></a>
-<a class="indexterm" name="id2613049"></a>
-<a class="indexterm" name="id2613056"></a>
+		<a class="indexterm" name="id377913"></a>
+<a class="indexterm" name="id377920"></a>
+<a class="indexterm" name="id377927"></a>
+<a class="indexterm" name="id377934"></a>
 		The <code class="literal">pdbedit</code> tool is the only one that can manage the account
 		security and policy settings. It is capable of all operations that smbpasswd can
 		do as well as a superset of them.
 		</p><p>
-		<a class="indexterm" name="id2613075"></a>
-<a class="indexterm" name="id2613082"></a>
-<a class="indexterm" name="id2613089"></a>
+		<a class="indexterm" name="id377951"></a>
+<a class="indexterm" name="id377958"></a>
+<a class="indexterm" name="id377965"></a>
 		One particularly important purpose of the <code class="literal">pdbedit</code> is to allow
 		the import/export of account information from one passdb backend to another.
-		</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2613105"></a>User Account Management</h4></div></div></div><p>
-<a class="indexterm" name="id2613113"></a>
-<a class="indexterm" name="id2613120"></a>
-<a class="indexterm" name="id2613127"></a>
-<a class="indexterm" name="id2613134"></a>
-<a class="indexterm" name="id2613141"></a>
-<a class="indexterm" name="id2613148"></a>
-<a class="indexterm" name="id2613155"></a>
+		</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id377980"></a>User Account Management</h4></div></div></div><p>
+<a class="indexterm" name="id377988"></a>
+<a class="indexterm" name="id377995"></a>
+<a class="indexterm" name="id378001"></a>
+<a class="indexterm" name="id378008"></a>
+<a class="indexterm" name="id378015"></a>
+<a class="indexterm" name="id378022"></a>
+<a class="indexterm" name="id378029"></a>
 		The <code class="literal">pdbedit</code> tool, like the <code class="literal">smbpasswd</code> tool, requires
 		that a POSIX user account already exists in the UNIX/Linux system accounts database (backend).
 		Neither tool will call out to the operating system to create a user account because this is
@@ -690,13 +690,13 @@
 		correctly created and changed. The use of the <code class="literal">pdbedit</code> tool does not
 		make use of these interface scripts.
 		</p><p>
-<a class="indexterm" name="id2613198"></a>
-<a class="indexterm" name="id2613205"></a>
+<a class="indexterm" name="id378067"></a>
+<a class="indexterm" name="id378074"></a>
 		Before attempting to use the <code class="literal">pdbedit</code> tool to manage user and machine
 		accounts, make certain that a system (POSIX) account has already been created.
-		</p><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id2613222"></a>Listing User and Machine Accounts</h5></div></div></div><p>
-<a class="indexterm" name="id2613230"></a>
-<a class="indexterm" name="id2613237"></a>
+		</p><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id378089"></a>Listing User and Machine Accounts</h5></div></div></div><p>
+<a class="indexterm" name="id378097"></a>
+<a class="indexterm" name="id378104"></a>
 		The following is an example of the user account information that is stored in
 		a tdbsam password backend. This listing was produced by running:
 </p><pre class="screen">
@@ -723,7 +723,7 @@
 Password must change: Mon, 18 Jan 2038 20:14:07 GMT
 </pre><p>
 		</p><p>
-<a class="indexterm" name="id2613279"></a>
+<a class="indexterm" name="id378138"></a>
 		Accounts can also be listed in the older <code class="literal">smbpasswd</code> format:
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>pdbedit -Lw</code></strong>
@@ -748,29 +748,29 @@
 marvel$:1011:BF709959C3C94E0B3958B7B84A3BB6F3:
      C610EFE9A385A3E8AA46ADFD576E6881:[W          ]:LCT-40F07A4
 </pre><p>
-<a class="indexterm" name="id2613327"></a>
-<a class="indexterm" name="id2613334"></a>
-<a class="indexterm" name="id2613340"></a>
-<a class="indexterm" name="id2613347"></a>
-<a class="indexterm" name="id2613354"></a>
-<a class="indexterm" name="id2613361"></a>
+<a class="indexterm" name="id378176"></a>
+<a class="indexterm" name="id378183"></a>
+<a class="indexterm" name="id378190"></a>
+<a class="indexterm" name="id378196"></a>
+<a class="indexterm" name="id378203"></a>
+<a class="indexterm" name="id378210"></a>
 		The account information that was returned by this command in order from left to right
 		consists of the following colon separated data:
 		</p><div class="itemizedlist"><ul type="disc"><li><p>Login ID.</p></li><li><p>UNIX UID.</p></li><li><p>Microsoft LanManager password hash (password converted to upper-case then hashed.</p></li><li><p>Microsoft NT password hash (hash of the case-preserved password).</p></li><li><p>Samba SAM Account Flags.</p></li><li><p>The LCT data (password last change time).</p></li></ul></div><p>
-<a class="indexterm" name="id2613411"></a>
-<a class="indexterm" name="id2613418"></a>
+<a class="indexterm" name="id378257"></a>
+<a class="indexterm" name="id378264"></a>
 		The Account Flags parameters are documented in the <code class="literal">pdbedit</code> man page, and are
 		briefly documented in <a class="link" href="passdb.html#TOSHARG-acctflags" title="Account Flags Management">the Account Flags Management section</a>.
 		</p><p>
-<a class="indexterm" name="id2613445"></a>
+<a class="indexterm" name="id378289"></a>
 		The LCT data consists of 8 hexadecimal characters representing the time since January 1, 1970, of
 		the time when the password was last changed.
-		</p></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id2613456"></a>Adding User Accounts</h5></div></div></div><p>
-<a class="indexterm" name="id2613464"></a>
-<a class="indexterm" name="id2613471"></a>
-<a class="indexterm" name="id2613478"></a>
-<a class="indexterm" name="id2613485"></a>
-<a class="indexterm" name="id2613492"></a>
+		</p></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id378299"></a>Adding User Accounts</h5></div></div></div><p>
+<a class="indexterm" name="id378307"></a>
+<a class="indexterm" name="id378314"></a>
+<a class="indexterm" name="id378320"></a>
+<a class="indexterm" name="id378327"></a>
+<a class="indexterm" name="id378334"></a>
 		The <code class="literal">pdbedit</code> can be used to add a user account to a standalone server
 		or to a domain. In the example shown here the account for the user <code class="literal">vlaan</code>
 		has been created before attempting to add the SambaSAMAccount.
@@ -802,11 +802,11 @@
 Bad password count  : 0
 Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
 </pre><p>
-		</p></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id2613544"></a>Deleting Accounts</h5></div></div></div><p>
-<a class="indexterm" name="id2613552"></a>
-<a class="indexterm" name="id2613558"></a>
-<a class="indexterm" name="id2613565"></a>
-<a class="indexterm" name="id2613572"></a>
+		</p></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id378376"></a>Deleting Accounts</h5></div></div></div><p>
+<a class="indexterm" name="id378384"></a>
+<a class="indexterm" name="id378390"></a>
+<a class="indexterm" name="id378397"></a>
+<a class="indexterm" name="id378404"></a>
 		An account can be deleted from the SambaSAMAccount database
 </p><pre class="screen">
 <code class="prompt">root# </code> pdbedit -x vlaan
@@ -814,16 +814,16 @@
 		The account is removed without further screen output. The account is removed only from the
 		SambaSAMAccount (passdb backend) database, it is not removed from the UNIX account backend.
 		</p><p>
-<a class="indexterm" name="id2613599"></a>
-<a class="indexterm" name="id2613606"></a>
+<a class="indexterm" name="id378428"></a>
+<a class="indexterm" name="id378435"></a>
 		The use of the NT4 domain user manager to delete an account will trigger the <em class="parameter"><code>delete user
 		script</code></em>, but not the <code class="literal">pdbedit</code> tool.
-		</p></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id2613628"></a>Changing User Accounts</h5></div></div></div><p>
-<a class="indexterm" name="id2613636"></a>
+		</p></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id378456"></a>Changing User Accounts</h5></div></div></div><p>
+<a class="indexterm" name="id378464"></a>
 		Refer to the <code class="literal">pdbedit</code> man page for a full synopsis of all operations
 		that are available with this tool.
 		</p><p>
-<a class="indexterm" name="id2613654"></a>
+<a class="indexterm" name="id378481"></a>
 		An example of a simple change in the user account information is the change of the full name
 		information shown here:
 </p><pre class="screen">
@@ -835,9 +835,9 @@
 ...
 </pre><p>
 		</p><p>
-<a class="indexterm" name="id2613681"></a>
-<a class="indexterm" name="id2613688"></a>
-<a class="indexterm" name="id2613695"></a>
+<a class="indexterm" name="id378505"></a>
+<a class="indexterm" name="id378512"></a>
+<a class="indexterm" name="id378519"></a>
 		Let us assume for a moment that a user's password has expired and the user is unable to
 		change the password at this time. It may be necessary to give the user additional grace time
 		so that it is possible to continue to work with the account and the original password. This
@@ -852,8 +852,8 @@
 Bad password count  : 2
 ...
 </pre><p>
-<a class="indexterm" name="id2613723"></a>
-<a class="indexterm" name="id2613730"></a>
+<a class="indexterm" name="id378542"></a>
+<a class="indexterm" name="id378549"></a>
 		The user has recorded 2 bad logon attempts and the next will lock the account, but the
 		password is also expired. Here is how this account can be reset:
 </p><pre class="screen">
@@ -885,49 +885,49 @@
 Password must change: Fri, 01 Jan 2010 00:00:00 GMT
 ...
 </pre><p>
-<a class="indexterm" name="id2613794"></a>
-<a class="indexterm" name="id2613801"></a>
+<a class="indexterm" name="id378604"></a>
+<a class="indexterm" name="id378611"></a>
 		Refer to the strptime man page for specific time format information.
 		</p><p>
-<a class="indexterm" name="id2613812"></a>
-<a class="indexterm" name="id2613819"></a>
+<a class="indexterm" name="id378622"></a>
+<a class="indexterm" name="id378628"></a>
 		Please refer to the pdbedit man page for further information relating to SambaSAMAccount
 		management.
 		</p><div class="sect5" lang="en"><div class="titlepage"><div><div><h6 class="title"><a name="TOSHARG-acctflags"></a>Account Flags Management</h6></div></div></div><p>
-<a class="indexterm" name="id2613841"></a>
-<a class="indexterm" name="id2613848"></a>
-<a class="indexterm" name="id2613857"></a>
-<a class="indexterm" name="id2613864"></a>
+<a class="indexterm" name="id378648"></a>
+<a class="indexterm" name="id378655"></a>
+<a class="indexterm" name="id378664"></a>
+<a class="indexterm" name="id378671"></a>
 		The Samba SAM account flags are properly called the ACB (account control block) within
 		the Samba source code. In some parts of the Samba source code they are referred to as the
 		account encode_bits, and also as the account control flags.
 		</p><p>
-<a class="indexterm" name="id2613878"></a>
-<a class="indexterm" name="id2613885"></a>
-<a class="indexterm" name="id2613892"></a>
-<a class="indexterm" name="id2613899"></a>
-<a class="indexterm" name="id2613906"></a>
+<a class="indexterm" name="id378683"></a>
+<a class="indexterm" name="id378690"></a>
+<a class="indexterm" name="id378696"></a>
+<a class="indexterm" name="id378703"></a>
+<a class="indexterm" name="id378710"></a>
 		The manual adjustment of user, machine (workstation or server) or an inter-domain trust
 		account account flgas should not be necessary under normal conditions of use of Samba. On the other hand,
 		where this information becomes corrupted for some reason, the ability to correct the damaged data is certainly
 		useful. The tool of choice by which such correction can be affected is the <code class="literal">pdbedit</code> utility.
 		</p><p>
-<a class="indexterm" name="id2613929"></a>
-<a class="indexterm" name="id2613936"></a>
+<a class="indexterm" name="id378729"></a>
+<a class="indexterm" name="id378736"></a>
 		There have been a few requests for information regarding the account flags from developers
 		who are creating their own Samba management tools. An example of a need for information regarding
 		the proper management of the account flags is evident when developing scripts that will be used
 		to manage an LDAP directory.
 		</p><p>
-<a class="indexterm" name="id2613952"></a>
-<a class="indexterm" name="id2613958"></a>
+<a class="indexterm" name="id378749"></a>
+<a class="indexterm" name="id378756"></a>
 		The account flag field can contain up to 16 characters. Presently, only 11 are in use.
 		These are listed in <a class="link" href="passdb.html#accountflags" title="Table 11.2. Samba SAM Account Control Block Flags">Samba SAM Account Control Block Flags</a>.
 		The order in which the flags are specified to the <code class="literal">pdbedit</code> command is not important.
 		In fact, they can be set without problem in any order in the SambaAcctFlags record in the LDAP directory.
 		</p><div class="table"><a name="accountflags"></a><p class="title"><b>Table 11.2. Samba SAM Account Control Block Flags</b></p><div class="table-contents"><table summary="Samba SAM Account Control Block Flags" border="1"><colgroup><col><col></colgroup><thead><tr><th align="center">Flag</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">D</td><td align="left">Account is disabled.</td></tr><tr><td align="center">H</td><td align="left">A home directory is required.</td></tr><tr><td align="center">I</td><td align="left">An inter-domain trust account.</td></tr><tr><td align="center">L</td><td align="left">Account has been auto-locked.</td></tr><tr><td align="center">M</td><td align="left">An MNS (Microsoft network service) logon account.</td></tr><tr><td align="center">N</td><td align="left">Password not required.</td></tr><tr><td align="center">S</td><td align="left">A server trust account.</td></tr><tr><td align="center">T</td><td align="left">Temporary duplicate account entry.</td></tr><tr><td align="center">U</td><td align="left">A normal user account.</td></tr><tr><td align="center">W</td><td align="left">A workstation trust account.</td></tr><tr><td align="center">X</td><td align="left">Password does not expire.</td></tr></tbody></table></div></div><br class="table-break"><p>
-<a class="indexterm" name="id2614187"></a>
-<a class="indexterm" name="id2614194"></a>
+<a class="indexterm" name="id378977"></a>
+<a class="indexterm" name="id378984"></a>
 		An example of use of the <code class="literal">pdbedit</code> utility to set the account control flags
 		is shown here:
 </p><pre class="screen">
@@ -955,7 +955,7 @@
 Bad password count  : 0
 Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
 </pre><p>
-<a class="indexterm" name="id2614234"></a>
+<a class="indexterm" name="id379016"></a>
 	The flags can be reset to the default settings by executing:
 </p><pre class="screen">
 <code class="prompt">root# </code> pdbedit -r -c "[]" jht
@@ -982,9 +982,9 @@
 Bad password count  : 0
 Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
 </pre><p>
-		</p></div></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id2614272"></a>Domain Account Policy Managment</h5></div></div></div><p>
-<a class="indexterm" name="id2614280"></a>
-<a class="indexterm" name="id2614287"></a>
+		</p></div></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id379045"></a>Domain Account Policy Managment</h5></div></div></div><p>
+<a class="indexterm" name="id379053"></a>
+<a class="indexterm" name="id379060"></a>
 		To view the domain account access policies that may be configured execute:
 </p><pre class="screen">
 <code class="prompt">root# </code> pdbedit -P ?
@@ -1032,134 +1032,134 @@
 account policies are not replicated automatically. This may be fixed before Samba 3.0.20 ships or some
 time there after. Please check the WHATSNEW.txt file in the Samba-3 tarball for specific update notiations
 regarding this facility.
-</p></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2614433"></a>Account Import/Export</h4></div></div></div><p>
-		<a class="indexterm" name="id2614441"></a>
-<a class="indexterm" name="id2614448"></a>
-<a class="indexterm" name="id2614455"></a>
+</p></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id379189"></a>Account Import/Export</h4></div></div></div><p>
+		<a class="indexterm" name="id379196"></a>
+<a class="indexterm" name="id379203"></a>
+<a class="indexterm" name="id379210"></a>
 		The <code class="literal">pdbedit</code> tool allows import/export of authentication (account)
 		databases from one backend to another. For example, to import/export accounts from an
 		old <code class="filename">smbpasswd</code> database to a <em class="parameter"><code>tdbsam</code></em>
 		backend:
 		</p><div class="procedure"><ol type="1"><li><p>
-<a class="indexterm" name="id2614492"></a>
+<a class="indexterm" name="id379245"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>pdbedit -i smbpasswd -e tdbsam</code></strong>
 </pre><p>
 			</p></li><li><p>
-<a class="indexterm" name="id2614521"></a>
+<a class="indexterm" name="id379274"></a>
 			Replace the <em class="parameter"><code>smbpasswd</code></em> with <em class="parameter"><code>tdbsam</code></em> in the
 			<em class="parameter"><code>passdb backend</code></em> configuration in <code class="filename">smb.conf</code>.
-			</p></li></ol></div></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2614558"></a>Password Backends</h2></div></div></div><p>
-<a class="indexterm" name="id2614566"></a>
-<a class="indexterm" name="id2614573"></a>
+			</p></li></ol></div></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id379310"></a>Password Backends</h2></div></div></div><p>
+<a class="indexterm" name="id379318"></a>
+<a class="indexterm" name="id379325"></a>
 Samba offers flexibility in backend account database design. The flexibility is immediately obvious as one
 begins to explore this capability. Recent changes to Samba (since 3.0.23) have removed the mulitple backend
 feature in order to simplify problems that broke some installations. This removal has made the internal
 operation of Samba-3 more consistent and predictable.
 </p><p>
-<a class="indexterm" name="id2614589"></a>
-<a class="indexterm" name="id2614596"></a>
+<a class="indexterm" name="id379338"></a>
+<a class="indexterm" name="id379345"></a>
 Beginning with Samba 3.0.23 it is no longer possible to specify use of mulitple passdb backends. Earlier
 versions of Samba-3 made it possible to specify multiple password backends, and even multiple
 backends of the same type. The multiple passdb backend capability caused many problems with name to SID and
 SID to name ID resolution.  The Samba team wrestled with the challenges and decided that this feature needed
 to be removed.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2614612"></a>Plaintext</h3></div></div></div><p>
-<a class="indexterm" name="id2614619"></a>
-<a class="indexterm" name="id2614626"></a>
-<a class="indexterm" name="id2614633"></a>
-<a class="indexterm" name="id2614640"></a>
-<a class="indexterm" name="id2614647"></a>
-<a class="indexterm" name="id2614654"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id379357"></a>Plaintext</h3></div></div></div><p>
+<a class="indexterm" name="id379364"></a>
+<a class="indexterm" name="id379371"></a>
+<a class="indexterm" name="id379378"></a>
+<a class="indexterm" name="id379385"></a>
+<a class="indexterm" name="id379392"></a>
+<a class="indexterm" name="id379398"></a>
 		Older versions of Samba retrieved user information from the UNIX user database
 		and eventually some other fields from the file <code class="filename">/etc/samba/smbpasswd</code>
 		or <code class="filename">/etc/smbpasswd</code>. When password encryption is disabled, no
 		SMB-specific data is stored at all. Instead, all operations are conducted via the way
 		that the Samba host OS will access its <code class="filename">/etc/passwd</code> database.
 		On most Linux systems, for example, all user and group resolution is done via PAM.
-		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2614688"></a>smbpasswd: Encrypted Password Database</h3></div></div></div><p>
-		<a class="indexterm" name="id2614696"></a>
-<a class="indexterm" name="id2614705"></a>
-<a class="indexterm" name="id2614712"></a>
-<a class="indexterm" name="id2614719"></a>
+		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id379428"></a>smbpasswd: Encrypted Password Database</h3></div></div></div><p>
+		<a class="indexterm" name="id379436"></a>
+<a class="indexterm" name="id379445"></a>
+<a class="indexterm" name="id379452"></a>
+<a class="indexterm" name="id379459"></a>
 		Traditionally, when configuring <a class="link" href="smb.conf.5.html#ENCRYPTPASSWORDS">encrypt passwords = yes</a>
 		in Samba's <code class="filename">smb.conf</code> file, user account information such as username, LM/NT password hashes,
 		password change times, and account flags have been stored in the <code class="filename">smbpasswd(5)</code>
 		file. There are several disadvantages to this approach for sites with large numbers of users
 		(counted in the thousands).
 		</p><div class="itemizedlist"><ul type="disc"><li><p>
-<a class="indexterm" name="id2614762"></a>
+<a class="indexterm" name="id379497"></a>
 		The first problem is that all lookups must be performed sequentially. Given that
 		there are approximately two lookups per domain logon (one during intial logon validation
 		and one for a session connection setup, such as when mapping a network drive or printer), this
 		is a performance bottleneck for large sites. What is needed is an indexed approach
 		such as that used in databases.
 		</p></li><li><p>
-<a class="indexterm" name="id2614780"></a>
-<a class="indexterm" name="id2614786"></a>
-<a class="indexterm" name="id2614793"></a>
-<a class="indexterm" name="id2614800"></a>
-<a class="indexterm" name="id2614807"></a>
+<a class="indexterm" name="id379512"></a>
+<a class="indexterm" name="id379518"></a>
+<a class="indexterm" name="id379525"></a>
+<a class="indexterm" name="id379532"></a>
+<a class="indexterm" name="id379538"></a>
 		The second problem is that administrators who desire to replicate an smbpasswd file
 		to more than one Samba server are left to use external tools such as
 		<code class="literal">rsync(1)</code> and <code class="literal">ssh(1)</code> and write custom,
 		in-house scripts.
 		</p></li><li><p>
-<a class="indexterm" name="id2614832"></a>
-<a class="indexterm" name="id2614839"></a>
-<a class="indexterm" name="id2614846"></a>
-<a class="indexterm" name="id2614853"></a>
-<a class="indexterm" name="id2614860"></a>
+<a class="indexterm" name="id379563"></a>
+<a class="indexterm" name="id379570"></a>
+<a class="indexterm" name="id379577"></a>
+<a class="indexterm" name="id379584"></a>
+<a class="indexterm" name="id379590"></a>
 		Finally, the amount of information that is stored in an smbpasswd entry leaves
 		no room for additional attributes such as a home directory, password expiration time,
 		or even a relative identifier (RID).
 		</p></li></ul></div><p>
-<a class="indexterm" name="id2614877"></a>
-<a class="indexterm" name="id2614884"></a>
-<a class="indexterm" name="id2614891"></a>
-<a class="indexterm" name="id2614897"></a>
+<a class="indexterm" name="id379606"></a>
+<a class="indexterm" name="id379612"></a>
+<a class="indexterm" name="id379619"></a>
+<a class="indexterm" name="id379626"></a>
 		As a result of these deficiencies, a more robust means of storing user attributes
 		used by smbd was developed. The API that defines access to user accounts
 		is commonly referred to as the samdb interface (previously, this was called the passdb
 		API and is still so named in the Samba source code trees).
 		</p><p>
-<a class="indexterm" name="id2614913"></a>
-<a class="indexterm" name="id2614920"></a>
-<a class="indexterm" name="id2614927"></a>
-<a class="indexterm" name="id2614934"></a>
-<a class="indexterm" name="id2614940"></a>
+<a class="indexterm" name="id379638"></a>
+<a class="indexterm" name="id379645"></a>
+<a class="indexterm" name="id379652"></a>
+<a class="indexterm" name="id379659"></a>
+<a class="indexterm" name="id379666"></a>
 		Samba provides an enhanced set of passdb backends that overcome the deficiencies
 		of the smbpasswd plaintext database. These are tdbsam and ldapsam.
 		Of these, ldapsam will be of most interest to large corporate or enterprise sites.
-		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2614953"></a>tdbsam</h3></div></div></div><p>
-		<a class="indexterm" name="id2614961"></a>
-<a class="indexterm" name="id2614970"></a>
-<a class="indexterm" name="id2614979"></a>
+		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id379677"></a>tdbsam</h3></div></div></div><p>
+		<a class="indexterm" name="id379685"></a>
+<a class="indexterm" name="id379694"></a>
+<a class="indexterm" name="id379703"></a>
 		Samba can store user and machine account data in a &#8220;<span class="quote">TDB</span>&#8221; (trivial database).
 		Using this backend does not require any additional configuration. This backend is
 		recommended for new installations that do not require LDAP.
 		</p><p>
-<a class="indexterm" name="id2614997"></a>
-<a class="indexterm" name="id2615004"></a>
-<a class="indexterm" name="id2615010"></a>
-<a class="indexterm" name="id2615017"></a>
+<a class="indexterm" name="id379718"></a>
+<a class="indexterm" name="id379725"></a>
+<a class="indexterm" name="id379731"></a>
+<a class="indexterm" name="id379738"></a>
 		As a general guide, the Samba Team does not recommend using the tdbsam backend for sites
 		that have 250 or more users. Additionally, tdbsam is not capable of scaling for use
 		in sites that require PDB/BDC implementations that require replication of the account
 		database. Clearly, for reason of scalability, the use of ldapsam should be encouraged.
 		</p><p>
-<a class="indexterm" name="id2615033"></a>
-<a class="indexterm" name="id2615040"></a>
-<a class="indexterm" name="id2615047"></a>
+<a class="indexterm" name="id379751"></a>
+<a class="indexterm" name="id379758"></a>
+<a class="indexterm" name="id379765"></a>
 		The recommendation of a 250-user limit is purely based on the notion that this
 		would generally involve a site that has routed networks, possibly spread across
 		more than one physical location. The Samba Team has not at this time established
 		the performance-based scalability limits of the tdbsam architecture.
 		</p><p>
-<a class="indexterm" name="id2615062"></a>
-<a class="indexterm" name="id2615069"></a>
-<a class="indexterm" name="id2615076"></a>
-<a class="indexterm" name="id2615083"></a>
+<a class="indexterm" name="id379777"></a>
+<a class="indexterm" name="id379784"></a>
+<a class="indexterm" name="id379791"></a>
+<a class="indexterm" name="id379798"></a>
 		There are sites that have thousands of users and yet require only one server.
 		One site recently reported having 4,500 user accounts on one UNIX system and
 		reported excellent performance with the <code class="literal">tdbsam</code> passdb backend.
@@ -1167,26 +1167,26 @@
 		is not one pertaining to a limitation in the TDB storage system, it is based
 		only on the need for a reliable distribution mechanism for the SambaSAMAccount
 		backend.
-		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2615111"></a>ldapsam</h3></div></div></div><p>
-<a class="indexterm" name="id2615119"></a>
-<a class="indexterm" name="id2615126"></a>
-		<a class="indexterm" name="id2615132"></a>
+		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id379822"></a>ldapsam</h3></div></div></div><p>
+<a class="indexterm" name="id379830"></a>
+<a class="indexterm" name="id379837"></a>
+		<a class="indexterm" name="id379844"></a>
 		There are a few points to stress that the ldapsam does not provide. The LDAP
 		support referred to in this documentation does not include:
 		</p><div class="itemizedlist"><ul type="disc"><li><p>A means of retrieving user account information from
 			a Windows 200x Active Directory server.</p></li><li><p>A means of replacing /etc/passwd.</p></li></ul></div><p>
-<a class="indexterm" name="id2615162"></a>
-<a class="indexterm" name="id2615168"></a>
-<a class="indexterm" name="id2615175"></a>
-<a class="indexterm" name="id2615181"></a>
+<a class="indexterm" name="id379871"></a>
+<a class="indexterm" name="id379877"></a>
+<a class="indexterm" name="id379884"></a>
+<a class="indexterm" name="id379890"></a>
 		The second item can be accomplished by using LDAP NSS and PAM modules. LGPL versions of these libraries can be
 		obtained from <a class="ulink" href="http://www.padl.com/" target="_top">PADL Software</a>.  More information about the
 		configuration of these packages may be found in <a class="ulink" href="http://safari.oreilly.com/?XmlId=1-56592-491-6" target="_top">
 		<span class="emphasis"><em>LDAP, System Administration</em></span> by Gerald Carter, Chapter 6, Replacing NIS"</a>.
 		</p><p>
-<a class="indexterm" name="id2615212"></a>
-<a class="indexterm" name="id2615219"></a>
-<a class="indexterm" name="id2615226"></a>
+<a class="indexterm" name="id379918"></a>
+<a class="indexterm" name="id379925"></a>
+<a class="indexterm" name="id379932"></a>
 		This document describes how to use an LDAP directory for storing Samba user
 		account information traditionally stored in the smbpasswd(5) file. It is
 		assumed that the reader already has a basic understanding of LDAP concepts
@@ -1199,28 +1199,28 @@
 				Server</a></p></li></ul></div><p>
 		Two additional Samba resources that may prove to be helpful are:
 		</p><div class="itemizedlist"><ul type="disc"><li><p>
-<a class="indexterm" name="id2615307"></a>
+<a class="indexterm" name="id380005"></a>
 			The <a class="ulink" href="http://www.unav.es/cti/ldap-smb/ldap-smb-3-howto.html" target="_top">Samba-PDC-LDAP-HOWTO</a>
 			maintained by Ignacio Coupeau.
 			</p></li><li><p>
-<a class="indexterm" name="id2615326"></a>
-<a class="indexterm" name="id2615333"></a>
-<a class="indexterm" name="id2615340"></a>
+<a class="indexterm" name="id380023"></a>
+<a class="indexterm" name="id380030"></a>
+<a class="indexterm" name="id380036"></a>
 			The NT migration scripts from <a class="ulink" href="http://samba.idealx.org/" target="_top">IDEALX</a> that are
 			geared to manage users and groups in such a Samba-LDAP domain controller configuration.
 			Idealx also produced the smbldap-tools and the Interactive Console Management tool.
-			</p></li></ul></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2615359"></a>Supported LDAP Servers</h4></div></div></div><p>
-<a class="indexterm" name="id2615367"></a>
-<a class="indexterm" name="id2615374"></a>
-<a class="indexterm" name="id2615380"></a>
-<a class="indexterm" name="id2615387"></a>
+			</p></li></ul></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id380053"></a>Supported LDAP Servers</h4></div></div></div><p>
+<a class="indexterm" name="id380061"></a>
+<a class="indexterm" name="id380068"></a>
+<a class="indexterm" name="id380075"></a>
+<a class="indexterm" name="id380081"></a>
 			The LDAP ldapsam code was developed and tested using the OpenLDAP 2.x server and
 			client libraries. The same code should work with Netscape's Directory Server and client SDK.
 			However, there are bound to be compile errors and bugs. These should not be hard to fix.
 			Please submit fixes via the process outlined in <a class="link" href="bugreport.html" title="Chapter 40. Reporting Bugs">Reporting Bugs</a>.
 			</p><p>
 			Samba is capable of working with any standards-compliant LDAP server.
-			</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2615414"></a>Schema and Relationship to the RFC 2307 posixAccount</h4></div></div></div><p>
+			</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id380104"></a>Schema and Relationship to the RFC 2307 posixAccount</h4></div></div></div><p>
 			Samba-3.0 includes the necessary schema file for OpenLDAP 2.x in the
 			<code class="filename">examples/LDAP/samba.schema</code> directory of the source code distribution
 			tarball. The schema entry for the sambaSamAccount ObjectClass is shown here:
@@ -1236,21 +1236,21 @@
           sambaPrimaryGroupSID $ sambaDomainName ))
 </pre><p>
 			</p><p>
-<a class="indexterm" name="id2615459"></a>
-<a class="indexterm" name="id2615466"></a>
-<a class="indexterm" name="id2615473"></a>
+<a class="indexterm" name="id380138"></a>
+<a class="indexterm" name="id380145"></a>
+<a class="indexterm" name="id380152"></a>
 			The <code class="filename">samba.schema</code> file has been formatted for OpenLDAP 2.0/2.1.
 			The Samba Team owns the OID space used by the above schema and recommends its use.
 			If you translate the schema to be used with Netscape DS, please submit the modified
 			schema file as a patch to <a class="ulink" href="mailto:jerry at samba.org" target="_top">jerry at samba.org</a>.
 			</p><p>
-<a class="indexterm" name="id2615499"></a>
-<a class="indexterm" name="id2615506"></a>
-<a class="indexterm" name="id2615513"></a>
-<a class="indexterm" name="id2615520"></a>
-<a class="indexterm" name="id2615527"></a>
-<a class="indexterm" name="id2615533"></a>
-<a class="indexterm" name="id2615540"></a>
+<a class="indexterm" name="id380176"></a>
+<a class="indexterm" name="id380182"></a>
+<a class="indexterm" name="id380189"></a>
+<a class="indexterm" name="id380196"></a>
+<a class="indexterm" name="id380203"></a>
+<a class="indexterm" name="id380210"></a>
+<a class="indexterm" name="id380216"></a>
 			Just as the smbpasswd file is meant to store information that provides information
 			additional to  a user's <code class="filename">/etc/passwd</code> entry, so is the sambaSamAccount
 			object meant to supplement the UNIX user account information. A sambaSamAccount is an
@@ -1259,15 +1259,15 @@
 			for Samba account handling. However, there are several fields (e.g., uid) that overlap
 			with the posixAccount ObjectClass outlined in RFC 2307. This is by design.
 			</p><p>
-<a class="indexterm" name="id2615569"></a>
-<a class="indexterm" name="id2615576"></a>
-<a class="indexterm" name="id2615583"></a>
-<a class="indexterm" name="id2615590"></a>
-<a class="indexterm" name="id2615597"></a>
-<a class="indexterm" name="id2615604"></a>
-<a class="indexterm" name="id2615610"></a>
-<a class="indexterm" name="id2615617"></a>
-<a class="indexterm" name="id2615624"></a>
+<a class="indexterm" name="id380240"></a>
+<a class="indexterm" name="id380247"></a>
+<a class="indexterm" name="id380254"></a>
+<a class="indexterm" name="id380261"></a>
+<a class="indexterm" name="id380268"></a>
+<a class="indexterm" name="id380274"></a>
+<a class="indexterm" name="id380281"></a>
+<a class="indexterm" name="id380288"></a>
+<a class="indexterm" name="id380295"></a>
 			In order to store all user account information (UNIX and Samba) in the directory,
 			it is necessary to use the sambaSamAccount and posixAccount ObjectClasses in
 			combination. However, <code class="literal">smbd</code> will still obtain the user's UNIX account
@@ -1276,11 +1276,11 @@
 			and functioning correctly. This division of information makes it possible to
 			store all Samba account information in LDAP, but still maintain UNIX account
 			information in NIS while the network is transitioning to a full LDAP infrastructure.
-			</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2615649"></a>OpenLDAP Configuration</h4></div></div></div><p>
-<a class="indexterm" name="id2615657"></a>
-<a class="indexterm" name="id2615664"></a>
-<a class="indexterm" name="id2615671"></a>
-<a class="indexterm" name="id2615678"></a>
+			</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id380315"></a>OpenLDAP Configuration</h4></div></div></div><p>
+<a class="indexterm" name="id380322"></a>
+<a class="indexterm" name="id380329"></a>
+<a class="indexterm" name="id380336"></a>
+<a class="indexterm" name="id380343"></a>
 		To include support for the sambaSamAccount object in an OpenLDAP directory
 		server, first copy the samba.schema file to slapd's configuration directory.
 		The samba.schema file can be found in the directory <code class="filename">examples/LDAP</code>
@@ -1289,14 +1289,14 @@
 <code class="prompt">root# </code><strong class="userinput"><code>cp samba.schema /etc/openldap/schema/</code></strong>
 </pre><p>
 		</p><p>
-<a class="indexterm" name="id2615714"></a>
-<a class="indexterm" name="id2615721"></a>
-<a class="indexterm" name="id2615728"></a>
-<a class="indexterm" name="id2615735"></a>
-<a class="indexterm" name="id2615742"></a>
-<a class="indexterm" name="id2615749"></a>
-<a class="indexterm" name="id2615756"></a>
-<a class="indexterm" name="id2615762"></a>
+<a class="indexterm" name="id380377"></a>
+<a class="indexterm" name="id380384"></a>
+<a class="indexterm" name="id380390"></a>
+<a class="indexterm" name="id380397"></a>
+<a class="indexterm" name="id380404"></a>
+<a class="indexterm" name="id380410"></a>
+<a class="indexterm" name="id380417"></a>
+<a class="indexterm" name="id380424"></a>
 		Next, include the <code class="filename">samba.schema</code> file in <code class="filename">slapd.conf</code>.
 		The sambaSamAccount object contains two attributes that depend on other schema
 		files. The <em class="parameter"><code>uid</code></em> attribute is defined in <code class="filename">cosine.schema</code> and
@@ -1316,10 +1316,10 @@
 ....
 </pre><p>
 		</p><p>
-<a class="indexterm" name="id2615830"></a>
-<a class="indexterm" name="id2615837"></a>
-<a class="indexterm" name="id2615844"></a>
-<a class="indexterm" name="id2615851"></a>
+<a class="indexterm" name="id380486"></a>
+<a class="indexterm" name="id380493"></a>
+<a class="indexterm" name="id380500"></a>
+<a class="indexterm" name="id380506"></a>
 		It is recommended that you maintain some indices on some of the most useful attributes,
 		as in the following example, to speed up searches made on sambaSamAccount ObjectClasses
 		(and possibly posixAccount and posixGroup as well):
@@ -1357,11 +1357,11 @@
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>/etc/init.d/slapd restart</code></strong>
 </pre><p>
-		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2615921"></a>Initialize the LDAP Database</h4></div></div></div><p>
-<a class="indexterm" name="id2615929"></a>
-<a class="indexterm" name="id2615936"></a>
-<a class="indexterm" name="id2615943"></a>
-<a class="indexterm" name="id2615950"></a>
+		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id380567"></a>Initialize the LDAP Database</h4></div></div></div><p>
+<a class="indexterm" name="id380575"></a>
+<a class="indexterm" name="id380582"></a>
+<a class="indexterm" name="id380588"></a>
+<a class="indexterm" name="id380595"></a>
 		Before you can add accounts to the LDAP database, you must create the account containers
 		that they will be stored in. The following LDIF file should be modified to match your
 		needs (DNS entries, and so on):
@@ -1423,15 +1423,15 @@
 userPassword: {SSHA}c3ZM9tBaBo9autm1dL3waDS21+JSfQVz
 </pre><p>
 		</p><p>
-<a class="indexterm" name="id2615992"></a>
-<a class="indexterm" name="id2615999"></a>
+<a class="indexterm" name="id380624"></a>
+<a class="indexterm" name="id380631"></a>
 		The userPassword shown above should be generated using <code class="literal">slappasswd</code>.
 		</p><p>
-<a class="indexterm" name="id2616016"></a>
-<a class="indexterm" name="id2616023"></a>
+<a class="indexterm" name="id380648"></a>
+<a class="indexterm" name="id380654"></a>
 		The following command will then load the contents of the LDIF file into the LDAP
 		database.
-<a class="indexterm" name="id2616032"></a>
+<a class="indexterm" name="id380662"></a>
 </p><pre class="screen">
 <code class="prompt">$ </code><strong class="userinput"><code>slapadd -v -l initldap.dif</code></strong>
 </pre><p>
@@ -1439,16 +1439,16 @@
 		Do not forget to secure your LDAP server with an adequate access control list
 		as well as an admin password.
 		</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2616064"></a>
+<a class="indexterm" name="id380693"></a>
 		Before Samba can access the LDAP server, you need to store the LDAP admin password
 		in the Samba-3 <code class="filename">secrets.tdb</code> database by:
-<a class="indexterm" name="id2616079"></a>
+<a class="indexterm" name="id380707"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>smbpasswd -w <em class="replaceable"><code>secret</code></em></code></strong>
 </pre><p>
-		</p></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2616106"></a>Configuring Samba</h4></div></div></div><p>
-<a class="indexterm" name="id2616114"></a>
-<a class="indexterm" name="id2616121"></a>
+		</p></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id380734"></a>Configuring Samba</h4></div></div></div><p>
+<a class="indexterm" name="id380742"></a>
+<a class="indexterm" name="id380749"></a>
 			The following parameters are available in <code class="filename">smb.conf</code> only if your version of Samba was built with
 			LDAP support. Samba automatically builds with LDAP support if the LDAP libraries are found. The
 			best method to verify that Samba was built with LDAP support is:
@@ -1467,19 +1467,19 @@
 			that includes <code class="literal">HAVE_LDAP_H</code> it is necessary to discover why the LDAP headers
 			and libraries were not found during compilation.
 			</p><p>LDAP-related smb.conf options include these:
-			</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2616178"></a><em class="parameter"><code>passdb backend = ldapsam:url</code></em></td></tr><tr><td><a class="indexterm" name="id2616190"></a></td></tr><tr><td><a class="indexterm" name="id2616196"></a></td></tr><tr><td><a class="indexterm" name="id2616203"></a></td></tr><tr><td><a class="indexterm" name="id2616210"></a></td></tr><tr><td><a class="indexterm" name="id2616217"></a></td></tr><tr><td><a class="indexterm" name="id2616224"></a></td></tr><tr><td><a class="indexterm" name="id2616231"></a></td></tr><tr><td><a class="indexterm" name="id2616238"></a></td></tr><tr><td><a class="indexterm" name="id2616245"></a></td></tr><tr><td><a class="indexterm" name="id2616252"></a></td></tr><tr><td><a class="indexterm" name="id2616258"></a></td></tr><tr><td><a class="indexterm" name="id2616266"></a></td></tr><tr><td><a class="indexterm" name="id2616272"></a></td></tr></table><p>
+			</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id380799"></a><em class="parameter"><code>passdb backend = ldapsam:url</code></em></td></tr><tr><td><a class="indexterm" name="id380811"></a></td></tr><tr><td><a class="indexterm" name="id380818"></a></td></tr><tr><td><a class="indexterm" name="id380825"></a></td></tr><tr><td><a class="indexterm" name="id380831"></a></td></tr><tr><td><a class="indexterm" name="id380838"></a></td></tr><tr><td><a class="indexterm" name="id380845"></a></td></tr><tr><td><a class="indexterm" name="id380852"></a></td></tr><tr><td><a class="indexterm" name="id380859"></a></td></tr><tr><td><a class="indexterm" name="id380865"></a></td></tr><tr><td><a class="indexterm" name="id380872"></a></td></tr><tr><td><a class="indexterm" name="id380879"></a></td></tr><tr><td><a class="indexterm" name="id380886"></a></td></tr><tr><td><a class="indexterm" name="id380893"></a></td></tr></table><p>
 			</p><p>
 			These are described in the <code class="filename">smb.conf</code> man page and so are not repeated here. However, an example
 			for use with an LDAP directory is shown in <a class="link" href="passdb.html#confldapex" title="Example 11.2. Configuration with LDAP">the Configuration with LDAP.</a>
-			</p><div class="example"><a name="confldapex"></a><p class="title"><b>Example 11.2. Configuration with LDAP</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2616324"></a><em class="parameter"><code>security = user</code></em></td></tr><tr><td><a class="indexterm" name="id2616336"></a><em class="parameter"><code>encrypt passwords = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2616347"></a><em class="parameter"><code>netbios name = MORIA</code></em></td></tr><tr><td><a class="indexterm" name="id2616359"></a><em class="parameter"><code>workgroup = NOLDOR</code></em></td></tr><tr><td># LDAP related parameters:</td></tr><tr><td># Define the DN used when binding to the LDAP servers.</td></tr><tr><td># The password for this DN is not stored in smb.conf</td></tr><tr><td># Set it using 'smbpasswd -w secret' to store the</td></tr><tr><td># passphrase in the secrets.tdb file.</td></tr><tr><td># If the "ldap admin dn" value changes, it must be reset.</td></tr><tr><td><a class="indexterm" name="id2616396"></a><em class="parameter"><code>ldap admin dn = "cn=Manager,dc=quenya,dc=org"</code></em></td></tr><tr><td># SSL directory connections can be configured by:</td></tr><tr><td># ('off', 'start tls', or 'on' (default))</td></tr><tr><td><a class="indexterm" name="id2616416"></a><em class="parameter"><code>ldap ssl = start tls</code></em></td></tr><tr><td># syntax: passdb backend = ldapsam:ldap://server-name[:port]</td></tr><tr><td><a class="indexterm" name="id2616432"></a><em class="parameter"><code>passdb backend = ldapsam:ldap://frodo.quenya.org</code></em></td></tr><tr><td># smbpasswd -x delete the entire dn-entry</td></tr><tr><td><a class="indexterm" name="id2616448"></a><em class="parameter"><code>ldap delete dn = no</code></em></td></tr><tr><td># The machine and user suffix are added to the base suffix</td></tr><tr><td># wrote WITHOUT quotes. NULL suffixes by default</td></tr><tr><td><a class="indexterm" name="id2616468"></a><em class="parameter"><code>ldap user suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id2616480"></a><em class="parameter"><code>ldap group suffix = ou=Groups</code></em></td></tr><tr><td><a class="indexterm" name="id2616492"></a><em class="parameter"><code>ldap machine suffix = ou=Computers</code></em></td></tr><tr><td># Trust UNIX account information in LDAP</td></tr><tr><td>#  (see the smb.conf man page for details)</td></tr><tr><td># Specify the base DN to use when searching the directory</td></tr><tr><td><a class="indexterm" name="id2616517"></a><em class="parameter"><code>ldap suffix = dc=quenya,dc=org</code></em></td></tr></table></div></div><br class="example-break"></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2616531"></a>Accounts and Groups Management</h4></div></div></div><p>
-			<a class="indexterm" name="id2616539"></a>
-			<a class="indexterm" name="id2616546"></a>
+			</p><div class="example"><a name="confldapex"></a><p class="title"><b>Example 11.2. Configuration with LDAP</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id380942"></a><em class="parameter"><code>security = user</code></em></td></tr><tr><td><a class="indexterm" name="id380954"></a><em class="parameter"><code>encrypt passwords = yes</code></em></td></tr><tr><td><a class="indexterm" name="id380965"></a><em class="parameter"><code>netbios name = MORIA</code></em></td></tr><tr><td><a class="indexterm" name="id380977"></a><em class="parameter"><code>workgroup = NOLDOR</code></em></td></tr><tr><td># LDAP related parameters:</td></tr><tr><td># Define the DN used when binding to the LDAP servers.</td></tr><tr><td># The password for this DN is not stored in smb.conf</td></tr><tr><td># Set it using 'smbpasswd -w secret' to store the</td></tr><tr><td># passphrase in the secrets.tdb file.</td></tr><tr><td># If the "ldap admin dn" value changes, it must be reset.</td></tr><tr><td><a class="indexterm" name="id381010"></a><em class="parameter"><code>ldap admin dn = "cn=Manager,dc=quenya,dc=org"</code></em></td></tr><tr><td># SSL directory connections can be configured by:</td></tr><tr><td># ('off', 'start tls', or 'on' (default))</td></tr><tr><td><a class="indexterm" name="id381030"></a><em class="parameter"><code>ldap ssl = start tls</code></em></td></tr><tr><td># syntax: passdb backend = ldapsam:ldap://server-name[:port]</td></tr><tr><td><a class="indexterm" name="id381045"></a><em class="parameter"><code>passdb backend = ldapsam:ldap://frodo.quenya.org</code></em></td></tr><tr><td># smbpasswd -x delete the entire dn-entry</td></tr><tr><td><a class="indexterm" name="id381060"></a><em class="parameter"><code>ldap delete dn = no</code></em></td></tr><tr><td># The machine and user suffix are added to the base suffix</td></tr><tr><td># wrote WITHOUT quotes. NULL suffixes by default</td></tr><tr><td><a class="indexterm" name="id381080"></a><em class="parameter"><code>ldap user suffix = ou=People</code></em></td></tr><tr><td><a class="indexterm" name="id381091"></a><em class="parameter"><code>ldap group suffix = ou=Groups</code></em></td></tr><tr><td><a class="indexterm" name="id381103"></a><em class="parameter"><code>ldap machine suffix = ou=Computers</code></em></td></tr><tr><td># Trust UNIX account information in LDAP</td></tr><tr><td>#  (see the smb.conf man page for details)</td></tr><tr><td># Specify the base DN to use when searching the directory</td></tr><tr><td><a class="indexterm" name="id381126"></a><em class="parameter"><code>ldap suffix = dc=quenya,dc=org</code></em></td></tr></table></div></div><br class="example-break"></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id381139"></a>Accounts and Groups Management</h4></div></div></div><p>
+			<a class="indexterm" name="id381147"></a>
+			<a class="indexterm" name="id381154"></a>
 			Because user accounts are managed through the sambaSamAccount ObjectClass, you should
 			modify your existing administration tools to deal with sambaSamAccount attributes.
 			</p><p>
-<a class="indexterm" name="id2616562"></a>
-<a class="indexterm" name="id2616568"></a>
-<a class="indexterm" name="id2616576"></a>
+<a class="indexterm" name="id381168"></a>
+<a class="indexterm" name="id381175"></a>
+<a class="indexterm" name="id381182"></a>
 			Machine accounts are managed with the sambaSamAccount ObjectClass, just
 			like user accounts. However, it is up to you to store those accounts
 			in a different tree of your LDAP namespace. You should use
@@ -1488,36 +1488,36 @@
 			NSS and PAM accordingly (usually, in the <code class="filename">/etc/openldap/sldap.conf</code>
 			configuration file).
 			</p><p>
-<a class="indexterm" name="id2616605"></a>
-<a class="indexterm" name="id2616612"></a>
-<a class="indexterm" name="id2616619"></a>
-<a class="indexterm" name="id2616626"></a>
+<a class="indexterm" name="id381208"></a>
+<a class="indexterm" name="id381215"></a>
+<a class="indexterm" name="id381222"></a>
+<a class="indexterm" name="id381228"></a>
 			In Samba-3, the group management system is based on POSIX
 			groups. This means that Samba makes use of the posixGroup ObjectClass.
 			For now, there is no NT-like group system management (global and local
 			groups). Samba-3 knows only about <code class="constant">Domain Groups</code>
 			and, unlike MS Windows 2000 and Active Directory, Samba-3 does not
 			support nested groups.
-			</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2616644"></a>Security and sambaSamAccount</h4></div></div></div><p>
-<a class="indexterm" name="id2616652"></a>
+			</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id381244"></a>Security and sambaSamAccount</h4></div></div></div><p>
+<a class="indexterm" name="id381252"></a>
 			There are two important points to remember when discussing the security
 			of sambaSAMAccount entries in the directory.
 			</p><div class="itemizedlist"><ul type="disc"><li><p><span class="emphasis"><em>Never</em></span> retrieve the SambaLMPassword or
-<a class="indexterm" name="id2616671"></a>
+<a class="indexterm" name="id381269"></a>
 				SambaNTPassword attribute values over an unencrypted LDAP session.</p></li><li><p><span class="emphasis"><em>Never</em></span> allow non-admin users to
 				view the SambaLMPassword or SambaNTPassword attribute values.</p></li></ul></div><p>
-<a class="indexterm" name="id2616692"></a>
-<a class="indexterm" name="id2616698"></a>
-<a class="indexterm" name="id2616705"></a>
+<a class="indexterm" name="id381288"></a>
+<a class="indexterm" name="id381295"></a>
+<a class="indexterm" name="id381302"></a>
 			These password hashes are clear-text equivalents and can be used to impersonate
 			the user without deriving the original clear-text strings. For more information
 			on the details of LM/NT password hashes, refer to <a class="link" href="passdb.html" title="Chapter 11. Account Information Databases">the
 			Account Information Database section</a>.
 			</p><p>
-<a class="indexterm" name="id2616727"></a>
-<a class="indexterm" name="id2616734"></a>
-<a class="indexterm" name="id2616741"></a>
-<a class="indexterm" name="id2616747"></a>
+<a class="indexterm" name="id381321"></a>
+<a class="indexterm" name="id381328"></a>
+<a class="indexterm" name="id381334"></a>
+<a class="indexterm" name="id381341"></a>
 			To remedy the first security issue, the <a class="link" href="smb.conf.5.html#LDAPSSL">ldap ssl</a> <code class="filename">smb.conf</code>
 			parameter defaults to require an encrypted session (<a class="link" href="smb.conf.5.html#LDAPSSL">ldap    ssl = on</a>) using the default port of <code class="constant">636</code> when
 			contacting the directory server. When using an OpenLDAP server, it
@@ -1525,16 +1525,16 @@
 			In either case, you are strongly encouraged to use secure communications protocols
 			(so do not set <a class="link" href="smb.conf.5.html#LDAPSSL">ldap ssl = off</a>).
 			</p><p>
-<a class="indexterm" name="id2616808"></a>
-<a class="indexterm" name="id2616814"></a>
-<a class="indexterm" name="id2616821"></a>
+<a class="indexterm" name="id381395"></a>
+<a class="indexterm" name="id381402"></a>
+<a class="indexterm" name="id381409"></a>
 			Note that the LDAPS protocol is deprecated in favor of the LDAPv3 StartTLS
 			extended operation. However, the OpenLDAP library still provides support for
 			the older method of securing communication between clients and servers.
 			</p><p>
-<a class="indexterm" name="id2616835"></a>
-<a class="indexterm" name="id2616842"></a>
-<a class="indexterm" name="id2616849"></a>
+<a class="indexterm" name="id381421"></a>
+<a class="indexterm" name="id381428"></a>
+<a class="indexterm" name="id381434"></a>
 			The second security precaution is to prevent non-administrative users from
 			harvesting password hashes from the directory. This can be done using the
 			following ACL in <code class="filename">slapd.conf</code>:
@@ -1545,7 +1545,7 @@
      by dn="cn=Samba Admin,ou=People,dc=quenya,dc=org" write
      by * none
 </pre><p>
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2616879"></a>LDAP Special Attributes for sambaSamAccounts</h4></div></div></div><p> The sambaSamAccount ObjectClass is composed of the attributes shown in next tables: <a class="link" href="passdb.html#attribobjclPartA" title="Table 11.3. Attributes in the sambaSamAccount ObjectClass (LDAP), Part A">Part A</a>, and <a class="link" href="passdb.html#attribobjclPartB" title="Table 11.4. Attributes in the sambaSamAccount ObjectClass (LDAP), Part B">Part B</a>.
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id381461"></a>LDAP Special Attributes for sambaSamAccounts</h4></div></div></div><p> The sambaSamAccount ObjectClass is composed of the attributes shown in next tables: <a class="link" href="passdb.html#attribobjclPartA" title="Table 11.3. Attributes in the sambaSamAccount ObjectClass (LDAP), Part A">Part A</a>, and <a class="link" href="passdb.html#attribobjclPartB" title="Table 11.4. Attributes in the sambaSamAccount ObjectClass (LDAP), Part B">Part B</a>.
 			</p><div class="table"><a name="attribobjclPartA"></a><p class="title"><b>Table 11.3. Attributes in the sambaSamAccount ObjectClass (LDAP), Part A</b></p><div class="table-contents"><table summary="Attributes in the sambaSamAccount ObjectClass (LDAP), Part A" border="1"><colgroup><col align="left"><col align="justify"></colgroup><tbody><tr><td align="left"><code class="constant">sambaLMPassword</code></td><td align="justify">The LanMan password 16-byte hash stored as a character
 						representation of a hexadecimal string.</td></tr><tr><td align="left"><code class="constant">sambaNTPassword</code></td><td align="justify">The NT password 16-byte hash stored as a character
 						representation of a hexadecimal string.</td></tr><tr><td align="left"><code class="constant">sambaPwdLastSet</code></td><td align="justify">The integer time in seconds since 1970 when the
@@ -1580,16 +1580,16 @@
 				</td></tr><tr><td align="left"><code class="constant">sambaSID</code></td><td align="justify">The security identifier(SID) of the user.
 				The Windows equivalent of UNIX UIDs.</td></tr><tr><td align="left"><code class="constant">sambaPrimaryGroupSID</code></td><td align="justify">The security identifier (SID) of the primary group
 				of the user.</td></tr><tr><td align="left"><code class="constant">sambaDomainName</code></td><td align="justify">Domain the user is part of.</td></tr></tbody></table></div></div><br class="table-break"><p>
-<a class="indexterm" name="id2617228"></a>
-<a class="indexterm" name="id2617235"></a>
+<a class="indexterm" name="id381779"></a>
+<a class="indexterm" name="id381785"></a>
 			The majority of these parameters are only used when Samba is acting as a PDC of
 			a domain (refer to <a class="link" href="samba-pdc.html" title="Chapter 4. Domain Control">Domain Control</a>, for details on
 			how to configure Samba as a PDC). The following four attributes
 			are only stored with the sambaSamAccount entry if the values are non-default values:
-			</p><div class="itemizedlist"><a class="indexterm" name="id2617257"></a><a class="indexterm" name="id2617264"></a><a class="indexterm" name="id2617270"></a><a class="indexterm" name="id2617277"></a><ul type="disc"><li><p>sambaHomePath</p></li><li><p>sambaLogonScript</p></li><li><p>sambaProfilePath</p></li><li><p>sambaHomeDrive</p></li></ul></div><p>
-<a class="indexterm" name="id2617306"></a>
-<a class="indexterm" name="id2617313"></a>
-<a class="indexterm" name="id2617320"></a>
+			</p><div class="itemizedlist"><a class="indexterm" name="id381805"></a><a class="indexterm" name="id381812"></a><a class="indexterm" name="id381818"></a><a class="indexterm" name="id381825"></a><ul type="disc"><li><p>sambaHomePath</p></li><li><p>sambaLogonScript</p></li><li><p>sambaProfilePath</p></li><li><p>sambaHomeDrive</p></li></ul></div><p>
+<a class="indexterm" name="id381853"></a>
+<a class="indexterm" name="id381860"></a>
+<a class="indexterm" name="id381867"></a>
 			These attributes are only stored with the sambaSamAccount entry if
 			the values are non-default values. For example, assume MORIA has now been
 			configured as a PDC and that <a class="link" href="smb.conf.5.html#LOGONHOME">logon home = \\%L\%u</a> was defined in
@@ -1600,7 +1600,7 @@
 			of the <a class="link" href="smb.conf.5.html#LOGONHOME">logon home</a> parameter is used in its place. Samba
 			will only write the attribute value to the directory entry if the value is
 			something other than the default (e.g., <code class="filename">\\MOBY\becky</code>).
-			</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2617393"></a>Example LDIF Entries for a sambaSamAccount</h4></div></div></div><p>
+			</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id381932"></a>Example LDIF Entries for a sambaSamAccount</h4></div></div></div><p>
 			The following is a working LDIF that demonstrates the use of the SambaSamAccount ObjectClass:
 </p><pre class="programlisting">
 dn: uid=guest2, ou=People,dc=quenya,dc=org
@@ -1645,7 +1645,7 @@
 sambaPwdMustChange: 2147483647
 sambaNTPassword: 878D8014606CDA29677A44EFA1353FC7
 </pre><p>
-		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2617441"></a>Password Synchronization</h4></div></div></div><p>
+		</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id381969"></a>Password Synchronization</h4></div></div></div><p>
 		Samba-3 and later can update the non-Samba (LDAP) password stored with an account. When
 		using pam_ldap, this allows changing both UNIX and Windows passwords at once.
 		</p><p>The <a class="link" href="smb.conf.5.html#LDAPPASSWDSYNC">ldap passwd sync</a> options can have the  values shown in
@@ -1654,7 +1654,7 @@
 			       and the <code class="constant">password</code> fields.</p></td></tr><tr><td align="left">no</td><td align="justify"><p>Only update <code class="constant">SambaNTPassword</code> and
 					<code class="constant">SambaLMPassword</code>.</p></td></tr><tr><td align="left">only</td><td align="justify"><p>Only update the LDAP password and let the LDAP server
 			worry about the other fields.  This option is only available on some LDAP servers and
-			only when the LDAP server supports LDAP_EXOP_X_MODIFY_PASSWD.</p></td></tr></tbody></table></div></div><br class="table-break"><p>More information can be found in the <code class="filename">smb.conf</code> man page.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2617594"></a>Using OpenLDAP Overlay for Password Syncronization</h4></div></div></div><p>
+			only when the LDAP server supports LDAP_EXOP_X_MODIFY_PASSWD.</p></td></tr></tbody></table></div></div><br class="table-break"><p>More information can be found in the <code class="filename">smb.conf</code> man page.</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id382114"></a>Using OpenLDAP Overlay for Password Syncronization</h4></div></div></div><p>
 		Howard Chu has written a special overlay called <code class="literal">smbk5pwd</code>. This tool  modifies the
 		<code class="literal">SambaNTPassword</code>, <code class="literal">SambaLMPassword</code> and <code class="literal">Heimdal</code>
 		hashes in an OpenLDAP entry when an LDAP_EXOP_X_MODIFY_PASSWD operation is performed.
@@ -1662,8 +1662,8 @@
 		The overlay is shipped with OpenLDAP-2.3 and can be found in the
 		<code class="filename">contrib/slapd-modules/smbk5pwd</code> subdirectory. This module can also be used with
 		OpenLDAP-2.2.
-		</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2617645"></a>Common Errors</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2617650"></a>Users Cannot Logon</h3></div></div></div><p>&#8220;<span class="quote">I've installed Samba, but now I can't log on with my UNIX account! </span>&#8221;</p><p>Make sure your user has been added to the current Samba <a class="link" href="smb.conf.5.html#PASSDBBACKEND">passdb backend</a>.
-		Read the <a class="link" href="passdb.html#acctmgmttools" title="Account Management Tools">Account Management Tools,</a> for details.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2617688"></a>Configuration of <em class="parameter"><code>auth methods</code></em></h3></div></div></div><p>
+		</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id382162"></a>Common Errors</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id382168"></a>Users Cannot Logon</h3></div></div></div><p>&#8220;<span class="quote">I've installed Samba, but now I can't log on with my UNIX account! </span>&#8221;</p><p>Make sure your user has been added to the current Samba <a class="link" href="smb.conf.5.html#PASSDBBACKEND">passdb backend</a>.
+		Read the <a class="link" href="passdb.html#acctmgmttools" title="Account Management Tools">Account Management Tools,</a> for details.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id382202"></a>Configuration of <em class="parameter"><code>auth methods</code></em></h3></div></div></div><p>
 	When explicitly setting an <a class="link" href="smb.conf.5.html#AUTHMETHODS">auth methods</a> parameter,
 	<em class="parameter"><code>guest</code></em> must be specified as the first entry on the line 
 	for example, <a class="link" href="smb.conf.5.html#AUTHMETHODS">auth methods = guest sam</a>.

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/pr01.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/pr01.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/pr01.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>About the Cover Artwork</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="next" href="pr02.html" title="Attribution"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">About the Cover Artwork</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="pr02.html">Next</a></td></tr></table><hr></div><div class="preface" lang="en-US"><div class="titlepage"><div><div><h2 class="title"><a name="id2561713"></a>About the Cover Artwork</h2></div></div></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>About the Cover Artwork</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="next" href="pr02.html" title="Attribution"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">About the Cover Artwork</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="pr02.html">Next</a></td></tr></table><hr></div><div class="preface" lang="en-US"><div class="titlepage"><div><div><h2 class="title"><a name="id297914"></a>About the Cover Artwork</h2></div></div></div><p>
 	The cover artwork of this book continues the freedom theme of the first edition of &#8220;<span class="quote">The Official Samba-3
 	HOWTO and Reference Guide</span>&#8221;.  We may look back upon the past to question the motives of those who have
 	gone before us. Seldom do we realise that the past owes us no answer, and despite what we may think of the

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/pr02.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/pr02.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/pr02.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Attribution</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="pr01.html" title="About the Cover Artwork"><link rel="next" href="pr03.html" title="Foreword"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Attribution</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pr01.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="pr03.html">Next</a></td></tr></table><hr></div><div class="preface" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="id2524861"></a>Attribution</h2></div></div></div><p><a class="link" href="install.html" title="Chapter 1. How to Install and Test SAMBA">How to Install and Test SAMBA</a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Attribution</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="pr01.html" title="About the Cover Artwork"><link rel="next" href="pr03.html" title="Foreword"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Attribution</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pr01.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="pr03.html">Next</a></td></tr></table><hr></div><div class="preface" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="id297960"></a>Attribution</h2></div></div></div><p><a class="link" href="install.html" title="Chapter 1. How to Install and Test SAMBA">How to Install and Test SAMBA</a>
 	</p><div class="itemizedlist"><ul type="disc"><li><p>Andrew Tridgell<a class="ulink" href="mailto:tridge at samba.org" target="_top">mailto:tridge at samba.org</a></p></li><li><p>Jelmer R.  Vernooij<a class="ulink" href="mailto:jelmer at samba.org" target="_top">mailto:jelmer at samba.org</a></p></li><li><p>John H.  Terpstra<a class="ulink" href="mailto:jht at samba.org" target="_top">mailto:jht at samba.org</a></p></li><li><p>Karl Auer<a class="ulink" href="mailto:kauer at biplane.com.au" target="_top">mailto:kauer at biplane.com.au</a></p></li><li><p>Dan Shearer<a class="ulink" href="mailto:dan at samba.org" target="_top">mailto:dan at samba.org</a></p></li></ul></div><p>
 </p><p><a class="link" href="FastStart.html" title="Chapter 2. Fast Start: Cure for Impatience">Fast Start: Cure for Impatience</a>
 	</p><div class="itemizedlist"><ul type="disc"><li><p>John H.  Terpstra<a class="ulink" href="mailto:jht at samba.org" target="_top">mailto:jht at samba.org</a></p></li></ul></div><p>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/pr03.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/pr03.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/pr03.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Foreword</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="pr02.html" title="Attribution"><link rel="next" href="TOSHpreface.html" title="Preface"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Foreword</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pr02.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="TOSHpreface.html">Next</a></td></tr></table><hr></div><div class="preface" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="id2572198"></a>Foreword</h2></div></div></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Foreword</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="pr02.html" title="Attribution"><link rel="next" href="TOSHpreface.html" title="Preface"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Foreword</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pr02.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="TOSHpreface.html">Next</a></td></tr></table><hr></div><div class="preface" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="id341015"></a>Foreword</h2></div></div></div><p>
 When John first asked me to write an introductory piece for his latest book, I was somewhat mystified as to
 why he chose me. A conversation with John provided some of the rationale, and he left it to me to fill in the
 <span class="emphasis"><em>rest</em></span> of the story. So, if you are willing to endure a little bit of background, I will

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/problems.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/problems.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/problems.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,40 +1,40 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 39. Analyzing and Solving Samba Problems</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="troubleshooting.html" title="Part V. Troubleshooting"><link rel="prev" href="diagnosis.html" title="Chapter 38. The Samba Checklist"><link rel="next" href="bugreport.html" title="Chapter 40. Reporting Bugs"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 39. Analyzing and Solving Samba Problems</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="diagnosis.html">Prev</a> </td><th width="60%" align="center">Part V. Troubleshooting</th><td width="20%" align="right"> <a accesskey="n" href="bugreport.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="problems"></a>Chapter 39. Analyzing and Solving Samba Problems</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Gerald</span> <span class="othername">(Jerry)</span> <span class="surname">Carter</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jerry at samba.org">jerry at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">David</span> <span class="surname">Bannon</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:dbannon at samba.org">dbannon at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Dan</span> <span class="surname">Shearer</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:dan at samba.org">dan at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">8 Apr 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="problems.html#id2707164">Diagnostics Tools</a></span></dt><dd><dl><dt><span class="sect2"><a href="problems.html#id2707216">Debugging with Samba Itself</a></span></dt><dt><span class="sect2"><a href="problems.html#id2707471">Tcpdump</a></span></dt><dt><span class="sect2"><a href="problems.html#id2707522">Ethereal</a></span></dt><dt><span class="sect2"><a href="problems.html#id2707665">The Windows Network Monitor</a></span></dt></dl></dd><dt><span class="sect1"><a href="problems.html#id2707992">Useful URLs</a></span></dt><dt><span class="sect1"><a href="problems.html#id2708029">Getting Mailing List Help</a></span></dt><dt><span class="sect1"><a href="problems.html#id2708204">How to Get Off the Mailing Lists</a></span></dt></dl></div><p>
-<a class="indexterm" name="id2707138"></a>
-<a class="indexterm" name="id2707145"></a>
-<a class="indexterm" name="id2707152"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 39. Analyzing and Solving Samba Problems</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="troubleshooting.html" title="Part V. Troubleshooting"><link rel="prev" href="diagnosis.html" title="Chapter 38. The Samba Checklist"><link rel="next" href="bugreport.html" title="Chapter 40. Reporting Bugs"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 39. Analyzing and Solving Samba Problems</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="diagnosis.html">Prev</a> </td><th width="60%" align="center">Part V. Troubleshooting</th><td width="20%" align="right"> <a accesskey="n" href="bugreport.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="problems"></a>Chapter 39. Analyzing and Solving Samba Problems</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Gerald</span> <span class="othername">(Jerry)</span> <span class="surname">Carter</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jerry at samba.org">jerry at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">David</span> <span class="surname">Bannon</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:dbannon at samba.org">dbannon at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Dan</span> <span class="surname">Shearer</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:dan at samba.org">dan at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">8 Apr 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="problems.html#id464214">Diagnostics Tools</a></span></dt><dd><dl><dt><span class="sect2"><a href="problems.html#id464263">Debugging with Samba Itself</a></span></dt><dt><span class="sect2"><a href="problems.html#id464508">Tcpdump</a></span></dt><dt><span class="sect2"><a href="problems.html#id464556">Ethereal</a></span></dt><dt><span class="sect2"><a href="problems.html#id464695">The Windows Network Monitor</a></span></dt></dl></dd><dt><span class="sect1"><a href="problems.html#id465001">Useful URLs</a></span></dt><dt><span class="sect1"><a href="problems.html#id465036">Getting Mailing List Help</a></span></dt><dt><span class="sect1"><a href="problems.html#id465191">How to Get Off the Mailing Lists</a></span></dt></dl></div><p>
+<a class="indexterm" name="id464191"></a>
+<a class="indexterm" name="id464198"></a>
+<a class="indexterm" name="id464205"></a>
 There are many sources of information available in the form of mailing lists, RFCs, and documentation. The
 documentation that comes with the Samba distribution contains good explanations of general SMB topics such as
 browsing.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2707164"></a>Diagnostics Tools</h2></div></div></div><p>
-<a class="indexterm" name="id2707172"></a>
-<a class="indexterm" name="id2707178"></a>
-<a class="indexterm" name="id2707185"></a>
-<a class="indexterm" name="id2707192"></a>
-<a class="indexterm" name="id2707199"></a>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id464214"></a>Diagnostics Tools</h2></div></div></div><p>
+<a class="indexterm" name="id464222"></a>
+<a class="indexterm" name="id464229"></a>
+<a class="indexterm" name="id464236"></a>
+<a class="indexterm" name="id464242"></a>
+<a class="indexterm" name="id464249"></a>
 With SMB networking, it is often not immediately clear what the cause is of a certain problem. Samba itself
 provides rather useful information, but in some cases you might have to fall back to using a
 <span class="emphasis"><em>sniffer</em></span>. A sniffer is a program that listens on your LAN, analyzes the data sent on it,
 and displays it on the screen.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2707216"></a>Debugging with Samba Itself</h3></div></div></div><p>
-<a class="indexterm" name="id2707224"></a>
-<a class="indexterm" name="id2707231"></a>
-<a class="indexterm" name="id2707238"></a>
-<a class="indexterm" name="id2707244"></a>
-<a class="indexterm" name="id2707251"></a>
-<a class="indexterm" name="id2707258"></a>
-<a class="indexterm" name="id2707265"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id464263"></a>Debugging with Samba Itself</h3></div></div></div><p>
+<a class="indexterm" name="id464271"></a>
+<a class="indexterm" name="id464278"></a>
+<a class="indexterm" name="id464285"></a>
+<a class="indexterm" name="id464292"></a>
+<a class="indexterm" name="id464298"></a>
+<a class="indexterm" name="id464305"></a>
+<a class="indexterm" name="id464312"></a>
 One of the best diagnostic tools for debugging problems is Samba itself.  You can use the <code class="option">-d
 option</code> for both <span class="application">smbd</span> and <span class="application">nmbd</span> to specify the <a class="link" href="smb.conf.5.html#DEBUGLEVEL">debug level</a> at which to run.
 See the man pages for <code class="literal">smbd, nmbd</code>, and <code class="filename">smb.conf</code> for more information regarding debugging
 options. The debug level (log level) can range from 1 (the default) to 10 (100 for debugging passwords).
 </p><p>
-<a class="indexterm" name="id2707319"></a>
-<a class="indexterm" name="id2707326"></a>
-<a class="indexterm" name="id2707333"></a>
-<a class="indexterm" name="id2707340"></a>
-<a class="indexterm" name="id2707346"></a>
-<a class="indexterm" name="id2707353"></a>
-<a class="indexterm" name="id2707360"></a>
+<a class="indexterm" name="id464363"></a>
+<a class="indexterm" name="id464370"></a>
+<a class="indexterm" name="id464376"></a>
+<a class="indexterm" name="id464383"></a>
+<a class="indexterm" name="id464390"></a>
+<a class="indexterm" name="id464397"></a>
+<a class="indexterm" name="id464404"></a>
 Another helpful method of debugging is to compile Samba using the <code class="literal">gcc -g </code> flag. This will
 include debug information in the binaries and allow you to attach <code class="literal">gdb</code> to the running
 <code class="literal">smbd/nmbd</code> process.  To attach <code class="literal">gdb</code> to an <code class="literal">smbd</code> process
@@ -46,52 +46,52 @@
 <code class="literal">gdb</code> and continue.
 </p><p>
 Some useful Samba commands worth investigating are:
-<a class="indexterm" name="id2707429"></a>
-<a class="indexterm" name="id2707436"></a>
+<a class="indexterm" name="id464466"></a>
+<a class="indexterm" name="id464473"></a>
 </p><pre class="screen">
 <code class="prompt">$ </code><strong class="userinput"><code>testparm | more</code></strong>
 <code class="prompt">$ </code><strong class="userinput"><code>smbclient -L //{netbios name of server}</code></strong>
 </pre><p>
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2707471"></a>Tcpdump</h3></div></div></div><p>
-<a class="indexterm" name="id2707479"></a>
-<a class="indexterm" name="id2707486"></a>
-<a class="indexterm" name="id2707493"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id464508"></a>Tcpdump</h3></div></div></div><p>
+<a class="indexterm" name="id464515"></a>
+<a class="indexterm" name="id464522"></a>
+<a class="indexterm" name="id464529"></a>
 <a class="ulink" href="http://www.tcpdump.org/" target="_top">Tcpdump</a> was the first 
 UNIX sniffer with SMB support. It is a command-line utility and 
 now, its SMB support is somewhat lagging that of <code class="literal">ethereal</code> 
 and <code class="literal">tethereal</code>.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2707522"></a>Ethereal</h3></div></div></div><p>
-<a class="indexterm" name="id2707529"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id464556"></a>Ethereal</h3></div></div></div><p>
+<a class="indexterm" name="id464564"></a>
 <a class="ulink" href="http://www.ethereal.com/" target="_top">Ethereal</a> is a graphical sniffer, available for both UNIX (Gtk)
 and Windows. Ethereal's SMB support is quite good. For details on the use of <code class="literal">ethereal</code>, read
 the well-written Ethereal User Guide.
 </p><div class="figure"><a name="ethereal1"></a><p class="title"><b>Figure 39.1. Starting a Capture.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/ethereal1.png" alt="Starting a Capture."></div></div></div><br class="figure-break"><p>
-<a class="indexterm" name="id2707592"></a>
+<a class="indexterm" name="id464625"></a>
 Listen for data on ports 137, 138, 139, and 445. For example, use the filter <strong class="userinput"><code>port 137, port 138,
 port 139, or port 445</code></strong> as seen in <a class="link" href="problems.html#ethereal1" title="Figure 39.1. Starting a Capture.">Starting a Capture</a> snapshot.
 </p><p>
 A console version of ethereal is available as well and is called <code class="literal">tethereal</code>.
-</p><div class="figure"><a name="ethereal2"></a><p class="title"><b>Figure 39.2. Main Ethereal Data Window.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/ethereal2.png" alt="Main Ethereal Data Window."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2707665"></a>The Windows Network Monitor</h3></div></div></div><p>
-<a class="indexterm" name="id2707673"></a>
-<a class="indexterm" name="id2707680"></a>
-<a class="indexterm" name="id2707687"></a>
-<a class="indexterm" name="id2707694"></a>
-<a class="indexterm" name="id2707701"></a>
-<a class="indexterm" name="id2707708"></a>
+</p><div class="figure"><a name="ethereal2"></a><p class="title"><b>Figure 39.2. Main Ethereal Data Window.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/ethereal2.png" alt="Main Ethereal Data Window."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id464695"></a>The Windows Network Monitor</h3></div></div></div><p>
+<a class="indexterm" name="id464703"></a>
+<a class="indexterm" name="id464710"></a>
+<a class="indexterm" name="id464717"></a>
+<a class="indexterm" name="id464724"></a>
+<a class="indexterm" name="id464731"></a>
+<a class="indexterm" name="id464737"></a>
 For tracing things on Microsoft Windows NT, Network Monitor (aka Netmon) is available on Microsoft Developer
 Network CDs, the Windows NT Server install CD, and the SMS CDs. The version of Netmon that ships with SMS
 allows for dumping packets between any two computers (i.e., placing the network interface in promiscuous
 mode).  The version on the NT Server install CD will only allow monitoring of network traffic directed to the
 local NT box and broadcasts on the local subnet. Be aware that Ethereal can read and write Netmon formatted
 files.
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2707725"></a>Installing Network Monitor on an NT Workstation</h4></div></div></div><p>
-<a class="indexterm" name="id2707733"></a>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id464750"></a>Installing Network Monitor on an NT Workstation</h4></div></div></div><p>
+<a class="indexterm" name="id464758"></a>
 Installing Netmon on an NT workstation requires a couple of steps. The following are instructions for
 installing Netmon V4.00.349, which comes with Microsoft Windows NT Server 4.0, on Microsoft Windows NT
 Workstation 4.0. The process should be similar for other versions of Windows NT version of Netmon. You will
 need both the Microsoft Windows NT Server 4.0 Install CD and the Workstation 4.0 Install CD.
 </p><p>
-<a class="indexterm" name="id2707750"></a>
+<a class="indexterm" name="id464771"></a>
 Initially you will need to install <span class="application">Network Monitor Tools and Agent</span>
 on the NT Server to do this: 
 </p><div class="itemizedlist"><ul type="disc"><li><p>Go to <span class="guibutton">Start</span> -&gt; <span class="guibutton">Settings</span> -&gt; <span class="guibutton">Control Panel</span> -&gt; 
@@ -110,16 +110,16 @@
 Now copy the files from the NT Server in <code class="filename">%SYSTEMROOT%\System32\netmon</code>
 to <code class="filename">%SYSTEMROOT%\System32\netmon</code> on the workstation and set permissions
 as you deem appropriate for your site. You will need administrative rights on the NT box to run Netmon.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2707969"></a>Installing Network Monitor on Windows 9x/Me</h4></div></div></div><p>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id464981"></a>Installing Network Monitor on Windows 9x/Me</h4></div></div></div><p>
 To install Netmon on Windows 9x/Me, install the Network Monitor Agent 
 from the Windows 9x/Me CD (<code class="filename">\admin\nettools\netmon</code>). 
 There is a readme file included with the Netmon driver files on the CD if you need 
 information on how to do this. Copy the files from a working Netmon installation.
-</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2707992"></a>Useful URLs</h2></div></div></div><div class="itemizedlist"><ul type="disc"><li><p>See how Scott Merrill simulates a BDC behavior at 
+</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id465001"></a>Useful URLs</h2></div></div></div><div class="itemizedlist"><ul type="disc"><li><p>See how Scott Merrill simulates a BDC behavior at 
        <a class="ulink" href="http://www.skippy.net/linux/smb-howto.html" target="_top">
        http://www.skippy.net/linux/smb-howto.html</a>. </p></li><li><p>FTP site for older SMB specs, 
        <a class="ulink" href="ftp://ftp.microsoft.com/developr/drg/CIFS/" target="_top">
-       ftp://ftp.microsoft.com/developr/drg/CIFS/</a></p></li></ul></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2708029"></a>Getting Mailing List Help</h2></div></div></div><p>
+       ftp://ftp.microsoft.com/developr/drg/CIFS/</a></p></li></ul></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id465036"></a>Getting Mailing List Help</h2></div></div></div><p>
 There are a number of Samba-related mailing lists. Go to <a class="ulink" href="http://samba.org" target="_top">http://samba.org</a>, click on your nearest mirror,
 and then click on <code class="literal">Support</code>. Next, click on <code class="literal">
 Samba-related mailing lists</code>.
@@ -130,12 +130,12 @@
 mainstream Samba lists.</p><p>
 If you do post a message to one of the lists, please observe the following guidelines:
 </p><div class="itemizedlist"><ul type="disc"><li><p>
-<a class="indexterm" name="id2708085"></a>
+<a class="indexterm" name="id465088"></a>
 	Always remember that the developers are volunteers; they are
 	not paid and they never guarantee to produce a particular feature at 
 	a particular time. Any timelines are &#8220;<span class="quote">best guess,</span>&#8221; and nothing more.
 	</p></li><li><p>
-<a class="indexterm" name="id2708103"></a>
+<a class="indexterm" name="id465104"></a>
 	Always mention what version of Samba you are using and what 
 	operating system it's running under. You should list the relevant sections of
 	your <code class="filename">smb.conf</code> file, at least the options in <em class="parameter"><code>[global]</code></em>
@@ -150,7 +150,7 @@
 	to mailing lists really irritate the thousands of people who end up having to deal
 	with such bad netiquet bahavior.
 	</p></li><li><p>
-<a class="indexterm" name="id2708156"></a>
+<a class="indexterm" name="id465150"></a>
 	Don't cross post. Work out which is the best list to post to 
 	and see what happens. Do not post to both samba-ntdom and samba-technical.
 	Many people active on the lists subscribe to more 
@@ -163,7 +163,7 @@
 	the pipe to the error), you can send the *.CAP file as well.</p></li><li><p>Please think carefully before attaching a document to an email.
 	Consider pasting the relevant parts into the body of the message. The Samba
 	mailing lists go to a huge number of people. Do they all need a copy of your 
-	<code class="filename">smb.conf</code> in their attach directory?</p></li></ul></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2708204"></a>How to Get Off the Mailing Lists</h2></div></div></div><p>To have your name removed from a Samba mailing list, go to the same
+	<code class="filename">smb.conf</code> in their attach directory?</p></li></ul></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id465191"></a>How to Get Off the Mailing Lists</h2></div></div></div><p>To have your name removed from a Samba mailing list, go to the same
 place where you went to
 subscribe to it, go to <a class="ulink" href="http://lists.samba.org/" target="_top">http://lists.samba.org</a>, 
 click on your nearest mirror, click on <code class="literal">Support</code>, and 

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/rights.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/rights.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/rights.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,8 +1,8 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 15. User Rights and Privileges</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="idmapper.html" title="Chapter 14. Identity Mapping (IDMAP)"><link rel="next" href="AccessControls.html" title="Chapter 16. File, Directory, and Share Access Controls"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 15. User Rights and Privileges</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="idmapper.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="AccessControls.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="rights"></a>Chapter 15. User Rights and Privileges</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Gerald</span> <span class="othername">(Jerry)</span> <span class="surname">Carter</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jerry at samba.org">jerry at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="rights.html#id2630518">Rights Management Capabilities</a></span></dt><dd><dl><dt><span class="sect2"><a href="rights.html#id2630793">Using the &#8220;<span class="quote">net rpc rights</span>&#8221; Utility</a></span></dt><dt><span class="sect2"><a href="rights.html#id2631138">Description of Privileges</a></span></dt><dt><span class="sect2"><a href="rights.html#id2631456">Privileges Suppored by Windows 2000 Domain Controllers</a></span></dt></dl></dd><dt><span class="sect1"><a href="rights.html#id2631943">The Administrator Domain SID</a></span></dt><dt><span class="sect1"><a href="rights.html#id2632120">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="rights.html#id2632126">What Rights and Privileges Will Permit Windows Client Administration?</a></span></dt></dl></dd></dl></div><p>
-<a class="indexterm" name="id2630234"></a>
-<a class="indexterm" name="id2630241"></a>
-<a class="indexterm" name="id2630248"></a>
-<a class="indexterm" name="id2630255"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 15. User Rights and Privileges</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="idmapper.html" title="Chapter 14. Identity Mapping (IDMAP)"><link rel="next" href="AccessControls.html" title="Chapter 16. File, Directory, and Share Access Controls"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 15. User Rights and Privileges</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="idmapper.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="AccessControls.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="rights"></a>Chapter 15. User Rights and Privileges</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Gerald</span> <span class="othername">(Jerry)</span> <span class="surname">Carter</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jerry at samba.org">jerry at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="rights.html#id394039">Rights Management Capabilities</a></span></dt><dd><dl><dt><span class="sect2"><a href="rights.html#id394300">Using the &#8220;<span class="quote">net rpc rights</span>&#8221; Utility</a></span></dt><dt><span class="sect2"><a href="rights.html#id394618">Description of Privileges</a></span></dt><dt><span class="sect2"><a href="rights.html#id394911">Privileges Suppored by Windows 2000 Domain Controllers</a></span></dt></dl></dd><dt><span class="sect1"><a href="rights.html#id395344">The Administrator Domain SID</a></span></dt><dt><span class="sect1"><a href="rights.html#id395509">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="rights.html#id395514">What Rights and Privileges Will Permit Windows Client Administration?</a></span></dt></dl></dd></dl></div><p>
+<a class="indexterm" name="id393782"></a>
+<a class="indexterm" name="id393789"></a>
+<a class="indexterm" name="id393796"></a>
+<a class="indexterm" name="id393802"></a>
 The administration of Windows user, group, and machine accounts in the Samba
 domain-controlled network necessitates interfacing between the MS Windows
 networking environment and the UNIX operating system environment. The right
@@ -10,21 +10,21 @@
 (set) to non-administrative users both in Windows NT4 domains and
 Active Directory domains.
 </p><p>
-<a class="indexterm" name="id2630271"></a>
-<a class="indexterm" name="id2630278"></a>
-<a class="indexterm" name="id2630285"></a>
-<a class="indexterm" name="id2630292"></a>
+<a class="indexterm" name="id393816"></a>
+<a class="indexterm" name="id393822"></a>
+<a class="indexterm" name="id393829"></a>
+<a class="indexterm" name="id393836"></a>
 The addition of Windows NT4/2kX/XPPro machines to the domain necessitates the
 creation of a machine account for each machine added. The machine account is
 a necessity that is used to validate that the machine can be trusted to permit
 user logons.
 </p><p>
-<a class="indexterm" name="id2630306"></a>
-<a class="indexterm" name="id2630313"></a>
-<a class="indexterm" name="id2630320"></a>
-<a class="indexterm" name="id2630327"></a>
-<a class="indexterm" name="id2630334"></a>
-<a class="indexterm" name="id2630341"></a>
+<a class="indexterm" name="id393848"></a>
+<a class="indexterm" name="id393855"></a>
+<a class="indexterm" name="id393862"></a>
+<a class="indexterm" name="id393869"></a>
+<a class="indexterm" name="id393876"></a>
+<a class="indexterm" name="id393882"></a>
 Machine accounts are analogous to user accounts, and thus in implementing them on a UNIX machine that is
 hosting Samba (i.e., on which Samba is running), it is necessary to create a special type of user account.
 Machine accounts differ from  normal user accounts in that the account name (login ID) is terminated with a
@@ -34,11 +34,11 @@
 account is used only to authenticate domain member machines during start-up. This security measure
 is designed to block man-in-the-middle attempts to violate network integrity.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2630381"></a>
-<a class="indexterm" name="id2630388"></a>
-<a class="indexterm" name="id2630395"></a>
-<a class="indexterm" name="id2630402"></a>
-<a class="indexterm" name="id2630409"></a>
+<a class="indexterm" name="id393917"></a>
+<a class="indexterm" name="id393924"></a>
+<a class="indexterm" name="id393930"></a>
+<a class="indexterm" name="id393937"></a>
+<a class="indexterm" name="id393944"></a>
 Machine (computer) accounts are used in the Windows NT OS family to store security
 credentials for domain member servers and workstations. When the domain member
 starts up, it goes through a validation process that includes an exchange of
@@ -47,20 +47,20 @@
 all access by domain users. The computer account is essential to the way that MS 
 Windows secures authentication.
 </p></div><p>
-<a class="indexterm" name="id2630428"></a>
-<a class="indexterm" name="id2630435"></a>
-<a class="indexterm" name="id2630442"></a>
-<a class="indexterm" name="id2630449"></a>
+<a class="indexterm" name="id393959"></a>
+<a class="indexterm" name="id393965"></a>
+<a class="indexterm" name="id393972"></a>
+<a class="indexterm" name="id393979"></a>
 The creation of UNIX system accounts has traditionally been the sole right of
 the system administrator, better known as the <code class="constant">root</code> account.
 It is possible in the UNIX environment to create multiple users who have the
 same UID. Any UNIX user who has a UID=0 is inherently the same as the
 <code class="constant">root</code> account user.
 </p><p>
-<a class="indexterm" name="id2630471"></a>
-<a class="indexterm" name="id2630478"></a>
-<a class="indexterm" name="id2630485"></a>
-<a class="indexterm" name="id2630492"></a>
+<a class="indexterm" name="id393999"></a>
+<a class="indexterm" name="id394006"></a>
+<a class="indexterm" name="id394012"></a>
+<a class="indexterm" name="id394019"></a>
 All versions of Samba call system interface scripts that permit CIFS function
 calls that are used to manage users, groups, and machine accounts
 in the UNIX environment. All versions of Samba up to and including version 3.0.10
@@ -70,27 +70,27 @@
 disdain and consternation among Samba administrators, particularly where it became
 necessary to permit people who should not possess <code class="constant">root</code>-level
 access to the UNIX host system.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2630518"></a>Rights Management Capabilities</h2></div></div></div><p>
-<a class="indexterm" name="id2630526"></a>
-<a class="indexterm" name="id2630533"></a>
-<a class="indexterm" name="id2630540"></a>
-<a class="indexterm" name="id2630547"></a>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id394039"></a>Rights Management Capabilities</h2></div></div></div><p>
+<a class="indexterm" name="id394047"></a>
+<a class="indexterm" name="id394054"></a>
+<a class="indexterm" name="id394061"></a>
+<a class="indexterm" name="id394068"></a>
 Samba 3.0.11 introduced support for the Windows privilege model.  This model
 allows certain rights to be assigned to a user or group SID.  In order to enable
 this feature, <a class="link" href="smb.conf.5.html#ENABLEPRIVILEGES">enable privileges = yes</a>
 must be defined in the <em class="parameter"><code>global</code></em> section of the <code class="filename">smb.conf</code> file.
 </p><p>
-<a class="indexterm" name="id2630585"></a>
-<a class="indexterm" name="id2630592"></a>
-<a class="indexterm" name="id2630599"></a>
+<a class="indexterm" name="id394103"></a>
+<a class="indexterm" name="id394110"></a>
+<a class="indexterm" name="id394116"></a>
 Currently, the rights supported in Samba-3 are listed in <a class="link" href="rights.html#rp-privs" title="Table 15.1. Current Privilege Capabilities">&#8220;Current Privilege Capabilities&#8221;</a>.
 The remainder of this chapter explains how to manage and use these privileges on Samba servers.
-</p><a class="indexterm" name="id2630616"></a><a class="indexterm" name="id2630623"></a><a class="indexterm" name="id2630630"></a><a class="indexterm" name="id2630637"></a><a class="indexterm" name="id2630644"></a><a class="indexterm" name="id2630651"></a><div class="table"><a name="rp-privs"></a><p class="title"><b>Table 15.1. Current Privilege Capabilities</b></p><div class="table-contents"><table summary="Current Privilege Capabilities" border="1"><colgroup><col align="right"><col align="left"></colgroup><thead><tr><th align="left">Privilege</th><th align="left">Description</th></tr></thead><tbody><tr><td align="right"><p>SeMachineAccountPrivilege</p></td><td align="left"><p>Add machines to domain</p></td></tr><tr><td align="right"><p>SePrintOperatorPrivilege</p></td><td align="left"><p>Manage printers</p></td></tr><tr><td align="right"><p>SeAddUsersPrivilege</p></td><td align="left"><p>Add users and groups to the domain</p></td></tr><tr><td align="right"><p>SeRemoteShutdownPrivilege</p></td><td align="left"><p>Force shutdown from a remote system</p></td></tr><tr><td align="right"><p>SeDiskOperatorPrivilege</p></td><td align="left"><p>Manage disk share</p></td></tr><tr><td align="right"><p>SeTakeOwnershipPrivilege</p></td><td align="left"><p>Take ownership of files or other objects</p></td></tr></tbody></table></div></div><br class="table-break"><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2630793"></a>Using the &#8220;<span class="quote">net rpc rights</span>&#8221; Utility</h3></div></div></div><p>
-<a class="indexterm" name="id2630804"></a>
-<a class="indexterm" name="id2630810"></a>
-<a class="indexterm" name="id2630817"></a>
-<a class="indexterm" name="id2630825"></a>
-<a class="indexterm" name="id2630832"></a>
+</p><a class="indexterm" name="id394132"></a><a class="indexterm" name="id394139"></a><a class="indexterm" name="id394146"></a><a class="indexterm" name="id394152"></a><a class="indexterm" name="id394159"></a><a class="indexterm" name="id394166"></a><div class="table"><a name="rp-privs"></a><p class="title"><b>Table 15.1. Current Privilege Capabilities</b></p><div class="table-contents"><table summary="Current Privilege Capabilities" border="1"><colgroup><col align="right"><col align="left"></colgroup><thead><tr><th align="left">Privilege</th><th align="left">Description</th></tr></thead><tbody><tr><td align="right"><p>SeMachineAccountPrivilege</p></td><td align="left"><p>Add machines to domain</p></td></tr><tr><td align="right"><p>SePrintOperatorPrivilege</p></td><td align="left"><p>Manage printers</p></td></tr><tr><td align="right"><p>SeAddUsersPrivilege</p></td><td align="left"><p>Add users and groups to the domain</p></td></tr><tr><td align="right"><p>SeRemoteShutdownPrivilege</p></td><td align="left"><p>Force shutdown from a remote system</p></td></tr><tr><td align="right"><p>SeDiskOperatorPrivilege</p></td><td align="left"><p>Manage disk share</p></td></tr><tr><td align="right"><p>SeTakeOwnershipPrivilege</p></td><td align="left"><p>Take ownership of files or other objects</p></td></tr></tbody></table></div></div><br class="table-break"><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id394300"></a>Using the &#8220;<span class="quote">net rpc rights</span>&#8221; Utility</h3></div></div></div><p>
+<a class="indexterm" name="id394312"></a>
+<a class="indexterm" name="id394319"></a>
+<a class="indexterm" name="id394326"></a>
+<a class="indexterm" name="id394332"></a>
+<a class="indexterm" name="id394339"></a>
 There are two primary means of managing the rights assigned to users and groups
 on a Samba server.  The <code class="literal">NT4 User Manager for Domains</code> may be
 used from any Windows NT4, 2000, or XP Professional domain member client to
@@ -101,10 +101,10 @@
 </p><p>
 The <code class="literal">net rpc rights</code> utility in Samba 3.0.11 has three new subcommands:
 </p><div class="variablelist"><dl><dt><span class="term">list [name|accounts]</span></dt><dd><p>
-<a class="indexterm" name="id2630874"></a>
-<a class="indexterm" name="id2630886"></a>
-<a class="indexterm" name="id2630892"></a>
-<a class="indexterm" name="id2630899"></a>
+<a class="indexterm" name="id394377"></a>
+<a class="indexterm" name="id394388"></a>
+<a class="indexterm" name="id394395"></a>
+<a class="indexterm" name="id394402"></a>
 		When called with no arguments, <code class="literal">net rpc list</code>
 		simply lists the available rights on the server.  When passed
 		a specific user or group name, the tool lists the privileges
@@ -113,10 +113,10 @@
 		<code class="literal">net rpc rights list</code> returns a list of all
 		privileged accounts on the server and the assigned rights.
 		</p></dd><dt><span class="term">grant &lt;user&gt; &lt;right [right ...]&gt;</span></dt><dd><p>
-<a class="indexterm" name="id2630939"></a>
-<a class="indexterm" name="id2630946"></a>
-<a class="indexterm" name="id2630952"></a>
-<a class="indexterm" name="id2630959"></a>
+<a class="indexterm" name="id394437"></a>
+<a class="indexterm" name="id394444"></a>
+<a class="indexterm" name="id394451"></a>
+<a class="indexterm" name="id394457"></a>
 		When called with no arguments, this function is used to assign
 		a list of rights to a specified user or group.  For example,
 		to grant the members of the Domain Admins group on a Samba domain controller,
@@ -126,7 +126,7 @@
 	 'DOMAIN\Domain Admins' SeMachineAccountPrivilege
 </pre><p>
 		The following syntax has the same result:
-<a class="indexterm" name="id2630985"></a>
+<a class="indexterm" name="id394479"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> net rpc rights grant 'DOMAIN\Domain Admins' \
      SeMachineAccountPrivilege -S server -U domadmin
@@ -139,66 +139,66 @@
 		This command is similar in format to <code class="literal">net rpc rights grant</code>.  Its
 		effect is to remove an assigned right (or list of rights) from a user or group.
 		</p></dd></dl></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2631040"></a>
-<a class="indexterm" name="id2631047"></a>
-<a class="indexterm" name="id2631054"></a>
+<a class="indexterm" name="id394529"></a>
+<a class="indexterm" name="id394536"></a>
+<a class="indexterm" name="id394542"></a>
 You must be connected as a member of the Domain Admins group to be able to grant or revoke privileges assigned
 to an account.  This capability is inherent to the Domain Admins group and is not configurable. There are no
 default rights and privileges, except the ability for a member of the Domain Admins group to assign them.
 This means that all administrative rights and privileges (other than the ability to assign them) must be 
 explicitly assigned, even for the Domain Admins group.
 </p></div><p>
-<a class="indexterm" name="id2631072"></a>
-<a class="indexterm" name="id2631079"></a>
-<a class="indexterm" name="id2631086"></a>
-<a class="indexterm" name="id2631093"></a>
+<a class="indexterm" name="id394557"></a>
+<a class="indexterm" name="id394563"></a>
+<a class="indexterm" name="id394570"></a>
+<a class="indexterm" name="id394577"></a>
 By default, no privileges are initially assigned to any account because certain actions will be performed as
 root once smbd determines that a user has the necessary rights.  For example, when joining a client to a
 Windows domain, <em class="parameter"><code>add machine script</code></em> must be executed with superuser rights in most 
 cases.  For this reason, you should be very careful about handing out privileges to accounts.
 </p><p>
-<a class="indexterm" name="id2631114"></a>
-<a class="indexterm" name="id2631121"></a>
-<a class="indexterm" name="id2631128"></a>
+<a class="indexterm" name="id394595"></a>
+<a class="indexterm" name="id394602"></a>
+<a class="indexterm" name="id394608"></a>
 Access as the root user (UID=0) bypasses all privilege checks.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2631138"></a>Description of Privileges</h3></div></div></div><p>
-<a class="indexterm" name="id2631146"></a>
-<a class="indexterm" name="id2631153"></a>
-<a class="indexterm" name="id2631160"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id394618"></a>Description of Privileges</h3></div></div></div><p>
+<a class="indexterm" name="id394626"></a>
+<a class="indexterm" name="id394633"></a>
+<a class="indexterm" name="id394639"></a>
 The privileges that have been implemented in Samba-3.0.11 are shown below.  It is possible, and likely, that
 additional privileges may be implemented in later releases of Samba. It is also likely that any privileges
 currently implemented but not used may be removed from future releases as a housekeeping matter, so it is
 important that the successful as well as unsuccessful use of these facilities should be reported on the Samba
 mailing lists.
 </p><div class="variablelist"><dl><dt><span class="term">SeAddUsersPrivilege</span></dt><dd><p>
-<a class="indexterm" name="id2631193"></a>
-<a class="indexterm" name="id2631200"></a>
-<a class="indexterm" name="id2631207"></a>
+<a class="indexterm" name="id394665"></a>
+<a class="indexterm" name="id394672"></a>
+<a class="indexterm" name="id394678"></a>
 		This right determines whether or not smbd will allow the
 		user to create new user or group accounts via such tools
 		as <code class="literal">net rpc user add</code> or 
 		<code class="literal">NT4 User Manager for Domains.</code>
 		</p></dd><dt><span class="term">SeDiskOperatorPrivilege</span></dt><dd><p>
-<a class="indexterm" name="id2631238"></a>
-<a class="indexterm" name="id2631245"></a>
-<a class="indexterm" name="id2631252"></a>
+<a class="indexterm" name="id394708"></a>
+<a class="indexterm" name="id394715"></a>
+<a class="indexterm" name="id394722"></a>
 		Accounts that possess this right will be able to execute
 		scripts defined by the <code class="literal">add/delete/change</code>
 		share command in <code class="filename">smb.conf</code> file as root.  Such users will
 		also be able to modify the ACL associated with file shares
 		on the Samba server.
 		</p></dd><dt><span class="term">SeMachineAccountPrivilege</span></dt><dd><p>
-<a class="indexterm" name="id2631285"></a>
-<a class="indexterm" name="id2631292"></a>
-<a class="indexterm" name="id2631299"></a>
+<a class="indexterm" name="id394752"></a>
+<a class="indexterm" name="id394759"></a>
+<a class="indexterm" name="id394766"></a>
 		This right controls whether or not the user can join client
 		machines to a Samba-controlled domain.
 		</p></dd><dt><span class="term">SePrintOperatorPrivilege</span></dt><dd><p>
-<a class="indexterm" name="id2631318"></a>
-<a class="indexterm" name="id2631325"></a>
-<a class="indexterm" name="id2631332"></a>
-<a class="indexterm" name="id2631339"></a>
-<a class="indexterm" name="id2631346"></a>
+<a class="indexterm" name="id394783"></a>
+<a class="indexterm" name="id394790"></a>
+<a class="indexterm" name="id394797"></a>
+<a class="indexterm" name="id394804"></a>
+<a class="indexterm" name="id394811"></a>
 		This privilege operates identically to the <a class="link" href="smb.conf.5.html#PRINTERADMIN">printer admin</a>
 		option in the <code class="filename">smb.conf</code> file (see section 5 man page for <code class="filename">smb.conf</code>)
 		except that it is a global right (not on a per-printer basis). 
@@ -207,44 +207,44 @@
 		the security descriptor associated with the printer object in the
 		<code class="filename">ntprinters.tdb</code> file.
 		</p></dd><dt><span class="term">SeRemoteShutdownPrivilege</span></dt><dd><p>
-<a class="indexterm" name="id2631400"></a>
-<a class="indexterm" name="id2631407"></a>
-<a class="indexterm" name="id2631414"></a>
+<a class="indexterm" name="id394859"></a>
+<a class="indexterm" name="id394866"></a>
+<a class="indexterm" name="id394873"></a>
 		Samba provides two hooks for shutting down or rebooting
 		the server and for aborting a previously issued shutdown
 		command.  Since this is an operation normally limited by
 		the operating system to the root user, an account must possess this
 		right to be able to execute either of these hooks.
 		</p></dd><dt><span class="term">SeTakeOwnershipPrivilege</span></dt><dd><p>
-<a class="indexterm" name="id2631436"></a>
-<a class="indexterm" name="id2631443"></a>
+<a class="indexterm" name="id394893"></a>
+<a class="indexterm" name="id394900"></a>
 		This right permits users to take ownership of files and directories.
-		</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2631456"></a>Privileges Suppored by Windows 2000 Domain Controllers</h3></div></div></div><p>
+		</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id394911"></a>Privileges Suppored by Windows 2000 Domain Controllers</h3></div></div></div><p>
     For reference purposes, a Windows NT4 Primary Domain Controller reports support for the following
 	privileges:
-<a class="indexterm" name="id2631466"></a>
-<a class="indexterm" name="id2631473"></a>
-<a class="indexterm" name="id2631480"></a>
-<a class="indexterm" name="id2631488"></a>
-<a class="indexterm" name="id2631495"></a>
-<a class="indexterm" name="id2631502"></a>
-<a class="indexterm" name="id2631509"></a>
-<a class="indexterm" name="id2631516"></a>
-<a class="indexterm" name="id2631523"></a>
-<a class="indexterm" name="id2631530"></a>
-<a class="indexterm" name="id2631537"></a>
-<a class="indexterm" name="id2631544"></a>
-<a class="indexterm" name="id2631551"></a>
-<a class="indexterm" name="id2631558"></a>
-<a class="indexterm" name="id2631565"></a>
-<a class="indexterm" name="id2631572"></a>
-<a class="indexterm" name="id2631579"></a>
-<a class="indexterm" name="id2631586"></a>
-<a class="indexterm" name="id2631593"></a>
-<a class="indexterm" name="id2631600"></a>
-<a class="indexterm" name="id2631607"></a>
-<a class="indexterm" name="id2631614"></a>
-<a class="indexterm" name="id2631621"></a>
+<a class="indexterm" name="id394920"></a>
+<a class="indexterm" name="id394927"></a>
+<a class="indexterm" name="id394934"></a>
+<a class="indexterm" name="id394941"></a>
+<a class="indexterm" name="id394948"></a>
+<a class="indexterm" name="id394955"></a>
+<a class="indexterm" name="id394962"></a>
+<a class="indexterm" name="id394968"></a>
+<a class="indexterm" name="id394975"></a>
+<a class="indexterm" name="id394982"></a>
+<a class="indexterm" name="id394989"></a>
+<a class="indexterm" name="id394996"></a>
+<a class="indexterm" name="id395003"></a>
+<a class="indexterm" name="id395010"></a>
+<a class="indexterm" name="id395017"></a>
+<a class="indexterm" name="id395024"></a>
+<a class="indexterm" name="id395030"></a>
+<a class="indexterm" name="id395037"></a>
+<a class="indexterm" name="id395044"></a>
+<a class="indexterm" name="id395051"></a>
+<a class="indexterm" name="id395058"></a>
+<a class="indexterm" name="id395065"></a>
+<a class="indexterm" name="id395071"></a>
 </p><pre class="screen">
          SeCreateTokenPrivilege  Create a token object
   SeAssignPrimaryTokenPrivilege  Replace a process level token
@@ -271,35 +271,35 @@
       SeRemoteShutdownPrivilege  Force shutdown from a remote system
 </pre><p>
 	And Windows 200x/XP Domain Controllers and workstations reports to support the following privileges:
-<a class="indexterm" name="id2631659"></a>
-<a class="indexterm" name="id2631665"></a>
-<a class="indexterm" name="id2631672"></a>
-<a class="indexterm" name="id2631680"></a>
-<a class="indexterm" name="id2631687"></a>
-<a class="indexterm" name="id2631694"></a>
-<a class="indexterm" name="id2631701"></a>
-<a class="indexterm" name="id2631708"></a>
-<a class="indexterm" name="id2631715"></a>
-<a class="indexterm" name="id2631722"></a>
-<a class="indexterm" name="id2631729"></a>
-<a class="indexterm" name="id2631736"></a>
-<a class="indexterm" name="id2631743"></a>
-<a class="indexterm" name="id2631750"></a>
-<a class="indexterm" name="id2631757"></a>
-<a class="indexterm" name="id2631764"></a>
-<a class="indexterm" name="id2631771"></a>
-<a class="indexterm" name="id2631778"></a>
-<a class="indexterm" name="id2631785"></a>
-<a class="indexterm" name="id2631792"></a>
-<a class="indexterm" name="id2631799"></a>
-<a class="indexterm" name="id2631806"></a>
-<a class="indexterm" name="id2631813"></a>
-<a class="indexterm" name="id2631820"></a>
-<a class="indexterm" name="id2631827"></a>
-<a class="indexterm" name="id2631834"></a>
-<a class="indexterm" name="id2631841"></a>
-<a class="indexterm" name="id2631848"></a>
-<a class="indexterm" name="id2631856"></a>
+<a class="indexterm" name="id395096"></a>
+<a class="indexterm" name="id395103"></a>
+<a class="indexterm" name="id395110"></a>
+<a class="indexterm" name="id395117"></a>
+<a class="indexterm" name="id395124"></a>
+<a class="indexterm" name="id395131"></a>
+<a class="indexterm" name="id395138"></a>
+<a class="indexterm" name="id395144"></a>
+<a class="indexterm" name="id395151"></a>
+<a class="indexterm" name="id395158"></a>
+<a class="indexterm" name="id395165"></a>
+<a class="indexterm" name="id395172"></a>
+<a class="indexterm" name="id395179"></a>
+<a class="indexterm" name="id395186"></a>
+<a class="indexterm" name="id395193"></a>
+<a class="indexterm" name="id395200"></a>
+<a class="indexterm" name="id395206"></a>
+<a class="indexterm" name="id395213"></a>
+<a class="indexterm" name="id395220"></a>
+<a class="indexterm" name="id395227"></a>
+<a class="indexterm" name="id395234"></a>
+<a class="indexterm" name="id395241"></a>
+<a class="indexterm" name="id395247"></a>
+<a class="indexterm" name="id395254"></a>
+<a class="indexterm" name="id395261"></a>
+<a class="indexterm" name="id395268"></a>
+<a class="indexterm" name="id395275"></a>
+<a class="indexterm" name="id395282"></a>
+<a class="indexterm" name="id395288"></a>
 </p><pre class="screen">
          SeCreateTokenPrivilege  Create a token object
   SeAssignPrimaryTokenPrivilege  Replace a process level token
@@ -332,15 +332,15 @@
          SeImpersonatePrivilege  Impersonate a client after authentication
         SeCreateGlobalPrivilege  Create global objects
 </pre><p>
-<a class="indexterm" name="id2631930"></a>
+<a class="indexterm" name="id395332"></a>
     The Samba Team is implementing only those privileges that are logical and useful in the UNIX/Linux
     environment. Many of the Windows 200X/XP privileges have no direct equivalence in UNIX.
-    </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2631943"></a>The Administrator Domain SID</h2></div></div></div><p>
-<a class="indexterm" name="id2631952"></a>
-<a class="indexterm" name="id2631959"></a>
-<a class="indexterm" name="id2631966"></a>
-<a class="indexterm" name="id2631973"></a>
-<a class="indexterm" name="id2631979"></a>
+    </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id395344"></a>The Administrator Domain SID</h2></div></div></div><p>
+<a class="indexterm" name="id395351"></a>
+<a class="indexterm" name="id395358"></a>
+<a class="indexterm" name="id395365"></a>
+<a class="indexterm" name="id395372"></a>
+<a class="indexterm" name="id395378"></a>
 Please note that every Windows NT4 and later server requires a domain Administrator account. Samba versions
 commencing with 3.0.11 permit Administrative duties to be performed via assigned rights and privileges
 (see <a class="link" href="rights.html" title="Chapter 15. User Rights and Privileges">User Rights and Privileges</a>).  An account in the server's passdb backend can
@@ -350,60 +350,60 @@
 <code class="prompt">root# </code> net getlocalsid
 SID for domain FOO is: S-1-5-21-4294955119-3368514841-2087710299
 </pre><p>
-<a class="indexterm" name="id2632013"></a>
+<a class="indexterm" name="id395408"></a>
 You may assign the domain administrator RID to an account using the <code class="literal">pdbedit</code>
 command as shown here:
-<a class="indexterm" name="id2632027"></a>
+<a class="indexterm" name="id395421"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code> pdbedit -U S-1-5-21-4294955119-3368514841-2087710299-500 -u root -r
 </pre><p>
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2632051"></a>
-<a class="indexterm" name="id2632058"></a>
-<a class="indexterm" name="id2632065"></a>
-<a class="indexterm" name="id2632072"></a>
+<a class="indexterm" name="id395444"></a>
+<a class="indexterm" name="id395451"></a>
+<a class="indexterm" name="id395458"></a>
+<a class="indexterm" name="id395465"></a>
 The RID 500 is the well known standard value of the default Administrator account. It is the RID
 that confers the rights and privileges that the Administrator account has on a Windows machine
 or domain. Under UNIX/Linux the equivalent is UID=0 (the root account).
 </p></div><p>
-<a class="indexterm" name="id2632086"></a>
-<a class="indexterm" name="id2632094"></a>
-<a class="indexterm" name="id2632101"></a>
-<a class="indexterm" name="id2632108"></a>
+<a class="indexterm" name="id395477"></a>
+<a class="indexterm" name="id395484"></a>
+<a class="indexterm" name="id395491"></a>
+<a class="indexterm" name="id395498"></a>
 Releases of Samba version 3.0.11 and later make it possible to operate without an Administrator account
 provided equivalent rights and privileges have been established for a Windows user or a Windows
 group account. 
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2632120"></a>Common Errors</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2632126"></a>What Rights and Privileges Will Permit Windows Client Administration?</h3></div></div></div><p>
-<a class="indexterm" name="id2632135"></a>
-<a class="indexterm" name="id2632142"></a>
-<a class="indexterm" name="id2632149"></a>
-<a class="indexterm" name="id2632156"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id395509"></a>Common Errors</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id395514"></a>What Rights and Privileges Will Permit Windows Client Administration?</h3></div></div></div><p>
+<a class="indexterm" name="id395522"></a>
+<a class="indexterm" name="id395529"></a>
+<a class="indexterm" name="id395536"></a>
+<a class="indexterm" name="id395543"></a>
 	When a Windows NT4 (or later) client joins a domain, the domain global <code class="literal">Domain Admins</code> group
 	is added to the membership of the local <code class="literal">Administrators</code> group on the client. Any user who is
 	a member of the domain global <code class="literal">Domain Admins</code> group will have administrative rights on the
 	Windows client.
 	</p><p>
-<a class="indexterm" name="id2632188"></a>
-<a class="indexterm" name="id2632195"></a>
-<a class="indexterm" name="id2632203"></a>
-<a class="indexterm" name="id2632209"></a>
-<a class="indexterm" name="id2632216"></a>
+<a class="indexterm" name="id395573"></a>
+<a class="indexterm" name="id395579"></a>
+<a class="indexterm" name="id395586"></a>
+<a class="indexterm" name="id395593"></a>
+<a class="indexterm" name="id395600"></a>
 	This is often not the most desirable solution because it means that the user will have administrative
 	rights and privileges on domain servers also. The <code class="literal">Power Users</code> group on Windows client
 	workstations permits local administration of the workstation alone. Any domain global user or domain global
 	group can be added to the membership of the local workstation group <code class="literal">Power Users</code>.
 	</p><p>
-<a class="indexterm" name="id2632244"></a>
-<a class="indexterm" name="id2632251"></a>
-<a class="indexterm" name="id2632259"></a>
-<a class="indexterm" name="id2632265"></a>
+<a class="indexterm" name="id395625"></a>
+<a class="indexterm" name="id395632"></a>
+<a class="indexterm" name="id395639"></a>
+<a class="indexterm" name="id395645"></a>
 	See <a class="link" href="NetCommand.html#nestedgrpmgmgt" title="Nested Group Support">Nested Group Support</a> for an example of how to add domain users
 	and groups to a local group that is on a Windows workstation. The use of the <code class="literal">net</code>
 	command permits this to be done from the Samba server.
 	</p><p>
-<a class="indexterm" name="id2632293"></a>
-<a class="indexterm" name="id2632300"></a>
-<a class="indexterm" name="id2632306"></a>
+<a class="indexterm" name="id395670"></a>
+<a class="indexterm" name="id395677"></a>
+<a class="indexterm" name="id395684"></a>
 	Another way this can be done is to log onto the Windows workstation as the user
 	<code class="literal">Administrator</code>, then open a <code class="literal">cmd</code> shell, then execute:
 </p><pre class="screen">

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/samba-bdc.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/samba-bdc.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/samba-bdc.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,18 +1,18 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 5. Backup Domain Control</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="type.html" title="Part II. Server Configuration Basics"><link rel="prev" href="samba-pdc.html" title="Chapter 4. Domain Control"><link rel="next" href="domain-member.html" title="Chapter 6. Domain Membership"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 5. Backup Domain Control</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="samba-pdc.html">Prev</a> </td><th width="60%" align="center">Part II. Server Configuration Basics</th><td width="20%" align="right"> <a accesskey="n" href="domain-member.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="samba-bdc"></a>Chapter 5. Backup Domain Control</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Volker</span> <span class="surname">Lendecke</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:Volker.Lendecke at SerNet.DE">Volker.Lendecke at SerNet.DE</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Guenther</span> <span class="surname">Deschner</span></h3><span class="contrib">LDAP updates</span> <div class="affiliation"><span class="orgname">SuSE<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:gd at suse.de">gd at suse.de</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="samba-bdc.html#id2587890">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="samba-bdc.html#id2588303">Essential Background Information</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id2589047">LDAP Configuration Notes</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id2589411">Active Directory Domain Control</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id2589470">What Qualifies a Domain Controller on the Network?</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id2589560">How Does a Workstation find its Domain Controller?</a></span></dt></dl></dd><dt><span class="sect1"><a href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-bdc.html#id2590243">Example Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="samba-bdc.html#id2590700">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-bdc.html#id2590743">Machine Accounts Keep Expiring</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id2590798">Can Samba Be a Backup Domain Controller to an NT4 PDC?</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id2590853">How Do I Replicate the smbpasswd File?</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id2590958">Can I Do This All with LDAP?</a></span></dt></dl></dd></dl></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 5. Backup Domain Control</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="type.html" title="Part II. Server Configuration Basics"><link rel="prev" href="samba-pdc.html" title="Chapter 4. Domain Control"><link rel="next" href="domain-member.html" title="Chapter 6. Domain Membership"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 5. Backup Domain Control</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="samba-pdc.html">Prev</a> </td><th width="60%" align="center">Part II. Server Configuration Basics</th><td width="20%" align="right"> <a accesskey="n" href="domain-member.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="samba-bdc"></a>Chapter 5. Backup Domain Control</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Volker</span> <span class="surname">Lendecke</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:Volker.Lendecke at SerNet.DE">Volker.Lendecke at SerNet.DE</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Guenther</span> <span class="surname">Deschner</span></h3><span class="contrib">LDAP updates</span> <div class="affiliation"><span class="orgname">SuSE<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:gd at suse.de">gd at suse.de</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="samba-bdc.html#id354424">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="samba-bdc.html#id354803">Essential Background Information</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id355488">LDAP Configuration Notes</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id355820">Active Directory Domain Control</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id355874">What Qualifies a Domain Controller on the Network?</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id355957">How Does a Workstation find its Domain Controller?</a></span></dt></dl></dd><dt><span class="sect1"><a href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-bdc.html#id356586">Example Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="samba-bdc.html#id357015">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-bdc.html#id357055">Machine Accounts Keep Expiring</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id357103">Can Samba Be a Backup Domain Controller to an NT4 PDC?</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id357154">How Do I Replicate the smbpasswd File?</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id357252">Can I Do This All with LDAP?</a></span></dt></dl></dd></dl></div><p>
 Before you continue reading this section, please make sure that you are comfortable
 with configuring a Samba domain controller as described in <a class="link" href="samba-pdc.html" title="Chapter 4. Domain Control">Domain Control</a>.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2587890"></a>Features and Benefits</h2></div></div></div><p>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id354424"></a>Features and Benefits</h2></div></div></div><p>
 This is one of the most difficult chapters to summarize. It does not matter what we say here, for someone will
 still draw conclusions and/or approach the Samba Team with expectations that are either not yet capable of
 being delivered or that can be achieved far more effectively using a totally different approach. In the event
 that you should have a persistent concern that is not addressed in this book, please email <a class="ulink" href="mailto:jht at samba.org" target="_top">John H. Terpstra</a> clearly setting out your requirements and/or question, and
 we will do our best to provide a solution.
 </p><p>
-<a class="indexterm" name="id2587916"></a>
-<a class="indexterm" name="id2587925"></a>
-<a class="indexterm" name="id2587932"></a>
-<a class="indexterm" name="id2587938"></a>
-<a class="indexterm" name="id2587948"></a>
+<a class="indexterm" name="id354445"></a>
+<a class="indexterm" name="id354454"></a>
+<a class="indexterm" name="id354461"></a>
+<a class="indexterm" name="id354468"></a>
+<a class="indexterm" name="id354477"></a>
 Samba-3 can act as a Backup Domain Controller (BDC) to another Samba Primary Domain Controller (PDC). A
 Samba-3 PDC can operate with an LDAP account backend. The LDAP backend can be either a common master LDAP
 server or a slave server. The use of a slave LDAP server has the benefit that when the master is down, clients
@@ -21,22 +21,22 @@
 ensure the master's continued availability  if the slave finds its master down at the wrong time,
 you will have stability and operational problems.
 </p><p>
-<a class="indexterm" name="id2587972"></a>
-<a class="indexterm" name="id2587981"></a>
-<a class="indexterm" name="id2587990"></a>
-<a class="indexterm" name="id2587999"></a>
+<a class="indexterm" name="id354496"></a>
+<a class="indexterm" name="id354504"></a>
+<a class="indexterm" name="id354513"></a>
+<a class="indexterm" name="id354522"></a>
 While it is possible to run a Samba-3 BDC with a non-LDAP backend, that backend must allow some form of
 "two-way" propagation of changes from the BDC to the master.  At this time only LDAP delivers the capability
 to propagate identity database changes from the BDC to the PDC. The BDC can use a slave LDAP server, while it
 is preferable for the PDC to use as its primary an LDAP master server.
 </p><p>
-<a class="indexterm" name="id2588022"></a>
-<a class="indexterm" name="id2588032"></a>
-<a class="indexterm" name="id2588041"></a>
-<a class="indexterm" name="id2588052"></a>
-<a class="indexterm" name="id2588059"></a>
-<a class="indexterm" name="id2588066"></a>
-<a class="indexterm" name="id2588073"></a>
+<a class="indexterm" name="id354539"></a>
+<a class="indexterm" name="id354548"></a>
+<a class="indexterm" name="id354558"></a>
+<a class="indexterm" name="id354569"></a>
+<a class="indexterm" name="id354576"></a>
+<a class="indexterm" name="id354582"></a>
+<a class="indexterm" name="id354589"></a>
 The use of a non-LDAP backend SAM database is particularly problematic because domain member
 servers and workstations periodically change the Machine Trust Account password. The new
 password is then stored only locally. This means that in the absence of a centrally stored
@@ -46,10 +46,10 @@
 overwriting the SAM that contains the updated (changed) trust account password with resulting
 breakage of the domain trust.
 </p><p>
-<a class="indexterm" name="id2588094"></a>
-<a class="indexterm" name="id2588103"></a>
-<a class="indexterm" name="id2588112"></a>
-<a class="indexterm" name="id2588121"></a>
+<a class="indexterm" name="id354605"></a>
+<a class="indexterm" name="id354613"></a>
+<a class="indexterm" name="id354623"></a>
+<a class="indexterm" name="id354632"></a>
 Considering the number of comments and questions raised concerning how to configure a BDC,
 let's consider each possible option and look at the pros and cons for each possible solution.
 <a class="link" href="samba-bdc.html#pdc-bdc-table" title="Table 5.1. Domain Backend Account Distribution Options">The Domain Backend Account Distribution Options table below</a> lists 
@@ -70,30 +70,30 @@
 	Not an elegant solution due to the delays in synchronization
         and also suffers
         from the issue of domain trust breakdown.
-	</p></td></tr></tbody></table></div></div><br class="table-break"></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2588303"></a>Essential Background Information</h2></div></div></div><p>
-<a class="indexterm" name="id2588311"></a>
-<a class="indexterm" name="id2588318"></a>
-<a class="indexterm" name="id2588325"></a>
-<a class="indexterm" name="id2588332"></a>
+	</p></td></tr></tbody></table></div></div><br class="table-break"></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id354803"></a>Essential Background Information</h2></div></div></div><p>
+<a class="indexterm" name="id354811"></a>
+<a class="indexterm" name="id354818"></a>
+<a class="indexterm" name="id354825"></a>
+<a class="indexterm" name="id354832"></a>
 A domain controller is a machine that is able to answer logon requests from network
 workstations. Microsoft LanManager and IBM LanServer were two early products that
 provided this capability. The technology has become known as the LanMan Netlogon service.
 </p><p>
-<a class="indexterm" name="id2588346"></a>
-<a class="indexterm" name="id2588358"></a>
+<a class="indexterm" name="id354844"></a>
+<a class="indexterm" name="id354855"></a>
 When MS Windows NT3.10 was first released, it supported a new style of Domain Control
 and with it a new form of the network logon service that has extended functionality.
 This service became known as the NT NetLogon Service. The nature of this service has
 changed with the evolution of MS Windows NT and today provides a complex array of
 services that are implemented over an intricate spectrum of technologies.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2588373"></a>MS Windows NT4-style Domain Control</h3></div></div></div><p>
-<a class="indexterm" name="id2588381"></a>
-<a class="indexterm" name="id2588388"></a>
-<a class="indexterm" name="id2588395"></a>
-<a class="indexterm" name="id2588402"></a>
-<a class="indexterm" name="id2588408"></a>
-<a class="indexterm" name="id2588415"></a>
-<a class="indexterm" name="id2588424"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id354867"></a>MS Windows NT4-style Domain Control</h3></div></div></div><p>
+<a class="indexterm" name="id354875"></a>
+<a class="indexterm" name="id354882"></a>
+<a class="indexterm" name="id354888"></a>
+<a class="indexterm" name="id354895"></a>
+<a class="indexterm" name="id354902"></a>
+<a class="indexterm" name="id354908"></a>
+<a class="indexterm" name="id354918"></a>
 Whenever a user logs into a Windows NT4/200x/XP Professional workstation,
 the workstation connects to a domain controller (authentication server) to validate that
 the username and password the user entered are valid. If the information entered
@@ -101,11 +101,11 @@
 control database (the SAM, or Security Account Manager database), a set of error
 codes is returned to the workstation that has made the authentication request.
 </p><p>
-<a class="indexterm" name="id2588444"></a>
-<a class="indexterm" name="id2588451"></a>
-<a class="indexterm" name="id2588458"></a>
-<a class="indexterm" name="id2588465"></a>
-<a class="indexterm" name="id2588472"></a>
+<a class="indexterm" name="id354934"></a>
+<a class="indexterm" name="id354941"></a>
+<a class="indexterm" name="id354948"></a>
+<a class="indexterm" name="id354954"></a>
+<a class="indexterm" name="id354961"></a>
 When the username/password pair has been validated, the domain controller
 (authentication server) will respond with full enumeration of the account information
 that has been stored regarding that user in the user and machine accounts database
@@ -117,11 +117,11 @@
 user may access the network, and much more. All this information was stored in the SAM
 in all versions of MS Windows NT (3.10, 3.50, 3.51, 4.0).
 </p><p>
-<a class="indexterm" name="id2588496"></a>
-<a class="indexterm" name="id2588505"></a>
-<a class="indexterm" name="id2588512"></a>
-<a class="indexterm" name="id2588519"></a>
-<a class="indexterm" name="id2588526"></a>
+<a class="indexterm" name="id354978"></a>
+<a class="indexterm" name="id354987"></a>
+<a class="indexterm" name="id354994"></a>
+<a class="indexterm" name="id355001"></a>
+<a class="indexterm" name="id355007"></a>
 The account information (user and machine) on domain controllers is stored in two files,
 one containing the security information and the other the SAM. These are stored in files
 by the same name in the <code class="filename">%SystemRoot%\System32\config</code> directory. 
@@ -131,24 +131,24 @@
 </p><p>
 There are two situations in which it is desirable to install BDCs:
 </p><div class="itemizedlist"><ul type="disc"><li><p>
-	<a class="indexterm" name="id2588562"></a>
-	<a class="indexterm" name="id2588568"></a>
+	<a class="indexterm" name="id355039"></a>
+	<a class="indexterm" name="id355046"></a>
 	On the local network that the PDC is on, if there are many
 	workstations and/or where the PDC is generally very busy. In this case the BDCs
 	will pick up network logon requests and help to add robustness to network services.
 	</p></li><li><p>
-	<a class="indexterm" name="id2588583"></a>
+	<a class="indexterm" name="id355059"></a>
 	At each remote site, to reduce wide-area network traffic and to add stability to
 	remote network operations. The design of the network, and the strategic placement of
 	BDCs, together with an implementation that localizes as much of network to client
 	interchange as possible, will help to minimize wide-area network bandwidth needs
 	(and thus costs).
 	</p></li></ul></div><p>
-<a class="indexterm" name="id2588603"></a>
-<a class="indexterm" name="id2588609"></a>
-<a class="indexterm" name="id2588616"></a>
-<a class="indexterm" name="id2588623"></a>
-<a class="indexterm" name="id2588629"></a>
+<a class="indexterm" name="id355075"></a>
+<a class="indexterm" name="id355082"></a>
+<a class="indexterm" name="id355088"></a>
+<a class="indexterm" name="id355095"></a>
+<a class="indexterm" name="id355102"></a>
 The interoperation of a PDC and its BDCs in a true Windows NT4 environment is worth
 mentioning here. The PDC contains the master copy of the SAM. In the event that an
 administrator makes a change to the user account database while physically present
@@ -160,50 +160,50 @@
 it to the master SAM. The PDC will then contact all the BDCs in the domain and
 trigger them to obtain the update and then apply that to their own copy of the SAM.
 </p><p>
-<a class="indexterm" name="id2588653"></a>
-<a class="indexterm" name="id2588662"></a>
-<a class="indexterm" name="id2588671"></a>
-<a class="indexterm" name="id2588678"></a>
+<a class="indexterm" name="id355119"></a>
+<a class="indexterm" name="id355128"></a>
+<a class="indexterm" name="id355136"></a>
+<a class="indexterm" name="id355143"></a>
 Samba-3 cannot participate in true SAM replication and is therefore not able to
 employ precisely the same protocols used by MS Windows NT4. A Samba-3 BDC will
 not create SAM update delta files. It will not interoperate with a PDC (NT4 or Samba)
 to synchronize the SAM from delta files that are held by BDCs.
 </p><p>
-<a class="indexterm" name="id2588693"></a>
-<a class="indexterm" name="id2588699"></a>
+<a class="indexterm" name="id355155"></a>
+<a class="indexterm" name="id355162"></a>
 Samba-3 cannot function as a BDC to an MS Windows NT4 PDC, and Samba-3 cannot
 function correctly as a PDC to an MS Windows NT4 BDC. Both Samba-3 and MS Windows
 NT4 can function as a BDC to its own type of PDC.
 </p><p>
-<a class="indexterm" name="id2588713"></a>
-<a class="indexterm" name="id2588719"></a>
-<a class="indexterm" name="id2588726"></a>
+<a class="indexterm" name="id355174"></a>
+<a class="indexterm" name="id355180"></a>
+<a class="indexterm" name="id355187"></a>
 The BDC is said to hold a <span class="emphasis"><em>read-only</em></span> of the SAM from which
 it is able to process network logon requests and authenticate users. The BDC can
 continue to provide this service, particularly while, for example, the wide-area
 network link to the PDC is down. A BDC plays a very important role in both the
 maintenance of domain security as well as in network integrity.
 </p><p>
-<a class="indexterm" name="id2588745"></a>
-<a class="indexterm" name="id2588752"></a>
-<a class="indexterm" name="id2588759"></a>
-<a class="indexterm" name="id2588766"></a>
+<a class="indexterm" name="id355203"></a>
+<a class="indexterm" name="id355210"></a>
+<a class="indexterm" name="id355217"></a>
+<a class="indexterm" name="id355224"></a>
 In the event that the NT4 PDC should need to be taken out of service, or if it dies, one of the NT4 BDCs can
 be promoted to a PDC. If this happens while the original NT4 PDC is online, it is automatically demoted to an
 NT4 BDC. This is an important aspect of domain controller management. The tool that is used to effect a
 promotion or a demotion is the Server Manager for Domains. It should be noted that Samba-3 BDCs cannot be
 promoted in this manner because reconfiguration of Samba requires changes to the <code class="filename">smb.conf</code> file. It is easy
 enough to manuall change the <code class="filename">smb.conf</code> file and then restart relevant Samba network services.
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2588796"></a>Example PDC Configuration</h4></div></div></div><p>
-<a class="indexterm" name="id2588804"></a>
-<a class="indexterm" name="id2588811"></a>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id355248"></a>Example PDC Configuration</h4></div></div></div><p>
+<a class="indexterm" name="id355256"></a>
+<a class="indexterm" name="id355263"></a>
 Beginning with Version 2.2, Samba officially supports domain logons for all current Windows clients, including
 Windows NT4, 2003, and XP Professional. For Samba to be enabled as a PDC, some parameters in the
 <em class="parameter"><code>[global]</code></em> section of the <code class="filename">smb.conf</code> have to be set.  Refer to <a class="link" href="samba-bdc.html#minimalPDC" title="Example 5.1. Minimal smb.conf for a PDC in Use with a BDC LDAP Server on PDC">the Minimal smb.conf for a PDC in Use with a BDC  LDAP Server on PDC
 section</a> for an example of the minimum required settings.
-</p><div class="example"><a name="minimalPDC"></a><p class="title"><b>Example 5.1. Minimal smb.conf for a PDC in Use with a BDC  LDAP Server on PDC</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2588864"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id2588876"></a><em class="parameter"><code>passdb backend = ldapsam://localhost:389</code></em></td></tr><tr><td><a class="indexterm" name="id2588888"></a><em class="parameter"><code>domain master = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2588900"></a><em class="parameter"><code>domain logons = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2588911"></a><em class="parameter"><code>ldap suffix = dc=quenya,dc=org</code></em></td></tr><tr><td><a class="indexterm" name="id2588923"></a><em class="parameter"><code>ldap user suffix = ou=Users</code></em></td></tr><tr><td><a class="indexterm" name="id2588935"></a><em class="parameter"><code>ldap group suffix = ou=Groups</code></em></td></tr><tr><td><a class="indexterm" name="id2588947"></a><em class="parameter"><code>ldap machine suffix = ou=Computers</code></em></td></tr><tr><td><a class="indexterm" name="id2588959"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr><tr><td><a class="indexterm" name="id2588971"></a><em class="parameter"><code>ldap admin dn = cn=sambadmin,dc=quenya,dc=org</code></em></td></tr></table></div></div><br class="example-break"><p>
-<a class="indexterm" name="id2588987"></a>
-<a class="indexterm" name="id2588994"></a>
+</p><div class="example"><a name="minimalPDC"></a><p class="title"><b>Example 5.1. Minimal smb.conf for a PDC in Use with a BDC  LDAP Server on PDC</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id355313"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id355324"></a><em class="parameter"><code>passdb backend = ldapsam://localhost:389</code></em></td></tr><tr><td><a class="indexterm" name="id355336"></a><em class="parameter"><code>domain master = yes</code></em></td></tr><tr><td><a class="indexterm" name="id355348"></a><em class="parameter"><code>domain logons = yes</code></em></td></tr><tr><td><a class="indexterm" name="id355359"></a><em class="parameter"><code>ldap suffix = dc=quenya,dc=org</code></em></td></tr><tr><td><a class="indexterm" name="id355371"></a><em class="parameter"><code>ldap user suffix = ou=Users</code></em></td></tr><tr><td><a class="indexterm" name="id355382"></a><em class="parameter"><code>ldap group suffix = ou=Groups</code></em></td></tr><tr><td><a class="indexterm" name="id355394"></a><em class="parameter"><code>ldap machine suffix = ou=Computers</code></em></td></tr><tr><td><a class="indexterm" name="id355406"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr><tr><td><a class="indexterm" name="id355417"></a><em class="parameter"><code>ldap admin dn = cn=sambadmin,dc=quenya,dc=org</code></em></td></tr></table></div></div><br class="example-break"><p>
+<a class="indexterm" name="id355432"></a>
+<a class="indexterm" name="id355439"></a>
 Several other things like a <em class="parameter"><code>[homes]</code></em> and a <em class="parameter"><code>[netlogon]</code></em> share
 also need to be set along with settings for the profile path, the user's home drive, and so on. This is not
 covered in this chapter; for more information please refer to <a class="link" href="samba-pdc.html" title="Chapter 4. Domain Control">Domain Control</a>.
@@ -211,34 +211,34 @@
 configuration. Alternately, fully documented working example network configurations using OpenLDAP and Samba
 as available in the <a class="ulink" href="http://www.samba.org/samba/docs/Samba3-ByExample" target="_top">book</a> &#8220;<span class="quote">Samba-3
 by Example</span>&#8221; that may be obtained from local and on-line book stores.
-</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2589047"></a>LDAP Configuration Notes</h3></div></div></div><p>
-<a class="indexterm" name="id2589055"></a>
-<a class="indexterm" name="id2589064"></a>
-<a class="indexterm" name="id2589073"></a>
+</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id355488"></a>LDAP Configuration Notes</h3></div></div></div><p>
+<a class="indexterm" name="id355496"></a>
+<a class="indexterm" name="id355505"></a>
+<a class="indexterm" name="id355514"></a>
 When configuring a master and a slave LDAP server, it is advisable to use the master LDAP server
 for the PDC and slave LDAP servers for the BDCs. It is not essential to use slave LDAP servers; however,
 many administrators will want to do so in order to provide redundant services. Of course, one or more BDCs
 may use any slave LDAP server. Then again, it is entirely possible to use a single LDAP server for the
 entire network.
 </p><p>
-<a class="indexterm" name="id2589090"></a>
-<a class="indexterm" name="id2589100"></a>
-<a class="indexterm" name="id2589109"></a>
-<a class="indexterm" name="id2589115"></a>
-<a class="indexterm" name="id2589122"></a>
+<a class="indexterm" name="id355528"></a>
+<a class="indexterm" name="id355537"></a>
+<a class="indexterm" name="id355546"></a>
+<a class="indexterm" name="id355553"></a>
+<a class="indexterm" name="id355559"></a>
 When configuring a master LDAP server that will have slave LDAP servers, do not forget to configure this in
 the <code class="filename">/etc/openldap/slapd.conf</code> file. It must be noted that the DN of a server certificate
 must use the CN attribute to name the server, and the CN must carry the servers' fully qualified domain name.
 Additional alias names and wildcards may be present in the subjectAltName certificate extension. More details
 on server certificate names are in RFC2830.
 </p><p>
-<a class="indexterm" name="id2589146"></a>
-<a class="indexterm" name="id2589152"></a>
-<a class="indexterm" name="id2589159"></a>
-<a class="indexterm" name="id2589166"></a>
-<a class="indexterm" name="id2589175"></a>
-<a class="indexterm" name="id2589182"></a>
-<a class="indexterm" name="id2589189"></a>
+<a class="indexterm" name="id355579"></a>
+<a class="indexterm" name="id355586"></a>
+<a class="indexterm" name="id355592"></a>
+<a class="indexterm" name="id355599"></a>
+<a class="indexterm" name="id355608"></a>
+<a class="indexterm" name="id355615"></a>
+<a class="indexterm" name="id355622"></a>
 It does not really fit within the scope of this document, but a working LDAP installation is basic to
 LDAP-enabled Samba operation. When using an OpenLDAP server with Transport Layer Security (TLS), the machine
 name in <code class="filename">/etc/ssl/certs/slapd.pem</code> must be the same as in
@@ -247,12 +247,12 @@
 access this LDAP server from a slave LDAP server (i.e., a Samba BDC) unless the certificate is re-created with
 a correct hostname.
 </p><p>
-<a class="indexterm" name="id2589229"></a>
-<a class="indexterm" name="id2589235"></a>
-<a class="indexterm" name="id2589242"></a>
-<a class="indexterm" name="id2589249"></a>
-<a class="indexterm" name="id2589256"></a>
-<a class="indexterm" name="id2589263"></a>
+<a class="indexterm" name="id355657"></a>
+<a class="indexterm" name="id355664"></a>
+<a class="indexterm" name="id355671"></a>
+<a class="indexterm" name="id355678"></a>
+<a class="indexterm" name="id355684"></a>
+<a class="indexterm" name="id355691"></a>
 Do not install a Samba PDC so that is uses an LDAP slave server. Joining client machines to the domain
 will fail in this configuration because the change to the machine account in the LDAP tree must take place on
 the master LDAP server. This is not replicated rapidly enough to the slave server that the PDC queries. It
@@ -279,23 +279,23 @@
 In order to have a fallback configuration (secondary) LDAP server, you would specify
 the secondary LDAP server in the <code class="filename">smb.conf</code> file as shown in <a class="link" href="samba-bdc.html#mulitldapcfg" title="Example 5.2. Multiple LDAP Servers in smb.conf">the Multiple LDAP
 Servers in <code class="filename">smb.conf</code> example</a>.
-</p><div class="example"><a name="mulitldapcfg"></a><p class="title"><b>Example 5.2. Multiple LDAP Servers in <code class="filename">smb.conf</code></b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2589397"></a><em class="parameter"><code>passdb backend = ldapsam:"ldap://master.quenya.org ldap://slave.quenya.org"</code></em></td></tr></table></div></div><br class="example-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2589411"></a>Active Directory Domain Control</h3></div></div></div><p>
-<a class="indexterm" name="id2589419"></a>
-<a class="indexterm" name="id2589426"></a>
-<a class="indexterm" name="id2589433"></a>
-<a class="indexterm" name="id2589440"></a>
-<a class="indexterm" name="id2589447"></a>
-<a class="indexterm" name="id2589453"></a>
+</p><div class="example"><a name="mulitldapcfg"></a><p class="title"><b>Example 5.2. Multiple LDAP Servers in <code class="filename">smb.conf</code></b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id355806"></a><em class="parameter"><code>passdb backend = ldapsam:"ldap://master.quenya.org ldap://slave.quenya.org"</code></em></td></tr></table></div></div><br class="example-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id355820"></a>Active Directory Domain Control</h3></div></div></div><p>
+<a class="indexterm" name="id355828"></a>
+<a class="indexterm" name="id355835"></a>
+<a class="indexterm" name="id355842"></a>
+<a class="indexterm" name="id355848"></a>
+<a class="indexterm" name="id355855"></a>
+<a class="indexterm" name="id355862"></a>
 As of the release of MS Windows 2000 and Active Directory, this information is now stored
 in a directory that can be replicated and for which partial or full administrative control
 can be delegated. Samba-3 is not able to be a domain controller within an Active Directory
 tree, and it cannot be an Active Directory server. This means that Samba-3 also cannot
 act as a BDC to an Active Directory domain controller.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2589470"></a>What Qualifies a Domain Controller on the Network?</h3></div></div></div><p>
-<a class="indexterm" name="id2589478"></a>
-<a class="indexterm" name="id2589484"></a>
-<a class="indexterm" name="id2589491"></a>
-<a class="indexterm" name="id2589498"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id355874"></a>What Qualifies a Domain Controller on the Network?</h3></div></div></div><p>
+<a class="indexterm" name="id355882"></a>
+<a class="indexterm" name="id355889"></a>
+<a class="indexterm" name="id355895"></a>
+<a class="indexterm" name="id355902"></a>
 Every machine that is a domain controller for the domain MIDEARTH has to register the NetBIOS
 group name MIDEARTH&lt;1C&gt; with the WINS server and/or by broadcast on the local network.
 The PDC also registers the unique NetBIOS name MIDEARTH&lt;1B&gt; with the WINS server.
@@ -303,30 +303,30 @@
 that has nothing to do with anything related to authentication, but the Microsoft domain
 implementation requires the DMB to be on the same machine as the PDC.
 </p><p>
-<a class="indexterm" name="id2589520"></a>
-<a class="indexterm" name="id2589526"></a>
-<a class="indexterm" name="id2589533"></a>
+<a class="indexterm" name="id355918"></a>
+<a class="indexterm" name="id355925"></a>
+<a class="indexterm" name="id355932"></a>
 Where a WINS server is not used, broadcast name registrations alone must suffice. Refer to
 <a class="link" href="NetworkBrowsing.html" title="Chapter 10. Network Browsing">Network Browsing</a>,<a class="link" href="NetworkBrowsing.html#netdiscuss" title="Discussion">Discussion</a>
 for more information regarding TCP/IP network protocols and how SMB/CIFS names are handled.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2589560"></a>How Does a Workstation find its Domain Controller?</h3></div></div></div><p>
-<a class="indexterm" name="id2589569"></a>
-<a class="indexterm" name="id2589576"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id355957"></a>How Does a Workstation find its Domain Controller?</h3></div></div></div><p>
+<a class="indexterm" name="id355965"></a>
+<a class="indexterm" name="id355972"></a>
 There are two different mechanisms to locate a domain controller: one method is used when
 NetBIOS over TCP/IP is enabled and the other when it has been disabled in the TCP/IP
 network configuration.
 </p><p>
-<a class="indexterm" name="id2589589"></a>
-<a class="indexterm" name="id2589596"></a>
+<a class="indexterm" name="id355983"></a>
+<a class="indexterm" name="id355990"></a>
 Where NetBIOS over TCP/IP is disabled, all name resolution involves the use of DNS, broadcast
 messaging over UDP, as well as Active Directory communication technologies. In this type of
 environment all machines require appropriate DNS entries. More information may be found in
 <a class="link" href="NetworkBrowsing.html#adsdnstech" title="DNS and Active Directory">DNS and Active Directory</a>.
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2589617"></a>NetBIOS Over TCP/IP Enabled</h4></div></div></div><p>
-<a class="indexterm" name="id2589625"></a>
-<a class="indexterm" name="id2589632"></a>
-<a class="indexterm" name="id2589639"></a>
-<a class="indexterm" name="id2589646"></a>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id356009"></a>NetBIOS Over TCP/IP Enabled</h4></div></div></div><p>
+<a class="indexterm" name="id356016"></a>
+<a class="indexterm" name="id356023"></a>
+<a class="indexterm" name="id356030"></a>
+<a class="indexterm" name="id356037"></a>
 An MS Windows NT4/200x/XP Professional workstation in the domain MIDEARTH that wants a
 local user to be authenticated has to find the domain controller for MIDEARTH. It does this
 by doing a NetBIOS name query for the group name MIDEARTH&lt;1C&gt;. It assumes that each
@@ -334,26 +334,26 @@
 requests. To not open security holes, both the workstation and the selected domain controller
 authenticate each other. After that the workstation sends the user's credentials (name and
 password) to the local domain controller for validation.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2589683"></a>NetBIOS Over TCP/IP Disabled</h4></div></div></div><p>
-<a class="indexterm" name="id2589691"></a>
-<a class="indexterm" name="id2589698"></a>
-<a class="indexterm" name="id2589705"></a>
-<a class="indexterm" name="id2589712"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id356060"></a>NetBIOS Over TCP/IP Disabled</h4></div></div></div><p>
+<a class="indexterm" name="id356067"></a>
+<a class="indexterm" name="id356074"></a>
+<a class="indexterm" name="id356081"></a>
+<a class="indexterm" name="id356088"></a>
 An MS Windows NT4/200x/XP Professional workstation in the realm <code class="constant">quenya.org</code>
 that has a need to affect user logon authentication will locate the domain controller by 
 re-querying DNS servers for the <code class="constant">_ldap._tcp.pdc._msdcs.quenya.org</code> record.
 More information regarding this subject may be found in <a class="link" href="NetworkBrowsing.html#adsdnstech" title="DNS and Active Directory">DNS and Active Directory</a>.
-</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2589742"></a>Backup Domain Controller Configuration</h2></div></div></div><p>
-<a class="indexterm" name="id2589750"></a>
+</p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id356115"></a>Backup Domain Controller Configuration</h2></div></div></div><p>
+<a class="indexterm" name="id356123"></a>
 The creation of a BDC requires some steps to prepare the Samba server before
 <span class="application">smbd</span> is executed for the first time. These steps are as follows:
 </p><div class="itemizedlist"><ul type="disc"><li><p>
-	<a class="indexterm" name="id2589771"></a>
-	<a class="indexterm" name="id2589777"></a>
-	<a class="indexterm" name="id2589784"></a>
-	<a class="indexterm" name="id2589790"></a>
-	<a class="indexterm" name="id2589797"></a>
-	<a class="indexterm" name="id2589804"></a>
+	<a class="indexterm" name="id356143"></a>
+	<a class="indexterm" name="id356150"></a>
+	<a class="indexterm" name="id356156"></a>
+	<a class="indexterm" name="id356163"></a>
+	<a class="indexterm" name="id356170"></a>
+	<a class="indexterm" name="id356176"></a>
 	The domain SID has to be the same on the PDC and the BDC. In Samba versions pre-2.2.5, the domain SID was
 	stored in the file <code class="filename">private/MACHINE.SID</code>.  For all versions of Samba released since 2.2.5
 	the domain SID is stored in the file <code class="filename">private/secrets.tdb</code>. This file is unique to each
@@ -361,19 +361,19 @@
 	the PDC domain SID with the newly created BDC SID.  There is a procedure that will allow the BDC to aquire the
 	domain SID. This is described here.
 	</p><p>
-	<a class="indexterm" name="id2589835"></a>
-	<a class="indexterm" name="id2589842"></a>
-	<a class="indexterm" name="id2589848"></a>
-	<a class="indexterm" name="id2589855"></a>
-	<a class="indexterm" name="id2589861"></a>
+	<a class="indexterm" name="id356202"></a>
+	<a class="indexterm" name="id356209"></a>
+	<a class="indexterm" name="id356216"></a>
+	<a class="indexterm" name="id356222"></a>
+	<a class="indexterm" name="id356229"></a>
 	To retrieve the domain SID from the PDC or an existing BDC and store it in the
 	<code class="filename">secrets.tdb</code>, execute:
 	</p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>net rpc getsid</code></strong>
 </pre></li><li><p>
-	<a class="indexterm" name="id2589902"></a>
-	<a class="indexterm" name="id2589908"></a>
-	<a class="indexterm" name="id2589915"></a>
+	<a class="indexterm" name="id356268"></a>
+	<a class="indexterm" name="id356275"></a>
+	<a class="indexterm" name="id356282"></a>
 	Specification of the <a class="link" href="smb.conf.5.html#LDAPADMINDN">ldap admin dn</a> is obligatory.
 	This also requires the LDAP administration password to be set in the <code class="filename">secrets.tdb</code>
 	using the <code class="literal">smbpasswd -w <em class="replaceable"><code>mysecret</code></em></code>.
@@ -381,10 +381,10 @@
 	The <a class="link" href="smb.conf.5.html#LDAPSUFFIX">ldap suffix</a> parameter and the <a class="link" href="smb.conf.5.html#LDAPIDMAPSUFFIX">ldap idmap suffix</a>
 	parameter must be specified in the <code class="filename">smb.conf</code> file.
 	</p></li><li><p>
-	<a class="indexterm" name="id2589990"></a>
-	<a class="indexterm" name="id2589998"></a>
-	<a class="indexterm" name="id2590005"></a>
-	<a class="indexterm" name="id2590012"></a>
+	<a class="indexterm" name="id356352"></a>
+	<a class="indexterm" name="id356361"></a>
+	<a class="indexterm" name="id356368"></a>
+	<a class="indexterm" name="id356375"></a>
 	The UNIX user database has to be synchronized from the PDC to the
 	BDC. This means that both the <code class="filename">/etc/passwd</code> and
 	<code class="filename">/etc/group</code> have to be replicated from the PDC
@@ -395,14 +395,14 @@
 	a PDC failure. NIS is by no means the only method to synchronize
 	passwords. An LDAP solution would also work.
 	</p></li><li><p>
-	<a class="indexterm" name="id2590045"></a>
-	<a class="indexterm" name="id2590052"></a>
-	<a class="indexterm" name="id2590059"></a>
-	<a class="indexterm" name="id2590065"></a>
-	<a class="indexterm" name="id2590072"></a>
-	<a class="indexterm" name="id2590079"></a>
-	<a class="indexterm" name="id2590086"></a>
-	<a class="indexterm" name="id2590092"></a>
+	<a class="indexterm" name="id356403"></a>
+	<a class="indexterm" name="id356410"></a>
+	<a class="indexterm" name="id356416"></a>
+	<a class="indexterm" name="id356423"></a>
+	<a class="indexterm" name="id356430"></a>
+	<a class="indexterm" name="id356436"></a>
+	<a class="indexterm" name="id356443"></a>
+	<a class="indexterm" name="id356450"></a>
 	The Samba password database must be replicated from the PDC to the BDC.
 	Although it is possible to synchronize the <code class="filename">smbpasswd</code>
 	file with <code class="literal">rsync</code> and <code class="literal">ssh</code>, this method
@@ -417,63 +417,63 @@
 	intervals  administrators are not normally aware that this is happening
 	or when it takes place.
 	</p><p>
-	<a class="indexterm" name="id2590138"></a>
-	<a class="indexterm" name="id2590145"></a>
-	<a class="indexterm" name="id2590152"></a>
-	<a class="indexterm" name="id2590158"></a>
+	<a class="indexterm" name="id356488"></a>
+	<a class="indexterm" name="id356494"></a>
+	<a class="indexterm" name="id356501"></a>
+	<a class="indexterm" name="id356508"></a>
 	The use of LDAP for both the POSIX (UNIX user and group) accounts and for the
 	SambaSAMAccount data automatically ensures that all account change information
 	will be written to the shared directory. This eliminates the need for any special
 	action to synchronize account information because LDAP will meet that requirement.
 	</p></li><li><p>
-	<a class="indexterm" name="id2590175"></a>
-	<a class="indexterm" name="id2590182"></a>
-	<a class="indexterm" name="id2590189"></a>
-	<a class="indexterm" name="id2590195"></a>
-	<a class="indexterm" name="id2590202"></a>
-	<a class="indexterm" name="id2590209"></a>
+	<a class="indexterm" name="id356522"></a>
+	<a class="indexterm" name="id356529"></a>
+	<a class="indexterm" name="id356536"></a>
+	<a class="indexterm" name="id356542"></a>
+	<a class="indexterm" name="id356549"></a>
+	<a class="indexterm" name="id356556"></a>
 	The netlogon share has to be replicated from the PDC to the BDC. This can be done manually whenever login
 	scripts are changed, or it can be done automatically using a <code class="literal">cron</code> job that will replicate
 	the directory structure in this share using a tool like <code class="literal">rsync</code>. The use of
 	<code class="literal">rsync</code> for replication of the netlogon data is not critical to network security and is one
 	that can be manually managed given that the administrator will make all changes to the netlogon share as part
 	of a conscious move.
-	</p></li></ul></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2590243"></a>Example Configuration</h3></div></div></div><p>
+	</p></li></ul></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id356586"></a>Example Configuration</h3></div></div></div><p>
 Finally, the BDC has to be capable of being found by the workstations. This can be done by configuring the
 Samba <code class="filename">smb.conf</code> file <em class="parameter"><code>[global]</code></em> section as shown in <a class="link" href="samba-bdc.html#minim-bdc" title="Example 5.3. Minimal Setup for Being a BDC">Minimal
 Setup for Being a BDC</a>.
-</p><div class="example"><a name="minim-bdc"></a><p class="title"><b>Example 5.3. Minimal Setup for Being a BDC</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2590289"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id2590301"></a><em class="parameter"><code>passdb backend = ldapsam:ldap://slave-ldap.quenya.org</code></em></td></tr><tr><td><a class="indexterm" name="id2590313"></a><em class="parameter"><code>domain master = no</code></em></td></tr><tr><td><a class="indexterm" name="id2590325"></a><em class="parameter"><code>domain logons = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2590337"></a><em class="parameter"><code>ldap suffix = dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id2590349"></a><em class="parameter"><code>ldap user suffix = ou=Users</code></em></td></tr><tr><td><a class="indexterm" name="id2590361"></a><em class="parameter"><code>ldap group suffix = ou=Groups</code></em></td></tr><tr><td><a class="indexterm" name="id2590373"></a><em class="parameter"><code>ldap machine suffix = ou=Computers</code></em></td></tr><tr><td><a class="indexterm" name="id2590385"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr><tr><td><a class="indexterm" name="id2590397"></a><em class="parameter"><code>ldap admin dn = cn=sambadmin,dc=quenya,dc=org</code></em></td></tr><tr><td><a class="indexterm" name="id2590409"></a><em class="parameter"><code>idmap backend = ldap:ldap://master-ldap.quenya.org</code></em></td></tr><tr><td><a class="indexterm" name="id2590421"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id2590433"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr></table></div></div><br class="example-break"><p>
+</p><div class="example"><a name="minim-bdc"></a><p class="title"><b>Example 5.3. Minimal Setup for Being a BDC</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id356630"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id356642"></a><em class="parameter"><code>passdb backend = ldapsam:ldap://slave-ldap.quenya.org</code></em></td></tr><tr><td><a class="indexterm" name="id356653"></a><em class="parameter"><code>domain master = no</code></em></td></tr><tr><td><a class="indexterm" name="id356665"></a><em class="parameter"><code>domain logons = yes</code></em></td></tr><tr><td><a class="indexterm" name="id356676"></a><em class="parameter"><code>ldap suffix = dc=abmas,dc=biz</code></em></td></tr><tr><td><a class="indexterm" name="id356688"></a><em class="parameter"><code>ldap user suffix = ou=Users</code></em></td></tr><tr><td><a class="indexterm" name="id356699"></a><em class="parameter"><code>ldap group suffix = ou=Groups</code></em></td></tr><tr><td><a class="indexterm" name="id356711"></a><em class="parameter"><code>ldap machine suffix = ou=Computers</code></em></td></tr><tr><td><a class="indexterm" name="id356723"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr><tr><td><a class="indexterm" name="id356734"></a><em class="parameter"><code>ldap admin dn = cn=sambadmin,dc=quenya,dc=org</code></em></td></tr><tr><td><a class="indexterm" name="id356746"></a><em class="parameter"><code>idmap backend = ldap:ldap://master-ldap.quenya.org</code></em></td></tr><tr><td><a class="indexterm" name="id356758"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td><a class="indexterm" name="id356769"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr></table></div></div><br class="example-break"><p>
 Fully documented working example network configurations using OpenLDAP and Samba
 as available in the <a class="ulink" href="http://www.samba.org/samba/docs/Samba3-ByExample" target="_top">book</a> &#8220;<span class="quote">Samba-3
 by Example</span>&#8221; that may be obtained from local and on-line book stores.
 </p><p>
-<a class="indexterm" name="id2590464"></a>
-<a class="indexterm" name="id2590470"></a>
-<a class="indexterm" name="id2590477"></a>
-<a class="indexterm" name="id2590484"></a>
+<a class="indexterm" name="id356798"></a>
+<a class="indexterm" name="id356805"></a>
+<a class="indexterm" name="id356811"></a>
+<a class="indexterm" name="id356818"></a>
 This configuration causes the BDC to register only the name MIDEARTH&lt;1C&gt; with the WINS server. This is
 not a problem, as the name MIDEARTH&lt;1C&gt; is a NetBIOS group name that is meant to be registered by more
 than one machine. The parameter <a class="link" href="smb.conf.5.html#DOMAINMASTER">domain master = no</a> forces the BDC not to
 register MIDEARTH&lt;1B&gt;, which is a unique NetBIOS name that is reserved for the PDC.
 </p><p>
-<a class="indexterm" name="id2590516"></a>
-<a class="indexterm" name="id2590523"></a>
-<a class="indexterm" name="id2590530"></a>
-<a class="indexterm" name="id2590536"></a>
-<a class="indexterm" name="id2590543"></a>
-<a class="indexterm" name="id2590550"></a>
-<a class="indexterm" name="id2590557"></a>
-<a class="indexterm" name="id2590563"></a>
-<a class="indexterm" name="id2590570"></a>
+<a class="indexterm" name="id356844"></a>
+<a class="indexterm" name="id356850"></a>
+<a class="indexterm" name="id356857"></a>
+<a class="indexterm" name="id356864"></a>
+<a class="indexterm" name="id356870"></a>
+<a class="indexterm" name="id356877"></a>
+<a class="indexterm" name="id356884"></a>
+<a class="indexterm" name="id356890"></a>
+<a class="indexterm" name="id356897"></a>
 The <em class="parameter"><code>idmap backend</code></em> will redirect the <code class="literal">winbindd</code> utility to use the LDAP
 database to store all mappings for Windows SIDs to  UIDs and GIDs for UNIX accounts in a repository that is
 shared. The BDC will however depend on local resolution of UIDs and GIDs via NSS and the
 <code class="literal">nss_ldap</code> utility.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2590603"></a>
-<a class="indexterm" name="id2590612"></a>
-<a class="indexterm" name="id2590619"></a>
-<a class="indexterm" name="id2590626"></a>
+<a class="indexterm" name="id356928"></a>
+<a class="indexterm" name="id356937"></a>
+<a class="indexterm" name="id356944"></a>
+<a class="indexterm" name="id356951"></a>
 Samba-3 has introduced a new ID mapping facility. One of the features of this facility is that it
 allows greater flexibility in how user and group IDs are handled in respect to NT domain user and group
 SIDs. One of the new facilities provides for explicitly ensuring that UNIX/Linux UID and GID values
@@ -481,27 +481,27 @@
 is called <em class="parameter"><code>idmap backend</code></em>. Please refer to the man page for <code class="filename">smb.conf</code> for more information
 regarding its behavior.
 </p></div><p>
-<a class="indexterm" name="id2590656"></a>
-<a class="indexterm" name="id2590663"></a>
-<a class="indexterm" name="id2590670"></a>
+<a class="indexterm" name="id356977"></a>
+<a class="indexterm" name="id356983"></a>
+<a class="indexterm" name="id356990"></a>
 The use of the <a class="link" href="smb.conf.5.html#IDMAPBACKEND">idmap backend = ldap:ldap://master.quenya.org</a>
 option on a BDC only makes sense where ldapsam is used on a PDC. The purpose of an LDAP-based idmap backend is
 also to allow a domain member (without its own passdb backend) to use winbindd to resolve Windows network users
 and groups to common UID/GIDs. In other words, this option is generally intended for use on BDCs and on domain
 member servers.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2590700"></a>Common Errors</h2></div></div></div><p>
-<a class="indexterm" name="id2590707"></a>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id357015"></a>Common Errors</h2></div></div></div><p>
+<a class="indexterm" name="id357022"></a>
 Domain control was a new area for Samba, but there are now many examples that we may refer to.
 Updated information will be published as they become available and may be found in later Samba releases or
 from the Samba Web <a class="ulink" href="http://samba.org" target="_top">site</a>; refer in particular to the
 <code class="filename">WHATSNEW.txt</code> in the Samba release tarball. The book, &#8220;<span class="quote">Samba-3 by Example</span>&#8221;
 documents well tested and proven configuration examples. You can obtain a copy of this
 <a class="ulink" href="http://www.samba.org/samba/docs/Samba3-ByExample.pdf" target="_top">book</a> for the Samba web site.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2590743"></a>Machine Accounts Keep Expiring</h3></div></div></div><p>
-<a class="indexterm" name="id2590751"></a>
-<a class="indexterm" name="id2590758"></a>
-<a class="indexterm" name="id2590765"></a>
-<a class="indexterm" name="id2590772"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id357055"></a>Machine Accounts Keep Expiring</h3></div></div></div><p>
+<a class="indexterm" name="id357063"></a>
+<a class="indexterm" name="id357070"></a>
+<a class="indexterm" name="id357077"></a>
+<a class="indexterm" name="id357083"></a>
 This problem will occur when the passdb (SAM) files are copied  from a central
 server but the local BDC is acting as a PDC. This results in the application of
 Local Machine Trust Account password updates to the local SAM. Such updates 
@@ -513,43 +513,43 @@
 </p><p>
 The solution is to use a more robust passdb backend, such as the ldapsam backend, setting up
 a slave LDAP server for each BDC and a master LDAP server for the PDC.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2590798"></a>Can Samba Be a Backup Domain Controller to an NT4 PDC?</h3></div></div></div><p>
-<a class="indexterm" name="id2590807"></a>
-<a class="indexterm" name="id2590816"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id357103"></a>Can Samba Be a Backup Domain Controller to an NT4 PDC?</h3></div></div></div><p>
+<a class="indexterm" name="id357111"></a>
+<a class="indexterm" name="id357120"></a>
 No. The native NT4 SAM replication protocols have not yet been fully implemented.
 </p><p>
-<a class="indexterm" name="id2590827"></a>
-<a class="indexterm" name="id2590833"></a>
-<a class="indexterm" name="id2590840"></a>
+<a class="indexterm" name="id357130"></a>
+<a class="indexterm" name="id357137"></a>
+<a class="indexterm" name="id357143"></a>
 Can I get the benefits of a BDC with Samba?  Yes, but only to a Samba PDC.The
 main reason for implementing a BDC is availability. If the PDC is a Samba
 machine, a second Samba machine can be set up to service logon requests whenever
 the PDC is down.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2590853"></a>How Do I Replicate the smbpasswd File?</h3></div></div></div><p>
-<a class="indexterm" name="id2590861"></a>
-<a class="indexterm" name="id2590870"></a>
-<a class="indexterm" name="id2590877"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id357154"></a>How Do I Replicate the smbpasswd File?</h3></div></div></div><p>
+<a class="indexterm" name="id357162"></a>
+<a class="indexterm" name="id357171"></a>
+<a class="indexterm" name="id357178"></a>
 Replication of the smbpasswd file is sensitive. It has to be done whenever changes
 to the SAM are made. Every user's password change is done in the smbpasswd file and
 has to be replicated to the BDC. So replicating the smbpasswd file very often is necessary.
 </p><p>
-<a class="indexterm" name="id2590891"></a>
-<a class="indexterm" name="id2590898"></a>
-<a class="indexterm" name="id2590905"></a>
+<a class="indexterm" name="id357190"></a>
+<a class="indexterm" name="id357197"></a>
+<a class="indexterm" name="id357203"></a>
 As the smbpasswd file contains plaintext password equivalents, it must not be
 sent unencrypted over the wire. The best way to set up smbpasswd replication from
 the PDC to the BDC is to use the utility rsync. rsync can use ssh as a transport.
 <code class="literal">ssh</code> itself can be set up to accept <span class="emphasis"><em>only</em></span>
 <code class="literal">rsync</code> transfer without requiring the user to type a password.
 </p><p>
-<a class="indexterm" name="id2590935"></a>
-<a class="indexterm" name="id2590942"></a>
+<a class="indexterm" name="id357231"></a>
+<a class="indexterm" name="id357238"></a>
 As said a few times before, use of this method is broken and flawed. Machine trust 
 accounts will go out of sync, resulting in a broken domain. This method is
 <span class="emphasis"><em>not</em></span> recommended. Try using LDAP instead.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2590958"></a>Can I Do This All with LDAP?</h3></div></div></div><p>
-<a class="indexterm" name="id2590966"></a>
-<a class="indexterm" name="id2590973"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id357252"></a>Can I Do This All with LDAP?</h3></div></div></div><p>
+<a class="indexterm" name="id357260"></a>
+<a class="indexterm" name="id357267"></a>
 The simple answer is yes. Samba's pdb_ldap code supports binding to a replica
 LDAP server and will also follow referrals and rebind to the master if it ever
 needs to make a modification to the database. (Normally BDCs are read-only, so

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/samba-pdc.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/samba-pdc.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/samba-pdc.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,10 +1,10 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 4. Domain Control</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="type.html" title="Part II. Server Configuration Basics"><link rel="prev" href="ServerType.html" title="Chapter 3. Server Types and Security Modes"><link rel="next" href="samba-bdc.html" title="Chapter 5. Backup Domain Control"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 4. Domain Control</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ServerType.html">Prev</a> </td><th width="60%" align="center">Part II. Server Configuration Basics</th><td width="20%" align="right"> <a accesskey="n" href="samba-bdc.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="samba-pdc"></a>Chapter 4. Domain Control</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Gerald</span> <span class="othername">(Jerry)</span> <span class="surname">Carter</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jerry at samba.org">jerry at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">David</span> <span class="surname">Bannon</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:dbannon at samba.org">dbannon at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Guenther</span> <span class="surname">Deschner</span></h3><span class="contrib">LDAP updates</span> <div class="affiliation"><span class="orgname">SuSE<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:gd at suse.de">gd at suse.de</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="samba-pdc.html#id2583338">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></span></dt><dt><span class="sect1"><a href="samba-pdc.html#id2584572">Basics of Domain Control</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-pdc.html#id2584592">Domain Controller Types</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id2585096">Preparing for Domain Control</a></span></dt></dl></dd><dt><span class="sect1"><a href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a></span></dt><dt><span class="sect1"><a href="samba-pdc.html#id2586348">Samba ADS Domain Control</a></span></dt><dt><span class="sect1"><a href="samba-pdc.html#id2586412">Domain and Network Logon Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-pdc.html#id2586431">Domain Network Logon Service</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id2587021">Security Mode and Master Browsers</a></span></dt></dl></dd><dt><span class="sect1"><a href="samba-pdc.html#id2587294">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-pdc.html#id2587300">&#8220;<span class="quote">$</span>&#8221; Cannot Be Included in Machine Name</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id2587400">Joining Domain Fails Because of Existing Machine Account</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id2587465">The System Cannot Log You On (C000019B)</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id2587541">The Machine Trust Account Is Not Accessible</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id2587660">Account Disabled</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id2587688">Domain Controller Unavailable</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id2587706">Cannot Log onto Domain Member Workstation After Joining Domain</a></span></dt></dl></dd></dl></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 4. Domain Control</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="type.html" title="Part II. Server Configuration Basics"><link rel="prev" href="ServerType.html" title="Chapter 3. Server Types and Security Modes"><link rel="next" href="samba-bdc.html" title="Chapter 5. Backup Domain Control"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 4. Domain Control</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ServerType.html">Prev</a> </td><th width="60%" align="center">Part II. Server Configuration Basics</th><td width="20%" align="right"> <a accesskey="n" href="samba-bdc.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="samba-pdc"></a>Chapter 4. Domain Control</h2></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Gerald</span> <span class="othername">(Jerry)</span> <span class="surname">Carter</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jerry at samba.org">jerry at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">David</span> <span class="surname">Bannon</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:dbannon at samba.org">dbannon at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Guenther</span> <span class="surname">Deschner</span></h3><span class="contrib">LDAP updates</span> <div class="affiliation"><span class="orgname">SuSE<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:gd at suse.de">gd at suse.de</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="samba-pdc.html#id350366">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></span></dt><dt><span class="sect1"><a href="samba-pdc.html#id351396">Basics of Domain Control</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-pdc.html#id351413">Domain Controller Types</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id351870">Preparing for Domain Control</a></span></dt></dl></dd><dt><span class="sect1"><a href="samba-pdc.html#id352336">Domain Control: Example Configuration</a></span></dt><dt><span class="sect1"><a href="samba-pdc.html#id353048">Samba ADS Domain Control</a></span></dt><dt><span class="sect1"><a href="samba-pdc.html#id353096">Domain and Network Logon Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-pdc.html#id353114">Domain Network Logon Service</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id353648">Security Mode and Master Browsers</a></span></dt></dl></dd><dt><span class="sect1"><a href="samba-pdc.html#id353878">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-pdc.html#id353884">&#8220;<span class="quote">$</span>&#8221; Cannot Be Included in Machine Name</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id353978">Joining Domain Fails Because of Existing Machine Account</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id354037">The System Cannot Log You On (C000019B)</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id354104">The Machine Trust Account Is Not Accessible</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id354209">Account Disabled</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id354234">Domain Controller Unavailable</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id354251">Cannot Log onto Domain Member Workstation After Joining Domain</a></span></dt></dl></dd></dl></div><p>
 There are many who approach MS Windows networking with incredible misconceptions.
 That's okay, because it gives the rest of us plenty of opportunity to be of assistance.
 Those who really want help are well advised to become familiar with information
 that is already available.
 </p><p>
-<a class="indexterm" name="id2583200"></a>
+<a class="indexterm" name="id350254"></a>
 You are advised not to tackle this section without having first understood
 and mastered some basics. MS Windows networking is not particularly forgiving of
 misconfiguration. Users of MS Windows networking are likely to complain 
@@ -32,14 +32,14 @@
 Where is the right place to make mistakes? Only out of harms way. If you are going to
 make mistakes, then please do it on a test network, away from users, and in such a way as
 to not inflict pain on others. Do your learning on a test network.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2583338"></a>Features and Benefits</h2></div></div></div><p>
-<a class="indexterm" name="id2583346"></a>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id350366"></a>Features and Benefits</h2></div></div></div><p>
+<a class="indexterm" name="id350374"></a>
 <span class="emphasis"><em>What is the key benefit of Microsoft Domain Security?</em></span>
 </p><p>
-<a class="indexterm" name="id2583360"></a>
-<a class="indexterm" name="id2583369"></a>
-<a class="indexterm" name="id2583376"></a>
-<a class="indexterm" name="id2583383"></a>
+<a class="indexterm" name="id350386"></a>
+<a class="indexterm" name="id350395"></a>
+<a class="indexterm" name="id350401"></a>
+<a class="indexterm" name="id350407"></a>
 In a word, <span class="emphasis"><em>single sign-on</em></span>, or SSO for short. To many, this is the Holy Grail of MS
 Windows NT and beyond networking. SSO allows users in a well-designed network to log onto any workstation that
 is a member of the domain that contains their user account (or in a domain that has an appropriate trust
@@ -47,24 +47,24 @@
 resources (shares, files, and printers) as if they are sitting at their home (personal) workstation. This is a
 feature of the domain security protocols.
 </p><p>
-<a class="indexterm" name="id2583411"></a>
-<a class="indexterm" name="id2583417"></a>
-<a class="indexterm" name="id2583424"></a>
-<a class="indexterm" name="id2583433"></a>
-<a class="indexterm" name="id2583442"></a>
+<a class="indexterm" name="id350429"></a>
+<a class="indexterm" name="id350435"></a>
+<a class="indexterm" name="id350441"></a>
+<a class="indexterm" name="id350450"></a>
+<a class="indexterm" name="id350458"></a>
 The benefits of domain security are available to those sites that deploy a Samba PDC.  A domain provides a
 unique network security identifier (SID). Domain user and group security identifiers are comprised of the
 network SID plus a relative identifier (RID) that is unique to the account. User and group SIDs (the network
 SID plus the RID) can be used to create access control lists (ACLs) attached to network resources to provide
 organizational access control. UNIX systems recognize only local security identifiers.
 </p><p>
-<a class="indexterm" name="id2583461"></a>
+<a class="indexterm" name="id350472"></a>
 A SID represents a security context. For example, every Windows machine has local accounts within the security
 context of the local machine which has a unique SID. Every domain (NT4, ADS, Samba) contains accounts that
 exist within the domain security context which is defined by the domain SID.
 </p><p>
-<a class="indexterm" name="id2583476"></a>
-<a class="indexterm" name="id2583482"></a>
+<a class="indexterm" name="id350484"></a>
+<a class="indexterm" name="id350490"></a>
 A domain member server will have a SID that differs from the domain SID.  The domain member server can be
 configured to regard all domain users as local users. It can also be configured to recognize domain users and
 groups as non-local. SIDs are persistent. A typical domain of user SID looks like this:
@@ -82,9 +82,9 @@
 </pre><p>
 The result is that every account in the Windows networking world has a globally unique security identifier.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2583529"></a>
-<a class="indexterm" name="id2583538"></a>
-<a class="indexterm" name="id2583545"></a>
+<a class="indexterm" name="id350526"></a>
+<a class="indexterm" name="id350534"></a>
+<a class="indexterm" name="id350540"></a>
 Network clients of an MS Windows domain security environment must be domain members to be able to gain access
 to the advanced features provided. Domain membership involves more than just setting the workgroup name to the
 domain name. It requires the creation of a domain trust account for the workstation (called a machine
@@ -92,44 +92,44 @@
 </p></div><p>
 The following functionalities are new to the Samba-3 release:
 </p><div class="itemizedlist"><ul type="disc"><li><p>
-	<a class="indexterm" name="id2583579"></a>
+	<a class="indexterm" name="id350567"></a>
 	Samba-3 supports the use of a choice of backends that may be used in which user, group and machine
 	accounts may be stored. Multiple passwd backends can be used in combination, either as additive backend
 	data sets, or as fail-over data sets.
 	</p><p>
-	<a class="indexterm" name="id2583596"></a>
-	<a class="indexterm" name="id2583602"></a>
-	<a class="indexterm" name="id2583609"></a>
-	<a class="indexterm" name="id2583616"></a>
-	<a class="indexterm" name="id2583623"></a>
+	<a class="indexterm" name="id350581"></a>
+	<a class="indexterm" name="id350587"></a>
+	<a class="indexterm" name="id350593"></a>
+	<a class="indexterm" name="id350600"></a>
+	<a class="indexterm" name="id350606"></a>
 	An LDAP passdb backend confers the benefit that the account backend can be distributed and replicated,
 	which is of great value because it confers scalability and provides a high degree of reliability. 
 	</p></li><li><p>
-	<a class="indexterm" name="id2583638"></a>
-	<a class="indexterm" name="id2583649"></a>
-	<a class="indexterm" name="id2583658"></a>
+	<a class="indexterm" name="id350618"></a>
+	<a class="indexterm" name="id350629"></a>
+	<a class="indexterm" name="id350637"></a>
 	Windows NT4 domain trusts. Samba-3 supports workstation and server (machine) trust accounts. It also
 	supports Windows NT4 style interdomain trust accounts, which further assists in network scalability
 	and interoperability.
 	</p></li><li><p>
-	<a class="indexterm" name="id2583674"></a>
-	<a class="indexterm" name="id2583680"></a>
-	<a class="indexterm" name="id2583687"></a>
-	<a class="indexterm" name="id2583694"></a>
-	<a class="indexterm" name="id2583704"></a>
-	<a class="indexterm" name="id2583713"></a>
+	<a class="indexterm" name="id350650"></a>
+	<a class="indexterm" name="id350656"></a>
+	<a class="indexterm" name="id350662"></a>
+	<a class="indexterm" name="id350668"></a>
+	<a class="indexterm" name="id350677"></a>
+	<a class="indexterm" name="id350685"></a>
 	Operation without NetBIOS over TCP/IP, rather using the raw SMB over TCP/IP. Note, this is feasible
 	only when operating as a Microsoft active directory domain member server. When acting as a Samba domain
 	controller the use of NetBIOS is necessary to provide network browsing support.
 	</p></li><li><p>
-	<a class="indexterm" name="id2583731"></a>
-	<a class="indexterm" name="id2583738"></a>
-	<a class="indexterm" name="id2583745"></a>
+	<a class="indexterm" name="id350700"></a>
+	<a class="indexterm" name="id350707"></a>
+	<a class="indexterm" name="id350713"></a>
 	Samba-3 provides NetBIOS name services (WINS), NetBIOS over TCP/IP (TCP port 139) session services, SMB over
 	TCP/IP (TCP port 445) session services, and Microsoft compatible ONC DCE RPC services (TCP port 135)
 	services.
 	</p></li><li><p>
-	<a class="indexterm" name="id2583760"></a>
+	<a class="indexterm" name="id350726"></a>
 	Management of users and groups via the User Manager for Domains. This can be done on any MS Windows client
 	using the <code class="filename">Nexus.exe</code> toolkit for Windows 9x/Me, or using the SRVTOOLS.EXE package for MS
 	Windows NT4/200x/XP platforms. These packages are available from Microsoft's Web site.
@@ -139,55 +139,55 @@
 	</p></li></ul></div><p>
 The following functionalities are not provided by Samba-3:
 </p><div class="itemizedlist"><ul type="disc"><li><p>
-	<a class="indexterm" name="id2583797"></a>
-	<a class="indexterm" name="id2583804"></a>
+	<a class="indexterm" name="id350757"></a>
+	<a class="indexterm" name="id350763"></a>
 	SAM replication with Windows NT4 domain controllers (i.e., a Samba PDC and a Windows NT BDC, or vice versa).
 	This means Samba cannot operate as a BDC when the PDC is Microsoft-based Windows NT PDC. Samba-3 can not
 	participate in replication of account data to Windows PDCs and BDCs.
 	</p></li><li><p>
-	<a class="indexterm" name="id2583820"></a>
-	<a class="indexterm" name="id2583826"></a>
+	<a class="indexterm" name="id350776"></a>
+	<a class="indexterm" name="id350783"></a>
 	Acting as a Windows 2000 active directory domain controller (i.e., Kerberos and Active Directory). In point of
 	fact, Samba-3 does have some Active Directory domain control ability that is at this time purely experimental.
 	Active directory domain control is one of the features that is being developed in Samba-4, the next
 	generation Samba release. At this time there are no plans to enable active directory domain control
 	support during the Samba-3 series life-cycle.
 	</p></li><li><p>
-	<a class="indexterm" name="id2583846"></a>
-	<a class="indexterm" name="id2583852"></a>
-	<a class="indexterm" name="id2583859"></a>
+	<a class="indexterm" name="id350797"></a>
+	<a class="indexterm" name="id350804"></a>
+	<a class="indexterm" name="id350810"></a>
 	The Windows 200x/XP Microsoft Management Console (MMC) cannot be used to manage a Samba-3 server. For this you
 	can use only the MS Windows NT4 Domain Server Manager and the MS Windows NT4 Domain User Manager. Both are
 	part of the SVRTOOLS.EXE package mentioned later.
 	</p></li></ul></div><p>
-<a class="indexterm" name="id2583877"></a>
-<a class="indexterm" name="id2583884"></a>
+<a class="indexterm" name="id350825"></a>
+<a class="indexterm" name="id350831"></a>
 Windows 9x/Me/XP Home clients are not true members of a domain for reasons outlined in this chapter. The
 protocol for support of Windows 9x/Me-style network (domain) logons is completely different from NT4/Windows
 200x-type domain logons and has been officially supported for some time. These clients use the old LanMan
 network logon facilities that are supported in Samba since approximately the Samba-1.9.15 series.
 </p><p>
-<a class="indexterm" name="id2583902"></a>
+<a class="indexterm" name="id350844"></a>
 Samba-3 implements group mapping between Windows NT groups and UNIX groups (this is really quite complicated
 to explain in a short space). This is discussed more fully in <a class="link" href="groupmapping.html" title="Chapter 12. Group Mapping: MS Windows and UNIX">Group Mapping: MS
 Windows and UNIX</a>.
 </p><p>
-<a class="indexterm" name="id2583925"></a>
-<a class="indexterm" name="id2583932"></a>
-<a class="indexterm" name="id2583941"></a>
+<a class="indexterm" name="id350863"></a>
+<a class="indexterm" name="id350869"></a>
+<a class="indexterm" name="id350877"></a>
 Samba-3, like an MS Windows NT4 PDC or a Windows 200x Active Directory, needs to store user and Machine Trust
 Account information in a suitable backend data-store.  Refer to <a class="link" href="domain-member.html#machine-trust-accounts" title="MS Windows Workstation/Server Machine Trust Accounts">MS
 Windows Workstation/Server Machine Trust Accounts</a>. With Samba-3 there can be multiple backends for
 this. A complete discussion of account database backends can be found in <a class="link" href="passdb.html" title="Chapter 11. Account Information Databases">Account
 Information Databases</a>.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2583972"></a>Single Sign-On and Domain Security</h2></div></div></div><p>
-<a class="indexterm" name="id2583980"></a>
-<a class="indexterm" name="id2583989"></a>
-<a class="indexterm" name="id2583995"></a>
-<a class="indexterm" name="id2584002"></a>
-<a class="indexterm" name="id2584009"></a>
-<a class="indexterm" name="id2584016"></a>
-<a class="indexterm" name="id2584023"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id350899"></a>Single Sign-On and Domain Security</h2></div></div></div><p>
+<a class="indexterm" name="id350906"></a>
+<a class="indexterm" name="id350915"></a>
+<a class="indexterm" name="id350921"></a>
+<a class="indexterm" name="id350927"></a>
+<a class="indexterm" name="id350934"></a>
+<a class="indexterm" name="id350940"></a>
+<a class="indexterm" name="id350946"></a>
 When network administrators  are asked to describe the benefits of Windows NT4 and active directory networking
 the most often mentioned feature is that of single sign-on (SSO). Many companies have implemented SSO
 solutions. The mode of implementation of a single sign-on solution is an important factor in the practice of
@@ -197,16 +197,16 @@
 when the password for each system must be changed at regular intervals, and particularly so where password
 uniqueness and history limits are applied.
 </p><p>
-<a class="indexterm" name="id2584046"></a>
+<a class="indexterm" name="id350962"></a>
 There is a broadly held perception that SSO is the answer to the problem of users having to deal with too many
 information system access credentials (username/password pairs). Many elaborate schemes have been devised to
 make it possible to deliver a user-friendly SSO solution. The trouble is that if this implementation is not
 done correctly, the site may end up paying dearly by way of complexity and management overheads. Simply put,
 many SSO solutions are an administrative nightmare.
 </p><p>
-<a class="indexterm" name="id2584065"></a>
-<a class="indexterm" name="id2584071"></a>
-<a class="indexterm" name="id2584078"></a>
+<a class="indexterm" name="id350976"></a>
+<a class="indexterm" name="id350982"></a>
+<a class="indexterm" name="id350989"></a>
 SSO implementations utilize centralization of all user account information. Depending on environmental
 complexity and the age of the systems over which a SSO solution is implemented, it may not be possible to
 change the solution architecture so as to accomodate a new identity management and user authentication system.
@@ -215,11 +215,11 @@
 authentication system. This means that the addition of SSO increases over-all information systems complexity.
 Ideally, the implementation of SSO should reduce complexity and reduce administative overheads.
 </p><p>
-<a class="indexterm" name="id2584100"></a>
-<a class="indexterm" name="id2584108"></a>
-<a class="indexterm" name="id2584117"></a>
-<a class="indexterm" name="id2584126"></a>
-<a class="indexterm" name="id2584133"></a>
+<a class="indexterm" name="id351004"></a>
+<a class="indexterm" name="id351011"></a>
+<a class="indexterm" name="id351019"></a>
+<a class="indexterm" name="id351028"></a>
+<a class="indexterm" name="id351034"></a>
 The initial goal of many network administrators is often to create and use a centralized identity management
 system. It is often assumed that such a centralized system will use a single authentication infrastructure
 that can be used by all information systems. The Microsoft Windows NT4 security domain architecture and the
@@ -232,14 +232,14 @@
 because application software has built-in dependencies on particular elements of the way user authentication
 and access control were designed and built.
 </p><p>
-<a class="indexterm" name="id2584181"></a>
-<a class="indexterm" name="id2584188"></a>
-<a class="indexterm" name="id2584195"></a>
-<a class="indexterm" name="id2584202"></a>
-<a class="indexterm" name="id2584209"></a>
-<a class="indexterm" name="id2584216"></a>
-<a class="indexterm" name="id2584223"></a>
-<a class="indexterm" name="id2584230"></a>
+<a class="indexterm" name="id351062"></a>
+<a class="indexterm" name="id351068"></a>
+<a class="indexterm" name="id351075"></a>
+<a class="indexterm" name="id351081"></a>
+<a class="indexterm" name="id351087"></a>
+<a class="indexterm" name="id351094"></a>
+<a class="indexterm" name="id351100"></a>
+<a class="indexterm" name="id351106"></a>
 Over the past decade an industry has been developed around the various methods that have been built to get
 around the key limitations of legacy information technology systems. One approach that is often used involves
 the use of a meta-directory. The meta-directory stores user credentials for all disparate information systems
@@ -248,22 +248,22 @@
 are provisioned by the new infrastructure makes possible user access to all systems using a single set of user
 credentials.
 </p><p>
-<a class="indexterm" name="id2584251"></a>
-<a class="indexterm" name="id2584261"></a>
-<a class="indexterm" name="id2584271"></a>
-<a class="indexterm" name="id2584280"></a>
+<a class="indexterm" name="id351121"></a>
+<a class="indexterm" name="id351130"></a>
+<a class="indexterm" name="id351139"></a>
+<a class="indexterm" name="id351147"></a>
 The Organization for the Advancement of Structured Information Standards (OASIS) has developed the Security
 Assertion Markup Language (SAML), a structured method for communication of authentication information. The
 over-all umbrella name for the technologies and methods that deploy SAML is called Federated Identity
 Management (FIM). FIM depends on each system in the complex maze of disparate information systems to
 authenticate their respective users and vouch for secure access to the services each provides.
 </p><p>
-<a class="indexterm" name="id2584299"></a>
-<a class="indexterm" name="id2584309"></a>
-<a class="indexterm" name="id2584316"></a>
-<a class="indexterm" name="id2584323"></a>
-<a class="indexterm" name="id2584330"></a>
-<a class="indexterm" name="id2584335"></a>
+<a class="indexterm" name="id351161"></a>
+<a class="indexterm" name="id351169"></a>
+<a class="indexterm" name="id351176"></a>
+<a class="indexterm" name="id351182"></a>
+<a class="indexterm" name="id351188"></a>
+<a class="indexterm" name="id351194"></a>
 SAML documents can be wrapped in a Simple Object Access Protocol (SOAP) message for the computer-to-computer
 communications needed for Web services. Or they may be passed between Web servers of federated organizations
 that share live services. The Liberty Alliance, an industry group formed to promote federated-identity
@@ -273,11 +273,11 @@
 but implemention of the technology mostly requires customization to integrate applications and develop user
 interfaces. In a nust-shell, that is why FIM is a big and growing industry.
 </p><p>
-<a class="indexterm" name="id2584371"></a>
-<a class="indexterm" name="id2584378"></a>
-<a class="indexterm" name="id2584385"></a>
-<a class="indexterm" name="id2584392"></a>
-<a class="indexterm" name="id2584398"></a>
+<a class="indexterm" name="id351216"></a>
+<a class="indexterm" name="id351223"></a>
+<a class="indexterm" name="id351230"></a>
+<a class="indexterm" name="id351237"></a>
+<a class="indexterm" name="id351243"></a>
 Ignoring the bigger picture, which is beyond the scope of this book, the migration of all user and group
 management to a centralized system is a step in the right direction. It is essential for interoperability
 reasons to locate the identity management system data in a directory such as Microsoft Active Directory
@@ -286,20 +286,20 @@
 kerberos) that use the protocols that are defined by the various general security service application
 programming interface (GSSAPI) services.
 </p><p>
-<a class="indexterm" name="id2584423"></a>
-<a class="indexterm" name="id2584430"></a>
-<a class="indexterm" name="id2584436"></a>
+<a class="indexterm" name="id351262"></a>
+<a class="indexterm" name="id351269"></a>
+<a class="indexterm" name="id351275"></a>
 A growing number of companies provide authentication agents for disparate legacy platforms to permit the use
 of LDAP systems. Thus the use of OpenLDAP, the dominant open source software implementation of the light
 weight directory access protocol standard. This fact, means that by providing support in Samba for the use of
 LDAP and Microsoft ADS make Samba a highly scalable and forward reaching organizational networking technology.
 </p><p>
-<a class="indexterm" name="id2584454"></a>
-<a class="indexterm" name="id2584461"></a>
-<a class="indexterm" name="id2584467"></a>
-<a class="indexterm" name="id2584474"></a>
-<a class="indexterm" name="id2584481"></a>
-<a class="indexterm" name="id2584488"></a>
+<a class="indexterm" name="id351289"></a>
+<a class="indexterm" name="id351296"></a>
+<a class="indexterm" name="id351302"></a>
+<a class="indexterm" name="id351309"></a>
+<a class="indexterm" name="id351316"></a>
+<a class="indexterm" name="id351323"></a>
 Microsoft ADS provides purely proprietary services that, with limitation, can be extended to provide a
 centralized authentication infrastructure. Samba plus LDAP provides a similar opportunity for extension of a
 centralized authentication architecture, but it is the fact that the Samba Team are pro-active in introducing
@@ -307,29 +307,29 @@
 source proxy server) through tools such as the <code class="literal">ntlm_auth</code> utility, that does much to create
 sustainable choice and competition in the FIM market place.
 </p><p>
-<a class="indexterm" name="id2584513"></a>
-<a class="indexterm" name="id2584520"></a>
-<a class="indexterm" name="id2584527"></a>
+<a class="indexterm" name="id351343"></a>
+<a class="indexterm" name="id351350"></a>
+<a class="indexterm" name="id351357"></a>
 Primary domain control, if it is to be scalable to meet the needs of large sites, must therefore be capable of
 using LDAP. The rapid adoption of OpenLDAP, and Samba configurations that use it, is ample proof that the era
 of the directory has started. Samba-3 does not demand the use of LDAP, but the demand for a mechanism by which
 user and group identity information can be distributed makes it an an unavoidable option.
 </p><p>
-<a class="indexterm" name="id2584544"></a>
-<a class="indexterm" name="id2584551"></a>
-<a class="indexterm" name="id2584558"></a>
+<a class="indexterm" name="id351371"></a>
+<a class="indexterm" name="id351377"></a>
+<a class="indexterm" name="id351384"></a>
 At this time, the use of Samba based BDCs, necessitates the use of LDAP. The most commonly used LDAP
 implementation used by Samba sites is OpenLDAP. It is possible to use any standards compliant LDAP server.
 Those known to work includes those manufactured by: IBM, CA, Novell (e-Directory), and others.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2584572"></a>Basics of Domain Control</h2></div></div></div><p>
-<a class="indexterm" name="id2584580"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id351396"></a>Basics of Domain Control</h2></div></div></div><p>
+<a class="indexterm" name="id351403"></a>
 Over the years, public perceptions of what domain control really is has taken on an almost mystical nature.
 Before we branch into a brief overview of domain control, there are three basic types of domain controllers.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2584592"></a>Domain Controller Types</h3></div></div></div><div class="itemizedlist"><ul type="disc"><li><p>NT4 style Primary Domain Controller</p></li><li><p>NT4 style Backup Domain Controller</p></li><li><p>ADS Domain Controller</p></li></ul></div><p>
-<a class="indexterm" name="id2584618"></a>
-<a class="indexterm" name="id2584624"></a>
-<a class="indexterm" name="id2584631"></a>
-<a class="indexterm" name="id2584640"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id351413"></a>Domain Controller Types</h3></div></div></div><div class="itemizedlist"><ul type="disc"><li><p>NT4 style Primary Domain Controller</p></li><li><p>NT4 style Backup Domain Controller</p></li><li><p>ADS Domain Controller</p></li></ul></div><p>
+<a class="indexterm" name="id351438"></a>
+<a class="indexterm" name="id351445"></a>
+<a class="indexterm" name="id351451"></a>
+<a class="indexterm" name="id351461"></a>
 The <span class="emphasis"><em>Primary Domain Controller</em></span> or PDC plays an important role in MS Windows NT4. In
 Windows 200x domain control architecture, this role is held by domain controllers.  Folklore dictates that
 because of its role in the MS Windows network, the domain controller should be the most powerful and most
@@ -337,37 +337,37 @@
 dictates that the entire infrastructure needs to be balanced. It is advisable to invest more in standalone
 (domain member) servers than in the domain controllers.
 </p><p>
-<a class="indexterm" name="id2584668"></a>
-<a class="indexterm" name="id2584675"></a>
-<a class="indexterm" name="id2584681"></a>
-<a class="indexterm" name="id2584688"></a>
-<a class="indexterm" name="id2584695"></a>
+<a class="indexterm" name="id351484"></a>
+<a class="indexterm" name="id351490"></a>
+<a class="indexterm" name="id351497"></a>
+<a class="indexterm" name="id351504"></a>
+<a class="indexterm" name="id351511"></a>
 In the case of MS Windows NT4-style domains, it is the PDC that initiates a new domain control database.
 This forms a part of the Windows registry called the Security Account Manager (SAM). It plays a key
 part in NT4-type domain user authentication and in synchronization of the domain authentication
 database with BDCs. 
 </p><p>
-<a class="indexterm" name="id2584713"></a>
-<a class="indexterm" name="id2584724"></a>
-<a class="indexterm" name="id2584731"></a>
-<a class="indexterm" name="id2584740"></a>
+<a class="indexterm" name="id351526"></a>
+<a class="indexterm" name="id351537"></a>
+<a class="indexterm" name="id351544"></a>
+<a class="indexterm" name="id351553"></a>
 With MS Windows 200x Server-based Active Directory domains, one domain controller initiates a potential
 hierarchy of domain controllers, each with its own area of delegated control. The master domain
 controller has the ability to override any downstream controller, but a downline controller has
 control only over its downline. With Samba-3, this functionality can be implemented using an
 LDAP-based user and machine account backend.
 </p><p>
-<a class="indexterm" name="id2584758"></a>
-<a class="indexterm" name="id2584765"></a>
+<a class="indexterm" name="id351567"></a>
+<a class="indexterm" name="id351574"></a>
 New to Samba-3 is the ability to use a backend database that holds the same type of data as the NT4-style SAM
-database (one of the registry files)<sup>[<a name="id2584774" href="#ftn.id2584774" class="footnote">1</a>]</sup>
+database (one of the registry files)<sup>[<a name="id351582" href="#ftn.id351582" class="footnote">1</a>]</sup>
 </p><p>
-<a class="indexterm" name="id2584790"></a>
-<a class="indexterm" name="id2584797"></a>
-<a class="indexterm" name="id2584803"></a>
-<a class="indexterm" name="id2584810"></a>
-<a class="indexterm" name="id2584817"></a>
-<a class="indexterm" name="id2584824"></a>
+<a class="indexterm" name="id351598"></a>
+<a class="indexterm" name="id351604"></a>
+<a class="indexterm" name="id351611"></a>
+<a class="indexterm" name="id351617"></a>
+<a class="indexterm" name="id351624"></a>
+<a class="indexterm" name="id351631"></a>
 The <span class="emphasis"><em>Backup Domain Controller</em></span> or BDC plays a key role in servicing network authentication
 requests. The BDC is biased to answer logon requests in preference to the PDC.  On a network segment that has
 a BDC and a PDC, the BDC will most likely service network logon requests. The PDC will answer network logon
@@ -379,13 +379,13 @@
 by a number of variables, thus there is no simple determinant of whether a PDC or a BDC will serve a
 particular logon authentication request.
 </p><p>
-<a class="indexterm" name="id2584854"></a>
-<a class="indexterm" name="id2584861"></a>
+<a class="indexterm" name="id351653"></a>
+<a class="indexterm" name="id351660"></a>
 A Windows NT4 BDC can be promoted to a PDC. If the PDC is online at the time that a BDC is promoted to PDC,
 the previous PDC is automatically demoted to a BDC. With Samba-3, this is not an automatic operation; the PDC
 and BDC must be manually configured, and other appropriate changes also need to be made.
 </p><p>
-<a class="indexterm" name="id2584876"></a>
+<a class="indexterm" name="id351672"></a>
 With MS Windows NT4, a decision is made at installation to determine what type of machine the server will be.
 It is possible to promote a BDC to a PDC, and vice versa. The only method Microsoft provide to convert a
 Windows NT4 domain controller to a domain member server or a standalone server is to reinstall it. The install
@@ -393,28 +393,28 @@
 </p><div class="itemizedlist"><ul type="disc"><li><p><span class="emphasis"><em>Primary Domain Controller</em></span>  the one that seeds the domain SAM.</p></li><li><p><span class="emphasis"><em>Backup Domain Controller</em></span>  one that obtains a copy of the domain SAM.</p></li><li><p><span class="emphasis"><em>Domain Member Server</em></span>  one that has no copy of the domain SAM; rather
 		it obtains authentication from a domain controller for all access controls.</p></li><li><p><span class="emphasis"><em>Standalone Server</em></span>  one that plays no part in SAM synchronization,
 		has its own authentication database, and plays no role in domain security.</p></li></ul></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2584945"></a>
+<a class="indexterm" name="id351736"></a>
 Algin Technology LLC provide a commercial tool that makes it possible to promote a Windows NT4 standalone
 server to a PDC or a BDC, and also permits this process to be reversed. Refer to the <a class="ulink" href="http://utools.com/UPromote.asp" target="_top">Algin</a> web site for further information.
 </p></div><p>
-<a class="indexterm" name="id2584965"></a>
-<a class="indexterm" name="id2584976"></a>
+<a class="indexterm" name="id351753"></a>
+<a class="indexterm" name="id351764"></a>
 Samba-3 servers can readily be converted to and from domain controller roles through simple changes to the
 <code class="filename">smb.conf</code> file. Samba-3 is capable of acting fully as a native member of a Windows 200x server Active
 Directory domain.
 </p><p>
-<a class="indexterm" name="id2584996"></a>
+<a class="indexterm" name="id351782"></a>
 For the sake of providing a complete picture, MS Windows 2000 domain control configuration is done after the server has been
 installed. Please refer to Microsoft documentation for the procedures that should be followed to convert a
 domain member server to or from a domain control, and to install or remove active directory service support.
 </p><p>
-<a class="indexterm" name="id2585015"></a>
-<a class="indexterm" name="id2585024"></a>
+<a class="indexterm" name="id351798"></a>
+<a class="indexterm" name="id351807"></a>
 New to Samba-3 is the ability to function fully as an MS Windows NT4-style domain controller,
 excluding the SAM replication components. However, please be aware that Samba-3 also supports the
 MS Windows 200x domain control protocols.
 </p><p>
-<a class="indexterm" name="id2585040"></a>
+<a class="indexterm" name="id351821"></a>
 At this time any appearance that Samba-3 is capable of acting as a <span class="emphasis"><em>domain controller</em></span> in
 native ADS mode is limited and experimental in nature.  This functionality should not be used until the Samba
 Team offers formal support for it.  At such a time, the documentation will be revised to duly reflect all
@@ -422,19 +422,19 @@
 environment. However, there are certain compromises:
 </p><div class="itemizedlist"><ul type="disc"><li><p>No machine policy files.</p></li><li><p>No Group Policy Objects.</p></li><li><p>No synchronously executed Active Directory logon scripts.</p></li><li><p>Can't use Active Directory management tools to manage users and machines.</p></li><li><p>Registry changes tattoo the main registry, while with Active Directory they do not leave
 		permanent changes in effect.</p></li><li><p>Without Active Directory you cannot perform the function of exporting specific
-		applications to specific users or groups.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2585096"></a>Preparing for Domain Control</h3></div></div></div><p>
-<a class="indexterm" name="id2585105"></a>
-<a class="indexterm" name="id2585111"></a>
-<a class="indexterm" name="id2585118"></a>
-<a class="indexterm" name="id2585125"></a>
+		applications to specific users or groups.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id351870"></a>Preparing for Domain Control</h3></div></div></div><p>
+<a class="indexterm" name="id351878"></a>
+<a class="indexterm" name="id351885"></a>
+<a class="indexterm" name="id351892"></a>
+<a class="indexterm" name="id351899"></a>
 There are two ways that MS Windows machines may interact with each other, with other servers,
 and with domain controllers: either as <span class="emphasis"><em>standalone</em></span> systems, more commonly
 called <span class="emphasis"><em>workgroup</em></span> members, or as full participants in a security system,
 more commonly called <span class="emphasis"><em>domain</em></span> members.
 </p><p>
-<a class="indexterm" name="id2585150"></a>
-<a class="indexterm" name="id2585157"></a>
-<a class="indexterm" name="id2585166"></a>
+<a class="indexterm" name="id351922"></a>
+<a class="indexterm" name="id351928"></a>
+<a class="indexterm" name="id351938"></a>
 It should be noted that workgroup membership involves no special configuration other than the machine being
 configured so the network configuration has a commonly used name for its workgroup entry. It is not uncommon
 for the name WORKGROUP to be used for this. With this mode of configuration, there are no Machine Trust
@@ -442,16 +442,16 @@
 neighborhood to be logically grouped together. Again, just to be clear: <span class="emphasis"><em>workgroup mode does not
 involve security machine accounts</em></span>.
 </p><p>
-<a class="indexterm" name="id2585189"></a>
-<a class="indexterm" name="id2585196"></a>
-<a class="indexterm" name="id2585206"></a>
+<a class="indexterm" name="id351956"></a>
+<a class="indexterm" name="id351963"></a>
+<a class="indexterm" name="id351972"></a>
 Domain member machines have a machine trust account in the domain accounts database. A special procedure
 must be followed on each machine to effect domain membership. This procedure, which can be done
 only by the local machine Administrator account, creates the domain machine account (if it does
 not exist), and then initializes that account. When the client first logs onto the
 domain, a machine trust account password change will be automatically triggered.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2585225"></a>
+<a class="indexterm" name="id351987"></a>
 When Samba is configured as a domain controller, secure network operation demands that
 all MS Windows NT4/200x/XP Professional clients should be configured as domain members.
 If a machine is not made a member of the domain, then it will operate like a workgroup
@@ -460,14 +460,14 @@
 </p></div><p>
 The following are necessary for configuring Samba-3 as an MS Windows NT4-style PDC for MS Windows
 NT4/200x/XP clients:
-</p><div class="itemizedlist"><ul type="disc"><li><p>Configuration of basic TCP/IP and MS Windows networking.</p></li><li><p>Correct designation of the server role (<a class="link" href="smb.conf.5.html#SECURITY">security = user</a>).</p></li><li><p>Consistent configuration of name resolution.<sup>[<a name="id2585280" href="#ftn.id2585280" class="footnote">2</a>]</sup></p></li><li><p>Domain logons for Windows NT4/200x/XP Professional clients.</p></li><li><p>Configuration of roaming profiles or explicit configuration to force local profile usage.</p></li><li><p>Configuration of network/system policies.</p></li><li><p>Adding and managing domain user accounts.</p></li><li><p>Configuring MS Windows NT4/2000 Professional and Windows XP Professional client machines to become domain members.</p></li></ul></div><p>
+</p><div class="itemizedlist"><ul type="disc"><li><p>Configuration of basic TCP/IP and MS Windows networking.</p></li><li><p>Correct designation of the server role (<a class="link" href="smb.conf.5.html#SECURITY">security = user</a>).</p></li><li><p>Consistent configuration of name resolution.<sup>[<a name="id352035" href="#ftn.id352035" class="footnote">2</a>]</sup></p></li><li><p>Domain logons for Windows NT4/200x/XP Professional clients.</p></li><li><p>Configuration of roaming profiles or explicit configuration to force local profile usage.</p></li><li><p>Configuration of network/system policies.</p></li><li><p>Adding and managing domain user accounts.</p></li><li><p>Configuring MS Windows NT4/2000 Professional and Windows XP Professional client machines to become domain members.</p></li></ul></div><p>
 The following provisions are required to serve MS Windows 9x/Me clients:
 </p><div class="itemizedlist"><ul type="disc"><li><p>Configuration of basic TCP/IP and MS Windows networking.</p></li><li><p>Correct designation of the server role (<a class="link" href="smb.conf.5.html#SECURITY">security = user</a>).</p></li><li><p>Network logon configuration (since Windows 9x/Me/XP Home are not technically domain
 	members, they do not really participate in  the security aspects of Domain logons as such).</p></li><li><p>Roaming profile configuration.</p></li><li><p>Configuration of system policy handling.</p></li><li><p>Installation of the network driver &#8220;<span class="quote">Client for MS Windows Networks</span>&#8221; and configuration
 	to log onto the domain.</p></li><li><p>Placing Windows 9x/Me clients in user-level security  if it is desired to allow
 	all client-share access to be controlled according to domain user/group identities.</p></li><li><p>Adding and managing domain user accounts.</p></li></ul></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2585402"></a>
-<a class="indexterm" name="id2585408"></a>
+<a class="indexterm" name="id352148"></a>
+<a class="indexterm" name="id352154"></a>
 Roaming profiles and system/network policies are advanced network administration topics
 that are covered in <a class="link" href="ProfileMgmt.html" title="Chapter 27. Desktop Profile Management">Desktop Profile Management</a> and
 <a class="link" href="PolicyMgmt.html" title="Chapter 26. System and Account Policies">System and Account Policies</a> of this document. However, these are not
@@ -475,102 +475,102 @@
 </p></div><p>
 A domain controller is an SMB/CIFS server that:
 </p><div class="itemizedlist"><ul type="disc"><li><p>
-	<a class="indexterm" name="id2585444"></a>
-	<a class="indexterm" name="id2585453"></a>
-	<a class="indexterm" name="id2585460"></a>
-	<a class="indexterm" name="id2585467"></a>
-	<a class="indexterm" name="id2585473"></a>
+	<a class="indexterm" name="id352188"></a>
+	<a class="indexterm" name="id352196"></a>
+	<a class="indexterm" name="id352203"></a>
+	<a class="indexterm" name="id352210"></a>
+	<a class="indexterm" name="id352217"></a>
 	Registers and advertises itself as a domain controller (through NetBIOS broadcasts
 	as well as by way of name registrations either by Mailslot Broadcasts over UDP broadcast,
 	to a WINS server over UDP unicast, or via DNS and Active Directory).
 	</p></li><li><p>
-	<a class="indexterm" name="id2585489"></a>
-	<a class="indexterm" name="id2585496"></a>
+	<a class="indexterm" name="id352230"></a>
+	<a class="indexterm" name="id352237"></a>
 	Provides the NETLOGON service. (This is actually a collection of services that runs over
 	multiple protocols. These include the LanMan logon service, the Netlogon service,
 	the Local Security Account service, and variations of them.)
 	</p></li><li><p>
 	Provides a share called NETLOGON.
 	</p></li></ul></div><p>
-<a class="indexterm" name="id2585516"></a>
-<a class="indexterm" name="id2585528"></a>
-<a class="indexterm" name="id2585539"></a>
-<a class="indexterm" name="id2585546"></a>
-<a class="indexterm" name="id2585552"></a>
+<a class="indexterm" name="id352254"></a>
+<a class="indexterm" name="id352266"></a>
+<a class="indexterm" name="id352278"></a>
+<a class="indexterm" name="id352284"></a>
+<a class="indexterm" name="id352291"></a>
 It is rather easy to configure Samba to provide these. Each Samba domain controller must provide the NETLOGON
 service that Samba calls the <a class="link" href="smb.conf.5.html#DOMAINLOGONS">domain logons</a> functionality (after the name of the
 parameter in the <code class="filename">smb.conf</code> file). Additionally, one server in a Samba-3 domain must advertise itself as the
-domain master browser.<sup>[<a name="id2585583" href="#ftn.id2585583" class="footnote">3</a>]</sup> This causes the PDC to claim a domain-specific NetBIOS name that identifies
+domain master browser.<sup>[<a name="id352318" href="#ftn.id352318" class="footnote">3</a>]</sup> This causes the PDC to claim a domain-specific NetBIOS name that identifies
 it as a DMB for its given domain or workgroup. Local master browsers (LMBs) in the same domain or workgroup on
 broadcast-isolated subnets then ask for a complete copy of the browse list for the whole wide-area network.
 Browser clients then contact their LMB, and will receive the domain-wide browse list instead of just the list
 for their broadcast-isolated subnet.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2585606"></a>Domain Control: Example Configuration</h2></div></div></div><p>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id352336"></a>Domain Control: Example Configuration</h2></div></div></div><p>
 The first step in creating a working Samba PDC is to understand the parameters necessary
 in <code class="filename">smb.conf</code>. An example <code class="filename">smb.conf</code> for acting as a PDC can be found in <a class="link" href="samba-pdc.html#pdc-example" title="Example 4.1. smb.conf for being a PDC">the
 smb.conf file for an example PDC</a>. 
-</p><div class="example"><a name="pdc-example"></a><p class="title"><b>Example 4.1. smb.conf for being a PDC</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2585660"></a></td></tr><tr><td><a class="indexterm" name="id2585667"></a></td></tr><tr><td><a class="indexterm" name="id2585674"></a><em class="parameter"><code>passdb backend = tdbsam</code></em></td></tr><tr><td><a class="indexterm" name="id2585686"></a><em class="parameter"><code>os level = 33</code></em></td></tr><tr><td><a class="indexterm" name="id2585697"></a><em class="parameter"><code>preferred master = auto</code></em></td></tr><tr><td><a class="indexterm" name="id2585709"></a><em class="parameter"><code>domain master = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2585721"></a><em class="parameter"><code>local master = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2585733"></a><em class="parameter"><code>security = user</code></em></td></tr><tr><td><a class="indexterm" name="id2585744"></a><em class="parameter"><code>domain logons = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2585756"></a><em class="parameter"><code>logon path = \\%N\profiles\%U</code></em></td></tr><tr><td><a class="indexterm" name="id2585768"></a><em class="parameter"><code>logon drive = H:</code></em></td></tr><tr><td><a class="indexterm" name="id2585779"></a><em class="parameter"><code>logon home = \\homeserver\%U\winprofile</code></em></td></tr><tr><td><a class="indexterm" name="id2585791"></a><em class="parameter"><code>logon script = logon.cmd</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id2585812"></a><em class="parameter"><code>path = /var/lib/samba/netlogon</code></em></td></tr><tr><td><a class="indexterm" name="id2585824"></a><em class="parameter"><code>read only = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2585836"></a></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[profiles]</code></em></td></tr><tr><td><a class="indexterm" name="id2585851"></a><em class="parameter"><code>path = /var/lib/samba/profiles</code></em></td></tr><tr><td><a class="indexterm" name="id2585863"></a><em class="parameter"><code>read only = no</code></em></td></tr><tr><td><a class="indexterm" name="id2585875"></a><em class="parameter"><code>create mask = 0600</code></em></td></tr><tr><td><a class="indexterm" name="id2585886"></a><em class="parameter"><code>directory mask = 0700</code></em></td></tr></table></div></div><br class="example-break"><p>
+</p><div class="example"><a name="pdc-example"></a><p class="title"><b>Example 4.1. smb.conf for being a PDC</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id352389"></a></td></tr><tr><td><a class="indexterm" name="id352395"></a></td></tr><tr><td><a class="indexterm" name="id352402"></a><em class="parameter"><code>passdb backend = tdbsam</code></em></td></tr><tr><td><a class="indexterm" name="id352414"></a><em class="parameter"><code>os level = 33</code></em></td></tr><tr><td><a class="indexterm" name="id352425"></a><em class="parameter"><code>preferred master = auto</code></em></td></tr><tr><td><a class="indexterm" name="id352437"></a><em class="parameter"><code>domain master = yes</code></em></td></tr><tr><td><a class="indexterm" name="id352448"></a><em class="parameter"><code>local master = yes</code></em></td></tr><tr><td><a class="indexterm" name="id352460"></a><em class="parameter"><code>security = user</code></em></td></tr><tr><td><a class="indexterm" name="id352471"></a><em class="parameter"><code>domain logons = yes</code></em></td></tr><tr><td><a class="indexterm" name="id352482"></a><em class="parameter"><code>logon path = \\%N\profiles\%U</code></em></td></tr><tr><td><a class="indexterm" name="id352494"></a><em class="parameter"><code>logon drive = H:</code></em></td></tr><tr><td><a class="indexterm" name="id352506"></a><em class="parameter"><code>logon home = \\homeserver\%U\winprofile</code></em></td></tr><tr><td><a class="indexterm" name="id352517"></a><em class="parameter"><code>logon script = logon.cmd</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id352538"></a><em class="parameter"><code>path = /var/lib/samba/netlogon</code></em></td></tr><tr><td><a class="indexterm" name="id352549"></a><em class="parameter"><code>read only = yes</code></em></td></tr><tr><td><a class="indexterm" name="id352561"></a></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[profiles]</code></em></td></tr><tr><td><a class="indexterm" name="id352576"></a><em class="parameter"><code>path = /var/lib/samba/profiles</code></em></td></tr><tr><td><a class="indexterm" name="id352588"></a><em class="parameter"><code>read only = no</code></em></td></tr><tr><td><a class="indexterm" name="id352600"></a><em class="parameter"><code>create mask = 0600</code></em></td></tr><tr><td><a class="indexterm" name="id352611"></a><em class="parameter"><code>directory mask = 0700</code></em></td></tr></table></div></div><br class="example-break"><p>
 The basic options shown in <a class="link" href="samba-pdc.html#pdc-example" title="Example 4.1. smb.conf for being a PDC">this example</a> are explained as follows:
 </p><div class="variablelist"><dl><dt><span class="term">passdb backend </span></dt><dd><p>
-		<a class="indexterm" name="id2585921"></a>
-		<a class="indexterm" name="id2585930"></a>
-		<a class="indexterm" name="id2585937"></a>
-		<a class="indexterm" name="id2585943"></a>
-		<a class="indexterm" name="id2585950"></a>
-		<a class="indexterm" name="id2585957"></a>
+		<a class="indexterm" name="id352644"></a>
+		<a class="indexterm" name="id352653"></a>
+		<a class="indexterm" name="id352660"></a>
+		<a class="indexterm" name="id352667"></a>
+		<a class="indexterm" name="id352674"></a>
+		<a class="indexterm" name="id352680"></a>
 		This contains all the user and group account information. Acceptable values for a PDC
 		are: <span class="emphasis"><em>smbpasswd, tdbsam, and ldapsam</em></span>. The &#8220;<span class="quote">guest</span>&#8221; entry provides
 		default accounts and is included by default; there is no need to add it explicitly.
 		</p><p>
-		<a class="indexterm" name="id2585978"></a>
-		<a class="indexterm" name="id2585985"></a>
-		<a class="indexterm" name="id2585992"></a>
-		<a class="indexterm" name="id2585999"></a>
+		<a class="indexterm" name="id352700"></a>
+		<a class="indexterm" name="id352707"></a>
+		<a class="indexterm" name="id352713"></a>
+		<a class="indexterm" name="id352720"></a>
 		Where use of BDCs is intended, the only logical choice is
 		to use LDAP so the passdb backend can be distributed. The tdbsam and smbpasswd files
 		cannot effectively be distributed and therefore should not be used.
 		</p></dd><dt><span class="term">Domain Control Parameters </span></dt><dd><p>
-		<a class="indexterm" name="id2586020"></a>
-		<a class="indexterm" name="id2586026"></a>
-		<a class="indexterm" name="id2586033"></a>
-		<a class="indexterm" name="id2586040"></a>
+		<a class="indexterm" name="id352739"></a>
+		<a class="indexterm" name="id352746"></a>
+		<a class="indexterm" name="id352753"></a>
+		<a class="indexterm" name="id352759"></a>
 		The parameters <span class="emphasis"><em>os level, preferred master, domain master, security, 
 		encrypt passwords</em></span>, and <span class="emphasis"><em>domain logons</em></span> play a central role in assuring domain
 		control and network logon support.
 		</p><p>
-		<a class="indexterm" name="id2586063"></a>
-		<a class="indexterm" name="id2586070"></a>
+		<a class="indexterm" name="id352781"></a>
+		<a class="indexterm" name="id352787"></a>
 		The <span class="emphasis"><em>os level</em></span> must be set at or above a value of 32. A domain controller
 		must be the DMB, must be set in <span class="emphasis"><em>user</em></span> mode security,
 		must support Microsoft-compatible encrypted passwords, and must provide the network logon
 		service (domain logons). Encrypted passwords must be enabled. For more details on how 
 		to do this, refer to <a class="link" href="passdb.html" title="Chapter 11. Account Information Databases">Account Information Databases</a>.
 		</p></dd><dt><span class="term">Environment Parameters </span></dt><dd><p>
-		<a class="indexterm" name="id2586107"></a>
-		<a class="indexterm" name="id2586114"></a>
-		<a class="indexterm" name="id2586120"></a>
-		<a class="indexterm" name="id2586127"></a>
+		<a class="indexterm" name="id352821"></a>
+		<a class="indexterm" name="id352828"></a>
+		<a class="indexterm" name="id352835"></a>
+		<a class="indexterm" name="id352841"></a>
 		The parameters <span class="emphasis"><em>logon path, logon home, logon drive</em></span>, and <span class="emphasis"><em>logon script</em></span> are
 		environment support settings that help to facilitate client logon operations and that help
 		to provide automated control facilities to ease network management overheads. Please refer
 		to the man page information for these parameters.
 		</p></dd><dt><span class="term">NETLOGON Share </span></dt><dd><p>
-		<a class="indexterm" name="id2586156"></a>
-		<a class="indexterm" name="id2586163"></a>
-		<a class="indexterm" name="id2586170"></a>
-		<a class="indexterm" name="id2586177"></a>
-		<a class="indexterm" name="id2586184"></a>
-		<a class="indexterm" name="id2586191"></a>
+		<a class="indexterm" name="id352868"></a>
+		<a class="indexterm" name="id352875"></a>
+		<a class="indexterm" name="id352881"></a>
+		<a class="indexterm" name="id352888"></a>
+		<a class="indexterm" name="id352895"></a>
+		<a class="indexterm" name="id352902"></a>
 		The NETLOGON share plays a central role in domain logon and domain membership support.
 		This share is provided on all Microsoft domain controllers. It is used to provide logon
 		scripts, to store group policy files (NTConfig.POL), as well as to locate other common
 		tools that may be needed for logon processing. This is an essential share on a domain controller.
 		</p></dd><dt><span class="term">PROFILE Share </span></dt><dd><p>
-		<a class="indexterm" name="id2586214"></a>
-		<a class="indexterm" name="id2586221"></a>
-		<a class="indexterm" name="id2586228"></a>
-		<a class="indexterm" name="id2586235"></a>
-		<a class="indexterm" name="id2586241"></a>
+		<a class="indexterm" name="id352922"></a>
+		<a class="indexterm" name="id352928"></a>
+		<a class="indexterm" name="id352935"></a>
+		<a class="indexterm" name="id352942"></a>
+		<a class="indexterm" name="id352949"></a>
 		This share is used to store user desktop profiles. Each user must have a directory at the root
 		of this share. This directory must be write-enabled for the user and must be globally read-enabled.
 		Samba-3 has a VFS module called &#8220;<span class="quote">fake_permissions</span>&#8221; that may be installed on this share. This will
@@ -580,12 +580,12 @@
 The above parameters make for a full set of functionality that may define the server's mode
 of operation. The following <code class="filename">smb.conf</code> parameters are the essentials alone:
 </p><p>
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2586282"></a><em class="parameter"><code>netbios name = BELERIAND</code></em></td></tr><tr><td><a class="indexterm" name="id2586294"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id2586305"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2586317"></a><em class="parameter"><code>domain master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2586329"></a><em class="parameter"><code>security = User</code></em></td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id352984"></a><em class="parameter"><code>netbios name = BELERIAND</code></em></td></tr><tr><td><a class="indexterm" name="id352996"></a><em class="parameter"><code>workgroup = MIDEARTH</code></em></td></tr><tr><td><a class="indexterm" name="id353007"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id353018"></a><em class="parameter"><code>domain master = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id353030"></a><em class="parameter"><code>security = User</code></em></td></tr></table><p>
 </p><p>
 The additional parameters shown in the longer listing in this section just make for
 a more complete explanation.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2586348"></a>Samba ADS Domain Control</h2></div></div></div><p>
-<a class="indexterm" name="id2586356"></a>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id353048"></a>Samba ADS Domain Control</h2></div></div></div><p>
+<a class="indexterm" name="id353056"></a>
 Samba-3 is not, and cannot act as, an Active Directory server. It cannot truly function as an Active Directory
 PDC. The protocols for some of the functionality of Active Directory domain controllers has been partially
 implemented on an experimental only basis. Please do not expect Samba-3 to support these protocols. Do not
@@ -594,24 +594,24 @@
 capabilities in Samba-3 and who have asked when this functionality will be completed. The answer is maybe
 someday or maybe never!
 </p><p>
-<a class="indexterm" name="id2586388"></a>
-<a class="indexterm" name="id2586395"></a>
+<a class="indexterm" name="id353077"></a>
+<a class="indexterm" name="id353084"></a>
 To be sure, Samba-3 is designed to provide most of the functionality that Microsoft Windows NT4-style
 domain controllers have. Samba-3 does not have all the capabilities of Windows NT4, but it does have
 a number of features that Windows NT4 domain controllers do not have. In short, Samba-3 is not NT4 and it
 is not Windows Server 200x: it is not an Active Directory server. We hope this is plain and simple
 enough for all to understand.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2586412"></a>Domain and Network Logon Configuration</h2></div></div></div><p>
-<a class="indexterm" name="id2586420"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id353096"></a>Domain and Network Logon Configuration</h2></div></div></div><p>
+<a class="indexterm" name="id353104"></a>
 The subject of network or domain logons is discussed here because it forms
 an integral part of the essential functionality that is provided by a domain controller.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2586431"></a>Domain Network Logon Service</h3></div></div></div><p>
-<a class="indexterm" name="id2586439"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id353114"></a>Domain Network Logon Service</h3></div></div></div><p>
+<a class="indexterm" name="id353122"></a>
 All domain controllers must run the netlogon service (<span class="emphasis"><em>domain logons</em></span>
 in Samba). One domain controller must be configured with <a class="link" href="smb.conf.5.html#DOMAINMASTER">domain master = Yes</a>
 (the PDC); on all BDCs set the parameter <a class="link" href="smb.conf.5.html#DOMAINMASTER">domain master = No</a>.
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2586478"></a>Example Configuration</h4></div></div></div><div class="example"><a name="PDC-config"></a><p class="title"><b>Example 4.2. smb.conf for being a PDC</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id2586507"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2586519"></a><em class="parameter"><code>domain master = (Yes on PDC, No on BDCs)</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id2586539"></a><em class="parameter"><code>comment = Network Logon Service</code></em></td></tr><tr><td><a class="indexterm" name="id2586551"></a><em class="parameter"><code>path = /var/lib/samba/netlogon</code></em></td></tr><tr><td><a class="indexterm" name="id2586563"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id2586574"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2586588"></a>The Special Case of MS Windows XP Home Edition</h4></div></div></div><p>
-<a class="indexterm" name="id2586597"></a>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id353156"></a>Example Configuration</h4></div></div></div><div class="example"><a name="PDC-config"></a><p class="title"><b>Example 4.2. smb.conf for being a PDC</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id353184"></a><em class="parameter"><code>domain logons = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id353196"></a><em class="parameter"><code>domain master = (Yes on PDC, No on BDCs)</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[netlogon]</code></em></td></tr><tr><td><a class="indexterm" name="id353217"></a><em class="parameter"><code>comment = Network Logon Service</code></em></td></tr><tr><td><a class="indexterm" name="id353228"></a><em class="parameter"><code>path = /var/lib/samba/netlogon</code></em></td></tr><tr><td><a class="indexterm" name="id353240"></a><em class="parameter"><code>guest ok = Yes</code></em></td></tr><tr><td><a class="indexterm" name="id353251"></a><em class="parameter"><code>browseable = No</code></em></td></tr></table></div></div><br class="example-break"></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id353265"></a>The Special Case of MS Windows XP Home Edition</h4></div></div></div><p>
+<a class="indexterm" name="id353273"></a>
 To be completely clear: If you want MS Windows XP Home Edition to integrate with your
 MS Windows NT4 or Active Directory domain security, understand it cannot be done.
 The only option is to purchase the upgrade from MS Windows XP Home Edition to
@@ -625,12 +625,12 @@
 Samba Team members with your questions asking how to make this work. It can't be done.
 If it can be done, then to do so would violate your software license agreement with
 Microsoft, and we recommend that you do not do that.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2586627"></a>The Special Case of Windows 9x/Me</h4></div></div></div><p>
-<a class="indexterm" name="id2586635"></a>
-<a class="indexterm" name="id2586642"></a>
-<a class="indexterm" name="id2586649"></a>
-<a class="indexterm" name="id2586656"></a>
-<a class="indexterm" name="id2586662"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id353296"></a>The Special Case of Windows 9x/Me</h4></div></div></div><p>
+<a class="indexterm" name="id353304"></a>
+<a class="indexterm" name="id353311"></a>
+<a class="indexterm" name="id353318"></a>
+<a class="indexterm" name="id353324"></a>
+<a class="indexterm" name="id353331"></a>
 A domain and a workgroup are exactly the same in terms of network
 browsing. The difference is that a distributable authentication
 database is associated with a domain, for secure login access to a
@@ -638,22 +638,22 @@
 successfully authenticate against a domain logon server. Samba-3 does this
 now in the same way as MS Windows NT/200x.
 </p><p>
-<a class="indexterm" name="id2586679"></a>
+<a class="indexterm" name="id353345"></a>
 The SMB client logging on to a domain has an expectation that every other
 server in the domain should accept the same authentication information.
 Network browsing functionality of domains and workgroups is identical and
 is explained in this documentation under the browsing discussions.
 It should be noted that browsing is totally orthogonal to logon support.
 </p><p>
-<a class="indexterm" name="id2586695"></a>
-<a class="indexterm" name="id2586702"></a>
-<a class="indexterm" name="id2586709"></a>
+<a class="indexterm" name="id353358"></a>
+<a class="indexterm" name="id353365"></a>
+<a class="indexterm" name="id353371"></a>
 Issues related to the single-logon network model are discussed in this
 section. Samba supports domain logons, network logon scripts, and user
 profiles for MS Windows for Workgroups and MS Windows 9x/Me clients,
 which are the focus of this section.
 </p><p>
-<a class="indexterm" name="id2586723"></a>
+<a class="indexterm" name="id353384"></a>
 When an SMB client in a domain wishes to log on, it broadcasts requests for a logon server. The first one to
 reply gets the job and validates its password using whatever mechanism the Samba administrator has installed.
 It is possible (but ill advised) to create a domain where the user database is not shared between servers;
@@ -669,8 +669,8 @@
 Before launching into the configuration instructions, it is worthwhile to look at how a Windows 9x/Me client
 performs a logon:
 </p><div class="orderedlist"><ol type="1"><li><p>
-	<a class="indexterm" name="id2586770"></a>
-	<a class="indexterm" name="id2586776"></a>
+	<a class="indexterm" name="id353422"></a>
+	<a class="indexterm" name="id353428"></a>
 	The client broadcasts (to the IP broadcast address of the subnet it is in)
 	a NetLogon request. This is sent to the NetBIOS name DOMAIN&lt;1C&gt; at the
 	NetBIOS layer. The client chooses the first response it receives, which
@@ -679,13 +679,13 @@
 	type that is registered by domain controllers (SMB/CIFS servers that provide
 	the netlogon service).
 	</p></li><li><p>
-	<a class="indexterm" name="id2586818"></a>
-	<a class="indexterm" name="id2586825"></a>
-	<a class="indexterm" name="id2586832"></a>
+	<a class="indexterm" name="id353462"></a>
+	<a class="indexterm" name="id353468"></a>
+	<a class="indexterm" name="id353475"></a>
 	The client connects to that server, logs on (does an SMBsessetupX) and
 	then connects to the IPC$ share (using an SMBtconX).
 	</p></li><li><p>
-	<a class="indexterm" name="id2586847"></a>
+	<a class="indexterm" name="id353490"></a>
 	The client does a NetWkstaUserLogon request, which retrieves the name
 	of the user's logon script. 
 	</p></li><li><p>
@@ -693,60 +693,60 @@
 	If it is found and can be read, it is retrieved and executed by the client.
 	After this, the client disconnects from the NetLogon share.
 	</p></li><li><p>
-	<a class="indexterm" name="id2586872"></a>
-	<a class="indexterm" name="id2586879"></a>
+	<a class="indexterm" name="id353512"></a>
+	<a class="indexterm" name="id353519"></a>
 	The client sends a NetUserGetInfo request to the server to retrieve
 	the user's home share, which is used to search for profiles. Since the
 	response to the NetUserGetInfo request does not contain much more than	
 	the user's home share, profiles for Windows 9x clients must reside in the user
 	home directory.
 	</p></li><li><p>
-	<a class="indexterm" name="id2586898"></a>
+	<a class="indexterm" name="id353535"></a>
 	The client connects to the user's home share and searches for the 
 	user's profile. As it turns out, you can specify the user's home share as
 	a share name and path. For example, <code class="filename">\\server\fred\.winprofile</code>.
 	If the profiles are found, they are implemented.
 	</p></li><li><p>
-	<a class="indexterm" name="id2586921"></a>
+	<a class="indexterm" name="id353556"></a>
 	The client then disconnects from the user's home share and reconnects to
 	the NetLogon share and looks for <code class="filename">CONFIG.POL</code>, the policies file. If this is
 	found, it is read and implemented.
 	</p></li></ol></div><p>
 The main difference between a PDC and a Windows 9x/Me logon server configuration is:
 </p><div class="itemizedlist"><ul type="disc"><li><p>
-	<a class="indexterm" name="id2586951"></a>
-	<a class="indexterm" name="id2586960"></a>
+	<a class="indexterm" name="id353583"></a>
+	<a class="indexterm" name="id353592"></a>
 	Password encryption is not required for a Windows 9x/Me logon server. But note
 	that beginning with MS Windows 98 the default setting is that plaintext
 	password support is disabled. It can be re-enabled with the registry
 	changes that are documented in <a class="link" href="PolicyMgmt.html" title="Chapter 26. System and Account Policies">System and Account Policies</a>.
 	</p></li><li><p>
-	<a class="indexterm" name="id2586983"></a>
+	<a class="indexterm" name="id353613"></a>
 	Windows 9x/Me clients do not require and do not use Machine Trust Accounts.
 	</p></li></ul></div><p>
-<a class="indexterm" name="id2586995"></a>
+<a class="indexterm" name="id353624"></a>
 A Samba PDC will act as a Windows 9x/Me logon server; after all, it does provide the
 network logon services that MS Windows 9x/Me expect to find.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2587009"></a>
+<a class="indexterm" name="id353637"></a>
 Use of plaintext passwords is strongly discouraged. Where used they are easily detected
 using a sniffer tool to examine network traffic.
-</p></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2587021"></a>Security Mode and Master Browsers</h3></div></div></div><p>
-<a class="indexterm" name="id2587030"></a>
-<a class="indexterm" name="id2587036"></a>
-<a class="indexterm" name="id2587043"></a>
+</p></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id353648"></a>Security Mode and Master Browsers</h3></div></div></div><p>
+<a class="indexterm" name="id353656"></a>
+<a class="indexterm" name="id353663"></a>
+<a class="indexterm" name="id353669"></a>
 There are a few comments to make in order to tie up some loose ends. There has been much debate over the issue
 of whether it is okay to configure Samba as a domain controller that operates with security mode other than
 user-mode. The only security mode that will not work due to technical reasons is share-mode security. Domain
 and server mode security are really just a variation on SMB user-level security.
 </p><p>
-<a class="indexterm" name="id2587060"></a>
-<a class="indexterm" name="id2587067"></a>
-<a class="indexterm" name="id2587074"></a>
-<a class="indexterm" name="id2587081"></a>
-<a class="indexterm" name="id2587087"></a>
-<a class="indexterm" name="id2587094"></a>
-<a class="indexterm" name="id2587101"></a>
+<a class="indexterm" name="id353683"></a>
+<a class="indexterm" name="id353690"></a>
+<a class="indexterm" name="id353697"></a>
+<a class="indexterm" name="id353703"></a>
+<a class="indexterm" name="id353710"></a>
+<a class="indexterm" name="id353716"></a>
+<a class="indexterm" name="id353723"></a>
 Actually, this issue is also closely tied to the debate on whether Samba must be the DMB for its workgroup
 when operating as a domain controller.  In a pure Microsoft Windows NT domain, the PDC wins the election to be
 the DMB, and then registers the DOMAIN&lt;1B&gt; NetBIOS name. This is not the name used by Windows clients
@@ -757,11 +757,11 @@
 Windows event logger complaining that it has lost the election to become a DMB.  For this reason, in networks
 where a Samba server is the PDC it is wise to configure the Samba domain controller as the DMB.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2587155"></a>
-<a class="indexterm" name="id2587162"></a>
-<a class="indexterm" name="id2587169"></a>
-<a class="indexterm" name="id2587176"></a>
-<a class="indexterm" name="id2587183"></a>
+<a class="indexterm" name="id353764"></a>
+<a class="indexterm" name="id353770"></a>
+<a class="indexterm" name="id353777"></a>
+<a class="indexterm" name="id353784"></a>
+<a class="indexterm" name="id353791"></a>
 SMB/CIFS servers that register the DOMAIN&lt;1C&gt; name do so because they provide the network logon
 service. Server that register the DOMAIN&lt;1B&gt; name are DMBs  meaning that they are responsible
 for browse list synchronization across all machines that have registered the DOMAIN&lt;1D&gt; name. The later
@@ -782,15 +782,15 @@
 PDC is asking for trouble. Therefore, you should always configure the Samba domain controller
 to be the DMB for its domain and set <a class="link" href="smb.conf.5.html#SECURITY">security = user</a>.
 This is the only officially supported mode of operation.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2587294"></a>Common Errors</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2587300"></a>&#8220;<span class="quote">$</span>&#8221; Cannot Be Included in Machine Name</h3></div></div></div><p>
-<a class="indexterm" name="id2587310"></a>
-<a class="indexterm" name="id2587316"></a>
-<a class="indexterm" name="id2587323"></a>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id353878"></a>Common Errors</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id353884"></a>&#8220;<span class="quote">$</span>&#8221; Cannot Be Included in Machine Name</h3></div></div></div><p>
+<a class="indexterm" name="id353894"></a>
+<a class="indexterm" name="id353900"></a>
+<a class="indexterm" name="id353907"></a>
 A machine account, typically stored in <code class="filename">/etc/passwd</code>, takes the form of the machine
 name with a &#8220;<span class="quote">$</span>&#8221; appended. Some BSD systems will not create a user with a &#8220;<span class="quote">$</span>&#8221; in the name.
 Recent versions of FreeBSD have removed this limitation, but older releases are still in common use.
 </p><p>
-<a class="indexterm" name="id2587349"></a>
+<a class="indexterm" name="id353932"></a>
 The problem is only in the program used to make the entry. Once made, it works perfectly.  Create a user
 without the &#8220;<span class="quote">$</span>&#8221;. Then use <code class="literal">vipw</code> to edit the entry, adding the &#8220;<span class="quote">$</span>&#8221;.
 Or create the whole entry with vipw if you like; make sure you use a unique user login ID.
@@ -798,8 +798,8 @@
 The UNIX tool <code class="literal">vipw</code> is a common tool for directly editing the <code class="filename">/etc/passwd</code> file.
 The use of vipw will ensure that shadow files (where used) will remain current with the passwd file. This is
 important for security reasons.
-</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2587400"></a>Joining Domain Fails Because of Existing Machine Account</h3></div></div></div><p>
-<a class="indexterm" name="id2587409"></a>
+</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id353978"></a>Joining Domain Fails Because of Existing Machine Account</h3></div></div></div><p>
+<a class="indexterm" name="id353987"></a>
 &#8220;<span class="quote">I get told, `You already have a connection to the Domain....' or `Cannot join domain, the
 credentials supplied conflict with an existing set...' when creating a Machine Trust Account.</span>&#8221;
 </p><p>
@@ -814,12 +814,12 @@
 Further, if the machine is already a &#8220;<span class="quote">member of a workgroup</span>&#8221; that is the same name as the domain
 you are joining (bad idea), you will get this message. Change the workgroup name to something else 
 it does not matter what  reboot, and try again.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2587465"></a>The System Cannot Log You On (C000019B)</h3></div></div></div><p>&#8220;<span class="quote">
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id354037"></a>The System Cannot Log You On (C000019B)</h3></div></div></div><p>&#8220;<span class="quote">
 I joined the domain successfully but after upgrading to a newer version of the Samba code I get the message,
 <span class="errorname">`The system cannot log you on (C000019B). Please try again or consult your system
 administrator</span> when attempting to logon.'</span>&#8221;
 </p><p>
-<a class="indexterm" name="id2587486"></a>
+<a class="indexterm" name="id354055"></a>
 This occurs when the domain SID stored in the secrets.tdb database is changed. The most common cause of a
 change in domain SID is when the domain name and/or the server name (NetBIOS name) is changed.  The only way
 to correct the problem is to restore the original domain SID or remove the domain client from the domain and
@@ -836,7 +836,7 @@
 domain members (workstations) will not be able to log onto the domain. The original domain SID
 can be recovered from the secrets.tdb file. The alternative is to visit each workstation to rejoin
 it to the domain.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2587541"></a>The Machine Trust Account Is Not Accessible</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id354104"></a>The Machine Trust Account Is Not Accessible</h3></div></div></div><p>
 &#8220;<span class="quote">When I try to join the domain I get the message, <span class="errorname">"The machine account 
 for this computer either does not exist or is not accessible</span>." What's wrong?</span>&#8221;
 </p><p>
@@ -858,16 +858,16 @@
 </p><p>
 Some people have also reported that inconsistent subnet masks between the Samba server and the NT 
 client can cause this problem.  Make sure that these are consistent for both client and server.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2587660"></a>Account Disabled</h3></div></div></div><p>&#8220;<span class="quote">When I attempt to log in to a Samba domain from a NT4/W200x workstation,
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id354209"></a>Account Disabled</h3></div></div></div><p>&#8220;<span class="quote">When I attempt to log in to a Samba domain from a NT4/W200x workstation,
 I get a message about my account being disabled.</span>&#8221;</p><p>
 Enable the user accounts with <strong class="userinput"><code>smbpasswd -e <em class="replaceable"><code>username</code></em>
 </code></strong>. This is normally done as an account is created.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2587688"></a>Domain Controller Unavailable</h3></div></div></div><p>&#8220;<span class="quote">Until a few minutes after Samba has started, clients get the error `Domain Controller Unavailable'</span>&#8221;</p><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id354234"></a>Domain Controller Unavailable</h3></div></div></div><p>&#8220;<span class="quote">Until a few minutes after Samba has started, clients get the error `Domain Controller Unavailable'</span>&#8221;</p><p>
 A domain controller has to announce its role on the network. This usually takes a while. Be patient for up to 15 minutes,
 then try again.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2587706"></a>Cannot Log onto Domain Member Workstation After Joining Domain</h3></div></div></div><p>
-<a class="indexterm" name="id2587715"></a>
-<a class="indexterm" name="id2587722"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id354251"></a>Cannot Log onto Domain Member Workstation After Joining Domain</h3></div></div></div><p>
+<a class="indexterm" name="id354259"></a>
+<a class="indexterm" name="id354266"></a>
 After successfully joining the domain, user logons fail with one of two messages: one to the
 effect that the domain controller cannot be found; the other claims that the account does not
 exist in the domain or that the password is incorrect. This may be due to incompatible
@@ -884,7 +884,7 @@
 <span class="emphasis"><em>Secure Channel:..., and Digitally sign...</em></span>.
 </p><p>
 It is important that these be set consistently with the Samba-3 server settings.
-</p></div></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id2584774" href="#id2584774" class="para">1</a>] </sup>See also <a class="link" href="passdb.html" title="Chapter 11. Account Information Databases">Account Information
-Databases</a>.</p>.</div><div class="footnote"><p><sup>[<a name="ftn.id2585280" href="#id2585280" class="para">2</a>] </sup>See <a class="link" href="NetworkBrowsing.html" title="Chapter 10. Network Browsing">Network Browsing</a>, and 
-		<a class="link" href="integrate-ms-networks.html" title="Chapter 29. Integrating MS Windows Networks with Samba">Integrating MS Windows Networks with Samba</a>.</p></div><div class="footnote"><p><sup>[<a name="ftn.id2585583" href="#id2585583" class="para">3</a>] </sup>See <a class="link" href="NetworkBrowsing.html" title="Chapter 10. Network Browsing">Network
+</p></div></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id351582" href="#id351582" class="para">1</a>] </sup>See also <a class="link" href="passdb.html" title="Chapter 11. Account Information Databases">Account Information
+Databases</a>.</p>.</div><div class="footnote"><p><sup>[<a name="ftn.id352035" href="#id352035" class="para">2</a>] </sup>See <a class="link" href="NetworkBrowsing.html" title="Chapter 10. Network Browsing">Network Browsing</a>, and 
+		<a class="link" href="integrate-ms-networks.html" title="Chapter 29. Integrating MS Windows Networks with Samba">Integrating MS Windows Networks with Samba</a>.</p></div><div class="footnote"><p><sup>[<a name="ftn.id352318" href="#id352318" class="para">3</a>] </sup>See <a class="link" href="NetworkBrowsing.html" title="Chapter 10. Network Browsing">Network
 Browsing</a>.</p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ServerType.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="type.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="samba-bdc.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 3. Server Types and Security Modes </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 5. Backup Domain Control</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/securing-samba.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/securing-samba.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/securing-samba.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 18. Securing Samba</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="locking.html" title="Chapter 17. File and Record Locking"><link rel="next" href="InterdomainTrusts.html" title="Chapter 19. Interdomain Trust Relationships"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 18. Securing Samba</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="locking.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="InterdomainTrusts.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="securing-samba"></a>Chapter 18. Securing Samba</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Andrew</span> <span class="surname">Tridgell</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:tridge at samba.org">tridge at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">May 26, 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="securing-samba.html#id2640103">Introduction</a></span></dt><dt><span class="sect1"><a href="securing-samba.html#id2640202">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="securing-samba.html#id2640348">Technical Discussion of Protective Measures and Issues</a></span></dt><dd><dl><dt><span class="sect2"><a href="securing-samba.html#id2640364">Using Host-Based Protection</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id2640518">User-Based Protection</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id2640578">Using Interface Protection</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#firewallports">Using a Firewall</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id2640934">Using IPC$ Share-Based Denials </a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id2641078">NTLMv2 Security</a></span></dt></dl></dd><dt><span class="sect1"><a href="securing-samba.html#id2641132">Upgrading Samba</a></span></dt><dt><span class="sect1"><a href="securing-samba.html#id2641176">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="securing-samba.html#id2641192">Smbclient Works on Localhost, but the Network Is Dead</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id2641220">Why Can Users Access Other Users' Home Directories?</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2640103"></a>Introduction</h2></div></div></div><p>
-<a class="indexterm" name="id2640111"></a>
-<a class="indexterm" name="id2640118"></a>
-<a class="indexterm" name="id2640125"></a>
-<a class="indexterm" name="id2640132"></a>
-<a class="indexterm" name="id2640139"></a>
-<a class="indexterm" name="id2640146"></a>
-<a class="indexterm" name="id2640152"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 18. Securing Samba</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="locking.html" title="Chapter 17. File and Record Locking"><link rel="next" href="InterdomainTrusts.html" title="Chapter 19. Interdomain Trust Relationships"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 18. Securing Samba</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="locking.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="InterdomainTrusts.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="securing-samba"></a>Chapter 18. Securing Samba</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Andrew</span> <span class="surname">Tridgell</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:tridge at samba.org">tridge at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">May 26, 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="securing-samba.html#id402714">Introduction</a></span></dt><dt><span class="sect1"><a href="securing-samba.html#id402802">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="securing-samba.html#id402937">Technical Discussion of Protective Measures and Issues</a></span></dt><dd><dl><dt><span class="sect2"><a href="securing-samba.html#id402949">Using Host-Based Protection</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id403094">User-Based Protection</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id403151">Using Interface Protection</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#firewallports">Using a Firewall</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id403481">Using IPC$ Share-Based Denials </a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id403614">NTLMv2 Security</a></span></dt></dl></dd><dt><span class="sect1"><a href="securing-samba.html#id403662">Upgrading Samba</a></span></dt><dt><span class="sect1"><a href="securing-samba.html#id403703">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="securing-samba.html#id403715">Smbclient Works on Localhost, but the Network Is Dead</a></span></dt><dt><span class="sect2"><a href="securing-samba.html#id403740">Why Can Users Access Other Users' Home Directories?</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id402714"></a>Introduction</h2></div></div></div><p>
+<a class="indexterm" name="id402722"></a>
+<a class="indexterm" name="id402729"></a>
+<a class="indexterm" name="id402736"></a>
+<a class="indexterm" name="id402742"></a>
+<a class="indexterm" name="id402749"></a>
+<a class="indexterm" name="id402756"></a>
+<a class="indexterm" name="id402763"></a>
 The information contained in this chapter applies in general to all Samba installations. Security is
 everyone's concern in the information technology world. A surprising number of Samba servers are being
 installed on machines that have direct internet access, thus security is made more critical than it would have been had the
@@ -22,11 +22,11 @@
 Security concerns are just like that. You need to know a little about the subject to appreciate
 how obvious most of it really is. The challenge for most of us is to discover that first morsel
 of knowledge with which we may unlock the secrets of the masters.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2640202"></a>Features and Benefits</h2></div></div></div><p>
-<a class="indexterm" name="id2640210"></a>
-<a class="indexterm" name="id2640217"></a>
-<a class="indexterm" name="id2640224"></a>
-<a class="indexterm" name="id2640231"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id402802"></a>Features and Benefits</h2></div></div></div><p>
+<a class="indexterm" name="id402810"></a>
+<a class="indexterm" name="id402817"></a>
+<a class="indexterm" name="id402823"></a>
+<a class="indexterm" name="id402830"></a>
 There are three levels at which security principles must be observed in order to render a site
 at least moderately secure. They are the perimeter firewall, the configuration of the host
 server that is running Samba, and Samba itself.
@@ -34,154 +34,154 @@
 Samba permits a most flexible approach to network security. As far as possible Samba implements
 the latest protocols to permit more secure MS Windows file and print operations.
 </p><p>
-<a class="indexterm" name="id2640251"></a>
-<a class="indexterm" name="id2640258"></a>
-<a class="indexterm" name="id2640265"></a>
+<a class="indexterm" name="id402847"></a>
+<a class="indexterm" name="id402854"></a>
+<a class="indexterm" name="id402861"></a>
 Samba can be secured from connections that originate from outside the local network. This can be done using
 <span class="emphasis"><em>host-based protection</em></span>, using Samba's implementation of a technology known as
 &#8220;<span class="quote">tcpwrappers,</span>&#8221; or it may be done be using <span class="emphasis"><em>interface-based exclusion</em></span> so
 <span class="application">smbd</span> will bind only to specifically permitted interfaces. It is also possible to set specific share- or
 resource-based exclusions, for example, on the <em class="parameter"><code>[IPC$]</code></em> autoshare. The <em class="parameter"><code>[IPC$]</code></em> share is used for browsing purposes as well as to establish TCP/IP connections.
 </p><p>
-<a class="indexterm" name="id2640312"></a>
-<a class="indexterm" name="id2640321"></a>
-<a class="indexterm" name="id2640328"></a>
+<a class="indexterm" name="id402904"></a>
+<a class="indexterm" name="id402912"></a>
+<a class="indexterm" name="id402919"></a>
 Another method by which Samba may be secured is by setting Access Control Entries (ACEs) in an Access 
 Control List (ACL) on the shares themselves. This is discussed in
 <a class="link" href="AccessControls.html" title="Chapter 16. File, Directory, and Share Access Controls">File, Directory, and Share Access Controls</a>.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2640348"></a>Technical Discussion of Protective Measures and Issues</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id402937"></a>Technical Discussion of Protective Measures and Issues</h2></div></div></div><p>
 The key challenge of security is that protective measures suffice at best
 only to close the door on known exploits and breach techniques. Never assume that
 because you have followed these few measures, the Samba server is now an impenetrable
 fortress! Given the history of information systems so far, it is only a matter of time
 before someone will find yet another vulnerability.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2640364"></a>Using Host-Based Protection</h3></div></div></div><p>
-<a class="indexterm" name="id2640372"></a>
-<a class="indexterm" name="id2640378"></a>
-<a class="indexterm" name="id2640385"></a>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id402949"></a>Using Host-Based Protection</h3></div></div></div><p>
+<a class="indexterm" name="id402957"></a>
+<a class="indexterm" name="id402964"></a>
+<a class="indexterm" name="id402970"></a>
 	In many installations of Samba, the greatest threat comes from outside
 	your immediate network. By default, Samba accepts connections from
 	any host, which means that if you run an insecure version of Samba on
 	a host that is directly connected to the Internet, you can be
 	especially vulnerable.
 	</p><p>
-<a class="indexterm" name="id2640400"></a>
-<a class="indexterm" name="id2640407"></a>
+<a class="indexterm" name="id402983"></a>
+<a class="indexterm" name="id402990"></a>
 	One of the simplest fixes in this case is to use the <a class="link" href="smb.conf.5.html#HOSTSALLOW">hosts allow</a> and
 	<a class="link" href="smb.conf.5.html#HOSTSDENY">hosts deny</a> options in the Samba <code class="filename">smb.conf</code> configuration file to
 	allow access to your server only from a specific range of hosts. An example might be:
-	</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2640454"></a><em class="parameter"><code>hosts allow = 127.0.0.1 192.168.2.0/24 192.168.3.0/24</code></em></td></tr><tr><td><a class="indexterm" name="id2640466"></a><em class="parameter"><code>hosts deny = 0.0.0.0/0</code></em></td></tr></table><p>
+	</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id403033"></a><em class="parameter"><code>hosts allow = 127.0.0.1 192.168.2.0/24 192.168.3.0/24</code></em></td></tr><tr><td><a class="indexterm" name="id403045"></a><em class="parameter"><code>hosts deny = 0.0.0.0/0</code></em></td></tr></table><p>
 	</p><p>
-<a class="indexterm" name="id2640481"></a>
-<a class="indexterm" name="id2640488"></a>
-<a class="indexterm" name="id2640495"></a>
+<a class="indexterm" name="id403059"></a>
+<a class="indexterm" name="id403066"></a>
+<a class="indexterm" name="id403073"></a>
 	The above will allow SMB connections only from <code class="constant">localhost</code> (your own
 	computer) and from the two private networks 192.168.2 and 192.168.3. All other
 	connections will be refused as soon as the client sends its first packet. The refusal
 	will be marked as <code class="literal">not listening on called name</code> error.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2640518"></a>User-Based Protection</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id403094"></a>User-Based Protection</h3></div></div></div><p>
 	If you want to restrict access to your server to valid users only, then the following
 	method may be of use. In the <code class="filename">smb.conf</code> <em class="parameter"><code>[global]</code></em> section put:
-	</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2640546"></a><em class="parameter"><code>valid users = @smbusers, jacko</code></em></td></tr></table><p>
+	</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id403120"></a><em class="parameter"><code>valid users = @smbusers, jacko</code></em></td></tr></table><p>
 	</p><p>
-<a class="indexterm" name="id2640561"></a>
+<a class="indexterm" name="id403134"></a>
 	This restricts all server access either to the user <span class="emphasis"><em>jacko</em></span>
 	or to members of the system group <span class="emphasis"><em>smbusers</em></span>.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2640578"></a>Using Interface Protection</h3></div></div></div><p>
-<a class="indexterm" name="id2640586"></a>
-<a class="indexterm" name="id2640592"></a>
-<a class="indexterm" name="id2640599"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id403151"></a>Using Interface Protection</h3></div></div></div><p>
+<a class="indexterm" name="id403159"></a>
+<a class="indexterm" name="id403166"></a>
+<a class="indexterm" name="id403173"></a>
 	By default, Samba accepts connections on any network interface that
 	it finds on your system. That means if you have an ISDN line or a PPP
 	connection to the Internet then Samba will accept connections on those
 	links. This may not be what you want.
 	</p><p>
 	You can change this behavior using options like this:
-	</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2640620"></a><em class="parameter"><code>interfaces = eth* lo</code></em></td></tr><tr><td><a class="indexterm" name="id2640632"></a><em class="parameter"><code>bind interfaces only = yes</code></em></td></tr></table><p>
+	</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id403191"></a><em class="parameter"><code>interfaces = eth* lo</code></em></td></tr><tr><td><a class="indexterm" name="id403203"></a><em class="parameter"><code>bind interfaces only = yes</code></em></td></tr></table><p>
 	</p><p>
-<a class="indexterm" name="id2640647"></a>
-<a class="indexterm" name="id2640654"></a>
-<a class="indexterm" name="id2640661"></a>
-<a class="indexterm" name="id2640668"></a>
+<a class="indexterm" name="id403217"></a>
+<a class="indexterm" name="id403224"></a>
+<a class="indexterm" name="id403231"></a>
+<a class="indexterm" name="id403238"></a>
 	This tells Samba to listen for connections only on interfaces with a name starting with
 	<code class="constant">eth</code> such as <code class="constant">eth0</code> or <code class="constant">eth1</code>, plus on the loopback interface called
 	<code class="constant">lo</code>. The name you will need to use depends on what OS you are using. In the above, I used
 	the common name for Ethernet adapters on Linux.
 	</p><p>
-<a class="indexterm" name="id2640697"></a>
-<a class="indexterm" name="id2640704"></a>
-<a class="indexterm" name="id2640711"></a>
-<a class="indexterm" name="id2640718"></a>
+<a class="indexterm" name="id403265"></a>
+<a class="indexterm" name="id403272"></a>
+<a class="indexterm" name="id403278"></a>
+<a class="indexterm" name="id403285"></a>
 	If you use the above and someone tries to make an SMB connection to your host over a PPP interface called
 	<code class="constant">ppp0</code>, then [s]he will get a TCP connection refused reply. In that case, no Samba code
 	is run at all, because the operating system has been told not to pass connections from that interface to any
 	Samba process. However, the refusal helps a would-be cracker by confirming that the IP address provides
 	valid active services.
 	</p><p>
-<a class="indexterm" name="id2640744"></a>
-<a class="indexterm" name="id2640751"></a>
-<a class="indexterm" name="id2640758"></a>
-<a class="indexterm" name="id2640765"></a>
-<a class="indexterm" name="id2640772"></a>
+<a class="indexterm" name="id403305"></a>
+<a class="indexterm" name="id403312"></a>
+<a class="indexterm" name="id403318"></a>
+<a class="indexterm" name="id403325"></a>
+<a class="indexterm" name="id403332"></a>
 	A better response would be to ignore the connection (from, for example, ppp0) altogether. The
 	advantage of ignoring the connection attempt, as compared with refusing it, is that it foils those who
 	probe an interface with the sole intention of finding valid IP addresses for later use in exploitation
 	or denial of service attacks. This method of dealing with potential malicious activity demands the
 	use of appropriate firewall mechanisms.
 	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="firewallports"></a>Using a Firewall</h3></div></div></div><p>
-<a class="indexterm" name="id2640800"></a>
-<a class="indexterm" name="id2640807"></a>
-<a class="indexterm" name="id2640814"></a>
+<a class="indexterm" name="id403356"></a>
+<a class="indexterm" name="id403363"></a>
+<a class="indexterm" name="id403370"></a>
 	Many people use a firewall to deny access to services they do not want exposed outside their network. This can
 	be a good idea, although I recommend using it in conjunction with the above methods so you are protected even
 	if your firewall is not active for some reason.
 	</p><p>
 	If you are setting up a firewall, you need to know what TCP and UDP ports to allow and block. Samba uses
 	the following:
-<a class="indexterm" name="id2640831"></a>
-<a class="indexterm" name="id2640838"></a>
-<a class="indexterm" name="id2640845"></a>
-<a class="indexterm" name="id2640852"></a>
-<a class="indexterm" name="id2640859"></a>
+<a class="indexterm" name="id403384"></a>
+<a class="indexterm" name="id403390"></a>
+<a class="indexterm" name="id403397"></a>
+<a class="indexterm" name="id403404"></a>
+<a class="indexterm" name="id403411"></a>
 	</p><table class="simplelist" border="0" summary="Simple list"><tr><td>Port 135/TCP - used by smbd</td></tr><tr><td>Port 137/UDP - used by nmbd</td></tr><tr><td>Port 138/UDP - used by nmbd</td></tr><tr><td>Port 139/TCP - used by smbd</td></tr><tr><td>Port 445/TCP - used by smbd</td></tr></table><p>
-<a class="indexterm" name="id2640893"></a>
+<a class="indexterm" name="id403444"></a>
 	The last one is important because many older firewall setups may not be aware of it, given that this port
 	was only added to the protocol in recent years.
 	</p><p>
-<a class="indexterm" name="id2640906"></a>
-<a class="indexterm" name="id2640913"></a>
-<a class="indexterm" name="id2640920"></a>
+<a class="indexterm" name="id403456"></a>
+<a class="indexterm" name="id403463"></a>
+<a class="indexterm" name="id403469"></a>
 	When configuring a firewall, the high order ports (1024-65535) are often used for outgoing connections and
 	therefore should be permitted through the firewall. It is prudent to block incoming packets on the high order
 	ports except for established connections.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2640934"></a>Using IPC$ Share-Based Denials </h3></div></div></div><p>
-<a class="indexterm" name="id2640942"></a>
-<a class="indexterm" name="id2640949"></a>
-<a class="indexterm" name="id2640955"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id403481"></a>Using IPC$ Share-Based Denials </h3></div></div></div><p>
+<a class="indexterm" name="id403489"></a>
+<a class="indexterm" name="id403495"></a>
+<a class="indexterm" name="id403502"></a>
 	If the above methods are not suitable, then you could also place a more specific deny on the IPC$ share that
 	is used in the recently discovered security hole. This allows you to offer access to other shares while
 	denying access to IPC$ from potentially untrustworthy hosts.
 	</p><p>
 	To do this you could use:
-	</p><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[IPC$]</code></em></td></tr><tr><td><a class="indexterm" name="id2640985"></a><em class="parameter"><code>hosts allow = 192.168.115.0/24 127.0.0.1</code></em></td></tr><tr><td><a class="indexterm" name="id2640997"></a><em class="parameter"><code>hosts deny = 0.0.0.0/0</code></em></td></tr></table><p>
+	</p><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[IPC$]</code></em></td></tr><tr><td><a class="indexterm" name="id403529"></a><em class="parameter"><code>hosts allow = 192.168.115.0/24 127.0.0.1</code></em></td></tr><tr><td><a class="indexterm" name="id403541"></a><em class="parameter"><code>hosts deny = 0.0.0.0/0</code></em></td></tr></table><p>
 	</p><p>
-<a class="indexterm" name="id2641012"></a>
-<a class="indexterm" name="id2641019"></a>
-<a class="indexterm" name="id2641026"></a>
+<a class="indexterm" name="id403556"></a>
+<a class="indexterm" name="id403563"></a>
+<a class="indexterm" name="id403570"></a>
 	This instructs Samba that IPC$ connections are not allowed from anywhere except the two listed network
 	addresses (localhost and the 192.168.115 subnet). Connections to other shares are still allowed. Because the
 	IPC$ share is the only share that is always accessible anonymously, this provides some level of protection
 	against attackers who do not know a valid username/password for your host.
 	</p><p>
-<a class="indexterm" name="id2641043"></a>
-<a class="indexterm" name="id2641050"></a>
-<a class="indexterm" name="id2641057"></a>
+<a class="indexterm" name="id403583"></a>
+<a class="indexterm" name="id403590"></a>
+<a class="indexterm" name="id403597"></a>
 	If you use this method, then clients will be given an <code class="literal">`access denied'</code> reply when they try
 	to access the IPC$ share. Those clients will not be able to browse shares and may also be unable to access
 	some other resources.  This is not recommended unless for some reason you cannot use one of the other methods
 	just discussed.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2641078"></a>NTLMv2 Security</h3></div></div></div><p>
-<a class="indexterm" name="id2641085"></a>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id403614"></a>NTLMv2 Security</h3></div></div></div><p>
+<a class="indexterm" name="id403622"></a>
 	To configure NTLMv2 authentication, the following registry keys are worth knowing about:
 	</p><p>
 		</p><pre class="screen">
@@ -201,20 +201,20 @@
 	The value 0x00080000 means permit only NTLMv2 session security. If either NtlmMinClientSec or
 	NtlmMinServerSec is set to 0x00080000, the connection will fail if NTLMv2
 	session security is negotiated.
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2641132"></a>Upgrading Samba</h2></div></div></div><p>
-<a class="indexterm" name="id2641140"></a>
-<a class="indexterm" name="id2641147"></a>
-<a class="indexterm" name="id2641154"></a>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id403662"></a>Upgrading Samba</h2></div></div></div><p>
+<a class="indexterm" name="id403670"></a>
+<a class="indexterm" name="id403677"></a>
+<a class="indexterm" name="id403684"></a>
 Please check regularly on <a class="ulink" href="http://www.samba.org/" target="_top">http://www.samba.org/</a> for
 updates and important announcements. Occasionally security releases are made, and it is highly recommended to
 upgrade Samba promptly when a security vulnerability is discovered. Check with your OS vendor for OS-specific
 upgrades.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2641176"></a>Common Errors</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id403703"></a>Common Errors</h2></div></div></div><p>
 If all Samba and host platform configurations were really as intuitive as one might like them to be, this
 chapter would not be necessary. Security issues are often vexing for a support person to resolve, not because
 of the complexity of the problem, but because most administrators who post what turns out to be a security
 problem request are totally convinced that the problem is with Samba.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2641192"></a>Smbclient Works on Localhost, but the Network Is Dead</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id403715"></a>Smbclient Works on Localhost, but the Network Is Dead</h3></div></div></div><p>
 	This is a common problem. Linux vendors tend to install a default firewall.
 	With the default firewall in place, only traffic on the loopback adapter (IP address 127.0.0.1)
 	is allowed through the firewall.
@@ -222,10 +222,10 @@
 	The solution is either to remove the firewall (stop it) or modify the firewall script to
 	allow SMB networking traffic through. See <a class="link" href="securing-samba.html#firewallports" title="Using a Firewall">the Using a 
 	Firewall</a> section.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2641220"></a>Why Can Users Access Other Users' Home Directories?</h3></div></div></div><p>
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id403740"></a>Why Can Users Access Other Users' Home Directories?</h3></div></div></div><p>
 	&#8220;<span class="quote">
-<a class="indexterm" name="id2641231"></a>
-<a class="indexterm" name="id2641238"></a>
+<a class="indexterm" name="id403750"></a>
+<a class="indexterm" name="id403757"></a>
 	We are unable to keep individual users from mapping to any other user's home directory once they have
 	supplied a valid password! They only need to enter their own password. I have not found any method to
 	configure Samba so that users may map only their own home directory.
@@ -233,20 +233,20 @@
 	</p><p>&#8220;<span class="quote">
 	User xyzzy can map his home directory. Once mapped, user xyzzy can also map anyone else's home directory.
 	</span>&#8221;</p><p>
-<a class="indexterm" name="id2641260"></a>
-<a class="indexterm" name="id2641267"></a>
+<a class="indexterm" name="id403775"></a>
+<a class="indexterm" name="id403782"></a>
 	This is not a security flaw, it is by design. Samba allows users to have exactly the same access to the UNIX
 	file system as when they were logged on to the UNIX box, except that it only allows such views onto the file
 	system as are allowed by the defined shares.
 	</p><p>
-<a class="indexterm" name="id2641282"></a>
-<a class="indexterm" name="id2641289"></a>
+<a class="indexterm" name="id403795"></a>
+<a class="indexterm" name="id403801"></a>
 	If your UNIX home directories are set up so that one user can happily <code class="literal">cd</code>
 	into another user's directory and execute <code class="literal">ls</code>, the UNIX security solution is to change file
 	permissions on the user's home directories so that the <code class="literal">cd</code> and <code class="literal">ls</code> are denied.
 	</p><p>
-<a class="indexterm" name="id2641326"></a>
-<a class="indexterm" name="id2641333"></a>
+<a class="indexterm" name="id403836"></a>
+<a class="indexterm" name="id403843"></a>
 	Samba tries very hard not to second guess the UNIX administrator's security policies and
 	trusts the UNIX admin to set the policies and permissions he or she desires.
 	</p><p>
@@ -255,9 +255,9 @@
 	</p><p>
 	The <a class="link" href="smb.conf.5.html#ONLYUSER">only user</a> works in conjunction with the <a class="link" href="smb.conf.5.html#USERS">users = list</a>,
 	so to get the behavior you require, add the line:
-	</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2641398"></a><em class="parameter"><code>users = %S</code></em></td></tr></table><p>
+	</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id403903"></a><em class="parameter"><code>users = %S</code></em></td></tr></table><p>
 	This is equivalent to adding
-	</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2641416"></a><em class="parameter"><code>valid users = %S</code></em></td></tr></table><p>
+	</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id403921"></a><em class="parameter"><code>valid users = %S</code></em></td></tr></table><p>
 	to the definition of the <em class="parameter"><code>[homes]</code></em> share, as recommended in
 	the <code class="filename">smb.conf</code> man page.
 	</p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="locking.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="optional.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="InterdomainTrusts.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 17. File and Record Locking </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 19. Interdomain Trust Relationships</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/speed.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/speed.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/speed.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 44. Samba Performance Tuning</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="Appendix.html" title="Part VI. Reference Section"><link rel="prev" href="Other-Clients.html" title="Chapter 43. Samba and Other CIFS Clients"><link rel="next" href="ch-ldap-tls.html" title="Chapter 45. LDAP and Transport Layer Security"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 44. Samba Performance Tuning</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="Other-Clients.html">Prev</a> </td><th width="60%" align="center">Part VI. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="ch-ldap-tls.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="speed"></a>Chapter 44. Samba Performance Tuning</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Paul</span> <span class="surname">Cochrane</span></h3><div class="affiliation"><span class="orgname">Dundee Limb Fitting Centre<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:paulc at dth.scot.nhs.uk">paulc at dth.scot.nhs.uk</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="speed.html#id2712438">Comparisons</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712476">Socket Options</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712572">Read Size</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712617">Max Xmit</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712665">Log Level</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712689">Read Raw</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712756">Write Raw</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712808">Slow Logins</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712831">Client Tuning</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712852">Samba Performance Problem Due to Changing Linux Kernel</a></span></dt><dt><span class="sect1"><a href="speed.html#id2712944">Corrupt tdb Files</a></span></dt><dt><span class="sect1"><a href="speed.html#id2713039">Samba Performance is Very Slow</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2712438"></a>Comparisons</h2></div></div></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 44. Samba Performance Tuning</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="Appendix.html" title="Part VI. Reference Section"><link rel="prev" href="Other-Clients.html" title="Chapter 43. Samba and Other CIFS Clients"><link rel="next" href="ch-ldap-tls.html" title="Chapter 45. LDAP and Transport Layer Security"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 44. Samba Performance Tuning</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="Other-Clients.html">Prev</a> </td><th width="60%" align="center">Part VI. Reference Section</th><td width="20%" align="right"> <a accesskey="n" href="ch-ldap-tls.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="speed"></a>Chapter 44. Samba Performance Tuning</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Paul</span> <span class="surname">Cochrane</span></h3><div class="affiliation"><span class="orgname">Dundee Limb Fitting Centre<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:paulc at dth.scot.nhs.uk">paulc at dth.scot.nhs.uk</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="speed.html#id469111">Comparisons</a></span></dt><dt><span class="sect1"><a href="speed.html#id469140">Socket Options</a></span></dt><dt><span class="sect1"><a href="speed.html#id469225">Read Size</a></span></dt><dt><span class="sect1"><a href="speed.html#id469265">Max Xmit</a></span></dt><dt><span class="sect1"><a href="speed.html#id469307">Log Level</a></span></dt><dt><span class="sect1"><a href="speed.html#id469329">Read Raw</a></span></dt><dt><span class="sect1"><a href="speed.html#id469389">Write Raw</a></span></dt><dt><span class="sect1"><a href="speed.html#id469438">Slow Logins</a></span></dt><dt><span class="sect1"><a href="speed.html#id469459">Client Tuning</a></span></dt><dt><span class="sect1"><a href="speed.html#id469477">Samba Performance Problem Due to Changing Linux Kernel</a></span></dt><dt><span class="sect1"><a href="speed.html#id469561">Corrupt tdb Files</a></span></dt><dt><span class="sect1"><a href="speed.html#id469650">Samba Performance is Very Slow</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id469111"></a>Comparisons</h2></div></div></div><p>
 The Samba server uses TCP to talk to the client, so if you are
 trying to see if it performs well, you should really compare it to
 programs that use the same protocol. The most readily available
@@ -20,7 +20,7 @@
 hardware and drivers used on the various systems. Given similar
 hardware, Samba should certainly be competitive in speed with other
 systems.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2712476"></a>Socket Options</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id469140"></a>Socket Options</h2></div></div></div><p>
 There are a number of socket options that can greatly affect the
 performance of a TCP-based server like Samba.
 </p><p>
@@ -44,7 +44,7 @@
 can seriously degrade Samba performance on the loopback adaptor (IP Address 127.0.0.1). It is strongly
 recommended that before specifying any settings for <em class="parameter"><code>socket options</code></em>, the effect
 first be quantitatively measured on the server being configured.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2712572"></a>Read Size</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id469225"></a>Read Size</h2></div></div></div><p>
 The option <a class="link" href="smb.conf.5.html#READSIZE">read size</a> affects the overlap of disk
 reads/writes with network reads/writes. If the amount of data being
 transferred in several of the SMB commands (currently SMBwrite, SMBwriteX, and
@@ -61,7 +61,7 @@
 done as yet to determine the optimal value, and it is likely that the best
 value will vary greatly between systems anyway. A value over 65536 is
 pointless and will cause you to allocate memory unnecessarily.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2712617"></a>Max Xmit</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id469265"></a>Max Xmit</h2></div></div></div><p>
 	At startup the client and server negotiate a <em class="parameter"><code>maximum transmit</code></em> size,
 which limits the size of nearly all SMB commands. You can set the
 maximum size that Samba will negotiate using the <a class="link" href="smb.conf.5.html#MAXXMIT">max xmit</a> option
@@ -74,12 +74,12 @@
 clients may perform better with a smaller transmit unit. Trying values
 of less than 2048 is likely to cause severe problems.
 In most cases the default is the best option.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2712665"></a>Log Level</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id469307"></a>Log Level</h2></div></div></div><p>
 If you set the log level (also known as <a class="link" href="smb.conf.5.html#DEBUGLEVEL">debug level</a>) higher than 2,
 then you may suffer a large drop in performance. This is because the
 server flushes the log file after each operation, which can be quite
 expensive. 
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2712689"></a>Read Raw</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id469329"></a>Read Raw</h2></div></div></div><p>
 The <a class="link" href="smb.conf.5.html#READRAW">read raw</a> operation is designed to be an optimized, low-latency
 file read operation. A server may choose to not support it,
 however, and Samba makes support for <a class="link" href="smb.conf.5.html#READRAW">read raw</a> optional, with it
@@ -90,26 +90,26 @@
 read operations, so you might like to try <a class="link" href="smb.conf.5.html#READRAW">read raw = no</a> and see what happens on your
 network. It might lower, raise, or not affect your performance. Only
 testing can really tell.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2712756"></a>Write Raw</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id469389"></a>Write Raw</h2></div></div></div><p>
 The <a class="link" href="smb.conf.5.html#WRITERAW">write raw</a> operation is designed to be an optimized, low-latency
 file write operation. A server may choose to not support it, however, and Samba makes support for
 <a class="link" href="smb.conf.5.html#WRITERAW">write raw</a> optional, with it being enabled by default.
 </p><p>
 Some machines may find <a class="link" href="smb.conf.5.html#WRITERAW">write raw</a> slower than normal write, in which
 case you may wish to change this option.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2712808"></a>Slow Logins</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id469438"></a>Slow Logins</h2></div></div></div><p>
 Slow logins are almost always due to the password checking time. Using
 the lowest practical <a class="link" href="smb.conf.5.html#PASSWORDLEVEL">password level</a> will improve things. 
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2712831"></a>Client Tuning</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id469459"></a>Client Tuning</h2></div></div></div><p>
 Often a speed problem can be traced to the client. The client (for
 example Windows for Workgroups) can often be tuned for better TCP
 performance. Check the sections on the various clients in 
 <a class="link" href="Other-Clients.html" title="Chapter 43. Samba and Other CIFS Clients">Samba and Other CIFS Clients</a>.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2712852"></a>Samba Performance Problem Due to Changing Linux Kernel</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id469477"></a>Samba Performance Problem Due to Changing Linux Kernel</h2></div></div></div><p>
 A user wrote the following to the mailing list:
 </p><div class="blockquote"><blockquote class="blockquote"><p>
-<a class="indexterm" name="id2712867"></a>
-<a class="indexterm" name="id2712874"></a>
+<a class="indexterm" name="id469491"></a>
+<a class="indexterm" name="id469498"></a>
 I am running Gentoo on my server and Samba 2.2.8a. Recently I changed kernel versions from
 <code class="filename">linux-2.4.19-gentoo-r10</code> to <code class="filename">linux-2.4.20-wolk4.0s</code>. Now I have a
 performance issue with Samba.  Many of you will probably say,  &#8220;<span class="quote">Move to vanilla sources!</span>&#8221; Well, I
@@ -120,16 +120,16 @@
 </p></blockquote></div><p>
 The answer he was given is:
 </p><div class="blockquote"><blockquote class="blockquote"><p>
-<a class="indexterm" name="id2712916"></a>
-<a class="indexterm" name="id2712923"></a>
-<a class="indexterm" name="id2712930"></a>
+<a class="indexterm" name="id469535"></a>
+<a class="indexterm" name="id469542"></a>
+<a class="indexterm" name="id469548"></a>
 Grab the mii-tool and check the duplex settings on the NIC.  My guess is that it is a link layer issue, not an
 application layer problem. Also run ifconfig and verify that the framing error, collisions, and so on, look
 normal for ethernet.
-</p></blockquote></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2712944"></a>Corrupt tdb Files</h2></div></div></div><p>
-<a class="indexterm" name="id2712952"></a>
-<a class="indexterm" name="id2712958"></a>
-<a class="indexterm" name="id2712965"></a>
+</p></blockquote></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id469561"></a>Corrupt tdb Files</h2></div></div></div><p>
+<a class="indexterm" name="id469568"></a>
+<a class="indexterm" name="id469575"></a>
+<a class="indexterm" name="id469582"></a>
 Our Samba PDC server has been hosting three TB of data to our 500+ users [Windows NT/XP]  for the last three
 years using Samba without a problem.  Today all shares went very slow. Also, the main smbd kept spawning new
 processes, so we had 1600+ running SMDB's (normally we average 250).  It crashed the SUN E3500 cluster twice.
@@ -138,28 +138,28 @@
 <span class="emphasis"><em>Question:</em></span> Is there any method of keeping the *.tdb files in top condition, or
 how can I detect early corruption?
 </p><p>
-<a class="indexterm" name="id2712996"></a>
-<a class="indexterm" name="id2713002"></a>
+<a class="indexterm" name="id469609"></a>
+<a class="indexterm" name="id469615"></a>
 <span class="emphasis"><em>Answer:</em></span> Yes, run <code class="literal">tdbbackup</code> each time after stopping nmbd and before starting nmbd.
 </p><p>
 <span class="emphasis"><em>Question:</em></span> What I also would like to mention is that the service latency seems
 a lot lower than before the locks cleanup. Any ideas on keeping it top notch?
 </p><p>
 <span class="emphasis"><em>Answer:</em></span> Yes. Same answer as for previous question!
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2713039"></a>Samba Performance is Very Slow</h2></div></div></div><p>
-<a class="indexterm" name="id2713047"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id469650"></a>Samba Performance is Very Slow</h2></div></div></div><p>
+<a class="indexterm" name="id469658"></a>
 A site reported experiencing very baffling symptoms with MYOB Premier opening and
 accessing its data files. Some  operations on the file would take between 40 and
 45 seconds.
 </p><p>
-<a class="indexterm" name="id2713060"></a>
-<a class="indexterm" name="id2713067"></a>
+<a class="indexterm" name="id469669"></a>
+<a class="indexterm" name="id469676"></a>
 It turned out that the printer monitor program running on the Windows
 clients was causing the problems. From the logs, we saw activity coming
 through with pauses of about 1 second.
 </p><p>
-<a class="indexterm" name="id2713080"></a>
-<a class="indexterm" name="id2713087"></a>
+<a class="indexterm" name="id469688"></a>
+<a class="indexterm" name="id469694"></a>
 Stopping the monitor software resulted in the networks access at normal
 (quick) speed. Restarting the program caused the speed to slow down
 again. The printer was a Canon LBP-810 and the relevant task was

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/troubleshooting.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/troubleshooting.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/troubleshooting.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1 +1 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part V. Troubleshooting</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="SWAT.html" title="Chapter 37. SWAT: The Samba Web Administration Tool"><link rel="next" href="diagnosis.html" title="Chapter 38. The Samba Checklist"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part V. Troubleshooting</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="SWAT.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="diagnosis.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="troubleshooting"></a>Part V. Troubleshooting</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="diagnosis.html">38. The Samba Checklist</a></span></dt><dd><dl><dt><span class="sect1"><a href="diagnosis.html#id2705069">Introduction</a></span></dt><dt><span class="sect1"><a href="diagnosis.html#id2705108">Assumptions</a></span></dt><dt><span class="sect1"><a href="diagnosis.html#id2705401">The Tests</a></span></dt></dl></dd><dt><span class="chapter"><a href="problems.html">39. Analyzing and Solving Samba Problems</a></span></dt><dd><dl><dt><span class="sect1"><a href="problems.html#id2707164">Diagnostics Tools</a></span></dt><dd><dl><dt><span class="sect2"><a href="problems.html#id2707216">Debugging with Samba Itself</a></span></dt><dt><span class="sect2"><a href="problems.html#id2707471">Tcpdump</a></span></dt><dt><span class="sect2"><a href="problems.html#id2707522">Ethereal</a></span></dt><dt><span class="sect2"><a href="problems.html#id2707665">The Windows Network Monitor</a></span></dt></dl></dd><dt><span class="sect1"><a href="problems.html#id2707992">Useful URLs</a></span></dt><dt><span class="sect1"><a href="problems.html#id2708029">Getting Mailing List Help</a></span></dt><dt><span class="sect1"><a href="problems.html#id2708204">How to Get Off the Mailing Lists</a></span></dt></dl></dd><dt><span class="chapter"><a href="bugreport.html">40. Reporting Bugs</a></span></dt><dd><dl><dt><span class="sect1"><a href="bugreport.html#id2708335">Introduction</a></span></dt><dt><span class="sect1"><a href="bugreport.html#id2708425">General Information</a></span></dt><dt><span class="sect1"><a href="bugreport.html#dbglvl">Debug Levels</a></span></dt><dd><dl><dt><span class="sect2"><a href="bugreport.html#id2708660">Debugging-Specific Operations</a></span></dt></dl></dd><dt><span class="sect1"><a href="bugreport.html#id2708862">Internal Errors</a></span></dt><dt><span class="sect1"><a href="bugreport.html#id2708995">Attaching to a Running Process</a></span></dt><dt><span class="sect1"><a href="bugreport.html#id2709120">Patches</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="SWAT.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="diagnosis.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 37. SWAT: The Samba Web Administration Tool </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 38. The Samba Checklist</td></tr></table></div></body></html>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part V. Troubleshooting</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="SWAT.html" title="Chapter 37. SWAT: The Samba Web Administration Tool"><link rel="next" href="diagnosis.html" title="Chapter 38. The Samba Checklist"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part V. Troubleshooting</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="SWAT.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="diagnosis.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="troubleshooting"></a>Part V. Troubleshooting</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="diagnosis.html">38. The Samba Checklist</a></span></dt><dd><dl><dt><span class="sect1"><a href="diagnosis.html#id462256">Introduction</a></span></dt><dt><span class="sect1"><a href="diagnosis.html#id462289">Assumptions</a></span></dt><dt><span class="sect1"><a href="diagnosis.html#id462567">The Tests</a></span></dt></dl></dd><dt><span class="chapter"><a href="problems.html">39. Analyzing and Solving Samba Problems</a></span></dt><dd><dl><dt><span class="sect1"><a href="problems.html#id464214">Diagnostics Tools</a></span></dt><dd><dl><dt><span class="sect2"><a href="problems.html#id464263">Debugging with Samba Itself</a></span></dt><dt><span class="sect2"><a href="problems.html#id464508">Tcpdump</a></span></dt><dt><span class="sect2"><a href="problems.html#id464556">Ethereal</a></span></dt><dt><span class="sect2"><a href="problems.html#id464695">The Windows Network Monitor</a></span></dt></dl></dd><dt><span class="sect1"><a href="problems.html#id465001">Useful URLs</a></span></dt><dt><span class="sect1"><a href="problems.html#id465036">Getting Mailing List Help</a></span></dt><dt><span class="sect1"><a href="problems.html#id465191">How to Get Off the Mailing Lists</a></span></dt></dl></dd><dt><span class="chapter"><a href="bugreport.html">40. Reporting Bugs</a></span></dt><dd><dl><dt><span class="sect1"><a href="bugreport.html#id465317">Introduction</a></span></dt><dt><span class="sect1"><a href="bugreport.html#id465397">General Information</a></span></dt><dt><span class="sect1"><a href="bugreport.html#dbglvl">Debug Levels</a></span></dt><dd><dl><dt><span class="sect2"><a href="bugreport.html#id465615">Debugging-Specific Operations</a></span></dt></dl></dd><dt><span class="sect1"><a href="bugreport.html#id465810">Internal Errors</a></span></dt><dt><span class="sect1"><a href="bugreport.html#id465932">Attaching to a Running Process</a></span></dt><dt><span class="sect1"><a href="bugreport.html#id466047">Patches</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="SWAT.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="diagnosis.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 37. SWAT: The Samba Web Administration Tool </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 38. The Samba Checklist</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/type.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/type.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/type.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,5 +1,5 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part II. Server Configuration Basics</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="FastStart.html" title="Chapter 2. Fast Start: Cure for Impatience"><link rel="next" href="ServerType.html" title="Chapter 3. Server Types and Security Modes"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part II. Server Configuration Basics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="FastStart.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ServerType.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="type"></a>Part II. Server Configuration Basics</h1></div></div></div><div class="partintro" lang="en"><div><div><div><h1 class="title"><a name="id2580621"></a>First Steps in Server Configuration</h1></div></div></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Part II. Server Configuration Basics</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="prev" href="FastStart.html" title="Chapter 2. Fast Start: Cure for Impatience"><link rel="next" href="ServerType.html" title="Chapter 3. Server Types and Security Modes"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part II. Server Configuration Basics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="FastStart.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ServerType.html">Next</a></td></tr></table><hr></div><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="type"></a>Part II. Server Configuration Basics</h1></div></div></div><div class="partintro" lang="en"><div><div><div><h1 class="title"><a name="id348116"></a>First Steps in Server Configuration</h1></div></div></div><p>
 Samba can operate in various modes within SMB networks. This HOWTO section contains information on
 configuring Samba to function as the type of server your network requires. Please read this
 section carefully.
-</p><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="ServerType.html">3. Server Types and Security Modes</a></span></dt><dd><dl><dt><span class="sect1"><a href="ServerType.html#id2580765">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="ServerType.html#id2580932">Server Types</a></span></dt><dt><span class="sect1"><a href="ServerType.html#id2581092">Samba Security Modes</a></span></dt><dd><dl><dt><span class="sect2"><a href="ServerType.html#id2581256">User Level Security</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id2581430">Share-Level Security</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id2581638">Domain Security Mode (User-Level Security)</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id2582161">ADS Security Mode (User-Level Security)</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id2582318">Server Security (User Level Security)</a></span></dt></dl></dd><dt><span class="sect1"><a href="ServerType.html#id2582616">Password Checking</a></span></dt><dt><span class="sect1"><a href="ServerType.html#id2582821">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="ServerType.html#id2582844">What Makes Samba a Server?</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id2582881">What Makes Samba a Domain Controller?</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id2582924">What Makes Samba a Domain Member?</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id2582956">Constantly Losing Connections to Password Server</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id2583013">Stand-alone Server is converted to Domain Controller  Now User accounts don't work</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="samba-pdc.html">4. Domain Control</a></span></dt><dd><dl><dt><span class="sect1"><a href="samba-pdc.html#id2583338">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="samba-pdc.html#id2583972">Single Sign-On and Domain Security</a></span></dt><dt><span class="sect1"><a href="samba-pdc.html#id2584572">Basics of Domain Control</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-pdc.html#id2584592">Domain Controller Types</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id2585096">Preparing for Domain Control</a></span></dt></dl></dd><dt><span class="sect1"><a href="samba-pdc.html#id2585606">Domain Control: Example Configuration</a></span></dt><dt><span class="sect1"><a href="samba-pdc.html#id2586348">Samba ADS Domain Control</a></span></dt><dt><span class="sect1"><a href="samba-pdc.html#id2586412">Domain and Network Logon Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-pdc.html#id2586431">Domain Network Logon Service</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id2587021">Security Mode and Master Browsers</a></span></dt></dl></dd><dt><span class="sect1"><a href="samba-pdc.html#id2587294">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-pdc.html#id2587300">&#8220;<span class="quote">$</span>&#8221; Cannot Be Included in Machine Name</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id2587400">Joining Domain Fails Because of Existing Machine Account</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id2587465">The System Cannot Log You On (C000019B)</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id2587541">The Machine Trust Account Is Not Accessible</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id2587660">Account Disabled</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id2587688">Domain Controller Unavailable</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id2587706">Cannot Log onto Domain Member Workstation After Joining Domain</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="samba-bdc.html">5. Backup Domain Control</a></span></dt><dd><dl><dt><span class="sect1"><a href="samba-bdc.html#id2587890">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="samba-bdc.html#id2588303">Essential Background Information</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-bdc.html#id2588373">MS Windows NT4-style Domain Control</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id2589047">LDAP Configuration Notes</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id2589411">Active Directory Domain Control</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id2589470">What Qualifies a Domain Controller on the Network?</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id2589560">How Does a Workstation find its Domain Controller?</a></span></dt></dl></dd><dt><span class="sect1"><a href="samba-bdc.html#id2589742">Backup Domain Controller Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-bdc.html#id2590243">Example Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="samba-bdc.html#id2590700">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-bdc.html#id2590743">Machine Accounts Keep Expiring</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id2590798">Can Samba Be a Backup Domain Controller to an NT4 PDC?</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id2590853">How Do I Replicate the smbpasswd File?</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id2590958">Can I Do This All with LDAP?</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="domain-member.html">6. Domain Membership</a></span></dt><dd><dl><dt><span class="sect1"><a href="domain-member.html#id2591202">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></span></dt><dd><dl><dt><span class="sect2"><a href="domain-member.html#id2591889">Manual Creation of Machine Trust Accounts</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id2592325">Managing Domain Machine Accounts using NT4 Server Manager</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id2592605">On-the-Fly Creation of Machine Trust Accounts</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id2592711">Making an MS Windows Workstation or Server a Domain Member</a></span></dt></dl></dd><dt><span class="sect1"><a href="domain-member.html#domain-member-server">Domain Member Server</a></span></dt><dd><dl><dt><span class="sect2"><a href="domain-member.html#id2593176">Joining an NT4-type Domain with Samba-3</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id2593911">Why Is This Better Than <em class="parameter"><code>security = server</code></em>?</a></span></dt></dl></dd><dt><span class="sect1"><a href="domain-member.html#ads-member">Samba ADS Domain Membership</a></span></dt><dd><dl><dt><span class="sect2"><a href="domain-member.html#id2594193">Configure <code class="filename">smb.conf</code></a></span></dt><dt><span class="sect2"><a href="domain-member.html#id2594384">Configure <code class="filename">/etc/krb5.conf</code></a></span></dt><dt><span class="sect2"><a href="domain-member.html#ads-create-machine-account">Create the Computer Account</a></span></dt><dt><span class="sect2"><a href="domain-member.html#ads-test-server">Testing Server Setup</a></span></dt><dt><span class="sect2"><a href="domain-member.html#ads-test-smbclient">Testing with <span class="application">smbclient</span></a></span></dt><dt><span class="sect2"><a href="domain-member.html#id2595479">Notes</a></span></dt></dl></dd><dt><span class="sect1"><a href="domain-member.html#id2595551">Sharing User ID Mappings between Samba Domain Members</a></span></dt><dt><span class="sect1"><a href="domain-member.html#id2595757">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="domain-member.html#id2595797">Cannot Add Machine Back to Domain</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id2595873">Adding Machine to Domain Fails</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id2596109">I Can't Join a Windows 2003 PDC</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="StandAloneServer.html">7. Standalone Servers</a></span></dt><dd><dl><dt><span class="sect1"><a href="StandAloneServer.html#id2596235">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="StandAloneServer.html#id2596329">Background</a></span></dt><dt><span class="sect1"><a href="StandAloneServer.html#id2596521">Example Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="StandAloneServer.html#RefDocServer">Reference Documentation Server</a></span></dt><dt><span class="sect2"><a href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></span></dt></dl></dd><dt><span class="sect1"><a href="StandAloneServer.html#id2597506">Common Errors</a></span></dt></dl></dd><dt><span class="chapter"><a href="ClientConfig.html">8. MS Windows Network Configuration Guide</a></span></dt><dd><dl><dt><span class="sect1"><a href="ClientConfig.html#id2597573">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="ClientConfig.html#id2597633">Technical Details</a></span></dt><dd><dl><dt><span class="sect2"><a href="ClientConfig.html#id2597677">TCP/IP Configuration</a></span></dt><dt><span class="sect2"><a href="ClientConfig.html#id2599448">Joining a Domain: Windows 2000/XP Professional</a></span></dt><dt><span class="sect2"><a href="ClientConfig.html#id2599975">Domain Logon Configuration: Windows 9x/Me</a></span></dt></dl></dd><dt><span class="sect1"><a href="ClientConfig.html#id2600420">Common Errors</a></span></dt></dl></dd></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="FastStart.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ServerType.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 2. Fast Start: Cure for Impatience </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 3. Server Types and Security Modes</td></tr></table></div></body></html>
+</p><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="ServerType.html">3. Server Types and Security Modes</a></span></dt><dd><dl><dt><span class="sect1"><a href="ServerType.html#id348242">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="ServerType.html#id348385">Server Types</a></span></dt><dt><span class="sect1"><a href="ServerType.html#id348521">Samba Security Modes</a></span></dt><dd><dl><dt><span class="sect2"><a href="ServerType.html#id348658">User Level Security</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id348806">Share-Level Security</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id348971">Domain Security Mode (User-Level Security)</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id349419">ADS Security Mode (User-Level Security)</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id349552">Server Security (User Level Security)</a></span></dt></dl></dd><dt><span class="sect1"><a href="ServerType.html#id349792">Password Checking</a></span></dt><dt><span class="sect1"><a href="ServerType.html#id349947">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="ServerType.html#id349965">What Makes Samba a Server?</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id349993">What Makes Samba a Domain Controller?</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id350027">What Makes Samba a Domain Member?</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id350051">Constantly Losing Connections to Password Server</a></span></dt><dt><span class="sect2"><a href="ServerType.html#id350090">Stand-alone Server is converted to Domain Controller  Now User accounts don't work</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="samba-pdc.html">4. Domain Control</a></span></dt><dd><dl><dt><span class="sect1"><a href="samba-pdc.html#id350366">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="samba-pdc.html#id350899">Single Sign-On and Domain Security</a></span></dt><dt><span class="sect1"><a href="samba-pdc.html#id351396">Basics of Domain Control</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-pdc.html#id351413">Domain Controller Types</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id351870">Preparing for Domain Control</a></span></dt></dl></dd><dt><span class="sect1"><a href="samba-pdc.html#id352336">Domain Control: Example Configuration</a></span></dt><dt><span class="sect1"><a href="samba-pdc.html#id353048">Samba ADS Domain Control</a></span></dt><dt><span class="sect1"><a href="samba-pdc.html#id353096">Domain and Network Logon Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-pdc.html#id353114">Domain Network Logon Service</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id353648">Security Mode and Master Browsers</a></span></dt></dl></dd><dt><span class="sect1"><a href="samba-pdc.html#id353878">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-pdc.html#id353884">&#8220;<span class="quote">$</span>&#8221; Cannot Be Included in Machine Name</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id353978">Joining Domain Fails Because of Existing Machine Account</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id354037">The System Cannot Log You On (C000019B)</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id354104">The Machine Trust Account Is Not Accessible</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id354209">Account Disabled</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id354234">Domain Controller Unavailable</a></span></dt><dt><span class="sect2"><a href="samba-pdc.html#id354251">Cannot Log onto Domain Member Workstation After Joining Domain</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="samba-bdc.html">5. Backup Domain Control</a></span></dt><dd><dl><dt><span class="sect1"><a href="samba-bdc.html#id354424">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="samba-bdc.html#id354803">Essential Background Information</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-bdc.html#id354867">MS Windows NT4-style Domain Control</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id355488">LDAP Configuration Notes</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id355820">Active Directory Domain Control</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id355874">What Qualifies a Domain Controller on the Network?</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id355957">How Does a Workstation find its Domain Controller?</a></span></dt></dl></dd><dt><span class="sect1"><a href="samba-bdc.html#id356115">Backup Domain Controller Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-bdc.html#id356586">Example Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="samba-bdc.html#id357015">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="samba-bdc.html#id357055">Machine Accounts Keep Expiring</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id357103">Can Samba Be a Backup Domain Controller to an NT4 PDC?</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id357154">How Do I Replicate the smbpasswd File?</a></span></dt><dt><span class="sect2"><a href="samba-bdc.html#id357252">Can I Do This All with LDAP?</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="domain-member.html">6. Domain Membership</a></span></dt><dd><dl><dt><span class="sect1"><a href="domain-member.html#id357484">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="domain-member.html#machine-trust-accounts">MS Windows Workstation/Server Machine Trust Accounts</a></span></dt><dd><dl><dt><span class="sect2"><a href="domain-member.html#id358122">Manual Creation of Machine Trust Accounts</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id358537">Managing Domain Machine Accounts using NT4 Server Manager</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id358802">On-the-Fly Creation of Machine Trust Accounts</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id358901">Making an MS Windows Workstation or Server a Domain Member</a></span></dt></dl></dd><dt><span class="sect1"><a href="domain-member.html#domain-member-server">Domain Member Server</a></span></dt><dd><dl><dt><span class="sect2"><a href="domain-member.html#id359333">Joining an NT4-type Domain with Samba-3</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id360028">Why Is This Better Than <em class="parameter"><code>security = server</code></em>?</a></span></dt></dl></dd><dt><span class="sect1"><a href="domain-member.html#ads-member">Samba ADS Domain Membership</a></span></dt><dd><dl><dt><span class="sect2"><a href="domain-member.html#id360288">Configure <code class="filename">smb.conf</code></a></span></dt><dt><span class="sect2"><a href="domain-member.html#id360470">Configure <code class="filename">/etc/krb5.conf</code></a></span></dt><dt><span class="sect2"><a href="domain-member.html#ads-create-machine-account">Create the Computer Account</a></span></dt><dt><span class="sect2"><a href="domain-member.html#ads-test-server">Testing Server Setup</a></span></dt><dt><span class="sect2"><a href="domain-member.html#ads-test-smbclient">Testing with <span class="application">smbclient</span></a></span></dt><dt><span class="sect2"><a href="domain-member.html#id361503">Notes</a></span></dt></dl></dd><dt><span class="sect1"><a href="domain-member.html#id361572">Sharing User ID Mappings between Samba Domain Members</a></span></dt><dt><span class="sect1"><a href="domain-member.html#id361768">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="domain-member.html#id361802">Cannot Add Machine Back to Domain</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id361872">Adding Machine to Domain Fails</a></span></dt><dt><span class="sect2"><a href="domain-member.html#id362092">I Can't Join a Windows 2003 PDC</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="StandAloneServer.html">7. Standalone Servers</a></span></dt><dd><dl><dt><span class="sect1"><a href="StandAloneServer.html#id362210">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="StandAloneServer.html#id362296">Background</a></span></dt><dt><span class="sect1"><a href="StandAloneServer.html#id362473">Example Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="StandAloneServer.html#RefDocServer">Reference Documentation Server</a></span></dt><dt><span class="sect2"><a href="StandAloneServer.html#SimplePrintServer">Central Print Serving</a></span></dt></dl></dd><dt><span class="sect1"><a href="StandAloneServer.html#id363410">Common Errors</a></span></dt></dl></dd><dt><span class="chapter"><a href="ClientConfig.html">8. MS Windows Network Configuration Guide</a></span></dt><dd><dl><dt><span class="sect1"><a href="ClientConfig.html#id363475">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="ClientConfig.html#id363528">Technical Details</a></span></dt><dd><dl><dt><span class="sect2"><a href="ClientConfig.html#id363569">TCP/IP Configuration</a></span></dt><dt><span class="sect2"><a href="ClientConfig.html#id365265">Joining a Domain: Windows 2000/XP Professional</a></span></dt><dt><span class="sect2"><a href="ClientConfig.html#id365774">Domain Logon Configuration: Windows 9x/Me</a></span></dt></dl></dd><dt><span class="sect1"><a href="ClientConfig.html#id366202">Common Errors</a></span></dt></dl></dd></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="FastStart.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ServerType.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 2. Fast Start: Cure for Impatience </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 3. Server Types and Security Modes</td></tr></table></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/unicode.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/unicode.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/unicode.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,5 +1,5 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 30. Unicode/Charsets</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="integrate-ms-networks.html" title="Chapter 29. Integrating MS Windows Networks with Samba"><link rel="next" href="Backup.html" title="Chapter 31. Backup Techniques"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 30. Unicode/Charsets</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="integrate-ms-networks.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="Backup.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="unicode"></a>Chapter 30. Unicode/Charsets</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">TAKAHASHI</span> <span class="surname">Motonobu</span></h3><span class="contrib">Japanese character support</span> <div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:monyo at home.monyo.com">monyo at home.monyo.com</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">25 March 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="unicode.html#id2692198">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="unicode.html#id2692250">What Are Charsets and Unicode?</a></span></dt><dt><span class="sect1"><a href="unicode.html#id2692384">Samba and Charsets</a></span></dt><dt><span class="sect1"><a href="unicode.html#id2692520">Conversion from Old Names</a></span></dt><dt><span class="sect1"><a href="unicode.html#id2692552">Japanese Charsets</a></span></dt><dd><dl><dt><span class="sect2"><a href="unicode.html#id2692681">Basic Parameter Setting</a></span></dt><dt><span class="sect2"><a href="unicode.html#id2693322">Individual Implementations</a></span></dt><dt><span class="sect2"><a href="unicode.html#id2693445">Migration from Samba-2.2 Series</a></span></dt></dl></dd><dt><span class="sect1"><a href="unicode.html#id2693591">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="unicode.html#id2693597">CP850.so Can't Be Found</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2692198"></a>Features and Benefits</h2></div></div></div><p>
-<a class="indexterm" name="id2692206"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 30. Unicode/Charsets</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="integrate-ms-networks.html" title="Chapter 29. Integrating MS Windows Networks with Samba"><link rel="next" href="Backup.html" title="Chapter 31. Backup Techniques"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 30. Unicode/Charsets</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="integrate-ms-networks.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="Backup.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="unicode"></a>Chapter 30. Unicode/Charsets</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">TAKAHASHI</span> <span class="surname">Motonobu</span></h3><span class="contrib">Japanese character support</span> <div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:monyo at home.monyo.com">monyo at home.monyo.com</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">25 March 2003</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="unicode.html#id450204">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="unicode.html#id450250">What Are Charsets and Unicode?</a></span></dt><dt><span class="sect1"><a href="unicode.html#id450371">Samba and Charsets</a></span></dt><dt><span class="sect1"><a href="unicode.html#id450497">Conversion from Old Names</a></span></dt><dt><span class="sect1"><a href="unicode.html#id450526">Japanese Charsets</a></span></dt><dd><dl><dt><span class="sect2"><a href="unicode.html#id450646">Basic Parameter Setting</a></span></dt><dt><span class="sect2"><a href="unicode.html#id451226">Individual Implementations</a></span></dt><dt><span class="sect2"><a href="unicode.html#id451340">Migration from Samba-2.2 Series</a></span></dt></dl></dd><dt><span class="sect1"><a href="unicode.html#id451479">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="unicode.html#id451484">CP850.so Can't Be Found</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id450204"></a>Features and Benefits</h2></div></div></div><p>
+<a class="indexterm" name="id450212"></a>
 Every industry eventually matures. One of the great areas of maturation is in
 the focus that has been given over the past decade to make it possible for anyone
 anywhere to use a computer. It has not always been that way. In fact, not so long
@@ -11,19 +11,19 @@
 <a class="ulink" href="http://www.openi18n.org/" target="_top">Openi18n organization</a>
 is deserving of special mention.
 </p><p>
-<a class="indexterm" name="id2692235"></a>
+<a class="indexterm" name="id450236"></a>
 Samba-2.x supported a single locale through a mechanism called 
 <span class="emphasis"><em>codepages</em></span>. Samba-3 is destined to become a truly transglobal
 file- and printer-sharing platform.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2692250"></a>What Are Charsets and Unicode?</h2></div></div></div><p>
-<a class="indexterm" name="id2692258"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id450250"></a>What Are Charsets and Unicode?</h2></div></div></div><p>
+<a class="indexterm" name="id450257"></a>
 Computers communicate in numbers. In texts, each number is 
 translated to a corresponding letter. The meaning that will be assigned 
 to a certain number depends on the <span class="emphasis"><em>character set (charset)
 </em></span> that is used. 
 </p><p>
-<a class="indexterm" name="id2692275"></a>
-<a class="indexterm" name="id2692282"></a>
+<a class="indexterm" name="id450273"></a>
+<a class="indexterm" name="id450280"></a>
 A charset can be seen as a table that is used to translate numbers to 
 letters. Not all computers use the same charset (there are charsets 
 with German umlauts, Japanese characters, and so on). The American Standard Code
@@ -31,36 +31,36 @@
 encoding scheme used by computers to date. This employs a charset that contains 
 256 characters. Using this mode of encoding, each character takes exactly one byte.
 </p><p>
-<a class="indexterm" name="id2692300"></a>
-<a class="indexterm" name="id2692307"></a>
+<a class="indexterm" name="id450294"></a>
+<a class="indexterm" name="id450301"></a>
 There are also charsets that support extended characters, but those need at least
 twice as much storage space as does ASCII encoding. Such charsets can contain
 <code class="literal">256 * 256 = 65536</code> characters, which is more than all possible
 characters one could think of. They are called multibyte charsets because they use
 more then one byte to store one character. 
 </p><p>
-<a class="indexterm" name="id2692329"></a>
+<a class="indexterm" name="id450319"></a>
 One standardized multibyte charset encoding scheme is known as
 <a class="ulink" href="http://www.unicode.org/" target="_top">unicode</a>.  A big advantage of using a
 multibyte charset is that you only need one. There is no need to make sure two
 computers use the same charset when they are communicating.
 </p><p>
-<a class="indexterm" name="id2692349"></a>
-<a class="indexterm" name="id2692356"></a>
-<a class="indexterm" name="id2692363"></a>
+<a class="indexterm" name="id450337"></a>
+<a class="indexterm" name="id450344"></a>
+<a class="indexterm" name="id450351"></a>
 Old Windows clients use single-byte charsets, named 
 <em class="parameter"><code>codepages</code></em>, by Microsoft. However, there is no support for 
 negotiating the charset to be used in the SMB/CIFS protocol. Thus, you 
 have to make sure you are using the same charset when talking to an older client.
 Newer clients (Windows NT, 200x, XP) talk Unicode over the wire.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2692384"></a>Samba and Charsets</h2></div></div></div><p>
-<a class="indexterm" name="id2692392"></a>
-<a class="indexterm" name="id2692398"></a>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id450371"></a>Samba and Charsets</h2></div></div></div><p>
+<a class="indexterm" name="id450379"></a>
+<a class="indexterm" name="id450385"></a>
 As of Samba-3, Samba can (and will) talk Unicode over the wire. Internally, 
 Samba knows of three kinds of character sets: 
 </p><div class="variablelist"><dl><dt><span class="term"><a class="link" href="smb.conf.5.html#UNIXCHARSET">unix charset</a></span></dt><dd><p>
-<a class="indexterm" name="id2692431"></a>
-<a class="indexterm" name="id2692437"></a>
+<a class="indexterm" name="id450415"></a>
+<a class="indexterm" name="id450421"></a>
 		This is the charset used internally by your operating system. 
 		The default is <code class="constant">UTF-8</code>, which is fine for most 
 		systems and covers all characters in all languages. The default
@@ -73,26 +73,26 @@
 		The default depends on the charsets you have installed on your system.
 		Run <code class="literal">testparm -v | grep "dos charset"</code> to see 
 		what the default is on your system. 
-		</p></dd></dl></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2692520"></a>Conversion from Old Names</h2></div></div></div><p>
-<a class="indexterm" name="id2692528"></a>
+		</p></dd></dl></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id450497"></a>Conversion from Old Names</h2></div></div></div><p>
+<a class="indexterm" name="id450505"></a>
 Because previous Samba versions did not do any charset conversion, 
 characters in filenames are usually not correct in the UNIX charset but only 
 for the local charset used by the DOS/Windows clients.
 </p><p>Bjoern Jacke has written a utility named <a class="ulink" href="http://j3e.de/linux/convmv/" target="_top">convmv</a>
 that can convert whole directory structures to different charsets with one single command. 
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2692552"></a>Japanese Charsets</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id450526"></a>Japanese Charsets</h2></div></div></div><p>
 Setting up Japanese charsets is quite difficult. This is mainly because:
 </p><div class="itemizedlist"><ul type="disc"><li><p>
-<a class="indexterm" name="id2692567"></a>
+<a class="indexterm" name="id450541"></a>
 		The Windows character set is extended from the original legacy Japanese
 		standard (JIS X 0208) and is not standardized. This means that the strictly
 		standardized implementation cannot support the full Windows character set.
 	</p></li><li><p>
-<a class="indexterm" name="id2692582"></a>
-<a class="indexterm" name="id2692589"></a>
-<a class="indexterm" name="id2692596"></a>
-<a class="indexterm" name="id2692602"></a>
-<a class="indexterm" name="id2692609"></a>
+<a class="indexterm" name="id450554"></a>
+<a class="indexterm" name="id450561"></a>
+<a class="indexterm" name="id450568"></a>
+<a class="indexterm" name="id450574"></a>
+<a class="indexterm" name="id450581"></a>
 		Mainly for historical reasons, there are several encoding methods in
 		Japanese, which are not fully compatible with each other. There are
 		two major encoding methods. One is the Shift_JIS series used in Windows
@@ -112,24 +112,24 @@
 		names may be different on different systems.  This means that the value of 
 		the charset parameters depends on the implementation of iconv() you are using.
 		</p><p>
-<a class="indexterm" name="id2692649"></a>
-<a class="indexterm" name="id2692656"></a>
-<a class="indexterm" name="id2692662"></a>
-<a class="indexterm" name="id2692669"></a>
+<a class="indexterm" name="id450615"></a>
+<a class="indexterm" name="id450622"></a>
+<a class="indexterm" name="id450629"></a>
+<a class="indexterm" name="id450635"></a>
 		Though 2-byte fixed UCS-2 encoding is used in Windows internally,
 		Shift_JIS series encoding is usually used in Japanese environments
 		as ASCII encoding is in English environments.
-	</p></li></ul></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2692681"></a>Basic Parameter Setting</h3></div></div></div><p>
-<a class="indexterm" name="id2692688"></a>
+	</p></li></ul></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id450646"></a>Basic Parameter Setting</h3></div></div></div><p>
+<a class="indexterm" name="id450653"></a>
 	The <a class="link" href="smb.conf.5.html#DOSCHARSET">dos charset</a> and 
 	<a class="link" href="smb.conf.5.html#DISPLAYCHARSET">display charset</a>
 	should be set to the locale compatible with the character set 
 	and encoding method used on Windows. This is usually CP932
 	but sometimes has a different name.
 	</p><p>
-<a class="indexterm" name="id2692724"></a>
-<a class="indexterm" name="id2692731"></a>
-<a class="indexterm" name="id2692737"></a>
+<a class="indexterm" name="id450686"></a>
+<a class="indexterm" name="id450692"></a>
+<a class="indexterm" name="id450699"></a>
 	The <a class="link" href="smb.conf.5.html#UNIXCHARSET">unix charset</a> can be either Shift_JIS series,
 	EUC-JP series, or UTF-8. UTF-8 is always available, but the availability of other locales
 	and the name itself depends on the system.
@@ -166,8 +166,8 @@
 			only. It is good practice to verify that the Japanized free software can work
 			with Shift_JIS.
 			</p></dd><dt><span class="term">EUC-JP series</span></dt><dd><p>
-<a class="indexterm" name="id2692873"></a>
-<a class="indexterm" name="id2692879"></a>
+<a class="indexterm" name="id450816"></a>
+<a class="indexterm" name="id450823"></a>
 			EUC-JP series means a locale that is equivalent to the industry
 			standard called EUC-JP, widely used in Japanese UNIX (although EUC
 			contains specifications for languages other than Japanese, such as
@@ -176,16 +176,16 @@
 			Windows on Samba, the filename on UNIX becomes 0xb6a6, 0xcdad,
 			&#8220;<span class="quote">.txt</span>&#8221; (an 8-byte BINARY string). 
 			</p><p>
-<a class="indexterm" name="id2692904"></a>
-<a class="indexterm" name="id2692911"></a>
-<a class="indexterm" name="id2692918"></a>
-<a class="indexterm" name="id2692925"></a>
-<a class="indexterm" name="id2692931"></a>
-<a class="indexterm" name="id2692938"></a>
-<a class="indexterm" name="id2692945"></a>
-<a class="indexterm" name="id2692952"></a>
-<a class="indexterm" name="id2692959"></a>
-<a class="indexterm" name="id2692966"></a>
+<a class="indexterm" name="id450844"></a>
+<a class="indexterm" name="id450851"></a>
+<a class="indexterm" name="id450858"></a>
+<a class="indexterm" name="id450864"></a>
+<a class="indexterm" name="id450871"></a>
+<a class="indexterm" name="id450878"></a>
+<a class="indexterm" name="id450885"></a>
+<a class="indexterm" name="id450892"></a>
+<a class="indexterm" name="id450898"></a>
+<a class="indexterm" name="id450905"></a>
 			Since EUC-JP is usually used on open source UNIX, Linux, and FreeBSD, and on commercial-based UNIX, Solaris,
 			IRIX, and Tru64 UNIX as Japanese locale (however, it is also possible on Solaris to use Shift_JIS and UTF-8,
 			and on Tru64 UNIX it is possible to use Shift_JIS). To use EUC-JP series, most Japanese filenames created from
@@ -198,7 +198,7 @@
 			commands that cannot handle non-ASCII filenames may be aborted
 			during parsing filenames.
 			</p><p>
-<a class="indexterm" name="id2692999"></a>
+<a class="indexterm" name="id450932"></a>
 			Moreover, if you built Samba using differently installed libiconv,
 			the eucJP-ms locale included in libiconv and EUC-JP series locale
 			included in the operating system may not be compatible. In this case, you may need to
@@ -223,9 +223,9 @@
 			must be handled carefully, so you had better not touch filenames
 			written from Windows on UNIX.
 			</p><p>
-<a class="indexterm" name="id2693072"></a>
-<a class="indexterm" name="id2693079"></a>
-<a class="indexterm" name="id2693086"></a>
+<a class="indexterm" name="id450996"></a>
+<a class="indexterm" name="id451003"></a>
+<a class="indexterm" name="id451010"></a>
 			In addition, although it is not directly concerned with Samba, since
 			there is a delicate difference between the iconv() function, which is
 			generally used on UNIX, and the functions used on other platforms,
@@ -233,14 +233,14 @@
 			Shift_JIS and Unicode UTF-8 must be done with care and recognition
 			of the limitations involved in the process.
 			</p><p>
-<a class="indexterm" name="id2693103"></a>
+<a class="indexterm" name="id451024"></a>
 			Although Mac OS X uses UTF-8 as its encoding method for filenames,
 			it uses an extended UTF-8 specification that Samba cannot handle, so
 			UTF-8 locale is not available for Mac OS X.
 			</p></dd><dt><span class="term">Shift_JIS series + vfs_cap (CAP encoding)</span></dt><dd><p>
-<a class="indexterm" name="id2693123"></a>
-<a class="indexterm" name="id2693130"></a>
-<a class="indexterm" name="id2693137"></a>
+<a class="indexterm" name="id451043"></a>
+<a class="indexterm" name="id451050"></a>
+<a class="indexterm" name="id451057"></a>
 			CAP encoding means a specification used in CAP and NetAtalk, file
 			server software for Macintosh. In the case of CAP encoding, for
 			example, if a Japanese filename consists of 0x8ba4 and 0x974c, and
@@ -269,14 +269,14 @@
 			</p><p>
 			To use CAP encoding on Samba-3, you should use the unix charset parameter and VFS 
 			as in <a class="link" href="unicode.html#vfscap-intl" title="Example 30.1. VFS CAP">the VFS CAP smb.conf file</a>.
-			</p><div class="example"><a name="vfscap-intl"></a><p class="title"><b>Example 30.1. VFS CAP</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td># the locale name "CP932" may be different</td></tr><tr><td><a class="indexterm" name="id2693236"></a><em class="parameter"><code>dos charset = CP932</code></em></td></tr><tr><td><a class="indexterm" name="id2693247"></a><em class="parameter"><code>unix charset = CP932</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[cap-share]</code></em></td></tr><tr><td><a class="indexterm" name="id2693268"></a><em class="parameter"><code>vfs option = cap</code></em></td></tr></table></div></div><br class="example-break"><p>
-<a class="indexterm" name="id2693283"></a>
-<a class="indexterm" name="id2693290"></a>
-<a class="indexterm" name="id2693296"></a>
-<a class="indexterm" name="id2693303"></a>
+			</p><div class="example"><a name="vfscap-intl"></a><p class="title"><b>Example 30.1. VFS CAP</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td># the locale name "CP932" may be different</td></tr><tr><td><a class="indexterm" name="id451142"></a><em class="parameter"><code>dos charset = CP932</code></em></td></tr><tr><td><a class="indexterm" name="id451154"></a><em class="parameter"><code>unix charset = CP932</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[cap-share]</code></em></td></tr><tr><td><a class="indexterm" name="id451174"></a><em class="parameter"><code>vfs option = cap</code></em></td></tr></table></div></div><br class="example-break"><p>
+<a class="indexterm" name="id451189"></a>
+<a class="indexterm" name="id451196"></a>
+<a class="indexterm" name="id451202"></a>
+<a class="indexterm" name="id451209"></a>
 			You should set CP932 if using GNU libiconv for unix charset. With this setting,
 			filenames in the &#8220;<span class="quote">cap-share</span>&#8221; share are written with CAP encoding.
-			</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2693322"></a>Individual Implementations</h3></div></div></div><p>
+			</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id451226"></a>Individual Implementations</h3></div></div></div><p>
 Here is some additional information regarding individual implementations:
 </p><div class="variablelist"><dl><dt><span class="term">GNU libiconv</span></dt><dd><p>
 			To handle Japanese correctly, you should apply the patch
@@ -299,15 +299,15 @@
 			to glibc-2.2.5/2.3.1/2.3.2 or should use the patch-merged versions, glibc-2.3.3 or later.
 			</p><p>
 			Using the above glibc, these setting are available:
-			</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id2693398"></a><em class="parameter"><code>dos charset = CP932</code></em></td></tr><tr><td><a class="indexterm" name="id2693410"></a><em class="parameter"><code>unix charset = CP932 / eucJP-ms / UTF-8</code></em></td></tr><tr><td><a class="indexterm" name="id2693422"></a><em class="parameter"><code>display charset = CP932</code></em></td></tr></table><p>
+			</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id451295"></a><em class="parameter"><code>dos charset = CP932</code></em></td></tr><tr><td><a class="indexterm" name="id451307"></a><em class="parameter"><code>unix charset = CP932 / eucJP-ms / UTF-8</code></em></td></tr><tr><td><a class="indexterm" name="id451318"></a><em class="parameter"><code>display charset = CP932</code></em></td></tr></table><p>
 			</p><p>
 			Other Japanese locales (for example, Shift_JIS and EUC-JP) should not
 			be used because of the lack of the compatibility with Windows.
-			</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2693445"></a>Migration from Samba-2.2 Series</h3></div></div></div><p> 
+			</p></dd></dl></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id451340"></a>Migration from Samba-2.2 Series</h3></div></div></div><p> 
 Prior to Samba-2.2 series, the &#8220;<span class="quote">coding system</span>&#8221; parameter was used. The default codepage in Samba
 2.x was code page 850. In the Samba-3 series this has been replaced with the <a class="link" href="smb.conf.5.html#UNIXCHARSET">unix charset</a> parameter.  <a class="link" href="unicode.html#japancharsets" title="Table 30.1. Japanese Character Sets in Samba-2.2 and Samba-3">Japanese Character Sets in Samba-2.2 and Samba-3</a>
 shows the mapping table when migrating from the Samba-2.2 series to Samba-3.
-</p><div class="table"><a name="japancharsets"></a><p class="title"><b>Table 30.1. Japanese Character Sets in Samba-2.2 and Samba-3</b></p><div class="table-contents"><table summary="Japanese Character Sets in Samba-2.2 and Samba-3" border="1"><colgroup><col align="center"><col align="center"></colgroup><thead><tr><th align="center">Samba-2.2 Coding System</th><th align="center">Samba-3 unix charset</th></tr></thead><tbody><tr><td align="center">SJIS</td><td align="center">Shift_JIS series</td></tr><tr><td align="center">EUC</td><td align="center">EUC-JP series</td></tr><tr><td align="center">EUC3<sup>[<a name="id2693541" href="#ftn.id2693541" class="footnote">a</a>]</sup></td><td align="center">EUC-JP series</td></tr><tr><td align="center">CAP</td><td align="center">Shift_JIS series + VFS</td></tr><tr><td align="center">HEX</td><td align="center">currently none</td></tr><tr><td align="center">UTF8</td><td align="center">UTF-8</td></tr><tr><td align="center">UTF8-Mac<sup>[<a name="id2693572" href="#ftn.id2693572" class="footnote">b</a>]</sup></td><td align="center">currently none</td></tr><tr><td align="center">others</td><td align="center">none</td></tr></tbody><tbody class="footnotes"><tr><td colspan="2"><div class="footnote"><p><sup>[<a name="ftn.id2693541" href="#id2693541" class="para">a</a>] </sup>Only exists in Japanese Samba version</p></div><div class="footnote"><p><sup>[<a name="ftn.id2693572" href="#id2693572" class="para">b</a>] </sup>Only exists in Japanese Samba version</p></div></td></tr></tbody></table></div></div><br class="table-break"></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2693591"></a>Common Errors</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2693597"></a>CP850.so Can't Be Found</h3></div></div></div><p>&#8220;<span class="quote">Samba is complaining about a missing <code class="filename">CP850.so</code> file.</span>&#8221;</p><p>
+</p><div class="table"><a name="japancharsets"></a><p class="title"><b>Table 30.1. Japanese Character Sets in Samba-2.2 and Samba-3</b></p><div class="table-contents"><table summary="Japanese Character Sets in Samba-2.2 and Samba-3" border="1"><colgroup><col align="center"><col align="center"></colgroup><thead><tr><th align="center">Samba-2.2 Coding System</th><th align="center">Samba-3 unix charset</th></tr></thead><tbody><tr><td align="center">SJIS</td><td align="center">Shift_JIS series</td></tr><tr><td align="center">EUC</td><td align="center">EUC-JP series</td></tr><tr><td align="center">EUC3<sup>[<a name="id451429" href="#ftn.id451429" class="footnote">a</a>]</sup></td><td align="center">EUC-JP series</td></tr><tr><td align="center">CAP</td><td align="center">Shift_JIS series + VFS</td></tr><tr><td align="center">HEX</td><td align="center">currently none</td></tr><tr><td align="center">UTF8</td><td align="center">UTF-8</td></tr><tr><td align="center">UTF8-Mac<sup>[<a name="id451460" href="#ftn.id451460" class="footnote">b</a>]</sup></td><td align="center">currently none</td></tr><tr><td align="center">others</td><td align="center">none</td></tr></tbody><tbody class="footnotes"><tr><td colspan="2"><div class="footnote"><p><sup>[<a name="ftn.id451429" href="#id451429" class="para">a</a>] </sup>Only exists in Japanese Samba version</p></div><div class="footnote"><p><sup>[<a name="ftn.id451460" href="#id451460" class="para">b</a>] </sup>Only exists in Japanese Samba version</p></div></td></tr></tbody></table></div></div><br class="table-break"></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id451479"></a>Common Errors</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id451484"></a>CP850.so Can't Be Found</h3></div></div></div><p>&#8220;<span class="quote">Samba is complaining about a missing <code class="filename">CP850.so</code> file.</span>&#8221;</p><p>
 		CP850 is the default <a class="link" href="smb.conf.5.html#DOSCHARSET">dos charset</a>.
 		The <a class="link" href="smb.conf.5.html#DOSCHARSET">dos charset</a> is used to convert data to the codepage used by your DOS clients.
 		If you do not have any DOS clients, you can safely ignore this message. </p><p>

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/upgrading-to-3.0.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/upgrading-to-3.0.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/upgrading-to-3.0.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,8 +1,8 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 35. Updating and Upgrading Samba</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="migration.html" title="Part IV. Migration and Updating"><link rel="prev" href="migration.html" title="Part IV. Migration and Updating"><link rel="next" href="NT4Migration.html" title="Chapter 36. Migration from NT4 PDC to Samba-3 PDC"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 35. Updating and Upgrading Samba</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="migration.html">Prev</a> </td><th width="60%" align="center">Part IV. Migration and Updating</th><td width="20%" align="right"> <a accesskey="n" href="NT4Migration.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="upgrading-to-3.0"></a>Chapter 35. Updating and Upgrading Samba</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Gerald</span> <span class="othername">(Jerry)</span> <span class="surname">Carter</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jerry at samba.org">jerry at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">August 16, 2007</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="upgrading-to-3.0.html#id2698533">Key Update Requirements</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrading-to-3.0.html#id2698561">Upgrading from Samba-3.0.x to Samba-3.2.0</a></span></dt><dt><span class="sect2"><a href="upgrading-to-3.0.html#oldupdatenotes">Upgrading from Samba-2.x to Samba-3.0.25</a></span></dt><dt><span class="sect2"><a href="upgrading-to-3.0.html#id2698610">Quick Migration Guide</a></span></dt></dl></dd><dt><span class="sect1"><a href="upgrading-to-3.0.html#id2698762">New Featuers in Samba-3.x Series</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrading-to-3.0.html#id2698771">New Features in Samba-3.2.x Series</a></span></dt><dt><span class="sect2"><a href="upgrading-to-3.0.html#id2698781">New Features in Samba-3.0.x</a></span></dt><dt><span class="sect2"><a href="upgrading-to-3.0.html#id2699981">New Functionality</a></span></dt></dl></dd></dl></div><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 35. Updating and Upgrading Samba</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="migration.html" title="Part IV. Migration and Updating"><link rel="prev" href="migration.html" title="Part IV. Migration and Updating"><link rel="next" href="NT4Migration.html" title="Chapter 36. Migration from NT4 PDC to Samba-3 PDC"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 35. Updating and Upgrading Samba</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="migration.html">Prev</a> </td><th width="60%" align="center">Part IV. Migration and Updating</th><td width="20%" align="right"> <a accesskey="n" href="NT4Migration.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="upgrading-to-3.0"></a>Chapter 35. Updating and Upgrading Samba</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Gerald</span> <span class="othername">(Jerry)</span> <span class="surname">Carter</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jerry at samba.org">jerry at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">August 16, 2007</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="upgrading-to-3.0.html#id456137">Key Update Requirements</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrading-to-3.0.html#id456157">Upgrading from Samba-3.0.x to Samba-3.2.0</a></span></dt><dt><span class="sect2"><a href="upgrading-to-3.0.html#oldupdatenotes">Upgrading from Samba-2.x to Samba-3.0.25</a></span></dt><dt><span class="sect2"><a href="upgrading-to-3.0.html#id456203">Quick Migration Guide</a></span></dt></dl></dd><dt><span class="sect1"><a href="upgrading-to-3.0.html#id456340">New Featuers in Samba-3.x Series</a></span></dt><dd><dl><dt><span class="sect2"><a href="upgrading-to-3.0.html#id456349">New Features in Samba-3.2.x Series</a></span></dt><dt><span class="sect2"><a href="upgrading-to-3.0.html#id456359">New Features in Samba-3.0.x</a></span></dt><dt><span class="sect2"><a href="upgrading-to-3.0.html#id457510">New Functionality</a></span></dt></dl></dd></dl></div><p>
 This chapter provides a detailed record of changes made during the 3.x series releases. At this time this
 series consists of the 3.0.x series that is under the GNU GPL version 2 license, and the Samba 3.2.x series
 that is being released under the terms of the GNU GPL version 3 license.
-</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2698533"></a>Key Update Requirements</h2></div></div></div><p>
+</p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id456137"></a>Key Update Requirements</h2></div></div></div><p>
 Samba is a fluid product in which there may be significant changes between releases. Some of these changes are
 brought about as a result of changes in the protocols that are used by Microsoft Windows network clients as a
 result of security or functionality updates through official Microsoft patches and updates. Samba must track
@@ -13,113 +13,113 @@
 3.0.23 affect all releases up to an including 3.0.25 and later.  Samba 3.2.x was originaly cut from Samba
 3.0.25 before 3.2.0-specific changes were applied. Unless a 3.0.x series feature is specifically revoked, the
 behavior of the 3.2.x series can be expected to follow the earlier pattern.
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2698561"></a>Upgrading from Samba-3.0.x to Samba-3.2.0</h3></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id456157"></a>Upgrading from Samba-3.0.x to Samba-3.2.0</h3></div></div></div><p>
 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="oldupdatenotes"></a>Upgrading from Samba-2.x to Samba-3.0.25</h3></div></div></div><p>
-<a class="indexterm" name="id2698584"></a>
-<a class="indexterm" name="id2698591"></a>
-<a class="indexterm" name="id2698598"></a>
+<a class="indexterm" name="id456178"></a>
+<a class="indexterm" name="id456185"></a>
+<a class="indexterm" name="id456192"></a>
 This chapter deals exclusively with the differences between Samba-3.0.25 and Samba-2.2.8a.
 It points out where configuration parameters have changed, and provides a simple guide for
 the move from 2.2.x to 3.0.25.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2698610"></a>Quick Migration Guide</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id456203"></a>Quick Migration Guide</h3></div></div></div><p>
 Samba-3.0.25 default behavior should be approximately the same as Samba-2.2.x.
 The default behavior when the new parameter <a class="link" href="smb.conf.5.html#PASSDBBACKEND">passdb backend</a>
 is not defined in the <code class="filename">smb.conf</code> file provides the same default behavior as Samba-2.2.x
 with <a class="link" href="smb.conf.5.html#ENCRYPTPASSWORDS">encrypt passwords = Yes</a> and
 will use the <code class="filename">smbpasswd</code> database.
 </p><p>
-<a class="indexterm" name="id2698661"></a>
-<a class="indexterm" name="id2698668"></a>
+<a class="indexterm" name="id456248"></a>
+<a class="indexterm" name="id456255"></a>
 So why say that <span class="emphasis"><em>behavior should be approximately the same as Samba-2.2.x</em></span>? Because
 Samba-3.0.25 can negotiate new protocols, such as support for native Unicode, that may result in
 differing protocol code paths being taken. The new behavior under such circumstances is not
 exactly the same as the old one. The good news is that the domain and machine SIDs will be
 preserved across the upgrade.
 </p><p>
-<a class="indexterm" name="id2698688"></a>
-<a class="indexterm" name="id2698695"></a>
-<a class="indexterm" name="id2698702"></a>
-<a class="indexterm" name="id2698709"></a>
+<a class="indexterm" name="id456272"></a>
+<a class="indexterm" name="id456279"></a>
+<a class="indexterm" name="id456286"></a>
+<a class="indexterm" name="id456292"></a>
 If the Samba-2.2.x system is using an LDAP backend, and there is no time to update the LDAP
 database, then make sure that <a class="link" href="smb.conf.5.html#PASSDBBACKEND">passdb backend = ldapsam_compat</a>
 is specified in the <code class="filename">smb.conf</code> file. For the rest, behavior should remain more or less the same.
 At a later date, when there is time to implement a new Samba-3-compatible LDAP backend, it is possible
 to migrate the old LDAP database to the new one through use of the <code class="literal">pdbedit</code>.
 See <a class="link" href="passdb.html#pdbeditthing" title="The pdbedit Tool">The <span class="emphasis"><em>pdbedit</em></span> Command</a>.
-</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2698762"></a>New Featuers in Samba-3.x Series</h2></div></div></div><p>
-</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2698771"></a>New Features in Samba-3.2.x Series</h3></div></div></div><p>
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2698781"></a>New Features in Samba-3.0.x</h3></div></div></div><p>
+</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id456340"></a>New Featuers in Samba-3.x Series</h2></div></div></div><p>
+</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id456349"></a>New Features in Samba-3.2.x Series</h3></div></div></div><p>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id456359"></a>New Features in Samba-3.0.x</h3></div></div></div><p>
 The major new features are:
 </p><div class="orderedlist"><ol type="1"><li><p>
-<a class="indexterm" name="id2698803"></a>
-<a class="indexterm" name="id2698809"></a>
+<a class="indexterm" name="id456380"></a>
+<a class="indexterm" name="id456387"></a>
 	Active Directory support. This release is able to join an ADS realm
 	as a member server and authenticate users using LDAP/Kerberos.
 	</p></li><li><p>
-<a class="indexterm" name="id2698823"></a>
-<a class="indexterm" name="id2698829"></a>
+<a class="indexterm" name="id456399"></a>
+<a class="indexterm" name="id456406"></a>
 	Unicode support. Samba will now negotiate Unicode on the wire, and
 	internally there is a much better infrastructure for multibyte
 	and Unicode character sets.
 	</p></li><li><p>
-<a class="indexterm" name="id2698844"></a>
+<a class="indexterm" name="id456418"></a>
 	New authentication system. The internal authentication system has
 	been almost completely rewritten. Most of the changes are internal,
 	but the new authoring system is also very configurable.
 	</p></li><li><p>
-<a class="indexterm" name="id2698858"></a>
+<a class="indexterm" name="id456431"></a>
 	New filename mangling system. The filename mangling system has been
 	completely rewritten. An internal database now stores mangling maps
 	persistently.
 	</p></li><li><p>
-<a class="indexterm" name="id2698872"></a>
+<a class="indexterm" name="id456444"></a>
 	New &#8220;<span class="quote">net</span>&#8221; command. A new &#8220;<span class="quote">net</span>&#8221; command has been added. It is
 	somewhat similar to the &#8220;<span class="quote">net</span>&#8221; command in Windows. Eventually, we
 	plan to replace a bunch of other utilities (such as smbpasswd)
 	with subcommands in &#8220;<span class="quote">net</span>&#8221;.
 	</p></li><li><p>
-<a class="indexterm" name="id2698900"></a>
+<a class="indexterm" name="id456470"></a>
 	Samba now negotiates NT-style status32 codes on the wire. This
 	considerably improves error handling.
 	</p></li><li><p>
-<a class="indexterm" name="id2698913"></a>
+<a class="indexterm" name="id456482"></a>
 	Better Windows 200x/XP printing support, including publishing
 	printer attributes in Active Directory.
 	</p></li><li><p>
-<a class="indexterm" name="id2698926"></a>
-<a class="indexterm" name="id2698933"></a>
-<a class="indexterm" name="id2698940"></a>
+<a class="indexterm" name="id456494"></a>
+<a class="indexterm" name="id456501"></a>
+<a class="indexterm" name="id456508"></a>
 	New loadable RPC modules for passdb backends and character sets.
 	</p></li><li><p>
-<a class="indexterm" name="id2698952"></a>
+<a class="indexterm" name="id456520"></a>
 	New default dual-daemon winbindd support for better performance.
 	</p></li><li><p>
-<a class="indexterm" name="id2698965"></a>
-<a class="indexterm" name="id2698972"></a>
-<a class="indexterm" name="id2698979"></a>
+<a class="indexterm" name="id456532"></a>
+<a class="indexterm" name="id456538"></a>
+<a class="indexterm" name="id456545"></a>
 	Support for migrating from a Windows NT 4.0 domain to a Samba
 	domain and maintaining user, group, and domain SIDs.
 	</p></li><li><p>
-<a class="indexterm" name="id2698992"></a>
-<a class="indexterm" name="id2698999"></a>
+<a class="indexterm" name="id456557"></a>
+<a class="indexterm" name="id456564"></a>
 	Support for establishing trust relationships with Windows NT 4.0
 	domain controllers.
 	</p></li><li><p>
-<a class="indexterm" name="id2699012"></a>
-<a class="indexterm" name="id2699019"></a>
-<a class="indexterm" name="id2699026"></a>
+<a class="indexterm" name="id456576"></a>
+<a class="indexterm" name="id456583"></a>
+<a class="indexterm" name="id456589"></a>
 	Initial support for a distributed Winbind architecture using
 	an LDAP directory for storing SID to UID/GID mappings.
 	</p></li><li><p>
 	Major updates to the Samba documentation tree.
 	</p></li><li><p>
-<a class="indexterm" name="id2699044"></a>
-<a class="indexterm" name="id2699051"></a>
+<a class="indexterm" name="id456606"></a>
+<a class="indexterm" name="id456613"></a>
 	Full support for client and server SMB signing to ensure
 	compatibility with default Windows 2003 security settings.
 	</p></li></ol></div><p>
 Plus lots of other improvements!
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2699066"></a>Configuration Parameter Changes</h4></div></div></div><p>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id456627"></a>Configuration Parameter Changes</h4></div></div></div><p>
 This section contains a brief listing of changes to <code class="filename">smb.conf</code> options since the Samba-2.2.x series up to and
 including Samba-3.0.25.
 </p><p>
@@ -130,83 +130,83 @@
 <span class="emphasis"><em>WHATSNEW.txt</em></span> that is part of the Samba distribution tarball. This file may also
 be obtain on-line from the Samba <a class="ulink" href="http://www.samba.org/samba/" target="_top">web site</a>, in
 the right column, under Current Stable Release, by clicking on <span class="emphasis"><em>Release Notes</em></span>.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2699110"></a>Removed Parameters</h4></div></div></div><a class="indexterm" name="id2699116"></a><p>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id456667"></a>Removed Parameters</h4></div></div></div><a class="indexterm" name="id456672"></a><p>
 In alphabetical order, these are the parameters eliminated from Samba-2.2.x through 3.0.25.
-</p><div class="itemizedlist"><ul type="disc"><li><p>admin log</p></li><li><p>alternate permissions</p></li><li><p>character set</p></li><li><p>client codepage</p></li><li><p>code page directory</p></li><li><p>coding system</p></li><li><p>domain admin group</p></li><li><p>domain guest group</p></li><li><p>enable rid algorithm</p></li><li><p>enable svcctl</p></li><li><p>force unknown acl user</p></li><li><p>hosts equiv</p></li><li><p>ldap filter</p></li><li><p>min password length</p></li><li><p>nt smb support</p></li><li><p>post script</p></li><li><p>printer admin</p></li><li><p>printer driver</p></li><li><p>printer driver file</p></li><li><p>printer driver location</p></li><li><p>read size</p></li><li><p>source environment</p></li><li><p>status </p></li><li><p>strip dot </p></li><li><p>total print jobs</p></li><li><p>unicode</p></li><li><p>use rhosts</p></li><li><p>valid chars</p></li><li><p>vfs options</p></li><li><p>winbind enable local accounts</p></li><li><p>winbind max idle children</p></li><li><p>wins partners</p></li></ul></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2699281"></a>New Parameters</h4></div></div></div><p>The following new parameters have been released up to and including Samba 3.0.25 (grouped by function:)</p><p>Remote Management</p><a class="indexterm" name="id2699296"></a><div class="itemizedlist"><ul type="disc"><li><p>abort shutdown script</p></li><li><p>shutdown script</p></li></ul></div><p>User and Group Account Management</p><div class="itemizedlist"><ul type="disc"><li><p>add group script</p></li><li><p>add machine script</p></li><li><p>add user to group script</p></li><li><p>algorithmic rid base</p></li><li><p>delete group script</p></li><li><p>delete user from group script</p></li><li><p>passdb backend</p></li><li><p>rename user script</p></li><li><p>set primary group script</p></li><li><p>username map script</p></li></ul></div><p>Authentication</p><div class="itemizedlist"><ul type="disc"><li><p>auth methods</p></li><li><p>ldap password sync</p></li><li><p>passdb expand explicit</p></li><li><p>realm</p></li></ul></div><p>Protocol Options</p><div class="itemizedlist"><ul type="disc"><li><p>add port command</p></li><li><p>afs token lifetime</p></li><li><p>client lanman auth</p></li><li><p>client NTLMv2 auth</p></li><li><p>client schannel</p></li><li><p>client signing</p></li><li><p>client use spnego</p></li><li><p>defer sharing violations</p></li><li><p>disable netbios</p></li><li><p>dmapi support</p></li><li><p>enable privileges</p></li><li><p>use kerberos keytab</p></li><li><p>log nt token command</p></li><li><p>ntlm auth</p></li><li><p>paranoid server security </p></li><li><p>sendfile</p></li><li><p>server schannel</p></li><li><p>server signing</p></li><li><p>smb ports</p></li><li><p>svcctl list</p></li><li><p>use spnego</p></li></ul></div><p>File Service</p><div class="itemizedlist"><ul type="disc"><li><p>allocation roundup size</p></li><li><p>acl check permissions</p></li><li><p>acl group control</p></li><li><p>acl map full control</p></li><li><p>aio read size</p></li><li><p>aio write size</p></li><li><p>dfree cache time</p></li><li><p>dfree command</p></li><li><p>ea support</p></li><li><p>enable asu support</p></li><li><p>fam change notify</p></li><li><p>force unknown acl user</p></li><li><p>get quota command</p></li><li><p>hide special files</p></li><li><p>hide unwriteable files</p></li><li><p>inherit owner</p></li><li><p>hostname lookups</p></li><li><p>kernel change notify</p></li><li><p>mangle prefix</p></li><li><p>map acl inherit</p></li><li><p>map read only</p></li><li><p>max stat cache size</p></li><li><p>msdfs proxy</p></li><li><p>open files database hash size</p></li><li><p>set quota command</p></li><li><p>store dos attributes</p></li><li><p>use sendfile</p></li><li><p>usershare allow guests</p></li><li><p>usershare max shares</p></li><li><p>usershare owner only</p></li><li><p>usershare path</p></li><li><p>usershare prefix allow list</p></li><li><p>usershare prefix deny list</p></li><li><p>usershare template share</p></li><li><p>vfs objects</p></li></ul></div><p>Printing</p><div class="itemizedlist"><ul type="disc"><li><p>cups options</p></li><li><p>cups server</p></li><li><p>force printername</p></li><li><p>iprint server</p></li><li><p>max reported print jobs</p></li><li><p>printcap cache time</p></li></ul></div><p>Unicode and Character Sets</p><div class="itemizedlist"><ul type="disc"><li><p>display charset</p></li><li><p>dos charset</p></li><li><p>UNIX charset</p></li></ul></div><p>SID to UID/GID Mappings</p><div class="itemizedlist"><ul type="disc"><li><p>idmap backend</p></li><li><p>idmap gid</p></li><li><p>idmap uid</p></li><li><p>username map script</p></li><li><p>winbind nss info</p></li><li><p>winbind offline logon</p></li><li><p>winbind refresh tickets</p></li><li><p>winbind trusted domains only</p></li><li><p>template primary group</p></li></ul></div><p>LDAP</p><div class="itemizedlist"><ul type="disc"><li><p>ldap delete dn</p></li><li><p>ldap group suffix</p></li><li><p>ldap idmap suffix</p></li><li><p>ldap machine suffix</p></li><li><p>ldap passwd sync</p></li><li><p>ldap replication sleep</p></li><li><p>ldap timeout</p></li><li><p>ldap user suffix</p></li></ul></div><p>General Configuration</p><div class="itemizedlist"><ul type="disc"><li><p>eventlog list</p></li><li><p>preload modules</p></li><li><p>reset on zero vc</p></li><li><p>privatedir</p></li></ul></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2699846"></a>Modified Parameters (Changes in Behavior)</h4></div></div></div><div class="itemizedlist"><ul type="disc"><li><p>acl group control (new default is No, deprecated parameter)</p></li><li><p>change notify timeout (scope changed)</p></li><li><p>dos filemode (disabled by default)</p></li><li><p>dos filetimes (enabled by default)</p></li><li><p>enable asu support (disabled by default)</p></li><li><p>enable privileges (enabled by default)</p></li><li><p>encrypt passwords (enabled by default) </p></li><li><p>host msdfs (enabled by default)</p></li><li><p>mangling method (set to hash2 by default) </p></li><li><p>map to guest</p></li><li><p>only user (deprecated)</p></li><li><p>passwd chat</p></li><li><p>passwd program</p></li><li><p>password server</p></li><li><p>restrict anonymous (integer value)</p></li><li><p>security (new ads value)</p></li><li><p>strict locking (auto by default)</p></li><li><p>winbind cache time (increased to 5 minutes)</p></li><li><p>winbind enum groups (disabled by default)</p></li><li><p>winbind enum users (disabled by default)</p></li><li><p>winbind nested groups (enabled by default)</p></li><li><p>winbind uid (deprecated in favor of idmap uid)</p></li><li><p>winbind gid (deprecated in favor of idmap gid)</p></li><li><p>winbindd nss info</p></li><li><p>write cache (deprecated)</p></li></ul></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2699981"></a>New Functionality</h3></div></div></div><p>
-<a class="indexterm" name="id2699989"></a>
+</p><div class="itemizedlist"><ul type="disc"><li><p>admin log</p></li><li><p>alternate permissions</p></li><li><p>character set</p></li><li><p>client codepage</p></li><li><p>code page directory</p></li><li><p>coding system</p></li><li><p>domain admin group</p></li><li><p>domain guest group</p></li><li><p>enable rid algorithm</p></li><li><p>enable svcctl</p></li><li><p>force unknown acl user</p></li><li><p>hosts equiv</p></li><li><p>ldap filter</p></li><li><p>min password length</p></li><li><p>nt smb support</p></li><li><p>post script</p></li><li><p>printer admin</p></li><li><p>printer driver</p></li><li><p>printer driver file</p></li><li><p>printer driver location</p></li><li><p>read size</p></li><li><p>source environment</p></li><li><p>status </p></li><li><p>strip dot </p></li><li><p>total print jobs</p></li><li><p>unicode</p></li><li><p>use rhosts</p></li><li><p>valid chars</p></li><li><p>vfs options</p></li><li><p>winbind enable local accounts</p></li><li><p>winbind max idle children</p></li><li><p>wins partners</p></li></ul></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id456833"></a>New Parameters</h4></div></div></div><p>The following new parameters have been released up to and including Samba 3.0.25 (grouped by function:)</p><p>Remote Management</p><a class="indexterm" name="id456846"></a><div class="itemizedlist"><ul type="disc"><li><p>abort shutdown script</p></li><li><p>shutdown script</p></li></ul></div><p>User and Group Account Management</p><div class="itemizedlist"><ul type="disc"><li><p>add group script</p></li><li><p>add machine script</p></li><li><p>add user to group script</p></li><li><p>algorithmic rid base</p></li><li><p>delete group script</p></li><li><p>delete user from group script</p></li><li><p>passdb backend</p></li><li><p>rename user script</p></li><li><p>set primary group script</p></li><li><p>username map script</p></li></ul></div><p>Authentication</p><div class="itemizedlist"><ul type="disc"><li><p>auth methods</p></li><li><p>ldap password sync</p></li><li><p>passdb expand explicit</p></li><li><p>realm</p></li></ul></div><p>Protocol Options</p><div class="itemizedlist"><ul type="disc"><li><p>add port command</p></li><li><p>afs token lifetime</p></li><li><p>client lanman auth</p></li><li><p>client NTLMv2 auth</p></li><li><p>client schannel</p></li><li><p>client signing</p></li><li><p>client use spnego</p></li><li><p>defer sharing violations</p></li><li><p>disable netbios</p></li><li><p>dmapi support</p></li><li><p>enable privileges</p></li><li><p>use kerberos keytab</p></li><li><p>log nt token command</p></li><li><p>ntlm auth</p></li><li><p>paranoid server security </p></li><li><p>sendfile</p></li><li><p>server schannel</p></li><li><p>server signing</p></li><li><p>smb ports</p></li><li><p>svcctl list</p></li><li><p>use spnego</p></li></ul></div><p>File Service</p><div class="itemizedlist"><ul type="disc"><li><p>allocation roundup size</p></li><li><p>acl check permissions</p></li><li><p>acl group control</p></li><li><p>acl map full control</p></li><li><p>aio read size</p></li><li><p>aio write size</p></li><li><p>dfree cache time</p></li><li><p>dfree command</p></li><li><p>ea support</p></li><li><p>enable asu support</p></li><li><p>fam change notify</p></li><li><p>force unknown acl user</p></li><li><p>get quota command</p></li><li><p>hide special files</p></li><li><p>hide unwriteable files</p></li><li><p>inherit owner</p></li><li><p>hostname lookups</p></li><li><p>kernel change notify</p></li><li><p>mangle prefix</p></li><li><p>map acl inherit</p></li><li><p>map read only</p></li><li><p>max stat cache size</p></li><li><p>msdfs proxy</p></li><li><p>open files database hash size</p></li><li><p>set quota command</p></li><li><p>store dos attributes</p></li><li><p>use sendfile</p></li><li><p>usershare allow guests</p></li><li><p>usershare max shares</p></li><li><p>usershare owner only</p></li><li><p>usershare path</p></li><li><p>usershare prefix allow list</p></li><li><p>usershare prefix deny list</p></li><li><p>usershare template share</p></li><li><p>vfs objects</p></li></ul></div><p>Printing</p><div class="itemizedlist"><ul type="disc"><li><p>cups options</p></li><li><p>cups server</p></li><li><p>force printername</p></li><li><p>iprint server</p></li><li><p>max reported print jobs</p></li><li><p>printcap cache time</p></li></ul></div><p>Unicode and Character Sets</p><div class="itemizedlist"><ul type="disc"><li><p>display charset</p></li><li><p>dos charset</p></li><li><p>UNIX charset</p></li></ul></div><p>SID to UID/GID Mappings</p><div class="itemizedlist"><ul type="disc"><li><p>idmap backend</p></li><li><p>idmap gid</p></li><li><p>idmap uid</p></li><li><p>username map script</p></li><li><p>winbind nss info</p></li><li><p>winbind offline logon</p></li><li><p>winbind refresh tickets</p></li><li><p>winbind trusted domains only</p></li><li><p>template primary group</p></li></ul></div><p>LDAP</p><div class="itemizedlist"><ul type="disc"><li><p>ldap delete dn</p></li><li><p>ldap group suffix</p></li><li><p>ldap idmap suffix</p></li><li><p>ldap machine suffix</p></li><li><p>ldap passwd sync</p></li><li><p>ldap replication sleep</p></li><li><p>ldap timeout</p></li><li><p>ldap user suffix</p></li></ul></div><p>General Configuration</p><div class="itemizedlist"><ul type="disc"><li><p>eventlog list</p></li><li><p>preload modules</p></li><li><p>reset on zero vc</p></li><li><p>privatedir</p></li></ul></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id457381"></a>Modified Parameters (Changes in Behavior)</h4></div></div></div><div class="itemizedlist"><ul type="disc"><li><p>acl group control (new default is No, deprecated parameter)</p></li><li><p>change notify timeout (scope changed)</p></li><li><p>dos filemode (disabled by default)</p></li><li><p>dos filetimes (enabled by default)</p></li><li><p>enable asu support (disabled by default)</p></li><li><p>enable privileges (enabled by default)</p></li><li><p>encrypt passwords (enabled by default) </p></li><li><p>host msdfs (enabled by default)</p></li><li><p>mangling method (set to hash2 by default) </p></li><li><p>map to guest</p></li><li><p>only user (deprecated)</p></li><li><p>passwd chat</p></li><li><p>passwd program</p></li><li><p>password server</p></li><li><p>restrict anonymous (integer value)</p></li><li><p>security (new ads value)</p></li><li><p>strict locking (auto by default)</p></li><li><p>winbind cache time (increased to 5 minutes)</p></li><li><p>winbind enum groups (disabled by default)</p></li><li><p>winbind enum users (disabled by default)</p></li><li><p>winbind nested groups (enabled by default)</p></li><li><p>winbind uid (deprecated in favor of idmap uid)</p></li><li><p>winbind gid (deprecated in favor of idmap gid)</p></li><li><p>winbindd nss info</p></li><li><p>write cache (deprecated)</p></li></ul></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id457510"></a>New Functionality</h3></div></div></div><p>
+<a class="indexterm" name="id457517"></a>
 	The major changes in behavior since that Samba-2.2.x series are documented in this section.
 	Please refer to the <code class="filename">WHATSNEW.txt</code> file that ships with every release of
 	Samba to obtain detailed information regarding the changes that have been made during the
 	life of the current Samba release.
-	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2700008"></a>TDB Data Files</h4></div></div></div><a class="indexterm" name="id2700013"></a><p>
+	</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id457533"></a>TDB Data Files</h4></div></div></div><a class="indexterm" name="id457539"></a><p>
 	Refer to <a class="link" href="install.html" title="Chapter 1. How to Install and Test SAMBA">Installation, Chapter 1</a>, <a class="link" href="install.html#tdbdocs" title="TDB Database File Information">Chapter 1</a>
 	for information pertaining to the Samba-3 data files, their location and the information that must be
 	preserved across server migrations, updates and upgrades.
 	</p><p>
-<a class="indexterm" name="id2700044"></a>
+<a class="indexterm" name="id457567"></a>
 	Please remember to back up your existing ${lock directory}/*tdb before upgrading to Samba-3. If necessary,
 	Samba will upgrade databases as they are opened. Downgrading from Samba-3 to 2.2, or reversion to an earlier
 	version of Samba-3 from a later release, is an unsupported path.
 	</p><p>
-<a class="indexterm" name="id2700059"></a>
+<a class="indexterm" name="id457579"></a>
 	The old Samba-2.2.x tdb files are described in <a class="link" href="upgrading-to-3.0.html#oldtdbfiledesc" title="Table 35.1. Samba-2.2.x TDB File Descriptions">the next table</a>.
 	</p><div class="table"><a name="oldtdbfiledesc"></a><p class="title"><b>Table 35.1. Samba-2.2.x TDB File Descriptions</b></p><div class="table-contents"><table summary="Samba-2.2.x TDB File Descriptions" border="1"><colgroup><col align="left"><col align="justify"><col align="left"></colgroup><thead><tr><th align="left">Name</th><th align="justify">Description</th><th align="center">Backup?</th></tr></thead><tbody><tr><td align="left">account_policy</td><td align="justify">User policy settings</td><td align="left">yes</td></tr><tr><td align="left">brlock</td><td align="justify">Byte-range file locking information.</td><td align="left">no</td></tr><tr><td align="left">connections</td><td align="justify"><p>Client connection information</p></td><td align="left">no</td></tr><tr><td align="left">locking</td><td align="justify">Temporary file locking data.</td><td align="left">no</td></tr><tr><td align="left">messages</td><td align="justify"><p>Temporary storage of messages being processed by smbd.</p></td><td align="left">no</td></tr><tr><td align="left">ntdrivers</td><td align="justify"><p>Stores per-printer driver information.</p></td><td align="left">yes</td></tr><tr><td align="left">ntforms</td><td align="justify"><p>Stores per-printer forms information.</p></td><td align="left">yes</td></tr><tr><td align="left">ntprinters</td><td align="justify"><p>Stores the per-printer devmode configuration settings.</p></td><td align="left">yes</td></tr><tr><td align="left">printing/*.tdb</td><td align="justify"><p>Cached output from lpq command created on a per-print-service basis.</p></td><td align="left">no</td></tr><tr><td align="left">registry</td><td align="justify"><p>Read-only Samba registry skeleton that provides support for
-				exporting various database tables via the winreg RPCs.</p></td><td align="left">no</td></tr><tr><td align="left">sessionid</td><td align="justify"><p>Temporary cache for miscellaneous session information.</p></td><td align="left">no</td></tr><tr><td align="left">share_info</td><td align="justify">Share ACL settings.</td><td align="left">yes</td></tr><tr><td align="left">unexpected</td><td align="justify"><p>Packets received for which no process was listening.</p></td><td align="left">no</td></tr><tr><td align="left">winbindd_cache</td><td align="justify"><p>Cache of identity information received from an NT4 or an ADS domain.</p></td><td align="left">yes</td></tr><tr><td align="left">winbindd_idmap</td><td align="justify"><p>New ID map table from SIDS to UNIX UIDs/GIDs.</p></td><td align="left">yes</td></tr></tbody></table></div></div><br class="table-break"></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2700359"></a>Changes in Behavior</h4></div></div></div><p>
+				exporting various database tables via the winreg RPCs.</p></td><td align="left">no</td></tr><tr><td align="left">sessionid</td><td align="justify"><p>Temporary cache for miscellaneous session information.</p></td><td align="left">no</td></tr><tr><td align="left">share_info</td><td align="justify">Share ACL settings.</td><td align="left">yes</td></tr><tr><td align="left">unexpected</td><td align="justify"><p>Packets received for which no process was listening.</p></td><td align="left">no</td></tr><tr><td align="left">winbindd_cache</td><td align="justify"><p>Cache of identity information received from an NT4 or an ADS domain.</p></td><td align="left">yes</td></tr><tr><td align="left">winbindd_idmap</td><td align="justify"><p>New ID map table from SIDS to UNIX UIDs/GIDs.</p></td><td align="left">yes</td></tr></tbody></table></div></div><br class="table-break"></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id457871"></a>Changes in Behavior</h4></div></div></div><p>
 	The following issues are known changes in behavior between Samba-2.2 and
 	Samba-3 that may affect certain installations of Samba.
 	</p><div class="orderedlist"><ol type="1"><li><p>
-<a class="indexterm" name="id2700380"></a>
-<a class="indexterm" name="id2700387"></a>
-<a class="indexterm" name="id2700394"></a>
+<a class="indexterm" name="id457890"></a>
+<a class="indexterm" name="id457897"></a>
+<a class="indexterm" name="id457904"></a>
 		When operating as a member of a Windows domain, Samba-2.2 would map any users authenticated by the remote DC
 		to the &#8220;<span class="quote">guest account</span>&#8221; if a UID could not be obtained via the getpwnam() call. Samba-3 rejects
 		the connection with the error message &#8220;<span class="quote">NT_STATUS_LOGON_FAILURE.</span>&#8221; There is no current workaround
 		to re-establish the Samba-2.2 behavior.
 		</p></li><li><p>
-<a class="indexterm" name="id2700419"></a>
-<a class="indexterm" name="id2700426"></a>
+<a class="indexterm" name="id457925"></a>
+<a class="indexterm" name="id457932"></a>
 		When adding machines to a Samba-2.2 controlled domain, the
 		&#8220;<span class="quote">add user script</span>&#8221; was used to create the UNIX identity of the
 		machine trust account. Samba-3 introduces a new &#8220;<span class="quote">add machine
 		script</span>&#8221; that must be specified for this purpose. Samba-3 will
 		not fall back to using the &#8220;<span class="quote">add user script</span>&#8221; in the absence of
 		an &#8220;<span class="quote">add machine script</span>&#8221;.
-		</p></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2700456"></a>Passdb Backends and Authentication</h4></div></div></div><p>
+		</p></li></ol></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id457959"></a>Passdb Backends and Authentication</h4></div></div></div><p>
 	There have been a few new changes that Samba administrators should be
 	aware of when moving to Samba-3.
 	</p><div class="orderedlist"><ol type="1"><li><p>
-<a class="indexterm" name="id2700476"></a>
+<a class="indexterm" name="id457979"></a>
 		Encrypted passwords have been enabled by default in order to
 		interoperate better with out-of-the-box Windows client
 		installations. This does mean that either (a) a Samba account
 		must be created for each user, or (b) &#8220;<span class="quote">encrypt passwords = no</span>&#8221;
 		must be explicitly defined in <code class="filename">smb.conf</code>.
 		</p></li><li><p>
-<a class="indexterm" name="id2700502"></a>
-<a class="indexterm" name="id2700508"></a>
-<a class="indexterm" name="id2700515"></a>
+<a class="indexterm" name="id458002"></a>
+<a class="indexterm" name="id458008"></a>
+<a class="indexterm" name="id458015"></a>
 		Inclusion of new <a class="link" href="smb.conf.5.html#SECURITY">security = ads</a> option for integration
 		with an Active Directory domain using the native Windows Kerberos 5 and LDAP protocols.
 		</p></li></ol></div><p>
-<a class="indexterm" name="id2700541"></a>
+<a class="indexterm" name="id458038"></a>
 	Samba-3 also includes the possibility of setting up chains of authentication methods (<a class="link" href="smb.conf.5.html#AUTHMETHODS">auth methods</a>) and account storage backends (<a class="link" href="smb.conf.5.html#PASSDBBACKEND">passdb backend</a>).  Please refer to
 	the <code class="filename">smb.conf</code> man page and <a class="link" href="passdb.html" title="Chapter 11. Account Information Databases">Account Information Databases</a>, for
 	details. While both parameters assume sane default values, it is likely that you will need to understand what
 	the values actually mean in order to ensure Samba operates correctly.
 	</p><p>
-<a class="indexterm" name="id2700592"></a>
-<a class="indexterm" name="id2700599"></a>
-<a class="indexterm" name="id2700606"></a>
+<a class="indexterm" name="id458085"></a>
+<a class="indexterm" name="id458092"></a>
+<a class="indexterm" name="id458098"></a>
 	Certain functions of the <code class="literal">smbpasswd</code> tool have been split between the
 	new <code class="literal">smbpasswd</code> utility, the <code class="literal">net</code> tool, and the new <code class="literal">pdbedit</code>
 	utility. See the respective man pages for details.
-	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2700640"></a>LDAP</h4></div></div></div><p>
+	</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id458132"></a>LDAP</h4></div></div></div><p>
 	This section outlines the new features effecting Samba/LDAP integration.
-	</p><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id2700650"></a>New Schema</h5></div></div></div><p>
-<a class="indexterm" name="id2700658"></a>
-<a class="indexterm" name="id2700665"></a>
-<a class="indexterm" name="id2700672"></a>
-<a class="indexterm" name="id2700678"></a>
+	</p><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id458141"></a>New Schema</h5></div></div></div><p>
+<a class="indexterm" name="id458149"></a>
+<a class="indexterm" name="id458156"></a>
+<a class="indexterm" name="id458163"></a>
+<a class="indexterm" name="id458170"></a>
 		A new object class (sambaSamAccount) has been introduced to replace
 		the old sambaAccount. This change aids in the renaming of attributes
 		to prevent clashes with attributes from other vendors. There is a
@@ -214,29 +214,29 @@
 		file to the new schema.
 		</p><p>
 		Example:
-<a class="indexterm" name="id2700694"></a>
+<a class="indexterm" name="id458183"></a>
 		</p><pre class="screen">
 		<code class="prompt">$ </code>ldapsearch .... -LLL -b "ou=people,dc=..." &gt; old.ldif
 		<code class="prompt">$ </code>convertSambaAccount --sid &lt;DOM SID&gt; --input old.ldif --output new.ldif
 		</pre><p>
-<a class="indexterm" name="id2700727"></a>
+<a class="indexterm" name="id458213"></a>
 		The &lt;DOM SID&gt; can be obtained by running
 </p><pre class="screen">
 <code class="prompt">$ </code><strong class="userinput"><code>net getlocalsid &lt;DOMAINNAME&gt;</code></strong>
 </pre><p>
-<a class="indexterm" name="id2700753"></a>
+<a class="indexterm" name="id458238"></a>
 		on the Samba PDC as root.
 		</p><p>
 		Under Samba-2.x the domain SID can be obtained by executing:
-<a class="indexterm" name="id2700765"></a>
+<a class="indexterm" name="id458249"></a>
 </p><pre class="screen">
 <code class="prompt">$ </code><strong class="userinput"><code>smbpasswd -S &lt;DOMAINNAME&gt;</code></strong>
 </pre><p>
 		</p><p>
-<a class="indexterm" name="id2700791"></a>
-<a class="indexterm" name="id2700798"></a>
-<a class="indexterm" name="id2700805"></a>
-<a class="indexterm" name="id2700812"></a>
+<a class="indexterm" name="id458275"></a>
+<a class="indexterm" name="id458282"></a>
+<a class="indexterm" name="id458288"></a>
+<a class="indexterm" name="id458295"></a>
 		The old <code class="literal">sambaAccount</code> schema may still be used by specifying the
 		<em class="parameter"><code>ldapsam_compat</code></em> passdb backend. However, the sambaAccount and
 		associated attributes have been moved to the historical section of
@@ -246,53 +246,53 @@
 		</p><p>
 		Other new object classes and their uses include:
 		</p><div class="itemizedlist"><ul type="disc"><li><p>
-<a class="indexterm" name="id2700859"></a>
-<a class="indexterm" name="id2700866"></a>
-<a class="indexterm" name="id2700873"></a>
-<a class="indexterm" name="id2700879"></a>
-<a class="indexterm" name="id2700886"></a>
-<a class="indexterm" name="id2700893"></a>
+<a class="indexterm" name="id458339"></a>
+<a class="indexterm" name="id458346"></a>
+<a class="indexterm" name="id458352"></a>
+<a class="indexterm" name="id458359"></a>
+<a class="indexterm" name="id458366"></a>
+<a class="indexterm" name="id458372"></a>
 			<code class="literal">sambaDomain</code>  domain information used to allocate RIDs
 			for users and groups as necessary. The attributes are added
 			in &#8220;<span class="quote">ldap suffix</span>&#8221; directory entry automatically if
 			an idmap UID/GID range has been set and the &#8220;<span class="quote">ldapsam</span>&#8221;
 			passdb backend has been selected.
 			</p></li><li><p>
-<a class="indexterm" name="id2700923"></a>
-<a class="indexterm" name="id2700930"></a>
-<a class="indexterm" name="id2700937"></a>
+<a class="indexterm" name="id458401"></a>
+<a class="indexterm" name="id458408"></a>
+<a class="indexterm" name="id458415"></a>
 			sambaGroupMapping  an object representing the
 			relationship between a posixGroup and a Windows
 			group/SID. These entries are stored in the &#8220;<span class="quote">ldap
 			group suffix</span>&#8221; and managed by the &#8220;<span class="quote">net groupmap</span>&#8221; command.
 			</p></li><li><p>
-<a class="indexterm" name="id2700962"></a>
-<a class="indexterm" name="id2700969"></a>
-<a class="indexterm" name="id2700976"></a>
-<a class="indexterm" name="id2700983"></a>
+<a class="indexterm" name="id458437"></a>
+<a class="indexterm" name="id458444"></a>
+<a class="indexterm" name="id458451"></a>
+<a class="indexterm" name="id458458"></a>
 			<code class="literal">sambaUNIXIdPool</code>  created in the &#8220;<span class="quote">ldap idmap suffix</span>&#8221; entry
 			automatically and contains the next available &#8220;<span class="quote">idmap UID</span>&#8221; and
 			&#8220;<span class="quote">idmap GID</span>&#8221;.
 			</p></li><li><p>
-<a class="indexterm" name="id2701015"></a>
-<a class="indexterm" name="id2701022"></a>
+<a class="indexterm" name="id458489"></a>
+<a class="indexterm" name="id458496"></a>
 			<code class="literal">sambaIdmapEntry</code>  object storing a mapping between a
 			SID and a UNIX UID/GID. These objects are created by the
 			idmap_ldap module as needed.
-			</p></li></ul></div></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id2701043"></a>New Suffix for Searching</h5></div></div></div><p>
-<a class="indexterm" name="id2701050"></a>
-<a class="indexterm" name="id2701057"></a>
-<a class="indexterm" name="id2701064"></a>
-<a class="indexterm" name="id2701071"></a>
-<a class="indexterm" name="id2701078"></a>
-<a class="indexterm" name="id2701085"></a>
-<a class="indexterm" name="id2701092"></a>
+			</p></li></ul></div></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id458516"></a>New Suffix for Searching</h5></div></div></div><p>
+<a class="indexterm" name="id458523"></a>
+<a class="indexterm" name="id458530"></a>
+<a class="indexterm" name="id458536"></a>
+<a class="indexterm" name="id458543"></a>
+<a class="indexterm" name="id458550"></a>
+<a class="indexterm" name="id458557"></a>
+<a class="indexterm" name="id458564"></a>
 		The following new <code class="filename">smb.conf</code> parameters have been added to aid in directing
 		certain LDAP queries when <em class="parameter"><code>passdb backend = ldapsam://...</code></em> has been
 		specified.
 		</p><div class="itemizedlist"><ul type="disc"><li><p>ldap suffix          used to search for user and computer accounts.</p></li><li><p>ldap user suffix     used to store user accounts.</p></li><li><p>ldap machine suffix  used to store machine trust accounts.</p></li><li><p>ldap group suffix    location of posixGroup/sambaGroupMapping entries.</p></li><li><p>ldap idmap suffix    location of sambaIdmapEntry objects.</p></li></ul></div><p>
-<a class="indexterm" name="id2701161"></a>
-<a class="indexterm" name="id2701167"></a>
+<a class="indexterm" name="id458628"></a>
+<a class="indexterm" name="id458634"></a>
 		If an <em class="parameter"><code>ldap suffix</code></em> is defined, it will be appended to all of the
 		remaining subsuffix parameters. In this case, the order of the suffix
 		listings in <code class="filename">smb.conf</code> is important. Always place the <em class="parameter"><code>ldap suffix</code></em> first
@@ -300,13 +300,13 @@
 		</p><p>
 		Due to a limitation in Samba's <code class="filename">smb.conf</code> parsing, you should not surround
 		the domain names with quotation marks.
-		</p></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id2701208"></a>IdMap LDAP Support</h5></div></div></div><p>
-<a class="indexterm" name="id2701216"></a>
+		</p></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id458672"></a>IdMap LDAP Support</h5></div></div></div><p>
+<a class="indexterm" name="id458680"></a>
 		Samba-3 supports an LDAP backend for the idmap subsystem. The
 		following options inform Samba that the idmap table should be
 		stored on the directory server <span class="emphasis"><em>onterose</em></span> in the ou=Idmap,dc=quenya,dc=org partition.
-		</p><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td>...</td></tr><tr><td><a class="indexterm" name="id2701249"></a><em class="parameter"><code>idmap backend = ldap:ldap://onterose/</code></em></td></tr><tr><td><a class="indexterm" name="id2701261"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr><tr><td><a class="indexterm" name="id2701273"></a><em class="parameter"><code>idmap uid = 40000-50000</code></em></td></tr><tr><td><a class="indexterm" name="id2701285"></a><em class="parameter"><code>idmap gid = 40000-50000</code></em></td></tr></table><p>
-<a class="indexterm" name="id2701299"></a>
+		</p><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td>...</td></tr><tr><td><a class="indexterm" name="id458711"></a><em class="parameter"><code>idmap backend = ldap:ldap://onterose/</code></em></td></tr><tr><td><a class="indexterm" name="id458723"></a><em class="parameter"><code>ldap idmap suffix = ou=Idmap</code></em></td></tr><tr><td><a class="indexterm" name="id458734"></a><em class="parameter"><code>idmap uid = 40000-50000</code></em></td></tr><tr><td><a class="indexterm" name="id458746"></a><em class="parameter"><code>idmap gid = 40000-50000</code></em></td></tr></table><p>
+<a class="indexterm" name="id458759"></a>
 		This configuration allows Winbind installations on multiple servers to
 		share a UID/GID number space, thus avoiding the interoperability problems
 		with NFS that were present in Samba-2.2.

Modified: branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/winbind.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/winbind.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/Samba3-HOWTO/winbind.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,23 +1,23 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 24. Winbind: Use of Domain Accounts</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="VFS.html" title="Chapter 23. Stackable VFS modules"><link rel="next" href="AdvancedNetworkManagement.html" title="Chapter 25. Advanced Network Management"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 24. Winbind: Use of Domain Accounts</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="VFS.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="AdvancedNetworkManagement.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="winbind"></a>Chapter 24. Winbind: Use of Domain Accounts</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Tim</span> <span class="surname">Potter</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:tpot at linuxcare.com.au">tpot at linuxcare.com.au</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Andrew</span> <span class="surname">Tridgell</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:tridge at samba.org">tridge at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Naag</span> <span class="surname">Mummaneni</span></h3><span class="contrib">Notes for Solaris</span> <div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:getnag at rediffmail.com">getnag at rediffmail.com</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="surname">Trostel</span></h3><div class="affiliation"><span class="orgname">SNAP<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jtrostel at snapserver.com">jtrostel at snapserver.com</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">June 15, 2005</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="winbind.html#id2675430">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="winbind.html#id2675773">Introduction</a></span></dt><dt><span class="sect1"><a href="winbind.html#id2675862">What Winbind Provides</a></span></dt><dd><dl><dt><span class="sect2"><a href="winbind.html#id2676016">Target Uses</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2676061">Handling of Foreign SIDs</a></span></dt></dl></dd><dt><span class="sect1"><a href="winbind.html#id2676186">How Winbind Works</a></span></dt><dd><dl><dt><span class="sect2"><a href="winbind.html#id2676237">Microsoft Remote Procedure Calls</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2676324">Microsoft Active Directory Services</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2676371">Name Service Switch</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2676603">Pluggable Authentication Modules</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2676758">User and Group ID Allocation</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2676847">Result Caching</a></span></dt></dl></dd><dt><span class="sect1"><a href="winbind.html#id2676904">Installation and Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="winbind.html#id2676910">Introduction</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2677024">Requirements</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2677176">Testing Things Out</a></span></dt></dl></dd><dt><span class="sect1"><a href="winbind.html#id2679639">Conclusion</a></span></dt><dt><span class="sect1"><a href="winbind.html#id2679688">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="winbind.html#id2679730">NSCD Problem Warning</a></span></dt><dt><span class="sect2"><a href="winbind.html#id2679766">Winbind Is Not Resolving Users and Groups</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2675430"></a>Features and Benefits</h2></div></div></div><p>
-<a class="indexterm" name="id2675438"></a>
-<a class="indexterm" name="id2675444"></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 24. Winbind: Use of Domain Accounts</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="VFS.html" title="Chapter 23. Stackable VFS modules"><link rel="next" href="AdvancedNetworkManagement.html" title="Chapter 25. Advanced Network Management"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 24. Winbind: Use of Domain Accounts</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="VFS.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="AdvancedNetworkManagement.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="winbind"></a>Chapter 24. Winbind: Use of Domain Accounts</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Tim</span> <span class="surname">Potter</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:tpot at linuxcare.com.au">tpot at linuxcare.com.au</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Andrew</span> <span class="surname">Tridgell</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:tridge at samba.org">tridge at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Naag</span> <span class="surname">Mummaneni</span></h3><span class="contrib">Notes for Solaris</span> <div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:getnag at rediffmail.com">getnag at rediffmail.com</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="surname">Trostel</span></h3><div class="affiliation"><span class="orgname">SNAP<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jtrostel at snapserver.com">jtrostel at snapserver.com</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer at samba.org">jelmer at samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht at samba.org">jht at samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">June 15, 2005</p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="winbind.html#id434945">Features and Benefits</a></span></dt><dt><span class="sect1"><a href="winbind.html#id435268">Introduction</a></span></dt><dt><span class="sect1"><a href="winbind.html#id435346">What Winbind Provides</a></span></dt><dd><dl><dt><span class="sect2"><a href="winbind.html#id435485">Target Uses</a></span></dt><dt><span class="sect2"><a href="winbind.html#id435524">Handling of Foreign SIDs</a></span></dt></dl></dd><dt><span class="sect1"><a href="winbind.html#id435636">How Winbind Works</a></span></dt><dd><dl><dt><span class="sect2"><a href="winbind.html#id435683">Microsoft Remote Procedure Calls</a></span></dt><dt><span class="sect2"><a href="winbind.html#id435761">Microsoft Active Directory Services</a></span></dt><dt><span class="sect2"><a href="winbind.html#id435805">Name Service Switch</a></span></dt><dt><span class="sect2"><a href="winbind.html#id436017">Pluggable Authentication Modules</a></span></dt><dt><span class="sect2"><a href="winbind.html#id436158">User and Group ID Allocation</a></span></dt><dt><span class="sect2"><a href="winbind.html#id436226">Result Caching</a></span></dt></dl></dd><dt><span class="sect1"><a href="winbind.html#id436276">Installation and Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="winbind.html#id436282">Introduction</a></span></dt><dt><span class="sect2"><a href="winbind.html#id436389">Requirements</a></span></dt><dt><span class="sect2"><a href="winbind.html#id436531">Testing Things Out</a></span></dt></dl></dd><dt><span class="sect1"><a href="winbind.html#id438782">Conclusion</a></span></dt><dt><span class="sect1"><a href="winbind.html#id438828">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="winbind.html#id438861">NSCD Problem Warning</a></span></dt><dt><span class="sect2"><a href="winbind.html#id438895">Winbind Is Not Resolving Users and Groups</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id434945"></a>Features and Benefits</h2></div></div></div><p>
+<a class="indexterm" name="id434953"></a>
+<a class="indexterm" name="id434960"></a>
 	Integration of UNIX and Microsoft Windows NT through a unified logon has
 	been considered a &#8220;<span class="quote">holy grail</span>&#8221; in heterogeneous computing environments for
 	a long time.
 	</p><p>
-<a class="indexterm" name="id2675461"></a>
-<a class="indexterm" name="id2675468"></a>
-<a class="indexterm" name="id2675475"></a>
-<a class="indexterm" name="id2675482"></a>
+<a class="indexterm" name="id434975"></a>
+<a class="indexterm" name="id434981"></a>
+<a class="indexterm" name="id434988"></a>
+<a class="indexterm" name="id434995"></a>
 	There is one other facility without which UNIX and Microsoft Windows network
 	interoperability would suffer greatly. It is imperative that there be a
 	mechanism for sharing files across UNIX systems and to be able to assign
 	domain user and group ownerships with integrity.
 	</p><p>
-<a class="indexterm" name="id2675497"></a>
-<a class="indexterm" name="id2675506"></a>
-<a class="indexterm" name="id2675513"></a>
-<a class="indexterm" name="id2675519"></a>
+<a class="indexterm" name="id435007"></a>
+<a class="indexterm" name="id435016"></a>
+<a class="indexterm" name="id435023"></a>
+<a class="indexterm" name="id435030"></a>
 	<span class="emphasis"><em>winbind</em></span> is a component of the Samba suite of programs that
 	solves the unified logon problem. Winbind uses a UNIX implementation of Microsoft
 	RPC calls, Pluggable Authentication Modules (PAMs), and the name service switch (NSS) to
@@ -27,23 +27,23 @@
 	</p><p>
 	Winbind provides three separate functions:
 	</p><div class="itemizedlist"><ul type="disc"><li><p>
-<a class="indexterm" name="id2675547"></a>
-<a class="indexterm" name="id2675554"></a>
+<a class="indexterm" name="id435054"></a>
+<a class="indexterm" name="id435060"></a>
 		Authentication of user credentials (via PAM). This makes it possible to
 		log onto a UNIX/Linux system using user and group accounts from a Windows
 		NT4 (including a Samba domain) or an Active Directory domain.
 		</p></li><li><p>
-<a class="indexterm" name="id2675569"></a>
-<a class="indexterm" name="id2675576"></a>
+<a class="indexterm" name="id435073"></a>
+<a class="indexterm" name="id435080"></a>
 		Identity resolution (via NSS). This is the default when winbind is not used.
 		</p></li><li><p>
-<a class="indexterm" name="id2675588"></a>
-<a class="indexterm" name="id2675594"></a>
-<a class="indexterm" name="id2675601"></a>
-<a class="indexterm" name="id2675608"></a>
-<a class="indexterm" name="id2675614"></a>
-<a class="indexterm" name="id2675621"></a>
-<a class="indexterm" name="id2675628"></a>
+<a class="indexterm" name="id435092"></a>
+<a class="indexterm" name="id435098"></a>
+<a class="indexterm" name="id435105"></a>
+<a class="indexterm" name="id435111"></a>
+<a class="indexterm" name="id435118"></a>
+<a class="indexterm" name="id435125"></a>
+<a class="indexterm" name="id435132"></a>
 		Winbind maintains a database called winbind_idmap.tdb in which it stores
 		mappings between UNIX UIDs, GIDs, and NT SIDs. This mapping is used only
 		for users and groups that do not have a local UID/GID. It stores the UID/GID
@@ -52,23 +52,23 @@
 		then instead of using a local mapping, Winbind will obtain this information
 		from the LDAP database.
 		</p></li></ul></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-	<a class="indexterm" name="id2675658"></a>
-	<a class="indexterm" name="id2675664"></a>
-<a class="indexterm" name="id2675674"></a>
-<a class="indexterm" name="id2675681"></a>
-<a class="indexterm" name="id2675687"></a>
-<a class="indexterm" name="id2675694"></a>
+	<a class="indexterm" name="id435157"></a>
+	<a class="indexterm" name="id435164"></a>
+<a class="indexterm" name="id435173"></a>
+<a class="indexterm" name="id435180"></a>
+<a class="indexterm" name="id435187"></a>
+<a class="indexterm" name="id435194"></a>
 	If <code class="literal">winbindd</code> is not running, smbd (which calls <code class="literal">winbindd</code>) will fall back to
 	using purely local information from <code class="filename">/etc/passwd</code> and <code class="filename">/etc/group</code> and no dynamic
 	mapping will be used. On an operating system that has been enabled with the NSS,
 	the resolution of user and group information will be accomplished via NSS.
-	</p></div><div class="figure"><a name="winbind_idmap"></a><p class="title"><b>Figure 24.1. Winbind Idmap</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/idmap_winbind_no_loop.png" width="243" alt="Winbind Idmap"></div></div></div><br class="figure-break"></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2675773"></a>Introduction</h2></div></div></div><p>It is well known that UNIX and Microsoft Windows NT have
+	</p></div><div class="figure"><a name="winbind_idmap"></a><p class="title"><b>Figure 24.1. Winbind Idmap</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/idmap_winbind_no_loop.png" width="243" alt="Winbind Idmap"></div></div></div><br class="figure-break"></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id435268"></a>Introduction</h2></div></div></div><p>It is well known that UNIX and Microsoft Windows NT have
 	different models for representing user and group information and
 	use different technologies for implementing them. This fact has
 	made it difficult to integrate the two systems in a satisfactory
 	manner.</p><p>
-<a class="indexterm" name="id2675789"></a>
-<a class="indexterm" name="id2675796"></a>
+<a class="indexterm" name="id435282"></a>
+<a class="indexterm" name="id435289"></a>
 	One common solution in use today has been to create
 	identically named user accounts on both the UNIX and Windows systems
 	and use the Samba suite of programs to provide file and print services
@@ -81,29 +81,29 @@
 		</p></li><li><p>Authenticating Windows NT users.
 		</p></li><li><p>Password changing for Windows NT users.
 		</p></li></ul></div><p>
-<a class="indexterm" name="id2675840"></a>
-<a class="indexterm" name="id2675846"></a>
+<a class="indexterm" name="id435327"></a>
+<a class="indexterm" name="id435334"></a>
 	Ideally, a prospective solution to the unified logon problem
 	would satisfy all the above components without duplication of
 	information on the UNIX machines and without creating additional
 	tasks for the system administrator when maintaining users and
 	groups on either system. The Winbind system provides a simple
 	and elegant solution to all three components of the unified logon
-	problem.</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2675862"></a>What Winbind Provides</h2></div></div></div><p>
-<a class="indexterm" name="id2675870"></a>
-<a class="indexterm" name="id2675877"></a>
-<a class="indexterm" name="id2675884"></a>
-<a class="indexterm" name="id2675891"></a>
+	problem.</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id435346"></a>What Winbind Provides</h2></div></div></div><p>
+<a class="indexterm" name="id435354"></a>
+<a class="indexterm" name="id435361"></a>
+<a class="indexterm" name="id435368"></a>
+<a class="indexterm" name="id435374"></a>
 	Winbind unifies UNIX and Windows NT account management by
 	allowing a UNIX box to become a full member of an NT domain. Once
 	this is done, the UNIX box will see NT users and groups as if
 	they were &#8220;<span class="quote">native</span>&#8221; UNIX users and groups, allowing the NT domain
 	to be used in much the same manner that NIS+ is used within
 	UNIX-only environments.</p><p>
-<a class="indexterm" name="id2675910"></a>
-<a class="indexterm" name="id2675917"></a>
-<a class="indexterm" name="id2675924"></a>
-<a class="indexterm" name="id2675931"></a>
+<a class="indexterm" name="id435391"></a>
+<a class="indexterm" name="id435398"></a>
+<a class="indexterm" name="id435405"></a>
+<a class="indexterm" name="id435411"></a>
 	The end result is that whenever a
 	program on the UNIX machine asks the operating system to look up
 	a user or group name, the query will be resolved by asking the
@@ -112,26 +112,26 @@
 	(via the NSS name resolution modules in the C library), this
 	redirection to the NT domain controller is completely
 	transparent.</p><p>
-<a class="indexterm" name="id2675948"></a>
-<a class="indexterm" name="id2675955"></a>
+<a class="indexterm" name="id435425"></a>
+<a class="indexterm" name="id435432"></a>
 	Users on the UNIX machine can then use NT user and group
 	names as they would &#8220;<span class="quote">native</span>&#8221; UNIX names. They can chown files
 	so they are owned by NT domain users or even login to the
 	UNIX machine and run a UNIX X-Window session as a domain user.</p><p>
-<a class="indexterm" name="id2675973"></a>
+<a class="indexterm" name="id435447"></a>
 	The only obvious indication that Winbind is being used is
 	that user and group names take the form <code class="constant">DOMAIN\user</code> and
 	<code class="constant">DOMAIN\group</code>. This is necessary because it allows Winbind to determine
 	that redirection to a domain controller is wanted for a particular
 	lookup and which trusted domain is being referenced.</p><p>
-<a class="indexterm" name="id2675995"></a>
-<a class="indexterm" name="id2676002"></a>
+<a class="indexterm" name="id435467"></a>
+<a class="indexterm" name="id435474"></a>
 	Additionally, Winbind provides an authentication service that hooks into the PAM system
 	to provide authentication via an NT domain to any PAM-enabled
 	applications. This capability solves the problem of synchronizing
 	passwords between systems, since all passwords are stored in a single
-	location (on the domain controller).</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2676016"></a>Target Uses</h3></div></div></div><p>
-<a class="indexterm" name="id2676023"></a>
+	location (on the domain controller).</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id435485"></a>Target Uses</h3></div></div></div><p>
+<a class="indexterm" name="id435492"></a>
 		Winbind is targeted at organizations that have an
 		existing NT-based domain infrastructure into which they wish
 		to put UNIX workstations or servers. Winbind will allow these
@@ -139,40 +139,40 @@
 		maintain a separate account infrastructure. This greatly
 		simplifies the administrative overhead of deploying UNIX
 		workstations into an NT-based organization.</p><p>
-<a class="indexterm" name="id2676040"></a>
-<a class="indexterm" name="id2676047"></a>
+<a class="indexterm" name="id435506"></a>
+<a class="indexterm" name="id435513"></a>
 		Another interesting way in which we expect Winbind to
 		be used is as a central part of UNIX-based appliances. Appliances
 		that provide file and print services to Microsoft-based networks
 		will be able to use Winbind to provide seamless integration of
-		the appliance into the domain.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2676061"></a>Handling of Foreign SIDs</h3></div></div></div><p>
-<a class="indexterm" name="id2676069"></a>
+		the appliance into the domain.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id435524"></a>Handling of Foreign SIDs</h3></div></div></div><p>
+<a class="indexterm" name="id435532"></a>
 	The term <span class="emphasis"><em>foreign SID</em></span> is often met with the reaction that it
 	is not relevant to a particular environment. The following documents an interchange
 	that took place on the Samba mailing list. It is a good example of the confusion
 	often expressed regarding the use of winbind.
 	</p><p>
-<a class="indexterm" name="id2676087"></a>
+<a class="indexterm" name="id435548"></a>
 	Fact: Winbind is needed to handle users who use workstations that are NOT part
 	of the local domain.
 	</p><p>
-<a class="indexterm" name="id2676099"></a>
+<a class="indexterm" name="id435559"></a>
 	Response: &#8220;<span class="quote">Why? I've used Samba with workstations that are not part of my domains
 	lots of times without using winbind. I thought winbind was for using Samba as a member server
 	in a domain controlled by another Samba/Windows PDC.</span>&#8221;
 	</p><p>
-<a class="indexterm" name="id2676116"></a>
-<a class="indexterm" name="id2676123"></a>
-<a class="indexterm" name="id2676129"></a>
+<a class="indexterm" name="id435574"></a>
+<a class="indexterm" name="id435581"></a>
+<a class="indexterm" name="id435587"></a>
 	If the Samba server will be accessed from a domain other than the local Samba domain, or
 	if there will be access from machines that are not local domain members, winbind will
 	permit the allocation of UIDs and GIDs from the assigned pool that will keep the identity
 	of the foreign user separate from users that are members of the Samba domain.
 	</p><p>
-<a class="indexterm" name="id2676145"></a>
-<a class="indexterm" name="id2676152"></a>
-<a class="indexterm" name="id2676159"></a>
-<a class="indexterm" name="id2676166"></a>
+<a class="indexterm" name="id435600"></a>
+<a class="indexterm" name="id435607"></a>
+<a class="indexterm" name="id435614"></a>
+<a class="indexterm" name="id435621"></a>
 	This means that winbind is eminently useful in cases where a single
 	Samba PDC on a local network is combined with both domain member and domain non-member workstations.
 	If winbind is not used, the user george on a Windows workstation that is not a domain
@@ -181,49 +181,49 @@
 	is that the local user george will be treated as the account DOMAIN\george and the
 	foreign (non-member of the domain) account will be treated as MACHINE\george because
 	each has a different SID.
-	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2676186"></a>How Winbind Works</h2></div></div></div><p>
-<a class="indexterm" name="id2676194"></a>
-<a class="indexterm" name="id2676201"></a>
-<a class="indexterm" name="id2676208"></a>
-<a class="indexterm" name="id2676214"></a>
+	</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id435636"></a>How Winbind Works</h2></div></div></div><p>
+<a class="indexterm" name="id435644"></a>
+<a class="indexterm" name="id435650"></a>
+<a class="indexterm" name="id435657"></a>
+<a class="indexterm" name="id435664"></a>
 	The Winbind system is designed around a client/server
 	architecture. A long-running <code class="literal">winbindd</code> daemon
 	listens on a UNIX domain socket waiting for requests
 	to arrive. These requests are generated by the NSS and PAM
 	clients and are processed sequentially.</p><p>The technologies used to implement Winbind are described
-	in detail below.</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2676237"></a>Microsoft Remote Procedure Calls</h3></div></div></div><p>
-<a class="indexterm" name="id2676245"></a>
-<a class="indexterm" name="id2676254"></a>
-<a class="indexterm" name="id2676261"></a>
-<a class="indexterm" name="id2676268"></a>
-<a class="indexterm" name="id2676275"></a>
+	in detail below.</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id435683"></a>Microsoft Remote Procedure Calls</h3></div></div></div><p>
+<a class="indexterm" name="id435691"></a>
+<a class="indexterm" name="id435700"></a>
+<a class="indexterm" name="id435707"></a>
+<a class="indexterm" name="id435714"></a>
+<a class="indexterm" name="id435721"></a>
 		Over the last few years, efforts have been underway by various Samba Team members to implement various aspects of
 		the Microsoft Remote Procedure Call (MSRPC) system. This system is used for most network-related operations
 		between Windows NT machines, including remote management, user authentication, and print spooling. Although
 		initially this work was done to aid the implementation of Primary Domain Controller (PDC) functionality in
 		Samba, it has also yielded a body of code that can be used for other purposes.
 		</p><p>
-<a class="indexterm" name="id2676294"></a>
-<a class="indexterm" name="id2676301"></a>
-<a class="indexterm" name="id2676308"></a>
+<a class="indexterm" name="id435735"></a>
+<a class="indexterm" name="id435742"></a>
+<a class="indexterm" name="id435749"></a>
 		Winbind uses various MSRPC calls to enumerate domain users and groups and to obtain detailed information about
 		individual users or groups. Other MSRPC calls can be used to authenticate NT domain users and to change user
 		passwords. By directly querying a Windows PDC for user and group information, Winbind maps the NT account
 		information onto UNIX user and group names.
-		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2676324"></a>Microsoft Active Directory Services</h3></div></div></div><p>
-<a class="indexterm" name="id2676332"></a>
-<a class="indexterm" name="id2676338"></a>
-<a class="indexterm" name="id2676345"></a>
-<a class="indexterm" name="id2676352"></a>
+		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id435761"></a>Microsoft Active Directory Services</h3></div></div></div><p>
+<a class="indexterm" name="id435769"></a>
+<a class="indexterm" name="id435776"></a>
+<a class="indexterm" name="id435782"></a>
+<a class="indexterm" name="id435789"></a>
 		Since late 2001, Samba has gained the ability to interact with Microsoft Windows 2000 using its &#8220;<span class="quote">native
 		mode</span>&#8221; protocols rather than the NT4 RPC services.  Using LDAP and Kerberos, a domain member running
 		Winbind can enumerate users and groups in exactly the same way as a Windows 200x client would, and in so doing
 		provide a much more efficient and effective Winbind implementation.
-		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2676371"></a>Name Service Switch</h3></div></div></div><p>
-<a class="indexterm" name="id2676379"></a>
-<a class="indexterm" name="id2676386"></a>
-<a class="indexterm" name="id2676393"></a>
-<a class="indexterm" name="id2676399"></a>
+		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id435805"></a>Name Service Switch</h3></div></div></div><p>
+<a class="indexterm" name="id435813"></a>
+<a class="indexterm" name="id435819"></a>
+<a class="indexterm" name="id435826"></a>
+<a class="indexterm" name="id435833"></a>
 		The NSS is a feature that is present in many UNIX operating systems. It allows system
 		information such as hostnames, mail aliases, and user information
 		to be resolved from different sources. For example, a standalone
@@ -232,20 +232,20 @@
 		may first attempt to resolve system information from local files,
 		and then consult an NIS database for user information or a DNS server
 		for hostname information.</p><p>
-<a class="indexterm" name="id2676418"></a>
-<a class="indexterm" name="id2676424"></a>
-<a class="indexterm" name="id2676431"></a>
-<a class="indexterm" name="id2676438"></a>
-<a class="indexterm" name="id2676445"></a>
+<a class="indexterm" name="id435847"></a>
+<a class="indexterm" name="id435854"></a>
+<a class="indexterm" name="id435860"></a>
+<a class="indexterm" name="id435867"></a>
+<a class="indexterm" name="id435874"></a>
 		The NSS application programming interface allows Winbind to present itself as a source of system
 		information when resolving UNIX usernames and groups. Winbind uses this interface and information obtained
 		from a Windows NT server using MSRPC calls to provide a new source of account enumeration. Using standard UNIX
 		library calls, you can enumerate the users and groups on a UNIX machine running Winbind and see all users and
 		groups in an NT domain plus any trusted domain as though they were local users and groups.
 		</p><p>
-<a class="indexterm" name="id2676464"></a>
-<a class="indexterm" name="id2676470"></a>
-<a class="indexterm" name="id2676477"></a>
+<a class="indexterm" name="id435888"></a>
+<a class="indexterm" name="id435895"></a>
+<a class="indexterm" name="id435902"></a>
 		The primary control file for NSS is <code class="filename">/etc/nsswitch.conf</code>.  When a UNIX application
 		makes a request to do a lookup, the C library looks in <code class="filename">/etc/nsswitch.conf</code> for a line that
 		matches the service type being requested; for example, the &#8220;<span class="quote">passwd</span>&#8221; service type is used when
@@ -254,46 +254,46 @@
 </p><pre class="screen">
 passwd: files example
 </pre><p>
-<a class="indexterm" name="id2676513"></a>
-<a class="indexterm" name="id2676520"></a>
-<a class="indexterm" name="id2676527"></a>
+<a class="indexterm" name="id435933"></a>
+<a class="indexterm" name="id435940"></a>
+<a class="indexterm" name="id435947"></a>
 		then the C library will first load a module called <code class="filename">/lib/libnss_files.so</code> followed
 		by the module <code class="filename">/lib/libnss_example.so</code>. The C library will dynamically load each of these
 		modules in turn and call resolver functions within the modules to try to resolve the request. Once the request
 		is resolved, the C library returns the result to the application.
 		</p><p>
-<a class="indexterm" name="id2676555"></a>
-<a class="indexterm" name="id2676561"></a>
-<a class="indexterm" name="id2676568"></a>
+<a class="indexterm" name="id435971"></a>
+<a class="indexterm" name="id435978"></a>
+<a class="indexterm" name="id435984"></a>
 		This NSS interface provides an easy way for Winbind to hook into the operating system. All that needs
 		to be done is to put <code class="filename">libnss_winbind.so</code> in <code class="filename">/lib/</code> then add
 		&#8220;<span class="quote">winbind</span>&#8221; into <code class="filename">/etc/nsswitch.conf</code> at the appropriate place. The C library
 		will then call Winbind to resolve user and group names.
-		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2676603"></a>Pluggable Authentication Modules</h3></div></div></div><p>
-<a class="indexterm" name="id2676611"></a>
-<a class="indexterm" name="id2676618"></a>
-<a class="indexterm" name="id2676625"></a>
-<a class="indexterm" name="id2676632"></a>
+		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id436017"></a>Pluggable Authentication Modules</h3></div></div></div><p>
+<a class="indexterm" name="id436025"></a>
+<a class="indexterm" name="id436031"></a>
+<a class="indexterm" name="id436038"></a>
+<a class="indexterm" name="id436045"></a>
 		PAMs provide a system for abstracting authentication and authorization technologies. With a PAM
 		module, it is possible to specify different authentication methods for different system applications without
 		having to recompile these applications. PAM is also useful for implementing a particular policy for
 		authorization. For example, a system administrator may only allow console logins from users stored in the
 		local password file but only allow users resolved from an NIS database to log in over the network.
 		</p><p>
-<a class="indexterm" name="id2676651"></a>
-<a class="indexterm" name="id2676657"></a>
-<a class="indexterm" name="id2676664"></a>
-<a class="indexterm" name="id2676671"></a>
-<a class="indexterm" name="id2676678"></a>
+<a class="indexterm" name="id436060"></a>
+<a class="indexterm" name="id436066"></a>
+<a class="indexterm" name="id436073"></a>
+<a class="indexterm" name="id436080"></a>
+<a class="indexterm" name="id436087"></a>
 		Winbind uses the authentication management and password management PAM interface to integrate Windows
 		NT users into a UNIX system. This allows Windows NT users to log in to a UNIX machine and be authenticated
 		against a suitable PDC.  These users can also change their passwords and have this change take effect directly
 		on the PDC.
 		</p><p>
-<a class="indexterm" name="id2676694"></a>
-<a class="indexterm" name="id2676700"></a>
-<a class="indexterm" name="id2676707"></a>
-<a class="indexterm" name="id2676714"></a>
+<a class="indexterm" name="id436099"></a>
+<a class="indexterm" name="id436106"></a>
+<a class="indexterm" name="id436113"></a>
+<a class="indexterm" name="id436119"></a>
 		PAM is configured by providing control files in the directory <code class="filename">/etc/pam.d/</code> for
 		each of the services that require authentication. When an authentication request is made by an application,
 		the PAM code in the C library looks up this control file to determine what modules to load to do the
@@ -301,10 +301,10 @@
 		very easy: simply copy the <code class="filename">pam_winbind.so</code> module to <code class="filename">/lib/security/</code>,
 		and the PAM control files for relevant services are updated to allow authentication via Winbind. See the PAM
 		documentation in <a class="link" href="pam.html" title="Chapter 28. PAM-Based Distributed Authentication">PAM-Based Distributed Authentication</a>, for more information.
-		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2676758"></a>User and Group ID Allocation</h3></div></div></div><p>
-<a class="indexterm" name="id2676766"></a>
-<a class="indexterm" name="id2676773"></a>
-<a class="indexterm" name="id2676780"></a>
+		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id436158"></a>User and Group ID Allocation</h3></div></div></div><p>
+<a class="indexterm" name="id436166"></a>
+<a class="indexterm" name="id436172"></a>
+<a class="indexterm" name="id436179"></a>
 		When a user or group is created under Windows NT/200x, it is allocated a numerical relative identifier
 		(RID). This is slightly different from UNIX, which has a range of numbers that are used to identify users and
 		the same range used to identify groups. It is Winbind's job to convert RIDs to UNIX ID numbers and vice versa.
@@ -313,18 +313,18 @@
 		allocated the next UNIX ID from the range. The same process applies for Windows NT groups. Over time, Winbind
 		will have mapped all Windows NT users and groups to UNIX user IDs and group IDs.
 		</p><p>
-<a class="indexterm" name="id2676815"></a>
-<a class="indexterm" name="id2676822"></a>
-<a class="indexterm" name="id2676828"></a>
-<a class="indexterm" name="id2676835"></a>
+<a class="indexterm" name="id436195"></a>
+<a class="indexterm" name="id436202"></a>
+<a class="indexterm" name="id436209"></a>
+<a class="indexterm" name="id436216"></a>
 		The results of this mapping are stored persistently in an ID mapping database held in a tdb database.
 		This ensures that RIDs are mapped to UNIX IDs in a consistent way.
-		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2676847"></a>Result Caching</h3></div></div></div><p>
-<a class="indexterm" name="id2676855"></a>
-<a class="indexterm" name="id2676861"></a>
-<a class="indexterm" name="id2676868"></a>
-<a class="indexterm" name="id2676875"></a>
-<a class="indexterm" name="id2676882"></a>
+		</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id436226"></a>Result Caching</h3></div></div></div><p>
+<a class="indexterm" name="id436234"></a>
+<a class="indexterm" name="id436240"></a>
+<a class="indexterm" name="id436247"></a>
+<a class="indexterm" name="id436254"></a>
+<a class="indexterm" name="id436260"></a>
 		An active directory system can generate a lot of user and group name lookups. To reduce the network
 		cost of these lookups, Winbind uses a caching scheme based on the SAM sequence number supplied by NT domain
 		controllers. User or group information returned by a PDC is cached by Winbind along with a sequence number
@@ -332,66 +332,66 @@
 		information is modified. If a cached entry has expired, the sequence number is requested from the PDC and
 		compared against the sequence number of the cached entry.  If the sequence numbers do not match, then the
 		cached information is discarded and up-to-date information is requested directly from the PDC.
-		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2676904"></a>Installation and Configuration</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2676910"></a>Introduction</h3></div></div></div><p>
-<a class="indexterm" name="id2676918"></a>
-<a class="indexterm" name="id2676925"></a>
-<a class="indexterm" name="id2676931"></a>
+		</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id436276"></a>Installation and Configuration</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id436282"></a>Introduction</h3></div></div></div><p>
+<a class="indexterm" name="id436290"></a>
+<a class="indexterm" name="id436297"></a>
+<a class="indexterm" name="id436303"></a>
 This section describes the procedures used to get Winbind up and running. Winbind is capable of providing
 access and authentication control for Windows Domain users through an NT or Windows 200x PDC for regular
 services, such as telnet and ftp, as well for Samba services.
 </p><div class="itemizedlist"><ul type="disc"><li><p>
 	<span class="emphasis"><em>Why should I do this?</em></span>
 	</p><p>
-<a class="indexterm" name="id2676957"></a>
-<a class="indexterm" name="id2676964"></a>
-<a class="indexterm" name="id2676971"></a>
-<a class="indexterm" name="id2676978"></a>
+<a class="indexterm" name="id436326"></a>
+<a class="indexterm" name="id436333"></a>
+<a class="indexterm" name="id436340"></a>
+<a class="indexterm" name="id436347"></a>
 This allows the Samba administrator to rely on the authentication mechanisms on the Windows NT/200x PDC
 for the authentication of domain members. Windows NT/200x users no longer need to have separate accounts on
 the Samba server.
 	</p></li><li><p>
 	<span class="emphasis"><em>Who should be reading this document?</em></span>
 	</p><p>
-<a class="indexterm" name="id2677003"></a>
-<a class="indexterm" name="id2677009"></a>
+<a class="indexterm" name="id436369"></a>
+<a class="indexterm" name="id436376"></a>
 This document is designed for system administrators. If you are implementing Samba on a file server and wish
 to (fairly easily) integrate existing Windows NT/200x users from your PDC onto the Samba server, this document
 is for you.
-	</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2677024"></a>Requirements</h3></div></div></div><p>
-<a class="indexterm" name="id2677032"></a>
-<a class="indexterm" name="id2677039"></a>
-<a class="indexterm" name="id2677046"></a>
+	</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id436389"></a>Requirements</h3></div></div></div><p>
+<a class="indexterm" name="id436397"></a>
+<a class="indexterm" name="id436403"></a>
+<a class="indexterm" name="id436410"></a>
 If you have a Samba configuration file that you are currently using, <span class="emphasis"><em>BACK IT UP!</em></span>
 If your system already uses PAM, <span class="emphasis"><em>back up the <code class="filename">/etc/pam.d</code> directory
 contents!</em></span> If you haven't already made a boot disk, <span class="emphasis"><em>MAKE ONE NOW!</em></span>
 </p><p>
-<a class="indexterm" name="id2677075"></a>
-<a class="indexterm" name="id2677082"></a>
-<a class="indexterm" name="id2677089"></a>
+<a class="indexterm" name="id436438"></a>
+<a class="indexterm" name="id436445"></a>
+<a class="indexterm" name="id436452"></a>
 Messing with the PAM configuration files can make it nearly impossible to log in to your machine. That's
 why you want to be able to boot back into your machine in single-user mode and restore your
 <code class="filename">/etc/pam.d</code> to the original state it was in if you get frustrated with the
 way things are going.
 </p><p>
-<a class="indexterm" name="id2677110"></a>
-<a class="indexterm" name="id2677117"></a>
+<a class="indexterm" name="id436470"></a>
+<a class="indexterm" name="id436477"></a>
 The latest version of Samba-3 includes a functioning winbindd daemon. Please refer to the <a class="ulink" href="http://samba.org/" target="_top">main Samba Web page</a>, or better yet, your closest Samba mirror site for
 instructions on downloading the source code.
 </p><p>
-<a class="indexterm" name="id2677136"></a>
-<a class="indexterm" name="id2677143"></a>
-<a class="indexterm" name="id2677150"></a>
-<a class="indexterm" name="id2677156"></a>
+<a class="indexterm" name="id436494"></a>
+<a class="indexterm" name="id436501"></a>
+<a class="indexterm" name="id436508"></a>
+<a class="indexterm" name="id436514"></a>
 To allow domain users the ability to access Samba shares and files, as well as potentially other services
 provided by your Samba machine, PAM must be set up properly on your
 machine. In order to compile the Winbind modules, you should have at least the PAM development libraries installed
 on your system. Please refer to the PAM Web site <a class="ulink" href="http://www.kernel.org/pub/linux/libs/pam/" target="_top">http://www.kernel.org/pub/linux/libs/pam/</a>.
-</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2677176"></a>Testing Things Out</h3></div></div></div><p>
-<a class="indexterm" name="id2677184"></a>
-<a class="indexterm" name="id2677191"></a>
-<a class="indexterm" name="id2677198"></a>
-<a class="indexterm" name="id2677205"></a>
-<a class="indexterm" name="id2677211"></a>
+</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id436531"></a>Testing Things Out</h3></div></div></div><p>
+<a class="indexterm" name="id436539"></a>
+<a class="indexterm" name="id436545"></a>
+<a class="indexterm" name="id436552"></a>
+<a class="indexterm" name="id436559"></a>
+<a class="indexterm" name="id436566"></a>
 Before starting, it is probably best to kill off all the Samba-related daemons running on your server.
 Kill off all <span class="application">smbd</span>, <span class="application">nmbd</span>, and <span class="application">winbindd</span> processes that may be running. To use PAM,
 make sure that you have the standard PAM package that supplies the <code class="filename">/etc/pam.d</code>
@@ -399,11 +399,11 @@
 and the <code class="filename">/usr/doc</code> and <code class="filename">/usr/man</code> entries for PAM. Winbind is built
 better in Samba if the pam-devel package is also installed. This package includes the header files
 needed to compile PAM-aware applications.
-</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2677263"></a>Configure <code class="filename">nsswitch.conf</code> and the Winbind Libraries on Linux and Solaris</h4></div></div></div><p>
-<a class="indexterm" name="id2677278"></a>
-<a class="indexterm" name="id2677284"></a>
-<a class="indexterm" name="id2677291"></a>
-<a class="indexterm" name="id2677298"></a>
+</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id436613"></a>Configure <code class="filename">nsswitch.conf</code> and the Winbind Libraries on Linux and Solaris</h4></div></div></div><p>
+<a class="indexterm" name="id436627"></a>
+<a class="indexterm" name="id436634"></a>
+<a class="indexterm" name="id436640"></a>
+<a class="indexterm" name="id436647"></a>
 PAM is a standard component of most current generation UNIX/Linux systems. Unfortunately, few systems install
 the <code class="filename">pam-devel</code> libraries that are needed to build PAM-enabled Samba. Additionally, Samba-3
 may auto-install the Winbind files into their correct locations on your system, so before you get too far down
@@ -413,7 +413,7 @@
 </p><p>
 The libraries needed to run the <span class="application">winbindd</span> daemon through nsswitch need to be copied to their proper locations:
 </p><p>
-<a class="indexterm" name="id2677338"></a>
+<a class="indexterm" name="id436682"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>cp ../samba/source/nsswitch/libnss_winbind.so /lib</code></strong>
 </pre><p>
@@ -422,14 +422,14 @@
 </p><p>
 <code class="prompt">root# </code> <strong class="userinput"><code>ln -s /lib/libnss_winbind.so /lib/libnss_winbind.so.2</code></strong>
 </p><p>And, in the case of Sun Solaris:
-<a class="indexterm" name="id2677385"></a>
+<a class="indexterm" name="id436728"></a>
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>ln -s /usr/lib/libnss_winbind.so /usr/lib/libnss_winbind.so.1</code></strong>
 <code class="prompt">root# </code><strong class="userinput"><code>ln -s /usr/lib/libnss_winbind.so /usr/lib/nss_winbind.so.1</code></strong>
 <code class="prompt">root# </code><strong class="userinput"><code>ln -s /usr/lib/libnss_winbind.so /usr/lib/nss_winbind.so.2</code></strong>
 </pre><p>
 </p><p>
-<a class="indexterm" name="id2677434"></a>
+<a class="indexterm" name="id436776"></a>
 As root, edit <code class="filename">/etc/nsswitch.conf</code> to allow user and group entries to be visible from the
 <span class="application">winbindd</span> daemon. My <code class="filename">/etc/nsswitch.conf</code> file looked like this after editing:
 </p><pre class="programlisting">
@@ -437,11 +437,11 @@
 shadow:     files
 group:      files winbind
 </pre><p>
-<a class="indexterm" name="id2677471"></a>
-<a class="indexterm" name="id2677477"></a>
-<a class="indexterm" name="id2677484"></a>
-<a class="indexterm" name="id2677491"></a>
-<a class="indexterm" name="id2677498"></a>
+<a class="indexterm" name="id436810"></a>
+<a class="indexterm" name="id436816"></a>
+<a class="indexterm" name="id436823"></a>
+<a class="indexterm" name="id436830"></a>
+<a class="indexterm" name="id436837"></a>
 The libraries needed by the <code class="literal">winbindd</code> daemon will be automatically
 entered into the <code class="literal">ldconfig</code> cache the next time
 your system reboots, but it is faster (and you do not need to reboot) if you do it manually:
@@ -453,11 +453,11 @@
 filters the output of the <code class="literal">ldconfig</code> command so that we may see proof that
 this library is indeed recognized by the dynamic link loader.
 </p><p>
-<a class="indexterm" name="id2677562"></a>
-<a class="indexterm" name="id2677569"></a>
-<a class="indexterm" name="id2677575"></a>
-<a class="indexterm" name="id2677582"></a>
-<a class="indexterm" name="id2677589"></a>
+<a class="indexterm" name="id436896"></a>
+<a class="indexterm" name="id436903"></a>
+<a class="indexterm" name="id436910"></a>
+<a class="indexterm" name="id436916"></a>
+<a class="indexterm" name="id436923"></a>
 The Sun Solaris dynamic link loader management tool is called <code class="literal">crle</code>. The
 use of this tool is necessary to instruct the dynamic link loader to search directories that
 contain library files that were not supplied as part of the original operating system platform.
@@ -480,13 +480,13 @@
 </pre><p>
 From this it is apparent that the <code class="filename">/usr/local/lib</code> directory is included
 in the search dynamic link libraries in order to satisfy object module dependencies.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2677666"></a>NSS Winbind on AIX</h4></div></div></div><p>(This section is only for those running AIX.)</p><p>
-<a class="indexterm" name="id2677678"></a>
-<a class="indexterm" name="id2677684"></a>
-<a class="indexterm" name="id2677691"></a>
-<a class="indexterm" name="id2677698"></a>
-<a class="indexterm" name="id2677705"></a>
-<a class="indexterm" name="id2677712"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id436987"></a>NSS Winbind on AIX</h4></div></div></div><p>(This section is only for those running AIX.)</p><p>
+<a class="indexterm" name="id436998"></a>
+<a class="indexterm" name="id437005"></a>
+<a class="indexterm" name="id437012"></a>
+<a class="indexterm" name="id437018"></a>
+<a class="indexterm" name="id437025"></a>
+<a class="indexterm" name="id437032"></a>
 The Winbind AIX identification module gets built as <code class="filename">libnss_winbind.so</code> in the
 nsswitch directory of the Samba source. This file can be copied to <code class="filename">/usr/lib/security</code>,
 and the AIX naming convention would indicate that it should be named WINBIND. A stanza like the following:
@@ -504,50 +504,50 @@
 Loadable Authentication Module Programming Interface</a> for AIX. Further information on administering the modules
 can be found in the <a class="ulink" href="http://publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/aixbman/baseadmn/iandaadmin.htm" target="_top">System
 Management Guide: Operating System and Devices.</a>
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2677779"></a>Configure smb.conf</h4></div></div></div><p>
-<a class="indexterm" name="id2677787"></a>
-<a class="indexterm" name="id2677794"></a>
-<a class="indexterm" name="id2677801"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id437089"></a>Configure smb.conf</h4></div></div></div><p>
+<a class="indexterm" name="id437097"></a>
+<a class="indexterm" name="id437103"></a>
+<a class="indexterm" name="id437110"></a>
 Several parameters are needed in the <code class="filename">smb.conf</code> file to control the behavior of <span class="application">winbindd</span>. These
 are described in more detail in the <a class="citerefentry" href="winbindd.8.html"><span class="citerefentry"><span class="refentrytitle">winbindd</span>(8)</span></a> man page. My <code class="filename">smb.conf</code> file, as shown in <a class="link" href="winbind.html#winbindcfg" title="Example 24.1. smb.conf for Winbind Setup">the smb.conf for Winbind Setup</a>, was modified to include the necessary entries in the [global] section.
-</p><div class="example"><a name="winbindcfg"></a><p class="title"><b>Example 24.1. smb.conf for Winbind Setup</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td>#  separate domain and username with '\', like DOMAIN\username</td></tr><tr><td><a class="indexterm" name="id2677874"></a><em class="parameter"><code>winbind separator = \</code></em></td></tr><tr><td>#  use uids from 10000 to 20000 for domain users</td></tr><tr><td><a class="indexterm" name="id2677890"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td>#  use gids from 10000 to 20000 for domain groups</td></tr><tr><td><a class="indexterm" name="id2677906"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr><tr><td>#  allow enumeration of winbind users and groups</td></tr><tr><td><a class="indexterm" name="id2677922"></a><em class="parameter"><code>winbind enum users = yes</code></em></td></tr><tr><td><a class="indexterm" name="id2677934"></a><em class="parameter"><code>winbind enum groups = yes</code></em></td></tr><tr><td>#  give winbind users a real shell (only needed if they have telnet access)</td></tr><tr><td><a class="indexterm" name="id2677950"></a><em class="parameter"><code>template homedir = /home/winnt/%D/%U</code></em></td></tr><tr><td><a class="indexterm" name="id2677962"></a><em class="parameter"><code>template shell = /bin/bash</code></em></td></tr></table></div></div><br class="example-break"></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2677976"></a>Join the Samba Server to the PDC Domain</h4></div></div></div><p>
-<a class="indexterm" name="id2677984"></a>
-<a class="indexterm" name="id2677991"></a>
-<a class="indexterm" name="id2677998"></a>
+</p><div class="example"><a name="winbindcfg"></a><p class="title"><b>Example 24.1. smb.conf for Winbind Setup</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td>#  separate domain and username with '\', like DOMAIN\username</td></tr><tr><td><a class="indexterm" name="id437181"></a><em class="parameter"><code>winbind separator = \</code></em></td></tr><tr><td>#  use uids from 10000 to 20000 for domain users</td></tr><tr><td><a class="indexterm" name="id437196"></a><em class="parameter"><code>idmap uid = 10000-20000</code></em></td></tr><tr><td>#  use gids from 10000 to 20000 for domain groups</td></tr><tr><td><a class="indexterm" name="id437212"></a><em class="parameter"><code>idmap gid = 10000-20000</code></em></td></tr><tr><td>#  allow enumeration of winbind users and groups</td></tr><tr><td><a class="indexterm" name="id437227"></a><em class="parameter"><code>winbind enum users = yes</code></em></td></tr><tr><td><a class="indexterm" name="id437238"></a><em class="parameter"><code>winbind enum groups = yes</code></em></td></tr><tr><td>#  give winbind users a real shell (only needed if they have telnet access)</td></tr><tr><td><a class="indexterm" name="id437254"></a><em class="parameter"><code>template homedir = /home/winnt/%D/%U</code></em></td></tr><tr><td><a class="indexterm" name="id437266"></a><em class="parameter"><code>template shell = /bin/bash</code></em></td></tr></table></div></div><br class="example-break"></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id437279"></a>Join the Samba Server to the PDC Domain</h4></div></div></div><p>
+<a class="indexterm" name="id437287"></a>
+<a class="indexterm" name="id437294"></a>
+<a class="indexterm" name="id437300"></a>
 All machines that will participate in domain security should be members of
 the domain. This applies also to the PDC and all BDCs.
 </p><p>
-<a class="indexterm" name="id2678010"></a>
-<a class="indexterm" name="id2678017"></a>
-<a class="indexterm" name="id2678024"></a>
-<a class="indexterm" name="id2678035"></a>
-<a class="indexterm" name="id2678042"></a>
-<a class="indexterm" name="id2678048"></a>
-<a class="indexterm" name="id2678055"></a>
-<a class="indexterm" name="id2678062"></a>
-<a class="indexterm" name="id2678069"></a>
+<a class="indexterm" name="id437311"></a>
+<a class="indexterm" name="id437318"></a>
+<a class="indexterm" name="id437325"></a>
+<a class="indexterm" name="id437336"></a>
+<a class="indexterm" name="id437343"></a>
+<a class="indexterm" name="id437349"></a>
+<a class="indexterm" name="id437356"></a>
+<a class="indexterm" name="id437363"></a>
+<a class="indexterm" name="id437370"></a>
 The process of joining a domain requires the use of the <code class="literal">net rpc join</code>
 command. This process communicates with the domain controller it will register with
 (usually the PDC) via MS DCE RPC. This means, of course, that the <code class="literal">smbd</code>
 process must be running on the target domain controller. It is therefore necessary to temporarily
 start Samba on a PDC so that it can join its own domain.
 </p><p>
-<a class="indexterm" name="id2678096"></a>
-<a class="indexterm" name="id2678103"></a>
-<a class="indexterm" name="id2678110"></a>
+<a class="indexterm" name="id437394"></a>
+<a class="indexterm" name="id437401"></a>
+<a class="indexterm" name="id437408"></a>
 Enter the following command to make the Samba server join the domain, where <em class="replaceable"><code>PDC</code></em> is
 the name of your PDC and <em class="replaceable"><code>Administrator</code></em> is a domain user who has administrative
 privileges in the domain.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2678131"></a>
-<a class="indexterm" name="id2678138"></a>
-<a class="indexterm" name="id2678145"></a>
-<a class="indexterm" name="id2678152"></a>
+<a class="indexterm" name="id437428"></a>
+<a class="indexterm" name="id437434"></a>
+<a class="indexterm" name="id437441"></a>
+<a class="indexterm" name="id437448"></a>
 Before attempting to join a machine to the domain, verify that Samba is running
 on the target domain controller (usually PDC) and that it is capable of being reached via ports
 137/udp, 135/tcp, 139/tcp, and 445/tcp (if Samba or Windows Server 2Kx).
 </p></div><p>
-<a class="indexterm" name="id2678166"></a>
+<a class="indexterm" name="id437460"></a>
 The use of the <code class="literal">net rpc join</code> facility is shown here:
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>/usr/local/samba/bin/net rpc join -S PDC -U Administrator</code></strong>
@@ -555,10 +555,10 @@
 The proper response to the command should be &#8220;<span class="quote">Joined the domain
 <em class="replaceable"><code>DOMAIN</code></em></span>&#8221; where <em class="replaceable"><code>DOMAIN</code></em>
 is your domain name.
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2678214"></a>Starting and Testing the <code class="literal">winbindd</code> Daemon</h4></div></div></div><p>
-<a class="indexterm" name="id2678228"></a>
-<a class="indexterm" name="id2678235"></a>
-<a class="indexterm" name="id2678242"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id437506"></a>Starting and Testing the <code class="literal">winbindd</code> Daemon</h4></div></div></div><p>
+<a class="indexterm" name="id437520"></a>
+<a class="indexterm" name="id437527"></a>
+<a class="indexterm" name="id437534"></a>
 Eventually, you will want to modify your Samba startup script to automatically invoke the winbindd daemon when
 the other parts of Samba start, but it is possible to test out just the Winbind portion first. To start up
 Winbind services, enter the following command as root:
@@ -567,27 +567,27 @@
 </pre><p>
 Use the appropriate path to the location of the <code class="literal">winbindd</code> executable file.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2678281"></a>
-<a class="indexterm" name="id2678288"></a>
+<a class="indexterm" name="id437570"></a>
+<a class="indexterm" name="id437576"></a>
 The command to start up Winbind services assumes that Samba has been installed in the
 <code class="filename">/usr/local/samba</code> directory tree. You may need to search for the location of Samba files
 if this is not the location of <code class="literal">winbindd</code> on your system.
 </p></div><p>
-<a class="indexterm" name="id2678313"></a>
-<a class="indexterm" name="id2678320"></a>
+<a class="indexterm" name="id437600"></a>
+<a class="indexterm" name="id437607"></a>
 I'm always paranoid and like to make sure the daemon is really running.
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>ps -ae | grep winbindd</code></strong>
 </pre><p>
 </p><p>
-<a class="indexterm" name="id2678348"></a>
+<a class="indexterm" name="id437633"></a>
 This command should produce output like the following if the daemon is running.
 </p><pre class="screen">
 3025 ?        00:00:00 winbindd
 </pre><p>
 </p><p>
-<a class="indexterm" name="id2678366"></a>
-<a class="indexterm" name="id2678372"></a>
+<a class="indexterm" name="id437650"></a>
+<a class="indexterm" name="id437657"></a>
 Now, for the real test, try to get some information about the users on your PDC:
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>/usr/local/samba/bin/wbinfo -u</code></strong>
@@ -605,8 +605,8 @@
 Obviously, I have named my domain &#8220;<span class="quote">CEO</span>&#8221; and my <a class="link" href="smb.conf.5.html#WINBINDSEPARATOR">winbind separator</a> is
 &#8220;<span class="quote">\</span>&#8221;.
 </p><p>
-<a class="indexterm" name="id2678431"></a>
-<a class="indexterm" name="id2678437"></a>
+<a class="indexterm" name="id437710"></a>
+<a class="indexterm" name="id437716"></a>
 You can do the same sort of thing to get group information from the PDC:
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>/usr/local/samba/bin/wbinfo -g</code></strong>
@@ -620,13 +620,13 @@
 CEO\Enterprise Admins
 CEO\Group Policy Creator Owners
 </pre><p>
-<a class="indexterm" name="id2678467"></a>
-<a class="indexterm" name="id2678474"></a>
-<a class="indexterm" name="id2678480"></a>
-<a class="indexterm" name="id2678487"></a>
-<a class="indexterm" name="id2678494"></a>
-<a class="indexterm" name="id2678500"></a>
-<a class="indexterm" name="id2678507"></a>
+<a class="indexterm" name="id437744"></a>
+<a class="indexterm" name="id437750"></a>
+<a class="indexterm" name="id437757"></a>
+<a class="indexterm" name="id437764"></a>
+<a class="indexterm" name="id437770"></a>
+<a class="indexterm" name="id437777"></a>
+<a class="indexterm" name="id437784"></a>
 The function <code class="literal">getent</code> can now be used to get unified lists of both local and PDC users and
 groups. Try the following command:
 </p><pre class="screen">
@@ -640,16 +640,16 @@
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>getent group</code></strong>
 </pre><p>
-</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2678569"></a>Fix the init.d Startup Scripts</h4></div></div></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id2678575"></a>Linux</h5></div></div></div><p>
-<a class="indexterm" name="id2678583"></a>
-<a class="indexterm" name="id2678590"></a>
-<a class="indexterm" name="id2678597"></a>
-<a class="indexterm" name="id2678603"></a>
-<a class="indexterm" name="id2678610"></a>
-<a class="indexterm" name="id2678617"></a>
-<a class="indexterm" name="id2678624"></a>
-<a class="indexterm" name="id2678630"></a>
-<a class="indexterm" name="id2678635"></a>
+</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id437842"></a>Fix the init.d Startup Scripts</h4></div></div></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id437848"></a>Linux</h5></div></div></div><p>
+<a class="indexterm" name="id437856"></a>
+<a class="indexterm" name="id437863"></a>
+<a class="indexterm" name="id437870"></a>
+<a class="indexterm" name="id437876"></a>
+<a class="indexterm" name="id437883"></a>
+<a class="indexterm" name="id437890"></a>
+<a class="indexterm" name="id437897"></a>
+<a class="indexterm" name="id437902"></a>
+<a class="indexterm" name="id437908"></a>
 The <span class="application">winbindd</span> daemon needs to start up after the <span class="application">smbd</span> and <span class="application">nmbd</span> daemons are running.  To accomplish this
 task, you need to modify the startup scripts of your system.  They are located at
 <code class="filename">/etc/init.d/smb</code> in Red Hat Linux and in <code class="filename">/etc/init.d/samba</code> in Debian
@@ -710,16 +710,16 @@
         echo ""
         return $RETVAL
 }
-</pre></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id2678780"></a>Solaris</h5></div></div></div><p>
+</pre></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id438031"></a>Solaris</h5></div></div></div><p>
 Winbind does not work on Solaris 9; see <a class="link" href="Portability.html#winbind-solaris9" title="Winbind on Solaris 9">Winbind on Solaris 9 section</a>
 for details.
 </p><p>
-<a class="indexterm" name="id2678801"></a>
-<a class="indexterm" name="id2678808"></a>
-<a class="indexterm" name="id2678815"></a>
-<a class="indexterm" name="id2678822"></a>
-<a class="indexterm" name="id2678829"></a>
-<a class="indexterm" name="id2678836"></a>
+<a class="indexterm" name="id438051"></a>
+<a class="indexterm" name="id438057"></a>
+<a class="indexterm" name="id438064"></a>
+<a class="indexterm" name="id438071"></a>
+<a class="indexterm" name="id438078"></a>
+<a class="indexterm" name="id438085"></a>
 On Solaris, you need to modify the <code class="filename">/etc/init.d/samba.server</code> startup script. It
 usually only starts smbd and nmbd but should now start winbindd, too. If you have Samba installed in
 <code class="filename">/usr/local/samba/bin</code>, the file could contains something like this:
@@ -780,28 +780,28 @@
 </p><pre class="programlisting">
 /usr/local/samba/sbin/winbindd -B
 </pre><p>
-</p></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id2678925"></a>Restarting</h5></div></div></div><p>
-<a class="indexterm" name="id2678932"></a>
-<a class="indexterm" name="id2678939"></a>
+</p></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id438150"></a>Restarting</h5></div></div></div><p>
+<a class="indexterm" name="id438158"></a>
+<a class="indexterm" name="id438165"></a>
 If you restart the <span class="application">smbd</span>, <span class="application">nmbd</span>, and <span class="application">winbindd</span> daemons at this point, you
 should be able to connect to the Samba server as a domain member just as
 if you were a local user.
-</p></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2678970"></a>Configure Winbind and PAM</h4></div></div></div><p>
-<a class="indexterm" name="id2678978"></a>
-<a class="indexterm" name="id2678984"></a>
-<a class="indexterm" name="id2678991"></a>
-<a class="indexterm" name="id2678998"></a>
+</p></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id438194"></a>Configure Winbind and PAM</h4></div></div></div><p>
+<a class="indexterm" name="id438202"></a>
+<a class="indexterm" name="id438209"></a>
+<a class="indexterm" name="id438215"></a>
+<a class="indexterm" name="id438222"></a>
 If you have made it this far, you know that <code class="literal">winbindd</code> and Samba are working together. If you
 want to use Winbind to provide authentication for other services, keep reading. The PAM configuration files
 need to be altered in this step. (Did you remember to make backups of your original
 <code class="filename">/etc/pam.d</code> files? If not, do it now.)
 </p><p>
-<a class="indexterm" name="id2679025"></a>
-<a class="indexterm" name="id2679031"></a>
-<a class="indexterm" name="id2679038"></a>
-<a class="indexterm" name="id2679045"></a>
-<a class="indexterm" name="id2679052"></a>
-<a class="indexterm" name="id2679059"></a>
+<a class="indexterm" name="id438246"></a>
+<a class="indexterm" name="id438253"></a>
+<a class="indexterm" name="id438260"></a>
+<a class="indexterm" name="id438267"></a>
+<a class="indexterm" name="id438273"></a>
+<a class="indexterm" name="id438280"></a>
 You will need a PAM module to use winbindd with these other services. This module will be compiled in the
 <code class="filename">../source/nsswitch</code> directory by invoking the command:
 </p><pre class="screen">
@@ -814,22 +814,22 @@
 </p><pre class="screen">
 <code class="prompt">root# </code><strong class="userinput"><code>cp ../samba/source/nsswitch/pam_winbind.so /lib/security</code></strong>
 </pre><p>
-</p><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id2679136"></a>Linux/FreeBSD-Specific PAM Configuration</h5></div></div></div><p>
-<a class="indexterm" name="id2679144"></a>
+</p><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id438353"></a>Linux/FreeBSD-Specific PAM Configuration</h5></div></div></div><p>
+<a class="indexterm" name="id438361"></a>
 The <code class="filename">/etc/pam.d/samba</code> file does not need to be changed. I just left this file as it was:
 </p><pre class="programlisting">
 auth    required  /lib/security/pam_stack.so service=system-auth
 account required  /lib/security/pam_stack.so service=system-auth
 </pre><p>
-<a class="indexterm" name="id2679168"></a>
-<a class="indexterm" name="id2679175"></a>
-<a class="indexterm" name="id2679182"></a>
-<a class="indexterm" name="id2679189"></a>
-<a class="indexterm" name="id2679196"></a>
-<a class="indexterm" name="id2679203"></a>
-<a class="indexterm" name="id2679210"></a>
-<a class="indexterm" name="id2679217"></a>
-<a class="indexterm" name="id2679224"></a>
+<a class="indexterm" name="id438383"></a>
+<a class="indexterm" name="id438390"></a>
+<a class="indexterm" name="id438397"></a>
+<a class="indexterm" name="id438403"></a>
+<a class="indexterm" name="id438410"></a>
+<a class="indexterm" name="id438417"></a>
+<a class="indexterm" name="id438424"></a>
+<a class="indexterm" name="id438431"></a>
+<a class="indexterm" name="id438437"></a>
 The other services that I modified to allow the use of Winbind as an authentication service were the normal
 login on the console (or a terminal session), telnet logins, and ftp service. In order to enable these
 services, you may first need to change the entries in <code class="filename">/etc/xinetd.d</code> (or
@@ -843,20 +843,20 @@
 </p><pre class="programlisting">
 	enable = yes
 </pre><p>
-<a class="indexterm" name="id2679276"></a>
-<a class="indexterm" name="id2679283"></a>
-<a class="indexterm" name="id2679290"></a>
+<a class="indexterm" name="id438485"></a>
+<a class="indexterm" name="id438492"></a>
+<a class="indexterm" name="id438499"></a>
 For ftp services to work properly, you will also need to either have individual directories for the domain
 users already present on the server or change the home directory template to a general directory for all
 domain users. These can be easily set using the <code class="filename">smb.conf</code> global entry <a class="link" href="smb.conf.5.html#TEMPLATEHOMEDIR">template homedir</a>.
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
-<a class="indexterm" name="id2679326"></a>
+<a class="indexterm" name="id438530"></a>
 The directory in <a class="link" href="smb.conf.5.html#TEMPLATEHOMEDIR">template homedir</a> is not created automatically! Use pam_mkhomedir or
 pre-create the directories of users to make sure users can log in on UNIX with their own home directory.
 </p></div><p>
-<a class="indexterm" name="id2679350"></a>
-<a class="indexterm" name="id2679357"></a>
-<a class="indexterm" name="id2679363"></a>
+<a class="indexterm" name="id438552"></a>
+<a class="indexterm" name="id438558"></a>
+<a class="indexterm" name="id438565"></a>
 The <code class="filename">/etc/pam.d/ftp</code> file can be changed to allow Winbind ftp access in a manner similar to
 the samba file. My <code class="filename">/etc/pam.d/ftp</code> file was changed to look like this:
 </p><pre class="programlisting">
@@ -869,7 +869,7 @@
 account    required     /lib/security/pam_stack.so service=system-auth
 session    required     /lib/security/pam_stack.so service=system-auth
 </pre><p>
-<a class="indexterm" name="id2679400"></a>
+<a class="indexterm" name="id438597"></a>
 The <code class="filename">/etc/pam.d/login</code> file can be changed in nearly the same way. It now looks like this:
 </p><pre class="programlisting">
 auth       required     /lib/security/pam_securetty.so
@@ -883,17 +883,17 @@
 session    required     /lib/security/pam_stack.so service=system-auth
 session    optional     /lib/security/pam_console.so
 </pre><p>
-<a class="indexterm" name="id2679430"></a>
-<a class="indexterm" name="id2679437"></a>
-<a class="indexterm" name="id2679444"></a>
+<a class="indexterm" name="id438621"></a>
+<a class="indexterm" name="id438628"></a>
+<a class="indexterm" name="id438635"></a>
 In this case, I added the </p><pre class="programlisting">auth sufficient /lib/security/pam_winbind.so</pre><p> lines
 as before, but also added the </p><pre class="programlisting">required pam_securetty.so</pre><p> above it to disallow
 root logins over the network. I also added a </p><pre class="programlisting">sufficient /lib/security/pam_unix.so
 use_first_pass</pre><p> line after the <code class="literal">winbind.so</code> line to get rid of annoying
 double prompts for passwords.
-</p></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id2679482"></a>Solaris-Specific Configuration</h5></div></div></div><p>
-<a class="indexterm" name="id2679490"></a>
-<a class="indexterm" name="id2679497"></a>
+</p></div><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="id438670"></a>Solaris-Specific Configuration</h5></div></div></div><p>
+<a class="indexterm" name="id438677"></a>
+<a class="indexterm" name="id438684"></a>
 The <code class="filename">/etc/pam.conf</code> needs to be changed. I changed this file so my Domain
 users can log on both locally as well as with telnet. The following are the changes
 that I made. You can customize the <code class="filename">pam.conf</code> file as per your requirements, but
@@ -960,22 +960,22 @@
 #other session optional /usr/lib/security/$ISA/pam_krb5.so.1
 #other password optional /usr/lib/security/$ISA/pam_krb5.so.1 try_first_pass
 </pre><p>
-<a class="indexterm" name="id2679609"></a>
+<a class="indexterm" name="id438753"></a>
 I also added a <em class="parameter"><code>try_first_pass</code></em> line after the <code class="filename">winbind.so</code>
 line to get rid of annoying double prompts for passwords.
 </p><p>
 Now restart your Samba and try connecting through your application that you
 configured in the pam.conf.
-</p></div></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2679639"></a>Conclusion</h2></div></div></div><p>
-<a class="indexterm" name="id2679647"></a>
-<a class="indexterm" name="id2679654"></a>
-<a class="indexterm" name="id2679660"></a>
-<a class="indexterm" name="id2679667"></a>
-<a class="indexterm" name="id2679674"></a>
+</p></div></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id438782"></a>Conclusion</h2></div></div></div><p>
+<a class="indexterm" name="id438789"></a>
+<a class="indexterm" name="id438796"></a>
+<a class="indexterm" name="id438803"></a>
+<a class="indexterm" name="id438809"></a>
+<a class="indexterm" name="id438816"></a>
 The Winbind system, through the use of the NSS, PAMs, and appropriate Microsoft RPC calls, have allowed us to
 provide seamless integration of Microsoft Windows NT domain users on a UNIX system. The result is a great
 reduction in the administrative cost of running a mixed UNIX and NT network.
-</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2679688"></a>Common Errors</h2></div></div></div><p>
+</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id438828"></a>Common Errors</h2></div></div></div><p>
 	Winbind has a number of limitations in its current released version that we hope to overcome in future releases:
 	</p><div class="itemizedlist"><ul type="disc"><li><p>
 		Winbind is currently only available for the Linux, Solaris, AIX, and IRIX operating systems, although
@@ -989,14 +989,14 @@
 		</p></li><li><p>
 		Currently the Winbind PAM module does not take into account possible workstation and logon time
 		restrictions that may be set for Windows NT users; this is instead up to the PDC to enforce.
-		</p></li></ul></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2679730"></a>NSCD Problem Warning</h3></div></div></div><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p>
+		</p></li></ul></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id438861"></a>NSCD Problem Warning</h3></div></div></div><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p>
 	Do not under any circumstances run <code class="literal">nscd</code> on any system
 	on which <code class="literal">winbindd</code> is running.
 	</p></div><p>
 	If <code class="literal">nscd</code> is running on the UNIX/Linux system, then
 	even though NSSWITCH is correctly configured, it will not be possible to resolve
 	domain users and groups for file and directory controls.
-	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2679766"></a>Winbind Is Not Resolving Users and Groups</h3></div></div></div><p>&#8220;<span class="quote">
+	</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id438895"></a>Winbind Is Not Resolving Users and Groups</h3></div></div></div><p>&#8220;<span class="quote">
 	My <code class="filename">smb.conf</code> file is correctly configured. I have specified <a class="link" href="smb.conf.5.html#IDMAPUID">idmap uid = 12000</a>,
 	and <a class="link" href="smb.conf.5.html#IDMAPGID">idmap gid = 3000-3500</a> and <code class="literal">winbind</code> is running.
 	When I do the following, it all works fine.

Modified: branches/samba/upstream/docs/htmldocs/manpages/eventlogadm.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/eventlogadm.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/eventlogadm.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>eventlogadm</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="eventlogadm.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>eventlogadm &#8212; push records into the Samba event log store</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">eventlogadm</code> [<code class="option">-d</code>] [<code class="option">-h</code>]  <code class="option">-o</code>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>eventlogadm</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="eventlogadm.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>eventlogadm &#8212; push records into the Samba event log store</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">eventlogadm</code> [<code class="option">-d</code>] [<code class="option">-h</code>]  <code class="option">-o</code>
 		<code class="literal">addsource</code>
 		<em class="replaceable"><code>EVENTLOG</code></em>
 		<em class="replaceable"><code>SOURCENAME</code></em>
@@ -6,10 +6,10 @@
 		 </p></div><div class="cmdsynopsis"><p><code class="literal">eventlogadm</code> [<code class="option">-d</code>] [<code class="option">-h</code>]  <code class="option">-o</code>
 		<code class="literal">write</code>
 		<em class="replaceable"><code>EVENTLOG</code></em>
-		 </p></div></div><div class="refsect1" lang="en"><a name="id2507221"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.1.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(1)</span></a> suite.</p><p><code class="literal">eventlogadm</code> is a filter that accepts
+		 </p></div></div><div class="refsect1" lang="en"><a name="id282776"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.1.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(1)</span></a> suite.</p><p><code class="literal">eventlogadm</code> is a filter that accepts
 	formatted event log records on standard input and writes them
 	to the Samba event log store. Windows client can then manipulate
-	these record using the usual administration tools.</p></div><div class="refsect1" lang="en"><a name="id2507251"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term"><code class="option">-d</code></span></dt><dd><p>
+	these record using the usual administration tools.</p></div><div class="refsect1" lang="en"><a name="id283360"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term"><code class="option">-d</code></span></dt><dd><p>
 		The <code class="literal">-d</code> option causes <code class="literal">eventlogadm</code> to emit debugging
 		information.
 		</p></dd><dt><span class="term">
@@ -31,7 +31,7 @@
 		event log store named by EVENTLOG.
 		</p></dd><dt><span class="term"><code class="option">-h</code></span></dt><dd><p>
 		Print usage information.
-		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507366"></a><h2>EVENTLOG RECORD FORMAT</h2><p>For the write operation, <code class="literal">eventlogadm</code>
+		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id282924"></a><h2>EVENTLOG RECORD FORMAT</h2><p>For the write operation, <code class="literal">eventlogadm</code>
 	expects to be able to read structured records from standard
 	input. These records are a sequence of lines, with the record key
 	and data separated by a colon character. Records are separated
@@ -80,7 +80,7 @@
 		eventlog. There may be more than one string in a record.
 		</p></li><li><p>
 		<code class="literal">DAT</code> - This field should be left unset.
-		</p></li></ul></div></div><div class="refsect1" lang="en"><a name="id2506288"></a><h2>EXAMPLES</h2><p>An example of the record format accepted by <code class="literal">eventlogadm</code>:</p><pre class="programlisting">
+		</p></li></ul></div></div><div class="refsect1" lang="en"><a name="id324474"></a><h2>EXAMPLES</h2><p>An example of the record format accepted by <code class="literal">eventlogadm</code>:</p><pre class="programlisting">
 	LEN: 0
 	RS1: 1699505740
 	RCN: 0
@@ -103,7 +103,7 @@
 	tail -f /var/log/messages | \\
 		my_program_to_parse_into_eventlog_records | \\
 	      	eventlogadm SystemLogEvents
-	</pre></div><div class="refsect1" lang="en"><a name="id2506338"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2506349"></a><h2>AUTHOR</h2><p> The original Samba software and related utilities were
+	</pre></div><div class="refsect1" lang="en"><a name="id324515"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id324525"></a><h2>AUTHOR</h2><p> The original Samba software and related utilities were
 	created by Andrew Tridgell.  Samba is now developed by the
 	Samba Team as an Open Source project similar to the way the
 	Linux kernel is developed.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/findsmb.1.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/findsmb.1.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/findsmb.1.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,12 +1,12 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>findsmb</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="findsmb.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>findsmb &#8212; list info about machines that respond to SMB 
-	name queries on a subnet</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">findsmb</code> [subnet broadcast address]</p></div></div><div class="refsect1" lang="en"><a name="id2544132"></a><h2>DESCRIPTION</h2><p>This perl script is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>findsmb</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="findsmb.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>findsmb &#8212; list info about machines that respond to SMB 
+	name queries on a subnet</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">findsmb</code> [subnet broadcast address]</p></div></div><div class="refsect1" lang="en"><a name="id283737"></a><h2>DESCRIPTION</h2><p>This perl script is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a>
 	suite.</p><p><code class="literal">findsmb</code> is a perl script that
 	prints out several pieces of information about machines 
 	on a subnet that respond to SMB  name query requests.
 	It uses <a class="citerefentry" href="nmblookup.1.html"><span class="citerefentry"><span class="refentrytitle">nmblookup</span>(1)</span></a>
 	and <a class="citerefentry" href="smbclient.1.html"><span class="citerefentry"><span class="refentrytitle">smbclient</span>(1)</span></a>
 	to obtain this information.
-	</p></div><div class="refsect1" lang="en"><a name="id2507190"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-r</span></dt><dd><p>Controls whether <code class="literal">findsmb</code> takes
+	</p></div><div class="refsect1" lang="en"><a name="id282735"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-r</span></dt><dd><p>Controls whether <code class="literal">findsmb</code> takes
 		bugs in Windows95 into account when trying to find a Netbios name
 		registered of the remote machine. This option is disabled by default
 		because it is specific to Windows 95 and Windows 95 machines only. 
@@ -16,7 +16,7 @@
 		<a class="citerefentry" href="findsmb.1.html"><span class="citerefentry"><span class="refentrytitle">findsmb</span>(1)</span></a>
 		is run. This value is passed to 
 		<a class="citerefentry" href="nmblookup.1.html"><span class="citerefentry"><span class="refentrytitle">nmblookup</span>(1)</span></a>
-		as part of the <code class="constant">-B</code> option.</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507267"></a><h2>EXAMPLES</h2><p>The output of <code class="literal">findsmb</code> lists the following 
+		as part of the <code class="constant">-B</code> option.</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id283365"></a><h2>EXAMPLES</h2><p>The output of <code class="literal">findsmb</code> lists the following 
 	information for all machines that respond to the initial 
 	<code class="literal">nmblookup</code> for any name: IP address, NetBIOS name, 
 	Workgroup name, operating system, and SMB server version.</p><p>There will be a '+' in front of the workgroup name for 
@@ -48,10 +48,10 @@
 192.168.35.88   SCNT2         +[MVENGR] [Windows NT 4.0] [NT LAN Manager 4.0]
 192.168.35.93   FROGSTAR-PC    [MVENGR] [Windows 5.0] [Windows 2000 LAN Manager]
 192.168.35.97   HERBNT1       *[HERB-NT] [Windows NT 4.0] [NT LAN Manager 4.0]
-</pre></div><div class="refsect1" lang="en"><a name="id2507369"></a><h2>VERSION</h2><p>This man page is correct for version 3 of 
-	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2507380"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a>,
+</pre></div><div class="refsect1" lang="en"><a name="id282901"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of 
+	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id282911"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a>,
 	<a class="citerefentry" href="smbclient.1.html"><span class="citerefentry"><span class="refentrytitle">smbclient</span>(1)</span></a>, and <a class="citerefentry" href="nmblookup.1.html"><span class="citerefentry"><span class="refentrytitle">nmblookup</span>(1)</span></a>
-	</p></div><div class="refsect1" lang="en"><a name="id2507413"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+	</p></div><div class="refsect1" lang="en"><a name="id282944"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p>The original Samba man pages were written by Karl Auer. 

Modified: branches/samba/upstream/docs/htmldocs/manpages/idmap_ad.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/idmap_ad.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/idmap_ad.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,10 +1,10 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>idmap_ad</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="idmap_ad.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>idmap_ad &#8212; Samba's idmap_ad Backend for Winbind</p></div><div class="refsynopsisdiv"><h2>DESCRIPTION</h2><p>The idmap_ad plugin provides a way for Winbind to read
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>idmap_ad</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="idmap_ad.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>idmap_ad &#8212; Samba's idmap_ad Backend for Winbind</p></div><div class="refsynopsisdiv"><h2>DESCRIPTION</h2><p>The idmap_ad plugin provides a way for Winbind to read
 	id mappings from an AD server that uses RFC2307/SFU schema
 	extensions. This module implements only the "idmap"
 	API, and is READONLY. Mappings must be provided in advance
 	by the administrator by adding the posixAccount/posixGroup
 	classess and relative attribute/value pairs to the users and
-	groups objects in AD</p></div><div class="refsect1" lang="en"><a name="id2544126"></a><h2>IDMAP OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">range = low - high</span></dt><dd><p>
+	groups objects in AD</p></div><div class="refsect1" lang="en"><a name="id315551"></a><h2>IDMAP OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">range = low - high</span></dt><dd><p>
 			Defines the available matching uid and gid range for which the
 			backend is authoritative. Note that the range acts as a filter.
 			If specified any UID or GID stored in AD that fall outside the
@@ -16,7 +16,7 @@
 			Active Directory regarding user and group information.
 			This can either the RFC2307 schema support included
 			in Windows 2003 R2 or the Service for Unix (SFU) schema.
-		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507184"></a><h2>EXAMPLES</h2><p>
+		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id283767"></a><h2>EXAMPLES</h2><p>
 	The following example shows how to retrieve idmappings from our principal and
 	and trusted AD domains. All is needed is to set default to yes. If trusted
 	domains are present id conflicts must be resolved beforehand, there is no
@@ -33,7 +33,7 @@
 
 	idmap alloc backend = tdb
 	idmap alloc config:range        = 5000 - 9999
-	</pre></div><div class="refsect1" lang="en"><a name="id2507211"></a><h2>AUTHOR</h2><p>
+	</pre></div><div class="refsect1" lang="en"><a name="id282745"></a><h2>AUTHOR</h2><p>
 	The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar

Modified: branches/samba/upstream/docs/htmldocs/manpages/idmap_ldap.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/idmap_ldap.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/idmap_ldap.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,8 +1,8 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>idmap_ldap</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="idmap_ldap.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>idmap_ldap &#8212; Samba's idmap_ldap Backend for Winbind</p></div><div class="refsynopsisdiv"><h2>DESCRIPTION</h2><p>The idmap_ldap plugin provides a means for Winbind to
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>idmap_ldap</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="idmap_ldap.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>idmap_ldap &#8212; Samba's idmap_ldap Backend for Winbind</p></div><div class="refsynopsisdiv"><h2>DESCRIPTION</h2><p>The idmap_ldap plugin provides a means for Winbind to
 	store and retrieve SID/uid/gid mapping tables in an LDAP directory
 	service.  The module implements both the "idmap" and
 	"idmap alloc" APIs.
-	</p></div><div class="refsect1" lang="en"><a name="id2544114"></a><h2>IDMAP OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">ldap_base_dn = DN</span></dt><dd><p>
+	</p></div><div class="refsect1" lang="en"><a name="id315549"></a><h2>IDMAP OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">ldap_base_dn = DN</span></dt><dd><p>
 			Defines the directory base suffix to use when searching for
 			SID/uid/gid mapping entries.  If not defined, idmap_ldap will default
 			to using the "ldap idmap suffix" option from smb.conf.
@@ -20,7 +20,7 @@
 			store and retrieve SID/uid/gid mapping entries.  If the parameter
 			is absent, Winbind fail over to use the "idmap uid" and
 			"idmap gid" options from smb.conf.
-                </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507199"></a><h2>IDMAP ALLOC OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">ldap_base_dn = DN</span></dt><dd><p>
+                </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id282746"></a><h2>IDMAP ALLOC OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">ldap_base_dn = DN</span></dt><dd><p>
 			Defines the directory base suffix under which new SID/uid/gid mapping
 			entries should be stored.  If not defined, idmap_ldap will default
 			to using the "ldap idmap suffix" option from smb.conf.
@@ -36,7 +36,7 @@
 			winbindd can allocate for users and groups.  If the parameter
 			is absent, Winbind fail over to use the "idmap uid"
 			and "idmap gid" options from smb.conf.
-                </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507265"></a><h2>EXAMPLES</h2><p>
+                </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id283363"></a><h2>EXAMPLES</h2><p>
 	The follow sets of a LDAP configuration which uses a slave server
 	running on localhost for fast fetching SID/gid/uid mappings, it
 	implies correct configuration of referrals.
@@ -61,7 +61,7 @@
 	in plain text in the configuration file we store it into a security
 	store. The "net idmap " command is used to store a secret
 	for the DN specified in a specific idmap domain.
-	</p></div><div class="refsect1" lang="en"><a name="id2507312"></a><h2>AUTHOR</h2><p>
+	</p></div><div class="refsect1" lang="en"><a name="id283398"></a><h2>AUTHOR</h2><p>
 	The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar

Modified: branches/samba/upstream/docs/htmldocs/manpages/idmap_nss.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/idmap_nss.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/idmap_nss.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,10 +1,10 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>idmap_nss</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="idmap_nss.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>idmap_nss &#8212; Samba's idmap_nss Backend for Winbind</p></div><div class="refsynopsisdiv"><h2>DESCRIPTION</h2><p>The idmap_nss plugin provides a means to map Unix users and groups
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>idmap_nss</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="idmap_nss.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>idmap_nss &#8212; Samba's idmap_nss Backend for Winbind</p></div><div class="refsynopsisdiv"><h2>DESCRIPTION</h2><p>The idmap_nss plugin provides a means to map Unix users and groups
 	to Windows accounts and obseletes the "winbind trusted domains only"
 	smb.conf option.  This provides a simple means of ensuring that the SID
 	for a Unix user named jsmith is reported as the one assigned to
 	DOMAIN\jsmith which is necessary for reporting ACLs on files and printers
 	stored on a Samba member server.
-	</p></div><div class="refsect1" lang="en"><a name="id2544126"></a><h2>EXAMPLES</h2><p>
+	</p></div><div class="refsect1" lang="en"><a name="id315551"></a><h2>EXAMPLES</h2><p>
 	This example shows how to use idmap_nss to check the local accounts for its
 	own domain while using allocation to create new mappings for trusted domains
 	</p><pre class="programlisting">
@@ -20,7 +20,7 @@
 
 	    idmap alloc backend      = tdb
 	    idmap alloc config:range = 10000 - 50000
-	</pre></div><div class="refsect1" lang="en"><a name="id2544150"></a><h2>AUTHOR</h2><p>
+	</pre></div><div class="refsect1" lang="en"><a name="id283749"></a><h2>AUTHOR</h2><p>
 	The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar

Modified: branches/samba/upstream/docs/htmldocs/manpages/idmap_rid.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/idmap_rid.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/idmap_rid.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,6 +1,6 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>idmap_rid</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="idmap_rid.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>idmap_rid &#8212; Samba's idmap_rid Backend for Winbind</p></div><div class="refsynopsisdiv"><h2>DESCRIPTION</h2><p>The idmap_rid backend provides a way to use an algorithmic
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>idmap_rid</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="idmap_rid.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>idmap_rid &#8212; Samba's idmap_rid Backend for Winbind</p></div><div class="refsynopsisdiv"><h2>DESCRIPTION</h2><p>The idmap_rid backend provides a way to use an algorithmic
 	mapping scheme to map UIDs/GIDs and SIDs. No database is required
-	in this case as the mapping is deterministic.</p></div><div class="refsect1" lang="en"><a name="id2544122"></a><h2>IDMAP OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">range = low - high</span></dt><dd><p>
+	in this case as the mapping is deterministic.</p></div><div class="refsect1" lang="en"><a name="id315549"></a><h2>IDMAP OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">range = low - high</span></dt><dd><p>
 			Defines the available matching uid and gid range for which the
 			backend is authoritative. Note that the range acts as a filter.
 			If algorithmically determined UID or GID fall outside the
@@ -13,7 +13,7 @@
 			by default start at 1000 (512 hexadecimal), this means a good value
 			for base_rid can be 1000 as the resulting ID is calculated this way:
 			ID = RID - BASE_RID + LOW RANGE ID.
-		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2544166"></a><h2>EXAMPLES</h2><p>This example shows how to configure 2 domains with idmap_rid</p><pre class="programlisting">
+		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id283765"></a><h2>EXAMPLES</h2><p>This example shows how to configure 2 domains with idmap_rid</p><pre class="programlisting">
 	[global]
 	    idmap domains = MAIN TRUSTED1
 
@@ -24,7 +24,7 @@
 	    idmap config TRUSTED1:backend  = rid
 	    idmap config TRUSTED1:base_rid = 1000
 	    idmap config TRUSTED1:range    = 50000 - 99999
-	</pre></div><div class="refsect1" lang="en"><a name="id2507203"></a><h2>AUTHOR</h2><p>
+	</pre></div><div class="refsect1" lang="en"><a name="id282739"></a><h2>AUTHOR</h2><p>
 	The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar

Modified: branches/samba/upstream/docs/htmldocs/manpages/idmap_tdb.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/idmap_tdb.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/idmap_tdb.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,19 +1,19 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>idmap_tdb</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="idmap_tdb.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>idmap_tdb &#8212; Samba's idmap_tdb Backend for Winbind</p></div><div class="refsynopsisdiv"><h2>DESCRIPTION</h2><p>The idmap_tdb plugin is the default backend used by winbindd
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>idmap_tdb</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="idmap_tdb.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>idmap_tdb &#8212; Samba's idmap_tdb Backend for Winbind</p></div><div class="refsynopsisdiv"><h2>DESCRIPTION</h2><p>The idmap_tdb plugin is the default backend used by winbindd
 	for storing SID/uid/gid mapping tables and implements
 	both the "idmap" and "idmap alloc" APIs.
-	</p></div><div class="refsect1" lang="en"><a name="id2544122"></a><h2>IDMAP OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">range = low - high</span></dt><dd><p>
+	</p></div><div class="refsect1" lang="en"><a name="id315549"></a><h2>IDMAP OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">range = low - high</span></dt><dd><p>
 			Defines the available matching uid and gid range for which the
 			backend is authoritative.  Note that the range commonly matches
 			the allocation range due to the fact that the same backend will
 			store and retrieve SID/uid/gid mapping entries.  If the parameter
 			is absent, Winbind fail over to use the "idmap uid" and
 			"idmap gid" options from smb.conf.
-                </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2544149"></a><h2>IDMAP ALLOC OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">range = low - high</span></dt><dd><p>
+                </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id283751"></a><h2>IDMAP ALLOC OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">range = low - high</span></dt><dd><p>
 			Defines the available matching uid and gid range from which
 			winbindd can allocate for users and groups.  If the parameter
 			is absent, Winbind fail over to use the "idmap uid"
 			and "idmap gid" options from smb.conf.
-                </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507192"></a><h2>EXAMPLES</h2><p>
+                </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id282732"></a><h2>EXAMPLES</h2><p>
 	The following example is equivalent to the pre-3.0.25 default idmap
 	configuration using the "idmap backend = tdb" setting.
 	</p><pre class="programlisting">
@@ -25,7 +25,7 @@
 
 	    idmap alloc backend = tdb
 	    idmap alloc config:range = 10000 - 50000
-	</pre></div><div class="refsect1" lang="en"><a name="id2507212"></a><h2>AUTHOR</h2><p>
+	</pre></div><div class="refsect1" lang="en"><a name="id282751"></a><h2>AUTHOR</h2><p>
 	The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar

Modified: branches/samba/upstream/docs/htmldocs/manpages/index.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/index.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/index.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title></title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article" lang="en"><div class="titlepage"><hr></div><div class="variablelist"><dl><dt><span class="term"><a class="ulink" href="eventlogadm.8.html" target="_top">eventlogadm(8)</a></span></dt><dd><p>push records into the Samba event log store
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title></title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article" lang="en"><div class="titlepage"><hr></div><div class="variablelist"><dl><dt><span class="term"><a class="ulink" href="eventlogadm.8.html" target="_top">eventlogadm(8)</a></span></dt><dd><p>push records into the Samba event log store
 </p></dd><dt><span class="term"><a class="ulink" href="findsmb.1.html" target="_top">findsmb(1)</a></span></dt><dd><p>list info about machines that respond to SMB 
 	name queries on a subnet
 </p></dd><dt><span class="term"><a class="ulink" href="idmap_ad.8.html" target="_top">idmap_ad(8)</a></span></dt><dd><p>Samba's idmap_ad Backend for Winbind
@@ -6,12 +6,6 @@
 </p></dd><dt><span class="term"><a class="ulink" href="idmap_nss.8.html" target="_top">idmap_nss(8)</a></span></dt><dd><p>Samba's idmap_nss Backend for Winbind
 </p></dd><dt><span class="term"><a class="ulink" href="idmap_rid.8.html" target="_top">idmap_rid(8)</a></span></dt><dd><p>Samba's idmap_rid Backend for Winbind
 </p></dd><dt><span class="term"><a class="ulink" href="idmap_tdb.8.html" target="_top">idmap_tdb(8)</a></span></dt><dd><p>Samba's idmap_tdb Backend for Winbind
-</p></dd><dt><span class="term"><a class="ulink" href="ldb.3.html" target="_top">ldb(3)</a></span></dt><dd><p>A light-weight database library
-</p></dd><dt><span class="term"><a class="ulink" href="ldbadd.1.html" target="_top">ldbadd(1)</a></span></dt><dd><p>Command-line utility for adding records to an LDB
-</p></dd><dt><span class="term"><a class="ulink" href="ldbdel.1.html" target="_top">ldbdel(1)</a></span></dt><dd><p>Command-line program for deleting LDB records
-</p></dd><dt><span class="term"><a class="ulink" href="ldbedit.1.html" target="_top">ldbedit(1)</a></span></dt><dd><p>Edit LDB databases using your preferred editor
-</p></dd><dt><span class="term"><a class="ulink" href="ldbmodify.1.html" target="_top">ldbmodify(1)</a></span></dt><dd><p>Modify records in a LDB database
-</p></dd><dt><span class="term"><a class="ulink" href="ldbsearch.1.html" target="_top">ldbsearch(1)</a></span></dt><dd><p>Search for records in a LDB database
 </p></dd><dt><span class="term"><a class="ulink" href="libsmbclient.7.html" target="_top">libsmbclient(7)</a></span></dt><dd><p>An extension library for browsers and that can be used as a generic browsing API.
 </p></dd><dt><span class="term"><a class="ulink" href="lmhosts.5.html" target="_top">lmhosts(5)</a></span></dt><dd><p>The Samba NetBIOS hosts file
 </p></dd><dt><span class="term"><a class="ulink" href="log2pcap.1.html" target="_top">log2pcap(1)</a></span></dt><dd><p>Extract network traces from Samba log files
@@ -40,6 +34,8 @@
 </p></dd><dt><span class="term"><a class="ulink" href="smbd.8.html" target="_top">smbd(8)</a></span></dt><dd><p>server to provide SMB/CIFS services to clients
 </p></dd><dt><span class="term"><a class="ulink" href="smbget.1.html" target="_top">smbget(1)</a></span></dt><dd><p>wget-like utility for download files over SMB
 </p></dd><dt><span class="term"><a class="ulink" href="smbgetrc.5.html" target="_top">smbgetrc(5)</a></span></dt><dd><p>configuration file for smbget
+</p></dd><dt><span class="term"><a class="ulink" href="smbmnt.8.html" target="_top">smbmnt(8)</a></span></dt><dd><p>helper utility for mounting SMB filesystems
+</p></dd><dt><span class="term"><a class="ulink" href="smbmount.8.html" target="_top">smbmount(8)</a></span></dt><dd><p>mount an smbfs filesystem
 </p></dd><dt><span class="term"><a class="ulink" href="smbpasswd.5.html" target="_top">smbpasswd(5)</a></span></dt><dd><p>The Samba encrypted password file
 </p></dd><dt><span class="term"><a class="ulink" href="smbpasswd.8.html" target="_top">smbpasswd(8)</a></span></dt><dd><p>change a user's SMB password
 </p></dd><dt><span class="term"><a class="ulink" href="smbsh.1.html" target="_top">smbsh(1)</a></span></dt><dd><p>Allows access to remote SMB shares
@@ -50,6 +46,7 @@
 	directly to UNIX tape drives
 </p></dd><dt><span class="term"><a class="ulink" href="smbtree.1.html" target="_top">smbtree(1)</a></span></dt><dd><p>A text based smb network browser
 	
+</p></dd><dt><span class="term"><a class="ulink" href="smbumount.8.html" target="_top">smbumount(8)</a></span></dt><dd><p>smbfs umount for normal users
 </p></dd><dt><span class="term"><a class="ulink" href="swat.8.html" target="_top">swat(8)</a></span></dt><dd><p>Samba Web Administration Tool
 </p></dd><dt><span class="term"><a class="ulink" href="tdbbackup.8.html" target="_top">tdbbackup(8)</a></span></dt><dd><p>tool for backing up and for validating the integrity of samba .tdb files
 </p></dd><dt><span class="term"><a class="ulink" href="tdbdump.8.html" target="_top">tdbdump(8)</a></span></dt><dd><p>tool for printing the contents of a TDB file

Deleted: branches/samba/upstream/docs/htmldocs/manpages/ldb.3.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/ldb.3.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/ldb.3.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,137 +0,0 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ldb</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="ldb.3"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ldb<p><b>The Samba Project</b></p> &#8212; A light-weight database library</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">#include &lt;ldb.h&gt;</pre></div><div class="refsect1" lang="en"><a name="id2544118"></a><h2>description</h2><p>
-ldb is a light weight embedded database library and API. With a
-programming interface that is very similar to LDAP, ldb can store its
-data either in a tdb(3) database or in a real LDAP database.
-	</p><p>
-When used with the tdb backend ldb does not require any database
-daemon. Instead, ldb function calls are processed immediately by the
-ldb library, which does IO directly on the database, while allowing
-multiple readers/writers using operating system byte range locks. This
-leads to an API with very low overheads, often resulting in speeds of
-more than 10x what can be achieved with a more traditional LDAP
-architecture.
-	</p><p>
-In a taxonomy of databases ldb would sit half way between key/value
-pair databases (such as berkley db or tdb) and a full LDAP
-database. With a structured attribute oriented API like LDAP and good
-indexing capabilities, ldb can be used for quite sophisticated
-applications that need a light weight database, without the
-administrative overhead of a full LDAP installation.
-	</p><p>
-Included with ldb are a number of useful command line tools for
-manipulating a ldb database. These tools are similar in style to the
-equivalent ldap command line tools.
-	</p><p>
-In its default mode of operation with a tdb backend, ldb can also be
-seen as a "schema-less LDAP". By default ldb does not require a
-schema, which greatly reduces the complexity of getting started with
-ldb databases. As the complexity of you application grows you can take
-advantage of some of the optional schema-like attributes that ldb
-offers, or you can migrate to using the full LDAP api while keeping
-your exiting ldb code.
-	</p><p>
-If you are new to ldb, then I suggest starting with the manual pages
-for ldbsearch(1) and ldbedit(1), and experimenting with a local
-database. Then I suggest you look at the ldb_connect(3) and
-ldb_search(3) manual pages.
-	</p></div><div class="refsect1" lang="en"><a name="id2507200"></a><h2>TOOLS</h2><div class="itemizedlist"><ul type="disc"><li><p>
-			<span class="application">ldbsearch(1)</span>
-			  - command line ldb search utility
-		</p></li><li><p>
-			<span class="application">ldbedit(1)</span>
-			 - edit all or part of a ldb database using your favourite editor
-		</p></li><li><p>
-			<span class="application">ldbadd(1)</span>
-			 - add records to a ldb database using LDIF formatted input
-		</p></li><li><p>
-			<span class="application">ldbdel(1)</span>
-			 - delete records from a ldb database
-		</p></li><li><p>
-			<span class="application">ldbmodify(1)</span>
-			 - modify records in a ldb database using LDIF formatted input
-		</p></li></ul></div></div><div class="refsect1" lang="en"><a name="id2507265"></a><h2>FUNCTIONS</h2><div class="itemizedlist"><ul type="disc"><li><p>
-			<code class="function">ldb_connect(3)</code>
-			 - connect to a ldb backend
-		</p></li><li><p>
-			<code class="function">ldb_search(3)</code>
-			 - perform a database search
-		</p></li><li><p>
-			<code class="function">ldb_add(3)</code>
-			 - add a record to the database
-		</p></li><li><p>
-			<code class="function">ldb_delete(3)</code>
-			 - delete a record from the database
-		</p></li><li><p>
-			<code class="function">ldb_modify(3)</code>
-			 - modify a record in the database
-		</p></li><li><p>
-			<code class="function">ldb_errstring(3)</code>
-			 - retrieve extended error information from the last operation
-		</p></li><li><p>
-			<code class="function">ldb_ldif_write(3)</code>
-			 - write a LDIF formatted message
-		</p></li><li><p>
-			<code class="function">ldb_ldif_write_file(3)</code>
-			 - write a LDIF formatted message to a file
-		</p></li><li><p>
-			<code class="function">ldb_ldif_read(3)</code>
-			 - read a LDIF formatted message
-		</p></li><li><p>
-			<code class="function">ldb_ldif_read_free(3)</code>
-			 - free the result of a ldb_ldif_read()
-		</p></li><li><p>
-			<code class="function">ldb_ldif_read_file(3)</code>
-			 - read a LDIF message from a file
-		</p></li><li><p>
-			<code class="function">ldb_ldif_read_string(3)</code>
-			 - read a LDIF message from a string
-		</p></li><li><p>
-			<code class="function">ldb_msg_find_element(3)</code>
-			 - find an element in a ldb_message
-		</p></li><li><p>
-			<code class="function">ldb_val_equal_exact(3)</code>
-			 - compare two ldb_val structures
-		</p></li><li><p>
-			<code class="function">ldb_msg_find_val(3)</code>
-			 - find an element by value
-		</p></li><li><p>
-			<code class="function">ldb_msg_add_empty(3)</code>
-			 - add an empty message element to a ldb_message
-		</p></li><li><p>
-			<code class="function">ldb_msg_add(3)</code>
-			 - add a non-empty message element to a ldb_message
-		</p></li><li><p>
-			<code class="function">ldb_msg_element_compare(3)</code>
-			 - compare two ldb_message_element structures
-		</p></li><li><p>
-			<code class="function">ldb_msg_find_int(3)</code>
-			 - return an integer value from a ldb_message
-		</p></li><li><p>
-			<code class="function">ldb_msg_find_uint(3)</code>
-			 - return an unsigned integer value from a ldb_message
-		</p></li><li><p>
-			<code class="function">ldb_msg_find_double(3)</code>
-			 - return a double value from a ldb_message
-		</p></li><li><p>
-			<code class="function">ldb_msg_find_string(3)</code>
-			 - return a string value from a ldb_message
-		</p></li><li><p>
-			<code class="function">ldb_set_alloc(3)</code>
-			 - set the memory allocation function to be used by ldb
-		</p></li><li><p>
-			<code class="function">ldb_set_debug(3)</code>
-			 - set a debug handler to be used by ldb
-		</p></li><li><p>
-			<code class="function">ldb_set_debug_stderr(3)</code>
-			 - set a debug handler for stderr output
-		</p></li></ul></div></div><div class="refsect1" lang="en"><a name="id2506267"></a><h2>Author</h2><p>
-		ldb was written by 
-		 <a class="ulink" href="http://samba.org/~tridge/" target="_top">Andrew Tridgell</a>.
-	</p><p>
-If you wish to report a problem or make a suggestion then please see
-the <a class="ulink" href="http://ldb.samba.org/" target="_top">http://ldb.samba.org/</a> web site for
-current contact and maintainer information.
-	</p><p>
-ldb is released under the GNU Lesser General Public License version 2
-or later. Please see the file COPYING for license details.
-	</p></div></div></body></html>

Deleted: branches/samba/upstream/docs/htmldocs/manpages/ldbadd.1.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/ldbadd.1.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/ldbadd.1.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,16 +0,0 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ldbadd</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="ldbadd.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ldbadd &#8212; Command-line utility for adding records to an LDB</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">ldbadd</code> [-h] [-H LDB-URL] [ldif-file1] [ldif-file2] [...]</p></div></div><div class="refsect1" lang="en"><a name="id2544159"></a><h2>DESCRIPTION</h2><p>ldbadd adds records to an ldb(7) database. It reads 
-		the ldif(5) files specified on the command line and adds 
-		the records from these files to the LDB database, which is specified 
-		by the -H option or the LDB_URL environment variable.
-	</p><p>If - is specified as a ldb file, the ldif input is read from 
-		standard input.</p></div><div class="refsect1" lang="en"><a name="id2507197"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-h</span></dt><dd><p>
-		Show list of available options.</p></dd><dt><span class="term">-H &lt;ldb-url&gt;</span></dt><dd><p>
-				LDB URL to connect to. See ldb(7) for details.
-			</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507230"></a><h2>ENVIRONMENT</h2><div class="variablelist"><dl><dt><span class="term">LDB_URL</span></dt><dd><p>LDB URL to connect to (can be overrided by using the 
-					-H command-line option.)</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507251"></a><h2>VERSION</h2><p>This man page is correct for version 4.0 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2507262"></a><h2>SEE ALSO</h2><p>ldb(7), ldbmodify, ldbdel, ldif(5)</p></div><div class="refsect1" lang="en"><a name="id2507272"></a><h2>AUTHOR</h2><p> ldb was written by 
-		 <a class="ulink" href="http://samba.org/~tridge/" target="_top">Andrew Tridgell</a>.
-	</p><p>
-If you wish to report a problem or make a suggestion then please see
-the <a class="ulink" href="http://ldb.samba.org/" target="_top">http://ldb.samba.org/</a> web site for
-current contact and maintainer information.
-	</p><p>This manpage was written by Jelmer Vernooij.</p></div></div></body></html>

Deleted: branches/samba/upstream/docs/htmldocs/manpages/ldbdel.1.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/ldbdel.1.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/ldbdel.1.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,15 +0,0 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ldbdel</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="ldbdel.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ldbdel &#8212; Command-line program for deleting LDB records</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">ldbdel</code> [-h] [-H LDB-URL] [dn] [...]</p></div></div><div class="refsect1" lang="en"><a name="id2544151"></a><h2>DESCRIPTION</h2><p>ldbdel deletes records from an ldb(7) database. 
-		It deletes the records identified by the dn's specified 
-		on the command-line. </p><p>ldbdel uses either the database that is specified with 
-		the -H option or the database specified by the LDB_URL environment
-		variable.</p></div><div class="refsect1" lang="en"><a name="id2507187"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-h</span></dt><dd><p>
-		Show list of available options.</p></dd><dt><span class="term">-H &lt;ldb-url&gt;</span></dt><dd><p>
-				LDB URL to connect to. See ldb(7) for details.
-			</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507220"></a><h2>ENVIRONMENT</h2><div class="variablelist"><dl><dt><span class="term">LDB_URL</span></dt><dd><p>LDB URL to connect to (can be overrided by using the 
-					-H command-line option.)</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507242"></a><h2>VERSION</h2><p>This man page is correct for version 4.0 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2507253"></a><h2>SEE ALSO</h2><p>ldb(7), ldbmodify, ldbadd, ldif(5)</p></div><div class="refsect1" lang="en"><a name="id2507262"></a><h2>AUTHOR</h2><p> ldb was written by 
-		 <a class="ulink" href="http://samba.org/~tridge/" target="_top">Andrew Tridgell</a>.
-	</p><p>
-If you wish to report a problem or make a suggestion then please see
-the <a class="ulink" href="http://ldb.samba.org/" target="_top">http://ldb.samba.org/</a> web site for
-current contact and maintainer information.
-	</p><p>ldbdel was written by Andrew Tridgell.</p><p>This manpage was written by Jelmer Vernooij.</p></div></div></body></html>

Deleted: branches/samba/upstream/docs/htmldocs/manpages/ldbedit.1.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/ldbedit.1.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/ldbedit.1.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,54 +0,0 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ldbedit</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="ldbedit.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ldbedit &#8212; Edit LDB databases using your preferred editor</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">ldbedit</code> [-?] [--usage] [-s base|one|sub] [-b basedn] [-a] [-e editor] [-H LDB-URL] [expression] [attributes...]</p></div></div><div class="refsect1" lang="en"><a name="id2507209"></a><h2>DESCRIPTION</h2><p>ldbedit is a utility that allows you to edit LDB entries (in 
-	    tdb files, sqlite files or LDAP servers) using your preferred editor.
-	    ldbedit generates an LDIF file based on your query, allows you to edit
-	    the LDIF, and then merges that LDIF back into the LDB backend.
-	</p></div><div class="refsect1" lang="en"><a name="id2507224"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-?, </span><span class="term">--help</span></dt><dd><p>
-			Show list of available options, and a phrase describing what that option
-			does.
-		    </p></dd><dt><span class="term">--usage</span></dt><dd><p>
-			Show list of available options. This is similar to the help option, 
-			however it does not provide any description, and is hence shorter.
-		    </p></dd><dt><span class="term">-H &lt;ldb-url&gt;</span></dt><dd><p>
-			LDB URL to connect to. For a tdb database,
-			this will be of the form
-			tdb://<em class="replaceable"><code>filename</code></em>.
-			For a LDAP connection over unix domain
-			sockets, this will be of the form
-			ldapi://<em class="replaceable"><code>socket</code></em>. For
-			a (potentially remote) LDAP connection over
-			TCP, this will be of the form
-			ldap://<em class="replaceable"><code>hostname</code></em>. For
-			an SQLite database, this will be of the form
-			sqlite://<em class="replaceable"><code>filename</code></em>.
-		    </p></dd><dt><span class="term">-s one|sub|base</span></dt><dd><p>Search scope to use. One-level, subtree or base.</p></dd><dt><span class="term">-a, </span><span class="term">-all</span></dt><dd><p>Edit all records. This allows you to
-			apply the same change to a number of records
-			at once. You probably want to combine this
-			with an expression of the form
-			"objectclass=*".
-		    </p></dd><dt><span class="term">-e editor, </span><span class="term">--editor editor</span></dt><dd><p>Specify the editor that should be used (overrides 
-			the VISUAL and EDITOR environment
-			variables). If this option is not used, and
-			neither VISUAL nor EDITOR environment variables
-			are set, then the vi editor will be used.
-		    </p></dd><dt><span class="term">-b basedn</span></dt><dd><p>Specify Base Distinguished Name to use.</p></dd><dt><span class="term">-v, </span><span class="term">--verbose</span></dt><dd><p>Make ldbedit more verbose about the
-			operations that are being performed. Without
-			this option, ldbedit will only provide a
-			summary change line.
-		    </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507384"></a><h2>ENVIRONMENT</h2><div class="variablelist"><dl><dt><span class="term">LDB_URL</span></dt><dd><p>LDB URL to connect to. This can be
-		    overridden by using the -H command-line option.)
-		    </p></dd><dt><span class="term">VISUAL and EDITOR</span></dt><dd><p>
-			Environment variables used to determine what 
-			editor to use. VISUAL takes precedence over
-			EDITOR, and both are overridden by the
-			-e command-line option.
-		    </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507425"></a><h2>VERSION</h2><p>This man page is correct for version 4.0 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2507436"></a><h2>SEE ALSO</h2><p>ldb(7), ldbmodify(1), ldbdel(1), ldif(5), vi(1)</p></div><div class="refsect1" lang="en"><a name="id2507447"></a><h2>AUTHOR</h2><p>
-	    ldb was written by 
-	    <a class="ulink" href="http://samba.org/~tridge/" target="_top">Andrew Tridgell</a>.
-	</p><p>
-	    If you wish to report a problem or make a suggestion then please see
-	    the <a class="ulink" href="http://ldb.samba.org/" target="_top">http://ldb.samba.org/</a> web site for
-	    current contact and maintainer information.
-	</p><p>
-	    This manpage was written by Jelmer Vernooij and updated
-	    by Brad Hards.
-	</p></div></div></body></html>

Deleted: branches/samba/upstream/docs/htmldocs/manpages/ldbmodify.1.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/ldbmodify.1.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/ldbmodify.1.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,14 +0,0 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ldbmodify</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="ldbmodify.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ldbmodify &#8212; Modify records in a LDB database</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">ldbmodify</code> [-H LDB-URL] [ldif-file]</p></div></div><div class="refsect1" lang="en"><a name="id2544138"></a><h2>DESCRIPTION</h2><p>
-		ldbmodify changes, adds and deletes records in a LDB database. 
-		The changes that should be made to the LDB database are read from 
-		the specified LDIF-file. If - is specified as the filename, input is read from stdin.
-	</p><p>For now, see ldapmodify(1) for details on the LDIF file format.</p></div><div class="refsect1" lang="en"><a name="id2544156"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-H &lt;ldb-url&gt;</span></dt><dd><p>
-				LDB URL to connect to. See ldb(7) for details.
-			</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507195"></a><h2>ENVIRONMENT</h2><div class="variablelist"><dl><dt><span class="term">LDB_URL</span></dt><dd><p>LDB URL to connect to (can be overrided by using the 
-					-H command-line option.)</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507216"></a><h2>VERSION</h2><p>This man page is correct for version 4.0 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2507227"></a><h2>SEE ALSO</h2><p>ldb(7), ldbedit</p></div><div class="refsect1" lang="en"><a name="id2507237"></a><h2>AUTHOR</h2><p> ldb was written by 
-		 <a class="ulink" href="http://samba.org/~tridge/" target="_top">Andrew Tridgell</a>.
-	</p><p>
-If you wish to report a problem or make a suggestion then please see
-the <a class="ulink" href="http://ldb.samba.org/" target="_top">http://ldb.samba.org/</a> web site for
-current contact and maintainer information.
-	</p><p>This manpage was written by Jelmer Vernooij.</p></div></div></body></html>

Deleted: branches/samba/upstream/docs/htmldocs/manpages/ldbsearch.1.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/ldbsearch.1.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/ldbsearch.1.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,15 +0,0 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ldbsearch</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="ldbsearch.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ldbsearch &#8212; Search for records in a LDB database</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">ldbsearch</code> [-h] [-s base|one|sub] [-b basedn] [-i] [-H LDB-URL] [expression] [attributes]</p></div></div><div class="refsect1" lang="en"><a name="id2507194"></a><h2>DESCRIPTION</h2><p>ldbsearch searches a LDB database for records matching the 
-		specified expression (see the ldapsearch(1) manpage for 
-		a description of the expression format). For each 
-		record, the specified attributes are printed.
-	</p></div><div class="refsect1" lang="en"><a name="id2507208"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-h</span></dt><dd><p>
-		Show list of available options.</p></dd><dt><span class="term">-H &lt;ldb-url&gt;</span></dt><dd><p>
-				LDB URL to connect to. See ldb(7) for details.
-			</p></dd><dt><span class="term">-s one|sub|base</span></dt><dd><p>Search scope to use. One-level, subtree or base.</p></dd><dt><span class="term">-i</span></dt><dd><p>Read search expressions from stdin. </p></dd><dt><span class="term">-b basedn</span></dt><dd><p>Specify Base DN to use.</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507275"></a><h2>ENVIRONMENT</h2><div class="variablelist"><dl><dt><span class="term">LDB_URL</span></dt><dd><p>LDB URL to connect to (can be overrided by using the 
-					-H command-line option.)</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507296"></a><h2>VERSION</h2><p>This man page is correct for version 4.0 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2507307"></a><h2>SEE ALSO</h2><p>ldb(7), ldbedit(1)</p></div><div class="refsect1" lang="en"><a name="id2507318"></a><h2>AUTHOR</h2><p> ldb was written by 
-		 <a class="ulink" href="http://samba.org/~tridge/" target="_top">Andrew Tridgell</a>.
-	</p><p>
-If you wish to report a problem or make a suggestion then please see
-the <a class="ulink" href="http://ldb.samba.org/" target="_top">http://ldb.samba.org/</a> web site for
-current contact and maintainer information.
-	</p><p>This manpage was written by Jelmer Vernooij.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/libsmbclient.7.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/libsmbclient.7.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/libsmbclient.7.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,6 +1,6 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>libsmbclient</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="libsmbclient.7"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>libsmbclient &#8212; An extension library for browsers and that can be used as a generic browsing API.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">Browser URL:</code><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>libsmbclient</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="libsmbclient.7"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>libsmbclient &#8212; An extension library for browsers and that can be used as a generic browsing API.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">Browser URL:</code><p>
         smb://[[[domain:]user[:password@]]server[/share[/path[/file]]]] [?options]
-    </p></p></div></div><div class="refsect1" lang="en"><a name="id2544120"></a><h2>DESCRIPTION</h2><p>
+    </p></p></div></div><div class="refsect1" lang="en"><a name="id283733"></a><h2>DESCRIPTION</h2><p>
 	This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.
 	</p><p>
 	<code class="literal">libsmbclient</code> is a library toolset that permits applications to manipulate CIFS/SMB network
@@ -12,7 +12,7 @@
 	<code class="literal">libsmbclient</code> can not be used directly from the command line, instead it provides an
 	extension of the capabilities of tools such as file managers and browsers.  This man page describes the
 	configuration options for this tool so that the user may obtain greatest utility of use.
-	</p></div><div class="refsect1" lang="en"><a name="id2507185"></a><h2>OPTIONS</h2><p>
+	</p></div><div class="refsect1" lang="en"><a name="id282731"></a><h2>OPTIONS</h2><p>
 	What the URLs mean:
 	</p><div class="variablelist"><dl><dt><span class="term">smb://</span></dt><dd><p>
 			Shows all workgroups or domains that are visible in the network. The behavior matches
@@ -44,11 +44,11 @@
 	<code class="literal">libsmbclient</code> will check the users shell environment for the <code class="literal">USER</code>
 	parameter and will use its value when if the <code class="literal">user</code> parameter was not included
 	in the URL.
-	</p></div><div class="refsect1" lang="en"><a name="id2507325"></a><h2>PROGRAMMERS GUIDE</h2><p>
+	</p></div><div class="refsect1" lang="en"><a name="id283406"></a><h2>PROGRAMMERS GUIDE</h2><p>
 	Watch this space for future updates.
-	</p></div><div class="refsect1" lang="en"><a name="id2507336"></a><h2>VERSION</h2><p>
-	This man page is correct for version 3 of the Samba suite.
-	</p></div><div class="refsect1" lang="en"><a name="id2507347"></a><h2>AUTHOR</h2><p>
+	</p></div><div class="refsect1" lang="en"><a name="id283415"></a><h2>VERSION</h2><p>
+	This man page is correct for version 3.0 of the Samba suite.
+	</p></div><div class="refsect1" lang="en"><a name="id283425"></a><h2>AUTHOR</h2><p>
 	The original Samba software and related utilities were created by Andrew Tridgell.
 	Samba is now developed by the Samba Team as an Open Source project similar to the way
 	the Linux kernel is developed.

Modified: branches/samba/upstream/docs/htmldocs/manpages/lmhosts.5.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/lmhosts.5.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/lmhosts.5.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,8 +1,8 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>lmhosts</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="lmhosts.5"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>lmhosts &#8212; The Samba NetBIOS hosts file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">lmhosts</code> is the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> NetBIOS name to IP address mapping file.</p></div><div class="refsect1" lang="en"><a name="id2544128"></a><h2>DESCRIPTION</h2><p>This file is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="filename">lmhosts</code> is the <span class="emphasis"><em>Samba
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>lmhosts</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="lmhosts.5"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>lmhosts &#8212; The Samba NetBIOS hosts file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">lmhosts</code> is the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> NetBIOS name to IP address mapping file.</p></div><div class="refsect1" lang="en"><a name="id283735"></a><h2>DESCRIPTION</h2><p>This file is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="filename">lmhosts</code> is the <span class="emphasis"><em>Samba
 	</em></span> NetBIOS name to IP address mapping file.  It 
 	is very similar to the <code class="filename">/etc/hosts</code> file 
 	format, except that the hostname component must correspond 
-	to the NetBIOS naming format.</p></div><div class="refsect1" lang="en"><a name="id2544166"></a><h2>FILE FORMAT</h2><p>It is an ASCII file containing one line for NetBIOS name. 
+	to the NetBIOS naming format.</p></div><div class="refsect1" lang="en"><a name="id282728"></a><h2>FILE FORMAT</h2><p>It is an ASCII file containing one line for NetBIOS name. 
 	The two fields on each line are separated from each other by 
 	white space. Any entry beginning with '#' is ignored. Each line 
 	in the lmhosts file contains the following information:</p><div class="itemizedlist"><ul type="disc"><li><p>IP Address - in dotted decimal format.</p></li><li><p>NetBIOS Name - This name format is a 
@@ -25,10 +25,10 @@
 	the NetBIOS name requested.</p><p>The second mapping will be returned only when the "0x20" name 
 	type for a name "NTSERVER" is queried. Any other name type will not 
 	be resolved.</p><p>The default location of the <code class="filename">lmhosts</code> file 
-	is in the same directory as the <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a> file.</p></div><div class="refsect1" lang="en"><a name="id2507261"></a><h2>FILES</h2><p>lmhosts is loaded from the configuration directory. This is 
+	is in the same directory as the <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a> file.</p></div><div class="refsect1" lang="en"><a name="id283354"></a><h2>FILES</h2><p>lmhosts is loaded from the configuration directory. This is 
 		usually <code class="filename">/etc/samba</code> or <code class="filename">/usr/local/samba/lib</code>.
-	</p></div><div class="refsect1" lang="en"><a name="id2507284"></a><h2>VERSION</h2><p>This man page is correct for version 3 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2507295"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="smbclient.1.html"><span class="citerefentry"><span class="refentrytitle">smbclient</span>(1)</span></a>, <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a>, and <a class="citerefentry" href="smbpasswd.8.html"><span class="citerefentry"><span class="refentrytitle">smbpasswd</span>(8)</span></a>
-	</p></div><div class="refsect1" lang="en"><a name="id2507329"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+	</p></div><div class="refsect1" lang="en"><a name="id283375"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id283385"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="smbclient.1.html"><span class="citerefentry"><span class="refentrytitle">smbclient</span>(1)</span></a>, <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a>, and <a class="citerefentry" href="smbpasswd.8.html"><span class="citerefentry"><span class="refentrytitle">smbpasswd</span>(8)</span></a>
+	</p></div><div class="refsect1" lang="en"><a name="id283419"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p>The original Samba man pages were written by Karl Auer. 

Modified: branches/samba/upstream/docs/htmldocs/manpages/log2pcap.1.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/log2pcap.1.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/log2pcap.1.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>log2pcap</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="log2pcap.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>log2pcap &#8212; Extract network traces from Samba log files</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">log2pcap</code> [-h] [-q] [logfile] [pcap_file]</p></div></div><div class="refsect1" lang="en"><a name="id2544153"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">log2pcap</code> reads in a 
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>log2pcap</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="log2pcap.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>log2pcap &#8212; Extract network traces from Samba log files</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">log2pcap</code> [-h] [-q] [logfile] [pcap_file]</p></div></div><div class="refsect1" lang="en"><a name="id283760"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">log2pcap</code> reads in a 
 	samba log file and generates a pcap file (readable 
 	by most sniffers, such as ethereal or tcpdump) based on the packet 
 	dumps in the log file.</p><p>The log file must have a <em class="parameter"><code>log level</code></em> 
 	of at least <code class="constant">5</code> to get the SMB header/parameters 
 	right, <code class="constant">10</code> to get the first 512 data bytes of the 
 	packet and <code class="constant">50</code> to get the whole packet.
-	</p></div><div class="refsect1" lang="en"><a name="id2507219"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-h</span></dt><dd><p>If this parameter is 
+	</p></div><div class="refsect1" lang="en"><a name="id282764"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-h</span></dt><dd><p>If this parameter is 
 		specified the output file will be a 
 		hex dump, in a format that is readable 
 		by the <span class="application">text2pcap</span> utility.</p></dd><dt><span class="term">-q</span></dt><dd><p>Be quiet. No warning messages about missing 
@@ -17,13 +17,13 @@
 		If this argument is not specified, output data will be written 
 		to stdout.
 		</p></dd><dt><span class="term">-h|--help</span></dt><dd><p>Print a summary of command line options.
-</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507298"></a><h2>EXAMPLES</h2><p>Extract all network traffic from all samba log files:</p><pre class="programlisting">
+</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id283394"></a><h2>EXAMPLES</h2><p>Extract all network traffic from all samba log files:</p><pre class="programlisting">
 			<code class="prompt">$</code> log2pcap &lt; /var/log/* &gt; trace.pcap
 	</pre><p>Convert to pcap using text2pcap:</p><pre class="programlisting">
 	<code class="prompt">$</code> log2pcap -h samba.log | text2pcap -T 139,139 - trace.pcap
-	</pre></div><div class="refsect1" lang="en"><a name="id2507338"></a><h2>VERSION</h2><p>This man page is correct for version 3 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2507349"></a><h2>BUGS</h2><p>Only SMB data is extracted from the samba logs, no LDAP, 
+	</pre></div><div class="refsect1" lang="en"><a name="id282882"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id282892"></a><h2>BUGS</h2><p>Only SMB data is extracted from the samba logs, no LDAP, 
 	NetBIOS lookup or other data.</p><p>The generated TCP and IP headers don't contain a valid 
-	checksum.</p></div><div class="refsect1" lang="en"><a name="id2507365"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="text2pcap.1.html"><span class="citerefentry"><span class="refentrytitle">text2pcap</span>(1)</span></a>, <a class="citerefentry" href="ethereal.1.html"><span class="citerefentry"><span class="refentrytitle">ethereal</span>(1)</span></a></p></div><div class="refsect1" lang="en"><a name="id2507388"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+	checksum.</p></div><div class="refsect1" lang="en"><a name="id282906"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="text2pcap.1.html"><span class="citerefentry"><span class="refentrytitle">text2pcap</span>(1)</span></a>, <a class="citerefentry" href="ethereal.1.html"><span class="citerefentry"><span class="refentrytitle">ethereal</span>(1)</span></a></p></div><div class="refsect1" lang="en"><a name="id282928"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p>This manpage was written by Jelmer Vernooij.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/mount.cifs.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/mount.cifs.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/mount.cifs.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>mount.cifs</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="mount.cifs.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>mount.cifs &#8212; mount using the Common Internet File System (CIFS)</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">mount.cifs</code> {service} {mount-point} [-o options]</p></div></div><div class="refsect1" lang="en"><a name="id2544139"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>mount.cifs mounts a Linux CIFS filesystem. It
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>mount.cifs</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="mount.cifs.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>mount.cifs &#8212; mount using the Common Internet File System (CIFS)</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">mount.cifs</code> {service} {mount-point} [-o options]</p></div></div><div class="refsect1" lang="en"><a name="id283752"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>mount.cifs mounts a Linux CIFS filesystem. It
 is usually invoked indirectly by
 the <a class="citerefentry" href="mount.8.html"><span class="citerefentry"><span class="refentrytitle">mount</span>(8)</span></a> command when using the 
 "-t cifs" option. This command only works in Linux, and the kernel must
@@ -20,7 +20,7 @@
 
 	</p><p><span class="emphasis"><em>mount.cifs</em></span> causes the cifs vfs to launch a thread named cifsd. After mounting it keeps running until
 		the mounted resource is unmounted (usually via the umount utility).
-	</p></div><div class="refsect1" lang="en"><a name="id2507222"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">user=<em class="replaceable"><code>arg</code></em></span></dt><dd><p>specifies the username to connect as. If
+	</p></div><div class="refsect1" lang="en"><a name="id282767"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">user=<em class="replaceable"><code>arg</code></em></span></dt><dd><p>specifies the username to connect as. If
 				this is not given, then the environment variable <span class="emphasis"><em>USER</em></span> is used. This option can also take the
 form "user%password" or "workgroup/user" or
 "workgroup/user%password" to allow the password and workgroup
@@ -213,11 +213,11 @@
 
 		</p></dd><dt><span class="term">wsize=<em class="replaceable"><code>arg</code></em></span></dt><dd><p>default network write size (default 57344)
                 maximum wsize currently allowed by CIFS is 57344 (fourteen
-                4096 byte pages)</p></dd><dt><span class="term">--verbose</span></dt><dd><p>Print additional debugging information for the mount. Note that this parameter must be specified before the -o. For example:</p><p>mount -t cifs //server/share /mnt --verbose -o user=username</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2553619"></a><h2>SERVICE FORMATTING AND DELIMITERS</h2><p>
+                4096 byte pages)</p></dd><dt><span class="term">--verbose</span></dt><dd><p>Print additional debugging information for the mount. Note that this parameter must be specified before the -o. For example:</p><p>mount -t cifs //server/share /mnt --verbose -o user=username</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id324899"></a><h2>SERVICE FORMATTING AND DELIMITERS</h2><p>
 		It's generally preferred to use forward slashes (/) as a delimiter in service names. They are considered to be the "universal delimiter" since they are generally not allowed to be embedded within path components on Windows machines and the client can convert them to blackslashes (\) unconditionally. Conversely, backslash characters are allowed by POSIX to be part of a path component, and can't be automatically converted in the same way.
 	</p><p>
 		mount.cifs will attempt to convert backslashes to forward slashes where it's able to do so, but it cannot do so in any path component following the sharename.
-	</p></div><div class="refsect1" lang="en"><a name="id2553643"></a><h2>ENVIRONMENT VARIABLES</h2><p>
+	</p></div><div class="refsect1" lang="en"><a name="id324918"></a><h2>ENVIRONMENT VARIABLES</h2><p>
 		The variable <span class="emphasis"><em>USER</em></span> may contain the username of the
 person to be used to authenticate to the server.
 The variable can be used to set both username and
@@ -229,7 +229,7 @@
 		The variable <span class="emphasis"><em>PASSWD_FILE</em></span> may contain the pathname
 of a file to read the password from. A single line of input is
 read and used as the password.
-	</p></div><div class="refsect1" lang="en"><a name="id2553678"></a><h2>NOTES</h2><p>This command may be used only by root, unless installed setuid, in which case the noeexec and nosuid mount flags are enabled.</p></div><div class="refsect1" lang="en"><a name="id2553690"></a><h2>CONFIGURATION</h2><p>
+	</p></div><div class="refsect1" lang="en"><a name="id324946"></a><h2>NOTES</h2><p>This command may be used only by root, unless installed setuid, in which case the noeexec and nosuid mount flags are enabled.</p></div><div class="refsect1" lang="en"><a name="id324957"></a><h2>CONFIGURATION</h2><p>
 The primary mechanism for making configuration changes and for reading 
 debug information for the cifs vfs is via the Linux /proc filesystem.
 In the directory <code class="filename">/proc/fs/cifs</code> are various 
@@ -240,7 +240,7 @@
 cifs.ko which will list the options that may be passed to cifs during module
 installation (device driver load).
 For more information see the kernel file <code class="filename">fs/cifs/README</code>.
-</p></div><div class="refsect1" lang="en"><a name="id2553723"></a><h2>BUGS</h2><p>Mounting using the CIFS URL specification is currently not supported.
+</p></div><div class="refsect1" lang="en"><a name="id324982"></a><h2>BUGS</h2><p>Mounting using the CIFS URL specification is currently not supported.
 	</p><p>The credentials file does not handle usernames or passwords with
 		leading space.</p><p>
 Note that the typical response to a bug report is a suggestion
@@ -248,11 +248,11 @@
 and always include which versions you use of relevant software
 when reporting bugs (minimum: mount.cifs (try mount.cifs -V), kernel (see /proc/version) and
 server type you are trying to contact.
-</p></div><div class="refsect1" lang="en"><a name="id2553747"></a><h2>VERSION</h2><p>This man page is correct for version 1.52 of 
-	the cifs vfs filesystem (roughly Linux kernel 2.6.24).</p></div><div class="refsect1" lang="en"><a name="id2553759"></a><h2>SEE ALSO</h2><p>
+</p></div><div class="refsect1" lang="en"><a name="id325003"></a><h2>VERSION</h2><p>This man page is correct for version 1.52 of 
+	the cifs vfs filesystem (roughly Linux kernel 2.6.24).</p></div><div class="refsect1" lang="en"><a name="id325013"></a><h2>SEE ALSO</h2><p>
 	Documentation/filesystems/cifs.txt and fs/cifs/README in the linux kernel
 	source tree may contain additional options and information.
-</p><p><a class="citerefentry" href="umount.cifs.8.html"><span class="citerefentry"><span class="refentrytitle">umount.cifs</span>(8)</span></a></p></div><div class="refsect1" lang="en"><a name="id2553780"></a><h2>AUTHOR</h2><p>Steve French</p><p>The syntax and manpage were loosely based on that of smbmount. It 
+</p><p><a class="citerefentry" href="umount.cifs.8.html"><span class="citerefentry"><span class="refentrytitle">umount.cifs</span>(8)</span></a></p></div><div class="refsect1" lang="en"><a name="id325033"></a><h2>AUTHOR</h2><p>Steve French</p><p>The syntax and manpage were loosely based on that of smbmount. It 
 		was converted to Docbook/XML by Jelmer Vernooij.</p><p>The maintainer of the Linux cifs vfs and the userspace
 		tool <span class="emphasis"><em>mount.cifs</em></span> is <a class="ulink" href="mailto:sfrench at samba.org" target="_top">Steve French</a>.
 		The <a class="ulink" href="mailto:linux-cifs-client at lists.samba.org" target="_top">Linux CIFS Mailing list</a> 

Modified: branches/samba/upstream/docs/htmldocs/manpages/net.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/net.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/net.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,13 +1,13 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>net</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="net.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>net &#8212; Tool for administration of Samba and remote
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>net</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="net.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>net &#8212; Tool for administration of Samba and remote
 	CIFS servers.
-	</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">net</code> {&lt;ads|rap|rpc&gt;} [-h] [-w workgroup] [-W myworkgroup] [-U user] [-I ip-address] [-p port] [-n myname] [-s conffile] [-S server] [-l] [-P] [-d debuglevel] [-V]</p></div></div><div class="refsect1" lang="en"><a name="id2507248"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The Samba net utility is meant to work just like the net utility 
+	</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">net</code> {&lt;ads|rap|rpc&gt;} [-h] [-w workgroup] [-W myworkgroup] [-U user] [-I ip-address] [-p port] [-n myname] [-s conffile] [-S server] [-l] [-P] [-d debuglevel] [-V]</p></div></div><div class="refsect1" lang="en"><a name="id282818"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The Samba net utility is meant to work just like the net utility 
 	available for windows and DOS. The first argument should be used 
 	to specify the protocol to use when executing a certain command. 
 	ADS is used for ActiveDirectory, RAP is using for old (Win9x/NT3) 
 	clients and RPC can be used for NT4 and Windows 2000. If this 
 	argument is omitted, net will try to determine it automatically. 
 	Not all commands are available on all protocols.
-	</p></div><div class="refsect1" lang="en"><a name="id2507277"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-h|--help</span></dt><dd><p>Print a summary of command line options.
+	</p></div><div class="refsect1" lang="en"><a name="id283377"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-h|--help</span></dt><dd><p>Print a summary of command line options.
 </p></dd><dt><span class="term">-w target-workgroup</span></dt><dd><p>
 		Sets target workgroup or domain. You have to specify 
 		either this option or the IP address or the name of a server.
@@ -54,18 +54,18 @@
 use only by developers and generate HUGE amounts of log
 data, most of which is extremely cryptic.</p><p>Note that specifying this parameter here will 
 override the <a class="link" href="smb.conf.5.html#LOGLEVEL">log level</a> parameter
-in the <code class="filename">smb.conf</code> file.</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2506340"></a><h2>COMMANDS</h2><div class="refsect2" lang="en"><a name="id2506346"></a><h3>CHANGESECRETPW</h3><p>This command allows the Samba machine account password to be set from an external application
+in the <code class="filename">smb.conf</code> file.</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id324518"></a><h2>COMMANDS</h2><div class="refsect2" lang="en"><a name="id324523"></a><h3>CHANGESECRETPW</h3><p>This command allows the Samba machine account password to be set from an external application
 to a machine account password that has already been stored in Active Directory. DO NOT USE this command
 unless you know exactly what you are doing. The use of this command requires that the force flag (-f)
 be used also. There will be NO command prompt. Whatever information is piped into stdin, either by
 typing at the command line or otherwise, will be stored as the literal machine password. Do NOT use
 this without care and attention as it will overwrite a legitimate machine password without warning.
 YOU HAVE BEEN WARNED.
-</p></div><div class="refsect2" lang="en"><a name="id2506366"></a><h3>TIME</h3><p>The <code class="literal">NET TIME</code> command allows you to view the time on a remote server
-	or synchronise the time on the local server with the time on the remote server.</p><div class="refsect3" lang="en"><a name="id2506383"></a><h4>TIME</h4><p>Without any options, the <code class="literal">NET TIME</code> command 
+</p></div><div class="refsect2" lang="en"><a name="id324538"></a><h3>TIME</h3><p>The <code class="literal">NET TIME</code> command allows you to view the time on a remote server
+	or synchronise the time on the local server with the time on the remote server.</p><div class="refsect3" lang="en"><a name="id324553"></a><h4>TIME</h4><p>Without any options, the <code class="literal">NET TIME</code> command 
 displays the time on the remote server.
-</p></div><div class="refsect3" lang="en"><a name="id2506400"></a><h4>TIME SYSTEM</h4><p>Displays the time on the remote server in a format ready for <code class="literal">/bin/date</code>.</p></div><div class="refsect3" lang="en"><a name="id2506417"></a><h4>TIME SET</h4><p>Tries to set the date and time of the local server to that on 
-the remote server using <code class="literal">/bin/date</code>. </p></div><div class="refsect3" lang="en"><a name="id2506435"></a><h4>TIME ZONE</h4><p>Displays the timezone in hours from GMT on the remote computer.</p></div></div><div class="refsect2" lang="en"><a name="id2506447"></a><h3>[RPC|ADS] JOIN [TYPE] [-U username[%password]] [createupn=UPN] [createcomputer=OU] [options]</h3><p>
+</p></div><div class="refsect3" lang="en"><a name="id324568"></a><h4>TIME SYSTEM</h4><p>Displays the time on the remote server in a format ready for <code class="literal">/bin/date</code>.</p></div><div class="refsect3" lang="en"><a name="id324583"></a><h4>TIME SET</h4><p>Tries to set the date and time of the local server to that on 
+the remote server using <code class="literal">/bin/date</code>. </p></div><div class="refsect3" lang="en"><a name="id324597"></a><h4>TIME ZONE</h4><p>Displays the timezone in hours from GMT on the remote computer.</p></div></div><div class="refsect2" lang="en"><a name="id324609"></a><h3>[RPC|ADS] JOIN [TYPE] [-U username[%password]] [createupn=UPN] [createcomputer=OU] [options]</h3><p>
 Join a domain.  If the account already exists on the server, and 
 [TYPE] is MEMBER, the machine will attempt to join automatically. 
 (Assuming that the machine has been created in server manager)
@@ -82,81 +82,81 @@
 a '/'.  Please note that '\' is used for escape by both the shell
 and ldap, so it may need to be doubled or quadrupled to pass through, 
 and it is not used as a delimiter.
-</p></div><div class="refsect2" lang="en"><a name="id2506482"></a><h3>[RPC] OLDJOIN [options]</h3><p>Join a domain. Use the OLDJOIN option to join the domain 
+</p></div><div class="refsect2" lang="en"><a name="id324636"></a><h3>[RPC] OLDJOIN [options]</h3><p>Join a domain. Use the OLDJOIN option to join the domain 
 using the old style of domain joining - you need to create a trust 
-account in server manager first.</p></div><div class="refsect2" lang="en"><a name="id2506494"></a><h3>[RPC|ADS] USER</h3><div class="refsect3" lang="en"><a name="id2506500"></a><h4>[RPC|ADS] USER</h4><p>List all users</p></div><div class="refsect3" lang="en"><a name="id2506511"></a><h4>[RPC|ADS] USER DELETE <em class="replaceable"><code>target</code></em></h4><p>Delete specified user</p></div><div class="refsect3" lang="en"><a name="id2506524"></a><h4>[RPC|ADS] USER INFO <em class="replaceable"><code>target</code></em></h4><p>List the domain groups of the specified user.</p></div><div class="refsect3" lang="en"><a name="id2506537"></a><h4>[RPC|ADS] USER RENAME <em class="replaceable"><code>oldname</code></em> <em class="replaceable"><code>newname</code></em></h4><p>Rename specified user.</p></div><div class="refsect3" lang="en"><a name="id2506554"></a><h4>[RPC|ADS] USER ADD <em class="replaceable"><code>name</code></em> [password] [-F user flags] [-C comment]</h4><p>Add specified user.</p></div></div><div class="refsect2" lang="en"><a name="id2506569"></a><h3>[RPC|ADS] GROUP</h3><div class="refsect3" lang="en"><a name="id2506574"></a><h4>[RPC|ADS] GROUP [misc options] [targets]</h4><p>List user groups.</p></div><div class="refsect3" lang="en"><a name="id2506585"></a><h4>[RPC|ADS] GROUP DELETE <em class="replaceable"><code>name</code></em> [misc. options]</h4><p>Delete specified group.</p></div><div class="refsect3" lang="en"><a name="id2506600"></a><h4>[RPC|ADS] GROUP ADD <em class="replaceable"><code>name</code></em> [-C comment]</h4><p>Create specified group.</p></div></div><div class="refsect2" lang="en"><a name="id2506615"></a><h3>[RAP|RPC] SHARE</h3><div class="refsect3" lang="en"><a name="id2506621"></a><h4>[RAP|RPC] SHARE [misc. options] [targets]</h4><p>Enumerates all exported resources (network shares) on target server.</p></div><div class="refsect3" lang="en"><a name="id2506633"></a><h4>[RAP|RPC] SHARE ADD <em class="replaceable"><code>name=serverpath</code></em> [-C comment] [-M maxusers] [targets]</h4><p>Adds a share from a server (makes the export active). Maxusers 
+account in server manager first.</p></div><div class="refsect2" lang="en"><a name="id324647"></a><h3>[RPC|ADS] USER</h3><div class="refsect3" lang="en"><a name="id324652"></a><h4>[RPC|ADS] USER</h4><p>List all users</p></div><div class="refsect3" lang="en"><a name="id324662"></a><h4>[RPC|ADS] USER DELETE <em class="replaceable"><code>target</code></em></h4><p>Delete specified user</p></div><div class="refsect3" lang="en"><a name="id324674"></a><h4>[RPC|ADS] USER INFO <em class="replaceable"><code>target</code></em></h4><p>List the domain groups of the specified user.</p></div><div class="refsect3" lang="en"><a name="id324685"></a><h4>[RPC|ADS] USER RENAME <em class="replaceable"><code>oldname</code></em> <em class="replaceable"><code>newname</code></em></h4><p>Rename specified user.</p></div><div class="refsect3" lang="en"><a name="id324700"></a><h4>[RPC|ADS] USER ADD <em class="replaceable"><code>name</code></em> [password] [-F user flags] [-C comment]</h4><p>Add specified user.</p></div></div><div class="refsect2" lang="en"><a name="id324714"></a><h3>[RPC|ADS] GROUP</h3><div class="refsect3" lang="en"><a name="id324720"></a><h4>[RPC|ADS] GROUP [misc options] [targets]</h4><p>List user groups.</p></div><div class="refsect3" lang="en"><a name="id324729"></a><h4>[RPC|ADS] GROUP DELETE <em class="replaceable"><code>name</code></em> [misc. options]</h4><p>Delete specified group.</p></div><div class="refsect3" lang="en"><a name="id324742"></a><h4>[RPC|ADS] GROUP ADD <em class="replaceable"><code>name</code></em> [-C comment]</h4><p>Create specified group.</p></div></div><div class="refsect2" lang="en"><a name="id324756"></a><h3>[RAP|RPC] SHARE</h3><div class="refsect3" lang="en"><a name="id324761"></a><h4>[RAP|RPC] SHARE [misc. options] [targets]</h4><p>Enumerates all exported resources (network shares) on target server.</p></div><div class="refsect3" lang="en"><a name="id324771"></a><h4>[RAP|RPC] SHARE ADD <em class="replaceable"><code>name=serverpath</code></em> [-C comment] [-M maxusers] [targets]</h4><p>Adds a share from a server (makes the export active). Maxusers 
 specifies the number of users that can be connected to the 
-share simultaneously.</p></div><div class="refsect3" lang="en"><a name="id2506650"></a><h4>SHARE DELETE <em class="replaceable"><code>sharename</code></em></h4><p>Delete specified share.</p></div></div><div class="refsect2" lang="en"><a name="id2506664"></a><h3>[RPC|RAP] FILE</h3><div class="refsect3" lang="en"><a name="id2506670"></a><h4>[RPC|RAP] FILE</h4><p>List all open files on remote server.</p></div><div class="refsect3" lang="en"><a name="id2506680"></a><h4>[RPC|RAP] FILE CLOSE <em class="replaceable"><code>fileid</code></em></h4><p>Close file with specified <em class="replaceable"><code>fileid</code></em> on 
-remote server.</p></div><div class="refsect3" lang="en"><a name="id2506697"></a><h4>[RPC|RAP] FILE INFO <em class="replaceable"><code>fileid</code></em></h4><p>
+share simultaneously.</p></div><div class="refsect3" lang="en"><a name="id324786"></a><h4>SHARE DELETE <em class="replaceable"><code>sharename</code></em></h4><p>Delete specified share.</p></div></div><div class="refsect2" lang="en"><a name="id324798"></a><h3>[RPC|RAP] FILE</h3><div class="refsect3" lang="en"><a name="id324804"></a><h4>[RPC|RAP] FILE</h4><p>List all open files on remote server.</p></div><div class="refsect3" lang="en"><a name="id324813"></a><h4>[RPC|RAP] FILE CLOSE <em class="replaceable"><code>fileid</code></em></h4><p>Close file with specified <em class="replaceable"><code>fileid</code></em> on 
+remote server.</p></div><div class="refsect3" lang="en"><a name="id324828"></a><h4>[RPC|RAP] FILE INFO <em class="replaceable"><code>fileid</code></em></h4><p>
 Print information on specified <em class="replaceable"><code>fileid</code></em>. 
 Currently listed are: file-id, username, locks, path, permissions.
-</p></div><div class="refsect3" lang="en"><a name="id2506715"></a><h4>[RAP|RPC] FILE USER <em class="replaceable"><code>user</code></em></h4><p>
+</p></div><div class="refsect3" lang="en"><a name="id324844"></a><h4>[RAP|RPC] FILE USER <em class="replaceable"><code>user</code></em></h4><p>
 List files opened by specified <em class="replaceable"><code>user</code></em>.
 Please note that <code class="literal">net rap file user</code> does not work
 against Samba servers. 
-</p></div></div><div class="refsect2" lang="en"><a name="id2506739"></a><h3>SESSION</h3><div class="refsect3" lang="en"><a name="id2506744"></a><h4>RAP SESSION</h4><p>Without any other options, SESSION enumerates all active SMB/CIFS 
-sessions on the target server.</p></div><div class="refsect3" lang="en"><a name="id2506756"></a><h4>RAP SESSION DELETE|CLOSE <em class="replaceable"><code>CLIENT_NAME</code></em></h4><p>Close the specified sessions.</p></div><div class="refsect3" lang="en"><a name="id2506769"></a><h4>RAP SESSION INFO <em class="replaceable"><code>CLIENT_NAME</code></em></h4><p>Give a list with all the open files in specified session.</p></div></div><div class="refsect2" lang="en"><a name="id2506784"></a><h3>RAP SERVER <em class="replaceable"><code>DOMAIN</code></em></h3><p>List all servers in specified domain or workgroup. Defaults
-to local domain.</p></div><div class="refsect2" lang="en"><a name="id2506797"></a><h3>RAP DOMAIN</h3><p>Lists all domains and workgroups visible on the 
-current network.</p></div><div class="refsect2" lang="en"><a name="id2506808"></a><h3>RAP PRINTQ</h3><div class="refsect3" lang="en"><a name="id2553512"></a><h4>RAP PRINTQ LIST <em class="replaceable"><code>QUEUE_NAME</code></em></h4><p>Lists the specified print queue and print jobs on the server.
+</p></div></div><div class="refsect2" lang="en"><a name="id324865"></a><h3>SESSION</h3><div class="refsect3" lang="en"><a name="id324870"></a><h4>RAP SESSION</h4><p>Without any other options, SESSION enumerates all active SMB/CIFS 
+sessions on the target server.</p></div><div class="refsect3" lang="en"><a name="id324881"></a><h4>RAP SESSION DELETE|CLOSE <em class="replaceable"><code>CLIENT_NAME</code></em></h4><p>Close the specified sessions.</p></div><div class="refsect3" lang="en"><a name="id324893"></a><h4>RAP SESSION INFO <em class="replaceable"><code>CLIENT_NAME</code></em></h4><p>Give a list with all the open files in specified session.</p></div></div><div class="refsect2" lang="en"><a name="id324906"></a><h3>RAP SERVER <em class="replaceable"><code>DOMAIN</code></em></h3><p>List all servers in specified domain or workgroup. Defaults
+to local domain.</p></div><div class="refsect2" lang="en"><a name="id324919"></a><h3>RAP DOMAIN</h3><p>Lists all domains and workgroups visible on the 
+current network.</p></div><div class="refsect2" lang="en"><a name="id324929"></a><h3>RAP PRINTQ</h3><div class="refsect3" lang="en"><a name="id324934"></a><h4>RAP PRINTQ LIST <em class="replaceable"><code>QUEUE_NAME</code></em></h4><p>Lists the specified print queue and print jobs on the server.
 If the <em class="replaceable"><code>QUEUE_NAME</code></em> is omitted, all 
-queues are listed.</p></div><div class="refsect3" lang="en"><a name="id2553530"></a><h4>RAP PRINTQ DELETE <em class="replaceable"><code>JOBID</code></em></h4><p>Delete job with specified id.</p></div></div><div class="refsect2" lang="en"><a name="id2553544"></a><h3>RAP VALIDATE <em class="replaceable"><code>user</code></em> [<em class="replaceable"><code>password</code></em>]</h3><p>
+queues are listed.</p></div><div class="refsect3" lang="en"><a name="id324950"></a><h4>RAP PRINTQ DELETE <em class="replaceable"><code>JOBID</code></em></h4><p>Delete job with specified id.</p></div></div><div class="refsect2" lang="en"><a name="id324963"></a><h3>RAP VALIDATE <em class="replaceable"><code>user</code></em> [<em class="replaceable"><code>password</code></em>]</h3><p>
 Validate whether the specified user can log in to the 
 remote server. If the password is not specified on the commandline, it 
 will be prompted. 
-</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>Currently NOT implemented.</p></div></div><div class="refsect2" lang="en"><a name="id2553568"></a><h3>RAP GROUPMEMBER</h3><div class="refsect3" lang="en"><a name="id2553574"></a><h4>RAP GROUPMEMBER LIST <em class="replaceable"><code>GROUP</code></em></h4><p>List all members of the specified group.</p></div><div class="refsect3" lang="en"><a name="id2553588"></a><h4>RAP GROUPMEMBER DELETE <em class="replaceable"><code>GROUP</code></em> <em class="replaceable"><code>USER</code></em></h4><p>Delete member from group.</p></div><div class="refsect3" lang="en"><a name="id2553604"></a><h4>RAP GROUPMEMBER ADD <em class="replaceable"><code>GROUP</code></em> <em class="replaceable"><code>USER</code></em></h4><p>Add member to group.</p></div></div><div class="refsect2" lang="en"><a name="id2553622"></a><h3>RAP ADMIN <em class="replaceable"><code>command</code></em></h3><p>Execute the specified <em class="replaceable"><code>command</code></em> on 
+</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>Currently NOT implemented.</p></div></div><div class="refsect2" lang="en"><a name="id324984"></a><h3>RAP GROUPMEMBER</h3><div class="refsect3" lang="en"><a name="id324990"></a><h4>RAP GROUPMEMBER LIST <em class="replaceable"><code>GROUP</code></em></h4><p>List all members of the specified group.</p></div><div class="refsect3" lang="en"><a name="id325001"></a><h4>RAP GROUPMEMBER DELETE <em class="replaceable"><code>GROUP</code></em> <em class="replaceable"><code>USER</code></em></h4><p>Delete member from group.</p></div><div class="refsect3" lang="en"><a name="id325016"></a><h4>RAP GROUPMEMBER ADD <em class="replaceable"><code>GROUP</code></em> <em class="replaceable"><code>USER</code></em></h4><p>Add member to group.</p></div></div><div class="refsect2" lang="en"><a name="id325032"></a><h3>RAP ADMIN <em class="replaceable"><code>command</code></em></h3><p>Execute the specified <em class="replaceable"><code>command</code></em> on 
 the remote server. Only works with OS/2 servers.
-</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>Currently NOT implemented.</p></div></div><div class="refsect2" lang="en"><a name="id2553644"></a><h3>RAP SERVICE</h3><div class="refsect3" lang="en"><a name="id2553649"></a><h4>RAP SERVICE START <em class="replaceable"><code>NAME</code></em> [arguments...]</h4><p>Start the specified service on the remote server. Not implemented yet.</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>Currently NOT implemented.</p></div></div><div class="refsect3" lang="en"><a name="id2553669"></a><h4>RAP SERVICE STOP</h4><p>Stop the specified service on the remote server.</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>Currently NOT implemented.</p></div></div></div><div class="refsect2" lang="en"><a name="id2553686"></a><h3>RAP PASSWORD <em class="replaceable"><code>USER</code></em> <em class="replaceable"><code>OLDPASS</code></em> <em class="replaceable"><code>NEWPASS</code></em></h3><p>
+</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>Currently NOT implemented.</p></div></div><div class="refsect2" lang="en"><a name="id325051"></a><h3>RAP SERVICE</h3><div class="refsect3" lang="en"><a name="id325057"></a><h4>RAP SERVICE START <em class="replaceable"><code>NAME</code></em> [arguments...]</h4><p>Start the specified service on the remote server. Not implemented yet.</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>Currently NOT implemented.</p></div></div><div class="refsect3" lang="en"><a name="id325074"></a><h4>RAP SERVICE STOP</h4><p>Stop the specified service on the remote server.</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>Currently NOT implemented.</p></div></div></div><div class="refsect2" lang="en"><a name="id325089"></a><h3>RAP PASSWORD <em class="replaceable"><code>USER</code></em> <em class="replaceable"><code>OLDPASS</code></em> <em class="replaceable"><code>NEWPASS</code></em></h3><p>
 Change password of <em class="replaceable"><code>USER</code></em> from <em class="replaceable"><code>OLDPASS</code></em> to <em class="replaceable"><code>NEWPASS</code></em>.
-</p></div><div class="refsect2" lang="en"><a name="id2553717"></a><h3>LOOKUP</h3><div class="refsect3" lang="en"><a name="id2553723"></a><h4>LOOKUP HOST <em class="replaceable"><code>HOSTNAME</code></em> [<em class="replaceable"><code>TYPE</code></em>]</h4><p>
+</p></div><div class="refsect2" lang="en"><a name="id325117"></a><h3>LOOKUP</h3><div class="refsect3" lang="en"><a name="id325122"></a><h4>LOOKUP HOST <em class="replaceable"><code>HOSTNAME</code></em> [<em class="replaceable"><code>TYPE</code></em>]</h4><p>
 Lookup the IP address of the given host with the specified type (netbios suffix). 
 The type defaults to 0x20 (workstation).
-</p></div><div class="refsect3" lang="en"><a name="id2553742"></a><h4>LOOKUP LDAP [<em class="replaceable"><code>DOMAIN</code></em>]</h4><p>Give IP address of LDAP server of specified <em class="replaceable"><code>DOMAIN</code></em>. Defaults to local domain.</p></div><div class="refsect3" lang="en"><a name="id2553760"></a><h4>LOOKUP KDC [<em class="replaceable"><code>REALM</code></em>]</h4><p>Give IP address of KDC for the specified <em class="replaceable"><code>REALM</code></em>.
-Defaults to local realm.</p></div><div class="refsect3" lang="en"><a name="id2553778"></a><h4>LOOKUP DC [<em class="replaceable"><code>DOMAIN</code></em>]</h4><p>Give IP's of Domain Controllers for specified <em class="replaceable"><code>
-DOMAIN</code></em>. Defaults to local domain.</p></div><div class="refsect3" lang="en"><a name="id2553797"></a><h4>LOOKUP MASTER <em class="replaceable"><code>DOMAIN</code></em></h4><p>Give IP of master browser for specified <em class="replaceable"><code>DOMAIN</code></em>
-or workgroup. Defaults to local domain.</p></div></div><div class="refsect2" lang="en"><a name="id2553815"></a><h3>CACHE</h3><p>Samba uses a general caching interface called 'gencache'. It 
+</p></div><div class="refsect3" lang="en"><a name="id325140"></a><h4>LOOKUP LDAP [<em class="replaceable"><code>DOMAIN</code></em>]</h4><p>Give IP address of LDAP server of specified <em class="replaceable"><code>DOMAIN</code></em>. Defaults to local domain.</p></div><div class="refsect3" lang="en"><a name="id325156"></a><h4>LOOKUP KDC [<em class="replaceable"><code>REALM</code></em>]</h4><p>Give IP address of KDC for the specified <em class="replaceable"><code>REALM</code></em>.
+Defaults to local realm.</p></div><div class="refsect3" lang="en"><a name="id325172"></a><h4>LOOKUP DC [<em class="replaceable"><code>DOMAIN</code></em>]</h4><p>Give IP's of Domain Controllers for specified <em class="replaceable"><code>
+DOMAIN</code></em>. Defaults to local domain.</p></div><div class="refsect3" lang="en"><a name="id325188"></a><h4>LOOKUP MASTER <em class="replaceable"><code>DOMAIN</code></em></h4><p>Give IP of master browser for specified <em class="replaceable"><code>DOMAIN</code></em>
+or workgroup. Defaults to local domain.</p></div></div><div class="refsect2" lang="en"><a name="id325204"></a><h3>CACHE</h3><p>Samba uses a general caching interface called 'gencache'. It 
 can be controlled using 'NET CACHE'.</p><p>All the timeout parameters support the suffixes:
 
 </p><table class="simplelist" border="0" summary="Simple list"><tr><td>s - Seconds</td></tr><tr><td>m - Minutes</td></tr><tr><td>h - Hours</td></tr><tr><td>d - Days</td></tr><tr><td>w - Weeks</td></tr></table><p>
 
-</p><div class="refsect3" lang="en"><a name="id2553853"></a><h4>CACHE ADD <em class="replaceable"><code>key</code></em> <em class="replaceable"><code>data</code></em> <em class="replaceable"><code>time-out</code></em></h4><p>Add specified key+data to the cache with the given timeout.</p></div><div class="refsect3" lang="en"><a name="id2553873"></a><h4>CACHE DEL <em class="replaceable"><code>key</code></em></h4><p>Delete key from the cache.</p></div><div class="refsect3" lang="en"><a name="id2553885"></a><h4>CACHE SET <em class="replaceable"><code>key</code></em> <em class="replaceable"><code>data</code></em> <em class="replaceable"><code>time-out</code></em></h4><p>Update data of existing cache entry.</p></div><div class="refsect3" lang="en"><a name="id2553905"></a><h4>CACHE SEARCH <em class="replaceable"><code>PATTERN</code></em></h4><p>Search for the specified pattern in the cache data.</p></div><div class="refsect3" lang="en"><a name="id2553918"></a><h4>CACHE LIST</h4><p>
+</p><div class="refsect3" lang="en"><a name="id325238"></a><h4>CACHE ADD <em class="replaceable"><code>key</code></em> <em class="replaceable"><code>data</code></em> <em class="replaceable"><code>time-out</code></em></h4><p>Add specified key+data to the cache with the given timeout.</p></div><div class="refsect3" lang="en"><a name="id325256"></a><h4>CACHE DEL <em class="replaceable"><code>key</code></em></h4><p>Delete key from the cache.</p></div><div class="refsect3" lang="en"><a name="id325268"></a><h4>CACHE SET <em class="replaceable"><code>key</code></em> <em class="replaceable"><code>data</code></em> <em class="replaceable"><code>time-out</code></em></h4><p>Update data of existing cache entry.</p></div><div class="refsect3" lang="en"><a name="id325286"></a><h4>CACHE SEARCH <em class="replaceable"><code>PATTERN</code></em></h4><p>Search for the specified pattern in the cache data.</p></div><div class="refsect3" lang="en"><a name="id325298"></a><h4>CACHE LIST</h4><p>
 List all current items in the cache.
-</p></div><div class="refsect3" lang="en"><a name="id2553929"></a><h4>CACHE FLUSH</h4><p>Remove all the current items from the cache.</p></div></div><div class="refsect2" lang="en"><a name="id2553941"></a><h3>GETLOCALSID [DOMAIN]</h3><p>Prints the SID of the specified domain, or if the parameter is
-omitted, the SID of the local server.</p></div><div class="refsect2" lang="en"><a name="id2553953"></a><h3>SETLOCALSID S-1-5-21-x-y-z</h3><p>Sets SID for the local server to the specified SID.</p></div><div class="refsect2" lang="en"><a name="id2553964"></a><h3>GETDOMAINSID</h3><p>Prints the local machine SID and the SID of the current 
-domain.</p></div><div class="refsect2" lang="en"><a name="id2553975"></a><h3>SETDOMAINSID</h3><p>Sets the SID of the current domain.</p></div><div class="refsect2" lang="en"><a name="id2553986"></a><h3>GROUPMAP</h3><p>Manage the mappings between Windows group SIDs and UNIX groups.
+</p></div><div class="refsect3" lang="en"><a name="id325308"></a><h4>CACHE FLUSH</h4><p>Remove all the current items from the cache.</p></div></div><div class="refsect2" lang="en"><a name="id325318"></a><h3>GETLOCALSID [DOMAIN]</h3><p>Prints the SID of the specified domain, or if the parameter is
+omitted, the SID of the local server.</p></div><div class="refsect2" lang="en"><a name="id325329"></a><h3>SETLOCALSID S-1-5-21-x-y-z</h3><p>Sets SID for the local server to the specified SID.</p></div><div class="refsect2" lang="en"><a name="id325338"></a><h3>GETDOMAINSID</h3><p>Prints the local machine SID and the SID of the current 
+domain.</p></div><div class="refsect2" lang="en"><a name="id325349"></a><h3>SETDOMAINSID</h3><p>Sets the SID of the current domain.</p></div><div class="refsect2" lang="en"><a name="id325358"></a><h3>GROUPMAP</h3><p>Manage the mappings between Windows group SIDs and UNIX groups.
 Common options include:</p><div class="itemizedlist"><ul type="disc"><li><p>unixgroup - Name of the UNIX group</p></li><li><p>ntgroup - Name of the Windows NT group (must be
   resolvable to a SID</p></li><li><p>rid - Unsigned 32-bit integer</p></li><li><p>sid - Full SID in the form of "S-1-..."</p></li><li><p>type - Type of the group; either 'domain', 'local',
-  or 'builtin'</p></li><li><p>comment - Freeform text description of the group</p></li></ul></div><div class="refsect3" lang="en"><a name="id2554031"></a><h4>GROUPMAP ADD</h4><p>
+  or 'builtin'</p></li><li><p>comment - Freeform text description of the group</p></li></ul></div><div class="refsect3" lang="en"><a name="id325398"></a><h4>GROUPMAP ADD</h4><p>
 Add a new group mapping entry:
 </p><pre class="programlisting">
 net groupmap add {rid=int|sid=string} unixgroup=string \
 	[type={domain|local}] [ntgroup=string] [comment=string]
 </pre><p>
-</p></div><div class="refsect3" lang="en"><a name="id2554049"></a><h4>GROUPMAP DELETE</h4><p>Delete a group mapping entry. If more than one group name matches, the first entry found is deleted.</p><p>net groupmap delete {ntgroup=string|sid=SID}</p></div><div class="refsect3" lang="en"><a name="id2554065"></a><h4>GROUPMAP MODIFY</h4><p>Update en existing group entry.</p><p>
+</p></div><div class="refsect3" lang="en"><a name="id325414"></a><h4>GROUPMAP DELETE</h4><p>Delete a group mapping entry. If more than one group name matches, the first entry found is deleted.</p><p>net groupmap delete {ntgroup=string|sid=SID}</p></div><div class="refsect3" lang="en"><a name="id325427"></a><h4>GROUPMAP MODIFY</h4><p>Update en existing group entry.</p><p>
 </p><pre class="programlisting">
 net groupmap modify {ntgroup=string|sid=SID} [unixgroup=string] \
        [comment=string] [type={domain|local}]
 </pre><p>
-</p></div><div class="refsect3" lang="en"><a name="id2554086"></a><h4>GROUPMAP LIST</h4><p>List existing group mapping entries.</p><p>net groupmap list [verbose] [ntgroup=string] [sid=SID]</p></div></div><div class="refsect2" lang="en"><a name="id2554102"></a><h3>MAXRID</h3><p>Prints out the highest RID currently in use on the local
+</p></div><div class="refsect3" lang="en"><a name="id325446"></a><h4>GROUPMAP LIST</h4><p>List existing group mapping entries.</p><p>net groupmap list [verbose] [ntgroup=string] [sid=SID]</p></div></div><div class="refsect2" lang="en"><a name="id325460"></a><h3>MAXRID</h3><p>Prints out the highest RID currently in use on the local
 server (by the active 'passdb backend').
-</p></div><div class="refsect2" lang="en"><a name="id2554114"></a><h3>RPC INFO</h3><p>Print information about the domain of the remote server,
+</p></div><div class="refsect2" lang="en"><a name="id325471"></a><h3>RPC INFO</h3><p>Print information about the domain of the remote server,
 such as domain name, domain sid and number of users and groups.
-</p></div><div class="refsect2" lang="en"><a name="id2554126"></a><h3>[RPC|ADS] TESTJOIN</h3><p>Check whether participation in a domain is still valid.</p></div><div class="refsect2" lang="en"><a name="id2554137"></a><h3>[RPC|ADS] CHANGETRUSTPW</h3><p>Force change of domain trust password.</p></div><div class="refsect2" lang="en"><a name="id2554148"></a><h3>RPC TRUSTDOM</h3><div class="refsect3" lang="en"><a name="id2554154"></a><h4>RPC TRUSTDOM ADD <em class="replaceable"><code>DOMAIN</code></em></h4><p>Add a interdomain trust account for <em class="replaceable"><code>DOMAIN</code></em>. 
+</p></div><div class="refsect2" lang="en"><a name="id325482"></a><h3>[RPC|ADS] TESTJOIN</h3><p>Check whether participation in a domain is still valid.</p></div><div class="refsect2" lang="en"><a name="id325491"></a><h3>[RPC|ADS] CHANGETRUSTPW</h3><p>Force change of domain trust password.</p></div><div class="refsect2" lang="en"><a name="id325501"></a><h3>RPC TRUSTDOM</h3><div class="refsect3" lang="en"><a name="id325506"></a><h4>RPC TRUSTDOM ADD <em class="replaceable"><code>DOMAIN</code></em></h4><p>Add a interdomain trust account for <em class="replaceable"><code>DOMAIN</code></em>. 
 This is in fact a Samba account named <em class="replaceable"><code>DOMAIN$</code></em> 
 with the account flag <code class="constant">'I'</code> (interdomain trust account). 
 If the command is used against localhost it has the same effect as 
 <code class="literal">smbpasswd -a -i DOMAIN</code>. Please note that both commands
 expect a appropriate UNIX account. 
-</p></div><div class="refsect3" lang="en"><a name="id2554188"></a><h4>RPC TRUSTDOM DEL <em class="replaceable"><code>DOMAIN</code></em></h4><p>Remove interdomain trust account for 
+</p></div><div class="refsect3" lang="en"><a name="id325534"></a><h4>RPC TRUSTDOM DEL <em class="replaceable"><code>DOMAIN</code></em></h4><p>Remove interdomain trust account for 
 <em class="replaceable"><code>DOMAIN</code></em>. If it is used against localhost 
 it has the same effect as <code class="literal">smbpasswd -x DOMAIN$</code>. 
-</p></div><div class="refsect3" lang="en"><a name="id2554211"></a><h4>RPC TRUSTDOM ESTABLISH <em class="replaceable"><code>DOMAIN</code></em></h4><p>
+</p></div><div class="refsect3" lang="en"><a name="id325555"></a><h4>RPC TRUSTDOM ESTABLISH <em class="replaceable"><code>DOMAIN</code></em></h4><p>
 Establish a trust relationship to a trusting domain. 
 Interdomain account must already be created on the remote PDC.
-</p></div><div class="refsect3" lang="en"><a name="id2554226"></a><h4>RPC TRUSTDOM REVOKE <em class="replaceable"><code>DOMAIN</code></em></h4><p>Abandon relationship to trusted domain</p></div><div class="refsect3" lang="en"><a name="id2554239"></a><h4>RPC TRUSTDOM LIST</h4><p>List all current interdomain trust relationships.</p></div><div class="refsect3" lang="en"><a name="id2554250"></a><h4>RPC RIGHTS</h4><p>This subcommand is used to view and manage Samba's rights assignments (also 
+</p></div><div class="refsect3" lang="en"><a name="id325568"></a><h4>RPC TRUSTDOM REVOKE <em class="replaceable"><code>DOMAIN</code></em></h4><p>Abandon relationship to trusted domain</p></div><div class="refsect3" lang="en"><a name="id325580"></a><h4>RPC TRUSTDOM LIST</h4><p>List all current interdomain trust relationships.</p></div><div class="refsect3" lang="en"><a name="id325589"></a><h4>RPC RIGHTS</h4><p>This subcommand is used to view and manage Samba's rights assignments (also 
 referred to as privileges).  There are three options currently available: 
 <em class="parameter"><code>list</code></em>, <em class="parameter"><code>grant</code></em>, and 
 <em class="parameter"><code>revoke</code></em>.  More details on Samba's privilege model and its use
-can be found in the Samba-HOWTO-Collection.</p></div></div><div class="refsect2" lang="en"><a name="id2554284"></a><h3>RPC ABORTSHUTDOWN</h3><p>Abort the shutdown of a remote server.</p></div><div class="refsect2" lang="en"><a name="id2554294"></a><h3>RPC SHUTDOWN [-t timeout] [-r] [-f] [-C message]</h3><p>Shut down the remote server.</p><div class="variablelist"><dl><dt><span class="term">-r</span></dt><dd><p>
+can be found in the Samba-HOWTO-Collection.</p></div></div><div class="refsect2" lang="en"><a name="id325618"></a><h3>RPC ABORTSHUTDOWN</h3><p>Abort the shutdown of a remote server.</p></div><div class="refsect2" lang="en"><a name="id325627"></a><h3>RPC SHUTDOWN [-t timeout] [-r] [-f] [-C message]</h3><p>Shut down the remote server.</p><div class="variablelist"><dl><dt><span class="term">-r</span></dt><dd><p>
 Reboot after shutdown.
 </p></dd><dt><span class="term">-f</span></dt><dd><p>
 Force shutting down all applications.
@@ -164,21 +164,21 @@
 Timeout before system will be shut down. An interactive 
 user of the system can use this time to cancel the shutdown.
 </p></dd><dt><span class="term">-C message</span></dt><dd><p>Display the specified message on the screen to 
-announce the shutdown.</p></dd></dl></div></div><div class="refsect2" lang="en"><a name="id2554357"></a><h3>RPC SAMDUMP</h3><p>Print out sam database of remote server. You need
-to run this against the PDC, from a Samba machine joined as a BDC. </p></div><div class="refsect2" lang="en"><a name="id2554369"></a><h3>RPC VAMPIRE</h3><p>Export users, aliases and groups from remote server to 
+announce the shutdown.</p></dd></dl></div></div><div class="refsect2" lang="en"><a name="id325685"></a><h3>RPC SAMDUMP</h3><p>Print out sam database of remote server. You need
+to run this against the PDC, from a Samba machine joined as a BDC. </p></div><div class="refsect2" lang="en"><a name="id325695"></a><h3>RPC VAMPIRE</h3><p>Export users, aliases and groups from remote server to 
 local server.  You need to run this against the PDC, from a Samba machine joined as a BDC. 
-</p></div><div class="refsect2" lang="en"><a name="id2554382"></a><h3>RPC GETSID</h3><p>Fetch domain SID and store it in the local <code class="filename">secrets.tdb</code>. </p></div><div class="refsect2" lang="en"><a name="id2554398"></a><h3>ADS LEAVE</h3><p>Make the remote host leave the domain it is part of. </p></div><div class="refsect2" lang="en"><a name="id2554409"></a><h3>ADS STATUS</h3><p>Print out status of machine account of the local machine in ADS.
+</p></div><div class="refsect2" lang="en"><a name="id325706"></a><h3>RPC GETSID</h3><p>Fetch domain SID and store it in the local <code class="filename">secrets.tdb</code>. </p></div><div class="refsect2" lang="en"><a name="id325721"></a><h3>ADS LEAVE</h3><p>Make the remote host leave the domain it is part of. </p></div><div class="refsect2" lang="en"><a name="id325731"></a><h3>ADS STATUS</h3><p>Print out status of machine account of the local machine in ADS.
 Prints out quite some debug info. Aimed at developers, regular 
-users should use <code class="literal">NET ADS TESTJOIN</code>.</p></div><div class="refsect2" lang="en"><a name="id2554427"></a><h3>ADS PRINTER</h3><div class="refsect3" lang="en"><a name="id2554433"></a><h4>ADS PRINTER INFO [<em class="replaceable"><code>PRINTER</code></em>] [<em class="replaceable"><code>SERVER</code></em>]</h4><p>
+users should use <code class="literal">NET ADS TESTJOIN</code>.</p></div><div class="refsect2" lang="en"><a name="id325747"></a><h3>ADS PRINTER</h3><div class="refsect3" lang="en"><a name="id325752"></a><h4>ADS PRINTER INFO [<em class="replaceable"><code>PRINTER</code></em>] [<em class="replaceable"><code>SERVER</code></em>]</h4><p>
 Lookup info for <em class="replaceable"><code>PRINTER</code></em> on <em class="replaceable"><code>SERVER</code></em>. The printer name defaults to "*", the 
-server name defaults to the local host.</p></div><div class="refsect3" lang="en"><a name="id2554459"></a><h4>ADS PRINTER PUBLISH <em class="replaceable"><code>PRINTER</code></em></h4><p>Publish specified printer using ADS.</p></div><div class="refsect3" lang="en"><a name="id2554472"></a><h4>ADS PRINTER REMOVE <em class="replaceable"><code>PRINTER</code></em></h4><p>Remove specified printer from ADS directory.</p></div></div><div class="refsect2" lang="en"><a name="id2554486"></a><h3>ADS SEARCH <em class="replaceable"><code>EXPRESSION</code></em> <em class="replaceable"><code>ATTRIBUTES...</code></em></h3><p>Perform a raw LDAP search on a ADS server and dump the results. The 
+server name defaults to the local host.</p></div><div class="refsect3" lang="en"><a name="id325775"></a><h4>ADS PRINTER PUBLISH <em class="replaceable"><code>PRINTER</code></em></h4><p>Publish specified printer using ADS.</p></div><div class="refsect3" lang="en"><a name="id325787"></a><h4>ADS PRINTER REMOVE <em class="replaceable"><code>PRINTER</code></em></h4><p>Remove specified printer from ADS directory.</p></div></div><div class="refsect2" lang="en"><a name="id325800"></a><h3>ADS SEARCH <em class="replaceable"><code>EXPRESSION</code></em> <em class="replaceable"><code>ATTRIBUTES...</code></em></h3><p>Perform a raw LDAP search on a ADS server and dump the results. The 
 expression is a standard LDAP search expression, and the 
 attributes are a list of LDAP fields to show in the results.</p><p>Example: <strong class="userinput"><code>net ads search '(objectCategory=group)' sAMAccountName</code></strong>
-</p></div><div class="refsect2" lang="en"><a name="id2554516"></a><h3>ADS DN <em class="replaceable"><code>DN</code></em> <em class="replaceable"><code>(attributes)</code></em></h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id325825"></a><h3>ADS DN <em class="replaceable"><code>DN</code></em> <em class="replaceable"><code>(attributes)</code></em></h3><p>
 Perform a raw LDAP search on a ADS server and dump the results. The 
 DN standard LDAP DN, and the attributes are a list of LDAP fields 
 to show in the result. 
-</p><p>Example: <strong class="userinput"><code>net ads dn 'CN=administrator,CN=Users,DC=my,DC=domain' SAMAccountName</code></strong></p></div><div class="refsect2" lang="en"><a name="id2554543"></a><h3>ADS WORKGROUP</h3><p>Print out workgroup name for specified kerberos realm.</p></div><div class="refsect2" lang="en"><a name="id2554554"></a><h3>SAM CREATEBUILTINGROUP &lt;NAME&gt;</h3><p>
+</p><p>Example: <strong class="userinput"><code>net ads dn 'CN=administrator,CN=Users,DC=my,DC=domain' SAMAccountName</code></strong></p></div><div class="refsect2" lang="en"><a name="id325849"></a><h3>ADS WORKGROUP</h3><p>Print out workgroup name for specified kerberos realm.</p></div><div class="refsect2" lang="en"><a name="id325859"></a><h3>SAM CREATEBUILTINGROUP &lt;NAME&gt;</h3><p>
 (Re)Create a BUILTIN group.
 Only a wellknown set of BUILTIN groups can be created with this command.
 This is the list of currently recognized group names: Administrators,
@@ -188,78 +188,78 @@
 
 This command requires a running Winbindd with idmap allocation properly
 configured. The group gid will be allocated out of the winbindd range.
-</p></div><div class="refsect2" lang="en"><a name="id2554573"></a><h3>SAM CREATELOCALGROUP &lt;NAME&gt;</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id325873"></a><h3>SAM CREATELOCALGROUP &lt;NAME&gt;</h3><p>
 Create a LOCAL group (also known as Alias).
 
 This command requires a running Winbindd with idmap allocation properly
 configured. The group gid will be allocated out of the winbindd range.
-</p></div><div class="refsect2" lang="en"><a name="id2554587"></a><h3>SAM DELETELOCALGROUP &lt;NAME&gt;</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id325884"></a><h3>SAM DELETELOCALGROUP &lt;NAME&gt;</h3><p>
 Delete an existing LOCAL group (also known as Alias).
 
-</p></div><div class="refsect2" lang="en"><a name="id2554598"></a><h3>SAM MAPUNIXGROUP &lt;NAME&gt;</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id325894"></a><h3>SAM MAPUNIXGROUP &lt;NAME&gt;</h3><p>
 Map an existing Unix group and make it a Domain Group, the domain group
 will have the same name.
-</p></div><div class="refsect2" lang="en"><a name="id2554610"></a><h3>SAM UNMAPUNIXGROUP &lt;NAME&gt;</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id325905"></a><h3>SAM UNMAPUNIXGROUP &lt;NAME&gt;</h3><p>
 Remove an existing group mapping entry.
-</p></div><div class="refsect2" lang="en"><a name="id2554622"></a><h3>SAM ADDMEM &lt;GROUP&gt; &lt;MEMBER&gt;</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id325914"></a><h3>SAM ADDMEM &lt;GROUP&gt; &lt;MEMBER&gt;</h3><p>
 Add a member to a Local group. The group can be specified only by name,
 the member can be specified by name or SID.
-</p></div><div class="refsect2" lang="en"><a name="id2554635"></a><h3>SAM DELMEM  &lt;GROUP&gt; &lt;MEMBER&gt;</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id325926"></a><h3>SAM DELMEM  &lt;GROUP&gt; &lt;MEMBER&gt;</h3><p>
 Remove a member from a Local group. The group and the member must be
 specified by name.
-</p></div><div class="refsect2" lang="en"><a name="id2554647"></a><h3>SAM LISTMEM &lt;GROUP&gt;</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id325937"></a><h3>SAM LISTMEM &lt;GROUP&gt;</h3><p>
 List Local group members. The group must be specified by name.
-</p></div><div class="refsect2" lang="en"><a name="id2554658"></a><h3>SAM LIST &lt;users|groups|localgroups|builtin|workstations&gt; [verbose]</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id325947"></a><h3>SAM LIST &lt;users|groups|localgroups|builtin|workstations&gt; [verbose]</h3><p>
 List the specified set of accounts by name. If verbose is specified,
 the rid and description is also provided for each account.
-</p></div><div class="refsect2" lang="en"><a name="id2554672"></a><h3>SAM SHOW &lt;NAME&gt;</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id325959"></a><h3>SAM SHOW &lt;NAME&gt;</h3><p>
 Show the full DOMAIN\\NAME the SID and the type for the corresponding
 account.
-</p></div><div class="refsect2" lang="en"><a name="id2554684"></a><h3>SAM SET HOMEDIR &lt;NAME&gt; &lt;DIRECTORY&gt;</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id325970"></a><h3>SAM SET HOMEDIR &lt;NAME&gt; &lt;DIRECTORY&gt;</h3><p>
 Set the home directory for a user account.
-</p></div><div class="refsect2" lang="en"><a name="id2554695"></a><h3>SAM SET PROFILEPATH &lt;NAME&gt; &lt;PATH&gt;</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id325979"></a><h3>SAM SET PROFILEPATH &lt;NAME&gt; &lt;PATH&gt;</h3><p>
 Set the profile path for a user account.
-</p></div><div class="refsect2" lang="en"><a name="id2554706"></a><h3>SAM SET COMMENT &lt;NAME&gt; &lt;COMMENT&gt;</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id325989"></a><h3>SAM SET COMMENT &lt;NAME&gt; &lt;COMMENT&gt;</h3><p>
 Set the comment for a user or group account.
-</p></div><div class="refsect2" lang="en"><a name="id2554718"></a><h3>SAM SET FULLNAME &lt;NAME&gt; &lt;FULL NAME&gt;</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id325998"></a><h3>SAM SET FULLNAME &lt;NAME&gt; &lt;FULL NAME&gt;</h3><p>
 Set the full name for a user account.
-</p></div><div class="refsect2" lang="en"><a name="id2554729"></a><h3>SAM SET LOGONSCRIPT &lt;NAME&gt; &lt;SCRIPT&gt;</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id326008"></a><h3>SAM SET LOGONSCRIPT &lt;NAME&gt; &lt;SCRIPT&gt;</h3><p>
 Set the logon script for a user account.
-</p></div><div class="refsect2" lang="en"><a name="id2554740"></a><h3>SAM SET HOMEDRIVE &lt;NAME&gt; &lt;DRIVE&gt;</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id326018"></a><h3>SAM SET HOMEDRIVE &lt;NAME&gt; &lt;DRIVE&gt;</h3><p>
 Set the home drive for a user account.
-</p></div><div class="refsect2" lang="en"><a name="id2554751"></a><h3>SAM SET WORKSTATIONS &lt;NAME&gt; &lt;WORKSTATIONS&gt;</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id326027"></a><h3>SAM SET WORKSTATIONS &lt;NAME&gt; &lt;WORKSTATIONS&gt;</h3><p>
 Set the workstations a user account is allowed to log in from.
-</p></div><div class="refsect2" lang="en"><a name="id2554763"></a><h3>SAM SET DISABLE &lt;NAME&gt;</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id326037"></a><h3>SAM SET DISABLE &lt;NAME&gt;</h3><p>
 Set the "disabled" flag for a user account.
-</p></div><div class="refsect2" lang="en"><a name="id2554774"></a><h3>SAM SET PWNOTREQ &lt;NAME&gt;</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id326047"></a><h3>SAM SET PWNOTREQ &lt;NAME&gt;</h3><p>
 Set the "password not required" flag for a user account.
-</p></div><div class="refsect2" lang="en"><a name="id2554786"></a><h3>SAM SET AUTOLOCK &lt;NAME&gt;</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id326057"></a><h3>SAM SET AUTOLOCK &lt;NAME&gt;</h3><p>
 Set the "autolock" flag for a user account.
-</p></div><div class="refsect2" lang="en"><a name="id2554797"></a><h3>SAM SET PWNOEXP &lt;NAME&gt;</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id326067"></a><h3>SAM SET PWNOEXP &lt;NAME&gt;</h3><p>
 Set the "password do not expire" flag for a user account.
-</p></div><div class="refsect2" lang="en"><a name="id2554808"></a><h3>SAM SET PWDMUSTCHANGENOW &lt;NAME&gt; [yes|no]</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id326077"></a><h3>SAM SET PWDMUSTCHANGENOW &lt;NAME&gt; [yes|no]</h3><p>
 Set or unset the "password must change" flag for a user account.
-</p></div><div class="refsect2" lang="en"><a name="id2554820"></a><h3>SAM POLICY LIST</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id326087"></a><h3>SAM POLICY LIST</h3><p>
 List the available account policies.
-</p></div><div class="refsect2" lang="en"><a name="id2554831"></a><h3>SAM POLICY SHOW &lt;account policy&gt;</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id326097"></a><h3>SAM POLICY SHOW &lt;account policy&gt;</h3><p>
 Show the account policy value.
-</p></div><div class="refsect2" lang="en"><a name="id2554842"></a><h3>SAM POLICY SET &lt;account policy&gt; &lt;value&gt;</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id326107"></a><h3>SAM POLICY SET &lt;account policy&gt; &lt;value&gt;</h3><p>
 Set a value for the account policy.
 Valid values can be: "forever", "never", "off", or a number.
-</p></div><div class="refsect2" lang="en"><a name="id2554855"></a><h3>SAM PROVISION</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id326118"></a><h3>SAM PROVISION</h3><p>
 Only available if ldapsam:editposix is set and winbindd is running.
 Properly populates the ldap tree with the basic accounts (Administrator)
 and groups (Domain Users, Domain Admins, Domain Guests) on the ldap tree.
-</p></div><div class="refsect2" lang="en"><a name="id2554868"></a><h3>IDMAP DUMP &lt;local tdb file name&gt;</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id326130"></a><h3>IDMAP DUMP &lt;local tdb file name&gt;</h3><p>
 Dumps the mappings contained in the local tdb file specified.
 This command is useful to dump only the mappings produced by the idmap_tdb backend.
-</p></div><div class="refsect2" lang="en"><a name="id2554882"></a><h3>IDMAP RESTORE [input file]</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id326141"></a><h3>IDMAP RESTORE [input file]</h3><p>
 Restore the mappings from the specified file or stdin.
-</p></div><div class="refsect2" lang="en"><a name="id2554893"></a><h3>IDMAP SECRET &lt;DOMAIN&gt;|ALLOC &lt;secret&gt;</h3><p>
+</p></div><div class="refsect2" lang="en"><a name="id326152"></a><h3>IDMAP SECRET &lt;DOMAIN&gt;|ALLOC &lt;secret&gt;</h3><p>
 Store a secret for the specified domain, used primarily for domains
 that use idmap_ldap as a backend. In this case the secret is used
 as the password for the user DN used to bind to the ldap server.
-</p></div><div class="refsect2" lang="en"><a name="id2554908"></a><h3>USERSHARE</h3><p>Starting with version 3.0.23, a Samba server now supports the ability for
+</p></div><div class="refsect2" lang="en"><a name="id326164"></a><h3>USERSHARE</h3><p>Starting with version 3.0.23, a Samba server now supports the ability for
 non-root users to add user defined shares to be exported using the "net usershare"
 commands.
 </p><p>
@@ -288,7 +288,7 @@
 
 </p><table class="simplelist" border="0" summary="Simple list"><tr><td>net usershare add sharename path [comment] [acl] [guest_ok=[y|n]] - to add or change a user defined share.</td></tr><tr><td>net usershare delete sharename - to delete a user defined share.</td></tr><tr><td>net usershare info [-l|--long] [wildcard sharename] - to print info about a user defined share.</td></tr><tr><td>net usershare list [-l|--long] [wildcard sharename] - to list user defined shares.</td></tr></table><p>
 
-</p><div class="refsect3" lang="en"><a name="id2554966"></a><h4>USERSHARE ADD <em class="replaceable"><code>sharename</code></em> <em class="replaceable"><code>path</code></em> <em class="replaceable"><code>[comment]</code></em> <em class="replaceable"><code>[acl]</code></em> <em class="replaceable"><code>[guest_ok=[y|n]]</code></em></h4><p>
+</p><div class="refsect3" lang="en"><a name="id326209"></a><h4>USERSHARE ADD <em class="replaceable"><code>sharename</code></em> <em class="replaceable"><code>path</code></em> <em class="replaceable"><code>[comment]</code></em> <em class="replaceable"><code>[acl]</code></em> <em class="replaceable"><code>[guest_ok=[y|n]]</code></em></h4><p>
 Add or replace a new user defined share, with name "sharename".
 </p><p>
 "path" specifies the absolute pathname on the system to be exported.
@@ -325,11 +325,11 @@
 you wish. The Samba smbd daemon notices user defined share modifications
 at connect time so will see the change immediately, there is no need
 to restart smbd on adding, deleting or changing a user defined share.
-</div><div class="refsect3" lang="en"><a name="id2555040"></a><h4>USERSHARE DELETE <em class="replaceable"><code>sharename</code></em></h4><p>
+</div><div class="refsect3" lang="en"><a name="id326266"></a><h4>USERSHARE DELETE <em class="replaceable"><code>sharename</code></em></h4><p>
 Deletes the user defined share by name. The Samba smbd daemon
 immediately notices this change, although it will not disconnect
 any users currently connected to the deleted share.
-</p></div><div class="refsect3" lang="en"><a name="id2555056"></a><h4>USERSHARE INFO <em class="replaceable"><code>[-l|--long]</code></em> <em class="replaceable"><code>[wildcard sharename]</code></em></h4><p>
+</p></div><div class="refsect3" lang="en"><a name="id326279"></a><h4>USERSHARE INFO <em class="replaceable"><code>[-l|--long]</code></em> <em class="replaceable"><code>[wildcard sharename]</code></em></h4><p>
 Get info on user defined shares owned by the current user matching the given pattern, or all users.
 </p><p>
 net usershare info on its own dumps out info on the user defined shares that were
@@ -348,7 +348,7 @@
 
 And is a list of the current settings of the user defined share that can be
 modified by the "net usershare add" command.
-</p></div><div class="refsect3" lang="en"><a name="id2555091"></a><h4>USERSHARE LIST <em class="replaceable"><code>[-l|--long]</code></em> <em class="replaceable"><code>wildcard sharename</code></em></h4><p>
+</p></div><div class="refsect3" lang="en"><a name="id326307"></a><h4>USERSHARE LIST <em class="replaceable"><code>[-l|--long]</code></em> <em class="replaceable"><code>wildcard sharename</code></em></h4><p>
 List all the user defined shares owned by the current user matching the given pattern, or all users.
 </p><p>
 net usershare list on its own list out the names of the user defined shares that were
@@ -356,61 +356,8 @@
 wildcard pattern ('*' matches one or more characters, '?' matches only one character).
 If the '-l' or '--long' option is also given, it includes the names of user defined
 shares created by other users.
-</p></div></div><div class="refsect2" lang="en"><a name="id2555126"></a><h3>CONF</h3><p>Starting with version 3.2.0, a Samba server can be configured by data
-stored in registry. This configuration data can be edited with the new "net
-conf" commands.
-</p><p>
-The deployment of this configuration data can be activated in two levels from the
-<span class="emphasis"><em>smb.conf</em></span> file: Share definitions from registry are
-activated by setting <em class="parameter"><code>registry shares</code></em> to
-&#8220;<span class="quote">yes</span>&#8221; in the [global] section and global configuration options are
-activated by setting <a class="link" href="smb.conf.5.html#INCLUDE">include = registry</a> in
-the [global] section.
-See the <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a> manpage for details.
-</p><p>The conf commands are:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td>net conf list - Dump the complete configuration in smb.conf like
-format.</td></tr><tr><td>net conf import - Import configuration from file in smb.conf
-format.</td></tr><tr><td>net conf listshares - List the registry shares.</td></tr><tr><td>net conf drop - Delete the complete configuration from
-registry.</td></tr><tr><td>net conf showshare - Show the definition of a registry share.</td></tr><tr><td>net conf addshare - Create a new registry share.</td></tr><tr><td>net conf delshare - Delete a registry share.</td></tr><tr><td>net conf setparm - Store a parameter.</td></tr><tr><td>net conf getparm - Retrieve the value of a parameter.</td></tr><tr><td>net conf delparm - Delete a parameter.</td></tr></table><p>
-</p><div class="refsect3" lang="en"><a name="id2555230"></a><h4>CONF LIST</h4><p>
-Print the configuration data stored in the registry in a smb.conf-like format to
-standard output.
-</p></div><div class="refsect3" lang="en"><a name="id2555241"></a><h4>CONF IMPORT <em class="replaceable"><code>[--test|-T]</code></em> <em class="replaceable"><code>filename</code></em> <em class="replaceable"><code>[section]</code></em></h4><p>
-This command imports configuration from a file in smb.conf format.
-If a section encountered in the input file is present in registry,
-its contents is replaced. Sections of registry configuration that have
-no counterpart in the input file are not affected. If you want to delete these,
-you will have to use the "net conf drop" or "net conf delshare" commands.
-Optionally, a section may be specified to restrict the effect of the
-import command to that specific section. A test mode is enabled by specifying
-the parameter "-T" on the commandline. In test mode, no changes are made to the
-registry, and the resulting configuration is printed to standard output instead.
-</p></div><div class="refsect3" lang="en"><a name="id2555272"></a><h4>CONF LISTSHARES</h4><p>
-List the names of the shares defined in registry.
-</p></div><div class="refsect3" lang="en"><a name="id2555283"></a><h4>CONF DROP</h4><p>
-Delete the complete configuration data from registry.
-</p></div><div class="refsect3" lang="en"><a name="id2555294"></a><h4>CONF SHOWSHARE <em class="replaceable"><code>sharename</code></em></h4><p>
-Show the definition of the share or section specified. It is valid to specify
-"global" as sharename to retrieve the global configuration options from
-registry.
-</p></div><div class="refsect3" lang="en"><a name="id2555309"></a><h4>CONF ADDSHARE <em class="replaceable"><code>sharename</code></em> <em class="replaceable"><code>path</code></em> [<em class="replaceable"><code>writeable={y|N}</code></em> [<em class="replaceable"><code>guest_ok={y|N}</code></em> [<em class="replaceable"><code>comment</code></em>]]] </h4><p>Create a new share definition in registry.
-The sharename and path have to be given. The share name may
-<span class="emphasis"><em>not</em></span> be "global". Optionally, values for the very
-common options "writeable", "guest ok" and a "comment" may be specified.
-The same result may be obtained by a sequence of "net conf setparm"
-commands.
-</p></div><div class="refsect3" lang="en"><a name="id2555345"></a><h4>CONF DELSHARE <em class="replaceable"><code>sharename</code></em></h4><p>
-Delete a share definition from registry.
-</p></div><div class="refsect3" lang="en"><a name="id2555359"></a><h4>CONF SETPARM <em class="replaceable"><code>section</code></em> <em class="replaceable"><code>parameter</code></em> <em class="replaceable"><code>value</code></em></h4><p>
-Store a parameter in registry. The section may be global or a sharename.
-The section is created if it does not exist yet.
-</p></div><div class="refsect3" lang="en"><a name="id2555380"></a><h4>CONF GETPARM <em class="replaceable"><code>section</code></em> <em class="replaceable"><code>parameter</code></em></h4><p>
-Show a parameter stored in registry.
-</p></div><div class="refsect3" lang="en"><a name="id2555397"></a><h4>CONF DELPARM <em class="replaceable"><code>section</code></em> <em class="replaceable"><code>parameter</code></em></h4><p>
-Delete a parameter stored in registry.
-</p></div><div class="refsect3" lang="en"><a name="id2555413"></a><h4></h4><p>
-</p></div></div><div class="refsect2" lang="en"><a name="id2555423"></a><h3>HELP [COMMAND]</h3><p>Gives usage information for the specified command.</p></div></div><div class="refsect1" lang="en"><a name="id2555435"></a><h2>VERSION</h2><p>This man page is complete for version 3.0 of the Samba 
-	suite.</p></div><div class="refsect1" lang="en"><a name="id2555446"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+</p></div></div><div class="refsect2" lang="en"><a name="id326334"></a><h3>HELP [COMMAND]</h3><p>Gives usage information for the specified command.</p></div></div><div class="refsect1" lang="en"><a name="id326344"></a><h2>VERSION</h2><p>This man page is complete for version 3.0 of the Samba 
+	suite.</p></div><div class="refsect1" lang="en"><a name="id326354"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p>The net manpage was written by Jelmer Vernooij.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/nmbd.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/nmbd.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/nmbd.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,5 +1,5 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>nmbd</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="nmbd.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>nmbd &#8212; NetBIOS name server to provide NetBIOS 
-	over IP naming services to clients</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">nmbd</code> [-D] [-F] [-S] [-a] [-i] [-o] [-h] [-V] [-d &lt;debug level&gt;] [-H &lt;lmhosts file&gt;] [-l &lt;log directory&gt;] [-p &lt;port number&gt;] [-s &lt;configuration file&gt;]</p></div></div><div class="refsect1" lang="en"><a name="id2507242"></a><h2>DESCRIPTION</h2><p>This program is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">nmbd</code> is a server that understands 
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>nmbd</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="nmbd.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>nmbd &#8212; NetBIOS name server to provide NetBIOS 
+	over IP naming services to clients</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">nmbd</code> [-D] [-F] [-S] [-a] [-i] [-o] [-h] [-V] [-d &lt;debug level&gt;] [-H &lt;lmhosts file&gt;] [-l &lt;log directory&gt;] [-p &lt;port number&gt;] [-s &lt;configuration file&gt;]</p></div></div><div class="refsect1" lang="en"><a name="id282811"></a><h2>DESCRIPTION</h2><p>This program is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">nmbd</code> is a server that understands 
 	and can reply to NetBIOS over IP name service requests, like 
 	those produced by SMB/CIFS clients such as Windows 95/98/ME, 
 	Windows NT, Windows 2000, Windows XP and LanManager clients. It also
@@ -22,7 +22,7 @@
 	replying to queries from clients for these names.</p><p>In addition, <code class="literal">nmbd</code> can act as a WINS 
 	proxy, relaying broadcast queries from clients that do 
 	not understand how to talk the WINS protocol to a WINS 
-	server.</p></div><div class="refsect1" lang="en"><a name="id2507458"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-D</span></dt><dd><p>If specified, this parameter causes 
+	server.</p></div><div class="refsect1" lang="en"><a name="id283029"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-D</span></dt><dd><p>If specified, this parameter causes 
 		<code class="literal">nmbd</code> to operate as a daemon. That is, 
 		it detaches itself and runs in the background, fielding 
 		requests on the appropriate port. By default, <code class="literal">nmbd</code> 
@@ -88,7 +88,7 @@
 		This option changes the default UDP port number (normally 137)
 		that <code class="literal">nmbd</code> responds to name queries on. Don't
 		use this option unless you are an expert, in which case you
-		won't need help!</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2506540"></a><h2>FILES</h2><div class="variablelist"><dl><dt><span class="term"><code class="filename">/etc/inetd.conf</code></span></dt><dd><p>If the server is to be run by the
+		won't need help!</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id324682"></a><h2>FILES</h2><div class="variablelist"><dl><dt><span class="term"><code class="filename">/etc/inetd.conf</code></span></dt><dd><p>If the server is to be run by the
 		<code class="literal">inetd</code> meta-daemon, this file
 		must contain suitable startup information for the
 		meta-daemon. 
@@ -115,7 +115,7 @@
 		will store the browsing database in the file <code class="filename">browse.dat
 		</code> in the <code class="filename">var/locks</code> directory
 		configured under wherever Samba was configured to install itself.
-		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2506751"></a><h2>SIGNALS</h2><p>To shut down an <code class="literal">nmbd</code> process it is recommended
+		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id324858"></a><h2>SIGNALS</h2><p>To shut down an <code class="literal">nmbd</code> process it is recommended
 	that SIGKILL (-9) <span class="emphasis"><em>NOT</em></span> be used, except as a last
 	resort, as this may leave the name database in an inconsistent state.
 	The correct way to terminate <code class="literal">nmbd</code> is to send it
@@ -129,13 +129,13 @@
 	using <a class="citerefentry" href="smbcontrol.1.html"><span class="citerefentry"><span class="refentrytitle">smbcontrol</span>(1)</span></a> (SIGUSR[1|2] signals
 	are no longer used since Samba 2.2). This is to allow
 	transient problems to be diagnosed, whilst still running 
-	at a normally low log level.</p></div><div class="refsect1" lang="en"><a name="id2553535"></a><h2>VERSION</h2><p>This man page is correct for version 3 of 
-	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2553546"></a><h2>SEE ALSO</h2><p>
+	at a normally low log level.</p></div><div class="refsect1" lang="en"><a name="id324930"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of 
+	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id324940"></a><h2>SEE ALSO</h2><p>
 	<a class="citerefentry" href="inetd.8.html"><span class="citerefentry"><span class="refentrytitle">inetd</span>(8)</span></a>, <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a>, <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a>, <a class="citerefentry" href="smbclient.1.html"><span class="citerefentry"><span class="refentrytitle">smbclient</span>(1)</span></a>, <a class="citerefentry" href="testparm.1.html"><span class="citerefentry"><span class="refentrytitle">testparm</span>(1)</span></a>, <a class="citerefentry" href="testprns.1.html"><span class="citerefentry"><span class="refentrytitle">testprns</span>(1)</span></a>, and the Internet 
 	RFC's <code class="filename">rfc1001.txt</code>, <code class="filename">rfc1002.txt</code>. 
 	In addition the CIFS (formerly SMB) specification is available 
 	as a link from the Web page <a class="ulink" href="http://samba.org/cifs/" target="_top"> 
-	http://samba.org/cifs/</a>.</p></div><div class="refsect1" lang="en"><a name="id2553625"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+	http://samba.org/cifs/</a>.</p></div><div class="refsect1" lang="en"><a name="id325013"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p>The original Samba man pages were written by Karl Auer. 

Modified: branches/samba/upstream/docs/htmldocs/manpages/nmblookup.1.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/nmblookup.1.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/nmblookup.1.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,9 +1,9 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>nmblookup</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="nmblookup"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>nmblookup &#8212; NetBIOS over TCP/IP client used to lookup NetBIOS 
-	names</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">nmblookup</code> [-M] [-R] [-S] [-r] [-A] [-h] [-B &lt;broadcast address&gt;] [-U &lt;unicast address&gt;] [-d &lt;debug level&gt;] [-s &lt;smb config file&gt;] [-i &lt;NetBIOS scope&gt;] [-T] [-f] {name}</p></div></div><div class="refsect1" lang="en"><a name="id2507249"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">nmblookup</code> is used to query NetBIOS names 
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>nmblookup</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="nmblookup"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>nmblookup &#8212; NetBIOS over TCP/IP client used to lookup NetBIOS 
+	names</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">nmblookup</code> [-M] [-R] [-S] [-r] [-A] [-h] [-B &lt;broadcast address&gt;] [-U &lt;unicast address&gt;] [-d &lt;debug level&gt;] [-s &lt;smb config file&gt;] [-i &lt;NetBIOS scope&gt;] [-T] [-f] {name}</p></div></div><div class="refsect1" lang="en"><a name="id282793"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">nmblookup</code> is used to query NetBIOS names 
 	and map them to IP addresses in a network using NetBIOS over TCP/IP 
 	queries. The options allow the name queries to be directed at a 
 	particular IP broadcast area or to a particular machine. All queries 
-	are done over UDP.</p></div><div class="refsect1" lang="en"><a name="id2507279"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-M</span></dt><dd><p>Searches for a master browser by looking 
+	are done over UDP.</p></div><div class="refsect1" lang="en"><a name="id283377"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-M</span></dt><dd><p>Searches for a master browser by looking 
 		up the  NetBIOS name <em class="replaceable"><code>name</code></em> with a 
 		type of <code class="constant">0x1d</code>. If <em class="replaceable"><code>
 		name</code></em> is "-" then it does a lookup on the special name 
@@ -88,12 +88,12 @@
 		If a NetBIOS name then the different name types may be specified 
 		by appending '#&lt;type&gt;' to the name. This name may also be
 		'*', which will return all registered names within a broadcast 
-		area.</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2506553"></a><h2>EXAMPLES</h2><p><code class="literal">nmblookup</code> can be used to query 
+		area.</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id324678"></a><h2>EXAMPLES</h2><p><code class="literal">nmblookup</code> can be used to query 
 		a WINS server (in the same way <code class="literal">nslookup</code> is 
 		used to query DNS servers). To query a WINS server, <code class="literal">nmblookup</code> 
 		must be called like this:</p><p><code class="literal">nmblookup -U server -R 'name'</code></p><p>For example, running :</p><p><code class="literal">nmblookup -U samba.org -R 'IRIX#1B'</code></p><p>would query the WINS server samba.org for the domain 
-		master browser (1B name type) for the IRIX workgroup.</p></div><div class="refsect1" lang="en"><a name="id2506605"></a><h2>VERSION</h2><p>This man page is correct for version 3 of 
-	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2506616"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a>, <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a>, and <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a>.</p></div><div class="refsect1" lang="en"><a name="id2506649"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+		master browser (1B name type) for the IRIX workgroup.</p></div><div class="refsect1" lang="en"><a name="id324723"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of 
+	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id324734"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a>, <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a>, and <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a>.</p></div><div class="refsect1" lang="en"><a name="id324765"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p>The original Samba man pages were written by Karl Auer. 

Modified: branches/samba/upstream/docs/htmldocs/manpages/ntlm_auth.1.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/ntlm_auth.1.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/ntlm_auth.1.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,18 +1,18 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ntlm_auth</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="ntlm-auth.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ntlm_auth &#8212; tool to allow external access to Winbind's NTLM authentication function</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">ntlm_auth</code> [-d debuglevel] [-l logdir] [-s &lt;smb config file&gt;]</p></div></div><div class="refsect1" lang="en"><a name="id2544148"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">ntlm_auth</code> is a helper utility that authenticates 
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>ntlm_auth</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="ntlm-auth.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>ntlm_auth &#8212; tool to allow external access to Winbind's NTLM authentication function</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">ntlm_auth</code> [-d debuglevel] [-l logdir] [-s &lt;smb config file&gt;]</p></div></div><div class="refsect1" lang="en"><a name="id283753"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">ntlm_auth</code> is a helper utility that authenticates 
 	users using NT/LM authentication. It returns 0 if the users is authenticated
 	successfully and 1 if access was denied. ntlm_auth uses winbind to access 
 	the user and authentication data for a domain.  This utility 
 	is only indended to be used by other programs (currently
 	<a class="ulink" href="http://www.squid-cache.org/" target="_top">Squid</a>
 	and <a class="ulink" href="http://download.samba.org/ftp/unpacked/lorikeet/trunk/mod_ntlm_winbind/" target="_top">mod_ntlm_winbind</a>)
-	</p></div><div class="refsect1" lang="en"><a name="id2507208"></a><h2>OPERATIONAL REQUIREMENTS</h2><p>
+	</p></div><div class="refsect1" lang="en"><a name="id282750"></a><h2>OPERATIONAL REQUIREMENTS</h2><p>
     The <a class="citerefentry" href="winbindd.8.html"><span class="citerefentry"><span class="refentrytitle">winbindd</span>(8)</span></a> daemon must be operational
     for many of these commands to function.</p><p>Some of these commands also require access to the directory 
     <code class="filename">winbindd_privileged</code> in
     <code class="filename">$LOCKDIR</code>.  This should be done either by running
     this command as root or providing group access
     to the <code class="filename">winbindd_privileged</code> directory.  For
-    security reasons, this directory should not be world-accessable. </p></div><div class="refsect1" lang="en"><a name="id2507254"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">--helper-protocol=PROTO</span></dt><dd><p>
+    security reasons, this directory should not be world-accessable. </p></div><div class="refsect1" lang="en"><a name="id282790"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">--helper-protocol=PROTO</span></dt><dd><p>
 	Operate as a stdio-based helper.  Valid helper protocols are:
         </p><div class="variablelist"><dl><dt><span class="term">squid-2.4-basic</span></dt><dd><p>
                 Server-side helper for use with Squid 2.4's basic (plaintext)
@@ -65,32 +65,32 @@
 		a newline.  They may also need to decode strings from
 		the helper, which likewise may have been base64 encoded.</div><dl><dt><span class="term">Username</span></dt><dd><p>The username, expected to be in
                 Samba's <a class="link" href="smb.conf.5.html#UNIXCHARSET">unix charset</a>.
-                </p><div class="example"><a name="id2507505"></a><p class="title"><b>Example 1. </b></p><div class="example-contents">Username: bob</div></div><p><br class="example-break"></p><div class="example"><a name="id2507510"></a><p class="title"><b>Example 2. </b></p><div class="example-contents">Username:: Ym9i</div></div><p><br class="example-break"></p></dd><dt><span class="term">Username</span></dt><dd><p>The user's domain, expected to be in
+                </p><div class="example"><a name="id283022"></a><p class="title"><b>Example 1. </b></p><div class="example-contents">Username: bob</div></div><p><br class="example-break"></p><div class="example"><a name="id283027"></a><p class="title"><b>Example 2. </b></p><div class="example-contents">Username:: Ym9i</div></div><p><br class="example-break"></p></dd><dt><span class="term">Username</span></dt><dd><p>The user's domain, expected to be in
                 Samba's <a class="link" href="smb.conf.5.html#UNIXCHARSET">unix charset</a>.
-                </p><div class="example"><a name="id2506362"></a><p class="title"><b>Example 3. </b></p><div class="example-contents">Domain: WORKGROUP</div></div><p><br class="example-break"></p><div class="example"><a name="id2506366"></a><p class="title"><b>Example 4. </b></p><div class="example-contents">Domain:: V09SS0dST1VQ</div></div><p><br class="example-break"></p></dd><dt><span class="term">Full-Username</span></dt><dd><p>The fully qualified username, expected to be in
+                </p><div class="example"><a name="id283053"></a><p class="title"><b>Example 3. </b></p><div class="example-contents">Domain: WORKGROUP</div></div><p><br class="example-break"></p><div class="example"><a name="id283057"></a><p class="title"><b>Example 4. </b></p><div class="example-contents">Domain:: V09SS0dST1VQ</div></div><p><br class="example-break"></p></dd><dt><span class="term">Full-Username</span></dt><dd><p>The fully qualified username, expected to be in
                 Samba's <a class="link" href="smb.conf.5.html#UNIXCHARSET">unix charset</a> and qualified with the
                 <a class="link" href="smb.conf.5.html#WINBINDSEPARATOR">winbind separator</a>.
-                </p><div class="example"><a name="id2506407"></a><p class="title"><b>Example 5. </b></p><div class="example-contents">Full-Username: WORKGROUP\bob</div></div><p><br class="example-break"></p><div class="example"><a name="id2506412"></a><p class="title"><b>Example 6. </b></p><div class="example-contents">Full-Username:: V09SS0dST1VQYm9i</div></div><p><br class="example-break"></p></dd><dt><span class="term">LANMAN-Challenge</span></dt><dd><p>The 8 byte <code class="literal">LANMAN Challenge</code> value,
+                </p><div class="example"><a name="id283094"></a><p class="title"><b>Example 5. </b></p><div class="example-contents">Full-Username: WORKGROUP\bob</div></div><p><br class="example-break"></p><div class="example"><a name="id324564"></a><p class="title"><b>Example 6. </b></p><div class="example-contents">Full-Username:: V09SS0dST1VQYm9i</div></div><p><br class="example-break"></p></dd><dt><span class="term">LANMAN-Challenge</span></dt><dd><p>The 8 byte <code class="literal">LANMAN Challenge</code> value,
                 generated randomly by the server, or (in cases such as
                 MSCHAPv2) generated in some way by both the server and
                 the client.
-                </p><div class="example"><a name="id2506437"></a><p class="title"><b>Example 7. </b></p><div class="example-contents">LANMAN-Challege: 0102030405060708</div></div><p><br class="example-break"></p></dd><dt><span class="term">LANMAN-Response</span></dt><dd><p>The 24 byte <code class="literal">LANMAN Response</code> value,
+                </p><div class="example"><a name="id324585"></a><p class="title"><b>Example 7. </b></p><div class="example-contents">LANMAN-Challege: 0102030405060708</div></div><p><br class="example-break"></p></dd><dt><span class="term">LANMAN-Response</span></dt><dd><p>The 24 byte <code class="literal">LANMAN Response</code> value,
                 calculated from the user's password and the supplied
                 <code class="literal">LANMAN Challenge</code>.  Typically, this
                 is provided over the network by a client wishing to authenticate.
-                </p><div class="example"><a name="id2506469"></a><p class="title"><b>Example 8. </b></p><div class="example-contents">LANMAN-Response: 0102030405060708090A0B0C0D0E0F101112131415161718</div></div><p><br class="example-break"></p></dd><dt><span class="term">NT-Response</span></dt><dd><p>The &gt;= 24 byte <code class="literal">NT Response</code>
+                </p><div class="example"><a name="id324612"></a><p class="title"><b>Example 8. </b></p><div class="example-contents">LANMAN-Response: 0102030405060708090A0B0C0D0E0F101112131415161718</div></div><p><br class="example-break"></p></dd><dt><span class="term">NT-Response</span></dt><dd><p>The &gt;= 24 byte <code class="literal">NT Response</code>
                 calculated from the user's password and the supplied
                 <code class="literal">LANMAN Challenge</code>.  Typically, this is 
                 provided over the network by a client wishing to authenticate.
-                 </p><div class="example"><a name="id2506501"></a><p class="title"><b>Example 9. </b></p><div class="example-contents">NT-Response: 0102030405060708090A0B0C0D0E0F101112131415161718</div></div><p><br class="example-break"></p></dd><dt><span class="term">Password</span></dt><dd><p>The user's password.  This would be
+                 </p><div class="example"><a name="id324640"></a><p class="title"><b>Example 9. </b></p><div class="example-contents">NT-Response: 0102030405060708090A0B0C0D0E0F101112131415161718</div></div><p><br class="example-break"></p></dd><dt><span class="term">Password</span></dt><dd><p>The user's password.  This would be
                 provided by a network client, if the helper is being
                 used in a legacy situation that exposes plaintext
                 passwords in this way.
-                 </p><div class="example"><a name="id2506522"></a><p class="title"><b>Example 10. </b></p><div class="example-contents">Password: samba2</div></div><p><br class="example-break"></p><div class="example"><a name="id2506526"></a><p class="title"><b>Example 11. </b></p><div class="example-contents">Password:: c2FtYmEy</div></div><p><br class="example-break"></p></dd><dt><span class="term">Request-User-Session-Key</span></dt><dd><p>Apon sucessful authenticaiton, return
+                 </p><div class="example"><a name="id324657"></a><p class="title"><b>Example 10. </b></p><div class="example-contents">Password: samba2</div></div><p><br class="example-break"></p><div class="example"><a name="id324662"></a><p class="title"><b>Example 11. </b></p><div class="example-contents">Password:: c2FtYmEy</div></div><p><br class="example-break"></p></dd><dt><span class="term">Request-User-Session-Key</span></dt><dd><p>Apon sucessful authenticaiton, return
                 the user session key associated with the login.
-                 </p><div class="example"><a name="id2506544"></a><p class="title"><b>Example 12. </b></p><div class="example-contents">Request-User-Session-Key: Yes</div></div><p><br class="example-break"></p></dd><dt><span class="term">Request-LanMan-Session-Key</span></dt><dd><p>Apon sucessful authenticaiton, return
+                 </p><div class="example"><a name="id324678"></a><p class="title"><b>Example 12. </b></p><div class="example-contents">Request-User-Session-Key: Yes</div></div><p><br class="example-break"></p></dd><dt><span class="term">Request-LanMan-Session-Key</span></dt><dd><p>Apon sucessful authenticaiton, return
                 the LANMAN session key associated with the login.
-                 </p><div class="example"><a name="id2506563"></a><p class="title"><b>Example 13. </b></p><div class="example-contents">Request-LanMan-Session-Key: Yes</div></div><p><br class="example-break"></p></dd></dl></div></dd></dl></div></dd><dt><span class="term">--username=USERNAME</span></dt><dd><p>
+                 </p><div class="example"><a name="id324694"></a><p class="title"><b>Example 13. </b></p><div class="example-contents">Request-LanMan-Session-Key: Yes</div></div><p><br class="example-break"></p></dd></dl></div></dd></dl></div></dd><dt><span class="term">--username=USERNAME</span></dt><dd><p>
 	Specify username of user to authenticate
 	</p></dd><dt><span class="term">--domain=DOMAIN</span></dt><dd><p>
 	Specify domain of user to authenticate
@@ -128,7 +128,7 @@
 <code class="constant">".progname"</code> will be appended (e.g. log.smbclient, 
 log.smbd, etc...). The log file is never removed by the client.
 </p></dd><dt><span class="term">-h|--help</span></dt><dd><p>Print a summary of command line options.
-</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2553557"></a><h2>EXAMPLE SETUP</h2><p>To setup ntlm_auth for use by squid 2.5, with both basic and
+</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id324948"></a><h2>EXAMPLE SETUP</h2><p>To setup ntlm_auth for use by squid 2.5, with both basic and
 	NTLMSSP authentication, the following
 	should be placed in the <code class="filename">squid.conf</code> file.
 </p><pre class="programlisting">
@@ -144,13 +144,13 @@
 </p><pre class="programlisting">
 auth_param ntlm program ntlm_auth --helper-protocol=squid-2.5-ntlmssp --require-membership-of='WORKGROUP\Domain Users'
 auth_param basic program ntlm_auth --helper-protocol=squid-2.5-basic --require-membership-of='WORKGROUP\Domain Users'
-</pre></div><div class="refsect1" lang="en"><a name="id2553618"></a><h2>TROUBLESHOOTING</h2><p>If you're experiencing problems with authenticating Internet Explorer running
+</pre></div><div class="refsect1" lang="en"><a name="id324997"></a><h2>TROUBLESHOOTING</h2><p>If you're experiencing problems with authenticating Internet Explorer running
 	under MS Windows 9X or Millenium Edition against ntlm_auth's NTLMSSP authentication
 	helper (--helper-protocol=squid-2.5-ntlmssp), then please read 
 	<a class="ulink" href="http://support.microsoft.com/support/kb/articles/Q239/8/69.ASP" target="_top">
 	the Microsoft Knowledge Base article #239869 and follow instructions described there</a>.
-	</p></div><div class="refsect1" lang="en"><a name="id2553640"></a><h2>VERSION</h2><p>This man page is correct for version 3 of the Samba 
-	suite.</p></div><div class="refsect1" lang="en"><a name="id2553651"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+	</p></div><div class="refsect1" lang="en"><a name="id325015"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of the Samba 
+	suite.</p></div><div class="refsect1" lang="en"><a name="id325025"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p>The ntlm_auth manpage was written by Jelmer Vernooij and

Modified: branches/samba/upstream/docs/htmldocs/manpages/pam_winbind.7.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/pam_winbind.7.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/pam_winbind.7.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,6 +1,6 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>pam_winbind</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="pam_winbind.7"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>pam_winbind &#8212; PAM module for Winbind</p></div><div class="refsect1" lang="en"><a name="id2544100"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>pam_winbind</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="pam_winbind.7"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>pam_winbind &#8212; PAM module for Winbind</p></div><div class="refsect1" lang="en"><a name="id315537"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>
 	pam_winbind is a PAM module that can authenticate users against the local domain by talking to the Winbind daemon.
-	</p></div><div class="refsect1" lang="en"><a name="id2544124"></a><h2>OPTIONS</h2><p>
+	</p></div><div class="refsect1" lang="en"><a name="id283737"></a><h2>OPTIONS</h2><p>
 	
 		pam_winbind supports several options which can either be set in
 		the PAM configuration files or in the pam_winbind configuration
@@ -55,7 +55,7 @@
 		</p></dd></dl></div><p>
 
 
-	</p></div><div class="refsect1" lang="en"><a name="id2507350"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="wbinfo.1.html"><span class="citerefentry"><span class="refentrytitle">wbinfo</span>(1)</span></a>, <a class="citerefentry" href="winbindd.8.html"><span class="citerefentry"><span class="refentrytitle">winbindd</span>(8)</span></a>, <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a></p></div><div class="refsect1" lang="en"><a name="id2507385"></a><h2>VERSION</h2><p>This man page is correct for version 3 of Samba.</p></div><div class="refsect1" lang="en"><a name="id2507396"></a><h2>AUTHOR</h2><p>
+	</p></div><div class="refsect1" lang="en"><a name="id282887"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="wbinfo.1.html"><span class="citerefentry"><span class="refentrytitle">wbinfo</span>(1)</span></a>, <a class="citerefentry" href="winbindd.8.html"><span class="citerefentry"><span class="refentrytitle">winbindd</span>(8)</span></a>, <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a></p></div><div class="refsect1" lang="en"><a name="id282921"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of Samba.</p></div><div class="refsect1" lang="en"><a name="id282931"></a><h2>AUTHOR</h2><p>
 	The original Samba software and related utilities were created by Andrew Tridgell. Samba is now developed by
 	the Samba Team as an Open Source project similar to the way the Linux kernel is developed.
 	</p><p>This manpage was written by Jelmer Vernooij and Guenther Deschner.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/pdbedit.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/pdbedit.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/pdbedit.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,10 +1,10 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>pdbedit</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="pdbedit.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>pdbedit &#8212; manage the SAM database (Database of Samba Users)</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">pdbedit</code> [-L] [-v] [-w] [-u username] [-f fullname] [-h homedir] [-D drive] [-S script] [-p profile] [-a] [-t, --password-from-stdin] [-m] [-r] [-x] [-i passdb-backend] [-e passdb-backend] [-b passdb-backend] [-g] [-d debuglevel] [-s configfile] [-P account-policy] [-C value] [-c account-control] [-y]</p></div></div><div class="refsect1" lang="en"><a name="id2507324"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The pdbedit program is used to manage the users accounts
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>pdbedit</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="pdbedit.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>pdbedit &#8212; manage the SAM database (Database of Samba Users)</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">pdbedit</code> [-L] [-v] [-w] [-u username] [-f fullname] [-h homedir] [-D drive] [-S script] [-p profile] [-a] [-t, --password-from-stdin] [-m] [-r] [-x] [-i passdb-backend] [-e passdb-backend] [-b passdb-backend] [-g] [-d debuglevel] [-s configfile] [-P account-policy] [-C value] [-c account-control] [-y]</p></div></div><div class="refsect1" lang="en"><a name="id283425"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The pdbedit program is used to manage the users accounts
 	stored in the sam database and can only be run by root.</p><p>The pdbedit tool uses the passdb modular interface and is
 	independent from the kind of users database used (currently there
 	are smbpasswd, ldap, nis+ and tdb based and more can be added
 	without changing the tool).</p><p>There are five main ways to use pdbedit: adding a user account,
 	removing a user account, modifing a user account, listing user
-	accounts, importing users accounts.</p></div><div class="refsect1" lang="en"><a name="id2507360"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-L</span></dt><dd><p>This option lists all the user accounts
+	accounts, importing users accounts.</p></div><div class="refsect1" lang="en"><a name="id282907"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-L</span></dt><dd><p>This option lists all the user accounts
 		present in the users database.
 		This option prints a list of user/uid pairs separated by
 		the ':' character.</p><p>Example: <code class="literal">pdbedit -L</code></p><pre class="programlisting">
@@ -144,8 +144,8 @@
 compile time.</p></dd><dt><span class="term">-l|--log-basename=logdirectory</span></dt><dd><p>Base directory name for log/debug files. The extension
 <code class="constant">".progname"</code> will be appended (e.g. log.smbclient, 
 log.smbd, etc...). The log file is never removed by the client.
-</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2553773"></a><h2>NOTES</h2><p>This command may be used only by root.</p></div><div class="refsect1" lang="en"><a name="id2553784"></a><h2>VERSION</h2><p>This man page is correct for version 3 of 
-	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2553795"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="smbpasswd.5.html"><span class="citerefentry"><span class="refentrytitle">smbpasswd</span>(5)</span></a>, <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a></p></div><div class="refsect1" lang="en"><a name="id2553818"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id325150"></a><h2>NOTES</h2><p>This command may be used only by root.</p></div><div class="refsect1" lang="en"><a name="id325160"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of 
+	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id325170"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="smbpasswd.5.html"><span class="citerefentry"><span class="refentrytitle">smbpasswd</span>(5)</span></a>, <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a></p></div><div class="refsect1" lang="en"><a name="id325192"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p>The pdbedit manpage was written by Simo Sorce and Jelmer Vernooij.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/profiles.1.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/profiles.1.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/profiles.1.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,12 +1,12 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>profiles</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="profiles.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>profiles &#8212; A utility to report and change SIDs in registry files
-	</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">profiles</code> [-v] [-c SID] [-n SID] {file}</p></div></div><div class="refsect1" lang="en"><a name="id2544154"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">profiles</code> is a utility that 
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>profiles</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="profiles.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>profiles &#8212; A utility to report and change SIDs in registry files
+	</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">profiles</code> [-v] [-c SID] [-n SID] {file}</p></div></div><div class="refsect1" lang="en"><a name="id283760"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">profiles</code> is a utility that 
 	reports and changes SIDs in windows registry files. It currently only 
 	supports NT.
-	</p></div><div class="refsect1" lang="en"><a name="id2507199"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">file</span></dt><dd><p>Registry file to view or edit.  </p></dd><dt><span class="term">-v,--verbose</span></dt><dd><p>Increases verbosity of messages. 
+	</p></div><div class="refsect1" lang="en"><a name="id282744"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">file</span></dt><dd><p>Registry file to view or edit.  </p></dd><dt><span class="term">-v,--verbose</span></dt><dd><p>Increases verbosity of messages. 
 		</p></dd><dt><span class="term">-c SID1 -n SID2</span></dt><dd><p>Change all occurences of SID1 in <code class="filename">file</code> by SID2.
 		</p></dd><dt><span class="term">-h|--help</span></dt><dd><p>Print a summary of command line options.
-</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507259"></a><h2>VERSION</h2><p>This man page is correct for version 3 of the Samba 
-	suite.</p></div><div class="refsect1" lang="en"><a name="id2507270"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id283361"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of the Samba 
+	suite.</p></div><div class="refsect1" lang="en"><a name="id283371"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p>The profiles man page was written by Jelmer Vernooij. </p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/rpcclient.1.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/rpcclient.1.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/rpcclient.1.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,9 +1,9 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>rpcclient</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="rpcclient.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>rpcclient &#8212; tool for executing client side 
-	MS-RPC functions</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">rpcclient</code> [-A authfile] [-c &lt;command string&gt;] [-d debuglevel] [-h] [-l logdir] [-N] [-s &lt;smb config file&gt;] [-U username[%password]] [-W workgroup] [-N] [-I destinationIP] {server}</p></div></div><div class="refsect1" lang="en"><a name="id2507233"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">rpcclient</code> is a utility initially developed
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>rpcclient</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="rpcclient.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>rpcclient &#8212; tool for executing client side 
+	MS-RPC functions</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">rpcclient</code> [-A authfile] [-c &lt;command string&gt;] [-d debuglevel] [-h] [-l logdir] [-N] [-s &lt;smb config file&gt;] [-U username[%password]] [-W workgroup] [-N] [-I destinationIP] {server}</p></div></div><div class="refsect1" lang="en"><a name="id282779"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">rpcclient</code> is a utility initially developed
 	to test MS-RPC functionality in Samba itself.  It has undergone 
 	several stages of development and stability.  Many system administrators
 	have now written scripts around it to manage Windows NT clients from 
-	their UNIX workstation. </p></div><div class="refsect1" lang="en"><a name="id2507264"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">server</span></dt><dd><p>NetBIOS name of Server to which to connect. 
+	their UNIX workstation. </p></div><div class="refsect1" lang="en"><a name="id283364"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">server</span></dt><dd><p>NetBIOS name of Server to which to connect. 
 		The server can be  any SMB/CIFS server.  The name is 
 		resolved using the <a class="link" href="smb.conf.5.html#NAMERESOLVEORDER">name resolve order</a> line from <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a>.</p></dd><dt><span class="term">-c|--command='command string'</span></dt><dd><p>execute semicolon separated commands (listed 
 		below)) </p></dd><dt><span class="term">-I IP-address</span></dt><dd><p><em class="replaceable"><code>IP address</code></em> is the address of the server to connect to. 
@@ -89,11 +89,11 @@
 socket. See the socket options parameter in
 the <code class="filename">smb.conf</code> manual page for the list of valid
 options. </p></dd><dt><span class="term">-h|--help</span></dt><dd><p>Print a summary of command line options.
-</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2506528"></a><h2>COMMANDS</h2><div class="refsect2" lang="en"><a name="id2506534"></a><h3>LSARPC</h3><div class="variablelist"><dl><dt><span class="term">lsaquery</span></dt><dd><p>Query info policy</p></dd><dt><span class="term">lookupsids</span></dt><dd><p>Resolve a list 
+</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id324654"></a><h2>COMMANDS</h2><div class="refsect2" lang="en"><a name="id324659"></a><h3>LSARPC</h3><div class="variablelist"><dl><dt><span class="term">lsaquery</span></dt><dd><p>Query info policy</p></dd><dt><span class="term">lookupsids</span></dt><dd><p>Resolve a list 
 		of SIDs to usernames.
 		</p></dd><dt><span class="term">lookupnames</span></dt><dd><p>Resolve a list 
 		of usernames to SIDs.
-		</p></dd><dt><span class="term">enumtrusts</span></dt><dd><p>Enumerate trusted domains</p></dd><dt><span class="term">enumprivs</span></dt><dd><p>Enumerate privileges</p></dd><dt><span class="term">getdispname</span></dt><dd><p>Get the privilege name</p></dd><dt><span class="term">lsaenumsid</span></dt><dd><p>Enumerate the LSA SIDS</p></dd><dt><span class="term">lsaenumprivsaccount</span></dt><dd><p>Enumerate the privileges of an SID</p></dd><dt><span class="term">lsaenumacctrights</span></dt><dd><p>Enumerate the rights of an SID</p></dd><dt><span class="term">lsaenumacctwithright</span></dt><dd><p>Enumerate accounts with a right</p></dd><dt><span class="term">lsaaddacctrights</span></dt><dd><p>Add rights to an account</p></dd><dt><span class="term">lsaremoveacctrights</span></dt><dd><p>Remove rights from an account</p></dd><dt><span class="term">lsalookupprivvalue</span></dt><dd><p>Get a privilege value given its name</p></dd><dt><span class="term">lsaquerysecobj</span></dt><dd><p>Query LSA security object</p></dd></dl></div></div><div class="refsect2" lang="en"><a name="id2506662"></a><h3>LSARPC-DS</h3><div class="variablelist"><dl><dt><span class="term">dsroledominfo</span></dt><dd><p>Get Primary Domain Information</p></dd></dl></div><p> </p><p><span class="emphasis"><em>DFS</em></span></p><div class="variablelist"><dl><dt><span class="term">dfsexist</span></dt><dd><p>Query DFS support</p></dd><dt><span class="term">dfsadd</span></dt><dd><p>Add a DFS share</p></dd><dt><span class="term">dfsremove</span></dt><dd><p>Remove a DFS share</p></dd><dt><span class="term">dfsgetinfo</span></dt><dd><p>Query DFS share info</p></dd><dt><span class="term">dfsenum</span></dt><dd><p>Enumerate dfs shares</p></dd></dl></div></div><div class="refsect2" lang="en"><a name="id2506733"></a><h3>REG</h3><div class="variablelist"><dl><dt><span class="term">shutdown</span></dt><dd><p>Remote Shutdown</p></dd><dt><span class="term">abortshutdown</span></dt><dd><p>Abort Shutdown</p></dd></dl></div></div><div class="refsect2" lang="en"><a name="id2506759"></a><h3>SRVSVC</h3><div class="variablelist"><dl><dt><span class="term">srvinfo</span></dt><dd><p>Server query info</p></dd><dt><span class="term">netshareenum</span></dt><dd><p>Enumerate shares</p></dd><dt><span class="term">netfileenum</span></dt><dd><p>Enumerate open files</p></dd><dt><span class="term">netremotetod</span></dt><dd><p>Fetch remote time of day</p></dd></dl></div></div><div class="refsect2" lang="en"><a name="id2506802"></a><h3>SAMR</h3><div class="variablelist"><dl><dt><span class="term">queryuser</span></dt><dd><p>Query user info</p></dd><dt><span class="term">querygroup</span></dt><dd><p>Query group info</p></dd><dt><span class="term">queryusergroups</span></dt><dd><p>Query user groups</p></dd><dt><span class="term">querygroupmem</span></dt><dd><p>Query group membership</p></dd><dt><span class="term">queryaliasmem</span></dt><dd><p>Query alias membership</p></dd><dt><span class="term">querydispinfo</span></dt><dd><p>Query display info</p></dd><dt><span class="term">querydominfo</span></dt><dd><p>Query domain info</p></dd><dt><span class="term">enumdomusers</span></dt><dd><p>Enumerate domain users</p></dd><dt><span class="term">enumdomgroups</span></dt><dd><p>Enumerate domain groups</p></dd><dt><span class="term">enumalsgroups</span></dt><dd><p>Enumerate alias groups</p></dd><dt><span class="term">createdomuser</span></dt><dd><p>Create domain user</p></dd><dt><span class="term">samlookupnames</span></dt><dd><p>Look up names</p></dd><dt><span class="term">samlookuprids</span></dt><dd><p>Look up names</p></dd><dt><span class="term">deletedomuser</span></dt><dd><p>Delete domain user</p></dd><dt><span class="term">samquerysecobj</span></dt><dd><p>Query SAMR security object</p></dd><dt><span class="term">getdompwinfo</span></dt><dd><p>Retrieve domain password info</p></dd><dt><span class="term">lookupdomain</span></dt><dd><p>Look up domain</p></dd></dl></div></div><div class="refsect2" lang="en"><a name="id2553653"></a><h3>SPOOLSS</h3><div class="variablelist"><dl><dt><span class="term">adddriver &lt;arch&gt; &lt;config&gt; [&lt;version&gt;]</span></dt><dd><p>
+		</p></dd><dt><span class="term">enumtrusts</span></dt><dd><p>Enumerate trusted domains</p></dd><dt><span class="term">enumprivs</span></dt><dd><p>Enumerate privileges</p></dd><dt><span class="term">getdispname</span></dt><dd><p>Get the privilege name</p></dd><dt><span class="term">lsaenumsid</span></dt><dd><p>Enumerate the LSA SIDS</p></dd><dt><span class="term">lsaenumprivsaccount</span></dt><dd><p>Enumerate the privileges of an SID</p></dd><dt><span class="term">lsaenumacctrights</span></dt><dd><p>Enumerate the rights of an SID</p></dd><dt><span class="term">lsaenumacctwithright</span></dt><dd><p>Enumerate accounts with a right</p></dd><dt><span class="term">lsaaddacctrights</span></dt><dd><p>Add rights to an account</p></dd><dt><span class="term">lsaremoveacctrights</span></dt><dd><p>Remove rights from an account</p></dd><dt><span class="term">lsalookupprivvalue</span></dt><dd><p>Get a privilege value given its name</p></dd><dt><span class="term">lsaquerysecobj</span></dt><dd><p>Query LSA security object</p></dd></dl></div></div><div class="refsect2" lang="en"><a name="id324773"></a><h3>LSARPC-DS</h3><div class="variablelist"><dl><dt><span class="term">dsroledominfo</span></dt><dd><p>Get Primary Domain Information</p></dd></dl></div><p> </p><p><span class="emphasis"><em>DFS</em></span></p><div class="variablelist"><dl><dt><span class="term">dfsexist</span></dt><dd><p>Query DFS support</p></dd><dt><span class="term">dfsadd</span></dt><dd><p>Add a DFS share</p></dd><dt><span class="term">dfsremove</span></dt><dd><p>Remove a DFS share</p></dd><dt><span class="term">dfsgetinfo</span></dt><dd><p>Query DFS share info</p></dd><dt><span class="term">dfsenum</span></dt><dd><p>Enumerate dfs shares</p></dd></dl></div></div><div class="refsect2" lang="en"><a name="id324838"></a><h3>REG</h3><div class="variablelist"><dl><dt><span class="term">shutdown</span></dt><dd><p>Remote Shutdown</p></dd><dt><span class="term">abortshutdown</span></dt><dd><p>Abort Shutdown</p></dd></dl></div></div><div class="refsect2" lang="en"><a name="id324863"></a><h3>SRVSVC</h3><div class="variablelist"><dl><dt><span class="term">srvinfo</span></dt><dd><p>Server query info</p></dd><dt><span class="term">netshareenum</span></dt><dd><p>Enumerate shares</p></dd><dt><span class="term">netfileenum</span></dt><dd><p>Enumerate open files</p></dd><dt><span class="term">netremotetod</span></dt><dd><p>Fetch remote time of day</p></dd></dl></div></div><div class="refsect2" lang="en"><a name="id324902"></a><h3>SAMR</h3><div class="variablelist"><dl><dt><span class="term">queryuser</span></dt><dd><p>Query user info</p></dd><dt><span class="term">querygroup</span></dt><dd><p>Query group info</p></dd><dt><span class="term">queryusergroups</span></dt><dd><p>Query user groups</p></dd><dt><span class="term">querygroupmem</span></dt><dd><p>Query group membership</p></dd><dt><span class="term">queryaliasmem</span></dt><dd><p>Query alias membership</p></dd><dt><span class="term">querydispinfo</span></dt><dd><p>Query display info</p></dd><dt><span class="term">querydominfo</span></dt><dd><p>Query domain info</p></dd><dt><span class="term">enumdomusers</span></dt><dd><p>Enumerate domain users</p></dd><dt><span class="term">enumdomgroups</span></dt><dd><p>Enumerate domain groups</p></dd><dt><span class="term">enumalsgroups</span></dt><dd><p>Enumerate alias groups</p></dd><dt><span class="term">createdomuser</span></dt><dd><p>Create domain user</p></dd><dt><span class="term">samlookupnames</span></dt><dd><p>Look up names</p></dd><dt><span class="term">samlookuprids</span></dt><dd><p>Look up names</p></dd><dt><span class="term">deletedomuser</span></dt><dd><p>Delete domain user</p></dd><dt><span class="term">samquerysecobj</span></dt><dd><p>Query SAMR security object</p></dd><dt><span class="term">getdompwinfo</span></dt><dd><p>Retrieve domain password info</p></dd><dt><span class="term">lookupdomain</span></dt><dd><p>Look up domain</p></dd></dl></div></div><div class="refsect2" lang="en"><a name="id325039"></a><h3>SPOOLSS</h3><div class="variablelist"><dl><dt><span class="term">adddriver &lt;arch&gt; &lt;config&gt; [&lt;version&gt;]</span></dt><dd><p>
 		Execute an AddPrinterDriver() RPC to install the printer driver 
 		information on the server.  Note that the driver files should 
 		already exist in the directory returned by  
@@ -178,11 +178,11 @@
 		already be correctly installed on the print server.  </p><p>See also the <code class="literal">enumprinters</code> and 
 		<code class="literal">enumdrivers</code> commands for obtaining a list of
 		of installed printers and drivers.</p></dd><dt><span class="term">addform</span></dt><dd><p>Add form</p></dd><dt><span class="term">setform</span></dt><dd><p>Set form</p></dd><dt><span class="term">getform</span></dt><dd><p>Get form</p></dd><dt><span class="term">deleteform</span></dt><dd><p>Delete form</p></dd><dt><span class="term">enumforms</span></dt><dd><p>Enumerate form</p></dd><dt><span class="term">setprinter</span></dt><dd><p>Set printer comment</p></dd><dt><span class="term">setprinterdata</span></dt><dd><p>Set REG_SZ printer data</p></dd><dt><span class="term">setprintername &lt;printername&gt;
-		&lt;newprintername&gt;</span></dt><dd><p>Set printer name</p></dd><dt><span class="term">rffpcnex</span></dt><dd><p>Rffpcnex test</p></dd></dl></div></div><div class="refsect2" lang="en"><a name="id2554070"></a><h3>NETLOGON</h3><div class="variablelist"><dl><dt><span class="term">logonctrl2</span></dt><dd><p>Logon Control 2</p></dd><dt><span class="term">logonctrl</span></dt><dd><p>Logon Control</p></dd><dt><span class="term">samsync</span></dt><dd><p>Sam Synchronisation</p></dd><dt><span class="term">samdeltas</span></dt><dd><p>Query Sam Deltas</p></dd><dt><span class="term">samlogon</span></dt><dd><p>Sam Logon</p></dd></dl></div></div><div class="refsect2" lang="en"><a name="id2554132"></a><h3>GENERAL COMMANDS</h3><div class="variablelist"><dl><dt><span class="term">debuglevel</span></dt><dd><p>Set the current
+		&lt;newprintername&gt;</span></dt><dd><p>Set printer name</p></dd><dt><span class="term">rffpcnex</span></dt><dd><p>Rffpcnex test</p></dd></dl></div></div><div class="refsect2" lang="en"><a name="id325391"></a><h3>NETLOGON</h3><div class="variablelist"><dl><dt><span class="term">logonctrl2</span></dt><dd><p>Logon Control 2</p></dd><dt><span class="term">logonctrl</span></dt><dd><p>Logon Control</p></dd><dt><span class="term">samsync</span></dt><dd><p>Sam Synchronisation</p></dd><dt><span class="term">samdeltas</span></dt><dd><p>Query Sam Deltas</p></dd><dt><span class="term">samlogon</span></dt><dd><p>Sam Logon</p></dd></dl></div></div><div class="refsect2" lang="en"><a name="id325449"></a><h3>GENERAL COMMANDS</h3><div class="variablelist"><dl><dt><span class="term">debuglevel</span></dt><dd><p>Set the current
 		debug level used to log information.</p></dd><dt><span class="term">help (?)</span></dt><dd><p>Print a listing of all 
 		known commands or extended help  on a particular command. 
 		</p></dd><dt><span class="term">quit (exit)</span></dt><dd><p>Exit <code class="literal">rpcclient
-		</code>.</p></dd></dl></div></div></div><div class="refsect1" lang="en"><a name="id2554175"></a><h2>BUGS</h2><p><code class="literal">rpcclient</code> is designed as a developer testing tool 
+		</code>.</p></dd></dl></div></div></div><div class="refsect1" lang="en"><a name="id325488"></a><h2>BUGS</h2><p><code class="literal">rpcclient</code> is designed as a developer testing tool 
 	and may not be robust in certain areas (such as command line parsing).  
 	It has been known to  generate a core dump upon failures when invalid 
 	parameters where passed to the interpreter. </p><p>From Luke Leighton's original rpcclient man page:</p><p><span class="emphasis"><em>WARNING!</em></span> The MSRPC over SMB code has 
@@ -195,8 +195,8 @@
 	versions of <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> and <a class="citerefentry" href="rpcclient.1.html"><span class="citerefentry"><span class="refentrytitle">rpcclient</span>(1)</span></a> that are incompatible for some commands or  services. Additionally, 
 	the developers are sending reports to Microsoft,  and problems found 
 	or reported to Microsoft are fixed in Service Packs,  which may 
-	result in incompatibilities.</p></div><div class="refsect1" lang="en"><a name="id2554234"></a><h2>VERSION</h2><p>This man page is correct for version 3 of the Samba 
-	suite.</p></div><div class="refsect1" lang="en"><a name="id2554245"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+	result in incompatibilities.</p></div><div class="refsect1" lang="en"><a name="id325537"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of the Samba 
+	suite.</p></div><div class="refsect1" lang="en"><a name="id325547"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p>The original rpcclient man page was written by Matthew 

Modified: branches/samba/upstream/docs/htmldocs/manpages/samba.7.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/samba.7.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/samba.7.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>samba</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="samba.7"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>samba &#8212; A Windows SMB/CIFS fileserver for UNIX</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">samba</code></p></div></div><div class="refsect1" lang="en"><a name="id2544119"></a><h2>DESCRIPTION</h2><p>The Samba software suite is a collection of programs 
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>samba</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="samba.7"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>samba &#8212; A Windows SMB/CIFS fileserver for UNIX</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">samba</code></p></div></div><div class="refsect1" lang="en"><a name="id283742"></a><h2>DESCRIPTION</h2><p>The Samba software suite is a collection of programs 
 	that implements the Server Message Block (commonly abbreviated 
 	as SMB) protocol for UNIX systems. This protocol is sometimes 
 	also referred to as the Common Internet File System (CIFS). For a
@@ -63,7 +63,7 @@
 <a class="citerefentry" href="smbmnt.8.html"><span class="citerefentry"><span class="refentrytitle">smbmnt</span>(8)</span></a></span></dt><dd><p><code class="literal">smbmount</code>,<code class="literal">smbumount</code> and <code class="literal">smbmnt</code> are commands that can be used to 
 		mount CIFS/SMB shares on Linux.
 		</p></dd><dt><span class="term"><a class="citerefentry" href="smbcquotas.1.html"><span class="citerefentry"><span class="refentrytitle">smbcquotas</span>(1)</span></a></span></dt><dd><p><code class="literal">smbcquotas</code> is a tool that 
-		can set remote QUOTA's on server with NTFS 5. </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2506583"></a><h2>COMPONENTS</h2><p>The Samba suite is made up of several components. Each 
+		can set remote QUOTA's on server with NTFS 5. </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id324751"></a><h2>COMPONENTS</h2><p>The Samba suite is made up of several components. Each 
 	component is described in a separate manual page. It is strongly 
 	recommended that you read the documentation that comes with Samba 
 	and the manual pages of those components that you use. If the 
@@ -72,7 +72,7 @@
 	for information on how to file a bug report or submit a patch.</p><p>If you require help, visit the Samba webpage at
 	<a class="ulink" href="http://samba.org/" target="_top">http://www.samba.org/</a> and
 	explore the many option available to you.
-	</p></div><div class="refsect1" lang="en"><a name="id2506617"></a><h2>AVAILABILITY</h2><p>The Samba software suite is licensed under the 
+	</p></div><div class="refsect1" lang="en"><a name="id324778"></a><h2>AVAILABILITY</h2><p>The Samba software suite is licensed under the 
 	GNU Public License(GPL). A copy of that license should 
 	have come with the package in the file COPYING. You are 
 	encouraged to distribute copies of the Samba suite, but 
@@ -86,14 +86,14 @@
 	the README file that comes with Samba.</p><p>If you have access to a WWW viewer (such as Mozilla
 	or Konqueror) then you will also find lots of useful information, 
 	including back issues of the Samba mailing list, at
-	<a class="ulink" href="http://lists.samba.org/" target="_top">http://lists.samba.org</a>.</p></div><div class="refsect1" lang="en"><a name="id2506664"></a><h2>VERSION</h2><p>This man page is correct for version 3 of the 
-	Samba suite. </p></div><div class="refsect1" lang="en"><a name="id2506675"></a><h2>CONTRIBUTIONS</h2><p>If you wish to contribute to the Samba project, 
+	<a class="ulink" href="http://lists.samba.org/" target="_top">http://lists.samba.org</a>.</p></div><div class="refsect1" lang="en"><a name="id324815"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of the 
+	Samba suite. </p></div><div class="refsect1" lang="en"><a name="id324825"></a><h2>CONTRIBUTIONS</h2><p>If you wish to contribute to the Samba project, 
 	then I suggest you join the Samba mailing list at 
 	<a class="ulink" href="http://lists.samba.org/" target="_top">http://lists.samba.org</a>.
 	</p><p>If you have patches to submit, visit
 	<a class="ulink" href="http://devel.samba.org/" target="_top">http://devel.samba.org/</a>
 	for information on how to do it properly. We prefer patches 
-	in <code class="literal">diff -u</code> format.</p></div><div class="refsect1" lang="en"><a name="id2506710"></a><h2>CONTRIBUTORS</h2><p>Contributors to the project are now too numerous 
+	in <code class="literal">diff -u</code> format.</p></div><div class="refsect1" lang="en"><a name="id324855"></a><h2>CONTRIBUTORS</h2><p>Contributors to the project are now too numerous 
 	to mention here but all deserve the thanks of all Samba 
 	users. To see a full list, look at the
 	<code class="filename">change-log</code> in the source package 
@@ -101,7 +101,7 @@
 	http://cvs.samba.org/</a>
 	for the contributors to Samba post-CVS. CVS is the Open Source 
 	source code control system used by the Samba Team to develop 
-	Samba. The project would have been unmanageable without it.</p></div><div class="refsect1" lang="en"><a name="id2506739"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+	Samba. The project would have been unmanageable without it.</p></div><div class="refsect1" lang="en"><a name="id324879"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p>The original Samba man pages were written by Karl Auer. 

Modified: branches/samba/upstream/docs/htmldocs/manpages/smb.conf.5.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/smb.conf.5.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/smb.conf.5.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smb.conf</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smb.conf.5"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smb.conf &#8212; The configuration file for the Samba suite</p></div><div class="refsect1" lang="en"><a name="id2544110"></a><h2>SYNOPSIS</h2><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smb.conf</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smb.conf.5"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smb.conf &#8212; The configuration file for the Samba suite</p></div><div class="refsect1" lang="en"><a name="id315538"></a><h2>SYNOPSIS</h2><p>
 	The <code class="filename">smb.conf</code> file is a configuration  file for the Samba suite. <code class="filename">smb.conf</code> contains  runtime configuration information for the Samba programs. The
 	 <code class="filename">smb.conf</code> file is designed to be configured and administered by the
 	 <a class="citerefentry" href="swat.8.html"><span class="citerefentry"><span class="refentrytitle">swat</span>(8)</span></a> program. The
@@ -26,7 +26,7 @@
 	The values following the equals sign in parameters are all either a string (no quotes needed) or a boolean,
 	which may be given as yes/no, 0/1 or true/false. Case is not significant in boolean values, but is preserved
 	in string values. Some items such as create masks are numeric.
-	</p></div><div class="refsect1" lang="en"><a name="id2507247"></a><h2>SECTION DESCRIPTIONS</h2><p>
+	</p></div><div class="refsect1" lang="en"><a name="id282776"></a><h2>SECTION DESCRIPTIONS</h2><p>
 	Each section in the configuration file (except for the [global] section) describes a shared resource (known as
 	a &#8220;<span class="quote">share</span>&#8221;). The section name is the name of the shared resource and the parameters within the
 	section define the shares attributes.
@@ -69,7 +69,7 @@
 	<a class="link" href="smb.conf.5.html#PRINTABLE">printable = yes</a>
 	<a class="link" href="smb.conf.5.html#GUESTOK">guest ok = yes</a>
 </pre><p>
-	</p></div><div class="refsect1" lang="en"><a name="id2506270"></a><h2>SPECIAL SECTIONS</h2><div class="refsect2" lang="en"><a name="id2506276"></a><h3>The [global] section</h3><p>
+	</p></div><div class="refsect1" lang="en"><a name="id283054"></a><h2>SPECIAL SECTIONS</h2><div class="refsect2" lang="en"><a name="id283060"></a><h3>The [global] section</h3><p>
 		Parameters in this section apply to the server as a whole, or are defaults for sections that do not
 		specifically define certain items. See the notes under PARAMETERS for more information.
 		</p></div><div class="refsect2" lang="en"><a name="HOMESECT"></a><h3>The [homes] section</h3><p>
@@ -160,7 +160,7 @@
 		On SYSV systems which use lpstat to determine what printers are defined on the system you may be able to use
 		<code class="literal">printcap name = lpstat</code> to automatically obtain a list of printers. See the
 		<code class="literal">printcap name</code> option for more details.
-		</p></div></div></div><div class="refsect1" lang="en"><a name="id2506600"></a><h2>USERSHARES</h2><p>Starting with Samba version 3.0.23 the capability for non-root users to add, modify, and delete
+		</p></div></div></div><div class="refsect1" lang="en"><a name="id324680"></a><h2>USERSHARES</h2><p>Starting with Samba version 3.0.23 the capability for non-root users to add, modify, and delete
 	their own share definitions has been added. This capability is called <span class="emphasis"><em>usershares</em></span> and
 	is controlled by a set of parameters in the [global] section of the smb.conf.
 	The relevant parameters are :
@@ -184,7 +184,7 @@
 
 	to the global
 	section of your <code class="filename">smb.conf</code>. Members of the group foo may then manipulate the user defined shares
-	using the following commands.</p><div class="variablelist"><dl><dt><span class="term">net usershare add sharename path [comment] [acl] [guest_ok=[y|n]]</span></dt><dd><p>To create or modify (overwrite) a user defined share.</p></dd><dt><span class="term">net usershare delete sharename</span></dt><dd><p>To delete a user defined share.</p></dd><dt><span class="term">net usershare list wildcard-sharename</span></dt><dd><p>To list user defined shares.</p></dd><dt><span class="term">net usershare info wildcard-sharename</span></dt><dd><p>To print information about user defined shares.</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2553532"></a><h2>PARAMETERS</h2><p>Parameters define the specific attributes of sections.</p><p>
+	using the following commands.</p><div class="variablelist"><dl><dt><span class="term">net usershare add sharename path [comment] [acl] [guest_ok=[y|n]]</span></dt><dd><p>To create or modify (overwrite) a user defined share.</p></dd><dt><span class="term">net usershare delete sharename</span></dt><dd><p>To delete a user defined share.</p></dd><dt><span class="term">net usershare list wildcard-sharename</span></dt><dd><p>To list user defined shares.</p></dd><dt><span class="term">net usershare info wildcard-sharename</span></dt><dd><p>To print information about user defined shares.</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id324875"></a><h2>PARAMETERS</h2><p>Parameters define the specific attributes of sections.</p><p>
 	Some parameters are specific to the [global] section (e.g., <span class="emphasis"><em>security</em></span>).  Some parameters
 	are usable in all sections (e.g., <span class="emphasis"><em>create mask</em></span>). All others are permissible only in normal
 	sections. For the purposes of the following descriptions the [homes] and [printers] sections will be
@@ -196,7 +196,7 @@
 	Parameters are arranged here in alphabetical order - this may not create best bedfellows, but at least you can
 	find them! Where there are synonyms, the preferred synonym is described, others refer to the preferred
 	synonym.
-	</p></div><div class="refsect1" lang="en"><a name="id2553581"></a><h2>VARIABLE SUBSTITUTIONS</h2><p>
+	</p></div><div class="refsect1" lang="en"><a name="id324914"></a><h2>VARIABLE SUBSTITUTIONS</h2><p>
 	Many of the strings that are settable in the config file can take substitutions. For example the option
 	&#8220;<span class="quote">path = /tmp/%u</span>&#8221; is interpreted as &#8220;<span class="quote">path = /tmp/john</span>&#8221; if the user connected with the
 	username john.
@@ -305,74 +305,19 @@
 		</p></li><li><p>
 		If the service is a guest service, a connection is made as the username given in the <code class="literal">guest account
 		=</code> for the service, irrespective of the supplied password.
-		</p></li></ol></div></div><div class="refsect1" lang="en"><a name="id2554323"></a><h2>REGISTRY-BASED CONFIGURATION</h2><p>
-		Starting with Samba version 3.2.0, the capability to
-		store Samba configuration in the registry is available.
-		The configuration is stored in the registry key
-		 <span class="emphasis"><em><code class="literal">HKLM\Software\Samba\smbconf</code></em></span>.
-		There are two levels of registry configuration:
-	</p><div class="orderedlist"><ol type="1"><li><p>Share definitions stored in registry are used.
-		This is triggered by setting the global 
-		parameter <em class="parameter"><code>registry shares</code></em>
-		to &#8220;<span class="quote">yes</span>&#8221; in <span class="emphasis"><em>smb.conf</em></span>.
-		</p><p>The registry shares are loaded not at startup but
-		on demand at runtime by <span class="emphasis"><em>smbd</em></span>.
-		Shares defined in <span class="emphasis"><em>smb.conf</em></span> take
-		priority over shares of the same name defined in
-		registry.</p></li><li><p>Global <span class="emphasis"><em>smb.conf</em></span>
-		options stored in registry are used. This can be activated
-		in two different ways:</p><p>Firstly, a registry only configuration is triggered
-		by setting
-		<a class="link" href="smb.conf.5.html#CONFIGBACKEND">config backend = registry</a>
-		in the [global] section of <span class="emphasis"><em>smb.conf</em></span>.
-		This resets everything that has been read from config files
-		to this point and reads the content of the global configuration
-		section from the registry.
-		This is the recommended method of using registry based
-		configuration.</p><p>Secondly, a mixed configuration can be activated
-		by a special new meaning of the parameter
-		<a class="link" href="smb.conf.5.html#INCLUDE">include = registry</a>
-		in the [global] section of <span class="emphasis"><em>smb.conf</em></span>.
-		This reads the global options from registry with the same
-		priorities as for an include of a text file.
-		This may be especially useful in cases where an initial
-		configuration is needed to access the registry.</p><p>Activation of global registry options automatically
-		activates registry shares. So in the registry only case,
-		shares are loaded on demand only.</p></li></ol></div><p>
-		Note: To make registry-based configurations foolproof
-		at least to a certain extent, the use
-		of <em class="parameter"><code>lock directory</code></em> and
-		 <em class="parameter"><code>config backend</code></em>
-		inside the registry configuration has been disabled:
-		Especially by changing the
-		 <em class="parameter"><code>lock directory</code></em> inside the registry
-		configuration, one would create a broken setup where the daemons
-		do not see the configuration they loaded once it is active.
-	</p><p>
-		The registry configuration can be accessed with
-		tools like <span class="emphasis"><em>regedit</em></span> or <span class="emphasis"><em>net (rpc)
-		registry</em></span> in the key
-		 <span class="emphasis"><em><code class="literal">HKLM\Software\Samba\smbconf</code></em></span>.
+		</p></li></ol></div></div><div class="refsect1" lang="en"><a name="id325539"></a><h2>EXPLANATION OF EACH PARAMETER</h2><div class="section" lang="en"><div class="titlepage"></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id325549"></a>
 
-		More conveniently, the <span class="emphasis"><em>conf</em></span> subcommand of the
-		 <a class="citerefentry" href="net.8.html"><span class="citerefentry"><span class="refentrytitle">net</span>(8)</span></a> utility
-		offers a dedicated interface to read and write the
-		registry based configuration locally, i.e. directly
-		accessing the database file, circumventing the
-		server.
-	</p></div><div class="refsect1" lang="en"><a name="id2554516"></a><h2>EXPLANATION OF EACH PARAMETER</h2><div class="section" lang="en"><div class="titlepage"></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2554529"></a>
-
 abort shutdown script (G)
-</h3></div></div></div><a class="indexterm" name="id2554530"></a><a name="ABORTSHUTDOWNSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>This a full path name to a script called by <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> that
+</h3></div></div></div><a class="indexterm" name="id325550"></a><a name="ABORTSHUTDOWNSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>This a full path name to a script called by <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> that
 	should stop a shutdown procedure issued by the <a class="link" href="smb.conf.5.html#SHUTDOWNSCRIPT">shutdown script</a>.</p><p>If the connected user posseses the <code class="constant">SeRemoteShutdownPrivilege</code>,
 	right, this command will be run as user.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>abort shutdown script</code></em> = <code class="literal">""</code>
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>abort shutdown script</code></em> = <code class="literal">/sbin/shutdown -c</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2554618"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id325623"></a>
 
 acl check permissions (S)
-</h3></div></div></div><a class="indexterm" name="id2554619"></a><a name="ACLCHECKPERMISSIONS"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean parameter controls what <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a>does on receiving a protocol request of "open for delete"
+</h3></div></div></div><a class="indexterm" name="id325624"></a><a name="ACLCHECKPERMISSIONS"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean parameter controls what <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a>does on receiving a protocol request of "open for delete"
     from a Windows client. If a Windows client doesn't have permissions to delete a file then they
     expect this to be denied at open time. POSIX systems normally only detect restrictions on delete by
     actually attempting to delete the file or directory. As Windows clients can (and do) "back out" a
@@ -392,10 +337,10 @@
     with slightly different semantics was introduced in 3.0.20. That older version is not documented here.
     </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>acl check permissions</code></em> = <code class="literal">True</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2506125"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id282494"></a>
 
 acl compatibility (S)
-</h3></div></div></div><a class="indexterm" name="id2506126"></a><a name="ACLCOMPATIBILITY"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies what OS ACL semantics should 
+</h3></div></div></div><a class="indexterm" name="id282495"></a><a name="ACLCOMPATIBILITY"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies what OS ACL semantics should 
 	be compatible with. Possible values are <span class="emphasis"><em>winnt</em></span> for Windows NT 4, 
 	<span class="emphasis"><em>win2k</em></span> for Windows 2000 and above and <span class="emphasis"><em>auto</em></span>.
 	If you specify <span class="emphasis"><em>auto</em></span>, the value for this parameter 
@@ -404,10 +349,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>acl compatibility</code></em> = <code class="literal">win2k</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2506203"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id325826"></a>
 
 acl group control (S)
-</h3></div></div></div><a class="indexterm" name="id2506204"></a><a name="ACLGROUPCONTROL"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id325828"></a><a name="ACLGROUPCONTROL"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	In a POSIX filesystem, only the owner of a file or directory and the superuser can modify the permissions
 	and ACLs on a file. If this parameter is set, then Samba overrides this restriction, and also allows the
  	 <span class="emphasis"><em>primary group owner</em></span> of a file or directory to modify the permissions and ACLs
@@ -432,10 +377,10 @@
 	implemented by the <em class="parameter"><code>dos filemode</code></em> option.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>acl group control</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2555018"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id325907"></a>
 
 acl map full control (S)
-</h3></div></div></div><a class="indexterm" name="id2555019"></a><a name="ACLMAPFULLCONTROL"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id325908"></a><a name="ACLMAPFULLCONTROL"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This boolean parameter controls whether <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a>maps a POSIX ACE entry of "rwx" (read/write/execute), the maximum
 	allowed POSIX permission set, into a Windows ACL of "FULL CONTROL". If this parameter is set to true any POSIX
 	ACE entry of "rwx" will be returned in a Windows ACL as "FULL CONTROL", is this parameter is set to false any
@@ -443,10 +388,10 @@
 	execute.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>acl map full control</code></em> = <code class="literal">True</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2555074"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id325954"></a>
 
 add group script (G)
-</h3></div></div></div><a class="indexterm" name="id2555075"></a><a name="ADDGROUPSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id325956"></a><a name="ADDGROUPSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This is the full pathname to a script that will be run <span class="emphasis"><em>AS ROOT</em></span> by <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> when a new group is requested. It
 	will expand any <em class="parameter"><code>%g</code></em> to the group name passed. This script is only useful
 	for installations using the Windows NT domain administration tools. The script is free to create a group with
@@ -456,10 +401,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>add group script</code></em> = <code class="literal">/usr/sbin/groupadd %g</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2555156"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id326025"></a>
 
 add machine script (G)
-</h3></div></div></div><a class="indexterm" name="id2555157"></a><a name="ADDMACHINESCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id326026"></a><a name="ADDMACHINESCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This is the full pathname to a script that will  be run by
 	 <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> when a machine is
 	added to Samba's domain and a Unix account matching the machine's name appended with a "$" does not
@@ -470,10 +415,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>add machine script</code></em> = <code class="literal">/usr/sbin/adduser -n -g machines -c Machine -d /var/lib/nobody -s /bin/false %u</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2555243"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id326098"></a>
 
 add port command (G)
-</h3></div></div></div><a class="indexterm" name="id2555244"></a><a name="ADDPORTCOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>Samba 3.0.23 introduced support for adding printer ports
+</h3></div></div></div><a class="indexterm" name="id326100"></a><a name="ADDPORTCOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>Samba 3.0.23 introduced support for adding printer ports
 	remotely using the Windows "Add Standard TCP/IP Port Wizard".
 	This option defines an external program to be executed when
 	smbd receives a request to add a new Port to the system.
@@ -482,10 +427,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>add port command</code></em> = <code class="literal">/etc/samba/scripts/addport.sh</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2555334"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id326178"></a>
 
 add printer command (G)
-</h3></div></div></div><a class="indexterm" name="id2555335"></a><a name="ADDPRINTERCOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>With the introduction of MS-RPC based printing
+</h3></div></div></div><a class="indexterm" name="id326179"></a><a name="ADDPRINTERCOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>With the introduction of MS-RPC based printing
     support for Windows NT/2000 clients in Samba 2.2, The MS Add
     Printer Wizard (APW) icon is now also available in the 
     "Printers..." folder displayed a share listing.  The APW
@@ -514,10 +459,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>add printer command</code></em> = <code class="literal">/usr/bin/addprinter</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2555533"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id326348"></a>
 
 add share command (G)
-</h3></div></div></div><a class="indexterm" name="id2555534"></a><a name="ADDSHARECOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id326349"></a><a name="ADDSHARECOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	Samba 2.2.0 introduced the ability to dynamically add and delete shares via the Windows NT 4.0 Server
 	Manager.  The <em class="parameter"><code>add share command</code></em> is used to define an external program
 	or script which will add a new service definition to <code class="filename">smb.conf</code>.  In order
@@ -544,10 +489,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>add share command</code></em> = <code class="literal">/usr/local/bin/addshare</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2555736"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id326523"></a>
 
 add user script (G)
-</h3></div></div></div><a class="indexterm" name="id2555738"></a><a name="ADDUSERSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id326524"></a><a name="ADDUSERSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This is the full pathname to a script that will be run <span class="emphasis"><em>AS ROOT</em></span> by 
 	<a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> 
 	under special circumstances described below.
@@ -582,10 +527,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>add user script</code></em> = <code class="literal">/usr/local/samba/bin/add_user %u</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2555981"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id326711"></a>
 
 add user to group script (G)
-</h3></div></div></div><a class="indexterm" name="id2555982"></a><a name="ADDUSERTOGROUPSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id326712"></a><a name="ADDUSERTOGROUPSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	Full path to the script that will be called when a user is added to a group using the Windows NT domain administration 
 	tools. It will be run by <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a>
 	<span class="emphasis"><em>AS ROOT</em></span>. Any <em class="parameter"><code>%g</code></em> will be replaced with the group name and 
@@ -597,20 +542,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>add user to group script</code></em> = <code class="literal">/usr/sbin/adduser %u %g</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2556075"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id326794"></a>
 
-administrative share (S)
-</h3></div></div></div><a class="indexterm" name="id2556076"></a><a name="ADMINISTRATIVESHARE"></a><div class="variablelist"><dl><dt></dt><dd><p>If this parameter is set to <code class="constant">yes</code> for
-      a share, then the share will be an administrative share. The Administrative
-      Shares are the default network shares created by all Windows NT-based
-      operating systems. These are shares like C$, D$ or ADMIN$. The type of these
-      shares is STYPE_DISKTREE_HIDDEN.</p><p>See the section below on <a class="link" href="smb.conf.5.html#SECURITY">security</a> for more 
-      information about this option.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>administrative share</code></em> = <code class="literal">no</code>
-</em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2556142"></a>
-
 admin users (S)
-</h3></div></div></div><a class="indexterm" name="id2556143"></a><a name="ADMINUSERS"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a list of users who will be granted 
+</h3></div></div></div><a class="indexterm" name="id326795"></a><a name="ADMINUSERS"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a list of users who will be granted 
     administrative privileges on the share. This means that they 
     will do all file operations as the super-user (root).</p><p>You should use this option very carefully, as any user in 
     this list will be able to do anything they like on the share, 
@@ -619,20 +554,20 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>admin users</code></em> = <code class="literal">jason</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2556222"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id326862"></a>
 
 afs share (S)
-</h3></div></div></div><a class="indexterm" name="id2556223"></a><a name="AFSSHARE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls whether special AFS features are enabled
+</h3></div></div></div><a class="indexterm" name="id326864"></a><a name="AFSSHARE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls whether special AFS features are enabled
 	for this share. If enabled, it assumes that the directory exported via
 	the <em class="parameter"><code>path</code></em> parameter is a local AFS import. The
 	special AFS features include the attempt to hand-craft an AFS token
 	if you enabled --with-fake-kaserver in configure.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>afs share</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2556273"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id326907"></a>
 
 afs username map (G)
-</h3></div></div></div><a class="indexterm" name="id2556274"></a><a name="AFSUSERNAMEMAP"></a><div class="variablelist"><dl><dt></dt><dd><p>If you are using the fake kaserver AFS feature, you might
+</h3></div></div></div><a class="indexterm" name="id326908"></a><a name="AFSUSERNAMEMAP"></a><div class="variablelist"><dl><dt></dt><dd><p>If you are using the fake kaserver AFS feature, you might
 	want to hand-craft the usernames you are creating tokens for.
 	For example this is necessary if you have users from several domain
 	in your AFS Protection Database. One possible scheme to code users
@@ -642,10 +577,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>afs username map</code></em> = <code class="literal">%u at afs.samba.org</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2556340"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id326966"></a>
 
 aio read size (S)
-</h3></div></div></div><a class="indexterm" name="id2556341"></a><a name="AIOREADSIZE"></a><div class="variablelist"><dl><dt></dt><dd><p>If Samba has been built with asynchronous I/O support and this
+</h3></div></div></div><a class="indexterm" name="id326967"></a><a name="AIOREADSIZE"></a><div class="variablelist"><dl><dt></dt><dd><p>If Samba has been built with asynchronous I/O support and this
     integer parameter is set to non-zero value,
     Samba will read from file asynchronously when size of request is bigger
     than this value. Note that it happens only for non-chained and non-chaining
@@ -656,10 +591,10 @@
 #  Use asynchronous I/O for reads bigger than 16KB
     request size</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2556440"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id327045"></a>
 
 aio write size (S)
-</h3></div></div></div><a class="indexterm" name="id2556441"></a><a name="AIOWRITESIZE"></a><div class="variablelist"><dl><dt></dt><dd><p>If Samba has been built with asynchronous I/O support and this
+</h3></div></div></div><a class="indexterm" name="id327046"></a><a name="AIOWRITESIZE"></a><div class="variablelist"><dl><dt></dt><dd><p>If Samba has been built with asynchronous I/O support and this
     integer parameter is set to non-zero value,
     Samba will write to file asynchronously when size of request is bigger
     than this value. Note that it happens only for non-chained and non-chaining
@@ -670,10 +605,10 @@
 #  Use asynchronous I/O for writes bigger than 16KB
     request size</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2556537"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id327124"></a>
 
 algorithmic rid base (G)
-</h3></div></div></div><a class="indexterm" name="id2556538"></a><a name="ALGORITHMICRIDBASE"></a><div class="variablelist"><dl><dt></dt><dd><p>This determines how Samba will use its
+</h3></div></div></div><a class="indexterm" name="id327125"></a><a name="ALGORITHMICRIDBASE"></a><div class="variablelist"><dl><dt></dt><dd><p>This determines how Samba will use its
     algorithmic mapping from uids/gid to the RIDs needed to construct
     NT Security Identifiers.
     </p><p>Setting this option to a larger value could be useful to sites
@@ -688,10 +623,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>algorithmic rid base</code></em> = <code class="literal">100000</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2556614"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id327189"></a>
 
 allocation roundup size (S)
-</h3></div></div></div><a class="indexterm" name="id2556615"></a><a name="ALLOCATIONROUNDUPSIZE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter allows an administrator to tune the 
+</h3></div></div></div><a class="indexterm" name="id327190"></a><a name="ALLOCATIONROUNDUPSIZE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter allows an administrator to tune the 
     allocation size reported to Windows clients.  The default 
     size of 1Mb generally results in improved Windows client
     performance.   However, rounding the allocation size may cause
@@ -703,10 +638,10 @@
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>allocation roundup size</code></em> = <code class="literal">0
 # (to disable roundups)</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2556685"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id327249"></a>
 
 allow trusted domains (G)
-</h3></div></div></div><a class="indexterm" name="id2556686"></a><a name="ALLOWTRUSTEDDOMAINS"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id327250"></a><a name="ALLOWTRUSTEDDOMAINS"></a><div class="variablelist"><dl><dt></dt><dd><p>
     This option only takes effect when the <a class="link" href="smb.conf.5.html#SECURITY">security</a> option is set to 
     <code class="constant">server</code>, <code class="constant">domain</code> or <code class="constant">ads</code>.  
     If it is set to no, then attempts to connect to a resource from 
@@ -721,10 +656,10 @@
     Samba server even if they do not have an account in DOMA.  This 
     can make implementing a security boundary difficult.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>allow trusted domains</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2556763"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id327313"></a>
 
 announce as (G)
-</h3></div></div></div><a class="indexterm" name="id2556764"></a><a name="ANNOUNCEAS"></a><div class="variablelist"><dl><dt></dt><dd><p>This specifies what type of server <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> will announce itself as, to a network neighborhood browse 
+</h3></div></div></div><a class="indexterm" name="id327314"></a><a name="ANNOUNCEAS"></a><div class="variablelist"><dl><dt></dt><dd><p>This specifies what type of server <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> will announce itself as, to a network neighborhood browse 
     list. By default this is set to Windows NT. The valid options 
     are : "NT Server" (which can also be written as "NT"), 
     "NT Workstation", "Win95" or "WfW" meaning Windows NT Server, 
@@ -736,20 +671,20 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>announce as</code></em> = <code class="literal">Win95</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2556838"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id327382"></a>
 
 announce version (G)
-</h3></div></div></div><a class="indexterm" name="id2556839"></a><a name="ANNOUNCEVERSION"></a><div class="variablelist"><dl><dt></dt><dd><p>This specifies the major and minor version numbers 
+</h3></div></div></div><a class="indexterm" name="id327383"></a><a name="ANNOUNCEVERSION"></a><div class="variablelist"><dl><dt></dt><dd><p>This specifies the major and minor version numbers 
     that nmbd will use when announcing itself as a server. The default 
     is 4.9.  Do not change this parameter unless you have a specific 
 	need to set a Samba server to be a downlevel server.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>announce version</code></em> = <code class="literal">4.9</code>
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>announce version</code></em> = <code class="literal">2.0</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2556900"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id327436"></a>
 
 auth methods (G)
-</h3></div></div></div><a class="indexterm" name="id2556901"></a><a name="AUTHMETHODS"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id327438"></a><a name="AUTHMETHODS"></a><div class="variablelist"><dl><dt></dt><dd><p>
     This option allows the administrator to chose what authentication methods <code class="literal">smbd</code> 
     will use when authenticating a user. This option defaults to sensible values based on <a class="link" href="smb.conf.5.html#SECURITY">security</a>.  
     This should be considered a developer option and used only in rare circumstances.  In the majority (if not all) 
@@ -770,18 +705,18 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>auth methods</code></em> = <code class="literal">guest sam winbind</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2557016"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id327532"></a>
 
 available (S)
-</h3></div></div></div><a class="indexterm" name="id2557017"></a><a name="AVAILABLE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter lets you "turn off" a service. If 
+</h3></div></div></div><a class="indexterm" name="id327533"></a><a name="AVAILABLE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter lets you "turn off" a service. If 
 	<em class="parameter"><code>available = no</code></em>, then <span class="emphasis"><em>ALL</em></span> 
 	attempts to connect to the service will fail. Such failures are 
 	logged.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>available</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2557068"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id327578"></a>
 
 bind interfaces only (G)
-</h3></div></div></div><a class="indexterm" name="id2557069"></a><a name="BINDINTERFACESONLY"></a><div class="variablelist"><dl><dt></dt><dd><p>This global parameter allows the Samba admin 
+</h3></div></div></div><a class="indexterm" name="id327579"></a><a name="BINDINTERFACESONLY"></a><div class="variablelist"><dl><dt></dt><dd><p>This global parameter allows the Samba admin 
         to limit what interfaces on a machine will serve SMB requests. It 
         affects file service <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> and name service <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> in a slightly different ways.</p><p>
 	For name service it causes <code class="literal">nmbd</code> to bind to ports 137 and 138 on the
@@ -822,10 +757,10 @@
 	from starting/stopping/restarting <code class="literal">smbd</code> and <code class="literal">nmbd</code>.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>bind interfaces only</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2557446"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id327875"></a>
 
 blocking locks (S)
-</h3></div></div></div><a class="indexterm" name="id2557447"></a><a name="BLOCKINGLOCKS"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls the behavior 
+</h3></div></div></div><a class="indexterm" name="id327876"></a><a name="BLOCKINGLOCKS"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls the behavior 
 	of <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> when given a request by a client 
 	to obtain a byte range lock on a region of an open file, and the 
 	request has a time limit associated with it.</p><p>If this parameter is set and the lock range requested 
@@ -836,10 +771,10 @@
 	will fail the lock request immediately if the lock range 
 	cannot be obtained.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>blocking locks</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2557514"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id327934"></a>
 
 block size (S)
-</h3></div></div></div><a class="indexterm" name="id2557515"></a><a name="BLOCKSIZE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls the behavior of <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> when reporting disk free 
+</h3></div></div></div><a class="indexterm" name="id327935"></a><a name="BLOCKSIZE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls the behavior of <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> when reporting disk free 
     sizes. By default, this reports a disk block size of 1024 bytes.
     </p><p>Changing this parameter may have some effect on the
     efficiency of client writes, this is not yet confirmed. This
@@ -853,42 +788,36 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>block size</code></em> = <code class="literal">4096</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2557597"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id328005"></a><a name="BROWSABLE"></a>browsable</h3></div></div></div><a class="indexterm" name="id328006"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#BROWSEABLE">browseable</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id328031"></a>
 
-<a name="BROWSABLE"></a>browsable
-</h3></div></div></div><a class="indexterm" name="id2557598"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#BROWSEABLE">browseable</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2557628"></a>
-
 browseable (S)
-</h3></div></div></div><a class="indexterm" name="id2557629"></a><a name="BROWSEABLE"></a><div class="variablelist"><dl><dt></dt><dd><p>This controls whether this share is seen in 
+</h3></div></div></div><a class="indexterm" name="id328032"></a><a name="BROWSEABLE"></a><div class="variablelist"><dl><dt></dt><dd><p>This controls whether this share is seen in 
 	the list of available shares in a net view and in the browse list.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>browseable</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2557670"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id328068"></a>
 
 browse list (G)
-</h3></div></div></div><a class="indexterm" name="id2557671"></a><a name="BROWSELIST"></a><div class="variablelist"><dl><dt></dt><dd><p>This controls whether <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> will serve a browse list to 
+</h3></div></div></div><a class="indexterm" name="id328070"></a><a name="BROWSELIST"></a><div class="variablelist"><dl><dt></dt><dd><p>This controls whether <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> will serve a browse list to 
 	a client doing a <code class="literal">NetServerEnum</code> call. Normally 
 	set to <code class="constant">yes</code>. You should never need to change 
 	this.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>browse list</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2557731"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id328121"></a><a name="CASESIGNAMES"></a>casesignames</h3></div></div></div><a class="indexterm" name="id328122"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#CASESENSITIVE">case sensitive</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id328146"></a>
 
-<a name="CASESIGNAMES"></a>casesignames
-</h3></div></div></div><a class="indexterm" name="id2557732"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#CASESENSITIVE">case sensitive</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2557762"></a>
-
 case sensitive (S)
-</h3></div></div></div><a class="indexterm" name="id2557763"></a><a name="CASESENSITIVE"></a><div class="variablelist"><dl><dt></dt><dd><p>See the discussion in the section <a class="link" href="smb.conf.5.html#NAMEMANGLING">name mangling</a>.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>case sensitive</code></em> = <code class="literal">no</code>
+</h3></div></div></div><a class="indexterm" name="id328147"></a><a name="CASESENSITIVE"></a><div class="variablelist"><dl><dt></dt><dd><p>See the discussion in the section <a class="link" href="smb.conf.5.html#NAMEMANGLING">name mangling</a>.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>case sensitive</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2557816"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id328190"></a>
 
 change notify (S)
-</h3></div></div></div><a class="indexterm" name="id2557817"></a><a name="CHANGENOTIFY"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies whether Samba should reply
+</h3></div></div></div><a class="indexterm" name="id328191"></a><a name="CHANGENOTIFY"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies whether Samba should reply
 	to a client's file change notify requests.
 	</p><p>You should never need to change this parameter</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>change notify</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2557862"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id328231"></a>
 
 change share command (G)
-</h3></div></div></div><a class="indexterm" name="id2557863"></a><a name="CHANGESHARECOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id328232"></a><a name="CHANGESHARECOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	Samba 2.2.0 introduced the ability to dynamically add and delete shares via the Windows NT 4.0 Server
 Manager.  The <em class="parameter"><code>change share command</code></em> is used to define an external
 program or script which will modify an existing service definition in <code class="filename">smb.conf</code>.  In order to successfully execute the <em class="parameter"><code>change
@@ -919,10 +848,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>change share command</code></em> = <code class="literal">/usr/local/bin/addshare</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2558058"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id328401"></a>
 
 check password script (G)
-</h3></div></div></div><a class="indexterm" name="id2558059"></a><a name="CHECKPASSWORDSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>The name of a program that can be used to check password
+</h3></div></div></div><a class="indexterm" name="id328402"></a><a name="CHECKPASSWORDSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>The name of a program that can be used to check password
     complexity. The password is sent to the program's standrad input.</p><p>The program must return 0 on good password any other value otherwise.
     In case the password is considered weak (the program do not return 0) the
     user will be notified and the password change will fail.</p><p>Note: In the example directory there is a sample program called crackcheck
@@ -930,10 +859,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>check password script</code></em> = <code class="literal">check password script = /usr/local/sbin/crackcheck</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2558132"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id328464"></a>
 
 client lanman auth (G)
-</h3></div></div></div><a class="indexterm" name="id2558133"></a><a name="CLIENTLANMANAUTH"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter determines whether or not <a class="citerefentry" href="smbclient.8.html"><span class="citerefentry"><span class="refentrytitle">smbclient</span>(8)</span></a> and other samba client
+</h3></div></div></div><a class="indexterm" name="id328465"></a><a name="CLIENTLANMANAUTH"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter determines whether or not <a class="citerefentry" href="smbclient.8.html"><span class="citerefentry"><span class="refentrytitle">smbclient</span>(8)</span></a> and other samba client
     tools will attempt to authenticate itself to servers using the
     weaker LANMAN password hash. If disabled, only server which support NT 
     password hashes (e.g. Windows NT/2000, Samba, etc... but not 
@@ -942,43 +871,12 @@
     without Windows 95/98 servers are advised to disable
     this option.  </p><p>Disabling this option will also disable the <code class="literal">client plaintext auth</code> option</p><p>Likewise, if the <code class="literal">client ntlmv2
     auth</code> parameter is enabled, then only NTLMv2 logins will be
-    attempted.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>client lanman auth</code></em> = <code class="literal">no</code>
+    attempted.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>client lanman auth</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2558214"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id328533"></a>
 
-client ldap sasl wrapping (G)
-</h3></div></div></div><a class="indexterm" name="id2558215"></a><a name="CLIENTLDAPSASLWRAPPING"></a><div class="variablelist"><dl><dt></dt><dd><p>
-	The <a class="link" href="smb.conf.5.html#CLIENTLDAPSASLWRAPPING">client ldap sasl wrapping</a> defines whether
-	ldap traffic will be signed or signed and encrypted (sealed). 
-	Possible values are <span class="emphasis"><em>plain</em></span>, <span class="emphasis"><em>sign</em></span> 
-	and <span class="emphasis"><em>seal</em></span>. 	
-	</p><p>
-	The values <span class="emphasis"><em>sign</em></span> and <span class="emphasis"><em>seal</em></span> are 
-	only available if Samba has been compiled against a modern 
-	OpenLDAP version (2.3.x or higher).
-	</p><p>
-	This option is needed in the case of Domain Controllers enforcing 
-	the usage of signed LDAP connections (e.g. Windows 2000 SP3 or higher).
-	LDAP sign and seal can be controlled with the registry key
-	"<code class="literal">HKLM\System\CurrentControlSet\Services\</code>
-	<code class="literal">NTDS\Parameters\LDAPServerIntegrity</code>"
-	on the Windows server side.  
-	</p><p>
-	Depending on the used KRB5 library (MIT and older Heimdal versions)
-	it is possible that the message "integrity only" is not supported. 
-	In this case, <span class="emphasis"><em>sign</em></span> is just an alias for 
-	<span class="emphasis"><em>seal</em></span>.
-	</p><p>
-	The default value is <span class="emphasis"><em>plain</em></span> which is not irritable 
-	to KRB5 clock skew errors. That implies synchronizing the time
-	with the KDC in the case of using <span class="emphasis"><em>sign</em></span> or 
-	<span class="emphasis"><em>seal</em></span>.
-	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>client ldap sasl wrapping</code></em> = <code class="literal">plain</code>
-</em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2558344"></a>
-
 client ntlmv2 auth (G)
-</h3></div></div></div><a class="indexterm" name="id2558345"></a><a name="CLIENTNTLMV2AUTH"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter determines whether or not <a class="citerefentry" href="smbclient.8.html"><span class="citerefentry"><span class="refentrytitle">smbclient</span>(8)</span></a> will attempt to
+</h3></div></div></div><a class="indexterm" name="id328534"></a><a name="CLIENTNTLMV2AUTH"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter determines whether or not <a class="citerefentry" href="smbclient.8.html"><span class="citerefentry"><span class="refentrytitle">smbclient</span>(8)</span></a> will attempt to
     authenticate itself to servers using the NTLMv2 encrypted password
     response.</p><p>If enabled, only an NTLMv2 and LMv2 response (both much more
     secure than earlier versions) will be sent.  Many servers
@@ -990,16 +888,16 @@
     those following 'best practice' security polices) only allow NTLMv2
 	responses, and not the weaker LM or NTLM.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>client ntlmv2 auth</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2558438"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id328613"></a>
 
 client plaintext auth (G)
-</h3></div></div></div><a class="indexterm" name="id2558439"></a><a name="CLIENTPLAINTEXTAUTH"></a><div class="variablelist"><dl><dt></dt><dd><p>Specifies whether a client should send a plaintext 
-		password if the server does not support encrypted passwords.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>client plaintext auth</code></em> = <code class="literal">no</code>
+</h3></div></div></div><a class="indexterm" name="id328614"></a><a name="CLIENTPLAINTEXTAUTH"></a><div class="variablelist"><dl><dt></dt><dd><p>Specifies whether a client should send a plaintext 
+		password if the server does not support encrypted passwords.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>client plaintext auth</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2558481"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id328651"></a>
 
 client schannel (G)
-</h3></div></div></div><a class="indexterm" name="id2558482"></a><a name="CLIENTSCHANNEL"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id328652"></a><a name="CLIENTSCHANNEL"></a><div class="variablelist"><dl><dt></dt><dd><p>
     This controls whether the client offers or even demands the use of the netlogon schannel.
     <a class="link" href="smb.conf.5.html#CLIENTSCHANNEL">client schannel = no</a> does not offer the schannel, 
     <a class="link" href="smb.conf.5.html#CLIENTSCHANNEL">client schannel = auto</a> offers the schannel but does not
@@ -1009,10 +907,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>client schannel</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2558579"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id328727"></a>
 
 client signing (G)
-</h3></div></div></div><a class="indexterm" name="id2558580"></a><a name="CLIENTSIGNING"></a><div class="variablelist"><dl><dt></dt><dd><p>This controls whether the client offers or requires
+</h3></div></div></div><a class="indexterm" name="id328728"></a><a name="CLIENTSIGNING"></a><div class="variablelist"><dl><dt></dt><dd><p>This controls whether the client offers or requires
     the server it talks to to use SMB signing. Possible values 
     are <span class="emphasis"><em>auto</em></span>, <span class="emphasis"><em>mandatory</em></span> 
     and <span class="emphasis"><em>disabled</em></span>. 
@@ -1021,41 +919,19 @@
 	to disabled, SMB signing is not offered either.
 </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>client signing</code></em> = <code class="literal">auto</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2558640"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id328779"></a>
 
 client use spnego (G)
-</h3></div></div></div><a class="indexterm" name="id2558641"></a><a name="CLIENTUSESPNEGO"></a><div class="variablelist"><dl><dt></dt><dd><p> This variable controls whether Samba clients will try 
+</h3></div></div></div><a class="indexterm" name="id328780"></a><a name="CLIENTUSESPNEGO"></a><div class="variablelist"><dl><dt></dt><dd><p> This variable controls whether Samba clients will try 
     to use Simple and Protected NEGOciation (as specified by rfc2478) with 
     supporting servers (including WindowsXP, Windows2000 and Samba
     3.0) to agree upon an authentication
     mechanism.  This enables Kerberos authentication in particular.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>client use spnego</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2558686"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id328818"></a>
 
-cluster addresses (G)
-</h3></div></div></div><a class="indexterm" name="id2558687"></a><a name="CLUSTERADDRESSES"></a><div class="variablelist"><dl><dt></dt><dd><p>With this parameter you can add additional addresses
-	nmbd will register with a WINS server. These addresses are not
-	necessarily present on all nodes simultaneously, but they will
-	be registered with the WINS server so that clients can contact
-	any of the nodes.
-	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>cluster addresses</code></em> = <code class="literal"></code>
-</em></span>
-</p><p>Example: <span class="emphasis"><em><em class="parameter"><code>cluster addresses</code></em> = <code class="literal">10.0.0.1 10.0.0.2 10.0.0.3</code>
-</em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2558748"></a>
-
-clustering (G)
-</h3></div></div></div><a class="indexterm" name="id2558749"></a><a name="CLUSTERING"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies whether Samba should contact
-	ctdb for accessing its tdb files and use ctdb as a backend
-	for its messaging backend.
-	</p><p>Set this parameter to <code class="literal">yes</code> only if
-	you have a cluster setup with ctdb running.
-	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>clustering</code></em> = <code class="literal">no</code>
-</em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2558802"></a>
-
 comment (S)
-</h3></div></div></div><a class="indexterm" name="id2558803"></a><a name="COMMENT"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a text field that is seen next to a share 
+</h3></div></div></div><a class="indexterm" name="id328820"></a><a name="COMMENT"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a text field that is seen next to a share 
 	when a client does a queries the server, either via the network 
 	neighborhood or via <code class="literal">net view</code> to list what shares 
 	are available.</p><p>If you want to set the string that is displayed next to the 
@@ -1064,31 +940,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>comment</code></em> = <code class="literal">Fred's Files</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2558885"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id328889"></a>
 
-config backend (G)
-</h3></div></div></div><a class="indexterm" name="id2558886"></a><a name="CONFIGBACKEND"></a><div class="variablelist"><dl><dt></dt><dd><p>
-		This controls the backend for storing the configuration.
-		Possible values are <span class="emphasis"><em>file</em></span> (the default)
-		and <span class="emphasis"><em>registry</em></span>.
-		When <a class="link" href="smb.conf.5.html#CONFIGBACKEND">config backend = registry</a>
-		 is encountered while loading <span class="emphasis"><em>smb.conf</em></span>,
-		the configuration read so far is dropped and the global
-		options are read from registry instead. So this triggers a
-		registry only configuration. Share definitions are not read
-		immediately but instead <em class="parameter"><code>registry
-		shares</code></em> is set to <span class="emphasis"><em>yes</em></span>.
-	</p><p>
-		Note: This option can not be set inside the registry
-		configuration itself.
-	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>config backend</code></em> = <code class="literal">file</code>
-</em></span>
-</p><p>Example: <span class="emphasis"><em><em class="parameter"><code>config backend</code></em> = <code class="literal">registry</code>
-</em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2558985"></a>
-
 config file (G)
-</h3></div></div></div><a class="indexterm" name="id2558986"></a><a name="CONFIGFILE"></a><div class="variablelist"><dl><dt></dt><dd><p>This allows you to override the config file 
+</h3></div></div></div><a class="indexterm" name="id328890"></a><a name="CONFIGFILE"></a><div class="variablelist"><dl><dt></dt><dd><p>This allows you to override the config file 
 	to use, instead of the default (usually <code class="filename">smb.conf</code>). 
 	There is a chicken and egg problem here as this option is set 
 	in the config file!</p><p>For this reason, if the name of the config file has changed 
@@ -1098,10 +953,10 @@
 	(allowing you to special case the config files of just a few 
 	clients).</p><p><span class="emphasis"><em>No default</em></span></p><p>Example: <span class="emphasis"><em><em class="parameter"><code>config file</code></em> = <code class="literal">/usr/local/samba/lib/smb.conf.%m</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2559055"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id328950"></a>
 
 copy (S)
-</h3></div></div></div><a class="indexterm" name="id2559056"></a><a name="COPY"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter allows you to "clone" service 
+</h3></div></div></div><a class="indexterm" name="id328951"></a><a name="COPY"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter allows you to "clone" service 
 	entries. The specified service is simply duplicated under the 
 	current service's name. Any parameters specified in the current 
 	section will override those in the section being copied.</p><p>This feature lets you set up a 'template' service and 
@@ -1111,13 +966,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>copy</code></em> = <code class="literal">otherservice</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2559122"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id329008"></a><a name="CREATEMODE"></a>create mode</h3></div></div></div><a class="indexterm" name="id329009"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#CREATEMASK">create mask</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id329034"></a>
 
-<a name="CREATEMODE"></a>create mode
-</h3></div></div></div><a class="indexterm" name="id2559123"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#CREATEMASK">create mask</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2559154"></a>
-
 create mask (S)
-</h3></div></div></div><a class="indexterm" name="id2559155"></a><a name="CREATEMASK"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id329035"></a><a name="CREATEMASK"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	When a file is created, the necessary permissions are calculated according to the mapping from DOS modes to
 	UNIX permissions, and the resulting UNIX mode is then bit-wise 'AND'ed with this parameter. This parameter may
 	be thought of as a bit-wise MASK for the UNIX modes of a file. Any bit <span class="emphasis"><em>not</em></span> set here will
@@ -1138,10 +990,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>create mask</code></em> = <code class="literal">0775</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2559291"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id329141"></a>
 
 csc policy (S)
-</h3></div></div></div><a class="indexterm" name="id2559292"></a><a name="CSCPOLICY"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id329142"></a><a name="CSCPOLICY"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This stands for <span class="emphasis"><em>client-side caching policy</em></span>, and specifies how clients capable of offline
 	caching will cache the files in the share. The valid values are: manual, documents, programs, disable.
 	</p><p>
@@ -1153,21 +1005,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>csc policy</code></em> = <code class="literal">programs</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2559377"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id329213"></a>
 
-ctdbd socket (G)
-</h3></div></div></div><a class="indexterm" name="id2559378"></a><a name="CTDBDSOCKET"></a><div class="variablelist"><dl><dt></dt><dd><p>If you set <code class="literal">clustering=yes</code>,
-	you need to tell Samba where ctdbd listens on its unix domain
-	socket. The default path as of ctdb 1.0 is /tmp/ctdb.socket which
-	you have to explicitly set for Samba in smb.conf.
-	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>ctdbd socket</code></em> = <code class="literal"></code>
-</em></span>
-</p><p>Example: <span class="emphasis"><em><em class="parameter"><code>ctdbd socket</code></em> = <code class="literal">/tmp/ctdb.socket</code>
-</em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2559443"></a>
-
 cups options (S)
-</h3></div></div></div><a class="indexterm" name="id2559444"></a><a name="CUPSOPTIONS"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id329214"></a><a name="CUPSOPTIONS"></a><div class="variablelist"><dl><dt></dt><dd><p>
     This parameter is only applicable if <a class="link" href="smb.conf.5.html#PRINTING">printing</a> is 
     set to <code class="constant">cups</code>.  Its value is a free form string of options
     passed directly to the cups library.  
@@ -1189,10 +1030,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>cups options</code></em> = <code class="literal">"raw media=a4"</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2559553"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id329303"></a>
 
 cups server (G)
-</h3></div></div></div><a class="indexterm" name="id2559554"></a><a name="CUPSSERVER"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id329304"></a><a name="CUPSSERVER"></a><div class="variablelist"><dl><dt></dt><dd><p>
     This parameter is only applicable if <a class="link" href="smb.conf.5.html#PRINTING">printing</a> is set to <code class="constant">cups</code>.
     </p><p>
    If set, this option overrides the ServerName option in the CUPS <code class="filename">client.conf</code>. This is 
@@ -1206,10 +1047,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>cups server</code></em> = <code class="literal">mycupsserver:1631</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2559661"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id329395"></a>
 
 deadtime (G)
-</h3></div></div></div><a class="indexterm" name="id2559662"></a><a name="DEADTIME"></a><div class="variablelist"><dl><dt></dt><dd><p>The value of the parameter (a decimal integer) 
+</h3></div></div></div><a class="indexterm" name="id329396"></a><a name="DEADTIME"></a><div class="variablelist"><dl><dt></dt><dd><p>The value of the parameter (a decimal integer) 
     represents the number of minutes of inactivity before a connection 
     is considered dead, and it is disconnected. The deadtime only takes 
     effect if the number of open files is zero.</p><p>This is useful to stop a server's resources being 
@@ -1221,31 +1062,20 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>deadtime</code></em> = <code class="literal">15</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2559742"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id329467"></a>
 
-debug class (G)
-</h3></div></div></div><a class="indexterm" name="id2559743"></a><a name="DEBUGCLASS"></a><div class="variablelist"><dl><dt></dt><dd><p>
-    With this boolean parameter enabled, the debug class (DBGC_CLASS) 
-    will be displayed in the debug header.
-    </p><p>
-    For more information about currently available debug classes, see
-    section about <a class="link" href="smb.conf.5.html#LOGLEVEL">log level</a>.
-    </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>debug class</code></em> = <code class="literal">no</code>
-</em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2559801"></a>
-
 debug hires timestamp (G)
-</h3></div></div></div><a class="indexterm" name="id2559802"></a><a name="DEBUGHIRESTIMESTAMP"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id329468"></a><a name="DEBUGHIRESTIMESTAMP"></a><div class="variablelist"><dl><dt></dt><dd><p>
     Sometimes the timestamps in the log messages are needed with a resolution of higher that seconds, this 
     boolean parameter adds microsecond resolution to the timestamp  message header when turned on.
     </p><p>
     Note that the parameter <a class="link" href="smb.conf.5.html#DEBUGTIMESTAMP">debug timestamp</a> must be on for this to have an effect.
     </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>debug hires timestamp</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2559862"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id329516"></a>
 
 debug pid (G)
-</h3></div></div></div><a class="indexterm" name="id2559864"></a><a name="DEBUGPID"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id329517"></a><a name="DEBUGPID"></a><div class="variablelist"><dl><dt></dt><dd><p>
     When using only one log file for more then one forked <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a>-process there may be hard to follow which process outputs which 
     message. This boolean parameter is adds the process-id to the timestamp message headers in the
     logfile when turned on.
@@ -1253,10 +1083,10 @@
     Note that the parameter <a class="link" href="smb.conf.5.html#DEBUGTIMESTAMP">debug timestamp</a> must be on for this to have an effect.
     </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>debug pid</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2559931"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id329573"></a>
 
 debug prefix timestamp (G)
-</h3></div></div></div><a class="indexterm" name="id2559932"></a><a name="DEBUGPREFIXTIMESTAMP"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id329574"></a><a name="DEBUGPREFIXTIMESTAMP"></a><div class="variablelist"><dl><dt></dt><dd><p>
     With this option enabled, the timestamp message header is prefixed to the debug message without the
     filename and function information that is included with the <a class="link" href="smb.conf.5.html#DEBUGTIMESTAMP">debug timestamp</a> 
     parameter. This gives timestamps to the messages without adding an additional line.
@@ -1264,38 +1094,35 @@
     Note that this parameter overrides the <a class="link" href="smb.conf.5.html#DEBUGTIMESTAMP">debug timestamp</a> parameter.
     </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>debug prefix timestamp</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2560004"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id329630"></a><a name="TIMESTAMPLOGS"></a>timestamp logs</h3></div></div></div><a class="indexterm" name="id329631"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#DEBUGTIMESTAMP">debug timestamp</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id329655"></a>
 
-<a name="TIMESTAMPLOGS"></a>timestamp logs
-</h3></div></div></div><a class="indexterm" name="id2560005"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#DEBUGTIMESTAMP">debug timestamp</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2560036"></a>
-
 debug timestamp (G)
-</h3></div></div></div><a class="indexterm" name="id2560037"></a><a name="DEBUGTIMESTAMP"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id329656"></a><a name="DEBUGTIMESTAMP"></a><div class="variablelist"><dl><dt></dt><dd><p>
     Samba debug log messages are timestamped by default. If you are running at a high 
     <a class="link" href="smb.conf.5.html#DEBUGLEVEL">debug level</a> these timestamps can be distracting. This 
     boolean parameter allows timestamping to be turned off.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>debug timestamp</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2560092"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id329701"></a>
 
 debug uid (G)
-</h3></div></div></div><a class="indexterm" name="id2560093"></a><a name="DEBUGUID"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id329702"></a><a name="DEBUGUID"></a><div class="variablelist"><dl><dt></dt><dd><p>
     Samba is sometimes run as root and sometime run as the connected user, this boolean parameter inserts the 
     current euid, egid, uid and gid to the timestamp message headers in the log file if turned on.
     </p><p>
     Note that the parameter <a class="link" href="smb.conf.5.html#DEBUGTIMESTAMP">debug timestamp</a> must be on for this to have an effect.
     </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>debug uid</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2560152"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id329750"></a>
 
 default case (S)
-</h3></div></div></div><a class="indexterm" name="id2560153"></a><a name="DEFAULTCASE"></a><div class="variablelist"><dl><dt></dt><dd><p>See the section on <a class="link" href="smb.conf.5.html#NAMEMANGLING">name mangling</a>.
+</h3></div></div></div><a class="indexterm" name="id329751"></a><a name="DEFAULTCASE"></a><div class="variablelist"><dl><dt></dt><dd><p>See the section on <a class="link" href="smb.conf.5.html#NAMEMANGLING">name mangling</a>.
 	Also note the <a class="link" href="smb.conf.5.html#SHORTPRESERVECASE">short preserve case</a> parameter.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>default case</code></em> = <code class="literal">lower</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2560215"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id329801"></a>
 
 default devmode (S)
-</h3></div></div></div><a class="indexterm" name="id2560216"></a><a name="DEFAULTDEVMODE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is only applicable to <a class="link" href="smb.conf.5.html#PRINTABLE">printable</a> services.
+</h3></div></div></div><a class="indexterm" name="id329802"></a><a name="DEFAULTDEVMODE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is only applicable to <a class="link" href="smb.conf.5.html#PRINTABLE">printable</a> services.
     When smbd is serving Printer Drivers to Windows NT/2k/XP clients, each printer on the Samba
     server has a Device Mode which defines things such as paper size and
     orientation and duplex settings.  The device mode can only correctly be
@@ -1318,13 +1145,10 @@
     see the <a class="ulink" href="http://msdn.microsoft.com/" target="_top">MSDN documentation</a>.
 </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>default devmode</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2560313"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id329880"></a><a name="DEFAULT"></a>default</h3></div></div></div><a class="indexterm" name="id329881"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#DEFAULTSERVICE">default service</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id329905"></a>
 
-<a name="DEFAULT"></a>default
-</h3></div></div></div><a class="indexterm" name="id2560314"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#DEFAULTSERVICE">default service</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2560346"></a>
-
 default service (G)
-</h3></div></div></div><a class="indexterm" name="id2560347"></a><a name="DEFAULTSERVICE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the name of a service
+</h3></div></div></div><a class="indexterm" name="id329906"></a><a name="DEFAULTSERVICE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the name of a service
 	which will be connected to if the service actually requested cannot
 	be found. Note that the square brackets are <span class="emphasis"><em>NOT</em></span>
 	given in the parameter value (see example below).</p><p>There is no default value for this parameter. If this 
@@ -1338,10 +1162,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>default service</code></em> = <code class="literal">pub</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2560459"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id329998"></a>
 
 defer sharing violations (G)
-</h3></div></div></div><a class="indexterm" name="id2560460"></a><a name="DEFERSHARINGVIOLATIONS"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id329999"></a><a name="DEFERSHARINGVIOLATIONS"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	Windows allows specifying how a file will be shared with 
 	other processes when it is opened. Sharing violations occur when 
 	a file is opened by a different process using options that violate 
@@ -1354,19 +1178,19 @@
 	designed to enable Samba to more correctly emulate Windows.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>defer sharing violations</code></em> = <code class="literal">True</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2560518"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id330046"></a>
 
 delete group script (G)
-</h3></div></div></div><a class="indexterm" name="id2560519"></a><a name="DELETEGROUPSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>This is the full pathname to a script that will 
+</h3></div></div></div><a class="indexterm" name="id330048"></a><a name="DELETEGROUPSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>This is the full pathname to a script that will 
 	be run <span class="emphasis"><em>AS ROOT</em></span> <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> when a group is requested to be deleted. 
 	It will expand any <em class="parameter"><code>%g</code></em> to the group name passed.  
 	This script is only useful for installations using the Windows NT domain administration tools.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>delete group script</code></em> = <code class="literal"></code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2560579"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id330101"></a>
 
 deleteprinter command (G)
-</h3></div></div></div><a class="indexterm" name="id2560580"></a><a name="DELETEPRINTERCOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>With the introduction of MS-RPC based printer
+</h3></div></div></div><a class="indexterm" name="id330102"></a><a name="DELETEPRINTERCOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>With the introduction of MS-RPC based printer
     support for Windows NT/2000 clients in Samba 2.2, it is now 
     possible to delete printer at run time by issuing the 
     DeletePrinter() RPC call.</p><p>For a Samba host this means that the printer must be 
@@ -1384,18 +1208,18 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>deleteprinter command</code></em> = <code class="literal">/usr/bin/removeprinter</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2560730"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id330216"></a>
 
 delete readonly (S)
-</h3></div></div></div><a class="indexterm" name="id2560732"></a><a name="DELETEREADONLY"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter allows readonly files to be deleted.  
+</h3></div></div></div><a class="indexterm" name="id330217"></a><a name="DELETEREADONLY"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter allows readonly files to be deleted.  
 	This is not normal DOS semantics, but is allowed by UNIX.</p><p>This option may be useful for running applications such 
 	as rcs, where UNIX file ownership prevents changing file 
 	permissions, and DOS semantics prevent deletion of a read only file.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>delete readonly</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2560780"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id330259"></a>
 
 delete share command (G)
-</h3></div></div></div><a class="indexterm" name="id2560781"></a><a name="DELETESHARECOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id330260"></a><a name="DELETESHARECOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	Samba 2.2.0 introduced the ability to dynamically add and delete shares via the Windows NT 4.0 Server
 	Manager.  The <em class="parameter"><code>delete share command</code></em> is used to define an external
 	program or script which will remove an existing service definition from
@@ -1419,10 +1243,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>delete share command</code></em> = <code class="literal">/usr/local/bin/delshare</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2560951"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id330402"></a>
 
 delete user from group script (G)
-</h3></div></div></div><a class="indexterm" name="id2560952"></a><a name="DELETEUSERFROMGROUPSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>Full path to the script that will be called when 
+</h3></div></div></div><a class="indexterm" name="id330403"></a><a name="DELETEUSERFROMGROUPSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>Full path to the script that will be called when 
 	a user is removed from a group using the Windows NT domain administration 
 	tools. It will be run by <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> <span class="emphasis"><em>AS ROOT</em></span>. 
 	Any <em class="parameter"><code>%g</code></em> will be replaced with the group name and 
@@ -1431,10 +1255,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>delete user from group script</code></em> = <code class="literal">/usr/sbin/deluser %u %g</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2561036"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id330476"></a>
 
 delete user script (G)
-</h3></div></div></div><a class="indexterm" name="id2561037"></a><a name="DELETEUSERSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>This is the full pathname to a script that will 
+</h3></div></div></div><a class="indexterm" name="id330477"></a><a name="DELETEUSERSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>This is the full pathname to a script that will 
 	be run by <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> when managing users 
 	with remote RPC (NT) tools.
 	</p><p>This script is called when a remote client removes a user
@@ -1443,10 +1267,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>delete user script</code></em> = <code class="literal">/usr/local/samba/bin/del_user %u</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2561119"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id330549"></a>
 
 delete veto files (S)
-</h3></div></div></div><a class="indexterm" name="id2561120"></a><a name="DELETEVETOFILES"></a><div class="variablelist"><dl><dt></dt><dd><p>This option is used when Samba is attempting to 
+</h3></div></div></div><a class="indexterm" name="id330550"></a><a name="DELETEVETOFILES"></a><div class="variablelist"><dl><dt></dt><dd><p>This option is used when Samba is attempting to 
 	delete a directory that contains one or more vetoed directories 
 	(see the <a class="link" href="smb.conf.5.html#VETOFILES">veto files</a>
 	option).  If this option is set to <code class="constant">no</code> (the default) then if a vetoed 
@@ -1460,10 +1284,10 @@
 	directories to be  transparently deleted when the parent directory 
 	is deleted (so long as the user has permissions to do so).</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>delete veto files</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2561216"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id330624"></a>
 
 dfree cache time (S)
-</h3></div></div></div><a class="indexterm" name="id2561217"></a><a name="DFREECACHETIME"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id330626"></a><a name="DFREECACHETIME"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	The <em class="parameter"><code>dfree cache time</code></em> should only be used on systems where a problem
 	occurs with the internal disk space calculations. This has been known to happen with Ultrix, but may occur
 	with other operating systems. The symptom that was seen was an error of "Abort Retry Ignore" at the
@@ -1476,10 +1300,10 @@
 	By default this parameter is zero, meaning no caching will be done.
 	</p><p><span class="emphasis"><em>No default</em></span></p><p>Example: <span class="emphasis"><em><em class="parameter"><code>dfree cache time</code></em> = <code class="literal">dfree cache time = 60</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2561299"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id330690"></a>
 
 dfree command (S)
-</h3></div></div></div><a class="indexterm" name="id2561300"></a><a name="DFREECOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id330691"></a><a name="DFREECOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	The <em class="parameter"><code>dfree command</code></em> setting should only be used on systems where a
 	problem occurs with the internal disk space calculations. This has been known to happen with Ultrix, but may
 	occur with other operating systems. The symptom that was seen was an error of "Abort Retry Ignore"
@@ -1517,13 +1341,10 @@
 	By default internal routines for determining the disk capacity and remaining space will be used.
 	</p><p><span class="emphasis"><em>No default</em></span></p><p>Example: <span class="emphasis"><em><em class="parameter"><code>dfree command</code></em> = <code class="literal">/usr/local/samba/bin/dfree</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2561431"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id330797"></a><a name="DIRECTORYMODE"></a>directory mode</h3></div></div></div><a class="indexterm" name="id330798"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#DIRECTORYMASK">directory mask</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id330822"></a>
 
-<a name="DIRECTORYMODE"></a>directory mode
-</h3></div></div></div><a class="indexterm" name="id2561432"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#DIRECTORYMASK">directory mask</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2561463"></a>
-
 directory mask (S)
-</h3></div></div></div><a class="indexterm" name="id2561464"></a><a name="DIRECTORYMASK"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is the octal modes which are 
+</h3></div></div></div><a class="indexterm" name="id330823"></a><a name="DIRECTORYMASK"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is the octal modes which are 
     used when converting DOS modes to UNIX modes when creating UNIX 
     directories.</p><p>When a directory is created, the necessary permissions are 
     calculated according to the mapping from DOS modes to UNIX permissions, 
@@ -1541,10 +1362,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>directory mask</code></em> = <code class="literal">0775</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2561586"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id330915"></a>
 
 directory security mask (S)
-</h3></div></div></div><a class="indexterm" name="id2561587"></a><a name="DIRECTORYSECURITYMASK"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls what UNIX permission bits
+</h3></div></div></div><a class="indexterm" name="id330916"></a><a name="DIRECTORYSECURITYMASK"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls what UNIX permission bits
     will be set when a Windows NT client is manipulating the UNIX
     permission on a directory using the native NT security dialog
     box.</p><p>
@@ -1564,19 +1385,19 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>directory security mask</code></em> = <code class="literal">0700</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2561696"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id331003"></a>
 
 disable netbios (G)
-</h3></div></div></div><a class="indexterm" name="id2561697"></a><a name="DISABLENETBIOS"></a><div class="variablelist"><dl><dt></dt><dd><p>Enabling this parameter will disable netbios support
+</h3></div></div></div><a class="indexterm" name="id331004"></a><a name="DISABLENETBIOS"></a><div class="variablelist"><dl><dt></dt><dd><p>Enabling this parameter will disable netbios support
     in Samba. Netbios is the only available form of browsing in 
     all windows versions except for 2000 and XP. </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>Clients that only support netbios won't be able to 
     see your samba server when netbios support is disabled.
 	</p></div><p>Default: <span class="emphasis"><em><em class="parameter"><code>disable netbios</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2561746"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id331047"></a>
 
 disable spoolss (G)
-</h3></div></div></div><a class="indexterm" name="id2561747"></a><a name="DISABLESPOOLSS"></a><div class="variablelist"><dl><dt></dt><dd><p>Enabling this parameter will disable Samba's support
+</h3></div></div></div><a class="indexterm" name="id331048"></a><a name="DISABLESPOOLSS"></a><div class="variablelist"><dl><dt></dt><dd><p>Enabling this parameter will disable Samba's support
     for the SPOOLSS set of MS-RPC's and will yield identical behavior
     as Samba 2.0.x.  Windows NT/2000 clients will downgrade to using
     Lanman style printing commands. Windows 9x/ME will be unaffected by
@@ -1588,10 +1409,10 @@
     <span class="emphasis"><em>Be very careful about enabling this parameter.</em></span>
 </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>disable spoolss</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2561802"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id331092"></a>
 
 display charset (G)
-</h3></div></div></div><a class="indexterm" name="id2561803"></a><a name="DISPLAYCHARSET"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id331093"></a><a name="DISPLAYCHARSET"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	Specifies the charset that samba will use to print messages to stdout and stderr.
 	The default value is "LOCALE", which means automatically set, depending on the
 	current locale. The value should generally be the same as the value of the parameter
@@ -1600,10 +1421,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>display charset</code></em> = <code class="literal">UTF8</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2561877"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id331154"></a>
 
 dmapi support (S)
-</h3></div></div></div><a class="indexterm" name="id2561878"></a><a name="DMAPISUPPORT"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies whether Samba should use DMAPI to
+</h3></div></div></div><a class="indexterm" name="id331155"></a><a name="DMAPISUPPORT"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies whether Samba should use DMAPI to
 	determine whether a file is offline or not. This would typically
 	be used in conjunction with a hierarchical storage system that
 	automatically migrates files to tape.
@@ -1618,10 +1439,10 @@
 	</p><p>
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>dmapi support</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2561940"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id331207"></a>
 
 dns proxy (G)
-</h3></div></div></div><a class="indexterm" name="id2561942"></a><a name="DNSPROXY"></a><div class="variablelist"><dl><dt></dt><dd><p>Specifies that <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> when acting as a WINS server and 
+</h3></div></div></div><a class="indexterm" name="id331208"></a><a name="DNSPROXY"></a><div class="variablelist"><dl><dt></dt><dd><p>Specifies that <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> when acting as a WINS server and 
 	finding that a NetBIOS name has not been registered, should treat the 
 	NetBIOS name word-for-word as a DNS name and do a lookup with the DNS server 
 	for that name on behalf of the name-querying client.</p><p>Note that the maximum length for a NetBIOS name is 15 
@@ -1630,10 +1451,10 @@
 	DNS name lookup requests, as doing a name lookup is a blocking 
 	action.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>dns proxy</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2562009"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id331266"></a>
 
 domain logons (G)
-</h3></div></div></div><a class="indexterm" name="id2562010"></a><a name="DOMAINLOGONS"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id331267"></a><a name="DOMAINLOGONS"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	If set to <code class="constant">yes</code>, the Samba server will
 	provide the netlogon service for Windows 9X network logons for the
 	<a class="link" href="smb.conf.5.html#WORKGROUP">workgroup</a> it is in.
@@ -1643,10 +1464,10 @@
 	Samba HOWTO Collection.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>domain logons</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2562070"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id331316"></a>
 
 domain master (G)
-</h3></div></div></div><a class="indexterm" name="id2562072"></a><a name="DOMAINMASTER"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id331317"></a><a name="DOMAINMASTER"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	Tell <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> to enable
 	WAN-wide browse list collation. Setting this option causes <code class="literal">nmbd</code> to claim a
 	special domain specific NetBIOS name that identifies it as a domain master browser for its given
@@ -1672,10 +1493,10 @@
 	Samba will function as a BDC. In general, this parameter should be set to 'No' only on a BDC.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>domain master</code></em> = <code class="literal">auto</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2562301"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id331483"></a>
 
 dont descend (S)
-</h3></div></div></div><a class="indexterm" name="id2562302"></a><a name="DONTDESCEND"></a><div class="variablelist"><dl><dt></dt><dd><p>There are certain directories on some systems 
+</h3></div></div></div><a class="indexterm" name="id331484"></a><a name="DONTDESCEND"></a><div class="variablelist"><dl><dt></dt><dd><p>There are certain directories on some systems 
 	(e.g., the <code class="filename">/proc</code> tree under Linux) that are either not 
 	of interest to clients or are infinitely deep (recursive). This 
 	parameter allows you to specify a comma-delimited list of directories 
@@ -1686,18 +1507,18 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>dont descend</code></em> = <code class="literal">/proc,/dev</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2562386"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id331557"></a>
 
 dos charset (G)
-</h3></div></div></div><a class="indexterm" name="id2562387"></a><a name="DOSCHARSET"></a><div class="variablelist"><dl><dt></dt><dd><p>DOS SMB clients assume the server has 
+</h3></div></div></div><a class="indexterm" name="id331558"></a><a name="DOSCHARSET"></a><div class="variablelist"><dl><dt></dt><dd><p>DOS SMB clients assume the server has 
 	the same charset as they do. This option specifies which 
 	charset Samba should talk to DOS clients.
 	</p><p>The default depends on which charsets you have installed. 
 	Samba tries to use charset 850 but falls back to ASCII in 
-	case it is not available. Run <a class="citerefentry" href="testparm.1.html"><span class="citerefentry"><span class="refentrytitle">testparm</span>(1)</span></a> to check the default on your system.</p><p><span class="emphasis"><em>No default</em></span></p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2562430"></a>
+	case it is not available. Run <a class="citerefentry" href="testparm.1.html"><span class="citerefentry"><span class="refentrytitle">testparm</span>(1)</span></a> to check the default on your system.</p><p><span class="emphasis"><em>No default</em></span></p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id331596"></a>
 
 dos filemode (S)
-</h3></div></div></div><a class="indexterm" name="id2562431"></a><a name="DOSFILEMODE"></a><div class="variablelist"><dl><dt></dt><dd><p> The default behavior in Samba is to provide 
+</h3></div></div></div><a class="indexterm" name="id331597"></a><a name="DOSFILEMODE"></a><div class="variablelist"><dl><dt></dt><dd><p> The default behavior in Samba is to provide 
 	UNIX-like behavior where only the owner of a file/directory is 
 	able to change the permissions on it.  However, this behavior
 	is often confusing to  DOS/Windows users.  Enabling this parameter 
@@ -1707,10 +1528,10 @@
 	change permissions if the group is only granted read access.
 	Ownership of the file/directory may also be changed.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>dos filemode</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2562480"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id331637"></a>
 
 dos filetime resolution (S)
-</h3></div></div></div><a class="indexterm" name="id2562481"></a><a name="DOSFILETIMERESOLUTION"></a><div class="variablelist"><dl><dt></dt><dd><p>Under the DOS and Windows FAT filesystem, the finest 
+</h3></div></div></div><a class="indexterm" name="id331638"></a><a name="DOSFILETIMERESOLUTION"></a><div class="variablelist"><dl><dt></dt><dd><p>Under the DOS and Windows FAT filesystem, the finest 
 	granularity on time resolution is two seconds. Setting this parameter 
 	for a share causes Samba to round the reported time down to the 
 	nearest two second boundary when a query call that requires one second 
@@ -1725,10 +1546,10 @@
 	this option causes the two timestamps to match, and Visual C++ is
 	happy.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>dos filetime resolution</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2562548"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id331693"></a>
 
 dos filetimes (S)
-</h3></div></div></div><a class="indexterm" name="id2562549"></a><a name="DOSFILETIMES"></a><div class="variablelist"><dl><dt></dt><dd><p>Under DOS and Windows, if a user can write to a 
+</h3></div></div></div><a class="indexterm" name="id331694"></a><a name="DOSFILETIMES"></a><div class="variablelist"><dl><dt></dt><dd><p>Under DOS and Windows, if a user can write to a 
 	file they can change the timestamp on it. Under POSIX semantics, 
 	only the owner of the file or root may change the timestamp. By 
 	default, Samba runs with POSIX semantics and refuses to change the 
@@ -1742,20 +1563,20 @@
 	shared between users.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>dos filetimes</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2562619"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id331752"></a>
 
 ea support (S)
-</h3></div></div></div><a class="indexterm" name="id2562620"></a><a name="EASUPPORT"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean parameter controls whether <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> will allow clients to attempt to store OS/2 style Extended
+</h3></div></div></div><a class="indexterm" name="id331753"></a><a name="EASUPPORT"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean parameter controls whether <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> will allow clients to attempt to store OS/2 style Extended
     attributes on a share. In order to enable this parameter the underlying filesystem exported by
     the share must support extended attributes (such as provided on XFS and EXT3 on Linux, with the
     correct kernel patches). On Linux the filesystem must have been mounted with the mount
         option user_xattr in order for extended attributes to work, also
 		extended attributes must be compiled into the Linux kernel.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>ea support</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2562676"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id331800"></a>
 
 enable asu support (G)
-</h3></div></div></div><a class="indexterm" name="id2562677"></a><a name="ENABLEASUSUPPORT"></a><div class="variablelist"><dl><dt></dt><dd><p>Hosts running the "Advanced Server for Unix (ASU)" product 
+</h3></div></div></div><a class="indexterm" name="id331801"></a><a name="ENABLEASUSUPPORT"></a><div class="variablelist"><dl><dt></dt><dd><p>Hosts running the "Advanced Server for Unix (ASU)" product 
     require some special accomodations such as creating a builting [ADMIN$] 
     share that only supports IPC connections.  The has been the default
     behavior in smbd for many years.  However, certain Microsoft applications
@@ -1763,10 +1584,10 @@
     an [ADMIN$} file share.  Disabling this parameter allows for creating 
     an [ADMIN$] file share in smb.conf.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>enable asu support</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2562726"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id331841"></a>
 
 enable privileges (G)
-</h3></div></div></div><a class="indexterm" name="id2562727"></a><a name="ENABLEPRIVILEGES"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id331842"></a><a name="ENABLEPRIVILEGES"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This parameter controls whether or not smbd will honor privileges assigned to specific SIDs via either
 	 <code class="literal">net rpc rights</code> or one of the Windows user and group manager tools.  This parameter is
 	enabled by default. It can be disabled to prevent members of the Domain Admins group from being able to
@@ -1779,10 +1600,10 @@
 	Please read the extended description provided in the Samba HOWTO documentation.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>enable privileges</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2562791"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id331896"></a>
 
 encrypt passwords (G)
-</h3></div></div></div><a class="indexterm" name="id2562792"></a><a name="ENCRYPTPASSWORDS"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean controls whether encrypted passwords 
+</h3></div></div></div><a class="indexterm" name="id331897"></a><a name="ENCRYPTPASSWORDS"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean controls whether encrypted passwords 
     will be negotiated with the client. Note that Windows NT 4.0 SP3 and 
     above and also Windows 98 will by default expect encrypted passwords 
     unless a registry entry is changed. To use encrypted passwords in 
@@ -1805,10 +1626,10 @@
     causes <code class="literal">smbd</code> to authenticate against another 
 	server.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>encrypt passwords</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2562904"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id331987"></a>
 
 enhanced browsing (G)
-</h3></div></div></div><a class="indexterm" name="id2562905"></a><a name="ENHANCEDBROWSING"></a><div class="variablelist"><dl><dt></dt><dd><p>This option enables a couple of enhancements to 
+</h3></div></div></div><a class="indexterm" name="id331988"></a><a name="ENHANCEDBROWSING"></a><div class="variablelist"><dl><dt></dt><dd><p>This option enables a couple of enhancements to 
 	cross-subnet browse propagation that have been added in Samba 
 	but which are not standard in Microsoft implementations.  
 	</p><p>The first enhancement to browse propagation consists of a regular
@@ -1821,10 +1642,10 @@
 	to stay around forever which can be annoying.</p><p>In general you should leave this option enabled as it makes
 	cross-subnet browse propagation much more reliable.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>enhanced browsing</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2562969"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id332041"></a>
 
 enumports command (G)
-</h3></div></div></div><a class="indexterm" name="id2562970"></a><a name="ENUMPORTSCOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>The concept of a "port" is fairly foreign
+</h3></div></div></div><a class="indexterm" name="id332042"></a><a name="ENUMPORTSCOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>The concept of a "port" is fairly foreign
     to UNIX hosts.  Under Windows NT/2000 print servers, a port
     is associated with a port monitor and generally takes the form of
     a local port (i.e. LPT1:, COM1:, FILE:) or a remote port
@@ -1841,10 +1662,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>enumports command</code></em> = <code class="literal">/usr/bin/listports</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2563058"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id332116"></a>
 
 eventlog list (G)
-</h3></div></div></div><a class="indexterm" name="id2563060"></a><a name="EVENTLOGLIST"></a><div class="variablelist"><dl><dt></dt><dd><p>This option defines a list of log names that Samba will 
+</h3></div></div></div><a class="indexterm" name="id332117"></a><a name="EVENTLOGLIST"></a><div class="variablelist"><dl><dt></dt><dd><p>This option defines a list of log names that Samba will 
     report to the Microsoft EventViewer utility.  The listed 
     eventlogs will be associated with tdb file on disk in the 
     <code class="filename">$(lockdir)/eventlog</code>.
@@ -1857,10 +1678,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>eventlog list</code></em> = <code class="literal">Security Application Syslog Apache</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2563138"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id332185"></a>
 
 fake directory create times (S)
-</h3></div></div></div><a class="indexterm" name="id2563139"></a><a name="FAKEDIRECTORYCREATETIMES"></a><div class="variablelist"><dl><dt></dt><dd><p>NTFS and Windows VFAT file systems keep a create 
+</h3></div></div></div><a class="indexterm" name="id332186"></a><a name="FAKEDIRECTORYCREATETIMES"></a><div class="variablelist"><dl><dt></dt><dd><p>NTFS and Windows VFAT file systems keep a create 
 	time for all files and directories. This is not the same as the 
 	ctime - status change time - that Unix keeps, so Samba by default 
 	reports the earliest of the various times Unix does keep. Setting 
@@ -1882,10 +1703,10 @@
 	ensures directories always predate their contents and an NMAKE build 
 	will proceed as expected.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>fake directory create times</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2563209"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id332240"></a>
 
 fake oplocks (S)
-</h3></div></div></div><a class="indexterm" name="id2563210"></a><a name="FAKEOPLOCKS"></a><div class="variablelist"><dl><dt></dt><dd><p>Oplocks are the way that SMB clients get permission 
+</h3></div></div></div><a class="indexterm" name="id332241"></a><a name="FAKEOPLOCKS"></a><div class="variablelist"><dl><dt></dt><dd><p>Oplocks are the way that SMB clients get permission 
 	from a server to locally cache file operations. If a server grants 
 	an oplock (opportunistic lock) then the client is free to assume 
 	that it is the only one accessing the file and it will aggressively 
@@ -1901,10 +1722,10 @@
 	files read-write at the same time you can get data corruption. Use 
 	this option carefully!</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>fake oplocks</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2563302"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id332314"></a>
 
 follow symlinks (S)
-</h3></div></div></div><a class="indexterm" name="id2563303"></a><a name="FOLLOWSYMLINKS"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id332315"></a><a name="FOLLOWSYMLINKS"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This parameter allows the Samba administrator to stop <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a>	from following symbolic links in a particular share. Setting this 
 	parameter to <code class="constant">no</code> prevents any file or directory that is a symbolic link from being 
 	followed (the user will get an 	error).  This option is very useful to stop users from adding a symbolic 
@@ -1914,10 +1735,10 @@
 	This option is enabled (i.e. <code class="literal">smbd</code> will follow symbolic links) by default.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>follow symlinks</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2563377"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id332379"></a>
 
 force create mode (S)
-</h3></div></div></div><a class="indexterm" name="id2563378"></a><a name="FORCECREATEMODE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies a set of UNIX mode bit 
+</h3></div></div></div><a class="indexterm" name="id332380"></a><a name="FORCECREATEMODE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies a set of UNIX mode bit 
     permissions that will <span class="emphasis"><em>always</em></span> be set on a 
     file created by Samba. This is done by bitwise 'OR'ing these bits onto 
     the mode bits of a file that is being created or having its 
@@ -1930,10 +1751,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>force create mode</code></em> = <code class="literal">0755</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2563458"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id332448"></a>
 
 force directory mode (S)
-</h3></div></div></div><a class="indexterm" name="id2563459"></a><a name="FORCEDIRECTORYMODE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies a set of UNIX mode bit 
+</h3></div></div></div><a class="indexterm" name="id332450"></a><a name="FORCEDIRECTORYMODE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies a set of UNIX mode bit 
     permissions that will <span class="emphasis"><em>always</em></span> be set on a directory 
     created by Samba. This is done by bitwise 'OR'ing these bits onto the 
     mode bits of a directory that is being created. The default for this 
@@ -1946,10 +1767,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>force directory mode</code></em> = <code class="literal">0755</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2563539"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id332518"></a>
 
 force directory security mode (S)
-</h3></div></div></div><a class="indexterm" name="id2563540"></a><a name="FORCEDIRECTORYSECURITYMODE"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id332519"></a><a name="FORCEDIRECTORYSECURITYMODE"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This parameter controls what UNIX permission bits can be modified when a Windows NT client is manipulating
 	the UNIX permission on a directory using the native NT security dialog box.
 	</p><p>
@@ -1970,13 +1791,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>force directory security mode</code></em> = <code class="literal">700</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2563643"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id332602"></a><a name="GROUP"></a>group</h3></div></div></div><a class="indexterm" name="id332603"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#FORCEGROUP">force group</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id332627"></a>
 
-<a name="GROUP"></a>group
-</h3></div></div></div><a class="indexterm" name="id2563644"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#FORCEGROUP">force group</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2563675"></a>
-
 force group (S)
-</h3></div></div></div><a class="indexterm" name="id2563676"></a><a name="FORCEGROUP"></a><div class="variablelist"><dl><dt></dt><dd><p>This specifies a UNIX group name that will be 
+</h3></div></div></div><a class="indexterm" name="id332628"></a><a name="FORCEGROUP"></a><div class="variablelist"><dl><dt></dt><dd><p>This specifies a UNIX group name that will be 
     assigned as the default primary group for all users connecting 
     to this service. This is useful for sharing files by ensuring 
     that all access to files on service will use the named group for 
@@ -2000,10 +1818,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>force group</code></em> = <code class="literal">agroup</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2563790"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id332718"></a>
 
 force printername (S)
-</h3></div></div></div><a class="indexterm" name="id2563791"></a><a name="FORCEPRINTERNAME"></a><div class="variablelist"><dl><dt></dt><dd><p>When printing from Windows NT (or later), 
+</h3></div></div></div><a class="indexterm" name="id332719"></a><a name="FORCEPRINTERNAME"></a><div class="variablelist"><dl><dt></dt><dd><p>When printing from Windows NT (or later), 
     each printer in <code class="filename">smb.conf</code> has two 
     associated names which can be used by the client.  The first
     is the sharename (or shortname) defined in smb.conf.  This
@@ -2026,10 +1844,10 @@
     not be able to delete printer connections from their local Printers 
     folder.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>force printername</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2563882"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id332792"></a>
 
 force security mode (S)
-</h3></div></div></div><a class="indexterm" name="id2563883"></a><a name="FORCESECURITYMODE"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id332793"></a><a name="FORCESECURITYMODE"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This parameter controls what UNIX permission bits can be modified when a Windows NT client is manipulating 
     the UNIX permission on a file using the native NT security dialog box.
 	</p><p>
@@ -2049,10 +1867,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>force security mode</code></em> = <code class="literal">700</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2563983"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id332876"></a>
 
 force unknown acl user (S)
-</h3></div></div></div><a class="indexterm" name="id2563984"></a><a name="FORCEUNKNOWNACLUSER"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id332877"></a><a name="FORCEUNKNOWNACLUSER"></a><div class="variablelist"><dl><dt></dt><dd><p>
     If this parameter is set, a Windows NT ACL that contains an unknown SID (security descriptor, or 
     representation of a user or group id) as the owner or group owner of the file will be silently
     mapped into the current UNIX uid or gid of the currently connected user.
@@ -2066,10 +1884,10 @@
     Try using this parameter when XCOPY /O gives an ACCESS_DENIED error.
     </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>force unknown acl user</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2564046"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id332929"></a>
 
 force user (S)
-</h3></div></div></div><a class="indexterm" name="id2564047"></a><a name="FORCEUSER"></a><div class="variablelist"><dl><dt></dt><dd><p>This specifies a UNIX user name that will be 
+</h3></div></div></div><a class="indexterm" name="id332930"></a><a name="FORCEUSER"></a><div class="variablelist"><dl><dt></dt><dd><p>This specifies a UNIX user name that will be 
     assigned as the default user for all users connecting to this service. 
     This is useful for sharing files. You should also use it carefully 
     as using it incorrectly can cause security problems.</p><p>This user name only gets used once a connection is established. 
@@ -2083,10 +1901,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>force user</code></em> = <code class="literal">auser</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2564122"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id332994"></a>
 
 fstype (S)
-</h3></div></div></div><a class="indexterm" name="id2564123"></a><a name="FSTYPE"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id332995"></a><a name="FSTYPE"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This parameter allows the administrator to configure the string that specifies the type of filesystem a share 
 	is using that is reported by <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> 
 	when a client queries the filesystem type for a share. The default type is <code class="constant">NTFS</code> for compatibility 
@@ -2096,14 +1914,13 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>fstype</code></em> = <code class="literal">Samba</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2564203"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id333067"></a>
 
 get quota command (G)
-</h3></div></div></div><a class="indexterm" name="id2564204"></a><a name="GETQUOTACOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>The <code class="literal">get quota command</code> should only be used 
+</h3></div></div></div><a class="indexterm" name="id333068"></a><a name="GETQUOTACOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>The <code class="literal">get quota command</code> should only be used 
 	whenever there is no operating system API available from the OS that 
-	samba can use.</p><p>This option is only available you have compiled Samba with the
-	<code class="literal">--with-sys-quotas</code> option or on Linux with
-	<code class="literal">--with-quotas</code> and a working quota api
+	samba can use.</p><p>This option is only available with <code class="literal">./configure --with-sys-quotas</code>.
+	Or on linux when <code class="literal">./configure --with-quotas</code> was used and a working quota api 
 	was found in the system.</p><p>This parameter should specify the path to a script that 
 	queries the quota information for the specified 
 	user/group for the partition that 
@@ -2112,18 +1929,18 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>get quota command</code></em> = <code class="literal">/usr/local/sbin/query_quota</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2564390"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id333230"></a>
 
 getwd cache (G)
-</h3></div></div></div><a class="indexterm" name="id2564391"></a><a name="GETWDCACHE"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a tuning option. When this is enabled a 
+</h3></div></div></div><a class="indexterm" name="id333231"></a><a name="GETWDCACHE"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a tuning option. When this is enabled a 
     caching algorithm will be used to reduce the time taken for getwd() 
     calls. This can have a significant impact on performance, especially 
     when the <a class="link" href="smb.conf.5.html#WIDESMBCONFOPTIONS">wide smbconfoptions</a> parameter is set to <code class="constant">no</code>.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>getwd cache</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2564450"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id333279"></a>
 
 guest account (G)
-</h3></div></div></div><a class="indexterm" name="id2564451"></a><a name="GUESTACCOUNT"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a username which will be used for access 
+</h3></div></div></div><a class="indexterm" name="id333280"></a><a name="GUESTACCOUNT"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a username which will be used for access 
     to services which are specified as <a class="link" href="smb.conf.5.html#GUESTOK">guest ok</a> (see below). Whatever privileges this 
     user has will be available to any client connecting to the guest service. 
     This user must exist in the password file, but does not require
@@ -2141,40 +1958,34 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>guest account</code></em> = <code class="literal">ftp</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2564558"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id333368"></a><a name="PUBLIC"></a>public</h3></div></div></div><a class="indexterm" name="id333369"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#GUESTOK">guest ok</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id333393"></a>
 
-<a name="PUBLIC"></a>public
-</h3></div></div></div><a class="indexterm" name="id2564559"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#GUESTOK">guest ok</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2564589"></a>
-
 guest ok (S)
-</h3></div></div></div><a class="indexterm" name="id2564590"></a><a name="GUESTOK"></a><div class="variablelist"><dl><dt></dt><dd><p>If this parameter is <code class="constant">yes</code> for 
+</h3></div></div></div><a class="indexterm" name="id333394"></a><a name="GUESTOK"></a><div class="variablelist"><dl><dt></dt><dd><p>If this parameter is <code class="constant">yes</code> for 
     a service, then no password is required to connect to the service. 
     Privileges will be those of the <a class="link" href="smb.conf.5.html#GUESTACCOUNT">guest account</a>.</p><p>This paramater nullifies the benifits of setting
     <a class="link" href="smb.conf.5.html#RESTRICTANONYMOUS">restrict anonymous = 2</a>
 	</p><p>See the section below on <a class="link" href="smb.conf.5.html#SECURITY">security</a> for more information about this option.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>guest ok</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2564677"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id333462"></a><a name="ONLYGUEST"></a>only guest</h3></div></div></div><a class="indexterm" name="id333463"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#GUESTONLY">guest only</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id333487"></a>
 
-<a name="ONLYGUEST"></a>only guest
-</h3></div></div></div><a class="indexterm" name="id2564678"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#GUESTONLY">guest only</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2564709"></a>
-
 guest only (S)
-</h3></div></div></div><a class="indexterm" name="id2564710"></a><a name="GUESTONLY"></a><div class="variablelist"><dl><dt></dt><dd><p>If this parameter is <code class="constant">yes</code> for 
+</h3></div></div></div><a class="indexterm" name="id333488"></a><a name="GUESTONLY"></a><div class="variablelist"><dl><dt></dt><dd><p>If this parameter is <code class="constant">yes</code> for 
     a service, then only guest connections to the service are permitted. 
     This parameter will have no effect if <a class="link" href="smb.conf.5.html#GUESTOK">guest ok</a> is not set for the service.</p><p>See the section below on <a class="link" href="smb.conf.5.html#SECURITY">security</a> for more information about this option.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>guest only</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2564782"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id333546"></a>
 
 hide dot files (S)
-</h3></div></div></div><a class="indexterm" name="id2564783"></a><a name="HIDEDOTFILES"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a boolean parameter that controls whether 
+</h3></div></div></div><a class="indexterm" name="id333547"></a><a name="HIDEDOTFILES"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a boolean parameter that controls whether 
 	files starting with a dot appear as hidden files.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>hide dot files</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2564824"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id333584"></a>
 
 hide files (S)
-</h3></div></div></div><a class="indexterm" name="id2564825"></a><a name="HIDEFILES"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a list of files or directories that are not 
+</h3></div></div></div><a class="indexterm" name="id333585"></a><a name="HIDEFILES"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a list of files or directories that are not 
 	visible but are accessible.  The DOS 'hidden' attribute is applied 
 	to any files or directories that match.</p><p>Each entry in the list must be separated by a '/', 
 	which allows spaces to be included in the entry.  '*'
@@ -2196,32 +2007,32 @@
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>hide files</code></em> = <code class="literal">
 # no file are hidden</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2564913"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id333659"></a>
 
 hide special files (S)
-</h3></div></div></div><a class="indexterm" name="id2564914"></a><a name="HIDESPECIALFILES"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id333660"></a><a name="HIDESPECIALFILES"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This parameter prevents clients from seeing special files such as sockets, devices and
 	fifo's in directory listings.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>hide special files</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2564955"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id333697"></a>
 
 hide unreadable (S)
-</h3></div></div></div><a class="indexterm" name="id2564956"></a><a name="HIDEUNREADABLE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter prevents clients from seeing the
+</h3></div></div></div><a class="indexterm" name="id333698"></a><a name="HIDEUNREADABLE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter prevents clients from seeing the
 		existance of files that cannot be read. Defaults to off.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>hide unreadable</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2564998"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id333735"></a>
 
 hide unwriteable files (S)
-</h3></div></div></div><a class="indexterm" name="id2564999"></a><a name="HIDEUNWRITEABLEFILES"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id333736"></a><a name="HIDEUNWRITEABLEFILES"></a><div class="variablelist"><dl><dt></dt><dd><p>
     This parameter prevents clients from seeing the existance of files that cannot be written to. 
     Defaults to off. Note that unwriteable directories are shown as usual.
     </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>hide unwriteable files</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2565042"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id333773"></a>
 
 homedir map (G)
-</h3></div></div></div><a class="indexterm" name="id2565043"></a><a name="HOMEDIRMAP"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id333774"></a><a name="HOMEDIRMAP"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	If <a class="link" href="smb.conf.5.html#NISHOMEDIR">nis homedir</a> is <code class="constant">yes</code>, and <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> is also acting 	as a Win95/98 <em class="parameter"><code>logon server</code></em> 
 	then this parameter specifies the NIS (or YP) map from which the server for the user's 	home directory should be extracted.  
 	At present, only the Sun auto.home map format is understood. The form of the map is:
@@ -2236,10 +2047,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>homedir map</code></em> = <code class="literal">amd.homedir</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2565155"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id333870"></a>
 
 host msdfs (G)
-</h3></div></div></div><a class="indexterm" name="id2565156"></a><a name="HOSTMSDFS"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id333871"></a><a name="HOSTMSDFS"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	If set to <code class="constant">yes</code>, Samba will act as a Dfs server, and allow Dfs-aware clients to browse
 	Dfs trees hosted on the server.
 	</p><p>
@@ -2247,10 +2058,10 @@
 	setting  up a Dfs tree on Samba, refer to the MSFDS chapter in the book Samba3-HOWTO.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>host msdfs</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2565219"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id333932"></a>
 
 hostname lookups (G)
-</h3></div></div></div><a class="indexterm" name="id2565220"></a><a name="HOSTNAMELOOKUPS"></a><div class="variablelist"><dl><dt></dt><dd><p>Specifies whether samba should use (expensive)
+</h3></div></div></div><a class="indexterm" name="id333933"></a><a name="HOSTNAMELOOKUPS"></a><div class="variablelist"><dl><dt></dt><dd><p>Specifies whether samba should use (expensive)
     hostname lookups or use the ip addresses instead. An example place
     where hostname lookups are currently used is when checking 
     the <code class="literal">hosts deny</code> and <code class="literal">hosts allow</code>.
@@ -2258,13 +2069,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>hostname lookups</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2565292"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id334002"></a><a name="ALLOWHOSTS"></a>allow hosts</h3></div></div></div><a class="indexterm" name="id334003"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#HOSTSALLOW">hosts allow</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id334033"></a>
 
-<a name="ALLOWHOSTS"></a>allow hosts
-</h3></div></div></div><a class="indexterm" name="id2565293"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#HOSTSALLOW">hosts allow</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2565324"></a>
-
 hosts allow (S)
-</h3></div></div></div><a class="indexterm" name="id2565325"></a><a name="HOSTSALLOW"></a><div class="variablelist"><dl><dt></dt><dd><p>A synonym for this parameter is <a class="link" href="smb.conf.5.html#ALLOWHOSTS">allow hosts</a>.</p><p>This parameter is a comma, space, or tab delimited 
+</h3></div></div></div><a class="indexterm" name="id334034"></a><a name="HOSTSALLOW"></a><div class="variablelist"><dl><dt></dt><dd><p>A synonym for this parameter is <a class="link" href="smb.conf.5.html#ALLOWHOSTS">allow hosts</a>.</p><p>This parameter is a comma, space, or tab delimited 
     set of hosts which are permitted to access a service.</p><p>If specified in the [global] section then it will
     apply to all services, regardless of whether the individual 
     service has a different setting.</p><p>You can specify the hosts by name or IP number. For 
@@ -2284,13 +2092,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>hosts allow</code></em> = <code class="literal">150.203.5. myhost.mynet.edu.au</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2565526"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id334221"></a><a name="DENYHOSTS"></a>deny hosts</h3></div></div></div><a class="indexterm" name="id334222"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#HOSTSDENY">hosts deny</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id334251"></a>
 
-<a name="DENYHOSTS"></a>deny hosts
-</h3></div></div></div><a class="indexterm" name="id2565527"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#HOSTSDENY">hosts deny</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2565557"></a>
-
 hosts deny (S)
-</h3></div></div></div><a class="indexterm" name="id2565558"></a><a name="HOSTSDENY"></a><div class="variablelist"><dl><dt></dt><dd><p>The opposite of <em class="parameter"><code>hosts allow</code></em> 
+</h3></div></div></div><a class="indexterm" name="id334252"></a><a name="HOSTSDENY"></a><div class="variablelist"><dl><dt></dt><dd><p>The opposite of <em class="parameter"><code>hosts allow</code></em> 
     - hosts listed here are <span class="emphasis"><em>NOT</em></span> permitted access to 
     services unless the specific services have their own lists to override 
     this one. Where the lists conflict, the <em class="parameter"><code>allow</code></em> 
@@ -2304,10 +2109,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>hosts deny</code></em> = <code class="literal">150.203.4. badhost.mynet.edu.au</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2565659"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id334347"></a>
 
 idmap alloc backend (G)
-</h3></div></div></div><a class="indexterm" name="id2565660"></a><a name="IDMAPALLOCBACKEND"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id334348"></a><a name="IDMAPALLOCBACKEND"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	The idmap alloc backend provides a plugin interface for Winbind to use
 	when allocating Unix uids/gids for Windows SIDs.  This option is
 	to be used in conjunction with the <a class="link" href="smb.conf.5.html#IDMAPDOMAINS">idmap domains</a> 
@@ -2319,18 +2124,18 @@
 	</p><p>Also refer to the <a class="link" href="smb.conf.5.html#IDMAPALLOCCONFIG">idmap alloc config</a> option.
 	</p><p><span class="emphasis"><em>No default</em></span></p><p>Example: <span class="emphasis"><em><em class="parameter"><code>idmap alloc backend</code></em> = <code class="literal">tdb</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2565757"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id334438"></a>
 
 idmap alloc config (G)
-</h3></div></div></div><a class="indexterm" name="id2565758"></a><a name="IDMAPALLOCCONFIG"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id334439"></a><a name="IDMAPALLOCCONFIG"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	The idmap alloc config prefix provides a means of managing settings
 	for the backend defined by the <a class="link" href="smb.conf.5.html#IDMAPALLOCBACKEND">idmap alloc backend</a> 
 	parameter.  Refer to the man page for each idmap plugin regarding
 	specific configuration details.
-	</p><p><span class="emphasis"><em>No default</em></span></p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2565801"></a>
+	</p><p><span class="emphasis"><em>No default</em></span></p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id334478"></a>
 
 idmap backend (G)
-</h3></div></div></div><a class="indexterm" name="id2565802"></a><a name="IDMAPBACKEND"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id334479"></a><a name="IDMAPBACKEND"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	The idmap backend provides a plugin interface for Winbind to use
 	varying backends to store SID/uid/gid mapping tables.  This
 	option is mutually exclusive with the newer and more flexible
@@ -2343,17 +2148,17 @@
 	and ad (<a class="citerefentry" href="idmap_tdb.8.html"><span class="citerefentry"><span class="refentrytitle">idmap_tdb</span>(8)</span></a>).
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>idmap backend</code></em> = <code class="literal">tdb</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2565896"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id334568"></a>
 
 idmap cache time (G)
-</h3></div></div></div><a class="indexterm" name="id2565897"></a><a name="IDMAPCACHETIME"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the number of seconds that Winbind's
+</h3></div></div></div><a class="indexterm" name="id334569"></a><a name="IDMAPCACHETIME"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the number of seconds that Winbind's
 	idmap interface will cache positive SID/uid/gid query results.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>idmap cache time</code></em> = <code class="literal">900</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2565939"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id334609"></a>
 
 idmap config (G)
-</h3></div></div></div><a class="indexterm" name="id2565940"></a><a name="IDMAPCONFIG"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id334610"></a><a name="IDMAPCONFIG"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	The idmap config prefix provides a means of managing each domain 
 	defined by the <a class="link" href="smb.conf.5.html#IDMAPDOMAINS">idmap domains</a> option using Samba's
 	parameteric option support.  The idmap config prefix should be 
@@ -2385,10 +2190,10 @@
 	idmap config TRUSTEDDOMAINS:backend = tdb
 	idmap config TRUSTEDDOMAINS:default = yes
 	idmap config TRUSTEDDOMAINS:range   = 1000 - 9999
-	</pre><p><span class="emphasis"><em>No default</em></span></p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2566074"></a>
+	</pre><p><span class="emphasis"><em>No default</em></span></p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id334730"></a>
 
 idmap domains (G)
-</h3></div></div></div><a class="indexterm" name="id2566075"></a><a name="IDMAPDOMAINS"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id334731"></a><a name="IDMAPDOMAINS"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	The idmap domains option defines a list of Windows domains which will each
 	have a separately configured backend for managing Winbind's SID/uid/gid
 	tables.  This parameter is mutually exclusive with the older <a class="link" href="smb.conf.5.html#IDMAPBACKEND">idmap backend</a> option.
@@ -2401,13 +2206,10 @@
 	managing the SID/uid/gid backend for each domain.
 	</p><p><span class="emphasis"><em>No default</em></span></p><p>Example: <span class="emphasis"><em><em class="parameter"><code>idmap domains</code></em> = <code class="literal">default AD CORP</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2566159"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id334808"></a><a name="WINBINDGID"></a>winbind gid</h3></div></div></div><a class="indexterm" name="id334809"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#IDMAPGID">idmap gid</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id334838"></a>
 
-<a name="WINBINDGID"></a>winbind gid
-</h3></div></div></div><a class="indexterm" name="id2566160"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#IDMAPGID">idmap gid</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2566191"></a>
-
 idmap gid (G)
-</h3></div></div></div><a class="indexterm" name="id2566192"></a><a name="IDMAPGID"></a><div class="variablelist"><dl><dt></dt><dd><p>The idmap gid parameter specifies the range of group ids 
+</h3></div></div></div><a class="indexterm" name="id334839"></a><a name="IDMAPGID"></a><div class="variablelist"><dl><dt></dt><dd><p>The idmap gid parameter specifies the range of group ids 
 	that are allocated for the purpose of mapping UNX groups to NT group 
 	SIDs. This range of group ids should have no 
 	existing local or NIS groups within it as strange conflicts can 
@@ -2416,20 +2218,17 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>idmap gid</code></em> = <code class="literal">10000-20000</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2566288"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id334932"></a>
 
 idmap negative cache time (G)
-</h3></div></div></div><a class="indexterm" name="id2566289"></a><a name="IDMAPNEGATIVECACHETIME"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the number of seconds that Winbind's
+</h3></div></div></div><a class="indexterm" name="id334933"></a><a name="IDMAPNEGATIVECACHETIME"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the number of seconds that Winbind's
 	idmap interface will cache negative SID/uid/gid query results.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>idmap negative cache time</code></em> = <code class="literal">120</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2566332"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id334974"></a><a name="WINBINDUID"></a>winbind uid</h3></div></div></div><a class="indexterm" name="id334975"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#IDMAPUID">idmap uid</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id335004"></a>
 
-<a name="WINBINDUID"></a>winbind uid
-</h3></div></div></div><a class="indexterm" name="id2566333"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#IDMAPUID">idmap uid</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2566363"></a>
-
 idmap uid (G)
-</h3></div></div></div><a class="indexterm" name="id2566364"></a><a name="IDMAPUID"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id335005"></a><a name="IDMAPUID"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	The idmap uid parameter specifies the range of user ids that are 
 	allocated for use in mapping UNIX users to NT user SIDs. This 
 	range of ids should have no existing local
@@ -2438,31 +2237,23 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>idmap uid</code></em> = <code class="literal">10000-20000</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2566461"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id335097"></a>
 
 include (G)
-</h3></div></div></div><a class="indexterm" name="id2566462"></a><a name="INCLUDE"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id335098"></a><a name="INCLUDE"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This allows you to include one config file inside another.  The file is included literally, as though typed 
 	in place.
 	</p><p>
 	It takes the standard substitutions, except <em class="parameter"><code>%u</code></em>, 
 	<em class="parameter"><code>%P</code></em> and <em class="parameter"><code>%S</code></em>.
-	</p><p>
-	The parameter <em class="parameter"><code>include = registry</code></em> has
-	a special meaning: It does <span class="emphasis"><em>not</em></span> include
-	a file named <span class="emphasis"><em>registry</em></span> from the current working
-	directory, but instead reads the global configuration options
-	from the registry. See the section on registry-based
-	configuration for details. Note that this option
-	automatically activates registry shares.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>include</code></em> = <code class="literal"></code>
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>include</code></em> = <code class="literal">/usr/local/samba/lib/admin_smb.conf</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2566562"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id335174"></a>
 
 inherit acls (S)
-</h3></div></div></div><a class="indexterm" name="id2566563"></a><a name="INHERITACLS"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter can be used to ensure that if default acls
+</h3></div></div></div><a class="indexterm" name="id335176"></a><a name="INHERITACLS"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter can be used to ensure that if default acls
     exist on parent directories, they are always honored when creating a
     new file or subdirectory in these parent directories. The default 
     behavior is to use the unix mode specified when creating the directory. 
@@ -2470,10 +2261,10 @@
     default directory acls are propagated.
 </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>inherit acls</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2566609"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id335218"></a>
 
 inherit owner (S)
-</h3></div></div></div><a class="indexterm" name="id2566610"></a><a name="INHERITOWNER"></a><div class="variablelist"><dl><dt></dt><dd><p>The ownership of new files and directories 
+</h3></div></div></div><a class="indexterm" name="id335219"></a><a name="INHERITOWNER"></a><div class="variablelist"><dl><dt></dt><dd><p>The ownership of new files and directories 
 	is normally governed by effective uid of the connected user.
 	This option allows the Samba administrator to specify that
 	the ownership for new files and directories should be controlled
@@ -2482,10 +2273,10 @@
 	delete them and to ensure that newly create files in a user's
 	roaming profile directory are actually owner by the user.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>inherit owner</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2566662"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id335266"></a>
 
 inherit permissions (S)
-</h3></div></div></div><a class="indexterm" name="id2566663"></a><a name="INHERITPERMISSIONS"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id335267"></a><a name="INHERITPERMISSIONS"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	The permissions on new files and directories are normally governed by <a class="link" href="smb.conf.5.html#CREATEMASK">create mask</a>,
 	<a class="link" href="smb.conf.5.html#DIRECTORYMASK">directory mask</a>, <a class="link" href="smb.conf.5.html#FORCECREATEMODE">force create mode</a> and <a class="link" href="smb.conf.5.html#FORCEDIRECTORYMODE">force directory mode</a> but the boolean inherit permissions parameter overrides this.
 	</p><p>New directories inherit the mode of the parent directory,
@@ -2497,10 +2288,10 @@
     many users, perhaps several thousand, to allow a single [homes] 
     share to be used flexibly by each user.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>inherit permissions</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2566809"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id335403"></a>
 
 interfaces (G)
-</h3></div></div></div><a class="indexterm" name="id2566810"></a><a name="INTERFACES"></a><div class="variablelist"><dl><dt></dt><dd><p>This option allows you to override the default 
+</h3></div></div></div><a class="indexterm" name="id335404"></a><a name="INTERFACES"></a><div class="variablelist"><dl><dt></dt><dd><p>This option allows you to override the default 
 	network interfaces list that Samba will use for browsing, name 
 	registration and other NBT traffic. By default Samba will query 
 	the kernel for the list of all active interfaces and use any 
@@ -2524,10 +2315,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>interfaces</code></em> = <code class="literal">eth0 192.168.2.10/24 192.168.3.10/255.255.255.0</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2566926"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id335508"></a>
 
 invalid users (S)
-</h3></div></div></div><a class="indexterm" name="id2566927"></a><a name="INVALIDUSERS"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a list of users that should not be allowed 
+</h3></div></div></div><a class="indexterm" name="id335509"></a><a name="INVALIDUSERS"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a list of users that should not be allowed 
     to login to this service. This is really a <span class="emphasis"><em>paranoid</em></span> 
     check to absolutely ensure an improper setting does not breach 
     your security.</p><p>A name starting with a '@' is interpreted as an NIS 
@@ -2547,10 +2338,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>invalid users</code></em> = <code class="literal">root fred admin @wheel</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2567039"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id335608"></a>
 
 iprint server (G)
-</h3></div></div></div><a class="indexterm" name="id2567040"></a><a name="IPRINTSERVER"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id335609"></a><a name="IPRINTSERVER"></a><div class="variablelist"><dl><dt></dt><dd><p>
     This parameter is only applicable if <a class="link" href="smb.conf.5.html#PRINTING">printing</a> is set to <code class="constant">iprint</code>.
     </p><p>
    If set, this option overrides the ServerName option in the CUPS <code class="filename">client.conf</code>. This is 
@@ -2559,10 +2350,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>iprint server</code></em> = <code class="literal">MYCUPSSERVER</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2567125"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id335690"></a>
 
 keepalive (G)
-</h3></div></div></div><a class="indexterm" name="id2567126"></a><a name="KEEPALIVE"></a><div class="variablelist"><dl><dt></dt><dd><p>The value of the parameter (an integer) represents 
+</h3></div></div></div><a class="indexterm" name="id335692"></a><a name="KEEPALIVE"></a><div class="variablelist"><dl><dt></dt><dd><p>The value of the parameter (an integer) represents 
     the number of seconds between <em class="parameter"><code>keepalive</code></em> 
     packets. If this parameter is zero, no keepalive packets will be 
     sent. Keepalive packets, if sent, allow the server to tell whether 
@@ -2572,20 +2363,20 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>keepalive</code></em> = <code class="literal">600</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2567213"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id335772"></a>
 
 kernel change notify (S)
-</h3></div></div></div><a class="indexterm" name="id2567214"></a><a name="KERNELCHANGENOTIFY"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies whether Samba should ask the 
+</h3></div></div></div><a class="indexterm" name="id335773"></a><a name="KERNELCHANGENOTIFY"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies whether Samba should ask the 
 	kernel for change notifications in directories so that
 	SMB clients can refresh whenever the data on the server changes.
 	</p><p>This parameter is only used when your kernel supports 
 	change notification to user programs using the inotify interface.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>kernel change notify</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2567262"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id335818"></a>
 
 kernel oplocks (G)
-</h3></div></div></div><a class="indexterm" name="id2567263"></a><a name="KERNELOPLOCKS"></a><div class="variablelist"><dl><dt></dt><dd><p>For UNIXes that support kernel based <a class="link" href="smb.conf.5.html#OPLOCKS">oplocks</a>
+</h3></div></div></div><a class="indexterm" name="id335819"></a><a name="KERNELOPLOCKS"></a><div class="variablelist"><dl><dt></dt><dd><p>For UNIXes that support kernel based <a class="link" href="smb.conf.5.html#OPLOCKS">oplocks</a>
 	(currently only IRIX and the Linux 2.4 kernel), this parameter 
 	allows the use of them to be turned on or off.</p><p>Kernel oplocks support allows Samba <em class="parameter"><code>oplocks
 	</code></em> to be broken whenever a local UNIX process or NFS operation 
@@ -2595,10 +2386,10 @@
 	to a no-op on systems that no not have the necessary kernel support.
 	You should never need to touch this parameter.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>kernel oplocks</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2567350"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id335900"></a>
 
 lanman auth (G)
-</h3></div></div></div><a class="indexterm" name="id2567351"></a><a name="LANMANAUTH"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter determines whether or not <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> will attempt to
+</h3></div></div></div><a class="indexterm" name="id335901"></a><a name="LANMANAUTH"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter determines whether or not <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> will attempt to
     authenticate users or permit password changes
     using the LANMAN password hash. If disabled, only clients which support NT 
     password hashes (e.g. Windows NT/2000 clients, smbclient, but not 
@@ -2613,12 +2404,12 @@
     auth</code> to disable this for Samba's clients (such as smbclient)</p><p>If this option, and <code class="literal">ntlm
     auth</code> are both disabled, then only NTLMv2 logins will be
     permited.  Not all clients support NTLMv2, and most will require
-    special configuration to use it.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>lanman auth</code></em> = <code class="literal">no</code>
+    special configuration to use it.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>lanman auth</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2567442"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id335983"></a>
 
 large readwrite (G)
-</h3></div></div></div><a class="indexterm" name="id2567443"></a><a name="LARGEREADWRITE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter determines whether or not
+</h3></div></div></div><a class="indexterm" name="id335984"></a><a name="LARGEREADWRITE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter determines whether or not
     <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> supports the new 64k
     streaming read and write varient SMB requests introduced with
     Windows 2000. Note that due to Windows 2000 client redirector bugs
@@ -2627,10 +2418,10 @@
     performance by 10% with Windows 2000 clients. Defaults to on. Not as
 	tested as some other Samba code paths.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>large readwrite</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2567498"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id336035"></a>
 
 ldap admin dn (G)
-</h3></div></div></div><a class="indexterm" name="id2567500"></a><a name="LDAPADMINDN"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id336036"></a><a name="LDAPADMINDN"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	The <a class="link" href="smb.conf.5.html#LDAPADMINDN">ldap admin dn</a> defines the Distinguished  Name (DN) name used by Samba to contact
 	the ldap server when retreiving  user account information. The <a class="link" href="smb.conf.5.html#LDAPADMINDN">ldap admin dn</a> is used
 	in conjunction with the admin dn password stored in the <code class="filename">private/secrets.tdb</code>
@@ -2638,75 +2429,28 @@
 	man page for more information on how  to accomplish this.
 	</p><p>
 	The <a class="link" href="smb.conf.5.html#LDAPADMINDN">ldap admin dn</a> requires a fully specified DN. The <a class="link" href="smb.conf.5.html#LDAPSUFFIX">ldap  suffix</a> is not appended to the <a class="link" href="smb.conf.5.html#LDAPADMINDN">ldap admin dn</a>.
-	</p><p><span class="emphasis"><em>No default</em></span></p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2567607"></a>
+	</p><p><span class="emphasis"><em>No default</em></span></p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id336136"></a>
 
-ldap connection timeout (G)
-</h3></div></div></div><a class="indexterm" name="id2567608"></a><a name="LDAPCONNECTIONTIMEOUT"></a><div class="variablelist"><dl><dt></dt><dd><p>
-	This parameter tells the LDAP library calls which timeout in seconds
-	they should honor during initial connection establishments to LDAP servers.
-	It is very useful in failover scenarios in particular. If one or more LDAP
-	servers are not reachable at all, we do not have to wait until TCP
-	timeouts are over. This feature must be supported by your LDAP library.
-	</p><p>
-	This parameter is different from <a class="link" href="smb.conf.5.html#LDAPTIMEOUT">ldap timeout</a>
-	which affects operations on LDAP servers using an existing connection
-	and not establishing an initial connection.
-	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>ldap connection timeout</code></em> = <code class="literal">2</code>
-</em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2567672"></a>
-
-ldap debug level (G)
-</h3></div></div></div><a class="indexterm" name="id2567673"></a><a name="LDAPDEBUGLEVEL"></a><div class="variablelist"><dl><dt></dt><dd><p>
-		This parameter controls the debug level of the LDAP library
-		calls. In the case of OpenLDAP, it is the same
-		bit-field as understood by the server and documented in the
-		 <a class="citerefentry" href="slapd.conf.5.html"><span class="citerefentry"><span class="refentrytitle">slapd.conf</span>(5)</span></a>
-		manpage.
-		A typical useful value will be
-		 <span class="emphasis"><em>1</em></span> for tracing function calls.
-	</p><p>
-		The debug ouput from the LDAP libraries appears with the
-		prefix [LDAP] in Samba's logging output.
-		The level at which LDAP logging is printed is controlled by the
-		parameter <em class="parameter"><code>ldap debug threshold</code></em>.
-	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>ldap debug level</code></em> = <code class="literal">0</code>
-</em></span>
-</p><p>Example: <span class="emphasis"><em><em class="parameter"><code>ldap debug level</code></em> = <code class="literal">1</code>
-</em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2567760"></a>
-
-ldap debug threshold (G)
-</h3></div></div></div><a class="indexterm" name="id2567761"></a><a name="LDAPDEBUGTHRESHOLD"></a><div class="variablelist"><dl><dt></dt><dd><p>
-		This parameter controls the Samba debug level at which
-		the ldap library debug output is
-		printed in the Samba logs. See the description of
-		 <em class="parameter"><code>ldap debug level</code></em> for details.
-	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>ldap debug threshold</code></em> = <code class="literal">10</code>
-</em></span>
-</p><p>Example: <span class="emphasis"><em><em class="parameter"><code>ldap debug threshold</code></em> = <code class="literal">5</code>
-</em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2567827"></a>
-
 ldap delete dn (G)
-</h3></div></div></div><a class="indexterm" name="id2567828"></a><a name="LDAPDELETEDN"></a><div class="variablelist"><dl><dt></dt><dd><p> This parameter specifies whether a delete
+</h3></div></div></div><a class="indexterm" name="id336137"></a><a name="LDAPDELETEDN"></a><div class="variablelist"><dl><dt></dt><dd><p> This parameter specifies whether a delete
 	operation in the ldapsam deletes the complete entry or only the attributes
 	specific to Samba.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>ldap delete dn</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2567871"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id336178"></a>
 
 ldap group suffix (G)
-</h3></div></div></div><a class="indexterm" name="id2567872"></a><a name="LDAPGROUPSUFFIX"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the suffix that is 
+</h3></div></div></div><a class="indexterm" name="id336179"></a><a name="LDAPGROUPSUFFIX"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the suffix that is 
 	used for groups when these are added to the LDAP directory.
 	If this parameter is unset, the value of <a class="link" href="smb.conf.5.html#LDAPSUFFIX">ldap suffix</a> will be used instead.  The suffix string is pre-pended to the
         <a class="link" href="smb.conf.5.html#LDAPSUFFIX">ldap suffix</a> string so use a partial DN.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>ldap group suffix</code></em> = <code class="literal"></code>
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>ldap group suffix</code></em> = <code class="literal">ou=Groups</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2567954"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id336256"></a>
 
 ldap idmap suffix (G)
-</h3></div></div></div><a class="indexterm" name="id2567955"></a><a name="LDAPIDMAPSUFFIX"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id336258"></a><a name="LDAPIDMAPSUFFIX"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This parameters specifies the suffix that is used when storing idmap mappings. If this parameter 
 	is unset, the value of <a class="link" href="smb.conf.5.html#LDAPSUFFIX">ldap suffix</a> will be used instead.  The suffix 
 	string is pre-pended to the <a class="link" href="smb.conf.5.html#LDAPSUFFIX">ldap suffix</a> string so use a partial DN.
@@ -2714,10 +2458,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>ldap idmap suffix</code></em> = <code class="literal">ou=Idmap</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2568037"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id336336"></a>
 
 ldap machine suffix (G)
-</h3></div></div></div><a class="indexterm" name="id2568038"></a><a name="LDAPMACHINESUFFIX"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id336337"></a><a name="LDAPMACHINESUFFIX"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	It specifies where machines should be added to the ldap tree.  If this parameter is unset, the value of
 	<a class="link" href="smb.conf.5.html#LDAPSUFFIX">ldap suffix</a> will be used instead.  The suffix string is pre-pended to the
 	<a class="link" href="smb.conf.5.html#LDAPSUFFIX">ldap suffix</a> string so use a partial DN.
@@ -2725,10 +2469,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>ldap machine suffix</code></em> = <code class="literal">ou=Computers</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2568118"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id336414"></a>
 
 ldap passwd sync (G)
-</h3></div></div></div><a class="indexterm" name="id2568120"></a><a name="LDAPPASSWDSYNC"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id336415"></a><a name="LDAPPASSWDSYNC"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This option is used to define whether or not Samba should sync the LDAP password with the NT
 	and LM hashes for normal accounts (NOT for workstation, server or domain trusts) on a password
 	change via SAMBA.  
@@ -2739,10 +2483,10 @@
 			LM passwords and update the pwdLastSet time.</p></li><li><p><em class="parameter"><code>Only</code></em> = Only update 
 			the LDAP password and let the LDAP server do the rest.</p></li></ul></div><p>Default: <span class="emphasis"><em><em class="parameter"><code>ldap passwd sync</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2568219"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id336509"></a>
 
 ldap replication sleep (G)
-</h3></div></div></div><a class="indexterm" name="id2568220"></a><a name="LDAPREPLICATIONSLEEP"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id336510"></a><a name="LDAPREPLICATIONSLEEP"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	When Samba is asked to write to a read-only LDAP replica, we are redirected to talk to the read-write master server.
 	This server then replicates our changes back to the 'local' server, however the replication might take some seconds, 
 	especially over slow links.  Certain client activities, particularly domain joins, can become confused by the 'success' 
@@ -2755,10 +2499,10 @@
 	The value is specified in milliseconds, the maximum value is 5000 (5 seconds).
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>ldap replication sleep</code></em> = <code class="literal">1000</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2568282"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id336564"></a>
 
 ldapsam:editposix (G)
-</h3></div></div></div><a class="indexterm" name="id2568283"></a><a name="LDAPSAM:EDITPOSIX"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id336565"></a><a name="LDAPSAM:EDITPOSIX"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	Editposix is an option that leverages ldapsam:trusted to make it simpler to manage a domain controller
 	eliminating the need to set up custom scripts to add and manage the posix users and groups. This option
 	will instead directly manipulate the ldap tree to create, remove and modify user and group entries.
@@ -2837,10 +2581,10 @@
 	</pre><p>
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>ldapsam:editposix</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2568409"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id336673"></a>
 
 ldapsam:trusted (G)
-</h3></div></div></div><a class="indexterm" name="id2568410"></a><a name="LDAPSAM:TRUSTED"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id336674"></a><a name="LDAPSAM:TRUSTED"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	By default, Samba as a Domain Controller with an LDAP backend needs to use the Unix-style NSS subsystem to
 	access user and group information. Due to the way Unix stores user information in /etc/passwd and /etc/group
 	this inevitably leads to inefficiencies. One important question a user needs to know is the list of groups he
@@ -2858,10 +2602,10 @@
 	is easily achieved.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>ldapsam:trusted</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2568498"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id336748"></a>
 
 ldap ssl (G)
-</h3></div></div></div><a class="indexterm" name="id2568499"></a><a name="LDAPSSL"></a><div class="variablelist"><dl><dt></dt><dd><p>This option is used to define whether or not Samba should
+</h3></div></div></div><a class="indexterm" name="id336750"></a><a name="LDAPSSL"></a><div class="variablelist"><dl><dt></dt><dd><p>This option is used to define whether or not Samba should
 	use SSL when connecting to the ldap server
 	This is <span class="emphasis"><em>NOT</em></span> related to
 	Samba's previous SSL support which was enabled by specifying the 
@@ -2875,10 +2619,10 @@
 		to configure. See <a class="link" href="smb.conf.5.html#PASSDBBACKEND">passdb backend</a></p>.
 		</li></ul></div><p>Default: <span class="emphasis"><em><em class="parameter"><code>ldap ssl</code></em> = <code class="literal">start_tls</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2568637"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id336881"></a>
 
 ldap suffix (G)
-</h3></div></div></div><a class="indexterm" name="id2568638"></a><a name="LDAPSUFFIX"></a><div class="variablelist"><dl><dt></dt><dd><p>Specifies the base for all ldap suffixes and for storing the sambaDomain object.</p><p>
+</h3></div></div></div><a class="indexterm" name="id336882"></a><a name="LDAPSUFFIX"></a><div class="variablelist"><dl><dt></dt><dd><p>Specifies the base for all ldap suffixes and for storing the sambaDomain object.</p><p>
 	The ldap suffix will be appended to the values specified for the <a class="link" href="smb.conf.5.html#LDAPUSERSUFFIX">ldap user suffix</a>,
 	 <a class="link" href="smb.conf.5.html#LDAPGROUPSUFFIX">ldap group suffix</a>, <a class="link" href="smb.conf.5.html#LDAPMACHINESUFFIX">ldap machine suffix</a>, and the
 	 <a class="link" href="smb.conf.5.html#LDAPIDMAPSUFFIX">ldap idmap suffix</a>. Each of these should be given only a DN relative to the
@@ -2887,19 +2631,19 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>ldap suffix</code></em> = <code class="literal">dc=samba,dc=org</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2568759"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id336997"></a>
 
 ldap timeout (G)
-</h3></div></div></div><a class="indexterm" name="id2568760"></a><a name="LDAPTIMEOUT"></a><div class="variablelist"><dl><dt></dt><dd><p>
-	When Samba connects to an ldap server that server may be down or unreachable. To prevent Samba from hanging whilst
+</h3></div></div></div><a class="indexterm" name="id336998"></a><a name="LDAPTIMEOUT"></a><div class="variablelist"><dl><dt></dt><dd><p>
+	When Samba connects to an ldap server that servermay be down or unreachable. To prevent Samba from hanging whilst
 	waiting for the connection this parameter specifies in seconds how long Samba should wait before failing the 
 	connect. The default is to only wait fifteen seconds for the ldap server to respond to the connect request.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>ldap timeout</code></em> = <code class="literal">15</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2568806"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id337040"></a>
 
 ldap user suffix (G)
-</h3></div></div></div><a class="indexterm" name="id2568807"></a><a name="LDAPUSERSUFFIX"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id337041"></a><a name="LDAPUSERSUFFIX"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This parameter specifies where users are added to the tree. If this parameter is unset, 
 	the value of <a class="link" href="smb.conf.5.html#LDAPSUFFIX">ldap suffix</a> will be used instead.  The suffix 
 	string is pre-pended to the  <a class="link" href="smb.conf.5.html#LDAPSUFFIX">ldap suffix</a> string so use a partial DN.
@@ -2907,10 +2651,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>ldap user suffix</code></em> = <code class="literal">ou=people</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2568888"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id337118"></a>
 
 level2 oplocks (S)
-</h3></div></div></div><a class="indexterm" name="id2568889"></a><a name="LEVEL2OPLOCKS"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls whether Samba supports
+</h3></div></div></div><a class="indexterm" name="id337119"></a><a name="LEVEL2OPLOCKS"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls whether Samba supports
 	level2 (read-only) oplocks on a share.</p><p>Level2, or read-only oplocks allow Windows NT clients 
 	that have an oplock on a file to downgrade from a read-write oplock 
 	to a read-only oplock once a second client opens the file (instead 
@@ -2930,10 +2674,10 @@
 	parameter must be set to <code class="constant">yes</code> on this share in order for 
 	this parameter to have any effect.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>level2 oplocks</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2568995"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id337214"></a>
 
 lm announce (G)
-</h3></div></div></div><a class="indexterm" name="id2568996"></a><a name="LMANNOUNCE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter determines if <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> will produce Lanman announce 
+</h3></div></div></div><a class="indexterm" name="id337215"></a><a name="LMANNOUNCE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter determines if <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> will produce Lanman announce 
 	broadcasts that are needed by OS/2 clients in order for them to see 
 	the Samba server in their browse list. This parameter can have three 
 	values, <code class="constant">yes</code>, <code class="constant">no</code>, or
@@ -2949,10 +2693,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>lm announce</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2569117"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id337329"></a>
 
 lm interval (G)
-</h3></div></div></div><a class="indexterm" name="id2569118"></a><a name="LMINTERVAL"></a><div class="variablelist"><dl><dt></dt><dd><p>If Samba is set to produce Lanman announce 
+</h3></div></div></div><a class="indexterm" name="id337330"></a><a name="LMINTERVAL"></a><div class="variablelist"><dl><dt></dt><dd><p>If Samba is set to produce Lanman announce 
 	broadcasts needed by OS/2 clients (see the 
 		<a class="link" href="smb.conf.5.html#LMANNOUNCE">lm announce</a> parameter) then this 
 	parameter defines the frequency in seconds with which they will be 
@@ -2962,18 +2706,18 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>lm interval</code></em> = <code class="literal">120</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2569201"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id337410"></a>
 
 load printers (G)
-</h3></div></div></div><a class="indexterm" name="id2569202"></a><a name="LOADPRINTERS"></a><div class="variablelist"><dl><dt></dt><dd><p>A boolean variable that controls whether all 
+</h3></div></div></div><a class="indexterm" name="id337411"></a><a name="LOADPRINTERS"></a><div class="variablelist"><dl><dt></dt><dd><p>A boolean variable that controls whether all 
     printers in the printcap will be loaded for browsing by default. 
     See the <a class="link" href="smb.conf.5.html#PRINTERS">printers</a> section for 
     more details.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>load printers</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2569257"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id337463"></a>
 
 local master (G)
-</h3></div></div></div><a class="indexterm" name="id2569258"></a><a name="LOCALMASTER"></a><div class="variablelist"><dl><dt></dt><dd><p>This option allows <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> to try and become a local master browser 
+</h3></div></div></div><a class="indexterm" name="id337464"></a><a name="LOCALMASTER"></a><div class="variablelist"><dl><dt></dt><dd><p>This option allows <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> to try and become a local master browser 
 	on a subnet. If set to <code class="constant">no</code> then <code class="literal">
 	nmbd</code> will not attempt to become a local master browser 
 	on a subnet and will also lose in all browsing elections. By
@@ -2983,26 +2727,20 @@
 	will <span class="emphasis"><em>participate</em></span> in elections for local master browser.</p><p>Setting this value to <code class="constant">no</code> will cause <code class="literal">nmbd</code> <span class="emphasis"><em>never</em></span> to become a local 
 master browser.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>local master</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2569358"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id337560"></a><a name="LOCKDIR"></a>lock dir</h3></div></div></div><a class="indexterm" name="id337561"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#LOCKDIRECTORY">lock directory</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id337590"></a>
 
-<a name="LOCKDIR"></a>lock dir
-</h3></div></div></div><a class="indexterm" name="id2569359"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#LOCKDIRECTORY">lock directory</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2569390"></a>
-
 lock directory (G)
-</h3></div></div></div><a class="indexterm" name="id2569391"></a><a name="LOCKDIRECTORY"></a><div class="variablelist"><dl><dt></dt><dd><p>This option specifies the directory where lock 
+</h3></div></div></div><a class="indexterm" name="id337591"></a><a name="LOCKDIRECTORY"></a><div class="variablelist"><dl><dt></dt><dd><p>This option specifies the directory where lock 
 	files will be placed.  The lock files are used to implement the 
 	<a class="link" href="smb.conf.5.html#MAXCONNECTIONS">max connections</a> option.
-	</p><p>
-		Note: This option can not be set inside registry
-		configurations.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>lock directory</code></em> = <code class="literal">${prefix}/var/locks</code>
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>lock directory</code></em> = <code class="literal">/var/run/samba/locks</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2569468"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id337660"></a>
 
 locking (S)
-</h3></div></div></div><a class="indexterm" name="id2569469"></a><a name="LOCKING"></a><div class="variablelist"><dl><dt></dt><dd><p>This controls whether or not locking will be 
+</h3></div></div></div><a class="indexterm" name="id337662"></a><a name="LOCKING"></a><div class="variablelist"><dl><dt></dt><dd><p>This controls whether or not locking will be 
 	performed by the server in response to lock requests from the 
 	client.</p><p>If <code class="literal">locking = no</code>, all lock and unlock 
 	requests will appear to succeed and all lock queries will report 
@@ -3012,18 +2750,18 @@
 	CDROM drives), although setting this parameter of <code class="constant">no</code> 
 	is not really recommended even in this case.</p><p>Be careful about disabling locking either globally or in a 
 	specific service, as lack of locking may result in data corruption. 
-	You should never need to set this parameter.</p><p><span class="emphasis"><em>No default</em></span></p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2569544"></a>
+	You should never need to set this parameter.</p><p><span class="emphasis"><em>No default</em></span></p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id337730"></a>
 
 lock spin count (G)
-</h3></div></div></div><a class="indexterm" name="id2569545"></a><a name="LOCKSPINCOUNT"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter has been made inoperative in Samba 3.0.24.
+</h3></div></div></div><a class="indexterm" name="id337731"></a><a name="LOCKSPINCOUNT"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter has been made inoperative in Samba 3.0.24.
 	The functionality it contolled is now controlled by the parameter
 	<a class="link" href="smb.conf.5.html#LOCKSPINTIME">lock spin time</a>.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>lock spin count</code></em> = <code class="literal">0</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2569600"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id337782"></a>
 
 lock spin time (G)
-</h3></div></div></div><a class="indexterm" name="id2569601"></a><a name="LOCKSPINTIME"></a><div class="variablelist"><dl><dt></dt><dd><p>The time in microseconds that smbd should 
+</h3></div></div></div><a class="indexterm" name="id337783"></a><a name="LOCKSPINTIME"></a><div class="variablelist"><dl><dt></dt><dd><p>The time in microseconds that smbd should 
 	keep waiting to see if a failed lock request can
 	be granted. This parameter has changed in default
 	value from Samba 3.0.23 from 10 to 200. The associated
@@ -3031,22 +2769,19 @@
 	no longer used in Samba 3.0.24. You should not need
 	to change the value of this parameter.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>lock spin time</code></em> = <code class="literal">200</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2569659"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id337837"></a>
 
 log file (G)
-</h3></div></div></div><a class="indexterm" name="id2569660"></a><a name="LOGFILE"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id337838"></a><a name="LOGFILE"></a><div class="variablelist"><dl><dt></dt><dd><p>
     This option allows you to override the name of the Samba log file (also known as the debug file).
     </p><p>
     This option takes the standard substitutions, allowing you to have separate log files for each user or machine.
     </p><p><span class="emphasis"><em>No default</em></span></p><p>Example: <span class="emphasis"><em><em class="parameter"><code>log file</code></em> = <code class="literal">/usr/local/samba/var/log.%m</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2569711"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id337887"></a><a name="DEBUGLEVEL"></a>debuglevel</h3></div></div></div><a class="indexterm" name="id337888"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#LOGLEVEL">log level</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id337916"></a>
 
-<a name="DEBUGLEVEL"></a>debuglevel
-</h3></div></div></div><a class="indexterm" name="id2569712"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#LOGLEVEL">log level</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2569742"></a>
-
 log level (G)
-</h3></div></div></div><a class="indexterm" name="id2569743"></a><a name="LOGLEVEL"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id337918"></a><a name="LOGLEVEL"></a><div class="variablelist"><dl><dt></dt><dd><p>
     The value of the parameter (a astring) allows the debug level (logging level) to be specified in the 
     <code class="filename">smb.conf</code> file. 
     </p><p>This parameter has been extended since the 2.2.x 
@@ -3057,10 +2792,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>log level</code></em> = <code class="literal">3 passdb:5 auth:10 winbind:2</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2569975"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id338145"></a>
 
 logon drive (G)
-</h3></div></div></div><a class="indexterm" name="id2569976"></a><a name="LOGONDRIVE"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id338146"></a><a name="LOGONDRIVE"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This parameter specifies the local path to which the home directory will be
 	connected (see <a class="link" href="smb.conf.5.html#LOGONHOME">logon home</a>) and is only used by NT
 	Workstations.
@@ -3070,10 +2805,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>logon drive</code></em> = <code class="literal">h:</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2570049"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id338218"></a>
 
 logon home (G)
-</h3></div></div></div><a class="indexterm" name="id2570050"></a><a name="LOGONHOME"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id338219"></a><a name="LOGONHOME"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This parameter specifies the home directory location when a Win95/98 or NT Workstation logs into a Samba PDC.  
 	It allows you to do
 	</p><p>
@@ -3104,10 +2839,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>logon home</code></em> = <code class="literal">\\remote_smb_server\%U</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2570214"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id338370"></a>
 
 logon path (G)
-</h3></div></div></div><a class="indexterm" name="id2570215"></a><a name="LOGONPATH"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id338371"></a><a name="LOGONPATH"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This parameter specifies the directory where roaming profiles (Desktop, NTuser.dat, etc) are 
 	stored.  Contrary to previous versions of these manual pages, it has nothing to do with Win 9X roaming
 	profiles.  To find out how to handle roaming profiles for Win 9X system, see the
@@ -3151,10 +2886,10 @@
 </pre><p>
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>logon path</code></em> = <code class="literal">\\%N\%U\profile</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2570382"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id338516"></a>
 
 logon script (G)
-</h3></div></div></div><a class="indexterm" name="id2570383"></a><a name="LOGONSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id338517"></a><a name="LOGONSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This parameter specifies the batch file (<code class="filename">.bat</code>) or NT command file
 	(<code class="filename">.cmd</code>) to be downloaded and run on a machine when a user successfully logs in.  The file
 	must contain the DOS style CR/LF line endings. Using a DOS-style editor to create the file is recommended.
@@ -3185,10 +2920,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>logon script</code></em> = <code class="literal">scripts\%U.bat</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2570552"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id338674"></a>
 
 lppause command (S)
-</h3></div></div></div><a class="indexterm" name="id2570553"></a><a name="LPPAUSECOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the command to be 
+</h3></div></div></div><a class="indexterm" name="id338675"></a><a name="LPPAUSECOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the command to be 
     executed on the server host in order to stop printing or spooling 
     a specific print job.</p><p>This command should be a program or script which takes 
     a printer name and job number to pause the print job. One way 
@@ -3212,10 +2947,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>lppause command</code></em> = <code class="literal">/usr/bin/lpalt %p-%j -p0</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2570699"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id338810"></a>
 
 lpq cache time (G)
-</h3></div></div></div><a class="indexterm" name="id2570700"></a><a name="LPQCACHETIME"></a><div class="variablelist"><dl><dt></dt><dd><p>This controls how long lpq info will be cached 
+</h3></div></div></div><a class="indexterm" name="id338811"></a><a name="LPQCACHETIME"></a><div class="variablelist"><dl><dt></dt><dd><p>This controls how long lpq info will be cached 
 	for to prevent the <code class="literal">lpq</code> command being called too 
 	often. A separate cache is kept for each variation of the <code class="literal">
 	lpq</code> command used by the system, so if you use different 
@@ -3228,10 +2963,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>lpq cache time</code></em> = <code class="literal">10</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2570819"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id338922"></a>
 
 lpq command (S)
-</h3></div></div></div><a class="indexterm" name="id2570820"></a><a name="LPQCOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the command to be 
+</h3></div></div></div><a class="indexterm" name="id338923"></a><a name="LPQCOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the command to be 
     executed on the server host in order to obtain <code class="literal">lpq
     </code>-style printer status information.</p><p>This command should be a program or script which 
     takes a printer name as its only parameter and outputs printer 
@@ -3253,10 +2988,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>lpq command</code></em> = <code class="literal">/usr/bin/lpq -P%p</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2570945"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id339038"></a>
 
 lpresume command (S)
-</h3></div></div></div><a class="indexterm" name="id2570946"></a><a name="LPRESUMECOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the command to be 
+</h3></div></div></div><a class="indexterm" name="id339039"></a><a name="LPRESUMECOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the command to be 
     executed on the server host in order to restart or continue 
     printing or spooling a specific print job.</p><p>This command should be a program or script which takes 
     a printer name and job number to resume the print job. See 
@@ -3269,10 +3004,10 @@
     parameter is <code class="constant">SYSV</code>, in which case the default is:</p><p><code class="literal">lp -i %p-%j -H resume</code></p><p>or if the value of the <em class="parameter"><code>printing</code></em> parameter 
     is <code class="constant">SOFTQ</code>, then the default is:</p><p><code class="literal">qstat -s -j%j -r</code></p><p><span class="emphasis"><em>No default</em></span></p><p>Example: <span class="emphasis"><em><em class="parameter"><code>lpresume command</code></em> = <code class="literal">/usr/bin/lpalt %p-%j -p2</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2571097"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id339181"></a>
 
 lprm command (S)
-</h3></div></div></div><a class="indexterm" name="id2571098"></a><a name="LPRMCOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the command to be 
+</h3></div></div></div><a class="indexterm" name="id339182"></a><a name="LPRMCOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the command to be 
     executed on the server host in order to delete a print job.</p><p>This command should be a program or script which takes 
     a printer name and job number, and deletes the print job.</p><p>If a <em class="parameter"><code>%p</code></em> is given then the printer name 
     is put in its place. A <em class="parameter"><code>%j</code></em> is replaced with 
@@ -3289,10 +3024,10 @@
 </pre><p>
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>lprm command</code></em> = <code class="literal"> determined by printing parameter</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2571185"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id339263"></a>
 
 machine password timeout (G)
-</h3></div></div></div><a class="indexterm" name="id2571186"></a><a name="MACHINEPASSWORDTIMEOUT"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id339264"></a><a name="MACHINEPASSWORDTIMEOUT"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	If a Samba server is a member of a Windows NT Domain (see the <a class="link" href="smb.conf.5.html#SECURITY">security = domain</a> parameter) then periodically a running smbd process will try and change
 	the MACHINE ACCOUNT PASSWORD stored in the TDB called <code class="filename">private/secrets.tdb
 	</code>.  This parameter specifies how often this password will be changed, in seconds. The default is one
@@ -3302,10 +3037,10 @@
 	and the <a class="link" href="smb.conf.5.html#SECURITY">security = domain</a> parameter.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>machine password timeout</code></em> = <code class="literal">604800</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2571272"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id339345"></a>
 
 magic output (S)
-</h3></div></div></div><a class="indexterm" name="id2571273"></a><a name="MAGICOUTPUT"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id339346"></a><a name="MAGICOUTPUT"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This parameter specifies the name of a file which will contain output created by a magic script (see the 
 	<a class="link" href="smb.conf.5.html#MAGICSCRIPT">magic script</a> parameter below).
 	</p><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p>If two clients use the same <em class="parameter"><code>magic script
@@ -3314,10 +3049,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>magic output</code></em> = <code class="literal">myfile.txt</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2571356"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id339425"></a>
 
 magic script (S)
-</h3></div></div></div><a class="indexterm" name="id2571357"></a><a name="MAGICSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the name of a file which, 
+</h3></div></div></div><a class="indexterm" name="id339426"></a><a name="MAGICSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the name of a file which, 
 	if opened, will be executed by the server when the file is closed. 
 	This allows a UNIX script to be sent to the Samba host and 
 	executed on behalf of the connected user.</p><p>Scripts executed in this way will be deleted upon 
@@ -3333,10 +3068,34 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>magic script</code></em> = <code class="literal">user.csh</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2571462"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id339523"></a>
 
+mangled map (S)
+</h3></div></div></div><a class="indexterm" name="id339524"></a><a name="MANGLEDMAP"></a><div class="variablelist"><dl><dt></dt><dd><p>
+	This is for those who want to directly map UNIX file names which cannot be represented on 
+	Windows/DOS.  The mangling of names is not always what is needed.  In particular you may have 
+	documents with file extensions that differ between DOS and UNIX. 
+	For example, under UNIX it is common to use <code class="filename">.html</code> 
+	for HTML files, whereas under Windows/DOS <code class="filename">.htm</code> 
+	is more commonly used.
+	</p><p>
+	So to map <code class="filename">html</code> to <code class="filename">htm</code> 
+	you would use:
+	</p><p>
+	<a class="link" href="smb.conf.5.html#MANGLEDMAP">mangled map = (*.html *.htm)</a>.
+	</p><p>
+	One very useful case is to remove the annoying <code class="filename">;1</code> off 
+	the ends of filenames on some CDROMs (only visible under some UNIXes). To do this use a map of 
+	(*;1 *;).
+	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>mangled map</code></em> = <code class="literal">
+# no mangled map</code>
+</em></span>
+</p><p>Example: <span class="emphasis"><em><em class="parameter"><code>mangled map</code></em> = <code class="literal">(*;1 *;)</code>
+</em></span>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id339635"></a>
+
 mangled names (S)
-</h3></div></div></div><a class="indexterm" name="id2571463"></a><a name="MANGLEDNAMES"></a><div class="variablelist"><dl><dt></dt><dd><p>This controls whether non-DOS names under UNIX 
+</h3></div></div></div><a class="indexterm" name="id339636"></a><a name="MANGLEDNAMES"></a><div class="variablelist"><dl><dt></dt><dd><p>This controls whether non-DOS names under UNIX 
 	should be mapped to DOS-compatible names ("mangled") and made visible, 
 	or whether non-DOS names should simply be ignored.</p><p>See the section on <a class="link" href="smb.conf.5.html#NAMEMANGLING">name mangling</a> for 
 	details on how to control the mangling process.</p><p>If mangling is used then the mangling algorithm is as follows:</p><div class="itemizedlist"><ul type="disc"><li><p>The first (up to) five alphanumeric characters 
@@ -3361,10 +3120,10 @@
 	from Windows/DOS and will retain the same basename. Mangled names 
 	do not change between sessions.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>mangled names</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2571598"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id339754"></a>
 
 mangle prefix (G)
-</h3></div></div></div><a class="indexterm" name="id2571599"></a><a name="MANGLEPREFIX"></a><div class="variablelist"><dl><dt></dt><dd><p> controls the number of prefix
+</h3></div></div></div><a class="indexterm" name="id339756"></a><a name="MANGLEPREFIX"></a><div class="variablelist"><dl><dt></dt><dd><p> controls the number of prefix
 	characters from the original name used when generating
 	the mangled names. A larger value will give a weaker
 	hash and therefore more name collisions. The minimum
@@ -3374,20 +3133,20 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>mangle prefix</code></em> = <code class="literal">4</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2571665"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id339818"></a>
 
 mangling char (S)
-</h3></div></div></div><a class="indexterm" name="id2571666"></a><a name="MANGLINGCHAR"></a><div class="variablelist"><dl><dt></dt><dd><p>This controls what character is used as 
+</h3></div></div></div><a class="indexterm" name="id339819"></a><a name="MANGLINGCHAR"></a><div class="variablelist"><dl><dt></dt><dd><p>This controls what character is used as 
 	the <span class="emphasis"><em>magic</em></span> character in <a class="link" href="smb.conf.5.html#NAMEMANGLING">name mangling</a>. The 
 	default is a '~' but this may interfere with some software. Use this option to set 
 	it to whatever you prefer. This is effective only when mangling method is hash.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>mangling char</code></em> = <code class="literal">~</code>
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>mangling char</code></em> = <code class="literal">^</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2571742"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id339891"></a>
 
 mangling method (G)
-</h3></div></div></div><a class="indexterm" name="id2571743"></a><a name="MANGLINGMETHOD"></a><div class="variablelist"><dl><dt></dt><dd><p> controls the algorithm used for the generating
+</h3></div></div></div><a class="indexterm" name="id339892"></a><a name="MANGLINGMETHOD"></a><div class="variablelist"><dl><dt></dt><dd><p> controls the algorithm used for the generating
 	the mangled names. Can take two different values, "hash" and
 	"hash2". "hash" is the algorithm that was used
 	used in Samba for many years and was the default in Samba 2.2.x "hash2" is
@@ -3398,10 +3157,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>mangling method</code></em> = <code class="literal">hash</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2571809"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id339952"></a>
 
 map acl inherit (S)
-</h3></div></div></div><a class="indexterm" name="id2571810"></a><a name="MAPACLINHERIT"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean parameter controls whether <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> will attempt to map the 'inherit' and 'protected'
+</h3></div></div></div><a class="indexterm" name="id339954"></a><a name="MAPACLINHERIT"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean parameter controls whether <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> will attempt to map the 'inherit' and 'protected'
     access control entry flags stored in Windows ACLs into an extended attribute
     called user.SAMBA_PAI. This parameter only takes effect if Samba is being run
     on a platform that supports extended attributes (Linux and IRIX so far) and
@@ -3409,10 +3168,10 @@
     POSIX ACL mapping code.
     </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>map acl inherit</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2571873"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id340005"></a>
 
 map archive (S)
-</h3></div></div></div><a class="indexterm" name="id2571874"></a><a name="MAPARCHIVE"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id340006"></a><a name="MAPARCHIVE"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This controls whether the DOS archive attribute 
 	should be mapped to the UNIX owner execute bit.  The DOS archive bit 
 	is set when a file has been modified since its last backup.  One 
@@ -3425,19 +3184,19 @@
 	<a class="link" href="smb.conf.5.html#CREATEMASK">create mask</a> for details.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>map archive</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2571948"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id340074"></a>
 
 map hidden (S)
-</h3></div></div></div><a class="indexterm" name="id2571949"></a><a name="MAPHIDDEN"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id340075"></a><a name="MAPHIDDEN"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This controls whether DOS style hidden files should be mapped to the UNIX world execute bit.
 	</p><p>
 	Note that this requires the <a class="link" href="smb.conf.5.html#CREATEMASK">create mask</a> to be set such that the world execute 
 	bit is not masked out (i.e. it must include 001). See the parameter <a class="link" href="smb.conf.5.html#CREATEMASK">create mask</a> 
 	for details.
-	</p><p><span class="emphasis"><em>No default</em></span></p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2572006"></a>
+	</p><p><span class="emphasis"><em>No default</em></span></p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id340128"></a>
 
 map read only (S)
-</h3></div></div></div><a class="indexterm" name="id2572007"></a><a name="MAPREADONLY"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id340129"></a><a name="MAPREADONLY"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This controls how the DOS read only attribute should be mapped from a UNIX filesystem.
 	</p><p>
 	This parameter can take three different values, which tell <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> how to display the read only attribute on files, where either
@@ -3458,10 +3217,10 @@
 		the <a class="link" href="smb.conf.5.html#STOREDOSATTRIBUTES">store dos attributes</a> method. This may be useful for exporting mounted CDs.
 		</p></li></ul></div><p>Default: <span class="emphasis"><em><em class="parameter"><code>map read only</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2572158"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id340269"></a>
 
 map system (S)
-</h3></div></div></div><a class="indexterm" name="id2572160"></a><a name="MAPSYSTEM"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id340270"></a><a name="MAPSYSTEM"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This controls whether DOS style system files should be mapped to the UNIX group execute bit.
 	</p><p>
 	Note that this requires the <a class="link" href="smb.conf.5.html#CREATEMASK">create mask</a>	to be set such that the group 
@@ -3469,10 +3228,10 @@
 	<a class="link" href="smb.conf.5.html#CREATEMASK">create mask</a> for details.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>map system</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2572228"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id340335"></a>
 
 map to guest (G)
-</h3></div></div></div><a class="indexterm" name="id2572229"></a><a name="MAPTOGUEST"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is only useful in <a class="link" href="smb.conf.5.html#SECURITY">SECURITY = 
+</h3></div></div></div><a class="indexterm" name="id340336"></a><a name="MAPTOGUEST"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is only useful in <a class="link" href="smb.conf.5.html#SECURITY">SECURITY = 
     security</a> modes other than <em class="parameter"><code>security = share</code></em> 
     and <em class="parameter"><code>security = server</code></em>
     - i.e. <code class="constant">user</code>, and <code class="constant">domain</code>.</p><p>This parameter can take four different values, which tell
@@ -3514,10 +3273,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>map to guest</code></em> = <code class="literal">Bad User</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2572467"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id340551"></a>
 
 max connections (S)
-</h3></div></div></div><a class="indexterm" name="id2572468"></a><a name="MAXCONNECTIONS"></a><div class="variablelist"><dl><dt></dt><dd><p>This option allows the number of simultaneous connections to a service to be limited.
+</h3></div></div></div><a class="indexterm" name="id340552"></a><a name="MAXCONNECTIONS"></a><div class="variablelist"><dl><dt></dt><dd><p>This option allows the number of simultaneous connections to a service to be limited.
     If <em class="parameter"><code>max connections</code></em> is greater than 0 then connections
     will be refused if this number of connections to the service are already open. A value 
     of zero mean an unlimited number of connections may be made.</p><p>Record lock files are used to implement this feature. The lock files will be stored in 
@@ -3525,10 +3284,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>max connections</code></em> = <code class="literal">10</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2572553"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id340632"></a>
 
 max disk size (G)
-</h3></div></div></div><a class="indexterm" name="id2572554"></a><a name="MAXDISKSIZE"></a><div class="variablelist"><dl><dt></dt><dd><p>This option allows you to put an upper limit 
+</h3></div></div></div><a class="indexterm" name="id340633"></a><a name="MAXDISKSIZE"></a><div class="variablelist"><dl><dt></dt><dd><p>This option allows you to put an upper limit 
     on the apparent size of disks. If you set this option to 100 
     then all shares will appear to be not larger than 100 MB in 
     size.</p><p>Note that this option does not limit the amount of 
@@ -3542,10 +3301,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>max disk size</code></em> = <code class="literal">1000</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2572645"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id340717"></a>
 
 max log size (G)
-</h3></div></div></div><a class="indexterm" name="id2572646"></a><a name="MAXLOGSIZE"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id340718"></a><a name="MAXLOGSIZE"></a><div class="variablelist"><dl><dt></dt><dd><p>
     This option (an integer in kilobytes) specifies the max size the log file should grow to. 
     Samba periodically checks the size and if it is exceeded it will rename the file, adding 
 	a <code class="filename">.old</code> extension.
@@ -3554,17 +3313,17 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>max log size</code></em> = <code class="literal">1000</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2572716"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id340785"></a>
 
 max mux (G)
-</h3></div></div></div><a class="indexterm" name="id2572717"></a><a name="MAXMUX"></a><div class="variablelist"><dl><dt></dt><dd><p>This option controls the maximum number of 
+</h3></div></div></div><a class="indexterm" name="id340786"></a><a name="MAXMUX"></a><div class="variablelist"><dl><dt></dt><dd><p>This option controls the maximum number of 
     outstanding simultaneous SMB operations that Samba tells the client 
 	it will allow. You should never need to set this parameter.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>max mux</code></em> = <code class="literal">50</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2572760"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id340827"></a>
 
 max open files (G)
-</h3></div></div></div><a class="indexterm" name="id2572761"></a><a name="MAXOPENFILES"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter limits the maximum number of 
+</h3></div></div></div><a class="indexterm" name="id340828"></a><a name="MAXOPENFILES"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter limits the maximum number of 
     open files that one <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> file 
     serving process may have open for a client at any one time. The 
     default for this parameter is set very high (10,000) as Samba uses 
@@ -3572,23 +3331,20 @@
     by the UNIX per-process file descriptor limit rather than 
     this parameter so you should never need to touch this parameter.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>max open files</code></em> = <code class="literal">10000</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2572820"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id340882"></a>
 
 max print jobs (S)
-</h3></div></div></div><a class="indexterm" name="id2572821"></a><a name="MAXPRINTJOBS"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter limits the maximum number of 
+</h3></div></div></div><a class="indexterm" name="id340884"></a><a name="MAXPRINTJOBS"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter limits the maximum number of 
     jobs allowable in a Samba printer queue at any given moment.
     If this number is exceeded, <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> will remote "Out of Space" to the client.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>max print jobs</code></em> = <code class="literal">1000</code>
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>max print jobs</code></em> = <code class="literal">5000</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2572890"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id340950"></a><a name="PROTOCOL"></a>protocol</h3></div></div></div><a class="indexterm" name="id340951"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#MAXPROTOCOL">max protocol</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id340980"></a>
 
-<a name="PROTOCOL"></a>protocol
-</h3></div></div></div><a class="indexterm" name="id2572891"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#MAXPROTOCOL">max protocol</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2572922"></a>
-
 max protocol (G)
-</h3></div></div></div><a class="indexterm" name="id2572923"></a><a name="MAXPROTOCOL"></a><div class="variablelist"><dl><dt></dt><dd><p>The value of the parameter (a string) is the highest 
+</h3></div></div></div><a class="indexterm" name="id340982"></a><a name="MAXPROTOCOL"></a><div class="variablelist"><dl><dt></dt><dd><p>The value of the parameter (a string) is the highest 
     protocol level that will be supported by the server.</p><p>Possible values are :</p><div class="itemizedlist"><ul type="disc"><li><p><code class="constant">CORE</code>: Earliest version. No 
 	    concept of user names.</p></li><li><p><code class="constant">COREPLUS</code>: Slight improvements on 
 	    CORE for efficiency.</p></li><li><p><code class="constant">LANMAN1</code>: First <span class="emphasis"><em>
@@ -3600,10 +3356,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>max protocol</code></em> = <code class="literal">LANMAN1</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2573047"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id341100"></a>
 
 max reported print jobs (S)
-</h3></div></div></div><a class="indexterm" name="id2573048"></a><a name="MAXREPORTEDPRINTJOBS"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id341101"></a><a name="MAXREPORTEDPRINTJOBS"></a><div class="variablelist"><dl><dt></dt><dd><p>
     This parameter limits the maximum number of jobs displayed in a port monitor for 
     Samba printer queue at any given moment. If this number is exceeded, the excess 
     jobs will not be shown. A value of zero means there is no limit on the number of 
@@ -3612,10 +3368,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>max reported print jobs</code></em> = <code class="literal">1000</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2573111"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id341159"></a>
 
 max smbd processes (G)
-</h3></div></div></div><a class="indexterm" name="id2573112"></a><a name="MAXSMBDPROCESSES"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter limits the maximum number of <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> processes concurrently running on a system and is intended
+</h3></div></div></div><a class="indexterm" name="id341160"></a><a name="MAXSMBDPROCESSES"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter limits the maximum number of <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> processes concurrently running on a system and is intended
     as a stopgap to prevent degrading service to clients in the event that the server has insufficient
     resources to handle more than this number of connections.  Remember that under normal operating
     conditions, each user will have an <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> associated with him or her to handle connections to all
@@ -3623,10 +3379,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>max smbd processes</code></em> = <code class="literal">1000</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2573192"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id341236"></a>
 
 max stat cache size (G)
-</h3></div></div></div><a class="indexterm" name="id2573193"></a><a name="MAXSTATCACHESIZE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter limits the size in memory of any 
+</h3></div></div></div><a class="indexterm" name="id341237"></a><a name="MAXSTATCACHESIZE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter limits the size in memory of any 
 	  <em class="parameter"><code>stat cache</code></em> being used
 	  to speed up case insensitive name mappings. It represents
 	  the number of kilobyte (1024) units the stat cache can use.
@@ -3637,27 +3393,27 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>max stat cache size</code></em> = <code class="literal">100</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2573262"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id341302"></a>
 
 max ttl (G)
-</h3></div></div></div><a class="indexterm" name="id2573263"></a><a name="MAXTTL"></a><div class="variablelist"><dl><dt></dt><dd><p>This option tells <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> what the default 'time to live' 
+</h3></div></div></div><a class="indexterm" name="id341303"></a><a name="MAXTTL"></a><div class="variablelist"><dl><dt></dt><dd><p>This option tells <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> what the default 'time to live' 
     of NetBIOS names should be (in seconds) when <code class="literal">nmbd</code> is 
     requesting a name using either a broadcast packet or from a WINS server. You should 
 	never need to change this parameter. The default is 3 days.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>max ttl</code></em> = <code class="literal">259200</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2573321"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id341358"></a>
 
 max wins ttl (G)
-</h3></div></div></div><a class="indexterm" name="id2573322"></a><a name="MAXWINSTTL"></a><div class="variablelist"><dl><dt></dt><dd><p>This option tells <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> when acting as a WINS server
+</h3></div></div></div><a class="indexterm" name="id341359"></a><a name="MAXWINSTTL"></a><div class="variablelist"><dl><dt></dt><dd><p>This option tells <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> when acting as a WINS server
 	(<a class="link" href="smb.conf.5.html#WINSSUPPORT">wins support = yes</a>) what the maximum
     'time to live' of NetBIOS names that <code class="literal">nmbd</code> 
     will grant will be (in seconds). You should never need to change this
 	parameter.  The default is 6 days (518400 seconds).</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>max wins ttl</code></em> = <code class="literal">518400</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2573392"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id341426"></a>
 
 max xmit (G)
-</h3></div></div></div><a class="indexterm" name="id2573393"></a><a name="MAXXMIT"></a><div class="variablelist"><dl><dt></dt><dd><p>This option controls the maximum packet size 
+</h3></div></div></div><a class="indexterm" name="id341427"></a><a name="MAXXMIT"></a><div class="variablelist"><dl><dt></dt><dd><p>This option controls the maximum packet size 
     that will be negotiated by Samba. The default is 16644, which 
     matches the behavior of Windows 2000.  A value below 2048 is likely to cause problems.
     You should never need to change this parameter from its default value.
@@ -3665,10 +3421,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>max xmit</code></em> = <code class="literal">8192</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2573454"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id341486"></a>
 
 message command (G)
-</h3></div></div></div><a class="indexterm" name="id2573456"></a><a name="MESSAGECOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>This specifies what command to run when the 
+</h3></div></div></div><a class="indexterm" name="id341487"></a><a name="MESSAGECOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>This specifies what command to run when the 
 	server receives a WinPopup style message.</p><p>This would normally be a command that would 
 	deliver the message somehow. How this is to be done is 
 	up to your imagination.</p><p>An example is:
@@ -3707,20 +3463,20 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>message command</code></em> = <code class="literal">csh -c 'xedit %s; rm %s' &amp;</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2573664"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id341678"></a>
 
 min print space (S)
-</h3></div></div></div><a class="indexterm" name="id2573666"></a><a name="MINPRINTSPACE"></a><div class="variablelist"><dl><dt></dt><dd><p>This sets the minimum amount of free disk 
+</h3></div></div></div><a class="indexterm" name="id341679"></a><a name="MINPRINTSPACE"></a><div class="variablelist"><dl><dt></dt><dd><p>This sets the minimum amount of free disk 
     space that must be available before a user will be able to spool 
     a print job. It is specified in kilobytes. The default is 0, which 
     means a user can always spool a print job.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>min print space</code></em> = <code class="literal">0</code>
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>min print space</code></em> = <code class="literal">2000</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2573726"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id341738"></a>
 
 min protocol (G)
-</h3></div></div></div><a class="indexterm" name="id2573728"></a><a name="MINPROTOCOL"></a><div class="variablelist"><dl><dt></dt><dd><p>The value of the parameter (a string) is the 
+</h3></div></div></div><a class="indexterm" name="id341739"></a><a name="MINPROTOCOL"></a><div class="variablelist"><dl><dt></dt><dd><p>The value of the parameter (a string) is the 
     lowest SMB protocol dialect than Samba will support.  Please refer
     to the <a class="link" href="smb.conf.5.html#MAXPROTOCOL">max protocol</a>
     parameter for a list of valid protocol names and a brief description
@@ -3732,31 +3488,19 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>min protocol</code></em> = <code class="literal">NT1</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2573825"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id341830"></a>
 
-min receivefile size (G)
-</h3></div></div></div><a class="indexterm" name="id2573826"></a><a name="MINRECEIVEFILESIZE"></a><div class="variablelist"><dl><dt></dt><dd><p>This option changes the behavior of <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> when processing SMBwriteX calls. Any incoming
-SMBwriteX call on a non-signed SMB/CIFS connection greater than this value will not be processed in the normal way but will
-be passed to any underlying kernel recvfile or splice system call (if there is no such
-call Samba will emulate in user space). This allows zero-copy writes directly from network
-socket buffers into the filesystem buffer cache, if available. It may improve performance
-but user testing is recommended. If set to zero Samba processes SMBwriteX calls in the
-normal way. To enable POSIX large write support (SMB/CIFS writes up to 16Mb) this option must be
-nonzero. The maximum value is 128k. Values greater than 128k will be silently set to 128k.</p><p>Note this option will have NO EFFECT if set on a SMB signed connection.</p><p>The default is zero, which diables this option.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>min receivefile size</code></em> = <code class="literal">0</code>
-</em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2573906"></a>
-
 min wins ttl (G)
-</h3></div></div></div><a class="indexterm" name="id2573907"></a><a name="MINWINSTTL"></a><div class="variablelist"><dl><dt></dt><dd><p>This option tells <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a>
+</h3></div></div></div><a class="indexterm" name="id341831"></a><a name="MINWINSTTL"></a><div class="variablelist"><dl><dt></dt><dd><p>This option tells <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a>
     when acting as a WINS server (<a class="link" href="smb.conf.5.html#WINSSUPPORT">wins support = yes</a>) what the minimum 'time to live' 
     of NetBIOS names that <code class="literal">nmbd</code> will grant will be (in 
     seconds). You should never need to change this parameter.  The default 
     is 6 hours (21600 seconds).</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>min wins ttl</code></em> = <code class="literal">21600</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2573976"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id341896"></a>
 
 msdfs proxy (S)
-</h3></div></div></div><a class="indexterm" name="id2573977"></a><a name="MSDFSPROXY"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter indicates that the share is a
+</h3></div></div></div><a class="indexterm" name="id341897"></a><a name="MSDFSPROXY"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter indicates that the share is a
 	stand-in for another CIFS share whose location is specified by
 	the value of the parameter. When clients attempt to connect to
 	this share, they are redirected to the proxied share using
@@ -3764,10 +3508,10 @@
 	<a class="link" href="smb.conf.5.html#MSDFSROOT">msdfs root</a> and <a class="link" href="smb.conf.5.html#HOSTMSDFS">host msdfs</a>
 	options to find out how to set up a Dfs root share.</p><p><span class="emphasis"><em>No default</em></span></p><p>Example: <span class="emphasis"><em><em class="parameter"><code>msdfs proxy</code></em> = <code class="literal">\otherserver\someshare</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2574054"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id341969"></a>
 
 msdfs root (S)
-</h3></div></div></div><a class="indexterm" name="id2574056"></a><a name="MSDFSROOT"></a><div class="variablelist"><dl><dt></dt><dd><p>If set to <code class="constant">yes</code>, Samba treats the
+</h3></div></div></div><a class="indexterm" name="id341970"></a><a name="MSDFSROOT"></a><div class="variablelist"><dl><dt></dt><dd><p>If set to <code class="constant">yes</code>, Samba treats the
 	share as a Dfs root and allows clients to browse the
 	distributed file system tree rooted at the share directory.
 	Dfs links are specified in the share directory by symbolic
@@ -3775,20 +3519,20 @@
 	and so on.  For more information on setting up a Dfs tree on
 	Samba, refer to the MSDFS chapter in the Samba3-HOWTO book.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>msdfs root</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2574110"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id342022"></a>
 
 name cache timeout (G)
-</h3></div></div></div><a class="indexterm" name="id2574111"></a><a name="NAMECACHETIMEOUT"></a><div class="variablelist"><dl><dt></dt><dd><p>Specifies the number of seconds it takes before 
+</h3></div></div></div><a class="indexterm" name="id342023"></a><a name="NAMECACHETIMEOUT"></a><div class="variablelist"><dl><dt></dt><dd><p>Specifies the number of seconds it takes before 
     entries in samba's hostname resolve cache time out. If 
     the timeout is set to 0. the caching is disabled.
 </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>name cache timeout</code></em> = <code class="literal">660</code>
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>name cache timeout</code></em> = <code class="literal">0</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2574171"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id342080"></a>
 
 name resolve order (G)
-</h3></div></div></div><a class="indexterm" name="id2574172"></a><a name="NAMERESOLVEORDER"></a><div class="variablelist"><dl><dt></dt><dd><p>This option is used by the programs in the Samba 
+</h3></div></div></div><a class="indexterm" name="id342081"></a><a name="NAMERESOLVEORDER"></a><div class="variablelist"><dl><dt></dt><dd><p>This option is used by the programs in the Samba 
     suite to determine what naming services to use and in what order 
     to resolve host names to IP addresses. Its main purpose to is to
     control how netbios name resolution is performed.  The option takes a space 
@@ -3819,10 +3563,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>name resolve order</code></em> = <code class="literal">lmhosts bcast host</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2574372"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id342261"></a>
 
 netbios aliases (G)
-</h3></div></div></div><a class="indexterm" name="id2574373"></a><a name="NETBIOSALIASES"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a list of NetBIOS names that nmbd will 
+</h3></div></div></div><a class="indexterm" name="id342262"></a><a name="NETBIOSALIASES"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a list of NetBIOS names that nmbd will 
         advertise as additional names by which the Samba server is known. This allows one machine 
 	to appear in browse lists under multiple names. If a machine is acting as a browse server 
         or logon server none of these names will be advertised as either browse server or logon 
@@ -3832,10 +3576,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>netbios aliases</code></em> = <code class="literal">TEST TEST1 TEST2</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2574438"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id342322"></a>
 
 netbios name (G)
-</h3></div></div></div><a class="indexterm" name="id2574439"></a><a name="NETBIOSNAME"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id342323"></a><a name="NETBIOSNAME"></a><div class="variablelist"><dl><dt></dt><dd><p>
 		This sets the NetBIOS name by which a Samba server is known. By default it is the same as the first component
 		of the host's DNS name. If a machine is a browse server or logon server this name (or the first component of
 		the hosts DNS name) will be the name that these services are advertised under.
@@ -3848,17 +3592,17 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>netbios name</code></em> = <code class="literal">MYNAME</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2574519"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id342399"></a>
 
 netbios scope (G)
-</h3></div></div></div><a class="indexterm" name="id2574520"></a><a name="NETBIOSSCOPE"></a><div class="variablelist"><dl><dt></dt><dd><p>This sets the NetBIOS scope that Samba will 
+</h3></div></div></div><a class="indexterm" name="id342400"></a><a name="NETBIOSSCOPE"></a><div class="variablelist"><dl><dt></dt><dd><p>This sets the NetBIOS scope that Samba will 
 	operate under. This should not be set unless every machine 
 	on your LAN also sets this value.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>netbios scope</code></em> = <code class="literal"></code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2574562"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id342440"></a>
 
 nis homedir (G)
-</h3></div></div></div><a class="indexterm" name="id2574563"></a><a name="NISHOMEDIR"></a><div class="variablelist"><dl><dt></dt><dd><p>Get the home share server from a NIS map. For 
+</h3></div></div></div><a class="indexterm" name="id342441"></a><a name="NISHOMEDIR"></a><div class="variablelist"><dl><dt></dt><dd><p>Get the home share server from a NIS map. For 
 	UNIX systems that use an automounter, the user's home directory 
 	will often be mounted on a workstation on demand from a remote 
 	server. </p><p>When the Samba logon server is not the actual home directory 
@@ -3877,20 +3621,20 @@
 	NIS system and the Samba server with this option must also 
 	be a logon server.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>nis homedir</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2574642"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id342511"></a>
 
 nt acl support (S)
-</h3></div></div></div><a class="indexterm" name="id2574643"></a><a name="NTACLSUPPORT"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean parameter controls whether <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> will attempt to map 
+</h3></div></div></div><a class="indexterm" name="id342512"></a><a name="NTACLSUPPORT"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean parameter controls whether <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> will attempt to map 
     UNIX permissions into Windows NT access control lists.  The UNIX
     permissions considered are the the traditional UNIX owner and
     group permissions, as well as POSIX ACLs set on any files or
     directories.  This parameter was formally a global parameter in
     releases prior to 2.2.2.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>nt acl support</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2574703"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id342562"></a>
 
 ntlm auth (G)
-</h3></div></div></div><a class="indexterm" name="id2574704"></a><a name="NTLMAUTH"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter determines whether or not <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> will attempt to
+</h3></div></div></div><a class="indexterm" name="id342563"></a><a name="NTLMAUTH"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter determines whether or not <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> will attempt to
     authenticate users using the NTLM encrypted password response.
     If disabled, either the lanman password hash or an NTLMv2 response
     will need to be sent by the client.</p><p>If this option, and <code class="literal">lanman
@@ -3898,33 +3642,33 @@
     permited.  Not all clients support NTLMv2, and most will require
 	special configuration to us it.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>ntlm auth</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2574767"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id342622"></a>
 
 nt pipe support (G)
-</h3></div></div></div><a class="indexterm" name="id2574768"></a><a name="NTPIPESUPPORT"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean parameter controls whether 
+</h3></div></div></div><a class="indexterm" name="id342623"></a><a name="NTPIPESUPPORT"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean parameter controls whether 
     <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> will allow Windows NT 
     clients to connect to the NT SMB specific <code class="constant">IPC$</code> 
     pipes. This is a developer debugging option and can be left
 	alone.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>nt pipe support</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2574823"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id342676"></a>
 
 nt status support (G)
-</h3></div></div></div><a class="indexterm" name="id2574824"></a><a name="NTSTATUSSUPPORT"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean parameter controls whether <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> will negotiate NT specific status
+</h3></div></div></div><a class="indexterm" name="id342677"></a><a name="NTSTATUSSUPPORT"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean parameter controls whether <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> will negotiate NT specific status
     support with Windows NT/2k/XP clients. This is a developer debugging option and should be left alone.
     If this option is set to <code class="constant">no</code> then Samba offers
     exactly the same DOS error codes that versions prior to Samba 2.2.3
     reported.</p><p>You should not need to ever disable this parameter.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>nt status support</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2574884"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id342734"></a>
 
 null passwords (G)
-</h3></div></div></div><a class="indexterm" name="id2574885"></a><a name="NULLPASSWORDS"></a><div class="variablelist"><dl><dt></dt><dd><p>Allow or disallow client access to accounts that have null passwords. </p><p>See also <a class="citerefentry" href="smbpasswd.5.html"><span class="citerefentry"><span class="refentrytitle">smbpasswd</span>(5)</span></a>.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>null passwords</code></em> = <code class="literal">no</code>
+</h3></div></div></div><a class="indexterm" name="id342735"></a><a name="NULLPASSWORDS"></a><div class="variablelist"><dl><dt></dt><dd><p>Allow or disallow client access to accounts that have null passwords. </p><p>See also <a class="citerefentry" href="smbpasswd.5.html"><span class="citerefentry"><span class="refentrytitle">smbpasswd</span>(5)</span></a>.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>null passwords</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2574937"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id342785"></a>
 
 obey pam restrictions (G)
-</h3></div></div></div><a class="indexterm" name="id2574938"></a><a name="OBEYPAMRESTRICTIONS"></a><div class="variablelist"><dl><dt></dt><dd><p>When Samba 3.0 is configured to enable PAM support
+</h3></div></div></div><a class="indexterm" name="id342786"></a><a name="OBEYPAMRESTRICTIONS"></a><div class="variablelist"><dl><dt></dt><dd><p>When Samba 3.0 is configured to enable PAM support
     (i.e. --with-pam), this parameter will control whether or not Samba
     should obey PAM's account and session management directives.  The 
     default behavior is to use PAM for clear text authentication only
@@ -3934,10 +3678,10 @@
     authentication mechanism needed in the presence of SMB password encryption.
 </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>obey pam restrictions</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575001"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id342841"></a>
 
 only user (S)
-</h3></div></div></div><a class="indexterm" name="id2575002"></a><a name="ONLYUSER"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a boolean option that controls whether 
+</h3></div></div></div><a class="indexterm" name="id342842"></a><a name="ONLYUSER"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a boolean option that controls whether 
     connections with usernames not in the <em class="parameter"><code>user</code></em> 
     list will be allowed. By default this option is disabled so that a 
     client can supply a username to be used by the server.  Enabling
@@ -3950,10 +3694,21 @@
     will be just the service name, which for home directories is the 
     name of the user.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>only user</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575090"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id342924"></a>
 
+open files database hash size (G)
+</h3></div></div></div><a class="indexterm" name="id342925"></a><a name="OPENFILESDATABASEHASHSIZE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter was added in Samba 3.0.23. This is an internal tuning parameter that sets
+	the hash size of the tdb used for the open file databases. The presence of this parameter
+	allows tuning of the system for very large (thousands of concurrent users) Samba setups.
+	The default setting of this parameter should be sufficient for most normal environments.
+	It is advised not to change this parameter unless advised to by a Samba Team member.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>open files database hash size</code></em> = <code class="literal">10007</code>
+</em></span>
+</p><p>Example: <span class="emphasis"><em><em class="parameter"><code>open files database hash size</code></em> = <code class="literal">1338457</code>
+</em></span>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id342986"></a>
+
 oplock break wait time (G)
-</h3></div></div></div><a class="indexterm" name="id2575091"></a><a name="OPLOCKBREAKWAITTIME"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id342988"></a><a name="OPLOCKBREAKWAITTIME"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This is a tuning parameter added due to bugs in both Windows 9x and WinNT. If Samba responds to a client too 
 	quickly when that client issues an SMB that can cause an oplock break request, then the network client can 
 	fail and not respond to the break request. This tuning parameter (which is set in milliseconds) is the amount 
@@ -3962,10 +3717,10 @@
 	DO NOT CHANGE THIS PARAMETER UNLESS YOU HAVE READ AND UNDERSTOOD THE SAMBA OPLOCK CODE.
 	</p></div><p>Default: <span class="emphasis"><em><em class="parameter"><code>oplock break wait time</code></em> = <code class="literal">0</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575145"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343035"></a>
 
 oplock contention limit (S)
-</h3></div></div></div><a class="indexterm" name="id2575146"></a><a name="OPLOCKCONTENTIONLIMIT"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id343036"></a><a name="OPLOCKCONTENTIONLIMIT"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This is a <span class="emphasis"><em>very</em></span> advanced <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> tuning option to improve the efficiency of the 
 	granting of oplocks under multiple client contention for the same file.
 	</p><p>
@@ -3977,10 +3732,10 @@
 	DO NOT CHANGE THIS PARAMETER UNLESS YOU HAVE READ AND UNDERSTOOD THE SAMBA OPLOCK CODE.
 	</p></div><p>Default: <span class="emphasis"><em><em class="parameter"><code>oplock contention limit</code></em> = <code class="literal">2</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575227"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343113"></a>
 
 oplocks (S)
-</h3></div></div></div><a class="indexterm" name="id2575228"></a><a name="OPLOCKS"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id343114"></a><a name="OPLOCKS"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This boolean option tells <code class="literal">smbd</code> whether to 
 	issue oplocks (opportunistic locks) to file open requests on this 
 	share. The oplock code can dramatically (approx. 30% or more) improve 
@@ -3999,10 +3754,10 @@
 	<a class="link" href="smb.conf.5.html#KERNELOPLOCKS">kernel oplocks</a> parameter for details.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>oplocks</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575326"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343203"></a>
 
 os2 driver map (G)
-</h3></div></div></div><a class="indexterm" name="id2575327"></a><a name="OS2DRIVERMAP"></a><div class="variablelist"><dl><dt></dt><dd><p>The parameter is used to define the absolute
+</h3></div></div></div><a class="indexterm" name="id343204"></a><a name="OS2DRIVERMAP"></a><div class="variablelist"><dl><dt></dt><dd><p>The parameter is used to define the absolute
     path to a file containing a mapping of Windows NT printer driver
     names to OS/2 printer driver names.  The format is:</p><p>&lt;nt driver name&gt; = &lt;os2 driver name&gt;.&lt;device name&gt;</p><p>For example, a valid entry using the HP LaserJet 5
     printer driver would appear as <code class="literal">HP LaserJet 5L = LASERJET.HP 
@@ -4012,10 +3767,10 @@
     details on OS/2 clients, please refer to chapter on other clients in the Samba3-HOWTO book.
     </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>os2 driver map</code></em> = <code class="literal"></code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575393"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343264"></a>
 
 os level (G)
-</h3></div></div></div><a class="indexterm" name="id2575394"></a><a name="OSLEVEL"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id343265"></a><a name="OSLEVEL"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This integer value controls what level Samba advertises itself as for browse elections. The value of this
 	parameter determines whether <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> has a chance of becoming a local master browser for the <a class="link" href="smb.conf.5.html#WORKGROUP">workgroup</a> in the local broadcast area.
 </p><p><span class="emphasis"><em>
@@ -4030,10 +3785,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>os level</code></em> = <code class="literal">65</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575492"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343355"></a>
 
 pam password change (G)
-</h3></div></div></div><a class="indexterm" name="id2575493"></a><a name="PAMPASSWORDCHANGE"></a><div class="variablelist"><dl><dt></dt><dd><p>With the addition of better PAM support in Samba 2.2, 
+</h3></div></div></div><a class="indexterm" name="id343356"></a><a name="PAMPASSWORDCHANGE"></a><div class="variablelist"><dl><dt></dt><dd><p>With the addition of better PAM support in Samba 2.2, 
     this parameter, it is possible to use PAM's password change control 
     flag for Samba.  If enabled, then PAM will be used for password
     changes when requested by an SMB client instead of the program listed in 
@@ -4041,20 +3796,20 @@
     It should be possible to enable this without changing your 
     <a class="link" href="smb.conf.5.html#PASSWDCHAT">passwd chat</a> parameter for most setups.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>pam password change</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575564"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343424"></a>
 
 panic action (G)
-</h3></div></div></div><a class="indexterm" name="id2575565"></a><a name="PANICACTION"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a Samba developer option that allows a 
+</h3></div></div></div><a class="indexterm" name="id343425"></a><a name="PANICACTION"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a Samba developer option that allows a 
 	system command to be called when either <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> or <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a>	crashes. This is usually used to 
 	draw attention to the fact that a problem occurred.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>panic action</code></em> = <code class="literal"></code>
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>panic action</code></em> = <code class="literal">"/bin/sleep 90000"</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575640"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343498"></a>
 
 paranoid server security (G)
-</h3></div></div></div><a class="indexterm" name="id2575641"></a><a name="PARANOIDSERVERSECURITY"></a><div class="variablelist"><dl><dt></dt><dd><p>Some version of NT 4.x allow non-guest 
+</h3></div></div></div><a class="indexterm" name="id343499"></a><a name="PARANOIDSERVERSECURITY"></a><div class="variablelist"><dl><dt></dt><dd><p>Some version of NT 4.x allow non-guest 
     users with a bad passowrd. When this option is enabled, samba will not 
     use a broken NT 4.x server as password server, but instead complain
     to the logs and exit.  
@@ -4062,10 +3817,10 @@
     this check, which involves deliberatly attempting a
     bad logon to the remote server.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>paranoid server security</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575691"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343545"></a>
 
 passdb backend (G)
-</h3></div></div></div><a class="indexterm" name="id2575692"></a><a name="PASSDBBACKEND"></a><div class="variablelist"><dl><dt></dt><dd><p>This option allows the administrator to chose which backend
+</h3></div></div></div><a class="indexterm" name="id343546"></a><a name="PASSDBBACKEND"></a><div class="variablelist"><dl><dt></dt><dd><p>This option allows the administrator to chose which backend
     will be used for storing user and possibly group information.  This allows 
     you to swap between different storage mechanisms without recompile. </p><p>The parameter value is divided into two parts, the backend's name, and a 'location'
     string that has meaning only to that particular backed.  These are separated
@@ -4098,19 +3853,19 @@
 passdb backend = ldapsam:"ldap://ldap-1.example.com ldap-2.example.com"
 </pre><p>Default: <span class="emphasis"><em><em class="parameter"><code>passdb backend</code></em> = <code class="literal">smbpasswd</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575846"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343687"></a>
 
 passdb expand explicit (G)
-</h3></div></div></div><a class="indexterm" name="id2575848"></a><a name="PASSDBEXPANDEXPLICIT"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id343688"></a><a name="PASSDBEXPANDEXPLICIT"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This parameter controls whether Samba substitutes %-macros in the passdb fields if they are explicitly set. We
 	used to expand macros here, but this turned out to be a bug because the Windows client can expand a variable
 	%G_osver% in which %G would have been substituted by the user's primary group.
     </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>passdb expand explicit</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575893"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343730"></a>
 
 passwd chat debug (G)
-</h3></div></div></div><a class="indexterm" name="id2575894"></a><a name="PASSWDCHATDEBUG"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean specifies if the passwd chat script 
+</h3></div></div></div><a class="indexterm" name="id343731"></a><a name="PASSWDCHATDEBUG"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean specifies if the passwd chat script 
     parameter is run in <span class="emphasis"><em>debug</em></span> mode. In this mode the 
     strings passed to and received from the passwd chat are printed 
     in the <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> log with a 
@@ -4123,18 +3878,18 @@
     <a class="link" href="smb.conf.5.html#PAMPASSWORDCHANGE">pam password change</a>
 	parameter is set. This parameter is off by default.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>passwd chat debug</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2575996"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343826"></a>
 
 passwd chat timeout (G)
-</h3></div></div></div><a class="indexterm" name="id2575997"></a><a name="PASSWDCHATTIMEOUT"></a><div class="variablelist"><dl><dt></dt><dd><p>This integer specifies the number of seconds smbd will wait for an initial
+</h3></div></div></div><a class="indexterm" name="id343827"></a><a name="PASSWDCHATTIMEOUT"></a><div class="variablelist"><dl><dt></dt><dd><p>This integer specifies the number of seconds smbd will wait for an initial
     answer from a passwd chat script being run. Once the initial answer is received
     the subsequent answers must be received in one tenth of this time. The default it
     two seconds.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>passwd chat timeout</code></em> = <code class="literal">2</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2576041"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id343869"></a>
 
 passwd chat (G)
-</h3></div></div></div><a class="indexterm" name="id2576042"></a><a name="PASSWDCHAT"></a><div class="variablelist"><dl><dt></dt><dd><p>This string controls the <span class="emphasis"><em>"chat"</em></span> 
+</h3></div></div></div><a class="indexterm" name="id343870"></a><a name="PASSWDCHAT"></a><div class="variablelist"><dl><dt></dt><dd><p>This string controls the <span class="emphasis"><em>"chat"</em></span> 
     conversation that takes places between <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> and the local password changing
     program to change the user's password. The string describes a 
     sequence of response-receive pairs that <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> uses to determine what to send to the 
@@ -4165,10 +3920,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>passwd chat</code></em> = <code class="literal">"*Enter NEW password*" %n\n "*Reenter NEW password*" %n\n "*Password changed*"</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2576246"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id344052"></a>
 
 passwd program (G)
-</h3></div></div></div><a class="indexterm" name="id2576247"></a><a name="PASSWDPROGRAM"></a><div class="variablelist"><dl><dt></dt><dd><p>The name of a program that can be used to set 
+</h3></div></div></div><a class="indexterm" name="id344053"></a><a name="PASSWDPROGRAM"></a><div class="variablelist"><dl><dt></dt><dd><p>The name of a program that can be used to set 
     UNIX user passwords.  Any occurrences of <em class="parameter"><code>%u</code></em> 
     will be replaced with the user name. The user name is checked for 
     existence before calling the password changing program.</p><p>Also note that many passwd programs insist in <span class="emphasis"><em>reasonable
@@ -4189,10 +3944,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>passwd program</code></em> = <code class="literal">/bin/passwd %u</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2576381"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id344178"></a>
 
 password level (G)
-</h3></div></div></div><a class="indexterm" name="id2576382"></a><a name="PASSWORDLEVEL"></a><div class="variablelist"><dl><dt></dt><dd><p>Some client/server combinations have difficulty 
+</h3></div></div></div><a class="indexterm" name="id344179"></a><a name="PASSWORDLEVEL"></a><div class="variablelist"><dl><dt></dt><dd><p>Some client/server combinations have difficulty 
     with mixed-case passwords.  One offending client is Windows for 
     Workgroups, which for some reason forces passwords to upper 
     case when using the LANMAN1 protocol, but leaves them alone when 
@@ -4214,10 +3969,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>password level</code></em> = <code class="literal">4</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2576518"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id344300"></a>
 
 password server (G)
-</h3></div></div></div><a class="indexterm" name="id2576519"></a><a name="PASSWORDSERVER"></a><div class="variablelist"><dl><dt></dt><dd><p>By specifying the name of another SMB server 
+</h3></div></div></div><a class="indexterm" name="id344301"></a><a name="PASSWORDSERVER"></a><div class="variablelist"><dl><dt></dt><dd><p>By specifying the name of another SMB server 
     or Active Directory domain controller with this option, 
     and using <code class="literal">security = [ads|domain|server]</code> 
     it is possible to get Samba to 
@@ -4279,13 +4034,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>password server</code></em> = <code class="literal">*</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2576831"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id344580"></a><a name="DIRECTORY"></a>directory</h3></div></div></div><a class="indexterm" name="id344581"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#PATH">path</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id344610"></a>
 
-<a name="DIRECTORY"></a>directory
-</h3></div></div></div><a class="indexterm" name="id2576832"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#PATH">path</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2576863"></a>
-
 path (S)
-</h3></div></div></div><a class="indexterm" name="id2576864"></a><a name="PATH"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies a directory to which 
+</h3></div></div></div><a class="indexterm" name="id344611"></a><a name="PATH"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies a directory to which 
 	the user of the service is to be given access. In the case of 
 	printable services, this is where print data will spool prior to 
 	being submitted to the host for printing.</p><p>For a printable service offering guest access, the service 
@@ -4302,19 +4054,19 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>path</code></em> = <code class="literal">/home/fred</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2576966"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id344706"></a>
 
 pid directory (G)
-</h3></div></div></div><a class="indexterm" name="id2576968"></a><a name="PIDDIRECTORY"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id344707"></a><a name="PIDDIRECTORY"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This option specifies the directory where pid files will be placed.  
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>pid directory</code></em> = <code class="literal">${prefix}/var/locks</code>
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>pid directory</code></em> = <code class="literal">pid directory = /var/run/</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577026"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id344764"></a>
 
 posix locking (S)
-</h3></div></div></div><a class="indexterm" name="id2577027"></a><a name="POSIXLOCKING"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id344765"></a><a name="POSIXLOCKING"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	The <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a>
 	daemon maintains an database of file locks obtained by SMB clients. The default behavior is 
 	to map this internal database to POSIX locks. This means that file locks obtained by SMB clients are 
@@ -4322,10 +4074,10 @@
 	method (e.g. NFS or local file access). You should never need to disable this parameter.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>posix locking</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577082"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id344819"></a>
 
 postexec (S)
-</h3></div></div></div><a class="indexterm" name="id2577083"></a><a name="POSTEXEC"></a><div class="variablelist"><dl><dt></dt><dd><p>This option specifies a command to be run 
+</h3></div></div></div><a class="indexterm" name="id344820"></a><a name="POSTEXEC"></a><div class="variablelist"><dl><dt></dt><dd><p>This option specifies a command to be run 
 	whenever the service is disconnected. It takes the usual 
 	substitutions. The command may be run as the root on some 
 	systems.</p><p>An interesting example may be to unmount server 
@@ -4333,21 +4085,18 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>postexec</code></em> = <code class="literal">echo \"%u disconnected from %S from %m (%I)\" &gt;&gt; /tmp/log</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577154"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id344888"></a>
 
 preexec close (S)
-</h3></div></div></div><a class="indexterm" name="id2577156"></a><a name="PREEXECCLOSE"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id344889"></a><a name="PREEXECCLOSE"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This boolean option controls whether a non-zero return code from <a class="link" href="smb.conf.5.html#PREEXEC">preexec</a> 
 	should close the service being connected to.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>preexec close</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577209"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id344940"></a><a name="EXEC"></a>exec</h3></div></div></div><a class="indexterm" name="id344941"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#PREEXEC">preexec</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id344970"></a>
 
-<a name="EXEC"></a>exec
-</h3></div></div></div><a class="indexterm" name="id2577210"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#PREEXEC">preexec</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577240"></a>
-
 preexec (S)
-</h3></div></div></div><a class="indexterm" name="id2577241"></a><a name="PREEXEC"></a><div class="variablelist"><dl><dt></dt><dd><p>This option specifies a command to be run whenever 
+</h3></div></div></div><a class="indexterm" name="id344971"></a><a name="PREEXEC"></a><div class="variablelist"><dl><dt></dt><dd><p>This option specifies a command to be run whenever 
 	the service is connected to. It takes the usual substitutions.</p><p>An interesting example is to send the users a welcome 
 	message every time they log in. Maybe a message of the day? Here 
 	is an example:</p><p>
@@ -4359,13 +4108,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>preexec</code></em> = <code class="literal">echo \"%u connected to %S from %m (%I)\" &gt;&gt; /tmp/log</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577348"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id345071"></a><a name="PREFEREDMASTER"></a>prefered master</h3></div></div></div><a class="indexterm" name="id345072"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#PREFERREDMASTER">preferred master</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id345101"></a>
 
-<a name="PREFEREDMASTER"></a>prefered master
-</h3></div></div></div><a class="indexterm" name="id2577349"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#PREFERREDMASTER">preferred master</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577381"></a>
-
 preferred master (G)
-</h3></div></div></div><a class="indexterm" name="id2577382"></a><a name="PREFERREDMASTER"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id345102"></a><a name="PREFERREDMASTER"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This boolean parameter controls if <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> is a preferred master browser  for its workgroup.
 	</p><p>
 	If this is set to <code class="constant">yes</code>, on startup, <code class="literal">nmbd</code> will force
@@ -4379,22 +4125,19 @@
 	capabilities.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>preferred master</code></em> = <code class="literal">auto</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577474"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id345188"></a>
 
 preload modules (G)
-</h3></div></div></div><a class="indexterm" name="id2577475"></a><a name="PRELOADMODULES"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a list of paths to modules that should
+</h3></div></div></div><a class="indexterm" name="id345189"></a><a name="PRELOADMODULES"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a list of paths to modules that should
 	be loaded into smbd before a client connects. This improves
 	the speed of smbd when reacting to new connections somewhat. </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>preload modules</code></em> = <code class="literal"></code>
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>preload modules</code></em> = <code class="literal">/usr/lib/samba/passdb/mysql.so</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577535"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id345245"></a><a name="AUTOSERVICES"></a>auto services</h3></div></div></div><a class="indexterm" name="id345246"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#PRELOAD">preload</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id345276"></a>
 
-<a name="AUTOSERVICES"></a>auto services
-</h3></div></div></div><a class="indexterm" name="id2577536"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#PRELOAD">preload</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577568"></a>
-
 preload (G)
-</h3></div></div></div><a class="indexterm" name="id2577569"></a><a name="PRELOAD"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a list of services that you want to be 
+</h3></div></div></div><a class="indexterm" name="id345277"></a><a name="PRELOAD"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a list of services that you want to be 
 	automatically added to the browse lists. This is most useful 
 	for homes and printers services that would otherwise not be 
 	visible.</p><p>
@@ -4405,33 +4148,30 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>preload</code></em> = <code class="literal">fred lp colorlp</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577646"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id345350"></a>
 
 preserve case (S)
-</h3></div></div></div><a class="indexterm" name="id2577647"></a><a name="PRESERVECASE"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id345351"></a><a name="PRESERVECASE"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This controls if new filenames are created with the case that the client passes, or if 
 	they are forced to be the <a class="link" href="smb.conf.5.html#DEFAULTCASE">default case</a>.
 	</p><p>
 	See the section on <a class="link" href="#NAMEMANGLINGSECT" title="NAME MANGLING">NAME MANGLING</a> for a fuller discussion.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>preserve case</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577712"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id345413"></a><a name="PRINTOK"></a>print ok</h3></div></div></div><a class="indexterm" name="id345414"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#PRINTABLE">printable</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id345443"></a>
 
-<a name="PRINTOK"></a>print ok
-</h3></div></div></div><a class="indexterm" name="id2577713"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#PRINTABLE">printable</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577742"></a>
-
 printable (S)
-</h3></div></div></div><a class="indexterm" name="id2577744"></a><a name="PRINTABLE"></a><div class="variablelist"><dl><dt></dt><dd><p>If this parameter is <code class="constant">yes</code>, then 
+</h3></div></div></div><a class="indexterm" name="id345444"></a><a name="PRINTABLE"></a><div class="variablelist"><dl><dt></dt><dd><p>If this parameter is <code class="constant">yes</code>, then 
     clients may open, write to and submit spool files on the directory 
     specified for the service. </p><p>Note that a printable service will ALWAYS allow writing 
     to the service path (user privileges permitting) via the spooling 
     of print data. The <a class="link" href="smb.conf.5.html#READONLY">read only</a> parameter controls only non-printing access to 
     the resource.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>printable</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577806"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id345503"></a>
 
 printcap cache time (G)
-</h3></div></div></div><a class="indexterm" name="id2577807"></a><a name="PRINTCAPCACHETIME"></a><div class="variablelist"><dl><dt></dt><dd><p>This option specifies the number of seconds before the printing
+</h3></div></div></div><a class="indexterm" name="id345504"></a><a name="PRINTCAPCACHETIME"></a><div class="variablelist"><dl><dt></dt><dd><p>This option specifies the number of seconds before the printing
     subsystem is again asked for the known printers.  If the value
     is greater than 60 the initial waiting time is set to 60 seconds
     to allow an earlier first rescan of the printing subsystem.
@@ -4441,13 +4181,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>printcap cache time</code></em> = <code class="literal">600</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577874"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id345567"></a><a name="PRINTCAP"></a>printcap</h3></div></div></div><a class="indexterm" name="id345568"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#PRINTCAPNAME">printcap name</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id345598"></a>
 
-<a name="PRINTCAP"></a>printcap
-</h3></div></div></div><a class="indexterm" name="id2577875"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#PRINTCAPNAME">printcap name</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2577907"></a>
-
 printcap name (S)
-</h3></div></div></div><a class="indexterm" name="id2577908"></a><a name="PRINTCAPNAME"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id345599"></a><a name="PRINTCAPNAME"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This parameter may be used to override the compiled-in default printcap name used by the server (usually
 	<code class="filename"> /etc/printcap</code>). See the discussion of the <a class="link" href="#PRINTERSSECT" title="The [printers] section">[printers]</a> section above for reasons why you might want to do this.
 	</p><p>
@@ -4482,10 +4219,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>printcap name</code></em> = <code class="literal">/etc/myprintcap</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2578091"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id345769"></a>
 
 print command (S)
-</h3></div></div></div><a class="indexterm" name="id2578092"></a><a name="PRINTCOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>After a print job has finished spooling to 
+</h3></div></div></div><a class="indexterm" name="id345770"></a><a name="PRINTCOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>After a print job has finished spooling to 
     a service, this command will be used via a <code class="literal">system()</code> 
     call to process the spool file. Typically the command specified will 
     submit the spool file to the host's printing subsystem, but there 
@@ -4527,10 +4264,10 @@
     and if SAMBA is compiled against libcups, any manually 
 	set print command will be ignored.</p><p><span class="emphasis"><em>No default</em></span></p><p>Example: <span class="emphasis"><em><em class="parameter"><code>print command</code></em> = <code class="literal">/usr/local/samba/bin/myprintscript %p %s</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2578361"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id346012"></a>
 
 printer admin (S)
-</h3></div></div></div><a class="indexterm" name="id2578362"></a><a name="PRINTERADMIN"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id346013"></a><a name="PRINTERADMIN"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This lists users who can do anything to printers
 	via the remote administration interfaces offered
 	by MS-RPC (usually using a NT workstation).
@@ -4546,13 +4283,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>printer admin</code></em> = <code class="literal">admin, @staff</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2578430"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id346076"></a><a name="PRINTER"></a>printer</h3></div></div></div><a class="indexterm" name="id346077"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#PRINTERNAME">printer name</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id346105"></a>
 
-<a name="PRINTER"></a>printer
-</h3></div></div></div><a class="indexterm" name="id2578432"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#PRINTERNAME">printer name</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2578462"></a>
-
 printer name (S)
-</h3></div></div></div><a class="indexterm" name="id2578463"></a><a name="PRINTERNAME"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id346106"></a><a name="PRINTERNAME"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This parameter specifies the name of the printer to which print jobs spooled through a printable service
 	will be sent.
 	</p><p>
@@ -4565,10 +4299,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>printer name</code></em> = <code class="literal">laserwriter</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2578549"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id346189"></a>
 
 printing (S)
-</h3></div></div></div><a class="indexterm" name="id2578550"></a><a name="PRINTING"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameters controls how printer status  information is
+</h3></div></div></div><a class="indexterm" name="id346190"></a><a name="PRINTING"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameters controls how printer status  information is
     interpreted on your system. It also affects the  default values for
     the <em class="parameter"><code>print command</code></em>,  <em class="parameter"><code>lpq command</code></em>, <em class="parameter"><code>lppause command </code></em>, <em class="parameter"><code>lpresume command</code></em>, and  <em class="parameter"><code>lprm command</code></em> if specified in the 
     [global] section.</p><p>Currently nine printing styles are supported. They are
@@ -4582,27 +4316,27 @@
     commands (e.g. print command, lpq command, etc...) after defining
     the value for the <em class="parameter"><code>printing</code></em> option since it will 
     reset the printing commands to default values.</p><p>See also the discussion in the <a class="link" href="#PRINTERSSECT" title="The [printers] section">
-    [printers]</a> section.</p><p><span class="emphasis"><em>No default</em></span></p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2578684"></a>
+    [printers]</a> section.</p><p><span class="emphasis"><em>No default</em></span></p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id346318"></a>
 
 printjob username (S)
-</h3></div></div></div><a class="indexterm" name="id2578686"></a><a name="PRINTJOBUSERNAME"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies which user information will be 
+</h3></div></div></div><a class="indexterm" name="id346319"></a><a name="PRINTJOBUSERNAME"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies which user information will be 
     passed to the printing system. Usually, the username is sent,
     but in some cases, e.g. the domain prefix is useful, too.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>printjob username</code></em> = <code class="literal">%U</code>
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>printjob username</code></em> = <code class="literal">%D\%U</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2578746"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id346376"></a>
 
 private dir (G)
-</h3></div></div></div><a class="indexterm" name="id2578747"></a><a name="PRIVATEDIR"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameters defines the directory
+</h3></div></div></div><a class="indexterm" name="id346377"></a><a name="PRIVATEDIR"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameters defines the directory
     smbd will use for storing such files as <code class="filename">smbpasswd</code>
     and <code class="filename">secrets.tdb</code>.
 </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>private dir</code></em> = <code class="literal">${prefix}/private</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2578800"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id346429"></a>
 
 profile acls (S)
-</h3></div></div></div><a class="indexterm" name="id2578801"></a><a name="PROFILEACLS"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id346430"></a><a name="PROFILEACLS"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This boolean parameter was added to fix the problems that people have been
 	having with storing user profiles on Samba shares from Windows 2000 or
 	Windows XP clients. New versions of Windows 2000 or Windows XP service
@@ -4630,10 +4364,10 @@
 	tree to the owning user.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>profile acls</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2578884"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id346489"></a>
 
 queuepause command (S)
-</h3></div></div></div><a class="indexterm" name="id2578885"></a><a name="QUEUEPAUSECOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the command to be 
+</h3></div></div></div><a class="indexterm" name="id346490"></a><a name="QUEUEPAUSECOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the command to be 
     executed on the server host in order to pause the printer queue.</p><p>This command should be a program or script which takes 
     a printer name as its only parameter and stops the printer queue, 
     such that no longer jobs are submitted to the printer.</p><p>This command is not supported by Windows for Workgroups, 
@@ -4644,10 +4378,10 @@
     path in the command as the PATH may not be available to the 
 	server.</p><p><span class="emphasis"><em>No default</em></span></p><p>Example: <span class="emphasis"><em><em class="parameter"><code>queuepause command</code></em> = <code class="literal">disable %p</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2578960"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id346559"></a>
 
 queueresume command (S)
-</h3></div></div></div><a class="indexterm" name="id2578961"></a><a name="QUEUERESUMECOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the command to be 
+</h3></div></div></div><a class="indexterm" name="id346560"></a><a name="QUEUERESUMECOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the command to be 
     executed on the server host in order to resume the printer queue. It 
     is the command to undo the behavior that is caused by the 
     previous parameter (<a class="link" href="smb.conf.5.html#QUEUEPAUSECOMMAND">queuepause command</a>).</p><p>This command should be a program or script which takes 
@@ -4662,10 +4396,19 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>queueresume command</code></em> = <code class="literal">enable %p</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579062"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id346651"></a>
 
+read bmpx (G)
+</h3></div></div></div><a class="indexterm" name="id346652"></a><a name="READBMPX"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean parameter controls whether
+    <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> will support the "Read
+    Block Multiplex" SMB. This is now rarely used and defaults to 
+    <code class="constant">no</code>. You should never need to set this 
+	parameter.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>read bmpx</code></em> = <code class="literal">no</code>
+</em></span>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id346704"></a>
+
 read list (S)
-</h3></div></div></div><a class="indexterm" name="id2579063"></a><a name="READLIST"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id346705"></a><a name="READLIST"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This is a list of users that are given read-only access to a service. If the connecting user is in this list
 	then they will not be given write access, no matter what the <a class="link" href="smb.conf.5.html#READONLY">read only</a> option is set
 	to. The list can include group names using the syntax described in the <a class="link" href="smb.conf.5.html#INVALIDUSERS">invalid users</a>
@@ -4675,19 +4418,19 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>read list</code></em> = <code class="literal">mary, @students</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579162"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id346798"></a>
 
 read only (S)
-</h3></div></div></div><a class="indexterm" name="id2579163"></a><a name="READONLY"></a><div class="variablelist"><dl><dt></dt><dd><p>An inverted synonym is <a class="link" href="smb.conf.5.html#WRITEABLE">writeable</a>.</p><p>If this parameter is <code class="constant">yes</code>, then users 
+</h3></div></div></div><a class="indexterm" name="id346799"></a><a name="READONLY"></a><div class="variablelist"><dl><dt></dt><dd><p>An inverted synonym is <a class="link" href="smb.conf.5.html#WRITEABLE">writeable</a>.</p><p>If this parameter is <code class="constant">yes</code>, then users 
     of a service may not create or modify files in the service's 
     directory.</p><p>Note that a printable service (<code class="literal">printable = yes</code>)
     will <span class="emphasis"><em>ALWAYS</em></span> allow writing to the directory 
     (user privileges permitting), but only via spooling operations.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>read only</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579238"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id346871"></a>
 
 read raw (G)
-</h3></div></div></div><a class="indexterm" name="id2579240"></a><a name="READRAW"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls whether or not the server 
+</h3></div></div></div><a class="indexterm" name="id346872"></a><a name="READRAW"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls whether or not the server 
     will support the raw read SMB requests when transferring data 
     to clients.</p><p>If enabled, raw reads allow reads of 65535 bytes in 
     one packet. This typically provides a major performance benefit.
@@ -4696,38 +4439,20 @@
 	sizes, and for these clients you may need to disable raw reads.</p><p>In general this parameter should be viewed as a system tuning 
 	tool and left severely alone.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>read raw</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579299"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id346926"></a>
 
 realm (G)
-</h3></div></div></div><a class="indexterm" name="id2579300"></a><a name="REALM"></a><div class="variablelist"><dl><dt></dt><dd><p>This option specifies the kerberos realm to use. The realm is 
+</h3></div></div></div><a class="indexterm" name="id346927"></a><a name="REALM"></a><div class="variablelist"><dl><dt></dt><dd><p>This option specifies the kerberos realm to use. The realm is 
 	used as the ADS equivalent of the NT4 <code class="literal">domain</code>. It
 	is usually set to the DNS name of the kerberos server.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>realm</code></em> = <code class="literal"></code>
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>realm</code></em> = <code class="literal">mysambabox.mycompany.com</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579364"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id346989"></a>
 
-registry shares (G)
-</h3></div></div></div><a class="indexterm" name="id2579365"></a><a name="REGISTRYSHARES"></a><div class="variablelist"><dl><dt></dt><dd><p>
-	This turns on or off support for share definitions read from
-	registry. Shares defined in <span class="emphasis"><em>smb.conf</em></span> take
-	precedence over shares with the same name defined in
-	registry. See the section on registry-based configuration
-	for details. 
-	</p><p>
-		Note that this parameter defaults to <span class="emphasis"><em>no</em></span>,
-		but it is set to <span class="emphasis"><em>yes</em></span> when
-		 <em class="parameter"><code>config backend</code></em> is set
-		to <span class="emphasis"><em>registry</em></span>.
-	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>registry shares</code></em> = <code class="literal">no</code>
-</em></span>
-</p><p>Example: <span class="emphasis"><em><em class="parameter"><code>registry shares</code></em> = <code class="literal">yes</code>
-</em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579450"></a>
-
 remote announce (G)
-</h3></div></div></div><a class="indexterm" name="id2579451"></a><a name="REMOTEANNOUNCE"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id346990"></a><a name="REMOTEANNOUNCE"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This option allows you to setup <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a>to periodically announce itself 
 	to arbitrary IP addresses with an arbitrary workgroup name.
 	</p><p>
@@ -4751,10 +4476,10 @@
 	See the chapter on Network Browsing in the Samba-HOWTO book.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>remote announce</code></em> = <code class="literal"></code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579555"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347085"></a>
 
 remote browse sync (G)
-</h3></div></div></div><a class="indexterm" name="id2579556"></a><a name="REMOTEBROWSESYNC"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id347086"></a><a name="REMOTEBROWSESYNC"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This option allows you to setup <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> to periodically request 
 	synchronization of browse lists with the master browser of a Samba 
 	server that is on a remote segment. This option will allow you to 
@@ -4786,10 +4511,10 @@
 	each network has its own WINS server.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>remote browse sync</code></em> = <code class="literal"></code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579667"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347185"></a>
 
 rename user script (G)
-</h3></div></div></div><a class="indexterm" name="id2579668"></a><a name="RENAMEUSERSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id347186"></a><a name="RENAMEUSERSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This is the full pathname to a script that will be run as root by <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> under special circumstances described below.
 	</p><p>
 	When a user with admin authority or SeAddUserPrivilege rights renames a user (e.g.: from the NT4 User Manager
@@ -4807,10 +4532,10 @@
 	needs to change for other applications using the same directory.
 	</p></div><p>Default: <span class="emphasis"><em><em class="parameter"><code>rename user script</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579757"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347264"></a>
 
 reset on zero vc (G)
-</h3></div></div></div><a class="indexterm" name="id2579758"></a><a name="RESETONZEROVC"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id347265"></a><a name="RESETONZEROVC"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This boolean option controls whether an incoming session setup
 	should kill other connections coming from the same IP. This matches
         the default Windows 2003 behaviour.
@@ -4829,10 +4554,10 @@
 
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>reset on zero vc</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579810"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347310"></a>
 
 restrict anonymous (G)
-</h3></div></div></div><a class="indexterm" name="id2579811"></a><a name="RESTRICTANONYMOUS"></a><div class="variablelist"><dl><dt></dt><dd><p>The setting of this parameter determines whether user and
+</h3></div></div></div><a class="indexterm" name="id347311"></a><a name="RESTRICTANONYMOUS"></a><div class="variablelist"><dl><dt></dt><dd><p>The setting of this parameter determines whether user and
     group list information is returned for an anonymous connection.
     and mirrors the effects of the
 </p><pre class="programlisting">
@@ -4855,16 +4580,10 @@
     by setting <a class="link" href="smb.conf.5.html#GUESTOK">guest ok = yes</a> on any share.
 	</p></div><p>Default: <span class="emphasis"><em><em class="parameter"><code>restrict anonymous</code></em> = <code class="literal">0</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579894"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347384"></a><a name="ROOT"></a>root</h3></div></div></div><a class="indexterm" name="id347385"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#ROOTDIRECTORY">root directory</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347415"></a><a name="ROOTDIR"></a>root dir</h3></div></div></div><a class="indexterm" name="id347416"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#ROOTDIRECTORY">root directory</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347444"></a>
 
-<a name="ROOT"></a>root
-</h3></div></div></div><a class="indexterm" name="id2579895"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#ROOTDIRECTORY">root directory</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579927"></a>
-
-<a name="ROOTDIR"></a>root dir
-</h3></div></div></div><a class="indexterm" name="id2579928"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#ROOTDIRECTORY">root directory</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2579959"></a>
-
 root directory (G)
-</h3></div></div></div><a class="indexterm" name="id2579960"></a><a name="ROOTDIRECTORY"></a><div class="variablelist"><dl><dt></dt><dd><p>The server will <code class="literal">chroot()</code> (i.e. 
+</h3></div></div></div><a class="indexterm" name="id347446"></a><a name="ROOTDIRECTORY"></a><div class="variablelist"><dl><dt></dt><dd><p>The server will <code class="literal">chroot()</code> (i.e. 
     Change its root directory) to this directory on startup. This is 
     not strictly necessary for secure operation. Even without it the 
     server will deny access to files not in one of the service entries. 
@@ -4887,34 +4606,34 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>root directory</code></em> = <code class="literal">/homes/smb</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2580083"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347557"></a>
 
 root postexec (S)
-</h3></div></div></div><a class="indexterm" name="id2580084"></a><a name="ROOTPOSTEXEC"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id347558"></a><a name="ROOTPOSTEXEC"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This is the same as the <em class="parameter"><code>postexec</code></em>
 	parameter except that the command is run as root. This is useful for 
 	unmounting filesystems (such as CDROMs) after a connection is closed.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>root postexec</code></em> = <code class="literal"></code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2580132"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347604"></a>
 
 root preexec close (S)
-</h3></div></div></div><a class="indexterm" name="id2580133"></a><a name="ROOTPREEXECCLOSE"></a><div class="variablelist"><dl><dt></dt><dd><p>This is the same as the <em class="parameter"><code>preexec close
+</h3></div></div></div><a class="indexterm" name="id347605"></a><a name="ROOTPREEXECCLOSE"></a><div class="variablelist"><dl><dt></dt><dd><p>This is the same as the <em class="parameter"><code>preexec close
 	</code></em> parameter except that the command is run as root.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>root preexec close</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2580180"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347652"></a>
 
 root preexec (S)
-</h3></div></div></div><a class="indexterm" name="id2580181"></a><a name="ROOTPREEXEC"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id347653"></a><a name="ROOTPREEXEC"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This is the same as the <em class="parameter"><code>preexec</code></em>
 	parameter except that the command is run as root. This is useful for 
 	mounting filesystems (such as CDROMs) when a connection is opened.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>root preexec</code></em> = <code class="literal"></code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2580228"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347698"></a>
 
 security mask (S)
-</h3></div></div></div><a class="indexterm" name="id2580229"></a><a name="SECURITYMASK"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id347699"></a><a name="SECURITYMASK"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This parameter controls what UNIX permission bits will be set when a Windows NT client is manipulating the
 	UNIX permission on a file using the native NT security dialog box.
 	</p><p>
@@ -4933,10 +4652,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>security mask</code></em> = <code class="literal">0770</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2580335"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id347793"></a>
 
 security (G)
-</h3></div></div></div><a class="indexterm" name="id2580336"></a><a name="SECURITY"></a><div class="variablelist"><dl><dt></dt><dd><p>This option affects how clients respond to 
+</h3></div></div></div><a class="indexterm" name="id347794"></a><a name="SECURITY"></a><div class="variablelist"><dl><dt></dt><dd><p>This option affects how clients respond to 
     Samba and is one of the most important settings in the <code class="filename">
     smb.conf</code> file.</p><p>The option sets the "security mode bit" in replies to 
     protocol negotiations with <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> to turn share level security on or off. Clients decide 
@@ -5060,10 +4779,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>security</code></em> = <code class="literal">DOMAIN</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2581214"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id348581"></a>
 
 server schannel (G)
-</h3></div></div></div><a class="indexterm" name="id2581215"></a><a name="SERVERSCHANNEL"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id348582"></a><a name="SERVERSCHANNEL"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This controls whether the server offers or even demands the use of the netlogon schannel.
 	<a class="link" href="smb.conf.5.html#SERVERSCHANNEL">server schannel = no</a> does not offer the schannel, <a class="link" href="smb.conf.5.html#SERVERSCHANNEL">server schannel = auto</a> offers the schannel but does not enforce it, and <a class="link" href="smb.conf.5.html#SERVERSCHANNEL">server schannel = yes</a> denies access if the client is not able to speak netlogon schannel.
 	This is only the case for Windows NT4 before SP4.
@@ -5074,10 +4793,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>server schannel</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2581329"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id348689"></a>
 
 server signing (G)
-</h3></div></div></div><a class="indexterm" name="id2581330"></a><a name="SERVERSIGNING"></a><div class="variablelist"><dl><dt></dt><dd><p>This controls whether the server offers or requires
+</h3></div></div></div><a class="indexterm" name="id348690"></a><a name="SERVERSIGNING"></a><div class="variablelist"><dl><dt></dt><dd><p>This controls whether the server offers or requires
     the client it talks to to use SMB signing. Possible values 
     are <span class="emphasis"><em>auto</em></span>, <span class="emphasis"><em>mandatory</em></span> 
     and <span class="emphasis"><em>disabled</em></span>. 
@@ -5085,10 +4804,10 @@
     When set to mandatory, SMB signing is required and if set 
 	to disabled, SMB signing is not offered either.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>server signing</code></em> = <code class="literal">Disabled</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2581391"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id348746"></a>
 
 server string (G)
-</h3></div></div></div><a class="indexterm" name="id2581392"></a><a name="SERVERSTRING"></a><div class="variablelist"><dl><dt></dt><dd><p>This controls what string will show up in the printer comment box in print 
+</h3></div></div></div><a class="indexterm" name="id348747"></a><a name="SERVERSTRING"></a><div class="variablelist"><dl><dt></dt><dd><p>This controls what string will show up in the printer comment box in print 
         manager and next to the IPC connection in <code class="literal">net view</code>. It 
         can be any string that you wish to show to your users.</p><p>It also sets what will appear in browse lists next 
 	to the machine name.</p><p>A <em class="parameter"><code>%v</code></em> will be replaced with the Samba 
@@ -5097,10 +4816,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>server string</code></em> = <code class="literal">University of GNUs Samba Server</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2581482"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id348834"></a>
 
 set directory (S)
-</h3></div></div></div><a class="indexterm" name="id2581483"></a><a name="SETDIRECTORY"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id348835"></a><a name="SETDIRECTORY"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	If <code class="literal">set directory = no</code>, then 	users of the 
 	service may not use the setdir command to change directory.
 	</p><p>
@@ -5109,10 +4828,10 @@
 	for details.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>set directory</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2581542"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id348891"></a>
 
 set primary group script (G)
-</h3></div></div></div><a class="indexterm" name="id2581543"></a><a name="SETPRIMARYGROUPSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>Thanks to the Posix subsystem in NT a Windows User has a
+</h3></div></div></div><a class="indexterm" name="id348892"></a><a name="SETPRIMARYGROUPSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>Thanks to the Posix subsystem in NT a Windows User has a
 	primary group in addition to the auxiliary groups.  This script
 	sets the primary group in the unix userdatase when an
 	administrator sets the primary group from the windows user
@@ -5124,10 +4843,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>set primary group script</code></em> = <code class="literal">/usr/sbin/usermod -g '%g' '%u'</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2581624"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id348968"></a>
 
 set quota command (G)
-</h3></div></div></div><a class="indexterm" name="id2581625"></a><a name="SETQUOTACOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>The <code class="literal">set quota command</code> should only be used 
+</h3></div></div></div><a class="indexterm" name="id348969"></a><a name="SETQUOTACOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>The <code class="literal">set quota command</code> should only be used 
 	whenever there is no operating system API available from the OS that 
 	samba can use.</p><p>This option is only available if Samba was configured with the argument <code class="literal">--with-sys-quotas</code> or 
 	on linux when <code class="literal">./configure --with-quotas</code> was used and a working quota api 
@@ -5137,10 +4856,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>set quota command</code></em> = <code class="literal">/usr/local/sbin/set_quota</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2581787"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id349122"></a>
 
 share modes (S)
-</h3></div></div></div><a class="indexterm" name="id2581788"></a><a name="SHAREMODES"></a><div class="variablelist"><dl><dt></dt><dd><p>This enables or disables the honoring of 
+</h3></div></div></div><a class="indexterm" name="id349123"></a><a name="SHAREMODES"></a><div class="variablelist"><dl><dt></dt><dd><p>This enables or disables the honoring of 
 	the <em class="parameter"><code>share modes</code></em> during a file open. These 
 	modes are used by clients to gain exclusive read or write access 
 	to a file.</p><p>These open modes are not directly supported by UNIX, so
@@ -5153,20 +4872,20 @@
 	by default.</p><p>You should <span class="emphasis"><em>NEVER</em></span> turn this parameter 
 	off as many Windows applications will break if you do so.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>share modes</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2581881"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id349210"></a>
 
 short preserve case (S)
-</h3></div></div></div><a class="indexterm" name="id2581882"></a><a name="SHORTPRESERVECASE"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id349211"></a><a name="SHORTPRESERVECASE"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This boolean parameter controls if new files which conform to 8.3 syntax, that is all in upper case and of
 	suitable length, are created upper case, or if they are forced to be the <a class="link" href="smb.conf.5.html#DEFAULTCASE">default case</a>.
 	This  option can be use with <a class="link" href="smb.conf.5.html#PRESERVECASE">preserve case = yes</a> to permit long filenames
 	to retain their case, while short names are lowered.
 	</p><p>See the section on <a class="link" href="#NAMEMANGLINGSECT" title="NAME MANGLING">NAME MANGLING</a>.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>short preserve case</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2581961"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id349284"></a>
 
 show add printer wizard (G)
-</h3></div></div></div><a class="indexterm" name="id2581962"></a><a name="SHOWADDPRINTERWIZARD"></a><div class="variablelist"><dl><dt></dt><dd><p>With the introduction of MS-RPC based printing support
+</h3></div></div></div><a class="indexterm" name="id349285"></a><a name="SHOWADDPRINTERWIZARD"></a><div class="variablelist"><dl><dt></dt><dd><p>With the introduction of MS-RPC based printing support
     for Windows NT/2000 client in Samba 2.2, a "Printers..." folder will 
     appear on Samba hosts in the share listing.  Normally this folder will 
     contain an icon for the MS Add Printer Wizard (APW).  However, it is 
@@ -5184,10 +4903,10 @@
 </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>This does not prevent the same user from having 
 		administrative privilege on an individual printer.</p></div><p>Default: <span class="emphasis"><em><em class="parameter"><code>show add printer wizard</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2582045"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id349357"></a>
 
 shutdown script (G)
-</h3></div></div></div><a class="indexterm" name="id2582046"></a><a name="SHUTDOWNSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>This a full path name to a script called by 
+</h3></div></div></div><a class="indexterm" name="id349358"></a><a name="SHUTDOWNSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>This a full path name to a script called by 
 	 <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> that should 
 	start a shutdown procedure.</p><p>If the connected user posseses the <code class="constant">SeRemoteShutdownPrivilege</code>,
 	right, this command will be run as user.</p><p>The %z %t %r %f variables are expanded as follows:</p><div class="itemizedlist"><ul type="disc"><li><p><em class="parameter"><code>%z</code></em> will be substituted with the
@@ -5212,42 +4931,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>shutdown script</code></em> = <code class="literal">/usr/local/samba/sbin/shutdown %m %t %r %f</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2582198"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id349502"></a>
 
-smb encrypt (S)
-</h3></div></div></div><a class="indexterm" name="id2582199"></a><a name="SMBENCRYPT"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a new feature introduced with Samba 3.2 and above. It is an
-    extension to the SMB/CIFS protocol negotiated as part of the UNIX extensions.
-    SMB encryption uses the GSSAPI (SSPI on Windows) ability to encrypt
-    and sign every request/response in a SMB protocol stream. When
-    enabled it provides a secure method of SMB/CIFS communication,
-    similar to an ssh protected session, but using SMB/CIFS authentication
-    to negotiate encryption and signing keys. Currently this is only
-    supported by Samba 3.2 smbclient, and hopefully soon Linux CIFSFS
-    and MacOS/X clients. Windows clients do not support this feature.
-    </p><p>This controls whether the server offers or requires
-    the client it talks to to use SMB encryption. Possible values 
-    are <span class="emphasis"><em>auto</em></span>, <span class="emphasis"><em>mandatory</em></span> 
-    and <span class="emphasis"><em>disabled</em></span>. This may be set on a per-share
-    basis, but clients may chose to encrypt the entire session, not
-    just traffic to a specific share. If this is set to mandatory
-    then all traffic to a share <span class="emphasis"><em>must</em></span> must
-    be encrypted once the connection has been made to the share.
-    The server would return "access denied" to all non-encrypted
-    requests on such a share. Selecting encrypted traffic reduces
-    throughput as smaller packet sizes must be used (no huge UNIX
-    style read/writes allowed) as well as the overhead of encrypting
-    and signing all the data.
-    </p><p>If SMB encryption is selected, Windows style SMB signing (see
-    the <a class="link" href="smb.conf.5.html#SERVERSIGNING">server signing</a> option) is no longer necessary,
-    as the GSSAPI flags use select both signing and sealing of the data.
-    </p><p>When set to auto, SMB encryption is offered, but not enforced. 
-    When set to mandatory, SMB encryption is required and if set 
-    to disabled, SMB encryption can not be negotiated.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>smb encrypt</code></em> = <code class="literal">auto</code>
-</em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2582304"></a>
-
 smb passwd file (G)
-</h3></div></div></div><a class="indexterm" name="id2582305"></a><a name="SMBPASSWDFILE"></a><div class="variablelist"><dl><dt></dt><dd><p>This option sets the path to the encrypted smbpasswd file. By
+</h3></div></div></div><a class="indexterm" name="id349503"></a><a name="SMBPASSWDFILE"></a><div class="variablelist"><dl><dt></dt><dd><p>This option sets the path to the encrypted smbpasswd file. By
     default the path to the smbpasswd file  is compiled into Samba.</p><p>
     An example of use is:
 </p><pre class="programlisting">
@@ -5255,15 +4942,15 @@
 </pre><p>
     </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>smb passwd file</code></em> = <code class="literal">${prefix}/private/smbpasswd</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2582358"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id349554"></a>
 
 smb ports (G)
-</h3></div></div></div><a class="indexterm" name="id2582359"></a><a name="SMBPORTS"></a><div class="variablelist"><dl><dt></dt><dd><p>Specifies which ports the server should listen on for SMB traffic.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>smb ports</code></em> = <code class="literal">445 139</code>
+</h3></div></div></div><a class="indexterm" name="id349555"></a><a name="SMBPORTS"></a><div class="variablelist"><dl><dt></dt><dd><p>Specifies which ports the server should listen on for SMB traffic.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>smb ports</code></em> = <code class="literal">445 139</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2582399"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id349595"></a>
 
 socket address (G)
-</h3></div></div></div><a class="indexterm" name="id2582400"></a><a name="SOCKETADDRESS"></a><div class="variablelist"><dl><dt></dt><dd><p>This option allows you to control what 
+</h3></div></div></div><a class="indexterm" name="id349596"></a><a name="SOCKETADDRESS"></a><div class="variablelist"><dl><dt></dt><dd><p>This option allows you to control what 
 	address Samba will listen for connections on. This is used to 
 	support multiple virtual interfaces on the one server, each 
 	with a different configuration.</p><p>By default Samba will accept connections on any 
@@ -5271,10 +4958,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>socket address</code></em> = <code class="literal">192.168.2.20</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2582464"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id349657"></a>
 
 socket options (G)
-</h3></div></div></div><a class="indexterm" name="id2582466"></a><a name="SOCKETOPTIONS"></a><div class="variablelist"><dl><dt></dt><dd><p>This option allows you to set socket options 
+</h3></div></div></div><a class="indexterm" name="id349658"></a><a name="SOCKETOPTIONS"></a><div class="variablelist"><dl><dt></dt><dd><p>This option allows you to set socket options 
     to be used when talking with the client.</p><p>Socket options are controls on the networking layer 
     of the operating systems which allow the connection to be 
     tuned.</p><p>This option will typically be used to tune your Samba  server
@@ -5302,17 +4989,17 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>socket options</code></em> = <code class="literal">IPTOS_LOWDELAY</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2582675"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id349850"></a>
 
 stat cache (G)
-</h3></div></div></div><a class="indexterm" name="id2582676"></a><a name="STATCACHE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter determines if <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> will use a cache in order to 
+</h3></div></div></div><a class="indexterm" name="id349851"></a><a name="STATCACHE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter determines if <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> will use a cache in order to 
 	speed up case insensitive name mappings. You should never need 
 	to change this parameter.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>stat cache</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2582726"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id349899"></a>
 
 store dos attributes (S)
-</h3></div></div></div><a class="indexterm" name="id2582727"></a><a name="STOREDOSATTRIBUTES"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id349900"></a><a name="STOREDOSATTRIBUTES"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	If this parameter is set Samba attempts to first read DOS attributes (SYSTEM, HIDDEN, ARCHIVE or
 	READ-ONLY) from a filesystem extended attribute, before mapping DOS attributes to UNIX permission bits (such
 	as occurs with <a class="link" href="smb.conf.5.html#MAPHIDDEN">map hidden</a> and <a class="link" href="smb.conf.5.html#MAPREADONLY">map readonly</a>).  When set, DOS
@@ -5324,10 +5011,10 @@
 	extended attributes to work, also extended attributes must be compiled into the Linux kernel.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>store dos attributes</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2582848"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id350009"></a>
 
 strict allocate (S)
-</h3></div></div></div><a class="indexterm" name="id2582849"></a><a name="STRICTALLOCATE"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a boolean that controls the handling of 
+</h3></div></div></div><a class="indexterm" name="id350010"></a><a name="STRICTALLOCATE"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a boolean that controls the handling of 
     disk space allocation in the server. When this is set to <code class="constant">yes</code> 
     the server will change from UNIX behaviour of not committing real
     disk storage blocks when a file is extended to the Windows behaviour
@@ -5339,10 +5026,10 @@
     out of quota messages on systems that are restricting the disk quota
     of users.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>strict allocate</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2582918"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id350073"></a>
 
 strict locking (S)
-</h3></div></div></div><a class="indexterm" name="id2582919"></a><a name="STRICTLOCKING"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id350074"></a><a name="STRICTLOCKING"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This is an enumerated type that controls the handling of file locking in the server. When this is set to <code class="constant">yes</code>,
 	the server will check every read and write access for file locks, and deny access if locks exist. This can be slow on 
 	some systems.
@@ -5358,10 +5045,10 @@
 	 <code class="literal">strict locking = no</code> is acceptable.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>strict locking</code></em> = <code class="literal">Auto</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2582997"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id350145"></a>
 
 strict sync (S)
-</h3></div></div></div><a class="indexterm" name="id2582998"></a><a name="STRICTSYNC"></a><div class="variablelist"><dl><dt></dt><dd><p>Many Windows applications (including the Windows 98 explorer
+</h3></div></div></div><a class="indexterm" name="id350146"></a><a name="STRICTSYNC"></a><div class="variablelist"><dl><dt></dt><dd><p>Many Windows applications (including the Windows 98 explorer
     shell) seem to confuse flushing buffer contents to disk with doing
     a sync to disk. Under UNIX, a sync call forces the process to be
     suspended until the kernel has ensured that all outstanding data in
@@ -5375,10 +5062,10 @@
     addition, this fixes many performance problems that people have
     reported with the new Windows98 explorer shell file copies.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>strict sync</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2583062"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id350206"></a>
 
 svcctl list (G)
-</h3></div></div></div><a class="indexterm" name="id2583063"></a><a name="SVCCTLLIST"></a><div class="variablelist"><dl><dt></dt><dd><p>This option defines a list of init scripts that smbd
+</h3></div></div></div><a class="indexterm" name="id350207"></a><a name="SVCCTLLIST"></a><div class="variablelist"><dl><dt></dt><dd><p>This option defines a list of init scripts that smbd
     will use for starting and stopping Unix services via the Win32 
     ServiceControl API.  This allows Windows administrators to 
     utilize the MS Management Console plug-ins to manage a 
@@ -5391,10 +5078,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>svcctl list</code></em> = <code class="literal">cups postfix portmap httpd</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2583147"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id350287"></a>
 
 sync always (S)
-</h3></div></div></div><a class="indexterm" name="id2583148"></a><a name="SYNCALWAYS"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a boolean parameter that controls 
+</h3></div></div></div><a class="indexterm" name="id350288"></a><a name="SYNCALWAYS"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a boolean parameter that controls 
     whether writes will always be written to stable storage before 
     the write call returns. If this is <code class="constant">no</code> then the server will be 
     guided by the client's request in each write call (clients can 
@@ -5405,19 +5092,19 @@
     <code class="constant">yes</code> in order for this parameter to have 
     any affect.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>sync always</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2583218"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id350353"></a>
 
 syslog only (G)
-</h3></div></div></div><a class="indexterm" name="id2583219"></a><a name="SYSLOGONLY"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id350354"></a><a name="SYSLOGONLY"></a><div class="variablelist"><dl><dt></dt><dd><p>
     If this parameter is set then Samba debug messages are logged into the system 
     syslog only, and not to the debug log files. There still will be some
 	logging to log.[sn]mbd even if <span class="emphasis"><em>syslog only</em></span> is enabled.
     </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>syslog only</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2583265"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id350399"></a>
 
 syslog (G)
-</h3></div></div></div><a class="indexterm" name="id2583266"></a><a name="SYSLOG"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id350400"></a><a name="SYSLOG"></a><div class="variablelist"><dl><dt></dt><dd><p>
     This parameter maps how Samba debug messages are logged onto the system syslog logging levels. 
     Samba debug level zero maps onto syslog <code class="constant">LOG_ERR</code>, debug level one maps onto 
     <code class="constant">LOG_WARNING</code>, debug level two maps onto <code class="constant">LOG_NOTICE</code>,
@@ -5428,10 +5115,10 @@
     logging to log.[sn]mbd even if <span class="emphasis"><em>syslog only</em></span> is enabled.
     </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>syslog</code></em> = <code class="literal">1</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2583336"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id350465"></a>
 
 template homedir (G)
-</h3></div></div></div><a class="indexterm" name="id2583337"></a><a name="TEMPLATEHOMEDIR"></a><div class="variablelist"><dl><dt></dt><dd><p>When filling out the user information for a Windows NT 
+</h3></div></div></div><a class="indexterm" name="id350466"></a><a name="TEMPLATEHOMEDIR"></a><div class="variablelist"><dl><dt></dt><dd><p>When filling out the user information for a Windows NT 
 	user, the <a class="citerefentry" href="winbindd.8.html"><span class="citerefentry"><span class="refentrytitle">winbindd</span>(8)</span></a> daemon  uses this
 	parameter to fill in the home directory for that user. If the
 	string <em class="parameter"><code>%D</code></em> is present it
@@ -5439,31 +5126,31 @@
 	string <em class="parameter"><code>%U</code></em> is present it
 	is substituted with the user's Windows  NT user name.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>template homedir</code></em> = <code class="literal">/home/%D/%U</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2583401"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id350528"></a>
 
 template shell (G)
-</h3></div></div></div><a class="indexterm" name="id2583402"></a><a name="TEMPLATESHELL"></a><div class="variablelist"><dl><dt></dt><dd><p>When filling out the user information for a Windows NT 
+</h3></div></div></div><a class="indexterm" name="id350529"></a><a name="TEMPLATESHELL"></a><div class="variablelist"><dl><dt></dt><dd><p>When filling out the user information for a Windows NT 
 	user, the <a class="citerefentry" href="winbindd.8.html"><span class="citerefentry"><span class="refentrytitle">winbindd</span>(8)</span></a> daemon uses this
-	parameter to fill in the login shell for that user.</p><p><span class="emphasis"><em>No default</em></span></p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2583440"></a>
+	parameter to fill in the login shell for that user.</p><p><span class="emphasis"><em>No default</em></span></p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id350564"></a>
 
 time offset (G)
-</h3></div></div></div><a class="indexterm" name="id2583441"></a><a name="TIMEOFFSET"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a setting in minutes to add 
+</h3></div></div></div><a class="indexterm" name="id350565"></a><a name="TIMEOFFSET"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a setting in minutes to add 
 	to the normal GMT to local time conversion. This is useful if 
 	you are serving a lot of PCs that have incorrect daylight 
 	saving time handling.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>time offset</code></em> = <code class="literal">0</code>
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>time offset</code></em> = <code class="literal">60</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2583500"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id350623"></a>
 
 time server (G)
-</h3></div></div></div><a class="indexterm" name="id2583501"></a><a name="TIMESERVER"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter determines if <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> advertises itself as a time server to Windows 
+</h3></div></div></div><a class="indexterm" name="id350624"></a><a name="TIMESERVER"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter determines if <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> advertises itself as a time server to Windows 
 clients.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>time server</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2583550"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id350672"></a>
 
 unix charset (G)
-</h3></div></div></div><a class="indexterm" name="id2583551"></a><a name="UNIXCHARSET"></a><div class="variablelist"><dl><dt></dt><dd><p>Specifies the charset the unix machine 
+</h3></div></div></div><a class="indexterm" name="id350674"></a><a name="UNIXCHARSET"></a><div class="variablelist"><dl><dt></dt><dd><p>Specifies the charset the unix machine 
 		Samba runs on uses. Samba needs to know this in order to be able to 
 		convert text to the charsets other SMB clients use.
 	</p><p>This is also the charset Samba will use when specifying arguments 
@@ -5472,20 +5159,20 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>unix charset</code></em> = <code class="literal">ASCII</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2583616"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id350736"></a>
 
 unix extensions (G)
-</h3></div></div></div><a class="indexterm" name="id2583617"></a><a name="UNIXEXTENSIONS"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean parameter controls whether Samba 
+</h3></div></div></div><a class="indexterm" name="id350737"></a><a name="UNIXEXTENSIONS"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean parameter controls whether Samba 
     implments the CIFS UNIX extensions, as defined by HP. 
     These extensions enable Samba to better serve UNIX CIFS clients
     by supporting features such as symbolic links, hard links, etc...
     These extensions require a similarly enabled client, and are of
     no current use to Windows clients.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>unix extensions</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2583664"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id350779"></a>
 
 unix password sync (G)
-</h3></div></div></div><a class="indexterm" name="id2583665"></a><a name="UNIXPASSWORDSYNC"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean parameter controls whether Samba 
+</h3></div></div></div><a class="indexterm" name="id350780"></a><a name="UNIXPASSWORDSYNC"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean parameter controls whether Samba 
     attempts to synchronize the UNIX password with the SMB password 
     when the encrypted SMB password in the smbpasswd file is changed. 
     If this is set to <code class="constant">yes</code> the program specified in the <em class="parameter"><code>passwd
@@ -5494,10 +5181,10 @@
     old UNIX password (as the SMB password change code has no 
 	access to the old password cleartext, only the new).</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>unix password sync</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2583725"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id350836"></a>
 
 update encrypted (G)
-</h3></div></div></div><a class="indexterm" name="id2583726"></a><a name="UPDATEENCRYPTED"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id350837"></a><a name="UPDATEENCRYPTED"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This boolean parameter allows a user logging on with a plaintext password to have their encrypted (hashed)
 	password in the smbpasswd file to be updated automatically as they log on. This option allows a site to
 	migrate from plaintext password authentication (users authenticate with plaintext password over the
@@ -5515,10 +5202,10 @@
 	passwords.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>update encrypted</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2583843"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id350941"></a>
 
 use client driver (S)
-</h3></div></div></div><a class="indexterm" name="id2583844"></a><a name="USECLIENTDRIVER"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter applies only to Windows NT/2000
+</h3></div></div></div><a class="indexterm" name="id350942"></a><a name="USECLIENTDRIVER"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter applies only to Windows NT/2000
     clients.  It has no effect on Windows 95/98/ME clients.  When 
     serving a printer to Windows NT/2000 clients without first installing
     a valid printer driver on the Samba host, the client will be required
@@ -5543,10 +5230,10 @@
     on a print share which has valid print driver installed on the Samba 
 	server.</em></span></p><p>Default: <span class="emphasis"><em><em class="parameter"><code>use client driver</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2583924"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id351010"></a>
 
 use kerberos keytab (G)
-</h3></div></div></div><a class="indexterm" name="id2583925"></a><a name="USEKERBEROSKEYTAB"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id351011"></a><a name="USEKERBEROSKEYTAB"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	Specifies whether Samba should attempt to maintain service principals in the systems
 	keytab file for <code class="constant">host/FQDN</code> and <code class="constant">cifs/FQDN</code>.
 	</p><p>
@@ -5558,10 +5245,10 @@
 </pre><p>
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>use kerberos keytab</code></em> = <code class="literal">False</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2583992"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id351074"></a>
 
 use mmap (G)
-</h3></div></div></div><a class="indexterm" name="id2583994"></a><a name="USEMMAP"></a><div class="variablelist"><dl><dt></dt><dd><p>This global parameter determines if the tdb internals of Samba can
+</h3></div></div></div><a class="indexterm" name="id351075"></a><a name="USEMMAP"></a><div class="variablelist"><dl><dt></dt><dd><p>This global parameter determines if the tdb internals of Samba can
     depend on mmap working correctly on the running system. Samba requires a coherent
     mmap/read-write system memory cache. Currently only HPUX does not have such a
     coherent cache, and so this parameter is set to <code class="constant">no</code> by
@@ -5570,10 +5257,10 @@
     the tdb internal code.
     </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>use mmap</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2584045"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id351122"></a>
 
 username level (G)
-</h3></div></div></div><a class="indexterm" name="id2584046"></a><a name="USERNAMELEVEL"></a><div class="variablelist"><dl><dt></dt><dd><p>This option helps Samba to try and 'guess' at 
+</h3></div></div></div><a class="indexterm" name="id351123"></a><a name="USERNAMELEVEL"></a><div class="variablelist"><dl><dt></dt><dd><p>This option helps Samba to try and 'guess' at 
     the real UNIX username, as many DOS clients send an all-uppercase 
     username. By default Samba tries all lowercase, followed by the 
     username with the first letter capitalized, and fails if the 
@@ -5588,10 +5275,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>username level</code></em> = <code class="literal">5</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2584126"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id351196"></a>
 
 username map script (G)
-</h3></div></div></div><a class="indexterm" name="id2584127"></a><a name="USERNAMEMAPSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>This script is a mutually exclusive alternative to the 
+</h3></div></div></div><a class="indexterm" name="id351197"></a><a name="USERNAMEMAPSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>This script is a mutually exclusive alternative to the 
 	<a class="link" href="smb.conf.5.html#USERNAMEMAP">username map</a> parameter.  This parameter 
 	specifies and external program or script that must accept a single 
 	command line option (the username transmitted in the authentication
@@ -5602,10 +5289,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>username map script</code></em> = <code class="literal">/etc/samba/scripts/mapusers.sh</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2584209"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id351267"></a>
 
 username map (G)
-</h3></div></div></div><a class="indexterm" name="id2584210"></a><a name="USERNAMEMAP"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id351268"></a><a name="USERNAMEMAP"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This option allows you to specify a file containing a mapping of usernames from the clients to the server.
 	This can be used for several purposes. The most common is to map usernames that users use on DOS or Windows
 	machines to those that the UNIX box uses. The other is to map multiple users to a single username so that they
@@ -5689,16 +5376,10 @@
     </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>username map</code></em> = <code class="literal">
 # no username map</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2584489"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id351509"></a><a name="USER"></a>user</h3></div></div></div><a class="indexterm" name="id351510"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#USERNAME">username</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id351540"></a><a name="USERS"></a>users</h3></div></div></div><a class="indexterm" name="id351541"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#USERNAME">username</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id351570"></a>
 
-<a name="USER"></a>user
-</h3></div></div></div><a class="indexterm" name="id2584490"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#USERNAME">username</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2584521"></a>
-
-<a name="USERS"></a>users
-</h3></div></div></div><a class="indexterm" name="id2584522"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#USERNAME">username</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2584552"></a>
-
 username (S)
-</h3></div></div></div><a class="indexterm" name="id2584553"></a><a name="USERNAME"></a><div class="variablelist"><dl><dt></dt><dd><p>Multiple users may be specified in a comma-delimited 
+</h3></div></div></div><a class="indexterm" name="id351571"></a><a name="USERNAME"></a><div class="variablelist"><dl><dt></dt><dd><p>Multiple users may be specified in a comma-delimited 
     list, in which case the supplied password will be tested against 
     each username in turn (left to right).</p><p>The <em class="parameter"><code>username</code></em> line is needed only when 
     the PC is unable to supply its own username. This is the case 
@@ -5736,28 +5417,28 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>username</code></em> = <code class="literal">fred, mary, jack, jane, @users, @pcgroup</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2584722"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id351716"></a>
 
 usershare allow guests (G)
-</h3></div></div></div><a class="indexterm" name="id2584724"></a><a name="USERSHAREALLOWGUESTS"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls whether user defined shares are allowed
+</h3></div></div></div><a class="indexterm" name="id351717"></a><a name="USERSHAREALLOWGUESTS"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls whether user defined shares are allowed
 	to be accessed by non-authenticated users or not. It is the equivalent
 	of allowing people who can create a share the option of setting
 	<em class="parameter"><code>guest ok = yes</code></em> in a share
 	definition. Due to the security sensitive nature of this the default
 	is set to off.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>usershare allow guests</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2584775"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id351765"></a>
 
 usershare max shares (G)
-</h3></div></div></div><a class="indexterm" name="id2584776"></a><a name="USERSHAREMAXSHARES"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the number of user defined shares
+</h3></div></div></div><a class="indexterm" name="id351766"></a><a name="USERSHAREMAXSHARES"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the number of user defined shares
 	that are allowed to be created by users belonging to the group owning the
 	usershare directory. If set to zero (the default) user defined shares are ignored.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>usershare max shares</code></em> = <code class="literal">0</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2584821"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id351807"></a>
 
 usershare owner only (G)
-</h3></div></div></div><a class="indexterm" name="id2584822"></a><a name="USERSHAREOWNERONLY"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls whether the pathname exported by
+</h3></div></div></div><a class="indexterm" name="id351808"></a><a name="USERSHAREOWNERONLY"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls whether the pathname exported by
 	a user defined shares must be owned by the user creating the
 	user defined share or not. If set to True (the default) then
 	smbd checks that the directory path being shared is owned by
@@ -5767,10 +5448,10 @@
 	regardless of who owns it.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>usershare owner only</code></em> = <code class="literal">True</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2584870"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id351851"></a>
 
 usershare path (G)
-</h3></div></div></div><a class="indexterm" name="id2584872"></a><a name="USERSHAREPATH"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the absolute path of the directory on the
+</h3></div></div></div><a class="indexterm" name="id351852"></a><a name="USERSHAREPATH"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the absolute path of the directory on the
 	filesystem used to store the user defined share definition files.
 	This directory must be owned by root, and have no access for
 	other, and be writable only by the group owner. In addition the
@@ -5791,10 +5472,10 @@
 	In this case, only members of the group "power_users" can create user defined shares.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>usershare path</code></em> = <code class="literal">NULL</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2584941"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id351915"></a>
 
 usershare prefix allow list (G)
-</h3></div></div></div><a class="indexterm" name="id2584942"></a><a name="USERSHAREPREFIXALLOWLIST"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies a list of absolute pathnames
+</h3></div></div></div><a class="indexterm" name="id351916"></a><a name="USERSHAREPREFIXALLOWLIST"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies a list of absolute pathnames
 	the root of which are allowed to be exported by user defined share definitions.
 	If the pathname exported doesn't start with one of the strings in this
 	list the user defined share will not be allowed. This allows the Samba
@@ -5809,10 +5490,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>usershare prefix allow list</code></em> = <code class="literal">/home /data /space</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2585014"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id351982"></a>
 
 usershare prefix deny list (G)
-</h3></div></div></div><a class="indexterm" name="id2585015"></a><a name="USERSHAREPREFIXDENYLIST"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies a list of absolute pathnames
+</h3></div></div></div><a class="indexterm" name="id351983"></a><a name="USERSHAREPREFIXDENYLIST"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies a list of absolute pathnames
 	the root of which are NOT allowed to be exported by user defined share definitions.
 	If the pathname exported starts with one of the strings in this
 	list the user defined share will not be allowed. Any pathname not
@@ -5828,10 +5509,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>usershare prefix deny list</code></em> = <code class="literal">/etc /dev /private</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2585089"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id352053"></a>
 
 usershare template share (G)
-</h3></div></div></div><a class="indexterm" name="id2585090"></a><a name="USERSHARETEMPLATESHARE"></a><div class="variablelist"><dl><dt></dt><dd><p>User defined shares only have limited possible parameters
+</h3></div></div></div><a class="indexterm" name="id352054"></a><a name="USERSHARETEMPLATESHARE"></a><div class="variablelist"><dl><dt></dt><dd><p>User defined shares only have limited possible parameters
 	such as path, guest ok etc. This parameter allows usershares to
 	"cloned" from an existing share. If "usershare template share"
 	is set to the name of an existing share, then all usershares
@@ -5846,10 +5527,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>usershare template share</code></em> = <code class="literal">template_share</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2585161"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id352120"></a>
 
 use sendfile (S)
-</h3></div></div></div><a class="indexterm" name="id2585162"></a><a name="USESENDFILE"></a><div class="variablelist"><dl><dt></dt><dd><p>If this parameter is <code class="constant">yes</code>, and the <code class="constant">sendfile()</code> 
+</h3></div></div></div><a class="indexterm" name="id352121"></a><a name="USESENDFILE"></a><div class="variablelist"><dl><dt></dt><dd><p>If this parameter is <code class="constant">yes</code>, and the <code class="constant">sendfile()</code> 
     system call is supported by the underlying operating system, then some SMB read calls 
     (mainly ReadAndX and ReadRaw) will use the more efficient sendfile system call for files that
     are exclusively oplocked. This may make more efficient use of the system CPU's
@@ -5858,10 +5539,10 @@
     Windows 9x (using sendfile from Linux will cause these clients to fail).
     </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>use sendfile</code></em> = <code class="literal">false</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2585219"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id352172"></a>
 
 use spnego (G)
-</h3></div></div></div><a class="indexterm" name="id2585220"></a><a name="USESPNEGO"></a><div class="variablelist"><dl><dt></dt><dd><p>This variable controls controls whether samba will try 
+</h3></div></div></div><a class="indexterm" name="id352173"></a><a name="USESPNEGO"></a><div class="variablelist"><dl><dt></dt><dd><p>This variable controls controls whether samba will try 
     to use Simple and Protected NEGOciation (as specified by rfc2478) with 
     WindowsXP and Windows2000 clients to agree upon an authentication mechanism. 
 </p><p>
@@ -5869,10 +5550,10 @@
     implementation, there is no reason this should ever be
 	disabled.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>use spnego</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2585268"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id352218"></a>
 
 utmp directory (G)
-</h3></div></div></div><a class="indexterm" name="id2585269"></a><a name="UTMPDIRECTORY"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is only available if Samba has 
+</h3></div></div></div><a class="indexterm" name="id352219"></a><a name="UTMPDIRECTORY"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is only available if Samba has 
 	been configured and compiled with the option <code class="literal">
 	--with-utmp</code>. It specifies a directory pathname that is
 	used to store the utmp or utmpx files (depending on the UNIX system) that
@@ -5884,10 +5565,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>utmp directory</code></em> = <code class="literal">/var/run/utmp</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2585346"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id352292"></a>
 
 utmp (G)
-</h3></div></div></div><a class="indexterm" name="id2585347"></a><a name="UTMP"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id352293"></a><a name="UTMP"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This boolean parameter is only available if Samba has been configured and compiled  
 	with the option <code class="literal">--with-utmp</code>. If set to 
 	 <code class="constant">yes</code> then Samba will attempt to add utmp or utmpx records 
@@ -5899,10 +5580,10 @@
 	to find this number.  This may impede performance on large installations. 
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>utmp</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2585409"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id352349"></a>
 
 valid users (S)
-</h3></div></div></div><a class="indexterm" name="id2585410"></a><a name="VALIDUSERS"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id352350"></a><a name="VALIDUSERS"></a><div class="variablelist"><dl><dt></dt><dd><p>
     This is a list of users that should be allowed to login to this service. Names starting with 
     '@', '+' and  '&amp;' are interpreted using the same rules as described in the 
     <em class="parameter"><code>invalid users</code></em> parameter.
@@ -5918,10 +5599,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>valid users</code></em> = <code class="literal">greg, @pcusers</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2585500"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id352436"></a>
 
 -valid (S)
-</h3></div></div></div><a class="indexterm" name="id2585501"></a><a name="-VALID"></a><div class="variablelist"><dl><dt></dt><dd><p> This parameter indicates whether a share is 
+</h3></div></div></div><a class="indexterm" name="id352437"></a><a name="-VALID"></a><div class="variablelist"><dl><dt></dt><dd><p> This parameter indicates whether a share is 
 	valid and thus can be used. When this parameter is set to false, 
 	the share will be in no way visible nor accessible.
 	</p><p>
@@ -5930,10 +5611,10 @@
 	Samba uses this option internally to mark shares as deleted.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>-valid</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2585549"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id352481"></a>
 
 veto files (S)
-</h3></div></div></div><a class="indexterm" name="id2585550"></a><a name="VETOFILES"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id352482"></a><a name="VETOFILES"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This is a list of files and directories that are neither visible nor accessible.  Each entry in 
 	the list must be separated by a '/', which allows spaces to be included in the entry. '*' and '?' 
 	can be used to specify multiple files or directories as in DOS wildcards.
@@ -5964,10 +5645,10 @@
 </pre><p>
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>veto files</code></em> = <code class="literal">No files or directories are vetoed.</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2585668"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id352588"></a>
 
 veto oplock files (S)
-</h3></div></div></div><a class="indexterm" name="id2585669"></a><a name="VETOOPLOCKFILES"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id352589"></a><a name="VETOOPLOCKFILES"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This parameter is only valid when the <a class="link" href="smb.conf.5.html#OPLOCKS">oplocks</a>
 	parameter is turned on for a share. It allows the Samba administrator
 	to selectively turn off the granting of oplocks on selected files that
@@ -5988,31 +5669,28 @@
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>veto oplock files</code></em> = <code class="literal">
 # No files are vetoed for oplock grants</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2585761"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id352674"></a><a name="VFSOBJECT"></a>vfs object</h3></div></div></div><a class="indexterm" name="id352675"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#VFSOBJECTS">vfs objects</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id352704"></a>
 
-<a name="VFSOBJECT"></a>vfs object
-</h3></div></div></div><a class="indexterm" name="id2585762"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#VFSOBJECTS">vfs objects</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2585793"></a>
-
 vfs objects (S)
-</h3></div></div></div><a class="indexterm" name="id2585794"></a><a name="VFSOBJECTS"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the backend names which 
+</h3></div></div></div><a class="indexterm" name="id352705"></a><a name="VFSOBJECTS"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the backend names which 
 	are used for Samba VFS I/O operations.  By default, normal 
 	disk I/O operations are used but these can be overloaded 
 	with one or more VFS objects. </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>vfs objects</code></em> = <code class="literal"></code>
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>vfs objects</code></em> = <code class="literal">extd_audit recycle</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2585853"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id352762"></a>
 
 volume (S)
-</h3></div></div></div><a class="indexterm" name="id2585854"></a><a name="VOLUME"></a><div class="variablelist"><dl><dt></dt><dd><p>This allows you to override the volume label 
+</h3></div></div></div><a class="indexterm" name="id352763"></a><a name="VOLUME"></a><div class="variablelist"><dl><dt></dt><dd><p>This allows you to override the volume label 
 	returned for a share. Useful for CDROMs with installation programs 
 	that insist on a particular volume label.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>volume</code></em> = <code class="literal">
 # the name of the share</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2585897"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id352804"></a>
 
 wide links (S)
-</h3></div></div></div><a class="indexterm" name="id2585898"></a><a name="WIDELINKS"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls whether or not links 
+</h3></div></div></div><a class="indexterm" name="id352805"></a><a name="WIDELINKS"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls whether or not links 
 	in the UNIX file system may be followed by the server. Links 
 	that point to areas within the directory tree exported by the 
 	server are always allowed; this parameter controls access only 
@@ -6020,10 +5698,10 @@
 	effect on your server performance due to the extra system calls 
 	that Samba has to  do in order to perform the link checks.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>wide links</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2585949"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id352852"></a>
 
 winbind cache time (G)
-</h3></div></div></div><a class="indexterm" name="id2585950"></a><a name="WINBINDCACHETIME"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the number of 
+</h3></div></div></div><a class="indexterm" name="id352853"></a><a name="WINBINDCACHETIME"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the number of 
 	seconds the <a class="citerefentry" href="winbindd.8.html"><span class="citerefentry"><span class="refentrytitle">winbindd</span>(8)</span></a> daemon will cache 
 	user and group information before querying a Windows NT server 
 	again.</p><p>
@@ -6031,10 +5709,10 @@
 	evaluated in real time unless the <a class="link" href="smb.conf.5.html#WINBINDOFFLINELOGON">winbind   offline logon</a> option has been enabled.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>winbind cache time</code></em> = <code class="literal">300</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2586020"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id352918"></a>
 
 winbind enum groups (G)
-</h3></div></div></div><a class="indexterm" name="id2586021"></a><a name="WINBINDENUMGROUPS"></a><div class="variablelist"><dl><dt></dt><dd><p>On large installations using <a class="citerefentry" href="winbindd.8.html"><span class="citerefentry"><span class="refentrytitle">winbindd</span>(8)</span></a> it may be necessary to suppress 
+</h3></div></div></div><a class="indexterm" name="id352919"></a><a name="WINBINDENUMGROUPS"></a><div class="variablelist"><dl><dt></dt><dd><p>On large installations using <a class="citerefentry" href="winbindd.8.html"><span class="citerefentry"><span class="refentrytitle">winbindd</span>(8)</span></a> it may be necessary to suppress 
 	the enumeration of groups through the <code class="literal">setgrent()</code>,
 	<code class="literal">getgrent()</code> and
 	<code class="literal">endgrent()</code> group of system calls.  If
@@ -6042,10 +5720,10 @@
 	<code class="constant">no</code>, calls to the <code class="literal">getgrent()</code> system
 	call will not return any data. </p><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p>Turning off group enumeration may cause some programs to behave oddly.  </p></div><p>Default: <span class="emphasis"><em><em class="parameter"><code>winbind enum groups</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2586111"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id353006"></a>
 
 winbind enum users (G)
-</h3></div></div></div><a class="indexterm" name="id2586112"></a><a name="WINBINDENUMUSERS"></a><div class="variablelist"><dl><dt></dt><dd><p>On large installations using <a class="citerefentry" href="winbindd.8.html"><span class="citerefentry"><span class="refentrytitle">winbindd</span>(8)</span></a> it may be
+</h3></div></div></div><a class="indexterm" name="id353007"></a><a name="WINBINDENUMUSERS"></a><div class="variablelist"><dl><dt></dt><dd><p>On large installations using <a class="citerefentry" href="winbindd.8.html"><span class="citerefentry"><span class="refentrytitle">winbindd</span>(8)</span></a> it may be
 	necessary to suppress the enumeration of users through the <code class="literal">setpwent()</code>,
 	 <code class="literal">getpwent()</code> and
 	 <code class="literal">endpwent()</code> group of system calls.  If
@@ -6057,25 +5735,10 @@
 	full user list when searching for matching
 	usernames. </p></div><p>Default: <span class="emphasis"><em><em class="parameter"><code>winbind enum users</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2586204"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id353095"></a>
 
-winbind expand groups (G)
-</h3></div></div></div><a class="indexterm" name="id2586206"></a><a name="WINBINDEXPANDGROUPS"></a><div class="variablelist"><dl><dt></dt><dd><p>This option controls the maximum depth that winbindd
-              will traverse when flattening nested group memberships
-	      of Windows domain groups.  This is different from the
-	      <a class="link" href="smb.conf.5.html#WINBINDNESTEDGROUPS">winbind nested groups</a> option
-              which implements the Windows NT4 model of local group 
-	      nesting.  The "winbind expand groups"
-              parameter specifically applies to the membership of 
-	      domain groups.</p><p>Be aware that a high value for this parameter can
-	 result in system slowdown as the main parent winbindd daemon
-	 must perform the group unrolling and will be unable to answer
-	 incoming NSS or authentication requests during this time.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>winbind expand groups</code></em> = <code class="literal">1</code>
-</em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2586273"></a>
-
 winbind nested groups (G)
-</h3></div></div></div><a class="indexterm" name="id2586274"></a><a name="WINBINDNESTEDGROUPS"></a><div class="variablelist"><dl><dt></dt><dd><p>If set to yes, this parameter activates the support for nested
+</h3></div></div></div><a class="indexterm" name="id353096"></a><a name="WINBINDNESTEDGROUPS"></a><div class="variablelist"><dl><dt></dt><dd><p>If set to yes, this parameter activates the support for nested
                  groups. Nested groups are also called local groups or
                  aliases. They work like their counterparts in Windows: Nested
                  groups are defined locally on any machine (they are shared
@@ -6083,10 +5746,10 @@
                  global groups from any trusted SAM. To be able to use nested
                  groups, you need to run nss_winbind.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>winbind nested groups</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2586323"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id353140"></a>
 
 winbind normalize names (G)
-</h3></div></div></div><a class="indexterm" name="id2586324"></a><a name="WINBINDNORMALIZENAMES"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls whether winbindd will replace
+</h3></div></div></div><a class="indexterm" name="id353141"></a><a name="WINBINDNORMALIZENAMES"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls whether winbindd will replace
 	whitespace in user and group names with an underscore (_) character.
 	For example, whether the name "Space Kadet" should be
 	replaced with the string "space_kadet".
@@ -6098,10 +5761,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>winbind normalize names</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2586389"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id353202"></a>
 
 winbind nss info (G)
-</h3></div></div></div><a class="indexterm" name="id2586390"></a><a name="WINBINDNSSINFO"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is designed to control how Winbind retrieves Name
+</h3></div></div></div><a class="indexterm" name="id353203"></a><a name="WINBINDNSSINFO"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is designed to control how Winbind retrieves Name
 	Service Information to construct a user's home directory and login shell. 
 	Currently the following settings are available: 
 
@@ -6123,10 +5786,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>winbind nss info</code></em> = <code class="literal">template sfu</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2586509"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id353314"></a>
 
 winbind offline logon (G)
-</h3></div></div></div><a class="indexterm" name="id2586510"></a><a name="WINBINDOFFLINELOGON"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is designed to control whether Winbind should
+</h3></div></div></div><a class="indexterm" name="id353315"></a><a name="WINBINDOFFLINELOGON"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is designed to control whether Winbind should
 	allow to login with the <em class="parameter"><code>pam_winbind</code></em> 
 	module using Cached Credentials. If enabled, winbindd will store user credentials
 	from successful logins encrypted in a local cache.
@@ -6134,29 +5797,20 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>winbind offline logon</code></em> = <code class="literal">true</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2586578"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id353380"></a>
 
 winbind refresh tickets (G)
-</h3></div></div></div><a class="indexterm" name="id2586579"></a><a name="WINBINDREFRESHTICKETS"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is designed to control whether Winbind should refresh Kerberos Tickets
+</h3></div></div></div><a class="indexterm" name="id353381"></a><a name="WINBINDREFRESHTICKETS"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is designed to control whether Winbind should refresh Kerberos Tickets
 	retrieved using the <em class="parameter"><code>pam_winbind</code></em> module.
 
 </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>winbind refresh tickets</code></em> = <code class="literal">false</code>
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>winbind refresh tickets</code></em> = <code class="literal">true</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2586645"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id353445"></a>
 
-winbind rpc only (G)
-</h3></div></div></div><a class="indexterm" name="id2586646"></a><a name="WINBINDRPCONLY"></a><div class="variablelist"><dl><dt></dt><dd><p>
-	Setting this parameter to <code class="literal">yes</code> forces 
-	winbindd to use RPC instead of LDAP to retrieve information from Domain
-        Controllers.
-	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>winbind rpc only</code></em> = <code class="literal">no</code>
-</em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2586694"></a>
-
 winbind separator (G)
-</h3></div></div></div><a class="indexterm" name="id2586695"></a><a name="WINBINDSEPARATOR"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter allows an admin to define the character 
+</h3></div></div></div><a class="indexterm" name="id353446"></a><a name="WINBINDSEPARATOR"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter allows an admin to define the character 
 	used when listing a username of the form of <em class="replaceable"><code>DOMAIN
 	</code></em>\<em class="replaceable"><code>user</code></em>.  This parameter 
 	is only applicable when using the <code class="filename">pam_winbind.so</code>
@@ -6167,10 +5821,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>winbind separator</code></em> = <code class="literal">+</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2586781"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id353527"></a>
 
 winbind trusted domains only (G)
-</h3></div></div></div><a class="indexterm" name="id2586782"></a><a name="WINBINDTRUSTEDDOMAINSONLY"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id353528"></a><a name="WINBINDTRUSTEDDOMAINSONLY"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This parameter is designed to allow Samba servers that are members 
 	of a Samba controlled domain to use UNIX accounts distributed via NIS, 
 	rsync, or LDAP as the uid's for winbindd users in the hosts primary domain.
@@ -6182,10 +5836,10 @@
 	the <a class="citerefentry" href="idmap_nss.8.html"><span class="citerefentry"><span class="refentrytitle">idmap_nss</span>(8)</span></a> man page for more information.
 	</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>winbind trusted domains only</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2586860"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id353600"></a>
 
 winbind use default domain (G)
-</h3></div></div></div><a class="indexterm" name="id2586861"></a><a name="WINBINDUSEDEFAULTDOMAIN"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies whether the
+</h3></div></div></div><a class="indexterm" name="id353601"></a><a name="WINBINDUSEDEFAULTDOMAIN"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies whether the
 	 <a class="citerefentry" href="winbindd.8.html"><span class="citerefentry"><span class="refentrytitle">winbindd</span>(8)</span></a> daemon should operate on users  
 	without domain component in their username. Users without a domain
 	component are treated as is part of the winbindd server's own
@@ -6195,10 +5849,10 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>winbind use default domain</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2586932"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id353668"></a>
 
 wins hook (G)
-</h3></div></div></div><a class="indexterm" name="id2586933"></a><a name="WINSHOOK"></a><div class="variablelist"><dl><dt></dt><dd><p>When Samba is running as a WINS server this 
+</h3></div></div></div><a class="indexterm" name="id353670"></a><a name="WINSHOOK"></a><div class="variablelist"><dl><dt></dt><dd><p>When Samba is running as a WINS server this 
 	allows you to call an external program for all changes to the 
 	WINS database. The primary use for this option is to allow the 
 	dynamic update of external name resolution databases such as 
@@ -6219,17 +5873,17 @@
 			addresses currently registered for that name. If this list is 
 			empty then the name should be deleted.</p></li></ul></div><p>An example script that calls the BIND dynamic DNS update 
 	program <code class="literal">nsupdate</code> is provided in the examples 
-	directory of the Samba source code. </p><p><span class="emphasis"><em>No default</em></span></p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2587038"></a>
+	directory of the Samba source code. </p><p><span class="emphasis"><em>No default</em></span></p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id353763"></a>
 
 wins proxy (G)
-</h3></div></div></div><a class="indexterm" name="id2587039"></a><a name="WINSPROXY"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a boolean that controls if <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> will respond to broadcast name 
+</h3></div></div></div><a class="indexterm" name="id353764"></a><a name="WINSPROXY"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a boolean that controls if <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> will respond to broadcast name 
 	queries on behalf of  other hosts. You may need to set this 
 	to <code class="constant">yes</code> for some older clients.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>wins proxy</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2587093"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id353816"></a>
 
 wins server (G)
-</h3></div></div></div><a class="indexterm" name="id2587094"></a><a name="WINSSERVER"></a><div class="variablelist"><dl><dt></dt><dd><p>This specifies the IP address (or DNS name: IP 
+</h3></div></div></div><a class="indexterm" name="id353817"></a><a name="WINSSERVER"></a><div class="variablelist"><dl><dt></dt><dd><p>This specifies the IP address (or DNS name: IP 
 	address for preference) of the WINS server that <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> should register with. If you have a WINS server on 
 	your network then you should set this to the WINS server's IP.</p><p>You should point this at your WINS server if you have a
 	multi-subnetted network.</p><p>If you want to work in multiple namespaces, you can 
@@ -6248,19 +5902,19 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>wins server</code></em> = <code class="literal">192.9.200.1 192.168.2.61</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2587203"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id353919"></a>
 
 wins support (G)
-</h3></div></div></div><a class="indexterm" name="id2587204"></a><a name="WINSSUPPORT"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean controls if the <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> process in Samba will act as a WINS server. You should 
+</h3></div></div></div><a class="indexterm" name="id353920"></a><a name="WINSSUPPORT"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean controls if the <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> process in Samba will act as a WINS server. You should 
 	not set this to <code class="constant">yes</code> unless you have a multi-subnetted network and 
 	you wish a particular <code class="literal">nmbd</code> to be your WINS server. 
 	Note that you should <span class="emphasis"><em>NEVER</em></span> set this to <code class="constant">yes</code>
 	on more than one machine in your network.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>wins support</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2587273"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id353985"></a>
 
 workgroup (G)
-</h3></div></div></div><a class="indexterm" name="id2587274"></a><a name="WORKGROUP"></a><div class="variablelist"><dl><dt></dt><dd><p>This controls what workgroup your server will 
+</h3></div></div></div><a class="indexterm" name="id353986"></a><a name="WORKGROUP"></a><div class="variablelist"><dl><dt></dt><dd><p>This controls what workgroup your server will 
 	appear to be in when queried by clients. Note that this parameter 
 	also controls the Domain name used with 
 	the <a class="link" href="smb.conf.5.html#SECURITY">security = domain</a>
@@ -6268,16 +5922,13 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>workgroup</code></em> = <code class="literal">MYGROUP</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2587345"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id354055"></a><a name="WRITABLE"></a>writable</h3></div></div></div><a class="indexterm" name="id354056"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#WRITEABLE">writeable</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id354085"></a>
 
-<a name="WRITABLE"></a>writable
-</h3></div></div></div><a class="indexterm" name="id2587346"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#WRITEABLE">writeable</a>.</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2587376"></a>
-
 writeable (S)
-</h3></div></div></div><a class="indexterm" name="id2587377"></a><a name="WRITEABLE"></a><div class="variablelist"><dl><dt></dt><dd><p>Inverted synonym for <a class="link" href="smb.conf.5.html#READONLY">read only</a>.</p><p><span class="emphasis"><em>No default</em></span></p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2587415"></a>
+</h3></div></div></div><a class="indexterm" name="id354086"></a><a name="WRITEABLE"></a><div class="variablelist"><dl><dt></dt><dd><p>Inverted synonym for <a class="link" href="smb.conf.5.html#READONLY">read only</a>.</p><p><span class="emphasis"><em>No default</em></span></p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id354123"></a>
 
 write cache size (S)
-</h3></div></div></div><a class="indexterm" name="id2587416"></a><a name="WRITECACHESIZE"></a><div class="variablelist"><dl><dt></dt><dd><p>If this integer parameter is set to non-zero value,
+</h3></div></div></div><a class="indexterm" name="id354124"></a><a name="WRITECACHESIZE"></a><div class="variablelist"><dl><dt></dt><dd><p>If this integer parameter is set to non-zero value,
     Samba will create an in-memory cache for each oplocked file 
     (it does <span class="emphasis"><em>not</em></span> do this for 
     non-oplocked files). All writes that the client does not request 
@@ -6295,10 +5946,10 @@
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>write cache size</code></em> = <code class="literal">262144
 #  for a 256k cache size per file</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2587498"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id354199"></a>
 
 write list (S)
-</h3></div></div></div><a class="indexterm" name="id2587499"></a><a name="WRITELIST"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id354200"></a><a name="WRITELIST"></a><div class="variablelist"><dl><dt></dt><dd><p>
     This is a list of users that are given read-write access to a service. If the 
     connecting user is in this list then they will be given write access, no matter 
     what the <a class="link" href="smb.conf.5.html#READONLY">read only</a> option is set to. The list can 
@@ -6313,17 +5964,17 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>write list</code></em> = <code class="literal">admin, root, @staff</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2587592"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id354286"></a>
 
 write raw (G)
-</h3></div></div></div><a class="indexterm" name="id2587593"></a><a name="WRITERAW"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls whether or not the server 
+</h3></div></div></div><a class="indexterm" name="id354287"></a><a name="WRITERAW"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls whether or not the server 
     will support raw write SMB's when transferring data from clients. 
     You should never need to change this parameter.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>write raw</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2587635"></a>
+</p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id354328"></a>
 
 wtmp directory (G)
-</h3></div></div></div><a class="indexterm" name="id2587636"></a><a name="WTMPDIRECTORY"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id354329"></a><a name="WTMPDIRECTORY"></a><div class="variablelist"><dl><dt></dt><dd><p>
 	This parameter is only available if Samba has been configured and compiled with the option <code class="literal">
 	--with-utmp</code>. It specifies a directory pathname that is used to store the wtmp or wtmpx files (depending on 
 	the UNIX system) that record user connections to a Samba server. The difference with the utmp directory is the fact 
@@ -6335,7 +5986,7 @@
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>wtmp directory</code></em> = <code class="literal">/var/log/wtmp</code>
 </em></span>
-</p></dd></dl></div></div></div></div><div class="refsect1" lang="en"><a name="id2587723"></a><h2>WARNINGS</h2><p>
+</p></dd></dl></div></div></div></div><div class="refsect1" lang="en"><a name="id354406"></a><h2>WARNINGS</h2><p>
 	Although the configuration file permits service names to contain spaces, your client software may not.
 	Spaces will be ignored in comparisons anyway, so it shouldn't be a problem - but be aware of the possibility.
 	</p><p>
@@ -6348,8 +5999,8 @@
 	for an administrator easy, but the various combinations of default attributes can be tricky. Take extreme
 	care when designing these sections. In particular, ensure that the permissions on spool directories are
 	correct.
-	</p></div><div class="refsect1" lang="en"><a name="id2587773"></a><h2>VERSION</h2><p>This man page is correct for version 3 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2587784"></a><h2>SEE ALSO</h2><p>
-	<a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a>, <a class="citerefentry" href="smbpasswd.8.html"><span class="citerefentry"><span class="refentrytitle">smbpasswd</span>(8)</span></a>, <a class="citerefentry" href="swat.8.html"><span class="citerefentry"><span class="refentrytitle">swat</span>(8)</span></a>, <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a>, <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a>, <a class="citerefentry" href="smbclient.1.html"><span class="citerefentry"><span class="refentrytitle">smbclient</span>(1)</span></a>, <a class="citerefentry" href="nmblookup.1.html"><span class="citerefentry"><span class="refentrytitle">nmblookup</span>(1)</span></a>, <a class="citerefentry" href="testparm.1.html"><span class="citerefentry"><span class="refentrytitle">testparm</span>(1)</span></a>, <a class="citerefentry" href="testprns.1.html"><span class="citerefentry"><span class="refentrytitle">testprns</span>(1)</span></a>.</p></div><div class="refsect1" lang="en"><a name="id2587864"></a><h2>AUTHOR</h2><p>
+	</p></div><div class="refsect1" lang="en"><a name="id354449"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id354460"></a><h2>SEE ALSO</h2><p>
+	<a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a>, <a class="citerefentry" href="smbpasswd.8.html"><span class="citerefentry"><span class="refentrytitle">smbpasswd</span>(8)</span></a>, <a class="citerefentry" href="swat.8.html"><span class="citerefentry"><span class="refentrytitle">swat</span>(8)</span></a>, <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a>, <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a>, <a class="citerefentry" href="smbclient.1.html"><span class="citerefentry"><span class="refentrytitle">smbclient</span>(1)</span></a>, <a class="citerefentry" href="nmblookup.1.html"><span class="citerefentry"><span class="refentrytitle">nmblookup</span>(1)</span></a>, <a class="citerefentry" href="testparm.1.html"><span class="citerefentry"><span class="refentrytitle">testparm</span>(1)</span></a>, <a class="citerefentry" href="testprns.1.html"><span class="citerefentry"><span class="refentrytitle">testprns</span>(1)</span></a>.</p></div><div class="refsect1" lang="en"><a name="id354539"></a><h2>AUTHOR</h2><p>
 	The original Samba software and related utilities were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar to the way the Linux kernel is developed.
 	</p><p>

Modified: branches/samba/upstream/docs/htmldocs/manpages/smbcacls.1.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/smbcacls.1.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/smbcacls.1.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,5 +1,5 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbcacls</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbcacls.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbcacls &#8212; Set or get ACLs on an NT file or directory names</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbcacls</code> {//server/share} {filename} [-D acls] [-M acls] [-a acls] [-S acls] [-C name] [-G name] [--numeric] [-t] [-U username] [-h] [-d]</p></div></div><div class="refsect1" lang="en"><a name="id2507239"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The <code class="literal">smbcacls</code> program manipulates NT Access Control
-	Lists (ACLs) on SMB file shares. </p></div><div class="refsect1" lang="en"><a name="id2507268"></a><h2>OPTIONS</h2><p>The following options are available to the <code class="literal">smbcacls</code> program.  
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbcacls</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbcacls.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbcacls &#8212; Set or get ACLs on an NT file or directory names</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbcacls</code> {//server/share} {filename} [-D acls] [-M acls] [-a acls] [-S acls] [-C name] [-G name] [--numeric] [-t] [-U username] [-h] [-d]</p></div></div><div class="refsect1" lang="en"><a name="id282786"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The <code class="literal">smbcacls</code> program manipulates NT Access Control
+	Lists (ACLs) on SMB file shares. </p></div><div class="refsect1" lang="en"><a name="id283369"></a><h2>OPTIONS</h2><p>The following options are available to the <code class="literal">smbcacls</code> program.  
 	The format of ACLs is described in the section ACL FORMAT </p><div class="variablelist"><dl><dt><span class="term">-a acls</span></dt><dd><p>Add the ACLs specified to the ACL list.  Existing 
 		access control entries are unchanged. </p></dd><dt><span class="term">-M acls</span></dt><dd><p>Modify the mask value (permissions) for the ACLs 
 		specified on the command line.  An error will be printed for each 
@@ -52,7 +52,7 @@
 compile time.</p></dd><dt><span class="term">-l|--log-basename=logdirectory</span></dt><dd><p>Base directory name for log/debug files. The extension
 <code class="constant">".progname"</code> will be appended (e.g. log.smbclient, 
 log.smbd, etc...). The log file is never removed by the client.
-</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2506386"></a><h2>ACL FORMAT</h2><p>The format of an ACL is one or more ACL entries separated by 
+</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id283081"></a><h2>ACL FORMAT</h2><p>The format of an ACL is one or more ACL entries separated by 
 	either commas or newlines.  An ACL entry is one of the following: </p><pre class="programlisting"> 
 REVISION:&lt;revision number&gt;
 OWNER:&lt;sid or name&gt;
@@ -68,22 +68,23 @@
 	can be specified in S-1-x-y-z format or as a name in which case 
 	it is resolved against the server on which the file or directory 
 	resides.  The type, flags and mask values determine the type of 
-	access granted to the SID. </p><p>The type can be either ALLOWED or	DENIED to allow/deny access 
-	to the SID. The flags values are generally zero for file ACLs and 
-	either 9 or 2 for directory ACLs.  Some common flags are: </p><div class="itemizedlist"><ul type="disc"><li><p><code class="constant">#define SEC_ACE_FLAG_OBJECT_INHERIT     	0x1</code></p></li><li><p><code class="constant">#define SEC_ACE_FLAG_CONTAINER_INHERIT  	0x2</code></p></li><li><p><code class="constant">#define SEC_ACE_FLAG_NO_PROPAGATE_INHERIT     0x4</code></p></li><li><p><code class="constant">#define SEC_ACE_FLAG_INHERIT_ONLY       	0x8</code></p></li></ul></div><p>At present flags can only be specified as decimal or 
+	access granted to the SID. </p><p>The type can be either 0 or 1 corresponding to ALLOWED or 
+	DENIED access to the SID.  The flags values are generally
+	zero for file ACLs and either 9 or 2 for directory ACLs.  Some 
+	common flags are: </p><div class="itemizedlist"><ul type="disc"><li><p><code class="constant">#define SEC_ACE_FLAG_OBJECT_INHERIT     	0x1</code></p></li><li><p><code class="constant">#define SEC_ACE_FLAG_CONTAINER_INHERIT  	0x2</code></p></li><li><p><code class="constant">#define SEC_ACE_FLAG_NO_PROPAGATE_INHERIT     0x4</code></p></li><li><p><code class="constant">#define SEC_ACE_FLAG_INHERIT_ONLY       	0x8</code></p></li></ul></div><p>At present flags can only be specified as decimal or 
 	hexadecimal values.</p><p>The mask is a value which expresses the access right 
 	granted to the SID. It can be given as a decimal or hexadecimal value, 
 	or by using one of the following text strings which map to the NT 
 	file permissions of the same name. </p><div class="itemizedlist"><ul type="disc"><li><p><span class="emphasis"><em>R</em></span> - Allow read access </p></li><li><p><span class="emphasis"><em>W</em></span> - Allow write access</p></li><li><p><span class="emphasis"><em>X</em></span> - Execute permission on the object</p></li><li><p><span class="emphasis"><em>D</em></span> - Delete the object</p></li><li><p><span class="emphasis"><em>P</em></span> - Change permissions</p></li><li><p><span class="emphasis"><em>O</em></span> - Take ownership</p></li></ul></div><p>The following combined permissions can be specified:</p><div class="itemizedlist"><ul type="disc"><li><p><span class="emphasis"><em>READ</em></span> -  Equivalent to 'RX'
 		permissions</p></li><li><p><span class="emphasis"><em>CHANGE</em></span> - Equivalent to 'RXWD' permissions
 		</p></li><li><p><span class="emphasis"><em>FULL</em></span> - Equivalent to 'RWXDPO' 
-		permissions</p></li></ul></div></div><div class="refsect1" lang="en"><a name="id2506551"></a><h2>EXIT STATUS</h2><p>The <code class="literal">smbcacls</code> program sets the exit status 
+		permissions</p></li></ul></div></div><div class="refsect1" lang="en"><a name="id324687"></a><h2>EXIT STATUS</h2><p>The <code class="literal">smbcacls</code> program sets the exit status 
 	depending on the success or otherwise of the operations performed.  
 	The exit status may be one of the following values. </p><p>If the operation succeeded, smbcacls returns and exit 
 	status of 0.  If <code class="literal">smbcacls</code> couldn't connect to the specified server, 
 	or there was an error getting or setting the ACLs, an exit status 
 	of 1 is returned.  If there was an error parsing any command line 
-	arguments, an exit status of 2 is returned. </p></div><div class="refsect1" lang="en"><a name="id2506584"></a><h2>VERSION</h2><p>This man page is correct for version 3 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2506595"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+	arguments, an exit status of 2 is returned. </p></div><div class="refsect1" lang="en"><a name="id324714"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id324724"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p><code class="literal">smbcacls</code> was written by Andrew Tridgell 

Modified: branches/samba/upstream/docs/htmldocs/manpages/smbclient.1.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/smbclient.1.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/smbclient.1.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbclient</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbclient.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbclient &#8212; ftp-like client to access SMB/CIFS resources 
-	on servers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbclient</code> [-b &lt;buffer size&gt;] [-d debuglevel] [-e] [-L &lt;netbios name&gt;] [-U username] [-I destinationIP] [-M &lt;netbios name&gt;] [-m maxprotocol] [-A authfile] [-N] [-i scope] [-O &lt;socket options&gt;] [-p port] [-R &lt;name resolve order&gt;] [-s &lt;smb config file&gt;] [-k] [-P] [-c &lt;command&gt;]</p></div><div class="cmdsynopsis"><p><code class="literal">smbclient</code> {servicename} [password] [-b &lt;buffer size&gt;] [-d debuglevel] [-e] [-D Directory] [-U username] [-W workgroup] [-M &lt;netbios name&gt;] [-m maxprotocol] [-A authfile] [-N] [-l log-basename] [-I destinationIP] [-E] [-c &lt;command string&gt;] [-i scope] [-O &lt;socket options&gt;] [-p port] [-R &lt;name resolve order&gt;] [-s &lt;smb config file&gt;] [-T&lt;c|x&gt;IXFqgbNan] [-k]</p></div></div><div class="refsect1" lang="en"><a name="id2507475"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">smbclient</code> is a client that can 
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbclient</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbclient.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbclient &#8212; ftp-like client to access SMB/CIFS resources 
+	on servers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbclient</code> [-b &lt;buffer size&gt;] [-d debuglevel] [-e] [-L &lt;netbios name&gt;] [-U username] [-I destinationIP] [-M &lt;netbios name&gt;] [-m maxprotocol] [-A authfile] [-N] [-i scope] [-O &lt;socket options&gt;] [-p port] [-R &lt;name resolve order&gt;] [-s &lt;smb config file&gt;] [-k] [-P] [-c &lt;command&gt;]</p></div><div class="cmdsynopsis"><p><code class="literal">smbclient</code> {servicename} [password] [-b &lt;buffer size&gt;] [-d debuglevel] [-e] [-D Directory] [-U username] [-W workgroup] [-M &lt;netbios name&gt;] [-m maxprotocol] [-A authfile] [-N] [-l log-basename] [-I destinationIP] [-E] [-c &lt;command string&gt;] [-i scope] [-O &lt;socket options&gt;] [-p port] [-R &lt;name resolve order&gt;] [-s &lt;smb config file&gt;] [-T&lt;c|x&gt;IXFqgbNan] [-k]</p></div></div><div class="refsect1" lang="en"><a name="id283022"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">smbclient</code> is a client that can 
 	'talk' to an SMB/CIFS server. It offers an interface
 	similar to that of the ftp program (see <a class="citerefentry" href="ftp.1.html"><span class="citerefentry"><span class="refentrytitle">ftp</span>(1)</span></a>).  
 	Operations include things like getting files from the server 
 	to the local machine, putting files from the local machine to 
 	the server, retrieving directory information from the server 
-	and so on. </p></div><div class="refsect1" lang="en"><a name="id2507515"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">servicename</span></dt><dd><p>servicename is the name of the service 
+	and so on. </p></div><div class="refsect1" lang="en"><a name="id283058"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">servicename</span></dt><dd><p>servicename is the name of the service 
 		you want to use on the server. A service name takes the form
 		<code class="filename">//server/service</code> where <em class="parameter"><code>server
 		</code></em> is the NetBIOS name of the SMB/CIFS server 
@@ -267,7 +267,7 @@
 		only of any use with the tar -T option. </p></dd><dt><span class="term">-c command string</span></dt><dd><p>command string is a semicolon-separated list of 
 		commands to be executed instead of prompting from stdin. <em class="parameter"><code>
 		-N</code></em> is implied by <em class="parameter"><code>-c</code></em>.</p><p>This is particularly useful in scripts and for printing stdin 
-		to the server, e.g. <code class="literal">-c 'print -'</code>. </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2554335"></a><h2>OPERATIONS</h2><p>Once the client is running, the user is presented with 
+		to the server, e.g. <code class="literal">-c 'print -'</code>. </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id325619"></a><h2>OPERATIONS</h2><p>Once the client is running, the user is presented with 
 	a prompt : </p><p><code class="prompt">smb:\&gt; </code></p><p>The backslash ("\\") indicates the current working directory 
 	on the server, and will change if the current working directory 
 	is changed. </p><p>The prompt indicates that the client is ready and waiting to 
@@ -464,14 +464,14 @@
 		</p></dd><dt><span class="term">vuid &lt;number&gt;</span></dt><dd><p>Changes the currently used vuid in the protocol to
 		the given arbitrary number. Without an argument prints out the current
 		vuid being used. Used for internal Samba testing purposes.
-		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2555439"></a><h2>NOTES</h2><p>Some servers are fussy about the case of supplied usernames,
+		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id326556"></a><h2>NOTES</h2><p>Some servers are fussy about the case of supplied usernames,
 	passwords, share names (AKA service names) and machine names.
 	If you fail to connect try giving all parameters in uppercase.
 	</p><p>It is often necessary to use the -n option when connecting
 	to some types of servers. For example OS/2 LanManager insists
 	on a valid NetBIOS name being used, so you need to supply a valid
 	name that would be known to the server.</p><p>smbclient supports long file names where the server 
-	supports the LANMAN2 protocol or above. </p></div><div class="refsect1" lang="en"><a name="id2555464"></a><h2>ENVIRONMENT VARIABLES</h2><p>The variable <code class="envar">USER</code> may contain the 
+	supports the LANMAN2 protocol or above. </p></div><div class="refsect1" lang="en"><a name="id326576"></a><h2>ENVIRONMENT VARIABLES</h2><p>The variable <code class="envar">USER</code> may contain the 
 	username of the person  using the client. This information is 
 	used only if the protocol  level is high enough to support 
 	session-level passwords.</p><p>The variable <code class="envar">PASSWD</code> may contain 
@@ -481,7 +481,7 @@
 	the path, executed with system(), which the client should connect 
         to instead of connecting to a server.  This functionality is primarily
         intended as a development aid, and works best when using a LMHOSTS 
-        file</p></div><div class="refsect1" lang="en"><a name="id2555503"></a><h2>INSTALLATION</h2><p>The location of the client program is a matter for 
+        file</p></div><div class="refsect1" lang="en"><a name="id326607"></a><h2>INSTALLATION</h2><p>The location of the client program is a matter for 
 	individual system administrators. The following are thus
 	suggestions only. </p><p>It is recommended that the smbclient software be installed
 	in the <code class="filename">/usr/local/samba/bin/</code> or <code class="filename">
@@ -492,11 +492,11 @@
 	and writeable only by the user. </p><p>To test the client, you will need to know the name of a 
 	running SMB/CIFS server. It is possible to run <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> as an ordinary user - running that server as a daemon 
 	on a user-accessible port (typically any port number over 1024)
-	would provide a suitable test server. </p></div><div class="refsect1" lang="en"><a name="id2555558"></a><h2>DIAGNOSTICS</h2><p>Most diagnostics issued by the client are logged in a 
+	would provide a suitable test server. </p></div><div class="refsect1" lang="en"><a name="id326654"></a><h2>DIAGNOSTICS</h2><p>Most diagnostics issued by the client are logged in a 
 	specified log file. The log file name is specified at compile time, 
 	but may be overridden on the command line. </p><p>The number and nature of diagnostics available depends 
 	on the debug level used by the client. If you have problems, 
-	set the debug level to 3 and peruse the log files. </p></div><div class="refsect1" lang="en"><a name="id2555577"></a><h2>VERSION</h2><p>This man page is correct for version 3.2 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2555588"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+	set the debug level to 3 and peruse the log files. </p></div><div class="refsect1" lang="en"><a name="id326670"></a><h2>VERSION</h2><p>This man page is correct for version 3.2 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id326681"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p>The original Samba man pages were written by Karl Auer. 

Modified: branches/samba/upstream/docs/htmldocs/manpages/smbcontrol.1.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/smbcontrol.1.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/smbcontrol.1.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,5 +1,5 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbcontrol</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbcontrol.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbcontrol &#8212; send messages to smbd, nmbd or winbindd processes</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbcontrol</code> [-i] [-s]</p></div><div class="cmdsynopsis"><p><code class="literal">smbcontrol</code> [destination] [message-type] [parameter]</p></div></div><div class="refsect1" lang="en"><a name="id2507180"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">smbcontrol</code> is a very small program, which 
-	sends messages to a <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a>, a <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a>, or a <a class="citerefentry" href="winbindd.8.html"><span class="citerefentry"><span class="refentrytitle">winbindd</span>(8)</span></a> daemon running on the system.</p></div><div class="refsect1" lang="en"><a name="id2507231"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-h|--help</span></dt><dd><p>Print a summary of command line options.
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbcontrol</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbcontrol.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbcontrol &#8212; send messages to smbd, nmbd or winbindd processes</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbcontrol</code> [-i] [-s]</p></div><div class="cmdsynopsis"><p><code class="literal">smbcontrol</code> [destination] [message-type] [parameter]</p></div></div><div class="refsect1" lang="en"><a name="id282735"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">smbcontrol</code> is a very small program, which 
+	sends messages to a <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a>, a <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a>, or a <a class="citerefentry" href="winbindd.8.html"><span class="citerefentry"><span class="refentrytitle">winbindd</span>(8)</span></a> daemon running on the system.</p></div><div class="refsect1" lang="en"><a name="id282785"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-h|--help</span></dt><dd><p>Print a summary of command line options.
 </p></dd><dt><span class="term">-s &lt;configuration file&gt;</span></dt><dd><p>The file specified contains the 
 configuration details required by the server.  The 
 information in this file includes server-specific
@@ -16,7 +16,7 @@
 		<code class="filename">nmbd.pid</code> file.</p><p>If a single process ID is given, the message is sent 
 		to only that process.</p></dd><dt><span class="term">message-type</span></dt><dd><p>Type of message to send. See 
 		the section <code class="constant">MESSAGE-TYPES</code> for details.
-		</p></dd><dt><span class="term">parameters</span></dt><dd><p>any parameters required for the message-type</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507374"></a><h2>MESSAGE-TYPES</h2><p>Available message types are:</p><div class="variablelist"><dl><dt><span class="term">close-share</span></dt><dd><p>Order smbd to close the client 
+		</p></dd><dt><span class="term">parameters</span></dt><dd><p>any parameters required for the message-type</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id282922"></a><h2>MESSAGE-TYPES</h2><p>Available message types are:</p><div class="variablelist"><dl><dt><span class="term">close-share</span></dt><dd><p>Order smbd to close the client 
 	connections to the named share. Note that this doesn't affect client 
 	connections to any other shares. This message-type takes an argument of the
 	share name for which client connections will be closed, or the
@@ -59,8 +59,8 @@
 	to update their local version of the driver. Can only be 
 	sent to smbd.</p></dd><dt><span class="term">reload-config</span></dt><dd><p>Force daemon to reload smb.conf configuration file. Can be sent
 	to <code class="constant">smbd</code>, <code class="constant">nmbd</code>, or <code class="constant">winbindd</code>.
-	</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2506444"></a><h2>VERSION</h2><p>This man page is correct for version 3 of 
-	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2506455"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> and <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a>.</p></div><div class="refsect1" lang="en"><a name="id2506479"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+	</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id324598"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of 
+	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id324608"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> and <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a>.</p></div><div class="refsect1" lang="en"><a name="id324632"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p>The original Samba man pages were written by Karl Auer. 

Modified: branches/samba/upstream/docs/htmldocs/manpages/smbcquotas.1.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/smbcquotas.1.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/smbcquotas.1.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbcquotas</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbcquotas.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbcquotas &#8212; Set or get QUOTAs of NTFS 5 shares</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbcquotas</code> {//server/share} [-u user] [-L] [-F] [-S QUOTA_SET_COMMAND] [-n] [-t] [-v] [-d debuglevel] [-s configfile] [-l logdir] [-V] [-U username] [-N] [-k] [-A]</p></div></div><div class="refsect1" lang="en"><a name="id2507252"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The <code class="literal">smbcquotas</code> program manipulates NT Quotas on SMB file shares. </p></div><div class="refsect1" lang="en"><a name="id2507280"></a><h2>OPTIONS</h2><p>The following options are available to the <code class="literal">smbcquotas</code> program. </p><div class="variablelist"><dl><dt><span class="term">-u user</span></dt><dd><p> Specifies the user of whom the quotas are get or set.
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbcquotas</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbcquotas.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbcquotas &#8212; Set or get QUOTAs of NTFS 5 shares</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbcquotas</code> {//server/share} [-u user] [-L] [-F] [-S QUOTA_SET_COMMAND] [-n] [-t] [-v] [-d debuglevel] [-s configfile] [-l logdir] [-V] [-U username] [-N] [-k] [-A]</p></div></div><div class="refsect1" lang="en"><a name="id283364"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The <code class="literal">smbcquotas</code> program manipulates NT Quotas on SMB file shares. </p></div><div class="refsect1" lang="en"><a name="id283392"></a><h2>OPTIONS</h2><p>The following options are available to the <code class="literal">smbcquotas</code> program. </p><div class="variablelist"><dl><dt><span class="term">-u user</span></dt><dd><p> Specifies the user of whom the quotas are get or set.
 		By default the current user's username will be used.</p></dd><dt><span class="term">-L</span></dt><dd><p>Lists all quota records of the share.</p></dd><dt><span class="term">-F</span></dt><dd><p>Show the share quota status and default limits.</p></dd><dt><span class="term">-S QUOTA_SET_COMMAND</span></dt><dd><p>This command sets/modifies quotas for a user or on the share,
 		depending on the QUOTA_SET_COMMAND parameter which is described later.</p></dd><dt><span class="term">-n</span></dt><dd><p>This option displays all QUOTA information in numeric 
 		format.  The default is to convert SIDs to names and QUOTA limits 
@@ -62,7 +62,7 @@
 many systems the command line of a running process may be seen
 via the <code class="literal">ps</code> command.  To be safe always allow
 <code class="literal">rpcclient</code> to prompt for a password and type
-it in directly. </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2506459"></a><h2>QUOTA_SET_COMAND</h2><p>The format of an the QUOTA_SET_COMMAND is an operation
+it in directly. </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id324615"></a><h2>QUOTA_SET_COMAND</h2><p>The format of an the QUOTA_SET_COMMAND is an operation
 	name followed by a set of parameters specific to that operation.
 	</p><p>To set user quotas for the user specified by -u or for the
 	current username: </p><p><strong class="userinput"><code>
@@ -74,13 +74,13 @@
 	To change the share quota settings:
 	</p><p><strong class="userinput"><code>
 	FSQFLAGS:QUOTA_ENABLED/DENY_DISK/LOG_SOFTLIMIT/LOG_HARD_LIMIT
-	</code></strong></p><p>All limits are specified as a number of bytes.</p></div><div class="refsect1" lang="en"><a name="id2506512"></a><h2>EXIT STATUS</h2><p>The <code class="literal">smbcquotas</code> program sets the exit status
+	</code></strong></p><p>All limits are specified as a number of bytes.</p></div><div class="refsect1" lang="en"><a name="id324659"></a><h2>EXIT STATUS</h2><p>The <code class="literal">smbcquotas</code> program sets the exit status
 	depending on the success or otherwise of the operations performed.
 	The exit status may be one of the following values. </p><p>If the operation succeeded, smbcquotas returns an exit
 	status of 0.  If <code class="literal">smbcquotas</code> couldn't connect to the specified server,
 	or when there was an error getting or setting the quota(s), an exit status
 	of 1 is returned.  If there was an error parsing any command line
-	arguments, an exit status of 2 is returned. </p></div><div class="refsect1" lang="en"><a name="id2506544"></a><h2>VERSION</h2><p>This man page is correct for version 3 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2506555"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
+	arguments, an exit status of 2 is returned. </p></div><div class="refsect1" lang="en"><a name="id324687"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id324696"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar
 	to the way the Linux kernel is developed.</p><p><code class="literal">smbcquotas</code> was written by Stefan Metzmacher.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/smbd.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/smbd.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/smbd.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbd</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbd.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbd &#8212; server to provide SMB/CIFS services to clients</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbd</code> [-D] [-F] [-S] [-i] [-h] [-V] [-b] [-d &lt;debug level&gt;] [-l &lt;log directory&gt;] [-p &lt;port number(s)&gt;] [-P &lt;profiling level&gt;] [-O &lt;socket option&gt;] [-s &lt;configuration file&gt;]</p></div></div><div class="refsect1" lang="en"><a name="id2507244"></a><h2>DESCRIPTION</h2><p>This program is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">smbd</code> is the server daemon that 
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbd</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbd.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbd &#8212; server to provide SMB/CIFS services to clients</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbd</code> [-D] [-F] [-S] [-i] [-h] [-V] [-b] [-d &lt;debug level&gt;] [-l &lt;log directory&gt;] [-p &lt;port number(s)&gt;] [-P &lt;profiling level&gt;] [-O &lt;socket option&gt;] [-s &lt;configuration file&gt;]</p></div></div><div class="refsect1" lang="en"><a name="id282811"></a><h2>DESCRIPTION</h2><p>This program is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">smbd</code> is the server daemon that 
 	provides filesharing and printing services to Windows clients. 
 	The server provides filespace and printer services to
 	clients using the SMB (or CIFS) protocol. This is compatible 
@@ -21,7 +21,7 @@
 	can force a reload by sending a SIGHUP to the server.  Reloading 
 	the configuration file will not affect connections to any service 
 	that is already established.  Either the user will have to 
-	disconnect from the service, or <code class="literal">smbd</code> killed and restarted.</p></div><div class="refsect1" lang="en"><a name="id2507331"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-D</span></dt><dd><p>If specified, this parameter causes 
+	disconnect from the service, or <code class="literal">smbd</code> killed and restarted.</p></div><div class="refsect1" lang="en"><a name="id283420"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-D</span></dt><dd><p>If specified, this parameter causes 
 		the server to operate as a daemon. That is, it detaches 
 		itself and runs in the background, fielding requests 
 		on the appropriate port. Operating the server as a
@@ -82,7 +82,7 @@
 		number specifying the level of profiling data to be collected.
 		0 turns off profiling, 1 turns on counter profiling only,
 		2 turns on complete profiling, and 3 resets all profiling data.
-		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2506472"></a><h2>FILES</h2><div class="variablelist"><dl><dt><span class="term"><code class="filename">/etc/inetd.conf</code></span></dt><dd><p>If the server is to be run by the 
+		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id324629"></a><h2>FILES</h2><div class="variablelist"><dl><dt><span class="term"><code class="filename">/etc/inetd.conf</code></span></dt><dd><p>If the server is to be run by the 
 		<code class="literal">inetd</code> meta-daemon, this file 
 		must contain suitable startup information for the 
 		meta-daemon. 
@@ -96,17 +96,17 @@
 		</p></dd><dt><span class="term"><code class="filename">/usr/local/samba/lib/smb.conf</code></span></dt><dd><p>This is the default location of the <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a> server configuration file. Other common places that systems 
 		install this file are <code class="filename">/usr/samba/lib/smb.conf</code> 
 		and <code class="filename">/etc/samba/smb.conf</code>.</p><p>This file describes all the services the server 
-		is to make available to clients. See <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a> for more information.</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2506599"></a><h2>LIMITATIONS</h2><p>On some systems <code class="literal">smbd</code> cannot change uid back 
+		is to make available to clients. See <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a> for more information.</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id324741"></a><h2>LIMITATIONS</h2><p>On some systems <code class="literal">smbd</code> cannot change uid back 
 	to root after a setuid() call.  Such systems are called 
 	trapdoor uid systems. If you have such a system, 
 	you will be unable to connect from a client (such as a PC) as 
 	two different users at once. Attempts to connect the
 	second user will result in access denied or 
-	similar.</p></div><div class="refsect1" lang="en"><a name="id2506620"></a><h2>ENVIRONMENT VARIABLES</h2><div class="variablelist"><dl><dt><span class="term"><code class="envar">PRINTER</code></span></dt><dd><p>If no printer name is specified to 
+	similar.</p></div><div class="refsect1" lang="en"><a name="id324758"></a><h2>ENVIRONMENT VARIABLES</h2><div class="variablelist"><dl><dt><span class="term"><code class="envar">PRINTER</code></span></dt><dd><p>If no printer name is specified to 
 		printable services, most systems will use the value of 
 		this variable (or <code class="constant">lp</code> if this variable is 
 		not defined) as the name of the printer to use. This 
-		is not specific to the server, however.</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2506650"></a><h2>PAM INTERACTION</h2><p>Samba uses PAM for authentication (when presented with a plaintext 
+		is not specific to the server, however.</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id324785"></a><h2>PAM INTERACTION</h2><p>Samba uses PAM for authentication (when presented with a plaintext 
 	password), for account checking (is this account disabled?) and for
 	session management.  The degree too which samba supports PAM is restricted
 	by the limitations of the SMB protocol and the <a class="link" href="smb.conf.5.html#OBEYPAMRESTRICTIONS">obey pam restrictions</a> <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a> paramater.  When this is set, the following restrictions apply:
@@ -119,8 +119,8 @@
 	is granted.  Note however, that this is bypassed in share level secuirty.  
 	Note also that some older pam configuration files may need a line 
 	added for session support. 
-	</p></li></ul></div></div><div class="refsect1" lang="en"><a name="id2506711"></a><h2>VERSION</h2><p>This man page is correct for version 3 of 
-	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2506722"></a><h2>DIAGNOSTICS</h2><p>Most diagnostics issued by the server are logged 
+	</p></li></ul></div></div><div class="refsect1" lang="en"><a name="id324832"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of 
+	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id324841"></a><h2>DIAGNOSTICS</h2><p>Most diagnostics issued by the server are logged 
 	in a specified log file. The log file name is specified 
 	at compile time, but may be overridden on the command line.</p><p>The number and nature of diagnostics available depends 
 	on the debug level used by the server. If you have problems, set 
@@ -129,10 +129,10 @@
 	available in the source code to warrant describing each and every 
 	diagnostic. At this stage your best bet is still to grep the 
 	source code and inspect the conditions that gave rise to the 
-	diagnostics you are seeing.</p></div><div class="refsect1" lang="en"><a name="id2506750"></a><h2>TDB FILES</h2><p>Samba stores it's data in several TDB (Trivial Database) files, usually located in <code class="filename">/var/lib/samba</code>.</p><p>
+	diagnostics you are seeing.</p></div><div class="refsect1" lang="en"><a name="id324864"></a><h2>TDB FILES</h2><p>Samba stores it's data in several TDB (Trivial Database) files, usually located in <code class="filename">/var/lib/samba</code>.</p><p>
 	(*) information persistent across restarts (but not
 	necessarily important to backup).
-	</p><div class="variablelist"><dl><dt><span class="term">account_policy.tdb*</span></dt><dd><p>NT account policy settings such as pw expiration, etc...</p></dd><dt><span class="term">brlock.tdb</span></dt><dd><p>byte range locks</p></dd><dt><span class="term">browse.dat</span></dt><dd><p>browse lists</p></dd><dt><span class="term">connections.tdb</span></dt><dd><p>share connections (used to enforce max connections, etc...)</p></dd><dt><span class="term">gencache.tdb</span></dt><dd><p>generic caching db</p></dd><dt><span class="term">group_mapping.tdb*</span></dt><dd><p>group mapping information</p></dd><dt><span class="term">locking.tdb</span></dt><dd><p>share modes &amp; oplocks</p></dd><dt><span class="term">login_cache.tdb*</span></dt><dd><p>bad pw attempts</p></dd><dt><span class="term">messages.tdb</span></dt><dd><p>Samba messaging system</p></dd><dt><span class="term">netsamlogon_cache.tdb*</span></dt><dd><p>cache of user net_info_3 struct	from net_samlogon() request (as a domain member)</p></dd><dt><span class="term">ntdrivers.tdb*</span></dt><dd><p>installed printer drivers</p></dd><dt><span class="term">ntforms.tdb*</span></dt><dd><p>installed printer forms</p></dd><dt><span class="term">ntprinters.tdb*</span></dt><dd><p>installed printer information</p></dd><dt><span class="term">printing/</span></dt><dd><p>directory containing tdb per print queue of cached lpq output</p></dd><dt><span class="term">registry.tdb</span></dt><dd><p>Windows registry skeleton (connect via regedit.exe)</p></dd><dt><span class="term">sessionid.tdb</span></dt><dd><p>session information (e.g. support for 'utmp = yes')</p></dd><dt><span class="term">share_info.tdb*</span></dt><dd><p>share acls</p></dd><dt><span class="term">winbindd_cache.tdb</span></dt><dd><p>winbindd's cache of user lists, etc...</p></dd><dt><span class="term">winbindd_idmap.tdb*</span></dt><dd><p>winbindd's local idmap db</p></dd><dt><span class="term">wins.dat*</span></dt><dd><p>wins database when 'wins support = yes'</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2553689"></a><h2>SIGNALS</h2><p>Sending the <code class="literal">smbd</code> a SIGHUP will cause it to 
+	</p><div class="variablelist"><dl><dt><span class="term">account_policy.tdb*</span></dt><dd><p>NT account policy settings such as pw expiration, etc...</p></dd><dt><span class="term">brlock.tdb</span></dt><dd><p>byte range locks</p></dd><dt><span class="term">browse.dat</span></dt><dd><p>browse lists</p></dd><dt><span class="term">connections.tdb</span></dt><dd><p>share connections (used to enforce max connections, etc...)</p></dd><dt><span class="term">gencache.tdb</span></dt><dd><p>generic caching db</p></dd><dt><span class="term">group_mapping.tdb*</span></dt><dd><p>group mapping information</p></dd><dt><span class="term">locking.tdb</span></dt><dd><p>share modes &amp; oplocks</p></dd><dt><span class="term">login_cache.tdb*</span></dt><dd><p>bad pw attempts</p></dd><dt><span class="term">messages.tdb</span></dt><dd><p>Samba messaging system</p></dd><dt><span class="term">netsamlogon_cache.tdb*</span></dt><dd><p>cache of user net_info_3 struct	from net_samlogon() request (as a domain member)</p></dd><dt><span class="term">ntdrivers.tdb*</span></dt><dd><p>installed printer drivers</p></dd><dt><span class="term">ntforms.tdb*</span></dt><dd><p>installed printer forms</p></dd><dt><span class="term">ntprinters.tdb*</span></dt><dd><p>installed printer information</p></dd><dt><span class="term">printing/</span></dt><dd><p>directory containing tdb per print queue of cached lpq output</p></dd><dt><span class="term">registry.tdb</span></dt><dd><p>Windows registry skeleton (connect via regedit.exe)</p></dd><dt><span class="term">sessionid.tdb</span></dt><dd><p>session information (e.g. support for 'utmp = yes')</p></dd><dt><span class="term">share_info.tdb*</span></dt><dd><p>share acls</p></dd><dt><span class="term">winbindd_cache.tdb</span></dt><dd><p>winbindd's cache of user lists, etc...</p></dd><dt><span class="term">winbindd_idmap.tdb*</span></dt><dd><p>winbindd's local idmap db</p></dd><dt><span class="term">wins.dat*</span></dt><dd><p>wins database when 'wins support = yes'</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id325083"></a><h2>SIGNALS</h2><p>Sending the <code class="literal">smbd</code> a SIGHUP will cause it to 
 	reload its <code class="filename">smb.conf</code> configuration 
 	file within a short period of time.</p><p>To shut down a user's <code class="literal">smbd</code> process it is recommended 
 	that <code class="literal">SIGKILL (-9)</code> <span class="emphasis"><em>NOT</em></span> 
@@ -147,11 +147,11 @@
 	<code class="literal">smbd</code> is in a state of waiting for an incoming SMB before 
 	issuing them. It is possible to make the signal handlers safe 
 	by un-blocking the signals before the select call and re-blocking 
-	them after, however this would affect performance.</p></div><div class="refsect1" lang="en"><a name="id2553783"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="hosts_access.5.html"><span class="citerefentry"><span class="refentrytitle">hosts_access</span>(5)</span></a>, <a class="citerefentry" href="inetd.8.html"><span class="citerefentry"><span class="refentrytitle">inetd</span>(8)</span></a>, <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a>, <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a>, <a class="citerefentry" href="smbclient.1.html"><span class="citerefentry"><span class="refentrytitle">smbclient</span>(1)</span></a>, <a class="citerefentry" href="testparm.1.html"><span class="citerefentry"><span class="refentrytitle">testparm</span>(1)</span></a>, <a class="citerefentry" href="testprns.1.html"><span class="citerefentry"><span class="refentrytitle">testprns</span>(1)</span></a>, and the 
+	them after, however this would affect performance.</p></div><div class="refsect1" lang="en"><a name="id325161"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="hosts_access.5.html"><span class="citerefentry"><span class="refentrytitle">hosts_access</span>(5)</span></a>, <a class="citerefentry" href="inetd.8.html"><span class="citerefentry"><span class="refentrytitle">inetd</span>(8)</span></a>, <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a>, <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a>, <a class="citerefentry" href="smbclient.1.html"><span class="citerefentry"><span class="refentrytitle">smbclient</span>(1)</span></a>, <a class="citerefentry" href="testparm.1.html"><span class="citerefentry"><span class="refentrytitle">testparm</span>(1)</span></a>, <a class="citerefentry" href="testprns.1.html"><span class="citerefentry"><span class="refentrytitle">testprns</span>(1)</span></a>, and the 
 	Internet RFC's	<code class="filename">rfc1001.txt</code>, <code class="filename">rfc1002.txt</code>. 
 	In addition the CIFS (formerly SMB) specification is available 
 	as a link from the Web page <a class="ulink" href="http://samba.org/cifs/" target="_top"> 
-	http://samba.org/cifs/</a>.</p></div><div class="refsect1" lang="en"><a name="id2553869"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+	http://samba.org/cifs/</a>.</p></div><div class="refsect1" lang="en"><a name="id325240"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p>The original Samba man pages were written by Karl Auer. 

Modified: branches/samba/upstream/docs/htmldocs/manpages/smbget.1.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/smbget.1.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/smbget.1.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,14 +1,14 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbget</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbget.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbget &#8212; wget-like utility for download files over SMB</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbget</code> [-a, --guest] [-r, --resume] [-R, --recursive] [-u, --username=STRING] [-p, --password=STRING] [-w, --workgroup=STRING] [-n, --nonprompt] [-d, --debuglevel=INT] [-D, --dots] [-P, --keep-permissions] [-o, --outputfile] [-f, --rcfile] [-q, --quiet] [-v, --verbose] [-b, --blocksize] [-?, --help] [--usage] {smb://host/share/path/to/file} [smb://url2/] [...]</p></div></div><div class="refsect1" lang="en"><a name="id2507296"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>smbget is a simple utility with wget-like semantics, that can download files from SMB servers. You can specify the files you would like to download on the command-line. 
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbget</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbget.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbget &#8212; wget-like utility for download files over SMB</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbget</code> [-a, --guest] [-r, --resume] [-R, --recursive] [-u, --username=STRING] [-p, --password=STRING] [-w, --workgroup=STRING] [-n, --nonprompt] [-d, --debuglevel=INT] [-D, --dots] [-P, --keep-permissions] [-o, --outputfile] [-f, --rcfile] [-q, --quiet] [-v, --verbose] [-b, --blocksize] [-?, --help] [--usage] {smb://host/share/path/to/file} [smb://url2/] [...]</p></div></div><div class="refsect1" lang="en"><a name="id283397"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>smbget is a simple utility with wget-like semantics, that can download files from SMB servers. You can specify the files you would like to download on the command-line. 
 	</p><p>
 		The files should be in the smb-URL standard, e.g. use smb://host/share/file
 		for the UNC path <span class="emphasis"><em>\\\\HOST\\SHARE\\file</em></span>.
-	</p></div><div class="refsect1" lang="en"><a name="id2507329"></a><h2>OPTIONS</h2><dt><span class="term">-a, --guest</span></dt><dd><p>Work as user guest</p></dd><dt><span class="term">-r, --resume</span></dt><dd><p>Automatically resume aborted files</p></dd><dt><span class="term">-R, --recursive</span></dt><dd><p>Recursively download files</p></dd><dt><span class="term">-u, --username=STRING</span></dt><dd><p>Username to use</p></dd><dt><span class="term">-p, --password=STRING</span></dt><dd><p>Password to use</p></dd><dt><span class="term">-w, --workgroup=STRING</span></dt><dd><p>Workgroup to use (optional)</p></dd><dt><span class="term">-n, --nonprompt</span></dt><dd><p>Don't ask anything (non-interactive)</p></dd><dt><span class="term">-d, --debuglevel=INT</span></dt><dd><p>Debuglevel to use</p></dd><dt><span class="term">-D, --dots</span></dt><dd><p>Show dots as progress indication</p></dd><dt><span class="term">-P, --keep-permissions</span></dt><dd><p>Set same permissions on local file as are set on remote file.</p></dd><dt><span class="term">-o, --outputfile</span></dt><dd><p>Write the file that is being download to the specified file. Can not be used together with -R.</p></dd><dt><span class="term">-f, --rcfile</span></dt><dd><p>Use specified rcfile. This will be loaded in the order it was specified - e.g. if you specify any options before this one, they might get overriden by the contents of the rcfile.</p></dd><dt><span class="term">-q, --quiet</span></dt><dd><p>Be quiet</p></dd><dt><span class="term">-v, --verbose</span></dt><dd><p>Be verbose</p></dd><dt><span class="term">-b, --blocksize</span></dt><dd><p>Number of bytes to download in a block. Defaults to 64000.</p></dd><dt><span class="term">-?, --help</span></dt><dd><p>Show help message</p></dd><dt><span class="term">--usage</span></dt><dd><p>Display brief usage message</p></dd></div><div class="refsect1" lang="en"><a name="id2506257"></a><h2>SMB URLS</h2><p> SMB URL's should be specified in the following format:</p><pre class="programlisting">
+	</p></div><div class="refsect1" lang="en"><a name="id283428"></a><h2>OPTIONS</h2><dt><span class="term">-a, --guest</span></dt><dd><p>Work as user guest</p></dd><dt><span class="term">-r, --resume</span></dt><dd><p>Automatically resume aborted files</p></dd><dt><span class="term">-R, --recursive</span></dt><dd><p>Recursively download files</p></dd><dt><span class="term">-u, --username=STRING</span></dt><dd><p>Username to use</p></dd><dt><span class="term">-p, --password=STRING</span></dt><dd><p>Password to use</p></dd><dt><span class="term">-w, --workgroup=STRING</span></dt><dd><p>Workgroup to use (optional)</p></dd><dt><span class="term">-n, --nonprompt</span></dt><dd><p>Don't ask anything (non-interactive)</p></dd><dt><span class="term">-d, --debuglevel=INT</span></dt><dd><p>Debuglevel to use</p></dd><dt><span class="term">-D, --dots</span></dt><dd><p>Show dots as progress indication</p></dd><dt><span class="term">-P, --keep-permissions</span></dt><dd><p>Set same permissions on local file as are set on remote file.</p></dd><dt><span class="term">-o, --outputfile</span></dt><dd><p>Write the file that is being download to the specified file. Can not be used together with -R.</p></dd><dt><span class="term">-f, --rcfile</span></dt><dd><p>Use specified rcfile. This will be loaded in the order it was specified - e.g. if you specify any options before this one, they might get overriden by the contents of the rcfile.</p></dd><dt><span class="term">-q, --quiet</span></dt><dd><p>Be quiet</p></dd><dt><span class="term">-v, --verbose</span></dt><dd><p>Be verbose</p></dd><dt><span class="term">-b, --blocksize</span></dt><dd><p>Number of bytes to download in a block. Defaults to 64000.</p></dd><dt><span class="term">-?, --help</span></dt><dd><p>Show help message</p></dd><dt><span class="term">--usage</span></dt><dd><p>Display brief usage message</p></dd></div><div class="refsect1" lang="en"><a name="id283078"></a><h2>SMB URLS</h2><p> SMB URL's should be specified in the following format:</p><pre class="programlisting">
 smb://[[[domain;]user[:password@]]server[/share[/path[/file]]]]
 </pre><pre class="programlisting">
 smb:// means all the workgroups
 </pre><pre class="programlisting">
 smb://name/ means, if <em class="replaceable"><code>name</code></em> is a workgroup, all the servers in this workgroup, or if <em class="replaceable"><code>name</code></em> is a server, all the shares on this server.
-</pre></div><div class="refsect1" lang="en"><a name="id2506299"></a><h2>EXAMPLES</h2><pre class="programlisting">
+</pre></div><div class="refsect1" lang="en"><a name="id324476"></a><h2>EXAMPLES</h2><pre class="programlisting">
 # Recursively download 'src' directory
 smbget -R smb://rhonwyn/jelmer/src
 # Download FreeBSD ISO and enable resuming
@@ -17,10 +17,10 @@
 smbget -Rr smb://rhonwyn/isos
 # Backup my data on rhonwyn
 smbget -Rr smb://rhonwyn/
-</pre></div><div class="refsect1" lang="en"><a name="id2506316"></a><h2>BUGS</h2><p>Permission denied is returned in some cases where the cause of the error is unknown 
+</pre></div><div class="refsect1" lang="en"><a name="id324490"></a><h2>BUGS</h2><p>Permission denied is returned in some cases where the cause of the error is unknown 
 (such as an illegally formatted smb:// url or trying to get a directory without -R 
-turned on).</p></div><div class="refsect1" lang="en"><a name="id2506329"></a><h2>VERSION</h2><p>This man page is correct for version 3 of 
-	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2506340"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+turned on).</p></div><div class="refsect1" lang="en"><a name="id324502"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of 
+	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id324511"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p>The smbget manpage was written by Jelmer Vernooij.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/smbgetrc.5.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/smbgetrc.5.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/smbgetrc.5.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,17 +1,17 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbgetrc</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbgetrc.5"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbgetrc &#8212; configuration file for smbget</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">smbgetrc</code></p></div><div class="refsect1" lang="en"><a name="id2544118"></a><h2>DESCRIPTION</h2><p>
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbgetrc</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbgetrc.5"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbgetrc &#8212; configuration file for smbget</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">smbgetrc</code></p></div><div class="refsect1" lang="en"><a name="id315548"></a><h2>DESCRIPTION</h2><p>
 		This manual page documents the format and options of the <span class="emphasis"><em>smbgetrc</em></span> 
 		file. This is the configuration file used by the <a class="citerefentry" href="smbget.1.html"><span class="citerefentry"><span class="refentrytitle">smbget</span>(1)</span></a> 
 		utility. The file contains of key-value pairs, one pair on each line. The key 
 			and value should be separated by a space.
 	</p><p>By default, smbget reads its configuration from <span class="emphasis"><em>$HOME/.smbgetrc</em></span>, though 
-		other locations can be specified using the command-line options.</p></div><div class="refsect1" lang="en"><a name="id2544152"></a><h2>OPTIONS</h2><p>
+		other locations can be specified using the command-line options.</p></div><div class="refsect1" lang="en"><a name="id283754"></a><h2>OPTIONS</h2><p>
 	The following keys can be set:
 </p><div class="variablelist"><dl><dt><span class="term">resume on|off</span></dt><dd><p>
 			Whether aborted downloads should be automatically resumed.
 			</p></dd><dt><span class="term">recursive on|off</span></dt><dd><p>Whether directories should be downloaded recursively</p></dd><dt><span class="term">username <em class="replaceable"><code>name</code></em></span></dt><dd><p>Username to use when logging in to the remote server. Use an empty string for anonymous access.
-			</p></dd><dt><span class="term">password <em class="replaceable"><code>pass</code></em></span></dt><dd><p>Password to use when logging in.</p></dd><dt><span class="term">workgroup <em class="replaceable"><code>wg</code></em></span></dt><dd><p>Workgroup to use when logging in</p></dd><dt><span class="term">nonprompt on|off</span></dt><dd><p>Turns off asking for username and password. Useful for scripts.</p></dd><dt><span class="term">debuglevel <em class="replaceable"><code>int</code></em></span></dt><dd><p>(Samba) debuglevel to run at. Useful for tracking down protocol level problems.</p></dd><dt><span class="term">dots on|off</span></dt><dd><p>Whether a single dot should be printed for each block that has been downloaded, instead of the default progress indicator.</p></dd><dt><span class="term">blocksize <em class="replaceable"><code>int</code></em></span></dt><dd><p>Number of bytes to put in a block. </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507292"></a><h2>VERSION</h2><p>This man page is correct for version 3 of 
-	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2507303"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="smbget.1.html"><span class="citerefentry"><span class="refentrytitle">smbget</span>(1)</span></a> and <a class="citerefentry" href="Samba.7.html"><span class="citerefentry"><span class="refentrytitle">Samba</span>(7)</span></a>.
-	</p></div><div class="refsect1" lang="en"><a name="id2507328"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+			</p></dd><dt><span class="term">password <em class="replaceable"><code>pass</code></em></span></dt><dd><p>Password to use when logging in.</p></dd><dt><span class="term">workgroup <em class="replaceable"><code>wg</code></em></span></dt><dd><p>Workgroup to use when logging in</p></dd><dt><span class="term">nonprompt on|off</span></dt><dd><p>Turns off asking for username and password. Useful for scripts.</p></dd><dt><span class="term">debuglevel <em class="replaceable"><code>int</code></em></span></dt><dd><p>(Samba) debuglevel to run at. Useful for tracking down protocol level problems.</p></dd><dt><span class="term">dots on|off</span></dt><dd><p>Whether a single dot should be printed for each block that has been downloaded, instead of the default progress indicator.</p></dd><dt><span class="term">blocksize <em class="replaceable"><code>int</code></em></span></dt><dd><p>Number of bytes to put in a block. </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id283384"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of 
+	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id283394"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="smbget.1.html"><span class="citerefentry"><span class="refentrytitle">smbget</span>(1)</span></a> and <a class="citerefentry" href="Samba.7.html"><span class="citerefentry"><span class="refentrytitle">Samba</span>(7)</span></a>.
+	</p></div><div class="refsect1" lang="en"><a name="id283418"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p>This manual page was written by Jelmer Vernooij</p></div></div></body></html>

Copied: branches/samba/upstream/docs/htmldocs/manpages/smbmnt.8.html (from rev 1928, branches/samba/upstream/docs/htmldocs/manpages/smbmnt.8.html)
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/smbmnt.8.html	                        (rev 0)
+++ branches/samba/upstream/docs/htmldocs/manpages/smbmnt.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,24 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbmnt</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbmnt.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbmnt &#8212; helper utility for mounting SMB filesystems</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbmnt</code> {mount-point} [-s &lt;share&gt;] [-r] [-u &lt;uid&gt;] [-g &lt;gid&gt;] [-f &lt;mask&gt;] [-d &lt;mask&gt;] [-o &lt;options&gt;] [-h]</p></div></div><div class="refsect1" lang="en"><a name="id282739"></a><h2>DESCRIPTION</h2><p><code class="literal">smbmnt</code> is a helper application used 
+	by the smbmount program to do the actual mounting of SMB shares. 
+	<code class="literal">smbmnt</code> can be installed setuid root if you want
+	normal users to be able to mount their SMB shares.</p><p>A setuid smbmnt will only allow mounts on directories owned
+	by the user, and that the user has write permission on.</p><p>The <code class="literal">smbmnt</code> program is normally invoked 
+	by <a class="citerefentry" href="smbmount.8.html"><span class="citerefentry"><span class="refentrytitle">smbmount</span>(8)</span></a>. It should not be invoked directly by users. </p><p>smbmount searches the normal PATH for smbmnt. You must ensure
+	that the smbmnt version in your path matches the smbmount used.</p></div><div class="refsect1" lang="en"><a name="id282787"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-r</span></dt><dd><p>mount the filesystem read-only 
+		</p></dd><dt><span class="term">-u uid</span></dt><dd><p>specify the uid that the files will 
+		be owned by </p></dd><dt><span class="term">-g gid</span></dt><dd><p>specify the gid that the files will be 
+		owned by </p></dd><dt><span class="term">-f mask</span></dt><dd><p>specify the octal file mask applied
+		</p></dd><dt><span class="term">-d mask</span></dt><dd><p>specify the octal directory mask 
+		applied  </p></dd><dt><span class="term">-o options</span></dt><dd><p>
+		list of options that are passed as-is to smbfs, if this
+		command is run on a 2.4 or higher Linux kernel.
+		</p></dd><dt><span class="term">-h|--help</span></dt><dd><p>Print a summary of command line options.
+</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id282882"></a><h2>AUTHOR</h2><p>Volker Lendecke, Andrew Tridgell, Michael H. Warfield 
+	and others.</p><p>The current maintainer of smbfs and the userspace
+	tools <code class="literal">smbmount</code>, <code class="literal">smbumount</code>,
+	and <code class="literal">smbmnt</code> is <a class="ulink" href="mailto:urban at teststation.com" target="_top">Urban Widmark</a>.
+	The <a class="ulink" href="mailto:samba at samba.org" target="_top">SAMBA Mailing list</a>
+	is the preferred place to ask questions regarding these programs.
+	</p><p>The conversion of this manpage for Samba 2.2 was performed 
+	by Gerald Carter. The conversion to DocBook XML 4.2 for Samba 3.0
+	was done by Alexander Bokovoy.</p></div></div></body></html>

Copied: branches/samba/upstream/docs/htmldocs/manpages/smbmount.8.html (from rev 1928, branches/samba/upstream/docs/htmldocs/manpages/smbmount.8.html)
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/smbmount.8.html	                        (rev 0)
+++ branches/samba/upstream/docs/htmldocs/manpages/smbmount.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,110 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbmount</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbmount.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbmount &#8212; mount an smbfs filesystem</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbmount</code> {service} {mount-point} [-o options]</p></div></div><div class="refsect1" lang="en"><a name="id283736"></a><h2>DESCRIPTION</h2><p><code class="literal">smbmount</code> mounts a Linux SMB filesystem. It 
+	is usually invoked as <code class="literal">mount.smbfs</code> by
+	the <a class="citerefentry" href="mount.8.html"><span class="citerefentry"><span class="refentrytitle">mount</span>(8)</span></a> command when using the 
+	"-t smbfs" option. This command only works in Linux, and the kernel must
+	support the smbfs filesystem.</p><p>WARNING: <code class="literal">smbmount</code> is deprecated and not
+	maintained any longer. <code class="literal">mount.cifs</code> (mount -t cifs)
+	should be used instead of <code class="literal">smbmount</code>.</p><p>Options to <code class="literal">smbmount</code> are specified as a comma-separated
+	list of key=value pairs. It is possible to send options other
+	than those listed here, assuming that smbfs supports them. If
+	you get mount failures, check your kernel log for errors on
+	unknown options.</p><p><code class="literal">smbmount</code> is a daemon. After mounting it keeps running until
+	the mounted smbfs is umounted. It will log things that happen
+	when in daemon mode using the "machine name" smbmount, so
+	typically this output will end up in <code class="filename">log.smbmount</code>. The <code class="literal">
+	smbmount</code> process may also be called mount.smbfs.</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p> <code class="literal">smbmount</code> 
+	calls <a class="citerefentry" href="smbmnt.8.html"><span class="citerefentry"><span class="refentrytitle">smbmnt</span>(8)</span></a> to do the actual mount. You 
+	must make sure that <code class="literal">smbmnt</code> is in the path so 
+	that it can be found. </p></div></div><div class="refsect1" lang="en"><a name="id283356"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">username=&lt;arg&gt;</span></dt><dd><p>
+		specifies the username to connect as. If this is not given, then the environment variable <code class="envar"> USER</code>
+		is used. This option can also take the form "user%password" or "user/workgroup" or "user/workgroup%password"
+		to allow the password and workgroup to be specified as part of the username.
+		</p></dd><dt><span class="term">password=&lt;arg&gt;</span></dt><dd><p>
+		specifies the SMB password. If this option is not given then the environment 
+		variable <code class="literal">PASSWD</code> is used. If it can find no password 
+		<code class="literal">smbmount</code> will prompt for a password, unless the guest option is given.
+		</p><p>
+		Note that passwords which contain the argument delimiter character (i.e. a comma ',') will failed to be parsed
+		correctly on the command line.  However, the same password defined in the PASSWD environment variable or a
+		credentials file (see below) will be read correctly.
+		</p></dd><dt><span class="term">credentials=&lt;filename&gt;</span></dt><dd><p>specifies a file that contains a username and/or password. 
+The format of the file is:
+</p><pre class="programlisting">
+username=value
+password=value
+</pre><p>This is preferred over having passwords in plaintext in a
+		shared file, such as <code class="filename">/etc/fstab</code>. Be sure to protect any
+		credentials file properly.
+		</p></dd><dt><span class="term">krb</span></dt><dd><p>Use kerberos (Active Directory). </p></dd><dt><span class="term">netbiosname=&lt;arg&gt;</span></dt><dd><p>sets the source NetBIOS name. It defaults 
+		to the local hostname. </p></dd><dt><span class="term">uid=&lt;arg&gt;</span></dt><dd><p>sets the uid that will own all files on
+		the mounted filesystem.
+		It may be specified as either a username or a numeric uid.
+		</p></dd><dt><span class="term">gid=&lt;arg&gt;</span></dt><dd><p>sets the gid that will own all files on
+		the mounted filesystem.
+		It may be specified as either a groupname or a numeric 
+		gid. </p></dd><dt><span class="term">port=&lt;arg&gt;</span></dt><dd><p>sets the remote SMB port number. The default 
+		is 445, fallback is 139. </p></dd><dt><span class="term">fmask=&lt;arg&gt;</span></dt><dd><p>sets the file mask. This determines the 
+		permissions that remote files have in the local filesystem. 
+		This is not a umask, but the actual permissions for the files.
+		The default is based on the current umask. </p></dd><dt><span class="term">dmask=&lt;arg&gt;</span></dt><dd><p>Sets the directory mask. This determines the 
+		permissions that remote directories have in the local filesystem. 
+		This is not a umask, but the actual permissions for the directories.
+		The default is based on the current umask. </p></dd><dt><span class="term">debug=&lt;arg&gt;</span></dt><dd><p>Sets the debug level. This is useful for 
+		tracking down SMB connection problems. A suggested value to
+		start with is 4. If set too high there will be a lot of
+		output, possibly hiding the useful output.</p></dd><dt><span class="term">ip=&lt;arg&gt;</span></dt><dd><p>Sets the destination host or IP address.
+		</p></dd><dt><span class="term">workgroup=&lt;arg&gt;</span></dt><dd><p>Sets the workgroup on the destination </p></dd><dt><span class="term">sockopt=&lt;arg&gt;</span></dt><dd><p>Sets the TCP socket options. See the <a class="ulink" href="smb.conf.5.html#SOCKETOPTIONS" target="_top"><a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a></a> <em class="parameter"><code>socket options</code></em> option.
+		</p></dd><dt><span class="term">scope=&lt;arg&gt;</span></dt><dd><p>Sets the NetBIOS scope </p></dd><dt><span class="term">guest</span></dt><dd><p>Don't prompt for a password </p></dd><dt><span class="term">ro</span></dt><dd><p>mount read-only </p></dd><dt><span class="term">rw</span></dt><dd><p>mount read-write </p></dd><dt><span class="term">iocharset=&lt;arg&gt;</span></dt><dd><p>
+		sets the charset used by the Linux side for codepage
+		to charset translations (NLS). Argument should be the
+		name of a charset, like iso8859-1. (Note: only kernel
+		2.4.0 or later)
+		</p></dd><dt><span class="term">codepage=&lt;arg&gt;</span></dt><dd><p>
+		sets the codepage the server uses. See the iocharset
+		option. Example value cp850. (Note: only kernel 2.4.0
+		or later)
+		</p></dd><dt><span class="term">ttl=&lt;arg&gt;</span></dt><dd><p>
+		sets how long a directory listing is cached in milliseconds
+		(also affects visibility of file size and date
+		changes). A higher value means that changes on the
+		server take longer to be noticed but it can give
+		better performance on large directories, especially
+		over long distances. Default is 1000ms but something
+		like 10000ms (10 seconds) is probably more reasonable
+		in many cases.
+		(Note: only kernel 2.4.2 or later)
+		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id324483"></a><h2>ENVIRONMENT VARIABLES</h2><p>The variable <code class="envar">USER</code> may contain the username of the
+	person using the client.  This information is used only if the
+	protocol level is high enough to support session-level
+	passwords. The variable can be used to set both username and
+	password by using the format username%password.</p><p>The variable <code class="envar">PASSWD</code> may contain the password of the
+	person using the client.  This information is used only if the
+	protocol level is high enough to support session-level
+	passwords.</p><p>The variable <code class="envar">PASSWD_FILE</code> may contain the pathname
+	of a file to read the password from. A single line of input is
+	read and used as the password.</p></div><div class="refsect1" lang="en"><a name="id324513"></a><h2>OTHER COMMANDS</h2><p>
+	File systems that have been mounted using the <code class="literal">smbmount</code>
+	can be unmounted using the <code class="literal">smbumount</code> or the UNIX system
+	<code class="literal">umount</code> command.
+	</p></div><div class="refsect1" lang="en"><a name="id324538"></a><h2>BUGS</h2><p>Passwords and other options containing , can not be handled.
+	For passwords an alternative way of passing them is in a credentials
+	file or in the PASSWD environment.</p><p>The credentials file does not handle usernames or passwords with
+	leading space.</p><p>One smbfs bug is important enough to mention here, even if it
+	is a bit misplaced:</p><div class="itemizedlist"><ul type="disc"><li><p>Mounts sometimes stop working. This is usually
+	caused by smbmount terminating. Since smbfs needs smbmount to
+	reconnect when the server disconnects, the mount will eventually go
+	dead. An umount/mount normally fixes this. At least 2 ways to
+	trigger this bug are known.</p></li></ul></div><p>Note that the typical response to a bug report is suggestion
+	to try the latest version first. So please try doing that first,
+	and always include which versions you use of relevant software
+	when reporting bugs (minimum: samba, kernel, distribution)</p></div><div class="refsect1" lang="en"><a name="id324573"></a><h2>SEE ALSO</h2><p>Documentation/filesystems/smbfs.txt in the linux kernel
+	source tree may contain additional options and information.</p><p>FreeBSD also has a smbfs, but it is not related to smbmount</p><p>For Solaris, HP-UX and others you may want to look at <a class="citerefentry" href="smbsh.1.html"><span class="citerefentry"><span class="refentrytitle">smbsh</span>(1)</span></a> or at other solutions, such as 
+	Sharity or perhaps replacing the SMB server with a NFS server.</p></div><div class="refsect1" lang="en"><a name="id324598"></a><h2>AUTHOR</h2><p>Volker Lendecke, Andrew Tridgell, Michael H. Warfield 
+	and others.</p><p>The current maintainer of smbfs and the userspace
+	tools <code class="literal">smbmount</code>, <code class="literal">smbumount</code>,
+	and <code class="literal">smbmnt</code> is <a class="ulink" href="mailto:urban at teststation.com" target="_top">Urban Widmark</a>.
+	The <a class="ulink" href="mailto:samba at samba.org" target="_top">SAMBA Mailing list</a>
+	is the preferred place to ask questions regarding these programs.
+	</p><p>The conversion of this manpage for Samba 2.2 was performed 
+	by Gerald Carter. The conversion to DocBook XML 4.2 for Samba 3.0
+	was done by Alexander Bokovoy.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/smbpasswd.5.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/smbpasswd.5.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/smbpasswd.5.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,8 +1,8 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbpasswd</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbpasswd.5"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbpasswd &#8212; The Samba encrypted password file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">smbpasswd</code></p></div><div class="refsect1" lang="en"><a name="id2544118"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>smbpasswd is the Samba encrypted password file. It contains 
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbpasswd</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbpasswd.5"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbpasswd &#8212; The Samba encrypted password file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><p><code class="filename">smbpasswd</code></p></div><div class="refsect1" lang="en"><a name="id315548"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>smbpasswd is the Samba encrypted password file. It contains 
 	the username, Unix user id and the SMB hashed passwords of the 
 	user, as well as account flag information and the time the 
 	password was last changed. This file format has been evolving with 
-	Samba and has had several different formats in the past. </p></div><div class="refsect1" lang="en"><a name="id2544145"></a><h2>FILE FORMAT</h2><p>The format of the smbpasswd file used by Samba 2.2 
+	Samba and has had several different formats in the past. </p></div><div class="refsect1" lang="en"><a name="id283750"></a><h2>FILE FORMAT</h2><p>The format of the smbpasswd file used by Samba 2.2 
 	is very similar to the familiar Unix <code class="filename">passwd(5)</code> 
 	file. It is an ASCII file containing one line for each user. Each field 
 	ithin each line is separated from the next by a colon. Any entry 
@@ -76,10 +76,10 @@
 		last modified. It consists of the characters 'LCT-' (standing for 
 		"Last Change Time") followed by a numeric encoding of the UNIX time 
 		in seconds since the epoch (1970) that the last change was made. 
-		</p></dd></dl></div><p>All other colon separated fields are ignored at this time.</p></div><div class="refsect1" lang="en"><a name="id2507422"></a><h2>VERSION</h2><p>This man page is correct for version 3 of 
-	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2507433"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="smbpasswd.8.html"><span class="citerefentry"><span class="refentrytitle">smbpasswd</span>(8)</span></a>, <a class="citerefentry" href="Samba.7.html"><span class="citerefentry"><span class="refentrytitle">Samba</span>(7)</span></a>, and
+		</p></dd></dl></div><p>All other colon separated fields are ignored at this time.</p></div><div class="refsect1" lang="en"><a name="id282932"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of 
+	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id282942"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="smbpasswd.8.html"><span class="citerefentry"><span class="refentrytitle">smbpasswd</span>(8)</span></a>, <a class="citerefentry" href="Samba.7.html"><span class="citerefentry"><span class="refentrytitle">Samba</span>(7)</span></a>, and
 	the Internet RFC1321 for details on the MD4 algorithm.
-	</p></div><div class="refsect1" lang="en"><a name="id2507459"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+	</p></div><div class="refsect1" lang="en"><a name="id282967"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p>The original Samba man pages were written by Karl Auer. 

Modified: branches/samba/upstream/docs/htmldocs/manpages/smbpasswd.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/smbpasswd.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/smbpasswd.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbpasswd</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbpasswd.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbpasswd &#8212; change a user's SMB password</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbpasswd</code> [-a] [-c &lt;config file&gt;] [-x] [-d] [-e] [-D debuglevel] [-n] [-r &lt;remote machine&gt;] [-R &lt;name resolve order&gt;] [-m] [-U username[%password]] [-h] [-s] [-w pass] [-W] [-i] [-L] [username]</p></div></div><div class="refsect1" lang="en"><a name="id2507277"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The smbpasswd program has several different 
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbpasswd</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbpasswd.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbpasswd &#8212; change a user's SMB password</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbpasswd</code> [-a] [-c &lt;config file&gt;] [-x] [-d] [-e] [-D debuglevel] [-n] [-r &lt;remote machine&gt;] [-R &lt;name resolve order&gt;] [-m] [-U username[%password]] [-h] [-s] [-w pass] [-W] [-i] [-L] [username]</p></div></div><div class="refsect1" lang="en"><a name="id283379"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The smbpasswd program has several different 
 	functions, depending on whether it is run by the <span class="emphasis"><em>root</em></span> user 
 	or not. When run as a normal user it allows the user to change 
 	the password used for their SMB sessions on any machines that store 
@@ -25,7 +25,7 @@
 	the attributes of the user in this file to be made. When run by root, <code class="literal">
 	smbpasswd</code> accesses the local smbpasswd file 
 	directly, thus enabling changes to be made even if smbd is not 
-	running. </p></div><div class="refsect1" lang="en"><a name="id2507398"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-a</span></dt><dd><p>
+	running. </p></div><div class="refsect1" lang="en"><a name="id282931"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-a</span></dt><dd><p>
 		This option specifies that the username following should be added to the local smbpasswd file, with the new
 		password typed (type &lt;Enter&gt; for the old password). This option is ignored if the username following
 		already exists in the smbpasswd file and it is treated like a regular change password command.  Note that the
@@ -151,7 +151,7 @@
 		<span class="emphasis"><em>root only</em></span> options to operate on. Only root 
 		can specify this parameter as only root has the permission needed 
 		to modify attributes directly in the local smbpasswd file. 
-		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2553578"></a><h2>NOTES</h2><p>Since <code class="literal">smbpasswd</code> works in client-server 
+		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id324951"></a><h2>NOTES</h2><p>Since <code class="literal">smbpasswd</code> works in client-server 
 	mode communicating  with a local smbd for a non-root user then 
 	the smbd daemon must be running for this to work. A common problem 
 	is to add a restriction to the hosts that may access the <code class="literal">
@@ -159,7 +159,7 @@
 	hosts</code></em> or <em class="parameter"><code>deny hosts</code></em> entry in 
 	the <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a> file and neglecting to 
 	allow "localhost" access to the smbd. </p><p>In addition, the smbpasswd command is only useful if Samba
-	has been set up to use encrypted passwords. </p></div><div class="refsect1" lang="en"><a name="id2553630"></a><h2>VERSION</h2><p>This man page is correct for version 3 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2553641"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="smbpasswd.5.html"><span class="citerefentry"><span class="refentrytitle">smbpasswd</span>(5)</span></a>, <a class="citerefentry" href="Samba.7.html"><span class="citerefentry"><span class="refentrytitle">Samba</span>(7)</span></a>.</p></div><div class="refsect1" lang="en"><a name="id2553666"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+	has been set up to use encrypted passwords. </p></div><div class="refsect1" lang="en"><a name="id324996"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id325006"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="smbpasswd.5.html"><span class="citerefentry"><span class="refentrytitle">smbpasswd</span>(5)</span></a>, <a class="citerefentry" href="Samba.7.html"><span class="citerefentry"><span class="refentrytitle">Samba</span>(7)</span></a>.</p></div><div class="refsect1" lang="en"><a name="id325030"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p>The original Samba man pages were written by Karl Auer. 

Modified: branches/samba/upstream/docs/htmldocs/manpages/smbsh.1.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/smbsh.1.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/smbsh.1.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,9 +1,9 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbsh</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbsh.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbsh &#8212; Allows access to remote SMB shares
-	using UNIX commands</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbsh</code> [-W workgroup] [-U username] [-P prefix] [-R &lt;name resolve order&gt;] [-d &lt;debug level&gt;] [-l logdir] [-L libdir]</p></div></div><div class="refsect1" lang="en"><a name="id2507195"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">smbsh</code> allows you to access an NT filesystem 
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbsh</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbsh.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbsh &#8212; Allows access to remote SMB shares
+	using UNIX commands</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbsh</code> [-W workgroup] [-U username] [-P prefix] [-R &lt;name resolve order&gt;] [-d &lt;debug level&gt;] [-l logdir] [-L libdir]</p></div></div><div class="refsect1" lang="en"><a name="id282765"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">smbsh</code> allows you to access an NT filesystem 
 	using UNIX commands such as <code class="literal">ls</code>, <code class="literal">
 	egrep</code>, and <code class="literal">rcp</code>. You must use a 
 	shell that is dynamically linked in order for <code class="literal">smbsh</code> 
-	to work correctly.</p></div><div class="refsect1" lang="en"><a name="id2507248"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-W WORKGROUP</span></dt><dd><p>Override the default workgroup specified in the 
+	to work correctly.</p></div><div class="refsect1" lang="en"><a name="id282815"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-W WORKGROUP</span></dt><dd><p>Override the default workgroup specified in the 
 		workgroup parameter of the <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a> file 
 		for this session. This may be needed to connect to some 
 		servers. </p></dd><dt><span class="term">-U username[%pass]</span></dt><dd><p>Sets the SMB username or username and password.
@@ -72,7 +72,7 @@
 resolution methods will be attempted in this order. </p></dd><dt><span class="term">-L libdir</span></dt><dd><p>This parameter specifies the location of the 
 		shared libraries used by <code class="literal">smbsh</code>. The default
 		value is specified at compile time.
-		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2506378"></a><h2>EXAMPLES</h2><p>To use the <code class="literal">smbsh</code> command, execute <code class="literal">
+		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id324538"></a><h2>EXAMPLES</h2><p>To use the <code class="literal">smbsh</code> command, execute <code class="literal">
 	smbsh</code> from the prompt and enter the username and password 
 	that authenticates you to the machine running the Windows NT 
 	operating system.
@@ -89,14 +89,14 @@
 	<code class="literal">ls /smb/MYGROUP/&lt;machine-name&gt;</code> will show the share 
 	names for that machine. You could then, for example, use the <code class="literal">
 	cd</code> command to change directories, <code class="literal">vi</code> to 
-	edit files, and <code class="literal">rcp</code>  to copy files.</p></div><div class="refsect1" lang="en"><a name="id2506489"></a><h2>VERSION</h2><p>This man page is correct for version 3 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2506500"></a><h2>BUGS</h2><p><code class="literal">smbsh</code> works by intercepting the standard 
+	edit files, and <code class="literal">rcp</code>  to copy files.</p></div><div class="refsect1" lang="en"><a name="id324634"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id324644"></a><h2>BUGS</h2><p><code class="literal">smbsh</code> works by intercepting the standard 
 	libc calls with the dynamically loaded versions in <code class="filename">
 	smbwrapper.o</code>. Not all calls have been "wrapped", so 
 	some programs may not function correctly under <code class="literal">smbsh
 	</code>.</p><p>Programs which are not dynamically linked cannot make 
 	use of <code class="literal">smbsh</code>'s functionality. Most versions 
 	of UNIX have a <code class="literal">file</code> command that will 
-	describe how a program was linked.</p></div><div class="refsect1" lang="en"><a name="id2506547"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a>, <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a></p></div><div class="refsect1" lang="en"><a name="id2506570"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+	describe how a program was linked.</p></div><div class="refsect1" lang="en"><a name="id324684"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a>, <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a></p></div><div class="refsect1" lang="en"><a name="id324707"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p>The original Samba man pages were written by Karl Auer. 

Modified: branches/samba/upstream/docs/htmldocs/manpages/smbspool.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/smbspool.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/smbspool.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbspool</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbspool.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbspool &#8212; send a print file to an SMB printer</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbspool</code> {job} {user} {title} {copies} {options} [filename]</p></div></div><div class="refsect1" lang="en"><a name="id2507186"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>smbspool is a very small print spooling program that 
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbspool</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbspool.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbspool &#8212; send a print file to an SMB printer</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbspool</code> {job} {user} {title} {copies} {options} [filename]</p></div></div><div class="refsect1" lang="en"><a name="id282733"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>smbspool is a very small print spooling program that 
 	sends a print file to an SMB printer. The command-line arguments 
 	are position-dependent for compatibility with the Common UNIX 
 	Printing System, but you can use smbspool with any printing system 
@@ -10,7 +10,7 @@
 	or argv[1] if that is not the case.</p><p>Programs using the <code class="literal">exec(2)</code> functions can 
 	pass the URI in argv[0], while shell scripts must set the 
 	<code class="envar">DEVICE_URI</code> environment variable prior to
-	running smbspool.</p></div><div class="refsect1" lang="en"><a name="id2507276"></a><h2>OPTIONS</h2><div class="itemizedlist"><ul type="disc"><li><p>The job argument (argv[1]) contains the 
+	running smbspool.</p></div><div class="refsect1" lang="en"><a name="id283370"></a><h2>OPTIONS</h2><div class="itemizedlist"><ul type="disc"><li><p>The job argument (argv[1]) contains the 
 		job ID number and is presently not used by smbspool.
 		</p></li><li><p>The user argument (argv[2]) contains the 
 		print user's name and is presently not used by smbspool.
@@ -23,7 +23,7 @@
 		the print options in a single string and is currently 
 		not used by smbspool.</p></li><li><p>The filename argument (argv[6]) contains the 
 		name of the file to print. If this argument is not specified 
-		then the print file is read from the standard input.</p></li></ul></div></div><div class="refsect1" lang="en"><a name="id2507327"></a><h2>VERSION</h2><p>This man page is correct for version 3 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2507338"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> and <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a>.</p></div><div class="refsect1" lang="en"><a name="id2507362"></a><h2>AUTHOR</h2><p><code class="literal">smbspool</code> was written by Michael Sweet 
+		then the print file is read from the standard input.</p></li></ul></div></div><div class="refsect1" lang="en"><a name="id283414"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id283424"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> and <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a>.</p></div><div class="refsect1" lang="en"><a name="id282899"></a><h2>AUTHOR</h2><p><code class="literal">smbspool</code> was written by Michael Sweet 
 	at Easy Software Products.</p><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 

Modified: branches/samba/upstream/docs/htmldocs/manpages/smbstatus.1.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/smbstatus.1.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/smbstatus.1.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,5 +1,5 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbstatus</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbstatus.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbstatus &#8212; report on current Samba connections</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbstatus</code> [-P] [-b] [-d &lt;debug level&gt;] [-v] [-L] [-B] [-p] [-S] [-s &lt;configuration file&gt;] [-u &lt;username&gt;]</p></div></div><div class="refsect1" lang="en"><a name="id2507216"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">smbstatus</code> is a very simple program to 
-	list the current Samba connections.</p></div><div class="refsect1" lang="en"><a name="id2507244"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-P|--profile</span></dt><dd><p>If samba has been compiled with the 
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbstatus</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbstatus.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbstatus &#8212; report on current Samba connections</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbstatus</code> [-P] [-b] [-d &lt;debug level&gt;] [-v] [-L] [-B] [-p] [-S] [-s &lt;configuration file&gt;] [-u &lt;username&gt;]</p></div></div><div class="refsect1" lang="en"><a name="id282762"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">smbstatus</code> is a very simple program to 
+	list the current Samba connections.</p></div><div class="refsect1" lang="en"><a name="id282788"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-P|--profile</span></dt><dd><p>If samba has been compiled with the 
 		profiling option, print only the contents of the profiling 
 		shared memory area.</p></dd><dt><span class="term">-b|--brief</span></dt><dd><p>gives brief output.</p></dd><dt><span class="term">-d|--debuglevel=level</span></dt><dd><p><em class="replaceable"><code>level</code></em> is an integer 
 from 0 to 10. The default value if this parameter is 
@@ -28,8 +28,8 @@
 </p></dd><dt><span class="term">-v|--verbose</span></dt><dd><p>gives verbose output.</p></dd><dt><span class="term">-L|--locks</span></dt><dd><p>causes smbstatus to only list locks.</p></dd><dt><span class="term">-B|--byterange</span></dt><dd><p>causes smbstatus to include byte range locks.
 		</p></dd><dt><span class="term">-p|--processes</span></dt><dd><p>print a list of <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> processes and exit. 
 		Useful for scripting.</p></dd><dt><span class="term">-S|--shares</span></dt><dd><p>causes smbstatus to only list shares.</p></dd><dt><span class="term">-h|--help</span></dt><dd><p>Print a summary of command line options.
-</p></dd><dt><span class="term">-u|--user=&lt;username&gt;</span></dt><dd><p>selects information relevant to <em class="parameter"><code>username</code></em> only.</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2506309"></a><h2>VERSION</h2><p>This man page is correct for version 3 of 
-	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2506320"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> and <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a>.</p></div><div class="refsect1" lang="en"><a name="id2506345"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+</p></dd><dt><span class="term">-u|--user=&lt;username&gt;</span></dt><dd><p>selects information relevant to <em class="parameter"><code>username</code></em> only.</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id324482"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of 
+	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id324491"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> and <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a>.</p></div><div class="refsect1" lang="en"><a name="id324515"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p>The original Samba man pages were written by Karl Auer. 

Modified: branches/samba/upstream/docs/htmldocs/manpages/smbtar.1.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/smbtar.1.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/smbtar.1.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,6 +1,6 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbtar</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbtar.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbtar &#8212; shell script for backing up SMB/CIFS shares 
-	directly to UNIX tape drives</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbtar</code> [-r] [-i] [-a] [-v] {-s server} [-p password] [-x services] [-X] [-N filename] [-b blocksize] [-d directory] [-l loglevel] [-u user] [-t tape] {filenames}</p></div></div><div class="refsect1" lang="en"><a name="id2507255"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">smbtar</code> is a very small shell script on top 
-	of <a class="citerefentry" href="smbclient.1.html"><span class="citerefentry"><span class="refentrytitle">smbclient</span>(1)</span></a> which dumps SMB shares directly to tape.</p></div><div class="refsect1" lang="en"><a name="id2507289"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-s server</span></dt><dd><p>The SMB/CIFS server that the share resides 
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbtar</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbtar.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbtar &#8212; shell script for backing up SMB/CIFS shares 
+	directly to UNIX tape drives</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbtar</code> [-r] [-i] [-a] [-v] {-s server} [-p password] [-x services] [-X] [-N filename] [-b blocksize] [-d directory] [-l loglevel] [-u user] [-t tape] {filenames}</p></div></div><div class="refsect1" lang="en"><a name="id283357"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">smbtar</code> is a very small shell script on top 
+	of <a class="citerefentry" href="smbclient.1.html"><span class="citerefentry"><span class="refentrytitle">smbclient</span>(1)</span></a> which dumps SMB shares directly to tape.</p></div><div class="refsect1" lang="en"><a name="id283391"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-s server</span></dt><dd><p>The SMB/CIFS server that the share resides 
 		upon.</p></dd><dt><span class="term">-x service</span></dt><dd><p>The share name on the server to connect to. 
 		The default is "backup".</p></dd><dt><span class="term">-X</span></dt><dd><p>Exclude mode. Exclude filenames... from tar 
 		create or restore. </p></dd><dt><span class="term">-d directory</span></dt><dd><p>Change to initial <em class="parameter"><code>directory
@@ -17,14 +17,14 @@
 		up if they have the archive bit set. The archive bit is reset 
 		after each file is read. </p></dd><dt><span class="term">-r</span></dt><dd><p>Restore. Files are restored to the share 
 		from the tar file. </p></dd><dt><span class="term">-l log level</span></dt><dd><p>Log (debug) level. Corresponds to the 
-		<em class="parameter"><code>-d</code></em> flag of <a class="citerefentry" href="smbclient.1.html"><span class="citerefentry"><span class="refentrytitle">smbclient</span>(1)</span></a>.</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507507"></a><h2>ENVIRONMENT VARIABLES</h2><p>The <em class="parameter"><code>$TAPE</code></em> variable specifies the 
+		<em class="parameter"><code>-d</code></em> flag of <a class="citerefentry" href="smbclient.1.html"><span class="citerefentry"><span class="refentrytitle">smbclient</span>(1)</span></a>.</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id283046"></a><h2>ENVIRONMENT VARIABLES</h2><p>The <em class="parameter"><code>$TAPE</code></em> variable specifies the 
 	default tape device to write to. May be overridden
-	with the -t option. </p></div><div class="refsect1" lang="en"><a name="id2506248"></a><h2>BUGS</h2><p>The <code class="literal">smbtar</code> script has different 
-	options from ordinary tar and from smbclient's tar command. </p></div><div class="refsect1" lang="en"><a name="id2506265"></a><h2>CAVEATS</h2><p>Sites that are more careful about security may not like 
+	with the -t option. </p></div><div class="refsect1" lang="en"><a name="id283063"></a><h2>BUGS</h2><p>The <code class="literal">smbtar</code> script has different 
+	options from ordinary tar and from smbclient's tar command. </p></div><div class="refsect1" lang="en"><a name="id283079"></a><h2>CAVEATS</h2><p>Sites that are more careful about security may not like 
 	the way the script handles PC passwords. Backup and restore work 
 	on entire shares; should work on file lists. smbtar works best
-	with GNU tar and may not work well with other versions. </p></div><div class="refsect1" lang="en"><a name="id2506279"></a><h2>DIAGNOSTICS</h2><p>See the <span class="emphasis"><em>DIAGNOSTICS</em></span> section for the <a class="citerefentry" href="smbclient.1.html"><span class="citerefentry"><span class="refentrytitle">smbclient</span>(1)</span></a> command.</p></div><div class="refsect1" lang="en"><a name="id2506302"></a><h2>VERSION</h2><p>This man page is correct for version 3 of 
-	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2506313"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a>, <a class="citerefentry" href="smbclient.1.html"><span class="citerefentry"><span class="refentrytitle">smbclient</span>(1)</span></a>, <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a>.</p></div><div class="refsect1" lang="en"><a name="id2506347"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+	with GNU tar and may not work well with other versions. </p></div><div class="refsect1" lang="en"><a name="id283091"></a><h2>DIAGNOSTICS</h2><p>See the <span class="emphasis"><em>DIAGNOSTICS</em></span> section for the <a class="citerefentry" href="smbclient.1.html"><span class="citerefentry"><span class="refentrytitle">smbclient</span>(1)</span></a> command.</p></div><div class="refsect1" lang="en"><a name="id324476"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of 
+	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id324485"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a>, <a class="citerefentry" href="smbclient.1.html"><span class="citerefentry"><span class="refentrytitle">smbclient</span>(1)</span></a>, <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a>.</p></div><div class="refsect1" lang="en"><a name="id324517"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p><a class="ulink" href="mailto:poultenr at logica.co.uk" target="_top">Ricky Poulten</a>  

Modified: branches/samba/upstream/docs/htmldocs/manpages/smbtree.1.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/smbtree.1.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/smbtree.1.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,10 +1,10 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbtree</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbtree.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbtree &#8212; A text based smb network browser
-	</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbtree</code> [-b] [-D] [-S]</p></div></div><div class="refsect1" lang="en"><a name="id2544145"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">smbtree</code> is a smb browser program 
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbtree</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbtree.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbtree &#8212; A text based smb network browser
+	</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbtree</code> [-b] [-D] [-S]</p></div></div><div class="refsect1" lang="en"><a name="id283752"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">smbtree</code> is a smb browser program 
 	in text mode. It is similar to the "Network Neighborhood" found 
 	on Windows computers. It prints a tree with all 
 	the known domains, the servers in those domains and 
 	the shares on the servers.
-	</p></div><div class="refsect1" lang="en"><a name="id2507191"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-b</span></dt><dd><p>Query network nodes by sending requests 
+	</p></div><div class="refsect1" lang="en"><a name="id282737"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-b</span></dt><dd><p>Query network nodes by sending requests 
 		as broadcasts instead of querying the local master browser.
 		</p></dd><dt><span class="term">-D</span></dt><dd><p>Only print a list of all 
 		the domains known on broadcast or by the 
@@ -67,8 +67,8 @@
 via the <code class="literal">ps</code> command.  To be safe always allow
 <code class="literal">rpcclient</code> to prompt for a password and type
 it in directly. </p></dd><dt><span class="term">-h|--help</span></dt><dd><p>Print a summary of command line options.
-</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2506310"></a><h2>VERSION</h2><p>This man page is correct for version 3 of the Samba 
-	suite.</p></div><div class="refsect1" lang="en"><a name="id2506321"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id324469"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of the Samba 
+	suite.</p></div><div class="refsect1" lang="en"><a name="id324479"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p>The smbtree man page was written by Jelmer Vernooij. </p></div></div></body></html>

Copied: branches/samba/upstream/docs/htmldocs/manpages/smbumount.8.html (from rev 1928, branches/samba/upstream/docs/htmldocs/manpages/smbumount.8.html)
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/smbumount.8.html	                        (rev 0)
+++ branches/samba/upstream/docs/htmldocs/manpages/smbumount.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,17 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>smbumount</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="smbumount.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>smbumount &#8212; smbfs umount for normal users</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">smbumount</code> {mount-point}</p></div></div><div class="refsect1" lang="en"><a name="id315543"></a><h2>DESCRIPTION</h2><p>With this program, normal users can unmount smb-filesystems, 
+	provided that it is suid root.  <code class="literal">smbumount</code> has 
+	been written to give normal Linux users more control over their 
+	resources. It is safe to install this program suid root, because only 
+	the user who has mounted a filesystem is allowed to unmount it again.  
+	For root it is not necessary to use smbumount. The normal umount 
+	program works perfectly well.</p><p>WARNING: <code class="literal">smbumount</code> is deprecated and not
+        maintained any longer. <code class="literal">umount.cifs</code> 
+        should be used instead of <code class="literal">smbumount</code>.</p></div><div class="refsect1" lang="en"><a name="id283761"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">mount-point</span></dt><dd><p>The directory to unmount.</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id282739"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="smbmount.8.html"><span class="citerefentry"><span class="refentrytitle">smbmount</span>(8)</span></a></p></div><div class="refsect1" lang="en"><a name="id282755"></a><h2>AUTHOR</h2><p>Volker Lendecke, Andrew Tridgell, Michael H. Warfield 
+	and others.</p><p>The current maintainer of smbfs and the userspace
+	tools <code class="literal">smbmount</code>, <code class="literal">smbumount</code>,
+	and <code class="literal">smbmnt</code> is <a class="ulink" href="mailto:urban at teststation.com" target="_top">Urban Widmark</a>.
+	The <a class="ulink" href="mailto:samba at samba.org" target="_top">SAMBA Mailing list</a>
+	is the preferred place to ask questions regarding these programs.
+	</p><p>The conversion of this manpage for Samba 2.2 was performed 
+	by Gerald Carter. The conversion to DocBook XML 4.2 for Samba 3.0
+	was done by Alexander Bokovoy.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/swat.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/swat.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/swat.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,8 +1,8 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>swat</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="swat.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>swat &#8212; Samba Web Administration Tool</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">swat</code> [-s &lt;smb config file&gt;] [-a] [-P]</p></div></div><div class="refsect1" lang="en"><a name="id2544144"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">swat</code> allows a Samba administrator to 
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>swat</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="swat.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>swat &#8212; Samba Web Administration Tool</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">swat</code> [-s &lt;smb config file&gt;] [-a] [-P]</p></div></div><div class="refsect1" lang="en"><a name="id283767"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">swat</code> allows a Samba administrator to 
 	configure the complex <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a> file via a Web browser. In addition, 
 	a <code class="literal">swat</code> configuration page has help links 
 	to all the configurable options in the <code class="filename">smb.conf</code> file allowing an 
-	administrator to easily look up the effects of any change. </p><p><code class="literal">swat</code> is run from <code class="literal">inetd</code> </p></div><div class="refsect1" lang="en"><a name="id2507226"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-s smb configuration file</span></dt><dd><p>The default configuration file path is 
+	administrator to easily look up the effects of any change. </p><p><code class="literal">swat</code> is run from <code class="literal">inetd</code> </p></div><div class="refsect1" lang="en"><a name="id282794"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-s smb configuration file</span></dt><dd><p>The default configuration file path is 
 		determined at compile time.  The file specified contains 
 		the configuration details required by the <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> server. This is the file 
 		that <code class="literal">swat</code> will modify. 
@@ -41,14 +41,14 @@
 <code class="constant">".progname"</code> will be appended (e.g. log.smbclient, 
 log.smbd, etc...). The log file is never removed by the client.
 </p></dd><dt><span class="term">-h|--help</span></dt><dd><p>Print a summary of command line options.
-</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2506267"></a><h2>INSTALLATION</h2><p>Swat is included as binary package with most distributions. The 
+</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id283106"></a><h2>INSTALLATION</h2><p>Swat is included as binary package with most distributions. The 
 	package manager in this case takes care of the installation and 
 	configuration. This section is only for those who have compiled 
 	swat from scratch.
 	</p><p>After you compile SWAT you need to run <code class="literal">make install
 	</code> to install the <code class="literal">swat</code> binary
 	and the various help files and images. A default install would put 
-	these in: </p><div class="itemizedlist"><ul type="disc"><li><p>/usr/local/samba/sbin/swat</p></li><li><p>/usr/local/samba/swat/images/*</p></li><li><p>/usr/local/samba/swat/help/*</p></li></ul></div><div class="refsect2" lang="en"><a name="id2506315"></a><h3>Inetd Installation</h3><p>You need to edit your <code class="filename">/etc/inetd.conf
+	these in: </p><div class="itemizedlist"><ul type="disc"><li><p>/usr/local/samba/sbin/swat</p></li><li><p>/usr/local/samba/swat/images/*</p></li><li><p>/usr/local/samba/swat/help/*</p></li></ul></div><div class="refsect2" lang="en"><a name="id324495"></a><h3>Inetd Installation</h3><p>You need to edit your <code class="filename">/etc/inetd.conf
 		</code> and <code class="filename">/etc/services</code>
 		to enable SWAT to be launched via <code class="literal">inetd</code>.</p><p>In <code class="filename">/etc/services</code> you need to 
 		add a line like this: </p><p><code class="literal">swat            901/tcp</code></p><p>Note for NIS/YP and LDAP users - you may need to rebuild the 
@@ -62,21 +62,21 @@
 		/usr/local/samba/sbin/swat swat</code></p><p>Once you have edited <code class="filename">/etc/services</code> 
 		and <code class="filename">/etc/inetd.conf</code> you need to send a 
 		HUP signal to inetd. To do this use <code class="literal">kill -1 PID
-		</code> where PID is the process ID of the inetd daemon. </p></div></div><div class="refsect1" lang="en"><a name="id2506428"></a><h2>LAUNCHING</h2><p>To launch SWAT just run your favorite web browser and 
+		</code> where PID is the process ID of the inetd daemon. </p></div></div><div class="refsect1" lang="en"><a name="id324590"></a><h2>LAUNCHING</h2><p>To launch SWAT just run your favorite web browser and 
 	point it at "http://localhost:901/".</p><p>Note that you can attach to SWAT from any IP connected 
 	machine but connecting from a remote machine leaves your 
 	connection open to password sniffing as passwords will be sent 
-	in the clear over the wire. </p></div><div class="refsect1" lang="en"><a name="id2506446"></a><h2>FILES</h2><div class="variablelist"><dl><dt><span class="term"><code class="filename">/etc/inetd.conf</code></span></dt><dd><p>This file must contain suitable startup 
+	in the clear over the wire. </p></div><div class="refsect1" lang="en"><a name="id324606"></a><h2>FILES</h2><div class="variablelist"><dl><dt><span class="term"><code class="filename">/etc/inetd.conf</code></span></dt><dd><p>This file must contain suitable startup 
 		information for the meta-daemon.</p></dd><dt><span class="term"><code class="filename">/etc/services</code></span></dt><dd><p>This file must contain a mapping of service name 
 		(e.g., swat) to service port (e.g., 901) and protocol type 
 		(e.g., tcp).  </p></dd><dt><span class="term"><code class="filename">/usr/local/samba/lib/smb.conf</code></span></dt><dd><p>This is the default location of the <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a> server configuration file that swat edits. Other 
 		common places that systems install this file are <code class="filename">
 		/usr/samba/lib/smb.conf</code> and <code class="filename">/etc/smb.conf
 		</code>.  This file describes all the services the server 
-		is to make available to clients. </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2506529"></a><h2>WARNINGS</h2><p><code class="literal">swat</code> will rewrite your <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a> file. It will rearrange the entries and delete all 
+		is to make available to clients. </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id324679"></a><h2>WARNINGS</h2><p><code class="literal">swat</code> will rewrite your <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a> file. It will rearrange the entries and delete all 
 	comments, <em class="parameter"><code>include=</code></em> and <em class="parameter"><code>copy=
 	</code></em> options. If you have a carefully crafted <code class="filename">
-	smb.conf</code> then back it up or don't use swat! </p></div><div class="refsect1" lang="en"><a name="id2506573"></a><h2>VERSION</h2><p>This man page is correct for version 3 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2506584"></a><h2>SEE ALSO</h2><p><code class="literal">inetd(5)</code>, <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a>, <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a></p></div><div class="refsect1" lang="en"><a name="id2506614"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+	smb.conf</code> then back it up or don't use swat! </p></div><div class="refsect1" lang="en"><a name="id324718"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id324728"></a><h2>SEE ALSO</h2><p><code class="literal">inetd(5)</code>, <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a>, <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a></p></div><div class="refsect1" lang="en"><a name="id324757"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p>The original Samba man pages were written by Karl Auer. 

Modified: branches/samba/upstream/docs/htmldocs/manpages/tdbbackup.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/tdbbackup.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/tdbbackup.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,8 +1,8 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>tdbbackup</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="tdbbackup.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>tdbbackup &#8212; tool for backing up and for validating the integrity of samba .tdb files</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">tdbbackup</code> [-s suffix] [-v] [-h]</p></div></div><div class="refsect1" lang="en"><a name="id2544148"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.1.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(1)</span></a> suite.</p><p><code class="literal">tdbbackup</code> is a tool that may be used to backup samba .tdb
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>tdbbackup</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="tdbbackup.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>tdbbackup &#8212; tool for backing up and for validating the integrity of samba .tdb files</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">tdbbackup</code> [-s suffix] [-v] [-h]</p></div></div><div class="refsect1" lang="en"><a name="id283752"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.1.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(1)</span></a> suite.</p><p><code class="literal">tdbbackup</code> is a tool that may be used to backup samba .tdb
 	files. This tool may also be used to verify the integrity of the .tdb files prior
 	to samba startup or during normal operation. If it finds file damage and it finds 
 	a prior backup the backup file will be restored. 
-	</p></div><div class="refsect1" lang="en"><a name="id2507194"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-h</span></dt><dd><p>
+	</p></div><div class="refsect1" lang="en"><a name="id282737"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-h</span></dt><dd><p>
 		Get help information.
 		</p></dd><dt><span class="term">-s suffix</span></dt><dd><p>
 		The <code class="literal">-s</code> option allows the adminisistrator to specify a file
@@ -11,7 +11,7 @@
 		</p></dd><dt><span class="term">-v</span></dt><dd><p>
 		The <code class="literal">-v</code> will check the database for damages (currupt data)
 		which if detected causes the backup to be restored.
-		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507254"></a><h2>COMMANDS</h2><p><span class="emphasis"><em>GENERAL INFORMATION</em></span></p><p>
+		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id283351"></a><h2>COMMANDS</h2><p><span class="emphasis"><em>GENERAL INFORMATION</em></span></p><p>
 	The <code class="literal">tdbbackup</code> utility can safely be run at any time. It was designed so
 	that it can be used at any time to validate the integrity of tdb files, even during Samba
 	operation. Typical usage for the command will be:
@@ -29,7 +29,7 @@
 		</p></li><li><p>
 		<code class="literal">*.tdb</code> located in the /usr/local/samba/var directory or on some
 		systems in the /var/cache or /var/lib/samba directories.
-		</p></li></ul></div></div><div class="refsect1" lang="en"><a name="id2507334"></a><h2>VERSION</h2><p>This man page is correct for version 3 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2507345"></a><h2>AUTHOR</h2><p>
+		</p></li></ul></div></div><div class="refsect1" lang="en"><a name="id283424"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id282885"></a><h2>AUTHOR</h2><p>
 	The original Samba software and related utilities were created by Andrew Tridgell.
 	Samba is now developed by the Samba Team as an Open Source project similar to the way
 	the Linux kernel is developed.

Modified: branches/samba/upstream/docs/htmldocs/manpages/tdbdump.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/tdbdump.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/tdbdump.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,9 +1,9 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>tdbdump</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="tdbdump.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>tdbdump &#8212; tool for printing the contents of a TDB file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">tdbdump</code> {filename}</p></div></div><div class="refsect1" lang="en"><a name="id2544132"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.1.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(1)</span></a> suite.</p><p><code class="literal">tdbdump</code> is a very simple utility that 'dumps' the 
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>tdbdump</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="tdbdump.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>tdbdump &#8212; tool for printing the contents of a TDB file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">tdbdump</code> {filename}</p></div></div><div class="refsect1" lang="en"><a name="id283737"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.1.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(1)</span></a> suite.</p><p><code class="literal">tdbdump</code> is a very simple utility that 'dumps' the 
 		contents of a TDB (Trivial DataBase) file to standard output in a 
 		human-readable format.
 	</p><p>This tool can be used when debugging problems with TDB files. It is 
 		intended for those who are somewhat familiar with Samba internals.
-	</p></div><div class="refsect1" lang="en"><a name="id2544166"></a><h2>VERSION</h2><p>This man page is correct for version 3 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2507193"></a><h2>AUTHOR</h2><p>
+	</p></div><div class="refsect1" lang="en"><a name="id282726"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id282736"></a><h2>AUTHOR</h2><p>
 	The original Samba software and related utilities were created by Andrew Tridgell.
 	Samba is now developed by the Samba Team as an Open Source project similar to the way
 	the Linux kernel is developed.

Modified: branches/samba/upstream/docs/htmldocs/manpages/tdbtool.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/tdbtool.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/tdbtool.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,12 +1,12 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>tdbtool</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="tdbtool.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>tdbtool &#8212; manipulate the contents TDB files</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">tdbtool</code></p></div><div class="cmdsynopsis"><p><code class="literal">tdbtool</code>  
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>tdbtool</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="tdbtool.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>tdbtool &#8212; manipulate the contents TDB files</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">tdbtool</code></p></div><div class="cmdsynopsis"><p><code class="literal">tdbtool</code>  
 		<em class="replaceable"><code>TDBFILE</code></em>
 		  [
 		<em class="replaceable"><code>COMMANDS</code></em>
-		...]</p></div></div><div class="refsect1" lang="en"><a name="id2544157"></a><h2>DESCRIPTION</h2><p>This tool is part of the
+		...]</p></div></div><div class="refsect1" lang="en"><a name="id283764"></a><h2>DESCRIPTION</h2><p>This tool is part of the
 	<a class="citerefentry" href="samba.1.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(1)</span></a> suite.</p><p><code class="literal">tdbtool</code> a tool for displaying and
 	altering the contents of Samba TDB (Trivial DataBase) files. Each
 	of the commands listed below can be entered interactively or
-	provided on the command line.</p></div><div class="refsect1" lang="en"><a name="id2507202"></a><h2>COMMANDS</h2><div class="variablelist"><dl><dt><span class="term"><code class="option">create</code>
+	provided on the command line.</p></div><div class="refsect1" lang="en"><a name="id282748"></a><h2>COMMANDS</h2><div class="variablelist"><dl><dt><span class="term"><code class="option">create</code>
 		<em class="replaceable"><code>TDBFILE</code></em></span></dt><dd><p>Create a new database named
 		<em class="replaceable"><code>TDBFILE</code></em>.
 		</p></dd><dt><span class="term"><code class="option">open</code>
@@ -56,10 +56,10 @@
 		</p></dd><dt><span class="term">
 		<code class="option">quit</code>
 		</span></dt><dd><p>Exit <code class="literal">tdbtool</code>.
-		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2506244"></a><h2>CAVEATS</h2><p>The contents of the Samba TDB files are private
+		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id283064"></a><h2>CAVEATS</h2><p>The contents of the Samba TDB files are private
 	to the implementation and should not be altered with
 	<code class="literal">tdbtool</code>.
-	</p></div><div class="refsect1" lang="en"><a name="id2506260"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2506271"></a><h2>AUTHOR</h2><p> The original Samba software and related utilities were
+	</p></div><div class="refsect1" lang="en"><a name="id283081"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id283090"></a><h2>AUTHOR</h2><p> The original Samba software and related utilities were
 	created by Andrew Tridgell.  Samba is now developed by the
 	Samba Team as an Open Source project similar to the way the
 	Linux kernel is developed.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/testparm.1.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/testparm.1.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/testparm.1.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,5 +1,5 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>testparm</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="testparm.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>testparm &#8212; check an smb.conf configuration file for 
-	internal correctness</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">testparm</code> [-s] [-h] [-v] [-L &lt;servername&gt;] [-t &lt;encoding&gt;] {config filename} [hostname hostIP]</p></div></div><div class="refsect1" lang="en"><a name="id2507194"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">testparm</code> is a very simple test program 
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>testparm</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="testparm.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>testparm &#8212; check an smb.conf configuration file for 
+	internal correctness</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">testparm</code> [-s] [-h] [-v] [-L &lt;servername&gt;] [-t &lt;encoding&gt;] {config filename} [hostname hostIP]</p></div></div><div class="refsect1" lang="en"><a name="id282739"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">testparm</code> is a very simple test program 
 	to check an <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> configuration file for 
 	internal correctness. If this program reports no problems, you 
 	can use the configuration file with confidence that <code class="literal">smbd
@@ -11,7 +11,7 @@
 	has access to each service. </p><p>If <code class="literal">testparm</code> finds an error in the <code class="filename">
 	smb.conf</code> file it returns an exit code of 1 to the calling 
 	program, else it returns an exit code of 0. This allows shell scripts 
-	to test the output from <code class="literal">testparm</code>.</p></div><div class="refsect1" lang="en"><a name="id2507277"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-s</span></dt><dd><p>Without this option, <code class="literal">testparm</code> 
+	to test the output from <code class="literal">testparm</code>.</p></div><div class="refsect1" lang="en"><a name="id283371"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-s</span></dt><dd><p>Without this option, <code class="literal">testparm</code> 
 		will prompt for a carriage return after printing the service 
 		names and before dumping the service definitions.</p></dd><dt><span class="term">-h|--help</span></dt><dd><p>Print a summary of command line options.
 </p></dd><dt><span class="term">-V</span></dt><dd><p>Prints the program version number.
@@ -41,14 +41,14 @@
 		this parameter is supplied, the hostIP parameter must also
 		be supplied.</p></dd><dt><span class="term">hostIP</span></dt><dd><p>This is the IP address of the host specified 
 		in the previous parameter.  This address must be supplied 
-		if the hostname parameter is supplied. </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507487"></a><h2>FILES</h2><div class="variablelist"><dl><dt><span class="term"><a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a></span></dt><dd><p>This is usually the name of the configuration 
+		if the hostname parameter is supplied. </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id283020"></a><h2>FILES</h2><div class="variablelist"><dl><dt><span class="term"><a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a></span></dt><dd><p>This is usually the name of the configuration 
 		file used by <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a>. 
-		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2506246"></a><h2>DIAGNOSTICS</h2><p>The program will issue a message saying whether the 
+		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id283054"></a><h2>DIAGNOSTICS</h2><p>The program will issue a message saying whether the 
 	configuration file loaded OK or not. This message may be preceded by 
 	errors and warnings if the file did not load. If the file was 
 	loaded OK, the program then dumps all known service details 
-	to stdout. </p></div><div class="refsect1" lang="en"><a name="id2506260"></a><h2>VERSION</h2><p>This man page is correct for version 3 of 
-	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2506271"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a>, <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a></p></div><div class="refsect1" lang="en"><a name="id2506297"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
+	to stdout. </p></div><div class="refsect1" lang="en"><a name="id283066"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of 
+	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id283077"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a>, <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a></p></div><div class="refsect1" lang="en"><a name="id324465"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities 
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar 
 	to the way the Linux kernel is developed.</p><p>The original Samba man pages were written by Karl Auer. 

Modified: branches/samba/upstream/docs/htmldocs/manpages/umount.cifs.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/umount.cifs.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/umount.cifs.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>umount.cifs</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="umount.cifs.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>umount.cifs &#8212; for normal, non-root users, to unmount their own Common Internet File System (CIFS) mounts</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">umount.cifs</code> {mount-point} [-nVvhfle]</p></div></div><div class="refsect1" lang="en"><a name="id2544132"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>umount.cifs unmounts a Linux CIFS filesystem. It can be invoked
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>umount.cifs</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="umount.cifs.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>umount.cifs &#8212; for normal, non-root users, to unmount their own Common Internet File System (CIFS) mounts</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">umount.cifs</code> {mount-point} [-nVvhfle]</p></div></div><div class="refsect1" lang="en"><a name="id283746"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>umount.cifs unmounts a Linux CIFS filesystem. It can be invoked
 indirectly by the
 <a class="citerefentry" href="umount.8.html"><span class="citerefentry"><span class="refentrytitle">umount</span>(8)</span></a> command 
 when umount.cifs is in /sbin directory, unless you specify the "-i" option to umount.  Specifying -i to umount avoids execution of umount helpers such as umount.cifs. The umount.cifs command only works in Linux, and the kernel must
@@ -11,24 +11,24 @@
 It is possible to set the mode for umount.cifs to 
 setuid root (or equivalently update the /etc/permissions file) to allow non-root users to umount shares to directories for which they have write permission.  The umount.cifs utility is typically
 not needed if unmounts need only be performed by root users, or if user mounts and unmounts
-can rely on specifying explicit entries in /etc/fstab See</p><p><a class="citerefentry" href="fstab.5.html"><span class="citerefentry"><span class="refentrytitle">fstab</span>(5)</span></a></p></div><div class="refsect1" lang="en"><a name="id2507212"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">--verbose</span></dt><dd><p>print additional debugging information</p></dd><dt><span class="term">--no-mtab</span></dt><dd><p>Do not update the mtab even if unmount completes successfully (/proc/mounts will still display the correct information)</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507246"></a><h2>NOTES</h2><p>This command is normally intended to be installed setuid (since root users can already run unmount).  An alternative to using umount.cifs is to add specfic entries for the user mounts that you wish a particular user or users to mount and unmount to /etc/fstab</p></div><div class="refsect1" lang="en"><a name="id2507261"></a><h2>CONFIGURATION</h2><p>
+can rely on specifying explicit entries in /etc/fstab See</p><p><a class="citerefentry" href="fstab.5.html"><span class="citerefentry"><span class="refentrytitle">fstab</span>(5)</span></a></p></div><div class="refsect1" lang="en"><a name="id282755"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">--verbose</span></dt><dd><p>print additional debugging information</p></dd><dt><span class="term">--no-mtab</span></dt><dd><p>Do not update the mtab even if unmount completes successfully (/proc/mounts will still display the correct information)</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id282788"></a><h2>NOTES</h2><p>This command is normally intended to be installed setuid (since root users can already run unmount).  An alternative to using umount.cifs is to add specfic entries for the user mounts that you wish a particular user or users to mount and unmount to /etc/fstab</p></div><div class="refsect1" lang="en"><a name="id283357"></a><h2>CONFIGURATION</h2><p>
 The primary mechanism for making configuration changes and for reading 
 debug information for the cifs vfs is via the Linux /proc filesystem.
 In the directory <code class="filename">/proc/fs/cifs</code> are various 
 configuration files and pseudo files which can display debug information.  
 For more information see the kernel file <code class="filename">fs/cifs/README</code>.
-</p></div><div class="refsect1" lang="en"><a name="id2507287"></a><h2>BUGS</h2><p>At this time umount.cifs does not lock the mount table using the same lock as the umount utility does, so do not attempt to do multiple unmounts from different processes (and in particular unmounts of a cifs mount and another type of filesystem mount at the same time).
+</p></div><div class="refsect1" lang="en"><a name="id283380"></a><h2>BUGS</h2><p>At this time umount.cifs does not lock the mount table using the same lock as the umount utility does, so do not attempt to do multiple unmounts from different processes (and in particular unmounts of a cifs mount and another type of filesystem mount at the same time).
 	</p><p>If the same mount point is mounted multiple times by cifs, umount.cifs will remove all of the matching entries from the mount table (although umount.cifs will actually only unmount the last one), rather than only removing the last matching entry in /etc/mtab.  The pseudofile /proc/mounts will display correct information though, and the lack of an entry in /etc/mtab does not prevent subsequent unmounts.</p><p>
 Note that the typical response to a bug report is a suggestion
 to try the latest version first. So please try doing that first,
 and always include which versions you use of relevant software
 when reporting bugs (minimum: umount.cifs (try umount.cifs -V), kernel (see /proc/version) and
 server type you are trying to contact.
-</p></div><div class="refsect1" lang="en"><a name="id2507320"></a><h2>VERSION</h2><p>This man page is correct for version 1.34 of 
-	the cifs vfs filesystem (roughly Linux kernel 2.6.12).</p></div><div class="refsect1" lang="en"><a name="id2507332"></a><h2>SEE ALSO</h2><p>
+</p></div><div class="refsect1" lang="en"><a name="id283405"></a><h2>VERSION</h2><p>This man page is correct for version 1.34 of 
+	the cifs vfs filesystem (roughly Linux kernel 2.6.12).</p></div><div class="refsect1" lang="en"><a name="id283415"></a><h2>SEE ALSO</h2><p>
 	Documentation/filesystems/cifs.txt and fs/cifs/README in the linux kernel
 	source tree may contain additional options and information.
-</p><p><a class="citerefentry" href="mount.cifs.8.html"><span class="citerefentry"><span class="refentrytitle">mount.cifs</span>(8)</span></a></p></div><div class="refsect1" lang="en"><a name="id2507353"></a><h2>AUTHOR</h2><p>Steve French</p><p>The syntax was loosely based on the umount utility and the manpage was loosely based on that of mount.cifs.8. The man page was created by Steve French</p><p>The maintainer of the Linux cifs vfs and the userspace
+</p><p><a class="citerefentry" href="mount.cifs.8.html"><span class="citerefentry"><span class="refentrytitle">mount.cifs</span>(8)</span></a></p></div><div class="refsect1" lang="en"><a name="id282885"></a><h2>AUTHOR</h2><p>Steve French</p><p>The syntax was loosely based on the umount utility and the manpage was loosely based on that of mount.cifs.8. The man page was created by Steve French</p><p>The maintainer of the Linux cifs vfs and the userspace
 		tool <span class="emphasis"><em>umount.cifs</em></span> is <a class="ulink" href="mailto:sfrench at samba.org" target="_top">Steve French</a>.
 		The <a class="ulink" href="mailto:linux-cifs-client at lists.samba.org" target="_top">Linux CIFS Mailing list</a> 
 		is the preferred place to ask questions regarding these programs. 

Modified: branches/samba/upstream/docs/htmldocs/manpages/vfs_audit.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/vfs_audit.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/vfs_audit.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,19 +1,19 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_audit</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_audit.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_audit &#8212; record selected Samba VFS operations in the system log</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = audit</code></p></div></div><div class="refsect1" lang="en"><a name="id2544124"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_audit</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_audit.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_audit &#8212; record selected Samba VFS operations in the system log</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = audit</code></p></div></div><div class="refsect1" lang="en"><a name="id315552"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
 	<a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The <code class="literal">vfs_audit</code> VFS module records selected
 	client operations to the system log using
-	<a class="citerefentry" href="syslog.3.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>.</p><p>The following Samba VFS operations are recorded:</p><table class="simplelist" border="0" summary="Simple list"><tr><td>connect</td></tr><tr><td>disconnect</td></tr><tr><td>opendir</td></tr><tr><td>mkdir</td></tr><tr><td>rmdir</td></tr><tr><td>open</td></tr><tr><td>close</td></tr><tr><td>rename</td></tr><tr><td>unlink</td></tr><tr><td>chmod</td></tr><tr><td>fchmod</td></tr><tr><td>chmod_acl</td></tr><tr><td>fchmod_acl</td></tr></table><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id2507234"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">audit:facility = FACILITY</span></dt><dd><p>Log messages to the named
+	<a class="citerefentry" href="syslog.3.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>.</p><p>The following Samba VFS operations are recorded:</p><table class="simplelist" border="0" summary="Simple list"><tr><td>connect</td></tr><tr><td>disconnect</td></tr><tr><td>opendir</td></tr><tr><td>mkdir</td></tr><tr><td>rmdir</td></tr><tr><td>open</td></tr><tr><td>close</td></tr><tr><td>rename</td></tr><tr><td>unlink</td></tr><tr><td>chmod</td></tr><tr><td>fchmod</td></tr><tr><td>chmod_acl</td></tr><tr><td>fchmod_acl</td></tr></table><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id282779"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">audit:facility = FACILITY</span></dt><dd><p>Log messages to the named
 		<a class="citerefentry" href="syslog.3.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a> facility.
 
 		</p></dd><dt><span class="term">audit:priority = PRIORITY</span></dt><dd><p>Log messages with the named
 		<a class="citerefentry" href="syslog.3.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a> priority.
-		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507287"></a><h2>EXAMPLES</h2><p>Log operations on all shares using the LOCAL1 facility
+		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id283389"></a><h2>EXAMPLES</h2><p>Log operations on all shares using the LOCAL1 facility
 	and NOTICE priority:</p><pre class="programlisting">
         <em class="parameter"><code>[global]</code></em>
 	<a class="link" href="smb.conf.5.html#VFSOBJECTS">vfs objects = audit</a>
 	<a class="link" href="smb.conf.5.html#AUDIT:FACILITY">audit:facility = LOCAL1</a>
 	<a class="link" href="smb.conf.5.html#AUDIT:PRIORITY">audit:priority = NOTICE</a>
-</pre></div><div class="refsect1" lang="en"><a name="id2507449"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
-	</p></div><div class="refsect1" lang="en"><a name="id2507460"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
+</pre></div><div class="refsect1" lang="en"><a name="id282994"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
+	</p></div><div class="refsect1" lang="en"><a name="id283004"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar
 	to the way the Linux kernel is developed.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/vfs_cacheprime.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/vfs_cacheprime.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/vfs_cacheprime.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_cacheprime</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_cacheprime.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_cacheprime &#8212; prime the kernel file data cache</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = cacheprime</code></p></div></div><div class="refsect1" lang="en"><a name="id2544114"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_cacheprime</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_cacheprime.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_cacheprime &#8212; prime the kernel file data cache</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = cacheprime</code></p></div></div><div class="refsect1" lang="en"><a name="id283730"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
 	<a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The <code class="literal">vfs_cacheprime</code> VFS module reads chunks
 	of file data near the range requested by clients in order to
 	make sure the data is present in the kernel file data cache at
@@ -7,20 +7,20 @@
 	cacheprime:rsize option. All disk read operations are aligned
 	on boundaries that are a multiple of this size. Each range of
 	the file data is primed at most once during the time the client
-	has the file open. </p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id2507179"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">cacheprime:rsize = BYTES</span></dt><dd><p>The number of bytes with which to prime
-		the kernel data cache.</p><p>The following suffixes may be applied to BYTES:</p><div class="itemizedlist"><ul type="disc"><li><p><code class="literal">K</code> - BYTES is a number of kilobytes</p></li><li><p><code class="literal">M</code> - BYTES is a number of megabytes</p></li><li><p><code class="literal">G</code> - BYTES is a number of gigabytes</p></li></ul></div></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507238"></a><h2>EXAMPLES</h2><p>For a hypothetical disk array, it is necessary to ensure
+	has the file open. </p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id282732"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">cacheprime:rsize = BYTES</span></dt><dd><p>The number of bytes with which to prime
+		the kernel data cache.</p><p>The following suffixes may be applied to BYTES:</p><div class="itemizedlist"><ul type="disc"><li><p><code class="literal">K</code> - BYTES is a number of kilobytes</p></li><li><p><code class="literal">M</code> - BYTES is a number of megabytes</p></li><li><p><code class="literal">G</code> - BYTES is a number of gigabytes</p></li></ul></div></dd></dl></div></div><div class="refsect1" lang="en"><a name="id282788"></a><h2>EXAMPLES</h2><p>For a hypothetical disk array, it is necessary to ensure
 	that all read operations are of size 1 megabyte (1048576 bytes),
 	and aligned on 1 megabyte boundaries:
 	</p><pre class="programlisting">
 	<em class="parameter"><code>[hypothetical]</code></em>
 	<a class="link" href="smb.conf.5.html#VFSOBJECTS">vfs objects = cacheprime</a>
 	<a class="link" href="smb.conf.5.html#CACHEPRIME:RSIZE">cacheprime:rsize = 1M</a>
-</pre></div><div class="refsect1" lang="en"><a name="id2507392"></a><h2>CAVEATS</h2><p><code class="literal">cacheprime</code> is not a a substitute for
+</pre></div><div class="refsect1" lang="en"><a name="id283387"></a><h2>CAVEATS</h2><p><code class="literal">cacheprime</code> is not a a substitute for
 	a general-purpose readahead mechanism. It is intended for use
 	only in very specific environments where disk operations must
 	be aligned and sized to known values (as much as that is possible).
-	</p></div><div class="refsect1" lang="en"><a name="id2507410"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
-	</p></div><div class="refsect1" lang="en"><a name="id2507421"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
+	</p></div><div class="refsect1" lang="en"><a name="id283403"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
+	</p></div><div class="refsect1" lang="en"><a name="id283413"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar
 	to the way the Linux kernel is developed.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/vfs_cap.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/vfs_cap.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/vfs_cap.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,17 +1,17 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_cap</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_cap.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_cap &#8212; CAP encode filenames</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = cap</code></p></div></div><div class="refsect1" lang="en"><a name="id2544124"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_cap</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_cap.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_cap &#8212; CAP encode filenames</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = cap</code></p></div></div><div class="refsect1" lang="en"><a name="id283730"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
 	<a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>CAP (Columbia Appletalk Protocol) encoding is a
 	technique for representing non-ASCII filenames in ASCII. The
 	<code class="literal">vfs_cap</code> VFS module translates filenames to and
 	from CAP format, allowing users to name files in their native
 	encoding.  </p><p>CAP encoding is most commonly
-	used in Japanese language environments. </p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id2544163"></a><h2>EXAMPLES</h2><p>On a system using GNU libiconv, use CAP encoding to support
+	used in Japanese language environments. </p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id283766"></a><h2>EXAMPLES</h2><p>On a system using GNU libiconv, use CAP encoding to support
 	users in the Shift_JIS locale:</p><pre class="programlisting">
         <em class="parameter"><code>[global]</code></em>
 	<a class="link" href="smb.conf.5.html#DOSCHARSET">dos charset = CP932</a>
 	<a class="link" href="smb.conf.5.html#DOSCHARSET">dos charset = CP932</a>
 	<a class="link" href="smb.conf.5.html#VFSOBJECTS">vfs objects = cap</a>
-</pre></div><div class="refsect1" lang="en"><a name="id2507338"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
-	</p></div><div class="refsect1" lang="en"><a name="id2507349"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
+</pre></div><div class="refsect1" lang="en"><a name="id282775"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
+	</p></div><div class="refsect1" lang="en"><a name="id282784"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar
 	to the way the Linux kernel is developed.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/vfs_catia.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/vfs_catia.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/vfs_catia.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,14 +1,14 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_catia</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_catia.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_catia &#8212; translate illegal characters in Catia filenames</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = catia</code></p></div></div><div class="refsect1" lang="en"><a name="id2544124"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_catia</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_catia.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_catia &#8212; translate illegal characters in Catia filenames</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = catia</code></p></div></div><div class="refsect1" lang="en"><a name="id315552"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
 	<a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The Catia CAD package commonly creates filenames that
 	use characters that are illegal in CIFS filenames. The
 	<code class="literal">vfs_catia</code> VFS module implements a fixed character
 	mapping so that these files can be shared with CIFS clients.
-	</p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id2544159"></a><h2>EXAMPLES</h2><p>Map Catia filenames on the [CAD] share:</p><pre class="programlisting">
+	</p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id283762"></a><h2>EXAMPLES</h2><p>Map Catia filenames on the [CAD] share:</p><pre class="programlisting">
         <em class="parameter"><code>[CAD]</code></em>
 	<a class="link" href="smb.conf.5.html#PATH">path = /data/cad</a>
 	<a class="link" href="smb.conf.5.html#VFSOBJECTS">vfs objects = catia</a>
-</pre></div><div class="refsect1" lang="en"><a name="id2507321"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
-	</p></div><div class="refsect1" lang="en"><a name="id2507332"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
+</pre></div><div class="refsect1" lang="en"><a name="id282761"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
+	</p></div><div class="refsect1" lang="en"><a name="id282770"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar
 	to the way the Linux kernel is developed.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/vfs_commit.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/vfs_commit.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/vfs_commit.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_commit</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_commit.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_commit &#8212; flush dirty data at specified intervals</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = commit</code></p></div></div><div class="refsect1" lang="en"><a name="id2544116"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_commit</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_commit.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_commit &#8212; flush dirty data at specified intervals</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = commit</code></p></div></div><div class="refsect1" lang="en"><a name="id315552"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
 	<a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The <code class="literal">vfs_commit</code> VFS module keeps track of
 	the amount of data written to a file and synchronizes it to
 	disk when a specified amount accumulates.
@@ -7,18 +7,18 @@
 	impact of unexpected power loss can be minimized by a small
 	commit:dthresh value. Secondly, write performance can be
 	improved on some systems by flushing file data early and at
-	regular intervals.</p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id2507178"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">commit:dthresh = BYTES</span></dt><dd><p>Synchronize file data each time the specified
+	regular intervals.</p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id282728"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">commit:dthresh = BYTES</span></dt><dd><p>Synchronize file data each time the specified
 		number of bytes has been written.
-		</p><p>The following suffixes may be applied to BYTES:</p><div class="itemizedlist"><ul type="disc"><li><p><code class="literal">K</code> - BYTES is a number of kilobytes</p></li><li><p><code class="literal">M</code> - BYTES is a number of megabytes</p></li><li><p><code class="literal">G</code> - BYTES is a number of gigabytes</p></li></ul></div></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507236"></a><h2>EXAMPLES</h2><p>Synchronize the file data on the [precious] share after
+		</p><p>The following suffixes may be applied to BYTES:</p><div class="itemizedlist"><ul type="disc"><li><p><code class="literal">K</code> - BYTES is a number of kilobytes</p></li><li><p><code class="literal">M</code> - BYTES is a number of megabytes</p></li><li><p><code class="literal">G</code> - BYTES is a number of gigabytes</p></li></ul></div></dd></dl></div></div><div class="refsect1" lang="en"><a name="id282784"></a><h2>EXAMPLES</h2><p>Synchronize the file data on the [precious] share after
 	every 512 kilobytes (524288 bytes) of data is written:</p><pre class="programlisting">
         <em class="parameter"><code>[precious]</code></em>
 	<a class="link" href="smb.conf.5.html#PATH">path = /data/precious</a>
 	<a class="link" href="smb.conf.5.html#VFSOBJECTS">vfs objects = commit</a>
 	<a class="link" href="smb.conf.5.html#COMMIT:DTHRESH">commit:dthresh = 512K</a>
-</pre></div><div class="refsect1" lang="en"><a name="id2507399"></a><h2>CAVEATS</h2><p>On some systems, the data synchronization performed by
+</pre></div><div class="refsect1" lang="en"><a name="id283394"></a><h2>CAVEATS</h2><p>On some systems, the data synchronization performed by
 	<code class="literal">commit</code> may reduce performance.
-	</p></div><div class="refsect1" lang="en"><a name="id2507416"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
-	</p></div><div class="refsect1" lang="en"><a name="id2507427"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
+	</p></div><div class="refsect1" lang="en"><a name="id283410"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
+	</p></div><div class="refsect1" lang="en"><a name="id283420"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar
 	to the way the Linux kernel is developed.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/vfs_default_quota.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/vfs_default_quota.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/vfs_default_quota.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_default_quota</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_default_quota.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_default_quota &#8212; store default quota records for Windows clients</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = default_quota</code></p></div></div><div class="refsect1" lang="en"><a name="id2544117"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_default_quota</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_default_quota.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_default_quota &#8212; store default quota records for Windows clients</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = default_quota</code></p></div></div><div class="refsect1" lang="en"><a name="id315552"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
 	<a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a>
 	suite.</p><p>Many common quota implementations only store
 	quotas for users and groups, but do not store a default quota. The
@@ -9,7 +9,7 @@
 	refuses to update them. <code class="literal">vfs_default_quota</code> maps
 	the default quota to the quota record of a user. By default the
 	root user is taken because quota limits for root are typically
-	not enforced.</p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id2507181"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">default_quota:uid = UID</span></dt><dd><p>UID specifies the user ID of the quota record where the
+	not enforced.</p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id282729"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">default_quota:uid = UID</span></dt><dd><p>UID specifies the user ID of the quota record where the
 		default user quota values are stored.
 		</p></dd><dt><span class="term">default_quota:gid = GID</span></dt><dd><p>GID specifies the group ID of the quota record where the
 		default group quota values are stored.
@@ -21,15 +21,15 @@
 		quota record is storing the default group quota will
 		be reported as having a quota of NO_LIMIT. Otherwise,
 		the stored values will be reported.
-		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507253"></a><h2>EXAMPLES</h2><p>Store the default quota record in the quota record for
+		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id283353"></a><h2>EXAMPLES</h2><p>Store the default quota record in the quota record for
 	the user with ID 65535 and report that user as having no quota
 	limits:</p><pre class="programlisting">
         <em class="parameter"><code>[global]</code></em>
 	<a class="link" href="smb.conf.5.html#VFSOBJECTS">vfs objects = default_quota</a>
 	<a class="link" href="smb.conf.5.html#DEFAULT_QUOTA:UID">default_quota:uid = 65535</a>
 	<a class="link" href="smb.conf.5.html#DEFAULT_QUOTA:UIDNOLIMIT">default_quota:uid nolimit = yes</a>
-</pre></div><div class="refsect1" lang="en"><a name="id2507418"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
-	</p></div><div class="refsect1" lang="en"><a name="id2507429"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
+</pre></div><div class="refsect1" lang="en"><a name="id283407"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
+	</p></div><div class="refsect1" lang="en"><a name="id283417"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar
 	to the way the Linux kernel is developed.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/vfs_extd_audit.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/vfs_extd_audit.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/vfs_extd_audit.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_extd_audit</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_extd_audit.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_extd_audit &#8212; record selected Samba VFS operations</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = extd_audit</code></p></div></div><div class="refsect1" lang="en"><a name="id2544114"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_extd_audit</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_extd_audit.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_extd_audit &#8212; record selected Samba VFS operations</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = extd_audit</code></p></div></div><div class="refsect1" lang="en"><a name="id283730"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
 	<a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The <code class="literal">extd_audit</code> VFS module records selected
 	client operations to both the
 	<a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> log and
@@ -7,8 +7,8 @@
 	<a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> log,
 	<code class="literal">vfs_extd_audit</code> is identical to
 	<a class="citerefentry" href="vfs_audit.8.html"><span class="citerefentry"><span class="refentrytitle">vfs_audit</span>(8)</span></a>.
-	</p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id2507204"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
-	</p></div><div class="refsect1" lang="en"><a name="id2507215"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
+	</p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id282759"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
+	</p></div><div class="refsect1" lang="en"><a name="id282769"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar
 	to the way the Linux kernel is developed.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/vfs_fake_perms.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/vfs_fake_perms.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/vfs_fake_perms.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_fake_perms</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_fake_perms.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_fake_perms &#8212; enable read only Roaming Profiles</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = fake_perms</code></p></div></div><div class="refsect1" lang="en"><a name="id2544114"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_fake_perms</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_fake_perms.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_fake_perms &#8212; enable read only Roaming Profiles</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = fake_perms</code></p></div></div><div class="refsect1" lang="en"><a name="id283730"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
 	<a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The <code class="literal">vfs_fake_perms</code> VFS module was created
 	to allow Roaming Profile files and directories to be set (on
 	the Samba server under UNIX) as read only. This module will,
@@ -6,12 +6,12 @@
 	the Profile files and directories are writeable. This satisfies
 	the client even though the files will never be overwritten as
 	the client logs out or shuts down.
-	</p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id2544152"></a><h2>EXAMPLES</h2><pre class="programlisting">
+	</p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id283765"></a><h2>EXAMPLES</h2><pre class="programlisting">
         <em class="parameter"><code>[Profiles]</code></em>
 	<a class="link" href="smb.conf.5.html#PATH">path = /profiles</a>
 	<a class="link" href="smb.conf.5.html#VFSOBJECTS">vfs objects = fake_perms</a>
-</pre></div><div class="refsect1" lang="en"><a name="id2507314"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
-	</p></div><div class="refsect1" lang="en"><a name="id2507324"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
+</pre></div><div class="refsect1" lang="en"><a name="id282760"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
+	</p></div><div class="refsect1" lang="en"><a name="id282770"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar
 	to the way the Linux kernel is developed.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/vfs_full_audit.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/vfs_full_audit.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/vfs_full_audit.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_full_audit</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_full_audit.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_full_audit &#8212; record Samba VFS operations in the system log</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = full_audit</code></p></div></div><div class="refsect1" lang="en"><a name="id2544115"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_full_audit</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_full_audit.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_full_audit &#8212; record Samba VFS operations in the system log</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = full_audit</code></p></div></div><div class="refsect1" lang="en"><a name="id315552"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
 	<a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The <code class="literal">vfs_full_audit</code> VFS module records selected
 	client operations to the system log using
 	<a class="citerefentry" href="syslog.3.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a>.</p><p><code class="literal">vfs_full_audit</code> is able to record the
@@ -10,7 +10,7 @@
 	format consisting of fields separated by '|' characters. The
 	format is: </p><pre class="programlisting">
 		smbd_audit: PREFIX|OPERATION|RESULT|FILE
-	</pre><p>The record fields are:</p><div class="itemizedlist"><ul type="disc"><li><p><code class="literal">PREFIX</code> - the result of the full_audit:prefix string after variable substitutions</p></li><li><p><code class="literal">OPERATION</code> - the name of the VFS operation</p></li><li><p><code class="literal">RESULT</code> - whether the operation succeeded or failed</p></li><li><p><code class="literal">FILE</code> - the name of the file or directory the operation was performed on</p></li></ul></div><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id2506312"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">vfs_full_audit:prefix = STRING</span></dt><dd><p>Prepend audit messages with STRING. STRING is
+	</pre><p>The record fields are:</p><div class="itemizedlist"><ul type="disc"><li><p><code class="literal">PREFIX</code> - the result of the full_audit:prefix string after variable substitutions</p></li><li><p><code class="literal">OPERATION</code> - the name of the VFS operation</p></li><li><p><code class="literal">RESULT</code> - whether the operation succeeded or failed</p></li><li><p><code class="literal">FILE</code> - the name of the file or directory the operation was performed on</p></li></ul></div><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id324497"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">vfs_full_audit:prefix = STRING</span></dt><dd><p>Prepend audit messages with STRING. STRING is
 		processed for standard substitution variables listed in
 		<a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a>. The default
 		prefix is "%u|%I". </p></dd><dt><span class="term">vfs_full_audit:success = LIST</span></dt><dd><p>LIST is a list of VFS operations that should be
@@ -24,7 +24,7 @@
 
                 </p></dd><dt><span class="term">full_audit:priority = PRIORITY</span></dt><dd><p>Log messages with the named
                 <a class="citerefentry" href="syslog.3.html"><span class="citerefentry"><span class="refentrytitle">syslog</span>(3)</span></a> priority.
-                </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2506422"></a><h2>EXAMPLES</h2><p>Log file and directory open operations on the [records]
+                </p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id324597"></a><h2>EXAMPLES</h2><p>Log file and directory open operations on the [records]
 	share using the LOCAL7 facility and ALERT priority, including
 	the username and IP address:</p><pre class="programlisting">
         <em class="parameter"><code>[records]</code></em>
@@ -35,8 +35,8 @@
 	<a class="link" href="smb.conf.5.html#FULL_AUDIT:FAILURE">full_audit:failure = all</a>
 	<a class="link" href="smb.conf.5.html#FULL_AUDIT:FACILITY">full_audit:facility = LOCAL7</a>
 	<a class="link" href="smb.conf.5.html#FULL_AUDIT:PRIORITY">full_audit:priority = ALERT</a>
-</pre></div><div class="refsect1" lang="en"><a name="id2506636"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
-	</p></div><div class="refsect1" lang="en"><a name="id2506647"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
+</pre></div><div class="refsect1" lang="en"><a name="id324772"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
+	</p></div><div class="refsect1" lang="en"><a name="id324782"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar
 	to the way the Linux kernel is developed.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/vfs_gpfs.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/vfs_gpfs.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/vfs_gpfs.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_gpfs</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_gpfs.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_gpfs &#8212; gpfs specific samba extensions like acls and prealloc</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = gpfs</code></p></div></div><div class="refsect1" lang="en"><a name="id2544124"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_gpfs</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_gpfs.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_gpfs &#8212; gpfs specific samba extensions like acls and prealloc</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = gpfs</code></p></div></div><div class="refsect1" lang="en"><a name="id315552"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
 	<a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The <code class="literal">gpfs</code> VFS module is the home
 	for all gpfs extensions that Samba requires for proper integration
 	with GPFS. It uses the GPL library interfaces provided by GPFS.
@@ -8,7 +8,7 @@
 	and hence allows permission stealing via chown. Samba might allow at a later
 	point in time, to restrict the chown via this module as such restrictions
 	are the responsibility of the underlying filesystem than of Samba.
-	</p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id2507209"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">nfs4:mode = [ simple | special ]</span></dt><dd><p>
+	</p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id282748"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">nfs4:mode = [ simple | special ]</span></dt><dd><p>
 		Enable/Disable substitution of special IDs on GPFS. This parameter
 		should not affect the windows users in anyway. It only ensures that Samba
 		sets the special IDs - OWNER@ and GROUP@ ( mappings to simple uids )
@@ -19,17 +19,17 @@
 		</p><p>Following is the behaviour of Samba for different values :</p><div class="itemizedlist"><ul type="disc"><li><p><code class="literal">dontcare (default)</code> - copy the ACEs as they come</p></li><li><p><code class="literal">reject</code> - stop operation and exit with error on ACL set op</p></li><li><p><code class="literal">ignore</code> - don't include the second matching ACE</p></li><li><p><code class="literal">merge</code> - bitwise OR the 2 ace.flag fields and 2 ace.mask fields of the 2 duplicate ACEs into 1 ACE</p></li></ul></div></dd><dt><span class="term">nfs4:chown = [yes|no]</span></dt><dd><p>This parameter allows enabling or disabling the chown supported
 		by the underlying filesystem. This parameter should be enabled with
 		care as it might leave your system insecure.</p><p>Some filesystems allow chown as a) giving b) stealing. It is the latter
-		that is considered a risk.</p><p>Following is the behaviour of Samba for different values : </p><div class="itemizedlist"><ul type="disc"><li><p><code class="literal">yes</code> - Enable chown if as supported by the under filesystem</p></li><li><p><code class="literal">no (default)</code> - Disable chown</p></li></ul></div></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507373"></a><h2>EXAMPLES</h2><p>A GPFS mount can be exported via Samba as follows :</p><pre class="programlisting">
+		that is considered a risk.</p><p>Following is the behaviour of Samba for different values : </p><div class="itemizedlist"><ul type="disc"><li><p><code class="literal">yes</code> - Enable chown if as supported by the under filesystem</p></li><li><p><code class="literal">no (default)</code> - Disable chown</p></li></ul></div></dd></dl></div></div><div class="refsect1" lang="en"><a name="id282908"></a><h2>EXAMPLES</h2><p>A GPFS mount can be exported via Samba as follows :</p><pre class="programlisting">
         <em class="parameter"><code>[samba_gpfs_share]</code></em>
 	<a class="link" href="smb.conf.5.html#VFSOBJECTS">vfs objects = gpfs</a>
 	<a class="link" href="smb.conf.5.html#PATH">path = /test/gpfs_mount</a>
 	<a class="link" href="smb.conf.5.html#NFS4:MODE">nfs4: mode = special</a>
 	<a class="link" href="smb.conf.5.html#NFS4:ACEDUP">nfs4: acedup = merge</a>
-</pre></div><div class="refsect1" lang="en"><a name="id2506270"></a><h2>CAVEATS</h2><p>The gpfs gpl libraries are required by <code class="literal">gpfs</code> VFS
+</pre></div><div class="refsect1" lang="en"><a name="id283073"></a><h2>CAVEATS</h2><p>The gpfs gpl libraries are required by <code class="literal">gpfs</code> VFS
 	module during both compilation and runtime.
 	Also this VFS module is tested to work on SLES 9/10 and RHEL 4.4
-	</p></div><div class="refsect1" lang="en"><a name="id2506287"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
-	</p></div><div class="refsect1" lang="en"><a name="id2506298"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
+	</p></div><div class="refsect1" lang="en"><a name="id283090"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
+	</p></div><div class="refsect1" lang="en"><a name="id324462"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar
 	to the way the Linux kernel is developed.</p><p>The GPFS VFS module was created with contributions from

Modified: branches/samba/upstream/docs/htmldocs/manpages/vfs_netatalk.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/vfs_netatalk.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/vfs_netatalk.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,15 +1,15 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_netatalk</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_netatalk.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_netatalk &#8212; hide .AppleDouble files from CIFS clients</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = netatalk</code></p></div></div><div class="refsect1" lang="en"><a name="id2544114"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_netatalk</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_netatalk.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_netatalk &#8212; hide .AppleDouble files from CIFS clients</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = netatalk</code></p></div></div><div class="refsect1" lang="en"><a name="id315552"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
 	<a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The <code class="literal">vfs_netatalk</code> VFS module dynamically
 	hides .AppleDouble files, preventing spurious errors on some
 	CIFS clients. .AppleDouble files may be created by historic
-	implementations of AFP (Apple Filing Protocol) on servers. </p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id2544149"></a><h2>EXAMPLES</h2><p>Hide .AppleDouble files on the [data] share:</p><pre class="programlisting">
+	implementations of AFP (Apple Filing Protocol) on servers. </p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id283762"></a><h2>EXAMPLES</h2><p>Hide .AppleDouble files on the [data] share:</p><pre class="programlisting">
         <em class="parameter"><code>[data]</code></em>
 	<a class="link" href="smb.conf.5.html#VFSOBJECTS">vfs objects = netatalk</a>
-</pre></div><div class="refsect1" lang="en"><a name="id2507303"></a><h2>CAVEATS</h2><p>This module is largely historic and unlikely to be of use
+</pre></div><div class="refsect1" lang="en"><a name="id282750"></a><h2>CAVEATS</h2><p>This module is largely historic and unlikely to be of use
 	in modern networks since current Apple systems are able to mount CIFS
 	shares natively.
-	</p></div><div class="refsect1" lang="en"><a name="id2507315"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
-	</p></div><div class="refsect1" lang="en"><a name="id2507326"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
+	</p></div><div class="refsect1" lang="en"><a name="id282761"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
+	</p></div><div class="refsect1" lang="en"><a name="id282770"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar
 	to the way the Linux kernel is developed.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/vfs_notify_fam.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/vfs_notify_fam.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/vfs_notify_fam.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,12 +1,12 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_notify_fam</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_notify_fam.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_notify_fam &#8212; FAM support for file change notifications</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = notify_fam</code></p></div></div><div class="refsect1" lang="en"><a name="id2544114"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_notify_fam</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_notify_fam.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_notify_fam &#8212; FAM support for file change notifications</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = notify_fam</code></p></div></div><div class="refsect1" lang="en"><a name="id315552"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
 	<a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The <code class="literal">vfs_notify_fam</code> module makes use of
 	the system FAM (File Alteration Monitor) daemon to implement
 	file change notifications for Windows clients. FAM is generally
-	present only on IRIX and some BSD systems.</p><p>This module is not stackable.</p></div><div class="refsect1" lang="en"><a name="id2544148"></a><h2>EXAMPLES</h2><p>Support FAM notifications globally:</p><pre class="programlisting">
+	present only on IRIX and some BSD systems.</p><p>This module is not stackable.</p></div><div class="refsect1" lang="en"><a name="id283762"></a><h2>EXAMPLES</h2><p>Support FAM notifications globally:</p><pre class="programlisting">
         <em class="parameter"><code>[global]</code></em>
 	<a class="link" href="smb.conf.5.html#VFSOBJECTS">vfs objects = notify_fam</a>
-</pre></div><div class="refsect1" lang="en"><a name="id2507303"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
-	</p></div><div class="refsect1" lang="en"><a name="id2507313"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
+</pre></div><div class="refsect1" lang="en"><a name="id282751"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
+	</p></div><div class="refsect1" lang="en"><a name="id282760"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar
 	to the way the Linux kernel is developed.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/vfs_prealloc.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/vfs_prealloc.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/vfs_prealloc.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,22 +1,22 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_prealloc</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_prealloc.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_prealloc &#8212; preallocate matching files to a predetermined size</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = prealloc</code></p></div></div><div class="refsect1" lang="en"><a name="id2544115"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_prealloc</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_prealloc.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_prealloc &#8212; preallocate matching files to a predetermined size</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = prealloc</code></p></div></div><div class="refsect1" lang="en"><a name="id315552"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
 	<a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The <code class="literal">vfs_prealloc</code> VFS module preallocates
 	files to a specified size each time a new file is created. This
 	is useful in environments where files are of a predetermined
 	size will be written to a disk subsystem where extending file
-	allocations is expensive.  </p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id2544150"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">prealloc:EXT = BYTES</span></dt><dd><p>Preallocate all files with the extension EXT to
+	allocations is expensive.  </p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id283763"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">prealloc:EXT = BYTES</span></dt><dd><p>Preallocate all files with the extension EXT to
 		the size specified by BYTES.
-		</p><p>The following suffixes may be applied to BYTES:</p><div class="itemizedlist"><ul type="disc"><li><p><code class="literal">K</code> - BYTES is a number of kilobytes</p></li><li><p><code class="literal">M</code> - BYTES is a number of megabytes</p></li><li><p><code class="literal">G</code> - BYTES is a number of gigabytes</p></li></ul></div></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507226"></a><h2>EXAMPLES</h2><p>A process writes TIFF files to a Samba share, and the
+		</p><p>The following suffixes may be applied to BYTES:</p><div class="itemizedlist"><ul type="disc"><li><p><code class="literal">K</code> - BYTES is a number of kilobytes</p></li><li><p><code class="literal">M</code> - BYTES is a number of megabytes</p></li><li><p><code class="literal">G</code> - BYTES is a number of gigabytes</p></li></ul></div></dd></dl></div></div><div class="refsect1" lang="en"><a name="id282776"></a><h2>EXAMPLES</h2><p>A process writes TIFF files to a Samba share, and the
 	is known these files will almost always be around 4 megabytes
 	(4194304 bytes): </p><pre class="programlisting">
         <em class="parameter"><code>[frames]</code></em>
 	<a class="link" href="smb.conf.5.html#PATH">path = /data/frames</a>
 	<a class="link" href="smb.conf.5.html#VFSOBJECTS">vfs objects = prealloc</a>
 	<a class="link" href="smb.conf.5.html#PREALLOC:TIFF">prealloc:tiff = 4M</a>
-</pre></div><div class="refsect1" lang="en"><a name="id2507390"></a><h2>CAVEATS</h2><p><code class="literal">vfs_prealloc</code> is not supported on all
+</pre></div><div class="refsect1" lang="en"><a name="id283386"></a><h2>CAVEATS</h2><p><code class="literal">vfs_prealloc</code> is not supported on all
 	platforms and filesystems. Currently only XFS filesystems on
 	Linux and IRIX are supported.
-	</p></div><div class="refsect1" lang="en"><a name="id2507406"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
-	</p></div><div class="refsect1" lang="en"><a name="id2507417"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
+	</p></div><div class="refsect1" lang="en"><a name="id283401"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
+	</p></div><div class="refsect1" lang="en"><a name="id283411"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar
 	to the way the Linux kernel is developed.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/vfs_readahead.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/vfs_readahead.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/vfs_readahead.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_readahead</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_readahead.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_readahead &#8212; pre-load the kernel buffer cache</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = readahead</code></p></div></div><div class="refsect1" lang="en"><a name="id2544114"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_readahead</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_readahead.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_readahead &#8212; pre-load the kernel buffer cache</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = readahead</code></p></div></div><div class="refsect1" lang="en"><a name="id283730"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
 	<a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>This <code class="literal">vfs_readahead</code> VFS module detects
 	read requests at multiples of a given offset (hex 0x80000 by
 	default) and then tells the kernel via either the readahead
@@ -12,14 +12,14 @@
 	readahead:length option. By default this is set to the
 	same value as the readahead:offset option and if not
 	set explicitly will use the current value of
-	readahead:offset.</p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id2507191"></a><h2>OPTIONS</h2><div class="variablelist"><p>The following suffixes may be applied to BYTES:</p><div class="itemizedlist"><ul type="disc"><li><p><code class="literal">K</code> - BYTES is a number of kilobytes</p></li><li><p><code class="literal">M</code> - BYTES is a number of megabytes</p></li><li><p><code class="literal">G</code> - BYTES is a number of gigabytes</p></li></ul></div><dl><dt><span class="term">readahead:offset = BYTES</span></dt><dd><p>The offset multiple that causes readahead to be
+	readahead:offset.</p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id282740"></a><h2>OPTIONS</h2><div class="variablelist"><p>The following suffixes may be applied to BYTES:</p><div class="itemizedlist"><ul type="disc"><li><p><code class="literal">K</code> - BYTES is a number of kilobytes</p></li><li><p><code class="literal">M</code> - BYTES is a number of megabytes</p></li><li><p><code class="literal">G</code> - BYTES is a number of gigabytes</p></li></ul></div><dl><dt><span class="term">readahead:offset = BYTES</span></dt><dd><p>The offset multiple that causes readahead to be
 		requested of the kernel buffer cache.</p></dd><dt><span class="term">readahead:length = BYTES</span></dt><dd><p>The number of bytes requested to be
 		read into the kernel buffer cache on each
-		readahead call.</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507265"></a><h2>EXAMPLES</h2><pre class="programlisting">
+		readahead call.</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id283367"></a><h2>EXAMPLES</h2><pre class="programlisting">
 	<em class="parameter"><code>[hypothetical]</code></em>
 	<a class="link" href="smb.conf.5.html#VFSOBJECTS">vfs objects = readahead</a>
-</pre></div><div class="refsect1" lang="en"><a name="id2507400"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
-	</p></div><div class="refsect1" lang="en"><a name="id2507410"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
+</pre></div><div class="refsect1" lang="en"><a name="id283395"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
+	</p></div><div class="refsect1" lang="en"><a name="id283405"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar
 	to the way the Linux kernel is developed.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/vfs_readonly.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/vfs_readonly.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/vfs_readonly.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,15 +1,15 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_readonly</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_readonly.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_readonly &#8212; make a Samba share read only for a specified time period</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = readonly</code></p></div></div><div class="refsect1" lang="en"><a name="id2544116"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_readonly</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_readonly.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_readonly &#8212; make a Samba share read only for a specified time period</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = readonly</code></p></div></div><div class="refsect1" lang="en"><a name="id315552"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
 	<a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The <code class="literal">vfs_readonly</code> VFS module marks a share
 	as read only for all clients connecting within the configured
 	time period. Clients connecting during this time will be denied
 	write access to all files in the share, irrespective of ther
-	actual access privileges.</p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id2544151"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">readonly:period = BEGIN, END</span></dt><dd><p>Only mark the share as read only if the client
+	actual access privileges.</p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id283762"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">readonly:period = BEGIN, END</span></dt><dd><p>Only mark the share as read only if the client
 		connection was made between the times marked by the
 		BEGIN and END date specifiers.
 		The syntax of these date specifiers is the
 		same as that accepted by the -d option of GNU
 		<a class="citerefentry" href="date.1.html"><span class="citerefentry"><span class="refentrytitle">date</span>(1)</span></a>.
-		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507202"></a><h2>EXAMPLES</h2><p>Mark all shares read only:</p><pre class="programlisting">
+		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id282752"></a><h2>EXAMPLES</h2><p>Mark all shares read only:</p><pre class="programlisting">
         <em class="parameter"><code>[global]</code></em>
 	<a class="link" href="smb.conf.5.html#VFSOBJECTS">vfs objects = readonly</a>
 </pre><p>Mark the [backup] share as read only during business hours:</p><pre class="programlisting">
@@ -17,8 +17,8 @@
 	<a class="link" href="smb.conf.5.html#PATH">path = /readonly</a>
 	<a class="link" href="smb.conf.5.html#VFSOBJECTS">vfs objects = readonly</a>
 	<a class="link" href="smb.conf.5.html#READONLY:PERIOD">readonly:period = readonly:period = "today 9:00","today 17:00"</a>
-</pre></div><div class="refsect1" lang="en"><a name="id2507390"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
-	</p></div><div class="refsect1" lang="en"><a name="id2507401"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
+</pre></div><div class="refsect1" lang="en"><a name="id283383"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
+	</p></div><div class="refsect1" lang="en"><a name="id283394"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar
 	to the way the Linux kernel is developed.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/vfs_recycle.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/vfs_recycle.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/vfs_recycle.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_recycle</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_recycle.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_recycle &#8212; Samba VFS recycle bin</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = recycle</code></p></div></div><div class="refsect1" lang="en"><a name="id2544116"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_recycle</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_recycle.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_recycle &#8212; Samba VFS recycle bin</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = recycle</code></p></div></div><div class="refsect1" lang="en"><a name="id283730"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
 	<a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The <code class="literal">vfs_recycle</code> intercepts file deletion
 	requests and moves the affected files to a temporary repository
 	rather than deleting them immediately. This gives the same effect
@@ -10,7 +10,7 @@
 	of the created directory depends on recycle:repository. Users
 	can recover files from the recycle bin. If the recycle:keeptree
 	option has been specified, deleted files will be found in a path
-	identical with that from which the file was deleted.  </p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id2507179"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">recycle:repository = PATH</span></dt><dd><p>Path of the directory where deleted files should be moved.
+	identical with that from which the file was deleted.  </p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id282727"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">recycle:repository = PATH</span></dt><dd><p>Path of the directory where deleted files should be moved.
 		</p><p>If this option is not set, the default path .recycle
 		is used. </p></dd><dt><span class="term">recycle:directory_mode = MODE</span></dt><dd><p>Set MODE to the octal mode the recycle repository
 		should be created with.  The recycle repository will be
@@ -47,14 +47,14 @@
 		</p></dd><dt><span class="term">recycle:noversions = LIST</span></dt><dd><p>Specifies a list of paths (wildcards such as *
 		and ? are supported) for which no versioning should
 		be used. Only useful when recycle:versions is enabled.
-		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507392"></a><h2>EXAMPLES</h2><p>Log operations on all shares using the LOCAL1 facility
+		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id282925"></a><h2>EXAMPLES</h2><p>Log operations on all shares using the LOCAL1 facility
 	and NOTICE priority:</p><pre class="programlisting">
         <em class="parameter"><code>[global]</code></em>
 	<a class="link" href="smb.conf.5.html#VFSOBJECTS">vfs objects = recycle</a>
 	<a class="link" href="smb.conf.5.html#RECYCLE:FACILITY">recycle:facility = LOCAL1</a>
 	<a class="link" href="smb.conf.5.html#RECYCLE:PRIORITY">recycle:priority = NOTICE</a>
-</pre></div><div class="refsect1" lang="en"><a name="id2507451"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
-	</p></div><div class="refsect1" lang="en"><a name="id2507462"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
+</pre></div><div class="refsect1" lang="en"><a name="id283081"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
+	</p></div><div class="refsect1" lang="en"><a name="id283091"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar
 	to the way the Linux kernel is developed.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/vfs_shadow_copy.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/vfs_shadow_copy.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/vfs_shadow_copy.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,9 +1,9 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_shadow_copy</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_shadow_copy.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_shadow_copy &#8212; Make a Samba share read only for a specified time period</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = shadow_copy</code></p></div></div><div class="refsect1" lang="en"><a name="id2544117"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_shadow_copy</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_shadow_copy.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_shadow_copy &#8212; Make a Samba share read only for a specified time period</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = shadow_copy</code></p></div></div><div class="refsect1" lang="en"><a name="id315551"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
 	<a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The <code class="literal">vfs_shadow_copy</code> VFS module functionality
 	that is similar to Microsoft Shadow Copy services. When setup properly,
 	this module allows Microsoft Shadow Copy clients to browse
 	"shadow copies" on Samba shares.
-	</p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id2544151"></a><h2>CONFIGURATION</h2><p><code class="literal">vfs_shadow_copy</code> relies on a filesystem
+	</p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id283762"></a><h2>CONFIGURATION</h2><p><code class="literal">vfs_shadow_copy</code> relies on a filesystem
 	snapshot implementation. Many common filesystems have native
 	support for this.
 	</p><p>Filesystem snapshots must be mounted on
@@ -16,17 +16,17 @@
 	<a class="citerefentry" href="date.1.html"><span class="citerefentry"><span class="refentrytitle">date</span>(1)</span></a> command:
 	</p><pre class="programlisting">
 	TZ=GMT date + at GMT-%Y.%m.%d-%H.%M.%S
-	</pre></div><div class="refsect1" lang="en"><a name="id2507283"></a><h2>EXAMPLES</h2><p>Add shadow copy support to user home directories:</p><pre class="programlisting">
+	</pre></div><div class="refsect1" lang="en"><a name="id283383"></a><h2>EXAMPLES</h2><p>Add shadow copy support to user home directories:</p><pre class="programlisting">
         <em class="parameter"><code>[homes]</code></em>
 	<a class="link" href="smb.conf.5.html#VFSOBJECTS">vfs objects = shadow_copy</a>
-</pre></div><div class="refsect1" lang="en"><a name="id2507420"></a><h2>CAVEATS</h2><p>This is not a backup, archival, or version control solution.
+</pre></div><div class="refsect1" lang="en"><a name="id283414"></a><h2>CAVEATS</h2><p>This is not a backup, archival, or version control solution.
 	</p><p>With Samba or Windows servers,
 	<code class="literal">vfs_shadow_copy</code> is designed to be an end-user
 	tool only. It does not replace or enhance your backup and
 	archival solutions and should in no way be considered as
 	such. Additionally, if you need version control, implement a
-	version control system.</p></div><div class="refsect1" lang="en"><a name="id2507445"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
-	</p></div><div class="refsect1" lang="en"><a name="id2507456"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
+	version control system.</p></div><div class="refsect1" lang="en"><a name="id282988"></a><h2>VERSION</h2><p>This man page is correct for version 3.0.25 of the Samba suite.
+	</p></div><div class="refsect1" lang="en"><a name="id282998"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar
 	to the way the Linux kernel is developed.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/vfs_xattr_tdb.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/vfs_xattr_tdb.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/vfs_xattr_tdb.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,12 +1,12 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_xattr_tdb</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_xattr_tdb.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_xattr_tdb &#8212; Save Extended Attributes (EAs) in a tdb file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = xattr_tdb</code></p></div></div><div class="refsect1" lang="en"><a name="id2544115"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfs_xattr_tdb</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfs_xattr_tdb.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfs_xattr_tdb &#8212; Save Extended Attributes (EAs) in a tdb file</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfs objects = xattr_tdb</code></p></div></div><div class="refsect1" lang="en"><a name="id315552"></a><h2>DESCRIPTION</h2><p>This VFS module is part of the
 	<a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The <code class="literal">vfs_xattr_tdb</code> VFS module stores
 	Extended Attributes (EAs) in a tdb file. 
 	This enables the usage of Extended Attributes on OS and 
 	filesystems which do not support Extended Attributes 
 	by themselves.	
-	</p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id2544149"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">xattr_tdb:file = PATH</span></dt><dd><p>Name of the tdb file the EAs are stored in.
+	</p><p>This module is stackable.</p></div><div class="refsect1" lang="en"><a name="id283762"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">xattr_tdb:file = PATH</span></dt><dd><p>Name of the tdb file the EAs are stored in.
 		If this option is not set, the default filename 
-		<code class="filename">xattr.tdb</code> is used.</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507196"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
+		<code class="filename">xattr.tdb</code> is used.</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id282749"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar
 	to the way the Linux kernel is developed.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/vfstest.1.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/vfstest.1.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/vfstest.1.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,8 +1,8 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfstest</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfstest.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfstest &#8212; tool for testing samba VFS modules </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfstest</code> [-d debuglevel] [-c command] [-l logdir] [-h]</p></div></div><div class="refsect1" lang="en"><a name="id2544153"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">vfstest</code> is a small command line
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>vfstest</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="vfstest.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>vfstest &#8212; tool for testing samba VFS modules </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">vfstest</code> [-d debuglevel] [-c command] [-l logdir] [-h]</p></div></div><div class="refsect1" lang="en"><a name="id283760"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">vfstest</code> is a small command line
 	utility that has the ability to test dso samba VFS modules. It gives the
 	user the ability to call the various VFS functions manually and
 	supports cascaded VFS modules.
-	</p></div><div class="refsect1" lang="en"><a name="id2507199"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-c|--command=command</span></dt><dd><p>Execute the specified (colon-separated) commands.
+	</p></div><div class="refsect1" lang="en"><a name="id282745"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-c|--command=command</span></dt><dd><p>Execute the specified (colon-separated) commands.
 		See below for the commands that are available.
 		</p></dd><dt><span class="term">-h|--help</span></dt><dd><p>Print a summary of command line options.
 </p></dd><dt><span class="term">-l|--logfile=logbasename</span></dt><dd><p>File name for log/debug files. The extension
@@ -32,10 +32,10 @@
 compile time.</p></dd><dt><span class="term">-l|--log-basename=logdirectory</span></dt><dd><p>Base directory name for log/debug files. The extension
 <code class="constant">".progname"</code> will be appended (e.g. log.smbclient, 
 log.smbd, etc...). The log file is never removed by the client.
-</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2507461"></a><h2>COMMANDS</h2><p><span class="emphasis"><em>VFS COMMANDS</em></span></p><div class="itemizedlist"><ul type="disc"><li><p><code class="literal">load &lt;module.so&gt;</code> - Load specified VFS module </p></li><li><p><code class="literal">populate &lt;char&gt; &lt;size&gt;</code> - Populate a data buffer with the specified data
+</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id282995"></a><h2>COMMANDS</h2><p><span class="emphasis"><em>VFS COMMANDS</em></span></p><div class="itemizedlist"><ul type="disc"><li><p><code class="literal">load &lt;module.so&gt;</code> - Load specified VFS module </p></li><li><p><code class="literal">populate &lt;char&gt; &lt;size&gt;</code> - Populate a data buffer with the specified data
 		</p></li><li><p><code class="literal">showdata [&lt;offset&gt; &lt;len&gt;]</code> - Show data currently in data buffer
-		</p></li><li><p><code class="literal">connect</code> - VFS connect()</p></li><li><p><code class="literal">disconnect</code> - VFS disconnect()</p></li><li><p><code class="literal">disk_free</code> - VFS disk_free()</p></li><li><p><code class="literal">opendir</code> - VFS opendir()</p></li><li><p><code class="literal">readdir</code> - VFS readdir()</p></li><li><p><code class="literal">mkdir</code> - VFS mkdir()</p></li><li><p><code class="literal">rmdir</code> - VFS rmdir()</p></li><li><p><code class="literal">closedir</code> - VFS closedir()</p></li><li><p><code class="literal">open</code> - VFS open()</p></li><li><p><code class="literal">close</code> - VFS close()</p></li><li><p><code class="literal">read</code> - VFS read()</p></li><li><p><code class="literal">write</code> - VFS write()</p></li><li><p><code class="literal">lseek</code> - VFS lseek()</p></li><li><p><code class="literal">rename</code> - VFS rename()</p></li><li><p><code class="literal">fsync</code> - VFS fsync()</p></li><li><p><code class="literal">stat</code> - VFS stat()</p></li><li><p><code class="literal">fstat</code> - VFS fstat()</p></li><li><p><code class="literal">lstat</code> - VFS lstat()</p></li><li><p><code class="literal">unlink</code> - VFS unlink()</p></li><li><p><code class="literal">chmod</code> - VFS chmod()</p></li><li><p><code class="literal">fchmod</code> - VFS fchmod()</p></li><li><p><code class="literal">chown</code> - VFS chown()</p></li><li><p><code class="literal">fchown</code> - VFS fchown()</p></li><li><p><code class="literal">chdir</code> - VFS chdir()</p></li><li><p><code class="literal">getwd</code> - VFS getwd()</p></li><li><p><code class="literal">utime</code> - VFS utime()</p></li><li><p><code class="literal">ftruncate</code> - VFS ftruncate()</p></li><li><p><code class="literal">lock</code> - VFS lock()</p></li><li><p><code class="literal">symlink</code> - VFS symlink()</p></li><li><p><code class="literal">readlink</code> - VFS readlink()</p></li><li><p><code class="literal">link</code> - VFS link()</p></li><li><p><code class="literal">mknod</code> - VFS mknod()</p></li><li><p><code class="literal">realpath</code> - VFS realpath()</p></li></ul></div><p><span class="emphasis"><em>GENERAL COMMANDS</em></span></p><div class="itemizedlist"><ul type="disc"><li><p><code class="literal">conf &lt;smb.conf&gt;</code> - Load a different configuration file</p></li><li><p><code class="literal">help [&lt;command&gt;]</code> - Get list of commands or info about specified command</p></li><li><p><code class="literal">debuglevel &lt;level&gt;</code> - Set debug level</p></li><li><p><code class="literal">freemem</code> - Free memory currently in use</p></li><li><p><code class="literal">exit</code> - Exit vfstest</p></li></ul></div></div><div class="refsect1" lang="en"><a name="id2506594"></a><h2>VERSION</h2><p>This man page is correct for version 3 of the Samba
-	suite.</p></div><div class="refsect1" lang="en"><a name="id2506605"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
+		</p></li><li><p><code class="literal">connect</code> - VFS connect()</p></li><li><p><code class="literal">disconnect</code> - VFS disconnect()</p></li><li><p><code class="literal">disk_free</code> - VFS disk_free()</p></li><li><p><code class="literal">opendir</code> - VFS opendir()</p></li><li><p><code class="literal">readdir</code> - VFS readdir()</p></li><li><p><code class="literal">mkdir</code> - VFS mkdir()</p></li><li><p><code class="literal">rmdir</code> - VFS rmdir()</p></li><li><p><code class="literal">closedir</code> - VFS closedir()</p></li><li><p><code class="literal">open</code> - VFS open()</p></li><li><p><code class="literal">close</code> - VFS close()</p></li><li><p><code class="literal">read</code> - VFS read()</p></li><li><p><code class="literal">write</code> - VFS write()</p></li><li><p><code class="literal">lseek</code> - VFS lseek()</p></li><li><p><code class="literal">rename</code> - VFS rename()</p></li><li><p><code class="literal">fsync</code> - VFS fsync()</p></li><li><p><code class="literal">stat</code> - VFS stat()</p></li><li><p><code class="literal">fstat</code> - VFS fstat()</p></li><li><p><code class="literal">lstat</code> - VFS lstat()</p></li><li><p><code class="literal">unlink</code> - VFS unlink()</p></li><li><p><code class="literal">chmod</code> - VFS chmod()</p></li><li><p><code class="literal">fchmod</code> - VFS fchmod()</p></li><li><p><code class="literal">chown</code> - VFS chown()</p></li><li><p><code class="literal">fchown</code> - VFS fchown()</p></li><li><p><code class="literal">chdir</code> - VFS chdir()</p></li><li><p><code class="literal">getwd</code> - VFS getwd()</p></li><li><p><code class="literal">utime</code> - VFS utime()</p></li><li><p><code class="literal">ftruncate</code> - VFS ftruncate()</p></li><li><p><code class="literal">lock</code> - VFS lock()</p></li><li><p><code class="literal">symlink</code> - VFS symlink()</p></li><li><p><code class="literal">readlink</code> - VFS readlink()</p></li><li><p><code class="literal">link</code> - VFS link()</p></li><li><p><code class="literal">mknod</code> - VFS mknod()</p></li><li><p><code class="literal">realpath</code> - VFS realpath()</p></li></ul></div><p><span class="emphasis"><em>GENERAL COMMANDS</em></span></p><div class="itemizedlist"><ul type="disc"><li><p><code class="literal">conf &lt;smb.conf&gt;</code> - Load a different configuration file</p></li><li><p><code class="literal">help [&lt;command&gt;]</code> - Get list of commands or info about specified command</p></li><li><p><code class="literal">debuglevel &lt;level&gt;</code> - Set debug level</p></li><li><p><code class="literal">freemem</code> - Free memory currently in use</p></li><li><p><code class="literal">exit</code> - Exit vfstest</p></li></ul></div></div><div class="refsect1" lang="en"><a name="id324732"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of the Samba
+	suite.</p></div><div class="refsect1" lang="en"><a name="id324741"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar
 	to the way the Linux kernel is developed.</p><p>The vfstest man page was written by Jelmer Vernooij.</p></div></div></body></html>

Modified: branches/samba/upstream/docs/htmldocs/manpages/wbinfo.1.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/wbinfo.1.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/wbinfo.1.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,7 +1,7 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>wbinfo</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="wbinfo.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>wbinfo &#8212; Query information from winbind daemon</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">wbinfo</code> [-a user%password] [--all-domains] [--allocate-gid] [--allocate-uid] [-D domain] [--domain domain] [-g] [--getdcname domain] [--get-auth-user] [-G gid] [-h] [-i user] [-I ip] [-K user%password] [-m] [-n name] [-N netbios-name] [--own-domain] [-p] [-r user] [-s sid] [--separator] [--sequence] [--set-auth-user user%password] [-S sid] [-t] [-u] [--uid-info uid] [--user-domgroups sid] [--user-sids sid] [-U uid] [-V] [-Y sid] [--verbose]</p></div></div><div class="refsect1" lang="en"><a name="id2507401"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The <code class="literal">wbinfo</code> program queries and returns information
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>wbinfo</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="wbinfo.1"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>wbinfo &#8212; Query information from winbind daemon</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">wbinfo</code> [-a user%password] [--all-domains] [--allocate-gid] [--allocate-uid] [-D domain] [--domain domain] [-g] [--getdcname domain] [--get-auth-user] [-G gid] [-h] [-i user] [-I ip] [-K user%password] [-m] [-n name] [-N netbios-name] [--own-domain] [-p] [-r user] [-s sid] [--separator] [--sequence] [--set-auth-user user%password] [-S sid] [-t] [-u] [--uid-info uid] [--user-domgroups sid] [--user-sids sid] [-U uid] [-V] [-Y sid] [--verbose]</p></div></div><div class="refsect1" lang="en"><a name="id282953"></a><h2>DESCRIPTION</h2><p>This tool is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p>The <code class="literal">wbinfo</code> program queries and returns information
 	created and used by the <a class="citerefentry" href="winbindd.8.html"><span class="citerefentry"><span class="refentrytitle">winbindd</span>(8)</span></a> daemon. </p><p>The <a class="citerefentry" href="winbindd.8.html"><span class="citerefentry"><span class="refentrytitle">winbindd</span>(8)</span></a> daemon must be configured
 	and running for the <code class="literal">wbinfo</code> program to be able
-	to return information.</p></div><div class="refsect1" lang="en"><a name="id2507456"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-a|--authenticate username%password</span></dt><dd><p>Attempt to authenticate a user via winbindd.
+	to return information.</p></div><div class="refsect1" lang="en"><a name="id283005"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-a|--authenticate username%password</span></dt><dd><p>Attempt to authenticate a user via winbindd.
                 This checks both authenticaion methods and reports its results.
 		</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>Do not be tempted to use this
 		functionality for authentication in third-party
@@ -82,10 +82,10 @@
 		does not correspond to a UNIX group mapped by <a class="citerefentry" href="winbindd.8.html"><span class="citerefentry"><span class="refentrytitle">winbindd</span>(8)</span></a> then
 		the operation will fail. </p></dd><dt><span class="term">-V</span></dt><dd><p>Prints the program version number.
 </p></dd><dt><span class="term">-h|--help</span></dt><dd><p>Print a summary of command line options.
-</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2506793"></a><h2>EXIT STATUS</h2><p>The wbinfo program returns 0 if the operation
+</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id324919"></a><h2>EXIT STATUS</h2><p>The wbinfo program returns 0 if the operation
 	succeeded, or 1 if the operation failed.  If the <a class="citerefentry" href="winbindd.8.html"><span class="citerefentry"><span class="refentrytitle">winbindd</span>(8)</span></a> daemon is not working <code class="literal">wbinfo</code> will always return
-	failure. </p></div><div class="refsect1" lang="en"><a name="id2553518"></a><h2>VERSION</h2><p>This man page is correct for version 3 of
-	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2553529"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="winbindd.8.html"><span class="citerefentry"><span class="refentrytitle">winbindd</span>(8)</span></a> and <a class="citerefentry" href="ntlm_auth.1.html"><span class="citerefentry"><span class="refentrytitle">ntlm_auth</span>(1)</span></a></p></div><div class="refsect1" lang="en"><a name="id2553552"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
+	failure. </p></div><div class="refsect1" lang="en"><a name="id324943"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of
+	the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id324953"></a><h2>SEE ALSO</h2><p><a class="citerefentry" href="winbindd.8.html"><span class="citerefentry"><span class="refentrytitle">winbindd</span>(8)</span></a> and <a class="citerefentry" href="ntlm_auth.1.html"><span class="citerefentry"><span class="refentrytitle">ntlm_auth</span>(1)</span></a></p></div><div class="refsect1" lang="en"><a name="id324975"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar
 	to the way the Linux kernel is developed.</p><p><code class="literal">wbinfo</code> and <code class="literal">winbindd</code>

Modified: branches/samba/upstream/docs/htmldocs/manpages/winbindd.8.html
===================================================================
--- branches/samba/upstream/docs/htmldocs/manpages/winbindd.8.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/htmldocs/manpages/winbindd.8.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,5 +1,5 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>winbindd</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="winbindd.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>winbindd &#8212; Name Service Switch daemon for resolving names
-	from NT servers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">winbindd</code> [-D] [-F] [-S] [-i] [-Y] [-d &lt;debug level&gt;] [-s &lt;smb config file&gt;] [-n]</p></div></div><div class="refsect1" lang="en"><a name="id2507203"></a><h2>DESCRIPTION</h2><p>This program is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">winbindd</code> is a daemon that provides
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>winbindd</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry" lang="en"><a name="winbindd.8"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>winbindd &#8212; Name Service Switch daemon for resolving names
+	from NT servers</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis"><p><code class="literal">winbindd</code> [-D] [-F] [-S] [-i] [-Y] [-d &lt;debug level&gt;] [-s &lt;smb config file&gt;] [-n]</p></div></div><div class="refsect1" lang="en"><a name="id282746"></a><h2>DESCRIPTION</h2><p>This program is part of the <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a> suite.</p><p><code class="literal">winbindd</code> is a daemon that provides
 	a number of services to the Name Service Switch capability found
 	in most modern C libraries, to arbitrary applications via PAM
 	and <code class="literal">ntlm_auth</code> and to Samba itself.</p><p>Even if winbind is not used for nsswitch, it still provides a
@@ -57,7 +57,7 @@
 	resolve hostnames from <code class="filename">/etc/hosts</code> and then from the
 	WINS server.</p><pre class="programlisting">
 hosts:		files wins
-</pre></div><div class="refsect1" lang="en"><a name="id2506338"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-F</span></dt><dd><p>If specified, this parameter causes
+</pre></div><div class="refsect1" lang="en"><a name="id324498"></a><h2>OPTIONS</h2><div class="variablelist"><dl><dt><span class="term">-F</span></dt><dd><p>If specified, this parameter causes
 		the main <code class="literal">winbindd</code> process to not daemonize,
 		i.e. double-fork and disassociate with the terminal.
 		Child processes are still created as normal to service
@@ -110,7 +110,7 @@
 		as a single process (the mode of operation in Samba 2.2).  Winbindd's
 		default behavior is to launch a child process that is responsible for
 		updating expired cache entries.
-		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2506603"></a><h2>NAME AND ID RESOLUTION</h2><p>Users and groups on a Windows NT server are assigned
+		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id324720"></a><h2>NAME AND ID RESOLUTION</h2><p>Users and groups on a Windows NT server are assigned
 	a security id (SID) which is globally unique when the
 	user or group is created.  To convert the Windows NT user or group
 	into a unix user or group, a mapping between SIDs and unix user
@@ -126,7 +126,7 @@
 	determine which user and group ids correspond to Windows NT user
 	and group rids. </p><p>See the <a class="link" href="smb.conf.5.html#IDMAPDOMAINS">idmap domains</a> or the old <a class="link" href="smb.conf.5.html#IDMAPBACKEND">idmap backend</a> parameters in
         <code class="filename">smb.conf</code> for options for sharing this
-        database, such as via LDAP.</p></div><div class="refsect1" lang="en"><a name="id2506677"></a><h2>CONFIGURATION</h2><p>Configuration of the <code class="literal">winbindd</code> daemon
+        database, such as via LDAP.</p></div><div class="refsect1" lang="en"><a name="id324773"></a><h2>CONFIGURATION</h2><p>Configuration of the <code class="literal">winbindd</code> daemon
 	is done through configuration parameters in the <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a> file.  All parameters should be specified in the
 	[global] section of smb.conf. </p><div class="itemizedlist"><ul type="disc"><li><p>
 		<a class="link" href="smb.conf.5.html#WINBINDSEPARATOR">winbind separator</a></p></li><li><p>
@@ -143,7 +143,7 @@
 		Setting this parameter forces winbindd to use RPC
 		instead of LDAP to retrieve information from Domain
 		Controllers.
-		</p></li></ul></div></div><div class="refsect1" lang="en"><a name="id2553576"></a><h2>EXAMPLE SETUP</h2><p>
+		</p></li></ul></div></div><div class="refsect1" lang="en"><a name="id324918"></a><h2>EXAMPLE SETUP</h2><p>
 	To setup winbindd for user and group lookups plus
 	authentication from a domain controller use something like the
 	following setup. This was tested on an early Red Hat Linux box.
@@ -194,7 +194,7 @@
 	and that you can login to your unix box as a domain user, using
 	the DOMAIN+user syntax for the username. You may wish to use the
 	commands <code class="literal">getent passwd</code> and <code class="literal">getent group
-	</code> to confirm the correct operation of winbindd.</p></div><div class="refsect1" lang="en"><a name="id2553784"></a><h2>NOTES</h2><p>The following notes are useful when configuring and
+	</code> to confirm the correct operation of winbindd.</p></div><div class="refsect1" lang="en"><a name="id325091"></a><h2>NOTES</h2><p>The following notes are useful when configuring and
 	running <code class="literal">winbindd</code>: </p><p><a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> must be running on the local machine
 	for <code class="literal">winbindd</code> to work. </p><p>PAM is really easy to misconfigure.  Make sure you know what
 	you are doing when modifying PAM configuration files.  It is possible
@@ -202,7 +202,7 @@
 	then in general the user and groups ids allocated by winbindd will not
 	be the same.  The user and group ids will only be valid for the local
 	machine, unless a shared <a class="link" href="smb.conf.5.html#IDMAPBACKEND">idmap backend</a> is configured.</p><p>If the the Windows NT SID to UNIX user and group id mapping
-	file is damaged or destroyed then the mappings will be lost. </p></div><div class="refsect1" lang="en"><a name="id2553856"></a><h2>SIGNALS</h2><p>The following signals can be used to manipulate the
+	file is damaged or destroyed then the mappings will be lost. </p></div><div class="refsect1" lang="en"><a name="id325147"></a><h2>SIGNALS</h2><p>The following signals can be used to manipulate the
 	<code class="literal">winbindd</code> daemon. </p><div class="variablelist"><dl><dt><span class="term">SIGHUP</span></dt><dd><p>Reload the <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a> file and
 		apply any parameter changes to the running
 		version of winbindd.  This signal also clears any cached
@@ -210,7 +210,7 @@
 		by winbindd is also reloaded.  </p></dd><dt><span class="term">SIGUSR2</span></dt><dd><p>The SIGUSR2 signal will cause <code class="literal">
 		winbindd</code> to write status information to the winbind
 		log file.</p><p>Log files are stored in the filename specified by the
-		log file parameter.</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2553921"></a><h2>FILES</h2><div class="variablelist"><dl><dt><span class="term"><code class="filename">/etc/nsswitch.conf(5)</code></span></dt><dd><p>Name service switch configuration file.</p></dd><dt><span class="term">/tmp/.winbindd/pipe</span></dt><dd><p>The UNIX pipe over which clients communicate with
+		log file parameter.</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id325205"></a><h2>FILES</h2><div class="variablelist"><dl><dt><span class="term"><code class="filename">/etc/nsswitch.conf(5)</code></span></dt><dd><p>Name service switch configuration file.</p></dd><dt><span class="term">/tmp/.winbindd/pipe</span></dt><dd><p>The UNIX pipe over which clients communicate with
 		the <code class="literal">winbindd</code> program.  For security reasons, the
 		winbind client will only attempt to connect to the winbindd daemon
 		if both the <code class="filename">/tmp/.winbindd</code> directory
@@ -231,8 +231,8 @@
 		compiled using the <em class="parameter"><code>--with-lockdir</code></em> option.
 		This directory is by default <code class="filename">/usr/local/samba/var/locks
 		</code>. </p></dd><dt><span class="term">$LOCKDIR/winbindd_cache.tdb</span></dt><dd><p>Storage for cached user and group information.
-		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id2554076"></a><h2>VERSION</h2><p>This man page is correct for version 3 of
-        the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id2554087"></a><h2>SEE ALSO</h2><p><code class="filename">nsswitch.conf(5)</code>, <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a>, <a class="citerefentry" href="wbinfo.1.html"><span class="citerefentry"><span class="refentrytitle">wbinfo</span>(1)</span></a>, <a class="citerefentry" href="ntlm_auth.8.html"><span class="citerefentry"><span class="refentrytitle">ntlm_auth</span>(8)</span></a>, <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a>, <a class="citerefentry" href="pam_winbind.8.html"><span class="citerefentry"><span class="refentrytitle">pam_winbind</span>(8)</span></a></p></div><div class="refsect1" lang="en"><a name="id2554145"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
+		</p></dd></dl></div></div><div class="refsect1" lang="en"><a name="id325338"></a><h2>VERSION</h2><p>This man page is correct for version 3.0 of
+        the Samba suite.</p></div><div class="refsect1" lang="en"><a name="id325349"></a><h2>SEE ALSO</h2><p><code class="filename">nsswitch.conf(5)</code>, <a class="citerefentry" href="samba.7.html"><span class="citerefentry"><span class="refentrytitle">samba</span>(7)</span></a>, <a class="citerefentry" href="wbinfo.1.html"><span class="citerefentry"><span class="refentrytitle">wbinfo</span>(1)</span></a>, <a class="citerefentry" href="ntlm_auth.8.html"><span class="citerefentry"><span class="refentrytitle">ntlm_auth</span>(8)</span></a>, <a class="citerefentry" href="smb.conf.5.html"><span class="citerefentry"><span class="refentrytitle">smb.conf</span>(5)</span></a>, <a class="citerefentry" href="pam_winbind.8.html"><span class="citerefentry"><span class="refentrytitle">pam_winbind</span>(8)</span></a></p></div><div class="refsect1" lang="en"><a name="id325404"></a><h2>AUTHOR</h2><p>The original Samba software and related utilities
 	were created by Andrew Tridgell. Samba is now developed
 	by the Samba Team as an Open Source project similar
 	to the way the Linux kernel is developed.</p><p><code class="literal">wbinfo</code> and <code class="literal">winbindd</code> were

Modified: branches/samba/upstream/docs/manpages/eventlogadm.8
===================================================================
--- branches/samba/upstream/docs/manpages/eventlogadm.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/eventlogadm.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: eventlogadm
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "EVENTLOGADM" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "EVENTLOGADM" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/findsmb.1
===================================================================
--- branches/samba/upstream/docs/manpages/findsmb.1	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/findsmb.1	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: findsmb
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: User Commands
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "FINDSMB" "1" "06/10/2008" "Samba 3\.2" "User Commands"
+.TH "FINDSMB" "1" "05/28/2008" "Samba 3\.0" "User Commands"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -98,7 +98,7 @@
 .RE
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "SEE ALSO"
 .PP
 \fBnmbd\fR(8),

Modified: branches/samba/upstream/docs/manpages/idmap_ad.8
===================================================================
--- branches/samba/upstream/docs/manpages/idmap_ad.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/idmap_ad.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: idmap_ad
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "IDMAP_AD" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "IDMAP_AD" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/idmap_ldap.8
===================================================================
--- branches/samba/upstream/docs/manpages/idmap_ldap.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/idmap_ldap.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: idmap_ldap
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "IDMAP_LDAP" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "IDMAP_LDAP" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/idmap_nss.8
===================================================================
--- branches/samba/upstream/docs/manpages/idmap_nss.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/idmap_nss.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: idmap_nss
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "IDMAP_NSS" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "IDMAP_NSS" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/idmap_rid.8
===================================================================
--- branches/samba/upstream/docs/manpages/idmap_rid.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/idmap_rid.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: idmap_rid
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "IDMAP_RID" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "IDMAP_RID" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/idmap_tdb.8
===================================================================
--- branches/samba/upstream/docs/manpages/idmap_tdb.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/idmap_tdb.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: idmap_tdb
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "IDMAP_TDB" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "IDMAP_TDB" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Deleted: branches/samba/upstream/docs/manpages/ldb.3
===================================================================
--- branches/samba/upstream/docs/manpages/ldb.3	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/ldb.3	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,434 +0,0 @@
-.\"     Title: ldb
-.\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
-.\"    Manual: C Library Functions
-.\"    Source: Samba 3.2
-.\"
-.TH "LDB" "3" "06/10/2008" "Samba 3\.2" "C Library Functions"
-.\" disable hyphenation
-.nh
-.\" disable justification (adjust text to left margin only)
-.ad l
-.SH "NAME"
-ldb - A light-weight database library
-.SH "SYNOPSIS"
-.sp
-.RS 4
-.nf
-#include <ldb\.h>
-.fi
-.RE
-.SH "DESCRIPTION"
-.PP
-ldb is a light weight embedded database library and API\. With a programming interface that is very similar to LDAP, ldb can store its data either in a tdb(3) database or in a real LDAP database\.
-.PP
-When used with the tdb backend ldb does not require any database daemon\. Instead, ldb function calls are processed immediately by the ldb library, which does IO directly on the database, while allowing multiple readers/writers using operating system byte range locks\. This leads to an API with very low overheads, often resulting in speeds of more than 10x what can be achieved with a more traditional LDAP architecture\.
-.PP
-In a taxonomy of databases ldb would sit half way between key/value pair databases (such as berkley db or tdb) and a full LDAP database\. With a structured attribute oriented API like LDAP and good indexing capabilities, ldb can be used for quite sophisticated applications that need a light weight database, without the administrative overhead of a full LDAP installation\.
-.PP
-Included with ldb are a number of useful command line tools for manipulating a ldb database\. These tools are similar in style to the equivalent ldap command line tools\.
-.PP
-In its default mode of operation with a tdb backend, ldb can also be seen as a "schema\-less LDAP"\. By default ldb does not require a schema, which greatly reduces the complexity of getting started with ldb databases\. As the complexity of you application grows you can take advantage of some of the optional schema\-like attributes that ldb offers, or you can migrate to using the full LDAP api while keeping your exiting ldb code\.
-.PP
-If you are new to ldb, then I suggest starting with the manual pages for ldbsearch(1) and ldbedit(1), and experimenting with a local database\. Then I suggest you look at the ldb_connect(3) and ldb_search(3) manual pages\.
-.SH "TOOLS"
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-ldbsearch(1)
-\- command line ldb search utility
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-ldbedit(1)
-\- edit all or part of a ldb database using your favourite editor
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-ldbadd(1)
-\- add records to a ldb database using LDIF formatted input
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-ldbdel(1)
-\- delete records from a ldb database
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-ldbmodify(1)
-\- modify records in a ldb database using LDIF formatted input
-.SH "FUNCTIONS"
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_connect(3)\fR
-\- connect to a ldb backend
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_search(3)\fR
-\- perform a database search
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_add(3)\fR
-\- add a record to the database
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_delete(3)\fR
-\- delete a record from the database
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_modify(3)\fR
-\- modify a record in the database
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_errstring(3)\fR
-\- retrieve extended error information from the last operation
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_ldif_write(3)\fR
-\- write a LDIF formatted message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_ldif_write_file(3)\fR
-\- write a LDIF formatted message to a file
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_ldif_read(3)\fR
-\- read a LDIF formatted message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_ldif_read_free(3)\fR
-\- free the result of a ldb_ldif_read()
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_ldif_read_file(3)\fR
-\- read a LDIF message from a file
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_ldif_read_string(3)\fR
-\- read a LDIF message from a string
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_msg_find_element(3)\fR
-\- find an element in a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_val_equal_exact(3)\fR
-\- compare two ldb_val structures
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_msg_find_val(3)\fR
-\- find an element by value
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_msg_add_empty(3)\fR
-\- add an empty message element to a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_msg_add(3)\fR
-\- add a non\-empty message element to a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_msg_element_compare(3)\fR
-\- compare two ldb_message_element structures
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_msg_find_int(3)\fR
-\- return an integer value from a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_msg_find_uint(3)\fR
-\- return an unsigned integer value from a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_msg_find_double(3)\fR
-\- return a double value from a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_msg_find_string(3)\fR
-\- return a string value from a ldb_message
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_set_alloc(3)\fR
-\- set the memory allocation function to be used by ldb
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_set_debug(3)\fR
-\- set a debug handler to be used by ldb
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-
-\fBldb_set_debug_stderr(3)\fR
-\- set a debug handler for stderr output
-.SH "AUTHOR"
-.PP
-ldb was written by
-Andrew Tridgell\.
-.PP
-If you wish to report a problem or make a suggestion then please see the
-: http://ldb.samba.org/
-web site for current contact and maintainer information\.
-.PP
-ldb is released under the GNU Lesser General Public License version 2 or later\. Please see the file COPYING for license details\.

Deleted: branches/samba/upstream/docs/manpages/ldbadd.1
===================================================================
--- branches/samba/upstream/docs/manpages/ldbadd.1	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/ldbadd.1	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,55 +0,0 @@
-.\"     Title: ldbadd
-.\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
-.\"    Manual: User Commands
-.\"    Source: Samba 3.2
-.\"
-.TH "LDBADD" "1" "06/10/2008" "Samba 3\.2" "User Commands"
-.\" disable hyphenation
-.nh
-.\" disable justification (adjust text to left margin only)
-.ad l
-.SH "NAME"
-ldbadd - Command-line utility for adding records to an LDB
-.SH "SYNOPSIS"
-.HP 1
-ldbadd [\-h] [\-H\ LDB\-URL] [ldif\-file1] [ldif\-file2] [\.\.\.]
-.SH "DESCRIPTION"
-.PP
-ldbadd adds records to an ldb(7) database\. It reads the ldif(5) files specified on the command line and adds the records from these files to the LDB database, which is specified by the \-H option or the LDB_URL environment variable\.
-.PP
-If \- is specified as a ldb file, the ldif input is read from standard input\.
-.SH "OPTIONS"
-.PP
-\-h
-.RS 4
-Show list of available options\.
-.RE
-.PP
-\-H <ldb\-url>
-.RS 4
-LDB URL to connect to\. See ldb(7) for details\.
-.RE
-.SH "ENVIRONMENT"
-.PP
-LDB_URL
-.RS 4
-LDB URL to connect to (can be overrided by using the \-H command\-line option\.)
-.RE
-.SH "VERSION"
-.PP
-This man page is correct for version 4\.0 of the Samba suite\.
-.SH "SEE ALSO"
-.PP
-ldb(7), ldbmodify, ldbdel, ldif(5)
-.SH "AUTHOR"
-.PP
-ldb was written by
-Andrew Tridgell\.
-.PP
-If you wish to report a problem or make a suggestion then please see the
-: http://ldb.samba.org/
-web site for current contact and maintainer information\.
-.PP
-This manpage was written by Jelmer Vernooij\.

Deleted: branches/samba/upstream/docs/manpages/ldbdel.1
===================================================================
--- branches/samba/upstream/docs/manpages/ldbdel.1	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/ldbdel.1	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,57 +0,0 @@
-.\"     Title: ldbdel
-.\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
-.\"    Manual: User Commands
-.\"    Source: Samba 3.2
-.\"
-.TH "LDBDEL" "1" "06/10/2008" "Samba 3\.2" "User Commands"
-.\" disable hyphenation
-.nh
-.\" disable justification (adjust text to left margin only)
-.ad l
-.SH "NAME"
-ldbdel - Command-line program for deleting LDB records
-.SH "SYNOPSIS"
-.HP 1
-ldbdel [\-h] [\-H\ LDB\-URL] [dn] [\.\.\.]
-.SH "DESCRIPTION"
-.PP
-ldbdel deletes records from an ldb(7) database\. It deletes the records identified by the dn\'s specified on the command\-line\.
-.PP
-ldbdel uses either the database that is specified with the \-H option or the database specified by the LDB_URL environment variable\.
-.SH "OPTIONS"
-.PP
-\-h
-.RS 4
-Show list of available options\.
-.RE
-.PP
-\-H <ldb\-url>
-.RS 4
-LDB URL to connect to\. See ldb(7) for details\.
-.RE
-.SH "ENVIRONMENT"
-.PP
-LDB_URL
-.RS 4
-LDB URL to connect to (can be overrided by using the \-H command\-line option\.)
-.RE
-.SH "VERSION"
-.PP
-This man page is correct for version 4\.0 of the Samba suite\.
-.SH "SEE ALSO"
-.PP
-ldb(7), ldbmodify, ldbadd, ldif(5)
-.SH "AUTHOR"
-.PP
-ldb was written by
-Andrew Tridgell\.
-.PP
-If you wish to report a problem or make a suggestion then please see the
-: http://ldb.samba.org/
-web site for current contact and maintainer information\.
-.PP
-ldbdel was written by Andrew Tridgell\.
-.PP
-This manpage was written by Jelmer Vernooij\.

Deleted: branches/samba/upstream/docs/manpages/ldbedit.1
===================================================================
--- branches/samba/upstream/docs/manpages/ldbedit.1	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/ldbedit.1	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,88 +0,0 @@
-.\"     Title: ldbedit
-.\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
-.\"    Manual: User Commands
-.\"    Source: Samba 3.2
-.\"
-.TH "LDBEDIT" "1" "06/10/2008" "Samba 3\.2" "User Commands"
-.\" disable hyphenation
-.nh
-.\" disable justification (adjust text to left margin only)
-.ad l
-.SH "NAME"
-ldbedit - Edit LDB databases using your preferred editor
-.SH "SYNOPSIS"
-.HP 1
-ldbedit [\-?] [\-\-usage] [\-s\ base|one|sub] [\-b\ basedn] [\-a] [\-e\ editor] [\-H\ LDB\-URL] [expression] [attributes...]
-.SH "DESCRIPTION"
-.PP
-ldbedit is a utility that allows you to edit LDB entries (in tdb files, sqlite files or LDAP servers) using your preferred editor\. ldbedit generates an LDIF file based on your query, allows you to edit the LDIF, and then merges that LDIF back into the LDB backend\.
-.SH "OPTIONS"
-.PP
-\-?, \-\-help
-.RS 4
-Show list of available options, and a phrase describing what that option does\.
-.RE
-.PP
-\-\-usage
-.RS 4
-Show list of available options\. This is similar to the help option, however it does not provide any description, and is hence shorter\.
-.RE
-.PP
-\-H <ldb\-url>
-.RS 4
-LDB URL to connect to\. For a tdb database, this will be of the form tdb://\fIfilename\fR\. For a LDAP connection over unix domain sockets, this will be of the form ldapi://\fIsocket\fR\. For a (potentially remote) LDAP connection over TCP, this will be of the form ldap://\fIhostname\fR\. For an SQLite database, this will be of the form sqlite://\fIfilename\fR\.
-.RE
-.PP
-\-s one|sub|base
-.RS 4
-Search scope to use\. One\-level, subtree or base\.
-.RE
-.PP
-\-a, \-all
-.RS 4
-Edit all records\. This allows you to apply the same change to a number of records at once\. You probably want to combine this with an expression of the form "objectclass=*"\.
-.RE
-.PP
-\-e editor, \-\-editor editor
-.RS 4
-Specify the editor that should be used (overrides the VISUAL and EDITOR environment variables)\. If this option is not used, and neither VISUAL nor EDITOR environment variables are set, then the vi editor will be used\.
-.RE
-.PP
-\-b basedn
-.RS 4
-Specify Base Distinguished Name to use\.
-.RE
-.PP
-\-v, \-\-verbose
-.RS 4
-Make ldbedit more verbose about the operations that are being performed\. Without this option, ldbedit will only provide a summary change line\.
-.RE
-.SH "ENVIRONMENT"
-.PP
-LDB_URL
-.RS 4
-LDB URL to connect to\. This can be overridden by using the \-H command\-line option\.)
-.RE
-.PP
-VISUAL and EDITOR
-.RS 4
-Environment variables used to determine what editor to use\. VISUAL takes precedence over EDITOR, and both are overridden by the \-e command\-line option\.
-.RE
-.SH "VERSION"
-.PP
-This man page is correct for version 4\.0 of the Samba suite\.
-.SH "SEE ALSO"
-.PP
-ldb(7), ldbmodify(1), ldbdel(1), ldif(5), vi(1)
-.SH "AUTHOR"
-.PP
-ldb was written by
-Andrew Tridgell\.
-.PP
-If you wish to report a problem or make a suggestion then please see the
-: http://ldb.samba.org/
-web site for current contact and maintainer information\.
-.PP
-This manpage was written by Jelmer Vernooij and updated by Brad Hards\.

Deleted: branches/samba/upstream/docs/manpages/ldbmodify.1
===================================================================
--- branches/samba/upstream/docs/manpages/ldbmodify.1	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/ldbmodify.1	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,50 +0,0 @@
-.\"     Title: ldbmodify
-.\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
-.\"    Manual: User Commands
-.\"    Source: Samba 3.2
-.\"
-.TH "LDBMODIFY" "1" "06/10/2008" "Samba 3\.2" "User Commands"
-.\" disable hyphenation
-.nh
-.\" disable justification (adjust text to left margin only)
-.ad l
-.SH "NAME"
-ldbmodify - Modify records in a LDB database
-.SH "SYNOPSIS"
-.HP 1
-ldbmodify [\-H\ LDB\-URL] [ldif\-file]
-.SH "DESCRIPTION"
-.PP
-ldbmodify changes, adds and deletes records in a LDB database\. The changes that should be made to the LDB database are read from the specified LDIF\-file\. If \- is specified as the filename, input is read from stdin\.
-.PP
-For now, see ldapmodify(1) for details on the LDIF file format\.
-.SH "OPTIONS"
-.PP
-\-H <ldb\-url>
-.RS 4
-LDB URL to connect to\. See ldb(7) for details\.
-.RE
-.SH "ENVIRONMENT"
-.PP
-LDB_URL
-.RS 4
-LDB URL to connect to (can be overrided by using the \-H command\-line option\.)
-.RE
-.SH "VERSION"
-.PP
-This man page is correct for version 4\.0 of the Samba suite\.
-.SH "SEE ALSO"
-.PP
-ldb(7), ldbedit
-.SH "AUTHOR"
-.PP
-ldb was written by
-Andrew Tridgell\.
-.PP
-If you wish to report a problem or make a suggestion then please see the
-: http://ldb.samba.org/
-web site for current contact and maintainer information\.
-.PP
-This manpage was written by Jelmer Vernooij\.

Deleted: branches/samba/upstream/docs/manpages/ldbsearch.1
===================================================================
--- branches/samba/upstream/docs/manpages/ldbsearch.1	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/ldbsearch.1	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,68 +0,0 @@
-.\"     Title: ldbsearch
-.\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
-.\"    Manual: User Commands
-.\"    Source: Samba 3.2
-.\"
-.TH "LDBSEARCH" "1" "06/10/2008" "Samba 3\.2" "User Commands"
-.\" disable hyphenation
-.nh
-.\" disable justification (adjust text to left margin only)
-.ad l
-.SH "NAME"
-ldbsearch - Search for records in a LDB database
-.SH "SYNOPSIS"
-.HP 1
-ldbsearch [\-h] [\-s\ base|one|sub] [\-b\ basedn] [\-i] [\-H\ LDB\-URL] [expression] [attributes]
-.SH "DESCRIPTION"
-.PP
-ldbsearch searches a LDB database for records matching the specified expression (see the ldapsearch(1) manpage for a description of the expression format)\. For each record, the specified attributes are printed\.
-.SH "OPTIONS"
-.PP
-\-h
-.RS 4
-Show list of available options\.
-.RE
-.PP
-\-H <ldb\-url>
-.RS 4
-LDB URL to connect to\. See ldb(7) for details\.
-.RE
-.PP
-\-s one|sub|base
-.RS 4
-Search scope to use\. One\-level, subtree or base\.
-.RE
-.PP
-\-i
-.RS 4
-Read search expressions from stdin\.
-.RE
-.PP
-\-b basedn
-.RS 4
-Specify Base DN to use\.
-.RE
-.SH "ENVIRONMENT"
-.PP
-LDB_URL
-.RS 4
-LDB URL to connect to (can be overrided by using the \-H command\-line option\.)
-.RE
-.SH "VERSION"
-.PP
-This man page is correct for version 4\.0 of the Samba suite\.
-.SH "SEE ALSO"
-.PP
-ldb(7), ldbedit(1)
-.SH "AUTHOR"
-.PP
-ldb was written by
-Andrew Tridgell\.
-.PP
-If you wish to report a problem or make a suggestion then please see the
-: http://ldb.samba.org/
-web site for current contact and maintainer information\.
-.PP
-This manpage was written by Jelmer Vernooij\.

Modified: branches/samba/upstream/docs/manpages/libsmbclient.7
===================================================================
--- branches/samba/upstream/docs/manpages/libsmbclient.7	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/libsmbclient.7	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: libsmbclient
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: 7
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "LIBSMBCLIENT" "7" "06/10/2008" "Samba 3\.2" "7"
+.TH "LIBSMBCLIENT" "7" "05/28/2008" "Samba 3\.0" "7"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -71,7 +71,7 @@
 Watch this space for future updates\.
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "AUTHOR"
 .PP
 The original Samba software and related utilities were created by Andrew Tridgell\. Samba is now developed by the Samba Team as an Open Source project similar to the way the Linux kernel is developed\.

Modified: branches/samba/upstream/docs/manpages/lmhosts.5
===================================================================
--- branches/samba/upstream/docs/manpages/lmhosts.5	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/lmhosts.5	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: lmhosts
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: File Formats and Conventions
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "LMHOSTS" "5" "06/10/2008" "Samba 3\.2" "File Formats and Conventions"
+.TH "LMHOSTS" "5" "05/28/2008" "Samba 3\.0" "File Formats and Conventions"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -89,7 +89,7 @@
 \fI/usr/local/samba/lib\fR\.
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "SEE ALSO"
 .PP
 \fBsmbclient\fR(1),

Modified: branches/samba/upstream/docs/manpages/log2pcap.1
===================================================================
--- branches/samba/upstream/docs/manpages/log2pcap.1	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/log2pcap.1	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: log2pcap
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: User Commands
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "LOG2PCAP" "1" "06/10/2008" "Samba 3\.2" "User Commands"
+.TH "LOG2PCAP" "1" "05/28/2008" "Samba 3\.0" "User Commands"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -82,7 +82,7 @@
 .RE
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "BUGS"
 .PP
 Only SMB data is extracted from the samba logs, no LDAP, NetBIOS lookup or other data\.

Modified: branches/samba/upstream/docs/manpages/mount.cifs.8
===================================================================
--- branches/samba/upstream/docs/manpages/mount.cifs.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/mount.cifs.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: mount.cifs
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "MOUNT\.CIFS" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "MOUNT\.CIFS" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/net.8
===================================================================
--- branches/samba/upstream/docs/manpages/net.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/net.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: net
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "NET" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "NET" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -710,81 +710,6 @@
 List all the user defined shares owned by the current user matching the given pattern, or all users\.
 .PP
 net usershare list on its own list out the names of the user defined shares that were created by the current user, or restricts the list to share names that match the given wildcard pattern (\'*\' matches one or more characters, \'?\' matches only one character)\. If the \'\-l\' or \'\-\-long\' option is also given, it includes the names of user defined shares created by other users\.
-.SS "CONF"
-.PP
-Starting with version 3\.2\.0, a Samba server can be configured by data stored in registry\. This configuration data can be edited with the new "net conf" commands\.
-.PP
-The deployment of this configuration data can be activated in two levels from the
-\fIsmb\.conf\fR
-file: Share definitions from registry are activated by setting
-\fIregistry shares\fR
-to
-\(lqyes\(rq
-in the [global] section and global configuration options are activated by setting
-\fIinclude = registry\fR
-in the [global] section\. See the
-\fBsmb.conf\fR(5)
-manpage for details\.
-.PP
-The conf commands are:
-.IP "" 4
-net conf list \- Dump the complete configuration in smb\.conf like
-format\.
-.IP "" 4
-net conf import \- Import configuration from file in smb\.conf
-format\.
-.IP "" 4
-net conf listshares \- List the registry shares\.
-.IP "" 4
-net conf drop \- Delete the complete configuration from
-registry\.
-.IP "" 4
-net conf showshare \- Show the definition of a registry share\.
-.IP "" 4
-net conf addshare \- Create a new registry share\.
-.IP "" 4
-net conf delshare \- Delete a registry share\.
-.IP "" 4
-net conf setparm \- Store a parameter\.
-.IP "" 4
-net conf getparm \- Retrieve the value of a parameter\.
-.IP "" 4
-net conf delparm \- Delete a parameter\.
-
-.SS "CONF LIST"
-.PP
-Print the configuration data stored in the registry in a smb\.conf\-like format to standard output\.
-.SS "CONF IMPORT [--test|-T] filename [section]"
-.PP
-This command imports configuration from a file in smb\.conf format\. If a section encountered in the input file is present in registry, its contents is replaced\. Sections of registry configuration that have no counterpart in the input file are not affected\. If you want to delete these, you will have to use the "net conf drop" or "net conf delshare" commands\. Optionally, a section may be specified to restrict the effect of the import command to that specific section\. A test mode is enabled by specifying the parameter "\-T" on the commandline\. In test mode, no changes are made to the registry, and the resulting configuration is printed to standard output instead\.
-.SS "CONF LISTSHARES"
-.PP
-List the names of the shares defined in registry\.
-.SS "CONF DROP"
-.PP
-Delete the complete configuration data from registry\.
-.SS "CONF SHOWSHARE sharename"
-.PP
-Show the definition of the share or section specified\. It is valid to specify "global" as sharename to retrieve the global configuration options from registry\.
-.SS "CONF ADDSHARE sharename path [writeable={y|N} [guest_ok={y|N} [comment]]] "
-.PP
-Create a new share definition in registry\. The sharename and path have to be given\. The share name may
-\fInot\fR
-be "global"\. Optionally, values for the very common options "writeable", "guest ok" and a "comment" may be specified\. The same result may be obtained by a sequence of "net conf setparm" commands\.
-.SS "CONF DELSHARE sharename"
-.PP
-Delete a share definition from registry\.
-.SS "CONF SETPARM section parameter value"
-.PP
-Store a parameter in registry\. The section may be global or a sharename\. The section is created if it does not exist yet\.
-.SS "CONF GETPARM section parameter"
-.PP
-Show a parameter stored in registry\.
-.SS "CONF DELPARM section parameter"
-.PP
-Delete a parameter stored in registry\.
-.SS ""
-.PP
 .SS "HELP [COMMAND]"
 .PP
 Gives usage information for the specified command\.

Modified: branches/samba/upstream/docs/manpages/nmbd.8
===================================================================
--- branches/samba/upstream/docs/manpages/nmbd.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/nmbd.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: nmbd
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "NMBD" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "NMBD" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -244,7 +244,7 @@
 (SIGUSR[1|2] signals are no longer used since Samba 2\.2)\. This is to allow transient problems to be diagnosed, whilst still running at a normally low log level\.
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "SEE ALSO"
 .PP
 

Modified: branches/samba/upstream/docs/manpages/nmblookup.1
===================================================================
--- branches/samba/upstream/docs/manpages/nmblookup.1	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/nmblookup.1	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: nmblookup
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: User Commands
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "NMBLOOKUP" "1" "06/10/2008" "Samba 3\.2" "User Commands"
+.TH "NMBLOOKUP" "1" "05/28/2008" "Samba 3\.0" "User Commands"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -185,7 +185,7 @@
 would query the WINS server samba\.org for the domain master browser (1B name type) for the IRIX workgroup\.
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "SEE ALSO"
 .PP
 \fBnmbd\fR(8),

Modified: branches/samba/upstream/docs/manpages/ntlm_auth.1
===================================================================
--- branches/samba/upstream/docs/manpages/ntlm_auth.1	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/ntlm_auth.1	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: ntlm_auth
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: User Commands
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "NTLM_AUTH" "1" "06/10/2008" "Samba 3\.2" "User Commands"
+.TH "NTLM_AUTH" "1" "05/28/2008" "Samba 3\.0" "User Commands"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -330,7 +330,7 @@
 the Microsoft Knowledge Base article #239869 and follow instructions described there\.
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "AUTHOR"
 .PP
 The original Samba software and related utilities were created by Andrew Tridgell\. Samba is now developed by the Samba Team as an Open Source project similar to the way the Linux kernel is developed\.

Modified: branches/samba/upstream/docs/manpages/pam_winbind.7
===================================================================
--- branches/samba/upstream/docs/manpages/pam_winbind.7	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/pam_winbind.7	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: pam_winbind
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: 7
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "PAM_WINBIND" "7" "06/10/2008" "Samba 3\.2" "7"
+.TH "PAM_WINBIND" "7" "05/28/2008" "Samba 3\.0" "7"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -89,7 +89,7 @@
 \fBsmb.conf\fR(5)
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of Samba\.
+This man page is correct for version 3\.0 of Samba\.
 .SH "AUTHOR"
 .PP
 The original Samba software and related utilities were created by Andrew Tridgell\. Samba is now developed by the Samba Team as an Open Source project similar to the way the Linux kernel is developed\.

Modified: branches/samba/upstream/docs/manpages/pdbedit.8
===================================================================
--- branches/samba/upstream/docs/manpages/pdbedit.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/pdbedit.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: pdbedit
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "PDBEDIT" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "PDBEDIT" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -486,7 +486,7 @@
 This command may be used only by root\.
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "SEE ALSO"
 .PP
 \fBsmbpasswd\fR(5),

Modified: branches/samba/upstream/docs/manpages/profiles.1
===================================================================
--- branches/samba/upstream/docs/manpages/profiles.1	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/profiles.1	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: profiles
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: User Commands
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "PROFILES" "1" "06/10/2008" "Samba 3\.2" "User Commands"
+.TH "PROFILES" "1" "05/28/2008" "Samba 3\.0" "User Commands"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -48,7 +48,7 @@
 .RE
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "AUTHOR"
 .PP
 The original Samba software and related utilities were created by Andrew Tridgell\. Samba is now developed by the Samba Team as an Open Source project similar to the way the Linux kernel is developed\.

Modified: branches/samba/upstream/docs/manpages/rpcclient.1
===================================================================
--- branches/samba/upstream/docs/manpages/rpcclient.1	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/rpcclient.1	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: rpcclient
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: User Commands
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "RPCCLIENT" "1" "06/10/2008" "Samba 3\.2" "User Commands"
+.TH "RPCCLIENT" "1" "05/28/2008" "Samba 3\.0" "User Commands"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -640,7 +640,7 @@
 that are incompatible for some commands or services\. Additionally, the developers are sending reports to Microsoft, and problems found or reported to Microsoft are fixed in Service Packs, which may result in incompatibilities\.
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "AUTHOR"
 .PP
 The original Samba software and related utilities were created by Andrew Tridgell\. Samba is now developed by the Samba Team as an Open Source project similar to the way the Linux kernel is developed\.

Modified: branches/samba/upstream/docs/manpages/samba.7
===================================================================
--- branches/samba/upstream/docs/manpages/samba.7	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/samba.7	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: samba
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: Miscellanea
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "SAMBA" "7" "06/10/2008" "Samba 3\.2" "Miscellanea"
+.TH "SAMBA" "7" "05/28/2008" "Samba 3\.0" "Miscellanea"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -229,7 +229,7 @@
 http://lists\.samba\.org\.
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "CONTRIBUTIONS"
 .PP
 If you wish to contribute to the Samba project, then I suggest you join the Samba mailing list at

Modified: branches/samba/upstream/docs/manpages/smb.conf.5
===================================================================
--- branches/samba/upstream/docs/manpages/smb.conf.5	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/smb.conf.5	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: smb.conf
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: File Formats and Conventions
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "SMB\.CONF" "5" "06/10/2008" "Samba 3\.2" "File Formats and Conventions"
+.TH "SMB\.CONF" "5" "05/28/2008" "Samba 3\.0" "File Formats and Conventions"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -576,63 +576,6 @@
 guest account =
 for the service, irrespective of the supplied password\.
 .RE
-.SH "REGISTRY-BASED CONFIGURATION"
-.PP
-Starting with Samba version 3\.2\.0, the capability to store Samba configuration in the registry is available\. The configuration is stored in the registry key
-\fIHKLM\eSoftware\eSamba\esmbconf\fR\. There are two levels of registry configuration:
-.sp
-.RS 4
-\h'-04' 1.\h'+02'Share definitions stored in registry are used\. This is triggered by setting the global parameter
-\fIregistry shares\fR
-to
-\(lqyes\(rq
-in
-\fIsmb\.conf\fR\.
-.sp
-The registry shares are loaded not at startup but on demand at runtime by
-\fIsmbd\fR\. Shares defined in
-\fIsmb\.conf\fR
-take priority over shares of the same name defined in registry\.
-.RE
-.sp
-.RS 4
-\h'-04' 2.\h'+02'Global
-\fIsmb\.conf\fR
-options stored in registry are used\. This can be activated in two different ways:
-.sp
-Firstly, a registry only configuration is triggered by setting
-\fIconfig backend = registry\fR
-in the [global] section of
-\fIsmb\.conf\fR\. This resets everything that has been read from config files to this point and reads the content of the global configuration section from the registry\. This is the recommended method of using registry based configuration\.
-.sp
-Secondly, a mixed configuration can be activated by a special new meaning of the parameter
-\fIinclude = registry\fR
-in the [global] section of
-\fIsmb\.conf\fR\. This reads the global options from registry with the same priorities as for an include of a text file\. This may be especially useful in cases where an initial configuration is needed to access the registry\.
-.sp
-Activation of global registry options automatically activates registry shares\. So in the registry only case, shares are loaded on demand only\.
-.RE
-.sp
-.RE
-.PP
-Note: To make registry\-based configurations foolproof at least to a certain extent, the use of
-\fIlock directory\fR
-and
-\fIconfig backend\fR
-inside the registry configuration has been disabled: Especially by changing the
-\fIlock directory\fR
-inside the registry configuration, one would create a broken setup where the daemons do not see the configuration they loaded once it is active\.
-.PP
-The registry configuration can be accessed with tools like
-\fIregedit\fR
-or
-\fInet (rpc) registry\fR
-in the key
-\fIHKLM\eSoftware\eSamba\esmbconf\fR\. More conveniently, the
-\fIconf\fR
-subcommand of the
-\fBnet\fR(8)
-utility offers a dedicated interface to read and write the registry based configuration locally, i\.e\. directly accessing the database file, circumventing the server\.
 .SH "EXPLANATION OF EACH PARAMETER"
 
 
@@ -1064,21 +1007,6 @@
 \fI\fIadd user to group script\fR\fR\fI = \fR\fI/usr/sbin/adduser %u %g\fR\fI \fR
 .RE
 
-administrative share (S)
-.PP
-.RS 4
-If this parameter is set to
-\fByes\fR
-for a share, then the share will be an administrative share\. The Administrative Shares are the default network shares created by all Windows NT\-based operating systems\. These are shares like C$, D$ or ADMIN$\. The type of these shares is STYPE_DISKTREE_HIDDEN\.
-.sp
-See the section below on
-\fIsecurity\fR
-for more information about this option\.
-.sp
-Default:
-\fI\fIadministrative share\fR\fR\fI = \fR\fIno\fR\fI \fR
-.RE
-
 admin users (S)
 .PP
 .RS 4
@@ -1405,9 +1333,7 @@
 Example:
 \fI\fIblock size\fR\fR\fI = \fR\fI4096\fR\fI \fR
 .RE
-
-browsable
-.PP
+browsable.PP
 .RS 4
 This parameter is a synonym for
 browseable\.
@@ -1435,9 +1361,7 @@
 Default:
 \fI\fIbrowse list\fR\fR\fI = \fR\fIyes\fR\fI \fR
 .RE
-
-casesignames
-.PP
+casesignames.PP
 .RS 4
 This parameter is a synonym for
 case sensitive\.
@@ -1591,45 +1515,9 @@
 parameter is enabled, then only NTLMv2 logins will be attempted\.
 .sp
 Default:
-\fI\fIclient lanman auth\fR\fR\fI = \fR\fIno\fR\fI \fR
+\fI\fIclient lanman auth\fR\fR\fI = \fR\fIyes\fR\fI \fR
 .RE
 
-client ldap sasl wrapping (G)
-.PP
-.RS 4
-The
-\fIclient ldap sasl wrapping\fR
-defines whether ldap traffic will be signed or signed and encrypted (sealed)\. Possible values are
-\fIplain\fR,
-\fIsign\fR
-and
-\fIseal\fR\.
-.sp
-The values
-\fIsign\fR
-and
-\fIseal\fR
-are only available if Samba has been compiled against a modern OpenLDAP version (2\.3\.x or higher)\.
-.sp
-This option is needed in the case of Domain Controllers enforcing the usage of signed LDAP connections (e\.g\. Windows 2000 SP3 or higher)\. LDAP sign and seal can be controlled with the registry key "HKLM\eSystem\eCurrentControlSet\eServices\e
-NTDS\eParameters\eLDAPServerIntegrity" on the Windows server side\.
-.sp
-Depending on the used KRB5 library (MIT and older Heimdal versions) it is possible that the message "integrity only" is not supported\. In this case,
-\fIsign\fR
-is just an alias for
-\fIseal\fR\.
-.sp
-The default value is
-\fIplain\fR
-which is not irritable to KRB5 clock skew errors\. That implies synchronizing the time with the KDC in the case of using
-\fIsign\fR
-or
-\fIseal\fR\.
-.sp
-Default:
-\fI\fIclient ldap sasl wrapping\fR\fR\fI = \fR\fIplain\fR\fI \fR
-.RE
-
 client ntlmv2 auth (G)
 .PP
 .RS 4
@@ -1660,7 +1548,7 @@
 Specifies whether a client should send a plaintext password if the server does not support encrypted passwords\.
 .sp
 Default:
-\fI\fIclient plaintext auth\fR\fR\fI = \fR\fIno\fR\fI \fR
+\fI\fIclient plaintext auth\fR\fR\fI = \fR\fIyes\fR\fI \fR
 .RE
 
 client schannel (G)
@@ -1705,31 +1593,6 @@
 \fI\fIclient use spnego\fR\fR\fI = \fR\fIyes\fR\fI \fR
 .RE
 
-cluster addresses (G)
-.PP
-.RS 4
-With this parameter you can add additional addresses nmbd will register with a WINS server\. These addresses are not necessarily present on all nodes simultaneously, but they will be registered with the WINS server so that clients can contact any of the nodes\.
-.sp
-Default:
-\fI\fIcluster addresses\fR\fR\fI = \fR\fI\fR\fI \fR
-.sp
-Example:
-\fI\fIcluster addresses\fR\fR\fI = \fR\fI10\.0\.0\.1 10\.0\.0\.2 10\.0\.0\.3\fR\fI \fR
-.RE
-
-clustering (G)
-.PP
-.RS 4
-This parameter specifies whether Samba should contact ctdb for accessing its tdb files and use ctdb as a backend for its messaging backend\.
-.sp
-Set this parameter to
-yes
-only if you have a cluster setup with ctdb running\.
-.sp
-Default:
-\fI\fIclustering\fR\fR\fI = \fR\fIno\fR\fI \fR
-.RE
-
 comment (S)
 .PP
 .RS 4
@@ -1748,29 +1611,6 @@
 \fI\fIcomment\fR\fR\fI = \fR\fIFred\'s Files\fR\fI \fR
 .RE
 
-config backend (G)
-.PP
-.RS 4
-This controls the backend for storing the configuration\. Possible values are
-\fIfile\fR
-(the default) and
-\fIregistry\fR\. When
-\fIconfig backend = registry\fR
-is encountered while loading
-\fIsmb\.conf\fR, the configuration read so far is dropped and the global options are read from registry instead\. So this triggers a registry only configuration\. Share definitions are not read immediately but instead
-\fIregistry shares\fR
-is set to
-\fIyes\fR\.
-.sp
-Note: This option can not be set inside the registry configuration itself\.
-.sp
-Default:
-\fI\fIconfig backend\fR\fR\fI = \fR\fIfile\fR\fI \fR
-.sp
-Example:
-\fI\fIconfig backend\fR\fR\fI = \fR\fIregistry\fR\fI \fR
-.RE
-
 config file (G)
 .PP
 .RS 4
@@ -1802,9 +1642,7 @@
 Example:
 \fI\fIcopy\fR\fR\fI = \fR\fIotherservice\fR\fI \fR
 .RE
-
-create mode
-.PP
+create mode.PP
 .RS 4
 This parameter is a synonym for
 create mask\.
@@ -1859,19 +1697,6 @@
 \fI\fIcsc policy\fR\fR\fI = \fR\fIprograms\fR\fI \fR
 .RE
 
-ctdbd socket (G)
-.PP
-.RS 4
-If you set
-clustering=yes, you need to tell Samba where ctdbd listens on its unix domain socket\. The default path as of ctdb 1\.0 is /tmp/ctdb\.socket which you have to explicitly set for Samba in smb\.conf\.
-.sp
-Default:
-\fI\fIctdbd socket\fR\fR\fI = \fR\fI\fR\fI \fR
-.sp
-Example:
-\fI\fIctdbd socket\fR\fR\fI = \fR\fI/tmp/ctdb\.socket\fR\fI \fR
-.RE
-
 cups options (S)
 .PP
 .RS 4
@@ -1939,18 +1764,6 @@
 \fI\fIdeadtime\fR\fR\fI = \fR\fI15\fR\fI \fR
 .RE
 
-debug class (G)
-.PP
-.RS 4
-With this boolean parameter enabled, the debug class (DBGC_CLASS) will be displayed in the debug header\.
-.sp
-For more information about currently available debug classes, see section about
-\fIlog level\fR\.
-.sp
-Default:
-\fI\fIdebug class\fR\fR\fI = \fR\fIno\fR\fI \fR
-.RE
-
 debug hires timestamp (G)
 .PP
 .RS 4
@@ -1992,9 +1805,7 @@
 Default:
 \fI\fIdebug prefix timestamp\fR\fR\fI = \fR\fIno\fR\fI \fR
 .RE
-
-timestamp logs
-.PP
+timestamp logs.PP
 .RS 4
 This parameter is a synonym for
 debug timestamp\.
@@ -2055,9 +1866,7 @@
 Default:
 \fI\fIdefault devmode\fR\fR\fI = \fR\fIyes\fR\fI \fR
 .RE
-
-default
-.PP
+default.PP
 .RS 4
 This parameter is a synonym for
 default service\.
@@ -2344,9 +2153,7 @@
 Example:
 \fI\fIdfree command\fR\fR\fI = \fR\fI/usr/local/samba/bin/dfree\fR\fI \fR
 .RE
-
-directory mode
-.PP
+directory mode.PP
 .RS 4
 This parameter is a synonym for
 directory mask\.
@@ -2813,9 +2620,7 @@
 Example:
 \fI\fIforce directory security mode\fR\fR\fI = \fR\fI700\fR\fI \fR
 .RE
-
-group
-.PP
+group.PP
 .RS 4
 This parameter is a synonym for
 force group\.
@@ -2942,11 +2747,10 @@
 get quota command
 should only be used whenever there is no operating system API available from the OS that samba can use\.
 .sp
-This option is only available you have compiled Samba with the
-\-\-with\-sys\-quotas
-option or on Linux with
-\-\-with\-quotas
-and a working quota api was found in the system\.
+This option is only available with
+\./configure \-\-with\-sys\-quotas\. Or on linux when
+\./configure \-\-with\-quotas
+was used and a working quota api was found in the system\.
 .sp
 This parameter should specify the path to a script that queries the quota information for the specified user/group for the partition that the specified directory is on\.
 .sp
@@ -3162,9 +2966,7 @@
 Example:
 \fI\fIguest account\fR\fR\fI = \fR\fIftp\fR\fI \fR
 .RE
-
-public
-.PP
+public.PP
 .RS 4
 This parameter is a synonym for
 guest ok\.
@@ -3188,9 +2990,7 @@
 Default:
 \fI\fIguest ok\fR\fR\fI = \fR\fIno\fR\fI \fR
 .RE
-
-only guest
-.PP
+only guest.PP
 .RS 4
 This parameter is a synonym for
 guest only\.
@@ -3341,9 +3141,7 @@
 Example:
 \fI\fIhostname lookups\fR\fR\fI = \fR\fIyes\fR\fI \fR
 .RE
-
-allow hosts
-.PP
+allow hosts.PP
 .RS 4
 This parameter is a synonym for
 hosts allow\.
@@ -3406,9 +3204,7 @@
 Example:
 \fI\fIhosts allow\fR\fR\fI = \fR\fI150\.203\.5\. myhost\.mynet\.edu\.au\fR\fI \fR
 .RE
-
-deny hosts
-.PP
+deny hosts.PP
 .RS 4
 This parameter is a synonym for
 hosts deny\.
@@ -3549,9 +3345,7 @@
 Example:
 \fI\fIidmap domains\fR\fR\fI = \fR\fIdefault AD CORP\fR\fI \fR
 .RE
-
-winbind gid
-.PP
+winbind gid.PP
 .RS 4
 This parameter is a synonym for
 idmap gid\.
@@ -3583,9 +3377,7 @@
 Default:
 \fI\fIidmap negative cache time\fR\fR\fI = \fR\fI120\fR\fI \fR
 .RE
-
-winbind uid
-.PP
+winbind uid.PP
 .RS 4
 This parameter is a synonym for
 idmap uid\.
@@ -3620,14 +3412,6 @@
 and
 \fI%S\fR\.
 .sp
-The parameter
-\fIinclude = registry\fR
-has a special meaning: It does
-\fInot\fR
-include a file named
-\fIregistry\fR
-from the current working directory, but instead reads the global configuration options from the registry\. See the section on registry\-based configuration for details\. Note that this option automatically activates registry shares\.
-.sp
 Default:
 \fI\fIinclude\fR\fR\fI = \fR\fI\fR\fI \fR
 .sp
@@ -3864,7 +3648,7 @@
 are both disabled, then only NTLMv2 logins will be permited\. Not all clients support NTLMv2, and most will require special configuration to use it\.
 .sp
 Default:
-\fI\fIlanman auth\fR\fR\fI = \fR\fIno\fR\fI \fR
+\fI\fIlanman auth\fR\fR\fI = \fR\fIyes\fR\fI \fR
 .RE
 
 large readwrite (G)
@@ -3901,52 +3685,6 @@
 \fINo default\fR
 .RE
 
-ldap connection timeout (G)
-.PP
-.RS 4
-This parameter tells the LDAP library calls which timeout in seconds they should honor during initial connection establishments to LDAP servers\. It is very useful in failover scenarios in particular\. If one or more LDAP servers are not reachable at all, we do not have to wait until TCP timeouts are over\. This feature must be supported by your LDAP library\.
-.sp
-This parameter is different from
-\fIldap timeout\fR
-which affects operations on LDAP servers using an existing connection and not establishing an initial connection\.
-.sp
-Default:
-\fI\fIldap connection timeout\fR\fR\fI = \fR\fI2\fR\fI \fR
-.RE
-
-ldap debug level (G)
-.PP
-.RS 4
-This parameter controls the debug level of the LDAP library calls\. In the case of OpenLDAP, it is the same bit\-field as understood by the server and documented in the
-\fBslapd.conf\fR(5)
-manpage\. A typical useful value will be
-\fI1\fR
-for tracing function calls\.
-.sp
-The debug ouput from the LDAP libraries appears with the prefix [LDAP] in Samba\'s logging output\. The level at which LDAP logging is printed is controlled by the parameter
-\fIldap debug threshold\fR\.
-.sp
-Default:
-\fI\fIldap debug level\fR\fR\fI = \fR\fI0\fR\fI \fR
-.sp
-Example:
-\fI\fIldap debug level\fR\fR\fI = \fR\fI1\fR\fI \fR
-.RE
-
-ldap debug threshold (G)
-.PP
-.RS 4
-This parameter controls the Samba debug level at which the ldap library debug output is printed in the Samba logs\. See the description of
-\fIldap debug level\fR
-for details\.
-.sp
-Default:
-\fI\fIldap debug threshold\fR\fR\fI = \fR\fI10\fR\fI \fR
-.sp
-Example:
-\fI\fIldap debug threshold\fR\fR\fI = \fR\fI5\fR\fI \fR
-.RE
-
 ldap delete dn (G)
 .PP
 .RS 4
@@ -4247,7 +3985,7 @@
 ldap timeout (G)
 .PP
 .RS 4
-When Samba connects to an ldap server that server may be down or unreachable\. To prevent Samba from hanging whilst waiting for the connection this parameter specifies in seconds how long Samba should wait before failing the connect\. The default is to only wait fifteen seconds for the ldap server to respond to the connect request\.
+When Samba connects to an ldap server that servermay be down or unreachable\. To prevent Samba from hanging whilst waiting for the connection this parameter specifies in seconds how long Samba should wait before failing the connect\. The default is to only wait fifteen seconds for the ldap server to respond to the connect request\.
 .sp
 Default:
 \fI\fIldap timeout\fR\fR\fI = \fR\fI15\fR\fI \fR
@@ -4378,9 +4116,7 @@
 Default:
 \fI\fIlocal master\fR\fR\fI = \fR\fIyes\fR\fI \fR
 .RE
-
-lock dir
-.PP
+lock dir.PP
 .RS 4
 This parameter is a synonym for
 lock directory\.
@@ -4393,8 +4129,6 @@
 \fImax connections\fR
 option\.
 .sp
-Note: This option can not be set inside registry configurations\.
-.sp
 Default:
 \fI\fIlock directory\fR\fR\fI = \fR\fI${prefix}/var/locks\fR\fI \fR
 .sp
@@ -4459,9 +4193,7 @@
 Example:
 \fI\fIlog file\fR\fR\fI = \fR\fI/usr/local/samba/var/log\.%m\fR\fI \fR
 .RE
-
-debuglevel
-.PP
+debuglevel.PP
 .RS 4
 This parameter is a synonym for
 log level\.
@@ -5088,6 +4820,35 @@
 \fI\fImagic script\fR\fR\fI = \fR\fIuser\.csh\fR\fI \fR
 .RE
 
+mangled map (S)
+.PP
+.RS 4
+This is for those who want to directly map UNIX file names which cannot be represented on Windows/DOS\. The mangling of names is not always what is needed\. In particular you may have documents with file extensions that differ between DOS and UNIX\. For example, under UNIX it is common to use
+\fI\.html\fR
+for HTML files, whereas under Windows/DOS
+\fI\.htm\fR
+is more commonly used\.
+.sp
+So to map
+\fIhtml\fR
+to
+\fIhtm\fR
+you would use:
+.sp
+
+\fImangled map = (*\.html *\.htm)\fR\.
+.sp
+One very useful case is to remove the annoying
+\fI;1\fR
+off the ends of filenames on some CDROMs (only visible under some UNIXes)\. To do this use a map of (*;1 *;)\.
+.sp
+Default:
+\fI\fImangled map\fR\fR\fI = \fR\fI # no mangled map\fR\fI \fR
+.sp
+Example:
+\fI\fImangled map\fR\fR\fI = \fR\fI(*;1 *;)\fR\fI \fR
+.RE
+
 mangled names (S)
 .PP
 .RS 4
@@ -5490,9 +5251,7 @@
 Example:
 \fI\fImax print jobs\fR\fR\fI = \fR\fI5000\fR\fI \fR
 .RE
-
-protocol
-.PP
+protocol.PP
 .RS 4
 This parameter is a synonym for
 max protocol\.
@@ -5775,21 +5534,6 @@
 \fI\fImin protocol\fR\fR\fI = \fR\fINT1\fR\fI \fR
 .RE
 
-min receivefile size (G)
-.PP
-.RS 4
-This option changes the behavior of
-\fBsmbd\fR(8)
-when processing SMBwriteX calls\. Any incoming SMBwriteX call on a non\-signed SMB/CIFS connection greater than this value will not be processed in the normal way but will be passed to any underlying kernel recvfile or splice system call (if there is no such call Samba will emulate in user space)\. This allows zero\-copy writes directly from network socket buffers into the filesystem buffer cache, if available\. It may improve performance but user testing is recommended\. If set to zero Samba processes SMBwriteX calls in the normal way\. To enable POSIX large write support (SMB/CIFS writes up to 16Mb) this option must be nonzero\. The maximum value is 128k\. Values greater than 128k will be silently set to 128k\.
-.sp
-Note this option will have NO EFFECT if set on a SMB signed connection\.
-.sp
-The default is zero, which diables this option\.
-.sp
-Default:
-\fI\fImin receivefile size\fR\fR\fI = \fR\fI0\fR\fI \fR
-.RE
-
 min wins ttl (G)
 .PP
 .RS 4
@@ -6075,6 +5819,18 @@
 \fI\fIonly user\fR\fR\fI = \fR\fIno\fR\fI \fR
 .RE
 
+open files database hash size (G)
+.PP
+.RS 4
+This parameter was added in Samba 3\.0\.23\. This is an internal tuning parameter that sets the hash size of the tdb used for the open file databases\. The presence of this parameter allows tuning of the system for very large (thousands of concurrent users) Samba setups\. The default setting of this parameter should be sufficient for most normal environments\. It is advised not to change this parameter unless advised to by a Samba Team member\.
+.sp
+Default:
+\fI\fIopen files database hash size\fR\fR\fI = \fR\fI10007\fR\fI \fR
+.sp
+Example:
+\fI\fIopen files database hash size\fR\fR\fI = \fR\fI1338457\fR\fI \fR
+.RE
+
 oplock break wait time (G)
 .PP
 .RS 4
@@ -6547,9 +6303,7 @@
 Example:
 \fI\fIpassword server\fR\fR\fI = \fR\fI*\fR\fI \fR
 .RE
-
-directory
-.PP
+directory.PP
 .RS 4
 This parameter is a synonym for
 path\.
@@ -6628,9 +6382,7 @@
 Default:
 \fI\fIpreexec close\fR\fR\fI = \fR\fIno\fR\fI \fR
 .RE
-
-exec
-.PP
+exec.PP
 .RS 4
 This parameter is a synonym for
 preexec\.
@@ -6659,9 +6411,7 @@
 Example:
 \fI\fIpreexec\fR\fR\fI = \fR\fIecho \e"%u connected to %S from %m (%I)\e" >> /tmp/log\fR\fI \fR
 .RE
-
-prefered master
-.PP
+prefered master.PP
 .RS 4
 This parameter is a synonym for
 preferred master\.
@@ -6699,9 +6449,7 @@
 Example:
 \fI\fIpreload modules\fR\fR\fI = \fR\fI/usr/lib/samba/passdb/mysql\.so\fR\fI \fR
 .RE
-
-auto services
-.PP
+auto services.PP
 .RS 4
 This parameter is a synonym for
 preload\.
@@ -6736,9 +6484,7 @@
 Default:
 \fI\fIpreserve case\fR\fR\fI = \fR\fIyes\fR\fI \fR
 .RE
-
-print ok
-.PP
+print ok.PP
 .RS 4
 This parameter is a synonym for
 printable\.
@@ -6771,9 +6517,7 @@
 Example:
 \fI\fIprintcap cache time\fR\fR\fI = \fR\fI600\fR\fI \fR
 .RE
-
-printcap
-.PP
+printcap.PP
 .RS 4
 This parameter is a synonym for
 printcap name\.
@@ -6928,9 +6672,7 @@
 Example:
 \fI\fIprinter admin\fR\fR\fI = \fR\fIadmin, @staff\fR\fI \fR
 .RE
-
-printer
-.PP
+printer.PP
 .RS 4
 This parameter is a synonym for
 printer name\.
@@ -7073,6 +6815,18 @@
 \fI\fIqueueresume command\fR\fR\fI = \fR\fIenable %p\fR\fI \fR
 .RE
 
+read bmpx (G)
+.PP
+.RS 4
+This boolean parameter controls whether
+\fBsmbd\fR(8)
+will support the "Read Block Multiplex" SMB\. This is now rarely used and defaults to
+\fBno\fR\. You should never need to set this parameter\.
+.sp
+Default:
+\fI\fIread bmpx\fR\fR\fI = \fR\fIno\fR\fI \fR
+.RE
+
 read list (S)
 .PP
 .RS 4
@@ -7138,28 +6892,6 @@
 \fI\fIrealm\fR\fR\fI = \fR\fImysambabox\.mycompany\.com\fR\fI \fR
 .RE
 
-registry shares (G)
-.PP
-.RS 4
-This turns on or off support for share definitions read from registry\. Shares defined in
-\fIsmb\.conf\fR
-take precedence over shares with the same name defined in registry\. See the section on registry\-based configuration for details\.
-.sp
-Note that this parameter defaults to
-\fIno\fR, but it is set to
-\fIyes\fR
-when
-\fIconfig backend\fR
-is set to
-\fIregistry\fR\.
-.sp
-Default:
-\fI\fIregistry shares\fR\fR\fI = \fR\fIno\fR\fI \fR
-.sp
-Example:
-\fI\fIregistry shares\fR\fR\fI = \fR\fIyes\fR\fI \fR
-.RE
-
 remote announce (G)
 .PP
 .RS 4
@@ -7281,16 +7013,12 @@
 Default:
 \fI\fIrestrict anonymous\fR\fR\fI = \fR\fI0\fR\fI \fR
 .RE
-
-root
-.PP
+root.PP
 .RS 4
 This parameter is a synonym for
 root directory\.
 .RE
-
-root dir
-.PP
+root dir.PP
 .RS 4
 This parameter is a synonym for
 root directory\.
@@ -8056,29 +7784,6 @@
 \fI\fIshutdown script\fR\fR\fI = \fR\fI/usr/local/samba/sbin/shutdown %m %t %r %f\fR\fI \fR
 .RE
 
-smb encrypt (S)
-.PP
-.RS 4
-This is a new feature introduced with Samba 3\.2 and above\. It is an extension to the SMB/CIFS protocol negotiated as part of the UNIX extensions\. SMB encryption uses the GSSAPI (SSPI on Windows) ability to encrypt and sign every request/response in a SMB protocol stream\. When enabled it provides a secure method of SMB/CIFS communication, similar to an ssh protected session, but using SMB/CIFS authentication to negotiate encryption and signing keys\. Currently this is only supported by Samba 3\.2 smbclient, and hopefully soon Linux CIFSFS and MacOS/X clients\. Windows clients do not support this feature\.
-.sp
-This controls whether the server offers or requires the client it talks to to use SMB encryption\. Possible values are
-\fIauto\fR,
-\fImandatory\fR
-and
-\fIdisabled\fR\. This may be set on a per\-share basis, but clients may chose to encrypt the entire session, not just traffic to a specific share\. If this is set to mandatory then all traffic to a share
-\fImust\fR
-must be encrypted once the connection has been made to the share\. The server would return "access denied" to all non\-encrypted requests on such a share\. Selecting encrypted traffic reduces throughput as smaller packet sizes must be used (no huge UNIX style read/writes allowed) as well as the overhead of encrypting and signing all the data\.
-.sp
-If SMB encryption is selected, Windows style SMB signing (see the
-\fIserver signing\fR
-option) is no longer necessary, as the GSSAPI flags use select both signing and sealing of the data\.
-.sp
-When set to auto, SMB encryption is offered, but not enforced\. When set to mandatory, SMB encryption is required and if set to disabled, SMB encryption can not be negotiated\.
-.sp
-Default:
-\fI\fIsmb encrypt\fR\fR\fI = \fR\fIauto\fR\fI \fR
-.RE
-
 smb passwd file (G)
 .PP
 .RS 4
@@ -8713,16 +8418,12 @@
 Default:
 \fI\fIusername map\fR\fR\fI = \fR\fI # no username map\fR\fI \fR
 .RE
-
-user
-.PP
+user.PP
 .RS 4
 This parameter is a synonym for
 username\.
 .RE
-
-users
-.PP
+users.PP
 .RS 4
 This parameter is a synonym for
 username\.
@@ -9013,9 +8714,7 @@
 Default:
 \fI\fIveto oplock files\fR\fR\fI = \fR\fI # No files are vetoed for oplock grants\fR\fI \fR
 .RE
-
-vfs object
-.PP
+vfs object.PP
 .RS 4
 This parameter is a synonym for
 vfs objects\.
@@ -9124,19 +8823,6 @@
 \fI\fIwinbind enum users\fR\fR\fI = \fR\fIno\fR\fI \fR
 .RE
 
-winbind expand groups (G)
-.PP
-.RS 4
-This option controls the maximum depth that winbindd will traverse when flattening nested group memberships of Windows domain groups\. This is different from the
-\fIwinbind nested groups\fR
-option which implements the Windows NT4 model of local group nesting\. The "winbind expand groups" parameter specifically applies to the membership of domain groups\.
-.sp
-Be aware that a high value for this parameter can result in system slowdown as the main parent winbindd daemon must perform the group unrolling and will be unable to answer incoming NSS or authentication requests during this time\.
-.sp
-Default:
-\fI\fIwinbind expand groups\fR\fR\fI = \fR\fI1\fR\fI \fR
-.RE
-
 winbind nested groups (G)
 .PP
 .RS 4
@@ -9230,17 +8916,6 @@
 \fI\fIwinbind refresh tickets\fR\fR\fI = \fR\fItrue\fR\fI \fR
 .RE
 
-winbind rpc only (G)
-.PP
-.RS 4
-Setting this parameter to
-yes
-forces winbindd to use RPC instead of LDAP to retrieve information from Domain Controllers\.
-.sp
-Default:
-\fI\fIwinbind rpc only\fR\fR\fI = \fR\fIno\fR\fI \fR
-.RE
-
 winbind separator (G)
 .PP
 .RS 4
@@ -9437,9 +9112,7 @@
 Example:
 \fI\fIworkgroup\fR\fR\fI = \fR\fIMYGROUP\fR\fI \fR
 .RE
-
-writable
-.PP
+writable.PP
 .RS 4
 This parameter is a synonym for
 writeable\.
@@ -9532,7 +9205,7 @@
 special sections make life for an administrator easy, but the various combinations of default attributes can be tricky\. Take extreme care when designing these sections\. In particular, ensure that the permissions on spool directories are correct\.
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "SEE ALSO"
 .PP
 

Modified: branches/samba/upstream/docs/manpages/smbcacls.1
===================================================================
--- branches/samba/upstream/docs/manpages/smbcacls.1	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/smbcacls.1	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: smbcacls
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: User Commands
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "SMBCACLS" "1" "06/10/2008" "Samba 3\.2" "User Commands"
+.TH "SMBCACLS" "1" "05/28/2008" "Samba 3\.0" "User Commands"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -144,7 +144,7 @@
 .PP
 ACLs specify permissions granted to the SID\. This SID again can be specified in S\-1\-x\-y\-z format or as a name in which case it is resolved against the server on which the file or directory resides\. The type, flags and mask values determine the type of access granted to the SID\.
 .PP
-The type can be either ALLOWED or DENIED to allow/deny access to the SID\. The flags values are generally zero for file ACLs and either 9 or 2 for directory ACLs\. Some common flags are:
+The type can be either 0 or 1 corresponding to ALLOWED or DENIED access to the SID\. The flags values are generally zero for file ACLs and either 9 or 2 for directory ACLs\. Some common flags are:
 .sp
 .RS 4
 .ie n \{\
@@ -315,7 +315,7 @@
 couldn\'t connect to the specified server, or there was an error getting or setting the ACLs, an exit status of 1 is returned\. If there was an error parsing any command line arguments, an exit status of 2 is returned\.
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "AUTHOR"
 .PP
 The original Samba software and related utilities were created by Andrew Tridgell\. Samba is now developed by the Samba Team as an Open Source project similar to the way the Linux kernel is developed\.

Modified: branches/samba/upstream/docs/manpages/smbclient.1
===================================================================
--- branches/samba/upstream/docs/manpages/smbclient.1	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/smbclient.1	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: smbclient
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: User Commands
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "SMBCLIENT" "1" "06/10/2008" "Samba 3\.2" "User Commands"
+.TH "SMBCLIENT" "1" "05/28/2008" "Samba 3\.0" "User Commands"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/smbcontrol.1
===================================================================
--- branches/samba/upstream/docs/manpages/smbcontrol.1	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/smbcontrol.1	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: smbcontrol
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: User Commands
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "SMBCONTROL" "1" "06/10/2008" "Samba 3\.2" "User Commands"
+.TH "SMBCONTROL" "1" "05/28/2008" "Samba 3\.0" "User Commands"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -209,7 +209,7 @@
 .RE
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "SEE ALSO"
 .PP
 \fBnmbd\fR(8)

Modified: branches/samba/upstream/docs/manpages/smbcquotas.1
===================================================================
--- branches/samba/upstream/docs/manpages/smbcquotas.1	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/smbcquotas.1	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: smbcquotas
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: User Commands
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "SMBCQUOTAS" "1" "06/10/2008" "Samba 3\.2" "User Commands"
+.TH "SMBCQUOTAS" "1" "05/28/2008" "Samba 3\.0" "User Commands"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -185,7 +185,7 @@
 couldn\'t connect to the specified server, or when there was an error getting or setting the quota(s), an exit status of 1 is returned\. If there was an error parsing any command line arguments, an exit status of 2 is returned\.
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "AUTHOR"
 .PP
 The original Samba software and related utilities were created by Andrew Tridgell\. Samba is now developed by the Samba Team as an Open Source project similar to the way the Linux kernel is developed\.

Modified: branches/samba/upstream/docs/manpages/smbd.8
===================================================================
--- branches/samba/upstream/docs/manpages/smbd.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/smbd.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: smbd
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "SMBD" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "SMBD" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -216,7 +216,7 @@
 \fISession Management\fR: When not using share level secuirty, users must pass PAM\'s session checks before access is granted\. Note however, that this is bypassed in share level secuirty\. Note also that some older pam configuration files may need a line added for session support\.
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "DIAGNOSTICS"
 .PP
 Most diagnostics issued by the server are logged in a specified log file\. The log file name is specified at compile time, but may be overridden on the command line\.

Modified: branches/samba/upstream/docs/manpages/smbget.1
===================================================================
--- branches/samba/upstream/docs/manpages/smbget.1	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/smbget.1	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: smbget
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: User Commands
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "SMBGET" "1" "06/10/2008" "Samba 3\.2" "User Commands"
+.TH "SMBGET" "1" "05/28/2008" "Samba 3\.0" "User Commands"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -151,7 +151,7 @@
 Permission denied is returned in some cases where the cause of the error is unknown (such as an illegally formatted smb:// url or trying to get a directory without \-R turned on)\.
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "AUTHOR"
 .PP
 The original Samba software and related utilities were created by Andrew Tridgell\. Samba is now developed by the Samba Team as an Open Source project similar to the way the Linux kernel is developed\.

Modified: branches/samba/upstream/docs/manpages/smbgetrc.5
===================================================================
--- branches/samba/upstream/docs/manpages/smbgetrc.5	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/smbgetrc.5	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: smbgetrc
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: File Formats and Conventions
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "SMBGETRC" "5" "06/10/2008" "Samba 3\.2" "File Formats and Conventions"
+.TH "SMBGETRC" "5" "05/28/2008" "Samba 3\.0" "File Formats and Conventions"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -75,7 +75,7 @@
 .RE
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "SEE ALSO"
 .PP
 \fBsmbget\fR(1)

Copied: branches/samba/upstream/docs/manpages/smbmnt.8 (from rev 1928, branches/samba/upstream/docs/manpages/smbmnt.8)
===================================================================
--- branches/samba/upstream/docs/manpages/smbmnt.8	                        (rev 0)
+++ branches/samba/upstream/docs/manpages/smbmnt.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,82 @@
+.\"     Title: smbmnt
+.\"    Author: 
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
+.\"    Manual: 
+.\"    Source: 
+.\"
+.TH "SMBMNT" "8" "05/28/2008" "" ""
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "NAME"
+smbmnt - helper utility for mounting SMB filesystems
+.SH "SYNOPSIS"
+.HP 1
+smbmnt {mount\-point} [\-s\ <share>] [\-r] [\-u\ <uid>] [\-g\ <gid>] [\-f\ <mask>] [\-d\ <mask>] [\-o\ <options>] [\-h]
+.SH "DESCRIPTION"
+.PP
+smbmnt
+is a helper application used by the smbmount program to do the actual mounting of SMB shares\.
+smbmnt
+can be installed setuid root if you want normal users to be able to mount their SMB shares\.
+.PP
+A setuid smbmnt will only allow mounts on directories owned by the user, and that the user has write permission on\.
+.PP
+The
+smbmnt
+program is normally invoked by
+\fBsmbmount\fR(8)\. It should not be invoked directly by users\.
+.PP
+smbmount searches the normal PATH for smbmnt\. You must ensure that the smbmnt version in your path matches the smbmount used\.
+.SH "OPTIONS"
+.PP
+\-r
+.RS 4
+mount the filesystem read\-only
+.RE
+.PP
+\-u uid
+.RS 4
+specify the uid that the files will be owned by
+.RE
+.PP
+\-g gid
+.RS 4
+specify the gid that the files will be owned by
+.RE
+.PP
+\-f mask
+.RS 4
+specify the octal file mask applied
+.RE
+.PP
+\-d mask
+.RS 4
+specify the octal directory mask applied
+.RE
+.PP
+\-o options
+.RS 4
+list of options that are passed as\-is to smbfs, if this command is run on a 2\.4 or higher Linux kernel\.
+.RE
+.PP
+\-h|\-\-help
+.RS 4
+Print a summary of command line options\.
+.RE
+.SH "AUTHOR"
+.PP
+Volker Lendecke, Andrew Tridgell, Michael H\. Warfield and others\.
+.PP
+The current maintainer of smbfs and the userspace tools
+smbmount,
+smbumount, and
+smbmnt
+is
+Urban Widmark\. The
+SAMBA Mailing list
+is the preferred place to ask questions regarding these programs\.
+.PP
+The conversion of this manpage for Samba 2\.2 was performed by Gerald Carter\. The conversion to DocBook XML 4\.2 for Samba 3\.0 was done by Alexander Bokovoy\.

Copied: branches/samba/upstream/docs/manpages/smbmount.8 (from rev 1928, branches/samba/upstream/docs/manpages/smbmount.8)
===================================================================
--- branches/samba/upstream/docs/manpages/smbmount.8	                        (rev 0)
+++ branches/samba/upstream/docs/manpages/smbmount.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,249 @@
+.\"     Title: smbmount
+.\"    Author: 
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
+.\"    Manual: 
+.\"    Source: 
+.\"
+.TH "SMBMOUNT" "8" "05/28/2008" "" ""
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "NAME"
+smbmount - mount an smbfs filesystem
+.SH "SYNOPSIS"
+.HP 1
+smbmount {service} {mount\-point} [\-o\ options]
+.SH "DESCRIPTION"
+.PP
+smbmount
+mounts a Linux SMB filesystem\. It is usually invoked as
+mount\.smbfs
+by the
+\fBmount\fR(8)
+command when using the "\-t smbfs" option\. This command only works in Linux, and the kernel must support the smbfs filesystem\.
+.PP
+WARNING:
+smbmount
+is deprecated and not maintained any longer\.
+mount\.cifs
+(mount \-t cifs) should be used instead of
+smbmount\.
+.PP
+Options to
+smbmount
+are specified as a comma\-separated list of key=value pairs\. It is possible to send options other than those listed here, assuming that smbfs supports them\. If you get mount failures, check your kernel log for errors on unknown options\.
+.PP
+smbmount
+is a daemon\. After mounting it keeps running until the mounted smbfs is umounted\. It will log things that happen when in daemon mode using the "machine name" smbmount, so typically this output will end up in
+\fIlog\.smbmount\fR\. The
+smbmount
+process may also be called mount\.smbfs\.
+.sp
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+Note
+.PP
+
+smbmount
+calls
+\fBsmbmnt\fR(8)
+to do the actual mount\. You must make sure that
+smbmnt
+is in the path so that it can be found\.
+.SH "OPTIONS"
+.PP
+username=<arg>
+.RS 4
+specifies the username to connect as\. If this is not given, then the environment variable
+\fB USER\fR
+is used\. This option can also take the form "user%password" or "user/workgroup" or "user/workgroup%password" to allow the password and workgroup to be specified as part of the username\.
+.RE
+.PP
+password=<arg>
+.RS 4
+specifies the SMB password\. If this option is not given then the environment variable
+PASSWD
+is used\. If it can find no password
+smbmount
+will prompt for a password, unless the guest option is given\.
+.sp
+Note that passwords which contain the argument delimiter character (i\.e\. a comma \',\') will failed to be parsed correctly on the command line\. However, the same password defined in the PASSWD environment variable or a credentials file (see below) will be read correctly\.
+.RE
+.PP
+credentials=<filename>
+.RS 4
+specifies a file that contains a username and/or password\. The format of the file is:
+.sp
+.RS 4
+.nf
+username=value
+password=value
+.fi
+.RE
+.sp
+This is preferred over having passwords in plaintext in a shared file, such as
+\fI/etc/fstab\fR\. Be sure to protect any credentials file properly\.
+.RE
+.PP
+krb
+.RS 4
+Use kerberos (Active Directory)\.
+.RE
+.PP
+netbiosname=<arg>
+.RS 4
+sets the source NetBIOS name\. It defaults to the local hostname\.
+.RE
+.PP
+uid=<arg>
+.RS 4
+sets the uid that will own all files on the mounted filesystem\. It may be specified as either a username or a numeric uid\.
+.RE
+.PP
+gid=<arg>
+.RS 4
+sets the gid that will own all files on the mounted filesystem\. It may be specified as either a groupname or a numeric gid\.
+.RE
+.PP
+port=<arg>
+.RS 4
+sets the remote SMB port number\. The default is 445, fallback is 139\.
+.RE
+.PP
+fmask=<arg>
+.RS 4
+sets the file mask\. This determines the permissions that remote files have in the local filesystem\. This is not a umask, but the actual permissions for the files\. The default is based on the current umask\.
+.RE
+.PP
+dmask=<arg>
+.RS 4
+Sets the directory mask\. This determines the permissions that remote directories have in the local filesystem\. This is not a umask, but the actual permissions for the directories\. The default is based on the current umask\.
+.RE
+.PP
+debug=<arg>
+.RS 4
+Sets the debug level\. This is useful for tracking down SMB connection problems\. A suggested value to start with is 4\. If set too high there will be a lot of output, possibly hiding the useful output\.
+.RE
+.PP
+ip=<arg>
+.RS 4
+Sets the destination host or IP address\.
+.RE
+.PP
+workgroup=<arg>
+.RS 4
+Sets the workgroup on the destination
+.RE
+.PP
+sockopt=<arg>
+.RS 4
+Sets the TCP socket options\. See the
+\fBsmb.conf\fR(5)
+\fIsocket options\fR
+option\.
+.RE
+.PP
+scope=<arg>
+.RS 4
+Sets the NetBIOS scope
+.RE
+.PP
+guest
+.RS 4
+Don\'t prompt for a password
+.RE
+.PP
+ro
+.RS 4
+mount read\-only
+.RE
+.PP
+rw
+.RS 4
+mount read\-write
+.RE
+.PP
+iocharset=<arg>
+.RS 4
+sets the charset used by the Linux side for codepage to charset translations (NLS)\. Argument should be the name of a charset, like iso8859\-1\. (Note: only kernel 2\.4\.0 or later)
+.RE
+.PP
+codepage=<arg>
+.RS 4
+sets the codepage the server uses\. See the iocharset option\. Example value cp850\. (Note: only kernel 2\.4\.0 or later)
+.RE
+.PP
+ttl=<arg>
+.RS 4
+sets how long a directory listing is cached in milliseconds (also affects visibility of file size and date changes)\. A higher value means that changes on the server take longer to be noticed but it can give better performance on large directories, especially over long distances\. Default is 1000ms but something like 10000ms (10 seconds) is probably more reasonable in many cases\. (Note: only kernel 2\.4\.2 or later)
+.RE
+.SH "ENVIRONMENT VARIABLES"
+.PP
+The variable
+\fBUSER\fR
+may contain the username of the person using the client\. This information is used only if the protocol level is high enough to support session\-level passwords\. The variable can be used to set both username and password by using the format username%password\.
+.PP
+The variable
+\fBPASSWD\fR
+may contain the password of the person using the client\. This information is used only if the protocol level is high enough to support session\-level passwords\.
+.PP
+The variable
+\fBPASSWD_FILE\fR
+may contain the pathname of a file to read the password from\. A single line of input is read and used as the password\.
+.SH "OTHER COMMANDS"
+.PP
+File systems that have been mounted using the
+smbmount
+can be unmounted using the
+smbumount
+or the UNIX system
+umount
+command\.
+.SH "BUGS"
+.PP
+Passwords and other options containing , can not be handled\. For passwords an alternative way of passing them is in a credentials file or in the PASSWD environment\.
+.PP
+The credentials file does not handle usernames or passwords with leading space\.
+.PP
+One smbfs bug is important enough to mention here, even if it is a bit misplaced:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Mounts sometimes stop working\. This is usually caused by smbmount terminating\. Since smbfs needs smbmount to reconnect when the server disconnects, the mount will eventually go dead\. An umount/mount normally fixes this\. At least 2 ways to trigger this bug are known\.
+.sp
+.RE
+.PP
+Note that the typical response to a bug report is suggestion to try the latest version first\. So please try doing that first, and always include which versions you use of relevant software when reporting bugs (minimum: samba, kernel, distribution)
+.SH "SEE ALSO"
+.PP
+Documentation/filesystems/smbfs\.txt in the linux kernel source tree may contain additional options and information\.
+.PP
+FreeBSD also has a smbfs, but it is not related to smbmount
+.PP
+For Solaris, HP\-UX and others you may want to look at
+\fBsmbsh\fR(1)
+or at other solutions, such as Sharity or perhaps replacing the SMB server with a NFS server\.
+.SH "AUTHOR"
+.PP
+Volker Lendecke, Andrew Tridgell, Michael H\. Warfield and others\.
+.PP
+The current maintainer of smbfs and the userspace tools
+smbmount,
+smbumount, and
+smbmnt
+is
+Urban Widmark\. The
+SAMBA Mailing list
+is the preferred place to ask questions regarding these programs\.
+.PP
+The conversion of this manpage for Samba 2\.2 was performed by Gerald Carter\. The conversion to DocBook XML 4\.2 for Samba 3\.0 was done by Alexander Bokovoy\.

Modified: branches/samba/upstream/docs/manpages/smbpasswd.5
===================================================================
--- branches/samba/upstream/docs/manpages/smbpasswd.5	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/smbpasswd.5	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: smbpasswd
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: File Formats and Conventions
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "SMBPASSWD" "5" "06/10/2008" "Samba 3\.2" "File Formats and Conventions"
+.TH "SMBPASSWD" "5" "05/28/2008" "Samba 3\.0" "File Formats and Conventions"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -146,7 +146,7 @@
 All other colon separated fields are ignored at this time\.
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "SEE ALSO"
 .PP
 \fBsmbpasswd\fR(8),

Modified: branches/samba/upstream/docs/manpages/smbpasswd.8
===================================================================
--- branches/samba/upstream/docs/manpages/smbpasswd.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/smbpasswd.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: smbpasswd
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "SMBPASSWD" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "SMBPASSWD" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -297,7 +297,7 @@
 In addition, the smbpasswd command is only useful if Samba has been set up to use encrypted passwords\.
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "SEE ALSO"
 .PP
 \fBsmbpasswd\fR(5),

Modified: branches/samba/upstream/docs/manpages/smbsh.1
===================================================================
--- branches/samba/upstream/docs/manpages/smbsh.1	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/smbsh.1	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: smbsh
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: User Commands
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "SMBSH" "1" "06/10/2008" "Samba 3\.2" "User Commands"
+.TH "SMBSH" "1" "05/28/2008" "Samba 3\.0" "User Commands"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -179,7 +179,7 @@
 to copy files\.
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "BUGS"
 .PP
 smbsh

Modified: branches/samba/upstream/docs/manpages/smbspool.8
===================================================================
--- branches/samba/upstream/docs/manpages/smbspool.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/smbspool.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: smbspool
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "SMBSPOOL" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "SMBSPOOL" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -152,7 +152,7 @@
 The filename argument (argv[6]) contains the name of the file to print\. If this argument is not specified then the print file is read from the standard input\.
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "SEE ALSO"
 .PP
 \fBsmbd\fR(8)

Modified: branches/samba/upstream/docs/manpages/smbstatus.1
===================================================================
--- branches/samba/upstream/docs/manpages/smbstatus.1	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/smbstatus.1	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: smbstatus
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: User Commands
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "SMBSTATUS" "1" "06/10/2008" "Samba 3\.2" "User Commands"
+.TH "SMBSTATUS" "1" "05/28/2008" "Samba 3\.0" "User Commands"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -110,7 +110,7 @@
 .RE
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "SEE ALSO"
 .PP
 \fBsmbd\fR(8)

Modified: branches/samba/upstream/docs/manpages/smbtar.1
===================================================================
--- branches/samba/upstream/docs/manpages/smbtar.1	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/smbtar.1	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: smbtar
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: User Commands
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "SMBTAR" "1" "06/10/2008" "Samba 3\.2" "User Commands"
+.TH "SMBTAR" "1" "05/28/2008" "Samba 3\.0" "User Commands"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -128,7 +128,7 @@
 command\.
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "SEE ALSO"
 .PP
 \fBsmbd\fR(8),

Modified: branches/samba/upstream/docs/manpages/smbtree.1
===================================================================
--- branches/samba/upstream/docs/manpages/smbtree.1	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/smbtree.1	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: smbtree
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: User Commands
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "SMBTREE" "1" "06/10/2008" "Samba 3\.2" "User Commands"
+.TH "SMBTREE" "1" "05/28/2008" "Samba 3\.0" "User Commands"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -134,7 +134,7 @@
 .RE
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "AUTHOR"
 .PP
 The original Samba software and related utilities were created by Andrew Tridgell\. Samba is now developed by the Samba Team as an Open Source project similar to the way the Linux kernel is developed\.

Copied: branches/samba/upstream/docs/manpages/smbumount.8 (from rev 1928, branches/samba/upstream/docs/manpages/smbumount.8)
===================================================================
--- branches/samba/upstream/docs/manpages/smbumount.8	                        (rev 0)
+++ branches/samba/upstream/docs/manpages/smbumount.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,52 @@
+.\"     Title: smbumount
+.\"    Author: 
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
+.\"    Manual: 
+.\"    Source: 
+.\"
+.TH "SMBUMOUNT" "8" "05/28/2008" "" ""
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "NAME"
+smbumount - smbfs umount for normal users
+.SH "SYNOPSIS"
+.HP 1
+smbumount {mount\-point}
+.SH "DESCRIPTION"
+.PP
+With this program, normal users can unmount smb\-filesystems, provided that it is suid root\.
+smbumount
+has been written to give normal Linux users more control over their resources\. It is safe to install this program suid root, because only the user who has mounted a filesystem is allowed to unmount it again\. For root it is not necessary to use smbumount\. The normal umount program works perfectly well\.
+.PP
+WARNING:
+smbumount
+is deprecated and not maintained any longer\.
+umount\.cifs
+should be used instead of
+smbumount\.
+.SH "OPTIONS"
+.PP
+mount\-point
+.RS 4
+The directory to unmount\.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBsmbmount\fR(8)
+.SH "AUTHOR"
+.PP
+Volker Lendecke, Andrew Tridgell, Michael H\. Warfield and others\.
+.PP
+The current maintainer of smbfs and the userspace tools
+smbmount,
+smbumount, and
+smbmnt
+is
+Urban Widmark\. The
+SAMBA Mailing list
+is the preferred place to ask questions regarding these programs\.
+.PP
+The conversion of this manpage for Samba 2\.2 was performed by Gerald Carter\. The conversion to DocBook XML 4\.2 for Samba 3\.0 was done by Alexander Bokovoy\.

Modified: branches/samba/upstream/docs/manpages/swat.8
===================================================================
--- branches/samba/upstream/docs/manpages/swat.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/swat.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: swat
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "SWAT" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "SWAT" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -222,7 +222,7 @@
 then back it up or don\'t use swat!
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "SEE ALSO"
 .PP
 inetd(5),

Modified: branches/samba/upstream/docs/manpages/tdbbackup.8
===================================================================
--- branches/samba/upstream/docs/manpages/tdbbackup.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/tdbbackup.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: tdbbackup
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "TDBBACKUP" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "TDBBACKUP" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -98,7 +98,7 @@
 located in the /usr/local/samba/var directory or on some systems in the /var/cache or /var/lib/samba directories\.
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "AUTHOR"
 .PP
 The original Samba software and related utilities were created by Andrew Tridgell\. Samba is now developed by the Samba Team as an Open Source project similar to the way the Linux kernel is developed\.

Modified: branches/samba/upstream/docs/manpages/tdbdump.8
===================================================================
--- branches/samba/upstream/docs/manpages/tdbdump.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/tdbdump.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: tdbdump
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "TDBDUMP" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "TDBDUMP" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -27,7 +27,7 @@
 This tool can be used when debugging problems with TDB files\. It is intended for those who are somewhat familiar with Samba internals\.
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "AUTHOR"
 .PP
 The original Samba software and related utilities were created by Andrew Tridgell\. Samba is now developed by the Samba Team as an Open Source project similar to the way the Linux kernel is developed\.

Modified: branches/samba/upstream/docs/manpages/tdbtool.8
===================================================================
--- branches/samba/upstream/docs/manpages/tdbtool.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/tdbtool.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: tdbtool
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "TDBTOOL" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "TDBTOOL" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/testparm.1
===================================================================
--- branches/samba/upstream/docs/manpages/testparm.1	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/testparm.1	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: testparm
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: User Commands
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "TESTPARM" "1" "06/10/2008" "Samba 3\.2" "User Commands"
+.TH "TESTPARM" "1" "05/28/2008" "Samba 3\.0" "User Commands"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -125,7 +125,7 @@
 The program will issue a message saying whether the configuration file loaded OK or not\. This message may be preceded by errors and warnings if the file did not load\. If the file was loaded OK, the program then dumps all known service details to stdout\.
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "SEE ALSO"
 .PP
 \fBsmb.conf\fR(5),

Modified: branches/samba/upstream/docs/manpages/umount.cifs.8
===================================================================
--- branches/samba/upstream/docs/manpages/umount.cifs.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/umount.cifs.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: umount.cifs
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "UMOUNT\.CIFS" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "UMOUNT\.CIFS" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/vfs_audit.8
===================================================================
--- branches/samba/upstream/docs/manpages/vfs_audit.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/vfs_audit.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: vfs_audit
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "VFS_AUDIT" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "VFS_AUDIT" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/vfs_cacheprime.8
===================================================================
--- branches/samba/upstream/docs/manpages/vfs_cacheprime.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/vfs_cacheprime.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: vfs_cacheprime
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "VFS_CACHEPRIME" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "VFS_CACHEPRIME" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/vfs_cap.8
===================================================================
--- branches/samba/upstream/docs/manpages/vfs_cap.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/vfs_cap.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: vfs_cap
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "VFS_CAP" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "VFS_CAP" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/vfs_catia.8
===================================================================
--- branches/samba/upstream/docs/manpages/vfs_catia.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/vfs_catia.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: vfs_catia
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "VFS_CATIA" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "VFS_CATIA" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/vfs_commit.8
===================================================================
--- branches/samba/upstream/docs/manpages/vfs_commit.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/vfs_commit.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: vfs_commit
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "VFS_COMMIT" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "VFS_COMMIT" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/vfs_default_quota.8
===================================================================
--- branches/samba/upstream/docs/manpages/vfs_default_quota.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/vfs_default_quota.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: vfs_default_quota
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "VFS_DEFAULT_QUOTA" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "VFS_DEFAULT_QUOTA" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/vfs_extd_audit.8
===================================================================
--- branches/samba/upstream/docs/manpages/vfs_extd_audit.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/vfs_extd_audit.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: vfs_extd_audit
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "VFS_EXTD_AUDIT" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "VFS_EXTD_AUDIT" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/vfs_fake_perms.8
===================================================================
--- branches/samba/upstream/docs/manpages/vfs_fake_perms.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/vfs_fake_perms.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: vfs_fake_perms
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "VFS_FAKE_PERMS" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "VFS_FAKE_PERMS" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/vfs_full_audit.8
===================================================================
--- branches/samba/upstream/docs/manpages/vfs_full_audit.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/vfs_full_audit.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: vfs_full_audit
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "VFS_FULL_AUDIT" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "VFS_FULL_AUDIT" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/vfs_gpfs.8
===================================================================
--- branches/samba/upstream/docs/manpages/vfs_gpfs.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/vfs_gpfs.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: vfs_gpfs
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "VFS_GPFS" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "VFS_GPFS" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/vfs_netatalk.8
===================================================================
--- branches/samba/upstream/docs/manpages/vfs_netatalk.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/vfs_netatalk.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: vfs_netatalk
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "VFS_NETATALK" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "VFS_NETATALK" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/vfs_notify_fam.8
===================================================================
--- branches/samba/upstream/docs/manpages/vfs_notify_fam.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/vfs_notify_fam.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: vfs_notify_fam
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "VFS_NOTIFY_FAM" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "VFS_NOTIFY_FAM" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/vfs_prealloc.8
===================================================================
--- branches/samba/upstream/docs/manpages/vfs_prealloc.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/vfs_prealloc.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: vfs_prealloc
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "VFS_PREALLOC" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "VFS_PREALLOC" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/vfs_readahead.8
===================================================================
--- branches/samba/upstream/docs/manpages/vfs_readahead.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/vfs_readahead.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: vfs_readahead
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "VFS_READAHEAD" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "VFS_READAHEAD" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/vfs_readonly.8
===================================================================
--- branches/samba/upstream/docs/manpages/vfs_readonly.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/vfs_readonly.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: vfs_readonly
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "VFS_READONLY" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "VFS_READONLY" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/vfs_recycle.8
===================================================================
--- branches/samba/upstream/docs/manpages/vfs_recycle.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/vfs_recycle.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: vfs_recycle
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "VFS_RECYCLE" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "VFS_RECYCLE" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/vfs_shadow_copy.8
===================================================================
--- branches/samba/upstream/docs/manpages/vfs_shadow_copy.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/vfs_shadow_copy.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: vfs_shadow_copy
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "VFS_SHADOW_COPY" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "VFS_SHADOW_COPY" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/vfs_xattr_tdb.8
===================================================================
--- branches/samba/upstream/docs/manpages/vfs_xattr_tdb.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/vfs_xattr_tdb.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: vfs_xattr_tdb
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "VFS_XATTR_TDB" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "VFS_XATTR_TDB" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)

Modified: branches/samba/upstream/docs/manpages/vfstest.1
===================================================================
--- branches/samba/upstream/docs/manpages/vfstest.1	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/vfstest.1	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: vfstest
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: User Commands
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "VFSTEST" "1" "06/10/2008" "Samba 3\.2" "User Commands"
+.TH "VFSTEST" "1" "05/28/2008" "Samba 3\.0" "User Commands"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -575,7 +575,7 @@
 \- Exit vfstest
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "AUTHOR"
 .PP
 The original Samba software and related utilities were created by Andrew Tridgell\. Samba is now developed by the Samba Team as an Open Source project similar to the way the Linux kernel is developed\.

Modified: branches/samba/upstream/docs/manpages/wbinfo.1
===================================================================
--- branches/samba/upstream/docs/manpages/wbinfo.1	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/wbinfo.1	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: wbinfo
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: User Commands
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "WBINFO" "1" "06/10/2008" "Samba 3\.2" "User Commands"
+.TH "WBINFO" "1" "05/28/2008" "Samba 3\.0" "User Commands"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -261,7 +261,7 @@
 will always return failure\.
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "SEE ALSO"
 .PP
 \fBwinbindd\fR(8)

Modified: branches/samba/upstream/docs/manpages/winbindd.8
===================================================================
--- branches/samba/upstream/docs/manpages/winbindd.8	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs/manpages/winbindd.8	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 .\"     Title: winbindd
 .\"    Author: 
-.\" Generator: DocBook XSL Stylesheets v1.73.1 <http://docbook.sf.net/>
-.\"      Date: 06/10/2008
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: 05/28/2008
 .\"    Manual: System Administration tools
-.\"    Source: Samba 3.2
+.\"    Source: Samba 3.0
 .\"
-.TH "WINBINDD" "8" "06/10/2008" "Samba 3\.2" "System Administration tools"
+.TH "WINBINDD" "8" "05/28/2008" "Samba 3\.0" "System Administration tools"
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
@@ -550,7 +550,7 @@
 .RE
 .SH "VERSION"
 .PP
-This man page is correct for version 3 of the Samba suite\.
+This man page is correct for version 3\.0 of the Samba suite\.
 .SH "SEE ALSO"
 .PP
 \fInsswitch\.conf(5)\fR,

Modified: branches/samba/upstream/docs-xml/Samba3-Developers-Guide/vfs.xml
===================================================================
--- branches/samba/upstream/docs-xml/Samba3-Developers-Guide/vfs.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/Samba3-Developers-Guide/vfs.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -553,7 +553,7 @@
 <title>Upgrading to the New VFS Interface</title>
 
 <sect2>
-<title>Upgrading from 2.2.* and 3.0alpha modules</title>
+<title>Upgrading from 2.2.* and 3.0aplha modules</title>
 
 <orderedlist>
 <listitem><para>
@@ -833,7 +833,7 @@
 </para></listitem>
 
 <listitem><para>
-To make it easy to build 3rd party modules it would be useful to provide
+To make it easy to build 3rd party modules it would be usefull to provide
 configure.in, (configure), install.sh and Makefile.in with the module.
 (Take a look at the example in <filename>examples/VFS</filename>.)
 </para>

Modified: branches/samba/upstream/docs-xml/Samba3-HOWTO/TOSHARG-CUPS-printing.xml
===================================================================
--- branches/samba/upstream/docs-xml/Samba3-HOWTO/TOSHARG-CUPS-printing.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/Samba3-HOWTO/TOSHARG-CUPS-printing.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -185,10 +185,11 @@
 	<smbconfoption name="comment">All Printers</smbconfoption>
 	<smbconfoption name="path">/var/spool/samba</smbconfoption>
 	<smbconfoption name="browseable">no</smbconfoption>
+	<smbconfoption name="public">yes</smbconfoption>
 	<smbconfoption name="guest ok">yes</smbconfoption>
 	<smbconfoption name="writable">no</smbconfoption>
 	<smbconfoption name="printable">yes</smbconfoption>
-	<smbconfoption name="printer admin">root, @ntadmins, @smbprintadm</smbconfoption>
+	<smbconfoption name="printer admin">root, @ntadmins</smbconfoption>
 	</smbconfblock>
 	</example>
 
@@ -229,10 +230,11 @@
 	<smbconfsection name="[printers]"/>
 	<smbconfoption name="comment">All Printers</smbconfoption>
 	<smbconfoption name="path">/var/spool/samba</smbconfoption>
+	<smbconfoption name="public">yes</smbconfoption>
 	<smbconfoption name="guest ok">yes</smbconfoption>
 	<smbconfoption name="writable">no</smbconfoption>
 	<smbconfoption name="printable">yes</smbconfoption>
-	<smbconfoption name="printer admin">root, @ntadmins, @smbprintadm</smbconfoption>
+	<smbconfoption name="printer admin">root, @ntadmins</smbconfoption>
 
 	<smbconfsection name="[special_printer]"/>
 	<smbconfoption name="comment">A special printer with his own settings</smbconfoption>
@@ -240,6 +242,7 @@
 	<smbconfoption name="printing">sysv</smbconfoption>
 	<smbconfoption name="printcap">lpstat</smbconfoption>
 	<smbconfoption name="print command">echo "NEW: `date`: printfile %f" >> /tmp/smbprn.log ; echo "     `date`: p-%p s-%s f-%f" >> /tmp/smbprn.log ; echo "     `date`: j-%j J-%J z-%z c-%c" >> /tmp/smbprn.log ; rm %f </smbconfoption>
+	<smbconfoption name="public">no</smbconfoption>
 	<smbconfoption name="guest ok">no</smbconfoption>
 	<smbconfoption name="writable">no</smbconfoption>
 	<smbconfoption name="printable">yes</smbconfoption>
@@ -399,9 +402,7 @@
 	</itemizedlist>
 
 	<para>
-	The second method is recommended for use over the first as it reduces the
-	administrative efforts and prevents that different versions of the drivers
-	are used accidentally.
+	The second method is recommended for use over the first.
 	</para>
 	</sect2>
 
@@ -764,7 +765,7 @@
 	deficiencies.  <indexterm><primary>Ghostscript</primary><secondary>ESP</secondary><see>ESP
 	GhostScript</see></indexterm> Therefore, ESP Ghostscript was developed as an enhancement over GNU Ghostscript,
 	with lots of bug-fixes, additional devices, and improvements. It is jointly maintained by developers from
-	CUPS, Gutenprint, MandrakeSoft, SuSE, Red Hat, and Debian. It includes the <quote>cups</quote> device
+	CUPS, Gimp-Print, MandrakeSoft, SuSE, Red Hat, and Debian. It includes the <quote>cups</quote> device
 	(essential to print to non-PS printers from CUPS).
 	</para></tip>
 
@@ -991,7 +992,7 @@
 	<parameter>application/postscript</parameter>, the other is
 	<parameter>application/vnd.cups-postscript</parameter>. While <parameter>application/postscript</parameter> is
 	meant to be device-independent, job options for the file are still outside the PS file content, embedded in
-	command line or environment variables by CUPS, <parameter>application/vnd.cups-postscript</parameter> may have
+	command-line or environment variables by CUPS, <parameter>application/vnd.cups-postscript</parameter> may have
 	the job options inserted into the PostScript data itself (where applicable). The transformation of the generic
 	PostScript (<parameter>application/postscript</parameter>) to the device-specific version
 	(<parameter>application/vnd.cups-postscript</parameter>) is the responsibility of the CUPS
@@ -1135,7 +1136,7 @@
 
 		<varlistentry><term>filename</term>
 			<listitem><para>
-			(optionally) The print request file (if missing, filters expect data
+			(optionally) The print request file (if missing, filters expected data
 			fed through <filename>stdin</filename>). In most cases, it is easy to
 			write a simple wrapper script around existing filters to make them work with CUPS.
 			</para></listitem>
@@ -1327,7 +1328,7 @@
 <indexterm><primary>rastertohp</primary></indexterm>
 <indexterm><primary>rastertoprinter</primary></indexterm>
 <indexterm><primary>rastertoprinter</primary></indexterm>
-<indexterm><primary>Gutenprint</primary></indexterm>
+<indexterm><primary>Gimp-Print</primary></indexterm>
 	CUPS ships with quite a variety of raster drivers for processing CUPS raster. On my system, I find in
 	/usr/lib/cups/filter/ the following: <parameter>rastertoalps</parameter>, <parameter>rastertobj</parameter>,
 	<parameter>rastertoepson</parameter>, <parameter>rastertoescp</parameter>, <parameter>rastertopcl</parameter>,
@@ -1335,7 +1336,7 @@
 	<parameter>rastertodymo</parameter>, <parameter>rastertoescp</parameter>, <parameter>rastertohp</parameter>,
 	and <parameter>rastertoprinter</parameter>. Don't worry if you have fewer drivers than this; some of these are
 	installed by commercial add-ons to CUPS (like <parameter>rastertoturboprint</parameter>), and others (like
-	<parameter>rastertoprinter</parameter>) by third-party driver development projects (such as Gutenprint)
+	<parameter>rastertoprinter</parameter>) by third-party driver development projects (such as Gimp-Print)
 	wanting to cooperate as closely as possible with CUPS. See <link linkend="small9">the Raster to
 	Printer-Specific Formats illustration</link>.
 	</para>
@@ -1511,8 +1512,8 @@
 	file. If you have such a PPD installed, the printer shows up in the
 	CUPS Web interface with a <parameter>foomatic</parameter> namepart for
 	the driver description. <parameter>cupsomatic</parameter> is a Perl script that runs
-	Ghostscript with all the complicated command line options
-	autoconstructed from the selected PPD and command line options given to
+	Ghostscript with all the complicated command-line options
+	autoconstructed from the selected PPD and command line options give to
 	the print job.
 	</para>
 
@@ -1532,7 +1533,7 @@
 	generation of them, still in heavy use out there) are not meeting the
 	Adobe specifications. You might also suffer difficulties when you try
 	to download them with <quote>Point'n'Print</quote> to Windows clients. A better
-	and more powerful successor is now available: it is called <parameter>foomatic-rip</parameter>. To use
+	and more powerful successor is now in a stable beta-version: it is called <parameter>foomatic-rip</parameter>. To use
 	<parameter>foomatic-rip</parameter> as a filter with CUPS, you need the new type of PPDs, which
 	have a similar but different line:
 <programlisting>
@@ -1734,7 +1735,7 @@
 	file. Therefore, CUPS should autoconstruct a filtering chain, which
 	delivers as its last output the specified MIME type. This is then
 	taken as input to the specified <parameter>rastertoprinter</parameter> filter. After
-	the last filter has done its work (<parameter>rastertoprinter</parameter> is a Gutenprint
+	the last filter has done its work (<parameter>rastertoprinter</parameter> is a Gimp-Print
 	filter), the file should go to the backend, which sends it to the
 	output device.
 	</para>
@@ -1897,7 +1898,7 @@
 	would still show all pages of the original PDF).</para></listitem>
 
 	<listitem><para>The file then passes the <parameter>pstops</parameter>
-	filter that applies the command line options: it selects pages
+	filter that applies the command-line options: it selects pages
 	2-5, 7, and 11-13, creates the imposed layout <quote>two pages on one sheet</quote>, and
 	inserts the correct <quote>duplex</quote> command (as defined in the printer's
 	PPD) into the new PostScript file; the file is now of PostScript MIME
@@ -1950,7 +1951,7 @@
 <indexterm><primary>pstops</primary></indexterm>
 <indexterm><primary>duplex printing</primary></indexterm>
 		The file then passes the <quote>pstops</quote> filter that applies
-		the command line options: it selects the pages 2-5, 7, and 11-13,
+		the command-line options: it selects the pages 2-5, 7, and 11-13,
 		creates the imposed layout <quote>two pages on one sheet,</quote> and inserts the
 		correct <quote>duplex</quote> command (oops &smbmdash; this printer and PPD
 		do not support duplex printing at all, so this option will
@@ -2010,9 +2011,9 @@
 		</para></listitem>
 
 		<listitem><para>
-		The <ulink url="http://gimp-print.sourceforge.net/">Gutenprint Project</ulink>
+		The <ulink url="http://gimp-print.sourceforge.net/">Gimp-Print Project</ulink>
 		(GPL, free software) provides around 140 PPDs (supporting nearly 400 printers, many driven
-		to photo quality output), to be used alongside the Gutenprint CUPS filters.
+		to photo quality output), to be used alongside the Gimp-Print CUPS filters.
 		</para></listitem>
 
 		<listitem><para>
@@ -2036,7 +2037,7 @@
 		<listitem><para>
 		<ulink url="http://www.linuxprinting.org/">Foomatic/cupsomatic </ulink>
 		(LPGL, free) from Linuxprinting.org provide PPDs for practically every Ghostscript
-		filter known to the world (including Omni, Gutenprint, and HPIJS).
+		filter known to the world (including Omni, Gimp-Print, and HPIJS).
 		</para></listitem>
 	</itemizedlist>
 
@@ -2270,7 +2271,7 @@
 CUPS can load, without any conversions, the PPD file from any Windows (NT is recommended) PostScript driver
 and handle the options. There is a Web browser interface to the print options (select <ulink noescape="1"
 url="http://localhost:631/printers/">http://localhost:631/printers/</ulink> and click on one
-<guibutton>Configure Printer</guibutton> button to see it) or a command line interface (see <command>man
+<guibutton>Configure Printer</guibutton> button to see it) or a command-line interface (see <command>man
 lpoptions</command> or see if you have <command>lphelp</command> on your system). There are also some
 different GUI front-ends on Linux/UNIX, which can present PPD options to users. PPD options are normally meant
 to be evaluated by the PostScript RIP on the real PostScript printer.
@@ -2480,6 +2481,7 @@
 <smbconfoption name="comment">All Printers</smbconfoption>
 <smbconfoption name="path">/var/spool/samba</smbconfoption>
 <smbconfoption name="browseable">no</smbconfoption>
+<smbconfoption name="public">yes</smbconfoption>
 <smbconfcomment>setting depends on your requirements</smbconfcomment>
 <smbconfoption name="guest ok">yes</smbconfoption>
 <smbconfoption name="writable">no</smbconfoption>
@@ -2491,7 +2493,7 @@
 <smbconfoption name="browseable">yes</smbconfoption>
 <smbconfoption name="guest ok">no</smbconfoption>
 <smbconfoption name="read only">yes</smbconfoption>
-<smbconfoption name="write list">root, @smbprintadm</smbconfoption>
+<smbconfoption name="write list">root</smbconfoption>
 </smbconfblock>
 </example>
 </sect2>
@@ -3059,8 +3061,7 @@
 After a few seconds, there should be a new printer in your client's <emphasis>local</emphasis>
 <guilabel>Printers</guilabel> folder. On Windows XP it will follow a naming convention of
 <emphasis>PrinterName on SambaServer</emphasis>. (In my current case it is infotec_2105 on kde-bitshop). If
-you want to test it and send your first job from an application like Microsoft Word,
-the new printer appears in a
+you want to test it and send your first job from an application like Winword, the new printer appears in a
 <filename>\\SambaServer\PrinterName</filename> entry in the drop-down list of available printers.
 </para>
 
@@ -3556,7 +3557,7 @@
 </step>
 
 <step>
-<title>Tell Samba which printer should use these driver files (<command>setdriver</command>).</title>
+<para><title>Tell Samba which printer should use these driver files (<command>setdriver</command>).</title></para>
 
 <para>
 <indexterm><primary>rpcclient</primary><secondary>setdriver</secondary></indexterm>
@@ -4118,8 +4119,8 @@
 	models.</para></listitem>
 
 	<listitem><para>
-<indexterm><primary>Gutenprint</primary></indexterm>
-	<ulink url="http://gimp-print.sourceforge.net/">Gutenprint</ulink> &smbmdash; a free software
+<indexterm><primary>Gimp-Print</primary></indexterm>
+	<ulink url="http://gimp-print.sf.net/">Gimp-Print</ulink> &smbmdash; a free software
 	effort, started by Michael Sweet (also lead developer for CUPS), now
 	directed by Robert Krawitz, which has achieved an amazing level of
 	photo print quality (many Epson users swear that its quality is
@@ -5049,9 +5050,9 @@
 </sect2>
 
 <sect2>
-<title>Windows XP SP1</title>
+<title>Win XP-SP1</title>
 
-<para>Windows XP SP1 introduced a Point and Print Restriction Policy (this restriction does not apply to
+<para>Win XP-SP1 introduced a Point and Print Restriction Policy (this restriction does not apply to
 <quote>Administrator</quote> or <quote>Power User</quote> groups of users). In Group Policy Object Editor, go
 to <guimenu>User Configuration -> Administrative Templates -> Control Panel -> Printers</guimenu>. The policy
 is automatically set to <constant>Enabled</constant> and the <constant>Users can only Point and Print to
@@ -5067,7 +5068,7 @@
 <para>How are you doing it? I bet the wrong way (it is not easy to find out, though). There are three
 different ways to bring you to a dialog that <emphasis>seems</emphasis> to set everything. All three dialogs
 <emphasis>look</emphasis> the same, yet only one of them does what you intend. You need to be Administrator or
-Print Administrator to do this for all users. Here is how I do it on XP:
+Print Administrator to do this for all users. Here is how I do in on XP:
 </para>
 
 <orderedlist numeration="upperalpha">

Modified: branches/samba/upstream/docs-xml/manpages-3/eventlogadm.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/eventlogadm.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/eventlogadm.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/findsmb.1.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/findsmb.1.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/findsmb.1.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>1</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">User Commands</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -118,7 +118,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of 
+	<para>This man page is correct for version 3.0 of 
 	the Samba suite.</para>
 </refsect1>
 

Modified: branches/samba/upstream/docs-xml/manpages-3/idmap_ad.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/idmap_ad.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/idmap_ad.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/idmap_ldap.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/idmap_ldap.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/idmap_ldap.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/idmap_nss.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/idmap_nss.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/idmap_nss.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/idmap_rid.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/idmap_rid.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/idmap_rid.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/idmap_tdb.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/idmap_tdb.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/idmap_tdb.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Deleted: branches/samba/upstream/docs-xml/manpages-3/ldb.3.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/ldb.3.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/ldb.3.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,265 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
-<refentry id="ldb.3">
-
-<refmeta>
-	<refentrytitle>ldb</refentrytitle>
-	<manvolnum>3</manvolnum>
-	<refmiscinfo class="source">Samba</refmiscinfo>
-	<refmiscinfo class="manual">C Library Functions</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
-</refmeta>
-
-<refnamediv>
-	<refname>ldb</refname>
-	<refclass>The Samba Project</refclass>
-	<refpurpose>A light-weight database library</refpurpose>
-</refnamediv>
-
-<refsynopsisdiv>
-	<synopsis>#include &lt;ldb.h&gt;</synopsis>
-</refsynopsisdiv>
-
-<refsect1>
-	<title>description</title>
-
-	<para>
-ldb is a light weight embedded database library and API. With a
-programming interface that is very similar to LDAP, ldb can store its
-data either in a tdb(3) database or in a real LDAP database.
-	</para>
-
-	<para>
-When used with the tdb backend ldb does not require any database
-daemon. Instead, ldb function calls are processed immediately by the
-ldb library, which does IO directly on the database, while allowing
-multiple readers/writers using operating system byte range locks. This
-leads to an API with very low overheads, often resulting in speeds of
-more than 10x what can be achieved with a more traditional LDAP
-architecture.
-	</para>
-
-	<para>
-In a taxonomy of databases ldb would sit half way between key/value
-pair databases (such as berkley db or tdb) and a full LDAP
-database. With a structured attribute oriented API like LDAP and good
-indexing capabilities, ldb can be used for quite sophisticated
-applications that need a light weight database, without the
-administrative overhead of a full LDAP installation.
-	</para>
-
-	<para>
-Included with ldb are a number of useful command line tools for
-manipulating a ldb database. These tools are similar in style to the
-equivalent ldap command line tools.
-	</para>
-
-	<para>
-In its default mode of operation with a tdb backend, ldb can also be
-seen as a "schema-less LDAP". By default ldb does not require a
-schema, which greatly reduces the complexity of getting started with
-ldb databases. As the complexity of you application grows you can take
-advantage of some of the optional schema-like attributes that ldb
-offers, or you can migrate to using the full LDAP api while keeping
-your exiting ldb code.
-	</para>
-
-	<para>
-If you are new to ldb, then I suggest starting with the manual pages
-for ldbsearch(1) and ldbedit(1), and experimenting with a local
-database. Then I suggest you look at the ldb_connect(3) and
-ldb_search(3) manual pages.
-	</para>
-</refsect1>
-
-<refsect1>
-	<title>TOOLS</title>
-
-	<itemizedlist>
-		<listitem><para>
-			<application>ldbsearch(1)</application>
-			  - command line ldb search utility
-		</para></listitem>
-
-		<listitem><para>
-			<application>ldbedit(1)</application>
-			 - edit all or part of a ldb database using your favourite editor
-		</para></listitem>
-
-		<listitem><para>
-			<application>ldbadd(1)</application>
-			 - add records to a ldb database using LDIF formatted input
-		</para></listitem>
-
-		<listitem><para>
-			<application>ldbdel(1)</application>
-			 - delete records from a ldb database
-		</para></listitem>
-
-		<listitem><para>
-			<application>ldbmodify(1)</application>
-			 - modify records in a ldb database using LDIF formatted input
-		</para></listitem>
-	</itemizedlist>
-</refsect1>
-
-<refsect1>
-	<title>FUNCTIONS</title>
-
-	<itemizedlist>
-		<listitem><para>
-			<function>ldb_connect(3)</function>
-			 - connect to a ldb backend
-		</para></listitem>
-
-		<listitem><para>
-			<function>ldb_search(3)</function>
-			 - perform a database search
-		</para></listitem>
-
-		<listitem><para>
-			<function>ldb_add(3)</function>
-			 - add a record to the database
-		</para></listitem>
-
-		<listitem><para>
-			<function>ldb_delete(3)</function>
-			 - delete a record from the database
-		</para></listitem>
-
-		<listitem><para>
-			<function>ldb_modify(3)</function>
-			 - modify a record in the database
-		</para></listitem>
-
-		<listitem><para>
-			<function>ldb_errstring(3)</function>
-			 - retrieve extended error information from the last operation
-		</para></listitem>
-
-		<listitem><para>
-			<function>ldb_ldif_write(3)</function>
-			 - write a LDIF formatted message
-		</para></listitem>
-
-		<listitem><para>
-			<function>ldb_ldif_write_file(3)</function>
-			 - write a LDIF formatted message to a file
-		</para></listitem>
-
-		<listitem><para>
-			<function>ldb_ldif_read(3)</function>
-			 - read a LDIF formatted message
-		</para></listitem>
-
-		<listitem><para>
-			<function>ldb_ldif_read_free(3)</function>
-			 - free the result of a ldb_ldif_read()
-		</para></listitem>
-
-		<listitem><para>
-			<function>ldb_ldif_read_file(3)</function>
-			 - read a LDIF message from a file
-		</para></listitem>
-
-		<listitem><para>
-			<function>ldb_ldif_read_string(3)</function>
-			 - read a LDIF message from a string
-		</para></listitem>
-
-		<listitem><para>
-			<function>ldb_msg_find_element(3)</function>
-			 - find an element in a ldb_message
-		</para></listitem>
-
-		<listitem><para>
-			<function>ldb_val_equal_exact(3)</function>
-			 - compare two ldb_val structures
-		</para></listitem>
-
-		<listitem><para>
-			<function>ldb_msg_find_val(3)</function>
-			 - find an element by value
-		</para></listitem>
-
-		<listitem><para>
-			<function>ldb_msg_add_empty(3)</function>
-			 - add an empty message element to a ldb_message
-		</para></listitem>
-
-
-		<listitem><para>
-			<function>ldb_msg_add(3)</function>
-			 - add a non-empty message element to a ldb_message
-		</para></listitem>
-
-
-		<listitem><para>
-			<function>ldb_msg_element_compare(3)</function>
-			 - compare two ldb_message_element structures
-		</para></listitem>
-
-
-		<listitem><para>
-			<function>ldb_msg_find_int(3)</function>
-			 - return an integer value from a ldb_message
-		</para></listitem>
-
-
-		<listitem><para>
-			<function>ldb_msg_find_uint(3)</function>
-			 - return an unsigned integer value from a ldb_message
-		</para></listitem>
-
-
-		<listitem><para>
-			<function>ldb_msg_find_double(3)</function>
-			 - return a double value from a ldb_message
-		</para></listitem>
-
-
-		<listitem><para>
-			<function>ldb_msg_find_string(3)</function>
-			 - return a string value from a ldb_message
-		</para></listitem>
-
-
-		<listitem><para>
-			<function>ldb_set_alloc(3)</function>
-			 - set the memory allocation function to be used by ldb
-		</para></listitem>
-
-
-		<listitem><para>
-			<function>ldb_set_debug(3)</function>
-			 - set a debug handler to be used by ldb
-		</para></listitem>
-
-
-		<listitem><para>
-			<function>ldb_set_debug_stderr(3)</function>
-			 - set a debug handler for stderr output
-		</para></listitem>
-	</itemizedlist>
-</refsect1>
-
-<refsect1>
-	<title>Author</title>
-
-	<para>
-		ldb was written by 
-		 <ulink url="http://samba.org/~tridge/">Andrew Tridgell</ulink>.
-	</para>
-
-	<para>
-If you wish to report a problem or make a suggestion then please see
-the <ulink url="http://ldb.samba.org/"/> web site for
-current contact and maintainer information.
-	</para>
-
-	<para>
-ldb is released under the GNU Lesser General Public License version 2
-or later. Please see the file COPYING for license details.
-	</para>
-</refsect1>
-</refentry>

Deleted: branches/samba/upstream/docs-xml/manpages-3/ldbadd.1.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/ldbadd.1.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/ldbadd.1.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,108 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
-<refentry id="ldbadd.1">
-
-<refmeta>
-	<refentrytitle>ldbadd</refentrytitle>
-	<manvolnum>1</manvolnum>
-	<refmiscinfo class="source">Samba</refmiscinfo>
-	<refmiscinfo class="manual">User Commands</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
-</refmeta>
-
-
-<refnamediv>
-	<refname>ldbadd</refname>
-	<refpurpose>Command-line utility for adding records to an LDB</refpurpose>
-</refnamediv>
-
-<refsynopsisdiv>
-	<cmdsynopsis>
-		<command>ldbadd</command>
-		<arg choice="opt">-h</arg>
-		<arg choice="opt">-H LDB-URL</arg>
-		<arg choice="opt">ldif-file1</arg>
-		<arg choice="opt">ldif-file2</arg>
-		<arg choice="opt">...</arg>
-	</cmdsynopsis>
-</refsynopsisdiv>
-
-<refsect1>
-	<title>DESCRIPTION</title>
-
-	<para>ldbadd adds records to an ldb(7) database. It reads 
-		the ldif(5) files specified on the command line and adds 
-		the records from these files to the LDB database, which is specified 
-		by the -H option or the LDB_URL environment variable.
-	</para>
-
-	<para>If - is specified as a ldb file, the ldif input is read from 
-		standard input.</para>
-
-</refsect1>
-
-
-<refsect1>
-	<title>OPTIONS</title>
-
-	<variablelist>
-		<varlistentry>
-		<term>-h</term>
-		<listitem><para>
-		Show list of available options.</para></listitem>
-		</varlistentry>
-
-		<varlistentry>
-			<term>-H &lt;ldb-url&gt;</term>
-			<listitem><para>
-				LDB URL to connect to. See ldb(7) for details.
-			</para></listitem>
-		</varlistentry>
-		
-	</variablelist>
-	
-</refsect1>
-
-<refsect1>
-	<title>ENVIRONMENT</title>
-
-	<variablelist>
-		<varlistentry><term>LDB_URL</term>
-			<listitem><para>LDB URL to connect to (can be overrided by using the 
-					-H command-line option.)</para></listitem>
-		</varlistentry>
-	</variablelist>
-	
-</refsect1>
-
-<refsect1>
-	<title>VERSION</title>
-
-	<para>This man page is correct for version 4.0 of the Samba suite.</para>
-</refsect1>
-
-<refsect1>
-	<title>SEE ALSO</title>
-
-	<para>ldb(7), ldbmodify, ldbdel, ldif(5)</para>
-
-</refsect1>
-
-<refsect1>
-	<title>AUTHOR</title>
-
-	<para> ldb was written by 
-		 <ulink url="http://samba.org/~tridge/">Andrew Tridgell</ulink>.
-	</para>
-
-	<para>
-If you wish to report a problem or make a suggestion then please see
-the <ulink url="http://ldb.samba.org/"/> web site for
-current contact and maintainer information.
-	</para>
-
-	<para>This manpage was written by Jelmer Vernooij.</para>
-	
-</refsect1>
-
-</refentry>

Deleted: branches/samba/upstream/docs-xml/manpages-3/ldbdel.1.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/ldbdel.1.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/ldbdel.1.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,108 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
-<refentry id="ldbdel.1">
-
-<refmeta>
-	<refentrytitle>ldbdel</refentrytitle>
-	<manvolnum>1</manvolnum>
-	<refmiscinfo class="source">Samba</refmiscinfo>
-	<refmiscinfo class="manual">User Commands</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
-</refmeta>
-
-
-<refnamediv>
-	<refname>ldbdel</refname>
-	<refpurpose>Command-line program for deleting LDB records</refpurpose>
-</refnamediv>
-
-<refsynopsisdiv>
-	<cmdsynopsis>
-		<command>ldbdel</command>
-		<arg choice="opt">-h</arg>
-		<arg choice="opt">-H LDB-URL</arg>
-		<arg choice="opt">dn</arg>
-		<arg choice="opt">...</arg>
-	</cmdsynopsis>
-</refsynopsisdiv>
-
-<refsect1>
-	<title>DESCRIPTION</title>
-
-	<para>ldbdel deletes records from an ldb(7) database. 
-		It deletes the records identified by the dn's specified 
-		on the command-line. </para>
-
-	<para>ldbdel uses either the database that is specified with 
-		the -H option or the database specified by the LDB_URL environment
-		variable.</para>
-
-</refsect1>
-
-
-<refsect1>
-	<title>OPTIONS</title>
-
-	<variablelist>
-		<varlistentry>
-		<term>-h</term>
-		<listitem><para>
-		Show list of available options.</para></listitem>
-		</varlistentry>
-
-		<varlistentry>
-			<term>-H &lt;ldb-url&gt;</term>
-			<listitem><para>
-				LDB URL to connect to. See ldb(7) for details.
-			</para></listitem>
-		</varlistentry>
-		
-	</variablelist>
-	
-</refsect1>
-
-<refsect1>
-	<title>ENVIRONMENT</title>
-
-	<variablelist>
-		<varlistentry><term>LDB_URL</term>
-			<listitem><para>LDB URL to connect to (can be overrided by using the 
-					-H command-line option.)</para></listitem>
-		</varlistentry>
-	</variablelist>
-	
-</refsect1>
-
-<refsect1>
-	<title>VERSION</title>
-
-	<para>This man page is correct for version 4.0 of the Samba suite.</para>
-</refsect1>
-
-<refsect1>
-	<title>SEE ALSO</title>
-
-	<para>ldb(7), ldbmodify, ldbadd, ldif(5)</para>
-
-</refsect1>
-
-<refsect1>
-	<title>AUTHOR</title>
-
-		<para> ldb was written by 
-		 <ulink url="http://samba.org/~tridge/">Andrew Tridgell</ulink>.
-	</para>
-
-	<para>
-If you wish to report a problem or make a suggestion then please see
-the <ulink url="http://ldb.samba.org/"/> web site for
-current contact and maintainer information.
-	</para>
-
-	<para>ldbdel was written by Andrew Tridgell.</para>
-
-	<para>This manpage was written by Jelmer Vernooij.</para>
-	
-</refsect1>
-
-</refentry>

Deleted: branches/samba/upstream/docs-xml/manpages-3/ldbedit.1.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/ldbedit.1.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/ldbedit.1.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,203 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
-<refentry id="ldbedit.1">
-
-    <refmeta>
-	<refentrytitle>ldbedit</refentrytitle>
-	<manvolnum>1</manvolnum>
-	<refmiscinfo class="source">Samba</refmiscinfo>
-	<refmiscinfo class="manual">User Commands</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
-    </refmeta>
-
-
-    <refnamediv>
-	<refname>ldbedit</refname>
-	<refpurpose>Edit LDB databases using your preferred editor</refpurpose>
-    </refnamediv>
-
-    <refsynopsisdiv>
-	<cmdsynopsis>
-	    <command>ldbedit</command>
-	    <arg choice="opt">-?</arg>
-	    <arg choice="opt">--usage</arg>
-	    <arg choice="opt">-s base|one|sub</arg>
-	    <arg choice="opt">-b basedn</arg>
-	    <arg choice="opt">-a</arg>
-	    <arg choice="opt">-e editor</arg>
-	    <arg choice="opt">-H LDB-URL</arg>
-	    <arg choice="opt">expression</arg>
-	    <arg rep="repeat" choice="opt">attributes</arg>
-	</cmdsynopsis>
-</refsynopsisdiv>
-
-<refsect1>
-	<title>DESCRIPTION</title>
-
-	<para>ldbedit is a utility that allows you to edit LDB entries (in 
-	    tdb files, sqlite files or LDAP servers) using your preferred editor.
-	    ldbedit generates an LDIF file based on your query, allows you to edit
-	    the LDIF, and then merges that LDIF back into the LDB backend.
-	</para>
-
-</refsect1>
-
-
-    <refsect1>
-	<title>OPTIONS</title>
-	
-	<variablelist>
-	    <varlistentry>
-		<term>-?</term>
-		<term>--help</term>
-		<listitem>
-		    <para>
-			Show list of available options, and a phrase describing what that option
-			does.
-		    </para>
-		</listitem>
-	    </varlistentry>
-
-	    <varlistentry>
-		<term>--usage</term>
-		<listitem>
-		    <para>
-			Show list of available options. This is similar to the help option, 
-			however it does not provide any description, and is hence shorter.
-		    </para>
-		</listitem>
-	    </varlistentry>
-
-	    <varlistentry>
-		<term>-H &lt;ldb-url&gt;</term>
-		<listitem>
-		    <para>
-			LDB URL to connect to. For a tdb database,
-			this will be of the form
-			tdb://<replaceable>filename</replaceable>.
-			For a LDAP connection over unix domain
-			sockets, this will be of the form
-			ldapi://<replaceable>socket</replaceable>. For
-			a (potentially remote) LDAP connection over
-			TCP, this will be of the form
-			ldap://<replaceable>hostname</replaceable>. For
-			an SQLite database, this will be of the form
-			sqlite://<replaceable>filename</replaceable>.
-		    </para>
-		</listitem>
-	    </varlistentry>
-
-	    <varlistentry>
-		<term>-s one|sub|base</term>
-		<listitem><para>Search scope to use. One-level, subtree or base.</para></listitem>
-	    </varlistentry>
-
-	    <varlistentry>
-		<term>-a</term>
-		<term>-all</term>
-		<listitem>
-		    <para>Edit all records. This allows you to
-			apply the same change to a number of records
-			at once. You probably want to combine this
-			with an expression of the form
-			"objectclass=*".
-		    </para>
-		</listitem>
-	    </varlistentry>
-
-	    <varlistentry>
-		<term>-e editor</term>
-		<term>--editor editor</term>
-		<listitem>
-		    <para>Specify the editor that should be used (overrides 
-			the VISUAL and EDITOR environment
-			variables). If this option is not used, and
-			neither VISUAL nor EDITOR environment variables
-			are set, then the vi editor will be used.
-		    </para>
-		</listitem>
-	    </varlistentry>
-
-	    <varlistentry>
-		<term>-b basedn</term>
-		<listitem><para>Specify Base Distinguished Name to use.</para></listitem>
-	    </varlistentry>
-
-	    <varlistentry>
-		<term>-v</term>
-		<term>--verbose</term>
-		<listitem>
-		    <para>Make ldbedit more verbose about the
-			operations that are being performed. Without
-			this option, ldbedit will only provide a
-			summary change line.
-		    </para>
-		</listitem>
-	    </varlistentry>
-		
-	</variablelist>
-	
-    </refsect1>
-
-    <refsect1>
-	<title>ENVIRONMENT</title>
-
-	<variablelist>
-	    <varlistentry>
-		<term>LDB_URL</term>
-		<listitem>
-		    <para>LDB URL to connect to. This can be
-		    overridden by using the -H command-line option.)
-		    </para>
-		</listitem>
-	    </varlistentry>
-	    <varlistentry>
-		<term>VISUAL and EDITOR</term>
-		<listitem>
-		    <para>
-			Environment variables used to determine what 
-			editor to use. VISUAL takes precedence over
-			EDITOR, and both are overridden by the
-			-e command-line option.
-		    </para>
-		</listitem>
-	    </varlistentry>
-	</variablelist>
-	
-    </refsect1>
-
-    <refsect1>
-	<title>VERSION</title>
-	
-	<para>This man page is correct for version 4.0 of the Samba suite.</para>
-    </refsect1>
-
-    <refsect1>
-	<title>SEE ALSO</title>
-	
-	<para>ldb(7), ldbmodify(1), ldbdel(1), ldif(5), vi(1)</para>
-
-    </refsect1>
-
-    <refsect1>
-	<title>AUTHOR</title>
-
-	<para>
-	    ldb was written by 
-	    <ulink url="http://samba.org/~tridge/">Andrew Tridgell</ulink>.
-	</para>
-
-	<para>
-	    If you wish to report a problem or make a suggestion then please see
-	    the <ulink url="http://ldb.samba.org/"/> web site for
-	    current contact and maintainer information.
-	</para>
-
-	<para>
-	    This manpage was written by Jelmer Vernooij and updated
-	    by Brad Hards.
-	</para>
-	
-    </refsect1>
-
-</refentry>

Deleted: branches/samba/upstream/docs-xml/manpages-3/ldbmodify.1.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/ldbmodify.1.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/ldbmodify.1.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
-<refentry id="ldbmodify.1">
-
-<refmeta>
-	<refentrytitle>ldbmodify</refentrytitle>
-	<manvolnum>1</manvolnum>
-	<refmiscinfo class="source">Samba</refmiscinfo>
-	<refmiscinfo class="manual">User Commands</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
-</refmeta>
-
-
-<refnamediv>
-	<refname>ldbmodify</refname>
-	<refpurpose>Modify records in a LDB database</refpurpose>
-</refnamediv>
-
-<refsynopsisdiv>
-	<cmdsynopsis>
-		<command>ldbmodify</command>
-		<arg choice="opt">-H LDB-URL</arg>
-		<arg choice="opt">ldif-file</arg>
-	</cmdsynopsis>
-</refsynopsisdiv>
-
-<refsect1>
-	<title>DESCRIPTION</title>
-
-	<para>
-		ldbmodify changes, adds and deletes records in a LDB database. 
-		The changes that should be made to the LDB database are read from 
-		the specified LDIF-file. If - is specified as the filename, input is read from stdin.
-	</para>
-
-	<para>For now, see ldapmodify(1) for details on the LDIF file format.</para>
-
-</refsect1>
-
-
-<refsect1>
-	<title>OPTIONS</title>
-
-	<variablelist>
-		<varlistentry>
-			<term>-H &lt;ldb-url&gt;</term>
-			<listitem><para>
-				LDB URL to connect to. See ldb(7) for details.
-			</para></listitem>
-		</varlistentry>
-	</variablelist>
-</refsect1>
-
-<refsect1>
-	<title>ENVIRONMENT</title>
-
-	<variablelist>
-		<varlistentry><term>LDB_URL</term>
-			<listitem><para>LDB URL to connect to (can be overrided by using the 
-					-H command-line option.)</para></listitem>
-		</varlistentry>
-	</variablelist>
-	
-</refsect1>
-
-<refsect1>
-	<title>VERSION</title>
-
-	<para>This man page is correct for version 4.0 of the Samba suite.</para>
-</refsect1>
-
-<refsect1>
-	<title>SEE ALSO</title>
-
-	<para>ldb(7), ldbedit</para>
-
-</refsect1>
-
-<refsect1>
-	<title>AUTHOR</title>
-
-	<para> ldb was written by 
-		 <ulink url="http://samba.org/~tridge/">Andrew Tridgell</ulink>.
-	</para>
-
-	<para>
-If you wish to report a problem or make a suggestion then please see
-the <ulink url="http://ldb.samba.org/"/> web site for
-current contact and maintainer information.
-	</para>
-
-	<para>This manpage was written by Jelmer Vernooij.</para>
-	
-</refsect1>
-
-</refentry>

Deleted: branches/samba/upstream/docs-xml/manpages-3/ldbsearch.1.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/ldbsearch.1.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/ldbsearch.1.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,122 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
-<refentry id="ldbsearch.1">
-
-<refmeta>
-	<refentrytitle>ldbsearch</refentrytitle>
-	<manvolnum>1</manvolnum>
-	<refmiscinfo class="source">Samba</refmiscinfo>
-	<refmiscinfo class="manual">User Commands</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
-</refmeta>
-
-
-<refnamediv>
-	<refname>ldbsearch</refname>
-	<refpurpose>Search for records in a LDB database</refpurpose>
-</refnamediv>
-
-<refsynopsisdiv>
-	<cmdsynopsis>
-		<command>ldbsearch</command>
-		<arg choice="opt">-h</arg>
-		<arg choice="opt">-s base|one|sub</arg>
-		<arg choice="opt">-b basedn</arg>
-		<arg chioce="opt">-i</arg>
-		<arg choice="opt">-H LDB-URL</arg>
-		<arg choice="opt">expression</arg>
-		<arg choice="opt">attributes</arg>
-	</cmdsynopsis>
-</refsynopsisdiv>
-
-<refsect1>
-	<title>DESCRIPTION</title>
-
-	<para>ldbsearch searches a LDB database for records matching the 
-		specified expression (see the ldapsearch(1) manpage for 
-		a description of the expression format). For each 
-		record, the specified attributes are printed.
-	</para>
-
-</refsect1>
-
-
-<refsect1>
-	<title>OPTIONS</title>
-
-	<variablelist>
-		<varlistentry>
-		<term>-h</term>
-		<listitem><para>
-		Show list of available options.</para></listitem>
-		</varlistentry>
-
-		<varlistentry>
-			<term>-H &lt;ldb-url&gt;</term>
-			<listitem><para>
-				LDB URL to connect to. See ldb(7) for details.
-			</para></listitem>
-		</varlistentry>
-
-		<varlistentry>
-			<term>-s one|sub|base</term>
-			<listitem><para>Search scope to use. One-level, subtree or base.</para></listitem>
-		</varlistentry>
-
-		<varlistentry>
-			<term>-i</term>
-			<listitem><para>Read search expressions from stdin. </para></listitem>
-		</varlistentry>
-
-		<varlistentry>
-			<term>-b basedn</term>
-			<listitem><para>Specify Base DN to use.</para></listitem>
-		</varlistentry>
-		
-	</variablelist>
-	
-</refsect1>
-
-<refsect1>
-	<title>ENVIRONMENT</title>
-
-	<variablelist>
-		<varlistentry><term>LDB_URL</term>
-			<listitem><para>LDB URL to connect to (can be overrided by using the 
-					-H command-line option.)</para></listitem>
-		</varlistentry>
-	</variablelist>
-	
-</refsect1>
-
-<refsect1>
-	<title>VERSION</title>
-
-	<para>This man page is correct for version 4.0 of the Samba suite.</para>
-</refsect1>
-
-<refsect1>
-	<title>SEE ALSO</title>
-
-	<para>ldb(7), ldbedit(1)</para>
-
-</refsect1>
-
-<refsect1>
-	<title>AUTHOR</title>
-
-	<para> ldb was written by 
-		 <ulink url="http://samba.org/~tridge/">Andrew Tridgell</ulink>.
-	</para>
-
-	<para>
-If you wish to report a problem or make a suggestion then please see
-the <ulink url="http://ldb.samba.org/"/> web site for
-current contact and maintainer information.
-	</para>
-
-	<para>This manpage was written by Jelmer Vernooij.</para>
-	
-</refsect1>
-
-</refentry>

Modified: branches/samba/upstream/docs-xml/manpages-3/libsmbclient.7.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/libsmbclient.7.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/libsmbclient.7.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>7</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">7</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -119,7 +119,7 @@
 	<title>VERSION</title>
 
 	<para>
-	This man page is correct for version 3 of the Samba suite.
+	This man page is correct for version 3.0 of the Samba suite.
 	</para>
 </refsect1>
 

Modified: branches/samba/upstream/docs-xml/manpages-3/lmhosts.5.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/lmhosts.5.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/lmhosts.5.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>5</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">File Formats and Conventions</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -93,7 +93,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of the Samba suite.</para>
+	<para>This man page is correct for version 3.0 of the Samba suite.</para>
 </refsect1>
 
 <refsect1>

Modified: branches/samba/upstream/docs-xml/manpages-3/log2pcap.1.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/log2pcap.1.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/log2pcap.1.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>1</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">User Commands</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -103,7 +103,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of the Samba suite.</para>
+	<para>This man page is correct for version 3.0 of the Samba suite.</para>
 </refsect1>
 
 <refsect1>

Modified: branches/samba/upstream/docs-xml/manpages-3/mount.cifs.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/mount.cifs.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/mount.cifs.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/net.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/net.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/net.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -1376,148 +1376,6 @@
 </refsect2>
 
 <refsect2>
-<title>CONF</title>
-
-<para>Starting with version 3.2.0, a Samba server can be configured by data
-stored in registry. This configuration data can be edited with the new "net
-conf" commands.
-</para>
-
-<para>
-The deployment of this configuration data can be activated in two levels from the
-<emphasis>smb.conf</emphasis> file: Share definitions from registry are
-activated by setting <parameter>registry shares</parameter> to
-<quote>yes</quote> in the [global] section and global configuration options are
-activated by setting <smbconfoption name="include">registry</smbconfoption> in
-the [global] section.
-See the <citerefentry><refentrytitle>smb.conf</refentrytitle>
-<manvolnum>5</manvolnum></citerefentry> manpage for details.
-</para>
-
-<para>The conf commands are:
-<simplelist>
-<member>net conf list - Dump the complete configuration in smb.conf like
-format.</member>
-<member>net conf import - Import configuration from file in smb.conf
-format.</member>
-<member>net conf listshares - List the registry shares.</member>
-<member>net conf drop - Delete the complete configuration from
-registry.</member>
-<member>net conf showshare - Show the definition of a registry share.</member>
-<member>net conf addshare - Create a new registry share.</member>
-<member>net conf delshare - Delete a registry share.</member>
-<member>net conf setparm - Store a parameter.</member>
-<member>net conf getparm - Retrieve the value of a parameter.</member>
-<member>net conf delparm - Delete a parameter.</member>
-</simplelist>
-</para>
-
-<refsect3>
-<title>CONF LIST</title>
-
-<para>
-Print the configuration data stored in the registry in a smb.conf-like format to
-standard output.
-</para>
-</refsect3>
-
-<refsect3>
-<title>CONF IMPORT <replaceable>[--test|-T]</replaceable> <replaceable>filename</replaceable> <replaceable>[section]</replaceable></title>
-
-<para>
-This command imports configuration from a file in smb.conf format.
-If a section encountered in the input file is present in registry,
-its contents is replaced. Sections of registry configuration that have
-no counterpart in the input file are not affected. If you want to delete these,
-you will have to use the "net conf drop" or "net conf delshare" commands.
-Optionally, a section may be specified to restrict the effect of the
-import command to that specific section. A test mode is enabled by specifying
-the parameter "-T" on the commandline. In test mode, no changes are made to the
-registry, and the resulting configuration is printed to standard output instead.
-</para>
-</refsect3>
-
-<refsect3>
-<title>CONF LISTSHARES</title>
-
-<para>
-List the names of the shares defined in registry.
-</para>
-</refsect3>
-
-<refsect3>
-<title>CONF DROP</title>
-
-<para>
-Delete the complete configuration data from registry.
-</para>
-</refsect3>
-
-<refsect3>
-<title>CONF SHOWSHARE <replaceable>sharename</replaceable></title>
-
-<para>
-Show the definition of the share or section specified. It is valid to specify
-"global" as sharename to retrieve the global configuration options from
-registry.
-</para>
-</refsect3>
-
-<refsect3>
-<title>CONF ADDSHARE <replaceable>sharename</replaceable> <replaceable>path</replaceable> [<replaceable>writeable={y|N}</replaceable> [<replaceable>guest_ok={y|N}</replaceable> [<replaceable>comment</replaceable>]]] </title>
-
-<para>Create a new share definition in registry.
-The sharename and path have to be given. The share name may
-<emphasis>not</emphasis> be "global". Optionally, values for the very
-common options "writeable", "guest ok" and a "comment" may be specified.
-The same result may be obtained by a sequence of "net conf setparm"
-commands.
-</para>
-</refsect3>
-
-<refsect3>
-<title>CONF DELSHARE <replaceable>sharename</replaceable></title>
-
-<para>
-Delete a share definition from registry.
-</para>
-</refsect3>
-
-<refsect3>
-<title>CONF SETPARM <replaceable>section</replaceable> <replaceable>parameter</replaceable> <replaceable>value</replaceable></title>
-
-<para>
-Store a parameter in registry. The section may be global or a sharename.
-The section is created if it does not exist yet.
-</para>
-</refsect3>
-
-<refsect3>
-<title>CONF GETPARM <replaceable>section</replaceable> <replaceable>parameter</replaceable></title>
-
-<para>
-Show a parameter stored in registry.
-</para>
-</refsect3>
-
-<refsect3>
-<title>CONF DELPARM <replaceable>section</replaceable> <replaceable>parameter</replaceable></title>
-
-<para>
-Delete a parameter stored in registry.
-</para>
-</refsect3>
-
-<refsect3>
-<title></title>
-
-<para>
-</para>
-</refsect3>
-
-</refsect2>
-
-<refsect2>
 <title>HELP [COMMAND]</title>
 
 <para>Gives usage information for the specified command.</para>

Modified: branches/samba/upstream/docs-xml/manpages-3/nmbd.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/nmbd.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/nmbd.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -254,7 +254,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of 
+	<para>This man page is correct for version 3.0 of 
 	the Samba suite.</para>
 </refsect1>
 

Modified: branches/samba/upstream/docs-xml/manpages-3/nmblookup.1.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/nmblookup.1.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/nmblookup.1.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>1</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">User Commands</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -191,7 +191,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of 
+	<para>This man page is correct for version 3.0 of 
 	the Samba suite.</para>
 </refsect1>
 

Modified: branches/samba/upstream/docs-xml/manpages-3/ntlm_auth.1.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/ntlm_auth.1.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/ntlm_auth.1.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>1</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">User Commands</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -390,7 +390,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of the Samba 
+	<para>This man page is correct for version 3.0 of the Samba 
 	suite.</para>
 </refsect1>
 

Modified: branches/samba/upstream/docs-xml/manpages-3/pam_winbind.7.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/pam_winbind.7.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/pam_winbind.7.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>7</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">7</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -155,7 +155,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of Samba.</para>
+	<para>This man page is correct for version 3.0 of Samba.</para>
 </refsect1>
 
 <refsect1>

Modified: branches/samba/upstream/docs-xml/manpages-3/pdbedit.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/pdbedit.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/pdbedit.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -430,7 +430,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of 
+	<para>This man page is correct for version 3.0 of 
 	the Samba suite.</para>
 </refsect1>
 

Modified: branches/samba/upstream/docs-xml/manpages-3/profiles.1.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/profiles.1.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/profiles.1.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>1</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">User Commands</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -70,7 +70,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of the Samba 
+	<para>This man page is correct for version 3.0 of the Samba 
 	suite.</para>
 </refsect1>
 

Modified: branches/samba/upstream/docs-xml/manpages-3/rpcclient.1.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/rpcclient.1.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/rpcclient.1.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>1</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">User Commands</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -465,7 +465,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of the Samba 
+	<para>This man page is correct for version 3.0 of the Samba 
 	suite.</para>
 </refsect1>
 

Modified: branches/samba/upstream/docs-xml/manpages-3/samba.7.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/samba.7.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/samba.7.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>7</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">Miscellanea</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -309,7 +309,7 @@
 <refsect1>
 	<title>VERSION</title>
 	
-	<para>This man page is correct for version 3 of the 
+	<para>This man page is correct for version 3.0 of the 
 	Samba suite. </para>
 </refsect1>
 

Modified: branches/samba/upstream/docs-xml/manpages-3/smb.conf.5.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/smb.conf.5.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/smb.conf.5.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 	<manvolnum>5</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">File Formats and Conventions</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -720,89 +720,6 @@
 </refsect1>
 
 <refsect1>
-	<title>REGISTRY-BASED CONFIGURATION</title>
-
-	<para>
-		Starting with Samba version 3.2.0, the capability to
-		store Samba configuration in the registry is available.
-		The configuration is stored in the registry key
-		 <emphasis><literal>HKLM\Software\Samba\smbconf</literal></emphasis>.
-		There are two levels of registry configuration:
-	</para>
-
-	<orderedlist continuation="restarts" inheritnum="ignore" numeration="arabic">
-		<listitem><para>Share definitions stored in registry are used.
-		This is triggered by setting the global 
-		parameter <parameter>registry shares</parameter>
-		to <quote>yes</quote> in <emphasis>smb.conf</emphasis>.
-		</para>
-
-		<para>The registry shares are loaded not at startup but
-		on demand at runtime by <emphasis>smbd</emphasis>.
-		Shares defined in <emphasis>smb.conf</emphasis> take
-		priority over shares of the same name defined in
-		registry.</para></listitem>
-
-		<listitem>
-		<para>Global <emphasis>smb.conf</emphasis>
-		options stored in registry are used. This can be activated
-		in two different ways:</para>
-
-		<para>Firstly, a registry only configuration is triggered
-		by setting
-		<smbconfoption name="config backend">registry</smbconfoption>
-		in the [global] section of <emphasis>smb.conf</emphasis>.
-		This resets everything that has been read from config files
-		to this point and reads the content of the global configuration
-		section from the registry.
-		This is the recommended method of using registry based
-		configuration.</para>
-
-		<para>Secondly, a mixed configuration can be activated
-		by a special new meaning of the parameter
-		<smbconfoption name="include">registry</smbconfoption>
-		in the [global] section of <emphasis>smb.conf</emphasis>.
-		This reads the global options from registry with the same
-		priorities as for an include of a text file.
-		This may be especially useful in cases where an initial
-		configuration is needed to access the registry.</para>
-
-		<para>Activation of global registry options automatically
-		activates registry shares. So in the registry only case,
-		shares are loaded on demand only.</para>
-		</listitem>
-	</orderedlist>
-
-	<para>
-		Note: To make registry-based configurations foolproof
-		at least to a certain extent, the use
-		of <parameter>lock directory</parameter> and
-		 <parameter>config backend</parameter>
-		inside the registry configuration has been disabled:
-		Especially by changing the
-		 <parameter>lock directory</parameter> inside the registry
-		configuration, one would create a broken setup where the daemons
-		do not see the configuration they loaded once it is active.
-	</para>
-
-	<para>
-		The registry configuration can be accessed with
-		tools like <emphasis>regedit</emphasis> or <emphasis>net (rpc)
-		registry</emphasis> in the key
-		 <emphasis><literal>HKLM\Software\Samba\smbconf</literal></emphasis>.
-
-		More conveniently, the <emphasis>conf</emphasis> subcommand of the
-		 <citerefentry><refentrytitle>net</refentrytitle>
-		<manvolnum>8</manvolnum></citerefentry> utility
-		offers a dedicated interface to read and write the
-		registry based configuration locally, i.e. directly
-		accessing the database file, circumventing the
-		server.
-	</para>
-
-</refsect1>
-
-<refsect1>
 	<title>EXPLANATION OF EACH PARAMETER</title>
 	
 	<samba:parameterlist>
@@ -838,7 +755,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of the Samba suite.</para>
+	<para>This man page is correct for version 3.0 of the Samba suite.</para>
 </refsect1>
 
 <refsect1>

Modified: branches/samba/upstream/docs-xml/manpages-3/smbcacls.1.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/smbcacls.1.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/smbcacls.1.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>1</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">User Commands</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -182,9 +182,10 @@
 	resides.  The type, flags and mask values determine the type of 
 	access granted to the SID. </para>
 
-	<para>The type can be either ALLOWED or	DENIED to allow/deny access 
-	to the SID. The flags values are generally zero for file ACLs and 
-	either 9 or 2 for directory ACLs.  Some common flags are: </para>
+	<para>The type can be either 0 or 1 corresponding to ALLOWED or 
+	DENIED access to the SID.  The flags values are generally
+	zero for file ACLs and either 9 or 2 for directory ACLs.  Some 
+	common flags are: </para>
 
 	<itemizedlist> 
 		<listitem><para><constant>#define SEC_ACE_FLAG_OBJECT_INHERIT     	0x1</constant></para></listitem>
@@ -241,7 +242,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of the Samba suite.</para>
+	<para>This man page is correct for version 3.0 of the Samba suite.</para>
 </refsect1>
 
 <refsect1>

Modified: branches/samba/upstream/docs-xml/manpages-3/smbclient.1.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/smbclient.1.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/smbclient.1.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>1</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">User Commands</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/smbcontrol.1.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/smbcontrol.1.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/smbcontrol.1.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>1</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">User Commands</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -266,7 +266,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of 
+	<para>This man page is correct for version 3.0 of 
 	the Samba suite.</para>
 </refsect1>
 

Modified: branches/samba/upstream/docs-xml/manpages-3/smbcquotas.1.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/smbcquotas.1.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/smbcquotas.1.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>1</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">User Commands</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -166,7 +166,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of the Samba suite.</para>
+	<para>This man page is correct for version 3.0 of the Samba suite.</para>
 </refsect1>
 
 <refsect1>

Modified: branches/samba/upstream/docs-xml/manpages-3/smbd.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/smbd.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/smbd.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -261,7 +261,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of 
+	<para>This man page is correct for version 3.0 of 
 	the Samba suite.</para>
 </refsect1>
 

Modified: branches/samba/upstream/docs-xml/manpages-3/smbget.1.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/smbget.1.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/smbget.1.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>1</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">User Commands</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -192,7 +192,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of 
+	<para>This man page is correct for version 3.0 of 
 	the Samba suite.</para>
 </refsect1>
 

Modified: branches/samba/upstream/docs-xml/manpages-3/smbgetrc.5.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/smbgetrc.5.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/smbgetrc.5.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>5</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">File Formats and Conventions</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -87,7 +87,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of 
+	<para>This man page is correct for version 3.0 of 
 	the Samba suite.</para>
 </refsect1>
 

Copied: branches/samba/upstream/docs-xml/manpages-3/smbmnt.8.xml (from rev 1928, branches/samba/upstream/docs-xml/manpages-3/smbmnt.8.xml)
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/smbmnt.8.xml	                        (rev 0)
+++ branches/samba/upstream/docs-xml/manpages-3/smbmnt.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE refentry PUBLIC "-//Samba-Team//DTD DocBook V4.2-Based Variant V1.0//EN" "http://www.samba.org/samba/DTD/samba-doc">
+<refentry id="smbmnt.8">
+
+<refmeta>
+	<refentrytitle>smbmnt</refentrytitle>
+	<manvolnum>8</manvolnum>
+</refmeta>
+
+
+<refnamediv>
+	<refname>smbmnt</refname>
+	<refpurpose>helper utility for mounting SMB filesystems</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+	<cmdsynopsis>
+		<command>smbmnt</command>
+		<arg choice="req">mount-point</arg>
+		<arg choice="opt">-s &lt;share&gt;</arg>
+		<arg choice="opt">-r</arg>
+		<arg choice="opt">-u &lt;uid&gt;</arg>
+		<arg choice="opt">-g &lt;gid&gt;</arg>
+		<arg choice="opt">-f &lt;mask&gt;</arg>
+		<arg choice="opt">-d &lt;mask&gt;</arg>
+		<arg choice="opt">-o &lt;options&gt;</arg>
+		<arg choice="opt">-h</arg>
+	</cmdsynopsis>
+</refsynopsisdiv>
+
+<refsect1>
+	<title>DESCRIPTION</title>
+
+	<para><command>smbmnt</command> is a helper application used 
+	by the smbmount program to do the actual mounting of SMB shares. 
+	<command>smbmnt</command> can be installed setuid root if you want
+	normal users to be able to mount their SMB shares.</para>
+
+	<para>A setuid smbmnt will only allow mounts on directories owned
+	by the user, and that the user has write permission on.</para>
+
+	<para>The <command>smbmnt</command> program is normally invoked 
+	by <citerefentry><refentrytitle>smbmount</refentrytitle>
+	<manvolnum>8</manvolnum></citerefentry>. It should not be invoked directly by users. </para>
+
+	<para>smbmount searches the normal PATH for smbmnt. You must ensure
+	that the smbmnt version in your path matches the smbmount used.</para>
+
+</refsect1>
+
+<refsect1>
+	<title>OPTIONS</title>
+
+	<variablelist>
+		<varlistentry>
+		<term>-r</term>
+		<listitem><para>mount the filesystem read-only 
+		</para></listitem>
+		</varlistentry>
+
+		<varlistentry>
+		<term>-u uid</term>
+		<listitem><para>specify the uid that the files will 
+		be owned by </para></listitem>
+		</varlistentry>
+
+		<varlistentry>
+		<term>-g gid</term>
+		<listitem><para>specify the gid that the files will be 
+		owned by </para></listitem>
+		</varlistentry>
+
+		<varlistentry>
+		<term>-f mask</term>
+		<listitem><para>specify the octal file mask applied
+		</para></listitem>
+		</varlistentry>
+
+		<varlistentry>
+		<term>-d mask</term>
+		<listitem><para>specify the octal directory mask 
+		applied  </para></listitem>
+		</varlistentry>
+
+		<varlistentry>
+		<term>-o options</term>
+		<listitem><para>
+		list of options that are passed as-is to smbfs, if this
+		command is run on a 2.4 or higher Linux kernel.
+		</para></listitem>
+		</varlistentry>
+
+		&stdarg.help;
+
+	</variablelist>
+</refsect1>
+
+
+<refsect1>
+	<title>AUTHOR</title>
+	
+	<para>Volker Lendecke, Andrew Tridgell, Michael H. Warfield 
+	and others.</para>
+	
+	<para>The current maintainer of smbfs and the userspace
+	tools <command>smbmount</command>, <command>smbumount</command>,
+	and <command>smbmnt</command> is <ulink 
+	url="mailto:urban at teststation.com">Urban Widmark</ulink>.
+	The <ulink url="mailto:samba at samba.org">SAMBA Mailing list</ulink>
+	is the preferred place to ask questions regarding these programs.
+	</para>
+	
+	<para>The conversion of this manpage for Samba 2.2 was performed 
+	by Gerald Carter. The conversion to DocBook XML 4.2 for Samba 3.0
+	was done by Alexander Bokovoy.</para>
+</refsect1>
+
+</refentry>

Copied: branches/samba/upstream/docs-xml/manpages-3/smbmount.8.xml (from rev 1928, branches/samba/upstream/docs-xml/manpages-3/smbmount.8.xml)
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/smbmount.8.xml	                        (rev 0)
+++ branches/samba/upstream/docs-xml/manpages-3/smbmount.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,344 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE refentry PUBLIC "-//Samba-Team//DTD DocBook V4.2-Based Variant V1.0//EN" "http://www.samba.org/samba/DTD/samba-doc">
+<refentry id="smbmount.8">
+
+<refmeta>
+	<refentrytitle>smbmount</refentrytitle>
+	<manvolnum>8</manvolnum>
+</refmeta>
+
+
+<refnamediv>
+	<refname>smbmount</refname>
+	<refpurpose>mount an smbfs filesystem</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+	<cmdsynopsis>
+		<command>smbmount</command>
+		<arg choice="req">service</arg>
+		<arg choice="req">mount-point</arg>
+		<arg choice="opt">-o options</arg>
+	</cmdsynopsis>
+</refsynopsisdiv>
+
+<refsect1>
+	<title>DESCRIPTION</title>
+
+	<para><command>smbmount</command> mounts a Linux SMB filesystem. It 
+	is usually invoked as <command>mount.smbfs</command> by
+	the <citerefentry><refentrytitle>mount</refentrytitle>
+	<manvolnum>8</manvolnum></citerefentry> command when using the 
+	"-t smbfs" option. This command only works in Linux, and the kernel must
+	support the smbfs filesystem.</para>
+
+	<para>WARNING: <command>smbmount</command> is deprecated and not
+	maintained any longer. <command>mount.cifs</command> (mount -t cifs)
+	should be used instead of <command>smbmount</command>.</para>
+
+	<para>Options to <command>smbmount</command> are specified as a comma-separated
+	list of key=value pairs. It is possible to send options other
+	than those listed here, assuming that smbfs supports them. If
+	you get mount failures, check your kernel log for errors on
+	unknown options.</para>
+
+	<para><command>smbmount</command> is a daemon. After mounting it keeps running until
+	the mounted smbfs is umounted. It will log things that happen
+	when in daemon mode using the "machine name" smbmount, so
+	typically this output will end up in <filename>log.smbmount</filename>. The <command>
+	smbmount</command> process may also be called mount.smbfs.</para>
+
+	<note><para> <command>smbmount</command> 
+	calls <citerefentry><refentrytitle>smbmnt</refentrytitle>
+	<manvolnum>8</manvolnum></citerefentry> to do the actual mount. You 
+	must make sure that <command>smbmnt</command> is in the path so 
+	that it can be found. </para></note>
+	
+</refsect1>
+
+<refsect1>
+	<title>OPTIONS</title>
+
+	<variablelist>
+		<varlistentry>
+		<term>username=&lt;arg&gt;</term>
+		<listitem><para>
+		specifies the username to connect as. If this is not given, then the environment variable <envar> USER</envar>
+		is used. This option can also take the form "user%password" or "user/workgroup" or "user/workgroup%password"
+		to allow the password and workgroup to be specified as part of the username.
+		</para></listitem>
+		</varlistentry>
+
+		<varlistentry>
+		<term>password=&lt;arg&gt;</term>
+		<listitem><para>
+		specifies the SMB password. If this option is not given then the environment 
+		variable <literal>PASSWD</literal> is used. If it can find no password 
+		<command>smbmount</command> will prompt for a password, unless the guest option is given.
+		</para>
+
+		<para>
+		Note that passwords which contain the argument delimiter character (i.e. a comma ',') will failed to be parsed
+		correctly on the command line.  However, the same password defined in the PASSWD environment variable or a
+		credentials file (see below) will be read correctly.
+		</para>
+		</listitem>
+		</varlistentry>
+
+		<varlistentry>
+		<term>credentials=&lt;filename&gt;</term>
+		<listitem><para>specifies a file that contains a username and/or password. 
+The format of the file is:
+<programlisting>
+username=value
+password=value
+</programlisting></para>
+
+		<para>This is preferred over having passwords in plaintext in a
+		shared file, such as <filename>/etc/fstab</filename>. Be sure to protect any
+		credentials file properly.
+		</para></listitem>
+		</varlistentry>
+
+		<varlistentry>
+		<term>krb</term>
+		<listitem><para>Use kerberos (Active Directory). </para></listitem>
+		</varlistentry>
+
+		<varlistentry>
+		<term>netbiosname=&lt;arg&gt;</term>
+		<listitem><para>sets the source NetBIOS name. It defaults 
+		to the local hostname. </para></listitem>
+		</varlistentry>
+
+		<varlistentry>
+		<term>uid=&lt;arg&gt;</term>
+		<listitem><para>sets the uid that will own all files on
+		the mounted filesystem.
+		It may be specified as either a username or a numeric uid.
+		</para></listitem>
+		</varlistentry>
+		
+		
+		<varlistentry>
+		<term>gid=&lt;arg&gt;</term>
+		<listitem><para>sets the gid that will own all files on
+		the mounted filesystem.
+		It may be specified as either a groupname or a numeric 
+		gid. </para></listitem>		
+		</varlistentry>
+		
+		
+		<varlistentry>
+		<term>port=&lt;arg&gt;</term>
+		<listitem><para>sets the remote SMB port number. The default 
+		is 445, fallback is 139. </para></listitem>
+		</varlistentry>
+		
+		
+		<varlistentry>
+		<term>fmask=&lt;arg&gt;</term>
+		<listitem><para>sets the file mask. This determines the 
+		permissions that remote files have in the local filesystem. 
+		This is not a umask, but the actual permissions for the files.
+		The default is based on the current umask. </para></listitem>
+		</varlistentry>
+		
+
+		<varlistentry>
+		<term>dmask=&lt;arg&gt;</term>
+		<listitem><para>Sets the directory mask. This determines the 
+		permissions that remote directories have in the local filesystem. 
+		This is not a umask, but the actual permissions for the directories.
+		The default is based on the current umask. </para></listitem>
+		</varlistentry>
+		
+		
+		<varlistentry>
+		<term>debug=&lt;arg&gt;</term>
+		<listitem><para>Sets the debug level. This is useful for 
+		tracking down SMB connection problems. A suggested value to
+		start with is 4. If set too high there will be a lot of
+		output, possibly hiding the useful output.</para></listitem>
+		</varlistentry>
+		
+		
+		<varlistentry>
+		<term>ip=&lt;arg&gt;</term>
+		<listitem><para>Sets the destination host or IP address.
+		</para></listitem>
+		</varlistentry>
+
+
+
+		<varlistentry>
+		<term>workgroup=&lt;arg&gt;</term>
+		<listitem><para>Sets the workgroup on the destination </para>
+		</listitem>
+		</varlistentry>
+
+
+		<varlistentry>
+		<term>sockopt=&lt;arg&gt;</term>
+		<listitem><para>Sets the TCP socket options. See the <ulink
+		url="smb.conf.5.html#SOCKETOPTIONS"><citerefentry><refentrytitle>smb.conf</refentrytitle>
+		<manvolnum>5</manvolnum></citerefentry></ulink> <parameter>socket options</parameter> option.
+		</para></listitem>
+		</varlistentry>
+
+
+		<varlistentry>
+		<term>scope=&lt;arg&gt;</term>
+		<listitem><para>Sets the NetBIOS scope </para></listitem>
+		</varlistentry>
+
+		<varlistentry>
+		<term>guest</term>
+		<listitem><para>Don't prompt for a password </para></listitem>
+		</varlistentry>
+
+		<varlistentry>
+		<term>ro</term>
+		<listitem><para>mount read-only </para></listitem>
+		</varlistentry>
+
+		<varlistentry>
+		<term>rw</term><listitem><para>mount read-write </para></listitem>
+		</varlistentry>
+
+		<varlistentry>
+		<term>iocharset=&lt;arg&gt;</term>
+		<listitem><para>
+		sets the charset used by the Linux side for codepage
+		to charset translations (NLS). Argument should be the
+		name of a charset, like iso8859-1. (Note: only kernel
+		2.4.0 or later)
+		</para></listitem>
+		</varlistentry>
+
+		<varlistentry>
+		<term>codepage=&lt;arg&gt;</term>
+		<listitem><para>
+		sets the codepage the server uses. See the iocharset
+		option. Example value cp850. (Note: only kernel 2.4.0
+		or later)
+		</para></listitem>
+		</varlistentry>
+
+		<varlistentry>
+		<term>ttl=&lt;arg&gt;</term>
+		<listitem><para>
+		sets how long a directory listing is cached in milliseconds
+		(also affects visibility of file size and date
+		changes). A higher value means that changes on the
+		server take longer to be noticed but it can give
+		better performance on large directories, especially
+		over long distances. Default is 1000ms but something
+		like 10000ms (10 seconds) is probably more reasonable
+		in many cases.
+		(Note: only kernel 2.4.2 or later)
+		</para></listitem>
+		</varlistentry>
+
+	</variablelist>
+
+
+</refsect1>
+
+<refsect1>
+	<title>ENVIRONMENT VARIABLES</title>
+
+	<para>The variable <envar>USER</envar> may contain the username of the
+	person using the client.  This information is used only if the
+	protocol level is high enough to support session-level
+	passwords. The variable can be used to set both username and
+	password by using the format username%password.</para>
+
+	<para>The variable <envar>PASSWD</envar> may contain the password of the
+	person using the client.  This information is used only if the
+	protocol level is high enough to support session-level
+	passwords.</para>
+
+	<para>The variable <envar>PASSWD_FILE</envar> may contain the pathname
+	of a file to read the password from. A single line of input is
+	read and used as the password.</para>
+</refsect1>
+
+<refsect1>
+	<title>OTHER COMMANDS</title>
+
+	<para>
+	File systems that have been mounted using the <command>smbmount</command>
+	can be unmounted using the <command>smbumount</command> or the UNIX system
+	<command>umount</command> command.
+	</para>
+
+</refsect1>
+
+
+<refsect1>
+	<title>BUGS</title>
+
+	<para>Passwords and other options containing , can not be handled.
+	For passwords an alternative way of passing them is in a credentials
+	file or in the PASSWD environment.</para>
+
+	<para>The credentials file does not handle usernames or passwords with
+	leading space.</para>
+
+	<para>One smbfs bug is important enough to mention here, even if it
+	is a bit misplaced:</para>
+
+	<itemizedlist>
+
+	<listitem><para>Mounts sometimes stop working. This is usually
+	caused by smbmount terminating. Since smbfs needs smbmount to
+	reconnect when the server disconnects, the mount will eventually go
+	dead. An umount/mount normally fixes this. At least 2 ways to
+	trigger this bug are known.</para></listitem>
+
+	</itemizedlist>
+
+	<para>Note that the typical response to a bug report is suggestion
+	to try the latest version first. So please try doing that first,
+	and always include which versions you use of relevant software
+	when reporting bugs (minimum: samba, kernel, distribution)</para>
+
+</refsect1>
+
+
+<refsect1>
+	<title>SEE ALSO</title>
+
+	<para>Documentation/filesystems/smbfs.txt in the linux kernel
+	source tree may contain additional options and information.</para>
+
+	<para>FreeBSD also has a smbfs, but it is not related to smbmount</para>
+
+	<para>For Solaris, HP-UX and others you may want to look at <citerefentry><refentrytitle>smbsh</refentrytitle>
+	<manvolnum>1</manvolnum></citerefentry> or at other solutions, such as 
+	Sharity or perhaps replacing the SMB server with a NFS server.</para>
+
+</refsect1>
+
+
+<refsect1>
+	<title>AUTHOR</title>
+	
+	<para>Volker Lendecke, Andrew Tridgell, Michael H. Warfield 
+	and others.</para>
+	
+	<para>The current maintainer of smbfs and the userspace
+	tools <command>smbmount</command>, <command>smbumount</command>,
+	and <command>smbmnt</command> is <ulink 
+	url="mailto:urban at teststation.com">Urban Widmark</ulink>.
+	The <ulink url="mailto:samba at samba.org">SAMBA Mailing list</ulink>
+	is the preferred place to ask questions regarding these programs.
+	</para>
+	
+	<para>The conversion of this manpage for Samba 2.2 was performed 
+	by Gerald Carter. The conversion to DocBook XML 4.2 for Samba 3.0
+	was done by Alexander Bokovoy.</para>
+</refsect1>
+
+</refentry>

Modified: branches/samba/upstream/docs-xml/manpages-3/smbpasswd.5.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/smbpasswd.5.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/smbpasswd.5.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>5</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">File Formats and Conventions</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -178,7 +178,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of 
+	<para>This man page is correct for version 3.0 of 
 	the Samba suite.</para>
 </refsect1>
 

Modified: branches/samba/upstream/docs-xml/manpages-3/smbpasswd.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/smbpasswd.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/smbpasswd.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -401,7 +401,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of the Samba suite.</para>
+	<para>This man page is correct for version 3.0 of the Samba suite.</para>
 </refsect1>
 
 <refsect1>

Modified: branches/samba/upstream/docs-xml/manpages-3/smbsh.1.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/smbsh.1.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/smbsh.1.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>1</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">User Commands</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -118,7 +118,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of the Samba suite.</para>
+	<para>This man page is correct for version 3.0 of the Samba suite.</para>
 </refsect1>
 
 <refsect1>

Modified: branches/samba/upstream/docs-xml/manpages-3/smbspool.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/smbspool.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/smbspool.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -100,7 +100,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of the Samba suite.</para>
+	<para>This man page is correct for version 3.0 of the Samba suite.</para>
 </refsect1>
 
 <refsect1>

Modified: branches/samba/upstream/docs-xml/manpages-3/smbstatus.1.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/smbstatus.1.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/smbstatus.1.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>1</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">User Commands</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -109,7 +109,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of 
+	<para>This man page is correct for version 3.0 of 
 	the Samba suite.</para>
 </refsect1>
 

Modified: branches/samba/upstream/docs-xml/manpages-3/smbtar.1.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/smbtar.1.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/smbtar.1.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>1</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">User Commands</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -200,7 +200,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of 
+	<para>This man page is correct for version 3.0 of 
 	the Samba suite.</para>
 </refsect1>
 

Modified: branches/samba/upstream/docs-xml/manpages-3/smbtree.1.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/smbtree.1.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/smbtree.1.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>1</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">User Commands</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -78,7 +78,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of the Samba 
+	<para>This man page is correct for version 3.0 of the Samba 
 	suite.</para>
 </refsect1>
 

Copied: branches/samba/upstream/docs-xml/manpages-3/smbumount.8.xml (from rev 1928, branches/samba/upstream/docs-xml/manpages-3/smbumount.8.xml)
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/smbumount.8.xml	                        (rev 0)
+++ branches/samba/upstream/docs-xml/manpages-3/smbumount.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE refentry PUBLIC "-//Samba-Team//DTD DocBook V4.2-Based Variant V1.0//EN" "http://www.samba.org/samba/DTD/samba-doc">
+<refentry id="smbumount.8">
+
+<refmeta>
+	<refentrytitle>smbumount</refentrytitle>
+	<manvolnum>8</manvolnum>
+</refmeta>
+
+
+<refnamediv>
+	<refname>smbumount</refname>
+	<refpurpose>smbfs umount for normal users</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+	<cmdsynopsis>
+		<command>smbumount</command>
+		<arg choice="req">mount-point</arg>
+	</cmdsynopsis>
+</refsynopsisdiv>
+
+<refsect1>
+	<title>DESCRIPTION</title>
+
+	<para>With this program, normal users can unmount smb-filesystems, 
+	provided that it is suid root.  <command>smbumount</command> has 
+	been written to give normal Linux users more control over their 
+	resources. It is safe to install this program suid root, because only 
+	the user who has mounted a filesystem is allowed to unmount it again.  
+	For root it is not necessary to use smbumount. The normal umount 
+	program works perfectly well.</para>  
+
+	<para>WARNING: <command>smbumount</command> is deprecated and not
+        maintained any longer. <command>umount.cifs</command> 
+        should be used instead of <command>smbumount</command>.</para>
+</refsect1>
+
+<refsect1>
+	<title>OPTIONS</title>
+
+	<variablelist>
+		<varlistentry>
+		<term>mount-point</term>
+		<listitem><para>The directory to unmount.</para></listitem>
+		</varlistentry>
+	</variablelist>
+</refsect1>
+
+
+<refsect1>
+	<title>SEE ALSO</title>
+	
+	<para><citerefentry><refentrytitle>smbmount</refentrytitle>
+	<manvolnum>8</manvolnum></citerefentry></para>
+</refsect1>
+
+
+<refsect1>
+	<title>AUTHOR</title>
+	
+	<para>Volker Lendecke, Andrew Tridgell, Michael H. Warfield 
+	and others.</para>
+	
+	<para>The current maintainer of smbfs and the userspace
+	tools <command>smbmount</command>, <command>smbumount</command>,
+	and <command>smbmnt</command> is <ulink 
+	url="mailto:urban at teststation.com">Urban Widmark</ulink>.
+	The <ulink url="mailto:samba at samba.org">SAMBA Mailing list</ulink>
+	is the preferred place to ask questions regarding these programs.
+	</para>
+	
+	<para>The conversion of this manpage for Samba 2.2 was performed 
+	by Gerald Carter. The conversion to DocBook XML 4.2 for Samba 3.0
+	was done by Alexander Bokovoy.</para>
+</refsect1>
+
+</refentry>

Modified: branches/samba/upstream/docs-xml/manpages-3/swat.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/swat.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/swat.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -206,7 +206,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of the Samba suite.</para>
+	<para>This man page is correct for version 3.0 of the Samba suite.</para>
 </refsect1>
 
 <refsect1>

Modified: branches/samba/upstream/docs-xml/manpages-3/tdbbackup.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/tdbbackup.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/tdbbackup.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -118,7 +118,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of the Samba suite.</para>
+	<para>This man page is correct for version 3.0 of the Samba suite.</para>
 </refsect1>
 
 <refsect1>

Modified: branches/samba/upstream/docs-xml/manpages-3/tdbdump.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/tdbdump.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/tdbdump.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -43,7 +43,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of the Samba suite.</para>
+	<para>This man page is correct for version 3.0 of the Samba suite.</para>
 </refsect1>
 
 <refsect1>

Modified: branches/samba/upstream/docs-xml/manpages-3/tdbtool.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/tdbtool.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/tdbtool.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/testparm.1.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/testparm.1.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/testparm.1.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>1</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">User Commands</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -177,7 +177,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of 
+	<para>This man page is correct for version 3.0 of 
 	the Samba suite.</para>
 </refsect1>
 

Modified: branches/samba/upstream/docs-xml/manpages-3/umount.cifs.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/umount.cifs.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/umount.cifs.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/vfs_audit.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/vfs_audit.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/vfs_audit.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/vfs_cacheprime.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/vfs_cacheprime.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/vfs_cacheprime.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/vfs_cap.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/vfs_cap.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/vfs_cap.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/vfs_catia.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/vfs_catia.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/vfs_catia.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/vfs_commit.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/vfs_commit.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/vfs_commit.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/vfs_default_quota.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/vfs_default_quota.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/vfs_default_quota.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/vfs_extd_audit.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/vfs_extd_audit.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/vfs_extd_audit.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/vfs_fake_perms.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/vfs_fake_perms.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/vfs_fake_perms.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/vfs_full_audit.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/vfs_full_audit.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/vfs_full_audit.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/vfs_gpfs.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/vfs_gpfs.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/vfs_gpfs.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/vfs_netatalk.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/vfs_netatalk.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/vfs_netatalk.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/vfs_notify_fam.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/vfs_notify_fam.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/vfs_notify_fam.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/vfs_prealloc.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/vfs_prealloc.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/vfs_prealloc.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/vfs_readahead.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/vfs_readahead.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/vfs_readahead.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/vfs_readonly.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/vfs_readonly.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/vfs_readonly.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/vfs_recycle.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/vfs_recycle.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/vfs_recycle.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/vfs_shadow_copy.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/vfs_shadow_copy.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/vfs_shadow_copy.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/vfs_xattr_tdb.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/vfs_xattr_tdb.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/vfs_xattr_tdb.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 

Modified: branches/samba/upstream/docs-xml/manpages-3/vfstest.1.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/vfstest.1.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/vfstest.1.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>1</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">User Commands</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -135,7 +135,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of the Samba
+	<para>This man page is correct for version 3.0 of the Samba
 	suite.</para>
 </refsect1>
 

Modified: branches/samba/upstream/docs-xml/manpages-3/wbinfo.1.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/wbinfo.1.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/wbinfo.1.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>1</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">User Commands</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -350,7 +350,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of
+	<para>This man page is correct for version 3.0 of
 	the Samba suite.</para>
 </refsect1>
 

Modified: branches/samba/upstream/docs-xml/manpages-3/winbindd.8.xml
===================================================================
--- branches/samba/upstream/docs-xml/manpages-3/winbindd.8.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/manpages-3/winbindd.8.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	<manvolnum>8</manvolnum>
 	<refmiscinfo class="source">Samba</refmiscinfo>
 	<refmiscinfo class="manual">System Administration tools</refmiscinfo>
-	<refmiscinfo class="version">3.2</refmiscinfo>
+	<refmiscinfo class="version">3.0</refmiscinfo>
 </refmeta>
 
 
@@ -470,7 +470,7 @@
 <refsect1>
 	<title>VERSION</title>
 
-	<para>This man page is correct for version 3 of
+	<para>This man page is correct for version 3.0 of
         the Samba suite.</para>
 </refsect1>
 

Deleted: branches/samba/upstream/docs-xml/smbdotconf/base/configbackend.xml
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/base/configbackend.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/smbdotconf/base/configbackend.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,26 +0,0 @@
-<samba:parameter name="config backend"
-                 context="G"
-				 type="enum"
-                 advanced="1" developer="1"
-                 xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
-<description>
-	<para>
-		This controls the backend for storing the configuration.
-		Possible values are <emphasis>file</emphasis> (the default)
-		and <emphasis>registry</emphasis>.
-		When <smbconfoption name="config backend">registry</smbconfoption>
-		 is encountered while loading <emphasis>smb.conf</emphasis>,
-		the configuration read so far is dropped and the global
-		options are read from registry instead. So this triggers a
-		registry only configuration. Share definitions are not read
-		immediately but instead <parameter>registry
-		shares</parameter> is set to <emphasis>yes</emphasis>.
-	</para>
-	<para>
-		Note: This option can not be set inside the registry
-		configuration itself.
-	</para>
-</description>
-<value type="default">file</value>
-<value type="example">registry</value>
-</samba:parameter>

Deleted: branches/samba/upstream/docs-xml/smbdotconf/browse/administrative_share.xml
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/browse/administrative_share.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/smbdotconf/browse/administrative_share.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,16 +0,0 @@
-<samba:parameter name="administrative share"
-                 context="S"
-                 type="boolean"
-                 xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
-<description>
-    <para>If this parameter is set to <constant>yes</constant> for
-      a share, then the share will be an administrative share. The Administrative
-      Shares are the default network shares created by all Windows NT-based
-      operating systems. These are shares like C$, D$ or ADMIN$. The type of these
-      shares is STYPE_DISKTREE_HIDDEN.</para>
-
-    <para>See the section below on <smbconfoption name="security"/> for more 
-      information about this option.</para>
-</description>
-<value type="default">no</value>
-</samba:parameter>

Copied: branches/samba/upstream/docs-xml/smbdotconf/filename/mangledmap.xml (from rev 1928, branches/samba/upstream/docs-xml/smbdotconf/filename/mangledmap.xml)
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/filename/mangledmap.xml	                        (rev 0)
+++ branches/samba/upstream/docs-xml/smbdotconf/filename/mangledmap.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,33 @@
+<samba:parameter name="mangled map"
+				 type="string"
+                 context="S"
+                 xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
+<description>
+	<para>
+	This is for those who want to directly map UNIX file names which cannot be represented on 
+	Windows/DOS.  The mangling of names is not always what is needed.  In particular you may have 
+	documents with file extensions that differ between DOS and UNIX. 
+	For example, under UNIX it is common to use <filename moreinfo="none">.html</filename> 
+	for HTML files, whereas under Windows/DOS <filename moreinfo="none">.htm</filename> 
+	is more commonly used.
+	</para>
+
+	<para>
+	So to map <filename moreinfo="none">html</filename> to <filename moreinfo="none">htm</filename> 
+	you would use:
+	</para>
+		
+	<para>
+	<smbconfoption name="mangled map">(*.html *.htm)</smbconfoption>.
+	</para>
+
+	<para>
+	One very useful case is to remove the annoying <filename moreinfo="none">;1</filename> off 
+	the ends of filenames on some CDROMs (only visible under some UNIXes). To do this use a map of 
+	(*;1 *;).
+	</para>
+</description>
+
+<value type="default"><comment>no mangled map</comment></value>
+<value type="example">(*;1 *;)</value>
+</samba:parameter>

Deleted: branches/samba/upstream/docs-xml/smbdotconf/ldap/clientldapsaslwrapping.xml
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/ldap/clientldapsaslwrapping.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/smbdotconf/ldap/clientldapsaslwrapping.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,44 +0,0 @@
-<samba:parameter name="client ldap sasl wrapping"
-                 context="G"
-               	 type="string"
-		 advanced="1" 
-                 xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
-<description>
-	<para>
-	The <smbconfoption name="client ldap sasl wrapping"/> defines whether
-	ldap traffic will be signed or signed and encrypted (sealed). 
-	Possible values are <emphasis>plain</emphasis>, <emphasis>sign</emphasis> 
-	and <emphasis>seal</emphasis>. 	
-	</para>
-
-	<para>
-	The values <emphasis>sign</emphasis> and <emphasis>seal</emphasis> are 
-	only available if Samba has been compiled against a modern 
-	OpenLDAP version (2.3.x or higher).
-	</para>
-	
-	<para>
-	This option is needed in the case of Domain Controllers enforcing 
-	the usage of signed LDAP connections (e.g. Windows 2000 SP3 or higher).
-	LDAP sign and seal can be controlled with the registry key
-	"<literal>HKLM\System\CurrentControlSet\Services\</literal>
-	<literal>NTDS\Parameters\LDAPServerIntegrity</literal>"
-	on the Windows server side.  
-	</para>
-
-	<para>
-	Depending on the used KRB5 library (MIT and older Heimdal versions)
-	it is possible that the message "integrity only" is not supported. 
-	In this case, <emphasis>sign</emphasis> is just an alias for 
-	<emphasis>seal</emphasis>.
-	</para>
-
-	<para>
-	The default value is <emphasis>plain</emphasis> which is not irritable 
-	to KRB5 clock skew errors. That implies synchronizing the time
-	with the KDC in the case of using <emphasis>sign</emphasis> or 
-	<emphasis>seal</emphasis>.
-	</para>
-</description>
-<value type="default">plain</value>
-</samba:parameter>

Deleted: branches/samba/upstream/docs-xml/smbdotconf/ldap/ldapconnectiontimeout.xml
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/ldap/ldapconnectiontimeout.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/smbdotconf/ldap/ldapconnectiontimeout.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,22 +0,0 @@
-<samba:parameter name="ldap connection timeout"
-		 context="G"
-		 advanced="1" developer="1"
-			type="integer"
-		 xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
-<description>
-	<para>
-	This parameter tells the LDAP library calls which timeout in seconds
-	they should honor during initial connection establishments to LDAP servers.
-	It is very useful in failover scenarios in particular. If one or more LDAP
-	servers are not reachable at all, we do not have to wait until TCP
-	timeouts are over. This feature must be supported by your LDAP library.
-	</para>
-
-	<para>
-	This parameter is different from <smbconfoption name="ldap timeout"/>
-	which affects operations on LDAP servers using an existing connection
-	and not establishing an initial connection.
-	</para>
-</description>
-<value type="default">2</value>
-</samba:parameter>

Modified: branches/samba/upstream/docs-xml/smbdotconf/ldap/ldaptimeout.xml
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/ldap/ldaptimeout.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/smbdotconf/ldap/ldaptimeout.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
                  xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
 <description>
 	<para>
-	When Samba connects to an ldap server that server may be down or unreachable. To prevent Samba from hanging whilst
+	When Samba connects to an ldap server that servermay be down or unreachable. To prevent Samba from hanging whilst
 	waiting for the connection this parameter specifies in seconds how long Samba should wait before failing the 
 	connect. The default is to only wait fifteen seconds for the ldap server to respond to the connect request.
 	</para>

Deleted: branches/samba/upstream/docs-xml/smbdotconf/logging/debugclass.xml
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/logging/debugclass.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/smbdotconf/logging/debugclass.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,18 +0,0 @@
-<samba:parameter name="debug class"
-                 context="G"
-		 type="boolean"
-                 developer="1" advanced="1"
-                 xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
-<description>
-    <para>
-    With this boolean parameter enabled, the debug class (DBGC_CLASS) 
-    will be displayed in the debug header.
-    </para>
-    <para>
-    For more information about currently available debug classes, see
-    section about <smbconfoption name="log level"/>.
-    </para>
-
-</description>
-<value type="default">no</value>
-</samba:parameter>

Deleted: branches/samba/upstream/docs-xml/smbdotconf/logging/ldapdebuglevel.xml
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/logging/ldapdebuglevel.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/smbdotconf/logging/ldapdebuglevel.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,28 +0,0 @@
-<samba:parameter name="ldap debug level"
-		 type="integer"
-		context="G"
-		developer="1" advanced="1"
-		xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
-<description>
-	<para>
-		This parameter controls the debug level of the LDAP library
-		calls. In the case of OpenLDAP, it is the same
-		bit-field as understood by the server and documented in the
-		 <citerefentry>
-			<refentrytitle>slapd.conf</refentrytitle>
-			<manvolnum>5</manvolnum>
-		</citerefentry>
-		manpage.
-		A typical useful value will be
-		 <emphasis>1</emphasis> for tracing function calls.
-	</para>
-	<para>
-		The debug ouput from the LDAP libraries appears with the
-		prefix [LDAP] in Samba's logging output.
-		The level at which LDAP logging is printed is controlled by the
-		parameter <parameter>ldap debug threshold</parameter>.
-	</para>
-</description>
-<value type="default">0</value>
-<value type="example">1</value>
-</samba:parameter>

Deleted: branches/samba/upstream/docs-xml/smbdotconf/logging/ldapdebugthreshold.xml
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/logging/ldapdebugthreshold.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/smbdotconf/logging/ldapdebugthreshold.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,16 +0,0 @@
-<samba:parameter name="ldap debug threshold"
-		type="integer"
-		context="G"
-		developer="1" advanced="1"
-		xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
-<description>
-	<para>
-		This parameter controls the Samba debug level at which
-		the ldap library debug output is
-		printed in the Samba logs. See the description of
-		 <parameter>ldap debug level</parameter> for details.
-	</para>
-</description>
-<value type="default">10</value>
-<value type="example">5</value>
-</samba:parameter>

Deleted: branches/samba/upstream/docs-xml/smbdotconf/misc/clusteraddresses.xml
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/misc/clusteraddresses.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/smbdotconf/misc/clusteraddresses.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,17 +0,0 @@
-<samba:parameter name="cluster addresses"
-	         context="G"
-			 type="list"
-		 developer="1"
-		 xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
-<description>
-	<para>With this parameter you can add additional addresses
-	nmbd will register with a WINS server. These addresses are not
-	necessarily present on all nodes simultaneously, but they will
-	be registered with the WINS server so that clients can contact
-	any of the nodes.
-	</para>
-</description>
-
-<value type="default"></value>
-<value type="example">10.0.0.1 10.0.0.2 10.0.0.3</value>
-</samba:parameter>

Deleted: branches/samba/upstream/docs-xml/smbdotconf/misc/clustering.xml
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/misc/clustering.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/smbdotconf/misc/clustering.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,17 +0,0 @@
-<samba:parameter name="clustering"
-                 context="G"
-				 type="boolean"
-                 advanced="1"
-                 xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
-<description>
-	<para>This parameter specifies whether Samba should contact
-	ctdb for accessing its tdb files and use ctdb as a backend
-	for its messaging backend.
-	</para>
-
-	<para>Set this parameter to <value type="example">yes</value> only if
-	you have a cluster setup with ctdb running.
-	</para>
-</description>
-<value type="default">no</value>
-</samba:parameter>

Deleted: branches/samba/upstream/docs-xml/smbdotconf/misc/ctdbdsocket.xml
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/misc/ctdbdsocket.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/smbdotconf/misc/ctdbdsocket.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,15 +0,0 @@
-<samba:parameter name="ctdbd socket"
-                 context="G"
-                 advanced="1"
-				 type="string"
-                 xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
-<description>
-	<para>If you set <value type="example">clustering=yes</value>,
-	you need to tell Samba where ctdbd listens on its unix domain
-	socket. The default path as of ctdb 1.0 is /tmp/ctdb.socket which
-	you have to explicitly set for Samba in smb.conf.
-	</para>
-</description>
-<value type="default"></value>
-<value type="example">/tmp/ctdb.socket</value>
-</samba:parameter>

Modified: branches/samba/upstream/docs-xml/smbdotconf/misc/include.xml
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/misc/include.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/smbdotconf/misc/include.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -13,16 +13,6 @@
 	It takes the standard substitutions, except <parameter moreinfo="none">%u</parameter>, 
 	<parameter moreinfo="none">%P</parameter> and <parameter moreinfo="none">%S</parameter>.
 	</para>
-
-	<para>
-	The parameter <parameter>include = registry</parameter> has
-	a special meaning: It does <emphasis>not</emphasis> include
-	a file named <emphasis>registry</emphasis> from the current working
-	directory, but instead reads the global configuration options
-	from the registry. See the section on registry-based
-	configuration for details. Note that this option
-	automatically activates registry shares.
-	</para>
 </description>
 
 <value type="default"></value>

Modified: branches/samba/upstream/docs-xml/smbdotconf/misc/lockdirectory.xml
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/misc/lockdirectory.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/smbdotconf/misc/lockdirectory.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,11 +9,6 @@
 	files will be placed.  The lock files are used to implement the 
 	<smbconfoption name="max connections"/> option.
 	</para>
-
-	<para>
-		Note: This option can not be set inside registry
-		configurations.
-	</para>
 </description>
 
 <value type="default">${prefix}/var/locks</value>

Deleted: branches/samba/upstream/docs-xml/smbdotconf/misc/registryshares.xml
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/misc/registryshares.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/smbdotconf/misc/registryshares.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,24 +0,0 @@
-<samba:parameter name="registry shares"
-                 context="G"
-		 type="bool"
-		 advanced="1"
-                 xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
-<description>
-	<para>
-	This turns on or off support for share definitions read from
-	registry. Shares defined in <emphasis>smb.conf</emphasis> take
-	precedence over shares with the same name defined in
-	registry. See the section on registry-based configuration
-	for details. 
-	</para>
-
-	<para>
-		Note that this parameter defaults to <emphasis>no</emphasis>,
-		but it is set to <emphasis>yes</emphasis> when
-		 <parameter>config backend</parameter> is set
-		to <emphasis>registry</emphasis>.
-	</para>
-</description>
-<value type="default">no</value>
-<value type="example">yes</value>
-</samba:parameter>

Deleted: branches/samba/upstream/docs-xml/smbdotconf/protocol/minreceivefilesize.xml
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/protocol/minreceivefilesize.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/smbdotconf/protocol/minreceivefilesize.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,22 +0,0 @@
-<samba:parameter name="min receivefile size"
-		type="integer"
-		context="G"
-		advanced="1" developer="1"
-		xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
-<description>
-<para>This option changes the behavior of <citerefentry><refentrytitle>smbd</refentrytitle>
-<manvolnum>8</manvolnum></citerefentry> when processing SMBwriteX calls. Any incoming
-SMBwriteX call on a non-signed SMB/CIFS connection greater than this value will not be processed in the normal way but will
-be passed to any underlying kernel recvfile or splice system call (if there is no such
-call Samba will emulate in user space). This allows zero-copy writes directly from network
-socket buffers into the filesystem buffer cache, if available. It may improve performance
-but user testing is recommended. If set to zero Samba processes SMBwriteX calls in the
-normal way. To enable POSIX large write support (SMB/CIFS writes up to 16Mb) this option must be
-nonzero. The maximum value is 128k. Values greater than 128k will be silently set to 128k.</para>
-<para>Note this option will have NO EFFECT if set on a SMB signed connection.</para>
-<para>The default is zero, which diables this option.</para>
-</description>
-
-<related>min receivefile size</related>
-<value type="default">0</value>
-</samba:parameter>

Copied: branches/samba/upstream/docs-xml/smbdotconf/protocol/readbmpx.xml (from rev 1928, branches/samba/upstream/docs-xml/smbdotconf/protocol/readbmpx.xml)
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/protocol/readbmpx.xml	                        (rev 0)
+++ branches/samba/upstream/docs-xml/smbdotconf/protocol/readbmpx.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,16 @@
+<samba:parameter name="read bmpx"
+                 context="G"
+				 type="boolean"
+                 developer="1"
+                 xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
+<description>
+    <para>This boolean parameter controls whether
+    <citerefentry><refentrytitle>smbd</refentrytitle>                                       
+    <manvolnum>8</manvolnum></citerefentry> will support the &quot;Read
+    Block Multiplex&quot; SMB. This is now rarely used and defaults to 
+    <constant>no</constant>. You should never need to set this 
+	parameter.</para>
+</description>
+
+<value type="default">no</value>
+</samba:parameter>

Modified: branches/samba/upstream/docs-xml/smbdotconf/security/clientlanmanauth.xml
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/security/clientlanmanauth.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/smbdotconf/security/clientlanmanauth.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -24,5 +24,5 @@
     attempted.</para>
 </description>
 
-<value type="default">no</value>
+<value type="default">yes</value>
 </samba:parameter>

Modified: branches/samba/upstream/docs-xml/smbdotconf/security/clientplaintextauth.xml
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/security/clientplaintextauth.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/smbdotconf/security/clientplaintextauth.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,6 +7,6 @@
 	<para>Specifies whether a client should send a plaintext 
 		password if the server does not support encrypted passwords.</para>
 </description>
-<value type="default">no</value>
+<value type="default">yes</value>
 </samba:parameter>
 

Modified: branches/samba/upstream/docs-xml/smbdotconf/security/lanmanauth.xml
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/security/lanmanauth.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/smbdotconf/security/lanmanauth.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -29,5 +29,5 @@
     special configuration to use it.</para>
 </description>
 
-<value type="default">no</value>
+<value type="default">yes</value>
 </samba:parameter>

Deleted: branches/samba/upstream/docs-xml/smbdotconf/security/smbencrypt.xml
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/security/smbencrypt.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/smbdotconf/security/smbencrypt.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,45 +0,0 @@
-<samba:parameter name="smb encrypt"
-                 context="S"
-				 type="enum"
-                 basic="1"
-		 xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
-<description>
-
-    <para>This is a new feature introduced with Samba 3.2 and above. It is an
-    extension to the SMB/CIFS protocol negotiated as part of the UNIX extensions.
-    SMB encryption uses the GSSAPI (SSPI on Windows) ability to encrypt
-    and sign every request/response in a SMB protocol stream. When
-    enabled it provides a secure method of SMB/CIFS communication,
-    similar to an ssh protected session, but using SMB/CIFS authentication
-    to negotiate encryption and signing keys. Currently this is only
-    supported by Samba 3.2 smbclient, and hopefully soon Linux CIFSFS
-    and MacOS/X clients. Windows clients do not support this feature.
-    </para>
-
-    <para>This controls whether the server offers or requires
-    the client it talks to to use SMB encryption. Possible values 
-    are <emphasis>auto</emphasis>, <emphasis>mandatory</emphasis> 
-    and <emphasis>disabled</emphasis>. This may be set on a per-share
-    basis, but clients may chose to encrypt the entire session, not
-    just traffic to a specific share. If this is set to mandatory
-    then all traffic to a share <emphasis>must</emphasis> must
-    be encrypted once the connection has been made to the share.
-    The server would return "access denied" to all non-encrypted
-    requests on such a share. Selecting encrypted traffic reduces
-    throughput as smaller packet sizes must be used (no huge UNIX
-    style read/writes allowed) as well as the overhead of encrypting
-    and signing all the data.
-    </para>
-
-    <para>If SMB encryption is selected, Windows style SMB signing (see
-    the <smbconfoption name="server signing"/> option) is no longer necessary,
-    as the GSSAPI flags use select both signing and sealing of the data.
-    </para>
-
-    <para>When set to auto, SMB encryption is offered, but not enforced. 
-    When set to mandatory, SMB encryption is required and if set 
-    to disabled, SMB encryption can not be negotiated.</para>
-</description>
-
-<value type="default">auto</value>
-</samba:parameter>

Copied: branches/samba/upstream/docs-xml/smbdotconf/tuning/openfilesdatabasehashsize.xml (from rev 1928, branches/samba/upstream/docs-xml/smbdotconf/tuning/openfilesdatabasehashsize.xml)
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/tuning/openfilesdatabasehashsize.xml	                        (rev 0)
+++ branches/samba/upstream/docs-xml/smbdotconf/tuning/openfilesdatabasehashsize.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,16 @@
+<samba:parameter name="open files database hash size"
+				 type="integer"
+                 context="G"
+                 developer="1"
+                 xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
+<description>
+	<para>This parameter was added in Samba 3.0.23. This is an internal tuning parameter that sets
+	the hash size of the tdb used for the open file databases. The presence of this parameter
+	allows tuning of the system for very large (thousands of concurrent users) Samba setups.
+	The default setting of this parameter should be sufficient for most normal environments.
+	It is advised not to change this parameter unless advised to by a Samba Team member.</para>
+</description>
+
+<value type="default">10007</value>
+<value type="example">1338457</value>
+</samba:parameter>

Modified: branches/samba/upstream/docs-xml/smbdotconf/vfs/getquotacommand.xml
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/vfs/getquotacommand.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/smbdotconf/vfs/getquotacommand.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,9 +8,8 @@
 	whenever there is no operating system API available from the OS that 
 	samba can use.</para>
 
-	<para>This option is only available you have compiled Samba with the
-	<command moreinfo="none">--with-sys-quotas</command> option or on Linux with
-	<command moreinfo="none">--with-quotas</command> and a working quota api
+	<para>This option is only available with <command>./configure --with-sys-quotas</command>.
+	Or on linux when <command>./configure --with-quotas</command> was used and a working quota api 
 	was found in the system.</para>
 
 	<para>This parameter should specify the path to a script that 

Deleted: branches/samba/upstream/docs-xml/smbdotconf/winbind/winbindexpandgroups.xml
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/winbind/winbindexpandgroups.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/smbdotconf/winbind/winbindexpandgroups.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,24 +0,0 @@
-<samba:parameter name="winbind expand groups"
-                 context="G"
-		 type="integer"
-                 advanced="1" developer="1"
-                 xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
-<description>
-	<para>This option controls the maximum depth that winbindd
-              will traverse when flattening nested group memberships
-	      of Windows domain groups.  This is different from the
-	      <smbconfoption name="winbind nested groups"/> option
-              which implements the Windows NT4 model of local group 
-	      nesting.  The &quot;winbind expand groups&quot;
-              parameter specifically applies to the membership of 
-	      domain groups.</para>
-
-	 <para>Be aware that a high value for this parameter can
-	 result in system slowdown as the main parent winbindd daemon
-	 must perform the group unrolling and will be unable to answer
-	 incoming NSS or authentication requests during this time.</para>
-  
-</description>
-
-<value type="default">1</value>
-</samba:parameter>

Deleted: branches/samba/upstream/docs-xml/smbdotconf/winbind/winbindrpconly.xml
===================================================================
--- branches/samba/upstream/docs-xml/smbdotconf/winbind/winbindrpconly.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/smbdotconf/winbind/winbindrpconly.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,16 +0,0 @@
-<samba:parameter name="winbind rpc only"
-	context="G"
-	type="string"
-		 advanced="1" developer="0"
-                 xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
-<description>
-
-	<para>
-	Setting this parameter to <value type="example">yes</value> forces 
-	winbindd to use RPC instead of LDAP to retrieve information from Domain
-        Controllers.
-	</para>
-	
-</description>
-<value type="default">no</value>
-</samba:parameter>

Modified: branches/samba/upstream/docs-xml/xslt/expand-smbconfdoc.xsl
===================================================================
--- branches/samba/upstream/docs-xml/xslt/expand-smbconfdoc.xsl	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/docs-xml/xslt/expand-smbconfdoc.xsl	2008-06-15 01:55:18 UTC (rev 1953)
@@ -136,15 +136,12 @@
 					</xsl:element>
 				</xsl:element>
 				<xsl:element name="title">
-				<xsl:text>&#10;</xsl:text>
-				<xsl:text>&#10;</xsl:text>
 					<xsl:element name="anchor">
 						<xsl:attribute name="id">
 							<xsl:value-of select="translate(translate(string(.),' ',''), 'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>
 						</xsl:attribute>
 					</xsl:element>
 					<xsl:value-of select="."/>
-					<xsl:text>&#10;</xsl:text>
 				</xsl:element>
 				<xsl:element name="variablelist">
 					<xsl:element name="varlistentry">

Modified: branches/samba/upstream/examples/LDAP/README
===================================================================
--- branches/samba/upstream/examples/LDAP/README	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/LDAP/README	2008-06-15 01:55:18 UTC (rev 1953)
@@ -17,22 +17,22 @@
 Note that samba.schema relies upon the uid and uidNumber attributes
 from the RFC2307 schema (i.e. nis.schema)
 
-If you choose to import /etc/passwd, nis, or nisplus tables
-into ldap, you can use migration tools provided by PADL Software
-which are located at
+If you choose to import /etc/passwd, nis, or nisplus tables 
+into ldap, you can use migration tools provided by PADL Software 
+which are located at 
 
 	http://www.padl.com/tools.html
 
 It is not a requirement that a user's /etc/passwd account
 is stored in LDAP for the samba.schema file to work (although
-the whole point of storing smbpasswd in LDAP is to have a
+the whole point of storing smbpasswd in LDAP is to have a 
 single location for user accounts, right?)
 
 The padl tools will leave you with LDIF files which you can import
 into OpenLDAP.  Before you can import them, you need to include
 nis.schema and cosine.schema in your slapd.conf file.
 
-You must restart the LDAP server for these new included schema files
+You must restart the LDAP server for these new included schema files 
 to become active.
 
 SunOne/Netscape DS
@@ -48,26 +48,16 @@
 The schema file has not been updated for the sambaSamAccount
 objectclass.
 
-Fedora Directory Server /
-RedHat Directory Server /
-Netscape Directory Server
--------------------------
 
-An *updated* schema file has been provided, plus a very useful script from
-Mike Jackson and Alyseo is available.
-ol-schema-migrate.pl can be used to migrate OpenLDAP schema files to FDS
-schema ldif files, it can also be used to validate the schema files to
-make sure no duplicate OIDs or malformed entries are found.
-
 smbldap-tools/
 --------------
 
-The smbldap-tools have been removed from the samba svn
-tree.  The latest version will continue to be included
+The smbldap-tools have been removed from the samba svn 
+tree.  The latest version will continue to be included 
 in Samba releases.
 
-The smbldap-tools package can be downloaded individually from
-https://gna.org/projects/smbldap-tools/
+The smbldap-tools package can be downloaded individually from 
+http://samba.idealx.org/dist/
 
 !==
 !== end of README

Deleted: branches/samba/upstream/examples/LDAP/ol-schema-migrate.pl
===================================================================
--- branches/samba/upstream/examples/LDAP/ol-schema-migrate.pl	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/LDAP/ol-schema-migrate.pl	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,384 +0,0 @@
-#!/usr/bin/perl -w
-#
-# Convert OpenLDAP schema files into Fedora DS format with RFC2252 compliant printing
-#
-# First Release : Mike Jackson <mj at sci.fi> 14 June 2005
-#    http://www.netauth.com/~jacksonm/ldap/ol-schema-migrate.pl
-#    Professional LDAP consulting for large and small projects
-#
-# - 6 Dec 2005
-# - objectclass element ordering
-#
-# Second Release : Alyseo <info at alyseo.com> 05 Februrary 2006
-#    Francois Billard <francois at alyseo.com>
-#    Yacine Kheddache <yacine at alyseo.com>
-#    http://www.alyseo.com/
-#
-# - 05 Februrary 2006
-#  - parsing improvement to accept non-RFC compliant schemas (like ISPMAN)
-#  - adding RFC element : Usage, No-user-modification, collective keywords
-# - 08 Februrary 2006
-#  - adding help & usage
-#  - now this script can also beautify your schemas: "-b"
-#  - count attributes and objects class: "-c"
-#  - display items that can not be converted (empty OID...): "-d"
-# - 15 February 2006
-#  - adding workaround for Fedora DS bug 181465:
-#    https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=181465
-#  - adding duplicated OID check: "-d"
-#    Useful to manually correct nasty schemas like:
-#    https://sourceforge.net/tracker/?func=detail&atid=108390&aid=1429276&group_id=8390
-# - 13 September 2007
-#    Based on Samba Team GPL Compliance Officer request, license has been updated from 
-#    GPL to GPLv3+
-#
-# - Fedora DS bug you need to correct by hand :
-#    https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=179956
-#
-# GPLv3+ license
-#
-
-my $optionCount = 0;
-my $optionPrint = 0;
-my $optionBadEntries = 0;
-my $optionHelp = 0;
-my $filename = "" ;
-
-foreach (@ARGV) {
-  $optionHelp = 1 if ( /^-h$/);
-  $optionCount = 1 if ( /^-c$/);
-  $optionPrint = 1 if ( /^-b$/);
-  $optionBadEntries = 1 if ( /^-d$/);
-  $filename = $_ if ( ! /^-b$/ && ! /^-c$/ && ! /^-d$/);
-}
-
-die "Usage : ol-schema-migrate-v2.pl [ -c ] [ -b ] [ -d ] schema\n" . 
-    "  -c\tcount attribute and object class\n" . 
-    "  -b\tconvert and beautify your schema\n" .
-    "  -d\tdisplay unrecognized elements, find empty and duplicated OID\n" .
-    "  -h\tthis help\n" if ($filename eq "" || ($optionHelp || (!$optionCount && !$optionPrint && !$optionBadEntries)));
-
-if($optionCount) {
-  print "Schema verification counters:\n";
-  my $ldapdata = &getSourceFile($filename);
-  print "".(defined($ldapdata->{attributes}) ? @{$ldapdata->{attributes}} : 0) . " attributes\n";
-  print "".(defined($ldapdata->{objectclass}) ?  @{$ldapdata->{objectclass}} : 0) . " object classes\n\n" 
-}
-
-if($optionPrint) {
-  my $ldapdata = &getSourceFile($filename);
-  &printit($ldapdata);
-}
-
-if($optionBadEntries) {
-  print "Display unrecognized entries:\n";
-  my $ldapdata = &getSourceFile($filename);
-  my $errorsAttr = 0;
-  my $errorsObjc = 0;
-  my $errorsDup  = 0;
-  my $emptyOid = 0;
-  my %dup;
-  
-  foreach (@{$ldapdata->{attributes}}) {
-    my $attr = $_;
-    
-    push @{$dup{$attr->{OID}}{attr}}, {NAME => $attr->{NAME}, LINENUMBER => $attr->{LINENUMBER}};
-    
-    $attr->{DATA} =~ s/\n/ /g;
-    $attr->{DATA} =~ s/\r//g;
-    $attr->{DATA} =~ s/attribute[t|T]ypes?:?\s*\(//;
-    $attr->{DATA} =~ s/\Q$attr->{OID}//                 if(defined $attr->{OID});
-    $attr->{DATA} =~ s/NAME\s*\Q$attr->{NAME}//         if(defined $attr->{NAME});
-    $attr->{DATA} =~ s/DESC\s*'\Q$attr->{DESC}'//       if(defined $attr->{DESC});
-    $attr->{DATA} =~ s/$attr->{OBSOLETE}//              if(defined $attr->{OBSOLETE});
-    $attr->{DATA} =~ s/SUP\s*\Q$attr->{SUP}//           if(defined $attr->{SUP});
-    $attr->{DATA} =~ s/EQUALITY\s*\Q$attr->{EQUALITY}// if(defined $attr->{EQUALITY});
-    $attr->{DATA} =~ s/ORDERING\s*\Q$attr->{ORDERING}// if(defined $attr->{ORDERING});
-    $attr->{DATA} =~ s/SUBSTR\s*\Q$attr->{SUBSTR}//     if(defined $attr->{SUBSTR});
-    $attr->{DATA} =~ s/SYNTAX\s*\Q$attr->{SYNTAX}//     if(defined $attr->{SYNTAX});
-    $attr->{DATA} =~ s/SINGLE-VALUE//                   if(defined $attr->{SINGLEVALUE});
-    $attr->{DATA} =~ s/NO-USER-MODIFICATION//           if(defined $attr->{NOUSERMOD});
-    $attr->{DATA} =~ s/COLLECTIVE//                     if(defined $attr->{COLLECTIVE});
-    $attr->{DATA} =~ s/USAGE\s*\Q$attr->{USAGE}//       if(defined $attr->{USAGE});
-    $attr->{DATA} =~ s/\)\s$//;
-    $attr->{DATA} =~ s/^\s+(\S)/\n$1/  ;
-    $attr->{DATA} =~ s/(\S)\s+$/$1\n/;
-    do {
-      $errorsAttr ++;      
-      do {  $emptyOid ++; 
-            print "Warning : no OID for attributes element at line $attr->{LINENUMBER} \n";
-      } if( !defined($attr->{OID}));
-      print "### Unknow element embedded in ATTRIBUTE at line $attr->{LINENUMBER} :\n$attr->{DATA}\n"
-    } if($attr->{DATA} =~ /\w/);
-  }
-
-  foreach (@{$ldapdata->{objectclass}}) {
-    my $objc = $_;
-    push @{$dup{$objc->{OID}}{objc}} , {NAME => $objc->{NAME}, LINENUMBER => $objc->{LINENUMBER}};
-    $objc->{DATA} =~ s/\n/ /g;
-    $objc->{DATA} =~ s/\r//g;
-    $objc->{DATA} =~ s/^object[c|C]lasse?s?:?\s*\(?//;
-    $objc->{DATA} =~ s/\Q$objc->{OID}//                       if(defined $objc->{OID});
-    $objc->{DATA} =~ s/NAME\s*\Q$objc->{NAME}\E//             if(defined $objc->{NAME});
-    $objc->{DATA} =~ s/DESC\s*'\Q$objc->{DESC}\E'//           if(defined $objc->{DESC});
-    $objc->{DATA} =~ s/OBSOLETE//                             if(defined $objc->{OBSOLETE});
-    $objc->{DATA} =~ s/SUP\s*\Q$objc->{SUP}//                 if(defined $objc->{SUP});
-    $objc->{DATA} =~ s/\Q$objc->{TYPE}//                      if(defined $objc->{TYPE});
-    $objc->{DATA} =~ s/MUST\s*\Q$objc->{MUST}\E\s*//          if(defined $objc->{MUST});
-    $objc->{DATA} =~ s/MUST\s*\(?\s*\Q$objc->{MUST}\E\s*\)?// if(defined $objc->{MUST});
-    $objc->{DATA} =~ s/MAY\s*\Q$objc->{MAY}\E//               if(defined $objc->{MAY});
-    $objc->{DATA} =~ s/\)\s$//;
-    $objc->{DATA} =~ s/^\s+(\S)/\n$1/  ;
-    $objc->{DATA} =~ s/(\S)\s+$/$1\n/;
-
-    do {
-      print "#" x 80 ."\n";
-      $errorsObjc ++;
-      do { $emptyOid++ ;
-           print "Warning : no OID for object class element at line $objc->{LINENUMBER} \n";
-      } if( $objc->{OID} eq "");
-      print "### Unknow element embedded in OBJECT CLASS at line $objc->{LINENUMBER} :\n$objc->{DATA}\n"
-    } if($objc->{DATA} =~ /\w/);
-  }
-
-  my $nbDup = 0;
-  foreach (keys %dup) {
-    my $sumOid = 0;
-    $sumOid += @{$dup{$_}{attr}} if(defined (@{$dup{$_}{attr}}));
-    $sumOid += @{$dup{$_}{objc}} if(defined (@{$dup{$_}{objc}}));
-    if( $sumOid > 1 && $_ ne "") {
-      $nbDup ++;
-      print "#" x 80 ."\n";
-      print "Duplicate OID founds : $_\n";
-      foreach (@{$dup{$_}{attr}}) {
-        
-        print "Attribute : $_->{NAME} (line : $_->{LINENUMBER})\n";
-      }
-      foreach (@{$dup{$_}{objc}}) {
-        print "Object class : $_->{NAME} (line : $_->{LINENUMBER})\n";
-      }
-      
-    }
-  }
-
-  print "\n$errorsAttr errors detected in ATTRIBUTES list\n";
-  print "$errorsObjc errors detected in OBJECT CLASS list\n";
-  print "$nbDup duplicate OID founds\n";
-  print "$emptyOid empty OID fields founds\n\n";
-
-}
-
-
-sub printit {
-  my $ldapdata = shift;
-  &printSeparator;
-  print "dn: cn=schema\n";
-  &printSeparator;
-
-  # print elements in RFC2252 order
-
-  foreach (@{$ldapdata->{attributes}}) {
-    my $attr = $_;
-    print "attributeTypes: (\n";
-    print "  $attr->{OID}\n";
-    print "  NAME $attr->{NAME}\n";
-    print "  DESC '$attr->{DESC}'\n"         if(defined $attr->{DESC});
-    print "  OBSOLETE\n"                     if(defined $attr->{OBSOLETE});
-    print "  SUP $attr->{SUP}\n"             if(defined $attr->{SUP});
-    print "  EQUALITY $attr->{EQUALITY}\n"   if(defined $attr->{EQUALITY});
-    print "  ORDERING $attr->{ORDERING}\n"   if(defined $attr->{ORDERING});
-    print "  SUBSTR $attr->{SUBSTR}\n"       if(defined $attr->{SUBSTR});
-    print "  SYNTAX $attr->{SYNTAX}\n"       if(defined $attr->{SYNTAX});
-    print "  SINGLE-VALUE\n"                 if(defined $attr->{SINGLEVALUE});
-    print "  NO-USER-MODIFICATION\n"         if(defined $attr->{NOUSERMOD});
-    print "  COLLECTIVE\n"                   if(defined $attr->{COLLECTIVE});
-    print "  USAGE $attr->{USAGE}\n"         if(defined $attr->{USAGE});
-    print "  )\n";
-    &printSeparator;
-  }
-
-  foreach (@{$ldapdata->{objectclass}}) {
-    my $objc = $_;
-    # next 3 lines : Fedora DS space sensitive bug workaround 
-    $objc->{SUP}         =~ s/^\(\s*(.*?)\s*\)$/\( $1 \)/  if (defined $objc->{SUP});  
-    $objc->{MUST}        =~ s/^\(\s*(.*?)\s*\)$/\( $1 \)/  if (defined $objc->{MUST}); 
-    $objc->{MAY}         =~ s/^\(\s*(.*?)\s*\)$/\( $1 \)/  if (defined $objc->{MAY}); 
-
-    print "objectClasses: (\n";
-    print "  $objc->{OID}\n";
-    print "  NAME $objc->{NAME}\n";
-    print "  DESC '$objc->{DESC}'\n"  if(defined $objc->{DESC});
-    print "  OBSOLETE\n"              if(defined $objc->{OBSOLETE});
-    print "  SUP $objc->{SUP}\n"      if(defined $objc->{SUP});
-    print "  $objc->{TYPE}\n"         if(defined $objc->{TYPE});  
-    print "  MUST $objc->{MUST}\n"    if(defined $objc->{MUST});
-    print "  MAY $objc->{MAY}\n"      if(defined $objc->{MAY});
-    print "  )\n";
-    &printSeparator;
-  }
-}
-
-sub printSeparator {
-  print "#\n";
-  print "#" x 80 . "\n";
-  print "#\n";
-}  
-
-sub getSourceFile {
-  my @data = &getFile(shift);
-  my %result;
-  my $result = \%result;
-  my @allattrs;
-  my @allattrsLineNumber;
-  my @allobjc;
-  my @allobjcLineNumber;
-  my $at = 0;
-  my $oc = 0;
-  my $at_string;
-  my $oc_string;
-  my $idx = 0;
-  my $beginParenthesis = 0;
-  my $endParenthesis = 0;
-  my $lineNumber = 0;  
-  for(@data) {
-    $lineNumber++;
-    next if (/^\s*\#/); # skip comments
-
-    if($at) {
-      s/ +/ /;                    # remove embedded tabs
-      s/\t/ /;                    # remove multiple spaces after the $ sign
-
-       $at_string .= $_;
-      $beginParenthesis = 0;      # Use best matching elements
-      $endParenthesis = 0;
-      for(my $i=0;$ i < length($at_string); $i++) {
-        $beginParenthesis++ if(substr ($at_string,$i,1) eq "(");
-        $endParenthesis++ if(substr ($at_string,$i,1) eq ")");
-      }
-      if($beginParenthesis == $endParenthesis) {
-        push @allattrs, $at_string;
-        $at = 0;
-        $at_string = "";
-        $endParenthesis = 0;
-        $beginParenthesis = 0;
-      }
-    }
-
-    if (/^attribute[t|T]ype/) {
-      my $line = $_;
-       push @allattrsLineNumber, $lineNumber;      # keep starting line number
-      for(my $i=0;$ i < length($line); $i++) {
-        $beginParenthesis++ if(substr ($line, $i, 1) eq "(");
-        $endParenthesis++ if(substr ($line, $i, 1) eq ")");
-      }
-      if($beginParenthesis == $endParenthesis && $beginParenthesis != 0) {
-        push @allattrs, $line;
-        $endParenthesis = 0;
-        $beginParenthesis = 0;
-      } else {
-        $at_string = $line;
-        $at = 1;
-      }
-    }
-
-    #####################################
-
-    if($oc) {
-      s/ +/ /;
-      s/\t/ /;
-      
-      $oc_string .= $_;
-      $endParenthesis = 0;          # best methode to accept an elements : 
-      $beginParenthesis = 0;        # left parenthesis sum == right parenthesis sum, so we are sure to 
-      for(my $i=0;$ i < length($oc_string); $i++) {      # have an element.
-        $beginParenthesis++ if(substr ($oc_string, $i, 1) eq "(");
-        $endParenthesis++ if(substr ($oc_string, $i, 1) eq ")");
-      }
-      if($beginParenthesis == $endParenthesis) {
-        push @allobjc, $oc_string;
-        $oc = 0;
-        $oc_string = "";
-        $endParenthesis = 0;
-        $beginParenthesis = 0;
-      }
-    }
-
-    if (/^object[c|C]lass/) {
-      my $line = $_;
-       push @allobjcLineNumber, $lineNumber;    # keep starting line number
-      for(my $i=0;$ i < length($line); $i++) {
-        $beginParenthesis++ if(substr ($line, $i, 1) eq "(");
-        $endParenthesis++ if(substr ($line, $i, 1) eq ")");
-      }
-      if($beginParenthesis == $endParenthesis && $beginParenthesis != 0) {
-        push @allobjc, $line;
-        $endParenthesis = 0;
-        $beginParenthesis = 0;
-      } else {
-        $oc_string = $line;
-        $oc = 1;
-      }
-    }
-  }
-
-  # Parsing attribute elements
-  
-  for(@allattrs) {
-    s/\n/ /g;
-    s/\r//g;
-    s/ +/ /g;
-    s/\t/ /g;
-    $result->{attributes}->[$idx]->{DATA}        = $_              if($optionBadEntries);     # keep original data
-    $result->{attributes}->[$idx]->{LINENUMBER}  = $allattrsLineNumber[$idx];
-    $result->{attributes}->[$idx]->{OID}         = $1              if (m/^attribute[t|T]ypes?:?\s*\(?\s*([\.\d]*?)\s+/);
-    $result->{attributes}->[$idx]->{NAME}        = $1              if (m/NAME\s+('.*?')\s*/ || m/NAME\s+(\(.*?\))/);
-    $result->{attributes}->[$idx]->{DESC}        = $1              if (m/DESC\s+'(.*?)'\s*/);
-    $result->{attributes}->[$idx]->{OBSOLETE}    = "OBSOLETE"      if (m/OBSOLETE/);
-    $result->{attributes}->[$idx]->{SUP}         = $1              if (m/SUP\s+(.*?)\s/);
-    $result->{attributes}->[$idx]->{EQUALITY}    = $1              if (m/EQUALITY\s+(.*?)\s/);
-    $result->{attributes}->[$idx]->{ORDERING}    = $1              if (m/ORDERING\s+(.*?)\s/);
-    $result->{attributes}->[$idx]->{SUBSTR}      = $1              if (m/SUBSTR\s+(.*?)\s/);
-    $result->{attributes}->[$idx]->{SYNTAX}      = $1              if (m/SYNTAX\s+(.*?)(\s|\))/);
-    $result->{attributes}->[$idx]->{SINGLEVALUE} = "SINGLE-VALUE"  if (m/SINGLE-VALUE/);
-    $result->{attributes}->[$idx]->{COLLECTIVE}  = "COLLECTIVE"    if (m/COLLECTIVE/);
-    $result->{attributes}->[$idx]->{USAGE}       = $1              if (m/USAGE\s+(.*?)\s/);
-    $result->{attributes}->[$idx]->{NOUSERMOD}   = "NO-USER-MODIFICATION"    if (m/NO-USER-MODIFICATION/);
-    $idx ++;
-  }
-  
-  $idx = 0;
-  
-  # Parsing object class elements
-  
-  for(@allobjc) {
-    s/\n/ /g;
-    s/\r//g;
-    s/ +/ /g;
-    s/\t/ /g;
-    $result->{objectclass}->[$idx]->{DATA}        = $_          if($optionBadEntries);     # keep original data
-    $result->{objectclass}->[$idx]->{LINENUMBER}  = $allobjcLineNumber[$idx];
-    $result->{objectclass}->[$idx]->{OID}         = $1          if (m/^object[c|C]lasse?s?:?\s*\(?\s*([\.\d]*?)\s+/);
-    $result->{objectclass}->[$idx]->{NAME}        = $1          if (m/NAME\s+('.*?')\s*/ || m/NAME\s+(\(.*?\))/);
-    $result->{objectclass}->[$idx]->{DESC}        =  $1         if (m/DESC\s+'(.*?)'\s*/);
-    $result->{objectclass}->[$idx]->{OBSOLETE}    = "OBSOLETE"  if (m/OBSOLETE/);
-    $result->{objectclass}->[$idx]->{SUP}         = $1          if (m/SUP\s+([^()]+?)\s/ || m/SUP\s+(\(.+?\))\s/);
-    $result->{objectclass}->[$idx]->{TYPE}        = $1          if (m/((?:STRUCTURAL)|(?:AUXILIARY)|(?:ABSTRACT))/);
-    $result->{objectclass}->[$idx]->{MUST}        = $1          if (m/MUST\s+(\w+)\)?/ || m/MUST\s+(\(.*?\))(\s|\))/s);
-    $result->{objectclass}->[$idx]->{MAY}         = $1          if (m/MAY\s+(\w+)\)?/ || m/MAY\s+(\(.*?\))(\s|\))/s);
-
-    $idx++;
-  }
-  
-  return $result;
-}
-
-sub getFile {
-  my @data;
-  my $file = shift;
-  die "File not found : $file\n" if(! -e $file);
-  open FH, $file;
-  @data = <FH>;
-  close FH;
-  @data;
-}
-

Deleted: branches/samba/upstream/examples/LDAP/samba-schema-FDS.ldif
===================================================================
--- branches/samba/upstream/examples/LDAP/samba-schema-FDS.ldif	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/LDAP/samba-schema-FDS.ldif	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,156 +0,0 @@
-## schema file for Fedora/RedHat Directory Server
-##
-## NOTE: this file can be copied as 60samba.ldif into your instance schema
-## directory:
-## cp samba-schema-FDS.ldif /etc/dirsrv/slapd-<instance-name>/schema/60schema.ldif
-##
-## Schema for storing Samba user accounts and group maps in LDAP
-## OIDs are owned by the Samba Team
-##
-## Prerequisite schemas - uid         (cosine.schema)
-##                      - displayName (inetorgperson.schema)
-##                      - gidNumber   (nis.schema)
-##
-## 1.3.6.1.4.1.7165.2.1.x - attributeTypess
-## 1.3.6.1.4.1.7165.2.2.x - objectClasseses
-##
-## Printer support
-## 1.3.6.1.4.1.7165.2.3.1.x - attributeTypess
-## 1.3.6.1.4.1.7165.2.3.2.x - objectClasseses
-##
-## Samba4
-## 1.3.6.1.4.1.7165.4.1.x - attributeTypess
-## 1.3.6.1.4.1.7165.4.2.x - objectClasseses
-## 1.3.6.1.4.1.7165.4.3.x - LDB/LDAP Controls
-## 1.3.6.1.4.1.7165.4.4.x - LDB/LDAP Extended Operations
-## 1.3.6.1.4.1.7165.4.255.x - mapped OIDs due to conflicts between AD and standards-track
-##
-dn: cn=schema
-##
-#######################################################################
-##                Attributes used by Samba 3.0 schema                ##
-#######################################################################
-##
-## Password hashes##
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.24 NAME 'sambaLMPassword' DESC 'LanManager Password' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{32} SINGLE-VALUE )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.25 NAME 'sambaNTPassword' DESC 'MD4 hash of the unicode password' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{32} SINGLE-VALUE )
-##
-## Account flags in string format ([UWDX     ])
-##
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.26 NAME 'sambaAcctFlags' DESC 'Account Flags' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{16} SINGLE-VALUE )
-##
-## Password timestamps & policies
-##
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.27 NAME 'sambaPwdLastSet' DESC 'Timestamp of the last password update' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.28 NAME 'sambaPwdCanChange' DESC 'Timestamp of when the user is allowed to update the password' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.29 NAME 'sambaPwdMustChange' DESC 'Timestamp of when the password will expire' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.30 NAME 'sambaLogonTime' DESC 'Timestamp of last logon' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.31 NAME 'sambaLogoffTime' DESC 'Timestamp of last logoff' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.32 NAME 'sambaKickoffTime' DESC 'Timestamp of when the user will be logged off automatically' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.48 NAME 'sambaBadPasswordCount' DESC 'Bad password attempt count' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.49 NAME 'sambaBadPasswordTime' DESC 'Time of the last bad password attempt' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.55 NAME 'sambaLogonHours' DESC 'Logon Hours' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{42} SINGLE-VALUE )
-##
-## string settings
-##
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.33 NAME 'sambaHomeDrive' DESC 'Driver letter of home directory mapping' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{4} SINGLE-VALUE )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.34 NAME 'sambaLogonScript' DESC 'Logon script path' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{255} SINGLE-VALUE )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.35 NAME 'sambaProfilePath' DESC 'Roaming profile path' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{255} SINGLE-VALUE )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.36 NAME 'sambaUserWorkstations' DESC 'List of user workstations the user is allowed to logon to' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{255} SINGLE-VALUE )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.37 NAME 'sambaHomePath' DESC 'Home directory UNC path' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.38 NAME 'sambaDomainName' DESC 'Windows NT domain to which the user belongs' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.47 NAME 'sambaMungedDial' DESC 'Base64 encoded user parameter string' EQUALITY caseExactMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1050} )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.54 NAME 'sambaPasswordHistory' DESC 'Concatenated MD5 hashes of the salted NT passwords used on this account' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{32} )
-##
-## SID, of any type
-##
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.20 NAME 'sambaSID' DESC 'Security ID' EQUALITY caseIgnoreIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{64} SINGLE-VALUE )
-##
-## Primary group SID, compatible with ntSid
-##
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.23 NAME 'sambaPrimaryGroupSID' DESC 'Primary Group Security ID' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{64} SINGLE-VALUE )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.51 NAME 'sambaSIDList' DESC 'Security ID List' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{64} )
-##
-## group mapping attributes
-##
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.19 NAME 'sambaGroupType' DESC 'NT Group Type' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-##
-## Store info on the domain
-##
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.21 NAME 'sambaNextUserRid' DESC 'Next NT rid to give our for users' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.22 NAME 'sambaNextGroupRid' DESC 'Next NT rid to give out for groups' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.39 NAME 'sambaNextRid' DESC 'Next NT rid to give out for anything' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.40 NAME 'sambaAlgorithmicRidBase' DESC 'Base at which the samba RID generation algorithm should operate' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.41 NAME 'sambaShareName' DESC 'Share Name' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.42 NAME 'sambaOptionName' DESC 'Option Name' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.43 NAME 'sambaBoolOption' DESC 'A boolean option' EQUALITY booleanMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.44 NAME 'sambaIntegerOption' DESC 'An integer option' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.45 NAME 'sambaStringOption' DESC 'A string option' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.46 NAME 'sambaStringListOption' DESC 'A string list option' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
-##attributeTypes: ( 1.3.6.1.4.1.7165.2.1.50 NAME 'sambaPrivName' 
-##	SUP name )
-##
-##attributeTypes: ( 1.3.6.1.4.1.7165.2.1.52 NAME 'sambaPrivilegeList'
-##	DESC 'Privileges List'
-##	EQUALITY caseIgnoreIA5Match
-##	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{64} )
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.53 NAME 'sambaTrustFlags' DESC 'Trust Password Flags' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-# "min password length"
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.58 NAME 'sambaMinPwdLength' DESC 'Minimal password length (default: 5)' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-# "password history"
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.59 NAME 'sambaPwdHistoryLength' DESC 'Length of Password History Entries (default: 0 => off)' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-# "user must logon to change password"
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.60 NAME 'sambaLogonToChgPwd' DESC 'Force Users to logon for password change (default: 0 => off, 2 => on)' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-# "maximum password age"
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.61 NAME 'sambaMaxPwdAge' DESC 'Maximum password age, in seconds (default: -1 => never expire passwords)' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-# "minimum password age"
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.62 NAME 'sambaMinPwdAge' DESC 'Minimum password age, in seconds (default: 0 => allow immediate password change)' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-# "lockout duration"
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.63 NAME 'sambaLockoutDuration' DESC 'Lockout duration in minutes (default: 30, -1 => forever)' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-# "reset count minutes"
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.64 NAME 'sambaLockoutObservationWindow' DESC 'Reset time after lockout in minutes (default: 30)' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-# "bad lockout attempt"
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.65 NAME 'sambaLockoutThreshold' DESC 'Lockout users after bad logon attempts (default: 0 => off)' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-# "disconnect time"
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.66 NAME 'sambaForceLogoff' DESC 'Disconnect Users outside logon hours (default: -1 => off, 0 => on)' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-# "refuse machine password change"
-attributeTypes: ( 1.3.6.1.4.1.7165.2.1.67 NAME 'sambaRefuseMachinePwdChange' DESC 'Allow Machine Password changes (default: 0 => off)' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-##
-#######################################################################
-##              objectClasses: used by Samba 3.0 schema               ##
-#######################################################################
-##
-## The X.500 data model (and therefore LDAPv3) says that each entry can
-## only have one structural objectClasses.  OpenLDAP 2.0 does not enforce
-## this currently but will in v2.1
-##
-## added new objectClasses: (and OID) for 3.0 to help us deal with backwards
-## compatibility with 2.2 installations (e.g. ldapsam_compat)  --jerry
-##
-objectClasses: ( 1.3.6.1.4.1.7165.2.2.6 NAME 'sambaSamAccount' SUP top AUXILIARY DESC 'Samba 3.0 Auxilary SAM Account' MUST ( uid $ sambaSID ) MAY  ( cn $ sambaLMPassword $ sambaNTPassword $ sambaPwdLastSet $ sambaLogonTime $ sambaLogoffTime $ sambaKickoffTime $ sambaPwdCanChange $ sambaPwdMustChange $ sambaAcctFlags $ displayName $ sambaHomePath $ sambaHomeDrive $ sambaLogonScript $ sambaProfilePath $ description $ sambaUserWorkstations $ sambaPrimaryGroupSID $ sambaDomainName $ sambaMungedDial $ sambaBadPasswordCount $ sambaBadPasswordTime $ sambaPasswordHistory $ sambaLogonHours))
-##
-## Group mapping info
-##
-objectClasses: ( 1.3.6.1.4.1.7165.2.2.4 NAME 'sambaGroupMapping' SUP top AUXILIARY DESC 'Samba Group Mapping' MUST ( gidNumber $ sambaSID $ sambaGroupType ) MAY  ( displayName $ description $ sambaSIDList ))
-##
-## Trust password for trust relationships (any kind)
-##
-objectClasses: ( 1.3.6.1.4.1.7165.2.2.14 NAME 'sambaTrustPassword' SUP top STRUCTURAL DESC 'Samba Trust Password' MUST ( sambaDomainName $ sambaNTPassword $ sambaTrustFlags ) MAY ( sambaSID $ sambaPwdLastSet ))
-##
-## Whole-of-domain info
-##
-objectClasses: ( 1.3.6.1.4.1.7165.2.2.5 NAME 'sambaDomain' SUP top STRUCTURAL DESC 'Samba Domain Information' MUST ( sambaDomainName $ sambaSID ) MAY ( sambaNextRid $ sambaNextGroupRid $ sambaNextUserRid $ sambaAlgorithmicRidBase $ sambaMinPwdLength $ sambaPwdHistoryLength $ sambaLogonToChgPwd $ sambaMaxPwdAge $ sambaMinPwdAge $ sambaLockoutDuration $ sambaLockoutObservationWindow $ sambaLockoutThreshold $ sambaForceLogoff $ sambaRefuseMachinePwdChange ))
-##
-## used for idmap_ldap module
-##
-objectClasses: ( 1.3.6.1.4.1.7165.2.2.7 NAME 'sambaUnixIdPool' SUP top AUXILIARY DESC 'Pool for allocating UNIX uids/gids' MUST ( uidNumber $ gidNumber ) ) 
-objectClasses: ( 1.3.6.1.4.1.7165.2.2.8 NAME 'sambaIdmapEntry' SUP top AUXILIARY DESC 'Mapping from a SID to an ID' MUST ( sambaSID ) MAY ( uidNumber $ gidNumber ) )
-objectClasses: ( 1.3.6.1.4.1.7165.2.2.9 NAME 'sambaSidEntry' SUP top STRUCTURAL DESC 'Structural Class for a SID' MUST ( sambaSID ) )
-objectClasses: ( 1.3.6.1.4.1.7165.2.2.10 NAME 'sambaConfig' SUP top AUXILIARY DESC 'Samba Configuration Section' MAY ( description ) )
-objectClasses: ( 1.3.6.1.4.1.7165.2.2.11 NAME 'sambaShare' SUP top STRUCTURAL DESC 'Samba Share Section' MUST ( sambaShareName ) MAY ( description ) )
-objectClasses: ( 1.3.6.1.4.1.7165.2.2.12 NAME 'sambaConfigOption' SUP top STRUCTURAL DESC 'Samba Configuration Option' MUST ( sambaOptionName ) MAY ( sambaBoolOption $ sambaIntegerOption $ sambaStringOption $ sambaStringListoption $ description ) )
-## retired during privilege rewrite
-##objectClasses: ( 1.3.6.1.4.1.7165.2.2.13 NAME 'sambaPrivilege' SUP top AUXILIARY
-##	DESC 'Samba Privilege'
-##	MUST ( sambaSID )
-##	MAY ( sambaPrivilegeList ) )

Modified: branches/samba/upstream/examples/LDAP/samba.schema
===================================================================
--- branches/samba/upstream/examples/LDAP/samba.schema	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/LDAP/samba.schema	2008-06-15 01:55:18 UTC (rev 1953)
@@ -457,20 +457,9 @@
 	EQUALITY integerMatch
 	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
 
-#
-attributetype ( 1.3.6.1.4.1.7165.2.1.68 NAME 'sambaClearTextPassword'
-	DESC 'Clear text password (used for trusted domain passwords)'
-	EQUALITY octetStringMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 )
 
-#
-attributetype ( 1.3.6.1.4.1.7165.2.1.69 NAME 'sambaPreviousClearTextPassword'
-	DESC 'Previous clear text password (used for trusted domain passwords)'
-	EQUALITY octetStringMatch
-	SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 )
 
 
-
 #######################################################################
 ##              objectClasses used by Samba 3.0 schema               ##
 #######################################################################
@@ -512,16 +501,6 @@
 	MAY ( sambaSID $ sambaPwdLastSet ))
 
 ##
-## Trust password for trusted domains
-## (to be stored beneath the trusting sambaDomain object in the DIT)
-##
-objectclass ( 1.3.6.1.4.1.7165.2.2.15 NAME 'sambaTrustedDomainPassword' SUP top STRUCTURAL
-	DESC 'Samba Trusted Domain Password'
-	MUST ( sambaDomainName $ sambaSID $
-	       sambaClearTextPassword $ sambaPwdLastSet )
-	MAY  ( sambaPreviousClearTextPassword ))
-
-##
 ## Whole-of-domain info
 ##
 objectclass ( 1.3.6.1.4.1.7165.2.2.5 NAME 'sambaDomain' SUP top STRUCTURAL

Modified: branches/samba/upstream/examples/VFS/Makefile.in
===================================================================
--- branches/samba/upstream/examples/VFS/Makefile.in	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/VFS/Makefile.in	2008-06-15 01:55:18 UTC (rev 1953)
@@ -12,7 +12,7 @@
 		-I$(SAMBA_SOURCE)/popt  \
 		-I$(SAMBA_SOURCE)/lib/replace  \
 		-I$(SAMBA_SOURCE)/lib/talloc  \
-		-I$(SAMBA_SOURCE)/lib/tdb/include  \
+		-I$(SAMBA_SOURCE)/tdb/include  \
 		-I$(SAMBA_SOURCE)/smbwrapper \
 		-I$(SAMBA_SOURCE)/librpc \
 		-I$(SAMBA_SOURCE) -I.

Modified: branches/samba/upstream/examples/VFS/config.guess
===================================================================
--- branches/samba/upstream/examples/VFS/config.guess	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/VFS/config.guess	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful, but
@@ -16,7 +16,9 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a

Modified: branches/samba/upstream/examples/VFS/config.sub
===================================================================
--- branches/samba/upstream/examples/VFS/config.sub	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/VFS/config.sub	2008-06-15 01:55:18 UTC (rev 1953)
@@ -11,7 +11,7 @@
 #
 # This file is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful,
@@ -20,7 +20,9 @@
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a

Modified: branches/samba/upstream/examples/VFS/configure.in
===================================================================
--- branches/samba/upstream/examples/VFS/configure.in	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/VFS/configure.in	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,14 +5,14 @@
 AC_PREREQ(2.53)
 AC_INIT(Makefile.in)
 
-AC_CONFIG_HEADER(module_config.h)
+#dnl Uncomment this if you want to use your own define's too
+#AC_CONFIG_HEADER(module_config.h)
 #dnl To make sure that didn't get #define PACKAGE_* in modules_config.h
 #echo "" > confdefs.h
 
 dnl Checks for programs.
 AC_PROG_CC
 AC_PROG_INSTALL
-AC_CANONICAL_HOST
 
 #################################################
 # Directory handling stuff to support both the
@@ -313,11 +313,6 @@
 			BLDSHARED="false"
 			LDSHFLAGS=""
 			;;
-		*darwin*)
-			BLDSHARED="true"
-			LDSHFLAGS="-bundle -flat_namespace -undefined suppress"
-			SHLIBEXT="dylib"
-			;;
 		*)
 			;;
   esac
@@ -337,7 +332,7 @@
    ac_cv_shlib_works=no
    # try building a trivial shared library
    if test "$PICSUFFIX" = "po"; then
-     $CC $CPPFLAGS $CFLAGS $PICFLAGS -c -o shlib.po ${srcdir-.}/../../source/tests/shlib.c &&
+     $CC $CPPFLAGS $CFLAGS $PICFLAGS -c -o shlib.po ${srcdir-.}/tests/shlib.c &&
        $CC $CPPFLAGS $CFLAGS `eval echo $LDSHFLAGS` -o "shlib.$SHLIBEXT" shlib.po &&
        ac_cv_shlib_works=yes
    else

Modified: branches/samba/upstream/examples/VFS/shadow_copy_test.c
===================================================================
--- branches/samba/upstream/examples/VFS/shadow_copy_test.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/VFS/shadow_copy_test.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *  
  * This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  * GNU General Public License for more details.
  *  
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -49,7 +50,7 @@
 	  Directories are always displayed...    
 */
 
-static int test_get_shadow_copy_data(vfs_handle_struct *handle, files_struct *fsp, SHADOW_COPY_DATA *shadow_copy_data, bool labels)
+static int test_get_shadow_copy_data(vfs_handle_struct *handle, files_struct *fsp, SHADOW_COPY_DATA *shadow_copy_data, BOOL labels)
 {
 	uint32 num = 3;
 	uint32 i;

Modified: branches/samba/upstream/examples/VFS/skel_opaque.c
===================================================================
--- branches/samba/upstream/examples/VFS/skel_opaque.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/VFS/skel_opaque.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *  
  * This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
  * GNU General Public License for more details.
  *  
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 
@@ -53,7 +54,7 @@
 }
 
 static SMB_BIG_UINT skel_disk_free(vfs_handle_struct *handle,  const char *path,
-	bool small_query, SMB_BIG_UINT *bsize,
+	BOOL small_query, SMB_BIG_UINT *bsize,
 	SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize)
 {
 	return vfswrap_disk_free(NULL,  path, small_query, bsize, 
@@ -70,7 +71,7 @@
 	return vfswrap_set_quota(NULL,  qtype, id, dq);
 }
 
-static int skel_get_shadow_copy_data(vfs_handle_struct *handle, files_struct *fsp, SHADOW_COPY_DATA *shadow_copy_data, bool labels)
+static int skel_get_shadow_copy_data(vfs_handle_struct *handle, files_struct *fsp, SHADOW_COPY_DATA *shadow_copy_data, BOOL labels)
 {
 	return vfswrap_get_shadow_copy_data(NULL, fsp, shadow_copy_data, labels);
 }
@@ -92,7 +93,7 @@
 
 static void skel_seekdir(vfs_handle_struct *handle,  SMB_STRUCT_DIR *dirp, long offset)
 {
-	vfswrap_seekdir(NULL,  dirp, offset);
+	return vfswrap_seekdir(NULL,  dirp, offset);
 }
 
 static long skel_telldir(vfs_handle_struct *handle,  SMB_STRUCT_DIR *dirp)
@@ -102,7 +103,7 @@
 
 static void skel_rewinddir(vfs_handle_struct *handle,  SMB_STRUCT_DIR *dirp)
 {
-	vfswrap_rewinddir(NULL,  dirp);
+	return vfswrap_rewinddir(NULL,  dirp);
 }
 
 static int skel_mkdir(vfs_handle_struct *handle,  const char *path, mode_t mode)
@@ -125,55 +126,44 @@
 	return vfswrap_open(NULL,  fname, flags, mode);
 }
 
-static int skel_close(vfs_handle_struct *handle, files_struct *fsp)
+static int skel_close(vfs_handle_struct *handle, files_struct *fsp, int fd)
 {
-	return vfswrap_close(NULL, fsp);
+	return vfswrap_close(NULL, fsp, fd);
 }
 
-static ssize_t skel_read(vfs_handle_struct *handle, files_struct *fsp, void *data, size_t n)
+static ssize_t skel_read(vfs_handle_struct *handle, files_struct *fsp, int fd, void *data, size_t n)
 {
-	return vfswrap_read(NULL, fsp, data, n);
+	return vfswrap_read(NULL, fsp, fd, data, n);
 }
 
-static ssize_t skel_pread(vfs_handle_struct *handle, struct files_struct *fsp, void *data, size_t n, SMB_OFF_T offset)
+static ssize_t skel_pread(vfs_handle_struct *handle, struct files_struct *fsp, int fd, void *data, size_t n, SMB_OFF_T offset)
 {
-	return vfswrap_pread(NULL, fsp, data, n, offset);
+	return vfswrap_pread(NULL, fsp, fd, data, n, offset);
 }
 
-static ssize_t skel_write(vfs_handle_struct *handle, files_struct *fsp, const void *data, size_t n)
+static ssize_t skel_write(vfs_handle_struct *handle, files_struct *fsp, int fd, const void *data, size_t n)
 {
-	return vfswrap_write(NULL, fsp, data, n);
+	return vfswrap_write(NULL, fsp, fd, data, n);
 }
 
-ssize_t skel_pwrite(vfs_handle_struct *handle, struct files_struct *fsp, const void *data, size_t n, SMB_OFF_T offset)
+ssize_t skel_pwrite(vfs_handle_struct *handle, struct files_struct *fsp, int fd, const void *data, size_t n, SMB_OFF_T offset)
 {
-	return vfswrap_pwrite(NULL, fsp, data, n, offset);
+	return vfswrap_pwrite(NULL, fsp, fd, data, n, offset);
 }
 
-static SMB_OFF_T skel_lseek(vfs_handle_struct *handle, files_struct *fsp, SMB_OFF_T offset, int whence)
+static SMB_OFF_T skel_lseek(vfs_handle_struct *handle, files_struct *fsp, int filedes, SMB_OFF_T offset, int whence)
 {
-	return vfswrap_lseek(NULL, fsp, offset, whence);
+	return vfswrap_lseek(NULL, fsp, filedes, offset, whence);
 }
 
-static ssize_t skel_sendfile(vfs_handle_struct *handle, int tofd, files_struct *fromfsp, const DATA_BLOB *hdr,
-		                        SMB_OFF_T offset, size_t n)
-{
-	return vfswrap_sendfile(NULL, tofd, fromfsp, hdr, offset, n);
-}
-
-static ssize_t skel_recvfile(vfs_handle_struct *handle, int fromfd, files_struct *tofsp, SMB_OFF_T offset, size_t n)
-{
-	return vfswrap_recvfile(NULL, fromfd, tofsp, offset, n);
-}
-
 static int skel_rename(vfs_handle_struct *handle,  const char *oldname, const char *newname)
 {
 	return vfswrap_rename(NULL,  oldname, newname);
 }
 
-static int skel_fsync(vfs_handle_struct *handle, files_struct *fsp)
+static int skel_fsync(vfs_handle_struct *handle, files_struct *fsp, int fd)
 {
-	return vfswrap_fsync(NULL, fsp);
+	return vfswrap_fsync(NULL, fsp, fd);
 }
 
 static int skel_stat(vfs_handle_struct *handle,  const char *fname, SMB_STRUCT_STAT *sbuf)
@@ -181,9 +171,9 @@
 	return vfswrap_stat(NULL,  fname, sbuf);
 }
 
-static int skel_fstat(vfs_handle_struct *handle, files_struct *fsp, SMB_STRUCT_STAT *sbuf)
+static int skel_fstat(vfs_handle_struct *handle, files_struct *fsp, int fd, SMB_STRUCT_STAT *sbuf)
 {
-	return vfswrap_fstat(NULL, fsp, sbuf);
+	return vfswrap_fstat(NULL, fsp, fd, sbuf);
 }
 
 static int skel_lstat(vfs_handle_struct *handle,  const char *path, SMB_STRUCT_STAT *sbuf)
@@ -201,9 +191,9 @@
 	return vfswrap_chmod(NULL,  path, mode);
 }
 
-static int skel_fchmod(vfs_handle_struct *handle, files_struct *fsp, mode_t mode)
+static int skel_fchmod(vfs_handle_struct *handle, files_struct *fsp, int fd, mode_t mode)
 {
-	return vfswrap_fchmod(NULL, fsp, mode);
+	return vfswrap_fchmod(NULL, fsp, fd, mode);
 }
 
 static int skel_chown(vfs_handle_struct *handle,  const char *path, uid_t uid, gid_t gid)
@@ -211,16 +201,11 @@
 	return vfswrap_chown(NULL,  path, uid, gid);
 }
 
-static int skel_fchown(vfs_handle_struct *handle, files_struct *fsp, uid_t uid, gid_t gid)
+static int skel_fchown(vfs_handle_struct *handle, files_struct *fsp, int fd, uid_t uid, gid_t gid)
 {
-	return vfswrap_fchown(NULL, fsp, uid, gid);
+	return vfswrap_fchown(NULL, fsp, fd, uid, gid);
 }
 
-static int skel_lchown(vfs_handle_struct *handle,  const char *path, uid_t uid, gid_t gid)
-{
-	return vfswrap_lchown(NULL,  path, uid, gid);
-}
-
 static int skel_chdir(vfs_handle_struct *handle,  const char *path)
 {
 	return vfswrap_chdir(NULL,  path);
@@ -236,19 +221,19 @@
 	return vfswrap_ntimes(NULL,  path, ts);
 }
 
-static int skel_ftruncate(vfs_handle_struct *handle, files_struct *fsp, SMB_OFF_T offset)
+static int skel_ftruncate(vfs_handle_struct *handle, files_struct *fsp, int fd, SMB_OFF_T offset)
 {
-	return vfswrap_ftruncate(NULL, fsp, offset);
+	return vfswrap_ftruncate(NULL, fsp, fd, offset);
 }
 
-static bool skel_lock(vfs_handle_struct *handle, files_struct *fsp, int op, SMB_OFF_T offset, SMB_OFF_T count, int type)
+static BOOL skel_lock(vfs_handle_struct *handle, files_struct *fsp, int fd, int op, SMB_OFF_T offset, SMB_OFF_T count, int type)
 {
-	return vfswrap_lock(NULL, fsp, op, offset, count, type);
+	return vfswrap_lock(NULL, fsp, fd, op, offset, count, type);
 }
 
-static bool skel_getlock(vfs_handle_struct *handle, files_struct *fsp, SMB_OFF_T *poffset, SMB_OFF_T *pcount, int *ptype, pid_t *ppid)
+static BOOL skel_getlock(vfs_handle_struct *handle, files_struct *fsp, int fd, SMB_OFF_T *poffset, SMB_OFF_T *pcount, int *ptype, pid_t *ppid)
 {
-	return vfswrap_getlock(NULL, fsp, poffset, pcount, ptype, ppid);
+	return vfswrap_getlock(NULL, fsp, fd, poffset, pcount, ptype, ppid);
 }
 
 static int skel_symlink(vfs_handle_struct *handle,  const char *oldpath, const char *newpath)
@@ -291,17 +276,8 @@
 	return -1;
 }
 
-static struct file_id skel_file_id_create(vfs_handle_struct *handle,
-					  SMB_DEV_T dev, SMB_INO_T inode)
-{
-	struct file_id id_zero;
-	ZERO_STRUCT(id_zero);
-	errno = ENOSYS;
-	return id_zero;
-}
-
 static size_t skel_fget_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
-	uint32 security_info, SEC_DESC **ppdesc)
+	int fd, uint32 security_info, SEC_DESC **ppdesc)
 {
 	errno = ENOSYS;
 	return 0;
@@ -314,18 +290,18 @@
 	return 0;
 }
 
-static NTSTATUS skel_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
-	uint32 security_info_sent, SEC_DESC *psd)
+static BOOL skel_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp, int
+	fd, uint32 security_info_sent, SEC_DESC *psd)
 {
 	errno = ENOSYS;
-	return NT_STATUS_NOT_IMPLEMENTED;
+	return False;
 }
 
-static NTSTATUS skel_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp, const
+static BOOL skel_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp, const
 	char *name, uint32 security_info_sent, SEC_DESC *psd)
 {
 	errno = ENOSYS;
-	return NT_STATUS_NOT_IMPLEMENTED;
+	return False;
 }
 
 static int skel_chmod_acl(vfs_handle_struct *handle,  const char *name, mode_t mode)
@@ -334,7 +310,7 @@
 	return -1;
 }
 
-static int skel_fchmod_acl(vfs_handle_struct *handle, files_struct *fsp, mode_t mode)
+static int skel_fchmod_acl(vfs_handle_struct *handle, files_struct *fsp, int fd, mode_t mode)
 {
 	errno = ENOSYS;
 	return -1;
@@ -370,7 +346,7 @@
 	return NULL;
 }
 
-static SMB_ACL_T skel_sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp)
+static SMB_ACL_T skel_sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp, int fd)
 {
 	errno = ENOSYS;
 	return NULL;
@@ -436,7 +412,7 @@
 	return -1;
 }
 
-static int skel_sys_acl_set_fd(vfs_handle_struct *handle, files_struct *fsp, SMB_ACL_T theacl)
+static int skel_sys_acl_set_fd(vfs_handle_struct *handle, files_struct *fsp, int fd, SMB_ACL_T theacl)
 {
 	errno = ENOSYS;
 	return -1;
@@ -485,7 +461,7 @@
 	return -1;
 }
 
-static ssize_t skel_fgetxattr(vfs_handle_struct *handle, struct files_struct *fsp, const char *name, void *value, size_t size)
+static ssize_t skel_fgetxattr(vfs_handle_struct *handle, struct files_struct *fsp,int fd, const char *name, void *value, size_t size)
 {
 	errno = ENOSYS;
 	return -1;
@@ -503,7 +479,7 @@
 	return -1;
 }
 
-static ssize_t skel_flistxattr(vfs_handle_struct *handle, struct files_struct *fsp, char *list, size_t size)
+static ssize_t skel_flistxattr(vfs_handle_struct *handle, struct files_struct *fsp,int fd, char *list, size_t size)
 {
 	errno = ENOSYS;
 	return -1;
@@ -521,7 +497,7 @@
 	return -1;
 }
 
-static int skel_fremovexattr(vfs_handle_struct *handle, struct files_struct *fsp, const char *name)
+static int skel_fremovexattr(vfs_handle_struct *handle, struct files_struct *fsp,int fd, const char *name)
 {
 	errno = ENOSYS;
 	return -1;
@@ -539,7 +515,7 @@
 	return -1;
 }
 
-static int skel_fsetxattr(vfs_handle_struct *handle, struct files_struct *fsp, const char *name, const void *value, size_t size, int flags)
+static int skel_fsetxattr(vfs_handle_struct *handle, struct files_struct *fsp,int fd, const char *name, const void *value, size_t size, int flags)
 {
 	errno = ENOSYS;
 	return -1;
@@ -560,9 +536,9 @@
 	return vfswrap_aio_return(NULL, fsp, aiocb);
 }
 
-static int skel_aio_cancel(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb)
+static int skel_aio_cancel(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, SMB_STRUCT_AIOCB *aiocb)
 {
-	return vfswrap_aio_cancel(NULL, fsp, aiocb);
+	return vfswrap_aio_cancel(NULL, fsp, fd, aiocb);
 }
 
 static int skel_aio_error(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb)
@@ -580,21 +556,6 @@
 	return vfswrap_aio_suspend(NULL, fsp, aiocb, n, ts);
 }
 
-static bool skel_aio_force(struct vfs_handle_struct *handle, struct files_struct *fsp)
-{
-	return vfswrap_aio_force(NULL, fsp);
-}
-
-static bool skel_is_offline(struct vfs_handle_struct *handle, const char *path, SMB_STRUCT_STAT *sbuf)
-{
-	return vfswrap_is_offline(NULL, path, sbuf);
-}
-
-static int skel_set_offline(struct vfs_handle_struct *handle, const char *path)
-{
-	return vfswrap_set_offline(NULL, path);
-}
-
 /* VFS operations structure */
 
 static vfs_op_tuple skel_op_tuples[] = {
@@ -629,8 +590,6 @@
 	{SMB_VFS_OP(skel_write),			SMB_VFS_OP_WRITE,		SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(skel_pwrite),			SMB_VFS_OP_PWRITE,		SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(skel_lseek),			SMB_VFS_OP_LSEEK,		SMB_VFS_LAYER_OPAQUE},
-	{SMB_VFS_OP(skel_sendfile),			SMB_VFS_OP_SENDFILE,		SMB_VFS_LAYER_OPAQUE},
-	{SMB_VFS_OP(skel_recvfile),			SMB_VFS_OP_RECVFILE,		SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(skel_rename),			SMB_VFS_OP_RENAME,		SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(skel_fsync),			SMB_VFS_OP_FSYNC,		SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(skel_stat),				SMB_VFS_OP_STAT,		SMB_VFS_LAYER_OPAQUE},
@@ -641,7 +600,6 @@
 	{SMB_VFS_OP(skel_fchmod),			SMB_VFS_OP_FCHMOD,		SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(skel_chown),			SMB_VFS_OP_CHOWN,		SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(skel_fchown),			SMB_VFS_OP_FCHOWN,		SMB_VFS_LAYER_OPAQUE},
-	{SMB_VFS_OP(skel_lchown),			SMB_VFS_OP_LCHOWN,		SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(skel_chdir),			SMB_VFS_OP_CHDIR,		SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(skel_getwd),			SMB_VFS_OP_GETWD,		SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(skel_ntimes),			SMB_VFS_OP_NTIMES,		SMB_VFS_LAYER_OPAQUE},
@@ -655,8 +613,9 @@
 	{SMB_VFS_OP(skel_realpath),			SMB_VFS_OP_REALPATH,		SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(skel_notify_watch),			SMB_VFS_OP_NOTIFY_WATCH,	SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(skel_chflags),			SMB_VFS_OP_CHFLAGS,		SMB_VFS_LAYER_OPAQUE},
-	{SMB_VFS_OP(skel_file_id_create),		SMB_VFS_OP_FILE_ID_CREATE,	SMB_VFS_LAYER_OPAQUE},
 
+
+
 	/* NT File ACL operations */
 
 	{SMB_VFS_OP(skel_fget_nt_acl),			SMB_VFS_OP_FGET_NT_ACL,		SMB_VFS_LAYER_OPAQUE},
@@ -691,7 +650,7 @@
 	{SMB_VFS_OP(skel_sys_acl_free_text),		SMB_VFS_OP_SYS_ACL_FREE_TEXT,		SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(skel_sys_acl_free_acl),		SMB_VFS_OP_SYS_ACL_FREE_ACL,		SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(skel_sys_acl_free_qualifier),	SMB_VFS_OP_SYS_ACL_FREE_QUALIFIER,	SMB_VFS_LAYER_OPAQUE},
-
+	
 	/* EA operations. */
 	{SMB_VFS_OP(skel_getxattr),			SMB_VFS_OP_GETXATTR,			SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(skel_lgetxattr),			SMB_VFS_OP_LGETXATTR,			SMB_VFS_LAYER_OPAQUE},
@@ -714,12 +673,7 @@
 	{SMB_VFS_OP(skel_aio_error),			SMB_VFS_OP_AIO_ERROR,			SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(skel_aio_fsync),			SMB_VFS_OP_AIO_FSYNC,			SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(skel_aio_suspend),			SMB_VFS_OP_AIO_SUSPEND,			SMB_VFS_LAYER_OPAQUE},
-	{SMB_VFS_OP(skel_aio_force),			SMB_VFS_OP_AIO_FORCE,			SMB_VFS_LAYER_OPAQUE},
 
-        /* offline operations */
-	{SMB_VFS_OP(skel_is_offline),		        SMB_VFS_OP_IS_OFFLINE,			SMB_VFS_LAYER_OPAQUE},
-	{SMB_VFS_OP(skel_set_offline),			SMB_VFS_OP_SET_OFFLINE,			SMB_VFS_LAYER_OPAQUE},
-
 	{NULL,						SMB_VFS_OP_NOOP,			SMB_VFS_LAYER_NOOP}
 };
 

Modified: branches/samba/upstream/examples/VFS/skel_transparent.c
===================================================================
--- branches/samba/upstream/examples/VFS/skel_transparent.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/VFS/skel_transparent.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *  
  * This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
  * GNU General Public License for more details.
  *  
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 
@@ -47,7 +48,7 @@
 }
 
 static SMB_BIG_UINT skel_disk_free(vfs_handle_struct *handle,  const char *path,
-	bool small_query, SMB_BIG_UINT *bsize,
+	BOOL small_query, SMB_BIG_UINT *bsize,
 	SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize)
 {
 	return SMB_VFS_NEXT_DISK_FREE(handle, path, small_query, bsize, 
@@ -64,7 +65,7 @@
 	return SMB_VFS_NEXT_SET_QUOTA(handle, qtype, id, dq);
 }
 
-static int skel_get_shadow_copy_data(vfs_handle_struct *handle, files_struct *fsp, SHADOW_COPY_DATA *shadow_copy_data, bool labels)
+static int skel_get_shadow_copy_data(vfs_handle_struct *handle, files_struct *fsp, SHADOW_COPY_DATA *shadow_copy_data, BOOL labels)
 {
 	return SMB_VFS_NEXT_GET_SHADOW_COPY_DATA(handle, fsp, shadow_copy_data, labels);
 }
@@ -119,54 +120,44 @@
 	return SMB_VFS_NEXT_OPEN(handle, fname, fsp, flags, mode);
 }
 
-static int skel_close(vfs_handle_struct *handle, files_struct *fsp)
+static int skel_close(vfs_handle_struct *handle, files_struct *fsp, int fd)
 {
-	return SMB_VFS_NEXT_CLOSE(handle, fsp);
+	return SMB_VFS_NEXT_CLOSE(handle, fsp, fd);
 }
 
-static ssize_t skel_read(vfs_handle_struct *handle, files_struct *fsp, void *data, size_t n)
+static ssize_t skel_read(vfs_handle_struct *handle, files_struct *fsp, int fd, void *data, size_t n)
 {
-	return SMB_VFS_NEXT_READ(handle, fsp, data, n);
+	return SMB_VFS_NEXT_READ(handle, fsp, fd, data, n);
 }
 
-static ssize_t skel_pread(vfs_handle_struct *handle, files_struct *fsp, void *data, size_t n, SMB_OFF_T offset)
+static ssize_t skel_pread(vfs_handle_struct *handle, files_struct *fsp, int fd, void *data, size_t n, SMB_OFF_T offset)
 {
-	return SMB_VFS_NEXT_PREAD(handle, fsp, data, n, offset);
+	return SMB_VFS_NEXT_PREAD(handle, fsp, fd, data, n, offset);
 }
 
-static ssize_t skel_write(vfs_handle_struct *handle, files_struct *fsp, const void *data, size_t n)
+static ssize_t skel_write(vfs_handle_struct *handle, files_struct *fsp, int fd, const void *data, size_t n)
 {
-	return SMB_VFS_NEXT_WRITE(handle, fsp, data, n);
+	return SMB_VFS_NEXT_WRITE(handle, fsp, fd, data, n);
 }
 
-static ssize_t skel_pwrite(vfs_handle_struct *handle, files_struct *fsp, const void *data, size_t n, SMB_OFF_T offset)
+static ssize_t skel_pwrite(vfs_handle_struct *handle, files_struct *fsp, int fd, const void *data, size_t n, SMB_OFF_T offset)
 {
-	return SMB_VFS_NEXT_PWRITE(handle, fsp, data, n, offset);
+	return SMB_VFS_NEXT_PWRITE(handle, fsp, fd, data, n, offset);
 }
 
-static SMB_OFF_T skel_lseek(vfs_handle_struct *handle, files_struct *fsp, SMB_OFF_T offset, int whence)
+static SMB_OFF_T skel_lseek(vfs_handle_struct *handle, files_struct *fsp, int filedes, SMB_OFF_T offset, int whence)
 {
-	return SMB_VFS_NEXT_LSEEK(handle, fsp, offset, whence);
+	return SMB_VFS_NEXT_LSEEK(handle, fsp, filedes, offset, whence);
 }
 
-static ssize_t skel_sendfile(vfs_handle_struct *handle, int tofd, files_struct *fromfsp, const DATA_BLOB *hdr, SMB_OFF_T offset, size_t n)
-{
-	return SMB_VFS_NEXT_SENDFILE(handle, tofd, fromfsp, hdr, offset, n);
-}
-
-static ssize_t skel_recvfile(vfs_handle_struct *handle, int fromfd, files_struct *tofsp, SMB_OFF_T offset, size_t n)
-{
-	return SMB_VFS_NEXT_RECVFILE(handle, fromfd, tofsp, offset, n);
-}
-
 static int skel_rename(vfs_handle_struct *handle,  const char *oldname, const char *newname)
 {
 	return SMB_VFS_NEXT_RENAME(handle, oldname, newname);
 }
 
-static int skel_fsync(vfs_handle_struct *handle, files_struct *fsp)
+static int skel_fsync(vfs_handle_struct *handle, files_struct *fsp, int fd)
 {
-	return SMB_VFS_NEXT_FSYNC(handle, fsp);
+	return SMB_VFS_NEXT_FSYNC(handle, fsp, fd);
 }
 
 static int skel_stat(vfs_handle_struct *handle,  const char *fname, SMB_STRUCT_STAT *sbuf)
@@ -174,9 +165,9 @@
 	return SMB_VFS_NEXT_STAT(handle, fname, sbuf);
 }
 
-static int skel_fstat(vfs_handle_struct *handle, files_struct *fsp, SMB_STRUCT_STAT *sbuf)
+static int skel_fstat(vfs_handle_struct *handle, files_struct *fsp, int fd, SMB_STRUCT_STAT *sbuf)
 {
-	return SMB_VFS_NEXT_FSTAT(handle, fsp, sbuf);
+	return SMB_VFS_NEXT_FSTAT(handle, fsp, fd, sbuf);
 }
 
 static int skel_lstat(vfs_handle_struct *handle,  const char *path, SMB_STRUCT_STAT *sbuf)
@@ -194,9 +185,9 @@
 	return SMB_VFS_NEXT_CHMOD(handle, path, mode);
 }
 
-static int skel_fchmod(vfs_handle_struct *handle, files_struct *fsp, mode_t mode)
+static int skel_fchmod(vfs_handle_struct *handle, files_struct *fsp, int fd, mode_t mode)
 {
-	return SMB_VFS_NEXT_FCHMOD(handle, fsp, mode);
+	return SMB_VFS_NEXT_FCHMOD(handle, fsp, fd, mode);
 }
 
 static int skel_chown(vfs_handle_struct *handle,  const char *path, uid_t uid, gid_t gid)
@@ -204,16 +195,11 @@
 	return SMB_VFS_NEXT_CHOWN(handle, path, uid, gid);
 }
 
-static int skel_fchown(vfs_handle_struct *handle, files_struct *fsp, uid_t uid, gid_t gid)
+static int skel_fchown(vfs_handle_struct *handle, files_struct *fsp, int fd, uid_t uid, gid_t gid)
 {
-	return SMB_VFS_NEXT_FCHOWN(handle, fsp, uid, gid);
+	return SMB_VFS_NEXT_FCHOWN(handle, fsp, fd, uid, gid);
 }
 
-static int skel_lchown(vfs_handle_struct *handle,  const char *path, uid_t uid, gid_t gid)
-{
-	return SMB_VFS_NEXT_LCHOWN(handle, path, uid, gid);
-}
-
 static int skel_chdir(vfs_handle_struct *handle,  const char *path)
 {
 	return SMB_VFS_NEXT_CHDIR(handle, path);
@@ -229,19 +215,19 @@
 	return SMB_VFS_NEXT_NTIMES(handle, path, ts);
 }
 
-static int skel_ftruncate(vfs_handle_struct *handle, files_struct *fsp, SMB_OFF_T offset)
+static int skel_ftruncate(vfs_handle_struct *handle, files_struct *fsp, int fd, SMB_OFF_T offset)
 {
-	return SMB_VFS_NEXT_FTRUNCATE(handle, fsp, offset);
+	return SMB_VFS_NEXT_FTRUNCATE(handle, fsp, fd, offset);
 }
 
-static bool skel_lock(vfs_handle_struct *handle, files_struct *fsp, int op, SMB_OFF_T offset, SMB_OFF_T count, int type)
+static BOOL skel_lock(vfs_handle_struct *handle, files_struct *fsp, int fd, int op, SMB_OFF_T offset, SMB_OFF_T count, int type)
 {
-	return SMB_VFS_NEXT_LOCK(handle, fsp, op, offset, count, type);
+	return SMB_VFS_NEXT_LOCK(handle, fsp, fd, op, offset, count, type);
 }
 
-static bool skel_getlock(vfs_handle_struct *handle, files_struct *fsp, SMB_OFF_T *poffset, SMB_OFF_T *pcount, int *ptype, pid_t *ppid)
+static BOOL skel_getlock(vfs_handle_struct *handle, files_struct *fsp, int fd, SMB_OFF_T *poffset, SMB_OFF_T *pcount, int *ptype, pid_t *ppid)
 {
-	return SMB_VFS_NEXT_GETLOCK(handle, fsp, poffset, pcount, ptype, ppid);
+	return SMB_VFS_NEXT_GETLOCK(handle, fsp, fd, poffset, pcount, ptype, ppid);
 }
 
 static int skel_symlink(vfs_handle_struct *handle,  const char *oldpath, const char *newpath)
@@ -283,31 +269,25 @@
 	return SMB_VFS_NEXT_CHFLAGS(handle, path, flags);
 }
 
-static struct file_id skel_file_id_create(vfs_handle_struct *handle,
-					  SMB_DEV_T dev, SMB_INO_T inode)
+static size_t skel_fget_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
+	int fd, uint32 security_info, SEC_DESC **ppdesc)
 {
-	return SMB_VFS_NEXT_FILE_ID_CREATE(handle, dev, inode);
+	return SMB_VFS_NEXT_FGET_NT_ACL(handle, fsp, fd, security_info, ppdesc);
 }
 
-static NTSTATUS skel_fget_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
-	uint32 security_info, SEC_DESC **ppdesc)
-{
-	return SMB_VFS_NEXT_FGET_NT_ACL(handle, fsp, security_info, ppdesc);
-}
-
-static NTSTATUS skel_get_nt_acl(vfs_handle_struct *handle,
+static size_t skel_get_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
 	const char *name, uint32 security_info, SEC_DESC **ppdesc)
 {
-	return SMB_VFS_NEXT_GET_NT_ACL(handle, name, security_info, ppdesc);
+	return SMB_VFS_NEXT_GET_NT_ACL(handle, fsp, name, security_info, ppdesc);
 }
 
-static NTSTATUS skel_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
-	uint32 security_info_sent, SEC_DESC *psd)
+static BOOL skel_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
+	int fd, uint32 security_info_sent, SEC_DESC *psd)
 {
-	return SMB_VFS_NEXT_FSET_NT_ACL(handle, fsp, security_info_sent, psd);
+	return SMB_VFS_NEXT_FSET_NT_ACL(handle, fsp, fd, security_info_sent, psd);
 }
 
-static NTSTATUS skel_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
+static BOOL skel_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
 	const char *name, uint32 security_info_sent, SEC_DESC *psd)
 {
 	return SMB_VFS_NEXT_SET_NT_ACL(handle, fsp, name, security_info_sent, psd);
@@ -323,14 +303,14 @@
 	return SMB_VFS_NEXT_CHMOD_ACL(handle, name, mode);
 }
 
-static int skel_fchmod_acl(vfs_handle_struct *handle, files_struct *fsp, mode_t mode)
+static int skel_fchmod_acl(vfs_handle_struct *handle, files_struct *fsp, int fd, mode_t mode)
 {
 	/* If the underlying VFS doesn't have ACL support... */
 	if (!handle->vfs_next.ops.fchmod_acl) {
 		errno = ENOSYS;
 		return -1;
 	}
-	return SMB_VFS_NEXT_FCHMOD_ACL(handle, fsp, mode);
+	return SMB_VFS_NEXT_FCHMOD_ACL(handle, fsp, fd, mode);
 }
 
 static int skel_sys_acl_get_entry(vfs_handle_struct *handle,  SMB_ACL_T theacl, int entry_id, SMB_ACL_ENTRY_T *entry_p)
@@ -358,9 +338,9 @@
 	return SMB_VFS_NEXT_SYS_ACL_GET_FILE(handle, path_p, type);
 }
 
-static SMB_ACL_T skel_sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp)
+static SMB_ACL_T skel_sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp, int fd)
 {
-	return SMB_VFS_NEXT_SYS_ACL_GET_FD(handle, fsp);
+	return SMB_VFS_NEXT_SYS_ACL_GET_FD(handle, fsp, fd);
 }
 
 static int skel_sys_acl_clear_perms(vfs_handle_struct *handle,  SMB_ACL_PERMSET_T permset)
@@ -413,9 +393,9 @@
 	return SMB_VFS_NEXT_SYS_ACL_SET_FILE(handle, name, acltype, theacl);
 }
 
-static int skel_sys_acl_set_fd(vfs_handle_struct *handle, files_struct *fsp, SMB_ACL_T theacl)
+static int skel_sys_acl_set_fd(vfs_handle_struct *handle, files_struct *fsp, int fd, SMB_ACL_T theacl)
 {
-	return SMB_VFS_NEXT_SYS_ACL_SET_FD(handle, fsp, theacl);
+	return SMB_VFS_NEXT_SYS_ACL_SET_FD(handle, fsp, fd, theacl);
 }
 
 static int skel_sys_acl_delete_def_file(vfs_handle_struct *handle,  const char *path)
@@ -454,9 +434,9 @@
         return SMB_VFS_NEXT_LGETXATTR(handle, path, name, value, size);
 }
 
-static ssize_t skel_fgetxattr(vfs_handle_struct *handle, struct files_struct *fsp, const char *name, void *value, size_t size)
+static ssize_t skel_fgetxattr(vfs_handle_struct *handle, struct files_struct *fsp,int fd, const char *name, void *value, size_t size)
 {
-        return SMB_VFS_NEXT_FGETXATTR(handle, fsp, name, value, size);
+        return SMB_VFS_NEXT_FGETXATTR(handle, fsp, fd, name, value, size);
 }
 
 static ssize_t skel_listxattr(vfs_handle_struct *handle, const char *path, char *list, size_t size)
@@ -469,9 +449,9 @@
         return SMB_VFS_NEXT_LLISTXATTR(handle, path, list, size);
 }
 
-static ssize_t skel_flistxattr(vfs_handle_struct *handle, struct files_struct *fsp, char *list, size_t size)
+static ssize_t skel_flistxattr(vfs_handle_struct *handle, struct files_struct *fsp,int fd, char *list, size_t size)
 {
-        return SMB_VFS_NEXT_FLISTXATTR(handle, fsp, list, size);
+        return SMB_VFS_NEXT_FLISTXATTR(handle, fsp, fd, list, size);
 }
 
 static int skel_removexattr(vfs_handle_struct *handle, const char *path, const char *name)
@@ -484,9 +464,9 @@
         return SMB_VFS_NEXT_LREMOVEXATTR(handle, path, name);
 }
 
-static int skel_fremovexattr(vfs_handle_struct *handle, struct files_struct *fsp, const char *name)
+static int skel_fremovexattr(vfs_handle_struct *handle, struct files_struct *fsp,int fd, const char *name)
 {
-        return SMB_VFS_NEXT_FREMOVEXATTR(handle, fsp, name);
+        return SMB_VFS_NEXT_FREMOVEXATTR(handle, fsp, fd, name);
 }
 
 static int skel_setxattr(vfs_handle_struct *handle, const char *path, const char *name, const void *value, size_t size, int flags)
@@ -499,9 +479,9 @@
         return SMB_VFS_NEXT_LSETXATTR(handle, path, name, value, size, flags);
 }
 
-static int skel_fsetxattr(vfs_handle_struct *handle, struct files_struct *fsp, const char *name, const void *value, size_t size, int flags)
+static int skel_fsetxattr(vfs_handle_struct *handle, struct files_struct *fsp,int fd, const char *name, const void *value, size_t size, int flags)
 {
-        return SMB_VFS_NEXT_FSETXATTR(handle, fsp, name, value, size, flags);
+        return SMB_VFS_NEXT_FSETXATTR(handle, fsp, fd, name, value, size, flags);
 }
 
 static int skel_aio_read(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb)
@@ -519,9 +499,9 @@
 	return SMB_VFS_NEXT_AIO_RETURN(handle, fsp, aiocb);
 }
 
-static int skel_aio_cancel(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb)
+static int skel_aio_cancel(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, SMB_STRUCT_AIOCB *aiocb)
 {
-	return SMB_VFS_NEXT_AIO_CANCEL(handle, fsp, aiocb);
+	return SMB_VFS_NEXT_AIO_CANCEL(handle, fsp, fd, aiocb);
 }
 
 static int skel_aio_error(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb)
@@ -539,26 +519,6 @@
 	return SMB_VFS_NEXT_AIO_SUSPEND(handle, fsp, aiocb, n, ts);
 }
 
-static bool skel_aio_force(struct vfs_handle_struct *handle, struct files_struct *fsp)
-{
-        return SMB_VFS_NEXT_AIO_FORCE(handle, fsp);
-}
-
-static bool skel_is_offline(struct vfs_handle_struct *handle, const char *path, SMB_STRUCT_STAT *sbuf)
-{
-	return SMB_VFS_NEXT_IS_OFFLINE(handle, path, sbuf);
-}
-
-static int skel_set_offline(struct vfs_handle_struct *handle, const char *path)
-{
-	return SMB_VFS_NEXT_SET_OFFLINE(handle, path);
-}
-
-static bool skel_is_remotestorage(struct vfs_handle_struct *handle, const char *path)
-{
-	return SMB_VFS_NEXT_IS_REMOTESTORAGE(handle, path);
-}
-
 /* VFS operations structure */
 
 static vfs_op_tuple skel_op_tuples[] = {
@@ -591,8 +551,6 @@
 	{SMB_VFS_OP(skel_read),				SMB_VFS_OP_READ,		SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(skel_write),			SMB_VFS_OP_WRITE,		SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(skel_lseek),			SMB_VFS_OP_LSEEK,		SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(skel_sendfile),			SMB_VFS_OP_SENDFILE,		SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(skel_recvfile),			SMB_VFS_OP_RECVFILE,		SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(skel_rename),			SMB_VFS_OP_RENAME,		SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(skel_fsync),			SMB_VFS_OP_FSYNC,		SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(skel_stat),				SMB_VFS_OP_STAT,		SMB_VFS_LAYER_TRANSPARENT},
@@ -603,7 +561,6 @@
 	{SMB_VFS_OP(skel_fchmod),			SMB_VFS_OP_FCHMOD,		SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(skel_chown),			SMB_VFS_OP_CHOWN,		SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(skel_fchown),			SMB_VFS_OP_FCHOWN,		SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(skel_lchown),			SMB_VFS_OP_LCHOWN,		SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(skel_chdir),			SMB_VFS_OP_CHDIR,		SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(skel_getwd),			SMB_VFS_OP_GETWD,		SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(skel_ntimes),			SMB_VFS_OP_NTIMES,		SMB_VFS_LAYER_TRANSPARENT},
@@ -617,7 +574,6 @@
 	{SMB_VFS_OP(skel_realpath),			SMB_VFS_OP_REALPATH,		SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(skel_notify_watch),			SMB_VFS_OP_NOTIFY_WATCH,	SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(skel_chflags),			SMB_VFS_OP_CHFLAGS,		SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(skel_file_id_create),		SMB_VFS_OP_FILE_ID_CREATE,	SMB_VFS_LAYER_TRANSPARENT},
 
 	/* NT File ACL operations */
 
@@ -653,7 +609,7 @@
 	{SMB_VFS_OP(skel_sys_acl_free_text),		SMB_VFS_OP_SYS_ACL_FREE_TEXT,		SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(skel_sys_acl_free_acl),		SMB_VFS_OP_SYS_ACL_FREE_ACL,		SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(skel_sys_acl_free_qualifier),	SMB_VFS_OP_SYS_ACL_FREE_QUALIFIER,	SMB_VFS_LAYER_TRANSPARENT},
-
+	
 	/* EA operations. */
 	{SMB_VFS_OP(skel_getxattr),			SMB_VFS_OP_GETXATTR,			SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(skel_lgetxattr),			SMB_VFS_OP_LGETXATTR,			SMB_VFS_LAYER_TRANSPARENT},
@@ -676,12 +632,7 @@
 	{SMB_VFS_OP(skel_aio_error),			SMB_VFS_OP_AIO_ERROR,			SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(skel_aio_fsync),			SMB_VFS_OP_AIO_FSYNC,			SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(skel_aio_suspend),			SMB_VFS_OP_AIO_SUSPEND,			SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(skel_aio_force),			SMB_VFS_OP_AIO_FORCE,			SMB_VFS_LAYER_TRANSPARENT},
 
-	/* offline operations */
-	{SMB_VFS_OP(skel_is_offline),			SMB_VFS_OP_IS_OFFLINE,			SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(skel_set_offline),			SMB_VFS_OP_SET_OFFLINE,			SMB_VFS_LAYER_TRANSPARENT},
-
 	{NULL,						SMB_VFS_OP_NOOP,			SMB_VFS_LAYER_NOOP}
 };
 

Modified: branches/samba/upstream/examples/auth/auth_skel.c
===================================================================
--- branches/samba/upstream/examples/auth/auth_skel.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/auth/auth_skel.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Copied: branches/samba/upstream/examples/libmsrpc (from rev 1928, branches/samba/upstream/examples/libmsrpc)

Modified: branches/samba/upstream/examples/libsmbclient/Makefile
===================================================================
--- branches/samba/upstream/examples/libsmbclient/Makefile	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/libsmbclient/Makefile	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,34 +1,30 @@
 #
 CC = gcc
 
-SAMBA_INCL  = -I/usr/local/samba/include
+SAMBA_INCL = ../../source/include
 EXTLIB_INCL = -I/usr/include/gtk-1.2 \
 	      -I/usr/include/glib-1.2 \
 	      -I/usr/lib/glib/include
-EXTLIB_INCL = `gtk-config --cflags`
 
+
 DEFS = -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
-CFLAGS = -O0 -g $(SAMBA_INCL) $(EXTLIB_INCL) $(DEFS)
+CFLAGS = -O0 -g -I$(SAMBA_INCL) $(EXTLIB_INCL) $(DEFS)
 
 LDFLAGS = -L/usr/local/samba/lib \
 	  -lldap -lkrb5 -lgssapi_krb5
 #LIBSMBCLIENT = /usr/local/samba/lib/libsmbclient.so
-LIBSMBCLIENT = -lwbclient -lsmbclient -ldl -lresolv
+LIBSMBCLIENT = ../../source/bin/libsmbclient.a -ldl -lresolv
 
 TESTS=	testsmbc \
 	testacl \
 	testacl2 \
-	testacl3 \
 	testbrowse \
 	testbrowse2 \
 	teststat \
 	teststat2 \
-	teststat3 \
-	testtruncate \
 	testchmod \
 	testutime \
-	testread \
-	testwrite
+	testread
 
 #	tree \
 
@@ -50,10 +46,6 @@
 	@echo Linking testacl2
 	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBSMBCLIENT) -lpopt
 
-testacl3: testacl3.o
-	@echo Linking testacl3
-	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBSMBCLIENT) -lpopt
-
 testbrowse: testbrowse.o
 	@echo Linking testbrowse
 	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBSMBCLIENT) -lpopt
@@ -70,14 +62,6 @@
 	@echo Linking teststat2
 	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBSMBCLIENT) -lpopt
 
-teststat3: teststat3.o
-	@echo Linking teststat3
-	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBSMBCLIENT) -lpopt
-
-testtruncate: testtruncate.o
-	@echo Linking testtruncate
-	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBSMBCLIENT) -lpopt
-
 testchmod: testchmod.o
 	@echo Linking testchmod
 	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBSMBCLIENT) -lpopt
@@ -90,10 +74,6 @@
 	@echo Linking testread
 	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBSMBCLIENT) -lpopt
 
-testwrite: testwrite.o
-	@echo Linking testwrite
-	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBSMBCLIENT) -lpopt
-
 smbsh:
 	make -C smbwrapper
 

Modified: branches/samba/upstream/examples/libsmbclient/get_auth_data_fn.h
===================================================================
--- branches/samba/upstream/examples/libsmbclient/get_auth_data_fn.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/libsmbclient/get_auth_data_fn.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,23 +8,7 @@
                  char * pPassword,
                  int maxLenPassword)
 {
-    char            temp[128];
-    char            server[256] = { '\0' };
-    char            share[256] = { '\0' };
-    char            workgroup[256] = { '\0' };
-    char            username[256] = { '\0' };
-    char            password[256] = { '\0' };
-
-    if (strcmp(server, pServer) == 0 &&
-        strcmp(share, pShare) == 0 &&
-        *workgroup != '\0' &&
-        *username != '\0')
-    {
-        strncpy(pWorkgroup, workgroup, maxLenWorkgroup - 1);
-        strncpy(pUsername, username, maxLenUsername - 1);
-        strncpy(pPassword, password, maxLenPassword - 1);
-        return;
-    }
+    char temp[128];
     
     fprintf(stdout, "Workgroup: [%s] ", pWorkgroup);
     fgets(temp, sizeof(temp), stdin);
@@ -64,8 +48,4 @@
     {
         strncpy(pPassword, temp, maxLenPassword - 1);
     }
-
-    strncpy(workgroup, pWorkgroup, sizeof(workgroup) - 1);
-    strncpy(username, pUsername, sizeof(username) - 1);
-    strncpy(password, pPassword, sizeof(password) - 1);
 }

Modified: branches/samba/upstream/examples/libsmbclient/smbwrapper/Makefile
===================================================================
--- branches/samba/upstream/examples/libsmbclient/smbwrapper/Makefile	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/libsmbclient/smbwrapper/Makefile	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-LIBS = -lwbclient -lsmbclient -ldl
+LIBS = -lsmbclient -ldl
 DEFS = -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
 
 CFLAGS = -I$(SAMBA_INCL) $(EXTLIB_INCL)

Modified: branches/samba/upstream/examples/libsmbclient/smbwrapper/select.c
===================================================================
--- branches/samba/upstream/examples/libsmbclient/smbwrapper/select.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/libsmbclient/smbwrapper/select.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /*
@@ -72,12 +73,13 @@
 	int ret;
 	fd_set *readfds2, readfds_buf, *writefds2, writefds_buf, *errorfds2, errorfds_buf;
 	struct timeval tval2, *ptval, end_time, now_time;
+        extern void GetTimeOfDay(struct timeval *tval);
 
 	readfds2 = (readfds ? &readfds_buf : NULL);
 	writefds2 = (writefds ? &writefds_buf : NULL);
 	errorfds2 = (errorfds ? &errorfds_buf : NULL);
         if (tval) {
-                gettimeofday(&end_time, NULL);
+                GetTimeOfDay(&end_time);
                 end_time.tv_sec += tval->tv_sec;
                 end_time.tv_usec += tval->tv_usec;
                 end_time.tv_sec += end_time.tv_usec / 1000000;
@@ -95,7 +97,7 @@
 		if (errorfds)
 			errorfds_buf = *errorfds;
 		if (tval) {
-                        gettimeofday(&now_time, NULL);
+                        GetTimeOfDay(&now_time);
                         tval2.tv_sec = end_time.tv_sec - now_time.tv_sec;
 			tval2.tv_usec = end_time.tv_usec - now_time.tv_usec;
                         if ((signed long) tval2.tv_usec < 0) {

Modified: branches/samba/upstream/examples/libsmbclient/smbwrapper/smbsh.c
===================================================================
--- branches/samba/upstream/examples/libsmbclient/smbwrapper/smbsh.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/libsmbclient/smbwrapper/smbsh.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include <sys/types.h>

Modified: branches/samba/upstream/examples/libsmbclient/smbwrapper/smbw.c
===================================================================
--- branches/samba/upstream/examples/libsmbclient/smbwrapper/smbw.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/libsmbclient/smbwrapper/smbw.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include <stdio.h>
@@ -174,11 +175,11 @@
                 exit(1);
         }
         
-        smbc_setDebug(smbw_ctx, debug_level);
-        smbc_setFunctionAuthData(smbw_ctx, get_auth_data_fn);
-        smbc_setOptionBrowseMaxLmbCount(smbw_ctx, 0);
-        smbc_setOptionUrlEncodeReaddirEntries(smbw_ctx, 1);
-        smbc_setOptionOneSharePerServer(smbw_ctx, 1);
+        smbw_ctx->debug = debug_level;
+        smbw_ctx->callbacks.auth_fn = get_auth_data_fn;
+        smbw_ctx->options.browse_max_lmb_count = 0;
+        smbw_ctx->options.urlencode_readdir_entries = 1;
+        smbw_ctx->options.one_share_per_server = 1;
         
         if (smbc_init_context(smbw_ctx) == NULL) {
                 fprintf(stderr, "Could not initialize context.\n");

Modified: branches/samba/upstream/examples/libsmbclient/smbwrapper/smbw.h
===================================================================
--- branches/samba/upstream/examples/libsmbclient/smbwrapper/smbw.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/libsmbclient/smbwrapper/smbw.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _SMBW_H

Modified: branches/samba/upstream/examples/libsmbclient/smbwrapper/smbw_dir.c
===================================================================
--- branches/samba/upstream/examples/libsmbclient/smbwrapper/smbw_dir.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/libsmbclient/smbwrapper/smbw_dir.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "smbw.h"

Modified: branches/samba/upstream/examples/libsmbclient/smbwrapper/smbw_stat.c
===================================================================
--- branches/samba/upstream/examples/libsmbclient/smbwrapper/smbw_stat.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/libsmbclient/smbwrapper/smbw_stat.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "smbw.h"

Modified: branches/samba/upstream/examples/libsmbclient/smbwrapper/wrapper.c
===================================================================
--- branches/samba/upstream/examples/libsmbclient/smbwrapper/wrapper.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/libsmbclient/smbwrapper/wrapper.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /*
@@ -61,7 +62,6 @@
 #include <dirent.h>
 #include <signal.h>
 #include <stdarg.h>
-#include <string.h>
 #ifdef __USE_GNU
 # define SMBW_USE_GNU
 #endif

Modified: branches/samba/upstream/examples/libsmbclient/smbwrapper/wrapper.h
===================================================================
--- branches/samba/upstream/examples/libsmbclient/smbwrapper/wrapper.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/libsmbclient/smbwrapper/wrapper.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef __WRAPPER_H__

Modified: branches/samba/upstream/examples/libsmbclient/testacl.c
===================================================================
--- branches/samba/upstream/examples/libsmbclient/testacl.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/libsmbclient/testacl.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,6 @@
 
 enum acl_mode
 {
-    SMB_ACL_LIST,
     SMB_ACL_GET,
     SMB_ACL_SET,
     SMB_ACL_DELETE,
@@ -25,7 +24,7 @@
     int debug = 0;
     int numeric = 0;
     int full_time_names = 0;
-    enum acl_mode mode = SMB_ACL_LIST;
+    enum acl_mode mode = SMB_ACL_GET;
     static char *the_acl = NULL;
     int ret;
     char *p;
@@ -143,37 +142,13 @@
 
     if (full_time_names) {
         SMBCCTX *context = smbc_set_context(NULL);
-        smbc_setOptionFullTimeNames(context, 1);
+        smbc_option_set(context, "full_time_names", 1);
     }
     
     /* Perform requested action */
     
     switch(mode)
     {
-    case SMB_ACL_LIST:
-        ret = smbc_listxattr(path, value, sizeof(value)-2);
-        if (ret < 0)
-        {
-            printf("Could not get attribute list for [%s] %d: %s\n",
-                   path, errno, strerror(errno));
-            return 1;
-        }
-
-        /*
-         * The list of attributes has a series of null-terminated strings.
-         * The list of strings terminates with an extra null byte, thus two in
-         * a row.  Ensure that our buffer, which is conceivably shorter than
-         * the list of attributes, actually ends with two null bytes in a row.
-         */
-        value[sizeof(value) - 2] = '\0';
-        value[sizeof(value) - 1] = '\0';
-        printf("Supported attributes:\n");
-        for (p = value; *p; p += strlen(p) + 1)
-        {
-            printf("\t%s\n", p);
-        }
-        break;
-
     case SMB_ACL_GET:
         if (the_acl == NULL)
         {

Modified: branches/samba/upstream/examples/libsmbclient/testacl2.c
===================================================================
--- branches/samba/upstream/examples/libsmbclient/testacl2.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/libsmbclient/testacl2.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -39,7 +39,7 @@
     }
 
     SMBCCTX *context = smbc_set_context(NULL);
-    smbc_setOptionFullTimeNames(context, 1);
+    smbc_option_set(context, "full_time_names", 1);
     
     the_acl = strdup("system.nt_sec_desc.*");
     ret = smbc_getxattr(argv[1], the_acl, value, sizeof(value));

Deleted: branches/samba/upstream/examples/libsmbclient/testacl3.c
===================================================================
--- branches/samba/upstream/examples/libsmbclient/testacl3.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/libsmbclient/testacl3.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,62 +0,0 @@
-#include <sys/types.h>
-#include <stdio.h> 
-#include <unistd.h>
-#include <string.h> 
-#include <time.h> 
-#include <errno.h>
-#include <libsmbclient.h> 
-#include "get_auth_data_fn.h"
-
-
-int main(int argc, char * argv[]) 
-{ 
-    int             i;
-    int             fd;
-    int             ret;
-    int             debug = 0;
-    int             mode = 0666;
-    int             savedErrno;
-    char            value[2048]; 
-    char            path[2048];
-    char *          the_acl;
-    char *          p;
-    time_t          t0;
-    time_t          t1;
-    struct stat     st; 
-    SMBCCTX *       context;
-    
-    smbc_init(get_auth_data_fn, debug); 
-    
-    context = smbc_set_context(NULL);
-    smbc_setOptionFullTimeNames(context, 1);
-    
-    for (;;)
-    {
-        fprintf(stdout, "Path: ");
-        *path = '\0';
-        fgets(path, sizeof(path) - 1, stdin);
-        if (strlen(path) == 0)
-        {
-            return 0;
-        }
-
-        p = path + strlen(path) - 1;
-        if (*p == '\n')
-        {
-            *p = '\0';
-        }
-    
-        the_acl = strdup("system.nt_sec_desc.*+");
-        ret = smbc_getxattr(path, the_acl, value, sizeof(value));
-        if (ret < 0)
-        {
-            printf("Could not get attributes for [%s] %d: %s\n",
-                   path, errno, strerror(errno));
-            return 1;
-        }
-    
-        printf("Attributes for [%s] are:\n%s\n", path, value);
-    }
-
-    return 0; 
-}

Modified: branches/samba/upstream/examples/libsmbclient/testbrowse.c
===================================================================
--- branches/samba/upstream/examples/libsmbclient/testbrowse.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/libsmbclient/testbrowse.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -108,21 +108,24 @@
     }
 
     /* Set mandatory options (is that a contradiction in terms?) */
-    smbc_setDebug(context, debug);
+    context->debug = debug;
     if (context_auth) {
-        smbc_setFunctionAuthDataWithContext(context,
-                                            get_auth_data_with_context_fn);
-        smbc_setOptionUserData(context, "hello world");
+        context->callbacks.auth_fn = NULL;
+        smbc_option_set(context,
+                        "auth_function",
+                        (void *) get_auth_data_with_context_fn);
+        smbc_option_set(context, "user_data", "hello world");
     } else {
-        smbc_setFunctionAuthData(context, get_auth_data_fn);
+        context->callbacks.auth_fn =
+            (no_auth ? no_auth_data_fn : get_auth_data_fn);
     }
 
     /* If we've been asked to log to stderr instead of stdout, ... */
     if (debug_stderr) {
         /* ... then set the option to do so */
-        smbc_setOptionDebugToStderr(context, 1);
+        smbc_option_set(context, "debug_to_stderr", 1);
     }
-
+	
     /* Initialize the context using the previously specified options */
     if (!smbc_init_context(context)) {
         smbc_free_context(context, 0);
@@ -196,7 +199,7 @@
 {
     printf("Authenticating with context 0x%lx", context);
     if (context != NULL) {
-        char *user_data = smbc_getOptionUserData(context);
+        char *user_data = smbc_option_get(context, "user_data");
         printf(" with user data %s", user_data);
     }
     printf("\n");

Modified: branches/samba/upstream/examples/libsmbclient/testbrowse2.c
===================================================================
--- branches/samba/upstream/examples/libsmbclient/testbrowse2.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/libsmbclient/testbrowse2.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -93,8 +93,8 @@
 
     if ((ctx = smbc_new_context()) == NULL) return NULL;
 
-    smbc_setDebug(ctx, debuglevel);
-    smbc_setFunctionAuthData(ctx, smbc_auth_fn);
+    ctx->debug = debuglevel;
+    ctx->callbacks.auth_fn = smbc_auth_fn;
 
     if (smbc_init_context(ctx) == NULL){
 	smbc_free_context(ctx, 1);
@@ -105,7 +105,7 @@
 }
 
 void delete_smbctx(SMBCCTX* ctx){
-    smbc_getFunctionPurgeCachedServers(ctx)(ctx);
+    ctx->callbacks.purge_cached_fn(ctx);
     smbc_free_context(ctx, 1);
 }
 
@@ -114,9 +114,8 @@
     struct smbc_dirent	*dirent;
     smbitem		*list = NULL, *item;
 
-    if ((fd = smbc_getFunctionOpendir(ctx)(ctx, smb_path)) == NULL)
-        return NULL;
-    while((dirent = smbc_getFunctionReaddir(ctx)(ctx, fd)) != NULL){
+    if ((fd = ctx->opendir(ctx, smb_path)) == NULL) return NULL;
+    while((dirent = ctx->readdir(ctx, fd)) != NULL){
 	if (strcmp(dirent->name, "") == 0) continue;
 	if (strcmp(dirent->name, ".") == 0) continue;
 	if (strcmp(dirent->name, "..") == 0) continue;
@@ -129,7 +128,7 @@
 	strcpy(item->name, dirent->name);
 	list = item;
     }
-    smbc_getFunctionClose(ctx)(ctx, fd);
+    ctx->close_fn(ctx, fd);
     return /* smbitem_list_sort */ (list);    
         
 }
@@ -168,7 +167,7 @@
 		    delete_smbctx(ctx1);
 		}else{
 		    recurse(ctx, smb_group, smb_path, maxlen);
-		    smbc_getFunctionPurgeCachedServers(ctx)(ctx);
+		    ctx->callbacks.purge_cached_fn(ctx);
 		}
 		break;
 	    case SMBC_FILE_SHARE:
@@ -182,7 +181,7 @@
 		if (list->type != SMBC_FILE){
 		    recurse(ctx, smb_group, smb_path, maxlen);
 		    if (list->type == SMBC_FILE_SHARE)
-			smbc_getFunctionPurgeCachedServers(ctx)(ctx);
+			ctx->callbacks.purge_cached_fn(ctx);
 		}
 		break;
 	}

Modified: branches/samba/upstream/examples/libsmbclient/testread.c
===================================================================
--- branches/samba/upstream/examples/libsmbclient/testread.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/libsmbclient/testread.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,58 +10,66 @@
 
 int main(int argc, char * argv[]) 
 { 
-    int             i;
     int             fd;
     int             ret;
     int             debug = 0;
     int             mode = 0666;
     int             savedErrno;
     char            buffer[2048]; 
-    char            path[2048];
-    char *          p;
+    char *          pSmbPath = NULL;
     time_t          t0;
     time_t          t1;
     struct stat     st; 
     
+    if (argc == 1)
+    {
+        pSmbPath = "smb://RANDOM/Public/bigfile";
+    }
+    else if (argc == 2)
+    {
+        pSmbPath = argv[1];
+    }
+    else
+    {
+        printf("usage: "
+               "%s [ smb://path/to/file ]\n",
+               argv[0]);
+        return 1;
+    }
+
     smbc_init(get_auth_data_fn, debug); 
     
-    for (;;)
+    printf("Open file %s\n", pSmbPath);
+    
+    t0 = time(NULL);
+
+    if ((fd = smbc_open(pSmbPath, O_RDONLY, 0)) < 0)
     {
-        fprintf(stdout, "Path: ");
-        *path = '\0';
-        fgets(path, sizeof(path) - 1, stdin);
-        if (strlen(path) == 0)
-        {
-            return 0;
-        }
+        perror("smbc_open");
+        return 1;
+    }
 
-        p = path + strlen(path) - 1;
-        if (*p == '\n')
-        {
-            *p = '\0';
-        }
-    
-        if ((fd = smbc_open(path, O_RDONLY, 0)) < 0)
-        {
-            perror("smbc_open");
-            continue;
-        }
+    printf("Beginning read loop.\n");
 
-        do
-        {
-            ret = smbc_read(fd, buffer, sizeof(buffer));
-            savedErrno = errno;
-            if (ret > 0) fwrite(buffer, 1, ret, stdout);
-        } while (ret > 0);
+    do
+    {
+        ret = smbc_read(fd, buffer, sizeof(buffer));
+        savedErrno = errno;
+        if (ret > 0) fwrite(buffer, 1, ret, stdout);
+    } while (ret > 0);
 
-        smbc_close(fd);
+    smbc_close(fd);
 
-        if (ret < 0)
-        {
-            errno = savedErrno;
-            perror("read");
-        }
+    if (ret < 0)
+    {
+        errno = savedErrno;
+        perror("read");
+        return 1;
     }
 
+    t1 = time(NULL);
+
+    printf("Elapsed time: %d seconds\n", t1 - t0);
+
     return 0; 
 }

Modified: branches/samba/upstream/examples/libsmbclient/testsmbc.c
===================================================================
--- branches/samba/upstream/examples/libsmbclient/testsmbc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/libsmbclient/testsmbc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include <stdio.h>
@@ -25,7 +26,7 @@
 #include <string.h>
 #include <unistd.h>
 #include <stdlib.h>
-#include "libsmbclient.h"
+#include <libsmbclient.h>
 #include "get_auth_data_fn.h"
 
 int global_id = 0;

Deleted: branches/samba/upstream/examples/libsmbclient/teststat3.c
===================================================================
--- branches/samba/upstream/examples/libsmbclient/teststat3.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/libsmbclient/teststat3.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,78 +0,0 @@
-#include <libsmbclient.h>
-#include <sys/stat.h>
-#include <string.h>
-#include <stdio.h>
-#include <time.h>
-#include "get_auth_data_fn.h"
-
-/*
- * This test is intended to ensure that the timestamps returned by
- * libsmbclient using smbc_stat() are the same as those returned by
- * smbc_fstat().
- */
-
-
-int main(int argc, char* argv[])
-{
-        int             fd;
-        struct stat     st1;
-        struct stat     st2;
-        char            mtime[32];
-        char            ctime[32];
-        char            atime[32];
-        char *          pUrl = argv[1];
-
-        if(argc != 2)
-        {
-                printf("usage: %s <file_url>\n", argv[0]);
-                return 1;
-        }
-
-        
-        smbc_init(get_auth_data_fn, 0);
-        
-        if (smbc_stat(pUrl, &st1) < 0)
-        {
-                perror("smbc_stat");
-                return 1;
-        }
-        
-        if ((fd = smbc_open(pUrl, O_RDONLY, 0)) < 0)
-        {
-                perror("smbc_open");
-                return 1;
-        }
-
-        if (smbc_fstat(fd, &st2) < 0)
-        {
-                perror("smbc_fstat");
-                return 1;
-        }
-        
-        smbc_close(fd);
-
-#define COMPARE(name, field)                                            \
-        if (st1.field != st2.field)                                     \
-        {                                                               \
-                printf("Field " name " MISMATCH: st1=%lu, st2=%lu\n",   \
-                       (unsigned long) st1.field,                       \
-                       (unsigned long) st2.field);                      \
-        }
-
-        COMPARE("st_dev", st_dev);
-        COMPARE("st_ino", st_ino);
-        COMPARE("st_mode", st_mode);
-        COMPARE("st_nlink", st_nlink);
-        COMPARE("st_uid", st_uid);
-        COMPARE("st_gid", st_gid);
-        COMPARE("st_rdev", st_rdev);
-        COMPARE("st_size", st_size);
-        COMPARE("st_blksize", st_blksize);
-        COMPARE("st_blocks", st_blocks);
-        COMPARE("st_atime", st_atime);
-        COMPARE("st_mtime", st_mtime);
-        COMPARE("st_ctime", st_ctime);
-
-        return 0;
-}
-

Deleted: branches/samba/upstream/examples/libsmbclient/testtruncate.c
===================================================================
--- branches/samba/upstream/examples/libsmbclient/testtruncate.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/libsmbclient/testtruncate.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,82 +0,0 @@
-#include <stdio.h> 
-#include <unistd.h>
-#include <string.h> 
-#include <time.h> 
-#include <errno.h>
-#include <libsmbclient.h> 
-#include "get_auth_data_fn.h"
-
-
-int main(int argc, char * argv[]) 
-{ 
-    int             fd;
-    int             ret;
-    int             debug = 0;
-    int             savedErrno;
-    char            buffer[128];
-    char *          pSmbPath = NULL;
-    char *          pLocalPath = NULL;
-    struct stat     st; 
-    
-    if (argc != 2)
-    {
-        printf("usage: "
-               "%s smb://path/to/file\n",
-               argv[0]);
-        return 1;
-    }
-
-    smbc_init(get_auth_data_fn, debug); 
-    
-    if ((fd = smbc_open(argv[1], O_WRONLY | O_CREAT | O_TRUNC, 0)) < 0)
-    {
-        perror("smbc_open");
-        return 1;
-    }
-
-    strcpy(buffer, "Hello world.\nThis is a test.\n");
-
-    ret = smbc_write(fd, buffer, strlen(buffer));
-    savedErrno = errno;
-    smbc_close(fd);
-
-    if (ret < 0)
-    {
-        errno = savedErrno;
-        perror("write");
-    }
-
-    if (smbc_stat(argv[1], &st) < 0)
-    {
-        perror("smbc_stat");
-        return 1;
-    }
-    
-    printf("Original size: %lu\n", (unsigned long) st.st_size);
-    
-    if ((fd = smbc_open(argv[1], O_WRONLY, 0)) < 0)
-    {
-        perror("smbc_open");
-        return 1;
-    }
-
-    ret = smbc_ftruncate(fd, 13);
-    savedErrno = errno;
-    smbc_close(fd);
-    if (ret < 0)
-    {
-        errno = savedErrno;
-        perror("smbc_ftruncate");
-        return 1;
-    }
-    
-    if (smbc_stat(argv[1], &st) < 0)
-    {
-        perror("smbc_stat");
-        return 1;
-    }
-    
-    printf("New size: %lu\n", (unsigned long) st.st_size);
-    
-    return 0; 
-}

Deleted: branches/samba/upstream/examples/libsmbclient/testwrite.c
===================================================================
--- branches/samba/upstream/examples/libsmbclient/testwrite.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/libsmbclient/testwrite.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,69 +0,0 @@
-#include <sys/types.h>
-#include <stdio.h> 
-#include <unistd.h>
-#include <string.h> 
-#include <time.h> 
-#include <errno.h>
-#include <libsmbclient.h> 
-#include "get_auth_data_fn.h"
-
-
-int main(int argc, char * argv[]) 
-{ 
-    int             i;
-    int             fd;
-    int             ret;
-    int             debug = 0;
-    int             mode = 0666;
-    int             savedErrno;
-    char            buffer[2048]; 
-    char            path[2048];
-    char *          p;
-    time_t          t0;
-    time_t          t1;
-    struct stat     st; 
-    
-    smbc_init(get_auth_data_fn, debug); 
-    
-    printf("CAUTION: This program will overwrite a file.  "
-           "Press ENTER to continue.");
-    fgets(buffer, sizeof(buffer), stdin);
-           
-
-    for (;;)
-    {
-        fprintf(stdout, "\nPath: ");
-        *path = '\0';
-        fgets(path, sizeof(path) - 1, stdin);
-        if (strlen(path) == 0)
-        {
-            return 0;
-        }
-
-        p = path + strlen(path) - 1;
-        if (*p == '\n')
-        {
-            *p = '\0';
-        }
-    
-        if ((fd = smbc_open(path, O_WRONLY | O_CREAT | O_TRUNC, 0)) < 0)
-        {
-            perror("smbc_open");
-            continue;
-        }
-
-        strcpy(buffer, "Hello world\n");
-
-        ret = smbc_write(fd, buffer, strlen(buffer));
-        savedErrno = errno;
-        smbc_close(fd);
-
-        if (ret < 0)
-        {
-            errno = savedErrno;
-            perror("write");
-        }
-    }
-
-    return 0; 
-}

Modified: branches/samba/upstream/examples/libsmbclient/tree.c
===================================================================
--- branches/samba/upstream/examples/libsmbclient/tree.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/libsmbclient/tree.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,15 +17,14 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /* example-gtk+ application, ripped off from the gtk+ tree.c sample */
 
 #include <stdio.h>
 #include <errno.h>
-#include <string.h>
-#include <stdlib.h>
 #include <gtk/gtk.h>
 #include "libsmbclient.h"
 

Modified: branches/samba/upstream/examples/logon/mklogon/mklogon.pl
===================================================================
--- branches/samba/upstream/examples/logon/mklogon/mklogon.pl	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/logon/mklogon/mklogon.pl	2008-06-15 01:55:18 UTC (rev 1953)
@@ -18,7 +18,8 @@
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #
 
 # Version: 1.0 (Stable)

Modified: branches/samba/upstream/examples/misc/adssearch.pl
===================================================================
--- branches/samba/upstream/examples/misc/adssearch.pl	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/misc/adssearch.pl	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,7 +3,7 @@
 # adssearch.pl 	- query an Active Directory server and
 #		  display objects in a human readable format
 #
-# Copyright (C) Guenther Deschner <gd at samba.org> 2003-2008
+# Copyright (C) Guenther Deschner <gd at samba.org> 2003-2007
 #
 # TODO: add range retrieval
 #	write sddl-converter, decode userParameters
@@ -77,7 +77,6 @@
 	$opt_port,
 	$opt_realm,
 	$opt_saslmech,
-	$opt_search_opt,
 	$opt_scope, 
 	$opt_simpleauth,
 	$opt_starttls,
@@ -109,7 +108,6 @@
 	'saslmech|Y=s'	=> \$opt_saslmech,
 	'schema|c'	=> \$opt_dump_schema,
 	'scope|s=s'	=> \$opt_scope,
-	'searchopt:i'	=> \$opt_search_opt,
 	'simpleauth|x'	=> \$opt_simpleauth,
 	'tls|Z'		=> \$opt_starttls,
 	'user|U=s'	=> \$opt_user,
@@ -230,7 +228,6 @@
 my %ads_ds_func = (
 "DS_BEHAVIOR_WIN2000"			=> 0,	# untested
 "DS_BEHAVIOR_WIN2003"			=> 2,
-"DS_BEHAVIOR_WIN2008"			=> 3,
 );
 
 my %ads_instance_type = (
@@ -245,14 +242,6 @@
 	"ACCOUNT_LOCKED_OUT"		=> 0x800010, # 8388624
 );
 
-my %ads_enctypes = (
-	"DES-CBC-CRC"				=> 0x01,
-	"DES-CBC-MD5"				=> 0x02,
-	"RC4_HMAC_MD5"				=> 0x04,
-	"AES128_CTS_HMAC_SHA1_96"		=> 0x08,
-	"AES128_CTS_HMAC_SHA1_128"		=> 0x10,
-);
-
 my %ads_gpoptions = (
 	"GPOPTIONS_INHERIT"		=> 0,
 	"GPOPTIONS_BLOCK_INHERITANCE"	=> 1,
@@ -419,7 +408,6 @@
 	"GTYPE_SECURITY_BUILTIN_LOCAL_GROUP"	=> 0x80000005,
 	"GTYPE_SECURITY_DOMAIN_LOCAL_GROUP"	=> 0x80000004,
 	"GTYPE_SECURITY_GLOBAL_GROUP"		=> 0x80000002,
-	"GTYPE_SECURITY_UNIVERSAL_GROUP"	=> 0x80000008,
 	"GTYPE_DISTRIBUTION_GLOBAL_GROUP"	=> 0x00000002,
 	"GTYPE_DISTRIBUTION_DOMAIN_LOCAL_GROUP"	=> 0x00000004,
 	"GTYPE_DISTRIBUTION_UNIVERSAL_GROUP"	=> 0x00000008,
@@ -498,7 +486,6 @@
 my %attr_handler = (
 	"Token-Groups-No-GC-Acceptable" => \&dump_sid,	#wrong name
 	"accountExpires"		=> \&dump_nttime,
-	"attributeSecurityGUID"		=> \&dump_guid,
 	"badPasswordTime"		=> \&dump_nttime,			
 	"creationTime"			=> \&dump_nttime,
 	"currentTime"			=> \&dump_timestr,
@@ -527,7 +514,6 @@
 	"modifyTimeStamp"		=> \&dump_timestr,
 	"msDS-Behavior-Version"		=> \&dump_ds_func,	#unsure
 	"msDS-User-Account-Control-Computed" => \&dump_uacc,
-	"msDS-SupportedEncryptionTypes"	=> \&dump_enctypes,
 	"mS-DS-CreatorSID"		=> \&dump_sid,
 #	"msRADIUSFramedIPAddress"	=> \&dump_ipaddr,
 #	"msRASSavedFramedIPAddress" 	=> \&dump_ipaddr,
@@ -541,7 +527,6 @@
 	"pwdLastSet"			=> \&dump_nttime,
 	"pwdProperties"			=> \&dump_pwdproperties,
 	"sAMAccountType"		=> \&dump_atype,
-	"schemaIDGUID"			=> \&dump_guid,
 	"sDRightsEffective"		=> \&dump_sdeffective,
 	"securityIdentifier"		=> \&dump_sid,
 	"serverState"			=> \&dump_serverstate,
@@ -847,8 +832,7 @@
 
 	my $server = shift || "";
 	$dse = shift || get_dse($server,$async_ldap_hd) || return -1;
-	return $dse->get_value($opt_dump_schema ? 'schemaNamingContext':
-						  'defaultNamingContext');
+	return $dse->get_value('defaultNamingContext');
 }
 
 sub get_realm_from_rootdse {
@@ -1219,10 +1203,6 @@
 	return dump_bitmask_equal(@_,%ads_uacc); 
 }
 
-sub dump_enctypes {
-	return dump_bitmask_and(@_,%ads_enctypes);
-}
-
 sub dump_uf {
 	return dump_bitmask_and(@_,%ads_uf);
 }
@@ -1481,21 +1461,6 @@
 			critical => 'true',
 			value => $opt_display_extendeddn ? $ctl_extended_dn_val : "");
 
-	# setup search options
-	my $search_opt = Convert::ASN1->new;
-	$search_opt->prepare(
-		q<	searchopt ::= SEQUENCE {
-				flags     INTEGER
-			}
-		>
-	);
-
-	my $tmp = $search_opt->encode( flags => $opt_search_opt);
-	my $ctl_search_opt = Net::LDAP::Control->new( 
-		type => $ads_controls{'LDAP_SERVER_SEARCH_OPTIONS_OID'},
-		critical => 'true',
-		value => $tmp);
-
 	# setup notify control
 	my $ctl_notification = Net::LDAP::Control->new( 
 		type => $ads_controls{'LDAP_SERVER_NOTIFICATION_OID'},
@@ -1514,7 +1479,7 @@
 		critical => 'true',
 		value => "");
 
-	if (defined($opt_paging) || $opt_dump_schema) {
+	if (defined($opt_paging)) {
 		push(@ctrls, $ctl_paged);
 		push(@ctrls_s, "LDAP_PAGED_RESULT_OID_STRING" );
 	}
@@ -1538,11 +1503,6 @@
 		push(@ctrls_s, "LDAP_SERVER_DOMAIN_SCOPE_OID");
 	}
 
-	if ($opt_search_opt) {
-		push(@ctrls, $ctl_search_opt);
-		push(@ctrls_s, "LDAP_SERVER_SEARCH_OPTIONS_OID");
-	}
-
 	return @ctrls;
 }
 
@@ -1802,9 +1762,9 @@
 
 	if ($opt_dump_schema) {
 		print "Dumping Schema:\n";
-#		my $ads_schema = $async_ldap_hd->schema;
-#		$ads_schema->dump;
-#		exit 0;
+		my $ads_schema = $async_ldap_hd->schema;
+		$ads_schema->dump;
+		exit 0;
 	}
 
 	while (1) {
@@ -1821,9 +1781,8 @@
 		if (!$opt_notify && ($async_search->code == LDAP_REFERRAL)) {
 			foreach my $ref ($async_search->referrals) {
 				print "\ngot Referral: [$ref]\n";
-				my ($prot, $host, $base) = split(/\/+/, $ref);
 				$async_ldap_hd->unbind();
-				$async_ldap_hd = get_ldap_hd($host, 1);
+				$async_ldap_hd = get_ldap_hd($ref, 1);
 				if (do_bind($async_ldap_hd, $sasl_bind) == -1) {
 					$async_ldap_hd->unbind();
 					next;

Modified: branches/samba/upstream/examples/pam_winbind/pam_winbind.conf
===================================================================
--- branches/samba/upstream/examples/pam_winbind/pam_winbind.conf	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/pam_winbind/pam_winbind.conf	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,9 +9,6 @@
 # turn on debugging
 ;debug = no
 
-# turn on extended PAM state debugging
-;debug_state = no
-
 # request a cached login if possible
 # (needs "winbind offline logon = yes" in smb.conf)
 ;cached_login = no
@@ -27,9 +24,3 @@
 # make successful authentication dependend on membership of one SID
 # (can also take a name)
 ;require_membership_of =
-
-# password expiry warning period in days
-;warn_pwd_expire = 14
-
-# omit pam conversations
-;silent = no

Modified: branches/samba/upstream/examples/pcap2nbench/COPYING
===================================================================
--- branches/samba/upstream/examples/pcap2nbench/COPYING	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/pcap2nbench/COPYING	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,642 +1,301 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
 
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                          675 Mass Ave, Cambridge, MA 02139, USA
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
 
-                            Preamble
+			    Preamble
 
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
 your programs, too.
 
   When we speak of free software, we are referring to freedom, not
 price.  Our General Public Licenses are designed to make sure that you
 have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
 
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
 
   For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
 
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
 
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
 
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
 
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
   The precise terms and conditions for copying, distribution and
 modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
-                       TERMS AND CONDITIONS
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
 
-  0. Definitions.
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
 
-  "This License" refers to version 3 of the GNU General Public License.
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
 
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
 
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
 
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
 
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
 
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
 
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
 
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
 
-  1. Source Code.
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
 
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
 
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
 
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
 
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
 
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
 
-  The Corresponding Source for a work in source code form is that
-same work.
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
 
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
 this License.
 
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
 otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
 
-  13. Use with the GNU Affero General Public License.
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
 
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
 
-  14. Revised Versions of this License.
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
 
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
 be similar in spirit to the present version, but may differ in detail to
 address new problems or concerns.
 
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
 
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
 
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
+			    NO WARRANTY
 
-  15. Disclaimer of Warranty.
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
 
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
 
-  16. Limitation of Liability.
+		     END OF TERMS AND CONDITIONS
+
+	Appendix: How to Apply These Terms to Your New Programs
 
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
   If you develop a new program, and you want it to be of the greatest
 possible use to the public, the best way to achieve this is to make it
 free software which everyone can redistribute and change under these terms.
 
   To do so, attach the following notices to the program.  It is safest
 to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
+convey the exclusion of warranty; and each file should have at least
 the "copyright" line and a pointer to where the full notice is found.
 
     <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
+    Copyright (C) 19yy  <name of author>
 
-    This program is free software: you can redistribute it and/or modify
+    This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
+    the Free Software Foundation; either version 2 of the License, or
     (at your option) any later version.
 
     This program is distributed in the hope that it will be useful,
@@ -645,30 +304,36 @@
     GNU General Public License for more details.
 
     You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
 Also add information on how to contact you by electronic and paper mail.
 
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
 
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
     This is free software, and you are welcome to redistribute it
     under certain conditions; type `show c' for details.
 
 The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
 
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
 
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.

Modified: branches/samba/upstream/examples/pcap2nbench/Makefile
===================================================================
--- branches/samba/upstream/examples/pcap2nbench/Makefile	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/pcap2nbench/Makefile	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 ##
 ##  This program is free software; you can redistribute it and/or modify
 ##  it under the terms of the GNU General Public License as published by
-##  the Free Software Foundation; either version 3 of the License, or
+##  the Free Software Foundation; either version 2 of the License, or
 ##  (at your option) any later version.
 ##
 ##  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
 ##  GNU General Public License for more details.
 ##
 ##  You should have received a copy of the GNU General Public License
-##  along with this program; if not, see <http://www.gnu.org/licenses/>.
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 ##
 ##  Written by Anthony Liguori <aliguori at us.ibm.com>
 ##

Modified: branches/samba/upstream/examples/pcap2nbench/closerequest.cpp
===================================================================
--- branches/samba/upstream/examples/pcap2nbench/closerequest.cpp	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/pcap2nbench/closerequest.cpp	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  *  Written by Anthony Liguori <aliguori at us.ibm.com>
 \*/

Modified: branches/samba/upstream/examples/pcap2nbench/closerequest.hpp
===================================================================
--- branches/samba/upstream/examples/pcap2nbench/closerequest.hpp	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/pcap2nbench/closerequest.hpp	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  *  Written by Anthony Liguori <aliguori at us.ibm.com>
 \*/

Modified: branches/samba/upstream/examples/pcap2nbench/ethernet.cpp
===================================================================
--- branches/samba/upstream/examples/pcap2nbench/ethernet.cpp	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/pcap2nbench/ethernet.cpp	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  *  Written by Anthony Liguori <aliguori at us.ibm.com>
 \*/

Modified: branches/samba/upstream/examples/pcap2nbench/ethernet.hpp
===================================================================
--- branches/samba/upstream/examples/pcap2nbench/ethernet.hpp	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/pcap2nbench/ethernet.hpp	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  *  Written by Anthony Liguori <aliguori at us.ibm.com>
 \*/

Modified: branches/samba/upstream/examples/pcap2nbench/ip.cpp
===================================================================
--- branches/samba/upstream/examples/pcap2nbench/ip.cpp	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/pcap2nbench/ip.cpp	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  *  Written by Anthony Liguori <aliguori at us.ibm.com>
 \*/

Modified: branches/samba/upstream/examples/pcap2nbench/ip.hpp
===================================================================
--- branches/samba/upstream/examples/pcap2nbench/ip.hpp	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/pcap2nbench/ip.hpp	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  *  Written by Anthony Liguori <aliguori at us.ibm.com>
 \*/

Modified: branches/samba/upstream/examples/pcap2nbench/main.cpp
===================================================================
--- branches/samba/upstream/examples/pcap2nbench/main.cpp	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/pcap2nbench/main.cpp	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  *  Written by Anthony Liguori <aliguori at us.ibm.com>
 \*/

Modified: branches/samba/upstream/examples/pcap2nbench/ntcreateandxrequest.cpp
===================================================================
--- branches/samba/upstream/examples/pcap2nbench/ntcreateandxrequest.cpp	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/pcap2nbench/ntcreateandxrequest.cpp	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  *  Written by Anthony Liguori <aliguori at us.ibm.com>
 \*/

Modified: branches/samba/upstream/examples/pcap2nbench/ntcreateandxrequest.hpp
===================================================================
--- branches/samba/upstream/examples/pcap2nbench/ntcreateandxrequest.hpp	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/pcap2nbench/ntcreateandxrequest.hpp	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  *  Written by Anthony Liguori <aliguori at us.ibm.com>
 \*/

Modified: branches/samba/upstream/examples/pcap2nbench/ntcreateandxresponse.cpp
===================================================================
--- branches/samba/upstream/examples/pcap2nbench/ntcreateandxresponse.cpp	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/pcap2nbench/ntcreateandxresponse.cpp	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  *  Written by Anthony Liguori <aliguori at us.ibm.com>
 \*/

Modified: branches/samba/upstream/examples/pcap2nbench/ntcreateandxresponse.hpp
===================================================================
--- branches/samba/upstream/examples/pcap2nbench/ntcreateandxresponse.hpp	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/pcap2nbench/ntcreateandxresponse.hpp	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  *  Written by Anthony Liguori <aliguori at us.ibm.com>
 \*/

Modified: branches/samba/upstream/examples/pcap2nbench/readandxrequest.cpp
===================================================================
--- branches/samba/upstream/examples/pcap2nbench/readandxrequest.cpp	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/pcap2nbench/readandxrequest.cpp	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  *  Written by Anthony Liguori <aliguori at us.ibm.com>
 \*/

Modified: branches/samba/upstream/examples/pcap2nbench/readandxrequest.hpp
===================================================================
--- branches/samba/upstream/examples/pcap2nbench/readandxrequest.hpp	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/pcap2nbench/readandxrequest.hpp	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  *  Written by Anthony Liguori <aliguori at us.ibm.com>
 \*/

Modified: branches/samba/upstream/examples/pcap2nbench/readandxresponse.hpp
===================================================================
--- branches/samba/upstream/examples/pcap2nbench/readandxresponse.hpp	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/pcap2nbench/readandxresponse.hpp	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  *  Written by Anthony Liguori <aliguori at us.ibm.com>
 \*/

Modified: branches/samba/upstream/examples/pcap2nbench/smb.cpp
===================================================================
--- branches/samba/upstream/examples/pcap2nbench/smb.cpp	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/pcap2nbench/smb.cpp	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  *  Written by Anthony Liguori <aliguori at us.ibm.com>
 \*/

Modified: branches/samba/upstream/examples/pcap2nbench/smb.hpp
===================================================================
--- branches/samba/upstream/examples/pcap2nbench/smb.hpp	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/pcap2nbench/smb.hpp	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  *  Written by Anthony Liguori <aliguori at us.ibm.com>
 \*/

Modified: branches/samba/upstream/examples/pcap2nbench/tcp.cpp
===================================================================
--- branches/samba/upstream/examples/pcap2nbench/tcp.cpp	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/pcap2nbench/tcp.cpp	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  *  Written by Anthony Liguori <aliguori at us.ibm.com>
 \*/

Modified: branches/samba/upstream/examples/pcap2nbench/tcp.hpp
===================================================================
--- branches/samba/upstream/examples/pcap2nbench/tcp.hpp	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/pcap2nbench/tcp.hpp	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  *  Written by Anthony Liguori <aliguori at us.ibm.com>
 \*/

Modified: branches/samba/upstream/examples/pcap2nbench/writeandxrequest.cpp
===================================================================
--- branches/samba/upstream/examples/pcap2nbench/writeandxrequest.cpp	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/pcap2nbench/writeandxrequest.cpp	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  *  Written by Anthony Liguori <aliguori at us.ibm.com>
 \*/

Modified: branches/samba/upstream/examples/pcap2nbench/writeandxrequest.hpp
===================================================================
--- branches/samba/upstream/examples/pcap2nbench/writeandxrequest.hpp	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/pcap2nbench/writeandxrequest.hpp	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  *  Written by Anthony Liguori <aliguori at us.ibm.com>
 \*/

Modified: branches/samba/upstream/examples/pdb/test.c
===================================================================
--- branches/samba/upstream/examples/pdb/test.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/pdb/test.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
  * 
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 3 of the License, or (at your option)
+ * Software Foundation; either version 2 of the License, or (at your option)
  * any later version.
  * 
  * This program is distributed in the hope that it will be useful, but WITHOUT
@@ -13,7 +13,8 @@
  * more details.
  * 
  * You should have received a copy of the GNU General Public License along with
- * this program; if not, see <http://www.gnu.org/licenses/>.
+ * this program; if not, write to the Free Software Foundation, Inc., 675
+ * Mass Ave, Cambridge, MA 02139, USA.
  */
 
 

Modified: branches/samba/upstream/examples/perfcounter/Makefile
===================================================================
--- branches/samba/upstream/examples/perfcounter/Makefile	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/perfcounter/Makefile	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,7 +3,7 @@
 #  
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
 # 
 # This program is distributed in the hope that it will be useful,
@@ -12,26 +12,26 @@
 # GNU General Public License for more details.
 # 
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 # 
 
 SAMBA_SRC_DIR=../../source
 TDB_SRC_DIR=$(SAMBA_SRC_DIR)/tdb
 
-CFLAGS = -g -I$(SAMBA_SRC_DIR)/include -I$(TDB_SRC_DIR)/include
+CFLAGS = -g -I$(SAMBA_SRC_DIR)/include -I$(TDB_SRC_DIR)
 CC = gcc
 
 PROGS = perfcount
-TDB_OBJ = $(TDB_SRC_DIR)/common/tdb.o $(TDB_SRC_DIR)/common/dump.o \
-	$(TDB_SRC_DIR)/common/error.o $(TDB_SRC_DIR)/common/freelist.o \
-	$(TDB_SRC_DIR)/common/io.o $(TDB_SRC_DIR)/common/lock.o \
-	$(TDB_SRC_DIR)/common/open.o $(TDB_SRC_DIR)/common/transaction.o \
-	$(TDB_SRC_DIR)/common/traverse.o
+TDB_OBJ = $(TDB_SRC_DIR)/tdb.o $(TDB_SRC_DIR)/spinlock.o $(TDB_SRC_DIR)/tdbback.o
 PERF_WRITER_OBJ = perf_writer.o perf_writer_mem.o perf_writer_util.o perf_writer_cpu.o perf_writer_process.o perf_writer_disk.o
 
 default: $(PROGS)
 
-perfcount: $(PERF_WRITER_OBJ)
+$(TDB_OBJ):
+	cd $(TDB_SRC_DIR) && make
+
+perfcount: $(PERF_WRITER_OBJ) $(TDB_OBJ)
 	$(CC) $(CFLAGS) -o perfcount $(PERF_WRITER_OBJ) $(TDB_OBJ)
 
 clean:

Modified: branches/samba/upstream/examples/perfcounter/perf.h
===================================================================
--- branches/samba/upstream/examples/perfcounter/perf.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/perfcounter/perf.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #ifndef __PERF_H__

Modified: branches/samba/upstream/examples/perfcounter/perf_writer.c
===================================================================
--- branches/samba/upstream/examples/perfcounter/perf_writer.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/perfcounter/perf_writer.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "perf.h"

Modified: branches/samba/upstream/examples/perfcounter/perf_writer_cpu.c
===================================================================
--- branches/samba/upstream/examples/perfcounter/perf_writer_cpu.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/perfcounter/perf_writer_cpu.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "perf.h"

Modified: branches/samba/upstream/examples/perfcounter/perf_writer_disk.c
===================================================================
--- branches/samba/upstream/examples/perfcounter/perf_writer_disk.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/perfcounter/perf_writer_disk.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "perf.h"

Modified: branches/samba/upstream/examples/perfcounter/perf_writer_mem.c
===================================================================
--- branches/samba/upstream/examples/perfcounter/perf_writer_mem.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/perfcounter/perf_writer_mem.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "perf.h"

Modified: branches/samba/upstream/examples/perfcounter/perf_writer_process.c
===================================================================
--- branches/samba/upstream/examples/perfcounter/perf_writer_process.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/perfcounter/perf_writer_process.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "perf.h"

Modified: branches/samba/upstream/examples/perfcounter/perf_writer_util.c
===================================================================
--- branches/samba/upstream/examples/perfcounter/perf_writer_util.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/perfcounter/perf_writer_util.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "perf.h"
@@ -36,6 +37,10 @@
   key.dsize = strlen(keystring);
   data.dptr = databuf;
   data.dsize = datasize;
+  fprintf(stderr, "doing insert of [%x] with key [%s] into [%s]\n", 
+	  data.dptr, 
+	  keystring, 
+	  db->name);
 
   tdb_store(db, key, data, flags);
 }
@@ -48,6 +53,10 @@
   key.dsize = strlen(keystring);
   data.dptr = datastring;
   data.dsize = strlen(datastring);
+  /*  fprintf(stderr, "doing insert of [%s] with key [%s] into [%s]\n", 
+	  data.dptr, 
+	  keystring, 
+	  db->name);*/
 
   tdb_store(db, key, data, flags);
 }

Modified: branches/samba/upstream/examples/perfcounter/perfcountd.init
===================================================================
--- branches/samba/upstream/examples/perfcounter/perfcountd.init	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/perfcounter/perfcountd.init	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 #
 ####################################################################
 

Modified: branches/samba/upstream/examples/printing/VampireDriversFunctions
===================================================================
--- branches/samba/upstream/examples/printing/VampireDriversFunctions	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/printing/VampireDriversFunctions	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
 ##
 ##  This program is free software; you can redistribute it and/or modify
 ##  it under the terms of the GNU General Public License as published by
-##  the Free Software Foundation; either version 3 of the License, or
+##  the Free Software Foundation; either version 2 of the License, or
 ##  (at your option) any later version.
 ##
 ##  This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
 ##  GNU General Public License for more details.
 ##
 ##  You should have received a copy of the GNU General Public License
-##  along with this program; if not, see <http://www.gnu.org/licenses/>.
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 ##
 ######################################################################
 

Modified: branches/samba/upstream/examples/printing/prtpub.c
===================================================================
--- branches/samba/upstream/examples/printing/prtpub.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/printing/prtpub.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 /* This needs to be defined for certain compilers */

Modified: branches/samba/upstream/examples/scripts/eventlog/parselog.pl
===================================================================
--- branches/samba/upstream/examples/scripts/eventlog/parselog.pl	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/scripts/eventlog/parselog.pl	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 ##
 ##  This program is free software; you can redistribute it and/or modify
 ##  it under the terms of the GNU General Public License as published by
-##  the Free Software Foundation; either version 3 of the License, or
+##  the Free Software Foundation; either version 2 of the License, or
 ##  (at your option) any later version.
 ##
 ##  This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
 ##  GNU General Public License for more details.
 ##
 ##  You should have received a copy of the GNU General Public License
-##  along with this program; if not, see <http://www.gnu.org/licenses/>.
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 ##
 ######################################################################
 

Modified: branches/samba/upstream/examples/scripts/printing/cups/smbaddprinter.pl
===================================================================
--- branches/samba/upstream/examples/scripts/printing/cups/smbaddprinter.pl	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/scripts/printing/cups/smbaddprinter.pl	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 ##   This program is free software; you can redistribute it
 ##   and/or modify it under the terms of the GNU General
 ##   Public License as published by the Free Software Foundation;
-##   Either version 3 of the License, or (at your option) any
+##   ither version 2 of the License, or (at your option) any
 ##   later version.
 ##
 ##   This program is distributed in the hope that it will be useful,
@@ -14,7 +14,9 @@
 ##   GNU General Public License for more details.
 ##
 ##   You should have received a copy of the GNU General Public
-##   License along with this program; if not, see <http://www.gnu.org/licenses/>.
+##   License along with this program; if not, write to the Free
+##   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
+##   USA.
 
 @argv = @ARGV;
 

Modified: branches/samba/upstream/examples/scripts/printing/cups/smbdelprinter.pl
===================================================================
--- branches/samba/upstream/examples/scripts/printing/cups/smbdelprinter.pl	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/scripts/printing/cups/smbdelprinter.pl	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 ##   This program is free software; you can redistribute it
 ##   and/or modify it under the terms of the GNU General
 ##   Public License as published by the Free Software Foundation;
-##   Either version 3 of the License, or (at your option) any
+##   ither version 2 of the License, or (at your option) any
 ##   later version.
 ##
 ##   This program is distributed in the hope that it will be useful,
@@ -14,7 +14,9 @@
 ##   GNU General Public License for more details.
 ##
 ##   You should have received a copy of the GNU General Public
-##   License along with this program; if not, see <http://www.gnu.org/licenses/>.
+##   License along with this program; if not, write to the Free
+##   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
+##   USA.
 
 @argv = @ARGV;
 

Modified: branches/samba/upstream/examples/scripts/shares/perl/modify_samba_config.pl
===================================================================
--- branches/samba/upstream/examples/scripts/shares/perl/modify_samba_config.pl	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/scripts/shares/perl/modify_samba_config.pl	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
 ##
 ##  This program is free software; you can redistribute it and/or modify
 ##  it under the terms of the GNU General Public License as published by
-##  the Free Software Foundation; either version 3 of the License, or
+##  the Free Software Foundation; either version 2 of the License, or
 ##  (at your option) any later version.
 ##
 ##  This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
 ##  GNU General Public License for more details.
 ##
 ##  You should have received a copy of the GNU General Public License
-##  along with this program; if not, see <http://www.gnu.org/licenses/>.
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 ##
 ######################################################################
 

Modified: branches/samba/upstream/examples/scripts/shares/python/SambaConfig.py
===================================================================
--- branches/samba/upstream/examples/scripts/shares/python/SambaConfig.py	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/scripts/shares/python/SambaConfig.py	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
 ##
 ##  This program is free software; you can redistribute it and/or modify
 ##  it under the terms of the GNU General Public License as published by
-##  the Free Software Foundation; either version 3 of the License, or
+##  the Free Software Foundation; either version 2 of the License, or
 ##  (at your option) any later version.
 ##
 ##  This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
 ##  GNU General Public License for more details.
 ##
 ##  You should have received a copy of the GNU General Public License
-##  along with this program; if not, see <http://www.gnu.org/licenses/>.
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 ##
 ######################################################################
 

Modified: branches/samba/upstream/examples/scripts/shares/python/SambaParm.py
===================================================================
--- branches/samba/upstream/examples/scripts/shares/python/SambaParm.py	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/scripts/shares/python/SambaParm.py	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 ##
 ##  This program is free software; you can redistribute it and/or modify
 ##  it under the terms of the GNU General Public License as published by
-##  the Free Software Foundation; either version 3 of the License, or
+##  the Free Software Foundation; either version 2 of the License, or
 ##  (at your option) any later version.
 ##
 ##  This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
 ##  GNU General Public License for more details.
 ##
 ##  You should have received a copy of the GNU General Public License
-##  along with this program; if not, see <http://www.gnu.org/licenses/>.
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 ##
 ######################################################################
 

Modified: branches/samba/upstream/examples/scripts/shares/python/generate_parm_table.py
===================================================================
--- branches/samba/upstream/examples/scripts/shares/python/generate_parm_table.py	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/scripts/shares/python/generate_parm_table.py	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 ##
 ##  This program is free software; you can redistribute it and/or modify
 ##  it under the terms of the GNU General Public License as published by
-##  the Free Software Foundation; either version 3 of the License, or
+##  the Free Software Foundation; either version 2 of the License, or
 ##  (at your option) any later version.
 ##
 ##  This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
 ##  GNU General Public License for more details.
 ##
 ##  You should have received a copy of the GNU General Public License
-##  along with this program; if not, see <http://www.gnu.org/licenses/>.
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 ##
 ######################################################################
 
@@ -31,7 +32,7 @@
 ##
 ##  This program is free software; you can redistribute it and/or modify
 ##  it under the terms of the GNU General Public License as published by
-##  the Free Software Foundation; either version 3 of the License, or
+##  the Free Software Foundation; either version 2 of the License, or
 ##  (at your option) any later version.
 ##
 ##  This program is distributed in the hope that it will be useful,
@@ -40,7 +41,8 @@
 ##  GNU General Public License for more details.
 ##
 ##  You should have received a copy of the GNU General Public License
-##  along with this program; if not, see <http://www.gnu.org/licenses/>.
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 ##
 ######################################################################
 

Modified: branches/samba/upstream/examples/scripts/shares/python/modify_samba_config.py
===================================================================
--- branches/samba/upstream/examples/scripts/shares/python/modify_samba_config.py	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/scripts/shares/python/modify_samba_config.py	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 ##
 ##  This program is free software; you can redistribute it and/or modify
 ##  it under the terms of the GNU General Public License as published by
-##  the Free Software Foundation; either version 3 of the License, or
+##  the Free Software Foundation; either version 2 of the License, or
 ##  (at your option) any later version.
 ##
 ##  This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
 ##  GNU General Public License for more details.
 ##
 ##  You should have received a copy of the GNU General Public License
-##  along with this program; if not, see <http://www.gnu.org/licenses/>.
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 ##
 ######################################################################
 

Modified: branches/samba/upstream/examples/scripts/shares/python/smbparm.py
===================================================================
--- branches/samba/upstream/examples/scripts/shares/python/smbparm.py	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/examples/scripts/shares/python/smbparm.py	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 ##
 ##  This program is free software; you can redistribute it and/or modify
 ##  it under the terms of the GNU General Public License as published by
-##  the Free Software Foundation; either version 3 of the License, or
+##  the Free Software Foundation; either version 2 of the License, or
 ##  (at your option) any later version.
 ##
 ##  This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
 ##  GNU General Public License for more details.
 ##
 ##  You should have received a copy of the GNU General Public License
-##  along with this program; if not, see <http://www.gnu.org/licenses/>.
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 ##
 ######################################################################
 

Modified: branches/samba/upstream/packaging/Debian/README
===================================================================
--- branches/samba/upstream/packaging/Debian/README	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/packaging/Debian/README	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,3 +1,6 @@
+NOTE: the debian-unstable and debian-woody are not updated anymore,
+they are left only as a reference for now. --SSS
+
 Building Samba Packages for Debian GNU/Linux
 --------------------------------------------
 

Modified: branches/samba/upstream/packaging/Debian/debian-sarge/changelog
===================================================================
--- branches/samba/upstream/packaging/Debian/debian-sarge/changelog	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/packaging/Debian/debian-sarge/changelog	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,3 +1,52 @@
+samba (3.0.25c-1) stable; urgency=low
+
+  * samba 3.0.25c bugfix release
+
+ -- Simo Sorce <idra at samba.org>  Mon, 3  Sep 2007 11:18:30 -0400
+
+samba (3.0.25b-1) stable; urgency=low
+
+  * samba 3.0.25b bugfix release
+
+ -- Simo Sorce <idra at samba.org>  Mon, 2  Jul 2007 12:16:30 -0400
+
+samba (3.0.25a-2) stable; urgency=low
+
+  * Fix bug in fhs.patch
+
+ -- Simo Sorce <idra at samba.org>  Wed, 6  Jun 2007 11:33:30 -0400
+
+samba (3.0.25a-1) stable; urgency=high
+
+  * samba 3.0.25a Stabilizing release
+  * Includes Security fixes release with 3.0.24a and 3.0.25
+
+ -- Simo Sorce <idra at samba.org>  Mon, 28 May 2007 20:45:30 -0400
+
+samba (3.0.24-1) stable; urgency=high
+
+  * samba 3.0.24 Security Release
+
+ -- Simo Sorce <idra at samba.org>  Mon, 19 Feb 2007 15:53:30 -0500
+
+samba (3.0.23d-1) stable; urgency=low
+
+  * samba 3.0.23d Samba Team Release
+
+ -- Simo Sorce <idra at samba.org>  Fri, 17 Nov 2006 15:39:30 -0500
+
+samba (3.0.23c-1) stable; urgency=low
+
+  * samba 3.0.23c Samba Team Release
+
+ -- Simo Sorce <idra at samba.org>  Fri, 8  Sep 2006 14:12:30 -0400
+
+samba (3.0.23a-1) stable; urgency=low
+
+  * samba 3.0.23a Samba Team Release
+
+ -- Simo Sorce <idra at samba.org>  Tue, 1  Aug 2006 22:01:30 -0400
+
 samba (3.0.23-1) stable; urgency=low
 
   * samba 3.0.23 Samba Team Release

Modified: branches/samba/upstream/packaging/Debian/debian-sarge/copyright
===================================================================
--- branches/samba/upstream/packaging/Debian/debian-sarge/copyright	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/packaging/Debian/debian-sarge/copyright	2008-06-15 01:55:18 UTC (rev 1953)
@@ -14,16 +14,17 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
+   the Free Software Foundation; version 2 dated June, 1991.
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program;  if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+   MA 02111-1307, USA
 
 On Debian GNU/Linux systems, the complete text of the GNU General
 Public License can be found in `/usr/share/common-licenses/GPL'.

Modified: branches/samba/upstream/packaging/Debian/debian-sarge/patches/documentation.patch
===================================================================
--- branches/samba/upstream/packaging/Debian/debian-sarge/patches/documentation.patch	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/packaging/Debian/debian-sarge/patches/documentation.patch	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,66 +1,66 @@
 --- samba-3.0.4/docs/manpages/swat.8.orig	2004-05-05 10:22:50.000000000 -0400
 +++ samba-3.0.4/docs/manpages/swat.8	2004-05-10 13:25:53.000000000 -0400
-@@ -80,6 +80,13 @@
+@@ -80,4 +80,10 @@
  .SH "INSTALLATION"
- 
  .PP
 +\fBDebian-specific Note\fR: all these steps have already been done for
 +you. However, by default, swat is not enabled. This has been done for
 +security reasons. To enable swat you need to edit /etc/inetd.conf,
 +uncomment the swat entry (usually at the end of the file), and then
 +restart inetd.
-+
 +.PP
  Swat is included as binary package with most distributions\&. The package manager in this case takes care of the installation and configuration\&. This section is only for those who have compiled swat from scratch\&.
- 
  .PP
-@@ -87,13 +94,13 @@
- 
- .TP 3
+@@ -87,12 +94,12 @@
+ .TP 3n
  \(bu
 -/usr/local/samba/sbin/swat
 +/usr/sbin/swat
- .TP
+ .TP 3n
  \(bu
 -/usr/local/samba/swat/images/*
 +/usr/share/samba/swat/images/*
- .TP
+ .TP 3n
  \(bu
 -/usr/local/samba/swat/help/*
 +/usr/share/samba/swat/help/*
- .LP
- 
  .SS "Inetd Installation"
-@@ -102,7 +109,7 @@
- You need to edit your \fI/etc/inetd\&.conf \fR and \fI/etc/services\fR to enable SWAT to be launched via \fBinetd\fR\&.
- 
  .PP
--In \fI/etc/services\fR you need to add a line like this:
-+In \fI/etc/services\fR you need to add a line like this (not needed for Debian):
- 
+ You need to edit your
+@@ -125,7 +131,7 @@
  .PP
+ In
+ \fI/etc/services\fR
+-you need to add a line like this:
++you need to add a line like this (not needed for Debian):
+ .PP
  \fBswat 901/tcp\fR
-@@ -114,10 +121,10 @@
- the choice of port number isn't really important except that it should be less than 1024 and not currently used (using a number above 1024 presents an obscure security hole depending on the implementation details of your\fBinetd\fR daemon)\&.
- 
  .PP
--In \fI/etc/inetd\&.conf\fR you should add a line like this:
-+In \fI/etc/inetd\&.conf\fR you should add a line like this (not needed for Debian since the maintainer scripts do it automatically. You need to uncomment the line, though, because it is added commented out for security reasons):
- 
+@@ -140,9 +146,9 @@
  .PP
--\fBswat stream tcp nowait\&.400 root /usr/local/samba/sbin/swat swat\fR
-+\fBswat stream tcp nowait\&.400 root /usr/sbin/swat swat\fR
- 
+ In
+ \fI/etc/inetd.conf\fR
+-you should add a line like this:
++you should add a line like this (not needed for Debian since the maintainer scripts do it automatically. You need to uncomment the line, though, because it is added commented out for security reasons):
  .PP
- Once you have edited \fI/etc/services\fR and \fI/etc/inetd\&.conf\fR you need to send a HUP signal to inetd\&. To do this use \fBkill \-1 PID \fR where PID is the process ID of the inetd daemon\&.
-@@ -141,8 +148,8 @@
- This file must contain a mapping of service name (e\&.g\&., swat) to service port (e\&.g\&., 901) and protocol type (e\&.g\&., tcp)\&.
- 
- .TP
--\fI/usr/local/samba/lib/smb\&.conf\fR
--This is the default location of the \fBsmb\&.conf\fR(5) server configuration file that swat edits\&. Other common places that systems install this file are \fI /usr/samba/lib/smb\&.conf\fR and \fI/etc/smb\&.conf \fR\&. This file describes all the services the server is to make available to clients\&.
-+\fI/etc/samba/smb\&.conf\fR
-+This is the default location of the \fBsmb\&.conf\fR(5) server configuration file that swat edits\&. This file describes all the services the server is to make available to clients\&.
- 
+-swat stream tcp nowait.400 root /usr/local/samba/sbin/swat swat
++swat stream tcp nowait.400 root /usr/sbin/swat swat
+ .PP
+ Once you have edited
+ \fI/etc/services\fR
+@@ -166,13 +172,13 @@
+ .RE
+ .PP
+-\fI/usr/local/samba/lib/smb.conf\fR
++\fI/etc/samba/smb.conf\fR
+ .RS 3n
+ This is the default location of the
+ \fBsmb.conf\fR(5)
+ server configuration file that swat edits. Other common places that systems install this file are
+ \fI /usr/samba/lib/smb.conf\fR
+ and
+-\fI/etc/smb.conf \fR. This file describes all the services the server is to make available to clients.
++\fI/etc/samba/smb.conf \fR. This file describes all the services the server is to make available to clients.
+ .RE
  .SH "WARNINGS"
- 
+ .PP

Modified: branches/samba/upstream/packaging/Debian/debian-sarge/patches/fhs.patch
===================================================================
--- branches/samba/upstream/packaging/Debian/debian-sarge/patches/fhs.patch	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/packaging/Debian/debian-sarge/patches/fhs.patch	2008-06-15 01:55:18 UTC (rev 1953)
@@ -111,19 +111,6 @@
 +	return lp_lockdir();
 +#endif
 +}
-diff -uNr samba-3.0.10.orig/source/groupdb/mapping.c samba-3.0.10/source/groupdb/mapping.c
---- samba-3.0.10.orig/source/groupdb/mapping.c	2004-12-17 03:50:08.000000000 -0800
-+++ samba-3.0.10/source/groupdb/mapping.c	2004-12-17 03:55:29.000000000 -0800
-@@ -140,8 +140,8 @@
- 	
- 	if (tdb)
- 		return True;
- 		
--	tdb = tdb_open_log(lock_path("group_mapping.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
-+	tdb = tdb_open_log(state_path("group_mapping.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
- 	if (!tdb) {
- 		DEBUG(0,("Failed to open group mapping database\n"));
- 		return False;
 diff -uNr samba-3.0.10.orig/source/include/dynconfig.h samba-3.0.10/source/include/dynconfig.h
 --- samba-3.0.10.orig/source/include/dynconfig.h	2004-12-17 03:50:08.000000000 -0800
 +++ samba-3.0.10/source/include/dynconfig.h	2004-12-17 03:55:29.000000000 -0800
@@ -152,18 +139,6 @@
  	if (stat(msg_path, &st) != 0) {
  		/* the msg file isn't available */
  		DEBUG(10, ("lang_tdb_init: %s: %s\n", msg_path, 
-diff -uNr samba-3.0.21.orig/source/lib/account_pol.c samba-3.0.21/source/lib/account_pol.c
---- samba-3.0.21.orig/source/lib/account_pol.c	2005-12-20 15:28:38.000000000 +0000
-+++ samba-3.0.21/source/lib/account_pol.c	2005-12-23 11:41:08.000000000 +0000
-@@ -262,7 +262,7 @@
- 		return True;
- 	}
- 
--	tdb = tdb_open_log(lock_path("account_policy.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
-+	tdb = tdb_open_log(state_path("account_policy.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
- 	if (!tdb) {
- 		DEBUG(0,("Failed to open account policy database\n"));
- 		return False;
 diff -uNr samba-3.0.10.orig/source/lib/util.c samba-3.0.10/source/lib/util.c
 --- samba-3.0.10.orig/source/lib/util.c	2004-12-17 03:50:08.000000000 -0800
 +++ samba-3.0.10/source/lib/util.c	2004-12-17 03:55:29.000000000 -0800
@@ -229,32 +204,6 @@
   * @brief Returns the platform specific shared library extension.
   *
   * @retval Pointer to a static #fstring containing the extension.
-diff -uNr samba-3.0.10.orig/source/lib/util_unistr.c samba-3.0.10/source/lib/util_unistr.c
---- samba-3.0.10.orig/source/lib/util_unistr.c	2004-12-17 03:50:08.000000000 -0800
-+++ samba-3.0.10/source/lib/util_unistr.c	2004-12-17 03:55:29.000000000 -0800
-@@ -54,11 +54,11 @@
- 	}
- 	initialised = 1;
- 
--	upcase_table = map_file(lib_path("upcase.dat"), 0x20000);
-+	upcase_table = map_file(data_path("upcase.dat"), 0x20000);
- 	upcase_table_use_unmap = ( upcase_table != NULL );
- 
--	lowcase_table = map_file(lib_path("lowcase.dat"), 0x20000);
-+	lowcase_table = map_file(data_path("lowcase.dat"), 0x20000);
- 	lowcase_table_use_unmap = ( lowcase_table != NULL );
- 
- #ifdef HAVE_SETLOCALE
- 	/* Get the name of the current locale.  */
-@@ -161,7 +161,7 @@
- 		return;
- 	}
- 
--	valid_file = map_file(lib_path("valid.dat"), 0x10000);
-+	valid_file = map_file(data_path("valid.dat"), 0x10000);
- 	if (valid_file) {
- 		valid_table = valid_file;
- 		mapped_file = 1;
 diff -uNr samba-3.0.10.orig/source/libsmb/samlogon_cache.c samba-3.0.10/source/libsmb/samlogon_cache.c
 --- samba-3.0.10.orig/source/libsmb/samlogon_cache.c	2004-12-17 03:50:08.000000000 -0800
 +++ samba-3.0.10/source/libsmb/samlogon_cache.c	2004-12-17 03:55:29.000000000 -0800
@@ -267,15 +216,6 @@
  						   TDB_DEFAULT, O_RDWR | O_CREAT, 0600);
  	}
  
-@@ -67,7 +67,7 @@
-            winbindd_cache.tdb open.  Open the tdb if a NULL is passed. */
- 
- 	if (!tdb) {
--		tdb = tdb_open_log(lock_path("winbindd_cache.tdb"), 5000,
-+		tdb = tdb_open_log(cache_path("winbindd_cache.tdb"), 5000,
- 				   TDB_DEFAULT, O_RDWR, 0600);
- 		if (!tdb) {
- 			DEBUG(5, ("netsamlogon_clear_cached_user: failed to open cache\n"));
 diff -uNr samba-3.0.10.orig/source/nmbd/nmbd_serverlistdb.c samba-3.0.10/source/nmbd/nmbd_serverlistdb.c
 --- samba-3.0.10.orig/source/nmbd/nmbd_serverlistdb.c	2004-12-17 03:50:09.000000000 -0800
 +++ samba-3.0.10/source/nmbd/nmbd_serverlistdb.c	2004-12-17 03:55:29.000000000 -0800
@@ -321,18 +261,27 @@
  				WINBINDD_CACHE_TDB_DEFAULT_HASH_SIZE, 
  				TDB_DEFAULT /*TDB_CLEAR_IF_FIRST*/, O_RDWR|O_CREAT, 0600);
  
-diff -uNr samba-3.0.10.orig/source/nsswitch/winbindd_util.c samba-3.0.10/source/nsswitch/winbindd_util.c
---- samba-3.0.10.orig/source/nsswitch/winbindd_util.c	2004-12-17 03:50:09.000000000 -0800
-+++ samba-3.0.10/source/nsswitch/winbindd_util.c	2004-12-17 03:55:30.000000000 -0800
-@@ -957,7 +957,7 @@
- 	SMB_STRUCT_STAT stbuf;
- 	TDB_CONTEXT *idmap_tdb;
+@@ -2223,9 +2223,9 @@
+ 		tdb_close(wcache->tdb);
+ 		wcache->tdb = NULL;
  
--	pstrcpy(idmap_name, lock_path("winbindd_idmap.tdb"));
-+	pstrcpy(idmap_name, state_path("winbindd_idmap.tdb"));
+-		if (unlink(lock_path("winbindd_cache.tdb")) == -1) {
++		if (unlink(cache_path("winbindd_cache.tdb")) == -1) {
+ 			DEBUG(0,("initialize_winbindd_cache: unlink %s failed %s ",
+-				lock_path("winbindd_cache.tdb"),
++				cache_path("winbindd_cache.tdb"),
+ 				strerror(errno) ));
+ 			return False;
+ 		}
+@@ -2487,7 +2487,7 @@
+ 		return;
  
- 	if (!file_exist(idmap_name, &stbuf)) {
- 		/* nothing to convert return */
+ 	/* when working offline we must not clear the cache on restart */
+-	wcache->tdb = tdb_open_log(lock_path("winbindd_cache.tdb"),
++	wcache->tdb = tdb_open_log(cache_path("winbindd_cache.tdb"),
+ 				WINBINDD_CACHE_TDB_DEFAULT_HASH_SIZE, 
+ 				lp_winbind_offline_logon() ? TDB_DEFAULT : (TDB_DEFAULT | TDB_CLEAR_IF_FIRST), 
+ 				O_RDWR|O_CREAT, 0600);
 diff -uNr samba-3.0.10.orig/source/param/loadparm.c samba-3.0.10/source/param/loadparm.c
 --- samba-3.0.10.orig/source/param/loadparm.c	2004-12-17 03:50:09.000000000 -0800
 +++ samba-3.0.10/source/param/loadparm.c	2004-12-17 03:55:30.000000000 -0800
@@ -498,18 +447,6 @@
  		return False;
  	}
   
-diff -uNr samba-3.0.10.orig/source/sam/idmap_tdb.c samba-3.0.10/source/sam/idmap_tdb.c
---- samba-3.0.10.orig/source/sam/idmap_tdb.c	2004-12-17 03:50:09.000000000 -0800
-+++ samba-3.0.10/source/sam/idmap_tdb.c	2004-12-17 03:55:31.000000000 -0800
-@@ -487,7 +487,7 @@
- 	BOOL tdb_is_new = False;
- 
- 	/* use the old database if present */
--	tdbfile = SMB_STRDUP(lock_path("winbindd_idmap.tdb"));
-+	tdbfile = SMB_STRDUP(state_path("winbindd_idmap.tdb"));
- 	if (!tdbfile) {
- 		DEBUG(0, ("idmap_init: out of memory!\n"));
- 		return NT_STATUS_NO_MEMORY;
 diff -uNr samba-3.0.23.orig/source/smbd/lanman.c samba-3.0.23/source/smbd/lanman.c
 --- samba-3.0.23.orig/source/smbd/lanman.c	2006-07-15 09:50:10.000000000 -0400
 +++ samba-3.0.23/source/smbd/lanman.c	2006-07-15 09:55:31.000000000 -0400
@@ -525,18 +462,6 @@
  		return 0;
  	}
 
-diff -uNr samba-3.0.10.orig/source/utils/net_idmap.c samba-3.0.10/source/utils/net_idmap.c
---- samba-3.0.10.orig/source/utils/net_idmap.c	2004-12-17 03:50:10.000000000 -0800
-+++ samba-3.0.10/source/utils/net_idmap.c	2004-12-17 03:55:32.000000000 -0800
-@@ -126,7 +126,7 @@
- 		return NT_STATUS_UNSUCCESSFUL;
- 	}
- 
--	tdbfile = SMB_STRDUP(lock_path("winbindd_idmap.tdb"));
-+	tdbfile = SMB_STRDUP(state_path("winbindd_idmap.tdb"));
- 	if (!tdbfile) {
- 		DEBUG(0, ("idmap_init: out of memory!\n"));
- 		return NT_STATUS_NO_MEMORY;
 diff -uNr samba-3.0.11.orig/source/printing/nt_printing.c samba-3.0.11/source/printing/nt_printing.c
 --- samba-3.0.11.orig/source/printing/nt_printing.c	2005-03-23 02:51:08.000000000 -0800
 +++ samba-3.0.11/source/printing/nt_printing.c	2005-03-23 02:54:33.000000000 -0800
@@ -549,3 +474,92 @@
  		pstrcat(printdb_path, sharename);
  		pstrcat(printdb_path, ".tdb");
  
+diff -uPr samba-3.0.25a.orig/source/groupdb/mapping_tdb.c samba-3.0.25a/source/groupdb/mapping_tdb.c
+--- samba-3.0.25a.orig/source/groupdb/mapping_tdb.c	2007-04-25 09:38:59.000000000 +0000
++++ samba-3.0.25a/source/groupdb/mapping_tdb.c	2007-05-29 00:28:42.000000000 +0000
+@@ -39,7 +39,7 @@
+ 	if (tdb)
+ 		return True;
+ 		
+-	tdb = tdb_open_log(lock_path("group_mapping.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
++	tdb = tdb_open_log(state_path("group_mapping.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
+ 	if (!tdb) {
+ 		DEBUG(0,("Failed to open group mapping database\n"));
+ 		return False;
+diff -uPr samba-3.0.25a.orig/source/lib/account_pol.c samba-3.0.25a/source/lib/account_pol.c
+--- samba-3.0.25a.orig/source/lib/account_pol.c	2007-03-01 04:54:30.000000000 +0000
++++ samba-3.0.25a/source/lib/account_pol.c	2007-05-29 00:21:35.000000000 +0000
+@@ -213,9 +213,9 @@
+ 		return True;
+ 	}
+ 
+-	tdb = tdb_open_log(lock_path("account_policy.tdb"), 0, TDB_DEFAULT, O_RDWR, 0600);
++	tdb = tdb_open_log(state_path("account_policy.tdb"), 0, TDB_DEFAULT, O_RDWR, 0600);
+ 	if (!tdb) { /* the account policies files does not exist or open failed, try to create a new one */
+-		tdb = tdb_open_log(lock_path("account_policy.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
++		tdb = tdb_open_log(state_path("account_policy.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
+ 		if (!tdb) {
+ 			DEBUG(0,("Failed to open account policy database\n"));
+ 			return False;
+diff -uPr samba-3.0.25a.orig/source/lib/util_unistr.c samba-3.0.25a/source/lib/util_unistr.c
+--- samba-3.0.25a.orig/source/lib/util_unistr.c	2007-03-01 04:54:30.000000000 +0000
++++ samba-3.0.25a/source/lib/util_unistr.c	2007-05-29 00:24:07.000000000 +0000
+@@ -88,11 +88,11 @@
+ 	}
+ 	initialised = 1;
+ 
+-	upcase_table = (smb_ucs2_t *)map_file(lib_path("upcase.dat"),
++	upcase_table = (smb_ucs2_t *)map_file(data_path("upcase.dat"),
+ 					      0x20000);
+ 	upcase_table_use_unmap = ( upcase_table != NULL );
+ 
+-	lowcase_table = (smb_ucs2_t *)map_file(lib_path("lowcase.dat"),
++	lowcase_table = (smb_ucs2_t *)map_file(data_path("lowcase.dat"),
+ 					       0x20000);
+ 	lowcase_table_use_unmap = ( lowcase_table != NULL );
+ 
+@@ -230,7 +230,7 @@
+ 		return;
+ 	}
+ 
+-	valid_file = (uint8 *)map_file(lib_path("valid.dat"), 0x10000);
++	valid_file = (uint8 *)map_file(data_path("valid.dat"), 0x10000);
+ 	if (valid_file) {
+ 		valid_table = valid_file;
+ 		mapped_file = 1;
+diff -uPr samba-3.0.25a.orig/source/libsmb/samlogon_cache.c samba-3.0.25a/source/libsmb/samlogon_cache.c
+--- samba-3.0.25a.orig/source/libsmb/samlogon_cache.c	2007-05-10 22:09:35.000000000 +0000
++++ samba-3.0.25a/source/libsmb/samlogon_cache.c	2007-05-29 00:38:41.000000000 +0000
+@@ -67,7 +67,7 @@
+            winbindd_cache.tdb open.  Open the tdb if a NULL is passed. */
+ 
+ 	if (!tdb) {
+-		tdb = tdb_open_log(lock_path("winbindd_cache.tdb"), 
++		tdb = tdb_open_log(cache_path("winbindd_cache.tdb"), 
+ 				   WINBINDD_CACHE_TDB_DEFAULT_HASH_SIZE,
+ 				   TDB_DEFAULT, O_RDWR, 0600);
+ 		if (!tdb) {
+diff -uPr samba-3.0.25a.orig/source/nsswitch/idmap_tdb.c samba-3.0.25a/source/nsswitch/idmap_tdb.c
+--- samba-3.0.25a.orig/source/nsswitch/idmap_tdb.c	2007-05-10 22:09:34.000000000 +0000
++++ samba-3.0.25a/source/nsswitch/idmap_tdb.c	2007-05-29 00:27:55.000000000 +0000
+@@ -247,7 +247,7 @@
+ 	}
+ 
+ 	/* use the old database if present */
+-	tdbfile = talloc_strdup(ctx, lock_path("winbindd_idmap.tdb"));
++	tdbfile = talloc_strdup(ctx, state_path("winbindd_idmap.tdb"));
+ 	if (!tdbfile) {
+ 		DEBUG(0, ("Out of memory!\n"));
+ 		ret = NT_STATUS_NO_MEMORY;
+diff -uPr samba-3.0.25a.orig/source/passdb/pdb_tdb.c samba-3.0.25a/source/passdb/pdb_tdb.c
+--- samba-3.0.25a.orig/source/passdb/pdb_tdb.c	2007-03-01 04:54:41.000000000 +0000
++++ samba-3.0.25a/source/passdb/pdb_tdb.c	2007-05-29 00:38:41.000000000 +0000
+@@ -1559,7 +1559,7 @@
+ 	uint32 rid;
+ 	BOOL ret = False;
+ 
+-	tdb = tdb_open_log(lock_path("winbindd_idmap.tdb"), 0,
++	tdb = tdb_open_log(state_path("winbindd_idmap.tdb"), 0,
+ 			   TDB_DEFAULT, O_RDWR | O_CREAT, 0644);
+ 
+ 	if (tdb == NULL) {

Deleted: branches/samba/upstream/packaging/Debian/debian-sarge/patches/nmbd-signalling.patch
===================================================================
--- branches/samba/upstream/packaging/Debian/debian-sarge/patches/nmbd-signalling.patch	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/packaging/Debian/debian-sarge/patches/nmbd-signalling.patch	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,20 +0,0 @@
-diff -uNr samba-2.999+3.0.alpha21.orig/source/nmbd/nmbd_subnetdb.c samba-2.999+3.0.alpha21/source/nmbd/nmbd_subnetdb.c
---- samba-2.999+3.0.alpha21.orig/source/nmbd/nmbd_subnetdb.c	2002-11-26 20:54:19.000000000 -0600
-+++ samba-2.999+3.0.alpha21/source/nmbd/nmbd_subnetdb.c	2002-12-16 23:34:13.000000000 -0600
-@@ -214,12 +214,16 @@
-	extern struct in_addr loopback_ip;
- 
-	if(num_interfaces == 0) {
-+		void (*old_handler)(int);
-+
-		DEBUG(0,("create_subnets: No local interfaces !\n"));
-		DEBUG(0,("create_subnets: Waiting for an interface to appear ...\n"));
-+		old_handler = CatchSignal( SIGTERM, SIGNAL_CAST SIG_DFL );
-		while (iface_count() == 0) {
-			sleep(5);
-			load_interfaces();
-		}
-+		CatchSignal( SIGTERM, SIGNAL_CAST old_handler );
-	}
- 
-	num_interfaces = iface_count();

Copied: branches/samba/upstream/packaging/Debian/debian-sarge/patches/nmbd-signalling.patch.unused (from rev 1928, branches/samba/upstream/packaging/Debian/debian-sarge/patches/nmbd-signalling.patch.unused)
===================================================================
--- branches/samba/upstream/packaging/Debian/debian-sarge/patches/nmbd-signalling.patch.unused	                        (rev 0)
+++ branches/samba/upstream/packaging/Debian/debian-sarge/patches/nmbd-signalling.patch.unused	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,20 @@
+diff -uNr samba-2.999+3.0.alpha21.orig/source/nmbd/nmbd_subnetdb.c samba-2.999+3.0.alpha21/source/nmbd/nmbd_subnetdb.c
+--- samba-2.999+3.0.alpha21.orig/source/nmbd/nmbd_subnetdb.c	2002-11-26 20:54:19.000000000 -0600
++++ samba-2.999+3.0.alpha21/source/nmbd/nmbd_subnetdb.c	2002-12-16 23:34:13.000000000 -0600
+@@ -214,12 +214,16 @@
+	extern struct in_addr loopback_ip;
+ 
+	if(num_interfaces == 0) {
++		void (*old_handler)(int);
++
+		DEBUG(0,("create_subnets: No local interfaces !\n"));
+		DEBUG(0,("create_subnets: Waiting for an interface to appear ...\n"));
++		old_handler = CatchSignal( SIGTERM, SIGNAL_CAST SIG_DFL );
+		while (iface_count() == 0) {
+			sleep(5);
+			load_interfaces();
+		}
++		CatchSignal( SIGTERM, SIGNAL_CAST old_handler );
+	}
+ 
+	num_interfaces = iface_count();

Modified: branches/samba/upstream/packaging/Debian/debian-sarge/patches/non-linux-ports.patch
===================================================================
--- branches/samba/upstream/packaging/Debian/debian-sarge/patches/non-linux-ports.patch	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/packaging/Debian/debian-sarge/patches/non-linux-ports.patch	2008-06-15 01:55:18 UTC (rev 1953)
@@ -47,16 +47,18 @@
  		AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
  		AC_TRY_LINK([#include <sys/sendfile.h>],
  [\
-@@ -4307,10 +4319,10 @@
+@@ -4307,12 +4319,12 @@
  WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
  
  case "$host_os" in
 -	*linux*)
 +	linux*-gnu* | gnu* | k*bsd*-gnu)
+		NSSSONAMEVERSIONSUFFIX=".2"
  		WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_linux.o"
  		;;
 -	*freebsd[[5-9]]*)
 +	freebsd5*|*freebsd[[6-9]]*)
  		# FreeBSD winbind client is implemented as a wrapper around
  		# the Linux version.
+		NSSSONAMEVERSIONSUFFIX=".1"
  		WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_freebsd.o \

Modified: branches/samba/upstream/packaging/Debian/debian-sarge/patches/samba.patch
===================================================================
--- branches/samba/upstream/packaging/Debian/debian-sarge/patches/samba.patch	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/packaging/Debian/debian-sarge/patches/samba.patch	2008-06-15 01:55:18 UTC (rev 1953)
@@ -32,11 +32,11 @@
 --- samba-3.0.0beta1.orig/source/web/diagnose.c	2003-06-07 12:57:41.000000000 -0500
 +++ samba-3.0.0beta1/source/web/diagnose.c	2003-06-30 20:12:22.000000000 -0500
 @@ -66,6 +66,7 @@
- 	static struct cli_state cli;
- 	extern struct in_addr loopback_ip;
+ {
+ 	struct cli_state *cli;
  
 +	loopback_ip.s_addr = htonl((127 << 24) + 1);
- 	if (!cli_initialise(&cli))
+ 	if ((cli = cli_initialise()) == NULL)
  		return False;
  
 --- samba-3.0.23/source/script/installbin.sh.in.orig	2006-07-15 09:08:36.000000000 -0400

Deleted: branches/samba/upstream/packaging/Debian/debian-sarge/patches/undefined-symbols.patch
===================================================================
--- branches/samba/upstream/packaging/Debian/debian-sarge/patches/undefined-symbols.patch	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/packaging/Debian/debian-sarge/patches/undefined-symbols.patch	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,22 +0,0 @@
-diff -uNr samba-3.0.11.orig/source/Makefile.in samba-3.0.11/source/Makefile.in
---- samba-3.0.11.orig/source/Makefile.in	2005-03-23 02:40:40.000000000 -0800
-+++ samba-3.0.11/source/Makefile.in	2005-03-23 02:48:59.000000000 -0800
-@@ -631,7 +631,8 @@
- 	    $(RPC_ECHO_OBJ) $(SMBLDAP_OBJ) $(IDMAP_OBJ) libsmb/spnego.o $(PASSCHANGE_OBJ)
- 
- WINBIND_WINS_NSS_OBJ = nsswitch/wins.o $(PARAM_OBJ) \
--	$(LIBSMB_OBJ) $(LIB_NONSMBD_OBJ) $(NSSWINS_OBJ) $(KRBCLIENT_OBJ)
-+	$(LIBSMB_OBJ) $(LIB_NONSMBD_OBJ) $(NSSWINS_OBJ) $(KRBCLIENT_OBJ) \
-+	$(SECRETS_OBJ)
- 
- WINBIND_WINS_NSS_PICOBJS = $(WINBIND_WINS_NSS_OBJ:.o=. at PICSUFFIX@)
- 
-@@ -997,7 +998,7 @@
- 
- bin/libsmbclient. at SHLIBEXT@: $(LIBSMBCLIENT_PICOBJS)
- 	@echo Linking libsmbclient shared library $@
--	@$(SHLD) $(LDSHFLAGS) -o $@ $(LIBSMBCLIENT_PICOBJS) $(LDFLAGS) $(LIBS) \
-+	@$(SHLD) $(LDSHFLAGS) -Wl,-z,defs -o $@ $(LIBSMBCLIENT_PICOBJS) $(LDFLAGS) $(LIBS) \
- 		$(KRB5LIBS) $(LDAP_LIBS) \
- 		@SONAMEFLAG@`basename $@`.$(LIBSMBCLIENT_MAJOR)
- 

Modified: branches/samba/upstream/packaging/Debian/debian-unstable/copyright
===================================================================
--- branches/samba/upstream/packaging/Debian/debian-unstable/copyright	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/packaging/Debian/debian-unstable/copyright	2008-06-15 01:55:18 UTC (rev 1953)
@@ -13,16 +13,17 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
+   the Free Software Foundation; version 2 dated June, 1991.
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program;  if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+   MA 02111-1307, USA
 
 On Debian GNU/Linux systems, the complete text of the GNU General
 Public License can be found in `/usr/share/common-licenses/GPL'.

Modified: branches/samba/upstream/packaging/Debian/debian-woody/copyright
===================================================================
--- branches/samba/upstream/packaging/Debian/debian-woody/copyright	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/packaging/Debian/debian-woody/copyright	2008-06-15 01:55:18 UTC (rev 1953)
@@ -12,16 +12,17 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
+   the Free Software Foundation; version 2 dated June, 1991.
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program;  if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+   MA 02111-1307, USA
 
 On Debian GNU/Linux systems, the complete text of the GNU General
 Public License can be found in `/usr/share/common-licenses/GPL'.

Modified: branches/samba/upstream/packaging/LSB/smb.conf
===================================================================
--- branches/samba/upstream/packaging/LSB/smb.conf	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/packaging/LSB/smb.conf	2008-06-15 01:55:18 UTC (rev 1953)
@@ -83,6 +83,10 @@
 # of the machine that is connecting
 ;   include = /etc/samba/smb.conf.%m
 
+# Most people will find that this option gives better performance.
+# See speed.txt and the manual pages for details
+   socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
+
 # Configure Samba to use multiple interfaces
 # If you have multiple network interfaces then you must list them
 # here. See the man page for details.

Copied: branches/samba/upstream/packaging/RHEL/makerpms.sh (from rev 1928, branches/samba/upstream/packaging/RHEL/makerpms.sh)
===================================================================
--- branches/samba/upstream/packaging/RHEL/makerpms.sh	                        (rev 0)
+++ branches/samba/upstream/packaging/RHEL/makerpms.sh	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,81 @@
+#!/bin/sh
+# Copyright (C) John H Terpstra 1998-2002
+#               Gerald (Jerry) Carter 2003
+
+# The following allows environment variables to override the target directories
+#   the alternative is to have a file in your home directory calles .rpmmacros
+#   containing the following:
+#   %_topdir  /home/mylogin/redhat
+#
+# Note: Under this directory rpm expects to find the same directories that are under the
+#   /usr/src/redhat directory
+#
+
+EXTRA_OPTIONS="$1"
+
+SPECDIR=`rpm --eval %_specdir`
+SRCDIR=`rpm --eval %_sourcedir`
+
+# At this point the SPECDIR and SRCDIR vaiables must have a value!
+
+USERID=`id -u`
+GRPID=`id -g`
+VERSION='3.0.30'
+REVISION=''
+SPECFILE="samba.spec"
+RPMVER=`rpm --version | awk '{print $3}'`
+RPM="rpmbuild"
+
+##
+## Check the RPM version (paranoid)
+##
+case $RPMVER in
+    4*)
+       echo "Supported RPM version [$RPMVER]"
+       ;;
+    *)
+       echo "Unknown RPM version: `rpm --version`"
+       exit 1
+       ;;
+esac
+
+pushd .
+cd ../../source
+if [ -f Makefile ]; then 
+	make distclean
+fi
+popd
+
+pushd .
+cd ../../../
+chown -R ${USERID}.${GRPID} samba-${VERSION}${REVISION}
+if [ ! -d samba-${VERSION} ]; then
+	ln -s samba-${VERSION}${REVISION} samba-${VERSION} || exit 1
+fi
+echo -n "Creating samba-${VERSION}.tar.bz2 ... "
+tar --exclude=.svn -cf - samba-${VERSION}/. | bzip2 > ${SRCDIR}/samba-${VERSION}.tar.bz2
+echo "Done."
+if [ $? -ne 0 ]; then
+        echo "Build failed!"
+        exit 1
+fi
+
+popd
+
+
+##
+## copy additional source files
+##
+chmod 755 setup/filter-requires-samba.sh
+tar --exclude=.svn -jcvf - setup > ${SRCDIR}/setup.tar.bz2
+cp -p ${SPECFILE} ${SPECDIR}
+
+##
+## Build
+##
+echo "$(basename $0): Getting Ready to build release package"
+cd ${SPECDIR}
+${RPM} -ba --clean --rmsource $EXTRA_OPTIONS $SPECFILE
+
+echo "$(basename $0): Done."
+

Copied: branches/samba/upstream/packaging/RHEL/samba.spec (from rev 1928, branches/samba/upstream/packaging/RHEL/samba.spec)
===================================================================
--- branches/samba/upstream/packaging/RHEL/samba.spec	                        (rev 0)
+++ branches/samba/upstream/packaging/RHEL/samba.spec	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,506 @@
+%define initdir %{_sysconfdir}/rc.d/init.d
+%define auth %(test -f /etc/pam.d/system-auth && echo /etc/pam.d/system-auth || echo)
+
+Summary: Samba SMB client and server
+Vendor: Samba Team
+Packager: Samba Team <samba at samba.org>
+Name:         samba
+Version:      3.0.30
+Release:      1
+Epoch:        0
+License: GNU GPL version 2
+Group: System Environment/Daemons
+URL: http://www.samba.org/
+
+Source: samba-%{version}.tar.bz2
+
+# Don't depend on Net::LDAP
+Source998: filter-requires-samba.sh
+Source999: setup.tar.bz2
+
+Prereq: /sbin/chkconfig /bin/mktemp /usr/bin/killall
+Prereq: fileutils sed /etc/init.d
+
+Requires: pam >= 0.64 %{auth} 
+Requires: samba-common = %{version}-%{release}
+Requires: logrotate >= 3.4 initscripts >= 5.54-1
+Provides: samba = %{version}
+
+Prefix: /usr
+BuildRoot: %{_tmppath}/%{name}-%{version}-root
+BuildRequires: pam-devel, readline-devel, fileutils, libacl-devel, openldap-devel, krb5-devel, cups-devel
+
+# Working around perl dependency problem from docs
+%define __perl_requires %{SOURCE998}
+
+
+%description
+Samba is the protocol by which a lot of PC-related machines share
+files, printers, and other information (such as lists of available
+files and printers). The Windows NT, OS/2, and Linux operating systems
+support this natively, and add-on packages can enable the same thing
+for DOS, Windows, VMS, UNIX of all kinds, MVS, and more. This package
+provides an SMB server that can be used to provide network services to
+SMB (sometimes called "Lan Manager") clients. Samba uses NetBIOS over
+TCP/IP (NetBT) protocols and does NOT need the NetBEUI (Microsoft Raw
+NetBIOS frame) protocol.
+
+
+#######################################################################
+%package client
+Summary: Samba (SMB) client programs.
+Group: Applications/System
+Requires: samba-common = %{version}-%{release}
+Obsoletes: smbfs
+Provides: samba-client = %{version}-%{release}
+
+%description client
+The samba-client package provides some SMB clients to compliment the
+built-in SMB filesystem in Linux. These clients allow access of SMB
+shares and printing to SMB printers.
+
+
+#######################################################################
+%package common
+Summary: Files used by both Samba servers and clients.
+Group: Applications/System
+Provides: samba-common = %{version}-%{release}
+
+%description common
+Samba-common provides files necessary for both the server and client
+packages of Samba.
+
+
+#######################################################################
+%package swat
+Summary: The Samba SMB server configuration program.
+Group: Applications/System
+Requires: samba = %{version} xinetd
+Provides: samba-swat = %{version}-%{release}
+
+%description swat
+The samba-swat package includes the new SWAT (Samba Web Administration
+Tool), for remotely managing Samba's smb.conf file using your favorite
+Web browser.
+
+
+#######################################################################
+%package doc
+Summary:      Samba Documentation
+Group:        Documentation/Other
+Provides:     samba-doc = %{version}-%{release}
+Prereq:       /usr/bin/find /bin/rm /usr/bin/xargs
+
+%description doc
+The samba-doc package includes the HTML versions of the Samba manpages
+utilized by SWAT as well as the HTML and PDF version of "Using Samba",
+"Samba By Example", and "The Official Samba HOWTO and Reference Guide".
+
+
+#######################################################################
+
+%prep
+%setup -q
+
+# setup the vendor files (init scripts, etc...)
+%setup -T -D -a 999 -n samba-%{version} -q
+
+%build
+
+/bin/cp setup/filter-requires-samba.sh %{SOURCE998}
+
+cd source
+# RPM_OPT_FLAGS="$RPM_OPT_FLAGS -D_FILE_OFFSET_BITS=64"
+
+## check for ccache
+# ccache -h 2>&1 > /dev/null
+#if [ $? -eq 0 ]; then
+#	CC="ccache gcc"
+#else
+	CC="gcc"
+#fi 
+
+## always run autogen.sh
+./autogen.sh
+
+CFLAGS="$RPM_OPT_FLAGS $EXTRA -D_GNU_SOURCE" ./configure \
+	--prefix=%{_prefix} \
+	--localstatedir=/var \
+        --with-configdir=%{_sysconfdir}/samba \
+        --with-libdir=%{_libdir}/samba \
+        --with-lockdir=/var/lib/samba \
+        --with-logfilebase=/var/log/samba \
+        --with-mandir=%{_mandir} \
+        --with-piddir=/var/run \
+	--with-privatedir=%{_sysconfdir}/samba \
+        --with-sambabook=%{_datadir}/swat/using_samba \
+        --with-swatdir=%{_datadir}/swat \
+	--enable-cups \
+        --with-acl-support \
+	--with-ads \
+        --with-automount \
+        --with-fhs \
+	--with-pam_smbpass \
+	--with-libsmbclient \
+	--with-libsmbsharemodes \
+        --without-smbwrapper \
+	--with-pam \
+	--with-quotas \
+	--with-shared-modules=idmap_rid,idmap_ad \
+	--with-smbmount \
+	--with-syslog \
+	--with-utmp \
+	--with-dnsupdate
+
+make showlayout
+
+make CFLAGS="$RPM_OPT_FLAGS -D_GNU_SOURCE"  proto 
+
+## check for gcc 3.4 or later
+CC_VERSION=`${CC} --version | head -1 | awk '{print $3}'`
+CC_MAJOR=`echo ${CC_VERSION} | cut -d. -f 1`
+CC_MINOR=`echo ${CC_VERSION} | cut -d. -f 2`
+if [ ${CC_MAJOR} -ge 3 ]; then
+        if [ ${CC_MAJOR} -gt 3 -o ${CC_MINOR} -ge 4 ]; then
+                make pch
+        fi
+fi
+
+
+make CFLAGS="$RPM_OPT_FLAGS -D_GNU_SOURCE" %{?_smp_mflags} \
+	all modules pam_smbpass
+
+## build the cifs fs mount helper
+cd client
+gcc  -o mount.cifs $RPM_OPT_FLAGS  -D_GNU_SOURCE -Wall -D_GNU_SOURCE -D_LARGEFILE64_SOURCE mount.cifs.c
+gcc  -o umount.cifs $RPM_OPT_FLAGS  -D_GNU_SOURCE -Wall -D_GNU_SOURCE -D_LARGEFILE64_SOURCE umount.cifs.c
+cd ..
+
+# Remove some permission bits to avoid to many dependencies
+cd ..
+find examples docs -type f | xargs -r chmod -x
+
+%install
+# Clean up in case there is trash left from a previous build
+rm -rf $RPM_BUILD_ROOT
+
+# Create the target build directory hierarchy
+mkdir -p $RPM_BUILD_ROOT%{_datadir}/swat/{help,include,using_samba/{figs,gifsa}}
+mkdir -p $RPM_BUILD_ROOT%{_includedir}
+mkdir -p $RPM_BUILD_ROOT%{_initrddir}
+mkdir -p $RPM_BUILD_ROOT{%{_libdir},%{_includedir}}
+mkdir -p $RPM_BUILD_ROOT%{_libdir}/samba/{auth,charset,idmap,vfs,pdb}
+mkdir -p $RPM_BUILD_ROOT/%{_lib}/security
+mkdir -p $RPM_BUILD_ROOT%{_mandir}
+mkdir -p $RPM_BUILD_ROOT%{_prefix}/{bin,sbin}
+mkdir -p $RPM_BUILD_ROOT%{_prefix}/lib
+mkdir -p $RPM_BUILD_ROOT/sbin
+mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/{logrotate.d,pam.d,samba}
+mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/{pam.d,logrotate.d}
+mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/rc.d/init.d
+mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/{samba,sysconfig}
+mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/xinetd.d
+mkdir -p $RPM_BUILD_ROOT/var/lib/samba/winbindd_privileged
+mkdir -p $RPM_BUILD_ROOT/var/{log,run/winbindd,spool}/samba
+
+cd source
+make DESTDIR=$RPM_BUILD_ROOT \
+        install
+cd ..
+
+# pam_smbpass
+cp source/bin/pam_smbpass.so $RPM_BUILD_ROOT/%{_lib}/security/pam_smbpass.so
+
+# NSS & PAM winbind support
+install -m 755 source/bin/pam_winbind.so $RPM_BUILD_ROOT/%{_lib}/security/pam_winbind.so
+install -m 755 source/nsswitch/libnss_winbind.so $RPM_BUILD_ROOT/%{_lib}/libnss_winbind.so
+install -m 755 source/nsswitch/libnss_wins.so $RPM_BUILD_ROOT/%{_lib}/libnss_wins.so
+( cd $RPM_BUILD_ROOT/%{_lib};
+  ln -sf libnss_winbind.so  libnss_winbind.so.2;
+  ln -sf libnss_wins.so  libnss_wins.so.2 )
+
+# make install puts libsmbclient.so in the wrong place on x86_64
+rm -f $RPM_BUILD_ROOT/usr/lib*/samba/libsmbclient.so $RPM_BUILD_ROOT/usr/lib*/samba/libsmbclient.a || true
+install -m 755 source/bin/libsmbclient.so $RPM_BUILD_ROOT%{_libdir}/libsmbclient.so
+install -m 755 source/bin/libsmbclient.a $RPM_BUILD_ROOT%{_libdir}/libsmbclient.a
+install -m 644 source/include/libsmbclient.h $RPM_BUILD_ROOT%{_includedir}
+ln -s %{_libdir}/libsmbclient.so $RPM_BUILD_ROOT%{_libdir}/libsmbclient.so.0
+
+# make install puts libmsrpc.so in the wrong place on x86_64
+rm -f $RPM_BUILD_ROOT/usr/lib*/samba/libmsrpc.so $RPM_BUILD_ROOT/usr/lib*/samba/libmsrpc.a || true
+install -m 755 source/bin/libmsrpc.so $RPM_BUILD_ROOT%{_libdir}/libmsrpc.so
+install -m 755 source/bin/libmsrpc.a $RPM_BUILD_ROOT%{_libdir}/libmsrpc.a
+install -m 644 source/include/libmsrpc.h $RPM_BUILD_ROOT%{_includedir}
+rm -f $RPM_BUILD_ROOT%{_libdir}/samba/libmsrpc.*
+ln -s /%{_libdir}/libmsrpc.so $RPM_BUILD_ROOT%{_libdir}/libmsrpc.so.0
+
+# make install puts libsmbsharemodes.so in the wrong place on x86_64
+rm -f $RPM_BUILD_ROOT/usr/lib*/samba/libsmbsharemodes.so $RPM_BUILD_ROOT/usr/lib*/samba/libsmbsharemodes.a || true
+install -m 755 source/bin/libsmbsharemodes.so $RPM_BUILD_ROOT%{_libdir}/libsmbsharemodes.so
+install -m 755 source/bin/libsmbsharemodes.a $RPM_BUILD_ROOT%{_libdir}/libsmbsharemodes.a
+install -m 644 source/include/smb_share_modes.h $RPM_BUILD_ROOT%{_includedir}
+rm -f $RPM_BUILD_ROOT%{_libdir}/samba/libsmbsharemodes.*
+ln -s /%{_libdir}/libsmbsharemodes.so $RPM_BUILD_ROOT%{_libdir}/libsmbsharemodes.so.0
+
+# Install pam_smbpass.so
+install -m755 source/bin/pam_smbpass.so $RPM_BUILD_ROOT/%{_lib}/security/pam_smbpass.so
+
+## cleanup
+/bin/rm -rf $RPM_BUILD_ROOT/usr/lib*/samba/security
+
+# we need a symlink for mount to recognise the smb and smbfs filesystem types
+ln -sf %{_prefix}/bin/smbmount $RPM_BUILD_ROOT/sbin/mount.smbfs
+ln -sf %{_prefix}/bin/smbmount $RPM_BUILD_ROOT/sbin/mount.smb
+/bin/rm -f $RPM_BUILD_ROOT/mount.smbfs
+
+# Install the miscellany
+echo 127.0.0.1 localhost > $RPM_BUILD_ROOT%{_sysconfdir}/samba/lmhosts
+
+install -m644 setup/samba.log $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/samba
+install -m644 setup/swat $RPM_BUILD_ROOT%{_sysconfdir}/xinetd.d/swat
+install -m644 setup/samba.sysconfig $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/samba
+install -m755 setup/smb.init $RPM_BUILD_ROOT%{initdir}/smb
+install -m755 setup/winbind.init $RPM_BUILD_ROOT%{initdir}/winbind
+install -m644 setup/samba.pamd $RPM_BUILD_ROOT%{_sysconfdir}/pam.d/samba
+install -m755 setup/smbprint $RPM_BUILD_ROOT%{_bindir}
+install -m644 setup/smbusers $RPM_BUILD_ROOT%{_sysconfdir}/samba/smbusers
+install -m644 setup/smb.conf $RPM_BUILD_ROOT%{_sysconfdir}/samba/smb.conf
+install -m755 source/client/mount.cifs $RPM_BUILD_ROOT/sbin/mount.cifs
+install -m755 source/client/umount.cifs $RPM_BUILD_ROOT/sbin/umount.cifs
+install -m755 source/script/mksmbpasswd.sh $RPM_BUILD_ROOT%{_bindir}
+
+/bin/rm $RPM_BUILD_ROOT%{_sbindir}/*mount.cifs
+
+ln -s ../..%{initdir}/smb  $RPM_BUILD_ROOT%{_sbindir}/samba
+ln -s ../..%{initdir}/winbind  $RPM_BUILD_ROOT%{_sbindir}/winbind
+
+# Remove "*.old" files
+find $RPM_BUILD_ROOT -name "*.old" -exec rm -f {} \;
+
+## don't duplicate the docs.  These are installed by/with SWAT
+rm -rf docs/htmldocs
+rm -rf docs/manpages
+( cd docs; ln -s %{_prefix}/share/swat/help htmldocs )
+
+##
+## Clean out man pages for tools not installed here
+##
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/log2pcap.1*
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/smbsh.1*
+rm -f $RPM_BUILD_ROOT%{_mandir}/man5/vfstest.1*
+
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%post
+## deal with an upgrade from a broken 3.0.21b RPM
+if [ "$1" -eq "2" ]; then
+	if [ -d /var/cache/samba ]; then
+		for file in `ls /var/cache/samba/*tdb`; do
+			/bin/cp -up $file /var/lib/samba/`basename $file`
+		done
+		mkdir -p /var/lib/samba/eventlog
+		for file in `ls /var/cache/samba/eventlog/*tdb`; do
+			/bin/cp -up $file /var/lib/samba/eventlog/`basename $file`
+		done
+		/bin/mv /var/cache/samba /var/cache/samba.moved
+        fi
+fi
+
+%preun
+if [ $1 = 0 ] ; then
+    /sbin/chkconfig --del smb
+    /sbin/chkconfig --del winbind
+    # rm -rf /var/log/samba/* /var/lib/samba/*
+    /sbin/service smb stop >/dev/null 2>&1
+fi
+exit 0
+
+%postun
+if [ "$1" -ge "1" ]; then
+	%{initdir}/smb restart >/dev/null 2>&1
+fi	
+
+
+%post swat
+# Add swat entry to /etc/services if not already there.
+if [ ! "`grep ^\s**swat /etc/services`" ]; then
+        echo 'swat        901/tcp     # Add swat service used via inetd' >> /etc/services
+fi
+
+%post common
+/sbin/ldconfig
+
+%postun common 
+/sbin/ldconfig
+
+#######################################################################
+## Files section                                                     ##
+#######################################################################
+
+%files
+%defattr(-,root,root)
+
+%config(noreplace) %{_sysconfdir}/sysconfig/samba
+%config(noreplace) %{_sysconfdir}/samba/smbusers
+%attr(755,root,root) %config %{initdir}/smb
+%attr(755,root,root) %config %{initdir}/winbind
+%config(noreplace) %{_sysconfdir}/logrotate.d/samba
+%config(noreplace) %{_sysconfdir}/pam.d/samba
+
+%attr(0755,root,root) %dir /var/log/samba
+%attr(0755,root,root) %dir /var/lib/samba
+%attr(1777,root,root) %dir /var/spool/samba
+
+%{_sbindir}/samba
+%{_sbindir}/winbind
+
+%{_sbindir}/smbd
+%{_sbindir}/nmbd
+%{_sbindir}/winbindd
+
+%{_bindir}/mksmbpasswd.sh
+%{_bindir}/smbcontrol
+%{_bindir}/smbstatus
+%{_bindir}/tdbbackup
+%{_bindir}/tdbtool
+%{_bindir}/tdbdump
+%{_bindir}/wbinfo
+%{_bindir}/ntlm_auth
+%{_bindir}/pdbedit
+%{_bindir}/eventlogadm
+
+%{_libdir}/samba/idmap/*.so
+%{_libdir}/samba/nss_info/*.so
+%{_libdir}/samba/vfs/*.so
+%{_libdir}/samba/auth/*.so
+
+%{_mandir}/man1/smbcontrol.1*
+%{_mandir}/man1/smbstatus.1*
+%{_mandir}/man1/vfstest.1*
+%{_mandir}/man5/smbpasswd.5*
+%{_mandir}/man7/samba.7*
+%{_mandir}/man8/nmbd.8*
+%{_mandir}/man8/pdbedit.8*
+%{_mandir}/man8/smbd.8*
+%{_mandir}/man8/tdbbackup.8*
+%{_mandir}/man8/tdbdump.8*
+%{_mandir}/man8/tdbtool.8*
+%{_mandir}/man8/eventlogadm.8*
+%{_mandir}/man8/winbindd.8*
+%{_mandir}/man1/ntlm_auth.1*
+%{_mandir}/man1/wbinfo.1*
+%{_mandir}/man8/vfs_*.8*
+%{_mandir}/man8/idmap_*.8*
+
+
+##########
+
+%files doc
+%defattr(-,root,root)
+%doc README COPYING Manifest 
+%doc WHATSNEW.txt Roadmap
+%doc docs
+%doc examples/autofs examples/LDAP examples/libsmbclient examples/misc examples/printer-accounting
+%doc examples/printing
+%doc %{_datadir}/swat/help
+%doc %{_datadir}/swat/using_samba
+
+##########
+
+%files swat
+%defattr(-,root,root)
+%config(noreplace) %{_sysconfdir}/xinetd.d/swat
+%dir %{_datadir}/swat
+%{_datadir}/swat/include
+%{_datadir}/swat/images
+%{_datadir}/swat/lang
+%{_sbindir}/swat
+%{_mandir}/man8/swat.8*
+
+##########
+
+%files client
+%defattr(-,root,root)
+/sbin/mount.smb
+/sbin/mount.smbfs
+/sbin/mount.cifs
+/sbin/umount.cifs
+
+%{_bindir}/rpcclient
+%{_bindir}/smbcacls
+%{_bindir}/smbmount
+%{_bindir}/smbmnt
+%{_bindir}/smbumount
+%{_bindir}/findsmb
+%{_bindir}/smbcquotas
+%{_bindir}/nmblookup
+%{_bindir}/smbget
+%{_bindir}/smbclient
+%{_bindir}/smbprint
+%{_bindir}/smbspool
+%{_bindir}/smbtar
+%{_bindir}/net
+%{_bindir}/smbtree
+
+%{_mandir}/man8/smbmnt.8*
+%{_mandir}/man8/smbmount.8*
+%{_mandir}/man8/smbumount.8*
+%{_mandir}/man8/mount.cifs.8.*
+%{_mandir}/man8/umount.cifs.8.*
+%{_mandir}/man8/smbspool.8*
+%{_mandir}/man1/smbget.1*
+%{_mandir}/man5/smbgetrc.5*
+%{_mandir}/man1/findsmb.1*
+%{_mandir}/man1/nmblookup.1*
+%{_mandir}/man1/rpcclient.1*
+%{_mandir}/man1/smbcacls.1*
+%{_mandir}/man1/smbclient.1*
+%{_mandir}/man1/smbtar.1*
+%{_mandir}/man1/smbtree.1*
+%{_mandir}/man8/net.8*
+%{_mandir}/man1/smbcquotas.1*
+
+##########
+
+%files common
+%defattr(-,root,root)
+%dir %{_sysconfdir}/samba
+%config(noreplace) %{_sysconfdir}/samba/smb.conf
+%config(noreplace) %{_sysconfdir}/samba/lmhosts
+
+%attr(755,root,root) /%{_lib}/libnss_wins.so*
+%attr(755,root,root) /%{_lib}/libnss_winbind.so*
+%attr(755,root,root) /%{_lib}/security/pam_winbind.so
+%attr(755,root,root) /%{_lib}/security/pam_smbpass.so
+
+%{_includedir}/libsmbclient.h
+%{_libdir}/libsmbclient.*
+%{_includedir}/libmsrpc.h
+%{_libdir}/libmsrpc.*
+%{_includedir}/smb_share_modes.h
+%{_libdir}/libsmbsharemodes.*
+
+%{_libdir}/samba/*.dat
+%{_libdir}/samba/*.msg
+%{_libdir}/samba/charset/*.so
+
+%{_bindir}/testparm
+%{_bindir}/smbpasswd
+%{_bindir}/profiles
+
+%{_mandir}/man1/profiles.1*
+%{_mandir}/man1/testparm.1*
+%{_mandir}/man5/smb.conf.5*
+%{_mandir}/man5/lmhosts.5*
+%{_mandir}/man8/smbpasswd.8*
+%{_mandir}/man7/libsmbclient.7*
+%{_mandir}/man7/pam_winbind.7*
+
+%changelog
+* Fri Jan 16 2004 Gerald (Jerry) Carter <jerry at samba,org>
+- Removed ChangeLog entries since they are kept in CVS
+
+
+

Copied: branches/samba/upstream/pcp/Install (from rev 1928, branches/samba/upstream/pcp/Install)
===================================================================
--- branches/samba/upstream/pcp/Install	                        (rev 0)
+++ branches/samba/upstream/pcp/Install	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,64 @@
+#! /bin/sh
+#
+# Copyright (c) 2000 Silicon Graphics, Inc.  All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of version 2 of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it would be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#
+# Further, this software is distributed without any warranty that it is
+# free of the rightful claim of any third person regarding infringement
+# or the like.  Any license provided herein, whether implied or
+# otherwise, applies only to this software file.  Patent licenses, if
+# any, provided herein do not apply to combinations of this program with
+# other software, or any other product whatsoever.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write the Free Software Foundation, Inc., 59
+# Temple Place - Suite 330, Boston MA 02111-1307, USA.
+#
+# Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
+# Mountain View, CA  94043, or:
+#
+# http://www.sgi.com
+#
+# For further information regarding this notice, see:
+#
+# http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
+#
+# Install the samba PMDA and/or PMNS
+#
+
+# source the PCP configuration environment variables
+. /etc/pcp.env
+
+# Get the common procedures and variable assignments
+#
+. $PCP_SHARE_DIR/lib/pmdaproc.sh
+
+# The name of the PMDA
+#
+iam=samba
+
+# override interactive dialog from pmdaproc.sh
+#
+__choose_mode()
+{
+    echo "Installing the \"$iam\" Performance Metrics Domain Agent (PMDA) ..."
+    echo
+}
+
+# Using libpcp_pmda.so.2 and PMDA_INTERFACE_2
+#
+pmda_interface=2
+
+# Do it
+#
+pmdaSetup
+pmdaInstall
+
+exit 0

Copied: branches/samba/upstream/pcp/Makefile (from rev 1928, branches/samba/upstream/pcp/Makefile)
===================================================================
--- branches/samba/upstream/pcp/Makefile	                        (rev 0)
+++ branches/samba/upstream/pcp/Makefile	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,74 @@
+#!make
+#
+# Copyright (c) 2000 Silicon Graphics, Inc.  All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of version 2 of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it would be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#
+# Further, this software is distributed without any warranty that it is
+# free of the rightful claim of any third person regarding infringement
+# or the like.  Any license provided herein, whether implied or
+# otherwise, applies only to this software file.  Patent licenses, if
+# any, provided herein do not apply to combinations of this program with
+# other software, or any other product whatsoever.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write the Free Software Foundation, Inc., 59
+# Temple Place - Suite 330, Boston MA 02111-1307, USA.
+#
+# Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
+# Mountain View, CA  94043, or:
+#
+# http://www.sgi.com
+#
+# For further information regarding this notice, see:
+#
+# http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
+#
+
+SHELL   = sh
+
+include /etc/pcp.conf
+
+IAM	= samba
+CFILES	= $(IAM).c
+
+LIBTARGET = pmda_$(IAM).so
+CMDTARGET = pmda$(IAM)
+TARGETS = $(LIBTARGET) $(CMDTARGET)
+
+DEBUG   = -DDEBUG
+CFLAGS	= $(DEBUG)
+LDOPTS	=
+LDLIBS	= -lpcp_pmda -lpcp
+DSOOPTS	= -shared
+LDIRT	= profile.h metrics.h so_locations *.log help.dir help.pag *.pmda_$(IAM).so
+
+PROFILEHEADER = ../source/include/smbprofile.h
+
+INSTALL	= install
+CC	= cc
+
+default: $(TARGETS)
+
+install:	default
+
+$(CMDTARGET):	profile.h metrics.h $(CFILES)
+	$(CC) $(CFLAGS) $(CFILES) $(LDOPTS) $(LDLIBS) -o $@
+
+$(LIBTARGET):	profile.h metrics.h $(CFILES)
+	$(CC) $(CFLAGS) $(DSOOPTS) $(LDOPTS) $(CFILES) $(LDLIBS) -o $@
+
+metrics.h:	profile.h mkheader.pl
+	./mkheader.pl
+
+profile.h: 	$(PROFILEHEADER)
+	ln -s $(PROFILEHEADER) $@
+
+clobber clean:
+	rm -f $(LDIRT) $(TARGETS)

Modified: branches/samba/upstream/pcp/README
===================================================================
--- branches/samba/upstream/pcp/README	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/pcp/README	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,9 +1,3 @@
-NOTE! The samba.c source in this directory has been removed pending
-approval from SGI to use it under the GPLv3 license.
-
-Please see Samba 3.0.xx for a copy of this code under the GPLv2
-license if required.
-
 samba PMDA
 ===========
 

Copied: branches/samba/upstream/pcp/Remove (from rev 1928, branches/samba/upstream/pcp/Remove)
===================================================================
--- branches/samba/upstream/pcp/Remove	                        (rev 0)
+++ branches/samba/upstream/pcp/Remove	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,52 @@
+#! /bin/sh
+#
+# Copyright (c) 2000 Silicon Graphics, Inc.  All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of version 2 of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it would be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#
+# Further, this software is distributed without any warranty that it is
+# free of the rightful claim of any third person regarding infringement
+# or the like.  Any license provided herein, whether implied or
+# otherwise, applies only to this software file.  Patent licenses, if
+# any, provided herein do not apply to combinations of this program with
+# other software, or any other product whatsoever.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write the Free Software Foundation, Inc., 59
+# Temple Place - Suite 330, Boston MA 02111-1307, USA.
+#
+# Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
+# Mountain View, CA  94043, or:
+#
+# http://www.sgi.com
+#
+# For further information regarding this notice, see:
+#
+# http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
+#
+# Remove the samba PMDA
+#
+
+# source the PCP configuration environment variables
+. /etc/pcp.env
+
+# Get the common procedures and variable assignments
+#
+. $PCP_SHARE_DIR/lib/pmdaproc.sh
+
+# The name of the PMDA
+#
+iam=samba
+
+# Do it
+#
+pmdaSetup
+pmdaRemove
+
+exit 0

Copied: branches/samba/upstream/pcp/samba.c (from rev 1928, branches/samba/upstream/pcp/samba.c)
===================================================================
--- branches/samba/upstream/pcp/samba.c	                        (rev 0)
+++ branches/samba/upstream/pcp/samba.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,390 @@
+/*
+ * Samba, configurable PMDA
+ *
+ * Copyright (c) 2000 Silicon Graphics, Inc.  All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it would be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Further, this software is distributed without any warranty that it is
+ * free of the rightful claim of any third person regarding infringement
+ * or the like.  Any license provided herein, whether implied or
+ * otherwise, applies only to this software file.  Patent licenses, if
+ * any, provided herein do not apply to combinations of this program with
+ * other software, or any other product whatsoever.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write the Free Software Foundation, Inc., 59
+ * Temple Place - Suite 330, Boston MA 02111-1307, USA.
+ *
+ * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
+ * Mountain View, CA  94043, or:
+ *
+ * http://www.sgi.com
+ *
+ * For further information regarding this notice, see:
+ *
+ * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
+ */
+
+typedef int BOOL;
+
+#define IRIX 1
+
+#include <stdio.h>
+#include <sys/shm.h>
+#include <pcp/pmapi.h>
+#ifdef IRIX
+#include <pcp/impl.h>
+#endif
+#include <pcp/pmda.h>
+#include "domain.h"
+#include "profile.h"
+#include "metrics.h"
+
+static pmdaInstid *counttime = NULL;
+static pmdaInstid *bytes = NULL;
+
+/*
+ * List of instance domains
+ */
+
+static pmdaIndom indomtab[] = {
+	{COUNT_TIME_INDOM,0,NULL},
+	{BYTE_INDOM,0,NULL}
+};
+/*
+ * all metrics supported in this PMDA - one table entry for each
+ */
+
+static pmdaMetric metrictab[] = {
+/* smbd.smb_count */
+    { NULL, { PMDA_PMID(0,0), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, 
+		{ 0,0,1,0,0,PM_COUNT_ONE} }, },
+/* smbd.uid_changes */
+    { NULL, { PMDA_PMID(0,1), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, 
+		{ 0,0,1,0,0,PM_COUNT_ONE} }, },
+/* statcache.lookups */
+    { NULL, { PMDA_PMID(1,0), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, 
+		{ 0,0,1,0,0,PM_COUNT_ONE} }, },
+/* statcache.misses */
+    { NULL, { PMDA_PMID(1,1), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, 
+		{ 0,0,1,0,0,PM_COUNT_ONE} }, },
+/* statcache.hits */
+    { NULL, { PMDA_PMID(1,2), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, 
+		{ 0,0,1,0,0,PM_COUNT_ONE} }, },
+/* writecache.num_caches */
+    { NULL, { PMDA_PMID(2,0), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, 
+		{ 0,0,1,0,0,PM_COUNT_ONE} }, },
+/* writecache.allocated_caches */
+    { NULL, { PMDA_PMID(2,1), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, 
+		{ 0,0,1,0,0,PM_COUNT_ONE} }, },
+/* writecache.read_hits */
+    { NULL, { PMDA_PMID(2,2), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, 
+		{ 0,0,1,0,0,PM_COUNT_ONE} }, },
+/* writecache.total_writes */
+    { NULL, { PMDA_PMID(2,3), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, 
+		{ 0,0,1,0,0,PM_COUNT_ONE} }, },
+/* writecache.init_writes */
+    { NULL, { PMDA_PMID(2,4), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, 
+		{ 0,0,1,0,0,PM_COUNT_ONE} }, },
+/* writecache.abutted_writes */
+    { NULL, { PMDA_PMID(2,5), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, 
+		{ 0,0,1,0,0,PM_COUNT_ONE} }, },
+/* writecache.perfect_writes */
+    { NULL, { PMDA_PMID(2,6), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, 
+		{ 0,0,1,0,0,PM_COUNT_ONE} }, },
+/* writecache.direct_writes */
+    { NULL, { PMDA_PMID(2,7), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, 
+		{ 0,0,1,0,0,PM_COUNT_ONE} }, },
+/* writecache.non_oplock_writes */
+    { NULL, { PMDA_PMID(2,8), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, 
+		{ 0,0,1,0,0,PM_COUNT_ONE} }, },
+/* writecache.seek_flush */
+    { NULL, { PMDA_PMID(2,9), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, 
+		{ 0,0,1,0,0,PM_COUNT_ONE} }, },
+/* writecache.read_flush */
+    { NULL, { PMDA_PMID(2,10), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, 
+		{ 0,0,1,0,0,PM_COUNT_ONE} }, },
+/* writecache.write_flush */
+    { NULL, { PMDA_PMID(2,11), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, 
+		{ 0,0,1,0,0,PM_COUNT_ONE} }, },
+/* writecache.readraw_flush */
+    { NULL, { PMDA_PMID(2,12), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, 
+		{ 0,0,1,0,0,PM_COUNT_ONE} }, },
+/* writecache.oplock_rel_flush */
+    { NULL, { PMDA_PMID(2,13), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, 
+		{ 0,0,1,0,0,PM_COUNT_ONE} }, },
+/* writecache.close_flush */
+    { NULL, { PMDA_PMID(2,14), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, 
+		{ 0,0,1,0,0,PM_COUNT_ONE} }, },
+/* writecache.sync_flush */
+    { NULL, { PMDA_PMID(2,15), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, 
+		{ 0,0,1,0,0,PM_COUNT_ONE} }, },
+/* writecache.size_change_flush */
+    { NULL, { PMDA_PMID(2,16), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, 
+		{ 0,0,1,0,0,PM_COUNT_ONE} }, },
+/* counts instance domain */
+    { NULL, { PMDA_PMID(3,0), PM_TYPE_U32, COUNT_TIME_INDOM, PM_SEM_COUNTER, 
+		{ 0,0,1,0,0,PM_COUNT_ONE} }, },
+/* times instance domain */
+    { NULL, { PMDA_PMID(4,0), PM_TYPE_U32, COUNT_TIME_INDOM, PM_SEM_COUNTER, 
+		{ 0,1,0,0,PM_TIME_USEC,0} }, },
+/* bytes instance domain */
+    { NULL, { PMDA_PMID(5,0), PM_TYPE_U32, BYTE_INDOM, PM_SEM_COUNTER, 
+		{ 1,0,0,PM_SPACE_BYTE,0,0} }, }
+
+};
+
+extern int	errno;
+struct profile_stats	*stats;
+struct profile_header	*shmheader;
+int		shmid = -1;
+
+
+int
+samba_fetchCallBack(pmdaMetric *mdesc, unsigned int inst, pmAtomValue *atom)
+{
+    __pmID_int		*idp = (__pmID_int *)&(mdesc->m_desc.pmid);
+    
+
+    if (inst != PM_IN_NULL && mdesc->m_desc.indom == PM_INDOM_NULL)
+	return PM_ERR_INST;
+
+    if (idp->cluster == 0) {
+	switch (idp->item) {
+	    case 0:			/* smbd.smb_count */
+		atom->ul = stats->smb_count;
+		break;
+	    case 1:			/* smb.uid_changes */
+		atom->ul = stats->uid_changes;
+		break;
+	    default:
+		return PM_ERR_PMID;
+	}
+    }
+    else if (idp->cluster == 1) {	/* statcache */
+	switch (idp->item) {
+	    case 0:			/* statcache.lookups */
+		atom->ul = stats->statcache_lookups;
+		break;
+	    case 1:			/* statcache.misses */
+		atom->ul = stats->statcache_misses;
+		break;
+	    case 2:			/* statcache.hits */
+		atom->ul = stats->statcache_hits;
+		break;
+	    default:
+		return PM_ERR_PMID;
+	}
+    }
+    else if (idp->cluster == 2) {	/* writecache */
+	switch (idp->item) {
+	    case 0:			/* writecache.num_caches */
+		atom->ul = stats->writecache_num_write_caches;
+		break;
+	    case 1:			/* writecache.allocated_caches */
+		atom->ul = stats->writecache_allocated_write_caches;
+		break;
+	    case 2:			/* writecache.read_hits */
+		atom->ul = stats->writecache_read_hits;
+		break;
+	    case 3:			/* writecache.total_writes */
+		atom->ul = stats->writecache_total_writes;
+		break;
+	    case 4:			/* writecache.init_writes */
+		atom->ul = stats->writecache_init_writes;
+		break;
+	    case 5:			/* writecache.abutted_writes */
+		atom->ul = stats->writecache_abutted_writes;
+		break;
+	    case 6:			/* writecache.perfect_writes */
+		atom->ul = stats->writecache_num_perfect_writes;
+		break;
+	    case 7:			/* writecache.direct_writes */
+		atom->ul = stats->writecache_direct_writes;
+		break;
+	    case 8:			/* writecache.non_oplock_writes */
+		atom->ul = stats->writecache_non_oplock_writes;
+		break;
+	    case 9:			/* writecache.seek_flush */
+		atom->ul = stats->writecache_flushed_writes[SEEK_FLUSH];
+		break;
+	    case 10:			/* writecache.read_flush */
+		atom->ul = stats->writecache_flushed_writes[READ_FLUSH];
+		break;
+	    case 11:			/* writecache.write_flush */
+		atom->ul = stats->writecache_flushed_writes[WRITE_FLUSH];
+		break;
+	    case 12:			/* writecache.readraw_flush */
+		atom->ul = stats->writecache_flushed_writes[READRAW_FLUSH];
+		break;
+	    case 13:			/* writecache.oplock_rel_flush */
+		atom->ul = stats->writecache_flushed_writes[OPLOCK_RELEASE_FLUSH];
+		break;
+	    case 14:			/* writecache.close_flush */
+		atom->ul = stats->writecache_flushed_writes[CLOSE_FLUSH];
+		break;
+	    case 15:			/* writecache.sync_flush */
+		atom->ul = stats->writecache_flushed_writes[SYNC_FLUSH];
+		break;
+	    case 16:			/* writecache.size_change_flush */
+		atom->ul = stats->writecache_flushed_writes[SIZECHANGE_FLUSH];
+		break;
+	    default:
+		return PM_ERR_PMID;
+	}
+    }
+    else if (idp->cluster == 3) {	/* counts */
+	if (idp->item == 0) {
+	    if (inst < indomtab[COUNT_TIME_INDOM].it_numinst) {
+		unsigned *p;
+
+		p = (unsigned *)((unsigned)stats + samba_counts[inst].offset);
+		atom->ul = *p;
+	    }
+	    else
+		return PM_ERR_INST;
+	}
+	else
+	    return PM_ERR_PMID;
+    }
+    else if (idp->cluster == 4) {	/* times */
+	if (idp->item == 0) {
+	    if (inst < indomtab[COUNT_TIME_INDOM].it_numinst) {
+		unsigned *p;
+
+		p = (unsigned *)((unsigned)stats + samba_times[inst].offset);
+		atom->ul = *p;
+	    }
+	    else
+		return PM_ERR_INST;
+	}
+	else
+	    return PM_ERR_PMID;
+    }
+    else if (idp->cluster == 5) {	/* bytes */
+	if (idp->item == 0) {
+	    if (inst < indomtab[BYTE_INDOM].it_numinst) {
+		unsigned *p;
+
+		p = (unsigned *)((unsigned)stats + samba_bytes[inst].offset);
+		atom->ul = *p;
+	    }
+	    else
+		return PM_ERR_INST;
+	}
+	else
+	    return PM_ERR_PMID;
+    }
+    else
+	return PM_ERR_PMID;
+    return 0;
+}
+
+
+void 
+samba_init(pmdaInterface *dp)
+{
+    int inst_count, i;
+
+    if (dp->status != 0)
+	return;
+
+    if ((shmid = shmget(PROF_SHMEM_KEY, 0, 0)) == -1) {
+	fprintf(stderr, "shmid: %s\n", strerror(errno));
+	fprintf(stderr, "samba not compiled with profile support or not running\n");
+	exit(1);
+    }
+    shmheader = (struct profile_header *)shmat(shmid, NULL, SHM_RDONLY);
+    if ((int)shmheader == -1) {
+	fprintf(stderr, "shmat: %s\n", strerror(errno));
+	exit(1);
+    }
+
+/*
+ * Initialize lists of instances
+ */
+
+    inst_count = sizeof(samba_counts)/sizeof(samba_counts[0]);
+    counttime = (pmdaInstid *)malloc(inst_count * sizeof(pmdaInstid));
+    if (counttime == NULL) {
+	__pmNoMem("count&time",inst_count * sizeof(pmdaInstid),PM_FATAL_ERR);
+	/* NOTREACHED*/
+    }
+    for (i = 0; i < inst_count; i++) {
+	counttime[i].i_inst = i;
+	counttime[i].i_name = samba_counts[i].name;
+    }
+    indomtab[COUNT_TIME_INDOM].it_numinst = inst_count;
+    indomtab[COUNT_TIME_INDOM].it_set = counttime;
+
+    inst_count = sizeof(samba_bytes)/sizeof(samba_bytes[0]);
+    bytes = (pmdaInstid *)malloc(inst_count * sizeof(pmdaInstid));
+    if (bytes == NULL) {
+	__pmNoMem("bytes",inst_count * sizeof(pmdaInstid),PM_FATAL_ERR);
+	/* NOTREACHED*/
+    }
+    for (i = 0; i < inst_count; i++) {
+	bytes[i].i_inst = i;
+	bytes[i].i_name = samba_bytes[i].name;
+    }
+    indomtab[BYTE_INDOM].it_numinst = inst_count;
+    indomtab[BYTE_INDOM].it_set = bytes;
+
+
+    pmdaSetFetchCallBack(dp, samba_fetchCallBack);
+    pmdaInit(dp, indomtab, sizeof(indomtab)/sizeof(indomtab[0]), 
+	     metrictab, sizeof(metrictab)/sizeof(metrictab[0]));
+
+    /* validate the data */
+    if (!shmheader)	/* not mapped yet */
+	fprintf(stderr, "samba_init: shmem not mapped\n");
+    else if (shmheader->prof_shm_magic != PROF_SHM_MAGIC)
+	fprintf(stderr, "samba_init: bad magic\n");
+    else if (shmheader->prof_shm_version != PROF_SHM_VERSION)
+	fprintf(stderr, "samba_init: bad version %X\n",
+			shmheader->prof_shm_version);
+    else {
+	stats = &shmheader->stats;
+	return;		/* looks OK */
+    }
+    exit(1);
+}
+
+
+int
+main(int argc, char **argv)
+{
+    int			err = 0;
+    char		*p;
+    pmdaInterface	dispatch;
+
+    for (p = pmProgname = argv[0]; *p; p++)
+	if (*p == '/') pmProgname = p+1;
+
+    pmdaDaemon(&dispatch, PMDA_INTERFACE_2, pmProgname, SAMBA,
+		"samba.log", "/var/pcp/pmdas/samba/help");
+
+    if (pmdaGetOpt(argc, argv, "D:d:l:?", &dispatch, &err) != EOF) {
+	fprintf(stderr, "Usage: %s [options]\n\n\
+Options:\n\
+  -d domain    use domain (numeric) for metrics domain of PMDA\n\
+  -l logfile   write log into logfile rather than using default log name\n",
+	pmProgname);
+	exit(1);
+    }
+
+    pmdaOpenLog(&dispatch);
+    samba_init(&dispatch);
+    pmdaConnect(&dispatch);
+    pmdaMain(&dispatch);
+
+    exit(0);
+    /*NOTREACHED*/
+}

Copied: branches/samba/upstream/release-scripts/build-docs (from rev 1928, branches/samba/upstream/release-scripts/build-docs)
===================================================================
--- branches/samba/upstream/release-scripts/build-docs	                        (rev 0)
+++ branches/samba/upstream/release-scripts/build-docs	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+DOCSRCDIR=`dirname $0`/../docs-xml
+
+cd $DOCSRCDIR || exit 1
+
+git-clean -d -x -f
+autoconf && ./configure --with-papersize=letter && make release
+
+if [ $? != 0 ]; then
+        echo "Docs build failed!"
+        exit 1
+fi
+
+mkdir ../docs
+rsync -Ca --delete --exclude=.git output/ ../docs/
+rsync -Ca --exclude=.svn registry ../docs/
+rsync -Ca --exclude=.svn archives/ ../docs/
+
+cd ../docs || exit 1
+/bin/rm -rf test.pdf Samba4*pdf htmldocs/Samba4* htmldocs/test
+mv manpages-3 manpages
+mv htmldocs/manpages-3 htmldocs/manpages
+
+exit
\ No newline at end of file

Modified: branches/samba/upstream/release-scripts/create-tarball
===================================================================
--- branches/samba/upstream/release-scripts/create-tarball	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/release-scripts/create-tarball	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,98 +1,222 @@
 #!/bin/bash
 
+## option defaults
+OPT_BRANCH=""
+OPT_DOCSDIR=""
+OPT_TAG=""
+OPT_KEYID=""
+
 TOPDIR="`dirname $0`/.."
+VER_H="${TOPDIR}/source/include/version.h"
 
-cd $TOPDIR
+function exitOnError
+{
+    local _error="$1"
+    local _msg="$2"
 
-echo -n "Please enter branch to cut tarball from: "
-read branch
+    if [ ${_error} -eq 0 ]; then
+	return 0
+    fi
 
-if [ "x$branch" = "x" ]; then
-   echo "You must enter a name!  Exiting...."
-   exit 1
-fi
+    echo "FAILURE: ${_msg}"
+    exit ${_error}
+}
 
-git-checkout $branch
-if [ $? -ne 0 ]; then
-   echo "Invalid branch name!  Exiting...."
-   exit 2
-fi
+##
+## Print help usage
+##
 
-VER_H=source/include/version.h
-(cd source && ./script/mkversion.sh)
+function printUsage
+{
+    echo "Usage $0 [options]"
+    echo "    --help             Print command usage"
+    echo "    --branch <name>    Specify the branch to to create the archive file from"
+    echo "    --copy-docs <dir>  Copy documentation from <dir> rather than building"
+    echo "    --tag <name>       Tag name for release"
+    echo "    --keyid <email>    The GnuPG key ID used to sign the release tag"
+    echo ""
+}
 
-if [ ! -f $VER_H ]; then
-   echo "Failed to find $VER_H!  Exiting...."
-   exit 1
-fi
+##
+## Parse the command line options 
+##
 
-version=`grep SAMBA_VERSION_OFFICIAL_STRING $VER_H | awk '{print $3}'`
-vendor_version=`grep SAMBA_VERSION_VENDOR_SUFFIX $VER_H | awk '{print $3}'`
-if [ -n "$vendor_version" ]; then
-    version="$version-$vendor_version"
-fi
-version=`echo $version | sed 's/\"//g'`
+function parseOptions
+{
+    while [ -n "$1" ]; do
+	case "$1" in
+	    --help)
+		printUsage
+		exit 0
+		;;
+	    --branch)
+		shift
+		if [ -z "$1" ]; then
+		    printUsage
+		    return 1
+		fi
+		OPT_BRANCH="$1"
+		shift
+		;;
+	    --copy-docs)
+		shift
+		if [ -z "$1" ]; then
+		    printUsage
+		    return 1
+		fi
+		OPT_DOCSDIR="$1"
+		shift
+		;;
+	    --tag)
+		shift
+		if [ -z "$1" ]; then
+		    printUsage
+		    return 1
+		fi
+		OPT_TAG="$1"
+		shift
+		;;
+	    --keyid)
+		shift
+		if [ -z "$1" ]; then
+		    printUsage
+		    return 1
+		fi
+		OPT_KEYID="$1"
+		shift
+		;;
+	    *)
+		printUsage
+		return 1
+		;;
+	esac
+    done
 
-echo "Creating release tarball for Samba $version"
+    if [ -z "${OPT_BRANCH}" ]; then
+	echo "You must specify a branch name!"
+	printUsage
+	return 1
+    fi
+}
 
-/bin/rm -rf ../samba-${version}
-git-archive --format=tar --prefix=samba-${version}/ HEAD | (cd .. && tar xf -)
+##
+## Build the dopcumentation (may be a no-op)
+##
 
-pushd ../samba-${version}
+function buildDocs
+{
+    if [ -n "${OPT_DOCSDIR}" ]; then
+	if [ ! -d "${OPT_DOCSDIR}" ]; then
+	    exitOnError 1 "${OPT_DOCSDIR} does not exist.  Please specify the absolute path."
+	fi
 
-echo "Enter the absolute path to the generated Samba docs directory."
-echo -n "Just hit return to exclude the docs from the generate tarball: "
-read docsdir
+	mkdir docs
+	exitOnError $? "Failed to create docs directory"
 
-if [ "x$docsdir" != "x" ]; then
-   if [ ! -d "$docsdir" ]; then
-      echo "$docsdir does not exist!  Exiting...."
-      exit 1
-   fi
+	rsync -av "${OPT_DOCSDIR}"/ docs/
+	exitOnError $? "Failed top copy docs from ${OPT_DOCSDIR}"
+	
+	return 0
+    fi
 
-   /bin/rm -rf docs
-   mkdir docs
-   rsync -a --exclude=.svn $docsdir/ docs/
+    echo "Building documentation.  This may take a while.  Log file in /tmp/docs-build.log.$$"
 
-   cd docs
-   /bin/rm -rf test.pdf Samba4*pdf htmldocs/Samba4* htmldocs/test
-   /bin/mv manpages-3 manpages
-   /bin/mv htmldocs/manpages-3 htmldocs/manpages
-   cd ..
-fi
+    ${TOPDIR}/release-scripts/build-docs 2> /tmp/docs-build.log.$$
+    return $?
 
-cd source
-./autogen.sh
-cd ..
+}
 
-cd ..
-tar cf samba-${version}.tar --exclude=.git* --exclude=CVS --exclude=.svn samba-${version}
-gpg --detach-sign --armor samba-${version}.tar
-gzip -9 samba-${version}.tar
 
-popd
-echo -n "Enter tag name (or hit <enter> to skip): "
-read tagname
+##
+## Create a release tag
+##
+function createReleaseTag
+{
+    if [ -z "${OPT_TAG}" ]; then
+	echo "Tagging disabled"
+	return 0
+    fi
 
-if [ "x$tagname" != "x" ]; then
-   if [ "x`git-tag -l $tagname`" != "x" ]; then
-      echo -n "Tag exists.  Do you wish to overwrite? (y/N): "
-      read answer
+    if [ "x`git-tag -l ${OPT_TAG}`" != "x" ]; then
+	echo -n "Tag exists.  Do you wish to overwrite? (y/N): "
+	read answer
 
-      if [ "x$answer" != "xy" ]; then
-      	 echo "Tag creation aborted."
-	 exit 1
-      fi
-   fi
+	if [ "x$answer" != "xy" ]; then
+      	    echo "Tag creation aborted."
+	    exit 1
+	fi
+    fi
 
-   echo -n "Enter the keyid:"
-   read keyid
-   if [ x"$keyid" = x"" ];then
-      echo "no keyid"
-      exit 1
-   fi
-   git-tag -u $keyid ${tagname}
-fi
+    if [ -z "${OPT_KEYID}" ]; then
+	echo -n "Enter the keyid:"
+	read OPT_KEYID
+	if [ -z "${OPT_KEYID}" ]; then
+	    exitOnError 1 "No keyid specified"
+	fi
+    fi
 
-echo "Done!"
-exit 0
+    git-tag -u ${OPT_KEYID} ${OPT_TAG}
+    exitOnError $? "Failed to create tag"
+
+    return 0
+}
+##
+## Main driver
+##
+function main 
+{
+    parseOptions "$@"
+    exitOnError $? "Failed to parse options"
+    
+    cd $TOPDIR
+
+    git-checkout ${OPT_BRANCH}
+    exitOnError $? "Invalid branch name \"${OPT_BRANCH}\""
+
+    (cd source && ./script/mkversion.sh)
+    if [ ! -f $VER_H ]; then
+	exitOnError 1 "Failed to find ${VER_H}!"
+    fi
+
+    version=`grep SAMBA_VERSION_OFFICIAL_STRING $VER_H | awk '{print $3}'`
+    vendor_version=`grep SAMBA_VERSION_VENDOR_SUFFIX $VER_H | awk '{print $3}'`
+    if [ -n "$vendor_version" ]; then
+	version="$version-$vendor_version"
+    fi
+    version=`echo $version | sed 's/\"//g'`
+
+    echo "Creating release tarball for Samba $version"
+
+    /bin/rm -rf ../samba-${version}
+    git-archive --format=tar --prefix=samba-${version}/ HEAD | (cd .. && tar xf -)
+    exitOnError $? "Failed to create release directory tree"
+
+    pushd ../samba-${version}
+
+    packaging/bin/update-pkginfo ${version} 1 ""
+
+    buildDocs
+    exitOnError $? "Failed to build documentation"
+
+    ( cd source && ./autogen.sh )
+
+    cd ..
+    tar cf samba-${version}.tar --exclude=.git* --exclude=CVS --exclude=.svn samba-${version}
+    exitOnError $? "Failed to create tarball from git tree"
+
+    gpg --detach-sign --armor samba-${version}.tar
+    ## exitOnError $? "Failed to sign tarball"
+
+    gzip -9 samba-${version}.tar
+    exitOnError $? "Failed to compress archive"
+
+    popd
+
+    createReleaseTag
+    exitOnError $? "Failed to create release tag"
+
+    return 0
+}
+
+main "$@"
+exit $?

Modified: branches/samba/upstream/source/Makefile.in
===================================================================
--- branches/samba/upstream/source/Makefile.in	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/Makefile.in	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,8 +6,6 @@
 # Copyright (C) 2003 Jim McDonough <jmcd at us.ibm.com>
 # Copyright (C) 2002-2003 Jelmer Vernooij <jelmer at samba.org>
 # Copyright (C) 2006 Lars Mueller <lars at samba.org>
-# Copyright (C) 2007 James Peach <jpeach at samba.org>
-# Copyright (C) 2008 Michael Adam <obnox at samba.org>
 ###########################################################################
 
 prefix=@prefix@
@@ -22,38 +20,19 @@
 LIBS=@LIBS@
 CC=@CC@
 SHLD=@SHLD@
-LIB_PATH_VAR=@LIB_PATH_VAR@
-
-## Dynamic shared libraries build settings
-DSO_EXPORTS_CMD=-Wl,--version-script,$(srcdir)/exports/`basename $@ | sed 's/@SHLIBEXT@$$/@SYMSEXT@/'`
-DSO_EXPORTS=@DSO_EXPORTS@
-SONAME_VER=`grep \^$@ $(builddir)/library-versions | cut -d: -f2`
-SHLD_DSO = $(SHLD) $(LDSHFLAGS) $(DSO_EXPORTS) -o $@
-
-# The MODULE_EXPORTS variable contains the platform-specific linker flags
-# needed to restrict the exports for VFS, IDMAP, RPC and PASSDB modules.
-MODULE_EXPORTS=@MODULE_EXPORTS@
-
-# Add $(DEVELOPER_CFLAGS) to $(CFLAGS) to enable extra compiler
-# (GCC) warnings. This is done automtically for --enable-developer
-# and --enable-krb5developer.
-DEVELOPER_CFLAGS=@DEVELOPER_CFLAGS@
 CFLAGS=@CFLAGS@
 CPPFLAGS=-DHAVE_CONFIG_H @CPPFLAGS@
-
 EXEEXT=@EXEEXT@
 AR=@AR@
-LDSHFLAGS=@LDSHFLAGS@ @RELRO_LDFLAGS@ @LDFLAGS@
-LDFLAGS=@PIE_LDFLAGS@ @RELRO_LDFLAGS@ @LDFLAGS@
-
+LDSHFLAGS=@LDSHFLAGS@ @LDFLAGS@
 WINBIND_NSS_LDSHFLAGS=@WINBIND_NSS_LDSHFLAGS@ @LDFLAGS@
+LDFLAGS=@PIE_LDFLAGS@ @LDFLAGS@
 AWK=@AWK@
 PICFLAG=@PICFLAG@
 DYNEXP=@DYNEXP@
+PYTHON=@PYTHON@
 PERL=@PERL@
 
-PIDL_ARGS=@PIDL_ARGS@
-
 TERMLDFLAGS=@TERMLDFLAGS@
 TERMLIBS=@TERMLIBS@
 PRINT_LIBS=@PRINT_LIBS@
@@ -65,8 +44,6 @@
 LDAP_LIBS=@LDAP_LIBS@
 NSCD_LIBS=@NSCD_LIBS@
 UUID_LIBS=@UUID_LIBS@
-WINBIND_LIBS=@WINBIND_LIBS@
-DNSSD_LIBS=@DNSSD_LIBS@
 
 INSTALLCMD=@INSTALL@
 INSTALLLIBCMD_SH=@INSTALLLIBCMD_SH@
@@ -93,7 +70,6 @@
 SBINDIR = @sbindir@
 ROOTSBINDIR = @rootsbindir@
 LIBDIR = @libdir@
-INCLUDEDIR=@includedir@
 PAMMODULESDIR = @pammodulesdir@
 VFSLIBDIR = $(LIBDIR)/vfs
 PDBLIBDIR = $(LIBDIR)/pdb
@@ -108,9 +84,8 @@
 MANDIR = @mandir@
 DATADIR = @datadir@
 
-# The permissions to give the executables and other data
-INSTALLPERMS_BIN = 0755
-INSTALLPERMS_DATA = 0644
+# The permissions to give the executables
+INSTALLPERMS = 0755
 
 # set these to where to find various files
 # These can be overridden by command line switches (see smbd(8))
@@ -118,7 +93,6 @@
 LOGFILEBASE = @logfilebase@
 CONFIGFILE = $(CONFIGDIR)/smb.conf
 LMHOSTSFILE = $(CONFIGDIR)/lmhosts
-CTDBDIR = @ctdbdir@
 
 # This is where smbpasswd et al go
 PRIVATEDIR = @privatedir@
@@ -132,74 +106,47 @@
 # the directory where lock files go
 LOCKDIR = @lockdir@
 
-# FHS directories; equal to LOCKDIR if not using --with-fhs
-CACHEDIR = @cachedir@
-STATEDIR = @statedir@
-
-# Where to look for (and install) codepage databases.
-CODEPAGEDIR = @codepagedir@
-
 # the directory where pid files go
 PIDDIR = @piddir@
 
-LIBTALLOC_SHARED_TARGET=@LIBTALLOC_SHARED_TARGET@
-LIBTALLOC_STATIC_TARGET=@LIBTALLOC_STATIC_TARGET@
-LIBTALLOC=$(LIBTALLOC_STATIC_TARGET) @LIBTALLOC_SHARED@
-LIBTALLOC_SYMS=$(srcdir)/exports/libtalloc. at SYMSEXT@
-LIBTALLOC_HEADERS=$(srcdir)/@tallocdir@/talloc.h
+LIBSMBCLIENT=bin/libsmbclient.a @LIBSMBCLIENT_SHARED@
+LIBSMBCLIENT_MAJOR=0
+LIBSMBCLIENT_MINOR=1
 
-LIBTDB_SHARED_TARGET=@LIBTDB_SHARED_TARGET@
-LIBTDB_STATIC_TARGET=@LIBTDB_STATIC_TARGET@
-LIBTDB=$(LIBTDB_STATIC_TARGET) @LIBTDB_SHARED@
-LIBTDB_SYMS=$(srcdir)/exports/libtdb. at SYMSEXT@
-LIBTDB_HEADERS=$(srcdir)/@tdbdir@/include/tdb.h
+LIBMSRPC=bin/libmsrpc.a @LIBMSRPC_SHARED@
+LIBMSRPC_MAJOR=0
+LIBMSRPC_MINOR=1
 
-LIBSMBCLIENT=bin/libsmbclient.a @LIBSMBCLIENT_SHARED@
 LIBSMBSHAREMODES=bin/libsmbsharemodes.a @LIBSMBSHAREMODES_SHARED@
+LIBSMBSHAREMODES_MAJOR=0
+LIBSMBSHAREMODES_MINOR=2
+
 LIBADDNS=bin/libaddns.a @LIBADDNS_SHARED@
+LIBADDNS_MAJOR=0
+LIBADDNS_MINOR=1
 
-LIBWBCLIENT_SHARED_TARGET=@LIBWBCLIENT_SHARED_TARGET@
-LIBWBCLIENT_STATIC_TARGET=@LIBWBCLIENT_STATIC_TARGET@
-LIBWBCLIENT=@LIBWBCLIENT_STATIC@ @LIBWBCLIENT_SHARED@
-LIBWBCLIENT_SYMS=$(srcdir)/exports/libwbclient. at SYMSEXT@
-LIBWBCLIENT_HEADERS=$(srcdir)/nsswitch/libwbclient/wbclient.h
-
-LIBNETAPI_SHARED_TARGET=@LIBNETAPI_SHARED_TARGET@
-LIBNETAPI_STATIC_TARGET=@LIBNETAPI_STATIC_TARGET@
-LIBNETAPI=$(LIBNETAPI_STATIC_TARGET) @LIBNETAPI_SHARED@
-LIBNETAPI_SYMS=$(srcdir)/exports/libnetapi. at SYMSEXT@
-LIBNETAPI_HEADERS=$(srcdir)/lib/netapi/netapi.h
-
 FLAGS1 = $(CFLAGS) @FLAGS1@ @SAMBA_CPPFLAGS@ $(CPPFLAGS)
 FLAGS2 =
 FLAGS3 =
-FLAGS4 = -I$(CTDBDIR)/include
+FLAGS4 =
 FLAGS5 = $(FLAGS1) $(FLAGS2) $(FLAGS3) $(FLAGS4)
 FLAGS  = $(ISA) $(FLAGS5) -I$(srcdir)/lib -D_SAMBA_BUILD_=3
 
-PATH_FLAGS = -DSMB_PASSWD_FILE=\"$(SMB_PASSWD_FILE)\" \
-	-DPRIVATE_DIR=\"$(PRIVATE_DIR)\" \
-	-DCONFIGFILE=\"$(CONFIGFILE)\" \
-	-DSBINDIR=\"$(SBINDIR)\" \
-	-DBINDIR=\"$(BINDIR)\" \
-	-DLMHOSTSFILE=\"$(LMHOSTSFILE)\" \
-	-DSWATDIR=\"$(SWATDIR)\" \
-	-DLOCKDIR=\"$(LOCKDIR)\" \
-	-DPIDDIR=\"$(PIDDIR)\" \
-	-DLIBDIR=\"$(LIBDIR)\" \
-	-DLOGFILEBASE=\"$(LOGFILEBASE)\" \
-	-DSHLIBEXT=\"@SHLIBEXT@\" \
-	-DCTDBDIR=\"$(CTDBDIR)\" \
-	-DCONFIGDIR=\"$(CONFIGDIR)\" \
-	-DCODEPAGEDIR=\"$(CODEPAGEDIR)\" \
-	-DCACHEDIR=\"$(CACHEDIR)\" \
-	-DSTATEDIR=\"$(STATEDIR)\"
+PASSWD_FLAGS = -DSMB_PASSWD_FILE=\"$(SMB_PASSWD_FILE)\" -DPRIVATE_DIR=\"$(PRIVATE_DIR)\"
+PATH_FLAGS1 = -DCONFIGFILE=\"$(CONFIGFILE)\"  -DSBINDIR=\"$(SBINDIR)\"
+PATH_FLAGS2 = $(PATH_FLAGS1) -DBINDIR=\"$(BINDIR)\"
+PATH_FLAGS3 = $(PATH_FLAGS2) -DLMHOSTSFILE=\"$(LMHOSTSFILE)\"
+PATH_FLAGS4 = $(PATH_FLAGS3) -DSWATDIR=\"$(SWATDIR)\"  -DLOCKDIR=\"$(LOCKDIR)\" -DPIDDIR=\"$(PIDDIR)\"
+PATH_FLAGS5 = $(PATH_FLAGS4) -DLIBDIR=\"$(LIBDIR)\" \
+	      -DLOGFILEBASE=\"$(LOGFILEBASE)\" -DSHLIBEXT=\"@SHLIBEXT@\"
+PATH_FLAGS6 = $(PATH_FLAGS5) -DCONFIGDIR=\"$(CONFIGDIR)\"
+PATH_FLAGS = $(PATH_FLAGS6) $(PASSWD_FLAGS)
 
 # Note that all executable programs now provide for an optional executable suffix.
 
-SBIN_PROGS = bin/smbd at EXEEXT@ bin/nmbd at EXEEXT@ @SWAT_SBIN_TARGETS@ @EXTRA_SBIN_PROGS@
+SBIN_PROGS = bin/smbd at EXEEXT@ bin/nmbd at EXEEXT@ bin/swat at EXEEXT@ @EXTRA_SBIN_PROGS@
 
-ROOT_SBIN_PROGS = @CIFSMOUNT_PROGS@ @CIFSSPNEGO_PROGS@
+ROOT_SBIN_PROGS = @CIFSMOUNT_PROGS@
 
 BIN_PROGS1 = bin/smbclient at EXEEXT@ bin/net at EXEEXT@ bin/smbspool at EXEEXT@ \
 	bin/testparm at EXEEXT@ bin/smbstatus at EXEEXT@ bin/smbget at EXEEXT@
@@ -209,25 +156,20 @@
 BIN_PROGS3 = bin/smbpasswd at EXEEXT@ bin/rpcclient at EXEEXT@ bin/smbcacls at EXEEXT@ \
 	bin/profiles at EXEEXT@ bin/ntlm_auth at EXEEXT@ \
 	bin/smbcquotas at EXEEXT@ bin/eventlogadm at EXEEXT@
-BIN_PROGS4 = bin/ldbedit at EXEEXT@ bin/ldbsearch at EXEEXT@ bin/ldbadd at EXEEXT@ \
-	bin/ldbdel at EXEEXT@ bin/ldbmodify at EXEEXT@
 
 TORTURE_PROGS = bin/smbtorture at EXEEXT@ bin/msgtest at EXEEXT@ \
 	bin/masktest at EXEEXT@ bin/locktest at EXEEXT@ \
 	bin/locktest2 at EXEEXT@ bin/nsstest at EXEEXT@ bin/vfstest at EXEEXT@ \
-	bin/pdbtest at EXEEXT@ bin/talloctort at EXEEXT@ bin/replacetort at EXEEXT@ \
-	bin/tdbtorture at EXEEXT@ \
-	bin/smbconftort at EXEEXT@
+	bin/pdbtest at EXEEXT@ bin/talloctort at EXEEXT@ bin/replacetort at EXEEXT@
 
-BIN_PROGS = @EXTRA_BIN_PROGS@ \
-	$(BIN_PROGS1) $(BIN_PROGS2) $(BIN_PROGS3) $(BIN_PROGS4) 
+BIN_PROGS = @SMBMOUNT_PROGS@ @EXTRA_BIN_PROGS@ \
+	$(BIN_PROGS1) $(BIN_PROGS2) $(BIN_PROGS3)
 
 EVERYTHING_PROGS = bin/debug2html at EXEEXT@ bin/smbfilter at EXEEXT@ \
 	bin/talloctort at EXEEXT@ bin/replacetort at EXEEXT@ \
-	bin/log2pcap at EXEEXT@ bin/sharesec at EXEEXT@ bin/ndrdump at EXEEXT@ \
-	bin/vlp at EXEEXT@ bin/smbiconv at EXEEXT@
+	bin/log2pcap at EXEEXT@ bin/sharesec at EXEEXT@
 
-SHLIBS = libtalloc libtdb @LIBWBCLIENT@ @LIBSMBCLIENT@ @LIBSMBSHAREMODES@ @LIBADDNS@ libnetapi
+SHLIBS = @LIBSMBCLIENT@ @LIBSMBSHAREMODES@ @LIBMSRPC@ @LIBADDNS@
 
 PAM_MODULES = @PAM_MODULES@
 
@@ -249,18 +191,18 @@
 # object file lists
 ######################################################################
 
-LIBTDB_OBJ0 = @TDB_OBJS@
-LIBTDB_OBJ = $(LIBTDB_OBJ0) $(LIBREPLACE_OBJ)
+TDBBASE_OBJ = tdb/common/tdb.o tdb/common/dump.o tdb/common/error.o \
+	tdb/common/freelist.o tdb/common/freelistcheck.o tdb/common/io.o tdb/common/lock.o \
+	tdb/common/open.o tdb/common/transaction.o tdb/common/traverse.o
 
-TDB_OBJ = lib/util_tdb.o \
-	  lib/dbwrap.o lib/dbwrap_tdb.o \
-	  lib/dbwrap_tdb2.o lib/dbwrap_ctdb.o \
-	  lib/dbwrap_rbt.o @LIBTDB_STATIC@
+TDB_OBJ = $(TDBBASE_OBJ) lib/util_tdb.o tdb/common/tdbback.o
 
 SMBLDAP_OBJ = @SMBLDAP@ @SMBLDAPUTIL@
 
 VERSION_OBJ = lib/version.o
 
+DOSERR_OBJ = libsmb/doserr.o
+
 WBCOMMON_OBJ = nsswitch/wb_common.o
 
 AFS_OBJ = lib/afs.o
@@ -269,91 +211,53 @@
 
 SERVER_MUTEX_OBJ = lib/server_mutex.o
 
+ERRORMAP_OBJ = libsmb/errormap.o
+
 PASSCHANGE_OBJ = libsmb/passchange.o
 
+LIBNDR_OBJ = librpc/ndr/ndr_basic.o librpc/ndr/ndr.o librpc/ndr/ndr_misc.o \
+	     librpc/ndr/ndr_sec_helper.o librpc/ndr/ndr_string.o librpc/ndr/sid.o \
+	     rpc_client/ndr.o
 
-LIBNDR_OBJ = librpc/ndr/ndr_basic.o \
-	     librpc/ndr/ndr.o \
-	     librpc/ndr/ndr_misc.o \
-	     librpc/gen_ndr/ndr_misc.o \
-	     librpc/gen_ndr/ndr_security.o \
-	     librpc/ndr/ndr_sec_helper.o \
-	     librpc/ndr/ndr_string.o \
-	     librpc/ndr/sid.o \
-	     librpc/ndr/uuid.o
+LIBNDR_GEN_OBJ = librpc/gen_ndr/ndr_wkssvc.o librpc/gen_ndr/ndr_notify.o
 
-RPCCLIENT_NDR_OBJ = rpc_client/ndr.o
-
-LIBNDR_GEN_OBJ = librpc/gen_ndr/ndr_wkssvc.o \
-		 librpc/gen_ndr/ndr_lsa.o \
-		 librpc/gen_ndr/ndr_dfs.o \
-		 librpc/gen_ndr/ndr_echo.o \
-		 librpc/gen_ndr/ndr_winreg.o \
-		 librpc/gen_ndr/ndr_initshutdown.o \
-		 librpc/gen_ndr/ndr_srvsvc.o \
-		 librpc/gen_ndr/ndr_eventlog.o \
-		 librpc/gen_ndr/ndr_netlogon.o \
-		 librpc/gen_ndr/ndr_samr.o \
-		 librpc/gen_ndr/ndr_dssetup.o \
-		 librpc/gen_ndr/ndr_notify.o \
-		 librpc/gen_ndr/ndr_xattr.o \
-		 librpc/gen_ndr/ndr_ntsvcs.o
-
 RPC_PARSE_OBJ0 = rpc_parse/parse_prs.o rpc_parse/parse_misc.o
 
 # this includes only the low level parse code, not stuff
 # that requires knowledge of security contexts
 RPC_PARSE_OBJ1 = $(RPC_PARSE_OBJ0) rpc_parse/parse_sec.o
 
-RPC_PARSE_OBJ2 = rpc_parse/parse_rpc.o \
-		 rpc_client/init_netlogon.o \
-		 rpc_client/init_lsa.o \
-		 rpc_client/init_srvsvc.o
+RPC_PARSE_OBJ2 = rpc_parse/parse_rpc.o rpc_parse/parse_net.o rpc_parse/parse_srv.o
 
 LIBREPLACE_OBJ = @LIBREPLACE_OBJS@
 
 SOCKET_WRAPPER_OBJ = @SOCKET_WRAPPER_OBJS@
-NSS_WRAPPER_OBJ = @NSS_WRAPPER_OBJS@
 
-TALLOC_OBJ = @TALLOC_OBJS@
+TALLOC_OBJ = lib/talloc/talloc.o
 
+LIB_WITHOUT_PROTO_OBJ = $(LIBREPLACE_OBJ) $(SOCKET_WRAPPER_OBJ) $(TALLOC_OBJ)
 
-LIBTALLOC_OBJ0 = $(TALLOC_OBJ)
-LIBTALLOC_OBJ = $(LIBTALLOC_OBJ0) $(LIBREPLACE_OBJ)
-
-LIBSAMBAUTIL_OBJ = @LIBTALLOC_STATIC@ \
-		$(LIBREPLACE_OBJ) \
-		$(SOCKET_WRAPPER_OBJ) \
-		$(NSS_WRAPPER_OBJ)
-
-LIB_WITHOUT_PROTO_OBJ = $(LIBSAMBAUTIL_OBJ) \
-	lib/messages.o librpc/gen_ndr/ndr_messaging.o lib/messages_local.o \
-	lib/messages_ctdbd.o lib/packet.o lib/ctdbd_conn.o lib/talloc_stack.o \
-	lib/interfaces.o lib/rbtree.o lib/memcache.o \
-	lib/util_transfer_file.o lib/async_req.o \
-	$(TDB_OBJ)
-
 LIB_WITH_PROTO_OBJ = $(VERSION_OBJ) lib/charcnv.o lib/debug.o lib/fault.o \
 	  lib/interface.o lib/md4.o \
-	  lib/pidfile.o \
-	  lib/signal.o lib/system.o lib/sendfile.o lib/recvfile.o lib/time.o \
+	  lib/interfaces.o lib/pidfile.o \
+	  lib/signal.o lib/system.o lib/sendfile.o lib/time.o \
 	  lib/ufc.o lib/genrand.o lib/username.o \
 	  lib/util_pw.o lib/access.o lib/smbrun.o \
 	  lib/bitmap.o lib/crc32.o lib/dprintf.o \
-	  lib/xfile.o lib/wins_srv.o $(UTIL_REG_OBJ) \
+	  lib/xfile.o lib/wins_srv.o \
 	  lib/util_str.o lib/clobber.o lib/util_sid.o lib/util_uuid.o \
 	  lib/util_unistr.o lib/util_file.o lib/data_blob.o \
 	  lib/util.o lib/util_sock.o lib/sock_exec.o lib/util_sec.o \
-	  lib/substitute.o lib/fsusage.o lib/dbwrap_util.o \
-	  lib/ms_fnmatch.o lib/select.o lib/errmap_unix.o \
+	  lib/substitute.o lib/fsusage.o \
+	  lib/ms_fnmatch.o lib/select.o lib/messages.o \
 	  lib/tallocmsg.o lib/dmallocmsg.o libsmb/smb_signing.o \
 	  lib/md5.o lib/hmacmd5.o lib/arc4.o lib/iconv.o \
-	  lib/pam_errors.o intl/lang_tdb.o lib/conn_tdb.o \
-	  lib/adt_tree.o lib/gencache.o \
+	  nsswitch/wb_client.o $(WBCOMMON_OBJ) \
+	  lib/pam_errors.o intl/lang_tdb.o \
+	  lib/adt_tree.o lib/gencache.o $(TDB_OBJ) \
 	  lib/module.o lib/events.o lib/ldap_escape.o @CHARSET_STATIC@ \
 	  lib/secdesc.o lib/util_seaccess.o lib/secace.o lib/secacl.o \
-	  libads/krb5_errs.o lib/system_smbd.o lib/audit.o $(LIBNDR_OBJ) \
-	  lib/file_id.o
+	  libads/krb5_errs.o lib/system_smbd.o lib/audit.o
 
 LIB_OBJ = $(LIB_WITHOUT_PROTO_OBJ) $(LIB_WITH_PROTO_OBJ)
 
@@ -366,72 +270,36 @@
 # Be sure to include them into your application
 POPT_LIB_OBJ = lib/popt_common.o
 
-PARAM_WITHOUT_REG_OBJ = dynconfig.o param/loadparm.o param/params.o param/util.o lib/sharesec.o lib/ldap_debug_handler.o
-PARAM_REG_ADD_OBJ = $(REG_SMBCONF_OBJ) $(LIBSMBCONF_OBJ) $(PRIVILEGES_BASIC_OBJ)
-PARAM_OBJ = $(PARAM_WITHOUT_REG_OBJ) $(PARAM_REG_ADD_OBJ)
+PARAM_OBJ = dynconfig.o param/loadparm.o param/params.o lib/sharesec.o lib/ldap_debug_handler.o
 
 KRBCLIENT_OBJ = libads/kerberos.o libads/ads_status.o
 
 LIBADDNS_OBJ0 = libaddns/dnsrecord.o libaddns/dnsutils.o  libaddns/dnssock.o \
 	       libaddns/dnsgss.o libaddns/dnsmarshall.o
-LIBADDNS_OBJ = $(LIBADDNS_OBJ0) @LIBTALLOC_STATIC@
+LIBADDNS_OBJ = $(LIBADDNS_OBJ0) $(TALLOC_OBJ)
 
-LIBWBCLIENT_OBJ0 = nsswitch/libwbclient/wbclient.o \
-		  nsswitch/libwbclient/wbc_util.o \
-		  nsswitch/libwbclient/wbc_pwd.o \
-		  nsswitch/libwbclient/wbc_idmap.o \
-		  nsswitch/libwbclient/wbc_sid.o \
-		  nsswitch/libwbclient/wbc_pam.o
-LIBWBCLIENT_OBJ = $(LIBWBCLIENT_OBJ0) \
-		  $(WBCOMMON_OBJ) \
-		  @LIBTALLOC_STATIC@ $(LIBREPLACE_OBJ)
-
-LIBGPO_OBJ0 = libgpo/gpo_ldap.o libgpo/gpo_ini.o libgpo/gpo_util.o \
-	      libgpo/gpo_fetch.o libgpo/gpo_filesync.o libgpo/gpo_sec.o
+LIBGPO_OBJ0 = libgpo/gpo_ldap.o libgpo/gpo_parse.o libgpo/gpo_util.o \
+	      libgpo/gpo_fetch.o libgpo/gpo_filesync.o
 LIBGPO_OBJ = $(LIBGPO_OBJ0)
 
-LIBADS_OBJ = libads/ldap.o libads/ldap_printer.o \
-	     libads/sasl.o libads/sasl_wrapping.o \
+LIBADS_OBJ = libads/ldap.o libads/ldap_printer.o libads/sasl.o \
 	     libads/krb5_setpw.o libads/ldap_user.o \
 	     libads/ads_struct.o libads/kerberos_keytab.o \
              libads/disp_sec.o libads/ads_utils.o libads/ldap_utils.o \
-	     libads/ldap_schema.o libads/util.o libads/ndr.o
+	     libads/authdata.o libads/cldap.o libads/util.o
 
-LIBADS_SERVER_OBJ = libads/kerberos_verify.o libads/authdata.o \
-		    librpc/ndr/ndr_krb5pac.o \
-		    librpc/gen_ndr/ndr_krb5pac.o
+LIBADS_SERVER_OBJ = libads/kerberos_verify.o \
+		    libads/ldap_schema.o
 
 SECRETS_OBJ = passdb/secrets.o passdb/machine_sid.o
 
-LIBNBT_OBJ = libcli/nbt/nbtname.o \
-	     librpc/gen_ndr/ndr_nbt.o \
-	     librpc/gen_ndr/ndr_svcctl.o
-
 LIBNMB_OBJ = libsmb/unexpected.o libsmb/namecache.o libsmb/nmblib.o \
 	     libsmb/namequery.o libsmb/conncache.o libads/dns.o
 
-NTERR_OBJ = libsmb/nterr.o
-DOSERR_OBJ = libsmb/doserr.o
-ERRORMAP_OBJ = libsmb/errormap.o
-DCE_RPC_ERR_OBJ = libsmb/dcerpc_err.o
+LIBSAMBA_OBJ = libsmb/nterr.o libsmb/dcerpc_err.o libsmb/smbdes.o \
+	       libsmb/smbencrypt.o libsmb/ntlm_check.o \
+	       libsmb/ntlmssp.o libsmb/ntlmssp_parse.o libsmb/ntlmssp_sign.o
 
-LIBSMB_ERR_OBJ0 = $(NTERR_OBJ) $(DOSERR_OBJ) $(ERRORMAP_OBJ) $(DCE_RPC_ERR_OBJ) \
-		  libsmb/smbdes.o libsmb/smbencrypt.o libsmb/ntlmssp_parse.o
-
-LIBSMB_ERR_OBJ = $(LIBSMB_ERR_OBJ0) \
-		 $(RPC_PARSE_OBJ1) \
-		 $(SECRETS_OBJ)
-
-LIBSMB_OBJ0 = \
-	       libsmb/ntlm_check.o \
-	       libsmb/ntlmssp.o \
-	       libsmb/ntlmssp_sign.o
-
-LIBSAMBA_OBJ = $(LIBSMB_OBJ0) \
-	       $(LIBSMB_ERR_OBJ)
-
-CLDAP_OBJ = libads/cldap.o
-
 LIBSMB_OBJ = libsmb/clientgen.o libsmb/cliconnect.o libsmb/clifile.o \
 	     libsmb/clikrb5.o libsmb/clispnego.o libsmb/asn1.o \
 	     libsmb/clirap.o libsmb/clierror.o libsmb/climessage.o \
@@ -439,166 +307,98 @@
 	     libsmb/clitrans.o libsmb/clisecdesc.o libsmb/clidgram.o \
 	     libsmb/clistr.o libsmb/cliquota.o libsmb/clifsinfo.o libsmb/clidfs.o \
              libsmb/smberr.o libsmb/credentials.o libsmb/pwd_cache.o \
-	     libsmb/clioplock.o libsmb/clirap2.o \
-	     libsmb/smb_seal.o libsmb/async_smb.o \
-	     $(LIBSAMBA_OBJ) \
-	     $(LIBNMB_OBJ) \
-	     $(LIBNBT_OBJ) \
-	     $(CLDAP_OBJ)
+	     libsmb/clioplock.o $(ERRORMAP_OBJ) libsmb/clirap2.o \
+	     $(DOSERR_OBJ) \
+	     $(RPC_PARSE_OBJ1) $(LIBSAMBA_OBJ) $(LIBNMB_OBJ)
 
-RPC_CLIENT_OBJ1 = rpc_client/cli_netlogon.o
+RPC_CLIENT_OBJ1 = rpc_client/cli_netlogon.o rpc_client/cli_srvsvc.o
 
 LIBMSRPC_OBJ = rpc_client/cli_lsarpc.o rpc_client/cli_samr.o \
 	       $(RPC_CLIENT_OBJ1) rpc_client/cli_reg.o $(RPC_CLIENT_OBJ) \
 	       rpc_client/cli_spoolss.o rpc_client/cli_spoolss_notify.o  \
-	       rpc_client/cli_svcctl.o \
-	       rpc_client/init_samr.o
+	       rpc_client/cli_ds.o rpc_client/cli_svcctl.o \
+	       rpc_client/cli_shutdown.o rpc_client/cli_dfs.o rpc_client/cli_echo.o
 
-LIBMSRPC_GEN_OBJ = librpc/gen_ndr/cli_lsa.o \
-		   librpc/gen_ndr/cli_dfs.o \
-		   librpc/gen_ndr/cli_echo.o \
-		   librpc/gen_ndr/cli_srvsvc.o \
-		   librpc/gen_ndr/cli_svcctl.o \
-		   librpc/gen_ndr/cli_winreg.o \
-		   librpc/gen_ndr/cli_initshutdown.o \
-		   librpc/gen_ndr/cli_eventlog.o \
-		   librpc/gen_ndr/cli_wkssvc.o \
-		   librpc/gen_ndr/cli_netlogon.o \
-		   librpc/gen_ndr/cli_samr.o \
-		   librpc/gen_ndr/cli_dssetup.o \
-		   librpc/gen_ndr/cli_ntsvcs.o \
-		   $(LIBNDR_GEN_OBJ) \
-		   $(RPCCLIENT_NDR_OBJ)
+LIBMSRPC_GEN_OBJ = librpc/gen_ndr/cli_wkssvc.o \
+		   $(LIBNDR_GEN_OBJ) $(LIBNDR_OBJ)
 
-#
-# registry-related objects
-#
-UTIL_REG_OBJ = lib/util_reg.o
-UTIL_REG_API_OBJ = lib/util_reg_api.o
-
-REG_INIT_BASIC_OBJ = registry/reg_init_basic.o
-REG_INIT_SMBCONF_OBJ = registry/reg_init_smbconf.o
-REG_INIT_FULL_OBJ = registry/reg_init_full.o
-
-REGFIO_OBJ = registry/regfio.o
-
 REGOBJS_OBJ = registry/reg_objects.o
 
-REG_BACKENDS_BASE_OBJ = registry/reg_backend_db.o
+REGISTRY_OBJ = registry/reg_frontend.o registry/reg_cachehook.o registry/reg_printing.o \
+               registry/reg_db.o registry/reg_eventlog.o registry/reg_shares.o \
+               registry/reg_util.o registry/reg_dynamic.o registry/reg_perfcount.o
 
-REG_BACKENDS_SMBCONF_OBJ = registry/reg_backend_smbconf.o
+RPC_LSA_OBJ = rpc_server/srv_lsa.o rpc_server/srv_lsa_nt.o
 
-REG_BACKENDS_EXTRA_OBJ = registry/reg_backend_printing.o \
-			 registry/reg_backend_shares.o \
-			 registry/reg_backend_netlogon_params.o \
-			 registry/reg_backend_prod_options.o \
-			 registry/reg_backend_tcpip_params.o \
-			 registry/reg_backend_hkpt_params.o \
-			 registry/reg_backend_current_version.o \
-			 registry/reg_backend_perflib.o
+RPC_NETLOG_OBJ = rpc_server/srv_netlog.o rpc_server/srv_netlog_nt.o
 
-REG_BASE_OBJ = registry/reg_api.o \
-	       registry/reg_dispatcher.o \
-	       registry/reg_cachehook.o \
-	       $(REGFIO_OBJ) \
-	       $(REGOBJS_OBJ) \
-	       registry/reg_util.o \
-	       $(UTIL_REG_API_OBJ) \
-	       lib/util_nttoken.o \
-	       $(REG_BACKENDS_BASE_OBJ) \
-	       $(REG_INIT_BASIC_OBJ)
+RPC_SAMR_OBJ = rpc_server/srv_samr.o rpc_server/srv_samr_nt.o \
+               rpc_server/srv_samr_util.o
 
-REG_SMBCONF_OBJ = $(REG_BASE_OBJ) \
-		  $(REG_BACKENDS_SMBCONF_OBJ) \
-		  $(REG_INIT_SMBCONF_OBJ)
+REGFIO_OBJ = registry/regfio.o
 
-REG_FULL_OBJ = $(REG_SMBCONF_OBJ) \
-	       $(REG_BACKENDS_EXTRA_OBJ) \
-	       $(REG_INIT_FULL_OBJ) \
-	       registry/reg_eventlog.o \
-	       registry/reg_perfcount.o \
-	       registry/reg_util_legacy.o
+RPC_REG_OBJ =  rpc_server/srv_reg.o rpc_server/srv_reg_nt.o $(REGFIO_OBJ)
 
+RPC_LSA_DS_OBJ =  rpc_server/srv_lsa_ds.o rpc_server/srv_lsa_ds_nt.o
 
-RPC_LSA_OBJ = rpc_server/srv_lsa_nt.o librpc/gen_ndr/srv_lsa.o
+RPC_SVC_OBJ = rpc_server/srv_srvsvc.o rpc_server/srv_srvsvc_nt.o
 
-RPC_NETLOG_OBJ = rpc_server/srv_netlog_nt.o \
-		 librpc/gen_ndr/srv_netlogon.o
-
-RPC_SAMR_OBJ = rpc_server/srv_samr_nt.o \
-               rpc_server/srv_samr_util.o \
-	       librpc/gen_ndr/srv_samr.o
-
-RPC_INITSHUTDOWN_OBJ =  librpc/gen_ndr/srv_initshutdown.o rpc_server/srv_initshutdown_nt.o
-
-RPC_REG_OBJ =  rpc_server/srv_winreg_nt.o \
-	       librpc/gen_ndr/srv_winreg.o
-
-RPC_DSSETUP_OBJ =  rpc_server/srv_dssetup_nt.o librpc/gen_ndr/srv_dssetup.o
-
-RPC_SVC_OBJ = rpc_server/srv_srvsvc_nt.o \
-	      librpc/gen_ndr/srv_srvsvc.o
-
 RPC_WKS_OBJ =  librpc/gen_ndr/srv_wkssvc.o rpc_server/srv_wkssvc_nt.o
 
 RPC_SVCCTL_OBJ =  rpc_server/srv_svcctl.o rpc_server/srv_svcctl_nt.o \
-		  librpc/gen_ndr/srv_svcctl.o \
                   services/svc_spoolss.o services/svc_rcinit.o services/services_db.o \
                   services/svc_netlogon.o services/svc_winreg.o \
                   services/svc_wins.o
 
-RPC_NTSVCS_OBJ = rpc_server/srv_ntsvcs.o rpc_server/srv_ntsvcs_nt.o \
-		 librpc/gen_ndr/srv_ntsvcs.o
+RPC_NTSVCS_OBJ = rpc_server/srv_ntsvcs.o rpc_server/srv_ntsvcs_nt.o
 
-RPC_DFS_OBJ =  librpc/gen_ndr/srv_dfs.o rpc_server/srv_dfs_nt.o
+RPC_DFS_OBJ =  rpc_server/srv_dfs.o rpc_server/srv_dfs_nt.o
 
 RPC_SPOOLSS_OBJ = rpc_server/srv_spoolss.o rpc_server/srv_spoolss_nt.o
 
-RPC_EVENTLOG_OBJ = rpc_server/srv_eventlog.o rpc_server/srv_eventlog_nt.o \
-		   rpc_server/srv_eventlog_lib.o librpc/gen_ndr/srv_eventlog.o
+RPC_EVENTLOG_OBJ = rpc_server/srv_eventlog.o rpc_server/srv_eventlog_nt.o rpc_server/srv_eventlog_lib.o
 
 RPC_PIPE_OBJ = rpc_server/srv_pipe_hnd.o \
                rpc_server/srv_pipe.o rpc_server/srv_lsa_hnd.o
 
-RPC_ECHO_OBJ = rpc_server/srv_echo_nt.o librpc/gen_ndr/srv_echo.o
+RPC_ECHO_OBJ = rpc_server/srv_echo.o rpc_server/srv_echo_nt.o
 
 RPC_SERVER_OBJ = @RPC_STATIC@ $(RPC_PIPE_OBJ)
 
-RPC_PARSE_OBJ = $(RPC_PARSE_OBJ2) \
-                rpc_parse/parse_spoolss.o \
+RPC_PARSE_OBJ = rpc_parse/parse_lsa.o $(RPC_PARSE_OBJ2) \
+                rpc_parse/parse_samr.o \
+                rpc_parse/parse_ds.o rpc_parse/parse_spoolss.o \
 	        rpc_parse/parse_eventlog.o rpc_parse/parse_buffer.o \
-                rpc_parse/parse_ntsvcs.o rpc_parse/parse_svcctl.o
+                rpc_parse/parse_ntsvcs.o rpc_parse/parse_svcctl.o $(REGOBJS_OBJ) \
+		rpc_parse/parse_dfs.o \
+		rpc_parse/parse_reg.o rpc_parse/parse_echo.o \
+		rpc_parse/parse_shutdown.o
 
 RPC_CLIENT_OBJ = rpc_client/cli_pipe.o
 
 LOCKING_OBJ = locking/locking.o locking/brlock.o locking/posix.o
 
-PRIVILEGES_BASIC_OBJ = lib/privileges_basic.o
-
-PRIVILEGES_OBJ = lib/privileges.o
-
 PASSDB_GET_SET_OBJ = passdb/pdb_get_set.o
 
 PASSDB_OBJ = $(PASSDB_GET_SET_OBJ) passdb/passdb.o passdb/pdb_interface.o \
 		passdb/util_wellknown.o passdb/util_builtin.o passdb/pdb_compat.o \
 		passdb/util_unixsids.o passdb/lookup_sid.o \
 		passdb/login_cache.o @PDB_STATIC@ \
-		lib/account_pol.o $(PRIVILEGES_OBJ) \
-		lib/util_nscd.o lib/winbind_util.o
+		lib/account_pol.o lib/privileges.o lib/util_nscd.o
 
 DEVEL_HELP_WEIRD_OBJ = modules/weird.o
 CP850_OBJ = modules/CP850.o
 CP437_OBJ = modules/CP437.o
 CHARSET_MACOSXFS_OBJ = modules/charset_macosxfs.o
 
-GROUPDB_OBJ = groupdb/mapping.o groupdb/mapping_tdb.o groupdb/mapping_ldb.o
+GROUPDB_OBJ = groupdb/mapping.o groupdb/mapping_tdb.o
 
 PROFILE_OBJ = profile/profile.o
 PROFILES_OBJ = utils/profiles.o \
-	       $(LIBSAMBA_OBJ) \
-	       $(PARAM_OBJ) \
-               $(LIB_OBJ) $(LIB_DUMMY_OBJ) \
-               $(POPT_LIB_OBJ)
+               $(REGFIO_OBJ) $(REGOBJS_OBJ) $(ERRORMAP_OBJ) \
+	       $(RPC_PARSE_OBJ1) $(PARAM_OBJ) $(LIBSAMBA_OBJ) \
+               $(DOSERR_OBJ) $(LIB_OBJ) $(LIB_DUMMY_OBJ) \
+               $(POPT_LIB_OBJ) $(SECRETS_OBJ)
 
 OPLOCK_OBJ = smbd/oplock.o smbd/oplock_irix.o smbd/oplock_linux.o
 
@@ -616,36 +416,27 @@
 VFS_CAP_OBJ = modules/vfs_cap.o
 VFS_EXPAND_MSDFS_OBJ = modules/vfs_expand_msdfs.o
 VFS_SHADOW_COPY_OBJ = modules/vfs_shadow_copy.o
-VFS_SHADOW_COPY2_OBJ = modules/vfs_shadow_copy2.o
 VFS_AFSACL_OBJ = modules/vfs_afsacl.o
-VFS_XATTR_TDB_OBJ = modules/vfs_xattr_tdb.o
 VFS_POSIXACL_OBJ = modules/vfs_posixacl.o
 VFS_AIXACL_OBJ = modules/vfs_aixacl.o modules/vfs_aixacl_util.o
 VFS_AIXACL2_OBJ = modules/vfs_aixacl2.o modules/vfs_aixacl_util.o modules/nfs4_acls.o
 VFS_SOLARISACL_OBJ = modules/vfs_solarisacl.o
-VFS_ZFSACL_OBJ = modules/vfs_zfsacl.o modules/nfs4_acls.o
 VFS_HPUXACL_OBJ = modules/vfs_hpuxacl.o
 VFS_IRIXACL_OBJ = modules/vfs_irixacl.o
 VFS_TRU64ACL_OBJ = modules/vfs_tru64acl.o
 VFS_CATIA_OBJ = modules/vfs_catia.o
-VFS_STREAMS_XATTR_OBJ = modules/vfs_streams_xattr.o
-VFS_STREAMS_DEPOT_OBJ = modules/vfs_streams_depot.o
 VFS_CACHEPRIME_OBJ = modules/vfs_cacheprime.o
 VFS_PREALLOC_OBJ = modules/vfs_prealloc.o
 VFS_COMMIT_OBJ = modules/vfs_commit.o
 VFS_GPFS_OBJ = modules/vfs_gpfs.o modules/gpfs.o modules/nfs4_acls.o
 VFS_NOTIFY_FAM_OBJ = modules/vfs_notify_fam.o
 VFS_READAHEAD_OBJ = modules/vfs_readahead.o
-VFS_TSMSM_OBJ = modules/vfs_tsmsm.o
-VFS_FILEID_OBJ = modules/vfs_fileid.o
-VFS_AIO_FORK_OBJ = modules/vfs_aio_fork.o
-VFS_SYNCOPS_OBJ = modules/vfs_syncops.o
 
 PLAINTEXT_AUTH_OBJ = auth/pampass.o auth/pass_check.o
 
 SLCACHE_OBJ = libsmb/samlogon_cache.o
 
-DCUTIL_OBJ  = libsmb/namequery_dc.o libsmb/trustdom_cache.o libsmb/trusts_util.o libsmb/dsgetdcname.o
+DCUTIL_OBJ  = libsmb/namequery_dc.o libsmb/trustdom_cache.o libsmb/trusts_util.o
 
 AUTH_BUILTIN_OBJ = auth/auth_builtin.o
 AUTH_DOMAIN_OBJ = auth/auth_domain.o
@@ -655,11 +446,11 @@
 AUTH_WINBIND_OBJ = auth/auth_winbind.o
 AUTH_SCRIPT_OBJ = auth/auth_script.o
 
-AUTH_OBJ = auth/auth.o @AUTH_STATIC@ auth/auth_util.o auth/token_util.o \
-	   auth/auth_compat.o auth/auth_ntlmssp.o \
+AUTH_OBJ = auth/auth.o @AUTH_STATIC@ auth/auth_util.o auth/auth_compat.o \
+	   auth/auth_ntlmssp.o \
 	   $(PLAINTEXT_AUTH_OBJ) $(SLCACHE_OBJ) $(DCUTIL_OBJ)
 
-MANGLE_OBJ = smbd/mangle.o smbd/mangle_hash.o smbd/mangle_hash2.o
+MANGLE_OBJ = smbd/mangle.o smbd/mangle_hash.o smbd/mangle_map.o smbd/mangle_hash2.o
 
 SMBD_OBJ_MAIN = smbd/server.o
 
@@ -674,7 +465,7 @@
                smbd/reply.o smbd/sesssetup.o smbd/trans2.o smbd/uid.o \
 	       smbd/dosmode.o smbd/filename.o smbd/open.o smbd/close.o \
 	       smbd/blocking.o smbd/sec_ctx.o smbd/srvstr.o \
-	       smbd/vfs.o smbd/statcache.o smbd/seal.o \
+	       smbd/vfs.o smbd/statcache.o \
                smbd/posix_acls.o lib/sysacls.o $(SERVER_MUTEX_OBJ) \
 	       smbd/process.o smbd/service.o smbd/error.o \
 	       printing/printfsp.o lib/sysquotas.o lib/sysquotas_linux.o \
@@ -682,33 +473,27 @@
 	       smbd/change_trust_pw.o smbd/fake_file.o \
 	       smbd/quotas.o smbd/ntquotas.o $(AFS_OBJ) smbd/msdfs.o \
 	       $(AFS_SETTOKEN_OBJ) smbd/aio.o smbd/statvfs.o \
-	       smbd/dmapi.o \
-	       smbd/file_access.o \
-	       smbd/dnsregister.o \
-	       $(MANGLE_OBJ) @VFS_STATIC@
+	       smbd/dmapi.o $(MANGLE_OBJ) @VFS_STATIC@
 
-SMBD_OBJ_BASE = $(PARAM_WITHOUT_REG_OBJ) $(SMBD_OBJ_SRV) $(LIBSMB_OBJ) \
-		$(RPC_SERVER_OBJ) $(RPC_PARSE_OBJ) \
+SMBD_OBJ_BASE = $(PARAM_OBJ) $(SMBD_OBJ_SRV) $(LIBSMB_OBJ) \
+		$(RPC_SERVER_OBJ) $(RPC_PARSE_OBJ) $(SECRETS_OBJ) \
 		$(LOCKING_OBJ) $(PASSDB_OBJ) $(PRINTING_OBJ) $(PROFILE_OBJ) \
 		$(LIB_OBJ) $(PRINTBACKEND_OBJ) $(OPLOCK_OBJ) \
 		$(NOTIFY_OBJ) $(GROUPDB_OBJ) $(AUTH_OBJ) \
 		$(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) \
 		$(LIBADS_OBJ) $(KRBCLIENT_OBJ) $(LIBADS_SERVER_OBJ) \
-		$(REG_FULL_OBJ) $(POPT_LIB_OBJ) $(BUILDOPT_OBJ) \
-		$(SMBLDAP_OBJ) $(LDB_OBJ) $(LIBNET_OBJ) @LIBWBCLIENT_STATIC@ \
-		$(LIBSMBCONF_OBJ) \
-		$(PRIVILEGES_BASIC_OBJ)
+		$(REGISTRY_OBJ) $(POPT_LIB_OBJ) \
+		$(BUILDOPT_OBJ) $(SMBLDAP_OBJ)
 
 PRINTING_OBJ = printing/pcap.o printing/print_svid.o printing/print_aix.o \
                printing/print_cups.o printing/print_generic.o \
                printing/lpq_parse.o printing/load.o \
-               printing/print_iprint.o
+               printing/print_iprint.o printing/print_test.o
 
 PRINTBASE_OBJ = printing/notify.o printing/printing_db.o
 PRINTBACKEND_OBJ = printing/printing.o printing/nt_printing.o $(PRINTBASE_OBJ)
 
 SMBD_OBJ = $(SMBD_OBJ_BASE) $(SMBD_OBJ_MAIN)
-
 NMBD_OBJ1 = nmbd/asyncdns.o nmbd/nmbd.o nmbd/nmbd_become_dmb.o \
             nmbd/nmbd_become_lmb.o nmbd/nmbd_browserdb.o \
             nmbd/nmbd_browsesync.o nmbd/nmbd_elections.o \
@@ -720,58 +505,55 @@
             nmbd/nmbd_processlogon.o nmbd/nmbd_responserecordsdb.o \
             nmbd/nmbd_sendannounce.o nmbd/nmbd_serverlistdb.o \
             nmbd/nmbd_subnetdb.o nmbd/nmbd_winsproxy.o nmbd/nmbd_winsserver.o \
-            nmbd/nmbd_workgroupdb.o nmbd/nmbd_synclists.o smbd/connection.o
+            nmbd/nmbd_workgroupdb.o nmbd/nmbd_synclists.o
 
 NMBD_OBJ = $(NMBD_OBJ1) $(PARAM_OBJ) $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
-           $(PROFILE_OBJ) $(LIB_NONSMBD_OBJ) $(POPT_LIB_OBJ) \
-	   librpc/gen_ndr/ndr_samr.o librpc/gen_ndr/ndr_lsa.o
+           $(PROFILE_OBJ) $(LIB_NONSMBD_OBJ) $(SECRETS_OBJ) $(POPT_LIB_OBJ)
 
 SWAT_OBJ1 = web/cgi.o web/diagnose.o web/startstop.o web/statuspage.o \
            web/swat.o web/neg_lang.o
 
 SWAT_OBJ = $(SWAT_OBJ1) $(PARAM_OBJ) $(PRINTING_OBJ) $(LIBSMB_OBJ) \
-	   $(LOCKING_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(KRBCLIENT_OBJ) \
+	   $(LOCKING_OBJ) $(PASSDB_OBJ) $(SECRETS_OBJ) $(KRBCLIENT_OBJ) \
 	   $(LIB_NONSMBD_OBJ) $(GROUPDB_OBJ) $(PLAINTEXT_AUTH_OBJ) \
 	   $(POPT_LIB_OBJ) $(SMBLDAP_OBJ) $(RPC_PARSE_OBJ) $(LIBMSRPC_GEN_OBJ) $(LIBMSRPC_OBJ) \
-           $(PASSCHANGE_OBJ) $(LDB_OBJ)
+           $(PASSCHANGE_OBJ)
 
 STATUS_OBJ = utils/status.o utils/status_profile.o \
 	     $(LOCKING_OBJ) $(PARAM_OBJ) \
              $(PROFILE_OBJ) $(LIB_NONSMBD_OBJ) $(POPT_LIB_OBJ) \
-	     $(LIBSAMBA_OBJ)
+	     $(SECRETS_OBJ) $(LIBSAMBA_OBJ) $(ERRORMAP_OBJ) $(RPC_PARSE_OBJ1) \
+             $(DOSERR_OBJ)
 
 SMBCONTROL_OBJ = utils/smbcontrol.o $(LOCKING_OBJ) $(PARAM_OBJ) \
 	$(PROFILE_OBJ) $(LIB_NONSMBD_OBJ) $(POPT_LIB_OBJ) \
-	$(LIBSAMBA_OBJ) \
-	$(PRINTBASE_OBJ)
+	$(SECRETS_OBJ) $(LIBSAMBA_OBJ) $(RPC_PARSE_OBJ1) $(DOSERR_OBJ) \
+	$(PRINTBASE_OBJ) $(ERRORMAP_OBJ)
 
 SMBTREE_OBJ = utils/smbtree.o $(PARAM_OBJ) \
              $(PROFILE_OBJ) $(LIB_NONSMBD_OBJ) $(LIBSMB_OBJ) \
-	     $(KRBCLIENT_OBJ) $(POPT_LIB_OBJ) \
+	     $(KRBCLIENT_OBJ) $(POPT_LIB_OBJ) $(SECRETS_OBJ) \
              rpc_client/cli_pipe.o $(RPC_PARSE_OBJ2) \
              $(RPC_CLIENT_OBJ1) \
-	     $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(SMBLDAP_OBJ) $(LDB_OBJ) $(GROUPDB_OBJ) \
 	     $(LIBMSRPC_GEN_OBJ)
 
 TESTPARM_OBJ = utils/testparm.o \
                $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) $(POPT_LIB_OBJ) \
-	       $(LIBSAMBA_OBJ)
+	       $(SECRETS_OBJ) $(LIBSAMBA_OBJ) $(RPC_PARSE_OBJ1) $(DOSERR_OBJ)
 
 PASSWD_UTIL_OBJ = utils/passwd_util.o
 
 SMBPASSWD_OBJ = utils/smbpasswd.o $(PASSWD_UTIL_OBJ) $(PASSCHANGE_OBJ) \
-		$(PARAM_OBJ) $(LIBSMB_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ \
+		$(PARAM_OBJ) $(SECRETS_OBJ) $(LIBSMB_OBJ) $(PASSDB_OBJ) \
 		$(GROUPDB_OBJ) $(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ) \
-		$(POPT_LIB_OBJ) $(SMBLDAP_OBJ) $(RPC_PARSE_OBJ) \
-		$(LIBMSRPC_GEN_OBJ) $(LIBMSRPC_OBJ) $(LDB_OBJ)
+		$(POPT_LIB_OBJ) $(SMBLDAP_OBJ) $(RPC_PARSE_OBJ) $(LIBMSRPC_GEN_OBJ) $(LIBMSRPC_OBJ)
 
-PDBEDIT_OBJ = utils/pdbedit.o $(PASSWD_UTIL_OBJ) $(PARAM_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ \
-		$(LIBSAMBA_OBJ) \
-		$(LIB_NONSMBD_OBJ) $(GROUPDB_OBJ) \
-		$(POPT_LIB_OBJ) $(SMBLDAP_OBJ) libsmb/asn1.o \
-		$(LDB_OBJ)
+PDBEDIT_OBJ = utils/pdbedit.o $(PASSWD_UTIL_OBJ) $(PARAM_OBJ) $(PASSDB_OBJ) \
+		$(LIBSAMBA_OBJ) $(LIB_NONSMBD_OBJ) $(GROUPDB_OBJ) \
+		$(SECRETS_OBJ) $(POPT_LIB_OBJ) $(SMBLDAP_OBJ) libsmb/asn1.o \
+		$(RPC_PARSE_OBJ1) $(DOSERR_OBJ) libsmb/errormap.o
 
-SMBGET_OBJ = utils/smbget.o $(POPT_LIB_OBJ) $(LIBSMBCLIENT_OBJ0) @LIBWBCLIENT_STATIC@
+SMBGET_OBJ = utils/smbget.o $(POPT_LIB_OBJ) $(LIBSMBCLIENT_OBJ)
 
 DISPLAY_SEC_OBJ= lib/display_sec.o
 
@@ -779,42 +561,33 @@
 	         rpcclient/cmd_samr.o rpcclient/cmd_spoolss.o \
 		 rpcclient/cmd_netlogon.o rpcclient/cmd_srvsvc.o \
 		 rpcclient/cmd_dfs.o \
-		 rpcclient/cmd_dssetup.o rpcclient/cmd_echo.o \
+		 rpcclient/cmd_ds.o rpcclient/cmd_echo.o \
 		 rpcclient/cmd_shutdown.o rpcclient/cmd_test.o \
-		 rpcclient/cmd_wkssvc.o rpcclient/cmd_ntsvcs.o \
 		 $(DISPLAY_SEC_OBJ)
 
 RPCCLIENT_OBJ = $(RPCCLIENT_OBJ1) \
              $(PARAM_OBJ) $(LIBSMB_OBJ) $(LIB_NONSMBD_OBJ) \
-             $(RPC_PARSE_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(LIBMSRPC_GEN_OBJ) $(LIBMSRPC_OBJ) \
+             $(RPC_PARSE_OBJ) $(PASSDB_OBJ) $(LIBMSRPC_GEN_OBJ) $(LIBMSRPC_OBJ) \
              $(READLINE_OBJ) $(GROUPDB_OBJ) $(KRBCLIENT_OBJ) \
-	     $(LIBADS_OBJ) $(POPT_LIB_OBJ) \
-	     $(SMBLDAP_OBJ) $(DCUTIL_OBJ) $(LDB_OBJ) 
+	     $(LIBADS_OBJ) $(SECRETS_OBJ) $(POPT_LIB_OBJ) \
+	     $(SMBLDAP_OBJ) $(DCUTIL_OBJ)
 
 PAM_WINBIND_OBJ = nsswitch/pam_winbind.o $(WBCOMMON_OBJ) \
-		  $(LIBREPLACE_OBJ) @BUILD_INIPARSER@
+		  $(LIBREPLACE_OBJ) $(SOCKET_WRAPPER_OBJ) @BUILD_INIPARSER@
 
-LIBSMBCLIENT_OBJ0 = \
-		    libsmb/libsmb_cache.o \
-		    libsmb/libsmb_compat.o \
-		    libsmb/libsmb_context.o \
-		    libsmb/libsmb_dir.o \
-		    libsmb/libsmb_file.o \
-		    libsmb/libsmb_misc.o \
-		    libsmb/libsmb_path.o \
-		    libsmb/libsmb_printjob.o \
-		    libsmb/libsmb_server.o \
-		    libsmb/libsmb_stat.o \
-		    libsmb/libsmb_xattr.o \
-		    libsmb/libsmb_setget.o \
-		    $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
-		    $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
-		    $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(RPC_PARSE_OBJ) \
-		    $(PASSDB_OBJ) $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ)
+LIBSMBCLIENT_OBJ = libsmb/libsmbclient.o libsmb/libsmb_compat.o \
+		   libsmb/libsmb_cache.o \
+		   $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
+	  	   $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
+		   $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(RPC_PARSE_OBJ) \
+		   $(SECRETS_OBJ) $(PASSDB_OBJ) $(SMBLDAP_OBJ) $(GROUPDB_OBJ)
 
-LIBSMBCLIENT_OBJ = $(LIBSMBCLIENT_OBJ0) @LIBWBCLIENT_STATIC@
+CAC_OBJ = $(LIBSMBCLIENT_OBJ) \
+			 libmsrpc/libmsrpc.o libmsrpc/libmsrpc_internal.o \
+			 libmsrpc/cac_lsarpc.o libmsrpc/cac_winreg.o libmsrpc/cac_samr.o \
+			 libmsrpc/cac_svcctl.o
 
-LIBSMBSHAREMODES_OBJ = libsmb/smb_share_modes.o @LIBTDB_STATIC@
+LIBSMBSHAREMODES_OBJ = libsmb/smb_share_modes.o $(TDB_BASE_OBJ)
 
 # This shared library is intended for linking with unit test programs
 # to test Samba internals.  It's called libbigballofmud.so to
@@ -822,56 +595,25 @@
 
 LIBBIGBALLOFMUD_MAJOR = 0
 
-LIBBIGBALLOFMUD_OBJ = $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
-	$(LIBSMB_OBJ) $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(RPC_PARSE_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ \
-	$(GROUPDB_OBJ) $(KRBCLIENT_OBJ) $(SMBLDAP_OBJ) $(LDB_OBJ)
+LIBBIGBALLOFMUD_OBJ = $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) $(SECRETS_OBJ) \
+	$(LIBSMB_OBJ) $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(RPC_PARSE_OBJ) $(PASSDB_OBJ) \
+	$(GROUPDB_OBJ) $(KRBCLIENT_OBJ) $(SMBLDAP_OBJ)
 
 CLIENT_OBJ1 = client/client.o client/clitar.o rpc_client/cli_pipe.o \
-	      client/dnsbrowse.o \
 	      $(RPC_CLIENT_OBJ1) \
 	      $(RPC_PARSE_OBJ2)
 
 CLIENT_OBJ = $(CLIENT_OBJ1) $(PARAM_OBJ) $(LIBSMB_OBJ) \
 	     $(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ) $(LIBMSRPC_GEN_OBJ) \
-             $(READLINE_OBJ) $(POPT_LIB_OBJ) \
-             $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ) \
-	     $(DISPLAY_SEC_OBJ) 
+             $(READLINE_OBJ) $(POPT_LIB_OBJ) $(SECRETS_OBJ) \
+	     $(DISPLAY_SEC_OBJ)
 
-LIBNETAPI_OBJ1 = lib/netapi/netapi.o \
-		 lib/netapi/cm.o \
-		 librpc/gen_ndr/ndr_libnetapi.o \
-		 lib/netapi/libnetapi.o \
-		 lib/netapi/joindomain.o \
-		 lib/netapi/serverinfo.o \
-		 lib/netapi/getdc.o \
-		 lib/netapi/user.o
+TOOL_OBJ = client/smbctool.o client/clitar.o $(PARAM_OBJ) $(LIBSMB_OBJ) \
+	     $(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ) \
+             $(READLINE_OBJ) $(POPT_LIB_OBJ) $(SECRETS_OBJ) \
+	     $(DISPLAY_SEC_OBJ)
 
-LIBNETAPI_OBJ  = $(LIBNETAPI_OBJ1) $(LIBNET_OBJ) \
-		 $(LIBSMBCONF_OBJ) \
-		 $(REG_SMBCONF_OBJ) \
-		 $(PARAM_WITHOUT_REG_OBJ) $(LIB_NONSMBD_OBJ) \
-		 $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
-		 $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(RPC_PARSE_OBJ) \
-		 $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ) \
-		 $(DCUTIL_OBJ) $(LIBADS_OBJ) $(PRIVILEGES_BASIC_OBJ)
-
-LIBSMBCONF_OBJ = lib/smbconf/smbconf.o lib/smbconf/smbconf_util.o \
-		 lib/smbconf/smbconf_reg.o \
-		 lib/smbconf/smbconf_txt.o \
-		 lib/smbconf/smbconf_init.o
-
-SMBCONFTORT_OBJ0 = lib/smbconf/testsuite.o
-
-SMBCONFTORT_OBJ = $(SMBCONFTORT_OBJ0) \
-		  $(LIB_NONSMBD_OBJ) \
-		  $(PARAM_OBJ) \
-		  $(LIBSMB_ERR_OBJ) \
-		  $(POPT_LIB_OBJ)
-
-LIBNET_OBJ = libnet/libnet_join.o \
-	     librpc/gen_ndr/ndr_libnet_join.o
-
-NET_OBJ1 = utils/net.o utils/net_ads.o utils/net_help.o \
+NET_OBJ1 = utils/net.o utils/net_ads.o utils/net_domain.o utils/net_help.o \
 	   utils/net_rap.o utils/net_rpc.o utils/net_rpc_samsync.o \
 	   utils/net_rpc_join.o utils/net_time.o utils/net_lookup.o \
 	   utils/net_cache.o utils/net_groupmap.o utils/net_idmap.o \
@@ -879,121 +621,112 @@
 	   utils/net_rpc_service.o utils/net_rpc_registry.o utils/net_usershare.o \
 	   utils/netlookup.o utils/net_sam.o utils/net_rpc_shell.o \
 	   utils/net_util.o utils/net_rpc_sh_acct.o utils/net_rpc_audit.o \
-	   $(PASSWD_UTIL_OBJ) utils/net_dns.o utils/net_ads_gpo.o \
-	   utils/net_conf.o \
-	   utils/net_registry.o \
-	   auth/token_util.o utils/net_dom.o
+	   $(PASSWD_UTIL_OBJ) utils/net_dns.o utils/net_ads_gpo.o
 
-# these are not processed by make proto
-NET_OBJ2 = utils/net_registry_util.o
-
-NET_OBJ = $(NET_OBJ1) \
-	  $(NET_OBJ2) \
-	  $(PARAM_WITHOUT_REG_OBJ) $(LIBSMB_OBJ) \
+NET_OBJ = $(NET_OBJ1) $(PARAM_OBJ) $(SECRETS_OBJ) $(LIBSMB_OBJ) \
 	  $(RPC_PARSE_OBJ) $(PASSDB_OBJ) $(GROUPDB_OBJ) \
 	  $(KRBCLIENT_OBJ) $(LIB_NONSMBD_OBJ) $(LIBADDNS_OBJ0) \
 	  $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) \
 	  $(LIBADS_OBJ) $(LIBADS_SERVER_OBJ) $(POPT_LIB_OBJ) \
 	  $(SMBLDAP_OBJ) $(DCUTIL_OBJ) $(SERVER_MUTEX_OBJ) \
-	  $(AFS_OBJ) $(AFS_SETTOKEN_OBJ) $(READLINE_OBJ) \
-	  $(LDB_OBJ) $(LIBGPO_OBJ) @BUILD_INIPARSER@ $(DISPLAY_SEC_OBJ) \
-	  $(REG_SMBCONF_OBJ) @LIBNETAPI_STATIC@ $(LIBNET_OBJ) \
-	  $(LIBSMBCONF_OBJ) \
-	  @LIBWBCLIENT_STATIC@ \
-	  $(PRIVILEGES_BASIC_OBJ)
+	  $(AFS_OBJ) $(AFS_SETTOKEN_OBJ) $(REGFIO_OBJ) $(READLINE_OBJ) \
+	  $(LIBGPO_OBJ) $(INIPARSER_OBJ) $(DISPLAY_SEC_OBJ)
 
 CUPS_OBJ = client/smbspool.o $(PARAM_OBJ) $(LIBSMB_OBJ) \
-	  $(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ) $(POPT_LIB_OBJ) \
-	  librpc/gen_ndr/ndr_samr.o librpc/gen_ndr/ndr_lsa.o
+	  $(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ) $(SECRETS_OBJ)
 
+MOUNT_OBJ = client/smbmount.o \
+             $(PARAM_OBJ) $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) $(LIB_NONSMBD_OBJ) $(SECRETS_OBJ)
+
+MNT_OBJ = client/smbmnt.o $(VERSION_OBJ) $(LIBREPLACE_OBJ) $(SOCKET_WRAPPER_OBJ)
+
+UMOUNT_OBJ = client/smbumount.o $(SOCKET_WRAPPER_OBJ)
+
 CIFS_MOUNT_OBJ = client/mount.cifs.o
 
 CIFS_UMOUNT_OBJ = client/umount.cifs.o
 
-CIFS_SPNEGO_OBJ = client/cifs.spnego.o
+NMBLOOKUP_OBJ = utils/nmblookup.o $(PARAM_OBJ) $(LIBNMB_OBJ) $(RPC_PARSE_OBJ1) $(DOSERR_OBJ) \
+               $(LIB_NONSMBD_OBJ) $(POPT_LIB_OBJ) $(SECRETS_OBJ) $(LIBSAMBA_OBJ)
 
-NMBLOOKUP_OBJ = utils/nmblookup.o $(PARAM_OBJ) $(LIBNMB_OBJ) \
-               $(LIB_NONSMBD_OBJ) $(POPT_LIB_OBJ) $(LIBSAMBA_OBJ)
-
 SMBTORTURE_OBJ1 = torture/torture.o torture/nbio.o torture/scanner.o torture/utable.o \
 		torture/denytest.o torture/mangle_test.o
 
 SMBTORTURE_OBJ = $(SMBTORTURE_OBJ1) $(PARAM_OBJ) \
-	$(LIBSMB_OBJ) $(KRBCLIENT_OBJ) $(LIB_NONSMBD_OBJ) \
-	librpc/gen_ndr/ndr_samr.o librpc/gen_ndr/ndr_lsa.o
+	$(LIBSMB_OBJ) $(KRBCLIENT_OBJ) $(LIB_NONSMBD_OBJ) $(SECRETS_OBJ)
 
 MASKTEST_OBJ = torture/masktest.o $(PARAM_OBJ) $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
-                 $(LIB_NONSMBD_OBJ) \
-		 librpc/gen_ndr/ndr_samr.o librpc/gen_ndr/ndr_lsa.o
+                 $(LIB_NONSMBD_OBJ) $(SECRETS_OBJ)
 
 MSGTEST_OBJ = torture/msgtest.o $(PARAM_OBJ) $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
-                 $(LIB_NONSMBD_OBJ) \
-		 librpc/gen_ndr/ndr_samr.o librpc/gen_ndr/ndr_lsa.o
+                 $(LIB_NONSMBD_OBJ) $(SECRETS_OBJ)
 
 LOCKTEST_OBJ = torture/locktest.o $(PARAM_OBJ) $(LOCKING_OBJ) $(KRBCLIENT_OBJ) \
-               $(LIBSMB_OBJ) $(LIB_NONSMBD_OBJ) \
-               librpc/gen_ndr/ndr_samr.o librpc/gen_ndr/ndr_lsa.o
+               $(LIBSMB_OBJ) $(LIB_NONSMBD_OBJ) $(SECRETS_OBJ)
 
 NSSTEST_OBJ = torture/nsstest.o $(PARAM_OBJ) $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
-                 $(LIB_NONSMBD_OBJ) \
-		 librpc/gen_ndr/ndr_samr.o librpc/gen_ndr/ndr_lsa.o
+                 $(LIB_NONSMBD_OBJ) $(SECRETS_OBJ)
 
 PDBTEST_OBJ = torture/pdbtest.o $(PARAM_OBJ) $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
-		$(LIB_NONSMBD_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(GROUPDB_OBJ) \
-		$(SMBLDAP_OBJ) $(POPT_LIB_OBJ) $(LDB_OBJ) \
-		librpc/gen_ndr/ndr_samr.o librpc/gen_ndr/ndr_lsa.o
+		$(LIB_NONSMBD_OBJ) $(SECRETS_OBJ) $(PASSDB_OBJ) $(GROUPDB_OBJ) \
+		$(SMBLDAP_OBJ) $(POPT_LIB_OBJ)
 
+
 VFSTEST_OBJ = torture/cmd_vfs.o torture/vfstest.o $(SMBD_OBJ_BASE) $(READLINE_OBJ)
 
-SMBICONV_OBJ = $(PARAM_OBJ) torture/smbiconv.o $(LIB_NONSMBD_OBJ) $(POPT_LIB_OBJ) $(LIBSAMBA_OBJ)
+SMBICONV_OBJ = $(PARAM_OBJ) torture/smbiconv.o $(LIB_NONSMBD_OBJ) $(POPT_LIB_OBJ) $(SECRETS_OBJ) $(LIBSAMBA_OBJ)
 
 LOG2PCAP_OBJ = utils/log2pcaphex.o
 
 LOCKTEST2_OBJ = torture/locktest2.o $(PARAM_OBJ) $(LOCKING_OBJ) $(LIBSMB_OBJ) \
-		$(KRBCLIENT_OBJ) $(LIB_NONSMBD_OBJ) \
-		librpc/gen_ndr/ndr_samr.o librpc/gen_ndr/ndr_lsa.o
+		$(KRBCLIENT_OBJ) $(LIB_NONSMBD_OBJ) $(SECRETS_OBJ)
 
 SMBCACLS_OBJ = utils/smbcacls.o $(PARAM_OBJ) $(LIBSMB_OBJ) \
-		$(KRBCLIENT_OBJ) $(LIB_NONSMBD_OBJ) $(RPC_PARSE_OBJ) \
-		$(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(GROUPDB_OBJ) $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) \
-		$(POPT_LIB_OBJ) $(DCUTIL_OBJ) $(LIBADS_OBJ) $(SMBLDAP_OBJ) $(LDB_OBJ)
+			   $(KRBCLIENT_OBJ) $(LIB_NONSMBD_OBJ) $(RPC_PARSE_OBJ) \
+			   $(PASSDB_OBJ) $(GROUPDB_OBJ) $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(SECRETS_OBJ) \
+			   $(POPT_LIB_OBJ) $(DCUTIL_OBJ) $(LIBADS_OBJ) $(SMBLDAP_OBJ)
 
 SMBCQUOTAS_OBJ = utils/smbcquotas.o $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
 		$(PARAM_OBJ) \
 		$(LIB_NONSMBD_OBJ) $(RPC_PARSE_OBJ) \
-		$(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(POPT_LIB_OBJ) \
-		$(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ)
+		$(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(SECRETS_OBJ) $(POPT_LIB_OBJ) \
+		$(PASSDB_OBJ) $(SMBLDAP_OBJ) $(GROUPDB_OBJ)
 
 EVTLOGADM_OBJ0	= utils/eventlogadm.o
 
-EVTLOGADM_OBJ	= $(EVTLOGADM_OBJ0) $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
-		$(LIBSAMBA_OBJ) \
-	        registry/reg_eventlog.o rpc_server/srv_eventlog_lib.o
+EVTLOGADM_OBJ	= $(EVTLOGADM_OBJ0) $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) $(REGOBJS_OBJ) \
+		$(ERRORMAP_OBJ) $(RPC_PARSE_OBJ1) $(LIBSAMBA_OBJ) $(DOSERR_OBJ) \
+		$(SECRETS_OBJ) \
+	        registry/reg_eventlog.o rpc_server/srv_eventlog_lib.o registry/reg_util.o \
+		registry/reg_db.o
 
 SHARESEC_OBJ0 = utils/sharesec.o
-SHARESEC_OBJ  = $(SHARESEC_OBJ0) $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
-		$(LIBSAMBA_OBJ) \
-                $(POPT_LIB_OBJ)
+SHARESEC_OBJ  = $(SHARESEC_OBJ0) $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) $(REGOBJS_OBJ) \
+		$(ERRORMAP_OBJ) $(RPC_PARSE_OBJ1) $(LIBSAMBA_OBJ) $(DOSERR_OBJ) \
+                $(POPT_LIB_OBJ) $(SECRETS_OBJ)
 
-TALLOCTORT_OBJ = @tallocdir@/testsuite.o $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
-                 $(LIBSAMBA_OBJ)
+TALLOCTORT_OBJ = lib/talloc/testsuite.o $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
+                 $(RPC_PARSE_OBJ1) $(DOSERR_OBJ) $(LIBSAMBA_OBJ) $(SECRETS_OBJ)
 
 REPLACETORT_OBJ = lib/replace/test/testsuite.o \
-		lib/replace/test/getifaddrs.o \
 		lib/replace/test/os2_delete.o \
 		lib/replace/test/strptime.o \
 		$(LIBREPLACE_OBJ)
 
-NDRDUMP_OBJ = librpc/tools/ndrdump.o \
-	      $(PARAM_OBJ) $(LIBNDR_GEN_OBJ) \
-	      $(LIBSAMBA_OBJ) $(LIB_NONSMBD_OBJ) $(POPT_LIB_OBJ) \
-	      librpc/gen_ndr/ndr_svcctl.o
+RPCTORTURE_OBJ = torture/rpctorture.o \
+             rpcclient/display.o \
+             rpcclient/cmd_lsarpc.o \
+             rpcclient/cmd_samr.o \
+	     rpcclient/cmd_wkssvc.o \
+             rpcclient/cmd_srvsvc.o \
+             rpcclient/cmd_netlogon.o \
+             $(PARAM_OBJ) $(LIBSMB_OBJ) $(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ) \
+             $(RPC_CLIENT_OBJ) $(RPC_PARSE_OBJ) $(PASSDB_GET_SET_OBJ) $(SECRETS_OBJ)
 
 DEBUG2HTML_OBJ = utils/debug2html.o utils/debugparse.o
 
-SMBFILTER_OBJ = utils/smbfilter.o $(PARAM_OBJ) $(LIBSMB_OBJ) \
-                 $(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ) \
-		 librpc/gen_ndr/ndr_samr.o librpc/gen_ndr/ndr_lsa.o
+SMBFILTER_OBJ = utils/smbfilter.o $(PARAM_OBJ) $(LIBSMB_OBJ) $(SECRETS_OBJ) \
+                 $(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ)
 
 PROTO_OBJ = $(SMBD_OBJ_MAIN) $(LIBNDR_OBJ) $(LIBNDR_GEN_OBJ) \
 	    $(SMBD_OBJ_SRV) $(NMBD_OBJ1) $(LIBSMB_OBJ) \
@@ -1001,156 +734,102 @@
 	    $(LIBMSRPC_OBJ) \
 	    $(LIB_WITH_PROTO_OBJ) \
 	    $(RPC_PIPE_OBJ) $(RPC_PARSE_OBJ) $(KRBCLIENT_OBJ) \
-	    $(AUTH_OBJ) $(PARAM_WITHOUT_REG_OBJ) $(LOCKING_OBJ) \
+	    $(AUTH_OBJ) $(PARAM_OBJ) $(LOCKING_OBJ) $(SECRETS_OBJ) \
 	    $(PRINTING_OBJ) $(PRINTBACKEND_OBJ) $(OPLOCK_OBJ) $(NOTIFY_OBJ) \
 	    $(PASSDB_OBJ) $(GROUPDB_OBJ) \
 	    $(READLINE_OBJ) $(PROFILE_OBJ) $(LIBADS_OBJ) $(LIBADS_SERVER_OBJ) \
-	    $(AUTH_SAM_OBJ) $(REG_FULL_OBJ) $(POPT_LIB_OBJ) \
-	    $(RPC_LSA_OBJ) $(RPC_NETLOG_OBJ) $(RPC_SAMR_OBJ) $(RPC_REG_OBJ) $(RPC_DSSETUP_OBJ) \
+	    $(AUTH_SAM_OBJ) $(REGISTRY_OBJ) $(POPT_LIB_OBJ) \
+	    $(RPC_LSA_OBJ) $(RPC_NETLOG_OBJ) $(RPC_SAMR_OBJ) $(RPC_REG_OBJ) $(RPC_LSA_DS_OBJ) \
 	    $(RPC_SVC_OBJ) $(RPC_WKS_OBJ) $(RPC_DFS_OBJ) $(RPC_SPOOLSS_OBJ) \
 	    $(RPC_ECHO_OBJ) $(RPC_SVCCTL_OBJ) $(RPC_EVENTLOG_OBJ) $(SMBLDAP_OBJ) \
-            $(IDMAP_OBJ) libsmb/spnego.o $(PASSCHANGE_OBJ) \
-	    $(RPC_NTSVCS_OBJ) $(RPC_INITSHUTDOWN_OBJ) \
-	    utils/passwd_util.o $(LIBGPO_OBJ) $(NSS_INFO_OBJ) \
-	    $(RPCCLIENT_NDR_OBJ) \
-	    $(PRIVILEGES_BASIC_OBJ)
+            $(IDMAP_OBJ) libsmb/spnego.o $(PASSCHANGE_OBJ) $(RPC_UNIXINFO_OBJ) \
+            $(RPC_NTSVCS_OBJ) $(RPC_INITSHUTDOWN_OBJ) utils/passwd_util.o \
+	    $(LIBGPO_OBJ) $(NSS_INFO_OBJ)
 
 WINBIND_WINS_NSS_OBJ = nsswitch/wins.o $(PARAM_OBJ) \
-	$(LIBSMB_OBJ) $(LIB_NONSMBD_OBJ) $(NSSWINS_OBJ) $(KRBCLIENT_OBJ) \
-	librpc/gen_ndr/ndr_samr.o librpc/gen_ndr/ndr_lsa.o
+	$(LIBSMB_OBJ) $(LIB_NONSMBD_OBJ) $(NSSWINS_OBJ) $(KRBCLIENT_OBJ) $(SECRETS_OBJ)
 
 PAM_SMBPASS_OBJ_0 = pam_smbpass/pam_smb_auth.o pam_smbpass/pam_smb_passwd.o \
 		pam_smbpass/pam_smb_acct.o pam_smbpass/support.o
-PAM_SMBPASS_OBJ = $(PAM_SMBPASS_OBJ_0) $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(GROUPDB_OBJ) \
-		$(SMBLDAP_OBJ) $(LIBSAMBA_OBJ) \
-		$(LDB_OBJ)
+PAM_SMBPASS_OBJ = $(PAM_SMBPASS_OBJ_0) $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) $(PASSDB_OBJ) $(GROUPDB_OBJ) \
+		$(SECRETS_OBJ) $(SMBLDAP_OBJ) $(LIBSAMBA_OBJ) \
+		$(RPC_PARSE_OBJ1) $(DOSERR_OBJ) $(ERRORMAP_OBJ)
 
-IDMAP_OBJ     = winbindd/idmap.o winbindd/idmap_cache.o winbindd/idmap_util.o @IDMAP_STATIC@
+IDMAP_OBJ     = nsswitch/idmap.o nsswitch/idmap_cache.o nsswitch/idmap_util.o @IDMAP_STATIC@
 
-NSS_INFO_OBJ = winbindd/nss_info.o @NSS_INFO_STATIC@
+NSS_INFO_OBJ = nsswitch/nss_info.o @NSS_INFO_STATIC@
 
+IDMAP_NSS_OBJ = sam/idmap_nss.o
+
 WINBINDD_OBJ1 = \
-		winbindd/winbindd.o       \
-		winbindd/winbindd_user.o  \
-		winbindd/winbindd_group.o \
-		winbindd/winbindd_util.o  \
-		winbindd/winbindd_cache.o \
-		winbindd/winbindd_pam.o   \
-		winbindd/winbindd_sid.o   \
-		winbindd/winbindd_misc.o  \
-		winbindd/winbindd_cm.o    \
-		winbindd/winbindd_wins.o  \
-		winbindd/winbindd_rpc.o   \
-		winbindd/winbindd_reconnect.o \
-		winbindd/winbindd_ads.o   \
-		winbindd/winbindd_passdb.o \
-		winbindd/winbindd_dual.o  \
-		winbindd/winbindd_async.o \
-		winbindd/winbindd_creds.o \
-		winbindd/winbindd_cred_cache.o \
-		winbindd/winbindd_ccache_access.o \
-		winbindd/winbindd_domain.o \
-		winbindd/winbindd_idmap.o \
-		winbindd/winbindd_locator.o \
-		winbindd/winbindd_ndr.o \
-		auth/token_util.o \
-		smbd/connection.o
+		nsswitch/winbindd.o       \
+		nsswitch/winbindd_user.o  \
+		nsswitch/winbindd_group.o \
+		nsswitch/winbindd_util.o  \
+		nsswitch/winbindd_cache.o \
+		nsswitch/winbindd_pam.o   \
+		nsswitch/winbindd_sid.o   \
+		nsswitch/winbindd_misc.o  \
+		nsswitch/winbindd_cm.o \
+		nsswitch/winbindd_wins.o \
+		nsswitch/winbindd_rpc.o \
+		nsswitch/winbindd_reconnect.o \
+		nsswitch/winbindd_ads.o \
+		nsswitch/winbindd_passdb.o \
+		nsswitch/winbindd_dual.o \
+		nsswitch/winbindd_async.o \
+		nsswitch/winbindd_creds.o \
+		nsswitch/winbindd_cred_cache.o \
+		nsswitch/winbindd_ccache_access.o
 
 WINBINDD_OBJ = \
-		$(WINBINDD_OBJ1) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(GROUPDB_OBJ) \
+		$(WINBINDD_OBJ1) $(PASSDB_OBJ) $(GROUPDB_OBJ) \
 		$(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
 		$(LIBSMB_OBJ) $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(RPC_PARSE_OBJ) \
 		$(PROFILE_OBJ) $(SLCACHE_OBJ) $(SMBLDAP_OBJ) \
-		$(LIBADS_OBJ) $(KRBCLIENT_OBJ) $(POPT_LIB_OBJ) \
+		$(SECRETS_OBJ) $(LIBADS_OBJ) $(KRBCLIENT_OBJ) $(POPT_LIB_OBJ) \
 		$(DCUTIL_OBJ) $(IDMAP_OBJ) $(NSS_INFO_OBJ) \
 		$(AFS_OBJ) $(AFS_SETTOKEN_OBJ) \
-		$(LIBADS_SERVER_OBJ) $(SERVER_MUTEX_OBJ) $(LDB_OBJ) 
+		$(LIBADS_SERVER_OBJ) $(SERVER_MUTEX_OBJ)
 
 WBINFO_OBJ = nsswitch/wbinfo.o $(LIBSAMBA_OBJ) $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
-		$(POPT_LIB_OBJ) $(AFS_SETTOKEN_OBJ) \
-		lib/winbind_util.o $(WBCOMMON_OBJ) @LIBWBCLIENT_STATIC@
+		$(SECRETS_OBJ) $(POPT_LIB_OBJ) $(AFS_SETTOKEN_OBJ) $(RPC_PARSE_OBJ1) $(DOSERR_OBJ)
 
-WINBIND_NSS_OBJ = $(WBCOMMON_OBJ) $(LIBREPLACE_OBJ) @WINBIND_NSS_EXTRA_OBJS@
+WINBIND_NSS_OBJ = $(WBCOMMON_OBJ) $(LIBREPLACE_OBJ) $(SOCKET_WRAPPER_OBJ) @WINBIND_NSS_EXTRA_OBJS@
 
-LDB_COMMON_OBJ=lib/ldb/common/ldb.o lib/ldb/common/ldb_ldif.o \
-          lib/ldb/common/ldb_parse.o lib/ldb/common/ldb_msg.o lib/ldb/common/ldb_utf8.o \
-          lib/ldb/common/ldb_debug.o lib/ldb/common/ldb_modules.o \
-          lib/ldb/common/ldb_dn.o lib/ldb/common/ldb_match.o lib/ldb/common/ldb_attributes.o \
-          lib/ldb/common/attrib_handlers.o lib/ldb/common/ldb_controls.o lib/ldb/common/qsort.o
+SMB_KRB5_LOCATOR_OBJ1 = libads/smb_krb5_locator.o
+SMB_KRB5_LOCATOR_OBJ = $(SMB_KRB5_LOCATOR_OBJ1) $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
+		       $(LIBNMB_OBJ) $(RPC_PARSE_OBJ1) $(SECRETS_OBJ) $(LIBSAMBA_OBJ) $(DOSERR_OBJ)
 
-LDB_TDB_OBJ=lib/ldb/ldb_tdb/ldb_tdb.o \
-       lib/ldb/ldb_tdb/ldb_pack.o lib/ldb/ldb_tdb/ldb_search.o lib/ldb/ldb_tdb/ldb_index.o \
-       lib/ldb/ldb_tdb/ldb_cache.o lib/ldb/ldb_tdb/ldb_tdb_wrap.o
-
-LDB_MODULES_OBJ=lib/ldb/modules/operational.o lib/ldb/modules/rdn_name.o \
-          lib/ldb/modules/objectclass.o \
-          lib/ldb/modules/paged_results.o lib/ldb/modules/sort.o lib/ldb/modules/asq.o
-
-# enabled in configure.in
-LDB_LDAP_OBJ=@LDBLDAP@
-
-LDB_OBJ = ${LDB_COMMON_OBJ} ${LDB_TDB_OBJ} ${LDB_LDAP_OBJ} ${LDB_MODULES_OBJ}
-
-LDB_CMDLINE_OBJ = $(PARAM_OBJ) \
-	  $(POPT_LIB_OBJ) $(LIB_OBJ) $(LIB_DUMMY_OBJ) $(LIBSMB_ERR_OBJ0) \
-	  $(RPC_PARSE_OBJ1) $(SECRETS_OBJ) \
-	  $(LDB_OBJ) lib/ldb/tools/cmdline.o 
-
-
-LDBEDIT_OBJ = $(LDB_CMDLINE_OBJ) lib/ldb/tools/ldbedit.o
-LDBSEARCH_OBJ = $(LDB_CMDLINE_OBJ) lib/ldb/tools/ldbsearch.o
-LDBADD_OBJ = $(LDB_CMDLINE_OBJ) lib/ldb/tools/ldbadd.o
-LDBDEL_OBJ = $(LDB_CMDLINE_OBJ) lib/ldb/tools/ldbdel.o
-LDBMODIFY_OBJ = $(LDB_CMDLINE_OBJ) lib/ldb/tools/ldbmodify.o
-
-WINBIND_KRB5_LOCATOR_OBJ1 = nsswitch/winbind_krb5_locator.o
-WINBIND_KRB5_LOCATOR_OBJ = $(WINBIND_KRB5_LOCATOR_OBJ1) $(WBCOMMON_OBJ) $(LIBREPLACE_OBJ)
-
 POPT_OBJ=popt/findme.o popt/popt.o popt/poptconfig.o \
           popt/popthelp.o popt/poptparse.o
 
-INIPARSER_OBJ = iniparser_build/iniparser.o iniparser_build/dictionary.o \
-		iniparser_build/strlib.o
+INIPARSER_OBJ = iniparser/src/iniparser.o iniparser/src/dictionary.o \
+		iniparser/src/strlib.o
 
-TDBBACKUP_OBJ = @tdbdir@/tools/tdbbackup.o $(LIBREPLACE_OBJ) \
-	@LIBTDB_STATIC@ $(SOCKET_WRAPPER_OBJ)
+TDBBACKUP_OBJ = tdb/tools/tdbbackup.o tdb/common/tdbback.o $(LIBREPLACE_OBJ) \
+	$(TDBBASE_OBJ) $(SOCKET_WRAPPER_OBJ)
 
-TDBTOOL_OBJ = @tdbdir@/tools/tdbtool.o @LIBTDB_STATIC@ $(LIBREPLACE_OBJ) \
+TDBTOOL_OBJ = tdb/tools/tdbtool.o $(TDBBASE_OBJ) $(LIBREPLACE_OBJ) \
 	$(SOCKET_WRAPPER_OBJ)
 
-TDBDUMP_OBJ = @tdbdir@/tools/tdbdump.o @LIBTDB_STATIC@ $(LIBREPLACE_OBJ) \
+TDBDUMP_OBJ = tdb/tools/tdbdump.o $(TDBBASE_OBJ) $(LIBREPLACE_OBJ) \
 	$(SOCKET_WRAPPER_OBJ)
 
-TDBTORTURE_OBJ = @tdbdir@/tools/tdbtorture.o @LIBTDB_STATIC@ $(LIBREPLACE_OBJ) \
-	$(SOCKET_WRAPPER_OBJ)
-
-
 NTLM_AUTH_OBJ1 = utils/ntlm_auth.o utils/ntlm_auth_diagnostics.o
 
 NTLM_AUTH_OBJ = ${NTLM_AUTH_OBJ1} $(LIBSAMBA_OBJ) $(POPT_LIB_OBJ) \
 		libsmb/asn1.o libsmb/spnego.o libsmb/clikrb5.o libads/kerberos.o \
-		$(SERVER_MUTEX_OBJ) $(LIBADS_SERVER_OBJ) \
-		$(PASSDB_OBJ) $(GROUPDB_OBJ) \
-		$(SMBLDAP_OBJ) $(LIBNMB_OBJ) \
-		$(LDB_OBJ) $(WBCOMMON_OBJ) @LIBWBCLIENT_STATIC@ \
-		librpc/gen_ndr/ndr_samr.o \
-		librpc/gen_ndr/ndr_lsa.o \
-		librpc/gen_ndr/ndr_netlogon.o
+		libads/kerberos_verify.o $(SECRETS_OBJ) $(SERVER_MUTEX_OBJ) \
+		libads/authdata.o $(RPC_PARSE_OBJ1) $(PASSDB_OBJ) $(GROUPDB_OBJ) \
+		$(SMBLDAP_OBJ) $(DOSERR_OBJ) rpc_parse/parse_net.o $(LIBNMB_OBJ) \
+		$(LDB_OBJ) libsmb/errormap.o
 
-
-VLP_OBJ1 = ../testsuite/printing/vlp.o $(RPC_CLIENT_OBJ1) $(RPC_PARSE_OBJ2) $(RPC_CLIENT_OBJ)
-
-VLP_OBJ = $(VLP_OBJ1) $(PARAM_OBJ) $(LIBSMB_OBJ) \
-	  $(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ) $(LIBMSRPC_GEN_OBJ) \
-	  $(READLINE_OBJ) $(POPT_LIB_OBJ) \
-	  $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ) \
-	  $(DISPLAY_SEC_OBJ)
-
 ######################################################################
 # now the rules...
 ######################################################################
-all : SHOWFLAGS $(SHLIBS) $(SBIN_PROGS) $(BIN_PROGS) $(ROOT_SBIN_PROGS) \
-	$(MODULES) $(NSS_MODULES) $(PAM_MODULES) @EXTRA_ALL_TARGETS@
+all : SHOWFLAGS $(SBIN_PROGS) $(BIN_PROGS) $(ROOT_SBIN_PROGS) \
+	$(SHLIBS) $(MODULES) $(NSS_MODULES) $(PAM_MODULES) @EXTRA_ALL_TARGETS@
 
 nss_modules : $(NSS_MODULES)
 
@@ -1174,8 +853,12 @@
 
 smbcquotas : SHOWFLAGS bin/smbcquotas at EXEEXT@
 
+smbctool: SHOWFLAGS bin/smbctool at EXEEXT@
+
 locktest2 : SHOWFLAGS bin/locktest2 at EXEEXT@
 
+rpctorture : SHOWFLAGS bin/rpctorture at EXEEXT@
+
 debug2html : SHOWFLAGS bin/debug2html at EXEEXT@
 
 smbfilter : SHOWFLAGS bin/smbfilter at EXEEXT@
@@ -1188,34 +871,19 @@
 
 replacetort : SHOWFLAGS bin/replacetort at EXEEXT@
 
-smbconftort : SHOWFLAGS bin/smbconftort at EXEEXT@
-
 timelimit : SHOWFLAGS bin/timelimit at EXEEXT@
 
 nsswitch : SHOWFLAGS bin/winbindd at EXEEXT@ bin/wbinfo at EXEEXT@ @WINBIND_NSS@ \
-	@WINBIND_WINS_NSS@ @WINBIND_KRB5_LOCATOR@ \
-	bin/pam_winbind. at SHLIBEXT@ bin/smbcontrol at EXEEXT@
+	@WINBIND_WINS_NSS@ bin/pam_winbind. at SHLIBEXT@
 
 wins : SHOWFLAGS @WINBIND_WINS_NSS@
 
 modules: SHOWFLAGS $(MODULES)
 
-#####################################################################
-## Perl IDL Compiler
-IDL_FILES = lsa.idl dfs.idl echo.idl winreg.idl initshutdown.idl \
-	srvsvc.idl svcctl.idl eventlog.idl wkssvc.idl netlogon.idl notify.idl \
-	epmapper.idl messaging.idl xattr.idl misc.idl samr.idl security.idl \
-	dssetup.idl krb5pac.idl ntsvcs.idl libnetapi.idl
+cac: SHOWFLAGS $(LIBMSRPC)
 
-idl:
-	@IDL_FILES="$(IDL_FILES)" CPP="$(CPP)" PERL="$(PERL)" \
-	 srcdir="$(srcdir)" $(srcdir)/script/build_idl.sh $(PIDL_ARGS)
 
-
-#####################################################################
-
-
-everything: all libtalloc libsmbclient libnetapi debug2html smbfilter talloctort replacetort smbconftort modules torture \
+everything: all libsmbclient debug2html smbfilter talloctort replacetort modules torture \
 	$(EVERYTHING_PROGS)
 
 .SUFFIXES:
@@ -1239,42 +907,26 @@
 	  mkdir "$$dir" || \
 	  exec false; fi || exec false
 
-# Run a static checker.
-CHECK_CC = $(CC_CHECKER) -I. -I$(srcdir) $(FLAGS) $(PICFLAG) -c $< -o $@
-# Compile a source file.
-COMPILE_CC = $(CC) -I. -I$(srcdir) $(FLAGS) $(PICFLAG) -c $< -o $@
-# Compile a source file with the installation paths defined.
-COMPILE_CC_PATH = $(CC) -I. -I$(srcdir) $(PATH_FLAGS) $(FLAGS) $(PICFLAG) -c $< -o $@
-
-COMPILE = $(COMPILE_CC)
-
 .c.o:
 	@if (: >> $@ || : > $@) >/dev/null 2>&1; then rm -f $@; else \
 	 dir=`echo $@ | sed 's,/[^/]*$$,,;s,^$$,.,'` $(MAKEDIR); fi
 	@if test -n "$(CC_CHECKER)"; then \
 	  echo "Checking  $*.c with '$(CC_CHECKER)'";\
-	  $(CHECK_CC); \
+	  $(CC_CHECKER) -I. -I$(srcdir) $(FLAGS) $(PICFLAG) -c $< -o $@;\
 	 fi
 	@echo Compiling $*.c
-	@$(COMPILE) && exit 0;\
+	@$(CC) -I. -I$(srcdir) $(FLAGS) $(PICFLAG) -c $< -o $@ && exit 0;\
 		echo "The following command failed:" 1>&2;\
-		echo "$(COMPILE_CC)" 1>&2;\
-		$(COMPILE_CC) >/dev/null 2>&1
+		echo "$(CC) -I. -I$(srcdir) $(FLAGS) $(PICFLAG) -c $< -o $@" 1>&2;\
+		$(CC) -I. -I$(srcdir) $(FLAGS) $(PICFLAG) -c $< -o $@ >/dev/null 2>&1
 @BROKEN_CC@	-mv `echo $@ | sed 's%^.*/%%g'` $@
 
-PRECOMPILED_HEADER = $(builddir)/include/includes.h.gch
-
 # this adds support for precompiled headers. To use it, install a snapshot
 # of gcc-3.4 and run 'make pch' before you do the main build.
 pch: proto_exists
-	rm -f $(PRECOMPILED_HEADER)
-	$(MAKE) $(PRECOMPILED_HEADER)
+	rm -f $(builddir)/include/includes.h.gch
+	$(CC) -I. -I$(srcdir) $(FLAGS) $(PICFLAG) -c $(srcdir)/include/includes.h -o $(builddir)/include/includes.h.gch
 
-$(PRECOMPILED_HEADER): $(srcdir)/include/includes.h
-	$(COMPILE)
-
-BINARY_PREREQS = proto_exists bin/.dummy
-
 # These dependencies are only approximately correct: we want to make
 # sure Samba's paths are updated if ./configure is re-run.  Really it
 # would be nice if "make prefix=/opt/samba all" also rebuilt things,
@@ -1283,31 +935,22 @@
 
 dynconfig.o: dynconfig.c Makefile
 	@echo Compiling $*.c
-	@$(COMPILE_CC_PATH) && exit 0;\
+	@$(CC) $(FLAGS) $(PATH_FLAGS) $(PICFLAG) -c $(srcdir)/dynconfig.c -o $@ && exit 0;\
 		echo "The following command failed:" 1>&2;\
-		echo "$(COMPILE_CC_PATH)" 1>&2;\
-		$(COMPILE_CC_PATH) >/dev/null 2>&1
+		echo "$(CC) $(FLAGS) $(PATH_FLAGS) $(PICFLAG) -c $(srcdir)/dynconfig.c -o $@" 1>&2;\
+		$(CC) $(FLAGS) $(PATH_FLAGS) $(PICFLAG) -c $(srcdir)/dynconfig.c -o $@ >/dev/null 2>&1
 
 lib/pidfile.o: lib/pidfile.c
 	@echo Compiling $*.c
-	@$(COMPILE_CC_PATH) && exit 0;\
-		echo "The following command failed:" 1>&2;\
-		echo "$(COMPILE_CC_PATH)" 1>&2;\
-		$(COMPILE_CC_PATH) >/dev/null 2>&1
+	@$(CC) -I. -I$(srcdir) $(FLAGS) $(PATH_FLAGS) $(PICFLAG) -c $(srcdir)/lib/pidfile.c -o $@
 
 lib/version.o: lib/version.c include/version.h
 	@echo Compiling $*.c
-	@$(COMPILE_CC_PATH) && exit 0;\
-		echo "The following command failed:" 1>&2;\
-		echo "$(COMPILE_CC_PATH)" 1>&2;\
-		$(COMPILE_CC_PATH) >/dev/null 2>&1
+	@$(CC) -I. -I$(srcdir) $(FLAGS) $(PATH_FLAGS) $(PICFLAG) -c $(srcdir)/lib/version.c -o $@
 
 smbd/build_options.o: smbd/build_options.c Makefile include/config.h include/build_env.h include/proto.h
 	@echo Compiling $*.c
-	@$(COMPILE_CC_PATH) && exit 0;\
-		echo "The following command failed:" 1>&2;\
-		echo "$(COMPILE_CC_PATH)" 1>&2;\
-		$(COMPILE_CC_PATH) >/dev/null 2>&1
+	@$(CC) $(FLAGS) $(PATH_FLAGS) $(PICFLAG) -c smbd/build_options.c -o $@
 
 smbd/build_options.c: include/config.h.in script/mkbuildoptions.awk
 	@echo Generating $@
@@ -1318,357 +961,230 @@
 	  dir=bin $(MAKEDIR); fi
 	@: >> $@ || : > $@ # what a fancy emoticon!
 
-bin/smbd at EXEEXT@: $(BINARY_PREREQS) $(SMBD_OBJ) @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@ @BUILD_POPT@
+bin/smbd at EXEEXT@: proto_exists $(SMBD_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo Linking $@
 	@$(CC) $(FLAGS) -o $@ $(SMBD_OBJ) $(LDFLAGS) $(LDAP_LIBS) \
 		$(KRB5LIBS) $(DYNEXP) $(PRINT_LIBS) $(AUTH_LIBS) \
-		$(ACL_LIBS) $(PASSDB_LIBS) $(LIBS) $(DNSSD_LIBS) \
-		@POPTLIBS@ @SMBD_LIBS@ @LIBTALLOC_LIBS@ @LIBTDB_LIBS@ \
-		@WINBIND_LIBS@
+		$(ACL_LIBS) $(PASSDB_LIBS) $(LIBS) @POPTLIBS@ @SMBD_LIBS@
 
-bin/nmbd at EXEEXT@: $(BINARY_PREREQS) $(NMBD_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
+bin/nmbd at EXEEXT@: proto_exists $(NMBD_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(NMBD_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@ @POPTLIBS@ \
-		$(KRB5LIBS) $(LDAP_LIBS)
+	@$(CC) $(FLAGS) -o $@ $(NMBD_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) @POPTLIBS@ $(KRB5LIBS) $(LDAP_LIBS)
 
-bin/swat at EXEEXT@: $(BINARY_PREREQS) $(SWAT_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
+bin/swat at EXEEXT@: proto_exists $(SWAT_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo Linking $@
 	@$(CC) $(FLAGS) -o $@ $(SWAT_OBJ) $(LDFLAGS) $(DYNEXP) $(PRINT_LIBS) \
-	  $(AUTH_LIBS) $(LIBS) $(PASSDB_LIBS) @POPTLIBS@ $(KRB5LIBS) \
-	  $(LDAP_LIBS) @LIBTALLOC_LIBS@ @LIBTDB_LIBS@ @WINBIND_LIBS@
+	  $(AUTH_LIBS) $(LIBS) $(PASSDB_LIBS) @POPTLIBS@ $(KRB5LIBS) $(LDAP_LIBS)
 
-bin/rpcclient at EXEEXT@: $(BINARY_PREREQS) $(RPCCLIENT_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
+bin/rpcclient at EXEEXT@: proto_exists $(RPCCLIENT_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo Linking $@
 	@$(CC) $(FLAGS) -o $@ $(LDFLAGS) $(PASSDB_LIBS) $(RPCCLIENT_OBJ) \
 		$(DYNEXP) $(TERMLDFLAGS) $(TERMLIBS) $(LIBS) @POPTLIBS@ \
-		$(KRB5LIBS) $(LDAP_LIBS) @LIBTALLOC_LIBS@ @LIBTDB_LIBS@ \
-		@WINBIND_LIBS@
+		$(KRB5LIBS) $(LDAP_LIBS)
 
-bin/smbclient at EXEEXT@: $(BINARY_PREREQS) $(CLIENT_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
+bin/smbclient at EXEEXT@: proto_exists $(CLIENT_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(CLIENT_OBJ) $(LDFLAGS) $(DYNEXP) \
-		$(TERMLDFLAGS) $(TERMLIBS) $(LIBS) @POPTLIBS@ \
-		$(KRB5LIBS) $(LDAP_LIBS) $(NSCD_LIBS) $(DNSSD_LIBS) \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@ @WINBIND_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(CLIENT_OBJ) $(LDFLAGS) $(DYNEXP) $(TERMLDFLAGS) $(TERMLIBS) $(LIBS) @POPTLIBS@ $(KRB5LIBS) $(LDAP_LIBS)
 
-bin/net at EXEEXT@: $(BINARY_PREREQS) $(NET_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@ @LIBNETAPI_SHARED@
+bin/smbctool at EXEEXT@: proto_exists $(TOOL_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(NET_OBJ) $(DYNEXP) $(LDFLAGS) $(LIBS) \
-		@POPTLIBS@ $(KRB5LIBS) $(UUID_LIBS) $(LDAP_LIBS) \
-		$(PASSDB_LIBS) $(TERMLDFLAGS) $(TERMLIBS) $(NSCD_LIBS) \
-		@INIPARSERLIBS@ @LIBTALLOC_LIBS@ @LIBTDB_LIBS@ @WINBIND_LIBS@ @LIBNETAPI_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(TOOL_OBJ) $(LDFLAGS) $(DYNEXP) $(TERMLDFLAGS) $(TERMLIBS) $(LIBS) @POPTLIBS@ $(KRB5LIBS) $(LDAP_LIBS) -Lbin -lsmbclient
 
-bin/profiles at EXEEXT@: $(BINARY_PREREQS) $(PROFILES_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
+bin/net at EXEEXT@: proto_exists $(NET_OBJ) @BUILD_POPT@ @BUILD_INIPARSER@ bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(PROFILES_OBJ) $(DYNEXP) $(LDFLAGS) $(LIBS) \
-		$(LDAP_LIBS) @POPTLIBS@ @LIBTALLOC_LIBS@ @LIBTDB_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(NET_OBJ) $(DYNEXP) $(LDFLAGS) $(LIBS) @POPTLIBS@ $(KRB5LIBS) $(UUID_LIBS) $(LDAP_LIBS) $(PASSDB_LIBS) $(TERMLDFLAGS) $(TERMLIBS) $(NSCD_LIBS) @INIPARSERLIBS@
 
-bin/smbspool at EXEEXT@: $(BINARY_PREREQS) $(CUPS_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
+bin/profiles at EXEEXT@: proto_exists $(PROFILES_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(CUPS_OBJ) $(DYNEXP) $(LDFLAGS) $(LIBS) \
-		$(KRB5LIBS) $(LDAP_LIBS) @POPTLIBS@ @LIBTALLOC_LIBS@ @LIBTDB_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(PROFILES_OBJ) $(DYNEXP) $(LDFLAGS) $(LIBS) $(LDAP_LIBS) @POPTLIBS@
 
-bin/mount.cifs at EXEEXT@: $(BINARY_PREREQS) $(CIFS_MOUNT_OBJ) @BUILD_POPT@
+bin/smbspool at EXEEXT@: proto_exists $(CUPS_OBJ) bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(CIFS_MOUNT_OBJ) $(DYNEXP) $(LDFLAGS) @POPTLIBS@
+	@$(CC) $(FLAGS) -o $@ $(CUPS_OBJ) $(DYNEXP) $(LDFLAGS) $(LIBS) $(KRB5LIBS) $(LDAP_LIBS)
 
-bin/umount.cifs at EXEEXT@: $(BINARY_PREREQS) $(CIFS_UMOUNT_OBJ) @BUILD_POPT@
+bin/smbmount at EXEEXT@: proto_exists $(MOUNT_OBJ) bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(CIFS_UMOUNT_OBJ) $(DYNEXP) $(LDFLAGS) @POPTLIBS@
+	@$(CC) $(FLAGS) -o $@ $(MOUNT_OBJ) $(DYNEXP) $(LDFLAGS) $(LIBS) $(KRB5LIBS) $(LDAP_LIBS)
 
-bin/cifs.spnego at EXEEXT@: $(BINARY_PREREQS) $(CIFS_SPNEGO_OBJ) $(LIBSMBCLIENT_OBJ0) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
+bin/smbmnt at EXEEXT@: proto_exists $(MNT_OBJ) bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(CIFS_SPNEGO_OBJ) $(DYNEXP) $(LDFLAGS) \
-		-lkeyutils $(LIBS) $(LIBSMBCLIENT_OBJ0) $(KRB5LIBS) \
-		$(LDAP_LIBS) @POPTLIBS@ @LIBTALLOC_LIBS@ @LIBWBCLIENT_SHARED@ \
-		@LIBTDB_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(MNT_OBJ) $(DYNEXP) $(LDFLAGS)
 
-bin/testparm at EXEEXT@: $(BINARY_PREREQS) $(TESTPARM_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
+bin/smbumount at EXEEXT@: proto_exists $(UMOUNT_OBJ) bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(TESTPARM_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) \
-		$(LDAP_LIBS) @POPTLIBS@ @LIBTALLOC_LIBS@ @LIBTDB_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(UMOUNT_OBJ) $(DYNEXP) $(LDFLAGS)
 
-bin/smbstatus at EXEEXT@: $(BINARY_PREREQS) $(STATUS_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
+bin/mount.cifs at EXEEXT@: $(CIFS_MOUNT_OBJ) bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(STATUS_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) \
-		$(LDAP_LIBS) @POPTLIBS@ @LIBTALLOC_LIBS@ @LIBTDB_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(CIFS_MOUNT_OBJ) $(DYNEXP) $(LDFLAGS)
 
-bin/smbcontrol at EXEEXT@: $(BINARY_PREREQS) $(SMBCONTROL_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
+bin/umount.cifs at EXEEXT@: $(CIFS_UMOUNT_OBJ) bin/.dummy
 	@echo Linking $@
-	@$(CC) -DUSING_SMBCONTROL $(FLAGS) -o $@ \
-		$(SMBCONTROL_OBJ) $(DYNEXP) $(LDFLAGS) \
-		$(LIBS) $(LDAP_LIBS) @LIBUNWIND_PTRACE@ @POPTLIBS@ \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(CIFS_UMOUNT_OBJ) $(DYNEXP) $(LDFLAGS)
 
-bin/smbtree at EXEEXT@: $(BINARY_PREREQS) $(SMBTREE_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
+bin/testparm at EXEEXT@: proto_exists $(TESTPARM_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(SMBTREE_OBJ) $(LDFLAGS) $(DYNEXP) \
-		$(LIBS) @POPTLIBS@ $(KRB5LIBS) $(LDAP_LIBS) $(NSCD_LIBS) \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@ @WINBIND_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(TESTPARM_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) $(LDAP_LIBS) @POPTLIBS@
 
-bin/smbpasswd at EXEEXT@: $(BINARY_PREREQS) $(SMBPASSWD_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
+bin/smbstatus at EXEEXT@: proto_exists $(STATUS_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(SMBPASSWD_OBJ) $(LDFLAGS) $(PASSDB_LIBS) \
-		$(DYNEXP) $(LIBS) @POPTLIBS@ $(KRB5LIBS) $(LDAP_LIBS) \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@ @WINBIND_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(STATUS_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) $(LDAP_LIBS) \
+	@POPTLIBS@
 
-bin/pdbedit at EXEEXT@: $(BINARY_PREREQS) $(PDBEDIT_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
+bin/smbcontrol at EXEEXT@: proto_exists $(SMBCONTROL_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(PDBEDIT_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) \
-		@POPTLIBS@ $(PASSDB_LIBS) $(LDAP_LIBS) @LIBTALLOC_LIBS@ \
-		@LIBTDB_LIBS@ @WINBIND_LIBS@
+	@$(CC) -DUSING_SMBCONTROL $(FLAGS) -o $@ \
+	$(SMBCONTROL_OBJ) $(DYNEXP) $(LDFLAGS) \
+	$(LIBS) $(LDAP_LIBS) @LIBUNWIND_PTRACE@ @POPTLIBS@
 
-bin/smbget at EXEEXT@: $(BINARY_PREREQS) $(SMBGET_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
+bin/smbtree at EXEEXT@: proto_exists $(SMBTREE_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(SMBGET_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) \
-		@POPTLIBS@  $(KRB5LIBS) $(LDAP_LIBS) $(NSCD_LIBS) \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@ @WINBIND_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(SMBTREE_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) @POPTLIBS@ $(KRB5LIBS) $(LDAP_LIBS)
 
-bin/nmblookup at EXEEXT@: $(BINARY_PREREQS) $(NMBLOOKUP_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
+bin/smbpasswd at EXEEXT@: proto_exists $(SMBPASSWD_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(NMBLOOKUP_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) \
-		@POPTLIBS@ $(LDAP_LIBS) @LIBTALLOC_LIBS@ @LIBTDB_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(SMBPASSWD_OBJ) $(LDFLAGS) $(PASSDB_LIBS) \
+		$(DYNEXP) $(LIBS) @POPTLIBS@ $(KRB5LIBS) $(LDAP_LIBS)
 
-bin/smbtorture at EXEEXT@: $(BINARY_PREREQS) $(SMBTORTURE_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
+bin/pdbedit at EXEEXT@: proto_exists $(PDBEDIT_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(SMBTORTURE_OBJ) $(LDFLAGS) $(DYNEXP) \
-		$(LIBS) $(KRB5LIBS) $(LDAP_LIBS) @POPTLIBS@ @LIBTALLOC_LIBS@ \
-		@LIBTDB_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(PDBEDIT_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) @POPTLIBS@ $(PASSDB_LIBS) $(LDAP_LIBS)
 
-bin/talloctort at EXEEXT@: $(BINARY_PREREQS) $(TALLOCTORT_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
+bin/smbget at EXEEXT@: proto_exists $(SMBGET_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(TALLOCTORT_OBJ) $(LDFLAGS) \
-		$(DYNEXP) $(LIBS) $(LDAP_LIBS) @POPTLIBS@ \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(SMBGET_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) @POPTLIBS@  $(KRB5LIBS) $(LDAP_LIBS) $(NSCD_LIBS)
 
-bin/replacetort at EXEEXT@: $(REPLACETORT_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@
+bin/samtest at EXEEXT@: $(SAMTEST_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) @PIE_LDFLAGS@ -o $@ $(REPLACETORT_OBJ) $(LDFLAGS) \
-		$(DYNEXP) $(LIBS) @POPTLIBS@ @LIBTALLOC_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(SAMTEST_OBJ) $(LDFLAGS) $(TERMLDFLAGS) $(TERMLIBS) $(DYNEXP) $(LIBS) @POPTLIBS@ $(PASSDB_LIBS) $(KRB5LIBS) $(LDAP_LIBS)
 
-bin/smbconftort at EXEEXT@: $(SMBCONFTORT_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
+bin/nmblookup at EXEEXT@: proto_exists $(NMBLOOKUP_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) @PIE_LDFLAGS@ -o $@ $(SMBCONFTORT_OBJ) $(LDFLAGS) \
-		$(DYNEXP) $(LIBS) $(LDAP_LIBS) @POPTLIBS@ \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(NMBLOOKUP_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) @POPTLIBS@ $(LDAP_LIBS)
 
-bin/masktest at EXEEXT@: $(BINARY_PREREQS) $(MASKTEST_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
+bin/smbtorture at EXEEXT@: proto_exists $(SMBTORTURE_OBJ) bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(MASKTEST_OBJ) $(LDFLAGS) $(DYNEXP) \
-		$(LIBS) $(KRB5LIBS) $(LDAP_LIBS) @POPTLIBS@ \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(SMBTORTURE_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) $(KRB5LIBS) $(LDAP_LIBS)
 
-bin/msgtest at EXEEXT@: $(BINARY_PREREQS) $(MSGTEST_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
+bin/talloctort at EXEEXT@: proto_exists $(TALLOCTORT_OBJ) bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(MSGTEST_OBJ) $(LDFLAGS) $(DYNEXP) \
-		$(LIBS) $(KRB5LIBS) $(LDAP_LIBS) @POPTLIBS@ \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(TALLOCTORT_OBJ) $(LDFLAGS) \
+		$(DYNEXP) $(LIBS) $(LDAP_LIBS)
 
-bin/smbcacls at EXEEXT@: $(BINARY_PREREQS) $(SMBCACLS_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
+bin/replacetort at EXEEXT@: $(REPLACETORT_OBJ) bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(SMBCACLS_OBJ) $(DYNEXP) $(LDFLAGS) \
-		$(LIBS) @POPTLIBS@ $(KRB5LIBS) $(LDAP_LIBS) $(NSCD_LIBS) \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@ @WINBIND_LIBS@
+	@$(CC) $(FLAGS) @PIE_LDFLAGS@ -o $@ $(REPLACETORT_OBJ) $(LDFLAGS) \
+		$(DYNEXP) $(LIBS)
 
-bin/smbcquotas at EXEEXT@: $(BINARY_PREREQS) $(SMBCQUOTAS_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
+bin/masktest at EXEEXT@: proto_exists $(MASKTEST_OBJ) bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(SMBCQUOTAS_OBJ) $(DYNEXP) $(LDFLAGS) \
-		$(LIBS) @POPTLIBS@ $(KRB5LIBS) $(LDAP_LIBS) $(NSCD_LIBS) \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@ @WINBIND_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(MASKTEST_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) $(KRB5LIBS) $(LDAP_LIBS)
 
-bin/eventlogadm at EXEEXT@: $(BINARY_PREREQS) $(EVTLOGADM_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
+bin/msgtest at EXEEXT@: proto_exists $(MSGTEST_OBJ) bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(EVTLOGADM_OBJ) $(DYNEXP) $(LDFLAGS) \
-		$(LIBS) $(LDAP_LIBS) @POPTLIBS@ @LIBTALLOC_LIBS@ @LIBTDB_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(MSGTEST_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) $(KRB5LIBS) $(LDAP_LIBS)
 
-bin/sharesec at EXEEXT@: $(BINARY_PREREQS) $(SHARESEC_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
+bin/smbcacls at EXEEXT@: proto_exists $(SMBCACLS_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(SHARESEC_OBJ) $(DYNEXP) $(LDFLAGS) \
-		$(LIBS) $(LDAP_LIBS) @POPTLIBS@ @LIBTALLOC_LIBS@ @LIBTDB_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(SMBCACLS_OBJ) $(DYNEXP) $(LDFLAGS) $(LIBS) @POPTLIBS@ \
+	$(KRB5LIBS) $(LDAP_LIBS) $(NSCD_LIBS)
 
-bin/locktest at EXEEXT@: $(BINARY_PREREQS) $(LOCKTEST_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
+bin/smbcquotas at EXEEXT@: proto_exists $(SMBCQUOTAS_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(LOCKTEST_OBJ) $(LDFLAGS) $(DYNEXP) \
-		$(LIBS) $(KRB5LIBS) $(LDAP_LIBS) @POPTLIBS@ \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(SMBCQUOTAS_OBJ) $(DYNEXP) $(LDFLAGS) $(LIBS) @POPTLIBS@ \
+	$(KRB5LIBS) $(LDAP_LIBS) $(NSCD_LIBS)
 
-bin/nsstest at EXEEXT@: $(BINARY_PREREQS) $(NSSTEST_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
+bin/eventlogadm at EXEEXT@: proto_exists $(EVTLOGADM_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(NSSTEST_OBJ) $(LDFLAGS) $(DYNEXP) \
-		$(LIBS) $(KRB5LIBS)  $(LDAP_LIBS) @POPTLIBS@ \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(EVTLOGADM_OBJ) $(DYNEXP) $(LDFLAGS) $(LIBS) $(LDAP_LIBS) @POPTLIBS@
 
-bin/pdbtest at EXEEXT@: $(BINARY_PREREQS) $(PDBTEST_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
+bin/sharesec at EXEEXT@: proto_exists $(SHARESEC_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(PDBTEST_OBJ) $(LDFLAGS) $(DYNEXP) \
-		$(LIBS) $(KRB5LIBS) $(LDAP_LIBS) $(PASSDB_LIBS) \
-		@POPTLIBS@ @LIBTALLOC_LIBS@ @LIBTDB_LIBS@ @LIBWBCLIENT_SHARED@
+	@$(CC) $(FLAGS) -o $@ $(SHARESEC_OBJ) $(DYNEXP) $(LDFLAGS) $(LIBS) $(LDAP_LIBS) @POPTLIBS@
 
-bin/vfstest at EXEEXT@: $(BINARY_PREREQS) $(VFSTEST_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
+bin/locktest at EXEEXT@: proto_exists $(LOCKTEST_OBJ) bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(VFSTEST_OBJ) $(LDFLAGS) $(TERMLDFLAGS) \
-		$(TERMLIBS) $(DYNEXP) $(PRINT_LIBS) $(AUTH_LIBS) \
-		$(ACL_LIBS) $(LIBS) @POPTLIBS@ $(KRB5LIBS) $(LDAP_LIBS) \
-		@SMBD_LIBS@ $(NSCD_LIBS) @LIBTALLOC_LIBS@ @LIBTDB_LIBS@ \
-		@LIBWBCLIENT_SHARED@
+	@$(CC) $(FLAGS) -o $@ $(LOCKTEST_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) $(KRB5LIBS) $(LDAP_LIBS)
 
-bin/smbiconv at EXEEXT@: $(BINARY_PREREQS) $(SMBICONV_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
+bin/nsstest at EXEEXT@: proto_exists $(NSSTEST_OBJ) bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(SMBICONV_OBJ) $(LDFLAGS) $(TERMLDFLAGS) \
-		$(TERMLIBS) $(DYNEXP) $(LIBS) $(LDAP_LIBS) @POPTLIBS@ \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(NSSTEST_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) $(KRB5LIBS)  $(LDAP_LIBS)
 
-bin/log2pcap at EXEEXT@: $(BINARY_PREREQS) $(LOG2PCAP_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@
+bin/pdbtest at EXEEXT@: proto_exists $(PDBTEST_OBJ) bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(LOG2PCAP_OBJ) $(LDFLAGS) $(DYNEXP) \
-		@POPTLIBS@ $(LIBS) @LIBTALLOC_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(PDBTEST_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) $(KRB5LIBS) $(LDAP_LIBS) $(PASSDB_LIBS) $(LIBS) @POPTLIBS@
 
-bin/locktest2 at EXEEXT@: $(BINARY_PREREQS) $(LOCKTEST2_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
+bin/vfstest at EXEEXT@: proto_exists $(VFSTEST_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(LOCKTEST2_OBJ) $(LDFLAGS) $(DYNEXP) \
-		$(LIBS) $(KRB5LIBS) $(LDAP_LIBS) @POPTLIBS@ \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(VFSTEST_OBJ) $(LDFLAGS) $(TERMLDFLAGS) $(TERMLIBS) $(DYNEXP) $(PRINT_LIBS) $(AUTH_LIBS) $(ACL_LIBS) $(LIBS) @POPTLIBS@ $(KRB5LIBS) $(LDAP_LIBS) @SMBD_LIBS@ $(NSCD_LIBS)
 
-bin/ndrdump at EXEEXT@: $(BINARY_PREREQS) $(NDRDUMP_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
+bin/smbiconv at EXEEXT@: $(SMBICONV_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(NDRDUMP_OBJ) $(DYNEXP) $(LDFLAGS) $(LIBS) \
-		@POPTLIBS@ @LDAP_LIBS@ @LIBTALLOC_LIBS@ @LIBTDB_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(SMBICONV_OBJ) $(LDFLAGS) $(TERMLDFLAGS) $(TERMLIBS) $(DYNEXP) $(LIBS) @POPTLIBS@
 
-bin/debug2html at EXEEXT@: $(BINARY_PREREQS) $(DEBUG2HTML_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@
+bin/log2pcap at EXEEXT@: proto_exists $(LOG2PCAP_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(DEBUG2HTML_OBJ) $(LDFLAGS) $(DYNEXP) \
-		$(LIBS) @LIBTALLOC_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(LOG2PCAP_OBJ) $(LDFLAGS) $(DYNEXP) @POPTLIBS@ $(LIBS)
 
-bin/smbfilter at EXEEXT@: $(BINARY_PREREQS) $(SMBFILTER_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
+bin/locktest2 at EXEEXT@: proto_exists $(LOCKTEST2_OBJ) bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(SMBFILTER_OBJ) $(LDFLAGS) $(LIBS) \
-		$(KRB5LIBS) $(LDAP_LIBS) @POPTLIBS@ \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(LOCKTEST2_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) $(KRB5LIBS) $(LDAP_LIBS)
 
-bin/ldbedit: $(BINARY_PREREQS) $(LDBEDIT_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
+bin/rpctorture at EXEEXT@: $(RPCTORTURE_OBJ) bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(LDBEDIT_OBJ) $(DYNEXP) $(LDFLAGS) \
-		$(LIBS) @POPTLIBS@ $(LDAP_LIBS) \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@ @WINBIND_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(RPCTORTURE_OBJ) $(DYNEXP) $(LDFLAGS) $(LIBS) $(KRB5LIBS) $(LDAP_LIBS)
 
-bin/ldbsearch: $(BINARY_PREREQS) $(LDBSEARCH_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
+bin/debug2html at EXEEXT@: proto_exists $(DEBUG2HTML_OBJ) bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(LDBSEARCH_OBJ) $(DYNEXP) $(LDFLAGS) \
-		$(LIBS) @POPTLIBS@ $(LDAP_LIBS) \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@ @WINBIND_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(DEBUG2HTML_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS)
 
-bin/ldbadd: $(BINARY_PREREQS) $(LDBADD_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
+bin/smbfilter at EXEEXT@: proto_exists $(SMBFILTER_OBJ) bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(LDBADD_OBJ) $(DYNEXP) $(LDFLAGS) \
-		$(LIBS) @POPTLIBS@ $(LDAP_LIBS) \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@ @WINBIND_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(SMBFILTER_OBJ) $(LDFLAGS) $(LIBS) $(KRB5LIBS) $(LDAP_LIBS)
 
-bin/ldbmodify: $(BINARY_PREREQS) $(LDBMODIFY_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
-	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(LDBMODIFY_OBJ) $(DYNEXP) $(LDFLAGS) \
-		$(LIBS) @POPTLIBS@ $(LDAP_LIBS) \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@ @WINBIND_LIBS@
+bin/libaddns. at SHLIBEXT@: proto_exists $(LIBADDNS_OBJ)
+	@echo Linking libaddns shared library $@
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(LIBADDNS_OBJ) $(LIBS) \
+		$(KRB5LIBS) $(UUID_LIBS)\
+		@SONAMEFLAG@`basename $@`.$(LIBADDNS_MAJOR)
 
-bin/ldbdel: $(BINARY_PREREQS) $(LDBDEL_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
-	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(LDBDEL_OBJ) $(DYNEXP) $(LDFLAGS) \
-		$(LIBS) @POPTLIBS@ $(LDAP_LIBS) \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@ @WINBIND_LIBS@
-
-MKSYMS_SH = $(srcdir)/script/mksyms.sh
-
-$(LIBTALLOC_SYMS): $(LIBTALLOC_HEADERS)
-	@$(MKSYMS_SH) $(AWK) $@ $(LIBTALLOC_HEADERS)
-
-$(LIBTALLOC_SHARED_TARGET): $(BINARY_PREREQS) $(LIBTALLOC_OBJ) $(LIBTALLOC_SYMS)
-	@echo Linking shared library $@
-	@$(SHLD_DSO) $(LIBTALLOC_OBJ) \
-		@SONAMEFLAG@`basename $@`.$(SONAME_VER)
-	@ln -s -f `basename $@` $@.$(SONAME_VER)
-
-$(LIBTALLOC_STATIC_TARGET): $(BINARY_PREREQS) $(LIBTALLOC_OBJ0)
-	@echo Linking non-shared library $@
-	@-$(AR) -rc $@ $(LIBTALLOC_OBJ0)
-
-$(LIBTDB_SYMS): $(LIBTDB_HEADERS)
-	@$(MKSYMS_SH) $(AWK) $@ $(LIBTDB_HEADERS)
-
-$(LIBTDB_SHARED_TARGET): $(BINARY_PREREQS) $(LIBTDB_OBJ) $(LIBTDB_SYMS)
-	@echo Linking shared library $@
-	@$(SHLD_DSO) $(LIBTDB_OBJ) \
-		@SONAMEFLAG@`basename $@`.$(SONAME_VER)
-	@ln -s -f `basename $@` $@.$(SONAME_VER)
-
-$(LIBTDB_STATIC_TARGET): $(BINARY_PREREQS) $(LIBTDB_OBJ0)
-	@echo Linking non-shared library $@
-	@-$(AR) -rc $@ $(LIBTDB_OBJ0)
-
-$(LIBWBCLIENT_SYMS): $(LIBWBCLIENT_HEADERS)
-	@$(MKSYMS_SH) $(AWK) $@ $(LIBWBCLIENT_HEADERS)
-
-$(LIBWBCLIENT_SHARED_TARGET): $(BINARY_PREREQS) $(LIBWBCLIENT_OBJ) $(LIBWBCLIENT_SYMS) @LIBTALLOC_SHARED@
-	@echo Linking shared library $@
-	@$(SHLD_DSO) @LIBTALLOC_LIBS@ $(LIBWBCLIENT_OBJ) \
-		@SONAMEFLAG@`basename $@`.$(SONAME_VER)
-	@ln -s -f `basename $@` $@.$(SONAME_VER)
-
-$(LIBWBCLIENT_STATIC_TARGET): $(BINARY_PREREQS) $(LIBWBCLIENT_OBJ0) $(WBCOMMON_OBJ)
-	@echo Linking non-shared library $@
-	@-$(AR) -rc $@ $(LIBWBCLIENT_OBJ0) $(WBCOMMON_OBJ)
-
-bin/libaddns. at SHLIBEXT@: $(BINARY_PREREQS) $(LIBADDNS_OBJ) @LIBTALLOC_SHARED@
-	@echo Linking shared library $@
-	@$(SHLD_DSO) $(LIBADDNS_OBJ) $(LIBS) \
-		$(KRB5LIBS) $(UUID_LIBS) @LIBTALLOC_LIBS@ \
-		@SONAMEFLAG@`basename $@`.$(SONAME_VER)
-
-bin/libaddns.a: $(BINARY_PREREQS) $(LIBADDNS_OBJ)
-	@echo Linking non-shared library $@
+bin/libaddns.a: proto_exists $(LIBADDNS_OBJ)
+	@echo Linking libaddns non-shared library $@
 	@-$(AR) -rc $@ $(LIBADDNS_OBJ)
 
-$(LIBNETAPI_SYMS): $(LIBNETAPI_HEADERS)
-	@$(MKSYMS_SH) $(AWK) $@ $(LIBNETAPI_HEADERS)
-
-$(LIBNETAPI_SHARED_TARGET): $(BINARY_PREREQS) $(LIBNETAPI_OBJ) $(LIBNETAPI_SYMS) @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
-	@echo Linking shared library $@
-	@$(SHLD_DSO) $(LIBNETAPI_OBJ) \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@ @LIBWBCLIENT_SHARED@ $(LIBS) \
-		$(LDAP_LIBS) $(KRB5LIBS) $(NSCD_LIBS) \
-		@SONAMEFLAG@`basename $@`.$(SONAME_VER)
-	@ln -s -f `basename $@` $@.$(SONAME_VER)
-
-$(LIBNETAPI_STATIC_TARGET): $(BINARY_PREREQS) $(LIBNETAPI_OBJ1)
-	@echo Linking non-shared library $@
-	@-$(AR) -rc $@ $(LIBNETAPI_OBJ1)
-
-bin/libsmbclient. at SHLIBEXT@: $(BINARY_PREREQS) $(LIBSMBCLIENT_OBJ) @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
-	@echo Linking shared library $@
-	@$(SHLD_DSO) $(LIBSMBCLIENT_OBJ) \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@ @LIBWBCLIENT_SHARED@ $(LIBS) \
+bin/libsmbclient. at SHLIBEXT@: proto_exists $(LIBSMBCLIENT_OBJ)
+	@echo Linking libsmbclient shared library $@
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(LIBSMBCLIENT_OBJ) $(LIBS) \
 		$(KRB5LIBS) $(LDAP_LIBS) $(NSCD_LIBS) \
-		@SONAMEFLAG@`basename $@`.$(SONAME_VER)
+		@SONAMEFLAG@`basename $@`.$(LIBSMBCLIENT_MAJOR)
 
-bin/libsmbclient.a: $(BINARY_PREREQS) $(LIBSMBCLIENT_OBJ0)
-	@echo Linking non-shared library $@
-	@-$(AR) -rc $@ $(LIBSMBCLIENT_OBJ0)
+bin/libsmbclient.a: proto_exists $(LIBSMBCLIENT_OBJ)
+	@echo Linking libsmbclient non-shared library $@
+	@-$(AR) -rc $@ $(LIBSMBCLIENT_OBJ)
 
-bin/libsmbsharemodes. at SHLIBEXT@: $(BINARY_PREREQS) $(LIBSMBSHAREMODES_OBJ) @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
-	@echo Linking shared library $@
-	@$(SHLD_DSO) $(LIBSMBSHAREMODES_OBJ) \
-		$(LIBS) @LIBTALLOC_LIBS@ @LIBTDB_LIBS@ \
+bin/libsmbsharemodes. at SHLIBEXT@: proto_exists $(LIBSMBSHAREMODES_OBJ)
+	@echo Linking libsmbsharemodes shared library $@
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(LIBSMBSHAREMODES_OBJ) $(LIBS) \
 		$(KRB5LIBS) $(LDAP_LIBS) \
-		@SONAMEFLAG@`basename $@`.$(SONAME_VER)
+		@SONAMEFLAG@`basename $@`.$(LIBSMBSHAREMODES_MAJOR)
 
-bin/libsmbsharemodes.a: $(BINARY_PREREQS) $(LIBSMBSHAREMODES_OBJ)
-	@echo Linking non-shared library $@
+bin/libsmbsharemodes.a: proto_exists $(LIBSMBSHAREMODES_OBJ)
+	@echo Linking libsmbsharemodes non-shared library $@
 	@-$(AR) -rc $@ $(LIBSMBSHAREMODES_OBJ)
 
+bin/libmsrpc. at SHLIBEXT@: proto_exists $(CAC_OBJ)
+	@echo Linking libmsrpc shared library $@
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(CAC_OBJ) $(LIBS) \
+	@SONAMEFLAG@`basename $@`.$(LIBMSRPC_MAJOR)
+
+bin/libmsrpc.a: proto_exists $(CAC_OBJ)
+	@echo Linking libmsrpc non-shared library $@
+	@-$(AR) -rc $@ $(CAC_OBJ)
+
 # This is probably wrong for anything other than the GNU linker.
-bin/libbigballofmud. at SHLIBEXT@: $(BINARY_PREREQS) $(LIBBIGBALLOFMUD_OBJ) @LIBTALLOC_SHARED@
-	@echo Linking shared library $@
-	@$(SHLD) $(LDSHFLAGS) -o $@ $(LIBBIGBALLOFMUD_OBJ) \
-		$(LIBS) @LIBTALLOC_LIBS@ \
+bin/libbigballofmud. at SHLIBEXT@: proto_exists $(LIBBIGBALLOFMUD_OBJ)
+	@echo Linking bigballofmud shared library $@
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(LIBBIGBALLOFMUD_OBJ) $(LIBS) \
 		$(PASSDB_LIBS) $(IDMAP_LIBS) $(KRB5LIBS) $(LDAP_LIBS) \
 		@SONAMEFLAG@`basename $@`.$(LIBBIGBALLOFMUD_MAJOR)
 	ln -snf libbigballofmud.so bin/libbigballofmud.so.0
@@ -1678,397 +1194,381 @@
 # it can be fixed or if they just can't be called from a static
 # library.
 
-libtalloc: $(LIBTALLOC)
-libtdb: $(LIBTDB)
 libsmbclient: $(LIBSMBCLIENT)
 libsmbsharemodes: $(LIBSMBSHAREMODES)
+libmsrpc: $(LIBMSRPC)
 libaddns: $(LIBADDNS)
-libwbclient: $(LIBWBCLIENT)
-libnetapi: $(LIBNETAPI)
 
-# Linker command to link a RPC, VFS, AUTH, CHARSET or PASSDB module.
-SHLD_MODULE = $(SHLD) $(LDSHFLAGS) $(MODULE_EXPORTS) \
-	      -o $@ @SONAMEFLAG@`basename $@`
+bin/librpc_lsarpc. at SHLIBEXT@: proto_exists $(RPC_LSA_OBJ)
+	@echo "Linking $@"
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_LSA_OBJ) -lc \
+		@SONAMEFLAG@`basename $@`
 
-bin/librpc_lsarpc. at SHLIBEXT@: $(BINARY_PREREQS) $(RPC_LSA_OBJ)
+bin/librpc_samr. at SHLIBEXT@: proto_exists $(RPC_SAMR_OBJ)
 	@echo "Linking $@"
-	@$(SHLD_MODULE) $(RPC_LSA_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_SAMR_OBJ) -lc \
+		@SONAMEFLAG@`basename $@`
 
-bin/librpc_samr. at SHLIBEXT@: $(BINARY_PREREQS) $(RPC_SAMR_OBJ)
+bin/librpc_unixinfo. at SHLIBEXT@: proto_exists $(RPC_UNIXINFO_OBJ)
 	@echo "Linking $@"
-	@$(SHLD_MODULE) $(RPC_SAMR_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_UNIXINFO_OBJ) -lc \
+		@SONAMEFLAG@`basename $@`
 
-bin/librpc_srvsvc. at SHLIBEXT@: $(BINARY_PREREQS) $(RPC_SVC_OBJ)
+bin/librpc_srvsvc. at SHLIBEXT@: proto_exists $(RPC_SVC_OBJ)
 	@echo "Linking $@"
-	@$(SHLD_MODULE) $(RPC_SVC_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_SVC_OBJ) -lc \
+		@SONAMEFLAG@`basename $@`
 
-bin/librpc_svcctl. at SHLIBEXT@: $(BINARY_PREREQS) $(RPC_SVCCTL_OBJ)
+bin/librpc_svcctl. at SHLIBEXT@: proto_exists $(RPC_SVCCTL_OBJ)
 	@echo "Linking $@"
-	@$(SHLD_MODULE) $(RPC_SVCCTL_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_SVCCTL_OBJ) -lc \
+		@SONAMEFLAG@`basename $@`
 
-bin/librpc_ntsvcs. at SHLIBEXT@: $(BINARY_PREREQS) $(RPC_NTSVCS_OBJ)
+bin/librpc_ntsvcs. at SHLIBEXT@: proto_exists $(RPC_NTSVCS_OBJ)
 	@echo "Linking $@"
-	@$(SHLD_MODULE) $(RPC_NTSVCS_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_NTSVCS_OBJ) -lc \
+		@SONAMEFLAG@`basename $@`
 
-bin/librpc_wkssvc. at SHLIBEXT@: $(BINARY_PREREQS) $(RPC_WKS_OBJ)
+bin/librpc_wkssvc. at SHLIBEXT@: proto_exists $(RPC_WKS_OBJ)
 	@echo "Linking $@"
-	@$(SHLD_MODULE) $(RPC_WKS_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_WKS_OBJ) -lc \
+		@SONAMEFLAG@`basename $@`
 
-bin/librpc_NETLOGON. at SHLIBEXT@: $(BINARY_PREREQS) $(RPC_NETLOG_OBJ)
+bin/librpc_NETLOGON. at SHLIBEXT@: proto_exists $(RPC_NETLOG_OBJ)
 	@echo "Linking $@"
-	@$(SHLD_MODULE) $(RPC_NETLOG_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_NETLOG_OBJ) -lc \
+		@SONAMEFLAG@`basename $@`
 
-bin/librpc_winreg. at SHLIBEXT@: $(BINARY_PREREQS) $(RPC_REG_OBJ)
+bin/librpc_reg. at SHLIBEXT@: proto_exists $(RPC_REG_OBJ)
 	@echo "Linking $@"
-	@$(SHLD_MODULE) $(RPC_REG_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_REG_OBJ) -lc \
+		@SONAMEFLAG@`basename $@`
 
-bin/librpc_initshutdown. at SHLIBEXT@: $(BINARY_PREREQS) $(RPC_INITSHUTDOWN_OBJ)
+bin/librpc_initshutdown. at SHLIBEXT@: proto_exists $(RPC_INITSHUTDOWN_OBJ)
 	@echo "Linking $@"
-	@$(SHLD_MODULE) $(RPC_INITSHUTDOWN_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_INITSHUTDOWN_OBJ) -lc \
+		@SONAMEFLAG@`basename $@`
 
-bin/librpc_dssetup. at SHLIBEXT@: $(BINARY_PREREQS) $(RPC_DSSETUP_OBJ)
+bin/librpc_lsa_ds. at SHLIBEXT@: proto_exists $(RPC_LSA_DS_OBJ)
 	@echo "Linking $@"
-	@$(SHLD_MODULE) $(RPC_DSSETUP_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_LSA_DS_OBJ) -lc \
+		@SONAMEFLAG@`basename $@`
 
-bin/librpc_spoolss. at SHLIBEXT@: $(BINARY_PREREQS) $(RPC_SPOOLSS_OBJ)
+bin/librpc_spoolss. at SHLIBEXT@: proto_exists $(RPC_SPOOLSS_OBJ)
 	@echo "Linking $@"
-	@$(SHLD_MODULE) $(RPC_SPOOLSS_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_SPOOLSS_OBJ) -lc \
+		@SONAMEFLAG@`basename $@`
 
-bin/librpc_eventlog. at SHLIBEXT@: $(BINARY_PREREQS) $(RPC_EVENTLOG_OBJ)
+bin/librpc_eventlog. at SHLIBEXT@: proto_exists $(RPC_EVENTLOG_OBJ)
 	@echo "Linking $@"
-	@$(SHLD_MODULE) $(RPC_EVENTLOG_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_EVENTLOG_OBJ) -lc \
+		@SONAMEFLAG@`basename $@`
 
-bin/librpc_netdfs. at SHLIBEXT@: $(BINARY_PREREQS) $(RPC_DFS_OBJ)
+bin/librpc_netdfs. at SHLIBEXT@: proto_exists $(RPC_DFS_OBJ)
 	@echo "Linking $@"
-	@$(SHLD_MODULE) $(RPC_DFS_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_DFS_OBJ) -lc \
+		@SONAMEFLAG@`basename $@`
 
-bin/librpc_echo. at SHLIBEXT@: $(BINARY_PREREQS) $(RPC_ECHO_OBJ)
+bin/librpc_echo. at SHLIBEXT@: proto_exists $(RPC_ECHO_OBJ)
 	@echo "Linking $@"
-	@$(SHLD_MODULE) $(RPC_ECHO_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_ECHO_OBJ) -lc \
+		@SONAMEFLAG@`basename $@`
 
-bin/winbindd at EXEEXT@: $(BINARY_PREREQS) $(WINBINDD_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
+bin/winbindd at EXEEXT@: proto_exists $(WINBINDD_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo "Linking $@"
 	@$(CC) $(FLAGS) -o $@ $(WINBINDD_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) \
-		@POPTLIBS@ $(KRB5LIBS) $(LDAP_LIBS) \
-		$(PASSDB_LIBS) @LIBTALLOC_LIBS@ @LIBTDB_LIBS@ @WINBIND_LIBS@
+		@POPTLIBS@ $(KRB5LIBS) $(LDAP_LIBS) $(PASSDB_LIBS)
 
-bin/vlp at EXEEXT@: $(BINARY_PREREQS) $(VLP_OBJ) @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
+ at WINBIND_NSS@: $(WINBIND_NSS_OBJ)
 	@echo "Linking $@"
-	@$(CC) $(FLAGS) -o $@ $(VLP_OBJ) $(LDFLAGS) $(DYNEXP) \
-		$(TERMLDFLAGS) $(TERMLIBS) $(LIBS) @POPTLIBS@ \
-		$(KRB5LIBS) $(LDAP_LIBS) $(NSCD_LIBS) \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@ @LIBWBCLIENT_SHARED@
-
- at WINBIND_NSS@: $(BINARY_PREREQS) $(WINBIND_NSS_OBJ)
-	@echo "Linking $@"
 	@$(SHLD) $(WINBIND_NSS_LDSHFLAGS) -o $@ $(WINBIND_NSS_OBJ) \
-		@WINBIND_NSS_EXTRA_LIBS@ @WINBIND_NSS_PTHREAD@ \
-		@SONAMEFLAG@`basename $@`@NSSSONAMEVERSIONSUFFIX@
+		@WINBIND_NSS_EXTRA_LIBS@ @SONAMEFLAG@`basename $@`@NSSSONAMEVERSIONSUFFIX@
 
- at WINBIND_WINS_NSS@: $(BINARY_PREREQS) $(WINBIND_WINS_NSS_OBJ) @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
+ at WINBIND_WINS_NSS@: proto_exists $(WINBIND_WINS_NSS_OBJ)
 	@echo "Linking $@"
 	@$(SHLD) $(LDSHFLAGS) -o $@ $(WINBIND_WINS_NSS_OBJ) \
-		$(LDAP_LIBS) $(KRB5LIBS) $(LIBS) @LIBTALLOC_LIBS@ @LIBTDB_LIBS@ \
+		$(LDAP_LIBS) $(KRB5LIBS) $(LIBS) \
 		@SONAMEFLAG@`basename $@`@NSSSONAMEVERSIONSUFFIX@
 
-bin/winbind_krb5_locator. at SHLIBEXT@: $(BINARY_PREREQS) $(WINBIND_KRB5_LOCATOR_OBJ)
+ at SMB_KRB5_LOCATOR@: proto_exists $(SMB_KRB5_LOCATOR_OBJ)
 	@echo "Linking $@"
-	@$(SHLD) $(LDSHFLAGS) -o $@ $(WINBIND_KRB5_LOCATOR_OBJ) \
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(SMB_KRB5_LOCATOR_OBJ) \
+		$(LDAP_LIBS) $(LIBS) -lcom_err \
 		@SONAMEFLAG@`basename $@`
 
-bin/pam_winbind. at SHLIBEXT@: $(BINARY_PREREQS) $(PAM_WINBIND_OBJ)
+bin/pam_winbind. at SHLIBEXT@: $(PAM_WINBIND_OBJ) bin/.dummy
 	@echo "Linking shared library $@"
 	@$(SHLD) $(LDSHFLAGS) -o $@ $(PAM_WINBIND_OBJ) -lpam @INIPARSERLIBS@ \
 		@PAM_WINBIND_EXTRA_LIBS@ @SONAMEFLAG@`basename $@`
 
-bin/builtin. at SHLIBEXT@: $(BINARY_PREREQS) $(AUTH_BUILTIN_OBJ)
+bin/builtin. at SHLIBEXT@: proto_exists $(AUTH_BUILTIN_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(AUTH_BUILTIN_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(AUTH_BUILTIN_OBJ) @SONAMEFLAG@`basename $@`
 
-bin/domain. at SHLIBEXT@: $(BINARY_PREREQS) $(AUTH_DOMAIN_OBJ)
+bin/domain. at SHLIBEXT@: proto_exists $(AUTH_DOMAIN_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(AUTH_DOMAIN_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(AUTH_DOMAIN_OBJ) @SONAMEFLAG@`basename $@`
 
-bin/script. at SHLIBEXT@: $(BINARY_PREREQS) $(AUTH_SCRIPT_OBJ)
+bin/script. at SHLIBEXT@: proto_exists $(AUTH_SCRIPT_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(AUTH_SCRIPT_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(AUTH_SCRIPT_OBJ) @SONAMEFLAG@`basename $@`
 
-bin/smbserver. at SHLIBEXT@: $(BINARY_PREREQS) $(AUTH_SERVER_OBJ)
+bin/smbserver. at SHLIBEXT@: proto_exists $(AUTH_SERVER_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(AUTH_SERVER_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(AUTH_SERVER_OBJ) @SONAMEFLAG@`basename $@`
 
-bin/winbind. at SHLIBEXT@: $(BINARY_PREREQS) $(AUTH_WINBIND_OBJ)
+bin/winbind. at SHLIBEXT@: proto_exists $(AUTH_WINBIND_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(AUTH_WINBIND_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(AUTH_WINBIND_OBJ) @SONAMEFLAG@`basename $@`
 
-bin/unix. at SHLIBEXT@: $(BINARY_PREREQS) $(AUTH_UNIX_OBJ)
+bin/unix. at SHLIBEXT@: proto_exists $(AUTH_UNIX_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(AUTH_UNIX_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(AUTH_UNIX_OBJ) @SONAMEFLAG@`basename $@`
 
-bin/sam. at SHLIBEXT@: $(BINARY_PREREQS) $(AUTH_SAM_OBJ)
+bin/sam. at SHLIBEXT@: proto_exists $(AUTH_SAM_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(AUTH_SAM_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(AUTH_SAM_OBJ) @SONAMEFLAG@`basename $@`
 
-bin/ldapsam. at SHLIBEXT@: $(BINARY_PREREQS) passdb/pdb_ldap.o passdb/pdb_nds.o
+bin/ldapsam. at SHLIBEXT@: passdb/pdb_ldap.o
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) passdb/pdb_ldap.o passdb/pdb_nds.o $(LDAP_LIBS)
+	@$(SHLD) $(LDSHFLAGS) $(LDAP_LIBS) -o $@ passdb/pdb_ldap.o \
+		@SONAMEFLAG@`basename $@`
 
-bin/tdbsam. at SHLIBEXT@: $(BINARY_PREREQS) passdb/pdb_tdb.o
+bin/tdbsam. at SHLIBEXT@: proto_exists passdb/pdb_tdb.o
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) passdb/pdb_tdb.o
+	@$(SHLD) $(LDSHFLAGS) -o $@ passdb/pdb_tdb.o \
+		@SONAMEFLAG@`basename $@`
 
-bin/smbpasswd. at SHLIBEXT@: $(BINARY_PREREQS) passdb/pdb_smbpasswd.o
+bin/smbpasswd. at SHLIBEXT@: proto_exists passdb/pdb_smbpasswd.o
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) passdb/pdb_smbpasswd.o
+	@$(SHLD) $(LDSHFLAGS) -o $@ passdb/pdb_smbpasswd.o \
+		@SONAMEFLAG@`basename $@`
 
-bin/rid. at SHLIBEXT@: $(BINARY_PREREQS) winbindd/idmap_rid.o
+bin/rid. at SHLIBEXT@: proto_exists nsswitch/idmap_rid.o
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) winbindd/idmap_rid.o
+	@$(SHLD) $(LDSHFLAGS) -o $@ nsswitch/idmap_rid.o \
+		@SONAMEFLAG@`basename $@`
 
-bin/ad. at SHLIBEXT@: $(BINARY_PREREQS) winbindd/idmap_ad.o
+bin/ad. at SHLIBEXT@: proto_exists nsswitch/idmap_ad.o
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) winbindd/idmap_ad.o
+	@$(SHLD) $(LDSHFLAGS) -o $@ nsswitch/idmap_ad.o \
+		@SONAMEFLAG@`basename $@`
 
-bin/tdb2. at SHLIBEXT@: $(BINARY_PREREQS) winbindd/idmap_tdb2.o
+bin/ldap. at SHLIBEXT@: proto_exists nsswitch/idmap_ldap.o
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) winbindd/idmap_tdb2.o
+	@$(SHLD) $(LDSHFLAGS) -o $@ nsswitch/idmap_ldap.o \
+		@SONAMEFLAG@`basename $@`
 
-bin/ldap. at SHLIBEXT@: $(BINARY_PREREQS) winbindd/idmap_ldap.o
+bin/weird. at SHLIBEXT@: proto_exists $(DEVEL_HELP_WEIRD_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) winbindd/idmap_ldap.o
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(DEVEL_HELP_WEIRD_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/weird. at SHLIBEXT@: $(BINARY_PREREQS) $(DEVEL_HELP_WEIRD_OBJ)
+bin/CP850. at SHLIBEXT@: proto_exists $(CP850_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(DEVEL_HELP_WEIRD_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(CP850_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/CP850. at SHLIBEXT@: $(BINARY_PREREQS) $(CP850_OBJ)
+bin/CP437. at SHLIBEXT@: proto_exists $(CP437_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(CP850_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(CP437_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/CP437. at SHLIBEXT@: $(BINARY_PREREQS) $(CP437_OBJ)
+bin/macosxfs. at SHLIBEXT@: $(CHARSET_MACOSXFS_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(CP437_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(CHARSET_MACOSXFS_OBJ) \
+		-framework CoreFoundation @SONAMEFLAG@`basename $@`
 
-bin/macosxfs. at SHLIBEXT@: $(BINARY_PREREQS) $(CHARSET_MACOSXFS_OBJ)
-	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(CHARSET_MACOSXFS_OBJ) -framework CoreFoundation
-
 # NOTE, there is no build rule for a dynamic default VFS module because
 # this one MUST MUST MUST be built statically.
 
-bin/audit. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_AUDIT_OBJ)
+bin/audit. at SHLIBEXT@: proto_exists $(VFS_AUDIT_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_AUDIT_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_AUDIT_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/extd_audit. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_EXTD_AUDIT_OBJ)
+bin/extd_audit. at SHLIBEXT@: proto_exists $(VFS_EXTD_AUDIT_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_EXTD_AUDIT_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_EXTD_AUDIT_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/full_audit. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_FULL_AUDIT_OBJ)
+bin/full_audit. at SHLIBEXT@: proto_exists $(VFS_FULL_AUDIT_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_FULL_AUDIT_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_FULL_AUDIT_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/recycle. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_RECYCLE_OBJ)
+bin/recycle. at SHLIBEXT@: proto_exists $(VFS_RECYCLE_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_RECYCLE_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_RECYCLE_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/netatalk. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_NETATALK_OBJ)
+bin/netatalk. at SHLIBEXT@: proto_exists $(VFS_NETATALK_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_NETATALK_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_NETATALK_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/fake_perms. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_FAKE_PERMS_OBJ)
+bin/fake_perms. at SHLIBEXT@: proto_exists $(VFS_FAKE_PERMS_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_FAKE_PERMS_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_FAKE_PERMS_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/default_quota. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_DEFAULT_QUOTA_OBJ)
+bin/default_quota. at SHLIBEXT@: proto_exists $(VFS_DEFAULT_QUOTA_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_DEFAULT_QUOTA_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_DEFAULT_QUOTA_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/readonly. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_READONLY_OBJ)
+bin/readonly. at SHLIBEXT@: proto_exists $(VFS_READONLY_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_READONLY_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_READONLY_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/shadow_copy. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_SHADOW_COPY_OBJ)
+bin/shadow_copy. at SHLIBEXT@: proto_exists $(VFS_SHADOW_COPY_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_SHADOW_COPY_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_SHADOW_COPY_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/shadow_copy2. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_SHADOW_COPY2_OBJ)
+bin/cap. at SHLIBEXT@: proto_exists $(VFS_CAP_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_SHADOW_COPY2_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_CAP_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/syncops. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_SYNCOPS_OBJ)
+bin/expand_msdfs. at SHLIBEXT@: proto_exists $(VFS_EXPAND_MSDFS_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_SYNCOPS_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_EXPAND_MSDFS_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/cap. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_CAP_OBJ)
+bin/afsacl. at SHLIBEXT@: $(VFS_AFSACL_OBJ:.o=.po)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_CAP_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_AFSACL_OBJ:.o=.po) \
+		@SONAMEFLAG@`basename $@`
 
-bin/expand_msdfs. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_EXPAND_MSDFS_OBJ)
+bin/posixacl. at SHLIBEXT@: $(VFS_POSIXACL_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_EXPAND_MSDFS_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_POSIXACL_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/afsacl. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_AFSACL_OBJ)
+bin/aixacl. at SHLIBEXT@: $(VFS_AIXACL_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_AFSACL_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_AIXACL_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/xattr_tdb. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_XATTR_TDB_OBJ)
+bin/aixacl2. at SHLIBEXT@: $(VFS_AIXACL2_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_XATTR_TDB_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_AIXACL2_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/posixacl. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_POSIXACL_OBJ)
+bin/solarisacl. at SHLIBEXT@: $(VFS_SOLARISACL_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_POSIXACL_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_SOLARISACL_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/aixacl. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_AIXACL_OBJ)
+bin/irixacl. at SHLIBEXT@: proto_exists $(VFS_IRIXACL_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_AIXACL_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_IRIXACL_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/aixacl2. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_AIXACL2_OBJ)
+bin/hpuxacl. at SHLIBEXT@: proto_exists $(VFS_HPUXACL_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_AIXACL2_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_HPUXACL_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/solarisacl. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_SOLARISACL_OBJ)
+bin/tru64acl. at SHLIBEXT@: $(VFS_TRU64ACL_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_SOLARISACL_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_TRU64ACL_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/zfsacl. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_ZFSACL_OBJ)
+bin/catia. at SHLIBEXT@: proto_exists $(VFS_CATIA_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_ZFSACL_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_CATIA_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/irixacl. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_IRIXACL_OBJ)
+bin/cacheprime. at SHLIBEXT@: proto_exists $(VFS_CACHEPRIME_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_IRIXACL_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_CACHEPRIME_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/hpuxacl. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_HPUXACL_OBJ)
+bin/prealloc. at SHLIBEXT@: proto_exists $(VFS_PREALLOC_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_HPUXACL_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_PREALLOC_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/tru64acl. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_TRU64ACL_OBJ)
+bin/commit. at SHLIBEXT@: proto_exists $(VFS_COMMIT_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_TRU64ACL_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_COMMIT_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/catia. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_CATIA_OBJ)
+bin/gpfs. at SHLIBEXT@: $(VFS_GPFS_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_CATIA_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_GPFS_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/streams_xattr. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_STREAMS_XATTR_OBJ)
+bin/notify_fam. at SHLIBEXT@: $(VFS_NOTIFY_FAM_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_STREAMS_XATTR_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_NOTIFY_FAM_OBJ) \
+		@SONAMEFLAG@`basename $@` @SMB_FAM_LIBS@
 
-bin/streams_depot. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_STREAMS_DEPOT_OBJ)
+bin/readahead. at SHLIBEXT@: $(VFS_READAHEAD_OBJ)
 	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_STREAMS_DEPOT_OBJ)
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_READAHEAD_OBJ) \
+		@SONAMEFLAG@`basename $@`
 
-bin/cacheprime. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_CACHEPRIME_OBJ)
-	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_CACHEPRIME_OBJ)
-
-bin/prealloc. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_PREALLOC_OBJ)
-	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_PREALLOC_OBJ)
-
-bin/commit. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_COMMIT_OBJ)
-	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_COMMIT_OBJ)
-
-bin/gpfs. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_GPFS_OBJ)
-	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_GPFS_OBJ)
-
-bin/notify_fam. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_NOTIFY_FAM_OBJ)
-	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_NOTIFY_FAM_OBJ) @SMB_FAM_LIBS@
-
-bin/readahead. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_READAHEAD_OBJ)
-	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_READAHEAD_OBJ)
-
-bin/tsmsm. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_TSMSM_OBJ)
-	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_TSMSM_OBJ)
-
-bin/fileid. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_FILEID_OBJ)
-	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_FILEID_OBJ)
-
-bin/aio_fork. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_AIO_FORK_OBJ)
-	@echo "Building plugin $@"
-	@$(SHLD_MODULE) $(VFS_AIO_FORK_OBJ)
-
 #########################################################
 ## IdMap NSS plugins
 
 ## None here right now
 #########################################################
 
-bin/wbinfo at EXEEXT@: $(BINARY_PREREQS) $(WBINFO_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
+bin/wbinfo at EXEEXT@: proto_exists $(WBINFO_OBJ) @BUILD_POPT@ bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(LDFLAGS) $(WBINFO_OBJ) $(DYNEXP) $(LIBS) \
-		$(LDAP_LIBS) @POPTLIBS@ @LIBTALLOC_LIBS@ @LIBTDB_LIBS@ \
-		@WINBIND_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(LDFLAGS) $(WBINFO_OBJ) $(DYNEXP) $(LIBS) $(LDAP_LIBS) @POPTLIBS@
 
-bin/ntlm_auth at EXEEXT@: $(BINARY_PREREQS) $(NTLM_AUTH_OBJ) $(PARAM_OBJ) \
-	$(LIB_NONSMBD_OBJ) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
+bin/ntlm_auth at EXEEXT@: proto_exists $(NTLM_AUTH_OBJ) $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
+		@BUILD_POPT@ bin/.dummy
 	@echo Linking $@
 	@$(CC) $(FLAGS) -o $@ $(LDFLAGS) $(DYNEXP) $(NTLM_AUTH_OBJ) \
 		$(PARAM_OBJ) $(LIB_NONSMBD_OBJ) $(LIBS) \
-		@POPTLIBS@ $(KRB5LIBS) $(LDAP_LIBS) $(NSCD_LIBS) \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@ @WINBIND_LIBS@
+		@POPTLIBS@ $(KRB5LIBS) $(LDAP_LIBS) $(NSCD_LIBS)
 
-bin/pam_smbpass. at SHLIBEXT@: $(BINARY_PREREQS) $(PAM_SMBPASS_OBJ) @LIBTALLOC_SHARED@ @LIBWBCLIENT_SHARED@ @LIBTDB_SHARED@
+bin/pam_smbpass. at SHLIBEXT@: $(PAM_SMBPASS_OBJ)
 	@echo "Linking shared library $@"
-	@$(SHLD) $(LDSHFLAGS) -o $@ $(PAM_SMBPASS_OBJ) -lpam $(DYNEXP) \
-		$(LIBS) $(LDAP_LIBS) $(KRB5LIBS) $(NSCD_LIBS) \
-		@LIBTALLOC_LIBS@ @LIBTDB_LIBS@ @WINBIND_LIBS@
+	@$(SHLD) $(LDSHFLAGS) -o $@ $(PAM_SMBPASS_OBJ) -lpam $(DYNEXP) $(LIBS) $(LDAP_LIBS) $(KRB5LIBS) $(NSCD_LIBS)
 
-bin/tdbbackup at EXEEXT@: $(BINARY_PREREQS) $(TDBBACKUP_OBJ) @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
+bin/tdbbackup at EXEEXT@: proto_exists $(TDBBACKUP_OBJ) bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(LDFLAGS) $(TDBBACKUP_OBJ) $(DYNEXP) \
-		$(LIBS) @LIBTALLOC_LIBS@ @LIBTDB_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(LDFLAGS) $(DYNEXP) $(LIBS) $(TDBBACKUP_OBJ)
 
-bin/tdbtool at EXEEXT@: $(BINARY_PREREQS) $(TDBTOOL_OBJ) @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
+bin/tdbtool at EXEEXT@: $(TDBTOOL_OBJ) bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(LDFLAGS) $(TDBTOOL_OBJ) $(DYNEXP) \
-		$(LIBS) @LIBTALLOC_LIBS@ @LIBTDB_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(LDFLAGS) $(DYNEXP) $(LIBS) $(TDBTOOL_OBJ)
 
-bin/tdbdump at EXEEXT@: $(BINARY_PREREQS) $(TDBDUMP_OBJ) @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
+bin/tdbdump at EXEEXT@: $(TDBDUMP_OBJ) bin/.dummy
 	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(LDFLAGS) $(TDBDUMP_OBJ) $(DYNEXP) \
-		$(LIBS) @LIBTALLOC_LIBS@ @LIBTDB_LIBS@
+	@$(CC) $(FLAGS) -o $@ $(LDFLAGS) $(DYNEXP) $(LIBS) $(TDBDUMP_OBJ)
 
-bin/tdbtorture at EXEEXT@: $(BINARY_PREREQS) $(TDBTORTURE_OBJ) @LIBTALLOC_SHARED@ @LIBTDB_SHARED@
-	@echo Linking $@
-	@$(CC) $(FLAGS) -o $@ $(LDFLAGS) $(TDBTORTURE_OBJ) $(DYNEXP) \
-		$(LIBS) @LIBTALLOC_LIBS@ @LIBTDB_LIBS@
+bin/t_strcmp at EXEEXT@: proto_exists bin/libbigballofmud. at SHLIBEXT@ torture/t_strcmp.o
+	$(CC) $(FLAGS) -o $@ $(DYNEXP) $(LIBS) torture/t_strcmp.o -L ./bin -lbigballofmud
 
-bin/t_strcmp at EXEEXT@: $(BINARY_PREREQS) @LIBTALLOC_SHARED@ bin/libbigballofmud. at SHLIBEXT@ torture/t_strcmp.o
-	$(CC) $(FLAGS) -o $@ $(DYNEXP) $(LIBS) @LIBTALLOC_LIBS@ \
-		torture/t_strcmp.o -L ./bin -lbigballofmud
+bin/t_strstr at EXEEXT@: proto_exists bin/libbigballofmud. at SHLIBEXT@ torture/t_strstr.o
+	$(CC) $(FLAGS) -o $@ $(DYNEXP) $(LIBS) torture/t_strstr.o -L ./bin -lbigballofmud
 
-bin/t_strstr at EXEEXT@: $(BINARY_PREREQS) @LIBTALLOC_SHARED@ bin/libbigballofmud. at SHLIBEXT@ torture/t_strstr.o
-	$(CC) $(FLAGS) -o $@ $(DYNEXP) $(LIBS) @LIBTALLOC_LIBS@ \
-		torture/t_strstr.o -L ./bin -lbigballofmud
+bin/t_strappend at EXEEXT@: proto_exists bin/libbigballofmud. at SHLIBEXT@ torture/t_strappend.o
+	$(CC) $(FLAGS) -o $@ $(DYNEXP) $(LIBS) torture/t_strappend.o -L ./bin -lbigballofmud
 
-bin/t_strappend at EXEEXT@: $(BINARY_PREREQS) @LIBTALLOC_SHARED@ bin/libbigballofmud. at SHLIBEXT@ torture/t_strappend.o
-	$(CC) $(FLAGS) -o $@ $(DYNEXP) $(LIBS) @LIBTALLOC_LIBS@ \
-		torture/t_strappend.o -L ./bin -lbigballofmud
+bin/t_stringoverflow at EXEEXT@: bin/libbigballofmud. at SHLIBEXT@ torture/t_stringoverflow.o
+	$(CC) $(FLAGS) -o $@ $(DYNEXP) torture/t_stringoverflow.o -L./bin -lbigballofmud
 
-bin/t_stringoverflow at EXEEXT@: $(BINARY_PREREQS) bin/libbigballofmud. at SHLIBEXT@ torture/t_stringoverflow.o
-	$(CC) $(FLAGS) -o $@ $(DYNEXP) torture/t_stringoverflow.o \
-		-L./bin -lbigballofmud
+bin/t_doschar at EXEEXT@: proto_exists bin/libbigballofmud. at SHLIBEXT@ torture/t_doschar.o
+	$(CC) $(FLAGS) -o $@ $(DYNEXP) $(LIBS) torture/t_doschar.o -L ./bin -lbigballofmud
+bin/t_push_ucs2 at EXEEXT@: proto_exists bin/libbigballofmud. at SHLIBEXT@ torture/t_push_ucs2.o
+	$(CC) $(FLAGS) -o $@ $(DYNEXP) $(LIBS) torture/t_push_ucs2.o -L ./bin -lbigballofmud
 
 bin/timelimit at EXEEXT@: script/tests/timelimit.o
 	@echo Linking $@
 	@$(CC) $(FLAGS) -o $@ $(DYNEXP) script/tests/timelimit.o
 
-install: installservers installbin @INSTALL_CIFSMOUNT@ @INSTALL_CIFSSPNEGO@ installman \
-		installscripts installdat installmodules @SWAT_INSTALL_TARGETS@ \
-		installlibtalloc \
-		installlibtdb \
-		@INSTALL_LIBSMBCLIENT@ @INSTALL_PAM_MODULES@ \
-		@INSTALL_LIBSMBSHAREMODES@ @INSTALL_LIBWBCLIENT@ installlibnetapi
+install: installservers installbin @INSTALL_CIFSMOUNT@ installman installscripts installdat installswat installmodules @INSTALL_LIBSMBCLIENT@ @INSTALL_LIBMSRPC@ @INSTALL_PAM_MODULES@ @INSTALL_LIBSMBSHAREMODES@
 
+
 install-everything: install installmodules
 
 # DESTDIR is used here to prevent packagers wasting their time
@@ -2080,112 +1580,117 @@
 # is not used
 
 installdirs:
-	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(BINDIR) $(SBINDIR) $(LIBDIR) $(VARDIR) $(PRIVATEDIR) $(PIDDIR) $(LOCKDIR) $(MANDIR)
+	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS) $(DESTDIR) $(prefix) $(BINDIR) $(SBINDIR) $(LIBDIR) $(VARDIR) $(PRIVATEDIR) $(PIDDIR) $(LOCKDIR) $(MANDIR)
 
 installservers: all installdirs
-	@$(SHELL) script/installbin.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(SBINDIR) $(SBIN_PROGS)
+	@$(SHELL) script/installbin.sh $(INSTALLPERMS) $(DESTDIR) $(prefix) $(SBINDIR) $(SBIN_PROGS)
 
 installbin: all installdirs
-	@$(SHELL) script/installbin.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(BINDIR) $(BIN_PROGS)
+	@$(SHELL) script/installbin.sh $(INSTALLPERMS) $(DESTDIR) $(prefix) $(BINDIR) $(BIN_PROGS)
 
 installcifsmount: @CIFSMOUNT_PROGS@
-	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(ROOTSBINDIR)
-	@$(SHELL) script/installbin.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(ROOTSBINDIR) @CIFSMOUNT_PROGS@
+	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS) $(DESTDIR) $(ROOTSBINDIR)
+	@$(SHELL) script/installbin.sh $(INSTALLPERMS) $(DESTDIR) $(prefix) $(ROOTSBINDIR) @CIFSMOUNT_PROGS@
 
-installcifsspnego: @CIFSSPNEGO_PROGS@
-	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(ROOTSBINDIR)
-	@$(SHELL) script/installbin.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(ROOTSBINDIR) @CIFSSPNEGO_PROGS@
-
 # Some symlinks are required for the 'probing' of modules.
 # This mechanism should go at some point..
 installmodules: modules installdirs
-	@$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(VFSLIBDIR) $(VFS_MODULES)
-	@$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(PDBLIBDIR) $(PDB_MODULES)
-	@$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(RPCLIBDIR) $(RPC_MODULES)
-	@$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(IDMAPLIBDIR) $(IDMAP_MODULES)
-	@$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(NSSINFOLIBDIR) $(NSS_INFO_MODULES)
-	@$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(CHARSETLIBDIR) $(CHARSET_MODULES)
-	@$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(AUTHLIBDIR) $(AUTH_MODULES)
-	@$(SHELL) $(srcdir)/script/linkmodules.sh $(DESTDIR)$(PDBLIBDIR) ldapsam. at SHLIBEXT@ NDS_ldapsam. at SHLIBEXT@
-	@$(SHELL) $(srcdir)/script/linkmodules.sh $(DESTDIR)$(PDBLIBDIR) ldapsam. at SHLIBEXT@ NDS_ldapsam_compat. at SHLIBEXT@
+	@$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS) $(DESTDIR) $(prefix) $(VFSLIBDIR) $(VFS_MODULES)
+	@$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS) $(DESTDIR) $(prefix) $(PDBLIBDIR) $(PDB_MODULES)
+	@$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS) $(DESTDIR) $(prefix) $(RPCLIBDIR) $(RPC_MODULES)
+	@$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS) $(DESTDIR) $(prefix) $(IDMAPLIBDIR) $(IDMAP_MODULES)
+	@$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS) $(DESTDIR) $(prefix) $(NSSINFOLIBDIR) $(NSS_INFO_MODULES)
+	@$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS) $(DESTDIR) $(prefix) $(CHARSETLIBDIR) $(CHARSET_MODULES)
+	@$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS) $(DESTDIR) $(prefix) $(AUTHLIBDIR) $(AUTH_MODULES)
 	@$(SHELL) $(srcdir)/script/linkmodules.sh $(DESTDIR)$(PDBLIBDIR) ldapsam. at SHLIBEXT@ ldapsam_compat. at SHLIBEXT@
 	@$(SHELL) $(srcdir)/script/linkmodules.sh $(DESTDIR)$(AUTHLIBDIR) rhosts. at SHLIBEXT@ hostsequiv. at SHLIBEXT@
 	@$(SHELL) $(srcdir)/script/linkmodules.sh $(DESTDIR)$(AUTHLIBDIR) sam. at SHLIBEXT@ sam_ignoredomain. at SHLIBEXT@
 	@$(SHELL) $(srcdir)/script/linkmodules.sh $(DESTDIR)$(AUTHLIBDIR) domain. at SHLIBEXT@ trustdomain. at SHLIBEXT@ ntdomain. at SHLIBEXT@
 	@$(SHELL) $(srcdir)/script/linkmodules.sh $(DESTDIR)$(AUTHLIBDIR) builtin. at SHLIBEXT@ guest. at SHLIBEXT@ fixed_challenge. at SHLIBEXT@ name_to_ntstatus. at SHLIBEXT@
-	@$(SHELL) $(srcdir)/script/linkmodules.sh $(DESTDIR)$(NSSINFOLIBDIR) ../idmap/ad. at SHLIBEXT@ rfc2307. at SHLIBEXT@ sfu. at SHLIBEXT@ sfu20. at SHLIBEXT@
+	@$(SHELL) $(srcdir)/script/linkmodules.sh $(DESTDIR)$(NSSINFOLIBDIR) ../idmap/ad. at SHLIBEXT@ rfc2307. at SHLIBEXT@ sfu. at SHLIBEXT@
 
 installscripts: installdirs
-	@$(SHELL) $(srcdir)/script/installscripts.sh $(INSTALLPERMS_BIN) $(DESTDIR)$(BINDIR) $(SCRIPTS)
+	@$(SHELL) $(srcdir)/script/installscripts.sh $(INSTALLPERMS) $(DESTDIR)$(BINDIR) $(SCRIPTS)
 
 installdat: installdirs
-	@$(SHELL) $(srcdir)/script/installdat.sh $(DESTDIR) $(CODEPAGEDIR) $(srcdir)
+	@$(SHELL) $(srcdir)/script/installdat.sh $(DESTDIR) $(LIBDIR) $(srcdir)
 
 installmsg: installdirs
-	@$(SHELL) $(srcdir)/script/installmsg.sh $(DESTDIR) $(CODEPAGEDIR) $(srcdir)
+	@$(SHELL) $(srcdir)/script/installmsg.sh $(DESTDIR) $(LIBDIR) $(srcdir)
 
 installswat: installdirs installmsg
 	@$(SHELL) $(srcdir)/script/installswat.sh $(DESTDIR) $(SWATDIR) $(srcdir)
 
 installclientlib: installdirs libsmbclient
-	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(LIBDIR)
+	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS) $(DESTDIR) $(LIBDIR)
 	-$(INSTALLLIBCMD_SH) bin/libsmbclient. at SHLIBEXT@ $(DESTDIR)$(LIBDIR)
 	-$(INSTALLLIBCMD_A) bin/libsmbclient.a $(DESTDIR)$(LIBDIR)
-	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS_BIN) $(DESTDIR) ${prefix}/include
-	-$(INSTALLCMD) -m $(INSTALLPERMS_DATA) $(srcdir)/include/libsmbclient.h $(DESTDIR)${prefix}/include
+	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS) $(DESTDIR) ${prefix}/include
+	-$(INSTALLCMD) $(srcdir)/include/libsmbclient.h $(DESTDIR)${prefix}/include
 
-installlibtalloc: installdirs libtalloc
-	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(LIBDIR)
-	-$(INSTALLLIBCMD_SH) $(LIBTALLOC_SHARED_TARGET) $(DESTDIR)$(LIBDIR)
-	-$(INSTALLLIBCMD_A) $(LIBTALLOC_STATIC_TARGET) $(DESTDIR)$(LIBDIR)
-	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS_BIN) $(DESTDIR) ${prefix}/include
-	-$(INSTALLCMD) -m $(INSTALLPERMS_DATA) $(LIBTALLOC_HEADERS) $(DESTDIR)${prefix}/include
+installlibmsrpc: installdirs libmsrpc
+	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS) $(DESTDIR) $(LIBDIR)
+	-$(INSTALLLIBCMD_SH) bin/libmsrpc. at SHLIBEXT@ $(DESTDIR)$(LIBDIR)
+	-$(INSTALLLIBCMD_A) bin/libmsrpc.a $(DESTDIR)$(LIBDIR)
+	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS) $(DESTDIR) ${prefix}/include
+	-$(INSTALLCMD) $(srcdir)/include/libmsrpc.h $(DESTDIR)${prefix}/include
 
-installlibtdb: installdirs libtdb
-	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(LIBDIR)
-	-$(INSTALLLIBCMD_SH) $(LIBTDB_SHARED_TARGET) $(DESTDIR)$(LIBDIR)
-	-$(INSTALLLIBCMD_A) $(LIBTDB_STATIC_TARGET) $(DESTDIR)$(LIBDIR)
-	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS_BIN) $(DESTDIR) ${prefix}/include
-	-$(INSTALLCMD) -m $(INSTALLPERMS_DATA) $(LIBTDB_HEADERS) $(DESTDIR)${prefix}/include
-
 installlibsmbsharemodes: installdirs libsmbsharemodes
-	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(LIBDIR)
+	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS) $(DESTDIR) $(LIBDIR)
 	-$(INSTALLLIBCMD_SH) bin/libsmbsharemodes. at SHLIBEXT@ $(DESTDIR)$(LIBDIR)
 	-$(INSTALLLIBCMD_A) bin/libsmbsharemodes.a $(DESTDIR)$(LIBDIR)
-	-$(INSTALLCMD) -m $(INSTALLPERMS_DATA) $(srcdir)/include/smb_share_modes.h $(DESTDIR)${prefix}/include
 
 installlibaddns: installdirs libaddns
-	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(LIBDIR)
+	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS) $(DESTDIR) $(LIBDIR)
 	-$(INSTALLLIBCMD_SH) bin/libaddns. at SHLIBEXT@ $(DESTDIR)$(LIBDIR)
 	-$(INSTALLLIBCMD_A) bin/libaddns.a $(DESTDIR)$(LIBDIR)
 
-installlibwbclient: installdirs libwbclient
-	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(LIBDIR)
-	-$(INSTALLLIBCMD_SH) bin/libwbclient. at SHLIBEXT@ $(DESTDIR)$(LIBDIR)
-	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS_BIN) $(DESTDIR) ${prefix}/include
-	-$(INSTALLCMD) -m $(INSTALLPERMS_DATA) $(srcdir)/nsswitch/libwbclient/wbclient.h $(DESTDIR)${prefix}/include
-
-installlibnetapi: installdirs libnetapi
-	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(LIBDIR)
-	-$(INSTALLLIBCMD_SH) $(LIBNETAPI_SHARED_TARGET) $(DESTDIR)$(LIBDIR)
-	-$(INSTALLLIBCMD_A) $(LIBNETAPI_STATIC_TARGET) $(DESTDIR)$(LIBDIR)
-	-$(INSTALLCMD) -m $(INSTALLPERMS_DATA) $(srcdir)/lib/netapi/netapi.h $(DESTDIR)${prefix}/include
-
 installpammodules: $(PAM_MODULES)
-	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(PAMMODULESDIR)
+	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS) $(DESTDIR) $(PAMMODULESDIR)
 	@for module in $(PAM_MODULES); do \
 		echo "Installing module $${module} as $(DESTDIR)/$(PAMMODULESDIR)/$${module}. at SHLIBEXT@ "; \
-		$(INSTALLCMD) -m $(INSTALLPERMS_BIN) bin/$${module}. at SHLIBEXT@ \
+		$(INSTALLCMD) -m $(INSTALLPERMS) bin/$${module}. at SHLIBEXT@ \
 			"$(DESTDIR)/$(PAMMODULESDIR)"; \
 	done
 
+# Python extensions
+
+PYTHON_OBJ = $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) $(LIBSMB_OBJ) $(RPC_PARSE_OBJ) \
+	$(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(PASSDB_OBJ) $(GROUPDB_OBJ) \
+	$(SECRETS_OBJ) $(KRBCLIENT_OBJ) $(SMBLDAP_OBJ)
+
+python_ext: $(PYTHON_OBJ)
+	@if test -z "$(PYTHON)"; then \
+		echo Use the option --with-python to configure python; \
+		exit 1; \
+	fi
+	PYTHON_OBJS="$(PYTHON_OBJ)" \
+	PYTHON_CFLAGS="$(CFLAGS) $(CPPFLAGS) $(FLAGS)" \
+	LIBS="$(LDFLAGS) $(LIBS) $(PASSDB_LIBS) $(IDMAP_LIBS) $(KRB5LIBS) $(LDAP_LIBS)" \
+		$(PYTHON) python/setup.py build
+
+python_install: $(PYTHON_OBJ)
+	@if test -z "$(PYTHON)"; then \
+		echo Use the option --with-python to configure python; \
+		exit 1; \
+	fi
+	PYTHON_OBJS="$(PYTHON_OBJ)" \
+	PYTHON_CFLAGS="$(CFLAGS) $(CPPFLAGS)" \
+	LIBS="$(LDFLAGS) $(LIBS)" \
+		$(PYTHON) python/setup.py install --root=$(DESTDIR)
+
+python_clean:
+	@-if test -n "$(PYTHON)"; then $(PYTHON) python/setup.py clean; fi
+	@-rm -rf build/
+
 # revert to the previously installed version
 revert:
 	@$(SHELL) $(srcdir)/script/revert.sh $(SBINDIR) $(SBIN_PROGS)
 	@$(SHELL) $(srcdir)/script/revert.sh $(BINDIR) $(BIN_PROGS) $(SCRIPTS)
 
 installman: installdirs
-	@$(SHELL) $(srcdir)/script/installman.sh $(DESTDIR)$(MANDIR) $(srcdir) C "@ROFF@"
+	@SMBMOUNT_PROGS="@SMBMOUNT_PROGS@" $(SHELL) \
+		$(srcdir)/script/installman.sh $(DESTDIR)$(MANDIR) $(srcdir) C "@ROFF@"
 
 .PHONY: showlayout
 
@@ -2204,33 +1709,30 @@
 	@echo "  swatdir:     $(SWATDIR)"
 
 
-uninstall: uninstallman uninstallservers uninstallbin @UNINSTALL_CIFSMOUNT@ @UNINSTALL_CIFSSPNEGO@ uninstallscripts uninstalldat uninstallswat uninstallmodules uninstalllibtalloc uninstalllibtdb @UNINSTALL_LIBSMBCLIENT@ @UNINSTALL_PAM_MODULES@ @UNINSTALL_LIBSMBSHAREMODES@ uninstalllibnetapi
+uninstall: uninstallman uninstallservers uninstallbin @UNINSTALL_CIFSMOUNT@ uninstallscripts uninstalldat uninstallswat uninstallmodules @UNINSTALL_LIBSMBCLIENT@ @UNINSTALL_LIBMSRPC@ @UNINSTALL_PAM_MODULES@ @UNINSTALL_LIBSMBSHAREMODES@
 
 uninstallman:
 	@$(SHELL) $(srcdir)/script/uninstallman.sh $(DESTDIR)$(MANDIR) $(srcdir) C
 
 uninstallservers:
-	@$(SHELL) script/uninstallbin.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(SBINDIR) $(SBIN_PROGS)
+	@$(SHELL) script/uninstallbin.sh $(INSTALLPERMS) $(DESTDIR) $(prefix) $(SBINDIR) $(SBIN_PROGS)
 
 uninstallbin:
-	@$(SHELL) script/uninstallbin.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(BINDIR) $(BIN_PROGS)
+	@$(SHELL) script/uninstallbin.sh $(INSTALLPERMS) $(DESTDIR) $(prefix) $(BINDIR) $(BIN_PROGS)
 
 uninstallcifsmount:
-	@$(SHELL) script/uninstallbin.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(ROOTSBINDIR) @CIFSMOUNT_PROGS@
+	@$(SHELL) script/uninstallbin.sh $(INSTALLPERMS) $(DESTDIR) $(prefix) $(ROOTSBINDIR) @CIFSMOUNT_PROGS@
 
-uninstallcifsspnego:
-	@$(SHELL) script/uninstallbin.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(ROOTSBINDIR) @CIFSSPNEGO_PROGS@
-
 uninstallmodules:
-	@$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(VFSLIBDIR) $(VFS_MODULES)
-	@$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(PDBLIBDIR) $(PDB_MODULES)
-	@$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(RPCLIBDIR) $(RPC_MODULES)
-	@$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(IDMAPLIBDIR) $(IDMAP_MODULES)
-	@$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(CHARSETLIBDIR) $(CHARSET_MODULES)
-	@$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(AUTHLIBDIR) $(AUTH_MODULES)
+	@$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS) $(DESTDIR) $(prefix) $(VFSLIBDIR) $(VFS_MODULES)
+	@$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS) $(DESTDIR) $(prefix) $(PDBLIBDIR) $(PDB_MODULES)
+	@$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS) $(DESTDIR) $(prefix) $(RPCLIBDIR) $(RPC_MODULES)
+	@$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS) $(DESTDIR) $(prefix) $(IDMAPLIBDIR) $(IDMAP_MODULES)
+	@$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS) $(DESTDIR) $(prefix) $(CHARSETLIBDIR) $(CHARSET_MODULES)
+	@$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS) $(DESTDIR) $(prefix) $(AUTHLIBDIR) $(AUTH_MODULES)
 
 uninstallscripts:
-	@$(SHELL) $(srcdir)/script/uninstallscripts.sh $(INSTALLPERMS_BIN) $(DESTDIR)$(BINDIR) $(SCRIPTS)
+	@$(SHELL) $(srcdir)/script/uninstallscripts.sh $(INSTALLPERMS) $(DESTDIR)$(BINDIR) $(SCRIPTS)
 
 uninstalldat:
 	@$(SHELL) $(srcdir)/script/uninstalldat.sh $(DESTDIR) $(LIBDIR) $(srcdir)
@@ -2246,6 +1748,11 @@
 	-$(UNINSTALLLIBCMD_A) $(DESTDIR)$(LIBDIR)/libsmbclient.a
 	-rm -f $(DESTDIR)${prefix}/include/libsmbclient.h
 
+uninstalllibmsrpc:
+	-$(UNINSTALLLIBCMD_SH) $(DESTDIR)$(LIBDIR)/libmsrpc. at SHLIBEXT@
+	-$(UNINSTALLLIBCMD_A) $(DESTDIR)$(LIBDIR)/libmsrpc.a
+	-rm -f $(DESTDIR)${prefix}/include/libmsrpc.h
+
 uninstalllibsmbsharemodes:
 	-$(UNINSTALLLIBCMD_SH) $(DESTDIR)$(LIBDIR)/libsmbsharemodes. at SHLIBEXT@
 	-$(UNINSTALLLIBCMD_A) $(DESTDIR)$(LIBDIR)/libsmbsharemodes.a
@@ -2254,11 +1761,6 @@
 	-$(UNINSTALLLIBCMD_SH) $(DESTDIR)$(LIBDIR)/libaddns. at SHLIBEXT@
 	-$(UNINSTALLLIBCMD_A) $(DESTDIR)$(LIBDIR)/libaddns.a
 
-uninstalllibnetapi:
-	-$(UNINSTALLLIBCMD_SH) $(DESTDIR)$(LIBDIR)/libnetapi. at SHLIBEXT@
-	-$(UNINSTALLLIBCMD_A) $(DESTDIR)$(LIBDIR)/libnetapi.a
-	-rm -f $(DESTDIR)${prefix}/include/netapi.h
-
 uninstallpammodules:
 	@for module in $(PAM_MODULES); do \
 		echo "Removing $(DESTDIR)/$(PAMMODULESDIR)/$${module}. at SHLIBEXT@ "; \
@@ -2268,19 +1770,13 @@
 # Toplevel clean files
 TOPFILES=dynconfig.o
 
-clean: delheaders 
-	-rm -f $(PRECOMPILED_HEADER)
-	-rm -f core */*~ *~ \
-		*/*.o */*/*.o */*/*/*.o \
-		../testsuite/*/*.o \
+clean: delheaders python_clean
+	-rm -f core */*~ *~ */*.o */*/*.o */*/*/*.o \
 		*/*. at SHLIBEXT@ */*/*. at SHLIBEXT@ */*/*/*. at SHLIBEXT@ \
 		$(TOPFILES) $(BIN_PROGS) $(SBIN_PROGS) $(ROOT_SBIN_PROGS) \
-		$(MODULES) $(TORTURE_PROGS) \
-		$(LIBTALLOC) $(LIBSMBCLIENT) $(LIBADDNS) \
-		$(LIBSMBSHAREMODES) $(EVERYTHING_PROGS) $(LIBNETAPI) \
-		bin/libwbclient.so.0 bin/timelimit \
-		.headers.stamp */src/*.o proto_exists \
-		$(LIBTALLOC_SYMS) $(LIBWBCLIENT_SYMS) $(LIBTDB_SYMS) $(LIBNETAPI_SYMS)
+		$(MODULES) $(TORTURE_PROGS) $(LIBSMBCLIENT) $(LIBADDNS) \
+		$(LIBSMBSHAREMODES) $(EVERYTHING_PROGS) $(LIBMSRPC) \
+		.headers.stamp */src/*.o proto_exists
 	-rm -rf t_dir
 
 # Making this target will just make sure that the prototype files
@@ -2288,18 +1784,17 @@
 # removed by "make clean" this will always be run when you do anything
 # afterwards.
 proto_exists: include/proto.h include/build_env.h \
-	winbindd/winbindd_proto.h web/swat_proto.h \
-	libnet/libnet_proto.h \
+	nsswitch/winbindd_proto.h web/swat_proto.h \
 	client/client_proto.h utils/net_proto.h utils/ntlm_auth_proto.h smbd/build_options.c
 	@touch proto_exists
 
 delheaders:
 	@echo Removing prototype headers
 	@rm -f include/proto.h include/build_env.h \
-		winbindd/winbindd_proto.h web/swat_proto.h \
+		nsswitch/winbindd_proto.h web/swat_proto.h \
 		client/client_proto.h utils/net_proto.h \
 		smbd/build_options.c utils/ntlm_auth_proto.h \
-		utils/passwd_proto.h libnet/libnet_proto.h
+		utils/passwd_proto.h
 
 MKPROTO_SH = $(srcdir)/script/mkproto.sh
 
@@ -2314,9 +1809,9 @@
 	@$(SHELL) $(srcdir)/script/build_env.sh $(srcdir) $(builddir) $(CC) \
 	  > $(builddir)/include/build_env.h
 
-winbindd/winbindd_proto.h:
+nsswitch/winbindd_proto.h:
 	@cd $(srcdir) && $(SHELL) $(MKPROTO_SH) $(AWK) \
-	  -h _WINBINDD_PROTO_H_ $(builddir)/winbindd/winbindd_proto.h \
+	  -h _WINBINDD_PROTO_H_ $(builddir)/nsswitch/winbindd_proto.h \
 	  $(WINBINDD_OBJ1)
 
 web/swat_proto.h:
@@ -2344,11 +1839,6 @@
 	  -h _NTLM_AUTH_PROTO_H_ $(builddir)/utils/ntlm_auth_proto.h \
 	  $(NTLM_AUTH_OBJ1)
 
-libnet/libnet_proto.h:
-	@cd $(srcdir) && $(SHELL) $(MKPROTO_SH) $(AWK) \
-	  -h _LIBNET_PROTO_H_ $(builddir)/libnet/libnet_proto.h \
-	  $(LIBNET_OBJ)
-
 # "make headers" or "make proto" calls a subshell because we need to
 # make sure these commands are executed in sequence even for a
 # parallel make.
@@ -2357,13 +1847,12 @@
 	$(MAKE) smbd/build_options.c; \
 	$(MAKE) include/proto.h; \
 	$(MAKE) include/build_env.h; \
-	$(MAKE) winbindd/winbindd_proto.h; \
+	$(MAKE) nsswitch/winbindd_proto.h; \
 	$(MAKE) web/swat_proto.h; \
 	$(MAKE) client/client_proto.h; \
 	$(MAKE) utils/ntlm_auth_proto.h; \
 	$(MAKE) utils/net_proto.h; \
-	$(MAKE) utils/passwd_proto.h; \
-	$(MAKE) libnet/libnet_proto.h;
+	$(MAKE) utils/passwd_proto.h;
 
 proto: headers
 
@@ -2380,6 +1869,7 @@
 	-rm -f script/installbin.sh script/uninstallbin.sh
 
 distclean: realclean
+	-rm -f include/stamp-h
 	-rm -f smbadduser
 	-rm -f include/config.h Makefile
 	-rm -f config.status config.cache so_locations
@@ -2412,20 +1902,10 @@
 ######################################################################
 # Samba Testing Framework
 
-# Check shared libs for unresolved symbols
-test_shlibs: $(SHLIBS)
-	@echo "Testing $(SHLIBS) "
-	@export $(LIB_PATH_VAR)=./bin && \
-	for module in $(SHLIBS); do \
-		./script/tests/dlopen.sh bin/$${module}. at SHLIBEXT@ \
-			|| exit 1; \
-	done
-
 # Check for NSS module problems.
 test_nss_modules: nss_modules
 	@echo "Testing $(NSS_MODULES) "
-	@export $(LIB_PATH_VAR)=./bin && \
-	for module in $(NSS_MODULES); do \
+	@for module in $(NSS_MODULES); do \
 		./script/tests/dlopen.sh $${module} \
 			|| exit 1; \
 	done
@@ -2434,25 +1914,21 @@
 # built can actually be loaded by a minimal PAM-aware application.
 test_pam_modules: pam_modules
 	@echo "Testing $(PAM_MODULES) "
-	@export $(LIB_PATH_VAR)=./bin && \
-	for module in $(PAM_MODULES); do \
+	@for module in $(PAM_MODULES); do \
 		./script/tests/dlopen.sh -lpam -ldl bin/$${module}. at SHLIBEXT@ \
 			|| exit 1; \
 	done
 
-
 ##
 ## Targets for 'make test'
 ##
 test: all torture timelimit
 	@echo Running Test suite
-	@LIB_PATH_VAR=$(LIB_PATH_VAR) PERL="$(PERL)" $(srcdir)/script/tests/selftest.sh ${selftest_prefix} all "${smbtorture4_path}"
+	@sh $(srcdir)/script/tests/selftest.sh ${selftest_prefix}/st all "${smbtorture4_path}"
 
 valgrindtest: all torture timelimit
 	@echo Running Test suite with valgrind
-	@LIB_PATH_VAR=$(LIB_PATH_VAR) \
-	 NMBD_VALGRIND="xterm -n nmbd -e valgrind -q --db-attach=yes --num-callers=30" \
-	 WINBINDD_VALGRIND="xterm -n winbindd -e valgrind -q --db-attach=yes --num-callers=30" \
+	@NMBD_VALGRIND="xterm -n smbd -e valgrind -q --db-attach=yes --num-callers=30" \
 	 SMBD_VALGRIND="xterm -n smbd -e valgrind -q --db-attach=yes --num-callers=30" \
-	 VALGRIND="valgrind -q --num-callers=30 --log-file=${selftest_prefix}/valgrind.log" \
-	 PERL="$(PERL)" $(srcdir)/script/tests/selftest.sh ${selftest_prefix} all "${smbtorture4_path}"
+	 VALGRIND="valgrind -q --num-callers=30 --log-file=${selftest_prefix}/st/valgrind.log" \
+	 $(srcdir)/script/tests/selftest.sh ${selftest_prefix}/st all "${smbtorture4_path}"

Modified: branches/samba/upstream/source/VERSION
===================================================================
--- branches/samba/upstream/source/VERSION	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/VERSION	2008-06-15 01:55:18 UTC (rev 1953)
@@ -24,8 +24,8 @@
 #  ->  "3.0.0"                                         #
 ########################################################
 SAMBA_VERSION_MAJOR=3
-SAMBA_VERSION_MINOR=2
-SAMBA_VERSION_RELEASE=0
+SAMBA_VERSION_MINOR=0
+SAMBA_VERSION_RELEASE=30
 
 ########################################################
 # Bug fix releases use a letter for the patch revision #
@@ -56,7 +56,7 @@
 # e.g. SAMBA_VERSION_RC_RELEASE=1                      #
 #  ->  "3.0.0rc1"                                      #
 ########################################################
-SAMBA_VERSION_RC_RELEASE=2
+SAMBA_VERSION_RC_RELEASE=
 
 ########################################################
 # To mark SVN snapshots this should be set to 'yes'    #

Copied: branches/samba/upstream/source/aclocal.m4 (from rev 1928, branches/samba/upstream/source/aclocal.m4)
===================================================================
--- branches/samba/upstream/source/aclocal.m4	                        (rev 0)
+++ branches/samba/upstream/source/aclocal.m4	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,779 @@
+dnl test whether dirent has a d_off member
+AC_DEFUN(AC_DIRENT_D_OFF,
+[AC_CACHE_CHECK([for d_off in dirent], ac_cv_dirent_d_off,
+[AC_TRY_COMPILE([
+#include <unistd.h>
+#include <sys/types.h>
+#include <dirent.h>], [struct dirent d; d.d_off;],
+ac_cv_dirent_d_off=yes, ac_cv_dirent_d_off=no)])
+if test $ac_cv_dirent_d_off = yes; then
+  AC_DEFINE(HAVE_DIRENT_D_OFF,1,[Whether dirent has a d_off member])
+fi
+])
+
+dnl Mark specified module as shared
+dnl SMB_MODULE(name,static_files,shared_files,subsystem,whatif-static,whatif-shared)
+AC_DEFUN(SMB_MODULE,
+[
+	AC_MSG_CHECKING([how to build $1])
+	if test "$[MODULE_][$1]"; then
+		DEST=$[MODULE_][$1]
+	elif test "$[MODULE_]translit([$4], [A-Z], [a-z])" -a "$[MODULE_DEFAULT_][$1]"; then
+		DEST=$[MODULE_]translit([$4], [A-Z], [a-z])
+	else
+		DEST=$[MODULE_DEFAULT_][$1]
+	fi
+	
+	if test x"$DEST" = xSHARED; then
+		AC_DEFINE([$1][_init], [init_module], [Whether to build $1 as shared module])
+		$4_MODULES="$$4_MODULES $3"
+		AC_MSG_RESULT([shared])
+		[$6]
+		string_shared_modules="$string_shared_modules $1"
+	elif test x"$DEST" = xSTATIC; then
+		[init_static_modules_]translit([$4], [A-Z], [a-z])="$[init_static_modules_]translit([$4], [A-Z], [a-z])  $1_init();"
+ 		[decl_static_modules_]translit([$4], [A-Z], [a-z])="$[decl_static_modules_]translit([$4], [A-Z], [a-z]) extern NTSTATUS $1_init(void);"
+		string_static_modules="$string_static_modules $1"
+		$4_STATIC="$$4_STATIC $2"
+		AC_SUBST($4_STATIC)
+		[$5]
+		AC_MSG_RESULT([static])
+	else
+	    string_ignored_modules="$string_ignored_modules $1"
+		AC_MSG_RESULT([not])
+	fi
+])
+
+AC_DEFUN(SMB_SUBSYSTEM,
+[
+	AC_SUBST($1_STATIC)
+	AC_SUBST($1_MODULES)
+	AC_DEFINE_UNQUOTED([static_init_]translit([$1], [A-Z], [a-z]), [{$init_static_modules_]translit([$1], [A-Z], [a-z])[}], [Static init functions])
+	AC_DEFINE_UNQUOTED([static_decl_]translit([$1], [A-Z], [a-z]), [$decl_static_modules_]translit([$1], [A-Z], [a-z]), [Decl of Static init functions])
+    	ifelse([$2], , :, [rm -f $2])
+])
+
+dnl AC_LIBTESTFUNC(lib, function, [actions if found], [actions if not found])
+dnl Check for a function in a library, but don't keep adding the same library
+dnl to the LIBS variable.  Check whether the function is available in the
+dnl current LIBS before adding the library which prevents us spuriously
+dnl adding libraries for symbols that are in libc.
+dnl
+dnl On success, the default actions ensure that HAVE_FOO is defined. The lib
+dnl is always added to $LIBS if it was found to be necessary. The caller
+dnl can use SMB_REMOVE_LIB to strp this if necessary.
+AC_DEFUN([AC_LIBTESTFUNC],
+[
+  AC_CHECK_FUNCS($2,
+      [
+        # $2 was found in libc or existing $LIBS
+	m4_ifval([$3],
+	    [
+		$3
+	    ],
+	    [
+		AC_DEFINE(translit([HAVE_$2], [a-z], [A-Z]), 1,
+		    [Whether $2 is available])
+	    ])
+      ],
+      [
+        # $2 was not found, try adding lib$1
+	case " $LIBS " in
+          *\ -l$1\ *)
+	    m4_ifval([$4],
+		[
+		    $4
+		],
+		[
+		    # $2 was not found and we already had lib$1
+		    # nothing to do here by default
+		    true
+		])
+	    ;;
+          *)
+	    # $2 was not found, try adding lib$1
+	    AC_CHECK_LIB($1, $2,
+	      [
+		LIBS="-l$1 $LIBS"
+		m4_ifval([$3],
+		    [
+			$3
+		    ],
+		    [
+			AC_DEFINE(translit([HAVE_$2], [a-z], [A-Z]), 1,
+			    [Whether $2 is available])
+		    ])
+	      ],
+	      [
+		m4_ifval([$4],
+		    [
+			$4
+		    ],
+		    [
+			# $2 was not found in lib$1
+			# nothing to do here by default
+			true
+		    ])
+	      ])
+	  ;;
+        esac
+      ])
+])
+
+# AC_CHECK_LIB_EXT(LIBRARY, [EXT_LIBS], [FUNCTION],
+#              [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],
+#              [ADD-ACTION-IF-FOUND],[OTHER-LIBRARIES])
+# ------------------------------------------------------
+#
+# Use a cache variable name containing both the library and function name,
+# because the test really is for library $1 defining function $3, not
+# just for library $1.  Separate tests with the same $1 and different $3s
+# may have different results.
+#
+# Note that using directly AS_VAR_PUSHDEF([ac_Lib], [ac_cv_lib_$1_$3])
+# is asking for trouble, since AC_CHECK_LIB($lib, fun) would give
+# ac_cv_lib_$lib_fun, which is definitely not what was meant.  Hence
+# the AS_LITERAL_IF indirection.
+#
+# FIXME: This macro is extremely suspicious.  It DEFINEs unconditionally,
+# whatever the FUNCTION, in addition to not being a *S macro.  Note
+# that the cache does depend upon the function we are looking for.
+#
+# It is on purpose we used `ac_check_lib_ext_save_LIBS' and not just
+# `ac_save_LIBS': there are many macros which don't want to see `LIBS'
+# changed but still want to use AC_CHECK_LIB_EXT, so they save `LIBS'.
+# And ``ac_save_LIBS' is too tempting a name, so let's leave them some
+# freedom.
+AC_DEFUN([AC_CHECK_LIB_EXT],
+[
+AH_CHECK_LIB_EXT([$1])
+ac_check_lib_ext_save_LIBS=$LIBS
+LIBS="-l$1 $$2 $7 $LIBS"
+AS_LITERAL_IF([$1],
+      [AS_VAR_PUSHDEF([ac_Lib_ext], [ac_cv_lib_ext_$1])],
+      [AS_VAR_PUSHDEF([ac_Lib_ext], [ac_cv_lib_ext_$1''])])dnl
+
+m4_ifval([$3],
+ [
+    AH_CHECK_FUNC_EXT([$3])
+    AS_LITERAL_IF([$1],
+              [AS_VAR_PUSHDEF([ac_Lib_func], [ac_cv_lib_ext_$1_$3])],
+              [AS_VAR_PUSHDEF([ac_Lib_func], [ac_cv_lib_ext_$1''_$3])])dnl
+    AC_CACHE_CHECK([for $3 in -l$1], ac_Lib_func,
+	[AC_TRY_LINK_FUNC($3,
+                 [AS_VAR_SET(ac_Lib_func, yes);
+		  AS_VAR_SET(ac_Lib_ext, yes)],
+                 [AS_VAR_SET(ac_Lib_func, no);
+		  AS_VAR_SET(ac_Lib_ext, no)])
+	])
+    AS_IF([test AS_VAR_GET(ac_Lib_func) = yes],
+        [AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_$3))])dnl
+    AS_VAR_POPDEF([ac_Lib_func])dnl
+ ],[
+    AC_CACHE_CHECK([for -l$1], ac_Lib_ext,
+	[AC_TRY_LINK_FUNC([main],
+                 [AS_VAR_SET(ac_Lib_ext, yes)],
+                 [AS_VAR_SET(ac_Lib_ext, no)])
+	])
+ ])
+LIBS=$ac_check_lib_ext_save_LIBS
+
+AS_IF([test AS_VAR_GET(ac_Lib_ext) = yes],
+    [m4_default([$4], 
+        [AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_LIB$1))
+		case "$$2" in
+		    *-l$1*)
+			;;
+		    *)
+			$2="-l$1 $$2"
+			;;
+		esac])
+		[$6]
+	    ],
+	    [$5])dnl
+AS_VAR_POPDEF([ac_Lib_ext])dnl
+])# AC_CHECK_LIB_EXT
+
+# AH_CHECK_LIB_EXT(LIBNAME)
+# ---------------------
+m4_define([AH_CHECK_LIB_EXT],
+[AH_TEMPLATE(AS_TR_CPP(HAVE_LIB$1),
+             [Define to 1 if you have the `]$1[' library (-l]$1[).])])
+
+# AC_CHECK_FUNCS_EXT(FUNCTION, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# -----------------------------------------------------------------
+dnl check for a function in a $LIBS and $OTHER_LIBS libraries variable.
+dnl AC_CHECK_FUNC_EXT(func,OTHER_LIBS,IF-TRUE,IF-FALSE)
+AC_DEFUN([AC_CHECK_FUNC_EXT],
+[
+    AH_CHECK_FUNC_EXT($1)	
+    ac_check_func_ext_save_LIBS=$LIBS
+    LIBS="$2 $LIBS"
+    AS_VAR_PUSHDEF([ac_var], [ac_cv_func_ext_$1])dnl
+    AC_CACHE_CHECK([for $1], ac_var,
+	[AC_LINK_IFELSE([AC_LANG_FUNC_LINK_TRY([$1])],
+                [AS_VAR_SET(ac_var, yes)],
+                [AS_VAR_SET(ac_var, no)])])
+    LIBS=$ac_check_func_ext_save_LIBS
+    AS_IF([test AS_VAR_GET(ac_var) = yes], 
+	    [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$1])) $3], 
+	    [$4])dnl
+AS_VAR_POPDEF([ac_var])dnl
+])# AC_CHECK_FUNC
+
+# AH_CHECK_FUNC_EXT(FUNCNAME)
+# ---------------------
+m4_define([AH_CHECK_FUNC_EXT],
+[AH_TEMPLATE(AS_TR_CPP(HAVE_$1),
+             [Define to 1 if you have the `]$1[' function.])])
+
+dnl Define an AC_DEFINE with ifndef guard.
+dnl AC_N_DEFINE(VARIABLE [, VALUE])
+define(AC_N_DEFINE,
+[cat >> confdefs.h <<\EOF
+[#ifndef] $1
+[#define] $1 ifelse($#, 2, [$2], $#, 3, [$2], 1)
+[#endif]
+EOF
+])
+
+dnl Add an #include
+dnl AC_ADD_INCLUDE(VARIABLE)
+define(AC_ADD_INCLUDE,
+[cat >> confdefs.h <<\EOF
+[#include] $1
+EOF
+])
+
+dnl Copied from libtool.m4
+AC_DEFUN(AC_PROG_LD_GNU,
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
+  ac_cv_prog_gnu_ld=yes
+else
+  ac_cv_prog_gnu_ld=no
+fi])
+])
+
+dnl Removes -I/usr/include/? from given variable
+AC_DEFUN(CFLAGS_REMOVE_USR_INCLUDE,[
+  ac_new_flags=""
+  for i in [$]$1; do
+    case [$]i in
+    -I/usr/include|-I/usr/include/) ;;
+    *) ac_new_flags="[$]ac_new_flags [$]i" ;;
+    esac
+  done
+  $1=[$]ac_new_flags
+])
+
+dnl Removes '-L/usr/lib[/]', '-Wl,-rpath,/usr/lib[/]'
+dnl and '-Wl,-rpath -Wl,/usr/lib[/]' from given variable
+AC_DEFUN(LIB_REMOVE_USR_LIB,[
+  ac_new_flags=""
+  l=""
+  for i in [$]$1; do
+    case [$]l[$]i in
+    -L/usr/lib) ;;
+    -L/usr/lib/) ;;
+    -Wl,-rpath,/usr/lib) ;;
+    -Wl,-rpath,/usr/lib/) ;;
+    -Wl,-rpath) l=[$]i;;
+    -Wl,-rpath-Wl,/usr/lib) l="";;
+    -Wl,-rpath-Wl,/usr/lib/) l="";;
+    *)
+    	s=" "
+        if test x"[$]ac_new_flags" = x""; then
+            s="";
+	fi
+        if test x"[$]l" = x""; then
+            ac_new_flags="[$]ac_new_flags[$]s[$]i";
+        else
+            ac_new_flags="[$]ac_new_flags[$]s[$]l [$]i";
+        fi
+        l=""
+        ;;
+    esac
+  done
+  $1=[$]ac_new_flags
+])
+
+dnl From Bruno Haible.
+
+AC_DEFUN(jm_ICONV,
+[
+  dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+  dnl those with the standalone portable libiconv installed).
+  AC_MSG_CHECKING(for iconv in $1)
+    jm_cv_func_iconv="no"
+    jm_cv_lib_iconv=""
+    jm_cv_giconv=no
+    jm_save_LIBS="$LIBS"
+
+    dnl Check for include in funny place but no lib needed
+    if test "$jm_cv_func_iconv" != yes; then 
+      AC_TRY_LINK([#include <stdlib.h>
+#include <giconv.h>],
+        [iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);],
+         jm_cv_func_iconv=yes
+         jm_cv_include="giconv.h"
+         jm_cv_giconv="yes"
+         jm_cv_lib_iconv="")
+
+      dnl Standard iconv.h include, lib in glibc or libc ...
+      if test "$jm_cv_func_iconv" != yes; then
+        AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+          [iconv_t cd = iconv_open("","");
+           iconv(cd,NULL,NULL,NULL,NULL);
+           iconv_close(cd);],
+           jm_cv_include="iconv.h"
+           jm_cv_func_iconv=yes
+           jm_cv_lib_iconv="")
+
+          if test "$jm_cv_lib_iconv" != yes; then
+            jm_save_LIBS="$LIBS"
+            LIBS="$LIBS -lgiconv"
+            AC_TRY_LINK([#include <stdlib.h>
+#include <giconv.h>],
+              [iconv_t cd = iconv_open("","");
+               iconv(cd,NULL,NULL,NULL,NULL);
+               iconv_close(cd);],
+              jm_cv_lib_iconv=yes
+              jm_cv_func_iconv=yes
+              jm_cv_include="giconv.h"
+              jm_cv_giconv=yes
+              jm_cv_lib_iconv="giconv")
+
+           LIBS="$jm_save_LIBS"
+
+        if test "$jm_cv_func_iconv" != yes; then
+          jm_save_LIBS="$LIBS"
+          LIBS="$LIBS -liconv"
+          AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+            [iconv_t cd = iconv_open("","");
+             iconv(cd,NULL,NULL,NULL,NULL);
+             iconv_close(cd);],
+            jm_cv_include="iconv.h"
+            jm_cv_func_iconv=yes
+            jm_cv_lib_iconv="iconv")
+          LIBS="$jm_save_LIBS"
+        fi
+      fi
+    fi
+  fi
+  if test "$jm_cv_func_iconv" = yes; then
+    if test "$jm_cv_giconv" = yes; then
+      AC_DEFINE(HAVE_GICONV, 1, [What header to include for iconv() function: giconv.h])
+      AC_MSG_RESULT(yes)
+      ICONV_FOUND=yes
+    else
+      if test "$jm_cv_biconv" = yes; then
+        AC_DEFINE(HAVE_BICONV, 1, [What header to include for iconv() function: biconv.h])
+        AC_MSG_RESULT(yes)
+        ICONV_FOUND=yes
+      else 
+        AC_DEFINE(HAVE_ICONV, 1, [What header to include for iconv() function: iconv.h])
+        AC_MSG_RESULT(yes)
+        ICONV_FOUND=yes
+      fi
+    fi
+  else
+    AC_MSG_RESULT(no)
+  fi
+])
+
+AC_DEFUN(rjs_CHARSET,[
+  dnl Find out if we can convert from $1 to UCS2-LE
+  AC_MSG_CHECKING([can we convert from $1 to UCS2-LE?])
+  AC_TRY_RUN([
+#include <$jm_cv_include>
+main(){
+    iconv_t cd = iconv_open("$1", "UCS-2LE");
+    if (cd == 0 || cd == (iconv_t)-1) {
+	return -1;
+    }
+    return 0;
+}
+  ],ICONV_CHARSET=$1,ICONV_CHARSET=no,ICONV_CHARSET=cross)
+  AC_MSG_RESULT($ICONV_CHARSET)
+])
+
+dnl CFLAGS_ADD_DIR(CFLAGS, $INCDIR)
+dnl This function doesn't add -I/usr/include into CFLAGS
+AC_DEFUN(CFLAGS_ADD_DIR,[
+if test "$2" != "/usr/include" ; then
+    $1="$$1 -I$2"
+fi
+])
+
+dnl LIB_ADD_DIR(LDFLAGS, $LIBDIR)
+dnl This function doesn't add -L/usr/lib into LDFLAGS
+AC_DEFUN(LIB_ADD_DIR,[
+if test "$2" != "/usr/lib" ; then
+    $1="$$1 -L$2"
+fi
+])
+
+dnl AC_ENABLE_SHARED - implement the --enable-shared flag
+dnl Usage: AC_ENABLE_SHARED[(DEFAULT)]
+dnl   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
+dnl   `yes'.
+AC_DEFUN([AC_ENABLE_SHARED],
+[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE(shared,
+changequote(<<, >>)dnl
+<<  --enable-shared[=PKGS]    build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
+changequote([, ])dnl
+[p=${PACKAGE-default}
+case $enableval in
+yes) enable_shared=yes ;;
+no) enable_shared=no ;;
+*)
+  enable_shared=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_shared=yes
+    fi
+
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac],
+enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
+])
+
+dnl AC_ENABLE_STATIC - implement the --enable-static flag
+dnl Usage: AC_ENABLE_STATIC[(DEFAULT)]
+dnl   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
+dnl   `yes'.
+AC_DEFUN([AC_ENABLE_STATIC],
+[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE(static,
+changequote(<<, >>)dnl
+<<  --enable-static[=PKGS]    build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
+changequote([, ])dnl
+[p=${PACKAGE-default}
+case $enableval in
+yes) enable_static=yes ;;
+no) enable_static=no ;;
+*)
+  enable_static=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_static=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac],
+enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
+])
+
+dnl AC_DISABLE_STATIC - set the default static flag to --disable-static
+AC_DEFUN([AC_DISABLE_STATIC],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_STATIC(no)])
+
+dnl AC_TRY_RUN_STRICT(PROGRAM,CFLAGS,CPPFLAGS,LDFLAGS,
+dnl		[ACTION-IF-TRUE],[ACTION-IF-FALSE],
+dnl		[ACTION-IF-CROSS-COMPILING = RUNTIME-ERROR])
+AC_DEFUN( [AC_TRY_RUN_STRICT],
+[
+	old_CFLAGS="$CFLAGS";
+	CFLAGS="$2";
+	export CFLAGS;
+	old_CPPFLAGS="$CPPFLAGS";
+	CPPFLAGS="$3";
+	export CPPFLAGS;
+	old_LDFLAGS="$LDFLAGS";
+	LDFLAGS="$4";
+	export LDFLAGS;
+	AC_TRY_RUN([$1],[$5],[$6],[$7])
+	CFLAGS="$old_CFLAGS";
+	old_CFLAGS="";
+	export CFLAGS;
+	CPPFLAGS="$old_CPPFLAGS";
+	old_CPPFLAGS="";
+	export CPPFLAGS;
+	LDFLAGS="$old_LDFLAGS";
+	old_LDFLAGS="";
+	export LDFLAGS;
+])
+
+dnl SMB_CHECK_SYSCONF(varname)
+dnl Tests whether the sysconf(3) variable "varname" is available.
+AC_DEFUN([SMB_CHECK_SYSCONF],
+[
+    AC_CACHE_CHECK([for sysconf($1)],
+	samba_cv_SYSCONF$1,
+	[
+	    AC_TRY_LINK([#include <unistd.h>],
+		[ return sysconf($1) == -1 ? 1 : 0; ],
+		[ samba_cv_SYSCONF$1=yes ],
+		[ samba_cv_SYSCONF$1=no ])
+	])
+
+    if test x"$samba_cv_SYSCONF$1" = x"yes" ; then
+	AC_DEFINE(SYSCONF$1, 1, [Whether sysconf($1) is available])
+    fi
+])
+
+dnl SMB_IS_LIBPTHREAD_LINKED([actions if true], [actions if false])
+dnl Test whether the current LIBS results in libpthread being present.
+dnl Execute the corresponding user action list.
+AC_DEFUN([SMB_IS_LIBPTHREAD_LINKED],
+[
+    AC_MSG_CHECKING(if libpthread is linked)
+    AC_TRY_LINK([],
+	[return pthread_create(0, 0, 0, 0);],
+	[
+	    AC_MSG_RESULT(yes)
+	    $1
+	],
+	[
+	    AC_MSG_RESULT(no)
+	    $2
+	])
+])
+
+dnl SMB_REMOVE_LIB(lib)
+dnl Remove the given library from $LIBS
+AC_DEFUN([SMB_REMOVE_LIB],
+[
+    LIBS=`echo $LIBS | sed '-es/-l$1//g'`
+])
+
+dnl SMB_CHECK_DMAPI([actions if true], [actions if false])
+dnl Check whether DMAPI is available and is a version that we know
+dnl how to deal with. The default truth action is to set samba_dmapi_libs
+dnl to the list of necessary libraries, and to define USE_DMAPI.
+AC_DEFUN([SMB_CHECK_DMAPI],
+[
+    samba_dmapi_libs=""
+
+    if test x"$samba_dmapi_libs" = x"" ; then
+	AC_CHECK_LIB(dm, dm_get_eventlist,
+		[ samba_dmapi_libs="-ldm"], [])
+    fi
+
+    if test x"$samba_dmapi_libs" = x"" ; then
+	AC_CHECK_LIB(jfsdm, dm_get_eventlist,
+		[samba_dmapi_libs="-ljfsdm"], [])
+    fi
+
+    if test x"$samba_dmapi_libs" = x"" ; then
+	AC_CHECK_LIB(xdsm, dm_get_eventlist,
+		[samba_dmapi_libs="-lxdsm"], [])
+    fi
+
+    if test x"$samba_dmapi_libs" = x"" ; then
+        AC_CHECK_LIB(dmapi, dm_get_eventlist,
+                [samba_dmapi_libs="-ldmapi"], [])
+    fi
+
+
+    # Only bother to test ehaders if we have a candidate DMAPI library
+    if test x"$samba_dmapi_libs" != x"" ; then
+	AC_CHECK_HEADERS(sys/dmi.h xfs/dmapi.h sys/jfsdmapi.h sys/dmapi.h dmapi.h)
+    fi
+
+    if test x"$samba_dmapi_libs" != x"" ; then
+	samba_dmapi_save_LIBS="$LIBS"
+	LIBS="$LIBS $samba_dmapi_libs"
+	AC_TRY_LINK(
+		[
+#include <time.h>      /* needed by Tru64 */
+#include <sys/types.h> /* needed by AIX */
+#ifdef HAVE_XFS_DMAPI_H
+#include <xfs/dmapi.h>
+#elif defined(HAVE_SYS_DMI_H)
+#include <sys/dmi.h>
+#elif defined(HAVE_SYS_JFSDMAPI_H)
+#include <sys/jfsdmapi.h>
+#elif defined(HAVE_SYS_DMAPI_H)
+#include <sys/dmapi.h>
+#elif defined(HAVE_DMAPI_H)
+#include <dmapi.h>
+#endif
+		],
+		[
+/* This link test is designed to fail on IRI 6.4, but should
+ * succeed on Linux, IRIX 6.5 and AIX.
+ */
+	char * version;
+	dm_eventset_t events;
+	/* This doesn't take an argument on IRIX 6.4. */
+	dm_init_service(&version);
+	/* IRIX 6.4 expects events to be a pointer. */
+	DMEV_ISSET(DM_EVENT_READ, events);
+		],
+		[
+		    true # DMAPI link test succeeded
+		],
+		[
+		    # DMAPI link failure
+		    samba_dmapi_libs=
+		])
+	LIBS="$samba_dmapi_save_LIBS"
+    fi
+
+    if test x"$samba_dmapi_libs" = x"" ; then
+	# DMAPI detection failure actions begin
+	ifelse($2, [],
+	    [
+		AC_ERROR(Failed to detect a supported DMAPI implementation)
+	    ],
+	    [
+		$2
+	    ])
+	# DMAPI detection failure actions end
+    else
+	# DMAPI detection success actions start
+	ifelse($1, [],
+	    [
+		AC_DEFINE(USE_DMAPI, 1,
+		    [Whether we should build DMAPI integration components])
+		AC_MSG_NOTICE(Found DMAPI support in $samba_dmapi_libs)
+	    ],
+	    [
+		$1
+	    ])
+	# DMAPI detection success actions end
+    fi
+
+])
+
+dnl SMB_CHECK_CLOCK_ID(clockid)
+dnl Test whether the specified clock_gettime clock ID is available. If it
+dnl is, we define HAVE_clockid
+AC_DEFUN([SMB_CHECK_CLOCK_ID],
+[
+    AC_MSG_CHECKING(for $1)
+    AC_TRY_LINK([
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+#  include <sys/time.h>
+# else
+#  include <time.h>
+# endif
+#endif
+    ],
+    [
+clockid_t clk = $1;
+    ],
+    [
+	AC_MSG_RESULT(yes)
+	AC_DEFINE(HAVE_$1, 1,
+	    [Whether the clock_gettime clock ID $1 is available])
+    ],
+    [
+	AC_MSG_RESULT(no)
+    ])
+])
+
+dnl SMB_IF_RTSIGNAL_BUG([actions if true],
+dnl			[actions if false],
+dnl			[actions if cross compiling])
+dnl Test whether we can call sigaction with RT_SIGNAL_NOTIFY and
+dnl RT_SIGNAL_LEASE (also RT_SIGNAL_AIO for good measure, though
+dnl I don't believe that triggers any bug.
+dnl
+dnl See the samba-technical thread titled "Failed to setup
+dnl RT_SIGNAL_NOTIFY handler" for details on the bug in question.
+AC_DEFUN([SMB_IF_RTSIGNAL_BUG],
+[
+    rt_signal_notify_works=yes
+    rt_signal_lease_works=yes
+    rt_signal_aio_works=yes
+
+    AC_MSG_CHECKING(if sigaction works with realtime signals)
+    AC_TRY_RUN(
+	[
+#include <sys/types.h>
+#include <fcntl.h>
+#include <signal.h>
+
+/* from smbd/notify_kernel.c */
+#ifndef RT_SIGNAL_NOTIFY
+#define RT_SIGNAL_NOTIFY (SIGRTMIN+2)
+#endif
+
+/* from smbd/aio.c */
+#ifndef RT_SIGNAL_AIO
+#define RT_SIGNAL_AIO (SIGRTMIN+3)
+#endif
+
+/* from smbd/oplock_linux.c */
+#ifndef RT_SIGNAL_LEASE
+#define RT_SIGNAL_LEASE (SIGRTMIN+1)
+#endif
+
+static void signal_handler(int sig, siginfo_t *info, void *unused)
+{
+    int do_nothing = 0;
+}
+
+int main(void)
+{
+    int result = 0;
+    struct sigaction act = {0};
+
+    act.sa_sigaction = signal_handler;
+    act.sa_flags = SA_SIGINFO;
+    sigemptyset( &act.sa_mask );
+
+    if (sigaction(RT_SIGNAL_LEASE, &act, 0) != 0) {
+	    /* Failed to setup RT_SIGNAL_LEASE handler */
+	    result += 1;
+    }
+
+    if (sigaction(RT_SIGNAL_NOTIFY, &act, 0) != 0) {
+	    /* Failed to setup RT_SIGNAL_NOTIFY handler */
+	    result += 10;
+    }
+
+    if (sigaction(RT_SIGNAL_AIO, &act, 0) != 0) {
+	    /* Failed to setup RT_SIGNAL_AIO handler */
+	    result += 100;
+    }
+
+    /* zero on success */
+    return result;
+}
+	],
+	[
+	    AC_MSG_RESULT(yes)
+	    $2
+	],
+	[
+	    AC_MSG_RESULT(no)
+	    case "$ac_status" in
+		1|11|101|111)  rt_signal_lease_ok=no ;;
+	    esac
+	    case "$ac_status" in
+		10|11|110|111)  rt_signal_notify_ok=no ;;
+	    esac
+	    case "$ac_status" in
+		100|110|101|111)  rt_signal_aio_ok=no ;;
+	    esac
+	    $2
+	],
+	[
+	    AC_MSG_RESULT(cross)
+	    $3
+	])
+])
+
+m4_include(lib/replace/libreplace.m4)

Modified: branches/samba/upstream/source/auth/auth.c
===================================================================
--- branches/samba/upstream/source/auth/auth.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/auth/auth.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -78,7 +79,7 @@
 
 static const uint8 *get_ntlm_challenge(struct auth_context *auth_context) 
 {
-	DATA_BLOB challenge = data_blob_null;
+	DATA_BLOB challenge = data_blob(NULL, 0);
 	const char *challenge_set_by = NULL;
 	auth_methods *auth_method;
 	TALLOC_CTX *mem_ctx;
@@ -135,7 +136,7 @@
 	
 	DEBUG(5, ("auth_context challenge created by %s\n", challenge_set_by));
 	DEBUG(5, ("challenge is: \n"));
-	dump_data(5, auth_context->challenge.data, auth_context->challenge.length);
+	dump_data(5, (const char *)auth_context->challenge.data, auth_context->challenge.length);
 	
 	SMB_ASSERT(auth_context->challenge.length == 8);
 
@@ -156,7 +157,7 @@
  *         False otherwise.
 **/
 
-static bool check_domain_match(const char *user, const char *domain) 
+static BOOL check_domain_match(const char *user, const char *domain) 
 {
 	/*
 	 * If we aren't serving to trusted domains, we must make sure that
@@ -232,15 +233,15 @@
 					auth_context->challenge_set_by));
 
 	DEBUG(10, ("challenge is: \n"));
-	dump_data(5, auth_context->challenge.data, auth_context->challenge.length);
+	dump_data(5, (const char *)auth_context->challenge.data, auth_context->challenge.length);
 
 #ifdef DEBUG_PASSWORD
 	DEBUG(100, ("user_info has passwords of length %d and %d\n", 
 		    (int)user_info->lm_resp.length, (int)user_info->nt_resp.length));
 	DEBUG(100, ("lm:\n"));
-	dump_data(100, user_info->lm_resp.data, user_info->lm_resp.length);
+	dump_data(100, (const char *)user_info->lm_resp.data, user_info->lm_resp.length);
 	DEBUG(100, ("nt:\n"));
-	dump_data(100, user_info->nt_resp.data, user_info->nt_resp.length);
+	dump_data(100, (const char *)user_info->nt_resp.data, user_info->nt_resp.length);
 #endif
 
 	/* This needs to be sorted:  If it doesn't match, what should we do? */
@@ -332,7 +333,10 @@
 	if (*auth_context) {
 		/* Free private data of context's authentication methods */
 		for (auth_method = (*auth_context)->auth_method_list; auth_method; auth_method = auth_method->next) {
-			TALLOC_FREE(auth_method->private_data);
+			if (auth_method->free_private_data) {
+				auth_method->free_private_data (&auth_method->private_data);
+				auth_method->private_data = NULL;
+			}
 		}
 
 		talloc_destroy((*auth_context)->mem_ctx);
@@ -366,16 +370,16 @@
 	return NT_STATUS_OK;
 }
 
-bool load_auth_module(struct auth_context *auth_context, 
+BOOL load_auth_module(struct auth_context *auth_context, 
 		      const char *module, auth_methods **ret) 
 {
-	static bool initialised_static_modules = False;
+	static BOOL initialised_static_modules = False;
 
 	struct auth_init_function_entry *entry;
 	char *module_name = smb_xstrdup(module);
 	char *module_params = NULL;
 	char *p;
-	bool good = False;
+	BOOL good = False;
 
 	/* Initialise static modules if not done so yet */
 	if(!initialised_static_modules) {
@@ -458,9 +462,7 @@
 	char **auth_method_list = NULL; 
 	NTSTATUS nt_status;
 
-	if (lp_auth_methods()
-	    && !str_list_copy(talloc_tos(), &auth_method_list,
-			      lp_auth_methods())) {
+	if (lp_auth_methods() && !str_list_copy(&auth_method_list, lp_auth_methods())) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
@@ -469,52 +471,38 @@
 		{
 		case SEC_DOMAIN:
 			DEBUG(5,("Making default auth method list for security=domain\n"));
-			auth_method_list = str_list_make(
-				talloc_tos(), "guest sam winbind:ntdomain",
-				NULL);
+			auth_method_list = str_list_make("guest sam winbind:ntdomain", NULL);
 			break;
 		case SEC_SERVER:
 			DEBUG(5,("Making default auth method list for security=server\n"));
-			auth_method_list = str_list_make(
-				talloc_tos(), "guest sam smbserver",
-				NULL);
+			auth_method_list = str_list_make("guest sam smbserver", NULL);
 			break;
 		case SEC_USER:
 			if (lp_encrypted_passwords()) {	
 				if ((lp_server_role() == ROLE_DOMAIN_PDC) || (lp_server_role() == ROLE_DOMAIN_BDC)) {
 					DEBUG(5,("Making default auth method list for DC, security=user, encrypt passwords = yes\n"));
-					auth_method_list = str_list_make(
-						talloc_tos(),
-						"guest sam winbind:trustdomain",
-						NULL);
+					auth_method_list = str_list_make("guest sam winbind:trustdomain", NULL);
 				} else {
 					DEBUG(5,("Making default auth method list for standalone security=user, encrypt passwords = yes\n"));
-					auth_method_list = str_list_make(
-						talloc_tos(), "guest sam",
-						NULL);
+					auth_method_list = str_list_make("guest sam", NULL);
 				}
 			} else {
 				DEBUG(5,("Making default auth method list for security=user, encrypt passwords = no\n"));
-				auth_method_list = str_list_make(
-					talloc_tos(), "guest unix", NULL);
+				auth_method_list = str_list_make("guest unix", NULL);
 			}
 			break;
 		case SEC_SHARE:
 			if (lp_encrypted_passwords()) {
 				DEBUG(5,("Making default auth method list for security=share, encrypt passwords = yes\n"));
-				auth_method_list = str_list_make(
-					talloc_tos(), "guest sam", NULL);
+				auth_method_list = str_list_make("guest sam", NULL);
 			} else {
 				DEBUG(5,("Making default auth method list for security=share, encrypt passwords = no\n"));
-				auth_method_list = str_list_make(
-					talloc_tos(), "guest unix", NULL);
+				auth_method_list = str_list_make("guest unix", NULL);
 			}
 			break;
 		case SEC_ADS:
 			DEBUG(5,("Making default auth method list for security=ADS\n"));
-			auth_method_list = str_list_make(
-				talloc_tos(), "guest sam winbind:ntdomain",
-				NULL);
+			auth_method_list = str_list_make("guest sam winbind:ntdomain", NULL);
 			break;
 		default:
 			DEBUG(5,("Unknown auth method!\n"));
@@ -524,10 +512,12 @@
 		DEBUG(5,("Using specified auth order\n"));
 	}
 	
-	nt_status = make_auth_context_text_list(auth_context,
-						auth_method_list);
-
-	TALLOC_FREE(auth_method_list);
+	if (!NT_STATUS_IS_OK(nt_status = make_auth_context_text_list(auth_context, auth_method_list))) {
+		str_list_free(&auth_method_list);
+		return nt_status;
+	}
+	
+	str_list_free(&auth_method_list);
 	return nt_status;
 }
 

Modified: branches/samba/upstream/source/auth/auth_builtin.c
===================================================================
--- branches/samba/upstream/source/auth/auth_builtin.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/auth/auth_builtin.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/source/auth/auth_compat.c
===================================================================
--- branches/samba/upstream/source/auth/auth_compat.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/auth/auth_compat.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,13 +14,14 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
 extern struct auth_context *negprot_global_auth_context;
-extern bool global_encrypted_passwords_negotiated;
+extern BOOL global_encrypted_passwords_negotiated;
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_AUTH
@@ -66,7 +67,7 @@
 			       DATA_BLOB lm_pwd,
 			       DATA_BLOB nt_pwd,
 			       DATA_BLOB plaintext_password,
-			       bool encrypted)
+			       BOOL encrypted)
 
 {
 	NTSTATUS nt_status;
@@ -92,11 +93,11 @@
 return True if the password is correct, False otherwise
 ****************************************************************************/
 
-bool password_ok(const char *smb_name, DATA_BLOB password_blob)
+BOOL password_ok(char *smb_name, DATA_BLOB password_blob)
 {
 
-	DATA_BLOB null_password = data_blob_null;
-	bool encrypted = (global_encrypted_passwords_negotiated && (password_blob.length == 24 || password_blob.length > 46));
+	DATA_BLOB null_password = data_blob(NULL, 0);
+	BOOL encrypted = (global_encrypted_passwords_negotiated && (password_blob.length == 24 || password_blob.length > 46));
 	
 	if (encrypted) {
 		/* 

Modified: branches/samba/upstream/source/auth/auth_domain.c
===================================================================
--- branches/samba/upstream/source/auth/auth_domain.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/auth/auth_domain.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -23,8 +24,7 @@
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_AUTH
 
-extern bool global_machine_password_needs_changing;
-static struct named_mutex *mutex;
+extern BOOL global_machine_password_needs_changing;
 
 /**
  * Connect to a remote server for (inter)domain security authenticaion.
@@ -43,9 +43,9 @@
 static NTSTATUS connect_to_domain_password_server(struct cli_state **cli,
 						const char *domain,
 						const char *dc_name,
-						struct sockaddr_storage *dc_ss, 
+						struct in_addr dc_ip, 
 						struct rpc_pipe_client **pipe_ret,
-						bool *retry)
+						BOOL *retry)
 {
         NTSTATUS result;
 	struct rpc_pipe_client *netlogon_pipe = NULL;
@@ -68,14 +68,13 @@
 	 * ACCESS_DENIED errors if 2 auths are done from the same machine. JRA.
 	 */
 
-	mutex = grab_named_mutex(NULL, dc_name, 10);
-	if (mutex == NULL) {
+	if (!grab_server_mutex(dc_name)) {
 		return NT_STATUS_NO_LOGON_SERVERS;
 	}
 	
 	/* Attempt connection */
 	*retry = True;
-	result = cli_full_connection(cli, global_myname(), dc_name, dc_ss, 0, 
+	result = cli_full_connection(cli, global_myname(), dc_name, &dc_ip, 0, 
 		"IPC$", "IPC", "", "", "", 0, Undefined, retry);
 
 	if (!NT_STATUS_IS_OK(result)) {
@@ -89,7 +88,7 @@
 			*cli = NULL;
 		}
 
-		TALLOC_FREE(mutex);
+		release_server_mutex();
 		return result;
 	}
 
@@ -120,7 +119,7 @@
 machine %s. Error was : %s.\n", dc_name, nt_errstr(result)));
 		cli_shutdown(*cli);
 		*cli = NULL;
-		TALLOC_FREE(mutex);
+		release_server_mutex();
 		return result;
 	}
 
@@ -139,7 +138,7 @@
 				domain));
 			cli_shutdown(*cli);
 			*cli = NULL;
-			TALLOC_FREE(mutex);
+			release_server_mutex();
 			return NT_STATUS_CANT_ACCESS_DOMAIN_INFO;
 		}
 
@@ -155,7 +154,7 @@
 		if (!NT_STATUS_IS_OK(result)) {
 			cli_shutdown(*cli);
 			*cli = NULL;
-			TALLOC_FREE(mutex);
+			release_server_mutex();
 			return result;
 		}
 	}
@@ -165,7 +164,7 @@
 machine %s. Error was : %s.\n", dc_name, cli_errstr(*cli)));
 		cli_shutdown(*cli);
 		*cli = NULL;
-		TALLOC_FREE(mutex);
+		release_server_mutex();
 		return NT_STATUS_NO_LOGON_SERVERS;
 	}
 
@@ -188,15 +187,15 @@
 					uchar chal[8],
 					auth_serversupplied_info **server_info, 
 					const char *dc_name,
-					struct sockaddr_storage *dc_ss)
+					struct in_addr dc_ip)
 
 {
-	struct netr_SamInfo3 *info3 = NULL;
+	NET_USER_INFO_3 info3;
 	struct cli_state *cli = NULL;
 	struct rpc_pipe_client *netlogon_pipe = NULL;
 	NTSTATUS nt_status = NT_STATUS_NO_LOGON_SERVERS;
 	int i;
-	bool retry = True;
+	BOOL retry = True;
 
 	/*
 	 * At this point, smb_apasswd points to the lanman response to
@@ -212,7 +211,7 @@
 		nt_status = connect_to_domain_password_server(&cli,
 							domain,
 							dc_name,
-							dc_ss,
+							dc_ip,
 							&netlogon_pipe,
 							&retry);
 	}
@@ -229,6 +228,8 @@
 
 	saf_store( domain, cli->desthost );
 
+	ZERO_STRUCT(info3);
+
         /*
          * If this call succeeds, we now have lots of info about the user
          * in the info3 structure.  
@@ -249,7 +250,7 @@
 	/* Let go as soon as possible so we avoid any potential deadlocks
 	   with winbind lookup up users or groups. */
 	   
-	TALLOC_FREE(mutex);
+	release_server_mutex();
 
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		DEBUG(0,("domain_client_validate: unable to validate password "
@@ -267,12 +268,10 @@
 						user_info->smb_name,
 						domain,
 						server_info,
-						info3);
+						&info3);
 
 		if (NT_STATUS_IS_OK(nt_status)) {
-			if (user_info->was_mapped) {
-				(*server_info)->was_mapped = user_info->was_mapped;
-			}
+			(*server_info)->was_mapped |= user_info->was_mapped;
 
 			if ( ! (*server_info)->guest) {
 				/* if a real user check pam account restrictions */
@@ -281,14 +280,12 @@
 				if (  !NT_STATUS_IS_OK(nt_status)) {
 					DEBUG(1, ("PAM account restriction prevents user login\n"));
 					cli_shutdown(cli);
-					TALLOC_FREE(info3);
 					return nt_status;
 				}
 			}
 		}
 
-		netsamlogon_cache_store(user_info->smb_name, info3);
-		TALLOC_FREE(info3);
+		netsamlogon_cache_store( user_info->smb_name, &info3 );
 	}
 
 	/* Note - once the cli stream is shutdown the mem_ctx used
@@ -312,7 +309,7 @@
 	NTSTATUS nt_status = NT_STATUS_LOGON_FAILURE;
 	const char *domain = lp_workgroup();
 	fstring dc_name;
-	struct sockaddr_storage dc_ss;
+	struct in_addr dc_ip;
 
 	if ( lp_server_role() != ROLE_DOMAIN_MEMBER ) {
 		DEBUG(0,("check_ntdomain_security: Configuration error!  Cannot use "
@@ -338,7 +335,7 @@
 
 	/* we need our DC to send the net_sam_logon() request to */
 
-	if ( !get_dc_name(domain, NULL, dc_name, &dc_ss) ) {
+	if ( !get_dc_name(domain, NULL, dc_name, &dc_ip) ) {
 		DEBUG(5,("check_ntdomain_security: unable to locate a DC for domain %s\n",
 			user_info->domain));
 		return NT_STATUS_NO_LOGON_SERVERS;
@@ -350,7 +347,7 @@
 					(uchar *)auth_context->challenge.data,
 					server_info,
 					dc_name,
-					&dc_ss);
+					dc_ip);
 		
 	return nt_status;
 }
@@ -384,7 +381,7 @@
 	time_t last_change_time;
 	DOM_SID sid;
 	fstring dc_name;
-	struct sockaddr_storage dc_ss;
+	struct in_addr dc_ip;
 
 	if (!user_info || !server_info || !auth_context) {
 		DEBUG(1,("check_trustdomain_security: Critical variables not present.  Failing.\n"));
@@ -414,8 +411,8 @@
 	 * No need to become_root() as secrets_init() is done at startup.
 	 */
 
-	if (!pdb_get_trusteddom_pw(user_info->domain, &trust_password,
-				   &sid, &last_change_time)) {
+	if (!secrets_fetch_trusted_domain_password(user_info->domain, &trust_password,
+				&sid, &last_change_time)) {
 		DEBUG(0, ("check_trustdomain_security: could not fetch trust "
 			  "account password for domain %s\n",
 			  user_info->domain));
@@ -440,7 +437,7 @@
 	/* use get_dc_name() for consistency even through we know that it will be 
 	   a netbios name */
 	   
-	if ( !get_dc_name(user_info->domain, NULL, dc_name, &dc_ss) ) {
+	if ( !get_dc_name(user_info->domain, NULL, dc_name, &dc_ip) ) {
 		DEBUG(5,("check_trustdomain_security: unable to locate a DC for domain %s\n",
 			user_info->domain));
 		return NT_STATUS_NO_LOGON_SERVERS;
@@ -452,7 +449,7 @@
 					(uchar *)auth_context->challenge.data,
 					server_info,
 					dc_name,
-					&dc_ss);
+					dc_ip);
 
 	return nt_status;
 }

Modified: branches/samba/upstream/source/auth/auth_ntlmssp.c
===================================================================
--- branches/samba/upstream/source/auth/auth_ntlmssp.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/auth/auth_ntlmssp.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -39,7 +40,7 @@
  *
  * @return If the effective challenge used by the auth subsystem may be modified
  */
-static bool auth_ntlmssp_may_set_challenge(const struct ntlmssp_state *ntlmssp_state)
+static BOOL auth_ntlmssp_may_set_challenge(const struct ntlmssp_state *ntlmssp_state)
 {
 	AUTH_NTLMSSP_STATE *auth_ntlmssp_state =
 		(AUTH_NTLMSSP_STATE *)ntlmssp_state->auth_context;
@@ -67,7 +68,7 @@
 
 	DEBUG(5, ("auth_context challenge set by %s\n", auth_context->challenge_set_by));
 	DEBUG(5, ("challenge is: \n"));
-	dump_data(5, auth_context->challenge.data, auth_context->challenge.length);
+	dump_data(5, (const char *)auth_context->challenge.data, auth_context->challenge.length);
 	return NT_STATUS_OK;
 }
 
@@ -83,7 +84,7 @@
 		(AUTH_NTLMSSP_STATE *)ntlmssp_state->auth_context;
 	auth_usersupplied_info *user_info = NULL;
 	NTSTATUS nt_status;
-	bool username_was_mapped;
+	BOOL username_was_mapped;
 
 	/* the client has given us its machine name (which we otherwise would not get on port 445).
 	   we need to possibly reload smb.conf if smb.conf includes depend on the machine name */
@@ -127,8 +128,7 @@
 	nt_status = create_local_token(auth_ntlmssp_state->server_info);
 
 	if (!NT_STATUS_IS_OK(nt_status)) {
-		DEBUG(10, ("create_local_token failed: %s\n",
-			nt_errstr(nt_status)));
+		DEBUG(10, ("create_local_token failed\n"));
 		return nt_status;
 	}
 
@@ -194,6 +194,7 @@
 	}
 
 	mem_ctx = (*auth_ntlmssp_state)->mem_ctx;
+
 	if ((*auth_ntlmssp_state)->ntlmssp_state) {
 		ntlmssp_end(&(*auth_ntlmssp_state)->ntlmssp_state);
 	}

Modified: branches/samba/upstream/source/auth/auth_sam.c
===================================================================
--- branches/samba/upstream/source/auth/auth_sam.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/auth/auth_sam.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -70,7 +71,7 @@
  bitmask.
 ****************************************************************************/
                                                                                                               
-static bool logon_hours_ok(struct samu *sampass)
+static BOOL logon_hours_ok(struct samu *sampass)
 {
 	/* In logon hours first bit is Sunday from 12AM to 1AM */
 	const uint8 *hours;
@@ -122,7 +123,7 @@
 }
 
 /****************************************************************************
- Do a specific test for a struct samu being valid for this connection
+ Do a specific test for a struct samu being vaild for this connection 
  (ie not disabled, expired and the like).
 ****************************************************************************/
 
@@ -187,15 +188,16 @@
 		return NT_STATUS_NO_MEMORY;
 
 	if (*workstation_list) {
-		bool invalid_ws = True;
-		char *tok;
+		BOOL invalid_ws = True;
+		fstring tok;
 		const char *s = workstation_list;
 
 		const char *machine_name = talloc_asprintf(mem_ctx, "%s$", user_info->wksta_name);
 		if (machine_name == NULL)
 			return NT_STATUS_NO_MEMORY;
-
-		while (next_token_talloc(mem_ctx, &s, &tok, ",")) {
+			
+			
+		while (next_token(&s, tok, ",", sizeof(tok))) {
 			DEBUG(10,("sam_account_ok: checking for workstation match %s and %s\n",
 				  tok, user_info->wksta_name));
 			if(strequal(tok, user_info->wksta_name)) {
@@ -210,11 +212,9 @@
 					break;
 				}
 			}
-			TALLOC_FREE(tok);
 		}
-		TALLOC_FREE(tok);
-
-		if (invalid_ws)
+		
+		if (invalid_ws) 
 			return NT_STATUS_INVALID_WORKSTATION;
 	}
 
@@ -222,7 +222,7 @@
 		DEBUG(2,("sam_account_ok: Domain trust account %s denied by server\n", pdb_get_username(sampass)));
 		return NT_STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT;
 	}
-
+	
 	if (acct_ctrl & ACB_SVRTRUST) {
 		if (!(user_info->logon_parameters & MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT)) {
 			DEBUG(2,("sam_account_ok: Server trust account %s denied by server\n", pdb_get_username(sampass)));
@@ -252,21 +252,21 @@
 				   auth_serversupplied_info **server_info)
 {
 	struct samu *sampass=NULL;
-	bool ret;
+	BOOL ret;
 	NTSTATUS nt_status;
 	NTSTATUS update_login_attempts_status;
-	DATA_BLOB user_sess_key = data_blob_null;
-	DATA_BLOB lm_sess_key = data_blob_null;
-	bool updated_autolock = False, updated_badpw = False;
+	DATA_BLOB user_sess_key = data_blob(NULL, 0);
+	DATA_BLOB lm_sess_key = data_blob(NULL, 0);
+	BOOL updated_autolock = False, updated_badpw = False;
 
 	if (!user_info || !auth_context) {
 		return NT_STATUS_UNSUCCESSFUL;
 	}
 
-	/* the returned struct gets kept on the server_info, by means
-	   of a steal further down */
+	/* Can't use the talloc version here, because the returned struct gets
+	   kept on the server_info */
 
-	if ( !(sampass = samu_new( mem_ctx )) ) {
+	if ( !(sampass = samu_new( NULL )) ) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
@@ -295,16 +295,14 @@
 	nt_status = sam_password_ok(auth_context, mem_ctx, sampass, 
 				    user_info, &user_sess_key, &lm_sess_key);
 
-	/* Notify passdb backend of login success/failure. If not 
-	   NT_STATUS_OK the backend doesn't like the login */
-
+	/* Notify passdb backend of login success/failure. If not NT_STATUS_OK the backend doesn't like the login */
 	update_login_attempts_status = pdb_update_login_attempts(sampass, NT_STATUS_IS_OK(nt_status));
+	if (!NT_STATUS_IS_OK(update_login_attempts_status))
+		nt_status = update_login_attempts_status;
 
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		if (NT_STATUS_EQUAL(nt_status,NT_STATUS_WRONG_PASSWORD) && 
-		    pdb_get_acct_ctrl(sampass) &ACB_NORMAL &&
-		    NT_STATUS_IS_OK(update_login_attempts_status)) 
-		{  
+		    pdb_get_acct_ctrl(sampass) &ACB_NORMAL) {  
 			pdb_increment_bad_password_count(sampass);
 			updated_badpw = True;
 		} else {
@@ -352,6 +350,7 @@
 
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		DEBUG(0,("check_sam_security: make_server_info_sam() failed with '%s'\n", nt_errstr(nt_status)));
+		TALLOC_FREE(sampass);
 		data_blob_free(&user_sess_key);
 		data_blob_free(&lm_sess_key);
 		return nt_status;
@@ -395,7 +394,7 @@
 					 const auth_usersupplied_info *user_info, 
 					 auth_serversupplied_info **server_info)
 {
-	bool is_local_name, is_my_domain;
+	BOOL is_local_name, is_my_domain;
 
 	if (!user_info || !auth_context) {
 		return NT_STATUS_LOGON_FAILURE;

Modified: branches/samba/upstream/source/auth/auth_script.c
===================================================================
--- branches/samba/upstream/source/auth/auth_script.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/auth/auth_script.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/source/auth/auth_server.c
===================================================================
--- branches/samba/upstream/source/auth/auth_server.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/auth/auth_server.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -32,12 +33,11 @@
 static struct cli_state *server_cryptkey(TALLOC_CTX *mem_ctx)
 {
 	struct cli_state *cli = NULL;
-	char *desthost = NULL;
-	struct sockaddr_storage dest_ss;
+	fstring desthost;
+	struct in_addr dest_ip;
 	const char *p;
-	char *pserver = NULL;
-	bool connected_ok = False;
-	struct named_mutex *mutex;
+	char *pserver;
+	BOOL connected_ok = False;
 
 	if (!(cli = cli_initialise()))
 		return NULL;
@@ -48,40 +48,34 @@
         pserver = talloc_strdup(mem_ctx, lp_passwordserver());
 	p = pserver;
 
-        while(next_token_talloc(mem_ctx, &p, &desthost, LIST_SEP)) {
+        while(next_token( &p, desthost, LIST_SEP, sizeof(desthost))) {
 		NTSTATUS status;
 
-		desthost = talloc_sub_basic(mem_ctx,
-				current_user_info.smb_name,
-				current_user_info.domain,
-				desthost);
-		if (!desthost) {
-			return NULL;
-		}
+		standard_sub_basic(current_user_info.smb_name, current_user_info.domain,
+				   desthost, sizeof(desthost));
 		strupper_m(desthost);
 
-		if(!resolve_name( desthost, &dest_ss, 0x20)) {
+		if(!resolve_name( desthost, &dest_ip, 0x20)) {
 			DEBUG(1,("server_cryptkey: Can't resolve address for %s\n",desthost));
 			continue;
 		}
 
-		if (ismyaddr(&dest_ss)) {
+		if (ismyip(dest_ip)) {
 			DEBUG(1,("Password server loop - disabling password server %s\n",desthost));
 			continue;
 		}
 
-		/* we use a mutex to prevent two connections at once - when a
-		   Win2k PDC get two connections where one hasn't completed a
-		   session setup yet it will send a TCP reset to the first
+		/* we use a mutex to prevent two connections at once - when a 
+		   Win2k PDC get two connections where one hasn't completed a 
+		   session setup yet it will send a TCP reset to the first 
 		   connection (tridge) */
 
-		mutex = grab_named_mutex(talloc_tos(), desthost, 10);
-		if (mutex == NULL) {
+		if (!grab_server_mutex(desthost)) {
 			cli_shutdown(cli);
 			return NULL;
 		}
 
-		status = cli_connect(cli, desthost, &dest_ss);
+		status = cli_connect(cli, desthost, &dest_ip);
 		if (NT_STATUS_IS_OK(status)) {
 			DEBUG(3,("connected to password server %s\n",desthost));
 			connected_ok = True;
@@ -89,131 +83,97 @@
 		}
 		DEBUG(10,("server_cryptkey: failed to connect to server %s. Error %s\n",
 			desthost, nt_errstr(status) ));
-		TALLOC_FREE(mutex);
 	}
 
 	if (!connected_ok) {
+		release_server_mutex();
 		DEBUG(0,("password server not available\n"));
 		cli_shutdown(cli);
 		return NULL;
 	}
-
-	if (!attempt_netbios_session_request(&cli, global_myname(),
-					     desthost, &dest_ss)) {
-		TALLOC_FREE(mutex);
+	
+	if (!attempt_netbios_session_request(&cli, global_myname(), 
+					     desthost, &dest_ip)) {
+		release_server_mutex();
 		DEBUG(1,("password server fails session request\n"));
 		cli_shutdown(cli);
 		return NULL;
 	}
-
+	
 	if (strequal(desthost,myhostname())) {
 		exit_server_cleanly("Password server loop!");
 	}
-
+	
 	DEBUG(3,("got session\n"));
 
 	if (!cli_negprot(cli)) {
-		TALLOC_FREE(mutex);
 		DEBUG(1,("%s rejected the negprot\n",desthost));
+		release_server_mutex();
 		cli_shutdown(cli);
 		return NULL;
 	}
 
 	if (cli->protocol < PROTOCOL_LANMAN2 ||
 	    !(cli->sec_mode & NEGOTIATE_SECURITY_USER_LEVEL)) {
-		TALLOC_FREE(mutex);
 		DEBUG(1,("%s isn't in user level security mode\n",desthost));
+		release_server_mutex();
 		cli_shutdown(cli);
 		return NULL;
 	}
 
-	/* Get the first session setup done quickly, to avoid silly
+	/* Get the first session setup done quickly, to avoid silly 
 	   Win2k bugs.  (The next connection to the server will kill
-	   this one...
+	   this one... 
 	*/
 
 	if (!NT_STATUS_IS_OK(cli_session_setup(cli, "", "", 0, "", 0,
 					       ""))) {
-		TALLOC_FREE(mutex);
 		DEBUG(0,("%s rejected the initial session setup (%s)\n",
 			 desthost, cli_errstr(cli)));
+		release_server_mutex();
 		cli_shutdown(cli);
 		return NULL;
 	}
+	
+	release_server_mutex();
 
-	TALLOC_FREE(mutex);
-
 	DEBUG(3,("password server OK\n"));
-
+	
 	return cli;
 }
 
-struct server_security_state {
-	struct cli_state *cli;
-};
-
 /****************************************************************************
- Send a 'keepalive' packet down the cli pipe.
+ Clean up our allocated cli.
 ****************************************************************************/
 
-static bool send_server_keepalive(const struct timeval *now,
-				  void *private_data)
+static void free_server_private_data(void **private_data_pointer) 
 {
-	struct server_security_state *state = talloc_get_type_abort(
-		private_data, struct server_security_state);
-
-	if (!state->cli || !state->cli->initialised) {
-		return False;
+	struct cli_state **cli = (struct cli_state **)private_data_pointer;
+	if (*cli && (*cli)->initialised) {
+		DEBUG(10, ("Shutting down smbserver connection\n"));
+		cli_shutdown(*cli);
 	}
-
-	if (send_keepalive(state->cli->fd)) {
-		return True;
-	}
-
-	DEBUG( 2, ( "send_server_keepalive: password server keepalive "
-		    "failed.\n"));
-	cli_shutdown(state->cli);
-	state->cli = NULL;
-	return False;
+	*private_data_pointer = NULL;
 }
 
-static int destroy_server_security(struct server_security_state *state)
-{
-	if (state->cli) {
-		cli_shutdown(state->cli);
-	}
-	return 0;
-}
+/****************************************************************************
+ Send a 'keepalive' packet down the cli pipe.
+****************************************************************************/
 
-static struct server_security_state *make_server_security_state(struct cli_state *cli)
+static void send_server_keepalive(void **private_data_pointer) 
 {
-	struct server_security_state *result;
-
-	if (!(result = talloc(NULL, struct server_security_state))) {
-		DEBUG(0, ("talloc failed\n"));
-		cli_shutdown(cli);
-		return NULL;
-	}
-
-	result->cli = cli;
-	talloc_set_destructor(result, destroy_server_security);
-
-	if (lp_keepalive() != 0) {
-		struct timeval interval;
-		interval.tv_sec = lp_keepalive();
-		interval.tv_usec = 0;
-
-		if (event_add_idle(smbd_event_context(), result, interval,
-				   "server_security_keepalive",
-				   send_server_keepalive,
-				   result) == NULL) {
-			DEBUG(0, ("event_add_idle failed\n"));
-			TALLOC_FREE(result);
-			return NULL;
+	/* also send a keepalive to the password server if its still
+	   connected */
+	if (private_data_pointer) {
+		struct cli_state *cli = (struct cli_state *)(*private_data_pointer);
+		if (cli && cli->initialised) {
+			if (!send_keepalive(cli->fd)) {
+				DEBUG( 2, ( "send_server_keepalive: password server keepalive failed.\n"));
+				cli_shutdown(cli);
+				*private_data_pointer = NULL;
+			}
 		}
 	}
-
-	return result;
 }
 
 /****************************************************************************
@@ -236,25 +196,23 @@
 			
 			/* However, it is still a perfectly fine connection
 			   to pass that unencrypted password over */
-			*my_private_data =
-				(void *)make_server_security_state(cli);
-			return data_blob_null;
+			*my_private_data = (void *)cli;
+			return data_blob(NULL, 0);
+			
 		} else if (cli->secblob.length < 8) {
 			/* We can't do much if we don't get a full challenge */
 			DEBUG(2,("make_auth_info_server: Didn't receive a full challenge from server\n"));
 			cli_shutdown(cli);
-			return data_blob_null;
+			return data_blob(NULL, 0);
 		}
 
-		if (!(*my_private_data = (void *)make_server_security_state(cli))) {
-			return data_blob(NULL,0);
-		}
+		*my_private_data = (void *)cli;
 
 		/* The return must be allocated on the caller's mem_ctx, as our own will be
 		   destoyed just after the call. */
 		return data_blob_talloc(auth_context->mem_ctx, cli->secblob.data,8);
 	} else {
-		return data_blob_null;
+		return data_blob(NULL, 0);
 	}
 }
 
@@ -270,15 +228,15 @@
 					 const auth_usersupplied_info *user_info, 
 					 auth_serversupplied_info **server_info)
 {
-	struct server_security_state *state = talloc_get_type_abort(
-		my_private_data, struct server_security_state);
 	struct cli_state *cli;
-	static bool tested_password_server = False;
-	static bool bad_password_server = False;
+	static unsigned char badpass[24];
+	static fstring baduser; 
+	static BOOL tested_password_server = False;
+	static BOOL bad_password_server = False;
 	NTSTATUS nt_status = NT_STATUS_NOT_IMPLEMENTED;
-	bool locally_made_cli = False;
+	BOOL locally_made_cli = False;
 
-	cli = state->cli;
+	cli = (struct cli_state *)my_private_data;
 	
 	if (cli) {
 	} else {
@@ -287,7 +245,7 @@
 	}
 
 	if (!cli || !cli->initialised) {
-		DEBUG(1,("password server is not connected (cli not initialised)\n"));
+		DEBUG(1,("password server is not connected (cli not initilised)\n"));
 		return NT_STATUS_LOGON_FAILURE;
 	}  
 	
@@ -303,6 +261,23 @@
 		}
 	}
 
+	if(badpass[0] == 0)
+		memset(badpass, 0x1f, sizeof(badpass));
+
+	if((user_info->nt_resp.length == sizeof(badpass)) && 
+	   !memcmp(badpass, user_info->nt_resp.data, sizeof(badpass))) {
+		/* 
+		 * Very unlikely, our random bad password is the same as the users
+		 * password.
+		 */
+		memset(badpass, badpass[0]+1, sizeof(badpass));
+	}
+
+	if(baduser[0] == 0) {
+		fstrcpy(baduser, INVALID_USER_PREFIX);
+		fstrcat(baduser, global_myname());
+	}
+
 	/*
 	 * Attempt a session setup with a totally incorrect password.
 	 * If this succeeds with the guest bit *NOT* set then the password
@@ -316,28 +291,6 @@
 	 */
 
 	if ((!tested_password_server) && (lp_paranoid_server_security())) {
-		unsigned char badpass[24];
-		char *baduser = NULL;
-
-		memset(badpass, 0x1f, sizeof(badpass));
-
-		if((user_info->nt_resp.length == sizeof(badpass)) && 
-		   !memcmp(badpass, user_info->nt_resp.data, sizeof(badpass))) {
-			/* 
-			 * Very unlikely, our random bad password is the same as the users
-			 * password.
-			 */
-			memset(badpass, badpass[0]+1, sizeof(badpass));
-		}
-
-		baduser = talloc_asprintf(mem_ctx,
-					"%s%s",
-					INVALID_USER_PREFIX,
-					global_myname());
-		if (!baduser) {
-			return NT_STATUS_NO_MEMORY;
-		}
-
 		if (NT_STATUS_IS_OK(cli_session_setup(cli, baduser,
 						      (char *)badpass,
 						      sizeof(badpass), 
@@ -457,6 +410,8 @@
 	(*auth_method)->name = "smbserver";
 	(*auth_method)->auth = check_smbserver_security;
 	(*auth_method)->get_chal = auth_get_challenge_server;
+	(*auth_method)->send_keepalive = send_server_keepalive;
+	(*auth_method)->free_private_data = free_server_private_data;
 	return NT_STATUS_OK;
 }
 

Modified: branches/samba/upstream/source/auth/auth_unix.c
===================================================================
--- branches/samba/upstream/source/auth/auth_unix.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/auth/auth_unix.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -27,10 +28,10 @@
  *  
  *  this ugly hack needs to die, but not quite yet, I think people still use it...
  **/
-static bool update_smbpassword_file(const char *user, const char *password)
+static BOOL update_smbpassword_file(const char *user, const char *password)
 {
 	struct samu 	*sampass;
-	bool            ret;
+	BOOL            ret;
 	
 	if ( !(sampass = samu_new( NULL )) ) {
 		return False;
@@ -92,7 +93,7 @@
 	struct passwd *pass = NULL;
 
 	become_root();
-	pass = Get_Pwnam_alloc(talloc_tos(), user_info->internal_username);
+	pass = Get_Pwnam(user_info->internal_username);
 
 	
 	/** @todo This call assumes a ASCII password, no charset transformation is 
@@ -123,7 +124,6 @@
 		}
 	}
 
-	TALLOC_FREE(pass);
 	return nt_status;
 }
 

Modified: branches/samba/upstream/source/auth/auth_util.c
===================================================================
--- branches/samba/upstream/source/auth/auth_util.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/auth/auth_util.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -26,50 +27,32 @@
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_AUTH
 
+static struct nt_user_token *create_local_nt_token(TALLOC_CTX *mem_ctx,
+						   const DOM_SID *user_sid,
+						   BOOL is_guest,
+						   int num_groupsids,
+						   const DOM_SID *groupsids);
+
 /****************************************************************************
  Create a UNIX user on demand.
 ****************************************************************************/
 
 static int smb_create_user(const char *domain, const char *unix_username, const char *homedir)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *add_script;
+	pstring add_script;
 	int ret;
 
-	add_script = talloc_strdup(ctx, lp_adduser_script());
-	if (!add_script || !*add_script) {
+	pstrcpy(add_script, lp_adduser_script());
+	if (! *add_script)
 		return -1;
-	}
-	add_script = talloc_all_string_sub(ctx,
-				add_script,
-				"%u",
-				unix_username);
-	if (!add_script) {
-		return -1;
-	}
-	if (domain) {
-		add_script = talloc_all_string_sub(ctx,
-					add_script,
-					"%D",
-					domain);
-		if (!add_script) {
-			return -1;
-		}
-	}
-	if (homedir) {
-		add_script = talloc_all_string_sub(ctx,
-				add_script,
-				"%H",
-				homedir);
-		if (!add_script) {
-			return -1;
-		}
-	}
+	all_string_sub(add_script, "%u", unix_username, sizeof(pstring));
+	if (domain)
+		all_string_sub(add_script, "%D", domain, sizeof(pstring));
+	if (homedir)
+		all_string_sub(add_script, "%H", homedir, sizeof(pstring));
 	ret = smbrun(add_script,NULL);
 	flush_pwnam_cache();
-	DEBUG(ret ? 0 : 3,
-		("smb_create_user: Running the command `%s' gave %d\n",
-		 add_script,ret));
+	DEBUG(ret ? 0 : 3,("smb_create_user: Running the command `%s' gave %d\n",add_script,ret));
 	return ret;
 }
 
@@ -77,16 +60,16 @@
  Create an auth_usersupplied_data structure
 ****************************************************************************/
 
-static NTSTATUS make_user_info(auth_usersupplied_info **user_info,
-                               const char *smb_name,
+static NTSTATUS make_user_info(auth_usersupplied_info **user_info, 
+                               const char *smb_name, 
                                const char *internal_username,
-                               const char *client_domain,
+                               const char *client_domain, 
                                const char *domain,
-                               const char *wksta_name,
+                               const char *wksta_name, 
                                DATA_BLOB *lm_pwd, DATA_BLOB *nt_pwd,
                                DATA_BLOB *lm_interactive_pwd, DATA_BLOB *nt_interactive_pwd,
-                               DATA_BLOB *plaintext,
-                               bool encrypted)
+                               DATA_BLOB *plaintext, 
+                               BOOL encrypted)
 {
 
 	DEBUG(5,("attempting to make a user_info for %s (%s)\n", internal_username, smb_name));
@@ -165,11 +148,11 @@
  			    DATA_BLOB *lm_pwd, DATA_BLOB *nt_pwd,
  			    DATA_BLOB *lm_interactive_pwd, DATA_BLOB *nt_interactive_pwd,
 			    DATA_BLOB *plaintext, 
-			    bool encrypted)
+			    BOOL encrypted)
 {
 	const char *domain;
 	NTSTATUS result;
-	bool was_mapped;
+	BOOL was_mapped;
 	fstring internal_username;
 	fstrcpy(internal_username, smb_name);
 	was_mapped = map_username(internal_username); 
@@ -210,7 +193,7 @@
  Decrypt and encrypt the passwords.
 ****************************************************************************/
 
-bool make_user_info_netlogon_network(auth_usersupplied_info **user_info, 
+BOOL make_user_info_netlogon_network(auth_usersupplied_info **user_info, 
 				     const char *smb_name, 
 				     const char *client_domain, 
 				     const char *wksta_name, 
@@ -220,7 +203,7 @@
 				     const uchar *nt_network_pwd,
 				     int nt_pwd_len)
 {
-	bool ret;
+	BOOL ret;
 	NTSTATUS status;
 	DATA_BLOB lm_blob = data_blob(lm_network_pwd, lm_pwd_len);
 	DATA_BLOB nt_blob = data_blob(nt_network_pwd, nt_pwd_len);
@@ -248,7 +231,7 @@
  Decrypt and encrypt the passwords.
 ****************************************************************************/
 
-bool make_user_info_netlogon_interactive(auth_usersupplied_info **user_info, 
+BOOL make_user_info_netlogon_interactive(auth_usersupplied_info **user_info, 
 					 const char *smb_name, 
 					 const char *client_domain, 
 					 const char *wksta_name, 
@@ -258,8 +241,8 @@
 					 const uchar nt_interactive_pwd[16], 
 					 const uchar *dc_sess_key)
 {
-	unsigned char lm_pwd[16];
-	unsigned char nt_pwd[16];
+	char lm_pwd[16];
+	char nt_pwd[16];
 	unsigned char local_lm_response[24];
 	unsigned char local_nt_response[24];
 	unsigned char key[16];
@@ -275,7 +258,7 @@
 	
 #ifdef DEBUG_PASSWORD
 	DEBUG(100,("key:"));
-	dump_data(100, key, sizeof(key));
+	dump_data(100, (char *)key, sizeof(key));
 	
 	DEBUG(100,("lm owf password:"));
 	dump_data(100, lm_pwd, sizeof(lm_pwd));
@@ -285,10 +268,10 @@
 #endif
 	
 	if (lm_interactive_pwd)
-		SamOEMhash(lm_pwd, key, sizeof(lm_pwd));
+		SamOEMhash((uchar *)lm_pwd, key, sizeof(lm_pwd));
 	
 	if (nt_interactive_pwd)
-		SamOEMhash(nt_pwd, key, sizeof(nt_pwd));
+		SamOEMhash((uchar *)nt_pwd, key, sizeof(nt_pwd));
 	
 #ifdef DEBUG_PASSWORD
 	DEBUG(100,("decrypt of lm owf password:"));
@@ -299,18 +282,18 @@
 #endif
 	
 	if (lm_interactive_pwd)
-		SMBOWFencrypt(lm_pwd, chal,
+		SMBOWFencrypt((const unsigned char *)lm_pwd, chal,
 			      local_lm_response);
 
 	if (nt_interactive_pwd)
-		SMBOWFencrypt(nt_pwd, chal,
+		SMBOWFencrypt((const unsigned char *)nt_pwd, chal,
 			      local_nt_response);
 	
 	/* Password info paranoia */
 	ZERO_STRUCT(key);
 
 	{
-		bool ret;
+		BOOL ret;
 		NTSTATUS nt_status;
 		DATA_BLOB local_lm_blob;
 		DATA_BLOB local_nt_blob;
@@ -361,7 +344,7 @@
  Create an auth_usersupplied_data structure
 ****************************************************************************/
 
-bool make_user_info_for_reply(auth_usersupplied_info **user_info, 
+BOOL make_user_info_for_reply(auth_usersupplied_info **user_info, 
 			      const char *smb_name, 
 			      const char *client_domain,
 			      const uint8 chal[8],
@@ -385,7 +368,7 @@
 #ifdef DEBUG_PASSWORD
 		DEBUG(10,("Unencrypted password (len %d):\n",
 			  (int)plaintext_password.length));
-		dump_data(100, plaintext_password.data,
+		dump_data(100, (const char *)plaintext_password.data,
 			  plaintext_password.length);
 #endif
 
@@ -395,11 +378,11 @@
 		
 		/* We can't do an NT hash here, as the password needs to be
 		   case insensitive */
-		local_nt_blob = data_blob_null; 
+		local_nt_blob = data_blob(NULL, 0); 
 		
 	} else {
-		local_lm_blob = data_blob_null; 
-		local_nt_blob = data_blob_null; 
+		local_lm_blob = data_blob(NULL, 0); 
+		local_nt_blob = data_blob(NULL, 0); 
 	}
 	
 	ret = make_user_info_map(
@@ -437,7 +420,7 @@
  Create a guest user_info blob, for anonymous authenticaion.
 ****************************************************************************/
 
-bool make_user_info_guest(auth_usersupplied_info **user_info) 
+BOOL make_user_info_guest(auth_usersupplied_info **user_info) 
 {
 	NTSTATUS nt_status;
 
@@ -453,6 +436,83 @@
 	return NT_STATUS_IS_OK(nt_status) ? True : False;
 }
 
+/****************************************************************************
+ prints a NT_USER_TOKEN to debug output.
+****************************************************************************/
+
+void debug_nt_user_token(int dbg_class, int dbg_lev, NT_USER_TOKEN *token)
+{
+	size_t     i;
+	
+	if (!token) {
+		DEBUGC(dbg_class, dbg_lev, ("NT user token: (NULL)\n"));
+		return;
+	}
+	
+	DEBUGC(dbg_class, dbg_lev,
+	       ("NT user token of user %s\n",
+		sid_string_static(&token->user_sids[0]) ));
+	DEBUGADDC(dbg_class, dbg_lev,
+		  ("contains %lu SIDs\n", (unsigned long)token->num_sids));
+	for (i = 0; i < token->num_sids; i++)
+		DEBUGADDC(dbg_class, dbg_lev,
+			  ("SID[%3lu]: %s\n", (unsigned long)i, 
+			   sid_string_static(&token->user_sids[i])));
+
+	dump_se_priv( dbg_class, dbg_lev, &token->privileges );
+}
+
+/****************************************************************************
+ prints a UNIX 'token' to debug output.
+****************************************************************************/
+
+void debug_unix_user_token(int dbg_class, int dbg_lev, uid_t uid, gid_t gid,
+			   int n_groups, gid_t *groups)
+{
+	int     i;
+	DEBUGC(dbg_class, dbg_lev,
+	       ("UNIX token of user %ld\n", (long int)uid));
+
+	DEBUGADDC(dbg_class, dbg_lev,
+		  ("Primary group is %ld and contains %i supplementary "
+		   "groups\n", (long int)gid, n_groups));
+	for (i = 0; i < n_groups; i++)
+		DEBUGADDC(dbg_class, dbg_lev, ("Group[%3i]: %ld\n", i, 
+			(long int)groups[i]));
+}
+
+/******************************************************************************
+ Create a token for the root user to be used internally by smbd.
+ This is similar to running under the context of the LOCAL_SYSTEM account
+ in Windows.  This is a read-only token.  Do not modify it or free() it.
+ Create a copy if your need to change it.
+******************************************************************************/
+
+NT_USER_TOKEN *get_root_nt_token( void )
+{
+	static NT_USER_TOKEN *token = NULL;
+	DOM_SID u_sid, g_sid;
+	struct passwd *pw;
+	
+	if ( token )
+		return token;
+
+	if ( !(pw = sys_getpwnam( "root" )) ) {
+		DEBUG(0,("get_root_nt_token: getpwnam\"root\") failed!\n"));
+		return NULL;
+	}
+	
+	/* get the user and primary group SIDs; although the 
+	   BUILTIN\Administrators SId is really the one that matters here */
+	   
+	uid_to_sid(&u_sid, pw->pw_uid);
+	gid_to_sid(&g_sid, pw->pw_gid);
+
+	token = create_local_nt_token(NULL, &u_sid, False,
+				      1, &global_sid_Builtin_Administrators);
+	return token;
+}
+
 static int server_info_dtor(auth_serversupplied_info *server_info)
 {
 	TALLOC_FREE(server_info->sam_account);
@@ -501,23 +561,19 @@
 	DOM_SID unix_group_sid;
 	
 
-	if ( !(result = make_server_info(NULL)) ) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	if ( !(pwd = getpwnam_alloc(result, pdb_get_username(sampass))) ) {
+	if ( !(pwd = getpwnam_alloc(NULL, pdb_get_username(sampass))) ) {
 		DEBUG(1, ("User %s in passdb, but getpwnam() fails!\n",
 			  pdb_get_username(sampass)));
-		TALLOC_FREE(result);
 		return NT_STATUS_NO_SUCH_USER;
 	}
 
+	if ( !(result = make_server_info(NULL)) ) {
+		TALLOC_FREE(pwd);
+		return NT_STATUS_NO_MEMORY;
+	}
+
 	result->sam_account = sampass;
-	/* Ensure thaat the sampass will be freed with the result */
-	talloc_steal(result, sampass);
-	result->unix_name = pwd->pw_name;
-	/* Ensure that we keep pwd->pw_name, because we will free pwd below */
-	talloc_steal(result, pwd->pw_name);
+	result->unix_name = talloc_strdup(result, pwd->pw_name);
 	result->gid = pwd->pw_gid;
 	result->uid = pwd->pw_uid;
 	
@@ -549,13 +605,11 @@
 				"for gid %d!\n", gids[i]));
 			continue;
 		}
-		status = add_sid_to_array_unique(result, &unix_group_sid,
-						 &result->sids,
-						 &result->num_sids);
-		if (!NT_STATUS_IS_OK(status)) {
+		if (!add_sid_to_array_unique( result, &unix_group_sid,
+				&result->sids, &result->num_sids )) {
 			result->sam_account = NULL; /* Don't free on error exit. */
 			TALLOC_FREE(result);
-			return status;
+			return NT_STATUS_NO_MEMORY;
 		}
 	}
 
@@ -573,6 +627,53 @@
 	return NT_STATUS_OK;
 }
 
+/*
+ * Add alias SIDs from memberships within the partially created token SID list
+ */
+
+static NTSTATUS add_aliases(const DOM_SID *domain_sid,
+			    struct nt_user_token *token)
+{
+	uint32 *aliases;
+	size_t i, num_aliases;
+	NTSTATUS status;
+	TALLOC_CTX *tmp_ctx;
+
+	if (!(tmp_ctx = talloc_init("add_aliases"))) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	aliases = NULL;
+	num_aliases = 0;
+
+	status = pdb_enum_alias_memberships(tmp_ctx, domain_sid,
+					    token->user_sids,
+					    token->num_sids,
+					    &aliases, &num_aliases);
+
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(10, ("pdb_enum_alias_memberships failed: %s\n",
+			   nt_errstr(status)));
+		TALLOC_FREE(tmp_ctx);
+		return status;
+	}
+
+	for (i=0; i<num_aliases; i++) {
+		DOM_SID alias_sid;
+		sid_compose(&alias_sid, domain_sid, aliases[i]);
+		if (!add_sid_to_array_unique(token, &alias_sid,
+					&token->user_sids,
+					&token->num_sids)) {
+			DEBUG(0, ("add_sid_to_array failed\n"));
+			TALLOC_FREE(tmp_ctx);
+			return NT_STATUS_NO_MEMORY;
+		}
+	}
+
+	TALLOC_FREE(tmp_ctx);
+	return NT_STATUS_OK;
+}
+
 static NTSTATUS log_nt_token(TALLOC_CTX *tmp_ctx, NT_USER_TOKEN *token)
 {
 	char *command;
@@ -588,12 +689,12 @@
 	for (i=1; i<token->num_sids; i++) {
 		group_sidstr = talloc_asprintf(
 			tmp_ctx, "%s %s", group_sidstr,
-			sid_string_talloc(tmp_ctx, &token->user_sids[i]));
+			sid_string_static(&token->user_sids[i]));
 	}
 
 	command = talloc_string_sub(
 		tmp_ctx, lp_log_nt_token_command(),
-		"%s", sid_string_talloc(tmp_ctx, &token->user_sids[0]));
+		"%s", sid_string_static(&token->user_sids[0]));
 	command = talloc_string_sub(tmp_ctx, command, "%t", group_sidstr);
 
 	if (command == NULL) {
@@ -609,6 +710,276 @@
 	return NT_STATUS_OK;
 }
 
+/*******************************************************************
+*******************************************************************/
+
+static NTSTATUS add_builtin_administrators( struct nt_user_token *token )
+{
+	DOM_SID domadm;
+
+	/* nothing to do if we aren't in a domain */
+	
+	if ( !(IS_DC || lp_server_role()==ROLE_DOMAIN_MEMBER) ) {
+		return NT_STATUS_OK;
+	}
+	
+	/* Find the Domain Admins SID */
+	
+	if ( IS_DC ) {
+		sid_copy( &domadm, get_global_sam_sid() );
+	} else {
+		if ( !secrets_fetch_domain_sid( lp_workgroup(), &domadm ) )
+			return NT_STATUS_CANT_ACCESS_DOMAIN_INFO;
+	}
+	sid_append_rid( &domadm, DOMAIN_GROUP_RID_ADMINS );
+	
+	/* Add Administrators if the user beloongs to Domain Admins */
+	
+	if ( nt_token_check_sid( &domadm, token ) ) {
+		if (!add_sid_to_array(token, &global_sid_Builtin_Administrators,
+					 &token->user_sids, &token->num_sids)) {
+			return NT_STATUS_NO_MEMORY;
+		}
+	}
+	
+	return NT_STATUS_OK;
+}
+
+/*******************************************************************
+*******************************************************************/
+
+static NTSTATUS create_builtin_users( void )
+{
+	NTSTATUS status;
+	DOM_SID dom_users;
+
+	status = pdb_create_builtin_alias( BUILTIN_ALIAS_RID_USERS );
+	if ( !NT_STATUS_IS_OK(status) ) {
+		DEBUG(0,("create_builtin_users: Failed to create Users\n"));
+		return status;
+	}
+	
+	/* add domain users */
+	if ((IS_DC || (lp_server_role() == ROLE_DOMAIN_MEMBER)) 
+		&& secrets_fetch_domain_sid(lp_workgroup(), &dom_users))
+	{
+		sid_append_rid(&dom_users, DOMAIN_GROUP_RID_USERS );
+		status = pdb_add_aliasmem( &global_sid_Builtin_Users, &dom_users);
+		if ( !NT_STATUS_IS_OK(status) ) {
+			DEBUG(0,("create_builtin_users: Failed to add Domain Users to"
+				" Users\n"));
+			return status;
+		}
+	}
+			
+	return NT_STATUS_OK;
+}		
+
+/*******************************************************************
+*******************************************************************/
+
+static NTSTATUS create_builtin_administrators( void )
+{
+	NTSTATUS status;
+	DOM_SID dom_admins, root_sid;
+	fstring root_name;
+	enum lsa_SidType type;		
+	TALLOC_CTX *ctx;
+	BOOL ret;
+
+	status = pdb_create_builtin_alias( BUILTIN_ALIAS_RID_ADMINS );
+	if ( !NT_STATUS_IS_OK(status) ) {
+		DEBUG(0,("create_builtin_administrators: Failed to create Administrators\n"));
+		return status;
+	}
+	
+	/* add domain admins */
+	if ((IS_DC || (lp_server_role() == ROLE_DOMAIN_MEMBER)) 
+		&& secrets_fetch_domain_sid(lp_workgroup(), &dom_admins))
+	{
+		sid_append_rid(&dom_admins, DOMAIN_GROUP_RID_ADMINS);
+		status = pdb_add_aliasmem( &global_sid_Builtin_Administrators, &dom_admins );
+		if ( !NT_STATUS_IS_OK(status) ) {
+			DEBUG(0,("create_builtin_administrators: Failed to add Domain Admins"
+				" Administrators\n"));
+			return status;
+		}
+	}
+			
+	/* add root */
+	if ( (ctx = talloc_init("create_builtin_administrators")) == NULL ) {
+		return NT_STATUS_NO_MEMORY;
+	}
+	fstr_sprintf( root_name, "%s\\root", get_global_sam_name() );
+	ret = lookup_name( ctx, root_name, LOOKUP_NAME_DOMAIN, NULL, NULL, &root_sid, &type );
+	TALLOC_FREE( ctx );
+
+	if ( ret ) {
+		status = pdb_add_aliasmem( &global_sid_Builtin_Administrators, &root_sid );
+		if ( !NT_STATUS_IS_OK(status) ) {
+			DEBUG(0,("create_builtin_administrators: Failed to add root"
+				" Administrators\n"));
+			return status;
+		}
+	}
+	
+	return NT_STATUS_OK;
+}		
+
+/*******************************************************************
+ Create a NT token for the user, expanding local aliases
+*******************************************************************/
+
+static struct nt_user_token *create_local_nt_token(TALLOC_CTX *mem_ctx,
+						   const DOM_SID *user_sid,
+						   BOOL is_guest,
+						   int num_groupsids,
+						   const DOM_SID *groupsids)
+{
+	struct nt_user_token *result = NULL;
+	int i;
+	NTSTATUS status;
+	gid_t gid;
+
+	DEBUG(10, ("Create local NT token for %s\n", sid_string_static(user_sid)));
+
+	if (!(result = TALLOC_ZERO_P(mem_ctx, NT_USER_TOKEN))) {
+		DEBUG(0, ("talloc failed\n"));
+		return NULL;
+	}
+
+	/* Add the user and primary group sid */
+
+	if (!add_sid_to_array(result, user_sid,
+			 &result->user_sids, &result->num_sids)) {
+		return NULL;
+	}
+
+	/* For guest, num_groupsids may be zero. */
+	if (num_groupsids) {
+		if (!add_sid_to_array(result, &groupsids[0],
+				 &result->user_sids, &result->num_sids)) {
+			return NULL;
+		}
+	}
+			 
+	/* Add in BUILTIN sids */
+	
+	if (!add_sid_to_array(result, &global_sid_World,
+			 &result->user_sids, &result->num_sids)) {
+		return NULL;
+	}
+	if (!add_sid_to_array(result, &global_sid_Network,
+			 &result->user_sids, &result->num_sids)) {
+		return NULL;
+	}
+
+	if (is_guest) {
+		if (!add_sid_to_array(result, &global_sid_Builtin_Guests,
+				 &result->user_sids, &result->num_sids)) {
+			return NULL;
+		}
+	} else {
+		if (!add_sid_to_array(result, &global_sid_Authenticated_Users,
+				 &result->user_sids, &result->num_sids)) {
+			return NULL;
+		}
+	}
+	
+	/* Now the SIDs we got from authentication. These are the ones from
+	 * the info3 struct or from the pdb_enum_group_memberships, depending
+	 * on who authenticated the user.
+	 * Note that we start the for loop at "1" here, we already added the
+	 * first group sid as primary above. */
+
+	for (i=1; i<num_groupsids; i++) {
+		if (!add_sid_to_array_unique(result, &groupsids[i],
+					&result->user_sids, &result->num_sids)) {
+			return NULL;
+		}
+	}
+	
+	/* Deal with the BUILTIN\Administrators group.  If the SID can
+	   be resolved then assume that the add_aliasmem( S-1-5-32 ) 
+	   handled it. */
+
+	if ( !sid_to_gid( &global_sid_Builtin_Administrators, &gid ) ) {
+		/* We can only create a mapping if winbind is running 
+		   and the nested group functionality has been enabled */
+		   
+		if ( lp_winbind_nested_groups() && winbind_ping() ) {
+			become_root();
+			status = create_builtin_administrators( );
+			if ( !NT_STATUS_IS_OK(status) ) {
+				DEBUG(2,("create_local_nt_token: Failed to create BUILTIN\\Administrators group!\n"));
+				/* don't fail, just log the message */
+			}
+			unbecome_root();
+		}
+		else {
+			status = add_builtin_administrators( result );
+			if ( !NT_STATUS_IS_OK(status) ) {
+				/* just log a complaint but do not fail */
+				DEBUG(3,("create_local_nt_token: failed to check for local Administrators"
+					" membership (%s)\n", nt_errstr(status)));
+			}			
+		}		
+	}
+
+	/* Deal with the BUILTIN\Users group.  If the SID can
+	   be resolved then assume that the add_aliasmem( S-1-5-32 ) 
+	   handled it. */
+
+	if ( !sid_to_gid( &global_sid_Builtin_Users, &gid ) ) {
+		/* We can only create a mapping if winbind is running 
+		   and the nested group functionality has been enabled */
+		   
+		if ( lp_winbind_nested_groups() && winbind_ping() ) {
+			become_root();
+			status = create_builtin_users( );
+			if ( !NT_STATUS_IS_OK(status) ) {
+				DEBUG(2,("create_local_nt_token: Failed to create BUILTIN\\Users group!\n"));
+				/* don't fail, just log the message */
+			}
+			unbecome_root();
+		}
+	}
+
+	/* Deal with local groups */
+	
+	if (lp_winbind_nested_groups()) {
+
+		become_root();
+
+		/* Now add the aliases. First the one from our local SAM */
+
+		status = add_aliases(get_global_sam_sid(), result);
+
+		if (!NT_STATUS_IS_OK(status)) {
+			unbecome_root();
+			TALLOC_FREE(result);
+			return NULL;
+		}
+
+		/* Finally the builtin ones */
+
+		status = add_aliases(&global_sid_Builtin, result);
+
+		if (!NT_STATUS_IS_OK(status)) {
+			unbecome_root();
+			TALLOC_FREE(result);
+			return NULL;
+		}
+
+		unbecome_root();
+	} 
+
+
+	get_privileges_for_sids(&result->privileges, result->user_sids,
+				result->num_sids);
+	return result;
+}
+
 /*
  * Create the token to use from server_info->sam_account and
  * server_info->sids (the info3/sam groups). Find the unix gids.
@@ -671,7 +1042,7 @@
 
 		if (!sid_to_gid(sid, &gid)) {
 			DEBUG(10, ("Could not convert SID %s to gid, "
-				   "ignoring it\n", sid_string_dbg(sid)));
+				   "ignoring it\n", sid_string_static(sid)));
 			continue;
 		}
 		add_gid_to_array_unique(server_info, gid, &server_info->groups,
@@ -706,7 +1077,7 @@
  */
 
 NTSTATUS create_token_from_username(TALLOC_CTX *mem_ctx, const char *username,
-				    bool is_guest,
+				    BOOL is_guest,
 				    uid_t *uid, gid_t *gid,
 				    char **found_username,
 				    struct nt_user_token **token)
@@ -742,12 +1113,12 @@
 
 	if (!sid_to_uid(&user_sid, uid)) {
 		DEBUG(1, ("sid_to_uid for %s (%s) failed\n",
-			  username, sid_string_dbg(&user_sid)));
+			  username, sid_string_static(&user_sid)));
 		goto done;
 	}
 
 	if (sid_check_is_in_our_domain(&user_sid)) {
-		bool ret;
+		BOOL ret;
 
 		/* This is a passdb user, so ask passdb */
 
@@ -764,7 +1135,7 @@
 
 		if (!ret) {
 			DEBUG(1, ("pdb_getsampwsid(%s) for user %s failed\n",
-				  sid_string_dbg(&user_sid), username));
+				  sid_string_static(&user_sid), username));
 			DEBUGADD(1, ("Fall back to unix user %s\n", username));
 			goto unix_user;
 		}
@@ -866,7 +1237,7 @@
 
 		if (!sid_to_gid(&group_sids[0], gid)) {
 			DEBUG(1, ("sid_to_gid(%s) failed\n",
-				  sid_string_dbg(&group_sids[0])));
+				  sid_string_static(&group_sids[0])));
 			goto done;
 		}
 
@@ -897,9 +1268,9 @@
 				"for gid %d!\n", gids[i]));
 			continue;
 		}
-		result = add_sid_to_array_unique(tmp_ctx, &unix_group_sid,
-						 &group_sids, &num_group_sids);
-		if (!NT_STATUS_IS_OK(result)) {
+		if (!add_sid_to_array_unique(tmp_ctx, &unix_group_sid,
+				&group_sids, &num_group_sids )) {
+			result = NT_STATUS_NO_MEMORY;
 			goto done;
 		}
 	}
@@ -926,14 +1297,14 @@
  member of a particular group.
 ***************************************************************************/
 
-bool user_in_group_sid(const char *username, const DOM_SID *group_sid)
+BOOL user_in_group_sid(const char *username, const DOM_SID *group_sid)
 {
 	NTSTATUS status;
 	uid_t uid;
 	gid_t gid;
 	char *found_username;
 	struct nt_user_token *token;
-	bool result;
+	BOOL result;
 
 	TALLOC_CTX *mem_ctx;
 
@@ -959,11 +1330,11 @@
 	
 }
 
-bool user_in_group(const char *username, const char *groupname)
+BOOL user_in_group(const char *username, const char *groupname)
 {
 	TALLOC_CTX *mem_ctx;
 	DOM_SID group_sid;
-	bool ret;
+	BOOL ret;
 
 	mem_ctx = talloc_new(NULL);
 	if (mem_ctx == NULL) {
@@ -1076,12 +1447,11 @@
 		return NT_STATUS_NO_SUCH_USER;
 	}
 
-	status = add_sid_to_array_unique(result, &u_sid,
-					 &result->sids,
-					 &result->num_sids);
-	if (!NT_STATUS_IS_OK(status)) {
+	if (!add_sid_to_array_unique(result, &u_sid,
+					&result->sids,
+					&result->num_sids)) {
 		TALLOC_FREE(result);
-		return status;
+		return NT_STATUS_NO_MEMORY;
 	}
 
 	/* For now we throw away the gids and convert via sid_to_gid
@@ -1105,8 +1475,8 @@
 	NTSTATUS status;
 	struct samu *sampass = NULL;
 	DOM_SID guest_sid;
-	bool ret;
-	char zeros[16];
+	BOOL ret;
+	static const char zeros[16] = { 0, };
 
 	if ( !(sampass = samu_new( NULL )) ) {
 		return NT_STATUS_NO_MEMORY;
@@ -1141,7 +1511,6 @@
 
 	/* annoying, but the Guest really does have a session key, and it is
 	   all zeros! */
-	ZERO_STRUCT(zeros);
 	(*server_info)->user_session_key = data_blob(zeros, sizeof(zeros));
 	(*server_info)->lm_session_key = data_blob(zeros, sizeof(zeros));
 
@@ -1205,7 +1574,7 @@
 
 static auth_serversupplied_info *guest_info = NULL;
 
-bool init_guest_info(void)
+BOOL init_guest_info(void)
 {
 	if (guest_info != NULL)
 		return True;
@@ -1219,7 +1588,7 @@
 	return (*server_info != NULL) ? NT_STATUS_OK : NT_STATUS_NO_MEMORY;
 }
 
-bool copy_current_user(struct current_user *dst, struct current_user *src)
+BOOL copy_current_user(struct current_user *dst, struct current_user *src)
 {
 	gid_t *groups;
 	NT_USER_TOKEN *nt_token;
@@ -1246,7 +1615,7 @@
 	return True;
 }
 
-bool set_current_user_guest(struct current_user *dst)
+BOOL set_current_user_guest(struct current_user *dst)
 {
 	gid_t *groups;
 	NT_USER_TOKEN *nt_token;
@@ -1289,7 +1658,7 @@
 				 char **found_username,
 				 uid_t *uid, gid_t *gid,
 				 struct samu *account,
-				 bool *username_was_mapped)
+				 BOOL *username_was_mapped)
 {
 	NTSTATUS nt_status;
 	fstring dom_user, lower_username;
@@ -1336,7 +1705,7 @@
  ****************************************************************************/
  
 struct passwd *smb_getpwnam( TALLOC_CTX *mem_ctx, char *domuser,
-			     fstring save_username, bool create )
+			     fstring save_username, BOOL create )
 {
 	struct passwd *pw = NULL;
 	char *p;
@@ -1422,22 +1791,24 @@
 				const char *sent_nt_username,
 				const char *domain,
 				auth_serversupplied_info **server_info, 
-				struct netr_SamInfo3 *info3)
+				NET_USER_INFO_3 *info3) 
 {
-	char zeros[16];
+	static const char zeros[16] = { 0, };
 
 	NTSTATUS nt_status = NT_STATUS_OK;
-	char *found_username = NULL;
+	char *found_username;
 	const char *nt_domain;
 	const char *nt_username;
 	struct samu *sam_account = NULL;
 	DOM_SID user_sid;
 	DOM_SID group_sid;
-	bool username_was_mapped;
+	BOOL username_was_mapped;
 
-	uid_t uid = (uid_t)-1;
-	gid_t gid = (gid_t)-1;
+	uid_t uid;
+	gid_t gid;
 
+	size_t i;
+
 	auth_serversupplied_info *result;
 
 	/* 
@@ -1446,25 +1817,23 @@
 	   matches.
 	*/
 
-	sid_copy(&user_sid, info3->base.domain_sid);
-	if (!sid_append_rid(&user_sid, info3->base.rid)) {
+	sid_copy(&user_sid, &info3->dom_sid.sid);
+	if (!sid_append_rid(&user_sid, info3->user_rid)) {
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 	
-	sid_copy(&group_sid, info3->base.domain_sid);
-	if (!sid_append_rid(&group_sid, info3->base.primary_gid)) {
+	sid_copy(&group_sid, &info3->dom_sid.sid);
+	if (!sid_append_rid(&group_sid, info3->group_rid)) {
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-	nt_username = talloc_strdup(mem_ctx, info3->base.account_name.string);
-	if (!nt_username) {
+	if (!(nt_username = unistr2_tdup(mem_ctx, &(info3->uni_user_name)))) {
 		/* If the server didn't give us one, just use the one we sent
 		 * them */
 		nt_username = sent_nt_username;
 	}
 
-	nt_domain = talloc_strdup(mem_ctx, info3->base.domain.string);
-	if (!nt_domain) {
+	if (!(nt_domain = unistr2_tdup(mem_ctx, &(info3->uni_logon_dom)))) {
 		/* If the server didn't give us one, just use the one we sent
 		 * them */
 		nt_domain = domain;
@@ -1529,50 +1898,50 @@
 		TALLOC_FREE(sam_account);
 		return NT_STATUS_UNSUCCESSFUL;
 	}
-
+		
 	if (!pdb_set_fullname(sam_account,
-			      info3->base.full_name.string,
+			      unistr2_static(&(info3->uni_full_name)), 
 			      PDB_CHANGED)) {
 		TALLOC_FREE(sam_account);
 		return NT_STATUS_NO_MEMORY;
 	}
 
 	if (!pdb_set_logon_script(sam_account,
-				  info3->base.logon_script.string,
+				  unistr2_static(&(info3->uni_logon_script)),
 				  PDB_CHANGED)) {
 		TALLOC_FREE(sam_account);
 		return NT_STATUS_NO_MEMORY;
 	}
 
 	if (!pdb_set_profile_path(sam_account,
-				  info3->base.profile_path.string,
+				  unistr2_static(&(info3->uni_profile_path)),
 				  PDB_CHANGED)) {
 		TALLOC_FREE(sam_account);
 		return NT_STATUS_NO_MEMORY;
 	}
 
 	if (!pdb_set_homedir(sam_account,
-			     info3->base.home_directory.string,
+			     unistr2_static(&(info3->uni_home_dir)),
 			     PDB_CHANGED)) {
 		TALLOC_FREE(sam_account);
 		return NT_STATUS_NO_MEMORY;
 	}
 
 	if (!pdb_set_dir_drive(sam_account,
-			       info3->base.home_drive.string,
+			       unistr2_static(&(info3->uni_dir_drive)),
 			       PDB_CHANGED)) {
 		TALLOC_FREE(sam_account);
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	if (!pdb_set_acct_ctrl(sam_account, info3->base.acct_flags, PDB_CHANGED)) {
+	if (!pdb_set_acct_ctrl(sam_account, info3->acct_flags, PDB_CHANGED)) {
 		TALLOC_FREE(sam_account);
 		return NT_STATUS_NO_MEMORY;
 	}
 
 	if (!pdb_set_pass_last_set_time(
 		    sam_account,
-		    nt_time_to_unix(info3->base.last_password_change),
+		    nt_time_to_unix(info3->pass_last_set_time),
 		    PDB_CHANGED)) {
 		TALLOC_FREE(sam_account);
 		return NT_STATUS_NO_MEMORY;
@@ -1580,7 +1949,7 @@
 
 	if (!pdb_set_pass_can_change_time(
 		    sam_account,
-		    nt_time_to_unix(info3->base.allow_password_change),
+		    nt_time_to_unix(info3->pass_can_change_time),
 		    PDB_CHANGED)) {
 		TALLOC_FREE(sam_account);
 		return NT_STATUS_NO_MEMORY;
@@ -1588,7 +1957,7 @@
 
 	if (!pdb_set_pass_must_change_time(
 		    sam_account,
-		    nt_time_to_unix(info3->base.force_password_change),
+		    nt_time_to_unix(info3->pass_must_change_time),
 		    PDB_CHANGED)) {
 		TALLOC_FREE(sam_account);
 		return NT_STATUS_NO_MEMORY;
@@ -1617,269 +1986,58 @@
 	result->num_sids = 0;
 	result->sids = NULL;
 
-	nt_status = sid_array_from_info3(result, info3,
-					 &result->sids,
-					 &result->num_sids,
-					 false, false);
-	if (!NT_STATUS_IS_OK(nt_status)) {
-		TALLOC_FREE(result);
-		return nt_status;
+	/* and create (by appending rids) the 'domain' sids */
+	
+	for (i = 0; i < info3->num_groups2; i++) {
+		DOM_SID sid;
+		if (!sid_compose(&sid, &info3->dom_sid.sid,
+				 info3->gids[i].g_rid)) {
+			DEBUG(3,("could not append additional group rid "
+				 "0x%x\n", info3->gids[i].g_rid));
+			TALLOC_FREE(result);
+			return NT_STATUS_INVALID_PARAMETER;
+		}
+		if (!add_sid_to_array(result, &sid, &result->sids,
+				 &result->num_sids)) {
+			TALLOC_FREE(result);
+			return NT_STATUS_NO_MEMORY;
+		}
 	}
 
-	result->login_server = talloc_strdup(result,
-					     info3->base.logon_server.string);
+	/* Copy 'other' sids.  We need to do sid filtering here to
+ 	   prevent possible elevation of privileges.  See:
 
-	/* ensure we are never given NULL session keys */
+           http://www.microsoft.com/windows2000/techinfo/administration/security/sidfilter.asp
+         */
 
-	ZERO_STRUCT(zeros);
-
-	if (memcmp(info3->base.key.key, zeros, sizeof(zeros)) == 0) {
-		result->user_session_key = data_blob_null;
-	} else {
-		result->user_session_key = data_blob_talloc(
-			result, info3->base.key.key,
-			sizeof(info3->base.key.key));
-	}
-
-	if (memcmp(info3->base.LMSessKey.key, zeros, 8) == 0) {
-		result->lm_session_key = data_blob_null;
-	} else {
-		result->lm_session_key = data_blob_talloc(
-			result, info3->base.LMSessKey.key,
-			sizeof(info3->base.LMSessKey.key));
-	}
-
-	result->was_mapped = username_was_mapped;
-
-	*server_info = result;
-
-	return NT_STATUS_OK;
-}
-
-/*****************************************************************************
- Make a server_info struct from the wbcAuthUserInfo returned by a domain logon
-******************************************************************************/
-
-NTSTATUS make_server_info_wbcAuthUserInfo(TALLOC_CTX *mem_ctx,
-					  const char *sent_nt_username,
-					  const char *domain,
-					  const struct wbcAuthUserInfo *info,
-					  auth_serversupplied_info **server_info)
-{
-	char zeros[16];
-
-	NTSTATUS nt_status = NT_STATUS_OK;
-	char *found_username = NULL;
-	const char *nt_domain;
-	const char *nt_username;
-	struct samu *sam_account = NULL;
-	DOM_SID user_sid;
-	DOM_SID group_sid;
-	bool username_was_mapped;
-	uint32_t i;
-
-	uid_t uid = (uid_t)-1;
-	gid_t gid = (gid_t)-1;
-
-	auth_serversupplied_info *result;
-
-	result = make_server_info(NULL);
-	if (result == NULL) {
-		DEBUG(4, ("make_server_info failed!\n"));
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	/*
-	   Here is where we should check the list of
-	   trusted domains, and verify that the SID
-	   matches.
-	*/
-
-	memcpy(&user_sid, &info->sids[0].sid, sizeof(user_sid));
-	memcpy(&group_sid, &info->sids[1].sid, sizeof(group_sid));
-
-	if (info->account_name) {
-		nt_username = talloc_strdup(result, info->account_name);
-	} else {
-		/* If the server didn't give us one, just use the one we sent
-		 * them */
-		nt_username = talloc_strdup(result, sent_nt_username);
-	}
-	if (!nt_username) {
-		TALLOC_FREE(result);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	if (info->domain_name) {
-		nt_domain = talloc_strdup(result, info->domain_name);
-	} else {
-		/* If the server didn't give us one, just use the one we sent
-		 * them */
-		nt_domain = talloc_strdup(result, domain);
-	}
-	if (!nt_domain) {
-		TALLOC_FREE(result);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	/* try to fill the SAM account..  If getpwnam() fails, then try the
-	   add user script (2.2.x behavior).
-
-	   We use the _unmapped_ username here in an attempt to provide
-	   consistent username mapping behavior between kerberos and NTLM[SSP]
-	   authentication in domain mode security.  I.E. Username mapping
-	   should be applied to the fully qualified username
-	   (e.g. DOMAIN\user) and not just the login name.  Yes this means we
-	   called map_username() unnecessarily in make_user_info_map() but
-	   that is how the current code is designed.  Making the change here
-	   is the least disruptive place.  -- jerry */
-
-	if ( !(sam_account = samu_new( result )) ) {
-		TALLOC_FREE(result);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	/* this call will try to create the user if necessary */
-
-	nt_status = fill_sam_account(result, nt_domain, sent_nt_username,
-				     &found_username, &uid, &gid, sam_account,
-				     &username_was_mapped);
-
-	/* if we still don't have a valid unix account check for
-	  'map to guest = bad uid' */
-
-	if (!NT_STATUS_IS_OK(nt_status)) {
-		TALLOC_FREE( result );
-		if ( lp_map_to_guest() == MAP_TO_GUEST_ON_BAD_UID ) {
-			make_server_info_guest(server_info);
-			return NT_STATUS_OK;
+	for (i = 0; i < info3->num_other_sids; i++) {
+		if (!add_sid_to_array(result, &info3->other_sids[i].sid,
+					 &result->sids,
+					 &result->num_sids)) {
+			TALLOC_FREE(result);
+			return NT_STATUS_NO_MEMORY;
 		}
-		return nt_status;
 	}
 
-	if (!pdb_set_nt_username(sam_account, nt_username, PDB_CHANGED)) {
-		TALLOC_FREE(result);
-		return NT_STATUS_NO_MEMORY;
-	}
+	result->login_server = unistr2_tdup(result, 
+					    &(info3->uni_logon_srv));
 
-	if (!pdb_set_username(sam_account, nt_username, PDB_CHANGED)) {
-		TALLOC_FREE(result);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	if (!pdb_set_domain(sam_account, nt_domain, PDB_CHANGED)) {
-		TALLOC_FREE(result);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	if (!pdb_set_user_sid(sam_account, &user_sid, PDB_CHANGED)) {
-		TALLOC_FREE(result);
-		return NT_STATUS_UNSUCCESSFUL;
-	}
-
-	if (!pdb_set_group_sid(sam_account, &group_sid, PDB_CHANGED)) {
-		TALLOC_FREE(result);
-		return NT_STATUS_UNSUCCESSFUL;
-	}
-
-	if (!pdb_set_fullname(sam_account, info->full_name, PDB_CHANGED)) {
-		TALLOC_FREE(result);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	if (!pdb_set_logon_script(sam_account, info->logon_script, PDB_CHANGED)) {
-		TALLOC_FREE(result);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	if (!pdb_set_profile_path(sam_account, info->profile_path, PDB_CHANGED)) {
-		TALLOC_FREE(result);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	if (!pdb_set_homedir(sam_account, info->home_directory, PDB_CHANGED)) {
-		TALLOC_FREE(result);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	if (!pdb_set_dir_drive(sam_account, info->home_drive, PDB_CHANGED)) {
-		TALLOC_FREE(result);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	if (!pdb_set_acct_ctrl(sam_account, info->acct_flags, PDB_CHANGED)) {
-		TALLOC_FREE(result);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	if (!pdb_set_pass_last_set_time(
-		    sam_account,
-		    nt_time_to_unix(info->pass_last_set_time),
-		    PDB_CHANGED)) {
-		TALLOC_FREE(result);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	if (!pdb_set_pass_can_change_time(
-		    sam_account,
-		    nt_time_to_unix(info->pass_can_change_time),
-		    PDB_CHANGED)) {
-		TALLOC_FREE(result);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	if (!pdb_set_pass_must_change_time(
-		    sam_account,
-		    nt_time_to_unix(info->pass_must_change_time),
-		    PDB_CHANGED)) {
-		TALLOC_FREE(result);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	/* save this here to _net_sam_logon() doesn't fail (it assumes a
-	   valid struct samu) */
-
-	result->sam_account = sam_account;
-	result->unix_name = talloc_strdup(result, found_username);
-
-	result->login_server = talloc_strdup(result, info->logon_server);
-
-	/* Fill in the unix info we found on the way */
-
-	result->uid = uid;
-	result->gid = gid;
-
-	/* Create a 'combined' list of all SIDs we might want in the SD */
-
-	result->num_sids = info->num_sids - 2;
-	result->sids = talloc_array(result, DOM_SID, result->num_sids);
-	if (result->sids == NULL) {
-		TALLOC_FREE(result);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	for (i=0; i < result->num_sids; i++) {
-		memcpy(&result->sids[i], &info->sids[i+2].sid, sizeof(result->sids[i]));
-	}
-
 	/* ensure we are never given NULL session keys */
-
-	ZERO_STRUCT(zeros);
-
-	if (memcmp(info->user_session_key, zeros, sizeof(zeros)) == 0) {
-		result->user_session_key = data_blob_null;
+	
+	if (memcmp(info3->user_sess_key, zeros, sizeof(zeros)) == 0) {
+		result->user_session_key = data_blob(NULL, 0);
 	} else {
 		result->user_session_key = data_blob_talloc(
-			result, info->user_session_key,
-			sizeof(info->user_session_key));
+			result, info3->user_sess_key,
+			sizeof(info3->user_sess_key));
 	}
 
-	if (memcmp(info->lm_session_key, zeros, 8) == 0) {
-		result->lm_session_key = data_blob_null;
+	if (memcmp(info3->lm_sess_key, zeros, 8) == 0) {
+		result->lm_session_key = data_blob(NULL, 0);
 	} else {
 		result->lm_session_key = data_blob_talloc(
-			result, info->lm_session_key,
-			sizeof(info->lm_session_key));
+			result, info3->lm_sess_key,
+			sizeof(info3->lm_sess_key));
 	}
 
 	result->was_mapped = username_was_mapped;
@@ -1920,7 +2078,7 @@
  Make an auth_methods struct
 ***************************************************************************/
 
-bool make_auth_methods(struct auth_context *auth_context, auth_methods **auth_method) 
+BOOL make_auth_methods(struct auth_context *auth_context, auth_methods **auth_method) 
 {
 	if (!auth_context) {
 		smb_panic("no auth_context supplied to "
@@ -1942,6 +2100,89 @@
 	return True;
 }
 
+/****************************************************************************
+ Duplicate a SID token.
+****************************************************************************/
+
+NT_USER_TOKEN *dup_nt_token(TALLOC_CTX *mem_ctx, const NT_USER_TOKEN *ptoken)
+{
+	NT_USER_TOKEN *token;
+
+	if (!ptoken)
+		return NULL;
+
+	token = TALLOC_P(mem_ctx, NT_USER_TOKEN);
+	if (token == NULL) {
+		DEBUG(0, ("talloc failed\n"));
+		return NULL;
+	}
+
+	ZERO_STRUCTP(token);
+
+	if (ptoken->user_sids && ptoken->num_sids) {
+		token->user_sids = (DOM_SID *)TALLOC_MEMDUP(
+			token, ptoken->user_sids, sizeof(DOM_SID) * ptoken->num_sids );
+
+		if (token->user_sids == NULL) {
+			DEBUG(0, ("TALLOC_MEMDUP failed\n"));
+			TALLOC_FREE(token);
+			return NULL;
+		}
+		token->num_sids = ptoken->num_sids;
+	}
+	
+	/* copy the privileges; don't consider failure to be critical here */
+	
+	if ( !se_priv_copy( &token->privileges, &ptoken->privileges ) ) {
+		DEBUG(0,("dup_nt_token: Failure to copy SE_PRIV!.  "
+			 "Continuing with 0 privileges assigned.\n"));
+	}
+
+	return token;
+}
+
+/****************************************************************************
+ Check for a SID in an NT_USER_TOKEN
+****************************************************************************/
+
+BOOL nt_token_check_sid ( const DOM_SID *sid, const NT_USER_TOKEN *token )
+{
+	int i;
+	
+	if ( !sid || !token )
+		return False;
+	
+	for ( i=0; i<token->num_sids; i++ ) {
+		if ( sid_equal( sid, &token->user_sids[i] ) )
+			return True;
+	}
+
+	return False;
+}
+
+BOOL nt_token_check_domain_rid( NT_USER_TOKEN *token, uint32 rid ) 
+{
+	DOM_SID domain_sid;
+
+	/* if we are a domain member, the get the domain SID, else for 
+	   a DC or standalone server, use our own SID */
+
+	if ( lp_server_role() == ROLE_DOMAIN_MEMBER ) {
+		if ( !secrets_fetch_domain_sid( lp_workgroup(),
+						&domain_sid ) ) {
+			DEBUG(1,("nt_token_check_domain_rid: Cannot lookup "
+				 "SID for domain [%s]\n", lp_workgroup()));
+			return False;
+		}
+	} 
+	else
+		sid_copy( &domain_sid, get_global_sam_sid() );
+
+	sid_append_rid( &domain_sid, rid );
+	
+	return nt_token_check_sid( &domain_sid, token );\
+}
+
 /**
  * Verify whether or not given domain is trusted.
  *
@@ -1950,10 +2191,10 @@
  *         false if otherwise
  **/
 
-bool is_trusted_domain(const char* dom_name)
+BOOL is_trusted_domain(const char* dom_name)
 {
 	DOM_SID trustdom_sid;
-	bool ret;
+	BOOL ret;
 
 	/* no trusted domains for a standalone server */
 
@@ -1966,23 +2207,24 @@
 		become_root();
 		DEBUG (5,("is_trusted_domain: Checking for domain trust with "
 			  "[%s]\n", dom_name ));
-		ret = pdb_get_trusteddom_pw(dom_name, NULL, NULL, NULL);
+		ret = secrets_fetch_trusted_domain_password(dom_name, NULL,
+							    NULL, NULL);
 		unbecome_root();
 		if (ret)
 			return True;
 	}
 	else {
-		wbcErr result;
+		NSS_STATUS result;
 
 		/* If winbind is around, ask it */
 
 		result = wb_is_trusted_domain(dom_name);
 
-		if (result == WBC_ERR_SUCCESS) {
+		if (result == NSS_STATUS_SUCCESS) {
 			return True;
 		}
 
-		if (result == WBC_ERR_DOMAIN_NOT_FOUND) {
+		if (result == NSS_STATUS_NOTFOUND) {
 			/* winbind could not find the domain */
 			return False;
 		}

Modified: branches/samba/upstream/source/auth/auth_winbind.c
===================================================================
--- branches/samba/upstream/source/auth/auth_winbind.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/auth/auth_winbind.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -25,6 +26,31 @@
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_AUTH
 
+static NTSTATUS get_info3_from_ndr(TALLOC_CTX *mem_ctx, struct winbindd_response *response, NET_USER_INFO_3 *info3)
+{
+	uint8 *info3_ndr;
+	size_t len = response->length - sizeof(struct winbindd_response);
+	prs_struct ps;
+	if (len > 0) {
+		info3_ndr = (uint8 *)response->extra_data.data;
+		if (!prs_init(&ps, len, mem_ctx, UNMARSHALL)) {
+			return NT_STATUS_NO_MEMORY;
+		}
+		prs_copy_data_in(&ps, (char *)info3_ndr, len);
+		prs_set_offset(&ps,0);
+		if (!net_io_user_info3("", info3, &ps, 1, 3, False)) {
+			DEBUG(2, ("get_info3_from_ndr: could not parse info3 struct!\n"));
+			return NT_STATUS_UNSUCCESSFUL;
+		}
+		prs_mem_free(&ps);
+
+		return NT_STATUS_OK;
+	} else {
+		DEBUG(2, ("get_info3_from_ndr: No info3 struct found!\n"));
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+}
+
 /* Authenticate a user with a challenge/response */
 
 static NTSTATUS check_winbind_security(const struct auth_context *auth_context,
@@ -33,11 +59,11 @@
 				       const auth_usersupplied_info *user_info, 
 				       auth_serversupplied_info **server_info)
 {
+	struct winbindd_request request;
+	struct winbindd_response response;
+        NSS_STATUS result;
 	NTSTATUS nt_status;
-	wbcErr wbc_status;
-	struct wbcAuthUserParams params;
-	struct wbcAuthUserInfo *info = NULL;
-	struct wbcAuthErrorInfo *err = NULL;
+        NET_USER_INFO_3 info3;
 
 	if (!user_info) {
 		return NT_STATUS_INVALID_PARAMETER;
@@ -57,39 +83,36 @@
 
 	/* Send off request */
 
-	params.account_name	= user_info->smb_name;
-	params.domain_name	= user_info->domain;
-	params.workstation_name	= user_info->wksta_name;
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
 
-	params.flags		= 0;
-	params.parameter_control= user_info->logon_parameters;
+	request.flags = WBFLAG_PAM_INFO3_NDR;
 
-	params.level		= WBC_AUTH_USER_LEVEL_RESPONSE;
+	request.data.auth_crap.logon_parameters = user_info->logon_parameters;
 
-	memcpy(params.password.response.challenge,
-	       auth_context->challenge.data,
-	       sizeof(params.password.response.challenge));
+	fstrcpy(request.data.auth_crap.user, user_info->smb_name);
+	fstrcpy(request.data.auth_crap.domain, user_info->domain);
+	fstrcpy(request.data.auth_crap.workstation, user_info->wksta_name);
 
-	params.password.response.nt_length	= user_info->nt_resp.length;
-	params.password.response.nt_data	= user_info->nt_resp.data;
-	params.password.response.lm_length	= user_info->lm_resp.length;
-	params.password.response.lm_data	= user_info->lm_resp.data;
+	memcpy(request.data.auth_crap.chal, auth_context->challenge.data, sizeof(request.data.auth_crap.chal));
+	
+	request.data.auth_crap.lm_resp_len = MIN(user_info->lm_resp.length, 
+						 sizeof(request.data.auth_crap.lm_resp));
+	request.data.auth_crap.nt_resp_len = MIN(user_info->nt_resp.length, 
+						 sizeof(request.data.auth_crap.nt_resp));
+	
+	memcpy(request.data.auth_crap.lm_resp, user_info->lm_resp.data, 
+	       request.data.auth_crap.lm_resp_len);
+	memcpy(request.data.auth_crap.nt_resp, user_info->nt_resp.data, 
+	       request.data.auth_crap.nt_resp_len);
 
 	/* we are contacting the privileged pipe */
 	become_root();
-	wbc_status = wbcAuthenticateUserEx(&params, &info, &err);
+	result = winbindd_priv_request_response(WINBINDD_PAM_AUTH_CRAP,
+						&request, &response);
 	unbecome_root();
 
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		DEBUG(10,("check_winbind_security: wbcAuthenticateUserEx failed: %s\n",
-			wbcErrorString(wbc_status)));
-	}
-
-	if (wbc_status == WBC_ERR_NO_MEMORY) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	if (wbc_status == WBC_ERR_WINBIND_NOT_AVAILABLE) {
+	if ( result == NSS_STATUS_UNAVAIL )  {
 		struct auth_methods *auth_method =
 			(struct auth_methods *)my_private_data;
 
@@ -101,29 +124,25 @@
 			DEBUG(0,("check_winbind_security: ERROR!  my_private_data == NULL!\n"));
 	}
 
-	if (wbc_status == WBC_ERR_AUTH_ERROR) {
-		nt_status = NT_STATUS(err->nt_status);
-		wbcFreeMemory(err);
-		return nt_status;
-	}
+	nt_status = NT_STATUS(response.data.auth.nt_status);
 
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return NT_STATUS_LOGON_FAILURE;
+	if (result == NSS_STATUS_SUCCESS && response.extra_data.data) {
+		if (NT_STATUS_IS_OK(nt_status)) {
+			if (NT_STATUS_IS_OK(nt_status = get_info3_from_ndr(mem_ctx, &response, &info3))) { 
+				nt_status = make_server_info_info3(mem_ctx, 
+					user_info->smb_name, user_info->domain, 
+					server_info, &info3); 
+			}
+			
+			if (NT_STATUS_IS_OK(nt_status)) {
+				(*server_info)->was_mapped |= user_info->was_mapped;
+			}
+		}
+	} else if (NT_STATUS_IS_OK(nt_status)) {
+		nt_status = NT_STATUS_NO_LOGON_SERVERS;
 	}
 
-	nt_status = make_server_info_wbcAuthUserInfo(mem_ctx,
-						     user_info->smb_name,
-						     user_info->domain,
-						     info, server_info);
-	wbcFreeMemory(info);
-	if (!NT_STATUS_IS_OK(nt_status)) {
-		return nt_status;
-	}
-
-	if (user_info->was_mapped) {
-		(*server_info)->was_mapped = user_info->was_mapped;
-	}
-
+	SAFE_FREE(response.extra_data.data);
         return nt_status;
 }
 

Modified: branches/samba/upstream/source/auth/pampass.c
===================================================================
--- branches/samba/upstream/source/auth/pampass.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/auth/pampass.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /*
@@ -40,11 +41,7 @@
  *   which determines what actions/limitations/allowances become affected.
  *********************************************************************/
 
-#if defined(HAVE_SECURITY_PAM_APPL_H)
 #include <security/pam_appl.h>
-#elif defined(HAVE_PAM_PAM_APPL_H)
-#include <pam/pam_appl.h>
-#endif
 
 /*
  * Structure used to communicate between the conversation function
@@ -68,7 +65,7 @@
  PAM error handler.
  *********************************************************************/
 
-static bool smb_pam_error_handler(pam_handle_t *pamh, int pam_error, const char *msg, int dbglvl)
+static BOOL smb_pam_error_handler(pam_handle_t *pamh, int pam_error, const char *msg, int dbglvl)
 {
 
 	if( pam_error != PAM_SUCCESS) {
@@ -85,7 +82,7 @@
  failure as sucess.
 *********************************************************************/
 
-static bool smb_pam_nt_status_error_handler(pam_handle_t *pamh, int pam_error,
+static BOOL smb_pam_nt_status_error_handler(pam_handle_t *pamh, int pam_error,
 					    const char *msg, int dbglvl, 
 					    NTSTATUS *nt_status)
 {
@@ -207,17 +204,15 @@
 
 static struct chat_struct *make_pw_chat(const char *p) 
 {
-	char *prompt;
-	char *reply;
+	fstring prompt;
+	fstring reply;
 	struct chat_struct *list = NULL;
 	struct chat_struct *t;
-	TALLOC_CTX *frame = talloc_stackframe();
 
 	while (1) {
 		t = SMB_MALLOC_P(struct chat_struct);
 		if (!t) {
 			DEBUG(0,("make_pw_chat: malloc failed!\n"));
-			TALLOC_FREE(frame);
 			return NULL;
 		}
 
@@ -225,26 +220,22 @@
 
 		DLIST_ADD_END(list, t, struct chat_struct*);
 
-		if (!next_token_talloc(frame, &p, &prompt, NULL)) {
+		if (!next_token(&p, prompt, NULL, sizeof(fstring)))
 			break;
-		}
 
-		if (strequal(prompt,".")) {
+		if (strequal(prompt,"."))
 			fstrcpy(prompt,"*");
-		}
 
 		special_char_sub(prompt);
 		fstrcpy(t->prompt, prompt);
 		strlower_m(t->prompt);
 		trim_char(t->prompt, ' ', ' ');
 
-		if (!next_token_talloc(frame, &p, &reply, NULL)) {
+		if (!next_token(&p, reply, NULL, sizeof(fstring)))
 			break;
-		}
 
-		if (strequal(reply,".")) {
-			fstrcpy(reply,"");
-		}
+		if (strequal(reply,"."))
+				fstrcpy(reply,"");
 
 		special_char_sub(reply);
 		fstrcpy(t->reply, reply);
@@ -252,7 +243,6 @@
 		trim_char(t->reply, ' ', ' ');
 
 	}
-	TALLOC_FREE(frame);
 	return list;
 }
 
@@ -277,7 +267,7 @@
 	struct smb_pam_userdata *udp = (struct smb_pam_userdata *)appdata_ptr;
 	struct chat_struct *pw_chat= make_pw_chat(lp_passwd_chat());
 	struct chat_struct *t;
-	bool found; 
+	BOOL found; 
 	*resp = NULL;
 	
 	DEBUG(10,("smb_pam_passchange_conv: starting converstation for %d messages\n", num_msg));
@@ -437,7 +427,7 @@
  * PAM Closing out cleanup handler
  */
 
-static bool smb_pam_end(pam_handle_t *pamh, struct pam_conv *smb_pam_conv_ptr)
+static BOOL smb_pam_end(pam_handle_t *pamh, struct pam_conv *smb_pam_conv_ptr)
 {
 	int pam_error;
 
@@ -458,11 +448,10 @@
  * Start PAM authentication for specified account
  */
 
-static bool smb_pam_start(pam_handle_t **pamh, const char *user, const char *rhost, struct pam_conv *pconv)
+static BOOL smb_pam_start(pam_handle_t **pamh, const char *user, const char *rhost, struct pam_conv *pconv)
 {
 	int pam_error;
 	const char *our_rhost;
-	char addr[INET6_ADDRSTRLEN];
 
 	*pamh = (pam_handle_t *)NULL;
 
@@ -475,9 +464,9 @@
 	}
 
 	if (rhost == NULL) {
-		our_rhost = client_name(get_client_fd());
+		our_rhost = client_name();
 		if (strequal(our_rhost,"UNKNOWN"))
-			our_rhost = client_addr(get_client_fd(),addr,sizeof(addr));
+			our_rhost = client_addr();
 	} else {
 		our_rhost = rhost;
 	}
@@ -632,7 +621,7 @@
 /*
  * PAM Internal Session Handler
  */
-static bool smb_internal_pam_session(pam_handle_t *pamh, const char *user, const char *tty, bool flag)
+static BOOL smb_internal_pam_session(pam_handle_t *pamh, const char *user, const char *tty, BOOL flag)
 {
 	int pam_error;
 
@@ -660,7 +649,7 @@
  * Internal PAM Password Changer.
  */
 
-static bool smb_pam_chauthtok(pam_handle_t *pamh, const char * user)
+static BOOL smb_pam_chauthtok(pam_handle_t *pamh, const char * user)
 {
 	int pam_error;
 
@@ -714,7 +703,7 @@
  * PAM Externally accessible Session handler
  */
 
-bool smb_pam_claim_session(char *user, char *tty, char *rhost)
+BOOL smb_pam_claim_session(char *user, char *tty, char *rhost)
 {
 	pam_handle_t *pamh = NULL;
 	struct pam_conv *pconv = NULL;
@@ -742,7 +731,7 @@
  * PAM Externally accessible Session handler
  */
 
-bool smb_pam_close_session(char *user, char *tty, char *rhost)
+BOOL smb_pam_close_session(char *user, char *tty, char *rhost)
 {
 	pam_handle_t *pamh = NULL;
 	struct pam_conv *pconv = NULL;
@@ -842,7 +831,7 @@
  * PAM Password Change Suite
  */
 
-bool smb_pam_passchange(const char * user, const char * oldpassword, const char * newpassword)
+BOOL smb_pam_passchange(const char * user, const char * oldpassword, const char * newpassword)
 {
 	/* Appropriate quantities of root should be obtained BEFORE calling this function */
 	struct pam_conv *pconv = NULL;
@@ -872,13 +861,13 @@
 }
 
 /* If PAM not used, also no PAM restrictions on sessions. */
-bool smb_pam_claim_session(char *user, char *tty, char *rhost)
+BOOL smb_pam_claim_session(char *user, char *tty, char *rhost)
 {
 	return True;
 }
 
 /* If PAM not used, also no PAM restrictions on sessions. */
-bool smb_pam_close_session(char *in_user, char *tty, char *rhost)
+BOOL smb_pam_close_session(char *in_user, char *tty, char *rhost)
 {
 	return True;
 }

Modified: branches/samba/upstream/source/auth/pass_check.c
===================================================================
--- branches/samba/upstream/source/auth/pass_check.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/auth/pass_check.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /* this module is for checking a username/password against a system
@@ -26,63 +27,12 @@
 #define DBGC_CLASS DBGC_AUTH
 
 /* these are kept here to keep the string_combinations function simple */
-static char *ths_user;
-
-static const char *get_this_user(void)
-{
-	if (!ths_user) {
-		return "";
-	}
-	return ths_user;
-}
-
-#if defined(WITH_PAM) || defined(OSF1_ENH_SEC)
-static const char *set_this_user(const char *newuser)
-{
-	char *orig_user = ths_user;
-	ths_user = SMB_STRDUP(newuser);
-	SAFE_FREE(orig_user);
-	return ths_user;
-}
+static fstring this_user;
+#if !defined(WITH_PAM) 
+static fstring this_salt;
+static fstring this_crypted;
 #endif
 
-#if !defined(WITH_PAM)
-static char *ths_salt;
-/* This must be writable. */
-static char *get_this_salt(void)
-{
-	return ths_salt;
-}
-
-/* We may be setting a modified version of the same
- * string, so don't free before use. */
-
-static const char *set_this_salt(const char *newsalt)
-{
-	char *orig_salt = ths_salt;
-	ths_salt = SMB_STRDUP(newsalt);
-	SAFE_FREE(orig_salt);
-	return ths_salt;
-}
-
-static char *ths_crypted;
-static const char *get_this_crypted(void)
-{
-	if (!ths_crypted) {
-		return "";
-	}
-	return ths_crypted;
-}
-
-static const char *set_this_crypted(const char *newcrypted)
-{
-	char *orig_crypted = ths_crypted;
-	ths_crypted = SMB_STRDUP(newcrypted);
-	SAFE_FREE(orig_crypted);
-	return ths_crypted;
-}
-#endif
-
 #ifdef WITH_AFS
 
 #include <afs/stds.h>
@@ -91,7 +41,7 @@
 /*******************************************************************
 check on AFS authentication
 ********************************************************************/
-static bool afs_auth(char *user, char *password)
+static BOOL afs_auth(char *user, char *password)
 {
 	long password_expires = 0;
 	char *reason;
@@ -140,7 +90,7 @@
 /*******************************************************************
 check on a DCE/DFS authentication
 ********************************************************************/
-static bool dfs_auth(char *user, char *password)
+static BOOL dfs_auth(char *user, char *password)
 {
 	struct tm *t;
 	error_status_t err;
@@ -164,7 +114,7 @@
 	 * Assumes local passwd file is kept in sync w/ DCE RGY!
 	 */
 
-	if (strcmp((char *)crypt(password, get_this_salt()), get_this_crypted()))
+	if (strcmp((char *)crypt(password, this_salt), this_crypted))
 	{
 		return (False);
 	}
@@ -543,29 +493,29 @@
 static NTSTATUS password_check(const char *password)
 {
 #ifdef WITH_PAM
-	return smb_pam_passcheck(get_this_user(), password);
+	return smb_pam_passcheck(this_user, password);
 #else
 
-	bool ret;
+	BOOL ret;
 
 #ifdef WITH_AFS
-	if (afs_auth(get_this_user(), password))
+	if (afs_auth(this_user, password))
 		return NT_STATUS_OK;
 #endif /* WITH_AFS */
 
 #ifdef WITH_DFS
-	if (dfs_auth(get_this_user(), password))
+	if (dfs_auth(this_user, password))
 		return NT_STATUS_OK;
 #endif /* WITH_DFS */
 
 #ifdef OSF1_ENH_SEC
 	
-	ret = (strcmp(osf1_bigcrypt(password, get_this_salt()),
-		      get_this_crypted()) == 0);
+	ret = (strcmp(osf1_bigcrypt(password, this_salt),
+		      this_crypted) == 0);
 	if (!ret) {
 		DEBUG(2,
 		      ("OSF1_ENH_SEC failed. Trying normal crypt.\n"));
-		ret = (strcmp((char *)crypt(password, get_this_salt()), get_this_crypted()) == 0);
+		ret = (strcmp((char *)crypt(password, this_salt), this_crypted) == 0);
 	}
 	if (ret) {
 		return NT_STATUS_OK;
@@ -576,7 +526,7 @@
 #endif /* OSF1_ENH_SEC */
 	
 #ifdef ULTRIX_AUTH
-	ret = (strcmp((char *)crypt16(password, get_this_salt()), get_this_crypted()) == 0);
+	ret = (strcmp((char *)crypt16(password, this_salt), this_crypted) == 0);
 	if (ret) {
 		return NT_STATUS_OK;
         } else {
@@ -586,7 +536,7 @@
 #endif /* ULTRIX_AUTH */
 	
 #ifdef LINUX_BIGCRYPT
-	ret = (linux_bigcrypt(password, get_this_salt(), get_this_crypted()));
+	ret = (linux_bigcrypt(password, this_salt, this_crypted));
         if (ret) {
 		return NT_STATUS_OK;
 	} else {
@@ -603,10 +553,10 @@
 	 * by crypt.
 	 */
 
-	if (strcmp(bigcrypt(password, get_this_salt()), get_this_crypted()) == 0)
+	if (strcmp(bigcrypt(password, this_salt), this_crypted) == 0)
 		return NT_STATUS_OK;
 	else
-		ret = (strcmp((char *)crypt(password, get_this_salt()), get_this_crypted()) == 0);
+		ret = (strcmp((char *)crypt(password, this_salt), this_crypted) == 0);
 	if (ret) {
 		return NT_STATUS_OK;
 	} else {
@@ -615,7 +565,7 @@
 #else /* HAVE_BIGCRYPT && HAVE_CRYPT && USE_BOTH_CRYPT_CALLS */
 	
 #ifdef HAVE_BIGCRYPT
-	ret = (strcmp(bigcrypt(password, get_this_salt()), get_this_crypted()) == 0);
+	ret = (strcmp(bigcrypt(password, this_salt), this_crypted) == 0);
         if (ret) {
 		return NT_STATUS_OK;
 	} else {
@@ -627,7 +577,7 @@
 	DEBUG(1, ("Warning - no crypt available\n"));
 	return NT_STATUS_LOGON_FAILURE;
 #else /* HAVE_CRYPT */
-	ret = (strcmp((char *)crypt(password, get_this_salt()), get_this_crypted()) == 0);
+	ret = (strcmp((char *)crypt(password, this_salt), this_crypted) == 0);
         if (ret) {
 		return NT_STATUS_OK;
 	} else {
@@ -648,9 +598,9 @@
 ****************************************************************************/
 
 NTSTATUS pass_check(const struct passwd *pass, const char *user, const char *password, 
-		    int pwlen, bool (*fn) (const char *, const char *), bool run_cracker)
+		    int pwlen, BOOL (*fn) (const char *, const char *), BOOL run_cracker)
 {
-	char *pass2 = NULL;
+	pstring pass2;
 	int level = lp_passwordlevel();
 
 	NTSTATUS nt_status;
@@ -672,9 +622,7 @@
 	 * checks below and dive straight into the PAM code.
 	 */
 
-	if (set_this_user(user) == NULL) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	fstrcpy(this_user, user);
 
 	DEBUG(4, ("pass_check: Checking (PAM) password for user %s (l=%d)\n", user, pwlen));
 
@@ -691,12 +639,8 @@
 	/* Copy into global for the convenience of looping code */
 	/* Also the place to keep the 'password' no matter what
 	   crazy struct it started in... */
-	if (set_this_crypted(pass->pw_passwd) == NULL) {
-		return NT_STATUS_NO_MEMORY;
-	}
-	if (set_this_salt(pass->pw_passwd) == NULL) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	fstrcpy(this_crypted, pass->pw_passwd);
+	fstrcpy(this_salt, pass->pw_passwd);
 
 #ifdef HAVE_GETSPNAM
 	{
@@ -709,12 +653,8 @@
 
 		spass = getspnam(pass->pw_name);
 		if (spass && spass->sp_pwdp) {
-			if (set_this_crypted(spass->sp_pwdp) == NULL) {
-				return NT_STATUS_NO_MEMORY;
-			}
-			if (set_this_salt(spass->sp_pwdp) == NULL) {
-				return NT_STATUS_NO_MEMORY;
-			}
+			fstrcpy(this_crypted, spass->sp_pwdp);
+			fstrcpy(this_salt, spass->sp_pwdp);
 		}
 	}
 #elif defined(IA_UINFO)
@@ -732,11 +672,8 @@
 #ifdef HAVE_GETPRPWNAM
 	{
 		struct pr_passwd *pr_pw = getprpwnam(pass->pw_name);
-		if (pr_pw && pr_pw->ufld.fd_encrypt) {
-			if (set_this_crypted(pr_pw->ufld.fd_encrypt) == NULL) {
-				return NT_STATUS_NO_MEMORY;
-			}
-		}
+		if (pr_pw && pr_pw->ufld.fd_encrypt)
+			fstrcpy(this_crypted, pr_pw->ufld.fd_encrypt);
 	}
 #endif
 
@@ -744,11 +681,8 @@
 	{
 		struct passwd_adjunct *pwret;
 		pwret = getpwanam(s);
-		if (pwret && pwret->pwa_passwd) {
-			if (set_this_crypted(pwret->pwa_passwd) == NULL) {
-				return NT_STATUS_NO_MEMORY;
-			}
-		}
+		if (pwret && pwret->pwa_passwd)
+			fstrcpy(this_crypted, pwret->pwa_passwd);
 	}
 #endif
 
@@ -759,12 +693,8 @@
 			  user));
 		mypasswd = getprpwnam(user);
 		if (mypasswd) {
-			if (set_this_user(mypasswd->ufld.fd_name) == NULL) {
-				return NT_STATUS_NO_MEMORY;
-			}
-			if (set_this_crypted(mypasswd->ufld.fd_encrypt) == NULL) {
-				return NT_STATUS_NO_MEMORY;
-			}
+			fstrcpy(this_user, mypasswd->ufld.fd_name);
+			fstrcpy(this_crypted, mypasswd->ufld.fd_encrypt);
 		} else {
 			DEBUG(5,
 			      ("OSF1_ENH_SEC: No entry for user %s in protected database !\n",
@@ -777,10 +707,7 @@
 	{
 		AUTHORIZATION *ap = getauthuid(pass->pw_uid);
 		if (ap) {
-			if (set_this_crypted(ap->a_password) == NULL) {
-				endauthent();
-				return NT_STATUS_NO_MEMORY;
-			}
+			fstrcpy(this_crypted, ap->a_password);
 			endauthent();
 		}
 	}
@@ -789,28 +716,19 @@
 #if defined(HAVE_TRUNCATED_SALT)
 	/* crypt on some platforms (HPUX in particular)
 	   won't work with more than 2 salt characters. */
-	{
-		char *trunc_salt = get_this_salt();
-		if (!trunc_salt || strlen(trunc_salt) < 2) {
-			return NT_STATUS_LOGON_FAILURE;
-		}
-		trunc_salt[2] = 0;
-		if (set_this_salt(trunc_salt) == NULL) {
-			return NT_STATUS_NO_MEMORY;
-		}
-	}
+	this_salt[2] = 0;
 #endif
 
-	if (!get_this_crypted() || !*get_this_crypted()) {
+	if (!*this_crypted) {
 		if (!lp_null_passwords()) {
 			DEBUG(2, ("Disallowing %s with null password\n",
-				  get_this_user()));
+				  this_user));
 			return NT_STATUS_LOGON_FAILURE;
 		}
 		if (!*password) {
 			DEBUG(3,
 			      ("Allowing access to %s with null password\n",
-			       get_this_user()));
+			       this_user));
 			return NT_STATUS_OK;
 		}
 	}
@@ -841,10 +759,7 @@
 	}
 
 	/* make a copy of it */
-	pass2 = talloc_strdup(talloc_tos(), password);
-	if (!pass2) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	pstrcpy(pass2, password);
 
 	/* try all lowercase if it's currently all uppercase */
 	if (strhasupper(pass2)) {

Deleted: branches/samba/upstream/source/auth/token_util.c
===================================================================
--- branches/samba/upstream/source/auth/token_util.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/auth/token_util.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,500 +0,0 @@
-/*
- *  Unix SMB/CIFS implementation.
- *  Authentication utility functions
- *  Copyright (C) Andrew Tridgell 1992-1998
- *  Copyright (C) Andrew Bartlett 2001
- *  Copyright (C) Jeremy Allison 2000-2001
- *  Copyright (C) Rafal Szczesniak 2002
- *  Copyright (C) Volker Lendecke 2006
- *  Copyright (C) Michael Adam 2007
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-/* functions moved from auth/auth_util.c to minimize linker deps */
-
-#include "includes.h"
-
-/****************************************************************************
- Check for a SID in an NT_USER_TOKEN
-****************************************************************************/
-
-bool nt_token_check_sid ( const DOM_SID *sid, const NT_USER_TOKEN *token )
-{
-	int i;
-
-	if ( !sid || !token )
-		return False;
-
-	for ( i=0; i<token->num_sids; i++ ) {
-		if ( sid_equal( sid, &token->user_sids[i] ) )
-			return True;
-	}
-
-	return False;
-}
-
-bool nt_token_check_domain_rid( NT_USER_TOKEN *token, uint32 rid )
-{
-	DOM_SID domain_sid;
-
-	/* if we are a domain member, the get the domain SID, else for
-	   a DC or standalone server, use our own SID */
-
-	if ( lp_server_role() == ROLE_DOMAIN_MEMBER ) {
-		if ( !secrets_fetch_domain_sid( lp_workgroup(),
-						&domain_sid ) ) {
-			DEBUG(1,("nt_token_check_domain_rid: Cannot lookup "
-				 "SID for domain [%s]\n", lp_workgroup()));
-			return False;
-		}
-	}
-	else
-		sid_copy( &domain_sid, get_global_sam_sid() );
-
-	sid_append_rid( &domain_sid, rid );
-
-	return nt_token_check_sid( &domain_sid, token );\
-}
-
-/******************************************************************************
- Create a token for the root user to be used internally by smbd.
- This is similar to running under the context of the LOCAL_SYSTEM account
- in Windows.  This is a read-only token.  Do not modify it or free() it.
- Create a copy if your need to change it.
-******************************************************************************/
-
-NT_USER_TOKEN *get_root_nt_token( void )
-{
-	struct nt_user_token *token = NULL;
-	DOM_SID u_sid, g_sid;
-	struct passwd *pw;
-	void *cache_data;
-
-	cache_data = memcache_lookup_talloc(
-		NULL, SINGLETON_CACHE_TALLOC,
-		data_blob_string_const("root_nt_token"));
-
-	if (cache_data != NULL) {
-		return talloc_get_type_abort(
-			cache_data, struct nt_user_token);
-	}
-
-	if ( !(pw = sys_getpwnam( "root" )) ) {
-		DEBUG(0,("get_root_nt_token: getpwnam(\"root\") failed!\n"));
-		return NULL;
-	}
-
-	/* get the user and primary group SIDs; although the
-	   BUILTIN\Administrators SId is really the one that matters here */
-
-	uid_to_sid(&u_sid, pw->pw_uid);
-	gid_to_sid(&g_sid, pw->pw_gid);
-
-	token = create_local_nt_token(NULL, &u_sid, False,
-				      1, &global_sid_Builtin_Administrators);
-
-	token->privileges = se_disk_operators;
-
-	memcache_add_talloc(
-		NULL, SINGLETON_CACHE_TALLOC,
-		data_blob_string_const("root_nt_token"), token);
-
-	return token;
-}
-
-
-/*
- * Add alias SIDs from memberships within the partially created token SID list
- */
-
-NTSTATUS add_aliases(const DOM_SID *domain_sid,
-		     struct nt_user_token *token)
-{
-	uint32 *aliases;
-	size_t i, num_aliases;
-	NTSTATUS status;
-	TALLOC_CTX *tmp_ctx;
-
-	if (!(tmp_ctx = talloc_init("add_aliases"))) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	aliases = NULL;
-	num_aliases = 0;
-
-	status = pdb_enum_alias_memberships(tmp_ctx, domain_sid,
-					    token->user_sids,
-					    token->num_sids,
-					    &aliases, &num_aliases);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10, ("pdb_enum_alias_memberships failed: %s\n",
-			   nt_errstr(status)));
-		goto done;
-	}
-
-	for (i=0; i<num_aliases; i++) {
-		DOM_SID alias_sid;
-		sid_compose(&alias_sid, domain_sid, aliases[i]);
-		status = add_sid_to_array_unique(token, &alias_sid,
-						 &token->user_sids,
-						 &token->num_sids);
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(0, ("add_sid_to_array failed\n"));
-			goto done;
-		}
-	}
-
-done:
-	TALLOC_FREE(tmp_ctx);
-	return NT_STATUS_OK;
-}
-
-/*******************************************************************
-*******************************************************************/
-
-static NTSTATUS add_builtin_administrators( struct nt_user_token *token )
-{
-	DOM_SID domadm;
-	NTSTATUS status;
-
-	/* nothing to do if we aren't in a domain */
-
-	if ( !(IS_DC || lp_server_role()==ROLE_DOMAIN_MEMBER) ) {
-		return NT_STATUS_OK;
-	}
-
-	/* Find the Domain Admins SID */
-
-	if ( IS_DC ) {
-		sid_copy( &domadm, get_global_sam_sid() );
-	} else {
-		if ( !secrets_fetch_domain_sid( lp_workgroup(), &domadm ) )
-			return NT_STATUS_CANT_ACCESS_DOMAIN_INFO;
-	}
-	sid_append_rid( &domadm, DOMAIN_GROUP_RID_ADMINS );
-
-	/* Add Administrators if the user beloongs to Domain Admins */
-
-	if ( nt_token_check_sid( &domadm, token ) ) {
-		status = add_sid_to_array(token,
-					  &global_sid_Builtin_Administrators,
-					  &token->user_sids, &token->num_sids);
-	if (!NT_STATUS_IS_OK(status)) {
-			return status;
-		}
-	}
-
-	return NT_STATUS_OK;
-}
-
-/*******************************************************************
-*******************************************************************/
-
-static NTSTATUS create_builtin_users( void )
-{
-	NTSTATUS status;
-	DOM_SID dom_users;
-
-	status = pdb_create_builtin_alias( BUILTIN_ALIAS_RID_USERS );
-	if ( !NT_STATUS_IS_OK(status) ) {
-		DEBUG(5,("create_builtin_users: Failed to create Users\n"));
-		return status;
-	}
-
-	/* add domain users */
-	if ((IS_DC || (lp_server_role() == ROLE_DOMAIN_MEMBER))
-		&& secrets_fetch_domain_sid(lp_workgroup(), &dom_users))
-	{
-		sid_append_rid(&dom_users, DOMAIN_GROUP_RID_USERS );
-		status = pdb_add_aliasmem( &global_sid_Builtin_Users, &dom_users);
-		if ( !NT_STATUS_IS_OK(status) ) {
-			DEBUG(4,("create_builtin_administrators: Failed to add Domain Users to"
-				" Users\n"));
-			return status;
-		}
-	}
-
-	return NT_STATUS_OK;
-}
-
-/*******************************************************************
-*******************************************************************/
-
-static NTSTATUS create_builtin_administrators( void )
-{
-	NTSTATUS status;
-	DOM_SID dom_admins, root_sid;
-	fstring root_name;
-	enum lsa_SidType type;
-	TALLOC_CTX *ctx;
-	bool ret;
-
-	status = pdb_create_builtin_alias( BUILTIN_ALIAS_RID_ADMINS );
-	if ( !NT_STATUS_IS_OK(status) ) {
-		DEBUG(5,("create_builtin_administrators: Failed to create Administrators\n"));
-		return status;
-	}
-
-	/* add domain admins */
-	if ((IS_DC || (lp_server_role() == ROLE_DOMAIN_MEMBER))
-		&& secrets_fetch_domain_sid(lp_workgroup(), &dom_admins))
-	{
-		sid_append_rid(&dom_admins, DOMAIN_GROUP_RID_ADMINS);
-		status = pdb_add_aliasmem( &global_sid_Builtin_Administrators, &dom_admins );
-		if ( !NT_STATUS_IS_OK(status) ) {
-			DEBUG(4,("create_builtin_administrators: Failed to add Domain Admins"
-				" Administrators\n"));
-			return status;
-		}
-	}
-
-	/* add root */
-	if ( (ctx = talloc_init("create_builtin_administrators")) == NULL ) {
-		return NT_STATUS_NO_MEMORY;
-	}
-	fstr_sprintf( root_name, "%s\\root", get_global_sam_name() );
-	ret = lookup_name(ctx, root_name, LOOKUP_NAME_DOMAIN, NULL, NULL,
-			  &root_sid, &type);
-	TALLOC_FREE( ctx );
-
-	if ( ret ) {
-		status = pdb_add_aliasmem( &global_sid_Builtin_Administrators, &root_sid );
-		if ( !NT_STATUS_IS_OK(status) ) {
-			DEBUG(4,("create_builtin_administrators: Failed to add root"
-				" Administrators\n"));
-			return status;
-		}
-	}
-
-	return NT_STATUS_OK;
-}
-
-
-/*******************************************************************
- Create a NT token for the user, expanding local aliases
-*******************************************************************/
-
-struct nt_user_token *create_local_nt_token(TALLOC_CTX *mem_ctx,
-					    const DOM_SID *user_sid,
-					    bool is_guest,
-					    int num_groupsids,
-					    const DOM_SID *groupsids)
-{
-	struct nt_user_token *result = NULL;
-	int i;
-	NTSTATUS status;
-	gid_t gid;
-
-	DEBUG(10, ("Create local NT token for %s\n",
-		   sid_string_dbg(user_sid)));
-
-	if (!(result = TALLOC_ZERO_P(mem_ctx, struct nt_user_token))) {
-		DEBUG(0, ("talloc failed\n"));
-		return NULL;
-	}
-
-	/* Add the user and primary group sid */
-
-	status = add_sid_to_array(result, user_sid,
-				  &result->user_sids, &result->num_sids);
-	if (!NT_STATUS_IS_OK(status)) {
-		return NULL;
-	}
-
-	/* For guest, num_groupsids may be zero. */
-	if (num_groupsids) {
-		status = add_sid_to_array(result, &groupsids[0],
-					  &result->user_sids,
-					  &result->num_sids);
-		if (!NT_STATUS_IS_OK(status)) {
-			return NULL;
-		}
-	}
-
-	/* Add in BUILTIN sids */
-
-	status = add_sid_to_array(result, &global_sid_World,
-				  &result->user_sids, &result->num_sids);
-	if (!NT_STATUS_IS_OK(status)) {
-		return NULL;
-	}
-	status = add_sid_to_array(result, &global_sid_Network,
-				  &result->user_sids, &result->num_sids);
-	if (!NT_STATUS_IS_OK(status)) {
-		return NULL;
-	}
-
-	if (is_guest) {
-		status = add_sid_to_array(result, &global_sid_Builtin_Guests,
-					  &result->user_sids,
-					  &result->num_sids);
-		if (!NT_STATUS_IS_OK(status)) {
-			return NULL;
-		}
-	} else {
-		status = add_sid_to_array(result,
-					  &global_sid_Authenticated_Users,
-					  &result->user_sids,
-					  &result->num_sids);
-		if (!NT_STATUS_IS_OK(status)) {
-			return NULL;
-		}
-	}
-
-	/* Now the SIDs we got from authentication. These are the ones from
-	 * the info3 struct or from the pdb_enum_group_memberships, depending
-	 * on who authenticated the user.
-	 * Note that we start the for loop at "1" here, we already added the
-	 * first group sid as primary above. */
-
-	for (i=1; i<num_groupsids; i++) {
-		status = add_sid_to_array_unique(result, &groupsids[i],
-						 &result->user_sids,
-						 &result->num_sids);
-		if (!NT_STATUS_IS_OK(status)) {
-			return NULL;
-		}
-	}
-
-	/* Deal with the BUILTIN\Administrators group.  If the SID can
-	   be resolved then assume that the add_aliasmem( S-1-5-32 )
-	   handled it. */
-
-	if ( !sid_to_gid( &global_sid_Builtin_Administrators, &gid ) ) {
-		/* We can only create a mapping if winbind is running
-		   and the nested group functionality has been enabled */
-
-		if ( lp_winbind_nested_groups() && winbind_ping() ) {
-			become_root();
-			status = create_builtin_administrators( );
-			if ( !NT_STATUS_IS_OK(status) ) {
-				DEBUG(2,("WARNING: Failed to create BUILTIN\\Administrators "
-					 "group!  Can Winbind allocate gids?\n"));
-				/* don't fail, just log the message */
-			}
-			unbecome_root();
-		}
-		else {
-			status = add_builtin_administrators( result );
-			if ( !NT_STATUS_IS_OK(status) ) {
-				/* just log a complaint but do not fail */
-				DEBUG(3,("create_local_nt_token: failed to check for local Administrators"
-					" membership (%s)\n", nt_errstr(status)));
-			}
-		}
-	}
-
-	/* Deal with the BUILTIN\Users group.  If the SID can
-	   be resolved then assume that the add_aliasmem( S-1-5-32 )
-	   handled it. */
-
-	if ( !sid_to_gid( &global_sid_Builtin_Users, &gid ) ) {
-		/* We can only create a mapping if winbind is running
-		   and the nested group functionality has been enabled */
-
-		if ( lp_winbind_nested_groups() && winbind_ping() ) {
-			become_root();
-			status = create_builtin_users( );
-			if ( !NT_STATUS_IS_OK(status) ) {
-				DEBUG(2,("WARNING: Failed to create BUILTIN\\Users group! "
-					 "Can Winbind allocate gids?\n"));
-				/* don't fail, just log the message */
-			}
-			unbecome_root();
-		}
-	}
-
-	/* Deal with local groups */
-
-	if (lp_winbind_nested_groups()) {
-
-		become_root();
-
-		/* Now add the aliases. First the one from our local SAM */
-
-		status = add_aliases(get_global_sam_sid(), result);
-
-		if (!NT_STATUS_IS_OK(status)) {
-			unbecome_root();
-			TALLOC_FREE(result);
-			return NULL;
-		}
-
-		/* Finally the builtin ones */
-
-		status = add_aliases(&global_sid_Builtin, result);
-
-		if (!NT_STATUS_IS_OK(status)) {
-			unbecome_root();
-			TALLOC_FREE(result);
-			return NULL;
-		}
-
-		unbecome_root();
-	}
-
-
-	get_privileges_for_sids(&result->privileges, result->user_sids,
-				result->num_sids);
-	return result;
-}
-
-/****************************************************************************
- prints a NT_USER_TOKEN to debug output.
-****************************************************************************/
-
-void debug_nt_user_token(int dbg_class, int dbg_lev, NT_USER_TOKEN *token)
-{
-	size_t     i;
-
-	if (!token) {
-		DEBUGC(dbg_class, dbg_lev, ("NT user token: (NULL)\n"));
-		return;
-	}
-
-	DEBUGC(dbg_class, dbg_lev,
-	       ("NT user token of user %s\n",
-		sid_string_dbg(&token->user_sids[0]) ));
-	DEBUGADDC(dbg_class, dbg_lev,
-		  ("contains %lu SIDs\n", (unsigned long)token->num_sids));
-	for (i = 0; i < token->num_sids; i++)
-		DEBUGADDC(dbg_class, dbg_lev,
-			  ("SID[%3lu]: %s\n", (unsigned long)i,
-			   sid_string_dbg(&token->user_sids[i])));
-
-	dump_se_priv( dbg_class, dbg_lev, &token->privileges );
-}
-
-/****************************************************************************
- prints a UNIX 'token' to debug output.
-****************************************************************************/
-
-void debug_unix_user_token(int dbg_class, int dbg_lev, uid_t uid, gid_t gid,
-			   int n_groups, gid_t *groups)
-{
-	int     i;
-	DEBUGC(dbg_class, dbg_lev,
-	       ("UNIX token of user %ld\n", (long int)uid));
-
-	DEBUGADDC(dbg_class, dbg_lev,
-		  ("Primary group is %ld and contains %i supplementary "
-		   "groups\n", (long int)gid, n_groups));
-	for (i = 0; i < n_groups; i++)
-		DEBUGADDC(dbg_class, dbg_lev, ("Group[%3i]: %ld\n", i,
-			(long int)groups[i]));
-}
-
-/* END */

Modified: branches/samba/upstream/source/autogen.sh
===================================================================
--- branches/samba/upstream/source/autogen.sh	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/autogen.sh	2008-06-15 01:55:18 UTC (rev 1953)
@@ -16,7 +16,7 @@
 ##
 for i in $TESTAUTOHEADER; do
 	if which $i > /dev/null 2>&1; then
-		if test `$i --version | head -n 1 | cut -d.  -f 2 | sed "s/[^0-9]//g"` -ge 53; then
+		if test `$i --version | head -n 1 | cut -d.  -f 2 | tr -d [:alpha:]` -ge 53; then
 			AUTOHEADER=$i
 			AUTOHEADERFOUND="1"
 			break
@@ -30,7 +30,7 @@
 
 for i in $TESTAUTOCONF; do
 	if which $i > /dev/null 2>&1; then
-		if test `$i --version | head -n 1 | cut -d.  -f 2 | sed "s/[^0-9]//g"` -ge 53; then
+		if test `$i --version | head -n 1 | cut -d.  -f 2 | tr -d [:alpha:]` -ge 53; then
 			AUTOCONF=$i
 			AUTOCONFFOUND="1"
 			break
@@ -53,7 +53,7 @@
 rm -rf autom4te*.cache
 rm -f configure include/config.h*
 
-IPATHS="-Im4 -Ilib/replace"
+IPATHS="-I. -Ilib/replace"
 
 echo "$0: running $AUTOHEADER $IPATHS"
 $AUTOHEADER $IPATHS || exit 1

Deleted: branches/samba/upstream/source/client/cifs.spnego.c
===================================================================
--- branches/samba/upstream/source/client/cifs.spnego.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/client/cifs.spnego.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,360 +0,0 @@
-/*
-* CIFS SPNEGO user-space helper.
-* Copyright (C) Igor Mammedov (niallain at gmail.com) 2007
-*
-* Used by /sbin/request-key for handling
-* cifs upcall for kerberos authorization of access to share and
-* cifs upcall for DFS srver name resolving (IPv4/IPv6 aware).
-* You should have keyutils installed and add following line to
-* /etc/request-key.conf file
-
-create cifs.spnego * * /usr/local/sbin/cifs.spnego [-v][-c] %k
-create cifs.resolver * * /usr/local/sbin/cifs.spnego [-v] %k
-
-* This program is free software; you can redistribute it and/or modify
-* it under the terms of the GNU General Public License as published by
-* the Free Software Foundation; either version 2 of the License, or
-* (at your option) any later version.
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-
-#include "includes.h"
-#include <keyutils.h>
-
-#include "cifs_spnego.h"
-
-const char *CIFSSPNEGO_VERSION = "1.1";
-static const char *prog = "cifs.spnego";
-typedef enum _secType {
-	KRB5,
-	MS_KRB5
-} secType_t;
-
-/*
- * Prepares AP-REQ data for mechToken and gets session key
- * Uses credentials from cache. It will not ask for password
- * you should receive credentials for yuor name manually using
- * kinit or whatever you wish.
- *
- * in:
- * 	oid -		string with OID/ Could be OID_KERBEROS5
- * 			or OID_KERBEROS5_OLD
- * 	principal -	Service name.
- * 			Could be "cifs/FQDN" for KRB5 OID
- * 			or for MS_KRB5 OID style server principal
- * 			like "pdc$@YOUR.REALM.NAME"
- *
- * out:
- * 	secblob -	pointer for spnego wrapped AP-REQ data to be stored
- * 	sess_key-	pointer for SessionKey data to be stored
- *
- * ret: 0 - success, others - failure
-*/
-int handle_krb5_mech(const char *oid, const char *principal,
-		     DATA_BLOB * secblob, DATA_BLOB * sess_key)
-{
-	int retval;
-	DATA_BLOB tkt, tkt_wrapped;
-
-	/* get a kerberos ticket for the service and extract the session key */
-	retval = cli_krb5_get_ticket(principal, 0,
-				     &tkt, sess_key, 0, NULL, NULL);
-
-	if (retval)
-		return retval;
-
-	/* wrap that up in a nice GSS-API wrapping */
-	tkt_wrapped = spnego_gen_krb5_wrap(tkt, TOK_ID_KRB_AP_REQ);
-
-	/* and wrap that in a shiny SPNEGO wrapper */
-	*secblob = gen_negTokenInit(OID_KERBEROS5, tkt_wrapped);
-
-	data_blob_free(&tkt_wrapped);
-	data_blob_free(&tkt);
-	return retval;
-}
-
-#define DKD_HAVE_HOSTNAME	1
-#define DKD_HAVE_VERSION	2
-#define DKD_HAVE_SEC		4
-#define DKD_HAVE_IPV4		8
-#define DKD_HAVE_IPV6		16
-#define DKD_HAVE_UID		32
-#define DKD_MUSTHAVE_SET (DKD_HAVE_HOSTNAME|DKD_HAVE_VERSION|DKD_HAVE_SEC)
-
-int decode_key_description(const char *desc, int *ver, secType_t * sec,
-			   char **hostname, uid_t * uid)
-{
-	int retval = 0;
-	char *pos;
-	const char *tkn = desc;
-
-	do {
-		pos = index(tkn, ';');
-		if (strncmp(tkn, "host=", 5) == 0) {
-			int len;
-
-			if (pos == NULL) {
-				len = strlen(tkn);
-			} else {
-				len = pos - tkn;
-			}
-			len -= 4;
-			SAFE_FREE(*hostname);
-			*hostname = SMB_XMALLOC_ARRAY(char, len);
-			strlcpy(*hostname, tkn + 5, len);
-			retval |= DKD_HAVE_HOSTNAME;
-		} else if (strncmp(tkn, "ipv4=", 5) == 0) {
-			/* BB: do we need it if we have hostname already? */
-		} else if (strncmp(tkn, "ipv6=", 5) == 0) {
-			/* BB: do we need it if we have hostname already? */
-		} else if (strncmp(tkn, "sec=", 4) == 0) {
-			if (strncmp(tkn + 4, "krb5", 4) == 0) {
-				retval |= DKD_HAVE_SEC;
-				*sec = KRB5;
-			}
-		} else if (strncmp(tkn, "uid=", 4) == 0) {
-			errno = 0;
-			*uid = strtol(tkn + 4, NULL, 16);
-			if (errno != 0) {
-				syslog(LOG_WARNING, "Invalid uid format: %s",
-				       strerror(errno));
-				return 1;
-			} else {
-				retval |= DKD_HAVE_UID;
-			}
-		} else if (strncmp(tkn, "ver=", 4) == 0) {	/* if version */
-			errno = 0;
-			*ver = strtol(tkn + 4, NULL, 16);
-			if (errno != 0) {
-				syslog(LOG_WARNING,
-				       "Invalid version format: %s",
-				       strerror(errno));
-				return 1;
-			} else {
-				retval |= DKD_HAVE_VERSION;
-			}
-		}
-		if (pos == NULL)
-			break;
-		tkn = pos + 1;
-	} while (tkn);
-	return retval;
-}
-
-int cifs_resolver(const key_serial_t key, const char *key_descr)
-{
-	int c;
-	struct addrinfo *addr;
-	char ip[INET6_ADDRSTRLEN];
-	void *p;
-	const char *keyend = key_descr;
-	/* skip next 4 ';' delimiters to get to description */
-	for (c = 1; c <= 4; c++) {
-		keyend = index(keyend+1, ';');
-		if (!keyend) {
-			syslog(LOG_WARNING, "invalid key description: %s",
-					key_descr);
-			return 1;
-		}
-	}
-	keyend++;
-
-	/* resolve name to ip */
-	c = getaddrinfo(keyend, NULL, NULL, &addr);
-	if (c) {
-		syslog(LOG_WARNING, "unable to resolve hostname: %s [%s]",
-				keyend, gai_strerror(c));
-		return 1;
-	}
-
-	/* conver ip to string form */
-	if (addr->ai_family == AF_INET) {
-		p = &(((struct sockaddr_in *)addr->ai_addr)->sin_addr);
-	} else {
-		p = &(((struct sockaddr_in6 *)addr->ai_addr)->sin6_addr);
-	}
-	if (!inet_ntop(addr->ai_family, p, ip, sizeof(ip))) {
-		syslog(LOG_WARNING, "%s: inet_ntop: %s",
-				__FUNCTION__, strerror(errno));
-		freeaddrinfo(addr);
-		return 1;
-	}
-
-	/* setup key */
-	c = keyctl_instantiate(key, ip, strlen(ip)+1, 0);
-	if (c == -1) {
-		syslog(LOG_WARNING, "%s: keyctl_instantiate: %s",
-				__FUNCTION__, strerror(errno));
-		freeaddrinfo(addr);
-		return 1;
-	}
-
-	freeaddrinfo(addr);
-	return 0;
-}
-
-int main(const int argc, char *const argv[])
-{
-	struct cifs_spnego_msg *keydata = NULL;
-	DATA_BLOB secblob = data_blob_null;
-	DATA_BLOB sess_key = data_blob_null;
-	secType_t sectype;
-	key_serial_t key;
-	size_t datalen;
-	long rc = 1;
-	uid_t uid;
-	int kernel_upcall_version;
-	int c, use_cifs_service_prefix = 0;
-	char *buf, *hostname = NULL;
-
-	openlog(prog, 0, LOG_DAEMON);
-	if (argc < 1) {
-		syslog(LOG_WARNING, "Usage: %s [-c] key_serial", prog);
-		goto out;
-	}
-
-	while ((c = getopt(argc, argv, "cv")) != -1) {
-		switch (c) {
-		case 'c':{
-			use_cifs_service_prefix = 1;
-			break;
-			}
-		case 'v':{
-			syslog(LOG_WARNING, "version: %s", CIFSSPNEGO_VERSION);
-			fprintf(stderr, "version: %s", CIFSSPNEGO_VERSION);
-			break;
-			}
-		default:{
-			syslog(LOG_WARNING, "unknow option: %c", c);
-			goto out;
-			}
-		}
-	}
-	/* get key and keyring values */
-	errno = 0;
-	key = strtol(argv[optind], NULL, 10);
-	if (errno != 0) {
-		syslog(LOG_WARNING, "Invalid key format: %s", strerror(errno));
-		goto out;
-	}
-
-	rc = keyctl_describe_alloc(key, &buf);
-	if (rc == -1) {
-		syslog(LOG_WARNING, "keyctl_describe_alloc failed: %s",
-		       strerror(errno));
-		rc = 1;
-		goto out;
-	}
-
-	if (strncmp(buf, "cifs.resolver", sizeof("cifs.resolver")-1) == 0) {
-		rc = cifs_resolver(key, buf);
-		goto out;
-	}
-
-	rc = decode_key_description(buf, &kernel_upcall_version, &sectype,
-				    &hostname, &uid);
-	if ((rc & DKD_MUSTHAVE_SET) != DKD_MUSTHAVE_SET) {
-		syslog(LOG_WARNING,
-		       "unable to get from description necessary params");
-		rc = 1;
-		SAFE_FREE(buf);
-		goto out;
-	}
-	SAFE_FREE(buf);
-
-	if (kernel_upcall_version != CIFS_SPNEGO_UPCALL_VERSION) {
-		syslog(LOG_WARNING,
-		       "incompatible kernel upcall version: 0x%x",
-		       kernel_upcall_version);
-		rc = 1;
-		goto out;
-	}
-
-	if (rc & DKD_HAVE_UID) {
-		rc = setuid(uid);
-		if (rc == -1) {
-			syslog(LOG_WARNING, "setuid: %s", strerror(errno));
-			goto out;
-		}
-	}
-
-	/* BB: someday upcall SPNEGO blob could be checked here to decide
-	 * what mech to use */
-
-	// do mech specific authorization
-	switch (sectype) {
-	case KRB5:{
-			char *princ;
-			size_t len;
-
-			/* for "cifs/" service name + terminating 0 */
-			len = strlen(hostname) + 5 + 1;
-			princ = SMB_XMALLOC_ARRAY(char, len);
-			if (!princ) {
-				rc = 1;
-				break;
-			}
-			if (use_cifs_service_prefix) {
-				strlcpy(princ, "cifs/", len);
-			} else {
-				strlcpy(princ, "host/", len);
-			}
-			strlcpy(princ + 5, hostname, len - 5);
-
-			rc = handle_krb5_mech(OID_KERBEROS5, princ,
-					      &secblob, &sess_key);
-			SAFE_FREE(princ);
-			break;
-		}
-	default:{
-			syslog(LOG_WARNING, "sectype: %d is not implemented",
-			       sectype);
-			rc = 1;
-			break;
-		}
-	}
-
-	if (rc) {
-		goto out;
-	}
-
-	/* pack SecurityBLob and SessionKey into downcall packet */
-	datalen =
-	    sizeof(struct cifs_spnego_msg) + secblob.length + sess_key.length;
-	keydata = (struct cifs_spnego_msg*)SMB_XMALLOC_ARRAY(char, datalen);
-	if (!keydata) {
-		rc = 1;
-		goto out;
-	}
-	keydata->version = CIFS_SPNEGO_UPCALL_VERSION;
-	keydata->flags = 0;
-	keydata->sesskey_len = sess_key.length;
-	keydata->secblob_len = secblob.length;
-	memcpy(&(keydata->data), sess_key.data, sess_key.length);
-	memcpy(&(keydata->data) + keydata->sesskey_len,
-	       secblob.data, secblob.length);
-
-	/* setup key */
-	rc = keyctl_instantiate(key, keydata, datalen, 0);
-	if (rc == -1) {
-		syslog(LOG_WARNING, "keyctl_instantiate: %s", strerror(errno));
-		goto out;
-	}
-
-	/* BB: maybe we need use timeout for key: for example no more then
-	 * ticket lifietime? */
-	/* keyctl_set_timeout( key, 60); */
-      out:
-	data_blob_free(&secblob);
-	data_blob_free(&sess_key);
-	SAFE_FREE(hostname);
-	SAFE_FREE(keydata);
-	return rc;
-}

Deleted: branches/samba/upstream/source/client/cifs_spnego.h
===================================================================
--- branches/samba/upstream/source/client/cifs_spnego.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/client/cifs_spnego.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,46 +0,0 @@
-/*
- *   fs/cifs/cifs_spnego.h -- SPNEGO upcall management for CIFS
- *
- *   Copyright (c) 2007 Red Hat, Inc.
- *   Author(s): Jeff Layton (jlayton at redhat.com)
- *              Steve French (sfrench at us.ibm.com)
- *
- *   This library is free software; you can redistribute it and/or modify
- *   it under the terms of the GNU Lesser General Public License as published
- *   by the Free Software Foundation; either version 2.1 of the License, or
- *   (at your option) any later version.
- *
- *   This library is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
- *   the GNU Lesser General Public License for more details.
- *
- *   You should have received a copy of the GNU Lesser General Public License
- *   along with this library; if not, write to the Free Software
- *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef _CIFS_SPNEGO_H
-#define _CIFS_SPNEGO_H
-
-#define CIFS_SPNEGO_UPCALL_VERSION 1
-
-/*
- * The version field should always be set to CIFS_SPNEGO_UPCALL_VERSION.
- * The flags field is for future use. The request-key callout should set
- * sesskey_len and secblob_len, and then concatenate the SessKey+SecBlob
- * and stuff it in the data field.
- */
-struct cifs_spnego_msg {
-	uint32_t version;
-	uint32_t flags;
-	uint32_t sesskey_len;
-	uint32_t secblob_len;
-	uint8_t data[1];
-};
-
-#ifdef __KERNEL__
-extern struct key_type cifs_spnego_key_type;
-#endif				/* KERNEL */
-
-#endif				/* _CIFS_SPNEGO_H */

Modified: branches/samba/upstream/source/client/client.c
===================================================================
--- branches/samba/upstream/source/client/client.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/client/client.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,24 +1,24 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    SMB client
    Copyright (C) Andrew Tridgell          1994-1998
    Copyright (C) Simo Sorce               2001-2002
    Copyright (C) Jelmer Vernooij          2003
    Copyright (C) Gerald (Jerry) Carter    2004
-   Copyright (C) Jeremy Allison           1994-2007
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -28,29 +28,31 @@
 #define REGISTER 0
 #endif
 
-extern int do_smb_browse(void); /* mDNS browsing */
-
-extern bool AllowDebugChange;
-extern bool override_logfile;
+extern BOOL AllowDebugChange;
+extern BOOL override_logfile;
 extern char tar_type;
-
+extern BOOL in_client;
 static int port = 0;
-static char *service;
-static char *desthost;
-static char *calling_name;
-static bool grepable = false;
+pstring cur_dir = "\\";
+static pstring cd_path = "";
+static pstring service;
+static pstring desthost;
+static pstring username;
+static pstring calling_name;
+static BOOL grepable=False;
 static char *cmdstr = NULL;
-static const char *cmd_ptr = NULL;
 
-static int io_bufsize = 524288;
+static int io_bufsize = 64512;
 
 static int name_type = 0x20;
 extern int max_protocol;
 
-static int process_tok(char *tok);
+static int process_tok(pstring tok);
 static int cmd_help(void);
 
+static TALLOC_CTX *ctx;
 #define CREATE_ACCESS_READ READ_CONTROL_ACCESS
+static pstring cwd;
 
 /* 30 second timeout on most commands */
 #define CLIENT_TIMEOUT (30*1000)
@@ -62,27 +64,32 @@
 time_t newer_than = 0;
 static int archive_level = 0;
 
-static bool translation = false;
-static bool have_ip;
+static BOOL translation = False;
+static BOOL have_ip;
 
 /* clitar bits insert */
 extern int blocksize;
-extern bool tar_inc;
-extern bool tar_reset;
+extern BOOL tar_inc;
+extern BOOL tar_reset;
 /* clitar bits end */
+ 
 
-static bool prompt = true;
+static BOOL prompt = True;
 
-static bool recurse = false;
-static bool showacls = false;
-bool lowercase = false;
+static BOOL recurse = False;
+static BOOL showacls = False;
+BOOL lowercase = False;
 
-static struct sockaddr_storage dest_ss;
+static struct in_addr dest_ip;
 
 #define SEPARATORS " \t\n\r"
 
-static bool abort_mget = true;
+static BOOL abort_mget = True;
 
+static pstring fileselection = "";
+
+extern file_info def_finfo;
+
 /* timing globals */
 SMB_BIG_UINT get_total_size = 0;
 unsigned int get_total_time_ms = 0;
@@ -92,9 +99,6 @@
 /* totals globals */
 static double dir_total;
 
-/* encrypted state. */
-static bool smb_encrypt;
-
 /* root cli_state connection */
 
 struct cli_state *cli;
@@ -102,63 +106,8 @@
 static char CLI_DIRSEP_CHAR = '\\';
 static char CLI_DIRSEP_STR[] = { '\\', '\0' };
 
-/* Accessor functions for directory paths. */
-static char *fileselection;
-static const char *client_get_fileselection(void)
-{
-	if (fileselection) {
-		return fileselection;
-	}
-	return "";
-}
-
-static const char *client_set_fileselection(const char *new_fs)
-{
-	SAFE_FREE(fileselection);
-	if (new_fs) {
-		fileselection = SMB_STRDUP(new_fs);
-	}
-	return client_get_fileselection();
-}
-
-static char *cwd;
-static const char *client_get_cwd(void)
-{
-	if (cwd) {
-		return cwd;
-	}
-	return CLI_DIRSEP_STR;
-}
-
-static const char *client_set_cwd(const char *new_cwd)
-{
-	SAFE_FREE(cwd);
-	if (new_cwd) {
-		cwd = SMB_STRDUP(new_cwd);
-	}
-	return client_get_cwd();
-}
-
-static char *cur_dir;
-const char *client_get_cur_dir(void)
-{
-	if (cur_dir) {
-		return cur_dir;
-	}
-	return CLI_DIRSEP_STR;
-}
-
-const char *client_set_cur_dir(const char *newdir)
-{
-	SAFE_FREE(cur_dir);
-	if (newdir) {
-		cur_dir = SMB_STRDUP(newdir);
-	}
-	return client_get_cur_dir();
-}
-
 /****************************************************************************
- Write to a local file with CR/LF->LF translation if appropriate. Return the
+ Write to a local file with CR/LF->LF translation if appropriate. Return the 
  number taken from the buffer. This may not equal the number written.
 ****************************************************************************/
 
@@ -181,12 +130,12 @@
 		b++;
 		i++;
 	}
-
+  
 	return(i);
 }
 
 /****************************************************************************
- Read from a file with LF->CR/LF translation if appropriate. Return the
+ Read from a file with LF->CR/LF translation if appropriate. Return the 
  number read. read approx n bytes.
 ****************************************************************************/
 
@@ -197,23 +146,23 @@
 
 	if (!translation)
 		return x_fread(b,1,n,f);
-
+  
 	i = 0;
 	while (i < (n - 1) && (i < BUFFER_SIZE)) {
 		if ((c = x_getc(f)) == EOF) {
 			break;
 		}
-
+      
 		if (c == '\n') { /* change all LFs to CR/LF */
 			b[i++] = '\r';
 		}
-
+      
 		b[i++] = c;
 	}
-
+  
 	return(i);
 }
-
+ 
 /****************************************************************************
  Send a message.
 ****************************************************************************/
@@ -223,8 +172,7 @@
 	int total_len = 0;
 	int grp_id;
 
-	if (!cli_message_start(cli, desthost,
-				get_cmdline_auth_info_username(), &grp_id)) {
+	if (!cli_message_start(cli, desthost, username, &grp_id)) {
 		d_printf("message start: %s\n", cli_errstr(cli));
 		return;
 	}
@@ -234,7 +182,7 @@
 
 	while (!feof(stdin) && total_len < 1600) {
 		int maxlen = MIN(1600 - total_len,127);
-		char msg[1024];
+		pstring msg;
 		int l=0;
 		int c;
 
@@ -243,7 +191,7 @@
 		for (l=0;l<maxlen && (c=fgetc(stdin))!=EOF;l++) {
 			if (c == '\n')
 				msg[l++] = '\r';
-			msg[l] = c;
+			msg[l] = c;   
 		}
 
 		if ((total_len > 0) && (strlen(msg) == 0)) {
@@ -253,8 +201,8 @@
 		if (!cli_message_text(cli, msg, l, grp_id)) {
 			d_printf("SMBsendtxt failed (%s)\n",cli_errstr(cli));
 			return;
-		}
-
+		}      
+		
 		total_len += l;
 	}
 
@@ -266,7 +214,7 @@
 	if (!cli_message_end(cli, grp_id)) {
 		d_printf("SMBsendend failed (%s)\n",cli_errstr(cli));
 		return;
-	}
+	}      
 }
 
 /****************************************************************************
@@ -276,17 +224,16 @@
 static int do_dskattr(void)
 {
 	int total, bsize, avail;
-	struct cli_state *targetcli = NULL;
-	char *targetpath = NULL;
-	TALLOC_CTX *ctx = talloc_tos();
+	struct cli_state *targetcli;
+	pstring targetpath;
 
-	if ( !cli_resolve_path(ctx, "", cli, client_get_cur_dir(), &targetcli, &targetpath)) {
+	if ( !cli_resolve_path( "", cli, cur_dir, &targetcli, targetpath ) ) {
 		d_printf("Error in dskattr: %s\n", cli_errstr(cli));
 		return 1;
 	}
 
 	if (!cli_dskattr(targetcli, &bsize, &total, &avail)) {
-		d_printf("Error in dskattr: %s\n",cli_errstr(targetcli));
+		d_printf("Error in dskattr: %s\n",cli_errstr(targetcli)); 
 		return 1;
 	}
 
@@ -303,130 +250,86 @@
 static int cmd_pwd(void)
 {
 	d_printf("Current directory is %s",service);
-	d_printf("%s\n",client_get_cur_dir());
+	d_printf("%s\n",cur_dir);
 	return 0;
 }
 
 /****************************************************************************
- Ensure name has correct directory separators.
-****************************************************************************/
-
-static void normalize_name(char *newdir)
-{
-	if (!(cli->posix_capabilities & CIFS_UNIX_POSIX_PATHNAMES_CAP)) {
-		string_replace(newdir,'/','\\');
-	}
-}
-
-/****************************************************************************
  Change directory - inner section.
 ****************************************************************************/
 
-static int do_cd(const char *new_dir)
+static int do_cd(char *newdir)
 {
-	char *newdir = NULL;
-	char *saved_dir = NULL;
-	char *new_cd = NULL;
-	char *targetpath = NULL;
-	struct cli_state *targetcli = NULL;
+	char *p = newdir;
+	pstring saved_dir;
+	pstring dname;
+	pstring targetpath;
+	struct cli_state *targetcli;
 	SMB_STRUCT_STAT sbuf;
 	uint32 attributes;
 	int ret = 1;
-	TALLOC_CTX *ctx = talloc_stackframe();
+      
+	dos_format(newdir);
 
-	newdir = talloc_strdup(ctx, new_dir);
-	if (!newdir) {
-		TALLOC_FREE(ctx);
-		return 1;
-	}
-
-	normalize_name(newdir);
-
 	/* Save the current directory in case the new directory is invalid */
 
-	saved_dir = talloc_strdup(ctx, client_get_cur_dir());
-	if (!saved_dir) {
-		TALLOC_FREE(ctx);
-		return 1;
-	}
+	pstrcpy(saved_dir, cur_dir);
 
-	if (*newdir == CLI_DIRSEP_CHAR) {
-		client_set_cur_dir(newdir);
-		new_cd = newdir;
+	if (*p == CLI_DIRSEP_CHAR) {
+		pstrcpy(cur_dir,p);
 	} else {
-		new_cd = talloc_asprintf(ctx, "%s%s",
-				client_get_cur_dir(),
-				newdir);
-		if (!new_cd) {
-			goto out;
-		}
+		pstrcat(cur_dir,p);
 	}
 
 	/* Ensure cur_dir ends in a DIRSEP */
-	if ((new_cd[0] != '\0') && (*(new_cd+strlen(new_cd)-1) != CLI_DIRSEP_CHAR)) {
-		new_cd = talloc_asprintf_append(new_cd, CLI_DIRSEP_STR);
-		if (!new_cd) {
-			goto out;
-		}
+	if ((cur_dir[0] != '\0') && (*(cur_dir+strlen(cur_dir)-1) != CLI_DIRSEP_CHAR)) {
+		pstrcat(cur_dir, CLI_DIRSEP_STR);
 	}
-	client_set_cur_dir(new_cd);
-
-	new_cd = clean_name(ctx, new_cd);
-	client_set_cur_dir(new_cd);
-
-	if ( !cli_resolve_path(ctx, "", cli, new_cd, &targetcli, &targetpath)) {
-		d_printf("cd %s: %s\n", new_cd, cli_errstr(cli));
-		client_set_cur_dir(saved_dir);
+	
+	clean_name(cur_dir);
+	pstrcpy( dname, cur_dir );
+	
+	if ( !cli_resolve_path( "", cli, dname, &targetcli, targetpath ) ) {
+		d_printf("cd %s: %s\n", dname, cli_errstr(cli));
+		pstrcpy(cur_dir,saved_dir);
 		goto out;
 	}
 
 	if (strequal(targetpath,CLI_DIRSEP_STR )) {
-		TALLOC_FREE(ctx);
 		return 0;
 	}
-
+		
 	/* Use a trans2_qpathinfo to test directories for modern servers.
-	   Except Win9x doesn't support the qpathinfo_basic() call..... */
-
-	if (targetcli->protocol > PROTOCOL_LANMAN2 && !targetcli->win95) {
-		if (!cli_qpathinfo_basic( targetcli, targetpath, &sbuf, &attributes ) ) {
-			d_printf("cd %s: %s\n", new_cd, cli_errstr(targetcli));
-			client_set_cur_dir(saved_dir);
+	   Except Win9x doesn't support the qpathinfo_basic() call..... */ 
+	
+	if ( targetcli->protocol >  PROTOCOL_LANMAN2 && !targetcli->win95 ) {
+		if ( !cli_qpathinfo_basic( targetcli, targetpath, &sbuf, &attributes ) ) {
+			d_printf("cd %s: %s\n", dname, cli_errstr(targetcli));
+			pstrcpy(cur_dir,saved_dir);
 			goto out;
 		}
-
-		if (!(attributes & FILE_ATTRIBUTE_DIRECTORY)) {
-			d_printf("cd %s: not a directory\n", new_cd);
-			client_set_cur_dir(saved_dir);
+		
+		if ( !(attributes&FILE_ATTRIBUTE_DIRECTORY) ) {
+			d_printf("cd %s: not a directory\n", dname);
+			pstrcpy(cur_dir,saved_dir);
 			goto out;
-		}
+		}		
 	} else {
-		targetpath = talloc_asprintf(ctx,
-				"%s%s",
-				targetpath,
-				CLI_DIRSEP_STR );
-		if (!targetpath) {
-			client_set_cur_dir(saved_dir);
+		pstrcat( targetpath, CLI_DIRSEP_STR );
+		clean_name( targetpath );
+		
+		if ( !cli_chkpath(targetcli, targetpath) ) {
+			d_printf("cd %s: %s\n", dname, cli_errstr(targetcli));
+			pstrcpy(cur_dir,saved_dir);
 			goto out;
 		}
-		targetpath = clean_name(ctx, targetpath);
-		if (!targetpath) {
-			client_set_cur_dir(saved_dir);
-			goto out;
-		}
-
-		if (!cli_chkpath(targetcli, targetpath)) {
-			d_printf("cd %s: %s\n", new_cd, cli_errstr(targetcli));
-			client_set_cur_dir(saved_dir);
-			goto out;
-		}
 	}
 
 	ret = 0;
 
 out:
-
-	TALLOC_FREE(ctx);
+	
+	pstrcpy(cd_path,cur_dir);
 	return ret;
 }
 
@@ -436,120 +339,93 @@
 
 static int cmd_cd(void)
 {
-	char *buf = NULL;
+	pstring buf;
 	int rc = 0;
-
-	if (next_token_talloc(talloc_tos(), &cmd_ptr, &buf,NULL)) {
+		
+	if (next_token_nr(NULL,buf,NULL,sizeof(buf)))
 		rc = do_cd(buf);
-	} else {
-		d_printf("Current directory is %s\n",client_get_cur_dir());
-	}
+	else
+		d_printf("Current directory is %s\n",cur_dir);
 
 	return rc;
 }
 
-/****************************************************************************
- Change directory.
-****************************************************************************/
-
-static int cmd_cd_oneup(void)
-{
-	return do_cd("..");
-}
-
 /*******************************************************************
  Decide if a file should be operated on.
 ********************************************************************/
 
-static bool do_this_one(file_info *finfo)
+static BOOL do_this_one(file_info *finfo)
 {
-	if (!finfo->name) {
-		return false;
-	}
+	if (finfo->mode & aDIR)
+		return(True);
 
-	if (finfo->mode & aDIR) {
-		return true;
-	}
-
-	if (*client_get_fileselection() &&
-	    !mask_match(finfo->name,client_get_fileselection(),false)) {
+	if (*fileselection && 
+	    !mask_match(finfo->name,fileselection,False)) {
 		DEBUG(3,("mask_match %s failed\n", finfo->name));
-		return false;
+		return False;
 	}
 
 	if (newer_than && finfo->mtime_ts.tv_sec < newer_than) {
 		DEBUG(3,("newer_than %s failed\n", finfo->name));
-		return false;
+		return(False);
 	}
 
 	if ((archive_level==1 || archive_level==2) && !(finfo->mode & aARCH)) {
 		DEBUG(3,("archive %s failed\n", finfo->name));
-		return false;
+		return(False);
 	}
-
-	return true;
+	
+	return(True);
 }
 
 /****************************************************************************
  Display info about a file.
 ****************************************************************************/
 
-static void display_finfo(file_info *finfo, const char *dir)
+static void display_finfo(file_info *finfo)
 {
-	time_t t;
-	TALLOC_CTX *ctx = talloc_tos();
-
-	if (!do_this_one(finfo)) {
-		return;
-	}
-
-	t = finfo->mtime_ts.tv_sec; /* the time is assumed to be passed as GMT */
-	if (!showacls) {
-		d_printf("  %-30s%7.7s %8.0f  %s",
-			 finfo->name,
-			 attrib_string(finfo->mode),
-		 	(double)finfo->size,
-			time_to_asc(t));
-		dir_total += finfo->size;
-	} else {
-		char *afname = NULL;
-		int fnum;
-
-		/* skip if this is . or .. */
-		if ( strequal(finfo->name,"..") || strequal(finfo->name,".") )
-			return;
-		/* create absolute filename for cli_nt_create() FIXME */
-		afname = talloc_asprintf(ctx,
-					"%s%s%s",
-					client_get_cwd(),
-					CLI_DIRSEP_STR,
-					finfo->name);
-		if (!afname) {
-			return;
-		}
-		/* print file meta date header */
-		d_printf( "FILENAME:%s\n", afname);
-		d_printf( "MODE:%s\n", attrib_string(finfo->mode));
-		d_printf( "SIZE:%.0f\n", (double)finfo->size);
-		d_printf( "MTIME:%s", time_to_asc(t));
-		fnum = cli_nt_create(finfo->cli, afname, CREATE_ACCESS_READ);
-		if (fnum == -1) {
-			DEBUG( 0, ("display_finfo() Failed to open %s: %s\n",
-				afname,
-				cli_errstr( finfo->cli)));
+	if (do_this_one(finfo)) {
+		time_t t = finfo->mtime_ts.tv_sec; /* the time is assumed to be passed as GMT */
+		if (!showacls) {
+			d_printf("  %-30s%7.7s %8.0f  %s",
+				 finfo->name,
+				 attrib_string(finfo->mode),
+			 	(double)finfo->size,
+				time_to_asc(t));
+			dir_total += finfo->size;
 		} else {
-			SEC_DESC *sd = NULL;
-			sd = cli_query_secdesc(finfo->cli, fnum, ctx);
-			if (!sd) {
-				DEBUG( 0, ("display_finfo() failed to "
-					"get security descriptor: %s",
+			pstring afname;
+			int fnum;
+
+			/* skip if this is . or .. */
+			if ( strequal(finfo->name,"..") || strequal(finfo->name,".") )
+				return;
+			/* create absolute filename for cli_nt_create() FIXME */
+			pstrcpy( afname, cwd);
+			pstrcat( afname, CLI_DIRSEP_STR);
+			pstrcat( afname, finfo->name);
+			/* print file meta date header */
+			d_printf( "FILENAME:%s\n", afname);
+			d_printf( "MODE:%s\n", attrib_string(finfo->mode));
+			d_printf( "SIZE:%.0f\n", (double)finfo->size);
+			d_printf( "MTIME:%s", time_to_asc(t));
+			fnum = cli_nt_create(finfo->cli, afname, CREATE_ACCESS_READ);
+			if (fnum == -1) {
+				DEBUG( 0, ("display_finfo() Failed to open %s: %s\n",
+					afname,
 					cli_errstr( finfo->cli)));
 			} else {
-				display_sec_desc(sd);
+				SEC_DESC *sd = NULL;
+				sd = cli_query_secdesc(finfo->cli, fnum, ctx);
+				if (!sd) {
+					DEBUG( 0, ("display_finfo() failed to "
+						"get security descriptor: %s",
+						cli_errstr( finfo->cli)));
+				} else {
+					display_sec_desc(sd);
+				}
 			}
-			TALLOC_FREE(sd);
 		}
-		TALLOC_FREE(afname);
 	}
 }
 
@@ -557,20 +433,20 @@
  Accumulate size of a file.
 ****************************************************************************/
 
-static void do_du(file_info *finfo, const char *dir)
+static void do_du(file_info *finfo)
 {
 	if (do_this_one(finfo)) {
 		dir_total += finfo->size;
 	}
 }
 
-static bool do_list_recurse;
-static bool do_list_dirs;
+static BOOL do_list_recurse;
+static BOOL do_list_dirs;
 static char *do_list_queue = 0;
 static long do_list_queue_size = 0;
 static long do_list_queue_start = 0;
 static long do_list_queue_end = 0;
-static void (*do_list_fn)(file_info *, const char *dir);
+static void (*do_list_fn)(file_info *);
 
 /****************************************************************************
  Functions for do_list_queue.
@@ -601,7 +477,7 @@
 	reset_do_list_queue();
 	do_list_queue_size = 1024;
 	do_list_queue = (char *)SMB_MALLOC(do_list_queue_size);
-	if (do_list_queue == 0) {
+	if (do_list_queue == 0) { 
 		d_printf("malloc fail for size %d\n",
 			 (int)do_list_queue_size);
 		reset_do_list_queue();
@@ -622,7 +498,7 @@
 		do_list_queue_start = do_list_queue_end = 0;
 		return;
 	}
-
+		
 	if (do_list_queue_start == do_list_queue_end) {
 		DEBUG(4,("do_list_queue is empty\n"));
 		do_list_queue_start = do_list_queue_end = 0;
@@ -637,7 +513,7 @@
 	}
 }
 
-static void add_to_do_list_queue(const char *entry)
+static void add_to_do_list_queue(const char* entry)
 {
 	long new_end = do_list_queue_end + ((long)strlen(entry)) + 1;
 	while (new_end > do_list_queue_size) {
@@ -655,7 +531,7 @@
 		}
 	}
 	if (do_list_queue) {
-		safe_strcpy_base(do_list_queue + do_list_queue_end,
+		safe_strcpy_base(do_list_queue + do_list_queue_end, 
 				 entry, do_list_queue, do_list_queue_size);
 		do_list_queue_end = new_end;
 		DEBUG(4,("added %s to do_list_queue (start=%d, end=%d)\n",
@@ -689,85 +565,57 @@
 
 static void do_list_helper(const char *mntpoint, file_info *f, const char *mask, void *state)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *dir = NULL;
-	char *dir_end = NULL;
+	char *dir_end;
 
-	/* Work out the directory. */
-	dir = talloc_strdup(ctx, mask);
-	if (!dir) {
-		return;
-	}
-	if ((dir_end = strrchr(dir, CLI_DIRSEP_CHAR)) != NULL) {
+	/* save the directory */
+	pstrcpy( f->dir, mask );
+	if ( (dir_end = strrchr( f->dir, CLI_DIRSEP_CHAR )) != NULL ) {
 		*dir_end = '\0';
 	}
 
 	if (f->mode & aDIR) {
 		if (do_list_dirs && do_this_one(f)) {
-			do_list_fn(f, dir);
+			do_list_fn(f);
 		}
-		if (do_list_recurse &&
-		    f->name &&
-		    !strequal(f->name,".") &&
+		if (do_list_recurse && 
+		    !strequal(f->name,".") && 
 		    !strequal(f->name,"..")) {
-			char *mask2 = NULL;
-			char *p = NULL;
+			pstring mask2;
+			char *p;
 
 			if (!f->name[0]) {
 				d_printf("Empty dir name returned. Possible server misconfiguration.\n");
-				TALLOC_FREE(dir);
 				return;
 			}
 
-			mask2 = talloc_asprintf(ctx,
-					"%s%s",
-					mntpoint,
-					mask);
-			if (!mask2) {
-				TALLOC_FREE(dir);
-				return;
-			}
+			pstrcpy(mask2, mntpoint);
+			pstrcat(mask2, mask);
 			p = strrchr_m(mask2,CLI_DIRSEP_CHAR);
-			if (!p) {
-				TALLOC_FREE(dir);
+			if (!p)
 				return;
-			}
 			p[1] = 0;
-			mask2 = talloc_asprintf_append(mask2,
-					"%s%s*",
-					f->name,
-					CLI_DIRSEP_STR);
-			if (!mask2) {
-				TALLOC_FREE(dir);
-				return;
-			}
+			pstrcat(mask2, f->name);
+			pstrcat(mask2,CLI_DIRSEP_STR);
+			pstrcat(mask2,"*");
 			add_to_do_list_queue(mask2);
-			TALLOC_FREE(mask2);
 		}
-		TALLOC_FREE(dir);
 		return;
 	}
 
 	if (do_this_one(f)) {
-		do_list_fn(f,dir);
+		do_list_fn(f);
 	}
-	TALLOC_FREE(dir);
 }
 
 /****************************************************************************
  A wrapper around cli_list that adds recursion.
 ****************************************************************************/
 
-void do_list(const char *mask,
-			uint16 attribute,
-			void (*fn)(file_info *, const char *dir),
-			bool rec,
-			bool dirs)
+void do_list(const char *mask,uint16 attribute,void (*fn)(file_info *),BOOL rec, BOOL dirs)
 {
 	static int in_do_list = 0;
-	TALLOC_CTX *ctx = talloc_tos();
-	struct cli_state *targetcli = NULL;
-	char *targetpath = NULL;
+	struct cli_state *targetcli;
+	pstring targetpath;
 
 	if (in_do_list && rec) {
 		fprintf(stderr, "INTERNAL ERROR: do_list called recursively when the recursive flag is true\n");
@@ -783,8 +631,8 @@
 	if (rec) {
 		init_do_list_queue();
 		add_to_do_list_queue(mask);
-
-		while (!do_list_queue_empty()) {
+		
+		while (! do_list_queue_empty()) {
 			/*
 			 * Need to copy head so that it doesn't become
 			 * invalid inside the call to cli_list.  This
@@ -792,35 +640,30 @@
 			 * during the call.
 			 * Fix from E. Jay Berkenbilt (ejb at ql.org)
 			 */
-			char *head = talloc_strdup(ctx, do_list_queue_head());
-
-			if (!head) {
-				return;
-			}
-
+			pstring head;
+			pstrcpy(head, do_list_queue_head());
+			
 			/* check for dfs */
-
-			if ( !cli_resolve_path(ctx, "", cli, head, &targetcli, &targetpath ) ) {
+			
+			if ( !cli_resolve_path( "", cli, head, &targetcli, targetpath ) ) {
 				d_printf("do_list: [%s] %s\n", head, cli_errstr(cli));
 				remove_do_list_queue_head();
 				continue;
 			}
-
+			
 			cli_list(targetcli, targetpath, attribute, do_list_helper, NULL);
 			remove_do_list_queue_head();
 			if ((! do_list_queue_empty()) && (fn == display_finfo)) {
-				char *next_file = do_list_queue_head();
-				char *save_ch = 0;
+				char* next_file = do_list_queue_head();
+				char* save_ch = 0;
 				if ((strlen(next_file) >= 2) &&
 				    (next_file[strlen(next_file) - 1] == '*') &&
 				    (next_file[strlen(next_file) - 2] == CLI_DIRSEP_CHAR)) {
 					save_ch = next_file +
 						strlen(next_file) - 2;
 					*save_ch = '\0';
-					if (showacls) {
-						/* cwd is only used if showacls is on */
-						client_set_cwd(next_file);
-					}
+					if (showacls) /* cwd is only used if showacls is on */
+						pstrcpy( cwd, next_file);
 				}
 				if (!showacls) /* don't disturbe the showacls output */
 					d_printf("\n%s\n",next_file);
@@ -828,20 +671,17 @@
 					*save_ch = CLI_DIRSEP_CHAR;
 				}
 			}
-			TALLOC_FREE(head);
-			TALLOC_FREE(targetpath);
 		}
 	} else {
 		/* check for dfs */
-		if (cli_resolve_path(ctx, "", cli, mask, &targetcli, &targetpath)) {
-			if (cli_list(targetcli, targetpath, attribute, do_list_helper, NULL) == -1) {
-				d_printf("%s listing %s\n",
-					cli_errstr(targetcli), targetpath);
-			}
-			TALLOC_FREE(targetpath);
-		} else {
-			d_printf("do_list: [%s] %s\n", mask, cli_errstr(cli));
+			
+		if ( cli_resolve_path( "", cli, mask, &targetcli, targetpath ) ) {
+			if (cli_list(targetcli, targetpath, attribute, do_list_helper, NULL) == -1) 
+				d_printf("%s listing %s\n", cli_errstr(targetcli), targetpath);
 		}
+		else
+			d_printf("do_list: [%s] %s\n", mask, cli_errstr(cli));
+		
 	}
 
 	in_do_list = 0;
@@ -854,38 +694,31 @@
 
 static int cmd_dir(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
 	uint16 attribute = aDIR | aSYSTEM | aHIDDEN;
-	char *mask = NULL;
-	char *buf = NULL;
-	int rc = 1;
-
+	pstring mask;
+	pstring buf;
+	char *p=buf;
+	int rc;
+	
 	dir_total = 0;
-	mask = talloc_strdup(ctx, client_get_cur_dir());
-	if (!mask) {
-		return 1;
-	}
-
-	if (next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
-		normalize_name(buf);
-		if (*buf == CLI_DIRSEP_CHAR) {
-			mask = talloc_strdup(ctx, buf);
-		} else {
-			mask = talloc_asprintf_append(mask, buf);
-		}
+	pstrcpy(mask,cur_dir);
+	
+	if (next_token_nr(NULL,buf,NULL,sizeof(buf))) {
+		dos_format(p);
+		if (*p == CLI_DIRSEP_CHAR)
+			pstrcpy(mask,p);
+		else
+			pstrcat(mask,p);
 	} else {
-		mask = talloc_asprintf_append(mask, "*");
+		pstrcat(mask,"*");
 	}
-	if (!mask) {
-		return 1;
-	}
 
 	if (showacls) {
 		/* cwd is only used if showacls is on */
-		client_set_cwd(client_get_cur_dir());
+		pstrcpy(cwd, cur_dir);
 	}
 
-	do_list(mask, attribute, display_finfo, recurse, true);
+	do_list(mask, attribute, display_finfo, recurse, True);
 
 	rc = do_dskattr();
 
@@ -900,36 +733,26 @@
 
 static int cmd_du(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
 	uint16 attribute = aDIR | aSYSTEM | aHIDDEN;
-	char *mask = NULL;
-	char *buf = NULL;
-	int rc = 1;
-
+	pstring mask;
+	pstring buf;
+	char *p=buf;
+	int rc;
+	
 	dir_total = 0;
-	mask = talloc_strdup(ctx, client_get_cur_dir());
-	if (!mask) {
-		return 1;
-	}
-	if ((mask[0] != '\0') && (mask[strlen(mask)-1]!=CLI_DIRSEP_CHAR)) {
-		mask = talloc_asprintf_append(mask, CLI_DIRSEP_STR);
-		if (!mask) {
-			return 1;
-		}
-	}
+	pstrcpy(mask,cur_dir);
 
-	if (next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
-		normalize_name(buf);
-		if (*buf == CLI_DIRSEP_CHAR) {
-			mask = talloc_strdup(ctx, buf);
-		} else {
-			mask = talloc_asprintf_append(mask, buf);
-		}
+	if (next_token_nr(NULL,buf,NULL,sizeof(buf))) {
+		dos_format(p);
+		if (*p == CLI_DIRSEP_CHAR)
+			pstrcpy(mask,p);
+		else
+			pstrcat(mask,p);
 	} else {
-		mask = talloc_strdup(ctx, "*");
+		pstrcat(mask,"*");
 	}
 
-	do_list(mask, attribute, do_du, recurse, true);
+	do_list(mask, attribute, do_du, recurse, True);
 
 	rc = do_dskattr();
 
@@ -938,72 +761,37 @@
 	return rc;
 }
 
-static int cmd_echo(void)
-{
-	TALLOC_CTX *ctx = talloc_tos();
-	char *num;
-	char *data;
-
-	if (!next_token_talloc(ctx, &cmd_ptr, &num, NULL)
-	    || !next_token_talloc(ctx, &cmd_ptr, &data, NULL)) {
-		d_printf("echo <num> <data>\n");
-		return 1;
-	}
-
-	if (!cli_echo(cli, atoi(num), (uint8 *)data, strlen(data))) {
-		d_printf("echo failed: %s\n",
-			 nt_errstr(cli_get_nt_error(cli)));
-		return 1;
-	}
-
-	return 0;
-}
-
 /****************************************************************************
  Get a file from rname to lname
 ****************************************************************************/
 
-static NTSTATUS writefile_sink(char *buf, size_t n, void *priv)
-{
-	int *pfd = (int *)priv;
-	if (writefile(*pfd, buf, n) == -1) {
-		return map_nt_error_from_unix(errno);
-	}
-	return NT_STATUS_OK;
-}
-
-static int do_get(const char *rname, const char *lname_in, bool reget)
-{
-	TALLOC_CTX *ctx = talloc_tos();
+static int do_get(char *rname, char *lname, BOOL reget)
+{  
 	int handle = 0, fnum;
-	bool newhandle = false;
+	BOOL newhandle = False;
+	char *data;
 	struct timeval tp_start;
+	int read_size = io_bufsize;
 	uint16 attr;
 	SMB_OFF_T size;
 	off_t start = 0;
-	SMB_OFF_T nread = 0;
+	off_t nread = 0;
 	int rc = 0;
-	struct cli_state *targetcli = NULL;
-	char *targetname = NULL;
-	char *lname = NULL;
-	NTSTATUS status;
+	struct cli_state *targetcli;
+	pstring targetname;
 
-	lname = talloc_strdup(ctx, lname_in);
-	if (!lname) {
-		return 1;
-	}
 
 	if (lowercase) {
 		strlower_m(lname);
 	}
 
-	if (!cli_resolve_path(ctx, "", cli, rname, &targetcli, &targetname ) ) {
+	if ( !cli_resolve_path( "", cli, rname, &targetcli, targetname ) ) {
 		d_printf("Failed to open %s: %s\n", rname, cli_errstr(cli));
 		return 1;
 	}
 
 	GetTimeOfDay(&tp_start);
-
+	
 	fnum = cli_open(targetcli, targetname, O_RDONLY, DENY_NONE);
 
 	if (fnum == -1) {
@@ -1026,7 +814,7 @@
 		} else {
 			handle = sys_open(lname, O_WRONLY|O_CREAT|O_TRUNC, 0644);
 		}
-		newhandle = true;
+		newhandle = True;
 	}
 	if (handle < 0) {
 		d_printf("Error opening local file %s\n",lname);
@@ -1034,26 +822,47 @@
 	}
 
 
-	if (!cli_qfileinfo(targetcli, fnum,
+	if (!cli_qfileinfo(targetcli, fnum, 
 			   &attr, &size, NULL, NULL, NULL, NULL, NULL) &&
-	    !cli_getattrE(targetcli, fnum,
+	    !cli_getattrE(targetcli, fnum, 
 			  &attr, &size, NULL, NULL, NULL)) {
 		d_printf("getattrib: %s\n",cli_errstr(targetcli));
 		return 1;
 	}
 
-	DEBUG(1,("getting file %s of size %.0f as %s ",
+	DEBUG(1,("getting file %s of size %.0f as %s ", 
 		 rname, (double)size, lname));
 
-	status = cli_pull(targetcli, fnum, start, size, io_bufsize,
-			  writefile_sink, (void *)&handle, &nread);
-	if (!NT_STATUS_IS_OK(status)) {
-		d_fprintf(stderr, "parallel_read returned %s\n",
-			  nt_errstr(status));
+	if(!(data = (char *)SMB_MALLOC(read_size))) { 
+		d_printf("malloc fail for size %d\n", read_size);
 		cli_close(targetcli, fnum);
 		return 1;
 	}
 
+	while (1) {
+		int n = cli_read(targetcli, fnum, data, nread + start, read_size);
+
+		if (n <= 0)
+			break;
+ 
+		if (writefile(handle,data, n) != n) {
+			d_printf("Error writing local file\n");
+			rc = 1;
+			break;
+		}
+      
+		nread += n;
+	}
+
+	if (nread + start < size) {
+		DEBUG (0, ("Short read when getting file %s. Only got %ld bytes.\n",
+			    rname, (long)nread));
+
+		rc = 1;
+	}
+
+	SAFE_FREE(data);
+	
 	if (!cli_close(targetcli, fnum)) {
 		d_printf("Error %s closing remote file\n",cli_errstr(cli));
 		rc = 1;
@@ -1070,20 +879,19 @@
 	{
 		struct timeval tp_end;
 		int this_time;
-
+		
 		GetTimeOfDay(&tp_end);
-		this_time =
+		this_time = 
 			(tp_end.tv_sec - tp_start.tv_sec)*1000 +
 			(tp_end.tv_usec - tp_start.tv_usec)/1000;
 		get_total_time_ms += this_time;
 		get_total_size += nread;
-
+		
 		DEBUG(1,("(%3.1f kb/s) (average %3.1f kb/s)\n",
 			 nread / (1.024*this_time + 1.0e-4),
 			 get_total_size / (1.024*get_total_time_ms)));
 	}
-
-	TALLOC_FREE(targetname);
+	
 	return rc;
 }
 
@@ -1093,54 +901,37 @@
 
 static int cmd_get(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *lname = NULL;
-	char *rname = NULL;
-	char *fname = NULL;
+	pstring lname;
+	pstring rname;
+	char *p;
 
-	rname = talloc_strdup(ctx, client_get_cur_dir());
-	if (!rname) {
+	pstrcpy(rname,cur_dir);
+	
+	p = rname + strlen(rname);
+	
+	if (!next_token_nr(NULL,p,NULL,sizeof(rname)-strlen(rname))) {
+		d_printf("get <filename>\n");
 		return 1;
 	}
-
-	if (!next_token_talloc(ctx, &cmd_ptr,&fname,NULL)) {
-		d_printf("get <filename> [localname]\n");
-		return 1;
-	}
-	rname = talloc_asprintf_append(rname, fname);
-	if (!rname) {
-		return 1;
-	}
-	rname = clean_name(ctx, rname);
-	if (!rname) {
-		return 1;
-	}
-
-	next_token_talloc(ctx, &cmd_ptr,&lname,NULL);
-	if (!lname) {
-		lname = fname;
-	}
-
-	return do_get(rname, lname, false);
+	pstrcpy(lname,p);
+	clean_name(rname);
+	
+	next_token_nr(NULL,lname,NULL,sizeof(lname));
+	
+	return do_get(rname, lname, False);
 }
 
 /****************************************************************************
  Do an mget operation on one file.
 ****************************************************************************/
 
-static void do_mget(file_info *finfo, const char *dir)
+static void do_mget(file_info *finfo)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *rname = NULL;
-	char *quest = NULL;
-	char *saved_curdir = NULL;
-	char *mget_mask = NULL;
-	char *new_cd = NULL;
+	pstring rname;
+	pstring quest;
+	pstring saved_curdir;
+	pstring mget_mask;
 
-	if (!finfo->name) {
-		return;
-	}
-
 	if (strequal(finfo->name,".") || strequal(finfo->name,".."))
 		return;
 
@@ -1149,85 +940,52 @@
 		return;
 	}
 
-	if (finfo->mode & aDIR) {
-		if (asprintf(&quest,
-			 "Get directory %s? ",finfo->name) < 0) {
-			return;
-		}
-	} else {
-		if (asprintf(&quest,
-			 "Get file %s? ",finfo->name) < 0) {
-			return;
-		}
-	}
+	if (finfo->mode & aDIR)
+		slprintf(quest,sizeof(pstring)-1,
+			 "Get directory %s? ",finfo->name);
+	else
+		slprintf(quest,sizeof(pstring)-1,
+			 "Get file %s? ",finfo->name);
 
-	if (prompt && !yesno(quest)) {
-		SAFE_FREE(quest);
+	if (prompt && !yesno(quest))
 		return;
-	}
-	SAFE_FREE(quest);
 
 	if (!(finfo->mode & aDIR)) {
-		rname = talloc_asprintf(ctx,
-				"%s%s",
-				client_get_cur_dir(),
-				finfo->name);
-		if (!rname) {
-			return;
-		}
-		do_get(rname, finfo->name, false);
-		TALLOC_FREE(rname);
+		pstrcpy(rname,cur_dir);
+		pstrcat(rname,finfo->name);
+		do_get(rname, finfo->name, False);
 		return;
 	}
 
 	/* handle directories */
-	saved_curdir = talloc_strdup(ctx, client_get_cur_dir());
-	if (!saved_curdir) {
-		return;
-	}
+	pstrcpy(saved_curdir,cur_dir);
 
-	new_cd = talloc_asprintf(ctx,
-				"%s%s%s",
-				client_get_cur_dir(),
-				finfo->name,
-				CLI_DIRSEP_STR);
-	if (!new_cd) {
-		return;
-	}
-	client_set_cur_dir(new_cd);
+	pstrcat(cur_dir,finfo->name);
+	pstrcat(cur_dir,CLI_DIRSEP_STR);
 
-	string_replace(finfo->name,'\\','/');
-	if (lowercase) {
+	unix_format(finfo->name);
+	if (lowercase)
 		strlower_m(finfo->name);
-	}
-
-	if (!directory_exist(finfo->name,NULL) &&
+	
+	if (!directory_exist(finfo->name,NULL) && 
 	    mkdir(finfo->name,0777) != 0) {
 		d_printf("failed to create directory %s\n",finfo->name);
-		client_set_cur_dir(saved_curdir);
+		pstrcpy(cur_dir,saved_curdir);
 		return;
 	}
-
+	
 	if (chdir(finfo->name) != 0) {
 		d_printf("failed to chdir to directory %s\n",finfo->name);
-		client_set_cur_dir(saved_curdir);
+		pstrcpy(cur_dir,saved_curdir);
 		return;
 	}
 
-	mget_mask = talloc_asprintf(ctx,
-			"%s*",
-			client_get_cur_dir());
-
-	if (!mget_mask) {
-		return;
-	}
-
-	do_list(mget_mask, aSYSTEM | aHIDDEN | aDIR,do_mget,false, true);
+	pstrcpy(mget_mask,cur_dir);
+	pstrcat(mget_mask,"*");
+	
+	do_list(mget_mask, aSYSTEM | aHIDDEN | aDIR,do_mget,False, True);
 	chdir("..");
-	client_set_cur_dir(saved_curdir);
-	TALLOC_FREE(mget_mask);
-	TALLOC_FREE(saved_curdir);
-	TALLOC_FREE(new_cd);
+	pstrcpy(cur_dir,saved_curdir);
 }
 
 /****************************************************************************
@@ -1236,24 +994,14 @@
 
 static int cmd_more(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *rname = NULL;
-	char *fname = NULL;
-	char *lname = NULL;
-	char *pager_cmd = NULL;
-	const char *pager;
+	pstring rname,lname,pager_cmd;
+	char *pager;
 	int fd;
 	int rc = 0;
 
-	rname = talloc_strdup(ctx, client_get_cur_dir());
-	if (!rname) {
-		return 1;
-	}
-
-	lname = talloc_asprintf(ctx, "%s/smbmore.XXXXXX",tmpdir());
-	if (!lname) {
-		return 1;
-	}
+	pstrcpy(rname,cur_dir);
+	
+	slprintf(lname,sizeof(lname)-1, "%s/smbmore.XXXXXX",tmpdir());
 	fd = smb_mkstemp(lname);
 	if (fd == -1) {
 		d_printf("failed to create temporary file for more\n");
@@ -1261,34 +1009,22 @@
 	}
 	close(fd);
 
-	if (!next_token_talloc(ctx, &cmd_ptr,&fname,NULL)) {
+	if (!next_token_nr(NULL,rname+strlen(rname),NULL,sizeof(rname)-strlen(rname))) {
 		d_printf("more <filename>\n");
 		unlink(lname);
 		return 1;
 	}
-	rname = talloc_asprintf_append(rname, fname);
-	if (!rname) {
-		return 1;
-	}
-	rname = clean_name(ctx,rname);
-	if (!rname) {
-		return 1;
-	}
+	clean_name(rname);
 
-	rc = do_get(rname, lname, false);
+	rc = do_get(rname, lname, False);
 
 	pager=getenv("PAGER");
 
-	pager_cmd = talloc_asprintf(ctx,
-				"%s %s",
-				(pager? pager:PAGER),
-				lname);
-	if (!pager_cmd) {
-		return 1;
-	}
+	slprintf(pager_cmd,sizeof(pager_cmd)-1,
+		 "%s %s",(pager? pager:PAGER), lname);
 	system(pager_cmd);
 	unlink(lname);
-
+	
 	return rc;
 }
 
@@ -1298,44 +1034,34 @@
 
 static int cmd_mget(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
 	uint16 attribute = aSYSTEM | aHIDDEN;
-	char *mget_mask = NULL;
-	char *buf = NULL;
+	pstring mget_mask;
+	pstring buf;
+	char *p=buf;
 
-	if (recurse) {
+	*mget_mask = 0;
+
+	if (recurse)
 		attribute |= aDIR;
-	}
+	
+	abort_mget = False;
 
-	abort_mget = false;
-
-	while (next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
-		mget_mask = talloc_strdup(ctx, client_get_cur_dir());
-		if (!mget_mask) {
-			return 1;
-		}
-		if (*buf == CLI_DIRSEP_CHAR) {
-			mget_mask = talloc_strdup(ctx, buf);
-		} else {
-			mget_mask = talloc_asprintf_append(mget_mask,
-							buf);
-		}
-		if (!mget_mask) {
-			return 1;
-		}
-		do_list(mget_mask, attribute, do_mget, false, true);
+	while (next_token_nr(NULL,p,NULL,sizeof(buf))) {
+		pstrcpy(mget_mask,cur_dir);
+		
+		if (*p == CLI_DIRSEP_CHAR)
+			pstrcpy(mget_mask,p);
+		else
+			pstrcat(mget_mask,p);
+		do_list(mget_mask, attribute,do_mget,False,True);
 	}
 
 	if (!*mget_mask) {
-		mget_mask = talloc_asprintf(ctx,
-					"%s*",
-					client_get_cur_dir());
-		if (!mget_mask) {
-			return 1;
-		}
-		do_list(mget_mask, attribute, do_mget, false, true);
+		pstrcpy(mget_mask,cur_dir);
+		pstrcat(mget_mask,"*");
+		do_list(mget_mask, attribute,do_mget,False,True);
 	}
-
+	
 	return 0;
 }
 
@@ -1343,42 +1069,40 @@
  Make a directory of name "name".
 ****************************************************************************/
 
-static bool do_mkdir(const char *name)
+static BOOL do_mkdir(char *name)
 {
-	TALLOC_CTX *ctx = talloc_tos();
 	struct cli_state *targetcli;
-	char *targetname = NULL;
-
-	if (!cli_resolve_path(ctx, "", cli, name, &targetcli, &targetname)) {
+	pstring targetname;
+	
+	if ( !cli_resolve_path( "", cli, name, &targetcli, targetname ) ) {
 		d_printf("mkdir %s: %s\n", name, cli_errstr(cli));
-		return false;
+		return False;
 	}
 
 	if (!cli_mkdir(targetcli, targetname)) {
 		d_printf("%s making remote directory %s\n",
 			 cli_errstr(targetcli),name);
-		return false;
+		return(False);
 	}
 
-	return true;
+	return(True);
 }
 
 /****************************************************************************
  Show 8.3 name of a file.
 ****************************************************************************/
 
-static bool do_altname(const char *name)
+static BOOL do_altname(char *name)
 {
-	fstring altname;
-
+	pstring altname;
 	if (!NT_STATUS_IS_OK(cli_qpathinfo_alt_name(cli, name, altname))) {
 		d_printf("%s getting alt name for %s\n",
 			 cli_errstr(cli),name);
-		return false;
+		return(False);
 	}
 	d_printf("%s\n", altname);
 
-	return true;
+	return(True);
 }
 
 /****************************************************************************
@@ -1388,6 +1112,7 @@
 static int cmd_quit(void)
 {
 	cli_cm_shutdown();
+	talloc_destroy( ctx);
 	exit(0);
 	/* NOTREACHED */
 	return 0;
@@ -1399,67 +1124,45 @@
 
 static int cmd_mkdir(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *mask = NULL;
-	char *buf = NULL;
+	pstring mask;
+	pstring buf;
+	char *p=buf;
+  
+	pstrcpy(mask,cur_dir);
 
-	mask = talloc_strdup(ctx, client_get_cur_dir());
-	if (!mask) {
-		return 1;
-	}
-
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
-		if (!recurse) {
+	if (!next_token_nr(NULL,p,NULL,sizeof(buf))) {
+		if (!recurse)
 			d_printf("mkdir <dirname>\n");
-		}
 		return 1;
 	}
-	mask = talloc_asprintf_append(mask, buf);
-	if (!mask) {
-		return 1;
-	}
+	pstrcat(mask,p);
 
 	if (recurse) {
-		char *ddir = NULL;
-		char *ddir2 = NULL;
+		pstring ddir;
+		pstring ddir2;
 		struct cli_state *targetcli;
-		char *targetname = NULL;
-		char *p = NULL;
-		char *saveptr;
-
-		ddir2 = talloc_strdup(ctx, "");
-		if (!ddir2) {
+		pstring targetname;
+		*ddir2 = 0;
+		
+		if ( !cli_resolve_path( "", cli, mask, &targetcli, targetname ) ) {
 			return 1;
 		}
 
-		if (!cli_resolve_path(ctx, "", cli, mask, &targetcli, &targetname)) {
-			return 1;
-		}
-
-		ddir = talloc_strdup(ctx, targetname);
-		if (!ddir) {
-			return 1;
-		}
+		pstrcpy(ddir,targetname);
 		trim_char(ddir,'.','\0');
-		p = strtok_r(ddir, "/\\", &saveptr);
+		p = strtok(ddir,"/\\");
 		while (p) {
-			ddir2 = talloc_asprintf_append(ddir2, p);
-			if (!ddir2) {
-				return 1;
-			}
-			if (!cli_chkpath(targetcli, ddir2)) {
+			pstrcat(ddir2,p);
+			if (!cli_chkpath(targetcli, ddir2)) { 
 				do_mkdir(ddir2);
 			}
-			ddir2 = talloc_asprintf_append(ddir2, CLI_DIRSEP_STR);
-			if (!ddir2) {
-				return 1;
-			}
-			p = strtok_r(NULL, "/\\", &saveptr);
-		}
+			pstrcat(ddir2,CLI_DIRSEP_STR);
+			p = strtok(NULL,"/\\");
+		}	 
 	} else {
 		do_mkdir(mask);
 	}
-
+	
 	return 0;
 }
 
@@ -1469,120 +1172,29 @@
 
 static int cmd_altname(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *name;
-	char *buf;
+	pstring name;
+	pstring buf;
+	char *p=buf;
+  
+	pstrcpy(name,cur_dir);
 
-	name = talloc_strdup(ctx, client_get_cur_dir());
-	if (!name) {
-		return 1;
-	}
-
-	if (!next_token_talloc(ctx, &cmd_ptr, &buf, NULL)) {
+	if (!next_token_nr(NULL,p,NULL,sizeof(buf))) {
 		d_printf("altname <file>\n");
 		return 1;
 	}
-	name = talloc_asprintf_append(name, buf);
-	if (!name) {
-		return 1;
-	}
+	pstrcat(name,p);
+
 	do_altname(name);
-	return 0;
-}
 
-/****************************************************************************
- Show all info we can get
-****************************************************************************/
-
-static int do_allinfo(const char *name)
-{
-	fstring altname;
-	struct timespec b_time, a_time, m_time, c_time;
-	SMB_OFF_T size;
-	uint16_t mode;
-	SMB_INO_T ino;
-	NTTIME tmp;
-	unsigned int num_streams;
-	struct stream_struct *streams;
-	unsigned int i;
-
-	if (!NT_STATUS_IS_OK(cli_qpathinfo_alt_name(cli, name, altname))) {
-		d_printf("%s getting alt name for %s\n",
-			 cli_errstr(cli),name);
-		return false;
-	}
-	d_printf("altname: %s\n", altname);
-
-	if (!cli_qpathinfo2(cli, name, &b_time, &a_time, &m_time, &c_time,
-			    &size, &mode, &ino)) {
-		d_printf("%s getting pathinfo for %s\n",
-			 cli_errstr(cli),name);
-		return false;
-	}
-
-	unix_timespec_to_nt_time(&tmp, b_time);
-	d_printf("create_time:    %s\n", nt_time_string(talloc_tos(), tmp));
-
-	unix_timespec_to_nt_time(&tmp, a_time);
-	d_printf("access_time:    %s\n", nt_time_string(talloc_tos(), tmp));
-
-	unix_timespec_to_nt_time(&tmp, m_time);
-	d_printf("write_time:     %s\n", nt_time_string(talloc_tos(), tmp));
-
-	unix_timespec_to_nt_time(&tmp, c_time);
-	d_printf("change_time:    %s\n", nt_time_string(talloc_tos(), tmp));
-
-	if (!cli_qpathinfo_streams(cli, name, talloc_tos(), &num_streams,
-				   &streams)) {
-		d_printf("%s getting streams for %s\n",
-			 cli_errstr(cli),name);
-		return false;
-	}
-
-	for (i=0; i<num_streams; i++) {
-		d_printf("stream: [%s], %lld bytes\n", streams[i].name,
-			 (unsigned long long)streams[i].size);
-	}
-
 	return 0;
 }
 
 /****************************************************************************
- Show all info we can get
-****************************************************************************/
-
-static int cmd_allinfo(void)
-{
-	TALLOC_CTX *ctx = talloc_tos();
-	char *name;
-	char *buf;
-
-	name = talloc_strdup(ctx, client_get_cur_dir());
-	if (!name) {
-		return 1;
-	}
-
-	if (!next_token_talloc(ctx, &cmd_ptr, &buf, NULL)) {
-		d_printf("allinfo <file>\n");
-		return 1;
-	}
-	name = talloc_asprintf_append(name, buf);
-	if (!name) {
-		return 1;
-	}
-
-	do_allinfo(name);
-
-	return 0;
-}
-
-/****************************************************************************
  Put a single file.
 ****************************************************************************/
 
-static int do_put(const char *rname, const char *lname, bool reput)
+static int do_put(char *rname, char *lname, BOOL reput)
 {
-	TALLOC_CTX *ctx = talloc_tos();
 	int fnum;
 	XFILE *f;
 	SMB_OFF_T start = 0;
@@ -1592,13 +1204,13 @@
 	int rc = 0;
 	struct timeval tp_start;
 	struct cli_state *targetcli;
-	char *targetname = NULL;
-
-	if (!cli_resolve_path(ctx, "", cli, rname, &targetcli, &targetname)) {
+	pstring targetname;
+	
+	if ( !cli_resolve_path( "", cli, rname, &targetcli, targetname ) ) {
 		d_printf("Failed to open %s: %s\n", rname, cli_errstr(cli));
 		return 1;
 	}
-
+	
 	GetTimeOfDay(&tp_start);
 
 	if (reput) {
@@ -1613,7 +1225,7 @@
 	} else {
 		fnum = cli_open(targetcli, targetname, O_RDWR|O_CREAT|O_TRUNC, DENY_NONE);
 	}
-
+  
 	if (fnum == -1) {
 		d_printf("%s opening remote file %s\n",cli_errstr(targetcli),rname);
 		return 1;
@@ -1641,10 +1253,10 @@
 		d_printf("Error opening local file %s\n",lname);
 		return 1;
 	}
-
+  
 	DEBUG(1,("putting file %s as %s ",lname,
 		 rname));
-
+  
 	buf = (char *)SMB_MALLOC(maxwrite);
 	if (!buf) {
 		d_printf("ERROR: Not enough memory!\n");
@@ -1669,7 +1281,7 @@
 			d_printf("Error writing file: %s\n", cli_errstr(cli));
 			rc = 1;
 			break;
-		}
+		} 
 
 		nread += n;
 	}
@@ -1681,6 +1293,7 @@
 		return 1;
 	}
 
+	
 	if (f != x_stdin) {
 		x_fclose(f);
 	}
@@ -1690,14 +1303,14 @@
 	{
 		struct timeval tp_end;
 		int this_time;
-
+		
 		GetTimeOfDay(&tp_end);
-		this_time =
+		this_time = 
 			(tp_end.tv_sec - tp_start.tv_sec)*1000 +
 			(tp_end.tv_usec - tp_start.tv_usec)/1000;
 		put_total_time_ms += this_time;
 		put_total_size += nread;
-
+		
 		DEBUG(1,("(%3.1f kb/s) (average %3.1f kb/s)\n",
 			 nread / (1.024*this_time + 1.0e-4),
 			 put_total_size / (1.024*put_total_time_ms)));
@@ -1707,7 +1320,7 @@
 		cli_cm_shutdown();
 		exit(0);
 	}
-
+	
 	return rc;
 }
 
@@ -1717,35 +1330,26 @@
 
 static int cmd_put(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *lname;
-	char *rname;
-	char *buf;
-
-	rname = talloc_strdup(ctx, client_get_cur_dir());
-	if (!rname) {
-		return 1;
-	}
-
-	if (!next_token_talloc(ctx, &cmd_ptr,&lname,NULL)) {
+	pstring lname;
+	pstring rname;
+	pstring buf;
+	char *p=buf;
+	
+	pstrcpy(rname,cur_dir);
+  
+	if (!next_token_nr(NULL,p,NULL,sizeof(buf))) {
 		d_printf("put <filename>\n");
 		return 1;
 	}
+	pstrcpy(lname,p);
+  
+	if (next_token_nr(NULL,p,NULL,sizeof(buf)))
+		pstrcat(rname,p);      
+	else
+		pstrcat(rname,lname);
+	
+	clean_name(rname);
 
-	if (next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
-		rname = talloc_asprintf_append(rname, buf);
-	} else {
-		rname = talloc_asprintf_append(rname, lname);
-	}
-	if (!rname) {
-		return 1;
-	}
-
-	rname = clean_name(ctx, rname);
-	if (!rname) {
-		return 1;
-	}
-
 	{
 		SMB_STRUCT_STAT st;
 		/* allow '-' to represent stdin
@@ -1757,7 +1361,7 @@
 		}
 	}
 
-	return do_put(rname, lname, false);
+	return do_put(rname, lname, False);
 }
 
 /*************************************
@@ -1767,7 +1371,7 @@
 static struct file_list {
 	struct file_list *prev, *next;
 	char *file_path;
-	bool isdir;
+	BOOL isdir;
 } *file_list;
 
 /****************************************************************************
@@ -1777,7 +1381,7 @@
 static void free_file_list (struct file_list *list_head)
 {
 	struct file_list *list, *next;
-
+	
 	for (list = list_head; list; list = next) {
 		next = list->next;
 		DLIST_REMOVE(list_head, list);
@@ -1791,17 +1395,17 @@
  the specified name.
 ****************************************************************************/
 
-static bool seek_list(struct file_list *list, char *name)
+static BOOL seek_list(struct file_list *list, char *name)
 {
 	while (list) {
 		trim_string(list->file_path,"./","\n");
 		if (strncmp(list->file_path, name, strlen(name)) != 0) {
-			return true;
+			return(True);
 		}
 		list = list->next;
 	}
-
-	return false;
+      
+	return(False);
 }
 
 /****************************************************************************
@@ -1810,61 +1414,55 @@
 
 static int cmd_select(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *new_fs = NULL;
-	next_token_talloc(ctx, &cmd_ptr,&new_fs,NULL)
-		;
-	if (new_fs) {
-		client_set_fileselection(new_fs);
-	} else {
-		client_set_fileselection("");
-	}
+	pstrcpy(fileselection,"");
+	next_token_nr(NULL,fileselection,NULL,sizeof(fileselection));
+
 	return 0;
 }
 
 /****************************************************************************
   Recursive file matching function act as find
-  match must be always set to true when calling this function
+  match must be always set to True when calling this function
 ****************************************************************************/
 
-static int file_find(struct file_list **list, const char *directory,
-		      const char *expression, bool match)
+static int file_find(struct file_list **list, const char *directory, 
+		      const char *expression, BOOL match)
 {
 	SMB_STRUCT_DIR *dir;
 	struct file_list *entry;
         struct stat statbuf;
         int ret;
         char *path;
-	bool isdir;
+	BOOL isdir;
 	const char *dname;
 
         dir = sys_opendir(directory);
 	if (!dir)
 		return -1;
-
+	
         while ((dname = readdirname(dir))) {
 		if (!strcmp("..", dname))
 			continue;
 		if (!strcmp(".", dname))
 			continue;
-
+		
 		if (asprintf(&path, "%s/%s", directory, dname) <= 0) {
 			continue;
 		}
 
-		isdir = false;
+		isdir = False;
 		if (!match || !gen_fnmatch(expression, dname)) {
 			if (recurse) {
 				ret = stat(path, &statbuf);
 				if (ret == 0) {
 					if (S_ISDIR(statbuf.st_mode)) {
-						isdir = true;
-						ret = file_find(list, path, expression, false);
+						isdir = True;
+						ret = file_find(list, path, expression, False);
 					}
 				} else {
 					d_printf("file_find: cannot stat file %s\n", path);
 				}
-
+				
 				if (ret == -1) {
 					SAFE_FREE(path);
 					sys_closedir(dir);
@@ -1895,85 +1493,73 @@
 
 static int cmd_mput(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *p = NULL;
-
-	while (next_token_talloc(ctx, &cmd_ptr,&p,NULL)) {
+	pstring buf;
+	char *p=buf;
+	
+	while (next_token_nr(NULL,p,NULL,sizeof(buf))) {
 		int ret;
 		struct file_list *temp_list;
 		char *quest, *lname, *rname;
-
+	
 		file_list = NULL;
 
-		ret = file_find(&file_list, ".", p, true);
+		ret = file_find(&file_list, ".", p, True);
 		if (ret) {
 			free_file_list(file_list);
 			continue;
 		}
-
+		
 		quest = NULL;
 		lname = NULL;
 		rname = NULL;
-
-		for (temp_list = file_list; temp_list;
+				
+		for (temp_list = file_list; temp_list; 
 		     temp_list = temp_list->next) {
 
 			SAFE_FREE(lname);
-			if (asprintf(&lname, "%s/", temp_list->file_path) <= 0) {
+			if (asprintf(&lname, "%s/", temp_list->file_path) <= 0)
 				continue;
-			}
 			trim_string(lname, "./", "/");
-
+			
 			/* check if it's a directory */
 			if (temp_list->isdir) {
 				/* if (!recurse) continue; */
-
+				
 				SAFE_FREE(quest);
-				if (asprintf(&quest, "Put directory %s? ", lname) < 0) {
-					break;
-				}
+				if (asprintf(&quest, "Put directory %s? ", lname) < 0) break;
 				if (prompt && !yesno(quest)) { /* No */
 					/* Skip the directory */
 					lname[strlen(lname)-1] = '/';
 					if (!seek_list(temp_list, lname))
-						break;
+						break;		    
 				} else { /* Yes */
 	      				SAFE_FREE(rname);
-					if(asprintf(&rname, "%s%s", client_get_cur_dir(), lname) < 0) {
-						break;
-					}
-					normalize_name(rname);
-					if (!cli_chkpath(cli, rname) &&
+					if(asprintf(&rname, "%s%s", cur_dir, lname) < 0) break;
+					dos_format(rname);
+					if (!cli_chkpath(cli, rname) && 
 					    !do_mkdir(rname)) {
 						DEBUG (0, ("Unable to make dir, skipping..."));
 						/* Skip the directory */
 						lname[strlen(lname)-1] = '/';
-						if (!seek_list(temp_list, lname)) {
+						if (!seek_list(temp_list, lname))
 							break;
-						}
 					}
 				}
 				continue;
 			} else {
 				SAFE_FREE(quest);
-				if (asprintf(&quest,"Put file %s? ", lname) < 0) {
-					break;
-				}
-				if (prompt && !yesno(quest)) {
-					/* No */
+				if (asprintf(&quest,"Put file %s? ", lname) < 0) break;
+				if (prompt && !yesno(quest)) /* No */
 					continue;
-				}
-
+				
 				/* Yes */
 				SAFE_FREE(rname);
-				if (asprintf(&rname, "%s%s", client_get_cur_dir(), lname) < 0) {
-					break;
-				}
+				if (asprintf(&rname, "%s%s", cur_dir, lname) < 0) break;
 			}
 
-			normalize_name(rname);
+			dos_format(rname);
 
-			do_put(rname, lname, false);
+			do_put(rname, lname, False);
 		}
 		free_file_list(file_list);
 		SAFE_FREE(quest);
@@ -2005,19 +1591,18 @@
 
 static int cmd_cancel(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *buf = NULL;
-	int job;
+	pstring buf;
+	int job; 
 
-	if (!next_token_talloc(ctx, &cmd_ptr, &buf,NULL)) {
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		d_printf("cancel <jobid> ...\n");
 		return 1;
 	}
 	do {
 		job = atoi(buf);
 		do_cancel(job);
-	} while (next_token_talloc(ctx, &cmd_ptr,&buf,NULL));
-
+	} while (next_token_nr(NULL,buf,NULL,sizeof(buf)));
+	
 	return 0;
 }
 
@@ -2027,37 +1612,26 @@
 
 static int cmd_print(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *lname = NULL;
-	char *rname = NULL;
-	char *p = NULL;
+	pstring lname;
+	pstring rname;
+	char *p;
 
-	if (!next_token_talloc(ctx, &cmd_ptr, &lname,NULL)) {
+	if (!next_token_nr(NULL,lname,NULL, sizeof(lname))) {
 		d_printf("print <filename>\n");
 		return 1;
 	}
 
-	rname = talloc_strdup(ctx, lname);
-	if (!rname) {
-		return 1;
-	}
+	pstrcpy(rname,lname);
 	p = strrchr_m(rname,'/');
 	if (p) {
-		rname = talloc_asprintf(ctx,
-					"%s-%d",
-					p+1,
-					(int)sys_getpid());
+		slprintf(rname, sizeof(rname)-1, "%s-%d", p+1, (int)sys_getpid());
 	}
+
 	if (strequal(lname,"-")) {
-		rname = talloc_asprintf(ctx,
-				"stdin-%d",
-				(int)sys_getpid());
+		slprintf(rname, sizeof(rname)-1, "stdin-%d", (int)sys_getpid());
 	}
-	if (!rname) {
-		return 1;
-	}
 
-	return do_put(rname, lname, false);
+	return do_put(rname, lname, False);
 }
 
 /****************************************************************************
@@ -2076,6 +1650,7 @@
 static int cmd_queue(void)
 {
 	cli_print_queue(cli, queue_fn);
+	
 	return 0;
 }
 
@@ -2083,30 +1658,18 @@
  Delete some files.
 ****************************************************************************/
 
-static void do_del(file_info *finfo, const char *dir)
+static void do_del(file_info *finfo)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *mask = NULL;
+	pstring mask;
 
-	mask = talloc_asprintf(ctx,
-				"%s%c%s",
-				dir,
-				CLI_DIRSEP_CHAR,
-				finfo->name);
-	if (!mask) {
-		return;
-	}
+	pstr_sprintf( mask, "%s%c%s", finfo->dir, CLI_DIRSEP_CHAR, finfo->name );
 
-	if (finfo->mode & aDIR) {
-		TALLOC_FREE(mask);
+	if (finfo->mode & aDIR) 
 		return;
-	}
 
 	if (!cli_unlink(finfo->cli, mask)) {
-		d_printf("%s deleting remote file %s\n",
-				cli_errstr(finfo->cli),mask);
+		d_printf("%s deleting remote file %s\n",cli_errstr(finfo->cli),mask);
 	}
-	TALLOC_FREE(mask);
 }
 
 /****************************************************************************
@@ -2115,29 +1678,23 @@
 
 static int cmd_del(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *mask = NULL;
-	char *buf = NULL;
+	pstring mask;
+	pstring buf;
 	uint16 attribute = aSYSTEM | aHIDDEN;
 
-	if (recurse) {
+	if (recurse)
 		attribute |= aDIR;
-	}
-
-	mask = talloc_strdup(ctx, client_get_cur_dir());
-	if (!mask) {
-		return 1;
-	}
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	
+	pstrcpy(mask,cur_dir);
+	
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		d_printf("del <filename>\n");
 		return 1;
 	}
-	mask = talloc_asprintf_append(mask, buf);
-	if (!mask) {
-		return 1;
-	}
+	pstrcat(mask,buf);
 
-	do_list(mask,attribute,do_del,false,false);
+	do_list(mask, attribute,do_del,False,False);
+	
 	return 0;
 }
 
@@ -2147,37 +1704,32 @@
 
 static int cmd_wdel(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *mask = NULL;
-	char *buf = NULL;
+	pstring mask;
+	pstring buf;
 	uint16 attribute;
 	struct cli_state *targetcli;
-	char *targetname = NULL;
+	pstring targetname;
 
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		d_printf("wdel 0x<attrib> <wcard>\n");
 		return 1;
 	}
 
 	attribute = (uint16)strtol(buf, (char **)NULL, 16);
 
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		d_printf("wdel 0x<attrib> <wcard>\n");
 		return 1;
 	}
 
-	mask = talloc_asprintf(ctx, "%s%s",
-			client_get_cur_dir(),
-			buf);
-	if (!mask) {
-		return 1;
-	}
+	pstrcpy(mask,cur_dir);
+	pstrcat(mask,buf);
 
-	if (!cli_resolve_path(ctx, "", cli, mask, &targetcli, &targetname)) {
+	if ( !cli_resolve_path( "", cli, mask, &targetcli, targetname ) ) {
 		d_printf("cmd_wdel %s: %s\n", mask, cli_errstr(cli));
 		return 1;
 	}
-
+	
 	if (!cli_unlink_full(targetcli, targetname, attribute)) {
 		d_printf("%s deleting remote files %s\n",cli_errstr(targetcli),targetname);
 	}
@@ -2189,30 +1741,25 @@
 
 static int cmd_open(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *mask = NULL;
-	char *buf = NULL;
-	char *targetname = NULL;
+	pstring mask;
+	pstring buf;
 	struct cli_state *targetcli;
+	pstring targetname;
 	int fnum;
 
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	pstrcpy(mask,cur_dir);
+	
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		d_printf("open <filename>\n");
 		return 1;
 	}
-	mask = talloc_asprintf(ctx,
-			"%s%s",
-			client_get_cur_dir(),
-			buf);
-	if (!mask) {
-		return 1;
-	}
+	pstrcat(mask,buf);
 
-	if (!cli_resolve_path(ctx, "", cli, mask, &targetcli, &targetname)) {
+	if ( !cli_resolve_path( "", cli, mask, &targetcli, targetname ) ) {
 		d_printf("open %s: %s\n", mask, cli_errstr(cli));
 		return 1;
 	}
-
+	
 	fnum = cli_nt_create(targetcli, targetname, FILE_READ_DATA|FILE_WRITE_DATA);
 	if (fnum == -1) {
 		fnum = cli_nt_create(targetcli, targetname, FILE_READ_DATA);
@@ -2224,49 +1771,7 @@
 	} else {
 		d_printf("open file %s: for read/write fnum %d\n", targetname, fnum);
 	}
-	return 0;
-}
 
-static int cmd_posix_encrypt(void)
-{
-	TALLOC_CTX *ctx = talloc_tos();
-	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
-
-	if (cli->use_kerberos) {
-		status = cli_gss_smb_encryption_start(cli);
-	} else {
-		char *domain = NULL;
-		char *user = NULL;
-		char *password = NULL;
-
-		if (!next_token_talloc(ctx, &cmd_ptr,&domain,NULL)) {
-			d_printf("posix_encrypt domain user password\n");
-			return 1;
-		}
-
-		if (!next_token_talloc(ctx, &cmd_ptr,&user,NULL)) {
-			d_printf("posix_encrypt domain user password\n");
-			return 1;
-		}
-
-		if (!next_token_talloc(ctx, &cmd_ptr,&password,NULL)) {
-			d_printf("posix_encrypt domain user password\n");
-			return 1;
-		}
-
-		status = cli_raw_ntlm_smb_encryption_start(cli,
-							user,
-							password,
-							domain);
-	}
-
-	if (!NT_STATUS_IS_OK(status)) {
-		d_printf("posix_encrypt failed with error %s\n", nt_errstr(status));
-	} else {
-		d_printf("encryption on\n");
-		smb_encrypt = true;
-	}
-
 	return 0;
 }
 
@@ -2275,37 +1780,31 @@
 
 static int cmd_posix_open(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *mask = NULL;
-	char *buf = NULL;
-	char *targetname = NULL;
+	pstring mask;
+	pstring buf;
 	struct cli_state *targetcli;
+	pstring targetname;
 	mode_t mode;
 	int fnum;
 
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	pstrcpy(mask,cur_dir);
+	
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		d_printf("posix_open <filename> 0<mode>\n");
 		return 1;
 	}
-	mask = talloc_asprintf(ctx,
-			"%s%s",
-			client_get_cur_dir(),
-			buf);
-	if (!mask) {
-		return 1;
-	}
-
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	pstrcat(mask,buf);
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		d_printf("posix_open <filename> 0<mode>\n");
 		return 1;
 	}
 	mode = (mode_t)strtol(buf, (char **)NULL, 8);
 
-	if (!cli_resolve_path(ctx, "", cli, mask, &targetcli, &targetname)) {
+	if (!cli_resolve_path( "", cli, mask, &targetcli, targetname )) {
 		d_printf("posix_open %s: %s\n", mask, cli_errstr(cli));
 		return 1;
 	}
-
+	
 	fnum = cli_posix_open(targetcli, targetname, O_CREAT|O_RDWR, mode);
 	if (fnum == -1) {
 		fnum = cli_posix_open(targetcli, targetname, O_CREAT|O_RDONLY, mode);
@@ -2323,33 +1822,27 @@
 
 static int cmd_posix_mkdir(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *mask = NULL;
-	char *buf = NULL;
-	char *targetname = NULL;
+	pstring mask;
+	pstring buf;
 	struct cli_state *targetcli;
+	pstring targetname;
 	mode_t mode;
 	int fnum;
 
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	pstrcpy(mask,cur_dir);
+	
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		d_printf("posix_mkdir <filename> 0<mode>\n");
 		return 1;
 	}
-	mask = talloc_asprintf(ctx,
-			"%s%s",
-			client_get_cur_dir(),
-			buf);
-	if (!mask) {
-		return 1;
-	}
-
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	pstrcat(mask,buf);
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		d_printf("posix_mkdir <filename> 0<mode>\n");
 		return 1;
 	}
 	mode = (mode_t)strtol(buf, (char **)NULL, 8);
 
-	if (!cli_resolve_path(ctx, "", cli, mask, &targetcli, &targetname)) {
+	if (!cli_resolve_path( "", cli, mask, &targetcli, targetname )) {
 		d_printf("posix_mkdir %s: %s\n", mask, cli_errstr(cli));
 		return 1;
 	}
@@ -2360,34 +1853,30 @@
 	} else {
 		d_printf("posix_mkdir created directory %s\n", targetname);
 	}
+
 	return 0;
 }
 
 static int cmd_posix_unlink(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *mask = NULL;
-	char *buf = NULL;
-	char *targetname = NULL;
+	pstring mask;
+	pstring buf;
 	struct cli_state *targetcli;
+	pstring targetname;
 
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	pstrcpy(mask,cur_dir);
+	
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		d_printf("posix_unlink <filename>\n");
 		return 1;
 	}
-	mask = talloc_asprintf(ctx,
-			"%s%s",
-			client_get_cur_dir(),
-			buf);
-	if (!mask) {
-		return 1;
-	}
+	pstrcat(mask,buf);
 
-	if (!cli_resolve_path(ctx, "", cli, mask, &targetcli, &targetname)) {
+	if (!cli_resolve_path( "", cli, mask, &targetcli, targetname )) {
 		d_printf("posix_unlink %s: %s\n", mask, cli_errstr(cli));
 		return 1;
 	}
-
+	
 	if (!cli_posix_unlink(targetcli, targetname)) {
 		d_printf("Failed to unlink file %s. %s\n", targetname, cli_errstr(cli));
 	} else {
@@ -2399,29 +1888,24 @@
 
 static int cmd_posix_rmdir(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *mask = NULL;
-	char *buf = NULL;
-	char *targetname = NULL;
+	pstring mask;
+	pstring buf;
 	struct cli_state *targetcli;
+	pstring targetname;
 
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	pstrcpy(mask,cur_dir);
+	
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		d_printf("posix_rmdir <filename>\n");
 		return 1;
 	}
-	mask = talloc_asprintf(ctx,
-			"%s%s",
-			client_get_cur_dir(),
-			buf);
-	if (!mask) {
-		return 1;
-	}
+	pstrcat(mask,buf);
 
-	if (!cli_resolve_path(ctx, "", cli, mask, &targetcli, &targetname)) {
+	if (!cli_resolve_path( "", cli, mask, &targetcli, targetname)) {
 		d_printf("posix_rmdir %s: %s\n", mask, cli_errstr(cli));
 		return 1;
 	}
-
+	
 	if (!cli_posix_rmdir(targetcli, targetname)) {
 		d_printf("Failed to unlink directory %s. %s\n", targetname, cli_errstr(cli));
 	} else {
@@ -2433,11 +1917,10 @@
 
 static int cmd_close(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *buf = NULL;
+	fstring buf;
 	int fnum;
 
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		d_printf("close <fnum>\n");
 		return 1;
 	}
@@ -2453,10 +1936,9 @@
 
 static int cmd_posix(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
 	uint16 major, minor;
 	uint32 caplow, caphigh;
-	char *caps;
+	pstring caps;
 
 	if (!SERVER_HAS_UNIX_CIFS(cli)) {
 		d_printf("Server doesn't support UNIX CIFS extensions.\n");
@@ -2470,80 +1952,39 @@
 
 	d_printf("Server supports CIFS extensions %u.%u\n", (unsigned int)major, (unsigned int)minor);
 
-	caps = talloc_strdup(ctx, "");
-	if (!caps) {
-		return 1;
-	}
+	*caps = '\0';
         if (caplow & CIFS_UNIX_FCNTL_LOCKS_CAP) {
-		caps = talloc_asprintf_append(caps, "locks ");
-		if (!caps) {
-			return 1;
-		}
+		pstrcat(caps, "locks ");
 	}
         if (caplow & CIFS_UNIX_POSIX_ACLS_CAP) {
-		caps = talloc_asprintf_append(caps, "acls ");
-		if (!caps) {
-			return 1;
-		}
+		pstrcat(caps, "acls ");
 	}
         if (caplow & CIFS_UNIX_XATTTR_CAP) {
-		caps = talloc_asprintf_append(caps, "eas ");
-		if (!caps) {
-			return 1;
-		}
+		pstrcat(caps, "eas ");
 	}
         if (caplow & CIFS_UNIX_POSIX_PATHNAMES_CAP) {
-		caps = talloc_asprintf_append(caps, "pathnames ");
-		if (!caps) {
-			return 1;
-		}
+		pstrcat(caps, "pathnames ");
 	}
         if (caplow & CIFS_UNIX_POSIX_PATH_OPERATIONS_CAP) {
-		caps = talloc_asprintf_append(caps, "posix_path_operations ");
-		if (!caps) {
-			return 1;
-		}
+		pstrcat(caps, "posix_path_operations ");
 	}
-        if (caplow & CIFS_UNIX_LARGE_READ_CAP) {
-		caps = talloc_asprintf_append(caps, "large_read ");
-		if (!caps) {
-			return 1;
-		}
-	}
-        if (caplow & CIFS_UNIX_LARGE_WRITE_CAP) {
-		caps = talloc_asprintf_append(caps, "large_write ");
-		if (!caps) {
-			return 1;
-		}
-	}
-	if (caplow & CIFS_UNIX_TRANSPORT_ENCRYPTION_CAP) {
-		caps = talloc_asprintf_append(caps, "posix_encrypt ");
-		if (!caps) {
-			return 1;
-		}
-	}
-	if (caplow & CIFS_UNIX_TRANSPORT_ENCRYPTION_MANDATORY_CAP) {
-		caps = talloc_asprintf_append(caps, "mandatory_posix_encrypt ");
-		if (!caps) {
-			return 1;
-		}
-	}
 
-	if (*caps && caps[strlen(caps)-1] == ' ') {
+	if (strlen(caps) > 0 && caps[strlen(caps)-1] == ' ') {
 		caps[strlen(caps)-1] = '\0';
 	}
 
-	d_printf("Server supports CIFS capabilities %s\n", caps);
-
 	if (!cli_set_unix_extensions_capabilities(cli, major, minor, caplow, caphigh)) {
 		d_printf("Can't set UNIX CIFS extensions capabilities. %s.\n", cli_errstr(cli));
 		return 1;
 	}
 
+	d_printf("Selecting server supported CIFS capabilities %s\n", caps);
+
 	if (caplow & CIFS_UNIX_POSIX_PATHNAMES_CAP) {
 		CLI_DIRSEP_CHAR = '/';
 		*CLI_DIRSEP_STR = '/';
-		client_set_cur_dir(CLI_DIRSEP_STR);
+		pstrcpy(cur_dir, CLI_DIRSEP_STR);
+		do_cd(cur_dir);
 	}
 
 	return 0;
@@ -2551,19 +1992,18 @@
 
 static int cmd_lock(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *buf = NULL;
+	fstring buf;
 	SMB_BIG_UINT start, len;
 	enum brl_type lock_type;
 	int fnum;
 
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		d_printf("lock <fnum> [r|w] <hex-start> <hex-len>\n");
 		return 1;
 	}
 	fnum = atoi(buf);
 
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		d_printf("lock <fnum> [r|w] <hex-start> <hex-len>\n");
 		return 1;
 	}
@@ -2577,21 +2017,21 @@
 		return 1;
 	}
 
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		d_printf("lock <fnum> [r|w] <hex-start> <hex-len>\n");
 		return 1;
 	}
 
 	start = (SMB_BIG_UINT)strtol(buf, (char **)NULL, 16);
 
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		d_printf("lock <fnum> [r|w] <hex-start> <hex-len>\n");
 		return 1;
 	}
 
 	len = (SMB_BIG_UINT)strtol(buf, (char **)NULL, 16);
 
-	if (!cli_posix_lock(cli, fnum, start, len, true, lock_type)) {
+	if (!cli_posix_lock(cli, fnum, start, len, True, lock_type)) {
 		d_printf("lock failed %d: %s\n", fnum, cli_errstr(cli));
 	}
 
@@ -2600,25 +2040,24 @@
 
 static int cmd_unlock(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *buf = NULL;
+	fstring buf;
 	SMB_BIG_UINT start, len;
 	int fnum;
 
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		d_printf("unlock <fnum> <hex-start> <hex-len>\n");
 		return 1;
 	}
 	fnum = atoi(buf);
 
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		d_printf("unlock <fnum> <hex-start> <hex-len>\n");
 		return 1;
 	}
 
 	start = (SMB_BIG_UINT)strtol(buf, (char **)NULL, 16);
 
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		d_printf("unlock <fnum> <hex-start> <hex-len>\n");
 		return 1;
 	}
@@ -2639,34 +2078,29 @@
 
 static int cmd_rmdir(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *mask = NULL;
-	char *buf = NULL;
-	char *targetname = NULL;
+	pstring mask;
+	pstring buf;
 	struct cli_state *targetcli;
-
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	pstring targetname;
+  
+	pstrcpy(mask,cur_dir);
+	
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		d_printf("rmdir <dirname>\n");
 		return 1;
 	}
-	mask = talloc_asprintf(ctx,
-			"%s%s",
-			client_get_cur_dir(),
-			buf);
-	if (!mask) {
-		return 1;
-	}
+	pstrcat(mask,buf);
 
-	if (!cli_resolve_path(ctx, "", cli, mask, &targetcli, &targetname)) {
+	if ( !cli_resolve_path( "", cli, mask, &targetcli, targetname ) ) {
 		d_printf("rmdir %s: %s\n", mask, cli_errstr(cli));
 		return 1;
 	}
-
+	
 	if (!cli_rmdir(targetcli, targetname)) {
 		d_printf("%s removing remote directory file %s\n",
 			 cli_errstr(targetcli),mask);
 	}
-
+	
 	return 0;
 }
 
@@ -2676,48 +2110,38 @@
 
 static int cmd_link(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *oldname = NULL;
-	char *newname = NULL;
-	char *buf = NULL;
-	char *buf2 = NULL;
-	char *targetname = NULL;
+	pstring oldname,newname;
+	pstring buf,buf2;
 	struct cli_state *targetcli;
-
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL) ||
-	    !next_token_talloc(ctx, &cmd_ptr,&buf2,NULL)) {
+	pstring targetname;
+  
+	pstrcpy(oldname,cur_dir);
+	pstrcpy(newname,cur_dir);
+  
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf)) || 
+	    !next_token_nr(NULL,buf2,NULL, sizeof(buf2))) {
 		d_printf("link <oldname> <newname>\n");
 		return 1;
 	}
-	oldname = talloc_asprintf(ctx,
-			"%s%s",
-			client_get_cur_dir(),
-			buf);
-	if (!oldname) {
-		return 1;
-	}
-	newname = talloc_asprintf(ctx,
-			"%s%s",
-			client_get_cur_dir(),
-			buf2);
-	if (!newname) {
-		return 1;
-	}
 
-	if (!cli_resolve_path(ctx, "", cli, oldname, &targetcli, &targetname)) {
+	pstrcat(oldname,buf);
+	pstrcat(newname,buf2);
+
+	if ( !cli_resolve_path( "", cli, oldname, &targetcli, targetname ) ) {
 		d_printf("link %s: %s\n", oldname, cli_errstr(cli));
 		return 1;
 	}
-
+	
 	if (!SERVER_HAS_UNIX_CIFS(targetcli)) {
 		d_printf("Server doesn't support UNIX CIFS calls.\n");
 		return 1;
 	}
-
+	
 	if (!cli_unix_hardlink(targetcli, targetname, newname)) {
 		d_printf("%s linking files (%s -> %s)\n", cli_errstr(targetcli), newname, oldname);
 		return 1;
-	}
+	}  
+
 	return 0;
 }
 
@@ -2727,49 +2151,37 @@
 
 static int cmd_symlink(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *oldname = NULL;
-	char *newname = NULL;
-	char *buf = NULL;
-	char *buf2 = NULL;
-	char *targetname = NULL;
+	pstring oldname,newname;
+	pstring buf,buf2;
 	struct cli_state *targetcli;
+	pstring targetname;
+  
+	if (!SERVER_HAS_UNIX_CIFS(cli)) {
+		d_printf("Server doesn't support UNIX CIFS calls.\n");
+		return 1;
+	}
 
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL) ||
-	    !next_token_talloc(ctx, &cmd_ptr,&buf2,NULL)) {
+	pstrcpy(newname,cur_dir);
+	
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf)) || 
+	    !next_token_nr(NULL,buf2,NULL, sizeof(buf2))) {
 		d_printf("symlink <oldname> <newname>\n");
 		return 1;
 	}
-	oldname = talloc_asprintf(ctx,
-			"%s%s",
-			client_get_cur_dir(),
-			buf);
-	if (!oldname) {
-		return 1;
-	}
-	newname = talloc_asprintf(ctx,
-			"%s%s",
-			client_get_cur_dir(),
-			buf2);
-	if (!newname) {
-		return 1;
-	}
 
-	if (!cli_resolve_path(ctx, "", cli, oldname, &targetcli, &targetname)) {
+	pstrcpy(oldname,buf);
+	pstrcat(newname,buf2);
+
+	if ( !cli_resolve_path( "", cli, oldname, &targetcli, targetname ) ) {
 		d_printf("link %s: %s\n", oldname, cli_errstr(cli));
 		return 1;
 	}
 
-	if (!SERVER_HAS_UNIX_CIFS(targetcli)) {
-		d_printf("Server doesn't support UNIX CIFS calls.\n");
-		return 1;
-	}
-
 	if (!cli_unix_symlink(targetcli, targetname, newname)) {
 		d_printf("%s symlinking files (%s -> %s)\n",
 			cli_errstr(targetcli), newname, targetname);
 		return 1;
-	}
+	} 
 
 	return 0;
 }
@@ -2780,44 +2192,38 @@
 
 static int cmd_chmod(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *src = NULL;
-	char *buf = NULL;
-	char *buf2 = NULL;
-	char *targetname = NULL;
-	struct cli_state *targetcli;
+	pstring src;
 	mode_t mode;
-
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL) ||
-	    !next_token_talloc(ctx, &cmd_ptr,&buf2,NULL)) {
+	pstring buf, buf2;
+	struct cli_state *targetcli;
+	pstring targetname;
+  
+	pstrcpy(src,cur_dir);
+	
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf)) || 
+	    !next_token_nr(NULL,buf2,NULL, sizeof(buf2))) {
 		d_printf("chmod mode file\n");
 		return 1;
 	}
-	src = talloc_asprintf(ctx,
-			"%s%s",
-			client_get_cur_dir(),
-			buf2);
-	if (!src) {
-		return 1;
-	}
 
 	mode = (mode_t)strtol(buf, NULL, 8);
+	pstrcat(src,buf2);
 
-	if (!cli_resolve_path(ctx, "", cli, src, &targetcli, &targetname)) {
+	if ( !cli_resolve_path( "", cli, src, &targetcli, targetname ) ) {
 		d_printf("chmod %s: %s\n", src, cli_errstr(cli));
 		return 1;
 	}
-
+	
 	if (!SERVER_HAS_UNIX_CIFS(targetcli)) {
 		d_printf("Server doesn't support UNIX CIFS calls.\n");
 		return 1;
 	}
-
+	
 	if (!cli_unix_chmod(targetcli, targetname, mode)) {
 		d_printf("%s chmod file %s 0%o\n",
 			cli_errstr(targetcli), src, (unsigned int)mode);
 		return 1;
-	}
+	} 
 
 	return 0;
 }
@@ -2828,7 +2234,7 @@
 		return "regular file";
 	} else if (S_ISDIR(mode)) {
 		return "directory";
-	} else
+	} else 
 #ifdef S_ISCHR
 	if (S_ISCHR(mode)) {
 		return "character device";
@@ -2930,11 +2336,7 @@
 
 static int cmd_getfacl(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *src = NULL;
-	char *name = NULL;
-	char *targetname = NULL;
-	struct cli_state *targetcli;
+	pstring src, name;
 	uint16 major, minor;
 	uint32 caplow, caphigh;
 	char *retbuf = NULL;
@@ -2943,38 +2345,35 @@
 	uint16 num_file_acls = 0;
 	uint16 num_dir_acls = 0;
 	uint16 i;
-
-	if (!next_token_talloc(ctx, &cmd_ptr,&name,NULL)) {
-		d_printf("getfacl filename\n");
+	struct cli_state *targetcli;
+	pstring targetname;
+ 
+	pstrcpy(src,cur_dir);
+	
+	if (!next_token_nr(NULL,name,NULL,sizeof(name))) {
+		d_printf("stat file\n");
 		return 1;
 	}
-	src = talloc_asprintf(ctx,
-			"%s%s",
-			client_get_cur_dir(),
-			name);
-	if (!src) {
-		return 1;
-	}
 
-	if (!cli_resolve_path(ctx, "", cli, src, &targetcli, &targetname)) {
+	pstrcat(src,name);
+	
+	if ( !cli_resolve_path( "", cli, src, &targetcli, targetname ) ) {
 		d_printf("stat %s: %s\n", src, cli_errstr(cli));
 		return 1;
 	}
-
+	
 	if (!SERVER_HAS_UNIX_CIFS(targetcli)) {
 		d_printf("Server doesn't support UNIX CIFS calls.\n");
 		return 1;
 	}
-
-	if (!cli_unix_extensions_version(targetcli, &major, &minor,
-				&caplow, &caphigh)) {
+	
+	if (!cli_unix_extensions_version(targetcli, &major, &minor, &caplow, &caphigh)) {
 		d_printf("Can't get UNIX CIFS version from server.\n");
 		return 1;
 	}
 
 	if (!(caplow & CIFS_UNIX_POSIX_ACLS_CAP)) {
-		d_printf("This server supports UNIX extensions "
-			"but doesn't support POSIX ACLs.\n");
+		d_printf("This server supports UNIX extensions but doesn't support POSIX ACLs.\n");
 		return 1;
 	}
 
@@ -2982,13 +2381,13 @@
 		d_printf("%s getfacl doing a stat on file %s\n",
 			cli_errstr(targetcli), src);
 		return 1;
-	}
+	} 
 
 	if (!cli_unix_getfacl(targetcli, targetname, &rb_size, &retbuf)) {
 		d_printf("%s getfacl file %s\n",
 			cli_errstr(targetcli), src);
 		return 1;
-	}
+	} 
 
 	/* ToDo : Print out the ACL values. */
 	if (SVAL(retbuf,0) != SMB_POSIX_ACL_VERSION || rb_size < 6) {
@@ -3101,42 +2500,38 @@
 
 static int cmd_stat(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *src = NULL;
-	char *name = NULL;
-	char *targetname = NULL;
-	struct cli_state *targetcli;
+	pstring src, name;
 	fstring mode_str;
 	SMB_STRUCT_STAT sbuf;
+	struct cli_state *targetcli;
 	struct tm *lt;
+	pstring targetname;
+ 
+	if (!SERVER_HAS_UNIX_CIFS(cli)) {
+		d_printf("Server doesn't support UNIX CIFS calls.\n");
+		return 1;
+	}
 
-	if (!next_token_talloc(ctx, &cmd_ptr,&name,NULL)) {
+	pstrcpy(src,cur_dir);
+	
+	if (!next_token_nr(NULL,name,NULL,sizeof(name))) {
 		d_printf("stat file\n");
 		return 1;
 	}
-	src = talloc_asprintf(ctx,
-			"%s%s",
-			client_get_cur_dir(),
-			name);
-	if (!src) {
-		return 1;
-	}
 
-	if (!cli_resolve_path(ctx, "", cli, src, &targetcli, &targetname)) {
+	pstrcat(src,name);
+
+	
+	if ( !cli_resolve_path( "", cli, src, &targetcli, targetname ) ) {
 		d_printf("stat %s: %s\n", src, cli_errstr(cli));
 		return 1;
 	}
-
-	if (!SERVER_HAS_UNIX_CIFS(targetcli)) {
-		d_printf("Server doesn't support UNIX CIFS calls.\n");
-		return 1;
-	}
-
+	
 	if (!cli_unix_stat(targetcli, targetname, &sbuf)) {
 		d_printf("%s stat file %s\n",
 			cli_errstr(targetcli), src);
 		return 1;
-	}
+	} 
 
 	/* Print out the stat values. */
 	d_printf("File: %s\n", src);
@@ -3152,7 +2547,7 @@
 			(unsigned int)sbuf.st_nlink,
 			unix_dev_major(sbuf.st_rdev),
 			unix_dev_minor(sbuf.st_rdev));
-	} else
+	} else 
 #endif
 		d_printf("Inode: %.0f\tLinks: %u\n",
 			(double)sbuf.st_ino,
@@ -3161,7 +2556,7 @@
 	d_printf("Access: (0%03o/%s)\tUid: %u\tGid: %u\n",
 		((int)sbuf.st_mode & 0777),
 		unix_mode_to_str(mode_str, sbuf.st_mode),
-		(unsigned int)sbuf.st_uid,
+		(unsigned int)sbuf.st_uid, 
 		(unsigned int)sbuf.st_gid);
 
 	lt = localtime(&sbuf.st_atime);
@@ -3187,7 +2582,7 @@
 		fstrcpy(mode_str, "unknown");
 	}
 	d_printf("Change: %s\n", mode_str);
-
+	
 	return 0;
 }
 
@@ -3198,32 +2593,27 @@
 
 static int cmd_chown(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *src = NULL;
+	pstring src;
 	uid_t uid;
 	gid_t gid;
-	char *buf, *buf2, *buf3;
+	pstring buf, buf2, buf3;
 	struct cli_state *targetcli;
-	char *targetname = NULL;
-
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL) ||
-	    !next_token_talloc(ctx, &cmd_ptr,&buf2,NULL) ||
-	    !next_token_talloc(ctx, &cmd_ptr,&buf3,NULL)) {
+	pstring targetname;
+  
+	pstrcpy(src,cur_dir);
+	
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf)) || 
+	    !next_token_nr(NULL,buf2,NULL, sizeof(buf2)) ||
+	    !next_token_nr(NULL,buf3,NULL, sizeof(buf3))) {
 		d_printf("chown uid gid file\n");
 		return 1;
 	}
 
 	uid = (uid_t)atoi(buf);
 	gid = (gid_t)atoi(buf2);
+	pstrcat(src,buf3);
 
-	src = talloc_asprintf(ctx,
-			"%s%s",
-			client_get_cur_dir(),
-			buf3);
-	if (!src) {
-		return 1;
-	}
-	if (!cli_resolve_path(ctx, "", cli, src, &targetcli, &targetname) ) {
+	if ( !cli_resolve_path( "", cli, src, &targetcli, targetname ) ) {
 		d_printf("chown %s: %s\n", src, cli_errstr(cli));
 		return 1;
 	}
@@ -3232,12 +2622,12 @@
 		d_printf("Server doesn't support UNIX CIFS calls.\n");
 		return 1;
 	}
-
+	
 	if (!cli_unix_chown(targetcli, targetname, uid, gid)) {
 		d_printf("%s chown file %s uid=%d, gid=%d\n",
 			cli_errstr(targetcli), src, (int)uid, (int)gid);
 		return 1;
-	}
+	} 
 
 	return 0;
 }
@@ -3248,41 +2638,30 @@
 
 static int cmd_rename(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *src, *dest;
-	char *buf, *buf2;
+	pstring src,dest;
+	pstring buf,buf2;
 	struct cli_state *targetcli;
-	char *targetsrc;
-	char *targetdest;
-
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL) ||
-	    !next_token_talloc(ctx, &cmd_ptr,&buf2,NULL)) {
+	pstring targetsrc;
+	pstring targetdest;
+  
+	pstrcpy(src,cur_dir);
+	pstrcpy(dest,cur_dir);
+	
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf)) || 
+	    !next_token_nr(NULL,buf2,NULL, sizeof(buf2))) {
 		d_printf("rename <src> <dest>\n");
 		return 1;
 	}
 
-	src = talloc_asprintf(ctx,
-			"%s%s",
-			client_get_cur_dir(),
-			buf);
-	if (!src) {
-		return 1;
-	}
+	pstrcat(src,buf);
+	pstrcat(dest,buf2);
 
-	dest = talloc_asprintf(ctx,
-			"%s%s",
-			client_get_cur_dir(),
-			buf2);
-	if (!dest) {
-		return 1;
-	}
-
-	if (!cli_resolve_path(ctx, "", cli, src, &targetcli, &targetsrc)) {
+	if ( !cli_resolve_path( "", cli, src, &targetcli, targetsrc ) ) {
 		d_printf("rename %s: %s\n", src, cli_errstr(cli));
 		return 1;
 	}
 
-	if (!cli_resolve_path(ctx, "", cli, dest, &targetcli, &targetdest)) {
+	if ( !cli_resolve_path( "", cli, dest, &targetcli, targetdest ) ) {
 		d_printf("rename %s: %s\n", dest, cli_errstr(cli));
 		return 1;
 	}
@@ -3294,7 +2673,7 @@
 			targetdest);
 		return 1;
 	}
-
+	
 	return 0;
 }
 
@@ -3307,14 +2686,13 @@
 	fstring volname;
 	uint32 serial_num;
 	time_t create_date;
-
+  
 	if (!cli_get_fs_volume_info(cli, volname, &serial_num, &create_date)) {
 		d_printf("Errr %s getting volume info\n",cli_errstr(cli));
 		return 1;
 	}
-
-	d_printf("Volume: |%s| serial number 0x%x\n",
-			volname, (unsigned int)serial_num);
+	
+	d_printf("Volume: |%s| serial number 0x%x\n", volname, (unsigned int)serial_num);
 	return 0;
 }
 
@@ -3324,44 +2702,38 @@
 
 static int cmd_hardlink(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *src, *dest;
-	char *buf, *buf2;
+	pstring src,dest;
+	pstring buf,buf2;
 	struct cli_state *targetcli;
-	char *targetname;
-
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL) ||
-	    !next_token_talloc(ctx, &cmd_ptr,&buf2,NULL)) {
+	pstring targetname;
+  
+	pstrcpy(src,cur_dir);
+	pstrcpy(dest,cur_dir);
+	
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf)) || 
+	    !next_token_nr(NULL,buf2,NULL, sizeof(buf2))) {
 		d_printf("hardlink <src> <dest>\n");
 		return 1;
 	}
 
-	src = talloc_asprintf(ctx,
-			"%s%s",
-			client_get_cur_dir(),
-			buf);
-	if (!src) {
-		return 1;
-	}
+	pstrcat(src,buf);
+	pstrcat(dest,buf2);
 
-	dest = talloc_asprintf(ctx,
-			"%s%s",
-			client_get_cur_dir(),
-			buf2);
-	if (!dest) {
+	if ( !cli_resolve_path( "", cli, src, &targetcli, targetname ) ) {
+		d_printf("hardlink %s: %s\n", src, cli_errstr(cli));
 		return 1;
 	}
-
-	if (!cli_resolve_path(ctx, "", cli, src, &targetcli, &targetname)) {
-		d_printf("hardlink %s: %s\n", src, cli_errstr(cli));
+	
+	if (!SERVER_HAS_UNIX_CIFS(targetcli)) {
+		d_printf("Server doesn't support UNIX CIFS calls.\n");
 		return 1;
 	}
-
+	
 	if (!cli_nt_hardlink(targetcli, targetname, dest)) {
 		d_printf("%s doing an NT hard link of files\n",cli_errstr(targetcli));
 		return 1;
 	}
-
+	
 	return 0;
 }
 
@@ -3373,6 +2745,7 @@
 {
 	prompt = !prompt;
 	DEBUG(2,("prompting is now %s\n",prompt?"on":"off"));
+	
 	return 1;
 }
 
@@ -3382,12 +2755,11 @@
 
 static int cmd_newer(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *buf;
-	bool ok;
+	pstring buf;
+	BOOL ok;
 	SMB_STRUCT_STAT sbuf;
 
-	ok = next_token_talloc(ctx, &cmd_ptr,&buf,NULL);
+	ok = next_token_nr(NULL,buf,NULL,sizeof(buf));
 	if (ok && (sys_stat(buf,&sbuf) == 0)) {
 		newer_than = sbuf.st_mtime;
 		DEBUG(1,("Getting files newer than %s",
@@ -3410,14 +2782,12 @@
 
 static int cmd_archive(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *buf;
+	pstring buf;
 
-	if (next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	if (next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		archive_level = atoi(buf);
-	} else {
+	} else
 		d_printf("Archive level is %d\n",archive_level);
-	}
 
 	return 0;
 }
@@ -3430,6 +2800,7 @@
 {
 	lowercase = !lowercase;
 	DEBUG(2,("filename lowercasing is now %s\n",lowercase?"on":"off"));
+
 	return 0;
 }
 
@@ -3439,11 +2810,12 @@
 
 static int cmd_setcase(void)
 {
-	bool orig_case_sensitive = cli_set_case_sensitive(cli, false);
+	BOOL orig_case_sensitive = cli_set_case_sensitive(cli, False);
 
 	cli_set_case_sensitive(cli, !orig_case_sensitive);
 	DEBUG(2,("filename case sensitivity is now %s\n",!orig_case_sensitive ?
 		"on":"off"));
+
 	return 0;
 }
 
@@ -3455,6 +2827,13 @@
 {
 	showacls = !showacls;
 	DEBUG(2,("showacls is now %s\n",showacls?"on":"off"));
+
+	if (!ctx && showacls)
+		ctx = talloc_init("smbclient:showacls");
+		if (!ctx) {
+			DEBUG( 0, ("cmd_showacls() out of memory.  talloc_init() failed.\n"));
+	}
+
 	return 0;
 }
 
@@ -3467,6 +2846,7 @@
 {
 	recurse = !recurse;
 	DEBUG(2,("directory recursion is now %s\n",recurse?"on":"off"));
+
 	return 0;
 }
 
@@ -3479,6 +2859,7 @@
 	translation = !translation;
 	DEBUG(2,("CR/LF<->LF and print text translation now %s\n",
 		 translation?"on":"off"));
+
 	return 0;
 }
 
@@ -3488,18 +2869,13 @@
 
 static int cmd_lcd(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *buf;
-	char *d;
-
-	if (next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	pstring buf;
+	pstring d;
+	
+	if (next_token_nr(NULL,buf,NULL,sizeof(buf)))
 		chdir(buf);
-	}
-	d = TALLOC_ARRAY(ctx, char, PATH_MAX+1);
-	if (!d) {
-		return 1;
-	}
 	DEBUG(2,("the local directory is now %s\n",sys_getwd(d)));
+
 	return 0;
 }
 
@@ -3509,37 +2885,24 @@
 
 static int cmd_reget(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *local_name = NULL;
-	char *remote_name = NULL;
-	char *fname = NULL;
-	char *p = NULL;
+	pstring local_name;
+	pstring remote_name;
+	char *p;
 
-	remote_name = talloc_strdup(ctx, client_get_cur_dir());
-	if (!remote_name) {
-		return 1;
-	}
-
-	if (!next_token_talloc(ctx, &cmd_ptr, &fname, NULL)) {
+	pstrcpy(remote_name, cur_dir);
+	
+	p = remote_name + strlen(remote_name);
+	
+	if (!next_token_nr(NULL, p, NULL, sizeof(remote_name) - strlen(remote_name))) {
 		d_printf("reget <filename>\n");
 		return 1;
 	}
-	remote_name = talloc_asprintf_append(remote_name, fname);
-	if (!remote_name) {
-		return 1;
-	}
-	remote_name = clean_name(ctx,remote_name);
-	if (!remote_name) {
-		return 1;
-	}
-
-	local_name = fname;
-	next_token_talloc(ctx, &cmd_ptr, &p, NULL);
-	if (p) {
-		local_name = p;
-	}
-
-	return do_get(remote_name, local_name, true);
+	pstrcpy(local_name, p);
+	clean_name(remote_name);
+	
+	next_token_nr(NULL, local_name, NULL, sizeof(local_name));
+	
+	return do_get(remote_name, local_name, True);
 }
 
 /****************************************************************************
@@ -3548,68 +2911,56 @@
 
 static int cmd_reput(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *local_name = NULL;
-	char *remote_name = NULL;
-	char *buf;
+	pstring local_name;
+	pstring remote_name;
+	pstring buf;
+	char *p = buf;
 	SMB_STRUCT_STAT st;
-
-	remote_name = talloc_strdup(ctx, client_get_cur_dir());
-	if (!remote_name) {
-		return 1;
-	}
-
-	if (!next_token_talloc(ctx, &cmd_ptr, &local_name, NULL)) {
+	
+	pstrcpy(remote_name, cur_dir);
+  
+	if (!next_token_nr(NULL, p, NULL, sizeof(buf))) {
 		d_printf("reput <filename>\n");
 		return 1;
 	}
-
+	pstrcpy(local_name, p);
+  
 	if (!file_exist(local_name, &st)) {
 		d_printf("%s does not exist\n", local_name);
 		return 1;
 	}
 
-	if (next_token_talloc(ctx, &cmd_ptr, &buf, NULL)) {
-		remote_name = talloc_asprintf_append(remote_name,
-						buf);
-	} else {
-		remote_name = talloc_asprintf_append(remote_name,
-						local_name);
-	}
-	if (!remote_name) {
-		return 1;
-	}
+	if (next_token_nr(NULL, p, NULL, sizeof(buf)))
+		pstrcat(remote_name, p);
+	else
+		pstrcat(remote_name, local_name);
+	
+	clean_name(remote_name);
 
-	remote_name = clean_name(ctx, remote_name);
-	if (!remote_name) {
-		return 1;
-	}
-
-	return do_put(remote_name, local_name, true);
+	return do_put(remote_name, local_name, True);
 }
 
 /****************************************************************************
  List a share name.
  ****************************************************************************/
 
-static void browse_fn(const char *name, uint32 m,
+static void browse_fn(const char *name, uint32 m, 
                       const char *comment, void *state)
 {
-	const char *typestr = "";
+        fstring typestr;
 
-        switch (m & 7) {
-	case STYPE_DISKTREE:
-		typestr = "Disk";
-		break;
-	case STYPE_PRINTQ:
-		typestr = "Printer";
-		break;
-	case STYPE_DEVICE:
-		typestr = "Device";
-		break;
-	case STYPE_IPC:
-		typestr = "IPC";
-		break;
+        *typestr=0;
+
+        switch (m & 7)
+        {
+          case STYPE_DISKTREE:
+            fstrcpy(typestr,"Disk"); break;
+          case STYPE_PRINTQ:
+            fstrcpy(typestr,"Printer"); break;
+          case STYPE_DEVICE:
+            fstrcpy(typestr,"Device"); break;
+          case STYPE_IPC:
+            fstrcpy(typestr,"IPC"); break;
         }
 	/* FIXME: If the remote machine returns non-ascii characters
 	   in any of these fields, they can corrupt the output.  We
@@ -3622,62 +2973,62 @@
 	}
 }
 
-static bool browse_host_rpc(bool sort)
+static BOOL browse_host_rpc(BOOL sort)
 {
 	NTSTATUS status;
 	struct rpc_pipe_client *pipe_hnd;
-	TALLOC_CTX *frame = talloc_stackframe();
+	TALLOC_CTX *mem_ctx;
+	ENUM_HND enum_hnd;
 	WERROR werr;
-	struct srvsvc_NetShareInfoCtr info_ctr;
-	struct srvsvc_NetShareCtr1 ctr1;
-	uint32_t resume_handle = 0;
-	uint32_t total_entries = 0;
+	SRV_SHARE_INFO_CTR ctr;
 	int i;
 
+	mem_ctx = talloc_new(NULL);
+	if (mem_ctx == NULL) {
+		DEBUG(0, ("talloc_new failed\n"));
+		return False;
+	}
+
+	init_enum_hnd(&enum_hnd, 0);
+
 	pipe_hnd = cli_rpc_pipe_open_noauth(cli, PI_SRVSVC, &status);
 
 	if (pipe_hnd == NULL) {
 		DEBUG(10, ("Could not connect to srvsvc pipe: %s\n",
 			   nt_errstr(status)));
-		TALLOC_FREE(frame);
-		return false;
+		TALLOC_FREE(mem_ctx);
+		return False;
 	}
 
-	ZERO_STRUCT(info_ctr);
-	ZERO_STRUCT(ctr1);
+	werr = rpccli_srvsvc_net_share_enum(pipe_hnd, mem_ctx, 1, &ctr,
+					    0xffffffff, &enum_hnd);
 
-	info_ctr.level = 1;
-	info_ctr.ctr.ctr1 = &ctr1;
-
-	status = rpccli_srvsvc_NetShareEnumAll(pipe_hnd, frame,
-					      pipe_hnd->cli->desthost,
-					      &info_ctr,
-					      0xffffffff,
-					      &total_entries,
-					      &resume_handle,
-					      &werr);
-
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(werr)) {
+	if (!W_ERROR_IS_OK(werr)) {
+		TALLOC_FREE(mem_ctx);
 		cli_rpc_pipe_close(pipe_hnd);
-		TALLOC_FREE(frame);
-		return false;
+		return False;
 	}
 
-	for (i=0; i < info_ctr.ctr.ctr1->count; i++) {
-		struct srvsvc_NetShareInfo1 info = info_ctr.ctr.ctr1->array[i];
-		browse_fn(info.name, info.type, info.comment, NULL);
+	for (i=0; i<ctr.num_entries; i++) {
+		SRV_SHARE_INFO_1 *info = &ctr.share.info1[i];
+		char *name, *comment;
+		name = rpcstr_pull_unistr2_talloc(
+			mem_ctx, &info->info_1_str.uni_netname);
+		comment = rpcstr_pull_unistr2_talloc(
+			mem_ctx, &info->info_1_str.uni_remark);
+		browse_fn(name, info->info_1.type, comment, NULL);
 	}
 
+	TALLOC_FREE(mem_ctx);
 	cli_rpc_pipe_close(pipe_hnd);
-	TALLOC_FREE(frame);
-	return true;
+	return True;
 }
 
 /****************************************************************************
  Try and browse available connections on a host.
 ****************************************************************************/
 
-static bool browse_host(bool sort)
+static BOOL browse_host(BOOL sort)
 {
 	int ret;
 	if (!grepable) {
@@ -3686,7 +3037,7 @@
 	}
 
 	if (browse_host_rpc(sort)) {
-		return true;
+		return True;
 	}
 
 	if((ret = cli_RNetShareEnum(cli, browse_fn, NULL)) == -1)
@@ -3699,10 +3050,10 @@
  List a server name.
 ****************************************************************************/
 
-static void server_fn(const char *name, uint32 m,
+static void server_fn(const char *name, uint32 m, 
                       const char *comment, void *state)
 {
-
+	
 	if (!grepable){
 		d_printf("\t%-16s     %s\n", name, comment);
 	} else {
@@ -3714,12 +3065,12 @@
  Try and browse available connections on a host.
 ****************************************************************************/
 
-static bool list_servers(const char *wk_grp)
+static BOOL list_servers(const char *wk_grp)
 {
 	fstring state;
 
 	if (!cli->server_domain)
-		return false;
+		return False;
 
 	if (!grepable) {
         	d_printf("\n\tServer               Comment\n");
@@ -3732,12 +3083,12 @@
 	if (!grepable) {
 	        d_printf("\n\tWorkgroup            Master\n");
 	        d_printf("\t---------            -------\n");
-	};
+	}; 
 
 	fstrcpy( state, "Workgroup" );
 	cli_NetServerEnum(cli, cli->server_domain, SV_TYPE_DOMAIN_ENUM,
 			  server_fn, state);
-	return true;
+	return True;
 }
 
 /****************************************************************************
@@ -3746,10 +3097,9 @@
 
 static int cmd_vuid(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *buf;
-
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	fstring buf;
+	
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		d_printf("Current VUID is %d\n", cli->vuid);
 		return 0;
 	}
@@ -3764,25 +3114,26 @@
 
 static int cmd_logon(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *l_username, *l_password;
-
-	if (!next_token_talloc(ctx, &cmd_ptr,&l_username,NULL)) {
+	pstring l_username, l_password;
+	pstring buf,buf2;
+  
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		d_printf("logon <username> [<password>]\n");
 		return 0;
 	}
 
-	if (!next_token_talloc(ctx, &cmd_ptr,&l_password,NULL)) {
+	pstrcpy(l_username, buf);
+
+	if (!next_token_nr(NULL,buf2,NULL,sizeof(buf))) 
+	{
 		char *pass = getpass("Password: ");
-		if (pass) {
-			l_password = talloc_strdup(ctx,pass);
-		}
-	}
-	if (!l_password) {
-		return 1;
-	}
+		if (pass) 
+			pstrcpy(l_password, pass);
+	} 
+	else
+		pstrcpy(l_password, buf2);
 
-	if (!NT_STATUS_IS_OK(cli_session_setup(cli, l_username,
+	if (!NT_STATUS_IS_OK(cli_session_setup(cli, l_username, 
 					       l_password, strlen(l_password),
 					       l_password, strlen(l_password),
 					       lp_workgroup()))) {
@@ -3802,6 +3153,7 @@
 static int cmd_list_connect(void)
 {
 	cli_cm_display();
+
 	return 0;
 }
 
@@ -3811,62 +3163,18 @@
 
 static int cmd_show_connect( void )
 {
-	TALLOC_CTX *ctx = talloc_tos();
 	struct cli_state *targetcli;
-	char *targetpath;
-
-	if (!cli_resolve_path(ctx, "", cli, client_get_cur_dir(),
-				&targetcli, &targetpath ) ) {
+	pstring targetpath;
+	
+	if ( !cli_resolve_path( "", cli, cur_dir, &targetcli, targetpath ) ) {
 		d_printf("showconnect %s: %s\n", cur_dir, cli_errstr(cli));
 		return 1;
 	}
-
+	
 	d_printf("//%s/%s\n", targetcli->desthost, targetcli->share);
 	return 0;
 }
 
-/****************************************************************************
- iosize command
-***************************************************************************/
-
-int cmd_iosize(void)
-{
-	TALLOC_CTX *ctx = talloc_tos();
-	char *buf;
-	int iosize;
-
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
-		if (!smb_encrypt) {
-			d_printf("iosize <n> or iosize 0x<n>. "
-				"Minimum is 16384 (0x4000), "
-				"max is 16776960 (0xFFFF00)\n");
-		} else {
-			d_printf("iosize <n> or iosize 0x<n>. "
-				"(Encrypted connection) ,"
-				"Minimum is 16384 (0x4000), "
-				"max is 130048 (0x1FC00)\n");
-		}
-		return 1;
-	}
-
-	iosize = strtol(buf,NULL,0);
-	if (smb_encrypt && (iosize < 0x4000 || iosize > 0xFC00)) {
-		d_printf("iosize out of range for encrypted "
-			"connection (min = 16384 (0x4000), "
-			"max = 130048 (0x1FC00)");
-		return 1;
-	} else if (!smb_encrypt && (iosize < 0x4000 || iosize > 0xFFFF00)) {
-		d_printf("iosize out of range (min = 16384 (0x4000), "
-			"max = 16776960 (0xFFFF00)");
-		return 1;
-	}
-
-	io_bufsize = iosize;
-	d_printf("iosize is now %d\n", io_bufsize);
-	return 0;
-}
-
-
 /* Some constants for completing filename arguments */
 
 #define COMPL_NONE        0          /* No completions */
@@ -3878,15 +3186,14 @@
  *       field is NULL, and NULL in that field is used in process_tok()
  *       (below) to indicate the end of the list.  crh
  */
-static struct {
-	const char *name;
-	int (*fn)(void);
-	const char *description;
-	char compl_args[2];      /* Completion argument info */
+static struct
+{
+  const char *name;
+  int (*fn)(void);
+  const char *description;
+  char compl_args[2];      /* Completion argument info */
 } commands[] = {
   {"?",cmd_help,"[command] give help on a command",{COMPL_NONE,COMPL_NONE}},
-  {"allinfo",cmd_allinfo,"<file> show all available info",
-   {COMPL_NONE,COMPL_NONE}},
   {"altname",cmd_altname,"<file> show alt name",{COMPL_NONE,COMPL_NONE}},
   {"archive",cmd_archive,"<level>\n0=ignore archive bit\n1=only get archive files\n2=only get archive files and reset archive bit\n3=get all files and reset archive bit",{COMPL_NONE,COMPL_NONE}},
   {"blocksize",cmd_block,"blocksize <number> (default 20)",{COMPL_NONE,COMPL_NONE}},
@@ -3899,20 +3206,17 @@
   {"del",cmd_del,"<mask> delete all matching files",{COMPL_REMOTE,COMPL_NONE}},
   {"dir",cmd_dir,"<mask> list the contents of the current directory",{COMPL_REMOTE,COMPL_NONE}},
   {"du",cmd_du,"<mask> computes the total size of the current directory",{COMPL_REMOTE,COMPL_NONE}},
-  {"echo",cmd_echo,"ping the server",{COMPL_NONE,COMPL_NONE}},
   {"exit",cmd_quit,"logoff the server",{COMPL_NONE,COMPL_NONE}},
   {"get",cmd_get,"<remote name> [local name] get a file",{COMPL_REMOTE,COMPL_LOCAL}},
   {"getfacl",cmd_getfacl,"<file name> get the POSIX ACL on a file (UNIX extensions only)",{COMPL_REMOTE,COMPL_LOCAL}},
   {"hardlink",cmd_hardlink,"<src> <dest> create a Windows hard link",{COMPL_REMOTE,COMPL_REMOTE}},
   {"help",cmd_help,"[command] give help on a command",{COMPL_NONE,COMPL_NONE}},
   {"history",cmd_history,"displays the command history",{COMPL_NONE,COMPL_NONE}},
-  {"iosize",cmd_iosize,"iosize <number> (default 64512)",{COMPL_NONE,COMPL_NONE}},
   {"lcd",cmd_lcd,"[directory] change/report the local current working directory",{COMPL_LOCAL,COMPL_NONE}},
   {"link",cmd_link,"<oldname> <newname> create a UNIX hard link",{COMPL_REMOTE,COMPL_REMOTE}},
   {"lock",cmd_lock,"lock <fnum> [r|w] <hex-start> <hex-len> : set a POSIX lock",{COMPL_REMOTE,COMPL_REMOTE}},
   {"lowercase",cmd_lowercase,"toggle lowercasing of filenames for get",{COMPL_NONE,COMPL_NONE}},  
   {"ls",cmd_dir,"<mask> list the contents of the current directory",{COMPL_REMOTE,COMPL_NONE}},
-  {"l",cmd_dir,"<mask> list the contents of the current directory",{COMPL_REMOTE,COMPL_NONE}},
   {"mask",cmd_select,"<mask> mask all filenames against this",{COMPL_REMOTE,COMPL_NONE}},
   {"md",cmd_mkdir,"<directory> make a directory",{COMPL_NONE,COMPL_NONE}},
   {"mget",cmd_mget,"<mask> get all the matching files",{COMPL_REMOTE,COMPL_NONE}},
@@ -3922,7 +3226,6 @@
   {"newer",cmd_newer,"<file> only mget files newer than the specified local file",{COMPL_LOCAL,COMPL_NONE}},
   {"open",cmd_open,"<mask> open a file",{COMPL_REMOTE,COMPL_NONE}},
   {"posix", cmd_posix, "turn on all POSIX capabilities", {COMPL_REMOTE,COMPL_NONE}},
-  {"posix_encrypt",cmd_posix_encrypt,"<domain> <user> <password> start up transport encryption",{COMPL_REMOTE,COMPL_NONE}},
   {"posix_open",cmd_posix_open,"<name> 0<mode> open_flags mode open a file using POSIX interface",{COMPL_REMOTE,COMPL_NONE}},
   {"posix_mkdir",cmd_posix_mkdir,"<name> 0<mode> creates a directory using POSIX interface",{COMPL_REMOTE,COMPL_NONE}},
   {"posix_rmdir",cmd_posix_rmdir,"<name> removes a directory using POSIX interface",{COMPL_REMOTE,COMPL_NONE}},
@@ -3955,24 +3258,23 @@
   {"logon",cmd_logon,"establish new logon",{COMPL_NONE,COMPL_NONE}},
   {"listconnect",cmd_list_connect,"list open connections",{COMPL_NONE,COMPL_NONE}},
   {"showconnect",cmd_show_connect,"display the current active connection",{COMPL_NONE,COMPL_NONE}},
-  {"..",cmd_cd_oneup,"change the remote directory (up one level)",{COMPL_REMOTE,COMPL_NONE}},
-
+  
   /* Yes, this must be here, see crh's comment above. */
   {"!",NULL,"run a shell command on the local system",{COMPL_NONE,COMPL_NONE}},
   {NULL,NULL,NULL,{COMPL_NONE,COMPL_NONE}}
 };
 
 /*******************************************************************
- Lookup a command string in the list of commands, including
+ Lookup a command string in the list of commands, including 
  abbreviations.
 ******************************************************************/
 
-static int process_tok(char *tok)
+static int process_tok(pstring tok)
 {
 	int i = 0, matches = 0;
 	int cmd=0;
 	int tok_len = strlen(tok);
-
+	
 	while (commands[i].fn != NULL) {
 		if (strequal(commands[i].name,tok)) {
 			matches = 1;
@@ -3984,7 +3286,7 @@
 		}
 		i++;
 	}
-
+  
 	if (matches == 0)
 		return(-1);
 	else if (matches == 1)
@@ -3999,14 +3301,12 @@
 
 static int cmd_help(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
 	int i=0,j;
-	char *buf;
-
-	if (next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	pstring buf;
+	
+	if (next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		if ((i = process_tok(buf)) >= 0)
-			d_printf("HELP %s:\n\t%s\n\n",
-				commands[i].name,commands[i].description);
+			d_printf("HELP %s:\n\t%s\n\n",commands[i].name,commands[i].description);
 	} else {
 		while (commands[i].description) {
 			for (j=0; commands[i].description && (j<5); j++) {
@@ -4023,46 +3323,41 @@
  Process a -c command string.
 ****************************************************************************/
 
-static int process_command_string(const char *cmd_in)
+static int process_command_string(char *cmd)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *cmd = talloc_strdup(ctx, cmd_in);
+	pstring line;
+	const char *ptr;
 	int rc = 0;
 
-	if (!cmd) {
-		return 1;
-	}
 	/* establish the connection if not already */
-
+	
 	if (!cli) {
-		cli = cli_cm_open(talloc_tos(), NULL, desthost,
-				service, true, smb_encrypt);
-		if (!cli) {
-			return 1;
-		}
+		cli = cli_cm_open(desthost, service, True);
+		if (!cli)
+			return 0;
 	}
-
+	
 	while (cmd[0] != '\0')    {
-		char *line;
 		char *p;
-		char *tok;
+		pstring tok;
 		int i;
-
+		
 		if ((p = strchr_m(cmd, ';')) == 0) {
-			line = cmd;
+			strncpy(line, cmd, 999);
+			line[1000] = '\0';
 			cmd += strlen(cmd);
 		} else {
-			*p = '\0';
-			line = cmd;
+			if (p - cmd > 999)
+				p = cmd + 999;
+			strncpy(line, cmd, p - cmd);
+			line[p - cmd] = '\0';
 			cmd = p + 1;
 		}
-
+		
 		/* and get the first part of the command */
-		cmd_ptr = line;
-		if (!next_token_talloc(ctx, &cmd_ptr,&tok,NULL)) {
-			continue;
-		}
-
+		ptr = line;
+		if (!next_token_nr(&ptr,tok,NULL,sizeof(tok))) continue;
+		
 		if ((i = process_tok(tok)) >= 0) {
 			rc = commands[i].fn();
 		} else if (i == -2) {
@@ -4071,94 +3366,71 @@
 			d_printf("%s: command not found\n",tok);
 		}
 	}
-
+	
 	return rc;
-}
+}	
 
 #define MAX_COMPLETIONS 100
 
 typedef struct {
-	char *dirmask;
+	pstring dirmask;
 	char **matches;
 	int count, samelen;
 	const char *text;
 	int len;
 } completion_remote_t;
 
-static void completion_remote_filter(const char *mnt,
-				file_info *f,
-				const char *mask,
-				void *state)
+static void completion_remote_filter(const char *mnt, file_info *f, const char *mask, void *state)
 {
 	completion_remote_t *info = (completion_remote_t *)state;
 
-	if ((info->count < MAX_COMPLETIONS - 1) &&
-			(strncmp(info->text, f->name, info->len) == 0) &&
-			(strcmp(f->name, ".") != 0) &&
-			(strcmp(f->name, "..") != 0)) {
+	if ((info->count < MAX_COMPLETIONS - 1) && (strncmp(info->text, f->name, info->len) == 0) && (strcmp(f->name, ".") != 0) && (strcmp(f->name, "..") != 0)) {
 		if ((info->dirmask[0] == 0) && !(f->mode & aDIR))
 			info->matches[info->count] = SMB_STRDUP(f->name);
 		else {
-			TALLOC_CTX *ctx = talloc_stackframe();
-			char *tmp;
+			pstring tmp;
 
-			tmp = talloc_strdup(ctx,info->dirmask);
-			if (!tmp) {
-				TALLOC_FREE(ctx);
-				return;
-			}
-			tmp = talloc_asprintf_append(tmp, f->name);
-			if (!tmp) {
-				TALLOC_FREE(ctx);
-				return;
-			}
-			if (f->mode & aDIR) {
-				tmp = talloc_asprintf_append(tmp, CLI_DIRSEP_STR);
-			}
-			if (!tmp) {
-				TALLOC_FREE(ctx);
-				return;
-			}
+			if (info->dirmask[0] != 0)
+				pstrcpy(tmp, info->dirmask);
+			else
+				tmp[0] = 0;
+			pstrcat(tmp, f->name);
+			if (f->mode & aDIR)
+				pstrcat(tmp, "/");
 			info->matches[info->count] = SMB_STRDUP(tmp);
-			TALLOC_FREE(ctx);
 		}
-		if (info->matches[info->count] == NULL) {
+		if (info->matches[info->count] == NULL)
 			return;
-		}
-		if (f->mode & aDIR) {
+		if (f->mode & aDIR)
 			smb_readline_ca_char(0);
-		}
-		if (info->count == 1) {
+
+		if (info->count == 1)
 			info->samelen = strlen(info->matches[info->count]);
-		} else {
-			while (strncmp(info->matches[info->count],
-						info->matches[info->count-1],
-						info->samelen) != 0) {
+		else
+			while (strncmp(info->matches[info->count], info->matches[info->count-1], info->samelen) != 0)
 				info->samelen--;
-			}
-		}
 		info->count++;
 	}
 }
 
 static char **remote_completion(const char *text, int len)
 {
-	TALLOC_CTX *ctx = talloc_stackframe();
-	char *dirmask = NULL;
-	char *targetpath = NULL;
-	struct cli_state *targetcli = NULL;
+	pstring dirmask;
 	int i;
-	completion_remote_t info = { NULL, NULL, 1, 0, NULL, 0 };
+	completion_remote_t info = { "", NULL, 1, 0, NULL, 0 };
 
 	/* can't have non-static intialisation on Sun CC, so do it
 	   at run time here */
 	info.samelen = len;
 	info.text = text;
 	info.len = len;
+		
+	if (len >= MIN(PATH_MAX,sizeof(pstring))) {
+		return(NULL);
+	}
 
 	info.matches = SMB_MALLOC_ARRAY(char *,MAX_COMPLETIONS);
 	if (!info.matches) {
-		TALLOC_FREE(ctx);
 		return NULL;
 	}
 
@@ -4180,57 +3452,37 @@
 	info.samelen = info.len = len-i-1;
 
 	if (i > 0) {
-		info.dirmask = SMB_MALLOC_ARRAY(char, i+2);
-		if (!info.dirmask) {
-			goto cleanup;
-		}
 		strncpy(info.dirmask, text, i+1);
 		info.dirmask[i+1] = 0;
-		dirmask = talloc_asprintf(ctx,
-					"%s%*s*",
-					client_get_cur_dir(),
-					i-1,
-					text);
+		pstr_sprintf(dirmask, "%s%*s*", cur_dir, i-1, text);
 	} else {
-		info.dirmask = SMB_STRDUP("");
-		if (!info.dirmask) {
-			goto cleanup;
-		}
-		dirmask = talloc_asprintf(ctx,
-					"%s*",
-					client_get_cur_dir());
+		pstr_sprintf(dirmask, "%s*", cur_dir);
 	}
-	if (!dirmask) {
-		goto cleanup;
-	}
 
-	if (!cli_resolve_path(ctx, "", cli, dirmask, &targetcli, &targetpath)) {
+	if (cli_list(cli, dirmask, aDIR | aSYSTEM | aHIDDEN, completion_remote_filter, &info) < 0)
 		goto cleanup;
-	}
-	if (cli_list(targetcli, targetpath, aDIR | aSYSTEM | aHIDDEN,
-				completion_remote_filter, (void *)&info) < 0) {
-		goto cleanup;
-	}
 
 	if (info.count == 1) {
+
 		/*
 		 * No matches at all, NULL indicates there is nothing
 		 */
+
 		SAFE_FREE(info.matches[0]);
 		SAFE_FREE(info.matches);
-		TALLOC_FREE(ctx);
 		return NULL;
 	}
 
 	if (info.count == 2) {
+
 		/*
 		 * Exactly one match in matches[1], indicate this is the one
 		 * in matches[0].
 		 */
+
 		info.matches[0] = info.matches[1];
 		info.matches[1] = NULL;
 		info.count -= 1;
-		TALLOC_FREE(ctx);
 		return info.matches;
 	}
 
@@ -4244,12 +3496,9 @@
 	return info.matches;
 
 cleanup:
-	for (i = 0; i < info.count; i++) {
-		SAFE_FREE(info.matches[i]);
-	}
-	SAFE_FREE(info.matches);
-	SAFE_FREE(info.dirmask);
-	TALLOC_FREE(ctx);
+	for (i = 0; i < info.count; i++)
+		free(info.matches[i]);
+	free(info.matches);
 	return NULL;
 }
 
@@ -4265,7 +3514,7 @@
 		buf = smb_readline_get_line_buffer();
 		if (buf == NULL)
 			return NULL;
-
+		
 		sp = strchr(buf, ' ');
 		if (sp == NULL)
 			return NULL;
@@ -4371,52 +3620,25 @@
 	timeout.tv_sec = 0;
 	timeout.tv_usec = 0;
 	sys_select_intr(cli->fd+1,&fds,NULL,NULL,&timeout);
-
-	/* We deliberately use receive_smb_raw instead of
+      		
+	/* We deliberately use receive_smb instead of
 	   client_receive_smb as we want to receive
 	   session keepalives and then drop them here.
 	*/
 	if (FD_ISSET(cli->fd,&fds)) {
-		NTSTATUS status;
-		size_t len;
-
-		set_smb_read_error(&cli->smb_rw_error, SMB_READ_OK);
-
-		status = receive_smb_raw(cli->fd, cli->inbuf, cli->bufsize, 0, 0, &len);
-
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(0, ("Read from server failed, maybe it closed "
-				  "the connection\n"));
-
-			if (NT_STATUS_EQUAL(status, NT_STATUS_END_OF_FILE)) {
-				set_smb_read_error(&cli->smb_rw_error,
-						   SMB_READ_EOF);
-				return;
-			}
-
-			if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT)) {
-				set_smb_read_error(&cli->smb_rw_error,
-						   SMB_READ_TIMEOUT);
-				return;
-			}
-
-			set_smb_read_error(&cli->smb_rw_error, SMB_READ_ERROR);
+		if (!receive_smb(cli->fd,cli->inbuf,cli->bufsize,0)) {
+			DEBUG(0, ("Read from server failed, maybe it closed the "
+				"connection\n"));
 			return;
 		}
-		if(CVAL(cli->inbuf,0) != SMBkeepalive) {
-			DEBUG(0, ("Read from server "
-				"returned unexpected packet!\n"));
-			return;
-		}
-
 		goto again;
 	}
-
+      
 	/* Ping the server to keep the connection alive using SMBecho. */
 	{
 		unsigned char garbage[16];
 		memset(garbage, 0xf0, sizeof(garbage));
-		cli_echo(cli, 1, garbage, sizeof(garbage));
+		cli_echo(cli, garbage, sizeof(garbage));
 	}
 }
 
@@ -4426,42 +3648,33 @@
 
 static int process_stdin(void)
 {
+	const char *ptr;
 	int rc = 0;
 
 	while (1) {
-		TALLOC_CTX *frame = talloc_stackframe();
-		char *tok = NULL;
-		char *the_prompt = NULL;
-		char *line = NULL;
+		pstring tok;
+		pstring the_prompt;
+		char *cline;
+		pstring line;
 		int i;
-
+		
 		/* display a prompt */
-		if (asprintf(&the_prompt, "smb: %s> ", client_get_cur_dir()) < 0) {
-			TALLOC_FREE(frame);
-			break;
-		}
-		line = smb_readline(the_prompt, readline_callback, completion_fn);
-		SAFE_FREE(the_prompt);
-		if (!line) {
-			TALLOC_FREE(frame);
-			break;
-		}
+		slprintf(the_prompt, sizeof(the_prompt)-1, "smb: %s> ", cur_dir);
+		cline = smb_readline(the_prompt, readline_callback, completion_fn);
+			
+		if (!cline) break;
+		
+		pstrcpy(line, cline);
 
 		/* special case - first char is ! */
 		if (*line == '!') {
 			system(line + 1);
-			SAFE_FREE(line);
-			TALLOC_FREE(frame);
 			continue;
 		}
-
+      
 		/* and get the first part of the command */
-		cmd_ptr = line;
-		if (!next_token_talloc(frame, &cmd_ptr,&tok,NULL)) {
-			TALLOC_FREE(frame);
-			SAFE_FREE(line);
-			continue;
-		}
+		ptr = line;
+		if (!next_token_nr(&ptr,tok,NULL,sizeof(tok))) continue;
 
 		if ((i = process_tok(tok)) >= 0) {
 			rc = commands[i].fn();
@@ -4470,8 +3683,6 @@
 		} else {
 			d_printf("%s: command not found\n",tok);
 		}
-		SAFE_FREE(line);
-		TALLOC_FREE(frame);
 	}
 	return rc;
 }
@@ -4480,30 +3691,29 @@
  Process commands from the client.
 ****************************************************************************/
 
-static int process(const char *base_directory)
+static int process(char *base_directory)
 {
 	int rc = 0;
 
-	cli = cli_cm_open(talloc_tos(), NULL,
-			desthost, service, true, smb_encrypt);
+	cli = cli_cm_open(desthost, service, True);
 	if (!cli) {
 		return 1;
 	}
 
-	if (base_directory && *base_directory) {
+	if (*base_directory) {
 		rc = do_cd(base_directory);
 		if (rc) {
 			cli_cm_shutdown();
 			return rc;
 		}
 	}
-
+	
 	if (cmdstr) {
 		rc = process_command_string(cmdstr);
 	} else {
 		process_stdin();
 	}
-
+  
 	cli_cm_shutdown();
 	return rc;
 }
@@ -4512,23 +3722,14 @@
  Handle a -L query.
 ****************************************************************************/
 
-static int do_host_query(const char *query_host)
+static int do_host_query(char *query_host)
 {
-	struct sockaddr_storage ss;
-
-	cli = cli_cm_open(talloc_tos(), NULL,
-			query_host, "IPC$", true, smb_encrypt);
+	cli = cli_cm_open(query_host, "IPC$", True);
 	if (!cli)
 		return 1;
 
-	browse_host(true);
+	browse_host(True);
 
-	if (interpret_string_addr(&ss, query_host, 0) && (ss.ss_family != AF_INET)) {
-		d_printf("%s is an IPv6 address -- no workgroup available\n",
-			query_host);
-		return 1;
-	}
-
 	if (port != 139) {
 
 		/* Workgroups simply don't make sense over anything
@@ -4536,8 +3737,7 @@
 
 		cli_cm_shutdown();
 		cli_cm_set_port( 139 );
-		cli = cli_cm_open(talloc_tos(), NULL,
-				query_host, "IPC$", true, smb_encrypt);
+		cli = cli_cm_open(query_host, "IPC$", True);
 	}
 
 	if (cli == NULL) {
@@ -4548,7 +3748,7 @@
 	list_servers(lp_workgroup());
 
 	cli_cm_shutdown();
-
+	
 	return(0);
 }
 
@@ -4556,28 +3756,27 @@
  Handle a tar operation.
 ****************************************************************************/
 
-static int do_tar_op(const char *base_directory)
+static int do_tar_op(char *base_directory)
 {
 	int ret;
 
 	/* do we already have a connection? */
 	if (!cli) {
-		cli = cli_cm_open(talloc_tos(), NULL,
-			desthost, service, true, smb_encrypt);
+		cli = cli_cm_open(desthost, service, True);
 		if (!cli)
 			return 1;
 	}
 
-	recurse=true;
+	recurse=True;
 
-	if (base_directory && *base_directory)  {
+	if (*base_directory)  {
 		ret = do_cd(base_directory);
 		if (ret) {
 			cli_cm_shutdown();
 			return ret;
 		}
 	}
-
+	
 	ret=process_tar();
 
 	cli_cm_shutdown();
@@ -4591,7 +3790,7 @@
 
 static int do_message_op(void)
 {
-	struct sockaddr_storage ss;
+	struct in_addr ip;
 	struct nmb_name called, calling;
 	fstring server_name;
 	char name_type_hex[10];
@@ -4605,9 +3804,9 @@
 	snprintf(name_type_hex, sizeof(name_type_hex), "#%X", name_type);
 	fstrcat(server_name, name_type_hex);
 
-        zero_addr(&ss);
-	if (have_ip)
-		ss = dest_ss;
+        zero_ip(&ip);
+	if (have_ip) 
+		ip = dest_ip;
 
 	/* we can only do messages over port 139 (to windows clients at least) */
 
@@ -4618,7 +3817,7 @@
 		return 1;
 	}
 
-	status = cli_connect(cli, server_name, &ss);
+	status = cli_connect(cli, server_name, &ip);
 	if (!NT_STATUS_IS_OK(status)) {
 		d_printf("Connection to %s failed. Error %s\n", desthost, nt_errstr(status));
 		return 1;
@@ -4636,24 +3835,26 @@
 	return 0;
 }
 
+
 /****************************************************************************
   main program
 ****************************************************************************/
 
  int main(int argc,char *argv[])
 {
-	char *base_directory = NULL;
+	pstring base_directory;
+	int len = 0;
 	int opt;
-	char *query_host = NULL;
-	bool message = false;
-	char *term_code = NULL;
+	pstring query_host;
+	BOOL message = False;
+	pstring term_code;
 	static const char *new_name_resolve_order = NULL;
 	poptContext pc;
 	char *p;
 	int rc = 0;
 	fstring new_workgroup;
-	bool tar_opt = false;
-	bool service_opt = false;
+	BOOL tar_opt = False;
+	BOOL service_opt = False;
 	struct poptOption long_options[] = {
 		POPT_AUTOHELP
 
@@ -4670,97 +3871,86 @@
 		{ "send-buffer", 'b', POPT_ARG_INT, &io_bufsize, 'b', "Changes the transmit/send buffer", "BYTES" },
 		{ "port", 'p', POPT_ARG_INT, &port, 'p', "Port to connect to", "PORT" },
 		{ "grepable", 'g', POPT_ARG_NONE, NULL, 'g', "Produce grepable output" },
-                { "browse", 'B', POPT_ARG_NONE, NULL, 'B', "Browse SMB servers using DNS" },
 		POPT_COMMON_SAMBA
 		POPT_COMMON_CONNECTION
 		POPT_COMMON_CREDENTIALS
 		POPT_TABLEEND
 	};
-	TALLOC_CTX *frame = talloc_stackframe();
+	
+	load_case_tables();
 
-	if (!client_set_cur_dir("\\")) {
-		exit(ENOMEM);
-	}
-
 #ifdef KANJI
-	term_code = talloc_strdup(frame,KANJI);
+	pstrcpy(term_code, KANJI);
 #else /* KANJI */
-	term_code = talloc_strdup(frame,"");
+	*term_code = 0;
 #endif /* KANJI */
-	if (!term_code) {
-		exit(ENOMEM);
-	}
 
-	/* initialize the workgroup name so we can determine whether or
+	*query_host = 0;
+	*base_directory = 0;
+	
+	/* initialize the workgroup name so we can determine whether or 
 	   not it was set by a command line option */
-
+	   
 	set_global_myworkgroup( "" );
 	set_global_myname( "" );
 
         /* set default debug level to 1 regardless of what smb.conf sets */
-	setup_logging( "smbclient", true );
+	setup_logging( "smbclient", True );
 	DEBUGLEVEL_CLASS[DBGC_ALL] = 1;
 	if ((dbf = x_fdup(x_stderr))) {
 		x_setbuf( dbf, NULL );
 	}
 
-	load_case_tables();
-
 	/* skip argv(0) */
 	pc = poptGetContext("smbclient", argc, (const char **) argv, long_options, 0);
 	poptSetOtherOptionHelp(pc, "service <password>");
 
-        lp_set_in_client(true); /* Make sure that we tell lp_load we are */
+	in_client = True;   /* Make sure that we tell lp_load we are */
 
 	while ((opt = poptGetNextOpt(pc)) != -1) {
 
 		/* if the tar option has been called previouslt, now we need to eat out the leftovers */
 		/* I see no other way to keep things sane --SSS */
-		if (tar_opt == true) {
+		if (tar_opt == True) {
 			while (poptPeekArg(pc)) {
 				poptGetArg(pc);
 			}
-			tar_opt = false;
+			tar_opt = False;
 		}
 
 		/* if the service has not yet been specified lets see if it is available in the popt stack */
 		if (!service_opt && poptPeekArg(pc)) {
-			service = talloc_strdup(frame, poptGetArg(pc));
-			if (!service) {
-				exit(ENOMEM);
-			}
-			service_opt = true;
+			pstrcpy(service, poptGetArg(pc));
+			service_opt = True;
 		}
 
 		/* if the service has already been retrieved then check if we have also a password */
-		if (service_opt && (!get_cmdline_auth_info_got_pass()) && poptPeekArg(pc)) {
-			set_cmdline_auth_info_password(poptGetArg(pc));
+		if (service_opt && (!cmdline_auth_info.got_pass) && poptPeekArg(pc)) {
+			pstrcpy(cmdline_auth_info.password, poptGetArg(pc));
+			cmdline_auth_info.got_pass = True;
 		}
-
+	
 		switch (opt) {
 		case 'M':
 			/* Messages are sent to NetBIOS name type 0x3
 			 * (Messenger Service).  Make sure we default
 			 * to port 139 instead of port 445. srl,crh
 			 */
-			name_type = 0x03;
+			name_type = 0x03; 
 			cli_cm_set_dest_name_type( name_type );
-			desthost = talloc_strdup(frame,poptGetOptArg(pc));
-			if (!desthost) {
-				exit(ENOMEM);
-			}
+			pstrcpy(desthost,poptGetOptArg(pc));
 			if( !port )
 				cli_cm_set_port( 139 );
- 			message = true;
+ 			message = True;
  			break;
 		case 'I':
 			{
-				if (!interpret_string_addr(&dest_ss, poptGetOptArg(pc), 0)) {
+				dest_ip = *interpret_addr2(poptGetOptArg(pc));
+				if (is_zero_ip(dest_ip))
 					exit(1);
-				}
-				have_ip = true;
+				have_ip = True;
 
-				cli_cm_set_dest_ss(&dest_ss);
+				cli_cm_set_dest_ip( dest_ip );
 			}
 			break;
 		case 'E':
@@ -4772,16 +3962,10 @@
 			break;
 
 		case 'L':
-			query_host = talloc_strdup(frame, poptGetOptArg(pc));
-			if (!query_host) {
-				exit(ENOMEM);
-			}
+			pstrcpy(query_host, poptGetOptArg(pc));
 			break;
 		case 't':
-			term_code = talloc_strdup(frame,poptGetOptArg(pc));
-			if (!term_code) {
-				exit(ENOMEM);
-			}
+			pstrcpy(term_code, poptGetOptArg(pc));
 			break;
 		case 'm':
 			max_protocol = interpret_protocol(poptGetOptArg(pc), max_protocol);
@@ -4802,48 +3986,37 @@
 				}
 			}
 			/* this must be the last option, mark we have parsed it so that we know we have */
-			tar_opt = true;
+			tar_opt = True;
 			break;
 		case 'D':
-			base_directory = talloc_strdup(frame, poptGetOptArg(pc));
-			if (!base_directory) {
-				exit(ENOMEM);
-			}
+			pstrcpy(base_directory,poptGetOptArg(pc));
 			break;
 		case 'g':
-			grepable=true;
+			grepable=True;
 			break;
-		case 'e':
-			smb_encrypt=true;
-			break;
-		case 'B':
-			return(do_smb_browse());
-
 		}
 	}
 
 	/* We may still have some leftovers after the last popt option has been called */
-	if (tar_opt == true) {
+	if (tar_opt == True) {
 		while (poptPeekArg(pc)) {
 			poptGetArg(pc);
 		}
-		tar_opt = false;
+		tar_opt = False;
 	}
 
 	/* if the service has not yet been specified lets see if it is available in the popt stack */
 	if (!service_opt && poptPeekArg(pc)) {
-		service = talloc_strdup(frame,poptGetArg(pc));
-		if (!service) {
-			exit(ENOMEM);
-		}
-		service_opt = true;
+		pstrcpy(service, poptGetArg(pc));
+		service_opt = True;
 	}
 
 	/* if the service has already been retrieved then check if we have also a password */
-	if (service_opt && !get_cmdline_auth_info_got_pass() && poptPeekArg(pc)) {
-		set_cmdline_auth_info_password(poptGetArg(pc));
+	if (service_opt && (!cmdline_auth_info.got_pass) && poptPeekArg(pc)) {
+		pstrcpy(cmdline_auth_info.password, poptGetArg(pc));
+		cmdline_auth_info.got_pass = True;
 	}
-
+	
 	/* check for the -P option */
 
 	if ( port != 0 )
@@ -4853,38 +4026,28 @@
 	 * Don't load debug level from smb.conf. It should be
 	 * set by cmdline arg or remain default (0)
 	 */
-	AllowDebugChange = false;
-
+	AllowDebugChange = False;
+	
 	/* save the workgroup...
-
-	   FIXME!! do we need to do this for other options as well
-	   (or maybe a generic way to keep lp_load() from overwriting
+	
+	   FIXME!! do we need to do this for other options as well 
+	   (or maybe a generic way to keep lp_load() from overwriting 
 	   everything)?  */
-
+	
 	fstrcpy( new_workgroup, lp_workgroup() );
-	calling_name = talloc_strdup(frame, global_myname() );
-	if (!calling_name) {
-		exit(ENOMEM);
-	}
-
+	pstrcpy( calling_name, global_myname() );
+	
 	if ( override_logfile )
-		setup_logging( lp_logfile(), false );
-
-	if (!lp_load(get_dyn_CONFIGFILE(),true,false,false,true)) {
+		setup_logging( lp_logfile(), False );
+	
+	if (!lp_load(dyn_CONFIGFILE,True,False,False,True)) {
 		fprintf(stderr, "%s: Can't load %s - run testparm to debug it\n",
-			argv[0], get_dyn_CONFIGFILE());
+			argv[0], dyn_CONFIGFILE);
 	}
-
-	if (get_cmdline_auth_info_use_machine_account() &&
-	    !set_cmdline_auth_info_machine_account_creds()) {
-		exit(-1);
-	}
-
+	
 	load_interfaces();
 
-	if (service_opt && service) {
-		size_t len;
-
+	if (service_opt) {
 		/* Convert any '/' characters in the service name to '\' characters */
 		string_replace(service, '/','\\');
 		if (count_chars(service,'\\') < 3) {
@@ -4899,37 +4062,31 @@
 			service[len] = '\0';
 		}
 	}
-
-	if ( strlen(new_workgroup) != 0 ) {
+	
+	if ( strlen(new_workgroup) != 0 )
 		set_global_myworkgroup( new_workgroup );
-	}
 
-	if ( strlen(calling_name) != 0 ) {
+	if ( strlen(calling_name) != 0 )
 		set_global_myname( calling_name );
-	} else {
-		TALLOC_FREE(calling_name);
-		calling_name = talloc_strdup(frame, global_myname() );
-	}
+	else
+		pstrcpy( calling_name, global_myname() );
 
-	smb_encrypt = get_cmdline_auth_info_smb_encrypt();
-	if (!init_names()) {
-		fprintf(stderr, "init_names() failed\n");
-		exit(1);
-	}
+	init_names();
 
 	if(new_name_resolve_order)
 		lp_set_name_resolve_order(new_name_resolve_order);
 
-	if (!tar_type && !query_host && !service && !message) {
+	if (!tar_type && !*query_host && !*service && !message) {
 		poptPrintUsage(pc, stderr, 0);
 		exit(1);
 	}
 
 	poptFreeContext(pc);
 
-	/* Store the username and password for dfs support */
+	/* store the username an password for dfs support */
 
-	cli_cm_set_credentials();
+	cli_cm_set_credentials( &cmdline_auth_info );
+	pstrcpy(username, cmdline_auth_info.username);
 
 	DEBUG(3,("Client started (version %s).\n", SAMBA_VERSION_STRING));
 
@@ -4939,7 +4096,7 @@
 		return do_tar_op(base_directory);
 	}
 
-	if (query_host && *query_host) {
+	if (*query_host) {
 		char *qhost = query_host;
 		char *slash;
 
@@ -4964,11 +4121,11 @@
 	if (message) {
 		return do_message_op();
 	}
-
+	
 	if (process(base_directory)) {
 		return 1;
 	}
 
-	TALLOC_FREE(frame);
+	talloc_destroy( ctx);
 	return rc;
 }

Modified: branches/samba/upstream/source/client/clitar.c
===================================================================
--- branches/samba/upstream/source/client/clitar.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/client/clitar.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,27 +1,28 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    Tar Extensions
    Copyright (C) Ricky Poulten 1995-1998
    Copyright (C) Richard Sharpe 1998
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 /* The following changes developed by Richard Sharpe for Canon Information
    Systems Research Australia (CISRA)
 
    1. Restore can now restore files with long file names
-   2. Save now saves directory information so that we can restore
+   2. Save now saves directory information so that we can restore 
       directory creation times
    3. tar now accepts both UNIX path names and DOS path names. I prefer
       those lovely /'s to those UGLY \'s :-)
@@ -51,7 +52,8 @@
 	struct timespec mtime_ts;
 	struct timespec atime_ts;
 	struct timespec ctime_ts;
-	char *name;     /* This is dynamically allocated */
+	char *name;     /* This is dynamically allocate */
+
 	file_info2 *next, *prev;  /* Used in the stack ... */
 };
 
@@ -79,33 +81,34 @@
 static int tp, ntarf, tbufsiz;
 static double ttarf;
 /* Incremental mode */
-static bool tar_inc=False;
+static BOOL tar_inc=False;
 /* Reset archive bit */
-static bool tar_reset=False;
+static BOOL tar_reset=False;
 /* Include / exclude mode (true=include, false=exclude) */
-static bool tar_excl=True;
+static BOOL tar_excl=True;
 /* use regular expressions for search on file names */
-static bool tar_re_search=False;
+static BOOL tar_re_search=False;
 /* Do not dump anything, just calculate sizes */
-static bool dry_run=False;
+static BOOL dry_run=False;
 /* Dump files with System attribute */
-static bool tar_system=True;
+static BOOL tar_system=True;
 /* Dump files with Hidden attribute */
-static bool tar_hidden=True;
+static BOOL tar_hidden=True;
 /* Be noisy - make a catalogue */
-static bool tar_noisy=True;
-static bool tar_real_noisy=False;  /* Don't want to be really noisy by default */
+static BOOL tar_noisy=True;
+static BOOL tar_real_noisy=False;  /* Don't want to be really noisy by default */
 
 char tar_type='\0';
 static char **cliplist=NULL;
 static int clipn=0;
-static bool must_free_cliplist = False;
-static const char *cmd_ptr = NULL;
+static BOOL must_free_cliplist = False;
 
-extern bool lowercase;
+extern file_info def_finfo;
+extern BOOL lowercase;
 extern uint16 cnum;
-extern bool readbraw_supported;
+extern BOOL readbraw_supported;
 extern int max_xmit;
+extern pstring cur_dir;
 extern int get_total_time_ms;
 extern int get_total_size;
 
@@ -114,8 +117,8 @@
 
 static void writetarheader(int f,  const char *aname, SMB_BIG_UINT size, time_t mtime,
 			   const char *amode, unsigned char ftype);
-static void do_atar(const char *rname_in,char *lname,file_info *finfo1);
-static void do_tar(file_info *finfo, const char *dir);
+static void do_atar(char *rname,char *lname,file_info *finfo1);
+static void do_tar(file_info *finfo);
 static void oct_it(SMB_BIG_UINT value, int ndgs, char *p);
 static void fixtarname(char *tptr, const char *fp, size_t l);
 static int dotarbuf(int f, char *b, int n);
@@ -124,10 +127,10 @@
 static void initarbuf(void);
 
 /* restore functions */
-static long readtarheader(union hblock *hb, file_info2 *finfo, const char *prefix);
+static long readtarheader(union hblock *hb, file_info2 *finfo, char *prefix);
 static long unoct(char *p, int ndgs);
 static void do_tarput(void);
-static void unfixtarname(char *tptr, char *fp, int l, bool first);
+static void unfixtarname(char *tptr, char *fp, int l, BOOL first);
 
 /*
  * tar specific utitlities
@@ -164,7 +167,7 @@
 	DEBUG(5, ("WriteTarHdr, Type = %c, Size= %.0f, Name = %s\n", ftype, (double)size, aname));
 
 	memset(hb.dummy, 0, sizeof(hb.dummy));
-
+  
 	l=strlen(aname);
 	/* We will be prepending a '.' in fixtarheader so use +2 to
 	 * take care of the . and terminating zero. JRA.
@@ -198,7 +201,12 @@
 	oct_it((SMB_BIG_UINT)0, 8, hb.dbuf.uid);
 	oct_it((SMB_BIG_UINT)0, 8, hb.dbuf.gid);
 	oct_it((SMB_BIG_UINT) size, 13, hb.dbuf.size);
-	if (size > (SMB_BIG_UINT)077777777777LL) {
+#ifdef HAVE_LONGLONG
+	if (size > (SMB_BIG_UINT)077777777777LL) {    
+#else
+	if (size > (SMB_BIG_UINT)077777777777) {    
+#endif
+
 		/* This is a non-POSIX compatible extention to store files
 			greater than 8GB. */
 
@@ -211,7 +219,7 @@
 	memcpy(hb.dbuf.chksum, "        ", sizeof(hb.dbuf.chksum));
 	memset(hb.dbuf.linkname, 0, NAMSIZ);
 	hb.dbuf.linkflag=ftype;
-
+  
 	for (chk=0, i=sizeof(hb.dummy), jp=hb.dummy; --i>=0;)
 		chk+=(0xFF & *jp++);
 
@@ -225,7 +233,7 @@
 Read a tar header into a hblock structure, and validate
 ***************************************************************************/
 
-static long readtarheader(union hblock *hb, file_info2 *finfo, const char *prefix)
+static long readtarheader(union hblock *hb, file_info2 *finfo, char *prefix)
 {
 	long chk, fchk;
 	int i;
@@ -256,7 +264,7 @@
 
 	if (fchk != chk) {
 		DEBUG(0, ("checksums don't match %ld %ld\n", fchk, chk));
-		dump_data(5, (uint8 *)hb - TBLOCK, TBLOCK *3);
+		dump_data(5, (char *)hb - TBLOCK, TBLOCK *3);
 		return -1;
 	}
 
@@ -276,7 +284,7 @@
 		if (hb->dbuf.linkflag == 0) {
 			DEBUG(6, ("Warning: NULL link flag (gnu tar archive ?) %s\n",
 				finfo->name));
-		} else {
+		} else { 
 			if (hb -> dbuf.linkflag == 'L') { /* We have a longlink */
 				/* Do nothing here at the moment. do_tarput will handle this
 					as long as the longlink gets back to it, as it has to advance 
@@ -288,7 +296,7 @@
 			}
 		}
 	}
-
+    
 	if ((unoct(hb->dbuf.mode, sizeof(hb->dbuf.mode)) & S_IFDIR) ||
 				(*(finfo->name+strlen(finfo->name)-1) == '\\')) {
 		finfo->mode=aDIR;
@@ -361,7 +369,7 @@
 
 	if (dry_run)
 		return;
-
+  
 	if (n+tp >= tbufsiz) {
 		memset(tarbuf+tp, 0, tbufsiz-tp);
 		write(f, tarbuf, tbufsiz);
@@ -438,13 +446,13 @@
 	/* skip final null, but do final space */
 	--ndgs;
 	p[--ndgs] = ' ';
-
+ 
 	/* Loop does at least one digit */
 	do {
 		p[--ndgs] = '0' + (char) (value & 7);
 		value >>= 3;
 	} while (ndgs > 0 && value != 0);
-
+ 
 	/* Do leading zeros */
 	while (ndgs > 0)
 		p[--ndgs] = '0';
@@ -470,8 +478,8 @@
 }
 
 /****************************************************************************
-Compare two strings in a slash insensitive way, allowing s1 to match s2
-if s1 is an "initial" string (up to directory marker).  Thus, if s2 is
+Compare two strings in a slash insensitive way, allowing s1 to match s2 
+if s1 is an "initial" string (up to directory marker).  Thus, if s2 is 
 a file in any subdirectory of s1, declare a match.
 ***************************************************************************/
 
@@ -505,15 +513,13 @@
 Ensure a remote path exists (make if necessary)
 ***************************************************************************/
 
-static bool ensurepath(const char *fname)
+static BOOL ensurepath(char *fname)
 {
 	/* *must* be called with buffer ready malloc'ed */
 	/* ensures path exists */
 
 	char *partpath, *ffname;
-	const char *p=fname;
-	char *basehack;
-	char *saveptr;
+	char *p=fname, *basehack;
 
 	DEBUG(5, ( "Ensurepath called with: %s\n", fname));
 
@@ -529,29 +535,24 @@
 
 	*partpath = 0;
 
-	/* fname copied to ffname so can strtok_r */
+	/* fname copied to ffname so can strtok */
 
 	safe_strcpy(ffname, fname, strlen(fname));
 
 	/* do a `basename' on ffname, so don't try and make file name directory */
-	if ((basehack=strrchr_m(ffname, '\\')) == NULL) {
-		SAFE_FREE(partpath);
-		SAFE_FREE(ffname);
+	if ((basehack=strrchr_m(ffname, '\\')) == NULL)
 		return True;
-	} else {
+	else
 		*basehack='\0';
-	}
 
-	p=strtok_r(ffname, "\\", &saveptr);
+	p=strtok(ffname, "\\");
 
 	while (p) {
 		safe_strcat(partpath, p, strlen(fname) + 1);
 
 		if (!cli_chkpath(cli, partpath)) {
 			if (!cli_mkdir(cli, partpath)) {
-				SAFE_FREE(partpath);
-				SAFE_FREE(ffname);
-				DEBUG(0, ("Error mkdir %s\n", cli_errstr(cli)));
+				DEBUG(0, ("Error mkdirhiering\n"));
 				return False;
 			} else {
 				DEBUG(3, ("mkdirhiering %s\n", partpath));
@@ -559,11 +560,9 @@
 		}
 
 		safe_strcat(partpath, "\\", strlen(fname) + 1);
-		p = strtok_r(NULL, "/\\", &saveptr);
+		p = strtok(NULL,"/\\");
 	}
 
-	SAFE_FREE(partpath);
-	SAFE_FREE(ffname);
 	return True;
 }
 
@@ -571,7 +570,7 @@
 {
 	int berr= 0;
 	int bytestowrite;
-
+  
 	DEBUG(5, ("Padding with %0.f zeros\n", (double)padsize));
 	memset(buf, 0, (size_t)bufsize);
 	while( !berr && padsize > 0 ) {
@@ -579,7 +578,7 @@
 		berr = dotarbuf(tarhandle, buf, bytestowrite) != bytestowrite;
 		padsize -= bytestowrite;
 	}
-
+  
 	return berr;
 }
 
@@ -604,70 +603,79 @@
 append one remote file to the tar file
 ***************************************************************************/
 
-static void do_atar(const char *rname_in,char *lname,file_info *finfo1)
+static void do_atar(char *rname,char *lname,file_info *finfo1)
 {
-	int fnum = -1;
+	int fnum;
 	SMB_BIG_UINT nread=0;
 	char ftype;
 	file_info2 finfo;
-	bool shallitime=True;
-	char *data = NULL;
+	BOOL shallitime=True;
+	char data[65520];
 	int read_size = 65520;
 	int datalen=0;
-	char *rname = NULL;
-	TALLOC_CTX *ctx = talloc_stackframe();
 
 	struct timeval tp_start;
 
 	GetTimeOfDay(&tp_start);
 
-	data = SMB_MALLOC_ARRAY(char, read_size);
-	if (!data) {
-		DEBUG(0,("do_atar: out of memory.\n"));
-		goto cleanup;
-	}
-
 	ftype = '0'; /* An ordinary file ... */
 
-	ZERO_STRUCT(finfo);
+	if (finfo1) {
+		finfo.size  = finfo1 -> size;
+		finfo.mode  = finfo1 -> mode;
+		finfo.uid   = finfo1 -> uid;
+		finfo.gid   = finfo1 -> gid;
+		finfo.mtime_ts = finfo1 -> mtime_ts;
+		finfo.atime_ts = finfo1 -> atime_ts;
+		finfo.ctime_ts = finfo1 -> ctime_ts;
+		finfo.name  = finfo1 -> name;
+	} else {
+		finfo.size  = def_finfo.size;
+		finfo.mode  = def_finfo.mode;
+		finfo.uid   = def_finfo.uid;
+		finfo.gid   = def_finfo.gid;
+		finfo.mtime_ts = def_finfo.mtime_ts;
+		finfo.atime_ts = def_finfo.atime_ts;
+		finfo.ctime_ts = def_finfo.ctime_ts;
+		finfo.name  = def_finfo.name;
+	}
 
-	finfo.size  = finfo1 -> size;
-	finfo.mode  = finfo1 -> mode;
-	finfo.uid   = finfo1 -> uid;
-	finfo.gid   = finfo1 -> gid;
-	finfo.mtime_ts = finfo1 -> mtime_ts;
-	finfo.atime_ts = finfo1 -> atime_ts;
-	finfo.ctime_ts = finfo1 -> ctime_ts;
-
 	if (dry_run) {
-		DEBUG(3,("skipping file %s of size %12.0f bytes\n", finfo1->name,
+		DEBUG(3,("skipping file %s of size %12.0f bytes\n", finfo.name,
 				(double)finfo.size));
 		shallitime=0;
 		ttarf+=finfo.size + TBLOCK - (finfo.size % TBLOCK);
 		ntarf++;
-		goto cleanup;
+		return;
 	}
 
-	rname = clean_name(ctx, rname_in);
-	if (!rname) {
-		goto cleanup;
-	}
-
 	fnum = cli_open(cli, rname, O_RDONLY, DENY_NONE);
 
+	clean_name(rname);
+
 	if (fnum == -1) {
 		DEBUG(0,("%s opening remote file %s (%s)\n",
-				cli_errstr(cli),rname, client_get_cur_dir()));
-		goto cleanup;
+				cli_errstr(cli),rname, cur_dir));
+		return;
 	}
 
 	finfo.name = string_create_s(strlen(rname));
 	if (finfo.name == NULL) {
 		DEBUG(0, ("Unable to allocate space for finfo.name in do_atar\n"));
-		goto cleanup;
+		return;
 	}
 
 	safe_strcpy(finfo.name,rname, strlen(rname));
+	if (!finfo1) {
+		time_t atime, mtime;
+		if (!cli_getattrE(cli, fnum, &finfo.mode, &finfo.size, NULL, &atime, &mtime)) {
+			DEBUG(0, ("getattrE: %s\n", cli_errstr(cli)));
+			return;
+		}
+		finfo.atime_ts = convert_time_t_to_timespec(atime);
+		finfo.mtime_ts = convert_time_t_to_timespec(mtime);
+		finfo.ctime_ts = finfo.mtime_ts;
+	}
 
 	DEBUG(3,("file %s attrib 0x%X\n",finfo.name,finfo.mode));
 
@@ -681,22 +689,22 @@
 		DEBUG(4, ("skipping %s - hidden bit is set\n", finfo.name));
 		shallitime=0;
 	} else {
-		bool wrote_tar_header = False;
+		BOOL wrote_tar_header = False;
 
 		DEBUG(3,("getting file %s of size %.0f bytes as a tar file %s",
 			finfo.name, (double)finfo.size, lname));
-
+      
 		do {
-
+	      
 			DEBUG(3,("nread=%.0f\n",(double)nread));
-
+	      
 			datalen = cli_read(cli, fnum, data, nread, read_size);
-
+	      
 			if (datalen == -1) {
 				DEBUG(0,("Error reading file %s : %s\n", rname, cli_errstr(cli)));
 				break;
 			}
-
+	      
 			nread += datalen;
 
 			/* Only if the first read succeeds, write out the tar header. */
@@ -724,7 +732,7 @@
 				DEBUG(0,("Error writing to tar file - %s\n", strerror(errno)));
 				break;
 			}
-
+	      
 			if ( (datalen == 0) && (finfo.size != 0) ) {
 				DEBUG(0,("Error reading file %s. Got 0 bytes\n", rname));
 				break;
@@ -745,7 +753,7 @@
 			/* round tar file to nearest block */
 			if (finfo.size % TBLOCK)
 				dozerobuf(tarhandle, TBLOCK - (finfo.size % TBLOCK));
-
+      
 			ttarf+=finfo.size + TBLOCK - (finfo.size % TBLOCK);
 			ntarf++;
 		} else {
@@ -753,9 +761,8 @@
 			shallitime=0;
 		}
 	}
-
+  
 	cli_close(cli, fnum);
-	fnum = -1;
 
 	if (shallitime) {
 		struct timeval tp_end;
@@ -764,7 +771,7 @@
 		/* if shallitime is true then we didn't skip */
 		if (tar_reset && !dry_run)
 			(void) do_setrattr(finfo.name, aARCH, ATTRRESET);
-
+      
 		GetTimeOfDay(&tp_end);
 		this_time = (tp_end.tv_sec - tp_start.tv_sec)*1000 + (tp_end.tv_usec - tp_start.tv_usec)/1000;
 		get_total_time_ms += this_time;
@@ -781,110 +788,72 @@
 				finfo.size / MAX(0.001, (1.024*this_time)),
 				get_total_size / MAX(0.001, (1.024*get_total_time_ms))));
 	}
-
-  cleanup:
-
-	if (fnum != -1) {
-		cli_close(cli, fnum);
-		fnum = -1;
-	}
-	TALLOC_FREE(ctx);
-	SAFE_FREE(data);
 }
 
 /****************************************************************************
 Append single file to tar file (or not)
 ***************************************************************************/
 
-static void do_tar(file_info *finfo, const char *dir)
+static void do_tar(file_info *finfo)
 {
-	TALLOC_CTX *ctx = talloc_stackframe();
+	pstring rname;
 
 	if (strequal(finfo->name,"..") || strequal(finfo->name,"."))
 		return;
 
 	/* Is it on the exclude list ? */
 	if (!tar_excl && clipn) {
-		char *exclaim;
+		pstring exclaim;
 
-		DEBUG(5, ("Excl: strlen(cur_dir) = %d\n", (int)strlen(client_get_cur_dir())));
+		DEBUG(5, ("Excl: strlen(cur_dir) = %d\n", (int)strlen(cur_dir)));
 
-		exclaim = talloc_asprintf(ctx,
-				"%s\\%s",
-				client_get_cur_dir(),
-				finfo->name);
-		if (!exclaim) {
-			return;
-		}
+		pstrcpy(exclaim, cur_dir);
+		*(exclaim+strlen(exclaim)-1)='\0';
 
+		pstrcat(exclaim, "\\");
+		pstrcat(exclaim, finfo->name);
+
 		DEBUG(5, ("...tar_re_search: %d\n", tar_re_search));
 
 		if ((!tar_re_search && clipfind(cliplist, clipn, exclaim)) ||
 				(tar_re_search && mask_match_list(exclaim, cliplist, clipn, True))) {
 			DEBUG(3,("Skipping file %s\n", exclaim));
-			TALLOC_FREE(exclaim);
 			return;
 		}
-		TALLOC_FREE(exclaim);
 	}
 
 	if (finfo->mode & aDIR) {
-		char *saved_curdir = NULL;
-		char *new_cd = NULL;
-		char *mtar_mask = NULL;
+		pstring saved_curdir;
+		pstring mtar_mask;
 
-		saved_curdir = talloc_strdup(ctx, client_get_cur_dir());
-		if (!saved_curdir) {
-			return;
-		}
+		pstrcpy(saved_curdir, cur_dir);
 
-		DEBUG(5, ("strlen(cur_dir)=%d, \
+		DEBUG(5, ("Sizeof(cur_dir)=%d, strlen(cur_dir)=%d, \
 strlen(finfo->name)=%d\nname=%s,cur_dir=%s\n",
-			(int)strlen(saved_curdir),
-			(int)strlen(finfo->name), finfo->name, saved_curdir));
+			(int)sizeof(cur_dir), (int)strlen(cur_dir),
+			(int)strlen(finfo->name), finfo->name, cur_dir));
 
-		new_cd = talloc_asprintf(ctx,
-				"%s%s\\",
-				client_get_cur_dir(),
-				finfo->name);
-		if (!new_cd) {
-			return;
-		}
-		client_set_cur_dir(new_cd);
+		pstrcat(cur_dir,finfo->name);
+		pstrcat(cur_dir,"\\");
 
-		DEBUG(5, ("Writing a dir, Name = %s\n", client_get_cur_dir()));
+		DEBUG(5, ("Writing a dir, Name = %s\n", cur_dir));
 
-		/* write a tar directory, don't bother with mode - just
-		 * set it to 40755 */
-		writetarheader(tarhandle, client_get_cur_dir(), 0,
-				finfo->mtime_ts.tv_sec, "040755 \0", '5');
+		/* write a tar directory, don't bother with mode - just set it to
+			* 40755 */
+		writetarheader(tarhandle, cur_dir, 0, finfo->mtime_ts.tv_sec, "040755 \0", '5');
 		if (tar_noisy) {
-			DEBUG(0,("                directory %s\n",
-				client_get_cur_dir()));
+			DEBUG(0,("                directory %s\n", cur_dir));
 		}
 		ntarf++;  /* Make sure we have a file on there */
-		mtar_mask = talloc_asprintf(ctx,
-				"%s*",
-				client_get_cur_dir());
-		if (!mtar_mask) {
-			return;
-		}
+		pstrcpy(mtar_mask,cur_dir);
+		pstrcat(mtar_mask,"*");
 		DEBUG(5, ("Doing list with mtar_mask: %s\n", mtar_mask));
 		do_list(mtar_mask, attribute, do_tar, False, True);
-		client_set_cur_dir(saved_curdir);
-		TALLOC_FREE(saved_curdir);
-		TALLOC_FREE(new_cd);
-		TALLOC_FREE(mtar_mask);
+		pstrcpy(cur_dir,saved_curdir);
 	} else {
-		char *rname = talloc_asprintf(ctx,
-					"%s%s",
-					client_get_cur_dir(),
-					finfo->name);
-		if (!rname) {
-			return;
-		}
+		pstrcpy(rname,cur_dir);
+		pstrcat(rname,finfo->name);
 		do_atar(rname,finfo->name,finfo);
-		TALLOC_FREE(rname);
 	}
 }
 
@@ -892,7 +861,7 @@
 Convert from UNIX to DOS file names
 ***************************************************************************/
 
-static void unfixtarname(char *tptr, char *fp, int l, bool first)
+static void unfixtarname(char *tptr, char *fp, int l, BOOL first)
 {
 	/* remove '.' from start of file name, convert from unix /'s to
 	 * dos \'s in path. Kill any absolute path names. But only if first!
@@ -996,7 +965,7 @@
 
 	DEBUG(5, ("get_file: file: %s, size %.0f\n", finfo.name, (double)finfo.size));
 
-	if (ensurepath(finfo.name) &&
+	if (ensurepath(finfo.name) && 
 			(fnum=cli_open(cli, finfo.name, O_RDWR|O_CREAT|O_TRUNC, DENY_NONE)) == -1) {
 		DEBUG(0, ("abandoning restore\n"));
 		return(False);
@@ -1082,7 +1051,7 @@
 }
 
 /* Create a directory.  We just ensure that the path exists and return as there
-   is no file associated with a directory
+   is no file associated with a directory 
 */
 static int get_dir(file_info2 finfo)
 {
@@ -1104,10 +1073,10 @@
 {
 	/* finfo.size here is the length of the filename as written by the "/./@LongLink" name
 	 * header call. */
-	int namesize = finfo.size + strlen(client_get_cur_dir()) + 2;
+	int namesize = finfo.size + strlen(cur_dir) + 2;
 	char *longname = (char *)SMB_MALLOC(namesize);
 	int offset = 0, left = finfo.size;
-	bool first = True;
+	BOOL first = True;
 
 	DEBUG(5, ("Restoring a long file name: %s\n", finfo.name));
 	DEBUG(5, ("Len = %.0f\n", (double)finfo.size));
@@ -1119,9 +1088,9 @@
 
 	/* First, add cur_dir to the long file name */
 
-	if (strlen(client_get_cur_dir()) > 0) {
-		strncpy(longname, client_get_cur_dir(), namesize);
-		offset = strlen(client_get_cur_dir());
+	if (strlen(cur_dir) > 0) {
+		strncpy(longname, cur_dir, namesize);
+		offset = strlen(cur_dir);
 	}
 
 	/* Loop through the blocks picking up the name */
@@ -1168,8 +1137,7 @@
 
 		DEBUG(5, ("Reading the next header ...\n"));
 
-		switch (readtarheader((union hblock *) buffer_p,
-					&finfo, client_get_cur_dir())) {
+		switch (readtarheader((union hblock *) buffer_p, &finfo, cur_dir)) {
 			case -2:    /* Hmm, not good, but not fatal */
 				DEBUG(0, ("Skipping %s...\n", finfo.name));
 				if ((next_block(tarbuf, &buffer_p, tbufsiz) <= 0) && !skip_file(finfo.size)) {
@@ -1213,7 +1181,7 @@
 		linkflag = ((union hblock *)buffer_p) -> dbuf.linkflag;
 		switch (linkflag) {
 			case '0':  /* Should use symbolic names--FIXME */
-				/*
+				/* 
 				 * Skip to the next block first, so we can get the file, FIXME, should
 				 * be in get_file ...
 				 * The 'finfo.size != 0' fix is from Bob Boehmer <boehmer at worldnet.att.net>
@@ -1261,11 +1229,10 @@
 
 int cmd_block(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *buf;
+	fstring buf;
 	int block;
 
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		DEBUG(0, ("blocksize <n>\n"));
 		return 1;
 	}
@@ -1278,6 +1245,7 @@
 
 	blocksize=block;
 	DEBUG(2,("blocksize is now %d\n", blocksize));
+
 	return 0;
 }
 
@@ -1287,10 +1255,9 @@
 
 int cmd_tarmode(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *buf;
+	fstring buf;
 
-	while (next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	while (next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		if (strequal(buf, "full"))
 			tar_inc=False;
 		else if (strequal(buf, "inc"))
@@ -1313,7 +1280,6 @@
 			tar_noisy=False;
 		else
 			DEBUG(0, ("tarmode: unrecognised option %s\n", buf));
-		TALLOC_FREE(buf);
 	}
 
 	DEBUG(0, ("tarmode is now %s, %s, %s, %s, %s\n",
@@ -1331,29 +1297,23 @@
 
 int cmd_setmode(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
 	char *q;
-	char *buf;
-	char *fname = NULL;
+	fstring buf;
+	pstring fname;
 	uint16 attra[2];
 	int direct=1;
 
 	attra[0] = attra[1] = 0;
 
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		DEBUG(0, ("setmode <filename> <[+|-]rsha>\n"));
 		return 1;
 	}
 
-	fname = talloc_asprintf(ctx,
-				"%s%s",
-				client_get_cur_dir(),
-				buf);
-	if (!fname) {
-		return 1;
-	}
+	pstrcpy(fname, cur_dir);
+	pstrcat(fname, buf);
 
-	while (next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	while (next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		q=buf;
 
 		while(*q) {
@@ -1394,77 +1354,25 @@
 	return 0;
 }
 
-/**
- Convert list of tokens to array; dependent on above routine.
- Uses the global cmd_ptr from above - bit of a hack.
-**/
-
-static char **toktocliplist(int *ctok, const char *sep)
-{
-	char *s=(char *)cmd_ptr;
-	int ictok=0;
-	char **ret, **iret;
-
-	if (!sep)
-		sep = " \t\n\r";
-
-	while(*s && strchr_m(sep,*s))
-		s++;
-
-	/* nothing left? */
-	if (!*s)
-		return(NULL);
-
-	do {
-		ictok++;
-		while(*s && (!strchr_m(sep,*s)))
-			s++;
-		while(*s && strchr_m(sep,*s))
-			*s++=0;
-	} while(*s);
-
-	*ctok=ictok;
-	s=(char *)cmd_ptr;
-
-	if (!(ret=iret=SMB_MALLOC_ARRAY(char *,ictok+1)))
-		return NULL;
-
-	while(ictok--) {
-		*iret++=s;
-		if (ictok > 0) {
-			while(*s++)
-				;
-			while(!*s)
-				s++;
-		}
-	}
-
-	ret[*ctok] = NULL;
-	return ret;
-}
-
 /****************************************************************************
 Principal command for creating / extracting
 ***************************************************************************/
 
 int cmd_tar(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *buf;
+	fstring buf;
 	char **argl = NULL;
 	int argcl = 0;
 	int ret;
 
-	if (!next_token_talloc(ctx, &cmd_ptr,&buf,NULL)) {
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
 		DEBUG(0,("tar <c|x>[IXbgan] <filename>\n"));
 		return 1;
 	}
 
 	argl=toktocliplist(&argcl, NULL);
-	if (!tar_parseargs(argcl, argl, buf, 0)) {
-		SAFE_FREE(argl);
+	if (!tar_parseargs(argcl, argl, buf, 0))
 		return 1;
-	}
 
 	ret = process_tar();
 	SAFE_FREE(argl);
@@ -1477,7 +1385,6 @@
 
 int process_tar(void)
 {
-	TALLOC_CTX *ctx = talloc_tos();
 	int rc = 0;
 	initarbuf();
 	switch(tar_type) {
@@ -1495,7 +1402,7 @@
 		case 'c':
 			if (clipn && tar_excl) {
 				int i;
-				char *tarmac = NULL;
+				pstring tarmac;
 
 				for (i=0; i<clipn; i++) {
 					DEBUG(5,("arg %d = %s\n", i, cliplist[i]));
@@ -1503,72 +1410,44 @@
 					if (*(cliplist[i]+strlen(cliplist[i])-1)=='\\') {
 						*(cliplist[i]+strlen(cliplist[i])-1)='\0';
 					}
-
+	
 					if (strrchr_m(cliplist[i], '\\')) {
-						char *p;
-						char *saved_dir = talloc_strdup(ctx,
-									client_get_cur_dir());
-						if (!saved_dir) {
-							return 1;
-						}
-
+						pstring saved_dir;
+	  
+						pstrcpy(saved_dir, cur_dir);
+	  
 						if (*cliplist[i]=='\\') {
-							tarmac = talloc_strdup(ctx,
-									cliplist[i]);
+							pstrcpy(tarmac, cliplist[i]);
 						} else {
-							tarmac = talloc_asprintf(ctx,
-									"%s%s",
-									client_get_cur_dir(),
-									cliplist[i]);
+							pstrcpy(tarmac, cur_dir);
+							pstrcat(tarmac, cliplist[i]);
 						}
-						if (!tarmac) {
-							return 1;
-						}
-						p = strrchr_m(tarmac, '\\');
-						if (!p) {
-							return 1;
-						}
-						p[1] = '\0';
-						client_set_cur_dir(tarmac);
+						pstrcpy(cur_dir, tarmac);
+						*(strrchr_m(cur_dir, '\\')+1)='\0';
 
 						DEBUG(5, ("process_tar, do_list with tarmac: %s\n", tarmac));
 						do_list(tarmac,attribute,do_tar, False, True);
-
-						client_set_cur_dir(saved_dir);
-
-						TALLOC_FREE(saved_dir);
-						TALLOC_FREE(tarmac);
+						pstrcpy(cur_dir,saved_dir);
 					} else {
-						tarmac = talloc_asprintf(ctx,
-								"%s%s",
-								client_get_cur_dir(),
-								cliplist[i]);
-						if (!tarmac) {
-							return 1;
-						}
+						pstrcpy(tarmac, cur_dir);
+						pstrcat(tarmac, cliplist[i]);
 						DEBUG(5, ("process_tar, do_list with tarmac: %s\n", tarmac));
 						do_list(tarmac,attribute,do_tar, False, True);
-						TALLOC_FREE(tarmac);
 					}
 				}
 			} else {
-				char *mask = talloc_asprintf(ctx,
-							"%s\\*",
-							client_get_cur_dir());
-				if (!mask) {
-					return 1;
-				}
+				pstring mask;
+				pstrcpy(mask,cur_dir);
 				DEBUG(5, ("process_tar, do_list with mask: %s\n", mask));
+				pstrcat(mask,"\\*");
 				do_list(mask,attribute,do_tar,False, True);
-				TALLOC_FREE(mask);
 			}
-
-			if (ntarf) {
+    
+			if (ntarf)
 				dotareof(tarhandle);
-			}
 			close(tarhandle);
 			SAFE_FREE(tarbuf);
-
+    
 			DEBUG(0, ("tar: dumped %d files and directories\n", ntarf));
 			DEBUG(0, ("Total bytes written: %.0f\n", (double)ttarf));
 			break;
@@ -1649,11 +1528,11 @@
 				break;
 			}
 		}
-
+    
 		if (buf[strlen(buf)-1] == '\n') {
 			buf[strlen(buf)-1] = '\0';
 		}
-
+    
 		if ((strlen(buf) + 1 + inclusion_buffer_sofar) >= inclusion_buffer_size) {
 			inclusion_buffer_size *= 2;
 			inclusion_buffer = (char *)SMB_REALLOC(inclusion_buffer,inclusion_buffer_size);
@@ -1664,7 +1543,7 @@
 				break;
 			}
 		}
-
+    
 		safe_strcpy(inclusion_buffer + inclusion_buffer_sofar, buf, inclusion_buffer_size - inclusion_buffer_sofar);
 		inclusion_buffer_sofar += strlen(buf) + 1;
 		clipn++;
@@ -1715,7 +1594,7 @@
 		}
 		return 0;
 	}
-
+  
 	/* cliplist and its elements are freed at the end of process_tar. */
 	return 1;
 }
@@ -1766,7 +1645,7 @@
 					return 0;
 				} else {
 					SMB_STRUCT_STAT stbuf;
-
+	
 					if (sys_stat(argv[Optind], &stbuf) == 0) {
 						newer_than = stbuf.st_mtime;
 						DEBUG(1,("Getting files newer than %s",

Deleted: branches/samba/upstream/source/client/dnsbrowse.c
===================================================================
--- branches/samba/upstream/source/client/dnsbrowse.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/client/dnsbrowse.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,237 +0,0 @@
-/*
-   Unix SMB/CIFS implementation.
-   DNS-SD browse client
-   Copyright (C) Rishi Srivatsavai 2007
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-#include "client/client_proto.h"
-
-#ifdef WITH_DNSSD_SUPPORT
-
-#include <dns_sd.h>
-
-/* Holds service instances found during DNS browse */
-struct mdns_smbsrv_result
-{
-	char *serviceName;
-	char *regType;
-	char *domain;
-	uint32_t ifIndex;
-	struct mdns_smbsrv_result *nextResult;
-};
-
-/* Maintains state during DNS browse */
-struct mdns_browse_state
-{
-	struct mdns_smbsrv_result *listhead; /* Browse result list head */
-	int browseDone;
-
-};
-
-
-static void
-do_smb_resolve_reply (DNSServiceRef sdRef, DNSServiceFlags flags,
-		uint32_t interfaceIndex, DNSServiceErrorType errorCode,
-		const char *fullname, const char *hosttarget, uint16_t port,
-		uint16_t txtLen, const unsigned char *txtRecord, void *context)
-{
-	printf("SMB service available on %s port %u\n",
-		hosttarget, ntohs(port));
-}
-
-
-static void do_smb_resolve(struct mdns_smbsrv_result *browsesrv)
-{
-	DNSServiceRef mdns_conn_sdref = NULL;
-	int mdnsfd;
-	int fdsetsz;
-	int ret;
-	fd_set *fdset = NULL;
-	struct timeval tv;
-	DNSServiceErrorType err;
-
-	TALLOC_CTX * ctx = talloc_tos();
-
-	err = DNSServiceResolve(&mdns_conn_sdref, 0 /* flags */,
-		browsesrv->ifIndex,
-		browsesrv->serviceName, browsesrv->regType, browsesrv->domain,
-		do_smb_resolve_reply, NULL);
-
-	if (err != kDNSServiceErr_NoError) {
-		return;
-	}
-
-	mdnsfd = DNSServiceRefSockFD(mdns_conn_sdref);
-	for (;;)  {
-		if (fdset != NULL) {
-			TALLOC_FREE(fdset);
-		}
-
-		fdsetsz = howmany(mdnsfd + 1, NFDBITS) * sizeof(fd_mask);
-		fdset = TALLOC_ZERO(ctx, fdsetsz);
-		FD_SET(mdnsfd, fdset);
-
-		tv.tv_sec = 1;
-		tv.tv_usec = 0;
-
-		/* Wait until response received from mDNS daemon */
-		ret = sys_select(mdnsfd + 1, fdset, NULL, NULL, &tv);
-		if (ret <= 0 && errno != EINTR) {
-			break;
-		}
-
-		if (FD_ISSET(mdnsfd, fdset)) {
-			/* Invoke callback function */
-			DNSServiceProcessResult(mdns_conn_sdref);
-			break;
-		}
-	}
-
-	TALLOC_FREE(fdset);
-	DNSServiceRefDeallocate(mdns_conn_sdref);
-}
-
-
-static void
-do_smb_browse_reply(DNSServiceRef sdRef, DNSServiceFlags flags,
-        uint32_t interfaceIndex, DNSServiceErrorType errorCode,
-        const char  *serviceName, const char *regtype,
-        const char  *replyDomain, void  *context)
-{
-	struct mdns_browse_state *bstatep = (struct mdns_browse_state *)context;
-	struct mdns_smbsrv_result *bresult;
-
-	if (bstatep == NULL) {
-		return;
-	}
-
-	if (errorCode != kDNSServiceErr_NoError) {
-		bstatep->browseDone = 1;
-		return;
-	}
-
-	if (flags & kDNSServiceFlagsMoreComing) {
-		bstatep->browseDone = 0;
-	} else {
-		bstatep->browseDone = 1;
-	}
-
-	if (!(flags & kDNSServiceFlagsAdd)) {
-		return;
-	}
-
-	bresult = TALLOC_ARRAY(talloc_tos(), struct mdns_smbsrv_result, 1);
-	if (bresult == NULL) {
-		return;
-	}
-
-	if (bstatep->listhead != NULL) {
-		bresult->nextResult = bstatep->listhead;
-	}
-
-	bresult->serviceName = talloc_strdup(talloc_tos(), serviceName);
-	bresult->regType = talloc_strdup(talloc_tos(), regtype);
-	bresult->domain = talloc_strdup(talloc_tos(), replyDomain);
-	bresult->ifIndex = interfaceIndex;
-	bstatep->listhead = bresult;
-}
-
-int do_smb_browse(void)
-{
-	int mdnsfd;
-	int fdsetsz;
-	int ret;
-	fd_set *fdset = NULL;
-	struct mdns_browse_state bstate;
-	struct mdns_smbsrv_result *resptr;
-	struct timeval tv;
-	DNSServiceRef mdns_conn_sdref = NULL;
-	DNSServiceErrorType err;
-
-	TALLOC_CTX * ctx = talloc_stackframe();
-
-	ZERO_STRUCT(bstate);
-
-	err = DNSServiceBrowse(&mdns_conn_sdref, 0, 0, "_smb._tcp", "",
-			do_smb_browse_reply, &bstate);
-
-	if (err != kDNSServiceErr_NoError) {
-		d_printf("Error connecting to the Multicast DNS daemon\n");
-		TALLOC_FREE(ctx);
-		return 1;
-	}
-
-	mdnsfd = DNSServiceRefSockFD(mdns_conn_sdref);
-	for (;;)  {
-		if (fdset != NULL) {
-			TALLOC_FREE(fdset);
-		}
-
-		fdsetsz = howmany(mdnsfd + 1, NFDBITS) * sizeof(fd_mask);
-		fdset = TALLOC_ZERO(ctx, fdsetsz);
-		FD_SET(mdnsfd, fdset);
-
-		tv.tv_sec = 1;
-		tv.tv_usec = 0;
-
-		/* Wait until response received from mDNS daemon */
-		ret = sys_select(mdnsfd + 1, fdset, NULL, NULL, &tv);
-		if (ret <= 0 && errno != EINTR) {
-			break;
-		}
-
-		if (FD_ISSET(mdnsfd, fdset)) {
-			/* Invoke callback function */
-			if (DNSServiceProcessResult(mdns_conn_sdref)) {
-				break;
-			}
-			if (bstate.browseDone) {
-				break;
-			}
-		}
-	}
-
-	DNSServiceRefDeallocate(mdns_conn_sdref);
-
-	if (bstate.listhead != NULL) {
-		resptr = bstate.listhead;
-		while (resptr != NULL) {
-			struct mdns_smbsrv_result *oldresptr;
-			oldresptr = resptr;
-
-			/* Resolve smb service instance */
-			do_smb_resolve(resptr);
-
-			resptr = resptr->nextResult;
-		}
-	}
-
-	TALLOC_FREE(ctx);
-	return 0;
-}
-
-#else /* WITH_DNSSD_SUPPORT */
-
-int do_smb_browse(void)
-{
-    d_printf("DNS-SD browsing is not supported on this platform\n");
-    return 1;
-}
-
-#endif /* WITH_DNSSD_SUPPORT */
-
-

Modified: branches/samba/upstream/source/client/mount.cifs.c
===================================================================
--- branches/samba/upstream/source/client/mount.cifs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/client/mount.cifs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,10 @@
 /* 
    Mount helper utility for Linux CIFS VFS (virtual filesystem) client
    Copyright (C) 2003,2008 Steve French  (sfrench at us.ibm.com)
-   Copyright (C) 2008 Jeremy Allison (jra at samba.org)
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +13,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #ifndef _GNU_SOURCE
 #define _GNU_SOURCE
@@ -41,7 +41,7 @@
 #include <limits.h>
 
 #define MOUNT_CIFS_VERSION_MAJOR "1"
-#define MOUNT_CIFS_VERSION_MINOR "11"
+#define MOUNT_CIFS_VERSION_MINOR "10"
 
 #ifndef MOUNT_CIFS_VENDOR_SUFFIX
  #ifdef _SAMBA_BUILD_
@@ -64,17 +64,8 @@
 #define MS_BIND 4096
 #endif
 
-#define MAX_UNC_LEN 1024
-
 #define CONST_DISCARD(type, ptr)      ((type) ((void *) (ptr)))
 
-#ifndef SAFE_FREE
-#define SAFE_FREE(x) do { if ((x) != NULL) {free(x); x=NULL;} } while(0)
-#endif
-
-#define MOUNT_PASSWD_SIZE 64
-#define DOMAIN_SIZE 64
-
 const char *thisprogram;
 int verboseflag = 0;
 static int got_password = 0;
@@ -84,6 +75,7 @@
 static int got_unc = 0;
 static int got_uid = 0;
 static int got_gid = 0;
+static int free_share_name = 0;
 static char * user_name = NULL;
 static char * mountpassword = NULL;
 char * domain_name = NULL;
@@ -145,22 +137,24 @@
 	printf("\nLess commonly used options:");
 	printf("\n\tcredentials=<filename>,guest,perm,noperm,setuids,nosetuids,rw,ro,");
 	printf("\n\tsep=<char>,iocharset=<codepage>,suid,nosuid,exec,noexec,serverino,");
-	printf("\n\tmapchars,nomapchars,nolock,servernetbiosname=<SRV_RFC1001NAME>");
-	printf("\n\tdirectio,nounix,cifsacl,sec=<authentication mechanism>,sign");
+	printf("\n\tdirectio,mapchars,nomapchars,nolock,servernetbiosname=<SRV_RFC1001NAME>");
 	printf("\n\nOptions not needed for servers supporting CIFS Unix extensions");
 	printf("\n\t(e.g. unneeded for mounts to most Samba versions):");
 	printf("\n\tuid=<uid>,gid=<gid>,dir_mode=<mode>,file_mode=<mode>,sfu");
 	printf("\n\nRarely used options:");
 	printf("\n\tport=<tcpport>,rsize=<size>,wsize=<size>,unc=<unc_name>,ip=<ip_address>,");
 	printf("\n\tdev,nodev,nouser_xattr,netbiosname=<OUR_RFC1001NAME>,hard,soft,intr,");
-	printf("\n\tnointr,ignorecase,noposixpaths,noacl,prefixpath=<path>,nobrl");
-	printf("\n\tin6_addr");
+	printf("\n\tnointr,ignorecase,noposixpaths,noacl");
 	printf("\n\nOptions are described in more detail in the manual page");
 	printf("\n\tman 8 mount.cifs\n");
 	printf("\nTo display the version number of the mount helper:");
 	printf("\n\t%s -V\n",thisprogram);
 
-	SAFE_FREE(mountpassword);
+	if(mountpassword) {
+		memset(mountpassword,0,64);
+		free(mountpassword);
+		mountpassword = NULL;
+	}
 	exit(1);
 }
 
@@ -213,20 +207,22 @@
 				for(length = 0;length<4087;length++) {
 					if ((temp_val[length] == '\n')
 					    || (temp_val[length] == '\0')) {
-						temp_val[length] = '\0';
 						break;
 					}
 				}
 				if(length > 4086) {
 					printf("mount.cifs failed due to malformed username in credentials file");
 					memset(line_buf,0,4096);
+					if(mountpassword) {
+						memset(mountpassword,0,64);
+					}
 					exit(1);
 				} else {
 					got_user = 1;
 					user_name = (char *)calloc(1 + length,1);
 					/* BB adding free of user_name string before exit,
 						not really necessary but would be cleaner */
-					strlcpy(user_name,temp_val, length+1);
+					strncpy(user_name,temp_val, length);
 				}
 			}
 		} else if (strncasecmp("password",line_buf+i,8) == 0) {
@@ -234,24 +230,26 @@
 			if(temp_val) {
 				/* go past equals sign */
 				temp_val++;
-				for(length = 0;length<MOUNT_PASSWD_SIZE+1;length++) {
+				for(length = 0;length<65;length++) {
 					if ((temp_val[length] == '\n')
 					    || (temp_val[length] == '\0')) {
-						temp_val[length] = '\0';
 						break;
 					}
 				}
-				if(length > MOUNT_PASSWD_SIZE) {
+				if(length > 64) {
 					printf("mount.cifs failed: password in credentials file too long\n");
 					memset(line_buf,0, 4096);
+					if(mountpassword) {
+						memset(mountpassword,0,64);
+					}
 					exit(1);
 				} else {
 					if(mountpassword == NULL) {
-						mountpassword = (char *)calloc(MOUNT_PASSWD_SIZE+1,1);
+						mountpassword = (char *)calloc(65,1);
 					} else
-						memset(mountpassword,0,MOUNT_PASSWD_SIZE);
+						memset(mountpassword,0,64);
 					if(mountpassword) {
-						strlcpy(mountpassword,temp_val,MOUNT_PASSWD_SIZE+1);
+						strncpy(mountpassword,temp_val,length);
 						got_password = 1;
 					}
 				}
@@ -263,23 +261,25 @@
                                 temp_val++;
 				if(verboseflag)
 					printf("\nDomain %s\n",temp_val);
-                                for(length = 0;length<DOMAIN_SIZE+1;length++) {
+                                for(length = 0;length<65;length++) {
 					if ((temp_val[length] == '\n')
 					    || (temp_val[length] == '\0')) {
-						temp_val[length] = '\0';
 						break;
 					}
                                 }
-                                if(length > DOMAIN_SIZE) {
+                                if(length > 64) {
                                         printf("mount.cifs failed: domain in credentials file too long\n");
+                                        if(mountpassword) {
+                                                memset(mountpassword,0,64);
+                                        }
                                         exit(1);
                                 } else {
                                         if(domain_name == NULL) {
-                                                domain_name = (char *)calloc(DOMAIN_SIZE+1,1);
+                                                domain_name = (char *)calloc(65,1);
                                         } else
-                                                memset(domain_name,0,DOMAIN_SIZE);
+                                                memset(domain_name,0,64);
                                         if(domain_name) {
-                                                strlcpy(domain_name,temp_val,DOMAIN_SIZE+1);
+                                                strncpy(domain_name,temp_val,length);
                                                 got_domain = 1;
                                         }
                                 }
@@ -288,7 +288,11 @@
 
 	}
 	fclose(fs);
-	SAFE_FREE(line_buf);
+	if(line_buf) {
+		memset(line_buf,0,4096);
+		free(line_buf);
+		line_buf = NULL;
+	}
 	return 0;
 }
 
@@ -299,9 +303,9 @@
 	char c;
 
 	if(mountpassword == NULL)
-		mountpassword = (char *)calloc(MOUNT_PASSWD_SIZE+1,1);
+		mountpassword = (char *)calloc(65,1);
 	else 
-		memset(mountpassword, 0, MOUNT_PASSWD_SIZE);
+		memset(mountpassword, 0, 64);
 
 	if (mountpassword == NULL) {
 		printf("malloc failed\n");
@@ -318,10 +322,11 @@
 	}
 	/* else file already open and fd provided */
 
-	for(i=0;i<MOUNT_PASSWD_SIZE;i++) {
+	for(i=0;i<64;i++) {
 		rc = read(file_descript,&c,1);
 		if(rc < 0) {
 			printf("mount.cifs failed. Error %s reading password file\n",strerror(errno));
+			memset(mountpassword,0,64);
 			if(filename != NULL)
 				close(file_descript);
 			exit(1);
@@ -333,15 +338,13 @@
 			break;
 		} else /* read valid character */ {
 			if((c == 0) || (c == '\n')) {
-				mountpassword[i] = '\0';
 				break;
 			} else 
 				mountpassword[i] = c;
 		}
 	}
-	if((i == MOUNT_PASSWD_SIZE) && (verboseflag)) {
-		printf("\nWarning: password longer than %d characters specified in cifs password file",
-			MOUNT_PASSWD_SIZE);
+	if((i == 64) && (verboseflag)) {
+		printf("\nWarning: password longer than 64 characters specified in cifs password file");
 	}
 	got_password = 1;
 	if(filename != NULL) {
@@ -428,13 +431,13 @@
 					if(percent_char) {
 						*percent_char = ',';
 						if(mountpassword == NULL)
-							mountpassword = (char *)calloc(MOUNT_PASSWD_SIZE+1,1);
+							mountpassword = (char *)calloc(65,1);
 						if(mountpassword) {
 							if(got_password)
 								printf("\nmount.cifs warning - password specified twice\n");
 							got_password = 1;
 							percent_char++;
-							strlcpy(mountpassword, percent_char,MOUNT_PASSWD_SIZE+1);
+							strncpy(mountpassword, percent_char,64);
 						/*  remove password from username */
 							while(*percent_char != 0) {
 								*percent_char = ',';
@@ -520,7 +523,7 @@
 				printf("CIFS: invalid domain name\n");
 				return 1;	/* needs_arg; */
 			}
-			if (strnlen(value, DOMAIN_SIZE+1) < DOMAIN_SIZE+1) {
+			if (strnlen(value, 65) < 65) {
 				got_domain = 1;
 			} else {
 				printf("domain name too long\n");
@@ -708,7 +711,7 @@
 		out_len = strlen(out);
 	}
 
-	SAFE_FREE(*optionsp);
+	free(*optionsp);
 	*optionsp = out;
 	return 0;
 }
@@ -736,7 +739,7 @@
 
 	if(number_of_commas == 0)
 		return;
-	if(number_of_commas > MOUNT_PASSWD_SIZE) {
+	if(number_of_commas > 64) {
 		/* would otherwise overflow the mount options buffer */
 		printf("\nInvalid password. Password contains too many commas.\n");
 		return;
@@ -755,7 +758,7 @@
 	}
 	new_pass_buf[len+number_of_commas] = 0;
 
-	SAFE_FREE(*ppasswrd);
+	free(*ppasswrd);
 	*ppasswrd = new_pass_buf;
 	
 	return;
@@ -835,31 +838,17 @@
 	return domainnm;
 }
 
-/* replace all occurances of "from" in a string with "to" */
-static void replace_char(char *string, char from, char to, int maxlen)
-{
-	char *lastchar = string + maxlen;
-	while (string) {
-		string = strchr(string, from);
-		if (string) {
-			*string = to;
-			if (string >= lastchar)
-				return;
-		}
-	}
-}
-
 /* Note that caller frees the returned buffer if necessary */
 static char * parse_server(char ** punc_name)
 {
 	char * unc_name = *punc_name;
-	int length = strnlen(unc_name, MAX_UNC_LEN);
+	int length = strnlen(unc_name,1024);
 	char * share;
 	char * ipaddress_string = NULL;
 	struct hostent * host_entry = NULL;
 	struct in_addr server_ipaddr;
 
-	if(length > (MAX_UNC_LEN - 1)) {
+	if(length > 1023) {
 		printf("mount error: UNC name too long");
 		return NULL;
 	}
@@ -878,6 +867,7 @@
 			/* check for nfs syntax ie server:share */
 			share = strchr(unc_name,':');
 			if(share) {
+				free_share_name = 1;
 				*punc_name = (char *)malloc(length+3);
 				if(*punc_name == NULL) {
 					/* put the original string back  if 
@@ -885,9 +875,9 @@
 					*punc_name = unc_name;
 					return NULL;
 				}
+					
 				*share = '/';
-				strlcpy((*punc_name)+2,unc_name,length+1);
-				SAFE_FREE(unc_name);
+				strncpy((*punc_name)+2,unc_name,length);
 				unc_name = *punc_name;
 				unc_name[length+2] = 0;
 				goto continue_unc_parsing;
@@ -901,18 +891,15 @@
 			unc_name[0] = '/';
 			unc_name[1] = '/';
 			unc_name += 2;
-
-			/* allow for either delimiter between host and sharename */
-			if ((share = strpbrk(unc_name, "/\\"))) {
+			if ((share = strchr(unc_name, '/')) || 
+				(share = strchr(unc_name,'\\'))) {
 				*share = 0;  /* temporarily terminate the string */
 				share += 1;
 				if(got_ip == 0) {
 					host_entry = gethostbyname(unc_name);
 				}
-				*(share - 1) = '/'; /* put delimiter back */
-
-				/* we don't convert the prefixpath delimiters since '\\' is a valid char in posix paths */
-				if ((prefixpath = strpbrk(share, "/\\"))) {
+				*(share - 1) = '/'; /* put the slash back */
+				if ((prefixpath = strchr(share, '/'))) {
 					*prefixpath = 0;  /* permanently terminate the string */
 					if (!strlen(++prefixpath))
 						prefixpath = NULL; /* this needs to be done explicitly */
@@ -977,25 +964,6 @@
 	{ NULL, 0, NULL, 0 }
 };
 
-/* convert a string to uppercase. return false if the string
- * wasn't ASCII or was a NULL ptr */
-static int
-uppercase_string(char *string)
-{
-	if (!string)
-		return 0;
-
-	while (*string) {
-		/* check for unicode */
-		if ((unsigned char) string[0] & 0x80)
-			return 0;
-		*string = toupper((unsigned char) *string);
-		string++;
-	}
-
-	return 1;
-}
-
 int main(int argc, char ** argv)
 {
 	int c;
@@ -1008,7 +976,6 @@
 	char * options = NULL;
 	char * resolved_path = NULL;
 	char * temp;
-	char * dev_name;
 	int rc;
 	int rsize = 0;
 	int wsize = 0;
@@ -1045,16 +1012,8 @@
 	printf(" node: %s machine: %s sysname %s domain %s\n", sysinfo.nodename,sysinfo.machine,sysinfo.sysname,sysinfo.domainname);
 #endif */
 	if(argc > 2) {
-		dev_name = argv[1];
-		share_name = strndup(argv[1], MAX_UNC_LEN);
-		if (share_name == NULL) {
-			fprintf(stderr, "%s: %s", argv[0], strerror(ENOMEM));
-			exit(1);
-		}
+		share_name = argv[1];
 		mountpoint = argv[2];
-	} else {
-		mount_cifs_usage();
-		exit(1);
 	}
 
 	/* add sharename in opts string as unc= parm */
@@ -1113,6 +1072,9 @@
 			MOUNT_CIFS_VERSION_MAJOR,
 			MOUNT_CIFS_VERSION_MINOR,
 			MOUNT_CIFS_VENDOR_SUFFIX);
+			if(mountpassword) {
+				memset(mountpassword,0,64);
+			}
 			exit (0);
 		case 'w':
 			flags &= ~MS_RDONLY;
@@ -1173,10 +1135,10 @@
 			break;
 		case 'p':
 			if(mountpassword == NULL)
-				mountpassword = (char *)calloc(MOUNT_PASSWD_SIZE+1,1);
+				mountpassword = (char *)calloc(65,1);
 			if(mountpassword) {
 				got_password = 1;
-				strlcpy(mountpassword,optarg,MOUNT_PASSWD_SIZE+1);
+				strncpy(mountpassword,optarg,64);
 			}
 			break;
 		case 'S':
@@ -1191,16 +1153,16 @@
 		}
 	}
 
-	if((argc < 3) || (dev_name == NULL) || (mountpoint == NULL)) {
+	if((argc < 3) || (share_name == NULL) || (mountpoint == NULL)) {
 		mount_cifs_usage();
 		exit(1);
 	}
 
 	if (getenv("PASSWD")) {
 		if(mountpassword == NULL)
-			mountpassword = (char *)calloc(MOUNT_PASSWD_SIZE+1,1);
+			mountpassword = (char *)calloc(65,1);
 		if(mountpassword) {
-			strlcpy(mountpassword,getenv("PASSWD"),MOUNT_PASSWD_SIZE+1);
+			strncpy(mountpassword,getenv("PASSWD"),64);
 			got_password = 1;
 		}
 	} else if (getenv("PASSWD_FD")) {
@@ -1266,14 +1228,16 @@
 	}
        
 	if(got_password == 0) {
-		char *tmp_pass = getpass("Password: "); /* BB obsolete sys call but
-							   no good replacement yet. */
-		mountpassword = (char *)calloc(MOUNT_PASSWD_SIZE+1,1);
+		char *tmp_pass;
+		tmp_pass = getpass("Password: "); /* BB obsolete sys call but
+						     no good replacement yet */
+		mountpassword = (char *)calloc(65,1);
 		if (!tmp_pass || !mountpassword) {
-			printf("Password not entered, exiting\n");
+			printf("Password not entered, exiting.\n");
 			return -1;
 		}
-		strlcpy(mountpassword, tmp_pass, MOUNT_PASSWD_SIZE+1);
+		strncpy(mountpassword, tmp_pass, 64);
+						 
 		got_password = 1;
 	}
 	/* FIXME launch daemon (handles dfs name resolution and credential change) 
@@ -1297,8 +1261,11 @@
 		optlen += strlen(ipaddr) + 4;
 	if(mountpassword)
 		optlen += strlen(mountpassword) + 6;
-	SAFE_FREE(options);
-	options_size = optlen + 10 + DOMAIN_SIZE;
+	if(options) {
+		free(options);
+		options = NULL;
+	}
+	options_size = optlen + 10 + 64;
 	options = (char *)malloc(options_size /* space for commas in password */ + 8 /* space for domain=  , domain name itself was counted as part of the length username string above */);
 
 	if(options == NULL) {
@@ -1355,12 +1322,10 @@
 	}
 	if(verboseflag)
 		printf("\nmount.cifs kernel mount options %s \n",options);
-
-	/* convert all '\\' to '/' in share portion so that /proc/mounts looks pretty */
-	replace_char(dev_name, '\\', '/', strlen(share_name));
-
-	if(mount(dev_name, mountpoint, "cifs", flags, options)) {
+	if(mount(share_name, mountpoint, "cifs", flags, options)) {
 	/* remember to kill daemon on error */
+		char * tmp;
+
 		switch (errno) {
 		case 0:
 			printf("mount failed but no error number set\n");
@@ -1371,9 +1336,12 @@
 		case ENXIO:
 			if(retry == 0) {
 				retry = 1;
-				if (uppercase_string(dev_name) &&
-				    uppercase_string(share_name) &&
-				    uppercase_string(prefixpath)) {
+				tmp = share_name;
+				while (*tmp && !(((unsigned char)tmp[0]) & 0x80)) {
+					*tmp = toupper((unsigned char)*tmp);
+		        		tmp++;
+				}
+				if(!*tmp) {
 					printf("retrying with upper case share name\n");
 					goto mount_retry;
 				}
@@ -1387,9 +1355,9 @@
 	} else {
 		pmntfile = setmntent(MOUNTED, "a+");
 		if(pmntfile) {
-			mountent.mnt_fsname = dev_name;
-			mountent.mnt_dir = mountpoint;
-			mountent.mnt_type = CONST_DISCARD(char *,"cifs");
+			mountent.mnt_fsname = share_name;
+			mountent.mnt_dir = mountpoint; 
+			mountent.mnt_type = CONST_DISCARD(char *,"cifs"); 
 			mountent.mnt_opts = (char *)malloc(220);
 			if(mountent.mnt_opts) {
 				char * mount_user = getusername();
@@ -1420,7 +1388,10 @@
 			mountent.mnt_passno = 0;
 			rc = addmntent(pmntfile,&mountent);
 			endmntent(pmntfile);
-			SAFE_FREE(mountent.mnt_opts);
+			if(mountent.mnt_opts) {
+				free(mountent.mnt_opts);
+				mountent.mnt_opts = NULL;
+			}
 		} else {
 		    printf("could not update mount table\n");
 		}
@@ -1430,12 +1401,29 @@
 	if(mountpassword) {
 		int len = strlen(mountpassword);
 		memset(mountpassword,0,len);
-		SAFE_FREE(mountpassword);
+		free(mountpassword);
+		mountpassword = NULL;
 	}
 
-	SAFE_FREE(options);
-	SAFE_FREE(orgoptions);
-	SAFE_FREE(resolved_path);
-	SAFE_FREE(share_name);
+	if(options) {
+		memset(options,0,optlen);
+		free(options);
+		options = NULL;
+	}
+
+	if(orgoptions) {
+		memset(orgoptions,0,orgoptlen);
+		free(orgoptions);
+		orgoptions = NULL;
+	}
+	if(resolved_path) {
+		free(resolved_path);
+		resolved_path = NULL;
+	}
+
+	if(free_share_name) {
+		free(share_name);
+		share_name = NULL;
+		}
 	return rc;
 }


Property changes on: branches/samba/upstream/source/client/mount.cifs.c
___________________________________________________________________
Name: svn:executable
   + *

Copied: branches/samba/upstream/source/client/smbctool.c (from rev 1928, branches/samba/upstream/source/client/smbctool.c)
===================================================================
--- branches/samba/upstream/source/client/smbctool.c	                        (rev 0)
+++ branches/samba/upstream/source/client/smbctool.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,3771 @@
+/* 
+   Unix SMB/CIFS implementation.
+   SMB client
+   Copyright (C) Andrew Tridgell		1994-1998
+   Copyright (C) Simo Sorce			2001-2002
+   Copyright (C) Jelmer Vernooij		2003
+   Copyright (C) Gerald (Jerry) Carter		2004
+   Copyright (C) Kalim Moghul			2005
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "libsmbclient.h"
+#include "client/client_proto.h"
+#ifndef REGISTER
+#define REGISTER 0
+#endif
+
+extern BOOL AllowDebugChange;
+extern BOOL override_logfile;
+extern char tar_type;
+extern BOOL in_client;
+static int port = 0;
+pstring cur_dir = "/";
+static pstring service;
+static pstring desthost;
+static pstring username;
+static pstring workgroup;
+static pstring calling_name;
+static BOOL grepable=False;
+static char *cmdstr = NULL;
+
+static int io_bufsize = 64512;
+
+static int name_type = 0x20;
+extern int max_protocol;
+
+static int process_tok(pstring tok);
+static int cmd_help(void);
+
+/* 30 second timeout on most commands */
+#define CLIENT_TIMEOUT (30*1000)
+#define SHORT_TIMEOUT (5*1000)
+
+/* value for unused fid field in trans2 secondary request */
+#define FID_UNUSED (0xFFFF)
+
+time_t newer_than = 0;
+static int archive_level = 0;
+
+static BOOL translation = False;
+static BOOL have_ip;
+
+/* clitar bits insert */
+extern int blocksize;
+extern BOOL tar_inc;
+extern BOOL tar_reset;
+/* clitar bits end */
+ 
+
+static BOOL prompt = True;
+
+static BOOL recurse = False;
+BOOL lowercase = False;
+
+static struct in_addr dest_ip;
+
+#define SEPARATORS " \t\n\r"
+
+static BOOL abort_mget = True;
+
+static pstring fileselection = "";
+
+extern file_info def_finfo;
+
+/* timing globals */
+SMB_BIG_UINT get_total_size = 0;
+unsigned int get_total_time_ms = 0;
+static SMB_BIG_UINT put_total_size = 0;
+static unsigned int put_total_time_ms = 0;
+
+/* totals globals */
+static double dir_total;
+
+/* root cli_state connection */
+
+struct cli_state *cli;
+
+
+/****************************************************************************
+ Authentication callback function for libsmbclient 
+****************************************************************************/
+
+static void
+get_auth_data_fn(const char * pServer, const char * pShare,
+	char * pWorkgroup, int maxLenWorkgroup,
+	char * pUsername, int maxLenUsername,
+	char * pPassword, int maxLenPassword)
+{
+	char temp[sizeof(fstring)];
+	
+	static char authUsername[sizeof(fstring)];
+	static char authWorkgroup[sizeof(fstring)];
+	static char authPassword[sizeof(fstring)];
+	static char authSet = 0;
+
+	
+	if (authSet)
+	{
+		strncpy(pWorkgroup, authWorkgroup, maxLenWorkgroup - 1);
+		strncpy(pUsername, authUsername, maxLenUsername - 1);
+		strncpy(pPassword, authPassword, maxLenPassword - 1);
+	}
+	else
+	{
+		d_printf("Workgroup: %s\n", workgroup);
+		strncpy(pWorkgroup, workgroup, maxLenWorkgroup - 1);
+		strncpy(authWorkgroup, workgroup, maxLenWorkgroup - 1);
+		
+		d_printf("Username: %s\n", username);
+		strncpy(pUsername, username, maxLenUsername - 1);
+		strncpy(authUsername, username, maxLenUsername - 1);
+		
+		if (cmdline_auth_info.got_pass)
+		{
+			strncpy(pPassword, cmdline_auth_info.password, maxLenPassword - 1);
+			strncpy(authPassword, cmdline_auth_info.password, maxLenPassword - 1);
+		}
+		else
+		{
+			char *pass = getpass("Password: ");
+			if (pass)
+				fstrcpy(temp, pass);
+			if (temp[strlen(temp) - 1] == '\n') /* A new line? */
+			{
+				temp[strlen(temp) - 1] = '\0';
+			}		 
+			if (temp[0] != '\0')
+			{
+				strncpy(pPassword, temp, maxLenPassword - 1);
+				strncpy(authPassword, pPassword, maxLenPassword - 1);
+			}
+		}
+		pstrcpy(cmdline_auth_info.username, authUsername);
+		pstrcpy(cmdline_auth_info.password, authPassword);
+		cmdline_auth_info.got_pass = True;
+		set_global_myworkgroup(authWorkgroup);
+		cli_cm_set_credentials(&cmdline_auth_info);
+		authSet = 1;
+	}
+}
+
+/*******************************************************************
+ Return a string representing an attribute for a file.
+********************************************************************/
+
+fstring *mode_t_string(mode_t mode)
+{
+	static fstring attrstr;
+
+	attrstr[0] = 0;
+	
+	S_ISDIR(mode) ? fstrcat(attrstr, "d") : fstrcat(attrstr, "-");
+	(mode & S_IRUSR) ? fstrcat(attrstr, "r") : fstrcat(attrstr, "-");
+	(mode & S_IWUSR) ? fstrcat(attrstr, "w") : fstrcat(attrstr, "-");
+	(mode & S_IXUSR) ? fstrcat(attrstr, "x") : fstrcat(attrstr, "-");
+	
+	(mode & S_IRGRP) ? fstrcat(attrstr, "r") : fstrcat(attrstr, "-");
+	(mode & S_IWGRP) ? fstrcat(attrstr, "w") : fstrcat(attrstr, "-");
+	(mode & S_IXGRP) ? fstrcat(attrstr, "x") : fstrcat(attrstr, "-");
+	
+	(mode & S_IROTH) ? fstrcat(attrstr, "r") : fstrcat(attrstr, "-");
+	(mode & S_IWOTH) ? fstrcat(attrstr, "w") : fstrcat(attrstr, "-");
+	(mode & S_IXOTH) ? fstrcat(attrstr, "x") : fstrcat(attrstr, "-");
+	
+
+	return(&attrstr);
+}
+
+/****************************************************************************
+ Write to a local file with CR/LF->LF translation if appropriate. Return the 
+ number taken from the buffer. This may not equal the number written.
+****************************************************************************/
+
+static int writefile(int f, char *b, int n)
+{
+	int i;
+
+	if (!translation) {
+		return write(f,b,n);
+	}
+
+	i = 0;
+	while (i < n) {
+		if (*b == '\r' && (i<(n-1)) && *(b+1) == '\n') {
+			b++;i++;
+		}
+		if (write(f, b, 1) != 1) {
+			break;
+		}
+		b++;
+		i++;
+	}
+  
+	return(i);
+}
+
+/****************************************************************************
+ Read from a file with LF->CR/LF translation if appropriate. Return the 
+ number read. read approx n bytes.
+****************************************************************************/
+
+static int readfile(char *b, int n, XFILE *f)
+{
+	int i;
+	int c;
+
+	if (!translation)
+		return x_fread(b,1,n,f);
+  
+	i = 0;
+	while (i < (n - 1) && (i < BUFFER_SIZE)) {
+		if ((c = x_getc(f)) == EOF) {
+			break;
+		}
+	  
+		if (c == '\n') { /* change all LFs to CR/LF */
+			b[i++] = '\r';
+		}
+	  
+		b[i++] = c;
+	}
+  
+	return(i);
+}
+ 
+/****************************************************************************
+ Send a message.
+****************************************************************************/
+
+static void send_message(void)
+{
+	int total_len = 0;
+	int grp_id;
+
+	if (!cli_message_start(cli, desthost, username, &grp_id)) {
+		d_printf("message start: %s\n", cli_errstr(cli));
+		return;
+	}
+
+
+	d_printf("Connected. Type your message, ending it with a Control-D\n");
+
+	while (!feof(stdin) && total_len < 1600) {
+		int maxlen = MIN(1600 - total_len,127);
+		pstring msg;
+		int l=0;
+		int c;
+
+		ZERO_ARRAY(msg);
+
+		for (l=0;l<maxlen && (c=fgetc(stdin))!=EOF;l++) {
+			if (c == '\n')
+				msg[l++] = '\r';
+			msg[l] = c;	  
+		}
+
+		if (!cli_message_text(cli, msg, l, grp_id)) {
+			d_printf("SMBsendtxt failed (%s)\n",cli_errstr(cli));
+			return;
+		}	   
+		
+		total_len += l;
+	}
+
+	if (total_len >= 1600)
+		d_printf("the message was truncated to 1600 bytes\n");
+	else
+		d_printf("sent %d bytes\n",total_len);
+
+	if (!cli_message_end(cli, grp_id)) {
+		d_printf("SMBsendend failed (%s)\n",cli_errstr(cli));
+		return;
+	}	   
+}
+
+/****************************************************************************
+ Check the space on a device.
+****************************************************************************/
+
+static int do_dskattr(void)
+{
+	int total, bsize, avail;
+	struct cli_state *targetcli;
+	pstring targetpath;
+
+	if ( !cli_resolve_path( "", cli, cur_dir, &targetcli, targetpath ) ) {
+		d_printf("Error in dskattr: %s\n", cli_errstr(cli));
+		return 1;
+	}
+
+	if (!cli_dskattr(targetcli, &bsize, &total, &avail)) {
+		d_printf("Error in dskattr: %s\n",cli_errstr(targetcli)); 
+		return 1;
+	}
+
+	d_printf("\n\t\t%d blocks of size %d. %d blocks available\n",
+		 total, bsize, avail);
+
+	return 0;
+}
+
+/****************************************************************************
+ Show cd/pwd.
+****************************************************************************/
+
+static int cmd_pwd(void)
+{
+	d_printf("Current directory is %s",service);
+	d_printf("%s\n",cur_dir);
+	return 0;
+}
+
+/****************************************************************************
+ Change directory - inner section.
+****************************************************************************/
+
+static int do_cd(char *newdir)
+{
+	char *p = newdir;
+	pstring saved_dir;
+	pstring dname;
+	pstring targetpath;
+	struct cli_state *targetcli;
+	SMB_STRUCT_STAT sbuf;
+	uint32 attributes;
+	int dh;
+	
+	unix_format(newdir);
+
+	/* Save the current directory in case the new directory is invalid */
+	pstrcpy(saved_dir, cur_dir);
+
+	pstrcpy(dname, p);			/* first save the argument */
+	
+	if (*p == '/')
+		pstrcpy(cur_dir,dname);
+	else
+		pstrcat(cur_dir,dname);
+
+	if (*(cur_dir+strlen(cur_dir)-1) != '/') {
+		pstrcat(cur_dir, "/");
+	}
+	
+	all_string_sub(cur_dir, "/./", "/", 0);
+	
+	/* Format the directory in a libmsmbclient friendly way */
+	clean_name(cur_dir);
+	all_string_sub(cur_dir, "/./", "/", 0);
+	pstrcpy(targetpath, "smb:");
+	pstrcat(targetpath, service);
+	pstrcat(targetpath, cur_dir);
+	unix_format(targetpath);
+
+	dh = smbc_opendir(targetpath);
+	
+	if (dh < 0)
+	{
+		d_printf("%s changing to directory %s\n", strerror(errno), cur_dir);
+		pstrcpy(cur_dir, saved_dir);
+		return 1;
+	}
+	smbc_closedir(dh);
+
+	return 0;
+}
+
+/****************************************************************************
+ Change directory.
+****************************************************************************/
+
+static int cmd_cd(void)
+{
+	pstring buf;
+	int rc = 0;
+		
+	if (next_token_nr(NULL,buf,NULL,sizeof(buf)))
+		rc = do_cd(buf);
+	else
+		d_printf("Current directory is %s\n",cur_dir);
+
+	return rc;
+}
+
+/*******************************************************************
+ Decide if a file should be operated on.
+********************************************************************/
+
+static BOOL do_this_one(file_info *finfo)
+{
+	if (finfo->mode & aDIR)
+		return(True);
+
+	if (*fileselection && 
+		!mask_match(finfo->name,fileselection,False)) {
+		DEBUG(3,("mask_match %s failed\n", finfo->name));
+		return False;
+	}
+
+	if (newer_than && finfo->mtime < newer_than) {
+		DEBUG(3,("newer_than %s failed\n", finfo->name));
+		return(False);
+	}
+
+	if ((archive_level==1 || archive_level==2) && !(finfo->mode & aARCH)) {
+		DEBUG(3,("archive %s failed\n", finfo->name));
+		return(False);
+	}
+	
+	return(True);
+}
+
+/****************************************************************************
+ Display info about a file.
+****************************************************************************/
+
+static void display_finfo(file_info *finfo)
+{
+	if (do_this_one(finfo)) {
+		time_t t = finfo->mtime; /* the time is assumed to be passed as GMT */
+		d_printf("  %-30s%7.7s %8.0f  %s",
+			 finfo->name,
+			 attrib_string(finfo->mode),
+			 (double)finfo->size,
+			 time_to_asc(t));
+		dir_total += finfo->size;
+	}
+}
+
+/****************************************************************************
+ Display info about a file.
+****************************************************************************/
+
+static void display_stat(char *name, struct stat *st)
+{
+	time_t t = st->st_mtime;
+	pstring time_str;
+	pstrcpy(time_str, time_to_asc(t));
+	time_str[strlen(time_str)-1] = 0;
+	d_printf("> %-30s", name);
+	d_printf("%10.10s %8.0f  %s\n", *mode_t_string(st->st_mode), (double)st->st_size, time_str);
+}
+
+/****************************************************************************
+ Accumulate size of a file.
+****************************************************************************/
+
+static void do_du(file_info *finfo)
+{
+	if (do_this_one(finfo)) {
+		dir_total += finfo->size;
+	}
+}
+
+static BOOL do_list_recurse;
+static BOOL do_list_dirs;
+static char *do_list_queue = 0;
+static long do_list_queue_size = 0;
+static long do_list_queue_start = 0;
+static long do_list_queue_end = 0;
+static void (*do_list_fn)(file_info *);
+static void (*tool_list_fn)(char *, struct stat *);
+
+/****************************************************************************
+ Functions for do_list_queue.
+****************************************************************************/
+
+/*
+ * The do_list_queue is a NUL-separated list of strings stored in a
+ * char*.  Since this is a FIFO, we keep track of the beginning and
+ * ending locations of the data in the queue.  When we overflow, we
+ * double the size of the char*.  When the start of the data passes
+ * the midpoint, we move everything back.  This is logically more
+ * complex than a linked list, but easier from a memory management
+ * angle.  In any memory error condition, do_list_queue is reset.
+ * Functions check to ensure that do_list_queue is non-NULL before
+ * accessing it.
+ */
+
+static void reset_do_list_queue(void)
+{
+	SAFE_FREE(do_list_queue);
+	do_list_queue_size = 0;
+	do_list_queue_start = 0;
+	do_list_queue_end = 0;
+}
+
+static void init_do_list_queue(void)
+{
+	reset_do_list_queue();
+	do_list_queue_size = 1024;
+	do_list_queue = SMB_MALLOC(do_list_queue_size);
+	if (do_list_queue == 0) { 
+		d_printf("malloc fail for size %d\n",
+			 (int)do_list_queue_size);
+		reset_do_list_queue();
+	} else {
+		memset(do_list_queue, 0, do_list_queue_size);
+	}
+}
+
+static void adjust_do_list_queue(void)
+{
+	/*
+	 * If the starting point of the queue is more than half way through,
+	 * move everything toward the beginning.
+	 */
+
+	if (do_list_queue == NULL) {
+		DEBUG(4,("do_list_queue is empty\n"));
+		do_list_queue_start = do_list_queue_end = 0;
+		return;
+	}
+		
+	if (do_list_queue_start == do_list_queue_end) {
+		DEBUG(4,("do_list_queue is empty\n"));
+		do_list_queue_start = do_list_queue_end = 0;
+		*do_list_queue = '\0';
+	} else if (do_list_queue_start > (do_list_queue_size / 2)) {
+		DEBUG(4,("sliding do_list_queue backward\n"));
+		memmove(do_list_queue,
+			do_list_queue + do_list_queue_start,
+			do_list_queue_end - do_list_queue_start);
+		do_list_queue_end -= do_list_queue_start;
+		do_list_queue_start = 0;
+	}
+}
+
+static void add_to_do_list_queue(const char* entry)
+{
+	long new_end = do_list_queue_end + ((long)strlen(entry)) + 1;
+	while (new_end > do_list_queue_size) {
+		do_list_queue_size *= 2;
+		DEBUG(4,("enlarging do_list_queue to %d\n",
+			 (int)do_list_queue_size));
+		do_list_queue = SMB_REALLOC(do_list_queue, do_list_queue_size);
+		if (!do_list_queue) {
+			d_printf("failure enlarging do_list_queue to %d bytes\n",
+				 (int)do_list_queue_size);
+			reset_do_list_queue();
+		} else {
+			memset(do_list_queue + do_list_queue_size / 2,
+				   0, do_list_queue_size / 2);
+		}
+	}
+	if (do_list_queue) {
+		safe_strcpy_base(do_list_queue + do_list_queue_end, 
+				 entry, do_list_queue, do_list_queue_size);
+		do_list_queue_end = new_end;
+		DEBUG(4,("added %s to do_list_queue (start=%d, end=%d)\n",
+			 entry, (int)do_list_queue_start, (int)do_list_queue_end));
+	}
+}
+
+static char *do_list_queue_head(void)
+{
+	return do_list_queue + do_list_queue_start;
+}
+
+static void remove_do_list_queue_head(void)
+{
+	if (do_list_queue_end > do_list_queue_start) {
+		do_list_queue_start += strlen(do_list_queue_head()) + 1;
+		adjust_do_list_queue();
+		DEBUG(4,("removed head of do_list_queue (start=%d, end=%d)\n",
+			 (int)do_list_queue_start, (int)do_list_queue_end));
+	}
+}
+
+static int do_list_queue_empty(void)
+{
+	return (! (do_list_queue && *do_list_queue));
+}
+
+/****************************************************************************
+ A helper for tool_list.
+****************************************************************************/
+
+static void tool_list_helper(const char *mntpoint, struct stat *f, const char *mask, void *state)
+{
+	/*if (f is a directory)
+	{
+		if (we want to do directories and we want to do this f)
+		{
+			execute the callback on f
+		}
+		if (recursion is set and f isn't . and it isn't ..)
+		{
+			make sure the name is valid
+			construct a full path out of the name
+			add the full path to the list
+		}
+		return;
+	}
+	if (we want to do this f)
+	{
+		execute the callback on f
+	}*/
+}
+
+/****************************************************************************
+ A cli_list-like function that executes fn on each directory entry.
+ fn operates on the returned entry name and struct stat.
+****************************************************************************/
+
+int tool_list(	char *mask,
+				mode_t mode,
+				void (*fn)(char *, struct stat *),
+				BOOL rec,
+				BOOL dirs)
+{
+	int dh;
+	pstring dentname;
+	pstring res;
+	struct stat stat;
+	struct smbc_dirent* dent;
+	
+	pstrcpy(res, "smb:");
+	pstrcat(res, service);
+	pstrcat(res, cur_dir);
+	
+	if ((dh = smbc_opendir(res)) < 1)
+	{
+		d_printf("Error: %s opening %s\n", strerror(errno), res);
+		return 1;
+	}
+	
+	while (dent = smbc_readdir(dh))
+	{
+		switch(dent->smbc_type)
+		{
+		case SMBC_WORKGROUP:
+		case SMBC_SERVER:
+		case SMBC_FILE_SHARE:
+		case SMBC_PRINTER_SHARE:
+		case SMBC_COMMS_SHARE:
+		case SMBC_IPC_SHARE:
+			break;
+		case SMBC_DIR:
+			if (!dirs)
+				break;
+		case SMBC_FILE:
+			pstrcpy(dentname, res);
+			pstrcat(dentname, dent->name);
+			/*if (mask_match(dent->name, mask, False))*/
+			if (mask_match(dentname, mask, False))
+			{
+				if (smbc_stat(dentname, &stat) < 0)
+				{
+					d_printf("> %s - stat error: %s\n", dent->name, strerror(errno));
+				}
+				else
+				{
+					fn(dent->name, &stat);
+				}
+			}
+			break;
+		case SMBC_LINK:
+			break;
+		}
+	}
+	smbc_closedir(dh);
+}
+
+/****************************************************************************
+ A helper for do_list.
+****************************************************************************/
+
+static void do_list_helper(const char *mntpoint, file_info *f, const char *mask, void *state)
+{
+	if (f->mode & aDIR) {
+		if (do_list_dirs && do_this_one(f)) {
+			do_list_fn(f);
+		}
+		if (do_list_recurse && 
+			!strequal(f->name,".") && 
+			!strequal(f->name,"..")) {
+			pstring mask2;
+			char *p;
+
+			if (!f->name[0]) {
+				d_printf("Empty dir name returned. Possible server misconfiguration.\n");
+				return;
+			}
+
+			pstrcpy(mask2, mntpoint);
+			pstrcat(mask2, mask);
+			p = strrchr_m(mask2,'/');
+			if (!p)
+				return;
+			p[1] = 0;
+			pstrcat(mask2, f->name);
+			pstrcat(mask2,"/*");
+			add_to_do_list_queue(mask2);
+		}
+		return;
+	}
+
+	if (do_this_one(f)) {
+		do_list_fn(f);
+	}
+}
+
+/****************************************************************************
+ A wrapper around cli_list that adds recursion.
+****************************************************************************/
+
+void do_list(const char *mask,uint16 attribute,void (*fn)(file_info *),BOOL rec, BOOL dirs)
+{
+	static int in_do_list = 0;
+	struct cli_state *targetcli;
+	pstring targetpath;
+
+	if (in_do_list && rec) {
+		fprintf(stderr, "INTERNAL ERROR: do_list called recursively when the recursive flag is true\n");
+		exit(1);
+	}
+
+	in_do_list = 1;
+
+	do_list_recurse = rec;
+	do_list_dirs = dirs;
+	do_list_fn = fn;
+
+	if (rec) {
+		init_do_list_queue();
+		add_to_do_list_queue(mask);
+		
+		while (! do_list_queue_empty()) {
+			/*
+			 * Need to copy head so that it doesn't become
+			 * invalid inside the call to cli_list.	 This
+			 * would happen if the list were expanded
+			 * during the call.
+			 * Fix from E. Jay Berkenbilt (ejb at ql.org)
+			 */
+			pstring head;
+			pstrcpy(head, do_list_queue_head());
+			
+			/* check for dfs */
+			
+			if ( !cli_resolve_path( "", cli, head, &targetcli, targetpath ) ) {
+				d_printf("do_list: [%s] %s\n", head, cli_errstr(cli));
+				remove_do_list_queue_head();
+				continue;
+			}
+			
+			cli_list(targetcli, targetpath, attribute, do_list_helper, NULL);
+			remove_do_list_queue_head();
+			if ((! do_list_queue_empty()) && (fn == display_finfo)) {
+				char* next_file = do_list_queue_head();
+				char* save_ch = 0;
+				if ((strlen(next_file) >= 2) &&
+					(next_file[strlen(next_file) - 1] == '*') &&
+					(next_file[strlen(next_file) - 2] == '/')) {
+					save_ch = next_file +
+						strlen(next_file) - 2;
+					*save_ch = '\0';
+				}
+				d_printf("\n%s\n",next_file);
+				if (save_ch) {
+					*save_ch = '/';
+				}
+			}
+		}
+	} else {
+		/* check for dfs */
+			
+		if ( cli_resolve_path( "", cli, mask, &targetcli, targetpath ) ) {
+			if (cli_list(targetcli, targetpath, attribute, do_list_helper, NULL) == -1) 
+				d_printf("%s listing %s\n", cli_errstr(targetcli), targetpath);
+		}
+		else
+			d_printf("do_list: [%s] %s\n", mask, cli_errstr(cli));
+		
+	}
+
+	in_do_list = 0;
+	reset_do_list_queue();
+}
+
+/****************************************************************************
+ Get a directory listing.
+****************************************************************************/
+
+static int cmd_dir(void)
+{
+	mode_t mode = S_IFDIR | S_IRWXU | S_IRWXG | S_IRWXO;
+	pstring mask;
+	pstring buf;
+	char *p=buf;
+	
+	pstrcpy(mask, "smb:");
+	pstrcat(mask, service);
+	pstrcat(mask, cur_dir);
+	
+	if (next_token_nr(NULL,buf,NULL,sizeof(buf)))
+		pstrcat(mask,buf);
+	else
+		pstrcat(mask,"*");
+	
+	tool_list(mask, mode, display_stat, recurse, True);
+	return 0;
+}
+
+/****************************************************************************
+ Get a directory listing.
+****************************************************************************/
+
+static int cmd_du(void)
+{
+	uint16 attribute = aDIR | aSYSTEM | aHIDDEN;
+	pstring mask;
+	pstring buf;
+	char *p=buf;
+	int rc;
+	
+	dir_total = 0;
+	pstrcpy(mask,cur_dir);
+	if(mask[strlen(mask)-1]!='/')
+		pstrcat(mask,"/");
+	
+	if (next_token_nr(NULL,buf,NULL,sizeof(buf))) {
+		dos_format(p);
+		if (*p == '/')
+			pstrcpy(mask,p);
+		else
+			pstrcat(mask,p);
+	} else {
+		pstrcat(mask,"*");
+	}
+
+	do_list(mask, attribute, do_du, recurse, True);
+
+	rc = do_dskattr();
+
+	d_printf("Total number of bytes: %.0f\n", dir_total);
+
+	return rc;
+}
+
+/****************************************************************************
+ Get a file from rname to lname
+****************************************************************************/
+
+static int do_get(char *rname, char *lname, BOOL reget)
+{  
+	int handle = 0, fnum;
+	BOOL newhandle = False;
+	char *data;
+	struct timeval tp_start;
+	int read_size = io_bufsize;
+	/*uint16 attr;*/
+	struct stat stat;
+	off_t start = 0;
+	off_t nread = 0;
+	int rc = 0;
+
+	if (lowercase) {
+		strlower_m(lname);
+	}
+
+	GetTimeOfDay(&tp_start);
+	
+	fnum = smbc_open(rname, O_RDONLY, 0666);
+	if (fnum < 0)
+	{
+		d_printf("%s opening remote file %s\n", strerror(errno), rname);
+		return 1;
+	}
+
+	if(!strcmp(lname,"-")) {
+		handle = fileno(stdout);
+	} else {
+		if (reget) {
+			handle = sys_open(lname, O_WRONLY|O_CREAT, 0644);
+			if (handle >= 0) {
+				start = sys_lseek(handle, 0, SEEK_END);
+				if (start == -1) {
+					smbc_close(fnum);
+					d_printf("Error seeking local file\n");
+					return 1;
+				}
+			}
+		} else {
+			handle = sys_open(lname, O_WRONLY|O_CREAT|O_TRUNC, 0644);
+		}
+		newhandle = True;
+	}
+	if (handle < 0) {
+		d_printf("Error opening local file %s\n",lname);
+		smbc_close(fnum);
+		return 1;
+	}
+
+	if (smbc_fstat(fnum, &stat) < 0)
+	{
+		d_printf("%s trying to stat remote file %s\n", strerror(errno), rname);
+		if (newhandle)
+			close(handle);
+		smbc_close(fnum);
+		return 1;
+	}
+
+	DEBUG(1,("getting file %s of size %.0f as %s ", 
+		 rname, (double)stat.st_size, lname));
+
+	if(!(data = (char *)SMB_MALLOC(read_size))) { 
+		d_printf("malloc fail for size %d\n", read_size);
+		if (newhandle)
+			close(handle);
+		smbc_close(fnum);
+		return 1;
+	}
+
+	if (smbc_lseek(fnum, start, SEEK_SET) < 0)
+	{
+		d_printf("%s trying to lseek remote file %s\n", strerror(errno), rname);
+		if (newhandle)
+			close(handle);
+		smbc_close(fnum);
+		SAFE_FREE(data);
+		return 1;
+	}
+	while (1) {
+		int n = smbc_read(fnum, data, read_size);
+
+		if (n < 0)
+		{
+			d_printf("%s while reading remote file %s\n", strerror(errno), rname);
+			if (newhandle)
+				close(handle);
+			smbc_close(fnum);
+			SAFE_FREE(data);
+			return 1;
+		}
+		if (n == 0)
+			break;
+ 
+		if (writefile(handle,data, n) != n) {
+			d_printf("Error writing local file\n");
+			rc = 1;
+			break;
+		}
+	  
+		nread += n;
+	}
+
+	if (nread + start < stat.st_size) {
+		DEBUG (1, ("Short read when getting file %s. Only got %ld bytes.\n", rname, (long)nread));
+		rc = 1;
+	}
+
+	SAFE_FREE(data);
+	
+	if (smbc_close(fnum) < 0)
+	{
+		d_printf("%s closing remote file %s\n", strerror(errno), rname);
+		rc = 1;
+	}
+
+	if (newhandle) {
+		close(handle);
+	}
+
+	/*if (archive_level >= 2 && (attr & aARCH)) {
+		cli_setatr(cli, rname, attr & ~(uint16)aARCH, 0);
+	}*/
+
+	{
+		struct timeval tp_end;
+		int this_time;
+		
+		GetTimeOfDay(&tp_end);
+		this_time = 
+			(tp_end.tv_sec - tp_start.tv_sec)*1000 +
+			(tp_end.tv_usec - tp_start.tv_usec)/1000;
+		get_total_time_ms += this_time;
+		get_total_size += nread;
+		
+		DEBUG(1,("(%3.1f kb/s) (average %3.1f kb/s)\n",
+			 nread / (1.024*this_time + 1.0e-4),
+			 get_total_size / (1.024*get_total_time_ms)));
+	}
+	
+	return rc;
+}
+
+/****************************************************************************
+ Get a file.
+****************************************************************************/
+
+static int cmd_get(void)
+{
+	pstring lname;
+	pstring rname;
+	char *p;
+
+	pstrcpy(rname, "smb:");
+	pstrcat(rname, service);
+	pstrcat(rname, cur_dir);
+	
+	p = rname + strlen(rname);
+	
+	if (!next_token_nr(NULL,p,NULL,sizeof(rname)-strlen(rname))) {
+		d_printf("get <filename>\n");
+		return 1;
+	}
+	pstrcpy(lname,p);
+	
+	next_token_nr(NULL,lname,NULL,sizeof(lname));
+	/*d_printf("lname: %s, rname: %s\n", lname, rname);*/
+	return do_get(rname, lname, False);
+}
+
+/****************************************************************************
+ Do an mget operation on one file.
+****************************************************************************/
+
+static void do_mget(char *name, struct stat *st)
+{
+	pstring rname;
+	pstring quest;
+	pstring saved_curdir;
+	pstring mget_mask;
+	mode_t mode;
+
+	if (strequal(name,".") || strequal(name,".."))
+		return;
+
+	if (S_ISDIR(st->st_mode))
+		slprintf(quest,sizeof(pstring)-1, "Get directory %s%s? ", cur_dir, name);
+	else
+		slprintf(quest,sizeof(pstring)-1, "Get file %s%s? ", cur_dir, name);
+
+	if (prompt && !yesno(quest))
+		return;
+
+	if (!S_ISDIR(st->st_mode)) {
+		pstrcpy(rname,"smb:");
+		pstrcat(rname,service);
+		pstrcat(rname,cur_dir);
+		pstrcat(rname,name);
+		do_get(rname,name, False);
+		return;
+	}
+
+	/* handle directories */
+	/* TODO: clean this code up for recursive calls */
+	pstrcpy(saved_curdir,cur_dir);
+
+	pstrcat(cur_dir,name);
+	pstrcat(cur_dir,"/");
+
+	unix_format(name);
+	if (lowercase)
+		strlower_m(name);
+	
+	if (!directory_exist(name,NULL) && 
+		mkdir(name,0777) != 0) {
+		d_printf("failed to create directory %s\n",name);
+		pstrcpy(cur_dir,saved_curdir);
+		return;
+	}
+	
+	if (chdir(name) != 0) {
+		d_printf("failed to chdir to directory %s\n",name);
+		pstrcpy(cur_dir,saved_curdir);
+		return;
+	}
+
+	pstrcpy(mget_mask,"smb:");
+	pstrcat(mget_mask,service);
+	pstrcat(mget_mask,cur_dir);
+	pstrcat(mget_mask,"*");
+	
+	/*d_printf("Calling with mask: %s\n", mget_mask);*/
+	tool_list(mget_mask, mode, do_mget, recurse, recurse);
+	chdir("..");
+	pstrcpy(cur_dir,saved_curdir);
+}
+
+/****************************************************************************
+ View the file using the pager.
+****************************************************************************/
+
+static int cmd_more(void)
+{
+	pstring rname,lname,pager_cmd;
+	char *pager;
+	int fd;
+	int rc = 0;
+
+	pstrcpy(rname,cur_dir);
+	pstrcat(rname,"/");
+	
+	slprintf(lname,sizeof(lname)-1, "%s/smbmore.XXXXXX",tmpdir());
+	fd = smb_mkstemp(lname);
+	if (fd == -1) {
+		d_printf("failed to create temporary file for more\n");
+		return 1;
+	}
+	close(fd);
+
+	if (!next_token_nr(NULL,rname+strlen(rname),NULL,sizeof(rname)-strlen(rname))) {
+		d_printf("more <filename>\n");
+		unlink(lname);
+		return 1;
+	}
+	clean_name(rname);
+
+	rc = do_get(rname, lname, False);
+
+	pager=getenv("PAGER");
+
+	slprintf(pager_cmd,sizeof(pager_cmd)-1,
+		 "%s %s",(pager? pager:PAGER), lname);
+	system(pager_cmd);
+	unlink(lname);
+	
+	return rc;
+}
+
+/****************************************************************************
+ Do a mget command.
+****************************************************************************/
+
+static int cmd_mget(void)
+{
+	mode_t mode;
+	pstring mget_mask;
+	pstring buf;
+	char *p=buf;
+
+	*mget_mask = 0;
+
+	while (next_token_nr(NULL,p,NULL,sizeof(buf))) {
+		pstrcpy(mget_mask, "smb:");
+		pstrcat(mget_mask, service);
+		pstrcat(mget_mask,cur_dir);
+		if(mget_mask[strlen(mget_mask)-1]!='/')
+			pstrcat(mget_mask,"/");
+		
+		if (*p == '/')
+		{
+			pstrcpy(mget_mask, "smb:");
+			pstrcat(mget_mask, service);
+			pstrcat(mget_mask,p);
+		}
+		else
+			pstrcat(mget_mask,p);
+		/* TODO: enable directories on calls to tool_list
+		   once recursion is worked out */
+		tool_list(mget_mask, mode, do_mget, recurse, recurse);
+	}
+
+	if (!*mget_mask) {
+		pstrcpy(mget_mask, "smb:");
+		pstrcat(mget_mask, service);
+		pstrcat(mget_mask,cur_dir);
+		if(mget_mask[strlen(mget_mask)-1]!='/')
+			pstrcat(mget_mask,"/");
+		pstrcat(mget_mask,"*");
+		tool_list(mget_mask, mode, do_mget, recurse, recurse);
+	}
+	
+	return 0;
+}
+
+/****************************************************************************
+ Make a directory of name "name".
+****************************************************************************/
+
+static BOOL do_mkdir(char *name)
+{
+	if (smbc_mkdir(name, 755) < 0)
+	{
+		d_printf("Error: %s making remote directory %s\n", strerror(errno), name);
+		return False;
+	}
+	
+	return True;
+}
+
+/****************************************************************************
+ Show 8.3 name of a file.
+****************************************************************************/
+
+static BOOL do_altname(char *name)
+{
+	pstring altname;
+	if (!NT_STATUS_IS_OK(cli_qpathinfo_alt_name(cli, name, altname))) {
+		d_printf("%s getting alt name for %s\n",
+			 cli_errstr(cli),name);
+		return(False);
+	}
+	d_printf("%s\n", altname);
+
+	return(True);
+}
+
+/****************************************************************************
+ Exit client.
+****************************************************************************/
+
+static int cmd_quit(void)
+{
+	cli_cm_shutdown();
+	exit(0);
+	/* NOTREACHED */
+	return 0;
+}
+
+/****************************************************************************
+ Make a directory.
+****************************************************************************/
+
+static int cmd_mkdir(void)
+{
+	int dh;
+	pstring mask;
+	pstring buf;
+	pstring targetname;
+	char *p=buf;
+  
+	pstrcpy(mask,cur_dir);
+
+	if (!next_token_nr(NULL,p,NULL,sizeof(buf))) {
+		if (!recurse)
+			d_printf("mkdir <dirname>\n");
+		return 1;
+	}
+	pstrcat(mask,p);
+	
+	if (recurse) {
+		pstring ddir;
+		pstring ddir2;
+		*ddir2 = 0;
+		
+		pstrcpy(ddir,mask);
+		trim_char(ddir,'.','\0');
+		p = strtok(ddir,"/\\");
+		while (p) {
+			pstrcat(ddir2,p);
+			
+			pstrcpy(targetname, "smb:");
+			pstrcat(targetname, service);
+			pstrcat(targetname, "/");
+			pstrcat(targetname, ddir2);
+			DEBUG(3, ("Recursively making directory %s\n", targetname));
+			if ((dh = smbc_opendir(targetname)) < 0) {
+				if (!do_mkdir(targetname))
+					return 1;
+			}
+			else
+				smbc_closedir(dh);
+			
+			pstrcat(ddir2,"/");
+			p = strtok(NULL,"/\\");
+		}
+	}
+	else {
+		pstrcpy(targetname, "smb:");
+		pstrcat(targetname, service);
+		pstrcat(targetname, mask);
+		
+		if (!do_mkdir(targetname))
+			return 1;
+	}
+	
+	return 0;
+}
+
+/****************************************************************************
+ Show alt name.
+****************************************************************************/
+
+static int cmd_altname(void)
+{
+	pstring name;
+	pstring buf;
+	char *p=buf;
+  
+	pstrcpy(name,cur_dir);
+
+	if (!next_token_nr(NULL,p,NULL,sizeof(buf))) {
+		d_printf("altname <file>\n");
+		return 1;
+	}
+	pstrcat(name,p);
+
+	do_altname(name);
+
+	return 0;
+}
+
+/****************************************************************************
+ Put a single file.
+****************************************************************************/
+
+static int do_put(char *rname, char *lname, BOOL reput)
+{
+	int fnum;
+	XFILE *f;
+	SMB_OFF_T start = 0;
+	off_t nread = 0;
+	char *buf = NULL;
+	int maxwrite = io_bufsize;
+	int rc = 0;
+	struct timeval tp_start;
+	struct stat stat;
+	
+	GetTimeOfDay(&tp_start);
+
+	if (reput) {
+		fnum = smbc_open(rname, O_RDWR|O_CREAT, 0644);
+		if (fnum < 0)
+		{
+			d_printf("%s opening remote file %s\n", strerror(errno), rname);
+			return 1;
+		}
+		if (smbc_fstat(fnum, &stat) < 0)
+		{
+			d_printf("%s trying to stat remote file %s\n", strerror(errno), rname);
+			smbc_close(fnum);
+			return 1;
+		}
+		start = stat.st_size;
+	} else {
+		fnum = smbc_creat(rname, 0644);
+		if (fnum < 0)
+		{
+			d_printf("%s trying to create remote file %s\n", strerror(errno), rname);
+			return 1;
+		}
+	}
+
+	/* allow files to be piped into smbclient
+	   jdblair 24.jun.98
+
+	   Note that in this case this function will exit(0) rather
+	   than returning. */
+	if (!strcmp(lname, "-")) {
+		f = x_stdin;
+		/* size of file is not known */
+	} else {
+		f = x_fopen(lname,O_RDONLY, 0);
+		if (f && reput) {
+			if (x_tseek(f, start, SEEK_SET) == -1) {
+				d_printf("Error seeking local file\n");
+				smbc_close(fnum);
+				x_fclose(f);
+				return 1;
+			}
+		}
+	}
+
+	if (!f) {
+		d_printf("Error opening local file %s\n",lname);
+		smbc_close(fnum);
+		return 1;
+	}
+  
+	DEBUG(1,("putting file %s as %s ",lname,rname));
+  
+	buf = (char *)SMB_MALLOC(maxwrite);
+	if (!buf) {
+		d_printf("ERROR: Not enough memory!\n");
+		smbc_close(fnum);
+		if (f != x_stdin)
+			x_fclose(f);
+		return 1;
+	}
+	
+	if (smbc_lseek(fnum, start, SEEK_SET) < 0)
+	{
+		d_printf("%s trying to lseek remote file %s\n", strerror(errno), rname);
+		if (f != x_stdin)
+			x_fclose(f);
+		smbc_close(fnum);
+		SAFE_FREE(buf);
+		return 1;
+	}
+	while (!x_feof(f)) {
+		int n = maxwrite;
+		int ret;
+
+		if ((n = readfile(buf,n,f)) < 1) {
+			if((n == 0) && x_feof(f))
+				break; /* Empty local file. */
+
+			d_printf("Error reading local file: %s\n", strerror(errno));
+			rc = 1;
+			break;
+		}
+
+		ret = smbc_write(fnum, buf, n);
+
+		if (n != ret) {
+			d_printf("Error writing file: %s\n", strerror(errno));
+			rc = 1;
+			break;
+		} 
+
+		nread += n;
+	}
+
+	if (smbc_close(fnum) < 0) {
+		d_printf("%s closing remote file %s\n",strerror(errno),rname);
+		if (f != x_stdin)
+			x_fclose(f);
+		SAFE_FREE(buf);
+		return 1;
+	}
+
+	
+	if (f != x_stdin) {
+		x_fclose(f);
+	}
+
+	SAFE_FREE(buf);
+
+	{
+		struct timeval tp_end;
+		int this_time;
+		
+		GetTimeOfDay(&tp_end);
+		this_time = 
+			(tp_end.tv_sec - tp_start.tv_sec)*1000 +
+			(tp_end.tv_usec - tp_start.tv_usec)/1000;
+		put_total_time_ms += this_time;
+		put_total_size += nread;
+		
+		DEBUG(1,("(%3.1f kb/s) (average %3.1f kb/s)\n",
+			 nread / (1.024*this_time + 1.0e-4),
+			 put_total_size / (1.024*put_total_time_ms)));
+	}
+
+	if (f == x_stdin) {
+		cli_cm_shutdown();
+		exit(0);
+	}
+	
+	return rc;
+}
+
+/****************************************************************************
+ Put a file.
+****************************************************************************/
+
+static int cmd_put(void)
+{
+	pstring lname;
+	pstring rname;
+	pstring buf;
+	char *p=buf;
+	
+	pstrcpy(rname, "smb:");
+	pstrcat(rname, service);
+	pstrcat(rname, cur_dir);
+  
+	if (!next_token_nr(NULL,p,NULL,sizeof(buf))) {
+		d_printf("put <filename>\n");
+		return 1;
+	}
+	pstrcpy(lname,p);
+  
+	if (next_token_nr(NULL,p,NULL,sizeof(buf)))
+		pstrcat(rname,p);	   
+	else
+		pstrcat(rname,lname);
+	
+	{
+		SMB_STRUCT_STAT st;
+		/* allow '-' to represent stdin
+		   jdblair, 24.jun.98 */
+		if (!file_exist(lname,&st) &&
+			(strcmp(lname,"-"))) {
+			d_printf("%s does not exist\n",lname);
+			return 1;
+		}
+	}
+
+	/*d_printf("lname: %s, rname: %s\n", lname, rname);*/
+	return do_put(rname, lname, False);
+}
+
+/*************************************
+ File list structure.
+*************************************/
+
+static struct file_list {
+	struct file_list *prev, *next;
+	char *file_path;
+	BOOL isdir;
+} *file_list;
+
+/****************************************************************************
+ Free a file_list structure.
+****************************************************************************/
+
+static void free_file_list (struct file_list * list)
+{
+	struct file_list *tmp;
+	
+	while (list) {
+		tmp = list;
+		DLIST_REMOVE(list, list);
+		SAFE_FREE(tmp->file_path);
+		SAFE_FREE(tmp);
+	}
+}
+
+/****************************************************************************
+ Seek in a directory/file list until you get something that doesn't start with
+ the specified name.
+****************************************************************************/
+
+static BOOL seek_list(struct file_list *list, char *name)
+{
+	while (list) {
+		trim_string(list->file_path,"./","\n");
+		if (strncmp(list->file_path, name, strlen(name)) != 0) {
+			return(True);
+		}
+		list = list->next;
+	}
+	  
+	return(False);
+}
+
+/****************************************************************************
+ Set the file selection mask.
+****************************************************************************/
+
+static int cmd_select(void)
+{
+	pstrcpy(fileselection,"");
+	next_token_nr(NULL,fileselection,NULL,sizeof(fileselection));
+
+	return 0;
+}
+
+/****************************************************************************
+  Recursive file matching function act as find
+  match must be always set to True when calling this function
+****************************************************************************/
+
+static int file_find(struct file_list **list, const char *directory, 
+			  const char *expression, BOOL match)
+{
+	DIR *dir;
+	struct file_list *entry;
+		struct stat statbuf;
+		int ret;
+		char *path;
+	BOOL isdir;
+	const char *dname;
+
+		dir = opendir(directory);
+	if (!dir)
+		return -1;
+	
+		while ((dname = readdirname(dir))) {
+		if (!strcmp("..", dname))
+			continue;
+		if (!strcmp(".", dname))
+			continue;
+		
+		if (asprintf(&path, "%s/%s", directory, dname) <= 0) {
+			continue;
+		}
+
+		isdir = False;
+		if (!match || !gen_fnmatch(expression, dname)) {
+			if (recurse) {
+				ret = stat(path, &statbuf);
+				if (ret == 0) {
+					if (S_ISDIR(statbuf.st_mode)) {
+						isdir = True;
+						ret = file_find(list, path, expression, False);
+					}
+				} else {
+					d_printf("file_find: cannot stat file %s\n", path);
+				}
+				
+				if (ret == -1) {
+					SAFE_FREE(path);
+					closedir(dir);
+					return -1;
+				}
+			}
+			entry = SMB_MALLOC_P(struct file_list);
+			if (!entry) {
+				d_printf("Out of memory in file_find\n");
+				closedir(dir);
+				return -1;
+			}
+			entry->file_path = path;
+			entry->isdir = isdir;
+						DLIST_ADD(*list, entry);
+		} else {
+			SAFE_FREE(path);
+		}
+		}
+
+	closedir(dir);
+	return 0;
+}
+
+/****************************************************************************
+ mput some files.
+****************************************************************************/
+
+static int cmd_mput(void)
+{
+	pstring buf;
+	char *p=buf;
+	
+	while (next_token_nr(NULL,p,NULL,sizeof(buf))) {
+		int ret;
+		struct file_list *temp_list;
+		char *quest, *lname, *rname;
+	
+		file_list = NULL;
+
+		ret = file_find(&file_list, ".", p, True);
+		if (ret) {
+			free_file_list(file_list);
+			continue;
+		}
+		
+		quest = NULL;
+		lname = NULL;
+		rname = NULL;
+				
+		for (temp_list = file_list; temp_list; 
+			 temp_list = temp_list->next) {
+
+			SAFE_FREE(lname);
+			if (asprintf(&lname, "%s/", temp_list->file_path) <= 0)
+				continue;
+			trim_string(lname, "./", "/");
+			
+			/* check if it's a directory */
+			if (temp_list->isdir) {
+				/* if (!recurse) continue; */
+				
+				SAFE_FREE(quest);
+				if (asprintf(&quest, "Put directory %s? ", lname) < 0) break;
+				if (prompt && !yesno(quest)) { /* No */
+					/* Skip the directory */
+					lname[strlen(lname)-1] = '/';
+					if (!seek_list(temp_list, lname))
+						break;			
+				} else { /* Yes */
+					SAFE_FREE(rname);
+					if(asprintf(&rname, "smb:%s%s%s", service, cur_dir, lname) < 0) break;
+					/*dos_format(rname);*/
+					
+					/* test if the directory exists by opening it */
+					/*if (!((dh=smbc_opendir(rname)) < 0)) {
+						smbc_closedir(dh);
+						continue;
+					}*/
+					/* test if the directory exists by making it */
+					ret = smbc_mkdir(rname, 755);
+					if ((ret != 0) && (errno != EEXIST))
+					{
+						d_printf("Error: %s. Unable to open or create dir %s, skipping...\n", strerror(errno), rname);
+						/* Skip the directory */
+						lname[strlen(lname)-1] = '/';
+						if (!seek_list(temp_list, lname))
+							break;
+					}
+				}
+				continue;
+			} else {
+				SAFE_FREE(quest);
+				if (asprintf(&quest,"Put file %s? ", lname) < 0) break;
+				if (prompt && !yesno(quest)) /* No */
+					continue;
+				
+				/* Yes */
+				SAFE_FREE(rname);
+				if (asprintf(&rname, "smb:%s%s%s", service, cur_dir, lname) < 0) break;
+			}
+
+			/*d_printf("PUT: rname: %s, lname: %s\n", rname, lname);*/
+			do_put(rname, lname, False);
+		}
+		free_file_list(file_list);
+		SAFE_FREE(quest);
+		SAFE_FREE(lname);
+		SAFE_FREE(rname);
+	}
+
+	return 0;
+}
+
+/****************************************************************************
+ Cancel a print job.
+****************************************************************************/
+
+static int do_cancel(int job)
+{
+	if (cli_printjob_del(cli, job)) {
+		d_printf("Job %d cancelled\n",job);
+		return 0;
+	} else {
+		d_printf("Error cancelling job %d : %s\n",job,cli_errstr(cli));
+		return 1;
+	}
+}
+
+/****************************************************************************
+ Cancel a print job.
+****************************************************************************/
+
+static int cmd_cancel(void)
+{
+	pstring buf;
+	int job; 
+
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
+		d_printf("cancel <jobid> ...\n");
+		return 1;
+	}
+	do {
+		job = atoi(buf);
+		do_cancel(job);
+	} while (next_token_nr(NULL,buf,NULL,sizeof(buf)));
+	
+	return 0;
+}
+
+/****************************************************************************
+ Print a file.
+****************************************************************************/
+
+static int cmd_print(void)
+{
+	pstring lname;
+	pstring rname;
+	char *p;
+
+	if (!next_token_nr(NULL,lname,NULL, sizeof(lname))) {
+		d_printf("print <filename>\n");
+		return 1;
+	}
+
+	pstrcpy(rname,lname);
+	p = strrchr_m(rname,'/');
+	if (p) {
+		slprintf(rname, sizeof(rname)-1, "%s-%d", p+1, (int)sys_getpid());
+	}
+
+	if (strequal(lname,"-")) {
+		slprintf(rname, sizeof(rname)-1, "stdin-%d", (int)sys_getpid());
+	}
+
+	return do_put(rname, lname, False);
+}
+
+/****************************************************************************
+ Show a print queue entry.
+****************************************************************************/
+
+static void queue_fn(struct print_job_info *p)
+{
+	d_printf("%-6d	 %-9d	 %s\n", (int)p->id, (int)p->size, p->name);
+}
+
+/****************************************************************************
+ Show a print queue.
+****************************************************************************/
+
+static int cmd_queue(void)
+{
+	cli_print_queue(cli, queue_fn);
+	
+	return 0;
+}
+
+/****************************************************************************
+ Delete some files.
+****************************************************************************/
+
+static void do_del(file_info *finfo)
+{
+	pstring mask;
+
+	pstrcpy(mask,cur_dir);
+	pstrcat(mask,finfo->name);
+
+	if (finfo->mode & aDIR) 
+		return;
+
+	if (!cli_unlink(cli, mask)) {
+		d_printf("%s deleting remote file %s\n",cli_errstr(cli),mask);
+	}
+}
+
+/****************************************************************************
+ Delete some files.
+****************************************************************************/
+
+static int cmd_del(void)
+{
+	pstring mask;
+	pstring buf;
+	uint16 attribute = aSYSTEM | aHIDDEN;
+
+	if (recurse)
+		attribute |= aDIR;
+	
+	pstrcpy(mask,cur_dir);
+	
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
+		d_printf("del <filename>\n");
+		return 1;
+	}
+	pstrcat(mask,buf);
+
+	do_list(mask, attribute,do_del,False,False);
+	
+	return 0;
+}
+
+/****************************************************************************
+****************************************************************************/
+
+static int cmd_open(void)
+{
+	pstring mask;
+	pstring buf;
+	struct cli_state *targetcli;
+	pstring targetname;
+	
+	pstrcpy(mask,cur_dir);
+	
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
+		d_printf("open <filename>\n");
+		return 1;
+	}
+	pstrcat(mask,buf);
+
+	if ( !cli_resolve_path( "", cli, mask, &targetcli, targetname ) ) {
+		d_printf("open %s: %s\n", mask, cli_errstr(cli));
+		return 1;
+	}
+	
+	cli_nt_create(targetcli, targetname, FILE_READ_DATA);
+
+	return 0;
+}
+
+
+/****************************************************************************
+ Remove a directory.
+****************************************************************************/
+
+static int cmd_rmdir(void)
+{
+	pstring mask;
+	pstring buf;
+	struct cli_state *targetcli;
+	pstring targetname;
+	
+	pstrcpy(mask, "smb:");
+	pstrcat(mask, service);
+	pstrcat(mask,cur_dir);
+	
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
+		d_printf("rmdir <dirname>\n");
+		return 1;
+	}
+	pstrcat(mask,buf);
+
+	/*if ( !cli_resolve_path( "", cli, mask, &targetcli, targetname ) ) {
+		d_printf("rmdir %s: %s\n", mask, cli_errstr(cli));
+		return 1;
+	}
+	
+	if (!cli_rmdir(targetcli, targetname)) {
+		d_printf("%s removing remote directory file %s\n",
+			 cli_errstr(targetcli),mask);
+	}*/
+	
+	if (smbc_rmdir(mask) < 0)
+		d_printf("Error: %s removing remote directory file %s\n", strerror(errno), mask);
+	
+	return 0;
+}
+
+/****************************************************************************
+ UNIX hardlink.
+****************************************************************************/
+
+static int cmd_link(void)
+{
+	pstring oldname,newname;
+	pstring buf,buf2;
+	struct cli_state *targetcli;
+	pstring targetname;
+  
+	pstrcpy(oldname,cur_dir);
+	pstrcpy(newname,cur_dir);
+  
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf)) || 
+		!next_token_nr(NULL,buf2,NULL, sizeof(buf2))) {
+		d_printf("link <oldname> <newname>\n");
+		return 1;
+	}
+
+	pstrcat(oldname,buf);
+	pstrcat(newname,buf2);
+
+	if ( !cli_resolve_path( "", cli, oldname, &targetcli, targetname ) ) {
+		d_printf("link %s: %s\n", oldname, cli_errstr(cli));
+		return 1;
+	}
+	
+	if (!SERVER_HAS_UNIX_CIFS(targetcli)) {
+		d_printf("Server doesn't support UNIX CIFS calls.\n");
+		return 1;
+	}
+	
+	if (!cli_unix_hardlink(targetcli, targetname, newname)) {
+		d_printf("%s linking files (%s -> %s)\n", cli_errstr(targetcli), newname, oldname);
+		return 1;
+	}  
+
+	return 0;
+}
+
+/****************************************************************************
+ UNIX symlink.
+****************************************************************************/
+
+static int cmd_symlink(void)
+{
+	pstring oldname,newname;
+	pstring buf,buf2;
+  
+	if (!SERVER_HAS_UNIX_CIFS(cli)) {
+		d_printf("Server doesn't support UNIX CIFS calls.\n");
+		return 1;
+	}
+
+	pstrcpy(newname,cur_dir);
+	
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf)) || 
+		!next_token_nr(NULL,buf2,NULL, sizeof(buf2))) {
+		d_printf("symlink <oldname> <newname>\n");
+		return 1;
+	}
+
+	pstrcpy(oldname,buf);
+	pstrcat(newname,buf2);
+
+	if (!cli_unix_symlink(cli, oldname, newname)) {
+		d_printf("%s symlinking files (%s -> %s)\n",
+			cli_errstr(cli), newname, oldname);
+		return 1;
+	} 
+
+	return 0;
+}
+
+/****************************************************************************
+ UNIX chmod.
+****************************************************************************/
+
+static int cmd_chmod(void)
+{
+	pstring src;
+	mode_t mode;
+	pstring buf, buf2;
+	struct cli_state *targetcli;
+	pstring targetname;
+  
+	pstrcpy(src,cur_dir);
+	
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf)) || 
+		!next_token_nr(NULL,buf2,NULL, sizeof(buf2))) {
+		d_printf("chmod mode file\n");
+		return 1;
+	}
+
+	mode = (mode_t)strtol(buf, NULL, 8);
+	pstrcat(src,buf2);
+
+	if ( !cli_resolve_path( "", cli, src, &targetcli, targetname ) ) {
+		d_printf("chmod %s: %s\n", src, cli_errstr(cli));
+		return 1;
+	}
+	
+	if (!SERVER_HAS_UNIX_CIFS(targetcli)) {
+		d_printf("Server doesn't support UNIX CIFS calls.\n");
+		return 1;
+	}
+	
+	if (!cli_unix_chmod(targetcli, targetname, mode)) {
+		d_printf("%s chmod file %s 0%o\n",
+			cli_errstr(targetcli), src, (unsigned int)mode);
+		return 1;
+	} 
+
+	return 0;
+}
+
+static const char *filetype_to_str(mode_t mode)
+{
+	if (S_ISREG(mode)) {
+		return "regular file";
+	} else if (S_ISDIR(mode)) {
+		return "directory";
+	} else 
+#ifdef S_ISCHR
+	if (S_ISCHR(mode)) {
+		return "character device";
+	} else
+#endif
+#ifdef S_ISBLK
+	if (S_ISBLK(mode)) {
+		return "block device";
+	} else
+#endif
+#ifdef S_ISFIFO
+	if (S_ISFIFO(mode)) {
+		return "fifo";
+	} else
+#endif
+#ifdef S_ISLNK
+	if (S_ISLNK(mode)) {
+		return "symbolic link";
+	} else
+#endif
+#ifdef S_ISSOCK
+	if (S_ISSOCK(mode)) {
+		return "socket";
+	} else
+#endif
+	return "";
+}
+
+static char rwx_to_str(mode_t m, mode_t bt, char ret)
+{
+	if (m & bt) {
+		return ret;
+	} else {
+		return '-';
+	}
+}
+
+static char *unix_mode_to_str(char *s, mode_t m)
+{
+	char *p = s;
+	const char *str = filetype_to_str(m);
+
+	switch(str[0]) {
+		case 'd':
+			*p++ = 'd';
+			break;
+		case 'c':
+			*p++ = 'c';
+			break;
+		case 'b':
+			*p++ = 'b';
+			break;
+		case 'f':
+			*p++ = 'p';
+			break;
+		case 's':
+			*p++ = str[1] == 'y' ? 'l' : 's';
+			break;
+		case 'r':
+		default:
+			*p++ = '-';
+			break;
+	}
+	*p++ = rwx_to_str(m, S_IRUSR, 'r');
+	*p++ = rwx_to_str(m, S_IWUSR, 'w');
+	*p++ = rwx_to_str(m, S_IXUSR, 'x');
+	*p++ = rwx_to_str(m, S_IRGRP, 'r');
+	*p++ = rwx_to_str(m, S_IWGRP, 'w');
+	*p++ = rwx_to_str(m, S_IXGRP, 'x');
+	*p++ = rwx_to_str(m, S_IROTH, 'r');
+	*p++ = rwx_to_str(m, S_IWOTH, 'w');
+	*p++ = rwx_to_str(m, S_IXOTH, 'x');
+	*p++ = '\0';
+	return s;
+}
+
+/****************************************************************************
+ Utility function for UNIX getfacl.
+****************************************************************************/
+
+static char *perms_to_string(fstring permstr, unsigned char perms)
+{
+	fstrcpy(permstr, "---");
+	if (perms & SMB_POSIX_ACL_READ) {
+		permstr[0] = 'r';
+	}
+	if (perms & SMB_POSIX_ACL_WRITE) {
+		permstr[1] = 'w';
+	}
+	if (perms & SMB_POSIX_ACL_EXECUTE) {
+		permstr[2] = 'x';
+	}
+	return permstr;
+}
+
+/****************************************************************************
+ UNIX getfacl.
+****************************************************************************/
+
+static int cmd_getfacl(void)
+{
+	pstring src, name;
+	uint16 major, minor;
+	uint32 caplow, caphigh;
+	char *retbuf = NULL;
+	size_t rb_size = 0;
+	SMB_STRUCT_STAT sbuf;
+	uint16 num_file_acls = 0;
+	uint16 num_dir_acls = 0;
+	uint16 i;
+	struct cli_state *targetcli;
+	pstring targetname;
+ 
+	pstrcpy(src,cur_dir);
+	
+	if (!next_token_nr(NULL,name,NULL,sizeof(name))) {
+		d_printf("stat file\n");
+		return 1;
+	}
+
+	pstrcat(src,name);
+	
+	if ( !cli_resolve_path( "", cli, src, &targetcli, targetname ) ) {
+		d_printf("stat %s: %s\n", src, cli_errstr(cli));
+		return 1;
+	}
+	
+	if (!SERVER_HAS_UNIX_CIFS(targetcli)) {
+		d_printf("Server doesn't support UNIX CIFS calls.\n");
+		return 1;
+	}
+	
+	if (!cli_unix_extensions_version(targetcli, &major, &minor, &caplow, &caphigh)) {
+		d_printf("Can't get UNIX CIFS version from server.\n");
+		return 1;
+	}
+
+	if (!(caplow & CIFS_UNIX_POSIX_ACLS_CAP)) {
+		d_printf("This server supports UNIX extensions but doesn't support POSIX ACLs.\n");
+		return 1;
+	}
+
+
+	if (!cli_unix_stat(targetcli, targetname, &sbuf)) {
+		d_printf("%s getfacl doing a stat on file %s\n",
+			cli_errstr(targetcli), src);
+		return 1;
+	} 
+
+	if (!cli_unix_getfacl(targetcli, targetname, &rb_size, &retbuf)) {
+		d_printf("%s getfacl file %s\n",
+			cli_errstr(targetcli), src);
+		return 1;
+	} 
+
+	/* ToDo : Print out the ACL values. */
+	if (SVAL(retbuf,0) != SMB_POSIX_ACL_VERSION || rb_size < 6) {
+		d_printf("getfacl file %s, unknown POSIX acl version %u.\n",
+			src, (unsigned int)CVAL(retbuf,0) );
+		SAFE_FREE(retbuf);
+		return 1;
+	}
+
+	num_file_acls = SVAL(retbuf,2);
+	num_dir_acls = SVAL(retbuf,4);
+	if (rb_size != SMB_POSIX_ACL_HEADER_SIZE + SMB_POSIX_ACL_ENTRY_SIZE*(num_file_acls+num_dir_acls)) {
+		d_printf("getfacl file %s, incorrect POSIX acl buffer size (should be %u, was %u).\n",
+			src,
+			(unsigned int)(SMB_POSIX_ACL_HEADER_SIZE + SMB_POSIX_ACL_ENTRY_SIZE*(num_file_acls+num_dir_acls)),
+			(unsigned int)rb_size);
+
+		SAFE_FREE(retbuf);
+		return 1;
+	}
+
+	d_printf("# file: %s\n", src);
+	d_printf("# owner: %u\n# group: %u\n", (unsigned int)sbuf.st_uid, (unsigned int)sbuf.st_gid);
+
+	if (num_file_acls == 0 && num_dir_acls == 0) {
+		d_printf("No acls found.\n");
+	}
+
+	for (i = 0; i < num_file_acls; i++) {
+		uint32 uorg;
+		fstring permstring;
+		unsigned char tagtype = CVAL(retbuf, SMB_POSIX_ACL_HEADER_SIZE+(i*SMB_POSIX_ACL_ENTRY_SIZE));
+		unsigned char perms = CVAL(retbuf, SMB_POSIX_ACL_HEADER_SIZE+(i*SMB_POSIX_ACL_ENTRY_SIZE)+1);
+
+		switch(tagtype) {
+			case SMB_POSIX_ACL_USER_OBJ:
+				d_printf("user::");
+				break;
+			case SMB_POSIX_ACL_USER:
+				uorg = IVAL(retbuf,SMB_POSIX_ACL_HEADER_SIZE+(i*SMB_POSIX_ACL_ENTRY_SIZE)+2);
+				d_printf("user:%u:", uorg);
+				break;
+			case SMB_POSIX_ACL_GROUP_OBJ:
+				d_printf("group::");
+				break;
+			case SMB_POSIX_ACL_GROUP:
+				uorg = IVAL(retbuf,SMB_POSIX_ACL_HEADER_SIZE+(i*SMB_POSIX_ACL_ENTRY_SIZE)+2);
+				d_printf("group:%u", uorg);
+				break;
+			case SMB_POSIX_ACL_MASK:
+				d_printf("mask::");
+				break;
+			case SMB_POSIX_ACL_OTHER:
+				d_printf("other::");
+				break;
+			default:
+				d_printf("getfacl file %s, incorrect POSIX acl tagtype (%u).\n",
+					src, (unsigned int)tagtype );
+				SAFE_FREE(retbuf);
+				return 1;
+		}
+
+		d_printf("%s\n", perms_to_string(permstring, perms));
+	}
+
+	for (i = 0; i < num_dir_acls; i++) {
+		uint32 uorg;
+		fstring permstring;
+		unsigned char tagtype = CVAL(retbuf, SMB_POSIX_ACL_HEADER_SIZE+((i+num_file_acls)*SMB_POSIX_ACL_ENTRY_SIZE));
+		unsigned char perms = CVAL(retbuf, SMB_POSIX_ACL_HEADER_SIZE+((i+num_file_acls)*SMB_POSIX_ACL_ENTRY_SIZE)+1);
+
+		switch(tagtype) {
+			case SMB_POSIX_ACL_USER_OBJ:
+				d_printf("default:user::");
+				break;
+			case SMB_POSIX_ACL_USER:
+				uorg = IVAL(retbuf,SMB_POSIX_ACL_HEADER_SIZE+((i+num_file_acls)*SMB_POSIX_ACL_ENTRY_SIZE)+2);
+				d_printf("default:user:%u:", uorg);
+				break;
+			case SMB_POSIX_ACL_GROUP_OBJ:
+				d_printf("default:group::");
+				break;
+			case SMB_POSIX_ACL_GROUP:
+				uorg = IVAL(retbuf,SMB_POSIX_ACL_HEADER_SIZE+((i+num_file_acls)*SMB_POSIX_ACL_ENTRY_SIZE)+2);
+				d_printf("default:group:%u", uorg);
+				break;
+			case SMB_POSIX_ACL_MASK:
+				d_printf("default:mask::");
+				break;
+			case SMB_POSIX_ACL_OTHER:
+				d_printf("default:other::");
+				break;
+			default:
+				d_printf("getfacl file %s, incorrect POSIX acl tagtype (%u).\n",
+					src, (unsigned int)tagtype );
+				SAFE_FREE(retbuf);
+				return 1;
+		}
+
+		d_printf("%s\n", perms_to_string(permstring, perms));
+	}
+
+	SAFE_FREE(retbuf);
+	return 0;
+}
+
+/****************************************************************************
+ UNIX stat.
+****************************************************************************/
+
+static int cmd_stat(void)
+{
+	pstring src, name;
+	fstring mode_str;
+	SMB_STRUCT_STAT sbuf;
+	struct cli_state *targetcli;
+	struct tm *lt;
+	pstring targetname;
+ 
+	if (!SERVER_HAS_UNIX_CIFS(cli)) {
+		d_printf("Server doesn't support UNIX CIFS calls.\n");
+		return 1;
+	}
+
+	pstrcpy(src,cur_dir);
+	
+	if (!next_token_nr(NULL,name,NULL,sizeof(name))) {
+		d_printf("stat file\n");
+		return 1;
+	}
+
+	pstrcat(src,name);
+
+	
+	if ( !cli_resolve_path( "", cli, src, &targetcli, targetname ) ) {
+		d_printf("stat %s: %s\n", src, cli_errstr(cli));
+		return 1;
+	}
+	
+	if (!cli_unix_stat(targetcli, targetname, &sbuf)) {
+		d_printf("%s stat file %s\n",
+			cli_errstr(targetcli), src);
+		return 1;
+	} 
+
+	/* Print out the stat values. */
+	d_printf("File: %s\n", src);
+	d_printf("Size: %-12.0f\tBlocks: %u\t%s\n",
+		(double)sbuf.st_size,
+		(unsigned int)sbuf.st_blocks,
+		filetype_to_str(sbuf.st_mode));
+
+#if defined(S_ISCHR) && defined(S_ISBLK)
+	if (S_ISCHR(sbuf.st_mode) || S_ISBLK(sbuf.st_mode)) {
+		d_printf("Inode: %.0f\tLinks: %u\tDevice type: %u,%u\n",
+			(double)sbuf.st_ino,
+			(unsigned int)sbuf.st_nlink,
+			unix_dev_major(sbuf.st_rdev),
+			unix_dev_minor(sbuf.st_rdev));
+	} else 
+#endif
+		d_printf("Inode: %.0f\tLinks: %u\n",
+			(double)sbuf.st_ino,
+			(unsigned int)sbuf.st_nlink);
+
+	d_printf("Access: (0%03o/%s)\tUid: %u\tGid: %u\n",
+		((int)sbuf.st_mode & 0777),
+		unix_mode_to_str(mode_str, sbuf.st_mode),
+		(unsigned int)sbuf.st_uid, 
+		(unsigned int)sbuf.st_gid);
+
+	lt = localtime(&sbuf.st_atime);
+	if (lt) {
+		strftime(mode_str, sizeof(mode_str), "%F %T %z", lt);
+	} else {
+		fstrcpy(mode_str, "unknown");
+	}
+	d_printf("Access: %s\n", mode_str);
+
+	lt = localtime(&sbuf.st_mtime);
+	if (lt) {
+		strftime(mode_str, sizeof(mode_str), "%F %T %z", lt);
+	} else {
+		fstrcpy(mode_str, "unknown");
+	}
+	d_printf("Modify: %s\n", mode_str);
+
+	lt = localtime(&sbuf.st_ctime);
+	if (lt) {
+		strftime(mode_str, sizeof(mode_str), "%F %T %z", lt);
+	} else {
+		fstrcpy(mode_str, "unknown");
+	}
+	d_printf("Change: %s\n", mode_str);
+
+	return 0;
+}
+
+
+/****************************************************************************
+ UNIX chown.
+****************************************************************************/
+
+static int cmd_chown(void)
+{
+	pstring src;
+	uid_t uid;
+	gid_t gid;
+	pstring buf, buf2, buf3;
+	struct cli_state *targetcli;
+	pstring targetname;
+  
+	pstrcpy(src,cur_dir);
+	
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf)) || 
+		!next_token_nr(NULL,buf2,NULL, sizeof(buf2)) ||
+		!next_token_nr(NULL,buf3,NULL, sizeof(buf3))) {
+		d_printf("chown uid gid file\n");
+		return 1;
+	}
+
+	uid = (uid_t)atoi(buf);
+	gid = (gid_t)atoi(buf2);
+	pstrcat(src,buf3);
+
+	if ( !cli_resolve_path( "", cli, src, &targetcli, targetname ) ) {
+		d_printf("chown %s: %s\n", src, cli_errstr(cli));
+		return 1;
+	}
+
+
+	if (!SERVER_HAS_UNIX_CIFS(targetcli)) {
+		d_printf("Server doesn't support UNIX CIFS calls.\n");
+		return 1;
+	}
+	
+	if (!cli_unix_chown(targetcli, targetname, uid, gid)) {
+		d_printf("%s chown file %s uid=%d, gid=%d\n",
+			cli_errstr(targetcli), src, (int)uid, (int)gid);
+		return 1;
+	} 
+
+	return 0;
+}
+
+/****************************************************************************
+ Rename some file.
+****************************************************************************/
+
+static int cmd_rename(void)
+{
+	int err;
+	pstring src, dest;
+	pstring oname, nname;
+  
+	pstrcpy(src, "smb:");
+	pstrcat(src, service);
+	pstrcat(src, cur_dir);
+	pstrcpy(dest, src);
+	
+	if (!next_token_nr(NULL,oname,NULL,sizeof(oname)) || 
+		!next_token_nr(NULL,nname,NULL, sizeof(nname))) {
+		d_printf("rename <src> <dest>\n");
+		return 1;
+	}
+
+	pstrcat(src, oname);
+	pstrcat(dest, nname);
+	
+	DEBUG(4, ("O: %s\nN: %s\n", src, dest));
+
+	err = smbc_rename(src, dest);
+	if (err < 0)
+	{
+		d_printf("%s renaming files\n", strerror(errno));
+		return 1;
+	}
+	
+	return 0;
+}
+
+/****************************************************************************
+ Print the volume name.
+****************************************************************************/
+
+static int cmd_volume(void)
+{
+	fstring volname;
+	uint32 serial_num;
+	time_t create_date;
+  
+	if (!cli_get_fs_volume_info(cli, volname, &serial_num, &create_date)) {
+		d_printf("Errr %s getting volume info\n",cli_errstr(cli));
+		return 1;
+	}
+	
+	d_printf("Volume: |%s| serial number 0x%x\n", volname, (unsigned int)serial_num);
+	return 0;
+}
+
+/****************************************************************************
+ Hard link files using the NT call.
+****************************************************************************/
+
+static int cmd_hardlink(void)
+{
+	pstring src,dest;
+	pstring buf,buf2;
+	struct cli_state *targetcli;
+	pstring targetname;
+  
+	pstrcpy(src,cur_dir);
+	pstrcpy(dest,cur_dir);
+	
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf)) || 
+		!next_token_nr(NULL,buf2,NULL, sizeof(buf2))) {
+		d_printf("hardlink <src> <dest>\n");
+		return 1;
+	}
+
+	pstrcat(src,buf);
+	pstrcat(dest,buf2);
+
+	if ( !cli_resolve_path( "", cli, src, &targetcli, targetname ) ) {
+		d_printf("hardlink %s: %s\n", src, cli_errstr(cli));
+		return 1;
+	}
+	
+	if (!SERVER_HAS_UNIX_CIFS(targetcli)) {
+		d_printf("Server doesn't support UNIX CIFS calls.\n");
+		return 1;
+	}
+	
+	if (!cli_nt_hardlink(targetcli, targetname, dest)) {
+		d_printf("%s doing an NT hard link of files\n",cli_errstr(targetcli));
+		return 1;
+	}
+	
+	return 0;
+}
+
+/****************************************************************************
+ Toggle the prompt flag.
+****************************************************************************/
+
+static int cmd_prompt(void)
+{
+	prompt = !prompt;
+	DEBUG(2,("prompting is now %s\n",prompt?"on":"off"));
+	
+	return 1;
+}
+
+/****************************************************************************
+ Set the newer than time.
+****************************************************************************/
+
+static int cmd_newer(void)
+{
+	pstring buf;
+	BOOL ok;
+	SMB_STRUCT_STAT sbuf;
+
+	ok = next_token_nr(NULL,buf,NULL,sizeof(buf));
+	if (ok && (sys_stat(buf,&sbuf) == 0)) {
+		newer_than = sbuf.st_mtime;
+		DEBUG(1,("Getting files newer than %s",
+			 time_to_asc(newer_than)));
+	} else {
+		newer_than = 0;
+	}
+
+	if (ok && newer_than == 0) {
+		d_printf("Error setting newer-than time\n");
+		return 1;
+	}
+
+	return 0;
+}
+
+/****************************************************************************
+ Set the archive level.
+****************************************************************************/
+
+static int cmd_archive(void)
+{
+	pstring buf;
+
+	if (next_token_nr(NULL,buf,NULL,sizeof(buf))) {
+		archive_level = atoi(buf);
+	} else
+		d_printf("Archive level is %d\n",archive_level);
+
+	return 0;
+}
+
+/****************************************************************************
+ Toggle the lowercaseflag.
+****************************************************************************/
+
+static int cmd_lowercase(void)
+{
+	lowercase = !lowercase;
+	DEBUG(2,("filename lowercasing is now %s\n",lowercase?"on":"off"));
+
+	return 0;
+}
+
+/****************************************************************************
+ Toggle the case sensitive flag.
+****************************************************************************/
+
+static int cmd_setcase(void)
+{
+	BOOL orig_case_sensitive = cli_set_case_sensitive(cli, False);
+
+	cli_set_case_sensitive(cli, !orig_case_sensitive);
+	DEBUG(2,("filename case sensitivity is now %s\n",!orig_case_sensitive ?
+		"on":"off"));
+
+	return 0;
+}
+
+/****************************************************************************
+ Toggle the recurse flag.
+****************************************************************************/
+
+static int cmd_recurse(void)
+{
+	recurse = !recurse;
+	DEBUG(2,("directory recursion is now %s\n",recurse?"on":"off"));
+
+	return 0;
+}
+
+/****************************************************************************
+ Toggle the translate flag.
+****************************************************************************/
+
+static int cmd_translate(void)
+{
+	translation = !translation;
+	DEBUG(2,("CR/LF<->LF and print text translation now %s\n",
+		 translation?"on":"off"));
+
+	return 0;
+}
+
+/****************************************************************************
+ Do the lcd command.
+ ****************************************************************************/
+
+static int cmd_lcd(void)
+{
+	pstring buf;
+	pstring d;
+	
+	if (next_token_nr(NULL,buf,NULL,sizeof(buf)))
+		chdir(buf);
+	DEBUG(2,("the local directory is now %s\n",sys_getwd(d)));
+
+	return 0;
+}
+
+/****************************************************************************
+ Get a file restarting at end of local file.
+ ****************************************************************************/
+
+static int cmd_reget(void)
+{
+	pstring local_name;
+	pstring remote_name;
+	char *p;
+
+	pstrcpy(remote_name, cur_dir);
+	pstrcat(remote_name, "/");
+	
+	p = remote_name + strlen(remote_name);
+	
+	if (!next_token_nr(NULL, p, NULL, sizeof(remote_name) - strlen(remote_name))) {
+		d_printf("reget <filename>\n");
+		return 1;
+	}
+	pstrcpy(local_name, p);
+	clean_name(remote_name);
+	
+	next_token_nr(NULL, local_name, NULL, sizeof(local_name));
+	
+	return do_get(remote_name, local_name, True);
+}
+
+/****************************************************************************
+ Put a file restarting at end of local file.
+ ****************************************************************************/
+
+static int cmd_reput(void)
+{
+	pstring local_name;
+	pstring remote_name;
+	pstring buf;
+	char *p = buf;
+	SMB_STRUCT_STAT st;
+	
+	pstrcpy(remote_name, cur_dir);
+	pstrcat(remote_name, "/");
+  
+	if (!next_token_nr(NULL, p, NULL, sizeof(buf))) {
+		d_printf("reput <filename>\n");
+		return 1;
+	}
+	pstrcpy(local_name, p);
+  
+	if (!file_exist(local_name, &st)) {
+		d_printf("%s does not exist\n", local_name);
+		return 1;
+	}
+
+	if (next_token_nr(NULL, p, NULL, sizeof(buf)))
+		pstrcat(remote_name, p);
+	else
+		pstrcat(remote_name, local_name);
+	
+	clean_name(remote_name);
+
+	return do_put(remote_name, local_name, True);
+}
+
+/****************************************************************************
+ List a share name.
+ ****************************************************************************/
+
+static void browse_fn(const char *name, uint32 m, 
+                      const char *comment, void *state)
+{
+        fstring typestr;
+
+        *typestr=0;
+
+        switch (m)
+        {
+          case STYPE_DISKTREE:
+            fstrcpy(typestr,"Disk"); break;
+          case STYPE_PRINTQ:
+            fstrcpy(typestr,"Printer"); break;
+          case STYPE_DEVICE:
+            fstrcpy(typestr,"Device"); break;
+          case STYPE_IPC:
+            fstrcpy(typestr,"IPC"); break;
+        }
+	/* FIXME: If the remote machine returns non-ascii characters
+	   in any of these fields, they can corrupt the output.  We
+	   should remove them. */
+	if (!grepable) {
+		d_printf("\t%-15s %-10.10s%s\n",
+               		name,typestr,comment);
+	} else {
+		d_printf ("%s|%s|%s\n",typestr,name,comment);
+	}
+}
+
+/****************************************************************************
+ Try and browse available connections on a host.
+****************************************************************************/
+
+static BOOL browse_host(BOOL sort)
+{
+	int ret;
+	if (!grepable) {
+	        d_printf("\n\tSharename       Type      Comment\n");
+	        d_printf("\t---------       ----      -------\n");
+	}
+
+	if((ret = cli_RNetShareEnum(cli, browse_fn, NULL)) == -1)
+		d_printf("Error returning browse list: %s\n", cli_errstr(cli));
+
+	return (ret != -1);
+}
+
+/****************************************************************************
+ List a server name.
+****************************************************************************/
+
+static void server_fn(const char *name, uint32 m, 
+                      const char *comment, void *state)
+{
+	
+	if (!grepable){
+		d_printf("\t%-16s     %s\n", name, comment);
+	} else {
+		d_printf("%s|%s|%s\n",(char *)state, name, comment);
+	}
+}
+
+/****************************************************************************
+ Try and browse available connections on a host.
+****************************************************************************/
+
+static BOOL list_servers(const char *wk_grp)
+{
+	fstring state;
+
+	if (!cli->server_domain)
+		return False;
+
+	if (!grepable) {
+        	d_printf("\n\tServer               Comment\n");
+        	d_printf("\t---------            -------\n");
+	};
+	fstrcpy( state, "Server" );
+	cli_NetServerEnum(cli, cli->server_domain, SV_TYPE_ALL, server_fn,
+			  state);
+
+	if (!grepable) {
+	        d_printf("\n\tWorkgroup            Master\n");
+	        d_printf("\t---------            -------\n");
+	}; 
+
+	fstrcpy( state, "Workgroup" );
+	cli_NetServerEnum(cli, cli->server_domain, SV_TYPE_DOMAIN_ENUM,
+			  server_fn, state);
+	return True;
+}
+
+/****************************************************************************
+ Print or set current VUID
+****************************************************************************/
+
+static int cmd_vuid(void)
+{
+	fstring buf;
+	
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
+		d_printf("Current VUID is %d\n", cli->vuid);
+		return 0;
+	}
+
+	cli->vuid = atoi(buf);
+	return 0;
+}
+
+/****************************************************************************
+ Setup a new VUID, by issuing a session setup
+****************************************************************************/
+
+static int cmd_logon(void)
+{
+	pstring l_username, l_password;
+	pstring buf,buf2;
+  
+	if (!next_token_nr(NULL,buf,NULL,sizeof(buf))) {
+		d_printf("logon <username> [<password>]\n");
+		return 0;
+	}
+
+	pstrcpy(l_username, buf);
+
+	if (!next_token_nr(NULL,buf2,NULL,sizeof(buf))) 
+	{
+		char *pass = getpass("Password: ");
+		if (pass) 
+			pstrcpy(l_password, pass);
+	} 
+	else
+		pstrcpy(l_password, buf2);
+
+	if (!cli_session_setup(cli, l_username, 
+				   l_password, strlen(l_password),
+				   l_password, strlen(l_password),
+				   lp_workgroup())) {
+		d_printf("session setup failed: %s\n", cli_errstr(cli));
+		return -1;
+	}
+
+	d_printf("Current VUID is %d\n", cli->vuid);
+	return 0;
+}
+
+
+/****************************************************************************
+ list active connections
+****************************************************************************/
+
+static int cmd_list_connect(void)
+{
+	cli_cm_display();
+
+	return 0;
+}
+
+/****************************************************************************
+ display the current active client connection
+****************************************************************************/
+
+static int cmd_show_connect( void )
+{
+	struct cli_state *targetcli;
+	pstring targetpath;
+	
+	if ( !cli_resolve_path( "", cli, cur_dir, &targetcli, targetpath ) ) {
+		d_printf("showconnect %s: %s\n", cur_dir, cli_errstr(cli));
+		return 1;
+	}
+	
+	d_printf("//%s/%s\n", targetcli->desthost, targetcli->share);
+	return 0;
+}
+
+/* Some constants for completing filename arguments */
+
+#define COMPL_NONE		  0			 /* No completions */
+#define COMPL_REMOTE	  1			 /* Complete remote filename */
+#define COMPL_LOCAL		  2			 /* Complete local filename */
+
+/* This defines the commands supported by this client.
+ * NOTE: The "!" must be the last one in the list because it's fn pointer
+ *		 field is NULL, and NULL in that field is used in process_tok()
+ *		 (below) to indicate the end of the list.  crh
+ */
+static struct
+{
+  const char *name;
+  int (*fn)(void);
+  const char *description;
+  char compl_args[2];	   /* Completion argument info */
+} commands[] = {
+  {"?",cmd_help,"[command] give help on a command",{COMPL_NONE,COMPL_NONE}},
+/*	 {"altname",cmd_altname,"<file> show alt name",{COMPL_NONE,COMPL_NONE}}, */
+  {"archive",cmd_archive,"<level>\n0=ignore archive bit\n1=only get archive files\n2=only get archive files and reset archive bit\n3=get all files and reset archive bit",{COMPL_NONE,COMPL_NONE}},
+  {"blocksize",cmd_block,"blocksize <number> (default 20)",{COMPL_NONE,COMPL_NONE}},
+/*	 {"cancel",cmd_cancel,"<jobid> cancel a print queue entry",{COMPL_NONE,COMPL_NONE}}, */
+/*	 {"case_sensitive",cmd_setcase,"toggle the case sensitive flag to server",{COMPL_NONE,COMPL_NONE}}, */
+  {"cd",cmd_cd,"[directory] change/report the remote directory",{COMPL_REMOTE,COMPL_NONE}},
+/*	 {"chmod",cmd_chmod,"<src> <mode> chmod a file using UNIX permission",{COMPL_REMOTE,COMPL_REMOTE}}, */
+/*	 {"chown",cmd_chown,"<src> <uid> <gid> chown a file using UNIX uids and gids",{COMPL_REMOTE,COMPL_REMOTE}}, */
+/*	 {"del",cmd_del,"<mask> delete all matching files",{COMPL_REMOTE,COMPL_NONE}}, */
+  {"dir",cmd_dir,"<mask> list the contents of the current directory",{COMPL_REMOTE,COMPL_NONE}},
+/*	 {"du",cmd_du,"<mask> computes the total size of the current directory",{COMPL_REMOTE,COMPL_NONE}}, */
+  {"exit",cmd_quit,"logoff the server",{COMPL_NONE,COMPL_NONE}},
+  {"get",cmd_get,"<remote name> [local name] get a file",{COMPL_REMOTE,COMPL_LOCAL}},
+/*	 {"getfacl",cmd_getfacl,"<file name> get the POSIX ACL on a file (UNIX extensions only)",{COMPL_REMOTE,COMPL_LOCAL}}, */
+/*	 {"hardlink",cmd_hardlink,"<src> <dest> create a Windows hard link",{COMPL_REMOTE,COMPL_REMOTE}}, */
+  {"help",cmd_help,"[command] give help on a command",{COMPL_NONE,COMPL_NONE}},
+  {"history",cmd_history,"displays the command history",{COMPL_NONE,COMPL_NONE}},
+  {"lcd",cmd_lcd,"[directory] change/report the local current working directory",{COMPL_LOCAL,COMPL_NONE}},
+/*	 {"link",cmd_link,"<oldname> <newname> create a UNIX hard link",{COMPL_REMOTE,COMPL_REMOTE}}, */
+/*	 {"listconnect",cmd_list_connect,"list open connections",{COMPL_NONE,COMPL_NONE}}, */
+/*	 {"logon",cmd_logon,"establish new logon",{COMPL_NONE,COMPL_NONE}}, */
+  {"lowercase",cmd_lowercase,"toggle lowercasing of filenames for get",{COMPL_NONE,COMPL_NONE}},  
+  {"ls",cmd_dir,"<mask> list the contents of the current directory",{COMPL_REMOTE,COMPL_NONE}},
+/*	 {"mask",cmd_select,"<mask> mask all filenames against this",{COMPL_REMOTE,COMPL_NONE}}, */
+  {"md",cmd_mkdir,"<directory> make a directory",{COMPL_NONE,COMPL_NONE}},
+  {"mget",cmd_mget,"<mask> get all the matching files",{COMPL_REMOTE,COMPL_NONE}},
+  {"mkdir",cmd_mkdir,"<directory> make a directory",{COMPL_NONE,COMPL_NONE}},
+/*	 {"more",cmd_more,"<remote name> view a remote file with your pager",{COMPL_REMOTE,COMPL_NONE}}, */	 
+  {"mput",cmd_mput,"<mask> put all matching files",{COMPL_REMOTE,COMPL_NONE}},
+  {"newer",cmd_newer,"<file> only mget files newer than the specified local file",{COMPL_LOCAL,COMPL_NONE}},
+/*	 {"open",cmd_open,"<mask> open a file",{COMPL_REMOTE,COMPL_NONE}}, */
+/*	 {"print",cmd_print,"<file name> print a file",{COMPL_NONE,COMPL_NONE}}, */
+  {"prompt",cmd_prompt,"toggle prompting for filenames for mget and mput",{COMPL_NONE,COMPL_NONE}},	 
+  {"put",cmd_put,"<local name> [remote name] put a file",{COMPL_LOCAL,COMPL_REMOTE}},
+  {"pwd",cmd_pwd,"show current remote directory (same as 'cd' with no args)",{COMPL_NONE,COMPL_NONE}},
+  {"q",cmd_quit,"logoff the server",{COMPL_NONE,COMPL_NONE}},
+/*	 {"queue",cmd_queue,"show the print queue",{COMPL_NONE,COMPL_NONE}}, */
+  {"quit",cmd_quit,"logoff the server",{COMPL_NONE,COMPL_NONE}},
+  {"rd",cmd_rmdir,"<directory> remove a directory",{COMPL_NONE,COMPL_NONE}},
+  {"recurse",cmd_recurse,"toggle directory recursion for mget and mput",{COMPL_NONE,COMPL_NONE}},
+/*	{"reget",cmd_reget,"<remote name> [local name] get a file restarting at end of local file",{COMPL_REMOTE,COMPL_LOCAL}},*/
+  {"rename",cmd_rename,"<src> <dest> rename some files",{COMPL_REMOTE,COMPL_REMOTE}},
+/*	{"reput",cmd_reput,"<local name> [remote name] put a file restarting at end of remote file",{COMPL_LOCAL,COMPL_REMOTE}},*/
+/*	{"rm",cmd_del,"<mask> delete all matching files",{COMPL_REMOTE,COMPL_NONE}},*/
+  {"rmdir",cmd_rmdir,"<directory> remove a directory",{COMPL_NONE,COMPL_NONE}},
+/*	{"setmode",cmd_setmode,"filename <setmode string> change modes of file",{COMPL_REMOTE,COMPL_NONE}},*/
+/*	{"showconnect",cmd_show_connect,"display the current active connection",{COMPL_NONE,COMPL_NONE}},*/
+/*	{"stat",cmd_stat,"filename Do a UNIX extensions stat call on a file",{COMPL_REMOTE,COMPL_REMOTE}},*/
+/*	{"symlink",cmd_symlink,"<oldname> <newname> create a UNIX symlink",{COMPL_REMOTE,COMPL_REMOTE}},*/
+  {"tar",cmd_tar,"tar <c|x>[IXFqbgNan] current directory to/from <file name>",{COMPL_NONE,COMPL_NONE}},
+  {"tarmode",cmd_tarmode,"<full|inc|reset|noreset> tar's behaviour towards archive bits",{COMPL_NONE,COMPL_NONE}},
+  {"translate",cmd_translate,"toggle text translation for printing",{COMPL_NONE,COMPL_NONE}},
+/*	{"volume",cmd_volume,"print the volume name",{COMPL_NONE,COMPL_NONE}}, */
+/*	{"vuid",cmd_vuid,"change current vuid",{COMPL_NONE,COMPL_NONE}}, */
+  
+  /* Yes, this must be here, see crh's comment above. */
+  {"!",NULL,"run a shell command on the local system",{COMPL_NONE,COMPL_NONE}},
+  {NULL,NULL,NULL,{COMPL_NONE,COMPL_NONE}}
+};
+
+/*******************************************************************
+ Lookup a command string in the list of commands, including 
+ abbreviations.
+******************************************************************/
+
+static int process_tok(pstring tok)
+{
+	int i = 0, matches = 0;
+	int cmd=0;
+	int tok_len = strlen(tok);
+	
+	while ((commands[i].fn != NULL) || (strequal(commands[i].name, "!"))) {
+		if (strequal(commands[i].name,tok)) {
+			matches = 1;
+			cmd = i;
+			break;
+		} else if (strnequal(commands[i].name, tok, tok_len)) {
+			matches++;
+			cmd = i;
+		}
+		i++;
+	}
+  
+	if (matches == 0)
+		return(-1);
+	else if (matches == 1)
+		return(cmd);
+	else
+		return(-2);
+}
+
+/****************************************************************************
+ Help.
+****************************************************************************/
+
+static int cmd_help(void)
+{
+	int i=0,j;
+	pstring buf;
+	
+	if (next_token_nr(NULL,buf,NULL,sizeof(buf))) {
+		if ((i = process_tok(buf)) >= 0)
+			d_printf("HELP %s:\n\t%s\n\n",commands[i].name,commands[i].description);
+	} else {
+		while (commands[i].description) {
+			for (j=0; commands[i].description && (j<5); j++) {
+				d_printf("%-15s",commands[i].name);
+				i++;
+			}
+			d_printf("\n");
+		}
+	}
+	return 0;
+}
+
+/****************************************************************************
+ Process a -c command string.
+****************************************************************************/
+
+static int process_command_string(char *cmd)
+{
+	pstring line;
+	const char *ptr;
+	int rc = 0;
+
+	/* establish the connection if not already */
+	
+	if (!cli) {
+		cli = cli_cm_open(desthost, service, True);
+		if (!cli)
+			return 0;
+	}
+	
+	while (cmd[0] != '\0')	  {
+		char *p;
+		pstring tok;
+		int i;
+		
+		if ((p = strchr_m(cmd, ';')) == 0) {
+			strncpy(line, cmd, 999);
+			line[1000] = '\0';
+			cmd += strlen(cmd);
+		} else {
+			if (p - cmd > 999)
+				p = cmd + 999;
+			strncpy(line, cmd, p - cmd);
+			line[p - cmd] = '\0';
+			cmd = p + 1;
+		}
+		
+		/* and get the first part of the command */
+		ptr = line;
+		if (!next_token_nr(&ptr,tok,NULL,sizeof(tok))) continue;
+		
+		if ((i = process_tok(tok)) >= 0) {
+			rc = commands[i].fn();
+		} else if (i == -2) {
+			d_printf("%s: command abbreviation ambiguous\n",tok);
+		} else {
+			d_printf("%s: command not found\n",tok);
+		}
+	}
+	
+	return rc;
+}	
+
+#define MAX_COMPLETIONS 100
+
+typedef struct {
+	pstring dirmask;
+	char **matches;
+	int count, samelen;
+	const char *text;
+	int len;
+} completion_remote_t;
+
+static void completion_remote_filter(const char *mnt, file_info *f, const char *mask, void *state)
+{
+	completion_remote_t *info = (completion_remote_t *)state;
+
+	if ((info->count < MAX_COMPLETIONS - 1) && (strncmp(info->text, f->name, info->len) == 0) && (strcmp(f->name, ".") != 0) && (strcmp(f->name, "..") != 0)) {
+		if ((info->dirmask[0] == 0) && !(f->mode & aDIR))
+			info->matches[info->count] = SMB_STRDUP(f->name);
+		else {
+			pstring tmp;
+
+			if (info->dirmask[0] != 0)
+				pstrcpy(tmp, info->dirmask);
+			else
+				tmp[0] = 0;
+			pstrcat(tmp, f->name);
+			if (f->mode & aDIR)
+				pstrcat(tmp, "/");
+			info->matches[info->count] = SMB_STRDUP(tmp);
+		}
+		if (info->matches[info->count] == NULL)
+			return;
+		if (f->mode & aDIR)
+			smb_readline_ca_char(0);
+
+		if (info->count == 1)
+			info->samelen = strlen(info->matches[info->count]);
+		else
+			while (strncmp(info->matches[info->count], info->matches[info->count-1], info->samelen) != 0)
+				info->samelen--;
+		info->count++;
+	}
+}
+
+static char **remote_completion(const char *text, int len)
+{
+	pstring dirmask;
+	int i;
+	completion_remote_t info = { "", NULL, 1, 0, NULL, 0 };
+
+	/* can't have non-static intialisation on Sun CC, so do it
+	   at run time here */
+	info.samelen = len;
+	info.text = text;
+	info.len = len;
+		
+	if (len >= PATH_MAX)
+		return(NULL);
+
+	info.matches = SMB_MALLOC_ARRAY(char *,MAX_COMPLETIONS);
+	if (!info.matches) return NULL;
+	info.matches[0] = NULL;
+
+	for (i = len-1; i >= 0; i--)
+		if ((text[i] == '/') || (text[i] == '\\'))
+			break;
+	info.text = text+i+1;
+	info.samelen = info.len = len-i-1;
+
+	if (i > 0) {
+		strncpy(info.dirmask, text, i+1);
+		info.dirmask[i+1] = 0;
+		pstr_sprintf(dirmask, "%s%*s*", cur_dir, i-1, text);
+	} else
+		pstr_sprintf(dirmask, "%s*", cur_dir);
+
+	if (cli_list(cli, dirmask, aDIR | aSYSTEM | aHIDDEN, completion_remote_filter, &info) < 0)
+		goto cleanup;
+
+	if (info.count == 2)
+		info.matches[0] = SMB_STRDUP(info.matches[1]);
+	else {
+		info.matches[0] = SMB_MALLOC(info.samelen+1);
+		if (!info.matches[0])
+			goto cleanup;
+		strncpy(info.matches[0], info.matches[1], info.samelen);
+		info.matches[0][info.samelen] = 0;
+	}
+	info.matches[info.count] = NULL;
+	return info.matches;
+
+cleanup:
+	for (i = 0; i < info.count; i++)
+		free(info.matches[i]);
+	free(info.matches);
+	return NULL;
+}
+
+static char **completion_fn(const char *text, int start, int end)
+{
+	smb_readline_ca_char(' ');
+
+	if (start) {
+		const char *buf, *sp;
+		int i;
+		char compl_type;
+
+		buf = smb_readline_get_line_buffer();
+		if (buf == NULL)
+			return NULL;
+		
+		sp = strchr(buf, ' ');
+		if (sp == NULL)
+			return NULL;
+		
+		for (i = 0; commands[i].name; i++)
+			if ((strncmp(commands[i].name, text, sp - buf) == 0) && (commands[i].name[sp - buf] == 0))
+				break;
+		if (commands[i].name == NULL)
+			return NULL;
+
+		while (*sp == ' ')
+			sp++;
+
+		if (sp == (buf + start))
+			compl_type = commands[i].compl_args[0];
+		else
+			compl_type = commands[i].compl_args[1];
+
+		if (compl_type == COMPL_REMOTE)
+			return remote_completion(text, end - start);
+		else /* fall back to local filename completion */
+			return NULL;
+	} else {
+		char **matches;
+		int i, len, samelen = 0, count=1;
+
+		matches = SMB_MALLOC_ARRAY(char *, MAX_COMPLETIONS);
+		if (!matches) {
+			return NULL;
+		}
+		matches[0] = NULL;
+
+		len = strlen(text);
+		for (i=0;commands[i].fn && count < MAX_COMPLETIONS-1;i++) {
+			if (strncmp(text, commands[i].name, len) == 0) {
+				matches[count] = SMB_STRDUP(commands[i].name);
+				if (!matches[count])
+					goto cleanup;
+				if (count == 1)
+					samelen = strlen(matches[count]);
+				else
+					while (strncmp(matches[count], matches[count-1], samelen) != 0)
+						samelen--;
+				count++;
+			}
+		}
+
+		switch (count) {
+		case 0: /* should never happen */
+		case 1:
+			goto cleanup;
+		case 2:
+			matches[0] = SMB_STRDUP(matches[1]);
+			break;
+		default:
+			matches[0] = SMB_MALLOC(samelen+1);
+			if (!matches[0])
+				goto cleanup;
+			strncpy(matches[0], matches[1], samelen);
+			matches[0][samelen] = 0;
+		}
+		matches[count] = NULL;
+		return matches;
+
+cleanup:
+		for (i = 0; i < count; i++)
+			free(matches[i]);
+
+		free(matches);
+		return NULL;
+	}
+}
+
+/****************************************************************************
+ Make sure we swallow keepalives during idle time.
+****************************************************************************/
+
+static void readline_callback(void)
+{
+	fd_set fds;
+	struct timeval timeout;
+	static time_t last_t;
+	time_t t;
+
+	t = time(NULL);
+
+	if (t - last_t < 5)
+		return;
+
+	last_t = t;
+
+ again:
+
+	if (cli->fd == -1)
+		return;
+
+	FD_ZERO(&fds);
+	FD_SET(cli->fd,&fds);
+
+	timeout.tv_sec = 0;
+	timeout.tv_usec = 0;
+	sys_select_intr(cli->fd+1,&fds,NULL,NULL,&timeout);
+			
+	/* We deliberately use receive_smb instead of
+	   client_receive_smb as we want to receive
+	   session keepalives and then drop them here.
+	*/
+	if (FD_ISSET(cli->fd,&fds)) {
+		receive_smb(cli->fd,cli->inbuf,cli->bufsize,0);
+		goto again;
+	}
+	  
+	cli_chkpath(cli, "/");
+}
+
+/****************************************************************************
+ Process commands on stdin.
+****************************************************************************/
+
+static int process_stdin(void)
+{
+	const char *ptr;
+	int rc = 0;
+
+	while (1) {
+		pstring tok;
+		pstring the_prompt;
+		char *cline;
+		pstring line;
+		int i;
+		
+		/* display a prompt */
+		slprintf(the_prompt, sizeof(the_prompt)-1, "smb: %s> ", cur_dir);		 
+		/* Removed callback since we don't need to swallow keepalives with libsmbclient */
+		/*cline = smb_readline(the_prompt, readline_callback, completion_fn);*/
+		cline = smb_readline(the_prompt, NULL, completion_fn);
+		
+		if (!cline) break;
+		
+		pstrcpy(line, cline);
+
+		/* special case - first char is ! */
+		if (*line == '!') {
+			system(line + 1);
+			continue;
+		}
+		
+		/* and get the first part of the command */
+		ptr = line;
+		if (!next_token_nr(&ptr,tok,NULL,sizeof(tok))) continue;
+
+		if ((i = process_tok(tok)) >= 0) {
+			rc = commands[i].fn();
+		} else if (i == -2) {
+			d_printf("%s: command abbreviation ambiguous\n",tok);
+		} else {
+			d_printf("%s: command not found\n",tok);
+		}
+	}
+	return rc;
+}
+
+/****************************************************************************
+ Process commands from the client.
+****************************************************************************/
+
+static int process(char *base_directory)
+{
+	int rc = 0;
+
+	/*cli = cli_cm_open(desthost, service, True);
+	if (!cli) {
+		return 1;
+	}*/
+	rc = smbc_init(get_auth_data_fn, 0);   /* Initialize libsmbclient */
+	if (rc < 0)
+	{
+		d_printf("Error initializing libsmbclient: %s\n", strerror(errno));
+		return 1;
+	}
+	
+	if (*base_directory) {
+		rc = do_cd(base_directory);
+		if (rc) {
+			cli_cm_shutdown();
+			return rc;
+		}
+	}
+	else	/* start the auth fn*/
+	{
+		rc = do_cd("/");
+		if (rc)
+			return rc;
+	}
+	
+	if (cmdstr) {
+		rc = process_command_string(cmdstr);
+	} else {
+		process_stdin();
+	}
+  
+	cli_cm_shutdown();
+	return rc;
+}
+
+/****************************************************************************
+ Handle a -L query.
+****************************************************************************/
+
+static int do_host_query(char *query_host)
+{
+	cli = cli_cm_open(query_host, "IPC$", True);
+	if (!cli)
+		return 1;
+
+	browse_host(True);
+
+	if (port != 139) {
+
+		/* Workgroups simply don't make sense over anything
+		   else but port 139... */
+
+		cli_cm_shutdown();
+		cli_cm_set_port( 139 );
+		cli = cli_cm_open(query_host, "IPC$", True);
+	}
+
+	if (cli == NULL) {
+		d_printf("NetBIOS over TCP disabled -- no workgroup available\n");
+		return 1;
+	}
+
+	list_servers(lp_workgroup());
+
+	cli_cm_shutdown();
+	
+	return(0);
+}
+
+/****************************************************************************
+ Handle a tar operation.
+****************************************************************************/
+
+static int do_tar_op(char *base_directory)
+{
+	int ret;
+
+	/* do we already have a connection? */
+	if (!cli) {
+		cli = cli_cm_open(desthost, service, True);
+		if (!cli)
+			return 1;
+	}
+
+	recurse=True;
+
+	if (*base_directory)  {
+		ret = do_cd(base_directory);
+		if (ret) {
+			cli_cm_shutdown();
+			return ret;
+		}
+	}
+	
+	ret=process_tar();
+
+	cli_cm_shutdown();
+
+	return(ret);
+}
+
+/****************************************************************************
+ Handle a message operation.
+****************************************************************************/
+
+static int do_message_op(void)
+{
+	struct in_addr ip;
+	struct nmb_name called, calling;
+	fstring server_name;
+	char name_type_hex[10];
+	int msg_port;
+
+	make_nmb_name(&calling, calling_name, 0x0);
+	make_nmb_name(&called , desthost, name_type);
+
+	fstrcpy(server_name, desthost);
+	snprintf(name_type_hex, sizeof(name_type_hex), "#%X", name_type);
+	fstrcat(server_name, name_type_hex);
+
+		zero_ip(&ip);
+	if (have_ip) 
+		ip = dest_ip;
+
+	/* we can only do messages over port 139 (to windows clients at least) */
+
+	msg_port = port ? port : 139;
+
+	if (!(cli=cli_initialise()) || (cli_set_port(cli, msg_port) != msg_port) ||
+		!cli_connect(cli, server_name, &ip)) {
+		d_printf("Connection to %s failed\n", desthost);
+		return 1;
+	}
+
+	if (!cli_session_request(cli, &calling, &called)) {
+		d_printf("session request failed\n");
+		cli_cm_shutdown();
+		return 1;
+	}
+
+	send_message();
+	cli_cm_shutdown();
+
+	return 0;
+}
+
+
+/****************************************************************************
+  main program
+****************************************************************************/
+
+ int main(int argc,char *argv[])
+{
+	pstring base_directory;
+	int opt;
+	pstring query_host;
+	BOOL message = False;
+	pstring term_code;
+	static const char *new_name_resolve_order = NULL;
+	poptContext pc;
+	char *p;
+	int rc = 0;
+	fstring new_workgroup;
+	struct poptOption long_options[] = {
+		POPT_AUTOHELP
+
+		{ "name-resolve", 'R', POPT_ARG_STRING, &new_name_resolve_order, 'R', "Use these name resolution services only", "NAME-RESOLVE-ORDER" },
+		{ "message", 'M', POPT_ARG_STRING, NULL, 'M', "Send message", "HOST" },
+		{ "ip-address", 'I', POPT_ARG_STRING, NULL, 'I', "Use this IP to connect to", "IP" },
+		{ "stderr", 'E', POPT_ARG_NONE, NULL, 'E', "Write messages to stderr instead of stdout" },
+		{ "list", 'L', POPT_ARG_STRING, NULL, 'L', "Get a list of shares available on a host", "HOST" },
+		{ "terminal", 't', POPT_ARG_STRING, NULL, 't', "Terminal I/O code {sjis|euc|jis7|jis8|junet|hex}", "CODE" },
+		{ "max-protocol", 'm', POPT_ARG_STRING, NULL, 'm', "Set the max protocol level", "LEVEL" },
+		{ "tar", 'T', POPT_ARG_STRING, NULL, 'T', "Command line tar", "<c|x>IXFqgbNan" },
+		{ "directory", 'D', POPT_ARG_STRING, NULL, 'D', "Start from directory", "DIR" },
+		{ "command", 'c', POPT_ARG_STRING, &cmdstr, 'c', "Execute semicolon separated commands" }, 
+		{ "send-buffer", 'b', POPT_ARG_INT, &io_bufsize, 'b', "Changes the transmit/send buffer", "BYTES" },
+		{ "port", 'p', POPT_ARG_INT, &port, 'p', "Port to connect to", "PORT" },
+		{ "grepable", 'g', POPT_ARG_NONE, NULL, 'g', "Produce grepable output" },
+		POPT_COMMON_SAMBA
+		POPT_COMMON_CONNECTION
+		POPT_COMMON_CREDENTIALS
+		POPT_TABLEEND
+	};
+	
+
+#ifdef KANJI
+	pstrcpy(term_code, KANJI);
+#else /* KANJI */
+	*term_code = 0;
+#endif /* KANJI */
+
+	*query_host = 0;
+	*base_directory = 0;
+	
+	/* initialize the workgroup name so we can determine whether or 
+	   not it was set by a command line option */
+	   
+	set_global_myworkgroup( "" );
+	set_global_myname( "" );
+
+		/* set default debug level to 0 regardless of what smb.conf sets */
+	setup_logging( "smbctool", True );
+	DEBUGLEVEL_CLASS[DBGC_ALL] = 1;
+	if ((dbf = x_fdup(x_stderr))) {
+		x_setbuf( dbf, NULL );
+	}
+
+	pc = poptGetContext("smbclient", argc, (const char **) argv, long_options, 
+				POPT_CONTEXT_KEEP_FIRST);
+	poptSetOtherOptionHelp(pc, "service <password>");
+
+	in_client = True;	/* Make sure that we tell lp_load we are */
+
+	while ((opt = poptGetNextOpt(pc)) != -1) {
+		switch (opt) {
+		case 'M':
+			/* Messages are sent to NetBIOS name type 0x3
+			 * (Messenger Service).	 Make sure we default
+			 * to port 139 instead of port 445. srl,crh
+			 */
+			name_type = 0x03; 
+			cli_cm_set_dest_name_type( name_type );
+			pstrcpy(desthost,poptGetOptArg(pc));
+			if( !port )
+				cli_cm_set_port( 139 );
+			message = True;
+			break;
+		case 'I':
+			{
+				dest_ip = *interpret_addr2(poptGetOptArg(pc));
+				if (is_zero_ip(dest_ip))
+					exit(1);
+				have_ip = True;
+
+				cli_cm_set_dest_ip( dest_ip );
+			}
+			break;
+		case 'E':
+			if (dbf) {
+				x_fclose(dbf);
+			}
+			dbf = x_stderr;
+			display_set_stderr();
+			break;
+
+		case 'L':
+			pstrcpy(query_host, poptGetOptArg(pc));
+			break;
+		case 't':
+			pstrcpy(term_code, poptGetOptArg(pc));
+			break;
+		case 'm':
+			max_protocol = interpret_protocol(poptGetOptArg(pc), max_protocol);
+			break;
+		case 'T':
+			/* We must use old option processing for this. Find the
+			 * position of the -T option in the raw argv[]. */
+			{
+				int i, optnum;
+				for (i = 1; i < argc; i++) {
+					if (strncmp("-T", argv[i],2)==0)
+						break;
+				}
+				i++;
+				if (!(optnum = tar_parseargs(argc, argv, poptGetOptArg(pc), i))) {
+					poptPrintUsage(pc, stderr, 0);
+					exit(1);
+				}
+				/* Now we must eat (optnum - i) options - they have
+				 * been processed by tar_parseargs().
+				 */
+				optnum -= i;
+				for (i = 0; i < optnum; i++)
+					poptGetOptArg(pc);
+			}
+			break;
+		case 'D':
+			pstrcpy(base_directory,poptGetOptArg(pc));
+			break;
+		case 'g':
+			grepable=True;
+			break;
+		}
+	}
+
+	poptGetArg(pc);
+
+	/* check for the -P option */
+
+	if ( port != 0 )
+		cli_cm_set_port( port );
+
+	/*
+	 * Don't load debug level from smb.conf. It should be
+	 * set by cmdline arg or remain default (0)
+	 */
+	AllowDebugChange = False;
+	
+	/* save the workgroup...
+	
+	   FIXME!! do we need to do this for other options as well 
+	   (or maybe a generic way to keep lp_load() from overwriting 
+	   everything)?	 */
+	
+	fstrcpy( new_workgroup, lp_workgroup() );
+	pstrcpy( calling_name, global_myname() );
+	
+	if ( override_logfile )
+		setup_logging( lp_logfile(), False );
+
+	load_case_tables();
+
+	if (!lp_load(dyn_CONFIGFILE,True,False,False,True)) {
+		fprintf(stderr, "%s: Can't load %s - run testparm to debug it\n",
+			argv[0], dyn_CONFIGFILE);
+	}
+	
+	load_interfaces();
+	
+	if ( strlen(new_workgroup) != 0 )
+		set_global_myworkgroup( new_workgroup );
+	pstrcpy(workgroup, lp_workgroup());
+
+	if ( strlen(calling_name) != 0 )
+		set_global_myname( calling_name );
+	else
+		pstrcpy( calling_name, global_myname() );
+
+	if(poptPeekArg(pc)) {
+		pstrcpy(service,poptGetArg(pc));  
+		/* Convert any '\' characters in the service name to '/' characters */
+		string_replace(service, '\\','/');
+
+		if (count_chars(service,'/') < 3) {
+			d_printf("\n%s: Not enough '/' characters in service\n",service);
+			poptPrintUsage(pc, stderr, 0);
+			exit(1);
+		}
+	}
+
+	if (poptPeekArg(pc) && !cmdline_auth_info.got_pass) { 
+		cmdline_auth_info.got_pass = True;
+		pstrcpy(cmdline_auth_info.password,poptGetArg(pc));	 
+	}
+
+	init_names();
+
+	if(new_name_resolve_order)
+		lp_set_name_resolve_order(new_name_resolve_order);
+
+	if (!tar_type && !*query_host && !*service && !message) {
+		poptPrintUsage(pc, stderr, 0);
+		exit(1);
+	}
+
+	poptFreeContext(pc);
+
+	/* store the username an password for dfs support */
+
+	cli_cm_set_credentials( &cmdline_auth_info );
+	pstrcpy(username, cmdline_auth_info.username);
+
+	DEBUG(3,("Client started (version %s).\n", SAMBA_VERSION_STRING));
+
+	if (tar_type) {
+		if (cmdstr)
+			process_command_string(cmdstr);
+		return do_tar_op(base_directory);
+	}
+
+	if (*query_host) {
+		char *qhost = query_host;
+		char *slash;
+
+		while (*qhost == '\\' || *qhost == '/')
+			qhost++;
+
+		if ((slash = strchr_m(qhost, '/'))
+			|| (slash = strchr_m(qhost, '\\'))) {
+			*slash = 0;
+		}
+
+		if ((p=strchr_m(qhost, '#'))) {
+			*p = 0;
+			p++;
+			sscanf(p, "%x", &name_type);
+			cli_cm_set_dest_name_type( name_type );
+		}
+
+		return do_host_query(qhost);
+	}
+
+	if (message) {
+		return do_message_op();
+	}
+	
+	if (process(base_directory)) {
+		return 1;
+	}
+
+	return rc;
+}

Copied: branches/samba/upstream/source/client/smbmnt.c (from rev 1928, branches/samba/upstream/source/client/smbmnt.c)
===================================================================
--- branches/samba/upstream/source/client/smbmnt.c	                        (rev 0)
+++ branches/samba/upstream/source/client/smbmnt.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,323 @@
+/*
+ *  smbmnt.c
+ *
+ *  Copyright (C) 1995-1998 by Paal-Kr. Engstad and Volker Lendecke
+ *  extensively modified by Tridge
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *  
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#define SMBMOUNT_MALLOC 1
+
+#include "includes.h"
+
+#include <mntent.h>
+#include <sys/utsname.h>
+
+#include <asm/types.h>
+#include <asm/posix_types.h>
+#include <linux/smb.h>
+#include <linux/smb_mount.h>
+#include <asm/unistd.h>
+
+#ifndef	MS_MGC_VAL
+/* This may look strange but MS_MGC_VAL is what we are looking for and
+	is what we need from <linux/fs.h> under libc systems and is
+	provided in standard includes on glibc systems.  So...  We
+	switch on what we need...  */
+#include <linux/fs.h>
+#endif
+
+static uid_t mount_uid;
+static gid_t mount_gid;
+static int mount_ro;
+static unsigned mount_fmask;
+static unsigned mount_dmask;
+static int user_mount;
+static char *options;
+
+static void
+help(void)
+{
+        printf("\n");
+        printf("Usage: smbmnt mount-point [options]\n");
+	printf("Version %s\n\n",SAMBA_VERSION_STRING);
+        printf("-s share       share name on server\n"
+               "-r             mount read-only\n"
+               "-u uid         mount as uid\n"
+               "-g gid         mount as gid\n"
+               "-f mask        permission mask for files\n"
+               "-d mask        permission mask for directories\n"
+               "-o options     name=value, list of options\n"
+               "-h             print this help text\n");
+}
+
+static int
+parse_args(int argc, char *argv[], struct smb_mount_data *data, char **share)
+{
+        int opt;
+
+        while ((opt = getopt (argc, argv, "s:u:g:rf:d:o:")) != EOF)
+	{
+                switch (opt)
+		{
+                case 's':
+                        *share = optarg;
+                        break;
+                case 'u':
+			if (!user_mount) {
+				mount_uid = strtol(optarg, NULL, 0);
+			}
+                        break;
+                case 'g':
+			if (!user_mount) {
+				mount_gid = strtol(optarg, NULL, 0);
+			}
+                        break;
+                case 'r':
+                        mount_ro = 1;
+                        break;
+                case 'f':
+                        mount_fmask = strtol(optarg, NULL, 8);
+                        break;
+                case 'd':
+                        mount_dmask = strtol(optarg, NULL, 8);
+                        break;
+		case 'o':
+			options = optarg;
+			break;
+                default:
+                        return -1;
+                }
+        }
+        return 0;
+        
+}
+
+static char *
+fullpath(const char *p)
+{
+        char path[PATH_MAX+1];
+
+	if (strlen(p) > PATH_MAX) {
+		return NULL;
+	}
+
+        if (realpath(p, path) == NULL) {
+		fprintf(stderr,"Failed to find real path for mount point %s: %s\n",
+			p, strerror(errno));
+		exit(1);
+	}
+	return strdup(path);
+}
+
+/* Check whether user is allowed to mount on the specified mount point. If it's
+   OK then we change into that directory - this prevents race conditions */
+static int mount_ok(char *mount_point)
+{
+	struct stat st;
+
+	if (chdir(mount_point) != 0) {
+		return -1;
+	}
+
+        if (stat(".", &st) != 0) {
+		return -1;
+        }
+
+        if (!S_ISDIR(st.st_mode)) {
+                errno = ENOTDIR;
+                return -1;
+        }
+
+        if ((getuid() != 0) && 
+	    ((getuid() != st.st_uid) || 
+	     ((st.st_mode & S_IRWXU) != S_IRWXU))) {
+                errno = EPERM;
+                return -1;
+        }
+
+        return 0;
+}
+
+/* Tries to mount using the appropriate format. For 2.2 the struct,
+   for 2.4 the ascii version. */
+static int
+do_mount(char *share_name, unsigned int flags, struct smb_mount_data *data)
+{
+	pstring opts;
+	struct utsname uts;
+	char *release, *major, *minor;
+	char *data1, *data2;
+
+	uname(&uts);
+	release = uts.release;
+	major = strtok(release, ".");
+	minor = strtok(NULL, ".");
+	if (major && minor && atoi(major) == 2 && atoi(minor) < 4) {
+		/* < 2.4, assume struct */
+		data1 = (char *) data;
+		data2 = opts;
+	} else {
+		/* >= 2.4, assume ascii but fall back on struct */
+		data1 = opts;
+		data2 = (char *) data;
+	}
+
+	slprintf(opts, sizeof(opts)-1,
+		 "version=7,uid=%d,gid=%d,file_mode=0%o,dir_mode=0%o,%s",
+		 mount_uid, mount_gid, data->file_mode, data->dir_mode,options);
+	if (mount(share_name, ".", "smbfs", flags, data1) == 0)
+		return 0;
+	return mount(share_name, ".", "smbfs", flags, data2);
+}
+
+ int main(int argc, char *argv[])
+{
+	char *mount_point, *share_name = NULL;
+	FILE *mtab;
+	int fd;
+	unsigned int flags;
+	struct smb_mount_data data;
+	struct mntent ment;
+
+	memset(&data, 0, sizeof(struct smb_mount_data));
+
+	if (argc < 2) {
+		help();
+		exit(1);
+	}
+
+	if (argv[1][0] == '-') {
+		help();
+		exit(1);
+	}
+
+	if (getuid() != 0) {
+		user_mount = 1;
+	}
+
+        if (geteuid() != 0) {
+                fprintf(stderr, "smbmnt must be installed suid root for direct user mounts (%d,%d)\n", getuid(), geteuid());
+                exit(1);
+        }
+
+	mount_uid = getuid();
+	mount_gid = getgid();
+	mount_fmask = umask(0);
+        umask(mount_fmask);
+	mount_fmask = ~mount_fmask;
+
+        mount_point = fullpath(argv[1]);
+
+        argv += 1;
+        argc -= 1;
+
+        if (mount_ok(mount_point) != 0) {
+                fprintf(stderr, "cannot mount on %s: %s\n",
+                        mount_point, strerror(errno));
+                exit(1);
+        }
+
+	data.version = SMB_MOUNT_VERSION;
+
+        /* getuid() gives us the real uid, who may umount the fs */
+        data.mounted_uid = getuid();
+
+        if (parse_args(argc, argv, &data, &share_name) != 0) {
+                help();
+                return -1;
+        }
+
+        data.uid = mount_uid;    // truncates to 16-bits here!!!
+        data.gid = mount_gid;
+        data.file_mode = (S_IRWXU|S_IRWXG|S_IRWXO) & mount_fmask;
+        data.dir_mode  = (S_IRWXU|S_IRWXG|S_IRWXO) & mount_dmask;
+
+        if (mount_dmask == 0) {
+                data.dir_mode = data.file_mode;
+                if ((data.dir_mode & S_IRUSR) != 0)
+                        data.dir_mode |= S_IXUSR;
+                if ((data.dir_mode & S_IRGRP) != 0)
+                        data.dir_mode |= S_IXGRP;
+                if ((data.dir_mode & S_IROTH) != 0)
+                        data.dir_mode |= S_IXOTH;
+        }
+
+	flags = MS_MGC_VAL | MS_NOSUID | MS_NODEV;
+
+	if (mount_ro) flags |= MS_RDONLY;
+
+	if (do_mount(share_name, flags, &data) < 0) {
+		switch (errno) {
+		case ENODEV:
+			fprintf(stderr, "ERROR: smbfs filesystem not supported by the kernel\n");
+			break;
+		default:
+			perror("mount error");
+		}
+		fprintf(stderr, "Please refer to the smbmnt(8) manual page\n");
+		return -1;
+	}
+
+        ment.mnt_fsname = share_name ? share_name : "none";
+        ment.mnt_dir = mount_point;
+        ment.mnt_type = "smbfs";
+        ment.mnt_opts = "";
+        ment.mnt_freq = 0;
+        ment.mnt_passno= 0;
+
+        mount_point = ment.mnt_dir;
+
+	if (mount_point == NULL)
+	{
+		fprintf(stderr, "Mount point too long\n");
+		return -1;
+	}
+	
+        if ((fd = open(MOUNTED"~", O_RDWR|O_CREAT|O_EXCL, 0600)) == -1)
+        {
+                fprintf(stderr, "Can't get "MOUNTED"~ lock file");
+                return 1;
+        }
+        close(fd);
+	
+        if ((mtab = setmntent(MOUNTED, "a+")) == NULL)
+        {
+                fprintf(stderr, "Can't open " MOUNTED);
+                return 1;
+        }
+
+        if (addmntent(mtab, &ment) == 1)
+        {
+                fprintf(stderr, "Can't write mount entry");
+                return 1;
+        }
+        if (fchmod(fileno(mtab), 0644) == -1)
+        {
+                fprintf(stderr, "Can't set perms on "MOUNTED);
+                return 1;
+        }
+        endmntent(mtab);
+
+        if (unlink(MOUNTED"~") == -1)
+        {
+                fprintf(stderr, "Can't remove "MOUNTED"~");
+                return 1;
+        }
+
+	return 0;
+}	

Copied: branches/samba/upstream/source/client/smbmount.c (from rev 1928, branches/samba/upstream/source/client/smbmount.c)
===================================================================
--- branches/samba/upstream/source/client/smbmount.c	                        (rev 0)
+++ branches/samba/upstream/source/client/smbmount.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,946 @@
+/* 
+   Unix SMB/CIFS implementation.
+   SMBFS mount program
+   Copyright (C) Andrew Tridgell 1999
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+
+#include <mntent.h>
+#include <asm/types.h>
+#include <linux/smb_fs.h>
+
+extern BOOL in_client;
+extern pstring user_socket_options;
+extern char *optarg;
+extern int optind;
+
+static pstring credentials;
+static pstring my_netbios_name;
+static pstring password;
+static pstring username;
+static pstring workgroup;
+static pstring mpoint;
+static pstring service;
+static pstring options;
+
+static struct in_addr dest_ip;
+static BOOL have_ip;
+static int smb_port = 0;
+static BOOL got_user;
+static BOOL got_pass;
+static uid_t mount_uid;
+static gid_t mount_gid;
+static int mount_ro;
+static unsigned mount_fmask;
+static unsigned mount_dmask;
+static BOOL use_kerberos;
+/* TODO: Add code to detect smbfs version in kernel */
+static BOOL status32_smbfs = False;
+static BOOL smbfs_has_unicode = False;
+static BOOL smbfs_has_lfs = False;
+
+static void usage(void);
+
+static void exit_parent(int sig)
+{
+	/* parent simply exits when child says go... */
+	exit(0);
+}
+
+static void daemonize(void)
+{
+	int j, status;
+	pid_t child_pid;
+
+	signal( SIGTERM, exit_parent );
+
+	if ((child_pid = sys_fork()) < 0) {
+		DEBUG(0,("could not fork\n"));
+	}
+
+	if (child_pid > 0) {
+		while( 1 ) {
+			j = waitpid( child_pid, &status, 0 );
+			if( j < 0 ) {
+				if( EINTR == errno ) {
+					continue;
+				}
+				status = errno;
+			}
+			break;
+		}
+
+		/* If we get here - the child exited with some error status */
+		if (WIFSIGNALED(status))
+			exit(128 + WTERMSIG(status));
+		else
+			exit(WEXITSTATUS(status));
+	}
+
+	signal( SIGTERM, SIG_DFL );
+	chdir("/");
+}
+
+static void close_our_files(int client_fd)
+{
+	int i;
+	struct rlimit limits;
+
+	getrlimit(RLIMIT_NOFILE,&limits);
+	for (i = 0; i< limits.rlim_max; i++) {
+		if (i == client_fd)
+			continue;
+		close(i);
+	}
+}
+
+static void usr1_handler(int x)
+{
+	return;
+}
+
+
+/***************************************************** 
+return a connection to a server
+*******************************************************/
+static struct cli_state *do_connection(char *the_service)
+{
+	struct cli_state *c;
+	struct nmb_name called, calling;
+	char *server_n;
+	struct in_addr ip;
+	pstring server;
+	char *share;
+
+	if (the_service[0] != '\\' || the_service[1] != '\\') {
+		usage();
+		exit(1);
+	}
+
+	pstrcpy(server, the_service+2);
+	share = strchr_m(server,'\\');
+	if (!share) {
+		usage();
+		exit(1);
+	}
+	*share = 0;
+	share++;
+
+	server_n = server;
+
+	make_nmb_name(&calling, my_netbios_name, 0x0);
+	make_nmb_name(&called , server, 0x20);
+
+ again:
+        zero_ip(&ip);
+	if (have_ip) ip = dest_ip;
+
+	/* have to open a new connection */
+	if (!(c=cli_initialise()) || (cli_set_port(c, smb_port) != smb_port) ||
+	    !NT_STATUS_IS_OK(cli_connect(c, server_n, &ip))) {
+		DEBUG(0,("%d: Connection to %s failed\n", sys_getpid(), server_n));
+		if (c) {
+			cli_shutdown(c);
+		}
+		return NULL;
+	}
+
+	/* SPNEGO doesn't work till we get NTSTATUS error support */
+	/* But it is REQUIRED for kerberos authentication */
+	if(!use_kerberos) c->use_spnego = False;
+
+	/* The kernel doesn't yet know how to sign it's packets */
+	c->sign_info.allow_smb_signing = False;
+
+	/* Use kerberos authentication if specified */
+	c->use_kerberos = use_kerberos;
+
+	if (!cli_session_request(c, &calling, &called)) {
+		char *p;
+		DEBUG(0,("%d: session request to %s failed (%s)\n", 
+			 sys_getpid(), called.name, cli_errstr(c)));
+		cli_shutdown(c);
+		if ((p=strchr_m(called.name, '.'))) {
+			*p = 0;
+			goto again;
+		}
+		if (strcmp(called.name, "*SMBSERVER")) {
+			make_nmb_name(&called , "*SMBSERVER", 0x20);
+			goto again;
+		}
+		return NULL;
+	}
+
+	DEBUG(4,("%d: session request ok\n", sys_getpid()));
+
+	if (!cli_negprot(c)) {
+		DEBUG(0,("%d: protocol negotiation failed\n", sys_getpid()));
+		cli_shutdown(c);
+		return NULL;
+	}
+
+	if (!got_pass) {
+		char *pass = getpass("Password: ");
+		if (pass) {
+			pstrcpy(password, pass);
+		}
+	}
+
+	/* This should be right for current smbfs. Future versions will support
+	  large files as well as unicode and oplocks. */
+  	c->capabilities &= ~(CAP_NT_SMBS | CAP_NT_FIND | CAP_LEVEL_II_OPLOCKS);
+  	if (!smbfs_has_lfs)
+  		c->capabilities &= ~CAP_LARGE_FILES;
+  	if (!smbfs_has_unicode)
+  		c->capabilities &= ~CAP_UNICODE;
+	if (!status32_smbfs) {
+  		c->capabilities &= ~CAP_STATUS32;
+		c->force_dos_errors = True;
+	}
+
+	if (!NT_STATUS_IS_OK(cli_session_setup(c, username, 
+					       password, strlen(password),
+					       password, strlen(password),
+					       workgroup))) {
+		/* if a password was not supplied then try again with a
+			null username */
+		if (password[0] || !username[0] ||
+		    !NT_STATUS_IS_OK(cli_session_setup(c, "", "", 0, "", 0, workgroup))) {
+			DEBUG(0,("%d: session setup failed: %s\n",
+				sys_getpid(), cli_errstr(c)));
+			cli_shutdown(c);
+			return NULL;
+		}
+		DEBUG(0,("Anonymous login successful\n"));
+	}
+
+	DEBUG(4,("%d: session setup ok\n", sys_getpid()));
+
+	if (!cli_send_tconX(c, share, "?????",
+			    password, strlen(password)+1)) {
+		DEBUG(0,("%d: tree connect failed: %s\n",
+			 sys_getpid(), cli_errstr(c)));
+		cli_shutdown(c);
+		return NULL;
+	}
+
+	DEBUG(4,("%d: tconx ok\n", sys_getpid()));
+
+	got_pass = True;
+
+	return c;
+}
+
+
+/****************************************************************************
+unmount smbfs  (this is a bailout routine to clean up if a reconnect fails)
+	Code blatently stolen from smbumount.c
+		-mhw-
+****************************************************************************/
+static void smb_umount(char *mount_point)
+{
+	int fd;
+        struct mntent *mnt;
+        FILE* mtab;
+        FILE* new_mtab;
+
+	/* Programmers Note:
+		This routine only gets called to the scene of a disaster
+		to shoot the survivors...  A connection that was working
+		has now apparently failed.  We have an active mount point
+		(presumably) that we need to dump.  If we get errors along
+		the way - make some noise, but we are already turning out
+		the lights to exit anyways...
+	*/
+        if (umount(mount_point) != 0) {
+                DEBUG(0,("%d: Could not umount %s: %s\n",
+			 sys_getpid(), mount_point, strerror(errno)));
+                return;
+        }
+
+        if ((fd = open(MOUNTED"~", O_RDWR|O_CREAT|O_EXCL, 0600)) == -1) {
+                DEBUG(0,("%d: Can't get "MOUNTED"~ lock file", sys_getpid()));
+                return;
+        }
+
+        close(fd);
+	
+        if ((mtab = setmntent(MOUNTED, "r")) == NULL) {
+                DEBUG(0,("%d: Can't open " MOUNTED ": %s\n",
+			 sys_getpid(), strerror(errno)));
+                return;
+        }
+
+#define MOUNTED_TMP MOUNTED".tmp"
+
+        if ((new_mtab = setmntent(MOUNTED_TMP, "w")) == NULL) {
+                DEBUG(0,("%d: Can't open " MOUNTED_TMP ": %s\n",
+			 sys_getpid(), strerror(errno)));
+                endmntent(mtab);
+                return;
+        }
+
+        while ((mnt = getmntent(mtab)) != NULL) {
+                if (strcmp(mnt->mnt_dir, mount_point) != 0) {
+                        addmntent(new_mtab, mnt);
+                }
+        }
+
+        endmntent(mtab);
+
+        if (fchmod (fileno (new_mtab), S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH) < 0) {
+                DEBUG(0,("%d: Error changing mode of %s: %s\n",
+			 sys_getpid(), MOUNTED_TMP, strerror(errno)));
+                return;
+        }
+
+        endmntent(new_mtab);
+
+        if (rename(MOUNTED_TMP, MOUNTED) < 0) {
+                DEBUG(0,("%d: Cannot rename %s to %s: %s\n",
+			 sys_getpid(), MOUNTED, MOUNTED_TMP, strerror(errno)));
+                return;
+        }
+
+        if (unlink(MOUNTED"~") == -1) {
+                DEBUG(0,("%d: Can't remove "MOUNTED"~", sys_getpid()));
+                return;
+        }
+}
+
+
+/*
+ * Call the smbfs ioctl to install a connection socket,
+ * then wait for a signal to reconnect. Note that we do
+ * not exit after open_sockets() or send_login() errors,
+ * as the smbfs mount would then have no way to recover.
+ */
+static void send_fs_socket(char *the_service, char *mount_point, struct cli_state *c)
+{
+	int fd, closed = 0, res = 1;
+	pid_t parentpid = getppid();
+	struct smb_conn_opt conn_options;
+
+	memset(&conn_options, 0, sizeof(conn_options));
+
+	while (1) {
+		if ((fd = open(mount_point, O_RDONLY)) < 0) {
+			DEBUG(0,("mount.smbfs[%d]: can't open %s\n",
+				 sys_getpid(), mount_point));
+			break;
+		}
+
+		conn_options.fd = c->fd;
+		conn_options.protocol = c->protocol;
+		conn_options.case_handling = SMB_CASE_DEFAULT;
+		conn_options.max_xmit = c->max_xmit;
+		conn_options.server_uid = c->vuid;
+		conn_options.tid = c->cnum;
+		conn_options.secmode = c->sec_mode;
+		conn_options.rawmode = 0;
+		conn_options.sesskey = c->sesskey;
+		conn_options.maxraw = 0;
+		conn_options.capabilities = c->capabilities;
+		conn_options.serverzone = c->serverzone/60;
+
+		res = ioctl(fd, SMB_IOC_NEWCONN, &conn_options);
+		if (res != 0) {
+			DEBUG(0,("mount.smbfs[%d]: ioctl failed, res=%d\n",
+				 sys_getpid(), res));
+			close(fd);
+			break;
+		}
+
+		if (parentpid) {
+			/* Ok...  We are going to kill the parent.  Now
+				is the time to break the process group... */
+			setsid();
+			/* Send a signal to the parent to terminate */
+			kill(parentpid, SIGTERM);
+			parentpid = 0;
+		}
+
+		close(fd);
+
+		/* This looks wierd but we are only closing the userspace
+		   side, the connection has already been passed to smbfs and 
+		   it has increased the usage count on the socket.
+
+		   If we don't do this we will "leak" sockets and memory on
+		   each reconnection we have to make. */
+		c->smb_rw_error = DO_NOT_DO_TDIS;
+		cli_shutdown(c);
+		c = NULL;
+
+		if (!closed) {
+			/* close the name cache so that close_our_files() doesn't steal its FD */
+			namecache_shutdown();
+
+			/* redirect stdout & stderr since we can't know that
+			   the library functions we use are using DEBUG. */
+			if ( (fd = open("/dev/null", O_WRONLY)) < 0)
+				DEBUG(2,("mount.smbfs: can't open /dev/null\n"));
+			close_our_files(fd);
+			if (fd >= 0) {
+				dup2(fd, STDOUT_FILENO);
+				dup2(fd, STDERR_FILENO);
+				close(fd);
+			}
+
+			/* here we are no longer interactive */
+			set_remote_machine_name("smbmount", False);	/* sneaky ... */
+			setup_logging("mount.smbfs", False);
+			reopen_logs();
+			DEBUG(0, ("mount.smbfs: entering daemon mode for service %s, pid=%d\n", the_service, sys_getpid()));
+
+			closed = 1;
+		}
+
+		/* Wait for a signal from smbfs ... but don't continue
+                   until we actually get a new connection. */
+		while (!c) {
+			CatchSignal(SIGUSR1, &usr1_handler);
+			pause();
+			DEBUG(2,("mount.smbfs[%d]: got signal, getting new socket\n", sys_getpid()));
+			c = do_connection(the_service);
+		}
+	}
+
+	smb_umount(mount_point);
+	DEBUG(2,("mount.smbfs[%d]: exit\n", sys_getpid()));
+	exit(1);
+}
+
+
+/**
+ * Mount a smbfs
+ **/
+static void init_mount(void)
+{
+	char mount_point[PATH_MAX+1];
+	pstring tmp;
+	pstring svc2;
+	struct cli_state *c;
+	char *args[20];
+	int i, status;
+
+	if (realpath(mpoint, mount_point) == NULL) {
+		fprintf(stderr, "Could not resolve mount point %s\n", mpoint);
+		return;
+	}
+
+
+	c = do_connection(service);
+	if (!c) {
+		fprintf(stderr,"SMB connection failed\n");
+		exit(1);
+	}
+
+	/*
+		Set up to return as a daemon child and wait in the parent
+		until the child say it's ready...
+	*/
+	daemonize();
+
+	pstrcpy(svc2, service);
+	string_replace(svc2, '\\','/');
+	string_replace(svc2, ' ','_');
+
+	memset(args, 0, sizeof(args[0])*20);
+
+	i=0;
+	args[i++] = "smbmnt";
+
+	args[i++] = mount_point;
+	args[i++] = "-s";
+	args[i++] = svc2;
+
+	if (mount_ro) {
+		args[i++] = "-r";
+	}
+	if (mount_uid) {
+		slprintf(tmp, sizeof(tmp)-1, "%d", mount_uid);
+		args[i++] = "-u";
+		args[i++] = smb_xstrdup(tmp);
+	}
+	if (mount_gid) {
+		slprintf(tmp, sizeof(tmp)-1, "%d", mount_gid);
+		args[i++] = "-g";
+		args[i++] = smb_xstrdup(tmp);
+	}
+	if (mount_fmask) {
+		slprintf(tmp, sizeof(tmp)-1, "0%o", mount_fmask);
+		args[i++] = "-f";
+		args[i++] = smb_xstrdup(tmp);
+	}
+	if (mount_dmask) {
+		slprintf(tmp, sizeof(tmp)-1, "0%o", mount_dmask);
+		args[i++] = "-d";
+		args[i++] = smb_xstrdup(tmp);
+	}
+	if (options) {
+		args[i++] = "-o";
+		args[i++] = options;
+	}
+
+	if (sys_fork() == 0) {
+		char *smbmnt_path;
+
+		asprintf(&smbmnt_path, "%s/smbmnt", dyn_BINDIR);
+		
+		if (file_exist(smbmnt_path, NULL)) {
+			execv(smbmnt_path, args);
+			fprintf(stderr,
+				"smbfs/init_mount: execv of %s failed. Error was %s.",
+				smbmnt_path, strerror(errno));
+		} else {
+			execvp("smbmnt", args);
+			fprintf(stderr,
+				"smbfs/init_mount: execv of %s failed. Error was %s.",
+				"smbmnt", strerror(errno));
+		}
+		free(smbmnt_path);
+		exit(1);
+	}
+
+	if (waitpid(-1, &status, 0) == -1) {
+		fprintf(stderr,"waitpid failed: Error was %s", strerror(errno) );
+		/* FIXME: do some proper error handling */
+		exit(1);
+	}
+
+	if (WIFEXITED(status) && WEXITSTATUS(status) != 0) {
+		fprintf(stderr,"smbmnt failed: %d\n", WEXITSTATUS(status));
+		/* FIXME: do some proper error handling */
+		exit(1);
+	} else if (WIFSIGNALED(status)) {
+		fprintf(stderr, "smbmnt killed by signal %d\n", WTERMSIG(status));
+		exit(1);
+	}
+
+	/* Ok...  This is the rubicon for that mount point...  At any point
+	   after this, if the connections fail and can not be reconstructed
+	   for any reason, we will have to unmount the mount point.  There
+	   is no exit from the next call...
+	*/
+	send_fs_socket(service, mount_point, c);
+}
+
+
+/****************************************************************************
+get a password from a a file or file descriptor
+exit on failure (from smbclient, move to libsmb or shared .c file?)
+****************************************************************************/
+static void get_password_file(void)
+{
+	int fd = -1;
+	char *p;
+	BOOL close_it = False;
+	pstring spec;
+	char pass[128];
+
+	if ((p = getenv("PASSWD_FD")) != NULL) {
+		pstrcpy(spec, "descriptor ");
+		pstrcat(spec, p);
+		sscanf(p, "%d", &fd);
+		close_it = False;
+	} else if ((p = getenv("PASSWD_FILE")) != NULL) {
+		fd = sys_open(p, O_RDONLY, 0);
+		pstrcpy(spec, p);
+		if (fd < 0) {
+			fprintf(stderr, "Error opening PASSWD_FILE %s: %s\n",
+				spec, strerror(errno));
+			exit(1);
+		}
+		close_it = True;
+	}
+
+	for(p = pass, *p = '\0'; /* ensure that pass is null-terminated */
+	    p && p - pass < sizeof(pass);) {
+		switch (read(fd, p, 1)) {
+		case 1:
+			if (*p != '\n' && *p != '\0') {
+				*++p = '\0'; /* advance p, and null-terminate pass */
+				break;
+			}
+		case 0:
+			if (p - pass) {
+				*p = '\0'; /* null-terminate it, just in case... */
+				p = NULL; /* then force the loop condition to become false */
+				break;
+			} else {
+				fprintf(stderr, "Error reading password from file %s: %s\n",
+					spec, "empty password\n");
+				exit(1);
+			}
+
+		default:
+			fprintf(stderr, "Error reading password from file %s: %s\n",
+				spec, strerror(errno));
+			exit(1);
+		}
+	}
+	pstrcpy(password, pass);
+	if (close_it)
+		close(fd);
+}
+
+/****************************************************************************
+get username and password from a credentials file
+exit on failure (from smbclient, move to libsmb or shared .c file?)
+****************************************************************************/
+static void read_credentials_file(char *filename)
+{
+	FILE *auth;
+	fstring buf;
+	uint16 len = 0;
+	char *ptr, *val, *param;
+
+	if ((auth=sys_fopen(filename, "r")) == NULL)
+	{
+		/* fail if we can't open the credentials file */
+		DEBUG(0,("ERROR: Unable to open credentials file!\n"));
+		exit (-1);
+	}
+
+	while (!feof(auth))
+	{
+		/* get a line from the file */
+		if (!fgets (buf, sizeof(buf), auth))
+			continue;
+		len = strlen(buf);
+
+		if ((len) && (buf[len-1]=='\n'))
+		{
+			buf[len-1] = '\0';
+			len--;
+		}
+		if (len == 0)
+			continue;
+
+		/* break up the line into parameter & value.
+		   will need to eat a little whitespace possibly */
+		param = buf;
+		if (!(ptr = strchr (buf, '=')))
+			continue;
+		val = ptr+1;
+		*ptr = '\0';
+
+		/* eat leading white space */
+		while ((*val!='\0') && ((*val==' ') || (*val=='\t')))
+			val++;
+
+		if (strwicmp("password", param) == 0)
+		{
+			pstrcpy(password, val);
+			got_pass = True;
+		}
+		else if (strwicmp("username", param) == 0) {
+			pstrcpy(username, val);
+		}
+
+		memset(buf, 0, sizeof(buf));
+	}
+	fclose(auth);
+}
+
+
+/****************************************************************************
+usage on the program
+****************************************************************************/
+static void usage(void)
+{
+	printf("Usage: mount.smbfs service mountpoint [-o options,...]\n");
+
+	printf("Version %s\n\n",SAMBA_VERSION_STRING);
+
+	printf("Please be aware that smbfs is deprecated in favor of "
+	       "cifs\n\n");
+
+	printf(
+"Options:\n\
+      username=<arg>                  SMB username\n\
+      password=<arg>                  SMB password\n\
+      credentials=<filename>          file with username/password\n\
+      krb                             use kerberos (active directory)\n\
+      netbiosname=<arg>               source NetBIOS name\n\
+      uid=<arg>                       mount uid or username\n\
+      gid=<arg>                       mount gid or groupname\n\
+      port=<arg>                      remote SMB port number\n\
+      fmask=<arg>                     file umask\n\
+      dmask=<arg>                     directory umask\n\
+      debug=<arg>                     debug level\n\
+      ip=<arg>                        destination host or IP address\n\
+      workgroup=<arg>                 workgroup on destination\n\
+      sockopt=<arg>                   TCP socket options\n\
+      scope=<arg>                     NetBIOS scope\n\
+      iocharset=<arg>                 Linux charset (iso8859-1, utf8)\n\
+      codepage=<arg>                  server codepage (cp850)\n\
+      unicode                         use unicode when communicating with server\n\
+      lfs                             large file system support\n\
+      ttl=<arg>                       dircache time to live\n\
+      guest                           don't prompt for a password\n\
+      ro                              mount read-only\n\
+      rw                              mount read-write\n\
+\n\
+This command is designed to be run from within /bin/mount by giving\n\
+the option '-t smbfs'. For example:\n\
+  mount -t smbfs -o username=tridge,password=foobar //fjall/test /data/test\n\
+");
+}
+
+
+/****************************************************************************
+  Argument parsing for mount.smbfs interface
+  mount will call us like this:
+    mount.smbfs device mountpoint -o <options>
+  
+  <options> is never empty, containing at least rw or ro
+ ****************************************************************************/
+static void parse_mount_smb(int argc, char **argv)
+{
+	int opt;
+	char *opts;
+	char *opteq;
+	int val;
+	char *p;
+
+	/* FIXME: This function can silently fail if the arguments are
+	 * not in the expected order.
+
+	> The arguments syntax of smbmount 2.2.3a (smbfs of Debian stable)
+	> requires that one gives "-o" before further options like username=...
+	> . Without -o, the username=.. setting is *silently* ignored. I've
+	> spent about an hour trying to find out why I couldn't log in now..
+
+	*/
+
+
+	if (argc < 2 || argv[1][0] == '-') {
+		usage();
+		exit(1);
+	}
+	
+	pstrcpy(service, argv[1]);
+	pstrcpy(mpoint, argv[2]);
+
+	/* Convert any '/' characters in the service name to
+	   '\' characters */
+	string_replace(service, '/','\\');
+	argc -= 2;
+	argv += 2;
+
+	opt = getopt(argc, argv, "o:");
+	if(opt != 'o') {
+		return;
+	}
+
+	options[0] = 0;
+	p = options;
+
+	/*
+	 * option parsing from nfsmount.c (util-linux-2.9u)
+	 */
+        for (opts = strtok(optarg, ","); opts; opts = strtok(NULL, ",")) {
+		DEBUG(3, ("opts: %s\n", opts));
+                if ((opteq = strchr_m(opts, '='))) {
+                        val = atoi(opteq + 1);
+                        *opteq = '\0';
+
+                        if (!strcmp(opts, "username") || 
+			    !strcmp(opts, "logon")) {
+				char *lp;
+				got_user = True;
+				pstrcpy(username,opteq+1);
+				if ((lp=strchr_m(username,'%'))) {
+					*lp = 0;
+					pstrcpy(password,lp+1);
+					got_pass = True;
+					memset(strchr_m(opteq+1,'%')+1,'X',strlen(password));
+				}
+				if ((lp=strchr_m(username,'/'))) {
+					*lp = 0;
+					pstrcpy(workgroup,lp+1);
+				}
+			} else if(!strcmp(opts, "passwd") ||
+				  !strcmp(opts, "password")) {
+				pstrcpy(password,opteq+1);
+				got_pass = True;
+				memset(opteq+1,'X',strlen(password));
+			} else if(!strcmp(opts, "credentials")) {
+				pstrcpy(credentials,opteq+1);
+			} else if(!strcmp(opts, "netbiosname")) {
+				pstrcpy(my_netbios_name,opteq+1);
+			} else if(!strcmp(opts, "uid")) {
+				mount_uid = nametouid(opteq+1);
+			} else if(!strcmp(opts, "gid")) {
+				mount_gid = nametogid(opteq+1);
+			} else if(!strcmp(opts, "port")) {
+				smb_port = val;
+			} else if(!strcmp(opts, "fmask")) {
+				mount_fmask = strtol(opteq+1, NULL, 8);
+			} else if(!strcmp(opts, "dmask")) {
+				mount_dmask = strtol(opteq+1, NULL, 8);
+			} else if(!strcmp(opts, "debug")) {
+				DEBUGLEVEL = val;
+			} else if(!strcmp(opts, "ip")) {
+				dest_ip = *interpret_addr2(opteq+1);
+				if (is_zero_ip(dest_ip)) {
+					fprintf(stderr,"Can't resolve address %s\n", opteq+1);
+					exit(1);
+				}
+				have_ip = True;
+			} else if(!strcmp(opts, "workgroup")) {
+				pstrcpy(workgroup,opteq+1);
+			} else if(!strcmp(opts, "sockopt")) {
+				pstrcpy(user_socket_options,opteq+1);
+			} else if(!strcmp(opts, "scope")) {
+				set_global_scope(opteq+1);
+			} else {
+				slprintf(p, sizeof(pstring) - (p - options) - 1, "%s=%s,", opts, opteq+1);
+				p += strlen(p);
+			}
+		} else {
+			val = 1;
+			if(!strcmp(opts, "nocaps")) {
+				fprintf(stderr, "Unhandled option: %s\n", opteq+1);
+				exit(1);
+			} else if(!strcmp(opts, "guest")) {
+				*password = '\0';
+				got_pass = True;
+			} else if(!strcmp(opts, "krb")) {
+#ifdef HAVE_KRB5
+
+				use_kerberos = True;
+				if(!status32_smbfs)
+					fprintf(stderr, "Warning: kerberos support will only work for samba servers\n");
+#else
+				fprintf(stderr,"No kerberos support compiled in\n");
+				exit(1);
+#endif
+			} else if(!strcmp(opts, "rw")) {
+				mount_ro = 0;
+			} else if(!strcmp(opts, "ro")) {
+				mount_ro = 1;
+			} else if(!strcmp(opts, "unicode")) {
+				smbfs_has_unicode = True;
+			} else if(!strcmp(opts, "lfs")) {
+				smbfs_has_lfs = True;
+			} else {
+				strncpy(p, opts, sizeof(pstring) - (p - options) - 1);
+				p += strlen(opts);
+				*p++ = ',';
+				*p = 0;
+			}
+		}
+	}
+
+	if (!*service) {
+		usage();
+		exit(1);
+	}
+
+	if (p != options) {
+		*(p-1) = 0;	/* remove trailing , */
+		DEBUG(3,("passthrough options '%s'\n", options));
+	}
+}
+
+/****************************************************************************
+  main program
+****************************************************************************/
+ int main(int argc,char *argv[])
+{
+	char *p;
+
+	DEBUGLEVEL = 1;
+
+	load_case_tables();
+
+	/* here we are interactive, even if run from autofs */
+	setup_logging("mount.smbfs",True);
+
+#if 0 /* JRA - Urban says not needed ? */
+	/* CLI_FORCE_ASCII=false makes smbmount negotiate unicode. The default
+	   is to not announce any unicode capabilities as current smbfs does
+	   not support it. */
+	p = getenv("CLI_FORCE_ASCII");
+	if (p && !strcmp(p, "false"))
+		unsetenv("CLI_FORCE_ASCII");
+	else
+		setenv("CLI_FORCE_ASCII", "true", 1);
+#endif
+
+	in_client = True;   /* Make sure that we tell lp_load we are */
+
+	if (getenv("USER")) {
+		pstrcpy(username,getenv("USER"));
+
+		if ((p=strchr_m(username,'%'))) {
+			*p = 0;
+			pstrcpy(password,p+1);
+			got_pass = True;
+			memset(strchr_m(getenv("USER"),'%')+1,'X',strlen(password));
+		}
+		strupper_m(username);
+	}
+
+	if (getenv("PASSWD")) {
+		pstrcpy(password,getenv("PASSWD"));
+		got_pass = True;
+	}
+
+	if (getenv("PASSWD_FD") || getenv("PASSWD_FILE")) {
+		get_password_file();
+		got_pass = True;
+	}
+
+	if (*username == 0 && getenv("LOGNAME")) {
+		pstrcpy(username,getenv("LOGNAME"));
+	}
+
+	if (!lp_load(dyn_CONFIGFILE,True,False,False,True)) {
+		fprintf(stderr, "Can't load %s - run testparm to debug it\n", 
+			dyn_CONFIGFILE);
+	}
+
+	parse_mount_smb(argc, argv);
+
+	if (use_kerberos && !got_user) {
+		got_pass = True;
+	}
+
+	if (*credentials != 0) {
+		read_credentials_file(credentials);
+	}
+
+	DEBUG(3,("mount.smbfs started (version %s)\n", SAMBA_VERSION_STRING));
+
+	if (*workgroup == 0) {
+		pstrcpy(workgroup,lp_workgroup());
+	}
+
+	load_interfaces();
+	if (!*my_netbios_name) {
+		pstrcpy(my_netbios_name, myhostname());
+	}
+	strupper_m(my_netbios_name);
+
+	init_mount();
+	return 0;
+}

Modified: branches/samba/upstream/source/client/smbspool.c
===================================================================
--- branches/samba/upstream/source/client/smbspool.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/client/smbspool.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,47 +1,34 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    SMB backend for the Common UNIX Printing System ("CUPS")
-
-   Copyright (C) Michael R Sweet            1999
-   Copyright (C) Andrew Tridgell	    1994-1998
-   Copyright (C) Andrew Bartlett	    2002
-   Copyright (C) Rodrigo Fernandez-Vizarra  2005
-   Copyright (C) James Peach		    2008
-
+   Copyright 1999 by Easy Software Products
+   Copyright Andrew Tridgell 1994-1998
+   Copyright Andrew Bartlett 2002
+   Copyright Rodrigo Fernandez-Vizarra 2005 
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
-/*
- * Starting with CUPS 1.3, Kerberos support is provided by cupsd including
- * the forwarding of user credentials via the authenticated session between
- * user and server and the KRB5CCNAME environment variable which will point
- * to a temporary file or an in-memory representation depending on the version
- * of Kerberos you use.  As a result, all of the ticket code that used to
- * live here has been removed, and we depend on the user session (if you
- * run smbspool by hand) or cupsd to provide the necessary Kerberos info.
- *
- * Also, the AUTH_USERNAME and AUTH_PASSWORD environment variables provide
- * for per-job authentication for non-Kerberized printing.  We use those
- * if there is no username and password specified in the device URI.
- *
- * Finally, if we have an authentication failure we return exit code 2
- * which tells CUPS to hold the job for authentication and bug the user
- * to get the necessary credentials.
- */
-
+#define TICKET_CC_DIR            "/tmp"
+#define CC_PREFIX                "krb5cc_" /* prefix of the ticket cache */
+#define CC_MAX_FILE_LEN          24   
+#define CC_MAX_FILE_PATH_LEN     (sizeof(TICKET_CC_DIR)-1)+ CC_MAX_FILE_LEN+2   
+#define OVERWRITE                1   
+#define KRB5CCNAME               "KRB5CCNAME"
 #define MAX_RETRY_CONNECT        3
 
 
@@ -49,495 +36,503 @@
  * Globals...
  */
 
+extern BOOL		in_client;	/* Boolean for client library */
 
 
 /*
  * Local functions...
  */
 
-static int      get_exit_code(struct cli_state * cli, NTSTATUS nt_status);
-static void     list_devices(void);
-static struct cli_state *smb_complete_connection(const char *, const char *,
-	int, const char *, const char *, const char *, const char *, int, bool *need_auth);
-static struct cli_state *smb_connect(const char *, const char *, int, const
-	char *, const char *, const char *, const char *, bool *need_auth);
-static int      smb_print(struct cli_state *, char *, FILE *);
-static char    *uri_unescape_alloc(const char *);
-#if 0
-static bool     smb_encrypt;
-#endif
+static void		list_devices(void);
+static struct cli_state *smb_complete_connection(const char *, const char *,int , const char *, const char *, const char *, const char *, int);
+static struct cli_state	*smb_connect(const char *, const char *, int, const char *, const char *, const char *, const char *);
+static int		smb_print(struct cli_state *, char *, FILE *);
+static char *		uri_unescape_alloc(const char *);
 
+
 /*
  * 'main()' - Main entry for SMB backend.
  */
 
-int				/* O - Exit status */
-main(int argc,			/* I - Number of command-line arguments */
-     char *argv[])
-{				/* I - Command-line arguments */
-	int             i;	/* Looping var */
-	int             copies;	/* Number of copies */
-	int             port;	/* Port number */
-	char            uri[1024],	/* URI */
-	               *sep,	/* Pointer to separator */
-	               *tmp, *tmp2,	/* Temp pointers to do escaping */
-	               *password;	/* Password */
-	char           *username,	/* Username */
-	               *server,	/* Server name */
-	               *printer;/* Printer name */
-	const char     *workgroup;	/* Workgroup */
-	FILE           *fp;	/* File to print */
-	int             status = 1;	/* Status of LPD job */
-	struct cli_state *cli;	/* SMB interface */
-	char            null_str[1];
-	int             tries = 0;
-	bool		need_auth = true;
-	const char     *dev_uri;
-	TALLOC_CTX     *frame = talloc_stackframe();
+ int				/* O - Exit status */
+ main(int  argc,			/* I - Number of command-line arguments */
+     char *argv[])		/* I - Command-line arguments */
+{
+  int		i;		/* Looping var */
+  int		copies;		/* Number of copies */
+  int 		port;		/* Port number */
+  char		uri[1024],	/* URI */
+		*sep,		/* Pointer to separator */
+		*tmp, *tmp2,	/* Temp pointers to do escaping */
+		*password;	/* Password */
+  char		*username,	/* Username */
+		*server,	/* Server name */
+		*printer;	/* Printer name */
+  const char	*workgroup;	/* Workgroup */
+  FILE		*fp;		/* File to print */
+  int		status=0;		/* Status of LPD job */
+  struct cli_state *cli;	/* SMB interface */
+  char null_str[1];
+  int tries = 0;
+  const char *dev_uri;
 
-	null_str[0] = '\0';
+  null_str[0] = '\0';
 
-	/*
-	 * we expect the URI in argv[0]. Detect the case where it is in
-	 * argv[1] and cope
-	 */
-	if (argc > 2 && strncmp(argv[0], "smb://", 6) &&
-	    strncmp(argv[1], "smb://", 6) == 0) {
-		argv++;
-		argc--;
-	}
+  /* we expect the URI in argv[0]. Detect the case where it is in argv[1] and cope */
+  if (argc > 2 && strncmp(argv[0],"smb://", 6) && !strncmp(argv[1],"smb://", 6)) {
+	  argv++;
+	  argc--;
+  }
 
-	if (argc == 1) {
-		/*
-	         * NEW!  In CUPS 1.1 the backends are run with no arguments
-		 * to list the available devices.  These can be devices
-		 * served by this backend or any other backends (i.e. you
-		 * can have an SNMP backend that is only used to enumerate
-		 * the available network printers... :)
-	         */
+  if (argc == 1)
+  {
+   /*
+    * NEW!  In CUPS 1.1 the backends are run with no arguments to list the
+    *       available devices.  These can be devices served by this backend
+    *       or any other backends (i.e. you can have an SNMP backend that
+    *       is only used to enumerate the available network printers... :)
+    */
 
-		list_devices();
-		status = 0;
-		goto done;
-	}
+    list_devices();
+    return (0);
+  }
 
-	if (argc < 6 || argc > 7) {
-		fprintf(stderr,
-"Usage: %s [DEVICE_URI] job-id user title copies options [file]\n"
-"       The DEVICE_URI environment variable can also contain the\n"
-"       destination printer:\n"
-"\n"
-"           smb://[username:password@][workgroup/]server[:port]/printer\n",
-			argv[0]);
-		goto done;
-	}
+  if (argc < 6 || argc > 7)
+  {
+    fprintf(stderr, "Usage: %s [DEVICE_URI] job-id user title copies options [file]\n",
+            argv[0]);
+    fputs("       The DEVICE_URI environment variable can also contain the\n", stderr);
+    fputs("       destination printer:\n", stderr);
+    fputs("\n", stderr);
+    fputs("           smb://[username:password@][workgroup/]server[:port]/printer\n", stderr);
+    return (1);
+  }
 
-	/*
-         * If we have 7 arguments, print the file named on the command-line.
-         * Otherwise, print data from stdin...
-         */
+ /*
+  * If we have 7 arguments, print the file named on the command-line.
+  * Otherwise, print data from stdin...
+  */
 
-	if (argc == 6) {
-		/*
-	         * Print from Copy stdin to a temporary file...
-	         */
 
-		fp = stdin;
-		copies = 1;
-	} else if ((fp = fopen(argv[6], "rb")) == NULL) {
-		perror("ERROR: Unable to open print file");
-		goto done;
-	} else {
-		copies = atoi(argv[4]);
-	}
+  if (argc == 6)
+  {
+   /*
+    * Print from Copy stdin to a temporary file...
+    */
 
-	/*
-         * Find the URI...
-         */
+    fp     = stdin;
+    copies = 1;
+  }
+  else if ((fp = fopen(argv[6], "rb")) == NULL)
+  {
+    perror("ERROR: Unable to open print file");
+    return (1);
+  }
+  else
+    copies = atoi(argv[4]);
 
-	dev_uri = getenv("DEVICE_URI");
-	if (dev_uri) {
-		strncpy(uri, dev_uri, sizeof(uri) - 1);
-	} else if (strncmp(argv[0], "smb://", 6) == 0) {
-		strncpy(uri, argv[0], sizeof(uri) - 1);
-	} else {
-		fputs("ERROR: No device URI found in DEVICE_URI environment variable or argv[0] !\n", stderr);
-		goto done;
-	}
+ /*
+  * Find the URI...
+  */
 
-	uri[sizeof(uri) - 1] = '\0';
+  dev_uri = getenv("DEVICE_URI");
+  if (dev_uri)
+    strncpy(uri, dev_uri, sizeof(uri) - 1);
+  else if (strncmp(argv[0], "smb://", 6) == 0)
+    strncpy(uri, argv[0], sizeof(uri) - 1);
+  else
+  {
+    fputs("ERROR: No device URI found in DEVICE_URI environment variable or argv[0] !\n", stderr);
+    return (1);
+  }
 
-	/*
-         * Extract the destination from the URI...
-         */
+  uri[sizeof(uri) - 1] = '\0';
 
-	if ((sep = strrchr_m(uri, '@')) != NULL) {
-		tmp = uri + 6;
-		*sep++ = '\0';
+ /*
+  * Extract the destination from the URI...
+  */
 
-		/* username is in tmp */
+  if ((sep = strrchr_m(uri, '@')) != NULL)
+  {
+    tmp = uri + 6;
+    *sep++ = '\0';
 
-		server = sep;
+    /* username is in tmp */
 
-		/*
-	         * Extract password as needed...
-	         */
+    server = sep;
 
-		if ((tmp2 = strchr_m(tmp, ':')) != NULL) {
-			*tmp2++ = '\0';
-			password = uri_unescape_alloc(tmp2);
-		} else {
-			password = null_str;
-		}
-		username = uri_unescape_alloc(tmp);
-	} else {
-		if ((username = getenv("AUTH_USERNAME")) == NULL) {
-			username = null_str;
-		}
+   /*
+    * Extract password as needed...
+    */
 
-		if ((password = getenv("AUTH_PASSWORD")) == NULL) {
-			password = null_str;
-		}
+    if ((tmp2 = strchr_m(tmp, ':')) != NULL) {
+      *tmp2++ = '\0';
+      password = uri_unescape_alloc(tmp2);
+    } else {
+      password = null_str;
+    }
+    username = uri_unescape_alloc(tmp);
+  }
+  else
+  {
+    username = null_str;
+    password = null_str;
+    server   = uri + 6;
+  }
 
-		server = uri + 6;
-	}
+  tmp = server;
 
-	tmp = server;
+  if ((sep = strchr_m(tmp, '/')) == NULL)
+  {
+    fputs("ERROR: Bad URI - need printer name!\n", stderr);
+    return (1);
+  }
 
-	if ((sep = strchr_m(tmp, '/')) == NULL) {
-		fputs("ERROR: Bad URI - need printer name!\n", stderr);
-		goto done;
-	}
+  *sep++ = '\0';
+  tmp2 = sep;
 
-	*sep++ = '\0';
-	tmp2 = sep;
+  if ((sep = strchr_m(tmp2, '/')) != NULL)
+  {
+   /*
+    * Convert to smb://[username:password@]workgroup/server/printer...
+    */
 
-	if ((sep = strchr_m(tmp2, '/')) != NULL) {
-		/*
-	         * Convert to smb://[username:password@]workgroup/server/printer...
-	         */
+    *sep++ = '\0';
 
-		*sep++ = '\0';
+    workgroup = uri_unescape_alloc(tmp);
+    server    = uri_unescape_alloc(tmp2);
+    printer   = uri_unescape_alloc(sep);
+  }
+  else {
+    workgroup = NULL;
+    server = uri_unescape_alloc(tmp);
+    printer = uri_unescape_alloc(tmp2);
+  }
+  
+  if ((sep = strrchr_m(server, ':')) != NULL)
+  {
+    *sep++ = '\0';
 
-		workgroup = uri_unescape_alloc(tmp);
-		server = uri_unescape_alloc(tmp2);
-		printer = uri_unescape_alloc(sep);
-	} else {
-		workgroup = NULL;
-		server = uri_unescape_alloc(tmp);
-		printer = uri_unescape_alloc(tmp2);
-	}
+    port=atoi(sep);
+  }
+  else 
+  	port=0;
+	
+ 
+ /*
+  * Setup the SAMBA server state...
+  */
 
-	if ((sep = strrchr_m(server, ':')) != NULL) {
-		*sep++ = '\0';
+  setup_logging("smbspool", True);
 
-		port = atoi(sep);
-	} else {
-		port = 445;
-	}
+  in_client = True;   /* Make sure that we tell lp_load we are */
 
-	/*
-         * Setup the SAMBA server state...
-         */
+  load_case_tables();
 
-	setup_logging("smbspool", True);
+  if (!lp_load(dyn_CONFIGFILE, True, False, False, True))
+  {
+    fprintf(stderr, "ERROR: Can't load %s - run testparm to debug it\n", dyn_CONFIGFILE);
+    return (1);
+  }
 
-	lp_set_in_client(True);	/* Make sure that we tell lp_load we are */
+  if (workgroup == NULL)
+    workgroup = lp_workgroup();
 
-	load_case_tables();
+  load_interfaces();
 
-	if (!lp_load(get_dyn_CONFIGFILE(), True, False, False, True)) {
-		fprintf(stderr, "ERROR: Can't load %s - run testparm to debug it\n", get_dyn_CONFIGFILE());
-		goto done;
-	}
+  do
+  {
+    if ((cli = smb_connect(workgroup, server, port, printer, username, password, argv[2])) == NULL)
+    {
+      if (getenv("CLASS") == NULL)
+      {
+        fprintf(stderr, "ERROR: Unable to connect to CIFS host, will retry in 60 seconds...\n");
+        sleep (60); /* should just waiting and retrying fix authentication  ??? */
+        tries++;
+      }
+      else
+      {
+        fprintf(stderr, "ERROR: Unable to connect to CIFS host, trying next printer...\n");
+        return (1);
+      }
+    }
+  }
+  while ((cli == NULL) && (tries < MAX_RETRY_CONNECT));
 
-	if (workgroup == NULL) {
-		workgroup = lp_workgroup();
-	}
+  if (cli == NULL) {
+        fprintf(stderr, "ERROR: Unable to connect to CIFS host after (tried %d times)\n", tries);
+        return (1);
+  }
 
-	load_interfaces();
+ /*
+  * Now that we are connected to the server, ignore SIGTERM so that we
+  * can finish out any page data the driver sends (e.g. to eject the
+  * current page...  Only ignore SIGTERM if we are printing data from
+  * stdin (otherwise you can't cancel raw jobs...)
+  */
 
-	do {
-		cli = smb_connect(workgroup, server, port, printer,
-			username, password, argv[2], &need_auth);
-		if (cli == NULL) {
-			if (need_auth) {
-				exit(2);
-			} else if (getenv("CLASS") == NULL) {
-				fprintf(stderr, "ERROR: Unable to connect to CIFS host, will retry in 60 seconds...\n");
-				sleep(60);
-				tries++;
-			} else {
-				fprintf(stderr, "ERROR: Unable to connect to CIFS host, trying next printer...\n");
-				goto done;
-			}
-		}
-	} while ((cli == NULL) && (tries < MAX_RETRY_CONNECT));
+  if (argc < 7)
+    CatchSignal(SIGTERM, SIG_IGN);
 
-	if (cli == NULL) {
-		fprintf(stderr, "ERROR: Unable to connect to CIFS host after (tried %d times)\n", tries);
-		goto done;
-	}
+ /*
+  * Queue the job...
+  */
 
-	/*
-         * Now that we are connected to the server, ignore SIGTERM so that we
-         * can finish out any page data the driver sends (e.g. to eject the
-         * current page...  Only ignore SIGTERM if we are printing data from
-         * stdin (otherwise you can't cancel raw jobs...)
-         */
+  for (i = 0; i < copies; i ++)
+    if ((status = smb_print(cli, argv[3] /* title */, fp)) != 0)
+      break;
 
-	if (argc < 7) {
-		CatchSignal(SIGTERM, SIG_IGN);
-	}
+  cli_shutdown(cli);
 
-	/*
-         * Queue the job...
-         */
+ /*
+  * Return the queue status...
+  */
 
-	for (i = 0; i < copies; i++) {
-		status = smb_print(cli, argv[3] /* title */ , fp);
-		if (status != 0) {
-			break;
-		}
-	}
-
-	cli_shutdown(cli);
-
-	/*
-         * Return the queue status...
-         */
-
-done:
-
-	TALLOC_FREE(frame);
-	return (status);
+  return (status);
 }
 
 
 /*
- * 'get_exit_code()' - Get the backend exit code based on the current error.
- */
-
-static int
-get_exit_code(struct cli_state * cli,
-	      NTSTATUS nt_status)
-{
-	int i;
-
-	/* List of NTSTATUS errors that are considered
-	 * authentication errors
-	 */
-	static const NTSTATUS auth_errors[] =
-	{
-		NT_STATUS_ACCESS_DENIED, NT_STATUS_ACCESS_VIOLATION,
-		NT_STATUS_SHARING_VIOLATION, NT_STATUS_PRIVILEGE_NOT_HELD,
-		NT_STATUS_INVALID_ACCOUNT_NAME, NT_STATUS_NO_SUCH_USER,
-		NT_STATUS_WRONG_PASSWORD, NT_STATUS_LOGON_FAILURE,
-		NT_STATUS_ACCOUNT_RESTRICTION, NT_STATUS_INVALID_LOGON_HOURS,
-		NT_STATUS_PASSWORD_EXPIRED, NT_STATUS_ACCOUNT_DISABLED
-	};
-
-
-	fprintf(stderr, "DEBUG: get_exit_code(cli=%p, nt_status=%x)\n",
-		cli, NT_STATUS_V(nt_status));
-
-	for (i = 0; i < ARRAY_SIZE(auth_errors); i++) {
-		if (!NT_STATUS_EQUAL(nt_status, auth_errors[i])) {
-			continue;
-		}
-
-		if (cli) {
-			if (cli->use_kerberos || (cli->capabilities & CAP_EXTENDED_SECURITY))
-				fputs("ATTR: auth-info-required=negotiate\n", stderr);
-			else
-				fputs("ATTR: auth-info-required=username,password\n", stderr);
-		}
-
-		/*
-		 * 2 = authentication required...
-		 */
-
-		return (2);
-
-	}
-
-	/*
-         * 1 = fail
-         */
-
-	return (1);
-}
-
-
-/*
  * 'list_devices()' - List the available printers seen on the network...
  */
 
 static void
 list_devices(void)
 {
-	/*
-         * Eventually, search the local workgroup for available hosts and printers.
-         */
+ /*
+  * Eventually, search the local workgroup for available hosts and printers.
+  */
 
-	puts("network smb \"Unknown\" \"Windows Printer via SAMBA\"");
+  puts("network smb \"Unknown\" \"Windows Printer via SAMBA\"");
 }
 
 
-static struct cli_state *
-smb_complete_connection(const char *myname,
-			const char *server,
-			int port,
-			const char *username,
-			const char *password,
-			const char *workgroup,
-			const char *share,
-			int flags,
-			bool *need_auth)
+/*
+ * get the name of the newest ticket cache for the uid user.
+ * pam_krb5 defines a non default ticket cache for each user
+ */
+static
+char * get_ticket_cache( uid_t uid )
 {
-	struct cli_state *cli;	/* New connection */
-	NTSTATUS        nt_status;
+  char *ticket_file = NULL;
+  SMB_STRUCT_DIR *tcdir;                  /* directory where ticket caches are stored */
+  SMB_STRUCT_DIRENT *dirent;   /* directory entry */
+  char *filename = NULL;       /* holds file names on the tmp directory */
+  SMB_STRUCT_STAT buf;        
+  char user_cache_prefix[CC_MAX_FILE_LEN];
+  char file_path[CC_MAX_FILE_PATH_LEN];
+  time_t t = 0;
 
-	/* Start the SMB connection */
-	*need_auth = false;
-	nt_status = cli_start_connection(&cli, myname, server, NULL, port,
-					 Undefined, flags, NULL);
-	if (!NT_STATUS_IS_OK(nt_status)) {
-		fprintf(stderr, "ERROR: Connection failed: %s\n", nt_errstr(nt_status));
-		return NULL;
-	}
+  snprintf(user_cache_prefix, CC_MAX_FILE_LEN, "%s%d", CC_PREFIX, uid );
+  tcdir = sys_opendir( TICKET_CC_DIR );
+  if ( tcdir == NULL ) 
+    return NULL; 
+  
+  while ( (dirent = sys_readdir( tcdir ) ) ) 
+  { 
+    filename = dirent->d_name;
+    snprintf(file_path, CC_MAX_FILE_PATH_LEN,"%s/%s", TICKET_CC_DIR, filename); 
+    if (sys_stat(file_path, &buf) == 0 ) 
+    {
+      if ( ( buf.st_uid == uid ) && ( S_ISREG(buf.st_mode) ) ) 
+      {
+        /*
+         * check the user id of the file to prevent denial of
+         * service attacks by creating fake ticket caches for the 
+         * user
+         */
+        if ( strstr( filename, user_cache_prefix ) ) 
+        {
+          if ( buf.st_mtime > t ) 
+          { 
+            /*
+             * a newer ticket cache found 
+             */
+            free(ticket_file);
+            ticket_file=SMB_STRDUP(file_path);
+            t = buf.st_mtime;
+          }
+        }
+      }
+    }
+  }
 
-	/*
-	 * We pretty much guarantee password must be valid or a pointer to a
-	 * 0 char.
-	 */
-	if (!password) {
-		*need_auth = true;
-		return NULL;
-	}
+  sys_closedir(tcdir);
 
-	nt_status = cli_session_setup(cli, username,
-				      password, strlen(password) + 1,
-				      password, strlen(password) + 1,
-				      workgroup);
-	if (!NT_STATUS_IS_OK(nt_status)) {
-		fprintf(stderr, "ERROR: Session setup failed: %s\n", nt_errstr(nt_status));
+  if ( ticket_file == NULL )
+  {
+    /* no ticket cache found */
+    fprintf(stderr, "ERROR: No ticket cache found for userid=%d\n", uid);
+    return NULL;
+  }
 
-		if (get_exit_code(cli, nt_status) == 2) {
-			*need_auth = true;
-		}
+  return ticket_file;
+}
 
-		cli_shutdown(cli);
+static struct cli_state 
+*smb_complete_connection(const char *myname,
+            const char *server,
+            int port,
+            const char *username, 
+            const char *password, 
+            const char *workgroup, 
+            const char *share,
+            int flags)
+{
+  struct cli_state  *cli;    /* New connection */    
+  NTSTATUS nt_status;
+  
+  /* Start the SMB connection */
+  nt_status = cli_start_connection( &cli, myname, server, NULL, port, 
+                                    Undefined, flags, NULL);
+  if (!NT_STATUS_IS_OK(nt_status)) 
+  {
+    return NULL;      
+  }
+    
+  /* We pretty much guarentee password must be valid or a pointer
+     to a 0 char. */
+  if (!password) {
+    return NULL;
+  }
+  
+  if ( (username) && (*username) && 
+      (strlen(password) == 0 ) && 
+       (cli->use_kerberos) ) 
+  {
+    /* Use kerberos authentication */
+    struct passwd *pw;
+    char *cache_file;
+    
+    
+    if ( !(pw = sys_getpwnam(username)) ) {
+      fprintf(stderr,"ERROR Can not get %s uid\n", username);
+      cli_shutdown(cli);
+      return NULL;
+    }
 
-		return NULL;
-	}
+    /*
+     * Get the ticket cache of the user to set KRB5CCNAME env
+     * variable
+     */
+    cache_file = get_ticket_cache( pw->pw_uid );
+    if ( cache_file == NULL ) 
+    {
+      fprintf(stderr, "ERROR: Can not get the ticket cache for %s\n", username);
+      cli_shutdown(cli);
+      return NULL;
+    }
 
-	if (!cli_send_tconX(cli, share, "?????", password, strlen(password) + 1)) {
-		fprintf(stderr, "ERROR: Tree connect failed (%s)\n", cli_errstr(cli));
+    if ( setenv(KRB5CCNAME, cache_file, OVERWRITE) < 0 ) 
+    {
+      fprintf(stderr, "ERROR: Can not add KRB5CCNAME to the environment");
+      cli_shutdown(cli);
+      free(cache_file);
+      return NULL;
+    }
+    free(cache_file);
 
-		if (get_exit_code(cli, cli_nt_error(cli)) == 2) {
-			*need_auth = true;
-		}
+    /*
+     * Change the UID of the process to be able to read the kerberos
+     * ticket cache
+     */
+    setuid(pw->pw_uid);
 
-		cli_shutdown(cli);
+  }
+   
+   
+  if (!NT_STATUS_IS_OK(cli_session_setup(cli, username,
+					 password, strlen(password)+1, 
+					 password, strlen(password)+1,
+					 workgroup)))
+  {
+    fprintf(stderr,"ERROR: Session setup failed: %s\n", cli_errstr(cli));
+    if (NT_STATUS_V(cli_nt_error(cli)) == 
+        NT_STATUS_V(NT_STATUS_MORE_PROCESSING_REQUIRED))
+    {
+      fprintf(stderr, "did you forget to run kinit?\n");
+    }
+    cli_shutdown(cli);
 
-		return NULL;
-	}
-#if 0
-	/* Need to work out how to specify this on the URL. */
-	if (smb_encrypt) {
-		if (!cli_cm_force_encryption(cli,
-					     username,
-					     password,
-					     workgroup,
-					     share)) {
-			fprintf(stderr, "ERROR: encryption setup failed\n");
-			cli_shutdown(cli);
-			return NULL;
-		}
-	}
-#endif
-
-	return cli;
+    return NULL;
+  }
+    
+  if (!cli_send_tconX(cli, share, "?????", password, strlen(password)+1)) 
+  {
+    fprintf(stderr, "ERROR: Tree connect failed (%s)\n", cli_errstr(cli));
+    cli_shutdown(cli);
+    return NULL;
+  }
+    
+  return cli;
 }
 
 /*
  * 'smb_connect()' - Return a connection to a server.
  */
 
-static struct cli_state *	/* O - SMB connection */
-smb_connect(const char *workgroup,	/* I - Workgroup */
-	    const char *server,	/* I - Server */
-	    const int port,	/* I - Port */
-	    const char *share,	/* I - Printer */
-	    const char *username,	/* I - Username */
-	    const char *password,	/* I - Password */
-	    const char *jobusername,	/* I - User who issued the print job */
-	    bool *need_auth)
-{				/* O - Need authentication? */
-	struct cli_state *cli;	/* New connection */
-	char           *myname = NULL;	/* Client name */
-	struct passwd  *pwd;
+static struct cli_state *    /* O - SMB connection */
+smb_connect(const char *workgroup,    /* I - Workgroup */
+            const char *server,    /* I - Server */
+            const int port,    /* I - Port */
+            const char *share,    /* I - Printer */
+            const char *username,    /* I - Username */
+            const char *password,    /* I - Password */
+      const char *jobusername)   /* I - User who issued the print job */
+{
+  struct cli_state  *cli;    /* New connection */
+  pstring    myname;    /* Client name */
+  struct passwd *pwd;
 
-	/*
-         * Get the names and addresses of the client and server...
-         */
-	myname = get_myname(talloc_tos());
-	if (!myname) {
-		return NULL;
-	}
+ /*
+  * Get the names and addresses of the client and server...
+  */
 
-	/*
-	 * See if we have a username first.  This is for backwards compatible
-	 * behavior with 3.0.14a
-	 */
+  get_myname(myname);  
 
-	if (username && *username && !getenv("KRB5CCNAME")) {
-		cli = smb_complete_connection(myname, server, port, username,
-				    password, workgroup, share, 0, need_auth);
-		if (cli) {
-			fputs("DEBUG: Connected with username/password...\n", stderr);
-			return (cli);
-		}
-	}
+  /* See if we have a username first.  This is for backwards compatible 
+     behavior with 3.0.14a */
 
-	/*
-	 * Try to use the user kerberos credentials (if any) to authenticate
-	 */
-	cli = smb_complete_connection(myname, server, port, jobusername, "",
-				      workgroup, share,
-				 CLI_FULL_CONNECTION_USE_KERBEROS, need_auth);
+  if ( username &&  *username )
+  {
+      cli = smb_complete_connection(myname, server, port, username, 
+                                    password, workgroup, share, 0 );
+      if (cli) 
+        return cli;
+  }
+  
+  /* 
+   * Try to use the user kerberos credentials (if any) to authenticate
+   */
+  cli = smb_complete_connection(myname, server, port, jobusername, "", 
+                                workgroup, share, 
+                                CLI_FULL_CONNECTION_USE_KERBEROS );
 
-	if (cli) {
-		fputs("DEBUG: Connected using Kerberos...\n", stderr);
-		return (cli);
-	}
+  if (cli ) { return cli; }
 
-	/* give a chance for a passwordless NTLMSSP session setup */
-	pwd = getpwuid(geteuid());
-	if (pwd == NULL) {
-		return NULL;
-	}
+  /* give a chance for a passwordless NTLMSSP session setup */
 
-	cli = smb_complete_connection(myname, server, port, pwd->pw_name, "",
-				      workgroup, share, 0, need_auth);
+  pwd = getpwuid(geteuid());
+  if (pwd == NULL) {
+     return NULL;
+  }
 
-	if (cli) {
-		fputs("DEBUG: Connected with NTLMSSP...\n", stderr);
-		return (cli);
-	}
+  cli = smb_complete_connection(myname, server, port, pwd->pw_name, "", 
+                                workgroup, share, 0);
 
-	/*
-         * last try. Use anonymous authentication
-         */
+  if (cli) { return cli; }
 
-	cli = smb_complete_connection(myname, server, port, "", "",
-				      workgroup, share, 0, need_auth);
-	/*
-         * Return the new connection...
-         */
+  /*
+   * last try. Use anonymous authentication
+   */
 
-	return (cli);
+  cli = smb_complete_connection(myname, server, port, "", "", 
+                                workgroup, share, 0);
+  /*
+   * Return the new connection...
+   */
+  
+  return (cli);
 }
 
 
@@ -545,79 +540,73 @@
  * 'smb_print()' - Queue a job for printing using the SMB protocol.
  */
 
-static int			/* O - 0 = success, non-0 = failure */
-smb_print(struct cli_state * cli,	/* I - SMB connection */
-	  char *title,		/* I - Title/job name */
-	  FILE * fp)
-{				/* I - File to print */
-	int             fnum;	/* File number */
-	int             nbytes,	/* Number of bytes read */
-	                tbytes;	/* Total bytes read */
-	char            buffer[8192],	/* Buffer for copy */
-	               *ptr;	/* Pointer into title */
+static int				/* O - 0 = success, non-0 = failure */
+smb_print(struct cli_state *cli,	/* I - SMB connection */
+          char             *title,	/* I - Title/job name */
+          FILE             *fp)		/* I - File to print */
+{
+  int	fnum;		/* File number */
+  int	nbytes,		/* Number of bytes read */
+	tbytes;		/* Total bytes read */
+  char	buffer[8192],	/* Buffer for copy */
+	*ptr;		/* Pointer into tile */
 
 
-	/*
-         * Sanitize the title...
-         */
+ /*
+  * Sanitize the title...
+  */
 
-	for (ptr = title; *ptr; ptr++) {
-		if (!isalnum((int) *ptr) && !isspace((int) *ptr)) {
-			*ptr = '_';
-		}
-	}
+  for (ptr = title; *ptr; ptr ++)
+    if (!isalnum((int)*ptr) && !isspace((int)*ptr))
+      *ptr = '_';
 
-	/*
-         * Open the printer device...
-         */
+ /*
+  * Open the printer device...
+  */
 
-	fnum = cli_open(cli, title, O_RDWR | O_CREAT | O_TRUNC, DENY_NONE);
-	if (fnum == -1) {
-		fprintf(stderr, "ERROR: %s opening remote spool %s\n",
-			cli_errstr(cli), title);
-		return (get_exit_code(cli, cli_nt_error(cli)));
-	}
+  if ((fnum = cli_open(cli, title, O_RDWR | O_CREAT | O_TRUNC, DENY_NONE)) == -1)
+  {
+    fprintf(stderr, "ERROR: %s opening remote spool %s\n",
+            cli_errstr(cli), title);
+    return (1);
+  }
 
-	/*
-         * Copy the file to the printer...
-         */
+ /*
+  * Copy the file to the printer...
+  */
 
-	if (fp != stdin)
-		rewind(fp);
+  if (fp != stdin)
+    rewind(fp);
 
-	tbytes = 0;
+  tbytes = 0;
 
-	while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) {
-		if (cli_write(cli, fnum, 0, buffer, tbytes, nbytes) != nbytes) {
-			int status = get_exit_code(cli, cli_nt_error(cli));
+  while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
+  {
+    if (cli_write(cli, fnum, 0, buffer, tbytes, nbytes) != nbytes)
+    {
+      fprintf(stderr, "ERROR: Error writing spool: %s\n", cli_errstr(cli));
+      break;
+    }
 
-			fprintf(stderr, "ERROR: Error writing spool: %s\n", cli_errstr(cli));
-			fprintf(stderr, "DEBUG: Returning status %d...\n", status);
-			cli_close(cli, fnum);
+    tbytes += nbytes;
+  } 
 
-			return (status);
-		}
-		tbytes += nbytes;
-	}
-
-	if (!cli_close(cli, fnum)) {
-		fprintf(stderr, "ERROR: %s closing remote spool %s\n",
-			cli_errstr(cli), title);
-		return (get_exit_code(cli, cli_nt_error(cli)));
-	} else {
-		return (0);
-	}
+  if (!cli_close(cli, fnum))
+  {
+    fprintf(stderr, "ERROR: %s closing remote spool %s\n",
+            cli_errstr(cli), title);
+    return (1);
+  }
+  else
+    return (0);
 }
 
-static char *
-uri_unescape_alloc(const char *uritok)
+static char *uri_unescape_alloc(const char *uritok)
 {
 	char *ret;
 
-	ret = (char *) SMB_STRDUP(uritok);
-	if (!ret) {
-		return NULL;
-	}
+	ret = (char *)SMB_STRDUP(uritok);
+	if (!ret) return NULL;
 
 	rfc1738_unescape(ret);
 	return ret;

Copied: branches/samba/upstream/source/client/smbumount.c (from rev 1928, branches/samba/upstream/source/client/smbumount.c)
===================================================================
--- branches/samba/upstream/source/client/smbumount.c	                        (rev 0)
+++ branches/samba/upstream/source/client/smbumount.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,194 @@
+/*
+ *  smbumount.c
+ *
+ *  Copyright (C) 1995-1998 by Volker Lendecke
+ *
+ */
+
+#define SMBMOUNT_MALLOC 1
+
+#include "includes.h"
+
+#include <mntent.h>
+
+#include <asm/types.h>
+#include <asm/posix_types.h>
+#include <linux/smb.h>
+#include <linux/smb_mount.h>
+#include <linux/smb_fs.h>
+
+/* This is a (hopefully) temporary hack due to the fact that
+	sizeof( uid_t ) != sizeof( __kernel_uid_t ) under glibc.
+	This may change in the future and smb.h may get fixed in the
+	future.  In the mean time, it's ugly hack time - get over it.
+*/
+#undef SMB_IOC_GETMOUNTUID
+#define	SMB_IOC_GETMOUNTUID		_IOR('u', 1, __kernel_uid_t)
+
+#ifndef O_NOFOLLOW
+#define O_NOFOLLOW     0400000
+#endif
+
+static void
+usage(void)
+{
+        printf("usage: smbumount mountpoint\n\n");
+	printf("Please be aware that smbfs is deprecated in favor of "
+	       "cifs\n");
+}
+
+static int
+umount_ok(const char *mount_point)
+{
+	/* we set O_NOFOLLOW to prevent users playing games with symlinks to
+	   umount filesystems they don't own */
+        int fid = open(mount_point, O_RDONLY|O_NOFOLLOW, 0);
+        __kernel_uid32_t mount_uid;
+	
+        if (fid == -1) {
+                fprintf(stderr, "Could not open %s: %s\n",
+                        mount_point, strerror(errno));
+                return -1;
+        }
+        
+        if (ioctl(fid, SMB_IOC_GETMOUNTUID32, &mount_uid) != 0) {
+                __kernel_uid_t mount_uid16;
+                if (ioctl(fid, SMB_IOC_GETMOUNTUID, &mount_uid16) != 0) {
+                        fprintf(stderr, "%s probably not smb-filesystem\n",
+                                mount_point);
+                        return -1;
+                }
+                mount_uid = mount_uid16;
+        }
+
+        if ((getuid() != 0)
+            && (mount_uid != getuid())) {
+                fprintf(stderr, "You are not allowed to umount %s\n",
+                        mount_point);
+                return -1;
+        }
+
+        close(fid);
+        return 0;
+}
+
+/* Make a canonical pathname from PATH.  Returns a freshly malloced string.
+   It is up the *caller* to ensure that the PATH is sensible.  i.e.
+   canonicalize ("/dev/fd0/.") returns "/dev/fd0" even though ``/dev/fd0/.''
+   is not a legal pathname for ``/dev/fd0''  Anything we cannot parse
+   we return unmodified.   */
+static char *
+canonicalize (char *path)
+{
+	char *canonical = malloc (PATH_MAX + 1);
+
+	if (!canonical) {
+		fprintf(stderr, "Error! Not enough memory!\n");
+		return NULL;
+	}
+
+	if (strlen(path) > PATH_MAX) {
+		fprintf(stderr, "Mount point string too long\n");
+		return NULL;
+	}
+
+	if (path == NULL)
+		return NULL;
+  
+	if (realpath (path, canonical))
+		return canonical;
+
+	strncpy (canonical, path, PATH_MAX);
+	canonical[PATH_MAX] = '\0';
+	return canonical;
+}
+
+
+int 
+main(int argc, char *argv[])
+{
+        int fd;
+        char* mount_point;
+        struct mntent *mnt;
+        FILE* mtab;
+        FILE* new_mtab;
+
+        if (argc != 2) {
+                usage();
+                exit(1);
+        }
+
+        if (geteuid() != 0) {
+                fprintf(stderr, "smbumount must be installed suid root\n");
+                exit(1);
+        }
+
+        mount_point = canonicalize(argv[1]);
+
+	if (mount_point == NULL)
+	{
+		exit(1);
+	}
+
+        if (umount_ok(mount_point) != 0) {
+                exit(1);
+        }
+
+        if (umount(mount_point) != 0) {
+                fprintf(stderr, "Could not umount %s: %s\n",
+                        mount_point, strerror(errno));
+                exit(1);
+        }
+
+        if ((fd = open(MOUNTED"~", O_RDWR|O_CREAT|O_EXCL, 0600)) == -1)
+        {
+                fprintf(stderr, "Can't get "MOUNTED"~ lock file");
+                return 1;
+        }
+        close(fd);
+	
+        if ((mtab = setmntent(MOUNTED, "r")) == NULL) {
+                fprintf(stderr, "Can't open " MOUNTED ": %s\n",
+                        strerror(errno));
+                return 1;
+        }
+
+#define MOUNTED_TMP MOUNTED".tmp"
+
+        if ((new_mtab = setmntent(MOUNTED_TMP, "w")) == NULL) {
+                fprintf(stderr, "Can't open " MOUNTED_TMP ": %s\n",
+                        strerror(errno));
+                endmntent(mtab);
+                return 1;
+        }
+
+        while ((mnt = getmntent(mtab)) != NULL) {
+                if (strcmp(mnt->mnt_dir, mount_point) != 0) {
+                        addmntent(new_mtab, mnt);
+                }
+        }
+
+        endmntent(mtab);
+
+        if (fchmod (fileno (new_mtab), S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH) < 0) {
+                fprintf(stderr, "Error changing mode of %s: %s\n",
+                        MOUNTED_TMP, strerror(errno));
+                exit(1);
+        }
+
+        endmntent(new_mtab);
+
+        if (rename(MOUNTED_TMP, MOUNTED) < 0) {
+                fprintf(stderr, "Cannot rename %s to %s: %s\n",
+                        MOUNTED, MOUNTED_TMP, strerror(errno));
+                exit(1);
+        }
+
+        if (unlink(MOUNTED"~") == -1)
+        {
+                fprintf(stderr, "Can't remove "MOUNTED"~");
+                return 1;
+        }
+
+	return 0;
+}	

Modified: branches/samba/upstream/source/client/tree.c
===================================================================
--- branches/samba/upstream/source/client/tree.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/client/tree.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /* example-gtk+ application, ripped off from the gtk+ tree.c sample */
@@ -68,9 +69,9 @@
  * workgroup type and return a path from there
  */
 
-static char *path_string;
+static pstring path_string;
 
-char *get_path(TALLOC_CTX *ctx, GtkWidget *item)
+char *get_path(GtkWidget *item)
 {
   GtkWidget *p = item;
   struct tree_data *pd;
@@ -92,7 +93,7 @@
 
     /* Find the parent and extract the data etc ... */
 
-    p = GTK_WIDGET(p->parent);
+    p = GTK_WIDGET(p->parent);    
     p = GTK_WIDGET(GTK_TREE(p)->tree_owner);
 
     pd = (struct tree_data *)gtk_object_get_user_data(GTK_OBJECT(p));
@@ -104,25 +105,23 @@
 
   }
 
-  /*
+  /* 
    * Got a list of comps now, should check that we did not hit a workgroup
    * when we got other things as well ... Later
    *
    * Now, build the path
    */
 
-  TALLOC_FREE(path_string);
-  path_string = talloc_strdup(ctx, "smb:/");
+  pstrcpy( path_string, "smb:/" );
 
-  if (path_string) {
-    for (j = i - 1; j >= 0; j--) {
-      path_string = talloc_asprintf_append(path_string, "/%s", comps[j]);
-    }
-  }
+  for (j = i - 1; j >= 0; j--) {
 
-  if (path_string) {
-    fprintf(stdout, "Path string = %s\n", path_string);
+    strncat(path_string, "/", sizeof(path_string) - strlen(path_string));
+    strncat(path_string, comps[j], sizeof(path_string) - strlen(path_string));
+
   }
+  
+  fprintf(stdout, "Path string = %s\n", path_string);
 
   return path_string;
 
@@ -152,8 +151,7 @@
   char dirbuf[512];
   struct smbc_dirent *dirp;
   struct stat st1;
-  char *path;
-  TALLOC_CTX *ctx = talloc_stackframe();
+  pstring path, path1;
 
   g_print ("select_child called for root tree %p, subtree %p, child %p\n",
 	   root_tree, subtree, child);
@@ -164,29 +162,31 @@
 
   /* Now, get the private data for the subtree */
 
-  path = get_path(ctx, child);
-  if (!path) {
-    gtk_main_quit();
-    TALLOC_FREE(ctx);
-    return;
-  }
+  strncpy(path, get_path(child), 1024);
 
   if ((dh = smbc_opendir(path)) < 0) { /* Handle error */
+
     g_print("cb_select_child: Could not open dir %s, %s\n", path,
 	    strerror(errno));
+
     gtk_main_quit();
-    TALLOC_FREE(ctx);
+
     return;
+
   }
 
   while ((err = smbc_getdents(dh, (struct smbc_dirent *)dirbuf,
 			      sizeof(dirbuf))) != 0) {
+
     if (err < 0) {
+
       g_print("cb_select_child: Could not read dir %s, %s\n", path,
 	      strerror(errno));
+
       gtk_main_quit();
-      TALLOC_FREE(ctx);
+
       return;
+
     }
 
     dirp = (struct smbc_dirent *)dirbuf;
@@ -241,27 +241,27 @@
 
 	if ((strcmp(dirp->name, ".") != 0) &&
 	    (strcmp(dirp->name, "..") != 0)) {
-          char *path1;
 
-	  path1 = talloc_asprintf(ctx,
-                             "%s/%s",
-			     path,
-			     dirp->name);
-          if (!path1) {
-	      gtk_main_quit();
-              TALLOC_FREE(ctx);
-	      return;
-	  }
+	  strncpy(path1, path, sizeof(path1));
+	  strncat(path1, "/", sizeof(path) - strlen(path));
+	  strncat(path1, dirp->name, sizeof(path) - strlen(path));
 
 	  if (smbc_stat(path1, &st1) < 0) {
+	    
 	    if (errno != EBUSY) {
-	      g_print("cb_select_child: Could not stat file %s, %s\n", path1,
+	      
+	      g_print("cb_select_child: Could not stat file %s, %s\n", path1, 
 		      strerror(errno));
+	    
 	      gtk_main_quit();
-              TALLOC_FREE(ctx);
+
 	      return;
-	    } else {
+
+	    }
+	    else {
+
 	      strncpy(col2, "Device or resource busy", sizeof(col2));
+
 	    }
 	  }
 	  else {
@@ -277,7 +277,7 @@
 		     (st1.st_mode&S_IROTH?'r':'-'),
 		     (st1.st_mode&S_IWOTH?'w':'-'),
 		     (st1.st_mode&S_IXOTH?'x':'-'),
-		     st1.st_mode);
+		     st1.st_mode); 
 	    snprintf(col3, sizeof(col3), "%u", st1.st_size);
 	    snprintf(col4, sizeof(col4), "%s", ctime(&st1.st_mtime));
 	  }
@@ -296,8 +296,9 @@
       err -= dirlen;
 
     }
+
   }
-  TALLOC_FREE(ctx);
+
 }
 
 /* Note that this is never called */
@@ -614,7 +615,6 @@
   gint i;
   char dirbuf[512];
   struct smbc_dirent *dirp;
-  TALLOC_CTX *frame = talloc_stackframe();
 
   gtk_init (&argc, &argv);
 
@@ -806,7 +806,6 @@
 
   /* Show the window and loop endlessly */
   gtk_main();
-  TALLOC_FREE(frame);
   return 0;
 }
 /* example-end */

Modified: branches/samba/upstream/source/client/umount.cifs.c
===================================================================
--- branches/samba/upstream/source/client/umount.cifs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/client/umount.cifs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #ifndef _GNU_SOURCE
 #define _GNU_SOURCE

Modified: branches/samba/upstream/source/config.guess
===================================================================
--- branches/samba/upstream/source/config.guess	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/config.guess	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful, but
@@ -16,7 +16,9 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a

Modified: branches/samba/upstream/source/config.sub
===================================================================
--- branches/samba/upstream/source/config.sub	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/config.sub	2008-06-15 01:55:18 UTC (rev 1953)
@@ -11,7 +11,7 @@
 #
 # This file is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful,
@@ -20,7 +20,9 @@
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a

Modified: branches/samba/upstream/source/configure
===================================================================
--- branches/samba/upstream/source/configure	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/configure	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,9 +1,7 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for Samba 3.
+# Generated by GNU Autoconf 2.61.
 #
-# Report bugs to <samba-technical at samba.org>.
-#
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
 # 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
 # This configure script is free software; the Free Software Foundation
@@ -572,11 +570,11 @@
 SHELL=${CONFIG_SHELL-/bin/sh}
 
 # Identity of this package.
-PACKAGE_NAME='Samba'
-PACKAGE_TARNAME='samba'
-PACKAGE_VERSION='3'
-PACKAGE_STRING='Samba 3'
-PACKAGE_BUGREPORT='samba-technical at samba.org'
+PACKAGE_NAME=
+PACKAGE_TARNAME=
+PACKAGE_VERSION=
+PACKAGE_STRING=
+PACKAGE_BUGREPORT=
 
 ac_unique_file="include/includes.h"
 ac_default_prefix=/usr/local/samba
@@ -653,7 +651,6 @@
 build_alias
 host_alias
 target_alias
-builddir
 libreplacedir
 LIBREPLACEOBJ
 build
@@ -672,68 +669,31 @@
 lockdir
 piddir
 logfilebase
-ctdbdir
 privatedir
 swatdir
-codepagedir
-statedir
-cachedir
 rootsbindir
 pammodulesdir
-selftest_prefix
-smbtorture4_path
-CC
-CFLAGS
-LDFLAGS
-CPPFLAGS
-ac_ct_CC
-EXEEXT
-OBJEXT
-CPP
-GREP
-EGREP
-INSTALL_PROGRAM
-INSTALL_SCRIPT
-INSTALL_DATA
-libreplace_cv_immediate_structures
-tallocdir
-TALLOC_OBJ
-TALLOC_CFLAGS
-TALLOC_LIBS
-TALLOC_OBJS
-tdbdir
-TDB_CFLAGS
-TDB_OBJ
-TDB_OBJS
 SAMBA_CPPFLAGS
 LDSHFLAGS
 SONAMEFLAG
 SHLD
-MODULE_EXPORTS
-DSO_EXPORTS
 HOST_OS
 PICFLAG
 PIE_CFLAGS
 PIE_LDFLAGS
-RELRO_LDFLAGS
 SHLIBEXT
 INSTALLLIBCMD_SH
 INSTALLLIBCMD_A
 UNINSTALLLIBCMD_SH
 UNINSTALLLIBCMD_A
+INSTALL_LIBMSRPC
+UNINSTALL_LIBMSRPC
+LIBMSRPC_SHARED
+LIBMSRPC
 INSTALL_LIBADDNS
 UNINSTALL_LIBADDNS
 LIBADDNS_SHARED
 LIBADDNS
-INSTALL_LIBWBCLIENT
-UNINSTALL_LIBWBCLIENT
-LIBWBCLIENT_SHARED_TARGET
-LIBWBCLIENT_SHARED
-LIBWBCLIENT_STATIC_TARGET
-LIBWBCLIENT_STATIC
-LIBWBCLIENT
-WINBIND_LIBS
-LIBSAMBAUTIL_SHARED
 INSTALL_LIBSMBCLIENT
 UNINSTALL_LIBSMBCLIENT
 LIBSMBCLIENT_SHARED
@@ -755,23 +715,33 @@
 UNINSTALL_PAM_MODULES
 NSS_MODULES
 EXTRA_BIN_PROGS
+SMBMOUNT_PROGS
 CIFSMOUNT_PROGS
 INSTALL_CIFSMOUNT
 UNINSTALL_CIFSMOUNT
-CIFSSPNEGO_PROGS
-INSTALL_CIFSSPNEGO
-UNINSTALL_CIFSSPNEGO
 EXTRA_SBIN_PROGS
 EXTRA_ALL_TARGETS
 CONFIG_LIBS
 NSCD_LIBS
+CC
+CFLAGS
+LDFLAGS
+CPPFLAGS
+ac_ct_CC
+EXEEXT
+OBJEXT
+CPP
+GREP
+EGREP
+INSTALL_PROGRAM
+INSTALL_SCRIPT
+INSTALL_DATA
+libreplace_cv_immediate_structures
 DEFAULT_TEST_TARGET
 HAVE_SOCKET_WRAPPER
 SOCKET_WRAPPER_OBJS
-HAVE_NSS_WRAPPER
-NSS_WRAPPER_OBJS
-SWAT_SBIN_TARGETS
-SWAT_INSTALL_TARGETS
+selftest_prefix
+smbtorture4_path
 AWK
 PERL
 AR
@@ -779,37 +749,19 @@
 PIDL_ARGS
 DYNEXP
 LIBOBJS
+precompiled_headers
 LIBDL
 LIBREPLACE_OBJS
 CUPS_CONFIG
 TERMLIBS
 TERMLDFLAGS
 LIBUNWIND_PTRACE
-SYMSEXT
 ROFF
-LIB_PATH_VAR
 SMB_FAM_LIBS
 SMBLDAP
 SMBLDAPUTIL
 LDBLDAP
 KRB5CONFIG
-USESHARED
-LIBTALLOC_SHARED_TARGET
-LIBTALLOC_STATIC_TARGET
-LIBTALLOC_SHARED
-LIBTALLOC_STATIC
-LIBTALLOC_LIBS
-LIBTDB_SHARED_TARGET
-LIBTDB_STATIC_TARGET
-LIBTDB_SHARED
-LIBTDB_STATIC
-LIBTDB_LIBS
-LIBNETAPI_SHARED_TARGET
-LIBNETAPI_STATIC_TARGET
-LIBNETAPI_SHARED
-LIBNETAPI_STATIC
-LIBNETAPI_LIBS
-WINBIND_NSS_PTHREAD
 WINBIND_NSS
 WINBIND_WINS_NSS
 WINBIND_NSS_LDSHFLAGS
@@ -817,13 +769,13 @@
 WINBIND_NSS_EXTRA_LIBS
 NSSSONAMEVERSIONSUFFIX
 PAM_WINBIND_EXTRA_LIBS
-WINBIND_KRB5_LOCATOR
+SMB_KRB5_LOCATOR
 BUILD_POPT
 POPTLIBS
 FLAGS1
-DNSSD_LIBS
 BUILD_INIPARSER
 INIPARSERLIBS
+PYTHON
 PDB_STATIC
 PDB_MODULES
 RPC_STATIC
@@ -838,7 +790,7 @@
 AUTH_MODULES
 VFS_STATIC
 VFS_MODULES
-DEVELOPER_CFLAGS
+builddir
 SMBD_LIBS
 LTLIBOBJS'
 ac_subst_files=''
@@ -889,7 +841,7 @@
 localstatedir='${prefix}/var'
 includedir='${prefix}/include'
 oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+docdir='${datarootdir}/doc/${PACKAGE}'
 infodir='${datarootdir}/info'
 htmldir='${docdir}'
 dvidir='${docdir}'
@@ -1353,7 +1305,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures Samba 3 to adapt to many kinds of systems.
+\`configure' configures this package to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1401,7 +1353,7 @@
   --infodir=DIR          info documentation [DATAROOTDIR/info]
   --localedir=DIR        locale-dependent data [DATAROOTDIR/locale]
   --mandir=DIR           man documentation [DATAROOTDIR/man]
-  --docdir=DIR           documentation root [DATAROOTDIR/doc/samba]
+  --docdir=DIR           documentation root [DATAROOTDIR/doc/PACKAGE]
   --htmldir=DIR          html documentation [DOCDIR]
   --dvidir=DIR           dvi documentation [DOCDIR]
   --pdfdir=DIR           pdf documentation [DOCDIR]
@@ -1418,67 +1370,46 @@
 fi
 
 if test -n "$ac_init_help"; then
-  case $ac_init_help in
-     short | recursive ) echo "Configuration of Samba 3:";;
-   esac
+
   cat <<\_ACEOF
 
 Optional Features:
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-static=PKGS    build static libraries default=no
+  --enable-shared=PKGS    build shared libraries default=yes
   --enable-debug          Turn on compiler debugging information (default=no)
-  --enable-developer      Turn on developer warnings and debugging
-                          (default=no)
-  --enable-krb5developer  Turn on developer warnings and debugging, except
-                          -Wstrict-prototypes (default=no)
   --disable-largefile     omit support for large files
   --enable-socket-wrapper         Turn on socket wrapper library (default=no)
-  --enable-nss-wrapper         Turn on nss wrapper library (default=no)
-  --enable-swat           Build the SWAT tool (default=yes)
-  --enable-dmalloc        Enable heap debugging [default=no]
+  --enable-developer      Turn on developer warnings and debugging (default=no)
+  --enable-krb5developer  Turn on developer warnings and debugging, except -Wstrict-prototypes (default=no)
+  --enable-dmalloc        Enable heap debugging default=no
   --enable-cups           Turn on CUPS support (default=auto)
   --enable-iprint         Turn on iPrint support (default=yes if cups is yes)
-  --enable-static=PKGS    build static libraries default=no
-  --enable-shared=PKGS    build shared libraries default=yes
   --enable-pie            Turn on pie support if available (default=yes)
-  --enable-relro          Turn on Relocations Read-Only (relro) support if
-                          available (default=yes)
   --enable-fam            Turn on FAM support (default=auto)
-  --enable-shared-libs    Use shared libraries internally (default=yes)
-  --enable-dnssd          Enable DNS service discovery support (default=auto)
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
   --with-fhs              Use FHS-compliant paths (default=no)
   --with-privatedir=DIR   Where to put smbpasswd ($ac_default_prefix/private)
-  --with-rootsbindir=DIR  Which directory to use for root sbin
-                          ($ac_default_prefix/sbin)
-  --with-lockdir=DIR      Where to put lock files
-                          ($ac_default_prefix/var/locks)
-  --with-piddir=DIR       Where to put pid files
-                          ($ac_default_prefix/var/locks)
+  --with-rootsbindir=DIR  Which directory to use for root sbin ($ac_default_prefix/sbin)
+  --with-lockdir=DIR      Where to put lock files ($ac_default_prefix/var/locks)
+  --with-piddir=DIR       Where to put pid files ($ac_default_prefix/var/locks)
   --with-swatdir=DIR      Where to put SWAT files ($ac_default_prefix/swat)
   --with-configdir=DIR    Where to put configuration files ($libdir)
   --with-logfilebase=DIR  Where to put log files ($VARDIR)
-  --with-ctdb=DIR         Where to find ctdb sources
   --with-libdir=DIR       Where to put libdir ($libdir)
-  --with-pammodulesdir=DIR
-                          Which directory to use for PAM modules
-                          ($ac_default_prefix/$libdir/security)
+  --with-pammodulesdir=DIR  Which directory to use for PAM modules ($ac_default_prefix/$libdir/security)
   --with-mandir=DIR       Where to put man pages ($mandir)
-  --with-selftest-prefix=DIR
-                          The prefix where make test will be run
-                          ($selftest_prefix)
-  --with-smbtorture4-path=PATH
-                          The path to a samba4 smbtorture for make test (none)
-  --with-cfenc=HEADERDIR  Use internal CoreFoundation encoding API for
-                          optimization (Mac OS X/Darwin only)
-  --with-profiling-data   Include gathering source code profile information
-                          (default=no)
+  --with-cfenc=HEADERDIR  Use internal CoreFoundation encoding API
+			  for optimization (Mac OS X/Darwin only)
+  --with-selftest-prefix=DIR    The prefix where make test will be runned ($selftest_prefix)
+  --with-smbtorture4-path=PATH    The path to a samba4 smbtorture for make test (none)
+  --with-profiling-data   Include gathering source code profile information (default=no)
   --with-readline=DIR     Look for readline include/libs in DIR (default=auto)
-  --with-libiconv=BASEDIR Use libiconv in BASEDIR/lib and BASEDIR/include
-                          (default=auto)
+  --with-libiconv=BASEDIR Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto)
   --with-afs              Include AFS clear-text auth support (default=no)
   --with-fake-kaserver    Include AFS fake-kaserver support (default=no)
   --with-vfs-afsacl       Include AFS to NT ACL mapping module (default=no)
@@ -1488,48 +1419,29 @@
   --with-krb5=base-dir    Locate Kerberos 5 support (default=/usr)
   --with-dnsupdate        Enable DNS Updates support (default no)
   --with-automount        Include automount support (default=no)
-  --with-cifsmount        Include mount.cifs and umount.cifs (Linux only)
-                          support (default=yes)
-  --with-cifsspnego       Include cifs.spnego (Linux only) support
-                          (default=no)
+  --with-smbmount         Include smbmount (Linux only) support (default=no)
+  --with-cifsmount        Include mount.cifs and umount.cifs (Linux only) support (default=yes)
   --with-pam              Include PAM support (default=no)
-  --with-pam_smbpass      Build PAM module for authenticating against passdb
-                          backends (default=no)
+  --with-pam_smbpass      Build PAM module for authenticating against passdb backends (default=no)
   --with-nisplus-home     Include NISPLUS_HOME support (default=no)
   --with-syslog           Include experimental SYSLOG support (default=no)
   --with-quotas           Include disk-quota support (default=no)
   --with-sys-quotas       Include lib/sysquotas.c support (default=auto)
-  --with-utmp             Include utmp accounting (default, if supported by
-                          OS)
-  --with-static-libs=LIBS Comma-separated list of names of (internal)
-                          libraries to link statically (instead of
-                          dynamically)
-  --with-libtalloc        Build the libtalloc shared library (default=yes if
-                          shared libs supported)
-  --with-libtdb           Build the libtdb shared library (default=yes if
-                          shared libs supported)
-  --with-libnetapi        Build the libnetapi shared library (default=yes if
-                          shared libs supported)
-  --with-libaddns         Build the libaddns shared library (default=no
-                          undefined API)
-  --with-libsmbclient     Build the libsmbclient shared library (default=yes
-                          if shared libs supported)
-  --with-libsmbsharemodes Build the libsmbsharemodes shared library
-                          (default=yes if shared libs supported)
+  --with-utmp             Include utmp accounting (default, if supported by OS)
+  --with-libmsrpc         Build the libmsrpc shared library (default=yes if shared libs supported)
+  --with-libaddns         Build the libaddns shared library (default=yes if shared libs supported)
+  --with-libsmbclient     Build the libsmbclient shared library (default=yes if shared libs supported)
+  --with-libsmbsharemodes     Build the libsmbsharemodes shared library (default=yes if shared libs supported)
   --with-cluster-support  Enable cluster extensions (default=no)
-  --with-acl-support      Include ACL support (default=auto)
+  --with-acl-support      Include ACL support (default=no)
   --with-aio-support      Include asynchronous io support (default=no)
   --with-sendfile-support Check for sendfile support (default=yes)
   --with-winbind          Build winbind (default, if supported by OS)
   --with-included-popt    use bundled popt library, not from system
-  --with-included-iniparser
-                          use bundled iniparser library, not from system
-  --with-static-modules=MODULES
-                          Comma-separated list of names of modules to
-                          statically link in
-  --with-shared-modules=MODULES
-                          Comma-separated list of names of modules to build
-                          shared
+  --with-included-iniparser    use bundled iniparser library, not from system
+  --with-python=PYTHONNAME  build Python libraries
+  --with-static-modules=MODULES  Comma-separated list of names of modules to statically link in
+  --with-shared-modules=MODULES  Comma-separated list of names of modules to build shared
 
 Some influential environment variables:
   CC          C compiler command
@@ -1544,7 +1456,6 @@
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
 
-Report bugs to <samba-technical at samba.org>.
 _ACEOF
 ac_status=$?
 fi
@@ -1605,7 +1516,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-Samba configure 3
+configure
 generated by GNU Autoconf 2.61
 
 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1619,7 +1530,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by Samba $as_me 3, which was
+It was created by $as_me, which was
 generated by GNU Autoconf 2.61.  Invocation command line was
 
   $ $0 $@
@@ -1957,14 +1868,6 @@
 
 
 
-
-
-
-
-
-
-
-
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -1972,8 +1875,6 @@
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-
-
 ac_config_headers="$ac_config_headers include/config.h"
 
 
@@ -1982,17 +1883,6 @@
 _ACEOF
 
 
-case "$PATH" in
-    */usr/ucb*)
-	{ echo "$as_me:$LINENO: WARNING: \$PATH contains /usr/ucb - build errors may follow" >&5
-echo "$as_me: WARNING: \$PATH contains /usr/ucb - build errors may follow" >&2;}
-	;;
-esac
-
-builddir=`pwd`
-
-
-
 SMB_VERSION_STRING=`cat $srcdir/include/version.h | grep 'SAMBA_VERSION_OFFICIAL_STRING' | cut -d '"' -f2`
 echo "SAMBA VERSION: ${SMB_VERSION_STRING}"
 
@@ -2012,8 +1902,6 @@
 	echo "BUILD REVISION: ${SAMBA_VERSION_GIT_COMMIT_TIME}"
 fi
 
-
-
 ac_aux_dir=
 for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
   if test -f "$ac_dir/install-sh"; then
@@ -2195,6 +2083,52 @@
 echo "LIBREPLACE_LOCATION_CHECKS: END"
 
 
+# Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then
+  enableval=$enable_static; p=${PACKAGE-default}
+case $enableval in
+yes) enable_static=yes ;;
+no) enable_static=no ;;
+*)
+  enable_static=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_static=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac
+else
+  enable_static=no
+fi
+
+# Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then
+  enableval=$enable_shared; p=${PACKAGE-default}
+case $enableval in
+yes) enable_shared=yes ;;
+no) enable_shared=no ;;
+*)
+  enable_shared=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_shared=yes
+    fi
+
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac
+else
+  enable_shared=yes
+fi
+
+
 #################################################
 # Directory handling stuff to support both the
 # legacy SAMBA directories and FHS compliant
@@ -2211,9 +2145,6 @@
 pammodulesdir="\${LIBDIR}/security"
 configdir="\${LIBDIR}"
 swatdir="\${prefix}/swat"
-codepagedir="\${LIBDIR}"
-statedir="\${LOCKDIR}"
-cachedir="\${LOCKDIR}"
 
 
 # Check whether --with-fhs was given.
@@ -2225,17 +2156,9 @@
     mandir="\${prefix}/share/man"
     logfilebase="\${VARDIR}/log/samba"
     privatedir="\${CONFIGDIR}/private"
-    test "${libdir}" || libdir="\${prefix}/lib/samba"
+    libdir="\${prefix}/lib/samba"
     configdir="\${sysconfdir}/samba"
     swatdir="\${DATADIR}/samba/swat"
-    codepagedir="\${LIBDIR}"
-    statedir="\${VARDIR}/lib/samba"
-    cachedir="\${VARDIR}/lib/samba"
-
-cat >>confdefs.h <<\_ACEOF
-#define FHS_COMPATIBLE 1
-_ACEOF
-
     ;;
   esac
 fi
@@ -2381,25 +2304,7 @@
 fi
 
 
-
 #################################################
-# set ctdb source directory location
-
-# Check whether --with-ctdb was given.
-if test "${with_ctdb+set}" = set; then
-  withval=$with_ctdb;  case "$withval" in
-  yes|no)
-    { echo "$as_me:$LINENO: WARNING: --with-ctdb called without argument" >&5
-echo "$as_me: WARNING: --with-ctdb called without argument" >&2;}
-  ;;
-  * )
-    ctdbdir="$withval"
-    ;;
-  esac
-fi
-
-
-#################################################
 # set lib directory location
 
 # Check whether --with-libdir was given.
@@ -2460,11 +2365,39 @@
 
 
 
+# Check whether --with-cfenc was given.
+if test "${with_cfenc+set}" = set; then
+  withval=$with_cfenc;
+# May be in source $withval/CoreFoundation/StringEncodings.subproj.
+# Should have been in framework $withval/CoreFoundation.framework/Headers.
+for d in \
+    $withval/CoreFoundation/StringEncodings.subproj \
+    $withval/StringEncodings.subproj \
+    $withval/CoreFoundation.framework/Headers \
+    $withval/Headers \
+    $withval
+do
+    if test -r $d/CFStringEncodingConverter.h; then
+        ln -sfh $d include/CoreFoundation
+    fi
+done
 
+fi
 
 
+SAMBA_CPPFLAGS="-Iinclude -I${srcdir-.}/include  -I. -I${srcdir-.}"
+SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/lib/replace"
+SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/lib/talloc"
+SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/tdb/include"
+SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/libaddns"
+SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/librpc"
 
+SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/popt"
 
+## cleanup the $(srcdir) in the Makefile if we are outside of the tree
+if test "x${srcdir-.}" != "x."; then
+	SAMBA_CPPFLAGS=`echo ${SAMBA_CPPFLAGS} | sed -e "s;${srcdir};\$\(srcdir\);g"`
+fi
 
 
 
@@ -2474,106 +2407,81 @@
 
 
 
-#################################################
-# set prefix for 'make test'
-selftest_prefix="./st"
 
 
-# Check whether --with-selftest-prefix was given.
-if test "${with_selftest_prefix+set}" = set; then
-  withval=$with_selftest_prefix;  case "$withval" in
-  yes|no)
-    { echo "$as_me:$LINENO: WARNING: --with-selftest-prefix called without argument - will use default" >&5
-echo "$as_me: WARNING: --with-selftest-prefix called without argument - will use default" >&2;}
-  ;;
-  * )
-    selftest_prefix="$withval"
-    ;;
-  esac
 
-fi
 
 
-#################################################
-# set path of samba4's smbtorture
-smbtorture4_path=""
 
 
-# Check whether --with-smbtorture4_path was given.
-if test "${with_smbtorture4_path+set}" = set; then
-  withval=$with_smbtorture4_path;  case "$withval" in
-  yes|no)
-    { { echo "$as_me:$LINENO: error: --with-smbtorture4-path should take a path" >&5
-echo "$as_me: error: --with-smbtorture4-path should take a path" >&2;}
-   { (exit 1); exit 1; }; }
-  ;;
-  * )
-    smbtorture4_path="$withval"
-    if test -z "$smbtorture4_path" -a ! -f $smbtorture4_path; then
-    	{ { echo "$as_me:$LINENO: error: '$smbtorture_path' does not  exist!" >&5
-echo "$as_me: error: '$smbtorture_path' does not  exist!" >&2;}
-   { (exit 1); exit 1; }; }
-    fi
-  ;;
- esac
 
-fi
 
 
-## check for --enable-debug first before checking CFLAGS before
-## so that we don't mix -O and -g
-debug=no
-# Check whether --enable-debug was given.
-if test "${enable_debug+set}" = set; then
-  enableval=$enable_debug; if eval "test x$enable_debug = xyes"; then
-	debug=yes
-    fi
-fi
 
 
-developer=no
-# Check whether --enable-developer was given.
-if test "${enable_developer+set}" = set; then
-  enableval=$enable_developer; if eval "test x$enable_developer = xyes"; then
-        debug=yes
-        developer=yes
-    fi
-fi
 
 
-krb5developer=no
-# Check whether --enable-krb5developer was given.
-if test "${enable_krb5developer+set}" = set; then
-  enableval=$enable_krb5developer; if eval "test x$enable_krb5developer = xyes"; then
-        debug=yes
-        developer=yes
-	krb5_developer=yes
-    fi
-fi
 
 
 
-# Check whether --with-cfenc was given.
-if test "${with_cfenc+set}" = set; then
-  withval=$with_cfenc;
-# May be in source $withval/CoreFoundation/StringEncodings.subproj.
-# Should have been in framework $withval/CoreFoundation.framework/Headers.
-for d in \
-    $withval/CoreFoundation/StringEncodings.subproj \
-    $withval/StringEncodings.subproj \
-    $withval/CoreFoundation.framework/Headers \
-    $withval/Headers \
-    $withval
-do
-    if test -r $d/CFStringEncodingConverter.h; then
-        ln -sfh $d include/CoreFoundation
-    fi
-done
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## check for --enable-debug first before checking CFLAGS before
+## so that we don't mix -O and -g
+# Check whether --enable-debug was given.
+if test "${enable_debug+set}" = set; then
+  enableval=$enable_debug; if eval "test x$enable_debug = xyes"; then
+	CFLAGS="${CFLAGS} -g"
+    fi
 fi
 
 
+# compile with optimization and without debugging by default, but
+# allow people to set their own preference.
+# do this here since AC_CACHE_CHECK apparently sets the CFLAGS to "-g -O2"
+# if it has no value.  This prevent *very* large debug binaries from occurring
+# by default.
+if test "x$CFLAGS" = x; then
+  CFLAGS="-O"
+fi
 
+CFLAGS="${CFLAGS} -D_SAMBA_BUILD_=3"
 
 
 
@@ -3524,35 +3432,6 @@
 #include <wchar.h>
 #include <stdio.h>
 
-// Check varargs macros.  These examples are taken from C99 6.10.3.5.
-#define debug(...) fprintf (stderr, __VA_ARGS__)
-#define showlist(...) puts (#__VA_ARGS__)
-#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
-static void
-test_varargs_macros (void)
-{
-  int x = 1234;
-  int y = 5678;
-  debug ("Flag");
-  debug ("X = %d\n", x);
-  showlist (The first, second, and third items.);
-  report (x>y, "x is %d but y is %d", x, y);
-}
-
-// Check long long types.
-#define BIG64 18446744073709551615ull
-#define BIG32 4294967295ul
-#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
-#if !BIG_OK
-  your preprocessor is broken;
-#endif
-#if BIG_OK
-#else
-  your preprocessor is broken;
-#endif
-static long long int bignum = -9223372036854775807LL;
-static unsigned long long int ubignum = BIG64;
-
 struct incomplete_array
 {
   int datasize;
@@ -3568,7 +3447,7 @@
 typedef const char *ccp;
 
 static inline int
-test_restrict (ccp restrict text)
+test_restrict(ccp restrict text)
 {
   // See if C++-style comments work.
   // Iterate through items via the restricted pointer.
@@ -3578,14 +3457,14 @@
   return 0;
 }
 
-// Check varargs and va_copy.
+// Check varargs and va_copy work.
 static void
-test_varargs (const char *format, ...)
+test_varargs(const char *format, ...)
 {
   va_list args;
-  va_start (args, format);
+  va_start(args, format);
   va_list args_copy;
-  va_copy (args_copy, args);
+  va_copy(args_copy, args);
 
   const char *str;
   int number;
@@ -3596,46 +3475,47 @@
       switch (*format++)
 	{
 	case 's': // string
-	  str = va_arg (args_copy, const char *);
+	  str = va_arg(args_copy, const char *);
 	  break;
 	case 'd': // int
-	  number = va_arg (args_copy, int);
+	  number = va_arg(args_copy, int);
 	  break;
 	case 'f': // float
-	  fnumber = va_arg (args_copy, double);
+	  fnumber = (float) va_arg(args_copy, double);
 	  break;
 	default:
 	  break;
 	}
     }
-  va_end (args_copy);
-  va_end (args);
+  va_end(args_copy);
+  va_end(args);
 }
 
 int
 main ()
 {
 
-  // Check bool.
+  // Check bool and long long datatypes.
   _Bool success = false;
+  long long int bignum = -1234567890LL;
+  unsigned long long int ubignum = 1234567890uLL;
 
   // Check restrict.
-  if (test_restrict ("String literal") == 0)
+  if (test_restrict("String literal") != 0)
     success = true;
   char *restrict newvar = "Another string";
 
   // Check varargs.
-  test_varargs ("s, d' f .", "string", 65, 34.234);
-  test_varargs_macros ();
+  test_varargs("s, d' f .", "string", 65, 34.234);
 
-  // Check flexible array members.
+  // Check incomplete arrays work.
   struct incomplete_array *ia =
-    malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+    malloc(sizeof(struct incomplete_array) + (sizeof(double) * 10));
   ia->datasize = 10;
   for (int i = 0; i < ia->datasize; ++i)
-    ia->data[i] = i * 1.234;
+    ia->data[i] = (double) i * 1.234;
 
-  // Check named initializers.
+  // Check named initialisers.
   struct named_init ni = {
     .number = 34,
     .name = L"Test wide string",
@@ -3645,11 +3525,10 @@
   ni.number = 58;
 
   int dynamic_array[ni.number];
-  dynamic_array[ni.number - 1] = 543;
+  dynamic_array[43] = 543;
 
   // work around unused variable warnings
-  return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'
-	  || dynamic_array[ni.number - 1] != 543);
+  return  bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x';
 
   ;
   return 0;
@@ -4498,12 +4377,7 @@
 echo "$as_me: WARNING: minix/config.h: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: minix/config.h: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: minix/config.h: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for minix/config.h" >&5
@@ -4612,11 +4486,7 @@
 #define _POSIX_PTHREAD_SEMANTICS 1
 _ACEOF
 
-  cat >>confdefs.h <<\_ACEOF
-#define _TANDEM_SOURCE 1
-_ACEOF
 
-
 { echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5
 echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6; }
 if test "${ac_cv_c_bigendian+set}" = set; then
@@ -5361,16 +5231,24 @@
 fi
 
 
+  cat >>confdefs.h <<\EOF
+#ifndef _XOPEN_SOURCE_EXTENDED
+# define _XOPEN_SOURCE_EXTENDED 1
+#endif
+EOF
 
 
 
- cat >>confdefs.h <<\EOF
-#ifndef _XOPEN_SOURCE_EXTENDED
-#define _XOPEN_SOURCE_EXTENDED 1
+
+  cat >>confdefs.h <<\EOF
+#ifndef _OSF_SOURCE
+# define _OSF_SOURCE 1
 #endif
 EOF
 
 
+
+
 # Check whether --enable-largefile was given.
 if test "${enable_largefile+set}" = set; then
   enableval=$enable_largefile;
@@ -5735,10 +5613,10 @@
 #define MMAP_BLACKLIST 1
 _ACEOF
 
-		if test "`uname -r`" = "B.11.00" -o "`uname -r`" = "B.11.11"; then
-			{ echo "$as_me:$LINENO: WARNING: Enabling HPUX 11.00/11.11 header bug workaround" >&5
-echo "$as_me: WARNING: Enabling HPUX 11.00/11.11 header bug workaround" >&2;}
-			CFLAGS="$CFLAGS -Dpread=pread64 -Dpwrite=pwrite64"
+		if test "`uname -r`" = "B.11.11"; then
+			{ echo "$as_me:$LINENO: WARNING: Enabling HPUX 11.11 header bug workaround" >&5
+echo "$as_me: WARNING: Enabling HPUX 11.11 header bug workaround" >&2;}
+			CFLAGS="$CFLAGS -D_LARGEFILE64_SUPPORT -D__LP64__ -DO_LARGEFILE=04000"
 		fi
 		if test "`uname -r`" = "B.11.23"; then
 			{ echo "$as_me:$LINENO: WARNING: Enabling HPUX 11.23 machine/sys/getppdp.h bug workaround" >&5
@@ -5762,29 +5640,6 @@
 			CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
 		fi
 		;;
-	*osf*)
-		# this brings in socklen_t
-
-
-
-
- cat >>confdefs.h <<\EOF
-#ifndef _XOPEN_SOURCE
-#define _XOPEN_SOURCE 600
-#endif
-EOF
-
-
-
-
-
- cat >>confdefs.h <<\EOF
-#ifndef _OSF_SOURCE
-#define _OSF_SOURCE 1
-#endif
-EOF
-
-		;;
 	#
 	# VOS may need to have POSIX support and System V compatibility enabled.
 	#
@@ -5932,12 +5787,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -10021,74 +9871,11 @@
 else
 
 cat >>confdefs.h <<_ACEOF
-#define intptr_t long long
+#define intptr_t unsigned long long
 _ACEOF
 
 fi
 
-{ echo "$as_me:$LINENO: checking for uintptr_t" >&5
-echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6; }
-if test "${ac_cv_type_uintptr_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-typedef uintptr_t ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_type_uintptr_t=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_type_uintptr_t=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5
-echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6; }
-if test $ac_cv_type_uintptr_t = yes; then
-  :
-else
-
-cat >>confdefs.h <<_ACEOF
-#define uintptr_t unsigned long long
-_ACEOF
-
-fi
-
 { echo "$as_me:$LINENO: checking for ptrdiff_t" >&5
 echo $ECHO_N "checking for ptrdiff_t... $ECHO_C" >&6; }
 if test "${ac_cv_type_ptrdiff_t+set}" = set; then
@@ -10243,973 +10030,6 @@
 
 
 
-tallocdir=""
-tallocpaths=". lib/talloc talloc ../talloc"
-for d in $tallocpaths; do
-	if test -f "$srcdir/$d/talloc.c"; then
-		tallocdir="$d"
-
-		break;
-	fi
-done
-if test x"$tallocdir" = "x"; then
-   { { echo "$as_me:$LINENO: error: cannot find talloc source in $tallocpaths" >&5
-echo "$as_me: error: cannot find talloc source in $tallocpaths" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-TALLOC_OBJ="talloc.o"
-
-
-TALLOC_CFLAGS="-I$srcdir/$tallocdir"
-
-
-TALLOC_LIBS=""
-
-
-{ echo "$as_me:$LINENO: checking for size_t" >&5
-echo $ECHO_N "checking for size_t... $ECHO_C" >&6; }
-if test "${ac_cv_type_size_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-typedef size_t ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_type_size_t=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_type_size_t=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
-echo "${ECHO_T}$ac_cv_type_size_t" >&6; }
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ echo "$as_me:$LINENO: checking size of size_t" >&5
-echo $ECHO_N "checking size of size_t... $ECHO_C" >&6; }
-if test "${ac_cv_sizeof_size_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test "$cross_compiling" = yes; then
-  # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef size_t ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_lo=0 ac_mid=0
-  while :; do
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef size_t ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=$ac_mid; break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo=`expr $ac_mid + 1`
-			if test $ac_lo -le $ac_mid; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			ac_mid=`expr 2 '*' $ac_mid + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef size_t ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=-1 ac_mid=-1
-  while :; do
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef size_t ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_lo=$ac_mid; break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_hi=`expr '(' $ac_mid ')' - 1`
-			if test $ac_mid -le $ac_hi; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			ac_mid=`expr 2 '*' $ac_mid`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo= ac_hi=
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
-  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef size_t ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=$ac_mid
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo=`expr '(' $ac_mid ')' + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in
-?*) ac_cv_sizeof_size_t=$ac_lo;;
-'') if test "$ac_cv_type_size_t" = yes; then
-     { { echo "$as_me:$LINENO: error: cannot compute sizeof (size_t)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (size_t)
-See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }
-   else
-     ac_cv_sizeof_size_t=0
-   fi ;;
-esac
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef size_t ac__type_sizeof_;
-static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
-static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
-  FILE *f = fopen ("conftest.val", "w");
-  if (! f)
-    return 1;
-  if (((long int) (sizeof (ac__type_sizeof_))) < 0)
-    {
-      long int i = longval ();
-      if (i != ((long int) (sizeof (ac__type_sizeof_))))
-	return 1;
-      fprintf (f, "%ld\n", i);
-    }
-  else
-    {
-      unsigned long int i = ulongval ();
-      if (i != ((long int) (sizeof (ac__type_sizeof_))))
-	return 1;
-      fprintf (f, "%lu\n", i);
-    }
-  return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_sizeof_size_t=`cat conftest.val`
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-if test "$ac_cv_type_size_t" = yes; then
-     { { echo "$as_me:$LINENO: error: cannot compute sizeof (size_t)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (size_t)
-See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }
-   else
-     ac_cv_sizeof_size_t=0
-   fi
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.val
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_size_t" >&5
-echo "${ECHO_T}$ac_cv_sizeof_size_t" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t
-_ACEOF
-
-
-{ echo "$as_me:$LINENO: checking for void *" >&5
-echo $ECHO_N "checking for void *... $ECHO_C" >&6; }
-if test "${ac_cv_type_void_p+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-typedef void * ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_type_void_p=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_type_void_p=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_void_p" >&5
-echo "${ECHO_T}$ac_cv_type_void_p" >&6; }
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ echo "$as_me:$LINENO: checking size of void *" >&5
-echo $ECHO_N "checking size of void *... $ECHO_C" >&6; }
-if test "${ac_cv_sizeof_void_p+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test "$cross_compiling" = yes; then
-  # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef void * ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_lo=0 ac_mid=0
-  while :; do
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef void * ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=$ac_mid; break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo=`expr $ac_mid + 1`
-			if test $ac_lo -le $ac_mid; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			ac_mid=`expr 2 '*' $ac_mid + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef void * ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=-1 ac_mid=-1
-  while :; do
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef void * ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_lo=$ac_mid; break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_hi=`expr '(' $ac_mid ')' - 1`
-			if test $ac_mid -le $ac_hi; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			ac_mid=`expr 2 '*' $ac_mid`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo= ac_hi=
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
-  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef void * ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_hi=$ac_mid
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_lo=`expr '(' $ac_mid ')' + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in
-?*) ac_cv_sizeof_void_p=$ac_lo;;
-'') if test "$ac_cv_type_void_p" = yes; then
-     { { echo "$as_me:$LINENO: error: cannot compute sizeof (void *)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (void *)
-See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }
-   else
-     ac_cv_sizeof_void_p=0
-   fi ;;
-esac
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-   typedef void * ac__type_sizeof_;
-static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
-static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
-  FILE *f = fopen ("conftest.val", "w");
-  if (! f)
-    return 1;
-  if (((long int) (sizeof (ac__type_sizeof_))) < 0)
-    {
-      long int i = longval ();
-      if (i != ((long int) (sizeof (ac__type_sizeof_))))
-	return 1;
-      fprintf (f, "%ld\n", i);
-    }
-  else
-    {
-      unsigned long int i = ulongval ();
-      if (i != ((long int) (sizeof (ac__type_sizeof_))))
-	return 1;
-      fprintf (f, "%lu\n", i);
-    }
-  return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_sizeof_void_p=`cat conftest.val`
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-if test "$ac_cv_type_void_p" = yes; then
-     { { echo "$as_me:$LINENO: error: cannot compute sizeof (void *)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (void *)
-See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }
-   else
-     ac_cv_sizeof_void_p=0
-   fi
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.val
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_void_p" >&5
-echo "${ECHO_T}$ac_cv_sizeof_void_p" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
-_ACEOF
-
-
-
-if test $ac_cv_sizeof_size_t -lt $ac_cv_sizeof_void_p; then
-	{ echo "$as_me:$LINENO: WARNING: size_t cannot represent the amount of used memory of a process" >&5
-echo "$as_me: WARNING: size_t cannot represent the amount of used memory of a process" >&2;}
-	{ echo "$as_me:$LINENO: WARNING: please report this to <samba-technical at samba.org>" >&5
-echo "$as_me: WARNING: please report this to <samba-technical at samba.org>" >&2;}
-	{ echo "$as_me:$LINENO: WARNING: sizeof(size_t) = $ac_cv_sizeof_size_t" >&5
-echo "$as_me: WARNING: sizeof(size_t) = $ac_cv_sizeof_size_t" >&2;}
-	{ echo "$as_me:$LINENO: WARNING: sizeof(void *) = $ac_cv_sizeof_void_p" >&5
-echo "$as_me: WARNING: sizeof(void *) = $ac_cv_sizeof_void_p" >&2;}
-	{ { echo "$as_me:$LINENO: error: sizeof(size_t) < sizeof(void *)" >&5
-echo "$as_me: error: sizeof(size_t) < sizeof(void *)" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-
-TALLOC_OBJS=""
-for obj in ${TALLOC_OBJ}; do
-	TALLOC_OBJS="${TALLOC_OBJS} ${tallocdir}/${obj}"
-done
-
-
-# TODO: These should come from m4_include(lib/tdb/libtdb.m4)
-# but currently this fails: things have to get merged from s4.
-tdbdir="lib/tdb"
-
-TDB_CFLAGS="-I${srcdir-.}/$tdbdir/include"
-
-TDB_OBJ="common/tdb.o common/dump.o common/transaction.o common/error.o common/traverse.o"
-TDB_OBJ="$TDB_OBJ common/freelist.o common/freelistcheck.o common/io.o common/lock.o common/open.o"
-
-
-TDB_OBJS=""
-for obj in ${TDB_OBJ}; do
-	TDB_OBJS="${TDB_OBJS} ${tdbdir}/${obj}"
-done
-
-
-SAMBA_CPPFLAGS="-Iinclude -I${srcdir-.}/include  -I. -I${srcdir-.}"
-SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/lib/replace"
-SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TALLOC_CFLAGS}"
-SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TDB_CFLAGS}"
-SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/libaddns"
-SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/librpc"
-
-SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/popt"
-
-## cleanup the $(srcdir) in the Makefile if we are outside of the tree
-if test "x${srcdir-.}" != "x."; then
-	SAMBA_CPPFLAGS=`echo ${SAMBA_CPPFLAGS} | sed -e "s;${srcdir};\$\(srcdir\);g"`
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# compile with optimization and without debugging by default, but
-# allow people to set their own preference.
-# do this here since AC_CACHE_CHECK apparently sets the CFLAGS to "-g -O2"
-# if it has no value.  This prevent *very* large debug binaries from occurring
-# by default.
-if test "x$CFLAGS" = x; then
-  CFLAGS="-O"
-fi
-if test "x$debug" = "xyes" ; then
-	CFLAGS="${CFLAGS} -g"
-else
-	CFLAGS="-O"
-fi
-
-CFLAGS="${CFLAGS} -D_SAMBA_BUILD_=3"
-
 # Check whether --enable-socket-wrapper was given.
 if test "${enable_socket_wrapper+set}" = set; then
   enableval=$enable_socket_wrapper;
@@ -11240,62 +10060,58 @@
 
 
 
-# Check whether --enable-nss-wrapper was given.
-if test "${enable_nss_wrapper+set}" = set; then
-  enableval=$enable_nss_wrapper;
-fi
 
+#################################################
+# set prefix for 'make test'
+selftest_prefix="./"
 
-HAVE_NSS_WRAPPER=no
 
-if eval "test x$developer = xyes"; then
-	enable_nss_wrapper=yes
-fi
+# Check whether --with-selftest-prefix was given.
+if test "${with_selftest_prefix+set}" = set; then
+  withval=$with_selftest_prefix;  case "$withval" in
+  yes|no)
+    { echo "$as_me:$LINENO: WARNING: --with-selftest-prefix called without argument - will use default" >&5
+echo "$as_me: WARNING: --with-selftest-prefix called without argument - will use default" >&2;}
+  ;;
+  * )
+    selftest_prefix="$withval"
+    ;;
+  esac
 
-if eval "test x$enable_nss_wrapper = xyes"; then
-
-cat >>confdefs.h <<\_ACEOF
-#define NSS_WRAPPER 1
-_ACEOF
-
-	HAVE_NSS_WRAPPER=yes
-
-	# this is only used for samba3
-	NSS_WRAPPER_OBJS="lib/nss_wrapper/nss_wrapper.o"
 fi
 
 
+#################################################
+# set path of samba4's smbtorture
+smbtorture4_path=""
 
 
+# Check whether --with-smbtorture4_path was given.
+if test "${with_smbtorture4_path+set}" = set; then
+  withval=$with_smbtorture4_path;  case "$withval" in
+  yes|no)
+    { { echo "$as_me:$LINENO: error: --with-smbtorture4-path should take a path" >&5
+echo "$as_me: error: --with-smbtorture4-path should take a path" >&2;}
+   { (exit 1); exit 1; }; }
+  ;;
+  * )
+    smbtorture4_path="$withval"
+    if test -z "$smbtorture4_path" -a ! -f $smbtorture4_path; then
+    	{ { echo "$as_me:$LINENO: error: '$smbtorture_path' does not  exist!" >&5
+echo "$as_me: error: '$smbtorture_path' does not  exist!" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  ;;
+ esac
 
-
-
-SWAT_SBIN_TARGETS='bin/swat$(EXEEXT)'
-SWAT_INSTALL_TARGETS=installswat
-
-# Check whether --enable-swat was given.
-if test "${enable_swat+set}" = set; then
-  enableval=$enable_swat;
-    case "$enable_swat" in
-	no)
-	    SWAT_SBIN_TARGETS=''
-	    SWAT_INSTALL_TARGETS=''
-	    ;;
-    esac
-
 fi
 
 
-
-
-
-
-
-# Probe the gcc version for extra CFLAGS. We always stash these in
-# DEVELOPER_CFLAGS, so that you can turn them on and off with a simple
-# Makefile edit, avoiding the need to re-run configure.
-if test x"$ac_cv_c_compiler_gnu" = x"yes" ; then
-    	DEVELOPER_CFLAGS="-g -Wall -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -DDEBUG_PASSWORD -DDEVELOPER"
+# Check whether --enable-developer was given.
+if test "${enable_developer+set}" = set; then
+  enableval=$enable_developer; if eval "test x$enable_developer = xyes"; then
+        developer=yes
+    	CFLAGS="${CFLAGS} -gstabs -Wall -Wshadow -Wstrict-prototypes -Wpointer-arith -Wcast-align -Wwrite-strings -DDEBUG_PASSWORD -DDEVELOPER"
 	# Add -Wdeclaration-after-statement if compiler supports it
 	{ echo "$as_me:$LINENO: checking that the C compiler understands -Wdeclaration-after-statement" >&5
 echo $ECHO_N "checking that the C compiler understands -Wdeclaration-after-statement... $ECHO_C" >&6; }
@@ -11375,100 +10191,21 @@
 fi
 { echo "$as_me:$LINENO: result: $samba_cv_HAVE_Wdeclaration_after_statement" >&5
 echo "${ECHO_T}$samba_cv_HAVE_Wdeclaration_after_statement" >&6; }
-
-	if test x"$samba_cv_HAVE_Wdeclaration_after_statement" = x"yes"; then
-	    DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Wdeclaration-after-statement"
-	fi
-
-	#-Werror-implicit-function-declaration
-	{ echo "$as_me:$LINENO: checking that the C compiler understands -Werror-implicit-function-declaration" >&5
-echo $ECHO_N "checking that the C compiler understands -Werror-implicit-function-declaration... $ECHO_C" >&6; }
-if test "${samba_cv_HAVE_Werror_implicit_function_declaration+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-	old_CFLAGS="$CFLAGS";
-	CFLAGS="-Werror-implicit-function-declaration";
-	export CFLAGS;
-	old_CPPFLAGS="$CPPFLAGS";
-	CPPFLAGS="$CPPFLAGS";
-	export CPPFLAGS;
-	old_LDFLAGS="$LDFLAGS";
-	LDFLAGS="$LDFLAGS";
-	export LDFLAGS;
-	if test "$cross_compiling" = yes; then
-  samba_cv_HAVE_Werror_implicit_function_declaration=cross
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-	    int main(void)
-	    {
-	    	return 0;
-	    }
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  samba_cv_HAVE_Werror_implicit_function_declaration=yes
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-samba_cv_HAVE_Werror_implicit_function_declaration=no
+       if test x"$samba_cv_HAVE_Wdeclaration_after_statement" = x"yes"; then
+	    CFLAGS="${CFLAGS} -Wdeclaration-after-statement"
+       fi
+    fi
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
 
 
-	CFLAGS="$old_CFLAGS";
-	old_CFLAGS="";
-	export CFLAGS;
-	CPPFLAGS="$old_CPPFLAGS";
-	old_CPPFLAGS="";
-	export CPPFLAGS;
-	LDFLAGS="$old_LDFLAGS";
-	old_LDFLAGS="";
-	export LDFLAGS;
-
-
+# Check whether --enable-krb5developer was given.
+if test "${enable_krb5developer+set}" = set; then
+  enableval=$enable_krb5developer; if eval "test x$enable_krb5developer = xyes"; then
+        developer=yes
+	CFLAGS="${CFLAGS} -gstabs -Wall -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -DDEBUG_PASSWORD -DDEVELOPER"
+    fi
 fi
-{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_Werror_implicit_function_declaration" >&5
-echo "${ECHO_T}$samba_cv_HAVE_Werror_implicit_function_declaration" >&6; }
-       if test x"$samba_cv_HAVE_Werror_implicit_function_declaration" = x"yes"; then
-	    DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Werror-implicit-function-declaration"
-       fi
 
-	# krb5developer is like developer, except we don't get
-	# -Wstrict-prototypes.
-       if test x"$krb5_developer" != x"$yes" ; then
-	    DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Wstrict-prototypes"
-       fi
-fi
 
 # Check whether --enable-dmalloc was given.
 if test "${enable_dmalloc+set}" = set; then
@@ -11811,9 +10548,6 @@
  	if test "$ac_cv_gnu_ld_date" -lt 20030217; then
  		ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
  	fi
-	if test "$ac_cv_gnu_ld_date" -gt 20030101; then
-		ac_cv_gnu_ld_version_script=yes
-	fi
         else
            { echo "$as_me:$LINENO: checking GNU ld release version" >&5
 echo $ECHO_N "checking GNU ld release version... $ECHO_C" >&6; }
@@ -11833,9 +10567,6 @@
            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
            fi
-           if test "$ac_cv_gnu_ld_vernr_major" -gt 2 || test "$ac_cv_gnu_l= d_vernr_major"=2 && test "$ac_cv_gnu_ld_vernr_minor" -ge 12; then
-             ac_cv_gnu_ld_version_script=yes
-           fi
         fi
 fi
 
@@ -12119,90 +10850,9 @@
 echo "${ECHO_T}$samba_cv_HAVE_w2" >&6; }
 if test x"$samba_cv_HAVE_w2" = x"yes"; then
    Werror_FLAGS="-w2"
-else
-{ echo "$as_me:$LINENO: checking that the C compiler understands -errwarn" >&5
-echo $ECHO_N "checking that the C compiler understands -errwarn... $ECHO_C" >&6; }
-if test "${samba_cv_HAVE_errwarn+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-	old_CFLAGS="$CFLAGS";
-	CFLAGS="-errwarn=%all";
-	export CFLAGS;
-	old_CPPFLAGS="$CPPFLAGS";
-	CPPFLAGS="$CPPFLAGS";
-	export CPPFLAGS;
-	old_LDFLAGS="$LDFLAGS";
-	LDFLAGS="$LDFLAGS";
-	export LDFLAGS;
-	if test "$cross_compiling" = yes; then
-  samba_cv_HAVE_errwarn=cross
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-   int main(void)
-   {
-	return 0;
-   }
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  samba_cv_HAVE_errwarn=yes
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-samba_cv_HAVE_errwarn=no
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
-
-	CFLAGS="$old_CFLAGS";
-	old_CFLAGS="";
-	export CFLAGS;
-	CPPFLAGS="$old_CPPFLAGS";
-	old_CPPFLAGS="";
-	export CPPFLAGS;
-	LDFLAGS="$old_LDFLAGS";
-	old_LDFLAGS="";
-	export LDFLAGS;
-
-fi
-{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_errwarn" >&5
-echo "${ECHO_T}$samba_cv_HAVE_errwarn" >&6; }
-if test x"$samba_cv_HAVE_errwarn" = x"yes"; then
-   Werror_FLAGS="-errwarn=%all"
-fi
-fi
-fi
-
 { echo "$as_me:$LINENO: checking that the C compiler understands volatile" >&5
 echo $ECHO_N "checking that the C compiler understands volatile... $ECHO_C" >&6; }
 if test "${samba_cv_volatile+set}" = set; then
@@ -12268,7 +10918,7 @@
 
 { echo "$as_me:$LINENO: checking that the C compiler understands negative enum values" >&5
 echo $ECHO_N "checking that the C compiler understands negative enum values... $ECHO_C" >&6; }
-if test "${samba_cv_CC_NEGATIVE_ENUM_VALUES+set}" = set; then
+if test "${SMB_BUILD_CC_NEGATIVE_ENUM_VALUES+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
@@ -12325,23 +10975,23 @@
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  samba_cv_CC_NEGATIVE_ENUM_VALUES=yes
+  SMB_BUILD_CC_NEGATIVE_ENUM_VALUES=yes
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-samba_cv__CC_NEGATIVE_ENUM_VALUES=no
+SMB_BUILD_CC_NEGATIVE_ENUM_VALUES=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 fi
-{ echo "$as_me:$LINENO: result: $samba_cv_CC_NEGATIVE_ENUM_VALUES" >&5
-echo "${ECHO_T}$samba_cv_CC_NEGATIVE_ENUM_VALUES" >&6; }
-if test x"$samba_cv_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
+{ echo "$as_me:$LINENO: result: $SMB_BUILD_CC_NEGATIVE_ENUM_VALUES" >&5
+echo "${ECHO_T}$SMB_BUILD_CC_NEGATIVE_ENUM_VALUES" >&6; }
+if test x"$SMB_BUILD_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
 	{ echo "$as_me:$LINENO: WARNING: using --unit-enums for pidl" >&5
 echo "$as_me: WARNING: using --unit-enums for pidl" >&2;}
 	PIDL_ARGS="$PIDL_ARGS --uint-enums"
@@ -12647,12 +11297,6 @@
 { echo "$as_me:$LINENO: result: ${UNAME_P}" >&5
 echo "${ECHO_T}${UNAME_P}" >&6; }
 
-UNAME_I=`(uname -i) 2>/dev/null` || UNAME_I="unknown"
-{ echo "$as_me:$LINENO: checking uname -i" >&5
-echo $ECHO_N "checking uname -i... $ECHO_C" >&6; }
-{ echo "$as_me:$LINENO: result: ${UNAME_I}" >&5
-echo "${ECHO_T}${UNAME_I}" >&6; }
-
   case "$host_os" in
 	*irix6*)
 		#TODO add to libreplace
@@ -12666,9 +11310,9 @@
 DYNEXP=
 
 
-default_static_modules="pdb_smbpasswd pdb_tdbsam rpc_lsarpc rpc_samr rpc_winreg rpc_initshutdown rpc_dssetup rpc_wkssvc rpc_svcctl2 rpc_ntsvcs2 rpc_netlogon rpc_netdfs rpc_srvsvc rpc_spoolss rpc_eventlog2 auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin vfs_default nss_info_template"
+default_static_modules="pdb_smbpasswd pdb_tdbsam rpc_lsa rpc_samr rpc_reg rpc_shutdown rpc_lsa_ds rpc_wkssvc rpc_svcctl rpc_ntsvcs rpc_net rpc_netdfs rpc_srvsvc rpc_spoolss rpc_eventlog rpc_echo auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin vfs_default nss_info_template"
 
-default_shared_modules="vfs_recycle vfs_audit vfs_extd_audit vfs_full_audit vfs_netatalk vfs_fake_perms vfs_default_quota vfs_readonly vfs_cap vfs_expand_msdfs vfs_shadow_copy vfs_shadow_copy2 charset_CP850 charset_CP437 auth_script vfs_readahead vfs_xattr_tdb vfs_streams_xattr"
+default_shared_modules="vfs_recycle vfs_audit vfs_extd_audit vfs_full_audit vfs_netatalk vfs_fake_perms vfs_default_quota vfs_readonly vfs_cap vfs_expand_msdfs vfs_shadow_copy charset_CP850 charset_CP437 auth_script vfs_readahead"
 
 if test "x$developer" = xyes; then
    default_static_modules="$default_static_modules rpc_rpcecho"
@@ -12688,13 +11332,72 @@
 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
 #
       case `uname -r` in
-		*9*|*10*|*11)
+			*9*|*10*)
+				CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_POSIX_SOURCE -D_ALIGNMENT_REQUIRED=1 -D_MAX_ALIGNMENT=4 -DMAX_POSITIVE_LOCK_OFFSET=0x1ffffffffffLL"
 
 cat >>confdefs.h <<\_ACEOF
 #define USE_BOTH_CRYPT_CALLS 1
 _ACEOF
 
-		;;
+
+cat >>confdefs.h <<\_ACEOF
+#define _HPUX_SOURCE 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _POSIX_SOURCE 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _ALIGNMENT_REQUIRED 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _MAX_ALIGNMENT 4
+_ACEOF
+
+				;;
+			*11*)
+				CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_POSIX_SOURCE -D_LARGEFILE64_SOURCE -D_ALIGNMENT_REQUIRED=1 -D_MAX_ALIGNMENT=4 -DMAX_POSITIVE_LOCK_OFFSET=0x1ffffffffffLL"
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_BOTH_CRYPT_CALLS 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _HPUX_SOURCE 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _POSIX_SOURCE 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _LARGEFILE64_SOURCE 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _ALIGNMENT_REQUIRED 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _MAX_ALIGNMENT 4
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _XOPEN_SOURCE_EXTENDED 1
+_ACEOF
+
+				;;
       esac
       ;;
 
@@ -13115,10 +11818,7 @@
 
 esac
 
-SAVE_CPPFLAGS="${CPPFLAGS}"
-CPPFLAGS="${CPPFLAGS} ${SAMBA_CONFIGURE_CPPFLAGS}"
 
-
 echo "LIBREPLACE_BROKEN_CHECKS: START"
 
 libreplacedir=""
@@ -14091,12 +12791,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -14236,12 +12931,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -14377,12 +13067,7 @@
 echo "$as_me: WARNING: stdint.h: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: stdint.h: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: stdint.h: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for stdint.h" >&5
@@ -14518,12 +13203,7 @@
 echo "$as_me: WARNING: stdbool.h: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: stdbool.h: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: stdbool.h: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for stdbool.h" >&5
@@ -14687,12 +13367,12 @@
 
 { echo "$as_me:$LINENO: checking for working mmap" >&5
 echo $ECHO_N "checking for working mmap... $ECHO_C" >&6; }
-if test "${libreplace_cv_HAVE_MMAP+set}" = set; then
+if test "${samba_cv_HAVE_MMAP+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
 if test "$cross_compiling" = yes; then
-  libreplace_cv_HAVE_MMAP=cross
+  samba_cv_HAVE_MMAP=cross
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -14722,23 +13402,23 @@
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  libreplace_cv_HAVE_MMAP=yes
+  samba_cv_HAVE_MMAP=yes
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-libreplace_cv_HAVE_MMAP=no
+samba_cv_HAVE_MMAP=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_HAVE_MMAP" >&5
-echo "${ECHO_T}$libreplace_cv_HAVE_MMAP" >&6; }
-if test x"$libreplace_cv_HAVE_MMAP" = x"yes"; then
+{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_MMAP" >&5
+echo "${ECHO_T}$samba_cv_HAVE_MMAP" >&6; }
+if test x"$samba_cv_HAVE_MMAP" = x"yes"; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_MMAP 1
@@ -14864,12 +13544,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -15010,12 +13685,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -15156,12 +13826,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -15187,7 +13852,9 @@
 
 
 
-for ac_header in sys/mount.h mntent.h
+
+
+for ac_header in sys/socket.h netinet/in.h netdb.h arpa/inet.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
@@ -15302,12 +13969,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -15332,7 +13994,10 @@
 done
 
 
-for ac_header in stropts.h
+
+
+
+for ac_header in netinet/ip.h netinet/tcp.h netinet/in_systm.h netinet/in_ip.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
@@ -15447,12 +14112,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -15478,73 +14138,446 @@
 
 
 
+for ac_header in sys/sockio.h sys/un.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+	ac_header_compiler=no
+fi
 
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
 
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+  ac_header_preproc=no
+fi
 
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
 
-for ac_func in seteuid setresuid setegid setresgid chroot bzero strerror
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in stropts.h
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
 else
-  cat >conftest.$ac_ext <<_ACEOF
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
+	ac_header_compiler=no
+fi
 
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
 
-#undef $ac_func
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+{ echo "$as_me:$LINENO: checking for usable net/if.h" >&5
+echo $ECHO_N "checking for usable net/if.h... $ECHO_C" >&6; }
+if test "${libreplace_cv_USABLE_NET_IF_H+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+	cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+		$ac_includes_default
+		#if HAVE_SYS_SOCKET_H
+		# include <sys/socket.h>
+		#endif
+		#include <net/if.h>
+		int main(void) {return 0;}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  libreplace_cv_USABLE_NET_IF_H=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	libreplace_cv_USABLE_NET_IF_H=no
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ echo "$as_me:$LINENO: result: $libreplace_cv_USABLE_NET_IF_H" >&5
+echo "${ECHO_T}$libreplace_cv_USABLE_NET_IF_H" >&6; }
+if test x"$libreplace_cv_USABLE_NET_IF_H" = x"yes";then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_NET_IF_H 1
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for broken inet_ntoa" >&5
+echo $ECHO_N "checking for broken inet_ntoa... $ECHO_C" >&6; }
+if test "${samba_cv_REPLACE_INET_NTOA+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+if test "$cross_compiling" = yes; then
+  samba_cv_REPLACE_INET_NTOA=cross
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <netinet/in.h>
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
 #endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
+main() { struct in_addr ip; ip.s_addr = 0x12345678;
+if (strcmp(inet_ntoa(ip),"18.52.86.120") &&
+    strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); }
+exit(1);}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  samba_cv_REPLACE_INET_NTOA=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+( exit $ac_status )
+samba_cv_REPLACE_INET_NTOA=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $samba_cv_REPLACE_INET_NTOA" >&5
+echo "${ECHO_T}$samba_cv_REPLACE_INET_NTOA" >&6; }
+if test x"$samba_cv_REPLACE_INET_NTOA" = x"yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define REPLACE_INET_NTOA 1
+_ACEOF
+
+fi
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <sys/types.h>
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <stddef.h>
+#endif
+#include <sys/socket.h>
 int
 main ()
 {
-return $ac_func ();
+socklen_t foo;
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
 eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
+  (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
@@ -15553,37 +14586,29 @@
   (exit $ac_status); } && {
 	 test -z "$ac_c_werror_flag" ||
 	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_var=yes"
+       } && test -s conftest.$ac_objext; then
+  :
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-	eval "$as_ac_var=no"
-fi
 
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+cat >>confdefs.h <<\_ACEOF
+#define socklen_t int
 _ACEOF
 
 fi
-done
 
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
 
 
 
 
-for ac_func in vsyslog setlinebuf mktime ftruncate chsize rename
+
+
+for ac_func in seteuid setresuid setegid setresgid chroot bzero strerror
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 { echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -15682,7 +14707,7 @@
 
 
 
-for ac_func in waitpid strlcpy strlcat initgroups memmove strdup
+for ac_func in vsyslog setlinebuf mktime ftruncate chsize rename
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 { echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -15781,7 +14806,7 @@
 
 
 
-for ac_func in pread pwrite strndup strcasestr strtok_r mkdtemp
+for ac_func in waitpid strlcpy strlcat initgroups memmove strdup
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 { echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -15875,7 +14900,13 @@
 done
 
 
-for ac_func in isatty
+
+
+
+
+
+
+for ac_func in pread pwrite strndup strcasestr strtok_r mkdtemp socketpair
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 { echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -16148,12 +15179,12 @@
 
 { echo "$as_me:$LINENO: checking for secure mkstemp" >&5
 echo $ECHO_N "checking for secure mkstemp... $ECHO_C" >&6; }
-if test "${libreplace_cv_HAVE_SECURE_MKSTEMP+set}" = set; then
+if test "${samba_cv_HAVE_SECURE_MKSTEMP+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
 if test "$cross_compiling" = yes; then
-  libreplace_cv_HAVE_SECURE_MKSTEMP=cross
+  samba_cv_HAVE_SECURE_MKSTEMP=cross
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -16196,23 +15227,23 @@
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  libreplace_cv_HAVE_SECURE_MKSTEMP=yes
+  samba_cv_HAVE_SECURE_MKSTEMP=yes
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-libreplace_cv_HAVE_SECURE_MKSTEMP=no
+samba_cv_HAVE_SECURE_MKSTEMP=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_HAVE_SECURE_MKSTEMP" >&5
-echo "${ECHO_T}$libreplace_cv_HAVE_SECURE_MKSTEMP" >&6; }
-if test x"$libreplace_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then
+{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_SECURE_MKSTEMP" >&5
+echo "${ECHO_T}$samba_cv_HAVE_SECURE_MKSTEMP" >&6; }
+if test x"$samba_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_SECURE_MKSTEMP 1
@@ -16337,12 +15368,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -16732,12 +15758,12 @@
 
 { echo "$as_me:$LINENO: checking for C99 vsnprintf" >&5
 echo $ECHO_N "checking for C99 vsnprintf... $ECHO_C" >&6; }
-if test "${libreplace_cv_HAVE_C99_VSNPRINTF+set}" = set; then
+if test "${samba_cv_HAVE_C99_VSNPRINTF+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
 if test "$cross_compiling" = yes; then
-  libreplace_cv_HAVE_C99_VSNPRINTF=cross
+  samba_cv_HAVE_C99_VSNPRINTF=cross
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -16799,23 +15825,23 @@
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  libreplace_cv_HAVE_C99_VSNPRINTF=yes
+  samba_cv_HAVE_C99_VSNPRINTF=yes
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-libreplace_cv_HAVE_C99_VSNPRINTF=no
+samba_cv_HAVE_C99_VSNPRINTF=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_HAVE_C99_VSNPRINTF" >&5
-echo "${ECHO_T}$libreplace_cv_HAVE_C99_VSNPRINTF" >&6; }
-if test x"$libreplace_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
+{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_C99_VSNPRINTF" >&5
+echo "${ECHO_T}$samba_cv_HAVE_C99_VSNPRINTF" >&6; }
+if test x"$samba_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_C99_VSNPRINTF 1
@@ -16826,7 +15852,7 @@
 
 { echo "$as_me:$LINENO: checking for va_copy" >&5
 echo $ECHO_N "checking for va_copy... $ECHO_C" >&6; }
-if test "${libreplace_cv_HAVE_VA_COPY+set}" = set; then
+if test "${samba_cv_HAVE_VA_COPY+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
@@ -16864,20 +15890,20 @@
 	 test ! -s conftest.err
        } && test -s conftest$ac_exeext &&
        $as_test_x conftest$ac_exeext; then
-  libreplace_cv_HAVE_VA_COPY=yes
+  samba_cv_HAVE_VA_COPY=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-	libreplace_cv_HAVE_VA_COPY=no
+	samba_cv_HAVE_VA_COPY=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_HAVE_VA_COPY" >&5
-echo "${ECHO_T}$libreplace_cv_HAVE_VA_COPY" >&6; }
-if test x"$libreplace_cv_HAVE_VA_COPY" = x"yes"; then
+{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_VA_COPY" >&5
+echo "${ECHO_T}$samba_cv_HAVE_VA_COPY" >&6; }
+if test x"$samba_cv_HAVE_VA_COPY" = x"yes"; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_VA_COPY 1
@@ -16885,10 +15911,10 @@
 
 fi
 
-if test x"$libreplace_cv_HAVE_VA_COPY" != x"yes"; then
+if test x"$samba_cv_HAVE_VA_COPY" != x"yes"; then
 { echo "$as_me:$LINENO: checking for __va_copy" >&5
 echo $ECHO_N "checking for __va_copy... $ECHO_C" >&6; }
-if test "${libreplace_cv_HAVE___VA_COPY+set}" = set; then
+if test "${samba_cv_HAVE___VA_COPY+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
@@ -16926,20 +15952,20 @@
 	 test ! -s conftest.err
        } && test -s conftest$ac_exeext &&
        $as_test_x conftest$ac_exeext; then
-  libreplace_cv_HAVE___VA_COPY=yes
+  samba_cv_HAVE___VA_COPY=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-	libreplace_cv_HAVE___VA_COPY=no
+	samba_cv_HAVE___VA_COPY=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_HAVE___VA_COPY" >&5
-echo "${ECHO_T}$libreplace_cv_HAVE___VA_COPY" >&6; }
-if test x"$libreplace_cv_HAVE___VA_COPY" = x"yes"; then
+{ echo "$as_me:$LINENO: result: $samba_cv_HAVE___VA_COPY" >&5
+echo "${ECHO_T}$samba_cv_HAVE___VA_COPY" >&6; }
+if test x"$samba_cv_HAVE___VA_COPY" = x"yes"; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE___VA_COPY 1
@@ -16950,7 +15976,7 @@
 
 { echo "$as_me:$LINENO: checking for __FUNCTION__ macro" >&5
 echo $ECHO_N "checking for __FUNCTION__ macro... $ECHO_C" >&6; }
-if test "${libreplace_cv_HAVE_FUNCTION_MACRO+set}" = set; then
+if test "${samba_cv_HAVE_FUNCTION_MACRO+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
@@ -16986,19 +16012,19 @@
 	 test -z "$ac_c_werror_flag" ||
 	 test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  libreplace_cv_HAVE_FUNCTION_MACRO=yes
+  samba_cv_HAVE_FUNCTION_MACRO=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-	libreplace_cv_HAVE_FUNCTION_MACRO=no
+	samba_cv_HAVE_FUNCTION_MACRO=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_HAVE_FUNCTION_MACRO" >&5
-echo "${ECHO_T}$libreplace_cv_HAVE_FUNCTION_MACRO" >&6; }
-if test x"$libreplace_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
+{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_FUNCTION_MACRO" >&5
+echo "${ECHO_T}$samba_cv_HAVE_FUNCTION_MACRO" >&6; }
+if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_FUNCTION_MACRO 1
@@ -17007,7 +16033,7 @@
 else
         { echo "$as_me:$LINENO: checking for __func__ macro" >&5
 echo $ECHO_N "checking for __func__ macro... $ECHO_C" >&6; }
-if test "${libreplace_cv_HAVE_func_MACRO+set}" = set; then
+if test "${samba_cv_HAVE_func_MACRO+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
@@ -17043,19 +16069,19 @@
 	 test -z "$ac_c_werror_flag" ||
 	 test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  libreplace_cv_HAVE_func_MACRO=yes
+  samba_cv_HAVE_func_MACRO=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-	libreplace_cv_HAVE_func_MACRO=no
+	samba_cv_HAVE_func_MACRO=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_HAVE_func_MACRO" >&5
-echo "${ECHO_T}$libreplace_cv_HAVE_func_MACRO" >&6; }
-    if test x"$libreplace_cv_HAVE_func_MACRO" = x"yes"; then
+{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_func_MACRO" >&5
+echo "${ECHO_T}$samba_cv_HAVE_func_MACRO" >&6; }
+    if test x"$samba_cv_HAVE_func_MACRO" = x"yes"; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_func_MACRO 1
@@ -17181,12 +16207,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -17664,10 +16685,111 @@
 
 rm -f conftest.err conftest.$ac_ext
 
+# Check prerequisites
 
+
+
+for ac_func in memset printf syslog
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+   { { echo "$as_me:$LINENO: error: Required function not found" >&5
+echo "$as_me: error: Required function not found" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+done
+
+
 { echo "$as_me:$LINENO: checking for sig_atomic_t type" >&5
 echo $ECHO_N "checking for sig_atomic_t type... $ECHO_C" >&6; }
-if test "${libreplace_cv_sig_atomic_t+set}" = set; then
+if test "${samba_cv_sig_atomic_t+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
@@ -17709,19 +16831,19 @@
 	 test -z "$ac_c_werror_flag" ||
 	 test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  libreplace_cv_sig_atomic_t=yes
+  samba_cv_sig_atomic_t=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-	libreplace_cv_sig_atomic_t=no
+	samba_cv_sig_atomic_t=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_sig_atomic_t" >&5
-echo "${ECHO_T}$libreplace_cv_sig_atomic_t" >&6; }
-if test x"$libreplace_cv_sig_atomic_t" = x"yes"; then
+{ echo "$as_me:$LINENO: result: $samba_cv_sig_atomic_t" >&5
+echo "${ECHO_T}$samba_cv_sig_atomic_t" >&6; }
+if test x"$samba_cv_sig_atomic_t" = x"yes"; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_SIG_ATOMIC_T_TYPE 1
@@ -17732,7 +16854,7 @@
 
 { echo "$as_me:$LINENO: checking for O_DIRECT flag to open(2)" >&5
 echo $ECHO_N "checking for O_DIRECT flag to open(2)... $ECHO_C" >&6; }
-if test "${libreplace_cv_HAVE_OPEN_O_DIRECT+set}" = set; then
+if test "${samba_cv_HAVE_OPEN_O_DIRECT+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
@@ -17772,19 +16894,19 @@
 	 test -z "$ac_c_werror_flag" ||
 	 test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  libreplace_cv_HAVE_OPEN_O_DIRECT=yes
+  samba_cv_HAVE_OPEN_O_DIRECT=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-	libreplace_cv_HAVE_OPEN_O_DIRECT=no
+	samba_cv_HAVE_OPEN_O_DIRECT=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_HAVE_OPEN_O_DIRECT" >&5
-echo "${ECHO_T}$libreplace_cv_HAVE_OPEN_O_DIRECT" >&6; }
-if test x"$libreplace_cv_HAVE_OPEN_O_DIRECT" = x"yes"; then
+{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_OPEN_O_DIRECT" >&5
+echo "${ECHO_T}$samba_cv_HAVE_OPEN_O_DIRECT" >&6; }
+if test x"$samba_cv_HAVE_OPEN_O_DIRECT" = x"yes"; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_OPEN_O_DIRECT 1
@@ -17793,9 +16915,27 @@
 fi
 
 
+{ echo "$as_me:$LINENO: checking that the C compiler can precompile header files" >&5
+echo $ECHO_N "checking that the C compiler can precompile header files... $ECHO_C" >&6; }
+if test "${samba_cv_precompiled_headers+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+		touch conftest.h
+	if ${CC-cc} conftest.h 2> /dev/null && test -f conftest.h.gch; then
+		precompiled_headers=yes
+	else
+		precompiled_headers=no
+	fi
+fi
+{ echo "$as_me:$LINENO: result: $samba_cv_precompiled_headers" >&5
+echo "${ECHO_T}$samba_cv_precompiled_headers" >&6; }
+
+
+
 { echo "$as_me:$LINENO: checking that the C compiler understands volatile" >&5
 echo $ECHO_N "checking that the C compiler understands volatile... $ECHO_C" >&6; }
-if test "${libreplace_cv_volatile+set}" = set; then
+if test "${samba_cv_volatile+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
@@ -17831,19 +16971,19 @@
 	 test -z "$ac_c_werror_flag" ||
 	 test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  libreplace_cv_volatile=yes
+  samba_cv_volatile=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-	libreplace_cv_volatile=no
+	samba_cv_volatile=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_volatile" >&5
-echo "${ECHO_T}$libreplace_cv_volatile" >&6; }
-if test x"$libreplace_cv_volatile" = x"yes"; then
+{ echo "$as_me:$LINENO: result: $samba_cv_volatile" >&5
+echo "${ECHO_T}$samba_cv_volatile" >&6; }
+if test x"$samba_cv_volatile" = x"yes"; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_VOLATILE 1
@@ -18216,12 +17356,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -18362,12 +17497,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -18509,12 +17639,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -18657,12 +17782,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -18748,101 +17868,6 @@
 fi
 
 
-
-for ac_func in utime utimes
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_var=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
 # wait
 { echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5
 echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6; }
@@ -19029,12 +18054,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -19059,144 +18079,6 @@
 done
 
 
-case "$host_os" in
-*linux*)
-{ echo "$as_me:$LINENO: checking for broken RedHat 7.2 system header files" >&5
-echo $ECHO_N "checking for broken RedHat 7.2 system header files... $ECHO_C" >&6; }
-if test "${libreplace_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-	#ifdef HAVE_SYS_VFS_H
-	#include <sys/vfs.h>
-	#endif
-	#ifdef HAVE_SYS_CAPABILITY_H
-	#include <sys/capability.h>
-	#endif
-
-int
-main ()
-{
-
-	int i;
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  libreplace_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	libreplace_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=yes
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS" >&5
-echo "${ECHO_T}$libreplace_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS" >&6; }
-if test x"$libreplace_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS" = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
-#define BROKEN_REDHAT_7_SYSTEM_HEADERS 1
-_ACEOF
-
-fi
-
-{ echo "$as_me:$LINENO: checking for broken RHEL5 sys/capability.h" >&5
-echo $ECHO_N "checking for broken RHEL5 sys/capability.h... $ECHO_C" >&6; }
-if test "${libreplace_cv_BROKEN_RHEL5_SYS_CAP_HEADER+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-	#ifdef HAVE_SYS_CAPABILITY_H
-	#include <sys/capability.h>
-	#endif
-	#include <linux/types.h>
-
-int
-main ()
-{
-
-	__s8 i;
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  libreplace_cv_BROKEN_RHEL5_SYS_CAP_HEADER=no
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	libreplace_cv_BROKEN_RHEL5_SYS_CAP_HEADER=yes
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_BROKEN_RHEL5_SYS_CAP_HEADER" >&5
-echo "${ECHO_T}$libreplace_cv_BROKEN_RHEL5_SYS_CAP_HEADER" >&6; }
-if test x"$libreplace_cv_BROKEN_RHEL5_SYS_CAP_HEADER" = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
-#define BROKEN_RHEL5_SYS_CAP_HEADER 1
-_ACEOF
-
-fi
-;;
-esac
-
 # passwd
 
 
@@ -19320,12 +18202,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -19350,615 +18227,6 @@
 done
 
 
-
-
-for ac_func in getpwnam_r getpwuid_r getpwent_r
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_var=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
- { echo "$as_me:$LINENO: checking for getpwent_r declaration" >&5
-echo $ECHO_N "checking for getpwent_r declaration... $ECHO_C" >&6; }
-if test "${ac_cv_have_getpwent_r_decl+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-	#include <unistd.h>
-	#include <pwd.h>
-
-int
-main ()
-{
-int i = (int)getpwent_r
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_have_getpwent_r_decl=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_have_getpwent_r_decl=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_getpwent_r_decl" >&5
-echo "${ECHO_T}$ac_cv_have_getpwent_r_decl" >&6; }
- if test x"$ac_cv_have_getpwent_r_decl" = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_GETPWENT_R_DECL 1
-_ACEOF
-
- fi
-
-{ echo "$as_me:$LINENO: checking for prototype struct passwd *getpwent_r(struct passwd *src, char *buf, int buflen)" >&5
-echo $ECHO_N "checking for prototype struct passwd *getpwent_r(struct passwd *src, char *buf, int buflen)... $ECHO_C" >&6; }
-if test "${ac_cv_c_prototype_struct_passwd_pgetpwent_r_struct_passwd_psrc__char_pbuf__int_buflen_+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-		$ac_includes_default
-
-	#include <unistd.h>
-	#include <pwd.h>
-
-		struct passwd *getpwent_r(struct passwd *src, char *buf, int buflen)
-		{
-
-	#ifndef HAVE_GETPWENT_R_DECL
-	#error missing getpwent_r prototype
-	#endif
-	return NULL;
-
-		}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-
-		ac_cv_c_prototype_struct_passwd_pgetpwent_r_struct_passwd_psrc__char_pbuf__int_buflen_=yes
-
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-		ac_cv_c_prototype_struct_passwd_pgetpwent_r_struct_passwd_psrc__char_pbuf__int_buflen_=no
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_c_prototype_struct_passwd_pgetpwent_r_struct_passwd_psrc__char_pbuf__int_buflen_" >&5
-echo "${ECHO_T}$ac_cv_c_prototype_struct_passwd_pgetpwent_r_struct_passwd_psrc__char_pbuf__int_buflen_" >&6; }
-if test $ac_cv_c_prototype_struct_passwd_pgetpwent_r_struct_passwd_psrc__char_pbuf__int_buflen_ = yes; then
-
-
-cat >>confdefs.h <<\_ACEOF
-#define SOLARIS_GETPWENT_R 1
-_ACEOF
-
-
-fi
-
-
-{ echo "$as_me:$LINENO: checking for prototype struct passwd *getpwent_r(struct passwd *src, char *buf, size_t buflen)" >&5
-echo $ECHO_N "checking for prototype struct passwd *getpwent_r(struct passwd *src, char *buf, size_t buflen)... $ECHO_C" >&6; }
-if test "${ac_cv_c_prototype_struct_passwd_pgetpwent_r_struct_passwd_psrc__char_pbuf__size_t_buflen_+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-		$ac_includes_default
-
-	#include <unistd.h>
-	#include <pwd.h>
-
-		struct passwd *getpwent_r(struct passwd *src, char *buf, size_t buflen)
-		{
-
-	#ifndef HAVE_GETPWENT_R_DECL
-	#error missing getpwent_r prototype
-	#endif
-	return NULL;
-
-		}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-
-		ac_cv_c_prototype_struct_passwd_pgetpwent_r_struct_passwd_psrc__char_pbuf__size_t_buflen_=yes
-
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-		ac_cv_c_prototype_struct_passwd_pgetpwent_r_struct_passwd_psrc__char_pbuf__size_t_buflen_=no
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_c_prototype_struct_passwd_pgetpwent_r_struct_passwd_psrc__char_pbuf__size_t_buflen_" >&5
-echo "${ECHO_T}$ac_cv_c_prototype_struct_passwd_pgetpwent_r_struct_passwd_psrc__char_pbuf__size_t_buflen_" >&6; }
-if test $ac_cv_c_prototype_struct_passwd_pgetpwent_r_struct_passwd_psrc__char_pbuf__size_t_buflen_ = yes; then
-
-
-cat >>confdefs.h <<\_ACEOF
-#define SOLARIS_GETPWENT_R 1
-_ACEOF
-
-
-fi
-
-
-
-
-
-for ac_func in getgrnam_r getgrgid_r getgrent_r
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_var=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
- { echo "$as_me:$LINENO: checking for getgrent_r declaration" >&5
-echo $ECHO_N "checking for getgrent_r declaration... $ECHO_C" >&6; }
-if test "${ac_cv_have_getgrent_r_decl+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-	#include <unistd.h>
-	#include <grp.h>
-
-int
-main ()
-{
-int i = (int)getgrent_r
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_have_getgrent_r_decl=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_have_getgrent_r_decl=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_getgrent_r_decl" >&5
-echo "${ECHO_T}$ac_cv_have_getgrent_r_decl" >&6; }
- if test x"$ac_cv_have_getgrent_r_decl" = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_GETGRENT_R_DECL 1
-_ACEOF
-
- fi
-
-{ echo "$as_me:$LINENO: checking for prototype struct group *getgrent_r(struct group *src, char *buf, int buflen)" >&5
-echo $ECHO_N "checking for prototype struct group *getgrent_r(struct group *src, char *buf, int buflen)... $ECHO_C" >&6; }
-if test "${ac_cv_c_prototype_struct_group_pgetgrent_r_struct_group_psrc__char_pbuf__int_buflen_+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-		$ac_includes_default
-
-	#include <unistd.h>
-	#include <grp.h>
-
-		struct group *getgrent_r(struct group *src, char *buf, int buflen)
-		{
-
-	#ifndef HAVE_GETGRENT_R_DECL
-	#error missing getgrent_r prototype
-	#endif
-	return NULL;
-
-		}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-
-		ac_cv_c_prototype_struct_group_pgetgrent_r_struct_group_psrc__char_pbuf__int_buflen_=yes
-
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-		ac_cv_c_prototype_struct_group_pgetgrent_r_struct_group_psrc__char_pbuf__int_buflen_=no
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_c_prototype_struct_group_pgetgrent_r_struct_group_psrc__char_pbuf__int_buflen_" >&5
-echo "${ECHO_T}$ac_cv_c_prototype_struct_group_pgetgrent_r_struct_group_psrc__char_pbuf__int_buflen_" >&6; }
-if test $ac_cv_c_prototype_struct_group_pgetgrent_r_struct_group_psrc__char_pbuf__int_buflen_ = yes; then
-
-
-cat >>confdefs.h <<\_ACEOF
-#define SOLARIS_GETGRENT_R 1
-_ACEOF
-
-
-fi
-
-
-
-{ echo "$as_me:$LINENO: checking for prototype struct group *getgrent_r(struct group *src, char *buf, size_t buflen)" >&5
-echo $ECHO_N "checking for prototype struct group *getgrent_r(struct group *src, char *buf, size_t buflen)... $ECHO_C" >&6; }
-if test "${ac_cv_c_prototype_struct_group_pgetgrent_r_struct_group_psrc__char_pbuf__size_t_buflen_+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-		$ac_includes_default
-
-	#include <unistd.h>
-	#include <grp.h>
-
-		struct group *getgrent_r(struct group *src, char *buf, size_t buflen)
-		{
-
-	#ifndef HAVE_GETGRENT_R_DECL
-	#error missing getgrent_r prototype
-	#endif
-	return NULL;
-
-		}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-
-		ac_cv_c_prototype_struct_group_pgetgrent_r_struct_group_psrc__char_pbuf__size_t_buflen_=yes
-
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-		ac_cv_c_prototype_struct_group_pgetgrent_r_struct_group_psrc__char_pbuf__size_t_buflen_=no
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_c_prototype_struct_group_pgetgrent_r_struct_group_psrc__char_pbuf__size_t_buflen_" >&5
-echo "${ECHO_T}$ac_cv_c_prototype_struct_group_pgetgrent_r_struct_group_psrc__char_pbuf__size_t_buflen_" >&6; }
-if test $ac_cv_c_prototype_struct_group_pgetgrent_r_struct_group_psrc__char_pbuf__size_t_buflen_ = yes; then
-
-
-cat >>confdefs.h <<\_ACEOF
-#define SOLARIS_GETGRENT_R 1
-_ACEOF
-
-
-fi
-
-
-
 # locale
 
 
@@ -20077,12 +18345,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -20224,12 +18487,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -20373,12 +18631,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -20522,12 +18775,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -20641,6 +18889,9 @@
 fi
 
 
+if test x"${ac_cv_search_dlopen}" = x"no"; then
+	libreplace_cv_dlfcn=yes
+else
 
 for ac_header in dlfcn.h
 do
@@ -20757,12 +19008,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -20885,405 +19131,8 @@
 fi
 done
 
-
-libreplace_cv_shl=no
-{ echo "$as_me:$LINENO: checking for library containing shl_load" >&5
-echo $ECHO_N "checking for library containing shl_load... $ECHO_C" >&6; }
-if test "${ac_cv_search_shl_load+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_func_search_save_LIBS=$LIBS
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load ();
-int
-main ()
-{
-return shl_load ();
-  ;
-  return 0;
-}
-_ACEOF
-for ac_lib in '' sl; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_search_shl_load=$ac_res
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 fi
 
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext
-  if test "${ac_cv_search_shl_load+set}" = set; then
-  break
-fi
-done
-if test "${ac_cv_search_shl_load+set}" = set; then
-  :
-else
-  ac_cv_search_shl_load=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_search_shl_load" >&5
-echo "${ECHO_T}$ac_cv_search_shl_load" >&6; }
-ac_res=$ac_cv_search_shl_load
-if test "$ac_res" != no; then
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-
-for ac_header in dl.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-
-for ac_func in shl_load shl_unload shl_findsym
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_var=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-else
-  libreplace_cv_shl=yes
-fi
-done
-
-
-{ echo "$as_me:$LINENO: checking for prototype void *dlopen(const char* filename, unsigned int flags)" >&5
-echo $ECHO_N "checking for prototype void *dlopen(const char* filename, unsigned int flags)... $ECHO_C" >&6; }
-if test "${ac_cv_c_prototype_void_pdlopen_const_charp_filename__unsigned_int_flags_+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-		$ac_includes_default
-
-	#include <dlfcn.h>
-
-		void *dlopen(const char* filename, unsigned int flags)
-		{
-
-	return 0;
-
-		}
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-
-		ac_cv_c_prototype_void_pdlopen_const_charp_filename__unsigned_int_flags_=yes
-
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-		ac_cv_c_prototype_void_pdlopen_const_charp_filename__unsigned_int_flags_=no
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_c_prototype_void_pdlopen_const_charp_filename__unsigned_int_flags_" >&5
-echo "${ECHO_T}$ac_cv_c_prototype_void_pdlopen_const_charp_filename__unsigned_int_flags_" >&6; }
-if test $ac_cv_c_prototype_void_pdlopen_const_charp_filename__unsigned_int_flags_ = yes; then
-
-
-cat >>confdefs.h <<\_ACEOF
-#define DLOPEN_TAKES_UNSIGNED_FLAGS 1
-_ACEOF
-
-
-fi
-
-
-
 if test x"${libreplace_cv_dlfcn}" = x"yes";then
 	LIBREPLACEOBJ="${LIBREPLACEOBJ} dlfcn.o"
 fi
@@ -21374,7 +19223,7 @@
 { echo "$as_me:$LINENO: result: $ac_cv_func_getpass" >&5
 echo "${ECHO_T}$ac_cv_func_getpass" >&6; }
 if test $ac_cv_func_getpass = yes; then
-  libreplace_cv_HAVE_GETPASS=yes
+  samba_cv_HAVE_GETPASS=yes
 fi
 
 { echo "$as_me:$LINENO: checking for getpassphrase" >&5
@@ -21459,10 +19308,10 @@
 { echo "$as_me:$LINENO: result: $ac_cv_func_getpassphrase" >&5
 echo "${ECHO_T}$ac_cv_func_getpassphrase" >&6; }
 if test $ac_cv_func_getpassphrase = yes; then
-  libreplace_cv_HAVE_GETPASSPHRASE=yes
+  samba_cv_HAVE_GETPASSPHRASE=yes
 fi
 
-if test x"$libreplace_cv_HAVE_GETPASS" = x"yes" -a x"$libreplace_cv_HAVE_GETPASSPHRASE" = x"yes"; then
+if test x"$samba_cv_HAVE_GETPASS" = x"yes" -a x"$samba_cv_HAVE_GETPASSPHRASE" = x"yes"; then
 
 cat >>confdefs.h <<\_ACEOF
 #define REPLACE_GETPASS_BY_GETPASSPHRASE 1
@@ -21478,7 +19327,7 @@
 
 { echo "$as_me:$LINENO: checking whether getpass should be replaced" >&5
 echo $ECHO_N "checking whether getpass should be replaced... $ECHO_C" >&6; }
-if test "${libreplace_cv_REPLACE_GETPASS+set}" = set; then
+if test "${samba_cv_REPLACE_GETPASS+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
@@ -21492,8 +19341,11 @@
 /* end confdefs.h.  */
 
 #include "confdefs.h"
-#define NO_CONFIG_H
+#define _LIBREPLACE_REPLACE_H
+#define REPLACE_GETPASS 1
+#define main dont_declare_main
 #include "$libreplacedir/getpass.c"
+#undef main
 
 int
 main ()
@@ -21520,21 +19372,21 @@
 	 test -z "$ac_c_werror_flag" ||
 	 test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  libreplace_cv_REPLACE_GETPASS=yes
+  samba_cv_REPLACE_GETPASS=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-	libreplace_cv_REPLACE_GETPASS=no
+	samba_cv_REPLACE_GETPASS=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 CPPFLAGS="$SAVE_CPPFLAGS"
 
 fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_REPLACE_GETPASS" >&5
-echo "${ECHO_T}$libreplace_cv_REPLACE_GETPASS" >&6; }
-if test x"$libreplace_cv_REPLACE_GETPASS" = x"yes"; then
+{ echo "$as_me:$LINENO: result: $samba_cv_REPLACE_GETPASS" >&5
+echo "${ECHO_T}$samba_cv_REPLACE_GETPASS" >&6; }
+if test x"$samba_cv_REPLACE_GETPASS" = x"yes"; then
 
 cat >>confdefs.h <<\_ACEOF
 #define REPLACE_GETPASS 1
@@ -21730,12 +19582,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -21764,7 +19611,7 @@
 # Check for mkdir mode
 { echo "$as_me:$LINENO: checking whether mkdir supports mode" >&5
 echo $ECHO_N "checking whether mkdir supports mode... $ECHO_C" >&6; }
-if test "${libreplace_cv_mkdir_has_mode+set}" = set; then
+if test "${ac_mkdir_has_mode+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
@@ -21806,20 +19653,20 @@
 	 test -z "$ac_c_werror_flag" ||
 	 test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  libreplace_cv_mkdir_has_mode="yes"
+  ac_mkdir_has_mode="yes"
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-	libreplace_cv_mkdir_has_mode="no"
+	ac_mkdir_has_mode="no"
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_mkdir_has_mode" >&5
-echo "${ECHO_T}$libreplace_cv_mkdir_has_mode" >&6; }
+{ echo "$as_me:$LINENO: result: $ac_mkdir_has_mode" >&5
+echo "${ECHO_T}$ac_mkdir_has_mode" >&6; }
 
-if test "$libreplace_cv_mkdir_has_mode" = "yes"
+if test "$ac_mkdir_has_mode" = "yes"
 then
 
 cat >>confdefs.h <<\_ACEOF
@@ -22086,11 +19933,6 @@
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
 
 		$ac_includes_default
 
@@ -22156,11 +19998,6 @@
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
 
 		$ac_includes_default
 
@@ -22490,8 +20327,7 @@
 
 
 
-
-for ac_func in syslog printf memset memcpy
+for ac_func in syslog memset memcpy
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 { echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -22592,169 +20428,26 @@
 echo "LIBREPLACE_BROKEN_CHECKS: END"
 
 
-echo "LIBREPLACE_NETWORK_CHECKS: START"
+LIBREPLACE_DIR=`echo ${libreplacedir} | sed -e "s;${srcdir};;" -e "s;^/;;"`
 
+LIBREPLACE_OBJS=""
+for obj in ${LIBREPLACEOBJ}; do
+	LIBREPLACE_OBJS="${LIBREPLACE_OBJS} ${LIBREPLACE_DIR}/${obj}"
+done
 
-cat >>confdefs.h <<\_ACEOF
-#define LIBREPLACE_NETWORK_CHECKS 1
-_ACEOF
 
-LIBREPLACE_NETWORK_OBJS=""
-LIBREPLACE_NETWORK_LIBS=""
+# add -ldl to the global LIBS
+LIBS="${LIBS} ${LIBDL}"
 
 
 
 
 
-for ac_header in sys/socket.h netinet/in.h netdb.h arpa/inet.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-	ac_header_compiler=no
-fi
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
 
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-
-
-for ac_header in netinet/ip.h netinet/tcp.h netinet/in_systm.h netinet/in_ip.h
+for ac_header in aio.h arpa/inet.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h rpc/nettype.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
@@ -22869,159 +20562,8 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
 
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-for ac_header in sys/sockio.h sys/un.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
     ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
@@ -23045,2956 +20587,13 @@
 done
 
 
-{ echo "$as_me:$LINENO: checking for usable net/if.h" >&5
-echo $ECHO_N "checking for usable net/if.h... $ECHO_C" >&6; }
-if test "${libreplace_cv_USABLE_NET_IF_H+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
 
-	cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
 
-		$ac_includes_default
-		#if HAVE_SYS_SOCKET_H
-		# include <sys/socket.h>
-		#endif
-		#include <net/if.h>
-		int main(void) {return 0;}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  libreplace_cv_USABLE_NET_IF_H=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-	libreplace_cv_USABLE_NET_IF_H=no
 
-fi
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_USABLE_NET_IF_H" >&5
-echo "${ECHO_T}$libreplace_cv_USABLE_NET_IF_H" >&6; }
-if test x"$libreplace_cv_USABLE_NET_IF_H" = x"yes";then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_NET_IF_H 1
-_ACEOF
-
-fi
-
-
-
-cv=`echo "socklen_t" | sed 'y%./+- %__p__%'`
-{ echo "$as_me:$LINENO: checking for socklen_t" >&5
-echo $ECHO_N "checking for socklen_t... $ECHO_C" >&6; }
-if { as_var=ac_cv_type_$cv; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-$ac_includes_default
-#include <sys/socket.h>
-int
-main ()
-{
-socklen_t foo;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  eval "ac_cv_type_$cv=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "ac_cv_type_$cv=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-ac_foo=`eval echo \\$ac_cv_type_$cv`
-{ echo "$as_me:$LINENO: result: $ac_foo" >&5
-echo "${ECHO_T}$ac_foo" >&6; }
-if test "$ac_foo" = yes; then
-  ac_tr_hdr=HAVE_`echo socklen_t | sed 'y%abcdefghijklmnopqrstuvwxyz./- %ABCDEFGHIJKLMNOPQRSTUVWXYZ____%'`
-if false; then
-	{ echo "$as_me:$LINENO: checking for socklen_t" >&5
-echo $ECHO_N "checking for socklen_t... $ECHO_C" >&6; }
-if test "${ac_cv_type_socklen_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-typedef socklen_t ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_type_socklen_t=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_type_socklen_t=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_socklen_t" >&5
-echo "${ECHO_T}$ac_cv_type_socklen_t" >&6; }
-if test $ac_cv_type_socklen_t = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_SOCKLEN_T 1
-_ACEOF
-
-
-fi
-
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define $ac_tr_hdr 1
-_ACEOF
-
-fi
-
-
-
-cv=`echo "sa_family_t" | sed 'y%./+- %__p__%'`
-{ echo "$as_me:$LINENO: checking for sa_family_t" >&5
-echo $ECHO_N "checking for sa_family_t... $ECHO_C" >&6; }
-if { as_var=ac_cv_type_$cv; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-$ac_includes_default
-#include <sys/socket.h>
-int
-main ()
-{
-sa_family_t foo;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  eval "ac_cv_type_$cv=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "ac_cv_type_$cv=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-ac_foo=`eval echo \\$ac_cv_type_$cv`
-{ echo "$as_me:$LINENO: result: $ac_foo" >&5
-echo "${ECHO_T}$ac_foo" >&6; }
-if test "$ac_foo" = yes; then
-  ac_tr_hdr=HAVE_`echo sa_family_t | sed 'y%abcdefghijklmnopqrstuvwxyz./- %ABCDEFGHIJKLMNOPQRSTUVWXYZ____%'`
-if false; then
-	{ echo "$as_me:$LINENO: checking for sa_family_t" >&5
-echo $ECHO_N "checking for sa_family_t... $ECHO_C" >&6; }
-if test "${ac_cv_type_sa_family_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-typedef sa_family_t ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_type_sa_family_t=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_type_sa_family_t=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_sa_family_t" >&5
-echo "${ECHO_T}$ac_cv_type_sa_family_t" >&6; }
-if test $ac_cv_type_sa_family_t = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_SA_FAMILY_T 1
-_ACEOF
-
-
-fi
-
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define $ac_tr_hdr 1
-_ACEOF
-
-fi
-
-
-
-cv=`echo "struct addrinfo" | sed 'y%./+- %__p__%'`
-{ echo "$as_me:$LINENO: checking for struct addrinfo" >&5
-echo $ECHO_N "checking for struct addrinfo... $ECHO_C" >&6; }
-if { as_var=ac_cv_type_$cv; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-$ac_includes_default
-#include <netdb.h>
-int
-main ()
-{
-struct addrinfo foo;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  eval "ac_cv_type_$cv=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "ac_cv_type_$cv=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-ac_foo=`eval echo \\$ac_cv_type_$cv`
-{ echo "$as_me:$LINENO: result: $ac_foo" >&5
-echo "${ECHO_T}$ac_foo" >&6; }
-if test "$ac_foo" = yes; then
-  ac_tr_hdr=HAVE_`echo struct addrinfo | sed 'y%abcdefghijklmnopqrstuvwxyz./- %ABCDEFGHIJKLMNOPQRSTUVWXYZ____%'`
-if false; then
-	{ echo "$as_me:$LINENO: checking for struct addrinfo" >&5
-echo $ECHO_N "checking for struct addrinfo... $ECHO_C" >&6; }
-if test "${ac_cv_type_struct_addrinfo+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-typedef struct addrinfo ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_type_struct_addrinfo=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_type_struct_addrinfo=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_struct_addrinfo" >&5
-echo "${ECHO_T}$ac_cv_type_struct_addrinfo" >&6; }
-if test $ac_cv_type_struct_addrinfo = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_ADDRINFO 1
-_ACEOF
-
-
-fi
-
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define $ac_tr_hdr 1
-_ACEOF
-
-fi
-
-
-
-cv=`echo "struct sockaddr" | sed 'y%./+- %__p__%'`
-{ echo "$as_me:$LINENO: checking for struct sockaddr" >&5
-echo $ECHO_N "checking for struct sockaddr... $ECHO_C" >&6; }
-if { as_var=ac_cv_type_$cv; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-$ac_includes_default
-#include <sys/socket.h>
-int
-main ()
-{
-struct sockaddr foo;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  eval "ac_cv_type_$cv=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "ac_cv_type_$cv=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-ac_foo=`eval echo \\$ac_cv_type_$cv`
-{ echo "$as_me:$LINENO: result: $ac_foo" >&5
-echo "${ECHO_T}$ac_foo" >&6; }
-if test "$ac_foo" = yes; then
-  ac_tr_hdr=HAVE_`echo struct sockaddr | sed 'y%abcdefghijklmnopqrstuvwxyz./- %ABCDEFGHIJKLMNOPQRSTUVWXYZ____%'`
-if false; then
-	{ echo "$as_me:$LINENO: checking for struct sockaddr" >&5
-echo $ECHO_N "checking for struct sockaddr... $ECHO_C" >&6; }
-if test "${ac_cv_type_struct_sockaddr+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-typedef struct sockaddr ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_type_struct_sockaddr=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_type_struct_sockaddr=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_struct_sockaddr" >&5
-echo "${ECHO_T}$ac_cv_type_struct_sockaddr" >&6; }
-if test $ac_cv_type_struct_sockaddr = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_SOCKADDR 1
-_ACEOF
-
-
-fi
-
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define $ac_tr_hdr 1
-_ACEOF
-
-fi
-
-
-
-cv=`echo "struct sockaddr_storage" | sed 'y%./+- %__p__%'`
-{ echo "$as_me:$LINENO: checking for struct sockaddr_storage" >&5
-echo $ECHO_N "checking for struct sockaddr_storage... $ECHO_C" >&6; }
-if { as_var=ac_cv_type_$cv; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-$ac_includes_default
-
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-
-int
-main ()
-{
-struct sockaddr_storage foo;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  eval "ac_cv_type_$cv=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "ac_cv_type_$cv=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-ac_foo=`eval echo \\$ac_cv_type_$cv`
-{ echo "$as_me:$LINENO: result: $ac_foo" >&5
-echo "${ECHO_T}$ac_foo" >&6; }
-if test "$ac_foo" = yes; then
-  ac_tr_hdr=HAVE_`echo struct sockaddr_storage | sed 'y%abcdefghijklmnopqrstuvwxyz./- %ABCDEFGHIJKLMNOPQRSTUVWXYZ____%'`
-if false; then
-	{ echo "$as_me:$LINENO: checking for struct sockaddr_storage" >&5
-echo $ECHO_N "checking for struct sockaddr_storage... $ECHO_C" >&6; }
-if test "${ac_cv_type_struct_sockaddr_storage+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-typedef struct sockaddr_storage ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_type_struct_sockaddr_storage=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_type_struct_sockaddr_storage=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_struct_sockaddr_storage" >&5
-echo "${ECHO_T}$ac_cv_type_struct_sockaddr_storage" >&6; }
-if test $ac_cv_type_struct_sockaddr_storage = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_SOCKADDR_STORAGE 1
-_ACEOF
-
-
-fi
-
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define $ac_tr_hdr 1
-_ACEOF
-
-fi
-
-
-
-cv=`echo "struct sockaddr_in6" | sed 'y%./+- %__p__%'`
-{ echo "$as_me:$LINENO: checking for struct sockaddr_in6" >&5
-echo $ECHO_N "checking for struct sockaddr_in6... $ECHO_C" >&6; }
-if { as_var=ac_cv_type_$cv; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-$ac_includes_default
-
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-
-int
-main ()
-{
-struct sockaddr_in6 foo;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  eval "ac_cv_type_$cv=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "ac_cv_type_$cv=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-ac_foo=`eval echo \\$ac_cv_type_$cv`
-{ echo "$as_me:$LINENO: result: $ac_foo" >&5
-echo "${ECHO_T}$ac_foo" >&6; }
-if test "$ac_foo" = yes; then
-  ac_tr_hdr=HAVE_`echo struct sockaddr_in6 | sed 'y%abcdefghijklmnopqrstuvwxyz./- %ABCDEFGHIJKLMNOPQRSTUVWXYZ____%'`
-if false; then
-	{ echo "$as_me:$LINENO: checking for struct sockaddr_in6" >&5
-echo $ECHO_N "checking for struct sockaddr_in6... $ECHO_C" >&6; }
-if test "${ac_cv_type_struct_sockaddr_in6+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-typedef struct sockaddr_in6 ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_type_struct_sockaddr_in6=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_type_struct_sockaddr_in6=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_struct_sockaddr_in6" >&5
-echo "${ECHO_T}$ac_cv_type_struct_sockaddr_in6" >&6; }
-if test $ac_cv_type_struct_sockaddr_in6 = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_SOCKADDR_IN6 1
-_ACEOF
-
-
-fi
-
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define $ac_tr_hdr 1
-_ACEOF
-
-fi
-
-
-if test x"$ac_cv_type_struct_sockaddr_storage" = x"yes"; then
-{ echo "$as_me:$LINENO: checking for struct sockaddr_storage.ss_family" >&5
-echo $ECHO_N "checking for struct sockaddr_storage.ss_family... $ECHO_C" >&6; }
-if test "${ac_cv_member_struct_sockaddr_storage_ss_family+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-
-
-int
-main ()
-{
-static struct sockaddr_storage ac_aggr;
-if (ac_aggr.ss_family)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_member_struct_sockaddr_storage_ss_family=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-
-
-int
-main ()
-{
-static struct sockaddr_storage ac_aggr;
-if (sizeof ac_aggr.ss_family)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_member_struct_sockaddr_storage_ss_family=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_member_struct_sockaddr_storage_ss_family=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_sockaddr_storage_ss_family" >&5
-echo "${ECHO_T}$ac_cv_member_struct_sockaddr_storage_ss_family" >&6; }
-if test $ac_cv_member_struct_sockaddr_storage_ss_family = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_SS_FAMILY 1
-_ACEOF
-
-fi
-
-
-if test x"$ac_cv_member_struct_sockaddr_storage_ss_family" != x"yes"; then
-{ echo "$as_me:$LINENO: checking for struct sockaddr_storage.__ss_family" >&5
-echo $ECHO_N "checking for struct sockaddr_storage.__ss_family... $ECHO_C" >&6; }
-if test "${ac_cv_member_struct_sockaddr_storage___ss_family+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-
-
-int
-main ()
-{
-static struct sockaddr_storage ac_aggr;
-if (ac_aggr.__ss_family)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_member_struct_sockaddr_storage___ss_family=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-
-
-int
-main ()
-{
-static struct sockaddr_storage ac_aggr;
-if (sizeof ac_aggr.__ss_family)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_member_struct_sockaddr_storage___ss_family=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_member_struct_sockaddr_storage___ss_family=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_sockaddr_storage___ss_family" >&5
-echo "${ECHO_T}$ac_cv_member_struct_sockaddr_storage___ss_family" >&6; }
-if test $ac_cv_member_struct_sockaddr_storage___ss_family = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE___SS_FAMILY 1
-_ACEOF
-
-fi
-
-fi
-fi
-
-{ echo "$as_me:$LINENO: checking for sin_len in sock" >&5
-echo $ECHO_N "checking for sin_len in sock... $ECHO_C" >&6; }
-if test "${libreplace_cv_HAVE_SOCK_SIN_LEN+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-	cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-
-int
-main ()
-{
-
-struct sockaddr_in sock; sock.sin_len = sizeof(sock);
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-
-		libreplace_cv_HAVE_SOCK_SIN_LEN=yes
-
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-		libreplace_cv_HAVE_SOCK_SIN_LEN=no
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_HAVE_SOCK_SIN_LEN" >&5
-echo "${ECHO_T}$libreplace_cv_HAVE_SOCK_SIN_LEN" >&6; }
-if test x"$libreplace_cv_HAVE_SOCK_SIN_LEN" = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_SOCK_SIN_LEN 1
-_ACEOF
-
-fi
-
-############################################
-# check for unix domain sockets
-{ echo "$as_me:$LINENO: checking for unix domain sockets" >&5
-echo $ECHO_N "checking for unix domain sockets... $ECHO_C" >&6; }
-if test "${libreplace_cv_HAVE_UNIXSOCKET+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-	cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-#include <sys/types.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-int
-main ()
-{
-
-struct sockaddr_un sunaddr;
-sunaddr.sun_family = AF_UNIX;
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-
-		libreplace_cv_HAVE_UNIXSOCKET=yes
-
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-		libreplace_cv_HAVE_UNIXSOCKET=no
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_HAVE_UNIXSOCKET" >&5
-echo "${ECHO_T}$libreplace_cv_HAVE_UNIXSOCKET" >&6; }
-if test x"$libreplace_cv_HAVE_UNIXSOCKET" = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_UNIXSOCKET 1
-_ACEOF
-
-fi
-
-
-for ac_func in connect
+for ac_header in unistd.h utime.h grp.h sys/id.h memory.h alloca.h
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_var=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-if test x"$ac_cv_func_connect" = x"no"; then
-
-
-
-ac_check_lib_ext_save_LIBS=$LIBS
-LIBS="-lnsl_s $LIBREPLACE_NETWORK_LIBS  $LIBS"
-
-
-
-
-        { echo "$as_me:$LINENO: checking for connect in -lnsl_s" >&5
-echo $ECHO_N "checking for connect in -lnsl_s... $ECHO_C" >&6; }
-if test "${ac_cv_lib_ext_nsl_s_connect+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char connect ();
-int
-main ()
-{
-return connect ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_lib_ext_nsl_s_connect=yes;
-		  ac_cv_lib_ext_nsl_s=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_ext_nsl_s_connect=no;
-		  ac_cv_lib_ext_nsl_s=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_ext_nsl_s_connect" >&5
-echo "${ECHO_T}$ac_cv_lib_ext_nsl_s_connect" >&6; }
-    if test $ac_cv_lib_ext_nsl_s_connect = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_CONNECT 1
-_ACEOF
-
-fi
-
-LIBS=$ac_check_lib_ext_save_LIBS
-
-if test $ac_cv_lib_ext_nsl_s = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBNSL_S 1
-_ACEOF
-
-		case "$LIBREPLACE_NETWORK_LIBS" in
-		    *-lnsl_s*)
-			;;
-		    *)
-			LIBREPLACE_NETWORK_LIBS="-lnsl_s $LIBREPLACE_NETWORK_LIBS"
-			;;
-		esac
-
-
-fi
-
-
-
-
-ac_check_lib_ext_save_LIBS=$LIBS
-LIBS="-lnsl $LIBREPLACE_NETWORK_LIBS  $LIBS"
-
-
-
-
-        { echo "$as_me:$LINENO: checking for connect in -lnsl" >&5
-echo $ECHO_N "checking for connect in -lnsl... $ECHO_C" >&6; }
-if test "${ac_cv_lib_ext_nsl_connect+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char connect ();
-int
-main ()
-{
-return connect ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_lib_ext_nsl_connect=yes;
-		  ac_cv_lib_ext_nsl=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_ext_nsl_connect=no;
-		  ac_cv_lib_ext_nsl=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_ext_nsl_connect" >&5
-echo "${ECHO_T}$ac_cv_lib_ext_nsl_connect" >&6; }
-    if test $ac_cv_lib_ext_nsl_connect = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_CONNECT 1
-_ACEOF
-
-fi
-
-LIBS=$ac_check_lib_ext_save_LIBS
-
-if test $ac_cv_lib_ext_nsl = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBNSL 1
-_ACEOF
-
-		case "$LIBREPLACE_NETWORK_LIBS" in
-		    *-lnsl*)
-			;;
-		    *)
-			LIBREPLACE_NETWORK_LIBS="-lnsl $LIBREPLACE_NETWORK_LIBS"
-			;;
-		esac
-
-
-fi
-
-
-
-
-ac_check_lib_ext_save_LIBS=$LIBS
-LIBS="-lsocket $LIBREPLACE_NETWORK_LIBS  $LIBS"
-
-
-
-
-        { echo "$as_me:$LINENO: checking for connect in -lsocket" >&5
-echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6; }
-if test "${ac_cv_lib_ext_socket_connect+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char connect ();
-int
-main ()
-{
-return connect ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_lib_ext_socket_connect=yes;
-		  ac_cv_lib_ext_socket=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_ext_socket_connect=no;
-		  ac_cv_lib_ext_socket=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_ext_socket_connect" >&5
-echo "${ECHO_T}$ac_cv_lib_ext_socket_connect" >&6; }
-    if test $ac_cv_lib_ext_socket_connect = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_CONNECT 1
-_ACEOF
-
-fi
-
-LIBS=$ac_check_lib_ext_save_LIBS
-
-if test $ac_cv_lib_ext_socket = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBSOCKET 1
-_ACEOF
-
-		case "$LIBREPLACE_NETWORK_LIBS" in
-		    *-lsocket*)
-			;;
-		    *)
-			LIBREPLACE_NETWORK_LIBS="-lsocket $LIBREPLACE_NETWORK_LIBS"
-			;;
-		esac
-
-
-fi
-
-
-
-
-ac_check_lib_ext_save_LIBS=$LIBS
-LIBS="-linet $LIBREPLACE_NETWORK_LIBS  $LIBS"
-
-
-
-
-        { echo "$as_me:$LINENO: checking for connect in -linet" >&5
-echo $ECHO_N "checking for connect in -linet... $ECHO_C" >&6; }
-if test "${ac_cv_lib_ext_inet_connect+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char connect ();
-int
-main ()
-{
-return connect ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_lib_ext_inet_connect=yes;
-		  ac_cv_lib_ext_inet=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_ext_inet_connect=no;
-		  ac_cv_lib_ext_inet=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_ext_inet_connect" >&5
-echo "${ECHO_T}$ac_cv_lib_ext_inet_connect" >&6; }
-    if test $ac_cv_lib_ext_inet_connect = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_CONNECT 1
-_ACEOF
-
-fi
-
-LIBS=$ac_check_lib_ext_save_LIBS
-
-if test $ac_cv_lib_ext_inet = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBINET 1
-_ACEOF
-
-		case "$LIBREPLACE_NETWORK_LIBS" in
-		    *-linet*)
-			;;
-		    *)
-			LIBREPLACE_NETWORK_LIBS="-linet $LIBREPLACE_NETWORK_LIBS"
-			;;
-		esac
-
-
-fi
-
-			if test x"$ac_cv_lib_ext_nsl_s_connect" = x"yes" ||
-		test x"$ac_cv_lib_ext_nsl_connect" = x"yes" ||
-		test x"$ac_cv_lib_ext_socket_connect" = x"yes" ||
-		test x"$ac_cv_lib_ext_inet_connect" = x"yes"
-	then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_CONNECT 1
-_ACEOF
-
-	fi
-fi
-
-
-for ac_func in gethostbyname
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_var=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-if test x"$ac_cv_func_gethostbyname" = x"no"; then
-
-
-
-ac_check_lib_ext_save_LIBS=$LIBS
-LIBS="-lnsl_s $LIBREPLACE_NETWORK_LIBS  $LIBS"
-
-
-
-
-        { echo "$as_me:$LINENO: checking for gethostbyname in -lnsl_s" >&5
-echo $ECHO_N "checking for gethostbyname in -lnsl_s... $ECHO_C" >&6; }
-if test "${ac_cv_lib_ext_nsl_s_gethostbyname+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char gethostbyname ();
-int
-main ()
-{
-return gethostbyname ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_lib_ext_nsl_s_gethostbyname=yes;
-		  ac_cv_lib_ext_nsl_s=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_ext_nsl_s_gethostbyname=no;
-		  ac_cv_lib_ext_nsl_s=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_ext_nsl_s_gethostbyname" >&5
-echo "${ECHO_T}$ac_cv_lib_ext_nsl_s_gethostbyname" >&6; }
-    if test $ac_cv_lib_ext_nsl_s_gethostbyname = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_GETHOSTBYNAME 1
-_ACEOF
-
-fi
-
-LIBS=$ac_check_lib_ext_save_LIBS
-
-if test $ac_cv_lib_ext_nsl_s = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBNSL_S 1
-_ACEOF
-
-		case "$LIBREPLACE_NETWORK_LIBS" in
-		    *-lnsl_s*)
-			;;
-		    *)
-			LIBREPLACE_NETWORK_LIBS="-lnsl_s $LIBREPLACE_NETWORK_LIBS"
-			;;
-		esac
-
-
-fi
-
-
-
-
-ac_check_lib_ext_save_LIBS=$LIBS
-LIBS="-lnsl $LIBREPLACE_NETWORK_LIBS  $LIBS"
-
-
-
-
-        { echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5
-echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6; }
-if test "${ac_cv_lib_ext_nsl_gethostbyname+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char gethostbyname ();
-int
-main ()
-{
-return gethostbyname ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_lib_ext_nsl_gethostbyname=yes;
-		  ac_cv_lib_ext_nsl=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_ext_nsl_gethostbyname=no;
-		  ac_cv_lib_ext_nsl=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_ext_nsl_gethostbyname" >&5
-echo "${ECHO_T}$ac_cv_lib_ext_nsl_gethostbyname" >&6; }
-    if test $ac_cv_lib_ext_nsl_gethostbyname = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_GETHOSTBYNAME 1
-_ACEOF
-
-fi
-
-LIBS=$ac_check_lib_ext_save_LIBS
-
-if test $ac_cv_lib_ext_nsl = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBNSL 1
-_ACEOF
-
-		case "$LIBREPLACE_NETWORK_LIBS" in
-		    *-lnsl*)
-			;;
-		    *)
-			LIBREPLACE_NETWORK_LIBS="-lnsl $LIBREPLACE_NETWORK_LIBS"
-			;;
-		esac
-
-
-fi
-
-
-
-
-ac_check_lib_ext_save_LIBS=$LIBS
-LIBS="-lsocket $LIBREPLACE_NETWORK_LIBS  $LIBS"
-
-
-
-
-        { echo "$as_me:$LINENO: checking for gethostbyname in -lsocket" >&5
-echo $ECHO_N "checking for gethostbyname in -lsocket... $ECHO_C" >&6; }
-if test "${ac_cv_lib_ext_socket_gethostbyname+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char gethostbyname ();
-int
-main ()
-{
-return gethostbyname ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_lib_ext_socket_gethostbyname=yes;
-		  ac_cv_lib_ext_socket=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_ext_socket_gethostbyname=no;
-		  ac_cv_lib_ext_socket=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_ext_socket_gethostbyname" >&5
-echo "${ECHO_T}$ac_cv_lib_ext_socket_gethostbyname" >&6; }
-    if test $ac_cv_lib_ext_socket_gethostbyname = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_GETHOSTBYNAME 1
-_ACEOF
-
-fi
-
-LIBS=$ac_check_lib_ext_save_LIBS
-
-if test $ac_cv_lib_ext_socket = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBSOCKET 1
-_ACEOF
-
-		case "$LIBREPLACE_NETWORK_LIBS" in
-		    *-lsocket*)
-			;;
-		    *)
-			LIBREPLACE_NETWORK_LIBS="-lsocket $LIBREPLACE_NETWORK_LIBS"
-			;;
-		esac
-
-
-fi
-
-			if test x"$ac_cv_lib_ext_nsl_s_gethostbyname" = x"yes" ||
-		test x"$ac_cv_lib_ext_nsl_gethostbyname" = x"yes" ||
-		test x"$ac_cv_lib_ext_socket_gethostbyname" = x"yes"
-	then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_GETHOSTBYNAME 1
-_ACEOF
-
-	fi
-fi
-
-
-for ac_func in if_nametoindex
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_var=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-if test x"$ac_cv_func_if_nametoindex" = x"no"; then
-
-
-
-ac_check_lib_ext_save_LIBS=$LIBS
-LIBS="-lipv6 $LIBREPLACE_NETWORK_LIBS  $LIBS"
-
-
-
-
-        { echo "$as_me:$LINENO: checking for if_nametoindex in -lipv6" >&5
-echo $ECHO_N "checking for if_nametoindex in -lipv6... $ECHO_C" >&6; }
-if test "${ac_cv_lib_ext_ipv6_if_nametoindex+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char if_nametoindex ();
-int
-main ()
-{
-return if_nametoindex ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_lib_ext_ipv6_if_nametoindex=yes;
-		  ac_cv_lib_ext_ipv6=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_ext_ipv6_if_nametoindex=no;
-		  ac_cv_lib_ext_ipv6=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_ext_ipv6_if_nametoindex" >&5
-echo "${ECHO_T}$ac_cv_lib_ext_ipv6_if_nametoindex" >&6; }
-    if test $ac_cv_lib_ext_ipv6_if_nametoindex = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_IF_NAMETOINDEX 1
-_ACEOF
-
-fi
-
-LIBS=$ac_check_lib_ext_save_LIBS
-
-if test $ac_cv_lib_ext_ipv6 = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBIPV6 1
-_ACEOF
-
-		case "$LIBREPLACE_NETWORK_LIBS" in
-		    *-lipv6*)
-			;;
-		    *)
-			LIBREPLACE_NETWORK_LIBS="-lipv6 $LIBREPLACE_NETWORK_LIBS"
-			;;
-		esac
-
-
-fi
-
-			if test x"$ac_cv_lib_ext_ipv6_if_nametoindex" = x"yes"
-	then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_IF_NAMETOINDEX 1
-_ACEOF
-
-	fi
-fi
-
-# The following tests need LIBS="${LIBREPLACE_NETWORK_LIBS}"
-old_LIBS=$LIBS
-LIBS="${LIBREPLACE_NETWORK_LIBS}"
-SAVE_CPPFLAGS="$CPPFLAGS"
-CPPFLAGS="$CPPFLAGS -I$libreplacedir"
-
-
-for ac_func in socketpair
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_var=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-else
-  LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} socketpair.o"
-fi
-done
-
-
-{ echo "$as_me:$LINENO: checking for broken inet_ntoa" >&5
-echo $ECHO_N "checking for broken inet_ntoa... $ECHO_C" >&6; }
-if test "${libreplace_cv_REPLACE_INET_NTOA+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-if test "$cross_compiling" = yes; then
-  libreplace_cv_REPLACE_INET_NTOA=cross
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-main() { struct in_addr ip; ip.s_addr = 0x12345678;
-if (strcmp(inet_ntoa(ip),"18.52.86.120") &&
-    strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); }
-exit(1);}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  libreplace_cv_REPLACE_INET_NTOA=yes
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-libreplace_cv_REPLACE_INET_NTOA=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-
-fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_REPLACE_INET_NTOA" >&5
-echo "${ECHO_T}$libreplace_cv_REPLACE_INET_NTOA" >&6; }
-
-
-for ac_func in inet_ntoa
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_var=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-else
-  libreplace_cv_REPLACE_INET_NTOA=yes
-fi
-done
-
-if test x"$libreplace_cv_REPLACE_INET_NTOA" = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
-#define REPLACE_INET_NTOA 1
-_ACEOF
-
-    LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} inet_ntoa.o"
-fi
-
-
-for ac_func in inet_aton
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_var=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-else
-  LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} inet_aton.o"
-fi
-done
-
-
-
-for ac_func in inet_ntop
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_var=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-else
-  LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} inet_ntop.o"
-fi
-done
-
-
-
-for ac_func in inet_pton
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_var=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-else
-  LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} inet_pton.o"
-fi
-done
-
-
-{ echo "$as_me:$LINENO: checking for getaddrinfo" >&5
-echo $ECHO_N "checking for getaddrinfo... $ECHO_C" >&6; }
-if test "${libreplace_cv_HAVE_GETADDRINFO+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-#include <sys/socket.h>
-#include <netdb.h>
-int
-main ()
-{
-
-struct sockaddr sa;
-struct addrinfo *ai = NULL;
-int ret = getaddrinfo(NULL, NULL, NULL, &ai);
-if (ret != 0) {
-	const char *es = gai_strerror(ret);
-}
-freeaddrinfo(ai);
-ret = getnameinfo(&sa, sizeof(sa),
-		NULL, 0,
-		NULL, 0, 0);
-
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  libreplace_cv_HAVE_GETADDRINFO=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	libreplace_cv_HAVE_GETADDRINFO=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_HAVE_GETADDRINFO" >&5
-echo "${ECHO_T}$libreplace_cv_HAVE_GETADDRINFO" >&6; }
-if test x"$libreplace_cv_HAVE_GETADDRINFO" = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_GETADDRINFO 1
-_ACEOF
-
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_GETNAMEINFO 1
-_ACEOF
-
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_FREEADDRINFO 1
-_ACEOF
-
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_GAI_STRERROR 1
-_ACEOF
-
-else
-	LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} getaddrinfo.o"
-fi
-
-
-for ac_header in ifaddrs.h
-do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
   { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -26108,12 +20707,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -26138,605 +20732,8 @@
 done
 
 
-{ echo "$as_me:$LINENO: checking for struct sockaddr.sa_len" >&5
-echo $ECHO_N "checking for struct sockaddr.sa_len... $ECHO_C" >&6; }
-if test "${ac_cv_member_struct_sockaddr_sa_len+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <sys/socket.h>
 
-int
-main ()
-{
-static struct sockaddr ac_aggr;
-if (ac_aggr.sa_len)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_member_struct_sockaddr_sa_len=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <sys/socket.h>
-
-int
-main ()
-{
-static struct sockaddr ac_aggr;
-if (sizeof ac_aggr.sa_len)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_member_struct_sockaddr_sa_len=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_member_struct_sockaddr_sa_len=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_sockaddr_sa_len" >&5
-echo "${ECHO_T}$ac_cv_member_struct_sockaddr_sa_len" >&6; }
-if test $ac_cv_member_struct_sockaddr_sa_len = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_SOCKADDR_SA_LEN 1
-_ACEOF
-
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_SOCKADDR_SA_LEN 1
-_ACEOF
-
-fi
-
-
-{ echo "$as_me:$LINENO: checking for getifaddrs and freeifaddrs" >&5
-echo $ECHO_N "checking for getifaddrs and freeifaddrs... $ECHO_C" >&6; }
-if test "${libreplace_cv_HAVE_GETIFADDRS+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <ifaddrs.h>
-#include <netdb.h>
-int
-main ()
-{
-
-struct ifaddrs *ifp = NULL;
-int ret = getifaddrs (&ifp);
-freeifaddrs(ifp);
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  libreplace_cv_HAVE_GETIFADDRS=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	libreplace_cv_HAVE_GETIFADDRS=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_HAVE_GETIFADDRS" >&5
-echo "${ECHO_T}$libreplace_cv_HAVE_GETIFADDRS" >&6; }
-if test x"$libreplace_cv_HAVE_GETIFADDRS" = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_GETIFADDRS 1
-_ACEOF
-
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_FREEIFADDRS 1
-_ACEOF
-
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_STRUCT_IFADDRS 1
-_ACEOF
-
-fi
-
-##################
-# look for a method of finding the list of network interfaces
-iface=no;
-{ echo "$as_me:$LINENO: checking for iface getifaddrs" >&5
-echo $ECHO_N "checking for iface getifaddrs... $ECHO_C" >&6; }
-if test "${libreplace_cv_HAVE_IFACE_GETIFADDRS+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-if test "$cross_compiling" = yes; then
-  libreplace_cv_HAVE_IFACE_GETIFADDRS=cross
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-#define HAVE_IFACE_GETIFADDRS 1
-#define NO_CONFIG_H 1
-#define AUTOCONF_TEST 1
-#define SOCKET_WRAPPER_NOT_REPLACE
-#include "$libreplacedir/replace.c"
-#include "$libreplacedir/inet_ntop.c"
-#include "$libreplacedir/snprintf.c"
-#include "$libreplacedir/getifaddrs.c"
-#define getifaddrs_test main
-#include "$libreplacedir/test/getifaddrs.c"
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  libreplace_cv_HAVE_IFACE_GETIFADDRS=yes
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-libreplace_cv_HAVE_IFACE_GETIFADDRS=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-
-fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_HAVE_IFACE_GETIFADDRS" >&5
-echo "${ECHO_T}$libreplace_cv_HAVE_IFACE_GETIFADDRS" >&6; }
-if test x"$libreplace_cv_HAVE_IFACE_GETIFADDRS" = x"yes"; then
-    iface=yes;
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_IFACE_GETIFADDRS 1
-_ACEOF
-
-else
-	LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} getifaddrs.o"
-fi
-
-
-if test $iface = no; then
-{ echo "$as_me:$LINENO: checking for iface AIX" >&5
-echo $ECHO_N "checking for iface AIX... $ECHO_C" >&6; }
-if test "${libreplace_cv_HAVE_IFACE_AIX+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-if test "$cross_compiling" = yes; then
-  libreplace_cv_HAVE_IFACE_AIX=cross
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-#define HAVE_IFACE_AIX 1
-#define NO_CONFIG_H 1
-#define AUTOCONF_TEST 1
-#undef _XOPEN_SOURCE_EXTENDED
-#define SOCKET_WRAPPER_NOT_REPLACE
-#include "$libreplacedir/replace.c"
-#include "$libreplacedir/inet_ntop.c"
-#include "$libreplacedir/snprintf.c"
-#include "$libreplacedir/getifaddrs.c"
-#define getifaddrs_test main
-#include "$libreplacedir/test/getifaddrs.c"
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  libreplace_cv_HAVE_IFACE_AIX=yes
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-libreplace_cv_HAVE_IFACE_AIX=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-
-fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_HAVE_IFACE_AIX" >&5
-echo "${ECHO_T}$libreplace_cv_HAVE_IFACE_AIX" >&6; }
-if test x"$libreplace_cv_HAVE_IFACE_AIX" = x"yes"; then
-    iface=yes;
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_IFACE_AIX 1
-_ACEOF
-
-fi
-fi
-
-
-if test $iface = no; then
-{ echo "$as_me:$LINENO: checking for iface ifconf" >&5
-echo $ECHO_N "checking for iface ifconf... $ECHO_C" >&6; }
-if test "${libreplace_cv_HAVE_IFACE_IFCONF+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-if test "$cross_compiling" = yes; then
-  libreplace_cv_HAVE_IFACE_IFCONF=cross
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-#define HAVE_IFACE_IFCONF 1
-#define NO_CONFIG_H 1
-#define AUTOCONF_TEST 1
-#define SOCKET_WRAPPER_NOT_REPLACE
-#include "$libreplacedir/replace.c"
-#include "$libreplacedir/inet_ntop.c"
-#include "$libreplacedir/snprintf.c"
-#include "$libreplacedir/getifaddrs.c"
-#define getifaddrs_test main
-#include "$libreplacedir/test/getifaddrs.c"
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  libreplace_cv_HAVE_IFACE_IFCONF=yes
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-libreplace_cv_HAVE_IFACE_IFCONF=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-
-fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_HAVE_IFACE_IFCONF" >&5
-echo "${ECHO_T}$libreplace_cv_HAVE_IFACE_IFCONF" >&6; }
-if test x"$libreplace_cv_HAVE_IFACE_IFCONF" = x"yes"; then
-    iface=yes;
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_IFACE_IFCONF 1
-_ACEOF
-
-fi
-fi
-
-if test $iface = no; then
-{ echo "$as_me:$LINENO: checking for iface ifreq" >&5
-echo $ECHO_N "checking for iface ifreq... $ECHO_C" >&6; }
-if test "${libreplace_cv_HAVE_IFACE_IFREQ+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-if test "$cross_compiling" = yes; then
-  libreplace_cv_HAVE_IFACE_IFREQ=cross
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-#define HAVE_IFACE_IFREQ 1
-#define NO_CONFIG_H 1
-#define AUTOCONF_TEST 1
-#define SOCKET_WRAPPER_NOT_REPLACE
-#include "$libreplacedir/replace.c"
-#include "$libreplacedir/inet_ntop.c"
-#include "$libreplacedir/snprintf.c"
-#include "$libreplacedir/getifaddrs.c"
-#define getifaddrs_test main
-#include "$libreplacedir/test/getifaddrs.c"
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  libreplace_cv_HAVE_IFACE_IFREQ=yes
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-libreplace_cv_HAVE_IFACE_IFREQ=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-
-fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_HAVE_IFACE_IFREQ" >&5
-echo "${ECHO_T}$libreplace_cv_HAVE_IFACE_IFREQ" >&6; }
-if test x"$libreplace_cv_HAVE_IFACE_IFREQ" = x"yes"; then
-    iface=yes;
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_IFACE_IFREQ 1
-_ACEOF
-
-fi
-fi
-
-{ echo "$as_me:$LINENO: checking for ipv6 support" >&5
-echo $ECHO_N "checking for ipv6 support... $ECHO_C" >&6; }
-if test "${libreplace_cv_HAVE_IPV6+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-	cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-#include <stdlib.h> /* for NULL */
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <netdb.h>
-
-int
-main ()
-{
-
-struct sockaddr_storage sa_store;
-struct addrinfo *ai = NULL;
-struct in6_addr in6addr;
-int idx = if_nametoindex("iface1");
-int s = socket(AF_INET6, SOCK_STREAM, 0);
-int ret = getaddrinfo(NULL, NULL, NULL, &ai);
-if (ret != 0) {
-	const char *es = gai_strerror(ret);
-}
-freeaddrinfo(ai);
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-
-		libreplace_cv_HAVE_IPV6=yes
-
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-		libreplace_cv_HAVE_IPV6=no
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-
-fi
-{ echo "$as_me:$LINENO: result: $libreplace_cv_HAVE_IPV6" >&5
-echo "${ECHO_T}$libreplace_cv_HAVE_IPV6" >&6; }
-if test x"$libreplace_cv_HAVE_IPV6" = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_IPV6 1
-_ACEOF
-
-fi
-
-LIBS=$old_LIBS
-CPPFLAGS="$SAVE_CPPFLAGS"
-
-LIBREPLACEOBJ="${LIBREPLACEOBJ} ${LIBREPLACE_NETWORK_OBJS}"
-
-echo "LIBREPLACE_NETWORK_CHECKS: END"
-
-
-CPPFLAGS="${SAVE_CPPFLAGS}"
-
-LIBREPLACE_DIR=`echo ${libreplacedir} | sed -e "s;${srcdir};;" -e "s;^/;;"`
-
-LIBREPLACE_OBJS=""
-for obj in ${LIBREPLACEOBJ}; do
-	LIBREPLACE_OBJS="${LIBREPLACE_OBJS} ${LIBREPLACE_DIR}/${obj}"
-done
-
-
-# add -ldl to the global LIBS
-LIBS="${LIBS} ${LIBDL} ${LIBREPLACE_NETWORK_LIBS}"
-
-
-
-
-
-
-
-
-for ac_header in aio.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h rpc/nettype.h
+for ac_header in limits.h float.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
@@ -26851,12 +20848,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -26883,10 +20875,7 @@
 
 
 
-
-
-
-for ac_header in unistd.h utime.h grp.h sys/id.h memory.h alloca.h
+for ac_header in rpc/rpc.h rpcsvc/nis.h rpcsvc/ypclnt.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
@@ -27001,12 +20990,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -27033,154 +21017,11 @@
 
 
 
-for ac_header in limits.h float.h pthread.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-	ac_header_compiler=no
-fi
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
 
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-
-for ac_header in rpc/rpc.h rpcsvc/nis.h rpcsvc/ypclnt.h
+for ac_header in sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc.h sys/prctl.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
@@ -27295,12 +21136,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -27331,7 +21167,8 @@
 
 
 
-for ac_header in sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc.h sys/prctl.h
+
+for ac_header in sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h sys/socket.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
@@ -27446,12 +21283,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -27476,13 +21308,7 @@
 done
 
 
-
-
-
-
-
-
-for ac_header in sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h
+for ac_header in sys/un.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
@@ -27597,12 +21423,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -27747,12 +21568,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -27781,7 +21597,8 @@
 
 
 
-for ac_header in sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h
+
+for ac_header in sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/sockio.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
@@ -27896,12 +21713,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -28041,12 +21853,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -28187,12 +21994,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -28333,12 +22135,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -28478,158 +22275,8 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
 
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-for ac_header in netgroup.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
     ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
@@ -28833,12 +22480,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -28982,12 +22624,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -29124,12 +22761,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -29279,12 +22911,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -29497,12 +23124,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -29646,12 +23268,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -29792,12 +23409,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -29942,12 +23554,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -30088,12 +23695,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -30235,12 +23837,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -30384,12 +23981,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -33020,6 +26612,195 @@
 
 fi
 
+{ echo "$as_me:$LINENO: checking for ino_t" >&5
+echo $ECHO_N "checking for ino_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_ino_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+typedef ino_t ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_ino_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_type_ino_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_ino_t" >&5
+echo "${ECHO_T}$ac_cv_type_ino_t" >&6; }
+if test $ac_cv_type_ino_t = yes; then
+  :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define ino_t unsigned
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for loff_t" >&5
+echo $ECHO_N "checking for loff_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_loff_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+typedef loff_t ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_loff_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_type_loff_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_loff_t" >&5
+echo "${ECHO_T}$ac_cv_type_loff_t" >&6; }
+if test $ac_cv_type_loff_t = yes; then
+  :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define loff_t off_t
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for offset_t" >&5
+echo $ECHO_N "checking for offset_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_offset_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+typedef offset_t ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_offset_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_type_offset_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_offset_t" >&5
+echo "${ECHO_T}$ac_cv_type_offset_t" >&6; }
+if test $ac_cv_type_offset_t = yes; then
+  :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define offset_t loff_t
+_ACEOF
+
+fi
+
 { echo "$as_me:$LINENO: checking for ssize_t" >&5
 echo $ECHO_N "checking for ssize_t... $ECHO_C" >&6; }
 if test "${ac_cv_type_ssize_t+set}" = set; then
@@ -33146,7 +26927,68 @@
 
 fi
 
+{ echo "$as_me:$LINENO: checking for comparison_fn_t" >&5
+echo $ECHO_N "checking for comparison_fn_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_comparison_fn_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+typedef comparison_fn_t ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_comparison_fn_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+	ac_cv_type_comparison_fn_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_comparison_fn_t" >&5
+echo "${ECHO_T}$ac_cv_type_comparison_fn_t" >&6; }
+if test $ac_cv_type_comparison_fn_t = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_COMPARISON_FN_T 1
+_ACEOF
+
+fi
+
+
 ############################################
 # for cups support we need libcups, and a handful of header files
 
@@ -33304,11 +27146,11 @@
 
 fi
 
-#############################################
-# check for fd passing struct via msg_control
-{ echo "$as_me:$LINENO: checking for fd passing via msg_control" >&5
-echo $ECHO_N "checking for fd passing via msg_control... $ECHO_C" >&6; }
-if test "${samba_cv_msghdr_msg_control+set}" = set; then
+############################################
+# check for unix domain sockets
+{ echo "$as_me:$LINENO: checking for unix domain sockets" >&5
+echo $ECHO_N "checking for unix domain sockets... $ECHO_C" >&6; }
+if test "${samba_cv_unixsocket+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
@@ -33328,13 +27170,8 @@
 main ()
 {
 
-	struct msghdr msg;
-	union {
-	      struct cmsghdr cm;
-	      char control[CMSG_SPACE(sizeof(int))];
-	} control_un;
-	msg.msg_control = control_un.control;
-	msg.msg_controllen = sizeof(control_un.control);
+  struct sockaddr_un sunaddr;
+  sunaddr.sun_family = AF_UNIX;
 
   ;
   return 0;
@@ -33357,31 +27194,30 @@
 	 test -z "$ac_c_werror_flag" ||
 	 test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  samba_cv_msghdr_msg_control=yes
+  samba_cv_unixsocket=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-	samba_cv_msghdr_msg_control=no
+	samba_cv_unixsocket=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $samba_cv_msghdr_msg_control" >&5
-echo "${ECHO_T}$samba_cv_msghdr_msg_control" >&6; }
-if test x"$samba_cv_msghdr_msg_control" = x"yes"; then
+{ echo "$as_me:$LINENO: result: $samba_cv_unixsocket" >&5
+echo "${ECHO_T}$samba_cv_unixsocket" >&6; }
+if test x"$samba_cv_unixsocket" = x"yes"; then
 
 cat >>confdefs.h <<\_ACEOF
-#define HAVE_MSGHDR_MSG_CONTROL 1
+#define HAVE_UNIXSOCKET 1
 _ACEOF
 
 fi
 
-#############################################
-# check for fd passing struct via msg_acctrights
-{ echo "$as_me:$LINENO: checking for fd passing via msg_acctrights" >&5
-echo $ECHO_N "checking for fd passing via msg_acctrights... $ECHO_C" >&6; }
-if test "${samba_cv_msghdr_msg_acctrights+set}" = set; then
+
+{ echo "$as_me:$LINENO: checking for socklen_t type" >&5
+echo $ECHO_N "checking for socklen_t type... $ECHO_C" >&6; }
+if test "${samba_cv_socklen_t+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
@@ -33393,19 +27229,15 @@
 /* end confdefs.h.  */
 
 #include <sys/types.h>
+#if STDC_HEADERS
 #include <stdlib.h>
 #include <stddef.h>
+#endif
 #include <sys/socket.h>
-#include <sys/un.h>
 int
 main ()
 {
-
-	struct msghdr msg;
-	int fd;
-	msg.msg_acctrights = (caddr_t) &fd;
-	msg.msg_acctrightslen = sizeof(fd);
-
+socklen_t i = 0
   ;
   return 0;
 }
@@ -33427,124 +27259,26 @@
 	 test -z "$ac_c_werror_flag" ||
 	 test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  samba_cv_msghdr_msg_acctrights=yes
+  samba_cv_socklen_t=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-	samba_cv_msghdr_msg_acctrights=no
+	samba_cv_socklen_t=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $samba_cv_msghdr_msg_acctrights" >&5
-echo "${ECHO_T}$samba_cv_msghdr_msg_acctrights" >&6; }
-if test x"$samba_cv_msghdr_msg_acctrights" = x"yes"; then
+{ echo "$as_me:$LINENO: result: $samba_cv_socklen_t" >&5
+echo "${ECHO_T}$samba_cv_socklen_t" >&6; }
+if test x"$samba_cv_socklen_t" = x"yes"; then
 
 cat >>confdefs.h <<\_ACEOF
-#define HAVE_MSGHDR_MSG_ACCTRIGHTS 1
+#define HAVE_SOCKLEN_T_TYPE 1
 _ACEOF
 
 fi
 
-
-for ac_func in dirfd
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_var=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-if test x"$ac_cv_func_dirfd" = x"yes"; then
-	default_shared_modules="$default_shared_modules vfs_syncops"
-fi
-
 { echo "$as_me:$LINENO: checking for sig_atomic_t type" >&5
 echo $ECHO_N "checking for sig_atomic_t type... $ECHO_C" >&6; }
 if test "${samba_cv_sig_atomic_t+set}" = set; then
@@ -33862,6 +27596,242 @@
  fi
 
 
+ { echo "$as_me:$LINENO: checking for asprintf declaration" >&5
+echo $ECHO_N "checking for asprintf declaration... $ECHO_C" >&6; }
+if test "${ac_cv_have_asprintf_decl+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+int i = (int)asprintf
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_asprintf_decl=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_have_asprintf_decl=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_asprintf_decl" >&5
+echo "${ECHO_T}$ac_cv_have_asprintf_decl" >&6; }
+ if test x"$ac_cv_have_asprintf_decl" = x"yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ASPRINTF_DECL 1
+_ACEOF
+
+ fi
+
+
+ { echo "$as_me:$LINENO: checking for vasprintf declaration" >&5
+echo $ECHO_N "checking for vasprintf declaration... $ECHO_C" >&6; }
+if test "${ac_cv_have_vasprintf_decl+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+int i = (int)vasprintf
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_vasprintf_decl=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_have_vasprintf_decl=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_vasprintf_decl" >&5
+echo "${ECHO_T}$ac_cv_have_vasprintf_decl" >&6; }
+ if test x"$ac_cv_have_vasprintf_decl" = x"yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_VASPRINTF_DECL 1
+_ACEOF
+
+ fi
+
+
+ { echo "$as_me:$LINENO: checking for vsnprintf declaration" >&5
+echo $ECHO_N "checking for vsnprintf declaration... $ECHO_C" >&6; }
+if test "${ac_cv_have_vsnprintf_decl+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+int i = (int)vsnprintf
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_vsnprintf_decl=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_have_vsnprintf_decl=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_vsnprintf_decl" >&5
+echo "${ECHO_T}$ac_cv_have_vsnprintf_decl" >&6; }
+ if test x"$ac_cv_have_vsnprintf_decl" = x"yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_VSNPRINTF_DECL 1
+_ACEOF
+
+ fi
+
+
+ { echo "$as_me:$LINENO: checking for snprintf declaration" >&5
+echo $ECHO_N "checking for snprintf declaration... $ECHO_C" >&6; }
+if test "${ac_cv_have_snprintf_decl+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+int i = (int)snprintf
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_snprintf_decl=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_have_snprintf_decl=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_snprintf_decl" >&5
+echo "${ECHO_T}$ac_cv_have_snprintf_decl" >&6; }
+ if test x"$ac_cv_have_snprintf_decl" = x"yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_SNPRINTF_DECL 1
+_ACEOF
+
+ fi
+
+
 # and glibc has setresuid under linux but the function does
 # nothing until kernel 2.1.44! very dumb.
 { echo "$as_me:$LINENO: checking for real setresuid" >&5
@@ -34215,12 +28185,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -34360,12 +28325,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -34507,12 +28467,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -34814,12 +28769,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -34959,12 +28909,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -35106,12 +29051,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -35506,6 +29446,415 @@
 fi
 
 
+# The following test taken from the cvs sources
+# If we can't find connect, try looking in -lsocket, -lnsl, and -linet.
+# The Irix 5 libc.so has connect and gethostbyname, but Irix 5 also has
+# libsocket.so which has a bad implementation of gethostbyname (it
+# only looks in /etc/hosts), so we only look for -lsocket if we need
+# it.
+
+for ac_func in connect
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+if test x"$ac_cv_func_connect" = x"no"; then
+    case "$LIBS" in
+    *-lnsl*) ;;
+    *)
+{ echo "$as_me:$LINENO: checking for connect in -lnsl_s" >&5
+echo $ECHO_N "checking for connect in -lnsl_s... $ECHO_C" >&6; }
+if test "${ac_cv_lib_nsl_s_connect+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl_s  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char connect ();
+int
+main ()
+{
+return connect ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_nsl_s_connect=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_nsl_s_connect=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_s_connect" >&5
+echo "${ECHO_T}$ac_cv_lib_nsl_s_connect" >&6; }
+if test $ac_cv_lib_nsl_s_connect = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBNSL_S 1
+_ACEOF
+
+  LIBS="-lnsl_s $LIBS"
+
+fi
+ ;;
+    esac
+    case "$LIBS" in
+    *-lnsl*) ;;
+    *)
+{ echo "$as_me:$LINENO: checking for connect in -lnsl" >&5
+echo $ECHO_N "checking for connect in -lnsl... $ECHO_C" >&6; }
+if test "${ac_cv_lib_nsl_connect+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char connect ();
+int
+main ()
+{
+return connect ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_nsl_connect=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_nsl_connect=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_connect" >&5
+echo "${ECHO_T}$ac_cv_lib_nsl_connect" >&6; }
+if test $ac_cv_lib_nsl_connect = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBNSL 1
+_ACEOF
+
+  LIBS="-lnsl $LIBS"
+
+fi
+ ;;
+    esac
+    case "$LIBS" in
+    *-lsocket*) ;;
+    *)
+{ echo "$as_me:$LINENO: checking for connect in -lsocket" >&5
+echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6; }
+if test "${ac_cv_lib_socket_connect+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char connect ();
+int
+main ()
+{
+return connect ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_socket_connect=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_socket_connect=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5
+echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6; }
+if test $ac_cv_lib_socket_connect = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSOCKET 1
+_ACEOF
+
+  LIBS="-lsocket $LIBS"
+
+fi
+ ;;
+    esac
+    case "$LIBS" in
+    *-linet*) ;;
+    *)
+{ echo "$as_me:$LINENO: checking for connect in -linet" >&5
+echo $ECHO_N "checking for connect in -linet... $ECHO_C" >&6; }
+if test "${ac_cv_lib_inet_connect+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-linet  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char connect ();
+int
+main ()
+{
+return connect ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_inet_connect=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_inet_connect=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_inet_connect" >&5
+echo "${ECHO_T}$ac_cv_lib_inet_connect" >&6; }
+if test $ac_cv_lib_inet_connect = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBINET 1
+_ACEOF
+
+  LIBS="-linet $LIBS"
+
+fi
+ ;;
+    esac
+            if test x"$ac_cv_lib_socket_connect" = x"yes" ||
+       test x"$ac_cv_lib_inet_connect" = x"yes"; then
+        # ac_cv_func_connect=yes
+        # don't!  it would cause AC_CHECK_FUNC to succeed next time configure is run
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CONNECT 1
+_ACEOF
+
+    fi
+fi
+
 ###############################################
 # test for where we get yp_get_default_domain() from
 { echo "$as_me:$LINENO: checking for library containing yp_get_default_domain" >&5
@@ -35799,8 +30148,7 @@
 
 
 
-
-for ac_func in waitpid getcwd strdup strndup strnlen strerror chown fchown lchown chmod fchmod chroot link mknod mknod64
+for ac_func in waitpid getcwd strdup strndup strnlen strerror chown fchown chmod fchmod chroot link mknod mknod64
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 { echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -36096,8 +30444,7 @@
 
 
 
-
-for ac_func in getrlimit fsync fdatasync memset strlcpy strlcat setpgid
+for ac_func in getrlimit fsync memset strlcpy strlcat setpgid
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 { echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -36197,7 +30544,11 @@
 
 
 
-for ac_func in memmove setsid glob strpbrk pipe crypt16 getauthuid
+
+
+
+
+for ac_func in memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 { echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -37573,8 +31924,7 @@
 
 
 
-
-for ac_func in memalign posix_memalign hstrerror
+for ac_func in memalign posix_memalign
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 { echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -37783,12 +32133,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -38029,12 +32374,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -38224,7 +32564,7 @@
 fi
 
 
-printf "%s" "checking for GPFS GPL libs... "
+echo -n "checking for GPFS GPL libs... "
 save_LIBS="$LIBS"
 LIBS="$LIBS -lgpfs_gpl"
 cat >conftest.$ac_ext <<_ACEOF
@@ -38287,33 +32627,15 @@
 { echo "$as_me:$LINENO: checking for libunwind" >&5
 echo $ECHO_N "checking for libunwind... $ECHO_C" >&6; }
 save_LIBS=$LIBS
-
-UNWIND_ARCH="unknown"
-if test x"$UNAME_I" != x"unknown"; then
-	UNWIND_ARCH="$UNAME_I"
-elif test x"$UNAME_M" != x"unknown"; then
-	UNWIND_ARCH="$UNAME_M"
-elif test x"$UNAME_P" != x"unknown"; then
-	UNWIND_ARCH="$UNAME_P"
+if test x"$UNAME_P" = xunknown ; then
+    # This probably won't link without the platform-specific libunwind.
+    LIBS="$LIBS -lunwind"
+else
+    # Add the platform-specific libunwind module. uname -p seems the most
+    # plausible option and works for ia64, where libunwind is most useful.
+    LIBS="$LIBS -lunwind -lunwind-$UNAME_P"
 fi
 
-case "$UNWIND_ARCH" in
-	unknown)
-		# This probably won't link without
-		# the platform-specific libunwind.
-		LIBS="$LIBS -lunwind"
-		;;
-	i386|i586|i686)
-		# Add the platform-specific libunwind module.
-		LIBS="$LIBS -lunwind -lunwind-x86"
-		;;
-	*)
-		# Add the platform-specific libunwind module.
-		# based on uname -i, uname -m or uname -p
-		LIBS="$LIBS -lunwind -lunwind-$UNWIND_ARCH"
-		;;
-esac
-
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -38484,12 +32806,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -38722,12 +33039,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -40732,7 +35044,7 @@
 
 { echo "$as_me:$LINENO: checking whether struct stat has sub-second timestamps" >&5
 echo $ECHO_N "checking whether struct stat has sub-second timestamps... $ECHO_C" >&6; }
-if test "${samba_cv_stat_hires+set}" = set; then
+if test "${samba_stat_hires+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
@@ -40791,21 +35103,21 @@
 	 test -z "$ac_c_werror_flag" ||
 	 test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  samba_cv_stat_hires=yes
+  samba_stat_hires=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-	samba_cv_stat_hires=no
+	samba_stat_hires=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 fi
-{ echo "$as_me:$LINENO: result: $samba_cv_stat_hires" >&5
-echo "${ECHO_T}$samba_cv_stat_hires" >&6; }
+{ echo "$as_me:$LINENO: result: $samba_stat_hires" >&5
+echo "${ECHO_T}$samba_stat_hires" >&6; }
 
-if test x"$samba_cv_stat_hires" = x"yes" ; then
+if test x"$samba_stat_hires" = x"yes" ; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_STAT_ST_MTIM 1
@@ -40830,7 +35142,7 @@
 
 { echo "$as_me:$LINENO: checking whether struct stat has sub-second timestamps without struct timespec" >&5
 echo $ECHO_N "checking whether struct stat has sub-second timestamps without struct timespec... $ECHO_C" >&6; }
-if test "${samba_cv_stat_hires_notimespec+set}" = set; then
+if test "${samba_stat_hires_notimespec+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
@@ -40889,21 +35201,21 @@
 	 test -z "$ac_c_werror_flag" ||
 	 test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  samba_cv_stat_hires=yes
+  samba_stat_hires=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-	samba_cv_stat_hires=no
+	samba_stat_hires=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 fi
-{ echo "$as_me:$LINENO: result: $samba_cv_stat_hires_notimespec" >&5
-echo "${ECHO_T}$samba_cv_stat_hires_notimespec" >&6; }
+{ echo "$as_me:$LINENO: result: $samba_stat_hires_notimespec" >&5
+echo "${ECHO_T}$samba_stat_hires_notimespec" >&6; }
 
-if test x"$samba_cv_stat_hires_notimespec" = x"yes" ; then
+if test x"$samba_stat_hires_notimespec" = x"yes" ; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_STAT_ST_MTIMENSEC 1
@@ -45201,52 +39513,6 @@
     ;;
 esac
 
-# Check whether --enable-static was given.
-if test "${enable_static+set}" = set; then
-  enableval=$enable_static; p=${PACKAGE-default}
-case $enableval in
-yes) enable_static=yes ;;
-no) enable_static=no ;;
-*)
-  enable_static=no
-  # Look at the argument we got.  We use all the common list separators.
-  IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
-  for pkg in $enableval; do
-    if test "X$pkg" = "X$p"; then
-      enable_static=yes
-    fi
-  done
-  IFS="$ac_save_ifs"
-  ;;
-esac
-else
-  enable_static=no
-fi
-
-# Check whether --enable-shared was given.
-if test "${enable_shared+set}" = set; then
-  enableval=$enable_shared; p=${PACKAGE-default}
-case $enableval in
-yes) enable_shared=yes ;;
-no) enable_shared=no ;;
-*)
-  enable_shared=no
-  # Look at the argument we got.  We use all the common list separators.
-  IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
-  for pkg in $enableval; do
-    if test "X$pkg" = "X$p"; then
-      enable_shared=yes
-    fi
-
-  done
-  IFS="$ac_save_ifs"
-  ;;
-esac
-else
-  enable_shared=yes
-fi
-
-
 # Set defaults
 PIE_CFLAGS=""
 PIE_LDFLAGS=""
@@ -45291,64 +39557,16 @@
 	fi
 fi
 
-# Set defaults
-RELRO_LDFLAGS=""
-# Check whether --enable-relro was given.
-if test "${enable_relro+set}" = set; then
-  enableval=$enable_relro;
-fi
-
-
-if test "x$enable_relro" != xno
-then
-	{ echo "$as_me:$LINENO: checking for -Wl,-z,relro" >&5
-echo $ECHO_N "checking for -Wl,-z,relro... $ECHO_C" >&6; }
-if test "${samba_cv_relro+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-		cat > conftest.c <<EOF
-int foo;
-main () { return 0;}
-EOF
-		if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -Wl,-z,relro -o conftest conftest.c 1>&5'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }
-		then
-			samba_cv_relro=yes
-		else
-			samba_cv_relro=no
-		fi
-		rm -f conftest*
-
-fi
-{ echo "$as_me:$LINENO: result: $samba_cv_relro" >&5
-echo "${ECHO_T}$samba_cv_relro" >&6; }
-	if test x"${samba_cv_relro}" = x"yes"
-	then
-		RELRO_LDFLAGS="-Wl,-z,relro"
-	fi
-fi
-
-# Set defaults
-SYMSEXT="syms"
-
-
 # Assume non-shared by default and override below
 BLDSHARED="false"
 
 # these are the defaults, good for lots of systems
 HOST_OS="$host_os"
 LDSHFLAGS="-shared"
-MODULE_EXPORTS=""
 SONAMEFLAG="#"
 SHLD="\${CC} \${CFLAGS}"
 PICFLAG="${PIE_CFLAGS}"
 SHLIBEXT="so"
-DSO_EXPORTS=""
 
 # this bit needs to be modified for each OS that supports share libs
 # You need to specify how to create a shared library and
@@ -45495,8 +39713,8 @@
 _ACEOF
 
 			BLDSHARED="true"
-			LDSHFLAGS="-Wl,-G,-bexpfull,-bbigtoc"
-			DYNEXP="-Wl,-brtl,-bexpfull,-bbigtoc"
+			LDSHFLAGS="-Wl,-G,-bexpall,-bbigtoc"
+			DYNEXP="-Wl,-brtl,-bexpall,-bbigtoc"
 			PICFLAG="-O2"
 			# as AIX code is always position independent...
 			# .po will just create compile warnings, use po.o:
@@ -45535,11 +39753,10 @@
 			if test "${GCC}" = "yes"; then
 				PICFLAG="-fPIC"
 			else
-				PICFLAG="+z +ESnolit"
+				PICFLAG="+z"
 			fi
 			if test "$host_cpu" = "ia64"; then
 				SHLIBEXT="so"
-			      PICFLAG="+z"
 				DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
 			else
 				SHLIBEXT="sl"
@@ -45721,17 +39938,8 @@
 _ACEOF
 
 			BLDSHARED="true"
-			LDSHFLAGS="-dynamiclib -flat_namespace -undefined suppress"
-			CFLAGS="$CFLAGS -fno-common"
-			SHLD="\${CC}"
+			LDSHFLAGS="-bundle -flat_namespace -undefined suppress"
 			SHLIBEXT="dylib"
-                        MODULE_EXPORTS="-exported_symbols_list \$(srcdir)/exports/modules-darwin.syms"
-                        SHLIBEXT="dylib"
-                        # Since gcc doesn't fail on unrecognised options, the
-                        # PIE test incorrectly succeeds. Darwin gcc does not
-                        # actually support the PIE stuff.
-                        PIE_LDFLAGS=
-                        PIE_CFLAGS=
 			cat >>confdefs.h <<\_ACEOF
 #define STAT_ST_BLOCKSIZE 512
 _ACEOF
@@ -45750,15 +39958,7 @@
 	BLDSHARED=false
 fi
 
-if test "$enable_shared" = yes -a "${ac_cv_gnu_ld_version_script}" = yes; then
-	DSO_EXPORTS=\$\(DSO_EXPORTS_CMD\)
-fi
-
-if test x"$BLDSHARED" = x"true" ; then
-	LDFLAGS="$LDFLAGS -L./bin"
-fi
-
-{ echo "$as_me:$LINENO: result: $BLDSHARED" >&5
+  { echo "$as_me:$LINENO: result: $BLDSHARED" >&5
 echo "${ECHO_T}$BLDSHARED" >&6; }
 
 { echo "$as_me:$LINENO: checking LDFLAGS" >&5
@@ -45847,37 +40047,6 @@
 _ACEOF
 
 
-
-	case "$host_os" in
-		*linux*)
-			LIB_PATH_VAR=LD_LIBRARY_PATH
-		;;
-		*netbsd*)
-			LIB_PATH_VAR=LD_LIBRARY_PATH
-		;;
-		*solaris*)
-			LIB_PATH_VAR=LD_LIBRARY_PATH
-		;;
-		*hpux*)
-			LIB_PATH_VAR=SHLIB_PATH
-		;;
-		*osf*)
-			LIB_PATH_VAR=LD_LIBRARY_PATH
-		;;
-		*aix*)
-			LIB_PATH_VAR=LIB_PATH
-			;;
-		*irix*)
-			LIB_PATH_VAR=LD_LIBRARY_PATH
-			;;
-		*darwin*)
-			LIB_PATH_VAR=DYLD_LIBRARY_PATH
-			;;
-	esac
-
-
-
-
 ################
 
 { echo "$as_me:$LINENO: checking for long long" >&5
@@ -46978,6 +41147,66 @@
 
 fi
 
+{ echo "$as_me:$LINENO: checking for sin_len in sock" >&5
+echo $ECHO_N "checking for sin_len in sock... $ECHO_C" >&6; }
+if test "${samba_cv_HAVE_SOCK_SIN_LEN+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+int
+main ()
+{
+struct sockaddr_in sock; sock.sin_len = sizeof(sock);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  samba_cv_HAVE_SOCK_SIN_LEN=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	samba_cv_HAVE_SOCK_SIN_LEN=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_SOCK_SIN_LEN" >&5
+echo "${ECHO_T}$samba_cv_HAVE_SOCK_SIN_LEN" >&6; }
+if test x"$samba_cv_HAVE_SOCK_SIN_LEN" = x"yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_SOCK_SIN_LEN 1
+_ACEOF
+
+fi
+
 { echo "$as_me:$LINENO: checking whether seekdir returns void" >&5
 echo $ECHO_N "checking whether seekdir returns void... $ECHO_C" >&6; }
 if test "${samba_cv_SEEKDIR_RETURNS_VOID+set}" = set; then
@@ -47801,6 +42030,212 @@
 
 fi
 
+{ echo "$as_me:$LINENO: checking for va_copy" >&5
+echo $ECHO_N "checking for va_copy... $ECHO_C" >&6; }
+if test "${samba_cv_HAVE_VA_COPY+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+va_list ap1,ap2;
+int
+main ()
+{
+va_copy(ap1,ap2);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  samba_cv_HAVE_VA_COPY=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	samba_cv_HAVE_VA_COPY=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_VA_COPY" >&5
+echo "${ECHO_T}$samba_cv_HAVE_VA_COPY" >&6; }
+if test x"$samba_cv_HAVE_VA_COPY" = x"yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_VA_COPY 1
+_ACEOF
+
+else
+    { echo "$as_me:$LINENO: checking for __va_copy" >&5
+echo $ECHO_N "checking for __va_copy... $ECHO_C" >&6; }
+if test "${samba_cv_HAVE___VA_COPY+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+    va_list ap1,ap2;
+int
+main ()
+{
+__va_copy(ap1,ap2);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  samba_cv_HAVE___VA_COPY=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	samba_cv_HAVE___VA_COPY=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $samba_cv_HAVE___VA_COPY" >&5
+echo "${ECHO_T}$samba_cv_HAVE___VA_COPY" >&6; }
+    if test x"$samba_cv_HAVE___VA_COPY" = x"yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE___VA_COPY 1
+_ACEOF
+
+    fi
+fi
+
+{ echo "$as_me:$LINENO: checking for C99 vsnprintf" >&5
+echo $ECHO_N "checking for C99 vsnprintf... $ECHO_C" >&6; }
+if test "${samba_cv_HAVE_C99_VSNPRINTF+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+if test "$cross_compiling" = yes; then
+  samba_cv_HAVE_C99_VSNPRINTF=cross
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <sys/types.h>
+#include <stdarg.h>
+void foo(const char *format, ...) {
+       va_list ap;
+       int len;
+       char buf[5];
+
+       va_start(ap, format);
+       len = vsnprintf(buf, 0, format, ap);
+       va_end(ap);
+       if (len != 5) exit(1);
+
+       va_start(ap, format);
+       len = vsnprintf(0, 0, format, ap);
+       va_end(ap);
+       if (len != 5) exit(1);
+
+       if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1);
+
+       exit(0);
+}
+main() { foo("hello"); }
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  samba_cv_HAVE_C99_VSNPRINTF=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+samba_cv_HAVE_C99_VSNPRINTF=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_C99_VSNPRINTF" >&5
+echo "${ECHO_T}$samba_cv_HAVE_C99_VSNPRINTF" >&6; }
+if test x"$samba_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_C99_VSNPRINTF 1
+_ACEOF
+
+fi
+
 { echo "$as_me:$LINENO: checking for broken readdir name" >&5
 echo $ECHO_N "checking for broken readdir name... $ECHO_C" >&6; }
 if test "${samba_cv_HAVE_BROKEN_READDIR_NAME+set}" = set; then
@@ -48559,65 +42994,6 @@
 
 fi
 
-{ echo "$as_me:$LINENO: checking for ut_addr_v6 in utmp" >&5
-echo $ECHO_N "checking for ut_addr_v6 in utmp... $ECHO_C" >&6; }
-if test "${samba_cv_HAVE_UT_UT_ADDR_V6+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <sys/types.h>
-#include <utmp.h>
-int
-main ()
-{
-struct utmp ut;  ut.ut_addr_v6[0] = 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  samba_cv_HAVE_UT_UT_ADDR_V6=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	samba_cv_HAVE_UT_UT_ADDR_V6=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_UT_UT_ADDR_V6" >&5
-echo "${ECHO_T}$samba_cv_HAVE_UT_UT_ADDR_V6" >&6; }
-if test x"$samba_cv_HAVE_UT_UT_ADDR_V6" = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_UT_UT_ADDR_V6 1
-_ACEOF
-
-fi
-
 { echo "$as_me:$LINENO: checking for ut_addr in utmp" >&5
 echo $ECHO_N "checking for ut_addr in utmp... $ECHO_C" >&6; }
 if test "${samba_cv_HAVE_UT_UT_ADDR+set}" = set; then
@@ -48801,7 +43177,8 @@
 # end utmp details
 
 
-ICONV_LOOK_DIRS="/usr /usr/local /sw /opt"
+ICONV_LOCATION=standard
+LOOK_DIRS="/usr /usr/local /sw /opt"
 
 # Check whether --with-libiconv was given.
 if test "${with_libiconv+set}" = set; then
@@ -48813,43 +43190,26 @@
   else
      if test "$withval" != "yes" ; then
 	ICONV_PATH_SPEC=yes
-        ICONV_LOOK_DIRS="$withval"
+        LOOK_DIRS="$withval"
      fi
   fi
 
 fi
 
 
-for i in $ICONV_LOOK_DIRS ; do
-
-    save_LIBS="$LIBS"
-    save_LDFLAGS="$LDFLAGS"
-    save_CPPFLAGS="$CPPFLAGS"
-
-    iconv_current_LIBS=""
-    iconv_current_LDFLAGS=""
-    iconv_current_CPPFLAGS=""
-
+for i in $LOOK_DIRS ; do
+    save_LIBS=$LIBS
+    save_LDFLAGS=$LDFLAGS
+    save_CPPFLAGS=$CPPFLAGS
     ICONV_FOUND="no"
     unset libext
+    CPPFLAGS="$CPPFLAGS -I$i/include"
 
-    #  This is here to handle -withval stuff for --with-libiconv
-    #  Perhaps we should always add a -L
-    CPPFLAGS="$save_CPPFLAGS -I$i/include"
-
-    # Check lib and lib32 library variants to cater for IRIX ABI-specific
-    # installation paths. This gets a little tricky since we might have iconv
-    # in both libiconv and in libc. In this case the jm_ICONV test will always
-    # succeed when the header is found. To counter this, make sure the
-    # library directory is there and check the ABI directory first (which
-    # should be harmless on other systems.
-    # For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
     for l in "lib32" "lib" "lib/hpux32"; do
         if test -d "$i/$l" ; then
                 LDFLAGS="$save_LDFLAGS -L$i/$l"
-		LIBS=
-		export LDFLAGS LIBS CPPFLAGS
-		# Try to find iconv(3)
+        LIBS=
+        export LDFLAGS LIBS CPPFLAGS
 
       { echo "$as_me:$LINENO: checking for iconv in $i/$l" >&5
 echo $ECHO_N "checking for iconv in $i/$l... $ECHO_C" >&6; }
@@ -49067,63 +43427,6 @@
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
           LIBS="$jm_save_LIBS"
-
-          if test "$jm_cv_lib_iconv" != yes; then
-            jm_save_LIBS="$LIBS"
-            LIBS="$LIBS -lbiconv"
-            cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdlib.h>
-#include <biconv.h>
-int
-main ()
-{
-iconv_t cd = iconv_open("","");
-               iconv(cd,NULL,NULL,NULL,NULL);
-               iconv_close(cd);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  jm_cv_lib_iconv=yes
-              jm_cv_func_iconv=yes
-              jm_cv_include="biconv.h"
-              jm_cv_biconv=yes
-              jm_cv_lib_iconv="biconv"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-
-            LIBS="$jm_save_LIBS"
-	  fi
         fi
       fi
     fi
@@ -49165,32 +43468,37 @@
   fi
 
                 if test x"$ICONV_FOUND" = "xyes" ; then
-		    libext="$l"
-		    break
-		fi
+            libext="$l"
+            break;
         fi
+        fi
     done
 
     if test x"$ICONV_FOUND" = "xyes" ; then
-	iconv_current_LDFLAGS="-L$i/$libext"
-	iconv_current_CPPFLAGS="-I$i/include"
+	LDFLAGS=$save_LDFLAGS
 
-        if test x"$jm_cv_lib_iconv" != x; then
-	    iconv_current_LIBS="$LIBS -l$jm_cv_lib_iconv"
-	else
-	    # We found iconv in libc.
-	    iconv_current_LIBS=""
-        fi
+if test ""$i/$libext"" != "/usr/lib" ; then
+    LDFLAGS="$LDFLAGS -L"$i/$libext""
+fi
 
-    fi
 
-    if test x"$ICONV_FOUND" = "xyes" ; then
+if test ""$i/include"" != "/usr/include" ; then
+    CPPFLAGS="$CPPFLAGS -I"$i/include""
+fi
 
-        LDFLAGS="$save_LDFLAGS $iconv_current_LDFLAGS"
-        CPPFLAGS="$save_CPPFLAGS $iconv_current_CPPFLAGS"
-	LIBS="$save_LIBS $iconv_current_LIBS"
+	LIBS="$save_LIBS"
+        ICONV_LOCATION=$i
         export LDFLAGS LIBS CPPFLAGS
 
+        ############
+        # check for iconv in libc
+        ic_save_LIBS="$LIBS"
+        if test x"$ICONV_PATH_SPEC" = "xyes" ; then
+           LIBS="$LIBS -L$ICONV_LOCATION/$libext"
+        fi
+        if test x"$jm_cv_lib_iconv" != x; then
+           LIBS="$LIBS -l$jm_cv_lib_iconv"
+        fi
 	default_dos_charset=no
 	default_display_charset=no
 	default_unix_charset=no
@@ -49256,12 +43564,11 @@
   { echo "$as_me:$LINENO: result: $ICONV_CHARSET" >&5
 echo "${ECHO_T}$ICONV_CHARSET" >&6; }
 
-	    default_dos_charset="$ICONV_CHARSET"
-	    if test x"$default_dos_charset" = x"$j"; then
+	    if test x"$ICONV_CHARSET" = x"$j"; then
+		default_dos_charset="\"$j\""
 		break
 	    fi
 	done
-
 	# check for default display charset name
 	for j in ASCII 646 ; do
 
@@ -49323,12 +43630,11 @@
   { echo "$as_me:$LINENO: result: $ICONV_CHARSET" >&5
 echo "${ECHO_T}$ICONV_CHARSET" >&6; }
 
-	    default_display_charset="$ICONV_CHARSET"
-	    if test x"$default_display_charset" = x"$j"; then
+	    if test x"$ICONV_CHARSET" = x"$j"; then
+		default_display_charset="\"$j\""
 		break
 	    fi
 	done
-
 	# check for default unix charset name
 	for j in UTF-8 UTF8 ; do
 
@@ -49390,8 +43696,8 @@
   { echo "$as_me:$LINENO: result: $ICONV_CHARSET" >&5
 echo "${ECHO_T}$ICONV_CHARSET" >&6; }
 
-	    default_unix_charset="$ICONV_CHARSET"
-	    if test x"$default_unix_charset" = x"$j"; then
+	    if test x"$ICONV_CHARSET" = x"$j"; then
+		default_unix_charset="\"$j\""
 		break
 	    fi
 	done
@@ -49404,54 +43710,36 @@
 		"$default_unix_charset" != "cross"
 	then
 		samba_cv_HAVE_NATIVE_ICONV=yes
-	else
-	    if test "$default_dos_charset" = "cross" -o \
+	else if test "$default_dos_charset" = "cross" -o \
 		     "$default_display_charset" = "cross" -o \
 		     "$default_unix_charset" = "cross"
-	    then
-		    samba_cv_HAVE_NATIVE_ICONV=cross
-	    else
-		    samba_cv_HAVE_NATIVE_ICONV=no
-	    fi
+	then
+		samba_cv_HAVE_NATIVE_ICONV=cross
+	else
+		samba_cv_HAVE_NATIVE_ICONV=no
 	fi
-
-	# At this point, we have a libiconv candidate. We know that
-	# we have the right headers and libraries, but we don't know
-	# whether it does the conversions we want. We can't test this
-	# because we are cross-compiling. This is not necessarily a big
-	# deal, since we can't guarantee that the results we get now will
-	# match the results we get at runtime anyway.
-	if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"cross" ; then
-	    default_dos_charset="CP850"
-	    default_display_charset="ASCII"
-	    default_unix_charset="UTF-8"
-	    samba_cv_HAVE_NATIVE_ICONV=yes
-	    { echo "$as_me:$LINENO: WARNING: assuming the libiconv in $iconv_current_LDFLAGS can convert" >&5
-echo "$as_me: WARNING: assuming the libiconv in $iconv_current_LDFLAGS can convert" >&2;}
-	    { echo "$as_me:$LINENO: WARNING: $default_dos_charset, $default_display_charset and $default_unix_charset to UCS-16LE" >&5
-echo "$as_me: WARNING: $default_dos_charset, $default_display_charset and $default_unix_charset to UCS-16LE" >&2;}
 	fi
 
-        if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes" ; then
+        LIBS="$ic_save_LIBS"
+        if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes"; then
+  	   CPPFLAGS=$save_CPPFLAGS
+	   LDFLAGS=$save_LDFLAGS
+	   LIBS=$save_LIBS
+           if test x"$jm_cv_lib_iconv" != x; then
+              LIBS="$LIBS -l$jm_cv_lib_iconv"
+           fi
 
-	    CPPFLAGS=$save_CPPFLAGS
-	    LDFLAGS=$save_LDFLAGS
-	    LIBS=$save_LIBS
+if test ""$i/include"" != "/usr/include" ; then
+    CPPFLAGS="$CPPFLAGS -I"$i/include""
+fi
 
-	    if test x"$iconv_current_LIBS" != x; then
-		LIBS="$LIBS $iconv_current_LIBS"
-	    fi
 
-	    # Add the flags we need to CPPFLAGS and LDFLAGS
-	    CPPFLAGS="$CPPFLAGS $iconv_current_CPPFLAGS"
-	    LDFLAGS="$LDFLAGS $iconv_current_LDFLAGS"
+if test ""$i/$libext"" != "/usr/lib" ; then
+    LDFLAGS="$LDFLAGS -L"$i/$libext""
+fi
 
-	    # Turn the #defines into string literals
-	    default_dos_charset="\"$default_dos_charset\""
-	    default_display_charset="\"$default_display_charset\""
-	    default_unix_charset="\"$default_unix_charset\""
+	   export CPPFLAGS
 
-
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_NATIVE_ICONV 1
 _ACEOF
@@ -49471,14 +43759,9 @@
 #define DEFAULT_UNIX_CHARSET $default_unix_charset
 _ACEOF
 
-
            break
         fi
-
-    # We didn't find a working iconv, so keep going
     fi
-
-    #  We only need to clean these up here for the next pass through the loop
     CPPFLAGS=$save_CPPFLAGS
     LDFLAGS=$save_LDFLAGS
     LIBS=$save_LIBS
@@ -49775,12 +44058,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -50097,12 +44375,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -50751,12 +45024,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -50883,12 +45151,6 @@
 
 
 
-# Add TSM SM VFS module only if there are both GPFS and DMAPI support
-# Theoretically it should work with AIX JFS2 too but this needs testing
-if test x"$samba_cv_HAVE_GPFS" = x"yes" && test x"$samba_dmapi_libs" != x"" ; then
-    default_shared_modules="$default_shared_modules vfs_tsmsm"
-fi
-
 { echo "$as_me:$LINENO: checking for kernel share modes" >&5
 echo $ECHO_N "checking for kernel share modes... $ECHO_C" >&6; }
 if test "${samba_cv_HAVE_KERNEL_SHARE_MODES+set}" = set; then
@@ -51136,12 +45398,7 @@
 echo "$as_me: WARNING: sys/capability.h: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: sys/capability.h: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: sys/capability.h: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for sys/capability.h" >&5
@@ -51879,6 +46136,68 @@
 
 fi
 
+{ echo "$as_me:$LINENO: checking for AF_LOCAL socket support" >&5
+echo $ECHO_N "checking for AF_LOCAL socket support... $ECHO_C" >&6; }
+if test "${samba_cv_HAVE_WORKING_AF_LOCAL+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+if test "$cross_compiling" = yes; then
+  samba_cv_HAVE_WORKING_AF_LOCAL=cross
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include "${srcdir-.}/tests/unixsock.c"
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  samba_cv_HAVE_WORKING_AF_LOCAL=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+samba_cv_HAVE_WORKING_AF_LOCAL=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_WORKING_AF_LOCAL" >&5
+echo "${ECHO_T}$samba_cv_HAVE_WORKING_AF_LOCAL" >&6; }
+if test x"$samba_cv_HAVE_WORKING_AF_LOCAL" != xno
+then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_WORKING_AF_LOCAL 1
+_ACEOF
+
+fi
+
 { echo "$as_me:$LINENO: checking for broken getgroups" >&5
 echo $ECHO_N "checking for broken getgroups... $ECHO_C" >&6; }
 if test "${samba_cv_HAVE_BROKEN_GETGROUPS+set}" = set; then
@@ -51940,7 +46259,205 @@
 
 fi
 
+{ echo "$as_me:$LINENO: checking for secure mkstemp" >&5
+echo $ECHO_N "checking for secure mkstemp... $ECHO_C" >&6; }
+if test "${samba_cv_HAVE_SECURE_MKSTEMP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
 
+if test "$cross_compiling" = yes; then
+  samba_cv_HAVE_SECURE_MKSTEMP=cross
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+main() {
+  struct stat st;
+  char tpl[20]="/tmp/test.XXXXXX";
+  int fd = mkstemp(tpl);
+  if (fd == -1) exit(1);
+  unlink(tpl);
+  if (fstat(fd, &st) != 0) exit(1);
+  if ((st.st_mode & 0777) != 0600) exit(1);
+  exit(0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  samba_cv_HAVE_SECURE_MKSTEMP=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+samba_cv_HAVE_SECURE_MKSTEMP=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_SECURE_MKSTEMP" >&5
+echo "${ECHO_T}$samba_cv_HAVE_SECURE_MKSTEMP" >&6; }
+if test x"$samba_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_SECURE_MKSTEMP 1
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for broken readdir" >&5
+echo $ECHO_N "checking for broken readdir... $ECHO_C" >&6; }
+if test "${samba_cv_HAVE_BROKEN_READDIR+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+	if test "$cross_compiling" = yes; then
+  samba_cv_HAVE_BROKEN_READDIR="assuming not"
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include "${srcdir-.}/tests/os2_delete.c"
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  samba_cv_HAVE_BROKEN_READDIR=no
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+samba_cv_HAVE_BROKEN_READDIR=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_BROKEN_READDIR" >&5
+echo "${ECHO_T}$samba_cv_HAVE_BROKEN_READDIR" >&6; }
+
+if test x"$samba_cv_HAVE_BROKEN_READDIR" = x"yes"; then
+{ echo "$as_me:$LINENO: checking for replacing readdir" >&5
+echo $ECHO_N "checking for replacing readdir... $ECHO_C" >&6; }
+if test "${samba_cv_REPLACE_READDIR+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+	if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include "${srcdir-.}/lib/repdir.c"
+#include "${srcdir-.}/tests/os2_delete.c"
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  samba_cv_REPLACE_READDIR=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+samba_cv_REPLACE_READDIR=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $samba_cv_REPLACE_READDIR" >&5
+echo "${ECHO_T}$samba_cv_REPLACE_READDIR" >&6; }
+fi
+
+if test x"$samba_cv_REPLACE_READDIR" = x"yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define REPLACE_READDIR 1
+_ACEOF
+
+fi
+
+
     { echo "$as_me:$LINENO: checking for sysconf(_SC_NGROUPS_MAX)" >&5
 echo $ECHO_N "checking for sysconf(_SC_NGROUPS_MAX)... $ECHO_C" >&6; }
 if test "${samba_cv_SYSCONF_SC_NGROUPS_MAX+set}" = set; then
@@ -52287,6 +46804,216 @@
 done
 
 
+##################
+# look for a method of finding the list of network interfaces
+iface=no;
+{ echo "$as_me:$LINENO: checking for iface AIX" >&5
+echo $ECHO_N "checking for iface AIX... $ECHO_C" >&6; }
+if test "${samba_cv_HAVE_IFACE_AIX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+SAVE_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
+if test "$cross_compiling" = yes; then
+  samba_cv_HAVE_IFACE_AIX=cross
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#define HAVE_IFACE_AIX 1
+#define AUTOCONF_TEST 1
+#undef _XOPEN_SOURCE_EXTENDED
+#include "${srcdir-.}/lib/interfaces.c"
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  samba_cv_HAVE_IFACE_AIX=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+samba_cv_HAVE_IFACE_AIX=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_IFACE_AIX" >&5
+echo "${ECHO_T}$samba_cv_HAVE_IFACE_AIX" >&6; }
+CPPFLAGS="$SAVE_CPPFLAGS"
+if test x"$samba_cv_HAVE_IFACE_AIX" = x"yes"; then
+    iface=yes;
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_IFACE_AIX 1
+_ACEOF
+
+fi
+
+if test $iface = no; then
+{ echo "$as_me:$LINENO: checking for iface ifconf" >&5
+echo $ECHO_N "checking for iface ifconf... $ECHO_C" >&6; }
+if test "${samba_cv_HAVE_IFACE_IFCONF+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+SAVE_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
+if test "$cross_compiling" = yes; then
+  samba_cv_HAVE_IFACE_IFCONF=cross
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#define HAVE_IFACE_IFCONF 1
+#define AUTOCONF_TEST 1
+#include "${srcdir-.}/lib/interfaces.c"
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  samba_cv_HAVE_IFACE_IFCONF=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+samba_cv_HAVE_IFACE_IFCONF=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_IFACE_IFCONF" >&5
+echo "${ECHO_T}$samba_cv_HAVE_IFACE_IFCONF" >&6; }
+CPPFLAGS="$SAVE_CPPFLAGS"
+if test x"$samba_cv_HAVE_IFACE_IFCONF" = x"yes"; then
+    iface=yes;
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_IFACE_IFCONF 1
+_ACEOF
+
+fi
+fi
+
+if test $iface = no; then
+{ echo "$as_me:$LINENO: checking for iface ifreq" >&5
+echo $ECHO_N "checking for iface ifreq... $ECHO_C" >&6; }
+if test "${samba_cv_HAVE_IFACE_IFREQ+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+SAVE_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
+if test "$cross_compiling" = yes; then
+  samba_cv_HAVE_IFACE_IFREQ=cross
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#define HAVE_IFACE_IFREQ 1
+#define AUTOCONF_TEST 1
+#include "${srcdir-.}/lib/interfaces.c"
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  samba_cv_HAVE_IFACE_IFREQ=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+samba_cv_HAVE_IFACE_IFREQ=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_IFACE_IFREQ" >&5
+echo "${ECHO_T}$samba_cv_HAVE_IFACE_IFREQ" >&6; }
+CPPFLAGS="$SAVE_CPPFLAGS"
+if test x"$samba_cv_HAVE_IFACE_IFREQ" = x"yes"; then
+    iface=yes;
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_IFACE_IFREQ 1
+_ACEOF
+
+fi
+fi
+
+
 ################################################
 # look for a method of setting the effective uid
 seteuid=no;
@@ -52559,66 +47286,64 @@
 fi
 fi
 
-{ echo "$as_me:$LINENO: checking for the Darwin initgroups system call" >&5
-echo $ECHO_N "checking for the Darwin initgroups system call... $ECHO_C" >&6; }
-if test "${samba_cv_DARWIN_INITGROUPS+set}" = set; then
+
+{ echo "$as_me:$LINENO: checking for working mmap" >&5
+echo $ECHO_N "checking for working mmap... $ECHO_C" >&6; }
+if test "${samba_cv_HAVE_MMAP+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
+
+if test "$cross_compiling" = yes; then
+  samba_cv_HAVE_MMAP=cross
+else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-
-#include <sys/syscall.h>
-#include <unistd.h>
-
-int
-main ()
-{
- syscall(SYS_initgroups, 16, NULL, NULL, 0);
-  ;
-  return 0;
-}
+#include "${srcdir-.}/tests/shared_mmap.c"
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
+rm -f conftest$ac_exeext
 if { (ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
 eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
+  (eval "$ac_link") 2>&5
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  samba_cv_DARWIN_INITGROUPS=yes
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  samba_cv_HAVE_MMAP=yes
 else
-  echo "$as_me: failed program was:" >&5
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-	samba_cv_DARWIN_INITGROUPS=no
+( exit $ac_status )
+samba_cv_HAVE_MMAP=no
 fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
 
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
 
 fi
-{ echo "$as_me:$LINENO: result: $samba_cv_DARWIN_INITGROUPS" >&5
-echo "${ECHO_T}$samba_cv_DARWIN_INITGROUPS" >&6; }
+{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_MMAP" >&5
+echo "${ECHO_T}$samba_cv_HAVE_MMAP" >&6; }
+if test x"$samba_cv_HAVE_MMAP" = x"yes"; then
 
-if test x"$samba_cv_DARWIN_INITGROUPS" = x"yes" ; then
-
 cat >>confdefs.h <<\_ACEOF
-#define HAVE_DARWIN_INITGROUPS 1
+#define HAVE_MMAP 1
 _ACEOF
 
 fi
@@ -53012,6 +47737,75 @@
 
 fi
 
+case "$host_os" in
+*linux*)
+{ echo "$as_me:$LINENO: checking for broken RedHat 7.2 system header files" >&5
+echo $ECHO_N "checking for broken RedHat 7.2 system header files... $ECHO_C" >&6; }
+if test "${samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#ifdef HAVE_SYS_VFS_H
+#include <sys/vfs.h>
+#endif
+#ifdef HAVE_SYS_CAPABILITY_H
+#include <sys/capability.h>
+#endif
+
+int
+main ()
+{
+int i;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS" >&5
+echo "${ECHO_T}$samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS" >&6; }
+if test x"$samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS" = x"yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define BROKEN_REDHAT_7_SYSTEM_HEADERS 1
+_ACEOF
+
+fi
+;;
+esac
+
 { echo "$as_me:$LINENO: checking for broken nisplus include files" >&5
 echo $ECHO_N "checking for broken nisplus include files... $ECHO_C" >&6; }
 if test "${samba_cv_BROKEN_NISPLUS_INCLUDE_FILES+set}" = set; then
@@ -53332,12 +48126,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -53601,12 +48390,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -53828,164 +48612,6 @@
 fi
 
 
-  ########################################################
-  # If ber_sockbuf_add_io() is available we can add
-  # SASL wrapping hooks
-
-
-
-    ac_check_func_ext_save_LIBS=$LIBS
-    LIBS="$LDAP_LIBS $LIBS"
-        { echo "$as_me:$LINENO: checking for ber_sockbuf_add_io" >&5
-echo $ECHO_N "checking for ber_sockbuf_add_io... $ECHO_C" >&6; }
-if test "${ac_cv_func_ext_ber_sockbuf_add_io+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define ber_sockbuf_add_io to an innocuous variant, in case <limits.h> declares ber_sockbuf_add_io.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define ber_sockbuf_add_io innocuous_ber_sockbuf_add_io
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char ber_sockbuf_add_io (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef ber_sockbuf_add_io
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char ber_sockbuf_add_io ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_ber_sockbuf_add_io || defined __stub___ber_sockbuf_add_io
-choke me
-#endif
-
-int
-main ()
-{
-return ber_sockbuf_add_io ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_func_ext_ber_sockbuf_add_io=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_func_ext_ber_sockbuf_add_io=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_ext_ber_sockbuf_add_io" >&5
-echo "${ECHO_T}$ac_cv_func_ext_ber_sockbuf_add_io" >&6; }
-    LIBS=$ac_check_func_ext_save_LIBS
-    if test $ac_cv_func_ext_ber_sockbuf_add_io = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_BER_SOCKBUF_ADD_IO 1
-_ACEOF
-
-fi
-
-
-  { echo "$as_me:$LINENO: checking for LDAP_OPT_SOCKBUF" >&5
-echo $ECHO_N "checking for LDAP_OPT_SOCKBUF... $ECHO_C" >&6; }
-if test "${samba_cv_HAVE_LDAP_OPT_SOCKBUF+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-		 cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ldap.h>
-int
-main ()
-{
-int val = LDAP_OPT_SOCKBUF;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  samba_cv_HAVE_LDAP_OPT_SOCKBUF=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	samba_cv_HAVE_LDAP_OPT_SOCKBUF=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_LDAP_OPT_SOCKBUF" >&5
-echo "${ECHO_T}$samba_cv_HAVE_LDAP_OPT_SOCKBUF" >&6; }
-
-  if test x"$ac_cv_func_ext_ber_sockbuf_add_io" = x"yes" -a \
-  	  x"$samba_cv_HAVE_LDAP_OPT_SOCKBUF" = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_LDAP_SASL_WRAPPING 1
-_ACEOF
-
-  fi
-
   #######################################################
   # if we have LBER_OPT_LOG_PRINT_FN, we can intercept
   # ldap logging and print it out in the samba logs
@@ -54920,13 +49546,11 @@
           KRB5_CFLAGS="-I/usr/include/heimdal"
           KRB5_CPPFLAGS="-I/usr/include/heimdal"
           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
-	  FOUND_KRB5=yes
           { echo "$as_me:$LINENO: result: yes" >&5
 echo "${ECHO_T}yes" >&6; }
       else
           KRB5_CFLAGS="-I/usr/include/heimdal"
           KRB5_CPPFLAGS="-I/usr/include/heimdal"
-	  FOUND_KRB5=yes
           { echo "$as_me:$LINENO: result: yes" >&5
 echo "${ECHO_T}yes" >&6; }
       fi
@@ -54945,7 +49569,6 @@
       KRB5_LDFLAGS="-L/usr/kerberos/lib"
       KRB5_CFLAGS="-I/usr/kerberos/include"
       KRB5_CPPFLAGS="-I/usr/kerberos/include"
-      FOUND_KRB5=yes
       { echo "$as_me:$LINENO: result: yes" >&5
 echo "${ECHO_T}yes" >&6; }
     else
@@ -54954,23 +49577,6 @@
     fi
   fi
 
-  if test x$FOUND_KRB5 = x"no"; then
-    #################################################
-    # see if this box has the OpenBSD location for heimdal krb5
-    { echo "$as_me:$LINENO: checking for /usr/include/kerberosV" >&5
-echo $ECHO_N "checking for /usr/include/kerberosV... $ECHO_C" >&6; }
-    if test -d /usr/include/kerberosV; then
-      KRB5_CPPFLAGS="-I/usr/include/kerberosV"
-      KRB5_LIBS="-lcrypto"
-      FOUND_KRB5=yes
-      { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
-    else
-      { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-    fi
-  fi
-
   ac_save_CFLAGS=$CFLAGS
   ac_save_CPPFLAGS=$CPPFLAGS
   ac_save_LDFLAGS=$LDFLAGS
@@ -55100,12 +49706,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -55268,12 +49869,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -55297,10 +49893,6 @@
 
 done
 
-  if test x"$ac_cv_header_krb5_locate_plugin_h" = x"yes"; then
-	WINBIND_KRB5_LOCATOR="bin/winbind_krb5_locator.$SHLIBEXT"
-	EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WINBIND_KRB5_LOCATOR"
-  fi
 fi
 
 # Now we have determined whether we really want ADS support
@@ -55431,12 +50023,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -59999,199 +54586,11 @@
 fi
 
 
-
-
-    ac_check_func_ext_save_LIBS=$LIBS
-    LIBS="$KRB5_LIBS $LIBS"
-        { echo "$as_me:$LINENO: checking for krb5_get_init_creds_opt_get_error" >&5
-echo $ECHO_N "checking for krb5_get_init_creds_opt_get_error... $ECHO_C" >&6; }
-if test "${ac_cv_func_ext_krb5_get_init_creds_opt_get_error+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define krb5_get_init_creds_opt_get_error to an innocuous variant, in case <limits.h> declares krb5_get_init_creds_opt_get_error.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define krb5_get_init_creds_opt_get_error innocuous_krb5_get_init_creds_opt_get_error
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char krb5_get_init_creds_opt_get_error (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef krb5_get_init_creds_opt_get_error
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char krb5_get_init_creds_opt_get_error ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_krb5_get_init_creds_opt_get_error || defined __stub___krb5_get_init_creds_opt_get_error
-choke me
-#endif
-
-int
-main ()
-{
-return krb5_get_init_creds_opt_get_error ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_func_ext_krb5_get_init_creds_opt_get_error=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_func_ext_krb5_get_init_creds_opt_get_error=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_ext_krb5_get_init_creds_opt_get_error" >&5
-echo "${ECHO_T}$ac_cv_func_ext_krb5_get_init_creds_opt_get_error" >&6; }
-    LIBS=$ac_check_func_ext_save_LIBS
-    if test $ac_cv_func_ext_krb5_get_init_creds_opt_get_error = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_KRB5_GET_INIT_CREDS_OPT_GET_ERROR 1
-_ACEOF
-
-fi
-
-
-
-
-    ac_check_func_ext_save_LIBS=$LIBS
-    LIBS="$KRB5_LIBS $LIBS"
-        { echo "$as_me:$LINENO: checking for krb5_enctype_to_string" >&5
-echo $ECHO_N "checking for krb5_enctype_to_string... $ECHO_C" >&6; }
-if test "${ac_cv_func_ext_krb5_enctype_to_string+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define krb5_enctype_to_string to an innocuous variant, in case <limits.h> declares krb5_enctype_to_string.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define krb5_enctype_to_string innocuous_krb5_enctype_to_string
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char krb5_enctype_to_string (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef krb5_enctype_to_string
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char krb5_enctype_to_string ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_krb5_enctype_to_string || defined __stub___krb5_enctype_to_string
-choke me
-#endif
-
-int
-main ()
-{
-return krb5_enctype_to_string ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_func_ext_krb5_enctype_to_string=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_func_ext_krb5_enctype_to_string=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_ext_krb5_enctype_to_string" >&5
-echo "${ECHO_T}$ac_cv_func_ext_krb5_enctype_to_string" >&6; }
-    LIBS=$ac_check_func_ext_save_LIBS
-    if test $ac_cv_func_ext_krb5_enctype_to_string = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_KRB5_ENCTYPE_TO_STRING 1
-_ACEOF
-
-fi
-
-
   LIBS="$KRB5_LIBS $LIBS"
 
   { echo "$as_me:$LINENO: checking whether krb5_ticket contains kvno and enctype" >&5
 echo $ECHO_N "checking whether krb5_ticket contains kvno and enctype... $ECHO_C" >&6; }
-if test "${smb_krb5_cv_ticket_has_keyinfo+set}" = set; then
+if test "${smb_krb5_ticket_has_keyinfo+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
@@ -60236,21 +54635,21 @@
 	 test -z "$ac_c_werror_flag" ||
 	 test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-   smb_krb5_cv_ticket_has_keyinfo=yes
+   smb_krb5_ticket_has_keyinfo=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-	 smb_krb5_cv_ticket_has_keyinfo=no
+	 smb_krb5_ticket_has_keyinfo=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 fi
-{ echo "$as_me:$LINENO: result: $smb_krb5_cv_ticket_has_keyinfo" >&5
-echo "${ECHO_T}$smb_krb5_cv_ticket_has_keyinfo" >&6; }
+{ echo "$as_me:$LINENO: result: $smb_krb5_ticket_has_keyinfo" >&5
+echo "${ECHO_T}$smb_krb5_ticket_has_keyinfo" >&6; }
 
-  if test x"$smb_krb5_cv_ticket_has_keyinfo" = x"yes" ; then
+  if test x"$smb_krb5_ticket_has_keyinfo" = x"yes" ; then
 
 cat >>confdefs.h <<\_ACEOF
 #define KRB5_TICKET_HAS_KEYINFO 1
@@ -60260,7 +54659,7 @@
 
   { echo "$as_me:$LINENO: checking whether krb5_get_init_creds_opt_free takes a context argument" >&5
 echo $ECHO_N "checking whether krb5_get_init_creds_opt_free takes a context argument... $ECHO_C" >&6; }
-if test "${smb_krb5_cv_creds_opt_free_context+set}" = set; then
+if test "${smb_krb5_creds_opt_free_context+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
@@ -60301,22 +54700,22 @@
 	 test -z "$ac_c_werror_flag" ||
 	 test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  smb_krb5_cv_creds_opt_free_context=yes
+  smb_krb5_creds_opt_free_context=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-	smb_krb5_cv_creds_opt_free_context=no
+	smb_krb5_creds_opt_free_context=no
 
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 fi
-{ echo "$as_me:$LINENO: result: $smb_krb5_cv_creds_opt_free_context" >&5
-echo "${ECHO_T}$smb_krb5_cv_creds_opt_free_context" >&6; }
+{ echo "$as_me:$LINENO: result: $smb_krb5_creds_opt_free_context" >&5
+echo "${ECHO_T}$smb_krb5_creds_opt_free_context" >&6; }
 
-  if test x"$smb_krb5_cv_creds_opt_free_context" = x"yes" ; then
+  if test x"$smb_krb5_creds_opt_free_context" = x"yes" ; then
 
 cat >>confdefs.h <<\_ACEOF
 #define KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT 1
@@ -60326,7 +54725,7 @@
 
   { echo "$as_me:$LINENO: checking whether krb5_verify_checksum takes 7 arguments" >&5
 echo $ECHO_N "checking whether krb5_verify_checksum takes 7 arguments... $ECHO_C" >&6; }
-if test "${smb_krb5_cv_verify_checksum+set}" = set; then
+if test "${smb_krb5_verify_checksum+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
@@ -60363,22 +54762,22 @@
 	 test -z "$ac_c_werror_flag" ||
 	 test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  smb_krb5_cv_verify_checksum=7
+  smb_krb5_verify_checksum=7
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-	smb_krb5_cv_verify_checksum=6
+	smb_krb5_verify_checksum=6
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 fi
-{ echo "$as_me:$LINENO: result: $smb_krb5_cv_verify_checksum" >&5
-echo "${ECHO_T}$smb_krb5_cv_verify_checksum" >&6; }
+{ echo "$as_me:$LINENO: result: $smb_krb5_verify_checksum" >&5
+echo "${ECHO_T}$smb_krb5_verify_checksum" >&6; }
 
 cat >>confdefs.h <<_ACEOF
-#define KRB5_VERIFY_CHECKSUM_ARGS $smb_krb5_cv_verify_checksum
+#define KRB5_VERIFY_CHECKSUM_ARGS $smb_krb5_verify_checksum
 _ACEOF
 
 
@@ -61930,196 +56329,7 @@
 
   fi
 
-  if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
-    { echo "$as_me:$LINENO: checking for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)" >&5
-echo $ECHO_N "checking for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)... $ECHO_C" >&6; }
-if test "${smb_krb5_cv_enctype_to_string_takes_krb5_context_arg+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
 
-
-	old_CFLAGS="$CFLAGS";
-	CFLAGS="$Werror_FLAGS";
-	export CFLAGS;
-	old_CPPFLAGS="$CPPFLAGS";
-	CPPFLAGS="$CPPFLAGS";
-	export CPPFLAGS;
-	old_LDFLAGS="$LDFLAGS";
-	LDFLAGS="$LDFLAGS";
-	export LDFLAGS;
-	if test "$cross_compiling" = yes; then
-  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-		#include <krb5.h>
-		int main(void) {
-			krb5_context context = NULL;
-			char *str = NULL;
-			krb5_enctype_to_string(context, 1, &str);
-			if (str) free (str);
-			return 0;
-		}
-
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-
-	CFLAGS="$old_CFLAGS";
-	old_CFLAGS="";
-	export CFLAGS;
-	CPPFLAGS="$old_CPPFLAGS";
-	old_CPPFLAGS="";
-	export CPPFLAGS;
-	LDFLAGS="$old_LDFLAGS";
-	old_LDFLAGS="";
-	export LDFLAGS;
-
-fi
-{ echo "$as_me:$LINENO: result: $smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" >&5
-echo "${ECHO_T}$smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" >&6; }
-
-    if test x"$smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG 1
-_ACEOF
-
-    fi
-
-    { echo "$as_me:$LINENO: checking for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)" >&5
-echo $ECHO_N "checking for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)... $ECHO_C" >&6; }
-if test "${smb_krb5_cv_enctype_to_string_takes_size_t_arg+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-
-	old_CFLAGS="$CFLAGS";
-	CFLAGS="$Werror_FLAGS";
-	export CFLAGS;
-	old_CPPFLAGS="$CPPFLAGS";
-	CPPFLAGS="$CPPFLAGS";
-	export CPPFLAGS;
-	old_LDFLAGS="$LDFLAGS";
-	LDFLAGS="$LDFLAGS";
-	export LDFLAGS;
-	if test "$cross_compiling" = yes; then
-  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-		#include <krb5.h>
-		int main(void) {
-			char buf[256];
-			krb5_enctype_to_string(1, buf, 256);
-			return 0;
-		}
-
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-smb_krb5_cv_enctype_to_string_takes_size_t_arg=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-
-	CFLAGS="$old_CFLAGS";
-	old_CFLAGS="";
-	export CFLAGS;
-	CPPFLAGS="$old_CPPFLAGS";
-	old_CPPFLAGS="";
-	export CPPFLAGS;
-	LDFLAGS="$old_LDFLAGS";
-	old_LDFLAGS="";
-	export LDFLAGS;
-
-fi
-{ echo "$as_me:$LINENO: result: $smb_krb5_cv_enctype_to_string_takes_size_t_arg" >&5
-echo "${ECHO_T}$smb_krb5_cv_enctype_to_string_takes_size_t_arg" >&6; }
-
-    if test x"$smb_krb5_cv_enctype_to_string_takes_size_t_arg" = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG 1
-_ACEOF
-
-    fi
-  fi
-
   { echo "$as_me:$LINENO: checking for krb5_principal_get_realm" >&5
 echo $ECHO_N "checking for krb5_principal_get_realm... $ECHO_C" >&6; }
 if test "${samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM+set}" = set; then
@@ -62287,7 +56497,7 @@
     use_ads=no
   fi
 
-  if test x"$smb_krb5_cv_ticket_has_keyinfo" != x"yes" ; then
+  if test x"$smb_krb5_ticket_has_keyinfo" != x"yes" ; then
 
       # We only need the following functions if we can't get the enctype
       # and kvno out of the ticket directly (ie. on Heimdal).
@@ -62612,12 +56822,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -62938,6 +57143,45 @@
 
 
 #################################################
+# check for smbmount support
+{ echo "$as_me:$LINENO: checking whether to use smbmount" >&5
+echo $ECHO_N "checking whether to use smbmount... $ECHO_C" >&6; }
+
+# Check whether --with-smbmount was given.
+if test "${with_smbmount+set}" = set; then
+  withval=$with_smbmount;  case "$withval" in
+  yes)
+	case "$host_os" in
+	*linux*)
+		{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define WITH_SMBMOUNT 1
+_ACEOF
+
+		SMBMOUNT_PROGS="bin/smbmount bin/smbmnt bin/smbumount"
+		;;
+	*)
+		{ { echo "$as_me:$LINENO: error: not on a linux system!" >&5
+echo "$as_me: error: not on a linux system!" >&2;}
+   { (exit 1); exit 1; }; }
+		;;
+	esac
+    ;;
+  *)
+    { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+    ;;
+  esac
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+
+fi
+
+
+#################################################
 # check for mount- and umount.cifs support
 CIFSMOUNT_PROGS=""
 INSTALL_CIFSMOUNT=""
@@ -62997,216 +57241,9 @@
 fi
 
 
-#################################################
-# check for cifs.spnego support
 
-for ac_header in keyutils.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
- HAVE_KEYUTILS_H=1
-else
-  HAVE_KEYUTILS_H=0
-fi
-
-done
-
-CIFSSPNEGO_PROGS=""
-INSTALL_CIFSSPNEGO=""
-UNINSTALL_CIFSSPNEGO=""
-{ echo "$as_me:$LINENO: checking whether to build cifs.spnego" >&5
-echo $ECHO_N "checking whether to build cifs.spnego... $ECHO_C" >&6; }
-
-# Check whether --with-cifsspnego was given.
-if test "${with_cifsspnego+set}" = set; then
-  withval=$with_cifsspnego;  case "$withval" in
-  no)
-	{ echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-	;;
-  *)
-	case "$host_os" in
-	*linux*)
-		if test x"$use_ads" != x"yes"; then
-			{ { echo "$as_me:$LINENO: error: ADS support should be enabled for building cifs.spnego" >&5
-echo "$as_me: error: ADS support should be enabled for building cifs.spnego" >&2;}
-   { (exit 1); exit 1; }; }
-		elif test x"$HAVE_KEYUTILS_H" != "x1"; then
-			{ { echo "$as_me:$LINENO: error: keyutils package is required for cifs.spnego" >&5
-echo "$as_me: error: keyutils package is required for cifs.spnego" >&2;}
-   { (exit 1); exit 1; }; }
-		else
-			{ echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
-
-cat >>confdefs.h <<\_ACEOF
-#define WITH_CIFSSPNEGO 1
-_ACEOF
-
-			CIFSSPNEGO_PROGS="bin/cifs.spnego"
-			INSTALL_CIFSSPNEGO="installcifsspnego"
-			UNINSTALL_CIFSSPNEGO="uninstallcifsspnego"
-		fi
-		;;
-	*)
-		{ { echo "$as_me:$LINENO: error: not on a linux system!" >&5
-echo "$as_me: error: not on a linux system!" >&2;}
-   { (exit 1); exit 1; }; }
-		;;
-	esac
-    ;;
-  esac
-else
-
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-
-
-fi
-
-
-
 #################################################
-# Check for a PAM clear-text auth, accounts, password
-# and session support. Most PAM implementations keep their
-# headers in /usr/include/security. Darwin keeps its in
-# /usr/include/pam.
-
+# check for a PAM clear-text auth, accounts, password and session support
 with_pam_for_crypt=no
 try_pam=no
 { echo "$as_me:$LINENO: checking whether to try PAM support" >&5
@@ -63231,11 +57268,8 @@
 	use_pam=yes
 	create_pam_modules=yes
 
-	# Most systems have PAM headers in /usr/include/security, but Darwin
-	# has them in /usr/include/pam.
 
-
-for ac_header in security/pam_appl.h pam/pam_appl.h
+for ac_header in security/pam_appl.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
@@ -63350,12 +57384,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -63379,11 +57408,10 @@
 
 done
 
-	if test x"$ac_cv_header_security_pam_appl_h" != x"yes" -a \
-		x"$ac_cv_header_pam_pam_appl_h" != x"yes"; then
+	if test x"$ac_cv_header_security_pam_appl_h" != x"yes"; then
 		if test x"${try_pam}" = x"yes";then
-			{ { echo "$as_me:$LINENO: error: --with-pam=yes but pam_appl.h not found" >&5
-echo "$as_me: error: --with-pam=yes but pam_appl.h not found" >&2;}
+			{ { echo "$as_me:$LINENO: error: --with-pam=yes but security/pam_appl.h not found" >&5
+echo "$as_me: error: --with-pam=yes but security/pam_appl.h not found" >&2;}
    { (exit 1); exit 1; }; }
 		fi
 		use_pam=no
@@ -63496,8 +57524,7 @@
 	fi
 
 
-
-for ac_header in security/pam_modules.h pam/pam_modules.h
+for ac_header in security/pam_modules.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -63515,9 +57542,6 @@
 		#if HAVE_SECURITY_PAM_APPL_H
 		#include <security/pam_appl.h>
 		#endif
-		#if HAVE_PAM_PAM_APPL_H
-		#include <pam/pam_appl.h>
-		#endif
 
 
 #include <$ac_header>
@@ -63561,11 +57585,10 @@
 
 done
 
-	if test x"$ac_cv_header_security_pam_modules_h" = x"no" -a \
-		x"$ac_cv_header_pam_pam_modules_h" = x"no" ; then
+       if test x"$ac_cv_header_security_pam_modules_h" = x"no"; then
 		if test x"${try_pam}" = x"yes";then
-			{ { echo "$as_me:$LINENO: error: --with-pam=yes but pam_modules.h not found" >&5
-echo "$as_me: error: --with-pam=yes but pam_modules.h not found" >&2;}
+			{ { echo "$as_me:$LINENO: error: --with-pam=yes but security/pam_modules.h not found" >&5
+echo "$as_me: error: --with-pam=yes but security/pam_modules.h not found" >&2;}
    { (exit 1); exit 1; }; }
        fi
 		create_pam_modules=no
@@ -63710,159 +57733,8 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
 
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-for ac_header in pam/pam_ext.h pam/_pam_macros.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
     ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
@@ -64519,12 +58391,7 @@
 echo "$as_me: WARNING: asm/types.h: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: asm/types.h: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: asm/types.h: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for asm/types.h" >&5
@@ -64671,160 +58538,8 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
 
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-# For quotas on Linux XFS filesystems
-
-for ac_header in linux/dqblk_xfs.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
     ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
@@ -64965,12 +58680,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -65517,12 +59227,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -65763,12 +59468,7 @@
 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
+
     ;;
 esac
 { echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -66206,278 +59906,62 @@
 fi
 
 #################################################
-# --disable-shared-libs
-# can be used to disable the internal use of shared libs altogether
-# (this only has an effect when building shared libs is enabled)
-#
-USESHARED=false
+# should we build libmsrpc?
+INSTALL_LIBMSRPC=
+UNINSTALL_LIBMSRPC=
+LIBMSRPC_SHARED=
+LIBMSRPC=
+{ echo "$as_me:$LINENO: checking whether to build the libmsrpc shared library" >&5
+echo $ECHO_N "checking whether to build the libmsrpc shared library... $ECHO_C" >&6; }
 
-
-{ echo "$as_me:$LINENO: checking whether to use shared libraries internally" >&5
-echo $ECHO_N "checking whether to use shared libraries internally... $ECHO_C" >&6; }
-# Check whether --enable-shared-libs was given.
-if test "${enable_shared_libs+set}" = set; then
-  enableval=$enable_shared_libs; enable_shared_libs=$enableval
-else
-  enable_shared_libs=yes
-fi
-
-
-if test x"$enable_shared_libs" != x"no" ; then
-	USESHARED=$BLDSHARED
-fi
-
-{ echo "$as_me:$LINENO: result: $USESHARED" >&5
-echo "${ECHO_T}$USESHARED" >&6; }
-
-if test x"$enable_shared_libs" = x"yes" -a x"$BLDSHARED" != x"true" ; then
-	{ echo "$as_me:$LINENO: WARNING: --enable-shared-libs: no support for shared libraries" >&5
-echo "$as_me: WARNING: --enable-shared-libs: no support for shared libraries" >&2;}
-fi
-
-#################################################
-# --with-static-libs=LIBS:
-#   link (internal) libs dynamically or statically?
-#
-# If a subsystem is built as a library then this controls whether they are
-# linked into Samba targets statically or dynamically:
-#
-# * If we build the shared library at all, we link dynamically by default.
-#
-# * We only link statically if we don't build shared or if the library
-#   appears in the --with-static-libs configure option.
-#
-# Example:
-#   --with-static-libs=libtalloc makes use of libtalloc.a instead
-#   of linking the dynamic variant with -ltalloc.
-#
-# NOTE: This option only affects libraries that we do not only build
-# but that samba also links against as libraries (as opposed to linking
-# the plain object files. - This has to be configured in Makefile.in.
-# So in particular it does not harm to give invalid or unknown names here.
-#
-
-
-# Check whether --with-static-libs was given.
-if test "${with_static_libs+set}" = set; then
-  withval=$with_static_libs; if test $withval; then
-  for lib in `echo $withval | sed -e 's/,/ /g'` ; do
-			lib=`echo $lib | tr '[a-z]' '[A-Z]'`
-			eval LINK_$lib=STATIC
-		done
-fi
-
-fi
-
-
-#
-# WORKAROUND:
-#   until we have organized other internal subsystems (as util, registry
-#   and smbconf) into shared libraries, we CAN NOT link libnetapi
-#   dynamically to samba programs.
-#
-LINK_LIBNETAPI=STATIC
-
-
-
-
-
-
-LIBTALLOC_SHARED_TARGET=bin/libtalloc.$SHLIBEXT
-LIBTALLOC_STATIC_TARGET=bin/libtalloc.a
-LIBTALLOC_SHARED=
-LIBTALLOC_STATIC=
-LIBTALLOC_LIBS=
-
-
-
-
-
-
-
-{ echo "$as_me:$LINENO: checking whether to build the libtalloc shared library" >&5
-echo $ECHO_N "checking whether to build the libtalloc shared library... $ECHO_C" >&6; }
-
-# Check whether --with-libtalloc was given.
-if test "${with_libtalloc+set}" = set; then
-  withval=$with_libtalloc;
-case "$withval" in
-	*)
-		{ echo "$as_me:$LINENO: result: no" >&5
+# Check whether --with-libmsrpc was given.
+if test "${with_libmsrpc+set}" = set; then
+  withval=$with_libmsrpc;  case "$withval" in
+  no)
+     { echo "$as_me:$LINENO: result: no" >&5
 echo "${ECHO_T}no" >&6; }
-		build_lib=no
-		;;
-	yes)
-		build_lib=yes
-		;;
-esac
-
-else
-
-# if unspecified, default is to build it if possible.
-build_lib=yes
-
-
-fi
-
-
-if eval test x"$build_lib" = "xyes" -a $BLDSHARED = true; then
-	LIBTALLOC_SHARED=$LIBTALLOC_SHARED_TARGET
-	{ echo "$as_me:$LINENO: result: yes" >&5
+     ;;
+  *)
+     if test $BLDSHARED = true; then
+        LIBMSRPC_SHARED=bin/libmsrpc.$SHLIBEXT
+        LIBMSRPC=libmsrpc
+        { echo "$as_me:$LINENO: result: yes" >&5
 echo "${ECHO_T}yes" >&6; }
-	if test x"$USESHARED" != x"true" -o x"$LINK_LIBTALLOC" = "xSTATIC" ; then
-		LIBTALLOC_STATIC=$LIBTALLOC_STATIC_TARGET
-	else
-		LIBTALLOC_LIBS=-ltalloc
-	fi
-else
+     else
 	enable_static=yes
-	{ echo "$as_me:$LINENO: result: no shared library support -- will supply static library" >&5
+        { echo "$as_me:$LINENO: result: no shared library support -- will supply static library" >&5
 echo "${ECHO_T}no shared library support -- will supply static library" >&6; }
-fi
-if test $enable_static = yes; then
-	LIBTALLOC_STATIC=$LIBTALLOC_STATIC_TARGET
-fi
-
-
-
-
-
-
-
-
-
-
-
-LIBTDB_SHARED_TARGET=bin/libtdb.$SHLIBEXT
-LIBTDB_STATIC_TARGET=bin/libtdb.a
-LIBTDB_SHARED=
-LIBTDB_STATIC=
-LIBTDB_LIBS=
-
-
-
-
-
-
-
-{ echo "$as_me:$LINENO: checking whether to build the libtdb shared library" >&5
-echo $ECHO_N "checking whether to build the libtdb shared library... $ECHO_C" >&6; }
-
-# Check whether --with-libtdb was given.
-if test "${with_libtdb+set}" = set; then
-  withval=$with_libtdb;
-case "$withval" in
-	*)
-		{ echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-		build_lib=no
-		;;
-	yes)
-		build_lib=yes
-		;;
-esac
-
+     fi
+     if test $enable_static = yes; then
+        LIBMSRPC=libmsrpc
+     fi
+     INSTALL_LIBMSRPC=installlibmsrpc
+     UNINSTALL_LIBMSRPC=uninstalllibmsrpc
+     ;;
+  esac
 else
 
-# if unspecified, default is to build it if possible.
-build_lib=yes
-
-
-fi
-
-
-if eval test x"$build_lib" = "xyes" -a $BLDSHARED = true; then
-	LIBTDB_SHARED=$LIBTDB_SHARED_TARGET
-	{ echo "$as_me:$LINENO: result: yes" >&5
+# if unspecified, default is to built it if possible.
+  if test $BLDSHARED = true; then
+     LIBMSRPC_SHARED=bin/libmsrpc.$SHLIBEXT
+     LIBMSRPC=libmsrpc
+     { echo "$as_me:$LINENO: result: yes" >&5
 echo "${ECHO_T}yes" >&6; }
-	if test x"$USESHARED" != x"true" -o x"$LINK_LIBTDB" = "xSTATIC" ; then
-		LIBTDB_STATIC=$LIBTDB_STATIC_TARGET
-	else
-		LIBTDB_LIBS=-ltdb
-	fi
-else
-	enable_static=yes
-	{ echo "$as_me:$LINENO: result: no shared library support -- will supply static library" >&5
+   else
+     enable_static=yes
+     { echo "$as_me:$LINENO: result: no shared library support -- will supply static library" >&5
 echo "${ECHO_T}no shared library support -- will supply static library" >&6; }
-fi
-if test $enable_static = yes; then
-	LIBTDB_STATIC=$LIBTDB_STATIC_TARGET
-fi
+   fi
+   if test $enable_static = yes; then
+     LIBMSRPC=libmsrpc
+  fi
+  INSTALL_LIBMSRPC=installlibmsrpc
+  UNINSTALL_LIBMSRPC=uninstalllibmsrpc
 
-
-
-
-
-
-
-
-
-
-
-LIBNETAPI_SHARED_TARGET=bin/libnetapi.$SHLIBEXT
-LIBNETAPI_STATIC_TARGET=bin/libnetapi.a
-LIBNETAPI_SHARED=
-LIBNETAPI_STATIC=
-LIBNETAPI_LIBS=
-
-
-
-
-
-
-
-{ echo "$as_me:$LINENO: checking whether to build the libnetapi shared library" >&5
-echo $ECHO_N "checking whether to build the libnetapi shared library... $ECHO_C" >&6; }
-
-# Check whether --with-libnetapi was given.
-if test "${with_libnetapi+set}" = set; then
-  withval=$with_libnetapi;
-case "$withval" in
-	*)
-		{ echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-		build_lib=no
-		;;
-	yes)
-		build_lib=yes
-		;;
-esac
-
-else
-
-# if unspecified, default is to build it if possible.
-build_lib=yes
-
-
 fi
 
 
-if eval test x"$build_lib" = "xyes" -a $BLDSHARED = true; then
-	LIBNETAPI_SHARED=$LIBNETAPI_SHARED_TARGET
-	{ echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
-	if test x"$USESHARED" != x"true" -o x"$LINK_LIBNETAPI" = "xSTATIC" ; then
-		LIBNETAPI_STATIC=$LIBNETAPI_STATIC_TARGET
-	else
-		LIBNETAPI_LIBS=-lnetapi
-	fi
-else
-	enable_static=yes
-	{ echo "$as_me:$LINENO: result: no shared library support -- will supply static library" >&5
-echo "${ECHO_T}no shared library support -- will supply static library" >&6; }
-fi
-if test $enable_static = yes; then
-	LIBNETAPI_STATIC=$LIBNETAPI_STATIC_TARGET
-fi
 
-
-
-
-
-
-
-
 #################################################
 # should we build libaddns?
 INSTALL_LIBADDNS=
@@ -66490,11 +59974,11 @@
 # Check whether --with-libaddns was given.
 if test "${with_libaddns+set}" = set; then
   withval=$with_libaddns;  case "$withval" in
-  *)
+  no)
      { echo "$as_me:$LINENO: result: no" >&5
 echo "${ECHO_T}no" >&6; }
      ;;
-  yes)
+  *)
      if test $BLDSHARED = true; then
         LIBADDNS_SHARED=bin/libaddns.$SHLIBEXT
         LIBADDNS=libaddns
@@ -66513,15 +59997,29 @@
      ;;
   esac
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
 
+# if unspecified, default is to built it if possible.
+  if test $BLDSHARED = true; then
+     LIBADDNS_SHARED=bin/libaddns.$SHLIBEXT
+     LIBADDNS=libaddns
+     { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+   else
+     enable_static=yes
+     { echo "$as_me:$LINENO: result: no shared library support -- will supply static library" >&5
+echo "${ECHO_T}no shared library support -- will supply static library" >&6; }
+   fi
+   if test $enable_static = yes; then
+     LIBADDNS=libaddns
+  fi
+  INSTALL_LIBADDNS=installlibaddns
+  UNINSTALL_LIBADDNS=uninstalllibaddns
+
 fi
 
 
 #################################################
 # should we build libsmbclient?
-
 INSTALL_LIBSMBCLIENT=
 UNINSTALL_LIBSMBCLIENT=
 LIBSMBCLIENT_SHARED=
@@ -66556,7 +60054,7 @@
   esac
 else
 
-# if unspecified, default is to build it if possible.
+# if unspecified, default is to built it if possible.
   if test $BLDSHARED = true; then
      LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
      LIBSMBCLIENT=libsmbclient
@@ -66609,7 +60107,7 @@
   esac
 else
 
-# if unspecified, default is to build it if possible.
+# if unspecified, default is to built it if possible.
   if test $BLDSHARED = true; then
      LIBSMBSHAREMODES_SHARED=bin/libsmbsharemodes.$SHLIBEXT
      LIBSMBSHAREMODES=libsmbsharemodes
@@ -66628,7 +60126,6 @@
 fi
 
 
-
 #################################################
 # these tests are taken from the GNU fileutils package
 { echo "$as_me:$LINENO: checking how to get filesystem space usage..." >&5
@@ -67325,35 +60822,12 @@
 # Check whether --with-acl-support was given.
 if test "${with_acl_support+set}" = set; then
   withval=$with_acl_support;  case "$withval" in
-	yes|no)
-		with_acl_support="$withval"
-		;;
-  esac
-fi
+  yes)
 
-
-if test x"$with_acl_support" = x ; then
-	with_acl_support="auto"
-fi
-
-{ echo "$as_me:$LINENO: result: $with_acl_support" >&5
-echo "${ECHO_T}$with_acl_support" >&6; }
-
-if test x"$with_acl_support" = x"no"; then
-	{ echo "$as_me:$LINENO: result: Disabling ACL support" >&5
-echo "${ECHO_T}Disabling ACL support" >&6; }
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_NO_ACLS 1
-_ACEOF
-
-else
-	{ echo "$as_me:$LINENO: checking whether ACL support is available:" >&5
-echo "$as_me: checking whether ACL support is available:" >&6;}
 	case "$host_os" in
 	*sysv5*)
-		{ echo "$as_me:$LINENO: Using UnixWare ACLs" >&5
-echo "$as_me: Using UnixWare ACLs" >&6;}
+		{ echo "$as_me:$LINENO: result: Using UnixWare ACLs" >&5
+echo "${ECHO_T}Using UnixWare ACLs" >&6; }
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_UNIXWARE_ACLS 1
@@ -67362,8 +60836,8 @@
 		default_static_modules="$default_static_modules vfs_solarisacl"
 		;;
 	*solaris*)
-		{ echo "$as_me:$LINENO: Using solaris ACLs" >&5
-echo "$as_me: Using solaris ACLs" >&6;}
+		{ echo "$as_me:$LINENO: result: Using solaris ACLs" >&5
+echo "${ECHO_T}Using solaris ACLs" >&6; }
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_SOLARIS_ACLS 1
@@ -67373,8 +60847,8 @@
 		default_static_modules="$default_static_modules vfs_solarisacl"
 		;;
 	*hpux*)
-		{ echo "$as_me:$LINENO: Using HPUX ACLs" >&5
-echo "$as_me: Using HPUX ACLs" >&6;}
+		{ echo "$as_me:$LINENO: result: Using HPUX ACLs" >&5
+echo "${ECHO_T}Using HPUX ACLs" >&6; }
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_HPUX_ACLS 1
@@ -67383,8 +60857,8 @@
 		default_static_modules="$default_static_modules vfs_hpuxacl"
 		;;
 	*irix*)
-		{ echo "$as_me:$LINENO: Using IRIX ACLs" >&5
-echo "$as_me: Using IRIX ACLs" >&6;}
+		{ echo "$as_me:$LINENO: result: Using IRIX ACLs" >&5
+echo "${ECHO_T}Using IRIX ACLs" >&6; }
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_IRIX_ACLS 1
@@ -67393,8 +60867,8 @@
 		default_static_modules="$default_static_modules vfs_irixacl"
 		;;
 	*aix*)
-		{ echo "$as_me:$LINENO: Using AIX ACLs" >&5
-echo "$as_me: Using AIX ACLs" >&6;}
+		{ echo "$as_me:$LINENO: result: Using AIX ACLs" >&5
+echo "${ECHO_T}Using AIX ACLs" >&6; }
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_AIX_ACLS 1
@@ -67403,8 +60877,8 @@
 		default_static_modules="$default_static_modules vfs_aixacl"
 		;;
 	*osf*)
-		{ echo "$as_me:$LINENO: Using Tru64 ACLs" >&5
-echo "$as_me: Using Tru64 ACLs" >&6;}
+		{ echo "$as_me:$LINENO: result: Using Tru64 ACLs" >&5
+echo "${ECHO_T}Using Tru64 ACLs" >&6; }
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_TRU64_ACLS 1
@@ -67413,17 +60887,88 @@
 		ACL_LIBS="$ACL_LIBS -lpacl"
 		default_static_modules="$default_static_modules vfs_tru64acl"
 		;;
-	*darwin*)
-		{ echo "$as_me:$LINENO: ACLs on Darwin currently not supported" >&5
-echo "$as_me: ACLs on Darwin currently not supported" >&6;}
+	*freebsd[5-9]*)
+		{ echo "$as_me:$LINENO: result: Using FreeBSD posix ACLs" >&5
+echo "${ECHO_T}Using FreeBSD posix ACLs" >&6; }
 
 cat >>confdefs.h <<\_ACEOF
-#define HAVE_NO_ACLS 1
+#define HAVE_POSIX_ACLS 1
 _ACEOF
 
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ACL_GET_PERM_NP 1
+_ACEOF
+
+		default_static_modules="$default_static_modules vfs_posixacl"
 		;;
-	*)
-		{ echo "$as_me:$LINENO: checking for acl_get_file in -lacl" >&5
+	*linux*)
+		{ echo "$as_me:$LINENO: checking for getxattr in -lattr" >&5
+echo $ECHO_N "checking for getxattr in -lattr... $ECHO_C" >&6; }
+if test "${ac_cv_lib_attr_getxattr+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lattr  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char getxattr ();
+int
+main ()
+{
+return getxattr ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_attr_getxattr=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_attr_getxattr=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_attr_getxattr" >&5
+echo "${ECHO_T}$ac_cv_lib_attr_getxattr" >&6; }
+if test $ac_cv_lib_attr_getxattr = yes; then
+  ACL_LIBS="$ACL_LIBS -lattr"
+fi
+
+       		{ echo "$as_me:$LINENO: checking for acl_get_file in -lacl" >&5
 echo $ECHO_N "checking for acl_get_file in -lacl... $ECHO_C" >&6; }
 if test "${ac_cv_lib_acl_acl_get_file+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -67488,15 +61033,158 @@
   ACL_LIBS="$ACL_LIBS -lacl"
 fi
 
-		case "$host_os" in
-		*linux*)
-			{ echo "$as_me:$LINENO: checking for getxattr in -lattr" >&5
-echo $ECHO_N "checking for getxattr in -lattr... $ECHO_C" >&6; }
-if test "${ac_cv_lib_attr_getxattr+set}" = set; then
+		{ echo "$as_me:$LINENO: checking for ACL support" >&5
+echo $ECHO_N "checking for ACL support... $ECHO_C" >&6; }
+if test "${samba_cv_HAVE_POSIX_ACLS+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
+
+			acl_LIBS=$LIBS
+			LIBS="$LIBS -lacl"
+			cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+				#include <sys/types.h>
+				#include <sys/acl.h>
+
+int
+main ()
+{
+
+				acl_t acl;
+				int entry_id;
+				acl_entry_t *entry_p;
+				return acl_get_entry(acl, entry_id, entry_p);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  samba_cv_HAVE_POSIX_ACLS=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	samba_cv_HAVE_POSIX_ACLS=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+			LIBS=$acl_LIBS
+
+fi
+{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_POSIX_ACLS" >&5
+echo "${ECHO_T}$samba_cv_HAVE_POSIX_ACLS" >&6; }
+		if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
+			{ echo "$as_me:$LINENO: result: Using posix ACLs" >&5
+echo "${ECHO_T}Using posix ACLs" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_POSIX_ACLS 1
+_ACEOF
+
+			{ echo "$as_me:$LINENO: checking for acl_get_perm_np" >&5
+echo $ECHO_N "checking for acl_get_perm_np... $ECHO_C" >&6; }
+if test "${samba_cv_HAVE_ACL_GET_PERM_NP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+				acl_LIBS=$LIBS
+				LIBS="$LIBS -lacl"
+				cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+					#include <sys/types.h>
+					#include <sys/acl.h>
+
+int
+main ()
+{
+
+					acl_permset_t permset_d;
+					acl_perm_t perm;
+					return acl_get_perm_np(permset_d, perm);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  samba_cv_HAVE_ACL_GET_PERM_NP=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	samba_cv_HAVE_ACL_GET_PERM_NP=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+				LIBS=$acl_LIBS
+
+fi
+{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_ACL_GET_PERM_NP" >&5
+echo "${ECHO_T}$samba_cv_HAVE_ACL_GET_PERM_NP" >&6; }
+			if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ACL_GET_PERM_NP 1
+_ACEOF
+
+			fi
+		fi
+            ;;
+         *)
+		{ echo "$as_me:$LINENO: checking for acl_get_file in -lacl" >&5
+echo $ECHO_N "checking for acl_get_file in -lacl... $ECHO_C" >&6; }
+if test "${ac_cv_lib_acl_acl_get_file+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
   ac_check_lib_save_LIBS=$LIBS
-LIBS="-lattr  $LIBS"
+LIBS="-lacl  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -67510,11 +61198,11 @@
 #ifdef __cplusplus
 extern "C"
 #endif
-char getxattr ();
+char acl_get_file ();
 int
 main ()
 {
-return getxattr ();
+return acl_get_file ();
   ;
   return 0;
 }
@@ -67537,34 +61225,32 @@
 	 test ! -s conftest.err
        } && test -s conftest$ac_exeext &&
        $as_test_x conftest$ac_exeext; then
-  ac_cv_lib_attr_getxattr=yes
+  ac_cv_lib_acl_acl_get_file=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-	ac_cv_lib_attr_getxattr=no
+	ac_cv_lib_acl_acl_get_file=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_attr_getxattr" >&5
-echo "${ECHO_T}$ac_cv_lib_attr_getxattr" >&6; }
-if test $ac_cv_lib_attr_getxattr = yes; then
-  ACL_LIBS="$ACL_LIBS -lattr"
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_acl_acl_get_file" >&5
+echo "${ECHO_T}$ac_cv_lib_acl_acl_get_file" >&6; }
+if test $ac_cv_lib_acl_acl_get_file = yes; then
+  ACL_LIBS="$ACL_LIBS -lacl"
 fi
 
-			;;
-		esac
-		{ echo "$as_me:$LINENO: checking for POSIX ACL support" >&5
-echo $ECHO_N "checking for POSIX ACL support... $ECHO_C" >&6; }
+		{ echo "$as_me:$LINENO: checking for ACL support" >&5
+echo $ECHO_N "checking for ACL support... $ECHO_C" >&6; }
 if test "${samba_cv_HAVE_POSIX_ACLS+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
 			acl_LIBS=$LIBS
-			LIBS="$LIBS $ACL_LIBS"
+			LIBS="$LIBS -lacl"
 			cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -67582,7 +61268,7 @@
 				acl_t acl;
 				int entry_id;
 				acl_entry_t *entry_p;
-				return acl_get_entry(acl, entry_id, entry_p);
+				return acl_get_entry( acl, entry_id, entry_p);
 
   ;
   return 0;
@@ -67622,8 +61308,8 @@
 { echo "$as_me:$LINENO: result: $samba_cv_HAVE_POSIX_ACLS" >&5
 echo "${ECHO_T}$samba_cv_HAVE_POSIX_ACLS" >&6; }
 		if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
-			{ echo "$as_me:$LINENO: Using posix ACLs" >&5
-echo "$as_me: Using posix ACLs" >&6;}
+			{ echo "$as_me:$LINENO: result: Using posix ACLs" >&5
+echo "${ECHO_T}Using posix ACLs" >&6; }
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_POSIX_ACLS 1
@@ -67636,7 +61322,7 @@
 else
 
 				acl_LIBS=$LIBS
-				LIBS="$LIBS $ACL_LIBS"
+				LIBS="$LIBS -lacl"
 				cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -67653,7 +61339,7 @@
 
 					acl_permset_t permset_d;
 					acl_perm_t perm;
-					return acl_get_perm_np(permset_d, perm);
+					return acl_get_perm_np( permset_d, perm);
 
   ;
   return 0;
@@ -67699,22 +61385,36 @@
 _ACEOF
 
 			fi
-   			default_static_modules="$default_static_modules vfs_posixacl"
-		else
-			{ echo "$as_me:$LINENO: ACL support is not avaliable" >&5
-echo "$as_me: ACL support is not avaliable" >&6;}
+		fi
+            ;;
+        esac
+        ;;
+  *)
+    { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_NO_ACLS 1
 _ACEOF
 
-		fi
-		;;
-        esac
-fi # with_acl_support
+    ;;
+  esac
+else
 
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_NO_ACLS 1
+_ACEOF
 
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
 
+fi
+
+
+if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
+   default_static_modules="$default_static_modules vfs_posixacl"
+fi
+
 #################################################
 # check for AIO support
 
@@ -68596,13 +62296,6 @@
 fi
 
 
-if test x"$samba_cv_HAVE_AIO" = x"yes"; then
-	if test x"$samba_cv_msghdr_msg_control" = x"yes" -o \
-		x"$samba_cv_msghdr_msg_acctright" = x"yes"; then
-		default_shared_modules="$default_shared_modules vfs_aio_fork"
-	fi
-fi
-
 #################################################
 # check for sendfile support
 
@@ -69549,66 +63242,6 @@
 
 fi
 
-
- { echo "$as_me:$LINENO: checking for readahead declaration" >&5
-echo $ECHO_N "checking for readahead declaration... $ECHO_C" >&6; }
-if test "${ac_cv_have_readahead_decl+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <fcntl.h>
-int
-main ()
-{
-int i = (int)readahead
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_have_readahead_decl=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_have_readahead_decl=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_readahead_decl" >&5
-echo "${ECHO_T}$ac_cv_have_readahead_decl" >&6; }
- if test x"$ac_cv_have_readahead_decl" = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_READAHEAD_DECL 1
-_ACEOF
-
- fi
-
-
 ############################################
 # See if we have the posix_fadvise syscall.
 
@@ -69677,135 +63310,8 @@
 
 fi
 
-############################################
-# See if we have the Linux splice syscall.
 
-{ echo "$as_me:$LINENO: checking for Linux splice" >&5
-echo $ECHO_N "checking for Linux splice... $ECHO_C" >&6; }
-if test "${samba_cv_HAVE_LINUX_SPLICE+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
 
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-#if defined(HAVE_UNISTD_H)
-#include <unistd.h>
-#endif
-#include <fcntl.h>
-int
-main ()
-{
-long ret = splice(0,0,1,0,400,0);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  samba_cv_HAVE_LINUX_SPLICE=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	samba_cv_HAVE_LINUX_SPLICE=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_LINUX_SPLICE" >&5
-echo "${ECHO_T}$samba_cv_HAVE_LINUX_SPLICE" >&6; }
-
-if test x"$samba_cv_HAVE_LINUX_SPLICE" = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_LINUX_SPLICE 1
-_ACEOF
-
-fi
-
-
- { echo "$as_me:$LINENO: checking for splice declaration" >&5
-echo $ECHO_N "checking for splice declaration... $ECHO_C" >&6; }
-if test "${ac_cv_have_splice_decl+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <fcntl.h>
-int
-main ()
-{
-int i = (int)splice
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_have_splice_decl=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_have_splice_decl=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_splice_decl" >&5
-echo "${ECHO_T}$ac_cv_have_splice_decl" >&6; }
- if test x"$ac_cv_have_splice_decl" = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_SPLICE_DECL 1
-_ACEOF
-
- fi
-
-
-
 #################################################
 # Check whether winbind is supported on this platform.  If so we need to
 # build and install client programs, sbin programs and shared libraries
@@ -69824,8 +63330,9 @@
 WINBIND_WINS_NSS="nsswitch/libnss_wins.$SHLIBEXT"
 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
 NSSSONAMEVERSIONSUFFIX=""
-WINBIND_NSS_PTHREAD=""
 
+SMB_KRB5_LOCATOR="bin/smb_krb5_locator.$SHLIBEXT"
+
 case "$host_os" in
 	*linux*)
 		NSSSONAMEVERSIONSUFFIX=".2"
@@ -69869,8 +63376,8 @@
 		NSSSONAMEVERSIONSUFFIX=".1"
 		WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o \
 		    nsswitch/winbind_nss_linux.o"
-		WINBIND_NSS_EXTRA_LIBS="${LIBREPLACE_NETWORK_LIBS}"
-		PAM_WINBIND_EXTRA_LIBS="${LIBREPLACE_NETWORK_LIBS}"
+		WINBIND_NSS_EXTRA_LIBS="-lsocket"
+		PAM_WINBIND_EXTRA_LIBS="-lsocket"
 		;;
 	*hpux11*)
 		WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o"
@@ -69889,6 +63396,16 @@
 		;;
 esac
 
+
+
+
+
+
+
+
+
+
+
 # Check the setting of --with-winbind
 
 
@@ -69910,7 +63427,7 @@
 # We need unix domain sockets for winbind
 
 if test x"$HAVE_WINBIND" = x"yes"; then
-	if test x"$libreplace_cv_HAVE_UNIXSOCKET" = x"no"; then
+	if test x"$samba_cv_unixsocket" = x"no"; then
 		winbind_no_reason=", no unix domain socket support on $host_os"
 		HAVE_WINBIND=no
 	fi
@@ -69923,25 +63440,8 @@
 	WINBIND_WINS_NSS=""
 fi
 
-if test x"$enable_developer" = x"yes" -a x"$LINK_LIBWBCLIENT" = x"STATIC" ; then
-	BUILD_LIBWBCLIENT_SHARED=no
-else
-	BUILD_LIBWBCLIENT_SHARED=yes
-fi
-
-LIBWBCLIENT_SHARED_TARGET=bin/libwbclient.$SHLIBEXT
-LIBWBCLIENT_STATIC_TARGET=bin/libwbclient.a
-if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes" -a x"$BUILD_LIBWBCLIENT_SHARED" = x"yes"; then
+if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes"; then
 	NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
-	## Only worry about libwbclient if we have shared library support
-	## and winbindd
-        LIBWBCLIENT_SHARED=$LIBWBCLIENT_SHARED_TARGET
-        LIBWBCLIENT=libwbclient
-	INSTALL_LIBWBCLIENT=installlibwbclient
-	UNINSTALL_LIBWBCLIENT=uninstalllibwbclient
-	WINBIND_LIBS="-lwbclient"
-else
-	LIBWBCLIENT_STATIC=$LIBWBCLIENT_STATIC_TARGET
 fi
 
 if test x"$HAVE_WINBIND" = x"yes"; then
@@ -69965,88 +63465,6 @@
 echo "${ECHO_T}no$winbind_no_reason" >&6; }
 fi
 
-{ echo "$as_me:$LINENO: checking for pthread_mutex_lock in -lpthread" >&5
-echo $ECHO_N "checking for pthread_mutex_lock in -lpthread... $ECHO_C" >&6; }
-if test "${ac_cv_lib_pthread_pthread_mutex_lock+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpthread  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pthread_mutex_lock ();
-int
-main ()
-{
-return pthread_mutex_lock ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_lib_pthread_pthread_mutex_lock=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_pthread_pthread_mutex_lock=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_mutex_lock" >&5
-echo "${ECHO_T}$ac_cv_lib_pthread_pthread_mutex_lock" >&6; }
-if test $ac_cv_lib_pthread_pthread_mutex_lock = yes; then
-  WINBIND_NSS_PTHREAD="-lpthread"
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_PTHREAD 1
-_ACEOF
-
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
 # Solaris 10 does have new member in nss_XbyY_key
 { echo "$as_me:$LINENO: checking for union nss_XbyY_key.ipnode.af_family" >&5
 echo $ECHO_N "checking for union nss_XbyY_key.ipnode.af_family... $ECHO_C" >&6; }
@@ -70743,380 +64161,6 @@
 
 
 #################################################
-# Check if user wants DNS service discovery support
-
-# Check whether --enable-dnssd was given.
-if test "${enable_dnssd+set}" = set; then
-  enableval=$enable_dnssd;
-fi
-
-
-
-if test x"$enable_dnssd" != x"no"; then
-    have_dnssd_support=yes
-
-
-for ac_header in dns_sd.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-    if test x"$ac_cv_header_dns_sd_h" != x"yes"; then
-	have_dnssd_support=no
-    fi
-
-    # On Darwin the DNSSD API is in libc, but on other platforms it's
-    # probably in -ldns_sd
-
-for ac_func in DNSServiceRegister
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_var=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-
-
-ac_check_lib_ext_save_LIBS=$LIBS
-LIBS="-ldns_sd $DNSSD_LIBS  $LIBS"
-
-
-
-
-        { echo "$as_me:$LINENO: checking for DNSServiceRegister in -ldns_sd" >&5
-echo $ECHO_N "checking for DNSServiceRegister in -ldns_sd... $ECHO_C" >&6; }
-if test "${ac_cv_lib_ext_dns_sd_DNSServiceRegister+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char DNSServiceRegister ();
-int
-main ()
-{
-return DNSServiceRegister ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_lib_ext_dns_sd_DNSServiceRegister=yes;
-		  ac_cv_lib_ext_dns_sd=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_ext_dns_sd_DNSServiceRegister=no;
-		  ac_cv_lib_ext_dns_sd=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_ext_dns_sd_DNSServiceRegister" >&5
-echo "${ECHO_T}$ac_cv_lib_ext_dns_sd_DNSServiceRegister" >&6; }
-    if test $ac_cv_lib_ext_dns_sd_DNSServiceRegister = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DNSSERVICEREGISTER 1
-_ACEOF
-
-fi
-
-LIBS=$ac_check_lib_ext_save_LIBS
-
-if test $ac_cv_lib_ext_dns_sd = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBDNS_SD 1
-_ACEOF
-
-		case "$DNSSD_LIBS" in
-		    *-ldns_sd*)
-			;;
-		    *)
-			DNSSD_LIBS="-ldns_sd $DNSSD_LIBS"
-			;;
-		esac
-
-
-fi
-
-    if test x"$ac_cv_func_DNSServiceRegister" != x"yes" -a \
-            x"$ac_cv_lib_ext_DNSServiceRegister" != x"yes"; then
-	have_dnssd_support=no
-    fi
-
-    if test x"$have_dnssd_support" = x"yes"; then
-
-cat >>confdefs.h <<\_ACEOF
-#define WITH_DNSSD_SUPPORT 1
-_ACEOF
-
-    else
-    	if test x"$enable_dnssd" = x"yes"; then
-	    { { echo "$as_me:$LINENO: error: DNS service discovery support not available" >&5
-echo "$as_me: error: DNS service discovery support not available" >&2;}
-   { (exit 1); exit 1; }; }
-	fi
-    fi
-
-fi
-
-#################################################
 # Check to see if we should use the included iniparser
 
 
@@ -71223,309 +64267,37 @@
 
 
 
-# Checks for the vfs_fileid module
-# Start
-{ echo "$as_me:$LINENO: checking for getmntent" >&5
-echo $ECHO_N "checking for getmntent... $ECHO_C" >&6; }
-if test "${ac_cv_func_getmntent+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define getmntent to an innocuous variant, in case <limits.h> declares getmntent.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define getmntent innocuous_getmntent
+#################################################
+# Check if the user wants Python
 
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char getmntent (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
+# At the moment, you can use this to set which Python binary to link
+# against.  (Libraries built for Python2.2 can't be used by 2.1,
+# though they can coexist in different directories.)  In the future
+# this might make the Python stuff be built by default.
 
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+# Defaulting python breaks the clean target if python isn't installed
 
-#undef getmntent
+PYTHON=
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char getmntent ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_getmntent || defined __stub___getmntent
-choke me
-#endif
 
-int
-main ()
-{
-return getmntent ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_func_getmntent=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_func_getmntent=no
+# Check whether --with-python was given.
+if test "${with_python+set}" = set; then
+  withval=$with_python;  case "${withval-python}" in
+  yes)
+	PYTHON=python
+	EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS python_ext"
+	;;
+  no)
+	PYTHON=
+	;;
+  *)
+	PYTHON=${withval-python}
+	;;
+  esac
 fi
 
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_getmntent" >&5
-echo "${ECHO_T}$ac_cv_func_getmntent" >&6; }
 
 
-
-for ac_header in sys/statfs.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ---------------------------------------- ##
-## Report this to samba-technical at samba.org ##
-## ---------------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-{ echo "$as_me:$LINENO: checking vfs_fileid: checking for statfs() and struct statfs.f_fsid)" >&5
-echo $ECHO_N "checking vfs_fileid: checking for statfs() and struct statfs.f_fsid)... $ECHO_C" >&6; }
-if test "${vfsfileid_cv_statfs+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-	     if test "$cross_compiling" = yes; then
-  vfsfileid_cv_statfs=cross
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-		#include <sys/types.h>
-		#include <sys/statfs.h>
-		int main(void)
-		{
-			struct statfs fsd;
-			fsid_t fsid = fsd.f_fsid;
-			return statfs (".", &fsd);
-		}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  vfsfileid_cv_statfs=yes
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-vfsfileid_cv_statfs=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-
-
-fi
-
-{ echo "$as_me:$LINENO: result: $vfsfileid_cv_statfs" >&5
-echo "${ECHO_T}$vfsfileid_cv_statfs" >&6; }
-
-if test x"$ac_cv_func_getmntent" = x"yes" -a \
-	x"$vfsfileid_cv_statfs" = x"yes"; then
-	default_shared_modules="$default_shared_modules vfs_fileid"
-fi
-# End
-# Checks for the vfs_fileid module
-
-
 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
 do
 	eval MODULE_DEFAULT_$i=STATIC
@@ -71541,7 +64313,7 @@
 done
 
 MODULE_rpc_spoolss=STATIC
-MODULE_rpc_srvsvc=STATIC
+MODULE_rpc_srv=STATIC
 MODULE_idmap_tdb=STATIC
 MODULE_idmap_passdb=STATIC
 MODULE_idmap_nss=STATIC
@@ -71701,154 +64473,117 @@
 
 
 
-	{ echo "$as_me:$LINENO: checking how to build rpc_lsarpc" >&5
-echo $ECHO_N "checking how to build rpc_lsarpc... $ECHO_C" >&6; }
-	if test "$MODULE_rpc_lsarpc"; then
-		DEST=$MODULE_rpc_lsarpc
-	elif test "$MODULE_rpc" -a "$MODULE_DEFAULT_rpc_lsarpc"; then
+	{ echo "$as_me:$LINENO: checking how to build rpc_lsa" >&5
+echo $ECHO_N "checking how to build rpc_lsa... $ECHO_C" >&6; }
+	if test "$MODULE_rpc_lsa"; then
+		DEST=$MODULE_rpc_lsa
+	elif test "$MODULE_rpc" -a "$MODULE_DEFAULT_rpc_lsa"; then
 		DEST=$MODULE_rpc
 	else
-		DEST=$MODULE_DEFAULT_rpc_lsarpc
+		DEST=$MODULE_DEFAULT_rpc_lsa
 	fi
 
 	if test x"$DEST" = xSHARED; then
 
 cat >>confdefs.h <<\_ACEOF
-#define rpc_lsarpc_init init_module
+#define rpc_lsa_init init_module
 _ACEOF
 
 		RPC_MODULES="$RPC_MODULES "bin/librpc_lsarpc.$SHLIBEXT""
 		{ echo "$as_me:$LINENO: result: shared" >&5
 echo "${ECHO_T}shared" >&6; }
 
-		string_shared_modules="$string_shared_modules rpc_lsarpc"
+		string_shared_modules="$string_shared_modules rpc_lsa"
 	elif test x"$DEST" = xSTATIC; then
-		init_static_modules_rpc="$init_static_modules_rpc  rpc_lsarpc_init();"
- 		decl_static_modules_rpc="$decl_static_modules_rpc extern NTSTATUS rpc_lsarpc_init(void);"
-		string_static_modules="$string_static_modules rpc_lsarpc"
+		init_static_modules_rpc="$init_static_modules_rpc  rpc_lsa_init();"
+ 		decl_static_modules_rpc="$decl_static_modules_rpc extern NTSTATUS rpc_lsa_init(void);"
+		string_static_modules="$string_static_modules rpc_lsa"
 		RPC_STATIC="$RPC_STATIC \$(RPC_LSA_OBJ)"
 
 
 		{ echo "$as_me:$LINENO: result: static" >&5
 echo "${ECHO_T}static" >&6; }
 	else
-	    string_ignored_modules="$string_ignored_modules rpc_lsarpc"
+	    string_ignored_modules="$string_ignored_modules rpc_lsa"
 		{ echo "$as_me:$LINENO: result: not" >&5
 echo "${ECHO_T}not" >&6; }
 	fi
 
 
-	{ echo "$as_me:$LINENO: checking how to build rpc_winreg" >&5
-echo $ECHO_N "checking how to build rpc_winreg... $ECHO_C" >&6; }
-	if test "$MODULE_rpc_winreg"; then
-		DEST=$MODULE_rpc_winreg
-	elif test "$MODULE_rpc" -a "$MODULE_DEFAULT_rpc_winreg"; then
+	{ echo "$as_me:$LINENO: checking how to build rpc_reg" >&5
+echo $ECHO_N "checking how to build rpc_reg... $ECHO_C" >&6; }
+	if test "$MODULE_rpc_reg"; then
+		DEST=$MODULE_rpc_reg
+	elif test "$MODULE_rpc" -a "$MODULE_DEFAULT_rpc_reg"; then
 		DEST=$MODULE_rpc
 	else
-		DEST=$MODULE_DEFAULT_rpc_winreg
+		DEST=$MODULE_DEFAULT_rpc_reg
 	fi
 
 	if test x"$DEST" = xSHARED; then
 
 cat >>confdefs.h <<\_ACEOF
-#define rpc_winreg_init init_module
+#define rpc_reg_init init_module
 _ACEOF
 
-		RPC_MODULES="$RPC_MODULES "bin/librpc_winreg.$SHLIBEXT""
+		RPC_MODULES="$RPC_MODULES "bin/librpc_reg.$SHLIBEXT""
 		{ echo "$as_me:$LINENO: result: shared" >&5
 echo "${ECHO_T}shared" >&6; }
 
-		string_shared_modules="$string_shared_modules rpc_winreg"
+		string_shared_modules="$string_shared_modules rpc_reg"
 	elif test x"$DEST" = xSTATIC; then
-		init_static_modules_rpc="$init_static_modules_rpc  rpc_winreg_init();"
- 		decl_static_modules_rpc="$decl_static_modules_rpc extern NTSTATUS rpc_winreg_init(void);"
-		string_static_modules="$string_static_modules rpc_winreg"
+		init_static_modules_rpc="$init_static_modules_rpc  rpc_reg_init();"
+ 		decl_static_modules_rpc="$decl_static_modules_rpc extern NTSTATUS rpc_reg_init(void);"
+		string_static_modules="$string_static_modules rpc_reg"
 		RPC_STATIC="$RPC_STATIC \$(RPC_REG_OBJ)"
 
 
 		{ echo "$as_me:$LINENO: result: static" >&5
 echo "${ECHO_T}static" >&6; }
 	else
-	    string_ignored_modules="$string_ignored_modules rpc_winreg"
+	    string_ignored_modules="$string_ignored_modules rpc_reg"
 		{ echo "$as_me:$LINENO: result: not" >&5
 echo "${ECHO_T}not" >&6; }
 	fi
 
 
-	{ echo "$as_me:$LINENO: checking how to build rpc_initshutdown" >&5
-echo $ECHO_N "checking how to build rpc_initshutdown... $ECHO_C" >&6; }
-	if test "$MODULE_rpc_initshutdown"; then
-		DEST=$MODULE_rpc_initshutdown
-	elif test "$MODULE_rpc" -a "$MODULE_DEFAULT_rpc_initshutdown"; then
+	{ echo "$as_me:$LINENO: checking how to build rpc_lsa_ds" >&5
+echo $ECHO_N "checking how to build rpc_lsa_ds... $ECHO_C" >&6; }
+	if test "$MODULE_rpc_lsa_ds"; then
+		DEST=$MODULE_rpc_lsa_ds
+	elif test "$MODULE_rpc" -a "$MODULE_DEFAULT_rpc_lsa_ds"; then
 		DEST=$MODULE_rpc
 	else
-		DEST=$MODULE_DEFAULT_rpc_initshutdown
+		DEST=$MODULE_DEFAULT_rpc_lsa_ds
 	fi
 
 	if test x"$DEST" = xSHARED; then
 
 cat >>confdefs.h <<\_ACEOF
-#define rpc_initshutdown_init init_module
+#define rpc_lsa_ds_init init_module
 _ACEOF
 
-		RPC_MODULES="$RPC_MODULES "bin/librpc_initshutdown.$SHLIBEXT""
+		RPC_MODULES="$RPC_MODULES "bin/librpc_lsa_ds.$SHLIBEXT""
 		{ echo "$as_me:$LINENO: result: shared" >&5
 echo "${ECHO_T}shared" >&6; }
 
-		string_shared_modules="$string_shared_modules rpc_initshutdown"
+		string_shared_modules="$string_shared_modules rpc_lsa_ds"
 	elif test x"$DEST" = xSTATIC; then
-		init_static_modules_rpc="$init_static_modules_rpc  rpc_initshutdown_init();"
- 		decl_static_modules_rpc="$decl_static_modules_rpc extern NTSTATUS rpc_initshutdown_init(void);"
-		string_static_modules="$string_static_modules rpc_initshutdown"
-		RPC_STATIC="$RPC_STATIC \$(RPC_INITSHUTDOWN_OBJ)"
+		init_static_modules_rpc="$init_static_modules_rpc  rpc_lsa_ds_init();"
+ 		decl_static_modules_rpc="$decl_static_modules_rpc extern NTSTATUS rpc_lsa_ds_init(void);"
+		string_static_modules="$string_static_modules rpc_lsa_ds"
+		RPC_STATIC="$RPC_STATIC \$(RPC_LSA_DS_OBJ)"
 
 
 		{ echo "$as_me:$LINENO: result: static" >&5
 echo "${ECHO_T}static" >&6; }
 	else
-	    string_ignored_modules="$string_ignored_modules rpc_initshutdown"
+	    string_ignored_modules="$string_ignored_modules rpc_lsa_ds"
 		{ echo "$as_me:$LINENO: result: not" >&5
 echo "${ECHO_T}not" >&6; }
 	fi
 
 
-	{ echo "$as_me:$LINENO: checking how to build rpc_dssetup" >&5
-echo $ECHO_N "checking how to build rpc_dssetup... $ECHO_C" >&6; }
-	if test "$MODULE_rpc_dssetup"; then
-		DEST=$MODULE_rpc_dssetup
-	elif test "$MODULE_rpc" -a "$MODULE_DEFAULT_rpc_dssetup"; then
-		DEST=$MODULE_rpc
-	else
-		DEST=$MODULE_DEFAULT_rpc_dssetup
-	fi
-
-	if test x"$DEST" = xSHARED; then
-
-cat >>confdefs.h <<\_ACEOF
-#define rpc_dssetup_init init_module
-_ACEOF
-
-		RPC_MODULES="$RPC_MODULES "bin/librpc_dssetup.$SHLIBEXT""
-		{ echo "$as_me:$LINENO: result: shared" >&5
-echo "${ECHO_T}shared" >&6; }
-
-		string_shared_modules="$string_shared_modules rpc_dssetup"
-	elif test x"$DEST" = xSTATIC; then
-		init_static_modules_rpc="$init_static_modules_rpc  rpc_dssetup_init();"
- 		decl_static_modules_rpc="$decl_static_modules_rpc extern NTSTATUS rpc_dssetup_init(void);"
-		string_static_modules="$string_static_modules rpc_dssetup"
-		RPC_STATIC="$RPC_STATIC \$(RPC_DSSETUP_OBJ)"
-
-
-		{ echo "$as_me:$LINENO: result: static" >&5
-echo "${ECHO_T}static" >&6; }
-	else
-	    string_ignored_modules="$string_ignored_modules rpc_dssetup"
-		{ echo "$as_me:$LINENO: result: not" >&5
-echo "${ECHO_T}not" >&6; }
-	fi
-
-
 	{ echo "$as_me:$LINENO: checking how to build rpc_wkssvc" >&5
 echo $ECHO_N "checking how to build rpc_wkssvc... $ECHO_C" >&6; }
 	if test "$MODULE_rpc_wkssvc"; then
@@ -71886,112 +64621,112 @@
 	fi
 
 
-	{ echo "$as_me:$LINENO: checking how to build rpc_svcctl2" >&5
-echo $ECHO_N "checking how to build rpc_svcctl2... $ECHO_C" >&6; }
-	if test "$MODULE_rpc_svcctl2"; then
-		DEST=$MODULE_rpc_svcctl2
-	elif test "$MODULE_rpc" -a "$MODULE_DEFAULT_rpc_svcctl2"; then
+	{ echo "$as_me:$LINENO: checking how to build rpc_svcctl" >&5
+echo $ECHO_N "checking how to build rpc_svcctl... $ECHO_C" >&6; }
+	if test "$MODULE_rpc_svcctl"; then
+		DEST=$MODULE_rpc_svcctl
+	elif test "$MODULE_rpc" -a "$MODULE_DEFAULT_rpc_svcctl"; then
 		DEST=$MODULE_rpc
 	else
-		DEST=$MODULE_DEFAULT_rpc_svcctl2
+		DEST=$MODULE_DEFAULT_rpc_svcctl
 	fi
 
 	if test x"$DEST" = xSHARED; then
 
 cat >>confdefs.h <<\_ACEOF
-#define rpc_svcctl2_init init_module
+#define rpc_svcctl_init init_module
 _ACEOF
 
-		RPC_MODULES="$RPC_MODULES "bin/librpc_svcctl2.$SHLIBEXT""
+		RPC_MODULES="$RPC_MODULES "bin/librpc_svcctl.$SHLIBEXT""
 		{ echo "$as_me:$LINENO: result: shared" >&5
 echo "${ECHO_T}shared" >&6; }
 
-		string_shared_modules="$string_shared_modules rpc_svcctl2"
+		string_shared_modules="$string_shared_modules rpc_svcctl"
 	elif test x"$DEST" = xSTATIC; then
-		init_static_modules_rpc="$init_static_modules_rpc  rpc_svcctl2_init();"
- 		decl_static_modules_rpc="$decl_static_modules_rpc extern NTSTATUS rpc_svcctl2_init(void);"
-		string_static_modules="$string_static_modules rpc_svcctl2"
+		init_static_modules_rpc="$init_static_modules_rpc  rpc_svcctl_init();"
+ 		decl_static_modules_rpc="$decl_static_modules_rpc extern NTSTATUS rpc_svcctl_init(void);"
+		string_static_modules="$string_static_modules rpc_svcctl"
 		RPC_STATIC="$RPC_STATIC \$(RPC_SVCCTL_OBJ)"
 
 
 		{ echo "$as_me:$LINENO: result: static" >&5
 echo "${ECHO_T}static" >&6; }
 	else
-	    string_ignored_modules="$string_ignored_modules rpc_svcctl2"
+	    string_ignored_modules="$string_ignored_modules rpc_svcctl"
 		{ echo "$as_me:$LINENO: result: not" >&5
 echo "${ECHO_T}not" >&6; }
 	fi
 
 
-	{ echo "$as_me:$LINENO: checking how to build rpc_ntsvcs2" >&5
-echo $ECHO_N "checking how to build rpc_ntsvcs2... $ECHO_C" >&6; }
-	if test "$MODULE_rpc_ntsvcs2"; then
-		DEST=$MODULE_rpc_ntsvcs2
-	elif test "$MODULE_rpc" -a "$MODULE_DEFAULT_rpc_ntsvcs2"; then
+	{ echo "$as_me:$LINENO: checking how to build rpc_ntsvcs" >&5
+echo $ECHO_N "checking how to build rpc_ntsvcs... $ECHO_C" >&6; }
+	if test "$MODULE_rpc_ntsvcs"; then
+		DEST=$MODULE_rpc_ntsvcs
+	elif test "$MODULE_rpc" -a "$MODULE_DEFAULT_rpc_ntsvcs"; then
 		DEST=$MODULE_rpc
 	else
-		DEST=$MODULE_DEFAULT_rpc_ntsvcs2
+		DEST=$MODULE_DEFAULT_rpc_ntsvcs
 	fi
 
 	if test x"$DEST" = xSHARED; then
 
 cat >>confdefs.h <<\_ACEOF
-#define rpc_ntsvcs2_init init_module
+#define rpc_ntsvcs_init init_module
 _ACEOF
 
-		RPC_MODULES="$RPC_MODULES "bin/librpc_ntsvcs2.$SHLIBEXT""
+		RPC_MODULES="$RPC_MODULES "bin/librpc_ntsvcs.$SHLIBEXT""
 		{ echo "$as_me:$LINENO: result: shared" >&5
 echo "${ECHO_T}shared" >&6; }
 
-		string_shared_modules="$string_shared_modules rpc_ntsvcs2"
+		string_shared_modules="$string_shared_modules rpc_ntsvcs"
 	elif test x"$DEST" = xSTATIC; then
-		init_static_modules_rpc="$init_static_modules_rpc  rpc_ntsvcs2_init();"
- 		decl_static_modules_rpc="$decl_static_modules_rpc extern NTSTATUS rpc_ntsvcs2_init(void);"
-		string_static_modules="$string_static_modules rpc_ntsvcs2"
+		init_static_modules_rpc="$init_static_modules_rpc  rpc_ntsvcs_init();"
+ 		decl_static_modules_rpc="$decl_static_modules_rpc extern NTSTATUS rpc_ntsvcs_init(void);"
+		string_static_modules="$string_static_modules rpc_ntsvcs"
 		RPC_STATIC="$RPC_STATIC \$(RPC_NTSVCS_OBJ)"
 
 
 		{ echo "$as_me:$LINENO: result: static" >&5
 echo "${ECHO_T}static" >&6; }
 	else
-	    string_ignored_modules="$string_ignored_modules rpc_ntsvcs2"
+	    string_ignored_modules="$string_ignored_modules rpc_ntsvcs"
 		{ echo "$as_me:$LINENO: result: not" >&5
 echo "${ECHO_T}not" >&6; }
 	fi
 
 
-	{ echo "$as_me:$LINENO: checking how to build rpc_netlogon" >&5
-echo $ECHO_N "checking how to build rpc_netlogon... $ECHO_C" >&6; }
-	if test "$MODULE_rpc_netlogon"; then
-		DEST=$MODULE_rpc_netlogon
-	elif test "$MODULE_rpc" -a "$MODULE_DEFAULT_rpc_netlogon"; then
+	{ echo "$as_me:$LINENO: checking how to build rpc_net" >&5
+echo $ECHO_N "checking how to build rpc_net... $ECHO_C" >&6; }
+	if test "$MODULE_rpc_net"; then
+		DEST=$MODULE_rpc_net
+	elif test "$MODULE_rpc" -a "$MODULE_DEFAULT_rpc_net"; then
 		DEST=$MODULE_rpc
 	else
-		DEST=$MODULE_DEFAULT_rpc_netlogon
+		DEST=$MODULE_DEFAULT_rpc_net
 	fi
 
 	if test x"$DEST" = xSHARED; then
 
 cat >>confdefs.h <<\_ACEOF
-#define rpc_netlogon_init init_module
+#define rpc_net_init init_module
 _ACEOF
 
 		RPC_MODULES="$RPC_MODULES "bin/librpc_NETLOGON.$SHLIBEXT""
 		{ echo "$as_me:$LINENO: result: shared" >&5
 echo "${ECHO_T}shared" >&6; }
 
-		string_shared_modules="$string_shared_modules rpc_netlogon"
+		string_shared_modules="$string_shared_modules rpc_net"
 	elif test x"$DEST" = xSTATIC; then
-		init_static_modules_rpc="$init_static_modules_rpc  rpc_netlogon_init();"
- 		decl_static_modules_rpc="$decl_static_modules_rpc extern NTSTATUS rpc_netlogon_init(void);"
-		string_static_modules="$string_static_modules rpc_netlogon"
+		init_static_modules_rpc="$init_static_modules_rpc  rpc_net_init();"
+ 		decl_static_modules_rpc="$decl_static_modules_rpc extern NTSTATUS rpc_net_init(void);"
+		string_static_modules="$string_static_modules rpc_net"
 		RPC_STATIC="$RPC_STATIC \$(RPC_NETLOG_OBJ)"
 
 
 		{ echo "$as_me:$LINENO: result: static" >&5
 echo "${ECHO_T}static" >&6; }
 	else
-	    string_ignored_modules="$string_ignored_modules rpc_netlogon"
+	    string_ignored_modules="$string_ignored_modules rpc_net"
 		{ echo "$as_me:$LINENO: result: not" >&5
 echo "${ECHO_T}not" >&6; }
 	fi
@@ -72034,38 +64769,38 @@
 	fi
 
 
-	{ echo "$as_me:$LINENO: checking how to build rpc_srvsvc" >&5
-echo $ECHO_N "checking how to build rpc_srvsvc... $ECHO_C" >&6; }
-	if test "$MODULE_rpc_srvsvc"; then
-		DEST=$MODULE_rpc_srvsvc
-	elif test "$MODULE_rpc" -a "$MODULE_DEFAULT_rpc_srvsvc"; then
+	{ echo "$as_me:$LINENO: checking how to build rpc_srv" >&5
+echo $ECHO_N "checking how to build rpc_srv... $ECHO_C" >&6; }
+	if test "$MODULE_rpc_srv"; then
+		DEST=$MODULE_rpc_srv
+	elif test "$MODULE_rpc" -a "$MODULE_DEFAULT_rpc_srv"; then
 		DEST=$MODULE_rpc
 	else
-		DEST=$MODULE_DEFAULT_rpc_srvsvc
+		DEST=$MODULE_DEFAULT_rpc_srv
 	fi
 
 	if test x"$DEST" = xSHARED; then
 
 cat >>confdefs.h <<\_ACEOF
-#define rpc_srvsvc_init init_module
+#define rpc_srv_init init_module
 _ACEOF
 
-		RPC_MODULES="$RPC_MODULES "bin/librpc_svcsvc.$SHLIBEXT""
+		RPC_MODULES="$RPC_MODULES "bin/librpc_svc.$SHLIBEXT""
 		{ echo "$as_me:$LINENO: result: shared" >&5
 echo "${ECHO_T}shared" >&6; }
 
-		string_shared_modules="$string_shared_modules rpc_srvsvc"
+		string_shared_modules="$string_shared_modules rpc_srv"
 	elif test x"$DEST" = xSTATIC; then
-		init_static_modules_rpc="$init_static_modules_rpc  rpc_srvsvc_init();"
- 		decl_static_modules_rpc="$decl_static_modules_rpc extern NTSTATUS rpc_srvsvc_init(void);"
-		string_static_modules="$string_static_modules rpc_srvsvc"
+		init_static_modules_rpc="$init_static_modules_rpc  rpc_srv_init();"
+ 		decl_static_modules_rpc="$decl_static_modules_rpc extern NTSTATUS rpc_srv_init(void);"
+		string_static_modules="$string_static_modules rpc_srv"
 		RPC_STATIC="$RPC_STATIC \$(RPC_SVC_OBJ)"
 
 
 		{ echo "$as_me:$LINENO: result: static" >&5
 echo "${ECHO_T}static" >&6; }
 	else
-	    string_ignored_modules="$string_ignored_modules rpc_srvsvc"
+	    string_ignored_modules="$string_ignored_modules rpc_srv"
 		{ echo "$as_me:$LINENO: result: not" >&5
 echo "${ECHO_T}not" >&6; }
 	fi
@@ -72108,38 +64843,38 @@
 	fi
 
 
-	{ echo "$as_me:$LINENO: checking how to build rpc_eventlog2" >&5
-echo $ECHO_N "checking how to build rpc_eventlog2... $ECHO_C" >&6; }
-	if test "$MODULE_rpc_eventlog2"; then
-		DEST=$MODULE_rpc_eventlog2
-	elif test "$MODULE_rpc" -a "$MODULE_DEFAULT_rpc_eventlog2"; then
+	{ echo "$as_me:$LINENO: checking how to build rpc_eventlog" >&5
+echo $ECHO_N "checking how to build rpc_eventlog... $ECHO_C" >&6; }
+	if test "$MODULE_rpc_eventlog"; then
+		DEST=$MODULE_rpc_eventlog
+	elif test "$MODULE_rpc" -a "$MODULE_DEFAULT_rpc_eventlog"; then
 		DEST=$MODULE_rpc
 	else
-		DEST=$MODULE_DEFAULT_rpc_eventlog2
+		DEST=$MODULE_DEFAULT_rpc_eventlog
 	fi
 
 	if test x"$DEST" = xSHARED; then
 
 cat >>confdefs.h <<\_ACEOF
-#define rpc_eventlog2_init init_module
+#define rpc_eventlog_init init_module
 _ACEOF
 
-		RPC_MODULES="$RPC_MODULES "bin/librpc_eventlog2.$SHLIBEXT""
+		RPC_MODULES="$RPC_MODULES "bin/librpc_eventlog.$SHLIBEXT""
 		{ echo "$as_me:$LINENO: result: shared" >&5
 echo "${ECHO_T}shared" >&6; }
 
-		string_shared_modules="$string_shared_modules rpc_eventlog2"
+		string_shared_modules="$string_shared_modules rpc_eventlog"
 	elif test x"$DEST" = xSTATIC; then
-		init_static_modules_rpc="$init_static_modules_rpc  rpc_eventlog2_init();"
- 		decl_static_modules_rpc="$decl_static_modules_rpc extern NTSTATUS rpc_eventlog2_init(void);"
-		string_static_modules="$string_static_modules rpc_eventlog2"
+		init_static_modules_rpc="$init_static_modules_rpc  rpc_eventlog_init();"
+ 		decl_static_modules_rpc="$decl_static_modules_rpc extern NTSTATUS rpc_eventlog_init(void);"
+		string_static_modules="$string_static_modules rpc_eventlog"
 		RPC_STATIC="$RPC_STATIC \$(RPC_EVENTLOG_OBJ)"
 
 
 		{ echo "$as_me:$LINENO: result: static" >&5
 echo "${ECHO_T}static" >&6; }
 	else
-	    string_ignored_modules="$string_ignored_modules rpc_eventlog2"
+	    string_ignored_modules="$string_ignored_modules rpc_eventlog"
 		{ echo "$as_me:$LINENO: result: not" >&5
 echo "${ECHO_T}not" >&6; }
 	fi
@@ -72182,38 +64917,38 @@
 	fi
 
 
-	{ echo "$as_me:$LINENO: checking how to build rpc_rpcecho" >&5
-echo $ECHO_N "checking how to build rpc_rpcecho... $ECHO_C" >&6; }
-	if test "$MODULE_rpc_rpcecho"; then
-		DEST=$MODULE_rpc_rpcecho
-	elif test "$MODULE_rpc" -a "$MODULE_DEFAULT_rpc_rpcecho"; then
+	{ echo "$as_me:$LINENO: checking how to build rpc_echo" >&5
+echo $ECHO_N "checking how to build rpc_echo... $ECHO_C" >&6; }
+	if test "$MODULE_rpc_echo"; then
+		DEST=$MODULE_rpc_echo
+	elif test "$MODULE_rpc" -a "$MODULE_DEFAULT_rpc_echo"; then
 		DEST=$MODULE_rpc
 	else
-		DEST=$MODULE_DEFAULT_rpc_rpcecho
+		DEST=$MODULE_DEFAULT_rpc_echo
 	fi
 
 	if test x"$DEST" = xSHARED; then
 
 cat >>confdefs.h <<\_ACEOF
-#define rpc_rpcecho_init init_module
+#define rpc_echo_init init_module
 _ACEOF
 
-		RPC_MODULES="$RPC_MODULES "bin/librpc_rpcecho.$SHLIBEXT""
+		RPC_MODULES="$RPC_MODULES "bin/librpc_echo.$SHLIBEXT""
 		{ echo "$as_me:$LINENO: result: shared" >&5
 echo "${ECHO_T}shared" >&6; }
 
-		string_shared_modules="$string_shared_modules rpc_rpcecho"
+		string_shared_modules="$string_shared_modules rpc_echo"
 	elif test x"$DEST" = xSTATIC; then
-		init_static_modules_rpc="$init_static_modules_rpc  rpc_rpcecho_init();"
- 		decl_static_modules_rpc="$decl_static_modules_rpc extern NTSTATUS rpc_rpcecho_init(void);"
-		string_static_modules="$string_static_modules rpc_rpcecho"
+		init_static_modules_rpc="$init_static_modules_rpc  rpc_echo_init();"
+ 		decl_static_modules_rpc="$decl_static_modules_rpc extern NTSTATUS rpc_echo_init(void);"
+		string_static_modules="$string_static_modules rpc_echo"
 		RPC_STATIC="$RPC_STATIC \$(RPC_ECHO_OBJ)"
 
 
 		{ echo "$as_me:$LINENO: result: static" >&5
 echo "${ECHO_T}static" >&6; }
 	else
-	    string_ignored_modules="$string_ignored_modules rpc_rpcecho"
+	    string_ignored_modules="$string_ignored_modules rpc_echo"
 		{ echo "$as_me:$LINENO: result: not" >&5
 echo "${ECHO_T}not" >&6; }
 	fi
@@ -72260,7 +64995,7 @@
 		init_static_modules_idmap="$init_static_modules_idmap  idmap_ldap_init();"
  		decl_static_modules_idmap="$decl_static_modules_idmap extern NTSTATUS idmap_ldap_init(void);"
 		string_static_modules="$string_static_modules idmap_ldap"
-		IDMAP_STATIC="$IDMAP_STATIC winbindd/idmap_ldap.o"
+		IDMAP_STATIC="$IDMAP_STATIC nsswitch/idmap_ldap.o"
 
 
 		{ echo "$as_me:$LINENO: result: static" >&5
@@ -72297,7 +65032,7 @@
 		init_static_modules_idmap="$init_static_modules_idmap  idmap_tdb_init();"
  		decl_static_modules_idmap="$decl_static_modules_idmap extern NTSTATUS idmap_tdb_init(void);"
 		string_static_modules="$string_static_modules idmap_tdb"
-		IDMAP_STATIC="$IDMAP_STATIC winbindd/idmap_tdb.o"
+		IDMAP_STATIC="$IDMAP_STATIC nsswitch/idmap_tdb.o"
 
 
 		{ echo "$as_me:$LINENO: result: static" >&5
@@ -72309,43 +65044,6 @@
 	fi
 
 
-	{ echo "$as_me:$LINENO: checking how to build idmap_tdb2" >&5
-echo $ECHO_N "checking how to build idmap_tdb2... $ECHO_C" >&6; }
-	if test "$MODULE_idmap_tdb2"; then
-		DEST=$MODULE_idmap_tdb2
-	elif test "$MODULE_idmap" -a "$MODULE_DEFAULT_idmap_tdb2"; then
-		DEST=$MODULE_idmap
-	else
-		DEST=$MODULE_DEFAULT_idmap_tdb2
-	fi
-
-	if test x"$DEST" = xSHARED; then
-
-cat >>confdefs.h <<\_ACEOF
-#define idmap_tdb2_init init_module
-_ACEOF
-
-		IDMAP_MODULES="$IDMAP_MODULES "bin/tdb2.$SHLIBEXT""
-		{ echo "$as_me:$LINENO: result: shared" >&5
-echo "${ECHO_T}shared" >&6; }
-
-		string_shared_modules="$string_shared_modules idmap_tdb2"
-	elif test x"$DEST" = xSTATIC; then
-		init_static_modules_idmap="$init_static_modules_idmap  idmap_tdb2_init();"
- 		decl_static_modules_idmap="$decl_static_modules_idmap extern NTSTATUS idmap_tdb2_init(void);"
-		string_static_modules="$string_static_modules idmap_tdb2"
-		IDMAP_STATIC="$IDMAP_STATIC winbindd/idmap_tdb2.o"
-
-
-		{ echo "$as_me:$LINENO: result: static" >&5
-echo "${ECHO_T}static" >&6; }
-	else
-	    string_ignored_modules="$string_ignored_modules idmap_tdb2"
-		{ echo "$as_me:$LINENO: result: not" >&5
-echo "${ECHO_T}not" >&6; }
-	fi
-
-
 	{ echo "$as_me:$LINENO: checking how to build idmap_passdb" >&5
 echo $ECHO_N "checking how to build idmap_passdb... $ECHO_C" >&6; }
 	if test "$MODULE_idmap_passdb"; then
@@ -72371,7 +65069,7 @@
 		init_static_modules_idmap="$init_static_modules_idmap  idmap_passdb_init();"
  		decl_static_modules_idmap="$decl_static_modules_idmap extern NTSTATUS idmap_passdb_init(void);"
 		string_static_modules="$string_static_modules idmap_passdb"
-		IDMAP_STATIC="$IDMAP_STATIC winbindd/idmap_passdb.o"
+		IDMAP_STATIC="$IDMAP_STATIC nsswitch/idmap_passdb.o"
 
 
 		{ echo "$as_me:$LINENO: result: static" >&5
@@ -72408,7 +65106,7 @@
 		init_static_modules_idmap="$init_static_modules_idmap  idmap_nss_init();"
  		decl_static_modules_idmap="$decl_static_modules_idmap extern NTSTATUS idmap_nss_init(void);"
 		string_static_modules="$string_static_modules idmap_nss"
-		IDMAP_STATIC="$IDMAP_STATIC winbindd/idmap_nss.o"
+		IDMAP_STATIC="$IDMAP_STATIC nsswitch/idmap_nss.o"
 
 
 		{ echo "$as_me:$LINENO: result: static" >&5
@@ -72445,7 +65143,7 @@
 		init_static_modules_idmap="$init_static_modules_idmap  idmap_rid_init();"
  		decl_static_modules_idmap="$decl_static_modules_idmap extern NTSTATUS idmap_rid_init(void);"
 		string_static_modules="$string_static_modules idmap_rid"
-		IDMAP_STATIC="$IDMAP_STATIC winbindd/idmap_rid.o"
+		IDMAP_STATIC="$IDMAP_STATIC nsswitch/idmap_rid.o"
 
 
 		{ echo "$as_me:$LINENO: result: static" >&5
@@ -72482,7 +65180,7 @@
 		init_static_modules_idmap="$init_static_modules_idmap  idmap_ad_init();"
  		decl_static_modules_idmap="$decl_static_modules_idmap extern NTSTATUS idmap_ad_init(void);"
 		string_static_modules="$string_static_modules idmap_ad"
-		IDMAP_STATIC="$IDMAP_STATIC winbindd/idmap_ad.o"
+		IDMAP_STATIC="$IDMAP_STATIC nsswitch/idmap_ad.o"
 
 
 		{ echo "$as_me:$LINENO: result: static" >&5
@@ -72506,7 +65204,7 @@
 #define static_decl_idmap $decl_static_modules_idmap
 _ACEOF
 
-    	rm -f winbindd/idmap.o
+    	rm -f nsswitch/idmap.o
 
 
 
@@ -72535,7 +65233,7 @@
 		init_static_modules_nss_info="$init_static_modules_nss_info  nss_info_template_init();"
  		decl_static_modules_nss_info="$decl_static_modules_nss_info extern NTSTATUS nss_info_template_init(void);"
 		string_static_modules="$string_static_modules nss_info_template"
-		NSS_INFO_STATIC="$NSS_INFO_STATIC winbindd/nss_info_template.o"
+		NSS_INFO_STATIC="$NSS_INFO_STATIC nsswitch/nss_info_template.o"
 
 
 		{ echo "$as_me:$LINENO: result: static" >&5
@@ -72559,7 +65257,7 @@
 #define static_decl_nss_info $decl_static_modules_nss_info
 _ACEOF
 
-    	rm -f winbindd/nss_info.o
+    	rm -f nsswitch/nss_info.o
 
 
 
@@ -73446,43 +66144,6 @@
 	fi
 
 
-	{ echo "$as_me:$LINENO: checking how to build vfs_shadow_copy2" >&5
-echo $ECHO_N "checking how to build vfs_shadow_copy2... $ECHO_C" >&6; }
-	if test "$MODULE_vfs_shadow_copy2"; then
-		DEST=$MODULE_vfs_shadow_copy2
-	elif test "$MODULE_vfs" -a "$MODULE_DEFAULT_vfs_shadow_copy2"; then
-		DEST=$MODULE_vfs
-	else
-		DEST=$MODULE_DEFAULT_vfs_shadow_copy2
-	fi
-
-	if test x"$DEST" = xSHARED; then
-
-cat >>confdefs.h <<\_ACEOF
-#define vfs_shadow_copy2_init init_module
-_ACEOF
-
-		VFS_MODULES="$VFS_MODULES "bin/shadow_copy2.$SHLIBEXT""
-		{ echo "$as_me:$LINENO: result: shared" >&5
-echo "${ECHO_T}shared" >&6; }
-
-		string_shared_modules="$string_shared_modules vfs_shadow_copy2"
-	elif test x"$DEST" = xSTATIC; then
-		init_static_modules_vfs="$init_static_modules_vfs  vfs_shadow_copy2_init();"
- 		decl_static_modules_vfs="$decl_static_modules_vfs extern NTSTATUS vfs_shadow_copy2_init(void);"
-		string_static_modules="$string_static_modules vfs_shadow_copy2"
-		VFS_STATIC="$VFS_STATIC \$(VFS_SHADOW_COPY2_OBJ)"
-
-
-		{ echo "$as_me:$LINENO: result: static" >&5
-echo "${ECHO_T}static" >&6; }
-	else
-	    string_ignored_modules="$string_ignored_modules vfs_shadow_copy2"
-		{ echo "$as_me:$LINENO: result: not" >&5
-echo "${ECHO_T}not" >&6; }
-	fi
-
-
 	{ echo "$as_me:$LINENO: checking how to build vfs_afsacl" >&5
 echo $ECHO_N "checking how to build vfs_afsacl... $ECHO_C" >&6; }
 	if test "$MODULE_vfs_afsacl"; then
@@ -73520,43 +66181,6 @@
 	fi
 
 
-	{ echo "$as_me:$LINENO: checking how to build vfs_xattr_tdb" >&5
-echo $ECHO_N "checking how to build vfs_xattr_tdb... $ECHO_C" >&6; }
-	if test "$MODULE_vfs_xattr_tdb"; then
-		DEST=$MODULE_vfs_xattr_tdb
-	elif test "$MODULE_vfs" -a "$MODULE_DEFAULT_vfs_xattr_tdb"; then
-		DEST=$MODULE_vfs
-	else
-		DEST=$MODULE_DEFAULT_vfs_xattr_tdb
-	fi
-
-	if test x"$DEST" = xSHARED; then
-
-cat >>confdefs.h <<\_ACEOF
-#define vfs_xattr_tdb_init init_module
-_ACEOF
-
-		VFS_MODULES="$VFS_MODULES "bin/xattr_tdb.$SHLIBEXT""
-		{ echo "$as_me:$LINENO: result: shared" >&5
-echo "${ECHO_T}shared" >&6; }
-
-		string_shared_modules="$string_shared_modules vfs_xattr_tdb"
-	elif test x"$DEST" = xSTATIC; then
-		init_static_modules_vfs="$init_static_modules_vfs  vfs_xattr_tdb_init();"
- 		decl_static_modules_vfs="$decl_static_modules_vfs extern NTSTATUS vfs_xattr_tdb_init(void);"
-		string_static_modules="$string_static_modules vfs_xattr_tdb"
-		VFS_STATIC="$VFS_STATIC \$(VFS_XATTR_TDB_OBJ)"
-
-
-		{ echo "$as_me:$LINENO: result: static" >&5
-echo "${ECHO_T}static" >&6; }
-	else
-	    string_ignored_modules="$string_ignored_modules vfs_xattr_tdb"
-		{ echo "$as_me:$LINENO: result: not" >&5
-echo "${ECHO_T}not" >&6; }
-	fi
-
-
 	{ echo "$as_me:$LINENO: checking how to build vfs_posixacl" >&5
 echo $ECHO_N "checking how to build vfs_posixacl... $ECHO_C" >&6; }
 	if test "$MODULE_vfs_posixacl"; then
@@ -73853,80 +66477,6 @@
 	fi
 
 
-	{ echo "$as_me:$LINENO: checking how to build vfs_streams_xattr" >&5
-echo $ECHO_N "checking how to build vfs_streams_xattr... $ECHO_C" >&6; }
-	if test "$MODULE_vfs_streams_xattr"; then
-		DEST=$MODULE_vfs_streams_xattr
-	elif test "$MODULE_vfs" -a "$MODULE_DEFAULT_vfs_streams_xattr"; then
-		DEST=$MODULE_vfs
-	else
-		DEST=$MODULE_DEFAULT_vfs_streams_xattr
-	fi
-
-	if test x"$DEST" = xSHARED; then
-
-cat >>confdefs.h <<\_ACEOF
-#define vfs_streams_xattr_init init_module
-_ACEOF
-
-		VFS_MODULES="$VFS_MODULES "bin/streams_xattr.$SHLIBEXT""
-		{ echo "$as_me:$LINENO: result: shared" >&5
-echo "${ECHO_T}shared" >&6; }
-
-		string_shared_modules="$string_shared_modules vfs_streams_xattr"
-	elif test x"$DEST" = xSTATIC; then
-		init_static_modules_vfs="$init_static_modules_vfs  vfs_streams_xattr_init();"
- 		decl_static_modules_vfs="$decl_static_modules_vfs extern NTSTATUS vfs_streams_xattr_init(void);"
-		string_static_modules="$string_static_modules vfs_streams_xattr"
-		VFS_STATIC="$VFS_STATIC \$(VFS_STREAMS_XATTR_OBJ)"
-
-
-		{ echo "$as_me:$LINENO: result: static" >&5
-echo "${ECHO_T}static" >&6; }
-	else
-	    string_ignored_modules="$string_ignored_modules vfs_streams_xattr"
-		{ echo "$as_me:$LINENO: result: not" >&5
-echo "${ECHO_T}not" >&6; }
-	fi
-
-
-	{ echo "$as_me:$LINENO: checking how to build vfs_streams_depot" >&5
-echo $ECHO_N "checking how to build vfs_streams_depot... $ECHO_C" >&6; }
-	if test "$MODULE_vfs_streams_depot"; then
-		DEST=$MODULE_vfs_streams_depot
-	elif test "$MODULE_vfs" -a "$MODULE_DEFAULT_vfs_streams_depot"; then
-		DEST=$MODULE_vfs
-	else
-		DEST=$MODULE_DEFAULT_vfs_streams_depot
-	fi
-
-	if test x"$DEST" = xSHARED; then
-
-cat >>confdefs.h <<\_ACEOF
-#define vfs_streams_depot_init init_module
-_ACEOF
-
-		VFS_MODULES="$VFS_MODULES "bin/streams_depot.$SHLIBEXT""
-		{ echo "$as_me:$LINENO: result: shared" >&5
-echo "${ECHO_T}shared" >&6; }
-
-		string_shared_modules="$string_shared_modules vfs_streams_depot"
-	elif test x"$DEST" = xSTATIC; then
-		init_static_modules_vfs="$init_static_modules_vfs  vfs_streams_depot_init();"
- 		decl_static_modules_vfs="$decl_static_modules_vfs extern NTSTATUS vfs_streams_depot_init(void);"
-		string_static_modules="$string_static_modules vfs_streams_depot"
-		VFS_STATIC="$VFS_STATIC \$(VFS_STREAMS_DEPOT_OBJ)"
-
-
-		{ echo "$as_me:$LINENO: result: static" >&5
-echo "${ECHO_T}static" >&6; }
-	else
-	    string_ignored_modules="$string_ignored_modules vfs_streams_depot"
-		{ echo "$as_me:$LINENO: result: not" >&5
-echo "${ECHO_T}not" >&6; }
-	fi
-
-
 	{ echo "$as_me:$LINENO: checking how to build vfs_cacheprime" >&5
 echo $ECHO_N "checking how to build vfs_cacheprime... $ECHO_C" >&6; }
 	if test "$MODULE_vfs_cacheprime"; then
@@ -74112,191 +66662,6 @@
 	fi
 
 
-	{ echo "$as_me:$LINENO: checking how to build vfs_tsmsm" >&5
-echo $ECHO_N "checking how to build vfs_tsmsm... $ECHO_C" >&6; }
-	if test "$MODULE_vfs_tsmsm"; then
-		DEST=$MODULE_vfs_tsmsm
-	elif test "$MODULE_vfs" -a "$MODULE_DEFAULT_vfs_tsmsm"; then
-		DEST=$MODULE_vfs
-	else
-		DEST=$MODULE_DEFAULT_vfs_tsmsm
-	fi
-
-	if test x"$DEST" = xSHARED; then
-
-cat >>confdefs.h <<\_ACEOF
-#define vfs_tsmsm_init init_module
-_ACEOF
-
-		VFS_MODULES="$VFS_MODULES "bin/tsmsm.$SHLIBEXT""
-		{ echo "$as_me:$LINENO: result: shared" >&5
-echo "${ECHO_T}shared" >&6; }
-
-		string_shared_modules="$string_shared_modules vfs_tsmsm"
-	elif test x"$DEST" = xSTATIC; then
-		init_static_modules_vfs="$init_static_modules_vfs  vfs_tsmsm_init();"
- 		decl_static_modules_vfs="$decl_static_modules_vfs extern NTSTATUS vfs_tsmsm_init(void);"
-		string_static_modules="$string_static_modules vfs_tsmsm"
-		VFS_STATIC="$VFS_STATIC \$(VFS_TSMSM_OBJ)"
-
-
-		{ echo "$as_me:$LINENO: result: static" >&5
-echo "${ECHO_T}static" >&6; }
-	else
-	    string_ignored_modules="$string_ignored_modules vfs_tsmsm"
-		{ echo "$as_me:$LINENO: result: not" >&5
-echo "${ECHO_T}not" >&6; }
-	fi
-
-
-	{ echo "$as_me:$LINENO: checking how to build vfs_fileid" >&5
-echo $ECHO_N "checking how to build vfs_fileid... $ECHO_C" >&6; }
-	if test "$MODULE_vfs_fileid"; then
-		DEST=$MODULE_vfs_fileid
-	elif test "$MODULE_vfs" -a "$MODULE_DEFAULT_vfs_fileid"; then
-		DEST=$MODULE_vfs
-	else
-		DEST=$MODULE_DEFAULT_vfs_fileid
-	fi
-
-	if test x"$DEST" = xSHARED; then
-
-cat >>confdefs.h <<\_ACEOF
-#define vfs_fileid_init init_module
-_ACEOF
-
-		VFS_MODULES="$VFS_MODULES "bin/fileid.$SHLIBEXT""
-		{ echo "$as_me:$LINENO: result: shared" >&5
-echo "${ECHO_T}shared" >&6; }
-
-		string_shared_modules="$string_shared_modules vfs_fileid"
-	elif test x"$DEST" = xSTATIC; then
-		init_static_modules_vfs="$init_static_modules_vfs  vfs_fileid_init();"
- 		decl_static_modules_vfs="$decl_static_modules_vfs extern NTSTATUS vfs_fileid_init(void);"
-		string_static_modules="$string_static_modules vfs_fileid"
-		VFS_STATIC="$VFS_STATIC \$(VFS_FILEID_OBJ)"
-
-
-		{ echo "$as_me:$LINENO: result: static" >&5
-echo "${ECHO_T}static" >&6; }
-	else
-	    string_ignored_modules="$string_ignored_modules vfs_fileid"
-		{ echo "$as_me:$LINENO: result: not" >&5
-echo "${ECHO_T}not" >&6; }
-	fi
-
-
-	{ echo "$as_me:$LINENO: checking how to build vfs_aio_fork" >&5
-echo $ECHO_N "checking how to build vfs_aio_fork... $ECHO_C" >&6; }
-	if test "$MODULE_vfs_aio_fork"; then
-		DEST=$MODULE_vfs_aio_fork
-	elif test "$MODULE_vfs" -a "$MODULE_DEFAULT_vfs_aio_fork"; then
-		DEST=$MODULE_vfs
-	else
-		DEST=$MODULE_DEFAULT_vfs_aio_fork
-	fi
-
-	if test x"$DEST" = xSHARED; then
-
-cat >>confdefs.h <<\_ACEOF
-#define vfs_aio_fork_init init_module
-_ACEOF
-
-		VFS_MODULES="$VFS_MODULES "bin/aio_fork.$SHLIBEXT""
-		{ echo "$as_me:$LINENO: result: shared" >&5
-echo "${ECHO_T}shared" >&6; }
-
-		string_shared_modules="$string_shared_modules vfs_aio_fork"
-	elif test x"$DEST" = xSTATIC; then
-		init_static_modules_vfs="$init_static_modules_vfs  vfs_aio_fork_init();"
- 		decl_static_modules_vfs="$decl_static_modules_vfs extern NTSTATUS vfs_aio_fork_init(void);"
-		string_static_modules="$string_static_modules vfs_aio_fork"
-		VFS_STATIC="$VFS_STATIC \$(VFS_AIO_FORK_OBJ)"
-
-
-		{ echo "$as_me:$LINENO: result: static" >&5
-echo "${ECHO_T}static" >&6; }
-	else
-	    string_ignored_modules="$string_ignored_modules vfs_aio_fork"
-		{ echo "$as_me:$LINENO: result: not" >&5
-echo "${ECHO_T}not" >&6; }
-	fi
-
-
-	{ echo "$as_me:$LINENO: checking how to build vfs_syncops" >&5
-echo $ECHO_N "checking how to build vfs_syncops... $ECHO_C" >&6; }
-	if test "$MODULE_vfs_syncops"; then
-		DEST=$MODULE_vfs_syncops
-	elif test "$MODULE_vfs" -a "$MODULE_DEFAULT_vfs_syncops"; then
-		DEST=$MODULE_vfs
-	else
-		DEST=$MODULE_DEFAULT_vfs_syncops
-	fi
-
-	if test x"$DEST" = xSHARED; then
-
-cat >>confdefs.h <<\_ACEOF
-#define vfs_syncops_init init_module
-_ACEOF
-
-		VFS_MODULES="$VFS_MODULES "bin/syncops.$SHLIBEXT""
-		{ echo "$as_me:$LINENO: result: shared" >&5
-echo "${ECHO_T}shared" >&6; }
-
-		string_shared_modules="$string_shared_modules vfs_syncops"
-	elif test x"$DEST" = xSTATIC; then
-		init_static_modules_vfs="$init_static_modules_vfs  vfs_syncops_init();"
- 		decl_static_modules_vfs="$decl_static_modules_vfs extern NTSTATUS vfs_syncops_init(void);"
-		string_static_modules="$string_static_modules vfs_syncops"
-		VFS_STATIC="$VFS_STATIC \$(VFS_SYNCOPS_OBJ)"
-
-
-		{ echo "$as_me:$LINENO: result: static" >&5
-echo "${ECHO_T}static" >&6; }
-	else
-	    string_ignored_modules="$string_ignored_modules vfs_syncops"
-		{ echo "$as_me:$LINENO: result: not" >&5
-echo "${ECHO_T}not" >&6; }
-	fi
-
-
-	{ echo "$as_me:$LINENO: checking how to build vfs_zfsacl" >&5
-echo $ECHO_N "checking how to build vfs_zfsacl... $ECHO_C" >&6; }
-	if test "$MODULE_vfs_zfsacl"; then
-		DEST=$MODULE_vfs_zfsacl
-	elif test "$MODULE_vfs" -a "$MODULE_DEFAULT_vfs_zfsacl"; then
-		DEST=$MODULE_vfs
-	else
-		DEST=$MODULE_DEFAULT_vfs_zfsacl
-	fi
-
-	if test x"$DEST" = xSHARED; then
-
-cat >>confdefs.h <<\_ACEOF
-#define vfs_zfsacl_init init_module
-_ACEOF
-
-		VFS_MODULES="$VFS_MODULES "bin/zfsacl.$SHLIBEXT""
-		{ echo "$as_me:$LINENO: result: shared" >&5
-echo "${ECHO_T}shared" >&6; }
-
-		string_shared_modules="$string_shared_modules vfs_zfsacl"
-	elif test x"$DEST" = xSTATIC; then
-		init_static_modules_vfs="$init_static_modules_vfs  vfs_zfsacl_init();"
- 		decl_static_modules_vfs="$decl_static_modules_vfs extern NTSTATUS vfs_zfsacl_init(void);"
-		string_static_modules="$string_static_modules vfs_zfsacl"
-		VFS_STATIC="$VFS_STATIC \$(VFS_ZFSACL_OBJ)"
-
-
-		{ echo "$as_me:$LINENO: result: static" >&5
-echo "${ECHO_T}static" >&6; }
-	else
-	    string_ignored_modules="$string_ignored_modules vfs_zfsacl"
-		{ echo "$as_me:$LINENO: result: not" >&5
-echo "${ECHO_T}not" >&6; }
-	fi
-
-
 	{ echo "$as_me:$LINENO: checking how to build vfs_notify_fam" >&5
 echo $ECHO_N "checking how to build vfs_notify_fam... $ECHO_C" >&6; }
 	if test "$MODULE_vfs_notify_fam"; then
@@ -74338,7 +66703,6 @@
 
 
 
-
 cat >>confdefs.h <<_ACEOF
 #define static_init_vfs {$init_static_modules_vfs}
 _ACEOF
@@ -74768,10 +67132,6 @@
     { echo "$as_me:$LINENO: result:     UUID_LIBS = $UUID_LIBS" >&5
 echo "${ECHO_T}    UUID_LIBS = $UUID_LIBS" >&6; }
 fi
-if test x"$have_dnssd_support" != x"no"; then
-    { echo "$as_me:$LINENO: result:     DNSSD_LIBS = $DNSSD_LIBS" >&5
-echo "${ECHO_T}    DNSSD_LIBS = $DNSSD_LIBS" >&6; }
-fi
 { echo "$as_me:$LINENO: result:     AUTH_LIBS = $AUTH_LIBS" >&5
 echo "${ECHO_T}    AUTH_LIBS = $AUTH_LIBS" >&6; }
 
@@ -74829,17 +67189,15 @@
 
 
 
+builddir=`pwd`
 
-if test x"$krb5_developer" = x"yes" -o x"$developer" = x"yes"; then
-    CFLAGS="${CFLAGS} \$(DEVELOPER_CFLAGS)"
-fi
 
 # Stuff the smbd-only libraries at the end of the smbd link
 # path (if we have them).
 SMBD_LIBS="$samba_dmapi_libs"
 
 
-ac_config_files="$ac_config_files Makefile library-versions script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh lib/netapi/examples/Makefile pkgconfig/smbclient.pc pkgconfig/wbclient.pc pkgconfig/netapi.pc pkgconfig/smbsharemodes.pc"
+ac_config_files="$ac_config_files include/stamp-h Makefile script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh"
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -75237,7 +67595,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by Samba $as_me 3, which was
+This file was extended by $as_me, which was
 generated by GNU Autoconf 2.61.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -75290,7 +67648,7 @@
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF
 ac_cs_version="\\
-Samba config.status 3
+config.status
 configured by $0, generated by GNU Autoconf 2.61,
   with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
 
@@ -75411,18 +67769,13 @@
     "mk-stdint.h") CONFIG_COMMANDS="$CONFIG_COMMANDS mk-stdint.h" ;;
     "rm-stdbool.h") CONFIG_COMMANDS="$CONFIG_COMMANDS rm-stdbool.h" ;;
     "mk-stdbool.h") CONFIG_COMMANDS="$CONFIG_COMMANDS mk-stdbool.h" ;;
+    "include/stamp-h") CONFIG_FILES="$CONFIG_FILES include/stamp-h" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-    "library-versions") CONFIG_FILES="$CONFIG_FILES library-versions" ;;
     "script/findsmb") CONFIG_FILES="$CONFIG_FILES script/findsmb" ;;
     "smbadduser") CONFIG_FILES="$CONFIG_FILES smbadduser" ;;
     "script/gen-8bit-gap.sh") CONFIG_FILES="$CONFIG_FILES script/gen-8bit-gap.sh" ;;
     "script/installbin.sh") CONFIG_FILES="$CONFIG_FILES script/installbin.sh" ;;
     "script/uninstallbin.sh") CONFIG_FILES="$CONFIG_FILES script/uninstallbin.sh" ;;
-    "lib/netapi/examples/Makefile") CONFIG_FILES="$CONFIG_FILES lib/netapi/examples/Makefile" ;;
-    "pkgconfig/smbclient.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/smbclient.pc" ;;
-    "pkgconfig/wbclient.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/wbclient.pc" ;;
-    "pkgconfig/netapi.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/netapi.pc" ;;
-    "pkgconfig/smbsharemodes.pc") CONFIG_FILES="$CONFIG_FILES pkgconfig/smbsharemodes.pc" ;;
 
   *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
 echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
@@ -75522,7 +67875,6 @@
 build_alias!$build_alias$ac_delim
 host_alias!$host_alias$ac_delim
 target_alias!$target_alias$ac_delim
-builddir!$builddir$ac_delim
 libreplacedir!$libreplacedir$ac_delim
 LIBREPLACEOBJ!$LIBREPLACEOBJ$ac_delim
 build!$build$ac_delim
@@ -75541,47 +67893,48 @@
 lockdir!$lockdir$ac_delim
 piddir!$piddir$ac_delim
 logfilebase!$logfilebase$ac_delim
-ctdbdir!$ctdbdir$ac_delim
 privatedir!$privatedir$ac_delim
 swatdir!$swatdir$ac_delim
-codepagedir!$codepagedir$ac_delim
-statedir!$statedir$ac_delim
-cachedir!$cachedir$ac_delim
 rootsbindir!$rootsbindir$ac_delim
 pammodulesdir!$pammodulesdir$ac_delim
-selftest_prefix!$selftest_prefix$ac_delim
-smbtorture4_path!$smbtorture4_path$ac_delim
-CC!$CC$ac_delim
-CFLAGS!$CFLAGS$ac_delim
-LDFLAGS!$LDFLAGS$ac_delim
-CPPFLAGS!$CPPFLAGS$ac_delim
-ac_ct_CC!$ac_ct_CC$ac_delim
-EXEEXT!$EXEEXT$ac_delim
-OBJEXT!$OBJEXT$ac_delim
-CPP!$CPP$ac_delim
-GREP!$GREP$ac_delim
-EGREP!$EGREP$ac_delim
-INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
-INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
-INSTALL_DATA!$INSTALL_DATA$ac_delim
-libreplace_cv_immediate_structures!$libreplace_cv_immediate_structures$ac_delim
-tallocdir!$tallocdir$ac_delim
-TALLOC_OBJ!$TALLOC_OBJ$ac_delim
-TALLOC_CFLAGS!$TALLOC_CFLAGS$ac_delim
-TALLOC_LIBS!$TALLOC_LIBS$ac_delim
-TALLOC_OBJS!$TALLOC_OBJS$ac_delim
-tdbdir!$tdbdir$ac_delim
-TDB_CFLAGS!$TDB_CFLAGS$ac_delim
-TDB_OBJ!$TDB_OBJ$ac_delim
-TDB_OBJS!$TDB_OBJS$ac_delim
 SAMBA_CPPFLAGS!$SAMBA_CPPFLAGS$ac_delim
 LDSHFLAGS!$LDSHFLAGS$ac_delim
 SONAMEFLAG!$SONAMEFLAG$ac_delim
 SHLD!$SHLD$ac_delim
-MODULE_EXPORTS!$MODULE_EXPORTS$ac_delim
-DSO_EXPORTS!$DSO_EXPORTS$ac_delim
 HOST_OS!$HOST_OS$ac_delim
 PICFLAG!$PICFLAG$ac_delim
+PIE_CFLAGS!$PIE_CFLAGS$ac_delim
+PIE_LDFLAGS!$PIE_LDFLAGS$ac_delim
+SHLIBEXT!$SHLIBEXT$ac_delim
+INSTALLLIBCMD_SH!$INSTALLLIBCMD_SH$ac_delim
+INSTALLLIBCMD_A!$INSTALLLIBCMD_A$ac_delim
+UNINSTALLLIBCMD_SH!$UNINSTALLLIBCMD_SH$ac_delim
+UNINSTALLLIBCMD_A!$UNINSTALLLIBCMD_A$ac_delim
+INSTALL_LIBMSRPC!$INSTALL_LIBMSRPC$ac_delim
+UNINSTALL_LIBMSRPC!$UNINSTALL_LIBMSRPC$ac_delim
+LIBMSRPC_SHARED!$LIBMSRPC_SHARED$ac_delim
+LIBMSRPC!$LIBMSRPC$ac_delim
+INSTALL_LIBADDNS!$INSTALL_LIBADDNS$ac_delim
+UNINSTALL_LIBADDNS!$UNINSTALL_LIBADDNS$ac_delim
+LIBADDNS_SHARED!$LIBADDNS_SHARED$ac_delim
+LIBADDNS!$LIBADDNS$ac_delim
+INSTALL_LIBSMBCLIENT!$INSTALL_LIBSMBCLIENT$ac_delim
+UNINSTALL_LIBSMBCLIENT!$UNINSTALL_LIBSMBCLIENT$ac_delim
+LIBSMBCLIENT_SHARED!$LIBSMBCLIENT_SHARED$ac_delim
+LIBSMBCLIENT!$LIBSMBCLIENT$ac_delim
+INSTALL_LIBSMBSHAREMODES!$INSTALL_LIBSMBSHAREMODES$ac_delim
+UNINSTALL_LIBSMBSHAREMODES!$UNINSTALL_LIBSMBSHAREMODES$ac_delim
+LIBSMBSHAREMODES_SHARED!$LIBSMBSHAREMODES_SHARED$ac_delim
+LIBSMBSHAREMODES!$LIBSMBSHAREMODES$ac_delim
+PRINT_LIBS!$PRINT_LIBS$ac_delim
+AUTH_LIBS!$AUTH_LIBS$ac_delim
+ACL_LIBS!$ACL_LIBS$ac_delim
+PASSDB_LIBS!$PASSDB_LIBS$ac_delim
+IDMAP_LIBS!$IDMAP_LIBS$ac_delim
+KRB5_LIBS!$KRB5_LIBS$ac_delim
+UUID_LIBS!$UUID_LIBS$ac_delim
+LDAP_LIBS!$LDAP_LIBS$ac_delim
+PAM_MODULES!$PAM_MODULES$ac_delim
 _ACEOF
 
   if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
@@ -75623,65 +67976,37 @@
 ac_delim='%!_!# '
 for ac_last_try in false false false false false :; do
   cat >conf$$subs.sed <<_ACEOF
-PIE_CFLAGS!$PIE_CFLAGS$ac_delim
-PIE_LDFLAGS!$PIE_LDFLAGS$ac_delim
-RELRO_LDFLAGS!$RELRO_LDFLAGS$ac_delim
-SHLIBEXT!$SHLIBEXT$ac_delim
-INSTALLLIBCMD_SH!$INSTALLLIBCMD_SH$ac_delim
-INSTALLLIBCMD_A!$INSTALLLIBCMD_A$ac_delim
-UNINSTALLLIBCMD_SH!$UNINSTALLLIBCMD_SH$ac_delim
-UNINSTALLLIBCMD_A!$UNINSTALLLIBCMD_A$ac_delim
-INSTALL_LIBADDNS!$INSTALL_LIBADDNS$ac_delim
-UNINSTALL_LIBADDNS!$UNINSTALL_LIBADDNS$ac_delim
-LIBADDNS_SHARED!$LIBADDNS_SHARED$ac_delim
-LIBADDNS!$LIBADDNS$ac_delim
-INSTALL_LIBWBCLIENT!$INSTALL_LIBWBCLIENT$ac_delim
-UNINSTALL_LIBWBCLIENT!$UNINSTALL_LIBWBCLIENT$ac_delim
-LIBWBCLIENT_SHARED_TARGET!$LIBWBCLIENT_SHARED_TARGET$ac_delim
-LIBWBCLIENT_SHARED!$LIBWBCLIENT_SHARED$ac_delim
-LIBWBCLIENT_STATIC_TARGET!$LIBWBCLIENT_STATIC_TARGET$ac_delim
-LIBWBCLIENT_STATIC!$LIBWBCLIENT_STATIC$ac_delim
-LIBWBCLIENT!$LIBWBCLIENT$ac_delim
-WINBIND_LIBS!$WINBIND_LIBS$ac_delim
-LIBSAMBAUTIL_SHARED!$LIBSAMBAUTIL_SHARED$ac_delim
-INSTALL_LIBSMBCLIENT!$INSTALL_LIBSMBCLIENT$ac_delim
-UNINSTALL_LIBSMBCLIENT!$UNINSTALL_LIBSMBCLIENT$ac_delim
-LIBSMBCLIENT_SHARED!$LIBSMBCLIENT_SHARED$ac_delim
-LIBSMBCLIENT!$LIBSMBCLIENT$ac_delim
-INSTALL_LIBSMBSHAREMODES!$INSTALL_LIBSMBSHAREMODES$ac_delim
-UNINSTALL_LIBSMBSHAREMODES!$UNINSTALL_LIBSMBSHAREMODES$ac_delim
-LIBSMBSHAREMODES_SHARED!$LIBSMBSHAREMODES_SHARED$ac_delim
-LIBSMBSHAREMODES!$LIBSMBSHAREMODES$ac_delim
-PRINT_LIBS!$PRINT_LIBS$ac_delim
-AUTH_LIBS!$AUTH_LIBS$ac_delim
-ACL_LIBS!$ACL_LIBS$ac_delim
-PASSDB_LIBS!$PASSDB_LIBS$ac_delim
-IDMAP_LIBS!$IDMAP_LIBS$ac_delim
-KRB5_LIBS!$KRB5_LIBS$ac_delim
-UUID_LIBS!$UUID_LIBS$ac_delim
-LDAP_LIBS!$LDAP_LIBS$ac_delim
-PAM_MODULES!$PAM_MODULES$ac_delim
 INSTALL_PAM_MODULES!$INSTALL_PAM_MODULES$ac_delim
 UNINSTALL_PAM_MODULES!$UNINSTALL_PAM_MODULES$ac_delim
 NSS_MODULES!$NSS_MODULES$ac_delim
 EXTRA_BIN_PROGS!$EXTRA_BIN_PROGS$ac_delim
+SMBMOUNT_PROGS!$SMBMOUNT_PROGS$ac_delim
 CIFSMOUNT_PROGS!$CIFSMOUNT_PROGS$ac_delim
 INSTALL_CIFSMOUNT!$INSTALL_CIFSMOUNT$ac_delim
 UNINSTALL_CIFSMOUNT!$UNINSTALL_CIFSMOUNT$ac_delim
-CIFSSPNEGO_PROGS!$CIFSSPNEGO_PROGS$ac_delim
-INSTALL_CIFSSPNEGO!$INSTALL_CIFSSPNEGO$ac_delim
-UNINSTALL_CIFSSPNEGO!$UNINSTALL_CIFSSPNEGO$ac_delim
 EXTRA_SBIN_PROGS!$EXTRA_SBIN_PROGS$ac_delim
 EXTRA_ALL_TARGETS!$EXTRA_ALL_TARGETS$ac_delim
 CONFIG_LIBS!$CONFIG_LIBS$ac_delim
 NSCD_LIBS!$NSCD_LIBS$ac_delim
+CC!$CC$ac_delim
+CFLAGS!$CFLAGS$ac_delim
+LDFLAGS!$LDFLAGS$ac_delim
+CPPFLAGS!$CPPFLAGS$ac_delim
+ac_ct_CC!$ac_ct_CC$ac_delim
+EXEEXT!$EXEEXT$ac_delim
+OBJEXT!$OBJEXT$ac_delim
+CPP!$CPP$ac_delim
+GREP!$GREP$ac_delim
+EGREP!$EGREP$ac_delim
+INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
+INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
+INSTALL_DATA!$INSTALL_DATA$ac_delim
+libreplace_cv_immediate_structures!$libreplace_cv_immediate_structures$ac_delim
 DEFAULT_TEST_TARGET!$DEFAULT_TEST_TARGET$ac_delim
 HAVE_SOCKET_WRAPPER!$HAVE_SOCKET_WRAPPER$ac_delim
 SOCKET_WRAPPER_OBJS!$SOCKET_WRAPPER_OBJS$ac_delim
-HAVE_NSS_WRAPPER!$HAVE_NSS_WRAPPER$ac_delim
-NSS_WRAPPER_OBJS!$NSS_WRAPPER_OBJS$ac_delim
-SWAT_SBIN_TARGETS!$SWAT_SBIN_TARGETS$ac_delim
-SWAT_INSTALL_TARGETS!$SWAT_INSTALL_TARGETS$ac_delim
+selftest_prefix!$selftest_prefix$ac_delim
+smbtorture4_path!$smbtorture4_path$ac_delim
 AWK!$AWK$ac_delim
 PERL!$PERL$ac_delim
 AR!$AR$ac_delim
@@ -75689,78 +68014,19 @@
 PIDL_ARGS!$PIDL_ARGS$ac_delim
 DYNEXP!$DYNEXP$ac_delim
 LIBOBJS!$LIBOBJS$ac_delim
+precompiled_headers!$precompiled_headers$ac_delim
 LIBDL!$LIBDL$ac_delim
 LIBREPLACE_OBJS!$LIBREPLACE_OBJS$ac_delim
 CUPS_CONFIG!$CUPS_CONFIG$ac_delim
 TERMLIBS!$TERMLIBS$ac_delim
 TERMLDFLAGS!$TERMLDFLAGS$ac_delim
 LIBUNWIND_PTRACE!$LIBUNWIND_PTRACE$ac_delim
-SYMSEXT!$SYMSEXT$ac_delim
 ROFF!$ROFF$ac_delim
-LIB_PATH_VAR!$LIB_PATH_VAR$ac_delim
 SMB_FAM_LIBS!$SMB_FAM_LIBS$ac_delim
 SMBLDAP!$SMBLDAP$ac_delim
 SMBLDAPUTIL!$SMBLDAPUTIL$ac_delim
 LDBLDAP!$LDBLDAP$ac_delim
 KRB5CONFIG!$KRB5CONFIG$ac_delim
-USESHARED!$USESHARED$ac_delim
-LIBTALLOC_SHARED_TARGET!$LIBTALLOC_SHARED_TARGET$ac_delim
-LIBTALLOC_STATIC_TARGET!$LIBTALLOC_STATIC_TARGET$ac_delim
-LIBTALLOC_SHARED!$LIBTALLOC_SHARED$ac_delim
-LIBTALLOC_STATIC!$LIBTALLOC_STATIC$ac_delim
-LIBTALLOC_LIBS!$LIBTALLOC_LIBS$ac_delim
-LIBTDB_SHARED_TARGET!$LIBTDB_SHARED_TARGET$ac_delim
-LIBTDB_STATIC_TARGET!$LIBTDB_STATIC_TARGET$ac_delim
-LIBTDB_SHARED!$LIBTDB_SHARED$ac_delim
-LIBTDB_STATIC!$LIBTDB_STATIC$ac_delim
-LIBTDB_LIBS!$LIBTDB_LIBS$ac_delim
-LIBNETAPI_SHARED_TARGET!$LIBNETAPI_SHARED_TARGET$ac_delim
-LIBNETAPI_STATIC_TARGET!$LIBNETAPI_STATIC_TARGET$ac_delim
-LIBNETAPI_SHARED!$LIBNETAPI_SHARED$ac_delim
-LIBNETAPI_STATIC!$LIBNETAPI_STATIC$ac_delim
-LIBNETAPI_LIBS!$LIBNETAPI_LIBS$ac_delim
-WINBIND_NSS_PTHREAD!$WINBIND_NSS_PTHREAD$ac_delim
-_ACEOF
-
-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
-    break
-  elif $ac_last_try; then
-    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
-   { (exit 1); exit 1; }; }
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-
-ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
-if test -n "$ac_eof"; then
-  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
-  ac_eof=`expr $ac_eof + 1`
-fi
-
-cat >>$CONFIG_STATUS <<_ACEOF
-cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-_ACEOF
-sed '
-s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
-s/^/s,@/; s/!/@,|#_!!_#|/
-:n
-t n
-s/'"$ac_delim"'$/,g/; t
-s/$/\\/; p
-N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
-' >>$CONFIG_STATUS <conf$$subs.sed
-rm -f conf$$subs.sed
-cat >>$CONFIG_STATUS <<_ACEOF
-CEOF$ac_eof
-_ACEOF
-
-
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
-  cat >conf$$subs.sed <<_ACEOF
 WINBIND_NSS!$WINBIND_NSS$ac_delim
 WINBIND_WINS_NSS!$WINBIND_WINS_NSS$ac_delim
 WINBIND_NSS_LDSHFLAGS!$WINBIND_NSS_LDSHFLAGS$ac_delim
@@ -75768,13 +68034,13 @@
 WINBIND_NSS_EXTRA_LIBS!$WINBIND_NSS_EXTRA_LIBS$ac_delim
 NSSSONAMEVERSIONSUFFIX!$NSSSONAMEVERSIONSUFFIX$ac_delim
 PAM_WINBIND_EXTRA_LIBS!$PAM_WINBIND_EXTRA_LIBS$ac_delim
-WINBIND_KRB5_LOCATOR!$WINBIND_KRB5_LOCATOR$ac_delim
+SMB_KRB5_LOCATOR!$SMB_KRB5_LOCATOR$ac_delim
 BUILD_POPT!$BUILD_POPT$ac_delim
 POPTLIBS!$POPTLIBS$ac_delim
 FLAGS1!$FLAGS1$ac_delim
-DNSSD_LIBS!$DNSSD_LIBS$ac_delim
 BUILD_INIPARSER!$BUILD_INIPARSER$ac_delim
 INIPARSERLIBS!$INIPARSERLIBS$ac_delim
+PYTHON!$PYTHON$ac_delim
 PDB_STATIC!$PDB_STATIC$ac_delim
 PDB_MODULES!$PDB_MODULES$ac_delim
 RPC_STATIC!$RPC_STATIC$ac_delim
@@ -75789,12 +68055,12 @@
 AUTH_MODULES!$AUTH_MODULES$ac_delim
 VFS_STATIC!$VFS_STATIC$ac_delim
 VFS_MODULES!$VFS_MODULES$ac_delim
-DEVELOPER_CFLAGS!$DEVELOPER_CFLAGS$ac_delim
+builddir!$builddir$ac_delim
 SMBD_LIBS!$SMBD_LIBS$ac_delim
 LTLIBOBJS!$LTLIBOBJS$ac_delim
 _ACEOF
 
-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 31; then
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 82; then
     break
   elif $ac_last_try; then
     { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
@@ -75812,7 +68078,7 @@
 fi
 
 cat >>$CONFIG_STATUS <<_ACEOF
-cat >"\$tmp/subs-3.sed" <<\CEOF$ac_eof
+cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof
 /@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
 _ACEOF
 sed '
@@ -76075,7 +68341,7 @@
 s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
 s&@INSTALL@&$ac_INSTALL&;t t
 $ac_datarootdir_hack
-" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" | sed -f "$tmp/subs-3.sed" >$tmp/out
+" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
   { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&

Modified: branches/samba/upstream/source/configure.developer
===================================================================
--- branches/samba/upstream/source/configure.developer	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/configure.developer	2008-06-15 01:55:18 UTC (rev 1953)
@@ -2,5 +2,4 @@
 `dirname $0`/configure -C \
 	--enable-developer \
 	--enable-socket-wrapper \
-	--enable-nss-wrapper \
 	"$@"

Modified: branches/samba/upstream/source/configure.in
===================================================================
--- branches/samba/upstream/source/configure.in	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/configure.in	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,56 +1,250 @@
 dnl Process this file with autoconf to produce a configure script.
 
-dnl We must use autotools 2.54 or above
-AC_PREREQ(2.54)
-
-AC_INIT([Samba],[3],[samba-technical at samba.org])
-
-AC_CONFIG_SRCDIR([include/includes.h])
+dnl We must use autotools 2.53 or above
+AC_PREREQ(2.53)
+AC_INIT(include/includes.h)
 AC_CONFIG_HEADER(include/config.h)
 AC_DEFINE(CONFIG_H_IS_FROM_SAMBA,1,[Marker for samba's config.h])
 
-case "$PATH" in
-    */usr/ucb*)
-	AC_MSG_WARN([\$PATH contains /usr/ucb - build errors may follow])
-	;;
-esac 
+SMB_VERSION_STRING=`cat $srcdir/include/version.h | grep 'SAMBA_VERSION_OFFICIAL_STRING' | cut -d '"' -f2`
+echo "SAMBA VERSION: ${SMB_VERSION_STRING}"
 
-builddir=`pwd`
-AC_SUBST(builddir)
+SAMBA_VERSION_GIT_COMMIT_FULLREV=`cat $srcdir/include/version.h | grep 'SAMBA_VERSION_GIT_COMMIT_FULLREV' | cut -d ' ' -f3- | cut -d '"' -f2`
+if test -n "${SAMBA_VERSION_GIT_COMMIT_FULLREV}";then
+	echo "BUILD COMMIT REVISION: ${SAMBA_VERSION_GIT_COMMIT_FULLREV}"
+fi
+SAMBA_VERSION_GIT_COMMIT_DATE=`cat $srcdir/include/version.h | grep 'SAMBA_VERSION_GIT_COMMIT_DATE' | cut -d ' ' -f3-`
+if test -n "${SAMBA_VERSION_GIT_COMMIT_DATE}";then
+	echo "BUILD COMMIT DATE: ${SAMBA_VERSION_GIT_COMMIT_DATE}"
+fi
+SAMBA_VERSION_GIT_COMMIT_TIME=`cat $srcdir/include/version.h | grep 'SAMBA_VERSION_GIT_COMMIT_TIME' | cut -d ' ' -f3-`
+if test -n "${SAMBA_VERSION_GIT_COMMIT_TIME}";then
+	echo "BUILD COMMIT TIME: ${SAMBA_VERSION_GIT_COMMIT_TIME}"
 
-m4_include(m4/samba_version.m4)
-m4_include(m4/check_path.m4)
+	# just to keep the build-farm gui happy for now...
+	echo "BUILD REVISION: ${SAMBA_VERSION_GIT_COMMIT_TIME}"
+fi
 
-AC_LIBREPLACE_CC_CHECKS
+AC_LIBREPLACE_LOCATION_CHECKS
 
-m4_include(lib/talloc/libtalloc.m4)
+AC_DISABLE_STATIC
+AC_ENABLE_SHARED
 
-TALLOC_OBJS=""
-for obj in ${TALLOC_OBJ}; do
-	TALLOC_OBJS="${TALLOC_OBJS} ${tallocdir}/${obj}"
-done
-AC_SUBST(TALLOC_OBJS)
+#################################################
+# Directory handling stuff to support both the
+# legacy SAMBA directories and FHS compliant
+# ones...
+AC_PREFIX_DEFAULT(/usr/local/samba)
 
-# TODO: These should come from m4_include(lib/tdb/libtdb.m4)
-# but currently this fails: things have to get merged from s4.
-tdbdir="lib/tdb"
-AC_SUBST(tdbdir)
-TDB_CFLAGS="-I${srcdir-.}/$tdbdir/include"
-AC_SUBST(TDB_CFLAGS)
-TDB_OBJ="common/tdb.o common/dump.o common/transaction.o common/error.o common/traverse.o"
-TDB_OBJ="$TDB_OBJ common/freelist.o common/freelistcheck.o common/io.o common/lock.o common/open.o"
-AC_SUBST(TDB_OBJ)
+rootsbindir="\${SBINDIR}"
+lockdir="\${VARDIR}/locks"
+piddir="\${VARDIR}/locks"
+test "${mandir}" || mandir="\${prefix}/man"
+logfilebase="\${VARDIR}"
+privatedir="\${prefix}/private"
+test "${libdir}" || libdir="\${prefix}/lib"
+pammodulesdir="\${LIBDIR}/security"
+configdir="\${LIBDIR}"
+swatdir="\${prefix}/swat"
 
-TDB_OBJS=""
-for obj in ${TDB_OBJ}; do
-	TDB_OBJS="${TDB_OBJS} ${tdbdir}/${obj}"
+AC_ARG_WITH(fhs,
+[  --with-fhs              Use FHS-compliant paths (default=no)],
+[ case "$withval" in
+  yes)
+    lockdir="\${VARDIR}/lib/samba"
+    piddir="\${VARDIR}/run"
+    mandir="\${prefix}/share/man"
+    logfilebase="\${VARDIR}/log/samba"
+    privatedir="\${CONFIGDIR}/private"
+    libdir="\${prefix}/lib/samba"
+    configdir="\${sysconfdir}/samba"
+    swatdir="\${DATADIR}/samba/swat"
+    ;;
+  esac])
+
+#################################################
+# set private directory location
+AC_ARG_WITH(privatedir,
+[  --with-privatedir=DIR   Where to put smbpasswd ($ac_default_prefix/private)],
+[ case "$withval" in
+  yes|no)
+  #
+  # Just in case anybody calls it without argument
+  #
+    AC_MSG_WARN([--with-privatedir called without argument - will use default])
+  ;;
+  * )
+    privatedir="$withval"
+    ;;
+  esac])
+
+#################################################
+# set root sbin directory location
+AC_ARG_WITH(rootsbindir,
+[  --with-rootsbindir=DIR  Which directory to use for root sbin ($ac_default_prefix/sbin)],
+[ case "$withval" in
+  yes|no)
+  #
+  # Just in case anybody calls it without argument
+  #
+    AC_MSG_WARN([--with-rootsbindir called without argument - will use default])
+  ;;
+  * )
+    rootsbindir="$withval"
+    ;;
+  esac])
+
+#################################################
+# set lock directory location
+AC_ARG_WITH(lockdir,
+[  --with-lockdir=DIR      Where to put lock files ($ac_default_prefix/var/locks)],
+[ case "$withval" in
+  yes|no)
+  #
+  # Just in case anybody calls it without argument
+  #
+    AC_MSG_WARN([--with-lockdir called without argument - will use default])
+  ;;
+  * )
+    lockdir="$withval"
+    ;;
+  esac])
+
+#################################################
+# set pid directory location
+AC_ARG_WITH(piddir,
+[  --with-piddir=DIR       Where to put pid files ($ac_default_prefix/var/locks)],
+[ case "$withval" in
+  yes|no)
+  #
+  # Just in case anybody calls it without argument
+  #
+    AC_MSG_WARN([--with-piddir called without argument - will use default])
+  ;;
+  * )
+    piddir="$withval"
+    ;;
+  esac])
+
+#################################################
+# set SWAT directory location
+AC_ARG_WITH(swatdir,
+[  --with-swatdir=DIR      Where to put SWAT files ($ac_default_prefix/swat)],
+[ case "$withval" in
+  yes|no)
+  #
+  # Just in case anybody does it
+  #
+    AC_MSG_WARN([--with-swatdir called without argument - will use default])
+  ;;
+  * )
+    swatdir="$withval"
+    ;;
+  esac])
+
+#################################################
+# set configuration directory location
+AC_ARG_WITH(configdir,
+[  --with-configdir=DIR    Where to put configuration files ($libdir)],
+[ case "$withval" in
+  yes|no)
+  #
+  # Just in case anybody does it
+  #
+    AC_MSG_WARN([--with-configdir called without argument - will use default])
+  ;;
+  * )
+    configdir="$withval"
+    ;;
+  esac])
+
+#################################################
+# set log directory location
+AC_ARG_WITH(logfilebase,
+[  --with-logfilebase=DIR  Where to put log files ($VARDIR)],
+[ case "$withval" in
+  yes|no)
+  #
+  # Just in case anybody does it
+  #
+    AC_MSG_WARN([--with-logfilebase called without argument - will use default])
+  ;;
+  * )
+    logfilebase="$withval"
+    ;;
+  esac])
+
+#################################################
+# set lib directory location
+AC_ARG_WITH(libdir,
+[  --with-libdir=DIR       Where to put libdir ($libdir)],
+[ case "$withval" in
+  yes|no)
+  #
+  # Just in case anybody does it
+  #
+    AC_MSG_WARN([--with-libdir without argument - will use default])
+  ;;
+  * )
+    libdir="$withval"
+    ;;
+  esac])
+
+#################################################
+# set PAM modules directory location
+AC_ARG_WITH(pammodulesdir,
+[  --with-pammodulesdir=DIR  Which directory to use for PAM modules ($ac_default_prefix/$libdir/security)],
+[ case "$withval" in
+  yes|no)
+  #
+  # Just in case anybody calls it without argument
+  #
+    AC_MSG_WARN([--with-pammodulesdir called without argument - will use default])
+  ;;
+  * )
+    pammodulesdir="$withval"
+    ;;
+  esac])
+
+#################################################
+# set man directory location
+AC_ARG_WITH(mandir,
+[  --with-mandir=DIR       Where to put man pages ($mandir)],
+[ case "$withval" in
+  yes|no)
+  #
+  # Just in case anybody does it
+  #
+    AC_MSG_WARN([--with-mandir without argument - will use default])
+  ;;
+  * )
+    mandir="$withval"
+    ;;
+  esac])
+
+AC_ARG_WITH(cfenc,
+[  --with-cfenc=HEADERDIR  Use internal CoreFoundation encoding API
+			  for optimization (Mac OS X/Darwin only)],
+[
+# May be in source $withval/CoreFoundation/StringEncodings.subproj.
+# Should have been in framework $withval/CoreFoundation.framework/Headers.
+for d in \
+    $withval/CoreFoundation/StringEncodings.subproj \
+    $withval/StringEncodings.subproj \
+    $withval/CoreFoundation.framework/Headers \
+    $withval/Headers \
+    $withval
+do
+    if test -r $d/CFStringEncodingConverter.h; then
+        ln -sfh $d include/CoreFoundation
+    fi
 done
-AC_SUBST(TDB_OBJS)
+])
 
 SAMBA_CPPFLAGS="-Iinclude -I${srcdir-.}/include  -I. -I${srcdir-.}"
 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/lib/replace"
-SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TALLOC_CFLAGS}"
-SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TDB_CFLAGS}"
+SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/lib/talloc"
+SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/tdb/include"
 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/libaddns"
 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/librpc"
 
@@ -61,40 +255,40 @@
 	SAMBA_CPPFLAGS=`echo ${SAMBA_CPPFLAGS} | sed -e "s;${srcdir};\$\(srcdir\);g"`
 fi
 
+AC_SUBST(configdir)
+AC_SUBST(lockdir)
+AC_SUBST(piddir)
+AC_SUBST(logfilebase)
+AC_SUBST(privatedir)
+AC_SUBST(swatdir)
+AC_SUBST(bindir)
+AC_SUBST(sbindir)
+AC_SUBST(rootsbindir)
+AC_SUBST(pammodulesdir)
+
 dnl Unique-to-Samba variables we'll be playing with.
 AC_SUBST(SAMBA_CPPFLAGS)
 AC_SUBST(SHELL)
 AC_SUBST(LDSHFLAGS)
 AC_SUBST(SONAMEFLAG)
 AC_SUBST(SHLD)
-AC_SUBST(MODULE_EXPORTS)
-AC_SUBST(DSO_EXPORTS)
 AC_SUBST(HOST_OS)
 AC_SUBST(PICFLAG)
 AC_SUBST(PIE_CFLAGS)
 AC_SUBST(PIE_LDFLAGS)
-AC_SUBST(RELRO_LDFLAGS)
 AC_SUBST(SHLIBEXT)
 AC_SUBST(INSTALLLIBCMD_SH)
 AC_SUBST(INSTALLLIBCMD_A)
 AC_SUBST(UNINSTALLLIBCMD_SH)
 AC_SUBST(UNINSTALLLIBCMD_A)
+AC_SUBST(INSTALL_LIBMSRPC)
+AC_SUBST(UNINSTALL_LIBMSRPC)
+AC_SUBST(LIBMSRPC_SHARED)
+AC_SUBST(LIBMSRPC)
 AC_SUBST(INSTALL_LIBADDNS)
 AC_SUBST(UNINSTALL_LIBADDNS)
 AC_SUBST(LIBADDNS_SHARED)
 AC_SUBST(LIBADDNS)
-
-AC_SUBST(INSTALL_LIBWBCLIENT)
-AC_SUBST(UNINSTALL_LIBWBCLIENT)
-AC_SUBST(LIBWBCLIENT_SHARED_TARGET)
-AC_SUBST(LIBWBCLIENT_SHARED)
-AC_SUBST(LIBWBCLIENT_STATIC_TARGET)
-AC_SUBST(LIBWBCLIENT_STATIC)
-AC_SUBST(LIBWBCLIENT)
-AC_SUBST(WINBIND_LIBS)
-
-AC_SUBST(LIBSAMBAUTIL_SHARED)
-
 AC_SUBST(INSTALL_LIBSMBCLIENT)
 AC_SUBST(UNINSTALL_LIBSMBCLIENT)
 AC_SUBST(LIBSMBCLIENT_SHARED)
@@ -103,7 +297,6 @@
 AC_SUBST(UNINSTALL_LIBSMBSHAREMODES)
 AC_SUBST(LIBSMBSHAREMODES_SHARED)
 AC_SUBST(LIBSMBSHAREMODES)
-
 AC_SUBST(PRINT_LIBS)
 AC_SUBST(AUTH_LIBS)
 AC_SUBST(ACL_LIBS)
@@ -117,17 +310,23 @@
 AC_SUBST(UNINSTALL_PAM_MODULES)
 AC_SUBST(NSS_MODULES)
 AC_SUBST(EXTRA_BIN_PROGS)
+AC_SUBST(SMBMOUNT_PROGS)
 AC_SUBST(CIFSMOUNT_PROGS)
 AC_SUBST(INSTALL_CIFSMOUNT)
 AC_SUBST(UNINSTALL_CIFSMOUNT)
-AC_SUBST(CIFSSPNEGO_PROGS)
-AC_SUBST(INSTALL_CIFSSPNEGO)
-AC_SUBST(UNINSTALL_CIFSSPNEGO)
 AC_SUBST(EXTRA_SBIN_PROGS)
 AC_SUBST(EXTRA_ALL_TARGETS)
 AC_SUBST(CONFIG_LIBS)
 AC_SUBST(NSCD_LIBS)
 
+## check for --enable-debug first before checking CFLAGS before
+## so that we don't mix -O and -g
+AC_ARG_ENABLE(debug,
+[  --enable-debug          Turn on compiler debugging information (default=no)],
+    [if eval "test x$enable_debug = xyes"; then
+	CFLAGS="${CFLAGS} -g"
+    fi])
+
 # compile with optimization and without debugging by default, but
 # allow people to set their own preference.
 # do this here since AC_CACHE_CHECK apparently sets the CFLAGS to "-g -O2"
@@ -136,24 +335,52 @@
 if test "x$CFLAGS" = x; then
   CFLAGS="-O"
 fi
-if test "x$debug" = "xyes" ; then
-	CFLAGS="${CFLAGS} -g"
-else
-	CFLAGS="-O"
-fi
 
 CFLAGS="${CFLAGS} -D_SAMBA_BUILD_=3"
 
+AC_LIBREPLACE_CC_CHECKS
+
 m4_include(lib/socket_wrapper/config.m4)
-m4_include(lib/nss_wrapper/config.m4)
 
-m4_include(m4/swat.m4)
+#################################################
+# set prefix for 'make test'
+selftest_prefix="./"
+AC_SUBST(selftest_prefix)
+AC_ARG_WITH(selftest-prefix,
+[  --with-selftest-prefix=DIR    The prefix where make test will be runned ($selftest_prefix)],
+[ case "$withval" in
+  yes|no)
+    AC_MSG_WARN([--with-selftest-prefix called without argument - will use default])
+  ;;
+  * )
+    selftest_prefix="$withval"
+    ;;
+  esac
+])
 
-# Probe the gcc version for extra CFLAGS. We always stash these in
-# DEVELOPER_CFLAGS, so that you can turn them on and off with a simple
-# Makefile edit, avoiding the need to re-run configure.
-if test x"$ac_cv_prog_gcc" = x"yes" ; then
-    	DEVELOPER_CFLAGS="-g -Wall -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -DDEBUG_PASSWORD -DDEVELOPER"
+#################################################
+# set path of samba4's smbtorture
+smbtorture4_path=""
+AC_SUBST(smbtorture4_path)
+AC_ARG_WITH(smbtorture4_path,
+[  --with-smbtorture4-path=PATH    The path to a samba4 smbtorture for make test (none)],
+[ case "$withval" in
+  yes|no)
+    AC_MSG_ERROR([--with-smbtorture4-path should take a path])
+  ;;
+  * )
+    smbtorture4_path="$withval"
+    if test -z "$smbtorture4_path" -a ! -f $smbtorture4_path; then
+    	AC_MSG_ERROR(['$smbtorture_path' does not  exist!])
+    fi
+  ;;
+ esac
+])
+
+AC_ARG_ENABLE(developer, [  --enable-developer      Turn on developer warnings and debugging (default=no)],
+    [if eval "test x$enable_developer = xyes"; then
+        developer=yes
+    	CFLAGS="${CFLAGS} -gstabs -Wall -Wshadow -Wstrict-prototypes -Wpointer-arith -Wcast-align -Wwrite-strings -DDEBUG_PASSWORD -DDEVELOPER"
 	# Add -Wdeclaration-after-statement if compiler supports it
 	AC_CACHE_CHECK(
           [that the C compiler understands -Wdeclaration-after-statement],
@@ -167,36 +394,18 @@
 	    samba_cv_HAVE_Wdeclaration_after_statement=no,
 	    samba_cv_HAVE_Wdeclaration_after_statement=cross)
        ])
-
-	if test x"$samba_cv_HAVE_Wdeclaration_after_statement" = x"yes"; then
-	    DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Wdeclaration-after-statement"
-	fi
-
-	#-Werror-implicit-function-declaration
-	AC_CACHE_CHECK(
-          [that the C compiler understands -Werror-implicit-function-declaration],
-          samba_cv_HAVE_Werror_implicit_function_declaration, [
-	  AC_TRY_RUN_STRICT([
-	    int main(void)
-	    {
-	    	return 0;
-	    }],[-Werror-implicit-function-declaration],[$CPPFLAGS],[$LDFLAGS],
-	    samba_cv_HAVE_Werror_implicit_function_declaration=yes,
-	    samba_cv_HAVE_Werror_implicit_function_declaration=no,
-	    samba_cv_HAVE_Werror_implicit_function_declaration=cross)
-       ])
-       if test x"$samba_cv_HAVE_Werror_implicit_function_declaration" = x"yes"; then
-	    DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Werror-implicit-function-declaration"
+       if test x"$samba_cv_HAVE_Wdeclaration_after_statement" = x"yes"; then
+	    CFLAGS="${CFLAGS} -Wdeclaration-after-statement"
        fi
+    fi])
 
-	# krb5developer is like developer, except we don't get
-	# -Wstrict-prototypes.
-       if test x"$krb5_developer" != x"$yes" ; then
-	    DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Wstrict-prototypes"
-       fi
-fi
+AC_ARG_ENABLE(krb5developer, [  --enable-krb5developer  Turn on developer warnings and debugging, except -Wstrict-prototypes (default=no)],
+    [if eval "test x$enable_krb5developer = xyes"; then
+        developer=yes
+	CFLAGS="${CFLAGS} -gstabs -Wall -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -DDEBUG_PASSWORD -DDEVELOPER"
+    fi])
 
-AC_ARG_ENABLE(dmalloc, [AS_HELP_STRING([--enable-dmalloc], [Enable heap debugging [default=no]])])
+AC_ARG_ENABLE(dmalloc, [  --enable-dmalloc        Enable heap debugging [default=no]])
 
 if test "x$enable_dmalloc" = xyes
 then
@@ -210,7 +419,7 @@
 # check for a shared memory profiling support
 AC_MSG_CHECKING(whether to use profiling)
 AC_ARG_WITH(profiling-data,
-[AS_HELP_STRING([--with-profiling-data], [Include gathering source code profile information (default=no)])],
+[  --with-profiling-data   Include gathering source code profile information (default=no)],
 [ case "$withval" in
   yes)
     AC_MSG_RESULT(yes)
@@ -251,9 +460,6 @@
  	if test "$ac_cv_gnu_ld_date" -lt 20030217; then
  		ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
  	fi
-	if test "$ac_cv_gnu_ld_date" -gt 20030101; then
-		ac_cv_gnu_ld_version_script=yes
-	fi
         else
            AC_MSG_CHECKING(GNU ld release version)
            changequote(,)dnl
@@ -269,9 +475,6 @@
            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
            fi
-           if test "$ac_cv_gnu_ld_vernr_major" -gt 2 || test "$ac_cv_gnu_l= d_vernr_major"=2 && test "$ac_cv_gnu_ld_vernr_minor" -ge 12; then
-             ac_cv_gnu_ld_version_script=yes
-           fi
         fi
 fi
 
@@ -308,20 +511,8 @@
   samba_cv_HAVE_w2=yes,samba_cv_HAVE_w2=no,samba_cv_HAVE_w2=cross)])
 if test x"$samba_cv_HAVE_w2" = x"yes"; then
    Werror_FLAGS="-w2"
-else
-dnl Check if the C compiler understands -errwarn
-AC_CACHE_CHECK([that the C compiler understands -errwarn],samba_cv_HAVE_errwarn, [
-  AC_TRY_RUN_STRICT([
-   int main(void)
-   {
-	return 0;
-   }],[-errwarn=%all],[$CPPFLAGS],[$LDFLAGS],
-   samba_cv_HAVE_errwarn=yes,samba_cv_HAVE_errwarn=no,samba_cv_HAVE_errwarn=cross)])
-if test x"$samba_cv_HAVE_errwarn" = x"yes"; then
-   Werror_FLAGS="-errwarn=%all"
 fi
 fi
-fi
 
 dnl Check if the C compiler understands volatile (it should, being ANSI).
 AC_CACHE_CHECK([that the C compiler understands volatile],samba_cv_volatile, [
@@ -336,7 +527,7 @@
 # and don't truncate the values to INT_MAX
 # a runtime test is needed here
 AC_SUBST(PIDL_ARGS)
-AC_CACHE_CHECK([that the C compiler understands negative enum values],samba_cv_CC_NEGATIVE_ENUM_VALUES, [
+AC_CACHE_CHECK([that the C compiler understands negative enum values],SMB_BUILD_CC_NEGATIVE_ENUM_VALUES, [
     AC_TRY_RUN(
 [
 	#include <stdio.h>
@@ -357,8 +548,8 @@
 		return 0;
 	}
 ],
-	samba_cv_CC_NEGATIVE_ENUM_VALUES=yes,samba_cv__CC_NEGATIVE_ENUM_VALUES=no)])
-if test x"$samba_cv_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
+	SMB_BUILD_CC_NEGATIVE_ENUM_VALUES=yes,SMB_BUILD_CC_NEGATIVE_ENUM_VALUES=no)])
+if test x"$SMB_BUILD_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
 	AC_MSG_WARN([using --unit-enums for pidl])
 	PIDL_ARGS="$PIDL_ARGS --uint-enums"
 fi
@@ -383,10 +574,6 @@
 AC_MSG_CHECKING(uname -p)
 AC_MSG_RESULT(${UNAME_P})
 
-UNAME_I=`(uname -i) 2>/dev/null` || UNAME_I="unknown"
-AC_MSG_CHECKING(uname -i)
-AC_MSG_RESULT(${UNAME_I})
-
 dnl Add #include for broken IRIX header files
   case "$host_os" in
 	*irix6*)
@@ -413,10 +600,10 @@
 
 dnl Add modules that have to be built by default here
 dnl These have to be built static:
-default_static_modules="pdb_smbpasswd pdb_tdbsam rpc_lsarpc rpc_samr rpc_winreg rpc_initshutdown rpc_dssetup rpc_wkssvc rpc_svcctl2 rpc_ntsvcs2 rpc_netlogon rpc_netdfs rpc_srvsvc rpc_spoolss rpc_eventlog2 auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin vfs_default nss_info_template"
+default_static_modules="pdb_smbpasswd pdb_tdbsam rpc_lsa rpc_samr rpc_reg rpc_shutdown rpc_lsa_ds rpc_wkssvc rpc_svcctl rpc_ntsvcs rpc_net rpc_netdfs rpc_srvsvc rpc_spoolss rpc_eventlog rpc_echo auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin vfs_default nss_info_template"
 
 dnl These are preferably build shared, and static if dlopen() is not available
-default_shared_modules="vfs_recycle vfs_audit vfs_extd_audit vfs_full_audit vfs_netatalk vfs_fake_perms vfs_default_quota vfs_readonly vfs_cap vfs_expand_msdfs vfs_shadow_copy vfs_shadow_copy2 charset_CP850 charset_CP437 auth_script vfs_readahead vfs_xattr_tdb vfs_streams_xattr"
+default_shared_modules="vfs_recycle vfs_audit vfs_extd_audit vfs_full_audit vfs_netatalk vfs_fake_perms vfs_default_quota vfs_readonly vfs_cap vfs_expand_msdfs vfs_shadow_copy charset_CP850 charset_CP437 auth_script vfs_readahead"
 
 if test "x$developer" = xyes; then
    default_static_modules="$default_static_modules rpc_rpcecho"
@@ -436,9 +623,24 @@
 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
 #
       case `uname -r` in
-		*9*|*10*|*11)
-			AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
-		;;
+			*9*|*10*)
+				CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_POSIX_SOURCE -D_ALIGNMENT_REQUIRED=1 -D_MAX_ALIGNMENT=4 -DMAX_POSITIVE_LOCK_OFFSET=0x1ffffffffffLL"
+		   		AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
+				AC_DEFINE(_HPUX_SOURCE, 1, [Whether to use HPUX extensions])
+				AC_DEFINE(_POSIX_SOURCE, 1, [Whether to use POSIX compatible functions])
+				AC_DEFINE(_ALIGNMENT_REQUIRED,1,[Required alignment])
+				AC_DEFINE(_MAX_ALIGNMENT,4,[Maximum alignment])
+				;;
+			*11*)
+				CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_POSIX_SOURCE -D_LARGEFILE64_SOURCE -D_ALIGNMENT_REQUIRED=1 -D_MAX_ALIGNMENT=4 -DMAX_POSITIVE_LOCK_OFFSET=0x1ffffffffffLL"
+		   		AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
+				AC_DEFINE(_HPUX_SOURCE, 1, [Whether to use HPUX extensions])
+				AC_DEFINE(_POSIX_SOURCE, 1, [Whether to use POSIX compatible functions])
+				AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to use large file support])
+				AC_DEFINE(_ALIGNMENT_REQUIRED, 1, [Required alignment])
+				AC_DEFINE(_MAX_ALIGNMENT, 4, [Maximum alignment])
+				AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Unix 98 sources -- needed for socklen_t in getsockopt on HP/UX 11])
+				;;
       esac
       ;;
 
@@ -648,14 +850,8 @@
 
 esac
 
-SAVE_CPPFLAGS="${CPPFLAGS}"
-CPPFLAGS="${CPPFLAGS} ${SAMBA_CONFIGURE_CPPFLAGS}"
-
 AC_LIBREPLACE_BROKEN_CHECKS
-AC_LIBREPLACE_NETWORK_CHECKS
 
-CPPFLAGS="${SAVE_CPPFLAGS}"
-
 LIBREPLACE_DIR=`echo ${libreplacedir} | sed -e "s;${srcdir};;" -e "s;^/;;"`
 
 LIBREPLACE_OBJS=""
@@ -665,21 +861,21 @@
 AC_SUBST(LIBREPLACE_OBJS)
 
 # add -ldl to the global LIBS
-LIBS="${LIBS} ${LIBDL} ${LIBREPLACE_NETWORK_LIBS}"
+LIBS="${LIBS} ${LIBDL}"
 
-AC_CHECK_HEADERS(aio.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h rpc/nettype.h)
+AC_CHECK_HEADERS(aio.h arpa/inet.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h rpc/nettype.h)
 AC_CHECK_HEADERS(unistd.h utime.h grp.h sys/id.h memory.h alloca.h)
-AC_CHECK_HEADERS(limits.h float.h pthread.h)
+AC_CHECK_HEADERS(limits.h float.h)
 AC_CHECK_HEADERS(rpc/rpc.h rpcsvc/nis.h rpcsvc/ypclnt.h)
 AC_CHECK_HEADERS(sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc.h sys/prctl.h)
-AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h)
+AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h sys/socket.h)
+AC_CHECK_HEADERS(sys/un.h)
 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
-AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h)
+AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/sockio.h)
 AC_CHECK_HEADERS(sys/sysmacros.h)
 AC_CHECK_HEADERS(sys/syslog.h syslog.h)
 AC_CHECK_HEADERS(langinfo.h locale.h)
 AC_CHECK_HEADERS(xfs/libxfs.h)
-AC_CHECK_HEADERS(netgroup.h)
 
 AC_CHECK_HEADERS(rpcsvc/yp_prot.h,,,[[
 #if HAVE_RPC_RPC_H
@@ -755,14 +951,19 @@
 AC_TYPE_PID_T
 AC_STRUCT_ST_RDEV
 AC_DIRENT_D_OFF
+AC_CHECK_TYPE(ino_t,unsigned)
+AC_CHECK_TYPE(loff_t,off_t)
+AC_CHECK_TYPE(offset_t,loff_t)
 AC_CHECK_TYPE(ssize_t, int)
 AC_CHECK_TYPE(wchar_t, unsigned short)
+AC_CHECK_TYPE(comparison_fn_t,
+[AC_DEFINE(HAVE_COMPARISON_FN_T, 1,[Whether or not we have comparison_fn_t])])
 
 ############################################
 # for cups support we need libcups, and a handful of header files
 
 AC_ARG_ENABLE(cups,
-[AS_HELP_STRING([--enable-cups], [Turn on CUPS support (default=auto)])])
+[  --enable-cups           Turn on CUPS support (default=auto)])
 
 if test x$enable_cups != xno; then
 	AC_PATH_PROG(CUPS_CONFIG, cups-config)
@@ -778,7 +979,7 @@
 fi
 
 AC_ARG_ENABLE(iprint,
-[AS_HELP_STRING([--enable-iprint], [Turn on iPrint support (default=yes if cups is yes)])])
+[  --enable-iprint         Turn on iPrint support (default=yes if cups is yes)])
 
 if test x$enable_iprint != xno; then
 	if test "x$CUPS_CONFIG" != x; then
@@ -806,9 +1007,9 @@
    AC_DEFINE(HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS,1,[Whether the compiler will optimize out function calls])
 fi
 
-#############################################
-# check for fd passing struct via msg_control
-AC_CACHE_CHECK([for fd passing via msg_control],samba_cv_msghdr_msg_control, [
+############################################
+# check for unix domain sockets
+AC_CACHE_CHECK([for unix domain sockets],samba_cv_unixsocket, [
     AC_TRY_COMPILE([
 #include <sys/types.h>
 #include <stdlib.h>
@@ -816,47 +1017,28 @@
 #include <sys/socket.h>
 #include <sys/un.h>],
 [
-	struct msghdr msg;
-	union {
-	      struct cmsghdr cm;
-	      char control[CMSG_SPACE(sizeof(int))];
-	} control_un;
-	msg.msg_control = control_un.control;
-	msg.msg_controllen = sizeof(control_un.control);
+  struct sockaddr_un sunaddr;
+  sunaddr.sun_family = AF_UNIX;
 ],
-	samba_cv_msghdr_msg_control=yes,samba_cv_msghdr_msg_control=no)])
-if test x"$samba_cv_msghdr_msg_control" = x"yes"; then
-   AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL,1,
-	     [If we can use msg_control for passing file descriptors])
+	samba_cv_unixsocket=yes,samba_cv_unixsocket=no)])
+if test x"$samba_cv_unixsocket" = x"yes"; then
+   AC_DEFINE(HAVE_UNIXSOCKET,1,[If we need to build with unixscoket support])
 fi
 
-#############################################
-# check for fd passing struct via msg_acctrights
-AC_CACHE_CHECK([for fd passing via msg_acctrights],
-		samba_cv_msghdr_msg_acctrights, [
+
+AC_CACHE_CHECK([for socklen_t type],samba_cv_socklen_t, [
     AC_TRY_COMPILE([
 #include <sys/types.h>
+#if STDC_HEADERS
 #include <stdlib.h>
 #include <stddef.h>
-#include <sys/socket.h>
-#include <sys/un.h>],
-[
-	struct msghdr msg;
-	int fd;
-	msg.msg_acctrights = (caddr_t) &fd;
-	msg.msg_acctrightslen = sizeof(fd);
-],
-	samba_cv_msghdr_msg_acctrights=yes,samba_cv_msghdr_msg_acctrights=no)])
-if test x"$samba_cv_msghdr_msg_acctrights" = x"yes"; then
-   AC_DEFINE(HAVE_MSGHDR_MSG_ACCTRIGHTS,1,
-	     [If we can use msg_acctrights for passing file descriptors])
+#endif
+#include <sys/socket.h>],[socklen_t i = 0],
+	samba_cv_socklen_t=yes,samba_cv_socklen_t=no)])
+if test x"$samba_cv_socklen_t" = x"yes"; then
+   AC_DEFINE(HAVE_SOCKLEN_T_TYPE,1,[Whether we have the variable type socklen_t])
 fi
 
-AC_CHECK_FUNCS(dirfd)
-if test x"$ac_cv_func_dirfd" = x"yes"; then
-	default_shared_modules="$default_shared_modules vfs_syncops"
-fi
-
 AC_CACHE_CHECK([for sig_atomic_t type],samba_cv_sig_atomic_t, [
     AC_TRY_COMPILE([
 #include <sys/types.h>
@@ -897,6 +1079,10 @@
 AC_HAVE_DECL(errno, [#include <errno.h>])
 AC_HAVE_DECL(setresuid, [#include <unistd.h>])
 AC_HAVE_DECL(setresgid, [#include <unistd.h>])
+AC_HAVE_DECL(asprintf, [#include <stdio.h>])
+AC_HAVE_DECL(vasprintf, [#include <stdio.h>])
+AC_HAVE_DECL(vsnprintf, [#include <stdio.h>])
+AC_HAVE_DECL(snprintf, [#include <stdio.h>])
 
 # and glibc has setresuid under linux but the function does
 # nothing until kernel 2.1.44! very dumb.
@@ -928,7 +1114,7 @@
 # test for where we get readline() from
 AC_MSG_CHECKING(whether to use readline)
 AC_ARG_WITH(readline,
-[AS_HELP_STRING([--with-readline[=DIR]], [Look for readline include/libs in DIR (default=auto)])],
+[  --with-readline[=DIR]     Look for readline include/libs in DIR (default=auto) ],
 [  case "$with_readline" in
   yes)
     AC_MSG_RESULT(yes)
@@ -999,6 +1185,40 @@
 	     [],
 	     [$TERMLIBS])
 
+# The following test taken from the cvs sources
+# If we can't find connect, try looking in -lsocket, -lnsl, and -linet.
+# The Irix 5 libc.so has connect and gethostbyname, but Irix 5 also has
+# libsocket.so which has a bad implementation of gethostbyname (it
+# only looks in /etc/hosts), so we only look for -lsocket if we need
+# it.
+AC_CHECK_FUNCS(connect)
+if test x"$ac_cv_func_connect" = x"no"; then
+    case "$LIBS" in
+    *-lnsl*) ;;
+    *) AC_CHECK_LIB(nsl_s, connect) ;;
+    esac
+    case "$LIBS" in
+    *-lnsl*) ;;
+    *) AC_CHECK_LIB(nsl, connect) ;;
+    esac
+    case "$LIBS" in
+    *-lsocket*) ;;
+    *) AC_CHECK_LIB(socket, connect) ;;
+    esac
+    case "$LIBS" in
+    *-linet*) ;;
+    *) AC_CHECK_LIB(inet, connect) ;;
+    esac
+    dnl We can't just call AC_CHECK_FUNCS(connect) here, because the value
+    dnl has been cached.
+    if test x"$ac_cv_lib_socket_connect" = x"yes" ||
+       test x"$ac_cv_lib_inet_connect" = x"yes"; then
+        # ac_cv_func_connect=yes
+        # don't!  it would cause AC_CHECK_FUNC to succeed next time configure is run
+        AC_DEFINE(HAVE_CONNECT,1,[Whether the system has connect()])
+    fi
+fi
+
 ###############################################
 # test for where we get yp_get_default_domain() from
 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
@@ -1010,11 +1230,11 @@
     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun\$(EXEEXT)"
 fi
 
-AC_CHECK_FUNCS(waitpid getcwd strdup strndup strnlen strerror chown fchown lchown chmod fchmod chroot link mknod mknod64)
+AC_CHECK_FUNCS(waitpid getcwd strdup strndup strnlen strerror chown fchown chmod fchmod chroot link mknod mknod64)
 AC_CHECK_FUNCS(strtol strtoll strtoul strtoull strtouq __strtoull)
 AC_CHECK_FUNCS(fstat strchr utime utimes chflags)
-AC_CHECK_FUNCS(getrlimit fsync fdatasync memset strlcpy strlcat setpgid)
-AC_CHECK_FUNCS(memmove setsid glob strpbrk pipe crypt16 getauthuid)
+AC_CHECK_FUNCS(getrlimit fsync memset strlcpy strlcat setpgid)
+AC_CHECK_FUNCS(memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid)
 AC_CHECK_FUNCS(strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
 AC_CHECK_FUNCS(initgroups select poll rdchk getgrnam getgrent pathconf realpath)
 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate chsize stat64 fstat64)
@@ -1028,7 +1248,7 @@
 AC_CHECK_FUNCS(setlocale nl_langinfo)
 AC_CHECK_FUNCS(nanosleep)
 AC_CHECK_FUNCS(mlock munlock mlockall munlockall)
-AC_CHECK_FUNCS(memalign posix_memalign hstrerror)
+AC_CHECK_FUNCS(memalign posix_memalign)
 AC_CHECK_HEADERS(sys/mman.h)
 # setbuffer, shmget, shm_open are needed for smbtorture
 AC_CHECK_FUNCS(setbuffer shmget shm_open)
@@ -1038,7 +1258,7 @@
 AC_CHECK_FUNCS(backtrace_symbols)
 AC_CHECK_LIB(exc, trace_back_stack)
 
-printf "%s" "checking for GPFS GPL libs... "
+echo -n "checking for GPFS GPL libs... "
 save_LIBS="$LIBS"
 LIBS="$LIBS -lgpfs_gpl"
 AC_TRY_LINK([#include <gpfs_gpl.h>],
@@ -1057,33 +1277,15 @@
 # any of them.
 AC_MSG_CHECKING([for libunwind])
 save_LIBS=$LIBS
-
-UNWIND_ARCH="unknown"
-if test x"$UNAME_I" != x"unknown"; then
-	UNWIND_ARCH="$UNAME_I"
-elif test x"$UNAME_M" != x"unknown"; then
-	UNWIND_ARCH="$UNAME_M"
-elif test x"$UNAME_P" != x"unknown"; then
-	UNWIND_ARCH="$UNAME_P"
+if test x"$UNAME_P" = xunknown ; then
+    # This probably won't link without the platform-specific libunwind.
+    LIBS="$LIBS -lunwind"
+else
+    # Add the platform-specific libunwind module. uname -p seems the most
+    # plausible option and works for ia64, where libunwind is most useful.
+    LIBS="$LIBS -lunwind -lunwind-$UNAME_P"
 fi
 
-case "$UNWIND_ARCH" in
-	unknown)
-		# This probably won't link without
-		# the platform-specific libunwind.
-		LIBS="$LIBS -lunwind"
-		;;
-	i386|i586|i686)
-		# Add the platform-specific libunwind module.
-		LIBS="$LIBS -lunwind -lunwind-x86"
-		;;
-	*)
-		# Add the platform-specific libunwind module.
-		# based on uname -i, uname -m or uname -p
-		LIBS="$LIBS -lunwind -lunwind-$UNWIND_ARCH"
-		;;
-esac
-
 AC_TRY_LINK(
     [
 #ifdef HAVE_LIBUNWIND_H
@@ -1268,7 +1470,7 @@
 # "struct timespec" or "timespec_t". Linux doesn't have timespec_t, so we
 # prefer struct timespec.
 
-AC_CACHE_CHECK([whether struct stat has sub-second timestamps], samba_cv_stat_hires,
+AC_CACHE_CHECK([whether struct stat has sub-second timestamps], samba_stat_hires,
     [
 	AC_TRY_COMPILE(
 	    [
@@ -1296,10 +1498,10 @@
 		t.tv_sec = s.st_atim.tv_sec;
 		t.tv_nsec = s.st_atim.tv_nsec;
 	    ],
-	    samba_cv_stat_hires=yes, samba_cv_stat_hires=no)
+	    samba_stat_hires=yes, samba_stat_hires=no)
     ])
 
-if test x"$samba_cv_stat_hires" = x"yes" ; then
+if test x"$samba_stat_hires" = x"yes" ; then
     AC_DEFINE(HAVE_STAT_ST_MTIM, 1, [whether struct stat contains st_mtim])
     AC_DEFINE(HAVE_STAT_ST_ATIM, 1, [whether struct stat contains st_atim])
     AC_DEFINE(HAVE_STAT_ST_CTIM, 1, [whether struct stat contains st_ctim])
@@ -1307,7 +1509,7 @@
 	    [whether struct stat has sub-second timestamps])
 fi
 
-AC_CACHE_CHECK([whether struct stat has sub-second timestamps without struct timespec], samba_cv_stat_hires_notimespec,
+AC_CACHE_CHECK([whether struct stat has sub-second timestamps without struct timespec], samba_stat_hires_notimespec,
     [
 	AC_TRY_COMPILE(
 	    [
@@ -1335,10 +1537,10 @@
 		t.tv_sec = s.st_atime;
 		t.tv_nsec = s.st_atimensec;
 	    ],
-	    samba_cv_stat_hires=yes, samba_cv_stat_hires=no)
+	    samba_stat_hires=yes, samba_stat_hires=no)
     ])
 
-if test x"$samba_cv_stat_hires_notimespec" = x"yes" ; then
+if test x"$samba_stat_hires_notimespec" = x"yes" ; then
     AC_DEFINE(HAVE_STAT_ST_MTIMENSEC, 1, [whether struct stat contains st_mtimensec])
     AC_DEFINE(HAVE_STAT_ST_ATIMENSEC, 1, [whether struct stat contains st_atimensec])
     AC_DEFINE(HAVE_STAT_ST_CTIMENSEC, 1, [whether struct stat contains st_ctimensec])
@@ -1444,13 +1646,10 @@
     ;;
 esac
 
-AC_DISABLE_STATIC
-AC_ENABLE_SHARED
-
 # Set defaults
 PIE_CFLAGS=""
 PIE_LDFLAGS=""
-AC_ARG_ENABLE(pie, [AS_HELP_STRING([--enable-pie], [Turn on pie support if available (default=yes)])])
+AC_ARG_ENABLE(pie, [  --enable-pie            Turn on pie support if available (default=yes)])
 
 if test "x$enable_pie" != xno
 then
@@ -1475,48 +1674,16 @@
 	fi
 fi
 
-# Set defaults
-RELRO_LDFLAGS=""
-AC_ARG_ENABLE(relro, [AS_HELP_STRING([--enable-relro], [Turn on Relocations Read-Only (relro) support if available (default=yes)])])
-
-if test "x$enable_relro" != xno
-then
-	AC_CACHE_CHECK([for -Wl,-z,relro], samba_cv_relro,
-	[
-		cat > conftest.c <<EOF
-int foo;
-main () { return 0;}
-EOF
-		if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -Wl,-z,relro -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
-		then
-			samba_cv_relro=yes
-		else
-			samba_cv_relro=no
-		fi
-		rm -f conftest*
-	])
-	if test x"${samba_cv_relro}" = x"yes"
-	then
-		RELRO_LDFLAGS="-Wl,-z,relro"
-	fi
-fi
-
-# Set defaults
-SYMSEXT="syms"
-AC_SUBST(SYMSEXT)
-
 # Assume non-shared by default and override below
 BLDSHARED="false"
 
 # these are the defaults, good for lots of systems
 HOST_OS="$host_os"
 LDSHFLAGS="-shared"
-MODULE_EXPORTS=""
 SONAMEFLAG="#"
 SHLD="\${CC} \${CFLAGS}"
 PICFLAG="${PIE_CFLAGS}"
 SHLIBEXT="so"
-DSO_EXPORTS=""
 
 # this bit needs to be modified for each OS that supports share libs
 # You need to specify how to create a shared library and
@@ -1600,8 +1767,8 @@
 			;;
 		*aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
 			BLDSHARED="true"
-			LDSHFLAGS="-Wl,-G,-bexpfull,-bbigtoc"
-			DYNEXP="-Wl,-brtl,-bexpfull,-bbigtoc"
+			LDSHFLAGS="-Wl,-G,-bexpall,-bbigtoc"
+			DYNEXP="-Wl,-brtl,-bexpall,-bbigtoc"
 			PICFLAG="-O2"
 			# as AIX code is always position independent...
 			# .po will just create compile warnings, use po.o:
@@ -1624,11 +1791,10 @@
 			if test "${GCC}" = "yes"; then
 				PICFLAG="-fPIC"
 			else
-				PICFLAG="+z +ESnolit"
+				PICFLAG="+z"
 			fi
 			if test "$host_cpu" = "ia64"; then
 				SHLIBEXT="so"
-			      PICFLAG="+z"
 				DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
 			else
 				SHLIBEXT="sl"
@@ -1691,17 +1857,8 @@
 
 		*darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
 			BLDSHARED="true"
-			LDSHFLAGS="-dynamiclib -flat_namespace -undefined suppress"
-			CFLAGS="$CFLAGS -fno-common"
-			SHLD="\${CC}"
+			LDSHFLAGS="-bundle -flat_namespace -undefined suppress"
 			SHLIBEXT="dylib"
-                        MODULE_EXPORTS="-exported_symbols_list \$(srcdir)/exports/modules-darwin.syms"
-                        SHLIBEXT="dylib"
-                        # Since gcc doesn't fail on unrecognised options, the
-                        # PIE test incorrectly succeeds. Darwin gcc does not
-                        # actually support the PIE stuff.
-                        PIE_LDFLAGS=
-                        PIE_CFLAGS=
 			AC_DEFINE(STAT_ST_BLOCKSIZE,512)
 			;;
 
@@ -1714,16 +1871,8 @@
 	BLDSHARED=false
 fi
 
-if test "$enable_shared" = yes -a "${ac_cv_gnu_ld_version_script}" = yes; then
-	DSO_EXPORTS=\$\(DSO_EXPORTS_CMD\)
-fi
+  AC_MSG_RESULT($BLDSHARED)
 
-if test x"$BLDSHARED" = x"true" ; then
-	LDFLAGS="$LDFLAGS -L./bin"
-fi
-
-AC_MSG_RESULT($BLDSHARED)
-
 AC_MSG_CHECKING([LDFLAGS])
 AC_MSG_RESULT([$LDFLAGS])
 AC_MSG_CHECKING([DYNEXP])
@@ -1781,8 +1930,6 @@
 
 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
 
-AC_LIBREPLACE_RUNTIME_LIB_PATH_VAR
-
 ################
 
 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
@@ -1960,6 +2107,16 @@
     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
 fi
 
+AC_CACHE_CHECK([for sin_len in sock],samba_cv_HAVE_SOCK_SIN_LEN,[
+AC_TRY_COMPILE([#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>],
+[struct sockaddr_in sock; sock.sin_len = sizeof(sock);],
+samba_cv_HAVE_SOCK_SIN_LEN=yes,samba_cv_HAVE_SOCK_SIN_LEN=no)])
+if test x"$samba_cv_HAVE_SOCK_SIN_LEN" = x"yes"; then
+    AC_DEFINE(HAVE_SOCK_SIN_LEN,1,[Whether the sockaddr_in struct has a sin_len property])
+fi
+
 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
 AC_TRY_COMPILE([#include <sys/types.h>
 #include <dirent.h>
@@ -2004,6 +2161,54 @@
 
 fi
 
+AC_CACHE_CHECK([for va_copy],samba_cv_HAVE_VA_COPY,[
+AC_TRY_LINK([#include <stdarg.h>
+va_list ap1,ap2;], [va_copy(ap1,ap2);],
+samba_cv_HAVE_VA_COPY=yes,
+samba_cv_HAVE_VA_COPY=no)])
+if test x"$samba_cv_HAVE_VA_COPY" = x"yes"; then
+    AC_DEFINE(HAVE_VA_COPY,1,[Whether va_copy() is available])
+else
+    AC_CACHE_CHECK([for __va_copy],samba_cv_HAVE___VA_COPY,[
+    AC_TRY_LINK([#include <stdarg.h>
+    va_list ap1,ap2;], [__va_copy(ap1,ap2);],
+    samba_cv_HAVE___VA_COPY=yes,
+    samba_cv_HAVE___VA_COPY=no)])
+    if test x"$samba_cv_HAVE___VA_COPY" = x"yes"; then
+        AC_DEFINE(HAVE___VA_COPY,1,[Whether __va_copy() is available])
+    fi
+fi
+
+AC_CACHE_CHECK([for C99 vsnprintf],samba_cv_HAVE_C99_VSNPRINTF,[
+AC_TRY_RUN([
+#include <sys/types.h>
+#include <stdarg.h>
+void foo(const char *format, ...) {
+       va_list ap;
+       int len;
+       char buf[5];
+
+       va_start(ap, format);
+       len = vsnprintf(buf, 0, format, ap);
+       va_end(ap);
+       if (len != 5) exit(1);
+
+       va_start(ap, format);
+       len = vsnprintf(0, 0, format, ap);
+       va_end(ap);
+       if (len != 5) exit(1);
+
+       if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1);
+
+       exit(0);
+}
+main() { foo("hello"); }
+],
+samba_cv_HAVE_C99_VSNPRINTF=yes,samba_cv_HAVE_C99_VSNPRINTF=no,samba_cv_HAVE_C99_VSNPRINTF=cross)])
+if test x"$samba_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
+    AC_DEFINE(HAVE_C99_VSNPRINTF,1,[Whether there is a C99 compliant vsnprintf])
+fi
+
 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
 AC_TRY_RUN([#include <sys/types.h>
 #include <dirent.h>
@@ -2115,16 +2320,6 @@
     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
 fi
 
-dnl Look for the IPv6 varient by preference. Many systems have both.
-AC_CACHE_CHECK([for ut_addr_v6 in utmp],samba_cv_HAVE_UT_UT_ADDR_V6,[
-AC_TRY_COMPILE([#include <sys/types.h>
-#include <utmp.h>],
-[struct utmp ut;  ut.ut_addr_v6[0] = 0;],
-samba_cv_HAVE_UT_UT_ADDR_V6=yes,samba_cv_HAVE_UT_UT_ADDR_V6=no,samba_cv_HAVE_UT_UT_ADDR_V6=cross)])
-if test x"$samba_cv_HAVE_UT_UT_ADDR_V6" = x"yes"; then
-    AC_DEFINE(HAVE_UT_UT_ADDR_V6,1,[Whether the utmp struct has a property ut_addr_v6])
-fi
-
 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
 AC_TRY_COMPILE([#include <sys/types.h>
 #include <utmp.h>],
@@ -2158,78 +2353,72 @@
 # end utmp details
 
 
-ICONV_LOOK_DIRS="/usr /usr/local /sw /opt"
+ICONV_LOCATION=standard
+LOOK_DIRS="/usr /usr/local /sw /opt"
 AC_ARG_WITH(libiconv,
-[AS_HELP_STRING([--with-libiconv=BASEDIR], [Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto)])],
+[  --with-libiconv=BASEDIR Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto) ],
 [
   if test "$withval" = "no" ; then
     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
   else
      if test "$withval" != "yes" ; then
 	ICONV_PATH_SPEC=yes
-        ICONV_LOOK_DIRS="$withval"
+        LOOK_DIRS="$withval"
      fi
   fi
 ])
 
-for i in $ICONV_LOOK_DIRS ; do
-
-    save_LIBS="$LIBS"
-    save_LDFLAGS="$LDFLAGS"
-    save_CPPFLAGS="$CPPFLAGS"
-
-    iconv_current_LIBS=""
-    iconv_current_LDFLAGS=""
-    iconv_current_CPPFLAGS=""
-
+for i in $LOOK_DIRS ; do
+    save_LIBS=$LIBS
+    save_LDFLAGS=$LDFLAGS
+    save_CPPFLAGS=$CPPFLAGS
     ICONV_FOUND="no"
     unset libext
+    CPPFLAGS="$CPPFLAGS -I$i/include"
+dnl This is here to handle -withval stuff for --with-libiconv
+dnl Perhaps we should always add a -L
 
-    #  This is here to handle -withval stuff for --with-libiconv
-    #  Perhaps we should always add a -L
-    CPPFLAGS="$save_CPPFLAGS -I$i/include"
-
-    # Check lib and lib32 library variants to cater for IRIX ABI-specific
-    # installation paths. This gets a little tricky since we might have iconv
-    # in both libiconv and in libc. In this case the jm_ICONV test will always
-    # succeed when the header is found. To counter this, make sure the
-    # library directory is there and check the ABI directory first (which
-    # should be harmless on other systems.
-    # For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
+dnl Check lib and lib32 library variants to cater for IRIX ABI-specific
+dnl installation paths. This gets a little tricky since we might have iconv
+dnl in both libiconv and in libc. In this case the jm_ICONV test will always
+dnl succeed when the header is found. To counter this, make sure the
+dnl library directory is there and check the ABI directory first (which
+dnl should be harmless on other systems.
+dnl For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
     for l in "lib32" "lib" "lib/hpux32"; do
         if test -d "$i/$l" ; then
                 LDFLAGS="$save_LDFLAGS -L$i/$l"
-		LIBS=
-		export LDFLAGS LIBS CPPFLAGS
-		# Try to find iconv(3)
+        LIBS=
+        export LDFLAGS LIBS CPPFLAGS
+dnl Try to find iconv(3)
                 jm_ICONV($i/$l)
                 if test x"$ICONV_FOUND" = "xyes" ; then
-		    libext="$l"
-		    break
-		fi
+            libext="$l"
+            break;
         fi
+        fi
     done
 
     if test x"$ICONV_FOUND" = "xyes" ; then
-	iconv_current_LDFLAGS="-L$i/$libext"
-	iconv_current_CPPFLAGS="-I$i/include"
+	LDFLAGS=$save_LDFLAGS
+        LIB_ADD_DIR(LDFLAGS, "$i/$libext")
+        CFLAGS_ADD_DIR(CPPFLAGS, "$i/include")
+	LIBS="$save_LIBS"
+        ICONV_LOCATION=$i
+        export LDFLAGS LIBS CPPFLAGS
+dnl Now, check for a working iconv ... we want to do it here because
+dnl there might be a working iconv further down the list of LOOK_DIRS
 
+        ############
+        # check for iconv in libc
+        ic_save_LIBS="$LIBS"
+        if test x"$ICONV_PATH_SPEC" = "xyes" ; then
+           LIBS="$LIBS -L$ICONV_LOCATION/$libext"
+        fi
         if test x"$jm_cv_lib_iconv" != x; then
-	    iconv_current_LIBS="$LIBS -l$jm_cv_lib_iconv"
-	else
-	    # We found iconv in libc.
-	    iconv_current_LIBS=""
+           LIBS="$LIBS -l$jm_cv_lib_iconv"
         fi
-
-    fi
-
-    if test x"$ICONV_FOUND" = "xyes" ; then
-
-        LDFLAGS="$save_LDFLAGS $iconv_current_LDFLAGS"
-        CPPFLAGS="$save_CPPFLAGS $iconv_current_CPPFLAGS"
-	LIBS="$save_LIBS $iconv_current_LIBS"
-        export LDFLAGS LIBS CPPFLAGS
-
+dnl        AC_CACHE_CHECK([for working iconv],samba_cv_HAVE_NATIVE_ICONV,[
 	default_dos_charset=no
 	default_display_charset=no
 	default_unix_charset=no
@@ -2237,30 +2426,28 @@
 	# check for default dos charset name
 	for j in CP850 IBM850 ; do
 	    rjs_CHARSET($j)
-	    default_dos_charset="$ICONV_CHARSET"
-	    if test x"$default_dos_charset" = x"$j"; then
+	    if test x"$ICONV_CHARSET" = x"$j"; then
+		default_dos_charset="\"$j\""
 		break
 	    fi
 	done
-
 	# check for default display charset name
 	for j in ASCII 646 ; do
 	    rjs_CHARSET($j)
-	    default_display_charset="$ICONV_CHARSET"
-	    if test x"$default_display_charset" = x"$j"; then
+	    if test x"$ICONV_CHARSET" = x"$j"; then
+		default_display_charset="\"$j\""
 		break
 	    fi
 	done
-
 	# check for default unix charset name
 	for j in UTF-8 UTF8 ; do
 	    rjs_CHARSET($j)
-	    default_unix_charset="$ICONV_CHARSET"
-	    if test x"$default_unix_charset" = x"$j"; then
+	    if test x"$ICONV_CHARSET" = x"$j"; then
+		default_unix_charset="\"$j\""
 		break
 	    fi
 	done
-
+	
 	if test "$default_dos_charset" != "no" -a \
 		"$default_dos_charset" != "cross" -a \
 		"$default_display_charset" != "no" -a \
@@ -2269,63 +2456,38 @@
 		"$default_unix_charset" != "cross"
 	then
 		samba_cv_HAVE_NATIVE_ICONV=yes
-	else
-	    if test "$default_dos_charset" = "cross" -o \
+	else if test "$default_dos_charset" = "cross" -o \
 		     "$default_display_charset" = "cross" -o \
 		     "$default_unix_charset" = "cross"
-	    then
-		    samba_cv_HAVE_NATIVE_ICONV=cross
-	    else
-		    samba_cv_HAVE_NATIVE_ICONV=no
-	    fi
+	then
+		samba_cv_HAVE_NATIVE_ICONV=cross
+	else
+		samba_cv_HAVE_NATIVE_ICONV=no
 	fi
-
-	# At this point, we have a libiconv candidate. We know that
-	# we have the right headers and libraries, but we don't know
-	# whether it does the conversions we want. We can't test this
-	# because we are cross-compiling. This is not necessarily a big
-	# deal, since we can't guarantee that the results we get now will
-	# match the results we get at runtime anyway.
-	if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"cross" ; then
-	    default_dos_charset="CP850"
-	    default_display_charset="ASCII"
-	    default_unix_charset="UTF-8"
-	    samba_cv_HAVE_NATIVE_ICONV=yes
-	    AC_MSG_WARN(assuming the libiconv in $iconv_current_LDFLAGS can convert)
-	    AC_MSG_WARN([$default_dos_charset, $default_display_charset and $default_unix_charset to UCS-16LE])
 	fi
+dnl ])
 
-        if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes" ; then
-
-	    CPPFLAGS=$save_CPPFLAGS
-	    LDFLAGS=$save_LDFLAGS
-	    LIBS=$save_LIBS
-
-	    if test x"$iconv_current_LIBS" != x; then
-		LIBS="$LIBS $iconv_current_LIBS"
-	    fi
-
-	    # Add the flags we need to CPPFLAGS and LDFLAGS
-	    CPPFLAGS="$CPPFLAGS $iconv_current_CPPFLAGS"
-	    LDFLAGS="$LDFLAGS $iconv_current_LDFLAGS"
-
-	    # Turn the #defines into string literals
-	    default_dos_charset="\"$default_dos_charset\""
-	    default_display_charset="\"$default_display_charset\""
-	    default_unix_charset="\"$default_unix_charset\""
-
-	    AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
-	    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
-	    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
-	    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
-
+        LIBS="$ic_save_LIBS"
+        if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes"; then
+  	   CPPFLAGS=$save_CPPFLAGS
+	   LDFLAGS=$save_LDFLAGS
+	   LIBS=$save_LIBS
+           if test x"$jm_cv_lib_iconv" != x; then
+              LIBS="$LIBS -l$jm_cv_lib_iconv"
+           fi
+	   dnl Add the flags we need to CPPFLAGS and LDFLAGS
+	   CFLAGS_ADD_DIR(CPPFLAGS, "$i/include")
+	   LIB_ADD_DIR(LDFLAGS, "$i/$libext")
+	   export CPPFLAGS
+           AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
+	   AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
+	   AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
+	   AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
            break
         fi
-
-    # We didn't find a working iconv, so keep going
+dnl We didn't find a working iconv, so keep going
     fi
-
-    #  We only need to clean these up here for the next pass through the loop
+dnl We only need to clean these up here for the next pass through the loop
     CPPFLAGS=$save_CPPFLAGS
     LDFLAGS=$save_LDFLAGS
     LIBS=$save_LIBS
@@ -2395,7 +2557,7 @@
 #	http://oss.sgi.com/projects/fam/
 #	http://savannah.nongnu.org/projects/fam/
 AC_ARG_ENABLE(fam,
-[AS_HELP_STRING([--enable-fam], [Turn on FAM support (default=auto)])])
+[  --enable-fam            Turn on FAM support (default=auto)])
 
 if test x$enable_fam != xno; then
     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
@@ -2436,12 +2598,6 @@
 
 SMB_CHECK_DMAPI([], AC_MSG_NOTICE(DMAPI support not present) )
 
-# Add TSM SM VFS module only if there are both GPFS and DMAPI support
-# Theoretically it should work with AIX JFS2 too but this needs testing
-if test x"$samba_cv_HAVE_GPFS" = x"yes" && test x"$samba_dmapi_libs" != x"" ; then
-    default_shared_modules="$default_shared_modules vfs_tsmsm"
-fi
-
 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
 AC_TRY_RUN([
 #include <sys/types.h>
@@ -2597,6 +2753,16 @@
     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
 fi
 
+AC_CACHE_CHECK([for AF_LOCAL socket support], samba_cv_HAVE_WORKING_AF_LOCAL, [
+AC_TRY_RUN([#include "${srcdir-.}/tests/unixsock.c"],
+	   samba_cv_HAVE_WORKING_AF_LOCAL=yes,
+	   samba_cv_HAVE_WORKING_AF_LOCAL=no,
+	   samba_cv_HAVE_WORKING_AF_LOCAL=cross)])
+if test x"$samba_cv_HAVE_WORKING_AF_LOCAL" != xno
+then
+    AC_DEFINE(HAVE_WORKING_AF_LOCAL, 1, [Define if you have working AF_LOCAL sockets])
+fi
+
 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
 AC_TRY_RUN([#include "${srcdir-.}/tests/getgroups.c"],
            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
@@ -2604,12 +2770,100 @@
     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
 fi
 
+AC_CACHE_CHECK([for secure mkstemp],samba_cv_HAVE_SECURE_MKSTEMP,[
+AC_TRY_RUN([#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+main() {
+  struct stat st;
+  char tpl[20]="/tmp/test.XXXXXX";
+  int fd = mkstemp(tpl);
+  if (fd == -1) exit(1);
+  unlink(tpl);
+  if (fstat(fd, &st) != 0) exit(1);
+  if ((st.st_mode & 0777) != 0600) exit(1);
+  exit(0);
+}],
+samba_cv_HAVE_SECURE_MKSTEMP=yes,
+samba_cv_HAVE_SECURE_MKSTEMP=no,
+samba_cv_HAVE_SECURE_MKSTEMP=cross)])
+if test x"$samba_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then
+    AC_DEFINE(HAVE_SECURE_MKSTEMP,1,[Whether mkstemp is secure])
+fi
+
+AC_CACHE_CHECK([for broken readdir],samba_cv_HAVE_BROKEN_READDIR,[
+	AC_TRY_RUN([#include "${srcdir-.}/tests/os2_delete.c"],
+		[samba_cv_HAVE_BROKEN_READDIR=no],
+			[samba_cv_HAVE_BROKEN_READDIR=yes],
+			[samba_cv_HAVE_BROKEN_READDIR="assuming not"])])
+
+if test x"$samba_cv_HAVE_BROKEN_READDIR" = x"yes"; then
+AC_CACHE_CHECK([for replacing readdir],samba_cv_REPLACE_READDIR,[
+	AC_TRY_RUN([
+#include "${srcdir-.}/lib/repdir.c"
+#include "${srcdir-.}/tests/os2_delete.c"],
+	samba_cv_REPLACE_READDIR=yes,samba_cv_REPLACE_READDIR=no)])
+fi
+
+if test x"$samba_cv_REPLACE_READDIR" = x"yes"; then
+	AC_DEFINE(REPLACE_READDIR,1,[replace readdir])
+fi
+
 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
 AC_CHECK_FUNCS(getpagesize)
 
+##################
+# look for a method of finding the list of network interfaces
+iface=no;
+AC_CACHE_CHECK([for iface AIX],samba_cv_HAVE_IFACE_AIX,[
+SAVE_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
+AC_TRY_RUN([
+#define HAVE_IFACE_AIX 1
+#define AUTOCONF_TEST 1
+#undef _XOPEN_SOURCE_EXTENDED
+#include "${srcdir-.}/lib/interfaces.c"],
+           samba_cv_HAVE_IFACE_AIX=yes,samba_cv_HAVE_IFACE_AIX=no,samba_cv_HAVE_IFACE_AIX=cross)])
+CPPFLAGS="$SAVE_CPPFLAGS"
+if test x"$samba_cv_HAVE_IFACE_AIX" = x"yes"; then
+    iface=yes;AC_DEFINE(HAVE_IFACE_AIX,1,[Whether iface AIX is available])
+fi
+
+if test $iface = no; then
+AC_CACHE_CHECK([for iface ifconf],samba_cv_HAVE_IFACE_IFCONF,[
+SAVE_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
+AC_TRY_RUN([
+#define HAVE_IFACE_IFCONF 1
+#define AUTOCONF_TEST 1
+#include "${srcdir-.}/lib/interfaces.c"],
+           samba_cv_HAVE_IFACE_IFCONF=yes,samba_cv_HAVE_IFACE_IFCONF=no,samba_cv_HAVE_IFACE_IFCONF=cross)])
+CPPFLAGS="$SAVE_CPPFLAGS"
+if test x"$samba_cv_HAVE_IFACE_IFCONF" = x"yes"; then
+    iface=yes;AC_DEFINE(HAVE_IFACE_IFCONF,1,[Whether iface ifconf is available])
+fi
+fi
+
+if test $iface = no; then
+AC_CACHE_CHECK([for iface ifreq],samba_cv_HAVE_IFACE_IFREQ,[
+SAVE_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
+AC_TRY_RUN([
+#define HAVE_IFACE_IFREQ 1
+#define AUTOCONF_TEST 1
+#include "${srcdir-.}/lib/interfaces.c"],
+           samba_cv_HAVE_IFACE_IFREQ=yes,samba_cv_HAVE_IFACE_IFREQ=no,samba_cv_HAVE_IFACE_IFREQ=cross)])
+CPPFLAGS="$SAVE_CPPFLAGS"
+if test x"$samba_cv_HAVE_IFACE_IFREQ" = x"yes"; then
+    iface=yes;AC_DEFINE(HAVE_IFACE_IFREQ,1,[Whether iface ifreq is available])
+fi
+fi
+
+
 ################################################
 # look for a method of setting the effective uid
 seteuid=no;
@@ -2666,20 +2920,12 @@
 fi
 fi
 
-AC_CACHE_CHECK([for the Darwin initgroups system call],
-	samba_cv_DARWIN_INITGROUPS,
-	AC_TRY_LINK([
-#include <sys/syscall.h>
-#include <unistd.h>
-	],
-	[ syscall(SYS_initgroups, 16, NULL, NULL, 0); ],
-	samba_cv_DARWIN_INITGROUPS=yes,
-	samba_cv_DARWIN_INITGROUPS=no)
-)
 
-if test x"$samba_cv_DARWIN_INITGROUPS" = x"yes" ; then
-    AC_DEFINE(HAVE_DARWIN_INITGROUPS, 1,
-	[Whether to use the Darwin-specific initgroups system call])
+AC_CACHE_CHECK([for working mmap],samba_cv_HAVE_MMAP,[
+AC_TRY_RUN([#include "${srcdir-.}/tests/shared_mmap.c"],
+           samba_cv_HAVE_MMAP=yes,samba_cv_HAVE_MMAP=no,samba_cv_HAVE_MMAP=cross)])
+if test x"$samba_cv_HAVE_MMAP" = x"yes"; then
+    AC_DEFINE(HAVE_MMAP,1,[Whether mmap works])
 fi
 
 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
@@ -2768,6 +3014,24 @@
 		[Whether the stat struct has a st_flags member])
 fi
 
+case "$host_os" in
+*linux*)
+AC_CACHE_CHECK([for broken RedHat 7.2 system header files],samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS,[
+AC_TRY_COMPILE([
+#ifdef HAVE_SYS_VFS_H
+#include <sys/vfs.h>
+#endif
+#ifdef HAVE_SYS_CAPABILITY_H
+#include <sys/capability.h>
+#endif
+],[int i;],
+   samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no,samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=yes)])
+if test x"$samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS" = x"yes"; then
+   AC_DEFINE(BROKEN_REDHAT_7_SYSTEM_HEADERS,1,[Broken RedHat 7.2 system header files])
+fi
+;;
+esac
+
 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
 AC_TRY_COMPILE([
 #include <sys/types.h>
@@ -2800,7 +3064,7 @@
 samba_cv_WITH_AFS=no
 AC_MSG_CHECKING(whether to use AFS clear-text auth)
 AC_ARG_WITH(afs,
-[AS_HELP_STRING([--with-afs], [Include AFS clear-text auth support (default=no)])],
+[  --with-afs              Include AFS clear-text auth support (default=no) ],
 [ case "$withval" in
   yes|auto)
     AC_MSG_RESULT($withval)
@@ -2818,7 +3082,7 @@
 samba_cv_WITH_FAKE_KASERVER=no
 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
 AC_ARG_WITH(fake-kaserver,
-[AS_HELP_STRING([--with-fake-kaserver], [Include AFS fake-kaserver support (default=no)])],
+[  --with-fake-kaserver    Include AFS fake-kaserver support (default=no) ],
 [ case "$withval" in
   yes|auto)
     AC_MSG_RESULT($withval)
@@ -2870,7 +3134,7 @@
 samba_cv_WITH_VFS_AFSACL=no
 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
 AC_ARG_WITH(vfs-afsacl,
-[AS_HELP_STRING([--with-vfs-afsacl], [Include AFS to NT ACL mapping module (default=no)])],
+[  --with-vfs-afsacl       Include AFS to NT ACL mapping module (default=no) ],
 [ case "$withval" in
   yes|auto)
     AC_MSG_RESULT($withval)
@@ -2895,7 +3159,7 @@
 # check for the DFS clear-text auth system
 AC_MSG_CHECKING(whether to use DFS clear-text auth)
 AC_ARG_WITH(dfs,
-[AS_HELP_STRING([--with-dce-dfs], [Include DCE/DFS clear-text auth support (default=no)])],
+[  --with-dce-dfs          Include DCE/DFS clear-text auth support (default=no)],
 [ case "$withval" in
   yes)
     AC_MSG_RESULT(yes)
@@ -2915,7 +3179,7 @@
 AC_MSG_CHECKING([for LDAP support])
 
 AC_ARG_WITH(ldap,
-[AS_HELP_STRING([--with-ldap], [LDAP support (default yes)])],
+[  --with-ldap             LDAP support (default yes)],
 [ case "$withval" in
     yes|no)
 	with_ldap_support=$withval
@@ -2979,22 +3243,6 @@
   # this test must be before the libldap test
   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
 
-  ########################################################
-  # If ber_sockbuf_add_io() is available we can add
-  # SASL wrapping hooks
-  AC_CHECK_FUNC_EXT(ber_sockbuf_add_io,$LDAP_LIBS)
-
-  AC_CACHE_CHECK([for LDAP_OPT_SOCKBUF],samba_cv_HAVE_LDAP_OPT_SOCKBUF,[
-		 AC_TRY_COMPILE([#include <ldap.h>],
-				[int val = LDAP_OPT_SOCKBUF;],
-      			samba_cv_HAVE_LDAP_OPT_SOCKBUF=yes,
-			samba_cv_HAVE_LDAP_OPT_SOCKBUF=no)])
-
-  if test x"$ac_cv_func_ext_ber_sockbuf_add_io" = x"yes" -a \
-  	  x"$samba_cv_HAVE_LDAP_OPT_SOCKBUF" = x"yes"; then
-  	AC_DEFINE(HAVE_LDAP_SASL_WRAPPING, 1, [Support for SASL wrapping])
-  fi
-
   #######################################################
   # if we have LBER_OPT_LOG_PRINT_FN, we can intercept
   # ldap logging and print it out in the samba logs
@@ -3065,7 +3313,7 @@
 AC_MSG_CHECKING([for Active Directory and krb5 support])
 
 AC_ARG_WITH(ads,
-[AS_HELP_STRING([--with-ads], [Active Directory support (default auto)])],
+[  --with-ads              Active Directory support (default auto)],
 [ case "$withval" in
     yes|no)
 	with_ads_support="$withval"
@@ -3143,7 +3391,7 @@
     # check for location of Kerberos 5 install
     AC_MSG_CHECKING(for kerberos 5 install path)
     AC_ARG_WITH(krb5,
-    [AS_HELP_STRING([--with-krb5=base-dir], [Locate Kerberos 5 support (default=/usr)])],
+    [  --with-krb5=base-dir    Locate Kerberos 5 support (default=/usr)],
     [ case "$withval" in
       no)
         AC_MSG_RESULT(no krb5-path given)
@@ -3197,12 +3445,10 @@
           KRB5_CFLAGS="-I/usr/include/heimdal"
           KRB5_CPPFLAGS="-I/usr/include/heimdal"
           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
-	  FOUND_KRB5=yes
           AC_MSG_RESULT(yes)
       else
           KRB5_CFLAGS="-I/usr/include/heimdal"
           KRB5_CPPFLAGS="-I/usr/include/heimdal"
-	  FOUND_KRB5=yes
           AC_MSG_RESULT(yes)
       fi
     else
@@ -3218,27 +3464,12 @@
       KRB5_LDFLAGS="-L/usr/kerberos/lib"
       KRB5_CFLAGS="-I/usr/kerberos/include"
       KRB5_CPPFLAGS="-I/usr/kerberos/include"
-      FOUND_KRB5=yes
       AC_MSG_RESULT(yes)
     else
       AC_MSG_RESULT(no)
     fi
   fi
 
-  if test x$FOUND_KRB5 = x"no"; then
-    #################################################
-    # see if this box has the OpenBSD location for heimdal krb5
-    AC_MSG_CHECKING(for /usr/include/kerberosV)
-    if test -d /usr/include/kerberosV; then
-      KRB5_CPPFLAGS="-I/usr/include/kerberosV"
-      KRB5_LIBS="-lcrypto"
-      FOUND_KRB5=yes
-      AC_MSG_RESULT(yes)
-    else
-      AC_MSG_RESULT(no)
-    fi
-  fi
-
   ac_save_CFLAGS=$CFLAGS
   ac_save_CPPFLAGS=$CPPFLAGS
   ac_save_LDFLAGS=$LDFLAGS
@@ -3274,10 +3505,6 @@
     LDFLAGS=$ac_save_LDFLAGS
   fi
   AC_CHECK_HEADERS(krb5/locate_plugin.h)
-  if test x"$ac_cv_header_krb5_locate_plugin_h" = x"yes"; then
-	WINBIND_KRB5_LOCATOR="bin/winbind_krb5_locator.$SHLIBEXT"
-	EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WINBIND_KRB5_LOCATOR"
-  fi
 fi
 
 # Now we have determined whether we really want ADS support
@@ -3355,13 +3582,11 @@
   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
-  AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_get_error, $KRB5_LIBS)
-  AC_CHECK_FUNC_EXT(krb5_enctype_to_string, $KRB5_LIBS)
 
   LIBS="$KRB5_LIBS $LIBS"
 
   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
-	smb_krb5_cv_ticket_has_keyinfo,
+	smb_krb5_ticket_has_keyinfo,
 	[
 	    AC_TRY_COMPILE(
 	    [
@@ -3375,17 +3600,17 @@
 		enctype = ticket.enc_part.enctype;
 		kvno = ticket.enc_part.kvno;
 	    ],
-	    [ smb_krb5_cv_ticket_has_keyinfo=yes ],
-	    [ smb_krb5_cv_ticket_has_keyinfo=no ])
+	    [ smb_krb5_ticket_has_keyinfo=yes ],
+	    [ smb_krb5_ticket_has_keyinfo=no ])
 	])
 
-  if test x"$smb_krb5_cv_ticket_has_keyinfo" = x"yes" ; then
+  if test x"$smb_krb5_ticket_has_keyinfo" = x"yes" ; then
 	AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
 	    [Whether the krb5_ticket structure contains the kvno and enctype])
   fi
 
   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
-	  smb_krb5_cv_creds_opt_free_context,
+	  smb_krb5_creds_opt_free_context,
 	  [
 		AC_TRY_COMPILE([
 		    #include <krb5.h>],
@@ -3394,25 +3619,25 @@
 			krb5_get_init_creds_opt *opt = NULL;
 			krb5_get_init_creds_opt_free(ctx, opt);
 		    ],
-		    [smb_krb5_cv_creds_opt_free_context=yes],
-		    [smb_krb5_cv_creds_opt_free_context=no]
+		    [smb_krb5_creds_opt_free_context=yes],
+		    [smb_krb5_creds_opt_free_context=no]
 		)
 	  ])
 
-  if test x"$smb_krb5_cv_creds_opt_free_context" = x"yes" ; then
+  if test x"$smb_krb5_creds_opt_free_context" = x"yes" ; then
 	AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
 	    [Whether krb5_get_init_creds_opt_free takes a context argument])
   fi
 
-  AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_cv_verify_checksum, [
+  AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_verify_checksum, [
     AC_TRY_COMPILE([
 	#include <krb5.h>],
 	[krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);],
-	[smb_krb5_cv_verify_checksum=7],
-	[smb_krb5_cv_verify_checksum=6],
+	[smb_krb5_verify_checksum=7],
+	[smb_krb5_verify_checksum=6],
     )
   ])
-  AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_cv_verify_checksum, [Number of arguments to krb5_verify_checksum])
+  AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_verify_checksum, [Number of arguments to krb5_verify_checksum])
 
   AC_CACHE_CHECK([for checksum in krb5_checksum],
                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
@@ -3733,46 +3958,7 @@
               [whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal])
   fi
 
-  if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
-    AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
-        smb_krb5_cv_enctype_to_string_takes_krb5_context_arg,[
-	AC_TRY_RUN_STRICT([
-		#include <krb5.h>
-		int main(void) {
-			krb5_context context = NULL;
-			char *str = NULL;
-			krb5_enctype_to_string(context, 1, &str);
-			if (str) free (str); 
-			return 0;
-		}
-		],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
-		smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes,
-		smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=no)])
 
-    if test x"$smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
-      AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
-                [whether krb5_enctype_to_string takes krb5_context argument])
-    fi
-
-    AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
-        smb_krb5_cv_enctype_to_string_takes_size_t_arg,[
-	AC_TRY_RUN_STRICT([
-		#include <krb5.h>
-		int main(void) {
-			char buf[256];
-			krb5_enctype_to_string(1, buf, 256);
-			return 0;
-		}
-		],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
-		smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes,
-		smb_krb5_cv_enctype_to_string_takes_size_t_arg=no)])
-
-    if test x"$smb_krb5_cv_enctype_to_string_takes_size_t_arg" = x"yes"; then
-      AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
-                [whether krb5_enctype_to_string takes size_t argument])
-    fi
-  fi
-
   AC_CACHE_CHECK([for krb5_principal_get_realm],
                 samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM,[
     AC_TRY_LINK([#include <krb5.h>],
@@ -3837,7 +4023,7 @@
     use_ads=no
   fi
 
-  if test x"$smb_krb5_cv_ticket_has_keyinfo" != x"yes" ; then
+  if test x"$smb_krb5_ticket_has_keyinfo" != x"yes" ; then
 
       # We only need the following functions if we can't get the enctype
       # and kvno out of the ticket directly (ie. on Heimdal).
@@ -3892,7 +4078,7 @@
 AC_MSG_CHECKING([whether to enable DNS Updates support])
 
 AC_ARG_WITH(dnsupdate,
-[AS_HELP_STRING([--with-dnsupdate], [Enable DNS Updates support (default no)])],
+[  --with-dnsupdate        Enable DNS Updates support (default no)],
 [ case "$withval" in
     yes|no)
 	with_dnsupdate_support=$withval
@@ -3958,7 +4144,7 @@
 # check for automount support
 AC_MSG_CHECKING(whether to use automount)
 AC_ARG_WITH(automount,
-[AS_HELP_STRING([--with-automount], [Include automount support (default=no)])],
+[  --with-automount        Include automount support (default=no)],
 [ case "$withval" in
   yes)
     AC_MSG_RESULT(yes)
@@ -3972,13 +4158,38 @@
 )
 
 #################################################
+# check for smbmount support
+AC_MSG_CHECKING(whether to use smbmount)
+AC_ARG_WITH(smbmount,
+[  --with-smbmount         Include smbmount (Linux only) support (default=no)],
+[ case "$withval" in
+  yes)
+	case "$host_os" in
+	*linux*)
+		AC_MSG_RESULT(yes)
+		AC_DEFINE(WITH_SMBMOUNT,1,[Whether to build smbmount])
+		SMBMOUNT_PROGS="bin/smbmount bin/smbmnt bin/smbumount"
+		;;
+	*)
+		AC_MSG_ERROR(not on a linux system!)
+		;;
+	esac
+    ;;
+  *)
+    AC_MSG_RESULT(no)
+    ;;
+  esac ],
+  AC_MSG_RESULT(no)
+)
+
+#################################################
 # check for mount- and umount.cifs support
 CIFSMOUNT_PROGS=""
 INSTALL_CIFSMOUNT=""
 UNINSTALL_CIFSMOUNT=""
 AC_MSG_CHECKING(whether to build mount.cifs and umount.cifs)
 AC_ARG_WITH(cifsmount,
-[AS_HELP_STRING([--with-cifsmount], [Include mount.cifs and umount.cifs (Linux only) support (default=yes)])],
+[  --with-cifsmount        Include mount.cifs and umount.cifs (Linux only) support (default=yes)],
 [ case "$withval" in
   no)
 	AC_MSG_RESULT(no)
@@ -4012,57 +4223,14 @@
   esac ]
 )
 
-#################################################
-# check for cifs.spnego support
-AC_CHECK_HEADERS([keyutils.h], [HAVE_KEYUTILS_H=1], [HAVE_KEYUTILS_H=0])
-CIFSSPNEGO_PROGS=""
-INSTALL_CIFSSPNEGO=""
-UNINSTALL_CIFSSPNEGO=""
-AC_MSG_CHECKING(whether to build cifs.spnego)
-AC_ARG_WITH(cifsspnego,
-[AS_HELP_STRING([--with-cifsspnego], [Include cifs.spnego (Linux only) support (default=no)])],
-[ case "$withval" in
-  no)
-	AC_MSG_RESULT(no)
-	;;
-  *)
-	case "$host_os" in
-	*linux*)
-		if test x"$use_ads" != x"yes"; then
-			AC_MSG_ERROR(ADS support should be enabled for building cifs.spnego)
-		elif test x"$HAVE_KEYUTILS_H" != "x1"; then
-			AC_MSG_ERROR(keyutils package is required for cifs.spnego)
-		else
-			AC_MSG_RESULT(yes)
-			AC_DEFINE(WITH_CIFSSPNEGO,1,[whether to build cifs.spnego])
-			CIFSSPNEGO_PROGS="bin/cifs.spnego"
-			INSTALL_CIFSSPNEGO="installcifsspnego"
-			UNINSTALL_CIFSSPNEGO="uninstallcifsspnego"
-		fi
-		;;
-	*)
-		AC_MSG_ERROR(not on a linux system!)
-		;;
-	esac
-    ;;
-  esac ],
-[
-  AC_MSG_RESULT(no)
-  ]
-)
 
-
 #################################################
-# Check for a PAM clear-text auth, accounts, password
-# and session support. Most PAM implementations keep their
-# headers in /usr/include/security. Darwin keeps its in
-# /usr/include/pam.
-
+# check for a PAM clear-text auth, accounts, password and session support
 with_pam_for_crypt=no
 try_pam=no
 AC_MSG_CHECKING(whether to try PAM support)
 AC_ARG_WITH(pam,
-[AS_HELP_STRING([--with-pam], [Include PAM support (default=no)])],
+[  --with-pam              Include PAM support (default=no)],
 [ case "$withval" in
   yes|no)
     try_pam=$withval
@@ -4077,13 +4245,10 @@
 	use_pam=yes
 	create_pam_modules=yes
 
-	# Most systems have PAM headers in /usr/include/security, but Darwin
-	# has them in /usr/include/pam.
-	AC_CHECK_HEADERS(security/pam_appl.h pam/pam_appl.h)
-	if test x"$ac_cv_header_security_pam_appl_h" != x"yes" -a \
-		x"$ac_cv_header_pam_pam_appl_h" != x"yes"; then
+	AC_CHECK_HEADERS(security/pam_appl.h)
+	if test x"$ac_cv_header_security_pam_appl_h" != x"yes"; then
 		if test x"${try_pam}" = x"yes";then
-			AC_MSG_ERROR([--with-pam=yes but pam_appl.h not found])
+			AC_MSG_ERROR([--with-pam=yes but security/pam_appl.h not found])
 		fi
 		use_pam=no
 		create_pam_modules=no
@@ -4098,18 +4263,14 @@
 		create_pam_modules=no
 	fi
 
-	AC_CHECK_HEADERS(security/pam_modules.h pam/pam_modules.h,,,[[
+	AC_CHECK_HEADERS(security/pam_modules.h,,,[[
 		#if HAVE_SECURITY_PAM_APPL_H
 		#include <security/pam_appl.h>
 		#endif
-		#if HAVE_PAM_PAM_APPL_H
-		#include <pam/pam_appl.h>
-		#endif
 	]])
-	if test x"$ac_cv_header_security_pam_modules_h" = x"no" -a \
-		x"$ac_cv_header_pam_pam_modules_h" = x"no" ; then
+       if test x"$ac_cv_header_security_pam_modules_h" = x"no"; then
 		if test x"${try_pam}" = x"yes";then
-			AC_MSG_ERROR([--with-pam=yes but pam_modules.h not found])
+			AC_MSG_ERROR([--with-pam=yes but security/pam_modules.h not found])
        fi
 		create_pam_modules=no
     fi
@@ -4125,7 +4286,6 @@
 			# this checks are optional,
 			# we don't care about the results here
 			AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
-			AC_CHECK_HEADERS(pam/pam_ext.h pam/_pam_macros.h)
 			AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
 		else
 			AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])		
@@ -4145,7 +4305,7 @@
 UNINSTALL_PAM_MODULES=""
 AC_MSG_CHECKING(whether to use pam_smbpass)
 AC_ARG_WITH(pam_smbpass,
-[AS_HELP_STRING([--with-pam_smbpass], [Build PAM module for authenticating against passdb backends (default=no)])],
+[  --with-pam_smbpass      Build PAM module for authenticating against passdb backends (default=no)],
 [ case "$withval" in
   yes)
     AC_MSG_RESULT(yes)
@@ -4198,7 +4358,7 @@
 # check for a NISPLUS_HOME support
 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
 AC_ARG_WITH(nisplus-home,
-[AS_HELP_STRING([--with-nisplus-home], [Include NISPLUS_HOME support (default=no)])],
+[  --with-nisplus-home     Include NISPLUS_HOME support (default=no)],
 [ case "$withval" in
   yes)
     AC_MSG_RESULT(yes)
@@ -4215,7 +4375,7 @@
 # check for syslog logging
 AC_MSG_CHECKING(whether to use syslog logging)
 AC_ARG_WITH(syslog,
-[AS_HELP_STRING([--with-syslog], [Include experimental SYSLOG support (default=no)])],
+[  --with-syslog           Include experimental SYSLOG support (default=no)],
 [ case "$withval" in
   yes)
     AC_MSG_RESULT(yes)
@@ -4240,7 +4400,7 @@
 
 AC_MSG_CHECKING(whether to try disk-quotas support)
 AC_ARG_WITH(quotas,
-[AS_HELP_STRING([--with-quotas], [Include disk-quota support (default=no)])],
+[  --with-quotas           Include disk-quota support (default=no)],
 [ case "$withval" in
   yes)
     AC_MSG_RESULT(yes)
@@ -4273,7 +4433,7 @@
 
 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
 AC_ARG_WITH(sys-quotas,
-[AS_HELP_STRING([--with-sys-quotas], [Include lib/sysquotas.c support (default=auto)])],
+[  --with-sys-quotas       Include lib/sysquotas.c support (default=auto)],
 [ case "$withval" in
   yes)
     AC_MSG_RESULT(yes)
@@ -4349,9 +4509,6 @@
 # For quotas on Veritas VxFS filesystems
 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
 
-# For quotas on Linux XFS filesystems
-AC_CHECK_HEADERS(linux/dqblk_xfs.h)
-
 # For sys/quota.h and linux/quota.h
 AC_CHECK_HEADERS(sys/quota.h)
 
@@ -4551,7 +4708,7 @@
 AC_MSG_CHECKING(whether to support utmp accounting)
 WITH_UTMP=yes
 AC_ARG_WITH(utmp,
-[AS_HELP_STRING([--with-utmp], [Include utmp accounting (default, if supported by OS)])],
+[  --with-utmp             Include utmp accounting (default, if supported by OS)],
 [ case "$withval" in
   no)
 		WITH_UTMP=no
@@ -4594,76 +4751,53 @@
 fi
 
 #################################################
-# --disable-shared-libs
-# can be used to disable the internal use of shared libs altogether
-# (this only has an effect when building shared libs is enabled)
-#
-USESHARED=false
-AC_SUBST(USESHARED)
+# should we build libmsrpc?
+INSTALL_LIBMSRPC=
+UNINSTALL_LIBMSRPC=
+LIBMSRPC_SHARED=
+LIBMSRPC=
+AC_MSG_CHECKING(whether to build the libmsrpc shared library)
+AC_ARG_WITH(libmsrpc,
+[  --with-libmsrpc         Build the libmsrpc shared library (default=yes if shared libs supported)],
+[ case "$withval" in
+  no)
+     AC_MSG_RESULT(no)
+     ;;
+  *)
+     if test $BLDSHARED = true; then
+        LIBMSRPC_SHARED=bin/libmsrpc.$SHLIBEXT
+        LIBMSRPC=libmsrpc
+        AC_MSG_RESULT(yes)
+     else
+	enable_static=yes
+        AC_MSG_RESULT(no shared library support -- will supply static library)
+     fi
+     if test $enable_static = yes; then
+        LIBMSRPC=libmsrpc
+     fi
+     INSTALL_LIBMSRPC=installlibmsrpc
+     UNINSTALL_LIBMSRPC=uninstalllibmsrpc
+     ;;
+  esac ],
+[
+# if unspecified, default is to built it if possible.
+  if test $BLDSHARED = true; then
+     LIBMSRPC_SHARED=bin/libmsrpc.$SHLIBEXT
+     LIBMSRPC=libmsrpc
+     AC_MSG_RESULT(yes)
+   else
+     enable_static=yes
+     AC_MSG_RESULT(no shared library support -- will supply static library)
+   fi
+   if test $enable_static = yes; then
+     LIBMSRPC=libmsrpc
+  fi]
+  INSTALL_LIBMSRPC=installlibmsrpc
+  UNINSTALL_LIBMSRPC=uninstalllibmsrpc
+)
 
-AC_MSG_CHECKING(whether to use shared libraries internally)
-AC_ARG_ENABLE([shared-libs],
-	AS_HELP_STRING([--enable-shared-libs],
-		[Use shared libraries internally (default=yes)]),
-	[enable_shared_libs=$enableval],
-	[enable_shared_libs=yes])
 
-if test x"$enable_shared_libs" != x"no" ; then
-	USESHARED=$BLDSHARED
-fi
-
-AC_MSG_RESULT([$USESHARED])
-
-if test x"$enable_shared_libs" = x"yes" -a x"$BLDSHARED" != x"true" ; then
-	AC_MSG_WARN([--enable-shared-libs: no support for shared libraries])
-fi
-
 #################################################
-# --with-static-libs=LIBS:
-#   link (internal) libs dynamically or statically?
-#
-# If a subsystem is built as a library then this controls whether they are
-# linked into Samba targets statically or dynamically:
-#
-# * If we build the shared library at all, we link dynamically by default.
-#
-# * We only link statically if we don't build shared or if the library
-#   appears in the --with-static-libs configure option.
-#
-# Example:
-#   --with-static-libs=libtalloc makes use of libtalloc.a instead
-#   of linking the dynamic variant with -ltalloc.
-#
-# NOTE: This option only affects libraries that we do not only build
-# but that samba also links against as libraries (as opposed to linking
-# the plain object files. - This has to be configured in Makefile.in.
-# So in particular it does not harm to give invalid or unknown names here.
-#
-
-AC_ARG_WITH([static-libs],
-	[AS_HELP_STRING([--with-static-libs=LIBS],
-		[Comma-separated list of names of (internal) libraries to link statically (instead of dynamically)])],
-	[AS_IF([test $withval],
-		[for lib in `echo $withval | sed -e 's/,/ /g'` ; do
-			[lib=`echo $lib | tr '[a-z]' '[A-Z]'`]
-			eval LINK_$lib=STATIC
-		done], [])],
-	[])
-
-#
-# WORKAROUND:
-#   until we have organized other internal subsystems (as util, registry
-#   and smbconf) into shared libraries, we CAN NOT link libnetapi
-#   dynamically to samba programs.
-#
-LINK_LIBNETAPI=STATIC
-
-SMB_LIBRARY(talloc)
-SMB_LIBRARY(tdb)
-SMB_LIBRARY(netapi)
-
-
-#################################################
 # should we build libaddns?
 INSTALL_LIBADDNS=
 UNINSTALL_LIBADDNS=
@@ -4671,12 +4805,12 @@
 LIBADDNS=
 AC_MSG_CHECKING(whether to build the libaddns shared library)
 AC_ARG_WITH(libaddns,
-[AS_HELP_STRING([--with-libaddns], [Build the libaddns shared library (default=no undefined API)])],
+[  --with-libaddns         Build the libaddns shared library (default=yes if shared libs supported)],
 [ case "$withval" in
-  *)
+  no)
      AC_MSG_RESULT(no)
      ;;
-  yes)
+  *)
      if test $BLDSHARED = true; then
         LIBADDNS_SHARED=bin/libaddns.$SHLIBEXT
         LIBADDNS=libaddns
@@ -4692,19 +4826,32 @@
      UNINSTALL_LIBADDNS=uninstalllibaddns
      ;;
   esac ],
-[AC_MSG_RESULT(no)]
+[
+# if unspecified, default is to built it if possible.
+  if test $BLDSHARED = true; then
+     LIBADDNS_SHARED=bin/libaddns.$SHLIBEXT
+     LIBADDNS=libaddns
+     AC_MSG_RESULT(yes)
+   else
+     enable_static=yes
+     AC_MSG_RESULT(no shared library support -- will supply static library)
+   fi
+   if test $enable_static = yes; then
+     LIBADDNS=libaddns
+  fi]
+  INSTALL_LIBADDNS=installlibaddns
+  UNINSTALL_LIBADDNS=uninstalllibaddns
 )
 
 #################################################
 # should we build libsmbclient?
-
 INSTALL_LIBSMBCLIENT=
 UNINSTALL_LIBSMBCLIENT=
 LIBSMBCLIENT_SHARED=
 LIBSMBCLIENT=
 AC_MSG_CHECKING(whether to build the libsmbclient shared library)
 AC_ARG_WITH(libsmbclient,
-[AS_HELP_STRING([--with-libsmbclient], [Build the libsmbclient shared library (default=yes if shared libs supported)])],
+[  --with-libsmbclient     Build the libsmbclient shared library (default=yes if shared libs supported)],
 [ case "$withval" in
   no)
      AC_MSG_RESULT(no)
@@ -4726,7 +4873,7 @@
      ;;
   esac ],
 [
-# if unspecified, default is to build it if possible.
+# if unspecified, default is to built it if possible.
   if test $BLDSHARED = true; then
      LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
      LIBSMBCLIENT=libsmbclient
@@ -4747,7 +4894,7 @@
 LIBSMBSHAREMODES=
 AC_MSG_CHECKING(whether to build the libsmbsharemodes shared library)
 AC_ARG_WITH(libsmbsharemodes,
-[AS_HELP_STRING([--with-libsmbsharemodes], [Build the libsmbsharemodes shared library (default=yes if shared libs supported)])],
+[  --with-libsmbsharemodes     Build the libsmbsharemodes shared library (default=yes if shared libs supported)],
 [ case "$withval" in
   no)
      AC_MSG_RESULT(no)
@@ -4769,7 +4916,7 @@
      ;;
   esac ],
 [
-# if unspecified, default is to build it if possible.
+# if unspecified, default is to built it if possible.
   if test $BLDSHARED = true; then
      LIBSMBSHAREMODES_SHARED=bin/libsmbsharemodes.$SHLIBEXT
      LIBSMBSHAREMODES=libsmbsharemodes
@@ -4784,7 +4931,6 @@
   INSTALL_LIBSMBSHAREMODES=installlibsmbsharemodes
 )
 
-
 #################################################
 # these tests are taken from the GNU fileutils package
 AC_CHECKING(how to get filesystem space usage)
@@ -5007,7 +5153,7 @@
 
 AC_MSG_CHECKING(whether to include cluster support)
 AC_ARG_WITH(cluster-support,
-[AS_HELP_STRING([--with-cluster-support], [Enable cluster extensions (default=no)])])
+[  --with-cluster-support  Enable cluster extensions (default=no)])
 if test "x$with_cluster_support" = "xyes"; then
     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
     AC_MSG_RESULT(yes)
@@ -5021,71 +5167,55 @@
 
 AC_MSG_CHECKING(whether to support ACLs)
 AC_ARG_WITH(acl-support,
-[AS_HELP_STRING([--with-acl-support], [Include ACL support (default=auto)])],
+[  --with-acl-support      Include ACL support (default=no)],
 [ case "$withval" in
-	yes|no)
-		with_acl_support="$withval"
-		;;
-  esac ])
+  yes)
 
-if test x"$with_acl_support" = x ; then
-	with_acl_support="auto"
-fi
-
-AC_MSG_RESULT($with_acl_support)
-
-if test x"$with_acl_support" = x"no"; then
-	AC_MSG_RESULT(Disabling ACL support)
-	AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
-else
-	AC_MSG_NOTICE(checking whether ACL support is available:)
 	case "$host_os" in
 	*sysv5*)
-		AC_MSG_NOTICE(Using UnixWare ACLs)
+		AC_MSG_RESULT(Using UnixWare ACLs)
 		AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
 		default_static_modules="$default_static_modules vfs_solarisacl"
 		;;
 	*solaris*)
-		AC_MSG_NOTICE(Using solaris ACLs)
+		AC_MSG_RESULT(Using solaris ACLs)
 		AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
 		ACL_LIBS="$ACL_LIBS -lsec"
 		default_static_modules="$default_static_modules vfs_solarisacl"
 		;;
 	*hpux*)
-		AC_MSG_NOTICE(Using HPUX ACLs)
+		AC_MSG_RESULT(Using HPUX ACLs)
 		AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
 		default_static_modules="$default_static_modules vfs_hpuxacl"
 		;;
 	*irix*)
-		AC_MSG_NOTICE(Using IRIX ACLs)
+		AC_MSG_RESULT(Using IRIX ACLs)
 		AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
 		default_static_modules="$default_static_modules vfs_irixacl"
 		;;
 	*aix*)
-		AC_MSG_NOTICE(Using AIX ACLs)
+		AC_MSG_RESULT(Using AIX ACLs)
 		AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
 		default_static_modules="$default_static_modules vfs_aixacl"
 		;;
 	*osf*)
-		AC_MSG_NOTICE(Using Tru64 ACLs)
+		AC_MSG_RESULT(Using Tru64 ACLs)
 		AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
 		ACL_LIBS="$ACL_LIBS -lpacl"
 		default_static_modules="$default_static_modules vfs_tru64acl"
 		;;
-	*darwin*)
-		AC_MSG_NOTICE(ACLs on Darwin currently not supported)
-		AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
+	*freebsd[[5-9]]*)
+		AC_MSG_RESULT(Using FreeBSD posix ACLs)
+		AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether FreeBSD POSIX ACLs are available])
+		AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
+		default_static_modules="$default_static_modules vfs_posixacl"
 		;;
-	*)
-		AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
-		case "$host_os" in
-		*linux*)
-			AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
-			;;
-		esac
-		AC_CACHE_CHECK([for POSIX ACL support],samba_cv_HAVE_POSIX_ACLS,[
+	*linux*)
+		AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
+       		AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
+		AC_CACHE_CHECK([for ACL support],samba_cv_HAVE_POSIX_ACLS,[
 			acl_LIBS=$LIBS
-			LIBS="$LIBS $ACL_LIBS"
+			LIBS="$LIBS -lacl"
 			AC_TRY_LINK([
 				#include <sys/types.h>
 				#include <sys/acl.h>
@@ -5100,11 +5230,11 @@
 			LIBS=$acl_LIBS
 		])
 		if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
-			AC_MSG_NOTICE(Using posix ACLs)
+			AC_MSG_RESULT(Using posix ACLs)
 			AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
 			AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
 				acl_LIBS=$LIBS
-				LIBS="$LIBS $ACL_LIBS"
+				LIBS="$LIBS -lacl"
 				AC_TRY_LINK([
 					#include <sys/types.h>
 					#include <sys/acl.h>
@@ -5120,23 +5250,70 @@
 			if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
 				AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
 			fi
-   			default_static_modules="$default_static_modules vfs_posixacl"
-		else
-			AC_MSG_NOTICE(ACL support is not avaliable)
-			AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
 		fi
-		;;
+            ;;
+         *)
+		AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
+		AC_CACHE_CHECK([for ACL support],samba_cv_HAVE_POSIX_ACLS,[
+			acl_LIBS=$LIBS
+			LIBS="$LIBS -lacl"
+			AC_TRY_LINK([
+				#include <sys/types.h>
+				#include <sys/acl.h>
+			],[
+				acl_t acl;
+				int entry_id;
+				acl_entry_t *entry_p;
+				return acl_get_entry( acl, entry_id, entry_p);
+			],
+			[samba_cv_HAVE_POSIX_ACLS=yes],
+			[samba_cv_HAVE_POSIX_ACLS=no])
+			LIBS=$acl_LIBS
+		])
+		if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
+			AC_MSG_RESULT(Using posix ACLs)
+			AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
+			AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
+				acl_LIBS=$LIBS
+				LIBS="$LIBS -lacl"
+				AC_TRY_LINK([
+					#include <sys/types.h>
+					#include <sys/acl.h>
+				],[
+					acl_permset_t permset_d;
+					acl_perm_t perm;
+					return acl_get_perm_np( permset_d, perm);
+				],
+				[samba_cv_HAVE_ACL_GET_PERM_NP=yes],
+				[samba_cv_HAVE_ACL_GET_PERM_NP=no])
+				LIBS=$acl_LIBS
+			])
+			if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
+				AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
+			fi
+		fi
+            ;;
         esac
-fi # with_acl_support
+        ;;
+  *)
+    AC_MSG_RESULT(no)
+    AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
+    ;;
+  esac ],
+  AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
+  AC_MSG_RESULT(no)
+)
 
+if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
+   default_static_modules="$default_static_modules vfs_posixacl"
+fi
 
-
 #################################################
 # check for AIO support
 
 AC_MSG_CHECKING(whether to support asynchronous io)
 AC_ARG_WITH(aio-support,
-[AS_HELP_STRING([--with-aio-support], [Include asynchronous io support (default=no)])],
+[  --with-aio-support      Include asynchronous io support (default=no)],
 [ case "$withval" in
   yes)
 
@@ -5270,20 +5447,13 @@
   AC_MSG_RESULT(no)
 )
 
-if test x"$samba_cv_HAVE_AIO" = x"yes"; then
-	if test x"$samba_cv_msghdr_msg_control" = x"yes" -o \
-		x"$samba_cv_msghdr_msg_acctright" = x"yes"; then
-		default_shared_modules="$default_shared_modules vfs_aio_fork"
-	fi
-fi
-
 #################################################
 # check for sendfile support
 
 with_sendfile_support=yes
 AC_MSG_CHECKING(whether to check to support sendfile)
 AC_ARG_WITH(sendfile-support,
-[AS_HELP_STRING([--with-sendfile-support], [Check for sendfile support (default=yes)])],
+[  --with-sendfile-support Check for sendfile support (default=yes)],
 [ case "$withval" in
   yes)
 
@@ -5553,8 +5723,6 @@
              [Whether Linux readahead is available])
 fi
 
-AC_HAVE_DECL(readahead, [#include <fcntl.h>])
-
 ############################################
 # See if we have the posix_fadvise syscall.
 
@@ -5574,28 +5742,8 @@
              [Whether posix_fadvise is available])
 fi
 
-############################################
-# See if we have the Linux splice syscall.
 
-AC_CACHE_CHECK([for Linux splice],
-                samba_cv_HAVE_LINUX_SPLICE,[
-    AC_TRY_LINK([
-#if defined(HAVE_UNISTD_H)
-#include <unistd.h>
-#endif
-#include <fcntl.h>],
-    [long ret = splice(0,0,1,0,400,0);],
-    samba_cv_HAVE_LINUX_SPLICE=yes,
-    samba_cv_HAVE_LINUX_SPLICE=no)])
 
-if test x"$samba_cv_HAVE_LINUX_SPLICE" = x"yes"; then
-  AC_DEFINE(HAVE_LINUX_SPLICE,1,
-             [Whether Linux splice is available])
-fi
-
-AC_HAVE_DECL(splice, [#include <fcntl.h>])
-
-
 #################################################
 # Check whether winbind is supported on this platform.  If so we need to
 # build and install client programs, sbin programs and shared libraries
@@ -5613,8 +5761,9 @@
 WINBIND_WINS_NSS="nsswitch/libnss_wins.$SHLIBEXT"
 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
 NSSSONAMEVERSIONSUFFIX=""
-WINBIND_NSS_PTHREAD=""
 
+SMB_KRB5_LOCATOR="bin/smb_krb5_locator.$SHLIBEXT"
+
 case "$host_os" in
 	*linux*)
 		NSSSONAMEVERSIONSUFFIX=".2"
@@ -5658,8 +5807,8 @@
 		NSSSONAMEVERSIONSUFFIX=".1"
 		WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o \
 		    nsswitch/winbind_nss_linux.o"
-		WINBIND_NSS_EXTRA_LIBS="${LIBREPLACE_NETWORK_LIBS}"
-		PAM_WINBIND_EXTRA_LIBS="${LIBREPLACE_NETWORK_LIBS}"
+		WINBIND_NSS_EXTRA_LIBS="-lsocket"
+		PAM_WINBIND_EXTRA_LIBS="-lsocket"
 		;;
 	*hpux11*)
 		WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o"
@@ -5678,10 +5827,20 @@
 		;;
 esac
 
+AC_SUBST(WINBIND_NSS)
+AC_SUBST(WINBIND_WINS_NSS)
+AC_SUBST(WINBIND_NSS_LDSHFLAGS)
+AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
+AC_SUBST(WINBIND_NSS_EXTRA_LIBS)
+AC_SUBST(NSSSONAMEVERSIONSUFFIX)
+AC_SUBST(PAM_WINBIND_EXTRA_LIBS)
+
+AC_SUBST(SMB_KRB5_LOCATOR)
+
 # Check the setting of --with-winbind
 
 AC_ARG_WITH(winbind,
-[AS_HELP_STRING([--with-winbind], [Build winbind (default, if supported by OS)])],
+[  --with-winbind          Build winbind (default, if supported by OS)],
 [
   case "$withval" in
 	yes)
@@ -5697,7 +5856,7 @@
 # We need unix domain sockets for winbind
 
 if test x"$HAVE_WINBIND" = x"yes"; then
-	if test x"$libreplace_cv_HAVE_UNIXSOCKET" = x"no"; then
+	if test x"$samba_cv_unixsocket" = x"no"; then
 		winbind_no_reason=", no unix domain socket support on $host_os"
 		HAVE_WINBIND=no
 	fi
@@ -5710,25 +5869,8 @@
 	WINBIND_WINS_NSS=""
 fi
 
-if test x"$enable_developer" = x"yes" -a x"$LINK_LIBWBCLIENT" = x"STATIC" ; then
-	BUILD_LIBWBCLIENT_SHARED=no
-else
-	BUILD_LIBWBCLIENT_SHARED=yes
-fi
-
-LIBWBCLIENT_SHARED_TARGET=bin/libwbclient.$SHLIBEXT
-LIBWBCLIENT_STATIC_TARGET=bin/libwbclient.a
-if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes" -a x"$BUILD_LIBWBCLIENT_SHARED" = x"yes"; then
+if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes"; then
 	NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
-	## Only worry about libwbclient if we have shared library support
-	## and winbindd
-        LIBWBCLIENT_SHARED=$LIBWBCLIENT_SHARED_TARGET
-        LIBWBCLIENT=libwbclient
-	INSTALL_LIBWBCLIENT=installlibwbclient
-	UNINSTALL_LIBWBCLIENT=uninstalllibwbclient
-	WINBIND_LIBS="-lwbclient"
-else
-	LIBWBCLIENT_STATIC=$LIBWBCLIENT_STATIC_TARGET
 fi
 
 if test x"$HAVE_WINBIND" = x"yes"; then
@@ -5746,20 +5888,6 @@
         AC_MSG_RESULT(no$winbind_no_reason)
 fi
 
-AC_CHECK_LIB(pthread, pthread_mutex_lock, [WINBIND_NSS_PTHREAD="-lpthread"
-			AC_DEFINE(HAVE_PTHREAD, 1, [whether pthread exists])])
-
-AC_SUBST(WINBIND_NSS_PTHREAD)
-AC_SUBST(WINBIND_NSS)
-AC_SUBST(WINBIND_WINS_NSS)
-AC_SUBST(WINBIND_NSS_LDSHFLAGS)
-AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
-AC_SUBST(WINBIND_NSS_EXTRA_LIBS)
-AC_SUBST(NSSSONAMEVERSIONSUFFIX)
-AC_SUBST(PAM_WINBIND_EXTRA_LIBS)
-
-AC_SUBST(WINBIND_KRB5_LOCATOR)
-
 # Solaris 10 does have new member in nss_XbyY_key
 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
 		AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
@@ -5800,7 +5928,7 @@
 # Check to see if we should use the included popt
 
 AC_ARG_WITH(included-popt,
-[AS_HELP_STRING([--with-included-popt], [use bundled popt library, not from system])],
+[  --with-included-popt    use bundled popt library, not from system],
 [
   case "$withval" in
 	yes)
@@ -5832,45 +5960,10 @@
 AC_SUBST(FLAGS1)
 
 #################################################
-# Check if user wants DNS service discovery support
-
-AC_ARG_ENABLE(dnssd,
-[AS_HELP_STRING([--enable-dnssd], [Enable DNS service discovery support (default=auto)])])
-
-AC_SUBST(DNSSD_LIBS)
-if test x"$enable_dnssd" != x"no"; then
-    have_dnssd_support=yes
-
-    AC_CHECK_HEADERS(dns_sd.h)
-    if test x"$ac_cv_header_dns_sd_h" != x"yes"; then
-	have_dnssd_support=no
-    fi
-
-    # On Darwin the DNSSD API is in libc, but on other platforms it's
-    # probably in -ldns_sd
-    AC_CHECK_FUNCS(DNSServiceRegister)
-    AC_CHECK_LIB_EXT(dns_sd, DNSSD_LIBS, DNSServiceRegister)
-    if test x"$ac_cv_func_DNSServiceRegister" != x"yes" -a \
-            x"$ac_cv_lib_ext_DNSServiceRegister" != x"yes"; then
-	have_dnssd_support=no
-    fi
-
-    if test x"$have_dnssd_support" = x"yes"; then
-	AC_DEFINE(WITH_DNSSD_SUPPORT, 1,
-		[Whether to enable DNS service discovery support])
-    else
-    	if test x"$enable_dnssd" = x"yes"; then
-	    AC_MSG_ERROR(DNS service discovery support not available)
-	fi
-    fi
-
-fi
-
-#################################################
 # Check to see if we should use the included iniparser
 
 AC_ARG_WITH(included-iniparser,
-[AS_HELP_STRING([--with-included-iniparser], [use bundled iniparser library, not from system])],
+[  --with-included-iniparser    use bundled iniparser library, not from system],
 [
   case "$withval" in
 	yes)
@@ -5903,36 +5996,33 @@
 
 
 
-# Checks for the vfs_fileid module
-# Start
-AC_CHECK_FUNC(getmntent)
+#################################################
+# Check if the user wants Python
 
-AC_CHECK_HEADERS(sys/statfs.h)
+# At the moment, you can use this to set which Python binary to link
+# against.  (Libraries built for Python2.2 can't be used by 2.1,
+# though they can coexist in different directories.)  In the future
+# this might make the Python stuff be built by default.
 
-AC_MSG_CHECKING([vfs_fileid: checking for statfs() and struct statfs.f_fsid)])
-AC_CACHE_VAL(vfsfileid_cv_statfs,[
-	     AC_TRY_RUN([
-		#include <sys/types.h>
-		#include <sys/statfs.h>
-		int main(void)
-		{
-			struct statfs fsd;
-			fsid_t fsid = fsd.f_fsid;
-			return statfs (".", &fsd);
-		}],
-		vfsfileid_cv_statfs=yes,
-		vfsfileid_cv_statfs=no,
-		vfsfileid_cv_statfs=cross)
-])
-AC_MSG_RESULT($vfsfileid_cv_statfs)
+# Defaulting python breaks the clean target if python isn't installed
 
-if test x"$ac_cv_func_getmntent" = x"yes" -a \
-	x"$vfsfileid_cv_statfs" = x"yes"; then
-	default_shared_modules="$default_shared_modules vfs_fileid"
-fi
-# End
-# Checks for the vfs_fileid module
+PYTHON=
 
+AC_ARG_WITH(python,
+[  --with-python=PYTHONNAME  build Python libraries],
+[ case "${withval-python}" in
+  yes)
+	PYTHON=python
+	EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS python_ext"
+	;;
+  no)
+	PYTHON=
+	;;
+  *)
+	PYTHON=${withval-python}
+	;;
+  esac ])
+AC_SUBST(PYTHON)
 
 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
 do
@@ -5949,9 +6039,9 @@
 	fi
 done
 
-dnl Always build these modules static
+dnl Always built these modules static
 MODULE_rpc_spoolss=STATIC
-MODULE_rpc_srvsvc=STATIC
+MODULE_rpc_srv=STATIC
 MODULE_idmap_tdb=STATIC
 MODULE_idmap_passdb=STATIC
 MODULE_idmap_nss=STATIC
@@ -5959,7 +6049,7 @@
 MODULE_nss_info_template=STATIC
 
 AC_ARG_WITH(static-modules,
-[AS_HELP_STRING([--with-static-modules=MODULES], [Comma-separated list of names of modules to statically link in])],
+[  --with-static-modules=MODULES  Comma-separated list of names of modules to statically link in],
 [ if test $withval; then
 	for i in `echo $withval | sed -e 's/,/ /g'`
 	do
@@ -5968,7 +6058,7 @@
 fi ])
 
 AC_ARG_WITH(shared-modules,
-[AS_HELP_STRING([--with-shared-modules=MODULES], [Comma-separated list of names of modules to build shared])],
+[  --with-shared-modules=MODULES  Comma-separated list of names of modules to build shared],
 [ if test $withval; then
 	for i in `echo $withval | sed -e 's/,/ /g'`
 	do
@@ -5983,33 +6073,31 @@
 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
 
 
-SMB_MODULE(rpc_lsarpc, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC)
-SMB_MODULE(rpc_winreg, \$(RPC_REG_OBJ), "bin/librpc_winreg.$SHLIBEXT", RPC)
-SMB_MODULE(rpc_initshutdown, \$(RPC_INITSHUTDOWN_OBJ), "bin/librpc_initshutdown.$SHLIBEXT", RPC)
-SMB_MODULE(rpc_dssetup, \$(RPC_DSSETUP_OBJ), "bin/librpc_dssetup.$SHLIBEXT", RPC)
+SMB_MODULE(rpc_lsa, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC)
+SMB_MODULE(rpc_reg, \$(RPC_REG_OBJ), "bin/librpc_reg.$SHLIBEXT", RPC)
+SMB_MODULE(rpc_lsa_ds, \$(RPC_LSA_DS_OBJ), "bin/librpc_lsa_ds.$SHLIBEXT", RPC)
 SMB_MODULE(rpc_wkssvc, \$(RPC_WKS_OBJ), "bin/librpc_wkssvc.$SHLIBEXT", RPC)
-SMB_MODULE(rpc_svcctl2, \$(RPC_SVCCTL_OBJ), "bin/librpc_svcctl2.$SHLIBEXT", RPC)
-SMB_MODULE(rpc_ntsvcs2, \$(RPC_NTSVCS_OBJ), "bin/librpc_ntsvcs2.$SHLIBEXT", RPC)
-SMB_MODULE(rpc_netlogon, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC)
+SMB_MODULE(rpc_svcctl, \$(RPC_SVCCTL_OBJ), "bin/librpc_svcctl.$SHLIBEXT", RPC)
+SMB_MODULE(rpc_ntsvcs, \$(RPC_NTSVCS_OBJ), "bin/librpc_ntsvcs.$SHLIBEXT", RPC)
+SMB_MODULE(rpc_net, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC)
 SMB_MODULE(rpc_netdfs, \$(RPC_DFS_OBJ), "bin/librpc_netdfs.$SHLIBEXT", RPC)
-SMB_MODULE(rpc_srvsvc, \$(RPC_SVC_OBJ), "bin/librpc_svcsvc.$SHLIBEXT", RPC)
+SMB_MODULE(rpc_srv, \$(RPC_SVC_OBJ), "bin/librpc_svc.$SHLIBEXT", RPC)
 SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC)
-SMB_MODULE(rpc_eventlog2, \$(RPC_EVENTLOG_OBJ), "bin/librpc_eventlog2.$SHLIBEXT", RPC)
+SMB_MODULE(rpc_eventlog, \$(RPC_EVENTLOG_OBJ), "bin/librpc_eventlog.$SHLIBEXT", RPC)
 SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC)
-SMB_MODULE(rpc_rpcecho, \$(RPC_ECHO_OBJ), "bin/librpc_rpcecho.$SHLIBEXT", RPC)
+SMB_MODULE(rpc_echo, \$(RPC_ECHO_OBJ), "bin/librpc_echo.$SHLIBEXT", RPC)
 SMB_SUBSYSTEM(RPC,smbd/server.o)
 
-SMB_MODULE(idmap_ldap, winbindd/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
-SMB_MODULE(idmap_tdb, winbindd/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
-SMB_MODULE(idmap_tdb2, winbindd/idmap_tdb2.o, "bin/tdb2.$SHLIBEXT", IDMAP)
-SMB_MODULE(idmap_passdb, winbindd/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
-SMB_MODULE(idmap_nss, winbindd/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
-SMB_MODULE(idmap_rid, winbindd/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
-SMB_MODULE(idmap_ad, winbindd/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
-SMB_SUBSYSTEM(IDMAP, winbindd/idmap.o)
+SMB_MODULE(idmap_ldap, nsswitch/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
+SMB_MODULE(idmap_tdb, nsswitch/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
+SMB_MODULE(idmap_passdb, nsswitch/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
+SMB_MODULE(idmap_nss, nsswitch/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
+SMB_MODULE(idmap_rid, nsswitch/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
+SMB_MODULE(idmap_ad, nsswitch/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
+SMB_SUBSYSTEM(IDMAP, nsswitch/idmap.o)
 
-SMB_MODULE(nss_info_template, winbindd/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
-SMB_SUBSYSTEM(NSS_INFO, winbindd/nss_info.o)
+SMB_MODULE(nss_info_template, nsswitch/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
+SMB_SUBSYSTEM(NSS_INFO, nsswitch/nss_info.o)
 
 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
@@ -6038,9 +6126,7 @@
 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
-SMB_MODULE(vfs_shadow_copy2, \$(VFS_SHADOW_COPY2_OBJ), "bin/shadow_copy2.$SHLIBEXT", VFS)
 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
-SMB_MODULE(vfs_xattr_tdb, \$(VFS_XATTR_TDB_OBJ), "bin/xattr_tdb.$SHLIBEXT", VFS)
 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
@@ -6049,21 +6135,13 @@
 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
-SMB_MODULE(vfs_streams_xattr, \$(VFS_STREAMS_XATTR_OBJ), "bin/streams_xattr.$SHLIBEXT", VFS)
-SMB_MODULE(vfs_streams_depot, \$(VFS_STREAMS_DEPOT_OBJ), "bin/streams_depot.$SHLIBEXT", VFS)
 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
 SMB_MODULE(vfs_readahead, \$(VFS_READAHEAD_OBJ), "bin/readahead.$SHLIBEXT", VFS)
-SMB_MODULE(vfs_tsmsm, \$(VFS_TSMSM_OBJ), "bin/tsmsm.$SHLIBEXT", VFS)
-SMB_MODULE(vfs_fileid, \$(VFS_FILEID_OBJ), "bin/fileid.$SHLIBEXT", VFS)
-SMB_MODULE(vfs_aio_fork, \$(VFS_AIO_FORK_OBJ), "bin/aio_fork.$SHLIBEXT", VFS)
-SMB_MODULE(vfs_syncops, \$(VFS_SYNCOPS_OBJ), "bin/syncops.$SHLIBEXT", VFS)
-SMB_MODULE(vfs_zfsacl, \$(VFS_ZFSACL_OBJ), "bin/zfsacl.$SHLIBEXT", VFS)
 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
 
-
 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
 
 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
@@ -6181,9 +6259,6 @@
 if test x"$with_dnsupdate_support" != x"no"; then
     AC_MSG_RESULT([    UUID_LIBS = $UUID_LIBS])
 fi
-if test x"$have_dnssd_support" != x"no"; then
-    AC_MSG_RESULT([    DNSSD_LIBS = $DNSSD_LIBS])
-fi
 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
 
 #################################################
@@ -6195,25 +6270,15 @@
 	   AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
 	   AC_MSG_WARN([cannot run when cross-compiling]))
 
-dnl Merge in developer cflags from now on
-AC_SUBST(DEVELOPER_CFLAGS)
-if test x"$krb5_developer" = x"yes" -o x"$developer" = x"yes"; then
-    CFLAGS="${CFLAGS} \$(DEVELOPER_CFLAGS)"
-fi
+builddir=`pwd`
+AC_SUBST(builddir)
 
 # Stuff the smbd-only libraries at the end of the smbd link
 # path (if we have them).
 SMBD_LIBS="$samba_dmapi_libs"
 AC_SUBST(SMBD_LIBS)
 
-AC_OUTPUT(Makefile library-versions
-	  script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh
-	  lib/netapi/examples/Makefile
-	  pkgconfig/smbclient.pc
-	  pkgconfig/wbclient.pc
-	  pkgconfig/netapi.pc
-	  pkgconfig/smbsharemodes.pc
-	  )
+AC_OUTPUT(include/stamp-h Makefile script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh)
 
 #################################################
 # Print very concise instructions on building/use

Modified: branches/samba/upstream/source/dynconfig.c
===================================================================
--- branches/samba/upstream/source/dynconfig.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/dynconfig.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,21 +1,21 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    Copyright (C) 2001 by Martin Pool <mbp at samba.org>
    Copyright (C) 2003 by Jim McDonough <jmcd at us.ibm.com>
-   Copyright (C) 2007 by Jeremy Allison <jra at samba.org>
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -40,280 +40,33 @@
  * table?  There's kind of a chicken-and-egg situation there...
  **/
 
-#if 0
-static char const *dyn_SBINDIR = SBINDIR;
-static char const *dyn_BINDIR = BINDIR;
-static char const *dyn_SWATDIR = SWATDIR;
-#endif
+char const *dyn_SBINDIR = SBINDIR,
+	*dyn_BINDIR = BINDIR,
+	*dyn_SWATDIR = SWATDIR;
 
-#define DEFINE_DYN_CONFIG_PARAM(name) \
-static char *dyn_##name; \
-\
- const char *get_dyn_##name(void) \
-{\
-	if (dyn_##name == NULL) {\
-		return name;\
-	}\
-	return dyn_##name;\
-}\
-\
- const char *set_dyn_##name(const char *newpath) \
-{\
-	if (dyn_##name) {\
-		SAFE_FREE(dyn_##name);\
-	}\
-	dyn_##name = SMB_STRDUP(newpath);\
-	return dyn_##name;\
-}\
-\
- bool is_default_dyn_##name(void) \
-{\
-	return (dyn_##name == NULL);\
-}
+pstring dyn_CONFIGFILE = CONFIGFILE; /**< Location of smb.conf file. **/
 
-DEFINE_DYN_CONFIG_PARAM(SBINDIR)
-DEFINE_DYN_CONFIG_PARAM(BINDIR)
-DEFINE_DYN_CONFIG_PARAM(SWATDIR)
-DEFINE_DYN_CONFIG_PARAM(CONFIGFILE) /**< Location of smb.conf file. **/
-DEFINE_DYN_CONFIG_PARAM(LOGFILEBASE) /** Log file directory. **/
-DEFINE_DYN_CONFIG_PARAM(LMHOSTSFILE) /** Statically configured LanMan hosts. **/
-DEFINE_DYN_CONFIG_PARAM(CODEPAGEDIR)
-DEFINE_DYN_CONFIG_PARAM(LIBDIR)
-DEFINE_DYN_CONFIG_PARAM(SHLIBEXT)
-DEFINE_DYN_CONFIG_PARAM(LOCKDIR)
-DEFINE_DYN_CONFIG_PARAM(PIDDIR)
-DEFINE_DYN_CONFIG_PARAM(SMB_PASSWD_FILE)
-DEFINE_DYN_CONFIG_PARAM(PRIVATE_DIR)
-
-#if 0
-static char *dyn_CONFIGFILE; /**< Location of smb.conf file. **/
-
-const char *get_dyn_CONFIGFILE(void)
-{
-	if (dyn_CONFIGFILE == NULL) {
-		return CONFIGFILE;
-	}
-	return dyn_CONFIGFILE;
-}
-
-const char *set_dyn_CONFIGFILE(const char *newpath)
-{
-	if (dyn_CONFIGFILE) {
-		SAFE_FREE(dyn_CONFIGFILE);
-	}
-	dyn_CONFIGFILE = SMB_STRDUP(newpath);
-	return dyn_CONFIGFILE;
-}
-
 /** Log file directory. **/
-static char *dyn_LOGFILEBASE;
+pstring dyn_LOGFILEBASE = LOGFILEBASE;
 
-const char *get_dyn_LOGFILEBASE(void)
-{
-	if (dyn_LOGFILEBASE == NULL) {
-		return LOGFILEBASE;
-	}
-	return dyn_LOGFILEBASE;
-}
-
-const char *set_dyn_LOGFILEBASE(const char *newpath)
-{
-	if (dyn_LOGFILEBASE) {
-		SAFE_FREE(dyn_LOGFILEBASE);
-	}
-	dyn_LOGFILEBASE = SMB_STRDUP(newpath);
-	return dyn_LOGFILEBASE;
-}
-
 /** Statically configured LanMan hosts. **/
-static char *dyn_LMHOSTSFILE;
+pstring dyn_LMHOSTSFILE = LMHOSTSFILE;
 
-const char *get_dyn_LMHOSTSFILE(void)
-{
-	if (dyn_LMHOSTSFILE == NULL) {
-		return LMHOSTSFILE;
-	}
-	return dyn_LMHOSTSFILE;
-}
-
-const char *set_dyn_LMHOSTSFILE(const char *newpath)
-{
-	if (dyn_LMHOSTSFILE) {
-		SAFE_FREE(dyn_LMHOSTSFILE);
-	}
-	dyn_LMHOSTSFILE = SMB_STRDUP(newpath);
-	return dyn_LMHOSTSFILE;
-}
-
 /**
- * @brief Samba data directory.
- *
- * @sa data_path() to get the path to a file inside the CODEPAGEDIR.
- **/
-static char *dyn_CODEPAGEDIR;
-
-const char *get_dyn_CODEPAGEDIR(void)
-{
-	if (dyn_CODEPAGEDIR == NULL) {
-		return CODEPAGEDIR;
-	}
-	return dyn_CODEPAGEDIR;
-}
-
-const char *set_dyn_CODEPAGEDIR(const char *newpath)
-{
-	if (dyn_CODEPAGEDIR) {
-		SAFE_FREE(dyn_CODEPAGEDIR);
-	}
-	dyn_CODEPAGEDIR = SMB_STRDUP(newpath);
-	return dyn_CODEPAGEDIR;
-}
-
-/**
  * @brief Samba library directory.
  *
  * @sa lib_path() to get the path to a file inside the LIBDIR.
  **/
-static char *dyn_LIBDIR;
+pstring dyn_LIBDIR = LIBDIR;
+fstring dyn_SHLIBEXT = SHLIBEXT;
 
-const char *get_dyn_LIBDIR(void)
-{
-	if (dyn_LIBDIR == NULL) {
-		return LIBDIR;
-	}
-	return dyn_CODEPAGEDIR;
-}
-
-const char *set_dyn_LIBDIR(const char *newpath)
-{
-	if (dyn_LIBDIR) {
-		SAFE_FREE(dyn_LIBDIR);
-	}
-	dyn_LIBDIR = SMB_STRDUP(newpath);
-	return dyn_LIBDIR;
-}
-
-static char *dyn_SHLIBEXT;
-
-const char *get_dyn_SHLIBEXT(void)
-{
-	if (dyn_SHLIBEXT == NULL) {
-		return SHLIBEXT;
-	}
-	return dyn_SHLIBEXT;
-}
-
-const char *set_dyn_SHLIBEXT(const char *newpath)
-{
-	if (dyn_SHLIBEXT) {
-		SAFE_FREE(dyn_SHLIBEXT);
-	}
-	dyn_SHLIBEXT = SMB_STRDUP(newpath);
-	return dyn_SHLIBEXT;
-}
-
 /**
  * @brief Directory holding lock files.
  *
  * Not writable, but used to set a default in the parameter table.
  **/
+pstring dyn_LOCKDIR = LOCKDIR;
+pstring dyn_PIDDIR  = PIDDIR;
 
-static char *dyn_LOCKDIR;
-
-const char *get_dyn_LOCKDIR(void)
-{
-	if (dyn_LOCKDIR == NULL) {
-		return LOCKDIR;
-	}
-	return dyn_LOCKDIR;
-}
-
-const char *set_dyn_LOCKDIR(const char *newpath)
-{
-	if (dyn_LOCKDIR) {
-		SAFE_FREE(dyn_LOCKDIR);
-	}
-	dyn_LOCKDIR = SMB_STRDUP(newpath);
-	return dyn_LOCKDIR;
-}
-
-static char *dyn_PIDDIR;
-
-const char *get_dyn_PIDDIR(void)
-{
-	if (dyn_PIDDIR == NULL) {
-		return PIDDIR;
-	}
-	return dyn_PIDDIR;
-}
-
-const char *set_dyn_PIDDIR(const char *newpath)
-{
-	if (dyn_PIDDIR) {
-		SAFE_FREE(dyn_PIDDIR);
-	}
-	dyn_PIDDIR = SMB_STRDUP(newpath);
-	return dyn_PIDDIR;
-}
-
-static char *dyn_SMB_PASSWD_FILE;
-
-const char *get_dyn_SMB_PASSWD_FILE(void)
-{
-	if (dyn_SMB_PASSWD_FILE == NULL) {
-		return SMB_PASSWD_FILE;
-	}
-	return dyn_SMB_PASSWD_FILE;
-}
-
-const char *set_dyn_SMB_PASSWD_FILE(const char *newpath)
-{
-	if (dyn_SMB_PASSWD_FILE) {
-		SAFE_FREE(dyn_SMB_PASSWD_FILE);
-	}
-	dyn_SMB_PASSWD_FILE = SMB_STRDUP(newpath);
-	return dyn_SMB_PASSWD_FILE;
-}
-
-static char *dyn_PRIVATE_DIR;
-
-const char *get_dyn_PRIVATE_DIR(void)
-{
-	if (dyn_PRIVATE_DIR == NULL) {
-		return PRIVATE_DIR;
-	}
-	return dyn_PRIVATE_DIR;
-}
-
-const char *set_dyn_PRIVATE_DIR(const char *newpath)
-{
-	if (dyn_PRIVATE_DIR) {
-		SAFE_FREE(dyn_PRIVATE_DIR);
-	}
-	dyn_PRIVATE_DIR = SMB_STRDUP(newpath);
-	return dyn_PRIVATE_DIR;
-}
-#endif
-
-/* In non-FHS mode, these should be configurable using 'lock dir =';
-   but in FHS mode, they are their own directory.  Implement as wrapper
-   functions so that everything can still be kept in dynconfig.c.
- */
-
-const char *get_dyn_STATEDIR(void)
-{
-#ifdef FHS_COMPATIBLE
-	return STATEDIR;
-#else
-	return lp_lockdir();
-#endif
-}
-
-const char *get_dyn_CACHEDIR(void)
-{
-#ifdef FHS_COMPATIBLE
-	return CACHEDIR;
-#else
-	return lp_lockdir();
-#endif
-}
+pstring dyn_SMB_PASSWD_FILE = SMB_PASSWD_FILE;
+pstring dyn_PRIVATE_DIR = PRIVATE_DIR;

Modified: branches/samba/upstream/source/groupdb/mapping.c
===================================================================
--- branches/samba/upstream/source/groupdb/mapping.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/groupdb/mapping.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -17,47 +17,13 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
 #include "groupdb/mapping.h"
 
-static const struct mapping_backend *backend;
-
-/*
-  initialise a group mapping backend
- */
-static bool init_group_mapping(void)
-{
-	const char *backend_string;
-
-	if (backend != NULL) {
-		/* already initialised */
-		return True;
-	}
-
-	/*
-	 * default to using the ldb backend. This parameter should
-	 * disappear in future versions of Samba3.
-	 *
-	 * But it's needed for cluster setups, because it's
-	 * not yet possible to distribute a ldb inside a cluster.
-	 */
-	backend_string = lp_parm_const_string(-1, "groupdb", "backend", "ldb");
-
-	if (strcmp(backend_string, "ldb") == 0) {
-		backend = groupdb_ldb_init();
-	} else if (strcmp(backend_string, "tdb") == 0) {
-		backend = groupdb_tdb_init();
-	} else {
-		DEBUG(0,("Unknown groupdb backend '%s'\n", backend_string));
-		smb_panic("Unknown groupdb backend");
-	}
-
-	return backend != NULL;
-}
-
 /****************************************************************************
 initialise first time the mapping list
 ****************************************************************************/
@@ -83,6 +49,70 @@
 	return pdb_add_group_mapping_entry(&map);
 }
 
+/****************************************************************************
+ Map a unix group to a newly created mapping
+****************************************************************************/
+NTSTATUS map_unix_group(const struct group *grp, GROUP_MAP *pmap)
+{
+	NTSTATUS status;
+	GROUP_MAP map;
+	const char *grpname, *dom, *name;
+	uint32 rid;
+
+	if (pdb_getgrgid(&map, grp->gr_gid)) {
+		return NT_STATUS_GROUP_EXISTS;
+	}
+
+	map.gid = grp->gr_gid;
+	grpname = grp->gr_name;
+
+	if (lookup_name(tmp_talloc_ctx(), grpname, LOOKUP_NAME_ISOLATED,
+			&dom, &name, NULL, NULL)) {
+
+		const char *tmp = talloc_asprintf(
+			tmp_talloc_ctx(), "Unix Group %s", grp->gr_name);
+
+		DEBUG(5, ("%s exists as %s\\%s, retrying as \"%s\"\n",
+			  grpname, dom, name, tmp));
+		grpname = tmp;
+	}
+
+	if (lookup_name(tmp_talloc_ctx(), grpname, LOOKUP_NAME_ISOLATED,
+			NULL, NULL, NULL, NULL)) {
+		DEBUG(3, ("\"%s\" exists, can't map it\n", grp->gr_name));
+		return NT_STATUS_GROUP_EXISTS;
+	}
+
+	fstrcpy(map.nt_name, grpname);
+
+	if (pdb_rid_algorithm()) {
+		rid = algorithmic_pdb_gid_to_group_rid( grp->gr_gid );
+	} else {
+		if (!pdb_new_rid(&rid)) {
+			DEBUG(3, ("Could not get a new RID for %s\n",
+				  grp->gr_name));
+			return NT_STATUS_ACCESS_DENIED;
+		}
+	}
+
+	sid_compose(&map.sid, get_global_sam_sid(), rid);
+	map.sid_name_use = SID_NAME_DOM_GRP;
+	fstrcpy(map.comment, talloc_asprintf(tmp_talloc_ctx(), "Unix Group %s",
+					     grp->gr_name));
+
+	status = pdb_add_group_mapping_entry(&map);
+	if (NT_STATUS_IS_OK(status)) {
+		*pmap = map;
+	}
+	return status;
+}
+
+
+
+
+
+
+
 static NTSTATUS alias_memberships(const DOM_SID *members, size_t num_members,
 				  DOM_SID **sids, size_t *num)
 {
@@ -92,7 +122,7 @@
 	*sids = NULL;
 
 	for (i=0; i<num_members; i++) {
-		NTSTATUS status = backend->one_alias_membership(&members[i], sids, num);
+		NTSTATUS status = one_alias_membership(&members[i], sids, num);
 		if (!NT_STATUS_IS_OK(status))
 			return status;
 	}
@@ -119,10 +149,10 @@
 
 /* get a domain group from it's SID */
 
-bool get_domain_group_from_sid(DOM_SID sid, GROUP_MAP *map)
+BOOL get_domain_group_from_sid(DOM_SID sid, GROUP_MAP *map)
 {
 	struct group *grp;
-	bool ret;
+	BOOL ret;
 	
 	if(!init_group_mapping()) {
 		DEBUG(0,("failed to initialize group mapping\n"));
@@ -189,28 +219,17 @@
 
 int smb_create_group(const char *unix_group, gid_t *new_gid)
 {
-	char *add_script = NULL;
+	pstring add_script;
 	int 	ret = -1;
 	int 	fd = 0;
-
+	
 	*new_gid = 0;
 
 	/* defer to scripts */
-
+	
 	if ( *lp_addgroup_script() ) {
-		TALLOC_CTX *ctx = talloc_tos();
-
-		add_script = talloc_strdup(ctx,
-					lp_addgroup_script());
-		if (!add_script) {
-			return -1;
-		}
-		add_script = talloc_string_sub(ctx,
-				add_script, "%g", unix_group);
-		if (!add_script) {
-			return -1;
-		}
-
+		pstrcpy(add_script, lp_addgroup_script());
+		pstring_sub(add_script, "%g", unix_group);
 		ret = smbrun(add_script, &fd);
 		DEBUG(ret ? 0 : 3,("smb_create_group: Running the command `%s' gave %d\n",add_script,ret));
 		if (ret == 0) {
@@ -226,7 +245,7 @@
 			if (read(fd, output, sizeof(output)) > 0) {
 				*new_gid = (gid_t)strtoul(output, NULL, 10);
 			}
-
+			
 			close(fd);
 		}
 
@@ -238,8 +257,8 @@
 		if (grp != NULL)
 			*new_gid = grp->gr_gid;
 	}
-
-	return ret;
+			
+	return ret;	
 }
 
 /****************************************************************************
@@ -248,24 +267,14 @@
 
 int smb_delete_group(const char *unix_group)
 {
-	char *del_script = NULL;
-	int ret = -1;
+	pstring del_script;
+	int ret;
 
 	/* defer to scripts */
-
+	
 	if ( *lp_delgroup_script() ) {
-		TALLOC_CTX *ctx = talloc_tos();
-
-		del_script = talloc_strdup(ctx,
-				lp_delgroup_script());
-		if (!del_script) {
-			return -1;
-		}
-		del_script = talloc_string_sub(ctx,
-				del_script, "%g", unix_group);
-		if (!del_script) {
-			return -1;
-		}
+		pstrcpy(del_script, lp_delgroup_script());
+		pstring_sub(del_script, "%g", unix_group);
 		ret = smbrun(del_script,NULL);
 		DEBUG(ret ? 0 : 3,("smb_delete_group: Running the command `%s' gave %d\n",del_script,ret));
 		if (ret == 0) {
@@ -273,36 +282,24 @@
 		}
 		return ret;
 	}
-
+		
 	return -1;
 }
 
 /****************************************************************************
  Set a user's primary UNIX group.
 ****************************************************************************/
-
 int smb_set_primary_group(const char *unix_group, const char* unix_user)
 {
-	char *add_script = NULL;
-	int ret = -1;
+	pstring add_script;
+	int ret;
 
 	/* defer to scripts */
-
+	
 	if ( *lp_setprimarygroup_script() ) {
-		TALLOC_CTX *ctx = talloc_tos();
-
-		add_script = talloc_strdup(ctx,
-				lp_setprimarygroup_script());
-		if (!add_script) {
-			return -1;
-		}
-		add_script = talloc_all_string_sub(ctx,
-					add_script,
-					"%g",
-					unix_group);
-		if (!add_script) {
-			return -1;
-		}
+		pstrcpy(add_script, lp_setprimarygroup_script());
+		all_string_sub(add_script, "%g", unix_group, sizeof(add_script));
+		all_string_sub(add_script, "%u", unix_user, sizeof(add_script));
 		ret = smbrun(add_script,NULL);
 		flush_pwnam_cache();
 		DEBUG(ret ? 0 : 3,("smb_set_primary_group: "
@@ -322,29 +319,15 @@
 
 int smb_add_user_group(const char *unix_group, const char *unix_user)
 {
-	char *add_script = NULL;
-	int ret = -1;
+	pstring add_script;
+	int ret;
 
 	/* defer to scripts */
-
+	
 	if ( *lp_addusertogroup_script() ) {
-		TALLOC_CTX *ctx = talloc_tos();
-
-		add_script = talloc_strdup(ctx,
-				lp_addusertogroup_script());
-		if (!add_script) {
-			return -1;
-		}
-		add_script = talloc_string_sub(ctx,
-				add_script, "%g", unix_group);
-		if (!add_script) {
-			return -1;
-		}
-		add_script = talloc_string_sub(ctx,
-				add_script, "%u", unix_user);
-		if (!add_script) {
-			return -1;
-		}
+		pstrcpy(add_script, lp_addusertogroup_script());
+		pstring_sub(add_script, "%g", unix_group);
+		pstring_sub(add_script, "%u", unix_user);
 		ret = smbrun(add_script,NULL);
 		DEBUG(ret ? 0 : 3,("smb_add_user_group: Running the command `%s' gave %d\n",add_script,ret));
 		if (ret == 0) {
@@ -352,7 +335,7 @@
 		}
 		return ret;
 	}
-
+	
 	return -1;
 }
 
@@ -362,29 +345,15 @@
 
 int smb_delete_user_group(const char *unix_group, const char *unix_user)
 {
-	char *del_script = NULL;
-	int ret = -1;
+	pstring del_script;
+	int ret;
 
 	/* defer to scripts */
-
+	
 	if ( *lp_deluserfromgroup_script() ) {
-		TALLOC_CTX *ctx = talloc_tos();
-
-		del_script = talloc_strdup(ctx,
-				lp_deluserfromgroup_script());
-		if (!del_script) {
-			return -1;
-		}
-		del_script = talloc_string_sub(ctx,
-				del_script, "%g", unix_group);
-		if (!del_script) {
-			return -1;
-		}
-		del_script = talloc_string_sub(ctx,
-				del_script, "%u", unix_user);
-		if (!del_script) {
-			return -1;
-		}
+		pstrcpy(del_script, lp_deluserfromgroup_script());
+		pstring_sub(del_script, "%g", unix_group);
+		pstring_sub(del_script, "%u", unix_user);
 		ret = smbrun(del_script,NULL);
 		DEBUG(ret ? 0 : 3,("smb_delete_user_group: Running the command `%s' gave %d\n",del_script,ret));
 		if (ret == 0) {
@@ -392,7 +361,7 @@
 		}
 		return ret;
 	}
-
+	
 	return -1;
 }
 
@@ -400,82 +369,70 @@
 NTSTATUS pdb_default_getgrsid(struct pdb_methods *methods, GROUP_MAP *map,
 				 DOM_SID sid)
 {
-	if (!init_group_mapping()) {
-		DEBUG(0,("failed to initialize group mapping\n"));
-		return NT_STATUS_UNSUCCESSFUL;
-	}
-	return backend->get_group_map_from_sid(sid, map) ?
+	return get_group_map_from_sid(sid, map) ?
 		NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
 }
 
 NTSTATUS pdb_default_getgrgid(struct pdb_methods *methods, GROUP_MAP *map,
 				 gid_t gid)
 {
-	if (!init_group_mapping()) {
-		DEBUG(0,("failed to initialize group mapping\n"));
-		return NT_STATUS_UNSUCCESSFUL;
-	}
-	return backend->get_group_map_from_gid(gid, map) ?
+	return get_group_map_from_gid(gid, map) ?
 		NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
 }
 
 NTSTATUS pdb_default_getgrnam(struct pdb_methods *methods, GROUP_MAP *map,
 				 const char *name)
 {
-	if (!init_group_mapping()) {
-		DEBUG(0,("failed to initialize group mapping\n"));
-		return NT_STATUS_UNSUCCESSFUL;
-	}
-	return backend->get_group_map_from_ntname(name, map) ?
+	return get_group_map_from_ntname(name, map) ?
 		NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
 }
 
 NTSTATUS pdb_default_add_group_mapping_entry(struct pdb_methods *methods,
 						GROUP_MAP *map)
 {
-	if (!init_group_mapping()) {
-		DEBUG(0,("failed to initialize group mapping\n"));
-		return NT_STATUS_UNSUCCESSFUL;
-	}
-	return backend->add_mapping_entry(map, TDB_INSERT) ?
+	return add_mapping_entry(map, TDB_INSERT) ?
 		NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
 }
 
 NTSTATUS pdb_default_update_group_mapping_entry(struct pdb_methods *methods,
 						   GROUP_MAP *map)
 {
-	if (!init_group_mapping()) {
-		DEBUG(0,("failed to initialize group mapping\n"));
-		return NT_STATUS_UNSUCCESSFUL;
-	}
-	return backend->add_mapping_entry(map, TDB_REPLACE) ?
+	return add_mapping_entry(map, TDB_REPLACE) ?
 		NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
 }
 
 NTSTATUS pdb_default_delete_group_mapping_entry(struct pdb_methods *methods,
 						   DOM_SID sid)
 {
-	if (!init_group_mapping()) {
-		DEBUG(0,("failed to initialize group mapping\n"));
-		return NT_STATUS_UNSUCCESSFUL;
-	}
-	return backend->group_map_remove(&sid) ?
+	return group_map_remove(&sid) ?
 		NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
 }
 
 NTSTATUS pdb_default_enum_group_mapping(struct pdb_methods *methods,
 					   const DOM_SID *sid, enum lsa_SidType sid_name_use,
 					   GROUP_MAP **pp_rmap, size_t *p_num_entries,
-					   bool unix_only)
+					   BOOL unix_only)
 {
-	if (!init_group_mapping()) {
-		DEBUG(0,("failed to initialize group mapping\n"));
-		return NT_STATUS_UNSUCCESSFUL;
-	}
-	return backend->enum_group_mapping(sid, sid_name_use, pp_rmap, p_num_entries, unix_only) ?
+	return enum_group_mapping(sid, sid_name_use, pp_rmap, p_num_entries, unix_only) ?
 		NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
 }
 
+NTSTATUS pdb_default_find_alias(struct pdb_methods *methods,
+				const char *name, DOM_SID *sid)
+{
+	GROUP_MAP map;
+
+	if (!pdb_getgrnam(&map, name))
+		return NT_STATUS_NO_SUCH_ALIAS;
+
+	if ((map.sid_name_use != SID_NAME_WKN_GRP) &&
+	    (map.sid_name_use != SID_NAME_ALIAS))
+		return NT_STATUS_OBJECT_TYPE_MISMATCH;
+
+	sid_copy(sid, &map.sid);
+	return NT_STATUS_OK;
+}
+
 NTSTATUS pdb_default_create_alias(struct pdb_methods *methods,
 				  const char *name, uint32 *rid)
 {
@@ -483,7 +440,7 @@
 	enum lsa_SidType type;
 	uint32 new_rid;
 	gid_t gid;
-	bool exists;
+	BOOL exists;
 	GROUP_MAP map;
 	TALLOC_CTX *mem_ctx;
 	NTSTATUS status;
@@ -556,7 +513,7 @@
 	if ((map.sid_name_use != SID_NAME_ALIAS) &&
 	    (map.sid_name_use != SID_NAME_WKN_GRP)) {
 		DEBUG(2, ("%s is a %s, expected an alias\n",
-			  sid_string_dbg(sid),
+			  sid_string_static(sid),
 			  sid_type_lookup(map.sid_name_use)));
 		return NT_STATUS_NO_SUCH_ALIAS;
 	}
@@ -585,32 +542,20 @@
 NTSTATUS pdb_default_add_aliasmem(struct pdb_methods *methods,
 				  const DOM_SID *alias, const DOM_SID *member)
 {
-	if (!init_group_mapping()) {
-		DEBUG(0,("failed to initialize group mapping\n"));
-		return NT_STATUS_UNSUCCESSFUL;
-	}
-	return backend->add_aliasmem(alias, member);
+	return add_aliasmem(alias, member);
 }
 
 NTSTATUS pdb_default_del_aliasmem(struct pdb_methods *methods,
 				  const DOM_SID *alias, const DOM_SID *member)
 {
-	if (!init_group_mapping()) {
-		DEBUG(0,("failed to initialize group mapping\n"));
-		return NT_STATUS_UNSUCCESSFUL;
-	}
-	return backend->del_aliasmem(alias, member);
+	return del_aliasmem(alias, member);
 }
 
 NTSTATUS pdb_default_enum_aliasmem(struct pdb_methods *methods,
 				   const DOM_SID *alias, DOM_SID **pp_members,
 				   size_t *p_num_members)
 {
-	if (!init_group_mapping()) {
-		DEBUG(0,("failed to initialize group mapping\n"));
-		return NT_STATUS_UNSUCCESSFUL;
-	}
-	return backend->enum_aliasmem(alias, pp_members, p_num_members);
+	return enum_aliasmem(alias, pp_members, p_num_members);
 }
 
 NTSTATUS pdb_default_alias_memberships(struct pdb_methods *methods,
@@ -625,11 +570,6 @@
 	size_t i, num_alias_sids;
 	NTSTATUS result;
 
-	if (!init_group_mapping()) {
-		DEBUG(0,("failed to initialize group mapping\n"));
-		return NT_STATUS_UNSUCCESSFUL;
-	}
-
 	alias_sids = NULL;
 	num_alias_sids = 0;
 
@@ -705,7 +645,7 @@
 NTSTATUS pdb_nop_enum_group_mapping(struct pdb_methods *methods,
 					   enum lsa_SidType sid_name_use,
 					   GROUP_MAP **rmap, size_t *num_entries,
-					   bool unix_only)
+					   BOOL unix_only)
 {
 	return NT_STATUS_UNSUCCESSFUL;
 }
@@ -713,10 +653,10 @@
 /****************************************************************************
  These need to be redirected through pdb_interface.c
 ****************************************************************************/
-bool pdb_get_dom_grp_info(const DOM_SID *sid, struct acct_info *info)
+BOOL pdb_get_dom_grp_info(const DOM_SID *sid, struct acct_info *info)
 {
 	GROUP_MAP map;
-	bool res;
+	BOOL res;
 
 	become_root();
 	res = get_domain_group_from_sid(*sid, &map);
@@ -731,7 +671,7 @@
 	return True;
 }
 
-bool pdb_set_dom_grp_info(const DOM_SID *sid, const struct acct_info *info)
+BOOL pdb_set_dom_grp_info(const DOM_SID *sid, const struct acct_info *info)
 {
 	GROUP_MAP map;
 

Modified: branches/samba/upstream/source/groupdb/mapping.h
===================================================================
--- branches/samba/upstream/source/groupdb/mapping.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/groupdb/mapping.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -2,7 +2,6 @@
 #define DATABASE_VERSION_V2 2 /* le format. */
 
 #define GROUP_PREFIX "UNIXGROUP/"
-#define GROUP_PREFIX_LEN 10
 
 /* Alias memberships are stored reverse, as memberships. The performance
  * critical operation is to determine the aliases a SID is member of, not
@@ -10,24 +9,18 @@
  * hanging of the member as key.
  */
 #define MEMBEROF_PREFIX "MEMBEROF/"
-#define MEMBEROF_PREFIX_LEN 9
 
-/*
-  groupdb mapping backend abstraction
- */
-struct mapping_backend {
-	bool (*init_group_mapping)(void);
-	bool (*add_mapping_entry)(GROUP_MAP *map, int flag);
-	bool (*get_group_map_from_sid)(DOM_SID sid, GROUP_MAP *map);
-	bool (*get_group_map_from_gid)(gid_t gid, GROUP_MAP *map);
-	bool (*get_group_map_from_ntname)(const char *name, GROUP_MAP *map);
-	bool (*group_map_remove)(const DOM_SID *sid);
-	bool (*enum_group_mapping)(const DOM_SID *domsid, enum lsa_SidType sid_name_use, 
-				   GROUP_MAP **pp_rmap,
-				   size_t *p_num_entries, bool unix_only);
-	NTSTATUS (*one_alias_membership)(const DOM_SID *member,
-					 DOM_SID **sids, size_t *num);
-	NTSTATUS (*add_aliasmem)(const DOM_SID *alias, const DOM_SID *member);
-	NTSTATUS (*del_aliasmem)(const DOM_SID *alias, const DOM_SID *member);
-	NTSTATUS (*enum_aliasmem)(const DOM_SID *alias, DOM_SID **sids, size_t *num);
-};
+/* internal prototypes */
+BOOL enum_group_mapping(const DOM_SID *domsid, enum lsa_SidType sid_name_use, GROUP_MAP **pp_rmap,
+			size_t *p_num_entries, BOOL unix_only);
+BOOL group_map_remove(const DOM_SID *sid);
+BOOL init_group_mapping(void);
+NTSTATUS one_alias_membership(const DOM_SID *member,
+			      DOM_SID **sids, size_t *num);
+BOOL get_group_map_from_sid(DOM_SID sid, GROUP_MAP *map);
+BOOL get_group_map_from_gid(gid_t gid, GROUP_MAP *map);
+BOOL get_group_map_from_ntname(const char *name, GROUP_MAP *map);
+BOOL add_mapping_entry(GROUP_MAP *map, int flag);
+NTSTATUS add_aliasmem(const DOM_SID *alias, const DOM_SID *member);
+NTSTATUS del_aliasmem(const DOM_SID *alias, const DOM_SID *member);
+NTSTATUS enum_aliasmem(const DOM_SID *alias, DOM_SID **sids, size_t *num);

Deleted: branches/samba/upstream/source/groupdb/mapping_ldb.c
===================================================================
--- branches/samba/upstream/source/groupdb/mapping_ldb.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/groupdb/mapping_ldb.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,690 +0,0 @@
-/* 
- *  Unix SMB/CIFS implementation.
- *
- *  group mapping code on top of ldb
- *
- *  Copyright (C) Andrew Tridgell              2006
- *
- * based on tdb group mapping code from groupdb/mapping.c
- *  
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *  
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *  
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "includes.h"
-#include "groupdb/mapping.h"
-#include "lib/ldb/include/includes.h"
-#include "lib/ldb/include/ldb_errors.h"
-
-static struct ldb_context *ldb;
-
-static bool mapping_upgrade(const char *tdb_path);
-
-/*
-  connect to the group mapping ldb
-*/
-static bool init_group_mapping(void)
-{
-	bool existed;
-	const char *init_ldif[] = 
-		{ "dn: @ATTRIBUTES\n" \
-		  "ntName: CASE_INSENSITIVE\n" \
-		  "\n",
-		  "dn: @INDEXLIST\n" \
-		  "@IDXATTR: gidNumber\n" \
-		  "@IDXATTR: ntName\n" \
-		  "@IDXATTR: member\n" };
-	const char *db_path, *tdb_path;
-	int ret;
-	int flags = 0;
-
-	if (ldb != NULL) {
-		return True;
-	}
-
-	/* this is needed as Samba3 doesn't have this globally yet */
-	ldb_global_init();
-
-	db_path = state_path("group_mapping.ldb");
-
-	ldb = ldb_init(NULL);
-	if (ldb == NULL) goto failed;
-
-	existed = file_exist(db_path, NULL);
-
-	if (lp_parm_bool(-1, "groupmap", "nosync", False)) {
-		flags |= LDB_FLG_NOSYNC;
-	}
-
-	if (!lp_use_mmap()) {
-		flags |= LDB_FLG_NOMMAP;
-	}
-
-	ret = ldb_connect(ldb, db_path, flags, NULL);
-	if (ret != LDB_SUCCESS) {
-		goto failed;
-	}
-	
-	if (!existed) {
-		/* initialise the ldb with an index */
-		struct ldb_ldif *ldif;
-		int i;
-		for (i=0;i<ARRAY_SIZE(init_ldif);i++) {
-			ldif = ldb_ldif_read_string(ldb, &init_ldif[i]);
-			if (ldif == NULL) goto failed;
-			ret = ldb_add(ldb, ldif->msg);
-			talloc_free(ldif);
-			if (ret == -1) goto failed;
-		}
-	}
-
-	/* possibly upgrade */
-	tdb_path = state_path("group_mapping.tdb");
-	if (file_exist(tdb_path, NULL) && !mapping_upgrade(tdb_path)) {
-		unlink(state_path("group_mapping.ldb"));
-		goto failed;
-	}
-
-	return True;
-
-failed:
-	DEBUG(0,("Failed to open group mapping ldb '%s' - '%s'\n",
-		 db_path, ldb?ldb_errstring(ldb):strerror(errno)));
-	talloc_free(ldb);
-	ldb = NULL;
-	return False;
-}
-
-
-/*
-  form the DN for a mapping entry from a SID
- */
-static struct ldb_dn *mapping_dn(TALLOC_CTX *mem_ctx, const DOM_SID *sid)
-{
-	fstring string_sid;
-	uint32_t rid;
-	DOM_SID domsid;
-
-	sid_copy(&domsid, sid);
-	if (!sid_split_rid(&domsid, &rid)) {
-		return NULL;
-	}
-      	if (!sid_to_fstring(string_sid, &domsid)) {
-		return NULL;
-	}
-	/* we split by domain and rid so we can do a subtree search
-	   when we only want one domain */
-	return ldb_dn_string_compose(mem_ctx, NULL, "rid=%u,domain=%s", 
-				     rid, string_sid);
-}
-
-/*
-  add a group mapping entry
- */
-static bool add_mapping_entry(GROUP_MAP *map, int flag)
-{
-	struct ldb_message *msg;	
-	int ret, i;
-	fstring string_sid;
-
-	msg = ldb_msg_new(ldb);
-	if (msg == NULL) {
-		return False;
-	}
-
-	msg->dn = mapping_dn(msg, &map->sid);
-	if (msg->dn == NULL) {
-		goto failed;
-	}
-
-	if (ldb_msg_add_string(msg, "objectClass", "groupMap") != LDB_SUCCESS ||
-	    ldb_msg_add_string(msg, "sid", 
-			       sid_to_fstring(string_sid, &map->sid)) != LDB_SUCCESS ||
-	    ldb_msg_add_fmt(msg, "gidNumber", "%u", (unsigned)map->gid) != LDB_SUCCESS ||
-	    ldb_msg_add_fmt(msg, "sidNameUse", "%u", (unsigned)map->sid_name_use) != LDB_SUCCESS ||
-	    ldb_msg_add_string(msg, "comment", map->comment) != LDB_SUCCESS ||
-	    ldb_msg_add_string(msg, "ntName", map->nt_name) != LDB_SUCCESS) {
-		goto failed;
-	}
-
-	ret = ldb_add(ldb, msg);
-
-	/* if it exists we update it. This is a hangover from the semantics the
-	   tdb backend had */
-	if (ret == LDB_ERR_ENTRY_ALREADY_EXISTS) {
-		for (i=0;i<msg->num_elements;i++) {
-			msg->elements[i].flags = LDB_FLAG_MOD_REPLACE;
-		}
-		ret = ldb_modify(ldb, msg);
-	}
-
-	talloc_free(msg);
-
-	return ret == LDB_SUCCESS;
-
-failed:
-	talloc_free(msg);
-	return False;
-}
-
-/*
-  unpack a ldb message into a GROUP_MAP structure
-*/
-static bool msg_to_group_map(struct ldb_message *msg, GROUP_MAP *map)
-{
-	const char *sidstr;
-
-	map->gid          = ldb_msg_find_attr_as_int(msg, "gidNumber", -1);
-	map->sid_name_use = ldb_msg_find_attr_as_int(msg, "sidNameUse", -1);
-	fstrcpy(map->nt_name, ldb_msg_find_attr_as_string(msg, "ntName", NULL));
-	fstrcpy(map->comment, ldb_msg_find_attr_as_string(msg, "comment", NULL));
-	sidstr = ldb_msg_find_attr_as_string(msg, "sid", NULL);
-
-	if (!string_to_sid(&map->sid, sidstr) ||
-	    map->gid == (gid_t)-1 ||
-	    map->sid_name_use == (enum lsa_SidType)-1) {
-		DEBUG(0,("Unable to unpack group mapping\n"));
-		return False;
-	}
-
-	return True;
-}
-
-/*
- return a group map entry for a given sid
-*/
-static bool get_group_map_from_sid(DOM_SID sid, GROUP_MAP *map)
-{
-	int ret;
-	struct ldb_dn *dn;
-	struct ldb_result *res=NULL;
-	
-	dn = mapping_dn(ldb, &sid);
-	if (dn == NULL) goto failed;
-
-	ret = ldb_search(ldb, dn, LDB_SCOPE_BASE, NULL, NULL, &res);
-	talloc_steal(dn, res);
-	if (ret != LDB_SUCCESS || res->count != 1) {
-		goto failed;
-	}
-
-	if (!msg_to_group_map(res->msgs[0], map)) goto failed;
-
-	talloc_free(dn);
-	return True;
-
-failed:
-	talloc_free(dn);
-	return False;
-}
-
-/*
- return a group map entry for a given gid
-*/
-static bool get_group_map_from_gid(gid_t gid, GROUP_MAP *map)
-{
-	int ret;
-	char *expr;
-	struct ldb_result *res=NULL;
-
-	expr = talloc_asprintf(ldb, "(&(gidNumber=%u)(objectClass=groupMap))", 
-			       (unsigned)gid);
-	if (expr == NULL) goto failed;
-
-	ret = ldb_search(ldb, NULL, LDB_SCOPE_SUBTREE, expr, NULL, &res);
-	talloc_steal(expr, res);
-	if (ret != LDB_SUCCESS || res->count != 1) goto failed;
-	
-	if (!msg_to_group_map(res->msgs[0], map)) goto failed;
-
-	talloc_free(expr);
-	return True;
-
-failed:
-	talloc_free(expr);
-	return False;
-}
-
-/*
-  Return the sid and the type of the unix group.
-*/
-static bool get_group_map_from_ntname(const char *name, GROUP_MAP *map)
-{
-	int ret;
-	char *expr;
-	struct ldb_result *res=NULL;
-
-	expr = talloc_asprintf(ldb, "(&(ntName=%s)(objectClass=groupMap))", name);
-	if (expr == NULL) goto failed;
-
-	ret = ldb_search(ldb, NULL, LDB_SCOPE_SUBTREE, expr, NULL, &res);
-	talloc_steal(expr, res);
-	if (ret != LDB_SUCCESS || res->count != 1) goto failed;
-	
-	if (!msg_to_group_map(res->msgs[0], map)) goto failed;
-
-	talloc_free(expr);
-	return True;
-
-failed:
-	talloc_free(expr);
-	return False;
-}
-
-/*
- Remove a group mapping entry.
-*/
-static bool group_map_remove(const DOM_SID *sid)
-{
-	struct ldb_dn *dn;
-	int ret;
-	
-	dn = mapping_dn(ldb, sid);
-	if (dn == NULL) {
-		return False;
-	}
-	ret = ldb_delete(ldb, dn);
-	talloc_free(dn);
-
-	return ret == LDB_SUCCESS;
-}
-
-
-/*
-  Enumerate the group mappings for a domain
-*/
-static bool enum_group_mapping(const DOM_SID *domsid, enum lsa_SidType sid_name_use, 
-			       GROUP_MAP **pp_rmap,
-			       size_t *p_num_entries, bool unix_only)
-{
-	int i, ret;
-	char *expr;
-	fstring name;
-	struct ldb_result *res = NULL;
-	struct ldb_dn *basedn=NULL;
-	TALLOC_CTX *tmp_ctx;
-
-	tmp_ctx = talloc_new(ldb);
-	if (tmp_ctx == NULL) goto failed;
-
-	if (sid_name_use == SID_NAME_UNKNOWN) {
-		expr = talloc_asprintf(tmp_ctx, "(&(objectClass=groupMap))");
-	} else {
-		expr = talloc_asprintf(tmp_ctx, "(&(sidNameUse=%u)(objectClass=groupMap))",
-				       sid_name_use);
-	}
-	if (expr == NULL) goto failed;
-
-	/* we do a subtree search on the domain */
-	if (domsid != NULL) {
-		sid_to_fstring(name, domsid);
-		basedn = ldb_dn_string_compose(tmp_ctx, NULL, "domain=%s", name);
-		if (basedn == NULL) goto failed;
-	}
-
-	ret = ldb_search(ldb, basedn, LDB_SCOPE_SUBTREE, expr, NULL, &res);
-	talloc_steal(tmp_ctx, res);
-	if (ret != LDB_SUCCESS) goto failed;
-
-	(*pp_rmap) = NULL;
-	*p_num_entries = 0;
-
-	for (i=0;i<res->count;i++) {
-		(*pp_rmap) = SMB_REALLOC_ARRAY((*pp_rmap), GROUP_MAP, 
-					       (*p_num_entries)+1);
-		if (!(*pp_rmap)) goto failed;
-
-		if (!msg_to_group_map(res->msgs[i], &(*pp_rmap)[*p_num_entries])) {
-			goto failed;
-		}
-
-		(*p_num_entries)++;
-	}
-
-	talloc_free(tmp_ctx);
-	return True;
-
-failed:
-	talloc_free(tmp_ctx);
-	return False;	
-}
-
-/* 
-   This operation happens on session setup, so it should better be fast. We
-   store a list of aliases a SID is member of hanging off MEMBEROF/SID. 
-*/
-static NTSTATUS one_alias_membership(const DOM_SID *member,
-				     DOM_SID **sids, size_t *num)
-{
-	const char *attrs[] = {
-		"sid",
-		NULL
-	};
-	DOM_SID alias;
-	char *expr;
-	int ret, i;
-	struct ldb_result *res=NULL;
-	fstring string_sid;
-	NTSTATUS status = NT_STATUS_INTERNAL_DB_CORRUPTION;
-
-      	if (!sid_to_fstring(string_sid, member)) {
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	expr = talloc_asprintf(ldb, "(&(member=%s)(objectClass=groupMap))", 
-			       string_sid);
-	if (expr == NULL) goto failed;
-
-	ret = ldb_search(ldb, NULL, LDB_SCOPE_SUBTREE, expr, attrs, &res);
-	talloc_steal(expr, res);
-	if (ret != LDB_SUCCESS) {
-		goto failed;
-	}
-
-	for (i=0;i<res->count;i++) {
-		struct ldb_message_element *el;
-		el = ldb_msg_find_element(res->msgs[i], "sid");
-		if (el == NULL || el->num_values != 1) {
-			status = NT_STATUS_INTERNAL_DB_CORRUPTION;
-			goto failed;
-		}
-		string_to_sid(&alias, (char *)el->values[0].data);
-		status = add_sid_to_array_unique(NULL, &alias, sids, num);
-		if (!NT_STATUS_IS_OK(status)) {
-			goto failed;
-		}
-	}
-
-	talloc_free(expr);
-	return NT_STATUS_OK;
-
-failed:
-	talloc_free(expr);
-	return status;
-}
-
-/*
-  add/remove a member field
-*/
-static NTSTATUS modify_aliasmem(const DOM_SID *alias, const DOM_SID *member,
-				int operation)
-{
-	fstring string_sid;
-	int ret;
-	struct ldb_message msg;
-	struct ldb_message_element el;
-	struct ldb_val val;
-	TALLOC_CTX *tmp_ctx;
-	GROUP_MAP map;
-
-	if (!get_group_map_from_sid(*alias, &map)) {
-		sid_to_fstring(string_sid, alias);
-		return NT_STATUS_NO_SUCH_ALIAS;
-	}
-
-	if ((map.sid_name_use != SID_NAME_ALIAS) &&
-	    (map.sid_name_use != SID_NAME_WKN_GRP)) {
-		DEBUG(0,("sid_name_use=%d\n", map.sid_name_use));
-		return NT_STATUS_NO_SUCH_ALIAS;
-	}
-
-	tmp_ctx = talloc_new(NULL);
-	if (tmp_ctx == NULL) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	msg.dn = mapping_dn(tmp_ctx, alias);
-	if (msg.dn == NULL) {
-		return NT_STATUS_NO_MEMORY;
-	}
-	msg.num_elements = 1;
-	msg.elements = &el;
-	el.flags = operation;
-	el.name = talloc_strdup(tmp_ctx, "member");
-	el.num_values = 1;
-	el.values = &val;
-	sid_to_fstring(string_sid, member);
-	val.data = (uint8_t *)string_sid;
-	val.length = strlen(string_sid);
-
-	ret = ldb_modify(ldb, &msg);
-	talloc_free(tmp_ctx);
-
-	if (ret == LDB_ERR_NO_SUCH_OBJECT) {
-		return NT_STATUS_NO_SUCH_ALIAS;
-	}
-
-	if (operation == LDB_FLAG_MOD_ADD &&
-	    ret == LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS) {
-		return NT_STATUS_MEMBER_IN_ALIAS;
-	}
-
-	return (ret == LDB_SUCCESS ? NT_STATUS_OK : NT_STATUS_ACCESS_DENIED);
-}
-
-static NTSTATUS add_aliasmem(const DOM_SID *alias, const DOM_SID *member)
-{
-	return modify_aliasmem(alias, member, LDB_FLAG_MOD_ADD);
-}
-
-static NTSTATUS del_aliasmem(const DOM_SID *alias, const DOM_SID *member)
-{
-	return modify_aliasmem(alias, member, LDB_FLAG_MOD_DELETE);
-}
-
-
-/*
-  enumerate sids that have the given alias set in member
-*/
-static NTSTATUS enum_aliasmem(const DOM_SID *alias, DOM_SID **sids, size_t *num)
-{
-	const char *attrs[] = {
-		"member",
-		NULL
-	};
-	int ret, i;
-	NTSTATUS status = NT_STATUS_OK;
-	struct ldb_result *res=NULL;
-	struct ldb_dn *dn;
-	struct ldb_message_element *el;
-	
-	*sids = NULL;
-	*num = 0;
-
-	dn = mapping_dn(ldb, alias);
-	if (dn == NULL) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	ret = ldb_search(ldb, dn, LDB_SCOPE_BASE, NULL, attrs, &res);
-	talloc_steal(dn, res);
-	if (ret == LDB_SUCCESS && res->count == 0) {
-		talloc_free(dn);
-		return NT_STATUS_OK;
-	}
-	if (ret != LDB_SUCCESS) {
-		talloc_free(dn);
-		return NT_STATUS_INTERNAL_DB_CORRUPTION;
-	}
-
-	el = ldb_msg_find_element(res->msgs[0], "member");
-	if (el == NULL) {
-		talloc_free(dn);
-		return NT_STATUS_INTERNAL_DB_CORRUPTION;
-	}
-	
-	for (i=0;i<el->num_values;i++) {
-		DOM_SID sid;
-		string_to_sid(&sid, (const char *)el->values[i].data);
-		status = add_sid_to_array_unique(NULL, &sid, sids, num);
-		if (!NT_STATUS_IS_OK(status)) {
-			goto done;
-		}
-	}
-
-done:
-	talloc_free(dn);
-	return status;
-}
-
-/*
-  upgrade one group mapping record from the old tdb format
-*/
-static int upgrade_map_record(TDB_CONTEXT *tdb_ctx, TDB_DATA key, 
-			      TDB_DATA data, void *state)
-{
-	int ret;
-	GROUP_MAP map;
-
-	if (strncmp((char *)key.dptr, GROUP_PREFIX, 
-		    MIN(key.dsize, strlen(GROUP_PREFIX))) != 0) {
-		return 0;
-	}
-
-	if (!string_to_sid(&map.sid, strlen(GROUP_PREFIX) + (const char *)key.dptr)) {
-		DEBUG(0,("Bad sid key '%s' during upgrade\n", (const char *)key.dptr));
-		*(int *)state = -1;
-		return -1;
-	}
-
-	ret = tdb_unpack(data.dptr, data.dsize, "ddff",
-			 &map.gid, &map.sid_name_use, &map.nt_name, &map.comment);
-	if (ret == -1) {
-		DEBUG(0,("Failed to unpack group map record during upgrade\n"));
-		*(int *)state = -1;
-		return -1;
-	}
-
-	if (!add_mapping_entry(&map, 0)) {
-		DEBUG(0,("Failed to add mapping entry during upgrade\n"));
-		*(int *)state = -1;
-		return -1;
-	}
-
-	return 0;
-}
-
-/*
-  upgrade one alias record from the old tdb format
-*/
-static int upgrade_alias_record(TDB_CONTEXT *tdb_ctx, TDB_DATA key, 
-				TDB_DATA data, void *state)
-{
-	const char *p = (const char *)data.dptr;
-	char *string_sid;
-	DOM_SID member;
-	TALLOC_CTX *frame;
-
-	if (strncmp((char *)key.dptr, MEMBEROF_PREFIX, 
-		    MIN(key.dsize, strlen(MEMBEROF_PREFIX))) != 0) {
-		return 0;
-	}
-
-	if (!string_to_sid(&member, strlen(MEMBEROF_PREFIX) + (const char *)key.dptr)) {
-		DEBUG(0,("Bad alias key %s during upgrade\n",
-			 (const char *)key.dptr));
-		*(int *)state = -1;
-	}
-
-	frame = talloc_stackframe();
-	while (next_token_talloc(frame,&p, &string_sid, " ")) {
-		DOM_SID alias;
-		NTSTATUS status;
-		string_to_sid(&alias, string_sid);
-		status = add_aliasmem(&alias, &member);
-		if (NT_STATUS_EQUAL(status, NT_STATUS_NO_SUCH_ALIAS)) {
-			DEBUG(0,("Ignoring orphaned alias record '%s'\n", 
-				 string_sid));
-		} else if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(0,("Failed to add alias member during upgrade - %s\n",
-				 nt_errstr(status)));
-			*(int *)state = -1;
-			TALLOC_FREE(frame);
-			return -1;
-		}
-	}
-	TALLOC_FREE(frame);
-	return 0;
-}
-
-/*
-  upgrade from a old style tdb
-*/
-static bool mapping_upgrade(const char *tdb_path)
-{
-	static TDB_CONTEXT *tdb;
-	int ret, status=0;
-
-	tdb = tdb_open_log(tdb_path, 0, TDB_DEFAULT, O_RDWR, 0600);
-	if (tdb == NULL) goto failed;
-
-	/* we have to do the map records first, as alias records may
-	   reference them */
-	ret = tdb_traverse(tdb, upgrade_map_record, &status);
-	if (ret == -1 || status == -1) goto failed;
-
-	ret = tdb_traverse(tdb, upgrade_alias_record, &status);
-	if (ret == -1 || status == -1) goto failed;
-
-	if (tdb) {
-		tdb_close(tdb);
-		tdb = NULL;
-	}
-
-	{
-		const char *old_path = tdb_path;
-		char *new_path = state_path("group_mapping.tdb.upgraded");
-
-		if (!new_path) {
-			goto failed;
-		}
-		if (rename(old_path, new_path) != 0) {
-			DEBUG(0,("Failed to rename old group mapping database\n"));
-			goto failed;
-		}
-	}
-	return True;
-
-failed:
-	DEBUG(0,("Failed to upgrade group mapping database\n"));
-	if (tdb) tdb_close(tdb);
-	return False;
-}
-
-
-
-static const struct mapping_backend ldb_backend = {
-	.add_mapping_entry         = add_mapping_entry,
-	.get_group_map_from_sid    = get_group_map_from_sid,
-	.get_group_map_from_gid    = get_group_map_from_gid,
-	.get_group_map_from_ntname = get_group_map_from_ntname,
-	.group_map_remove          = group_map_remove,
-	.enum_group_mapping        = enum_group_mapping,
-	.one_alias_membership      = one_alias_membership,
-	.add_aliasmem              = add_aliasmem,
-	.del_aliasmem              = del_aliasmem,
-	.enum_aliasmem             = enum_aliasmem	
-};
-
-/*
-  initialise the ldb mapping backend
- */
-const struct mapping_backend *groupdb_ldb_init(void)
-{
-	if (!init_group_mapping()) {
-		DEBUG(0,("Failed to initialise ldb mapping backend\n"));
-		return NULL;
-	}
-
-	return &ldb_backend;
-}

Modified: branches/samba/upstream/source/groupdb/mapping_tdb.c
===================================================================
--- branches/samba/upstream/source/groupdb/mapping_tdb.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/groupdb/mapping_tdb.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -17,137 +17,103 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
 #include "groupdb/mapping.h"
 
-static struct db_context *db; /* used for driver files */
+static TDB_CONTEXT *tdb; /* used for driver files */
 
-static bool enum_group_mapping(const DOM_SID *domsid, enum lsa_SidType sid_name_use, GROUP_MAP **pp_rmap,
-			       size_t *p_num_entries, bool unix_only);
-static bool group_map_remove(const DOM_SID *sid);
-	
 /****************************************************************************
  Open the group mapping tdb.
 ****************************************************************************/
-static bool init_group_mapping(void)
+ BOOL init_group_mapping(void)
 {
-	if (db != NULL) {
-		return true;
+	const char *vstring = "INFO/version";
+	int32 vers_id;
+	GROUP_MAP *map_table = NULL;
+	size_t num_entries = 0;
+	
+	if (tdb)
+		return True;
+		
+	tdb = tdb_open_log(lock_path("group_mapping.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
+	if (!tdb) {
+		DEBUG(0,("Failed to open group mapping database\n"));
+		return False;
 	}
 
-	db = db_open_trans(NULL, state_path("group_mapping.tdb"), 0,
-			   TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
-	if (db == NULL) {
-		DEBUG(0, ("Failed to open group mapping database: %s\n",
-			  strerror(errno)));
-		return false;
+	/* handle a Samba upgrade */
+	tdb_lock_bystring(tdb, vstring);
+
+	/* Cope with byte-reversed older versions of the db. */
+	vers_id = tdb_fetch_int32(tdb, vstring);
+	if ((vers_id == DATABASE_VERSION_V1) || (IREV(vers_id) == DATABASE_VERSION_V1)) {
+		/* Written on a bigendian machine with old fetch_int code. Save as le. */
+		tdb_store_int32(tdb, vstring, DATABASE_VERSION_V2);
+		vers_id = DATABASE_VERSION_V2;
 	}
 
-#if 0
-	/*
-	 * This code was designed to handle a group mapping version
-	 * upgrade. mapping_tdb is not active by default anymore, so ignore
-	 * this here.
-	 */
-	{
-		const char *vstring = "INFO/version";
-		int32 vers_id;
-		GROUP_MAP *map_table = NULL;
-		size_t num_entries = 0;
+	/* if its an unknown version we remove everthing in the db */
+	
+	if (vers_id != DATABASE_VERSION_V2) {
+		tdb_traverse(tdb, tdb_traverse_delete_fn, NULL);
+		tdb_store_int32(tdb, vstring, DATABASE_VERSION_V2);
+	}
 
-		/* handle a Samba upgrade */
-		tdb_lock_bystring(tdb, vstring);
+	tdb_unlock_bystring(tdb, vstring);
 
-		/* Cope with byte-reversed older versions of the db. */
-		vers_id = tdb_fetch_int32(tdb, vstring);
-		if ((vers_id == DATABASE_VERSION_V1)
-		    || (IREV(vers_id) == DATABASE_VERSION_V1)) {
-			/*
-			 * Written on a bigendian machine with old fetch_int
-			 * code. Save as le.
-			 */
-			tdb_store_int32(tdb, vstring, DATABASE_VERSION_V2);
-			vers_id = DATABASE_VERSION_V2;
-		}
-
-		/* if its an unknown version we remove everthing in the db */
-
-		if (vers_id != DATABASE_VERSION_V2) {
-			tdb_wipe_all(tdb);
-			tdb_store_int32(tdb, vstring, DATABASE_VERSION_V2);
-		}
-
-		tdb_unlock_bystring(tdb, vstring);
-
-		/* cleanup any map entries with a gid == -1 */
-
-		if ( enum_group_mapping( NULL, SID_NAME_UNKNOWN, &map_table,
-					 &num_entries, False ) ) {
-			int i;
-
-			for ( i=0; i<num_entries; i++ ) {
-				if ( map_table[i].gid == -1 ) {
-					group_map_remove( &map_table[i].sid );
-				}
+	/* cleanup any map entries with a gid == -1 */
+	
+	if ( enum_group_mapping( NULL, SID_NAME_UNKNOWN, &map_table, &num_entries, False ) ) {
+		int i;
+		
+		for ( i=0; i<num_entries; i++ ) {
+			if ( map_table[i].gid == -1 ) {
+				group_map_remove( &map_table[i].sid );
 			}
-
-			SAFE_FREE( map_table );
 		}
+		
+		SAFE_FREE( map_table );
 	}
-#endif
 
-	return true;
-}
 
-static char *group_mapping_key(TALLOC_CTX *mem_ctx, const DOM_SID *sid)
-{
-	char *sidstr, *result;
-
-	sidstr = sid_string_talloc(talloc_tos(), sid);
-	if (sidstr == NULL) {
-		return NULL;
-	}
-
-	result = talloc_asprintf(mem_ctx, "%s%s", GROUP_PREFIX, sidstr);
-
-	TALLOC_FREE(sidstr);
-	return result;
+	return True;
 }
 
 /****************************************************************************
 ****************************************************************************/
-static bool add_mapping_entry(GROUP_MAP *map, int flag)
+ BOOL add_mapping_entry(GROUP_MAP *map, int flag)
 {
-	char *key, *buf;
+	TDB_DATA kbuf, dbuf;
+	pstring key, buf;
+	fstring string_sid="";
 	int len;
-	NTSTATUS status;
 
-	key = group_mapping_key(talloc_tos(), &map->sid);
-	if (key == NULL) {
-		return NULL;
+	if(!init_group_mapping()) {
+		DEBUG(0,("failed to initialize group mapping\n"));
+		return(False);
 	}
+	
+	sid_to_string(string_sid, &map->sid);
 
-	len = tdb_pack(NULL, 0, "ddff",
-		map->gid, map->sid_name_use, map->nt_name, map->comment);
+	len = tdb_pack(buf, sizeof(buf), "ddff",
+			map->gid, map->sid_name_use, map->nt_name, map->comment);
 
-	buf = TALLOC_ARRAY(key, char, len);
-	if (!buf) {
-		TALLOC_FREE(key);
-		return false;
-	}
-	len = tdb_pack((uint8 *)buf, len, "ddff", map->gid,
-		       map->sid_name_use, map->nt_name, map->comment);
+	if (len > sizeof(buf))
+		return False;
 
-	status = dbwrap_trans_store(
-		db, string_term_tdb_data(key),
-		make_tdb_data((uint8_t *)buf, len), TDB_REPLACE);
+	slprintf(key, sizeof(key), "%s%s", GROUP_PREFIX, string_sid);
 
-	TALLOC_FREE(key);
+	kbuf.dsize = strlen(key)+1;
+	kbuf.dptr = key;
+	dbuf.dsize = len;
+	dbuf.dptr = buf;
+	if (tdb_store(tdb, kbuf, dbuf, flag) != 0) return False;
 
-	return NT_STATUS_IS_OK(status);
+	return True;
 }
 
 
@@ -155,265 +121,321 @@
  Return the sid and the type of the unix group.
 ****************************************************************************/
 
-static bool get_group_map_from_sid(DOM_SID sid, GROUP_MAP *map)
+ BOOL get_group_map_from_sid(DOM_SID sid, GROUP_MAP *map)
 {
-	TDB_DATA dbuf;
-	char *key;
+	TDB_DATA kbuf, dbuf;
+	pstring key;
+	fstring string_sid;
 	int ret = 0;
+	
+	if(!init_group_mapping()) {
+		DEBUG(0,("failed to initialize group mapping\n"));
+		return(False);
+	}
 
 	/* the key is the SID, retrieving is direct */
 
-	key = group_mapping_key(talloc_tos(), &sid);
-	if (key == NULL) {
-		return false;
-	}
+	sid_to_string(string_sid, &sid);
+	slprintf(key, sizeof(key), "%s%s", GROUP_PREFIX, string_sid);
 
-	dbuf = dbwrap_fetch_bystring(db, key, key);
-	if (dbuf.dptr == NULL) {
-		TALLOC_FREE(key);
-		return false;
-	}
+	kbuf.dptr = key;
+	kbuf.dsize = strlen(key)+1;
+		
+	dbuf = tdb_fetch(tdb, kbuf);
+	if (!dbuf.dptr)
+		return False;
 
 	ret = tdb_unpack(dbuf.dptr, dbuf.dsize, "ddff",
-			&map->gid, &map->sid_name_use,
-			&map->nt_name, &map->comment);
+				&map->gid, &map->sid_name_use, &map->nt_name, &map->comment);
 
-	TALLOC_FREE(key);
-
+	SAFE_FREE(dbuf.dptr);
+	
 	if ( ret == -1 ) {
 		DEBUG(3,("get_group_map_from_sid: tdb_unpack failure\n"));
-		return false;
+		return False;
 	}
 
 	sid_copy(&map->sid, &sid);
-
-	return true;
+	
+	return True;
 }
 
-static bool dbrec2map(const struct db_record *rec, GROUP_MAP *map)
+/****************************************************************************
+ Return the sid and the type of the unix group.
+****************************************************************************/
+
+ BOOL get_group_map_from_gid(gid_t gid, GROUP_MAP *map)
 {
-	if ((rec->key.dsize < strlen(GROUP_PREFIX))
-	    || (strncmp((char *)rec->key.dptr, GROUP_PREFIX,
-			GROUP_PREFIX_LEN) != 0)) {
-		return False;
-	}
+	TDB_DATA kbuf, dbuf, newkey;
+	fstring string_sid;
+	int ret;
 
-	if (!string_to_sid(&map->sid, (const char *)rec->key.dptr
-			   + GROUP_PREFIX_LEN)) {
-		return False;
+	if(!init_group_mapping()) {
+		DEBUG(0,("failed to initialize group mapping\n"));
+		return(False);
 	}
 
-	return tdb_unpack(rec->value.dptr, rec->value.dsize, "ddff",
-			  &map->gid, &map->sid_name_use, &map->nt_name,
-			  &map->comment) != -1;
-}
+	/* we need to enumerate the TDB to find the GID */
 
-struct find_map_state {
-	bool found;
-	const char *name;	/* If != NULL, look for name */
-	gid_t gid;		/* valid iff name == NULL */
-	GROUP_MAP *map;
-};
+	for (kbuf = tdb_firstkey(tdb); 
+	     kbuf.dptr; 
+	     newkey = tdb_nextkey(tdb, kbuf), safe_free(kbuf.dptr), kbuf=newkey) {
 
-static int find_map(struct db_record *rec, void *private_data)
-{
-	struct find_map_state *state = (struct find_map_state *)private_data;
+		if (strncmp(kbuf.dptr, GROUP_PREFIX, strlen(GROUP_PREFIX)) != 0) continue;
+		
+		dbuf = tdb_fetch(tdb, kbuf);
+		if (!dbuf.dptr)
+			continue;
 
-	if (!dbrec2map(rec, state->map)) {
-		DEBUG(10, ("failed to unpack map\n"));
-		return 0;
-	}
+		fstrcpy(string_sid, kbuf.dptr+strlen(GROUP_PREFIX));
 
-	if (state->name != NULL) {
-		if (strequal(state->name, state->map->nt_name)) {
-			state->found = true;
-			return 1;
+		string_to_sid(&map->sid, string_sid);
+		
+		ret = tdb_unpack(dbuf.dptr, dbuf.dsize, "ddff",
+				 &map->gid, &map->sid_name_use, &map->nt_name, &map->comment);
+
+		SAFE_FREE(dbuf.dptr);
+
+		if ( ret == -1 ) {
+			DEBUG(3,("get_group_map_from_gid: tdb_unpack failure\n"));
+			return False;
 		}
-	}
-	else {
-		if (state->map->gid == state->gid) {
-			state->found = true;
-			return 1;
+	
+		if (gid==map->gid) {
+			SAFE_FREE(kbuf.dptr);
+			return True;
 		}
 	}
 
-	return 0;
+	return False;
 }
 
 /****************************************************************************
  Return the sid and the type of the unix group.
 ****************************************************************************/
 
-static bool get_group_map_from_gid(gid_t gid, GROUP_MAP *map)
+ BOOL get_group_map_from_ntname(const char *name, GROUP_MAP *map)
 {
-	struct find_map_state state;
+	TDB_DATA kbuf, dbuf, newkey;
+	fstring string_sid;
+	int ret;
 
-	state.found = false;
-	state.name = NULL;	/* Indicate we're looking for gid */
-	state.gid = gid;
-	state.map = map;
+	if(!init_group_mapping()) {
+		DEBUG(0,("get_group_map_from_ntname:failed to initialize group mapping\n"));
+		return(False);
+	}
 
-	db->traverse_read(db, find_map, (void *)&state);
+	/* we need to enumerate the TDB to find the name */
 
-	return state.found;
-}
+	for (kbuf = tdb_firstkey(tdb); 
+	     kbuf.dptr; 
+	     newkey = tdb_nextkey(tdb, kbuf), safe_free(kbuf.dptr), kbuf=newkey) {
 
-/****************************************************************************
- Return the sid and the type of the unix group.
-****************************************************************************/
+		if (strncmp(kbuf.dptr, GROUP_PREFIX, strlen(GROUP_PREFIX)) != 0) continue;
+		
+		dbuf = tdb_fetch(tdb, kbuf);
+		if (!dbuf.dptr)
+			continue;
 
-static bool get_group_map_from_ntname(const char *name, GROUP_MAP *map)
-{
-	struct find_map_state state;
+		fstrcpy(string_sid, kbuf.dptr+strlen(GROUP_PREFIX));
 
-	state.found = false;
-	state.name = name;
-	state.map = map;
+		string_to_sid(&map->sid, string_sid);
+		
+		ret = tdb_unpack(dbuf.dptr, dbuf.dsize, "ddff",
+				 &map->gid, &map->sid_name_use, &map->nt_name, &map->comment);
 
-	db->traverse_read(db, find_map, (void *)&state);
+		SAFE_FREE(dbuf.dptr);
+		
+		if ( ret == -1 ) {
+			DEBUG(3,("get_group_map_from_ntname: tdb_unpack failure\n"));
+			return False;
+		}
 
-	return state.found;
+		if ( strequal(name, map->nt_name) ) {
+			SAFE_FREE(kbuf.dptr);
+			return True;
+		}
+	}
+
+	return False;
 }
 
 /****************************************************************************
  Remove a group mapping entry.
 ****************************************************************************/
 
-static bool group_map_remove(const DOM_SID *sid)
+BOOL group_map_remove(const DOM_SID *sid)
 {
-	char *key;
-	NTSTATUS status;
-
-	key = group_mapping_key(talloc_tos(), sid);
-	if (key == NULL) {
-		return false;
+	TDB_DATA kbuf, dbuf;
+	pstring key;
+	fstring string_sid;
+	
+	if(!init_group_mapping()) {
+		DEBUG(0,("failed to initialize group mapping\n"));
+		return(False);
 	}
 
-	status = dbwrap_trans_delete(db, string_term_tdb_data(key));
+	/* the key is the SID, retrieving is direct */
 
-	TALLOC_FREE(key);
-	return NT_STATUS_IS_OK(status);
+	sid_to_string(string_sid, sid);
+	slprintf(key, sizeof(key), "%s%s", GROUP_PREFIX, string_sid);
+
+	kbuf.dptr = key;
+	kbuf.dsize = strlen(key)+1;
+		
+	dbuf = tdb_fetch(tdb, kbuf);
+	if (!dbuf.dptr)
+		return False;
+	
+	SAFE_FREE(dbuf.dptr);
+
+	if(tdb_delete(tdb, kbuf) != TDB_SUCCESS)
+		return False;
+
+	return True;
 }
 
 /****************************************************************************
  Enumerate the group mapping.
 ****************************************************************************/
 
-struct enum_map_state {
-	const DOM_SID *domsid;
-	enum lsa_SidType sid_name_use;
-	bool unix_only;
-
-	size_t num_maps;
-	GROUP_MAP *maps;
-};
-
-static int collect_map(struct db_record *rec, void *private_data)
+BOOL enum_group_mapping(const DOM_SID *domsid, enum lsa_SidType sid_name_use, GROUP_MAP **pp_rmap,
+			size_t *p_num_entries, BOOL unix_only)
 {
-	struct enum_map_state *state = (struct enum_map_state *)private_data;
+	TDB_DATA kbuf, dbuf, newkey;
+	fstring string_sid;
 	GROUP_MAP map;
-	GROUP_MAP *tmp;
+	GROUP_MAP *mapt;
+	int ret;
+	size_t entries=0;
+	DOM_SID grpsid;
+	uint32 rid;
 
-	if (!dbrec2map(rec, &map)) {
-		return 0;
+	if(!init_group_mapping()) {
+		DEBUG(0,("failed to initialize group mapping\n"));
+		return(False);
 	}
-	/* list only the type or everything if UNKNOWN */
-	if (state->sid_name_use != SID_NAME_UNKNOWN
-	    && state->sid_name_use != map.sid_name_use) {
-		DEBUG(11,("enum_group_mapping: group %s is not of the "
-			  "requested type\n", map.nt_name));
-		return 0;
-	}
 
-	if ((state->unix_only == ENUM_ONLY_MAPPED) && (map.gid == -1)) {
-		DEBUG(11,("enum_group_mapping: group %s is non mapped\n",
-			  map.nt_name));
-		return 0;
-	}
+	*p_num_entries=0;
+	*pp_rmap=NULL;
 
-	if ((state->domsid != NULL) &&
-	    (sid_compare_domain(state->domsid, &map.sid) != 0)) {
-		DEBUG(11,("enum_group_mapping: group %s is not in domain\n",
-			  sid_string_dbg(&map.sid)));
-		return 0;
-	}
+	for (kbuf = tdb_firstkey(tdb); 
+	     kbuf.dptr; 
+	     newkey = tdb_nextkey(tdb, kbuf), safe_free(kbuf.dptr), kbuf=newkey) {
 
-	if (!(tmp = SMB_REALLOC_ARRAY(state->maps, GROUP_MAP,
-				      state->num_maps+1))) {
-		DEBUG(0,("enum_group_mapping: Unable to enlarge group "
-			 "map!\n"));
-		return 1;
-	}
+		if (strncmp(kbuf.dptr, GROUP_PREFIX, strlen(GROUP_PREFIX)) != 0)
+			continue;
 
-	state->maps = tmp;
-	state->maps[state->num_maps] = map;
-	state->num_maps++;
-	return 0;
-}
+		dbuf = tdb_fetch(tdb, kbuf);
+		if (!dbuf.dptr)
+			continue;
 
-static bool enum_group_mapping(const DOM_SID *domsid,
-			       enum lsa_SidType sid_name_use,
-			       GROUP_MAP **pp_rmap,
-			       size_t *p_num_entries, bool unix_only)
-{
-	struct enum_map_state state;
+		fstrcpy(string_sid, kbuf.dptr+strlen(GROUP_PREFIX));
+				
+		ret = tdb_unpack(dbuf.dptr, dbuf.dsize, "ddff",
+				 &map.gid, &map.sid_name_use, &map.nt_name, &map.comment);
 
-	state.domsid = domsid;
-	state.sid_name_use = sid_name_use;
-	state.unix_only = unix_only;
-	state.num_maps = 0;
-	state.maps = NULL;
+		SAFE_FREE(dbuf.dptr);
 
-	if (db->traverse_read(db, collect_map, (void *)&state) < 0) {
-		return false;
+		if ( ret == -1 ) {
+			DEBUG(3,("enum_group_mapping: tdb_unpack failure\n"));
+			continue;
+		}
+	
+		/* list only the type or everything if UNKNOWN */
+		if (sid_name_use!=SID_NAME_UNKNOWN  && sid_name_use!=map.sid_name_use) {
+			DEBUG(11,("enum_group_mapping: group %s is not of the requested type\n", map.nt_name));
+			continue;
+		}
+
+		if (unix_only==ENUM_ONLY_MAPPED && map.gid==-1) {
+			DEBUG(11,("enum_group_mapping: group %s is non mapped\n", map.nt_name));
+			continue;
+		}
+
+		string_to_sid(&grpsid, string_sid);
+		sid_copy( &map.sid, &grpsid );
+		
+		sid_split_rid( &grpsid, &rid );
+
+		/* Only check the domain if we were given one */
+
+		if ( domsid && !sid_equal( domsid, &grpsid ) ) {
+			DEBUG(11,("enum_group_mapping: group %s is not in domain %s\n", 
+				string_sid, sid_string_static(domsid)));
+			continue;
+		}
+
+		DEBUG(11,("enum_group_mapping: returning group %s of "
+			  "type %s\n", map.nt_name,
+			  sid_type_lookup(map.sid_name_use)));
+
+		(*pp_rmap) = SMB_REALLOC_ARRAY((*pp_rmap), GROUP_MAP, entries+1);
+		if (!(*pp_rmap)) {
+			DEBUG(0,("enum_group_mapping: Unable to enlarge group map!\n"));
+			return False;
+		}
+
+		mapt = (*pp_rmap);
+
+		mapt[entries].gid = map.gid;
+		sid_copy( &mapt[entries].sid, &map.sid);
+		mapt[entries].sid_name_use = map.sid_name_use;
+		fstrcpy(mapt[entries].nt_name, map.nt_name);
+		fstrcpy(mapt[entries].comment, map.comment);
+
+		entries++;
+
 	}
 
-	*pp_rmap = state.maps;
-	*p_num_entries = state.num_maps;
+	*p_num_entries=entries;
 
-	return true;
+	return True;
 }
 
 /* This operation happens on session setup, so it should better be fast. We
  * store a list of aliases a SID is member of hanging off MEMBEROF/SID. */
 
-static NTSTATUS one_alias_membership(const DOM_SID *member,
+ NTSTATUS one_alias_membership(const DOM_SID *member,
 			       DOM_SID **sids, size_t *num)
 {
-	fstring tmp;
-	fstring key;
-	char *string_sid;
-	TDB_DATA dbuf;
+	fstring key, string_sid;
+	TDB_DATA kbuf, dbuf;
 	const char *p;
-	NTSTATUS status = NT_STATUS_OK;
-	TALLOC_CTX *frame = talloc_stackframe();
 
-	slprintf(key, sizeof(key), "%s%s", MEMBEROF_PREFIX,
-		 sid_to_fstring(tmp, member));
+	if (!init_group_mapping()) {
+		DEBUG(0,("failed to initialize group mapping\n"));
+		return NT_STATUS_ACCESS_DENIED;
+	}
 
-	dbuf = dbwrap_fetch_bystring(db, frame, key);
+	sid_to_string(string_sid, member);
+	slprintf(key, sizeof(key), "%s%s", MEMBEROF_PREFIX, string_sid);
+
+	kbuf.dsize = strlen(key)+1;
+	kbuf.dptr = key;
+
+	dbuf = tdb_fetch(tdb, kbuf);
+
 	if (dbuf.dptr == NULL) {
-		TALLOC_FREE(frame);
 		return NT_STATUS_OK;
 	}
 
-	p = (const char *)dbuf.dptr;
+	p = dbuf.dptr;
 
-	while (next_token_talloc(frame, &p, &string_sid, " ")) {
+	while (next_token(&p, string_sid, " ", sizeof(string_sid))) {
+
 		DOM_SID alias;
 
 		if (!string_to_sid(&alias, string_sid))
 			continue;
 
-		status= add_sid_to_array_unique(NULL, &alias, sids, num);
-		if (!NT_STATUS_IS_OK(status)) {
-			goto done;
+		if (!add_sid_to_array_unique(NULL, &alias, sids, num)) {
+			return NT_STATUS_NO_MEMORY;
 		}
 	}
 
-done:
-	TALLOC_FREE(frame);
-	return status;
+	SAFE_FREE(dbuf.dptr);
+	return NT_STATUS_OK;
 }
 
 static NTSTATUS alias_memberships(const DOM_SID *members, size_t num_members,
@@ -432,7 +454,7 @@
 	return NT_STATUS_OK;
 }
 
-static bool is_aliasmem(const DOM_SID *alias, const DOM_SID *member)
+static BOOL is_aliasmem(const DOM_SID *alias, const DOM_SID *member)
 {
 	DOM_SID *sids;
 	size_t i, num;
@@ -453,15 +475,20 @@
 }
 
 
-static NTSTATUS add_aliasmem(const DOM_SID *alias, const DOM_SID *member)
+ NTSTATUS add_aliasmem(const DOM_SID *alias, const DOM_SID *member)
 {
 	GROUP_MAP map;
-	char *key;
+	TDB_DATA kbuf, dbuf;
+	pstring key;
 	fstring string_sid;
 	char *new_memberstring;
-	struct db_record *rec;
-	NTSTATUS status;
+	int result;
 
+	if(!init_group_mapping()) {
+		DEBUG(0,("failed to initialize group mapping\n"));
+		return NT_STATUS_ACCESS_DENIED;
+	}
+
 	if (!get_group_map_from_sid(*alias, &map))
 		return NT_STATUS_NO_SUCH_ALIAS;
 
@@ -472,104 +499,73 @@
 	if (is_aliasmem(alias, member))
 		return NT_STATUS_MEMBER_IN_ALIAS;
 
-	sid_to_fstring(string_sid, member);
+	sid_to_string(string_sid, member);
+	slprintf(key, sizeof(key), "%s%s", MEMBEROF_PREFIX, string_sid);
 
-	key = talloc_asprintf(talloc_tos(), "%s%s", MEMBEROF_PREFIX,
-			      string_sid);
-	if (key == NULL) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	kbuf.dsize = strlen(key)+1;
+	kbuf.dptr = key;
 
-	if (db->transaction_start(db) != 0) {
-		DEBUG(0, ("transaction_start failed\n"));
-		return NT_STATUS_INTERNAL_DB_CORRUPTION;
-	}
+	dbuf = tdb_fetch(tdb, kbuf);
 
-	rec = db->fetch_locked(db, key, string_term_tdb_data(key));
+	sid_to_string(string_sid, alias);
 
-	if (rec == NULL) {
-		DEBUG(10, ("fetch_lock failed\n"));
-		TALLOC_FREE(key);
-		status = NT_STATUS_INTERNAL_DB_CORRUPTION;
-		goto cancel;
-	}
-
-	sid_to_fstring(string_sid, alias);
-
-	if (rec->value.dptr != NULL) {
-		new_memberstring = talloc_asprintf(
-			key, "%s %s", (char *)(rec->value.dptr), string_sid);
+	if (dbuf.dptr != NULL) {
+		asprintf(&new_memberstring, "%s %s", (char *)(dbuf.dptr),
+			 string_sid);
 	} else {
-		new_memberstring = talloc_strdup(key, string_sid);
+		new_memberstring = SMB_STRDUP(string_sid);
 	}
 
-	if (new_memberstring == NULL) {
-		TALLOC_FREE(key);
-		status = NT_STATUS_NO_MEMORY;
-		goto cancel;
-	}
+	if (new_memberstring == NULL)
+		return NT_STATUS_NO_MEMORY;
 
-	status = rec->store(rec, string_term_tdb_data(new_memberstring), 0);
+	SAFE_FREE(dbuf.dptr);
+	dbuf.dsize = strlen(new_memberstring)+1;
+	dbuf.dptr = new_memberstring;
 
-	TALLOC_FREE(key);
+	result = tdb_store(tdb, kbuf, dbuf, 0);
 
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10, ("Could not store record: %s\n", nt_errstr(status)));
-		goto cancel;
-	}
+	SAFE_FREE(new_memberstring);
 
-	if (db->transaction_commit(db) != 0) {
-		DEBUG(0, ("transaction_commit failed\n"));
-		status = NT_STATUS_INTERNAL_DB_CORRUPTION;
-		goto cancel;
-	}
-
-	return NT_STATUS_OK;
-
- cancel:
-	if (db->transaction_cancel(db) != 0) {
-		smb_panic("transaction_cancel failed");
-	}
-
-	return status;
+	return (result == 0 ? NT_STATUS_OK : NT_STATUS_ACCESS_DENIED);
 }
 
-struct aliasmem_state {
+struct aliasmem_closure {
 	const DOM_SID *alias;
 	DOM_SID **sids;
 	size_t *num;
 };
 
-static int collect_aliasmem(struct db_record *rec, void *priv)
+static int collect_aliasmem(TDB_CONTEXT *tdb_ctx, TDB_DATA key, TDB_DATA data,
+			    void *state)
 {
-	struct aliasmem_state *state = (struct aliasmem_state *)priv;
+	struct aliasmem_closure *closure = (struct aliasmem_closure *)state;
 	const char *p;
-	char *alias_string;
-	TALLOC_CTX *frame;
+	fstring alias_string;
 
-	if (strncmp((const char *)rec->key.dptr, MEMBEROF_PREFIX,
-		    MEMBEROF_PREFIX_LEN) != 0)
+	if (strncmp(key.dptr, MEMBEROF_PREFIX,
+		    strlen(MEMBEROF_PREFIX)) != 0)
 		return 0;
 
-	p = (const char *)rec->value.dptr;
+	p = data.dptr;
 
-	frame = talloc_stackframe();
+	while (next_token(&p, alias_string, " ", sizeof(alias_string))) {
 
-	while (next_token_talloc(frame, &p, &alias_string, " ")) {
 		DOM_SID alias, member;
 		const char *member_string;
+		
 
 		if (!string_to_sid(&alias, alias_string))
 			continue;
 
-		if (sid_compare(state->alias, &alias) != 0)
+		if (sid_compare(closure->alias, &alias) != 0)
 			continue;
 
 		/* Ok, we found the alias we're looking for in the membership
 		 * list currently scanned. The key represents the alias
 		 * member. Add that. */
 
-		member_string = strchr((const char *)rec->key.dptr, '/');
+		member_string = strchr(key.dptr, '/');
 
 		/* Above we tested for MEMBEROF_PREFIX which includes the
 		 * slash. */
@@ -579,25 +575,26 @@
 
 		if (!string_to_sid(&member, member_string))
 			continue;
-
-		if (!NT_STATUS_IS_OK(add_sid_to_array(NULL, &member,
-						      state->sids,
-						      state->num)))
-		{
+		
+		if (!add_sid_to_array(NULL, &member, closure->sids, closure->num)) {
 			/* talloc fail. */
 			break;
 		}
 	}
 
-	TALLOC_FREE(frame);
 	return 0;
 }
 
-static NTSTATUS enum_aliasmem(const DOM_SID *alias, DOM_SID **sids, size_t *num)
+ NTSTATUS enum_aliasmem(const DOM_SID *alias, DOM_SID **sids, size_t *num)
 {
 	GROUP_MAP map;
-	struct aliasmem_state state;
+	struct aliasmem_closure closure;
 
+	if(!init_group_mapping()) {
+		DEBUG(0,("failed to initialize group mapping\n"));
+		return NT_STATUS_ACCESS_DENIED;
+	}
+
 	if (!get_group_map_from_sid(*alias, &map))
 		return NT_STATUS_NO_SUCH_ALIAS;
 
@@ -608,35 +605,30 @@
 	*sids = NULL;
 	*num = 0;
 
-	state.alias = alias;
-	state.sids = sids;
-	state.num = num;
+	closure.alias = alias;
+	closure.sids = sids;
+	closure.num = num;
 
-	db->traverse_read(db, collect_aliasmem, &state);
+	tdb_traverse(tdb, collect_aliasmem, &closure);
 	return NT_STATUS_OK;
 }
 
-static NTSTATUS del_aliasmem(const DOM_SID *alias, const DOM_SID *member)
+ NTSTATUS del_aliasmem(const DOM_SID *alias, const DOM_SID *member)
 {
-	NTSTATUS status;
+	NTSTATUS result;
 	DOM_SID *sids;
 	size_t i, num;
-	bool found = False;
+	BOOL found = False;
 	char *member_string;
-	char *key;
+	TDB_DATA kbuf, dbuf;
+	pstring key;
 	fstring sid_string;
 
-	if (db->transaction_start(db) != 0) {
-		DEBUG(0, ("transaction_start failed\n"));
-		return NT_STATUS_INTERNAL_DB_CORRUPTION;
-	}
+	result = alias_memberships(member, 1, &sids, &num);
 
-	status = alias_memberships(member, 1, &sids, &num);
+	if (!NT_STATUS_IS_OK(result))
+		return result;
 
-	if (!NT_STATUS_IS_OK(status)) {
-		goto cancel;
-	}
-
 	for (i=0; i<num; i++) {
 		if (sid_compare(&sids[i], alias) == 0) {
 			found = True;
@@ -646,8 +638,7 @@
 
 	if (!found) {
 		TALLOC_FREE(sids);
-		status = NT_STATUS_MEMBER_NOT_IN_ALIAS;
-		goto cancel;
+		return NT_STATUS_MEMBER_NOT_IN_ALIAS;
 	}
 
 	if (i < num)
@@ -655,90 +646,45 @@
 
 	num -= 1;
 
-	sid_to_fstring(sid_string, member);
+	sid_to_string(sid_string, member);
+	slprintf(key, sizeof(key), "%s%s", MEMBEROF_PREFIX, sid_string);
 
-	key = talloc_asprintf(sids, "%s%s", MEMBEROF_PREFIX, sid_string);
-	if (key == NULL) {
-		TALLOC_FREE(sids);
-		status = NT_STATUS_NO_MEMORY;
-		goto cancel;
-	}
+	kbuf.dsize = strlen(key)+1;
+	kbuf.dptr = key;
 
-	if (num == 0) {
-		status = dbwrap_delete_bystring(db, key);
-		TALLOC_FREE(sids);
-		goto cancel;
-	}
+	if (num == 0)
+		return tdb_delete(tdb, kbuf) == 0 ?
+			NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
 
-	member_string = talloc_strdup(sids, "");
+	member_string = SMB_STRDUP("");
+
 	if (member_string == NULL) {
 		TALLOC_FREE(sids);
-		status = NT_STATUS_NO_MEMORY;
-		goto cancel;
+		return NT_STATUS_NO_MEMORY;
 	}
 
 	for (i=0; i<num; i++) {
+		char *s = member_string;
 
-		sid_to_fstring(sid_string, &sids[i]);
+		sid_to_string(sid_string, &sids[i]);
+		asprintf(&member_string, "%s %s", s, sid_string);
 
-		member_string = talloc_asprintf_append_buffer(
-			member_string, " %s", sid_string);
-
+		SAFE_FREE(s);
 		if (member_string == NULL) {
 			TALLOC_FREE(sids);
-			status = NT_STATUS_NO_MEMORY;
-			goto cancel;
+			return NT_STATUS_NO_MEMORY;
 		}
 	}
 
-	status = dbwrap_store_bystring(
-		db, key, string_term_tdb_data(member_string), 0);
+	dbuf.dsize = strlen(member_string)+1;
+	dbuf.dptr = member_string;
 
+	result = tdb_store(tdb, kbuf, dbuf, 0) == 0 ?
+		NT_STATUS_OK : NT_STATUS_ACCESS_DENIED;
+
 	TALLOC_FREE(sids);
+	SAFE_FREE(member_string);
 
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10, ("dbwrap_store_bystring failed: %s\n",
-			   nt_errstr(status)));
-		goto cancel;
-	}
-
-	if (db->transaction_commit(db) != 0) {
-		DEBUG(0, ("transaction_commit failed\n"));
-		status = NT_STATUS_INTERNAL_DB_CORRUPTION;
-		goto cancel;
-	}
-
-	return NT_STATUS_OK;
-
- cancel:
-	if (db->transaction_cancel(db) != 0) {
-		smb_panic("transaction_cancel failed");
-	}
-	return status;
+	return result;
 }
 
-static const struct mapping_backend tdb_backend = {
-	.add_mapping_entry         = add_mapping_entry,
-	.get_group_map_from_sid    = get_group_map_from_sid,
-	.get_group_map_from_gid    = get_group_map_from_gid,
-	.get_group_map_from_ntname = get_group_map_from_ntname,
-	.group_map_remove          = group_map_remove,
-	.enum_group_mapping        = enum_group_mapping,
-	.one_alias_membership      = one_alias_membership,
-	.add_aliasmem              = add_aliasmem,
-	.del_aliasmem              = del_aliasmem,
-	.enum_aliasmem             = enum_aliasmem	
-};
-
-/*
-  initialise the tdb mapping backend
- */
-const struct mapping_backend *groupdb_tdb_init(void)
-{
-	if (!init_group_mapping()) {
-		DEBUG(0,("Failed to initialise tdb mapping backend\n"));
-		return NULL;
-	}
-
-	return &tdb_backend;
-}

Modified: branches/samba/upstream/source/include/MacExtensions.h
===================================================================
--- branches/samba/upstream/source/include/MacExtensions.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/MacExtensions.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
     
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 #ifndef _MAC_EXTENSIONS_H
 #define _MAC_EXTENSIONS_H

Modified: branches/samba/upstream/source/include/ads.h
===================================================================
--- branches/samba/upstream/source/include/ads.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/ads.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,42 +10,20 @@
 	WB_POSIX_MAP_UNKNOWN    = -1,
 	WB_POSIX_MAP_TEMPLATE 	= 0, 
 	WB_POSIX_MAP_SFU 	= 1, 
-	WB_POSIX_MAP_SFU20 	= 2, 
-	WB_POSIX_MAP_RFC2307 	= 3,
-	WB_POSIX_MAP_UNIXINFO	= 4
+	WB_POSIX_MAP_RFC2307 	= 2,
+	WB_POSIX_MAP_UNIXINFO	= 3
 };
 
-/* there are 5 possible types of errors the ads subsystem can produce */
-enum ads_error_type {ENUM_ADS_ERROR_KRB5, ENUM_ADS_ERROR_GSS, 
-		     ENUM_ADS_ERROR_LDAP, ENUM_ADS_ERROR_SYSTEM, ENUM_ADS_ERROR_NT};
-
 typedef struct {
-	enum ads_error_type error_type;
-	union err_state{		
-		int rc;
-		NTSTATUS nt_status;
-	} err;
-	/* For error_type = ENUM_ADS_ERROR_GSS minor_status describe GSS API error */
-	/* Where rc represents major_status of GSS API error */
-	int minor_status;
-} ADS_STATUS;
-
-struct ads_struct;
-
-struct ads_saslwrap_ops {
-	const char *name;
-	ADS_STATUS (*wrap)(struct ads_struct *, uint8 *buf, uint32 len);
-	ADS_STATUS (*unwrap)(struct ads_struct *);
-	void (*disconnect)(struct ads_struct *);
-};
-
-enum ads_saslwrap_type {
-	ADS_SASLWRAP_TYPE_PLAIN = 1,
-	ADS_SASLWRAP_TYPE_SIGN = 2,
-	ADS_SASLWRAP_TYPE_SEAL = 4
-};
-
-typedef struct ads_struct {
+#ifdef HAVE_LDAP
+	LDAP *ld;
+#else
+	void *ld; /* the active ldap structure */
+#endif
+	struct in_addr ldap_ip; /* the ip of the active connection, if any */
+	time_t last_attempt; /* last attempt to reconnect */
+	int ldap_port;
+	
 	int is_mine;	/* do I own this structure's memory? */
 	
 	/* info needed to find the server */
@@ -79,47 +57,7 @@
 		char *client_site_name;
 		time_t current_time;
 		int tried_closest_dc;
-		char *schema_path;
-		char *config_path;
 	} config;
-
-	/* info about the current LDAP connection */
-#ifdef HAVE_LDAP
-	struct {
-		LDAP *ld;
-		struct sockaddr_storage ss; /* the ip of the active connection, if any */
-		time_t last_attempt; /* last attempt to reconnect */
-		int port;
-
-		enum ads_saslwrap_type wrap_type;
-
-#ifdef HAVE_LDAP_SASL_WRAPPING
-		Sockbuf_IO_Desc *sbiod; /* lowlevel state for LDAP wrapping */
-#endif /* HAVE_LDAP_SASL_WRAPPING */
-		TALLOC_CTX *mem_ctx;
-		const struct ads_saslwrap_ops *wrap_ops;
-		void *wrap_private_data;
-		struct {
-			uint32 ofs;
-			uint32 needed;
-			uint32 left;
-#define        ADS_SASL_WRAPPING_IN_MAX_WRAPPED        0x0FFFFFFF
-			uint32 max_wrapped;
-			uint32 min_wrapped;
-			uint32 size;
-			uint8 *buf;
-		} in;
-		struct {
-			uint32 ofs;
-			uint32 left;
-#define        ADS_SASL_WRAPPING_OUT_MAX_WRAPPED       0x00A00000
-			uint32 max_unwrapped;
-			uint32 sig_size;
-			uint32 size;
-			uint8 *buf;
-		} out;
-	} ldap;
-#endif /* HAVE_LDAP */
 } ADS_STRUCT;
 
 /* used to remember the names of the posix attributes in AD */
@@ -134,7 +72,21 @@
 };
 
 
+/* there are 5 possible types of errors the ads subsystem can produce */
+enum ads_error_type {ENUM_ADS_ERROR_KRB5, ENUM_ADS_ERROR_GSS, 
+		     ENUM_ADS_ERROR_LDAP, ENUM_ADS_ERROR_SYSTEM, ENUM_ADS_ERROR_NT};
 
+typedef struct {
+	enum ads_error_type error_type;
+	union err_state{		
+		int rc;
+		NTSTATUS nt_status;
+	} err;
+	/* For error_type = ENUM_ADS_ERROR_GSS minor_status describe GSS API error */
+	/* Where rc represents major_status of GSS API error */
+	int minor_status;
+} ADS_STATUS;
+
 #ifdef HAVE_ADS
 typedef LDAPMod **ADS_MODLIST;
 #else
@@ -169,22 +121,14 @@
 #define ADS_PERMIT_MODIFY_OID 	"1.2.840.113556.1.4.1413"
 #define ADS_ASQ_OID		"1.2.840.113556.1.4.1504"
 #define ADS_EXTENDED_DN_OID	"1.2.840.113556.1.4.529"
-#define ADS_SD_FLAGS_OID	"1.2.840.113556.1.4.801"
 
-/* ldap attribute oids (Services for Unix 3.0, 3.5) */
+/* ldap attribute oids (Services for Unix) */
 #define ADS_ATTR_SFU_UIDNUMBER_OID 	"1.2.840.113556.1.6.18.1.310"
 #define ADS_ATTR_SFU_GIDNUMBER_OID 	"1.2.840.113556.1.6.18.1.311"
 #define ADS_ATTR_SFU_HOMEDIR_OID 	"1.2.840.113556.1.6.18.1.344"
 #define ADS_ATTR_SFU_SHELL_OID 		"1.2.840.113556.1.6.18.1.312"
 #define ADS_ATTR_SFU_GECOS_OID 		"1.2.840.113556.1.6.18.1.337"
 
-/* ldap attribute oids (Services for Unix 2.0) */
-#define ADS_ATTR_SFU20_UIDNUMBER_OID	"1.2.840.113556.1.4.7000.187.70"
-#define ADS_ATTR_SFU20_GIDNUMBER_OID	"1.2.840.113556.1.4.7000.187.71"
-#define ADS_ATTR_SFU20_HOMEDIR_OID	"1.2.840.113556.1.4.7000.187.106"
-#define ADS_ATTR_SFU20_SHELL_OID	"1.2.840.113556.1.4.7000.187.72"
-#define ADS_ATTR_SFU20_GECOS_OID 	"1.2.840.113556.1.4.7000.187.97"
-
 /* ldap attribute oids (RFC2307) */
 #define ADS_ATTR_RFC2307_UIDNUMBER_OID	"1.3.6.1.1.1.1.0"
 #define ADS_ATTR_RFC2307_GIDNUMBER_OID	"1.3.6.1.1.1.1.1"
@@ -305,11 +249,6 @@
 		GROUP_TYPE_ACCOUNT_GROUP| \
 		GROUP_TYPE_SECURITY_ENABLED \
 		)
-#define GTYPE_SECURITY_UNIVERSAL_GROUP (	/* 0x80000008 -2147483656 */ \
-		GROUP_TYPE_UNIVERSAL_GROUP| \
-		GROUP_TYPE_SECURITY_ENABLED \
-		)
-
 #define GTYPE_DISTRIBUTION_GLOBAL_GROUP		0x00000002	/* 2 */
 #define GTYPE_DISTRIBUTION_DOMAIN_LOCAL_GROUP	0x00000004	/* 4 */
 #define GTYPE_DISTRIBUTION_UNIVERSAL_GROUP	0x00000008	/* 8 */
@@ -319,15 +258,17 @@
 #define ADS_DNS_DOMAIN     0x40000000  /* DomainName is a DNS name */
 #define ADS_DNS_FOREST     0x80000000  /* DnsForestName is a DNS name */
 
+/* DomainControllerAddressType */
+#define ADS_INET_ADDRESS      0x00000001
+#define ADS_NETBIOS_ADDRESS   0x00000002
+
+
 /* ads auth control flags */
 #define ADS_AUTH_DISABLE_KERBEROS 0x01
 #define ADS_AUTH_NO_BIND          0x02
 #define ADS_AUTH_ANON_BIND        0x04
 #define ADS_AUTH_SIMPLE_BIND      0x08
 #define ADS_AUTH_ALLOW_NTLMSSP    0x10
-#define ADS_AUTH_SASL_SIGN        0x20
-#define ADS_AUTH_SASL_SEAL        0x40
-#define ADS_AUTH_SASL_FORCE       0x80
 
 /* Kerberos environment variable names */
 #define KRB5_ENV_CCNAME "KRB5CCNAME"
@@ -357,12 +298,6 @@
 
 #ifdef HAVE_KRB5
 typedef struct {
-	NTSTATUS ntstatus;
-	uint32 unknown1;
-	uint32 unknown2; /* 0x00000001 */
-} KRB5_EDATA_NTSTATUS;
-
-typedef struct {
 #if defined(HAVE_MAGIC_IN_KRB5_ADDRESS) && defined(HAVE_ADDRTYPE_IN_KRB5_ADDRESS) /* MIT */
 	krb5_address **addrs;
 #elif defined(HAVE_KRB5_ADDRESSES) /* Heimdal */
@@ -387,15 +322,6 @@
 	int critical;
 } ads_control;
 
-#define ADS_EXTENDED_RIGHT_APPLY_GROUP_POLICY "edacfd8f-ffb3-11d1-b41d-00a0c968f939"
-
 #define ADS_IGNORE_PRINCIPAL "not_defined_in_RFC4178 at please_ignore"
 
-/* Settings for the domainFunctionality attribute in the rootDSE */
-
-#define DS_DOMAIN_FUNCTION_2000		0
-#define DS_DOMAIN_FUCNTION_2003_MIXED	1
-#define DS_DOMAIN_FUNCTION_2003		2
-#define DS_DOMAIN_FUNCTION_2008		3
-
 #endif	/* _INCLUDE_ADS_H_ */

Copied: branches/samba/upstream/source/include/ads_cldap.h (from rev 1928, branches/samba/upstream/source/include/ads_cldap.h)
===================================================================
--- branches/samba/upstream/source/include/ads_cldap.h	                        (rev 0)
+++ branches/samba/upstream/source/include/ads_cldap.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,61 @@
+/* 
+   Samba Unix/Linux SMB client library 
+   net ads cldap functions 
+   Copyright (C) 2001 Andrew Tridgell (tridge at samba.org)
+   Copyright (C) 2003 Jim McDonough (jmcd at us.ibm.com)
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  
+*/
+
+#ifndef _INCLUDE_ADS_CLDAP_H_
+#define _INCLUDE_ADS_CLDAP_H_
+
+#define MAX_DNS_LABEL 255 + 1
+
+struct cldap_netlogon_reply {
+	uint32 type;
+	uint32 flags;
+	UUID_FLAT guid;
+
+	char forest[MAX_DNS_LABEL];
+	char domain[MAX_DNS_LABEL];
+	char hostname[MAX_DNS_LABEL];
+
+	char netbios_domain[MAX_DNS_LABEL];
+	char netbios_hostname[MAX_DNS_LABEL];
+
+	char unk[MAX_DNS_LABEL];
+	char user_name[MAX_DNS_LABEL];
+	char server_site_name[MAX_DNS_LABEL];
+	char client_site_name[MAX_DNS_LABEL];
+
+	uint32 version;
+	uint16 lmnt_token;
+	uint16 lm20_token;
+};
+
+/* Mailslot or cldap getdcname response flags */
+#define ADS_PDC            0x00000001  /* DC is PDC */
+#define ADS_GC             0x00000004  /* DC is a GC of forest */
+#define ADS_LDAP           0x00000008  /* DC is an LDAP server */
+#define ADS_DS             0x00000010  /* DC supports DS */
+#define ADS_KDC            0x00000020  /* DC is running KDC */
+#define ADS_TIMESERV       0x00000040  /* DC is running time services */
+#define ADS_CLOSEST        0x00000080  /* DC is closest to client */
+#define ADS_WRITABLE       0x00000100  /* DC has writable DS */
+#define ADS_GOOD_TIMESERV  0x00000200  /* DC has hardware clock (and running time) */
+#define ADS_NDNC           0x00000400  /* DomainName is non-domain NC serviced by LDAP server */
+
+#endif /* _INCLUDE_ADS_CLDAP_H_ */

Modified: branches/samba/upstream/source/include/ads_dns.h
===================================================================
--- branches/samba/upstream/source/include/ads_dns.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/ads_dns.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #ifndef _ADS_DNS_H
@@ -36,7 +37,7 @@
 	uint16 in_class;
 	uint32 ttl;
 	uint16 rdatalen;
-	uint8 *rdata;
+	uint8 *rdata;	
 };
 
 /* SRV records */
@@ -47,14 +48,14 @@
 	uint16 weight;
 	uint16 port;
 	size_t num_ips;
-	struct sockaddr_storage *ss_s;	/* support multi-homed hosts */
+	struct in_addr *ips;	/* support multi-homed hosts */
 };
 
 /* NS records */
 
 struct dns_rr_ns {
 	const char *hostname;
-	struct sockaddr_storage ss;
+	struct in_addr ip;
 };
 
 

Modified: branches/samba/upstream/source/include/ads_protos.h
===================================================================
--- branches/samba/upstream/source/include/ads_protos.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/ads_protos.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -17,15 +17,15 @@
 			      char **current_strings,
 			      const char **next_attribute,
 			      size_t *num_strings,
-			      bool *more_strings);
-bool ads_pull_uint32(ADS_STRUCT *ads, LDAPMessage *msg, const char *field,
+			      BOOL *more_strings);
+BOOL ads_pull_uint32(ADS_STRUCT *ads, LDAPMessage *msg, const char *field,
 		     uint32 *v);
-bool ads_pull_guid(ADS_STRUCT *ads, LDAPMessage *msg, struct GUID *guid);
-bool ads_pull_sid(ADS_STRUCT *ads, LDAPMessage *msg, const char *field,
+BOOL ads_pull_guid(ADS_STRUCT *ads, LDAPMessage *msg, struct GUID *guid);
+BOOL ads_pull_sid(ADS_STRUCT *ads, LDAPMessage *msg, const char *field,
 		  DOM_SID *sid);
 int ads_pull_sids(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx,
 		  LDAPMessage *msg, const char *field, DOM_SID **sids);
-bool ads_pull_sd(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx,
+BOOL ads_pull_sd(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx,
 		 LDAPMessage *msg, const char *field, SEC_DESC **sd);
 char *ads_pull_username(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx,
 			LDAPMessage *msg);
@@ -76,12 +76,6 @@
 					const char *dn, 
 					const char **attrs,
 					enum ads_extended_dn_flags flags);
-ADS_STATUS ads_search_retry_extended_dn_ranged(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx, 
-						const char *dn, 
-						const char **attrs,
-						enum ads_extended_dn_flags flags,
-						char ***strings,
-						size_t *num_strings);
 ADS_STATUS ads_search_retry_sid(ADS_STRUCT *ads, LDAPMessage **res, 
 				const DOM_SID *sid,
 				const char **attrs);
@@ -92,7 +86,7 @@
 LDAPMessage *ads_first_message(ADS_STRUCT *ads, LDAPMessage *res);
 LDAPMessage *ads_next_message(ADS_STRUCT *ads, LDAPMessage *res);
 void ads_process_results(ADS_STRUCT *ads, LDAPMessage *res,
-			 bool (*fn)(ADS_STRUCT *,char *, void **, void *),
+			 BOOL(*fn)(char *, void **, void *),
 			 void *data_area);
 void ads_dump(ADS_STRUCT *ads, LDAPMessage *res);
 
@@ -101,22 +95,3 @@
 			 LDAPMessage *res,
 			 const char *gpo_dn,
 			 struct GROUP_POLICY_OBJECT *gpo);
-ADS_STATUS ads_search_retry_dn_sd_flags(ADS_STRUCT *ads, LDAPMessage **res, 
-					 uint32 sd_flags,
-					 const char *dn, 
-					 const char **attrs);
-ADS_STATUS ads_do_search_all_sd_flags(ADS_STRUCT *ads, const char *bind_path,
-				       int scope, const char *expr,
-				       const char **attrs, uint32 sd_flags, 
-				       LDAPMessage **res);
-ADS_STATUS ads_get_tokensids(ADS_STRUCT *ads,
-			      TALLOC_CTX *mem_ctx,
-			      const char *dn,
-			      DOM_SID *user_sid,
-			      DOM_SID *primary_group_sid,
-			      DOM_SID **sids,
-			      size_t *num_sids);
-ADS_STATUS ads_get_joinable_ous(ADS_STRUCT *ads,
-				TALLOC_CTX *mem_ctx,
-				char ***ous,
-				size_t *num_ous);

Modified: branches/samba/upstream/source/include/adt_tree.h
===================================================================
--- branches/samba/upstream/source/include/adt_tree.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/adt_tree.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -14,12 +14,19 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #ifndef ADT_TREE_H
 #define ADT_TREE_H
 
+#ifndef _UPPER_BOOL
+typedef int BOOL;
+#define _UPPER_BOOL  
+#endif
+
+
 /* data structure used to build the tree */
 
 typedef struct _tree_node {
@@ -47,7 +54,7 @@
 
 /* add a new path component */
 
-WERROR        pathtree_add( SORTED_TREE *tree, const char *path, void *data_p );
+BOOL          pathtree_add( SORTED_TREE *tree, const char *path, void *data_p );
 
 /* search path */
 

Modified: branches/samba/upstream/source/include/asn_1.h
===================================================================
--- branches/samba/upstream/source/include/asn_1.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/asn_1.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _ASN_1_H
@@ -31,7 +32,7 @@
 	size_t length;
 	off_t ofs;
 	struct nesting *nesting;
-	bool has_error;
+	BOOL has_error;
 } ASN1_DATA;
 
 

Deleted: branches/samba/upstream/source/include/async_req.h
===================================================================
--- branches/samba/upstream/source/include/async_req.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/async_req.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,96 +0,0 @@
-/*
-   Unix SMB/CIFS implementation.
-   Infrastructure for async requests
-   Copyright (C) Volker Lendecke 2008
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef __ASYNC_REQ_H__
-#define __ASYNC_REQ_H__
-
-#include "includes.h"
-
-/*
- * An async request moves between the following 4 states.
- */
-enum async_req_state {
-	ASYNC_REQ_INIT,		/* we are creating the request */
-	ASYNC_REQ_IN_PROGRESS,	/* we are waiting the request to complete */
-	ASYNC_REQ_DONE,		/* the request is finished */
-	ASYNC_REQ_ERROR };	/* an error has occured */
-
-struct async_req {
-	/* the external state - will be queried by the caller */
-	enum async_req_state state;
-
-	/* a private pointer for use by the async function implementation */
-	void *private_data;
-
-	/* print yourself, for debugging purposes */
-	char *(*print)(TALLOC_CTX *mem_ctx, struct async_req *);
-
-	/* status code when finished */
-	NTSTATUS status;
-
-	/* the event context we are using */
-	struct event_context *event_ctx;
-
-	/* information on what to do on completion */
-	struct {
-		void (*fn)(struct async_req *);
-		void *priv;
-	} async;
-};
-
-/*
- * Print an async_req structure for debugging purposes
- */
-char *async_req_print(TALLOC_CTX *mem_ctx, struct async_req *req);
-
-/*
- * Create an async request
- */
-struct async_req *async_req_new(TALLOC_CTX *mem_ctx, struct event_context *ev);
-
-/*
- * An async request has successfully finished, invoke the callback
- */
-void async_req_done(struct async_req *req);
-
-/*
- * An async request has seen an error, invoke the callback
- */
-void async_req_error(struct async_req *req, NTSTATUS status);
-
-/*
- * If a request is finished or ends in error even before it has the chance to
- * trigger the event loop, post a status. This creates an immediate timed
- * event to call the async function if there is any.
- */
-bool async_post_status(struct async_req *req, NTSTATUS status);
-
-/*
- * Convenience helper to easily check alloc failure within a callback.
- *
- * Call pattern would be
- * p = talloc(mem_ctx, bla);
- * if (async_req_nomem(p, req)) {
- *	return;
- * }
- *
- */
-bool async_req_nomem(const void *p, struct async_req *req);
-
-#endif

Deleted: branches/samba/upstream/source/include/async_smb.h
===================================================================
--- branches/samba/upstream/source/include/async_smb.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/async_smb.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,62 +0,0 @@
-/*
-   Unix SMB/CIFS implementation.
-   Infrastructure for async SMB client requests
-   Copyright (C) Volker Lendecke 2008
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-
-/*
- * Create a fresh async smb request
- */
-
-struct async_req *cli_request_new(TALLOC_CTX *mem_ctx,
-				  struct event_context *ev,
-				  struct cli_state *cli,
-				  uint8_t num_words, size_t num_bytes,
-				  struct cli_request **preq);
-
-/*
- * Convenience function to get the SMB part out of an async_req
- */
-
-struct cli_request *cli_request_get(struct async_req *req);
-
-/*
- * Fetch an error out of a NBT packet
- */
-
-NTSTATUS cli_pull_error(char *buf);
-
-/*
- * Compatibility helper for the sync APIs: Fake NTSTATUS in cli->inbuf
- */
-
-void cli_set_error(struct cli_state *cli, NTSTATUS status);
-
-/*
- * Create a temporary event context for use in the sync helper functions
- */
-
-struct cli_tmp_event *cli_tmp_event_ctx(TALLOC_CTX *mem_ctx,
-					struct cli_state *cli);
-
-/*
- * Attach an event context permanently to a cli_struct
- */
-
-NTSTATUS cli_add_event_ctx(struct cli_state *cli,
-			   struct event_context *event_ctx);

Modified: branches/samba/upstream/source/include/auth.h
===================================================================
--- branches/samba/upstream/source/include/auth.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/auth.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 typedef struct auth_usersupplied_info {
@@ -26,9 +27,9 @@
 	DATA_BLOB nt_interactive_pwd;
  	DATA_BLOB plaintext_password;
 	
-	bool encrypted;
+	BOOL encrypted;
 	
-	bool was_mapped;	      /* Did the username map actually match? */
+	BOOL was_mapped;	      /* Did the username map actually match? */
 	char *client_domain;          /* domain name string */
 	char *domain;                 /* domain name after mapping */
 	char *internal_username;      /* username after mapping */
@@ -41,7 +42,7 @@
 } auth_usersupplied_info;
 
 typedef struct auth_serversupplied_info {
-	bool guest;
+	BOOL guest;
 
 	DOM_SID *sids; 	/* These SIDs are preliminary between
 			   check_ntlm_password and the token creation. */
@@ -67,7 +68,7 @@
 	
 	void *pam_handle;
 
-	bool was_mapped;	/* Did the username map match? */
+	BOOL was_mapped;	/* Did the username map match? */
 	char *unix_name;
 	
 } auth_serversupplied_info;
@@ -78,7 +79,7 @@
 	/* Who set this up in the first place? */ 
 	const char *challenge_set_by; 
 
-	bool challenge_may_be_modified;
+	BOOL challenge_may_be_modified;
 
 	struct auth_methods *challenge_set_method; 
 	/* What order are the various methods in?   Try to stop it changing under us */ 
@@ -114,7 +115,13 @@
 	
 	/* Used to keep tabs on things like the cli for SMB server authentication */
 	void *private_data;
+	
+	/* Function to clean up the above arbitary structure */
+	void (*free_private_data)(void **private_data);
 
+	/* Function to send a keepalive message on the above structure */
+	void (*send_keepalive)(void **private_data);
+
 } auth_methods;
 
 typedef NTSTATUS (*auth_init_function)(struct auth_context *, const char *, struct auth_methods **);

Modified: branches/samba/upstream/source/include/authdata.h
===================================================================
--- branches/samba/upstream/source/include/authdata.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/authdata.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,13 +15,15 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _AUTHDATA_H
-#define _AUTHDATA_H
+#define _AUTHDATA_H 
 
 #include "rpc_misc.h"
+#include "rpc_netlogon.h"
 
 #define PAC_TYPE_LOGON_INFO 1
 #define PAC_TYPE_SERVER_CHECKSUM 6
@@ -36,4 +38,136 @@
 #define KRB5_AUTHDATA_IF_RELEVANT 1
 #endif
 
+
+typedef struct pac_logon_name {
+	NTTIME logon_time;
+	uint16 len;
+	uint8 *username; /* Actually always little-endian. might not be null terminated, so not UNISTR */
+} PAC_LOGON_NAME;
+
+typedef struct pac_signature_data {
+	uint32 type;
+	RPC_DATA_BLOB signature; /* this not the on-wire-format (!) */
+} PAC_SIGNATURE_DATA;
+
+typedef struct group_membership {
+	uint32 rid;
+	uint32 attrs;
+} GROUP_MEMBERSHIP;
+
+typedef struct group_membership_array {
+	uint32 count;
+	GROUP_MEMBERSHIP *group_membership;
+} GROUP_MEMBERSHIP_ARRAY;
+
+#if 0 /* Unused, replaced by NET_USER_INFO_3 - Guenther */
+
+typedef struct krb_sid_and_attrs {
+	uint32 sid_ptr;
+	uint32 attrs;
+	DOM_SID2 *sid;
+} KRB_SID_AND_ATTRS;
+
+typedef struct krb_sid_and_attr_array {
+	uint32 count;
+	KRB_SID_AND_ATTRS *krb_sid_and_attrs;
+} KRB_SID_AND_ATTR_ARRAY;
+	
+
+/* This is awfully similar to a samr_user_info_23, but not identical.
+   Many of the field names have been swiped from there, because it is
+   so similar that they are likely the same, but many have been verified.
+   Some are in a different order, though... */
+typedef struct pac_logon_info {	
+	NTTIME logon_time;            /* logon time */
+	NTTIME logoff_time;           /* logoff time */
+	NTTIME kickoff_time;          /* kickoff time */
+	NTTIME pass_last_set_time;    /* password last set time */
+	NTTIME pass_can_change_time;  /* password can change time */
+	NTTIME pass_must_change_time; /* password must change time */
+
+	UNIHDR hdr_user_name;    /* user name unicode string header */
+	UNIHDR hdr_full_name;    /* user's full name unicode string header */
+	UNIHDR hdr_logon_script; /* these last 4 appear to be in a different */
+	UNIHDR hdr_profile_path; /* order than in the info23 */
+	UNIHDR hdr_home_dir;    
+	UNIHDR hdr_dir_drive;   
+
+	uint16 logon_count; /* number of times user has logged onto domain */
+	uint16 bad_password_count;	/* samba4 idl */
+
+	uint32 user_rid;
+	uint32 group_rid;
+	uint32 group_count;
+	uint32 group_membership_ptr;
+	uint32 user_flags;
+
+	uint8 session_key[16];		/* samba4 idl */
+	UNIHDR hdr_dom_controller;
+	UNIHDR hdr_dom_name;
+
+	uint32 ptr_dom_sid;
+
+	uint8 lm_session_key[8];	/* samba4 idl */
+	uint32 acct_flags;		/* samba4 idl */
+	uint32 unknown[7];
+
+	uint32 sid_count;
+	uint32 ptr_extra_sids;
+
+	uint32 ptr_res_group_dom_sid;
+	uint32 res_group_count;
+	uint32 ptr_res_groups;
+
+	UNISTR2 uni_user_name;    /* user name unicode string header */
+	UNISTR2 uni_full_name;    /* user's full name unicode string header */
+	UNISTR2 uni_logon_script; /* these last 4 appear to be in a different*/
+	UNISTR2 uni_profile_path; /* order than in the info23 */
+	UNISTR2 uni_home_dir;    
+	UNISTR2 uni_dir_drive;   
+	UNISTR2 uni_dom_controller;
+	UNISTR2 uni_dom_name;
+	DOM_SID2 dom_sid;
+	GROUP_MEMBERSHIP_ARRAY groups;
+	KRB_SID_AND_ATTR_ARRAY extra_sids;
+	DOM_SID2 res_group_dom_sid;
+	GROUP_MEMBERSHIP_ARRAY res_groups;
+
+} PAC_LOGON_INFO;
 #endif
+
+typedef struct pac_logon_info {	
+	NET_USER_INFO_3 info3;
+	DOM_SID2 res_group_dom_sid;
+	GROUP_MEMBERSHIP_ARRAY res_groups;
+
+} PAC_LOGON_INFO;
+
+typedef struct pac_info_ctr
+{
+	union
+	{
+		PAC_LOGON_INFO *logon_info;
+		PAC_SIGNATURE_DATA *srv_cksum;
+		PAC_SIGNATURE_DATA *privsrv_cksum;
+		PAC_LOGON_NAME *logon_name;
+	} pac;
+} PAC_INFO_CTR;
+
+typedef struct pac_buffer {
+	uint32 type;
+	uint32 size;
+	uint32 offset;
+	uint32 offsethi;
+	PAC_INFO_CTR *ctr;
+	uint32 pad;
+} PAC_BUFFER;
+
+typedef struct pac_data {
+	uint32 num_buffers;
+	uint32 version;
+	PAC_BUFFER *pac_buffer;
+} PAC_DATA;
+
+
+#endif

Modified: branches/samba/upstream/source/include/byteorder.h
===================================================================
--- branches/samba/upstream/source/include/byteorder.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/byteorder.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _BYTEORDER_H
@@ -167,10 +168,4 @@
 #define ALIGN4(p,base) ((p) + ((4 - (PTR_DIFF((p), (base)) & 3)) & 3))
 #define ALIGN2(p,base) ((p) + ((2 - (PTR_DIFF((p), (base)) & 1)) & 1))
 
-/* 64 bit macros */
-#define BVAL(p, ofs) (IVAL(p,ofs) | (((uint64_t)IVAL(p,(ofs)+4)) << 32))
-#define BVALS(p, ofs) ((int64_t)BVAL(p,ofs))
-#define SBVAL(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,((uint64_t)(v))>>32))
-#define SBVALS(p, ofs, v) (SBVAL(p,ofs,(uint64_t)v))
-
 #endif /* _BYTEORDER_H */

Modified: branches/samba/upstream/source/include/charset.h
===================================================================
--- branches/samba/upstream/source/include/charset.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/charset.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /* this defines the charset types used in samba */

Modified: branches/samba/upstream/source/include/client.h
===================================================================
--- branches/samba/upstream/source/include/client.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/client.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _CLIENT_H
@@ -27,17 +28,14 @@
    will be a multiple of the page size on almost any system */
 #define CLI_BUFFER_SIZE (0xFFFF)
 #define CLI_SAMBA_MAX_LARGE_READX_SIZE (127*1024) /* Works for Samba servers */
-#define CLI_SAMBA_MAX_LARGE_WRITEX_SIZE (127*1024) /* Works for Samba servers */
 #define CLI_WINDOWS_MAX_LARGE_READX_SIZE ((64*1024)-2) /* Windows servers are broken.... */
-#define CLI_WINDOWS_MAX_LARGE_WRITEX_SIZE ((64*1024)-2) /* Windows servers are broken.... */
-#define CLI_SAMBA_MAX_POSIX_LARGE_READX_SIZE (0xFFFF00) /* 24-bit len. */
-#define CLI_SAMBA_MAX_POSIX_LARGE_WRITEX_SIZE (0xFFFF00) /* 24-bit len. */
 
 /*
  * These definitions depend on smb.h
  */
 
-struct print_job_info {
+struct print_job_info
+{
 	uint16 id;
 	uint16 priority;
 	size_t size;
@@ -81,38 +79,10 @@
 	struct dcinfo *dc;
 };
 
-/* Transport encryption state. */
-enum smb_trans_enc_type {
-		SMB_TRANS_ENC_NTLM
-#if defined(HAVE_GSSAPI) && defined(HAVE_KRB5)
-		, SMB_TRANS_ENC_GSS
-#endif
-};
-
-#if defined(HAVE_GSSAPI) && defined(HAVE_KRB5)
-struct smb_tran_enc_state_gss {
-        gss_ctx_id_t gss_ctx;
-        gss_cred_id_t creds;
-};
-#endif
-
-struct smb_trans_enc_state {
-        enum smb_trans_enc_type smb_enc_type;
-        uint16 enc_ctx_num;
-        bool enc_on;
-        union {
-                NTLMSSP_STATE *ntlmssp_state;
-#if defined(HAVE_GSSAPI) && defined(HAVE_KRB5)
-                struct smb_tran_enc_state_gss *gss_state;
-#endif
-        } s;
-};
-
 struct cli_state {
 	int port;
 	int fd;
-	/* Last read or write error. */
-	enum smb_read_errors smb_rw_error;
+	int smb_rw_error; /* Copy of last read or write error. */
 	uint16 cnum;
 	uint16 pid;
 	uint16 mid;
@@ -123,7 +93,6 @@
 	int privileges;
 
 	fstring desthost;
-	fstring srv_name_slash;
 
 	/* The credentials used to open the cli_state connection. */
 	fstring domain;
@@ -144,7 +113,7 @@
 	struct nmb_name called;
 	struct nmb_name calling;
 	fstring full_dest_host_name;
-	struct sockaddr_storage dest_ss;
+	struct in_addr dest_ip;
 
 	DATA_BLOB secblob; /* cryptkey or negTokenInit */
 	uint32 sesskey;
@@ -160,71 +129,35 @@
 	unsigned int bufsize;
 	int initialised;
 	int win95;
-	bool is_samba;
+	BOOL is_samba;
 	uint32 capabilities;
-	uint32 posix_capabilities;
-	bool dfsroot;
+	BOOL dfsroot;
 
-#if 0
-	TALLOC_CTX *longterm_mem_ctx;
-	TALLOC_CTX *call_mem_ctx;
-#endif
+	TALLOC_CTX *mem_ctx;
 
 	smb_sign_info sign_info;
 
-	struct smb_trans_enc_state *trans_enc_state; /* Setup if we're encrypting SMB's. */
-
-	/* the session key for this CLI, outside
+	/* the session key for this CLI, outside 
 	   any per-pipe authenticaion */
 	DATA_BLOB user_session_key;
 
 	/* The list of pipes currently open on this connection. */
 	struct rpc_pipe_client *pipe_list;
 
-	bool use_kerberos;
-	bool fallback_after_kerberos;
-	bool use_spnego;
+	BOOL use_kerberos;
+	BOOL fallback_after_kerberos;
+	BOOL use_spnego;
 
-	bool use_oplocks; /* should we use oplocks? */
-	bool use_level_II_oplocks; /* should we use level II oplocks? */
+	BOOL use_oplocks; /* should we use oplocks? */
+	BOOL use_level_II_oplocks; /* should we use level II oplocks? */
 
 	/* a oplock break request handler */
-	bool (*oplock_handler)(struct cli_state *cli, int fnum, unsigned char level);
+	BOOL (*oplock_handler)(struct cli_state *cli, int fnum, unsigned char level);
 
-	bool force_dos_errors;
-	bool case_sensitive; /* False by default. */
-
-	struct event_context *event_ctx;
-	struct fd_event *fd_event;
-	char *evt_inbuf;
-
-	struct cli_request *outstanding_requests;
+	BOOL force_dos_errors;
+	BOOL case_sensitive; /* False by default. */
 };
 
-struct cli_request {
-	struct cli_request *prev, *next;
-	struct async_req *async;
-
-	struct cli_state *cli;
-
-	struct smb_trans_enc_state *enc_state;
-
-	uint16_t mid;
-
-	char *outbuf;
-	size_t sent;
-	char *inbuf;
-
-	union {
-		struct {
-			off_t ofs;
-			size_t size;
-			ssize_t received;
-			uint8_t *rcvbuf;
-		} read;
-	} data;
-};
-
 typedef struct file_info {
 	struct cli_state *cli;
 	SMB_BIG_UINT size;
@@ -235,13 +168,13 @@
 	struct timespec mtime_ts;
 	struct timespec atime_ts;
 	struct timespec ctime_ts;
-	char *name;
+	pstring name;
+	pstring dir;
 	char short_name[13*3]; /* the *3 is to cope with multi-byte */
 } file_info;
 
 #define CLI_FULL_CONNECTION_DONT_SPNEGO 0x0001
 #define CLI_FULL_CONNECTION_USE_KERBEROS 0x0002
 #define CLI_FULL_CONNECTION_ANONYMOUS_FALLBACK 0x0004
-#define CLI_FULL_CONNECTION_FALLBACK_AFTER_KERBEROS 0x0008
 
 #endif /* _CLIENT_H */

Modified: branches/samba/upstream/source/include/clitar.h
===================================================================
--- branches/samba/upstream/source/include/clitar.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/clitar.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  * 
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 3 of the License, or (at your
+ * Free Software Foundation; either version 2 of the License, or (at your
  * option) any later version.
  * 
  * This program is distributed in the hope that it will be useful, but WITHOUT
@@ -14,7 +14,8 @@
  * more details.
  * 
  * You should have received a copy of the GNU General Public License along with
- * this program; if not, see <http://www.gnu.org/licenses/>.  
+ * this program; if not, write to the Free Software Foundation, Inc., 675
+ * Mass Ave, Cambridge, MA 02139, USA.  
  */
 
 #ifndef _CLITAR_H

Modified: branches/samba/upstream/source/include/config.h.in
===================================================================
--- branches/samba/upstream/source/include/config.h.in	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/config.h.in	2008-06-15 01:55:18 UTC (rev 1953)
@@ -18,9 +18,6 @@
 /* Broken RedHat 7.2 system header files */
 #undef BROKEN_REDHAT_7_SYSTEM_HEADERS
 
-/* Broken RHEL5 sys/capability.h */
-#undef BROKEN_RHEL5_SYS_CAP_HEADER
-
 /* Does strndup work correctly */
 #undef BROKEN_STRNDUP
 
@@ -51,9 +48,6 @@
 /* Default unix charset name */
 #undef DEFAULT_UNIX_CHARSET
 
-/* Whether dlopen takes unsigned int flags */
-#undef DLOPEN_TAKES_UNSIGNED_FLAGS
-
 /* Define to check invariants around some common functions */
 #undef DMALLOC_FUNC_CHECK
 
@@ -63,9 +57,6 @@
 /* Define to turn on dmalloc debugging */
 #undef ENABLE_DMALLOC
 
-/* Whether to use fully FHS-compatible paths */
-#undef FHS_COMPATIBLE
-
 /* Whether the host os is FreeBSD */
 #undef FREEBSD
 
@@ -165,6 +156,9 @@
 /* Define to 1 if you have the `asprintf' function. */
 #undef HAVE_ASPRINTF
 
+/* Whether asprintf() is available */
+#undef HAVE_ASPRINTF_DECL
+
 /* Define to 1 if you have the `atexit' function. */
 #undef HAVE_ATEXIT
 
@@ -204,9 +198,6 @@
 /* Define to 1 if you have the `ber_scanf' function. */
 #undef HAVE_BER_SCANF
 
-/* Define to 1 if you have the `ber_sockbuf_add_io' function. */
-#undef HAVE_BER_SOCKBUF_ADD_IO
-
 /* What header to include for iconv() function: biconv.h */
 #undef HAVE_BICONV
 
@@ -307,9 +298,6 @@
 /* Whether we have CUPS */
 #undef HAVE_CUPS
 
-/* Whether to use the Darwin-specific initgroups system call */
-#undef HAVE_DARWIN_INITGROUPS
-
 /* Define to 1 if you have the declaration of `asprintf', and to 0 if you
    don't. */
 #undef HAVE_DECL_ASPRINTF
@@ -361,9 +349,6 @@
    */
 #undef HAVE_DIRENT_H
 
-/* Define to 1 if you have the `dirfd' function. */
-#undef HAVE_DIRFD
-
 /* Define to 1 if you have the `dlclose' function. */
 #undef HAVE_DLCLOSE
 
@@ -379,18 +364,9 @@
 /* Define to 1 if you have the `dlsym' function. */
 #undef HAVE_DLSYM
 
-/* Define to 1 if you have the <dl.h> header file. */
-#undef HAVE_DL_H
-
 /* Define to 1 if you have the <dmapi.h> header file. */
 #undef HAVE_DMAPI_H
 
-/* Define to 1 if you have the `DNSServiceRegister' function. */
-#undef HAVE_DNSSERVICEREGISTER
-
-/* Define to 1 if you have the <dns_sd.h> header file. */
-#undef HAVE_DNS_SD_H
-
 /* struct dqblk .dqb_fsoftlimit */
 #undef HAVE_DQB_FSOFTLIMIT
 
@@ -487,9 +463,6 @@
 /* Define to 1 if you have the `fcvtl' function. */
 #undef HAVE_FCVTL
 
-/* Define to 1 if you have the `fdatasync' function. */
-#undef HAVE_FDATASYNC
-
 /* Define to 1 if you have the `fdelproplist' function. */
 #undef HAVE_FDELPROPLIST
 
@@ -517,12 +490,6 @@
 /* Define to 1 if you have the `fopen64' function. */
 #undef HAVE_FOPEN64
 
-/* Whether the system has freeaddrinfo */
-#undef HAVE_FREEADDRINFO
-
-/* Whether the system has freeifaddrs */
-#undef HAVE_FREEIFADDRS
-
 /* Define to 1 if you have the `free_AP_REQ' function. */
 #undef HAVE_FREE_AP_REQ
 
@@ -577,12 +544,6 @@
 /* Whether there is a __FUNCTION__ macro */
 #undef HAVE_FUNCTION_MACRO
 
-/* Whether the system has gai_strerror */
-#undef HAVE_GAI_STRERROR
-
-/* Whether the system has getaddrinfo */
-#undef HAVE_GETADDRINFO
-
 /* Define to 1 if you have the `getauthuid' function. */
 #undef HAVE_GETAUTHUID
 
@@ -604,36 +565,15 @@
 /* Define to 1 if you have the `getgrent' function. */
 #undef HAVE_GETGRENT
 
-/* Define to 1 if you have the `getgrent_r' function. */
-#undef HAVE_GETGRENT_R
-
-/* Whether getgrent_r() is available */
-#undef HAVE_GETGRENT_R_DECL
-
-/* Define to 1 if you have the `getgrgid_r' function. */
-#undef HAVE_GETGRGID_R
-
 /* Define to 1 if you have the `getgrnam' function. */
 #undef HAVE_GETGRNAM
 
-/* Define to 1 if you have the `getgrnam_r' function. */
-#undef HAVE_GETGRNAM_R
-
 /* Define to 1 if you have the `getgrouplist' function. */
 #undef HAVE_GETGROUPLIST
 
-/* Whether the system has gethostbyname() */
-#undef HAVE_GETHOSTBYNAME
-
-/* Whether the system has getifaddrs */
-#undef HAVE_GETIFADDRS
-
 /* Define to 1 if you have the `getmntent' function. */
 #undef HAVE_GETMNTENT
 
-/* Whether the system has getnameinfo */
-#undef HAVE_GETNAMEINFO
-
 /* Define to 1 if you have the `getnetgrent' function. */
 #undef HAVE_GETNETGRENT
 
@@ -655,15 +595,6 @@
 /* Define to 1 if you have the `getpwent_r' function. */
 #undef HAVE_GETPWENT_R
 
-/* Whether getpwent_r() is available */
-#undef HAVE_GETPWENT_R_DECL
-
-/* Define to 1 if you have the `getpwnam_r' function. */
-#undef HAVE_GETPWNAM_R
-
-/* Define to 1 if you have the `getpwuid_r' function. */
-#undef HAVE_GETPWUID_R
-
 /* Define to 1 if you have the `getrlimit' function. */
 #undef HAVE_GETRLIMIT
 
@@ -724,45 +655,21 @@
 /* Whether HPUX ACLs are available */
 #undef HAVE_HPUX_ACLS
 
-/* Define to 1 if you have the `hstrerror' function. */
-#undef HAVE_HSTRERROR
-
 /* What header to include for iconv() function: iconv.h */
 #undef HAVE_ICONV
 
 /* Whether iface AIX is available */
 #undef HAVE_IFACE_AIX
 
-/* Whether iface getifaddrs is available */
-#undef HAVE_IFACE_GETIFADDRS
-
 /* Whether iface ifconf is available */
 #undef HAVE_IFACE_IFCONF
 
 /* Whether iface ifreq is available */
 #undef HAVE_IFACE_IFREQ
 
-/* Define to 1 if you have the <ifaddrs.h> header file. */
-#undef HAVE_IFADDRS_H
-
-/* Whether the system has if_nametoindex() */
-#undef HAVE_IF_NAMETOINDEX
-
 /* Whether the compiler supports immediate structures */
 #undef HAVE_IMMEDIATE_STRUCTURES
 
-/* Define to 1 if you have the `inet_aton' function. */
-#undef HAVE_INET_ATON
-
-/* Define to 1 if you have the `inet_ntoa' function. */
-#undef HAVE_INET_NTOA
-
-/* Define to 1 if you have the `inet_ntop' function. */
-#undef HAVE_INET_NTOP
-
-/* Define to 1 if you have the `inet_pton' function. */
-#undef HAVE_INET_PTON
-
 /* Define to 1 if you have the `initgroups' function. */
 #undef HAVE_INITGROUPS
 
@@ -793,15 +700,9 @@
 /* Whether we have iPrint */
 #undef HAVE_IPRINT
 
-/* Whether the system has IPv6 support */
-#undef HAVE_IPV6
-
 /* Whether IRIX ACLs are available */
 #undef HAVE_IRIX_ACLS
 
-/* Define to 1 if you have the `isatty' function. */
-#undef HAVE_ISATTY
-
 /* Whether kernel notifies changes */
 #undef HAVE_KERNEL_CHANGE_NOTIFY
 
@@ -814,9 +715,6 @@
 /* Whether the kernel supports share modes */
 #undef HAVE_KERNEL_SHARE_MODES
 
-/* Define to 1 if you have the <keyutils.h> header file. */
-#undef HAVE_KEYUTILS_H
-
 /* Whether to have KRB5 support */
 #undef HAVE_KRB5
 
@@ -856,15 +754,6 @@
 /* Define to 1 if you have the `krb5_enctypes_compatible_keys' function. */
 #undef HAVE_KRB5_ENCTYPES_COMPATIBLE_KEYS
 
-/* Define to 1 if you have the `krb5_enctype_to_string' function. */
-#undef HAVE_KRB5_ENCTYPE_TO_STRING
-
-/* whether krb5_enctype_to_string takes krb5_context argument */
-#undef HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG
-
-/* whether krb5_enctype_to_string takes size_t argument */
-#undef HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG
-
 /* Define to 1 if you have the `krb5_free_data_contents' function. */
 #undef HAVE_KRB5_FREE_DATA_CONTENTS
 
@@ -886,10 +775,6 @@
 /* Define to 1 if you have the `krb5_get_init_creds_opt_free' function. */
 #undef HAVE_KRB5_GET_INIT_CREDS_OPT_FREE
 
-/* Define to 1 if you have the `krb5_get_init_creds_opt_get_error' function.
-   */
-#undef HAVE_KRB5_GET_INIT_CREDS_OPT_GET_ERROR
-
 /* Define to 1 if you have the `krb5_get_init_creds_opt_set_pac_request'
    function. */
 #undef HAVE_KRB5_GET_INIT_CREDS_OPT_SET_PAC_REQUEST
@@ -1017,9 +902,6 @@
 /* Support for LDAP/LBER logging interception */
 #undef HAVE_LBER_LOG_PRINT_FN
 
-/* Define to 1 if you have the `lchown' function. */
-#undef HAVE_LCHOWN
-
 /* Whether ldap is available */
 #undef HAVE_LDAP
 
@@ -1035,9 +917,6 @@
 /* Define to 1 if you have the `ldap_initialize' function. */
 #undef HAVE_LDAP_INITIALIZE
 
-/* Support for SASL wrapping */
-#undef HAVE_LDAP_SASL_WRAPPING
-
 /* Define to 1 if you have the `ldap_set_rebind_proc' function. */
 #undef HAVE_LDAP_SET_REBIND_PROC
 
@@ -1056,9 +935,6 @@
 /* Define to 1 if you have the `crypto' library (-lcrypto). */
 #undef HAVE_LIBCRYPTO
 
-/* Define to 1 if you have the `dns_sd' library (-ldns_sd). */
-#undef HAVE_LIBDNS_SD
-
 /* Define to 1 if you have the `exc' library (-lexc). */
 #undef HAVE_LIBEXC
 
@@ -1077,9 +953,6 @@
 /* Define to 1 if you have the `inet' library (-linet). */
 #undef HAVE_LIBINET
 
-/* Define to 1 if you have the `ipv6' library (-lipv6). */
-#undef HAVE_LIBIPV6
-
 /* Define to 1 if you have the `k5crypto' library (-lk5crypto). */
 #undef HAVE_LIBK5CRYPTO
 
@@ -1137,9 +1010,6 @@
 /* Define to 1 if you have the `link' function. */
 #undef HAVE_LINK
 
-/* Define to 1 if you have the <linux/dqblk_xfs.h> header file. */
-#undef HAVE_LINUX_DQBLK_XFS_H
-
 /* Define to 1 if you have the <linux/inotify.h> header file. */
 #undef HAVE_LINUX_INOTIFY_H
 
@@ -1149,9 +1019,6 @@
 /* Whether Linux readahead is available */
 #undef HAVE_LINUX_READAHEAD
 
-/* Whether Linux splice is available */
-#undef HAVE_LINUX_SPLICE
-
 /* Whether Linux xfs quota support is available */
 #undef HAVE_LINUX_XFS_QUOTAS
 
@@ -1248,12 +1115,6 @@
 /* Define to 1 if you have the <mntent.h> header file. */
 #undef HAVE_MNTENT_H
 
-/* If we can use msg_acctrights for passing file descriptors */
-#undef HAVE_MSGHDR_MSG_ACCTRIGHTS
-
-/* If we can use msg_control for passing file descriptors */
-#undef HAVE_MSGHDR_MSG_CONTROL
-
 /* Define to 1 if you have the `munlock' function. */
 #undef HAVE_MUNLOCK
 
@@ -1272,9 +1133,6 @@
 /* Define to 1 if you have the <netdb.h> header file. */
 #undef HAVE_NETDB_H
 
-/* Define to 1 if you have the <netgroup.h> header file. */
-#undef HAVE_NETGROUP_H
-
 /* Define to 1 if you have the <netinet/in.h> header file. */
 #undef HAVE_NETINET_IN_H
 
@@ -1338,21 +1196,9 @@
 /* Define to 1 if you have the `pam_get_data' function. */
 #undef HAVE_PAM_GET_DATA
 
-/* Define to 1 if you have the <pam/pam_appl.h> header file. */
-#undef HAVE_PAM_PAM_APPL_H
-
-/* Define to 1 if you have the <pam/pam_ext.h> header file. */
-#undef HAVE_PAM_PAM_EXT_H
-
-/* Define to 1 if you have the <pam/pam_modules.h> header file. */
-#undef HAVE_PAM_PAM_MODULES_H
-
 /* Define to 1 if you have the `pam_vsyslog' function. */
 #undef HAVE_PAM_VSYSLOG
 
-/* Define to 1 if you have the <pam/_pam_macros.h> header file. */
-#undef HAVE_PAM__PAM_MACROS_H
-
 /* Defined if struct passwd has pw_age field */
 #undef HAVE_PASSWD_PW_AGE
 
@@ -1395,12 +1241,6 @@
 /* Define to 1 if you have the `printf' function. */
 #undef HAVE_PRINTF
 
-/* whether pthread exists */
-#undef HAVE_PTHREAD
-
-/* Define to 1 if you have the <pthread.h> header file. */
-#undef HAVE_PTHREAD_H
-
 /* Whether putprpwnam is available */
 #undef HAVE_PUTPRPWNAM
 
@@ -1443,9 +1283,6 @@
 /* Define to 1 if you have the `rdchk' function. */
 #undef HAVE_RDCHK
 
-/* Whether readahead() is available */
-#undef HAVE_READAHEAD_DECL
-
 /* Define to 1 if you have the `readdir64' function. */
 #undef HAVE_READDIR64
 
@@ -1497,9 +1334,6 @@
 /* Define to 1 if you have the <rpc/rpc.h> header file. */
 #undef HAVE_RPC_RPC_H
 
-/* Define to 1 if the system has the type `sa_family_t'. */
-#undef HAVE_SA_FAMILY_T
-
 /* Whether mkstemp is secure */
 #undef HAVE_SECURE_MKSTEMP
 
@@ -1611,15 +1445,6 @@
 /* Define to 1 if you have the <shadow.h> header file. */
 #undef HAVE_SHADOW_H
 
-/* Define to 1 if you have the `shl_findsym' function. */
-#undef HAVE_SHL_FINDSYM
-
-/* Define to 1 if you have the `shl_load' function. */
-#undef HAVE_SHL_LOAD
-
-/* Define to 1 if you have the `shl_unload' function. */
-#undef HAVE_SHL_UNLOAD
-
 /* Define to 1 if you have the `shmget' function. */
 #undef HAVE_SHMGET
 
@@ -1650,14 +1475,14 @@
 /* Define to 1 if you have the `snprintf' function. */
 #undef HAVE_SNPRINTF
 
-/* Whether struct sockaddr has a sa_len member */
-#undef HAVE_SOCKADDR_SA_LEN
+/* Whether snprintf() is available */
+#undef HAVE_SNPRINTF_DECL
 
 /* Define to 1 if you have the `socketpair' function. */
 #undef HAVE_SOCKETPAIR
 
-/* Define to 1 if the system has the type `socklen_t'. */
-#undef HAVE_SOCKLEN_T
+/* Whether we have the variable type socklen_t */
+#undef HAVE_SOCKLEN_T_TYPE
 
 /* Whether the sockaddr_in struct has a sin_len property */
 #undef HAVE_SOCK_SIN_LEN
@@ -1665,18 +1490,12 @@
 /* Whether solaris ACLs are available */
 #undef HAVE_SOLARIS_ACLS
 
-/* Whether splice() is available */
-#undef HAVE_SPLICE_DECL
-
 /* Define to 1 if you have the `srand' function. */
 #undef HAVE_SRAND
 
 /* Define to 1 if you have the `srandom' function. */
 #undef HAVE_SRANDOM
 
-/* Defined if struct sockaddr_storage has ss_family field */
-#undef HAVE_SS_FAMILY
-
 /* Define to 1 if you have the <standards.h> header file. */
 #undef HAVE_STANDARDS_H
 
@@ -1794,9 +1613,6 @@
 /* Define to 1 if you have the `strtouq' function. */
 #undef HAVE_STRTOUQ
 
-/* Define to 1 if the system has the type `struct addrinfo'. */
-#undef HAVE_STRUCT_ADDRINFO
-
 /* Whether the 'DIR64' abstract data type is available */
 #undef HAVE_STRUCT_DIR64
 
@@ -1806,27 +1622,12 @@
 /* Whether the flock64 struct is available */
 #undef HAVE_STRUCT_FLOCK64
 
-/* Whether struct ifaddrs is available */
-#undef HAVE_STRUCT_IFADDRS
-
 /* Define to 1 if `method_attrlist' is member of `struct secmethod_table'. */
 #undef HAVE_STRUCT_SECMETHOD_TABLE_METHOD_ATTRLIST
 
 /* Define to 1 if `method_version' is member of `struct secmethod_table'. */
 #undef HAVE_STRUCT_SECMETHOD_TABLE_METHOD_VERSION
 
-/* Define to 1 if the system has the type `struct sockaddr'. */
-#undef HAVE_STRUCT_SOCKADDR
-
-/* Define to 1 if the system has the type `struct sockaddr_in6'. */
-#undef HAVE_STRUCT_SOCKADDR_IN6
-
-/* Define to 1 if `sa_len' is member of `struct sockaddr'. */
-#undef HAVE_STRUCT_SOCKADDR_SA_LEN
-
-/* Define to 1 if the system has the type `struct sockaddr_storage'. */
-#undef HAVE_STRUCT_SOCKADDR_STORAGE
-
 /* Define to 1 if `st_rdev' is member of `struct stat'. */
 #undef HAVE_STRUCT_STAT_ST_RDEV
 
@@ -2082,9 +1883,6 @@
 /* Whether the utmp struct has a property ut_addr */
 #undef HAVE_UT_UT_ADDR
 
-/* Whether the utmp struct has a property ut_addr_v6 */
-#undef HAVE_UT_UT_ADDR_V6
-
 /* Whether the utmp struct has a property ut_exit */
 #undef HAVE_UT_UT_EXIT
 
@@ -2136,6 +1934,9 @@
 /* Define to 1 if you have the `vasprintf' function. */
 #undef HAVE_VASPRINTF
 
+/* Whether vasprintf() is available */
+#undef HAVE_VASPRINTF_DECL
+
 /* Whether va_copy() is available */
 #undef HAVE_VA_COPY
 
@@ -2145,6 +1946,9 @@
 /* Define to 1 if you have the `vsnprintf' function. */
 #undef HAVE_VSNPRINTF
 
+/* Whether vsnprintf() is available */
+#undef HAVE_VSNPRINTF_DECL
+
 /* Define to 1 if you have the `vsyslog' function. */
 #undef HAVE_VSYSLOG
 
@@ -2157,6 +1961,9 @@
 /* Define to 1 if you have the <winsock2.h> header file. */
 #undef HAVE_WINSOCK2_H
 
+/* Define if you have working AF_LOCAL sockets */
+#undef HAVE_WORKING_AF_LOCAL
+
 /* Whether the WRFILE:-keytab is supported */
 #undef HAVE_WRFILE_KEYTAB
 
@@ -2376,9 +2183,6 @@
 /* Define to 1 if you have the `__seekdir' function. */
 #undef HAVE___SEEKDIR
 
-/* Defined if struct sockaddr_storage has __ss_family field */
-#undef HAVE___SS_FAMILY
-
 /* Define to 1 if you have the `__stat' function. */
 #undef HAVE___STAT
 
@@ -2436,9 +2240,6 @@
 /* Number of arguments to ldap_set_rebind_proc */
 #undef LDAP_SET_REBIND_PROC_ARGS
 
-/* LIBREPLACE_NETWORK_CHECKS were used */
-#undef LIBREPLACE_NETWORK_CHECKS
-
 /* Whether the host os is linux */
 #undef LINUX
 
@@ -2457,9 +2258,6 @@
 /* Define to 1 if your C compiler doesn't accept -c and -o together. */
 #undef NO_MINUS_C_MINUS_O
 
-/* Use nss wrapper library */
-#undef NSS_WRAPPER
-
 /* Whether the host os is osf1 */
 #undef OSF1
 
@@ -2562,18 +2360,9 @@
 /* The size of the 'time_t' type */
 #undef SIZEOF_TIME_T
 
-/* The size of `void *', as computed by sizeof. */
-#undef SIZEOF_VOID_P
-
 /* Use socket wrapper library */
 #undef SOCKET_WRAPPER
 
-/* getgrent_r irix (similar to solaris) function prototype */
-#undef SOLARIS_GETGRENT_R
-
-/* getpwent_r irix (similar to solaris) function prototype */
-#undef SOLARIS_GETPWENT_R
-
 /* Whether the solaris sendfile() API is available */
 #undef SOLARIS_SENDFILE_API
 
@@ -2671,15 +2460,9 @@
 /* Whether to build mount.cifs and umount.cifs */
 #undef WITH_CIFSMOUNT
 
-/* whether to build cifs.spnego */
-#undef WITH_CIFSSPNEGO
-
 /* Whether to include DFS support */
 #undef WITH_DFS
 
-/* Whether to enable DNS service discovery support */
-#undef WITH_DNSSD_SUPPORT
-
 /* Whether to enable DNS Update support */
 #undef WITH_DNS_UPDATES
 
@@ -2704,6 +2487,9 @@
 /* Whether to include sendfile() support */
 #undef WITH_SENDFILE
 
+/* Whether to build smbmount */
+#undef WITH_SMBMOUNT
+
 /* Whether to include experimental syslog support */
 #undef WITH_SYSLOG
 
@@ -2720,6 +2506,9 @@
 /* xattr functions have additional options */
 #undef XATTR_ADD_OPT
 
+/* Required alignment */
+#undef _ALIGNMENT_REQUIRED
+
 /* Define to 1 if on AIX 3.
    System headers sometimes define this.
    We just want to avoid a redefinition error message.  */
@@ -2733,21 +2522,25 @@
 /* Whether to use GNU libc extensions */
 #undef _GNU_SOURCE
 
+/* Whether to use HPUX extensions */
+#undef _HPUX_SOURCE
+
 /* Whether to enable large file support */
 #undef _LARGEFILE64_SOURCE
 
 /* Whether to enable large file support */
 #undef _LARGE_FILES
 
+/* Maximum alignment */
+#undef _MAX_ALIGNMENT
+
 /* Define to 1 if on MINIX. */
 #undef _MINIX
 
-
 #ifndef _OSF_SOURCE
-# undef _OSF_SOURCE
+# define _OSF_SOURCE 1
 #endif
 
-
 /* Define to 2 if the system does not provide POSIX.1 features except with
    this defined. */
 #undef _POSIX_1_SOURCE
@@ -2755,24 +2548,15 @@
 /* Whether to enable POSIX support */
 #undef _POSIX_C_SOURCE
 
-/* Define to 1 if you need to in order for `stat' and other things to work. */
+/* Whether to use POSIX compatible functions */
 #undef _POSIX_SOURCE
 
 /* Whether to enable System V compatibility */
 #undef _SYSV
 
+/* Unix 98 sources -- needed for socklen_t in getsockopt on HP/UX 11 */
+#undef _XOPEN_SOURCE_EXTENDED
 
-#ifndef _XOPEN_SOURCE
-# undef _XOPEN_SOURCE
-#endif
-
-
-
-#ifndef _XOPEN_SOURCE_EXTENDED
-# undef _XOPEN_SOURCE_EXTENDED
-#endif
-
-
 /* Define to 1 if type `char' is unsigned and you are not using gcc.  */
 #ifndef __CHAR_UNSIGNED__
 # undef __CHAR_UNSIGNED__
@@ -2785,9 +2569,6 @@
 #ifndef _POSIX_PTHREAD_SEMANTICS
 # undef _POSIX_PTHREAD_SEMANTICS
 #endif
-#ifndef _TANDEM_SOURCE
-# undef _TANDEM_SOURCE
-#endif
 
 /* Whether to build auth_builtin as shared module */
 #undef auth_builtin_init
@@ -2843,9 +2624,6 @@
 /* Whether to build idmap_rid as shared module */
 #undef idmap_rid_init
 
-/* Whether to build idmap_tdb2 as shared module */
-#undef idmap_tdb2_init
-
 /* Whether to build idmap_tdb as shared module */
 #undef idmap_tdb_init
 
@@ -2903,51 +2681,51 @@
 /* Define to `unsigned long long' if <sys/types.h> does not define. */
 #undef ptrdiff_t
 
-/* Whether to build rpc_dssetup as shared module */
-#undef rpc_dssetup_init
+/* Whether to build rpc_echo as shared module */
+#undef rpc_echo_init
 
-/* Whether to build rpc_eventlog2 as shared module */
-#undef rpc_eventlog2_init
+/* Whether to build rpc_eventlog as shared module */
+#undef rpc_eventlog_init
 
-/* Whether to build rpc_initshutdown as shared module */
-#undef rpc_initshutdown_init
+/* Whether to build rpc_lsa_ds as shared module */
+#undef rpc_lsa_ds_init
 
-/* Whether to build rpc_lsarpc as shared module */
-#undef rpc_lsarpc_init
+/* Whether to build rpc_lsa as shared module */
+#undef rpc_lsa_init
 
+/* Whether to build rpc_net as shared module */
+#undef rpc_net_init
+
 /* Whether to build rpc_netdfs as shared module */
 #undef rpc_netdfs_init
 
-/* Whether to build rpc_netlogon as shared module */
-#undef rpc_netlogon_init
+/* Whether to build rpc_ntsvcs as shared module */
+#undef rpc_ntsvcs_init
 
-/* Whether to build rpc_ntsvcs2 as shared module */
-#undef rpc_ntsvcs2_init
+/* Whether to build rpc_reg as shared module */
+#undef rpc_reg_init
 
-/* Whether to build rpc_rpcecho as shared module */
-#undef rpc_rpcecho_init
-
 /* Whether to build rpc_samr as shared module */
 #undef rpc_samr_init
 
 /* Whether to build rpc_spoolss as shared module */
 #undef rpc_spoolss_init
 
-/* Whether to build rpc_srvsvc as shared module */
-#undef rpc_srvsvc_init
+/* Whether to build rpc_srv as shared module */
+#undef rpc_srv_init
 
-/* Whether to build rpc_svcctl2 as shared module */
-#undef rpc_svcctl2_init
+/* Whether to build rpc_svcctl as shared module */
+#undef rpc_svcctl_init
 
-/* Whether to build rpc_winreg as shared module */
-#undef rpc_winreg_init
-
 /* Whether to build rpc_wkssvc as shared module */
 #undef rpc_wkssvc_init
 
 /* Define to `unsigned int' if <sys/types.h> does not define. */
 #undef size_t
 
+/* Socket length type */
+#undef socklen_t
+
 /* Define to `int' if <sys/types.h> does not define. */
 #undef ssize_t
 
@@ -3011,15 +2789,9 @@
 /* Define to `unsigned int' if <sys/types.h> does not define. */
 #undef uint_t
 
-/* Define to `unsigned long long' if <sys/types.h> does not define. */
-#undef uintptr_t
-
 /* Whether to build vfs_afsacl as shared module */
 #undef vfs_afsacl_init
 
-/* Whether to build vfs_aio_fork as shared module */
-#undef vfs_aio_fork_init
-
 /* Whether to build vfs_aixacl2 as shared module */
 #undef vfs_aixacl2_init
 
@@ -3056,9 +2828,6 @@
 /* Whether to build vfs_fake_perms as shared module */
 #undef vfs_fake_perms_init
 
-/* Whether to build vfs_fileid as shared module */
-#undef vfs_fileid_init
-
 /* Whether to build vfs_full_audit as shared module */
 #undef vfs_full_audit_init
 
@@ -3092,35 +2861,14 @@
 /* Whether to build vfs_recycle as shared module */
 #undef vfs_recycle_init
 
-/* Whether to build vfs_shadow_copy2 as shared module */
-#undef vfs_shadow_copy2_init
-
 /* Whether to build vfs_shadow_copy as shared module */
 #undef vfs_shadow_copy_init
 
 /* Whether to build vfs_solarisacl as shared module */
 #undef vfs_solarisacl_init
 
-/* Whether to build vfs_streams_depot as shared module */
-#undef vfs_streams_depot_init
-
-/* Whether to build vfs_streams_xattr as shared module */
-#undef vfs_streams_xattr_init
-
-/* Whether to build vfs_syncops as shared module */
-#undef vfs_syncops_init
-
 /* Whether to build vfs_tru64acl as shared module */
 #undef vfs_tru64acl_init
 
-/* Whether to build vfs_tsmsm as shared module */
-#undef vfs_tsmsm_init
-
-/* Whether to build vfs_xattr_tdb as shared module */
-#undef vfs_xattr_tdb_init
-
-/* Whether to build vfs_zfsacl as shared module */
-#undef vfs_zfsacl_init
-
 /* Define to `unsigned short' if <sys/types.h> does not define. */
 #undef wchar_t

Copied: branches/samba/upstream/source/include/core (from rev 1928, branches/samba/upstream/source/include/core)

Deleted: branches/samba/upstream/source/include/ctdbd_conn.h
===================================================================
--- branches/samba/upstream/source/include/ctdbd_conn.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/ctdbd_conn.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,70 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   Samba3 ctdb connection handling
-   Copyright (C) Volker Lendecke 2007
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef _CTDBD_CONN_H
-#define _CTDBD_CONN_H
-
-struct ctdbd_connection;
-
-NTSTATUS ctdbd_init_connection(TALLOC_CTX *mem_ctx,
-			       struct ctdbd_connection **pconn);
-NTSTATUS ctdbd_messaging_connection(TALLOC_CTX *mem_ctx,
-				    struct ctdbd_connection **pconn);
-
-uint32 ctdbd_vnn(const struct ctdbd_connection *conn);
-
-NTSTATUS ctdbd_register_msg_ctx(struct ctdbd_connection *conn,
-				struct messaging_context *msg_ctx);
-
-NTSTATUS ctdbd_messaging_send(struct ctdbd_connection *conn,
-			      uint32 dst_vnn, uint64 dst_srvid,
-			      struct messaging_rec *msg);
-
-bool ctdbd_process_exists(struct ctdbd_connection *conn, uint32 vnn,
-			  pid_t pid);
-
-char *ctdbd_dbpath(struct ctdbd_connection *conn,
-		   TALLOC_CTX *mem_ctx, uint32_t db_id);
-
-NTSTATUS ctdbd_db_attach(struct ctdbd_connection *conn, const char *name,
-			 uint32_t *db_id, int tdb_flags);
-
-NTSTATUS ctdbd_migrate(struct ctdbd_connection *conn, uint32 db_id,
-		       TDB_DATA key);
-
-NTSTATUS ctdbd_fetch(struct ctdbd_connection *conn, uint32 db_id,
-		     TDB_DATA key, TALLOC_CTX *mem_ctx, TDB_DATA *data);
-
-NTSTATUS ctdbd_traverse(uint32 db_id,
-			void (*fn)(TDB_DATA key, TDB_DATA data,
-				   void *private_data),
-			void *private_data);
-
-NTSTATUS ctdbd_register_ips(struct ctdbd_connection *conn,
-			    const struct sockaddr_in *server,
-			    const struct sockaddr_in *client,
-			    void (*release_ip_handler)(const char *ip_addr,
-						       void *private_data),
-			    void *private_data);
-
-NTSTATUS ctdbd_register_reconfigure(struct ctdbd_connection *conn);
-
-NTSTATUS ctdbd_persistent_store(struct ctdbd_connection *conn, uint32_t db_id, TDB_DATA key, TDB_DATA data);
-
-#endif /* _CTDBD_CONN_H */

Deleted: branches/samba/upstream/source/include/dbwrap.h
===================================================================
--- branches/samba/upstream/source/include/dbwrap.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/dbwrap.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,97 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   Database interface wrapper around tdb
-   Copyright (C) Volker Lendecke 2005-2007
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef __DBWRAP_H__
-#define __DBWRAP_H__
-
-struct db_record {
-	TDB_DATA key, value;
-	NTSTATUS (*store)(struct db_record *rec, TDB_DATA data, int flag);
-	NTSTATUS (*delete_rec)(struct db_record *rec);
-	void *private_data;
-};
-
-struct db_context {
-	struct db_record *(*fetch_locked)(struct db_context *db,
-					  TALLOC_CTX *mem_ctx,
-					  TDB_DATA key);
-	int (*fetch)(struct db_context *db, TALLOC_CTX *mem_ctx,
-		     TDB_DATA key, TDB_DATA *data);
-	int (*traverse)(struct db_context *db,
-			int (*f)(struct db_record *rec,
-				 void *private_data),
-			void *private_data);
-	int (*traverse_read)(struct db_context *db,
-			     int (*f)(struct db_record *rec,
-				      void *private_data),
-			     void *private_data);
-	int (*get_seqnum)(struct db_context *db);
-	int (*transaction_start)(struct db_context *db);
-	int (*transaction_commit)(struct db_context *db);
-	int (*transaction_cancel)(struct db_context *db);
-	void *private_data;
-	bool persistent;
-};
-
-struct db_context *db_open(TALLOC_CTX *mem_ctx,
-			   const char *name,
-			   int hash_size, int tdb_flags,
-			   int open_flags, mode_t mode);
-
-struct db_context *db_open_trans(TALLOC_CTX *mem_ctx,
-				 const char *name,
-				 int hash_size, int tdb_flags,
-				 int open_flags, mode_t mode);
-
-struct db_context *db_open_rbt(TALLOC_CTX *mem_ctx);
-
-struct db_context *db_open_tdb(TALLOC_CTX *mem_ctx,
-			       const char *name,
-			       int hash_size, int tdb_flags,
-			       int open_flags, mode_t mode);
-
-struct db_context *db_open_tdb2(TALLOC_CTX *mem_ctx,
-			        const char *name,
-			        int hash_size, int tdb_flags,
-			        int open_flags, mode_t mode);
-
-struct messaging_context;
-void db_tdb2_setup_messaging(struct messaging_context *msg_ctx, bool server);
-
-#ifdef CLUSTER_SUPPORT
-struct db_context *db_open_ctdb(TALLOC_CTX *mem_ctx,
-				const char *name,
-				int hash_size, int tdb_flags,
-				int open_flags, mode_t mode);
-#endif
-
-struct db_context *db_open_file(TALLOC_CTX *mem_ctx,
-				struct messaging_context *msg_ctx,
-				const char *name,
-				int hash_size, int tdb_flags,
-				int open_flags, mode_t mode);
-
-
-NTSTATUS dbwrap_delete_bystring(struct db_context *db, const char *key);
-NTSTATUS dbwrap_store_bystring(struct db_context *db, const char *key,
-			       TDB_DATA data, int flags);
-TDB_DATA dbwrap_fetch_bystring(struct db_context *db, TALLOC_CTX *mem_ctx,
-			       const char *key);
-
-#endif /* __DBWRAP_H__ */

Modified: branches/samba/upstream/source/include/dcerpc.h
===================================================================
--- branches/samba/upstream/source/include/dcerpc.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/dcerpc.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,40 @@
+/* unused.  Stub to make the pidl generated NDR parsers compile */
+
+/*
+  this is used to find pointers to calls
+*/
+struct dcerpc_interface_call {
+        const char *name;
+        size_t struct_size;
+        ndr_push_flags_fn_t ndr_push;
+        ndr_pull_flags_fn_t ndr_pull;
+        ndr_print_function_t ndr_print;
+        BOOL async;
+};
+
+struct dcerpc_endpoint_list {
+        uint32_t count;
+        const char * const *names;
+};
+
+struct dcerpc_authservice_list {
+        uint32_t count;
+        const char * const *names;
+};
+
+struct dcerpc_interface_table {
+        const char *name;
+        struct dcerpc_syntax_id syntax_id;
+        const char *helpstring;
+        uint32_t num_calls;
+        const struct dcerpc_interface_call *calls;
+        const struct dcerpc_endpoint_list *endpoints;
+        const struct dcerpc_authservice_list *authservices;
+};
+
+struct dcerpc_interface_list {
+        struct dcerpc_interface_list *prev, *next;
+        const struct dcerpc_interface_table *table;
+};
+
+

Modified: branches/samba/upstream/source/include/debug.h
===================================================================
--- branches/samba/upstream/source/include/debug.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/debug.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _DEBUG_H
@@ -39,8 +40,8 @@
 /* PRINTFLIKE1 */
 int  Debug1( const char *, ... ) PRINTF_ATTRIBUTE(1,2);
 /* PRINTFLIKE1 */
-bool dbgtext( const char *, ... ) PRINTF_ATTRIBUTE(1,2);
-bool dbghdr( int level, int cls, const char *file, const char *func, int line );
+BOOL dbgtext( const char *, ... ) PRINTF_ATTRIBUTE(1,2);
+BOOL dbghdr( int level, const char *file, const char *func, int line );
 
 #if defined(sgi) && (_COMPILER_VERSION >= 730)
 #pragma mips_frequency_hint NEVER Debug1
@@ -49,6 +50,7 @@
 #endif
 
 extern XFILE *dbf;
+extern pstring debugf;
 
 /* If we have these macros, we can add additional info to the header. */
 
@@ -101,7 +103,6 @@
 #define DBGC_LOCKING		16
 #define DBGC_MSDFS		17
 #define DBGC_DMAPI		18
-#define DBGC_REGISTRY		19
 
 /* So you can define DBGC_CLASS before including debug.h */
 #ifndef DBGC_CLASS
@@ -109,7 +110,7 @@
 #endif
 
 extern int  *DEBUGLEVEL_CLASS;
-extern bool *DEBUGLEVEL_CLASS_ISSET;
+extern BOOL *DEBUGLEVEL_CLASS_ISSET;
 
 /* Debugging macros
  *
@@ -161,66 +162,48 @@
  * will remove the extra conditional test.
  */
 
-/*
- * From talloc.c:
- */
-
-/* these macros gain us a few percent of speed on gcc */
-#if (__GNUC__ >= 3)
-/* the strange !! is to ensure that __builtin_expect() takes either 0 or 1
-   as its first argument */
-#define likely(x)   __builtin_expect(!!(x), 1)
-#define unlikely(x) __builtin_expect(!!(x), 0)
-#else
-#define likely(x) (x)
-#define unlikely(x) (x)
-#endif
-
-#define CHECK_DEBUGLVL( level ) \
+#define DEBUGLVL( level ) \
   ( ((level) <= MAX_DEBUG_LEVEL) && \
-     unlikely((DEBUGLEVEL_CLASS[ DBGC_CLASS ] >= (level))||  \
+     ((DEBUGLEVEL_CLASS[ DBGC_CLASS ] >= (level))||  \
      (!DEBUGLEVEL_CLASS_ISSET[ DBGC_CLASS ] && \
-      DEBUGLEVEL_CLASS[ DBGC_ALL   ] >= (level))  ) )
+      DEBUGLEVEL_CLASS[ DBGC_ALL   ] >= (level))  ) \
+   && dbghdr( level, __FILE__, FUNCTION_MACRO, (__LINE__) ) )
 
-#define DEBUGLVL( level ) \
-  ( CHECK_DEBUGLVL(level) \
-   && dbghdr( level, DBGC_CLASS, __FILE__, FUNCTION_MACRO, (__LINE__) ) )
 
-
 #define DEBUGLVLC( dbgc_class, level ) \
   ( ((level) <= MAX_DEBUG_LEVEL) && \
-     unlikely((DEBUGLEVEL_CLASS[ dbgc_class ] >= (level))||  \
+     ((DEBUGLEVEL_CLASS[ dbgc_class ] >= (level))||  \
      (!DEBUGLEVEL_CLASS_ISSET[ dbgc_class ] && \
       DEBUGLEVEL_CLASS[ DBGC_ALL   ] >= (level))  ) \
-   && dbghdr( level, DBGC_CLASS, __FILE__, FUNCTION_MACRO, (__LINE__) ) )
+   && dbghdr( level, __FILE__, FUNCTION_MACRO, (__LINE__) ) )
 
 
 #define DEBUG( level, body ) \
   (void)( ((level) <= MAX_DEBUG_LEVEL) && \
-           unlikely((DEBUGLEVEL_CLASS[ DBGC_CLASS ] >= (level))||  \
+           ((DEBUGLEVEL_CLASS[ DBGC_CLASS ] >= (level))||  \
            (!DEBUGLEVEL_CLASS_ISSET[ DBGC_CLASS ] && \
             DEBUGLEVEL_CLASS[ DBGC_ALL   ] >= (level))  ) \
-       && (dbghdr( level, DBGC_CLASS, __FILE__, FUNCTION_MACRO, (__LINE__) )) \
+       && (dbghdr( level, __FILE__, FUNCTION_MACRO, (__LINE__) )) \
        && (dbgtext body) )
 
 #define DEBUGC( dbgc_class, level, body ) \
   (void)( ((level) <= MAX_DEBUG_LEVEL) && \
-           unlikely((DEBUGLEVEL_CLASS[ dbgc_class ] >= (level))||  \
+           ((DEBUGLEVEL_CLASS[ dbgc_class ] >= (level))||  \
            (!DEBUGLEVEL_CLASS_ISSET[ dbgc_class ] && \
 	    DEBUGLEVEL_CLASS[ DBGC_ALL   ] >= (level))  ) \
-       && (dbghdr( level, DBGC_CLASS, __FILE__, FUNCTION_MACRO, (__LINE__) )) \
+       && (dbghdr( level, __FILE__, FUNCTION_MACRO, (__LINE__) )) \
        && (dbgtext body) )
 
 #define DEBUGADD( level, body ) \
   (void)( ((level) <= MAX_DEBUG_LEVEL) && \
-           unlikely((DEBUGLEVEL_CLASS[ DBGC_CLASS ] >= (level))||  \
+           ((DEBUGLEVEL_CLASS[ DBGC_CLASS ] >= (level))||  \
            (!DEBUGLEVEL_CLASS_ISSET[ DBGC_CLASS ] && \
             DEBUGLEVEL_CLASS[ DBGC_ALL   ] >= (level))  ) \
        && (dbgtext body) )
 
 #define DEBUGADDC( dbgc_class, level, body ) \
   (void)( ((level) <= MAX_DEBUG_LEVEL) && \
-          unlikely((DEBUGLEVEL_CLASS[ dbgc_class ] >= (level))||  \
+          ((DEBUGLEVEL_CLASS[ dbgc_class ] >= (level))||  \
            (!DEBUGLEVEL_CLASS_ISSET[ dbgc_class ] && \
             DEBUGLEVEL_CLASS[ DBGC_ALL   ] >= (level))  ) \
        && (dbgtext body) )

Modified: branches/samba/upstream/source/include/debugparse.h
===================================================================
--- branches/samba/upstream/source/include/debugparse.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/debugparse.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -12,17 +12,18 @@
  * -------------------------------------------------------------------------- **
  *
  *  This library is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public
+ *  modify it under the terms of the GNU Library General Public
  *  License as published by the Free Software Foundation; either
- *  version 3 of the License, or (at your option) any later version.
+ *  version 2 of the License, or (at your option) any later version.
  *
  *  This library is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  *  Library General Public License for more details.
  *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  * -------------------------------------------------------------------------- **
  * The important function in this module is dbg_char2token().  The rest is

Modified: branches/samba/upstream/source/include/dlinklist.h
===================================================================
--- branches/samba/upstream/source/include/dlinklist.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/dlinklist.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /* To use these macros you must have a structure containing a next and

Modified: branches/samba/upstream/source/include/doserr.h
===================================================================
--- branches/samba/upstream/source/include/doserr.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/doserr.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _DOSERR_H
@@ -199,33 +200,23 @@
 #define WERR_REG_FILE_INVALID W_ERROR(1017)
 #define WERR_NO_SUCH_SERVICE W_ERROR(1060)
 #define WERR_INVALID_SERVICE_CONTROL W_ERROR(1052)
-#define WERR_SERVICE_ALREADY_RUNNING W_ERROR(1056)
 #define WERR_SERVICE_DISABLED W_ERROR(1058)
 #define WERR_SERVICE_NEVER_STARTED W_ERROR(1077)
-#define WERR_INVALID_COMPUTER_NAME W_ERROR(1210)
-#define WERR_INVALID_DOMAINNAME W_ERROR(1212)
 #define WERR_MACHINE_LOCKED W_ERROR(1271)
 #define WERR_NO_LOGON_SERVERS W_ERROR(1311)
-#define WERR_NO_SUCH_LOGON_SESSION W_ERROR(1312)
-#define WERR_USER_ALREADY_EXISTS W_ERROR(1316)
-#define WERR_NO_SUCH_USER W_ERROR(1317)
-#define WERR_PASSWORD_RESTRICTION W_ERROR(1325)
 #define WERR_LOGON_FAILURE W_ERROR(1326)
 #define WERR_NO_SUCH_DOMAIN W_ERROR(1355)
-#define WERR_NONE_MAPPED W_ERROR(1332)
 #define WERR_INVALID_SECURITY_DESCRIPTOR W_ERROR(1338)
-#define WERR_INVALID_DOMAIN_STATE W_ERROR(1353)
-#define WERR_INVALID_DOMAIN_ROLE W_ERROR(1354)
 #define WERR_TIME_SKEW W_ERROR(1398)
 #define WERR_EVENTLOG_FILE_CORRUPT W_ERROR(1500)
 #define WERR_SERVER_UNAVAILABLE W_ERROR(1722)
 #define WERR_INVALID_FORM_NAME W_ERROR(1902)
 #define WERR_INVALID_FORM_SIZE W_ERROR(1903)
-#define WERR_PASSWORD_MUST_CHANGE W_ERROR(1907)
-#define WERR_DOMAIN_CONTROLLER_NOT_FOUND W_ERROR(1908)
-#define WERR_ACCOUNT_LOCKED_OUT W_ERROR(1909)
-
-#define WERR_DEVICE_NOT_AVAILABLE W_ERROR(4319)
+#define WERR_BUF_TOO_SMALL W_ERROR(2123)
+#define WERR_JOB_NOT_FOUND W_ERROR(2151)
+#define WERR_DEST_NOT_FOUND W_ERROR(2152)
+#define WERR_NOT_LOCAL_DOMAIN W_ERROR(2320)
+#define WERR_DOMAIN_CONTROLLER_NOT_FOUND W_ERROR(2453)
 #define WERR_STATUS_MORE_ENTRIES   W_ERROR(0x0105)
 
 #define WERR_PRINTER_DRIVER_ALREADY_INSTALLED W_ERROR(ERRdriveralreadyinstalled)
@@ -264,25 +255,13 @@
 #define NERR_BASE (2100)
 #endif
 
-#ifndef MAX_NERR
-#define MAX_NERR (NERR_BASE+899)
-#endif
-
-#define WERR_BUF_TOO_SMALL		W_ERROR(NERR_BASE+23)
-#define WERR_JOB_NOT_FOUND		W_ERROR(NERR_BASE+51)
-#define WERR_DEST_NOT_FOUND		W_ERROR(NERR_BASE+52)
-#define WERR_USER_EXISTS		W_ERROR(NERR_BASE+124)
-#define WERR_NET_NAME_NOT_FOUND		W_ERROR(NERR_BASE+210)
-#define WERR_NOT_LOCAL_DOMAIN		W_ERROR(NERR_BASE+220)
-#define WERR_DC_NOT_FOUND		W_ERROR(NERR_BASE+353)
 #define WERR_DFS_NO_SUCH_VOL            W_ERROR(NERR_BASE+562)
 #define WERR_DFS_NO_SUCH_SHARE          W_ERROR(NERR_BASE+565)
 #define WERR_DFS_NO_SUCH_SERVER         W_ERROR(NERR_BASE+573)
 #define WERR_DFS_INTERNAL_ERROR         W_ERROR(NERR_BASE+590)
 #define WERR_DFS_CANT_CREATE_JUNCT      W_ERROR(NERR_BASE+569)
-#define WERR_SETUP_ALREADY_JOINED	W_ERROR(NERR_BASE+591)
-#define WERR_SETUP_NOT_JOINED		W_ERROR(NERR_BASE+592)
-#define WERR_SETUP_DOMAIN_CONTROLLER	W_ERROR(NERR_BASE+593)
-#define WERR_DEFAULT_JOIN_REQUIRED	W_ERROR(NERR_BASE+594)
 
+#define WERR_NET_NAME_NOT_FOUND		W_ERROR(NERR_BASE+210)
+
+
 #endif /* _DOSERR_H */

Modified: branches/samba/upstream/source/include/dynconfig.h
===================================================================
--- branches/samba/upstream/source/include/dynconfig.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/dynconfig.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /**
@@ -23,78 +24,15 @@
  * @brief Exported global configurations.
  **/
 
-#if 0
-const char *get_dyn_SBINDIR(void);
-const char *get_dyn_BINDIR(void);
-const char *get_dyn_SWATDIR(void);
+extern char const *dyn_SBINDIR,
+	*dyn_BINDIR,
+	*dyn_SWATDIR;
 
-extern char dyn_CONFIGFILE[1024];
-extern char dyn_LOGFILEBASE[1024], dyn_LMHOSTSFILE[1024];
-extern char dyn_LIBDIR[1024];
-extern char dyn_CODEPAGEDIR[1024];
+extern pstring dyn_CONFIGFILE;
+extern pstring dyn_LOGFILEBASE, dyn_LMHOSTSFILE;
+extern pstring dyn_LIBDIR;
 extern fstring dyn_SHLIBEXT;
-extern char dyn_LOCKDIR[1024];
-extern char dyn_PIDDIR[1024];
-extern char dyn_SMB_PASSWD_FILE[1024];
-extern char dyn_PRIVATE_DIR[1024];
-#endif
-
-const char *get_dyn_SBINDIR(void);
-const char *set_dyn_SBINDIR(const char *newpath);
-bool is_default_dyn_SBINDIR(void);
-
-const char *get_dyn_BINDIR(void);
-const char *set_dyn_BINDIR(const char *newpath);
-bool is_default_dyn_BINDIR(void);
-
-const char *get_dyn_SWATDIR(void);
-const char *set_dyn_SWATDIR(const char *newpath);
-bool is_default_dyn_SWATDIR(void);
-
-const char *get_dyn_CONFIGFILE(void);
-const char *set_dyn_CONFIGFILE(const char *newpath);
-bool is_default_dyn_CONFIGFILE(void);
-
-const char *get_dyn_LOGFILEBASE(void);
-const char *set_dyn_LOGFILEBASE(const char *newpath);
-bool is_default_dyn_LOGFILEBASE(void);
-
-const char *get_dyn_LMHOSTSFILE(void);
-const char *set_dyn_LMHOSTSFILE(const char *newpath);
-bool is_default_dyn_LMHOSTSFILE(void);
-
-const char *get_dyn_CODEPAGEDIR(void);
-const char *set_dyn_CODEPAGEDIR(const char *newpath);
-bool is_default_dyn_CODEPAGEDIR(void);
-
-const char *get_dyn_LIBDIR(void);
-const char *set_dyn_LIBDIR(const char *newpath);
-bool is_default_dyn_LIBDIR(void);
-
-const char *get_dyn_SHLIBEXT(void);
-const char *set_dyn_SHLIBEXT(const char *newpath);
-bool is_default_dyn_SHLIBEXT(void);
-
-const char *get_dyn_LOCKDIR(void);
-const char *set_dyn_LOCKDIR(const char *newpath);
-bool is_default_dyn_LOCKDIR(void);
-
-const char *get_dyn_PIDDIR(void);
-const char *set_dyn_PIDDIR(const char *newpath);
-bool is_default_dyn_PIDDIR(void);
-
-const char *get_dyn_SMB_PASSWD_FILE(void);
-const char *set_dyn_SMB_PASSWD_FILE(const char *newpath);
-bool is_default_dyn_SMB_PASSWD_FILE(void);
-
-const char *get_dyn_PRIVATE_DIR(void);
-const char *set_dyn_PRIVATE_DIR(const char *newpath);
-bool is_default_dyn_PRIVATE_DIR(void);
-
-const char *get_dyn_STATEDIR(void);
-const char *set_dyn_STATEDIR(const char *newpath);
-bool is_default_dyn_STATEDIR(void);
-
-const char *get_dyn_CACHEDIR(void);
-const char *set_dyn_CACHEDIR(const char *newpath);
-bool is_default_dyn_CACHEDIR(bool);
+extern pstring dyn_LOCKDIR;
+extern pstring dyn_PIDDIR;
+extern pstring dyn_SMB_PASSWD_FILE;
+extern pstring dyn_PRIVATE_DIR;

Modified: branches/samba/upstream/source/include/event.h
===================================================================
--- branches/samba/upstream/source/include/event.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/event.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /* bits for file descriptor event flags */

Modified: branches/samba/upstream/source/include/fake_file.h
===================================================================
--- branches/samba/upstream/source/include/fake_file.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/fake_file.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _FAKE_FILE_H

Modified: branches/samba/upstream/source/include/gpo.h
===================================================================
--- branches/samba/upstream/source/include/gpo.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/gpo.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,22 +1,24 @@
-/*
+/* 
  *  Unix SMB/CIFS implementation.
  *  Group Policy Object Support
- *  Copyright (C) Guenther Deschner 2005-2007
- *
+ *  Copyright (C) Guenther Deschner 2005
+ *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
- *
+ *  
  *  This program is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
- *
+ *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
+
 enum GPO_LINK_TYPE {
 	GP_LINK_UNKOWN	= 0,
 	GP_LINK_MACHINE	= 1,
@@ -37,17 +39,16 @@
 #define GPO_VERSION_MACHINE(x) (x & 0xffff)
 
 struct GROUP_POLICY_OBJECT {
-	uint32_t options;	/* GPFLAGS_* */
-	uint32_t version;
+	uint32 options;	/* GPFLAGS_* */ 
+	uint32 version;
 	const char *ds_path;
 	const char *file_sys_path;
 	const char *display_name;
 	const char *name;
 	const char *link;
-	enum GPO_LINK_TYPE link_type;
+	uint32 link_type; /* GPO_LINK_TYPE */
 	const char *user_extensions;
 	const char *machine_extensions;
-	SEC_DESC *security_descriptor;
 	struct GROUP_POLICY_OBJECT *next, *prev;
 };
 
@@ -75,15 +76,15 @@
 
 struct GP_LINK {
 	const char *gp_link;	/* raw link name */
-	uint32_t gp_opts;		/* inheritance options GPO_INHERIT */
-	uint32_t num_links;	/* number of links */
+	uint32 gp_opts;		/* inheritance options GPO_INHERIT */
+	uint32 num_links;	/* number of links */
 	char **link_names;	/* array of parsed link names */
-	uint32_t *link_opts;	/* array of parsed link opts GPO_LINK_OPT_* */
+	uint32 *link_opts;	/* array of parsed link opts GPO_LINK_OPT_* */
 };
 
 struct GP_EXT {
 	const char *gp_extension;	/* raw extension name */
-	uint32_t num_exts;
+	uint32 num_exts;
 	char **extensions;
 	char **extensions_guid;
 	char **snapins;
@@ -92,7 +93,3 @@
 
 #define GPO_CACHE_DIR "gpo_cache"
 #define GPT_INI "GPT.INI"
-
-#define GP_EXT_GUID_SECURITY "827D319E-6EAC-11D2-A4EA-00C04F79F83A"
-#define GP_EXT_GUID_REGISTRY "35378EAC-683F-11D2-A89A-00C04FBBCFA2"
-#define GP_EXT_GUID_SCRIPTS  "42B5FAAE-6536-11D2-AE5A-0000F87571E3"

Modified: branches/samba/upstream/source/include/hmacmd5.h
===================================================================
--- branches/samba/upstream/source/include/hmacmd5.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/hmacmd5.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _HMAC_MD5_H

Modified: branches/samba/upstream/source/include/idmap.h
===================================================================
--- branches/samba/upstream/source/include/idmap.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/idmap.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,17 +9,19 @@
    Copyright (C) Simo Sorce 2003
    
    This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
+   modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
    
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.
    
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU Library General Public
+   License along with this library; if not, write to the
+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA  02111-1307, USA.   
 */
 
 /* idmap version determines auto-conversion - this is the database
@@ -36,11 +38,11 @@
 
 struct idmap_domain {
 	const char *name;
-	bool default_domain;
-	bool readonly;
+	BOOL default_domain;
+	BOOL readonly;
 	void *private_data;
 	struct idmap_methods *methods;
-	bool initialized;
+	BOOL initialized;
 	const char *params;
 };
 

Modified: branches/samba/upstream/source/include/includes.h
===================================================================
--- branches/samba/upstream/source/include/includes.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/includes.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /* work around broken krb5.h on sles9 */
@@ -171,7 +172,7 @@
 
 #if HAVE_LBER_H
 #include <lber.h>
-#if defined(HPUX) && !defined(_LBER_TYPES_H)
+#ifdef HPUX
 /* Define ber_tag_t and ber_int_t for using
  * HP LDAP-UX Integration products' LDAP libraries.
 */
@@ -179,7 +180,7 @@
 typedef unsigned long ber_tag_t;
 typedef int ber_int_t;
 #endif
-#endif /* defined(HPUX) && !defined(_LBER_TYPES_H) */
+#endif /* HPUX */
 #ifndef LBER_USE_DER
 #define LBER_USE_DER 0x01
 #endif
@@ -250,10 +251,6 @@
 #include <langinfo.h>
 #endif
 
-#if HAVE_NETGROUP_H
-#include <netgroup.h>
-#endif
-
 #if defined(HAVE_AIO_H) && defined(WITH_AIO)
 #include <aio.h>
 #endif
@@ -306,6 +303,12 @@
 typedef int VOLATILE SIG_ATOMIC_T;
 #endif
 
+#ifndef HAVE_SOCKLEN_T_TYPE
+#define HAVE_SOCKLEN_T_TYPE
+typedef int socklen_t;
+#endif
+
+
 #ifndef uchar
 #define uchar unsigned char
 #endif
@@ -611,6 +614,11 @@
 #define MAX(a,b) ((a)>(b)?(a):(b))
 #endif
 
+#ifndef _UPPER_BOOL
+typedef int BOOL;
+#define _UPPER_BOOL
+#endif
+
 #ifdef HAVE_BROKEN_GETGROUPS
 #define GID_T int
 #else
@@ -621,36 +629,16 @@
 #define NGROUPS_MAX 32 /* Guess... */
 #endif
 
-/* Our own fstrings */
+/* Our own pstrings and fstrings */
+#include "pstring.h"
 
-/*
-                  --------------
-                 /              \
-                /      REST      \
-               /        IN        \
-              /       PEACE        \
-             /                      \
-             | The infamous pstring |
-             |                      |
-             |                      |
-             |      7 December      |
-             |                      |
-             |         2007         |
-            *|     *  *  *          | *
-   _________)/\\_//(\/(/\)/\//\/\///|_)_______
-*/
-
-#ifndef FSTRING_LEN
-#define FSTRING_LEN 256
-typedef char fstring[FSTRING_LEN];
-#endif
-
 /* Lists, trees, caching, database... */
 #include "xfile.h"
 #include "intl.h"
 #include "dlinklist.h"
 #include "tdb.h"
 #include "util_tdb.h"
+#include "tdbback.h"
 
 #include "lib/talloc/talloc.h"
 /* And a little extension. Abort on type mismatch */
@@ -659,20 +647,22 @@
 
 #include "nt_status.h"
 #include "ads.h"
+#include "gpo.h"
 #include "ads_dns.h"
 #include "interfaces.h"
 #include "trans2.h"
 #include "nterr.h"
 #include "ntioctl.h"
+#include "messages.h"
 #include "charset.h"
 #include "dynconfig.h"
 #include "util_getent.h"
 #include "debugparse.h"
 #include "version.h"
 #include "privileges.h"
-#include "messages.h"
 #include "locking.h"
 #include "smb.h"
+#include "ads_cldap.h"
 #include "nameserv.h"
 #include "secrets.h"
 #include "byteorder.h"
@@ -682,7 +672,6 @@
 #include "mapping.h"
 #include "passdb.h"
 #include "rpc_secdes.h"
-#include "gpo.h"
 #include "authdata.h"
 #include "msdfs.h"
 #include "rap.h"
@@ -694,14 +683,20 @@
 #include "rpc_svcctl.h"
 #include "rpc_ntsvcs.h"
 #include "rpc_lsa.h"
+#include "rpc_netlogon.h"
 #include "reg_objects.h"
-#include "reg_db.h"
+#include "rpc_reg.h"
+#include "rpc_samr.h"
+#include "rpc_srvsvc.h"
 #include "rpc_spoolss.h"
 #include "rpc_eventlog.h"
+#include "rpc_dfs.h"
+#include "rpc_ds.h"
+#include "rpc_echo.h"
+#include "rpc_shutdown.h"
 #include "rpc_perfcount.h"
 #include "rpc_perfcount_defs.h"
 #include "librpc/gen_ndr/notify.h"
-#include "librpc/gen_ndr/xattr.h"
 #include "nt_printing.h"
 #include "idmap.h"
 #include "client.h"
@@ -715,16 +710,30 @@
 #include "spnego.h"
 #include "rpc_client.h"
 #include "event.h"
-#include "dbwrap.h"
-#include "packet.h"
-#include "ctdbd_conn.h"
-#include "talloc_stack.h"
-#include "memcache.h"
-#include "async_req.h"
-#include "async_smb.h"
 
-#include "lib/smbconf/smbconf.h"
+/*
+ * Type for wide character dirent structure.
+ * Only d_name is defined by POSIX.
+ */
 
+typedef struct smb_wdirent {
+	wpstring        d_name;
+} SMB_STRUCT_WDIRENT;
+
+/*
+ * Type for wide character passwd structure.
+ */
+
+typedef struct smb_wpasswd {
+	wfstring       pw_name;
+	char           *pw_passwd;
+	uid_t          pw_uid;
+	gid_t          pw_gid;
+	wpstring       pw_gecos;
+	wpstring       pw_dir;
+	wpstring       pw_shell;
+} SMB_STRUCT_WPASSWD;
+
 /* used in net.c */
 struct functable {
 	const char *funcname;
@@ -757,20 +766,6 @@
 
 #include "smb_ldap.h"
 
-struct dns_reg_state;
-
-void dns_register_smbd(struct dns_reg_state ** dns_state_ptr,
-		unsigned port,
-		int *maxfd,
-		fd_set *listen_set,
-		struct timeval *timeout);
-
-void dns_register_close(struct dns_reg_state ** dns_state_ptr);
-
-
-bool dns_register_smbd_reply(struct dns_reg_state *dns_state,
-		fd_set *lfds, struct timeval *timeout);
-
 /*
  * Reasons for cache flush.
  */
@@ -788,16 +783,7 @@
     NUM_FLUSH_REASONS};
 
 #include "nss_info.h"
-#include "nsswitch/libwbclient/wbclient.h"
 
-/* generated rpc server implementation functions */
-#include "librpc/gen_ndr/srv_echo.h"
-#include "librpc/gen_ndr/srv_svcctl.h"
-#include "librpc/gen_ndr/srv_lsa.h"
-#include "librpc/gen_ndr/srv_eventlog.h"
-#include "librpc/gen_ndr/srv_winreg.h"
-#include "librpc/gen_ndr/srv_initshutdown.h"
-
 /***** automatically generated prototypes *****/
 #ifndef NO_PROTO_H
 #include "proto.h"
@@ -815,9 +801,6 @@
 #include "srvstr.h"
 #include "safe_string.h"
 
-/* prototypes from lib/util_transfer_file.c */
-#include "transfer_file.h"
-
 #ifdef __COMPAR_FN_T
 #define QSORT_CAST (__compar_fn_t)
 #endif
@@ -912,7 +895,7 @@
  * defined.
  */
 #ifndef MAXHOSTNAMELEN
-#define MAXHOSTNAMELEN 255
+#define MAXHOSTNAMELEN 254
 #endif
 
 /* yuck, I'd like a better way of doing this */
@@ -1078,15 +1061,14 @@
 void sys_adminlog(int priority, const char *format_str, ...) PRINTF_ATTRIBUTE(2,3);
 
 /* PRINTFLIKE2 */
+int pstr_sprintf(pstring s, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
+/* PRINTFLIKE2 */
 int fstr_sprintf(fstring s, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
 
 int d_vfprintf(FILE *f, const char *format, va_list ap) PRINTF_ATTRIBUTE(2,0);
 
 int smb_xvasprintf(char **ptr, const char *format, va_list ap) PRINTF_ATTRIBUTE(2,0);
 
-int asprintf_strupper_m(char **strp, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
-char *talloc_asprintf_strupper_m(TALLOC_CTX *t, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
-
 /* we used to use these fns, but now we have good replacements
    for snprintf and vsnprintf */
 #define slprintf snprintf
@@ -1111,14 +1093,6 @@
 #define VXFS_QUOTA
 #endif
 
-#ifndef XATTR_CREATE
-#define XATTR_CREATE  0x1       /* set value, fail if attr already exists */
-#endif
-
-#ifndef XATTR_REPLACE
-#define XATTR_REPLACE 0x2       /* set value, fail if attr does not exist */
-#endif
-
 #if defined(HAVE_KRB5)
 
 krb5_error_code smb_krb5_parse_name(krb5_context context,
@@ -1133,7 +1107,9 @@
 krb5_error_code krb5_set_real_time(krb5_context context, int32_t seconds, int32_t microseconds);
 #endif
 
+#ifndef HAVE_KRB5_SET_DEFAULT_TGS_KTYPES
 krb5_error_code krb5_set_default_tgs_ktypes(krb5_context ctx, const krb5_enctype *enc);
+#endif
 
 #if defined(HAVE_KRB5_AUTH_CON_SETKEY) && !defined(HAVE_KRB5_AUTH_CON_SETUSERUSERKEY)
 krb5_error_code krb5_auth_con_setuseruserkey(krb5_context context, krb5_auth_context auth_context, krb5_keyblock *keyblock);
@@ -1152,33 +1128,33 @@
 #endif
 
 /* Samba wrapper function for krb5 functionality. */
-bool setup_kaddr( krb5_address *pkaddr, struct sockaddr_storage *paddr);
+void setup_kaddr( krb5_address *pkaddr, struct sockaddr *paddr);
 int create_kerberos_key_from_string(krb5_context context, krb5_principal host_princ, krb5_data *password, krb5_keyblock *key, krb5_enctype enctype);
 int create_kerberos_key_from_string_direct(krb5_context context, krb5_principal host_princ, krb5_data *password, krb5_keyblock *key, krb5_enctype enctype);
-bool get_auth_data_from_tkt(TALLOC_CTX *mem_ctx, DATA_BLOB *auth_data, krb5_ticket *tkt);
+BOOL get_auth_data_from_tkt(TALLOC_CTX *mem_ctx, DATA_BLOB *auth_data, krb5_ticket *tkt);
 krb5_const_principal get_principal_from_tkt(krb5_ticket *tkt);
 krb5_error_code smb_krb5_locate_kdc(krb5_context ctx, const krb5_data *realm, struct sockaddr **addr_pp, int *naddrs, int get_masters);
 #if defined(HAVE_KRB5_LOCATE_KDC)
 krb5_error_code krb5_locate_kdc(krb5_context ctx, const krb5_data *realm, struct sockaddr **addr_pp, int *naddrs, int get_masters);
 #endif
 krb5_error_code get_kerberos_allowed_etypes(krb5_context context, krb5_enctype **enctypes);
-bool get_krb5_smb_session_key(krb5_context context, krb5_auth_context auth_context, DATA_BLOB *session_key, bool remote);
+BOOL get_krb5_smb_session_key(krb5_context context, krb5_auth_context auth_context, DATA_BLOB *session_key, BOOL remote);
 krb5_error_code smb_krb5_kt_free_entry(krb5_context context, krb5_keytab_entry *kt_entry);
 krb5_principal kerberos_fetch_salt_princ_for_host_princ(krb5_context context, krb5_principal host_princ, int enctype);
 void kerberos_set_creds_enctype(krb5_creds *pcreds, int enctype);
-bool kerberos_compatible_enctypes(krb5_context context, krb5_enctype enctype1, krb5_enctype enctype2);
+BOOL kerberos_compatible_enctypes(krb5_context context, krb5_enctype enctype1, krb5_enctype enctype2);
 void kerberos_free_data_contents(krb5_context context, krb5_data *pdata);
 NTSTATUS decode_pac_data(TALLOC_CTX *mem_ctx,
 			 DATA_BLOB *pac_data_blob,
-			 krb5_context context,
+			 krb5_context context, 
 			 krb5_keyblock *service_keyblock,
 			 krb5_const_principal client_principal,
 			 time_t tgs_authtime,
-			 struct PAC_DATA **pac_data_out);
+			 PAC_DATA **pac_data);
 void smb_krb5_checksum_from_pac_sig(krb5_checksum *cksum, 
-				    struct PAC_SIGNATURE_DATA *sig);
+				    PAC_SIGNATURE_DATA *sig);
 krb5_error_code smb_krb5_verify_checksum(krb5_context context,
-					 const krb5_keyblock *keyblock,
+					 krb5_keyblock *keyblock,
 					 krb5_keyusage usage,
 					 krb5_checksum *cksum,
 					 uint8 *data,
@@ -1201,11 +1177,12 @@
 krb5_error_code smb_krb5_parse_name_norealm(krb5_context context, 
 					    const char *name, 
 					    krb5_principal *principal);
-bool smb_krb5_principal_compare_any_realm(krb5_context context, 
+BOOL smb_krb5_principal_compare_any_realm(krb5_context context, 
 					  krb5_const_principal princ1, 
 					  krb5_const_principal princ2);
 int cli_krb5_get_ticket(const char *principal, time_t time_offset, 
 			DATA_BLOB *ticket, DATA_BLOB *session_key_krb5, uint32 extra_ap_opts, const char *ccname, time_t *tgs_expire);
+PAC_LOGON_INFO *get_logon_info_from_pac(PAC_DATA *pac_data);
 krb5_error_code smb_krb5_renew_ticket(const char *ccache_string, const char *client_string, const char *service_string, time_t *expire_time);
 krb5_error_code kpasswd_err_to_krb5_err(krb5_error_code res_code);
 krb5_error_code smb_krb5_gen_netbios_krb5_address(smb_krb5_addresses **kerb_addr);
@@ -1224,14 +1201,6 @@
 					krb5_error_code error_code,
 					const krb5_principal server,
 					krb5_data *reply);
-krb5_enctype smb_get_enctype_from_kt_entry(const krb5_keytab_entry *kt_entry);
-krb5_error_code smb_krb5_enctype_to_string(krb5_context context, 
- 					    krb5_enctype enctype, 
-					    char **etype_s);
-krb5_error_code smb_krb5_open_keytab(krb5_context context, 
- 				      const char *keytab_name, 
-				      bool write_access, 
-				      krb5_keytab *keytab);
 #endif /* HAVE_KRB5 */
 
 
@@ -1242,9 +1211,6 @@
 
 #endif	/* HAVE_LDAP */
 
-#if defined(HAVE_LINUX_READAHEAD) && ! defined(HAVE_READAHEAD_DECL)
-ssize_t readahead(int fd, off64_t offset, size_t count);
-#endif
 
 /* TRUE and FALSE are part of the C99 standard and gcc, but
    unfortunately many vendor compilers don't support them.  Use True
@@ -1288,9 +1254,4 @@
 #include "libnscd.h"
 #endif
 
-#if defined(HAVE_IPV6)
-void in6_addr_to_sockaddr_storage(struct sockaddr_storage *ss,
-				  struct in6_addr ip);
-#endif
-
 #endif /* _INCLUDES_H */

Modified: branches/samba/upstream/source/include/interfaces.h
===================================================================
--- branches/samba/upstream/source/include/interfaces.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/interfaces.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,51 +1,12 @@
-/*
-   Unix SMB/CIFS implementation.
-   Machine customisation and include handling
-   Copyright (C) Jeremy Allison <jra at samba.org> 2007
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-/*
+/* 
    This structure is used by lib/interfaces.c to return the list of network
    interfaces on the machine
 */
 
-#ifndef _INTERFACES_H
-#define _INTERFACES_H
-
-#include "lib/replace/replace.h"
-#include "lib/replace/system/network.h"
-
 #define MAX_INTERFACES 128
 
 struct iface_struct {
 	char name[16];
-	int flags;
-	struct sockaddr_storage ip;
-	struct sockaddr_storage netmask;
-	struct sockaddr_storage bcast;
+	struct in_addr ip;
+	struct in_addr netmask;
 };
-
-bool make_netmask(struct sockaddr_storage *pss_out,
-		  const struct sockaddr_storage *pss_in,
-		  unsigned long masklen);
-void make_bcast(struct sockaddr_storage *pss_out,
-		const struct sockaddr_storage *pss_in,
-		const struct sockaddr_storage *nmask);
-void make_net(struct sockaddr_storage *pss_out,
-	      const struct sockaddr_storage *pss_in,
-	      const struct sockaddr_storage *nmask);
-int get_interfaces(struct iface_struct *ifaces, int max_interfaces);
-
-#endif

Modified: branches/samba/upstream/source/include/intl.h
===================================================================
--- branches/samba/upstream/source/include/intl.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/intl.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,10 +14,12 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 
 /* ideally we would have a static mapping, but that precludes
    dynamic loading. This is a reasonable compromise */
+#define _(x) lang_msg_rotate(x)
 #define N_(x) (x)

Modified: branches/samba/upstream/source/include/libmsrpc.h
===================================================================
--- branches/samba/upstream/source/include/libmsrpc.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/libmsrpc.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #ifndef LIBMSRPC_H
@@ -184,7 +185,7 @@
    uint32 type;
    
    /*if the name or RID was looked up, then found = True*/
-   bool found;
+   BOOL found;
 } CacLookupRidsRecord;
 
 typedef struct _CACUSERINFO {
@@ -228,7 +229,7 @@
    uint16 logon_count;
 
    /**Change password at next logon?*/
-   bool pass_must_change;
+   BOOL pass_must_change;
 
    /**Username*/
    char *username;
@@ -464,7 +465,7 @@
  * @return - un-initialized server handle
  *         - NULL if no memory could be allocated
  */
-CacServerHandle * cac_NewServerHandle(bool allocate_fields);
+CacServerHandle * cac_NewServerHandle(BOOL allocate_fields);
 
 /**
  * Specifies the smbc_get_auth_data_fn to use if you do not want to use the default.
@@ -553,7 +554,7 @@
       uint32 access;
 
       /**Use security quality of service? (True/False)*/
-      bool security_qos;
+      BOOL security_qos;
    } in;
 
    /**Outputs*/
@@ -1238,7 +1239,7 @@
       char *name;
 
       /**delete recursively. WARNING: this might not always work as planned*/
-      bool recursive;
+      BOOL recursive;
    } in;
 
 };
@@ -1576,10 +1577,10 @@
       uint32 timeout;
 
       /**False = shutdown, True = reboot*/
-      bool reboot;
+      BOOL reboot;
       
       /**force the*/
-      bool force;
+      BOOL force;
 
       /*FIXME: make this useful*/
       uint32 reason;
@@ -1776,7 +1777,7 @@
       /**Array storing the names of all the users returned*/
       char **names;
 
-      bool done;
+      BOOL done;
    } out;
 };
 
@@ -2068,7 +2069,7 @@
       /**Array storing the descriptions of all the groups returned*/
       char **descriptions;
 
-      bool done;
+      BOOL done;
    } out;
 };
 
@@ -2104,7 +2105,7 @@
       /**Array storing the descriptions of all the groups returned*/
       char **descriptions;
 
-      bool done;
+      BOOL done;
    } out;
 };
 
@@ -2634,7 +2635,7 @@
       /**Internal value. Do not modify.*/
       uint32 loop_count;
 
-      bool done;
+      BOOL done;
    } out;
 };
 

Modified: branches/samba/upstream/source/include/libmsrpc_internal.h
===================================================================
--- branches/samba/upstream/source/include/libmsrpc_internal.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/libmsrpc_internal.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #ifndef LIBMSRPC_INTERNAL_H
@@ -29,19 +30,19 @@
    uint16 srv_level;
 
    /*stores the initialized/active pipes*/
-   bool pipes[PI_MAX_PIPES];
+   BOOL pipes[PI_MAX_PIPES];
 
    /*underlying smbc context*/
    SMBCCTX *ctx;
 
    /*did the user supply this SMBCCTX?*/
-   bool user_supplied_ctx;
+   BOOL user_supplied_ctx;
 };
 
 /*used to get a struct rpc_pipe_client* to be passed into rpccli* calls*/
 
 /*nessecary prototypes*/
-bool rid_in_list(uint32 rid, uint32 *list, uint32 list_len);
+BOOL rid_in_list(uint32 rid, uint32 *list, uint32 list_len);
 
 int cac_ParseRegPath(char *path, uint32 *reg_type, char **key_name);
 

Modified: branches/samba/upstream/source/include/libsmb_internal.h
===================================================================
--- branches/samba/upstream/source/include/libsmb_internal.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/libsmb_internal.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,80 +1,20 @@
-/* 
-   Unix SMB/Netbios implementation.
-   SMB client library implementation
-   Copyright (C) Andrew Tridgell 1998
-   Copyright (C) Richard Sharpe 2000, 2002
-   Copyright (C) John Terpstra 2000
-   Copyright (C) Tom Jansen (Ninja ISD) 2002 
-   Copyright (C) Derrell Lipman 2003-2008
-   Copyright (C) Jeremy Allison 2007, 2008
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-
-
 #ifndef _LIBSMB_INTERNAL_H_
 #define _LIBSMB_INTERNAL_H_
 
-#include "../include/libsmbclient.h"
-
 #define SMBC_MAX_NAME  1023
 #define SMBC_FILE_MODE (S_IFREG | 0444)
 #define SMBC_DIR_MODE  (S_IFDIR | 0555)
 
-/*
- * DOS Attribute values (used internally)
- */
-typedef struct DOS_ATTR_DESC {
-	int mode;
-	SMB_OFF_T size;
-	time_t create_time;
-	time_t access_time;
-	time_t write_time;
-	time_t change_time;
-	SMB_INO_T inode;
-} DOS_ATTR_DESC;
 
+#include "include/libsmbclient.h"
 
-/*
- * Internal flags for extended attributes
- */
 
-/* internal mode values */
-#define SMBC_XATTR_MODE_ADD          1
-#define SMBC_XATTR_MODE_REMOVE       2
-#define SMBC_XATTR_MODE_REMOVE_ALL   3
-#define SMBC_XATTR_MODE_SET          4
-#define SMBC_XATTR_MODE_CHOWN        5
-#define SMBC_XATTR_MODE_CHGRP        6
-
-#define CREATE_ACCESS_READ      READ_CONTROL_ACCESS
-
-/*We should test for this in configure ... */
-#ifndef ENOTSUP
-#define ENOTSUP EOPNOTSUPP
-#endif
-
-
 struct _SMBCSRV {
 	struct cli_state *cli;
 	dev_t dev;
-	bool no_pathinfo;
-	bool no_pathinfo2;
-        bool no_nt_session;
-        POLICY_HND pol;
+	BOOL no_pathinfo;
+	BOOL no_pathinfo2;
+        BOOL no_nt_session;
 
 	SMBCSRV *next, *prev;
 	
@@ -97,7 +37,7 @@
 	char *fname;
 	SMB_OFF_T offset;
 	struct _SMBCSRV *srv;
-	bool file;
+	BOOL file;
 	struct smbc_dir_list *dir_list, *dir_end, *dir_next;
 	int dir_type, dir_error;
 
@@ -105,13 +45,12 @@
 };
 
 
-/*
- * Context structure
- */
-struct SMBC_internal_data {
+struct smbc_internal_data {
 
-	/* True when this handle is initialized */
-	bool                                    initialized;
+	/*
+         * Is this handle initialized ? 
+	 */
+	BOOL    _initialized;
 
         /* dirent pointer location
          *
@@ -124,22 +63,22 @@
          * According to <linux/limits.h>, NAME_MAX is 255.  Is it longer
          * anyplace else?
          */
-	char                                    dirent[1024];
+	char    _dirent[1024];
 
 	/*
          * server connection list
 	 */
-	SMBCSRV *                               servers;
+	SMBCSRV * _servers;
 	
 	/*
          * open file/dir list
 	 */
-	SMBCFILE *                              files;
+	SMBCFILE * _files;
 
         /*
          * Log to standard error instead of the more typical standard output
          */
-        bool                                    debug_stderr;
+        BOOL _debug_stderr;
 
         /*
          * Support "Create Time" in get/set with the *xattr() functions, if
@@ -148,389 +87,26 @@
          * CREATE_TIME.  Default is FALSE, i.e.  to use the old-style shorter
          * names and to not support CREATE time, for backward compatibility.
          */
-        bool                                    full_time_names;
+        BOOL _full_time_names;
 
         /*
          * The share mode of a file being opened.  To match POSIX semantics
          * (and maintain backward compatibility), DENY_NONE is the default.
          */
-        smbc_share_mode                         share_mode;
+         smbc_share_mode _share_mode;
 
         /*
          * Authentication function which includes the context.  This will be
          * used if set; otherwise context->callbacks.auth_fn() will be used.
          */
-        smbc_get_auth_data_with_context_fn      auth_fn_with_context;
+        smbc_get_auth_data_with_context_fn _auth_fn_with_context;
 
         /*
          * An opaque (to this library) user data handle which can be set
          * and retrieved with smbc_option_set() and smbc_option_get().
          */
-        void *                                  user_data;
-
-        /*
-         * Should we attempt UNIX smb encryption ? 
-         * Set to 0 if we should never attempt, set to 1 if
-         * encryption requested, set to 2 if encryption required.
-         */
-        smbc_smb_encrypt_level                  smb_encryption_level;
-
-        struct smbc_server_cache * server_cache;
-
-        /* POSIX emulation functions */
-        struct
-        {
-#if 0 /* Left in libsmbclient.h for backward compatibility */
-                smbc_open_fn                    open_fn;
-                smbc_creat_fn                   creat_fn;
-                smbc_read_fn                    read_fn;
-                smbc_write_fn                   write_fn;
-                smbc_unlink_fn                  unlink_fn;
-                smbc_rename_fn                  rename_fn;
-                smbc_lseek_fn                   lseek_fn;
-                smbc_stat_fn                    stat_fn;
-                smbc_fstat_fn                   fstat_fn;
-#endif
-                smbc_ftruncate_fn               ftruncate_fn;
-#if 0 /* Left in libsmbclient.h for backward compatibility */
-                smbc_close_fn                   close_fn;
-                smbc_opendir_fn                 opendir_fn;
-                smbc_closedir_fn                closedir_fn;
-                smbc_readdir_fn                 readdir_fn;
-                smbc_getdents_fn                getdents_fn;
-                smbc_mkdir_fn                   mkdir_fn;
-                smbc_rmdir_fn                   rmdir_fn;
-                smbc_telldir_fn                 telldir_fn;
-                smbc_lseekdir_fn                lseekdir_fn;
-                smbc_fstatdir_fn                fstatdir_fn;
-                smbc_chmod_fn                   chmod_fn;
-                smbc_utimes_fn                  utimes_fn;
-                smbc_setxattr_fn                setxattr_fn;
-                smbc_getxattr_fn                getxattr_fn;
-                smbc_removexattr_fn             removexattr_fn;
-                smbc_listxattr_fn               listxattr_fn;
-#endif
-        }               posix_emu;
-
-#if 0 /* Left in libsmbclient.h for backward compatibility */
-        /* Printing-related functions */
-        struct
-        {
-                smbc_print_file_fn              print_file_fn;
-                smbc_open_print_job_fn          open_print_job_fn;
-                smbc_list_print_jobs_fn         list_print_jobs_fn;
-                smbc_unlink_print_job_fn        unlink_print_job_fn;
-        }               printing;
-#endif
-
-#if 0 /* None available yet */
-        /* SMB high-level functions */
-        struct
-        {
-        }               smb;
-
-#endif
+        void * _user_data;
 };	
 
-/* Functions in libsmb_cache.c */
-int
-SMBC_add_cached_server(SMBCCTX * context,
-                       SMBCSRV * newsrv,
-                       const char * server,
-                       const char * share, 
-                       const char * workgroup,
-                       const char * username);
 
-SMBCSRV *
-SMBC_get_cached_server(SMBCCTX * context,
-                       const char * server, 
-                       const char * share,
-                       const char * workgroup,
-                       const char * user);
-
-int
-SMBC_remove_cached_server(SMBCCTX * context,
-                          SMBCSRV * server);
-
-int
-SMBC_purge_cached_servers(SMBCCTX * context);
-
-
-/* Functions in libsmb_dir.c */
-int
-SMBC_check_options(char *server,
-                   char *share,
-                   char *path,
-                   char *options);
-
-SMBCFILE *
-SMBC_opendir_ctx(SMBCCTX *context,
-                 const char *fname);
-
-int
-SMBC_closedir_ctx(SMBCCTX *context,
-                  SMBCFILE *dir);
-
-struct smbc_dirent *
-SMBC_readdir_ctx(SMBCCTX *context,
-                 SMBCFILE *dir);
-
-int
-SMBC_getdents_ctx(SMBCCTX *context,
-                  SMBCFILE *dir,
-                  struct smbc_dirent *dirp,
-                  int count);
-
-int
-SMBC_mkdir_ctx(SMBCCTX *context,
-               const char *fname,
-               mode_t mode);
-
-int
-SMBC_rmdir_ctx(SMBCCTX *context,
-               const char *fname);
-
-off_t
-SMBC_telldir_ctx(SMBCCTX *context,
-                 SMBCFILE *dir);
-
-int
-SMBC_lseekdir_ctx(SMBCCTX *context,
-                  SMBCFILE *dir,
-                  off_t offset);
-
-int
-SMBC_fstatdir_ctx(SMBCCTX *context,
-                  SMBCFILE *dir,
-                  struct stat *st);
-
-int
-SMBC_chmod_ctx(SMBCCTX *context,
-               const char *fname,
-               mode_t newmode);
-
-int
-SMBC_utimes_ctx(SMBCCTX *context,
-                const char *fname,
-                struct timeval *tbuf);
-
-int
-SMBC_unlink_ctx(SMBCCTX *context,
-                const char *fname);
-
-int
-SMBC_rename_ctx(SMBCCTX *ocontext,
-                const char *oname, 
-                SMBCCTX *ncontext,
-                const char *nname);
-
-
-/* Functions in libsmb_file.c */
-SMBCFILE *
-SMBC_open_ctx(SMBCCTX *context,
-              const char *fname,
-              int flags,
-              mode_t mode);
-
-SMBCFILE *
-SMBC_creat_ctx(SMBCCTX *context,
-               const char *path,
-               mode_t mode);
-
-ssize_t
-SMBC_read_ctx(SMBCCTX *context,
-              SMBCFILE *file,
-              void *buf,
-              size_t count);
-
-ssize_t
-SMBC_write_ctx(SMBCCTX *context,
-               SMBCFILE *file,
-               void *buf,
-               size_t count);
-
-int
-SMBC_close_ctx(SMBCCTX *context,
-               SMBCFILE *file);
-
-bool
-SMBC_getatr(SMBCCTX * context,
-            SMBCSRV *srv,
-            char *path,
-            uint16 *mode,
-            SMB_OFF_T *size,
-            struct timespec *create_time_ts,
-            struct timespec *access_time_ts,
-            struct timespec *write_time_ts,
-            struct timespec *change_time_ts,
-            SMB_INO_T *ino);
-
-bool
-SMBC_setatr(SMBCCTX * context, SMBCSRV *srv, char *path, 
-            time_t create_time,
-            time_t access_time,
-            time_t write_time,
-            time_t change_time,
-            uint16 mode);
-
-off_t
-SMBC_lseek_ctx(SMBCCTX *context,
-               SMBCFILE *file,
-               off_t offset,
-               int whence);
-
-int
-SMBC_ftruncate_ctx(SMBCCTX *context,
-                   SMBCFILE *file,
-                   off_t length);
-
-
-/* Functions in libsmb_misc.c */
-int
-SMBC_dlist_contains(SMBCFILE * list, SMBCFILE *p);
-
-int
-SMBC_errno(SMBCCTX *context,
-           struct cli_state *c);
-
-
-/* Functions in libsmb_path.c */
-int
-SMBC_urldecode(char *dest,
-               char *src,
-               size_t max_dest_len);
-
-int
-SMBC_urlencode(char *dest,
-               char *src,
-               int max_dest_len);
-
-int
-SMBC_parse_path(TALLOC_CTX *ctx,
-		SMBCCTX *context,
-                const char *fname,
-                char **pp_workgroup,
-                char **pp_server,
-                char **pp_share,
-                char **pp_path,
-		char **pp_user,
-                char **pp_password,
-                char **pp_options);
-
-
-/* Functions in libsmb_printjob.c */
-SMBCFILE *
-SMBC_open_print_job_ctx(SMBCCTX *context,
-                        const char *fname);
-
-int
-SMBC_print_file_ctx(SMBCCTX *c_file,
-                    const char *fname,
-                    SMBCCTX *c_print,
-                    const char *printq);
-
-int
-SMBC_list_print_jobs_ctx(SMBCCTX *context,
-                         const char *fname,
-                         smbc_list_print_job_fn fn);
-
-int
-SMBC_unlink_print_job_ctx(SMBCCTX *context,
-                          const char *fname,
-                          int id);
-
-
-/* Functions in libsmb_server.c */
-int
-SMBC_check_server(SMBCCTX * context,
-                  SMBCSRV * server);
-
-int
-SMBC_remove_unused_server(SMBCCTX * context,
-                          SMBCSRV * srv);
-
-void
-SMBC_call_auth_fn(TALLOC_CTX *ctx,
-                  SMBCCTX *context,
-                  const char *server,
-                  const char *share,
-                  char **pp_workgroup,
-                  char **pp_username,
-                  char **pp_password);
-
-void
-SMBC_get_auth_data(const char *server, const char *share,
-                   char *workgroup_buf, int workgroup_buf_len,
-                   char *username_buf, int username_buf_len,
-                   char *password_buf, int password_buf_len);
-
-SMBCSRV *
-SMBC_find_server(TALLOC_CTX *ctx,
-                 SMBCCTX *context,
-                 const char *server,
-                 const char *share,
-                 char **pp_workgroup,
-                 char **pp_username,
-                 char **pp_password);
-
-SMBCSRV *
-SMBC_server(TALLOC_CTX *ctx,
-            SMBCCTX *context,
-            bool connect_if_not_found,
-            const char *server,
-            const char *share,
-            char **pp_workgroup,
-            char **pp_username,
-            char **pp_password);
-
-SMBCSRV *
-SMBC_attr_server(TALLOC_CTX *ctx,
-                 SMBCCTX *context,
-                 const char *server,
-                 const char *share,
-                 char **pp_workgroup,
-                 char **pp_username,
-                 char **pp_password);
-
-
-/* Functions in libsmb_stat.c */
-int
-SMBC_stat_ctx(SMBCCTX *context,
-              const char *fname,
-              struct stat *st);
-
-int
-SMBC_fstat_ctx(SMBCCTX *context,
-               SMBCFILE *file,
-               struct stat *st);
-
-
-/* Functions in libsmb_xattr.c */
-int
-SMBC_setxattr_ctx(SMBCCTX *context,
-                  const char *fname,
-                  const char *name,
-                  const void *value,
-                  size_t size,
-                  int flags);
-
-int
-SMBC_getxattr_ctx(SMBCCTX *context,
-                  const char *fname,
-                  const char *name,
-                  const void *value,
-                  size_t size);
-
-int
-SMBC_removexattr_ctx(SMBCCTX *context,
-                     const char *fname,
-                     const char *name);
-
-int
-SMBC_listxattr_ctx(SMBCCTX *context,
-                   const char *fname,
-                   char *list,
-                   size_t size);
-
-
 #endif

Modified: branches/samba/upstream/source/include/libsmbclient.h
===================================================================
--- branches/samba/upstream/source/include/libsmbclient.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/libsmbclient.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,12 +5,12 @@
   Copyright (C) Richard Sharpe 2000
   Copyright (C) John Terpsra 2000
   Copyright (C) Tom Jansen (Ninja ISD) 2002 
-  Copyright (C) Derrell Lipman 2003-2008
+  Copyright (C) Derrell Lipman 2003
 
    
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
-  the Free Software Foundation; either version 3 of the License, or
+  the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.
    
   This program is distributed in the hope that it will be useful,
@@ -19,19 +19,13 @@
   GNU General Public License for more details.
    
   You should have received a copy of the GNU General Public License
-  along with this program; if not, see <http://www.gnu.org/licenses/>.
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
   =====================================================================*/
 
 #ifndef SMBCLIENT_H_INCLUDED
 #define SMBCLIENT_H_INCLUDED
 
-#undef DEPRECATED_SMBC_INTERFACE
-#if ! defined(__LIBSMBCLIENT_INTERNAL__) && defined(__GNUC__)
-# define DEPRECATED_SMBC_INTERFACE      __attribute__ ((deprecated))
-#else
-# define DEPRECATED_SMBC_INTERFACE
-#endif
-
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -149,7 +143,7 @@
 
 /*
  * Valid values for the option "open_share_mode", when calling
- * smbc_setOptionOpenShareMode()
+ * smbc_option_set()
  */
 typedef enum smbc_share_mode
 {
@@ -162,21 +156,6 @@
 } smbc_share_mode;
 
 
-/**
- * Values for option SMB Encryption Level, as set and retrieved with
- * smbc_setOptionSmbEncryptionLevel() and smbc_getOptionSmbEncryptionLevel()
- */
-typedef enum smbc_smb_encrypt_level
-{
-    SMBC_ENCRYPTLEVEL_NONE      = 0,
-    SMBC_ENCRYPTLEVEL_REQUEST   = 1,
-    SMBC_ENCRYPTLEVEL_REQUIRE   = 2
-} smbc_smb_encrypt_level;
-
-
-typedef int smbc_bool;
-
-
 #ifndef ENOATTR
 # define ENOATTR ENOENT        /* No such attribute */
 #endif
@@ -235,21 +214,6 @@
 typedef struct _SMBCCTX SMBCCTX;
 
 
-/*
- * Flags for SMBCCTX->flags
- *
- * NEW CODE SHOULD NOT DIRECTLY MANIPULATE THE CONTEXT STRUCTURE.
- * Instead, use:
- *   smbc_setOptionUseKerberos()
- *   smbc_getOptionUseKerberos()
- *   smbc_setOptionFallbackAfterKerberos()
- *   smbc_getOptionFallbackAFterKerberos()
- *   smbc_setOptionNoAutoAnonymousLogin()
- *   smbc_getOptionNoAutoAnonymousLogin()
- */
-# define SMB_CTX_FLAG_USE_KERBEROS (1 << 0)
-# define SMB_CTX_FLAG_FALLBACK_AFTER_KERBEROS (1 << 1)
-# define SMBCCTX_FLAG_NO_AUTO_ANONYMOUS_LOGON (1 << 2)
 
 
 
@@ -426,557 +390,208 @@
 typedef int (*smbc_purge_cached_fn)     (SMBCCTX * c);
 
 
-
-/*****************************************
- * Getters and setters for CONFIGURATION *
- *****************************************/
-
-/** Get the debug level */
-int
-smbc_getDebug(SMBCCTX *c);
-
-/** Set the debug level */
-void
-smbc_setDebug(SMBCCTX *c, int debug);
-
-/** Get the netbios name used for making connections */
-char *
-smbc_getNetbiosName(SMBCCTX *c);
-
-/** Set the netbios name used for making connections */
-void
-smbc_setNetbiosName(SMBCCTX *c, char * netbios_name);
-
-/** Get the workgroup used for making connections */
-char *
-smbc_getWorkgroup(SMBCCTX *c);
-
-/** Set the workgroup used for making connections */
-void smbc_setWorkgroup(SMBCCTX *c, char * workgroup);
-
-/** Get the username used for making connections */
-char *
-smbc_getUser(SMBCCTX *c);
-
-/** Set the username used for making connections */
-void
-smbc_setUser(SMBCCTX *c, char * user);
-
-/**
- * Get the timeout used for waiting on connections and response data
- * (in milliseconds)
+/**@ingroup structure
+ * Structure that contains a client context information 
+ * This structure is know as SMBCCTX
  */
-int
-smbc_getTimeout(SMBCCTX *c);
+struct _SMBCCTX {
+	/** debug level 
+	 */
+	int     debug;
+	
+	/** netbios name used for making connections
+	 */
+	char * netbios_name;
 
-/**
- * Set the timeout used for waiting on connections and response data
- * (in milliseconds)
- */
-void
-smbc_setTimeout(SMBCCTX *c, int timeout);
+	/** workgroup name used for making connections 
+	 */
+	char * workgroup;
 
+	/** username used for making connections 
+	 */
+	char * user;
 
+	/** timeout used for waiting on connections / response data (in milliseconds)
+	 */
+	int timeout;
 
-/***********************************
- * Getters and setters for OPTIONS *
- ***********************************/
+	/** callable functions for files:
+	 * For usage and return values see the smbc_* functions
+	 */ 
+	SMBCFILE * (*open)    (SMBCCTX *c, const char *fname, int flags, mode_t mode);
+	SMBCFILE * (*creat)   (SMBCCTX *c, const char *path, mode_t mode);
+	ssize_t    (*read)    (SMBCCTX *c, SMBCFILE *file, void *buf, size_t count);
+	ssize_t    (*write)   (SMBCCTX *c, SMBCFILE *file, void *buf, size_t count);
+	int        (*unlink)  (SMBCCTX *c, const char *fname);
+	int        (*rename)  (SMBCCTX *ocontext, const char *oname, 
+			       SMBCCTX *ncontext, const char *nname);
+	off_t      (*lseek)   (SMBCCTX *c, SMBCFILE * file, off_t offset, int whence);
+	int        (*stat)    (SMBCCTX *c, const char *fname, struct stat *st);
+	int        (*fstat)   (SMBCCTX *c, SMBCFILE *file, struct stat *st);
+	int        (*close_fn) (SMBCCTX *c, SMBCFILE *file);
 
-/** Get whether to log to standard error instead of standard output */
-smbc_bool
-smbc_getOptionDebugToStderr(SMBCCTX *c);
+	/** callable functions for dirs
+	 */ 
+	SMBCFILE * (*opendir) (SMBCCTX *c, const char *fname);
+	int        (*closedir)(SMBCCTX *c, SMBCFILE *dir);
+	struct smbc_dirent * (*readdir)(SMBCCTX *c, SMBCFILE *dir);
+	int        (*getdents)(SMBCCTX *c, SMBCFILE *dir, 
+			       struct smbc_dirent *dirp, int count);
+	int        (*mkdir)   (SMBCCTX *c, const char *fname, mode_t mode);
+	int        (*rmdir)   (SMBCCTX *c, const char *fname);
+	off_t      (*telldir) (SMBCCTX *c, SMBCFILE *dir);
+	int        (*lseekdir)(SMBCCTX *c, SMBCFILE *dir, off_t offset);
+	int        (*fstatdir)(SMBCCTX *c, SMBCFILE *dir, struct stat *st);
+        int        (*chmod)(SMBCCTX *c, const char *fname, mode_t mode);
+        int        (*utimes)(SMBCCTX *c,
+                             const char *fname, struct timeval *tbuf);
+        int        (*setxattr)(SMBCCTX *context,
+                               const char *fname,
+                               const char *name,
+                               const void *value,
+                               size_t size,
+                               int flags);
+        int        (*getxattr)(SMBCCTX *context,
+                               const char *fname,
+                               const char *name,
+                               const void *value,
+                               size_t size);
+        int        (*removexattr)(SMBCCTX *context,
+                                  const char *fname,
+                                  const char *name);
+        int        (*listxattr)(SMBCCTX *context,
+                                const char *fname,
+                                char *list,
+                                size_t size);
 
-/** Set whether to log to standard error instead of standard output */
-void
-smbc_setOptionDebugToStderr(SMBCCTX *c, smbc_bool b);
+	/** callable functions for printing
+	 */ 
+	int        (*print_file)(SMBCCTX *c_file, const char *fname, 
+				 SMBCCTX *c_print, const char *printq);
+	SMBCFILE * (*open_print_job)(SMBCCTX *c, const char *fname);
+	int        (*list_print_jobs)(SMBCCTX *c, const char *fname, smbc_list_print_job_fn fn);
+	int        (*unlink_print_job)(SMBCCTX *c, const char *fname, int id);
 
-/**
- * Get whether to use new-style time attribute names, e.g. WRITE_TIME rather
- * than the old-style names such as M_TIME.  This allows also setting/getting
- * CREATE_TIME which was previously unimplemented.  (Note that the old C_TIME
- * was supposed to be CHANGE_TIME but was confused and sometimes referred to
- * CREATE_TIME.)
- */
-smbc_bool
-smbc_getOptionFullTimeNames(SMBCCTX *c);
 
-/**
- * Set whether to use new-style time attribute names, e.g. WRITE_TIME rather
- * than the old-style names such as M_TIME.  This allows also setting/getting
- * CREATE_TIME which was previously unimplemented.  (Note that the old C_TIME
- * was supposed to be CHANGE_TIME but was confused and sometimes referred to
- * CREATE_TIME.)
- */
-void
-smbc_setOptionFullTimeNames(SMBCCTX *c, smbc_bool b);
+        /*
+        ** Callbacks
+        * These callbacks _always_ have to be initialized because they will
+        * not be checked at dereference for increased speed.
+        */
+	struct _smbc_callbacks {
+		/** authentication function callback: called upon auth requests
+		 */
+                smbc_get_auth_data_fn auth_fn;
+		
+		/** check if a server is still good
+		 */
+		smbc_check_server_fn check_server_fn;
 
-/**
- * Get the share mode to use for files opened with SMBC_open_ctx().  The
- * default is SMBC_SHAREMODE_DENY_NONE.
- */
-smbc_share_mode
-smbc_getOptionOpenShareMode(SMBCCTX *c);
+		/** remove a server if unused
+		 */
+		smbc_remove_unused_server_fn remove_unused_server_fn;
 
-/**
- * Set the share mode to use for files opened with SMBC_open_ctx().  The
- * default is SMBC_SHAREMODE_DENY_NONE.
- */
-void
-smbc_setOptionOpenShareMode(SMBCCTX *c, smbc_share_mode share_mode);
+		/** Cache subsystem
+		 * For an example cache system see samba/source/libsmb/libsmb_cache.c
+		 * Cache subsystem functions follow.
+		 */
 
-/** Retrieve a previously saved user data handle */
-void *
-smbc_getOptionUserData(SMBCCTX *c);
+		/** server cache addition 
+		 */
+		smbc_add_cached_srv_fn add_cached_srv_fn;
 
-/** Save a user data handle */
-void
-smbc_setOptionUserData(SMBCCTX *c, void *user_data);
+		/** server cache lookup 
+		 */
+		smbc_get_cached_srv_fn get_cached_srv_fn;
 
-/** Get the encoded value for encryption level. */
-smbc_smb_encrypt_level
-smbc_getOptionSmbEncryptionLevel(SMBCCTX *c);
+		/** server cache removal
+		 */
+		smbc_remove_cached_srv_fn remove_cached_srv_fn;
+		
+		/** server cache purging, try to remove all cached servers (disconnect)
+		 */
+		smbc_purge_cached_fn purge_cached_fn;
+	} callbacks;
 
-/** Set the encoded value for encryption level. */
-void
-smbc_setOptionSmbEncryptionLevel(SMBCCTX *c, smbc_smb_encrypt_level level);
 
-/**
- * Get from how many local master browsers should the list of workgroups be
- * retrieved.  It can take up to 12 minutes or longer after a server becomes a
- * local master browser, for it to have the entire browse list (the list of
- * workgroups/domains) from an entire network.  Since a client never knows
- * which local master browser will be found first, the one which is found
- * first and used to retrieve a browse list may have an incomplete or empty
- * browse list.  By requesting the browse list from multiple local master
- * browsers, a more complete list can be generated.  For small networks (few
- * workgroups), it is recommended that this value be set to 0, causing the
- * browse lists from all found local master browsers to be retrieved and
- * merged.  For networks with many workgroups, a suitable value for this
- * variable is probably somewhere around 3. (Default: 3).
- */
-int
-smbc_getOptionBrowseMaxLmbCount(SMBCCTX *c);
+	/** Space to store private data of the server cache.
+	 */
+	struct smbc_server_cache * server_cache;
 
-/**
- * Set from how many local master browsers should the list of workgroups be
- * retrieved.  It can take up to 12 minutes or longer after a server becomes a
- * local master browser, for it to have the entire browse list (the list of
- * workgroups/domains) from an entire network.  Since a client never knows
- * which local master browser will be found first, the one which is found
- * first and used to retrieve a browse list may have an incomplete or empty
- * browse list.  By requesting the browse list from multiple local master
- * browsers, a more complete list can be generated.  For small networks (few
- * workgroups), it is recommended that this value be set to 0, causing the
- * browse lists from all found local master browsers to be retrieved and
- * merged.  For networks with many workgroups, a suitable value for this
- * variable is probably somewhere around 3. (Default: 3).
- */
-void
-smbc_setOptionBrowseMaxLmbCount(SMBCCTX *c, int count);
+	int flags;
+	
+        /** user options selections that apply to this session
+         */
+        struct _smbc_options {
 
-/**
- * Get whether to url-encode readdir entries.
- *
- * There is a difference in the desired return strings from
- * smbc_readdir() depending upon whether the filenames are to
- * be displayed to the user, or whether they are to be
- * appended to the path name passed to smbc_opendir() to call
- * a further smbc_ function (e.g. open the file with
- * smbc_open()).  In the former case, the filename should be
- * in "human readable" form.  In the latter case, the smbc_
- * functions expect a URL which must be url-encoded.  Those
- * functions decode the URL.  If, for example, smbc_readdir()
- * returned a file name of "abc%20def.txt", passing a path
- * with this file name attached to smbc_open() would cause
- * smbc_open to attempt to open the file "abc def.txt" since
- * the %20 is decoded into a space.
- *
- * Set this option to True if the names returned by
- * smbc_readdir() should be url-encoded such that they can be
- * passed back to another smbc_ call.  Set it to False if the
- * names returned by smbc_readdir() are to be presented to the
- * user.
- *
- * For backwards compatibility, this option defaults to False.
- */
-smbc_bool
-smbc_getOptionUrlEncodeReaddirEntries(SMBCCTX *c);
+                /*
+                 * From how many local master browsers should the list of
+                 * workgroups be retrieved?  It can take up to 12 minutes or
+                 * longer after a server becomes a local master browser, for
+                 * it to have the entire browse list (the list of
+                 * workgroups/domains) from an entire network.  Since a client
+                 * never knows which local master browser will be found first,
+                 * the one which is found first and used to retrieve a browse
+                 * list may have an incomplete or empty browse list.  By
+                 * requesting the browse list from multiple local master
+                 * browsers, a more complete list can be generated.  For small
+                 * networks (few workgroups), it is recommended that this
+                 * value be set to 0, causing the browse lists from all found
+                 * local master browsers to be retrieved and merged.  For
+                 * networks with many workgroups, a suitable value for this
+                 * variable is probably somewhere around 3. (Default: 3).
+                 */
+                int browse_max_lmb_count;
 
-/**
- * Set whether to url-encode readdir entries.
- *
- * There is a difference in the desired return strings from
- * smbc_readdir() depending upon whether the filenames are to
- * be displayed to the user, or whether they are to be
- * appended to the path name passed to smbc_opendir() to call
- * a further smbc_ function (e.g. open the file with
- * smbc_open()).  In the former case, the filename should be
- * in "human readable" form.  In the latter case, the smbc_
- * functions expect a URL which must be url-encoded.  Those
- * functions decode the URL.  If, for example, smbc_readdir()
- * returned a file name of "abc%20def.txt", passing a path
- * with this file name attached to smbc_open() would cause
- * smbc_open to attempt to open the file "abc def.txt" since
- * the %20 is decoded into a space.
- *
- * Set this option to True if the names returned by
- * smbc_readdir() should be url-encoded such that they can be
- * passed back to another smbc_ call.  Set it to False if the
- * names returned by smbc_readdir() are to be presented to the
- * user.
- *
- * For backwards compatibility, this option defaults to False.
- */
-void
-smbc_setOptionUrlEncodeReaddirEntries(SMBCCTX *c, smbc_bool b);
+                /*
+                 * There is a difference in the desired return strings from
+                 * smbc_readdir() depending upon whether the filenames are to
+                 * be displayed to the user, or whether they are to be
+                 * appended to the path name passed to smbc_opendir() to call
+                 * a further smbc_ function (e.g. open the file with
+                 * smbc_open()).  In the former case, the filename should be
+                 * in "human readable" form.  In the latter case, the smbc_
+                 * functions expect a URL which must be url-encoded.  Those
+                 * functions decode the URL.  If, for example, smbc_readdir()
+                 * returned a file name of "abc%20def.txt", passing a path
+                 * with this file name attached to smbc_open() would cause
+                 * smbc_open to attempt to open the file "abc def.txt" since
+                 * the %20 is decoded into a space.
+                 *
+                 * Set this option to True if the names returned by
+                 * smbc_readdir() should be url-encoded such that they can be
+                 * passed back to another smbc_ call.  Set it to False if the
+                 * names returned by smbc_readdir() are to be presented to the
+                 * user.
+                 *
+                 * For backwards compatibility, this option defaults to False.
+                 */
+                int urlencode_readdir_entries;
 
-/**
- * Get whether to use the same connection for all shares on a server.
- *
- * Some Windows versions appear to have a limit to the number
- * of concurrent SESSIONs and/or TREE CONNECTions.  In
- * one-shot programs (i.e. the program runs and then quickly
- * ends, thereby shutting down all connections), it is
- * probably reasonable to establish a new connection for each
- * share.  In long-running applications, the limitation can be
- * avoided by using only a single connection to each server,
- * and issuing a new TREE CONNECT when the share is accessed.
- */
-smbc_bool
-smbc_getOptionOneSharePerServer(SMBCCTX *c);
+                /*
+                 * Some Windows versions appear to have a limit to the number
+                 * of concurrent SESSIONs and/or TREE CONNECTions.  In
+                 * one-shot programs (i.e. the program runs and then quickly
+                 * ends, thereby shutting down all connections), it is
+                 * probably reasonable to establish a new connection for each
+                 * share.  In long-running applications, the limitation can be
+                 * avoided by using only a single connection to each server,
+                 * and issuing a new TREE CONNECT when the share is accessed.
+                 */
+                int one_share_per_server;
+        } options;
+	
+	/** INTERNAL DATA
+	 * do _NOT_ touch this from your program !
+	 */
+	struct smbc_internal_data * internal;
+};
 
-/**
- * Set whether to use the same connection for all shares on a server.
- *
- * Some Windows versions appear to have a limit to the number
- * of concurrent SESSIONs and/or TREE CONNECTions.  In
- * one-shot programs (i.e. the program runs and then quickly
- * ends, thereby shutting down all connections), it is
- * probably reasonable to establish a new connection for each
- * share.  In long-running applications, the limitation can be
- * avoided by using only a single connection to each server,
- * and issuing a new TREE CONNECT when the share is accessed.
- */
-void
-smbc_setOptionOneSharePerServer(SMBCCTX *c, smbc_bool b);
+/* Flags for SMBCCTX->flags */
+#define SMB_CTX_FLAG_USE_KERBEROS (1 << 0)
+#define SMB_CTX_FLAG_FALLBACK_AFTER_KERBEROS (1 << 1)
+#define SMBCCTX_FLAG_NO_AUTO_ANONYMOUS_LOGON (1 << 2) /* don't try to do automatic anon login */
 
-/** Get whether to enable use of kerberos */
-smbc_bool
-smbc_getOptionUseKerberos(SMBCCTX *c);
-
-/** Set whether to enable use of kerberos */
-void
-smbc_setOptionUseKerberos(SMBCCTX *c, smbc_bool b);
-
-/** Get whether to fallback after kerberos */
-smbc_bool
-smbc_getOptionFallbackAfterKerberos(SMBCCTX *c);
-
-/** Set whether to fallback after kerberos */
-void
-smbc_setOptionFallbackAfterKerberos(SMBCCTX *c, smbc_bool b);
-
-/** Get whether to automatically select anonymous login */
-smbc_bool
-smbc_getOptionNoAutoAnonymousLogin(SMBCCTX *c);
-
-/** Set whether to automatically select anonymous login */
-void
-smbc_setOptionNoAutoAnonymousLogin(SMBCCTX *c, smbc_bool b);
-
-
-
-/*************************************
- * Getters and setters for FUNCTIONS *
- *************************************/
-
-/** Get the function for obtaining authentication data */
-smbc_get_auth_data_fn smbc_getFunctionAuthData(SMBCCTX *c);
-
-/** Set the function for obtaining authentication data */
-void smbc_setFunctionAuthData(SMBCCTX *c, smbc_get_auth_data_fn fn);
-
-/** Get the new-style authentication function which includes the context. */
-smbc_get_auth_data_with_context_fn
-smbc_getFunctionAuthDataWithContext(SMBCCTX *c);
-
-/** Set the new-style authentication function which includes the context. */
-void
-smbc_setFunctionAuthDataWithContext(SMBCCTX *c,
-                                    smbc_get_auth_data_with_context_fn fn);
-
-/** Get the function for checking if a server is still good */
-smbc_check_server_fn smbc_getFunctionCheckServer(SMBCCTX *c);
-
-/** Set the function for checking if a server is still good */
-void smbc_setFunctionCheckServer(SMBCCTX *c, smbc_check_server_fn fn);
-
-/** Get the function for removing a server if unused */
-smbc_remove_unused_server_fn smbc_getFunctionRemoveUnusedServer(SMBCCTX *c);
-
-/** Set the function for removing a server if unused */
-void smbc_setFunctionRemoveUnusedServer(SMBCCTX *c,
-                                        smbc_remove_unused_server_fn fn);
-
-/** Get the function for adding a cached server */
-smbc_add_cached_srv_fn smbc_getFunctionAddCachedServer(SMBCCTX *c);
-
-/** Set the function for adding a cached server */
-void smbc_setFunctionAddCachedServer(SMBCCTX *c, smbc_add_cached_srv_fn fn);
-
-/** Get the function for server cache lookup */
-smbc_get_cached_srv_fn smbc_getFunctionGetCachedServer(SMBCCTX *c);
-
-/** Set the function for server cache lookup */
-void smbc_setFunctionGetCachedServer(SMBCCTX *c, smbc_get_cached_srv_fn fn);
-
-/** Get the function for server cache removal */
-smbc_remove_cached_srv_fn smbc_getFunctionRemoveCachedServer(SMBCCTX *c);
-
-/** Set the function for server cache removal */
-void smbc_setFunctionRemoveCachedServer(SMBCCTX *c,
-                                        smbc_remove_cached_srv_fn fn);
-
-/**
- * Get the function for server cache purging.  This function tries to
- * remove all cached servers (e.g. on disconnect)
- */
-smbc_purge_cached_fn smbc_getFunctionPurgeCachedServers(SMBCCTX *c);
-
-/**
- * Set the function for server cache purging.  This function tries to
- * remove all cached servers (e.g. on disconnect)
- */
-void smbc_setFunctionPurgeCachedServers(SMBCCTX *c,
-                                        smbc_purge_cached_fn fn);
-
-/** Get the function to store private data of the server cache */
-struct smbc_server_cache * smbc_getServerCacheData(SMBCCTX *c);
-
-/** Set the function to store private data of the server cache */
-void smbc_setServerCacheData(SMBCCTX *c, struct smbc_server_cache * cache);
-
-
-
-/*****************************************************************
- * Callable functions for files.                                 *
- * Each callable has a function signature typedef, a declaration *
- * for the getter, and a declaration for the setter.             *
- *****************************************************************/
-
-typedef SMBCFILE * (*smbc_open_fn)(SMBCCTX *c,
-                                   const char *fname,
-                                   int flags,
-                                   mode_t mode);
-smbc_open_fn smbc_getFunctionOpen(SMBCCTX *c);
-void smbc_setFunctionOpen(SMBCCTX *c, smbc_open_fn fn);
-
-typedef SMBCFILE * (*smbc_creat_fn)(SMBCCTX *c,
-                                    const char *path,
-                                    mode_t mode);
-smbc_creat_fn smbc_getFunctionCreat(SMBCCTX *c);
-void smbc_setFunctionCreat(SMBCCTX *c, smbc_creat_fn);
-
-typedef ssize_t (*smbc_read_fn)(SMBCCTX *c,
-                                SMBCFILE *file,
-                                void *buf,
-                                size_t count);
-smbc_read_fn smbc_getFunctionRead(SMBCCTX *c);
-void smbc_setFunctionRead(SMBCCTX *c, smbc_read_fn fn);
-
-typedef ssize_t (*smbc_write_fn)(SMBCCTX *c,
-                                 SMBCFILE *file,
-                                 void *buf,
-                                 size_t count);
-smbc_write_fn smbc_getFunctionWrite(SMBCCTX *c);
-void smbc_setFunctionWrite(SMBCCTX *c, smbc_write_fn fn);
-
-typedef int (*smbc_unlink_fn)(SMBCCTX *c,
-                              const char *fname);
-smbc_unlink_fn smbc_getFunctionUnlink(SMBCCTX *c);
-void smbc_setFunctionUnlink(SMBCCTX *c, smbc_unlink_fn fn);
-
-typedef int (*smbc_rename_fn)(SMBCCTX *ocontext,
-                              const char *oname,
-                              SMBCCTX *ncontext,
-                              const char *nname);
-smbc_rename_fn smbc_getFunctionRename(SMBCCTX *c);
-void smbc_setFunctionRename(SMBCCTX *c, smbc_rename_fn fn);
-
-typedef off_t (*smbc_lseek_fn)(SMBCCTX *c,
-                               SMBCFILE * file,
-                               off_t offset,
-                               int whence);
-smbc_lseek_fn smbc_getFunctionLseek(SMBCCTX *c);
-void smbc_setFunctionLseek(SMBCCTX *c, smbc_lseek_fn fn);
-
-typedef int (*smbc_stat_fn)(SMBCCTX *c,
-                            const char *fname,
-                            struct stat *st);
-smbc_stat_fn smbc_getFunctionStat(SMBCCTX *c);
-void smbc_setFunctionStat(SMBCCTX *c, smbc_stat_fn fn);
-
-typedef int (*smbc_fstat_fn)(SMBCCTX *c,
-                             SMBCFILE *file,
-                             struct stat *st);
-smbc_fstat_fn smbc_getFunctionFstat(SMBCCTX *c);
-void smbc_setFunctionFstat(SMBCCTX *c, smbc_fstat_fn fn);
-
-typedef int (*smbc_ftruncate_fn)(SMBCCTX *c,
-                                 SMBCFILE *f,
-                                 off_t size);
-smbc_ftruncate_fn smbc_getFunctionFtruncate(SMBCCTX *c);
-void smbc_setFunctionFtruncate(SMBCCTX *c, smbc_ftruncate_fn fn);
-
-typedef int (*smbc_close_fn)(SMBCCTX *c,
-                             SMBCFILE *file);
-smbc_close_fn smbc_getFunctionClose(SMBCCTX *c);
-void smbc_setFunctionClose(SMBCCTX *c, smbc_close_fn fn);
-
-
-
-/*****************************************************************
- * Callable functions for directories.                           *
- * Each callable has a function signature typedef, a declaration *
- * for the getter, and a declaration for the setter.             *
- *****************************************************************/
-
-typedef SMBCFILE * (*smbc_opendir_fn)(SMBCCTX *c,
-                                      const char *fname);
-smbc_opendir_fn smbc_getFunctionOpendir(SMBCCTX *c);
-void smbc_setFunctionOpendir(SMBCCTX *c, smbc_opendir_fn fn);
-
-typedef int (*smbc_closedir_fn)(SMBCCTX *c,
-                                SMBCFILE *dir);
-smbc_closedir_fn smbc_getFunctionClosedir(SMBCCTX *c);
-void smbc_setFunctionClosedir(SMBCCTX *c, smbc_closedir_fn fn);
-
-typedef struct smbc_dirent * (*smbc_readdir_fn)(SMBCCTX *c,
-                                                SMBCFILE *dir);
-smbc_readdir_fn smbc_getFunctionReaddir(SMBCCTX *c);
-void smbc_setFunctionReaddir(SMBCCTX *c, smbc_readdir_fn fn);
-
-typedef int (*smbc_getdents_fn)(SMBCCTX *c,
-                                SMBCFILE *dir,
-                                struct smbc_dirent *dirp,
-                                int count);
-smbc_getdents_fn smbc_getFunctionGetdents(SMBCCTX *c);
-void smbc_setFunctionGetdents(SMBCCTX *c, smbc_getdents_fn fn);
-
-typedef int (*smbc_mkdir_fn)(SMBCCTX *c,
-                             const char *fname,
-                             mode_t mode);
-smbc_mkdir_fn smbc_getFunctionMkdir(SMBCCTX *c);
-void smbc_setFunctionMkdir(SMBCCTX *c, smbc_mkdir_fn fn);
-
-typedef int (*smbc_rmdir_fn)(SMBCCTX *c,
-                             const char *fname);
-smbc_rmdir_fn smbc_getFunctionRmdir(SMBCCTX *c);
-void smbc_setFunctionRmdir(SMBCCTX *c, smbc_rmdir_fn fn);
-
-typedef off_t (*smbc_telldir_fn)(SMBCCTX *c,
-                                 SMBCFILE *dir);
-smbc_telldir_fn smbc_getFunctionTelldir(SMBCCTX *c);
-void smbc_setFunctionTelldir(SMBCCTX *c, smbc_telldir_fn fn);
-
-typedef int (*smbc_lseekdir_fn)(SMBCCTX *c,
-                                SMBCFILE *dir,
-                                off_t offset);
-smbc_lseekdir_fn smbc_getFunctionLseekdir(SMBCCTX *c);
-void smbc_setFunctionLseekdir(SMBCCTX *c, smbc_lseekdir_fn fn);
-
-typedef int (*smbc_fstatdir_fn)(SMBCCTX *c,
-                                SMBCFILE *dir,
-                                struct stat *st);
-smbc_fstatdir_fn smbc_getFunctionFstatdir(SMBCCTX *c);
-void smbc_setFunctionFstatdir(SMBCCTX *c, smbc_fstatdir_fn fn);
-
-
-
-/*****************************************************************
- * Callable functions applicable to both files and directories.  *
- * Each callable has a function signature typedef, a declaration *
- * for the getter, and a declaration for the setter.             *
- *****************************************************************/
-
-typedef int (*smbc_chmod_fn)(SMBCCTX *c,
-                             const char *fname,
-                             mode_t mode);
-smbc_chmod_fn smbc_getFunctionChmod(SMBCCTX *c);
-void smbc_setFunctionChmod(SMBCCTX *c, smbc_chmod_fn fn);
-
-typedef int (*smbc_utimes_fn)(SMBCCTX *c,
-                              const char *fname,
-                              struct timeval *tbuf);
-smbc_utimes_fn smbc_getFunctionUtimes(SMBCCTX *c);
-void smbc_setFunctionUtimes(SMBCCTX *c, smbc_utimes_fn fn);
-
-typedef int (*smbc_setxattr_fn)(SMBCCTX *context,
-                                const char *fname,
-                                const char *name,
-                                const void *value,
-                                size_t size,
-                                int flags);
-smbc_setxattr_fn smbc_getFunctionSetxattr(SMBCCTX *c);
-void smbc_setFunctionSetxattr(SMBCCTX *c, smbc_setxattr_fn fn);
-
-typedef int (*smbc_getxattr_fn)(SMBCCTX *context,
-                                const char *fname,
-                                const char *name,
-                                const void *value,
-                                size_t size);
-smbc_getxattr_fn smbc_getFunctionGetxattr(SMBCCTX *c);
-void smbc_setFunctionGetxattr(SMBCCTX *c, smbc_getxattr_fn fn);
-
-typedef int (*smbc_removexattr_fn)(SMBCCTX *context,
-                                   const char *fname,
-                                   const char *name);
-smbc_removexattr_fn smbc_getFunctionRemovexattr(SMBCCTX *c);
-void smbc_setFunctionRemovexattr(SMBCCTX *c, smbc_removexattr_fn fn);
-
-typedef int (*smbc_listxattr_fn)(SMBCCTX *context,
-                                 const char *fname,
-                                 char *list,
-                                 size_t size);
-smbc_listxattr_fn smbc_getFunctionListxattr(SMBCCTX *c);
-void smbc_setFunctionListxattr(SMBCCTX *c, smbc_listxattr_fn fn);
-
-
-
-/*****************************************************************
- * Callable functions for printing.                              *
- * Each callable has a function signature typedef, a declaration *
- * for the getter, and a declaration for the setter.             *
- *****************************************************************/
-
-typedef int (*smbc_print_file_fn)(SMBCCTX *c_file,
-                                  const char *fname,
-                                  SMBCCTX *c_print,
-                                  const char *printq);
-smbc_print_file_fn smbc_getFunctionPrintFile(SMBCCTX *c);
-void smbc_setFunctionPrintFile(SMBCCTX *c, smbc_print_file_fn fn);
-
-typedef SMBCFILE * (*smbc_open_print_job_fn)(SMBCCTX *c,
-                                             const char *fname);
-smbc_open_print_job_fn smbc_getFunctionOpenPrintJob(SMBCCTX *c);
-void smbc_setFunctionOpenPrintJob(SMBCCTX *c,
-                                  smbc_open_print_job_fn fn);
-
-typedef int (*smbc_list_print_jobs_fn)(SMBCCTX *c,
-                                       const char *fname,
-                                       smbc_list_print_job_fn fn);
-smbc_list_print_jobs_fn smbc_getFunctionListPrintJobs(SMBCCTX *c);
-void smbc_setFunctionListPrintJobs(SMBCCTX *c,
-                                   smbc_list_print_jobs_fn fn);
-
-typedef int (*smbc_unlink_print_job_fn)(SMBCCTX *c,
-                                        const char *fname,
-                                        int id);
-smbc_unlink_print_job_fn smbc_getFunctionUnlinkPrintJob(SMBCCTX *c);
-void smbc_setFunctionUnlinkPrintJob(SMBCCTX *c,
-                                    smbc_unlink_print_job_fn fn);
-
-
 /**@ingroup misc
  * Create a new SBMCCTX (a context).
  *
@@ -1016,16 +631,35 @@
 
 
 /**@ingroup misc
+ * Each time the context structure is changed, we have binary backward
+ * compatibility issues.  Instead of modifying the public portions of the
+ * context structure to add new options, instead, we put them in the internal
+ * portion of the context structure and provide a set function for these new
+ * options.
  *
- * @deprecated.  Use smbc_setOption*() functions instead.
+ * @param context   A pointer to a SMBCCTX obtained from smbc_new_context()
+ *
+ * @param option_name
+ *                  The name of the option for which the value is to be set
+ *
+ * @param option_value
+ *                  The new value of the option being set
+ *
  */
 void
 smbc_option_set(SMBCCTX *context,
                 char *option_name,
                 ... /* option_value */);
-
 /*
- * @deprecated.  Use smbc_getOption*() functions instead.
+ * Retrieve the current value of an option
+ *
+ * @param context   A pointer to a SMBCCTX obtained from smbc_new_context()
+ *
+ * @param option_name
+ *                  The name of the option for which the value is to be
+ *                  retrieved
+ *
+ * @return          The value of the specified option.
  */
 void *
 smbc_option_get(SMBCCTX *context,
@@ -1560,26 +1194,6 @@
 int smbc_fstat(int fd, struct stat *st);
 
 
-/**@ingroup attribute
- * Truncate a file given a file descriptor
- * 
- * @param fd        Open file handle from smbc_open() or smbc_creat()
- *
- * @param size      size to truncate the file to
- * 
- * @return          EBADF  filedes is bad.
- *                  - EACCES Permission denied.
- *                  - EBADF fd is not a valid file descriptor
- *                  - EINVAL Problems occurred in the underlying routines
- *		      or smbc_init not called.
- *                  - ENOMEM Out of memory
- *
- * @see             , Unix ftruncate()
- *
- */
-int smbc_ftruncate(int fd, off_t size);
-
-
 /**@ingroup attribue
  * Change the ownership of a file or directory.
  *
@@ -1628,16 +1242,14 @@
  */
 int smbc_chmod(const char *url, mode_t mode);
 
-/**
- * @ingroup attribute
+/**@ingroup attribute
  * Change the last modification time on a file
  *
  * @param url       The smb url of the file or directory to change
  *                  the modification time of
- *
- * @param tbuf      An array of two timeval structures which contains,
- *                  respectively, the desired access and modification times.
- *                  NOTE: Only the tv_sec field off each timeval structure is
+ * 
+ * @param tbuf      A timeval structure which contains the desired
+ *                  modification time.  NOTE: Only the tv_sec field is
  *                  used.  The tv_usec (microseconds) portion is ignored.
  *
  * @return          0 on success, < 0 on error with errno set:
@@ -1648,16 +1260,16 @@
 int smbc_utimes(const char *url, struct timeval *tbuf);
 
 #ifdef HAVE_UTIME_H
-/**
- * @ingroup attribute
+/**@ingroup attribute
  * Change the last modification time on a file
  *
  * @param url       The smb url of the file or directory to change
  *                  the modification time of
+ * 
+ * @param utbuf     A utimebuf structure which contains the desired
+ *                  modification time.  NOTE: Although the structure contains
+ *                  an access time as well, the access time value is ignored.
  *
- * @param utbuf     A pointer to a utimebuf structure which contains the
- *                  desired access and modification times.
- *
  * @return          0 on success, < 0 on error with errno set:
  *                  - EINVAL The client library is not properly initialized
  *                  - ENOMEM No memory was available for internal needs
@@ -2348,7 +1960,7 @@
  *                            extended attributes
  *
  * @note            This function always returns all attribute names supported
- *                  by NT file systems, regardless of whether the referenced
+ *                  by NT file systems, regardless of wether the referenced
  *                  file system supports extended attributes (e.g. a Windows
  *                  2000 machine supports extended attributes if NTFS is used,
  *                  but not if FAT is used, and Windows 98 doesn't support
@@ -2577,232 +2189,5 @@
 }
 #endif
 
-/**
- * @ingroup structure
- * Structure that contains a client context information 
- * This structure is known as SMBCCTX
- *
- * DO NOT DIRECTLY MANIPULATE THE CONTEXT STRUCTURE!  The data in the context
- * structure should all be considered private to the library.  It remains here
- * only for backward compatibility.
- *
- * See the comments herein for use of the setter and getter functions which
- * should now be used for manipulating these values.  New features, functions,
- * etc., are not added here but rather in _internal where they are not
- * directly visible to applications.  This makes it much easier to maintain
- * ABI compatibility.
- */
-struct _SMBCCTX
-{
-        /**
-         * debug level
-         *
-         * DEPRECATED:
-         * Use smbc_getDebug() and smbc_setDebug()
-         */
-        int     debug DEPRECATED_SMBC_INTERFACE;
-	
-        /**
-         * netbios name used for making connections
-         *
-         * DEPRECATED:
-         * Use smbc_getNetbiosName() and smbc_setNetbiosName()
-         */
-        char * netbios_name DEPRECATED_SMBC_INTERFACE;
 
-        /**
-         * workgroup name used for making connections
-         *
-         * DEPRECATED:
-         * Use smbc_getWorkgroup() and smbc_setWorkgroup()
-         */
-        char * workgroup DEPRECATED_SMBC_INTERFACE;
-
-        /**
-         * username used for making connections
-         *
-         * DEPRECATED:
-         * Use smbc_getUser() and smbc_setUser()
-         */
-        char * user DEPRECATED_SMBC_INTERFACE;
-
-        /**
-         * timeout used for waiting on connections / response data (in
-         * milliseconds)
-         *
-         * DEPRECATED:
-         * Use smbc_getTimeout() and smbc_setTimeout()
-         */
-        int timeout DEPRECATED_SMBC_INTERFACE;
-
-	/**
-         * callable functions for files:
-	 * For usage and return values see the SMBC_* functions
-         *
-         * DEPRECATED:
-         *
-         * Use smbc_getFunction*() and smbc_setFunction*(), e.g.
-         * smbc_getFunctionOpen(), smbc_setFunctionUnlink(), etc.
-	 */ 
-        smbc_open_fn                    open DEPRECATED_SMBC_INTERFACE;
-        smbc_creat_fn                   creat DEPRECATED_SMBC_INTERFACE;
-        smbc_read_fn                    read DEPRECATED_SMBC_INTERFACE;
-        smbc_write_fn                   write DEPRECATED_SMBC_INTERFACE;
-        smbc_unlink_fn                  unlink DEPRECATED_SMBC_INTERFACE;
-        smbc_rename_fn                  rename DEPRECATED_SMBC_INTERFACE;
-        smbc_lseek_fn                   lseek DEPRECATED_SMBC_INTERFACE;
-        smbc_stat_fn                    stat DEPRECATED_SMBC_INTERFACE;
-        smbc_fstat_fn                   fstat DEPRECATED_SMBC_INTERFACE;
-#if 0 /* internal */
-        smbc_ftruncate_fn               ftruncate_fn;
-#endif
-        smbc_close_fn                   close_fn DEPRECATED_SMBC_INTERFACE;
-        smbc_opendir_fn                 opendir DEPRECATED_SMBC_INTERFACE;
-        smbc_closedir_fn                closedir DEPRECATED_SMBC_INTERFACE;
-        smbc_readdir_fn                 readdir DEPRECATED_SMBC_INTERFACE;
-        smbc_getdents_fn                getdents DEPRECATED_SMBC_INTERFACE;
-        smbc_mkdir_fn                   mkdir DEPRECATED_SMBC_INTERFACE;
-        smbc_rmdir_fn                   rmdir DEPRECATED_SMBC_INTERFACE;
-        smbc_telldir_fn                 telldir DEPRECATED_SMBC_INTERFACE;
-        smbc_lseekdir_fn                lseekdir DEPRECATED_SMBC_INTERFACE;
-        smbc_fstatdir_fn                fstatdir DEPRECATED_SMBC_INTERFACE;
-        smbc_chmod_fn                   chmod DEPRECATED_SMBC_INTERFACE;
-        smbc_utimes_fn                  utimes DEPRECATED_SMBC_INTERFACE;
-        smbc_setxattr_fn                setxattr DEPRECATED_SMBC_INTERFACE;
-        smbc_getxattr_fn                getxattr DEPRECATED_SMBC_INTERFACE;
-        smbc_removexattr_fn             removexattr DEPRECATED_SMBC_INTERFACE;
-        smbc_listxattr_fn               listxattr DEPRECATED_SMBC_INTERFACE;
-
-        /* Printing-related functions */
-        smbc_print_file_fn              print_file DEPRECATED_SMBC_INTERFACE;
-        smbc_open_print_job_fn          open_print_job DEPRECATED_SMBC_INTERFACE;
-        smbc_list_print_jobs_fn         list_print_jobs DEPRECATED_SMBC_INTERFACE;
-        smbc_unlink_print_job_fn        unlink_print_job DEPRECATED_SMBC_INTERFACE;
-
-        /*
-        ** Callbacks
-        *
-        * DEPRECATED:
-        *
-        * See the comment above each field, for the getter and setter
-        * functions that should now be used.
-        */
-	struct _smbc_callbacks
-        {
-		/**
-                 * authentication function callback: called upon auth requests
-                 *
-                 * DEPRECATED:
-                 * Use smbc_getFunctionAuthData(), smbc_setFunctionAuthData()
-		 */
-                smbc_get_auth_data_fn auth_fn DEPRECATED_SMBC_INTERFACE;
-		
-		/**
-                 * check if a server is still good
-                 *
-                 * DEPRECATED:
-                 * Use smbc_getFunctionCheckServer(),
-                 * smbc_setFunctionCheckServer()
-		 */
-		smbc_check_server_fn check_server_fn DEPRECATED_SMBC_INTERFACE;
-
-		/**
-                 * remove a server if unused
-                 *
-                 * DEPRECATED:
-                 * Use smbc_getFunctionRemoveUnusedServer(),
-                 * smbc_setFunctionCheckServer()
-		 */
-		smbc_remove_unused_server_fn remove_unused_server_fn DEPRECATED_SMBC_INTERFACE;
-
-		/** Cache subsystem
-                 *
-		 * For an example cache system see
-		 * samba/source/libsmb/libsmb_cache.c
-                 *
-                 * Cache subsystem * functions follow.
-		 */
-
-		/**
-                 * server cache addition 
-                 *
-                 * DEPRECATED:
-                 * Use smbc_getFunctionAddCachedServer(),
-                 * smbc_setFunctionAddCachedServer()
-		 */
-		smbc_add_cached_srv_fn add_cached_srv_fn DEPRECATED_SMBC_INTERFACE;
-
-		/**
-                 * server cache lookup 
-                 *
-                 * DEPRECATED:
-                 * Use smbc_getFunctionGetCachedServer(),
-                 * smbc_setFunctionGetCachedServer()
-		 */
-		smbc_get_cached_srv_fn get_cached_srv_fn DEPRECATED_SMBC_INTERFACE;
-
-		/**
-                 * server cache removal
-                 *
-                 * DEPRECATED:
-                 * Use smbc_getFunctionRemoveCachedServer(),
-                 * smbc_setFunctionRemoveCachedServer()
-		 */
-		smbc_remove_cached_srv_fn remove_cached_srv_fn DEPRECATED_SMBC_INTERFACE;
-		
-		/**
-                 * server cache purging, try to remove all cached servers
-                 * (disconnect)
-                 *
-                 * DEPRECATED:
-                 * Use smbc_getFunctionPurgeCachedServers(),
-                 * smbc_setFunctionPurgeCachedServers()
-		 */
-		smbc_purge_cached_fn purge_cached_fn DEPRECATED_SMBC_INTERFACE;
-	} callbacks;
-
-        /**
-         * Space where the private data of the server cache used to be
-         *
-         * DEPRECATED:
-         * Use smbc_getServerCacheData(), smbc_setServerCacheData()
-         */
-        void * reserved DEPRECATED_SMBC_INTERFACE;
-
-        /*
-         * Very old configuration options.
-         * 
-         * DEPRECATED:
-         * Use one of the following functions instead:
-         *   smbc_setOptionUseKerberos()
-         *   smbc_getOptionUseKerberos()
-         *   smbc_setOptionFallbackAfterKerberos()
-         *   smbc_getOptionFallbackAfterKerberos()
-         *   smbc_setOptionNoAutoAnonymousLogin()
-         *   smbc_getOptionNoAutoAnonymousLogin()
-         */
-        int flags DEPRECATED_SMBC_INTERFACE;
-	
-        /**
-         * user options selections that apply to this session
-         *
-         * NEW OPTIONS ARE NOT ADDED HERE!
-         *
-         * DEPRECATED:
-         * To set and retrieve options, use the smbc_setOption*() and
-         * smbc_getOption*() functions.
-         */
-        struct _smbc_options {
-                int browse_max_lmb_count DEPRECATED_SMBC_INTERFACE;
-                int urlencode_readdir_entries DEPRECATED_SMBC_INTERFACE;
-                int one_share_per_server DEPRECATED_SMBC_INTERFACE;
-        } options DEPRECATED_SMBC_INTERFACE;
-	
-	/** INTERNAL DATA
-	 * do _NOT_ touch this from your program !
-	 */
-	struct SMBC_internal_data * internal;
-};
-
-
 #endif /* SMBCLIENT_H_INCLUDED */

Modified: branches/samba/upstream/source/include/local.h
===================================================================
--- branches/samba/upstream/source/include/local.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/local.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -233,9 +233,6 @@
 /* Number of microseconds to wait before a sharing violation. */
 #define SHARING_VIOLATION_USEC_WAIT 950000
 
-/* Number of microseconds to wait before a updating the write time (2 secs). */
-#define WRITE_TIME_UPDATE_USEC_DELAY 2000000
-
 #define MAX_LDAP_REPLICATION_SLEEP_TIME 5000 /* In milliseconds. */
 
 /* tdb hash size for the open database. */

Modified: branches/samba/upstream/source/include/locking.h
===================================================================
--- branches/samba/upstream/source/include/locking.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/locking.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _LOCKING_H
@@ -38,29 +39,39 @@
 struct lock_context {
 	uint32 smbpid;
 	uint16 tid;
-	struct server_id pid;
+	struct process_id pid;
 };
 
-struct files_struct;
+/* The key used in the brlock database. */
 
-struct file_id {
-	/* we don't use SMB_DEV_T and SMB_INO_T as we want a fixed size here,
-	   and we may be using file system specific code to fill in something
-	   other than a dev_t for the device */
-	uint64_t devid;
-	uint64_t inode;
+struct lock_key {
+	SMB_DEV_T device;
+	SMB_INO_T inode;
 };
 
+struct files_struct;
+
 struct byte_range_lock {
 	struct files_struct *fsp;
 	unsigned int num_locks;
-	bool modified;
-	bool read_only;
-	struct file_id key;
-	struct lock_struct *lock_data;
-	struct db_record *record;
+	BOOL modified;
+	BOOL read_only;
+	struct lock_key key;
+	void *lock_data;
 };
 
+#define BRLOCK_FN_CAST() \
+	void (*)(SMB_DEV_T dev, SMB_INO_T ino, struct process_id pid, \
+				 enum brl_type lock_type, \
+				 enum brl_flavour lock_flav, \
+				 br_off start, br_off size)
+
+#define BRLOCK_FN(fn) \
+	void (*fn)(SMB_DEV_T dev, SMB_INO_T ino, struct process_id pid, \
+				 enum brl_type lock_type, \
+				 enum brl_flavour lock_flav, \
+				 br_off start, br_off size)
+
 /* Internal structure in brlock.tdb. 
    The data in brlock records is an unsorted linear array of these
    records.  It is unnecessary to store the count as tdb provides the

Modified: branches/samba/upstream/source/include/mangle.h
===================================================================
--- branches/samba/upstream/source/include/mangle.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/mangle.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,18 +6,13 @@
 
 struct mangle_fns {
 	void (*reset)(void);
-	bool (*is_mangled)(const char *s, const struct share_params *p);
-	bool (*must_mangle)(const char *s, const struct share_params *p);
-	bool (*is_8_3)(const char *fname, bool check_case, bool allow_wildcards,
+	BOOL (*is_mangled)(const char *s, const struct share_params *p);
+	BOOL (*is_8_3)(const char *fname, BOOL check_case, BOOL allow_wildcards,
 		       const struct share_params *p);
-	bool (*lookup_name_from_8_3)(TALLOC_CTX *ctx,
-				const char *in,
-				char **out, /* talloced on the given context. */
-				const struct share_params *p);
-	bool (*name_to_8_3)(const char *in,
-			char out[13],
-			bool cache83,
-			int default_case,
-			const struct share_params *p);
+	BOOL (*check_cache)(char *s, size_t maxlen,
+			    const struct share_params *p);
+	void (*name_map)(char *OutName, BOOL need83, BOOL cache83,
+			 int default_case,
+			 const struct share_params *p);
 };
 #endif /* _MANGLE_H_ */

Modified: branches/samba/upstream/source/include/mapping.h
===================================================================
--- branches/samba/upstream/source/include/mapping.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/mapping.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #define ENUM_ONLY_MAPPED True

Deleted: branches/samba/upstream/source/include/memcache.h
===================================================================
--- branches/samba/upstream/source/include/memcache.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/memcache.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,115 +0,0 @@
-/*
-   Unix SMB/CIFS implementation.
-   In-memory cache
-   Copyright (C) Volker Lendecke 2007-2008
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef __MEMCACHE_H__
-#define __MEMCACHE_H__
-
-#include "includes.h"
-
-struct memcache;
-
-/*
- * A memcache can store different subkeys with overlapping keys, the
- * memcache_number becomes part of the key. Feel free to add caches of your
- * own here.
- *
- * If you add talloc type caches, also note this in the switch statement in
- * memcache_is_talloc().
- */
-
-enum memcache_number {
-	STAT_CACHE,
-	UID_SID_CACHE,
-	SID_UID_CACHE,
-	GID_SID_CACHE,
-	SID_GID_CACHE,
-	GETWD_CACHE,
-	GETPWNAM_CACHE,		/* talloc */
-	MANGLE_HASH2_CACHE,
-	PDB_GETPWSID_CACHE,	/* talloc */
-	SINGLETON_CACHE_TALLOC,	/* talloc */
-	SINGLETON_CACHE
-};
-
-/*
- * Create a memcache structure. max_size is in bytes, if you set it 0 it will
- * not forget anything.
- */
-
-struct memcache *memcache_init(TALLOC_CTX *mem_ctx, size_t max_size);
-
-/*
- * If you set this global memcache, use it as the default cache when NULL is
- * passed to the memcache functions below. This is a workaround for many
- * situations where passing the cache everywhere would be a big hassle.
- */
-
-void memcache_set_global(struct memcache *cache);
-
-/*
- * Add a data blob to the cache
- */
-
-void memcache_add(struct memcache *cache, enum memcache_number n,
-		  DATA_BLOB key, DATA_BLOB value);
-
-/*
- * Add a talloc object to the cache. The difference to memcache_add() is that
- * when the objects is to be discared, talloc_free is called for it. Also
- * talloc_move() ownership of the object to the cache.
- *
- * Please note that the current implementation has a fixed relationship
- * between what cache subtypes store talloc objects and which ones store plain
- * blobs. We can fix this, but for now we don't have a mixed use of blobs vs
- * talloc objects in the cache types.
- */
-
-void memcache_add_talloc(struct memcache *cache, enum memcache_number n,
-			 DATA_BLOB key, void *ptr);
-
-/*
- * Delete an object from the cache
- */
-
-void memcache_delete(struct memcache *cache, enum memcache_number n,
-		     DATA_BLOB key);
-
-/*
- * Look up an object from the cache. Memory still belongs to the cache, so
- * make a copy of it if needed.
- */
-
-bool memcache_lookup(struct memcache *cache, enum memcache_number n,
-		     DATA_BLOB key, DATA_BLOB *value);
-
-/*
- * Look up an object from the cache. Memory still belongs to the cache, so
- * make a copy of it if needed.
- */
-
-void *memcache_lookup_talloc(struct memcache *cache, enum memcache_number n,
-			     DATA_BLOB key);
-
-/*
- * Flush a complete cache subset.
- */
-
-void memcache_flush(struct memcache *cache, enum memcache_number n);
-
-#endif

Modified: branches/samba/upstream/source/include/messages.h
===================================================================
--- branches/samba/upstream/source/include/messages.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/messages.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,224 +15,97 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _MESSAGES_H_
 #define _MESSAGES_H_
 
-/* change the message version with any incompatible changes in the protocol */
-#define MESSAGE_VERSION 2
-
-
-#define MSG_TYPE_MASK			0xFFFF
-
 /* general messages */
-#define MSG_DEBUG			0x0001
-#define MSG_PING			0x0002
-#define MSG_PONG			0x0003
-#define MSG_PROFILE			0x0004
-#define MSG_REQ_DEBUGLEVEL		0x0005
-#define MSG_DEBUGLEVEL			0x0006
-#define MSG_REQ_PROFILELEVEL		0x0007
-#define MSG_PROFILELEVEL		0x0008
-#define MSG_REQ_POOL_USAGE		0x0009
-#define MSG_POOL_USAGE			0x000A
+#define MSG_DEBUG		1
+#define MSG_PING		2
+#define MSG_PONG		3
+#define MSG_PROFILE		4
+#define MSG_REQ_DEBUGLEVEL	5
+#define MSG_DEBUGLEVEL		6
+#define MSG_REQ_PROFILELEVEL	7
+#define MSG_PROFILELEVEL	8
+#define MSG_REQ_POOL_USAGE	9
+#define MSG_POOL_USAGE		10
 
 /* If dmalloc is included, set a steady-state mark */
-#define MSG_REQ_DMALLOC_MARK		0x000B
+#define MSG_REQ_DMALLOC_MARK	11
 
 /* If dmalloc is included, dump to the dmalloc log a description of
  * what has changed since the last MARK */
-#define MSG_REQ_DMALLOC_LOG_CHANGED	0x000C
+#define MSG_REQ_DMALLOC_LOG_CHANGED	12
 
-#define MSG_SHUTDOWN			0x000D
+#define MSG_SHUTDOWN		13
 
 /* nmbd messages */
-#define MSG_FORCE_ELECTION		0x0101
-#define MSG_WINS_NEW_ENTRY		0x0102
-#define MSG_SEND_PACKET			0x0103
+#define MSG_FORCE_ELECTION 1001
+#define MSG_WINS_NEW_ENTRY 1002
+#define MSG_SEND_PACKET    1003
 
 /* printing messages */
 /* #define MSG_PRINTER_NOTIFY  2001*/ /* Obsolete */
-#define MSG_PRINTER_NOTIFY2		0x0202
+#define MSG_PRINTER_NOTIFY2		2002
 
-#define MSG_PRINTER_DRVUPGRADE		0x0203
-#define MSG_PRINTERDATA_INIT_RESET	0x0204
-#define MSG_PRINTER_UPDATE		0x0205
-#define MSG_PRINTER_MOD			0x0206
+#define MSG_PRINTER_DRVUPGRADE		2101
+#define MSG_PRINTERDATA_INIT_RESET	2102
+#define MSG_PRINTER_UPDATE		2103
+#define MSG_PRINTER_MOD			2104
 
 /* smbd messages */
-#define MSG_SMB_CONF_UPDATED		0x0301
-#define MSG_SMB_FORCE_TDIS		0x0302
-#define MSG_SMB_SAM_SYNC		0x0303
-#define MSG_SMB_SAM_REPL		0x0304
-#define MSG_SMB_UNLOCK			0x0305
-#define MSG_SMB_BREAK_REQUEST		0x0306
-#define MSG_SMB_BREAK_RESPONSE		0x0307
-#define MSG_SMB_ASYNC_LEVEL2_BREAK	0x0308
-#define MSG_SMB_OPEN_RETRY		0x0309
-#define MSG_SMB_KERNEL_BREAK		0x030A
-#define MSG_SMB_FILE_RENAME		0x030B
-#define MSG_SMB_INJECT_FAULT		0x030C
-#define MSG_SMB_BLOCKING_LOCK_CANCEL	0x030D
-#define MSG_SMB_NOTIFY			0x030E
-#define MSG_SMB_STAT_CACHE_DELETE	0x030F
+#define MSG_SMB_CONF_UPDATED 3001
+#define MSG_SMB_FORCE_TDIS   3002
+#define MSG_SMB_SAM_SYNC     3003
+#define MSG_SMB_SAM_REPL     3004
+#define MSG_SMB_UNLOCK       3005
+#define MSG_SMB_BREAK_REQUEST 3006
+#define MSG_SMB_BREAK_RESPONSE 3007
+#define MSG_SMB_ASYNC_LEVEL2_BREAK 3008
+#define MSG_SMB_OPEN_RETRY   3009
+#define MSG_SMB_KERNEL_BREAK 3010
+#define MSG_SMB_FILE_RENAME  3011
+#define MSG_SMB_INJECT_FAULT 3012
+#define MSG_SMB_BLOCKING_LOCK_CANCEL 3013
+#define MSG_SMB_NOTIFY       3014
+#define MSG_SMB_STAT_CACHE_DELETE 3015
 /*
  * Samba4 compatibility
  */
-#define MSG_PVFS_NOTIFY			0x0310
-/*
- * cluster reconfigure events
- */
-#define MSG_SMB_BRL_VALIDATE		0x0311
-#define MSG_SMB_RELEASE_IP		0x0312
-/*
- * Close a specific file given a share entry.
- */
-#define MSG_SMB_CLOSE_FILE		0x0313
+#define MSG_PVFS_NOTIFY       3016
 
 /* winbind messages */
-#define MSG_WINBIND_FINISHED		0x0401
-#define MSG_WINBIND_FORGET_STATE	0x0402
-#define MSG_WINBIND_ONLINE		0x0403
-#define MSG_WINBIND_OFFLINE		0x0404
-#define MSG_WINBIND_ONLINESTATUS	0x0405
-#define MSG_WINBIND_TRY_TO_GO_ONLINE	0x0406
-#define MSG_WINBIND_FAILED_TO_GO_ONLINE 0x0407
-#define MSG_WINBIND_VALIDATE_CACHE	0x0408
-#define MSG_WINBIND_DUMP_DOMAIN_LIST	0x0409
+#define MSG_WINBIND_FINISHED     4001
+#define MSG_WINBIND_FORGET_STATE 4002
+#define MSG_WINBIND_ONLINE       4003
+#define MSG_WINBIND_OFFLINE      4004
+#define MSG_WINBIND_ONLINESTATUS 4005
+#define MSG_WINBIND_TRY_TO_GO_ONLINE 4006
+#define MSG_WINBIND_FAILED_TO_GO_ONLINE 4007
 
-/* event messages */
-#define MSG_DUMP_EVENT_LIST		0x0500
-
-/* dbwrap messages 4001-4999 */
-#define MSG_DBWRAP_TDB2_CHANGES		4001
-
-/*
- * Special flags passed to message_send. Allocated from the top, lets see when
- * it collides with the message types in the lower 16 bits :-)
- */
-
-/*
- * Under high load, this message can be dropped. Use for notify-style
- * messages that are not critical for correct operation.
- */
-#define MSG_FLAG_LOWPRIORITY		0x80000000
-
-
 /* Flags to classify messages - used in message_send_all() */
 /* Sender will filter by flag. */
 
-#define FLAG_MSG_GENERAL		0x0001
-#define FLAG_MSG_SMBD			0x0002
-#define FLAG_MSG_NMBD			0x0004
-#define FLAG_MSG_PRINT_NOTIFY		0x0008
-#define FLAG_MSG_PRINT_GENERAL		0x0010
-/* dbwrap messages 4001-4999 */
-#define FLAG_MSG_DBWRAP			0x0020
+#define FLAG_MSG_GENERAL 	0x0001
+#define FLAG_MSG_SMBD		0x0002
+#define FLAG_MSG_NMBD		0x0004
+#define FLAG_MSG_PRINT_NOTIFY	0x0008
+#define FLAG_MSG_PRINT_GENERAL	0x0010
 
-
-/*
- * Virtual Node Numbers are identifying a node within a cluster. Ctdbd sets
- * this, we retrieve our vnn from it.
- */
-
-#define NONCLUSTER_VNN (0xFFFFFFFF)
-
-/*
- * ctdb gives us 64-bit server ids for messaging_send. This is done to avoid
- * pid clashes and to be able to register for special messages like "all
- * smbds".
- *
- * Normal individual server id's have the upper 32 bits to 0, I picked "1" for
- * Samba, other subsystems might use something else.
- */
-
-#define MSG_SRVID_SAMBA 0x0000000100000000LL
-
-
-struct server_id {
+struct process_id {
 	pid_t pid;
-#ifdef CLUSTER_SUPPORT
-	uint32 vnn;
-#endif
 };
 
-#ifdef CLUSTER_SUPPORT
-#define MSG_BROADCAST_PID_STR	"0:0"
-#else
-#define MSG_BROADCAST_PID_STR	"0"
-#endif
-
-struct messaging_context;
-struct messaging_rec;
-struct data_blob;
-
 /*
- * struct messaging_context belongs to messages.c, but because we still have
- * messaging_dispatch, we need it here. Once we get rid of signals for
- * notifying processes, this will go.
+ * Samba4 API compatibility layer
  */
 
-struct messaging_context {
-	struct server_id id;
-	struct event_context *event_ctx;
-	struct messaging_callback *callbacks;
-
-	struct messaging_backend *local;
-	struct messaging_backend *remote;
+struct server_id {
+	struct process_id id;
 };
 
-struct messaging_backend {
-	NTSTATUS (*send_fn)(struct messaging_context *msg_ctx,
-			    struct server_id pid, int msg_type,
-			    const struct data_blob *data,
-			    struct messaging_backend *backend);
-	void *private_data;
-};
-
-NTSTATUS messaging_tdb_init(struct messaging_context *msg_ctx,
-			    TALLOC_CTX *mem_ctx,
-			    struct messaging_backend **presult);
-void message_dispatch(struct messaging_context *msg_ctx);
-
-NTSTATUS messaging_ctdbd_init(struct messaging_context *msg_ctx,
-			      TALLOC_CTX *mem_ctx,
-			      struct messaging_backend **presult);
-struct ctdbd_connection *messaging_ctdbd_connection(void);
-
-bool message_send_all(struct messaging_context *msg_ctx,
-		      int msg_type,
-		      const void *buf, size_t len,
-		      int *n_sent);
-struct event_context *messaging_event_context(struct messaging_context *msg_ctx);
-struct messaging_context *messaging_init(TALLOC_CTX *mem_ctx, 
-					 struct server_id server_id, 
-					 struct event_context *ev);
-
-/*
- * re-init after a fork
- */
-NTSTATUS messaging_reinit(struct messaging_context *msg_ctx);
-
-NTSTATUS messaging_register(struct messaging_context *msg_ctx,
-			    void *private_data,
-			    uint32_t msg_type,
-			    void (*fn)(struct messaging_context *msg,
-				       void *private_data, 
-				       uint32_t msg_type, 
-				       struct server_id server_id,
-				       struct data_blob *data));
-void messaging_deregister(struct messaging_context *ctx, uint32_t msg_type,
-			  void *private_data);
-NTSTATUS messaging_send(struct messaging_context *msg_ctx,
-			struct server_id server, 
-			uint32_t msg_type, const struct data_blob *data);
-NTSTATUS messaging_send_buf(struct messaging_context *msg_ctx,
-			    struct server_id server, uint32_t msg_type,
-			    const uint8 *buf, size_t len);
-void messaging_dispatch_rec(struct messaging_context *msg_ctx,
-			    struct messaging_rec *rec);
-
 #endif

Modified: branches/samba/upstream/source/include/module.h
===================================================================
--- branches/samba/upstream/source/include/module.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/module.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _MODULE_H

Modified: branches/samba/upstream/source/include/msdfs.h
===================================================================
--- branches/samba/upstream/source/include/msdfs.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/msdfs.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -40,28 +41,28 @@
 typedef struct _client_referral {
 	uint32 proximity;
 	uint32 ttl;
-	char *dfspath;
+	pstring dfspath;
 } CLIENT_DFS_REFERRAL;
 
 struct referral {
-	char *alternate_path; /* contains the path referred */
+	pstring alternate_path; /* contains the path referred */
 	uint32 proximity;
 	uint32 ttl; /* how long should client cache referral */
 };
 
 struct junction_map {
-	char *service_name;
-	char *volume_name;
-	char *comment;
+	fstring service_name;
+	pstring volume_name;
+	pstring comment;
 	int referral_count;
 	struct referral* referral_list;
 };
 
 struct dfs_path {
-	char *hostname;
-	char *servicename;
-	char *reqpath;
-	bool posix_path;
+	fstring hostname;
+	fstring servicename;
+	pstring reqpath;
+	BOOL posix_path;
 };
 
 #define init_dfsroot(conn, inbuf, outbuf)                    	\

Modified: branches/samba/upstream/source/include/nameserv.h
===================================================================
--- branches/samba/upstream/source/include/nameserv.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/nameserv.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -271,14 +272,14 @@
 	/* Announce info. */
 	time_t lastannounce_time;
 	int announce_interval;
-	bool    needannounce;
+	BOOL    needannounce;
 
 	/* Timeout time for this workgroup. 0 means permanent. */
 	time_t death_time;  
 
 	/* Election info */
-	bool    RunningElection;
-	bool    needelection;
+	BOOL    RunningElection;
+	BOOL    needelection;
 	int     ElectionCount;
 	uint32  ElectionCriterion;
 
@@ -398,7 +399,7 @@
 	int    repeat_count;
 
 	/* Recursion protection. */
-	bool in_expiration_processing;
+	BOOL in_expiration_processing;
 };
 
 /* A subnet structure. It contains a list of workgroups and netbios names. */
@@ -427,8 +428,8 @@
 	struct name_record     *namelist;   /* List of netbios names. */
 	struct response_record *responselist;  /* List of responses expected. */
 
-	bool namelist_changed;
-	bool work_changed;
+	BOOL namelist_changed;
+	BOOL work_changed;
 
 	struct in_addr bcast_ip;
 	struct in_addr mask_ip;
@@ -460,13 +461,13 @@
 	struct {
 		int name_trn_id;
 		int opcode;
-		bool response;
+		BOOL response;
 		struct {
-			bool bcast;
-			bool recursion_available;
-			bool recursion_desired;
-			bool trunc;
-			bool authoritative;
+			BOOL bcast;
+			BOOL recursion_available;
+			BOOL recursion_desired;
+			BOOL trunc;
+			BOOL authoritative;
 		} nm_flags;
 		int rcode;
 		int qdcount;
@@ -491,9 +492,7 @@
 #define DGRAM_UNIQUE 0x10
 #define DGRAM_GROUP 0x11
 #define DGRAM_BROADCAST 0x12
-/* defined in IDL
 #define DGRAM_ERROR 0x13
-*/
 #define DGRAM_QUERY_REQUEST 0x14
 #define DGRAM_POSITIVE_QUERY_RESPONSE 0x15
 #define DGRAM_NEGATIVE_QUERT_RESPONSE 0x16
@@ -505,8 +504,8 @@
 		int msg_type;
 		struct {
 			enum node_type node_type;
-			bool first;
-			bool more;
+			BOOL first;
+			BOOL more;
 		} flags;
 		int dgm_id;
 		struct in_addr source_ip;
@@ -527,7 +526,7 @@
 {
 	struct packet_struct *next;
 	struct packet_struct *prev;
-	bool locked;
+	BOOL locked;
 	struct in_addr ip;
 	int port;
 	int fd;

Modified: branches/samba/upstream/source/include/nss_info.h
===================================================================
--- branches/samba/upstream/source/include/nss_info.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/nss_info.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,17 +5,19 @@
    Copyright (C) Gerald Carter             2006
 
    This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
+   modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
    
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.
    
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU Library General Public
+   License along with this library; if not, write to the
+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA  02111-1307, USA.   
 */
 
 #ifndef _IDMAP_NSS_H

Modified: branches/samba/upstream/source/include/nt_printing.h
===================================================================
--- branches/samba/upstream/source/include/nt_printing.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/nt_printing.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef NT_PRINTING_H_
@@ -312,7 +313,7 @@
 	fstring sharename;
 	fstring portname;
 	fstring drivername;
-	char comment[1024];
+	pstring comment;
 	fstring location;
 	NT_DEVICEMODE *devmode;
 	fstring sepfile;
@@ -365,7 +366,7 @@
 	uint32 dblspool;
 	fstring ipaddr;
 	uint32 port;
-	bool enable_snmp;
+	BOOL enable_snmp;
 	uint32 snmp_index;
 } NT_PORT_DATA_1;
 
@@ -448,10 +449,10 @@
 /* that's the central struct */
 typedef struct _Printer{
 	struct _Printer *prev, *next;
-	bool document_started;
-	bool page_started;
+	BOOL document_started;
+	BOOL page_started;
 	uint32 jobid; /* jobid in printing backend */
-	int printer_type;
+	BOOL printer_type;
 	TALLOC_CTX *ctx;
 	fstring servername;
 	fstring sharename;
@@ -464,10 +465,10 @@
 		uint32 printerlocal;
 		SPOOL_NOTIFY_OPTION *option;
 		POLICY_HND client_hnd;
-		bool client_connected;
+		BOOL client_connected;
 		uint32 change;
 		/* are we in a FindNextPrinterChangeNotify() call? */
-		bool fnpcn;
+		BOOL fnpcn;
 	} notify;
 	struct {
 		fstring machine;

Modified: branches/samba/upstream/source/include/nt_status.h
===================================================================
--- branches/samba/upstream/source/include/nt_status.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/nt_status.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _NT_STATUS_H
@@ -30,7 +31,7 @@
 /* the following rather strange looking definitions of NTSTATUS and WERROR
    and there in order to catch common coding errors where different error types
    are mixed up. This is especially important as we slowly convert Samba
-   from using bool for internal functions 
+   from using BOOL for internal functions 
 */
 
 #if defined(HAVE_IMMEDIATE_STRUCTURES)
@@ -71,18 +72,6 @@
 	}\
 } while (0)
 
-#define W_ERROR_HAVE_NO_MEMORY(x) do { \
-	if (!(x)) {\
-		return WERR_NOMEM;\
-	}\
-} while (0)
-
-#define W_ERROR_NOT_OK_RETURN(x) do { \
-	if (!W_ERROR_IS_OK(x)) {\
-		return x;\
-	}\
-} while (0)
-
 /* The top byte in an NTSTATUS code is used as a type field.
  * Windows only uses value 0xC0 as an indicator for an NT error
  * and 0x00 for success.

Modified: branches/samba/upstream/source/include/ntdomain.h
===================================================================
--- branches/samba/upstream/source/include/ntdomain.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/ntdomain.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _NT_DOMAIN_H /* _NT_DOMAIN_H */
@@ -29,14 +30,14 @@
  */
  
 typedef struct _prs_struct {
-	bool io; /* parsing in or out of data stream */
+	BOOL io; /* parsing in or out of data stream */
 	/* 
 	 * If the (incoming) data is big-endian. On output we are
 	 * always little-endian.
 	 */ 
-	bool bigendian_data;
+	BOOL bigendian_data;
 	uint8 align; /* data alignment */
-	bool is_dynamic; /* Do we own this memory or not ? */
+	BOOL is_dynamic; /* Do we own this memory or not ? */
 	uint32 data_offset; /* Current working offset into data. */
 	uint32 buffer_size; /* Current allocated size of the buffer. */
 	uint32 grow_size; /* size requested via prs_grow() calls */
@@ -135,9 +136,9 @@
 /* Domain controller authentication protocol info */
 struct dcinfo {
 	uint32 sequence; /* "timestamp" from client. */
-	struct netr_Credential seed_chal;
-	struct netr_Credential clnt_chal; /* Client credential */
-	struct netr_Credential srv_chal;  /* Server credential */
+	DOM_CHAL seed_chal; 
+	DOM_CHAL clnt_chal; /* Client credential */
+	DOM_CHAL srv_chal;  /* Server credential */
  
 	unsigned char  sess_key[16]; /* Session key - 8 bytes followed by 8 zero bytes */
 	unsigned char  mach_pw[16];   /* md4(machine password) */
@@ -147,8 +148,8 @@
 	fstring remote_machine;  /* Machine name we've authenticated. */
 	fstring domain;
 
-	bool challenge_sent;
-	bool authenticated;
+	BOOL challenge_sent;
+	BOOL authenticated;
 };
 
 typedef struct pipe_rpc_fns {
@@ -251,31 +252,31 @@
 	 * Set to true when an RPC bind has been done on this pipe.
 	 */
 	
-	bool pipe_bound;
+	BOOL pipe_bound;
 	
 	/*
 	 * Set to true when we should return fault PDU's for everything.
 	 */
 	
-	bool fault_state;
+	BOOL fault_state;
 
 	/*
 	 * Set to true when we should return fault PDU's for a bad handle.
 	 */
 
-	bool bad_handle_fault_state;
-
+	BOOL bad_handle_fault_state;
+	
 	/*
 	 * Set to true when the backend does not support a call.
 	 */
 
-	bool rng_fault_state;
+	BOOL rng_fault_state;
 	
 	/*
 	 * Set to RPC_BIG_ENDIAN when dealing with big-endian PDU's
 	 */
 	
-	bool endian;
+	BOOL endian;
 	
 	/*
 	 * Struct to deal with multiple pdu inputs.
@@ -303,10 +304,10 @@
 	int pnum;
 	connection_struct *conn;
 	uint16 vuid; /* points to the unauthenticated user that opened this pipe. */
-	bool open; /* open connection */
+	BOOL open; /* open connection */
 	uint16 device_state;
 	uint16 priority;
-	char *name;
+	fstring name;
 
 	/* When replying to an SMBtrans, this is the maximum amount of
            data that can be sent in the initial reply. */
@@ -329,7 +330,7 @@
 	 * returns: state information representing the connection.
 	 *          is stored in np_state, above.
 	 */
-	void *   (*namedpipe_create)(const char *pipe_name, 
+	void *   (*namedpipe_create)(char *pipe_name, 
 					  connection_struct *conn, uint16 vuid);
 
 	/* call to perform a write / read namedpipe transaction.
@@ -341,7 +342,7 @@
 	ssize_t  (*namedpipe_transact)(void *np_state,
 	                               char *data, int len,
 	                               char *rdata, int rlen,
-	                               bool *pipe_outstanding);
+	                               BOOL *pipe_outstanding);
 
 	/* call to perform a write namedpipe operation
 	 */
@@ -361,7 +362,7 @@
 	 */
 	ssize_t  (*namedpipe_read)(void * np_state,
 	                           char *data, size_t max_len,
-	                           bool *pipe_outstanding);
+	                           BOOL *pipe_outstanding);
 
 	/* call to close a namedpipe.
 	 * function is expected to perform all cleanups
@@ -370,14 +371,14 @@
 	 * returns True if cleanup was successful (not that
 	 * we particularly care).
 	 */
-	bool     (*namedpipe_close)(void * np_state);
+	BOOL     (*namedpipe_close)(void * np_state);
 
 } smb_np_struct;
 
 struct api_struct {  
 	const char *name;
 	uint8 opnum;
-	bool (*fn) (pipes_struct *);
+	BOOL (*fn) (pipes_struct *);
 };
 
 typedef struct {  

Modified: branches/samba/upstream/source/include/nterr.h
===================================================================
--- branches/samba/upstream/source/include/nterr.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/nterr.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _NTERR_H
@@ -30,7 +31,7 @@
 #define NT_STATUS_NO_MORE_ENTRIES         NT_STATUS(0x8000001a)
 
 /* Vista Status codes. */
-#define NT_STATUS_INACCESSIBLE_SYSTEM_SHORTCUT         NT_STATUS(0x8000002d)
+#define STATUS_INACCESSIBLE_SYSTEM_SHORTCUT         NT_STATUS(0x8000002d)
 
 #define STATUS_MORE_ENTRIES               NT_STATUS(0x0105)
 #define STATUS_SOME_UNMAPPED              NT_STATUS(0x0107)
@@ -566,6 +567,5 @@
 #define NT_STATUS_DOWNGRADE_DETECTED NT_STATUS(0xC0000000 | 0x0388)
 #define NT_STATUS_NO_SUCH_JOB NT_STATUS(0xC0000000 | 0xEDE) /* scheduler */
 #define NT_STATUS_RPC_PROTSEQ_NOT_SUPPORTED NT_STATUS(0xC0000000 | 0x20004)
-#define NT_STATUS_RPC_CANNOT_SUPPORT NT_STATUS(0xC0000000 | 0x20041)
 
 #endif /* _NTERR_H */

Modified: branches/samba/upstream/source/include/ntioctl.h
===================================================================
--- branches/samba/upstream/source/include/ntioctl.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/ntioctl.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /*
@@ -46,7 +47,7 @@
 #define FSCTL_SET_REPARSE_POINT      0x000900A4
 #define FSCTL_GET_REPARSE_POINT      0x000900A8
 #define FSCTL_DELETE_REPARSE_POINT   0x000900AC
-#define FSCTL_CREATE_OR_GET_OBJECT_ID 0x000900C0
+#define FSCTL_0x000900C0	     0x000900C0
 #define FSCTL_SET_SPARSE             0x000900C4
 #define FSCTL_SET_ZERO_DATA          0x000900C8
 #define FSCTL_SET_ENCRYPTION         0x000900D7

Modified: branches/samba/upstream/source/include/ntlmssp.h
===================================================================
--- branches/samba/upstream/source/include/ntlmssp.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/ntlmssp.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /* NTLMSSP mode */
@@ -83,8 +84,8 @@
 	enum server_types server_role;
 	uint32 expected_state;
 
-	bool unicode;
-	bool use_ntlmv2;
+	BOOL unicode;
+	BOOL use_ntlmv2;
 	char *user;
 	char *domain;
 	char *workstation;
@@ -122,7 +123,7 @@
 	 * @return Can the challenge be set to arbitary values?
 	 *
 	 */
-	bool (*may_set_challenge)(const struct ntlmssp_state *ntlmssp_state);
+	BOOL (*may_set_challenge)(const struct ntlmssp_state *ntlmssp_state);
 
 	/**
 	 * Callback to set the 'challenge' used for NTLM authentication.  

Modified: branches/samba/upstream/source/include/ntquotas.h
===================================================================
--- branches/samba/upstream/source/include/ntquotas.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/ntquotas.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _NTQUOTAS_H
@@ -83,7 +84,7 @@
 } SMB_NTQUOTA_LIST;
 
 typedef struct _SMB_NTQUOTA_HANDLE {
-	bool valid;
+	BOOL valid;
 	SMB_NTQUOTA_LIST *quota_list;
 	SMB_NTQUOTA_LIST *tmp_list;
 } SMB_NTQUOTA_HANDLE;

Deleted: branches/samba/upstream/source/include/packet.h
===================================================================
--- branches/samba/upstream/source/include/packet.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/packet.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,83 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   Packet handling
-   Copyright (C) Volker Lendecke 2007
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/*
- * A packet context is a wrapper around a bidirectional file descriptor,
- * hiding the handling of individual requests.
- */
-
-struct packet_context;
-
-/*
- * Initialize a packet context. The fd is given to the packet context, meaning
- * that it is automatically closed when the packet context is freed.
- */
-struct packet_context *packet_init(TALLOC_CTX *mem_ctx, int fd);
-
-/*
- * Pull data from the fd
- */
-NTSTATUS packet_fd_read(struct packet_context *ctx);
-
-/*
- * Sync read, wait for the next chunk
- */
-NTSTATUS packet_fd_read_sync(struct packet_context *ctx);
-
-/*
- * Handle an incoming packet:
- * Return False if none is available
- * Otherwise return True and store the callback result in *status
- */
-bool packet_handler(struct packet_context *ctx,
-		    bool (*full_req)(const struct data_blob *data,
-				     size_t *length,
-				     void *private_data),
-		    NTSTATUS (*callback)(const struct data_blob *data,
-					 void *private_data),
-		    void *private_data,
-		    NTSTATUS *status);
-
-/*
- * How many bytes of outgoing data do we have pending?
- */
-size_t packet_outgoing_bytes(struct packet_context *ctx);
-
-/*
- * Push data to the fd
- */
-NTSTATUS packet_fd_write(struct packet_context *ctx);
-
-/*
- * Sync flush all outgoing bytes
- */
-NTSTATUS packet_flush(struct packet_context *ctx);
-
-/*
- * Send a list of DATA_BLOBs
- *
- * Example:  packet_send(ctx, 2, data_blob_const(&size, sizeof(size)),
- *			 data_blob_const(buf, size));
- */
-NTSTATUS packet_send(struct packet_context *ctx, int num_blobs, ...);
-
-/*
- * Get the packet context's file descriptor
- */
-int packet_get_fd(struct packet_context *ctx);

Modified: branches/samba/upstream/source/include/passdb.h
===================================================================
--- branches/samba/upstream/source/include/passdb.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/passdb.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _PASSDB_H
@@ -25,13 +26,40 @@
 
 
 /*
- * in samba4 idl
- * ACCT_NT_PWD_SET == SAMR_FIELD_PASSWORD and
- * ACCT_LM_PWD_SET == SAMR_FIELD_PASSWORD2
+ * fields_present flags meanings
+ * same names as found in samba4 idl files
  */
 
+#define ACCT_USERNAME		0x00000001
+#define ACCT_FULL_NAME		0x00000002
+#define ACCT_RID		0x00000004
+#define ACCT_PRIMARY_GID	0x00000008
+#define ACCT_DESCRIPTION	0x00000010
+#define ACCT_COMMENT		0x00000020
+#define ACCT_HOME_DIR		0x00000040
+#define ACCT_HOME_DRIVE		0x00000080
+#define ACCT_LOGON_SCRIPT	0x00000100
+#define ACCT_PROFILE		0x00000200
+#define ACCT_WORKSTATIONS	0x00000400
+#define ACCT_LAST_LOGON		0x00000800
+#define ACCT_LAST_LOGOFF	0x00001000
+#define ACCT_LOGON_HOURS	0x00002000
+#define ACCT_BAD_PWD_COUNT	0x00004000
+#define ACCT_NUM_LOGONS		0x00008000
+#define ACCT_ALLOW_PWD_CHANGE	0x00010000
+#define ACCT_FORCE_PWD_CHANGE	0x00020000
+#define ACCT_LAST_PWD_CHANGE	0x00040000
+#define ACCT_EXPIRY		0x00080000
+#define ACCT_FLAGS		0x00100000
+#define ACCT_CALLBACK		0x00200000
+#define ACCT_COUNTRY_CODE	0x00400000
+#define ACCT_CODE_PAGE		0x00800000
 #define ACCT_NT_PWD_SET		0x01000000
 #define ACCT_LM_PWD_SET		0x02000000
+#define ACCT_PRIVATEDATA	0x04000000
+#define ACCT_EXPIRED_FLAG	0x08000000
+#define ACCT_SEC_DESC		0x10000000
+#define ACCT_OWF_PWD		0x20000000
 
 /*
  * bit flags representing initialized fields in struct samu
@@ -194,9 +222,9 @@
 	struct samr_displayentry *cache;
 	uint32 num_entries;
 	ssize_t cache_size;
-	bool search_ended;
+	BOOL search_ended;
 	void *private_data;
-	bool (*next_entry)(struct pdb_search *search,
+	BOOL (*next_entry)(struct pdb_search *search,
 			   struct samr_displayentry *entry);
 	void (*search_end)(struct pdb_search *search);
 };
@@ -214,16 +242,20 @@
  * the pdb module. Remove the latter, this might happen more often. VL.
  * changed to version 14 to move lookup_rids and lookup_names to return
  * enum lsa_SidType rather than uint32.
- * Changed to 16 for access to the trusted domain passwords (obnox).
- * Changed to 17, the sampwent interface is gone.
  */
 
-#define PASSDB_INTERFACE_VERSION 17
+#define PASSDB_INTERFACE_VERSION 15
 
 struct pdb_methods 
 {
 	const char *name; /* What name got this module */
 
+	NTSTATUS (*setsampwent)(struct pdb_methods *, BOOL update, uint32 acb_mask);
+	
+	void (*endsampwent)(struct pdb_methods *);
+	
+	NTSTATUS (*getsampwent)(struct pdb_methods *, struct samu *user);
+	
 	NTSTATUS (*getsampwnam)(struct pdb_methods *, struct samu *sam_acct, const char *username);
 	
 	NTSTATUS (*getsampwsid)(struct pdb_methods *, struct samu *sam_acct, const DOM_SID *sid);
@@ -243,7 +275,7 @@
 	
 	NTSTATUS (*rename_sam_account)(struct pdb_methods *, struct samu *oldname, const char *newname);
 	
-	NTSTATUS (*update_login_attempts)(struct pdb_methods *methods, struct samu *sam_acct, bool success);
+	NTSTATUS (*update_login_attempts)(struct pdb_methods *methods, struct samu *sam_acct, BOOL success);
 
 	NTSTATUS (*getgrsid)(struct pdb_methods *methods, GROUP_MAP *map, DOM_SID sid);
 
@@ -270,7 +302,7 @@
 	NTSTATUS (*enum_group_mapping)(struct pdb_methods *methods,
 				       const DOM_SID *sid, enum lsa_SidType sid_name_use,
 				       GROUP_MAP **pp_rmap, size_t *p_num_entries,
-				       bool unix_only);
+				       BOOL unix_only);
 
 	NTSTATUS (*enum_group_members)(struct pdb_methods *methods,
 				       TALLOC_CTX *mem_ctx,
@@ -296,6 +328,9 @@
 				 TALLOC_CTX *mem_ctx,
 				 uint32 group_rid, uint32 member_rid);
 
+	NTSTATUS (*find_alias)(struct pdb_methods *methods,
+			       const char *name, DOM_SID *sid);
+
 	NTSTATUS (*create_alias)(struct pdb_methods *methods,
 				 const char *name, uint32 *rid);
 
@@ -347,40 +382,27 @@
 
 	NTSTATUS (*get_seq_num)(struct pdb_methods *methods, time_t *seq_num);
 
-	bool (*search_users)(struct pdb_methods *methods,
+	BOOL (*search_users)(struct pdb_methods *methods,
 			     struct pdb_search *search,
 			     uint32 acct_flags);
-	bool (*search_groups)(struct pdb_methods *methods,
+	BOOL (*search_groups)(struct pdb_methods *methods,
 			      struct pdb_search *search);
-	bool (*search_aliases)(struct pdb_methods *methods,
+	BOOL (*search_aliases)(struct pdb_methods *methods,
 			       struct pdb_search *search,
 			       const DOM_SID *sid);
 
-	bool (*uid_to_rid)(struct pdb_methods *methods, uid_t uid,
+	BOOL (*uid_to_rid)(struct pdb_methods *methods, uid_t uid,
 			   uint32 *rid);
-	bool (*uid_to_sid)(struct pdb_methods *methods, uid_t uid,
+	BOOL (*uid_to_sid)(struct pdb_methods *methods, uid_t uid,
 			   DOM_SID *sid);
-	bool (*gid_to_sid)(struct pdb_methods *methods, gid_t gid,
+	BOOL (*gid_to_sid)(struct pdb_methods *methods, gid_t gid,
 			   DOM_SID *sid);
-	bool (*sid_to_id)(struct pdb_methods *methods, const DOM_SID *sid,
+	BOOL (*sid_to_id)(struct pdb_methods *methods, const DOM_SID *sid,
 			  union unid_t *id, enum lsa_SidType *type);
 
-	bool (*rid_algorithm)(struct pdb_methods *methods);
-	bool (*new_rid)(struct pdb_methods *methods, uint32 *rid);
+	BOOL (*rid_algorithm)(struct pdb_methods *methods);
+	BOOL (*new_rid)(struct pdb_methods *methods, uint32 *rid);
 
-
-	bool (*get_trusteddom_pw)(struct pdb_methods *methods,
-				  const char *domain, char** pwd, 
-				  DOM_SID *sid, time_t *pass_last_set_time);
-	bool (*set_trusteddom_pw)(struct pdb_methods *methods, 
-				  const char* domain, const char* pwd,
-	        	  	  const DOM_SID *sid);
-	bool (*del_trusteddom_pw)(struct pdb_methods *methods, 
-				  const char *domain);
-	NTSTATUS (*enum_trusteddoms)(struct pdb_methods *methods,
-				     TALLOC_CTX *mem_ctx, uint32 *num_domains,
-				     struct trustdom_info ***domains);
-
 	void *private_data;  /* Private data of some kind */
 	
 	void (*free_private_data)(void **);

Modified: branches/samba/upstream/source/include/popt_common.h
===================================================================
--- branches/samba/upstream/source/include/popt_common.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/popt_common.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _POPT_COMMON_H
@@ -25,7 +26,6 @@
 /* Common popt structures */
 extern struct poptOption popt_common_samba[];
 extern struct poptOption popt_common_connection[];
-extern struct poptOption popt_common_configfile[];
 extern struct poptOption popt_common_version[];
 extern struct poptOption popt_common_credentials[];
 extern const struct poptOption popt_common_dynconfig[];
@@ -37,20 +37,19 @@
 #define POPT_COMMON_SAMBA { NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_samba, 0, "Common samba options:", NULL },
 #define POPT_COMMON_CONNECTION { NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_connection, 0, "Connection options:", NULL },
 #define POPT_COMMON_VERSION { NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_version, 0, "Common samba options:", NULL },
-#define POPT_COMMON_CONFIGFILE { NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_configfile, 0, "Common samba config:", NULL },
 #define POPT_COMMON_CREDENTIALS { NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_credentials, 0, "Authentication options:", NULL },
 #define POPT_COMMON_DYNCONFIG { NULL, 0, POPT_ARG_INCLUDE_TABLE, \
     CONST_DISCARD(poptOption *, popt_common_dynconfig), 0, \
     "Build-time configuration overrides:", NULL },
 
 struct user_auth_info {
-	char *username;
-	char *password;
-	bool got_pass;
-	bool use_kerberos;
+	pstring username;
+	pstring password;
+	BOOL got_pass;
+	BOOL use_kerberos;
 	int signing_state;
-	bool smb_encrypt;
-	bool use_machine_account;
 };
 
+extern struct user_auth_info cmdline_auth_info;
+
 #endif /* _POPT_COMMON_H */

Modified: branches/samba/upstream/source/include/printing.h
===================================================================
--- branches/samba/upstream/source/include/printing.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/printing.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /*
@@ -34,8 +35,8 @@
 	int status; /* the status of this job */
 	size_t size; /* the size of the job so far */
 	int page_count;	/* then number of pages so far */
-	bool spooled; /* has it been sent to the spooler yet? */
-	bool smbjob; /* set if the job is a SMB job */
+	BOOL spooled; /* has it been sent to the spooler yet? */
+	BOOL smbjob; /* set if the job is a SMB job */
 	fstring filename; /* the filename used to spool the file */
 	fstring jobname; /* the job name given to us by the client */
 	fstring user; /* the user who started the job */
@@ -72,6 +73,10 @@
 extern struct printif	iprint_printif;
 #endif /* HAVE_IPRINT */
 
+#if defined(DEVELOPER) || defined(ENABLE_BUILD_FARM_HACKS)
+extern struct printif test_printif;
+#endif /* DEVELOPER||ENABLE_BUILD_FARM_HACKS */
+
 /* PRINT_MAX_JOBID is now defined in local.h */
 #define UNIX_JOB_START PRINT_MAX_JOBID
 #define NEXT_JOBID(j) ((j+1) % PRINT_MAX_JOBID > 0 ? (j+1) % PRINT_MAX_JOBID : 1)

Modified: branches/samba/upstream/source/include/privileges.h
===================================================================
--- branches/samba/upstream/source/include/privileges.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/privileges.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,7 +10,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -19,7 +19,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef PRIVILEGES_H
@@ -60,10 +61,8 @@
 #define SE_RESTORE			{ { 0x00000400, 0x00000000, 0x00000000, 0x00000000 } }
 #define SE_TAKE_OWNERSHIP		{ { 0x00000800, 0x00000000, 0x00000000, 0x00000000 } }
 
-/* defined in lib/privilegs_basic.c */
+/* defined in lib/privilegs.c */
 
-extern const SE_PRIV se_priv_all;
-
 extern const SE_PRIV se_priv_none;
 extern const SE_PRIV se_machine_account;
 extern const SE_PRIV se_print_operator;
@@ -94,9 +93,14 @@
 	uint32 attr;
 } LUID_ATTR;
 
+#ifndef _UPPER_BOOL
+typedef int BOOL;
+#define _UPPER_BOOL
+#endif
+
 typedef struct {
 	TALLOC_CTX *mem_ctx;
-	bool ext_ctx;
+	BOOL ext_ctx;
 	uint32 count;
 	uint32 control;
 	LUID_ATTR *set;

Copied: branches/samba/upstream/source/include/pstring.h (from rev 1928, branches/samba/upstream/source/include/pstring.h)
===================================================================
--- branches/samba/upstream/source/include/pstring.h	                        (rev 0)
+++ branches/samba/upstream/source/include/pstring.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,36 @@
+/* 
+   samba -- Unix SMB/CIFS implementation.
+   Safe standardized string types
+   
+   Copyright (C) Andrew Tridgell              1992-2000
+   Copyright (C) John H Terpstra              1996-2000
+   Copyright (C) Luke Kenneth Casson Leighton 1996-2000
+   Copyright (C) Paul Ashton                  1998-2000
+   Copyright (C) Martin Pool		      2002
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#ifndef _PSTRING
+
+#define PSTRING_LEN 1024
+#define FSTRING_LEN 256
+
+typedef char pstring[PSTRING_LEN];
+typedef char fstring[FSTRING_LEN];
+
+#define _PSTRING
+
+#endif /* ndef _PSTRING */

Modified: branches/samba/upstream/source/include/rap.h
===================================================================
--- branches/samba/upstream/source/include/rap.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/rap.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _RAP_H_


Property changes on: branches/samba/upstream/source/include/rap.h
___________________________________________________________________
Name: svn:executable
   + *

Deleted: branches/samba/upstream/source/include/rbtree.h
===================================================================
--- branches/samba/upstream/source/include/rbtree.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/rbtree.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,132 +0,0 @@
-/*
-  Red Black Trees
-  (C) 1999  Andrea Arcangeli <andrea at suse.de>
-  
-  This program is free software; you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation; either version 2 of the License, or
-  (at your option) any later version.
-
-  This program is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with this program; if not, write to the Free Software
-  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-  linux/include/linux/rbtree.h
-
-  To use rbtrees you'll have to implement your own insert and search cores.
-  This will avoid us to use callbacks and to drop drammatically performances.
-  I know it's not the cleaner way,  but in C (not in C++) to get
-  performances and genericity...
-
-  Some example of insert and search follows here. The search is a plain
-  normal search over an ordered tree. The insert instead must be implemented
-  int two steps: as first thing the code must insert the element in
-  order as a red leaf in the tree, then the support library function
-  rb_insert_color() must be called. Such function will do the
-  not trivial work to rebalance the rbtree if necessary.
-
------------------------------------------------------------------------
-static inline struct page * rb_search_page_cache(struct inode * inode,
-						 unsigned long offset)
-{
-	struct rb_node * n = inode->i_rb_page_cache.rb_node;
-	struct page * page;
-
-	while (n)
-	{
-		page = rb_entry(n, struct page, rb_page_cache);
-
-		if (offset < page->offset)
-			n = n->rb_left;
-		else if (offset > page->offset)
-			n = n->rb_right;
-		else
-			return page;
-	}
-	return NULL;
-}
-
-static inline struct page * __rb_insert_page_cache(struct inode * inode,
-						   unsigned long offset,
-						   struct rb_node * node)
-{
-	struct rb_node ** p = &inode->i_rb_page_cache.rb_node;
-	struct rb_node * parent = NULL;
-	struct page * page;
-
-	while (*p)
-	{
-		parent = *p;
-		page = rb_entry(parent, struct page, rb_page_cache);
-
-		if (offset < page->offset)
-			p = &(*p)->rb_left;
-		else if (offset > page->offset)
-			p = &(*p)->rb_right;
-		else
-			return page;
-	}
-
-	rb_link_node(node, parent, p);
-
-	return NULL;
-}
-
-static inline struct page * rb_insert_page_cache(struct inode * inode,
-						 unsigned long offset,
-						 struct rb_node * node)
-{
-	struct page * ret;
-	if ((ret = __rb_insert_page_cache(inode, offset, node)))
-		goto out;
-	rb_insert_color(node, &inode->i_rb_page_cache);
- out:
-	return ret;
-}
------------------------------------------------------------------------
-*/
-
-#ifndef	_LINUX_RBTREE_H
-#define	_LINUX_RBTREE_H
-
-struct rb_node
-{
-	unsigned long  rb_parent_color;
-	struct rb_node *rb_right;
-	struct rb_node *rb_left;
-};
-
-struct rb_root
-{
-	struct rb_node *rb_node;
-};
-
-
-#define RB_ROOT	(struct rb_root) { NULL, }
-
-#if 0
-#define	rb_entry(ptr, type, member) container_of(ptr, type, member)
-#endif
-
-void rb_insert_color(struct rb_node *, struct rb_root *);
-void rb_erase(struct rb_node *, struct rb_root *);
-
-/* Find logical next and previous nodes in a tree */
-struct rb_node *rb_next(struct rb_node *);
-struct rb_node *rb_prev(struct rb_node *);
-struct rb_node *rb_first(struct rb_root *);
-struct rb_node *rb_last(struct rb_root *);
-
-/* Fast replacement of a single node without remove/rebalance/add/rebalance */
-extern void rb_replace_node(struct rb_node *victim, struct rb_node *new_node,
-			    struct rb_root *root);
-
-void rb_link_node(struct rb_node * node, struct rb_node * parent,
-		  struct rb_node ** rb_link);
-
-#endif	/* _LINUX_RBTREE_H */

Deleted: branches/samba/upstream/source/include/reg_db.h
===================================================================
--- branches/samba/upstream/source/include/reg_db.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/reg_db.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,30 +0,0 @@
-/* 
-   Parameters for Samba's Internal Registry Database
-   
-   Copyright (C) Michael Adam 2007
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef _REG_DB_H
-#define _REG_DB_H
-
-#define REG_TDB_FLAGS   TDB_SEQNUM
-
-#define REGVER_V1       1       /* first db version with write support */
-
-#define REG_VALUE_PREFIX    "SAMBA_REGVAL"
-#define REG_SECDESC_PREFIX  "SAMBA_SECDESC"
-
-#endif /* _REG_DB_H */

Modified: branches/samba/upstream/source/include/reg_objects.h
===================================================================
--- branches/samba/upstream/source/include/reg_objects.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/reg_objects.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _REG_OBJECTS_H /* _REG_OBJECTS_H */
@@ -31,37 +32,11 @@
 	uint8           *data_p;
 } REGISTRY_VALUE;
 
-/*
- * A REG_SZ string is not necessarily NULL terminated. When retrieving it from
- * the net, we guarantee this however. A server might want to push it without
- * the terminator though.
- */
-
-struct registry_string {
-	size_t len;
-	char *str;
-};
-
-struct registry_value {
-	enum winreg_Type type;
-	union {
-		uint32 dword;
-		uint64 qword;
-		struct registry_string sz;
-		struct {
-			uint32 num_strings;
-			char **strings;
-		} multi_sz;
-		DATA_BLOB binary;
-	} v;
-};
-
 /* container for registry values */
 
 typedef struct {
 	uint32          num_values;
 	REGISTRY_VALUE	**values;
-	int seqnum;
 } REGVAL_CTR;
 
 /* container for registry subkey names */
@@ -69,97 +44,7 @@
 typedef struct {
 	uint32          num_subkeys;
 	char            **subkeys;
-	int seqnum;
 } REGSUBKEY_CTR;
 
-/*
- *
- * Macros that used to reside in rpc_reg.h
- *
- */
- 
-#define HKEY_CLASSES_ROOT	0x80000000
-#define HKEY_CURRENT_USER	0x80000001
-#define HKEY_LOCAL_MACHINE 	0x80000002
-#define HKEY_USERS         	0x80000003
-#define HKEY_PERFORMANCE_DATA	0x80000004
-
-#define KEY_HKLM		"HKLM"
-#define KEY_HKU			"HKU"
-#define KEY_HKCC		"HKCC"
-#define KEY_HKCR		"HKCR"
-#define KEY_HKPD		"HKPD"
-#define KEY_HKPT		"HKPT"
-#define KEY_HKPN		"HKPN"
-#define KEY_HKCU		"HKCU"
-#define KEY_HKDD		"HKDD"
-#define KEY_SERVICES		"HKLM\\SYSTEM\\CurrentControlSet\\Services"
-#define KEY_EVENTLOG 		"HKLM\\SYSTEM\\CurrentControlSet\\Services\\Eventlog"
-#define KEY_SHARES		"HKLM\\SYSTEM\\CurrentControlSet\\Services\\LanmanServer\\Shares"
-#define KEY_NETLOGON_PARAMS	"HKLM\\SYSTEM\\CurrentControlSet\\Services\\Netlogon\\Parameters"
-#define KEY_TCPIP_PARAMS	"HKLM\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters"
-#define KEY_PROD_OPTIONS	"HKLM\\SYSTEM\\CurrentControlSet\\Control\\ProductOptions"
-#define KEY_PRINTING 		"HKLM\\SYSTEM\\CurrentControlSet\\Control\\Print"
-#define KEY_PRINTING_2K		"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Print\\Printers"
-#define KEY_PRINTING_PORTS	"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Ports"
-#define KEY_CURRENT_VERSION	"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"
-#define KEY_PERFLIB		"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib"
-#define KEY_PERFLIB_009		"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib\\009"
-#define KEY_SMBCONF		"HKLM\\SOFTWARE\\Samba\\smbconf"
-#define KEY_TREE_ROOT		""
-
-/*
- * Registry key types
- *	Most keys are going to be GENERIC -- may need a better name?
- *	HKPD and HKPT are used by reg_perfcount.c
- *		they are special keys that contain performance data
- */
-#define REG_KEY_GENERIC		0
-#define REG_KEY_HKPD		1
-#define REG_KEY_HKPT		2
-
-/* 
- * container for function pointers to enumeration routines
- * for virtual registry view 
- */ 
- 
-typedef struct {
-	/* functions for enumerating subkeys and values */	
-	int 	(*fetch_subkeys)( const char *key, REGSUBKEY_CTR *subkeys);
-	int 	(*fetch_values) ( const char *key, REGVAL_CTR *val );
-	bool 	(*store_subkeys)( const char *key, REGSUBKEY_CTR *subkeys );
-	bool 	(*store_values)( const char *key, REGVAL_CTR *val );
-	bool	(*reg_access_check)( const char *keyname, uint32 requested,
-				     uint32 *granted,
-				     const NT_USER_TOKEN *token );
-	WERROR (*get_secdesc)(TALLOC_CTX *mem_ctx, const char *key,
-			      struct security_descriptor **psecdesc);
-	WERROR (*set_secdesc)(const char *key,
-			      struct security_descriptor *sec_desc);
-	bool	(*subkeys_need_update)(REGSUBKEY_CTR *subkeys);
-	bool	(*values_need_update)(REGVAL_CTR *values);
-} REGISTRY_OPS;
-
-typedef struct {
-	const char	*keyname;	/* full path to name of key */
-	REGISTRY_OPS	*ops;		/* registry function hooks */
-} REGISTRY_HOOK;
-
-
-/* structure to store the registry handles */
-
-typedef struct _RegistryKey {
-	uint32		type;
-	char		*name; 		/* full name of registry key */
-	uint32 		access_granted;
-	REGISTRY_OPS	*ops;
-} REGISTRY_KEY;
-
-struct registry_key {
-	REGISTRY_KEY *key;
-	REGSUBKEY_CTR *subkeys;
-	REGVAL_CTR *values;
-	struct nt_user_token *token;
-};
-
 #endif /* _REG_OBJECTS_H */
+

Modified: branches/samba/upstream/source/include/regfio.h
===================================================================
--- branches/samba/upstream/source/include/regfio.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/regfio.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 /************************************************************
@@ -71,7 +72,7 @@
 
 	prs_struct ps;			/* data */
 
-	bool dirty;			/* has this hbin block been modified? */
+	BOOL dirty;			/* has this hbin block been modified? */
 } REGF_HBIN;
 
 /* ??? List -- list of key offsets and hashed names for consistency */

Copied: branches/samba/upstream/source/include/rpc_brs.h (from rev 1928, branches/samba/upstream/source/include/rpc_brs.h)
===================================================================
--- branches/samba/upstream/source/include/rpc_brs.h	                        (rev 0)
+++ branches/samba/upstream/source/include/rpc_brs.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,80 @@
+/* 
+   Unix SMB/CIFS implementation.
+   SMB parameters and setup
+   Copyright (C) Andrew Tridgell 1992-1999
+   Copyright (C) Luke Kenneth Casson Leighton 1996-1999
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#ifndef _RPC_BRS_H /* _RPC_BRS_H */
+#define _RPC_BRS_H 
+
+
+/* brssvc pipe */
+#define BRS_QUERY_INFO    0x02
+
+
+/* BRS_Q_QUERY_INFO - probably a capabilities request */
+typedef struct q_brs_query_info_info
+{
+	uint32 ptr_srv_name;         /* pointer (to server name?) */
+	UNISTR2 uni_srv_name;        /* unicode server name starting with '\\' */
+
+	uint16 switch_value1;            /* info level 100 (0x64) */
+	/* align */
+	uint16 switch_value2;            /* info level 100 (0x64) */
+
+	uint32 ptr;
+	uint32 pad1;
+	uint32 pad2;
+
+} BRS_Q_QUERY_INFO;
+
+
+/* BRS_INFO_100 - level 100 info */
+typedef struct brs_info_100_info
+{
+	uint32 pad1;
+	uint32 ptr2;
+	uint32 pad2;
+	uint32 pad3;
+
+} BRS_INFO_100;
+
+
+/* BRS_R_QUERY_INFO - probably a capabilities request */
+typedef struct r_brs_query_info_info
+{
+	uint16 switch_value1;          /* 100 (0x64) - switch value */
+	/* align */
+	uint16 switch_value2;            /* info level 100 (0x64) */
+
+	/* for now, only level 100 is supported.  this should be an enum container */
+	uint32 ptr_1;              /* pointer 1 */
+
+	union
+	{
+		BRS_INFO_100 *brs100;      /* browser info level 100 */
+		void *id;
+
+	} info;
+
+	NTSTATUS status;             /* return status */
+
+} BRS_R_QUERY_INFO;
+
+#endif /* _RPC_BRS_H */
+

Modified: branches/samba/upstream/source/include/rpc_client.h
===================================================================
--- branches/samba/upstream/source/include/rpc_client.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/rpc_client.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _RPC_CLIENT_H
@@ -22,22 +23,8 @@
 
 /* autogenerated client stubs */
 
-#include "librpc/gen_ndr/cli_echo.h"
-#include "librpc/gen_ndr/cli_lsa.h"
-#include "librpc/gen_ndr/cli_svcctl.h"
 #include "librpc/gen_ndr/cli_wkssvc.h"
-#include "librpc/gen_ndr/cli_eventlog.h"
-#include "librpc/gen_ndr/cli_dfs.h"
-#include "librpc/gen_ndr/cli_initshutdown.h"
-#include "librpc/gen_ndr/cli_winreg.h"
-#include "librpc/gen_ndr/cli_srvsvc.h"
-#include "librpc/gen_ndr/cli_samr.h"
-#include "librpc/gen_ndr/cli_netlogon.h"
-#include "librpc/gen_ndr/cli_dssetup.h"
-#include "librpc/gen_ndr/cli_ntsvcs.h"
 
-#define prs_init_empty( _ps_, _ctx_, _io_ ) (void) prs_init((_ps_), 0, (_ctx_), (_io_))
-
 /* macro to expand cookie-cutter code in cli_xxx() using rpc_api_pipe_req() */
 
 #define CLI_DO_RPC_INTERNAL( pcli, ctx, p_idx, opnum, q_in, r_out, \
@@ -47,7 +34,10 @@
 	if (!prs_init( &q_ps, RPC_MAX_PDU_FRAG_LEN, ctx, MARSHALL )) { \
 		return NT_STATUS_NO_MEMORY;\
 	}\
-	prs_init_empty( &r_ps, ctx, UNMARSHALL );\
+	if (!prs_init( &r_ps, 0, ctx, UNMARSHALL )) {\
+		prs_mem_free( &q_ps );\
+		return NT_STATUS_NO_MEMORY;\
+	}\
 	if ( copy_sess_key) prs_set_session_key(&q_ps, (const char *)pcli->dc->sess_key);\
 	if ( q_io_fn("", &q_in, &q_ps, 0) ) {\
 		NTSTATUS _smb_pipe_stat_ = rpc_api_pipe_req(pcli, opnum, &q_ps, &r_ps); \
@@ -95,7 +85,10 @@
 	if (!prs_init( &q_ps, RPC_MAX_PDU_FRAG_LEN, ctx, MARSHALL )) { \
 		return WERR_NOMEM;\
 	}\
-	prs_init_empty( &r_ps, ctx, UNMARSHALL );\
+	if (!prs_init( &r_ps, 0, ctx, UNMARSHALL )) {\
+		prs_mem_free( &q_ps );\
+		return WERR_NOMEM;\
+	}\
 	if ( q_io_fn("", &q_in, &q_ps, 0) ) {\
 		NTSTATUS _smb_pipe_stat_ = rpc_api_pipe_req(pcli, opnum, &q_ps, &r_ps); \
 		if (!NT_STATUS_IS_OK(_smb_pipe_stat_)) {\

Modified: branches/samba/upstream/source/include/rpc_dce.h
===================================================================
--- branches/samba/upstream/source/include/rpc_dce.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/rpc_dce.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _DCE_RPC_H /* _DCE_RPC_H */
@@ -98,51 +99,18 @@
 #define RPC_AUTH_SCHANNEL_SIGN_OR_SEAL_CHK_LEN 	0x20
 #define RPC_AUTH_SCHANNEL_SIGN_ONLY_CHK_LEN 	0x18
 
+
+#define NETLOGON_NEG_ARCFOUR			0x00000004
+#define NETLOGON_NEG_128BIT			0x00004000
+#define NETLOGON_NEG_SCHANNEL			0x40000000
+
 /* The 7 here seems to be required to get Win2k not to downgrade us
    to NT4.  Actually, anything other than 1ff would seem to do... */
 #define NETLOGON_NEG_AUTH2_FLAGS 0x000701ff
-/*
-	(NETLOGON_NEG_ACCOUNT_LOCKOUT |
-	 NETLOGON_NEG_PERSISTENT_SAMREPL |
-	 NETLOGON_NEG_ARCFOUR |
-	 NETLOGON_NEG_PROMOTION_COUNT |
-	 NETLOGON_NEG_CHANGELOG_BDC |
-	 NETLOGON_NEG_FULL_SYNC_REPL |
-	 NETLOGON_NEG_MULTIPLE_SIDS |
-	 NETLOGON_NEG_REDO |
-	 NETLOGON_NEG_PASSWORD_CHANGE_REFUSAL |
-	 NETLOGON_NEG_DNS_DOMAIN_TRUSTS |
-	 NETLOGON_NEG_PASSWORD_SET2 |
-	 NETLOGON_NEG_GETDOMAININFO)
-*/
 #define NETLOGON_NEG_DOMAIN_TRUST_ACCOUNT	0x2010b000
 
 /* these are the flags that ADS clients use */
 #define NETLOGON_NEG_AUTH2_ADS_FLAGS 0x600fffff
-/*
-	(NETLOGON_NEG_ACCOUNT_LOCKOUT |
-	 NETLOGON_NEG_PERSISTENT_SAMREPL |
-	 NETLOGON_NEG_ARCFOUR |
-	 NETLOGON_NEG_PROMOTION_COUNT |
-	 NETLOGON_NEG_CHANGELOG_BDC |
-	 NETLOGON_NEG_FULL_SYNC_REPL |
-	 NETLOGON_NEG_MULTIPLE_SIDS |
-	 NETLOGON_NEG_REDO |
-	 NETLOGON_NEG_PASSWORD_CHANGE_REFUSAL |
-	 NETLOGON_NEG_SEND_PASSWORD_INFO_PDC |
-	 NETLOGON_NEG_GENERIC_PASSTHROUGH |
-	 NETLOGON_NEG_CONCURRENT_RPC |
-	 NETLOGON_NEG_AVOID_ACCOUNT_DB_REPL |
-	 NETLOGON_NEG_AVOID_SECURITYAUTH_DB_REPL |
-	 NETLOGON_NEG_128BIT |
-	 NETLOGON_NEG_TRANSITIVE_TRUSTS |
-	 NETLOGON_NEG_DNS_DOMAIN_TRUSTS |
-	 NETLOGON_NEG_PASSWORD_SET2 |
-	 NETLOGON_NEG_GETDOMAININFO |
-	 NETLOGON_NEG_CROSS_FOREST_TRUSTS |
-	 NETLOGON_NEG_AUTHENTICATED_RPC_LSASS |
-	 NETLOGON_NEG_SCHANNEL)
-*/
 
 enum schannel_direction {
 	SENDER_IS_INITIATOR,

Copied: branches/samba/upstream/source/include/rpc_dfs.h (from rev 1928, branches/samba/upstream/source/include/rpc_dfs.h)
===================================================================
--- branches/samba/upstream/source/include/rpc_dfs.h	                        (rev 0)
+++ branches/samba/upstream/source/include/rpc_dfs.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,394 @@
+/*
+ * Unix SMB/CIFS implementation.
+ * header auto-generated by pidl. DO NOT MODIFY!
+ */
+
+
+#ifndef _RPC_NETDFS_H
+#define _RPC_NETDFS_H
+
+#define DFS_GETMANAGERVERSION 0
+#define DFS_ADD 1
+#define DFS_REMOVE 2
+#define DFS_SETINFO 3
+#define DFS_GETINFO 4
+#define DFS_ENUM 5
+#define DFS_RENAME 6
+#define DFS_MOVE 7
+#define DFS_MANAGERGETCONFIGINFO 8
+#define DFS_MANAGERSENDSITEINFO 9
+#define DFS_ADDFTROOT 10
+#define DFS_REMOVEFTROOT 11
+#define DFS_ADDSTDROOT 12
+#define DFS_REMOVESTDROOT 13
+#define DFS_MANAGERINITIALIZE 14
+#define DFS_ADDSTDROOTFORCED 15
+#define DFS_GETDCADDRESS 16
+#define DFS_SETDCADDRESS 17
+#define DFS_FLUSHFTTABLE 18
+#define DFS_ADD2 19
+#define DFS_REMOVE2 20
+#define DFS_ENUMEX 21
+#define DFS_SETINFO2 22
+
+typedef struct netdfs_dfs_Info0 {
+	uint32 dummy;
+} NETDFS_DFS_INFO0;
+
+typedef struct netdfs_dfs_Info1 {
+	uint32 ptr0_path;
+	UNISTR2 path;
+} NETDFS_DFS_INFO1;
+
+typedef struct netdfs_dfs_Info2 {
+	uint32 ptr0_path;
+	UNISTR2 path;
+	uint32 ptr0_comment;
+	UNISTR2 comment;
+	uint32 state;
+	uint32 num_stores;
+} NETDFS_DFS_INFO2;
+
+typedef struct netdfs_dfs_StorageInfo {
+	uint32 state;
+	uint32 ptr0_server;
+	UNISTR2 server;
+	uint32 ptr0_share;
+	UNISTR2 share;
+} NETDFS_DFS_STORAGEINFO;
+
+typedef struct netdfs_dfs_Info3 {
+	uint32 ptr0_path;
+	UNISTR2 path;
+	uint32 ptr0_comment;
+	UNISTR2 comment;
+	uint32 state;
+	uint32 num_stores;
+	uint32 ptr0_stores;
+	uint32 size_stores;
+	NETDFS_DFS_STORAGEINFO *stores;
+} NETDFS_DFS_INFO3;
+
+typedef struct netdfs_dfs_Info4 {
+	uint32 ptr0_path;
+	UNISTR2 path;
+	uint32 ptr0_comment;
+	UNISTR2 comment;
+	uint32 state;
+	uint32 timeout;
+	struct GUID guid;
+	uint32 num_stores;
+	uint32 ptr0_stores;
+	uint32 size_stores;
+	NETDFS_DFS_STORAGEINFO *stores;
+} NETDFS_DFS_INFO4;
+
+typedef struct netdfs_dfs_Info100 {
+	uint32 ptr0_comment;
+	UNISTR2 comment;
+} NETDFS_DFS_INFO100;
+
+typedef struct netdfs_dfs_Info101 {
+	uint32 state;
+} NETDFS_DFS_INFO101;
+
+typedef struct netdfs_dfs_Info102 {
+	uint32 timeout;
+} NETDFS_DFS_INFO102;
+
+typedef struct netdfs_dfs_Info200 {
+	uint32 ptr0_dom_root;
+	UNISTR2 dom_root;
+} NETDFS_DFS_INFO200;
+
+typedef struct netdfs_dfs_Info300 {
+	uint32 flags;
+	uint32 ptr0_dom_root;
+	UNISTR2 dom_root;
+} NETDFS_DFS_INFO300;
+
+typedef struct netdfs_dfs_Info_ctr {
+	uint32 switch_value;
+	uint32 ptr0;
+	union netdfs_dfs_Info {
+			NETDFS_DFS_INFO0 info0;
+			NETDFS_DFS_INFO1 info1;
+			NETDFS_DFS_INFO2 info2;
+			NETDFS_DFS_INFO3 info3;
+			NETDFS_DFS_INFO4 info4;
+			NETDFS_DFS_INFO100 info100;
+			NETDFS_DFS_INFO101 info101;
+			NETDFS_DFS_INFO102 info102;
+	} u;
+} NETDFS_DFS_INFO_CTR;
+
+typedef struct netdfs_dfs_EnumArray1 {
+	uint32 count;
+	uint32 ptr0_s;
+	uint32 size_s;
+	NETDFS_DFS_INFO1 *s;
+} NETDFS_DFS_ENUMARRAY1;
+
+typedef struct netdfs_dfs_EnumArray2 {
+	uint32 count;
+	uint32 ptr0_s;
+	uint32 size_s;
+	NETDFS_DFS_INFO2 *s;
+} NETDFS_DFS_ENUMARRAY2;
+
+typedef struct netdfs_dfs_EnumArray3 {
+	uint32 count;
+	uint32 ptr0_s;
+	uint32 size_s;
+	NETDFS_DFS_INFO3 *s;
+} NETDFS_DFS_ENUMARRAY3;
+
+typedef struct netdfs_dfs_EnumArray4 {
+	uint32 count;
+	uint32 ptr0_s;
+	uint32 size_s;
+	NETDFS_DFS_INFO4 *s;
+} NETDFS_DFS_ENUMARRAY4;
+
+typedef struct netdfs_dfs_EnumArray200 {
+	uint32 count;
+	uint32 ptr0_s;
+	uint32 size_s;
+	NETDFS_DFS_INFO200 *s;
+} NETDFS_DFS_ENUMARRAY200;
+
+typedef struct netdfs_dfs_EnumArray300 {
+	uint32 count;
+	uint32 ptr0_s;
+	uint32 size_s;
+	NETDFS_DFS_INFO300 *s;
+} NETDFS_DFS_ENUMARRAY300;
+
+typedef struct netdfs_dfs_EnumInfo_ctr {
+	uint32 switch_value;
+	uint32 ptr0;
+	union netdfs_dfs_EnumInfo {
+			NETDFS_DFS_ENUMARRAY1 info1;
+			NETDFS_DFS_ENUMARRAY2 info2;
+			NETDFS_DFS_ENUMARRAY3 info3;
+			NETDFS_DFS_ENUMARRAY4 info4;
+			NETDFS_DFS_ENUMARRAY200 info200;
+			NETDFS_DFS_ENUMARRAY300 info300;
+	} u;
+} NETDFS_DFS_ENUMINFO_CTR;
+
+typedef struct netdfs_dfs_EnumStruct {
+	uint32 level;
+	NETDFS_DFS_ENUMINFO_CTR e;
+} NETDFS_DFS_ENUMSTRUCT;
+
+typedef struct netdfs_q_dfs_GetManagerVersion {
+	uint32 dummy;
+} NETDFS_Q_DFS_GETMANAGERVERSION;
+
+typedef struct netdfs_r_dfs_GetManagerVersion {
+	uint32 exist_flag;
+} NETDFS_R_DFS_GETMANAGERVERSION;
+
+typedef struct netdfs_q_dfs_Add {
+	UNISTR2 path;
+	UNISTR2 server;
+	uint32 ptr0_share;
+	UNISTR2 share;
+	uint32 ptr0_comment;
+	UNISTR2 comment;
+	uint32 flags;
+} NETDFS_Q_DFS_ADD;
+
+typedef struct netdfs_r_dfs_Add {
+	WERROR status;
+} NETDFS_R_DFS_ADD;
+
+typedef struct netdfs_q_dfs_Remove {
+	UNISTR2 path;
+	uint32 ptr0_server;
+	UNISTR2 server;
+	uint32 ptr0_share;
+	UNISTR2 share;
+} NETDFS_Q_DFS_REMOVE;
+
+typedef struct netdfs_r_dfs_Remove {
+	WERROR status;
+} NETDFS_R_DFS_REMOVE;
+
+typedef struct netdfs_q_dfs_SetInfo {
+	uint32 dummy;
+} NETDFS_Q_DFS_SETINFO;
+
+typedef struct netdfs_r_dfs_SetInfo {
+	WERROR status;
+} NETDFS_R_DFS_SETINFO;
+
+typedef struct netdfs_q_dfs_GetInfo {
+	UNISTR2 path;
+	uint32 ptr0_server;
+	UNISTR2 server;
+	uint32 ptr0_share;
+	UNISTR2 share;
+	uint32 level;
+} NETDFS_Q_DFS_GETINFO;
+
+typedef struct netdfs_r_dfs_GetInfo {
+	NETDFS_DFS_INFO_CTR info;
+	WERROR status;
+} NETDFS_R_DFS_GETINFO;
+
+typedef struct netdfs_q_dfs_Enum {
+	uint32 level;
+	uint32 bufsize;
+	uint32 ptr0_info;
+	NETDFS_DFS_ENUMSTRUCT info;
+	uint32 ptr0_total;
+	uint32 total;
+} NETDFS_Q_DFS_ENUM;
+
+typedef struct netdfs_r_dfs_Enum {
+	uint32 ptr0_info;
+	NETDFS_DFS_ENUMSTRUCT info;
+	uint32 ptr0_total;
+	uint32 total;
+	WERROR status;
+} NETDFS_R_DFS_ENUM;
+
+typedef struct netdfs_q_dfs_Rename {
+	uint32 dummy;
+} NETDFS_Q_DFS_RENAME;
+
+typedef struct netdfs_r_dfs_Rename {
+	WERROR status;
+} NETDFS_R_DFS_RENAME;
+
+typedef struct netdfs_q_dfs_Move {
+	uint32 dummy;
+} NETDFS_Q_DFS_MOVE;
+
+typedef struct netdfs_r_dfs_Move {
+	WERROR status;
+} NETDFS_R_DFS_MOVE;
+
+typedef struct netdfs_q_dfs_ManagerGetConfigInfo {
+	uint32 dummy;
+} NETDFS_Q_DFS_MANAGERGETCONFIGINFO;
+
+typedef struct netdfs_r_dfs_ManagerGetConfigInfo {
+	WERROR status;
+} NETDFS_R_DFS_MANAGERGETCONFIGINFO;
+
+typedef struct netdfs_q_dfs_ManagerSendSiteInfo {
+	uint32 dummy;
+} NETDFS_Q_DFS_MANAGERSENDSITEINFO;
+
+typedef struct netdfs_r_dfs_ManagerSendSiteInfo {
+	WERROR status;
+} NETDFS_R_DFS_MANAGERSENDSITEINFO;
+
+typedef struct netdfs_q_dfs_AddFtRoot {
+	uint32 dummy;
+} NETDFS_Q_DFS_ADDFTROOT;
+
+typedef struct netdfs_r_dfs_AddFtRoot {
+	WERROR status;
+} NETDFS_R_DFS_ADDFTROOT;
+
+typedef struct netdfs_q_dfs_RemoveFtRoot {
+	uint32 dummy;
+} NETDFS_Q_DFS_REMOVEFTROOT;
+
+typedef struct netdfs_r_dfs_RemoveFtRoot {
+	WERROR status;
+} NETDFS_R_DFS_REMOVEFTROOT;
+
+typedef struct netdfs_q_dfs_AddStdRoot {
+	uint32 dummy;
+} NETDFS_Q_DFS_ADDSTDROOT;
+
+typedef struct netdfs_r_dfs_AddStdRoot {
+	WERROR status;
+} NETDFS_R_DFS_ADDSTDROOT;
+
+typedef struct netdfs_q_dfs_RemoveStdRoot {
+	uint32 dummy;
+} NETDFS_Q_DFS_REMOVESTDROOT;
+
+typedef struct netdfs_r_dfs_RemoveStdRoot {
+	WERROR status;
+} NETDFS_R_DFS_REMOVESTDROOT;
+
+typedef struct netdfs_q_dfs_ManagerInitialize {
+	uint32 dummy;
+} NETDFS_Q_DFS_MANAGERINITIALIZE;
+
+typedef struct netdfs_r_dfs_ManagerInitialize {
+	WERROR status;
+} NETDFS_R_DFS_MANAGERINITIALIZE;
+
+typedef struct netdfs_q_dfs_AddStdRootForced {
+	uint32 dummy;
+} NETDFS_Q_DFS_ADDSTDROOTFORCED;
+
+typedef struct netdfs_r_dfs_AddStdRootForced {
+	WERROR status;
+} NETDFS_R_DFS_ADDSTDROOTFORCED;
+
+typedef struct netdfs_q_dfs_GetDcAddress {
+	uint32 dummy;
+} NETDFS_Q_DFS_GETDCADDRESS;
+
+typedef struct netdfs_r_dfs_GetDcAddress {
+	WERROR status;
+} NETDFS_R_DFS_GETDCADDRESS;
+
+typedef struct netdfs_q_dfs_SetDcAddress {
+	uint32 dummy;
+} NETDFS_Q_DFS_SETDCADDRESS;
+
+typedef struct netdfs_r_dfs_SetDcAddress {
+	WERROR status;
+} NETDFS_R_DFS_SETDCADDRESS;
+
+typedef struct netdfs_q_dfs_FlushFtTable {
+	uint32 dummy;
+} NETDFS_Q_DFS_FLUSHFTTABLE;
+
+typedef struct netdfs_r_dfs_FlushFtTable {
+	WERROR status;
+} NETDFS_R_DFS_FLUSHFTTABLE;
+
+typedef struct netdfs_q_dfs_Add2 {
+	uint32 dummy;
+} NETDFS_Q_DFS_ADD2;
+
+typedef struct netdfs_r_dfs_Add2 {
+	WERROR status;
+} NETDFS_R_DFS_ADD2;
+
+typedef struct netdfs_q_dfs_Remove2 {
+	uint32 dummy;
+} NETDFS_Q_DFS_REMOVE2;
+
+typedef struct netdfs_r_dfs_Remove2 {
+	WERROR status;
+} NETDFS_R_DFS_REMOVE2;
+
+typedef struct netdfs_q_dfs_EnumEx {
+	uint32 dummy;
+} NETDFS_Q_DFS_ENUMEX;
+
+typedef struct netdfs_r_dfs_EnumEx {
+	WERROR status;
+} NETDFS_R_DFS_ENUMEX;
+
+typedef struct netdfs_q_dfs_SetInfo2 {
+	uint32 dummy;
+} NETDFS_Q_DFS_SETINFO2;
+
+typedef struct netdfs_r_dfs_SetInfo2 {
+	WERROR status;
+} NETDFS_R_DFS_SETINFO2;
+
+#endif /* _RPC_NETDFS_H */

Copied: branches/samba/upstream/source/include/rpc_ds.h (from rev 1928, branches/samba/upstream/source/include/rpc_ds.h)
===================================================================
--- branches/samba/upstream/source/include/rpc_ds.h	                        (rev 0)
+++ branches/samba/upstream/source/include/rpc_ds.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,171 @@
+/* 
+   Unix SMB/CIFS implementation.
+   SMB parameters and setup
+   Copyright (C) Gerald Carter			2002
+      
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#ifndef _RPC_DS_H /* _RPC_LSA_H */
+#define _RPC_DS_H 
+
+/* Opcodes available on PIPE_LSARPC_DS */
+
+#define DS_GETPRIMDOMINFO      0x00
+#define DS_NOP                 0xFF	/* no op -- placeholder */
+
+/* Opcodes available on PIPE_NETLOGON */
+
+#define DS_ENUM_DOM_TRUSTS      0x28
+
+
+/* macros for RPC's */
+
+/* DSROLE_PRIMARY_DOMAIN_INFO_BASIC */
+
+/* flags */
+
+#define DSROLE_PRIMARY_DS_RUNNING           0x00000001
+#define DSROLE_PRIMARY_DS_MIXED_MODE        0x00000002
+#define DSROLE_UPGRADE_IN_PROGRESS          0x00000004
+#define DSROLE_PRIMARY_DOMAIN_GUID_PRESENT  0x01000000
+
+/* machine role */
+
+#define DSROLE_DOMAIN_MEMBER_WKS	1
+#define DSROLE_STANDALONE_SRV		2	
+#define DSROLE_DOMAIN_MEMBER_SRV	3
+#define DSROLE_BDC			4
+#define DSROLE_PDC			5
+
+/* Settings for the domainFunctionality attribute in the rootDSE */
+
+#define DS_DOMAIN_FUNCTION_2000		0
+#define DS_DOMAIN_FUCNTION_2003_MIXED	1
+#define DS_DOMAIN_FUNCTION_2003		2
+
+
+
+typedef struct
+{
+	uint16		machine_role;
+	uint32		flags;	
+	uint32		netbios_ptr;
+	uint32		dnsname_ptr;
+	uint32		forestname_ptr;
+	
+	struct GUID	domain_guid;	
+	UNISTR2	netbios_domain;
+	UNISTR2	dns_domain;	/* our dns domain */
+	UNISTR2	forest_domain;	/* root domain of the forest to which we belong */
+} DSROLE_PRIMARY_DOMAIN_INFO_BASIC;
+
+typedef struct
+{
+	DSROLE_PRIMARY_DOMAIN_INFO_BASIC	*basic;
+} DS_DOMINFO_CTR;
+
+/* info levels for ds_getprimdominfo() */
+
+#define DsRolePrimaryDomainInfoBasic		1
+
+
+/* DS_Q_GETPRIMDOMINFO - DsGetPrimaryDomainInformation() request */
+typedef struct 
+{
+	uint16	level;
+} DS_Q_GETPRIMDOMINFO;
+
+/* DS_R_GETPRIMDOMINFO - DsGetPrimaryDomainInformation() response */
+typedef struct 
+{
+	uint32		ptr;
+		
+	uint16		level;
+	uint16		unknown0;	/* 0x455c -- maybe just alignment? */
+
+	DS_DOMINFO_CTR	info;
+	
+	NTSTATUS status;
+} DS_R_GETPRIMDOMINFO;
+
+typedef struct {
+	/* static portion of structure */
+	uint32		netbios_ptr;
+	uint32		dns_ptr;
+	uint32		flags;
+	uint32		parent_index;
+	uint32		trust_type;
+	uint32		trust_attributes;
+	uint32		sid_ptr;
+	struct GUID	guid;
+	
+	UNISTR2		netbios_domain;
+	UNISTR2		dns_domain;
+	DOM_SID2	sid;
+
+} DS_DOMAIN_TRUSTS;
+
+struct ds_domain_trust {
+	/* static portion of structure */
+	uint32		flags;
+	uint32		parent_index;
+	uint32		trust_type;
+	uint32		trust_attributes;
+	struct GUID	guid;
+	
+	DOM_SID	sid;
+	char *netbios_domain;
+	char *dns_domain;
+};
+
+typedef struct {
+
+	uint32			ptr;
+	uint32			max_count;
+	DS_DOMAIN_TRUSTS 	*trusts;
+	
+} DS_DOMAIN_TRUSTS_CTR;
+
+#define DS_DOMAIN_IN_FOREST           0x0001 	/* domains in the forest to which 
+						   we belong; even different domain trees */
+#define DS_DOMAIN_DIRECT_OUTBOUND     0x0002  	/* trusted domains */
+#define DS_DOMAIN_TREE_ROOT           0x0004  	/* root of our forest; also available in
+						   DsRoleGetPrimaryDomainInfo() */
+#define DS_DOMAIN_PRIMARY             0x0008  	/* our domain */
+#define DS_DOMAIN_NATIVE_MODE         0x0010  	/* native mode AD servers */
+#define DS_DOMAIN_DIRECT_INBOUND      0x0020 	/* trusting domains */
+
+/* DS_Q_ENUM_DOM_TRUSTS - DsEnumerateDomainTrusts() request */
+typedef struct 
+{
+	uint32		server_ptr;
+	UNISTR2		server;
+	uint32		flags;
+	
+} DS_Q_ENUM_DOM_TRUSTS;
+
+/* DS_R_ENUM_DOM_TRUSTS - DsEnumerateDomainTrusts() response */
+typedef struct 
+{
+	uint32			num_domains;
+	DS_DOMAIN_TRUSTS_CTR	domains;
+		
+	NTSTATUS status;
+
+} DS_R_ENUM_DOM_TRUSTS;
+
+
+#endif /* _RPC_DS_H */

Copied: branches/samba/upstream/source/include/rpc_echo.h (from rev 1928, branches/samba/upstream/source/include/rpc_echo.h)
===================================================================
--- branches/samba/upstream/source/include/rpc_echo.h	                        (rev 0)
+++ branches/samba/upstream/source/include/rpc_echo.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,75 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   Samba rpcecho definitions.
+
+   Copyright (C) Tim Potter 2003
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful, 
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#ifndef _RPC_ECHO_H
+#define _RPC_ECHO_H
+
+#define ECHO_ADD_ONE          0x00
+#define ECHO_DATA             0x01
+#define ECHO_SINK_DATA        0x02
+#define ECHO_SOURCE_DATA      0x03
+
+typedef struct echo_q_add_one
+{
+	uint32 request;
+} ECHO_Q_ADD_ONE;
+
+typedef struct echo_r_add_one
+{
+	uint32 response;
+} ECHO_R_ADD_ONE;
+
+typedef struct echo_q_echo_data
+{
+	uint32 size;
+	char *data;
+} ECHO_Q_ECHO_DATA;
+
+typedef struct echo_r_echo_data
+{
+	uint32 size;
+	char *data;
+} ECHO_R_ECHO_DATA;
+
+typedef struct echo_q_source_data
+{
+	uint32 size;
+} ECHO_Q_SOURCE_DATA;
+
+typedef struct echo_r_source_data
+{
+	uint32 size;
+	char *data;
+} ECHO_R_SOURCE_DATA;
+
+typedef struct echo_q_sink_data
+{
+	uint32 size;
+	char *data;
+} ECHO_Q_SINK_DATA;
+
+typedef struct echo_r_sink_data
+{
+	int dummy;		/* unused */
+} ECHO_R_SINK_DATA;
+
+#endif  

Modified: branches/samba/upstream/source/include/rpc_eventlog.h
===================================================================
--- branches/samba/upstream/source/include/rpc_eventlog.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/rpc_eventlog.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
  
 #ifndef _RPC_EVENTLOG_H		/* _RPC_EVENTLOG_H */
@@ -30,11 +31,21 @@
 #define EVENTLOG_READEVENTLOG		0x0a
 
 /* Eventlog read flags */
-/* defined in librpc/gen_ndr/eventlog.h */
 
+#define EVENTLOG_SEQUENTIAL_READ      0x0001
+#define EVENTLOG_SEEK_READ            0x0002
+#define EVENTLOG_FORWARDS_READ        0x0004
+#define EVENTLOG_BACKWARDS_READ       0x0008
+
 /* Event types */
-/* defined in librpc/gen_ndr/eventlog.h */
 
+#define EVENTLOG_SUCCESS              0x0000
+#define EVENTLOG_ERROR_TYPE           0x0001
+#define EVENTLOG_WARNING_TYPE         0x0002
+#define EVENTLOG_INFORMATION_TYPE     0x0004
+#define EVENTLOG_AUDIT_SUCCESS        0x0008
+#define EVENTLOG_AUDIT_FAILURE        0x0010
+
 /* Defines for TDB keys */
 #define  EVT_OLDEST_ENTRY  "INFO/oldest_entry"
 #define  EVT_NEXT_RECORD   "INFO/next_record"
@@ -60,6 +71,63 @@
 
 /***********************************/
 
+typedef struct {
+	uint16 unknown1;
+	uint16 unknown2;
+} EVENTLOG_OPEN_UNKNOWN0;
+
+typedef struct {
+	EVENTLOG_OPEN_UNKNOWN0 *unknown0;
+	UNISTR4 logname;
+	UNISTR4 servername;
+	uint32 unknown1;
+	uint32 unknown2;
+} EVENTLOG_Q_OPEN_EVENTLOG;
+
+typedef struct {
+	POLICY_HND handle;
+	NTSTATUS status;
+} EVENTLOG_R_OPEN_EVENTLOG;
+
+
+/***********************************/
+
+typedef struct {
+	POLICY_HND handle;
+} EVENTLOG_Q_CLOSE_EVENTLOG;
+
+typedef struct {
+	POLICY_HND handle;
+	NTSTATUS status;
+} EVENTLOG_R_CLOSE_EVENTLOG;
+
+
+/***********************************/
+
+typedef struct {
+	POLICY_HND handle;
+} EVENTLOG_Q_GET_NUM_RECORDS;
+
+typedef struct {
+	uint32 num_records;
+	NTSTATUS status;
+} EVENTLOG_R_GET_NUM_RECORDS;
+
+
+/***********************************/
+
+typedef struct {
+	POLICY_HND handle;
+} EVENTLOG_Q_GET_OLDEST_ENTRY;
+
+typedef struct {
+	uint32 oldest_entry;
+	NTSTATUS status;
+} EVENTLOG_R_GET_OLDEST_ENTRY;
+
+
+/***********************************/
+
 typedef struct 
 {
 	POLICY_HND handle;
@@ -89,15 +157,15 @@
 
 typedef struct {
 	uint32 source_name_len;
-	smb_ucs2_t *source_name;
+	wpstring source_name;
 	uint32 computer_name_len;
-	smb_ucs2_t *computer_name;
+	wpstring computer_name;
 	uint32 sid_padding;
-	smb_ucs2_t *sid;
+	wpstring sid;
 	uint32 strings_len;
-	smb_ucs2_t *strings;
+	wpstring strings;
 	uint32 user_data_len;
-	char *user_data;
+	pstring user_data;
 	uint32 data_padding;
 } Eventlog_data_record;
 
@@ -120,4 +188,16 @@
 	NTSTATUS status;
 } EVENTLOG_R_READ_EVENTLOG;
 
+
+/***********************************/
+
+typedef struct {
+	POLICY_HND handle;
+	UNISTR4 backupfile;
+} EVENTLOG_Q_CLEAR_EVENTLOG;
+
+typedef struct {
+	NTSTATUS status;
+} EVENTLOG_R_CLEAR_EVENTLOG;
+
 #endif /* _RPC_EVENTLOG_H */

Modified: branches/samba/upstream/source/include/rpc_lsa.h
===================================================================
--- branches/samba/upstream/source/include/rpc_lsa.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/rpc_lsa.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,43 +17,1234 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _RPC_LSA_H /* _RPC_LSA_H */
 #define _RPC_LSA_H 
 
-#define LSA_POLICY_ALL_ACCESS ( STANDARD_RIGHTS_REQUIRED_ACCESS  |\
-                            LSA_POLICY_VIEW_LOCAL_INFORMATION    |\
-                            LSA_POLICY_VIEW_AUDIT_INFORMATION    |\
-                            LSA_POLICY_GET_PRIVATE_INFORMATION   |\
-                            LSA_POLICY_TRUST_ADMIN               |\
-                            LSA_POLICY_CREATE_ACCOUNT            |\
-                            LSA_POLICY_CREATE_SECRET             |\
-                            LSA_POLICY_CREATE_PRIVILEGE          |\
-                            LSA_POLICY_SET_DEFAULT_QUOTA_LIMITS  |\
-                            LSA_POLICY_SET_AUDIT_REQUIREMENTS    |\
-                            LSA_POLICY_AUDIT_LOG_ADMIN           |\
-                            LSA_POLICY_SERVER_ADMIN              |\
-                            LSA_POLICY_LOOKUP_NAMES )
+/* Opcodes available on PIPE_LSARPC */
 
+#define LSA_CLOSE              0x00
+#define LSA_DELETE             0x01
+#define LSA_ENUM_PRIVS         0x02
+#define LSA_QUERYSECOBJ        0x03
+#define LSA_SETSECOBJ          0x04
+#define LSA_CHANGEPASSWORD     0x05
+#define LSA_OPENPOLICY         0x06
+#define LSA_QUERYINFOPOLICY    0x07
+#define LSA_SETINFOPOLICY      0x08
+#define LSA_CLEARAUDITLOG      0x09
+#define LSA_CREATEACCOUNT      0x0a
+#define LSA_ENUM_ACCOUNTS      0x0b
+#define LSA_CREATETRUSTDOM     0x0c	/* TODO: implement this one  -- jerry */
+#define LSA_ENUMTRUSTDOM       0x0d
+#define LSA_LOOKUPNAMES        0x0e
+#define LSA_LOOKUPSIDS         0x0f
+#define LSA_CREATESECRET       0x10	/* TODO: implement this one  -- jerry */
+#define LSA_OPENACCOUNT	       0x11
+#define LSA_ENUMPRIVSACCOUNT   0x12
+#define LSA_ADDPRIVS           0x13
+#define LSA_REMOVEPRIVS        0x14
+#define LSA_GETQUOTAS          0x15
+#define LSA_SETQUOTAS          0x16
+#define LSA_GETSYSTEMACCOUNT   0x17
+#define LSA_SETSYSTEMACCOUNT   0x18
+#define LSA_OPENTRUSTDOM       0x19
+#define LSA_QUERYTRUSTDOMINFO  0x1a
+#define LSA_SETINFOTRUSTDOM    0x1b
+#define LSA_OPENSECRET         0x1c	/* TODO: implement this one  -- jerry */
+#define LSA_SETSECRET          0x1d	/* TODO: implement this one  -- jerry */
+#define LSA_QUERYSECRET        0x1e
+#define LSA_LOOKUPPRIVVALUE    0x1f
+#define LSA_LOOKUPPRIVNAME     0x20
+#define LSA_PRIV_GET_DISPNAME  0x21
+#define LSA_DELETEOBJECT       0x22	/* TODO: implement this one  -- jerry */
+#define LSA_ENUMACCTWITHRIGHT  0x23	/* TODO: implement this one  -- jerry */
+#define LSA_ENUMACCTRIGHTS     0x24
+#define LSA_ADDACCTRIGHTS      0x25
+#define LSA_REMOVEACCTRIGHTS   0x26
+#define LSA_QUERYTRUSTDOMINFOBYSID  0x27
+#define LSA_SETTRUSTDOMINFO    0x28
+#define LSA_DELETETRUSTDOM     0x29
+#define LSA_STOREPRIVDATA      0x2a
+#define LSA_RETRPRIVDATA       0x2b
+#define LSA_OPENPOLICY2        0x2c
+#define LSA_UNK_GET_CONNUSER   0x2d /* LsaGetConnectedCredentials ? */
+#define LSA_QUERYINFO2         0x2e
+#define LSA_QUERYTRUSTDOMINFOBYNAME 0x30
+#define LSA_QUERYDOMINFOPOL    0x35
+#define LSA_OPENTRUSTDOMBYNAME 0x37
 
-#define LSA_POLICY_READ       ( STANDARD_RIGHTS_READ_ACCESS      |\
-                            LSA_POLICY_VIEW_AUDIT_INFORMATION    |\
-                            LSA_POLICY_GET_PRIVATE_INFORMATION)
+#define LSA_LOOKUPSIDS2        0x39
+#define LSA_LOOKUPNAMES2       0x3a
+#define LSA_LOOKUPNAMES3       0x44
+#define LSA_LOOKUPSIDS3        0x4c
+#define LSA_LOOKUPNAMES4       0x4d
 
-#define LSA_POLICY_WRITE      ( STD_RIGHT_READ_CONTROL_ACCESS     |\
-                            LSA_POLICY_TRUST_ADMIN               |\
-                            LSA_POLICY_CREATE_ACCOUNT            |\
-                            LSA_POLICY_CREATE_SECRET             |\
-                            LSA_POLICY_CREATE_PRIVILEGE          |\
-                            LSA_POLICY_SET_DEFAULT_QUOTA_LIMITS  |\
-                            LSA_POLICY_SET_AUDIT_REQUIREMENTS    |\
-                            LSA_POLICY_AUDIT_LOG_ADMIN           |\
-                            LSA_POLICY_SERVER_ADMIN)
+/* XXXX these are here to get a compile! */
+#define LSA_LOOKUPRIDS      0xFD
 
-#define LSA_POLICY_EXECUTE    ( STANDARD_RIGHTS_EXECUTE_ACCESS   |\
-                            LSA_POLICY_VIEW_LOCAL_INFORMATION    |\
-                            LSA_POLICY_LOOKUP_NAMES )
+#define LSA_AUDIT_NUM_CATEGORIES_NT4	7
+#define LSA_AUDIT_NUM_CATEGORIES_WIN2K	9
 
+#define LSA_AUDIT_NUM_CATEGORIES LSA_AUDIT_NUM_CATEGORIES_NT4
+
+#define LSA_AUDIT_POLICY_NONE		0x00
+#define LSA_AUDIT_POLICY_SUCCESS	0x01
+#define LSA_AUDIT_POLICY_FAILURE	0x02
+#define LSA_AUDIT_POLICY_ALL		(LSA_AUDIT_POLICY_SUCCESS|LSA_AUDIT_POLICY_FAILURE)
+#define LSA_AUDIT_POLICY_CLEAR		0x04
+
+enum lsa_audit_categories {
+	LSA_AUDIT_CATEGORY_SYSTEM = 0,
+	LSA_AUDIT_CATEGORY_LOGON = 1,
+	LSA_AUDIT_CATEGORY_FILE_AND_OBJECT_ACCESS,
+	LSA_AUDIT_CATEGORY_USE_OF_USER_RIGHTS,
+	LSA_AUDIT_CATEGORY_PROCCESS_TRACKING,
+	LSA_AUDIT_CATEGORY_SECURITY_POLICY_CHANGES,
+	LSA_AUDIT_CATEGORY_ACCOUNT_MANAGEMENT,
+	LSA_AUDIT_CATEGORY_DIRECTORY_SERVICE_ACCESS,	/* only in win2k/2k3 */
+	LSA_AUDIT_CATEGORY_ACCOUNT_LOGON		/* only in win2k/2k3 */
+};
+
+/* level 1 is auditing settings */
+typedef struct dom_query_1
+{
+	uint32 percent_full;
+	uint32 log_size;
+	NTTIME retention_time;
+	uint8 shutdown_in_progress;
+	NTTIME time_to_shutdown;
+	uint32 next_audit_record;
+	uint32 unknown;
+} DOM_QUERY_1;
+
+
+/* level 2 is auditing settings */
+typedef struct dom_query_2
+{
+	uint32 auditing_enabled;
+	uint32 count1; /* usualy 7, at least on nt4sp4 */
+	uint32 count2; /* the same */
+	uint32 ptr;
+	uint32 *auditsettings;
+} DOM_QUERY_2;
+
+/* DOM_QUERY - info class 3 and 5 LSA Query response */
+typedef struct dom_query_info_3
+{
+	uint16 uni_dom_max_len; /* domain name string length * 2 */
+	uint16 uni_dom_str_len; /* domain name string length * 2 */
+	uint32 buffer_dom_name; /* undocumented domain name string buffer pointer */
+	uint32 buffer_dom_sid; /* undocumented domain SID string buffer pointer */
+	UNISTR2 uni_domain_name; /* domain name (unicode string) */
+	DOM_SID2 dom_sid; /* domain SID */
+
+} DOM_QUERY_3;
+
+/* level 5 is same as level 3. */
+typedef DOM_QUERY_3 DOM_QUERY_5;
+
+/* level 6 is server role information */
+typedef struct dom_query_6
+{
+	uint16 server_role; /* 2=backup, 3=primary */
+} DOM_QUERY_6;
+
+/* level 10 is audit full set info */
+typedef struct dom_query_10
+{
+        uint8 shutdown_on_full;
+} DOM_QUERY_10;
+
+/* level 11 is audit full query info */
+typedef struct dom_query_11
+{
+	uint16 unknown;
+	uint8 shutdown_on_full;
+	uint8 log_is_full;
+} DOM_QUERY_11;
+
+/* level 12 is DNS domain info */
+typedef struct lsa_dns_dom_info
+{
+	UNIHDR  hdr_nb_dom_name; /* netbios domain name */
+	UNIHDR  hdr_dns_dom_name;
+	UNIHDR  hdr_forest_name;
+
+	struct GUID dom_guid; /* domain GUID */
+
+	UNISTR2 uni_nb_dom_name;
+	UNISTR2 uni_dns_dom_name;
+	UNISTR2 uni_forest_name;
+
+	uint32 ptr_dom_sid;
+	DOM_SID2   dom_sid; /* domain SID */
+} DOM_QUERY_12;
+
+typedef struct seq_qos_info
+{
+	uint32 len; /* 12 */
+	uint16 sec_imp_level; /* 0x02 - impersonation level */
+	uint8  sec_ctxt_mode; /* 0x01 - context tracking mode */
+	uint8  effective_only; /* 0x00 - effective only */
+
+} LSA_SEC_QOS;
+
+typedef struct obj_attr_info
+{
+	uint32 len;          /* 0x18 - length (in bytes) inc. the length field. */
+	uint32 ptr_root_dir; /* 0 - root directory (pointer) */
+	uint32 ptr_obj_name; /* 0 - object name (pointer) */
+	uint32 attributes;   /* 0 - attributes (undocumented) */
+	uint32 ptr_sec_desc; /* 0 - security descriptior (pointer) */
+	uint32 ptr_sec_qos;  /* security quality of service */
+	LSA_SEC_QOS *sec_qos;
+
+} LSA_OBJ_ATTR;
+
+/* LSA_Q_OPEN_POL - LSA Query Open Policy */
+typedef struct lsa_q_open_pol_info
+{
+	uint32 ptr;         /* undocumented buffer pointer */
+	uint16 system_name; /* 0x5c - system name */
+	LSA_OBJ_ATTR attr ; /* object attributes */
+
+	uint32 des_access; /* desired access attributes */
+
+} LSA_Q_OPEN_POL;
+
+/* LSA_R_OPEN_POL - response to LSA Open Policy */
+typedef struct lsa_r_open_pol_info
+{
+	POLICY_HND pol; /* policy handle */
+	NTSTATUS status; /* return code */
+
+} LSA_R_OPEN_POL;
+
+/* LSA_Q_OPEN_POL2 - LSA Query Open Policy */
+typedef struct lsa_q_open_pol2_info
+{
+	uint32       ptr;             /* undocumented buffer pointer */
+	UNISTR2      uni_server_name; /* server name, starting with two '\'s */
+	LSA_OBJ_ATTR attr           ; /* object attributes */
+
+	uint32 des_access; /* desired access attributes */
+
+} LSA_Q_OPEN_POL2;
+
+/* LSA_R_OPEN_POL2 - response to LSA Open Policy */
+typedef struct lsa_r_open_pol2_info
+{
+	POLICY_HND pol; /* policy handle */
+	NTSTATUS status; /* return code */
+
+} LSA_R_OPEN_POL2;
+
+
+#define POLICY_VIEW_LOCAL_INFORMATION    0x00000001
+#define POLICY_VIEW_AUDIT_INFORMATION    0x00000002
+#define POLICY_GET_PRIVATE_INFORMATION   0x00000004
+#define POLICY_TRUST_ADMIN               0x00000008
+#define POLICY_CREATE_ACCOUNT            0x00000010
+#define POLICY_CREATE_SECRET             0x00000020
+#define POLICY_CREATE_PRIVILEGE          0x00000040
+#define POLICY_SET_DEFAULT_QUOTA_LIMITS  0x00000080
+#define POLICY_SET_AUDIT_REQUIREMENTS    0x00000100
+#define POLICY_AUDIT_LOG_ADMIN           0x00000200
+#define POLICY_SERVER_ADMIN              0x00000400
+#define POLICY_LOOKUP_NAMES              0x00000800
+
+#define POLICY_ALL_ACCESS ( STANDARD_RIGHTS_REQUIRED_ACCESS  |\
+                            POLICY_VIEW_LOCAL_INFORMATION    |\
+                            POLICY_VIEW_AUDIT_INFORMATION    |\
+                            POLICY_GET_PRIVATE_INFORMATION   |\
+                            POLICY_TRUST_ADMIN               |\
+                            POLICY_CREATE_ACCOUNT            |\
+                            POLICY_CREATE_SECRET             |\
+                            POLICY_CREATE_PRIVILEGE          |\
+                            POLICY_SET_DEFAULT_QUOTA_LIMITS  |\
+                            POLICY_SET_AUDIT_REQUIREMENTS    |\
+                            POLICY_AUDIT_LOG_ADMIN           |\
+                            POLICY_SERVER_ADMIN              |\
+                            POLICY_LOOKUP_NAMES )
+
+
+#define POLICY_READ       ( STANDARD_RIGHTS_READ_ACCESS      |\
+                            POLICY_VIEW_AUDIT_INFORMATION    |\
+                            POLICY_GET_PRIVATE_INFORMATION)
+
+#define POLICY_WRITE      ( STD_RIGHT_READ_CONTROL_ACCESS     |\
+                            POLICY_TRUST_ADMIN               |\
+                            POLICY_CREATE_ACCOUNT            |\
+                            POLICY_CREATE_SECRET             |\
+                            POLICY_CREATE_PRIVILEGE          |\
+                            POLICY_SET_DEFAULT_QUOTA_LIMITS  |\
+                            POLICY_SET_AUDIT_REQUIREMENTS    |\
+                            POLICY_AUDIT_LOG_ADMIN           |\
+                            POLICY_SERVER_ADMIN)
+
+#define POLICY_EXECUTE    ( STANDARD_RIGHTS_EXECUTE_ACCESS   |\
+                            POLICY_VIEW_LOCAL_INFORMATION    |\
+                            POLICY_LOOKUP_NAMES )
+
+/* LSA_Q_QUERY_SEC_OBJ - LSA query security */
+typedef struct lsa_query_sec_obj_info
+{
+	POLICY_HND pol; /* policy handle */
+	uint32 sec_info;
+
+} LSA_Q_QUERY_SEC_OBJ;
+
+/* LSA_R_QUERY_SEC_OBJ - probably an open */
+typedef struct r_lsa_query_sec_obj_info
+{
+	uint32 ptr;
+	SEC_DESC_BUF *buf;
+
+	NTSTATUS status;         /* return status */
+
+} LSA_R_QUERY_SEC_OBJ;
+
+/* LSA_Q_QUERY_INFO - LSA query info policy */
+typedef struct lsa_query_info
+{
+	POLICY_HND pol; /* policy handle */
+	uint16 info_class; /* info class */
+
+} LSA_Q_QUERY_INFO;
+
+/* LSA_INFO_CTR */
+typedef struct lsa_info_ctr
+{
+	uint16 info_class;
+	union {
+		DOM_QUERY_1 id1;
+		DOM_QUERY_2 id2;
+		DOM_QUERY_3 id3;
+		DOM_QUERY_5 id5;
+		DOM_QUERY_6 id6;
+		DOM_QUERY_10 id10;
+		DOM_QUERY_11 id11;
+		DOM_QUERY_12 id12;
+	} info;
+
+} LSA_INFO_CTR;
+
+typedef LSA_INFO_CTR LSA_INFO_CTR2;
+
+/* LSA_Q_SET_INFO - LSA set info policy */
+typedef struct lsa_set_info
+{
+	POLICY_HND pol; /* policy handle */
+	uint16 info_class; /* info class */
+	LSA_INFO_CTR ctr;
+
+} LSA_Q_SET_INFO;
+
+/* LSA_R_SET_INFO - response to LSA set info policy */
+typedef struct lsa_r_set_info
+{
+	NTSTATUS status; /* return code */
+
+} LSA_R_SET_INFO;
+
+/* LSA_R_QUERY_INFO - response to LSA query info policy */
+typedef struct lsa_r_query_info
+{
+	uint32 dom_ptr; /* undocumented buffer pointer */
+	LSA_INFO_CTR ctr; 
+	NTSTATUS status; /* return code */
+
+} LSA_R_QUERY_INFO;
+
+typedef LSA_Q_QUERY_INFO LSA_Q_QUERY_INFO2;
+typedef LSA_R_QUERY_INFO LSA_R_QUERY_INFO2;
+
+/*******************************************************/
+
+typedef struct {
+	POLICY_HND pol; 
+	uint32 enum_context; 
+	uint32 preferred_len; 	/* preferred maximum length */
+} LSA_Q_ENUM_TRUST_DOM;
+
+typedef struct {
+	UNISTR4	name;
+	DOM_SID2 *sid;
+} DOMAIN_INFO;
+
+typedef struct {
+	uint32 count;
+	DOMAIN_INFO *domains;
+} DOMAIN_LIST;
+
+typedef struct {
+	uint32 enum_context;
+	uint32 count;
+	DOMAIN_LIST *domlist;
+	NTSTATUS status; 
+} LSA_R_ENUM_TRUST_DOM;
+
+/*******************************************************/
+
+/* LSA_Q_CLOSE */
+typedef struct lsa_q_close_info
+{
+	POLICY_HND pol; /* policy handle */
+
+} LSA_Q_CLOSE;
+
+/* LSA_R_CLOSE */
+typedef struct lsa_r_close_info
+{
+	POLICY_HND pol; /* policy handle.  should be all zeros. */
+
+	NTSTATUS status; /* return code */
+
+} LSA_R_CLOSE;
+
+
+#define MAX_REF_DOMAINS 32
+
+/* DOM_TRUST_HDR */
+typedef struct dom_trust_hdr
+{
+	UNIHDR hdr_dom_name; /* referenced domain unicode string headers */
+	uint32 ptr_dom_sid;
+
+} DOM_TRUST_HDR;
+	
+/* DOM_TRUST_INFO */
+typedef struct dom_trust_info
+{
+	UNISTR2  uni_dom_name; /* domain name unicode string */
+	DOM_SID2 ref_dom     ; /* referenced domain SID */
+
+} DOM_TRUST_INFO;
+	
+/* DOM_R_REF */
+typedef struct dom_ref_info
+{
+	uint32 num_ref_doms_1; /* num referenced domains */
+	uint32 ptr_ref_dom; /* pointer to referenced domains */
+	uint32 max_entries; /* 32 - max number of entries */
+	uint32 num_ref_doms_2; /* num referenced domains */
+
+	DOM_TRUST_HDR  hdr_ref_dom[MAX_REF_DOMAINS]; /* referenced domains */
+	DOM_TRUST_INFO ref_dom    [MAX_REF_DOMAINS]; /* referenced domains */
+
+} DOM_R_REF;
+
+/* the domain_idx points to a SID associated with the name */
+
+/* LSA_TRANS_NAME - translated name */
+typedef struct lsa_trans_name_info
+{
+	uint16 sid_name_use; /* value is 5 for a well-known group; 2 for a domain group; 1 for a user... */
+	UNIHDR hdr_name; 
+	uint32 domain_idx; /* index into DOM_R_REF array of SIDs */
+
+} LSA_TRANS_NAME;
+
+/* LSA_TRANS_NAME2 - translated name */
+typedef struct lsa_trans_name_info2
+{
+	uint16 sid_name_use; /* value is 5 for a well-known group; 2 for a domain group; 1 for a user... */
+	UNIHDR hdr_name; 
+	uint32 domain_idx; /* index into DOM_R_REF array of SIDs */
+	uint32 unknown;
+
+} LSA_TRANS_NAME2;
+
+/* This number is based on Win2k and later maximum response allowed */
+#define MAX_LOOKUP_SIDS 20480	/* 0x5000 */
+
+/* LSA_TRANS_NAME_ENUM - LSA Translated Name Enumeration container */
+typedef struct lsa_trans_name_enum_info
+{
+	uint32 num_entries;
+	uint32 ptr_trans_names;
+	uint32 num_entries2;
+	
+	LSA_TRANS_NAME *name; /* translated names  */
+	UNISTR2 *uni_name;
+
+} LSA_TRANS_NAME_ENUM;
+
+/* LSA_TRANS_NAME_ENUM2 - LSA Translated Name Enumeration container 2 */
+typedef struct lsa_trans_name_enum_info2
+{
+	uint32 num_entries;
+	uint32 ptr_trans_names;
+	uint32 num_entries2;
+	
+	LSA_TRANS_NAME2 *name; /* translated names  */
+	UNISTR2 *uni_name;
+
+} LSA_TRANS_NAME_ENUM2;
+
+/* LSA_SID_ENUM - LSA SID enumeration container */
+typedef struct lsa_sid_enum_info
+{
+	uint32 num_entries;
+	uint32 ptr_sid_enum;
+	uint32 num_entries2;
+	
+	uint32 *ptr_sid; /* domain SID pointers to be looked up. */
+	DOM_SID2 *sid; /* domain SIDs to be looked up. */
+
+} LSA_SID_ENUM;
+
+/* LSA_Q_LOOKUP_SIDS - LSA Lookup SIDs */
+typedef struct lsa_q_lookup_sids
+{
+	POLICY_HND          pol; /* policy handle */
+	LSA_SID_ENUM        sids;
+	LSA_TRANS_NAME_ENUM names;
+	uint16              level;
+	uint32              mapped_count;
+
+} LSA_Q_LOOKUP_SIDS;
+
+/* LSA_R_LOOKUP_SIDS - response to LSA Lookup SIDs */
+typedef struct lsa_r_lookup_sids
+{
+	uint32              ptr_dom_ref;
+	DOM_R_REF           *dom_ref; /* domain reference info */
+
+	LSA_TRANS_NAME_ENUM names;
+	uint32              mapped_count;
+
+	NTSTATUS            status; /* return code */
+
+} LSA_R_LOOKUP_SIDS;
+
+/* LSA_Q_LOOKUP_SIDS2 - LSA Lookup SIDs 2*/
+typedef struct lsa_q_lookup_sids2
+{
+	POLICY_HND          pol; /* policy handle */
+	LSA_SID_ENUM        sids;
+	LSA_TRANS_NAME_ENUM2 names;
+	uint16              level;
+	uint32              mapped_count;
+	uint32              unknown1;
+	uint32              unknown2;
+
+} LSA_Q_LOOKUP_SIDS2;
+
+/* LSA_R_LOOKUP_SIDS2 - response to LSA Lookup SIDs 2*/
+typedef struct lsa_r_lookup_sids2
+{
+	uint32              ptr_dom_ref;
+	DOM_R_REF           *dom_ref; /* domain reference info */
+
+	LSA_TRANS_NAME_ENUM2 names;
+	uint32              mapped_count;
+
+	NTSTATUS            status; /* return code */
+
+} LSA_R_LOOKUP_SIDS2;
+
+/* LSA_Q_LOOKUP_SIDS3 - LSA Lookup SIDs 3 */
+typedef struct lsa_q_lookup_sids3
+{
+	LSA_SID_ENUM        sids;
+	LSA_TRANS_NAME_ENUM2 names;
+	uint16              level;
+	uint32              mapped_count;
+	uint32              unknown1;
+	uint32              unknown2;
+
+} LSA_Q_LOOKUP_SIDS3;
+
+/* LSA_R_LOOKUP_SIDS3 - response to LSA Lookup SIDs 3 */
+typedef struct lsa_r_lookup_sids3
+{
+	uint32              ptr_dom_ref;
+	DOM_R_REF           *dom_ref; /* domain reference info */
+
+	LSA_TRANS_NAME_ENUM2 names;
+	uint32              mapped_count;
+
+	NTSTATUS            status; /* return code */
+
+} LSA_R_LOOKUP_SIDS3;
+
+/* LSA_Q_LOOKUP_NAMES - LSA Lookup NAMEs */
+typedef struct lsa_q_lookup_names
+{
+	POLICY_HND pol; /* policy handle */
+	uint32 num_entries;
+	uint32 num_entries2;
+	UNIHDR  *hdr_name; /* name buffer pointers */
+	UNISTR2 *uni_name; /* names to be looked up */
+
+	uint32 num_trans_entries;
+	uint32 ptr_trans_sids; /* undocumented domain SID buffer pointer */
+	uint16 lookup_level;
+	uint32 mapped_count;
+
+} LSA_Q_LOOKUP_NAMES;
+
+/* LSA_R_LOOKUP_NAMES - response to LSA Lookup NAMEs by name */
+typedef struct lsa_r_lookup_names
+{
+	uint32 ptr_dom_ref;
+	DOM_R_REF *dom_ref; /* domain reference info */
+
+	uint32 num_entries;
+	uint32 ptr_entries;
+	uint32 num_entries2;
+	DOM_RID *dom_rid; /* domain RIDs being looked up */
+
+	uint32 mapped_count;
+
+	NTSTATUS status; /* return code */
+} LSA_R_LOOKUP_NAMES;
+
+/* LSA_Q_LOOKUP_NAMES2 - LSA Lookup NAMEs 2*/
+typedef struct lsa_q_lookup_names2
+{
+	POLICY_HND pol; /* policy handle */
+	uint32 num_entries;
+	uint32 num_entries2;
+	UNIHDR  *hdr_name; /* name buffer pointers */
+	UNISTR2 *uni_name; /* names to be looked up */
+
+	uint32 num_trans_entries;
+	uint32 ptr_trans_sids; /* undocumented domain SID buffer pointer */
+	uint16 lookup_level;
+	uint32 mapped_count;
+	uint32 unknown1;
+	uint32 unknown2;
+
+} LSA_Q_LOOKUP_NAMES2;
+
+/* LSA_R_LOOKUP_NAMES2 - response to LSA Lookup NAMEs by name 2 */
+typedef struct lsa_r_lookup_names2
+{
+	uint32 ptr_dom_ref;
+	DOM_R_REF *dom_ref; /* domain reference info */
+
+	uint32 num_entries;
+	uint32 ptr_entries;
+	uint32 num_entries2;
+	DOM_RID2 *dom_rid; /* domain RIDs being looked up */
+
+	uint32 mapped_count;
+
+	NTSTATUS status; /* return code */
+} LSA_R_LOOKUP_NAMES2;
+
+/* LSA_Q_LOOKUP_NAMES3 - LSA Lookup NAMEs 3 */
+typedef struct lsa_q_lookup_names3
+{
+	POLICY_HND pol; /* policy handle */
+	uint32 num_entries;
+	uint32 num_entries2;
+	UNIHDR  *hdr_name; /* name buffer pointers */
+	UNISTR2 *uni_name; /* names to be looked up */
+
+	uint32 num_trans_entries;
+	uint32 ptr_trans_sids; /* undocumented domain SID buffer pointer */
+	uint16 lookup_level;
+	uint32 mapped_count;
+	uint32 unknown1;
+	uint32 unknown2;
+
+} LSA_Q_LOOKUP_NAMES3;
+
+/* Sid type used in lookupnames3 and lookupnames4. */
+typedef struct lsa_translatedsid3 {
+	uint8 sid_type;
+	DOM_SID2 *sid2;
+	uint32 sid_idx;
+	uint32 unknown;
+} LSA_TRANSLATED_SID3;
+
+/* LSA_R_LOOKUP_NAMES3 - response to LSA Lookup NAMEs by name 3 */
+typedef struct lsa_r_lookup_names3
+{
+	uint32 ptr_dom_ref;
+	DOM_R_REF *dom_ref; /* domain reference info */
+
+	uint32 num_entries;
+	uint32 ptr_entries;
+	uint32 num_entries2;
+	LSA_TRANSLATED_SID3 *trans_sids;
+
+	uint32 mapped_count;
+
+	NTSTATUS status; /* return code */
+} LSA_R_LOOKUP_NAMES3;
+
+/* LSA_Q_LOOKUP_NAMES4 - LSA Lookup NAMEs 4 */
+typedef struct lsa_q_lookup_names4
+{
+	uint32 num_entries;
+	uint32 num_entries2;
+	UNIHDR  *hdr_name; /* name buffer pointers */
+	UNISTR2 *uni_name; /* names to be looked up */
+
+	uint32 num_trans_entries;
+	uint32 ptr_trans_sids; /* undocumented domain SID buffer pointer */
+	uint16 lookup_level;
+	uint32 mapped_count;
+	uint32 unknown1;
+	uint32 unknown2;
+
+} LSA_Q_LOOKUP_NAMES4;
+
+/* LSA_R_LOOKUP_NAMES3 - response to LSA Lookup NAMEs by name 4 */
+typedef struct lsa_r_lookup_names4
+{
+	uint32 ptr_dom_ref;
+	DOM_R_REF *dom_ref; /* domain reference info */
+
+	uint32 num_entries;
+	uint32 ptr_entries;
+	uint32 num_entries2;
+	LSA_TRANSLATED_SID3 *trans_sids;
+
+	uint32 mapped_count;
+
+	NTSTATUS status; /* return code */
+} LSA_R_LOOKUP_NAMES4;
+
+typedef struct lsa_enum_priv_entry
+{
+	UNIHDR hdr_name;
+	uint32 luid_low;
+	uint32 luid_high;
+	UNISTR2 name;
+	
+} LSA_PRIV_ENTRY;
+
+/* LSA_Q_ENUM_PRIVS - LSA enum privileges */
+typedef struct lsa_q_enum_privs
+{
+	POLICY_HND pol; /* policy handle */
+	uint32 enum_context;
+	uint32 pref_max_length;
+} LSA_Q_ENUM_PRIVS;
+
+typedef struct lsa_r_enum_privs
+{
+	uint32 enum_context;
+	uint32 count;
+	uint32 ptr;
+	uint32 count1;
+
+	LSA_PRIV_ENTRY *privs;
+
+	NTSTATUS status;
+} LSA_R_ENUM_PRIVS;
+
+/* LSA_Q_ENUM_ACCT_RIGHTS - LSA enum account rights */
+typedef struct
+{
+	POLICY_HND pol; /* policy handle */
+	DOM_SID2 sid;
+} LSA_Q_ENUM_ACCT_RIGHTS;
+
+/* LSA_R_ENUM_ACCT_RIGHTS - LSA enum account rights */
+typedef struct
+{
+	uint32 count;
+	UNISTR4_ARRAY *rights;
+	NTSTATUS status;
+} LSA_R_ENUM_ACCT_RIGHTS;
+
+
+/* LSA_Q_ADD_ACCT_RIGHTS - LSA add account rights */
+typedef struct
+{
+	POLICY_HND pol; /* policy handle */
+	DOM_SID2 sid;
+	uint32 count;
+	UNISTR4_ARRAY *rights;
+} LSA_Q_ADD_ACCT_RIGHTS;
+
+/* LSA_R_ADD_ACCT_RIGHTS - LSA add account rights */
+typedef struct
+{
+	NTSTATUS status;
+} LSA_R_ADD_ACCT_RIGHTS;
+
+
+/* LSA_Q_REMOVE_ACCT_RIGHTS - LSA remove account rights */
+typedef struct
+{
+	POLICY_HND pol; /* policy handle */
+	DOM_SID2 sid;
+	uint32 removeall;
+	uint32 count;
+	UNISTR4_ARRAY *rights;
+} LSA_Q_REMOVE_ACCT_RIGHTS;
+
+/* LSA_R_REMOVE_ACCT_RIGHTS - LSA remove account rights */
+typedef struct
+{
+	NTSTATUS status;
+} LSA_R_REMOVE_ACCT_RIGHTS;
+
+
+/* LSA_Q_PRIV_GET_DISPNAME - LSA get privilege display name */
+typedef struct lsa_q_priv_get_dispname
+{
+	POLICY_HND pol; /* policy handle */
+	UNIHDR hdr_name;
+	UNISTR2 name;
+	uint16 lang_id;
+	uint16 lang_id_sys;
+} LSA_Q_PRIV_GET_DISPNAME;
+
+typedef struct lsa_r_priv_get_dispname
+{
+	uint32 ptr_info;
+	UNIHDR hdr_desc;
+	UNISTR2 desc;
+	/* Don't align ! */
+	uint16 lang_id;
+	/* align */
+	NTSTATUS status;
+} LSA_R_PRIV_GET_DISPNAME;
+
+/* LSA_Q_ENUM_ACCOUNTS */
+typedef struct lsa_q_enum_accounts
+{
+	POLICY_HND pol; /* policy handle */
+	uint32 enum_context;
+	uint32 pref_max_length;
+} LSA_Q_ENUM_ACCOUNTS;
+
+/* LSA_R_ENUM_ACCOUNTS */
+typedef struct lsa_r_enum_accounts
+{
+	uint32 enum_context;
+	LSA_SID_ENUM sids;
+	NTSTATUS status;
+} LSA_R_ENUM_ACCOUNTS;
+
+/* LSA_Q_UNK_GET_CONNUSER - gets username\domain of connected user
+                  called when "Take Ownership" is clicked -SK */
+typedef struct lsa_q_unk_get_connuser
+{
+  uint32 ptr_srvname;
+  UNISTR2 uni2_srvname;
+  uint32 unk1; /* 3 unknown uint32's are seen right after uni2_srvname */
+  uint32 unk2; /* unk2 appears to be a ptr, unk1 = unk3 = 0 usually */
+  uint32 unk3; 
+} LSA_Q_UNK_GET_CONNUSER;
+
+/* LSA_R_UNK_GET_CONNUSER */
+typedef struct lsa_r_unk_get_connuser
+{
+  uint32 ptr_user_name;
+  UNIHDR hdr_user_name;
+  UNISTR2 uni2_user_name;
+  
+  uint32 unk1;
+  
+  uint32 ptr_dom_name;
+  UNIHDR hdr_dom_name;
+  UNISTR2 uni2_dom_name;
+
+  NTSTATUS status;
+} LSA_R_UNK_GET_CONNUSER;
+
+
+typedef struct lsa_q_createaccount
+{
+	POLICY_HND pol; /* policy handle */
+	DOM_SID2 sid;
+	uint32 access; /* access */
+} LSA_Q_CREATEACCOUNT;
+
+typedef struct lsa_r_createaccount
+{
+	POLICY_HND pol; /* policy handle */
+	NTSTATUS status;
+} LSA_R_CREATEACCOUNT;
+
+
+typedef struct lsa_q_openaccount
+{
+	POLICY_HND pol; /* policy handle */
+	DOM_SID2 sid;
+	uint32 access; /* desired access */
+} LSA_Q_OPENACCOUNT;
+
+typedef struct lsa_r_openaccount
+{
+	POLICY_HND pol; /* policy handle */
+	NTSTATUS status;
+} LSA_R_OPENACCOUNT;
+
+typedef struct lsa_q_enumprivsaccount
+{
+	POLICY_HND pol; /* policy handle */
+} LSA_Q_ENUMPRIVSACCOUNT;
+
+typedef struct lsa_r_enumprivsaccount
+{
+	uint32 ptr;
+	uint32 count;
+	PRIVILEGE_SET set;
+	NTSTATUS status;
+} LSA_R_ENUMPRIVSACCOUNT;
+
+typedef struct lsa_q_getsystemaccount
+{
+	POLICY_HND pol; /* policy handle */
+} LSA_Q_GETSYSTEMACCOUNT;
+
+typedef struct lsa_r_getsystemaccount
+{
+	uint32 access;
+	NTSTATUS status;
+} LSA_R_GETSYSTEMACCOUNT;
+
+
+typedef struct lsa_q_setsystemaccount
+{
+	POLICY_HND pol; /* policy handle */
+	uint32 access;
+} LSA_Q_SETSYSTEMACCOUNT;
+
+typedef struct lsa_r_setsystemaccount
+{
+	NTSTATUS status;
+} LSA_R_SETSYSTEMACCOUNT;
+
+typedef struct {
+	UNIHDR hdr;
+	UNISTR2 unistring;
+} LSA_STRING;
+
+typedef struct {
+	POLICY_HND pol; /* policy handle */
+	LSA_STRING privname;
+} LSA_Q_LOOKUP_PRIV_VALUE;
+
+typedef struct {
+	LUID luid;
+	NTSTATUS status;
+} LSA_R_LOOKUP_PRIV_VALUE;
+
+typedef struct lsa_q_addprivs
+{
+	POLICY_HND pol; /* policy handle */
+	uint32 count;
+	PRIVILEGE_SET set;
+} LSA_Q_ADDPRIVS;
+
+typedef struct lsa_r_addprivs
+{
+	NTSTATUS status;
+} LSA_R_ADDPRIVS;
+
+
+typedef struct lsa_q_removeprivs
+{
+	POLICY_HND pol; /* policy handle */
+	uint32 allrights;
+	uint32 ptr;
+	uint32 count;
+	PRIVILEGE_SET set;
+} LSA_Q_REMOVEPRIVS;
+
+typedef struct lsa_r_removeprivs
+{
+	NTSTATUS status;
+} LSA_R_REMOVEPRIVS;
+
+/*******************************************************/
+#if 0 /* jerry, I think this not correct - gd */
+typedef struct {
+	POLICY_HND	handle;
+	uint32		count;	/* ??? this is what ethereal calls it */
+	DOM_SID		sid;
+} LSA_Q_OPEN_TRUSTED_DOMAIN;
+#endif
+
+/* LSA_Q_OPEN_TRUSTED_DOMAIN - LSA Query Open Trusted Domain */
+typedef struct lsa_q_open_trusted_domain
+{
+	POLICY_HND 	pol; 	/* policy handle */
+	DOM_SID2 	sid;	/* domain sid */
+	uint32 	access_mask;	/* access mask */
+	
+} LSA_Q_OPEN_TRUSTED_DOMAIN;
+
+/* LSA_R_OPEN_TRUSTED_DOMAIN - response to LSA Query Open Trusted Domain */
+typedef struct {
+	POLICY_HND	handle;	/* trustdom policy handle */
+	NTSTATUS	status; /* return code */
+} LSA_R_OPEN_TRUSTED_DOMAIN;
+
+
+/*******************************************************/
+
+/* LSA_Q_OPEN_TRUSTED_DOMAIN_BY_NAME - LSA Query Open Trusted Domain by Name*/
+typedef struct lsa_q_open_trusted_domain_by_name
+{
+	POLICY_HND 	pol; 	/* policy handle */
+	LSA_STRING 	name;	/* domain name */
+	uint32 	access_mask;	/* access mask */
+	
+} LSA_Q_OPEN_TRUSTED_DOMAIN_BY_NAME;
+
+/* LSA_R_OPEN_TRUSTED_DOMAIN_BY_NAME - response to LSA Query Open Trusted Domain by Name */
+typedef struct {
+	POLICY_HND	handle;	/* trustdom policy handle */
+	NTSTATUS	status; /* return code */
+} LSA_R_OPEN_TRUSTED_DOMAIN_BY_NAME;
+
+
+/*******************************************************/
+
+
+typedef struct {
+	POLICY_HND	handle;	
+	UNISTR4		secretname;
+	uint32		access;
+} LSA_Q_OPEN_SECRET;
+
+typedef struct {
+	POLICY_HND	handle;
+	NTSTATUS	status;
+} LSA_R_OPEN_SECRET;
+
+
+/*******************************************************/
+
+typedef struct {
+	POLICY_HND	handle;
+} LSA_Q_DELETE_OBJECT;
+
+typedef struct {
+	NTSTATUS 	status;
+} LSA_R_DELETE_OBJECT;
+
+
+/*******************************************************/
+
+typedef struct {
+	POLICY_HND      handle;
+	UNISTR4         secretname;
+	uint32          access;
+} LSA_Q_CREATE_SECRET;
+
+typedef struct {
+	POLICY_HND      handle;
+	NTSTATUS        status;
+} LSA_R_CREATE_SECRET;
+
+
+/*******************************************************/
+
+typedef struct {
+	POLICY_HND	handle;	
+	UNISTR4		secretname;
+	uint32		access;
+} LSA_Q_CREATE_TRUSTED_DOMAIN;
+
+typedef struct {
+	POLICY_HND	handle;
+	NTSTATUS	status;
+} LSA_R_CREATE_TRUSTED_DOMAIN;
+
+
+/*******************************************************/
+
+typedef struct {
+	uint32	size;	/* size is written on the wire twice so I 
+			   can only assume that one is supposed to 
+			   be a max length and one is a size */
+	UNISTR2	*data;	/* not really a UNICODE string but the parsing 
+			   is the same */
+} LSA_DATA_BLOB;
+
+typedef struct {
+	POLICY_HND	handle;	
+	LSA_DATA_BLOB   *old_value;
+	LSA_DATA_BLOB	*new_value;
+} LSA_Q_SET_SECRET;
+
+typedef struct {
+	NTSTATUS	status;
+} LSA_R_SET_SECRET;
+
+/* LSA_Q_QUERY_TRUSTED_DOMAIN_INFO - LSA query trusted domain info */
+typedef struct lsa_query_trusted_domain_info
+{
+	POLICY_HND	pol; 		/* policy handle */
+	uint16		info_class; 	/* info class */
+
+} LSA_Q_QUERY_TRUSTED_DOMAIN_INFO;
+
+/* LSA_Q_QUERY_TRUSTED_DOMAIN_INFO_BY_SID - LSA query trusted domain info */
+typedef struct lsa_query_trusted_domain_info_by_sid
+{
+	POLICY_HND 	pol; 		/* policy handle */
+	DOM_SID2 	dom_sid;	/* domain sid */
+	uint16		info_class; 	/* info class */
+	
+} LSA_Q_QUERY_TRUSTED_DOMAIN_INFO_BY_SID;
+
+/* LSA_Q_QUERY_TRUSTED_DOMAIN_INFO_BY_NAME - LSA query trusted domain info */
+typedef struct lsa_query_trusted_domain_info_by_name
+{
+	POLICY_HND 	pol; 		/* policy handle */
+	LSA_STRING 	domain_name;	/* domain name */
+	uint16 		info_class; 	/* info class */
+	
+} LSA_Q_QUERY_TRUSTED_DOMAIN_INFO_BY_NAME;
+
+typedef struct trusted_domain_info_name {
+	LSA_STRING 	netbios_name; 
+} TRUSTED_DOMAIN_INFO_NAME;
+
+typedef struct trusted_domain_info_posix_offset {
+	uint32 		posix_offset;
+} TRUSTED_DOMAIN_INFO_POSIX_OFFSET;
+
+typedef struct lsa_data_buf {
+	uint32 size;
+	uint32 offset;
+	uint32 length;
+	uint8 *data;
+} LSA_DATA_BUF;
+
+typedef struct lsa_data_buf_hdr {
+	uint32 length;
+	uint32 size;
+	uint32 data_ptr;
+} LSA_DATA_BUF_HDR;
+
+
+typedef struct lsa_data_buf2 {
+	uint32 size;
+	uint8 *data;
+} LSA_DATA_BUF2;
+
+typedef struct trusted_domain_info_password {
+	uint32 ptr_password;
+	uint32 ptr_old_password;
+	LSA_DATA_BUF_HDR password_hdr;
+	LSA_DATA_BUF_HDR old_password_hdr;
+	LSA_DATA_BUF password;
+	LSA_DATA_BUF old_password;
+} TRUSTED_DOMAIN_INFO_PASSWORD;
+
+typedef struct trusted_domain_info_basic {
+	LSA_STRING 	netbios_name;
+	DOM_SID2 	sid;
+} TRUSTED_DOMAIN_INFO_BASIC;
+
+typedef struct trusted_domain_info_ex {
+	LSA_STRING 	domain_name;
+	LSA_STRING 	netbios_name;
+	DOM_SID2 	sid;
+	uint32 		trust_direction;
+	uint32 		trust_type;
+	uint32 		trust_attributes;
+} TRUSTED_DOMAIN_INFO_EX;
+
+typedef struct trust_domain_info_buffer {
+	NTTIME 		last_update_time;
+	uint32 		secret_type;
+	LSA_DATA_BUF2 	data;
+} LSA_TRUSTED_DOMAIN_INFO_BUFFER;
+
+typedef struct trusted_domain_info_auth_info {
+	uint32 incoming_count;
+	LSA_TRUSTED_DOMAIN_INFO_BUFFER incoming_current_auth_info;
+	LSA_TRUSTED_DOMAIN_INFO_BUFFER incoming_previous_auth_info;
+	uint32 outgoing_count;
+	LSA_TRUSTED_DOMAIN_INFO_BUFFER outgoing_current_auth_info;
+	LSA_TRUSTED_DOMAIN_INFO_BUFFER outgoing_previous_auth_info;
+} TRUSTED_DOMAIN_INFO_AUTH_INFO;
+
+typedef struct trusted_domain_info_full_info {
+	TRUSTED_DOMAIN_INFO_EX 		info_ex;
+	TRUSTED_DOMAIN_INFO_POSIX_OFFSET posix_offset;
+	TRUSTED_DOMAIN_INFO_AUTH_INFO 	auth_info;
+} TRUSTED_DOMAIN_INFO_FULL_INFO;
+
+typedef struct trusted_domain_info_11 {
+	TRUSTED_DOMAIN_INFO_EX 		info_ex;
+	LSA_DATA_BUF2 			data1;
+} TRUSTED_DOMAIN_INFO_11;
+
+typedef struct trusted_domain_info_all {
+	TRUSTED_DOMAIN_INFO_EX 		info_ex;
+	LSA_DATA_BUF2 			data1;
+	TRUSTED_DOMAIN_INFO_POSIX_OFFSET posix_offset;
+	TRUSTED_DOMAIN_INFO_AUTH_INFO 	auth_info;
+} TRUSTED_DOMAIN_INFO_ALL;
+
+/* LSA_TRUSTED_DOMAIN_INFO */
+typedef union lsa_trusted_domain_info
+{
+	uint16 					info_class;
+	TRUSTED_DOMAIN_INFO_NAME		name;
+	/* deprecated - gd
+	TRUSTED_DOMAIN_INFO_CONTROLLERS_INFO	controllers; */
+	TRUSTED_DOMAIN_INFO_POSIX_OFFSET	posix_offset;
+	TRUSTED_DOMAIN_INFO_PASSWORD		password;
+	TRUSTED_DOMAIN_INFO_BASIC		basic;
+	TRUSTED_DOMAIN_INFO_EX			info_ex;
+	TRUSTED_DOMAIN_INFO_AUTH_INFO		auth_info;
+	TRUSTED_DOMAIN_INFO_FULL_INFO		full_info;
+	TRUSTED_DOMAIN_INFO_11			info11;
+	TRUSTED_DOMAIN_INFO_ALL			info_all;
+
+} LSA_TRUSTED_DOMAIN_INFO;
+
+/* LSA_R_QUERY_TRUSTED_DOMAIN_INFO - LSA query trusted domain info */
+typedef struct r_lsa_query_trusted_domain_info
+{
+	LSA_TRUSTED_DOMAIN_INFO *info;
+	NTSTATUS status;
+} LSA_R_QUERY_TRUSTED_DOMAIN_INFO;
+
+typedef struct dom_info_kerberos {
+	uint32 enforce_restrictions;
+	NTTIME service_tkt_lifetime;
+	NTTIME user_tkt_lifetime;
+	NTTIME user_tkt_renewaltime;
+	NTTIME clock_skew;
+	NTTIME unknown6;
+} LSA_DOM_INFO_POLICY_KERBEROS;
+
+typedef struct dom_info_efs {
+	uint32 blob_len;
+	UNISTR2 efs_blob;
+} LSA_DOM_INFO_POLICY_EFS;
+
+typedef struct lsa_dom_info_union {
+	uint16 info_class;
+	LSA_DOM_INFO_POLICY_EFS efs_policy;
+	LSA_DOM_INFO_POLICY_KERBEROS krb_policy;
+} LSA_DOM_INFO_UNION;
+
+/* LSA_Q_QUERY_DOM_INFO_POLICY - LSA query info */
+typedef struct lsa_q_query_dom_info_policy
+{
+	POLICY_HND pol;    /* policy handle */
+	uint16 info_class; /* info class */
+} LSA_Q_QUERY_DOM_INFO_POLICY;
+
+typedef struct lsa_r_query_dom_info_policy
+{
+	LSA_DOM_INFO_UNION *info;
+	NTSTATUS status;
+} LSA_R_QUERY_DOM_INFO_POLICY;
+
+
 #endif /* _RPC_LSA_H */

Modified: branches/samba/upstream/source/include/rpc_misc.h
===================================================================
--- branches/samba/upstream/source/include/rpc_misc.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/rpc_misc.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,14 +17,15 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _RPC_MISC_H /* _RPC_MISC_H */
 #define _RPC_MISC_H 
 
 #define SMB_RPC_INTERFACE_VERSION 1
-#define PRS_POINTER_CAST bool (*)(const char*, prs_struct*, int, void*)
+#define PRS_POINTER_CAST BOOL (*)(const char*, prs_struct*, int, void*)
 
 enum unistr2_term_codes { UNI_FLAGS_NONE = 0, UNI_STR_TERMINATE = 1, UNI_MAXLEN_TERMINATE = 2, UNI_BROKEN_NON_NULL = 3, UNI_STR_DBLTERMINATE = 4 };
 

Copied: branches/samba/upstream/source/include/rpc_netlogon.h (from rev 1928, branches/samba/upstream/source/include/rpc_netlogon.h)
===================================================================
--- branches/samba/upstream/source/include/rpc_netlogon.h	                        (rev 0)
+++ branches/samba/upstream/source/include/rpc_netlogon.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,1177 @@
+/* 
+   Unix SMB/CIFS implementation.
+   SMB parameters and setup
+   Copyright (C) Andrew Tridgell 1992-1997
+   Copyright (C) Luke Kenneth Casson Leighton 1996-1997
+   Copyright (C) Paul Ashton 1997
+   Copyright (C) Jean François Micouleau 2002
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#ifndef _RPC_NETLOGON_H /* _RPC_NETLOGON_H */
+#define _RPC_NETLOGON_H 
+
+
+/* NETLOGON pipe */
+#define NET_SAMLOGON		0x02
+#define NET_SAMLOGOFF		0x03
+#define NET_REQCHAL		0x04
+#define NET_AUTH		0x05
+#define NET_SRVPWSET		0x06
+#define NET_SAM_DELTAS		0x07
+#define NET_LOGON_CTRL		0x0c
+#define NET_GETANYDCNAME	0x0d
+#define NET_AUTH2		0x0f
+#define NET_LOGON_CTRL2		0x0e
+#define NET_SAM_SYNC		0x10
+#define NET_TRUST_DOM_LIST	0x13
+#define NET_DSR_GETDCNAME	0x14
+#define NET_AUTH3		0x1a
+#define NET_DSR_GETDCNAMEEX	0x1b
+#define NET_DSR_GETSITENAME	0x1c
+#define NET_DSR_GETDCNAMEEX2	0x22
+#define NET_SAMLOGON_EX		0x27
+
+/* Secure Channel types.  used in NetrServerAuthenticate negotiation */
+#define SEC_CHAN_WKSTA   2
+#define SEC_CHAN_DOMAIN  4
+#define SEC_CHAN_BDC     6
+
+/* Returned delta types */
+#define SAM_DELTA_DOMAIN_INFO    0x01
+#define SAM_DELTA_GROUP_INFO     0x02
+#define SAM_DELTA_RENAME_GROUP   0x04
+#define SAM_DELTA_ACCOUNT_INFO   0x05
+#define SAM_DELTA_RENAME_USER    0x07
+#define SAM_DELTA_GROUP_MEM      0x08
+#define SAM_DELTA_ALIAS_INFO     0x09
+#define SAM_DELTA_RENAME_ALIAS   0x0b
+#define SAM_DELTA_ALIAS_MEM      0x0c
+#define SAM_DELTA_POLICY_INFO    0x0d
+#define SAM_DELTA_TRUST_DOMS     0x0e
+#define SAM_DELTA_PRIVS_INFO     0x10 /* DT_DELTA_ACCOUNTS */
+#define SAM_DELTA_SECRET_INFO    0x12
+#define SAM_DELTA_DELETE_GROUP   0x14
+#define SAM_DELTA_DELETE_USER    0x15
+#define SAM_DELTA_MODIFIED_COUNT 0x16
+
+/* SAM database types */
+#define SAM_DATABASE_DOMAIN    0x00 /* Domain users and groups */
+#define SAM_DATABASE_BUILTIN   0x01 /* BUILTIN users and groups */
+#define SAM_DATABASE_PRIVS     0x02 /* Privileges */
+
+/* flags use when sending a NETLOGON_CONTROL request */
+
+#define NETLOGON_CONTROL_SYNC			0x2
+#define NETLOGON_CONTROL_REDISCOVER		0x5
+#define NETLOGON_CONTROL_TC_QUERY		0x6
+#define NETLOGON_CONTROL_TRANSPORT_NOTIFY	0x7
+#define NETLOGON_CONTROL_SET_DBFLAG		0xfffe
+
+/* Some flag values reverse engineered from NLTEST.EXE */
+/* used in the NETLOGON_CONTROL[2] reply */
+
+#define NL_CTRL_IN_SYNC          0x0000
+#define NL_CTRL_REPL_NEEDED      0x0001
+#define NL_CTRL_REPL_IN_PROGRESS 0x0002
+#define NL_CTRL_FULL_SYNC        0x0004
+
+#define LOGON_GUEST			0x00000001
+#define LOGON_NOENCRYPTION		0x00000002
+#define LOGON_CACHED_ACCOUNT		0x00000004
+#define LOGON_USED_LM_PASSWORD		0x00000008
+#define LOGON_EXTRA_SIDS		0x00000020
+#define LOGON_SUBAUTH_SESSION_KEY	0x00000040
+#define LOGON_SERVER_TRUST_ACCOUNT	0x00000080
+#define LOGON_NTLMV2_ENABLED		0x00000100
+#define LOGON_RESOURCE_GROUPS		0x00000200
+#define LOGON_PROFILE_PATH_RETURNED	0x00000400
+#define LOGON_GRACE_LOGON		0x01000000
+
+#define SE_GROUP_MANDATORY		0x00000001
+#define SE_GROUP_ENABLED_BY_DEFAULT	0x00000002
+#define SE_GROUP_ENABLED		0x00000004
+#define SE_GROUP_OWNER 			0x00000008
+#define SE_GROUP_USE_FOR_DENY_ONLY 	0x00000010
+#define SE_GROUP_LOGON_ID 		0xC0000000
+#define SE_GROUP_RESOURCE 		0x20000000
+
+/* Flags for controlling the behaviour of a particular logon */
+
+/* sets LOGON_SERVER_TRUST_ACCOUNT user_flag */
+#define MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT	0x00000020
+#define MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT	0x00000800
+
+/* updates the "logon time" on network logon */
+#define MSV1_0_UPDATE_LOGON_STATISTICS		0x00000004
+
+/* returns the user parameters in the driveletter */
+#define MSV1_0_RETURN_USER_PARAMETERS		0x00000008
+
+/* returns the profilepath in the driveletter and 
+ * sets LOGON_PROFILE_PATH_RETURNED user_flag */
+#define MSV1_0_RETURN_PROFILE_PATH		0x00000200
+
+#if 0
+/* I think this is correct - it's what gets parsed on the wire. JRA. */
+/* NET_USER_INFO_2 */
+typedef struct net_user_info_2 {
+	uint32 ptr_user_info;
+
+	NTTIME logon_time;            /* logon time */
+	NTTIME logoff_time;           /* logoff time */
+	NTTIME kickoff_time;          /* kickoff time */
+	NTTIME pass_last_set_time;    /* password last set time */
+	NTTIME pass_can_change_time;  /* password can change time */
+	NTTIME pass_must_change_time; /* password must change time */
+
+	UNIHDR hdr_user_name;    /* username unicode string header */
+	UNIHDR hdr_full_name;    /* user's full name unicode string header */
+	UNIHDR hdr_logon_script; /* logon script unicode string header */
+	UNIHDR hdr_profile_path; /* profile path unicode string header */
+	UNIHDR hdr_home_dir;     /* home directory unicode string header */
+	UNIHDR hdr_dir_drive;    /* home directory drive unicode string header */
+
+	uint16 logon_count;  /* logon count */
+	uint16 bad_pw_count; /* bad password count */
+
+	uint32 user_id;       /* User ID */
+	uint32 group_id;      /* Group ID */
+	uint32 num_groups;    /* num groups */
+	uint32 buffer_groups; /* undocumented buffer pointer to groups. */
+	uint32 user_flgs;     /* user flags */
+
+	uint8 user_sess_key[16]; /* unused user session key */
+
+	UNIHDR hdr_logon_srv; /* logon server unicode string header */
+	UNIHDR hdr_logon_dom; /* logon domain unicode string header */
+
+	uint32 buffer_dom_id; /* undocumented logon domain id pointer */
+	uint8 padding[40];    /* unused padding bytes.  expansion room */
+
+	UNISTR2 uni_user_name;    /* username unicode string */
+	UNISTR2 uni_full_name;    /* user's full name unicode string */
+	UNISTR2 uni_logon_script; /* logon script unicode string */
+	UNISTR2 uni_profile_path; /* profile path unicode string */
+	UNISTR2 uni_home_dir;     /* home directory unicode string */
+	UNISTR2 uni_dir_drive;    /* home directory drive unicode string */
+
+	uint32 num_groups2;        /* num groups */
+	DOM_GID *gids; /* group info */
+
+	UNISTR2 uni_logon_srv; /* logon server unicode string */
+	UNISTR2 uni_logon_dom; /* logon domain unicode string */
+
+	DOM_SID2 dom_sid;           /* domain SID */
+
+	uint32 num_other_groups;        /* other groups */
+	DOM_GID *other_gids; /* group info */
+	DOM_SID2 *other_sids; /* undocumented - domain SIDs */
+
+} NET_USER_INFO_2;
+#endif
+
+/* NET_USER_INFO_2 */
+typedef struct net_user_info_2 {
+	uint32 ptr_user_info;
+
+	NTTIME logon_time;            /* logon time */
+	NTTIME logoff_time;           /* logoff time */
+	NTTIME kickoff_time;          /* kickoff time */
+	NTTIME pass_last_set_time;    /* password last set time */
+	NTTIME pass_can_change_time;  /* password can change time */
+	NTTIME pass_must_change_time; /* password must change time */
+
+	UNIHDR hdr_user_name;    /* username unicode string header */
+	UNIHDR hdr_full_name;    /* user's full name unicode string header */
+	UNIHDR hdr_logon_script; /* logon script unicode string header */
+	UNIHDR hdr_profile_path; /* profile path unicode string header */
+	UNIHDR hdr_home_dir;     /* home directory unicode string header */
+	UNIHDR hdr_dir_drive;    /* home directory drive unicode string header */
+
+	uint16 logon_count;  /* logon count */
+	uint16 bad_pw_count; /* bad password count */
+
+	uint32 user_rid;       /* User RID */
+	uint32 group_rid;      /* Group RID */
+
+	uint32 num_groups;    /* num groups */
+	uint32 buffer_groups; /* undocumented buffer pointer to groups. */
+	uint32 user_flgs;     /* user flags */
+
+	uint8 user_sess_key[16]; /* user session key */
+
+	UNIHDR hdr_logon_srv; /* logon server unicode string header */
+	UNIHDR hdr_logon_dom; /* logon domain unicode string header */
+
+	uint32 buffer_dom_id; /* undocumented logon domain id pointer */
+	uint8 lm_sess_key[8];	/* lm session key */
+	uint32 acct_flags;	/* account flags */
+	uint32 unknown[7];	/* unknown */
+
+	UNISTR2 uni_user_name;    /* username unicode string */
+	UNISTR2 uni_full_name;    /* user's full name unicode string */
+	UNISTR2 uni_logon_script; /* logon script unicode string */
+	UNISTR2 uni_profile_path; /* profile path unicode string */
+	UNISTR2 uni_home_dir;     /* home directory unicode string */
+	UNISTR2 uni_dir_drive;    /* home directory drive unicode string */
+
+	UNISTR2 uni_logon_srv; /* logon server unicode string */
+	UNISTR2 uni_logon_dom; /* logon domain unicode string */
+
+	DOM_SID2 dom_sid;           /* domain SID */
+} NET_USER_INFO_2;
+
+/* NET_USER_INFO_3 */
+typedef struct net_user_info_3 {
+	uint32 ptr_user_info;
+
+	NTTIME logon_time;            /* logon time */
+	NTTIME logoff_time;           /* logoff time */
+	NTTIME kickoff_time;          /* kickoff time */
+	NTTIME pass_last_set_time;    /* password last set time */
+	NTTIME pass_can_change_time;  /* password can change time */
+	NTTIME pass_must_change_time; /* password must change time */
+
+	UNIHDR hdr_user_name;    /* username unicode string header */
+	UNIHDR hdr_full_name;    /* user's full name unicode string header */
+	UNIHDR hdr_logon_script; /* logon script unicode string header */
+	UNIHDR hdr_profile_path; /* profile path unicode string header */
+	UNIHDR hdr_home_dir;     /* home directory unicode string header */
+	UNIHDR hdr_dir_drive;    /* home directory drive unicode string header */
+
+	uint16 logon_count;  /* logon count */
+	uint16 bad_pw_count; /* bad password count */
+
+	uint32 user_rid;       /* User RID */
+	uint32 group_rid;      /* Group RID */
+
+	uint32 num_groups;    /* num groups */
+	uint32 buffer_groups; /* undocumented buffer pointer to groups. */
+	uint32 user_flgs;     /* user flags */
+
+	uint8 user_sess_key[16]; /* user session key */
+
+	UNIHDR hdr_logon_srv; /* logon server unicode string header */
+	UNIHDR hdr_logon_dom; /* logon domain unicode string header */
+
+	uint32 buffer_dom_id; /* undocumented logon domain id pointer */
+	uint8 lm_sess_key[8];	/* lm session key */
+	uint32 acct_flags;	/* account flags */
+	uint32 unknown[7];	/* unknown */
+
+	uint32 num_other_sids; /* number of foreign/trusted domain sids */
+	uint32 buffer_other_sids;
+	
+	/* The next three uint32 are not really part of user_info_3 but here
+	 * for parsing convenience.  They are only valid in Kerberos PAC
+	 * parsing - Guenther */
+	uint32 ptr_res_group_dom_sid;
+	uint32 res_group_count;
+	uint32 ptr_res_groups;
+
+	UNISTR2 uni_user_name;    /* username unicode string */
+	UNISTR2 uni_full_name;    /* user's full name unicode string */
+	UNISTR2 uni_logon_script; /* logon script unicode string */
+	UNISTR2 uni_profile_path; /* profile path unicode string */
+	UNISTR2 uni_home_dir;     /* home directory unicode string */
+	UNISTR2 uni_dir_drive;    /* home directory drive unicode string */
+
+	uint32 num_groups2;        /* num groups */
+	DOM_GID *gids; /* group info */
+
+	UNISTR2 uni_logon_srv; /* logon server unicode string */
+	UNISTR2 uni_logon_dom; /* logon domain unicode string */
+
+	DOM_SID2 dom_sid;           /* domain SID */
+
+	DOM_SID2 *other_sids; /* foreign/trusted domain SIDs */
+	uint32 *other_sids_attrib;
+} NET_USER_INFO_3;
+
+
+/* NETLOGON_INFO_1 - pdc status info, i presume */
+typedef struct netlogon_1_info {
+	uint32 flags;            /* 0x0 - undocumented */
+	uint32 pdc_status;       /* 0x0 - undocumented */
+} NETLOGON_INFO_1;
+
+/* NETLOGON_INFO_2 - pdc status info, plus trusted domain info */
+typedef struct netlogon_2_info {
+	uint32  flags;            /* 0x0 - undocumented */
+	uint32  pdc_status;       /* 0x0 - undocumented */
+	uint32  ptr_trusted_dc_name; /* pointer to trusted domain controller name */
+	uint32  tc_status;           
+	UNISTR2 uni_trusted_dc_name; /* unicode string - trusted dc name */
+} NETLOGON_INFO_2;
+
+/* NETLOGON_INFO_3 - logon status info, i presume */
+typedef struct netlogon_3_info {
+	uint32 flags;            /* 0x0 - undocumented */
+	uint32 logon_attempts;   /* number of logon attempts */
+	uint32 reserved_1;       /* 0x0 - undocumented */
+	uint32 reserved_2;       /* 0x0 - undocumented */
+	uint32 reserved_3;       /* 0x0 - undocumented */
+	uint32 reserved_4;       /* 0x0 - undocumented */
+	uint32 reserved_5;       /* 0x0 - undocumented */
+} NETLOGON_INFO_3;
+
+/********************************************************
+ Logon Control Query
+
+ This is generated by a nltest /bdc_query:DOMAIN
+
+ query_level 0x1, function_code 0x1
+
+ ********************************************************/
+
+/* NET_Q_LOGON_CTRL - LSA Netr Logon Control */
+
+typedef struct net_q_logon_ctrl_info {
+	uint32 ptr;
+	UNISTR2 uni_server_name;
+	uint32 function_code;
+	uint32 query_level;
+} NET_Q_LOGON_CTRL;
+
+/* NET_R_LOGON_CTRL - LSA Netr Logon Control */
+
+typedef struct net_r_logon_ctrl_info {
+	uint32 switch_value;
+	uint32 ptr;
+
+	union {
+		NETLOGON_INFO_1 info1;
+	} logon;
+
+	NTSTATUS status;
+} NET_R_LOGON_CTRL;
+
+
+typedef struct ctrl_data_info_5 {
+	uint32 		function_code;
+	
+	uint32		ptr_domain;
+	UNISTR2		domain;
+} CTRL_DATA_INFO_5;
+
+typedef struct ctrl_data_info_6 {
+	uint32 		function_code;
+	
+	uint32		ptr_domain;
+	UNISTR2		domain;
+} CTRL_DATA_INFO_6;
+
+
+/********************************************************
+ Logon Control2 Query
+
+ query_level 0x1 - pdc status
+ query_level 0x3 - number of logon attempts.
+
+ ********************************************************/
+
+/* NET_Q_LOGON_CTRL2 - LSA Netr Logon Control 2 */
+typedef struct net_q_logon_ctrl2_info {
+	uint32       	ptr;             /* undocumented buffer pointer */
+	UNISTR2      	uni_server_name; /* server name, starting with two '\'s */
+	
+	uint32       	function_code; 
+	uint32       	query_level;   
+	union {
+		CTRL_DATA_INFO_5 info5;
+		CTRL_DATA_INFO_6 info6;
+	} info;
+} NET_Q_LOGON_CTRL2;
+
+/*******************************************************
+ Logon Control Response
+
+ switch_value is same as query_level in request 
+ *******************************************************/
+
+/* NET_R_LOGON_CTRL2 - response to LSA Logon Control2 */
+typedef struct net_r_logon_ctrl2_info {
+	uint32       switch_value;  /* 0x1, 0x3 */
+	uint32       ptr;
+
+	union
+	{
+		NETLOGON_INFO_1 info1;
+		NETLOGON_INFO_2 info2;
+		NETLOGON_INFO_3 info3;
+
+	} logon;
+
+	NTSTATUS status; /* return code */
+} NET_R_LOGON_CTRL2;
+
+/* NET_Q_GETANYDCNAME - Ask a DC for a trusted DC name */
+
+typedef struct net_q_getanydcname {
+	uint32  ptr_logon_server;
+	UNISTR2 uni_logon_server;
+	uint32  ptr_domainname;
+	UNISTR2 uni_domainname;
+} NET_Q_GETANYDCNAME;
+
+/* NET_R_GETANYDCNAME - Ask a DC for a trusted DC name */
+
+typedef struct net_r_getanydcname {
+	uint32  ptr_dcname;
+	UNISTR2 uni_dcname;
+	WERROR status;
+} NET_R_GETANYDCNAME;
+
+/* NET_Q_TRUST_DOM_LIST - LSA Query Trusted Domains */
+typedef struct net_q_trust_dom_info {
+	uint32       ptr;             /* undocumented buffer pointer */
+	UNISTR2      uni_server_name; /* server name, starting with two '\'s */
+} NET_Q_TRUST_DOM_LIST;
+
+#define MAX_TRUST_DOMS 1
+
+/* NET_R_TRUST_DOM_LIST - response to LSA Trusted Domains */
+typedef struct net_r_trust_dom_info {
+	UNISTR2 uni_trust_dom_name[MAX_TRUST_DOMS];
+
+	NTSTATUS status; /* return code */
+} NET_R_TRUST_DOM_LIST;
+
+
+/* NEG_FLAGS */
+typedef struct neg_flags_info {
+	uint32 neg_flags; /* negotiated flags */
+} NEG_FLAGS;
+
+
+/* NET_Q_REQ_CHAL */
+typedef struct net_q_req_chal_info {
+	uint32  undoc_buffer; /* undocumented buffer pointer */
+	UNISTR2 uni_logon_srv; /* logon server unicode string */
+	UNISTR2 uni_logon_clnt; /* logon client unicode string */
+	DOM_CHAL clnt_chal; /* client challenge */
+} NET_Q_REQ_CHAL;
+
+
+/* NET_R_REQ_CHAL */
+typedef struct net_r_req_chal_info {
+	DOM_CHAL srv_chal; /* server challenge */
+	NTSTATUS status; /* return code */
+} NET_R_REQ_CHAL;
+
+/* NET_Q_AUTH */
+typedef struct net_q_auth_info {
+	DOM_LOG_INFO clnt_id; /* client identification info */
+	DOM_CHAL clnt_chal;     /* client-calculated credentials */
+} NET_Q_AUTH;
+
+/* NET_R_AUTH */
+typedef struct net_r_auth_info {
+	DOM_CHAL srv_chal;     /* server-calculated credentials */
+	NTSTATUS status; /* return code */
+} NET_R_AUTH;
+
+/* NET_Q_AUTH_2 */
+typedef struct net_q_auth2_info {
+	DOM_LOG_INFO clnt_id; /* client identification info */
+	DOM_CHAL clnt_chal;     /* client-calculated credentials */
+
+	NEG_FLAGS clnt_flgs; /* usually 0x0000 01ff */
+} NET_Q_AUTH_2;
+
+
+/* NET_R_AUTH_2 */
+typedef struct net_r_auth2_info {
+	DOM_CHAL srv_chal;     /* server-calculated credentials */
+	NEG_FLAGS srv_flgs; /* usually 0x0000 01ff */
+	NTSTATUS status; /* return code */
+} NET_R_AUTH_2;
+
+/* NET_Q_AUTH_3 */
+typedef struct net_q_auth3_info {
+	DOM_LOG_INFO clnt_id;	/* client identification info */
+	DOM_CHAL clnt_chal;		/* client-calculated credentials */
+	NEG_FLAGS clnt_flgs;	/* usually 0x6007 ffff */
+} NET_Q_AUTH_3;
+
+/* NET_R_AUTH_3 */
+typedef struct net_r_auth3_info {
+	DOM_CHAL srv_chal;	/* server-calculated credentials */
+	NEG_FLAGS srv_flgs;	/* usually 0x6007 ffff */
+	uint32 unknown;		/* 0x0000045b */
+	NTSTATUS status;	/* return code */
+} NET_R_AUTH_3;
+
+
+/* NET_Q_SRV_PWSET */
+typedef struct net_q_srv_pwset_info {
+	DOM_CLNT_INFO clnt_id; /* client identification/authentication info */
+	uint8 pwd[16]; /* new password - undocumented. */
+} NET_Q_SRV_PWSET;
+    
+/* NET_R_SRV_PWSET */
+typedef struct net_r_srv_pwset_info {
+	DOM_CRED srv_cred;     /* server-calculated credentials */
+
+	NTSTATUS status; /* return code */
+} NET_R_SRV_PWSET;
+
+/* NET_ID_INFO_2 */
+typedef struct net_network_info_2 {
+	uint32            ptr_id_info2;        /* pointer to id_info_2 */
+	UNIHDR            hdr_domain_name;     /* domain name unicode header */
+	uint32            param_ctrl;          /* param control (0x2) */
+	DOM_LOGON_ID      logon_id;            /* logon ID */
+	UNIHDR            hdr_user_name;       /* user name unicode header */
+	UNIHDR            hdr_wksta_name;      /* workstation name unicode header */
+	uint8             lm_chal[8];          /* lan manager 8 byte challenge */
+	STRHDR            hdr_nt_chal_resp;    /* nt challenge response */
+	STRHDR            hdr_lm_chal_resp;    /* lm challenge response */
+
+	UNISTR2           uni_domain_name;     /* domain name unicode string */
+	UNISTR2           uni_user_name;       /* user name unicode string */
+	UNISTR2           uni_wksta_name;      /* workgroup name unicode string */
+	STRING2           nt_chal_resp;        /* nt challenge response */
+	STRING2           lm_chal_resp;        /* lm challenge response */
+} NET_ID_INFO_2;
+
+/* NET_ID_INFO_1 */
+typedef struct id_info_1 {
+	uint32            ptr_id_info1;        /* pointer to id_info_1 */
+	UNIHDR            hdr_domain_name;     /* domain name unicode header */
+	uint32            param_ctrl;          /* param control */
+	DOM_LOGON_ID      logon_id;            /* logon ID */
+	UNIHDR            hdr_user_name;       /* user name unicode header */
+	UNIHDR            hdr_wksta_name;      /* workstation name unicode header */
+	OWF_INFO          lm_owf;              /* LM OWF Password */
+	OWF_INFO          nt_owf;              /* NT OWF Password */
+	UNISTR2           uni_domain_name;     /* domain name unicode string */
+	UNISTR2           uni_user_name;       /* user name unicode string */
+	UNISTR2           uni_wksta_name;      /* workgroup name unicode string */
+} NET_ID_INFO_1;
+
+#define INTERACTIVE_LOGON_TYPE 1
+#define NET_LOGON_TYPE 2
+
+/* NET_ID_INFO_CTR */
+typedef struct net_id_info_ctr_info {
+	uint16         switch_value;
+  
+	union {
+		NET_ID_INFO_1 id1; /* auth-level 1 - interactive user login */
+		NET_ID_INFO_2 id2; /* auth-level 2 - workstation referred login */
+	} auth;
+} NET_ID_INFO_CTR;
+
+/* SAM_INFO - sam logon/off id structure */
+typedef struct sam_info {
+	DOM_CLNT_INFO2  client;
+	uint32          ptr_rtn_cred; /* pointer to return credentials */
+	DOM_CRED        rtn_cred; /* return credentials */
+	uint16          logon_level;
+	NET_ID_INFO_CTR *ctr;
+} DOM_SAM_INFO;
+
+/* SAM_INFO - sam logon/off id structure - no creds */
+typedef struct sam_info_ex {
+	DOM_CLNT_SRV	client;
+	uint16          logon_level;
+	NET_ID_INFO_CTR *ctr;
+} DOM_SAM_INFO_EX;
+
+/* NET_Q_SAM_LOGON */
+typedef struct net_q_sam_logon_info {
+	DOM_SAM_INFO sam_id;
+	uint16          validation_level;
+} NET_Q_SAM_LOGON;
+
+/* NET_Q_SAM_LOGON_EX */
+typedef struct net_q_sam_logon_info_ex {
+	DOM_SAM_INFO_EX sam_id;
+	uint16          validation_level;
+	uint32 flags;
+} NET_Q_SAM_LOGON_EX;
+
+/* NET_R_SAM_LOGON */
+typedef struct net_r_sam_logon_info {
+	uint32 buffer_creds; /* undocumented buffer pointer */
+	DOM_CRED srv_creds; /* server credentials.  server time stamp appears to be ignored. */
+    
+	uint16 switch_value; /* 3 - indicates type of USER INFO */
+	NET_USER_INFO_3 *user;
+
+	uint32 auth_resp; /* 1 - Authoritative response; 0 - Non-Auth? */
+
+	NTSTATUS status; /* return code */
+} NET_R_SAM_LOGON;
+
+/* NET_R_SAM_LOGON_EX */
+typedef struct net_r_sam_logon_info_ex {
+	uint16 switch_value; /* 3 - indicates type of USER INFO */
+	NET_USER_INFO_3 *user;
+
+	uint32 auth_resp; /* 1 - Authoritative response; 0 - Non-Auth? */
+	uint32 flags;
+
+	NTSTATUS status; /* return code */
+} NET_R_SAM_LOGON_EX;
+
+
+/* NET_Q_SAM_LOGOFF */
+typedef struct net_q_sam_logoff_info {
+	DOM_SAM_INFO sam_id;
+} NET_Q_SAM_LOGOFF;
+
+/* NET_R_SAM_LOGOFF */
+typedef struct net_r_sam_logoff_info {
+	uint32 buffer_creds; /* undocumented buffer pointer */
+	DOM_CRED srv_creds; /* server credentials.  server time stamp appears to be ignored. */
+	NTSTATUS status; /* return code */
+} NET_R_SAM_LOGOFF;
+
+/* NET_Q_SAM_SYNC */
+typedef struct net_q_sam_sync_info {
+	UNISTR2 uni_srv_name; /* \\PDC */
+	UNISTR2 uni_cli_name; /* BDC */
+	DOM_CRED cli_creds;
+	DOM_CRED ret_creds;
+
+	uint32 database_id;
+	uint32 restart_state;
+	uint32 sync_context;
+
+	uint32 max_size;       /* preferred maximum length */
+} NET_Q_SAM_SYNC;
+
+/* SAM_DELTA_HDR */
+typedef struct sam_delta_hdr_info {
+	uint16 type;  /* type of structure attached */
+	uint16 type2;
+	uint32 target_rid;
+
+	uint32 type3;
+	uint32 ptr_delta;
+} SAM_DELTA_HDR;
+
+/* LOCKOUT_STRING */
+typedef struct account_lockout_string {
+	uint32 array_size;
+	uint32 offset;
+	uint32 length;
+/*	uint16 *bindata;	*/
+	uint64 lockout_duration;
+	uint64 reset_count;
+	uint32 bad_attempt_lockout;
+	uint32 dummy;
+} LOCKOUT_STRING;
+
+/* HDR_LOCKOUT_STRING */
+typedef struct hdr_account_lockout_string {
+	uint16 size;
+	uint16 length;
+	uint32 buffer;
+} HDR_LOCKOUT_STRING;
+
+/* SAM_DOMAIN_INFO (0x1) */
+typedef struct sam_domain_info_info {
+	UNIHDR hdr_dom_name;
+	UNIHDR hdr_oem_info;
+
+	uint64 force_logoff;
+	uint16   min_pwd_len;
+	uint16   pwd_history_len;
+	uint64 max_pwd_age;
+	uint64 min_pwd_age;
+	uint64 dom_mod_count;
+	NTTIME   creation_time;
+	uint32   security_information;
+
+	BUFHDR4 hdr_sec_desc; /* security descriptor */
+
+	HDR_LOCKOUT_STRING hdr_account_lockout;
+
+	UNIHDR hdr_unknown2;
+	UNIHDR hdr_unknown3;
+	UNIHDR hdr_unknown4;
+
+	UNISTR2 uni_dom_name;
+	UNISTR2 buf_oem_info; 
+
+	RPC_DATA_BLOB buf_sec_desc;
+
+	LOCKOUT_STRING account_lockout;
+
+	UNISTR2 buf_unknown2;
+	UNISTR2 buf_unknown3;
+	UNISTR2 buf_unknown4;
+
+	uint32 logon_chgpass;
+	uint32 unknown6;
+	uint32 unknown7;
+	uint32 unknown8;
+} SAM_DOMAIN_INFO;
+
+/* SAM_GROUP_INFO (0x2) */
+typedef struct sam_group_info_info {
+	UNIHDR hdr_grp_name;
+	DOM_GID gid;
+	UNIHDR hdr_grp_desc;
+	BUFHDR2 hdr_sec_desc;  /* security descriptor */
+	uint8 reserved[48];
+
+	UNISTR2 uni_grp_name;
+	UNISTR2 uni_grp_desc;
+	RPC_DATA_BLOB buf_sec_desc;
+} SAM_GROUP_INFO;
+
+/* SAM_PWD */
+typedef struct sam_passwd_info {
+	/* this structure probably contains password history */
+	/* this is probably a count of lm/nt pairs */
+	uint32 unk_0; /* 0x0000 0002 */
+
+	UNIHDR hdr_lm_pwd;
+	uint8  buf_lm_pwd[16];
+
+	UNIHDR hdr_nt_pwd;
+	uint8  buf_nt_pwd[16];
+
+	UNIHDR hdr_empty_lm;
+	UNIHDR hdr_empty_nt;
+} SAM_PWD;
+
+/* SAM_ACCOUNT_INFO (0x5) */
+typedef struct sam_account_info_info {
+	UNIHDR hdr_acct_name;
+	UNIHDR hdr_full_name;
+
+	uint32 user_rid;
+	uint32 group_rid;
+
+	UNIHDR hdr_home_dir;
+	UNIHDR hdr_dir_drive;
+	UNIHDR hdr_logon_script;
+	UNIHDR hdr_acct_desc;
+	UNIHDR hdr_workstations;
+
+	NTTIME logon_time;
+	NTTIME logoff_time;
+
+	uint32 logon_divs; /* 0xA8 */
+	uint32 ptr_logon_hrs;
+
+	uint16 bad_pwd_count;
+	uint16 logon_count;
+	NTTIME pwd_last_set_time;
+	NTTIME acct_expiry_time;
+
+	uint32 acb_info;
+	uint8 nt_pwd[16];
+	uint8 lm_pwd[16];
+	uint8 nt_pwd_present;
+	uint8 lm_pwd_present;
+	uint8 pwd_expired;
+
+	UNIHDR hdr_comment;
+	UNIHDR hdr_parameters;
+	uint16 country;
+	uint16 codepage;
+
+	BUFHDR2 hdr_sec_desc;  /* security descriptor */
+
+	UNIHDR  hdr_profile;
+	UNIHDR  hdr_reserved[3];  /* space for more strings */
+	uint32  dw_reserved[4];   /* space for more data - first two seem to
+				     be an NTTIME */
+
+	UNISTR2 uni_acct_name;
+	UNISTR2 uni_full_name;
+	UNISTR2 uni_home_dir;
+	UNISTR2 uni_dir_drive;
+	UNISTR2 uni_logon_script;
+	UNISTR2 uni_acct_desc;
+	UNISTR2 uni_workstations;
+
+	uint32 unknown1; /* 0x4EC */
+	uint32 unknown2; /* 0 */
+
+	RPC_DATA_BLOB buf_logon_hrs;
+	UNISTR2 uni_comment;
+	UNISTR2 uni_parameters;
+	SAM_PWD pass;
+	RPC_DATA_BLOB buf_sec_desc;
+	UNISTR2 uni_profile;
+} SAM_ACCOUNT_INFO;
+
+/* SAM_GROUP_MEM_INFO (0x8) */
+typedef struct sam_group_mem_info_info {
+	uint32 ptr_rids;
+	uint32 ptr_attribs;
+	uint32 num_members;
+	uint8 unknown[16];
+
+	uint32 num_members2;
+	uint32 *rids;
+
+	uint32 num_members3;
+	uint32 *attribs;
+
+} SAM_GROUP_MEM_INFO;
+
+/* SAM_ALIAS_INFO (0x9) */
+typedef struct sam_alias_info_info {
+	UNIHDR hdr_als_name;
+	uint32 als_rid;
+	BUFHDR2 hdr_sec_desc;  /* security descriptor */
+	UNIHDR hdr_als_desc;
+	uint8 reserved[40];
+
+	UNISTR2 uni_als_name;
+	RPC_DATA_BLOB buf_sec_desc;
+	UNISTR2 uni_als_desc;
+} SAM_ALIAS_INFO;
+
+/* SAM_ALIAS_MEM_INFO (0xC) */
+typedef struct sam_alias_mem_info_info {
+	uint32 num_members;
+	uint32 ptr_members;
+	uint8 unknown[16];
+
+	uint32 num_sids;
+	uint32 *ptr_sids;
+	DOM_SID2 *sids;
+} SAM_ALIAS_MEM_INFO;
+
+
+/* SAM_DELTA_POLICY (0x0D) */
+typedef struct {
+	uint32   max_log_size; /* 0x5000 */
+	uint64 audit_retention_period; /* 0 */
+	uint32   auditing_mode; /* 0 */
+	uint32   num_events;
+	uint32   ptr_events;
+	UNIHDR   hdr_dom_name;
+	uint32   sid_ptr;
+
+	uint32   paged_pool_limit; /* 0x02000000 */
+	uint32   non_paged_pool_limit; /* 0x00100000 */
+	uint32   min_workset_size; /* 0x00010000 */
+	uint32   max_workset_size; /* 0x0f000000 */
+	uint32   page_file_limit; /* 0 */
+	uint64 time_limit; /* 0 */
+	NTTIME   modify_time; /* 0x3c*/
+	NTTIME   create_time; /* a7080110 */
+	BUFHDR2  hdr_sec_desc;
+
+	uint32   num_event_audit_options;
+	uint32   event_audit_option;
+
+	UNISTR2  domain_name;
+	DOM_SID2 domain_sid;
+
+	RPC_DATA_BLOB  buf_sec_desc;
+} SAM_DELTA_POLICY;
+
+/* SAM_DELTA_TRUST_DOMS */
+typedef struct {
+	uint32 buf_size;
+	SEC_DESC *sec_desc;
+	DOM_SID2 sid;
+	UNIHDR hdr_domain;
+	
+	uint32 unknown0;
+	uint32 unknown1;
+	uint32 unknown2;
+	
+	uint32 buf_size2;
+	uint32 ptr;
+
+	uint32 unknown3;
+	UNISTR2 domain;
+} SAM_DELTA_TRUSTDOMS;
+
+/* SAM_DELTA_PRIVS (0x10) */
+typedef struct {
+	DOM_SID2 sid;
+
+	uint32 priv_count;
+	uint32 priv_control;
+
+	uint32 priv_attr_ptr;
+	uint32 priv_name_ptr;
+
+	uint32   paged_pool_limit; /* 0x02000000 */
+	uint32   non_paged_pool_limit; /* 0x00100000 */
+	uint32   min_workset_size; /* 0x00010000 */
+	uint32   max_workset_size; /* 0x0f000000 */
+	uint32   page_file_limit; /* 0 */
+	uint64 time_limit; /* 0 */
+	uint32   system_flags; /* 1 */
+	BUFHDR2  hdr_sec_desc;
+	
+	uint32 buf_size2;
+	
+	uint32 attribute_count;
+	uint32 *attributes;
+	
+	uint32 privlist_count;
+	UNIHDR *hdr_privslist;
+	UNISTR2 *uni_privslist;
+
+	RPC_DATA_BLOB buf_sec_desc;
+} SAM_DELTA_PRIVS;
+
+/* SAM_DELTA_SECRET */
+typedef struct {
+	uint32 buf_size;
+	SEC_DESC *sec_desc;
+	UNISTR2 secret;
+
+	uint32 count1;
+	uint32 count2;
+	uint32 ptr;
+	NTTIME time1;
+	uint32 count3;
+	uint32 count4;
+	uint32 ptr2;
+	NTTIME time2;
+	uint32 unknow1;
+
+	uint32 buf_size2;
+	uint32 ptr3;
+	uint32 unknow2; /* 0x0 12 times */
+
+	uint32 chal_len;
+	uint32 reserved1; /* 0 */
+	uint32 chal_len2;
+	uint8 chal[16];
+
+	uint32 key_len;
+	uint32 reserved2; /* 0 */
+	uint32 key_len2;
+	uint8 key[8];
+
+	uint32 buf_size3;
+	SEC_DESC *sec_desc2;
+} SAM_DELTA_SECRET;
+
+/* SAM_DELTA_MOD_COUNT (0x16) */
+typedef struct {
+        uint32 seqnum;
+        uint32 dom_mod_count_ptr;
+	uint64 dom_mod_count;  /* domain mod count at last sync */
+} SAM_DELTA_MOD_COUNT;
+
+typedef union sam_delta_ctr_info {
+	SAM_DOMAIN_INFO    domain_info ;
+	SAM_GROUP_INFO     group_info  ;
+	SAM_ACCOUNT_INFO   account_info;
+	SAM_GROUP_MEM_INFO grp_mem_info;
+	SAM_ALIAS_INFO     alias_info  ;
+	SAM_ALIAS_MEM_INFO als_mem_info;
+	SAM_DELTA_POLICY   policy_info;
+	SAM_DELTA_PRIVS    privs_info;
+	SAM_DELTA_MOD_COUNT mod_count;
+	SAM_DELTA_TRUSTDOMS trustdoms_info;
+	SAM_DELTA_SECRET   secret_info;
+} SAM_DELTA_CTR;
+
+/* NET_R_SAM_SYNC */
+typedef struct net_r_sam_sync_info {
+	DOM_CRED srv_creds;
+
+	uint32 sync_context;
+
+	uint32 ptr_deltas;
+	uint32 num_deltas;
+	uint32 ptr_deltas2;
+	uint32 num_deltas2;
+
+	SAM_DELTA_HDR *hdr_deltas;
+	SAM_DELTA_CTR *deltas;
+
+	NTSTATUS status;
+} NET_R_SAM_SYNC;
+
+/* NET_Q_SAM_DELTAS */
+typedef struct net_q_sam_deltas_info {
+	UNISTR2 uni_srv_name;
+	UNISTR2 uni_cli_name;
+	DOM_CRED cli_creds;
+	DOM_CRED ret_creds;
+
+	uint32 database_id;
+	uint64 dom_mod_count;  /* domain mod count at last sync */
+
+	uint32 max_size;       /* preferred maximum length */
+} NET_Q_SAM_DELTAS;
+
+/* NET_R_SAM_DELTAS */
+typedef struct net_r_sam_deltas_info {
+	DOM_CRED srv_creds;
+
+	uint64 dom_mod_count;   /* new domain mod count */
+
+	uint32 ptr_deltas;
+	uint32 num_deltas;
+	uint32 num_deltas2;
+
+	SAM_DELTA_HDR *hdr_deltas;
+	SAM_DELTA_CTR *deltas;
+
+	NTSTATUS status;
+} NET_R_SAM_DELTAS;
+
+#define DS_FORCE_REDISCOVERY            0x00000001
+#define DS_DIRECTORY_SERVICE_REQUIRED   0x00000010
+#define DS_DIRECTORY_SERVICE_PREFERRED  0x00000020
+#define DS_GC_SERVER_REQUIRED           0x00000040
+#define DS_PDC_REQUIRED                 0x00000080
+#define DS_BACKGROUND_ONLY              0x00000100
+#define DS_IP_REQUIRED                  0x00000200
+#define DS_KDC_REQUIRED                 0x00000400
+#define DS_TIMESERV_REQUIRED            0x00000800
+#define DS_WRITABLE_REQUIRED            0x00001000
+#define DS_GOOD_TIMESERV_PREFERRED      0x00002000
+#define DS_AVOID_SELF                   0x00004000
+#define DS_ONLY_LDAP_NEEDED             0x00008000
+
+#define DS_IS_FLAT_NAME                 0x00010000
+#define DS_IS_DNS_NAME                  0x00020000
+
+#define DS_RETURN_DNS_NAME              0x40000000
+#define DS_RETURN_FLAT_NAME             0x80000000
+
+#if 0 /* unknown yet */
+#define DS_IP_VERSION_AGNOSTIC
+#define DS_TRY_NEXTCLOSEST_SITE
+#endif
+
+#define DSGETDC_VALID_FLAGS ( \
+    DS_FORCE_REDISCOVERY | \
+    DS_DIRECTORY_SERVICE_REQUIRED | \
+    DS_DIRECTORY_SERVICE_PREFERRED | \
+    DS_GC_SERVER_REQUIRED | \
+    DS_PDC_REQUIRED | \
+    DS_BACKGROUND_ONLY | \
+    DS_IP_REQUIRED | \
+    DS_KDC_REQUIRED | \
+    DS_TIMESERV_REQUIRED | \
+    DS_WRITABLE_REQUIRED | \
+    DS_GOOD_TIMESERV_PREFERRED | \
+    DS_AVOID_SELF | \
+    DS_ONLY_LDAP_NEEDED | \
+    DS_IS_FLAT_NAME | \
+    DS_IS_DNS_NAME | \
+    DS_RETURN_FLAT_NAME  | \
+    DS_RETURN_DNS_NAME )
+
+struct DS_DOMAIN_CONTROLLER_INFO {
+	const char *domain_controller_name;
+	const char *domain_controller_address;
+	int32 domain_controller_address_type;
+	struct GUID *domain_guid;
+	const char *domain_name;
+	const char *dns_forest_name;
+	uint32 flags;
+	const char *dc_site_name;
+	const char *client_site_name;
+};
+
+/* NET_Q_DSR_GETDCNAME */
+typedef struct net_q_dsr_getdcname {
+	uint32 ptr_server_unc;
+	UNISTR2 uni_server_unc;
+	uint32 ptr_domain_name;
+	UNISTR2 uni_domain_name;
+	uint32 ptr_domain_guid;
+	struct GUID *domain_guid;
+	uint32 ptr_site_guid;
+	struct GUID *site_guid;
+	uint32 flags;
+} NET_Q_DSR_GETDCNAME;
+
+/* NET_R_DSR_GETDCNAME */
+typedef struct net_r_dsr_getdcname {
+	uint32 ptr_dc_unc;
+	UNISTR2 uni_dc_unc;
+	uint32 ptr_dc_address;
+	UNISTR2 uni_dc_address;
+	int32 dc_address_type;
+	struct GUID domain_guid;
+	uint32 ptr_domain_name;
+	UNISTR2 uni_domain_name;
+	uint32 ptr_forest_name;
+	UNISTR2 uni_forest_name;
+	uint32 dc_flags;
+	uint32 ptr_dc_site_name;
+	UNISTR2 uni_dc_site_name;
+	uint32 ptr_client_site_name;
+	UNISTR2 uni_client_site_name;
+	WERROR result;
+} NET_R_DSR_GETDCNAME;
+
+/* NET_Q_DSR_GETDCNAMEEX */
+typedef struct net_q_dsr_getdcnameex {
+	uint32 ptr_server_unc;
+	UNISTR2 uni_server_unc;
+	uint32 ptr_domain_name;
+	UNISTR2 uni_domain_name;
+	uint32 ptr_domain_guid;
+	struct GUID *domain_guid;
+	uint32 ptr_site_name;
+	UNISTR2 uni_site_name;
+	uint32 flags;
+} NET_Q_DSR_GETDCNAMEEX;
+
+/* NET_R_DSR_GETDCNAMEEX */
+typedef struct NET_R_DSR_GETDCNAME NET_R_DSR_GETDCNAMEEX;
+
+/* NET_Q_DSR_GETDCNAMEEX2 */
+typedef struct net_q_dsr_getdcnameex2 {
+	uint32 ptr_server_unc;
+	UNISTR2 uni_server_unc;
+	uint32 ptr_client_account;
+	UNISTR2 uni_client_account;
+	uint32 mask;
+	uint32 ptr_domain_name;
+	UNISTR2 uni_domain_name;
+	uint32 ptr_domain_guid;
+	struct GUID *domain_guid;
+	uint32 ptr_site_name;
+	UNISTR2 uni_site_name;
+	uint32 flags;
+} NET_Q_DSR_GETDCNAMEEX2;
+
+/* NET_R_DSR_GETDCNAMEEX */
+typedef struct NET_R_DSR_GETDCNAME NET_R_DSR_GETDCNAMEEX2;
+
+/* NET_Q_DSR_GESITENAME */
+typedef struct net_q_dsr_getsitename {
+	uint32 ptr_computer_name;
+	UNISTR2 uni_computer_name;
+} NET_Q_DSR_GETSITENAME;
+
+/* NET_R_DSR_GETSITENAME */
+typedef struct net_r_dsr_getsitename {
+	uint32 ptr_site_name;
+	UNISTR2 uni_site_name;
+	WERROR result;
+} NET_R_DSR_GETSITENAME;
+
+
+#endif /* _RPC_NETLOGON_H */

Modified: branches/samba/upstream/source/include/rpc_ntsvcs.h
===================================================================
--- branches/samba/upstream/source/include/rpc_ntsvcs.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/rpc_ntsvcs.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _RPC_NTSVCS_H /* _RPC_NTSVCS_H */
@@ -36,7 +37,33 @@
 /**************************/
 
 typedef struct {
+	/* nothing in the request */
+	uint32 dummy;
+} NTSVCS_Q_GET_VERSION;
+
+typedef struct {
+	uint32 version;
+	WERROR status;
+} NTSVCS_R_GET_VERSION;
+
+
+/**************************/
+
+typedef struct {
 	UNISTR2 *devicename;
+	uint32 flags;
+} NTSVCS_Q_GET_DEVICE_LIST_SIZE;
+
+typedef struct {
+	uint32 size;
+	WERROR status;
+} NTSVCS_R_GET_DEVICE_LIST_SIZE;
+
+
+/**************************/
+
+typedef struct {
+	UNISTR2 *devicename;
 	uint32 buffer_size;
 	uint32 flags;
 } NTSVCS_Q_GET_DEVICE_LIST;
@@ -49,6 +76,17 @@
 
 /**************************/
 
+typedef struct {
+	UNISTR2 devicepath;
+	uint32 flags;
+} NTSVCS_Q_VALIDATE_DEVICE_INSTANCE;
+
+typedef struct {
+	WERROR status;
+} NTSVCS_R_VALIDATE_DEVICE_INSTANCE;
+
+/**************************/
+
 #define DEV_REGPROP_DESC	1
 
 typedef struct {
@@ -68,4 +106,42 @@
 	WERROR status;
 } NTSVCS_R_GET_DEVICE_REG_PROPERTY;
 
+
+/**************************/
+
+typedef struct {
+	uint32 index;
+	uint8 *buffer;
+	uint32 buffer_size;
+	uint32 unknown1;
+} NTSVCS_Q_GET_HW_PROFILE_INFO;
+
+typedef struct {
+	uint32 buffer_size;	/* the size (not included in the reply) 
+				   if just matched from the request */
+	uint8 *buffer;
+	WERROR status;
+} NTSVCS_R_GET_HW_PROFILE_INFO;
+
+
+/**************************/
+
+typedef struct {
+	uint32 unknown1;
+	UNISTR2 devicepath;
+	uint32 unknown2;
+	uint32 unknown3;
+	uint32 unknown4;
+	uint32 unknown5;
+	uint32 unknown6;
+	uint32 unknown7;
+} NTSVCS_Q_HW_PROFILE_FLAGS;
+
+typedef struct {
+	uint32 unknown1;
+	uint32 unknown2;
+	uint32 unknown3;
+	WERROR status;
+} NTSVCS_R_HW_PROFILE_FLAGS;
+
 #endif /* _RPC_NTSVCS_H */

Modified: branches/samba/upstream/source/include/rpc_perfcount.h
===================================================================
--- branches/samba/upstream/source/include/rpc_perfcount.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/rpc_perfcount.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 typedef struct perf_counter_definition

Modified: branches/samba/upstream/source/include/rpc_perfcount_defs.h
===================================================================
--- branches/samba/upstream/source/include/rpc_perfcount_defs.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/rpc_perfcount_defs.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 /*

Copied: branches/samba/upstream/source/include/rpc_reg.h (from rev 1928, branches/samba/upstream/source/include/rpc_reg.h)
===================================================================
--- branches/samba/upstream/source/include/rpc_reg.h	                        (rev 0)
+++ branches/samba/upstream/source/include/rpc_reg.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,470 @@
+/* 
+   Unix SMB/CIFS implementation.
+   SMB parameters and setup
+   Copyright (C) Andrew Tridgell                 1992-1997.
+   Copyright (C) Luke Kenneth Casson Leighton    1996-1997.
+   Copyright (C) Paul Ashton                          1997.
+   Copyright (C) Jeremy Cooper                        2004.
+   Copyright (C) Gerald Carter                   2002-2005.
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#ifndef _RPC_REG_H /* _RPC_REG_H */
+#define _RPC_REG_H 
+
+/* RPC opnum */
+
+#define REG_OPEN_HKCR		0x00
+#define REG_OPEN_HKLM		0x02
+#define REG_OPEN_HKPD		0x03
+#define REG_OPEN_HKU		0x04
+#define REG_CLOSE		0x05
+#define REG_CREATE_KEY_EX	0x06
+#define REG_DELETE_KEY		0x07
+#define REG_DELETE_VALUE	0x08
+#define REG_ENUM_KEY		0x09
+#define REG_ENUM_VALUE		0x0a
+#define REG_FLUSH_KEY		0x0b
+#define REG_GET_KEY_SEC		0x0c
+#define REG_OPEN_ENTRY		0x0f
+#define REG_QUERY_KEY		0x10
+#define REG_QUERY_VALUE		0x11
+#define REG_RESTORE_KEY		0x13
+#define REG_SAVE_KEY		0x14
+#define REG_SET_KEY_SEC		0x15
+#define REG_SET_VALUE		0x16
+#define REG_SHUTDOWN		0x18
+#define REG_ABORT_SHUTDOWN	0x19
+#define REG_OPEN_HKPT		0x20
+#define REG_GETVERSION		0x1a
+#define REG_SHUTDOWN_EX		0x1e
+
+
+#define HKEY_CLASSES_ROOT	0x80000000
+#define HKEY_CURRENT_USER	0x80000001
+#define HKEY_LOCAL_MACHINE 	0x80000002
+#define HKEY_USERS         	0x80000003
+#define HKEY_PERFORMANCE_DATA	0x80000004
+
+#define KEY_HKLM		"HKLM"
+#define KEY_HKU			"HKU"
+#define KEY_HKCR		"HKCR"
+#define KEY_HKPD		"HKPD"
+#define KEY_HKPT		"HKPT"
+#define KEY_SERVICES		"HKLM\\SYSTEM\\CurrentControlSet\\Services"
+#define KEY_PRINTING 		"HKLM\\SYSTEM\\CurrentControlSet\\Control\\Print"
+#define KEY_PRINTING_2K		"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Print\\Printers"
+#define KEY_PRINTING_PORTS	"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Ports"
+#define KEY_EVENTLOG 		"HKLM\\SYSTEM\\CurrentControlSet\\Services\\Eventlog"
+#define KEY_SHARES		"HKLM\\SYSTEM\\CurrentControlSet\\Services\\LanmanServer\\Shares"
+#define KEY_TREE_ROOT		""
+
+/* Registry data types */
+
+#define REG_NONE                       0
+#define REG_SZ		               1
+#define REG_EXPAND_SZ                  2
+#define REG_BINARY 	               3
+#define REG_DWORD	               4
+#define REG_DWORD_LE	               4	/* DWORD, little endian */
+#define REG_DWORD_BE	               5	/* DWORD, big endian */
+#define REG_LINK                       6
+#define REG_MULTI_SZ  	               7
+#define REG_RESOURCE_LIST              8
+#define REG_FULL_RESOURCE_DESCRIPTOR   9
+#define REG_RESOURCE_REQUIREMENTS_LIST 10
+
+/*
+ * Registry key types
+ *	Most keys are going to be GENERIC -- may need a better name?
+ *	HKPD and HKPT are used by reg_perfcount.c
+ *		they are special keys that contain performance data
+ */
+#define REG_KEY_GENERIC		0
+#define REG_KEY_HKPD		1
+#define REG_KEY_HKPT		2
+
+/* 
+ * container for function pointers to enumeration routines
+ * for virtual registry view 
+ */ 
+ 
+typedef struct {
+	/* functions for enumerating subkeys and values */	
+	int 	(*fetch_subkeys)( const char *key, REGSUBKEY_CTR *subkeys);
+	int 	(*fetch_values) ( const char *key, REGVAL_CTR *val );
+	BOOL 	(*store_subkeys)( const char *key, REGSUBKEY_CTR *subkeys );
+	BOOL 	(*store_values)( const char *key, REGVAL_CTR *val );
+	BOOL	(*reg_access_check)( const char *keyname, uint32 requested, uint32 *granted, NT_USER_TOKEN *token );
+} REGISTRY_OPS;
+
+typedef struct {
+	const char	*keyname;	/* full path to name of key */
+	REGISTRY_OPS	*ops;		/* registry function hooks */
+} REGISTRY_HOOK;
+
+
+/* structure to store the registry handles */
+
+typedef struct _RegistryKey {
+	uint32		type;
+	char		*name; 		/* full name of registry key */
+	uint32 		access_granted;
+	REGISTRY_HOOK	*hook;	
+} REGISTRY_KEY;
+
+/*
+ * RPC REGISTRY STRUCTURES
+ */
+
+/***********************************************/
+
+typedef struct {
+	uint16 *server;
+	uint32 access;     
+} REG_Q_OPEN_HIVE;
+
+typedef struct {
+	POLICY_HND pol;
+	WERROR status; 
+} REG_R_OPEN_HIVE;
+
+
+/***********************************************/
+
+typedef struct {
+	POLICY_HND pol;
+} REG_Q_FLUSH_KEY;
+
+typedef struct {
+	WERROR status; 
+} REG_R_FLUSH_KEY;
+
+
+/***********************************************/
+
+typedef struct {
+	POLICY_HND handle;
+	uint32 sec_info;
+	uint32 ptr; 
+	BUFHDR hdr_sec;
+	SEC_DESC_BUF *data;
+} REG_Q_SET_KEY_SEC;
+
+typedef struct {
+	WERROR status;
+} REG_R_SET_KEY_SEC;
+
+
+/***********************************************/
+
+typedef struct {
+	POLICY_HND handle;
+	uint32 sec_info;
+	uint32 ptr; 
+	BUFHDR hdr_sec; 
+	SEC_DESC_BUF *data; 
+} REG_Q_GET_KEY_SEC;
+
+typedef struct {
+	uint32 sec_info; 
+	uint32 ptr; 
+	BUFHDR hdr_sec; 
+	SEC_DESC_BUF *data;
+	WERROR status;
+} REG_R_GET_KEY_SEC;
+
+/***********************************************/
+
+typedef struct {
+	POLICY_HND handle;   
+	UNISTR4 name;   	
+	uint32 type;  
+	RPC_DATA_BLOB value; 
+	uint32 size;
+} REG_Q_SET_VALUE;
+
+typedef struct { 
+	WERROR status;
+} REG_R_SET_VALUE;
+
+/***********************************************/
+
+typedef struct {
+	POLICY_HND pol;
+	uint32 val_index;
+	UNISTR4 name;
+	uint32 *type;  
+	REGVAL_BUFFER *value; /* value, in byte buffer */
+	uint32 *buffer_len; 
+	uint32 *name_len; 
+} REG_Q_ENUM_VALUE;
+
+typedef struct { 
+	UNISTR4 name;
+	uint32 *type;
+	REGVAL_BUFFER *value;
+	uint32 *buffer_len1;
+	uint32 *buffer_len2;
+	WERROR status;
+} REG_R_ENUM_VALUE;
+
+/***********************************************/
+
+typedef struct {
+	POLICY_HND handle;
+	UNISTR4 name;
+	UNISTR4 key_class;
+	uint32 options;
+	uint32 access;
+	
+	/* FIXME!  collapse all this into one structure */
+	uint32 *sec_info;
+	uint32 ptr2;
+	BUFHDR hdr_sec;
+	uint32 ptr3;
+	SEC_DESC_BUF *data;
+
+	uint32 *disposition; 
+} REG_Q_CREATE_KEY_EX;
+
+typedef struct {
+	POLICY_HND handle;
+	uint32 disposition;
+	WERROR status; 
+} REG_R_CREATE_KEY_EX;
+
+/***********************************************/
+
+typedef struct {
+	POLICY_HND handle;
+	UNISTR4 name;
+} REG_Q_DELETE_KEY;
+
+typedef struct {
+	WERROR status; 
+} REG_R_DELETE_KEY;
+
+/***********************************************/
+
+typedef struct {
+	POLICY_HND handle;
+	UNISTR4 name;
+} REG_Q_DELETE_VALUE;
+
+typedef struct {
+	WERROR status;
+} REG_R_DELETE_VALUE;
+
+/***********************************************/
+
+typedef struct {
+	POLICY_HND pol;
+	UNISTR4 key_class;
+} REG_Q_QUERY_KEY;
+
+typedef struct {
+	UNISTR4 key_class;
+	uint32 num_subkeys;
+	uint32 max_subkeylen;
+	uint32 reserved; 	/* 0x0000 0000 - according to MSDN (max_subkeysize?) */
+	uint32 num_values;
+	uint32 max_valnamelen;
+	uint32 max_valbufsize; 
+	uint32 sec_desc; 	/* 0x0000 0078 */
+	NTTIME mod_time;  	/* modified time */
+	WERROR status;         
+} REG_R_QUERY_KEY;
+
+
+/***********************************************/
+
+typedef struct {
+	POLICY_HND pol;
+} REG_Q_GETVERSION;
+
+typedef struct {
+	uint32 win_version;
+	WERROR status;
+} REG_R_GETVERSION;
+
+
+/***********************************************/
+
+typedef struct {
+	POLICY_HND pol; 
+	UNISTR4 filename;
+	uint32 flags;
+} REG_Q_RESTORE_KEY;
+
+typedef struct {
+	WERROR status;         /* return status */
+} REG_R_RESTORE_KEY;
+
+
+/***********************************************/
+
+
+/* I have no idea if this is correct since I 
+   have not seen the full structure on the wire 
+   as of yet */
+   
+typedef struct {
+	uint32 max_len;
+	uint32 len;
+	SEC_DESC *secdesc;
+} REG_SEC_DESC_BUF;
+
+typedef struct {
+	uint32 size;		/* size in bytes of security descriptor */
+	REG_SEC_DESC_BUF secdesc;
+	uint8  inherit;		/* see MSDN for a description */
+} SECURITY_ATTRIBUTE;
+
+typedef struct {
+	POLICY_HND pol; 
+	UNISTR4 filename;
+	SECURITY_ATTRIBUTE *sec_attr;
+} REG_Q_SAVE_KEY;
+
+typedef struct {
+	WERROR status;         /* return status */
+} REG_R_SAVE_KEY;
+
+
+/***********************************************/
+
+typedef struct {
+	POLICY_HND pol; /* policy handle */
+} REG_Q_CLOSE;
+
+typedef struct {
+	POLICY_HND pol; 
+	WERROR status; 
+} REG_R_CLOSE;
+
+
+/***********************************************/
+
+typedef struct {
+	POLICY_HND pol; 
+	uint32 key_index;       
+	uint16 key_name_len;   
+	uint16 unknown_1;       /* 0x0414 */
+	uint32 ptr1;          
+	uint32 unknown_2;       /* 0x0000 020A */
+	uint8  pad1[8];        
+	uint32 ptr2;           
+	uint8  pad2[8];        
+	uint32 ptr3;           
+	NTTIME time;           
+} REG_Q_ENUM_KEY;
+
+typedef struct { 
+	UNISTR4 keyname;
+	UNISTR4 *classname;
+	NTTIME *time;            
+	WERROR status;         /* return status */
+} REG_R_ENUM_KEY;
+
+
+/***********************************************/
+
+typedef struct {
+	POLICY_HND pol;		/* policy handle */
+	UNISTR4  name;
+
+	uint32 ptr_reserved;	/* pointer */
+  
+	uint32 ptr_buf;		/* the next three fields follow if ptr_buf != 0 */
+	uint32 ptr_bufsize;
+	uint32 bufsize;
+	uint32 buf_unk;
+
+	uint32 unk1;
+	uint32 ptr_buflen;
+	uint32 buflen;
+  
+	uint32 ptr_buflen2;
+	uint32 buflen2;
+
+} REG_Q_QUERY_VALUE;
+
+typedef struct { 
+	uint32 *type;
+	REGVAL_BUFFER *value;	/* key value */
+	uint32 *buf_max_len;
+	uint32 *buf_len;
+	WERROR status;	/* return status */
+} REG_R_QUERY_VALUE;
+
+
+/***********************************************/
+
+typedef struct {
+	POLICY_HND pol;
+	UNISTR4 name; 
+	uint32 unknown_0;       /* 32 bit unknown - 0x0000 0000 */
+	uint32 access; 
+} REG_Q_OPEN_ENTRY;
+
+typedef struct {
+	POLICY_HND handle;
+	WERROR status;
+} REG_R_OPEN_ENTRY;
+
+/***********************************************/
+ 
+typedef struct {
+	uint16 *server;
+	UNISTR4 *message; 	
+	uint32 timeout;		/* in seconds */
+	uint8 force;		/* boolean: force shutdown */
+	uint8 reboot;		/* boolean: reboot on shutdown */		
+} REG_Q_SHUTDOWN;
+
+typedef struct {
+	WERROR status;		/* return status */
+} REG_R_SHUTDOWN;
+
+/***********************************************/
+ 
+typedef struct {
+	uint16 *server;
+	UNISTR4 *message; 	
+	uint32 timeout;		/* in seconds */
+	uint8 force;		/* boolean: force shutdown */
+	uint8 reboot;		/* boolean: reboot on shutdown */
+	uint32 reason;		/* reason - must be defined code */
+} REG_Q_SHUTDOWN_EX;
+
+typedef struct {
+	WERROR status;
+} REG_R_SHUTDOWN_EX;
+
+/***********************************************/
+
+typedef struct {
+	uint16 *server;
+} REG_Q_ABORT_SHUTDOWN;
+
+typedef struct { 
+	WERROR status; 
+} REG_R_ABORT_SHUTDOWN;
+
+
+#endif /* _RPC_REG_H */
+

Copied: branches/samba/upstream/source/include/rpc_samr.h (from rev 1928, branches/samba/upstream/source/include/rpc_samr.h)
===================================================================
--- branches/samba/upstream/source/include/rpc_samr.h	                        (rev 0)
+++ branches/samba/upstream/source/include/rpc_samr.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,2039 @@
+/* 
+   Unix SMB/CIFS implementation.
+   SMB parameters and setup
+   Copyright (C) Andrew Tridgell              1992-2000
+   Copyright (C) Luke Kenneth Casson Leighton 1996-2000
+   Copyright (C) Paul Ashton                  1997-2000
+   Copyright (C) Jean François Micouleau      1998-2001
+   Copyright (C) Jim McDonough <jmcd at us.ibm.com> 2002
+   
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#ifndef _RPC_SAMR_H /* _RPC_SAMR_H */
+#define _RPC_SAMR_H 
+
+/*******************************************************************
+ the following information comes from a QuickView on samsrv.dll,
+ and gives an idea of exactly what is needed:
+ 
+x SamrAddMemberToAlias
+x SamrAddMemberToGroup
+SamrAddMultipleMembersToAlias
+x SamrChangePasswordUser
+x SamrCloseHandle
+x SamrConnect
+x SamrCreateAliasInDomain
+x SamrCreateGroupInDomain
+x SamrCreateUserInDomain
+? SamrDeleteAlias
+SamrDeleteGroup
+x SamrDeleteUser
+x SamrEnumerateAliasesInDomain
+SamrEnumerateDomainsInSamServer
+x SamrEnumerateGroupsInDomain
+x SamrEnumerateUsersInDomain
+SamrGetUserDomainPasswordInformation
+SamrLookupDomainInSamServer
+? SamrLookupIdsInDomain
+x SamrLookupNamesInDomain
+x SamrOpenAlias
+x SamrOpenDomain
+x SamrOpenGroup
+x SamrOpenUser
+x SamrQueryDisplayInformation
+x SamrQueryInformationAlias
+SamrQueryInformationDomain
+? SamrQueryInformationUser
+x SamrQuerySecurityObject
+SamrRemoveMemberFromAlias
+SamrRemoveMemberFromForiegnDomain
+SamrRemoveMemberFromGroup
+SamrRemoveMultipleMembersFromAlias
+x SamrSetInformationAlias
+SamrSetInformationDomain
+x SamrSetInformationGroup
+x SamrSetInformationUser
+SamrSetMemberAttributesOfGroup
+SamrSetSecurityObject
+SamrShutdownSamServer
+SamrTestPrivateFunctionsDomain
+SamrTestPrivateFunctionsUser
+
+********************************************************************/
+
+#define SAMR_CONNECT_ANON      0x00
+#define SAMR_CLOSE_HND         0x01
+#define SAMR_SET_SEC_OBJECT    0x02
+#define SAMR_QUERY_SEC_OBJECT  0x03
+
+#define SAMR_UNKNOWN_4         0x04 /* profile info? */
+#define SAMR_LOOKUP_DOMAIN     0x05
+#define SAMR_ENUM_DOMAINS      0x06
+#define SAMR_OPEN_DOMAIN       0x07
+#define SAMR_QUERY_DOMAIN_INFO 0x08
+#define SAMR_SET_DOMAIN_INFO   0x09
+
+#define SAMR_CREATE_DOM_GROUP  0x0a
+#define SAMR_ENUM_DOM_GROUPS   0x0b
+#define SAMR_ENUM_DOM_USERS    0x0d
+#define SAMR_CREATE_DOM_ALIAS  0x0e
+#define SAMR_ENUM_DOM_ALIASES  0x0f
+#define SAMR_QUERY_USERALIASES 0x10
+
+#define SAMR_LOOKUP_NAMES      0x11
+#define SAMR_LOOKUP_RIDS       0x12
+
+#define SAMR_OPEN_GROUP        0x13
+#define SAMR_QUERY_GROUPINFO   0x14
+#define SAMR_SET_GROUPINFO     0x15
+#define SAMR_ADD_GROUPMEM      0x16
+#define SAMR_DELETE_DOM_GROUP  0x17
+#define SAMR_DEL_GROUPMEM      0x18
+#define SAMR_QUERY_GROUPMEM    0x19
+#define SAMR_UNKNOWN_1A        0x1a
+
+#define SAMR_OPEN_ALIAS        0x1b
+#define SAMR_QUERY_ALIASINFO   0x1c
+#define SAMR_SET_ALIASINFO     0x1d
+#define SAMR_DELETE_DOM_ALIAS  0x1e
+#define SAMR_ADD_ALIASMEM      0x1f
+#define SAMR_DEL_ALIASMEM      0x20
+#define SAMR_QUERY_ALIASMEM    0x21
+
+#define SAMR_OPEN_USER         0x22
+#define SAMR_DELETE_DOM_USER   0x23
+#define SAMR_QUERY_USERINFO    0x24
+#define SAMR_SET_USERINFO2     0x25
+#define SAMR_QUERY_USERGROUPS  0x27
+
+#define SAMR_QUERY_DISPINFO    0x28
+#define SAMR_GET_DISPENUM_INDEX 0x29
+#define SAMR_UNKNOWN_2a        0x2a
+#define SAMR_UNKNOWN_2b        0x2b
+#define SAMR_GET_USRDOM_PWINFO 0x2c
+#define SAMR_REMOVE_SID_FOREIGN_DOMAIN        0x2d
+#define SAMR_QUERY_DOMAIN_INFO2  0x2e /* looks like an alias for SAMR_QUERY_DOMAIN_INFO */
+#define SAMR_UNKNOWN_2f        0x2f
+#define SAMR_QUERY_DISPINFO3   0x30 /* Alias for SAMR_QUERY_DISPINFO
+				       with info level 3 */
+#define SAMR_GET_DISPENUM_INDEX2 0x31
+#define SAMR_CREATE_USER       0x32
+#define SAMR_QUERY_DISPINFO4   0x33 /* Alias for SAMR_QUERY_DISPINFO
+				       with info level 4 */
+#define SAMR_ADDMULTI_ALIASMEM 0x34
+
+#define SAMR_UNKNOWN_35        0x35
+#define SAMR_UNKNOWN_36        0x36
+#define SAMR_CHGPASSWD_USER    0x37
+#define SAMR_GET_DOM_PWINFO    0x38
+#define SAMR_CONNECT           0x39
+#define SAMR_SET_USERINFO      0x3A
+#define SAMR_CONNECT4          0x3E
+#define SAMR_CHGPASSWD_USER3   0x3F
+#define SAMR_CONNECT5          0x40
+
+/* SAMR account creation flags/permissions */
+#define SAMR_USER_GETNAME               0x1
+#define SAMR_USER_GETLOCALE             0x2
+#define SAMR_USER_GETLOCCOM             0x4
+#define SAMR_USER_GETLOGONINFO          0x8
+#define SAMR_USER_GETATTR               0x10
+#define SAMR_USER_SETATTR               0x20
+#define SAMR_USER_CHPASS                0x40
+#define SAMR_USER_SETPASS               0x80
+#define SAMR_USER_GETGROUPS             0x100
+#define SAMR_USER_GETMEMBERSHIP         0x200
+#define SAMR_USER_CHMEMBERSHIP          0x400
+#define SAMR_STANDARD_DELETE            0x10000
+#define SAMR_STANDARD_READCTRL          0x20000
+#define SAMR_STANDARD_WRITEDAC          0x40000
+#define SAMR_STANDARD_WRITEOWNER        0x80000
+#define SAMR_STANDARD_SYNC              0x100000
+#define SAMR_GENERIC_ACCESSSACL         0x800000
+#define SAMR_GENERIC_MAXALLOWED         0x2000000
+#define SAMR_GENERIC_ALL                0x10000000
+#define SAMR_GENERIC_EXECUTE            0x20000000
+#define SAMR_GENERIC_WRITE              0x40000000
+#define SAMR_GENERIC_READ               0x80000000
+
+
+typedef struct logon_hours_info
+{
+	uint32 max_len; /* normally 1260 bytes */
+	uint32 offset;
+	uint32 len; /* normally 21 bytes */
+	uint8 hours[32];
+
+} LOGON_HRS;
+
+/* SAM_USER_INFO_23 */
+typedef struct sam_user_info_23
+{
+	/* TIMES MAY NOT IN RIGHT ORDER!!!! */
+	NTTIME logon_time;            /* logon time */
+	NTTIME logoff_time;           /* logoff time */
+	NTTIME kickoff_time;          /* kickoff time */
+	NTTIME pass_last_set_time;    /* password last set time */
+	NTTIME pass_can_change_time;  /* password can change time */
+	NTTIME pass_must_change_time; /* password must change time */
+
+	UNIHDR hdr_user_name;    /* NULL - user name unicode string header */
+	UNIHDR hdr_full_name;    /* user's full name unicode string header */
+	UNIHDR hdr_home_dir;     /* home directory unicode string header */
+	UNIHDR hdr_dir_drive;    /* home drive unicode string header */
+	UNIHDR hdr_logon_script; /* logon script unicode string header */
+	UNIHDR hdr_profile_path; /* profile path unicode string header */
+	UNIHDR hdr_acct_desc  ;  /* user description */
+	UNIHDR hdr_workstations; /* comma-separated workstations user can log in from */
+	UNIHDR hdr_comment;
+	UNIHDR hdr_munged_dial ; /* munged path name and dial-back tel number */
+
+	uint8 lm_pwd[16];    /* lm user passwords */
+	uint8 nt_pwd[16];    /* nt user passwords */
+
+	uint32 user_rid;      /* Primary User ID */
+	uint32 group_rid;     /* Primary Group ID */
+
+	uint32 acb_info; /* account info (ACB_xxxx bit-mask) */
+
+	uint32 fields_present; /* 0x09f8 27fa */
+
+	uint16 logon_divs; /* 0x0000 00a8 which is 168 which is num hrs in a week */
+	/* uint8 pad[2] */
+	uint32 ptr_logon_hrs; /* pointer to logon hours */
+
+	/* Was unknown_5. */
+	uint16 bad_password_count;
+	uint16 logon_count;
+
+	uint8 padding1[6];
+		
+	uint8 passmustchange; /* 0x00 must change = 0x01 */
+
+	uint8 padding2;
+
+	uint8 pass[516];
+
+	UNISTR2 uni_user_name;    /* NULL - username unicode string */
+	UNISTR2 uni_full_name;    /* user's full name unicode string */
+	UNISTR2 uni_home_dir;     /* home directory unicode string */
+	UNISTR2 uni_dir_drive;    /* home directory drive unicode string */
+	UNISTR2 uni_logon_script; /* logon script unicode string */
+	UNISTR2 uni_profile_path; /* profile path unicode string */
+	UNISTR2 uni_acct_desc  ;  /* user description unicode string */
+	UNISTR2 uni_workstations; /* login from workstations unicode string */
+	UNISTR2 uni_comment;
+	UNISTR2 uni_munged_dial ; /* munged path name and dial-back tel no */
+
+	LOGON_HRS logon_hrs;
+
+} SAM_USER_INFO_23;
+
+/* SAM_USER_INFO_24 */
+typedef struct sam_user_info_24
+{
+	uint8 pass[516];
+	uint8 pw_len;
+} SAM_USER_INFO_24;
+
+/*
+ * NB. This structure is *definately* incorrect. It's my best guess
+ * currently for W2K SP2. The password field is encrypted in a different
+ * way than normal... And there are definately other problems. JRA.
+ */
+
+/* SAM_USER_INFO_25 */
+typedef struct sam_user_info_25
+{
+	/* TIMES MAY NOT IN RIGHT ORDER!!!! */
+	NTTIME logon_time;            /* logon time */
+	NTTIME logoff_time;           /* logoff time */
+	NTTIME kickoff_time;          /* kickoff time */
+	NTTIME pass_last_set_time;    /* password last set time */
+	NTTIME pass_can_change_time;  /* password can change time */
+	NTTIME pass_must_change_time; /* password must change time */
+
+	UNIHDR hdr_user_name;    /* NULL - user name unicode string header */
+	UNIHDR hdr_full_name;    /* user's full name unicode string header */
+	UNIHDR hdr_home_dir;     /* home directory unicode string header */
+	UNIHDR hdr_dir_drive;    /* home drive unicode string header */
+	UNIHDR hdr_logon_script; /* logon script unicode string header */
+	UNIHDR hdr_profile_path; /* profile path unicode string header */
+	UNIHDR hdr_acct_desc  ;  /* user description */
+	UNIHDR hdr_workstations; /* comma-separated workstations user can log in from */
+	UNIHDR hdr_comment;
+	UNIHDR hdr_munged_dial ; /* munged path name and dial-back tel number */
+
+	uint8 lm_pwd[16];    /* lm user passwords */
+	uint8 nt_pwd[16];    /* nt user passwords */
+
+	uint32 user_rid;      /* Primary User ID */
+	uint32 group_rid;     /* Primary Group ID */
+
+	uint32 acb_info; /* account info (ACB_xxxx bit-mask) */
+	uint32 fields_present;
+
+	uint16 logon_divs; /* 0x0000 00a8 which is 168 which is num hrs in a week */
+	/* uint8 pad[2] */
+	uint32 ptr_logon_hrs; /* pointer to logon hours */
+
+	/* Was unknown_5. */
+	uint16 bad_password_count;
+	uint16 logon_count;
+
+	uint8 padding1[6];
+		
+	uint8 passmustchange; /* 0x00 must change = 0x01 */
+
+	uint8 padding2;
+
+	uint8 pass[532];
+
+	UNISTR2 uni_user_name;    /* NULL - username unicode string */
+	UNISTR2 uni_full_name;    /* user's full name unicode string */
+	UNISTR2 uni_home_dir;     /* home directory unicode string */
+	UNISTR2 uni_dir_drive;    /* home directory drive unicode string */
+	UNISTR2 uni_logon_script; /* logon script unicode string */
+	UNISTR2 uni_profile_path; /* profile path unicode string */
+	UNISTR2 uni_acct_desc  ;  /* user description unicode string */
+	UNISTR2 uni_workstations; /* login from workstations unicode string */
+	UNISTR2 uni_comment;
+	UNISTR2 uni_munged_dial ; /* munged path name and dial-back tel no */
+	LOGON_HRS logon_hrs;
+
+} SAM_USER_INFO_25;
+
+/* SAM_USER_INFO_26 */
+typedef struct sam_user_info_26
+{
+	uint8 pass[532];
+	uint8 pw_len;
+} SAM_USER_INFO_26;
+
+
+/* SAM_USER_INFO_21 */
+typedef struct sam_user_info_21
+{
+	NTTIME logon_time;            /* logon time */
+	NTTIME logoff_time;           /* logoff time */
+	NTTIME kickoff_time;          /* kickoff time */
+	NTTIME pass_last_set_time;    /* password last set time */
+	NTTIME pass_can_change_time;  /* password can change time */
+	NTTIME pass_must_change_time; /* password must change time */
+
+	UNIHDR hdr_user_name;    /* username unicode string header */
+	UNIHDR hdr_full_name;    /* user's full name unicode string header */
+	UNIHDR hdr_home_dir;     /* home directory unicode string header */
+	UNIHDR hdr_dir_drive;    /* home drive unicode string header */
+	UNIHDR hdr_logon_script; /* logon script unicode string header */
+	UNIHDR hdr_profile_path; /* profile path unicode string header */
+	UNIHDR hdr_acct_desc  ;  /* user description */
+	UNIHDR hdr_workstations; /* comma-separated workstations user can log in from */
+	UNIHDR hdr_comment;
+	UNIHDR hdr_munged_dial ; /* munged path name and dial-back tel number */
+
+	uint8 lm_pwd[16];    /* lm user passwords */
+	uint8 nt_pwd[16];    /* nt user passwords */
+
+	uint32 user_rid;      /* Primary User ID */
+	uint32 group_rid;     /* Primary Group ID */
+
+	uint32 acb_info; /* account info (ACB_xxxx bit-mask) */
+
+	/* Was unknown_3 */
+	uint32 fields_present; /* 0x00ff ffff */
+
+	uint16 logon_divs; /* 0x0000 00a8 which is 168 which is num hrs in a week */
+	/* uint8 pad[2] */
+	uint32 ptr_logon_hrs; /* unknown pointer */
+
+	/* Was unknown_5. */
+	uint16 bad_password_count;
+	uint16 logon_count;
+
+	uint8 padding1[6];
+		
+	uint8 passmustchange; /* 0x00 must change = 0x01 */
+
+	uint8 padding2;
+
+	UNISTR2 uni_user_name;    /* username unicode string */
+	UNISTR2 uni_full_name;    /* user's full name unicode string */
+	UNISTR2 uni_home_dir;     /* home directory unicode string */
+	UNISTR2 uni_dir_drive;    /* home directory drive unicode string */
+	UNISTR2 uni_logon_script; /* logon script unicode string */
+	UNISTR2 uni_profile_path; /* profile path unicode string */
+	UNISTR2 uni_acct_desc  ;  /* user description unicode string */
+	UNISTR2 uni_workstations; /* login from workstations unicode string */
+	UNISTR2 uni_comment;
+	UNISTR2 uni_munged_dial ; /* munged path name and dial-back tel number */
+
+	LOGON_HRS logon_hrs;
+
+} SAM_USER_INFO_21;
+
+#define PASS_MUST_CHANGE_AT_NEXT_LOGON	0x01
+#define PASS_DONT_CHANGE_AT_NEXT_LOGON	0x00
+
+/* SAM_USER_INFO_20 */
+typedef struct sam_user_info_20
+{
+	UNIHDR hdr_munged_dial ; /* munged path name and dial-back tel number */
+
+	UNISTR2 uni_munged_dial ; /* munged path name and dial-back tel number */
+
+} SAM_USER_INFO_20;
+
+/* SAM_USER_INFO_18 */
+typedef struct sam_user_info_18
+{
+	uint8 lm_pwd[16];    /* lm user passwords */
+	uint8 nt_pwd[16];    /* nt user passwords */
+
+	uint8 lm_pwd_active; 
+	uint8 nt_pwd_active; 
+
+} SAM_USER_INFO_18;
+
+/* SAM_USER_INFO_17 */
+typedef struct sam_user_info_17
+{
+	uint8  padding_0[16];  /* 0 - padding 16 bytes */
+	NTTIME expiry;         /* expiry time or something? */
+	uint8  padding_1[24];  /* 0 - padding 24 bytes */
+
+	UNIHDR hdr_mach_acct;  /* unicode header for machine account */
+	uint32 padding_2;      /* 0 - padding 4 bytes */
+
+	uint32 ptr_1;          /* pointer */
+	uint8  padding_3[32];  /* 0 - padding 32 bytes */
+	uint32 padding_4;      /* 0 - padding 4 bytes */
+
+	uint32 ptr_2;          /* pointer */
+	uint32 padding_5;      /* 0 - padding 4 bytes */
+
+	uint32 ptr_3;          /* pointer */
+	uint8  padding_6[32];  /* 0 - padding 32 bytes */
+
+	uint32 rid_user;       /* user RID */
+	uint32 rid_group;      /* group RID */
+
+	uint16 acct_ctrl;      /* 0080 - ACB_XXXX */
+	uint16 unknown_3;      /* 16 bit padding */
+
+	uint16 unknown_4;      /* 0x003f      - 16 bit unknown */
+	uint16 unknown_5;      /* 0x003c      - 16 bit unknown */
+
+	uint8  padding_7[16];  /* 0 - padding 16 bytes */
+	uint32 padding_8;      /* 0 - padding 4 bytes */
+	
+	UNISTR2 uni_mach_acct; /* unicode string for machine account */
+
+	uint8  padding_9[48];  /* 0 - padding 48 bytes */
+
+} SAM_USER_INFO_17;
+
+
+/* SAM_USER_INFO_16 */
+typedef struct sam_user_info_16
+{
+	uint32 acb_info;
+
+} SAM_USER_INFO_16;
+
+
+/* SAM_USER_INFO_7 */
+typedef struct sam_user_info_7
+{
+	UNIHDR hdr_name;  /* unicode header for name */
+	UNISTR2 uni_name; /* unicode string for name */
+
+} SAM_USER_INFO_7;
+
+
+/* SAM_USER_INFO_9 */
+typedef struct sam_user_info_9
+{
+	uint32 rid_group;     /* Primary Group RID */
+} SAM_USER_INFO_9;
+
+
+/* SAMR_Q_CLOSE_HND - probably a policy handle close */
+typedef struct q_samr_close_hnd_info
+{
+    POLICY_HND pol;          /* policy handle */
+
+} SAMR_Q_CLOSE_HND;
+
+
+/* SAMR_R_CLOSE_HND - probably a policy handle close */
+typedef struct r_samr_close_hnd_info
+{
+	POLICY_HND pol;       /* policy handle */
+	NTSTATUS status;         /* return status */
+
+} SAMR_R_CLOSE_HND;
+
+
+/****************************************************************************
+SAMR_Q_GET_USRDOM_PWINFO - a "set user info" occurs just after this
+*****************************************************************************/
+
+/* SAMR_Q_GET_USRDOM_PWINFO */
+typedef struct q_samr_usrdom_pwinfo_info
+{
+	POLICY_HND user_pol;          /* policy handle */
+
+} SAMR_Q_GET_USRDOM_PWINFO;
+
+
+/****************************************************************************
+SAMR_R_GET_USRDOM_PWINFO - a "set user info" occurs just after this
+*****************************************************************************/
+
+/* SAMR_R_GET_USRDOM_PWINFO */
+typedef struct r_samr_usrdom_pwinfo_info
+{
+	uint16 min_pwd_length;
+	uint16 unknown_1; /* 0x0016 or 0x0015 */
+	uint32 password_properties;
+	NTSTATUS status; 
+
+} SAMR_R_GET_USRDOM_PWINFO;
+
+/****************************************************************************
+SAMR_Q_SET_SEC_OBJ - info level 4.
+*****************************************************************************/
+
+/* SAMR_Q_SET_SEC_OBJ - */
+typedef struct q_samr_set_sec_obj_info
+{
+	POLICY_HND pol;          /* policy handle */
+	uint32 sec_info;         /* xxxx_SECURITY_INFORMATION 0x0000 0004 */
+	SEC_DESC_BUF *buf;
+
+} SAMR_Q_SET_SEC_OBJ;
+
+/* SAMR_R_SET_SEC_OBJ - */
+typedef struct r_samr_set_sec_obj_info
+{
+	NTSTATUS status;         /* return status */
+
+} SAMR_R_SET_SEC_OBJ;
+
+
+/****************************************************************************
+SAMR_Q_QUERY_SEC_OBJ - info level 4.  returns SIDs.
+*****************************************************************************/
+
+/* SAMR_Q_QUERY_SEC_OBJ - probably get domain info... */
+typedef struct q_samr_query_sec_obj_info
+{
+	POLICY_HND user_pol;          /* policy handle */
+	uint32 sec_info;     /* xxxx_SECURITY_INFORMATION 0x0000 0004 */
+
+} SAMR_Q_QUERY_SEC_OBJ;
+
+/* SAMR_R_QUERY_SEC_OBJ - probably an open */
+typedef struct r_samr_query_sec_obj_info
+{
+	uint32 ptr;
+	SEC_DESC_BUF *buf;
+
+	NTSTATUS status;         /* return status */
+
+} SAMR_R_QUERY_SEC_OBJ;
+
+
+/****************************************************************************
+SAMR_Q_QUERY_DOMAIN_INFO - probably a query on domain group info.
+*****************************************************************************/
+
+/* SAMR_Q_QUERY_DOMAIN_INFO - */
+typedef struct q_samr_query_domain_info
+{
+	POLICY_HND domain_pol;   /* policy handle */
+	uint16 switch_value;     /* 0x0002, 0x0001 */
+
+} SAMR_Q_QUERY_DOMAIN_INFO;
+
+typedef struct sam_unknown_info_1_inf
+{
+	uint16 min_length_password;
+	uint16 password_history;
+	uint32 password_properties;
+	NTTIME expire;
+	NTTIME min_passwordage;
+
+} SAM_UNK_INFO_1;
+
+typedef struct sam_unknown_info_2_inf
+{
+	NTTIME logout; /* whether users are forcibly disconnected when logon hours expire */
+	UNIHDR hdr_comment; /* comment according to samba4 idl */
+	UNIHDR hdr_domain; /* domain name unicode header */
+	UNIHDR hdr_server; /* server name unicode header */
+
+	/* put all the data in here, at the moment, including what the above
+	   pointer is referring to
+	 */
+
+	uint64 seq_num;
+	
+	uint32 unknown_4; /* 0x0000 0001 */
+	uint32 server_role;
+	uint32 unknown_6; /* 0x0000 0001 */
+	uint32 num_domain_usrs; /* number of users in domain */
+	uint32 num_domain_grps; /* number of domain groups in domain */
+	uint32 num_local_grps; /* number of local groups in domain */
+
+	UNISTR2 uni_comment; /* comment unicode string */
+	UNISTR2 uni_domain; /* domain name unicode string */
+	UNISTR2 uni_server; /* server name unicode string */
+
+} SAM_UNK_INFO_2;
+
+typedef struct sam_unknown_info_3_info
+{
+	NTTIME logout;	
+	/* 0x8000 0000 */ /* DON'T forcibly disconnect remote users from server when logon hours expire*/
+	/* 0x0000 0000 */ /* forcibly disconnect remote users from server when logon hours expire*/
+
+} SAM_UNK_INFO_3;
+
+typedef struct sam_unknown_info_4_inf
+{
+	UNIHDR hdr_comment; /* comment according to samba4 idl */
+	UNISTR2 uni_comment; /* comment unicode string */
+
+} SAM_UNK_INFO_4;
+
+typedef struct sam_unknown_info_5_inf
+{
+	UNIHDR hdr_domain; /* domain name unicode header */
+	UNISTR2 uni_domain; /* domain name unicode string */
+
+} SAM_UNK_INFO_5;
+
+typedef struct sam_unknown_info_6_info
+{
+	UNIHDR hdr_server; /* server name unicode header */
+	UNISTR2 uni_server; /* server name unicode string */
+
+} SAM_UNK_INFO_6;
+
+typedef struct sam_unknown_info_7_info
+{
+	uint16 server_role;
+
+} SAM_UNK_INFO_7;
+
+typedef struct sam_unknown_info_8_info
+{
+	uint64 seq_num;
+	NTTIME domain_create_time;
+
+} SAM_UNK_INFO_8;
+
+typedef struct sam_unknown_info_9_info
+{
+	uint32 unknown;
+
+} SAM_UNK_INFO_9;
+
+typedef struct sam_unknown_info_12_inf
+{
+	NTTIME duration;
+	NTTIME reset_count;
+	uint16 bad_attempt_lockout;
+
+} SAM_UNK_INFO_12;
+
+typedef struct sam_unknown_info_13_info
+{
+	uint64 seq_num;
+	NTTIME domain_create_time;
+	uint32 unknown1;
+	uint32 unknown2;
+
+} SAM_UNK_INFO_13;
+
+typedef struct sam_unknown_ctr_info
+{
+	union
+	{
+		SAM_UNK_INFO_1 inf1;
+		SAM_UNK_INFO_2 inf2;
+		SAM_UNK_INFO_3 inf3;
+		SAM_UNK_INFO_4 inf4;
+		SAM_UNK_INFO_5 inf5;
+		SAM_UNK_INFO_6 inf6;
+		SAM_UNK_INFO_7 inf7;
+		SAM_UNK_INFO_8 inf8;
+		SAM_UNK_INFO_9 inf9;
+		SAM_UNK_INFO_12 inf12;
+		SAM_UNK_INFO_13 inf13;
+
+	} info;
+
+} SAM_UNK_CTR;
+
+
+/* SAMR_R_QUERY_DOMAIN_INFO - */
+typedef struct r_samr_query_domain_info
+{
+	uint32 ptr_0;
+	uint16 switch_value; /* same as in query */
+
+	SAM_UNK_CTR *ctr;
+
+	NTSTATUS status;         /* return status */
+
+} SAMR_R_QUERY_DOMAIN_INFO;
+
+
+/* SAMR_Q_LOOKUP_DOMAIN - obtain SID for a local domain */
+typedef struct q_samr_lookup_domain_info
+{
+	POLICY_HND connect_pol;
+
+	UNIHDR  hdr_domain;
+	UNISTR2 uni_domain;
+
+} SAMR_Q_LOOKUP_DOMAIN;
+
+
+/* SAMR_R_LOOKUP_DOMAIN */
+typedef struct r_samr_lookup_domain_info
+{
+	uint32   ptr_sid;
+	DOM_SID2 dom_sid;
+
+	NTSTATUS status;
+
+} SAMR_R_LOOKUP_DOMAIN;
+
+
+/****************************************************************************
+SAMR_Q_OPEN_DOMAIN - unknown_0 values seen associated with SIDs:
+
+0x0000 03f1 and a specific   domain sid - S-1-5-21-44c01ca6-797e5c3d-33f83fd0
+0x0000 0200 and a specific   domain sid - S-1-5-21-44c01ca6-797e5c3d-33f83fd0
+*****************************************************************************/
+
+/* SAMR_Q_OPEN_DOMAIN */
+typedef struct q_samr_open_domain_info
+{
+	POLICY_HND pol;   /* policy handle */
+	uint32 flags;               /* 0x2000 0000; 0x0000 0211; 0x0000 0280; 0x0000 0200 - flags? */
+	DOM_SID2 dom_sid;         /* domain SID */
+
+} SAMR_Q_OPEN_DOMAIN;
+
+
+/* SAMR_R_OPEN_DOMAIN - probably an open */
+typedef struct r_samr_open_domain_info
+{
+	POLICY_HND domain_pol; /* policy handle associated with the SID */
+	NTSTATUS status;         /* return status */
+
+} SAMR_R_OPEN_DOMAIN;
+
+#define MAX_SAM_ENTRIES_W2K 0x400
+#define MAX_SAM_ENTRIES_W95 50
+/* The following should be the greater of the preceeding two. */
+#define MAX_SAM_ENTRIES MAX_SAM_ENTRIES_W2K
+
+typedef struct samr_entry_info
+{
+	uint32 rid;
+	UNIHDR hdr_name;
+
+} SAM_ENTRY;
+
+
+/* SAMR_Q_ENUM_DOMAINS - SAM rids and names */
+typedef struct q_samr_enum_domains_info
+{
+	POLICY_HND pol;     /* policy handle */
+
+	uint32 start_idx;   /* enumeration handle */
+	uint32 max_size;    /* 0x0000 ffff */
+
+} SAMR_Q_ENUM_DOMAINS;
+
+/* SAMR_R_ENUM_DOMAINS - SAM rids and Domain names */
+typedef struct r_samr_enum_domains_info
+{
+	uint32 next_idx;     /* next starting index required for enum */
+	uint32 ptr_entries1;  
+
+	uint32 num_entries2;
+	uint32 ptr_entries2;
+
+	uint32 num_entries3;
+
+	SAM_ENTRY *sam;
+	UNISTR2 *uni_dom_name;
+
+	uint32 num_entries4;
+
+	NTSTATUS status;
+
+} SAMR_R_ENUM_DOMAINS;
+
+/* SAMR_Q_ENUM_DOM_USERS - SAM rids and names */
+typedef struct q_samr_enum_dom_users_info
+{
+	POLICY_HND pol;          /* policy handle */
+
+	uint32 start_idx;   /* number of values (0 indicates unlimited?) */
+	uint32 acb_mask;          /* 0x0000 indicates all */
+
+	uint32 max_size;              /* 0x0000 ffff */
+
+} SAMR_Q_ENUM_DOM_USERS;
+
+
+/* SAMR_R_ENUM_DOM_USERS - SAM rids and names */
+typedef struct r_samr_enum_dom_users_info
+{
+	uint32 next_idx;     /* next starting index required for enum */
+	uint32 ptr_entries1;  
+
+	uint32 num_entries2;
+	uint32 ptr_entries2;
+
+	uint32 num_entries3;
+
+	SAM_ENTRY *sam;
+	UNISTR2 *uni_acct_name;
+
+	uint32 num_entries4;
+
+	NTSTATUS status;
+
+} SAMR_R_ENUM_DOM_USERS;
+
+
+/* SAMR_Q_ENUM_DOM_GROUPS - SAM rids and names */
+typedef struct q_samr_enum_dom_groups_info
+{
+	POLICY_HND pol;          /* policy handle */
+
+	/* this is possibly an enumeration context handle... */
+	uint32 start_idx;         /* 0x0000 0000 */
+
+	uint32 max_size;              /* 0x0000 ffff */
+
+} SAMR_Q_ENUM_DOM_GROUPS;
+
+
+/* SAMR_R_ENUM_DOM_GROUPS - SAM rids and names */
+typedef struct r_samr_enum_dom_groups_info
+{
+	uint32 next_idx;
+	uint32 ptr_entries1;
+
+	uint32 num_entries2;
+	uint32 ptr_entries2;
+
+	uint32 num_entries3;
+
+	SAM_ENTRY *sam;
+	UNISTR2 *uni_grp_name;
+
+	uint32 num_entries4;
+
+	NTSTATUS status;
+
+} SAMR_R_ENUM_DOM_GROUPS;
+
+
+/* SAMR_Q_ENUM_DOM_ALIASES - SAM rids and names */
+typedef struct q_samr_enum_dom_aliases_info
+{
+	POLICY_HND pol;          /* policy handle */
+
+	/* this is possibly an enumeration context handle... */
+	uint32 start_idx;         /* 0x0000 0000 */
+
+	uint32 max_size;              /* 0x0000 ffff */
+
+} SAMR_Q_ENUM_DOM_ALIASES;
+
+
+/* SAMR_R_ENUM_DOM_ALIASES - SAM rids and names */
+typedef struct r_samr_enum_dom_aliases_info
+{
+	uint32 next_idx;
+	uint32 ptr_entries1;
+
+	uint32 num_entries2;
+	uint32 ptr_entries2;
+
+	uint32 num_entries3;
+
+	SAM_ENTRY *sam;
+	UNISTR2 *uni_grp_name;
+
+	uint32 num_entries4;
+
+	NTSTATUS status;
+
+} SAMR_R_ENUM_DOM_ALIASES;
+
+
+/* -- Level 1 Display Info - User Information -- */
+
+typedef struct samr_entry_info1
+{
+	uint32 user_idx;
+
+	uint32 rid_user;
+	uint32 acb_info;
+
+	UNIHDR hdr_acct_name;
+	UNIHDR hdr_user_name;
+	UNIHDR hdr_user_desc;
+
+} SAM_ENTRY1;
+
+typedef struct samr_str_entry_info1
+{
+	UNISTR2 uni_acct_name;
+	UNISTR2 uni_full_name;
+	UNISTR2 uni_acct_desc;
+
+} SAM_STR1;
+
+typedef struct sam_entry_info_1
+{
+	SAM_ENTRY1 *sam;
+	SAM_STR1   *str;
+
+} SAM_DISPINFO_1;
+
+
+/* -- Level 2 Display Info - Trust Account Information -- */
+
+typedef struct samr_entry_info2
+{
+	uint32 user_idx;
+
+	uint32 rid_user;
+	uint32 acb_info;
+
+	UNIHDR hdr_srv_name;
+	UNIHDR hdr_srv_desc;
+
+} SAM_ENTRY2;
+
+typedef struct samr_str_entry_info2
+{
+	UNISTR2 uni_srv_name;
+	UNISTR2 uni_srv_desc;
+
+} SAM_STR2;
+
+typedef struct sam_entry_info_2
+{
+	SAM_ENTRY2 *sam;
+	SAM_STR2   *str;
+
+} SAM_DISPINFO_2;
+
+
+/* -- Level 3 Display Info - Domain Group Information -- */
+
+typedef struct samr_entry_info3
+{
+	uint32 grp_idx;
+
+	uint32 rid_grp;
+	uint32 attr;     /* SE_GROUP_xxx, usually 7 */
+
+	UNIHDR hdr_grp_name;
+	UNIHDR hdr_grp_desc;
+
+} SAM_ENTRY3;
+
+typedef struct samr_str_entry_info3
+{
+	UNISTR2 uni_grp_name;
+	UNISTR2 uni_grp_desc;
+
+} SAM_STR3;
+
+typedef struct sam_entry_info_3
+{
+	SAM_ENTRY3 *sam;
+	SAM_STR3   *str;
+
+} SAM_DISPINFO_3;
+
+
+/* -- Level 4 Display Info - User List (ASCII) -- */
+
+typedef struct samr_entry_info4
+{
+	uint32 user_idx;
+	STRHDR hdr_acct_name;
+
+} SAM_ENTRY4;
+
+typedef struct samr_str_entry_info4
+{
+	STRING2 acct_name;
+
+} SAM_STR4;
+
+typedef struct sam_entry_info_4
+{
+	SAM_ENTRY4 *sam;
+	SAM_STR4   *str;
+
+} SAM_DISPINFO_4;
+
+
+/* -- Level 5 Display Info - Group List (ASCII) -- */
+
+typedef struct samr_entry_info5
+{
+	uint32 grp_idx;
+	STRHDR hdr_grp_name;
+
+} SAM_ENTRY5;
+
+typedef struct samr_str_entry_info5
+{
+	STRING2 grp_name;
+
+} SAM_STR5;
+
+typedef struct sam_entry_info_5
+{
+	SAM_ENTRY5 *sam;
+	SAM_STR5   *str;
+
+} SAM_DISPINFO_5;
+
+
+typedef struct sam_dispinfo_ctr_info
+{
+	union
+	{
+		SAM_DISPINFO_1 *info1; /* users/names/descriptions */
+		SAM_DISPINFO_2 *info2; /* trust accounts */
+		SAM_DISPINFO_3 *info3; /* domain groups/descriptions */
+		SAM_DISPINFO_4 *info4; /* user list (ASCII) - used by Win95 */
+		SAM_DISPINFO_5 *info5; /* group list (ASCII) */
+		void       *info; /* allows assignment without typecasting, */
+
+	} sam;
+
+} SAM_DISPINFO_CTR;
+
+
+/* SAMR_Q_QUERY_DISPINFO - SAM rids, names and descriptions */
+typedef struct q_samr_query_disp_info
+{
+	POLICY_HND domain_pol;
+
+	uint16 switch_level;    /* see SAM_DISPINFO_CTR above */
+	/* align */
+
+	uint32 start_idx;       /* start enumeration index */
+	uint32 max_entries;     /* maximum number of entries to return */
+	uint32 max_size;        /* recommended data size; if exceeded server
+				   should return STATUS_MORE_ENTRIES */
+
+} SAMR_Q_QUERY_DISPINFO;
+
+
+/* SAMR_R_QUERY_DISPINFO  */
+typedef struct r_samr_query_dispinfo_info
+{
+	uint32 total_size;     /* total data size for all matching entries
+				  (0 = uncalculated) */
+	uint32 data_size;      /* actual data size returned = size of SAM_ENTRY
+				  structures + total length of strings */
+
+	uint16 switch_level;   /* see SAM_DISPINFO_CTR above */
+	/* align */
+
+	uint32 num_entries;    /* number of entries returned */
+	uint32 ptr_entries;
+	uint32 num_entries2;
+
+	SAM_DISPINFO_CTR *ctr;
+
+	NTSTATUS status;
+
+} SAMR_R_QUERY_DISPINFO;
+
+/* SAMR_Q_GET_DISPENUM_INDEX */
+typedef struct q_samr_get_dispenum_index
+{
+	POLICY_HND domain_pol;
+	uint16 switch_level;
+	LSA_STRING name;
+
+} SAMR_Q_GET_DISPENUM_INDEX;
+
+/* SAMR_R_GET_DISPENUM_INDEX */
+typedef struct r_samr_get_dispenum_index
+{
+	uint32 idx;
+	NTSTATUS status;
+	
+} SAMR_R_GET_DISPENUM_INDEX;
+
+/* SAMR_Q_DELETE_DOM_GROUP - delete domain group */
+typedef struct q_samr_delete_dom_group_info
+{
+    POLICY_HND group_pol;          /* policy handle */
+
+} SAMR_Q_DELETE_DOM_GROUP;
+
+
+/* SAMR_R_DELETE_DOM_GROUP - delete domain group */
+typedef struct r_samr_delete_dom_group_info
+{
+	POLICY_HND pol;       /* policy handle */
+	NTSTATUS status;        /* return status */
+
+} SAMR_R_DELETE_DOM_GROUP;
+
+
+/* SAMR_Q_CREATE_DOM_GROUP - SAM create group */
+typedef struct q_samr_create_dom_group_info
+{
+	POLICY_HND pol;        /* policy handle */
+
+	UNIHDR hdr_acct_desc;
+	UNISTR2 uni_acct_desc;
+
+	uint32 access_mask;    
+
+} SAMR_Q_CREATE_DOM_GROUP;
+
+/* SAMR_R_CREATE_DOM_GROUP - SAM create group */
+typedef struct r_samr_create_dom_group_info
+{
+	POLICY_HND pol;        /* policy handle */
+
+	uint32 rid;    
+	NTSTATUS status;    
+
+} SAMR_R_CREATE_DOM_GROUP;
+
+/* SAMR_Q_QUERY_GROUPINFO - SAM Group Info */
+typedef struct q_samr_query_group_info
+{
+	POLICY_HND pol;        /* policy handle */
+
+	uint16 switch_level;    /* 0x0001 seen */
+
+} SAMR_Q_QUERY_GROUPINFO;
+
+typedef struct samr_group_info1
+{
+	UNIHDR hdr_acct_name;
+
+	uint32 group_attr; /* 0x0000 0003 - group attribute */
+	uint32 num_members; /* 0x0000 0001 - number of group members? */
+
+	UNIHDR hdr_acct_desc;
+
+	UNISTR2 uni_acct_name;
+	UNISTR2 uni_acct_desc;
+
+} GROUP_INFO1;
+
+typedef struct samr_group_info2
+{
+	uint16 level;
+	UNIHDR hdr_acct_name;
+	UNISTR2 uni_acct_name;
+
+} GROUP_INFO2;
+
+typedef struct samr_group_info3
+{
+	uint32 group_attr; /* 0x0000 0003 - group attribute */
+
+} GROUP_INFO3;
+
+typedef struct samr_group_info4
+{
+	uint16 level;
+	UNIHDR hdr_acct_desc;
+	UNISTR2 uni_acct_desc;
+
+} GROUP_INFO4;
+
+typedef struct samr_group_info5
+{
+	UNIHDR hdr_acct_name;
+
+	uint32 group_attr; /* 0x0000 0003 - group attribute */
+	uint32 num_members; /* 0x0000 0001 - number of group members? */
+
+	UNIHDR hdr_acct_desc;
+
+	UNISTR2 uni_acct_name;
+	UNISTR2 uni_acct_desc;
+
+} GROUP_INFO5;
+
+
+/* GROUP_INFO_CTR */
+typedef struct group_info_ctr
+{
+	uint16 switch_value1;
+
+	union
+ 	{
+		GROUP_INFO1 info1;
+		GROUP_INFO2 info2;
+		GROUP_INFO3 info3;
+		GROUP_INFO4 info4;
+		GROUP_INFO5 info5;
+	} group;
+
+} GROUP_INFO_CTR;
+
+/* SAMR_R_QUERY_GROUPINFO - SAM Group Info */
+typedef struct r_samr_query_groupinfo_info
+{
+	uint32 ptr;        
+	GROUP_INFO_CTR *ctr;
+
+	NTSTATUS status;
+
+} SAMR_R_QUERY_GROUPINFO;
+
+
+/* SAMR_Q_SET_GROUPINFO - SAM Group Info */
+typedef struct q_samr_set_group_info
+{
+	POLICY_HND pol;        /* policy handle */
+	GROUP_INFO_CTR *ctr;
+
+} SAMR_Q_SET_GROUPINFO;
+
+/* SAMR_R_SET_GROUPINFO - SAM Group Info */
+typedef struct r_samr_set_group_info
+{
+	NTSTATUS status;
+
+} SAMR_R_SET_GROUPINFO;
+
+
+/* SAMR_Q_DELETE_DOM_ALIAS - delete domain alias */
+typedef struct q_samr_delete_dom_alias_info
+{
+    POLICY_HND alias_pol;          /* policy handle */
+
+} SAMR_Q_DELETE_DOM_ALIAS;
+
+
+/* SAMR_R_DELETE_DOM_ALIAS - delete domain alias */
+typedef struct r_samr_delete_dom_alias_info
+{
+	POLICY_HND pol;       /* policy handle */
+	NTSTATUS status;        /* return status */
+
+} SAMR_R_DELETE_DOM_ALIAS;
+
+
+/* SAMR_Q_CREATE_DOM_ALIAS - SAM create alias */
+typedef struct q_samr_create_dom_alias_info
+{
+	POLICY_HND dom_pol;        /* policy handle */
+
+	UNIHDR hdr_acct_desc;
+	UNISTR2 uni_acct_desc;
+
+	uint32 access_mask;    /* 0x001f000f */
+
+} SAMR_Q_CREATE_DOM_ALIAS;
+
+/* SAMR_R_CREATE_DOM_ALIAS - SAM create alias */
+typedef struct r_samr_create_dom_alias_info
+{
+	POLICY_HND alias_pol;        /* policy handle */
+
+	uint32 rid;    
+	NTSTATUS status;    
+
+} SAMR_R_CREATE_DOM_ALIAS;
+
+
+/********************************************************/
+
+typedef struct {
+	UNISTR4 name;
+	UNISTR4 description;
+	uint32 num_member;
+} ALIAS_INFO1;
+
+typedef struct {
+	UNISTR4 name;
+} ALIAS_INFO2;
+
+typedef struct {
+	UNISTR4 description;
+} ALIAS_INFO3;
+
+typedef struct {
+	POLICY_HND pol;        /* policy handle */
+	uint16 level;    /* 0x0003 seen */
+} SAMR_Q_QUERY_ALIASINFO;
+
+typedef struct {
+	uint16 level;
+	union {
+		ALIAS_INFO1 info1;
+		ALIAS_INFO2 info2;
+		ALIAS_INFO3 info3;
+	} alias;
+} ALIAS_INFO_CTR;
+
+typedef struct {
+	ALIAS_INFO_CTR *ctr;
+	NTSTATUS status;
+} SAMR_R_QUERY_ALIASINFO;
+
+
+/********************************************************/
+
+typedef struct {
+	POLICY_HND alias_pol;        /* policy handle */
+	ALIAS_INFO_CTR ctr;
+} SAMR_Q_SET_ALIASINFO;
+
+typedef struct {
+	NTSTATUS status;
+} SAMR_R_SET_ALIASINFO;
+
+
+/********************************************************/
+
+/* SAMR_Q_QUERY_USERGROUPS - */
+typedef struct q_samr_query_usergroup_info
+{
+	POLICY_HND pol;          /* policy handle associated with unknown id */
+
+} SAMR_Q_QUERY_USERGROUPS;
+
+/* SAMR_R_QUERY_USERGROUPS - probably a get sam info */
+typedef struct r_samr_query_usergroup_info
+{
+	uint32 ptr_0;            /* pointer */
+	uint32 num_entries;      /* number of RID groups */
+	uint32 ptr_1;            /* pointer */
+	uint32 num_entries2;     /* number of RID groups */
+
+	DOM_GID *gid; /* group info */
+
+	NTSTATUS status;         /* return status */
+
+} SAMR_R_QUERY_USERGROUPS;
+
+/* SAM_USERINFO_CTR - sam user info */
+typedef struct sam_userinfo_ctr_info
+{
+	uint16 switch_value;      
+
+	union
+	{
+		SAM_USER_INFO_7  *id7;
+		SAM_USER_INFO_9  *id9;
+		SAM_USER_INFO_16 *id16;
+		SAM_USER_INFO_17 *id17;
+		SAM_USER_INFO_18 *id18;
+		SAM_USER_INFO_20 *id20;
+		SAM_USER_INFO_21 *id21;
+		SAM_USER_INFO_23 *id23;
+		SAM_USER_INFO_24 *id24;
+		SAM_USER_INFO_25 *id25;
+		SAM_USER_INFO_26 *id26;
+		void* id; /* to make typecasting easy */
+
+	} info;
+
+} SAM_USERINFO_CTR;
+
+
+/* SAMR_Q_SET_USERINFO2 - set sam info */
+typedef struct q_samr_set_user_info2
+{
+	POLICY_HND pol;          /* policy handle associated with user */
+	uint16 switch_value;      /* 0x0010 */
+
+	SAM_USERINFO_CTR *ctr;
+
+} SAMR_Q_SET_USERINFO2;
+
+/* SAMR_R_SET_USERINFO2 - set sam info */
+typedef struct r_samr_set_user_info2
+{
+	NTSTATUS status;         /* return status */
+
+} SAMR_R_SET_USERINFO2;
+
+/* SAMR_Q_SET_USERINFO - set sam info */
+typedef struct q_samr_set_user_info
+{
+	POLICY_HND pol;          /* policy handle associated with user */
+	uint16 switch_value;
+	SAM_USERINFO_CTR *ctr;
+
+} SAMR_Q_SET_USERINFO;
+
+/* SAMR_R_SET_USERINFO - set sam info */
+typedef struct r_samr_set_user_info
+{
+	NTSTATUS status;         /* return status */
+
+} SAMR_R_SET_USERINFO;
+
+
+/* SAMR_Q_QUERY_USERINFO - probably a get sam info */
+typedef struct q_samr_query_user_info
+{
+	POLICY_HND pol;          /* policy handle associated with unknown id */
+	uint16 switch_value;         /* 0x0015, 0x0011 or 0x0010 - 16 bit unknown */
+
+} SAMR_Q_QUERY_USERINFO;
+
+/* SAMR_R_QUERY_USERINFO - probably a get sam info */
+typedef struct r_samr_query_user_info
+{
+	uint32 ptr;            /* pointer */
+	SAM_USERINFO_CTR *ctr;
+
+	NTSTATUS status;         /* return status */
+
+} SAMR_R_QUERY_USERINFO;
+
+
+/****************************************************************************
+SAMR_Q_QUERY_USERALIASES - do a conversion from name to RID.
+
+the policy handle allocated by an "samr open secret" call is associated
+with a SID.  this policy handle is what is queried here, *not* the SID
+itself.  the response to the lookup rids is relative to this SID.
+*****************************************************************************/
+/* SAMR_Q_QUERY_USERALIASES */
+typedef struct q_samr_query_useraliases_info
+{
+	POLICY_HND pol;       /* policy handle */
+
+	uint32 num_sids1;      /* number of rids being looked up */
+	uint32 ptr;            /* buffer pointer */
+	uint32 num_sids2;      /* number of rids being looked up */
+
+	uint32   *ptr_sid; /* pointers to sids to be looked up */
+	DOM_SID2 *sid    ; /* sids to be looked up. */
+
+} SAMR_Q_QUERY_USERALIASES;
+
+
+/* SAMR_R_QUERY_USERALIASES */
+typedef struct r_samr_query_useraliases_info
+{
+	uint32 num_entries;
+	uint32 ptr; /* undocumented buffer pointer */
+
+	uint32 num_entries2; 
+	uint32 *rid; /* domain RIDs being looked up */
+
+	NTSTATUS status; /* return code */
+
+} SAMR_R_QUERY_USERALIASES;
+
+
+/****************************************************************************
+SAMR_Q_LOOKUP_NAMES - do a conversion from Names to RIDs+types.
+*****************************************************************************/
+/* SAMR_Q_LOOKUP_NAMES */
+typedef struct q_samr_lookup_names_info
+{
+	POLICY_HND pol;       /* policy handle */
+
+	uint32 num_names1;      /* number of names being looked up */
+	uint32 flags;           /* 0x0000 03e8 - unknown */
+	uint32 ptr;            /* 0x0000 0000 - 32 bit unknown */
+	uint32 num_names2;      /* number of names being looked up */
+
+	UNIHDR  *hdr_name; /* unicode account name header */
+	UNISTR2 *uni_name; /* unicode account name string */
+
+} SAMR_Q_LOOKUP_NAMES;
+
+
+/* SAMR_R_LOOKUP_NAMES */
+typedef struct r_samr_lookup_names_info
+{
+	uint32 num_rids1;      /* number of aliases being looked up */
+	uint32 ptr_rids;       /* pointer to aliases */
+	uint32 num_rids2;      /* number of aliases being looked up */
+
+	uint32 *rids; /* rids */
+
+	uint32 num_types1;      /* number of users in aliases being looked up */
+	uint32 ptr_types;       /* pointer to users in aliases */
+	uint32 num_types2;      /* number of users in aliases being looked up */
+
+	uint32 *types; /* SID_ENUM type */
+
+	NTSTATUS status; /* return code */
+
+} SAMR_R_LOOKUP_NAMES;
+
+
+/****************************************************************************
+SAMR_Q_LOOKUP_RIDS - do a conversion from RID groups to something.
+
+called to resolve domain RID groups.
+*****************************************************************************/
+/* SAMR_Q_LOOKUP_RIDS */
+typedef struct q_samr_lookup_rids_info
+{
+	POLICY_HND pol;       /* policy handle */
+
+	uint32 num_rids1;      /* number of rids being looked up */
+	uint32 flags;          /* 0x0000 03e8 - unknown */
+	uint32 ptr;            /* 0x0000 0000 - 32 bit unknown */
+	uint32 num_rids2;      /* number of rids being looked up */
+
+	uint32 *rid; /* domain RIDs being looked up */
+
+} SAMR_Q_LOOKUP_RIDS;
+
+
+/****************************************************************************
+SAMR_R_LOOKUP_RIDS - do a conversion from group RID to names
+
+*****************************************************************************/
+/* SAMR_R_LOOKUP_RIDS */
+typedef struct r_samr_lookup_rids_info
+{
+	uint32 num_names1;      /* number of aliases being looked up */
+	uint32 ptr_names;       /* pointer to aliases */
+	uint32 num_names2;      /* number of aliases being looked up */
+
+	UNIHDR  *hdr_name; /* unicode account name header */
+	UNISTR2 *uni_name; /* unicode account name string */
+
+	uint32 num_types1;      /* number of users in aliases being looked up */
+	uint32 ptr_types;       /* pointer to users in aliases */
+	uint32 num_types2;      /* number of users in aliases being looked up */
+
+	uint32 *type; /* SID_ENUM type */
+
+	NTSTATUS status;
+
+} SAMR_R_LOOKUP_RIDS;
+
+
+/* SAMR_Q_OPEN_USER - probably an open */
+typedef struct q_samr_open_user_info
+{
+	POLICY_HND domain_pol;       /* policy handle */
+	uint32 access_mask;     /* 32 bit unknown - 0x02011b */
+	uint32 user_rid;      /* user RID */
+
+} SAMR_Q_OPEN_USER;
+
+
+/* SAMR_R_OPEN_USER - probably an open */
+typedef struct r_samr_open_user_info
+{
+	POLICY_HND user_pol;       /* policy handle associated with unknown id */
+	NTSTATUS status;         /* return status */
+
+} SAMR_R_OPEN_USER;
+
+
+/* SAMR_Q_CREATE_USER - probably a create */
+typedef struct q_samr_create_user_info
+{
+	POLICY_HND domain_pol;       /* policy handle */
+
+	UNIHDR  hdr_name;       /* unicode account name header */
+	UNISTR2 uni_name;       /* unicode account name */
+
+	uint32 acb_info;      /* account control info */
+	uint32 acct_flags;     /* 0xe005 00b0 */
+
+} SAMR_Q_CREATE_USER;
+
+
+/* SAMR_R_CREATE_USER - probably a create */
+typedef struct r_samr_create_user_info
+{
+	POLICY_HND user_pol;       /* policy handle associated with user */
+
+	uint32 access_granted;
+	uint32 user_rid;      /* user RID */
+	NTSTATUS status;         /* return status */
+
+} SAMR_R_CREATE_USER;
+
+
+/* SAMR_Q_DELETE_DOM_USER - delete domain user */
+typedef struct q_samr_delete_dom_user_info
+{
+    POLICY_HND user_pol;          /* policy handle */
+
+} SAMR_Q_DELETE_DOM_USER;
+
+
+/* SAMR_R_DELETE_DOM_USER - delete domain user */
+typedef struct r_samr_delete_dom_user_info
+{
+	POLICY_HND pol;       /* policy handle */
+	NTSTATUS status;        /* return status */
+
+} SAMR_R_DELETE_DOM_USER;
+
+
+/* SAMR_Q_QUERY_GROUPMEM - query group members */
+typedef struct q_samr_query_groupmem_info
+{
+	POLICY_HND group_pol;        /* policy handle */
+
+} SAMR_Q_QUERY_GROUPMEM;
+
+
+/* SAMR_R_QUERY_GROUPMEM - query group members */
+typedef struct r_samr_query_groupmem_info
+{
+	uint32 ptr;
+	uint32 num_entries;
+
+	uint32 ptr_rids;
+	uint32 ptr_attrs;
+
+	uint32 num_rids;
+	uint32 *rid;
+
+	uint32 num_attrs;
+	uint32 *attr;
+
+	NTSTATUS status;
+
+} SAMR_R_QUERY_GROUPMEM;
+
+
+/* SAMR_Q_DEL_GROUPMEM - probably an del group member */
+typedef struct q_samr_del_group_mem_info
+{
+	POLICY_HND pol;       /* policy handle */
+	uint32 rid;         /* rid */
+
+} SAMR_Q_DEL_GROUPMEM;
+
+
+/* SAMR_R_DEL_GROUPMEM - probably an del group member */
+typedef struct r_samr_del_group_mem_info
+{
+	NTSTATUS status;         /* return status */
+
+} SAMR_R_DEL_GROUPMEM;
+
+
+/* SAMR_Q_ADD_GROUPMEM - probably an add group member */
+typedef struct q_samr_add_group_mem_info
+{
+	POLICY_HND pol;       /* policy handle */
+
+	uint32 rid;         /* rid */
+	uint32 unknown;     /* 0x0000 0005 */
+
+} SAMR_Q_ADD_GROUPMEM;
+
+
+/* SAMR_R_ADD_GROUPMEM - probably an add group member */
+typedef struct r_samr_add_group_mem_info
+{
+	NTSTATUS status;         /* return status */
+
+} SAMR_R_ADD_GROUPMEM;
+
+
+/* SAMR_Q_OPEN_GROUP - probably an open */
+typedef struct q_samr_open_group_info
+{
+	POLICY_HND domain_pol;       /* policy handle */
+	uint32 access_mask;         /* 0x0000 0001, 0x0000 0003, 0x0000 001f */
+	uint32 rid_group;        /* rid */
+
+} SAMR_Q_OPEN_GROUP;
+
+
+/* SAMR_R_OPEN_GROUP - probably an open */
+typedef struct r_samr_open_group_info
+{
+	POLICY_HND pol;       /* policy handle */
+	NTSTATUS status;         /* return status */
+
+} SAMR_R_OPEN_GROUP;
+
+
+/* SAMR_Q_QUERY_ALIASMEM - query alias members */
+typedef struct q_samr_query_aliasmem_info
+{
+	POLICY_HND alias_pol;        /* policy handle */
+
+} SAMR_Q_QUERY_ALIASMEM;
+
+
+/* SAMR_R_QUERY_ALIASMEM - query alias members */
+typedef struct r_samr_query_aliasmem_info
+{
+	uint32 num_sids;
+	uint32 ptr;
+	uint32 num_sids1;
+
+	DOM_SID2 *sid;
+
+	NTSTATUS status;
+
+} SAMR_R_QUERY_ALIASMEM;
+
+
+/* SAMR_Q_ADD_ALIASMEM - add alias member */
+typedef struct q_samr_add_alias_mem_info
+{
+	POLICY_HND alias_pol;       /* policy handle */
+
+	DOM_SID2 sid; /* member sid to be added to the alias */
+
+} SAMR_Q_ADD_ALIASMEM;
+
+
+/* SAMR_R_ADD_ALIASMEM - add alias member */
+typedef struct r_samr_add_alias_mem_info
+{
+	NTSTATUS status;         /* return status */
+
+} SAMR_R_ADD_ALIASMEM;
+
+
+/* SAMR_Q_DEL_ALIASMEM - add an add alias member */
+typedef struct q_samr_del_alias_mem_info
+{
+	POLICY_HND alias_pol;       /* policy handle */
+
+	DOM_SID2 sid; /* member sid to be added to alias */
+
+} SAMR_Q_DEL_ALIASMEM;
+
+
+/* SAMR_R_DEL_ALIASMEM - delete alias member */
+typedef struct r_samr_del_alias_mem_info
+{
+	NTSTATUS status;         /* return status */
+
+} SAMR_R_DEL_ALIASMEM;
+
+
+
+/* SAMR_Q_OPEN_ALIAS - probably an open */
+typedef struct q_samr_open_alias_info
+{
+	POLICY_HND dom_pol;
+
+	uint32 access_mask;         
+	uint32 rid_alias;
+
+} SAMR_Q_OPEN_ALIAS;
+
+
+/* SAMR_R_OPEN_ALIAS - probably an open */
+typedef struct r_samr_open_alias_info
+{
+	POLICY_HND pol;       /* policy handle */
+	NTSTATUS status;         /* return status */
+
+} SAMR_R_OPEN_ALIAS;
+
+
+/* SAMR_Q_CONNECT_ANON - probably an open */
+typedef struct q_samr_connect_anon_info {
+	uint32 ptr;                  /* ptr? */
+	uint16 unknown_0;	     /* Only pushed if ptr is non-zero. */
+	uint32 access_mask;
+} SAMR_Q_CONNECT_ANON;
+
+/* SAMR_R_CONNECT_ANON - probably an open */
+typedef struct r_samr_connect_anon_info
+{
+	POLICY_HND connect_pol;       /* policy handle */
+	NTSTATUS status;         /* return status */
+
+} SAMR_R_CONNECT_ANON;
+
+/* SAMR_Q_CONNECT - probably an open */
+typedef struct q_samr_connect_info
+{
+	uint32 ptr_srv_name;         /* pointer (to server name?) */
+	UNISTR2 uni_srv_name;        /* unicode server name starting with '\\' */
+
+	uint32 access_mask;            
+
+} SAMR_Q_CONNECT;
+
+
+/* SAMR_R_CONNECT - probably an open */
+typedef struct r_samr_connect_info
+{
+	POLICY_HND connect_pol;       /* policy handle */
+	NTSTATUS status;         /* return status */
+
+} SAMR_R_CONNECT;
+
+/* SAMR_Q_CONNECT4 */
+typedef struct q_samr_connect4_info
+{
+	uint32 ptr_srv_name; /* pointer to server name */
+	UNISTR2 uni_srv_name;
+
+	uint32 unk_0; /* possible server name type, 1 for IP num, 2 for name */
+	uint32 access_mask;
+} SAMR_Q_CONNECT4;
+
+/* SAMR_R_CONNECT4 - same format as connect */
+typedef struct r_samr_connect_info SAMR_R_CONNECT4;       
+
+/* SAMR_Q_CONNECT5 */
+typedef struct q_samr_connect5_info
+{
+	uint32 ptr_srv_name; /* pointer to server name */
+	UNISTR2 uni_srv_name;
+	uint32 access_mask;
+	uint32 level;
+	/* These following are acutally a level dependent
+	   value. Fudge it for now. JRA */
+	uint32 info1_unk1;
+	uint32 info1_unk2;
+} SAMR_Q_CONNECT5;
+
+/* SAMR_R_CONNECT5 */
+typedef struct r_samr_connect_info5
+{
+	uint32 level;
+	uint32 info1_unk1;
+	uint32 info1_unk2;
+	POLICY_HND connect_pol;       /* policy handle */
+	NTSTATUS status;         /* return status */
+
+} SAMR_R_CONNECT5;
+
+
+/* SAMR_Q_GET_DOM_PWINFO */
+typedef struct q_samr_get_dom_pwinfo
+{
+	uint32 ptr; 
+	UNIHDR  hdr_srv_name;
+	UNISTR2 uni_srv_name;
+
+} SAMR_Q_GET_DOM_PWINFO;
+
+#define DOMAIN_PASSWORD_COMPLEX		0x00000001
+#define DOMAIN_PASSWORD_NO_ANON_CHANGE	0x00000002
+#define DOMAIN_PASSWORD_NO_CLEAR_CHANGE	0x00000004
+#define DOMAIN_LOCKOUT_ADMINS		0x00000008
+#define DOMAIN_PASSWORD_STORE_CLEARTEXT	0x00000010
+#define DOMAIN_REFUSE_PASSWORD_CHANGE	0x00000020
+
+/* SAMR_R_GET_DOM_PWINFO */
+typedef struct r_samr_get_dom_pwinfo
+{
+	uint16 min_pwd_length;
+	uint32 password_properties;
+	NTSTATUS status;
+
+} SAMR_R_GET_DOM_PWINFO;
+
+/* SAMR_ENC_PASSWD */
+typedef struct enc_passwd_info
+{
+	uint32 ptr;
+	uint8 pass[516];
+
+} SAMR_ENC_PASSWD;
+
+/* SAMR_ENC_HASH */
+typedef struct enc_hash_info
+{
+	uint32 ptr;
+	uint8 hash[16];
+
+} SAMR_ENC_HASH;
+
+/* SAMR_Q_CHGPASSWD_USER */
+typedef struct q_samr_chgpasswd_user_info
+{
+	uint32 ptr_0;
+
+	UNIHDR hdr_dest_host; /* server name unicode header */
+	UNISTR2 uni_dest_host; /* server name unicode string */
+
+	UNIHDR hdr_user_name;    /* username unicode string header */
+	UNISTR2 uni_user_name;    /* username unicode string */
+
+	SAMR_ENC_PASSWD nt_newpass;
+	SAMR_ENC_HASH nt_oldhash;
+
+	uint32 unknown; /* 0x0000 0001 */
+
+	SAMR_ENC_PASSWD lm_newpass;
+	SAMR_ENC_HASH lm_oldhash;
+
+} SAMR_Q_CHGPASSWD_USER;
+
+/* SAMR_R_CHGPASSWD_USER */
+typedef struct r_samr_chgpasswd_user_info
+{
+	NTSTATUS status; /* 0 == OK, C000006A (NT_STATUS_WRONG_PASSWORD) */
+
+} SAMR_R_CHGPASSWD_USER;
+
+/* SAMR_Q_CHGPASSWD3 */
+typedef struct q_samr_chgpasswd_user3
+{
+	uint32 ptr_0;
+
+	UNIHDR hdr_dest_host; /* server name unicode header */
+	UNISTR2 uni_dest_host; /* server name unicode string */
+
+	UNIHDR hdr_user_name;    /* username unicode string header */
+	UNISTR2 uni_user_name;    /* username unicode string */
+
+	SAMR_ENC_PASSWD nt_newpass;
+	SAMR_ENC_HASH nt_oldhash;
+
+	uint32 lm_change; /* 0x0000 0001 */
+
+	SAMR_ENC_PASSWD lm_newpass;
+	SAMR_ENC_HASH lm_oldhash;
+
+	SAMR_ENC_PASSWD password3;
+
+} SAMR_Q_CHGPASSWD_USER3;
+
+#define REJECT_REASON_OTHER		0x00000000
+#define REJECT_REASON_TOO_SHORT		0x00000001
+#define REJECT_REASON_IN_HISTORY	0x00000002
+#define REJECT_REASON_NOT_COMPLEX	0x00000005
+
+/* SAMR_CHANGE_REJECT */
+typedef struct samr_change_reject
+{
+	uint32 reject_reason;
+	uint32 unknown1;
+	uint32 unknown2;
+
+} SAMR_CHANGE_REJECT;
+
+/* SAMR_R_CHGPASSWD3 */
+typedef struct r_samr_chgpasswd_user3
+{
+	uint32 ptr_info;
+	uint32 ptr_reject;
+	SAM_UNK_INFO_1 *info;
+	SAMR_CHANGE_REJECT *reject;
+	NTSTATUS status; /* 0 == OK, C000006A (NT_STATUS_WRONG_PASSWORD) */
+
+} SAMR_R_CHGPASSWD_USER3;
+
+
+
+/* SAMR_Q_REMOVE_SID_FOREIGN_DOMAIN */
+typedef struct q_samr_remove_sid_foreign_domain_info
+{
+	POLICY_HND dom_pol;   /* policy handle */
+	DOM_SID2 sid;         /* SID */
+
+} SAMR_Q_REMOVE_SID_FOREIGN_DOMAIN;
+
+
+/* SAMR_R_REMOVE_SID_FOREIGN_DOMAIN */
+typedef struct r_samr_remove_sid_foreign_domain_info
+{
+	NTSTATUS status;         /* return status */
+
+} SAMR_R_REMOVE_SID_FOREIGN_DOMAIN;
+
+
+
+/* these are from the old rpc_samr.h - they are needed while the merge
+   is still going on */
+#define MAX_SAM_SIDS 15
+
+/* DOM_SID3 - security id */
+typedef struct sid_info_3
+{
+        uint16 len; /* length, bytes, including length of len :-) */
+        /* uint8  pad[2]; */
+        
+        DOM_SID sid;
+
+} DOM_SID3;
+
+/* SAMR_Q_QUERY_DOMAIN_INFO2 */
+typedef struct q_samr_query_domain_info2
+{
+	POLICY_HND domain_pol;   /* policy handle */
+	uint16 switch_value;
+
+} SAMR_Q_QUERY_DOMAIN_INFO2;
+
+/* SAMR_R_QUERY_DOMAIN_INFO2 */
+typedef struct r_samr_query_domain_info2
+{
+	uint32 ptr_0;
+	uint16 switch_value;
+	SAM_UNK_CTR *ctr;
+	NTSTATUS status;         /* return status */
+
+} SAMR_R_QUERY_DOMAIN_INFO2;
+
+/* SAMR_Q_SET_DOMAIN_INFO */
+typedef struct q_samr_set_domain_info
+{
+	POLICY_HND domain_pol;   /* policy handle */
+	uint16 switch_value0;
+	uint16 switch_value;
+	SAM_UNK_CTR *ctr;
+
+} SAMR_Q_SET_DOMAIN_INFO;
+
+/* SAMR_R_SET_DOMAIN_INFO */
+typedef struct r_samr_set_domain_info
+{
+	NTSTATUS status;         /* return status */
+
+} SAMR_R_SET_DOMAIN_INFO;
+
+#endif /* _RPC_SAMR_H */

Modified: branches/samba/upstream/source/include/rpc_secdes.h
===================================================================
--- branches/samba/upstream/source/include/rpc_secdes.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/rpc_secdes.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _RPC_SECDES_H /* _RPC_SECDES_H */
@@ -74,7 +75,22 @@
 typedef uint32 SEC_ACCESS;
 
 /* SEC_ACE */
-typedef struct security_ace SEC_ACE;
+typedef struct security_ace_info {
+	uint8 type;  /* xxxx_xxxx_ACE_TYPE - e.g allowed / denied etc */
+	uint8 flags; /* xxxx_INHERIT_xxxx - e.g OBJECT_INHERIT_ACE */
+	uint16 size;
+
+	SEC_ACCESS access_mask;
+
+	/* this stuff may be present when type is XXXX_TYPE_XXXX_OBJECT */
+	uint32  obj_flags; /* xxxx_ACE_OBJECT_xxxx e.g present/inherited present etc */
+	struct GUID obj_guid;  /* object GUID */
+	struct GUID inh_guid;  /* inherited object GUID */		
+        /* eof object stuff */
+
+	DOM_SID trustee;
+
+} SEC_ACE;
 #define  SEC_ACE_HEADER_SIZE (2 * sizeof(uint8) + sizeof(uint16) + sizeof(uint32))
 
 #ifndef ACL_REVISION
@@ -83,7 +99,14 @@
 
 #ifndef _SEC_ACL
 /* SEC_ACL */
-typedef struct security_acl SEC_ACL;
+typedef struct security_acl_info {
+	uint16 revision; /* 0x0003 */
+	uint16 size; /* size in bytes of the entire ACL structure */
+	uint32 num_aces; /* number of Access Control Entries */
+
+	SEC_ACE *aces;
+
+} SEC_ACL;
 #define  SEC_ACL_HEADER_SIZE (2 * sizeof(uint16) + sizeof(uint32))
 #define _SEC_ACL
 #endif
@@ -94,33 +117,54 @@
 
 #ifndef _SEC_DESC
 /* SEC_DESC */
-typedef struct security_descriptor SEC_DESC;
+typedef struct security_descriptor_info {
+	uint16 revision; /* 0x0001 */
+	uint16 type;     /* SEC_DESC_xxxx flags */
+
+	uint32 off_owner_sid; /* offset to owner sid */
+	uint32 off_grp_sid  ; /* offset to group sid */
+	uint32 off_sacl     ; /* offset to system list of permissions */
+	uint32 off_dacl     ; /* offset to list of permissions */
+
+	SEC_ACL *dacl; /* user ACL */
+	SEC_ACL *sacl; /* system ACL */
+	DOM_SID *owner_sid; 
+	DOM_SID *group_sid;
+
+} SEC_DESC;
 #define  SEC_DESC_HEADER_SIZE (2 * sizeof(uint16) + 4 * sizeof(uint32))
 #define _SEC_DESC
 #endif
 
 #ifndef _SEC_DESC_BUF
 /* SEC_DESC_BUF */
-typedef struct sec_desc_buf SEC_DESC_BUF;
+typedef struct sec_desc_buf_info {
+	uint32 max_len;
+	uint32 ptr;
+	uint32 len;
+
+	SEC_DESC *sec;
+
+} SEC_DESC_BUF;
 #define _SEC_DESC_BUF
 #endif
 
 /* A type to describe the mapping of generic access rights to object
    specific access rights. */
 
-struct generic_mapping {
+typedef struct generic_mapping {
 	uint32 generic_read;
 	uint32 generic_write;
 	uint32 generic_execute;
 	uint32 generic_all;
-};
+} GENERIC_MAPPING;
 
-struct standard_mapping {
+typedef struct standard_mapping {
 	uint32 std_read;
 	uint32 std_write;
 	uint32 std_execute;
 	uint32 std_all;
-};
+} STANDARD_MAPPING;
 
 
 /* Security Access Masks Rights */

Copied: branches/samba/upstream/source/include/rpc_shutdown.h (from rev 1928, branches/samba/upstream/source/include/rpc_shutdown.h)
===================================================================
--- branches/samba/upstream/source/include/rpc_shutdown.h	                        (rev 0)
+++ branches/samba/upstream/source/include/rpc_shutdown.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,75 @@
+/* 
+   Unix SMB/CIFS implementation.
+   
+   Copyright (C) Jim McDonough (jmcd at us.ibm.com)      2003.
+   Copyright (C) Gerald (Jerry) Carter                2005.
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#ifndef _RPC_SHUTDOWN_H /* _RPC_SHUTDOWN_H */
+#define _RPC_SHUTDOWN_H 
+
+
+/* opnums */
+
+#define SHUTDOWN_INIT		0x00
+#define SHUTDOWN_ABORT		0x01
+#define SHUTDOWN_INIT_EX	0x02
+
+
+/***********************************************/
+ 
+typedef struct {
+	uint16 *server;
+	UNISTR4 *message; 	
+	uint32 timeout;		/* in seconds */
+	uint8 force;		/* boolean: force shutdown */
+	uint8 reboot;		/* boolean: reboot on shutdown */		
+} SHUTDOWN_Q_INIT;
+
+typedef struct {
+	WERROR status;		/* return status */
+} SHUTDOWN_R_INIT;
+
+/***********************************************/
+ 
+typedef struct {
+	uint16 *server;
+	UNISTR4 *message; 	
+	uint32 timeout;		/* in seconds */
+	uint8 force;		/* boolean: force shutdown */
+	uint8 reboot;		/* boolean: reboot on shutdown */
+	uint32 reason;		/* reason - must be defined code */
+} SHUTDOWN_Q_INIT_EX;
+
+typedef struct {
+	WERROR status;
+} SHUTDOWN_R_INIT_EX;
+
+/***********************************************/
+
+typedef struct {
+	uint16 *server;
+} SHUTDOWN_Q_ABORT;
+
+typedef struct { 
+	WERROR status; 
+} SHUTDOWN_R_ABORT;
+
+
+
+#endif /* _RPC_SHUTDOWN_H */
+

Modified: branches/samba/upstream/source/include/rpc_spoolss.h
===================================================================
--- branches/samba/upstream/source/include/rpc_spoolss.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/rpc_spoolss.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _RPC_SPOOLSS_H		/* _RPC_SPOOLSS_H */


Property changes on: branches/samba/upstream/source/include/rpc_spoolss.h
___________________________________________________________________
Name: svn:executable
   + *

Copied: branches/samba/upstream/source/include/rpc_srvsvc.h (from rev 1928, branches/samba/upstream/source/include/rpc_srvsvc.h)
===================================================================
--- branches/samba/upstream/source/include/rpc_srvsvc.h	                        (rev 0)
+++ branches/samba/upstream/source/include/rpc_srvsvc.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,884 @@
+/*
+   Unix SMB/CIFS implementation.
+   SMB parameters and setup
+   Copyright (C) Andrew Tridgell 1992-1997
+   Copyright (C) Luke Kenneth Casson Leighton 1996-1997
+   Copyright (C) Paul Ashton 1997
+   Copyright (C) Nigel Williams 2001
+   Copyright (C) Gerald (Jerry) Carter 2006.
+
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#ifndef _RPC_SRVSVC_H /* _RPC_SRVSVC_H */
+#define _RPC_SRVSVC_H 
+
+/* srvsvc pipe */
+#define SRV_NET_CONN_ENUM          0x08
+#define SRV_NET_FILE_ENUM          0x09
+#define SRV_NET_FILE_CLOSE         0x0b
+#define SRV_NET_SESS_ENUM          0x0c
+#define SRV_NET_SESS_DEL           0x0d
+#define SRV_NET_SHARE_ADD          0x0e
+#define SRV_NET_SHARE_ENUM_ALL     0x0f
+#define SRV_NET_SHARE_GET_INFO     0x10
+#define SRV_NET_SHARE_SET_INFO     0x11
+#define SRV_NET_SHARE_DEL          0x12
+#define SRV_NET_SHARE_DEL_STICKY   0x13
+#define SRV_NET_SRV_GET_INFO       0x15
+#define SRV_NET_SRV_SET_INFO       0x16
+#define SRV_NET_DISK_ENUM          0x17
+#define SRV_NET_REMOTE_TOD         0x1c
+#define SRV_NET_NAME_VALIDATE      0x21
+#define SRV_NET_SHARE_ENUM         0x24
+#define SRV_NET_FILE_QUERY_SECDESC 0x27
+#define SRV_NET_FILE_SET_SECDESC   0x28
+
+#define MAX_SERVER_DISK_ENTRIES 15
+
+typedef struct disk_info {
+	uint32  unknown;
+	UNISTR3 disk_name;
+} DISK_INFO;
+
+typedef struct disk_enum_container {
+	uint32 level;
+	uint32 entries_read;
+	uint32 unknown;
+	uint32 disk_info_ptr;
+	DISK_INFO *disk_info;
+} DISK_ENUM_CONTAINER;
+
+typedef struct net_srv_disk_enum {
+	uint32 ptr_srv_name;         /* pointer (to server name?) */
+	UNISTR2 uni_srv_name;        /* server name */
+
+	DISK_ENUM_CONTAINER disk_enum_ctr;
+
+	uint32 preferred_len;        /* preferred maximum length (0xffff ffff) */
+	uint32 total_entries;        /* total number of entries */
+	ENUM_HND enum_hnd;
+	WERROR status;               /* return status */
+} SRV_Q_NET_DISK_ENUM, SRV_R_NET_DISK_ENUM;
+
+/***************************/
+
+typedef struct  {
+	UNISTR2 *servername;
+	UNISTR2 sharename;
+	uint32 type;
+	uint32 flags;
+	WERROR status;
+} SRV_Q_NET_NAME_VALIDATE;
+
+typedef struct  {
+	WERROR status;
+} SRV_R_NET_NAME_VALIDATE;
+
+/***************************/
+
+/* oops - this is going to take up a *massive* amount of stack. */
+/* the UNISTR2s already have 1024 uint16 chars in them... */
+
+#define MAX_SESS_ENTRIES 32
+
+typedef struct {
+	UNISTR2 *sharename;
+} SESS_INFO_0;
+
+typedef struct {
+	uint32 num_entries_read;
+	uint32 ptr_sess_info;
+	uint32 num_entries_read2;
+	SESS_INFO_0 info_0[MAX_SESS_ENTRIES];
+} SRV_SESS_INFO_0;
+
+typedef struct {
+	UNISTR2 *sharename;
+	UNISTR2 *username;
+	uint32 num_opens;
+	uint32 open_time;
+	uint32 idle_time;
+	uint32 user_flags;
+} SESS_INFO_1;
+
+typedef struct {
+	uint32 num_entries_read;
+	uint32 ptr_sess_info;
+	uint32 num_entries_read2;
+	SESS_INFO_1 info_1[MAX_SESS_ENTRIES];
+} SRV_SESS_INFO_1;
+
+typedef struct {
+	uint32 switch_value;
+	uint32 ptr_sess_ctr;
+	union {
+		SRV_SESS_INFO_0 info0; 
+		SRV_SESS_INFO_1 info1; 
+	} sess;
+
+} SRV_SESS_INFO_CTR;
+
+typedef struct {
+	UNISTR2 *servername;
+	UNISTR2 *qualifier;
+	UNISTR2 *username;
+	uint32 sess_level;
+	SRV_SESS_INFO_CTR *ctr;
+	uint32 preferred_len;
+	ENUM_HND enum_hnd;
+} SRV_Q_NET_SESS_ENUM;
+
+typedef struct {
+	uint32 sess_level; 
+	SRV_SESS_INFO_CTR *ctr;
+	uint32 total_entries;
+	ENUM_HND enum_hnd;
+	WERROR status;
+} SRV_R_NET_SESS_ENUM;
+
+/***************************/
+
+/* SRV_Q_NET_SESS_DEL */
+typedef struct q_net_sess_del
+{
+	uint32 ptr_srv_name;         /* pointer (to server name?) */
+	UNISTR2 uni_srv_name;        /* server name */
+
+	uint32 ptr_cli_name;         /* pointer (to qualifier name) */
+	UNISTR2 uni_cli_name;        /* qualifier name "\\qualifier" */
+
+	uint32 ptr_user_name;         /* pointer (to user name */
+	UNISTR2 uni_user_name;        /* user name */
+
+} SRV_Q_NET_SESS_DEL;
+
+/* SRV_R_NET_SESS_DEL */
+typedef struct r_net_sess_del
+{
+	WERROR status;               /* return status */
+
+} SRV_R_NET_SESS_DEL;
+
+/* CONN_INFO_0 (pointers to level 0 connection info strings) */
+typedef struct ptr_conn_info0
+{
+	uint32 id; /* connection id. */
+
+} CONN_INFO_0;
+
+/* oops - this is going to take up a *massive* amount of stack. */
+/* the UNISTR2s already have 1024 uint16 chars in them... */
+#define MAX_CONN_ENTRIES 32
+
+/* SRV_CONN_INFO_0 */
+typedef struct srv_conn_info_0_info
+{
+	uint32 num_entries_read;                     /* EntriesRead */
+	uint32 ptr_conn_info;                       /* Buffer */
+	uint32 num_entries_read2;                    /* EntriesRead */
+
+	CONN_INFO_0     info_0    [MAX_CONN_ENTRIES]; /* connection entry pointers */
+
+} SRV_CONN_INFO_0;
+
+/* CONN_INFO_1 (pointers to level 1 connection info strings) */
+typedef struct ptr_conn_info1
+{
+	uint32 id;   /* connection id */
+	uint32 type; /* 0x3 */
+	uint32 num_opens;
+	uint32 num_users;
+	uint32 open_time;
+
+	uint32 ptr_usr_name; /* pointer to user name. */
+	uint32 ptr_net_name; /* pointer to network name (e.g IPC$). */
+
+} CONN_INFO_1;
+
+/* CONN_INFO_1_STR (level 1 connection info strings) */
+typedef struct str_conn_info1
+{
+	UNISTR2 uni_usr_name; /* unicode string of user */
+	UNISTR2 uni_net_name; /* unicode string of name */
+
+} CONN_INFO_1_STR;
+
+/* SRV_CONN_INFO_1 */
+typedef struct srv_conn_info_1_info
+{
+	uint32 num_entries_read;                     /* EntriesRead */
+	uint32 ptr_conn_info;                       /* Buffer */
+	uint32 num_entries_read2;                    /* EntriesRead */
+
+	CONN_INFO_1     info_1    [MAX_CONN_ENTRIES]; /* connection entry pointers */
+	CONN_INFO_1_STR info_1_str[MAX_CONN_ENTRIES]; /* connection entry strings */
+
+} SRV_CONN_INFO_1;
+
+/* SRV_CONN_INFO_CTR */
+typedef struct srv_conn_info_ctr_info
+{
+	uint32 switch_value;         /* switch value */
+	uint32 ptr_conn_ctr;       /* pointer to conn info union */
+	union
+    {
+		SRV_CONN_INFO_0 info0; /* connection info level 0 */
+		SRV_CONN_INFO_1 info1; /* connection info level 1 */
+
+    } conn;
+
+} SRV_CONN_INFO_CTR;
+
+
+/* SRV_Q_NET_CONN_ENUM */
+typedef struct q_net_conn_enum_info
+{
+	uint32 ptr_srv_name;         /* pointer (to server name) */
+	UNISTR2 uni_srv_name;        /* server name "\\server" */
+
+	uint32 ptr_qual_name;         /* pointer (to qualifier name) */
+	UNISTR2 uni_qual_name;        /* qualifier name "\\qualifier" */
+
+	uint32 conn_level;          /* connection level */
+
+	SRV_CONN_INFO_CTR *ctr;
+
+	uint32 preferred_len;        /* preferred maximum length (0xffff ffff) */
+	ENUM_HND enum_hnd;
+
+} SRV_Q_NET_CONN_ENUM;
+
+/* SRV_R_NET_CONN_ENUM */
+typedef struct r_net_conn_enum_info
+{
+	uint32 conn_level;          /* share level */
+
+	SRV_CONN_INFO_CTR *ctr;
+
+	uint32 total_entries;                    /* total number of entries */
+	ENUM_HND enum_hnd;
+
+	WERROR status;               /* return status */
+
+} SRV_R_NET_CONN_ENUM;
+
+/* SH_INFO_0 */
+typedef struct ptr_share_info0
+{
+	uint32 ptr_netname; /* pointer to net name. */
+} SH_INFO_0;
+
+/* SH_INFO_0_STR (level 0 share info strings) */
+typedef struct str_share_info0
+{
+        SH_INFO_0 *ptrs;
+
+	UNISTR2 uni_netname; /* unicode string of net name */
+
+} SH_INFO_0_STR;
+
+/* SRV_SHARE_INFO_0 */
+typedef struct share_info_0_info
+{
+	SH_INFO_0 info_0;
+	SH_INFO_0_STR info_0_str;
+
+} SRV_SHARE_INFO_0;
+
+/* SH_INFO_1 (pointers to level 1 share info strings) */
+typedef struct ptr_share_info1
+{
+	uint32 ptr_netname; /* pointer to net name. */
+	uint32 type; /* ipc, print, disk ... */
+	uint32 ptr_remark; /* pointer to comment. */
+
+} SH_INFO_1;
+
+/* SH_INFO_1_STR (level 1 share info strings) */
+typedef struct str_share_info1
+{
+        SH_INFO_1 *ptrs;
+
+	UNISTR2 uni_netname; /* unicode string of net name */
+	UNISTR2 uni_remark; /* unicode string of comment */
+
+} SH_INFO_1_STR;
+
+/* SRV_SHARE_INFO_1 */
+typedef struct share_info_1_info
+{
+	SH_INFO_1 info_1;
+	SH_INFO_1_STR info_1_str;
+
+} SRV_SHARE_INFO_1;
+
+/* SH_INFO_2 (pointers to level 2 share info strings) */
+typedef struct ptr_share_info2
+{
+	uint32 ptr_netname; /* pointer to net name. */
+	uint32 type; /* ipc, print, disk ... */
+	uint32 ptr_remark; /* pointer to comment. */
+	uint32 perms;      /* permissions */
+	uint32 max_uses;   /* maximum uses */
+	uint32 num_uses;   /* current uses */
+	uint32 ptr_path;   /* pointer to path name */
+	uint32 ptr_passwd; /* pointer to password */
+
+} SH_INFO_2;
+
+/* SH_INFO_2_STR (level 2 share info strings) */
+typedef struct str_share_info2
+{
+	SH_INFO_2 *ptrs;
+
+	UNISTR2 uni_netname; /* unicode string of net name (e.g NETLOGON) */
+	UNISTR2 uni_remark;  /* unicode string of comment (e.g "Logon server share") */
+	UNISTR2 uni_path;    /* unicode string of local path (e.g c:\winnt\system32\repl\import\scripts) */
+	UNISTR2 uni_passwd;  /* unicode string of password - presumably for share level security (e.g NULL) */
+
+} SH_INFO_2_STR;
+
+/* SRV_SHARE_INFO_2 */
+typedef struct share_info_2_info
+{
+	SH_INFO_2 info_2;
+	SH_INFO_2_STR info_2_str;
+
+} SRV_SHARE_INFO_2;
+
+typedef struct ptr_share_info501
+{
+	uint32 ptr_netname; /* pointer to net name */
+	uint32 type;     /* ipc, print, disk */
+	uint32 ptr_remark;  /* pointer to comment */
+	uint32 csc_policy;  /* client-side offline caching policy << 4 */
+} SH_INFO_501;
+
+typedef struct str_share_info501
+{
+	UNISTR2 uni_netname; /* unicode string of net name */
+	UNISTR2 uni_remark;  /* unicode string of comment */
+} SH_INFO_501_STR;
+
+/* SRV_SHARE_INFO_501 */
+typedef struct share_info_501_info
+{
+	SH_INFO_501 info_501;
+	SH_INFO_501_STR info_501_str;
+} SRV_SHARE_INFO_501;
+
+/* SH_INFO_502 (pointers to level 502 share info strings) */
+typedef struct ptr_share_info502
+{
+	uint32 ptr_netname; /* pointer to net name. */
+	uint32 type; /* ipc, print, disk ... */
+	uint32 ptr_remark; /* pointer to comment. */
+	uint32 perms;      /* permissions */
+	uint32 max_uses;   /* maximum uses */
+	uint32 num_uses;   /* current uses */
+	uint32 ptr_path;   /* pointer to path name */
+	uint32 ptr_passwd; /* pointer to password */
+        uint32 reserved;    /* this holds the space taken by the sd in the rpc packet */
+        uint32 reserved_offset;   /* required for _post operation when marshalling */
+	uint32 sd_size;    /* size of security descriptor */
+	uint32 ptr_sd;     /* pointer to security descriptor */
+
+} SH_INFO_502;
+
+/* SH_INFO_502_STR (level 502 share info strings) */
+typedef struct str_share_info502
+{
+	SH_INFO_502 *ptrs;
+
+	UNISTR2 uni_netname; /* unicode string of net name (e.g NETLOGON) */
+	UNISTR2 uni_remark;  /* unicode string of comment (e.g "Logon server share") */
+	UNISTR2 uni_path;    /* unicode string of local path (e.g c:\winnt\system32\repl\import\scripts) */
+	UNISTR2 uni_passwd;  /* unicode string of password - presumably for share level security (e.g NULL) */
+
+        uint32 reserved;
+	uint32 sd_size;
+	SEC_DESC *sd;
+
+} SH_INFO_502_STR;
+
+/* SRV_SHARE_INFO_502 */
+typedef struct share_info_502_info
+{
+	SH_INFO_502 info_502;
+	SH_INFO_502_STR info_502_str;
+
+} SRV_SHARE_INFO_502;
+
+typedef struct ptr_share_info1004
+{
+	uint32 ptr_remark;
+
+} SH_INFO_1004;
+
+typedef struct str_share_info1004
+{
+	SH_INFO_1004 *ptrs;
+
+	UNISTR2 uni_remark;
+
+} SH_INFO_1004_STR;
+
+typedef struct ptr_info_1004_info
+{
+	SH_INFO_1004     info_1004; 
+	SH_INFO_1004_STR info_1004_str; 
+} SRV_SHARE_INFO_1004;
+
+typedef struct share_info_1005_info
+{
+  uint32 share_info_flags; 
+} SRV_SHARE_INFO_1005;
+
+typedef struct share_info_1006_info
+{
+	uint32 max_uses; 
+} SRV_SHARE_INFO_1006;
+
+typedef struct ptr_share_info1007
+{
+	uint32 flags;
+	uint32 ptr_AlternateDirectoryName;
+
+} SH_INFO_1007;
+
+typedef struct str_share_info1007
+{
+	SH_INFO_1007 *ptrs;
+
+	UNISTR2 uni_AlternateDirectoryName;
+
+} SH_INFO_1007_STR;
+
+typedef struct ptr_info_1007_info
+{
+	SH_INFO_1007     info_1007; 
+	SH_INFO_1007_STR info_1007_str; 
+} SRV_SHARE_INFO_1007;
+
+/* SRV_SHARE_INFO_1501 */
+typedef struct share_info_1501_info
+{
+	SEC_DESC_BUF *sdb;
+} SRV_SHARE_INFO_1501;
+
+/* SRV_SHARE_INFO_CTR */
+typedef struct srv_share_info_ctr_info
+{
+	uint32 info_level;
+	uint32 switch_value;
+	uint32 ptr_share_info;
+
+	uint32 num_entries;
+	uint32 ptr_entries;
+	uint32 num_entries2;
+
+	union {
+		SRV_SHARE_INFO_0    *info0;
+		SRV_SHARE_INFO_1    *info1;    /* share info level 1 */
+		SRV_SHARE_INFO_2    *info2;    /* share info level 2 */
+		SRV_SHARE_INFO_501  *info501;  /* share info level 501 */
+		SRV_SHARE_INFO_502  *info502;  /* share info level 502 */
+		SRV_SHARE_INFO_1004 *info1004;
+		SRV_SHARE_INFO_1005 *info1005;
+		SRV_SHARE_INFO_1006 *info1006;
+		SRV_SHARE_INFO_1007 *info1007;
+		SRV_SHARE_INFO_1501 *info1501;
+		void *info;
+
+	} share;
+
+} SRV_SHARE_INFO_CTR;
+
+/* SRV_Q_NET_SHARE_ENUM */
+typedef struct q_net_share_enum_info
+{
+	uint32 ptr_srv_name;         /* pointer (to server name?) */
+	UNISTR2 uni_srv_name;        /* server name */
+
+	SRV_SHARE_INFO_CTR ctr;     /* share info container */
+
+	uint32 preferred_len;        /* preferred maximum length (0xffff ffff) */
+
+	ENUM_HND enum_hnd;
+
+} SRV_Q_NET_SHARE_ENUM;
+
+
+/* SRV_R_NET_SHARE_ENUM */
+typedef struct r_net_share_enum_info
+{
+	SRV_SHARE_INFO_CTR ctr;     /* share info container */
+
+	uint32 total_entries;                    /* total number of entries */
+	ENUM_HND enum_hnd;
+
+	WERROR status;               /* return status */
+
+} SRV_R_NET_SHARE_ENUM;
+
+
+/* SRV_Q_NET_SHARE_GET_INFO */
+typedef struct q_net_share_get_info_info
+{
+	uint32 ptr_srv_name;
+	UNISTR2 uni_srv_name;
+
+	UNISTR2 uni_share_name;
+	uint32 info_level;
+
+} SRV_Q_NET_SHARE_GET_INFO;
+
+/* SRV_SHARE_INFO */
+typedef struct srv_share_info {
+	uint32 switch_value;
+	uint32 ptr_share_ctr;
+
+	union {
+		SRV_SHARE_INFO_0    info0;
+		SRV_SHARE_INFO_1 info1;
+		SRV_SHARE_INFO_2 info2;
+		SRV_SHARE_INFO_501 info501;
+		SRV_SHARE_INFO_502 info502;
+		SRV_SHARE_INFO_1004 info1004;
+		SRV_SHARE_INFO_1005 info1005;
+		SRV_SHARE_INFO_1006 info1006;
+		SRV_SHARE_INFO_1007 info1007;
+		SRV_SHARE_INFO_1501 info1501;
+	} share;
+} SRV_SHARE_INFO;
+
+/* SRV_R_NET_SHARE_GET_INFO */
+typedef struct r_net_share_get_info_info
+{
+	SRV_SHARE_INFO info;
+	WERROR status;
+
+} SRV_R_NET_SHARE_GET_INFO;
+
+/* SRV_Q_NET_SHARE_SET_INFO */
+typedef struct q_net_share_set_info_info
+{
+	uint32 ptr_srv_name;
+	UNISTR2 uni_srv_name;
+
+	UNISTR2 uni_share_name;
+	uint32 info_level;
+
+	SRV_SHARE_INFO info;
+
+        uint32 ptr_parm_error;
+        uint32 parm_error;
+
+} SRV_Q_NET_SHARE_SET_INFO;
+
+/* SRV_R_NET_SHARE_SET_INFO */
+typedef struct r_net_share_set_info
+{
+        uint32 ptr_parm_error;
+        uint32 parm_error;
+
+	WERROR status;               /* return status */
+
+} SRV_R_NET_SHARE_SET_INFO;
+
+/* SRV_Q_NET_SHARE_ADD */
+typedef struct q_net_share_add
+{
+	uint32 ptr_srv_name;
+	UNISTR2 uni_srv_name;
+
+	uint32 info_level;
+
+	SRV_SHARE_INFO info;
+
+	uint32 ptr_err_index; /* pointer to error index */
+	uint32 err_index;     /* index in info to field in error */
+
+} SRV_Q_NET_SHARE_ADD;
+
+/* SRV_R_NET_SHARE_ADD */
+typedef struct r_net_share_add
+{
+
+        uint32 ptr_parm_error;
+        uint32 parm_error;
+
+	WERROR status;               /* return status */
+
+} SRV_R_NET_SHARE_ADD;
+
+/* SRV_Q_NET_SHARE_DEL */
+typedef struct q_net_share_del
+{
+	uint32 ptr_srv_name;
+	UNISTR2 uni_srv_name;
+	UNISTR2 uni_share_name;
+	uint32 reserved;
+
+} SRV_Q_NET_SHARE_DEL;
+
+/* SRV_R_NET_SHARE_DEL */
+typedef struct r_net_share_del
+{
+	WERROR status;               /* return status */
+
+} SRV_R_NET_SHARE_DEL;
+
+/***************************/
+
+typedef struct {
+	uint32 id;            /* file index */
+	uint32 perms;         /* file permissions. don't know what format */
+	uint32 num_locks;     /* file locks */
+	UNISTR2 *path;        /* file name */
+	UNISTR2 *user;        /* file owner */
+} FILE_INFO_3;
+
+typedef struct {
+	uint32 level;                /* switch value */
+	uint32 ptr_file_info;        /* pointer to file info union */
+
+	uint32 num_entries;
+	uint32 ptr_entries;
+	uint32 num_entries2;
+	union {
+		FILE_INFO_3 *info3;
+	} file;
+
+} SRV_FILE_INFO_CTR;
+
+typedef struct {
+	UNISTR2 *servername;
+	UNISTR2 *qualifier;
+	UNISTR2 *username;
+	uint32 level;
+	SRV_FILE_INFO_CTR ctr;
+	uint32 preferred_len;     /* preferred maximum length (0xffff ffff) */
+	ENUM_HND enum_hnd;
+} SRV_Q_NET_FILE_ENUM;
+
+typedef struct {
+	uint32 level;   
+	SRV_FILE_INFO_CTR ctr;
+	uint32 total_entries;
+	ENUM_HND enum_hnd;
+	WERROR status;      
+} SRV_R_NET_FILE_ENUM;
+
+/* SRV_INFO_100 */
+typedef struct srv_info_100_info
+{
+	uint32 platform_id;     /* 0x500 */
+	uint32 ptr_name;        /* pointer to server name */
+
+	UNISTR2 uni_name;       /* server name "server" */
+
+} SRV_INFO_100;
+
+/* SRV_INFO_101 */
+typedef struct srv_info_101_info
+{
+	uint32 platform_id;     /* 0x500 */
+	uint32 ptr_name;        /* pointer to server name */
+	uint32 ver_major;       /* 0x4 */
+	uint32 ver_minor;       /* 0x2 */
+	uint32 srv_type;        /* browse etc type */
+	uint32 ptr_comment;     /* pointer to server comment */
+
+	UNISTR2 uni_name;       /* server name "server" */
+	UNISTR2 uni_comment;    /* server comment "samba x.x.x blah" */
+
+} SRV_INFO_101;
+
+/* SRV_INFO_102  */
+typedef struct srv_info_102_info
+{
+	uint32 platform_id;     /* 0x500 */
+	uint32 ptr_name;        /* pointer to server name */
+	uint32 ver_major;       /* 0x4 */
+	uint32 ver_minor;       /* 0x2 */
+	uint32 srv_type;        /* browse etc type */
+	uint32 ptr_comment;     /* pointer to server comment */
+	uint32 users;           /* 0xffff ffff*/
+	uint32 disc;            /* 0xf */
+	uint32 hidden;          /* 0x0 */
+	uint32 announce;        /* 240 */
+	uint32 ann_delta;       /* 3000 */
+	uint32 licenses;        /* 0 */
+	uint32 ptr_usr_path;    /* pointer to user path */
+
+	UNISTR2 uni_name;       /* server name "server" */
+	UNISTR2 uni_comment;    /* server comment "samba x.x.x blah" */
+	UNISTR2 uni_usr_path;   /* "c:\" (eh?) */
+
+} SRV_INFO_102;
+
+
+/* SRV_INFO_CTR */
+typedef struct srv_info_ctr_info
+{
+	uint32 switch_value;         /* switch value */
+	uint32 ptr_srv_ctr;         /* pointer to server info */
+	union
+    {
+		SRV_INFO_102 sv102; /* server info level 102 */
+		SRV_INFO_101 sv101; /* server info level 101 */
+		SRV_INFO_100 sv100; /* server info level 100 */
+
+    } srv;
+
+} SRV_INFO_CTR;
+
+/* SRV_Q_NET_SRV_GET_INFO */
+typedef struct q_net_srv_get_info
+{
+	uint32  ptr_srv_name;
+	UNISTR2 uni_srv_name; /* "\\server" */
+	uint32  switch_value;
+
+} SRV_Q_NET_SRV_GET_INFO;
+
+/* SRV_R_NET_SRV_GET_INFO */
+typedef struct r_net_srv_get_info
+{
+	SRV_INFO_CTR *ctr;
+
+	WERROR status;               /* return status */
+
+} SRV_R_NET_SRV_GET_INFO;
+
+/* SRV_Q_NET_SRV_SET_INFO */
+typedef struct q_net_srv_set_info
+{
+	uint32  ptr_srv_name;
+	UNISTR2 uni_srv_name; /* "\\server" */
+	uint32  switch_value;
+
+	SRV_INFO_CTR *ctr;
+
+} SRV_Q_NET_SRV_SET_INFO;
+
+
+/* SRV_R_NET_SRV_SET_INFO */
+typedef struct r_net_srv_set_info
+{
+	uint32 switch_value;         /* switch value */
+
+	WERROR status;               /* return status */
+
+} SRV_R_NET_SRV_SET_INFO;
+
+/* SRV_Q_NET_REMOTE_TOD */
+typedef struct q_net_remote_tod
+{
+	uint32  ptr_srv_name;
+	UNISTR2 uni_srv_name; /* "\\server" */
+
+} SRV_Q_NET_REMOTE_TOD;
+
+/* TIME_OF_DAY_INFO */
+typedef struct time_of_day_info
+{
+	uint32	elapsedt;
+	uint32	msecs;
+	uint32	hours;
+	uint32	mins;
+	uint32	secs;
+	uint32	hunds;
+	uint32	zone;
+	uint32	tintervals;
+	uint32	day;
+	uint32	month;
+	uint32	year;
+	uint32	weekday;
+	
+} TIME_OF_DAY_INFO;
+
+/* SRV_R_NET_REMOTE_TOD */
+typedef struct r_net_remote_tod
+{
+	uint32 ptr_srv_tod;         /* pointer to TOD */
+	TIME_OF_DAY_INFO *tod;
+	
+	WERROR status;               /* return status */
+
+} SRV_R_NET_REMOTE_TOD;
+
+/* SRV_Q_NET_FILE_QUERY_SECDESC */
+typedef struct q_net_file_query_secdesc
+{
+	uint32  ptr_srv_name;
+	UNISTR2 uni_srv_name;
+	uint32  ptr_qual_name;
+	UNISTR2 uni_qual_name;
+	UNISTR2 uni_file_name;
+	uint32  unknown1;
+	uint32  unknown2;
+	uint32  unknown3;
+} SRV_Q_NET_FILE_QUERY_SECDESC;
+
+/* SRV_R_NET_FILE_QUERY_SECDESC */
+typedef struct r_net_file_query_secdesc
+{
+	uint32 ptr_response;
+	uint32 size_response;
+	uint32 ptr_secdesc;
+	uint32 size_secdesc;
+	SEC_DESC *sec_desc;
+	WERROR status;
+} SRV_R_NET_FILE_QUERY_SECDESC;
+
+/* SRV_Q_NET_FILE_SET_SECDESC */
+typedef struct q_net_file_set_secdesc
+{
+	uint32  ptr_srv_name;
+	UNISTR2 uni_srv_name;
+	uint32  ptr_qual_name;
+	UNISTR2 uni_qual_name;
+	UNISTR2 uni_file_name;
+	uint32  sec_info;
+	uint32  size_set;
+	uint32  ptr_secdesc;
+	uint32  size_secdesc;
+	SEC_DESC *sec_desc;
+} SRV_Q_NET_FILE_SET_SECDESC;
+
+/* SRV_R_NET_FILE_SET_SECDESC */
+typedef struct r_net_file_set_secdesc
+{
+	WERROR status;
+} SRV_R_NET_FILE_SET_SECDESC;
+
+/***************************/
+
+typedef struct {
+	UNISTR2 *servername;
+	uint32 file_id;
+} SRV_Q_NET_FILE_CLOSE;
+
+typedef struct {
+	WERROR status;
+} SRV_R_NET_FILE_CLOSE;
+
+/***************************/
+
+#endif /* _RPC_SRVSVC_H */

Modified: branches/samba/upstream/source/include/rpc_svcctl.h
===================================================================
--- branches/samba/upstream/source/include/rpc_svcctl.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/rpc_svcctl.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _RPC_SVCCTL_H /* _RPC_SVCCTL_H */
@@ -122,12 +123,16 @@
 
 /* utility structures for RPCs */
 
-/*
- * "struct SERVICE_STATUS" comes from librpc/gen_ndr/svcctl.h
- */
+typedef struct {
+	uint32 type;
+	uint32 state;
+	uint32 controls_accepted;
+	WERROR win32_exit_code;
+	uint32 service_exit_code;
+	uint32 check_point;
+	uint32 wait_hint;
+} SERVICE_STATUS;
 
-typedef struct SERVICE_STATUS SERVICE_STATUS;
-
 typedef struct {
 	SERVICE_STATUS status;
 	uint32 process_id;
@@ -198,6 +203,92 @@
 
 typedef struct {
 	POLICY_HND handle;
+} SVCCTL_Q_CLOSE_SERVICE;
+
+typedef struct {
+        POLICY_HND handle;
+	WERROR status;
+} SVCCTL_R_CLOSE_SERVICE;
+
+/**************************/
+
+typedef struct {
+	UNISTR2 *servername;
+	UNISTR2 *database; 
+	uint32 access;
+} SVCCTL_Q_OPEN_SCMANAGER;
+
+typedef struct {
+	POLICY_HND handle;
+	WERROR status;
+} SVCCTL_R_OPEN_SCMANAGER;
+
+/**************************/
+
+typedef struct {
+	POLICY_HND handle;
+	UNISTR2 servicename;
+	uint32  display_name_len;
+} SVCCTL_Q_GET_DISPLAY_NAME;
+
+typedef struct {
+	UNISTR2 displayname;
+	uint32 display_name_len;
+	WERROR status;
+} SVCCTL_R_GET_DISPLAY_NAME;
+
+/**************************/
+
+typedef struct {
+	POLICY_HND handle;
+	UNISTR2 servicename;
+	uint32 access;
+} SVCCTL_Q_OPEN_SERVICE;
+
+typedef struct {
+	POLICY_HND handle;
+	WERROR status;
+} SVCCTL_R_OPEN_SERVICE;
+
+/**************************/
+
+typedef struct {
+	POLICY_HND handle;
+	uint32 parmcount;
+	UNISTR4_ARRAY *parameters;
+} SVCCTL_Q_START_SERVICE;
+
+typedef struct {
+	WERROR status;
+} SVCCTL_R_START_SERVICE;
+
+/**************************/
+
+typedef struct {
+	POLICY_HND handle;
+	uint32 control;
+} SVCCTL_Q_CONTROL_SERVICE;
+
+typedef struct {
+	SERVICE_STATUS svc_status;
+	WERROR status;
+} SVCCTL_R_CONTROL_SERVICE;
+
+/**************************/
+
+typedef struct {
+	POLICY_HND handle;
+} SVCCTL_Q_QUERY_STATUS;
+
+typedef struct {
+	SERVICE_STATUS svc_status;
+	WERROR status;
+} SVCCTL_R_QUERY_STATUS;
+
+/**************************/
+
+typedef struct {
+	POLICY_HND handle;
 	uint32 type;
 	uint32 state;
 	uint32 buffer_size;
@@ -271,5 +362,57 @@
 	WERROR status;
 } SVCCTL_R_QUERY_SERVICE_STATUSEX;
 
+
+/**************************/
+
+typedef struct {
+	POLICY_HND handle;
+} SVCCTL_Q_LOCK_SERVICE_DB;
+
+typedef struct {
+	POLICY_HND h_lock;
+	WERROR status;
+} SVCCTL_R_LOCK_SERVICE_DB;
+
+
+/**************************/
+
+typedef struct {
+	POLICY_HND h_lock;
+} SVCCTL_Q_UNLOCK_SERVICE_DB;
+
+typedef struct {
+	WERROR status;
+} SVCCTL_R_UNLOCK_SERVICE_DB;
+
+
+/**************************/
+
+typedef struct {
+	POLICY_HND handle;
+	uint32 security_flags;
+	uint32 buffer_size;	
+} SVCCTL_Q_QUERY_SERVICE_SEC;
+
+typedef struct {
+	RPC_BUFFER buffer;
+	uint32 needed;
+	WERROR status;
+} SVCCTL_R_QUERY_SERVICE_SEC;
+
+/**************************/
+
+typedef struct {
+	POLICY_HND handle; 
+	uint32 security_flags;        
+	RPC_BUFFER buffer;
+	uint32 buffer_size;
+} SVCCTL_Q_SET_SERVICE_SEC;
+
+typedef struct {
+	WERROR status;
+} SVCCTL_R_SET_SERVICE_SEC;
+
+
 #endif /* _RPC_SVCCTL_H */
 

Modified: branches/samba/upstream/source/include/safe_string.h
===================================================================
--- branches/samba/upstream/source/include/safe_string.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/safe_string.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _SAFE_STRING_H
@@ -86,8 +87,44 @@
 
 #define CHECK_STRING_SIZE(d, len) (sizeof(d) != (len) && sizeof(d) != sizeof(char *))
 
+#define fstrterminate(d) (CHECK_STRING_SIZE(d, sizeof(fstring)) \
+    ? __unsafe_string_function_usage_here_char__() \
+    : (((d)[sizeof(fstring)-1]) = '\0'))
+#define pstrterminate(d) (CHECK_STRING_SIZE(d, sizeof(pstring)) \
+    ? __unsafe_string_function_usage_here_char__() \
+    : (((d)[sizeof(pstring)-1]) = '\0'))
+
+#define wpstrcpy(d,s) ((sizeof(d) != sizeof(wpstring) && sizeof(d) != sizeof(smb_ucs2_t *)) \
+    ? __unsafe_string_function_usage_here__() \
+    : safe_strcpy_w((d),(s),sizeof(wpstring)))
+#define wpstrcat(d,s) ((sizeof(d) != sizeof(wpstring) && sizeof(d) != sizeof(smb_ucs2_t *)) \
+    ? __unsafe_string_function_usage_here__() \
+    : safe_strcat_w((d),(s),sizeof(wpstring)))
+#define wfstrcpy(d,s) ((sizeof(d) != sizeof(wfstring) && sizeof(d) != sizeof(smb_ucs2_t *)) \
+    ? __unsafe_string_function_usage_here__() \
+    : safe_strcpy_w((d),(s),sizeof(wfstring)))
+#define wfstrcat(d,s) ((sizeof(d) != sizeof(wfstring) && sizeof(d) != sizeof(smb_ucs2_t *)) \
+    ? __unsafe_string_function_usage_here__() \
+    : safe_strcat_w((d),(s),sizeof(wfstring)))
+
+#define push_pstring_base(dest, src, pstring_base) \
+    (CHECK_STRING_SIZE(pstring_base, sizeof(pstring)) \
+    ? __unsafe_string_function_usage_here_size_t__() \
+    : push_ascii(dest, src, sizeof(pstring)-PTR_DIFF(dest,pstring_base)-1, STR_TERMINATE))
+
 #else /* HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS */
 
+#define fstrterminate(d) (((d)[sizeof(fstring)-1]) = '\0')
+#define pstrterminate(d) (((d)[sizeof(pstring)-1]) = '\0')
+
+#define wpstrcpy(d,s) safe_strcpy_w((d),(s),sizeof(wpstring))
+#define wpstrcat(d,s) safe_strcat_w((d),(s),sizeof(wpstring))
+#define wfstrcpy(d,s) safe_strcpy_w((d),(s),sizeof(wfstring))
+#define wfstrcat(d,s) safe_strcat_w((d),(s),sizeof(wfstring))
+
+#define push_pstring_base(dest, src, pstring_base) \
+    push_ascii(dest, src, sizeof(pstring)-PTR_DIFF(dest,pstring_base)-1, STR_TERMINATE)
+
 #endif /* HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS */
 
 #define safe_strcpy_base(dest, src, base, size) \
@@ -97,6 +134,8 @@
    but the best we can do in C) and may tag with function name/number to
    record the last 'clobber region' on that string */
 
+#define pstrcpy(d,s) safe_strcpy((d), (s),sizeof(pstring)-1)
+#define pstrcat(d,s) safe_strcat((d), (s),sizeof(pstring)-1)
 #define fstrcpy(d,s) safe_strcpy((d),(s),sizeof(fstring)-1)
 #define fstrcat(d,s) safe_strcat((d),(s),sizeof(fstring)-1)
 #define nstrcpy(d,s) safe_strcpy((d), (s),sizeof(nstring)-1)
@@ -105,7 +144,10 @@
 /* the addition of the DEVELOPER checks in safe_strcpy means we must
  * update a lot of code. To make this a little easier here are some
  * functions that provide the lengths with less pain */
+#define pstrcpy_base(dest, src, pstring_base) \
+    safe_strcpy(dest, src, sizeof(pstring)-PTR_DIFF(dest,pstring_base)-1)
 
+
 /* Inside the _fn variants of these is a call to clobber_region(), -
  * which might destroy the stack on a buggy function.  We help the
  * debugging process by putting the function and line who last caused
@@ -118,54 +160,18 @@
  * long.  This is not a good situation, because we can't do the normal
  * sanity checks. Don't use in new code! */
 
-#define overmalloc_safe_strcpy(dest,src,maxlength) \
-	safe_strcpy_fn(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, \
-			dest,src,maxlength)
+#define overmalloc_safe_strcpy(dest,src,maxlength)	safe_strcpy_fn(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE,dest,src,maxlength)
+#define safe_strcpy(dest,src,maxlength)	safe_strcpy_fn2(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE,dest,src,maxlength)
+#define safe_strcat(dest,src,maxlength)	safe_strcat_fn2(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE,dest,src,maxlength)
+#define push_string(base_ptr, dest, src, dest_len, flags) push_string_fn2(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, base_ptr, dest, src, dest_len, flags)
+#define pull_string(base_ptr, dest, src, dest_len, src_len, flags) pull_string_fn2(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, base_ptr, dest, src, dest_len, src_len, flags)
+#define clistr_push(cli, dest, src, dest_len, flags) clistr_push_fn2(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, cli, dest, src, dest_len, flags)
+#define clistr_pull(cli, dest, src, dest_len, src_len, flags) clistr_pull_fn2(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, cli, dest, src, dest_len, src_len, flags)
+#define srvstr_push(base_ptr, dest, src, dest_len, flags) srvstr_push_fn2(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, base_ptr, dest, src, dest_len, flags)
 
-#define safe_strcpy(dest,src,maxlength) \
-	safe_strcpy_fn2(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, \
-			dest,src,maxlength)
+#define alpha_strcpy(dest,src,other_safe_chars,maxlength) alpha_strcpy_fn(SAFE_STRING_FUNCTION_NAME,SAFE_STRING_LINE,dest,src,other_safe_chars,maxlength)
+#define StrnCpy(dest,src,n)		StrnCpy_fn(SAFE_STRING_FUNCTION_NAME,SAFE_STRING_LINE,dest,src,n)
 
-#define safe_strcat(dest,src,maxlength) \
-	safe_strcat_fn2(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, \
-			dest,src,maxlength)
-
-#define push_string(base_ptr, dest, src, dest_len, flags) \
-	push_string_fn2(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, \
-			base_ptr, 0, dest, src, dest_len, flags)
-
-#define pull_string(base_ptr, smb_flags2, dest, src, dest_len, src_len, flags) \
-	pull_string_fn2(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, \
-			base_ptr, smb_flags2, dest, src, dest_len, src_len, flags)
-
-#define pull_string_talloc(ctx, base_ptr, smb_flags2, dest, src, src_len, flags) \
-	pull_string_talloc_fn2(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, \
-			ctx, base_ptr, smb_flags2, dest, src, src_len, flags)
-
-#define clistr_push(cli, dest, src, dest_len, flags) \
-	clistr_push_fn2(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, \
-			cli, dest, src, dest_len, flags)
-
-#define clistr_pull(cli, dest, src, dest_len, src_len, flags) \
-	clistr_pull_fn2(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, \
-			cli, dest, src, dest_len, src_len, flags)
-
-#define clistr_pull_talloc(ctx, cli, pp_dest, src, src_len, flags) \
-	clistr_pull_talloc_fn(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, \
-			ctx, cli, pp_dest, src, src_len, flags)
-
-#define srvstr_push(base_ptr, smb_flags2, dest, src, dest_len, flags) \
-	srvstr_push_fn2(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, \
-			base_ptr, smb_flags2, dest, src, dest_len, flags)
-
-#define alpha_strcpy(dest,src,other_safe_chars,maxlength) \
-	alpha_strcpy_fn(SAFE_STRING_FUNCTION_NAME,SAFE_STRING_LINE, \
-			dest,src,other_safe_chars,maxlength)
-
-#define StrnCpy(dest,src,n) \
-	StrnCpy_fn(SAFE_STRING_FUNCTION_NAME,SAFE_STRING_LINE, \
-			dest,src,n)
-
 #ifdef HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS
 
 /* if the compiler will optimize out function calls, then use this to tell if we are 
@@ -182,19 +188,16 @@
     ? __unsafe_string_function_usage_here__() \
     : safe_strcat_fn(fn_name, fn_line, (d), (s), (max_len)))
 
-#define push_string_fn2(fn_name, fn_line, base_ptr, flags2, dest, src, dest_len, flags) \
+#define push_string_fn2(fn_name, fn_line, base_ptr, dest, src, dest_len, flags) \
     (CHECK_STRING_SIZE(dest, dest_len) \
     ? __unsafe_string_function_usage_here_size_t__() \
-    : push_string_fn(fn_name, fn_line, base_ptr, flags2, dest, src, dest_len, flags))
+    : push_string_fn(fn_name, fn_line, base_ptr, dest, src, dest_len, flags))
 
-#define pull_string_fn2(fn_name, fn_line, base_ptr, smb_flags2, dest, src, dest_len, src_len, flags) \
+#define pull_string_fn2(fn_name, fn_line, base_ptr, dest, src, dest_len, src_len, flags) \
     (CHECK_STRING_SIZE(dest, dest_len) \
     ? __unsafe_string_function_usage_here_size_t__() \
-    : pull_string_fn(fn_name, fn_line, base_ptr, smb_flags2, dest, src, dest_len, src_len, flags))
+    : pull_string_fn(fn_name, fn_line, base_ptr, dest, src, dest_len, src_len, flags))
 
-#define pull_string_talloc_fn2(fn_name, fn_line, ctx, base_ptr, smb_flags2, dest, src, src_len, flags) \
-    pull_string_talloc_fn(fn_name, fn_line, ctx, base_ptr, smb_flags2, dest, src, src_len, flags)
-
 #define clistr_push_fn2(fn_name, fn_line, cli, dest, src, dest_len, flags) \
     (CHECK_STRING_SIZE(dest, dest_len) \
     ? __unsafe_string_function_usage_here_size_t__() \
@@ -205,10 +208,10 @@
     ? __unsafe_string_function_usage_here_size_t__() \
     : clistr_pull_fn(fn_name, fn_line, cli, dest, src, dest_len, srclen, flags))
 
-#define srvstr_push_fn2(fn_name, fn_line, base_ptr, smb_flags2, dest, src, dest_len, flags) \
+#define srvstr_push_fn2(fn_name, fn_line, base_ptr, dest, src, dest_len, flags) \
     (CHECK_STRING_SIZE(dest, dest_len) \
     ? __unsafe_string_function_usage_here_size_t__() \
-    : srvstr_push_fn(fn_name, fn_line, base_ptr, smb_flags2, dest, src, dest_len, flags))
+    : srvstr_push_fn(fn_name, fn_line, base_ptr, dest, src, dest_len, flags))
 
 #else
 
@@ -216,7 +219,6 @@
 #define safe_strcat_fn2 safe_strcat_fn
 #define push_string_fn2 push_string_fn
 #define pull_string_fn2 pull_string_fn
-#define pull_string_talloc_fn2 pull_string_talloc_fn
 #define clistr_push_fn2 clistr_push_fn
 #define clistr_pull_fn2 clistr_pull_fn
 #define srvstr_push_fn2 srvstr_push_fn

Modified: branches/samba/upstream/source/include/samba_linux_quota.h
===================================================================
--- branches/samba/upstream/source/include/samba_linux_quota.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/samba_linux_quota.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /*

Copied: branches/samba/upstream/source/include/samba_xfs_quota.h (from rev 1928, branches/samba/upstream/source/include/samba_xfs_quota.h)
===================================================================
--- branches/samba/upstream/source/include/samba_xfs_quota.h	                        (rev 0)
+++ branches/samba/upstream/source/include/samba_xfs_quota.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,165 @@
+#ifndef _SAMBA_LINUX_XFS_H_
+#define _SAMBA_LINUX_XFS_H_
+
+#ifndef _QUOTAIO_LINUX_XFS
+#define _QUOTAIO_LINUX_XFS
+
+/*
+ * Copyright (c) 2000 Silicon Graphics, Inc.  All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it would be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Further, this software is distributed without any warranty that it is
+ * free of the rightful claim of any third person regarding infringement
+ * or the like.  Any license provided herein, whether implied or
+ * otherwise, applies only to this software file.  Patent licenses, if
+ * any, provided herein do not apply to combinations of this program with
+ * other software, or any other product whatsoever.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write the Free Software Foundation, Inc., 59
+ * Temple Place - Suite 330, Boston MA 02111-1307, USA.
+ *
+ * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
+ * Mountain View, CA  94043, or:
+ *
+ * http://www.sgi.com
+ *
+ * For further information regarding this notice, see:
+ *
+ * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
+ */
+
+#include <linux/types.h>
+
+#define XQM_CMD(cmd)	( ('X'<<8)+(cmd) )
+#define IS_XQM_CMD(cmd)	( ((int)(cmd)>>8) == 'X' )
+
+/*
+ * Disk quota - quotactl(2) commands for XFS Quota Manager (XQM).
+ */
+#define Q_XQUOTAON   XQM_CMD(0x1)	/* enable quota accounting/enforcement */
+#define Q_XQUOTAOFF  XQM_CMD(0x2)	/* disable quota accounting/enforcement */
+#define Q_XGETQUOTA  XQM_CMD(0x3)	/* get disk limits & usage */
+#define Q_XSETQLIM   XQM_CMD(0x4)	/* set disk limits only */
+#define Q_XGETQSTAT  XQM_CMD(0x5)	/* returns fs_quota_stat_t struct */
+#define Q_XQUOTARM   XQM_CMD(0x6)	/* free quota files' space */
+
+/*
+ * fs_disk_quota structure:
+ *
+ * This contains the current quota information regarding a user/proj/group.
+ * It is 64-bit aligned, and all the blk units are in BBs (Basic Blocks) of
+ * 512 bytes.
+ */
+#define FS_DQUOT_VERSION	1	/* fs_disk_quota.d_version */
+typedef struct fs_disk_quota {
+	u_int8_t d_version;		/* version of this structure */
+	u_int8_t d_flags;		/* XFS_{USER,PROJ,GROUP}_QUOTA */
+	u_int16_t d_fieldmask;	/* field specifier */
+	u_int32_t d_id;		/* user, project, or group ID */
+	u_int64_t d_blk_hardlimit;	/* absolute limit on disk blks */
+	u_int64_t d_blk_softlimit;	/* preferred limit on disk blks */
+	u_int64_t d_ino_hardlimit;	/* maximum # allocated inodes */
+	u_int64_t d_ino_softlimit;	/* preferred inode limit */
+	u_int64_t d_bcount;		/* # disk blocks owned by the user */
+	u_int64_t d_icount;		/* # inodes owned by the user */
+	int32_t d_itimer;		/* zero if within inode limits */
+	/* if not, we refuse service */
+	int32_t d_btimer;		/* similar to above; for disk blocks */
+	u_int16_t d_iwarns;		/* # warnings issued wrt num inodes */
+	u_int16_t d_bwarns;		/* # warnings issued wrt disk blocks */
+	int32_t d_padding2;	/* padding2 - for future use */
+	u_int64_t d_rtb_hardlimit;	/* absolute limit on realtime blks */
+	u_int64_t d_rtb_softlimit;	/* preferred limit on RT disk blks */
+	u_int64_t d_rtbcount;	/* # realtime blocks owned */
+	int32_t d_rtbtimer;	/* similar to above; for RT disk blks */
+	u_int16_t d_rtbwarns;	/* # warnings issued wrt RT disk blks */
+	int16_t d_padding3;	/* padding3 - for future use */
+	char d_padding4[8];	/* yet more padding */
+} fs_disk_quota_t;
+
+/*
+ * These fields are sent to Q_XSETQLIM to specify fields that need to change.
+ */
+#define FS_DQ_ISOFT	(1<<0)
+#define FS_DQ_IHARD	(1<<1)
+#define FS_DQ_BSOFT	(1<<2)
+#define FS_DQ_BHARD 	(1<<3)
+#define FS_DQ_RTBSOFT	(1<<4)
+#define FS_DQ_RTBHARD	(1<<5)
+#define FS_DQ_LIMIT_MASK	(FS_DQ_ISOFT | FS_DQ_IHARD | FS_DQ_BSOFT | \
+				 FS_DQ_BHARD | FS_DQ_RTBSOFT | FS_DQ_RTBHARD)
+/*
+ * These timers can only be set in super user's dquot. For others, timers are
+ * automatically started and stopped. Superusers timer values set the limits
+ * for the rest.  In case these values are zero, the DQ_{F,B}TIMELIMIT values
+ * defined below are used. 
+ * These values also apply only to the d_fieldmask field for Q_XSETQLIM.
+ */
+#define FS_DQ_BTIMER	(1<<6)
+#define FS_DQ_ITIMER	(1<<7)
+#define FS_DQ_RTBTIMER 	(1<<8)
+#define FS_DQ_TIMER_MASK	(FS_DQ_BTIMER | FS_DQ_ITIMER | FS_DQ_RTBTIMER)
+
+/*
+ * The following constants define the default amount of time given a user
+ * before the soft limits are treated as hard limits (usually resulting
+ * in an allocation failure).  These may be modified by the quotactl(2)
+ * system call with the Q_XSETQLIM command.
+ */
+#define	DQ_FTIMELIMIT	(7 * 24*60*60)	/* 1 week */
+#define	DQ_BTIMELIMIT	(7 * 24*60*60)	/* 1 week */
+
+/*
+ * Various flags related to quotactl(2).  Only relevant to XFS filesystems.
+ */
+#define XFS_QUOTA_UDQ_ACCT	(1<<0)	/* user quota accounting */
+#define XFS_QUOTA_UDQ_ENFD	(1<<1)	/* user quota limits enforcement */
+#define XFS_QUOTA_GDQ_ACCT	(1<<2)	/* group quota accounting */
+#define XFS_QUOTA_GDQ_ENFD	(1<<3)	/* group quota limits enforcement */
+
+#define XFS_USER_QUOTA		(1<<0)	/* user quota type */
+#define XFS_PROJ_QUOTA		(1<<1)	/* (IRIX) project quota type */
+#define XFS_GROUP_QUOTA		(1<<2)	/* group quota type */
+
+/*
+ * fs_quota_stat is the struct returned in Q_XGETQSTAT for a given file system.
+ * Provides a centralized way to get meta infomation about the quota subsystem.
+ * eg. space taken up for user and group quotas, number of dquots currently
+ * incore.
+ */
+#define FS_QSTAT_VERSION	1	/* fs_quota_stat.qs_version */
+
+/*
+ * Some basic infomation about 'quota files'.
+ */
+typedef struct fs_qfilestat {
+	u_int64_t qfs_ino;		/* inode number */
+	u_int64_t qfs_nblks;	/* number of BBs 512-byte-blks */
+	u_int32_t qfs_nextents;	/* number of extents */
+} fs_qfilestat_t;
+
+typedef struct fs_quota_stat {
+	u_int8_t qs_version;	/* version number for future changes */
+	u_int16_t qs_flags;		/* XFS_QUOTA_{U,P,G}DQ_{ACCT,ENFD} */
+	u_int8_t qs_pad;		/* unused */
+	fs_qfilestat_t qs_uquota;	/* user quota storage information */
+	fs_qfilestat_t qs_gquota;	/* group quota storage information */
+	u_int32_t qs_incoredqs;	/* number of dquots incore */
+	int32_t qs_btimelimit;	/* limit for blks timer */
+	int32_t qs_itimelimit;	/* limit for inodes timer */
+	int32_t qs_rtbtimelimit;	/* limit for rt blks timer */
+	u_int16_t qs_bwarnlimit;	/* limit for num warnings */
+	u_int16_t qs_iwarnlimit;	/* limit for num warnings */
+} fs_quota_stat_t;
+
+#endif /* _QUOTAIO_LINUX_XFS */
+
+#endif /* _SAMBA_LINUX_XFS_H_ */

Modified: branches/samba/upstream/source/include/secrets.h
===================================================================
--- branches/samba/upstream/source/include/secrets.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/secrets.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  * 
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 3 of the License, or (at your
+ * Free Software Foundation; either version 2 of the License, or (at your
  * option) any later version.
  * 
  * This program is distributed in the hope that it will be useful, but WITHOUT
@@ -14,7 +14,8 @@
  * more details.
  * 
  * You should have received a copy of the GNU General Public License along with
- * this program; if not, see <http://www.gnu.org/licenses/>.  
+ * this program; if not, write to the Free Software Foundation, Inc., 675
+ * Mass Ave, Cambridge, MA 02139, USA.  
  */
 
 #ifndef _SECRETS_H

Modified: branches/samba/upstream/source/include/session.h
===================================================================
--- branches/samba/upstream/source/include/session.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/session.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /* a "session" is claimed when we do a SessionSetupX operation
@@ -35,8 +36,8 @@
 	fstring remote_machine;
 	fstring id_str;
 	uint32  id_num;
-	struct server_id pid;
-	fstring ip_addr_str;
+	uint32  pid;
+	fstring ip_addr;
 	time_t connect_start;
 };
 

Modified: branches/samba/upstream/source/include/smb.h
===================================================================
--- branches/samba/upstream/source/include/smb.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/smb.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -11,7 +11,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -20,7 +20,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _SMB_H
@@ -46,8 +47,8 @@
 #define SMB_PORTS "445 139"
 
 #define Undefined (-1)
-#define False false
-#define True true
+#define False (0)
+#define True (1)
 #define Auto (2)
 #define Required (3)
 
@@ -72,17 +73,12 @@
 #include "debug.h"
 
 /* this defines the error codes that receive_smb can put in smb_read_error */
-enum smb_read_errors {
-	SMB_READ_OK = 0,
-	SMB_READ_TIMEOUT,
-	SMB_READ_EOF,
-	SMB_READ_ERROR,
-	SMB_WRITE_ERROR, /* This error code can go into the client smb_rw_error. */
-	SMB_READ_BAD_SIG,
-	SMB_NO_MEMORY,
-	SMB_DO_NOT_DO_TDIS, /* cli_close_connection() check for this when smbfs wants to keep tree connected */
-	SMB_READ_BAD_DECRYPT
-};
+#define READ_TIMEOUT 1
+#define READ_EOF 2
+#define READ_ERROR 3
+#define WRITE_ERROR 4 /* This error code can go into the client smb_rw_error. */
+#define READ_BAD_SIG 5
+#define DO_NOT_DO_TDIS 6 /* cli_close_connection() check for this when smbfs wants to keep tree connected */
 
 #define DIR_STRUCT_SIZE 43
 
@@ -151,6 +147,10 @@
 
 typedef uint16 smb_ucs2_t;
 
+/* ucs2 string types. */
+typedef smb_ucs2_t wpstring[PSTRING_LEN];
+typedef smb_ucs2_t wfstring[FSTRING_LEN];
+
 #ifdef WORDS_BIGENDIAN
 #define UCS2_SHIFT 8
 #else
@@ -193,7 +193,7 @@
 #define PIPE_NETLOGON_PLAIN "\\NETLOGON"
 
 #define PI_LSARPC		0
-#define PI_DSSETUP		1
+#define PI_LSARPC_DS		1
 #define PI_SAMR			2
 #define PI_NETLOGON		3
 #define PI_SRVSVC		4
@@ -201,8 +201,8 @@
 #define PI_WINREG		6
 #define PI_SPOOLSS		7
 #define PI_NETDFS		8
-#define PI_RPCECHO 		9
-#define PI_INITSHUTDOWN		10
+#define PI_ECHO 		9
+#define PI_SHUTDOWN		10
 #define PI_SVCCTL		11
 #define PI_EVENTLOG 		12
 #define PI_NTSVCS		13
@@ -211,6 +211,30 @@
 /* 64 bit time (100usec) since ????? - cifs6.txt, section 3.5, page 30 */
 typedef uint64_t NTTIME;
 
+
+/* Allowable account control bits */
+#define ACB_DISABLED			0x00000001  /* 1 = User account disabled */
+#define ACB_HOMDIRREQ			0x00000002  /* 1 = Home directory required */
+#define ACB_PWNOTREQ			0x00000004  /* 1 = User password not required */
+#define ACB_TEMPDUP			0x00000008  /* 1 = Temporary duplicate account */
+#define ACB_NORMAL			0x00000010  /* 1 = Normal user account */
+#define ACB_MNS				0x00000020  /* 1 = MNS logon user account */
+#define ACB_DOMTRUST			0x00000040  /* 1 = Interdomain trust account */
+#define ACB_WSTRUST			0x00000080  /* 1 = Workstation trust account */
+#define ACB_SVRTRUST			0x00000100  /* 1 = Server trust account (BDC) */
+#define ACB_PWNOEXP			0x00000200  /* 1 = User password does not expire */
+#define ACB_AUTOLOCK			0x00000400  /* 1 = Account auto locked */
+
+/* only valid for > Windows 2000 */
+#define ACB_ENC_TXT_PWD_ALLOWED		0x00000800  /* 1 = Text password encryped */
+#define ACB_SMARTCARD_REQUIRED		0x00001000  /* 1 = Smart Card required */
+#define ACB_TRUSTED_FOR_DELEGATION	0x00002000  /* 1 = Trusted for Delegation */
+#define ACB_NOT_DELEGATED		0x00004000  /* 1 = Not delegated */
+#define ACB_USE_DES_KEY_ONLY		0x00008000  /* 1 = Use DES key only */
+#define ACB_DONT_REQUIRE_PREAUTH	0x00010000  /* 1 = Preauth not required */
+#define ACB_PWEXPIRED			0x00020000  /* 1 = Password is expired */
+#define ACB_NO_AUTH_DATA_REQD		0x00080000  /* 1 = No authorization data required */
+
 #define MAX_HOURS_LEN 32
 
 #ifndef MAXSUBAUTHS
@@ -219,14 +243,29 @@
 
 #define SID_MAX_SIZE ((size_t)(8+(MAXSUBAUTHS*4)))
 
+/* SID Types */
+enum lsa_SidType {
+	SID_NAME_USE_NONE = 0,
+	SID_NAME_USER    = 1, /* user */
+	SID_NAME_DOM_GRP,     /* domain group */
+	SID_NAME_DOMAIN,      /* domain sid */
+	SID_NAME_ALIAS,       /* local group */
+	SID_NAME_WKN_GRP,     /* well-known group */
+	SID_NAME_DELETED,     /* deleted account: needed for c2 rating */
+	SID_NAME_INVALID,     /* invalid account */
+	SID_NAME_UNKNOWN,     /* unknown sid type */
+	SID_NAME_COMPUTER     /* sid for a computer */
+};
+
+
 #define LOOKUP_NAME_NONE		0x00000000
-#define LOOKUP_NAME_ISOLATED             0x00000001  /* Look up unqualified names */
-#define LOOKUP_NAME_REMOTE               0x00000002  /* Ask others */
-#define LOOKUP_NAME_GROUP                0x00000004  /* (unused) This is a NASTY hack for 
+#define LOOKUP_NAME_ISOLATED		0x00000001  /* Look up unqualified names */
+#define LOOKUP_NAME_REMOTE		0x00000002  /* Ask others */
+#define LOOKUP_NAME_GROUP		0x00000004  /* (unused) This is a NASTY hack for
 							valid users = @foo where foo also
 							exists in as user. */
-#define LOOKUP_NAME_EXPLICIT             0x00000008  /* Only include
-							explicitly mapped names and not 
+#define LOOKUP_NAME_EXPLICIT		0x00000008  /* Only include
+							explicitly mapped names and not
 							the Unix {User,Group} domain */
 #define LOOKUP_NAME_BUILTIN		0x00000010 /* builtin names */
 #define LOOKUP_NAME_WKN			0x00000020 /* well known names */
@@ -259,6 +298,9 @@
 	uint32 sub_auths[MAXSUBAUTHS];  
 } DOM_SID;
 
+#define dom_sid2 dom_sid
+#define dom_sid28 dom_sid
+
 enum id_mapping {
 	ID_UNKNOWN = 0,
 	ID_MAPPED,
@@ -283,37 +325,13 @@
 	enum id_mapping status;
 };
 
-/* used to hold an arbitrary blob of data */
-typedef struct data_blob {
-	uint8 *data;
-	size_t length;
-	void (*free)(struct data_blob *data_blob);
-} DATA_BLOB;
-
-extern const DATA_BLOB data_blob_null;
-
-#include "librpc/gen_ndr/misc.h"
-#include "librpc/gen_ndr/security.h"
+#include "librpc/ndr/misc.h"
+#include "librpc/ndr/security.h"
 #include "librpc/ndr/libndr.h"
-#include "librpc/gen_ndr/lsa.h"
-#include "librpc/gen_ndr/dfs.h"
-#include "librpc/gen_ndr/winreg.h"
-#include "librpc/gen_ndr/initshutdown.h"
-#include "librpc/gen_ndr/eventlog.h"
-#include "librpc/gen_ndr/srvsvc.h"
 #include "librpc/gen_ndr/wkssvc.h"
-#include "librpc/gen_ndr/echo.h"
-#include "librpc/gen_ndr/svcctl.h"
-#include "librpc/gen_ndr/netlogon.h"
-#include "librpc/gen_ndr/samr.h"
-#include "librpc/gen_ndr/dssetup.h"
-#include "librpc/gen_ndr/libnet_join.h"
-#include "librpc/gen_ndr/krb5pac.h"
-#include "librpc/gen_ndr/ntsvcs.h"
-#include "librpc/gen_ndr/nbt.h"
 
 struct lsa_dom_info {
-	bool valid;
+	BOOL valid;
 	DOM_SID sid;
 	const char *name;
 	int num_idxs;
@@ -384,6 +402,17 @@
 	uint32 time;
 } UTIME;
 
+/* Structure used when SMBwritebmpx is active */
+typedef struct {
+	size_t wr_total_written; /* So we know when to discard this */
+	int32 wr_timeout;
+	int32 wr_errclass; /* Cached errors */
+	int32 wr_error; /* Cached errors */
+	NTSTATUS wr_status; /* Cached errors */
+	BOOL  wr_mode; /* write through mode) */
+	BOOL  wr_discard; /* discard all further data */
+} write_bmpx_struct;
+
 typedef struct write_cache {
 	SMB_OFF_T file_size;
 	SMB_OFF_T offset;
@@ -412,16 +441,16 @@
 				 * DELETE_ON_CLOSE is not stored in the share
 				 * mode database.
 				 */
-	unsigned long gen_id;
+	unsigned long file_id;
 };
 
+struct messaging_context;
 struct event_context;
 struct fd_event;
 struct timed_event;
 struct idle_event;
 struct share_mode_entry;
 struct uuid;
-struct named_mutex;
 
 struct vfs_fsp_data {
     struct vfs_fsp_data *next;
@@ -477,22 +506,20 @@
 	struct fd_handle *fh;
 	unsigned int num_smb_operations;
 	uint16 rap_print_jobid;
-	struct file_id file_id;
+	SMB_DEV_T dev;
+	SMB_INO_T inode;
 	SMB_BIG_UINT initial_allocation_size; /* Faked up initial allocation on disk. */
 	mode_t mode;
 	uint16 file_pid;
 	uint16 vuid;
+	write_bmpx_struct *wbmpx_ptr;
 	write_cache *wcp;
 	struct timeval open_time;
 	uint32 access_mask;		/* NTCreateX access bits (FILE_READ_DATA etc.) */
 	uint32 share_access;		/* NTCreateX share constants (FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE). */
-
-	bool update_write_time_triggered;
-	struct timed_event *update_write_time_event;
-	bool update_write_time_on_close;
-	struct timespec close_write_time;
-	bool write_time_forced;
-
+	BOOL pending_modtime_owner;
+	struct timespec pending_modtime;
+	struct timespec last_write_time;
 	int oplock_type;
 	int sent_oplock_break;
 	struct timed_event *oplock_timeout;
@@ -502,30 +529,35 @@
 	struct share_mode_entry *pending_break_messages;
 	int num_pending_break_messages;
 
-	bool can_lock;
-	bool can_read;
-	bool can_write;
-	bool print_file;
-	bool modified;
-	bool is_directory;
-	bool is_stat;
-	bool aio_write_behind;
-	bool lockdb_clean;
-	bool initial_delete_on_close; /* Only set at NTCreateX if file was created. */
-	bool posix_open;
+	BOOL can_lock;
+	BOOL can_read;
+	BOOL can_write;
+	BOOL print_file;
+	BOOL modified;
+	BOOL is_directory;
+	BOOL is_stat;
+	BOOL aio_write_behind;
+	BOOL lockdb_clean;
+	BOOL initial_delete_on_close; /* Only set at NTCreateX if file was created. */
+	BOOL posix_open;
 	char *fsp_name;
 
 	struct vfs_fsp_data *vfs_extension;
  	FAKE_FILE_HANDLE *fake_file_handle;
 
 	struct notify_change_buf *notify;
-
-	struct files_struct *base_fsp; /* placeholder for delete on close */
 } files_struct;
 
 #include "ntquotas.h"
 #include "sysquotas.h"
 
+/* used to hold an arbitrary blob of data */
+typedef struct data_blob_ {
+	uint8 *data;
+	size_t length;
+	void (*free)(struct data_blob_ *data_blob);
+} DATA_BLOB;
+
 /*
  * Structure used to keep directory state information around.
  * Used in NT change-notify code.
@@ -538,8 +570,8 @@
 
 struct vuid_cache_entry {
 	uint16 vuid;
-	bool read_only;
-	bool admin_user;
+	BOOL read_only;
+	BOOL admin_user;
 };
 
 struct vuid_cache {
@@ -549,7 +581,7 @@
 
 typedef struct {
 	char *name;
-	bool is_wild;
+	BOOL is_wild;
 } name_compare_entry;
 
 struct trans_state {
@@ -563,11 +595,11 @@
 
 	uint8 cmd;		/* SMBtrans or SMBtrans2 */
 
-	char *name;		/* for trans requests */
+	fstring name;		/* for trans requests */
 	uint16 call;		/* for trans2 and nttrans requests */
 
-	bool close_on_completion;
-	bool one_way;
+	BOOL close_on_completion;
+	BOOL one_way;
 
 	unsigned int setup_count;
 	uint16 *setup;
@@ -582,18 +614,10 @@
 	char *data;
 };
 
-/*
- * Info about an alternate data stream
- */
-
-struct stream_struct {
-	SMB_OFF_T size;
-	SMB_OFF_T alloc_size;
-	char *name;
-};
-
 /* Include VFS stuff */
 
+struct security_descriptor_info;
+
 #include "smb_acls.h"
 #include "vfs.h"
 
@@ -620,14 +644,14 @@
 	TALLOC_CTX *mem_ctx; /* long-lived memory context for things hanging off this struct. */
 	unsigned cnum; /* an index passed over the wire */
 	struct share_params *params;
-	bool force_user;
-	bool force_group;
+	BOOL force_user;
+	BOOL force_group;
 	struct vuid_cache vuid_cache;
 	struct dptr_struct *dirptr;
-	bool printer;
-	bool ipc;
-	bool read_only; /* Attributes for the current user of the share. */
-	bool admin_user; /* Attributes for the current user of the share. */
+	BOOL printer;
+	BOOL ipc;
+	BOOL read_only; /* Attributes for the current user of the share. */
+	BOOL admin_user; /* Attributes for the current user of the share. */
 	char *dirpath;
 	char *connectpath;
 	char *origpath;
@@ -639,7 +663,7 @@
 	char *user; /* name of user who *opened* this connection */
 	uid_t uid; /* uid of user who *opened* this connection */
 	gid_t gid; /* gid of user who *opened* this connection */
-	char client_address[INET6_ADDRSTRLEN]; /* String version of client IP address. */
+	char client_address[18]; /* String version of client IP address. */
 
 	uint16 vuid; /* vuid of user who *opened* this connection, or UID_FIELD_INVALID */
 
@@ -652,20 +676,14 @@
 	
 	time_t lastused;
 	time_t lastused_count;
-	bool used;
+	BOOL used;
 	int num_files_open;
 	unsigned int num_smb_operations; /* Count of smb operations on this tree. */
-	int encrypt_level;
-	bool encrypted_tid;
 
-	/* Semantics requested by the client or forced by the server config. */
-	bool case_sensitive;
-	bool case_preserve;
-	bool short_case_preserve;
+	BOOL case_sensitive;
+	BOOL case_preserve;
+	BOOL short_case_preserve;
 
-	/* Semantics provided by the underlying filesystem. */
-	int fs_capabilities;
-
 	name_compare_entry *hide_list; /* Per-share list of files to return as hidden. */
 	name_compare_entry *veto_list; /* Per-share list of files to veto (never show). */
 	name_compare_entry *veto_oplock_list; /* Per-share list of files to refuse oplocks on. */       
@@ -682,20 +700,6 @@
 	NT_USER_TOKEN *nt_user_token;
 };
 
-struct smb_request {
-	uint16 flags2;
-	uint16 smbpid;
-	uint16 mid;
-	uint16 vuid;
-	uint16 tid;
-	uint8  wct;
-	const uint8 *inbuf;
-	uint8 *outbuf;
-	size_t unread_bytes;
-	bool encrypted;
-	connection_struct *conn;
-};
-
 /* Defines for the sent_oplock_break field above. */
 #define NO_BREAK_SENT 0
 #define BREAK_TO_NONE_SENT 1
@@ -739,17 +743,15 @@
 	uint32 type;
 	fstring comment;
 	fstring domain; /* used ONLY in ipc.c NOT namework.c */
-	bool server_added; /* used ONLY in ipc.c NOT namework.c */
+	BOOL server_added; /* used ONLY in ipc.c NOT namework.c */
 };
 
 /* used for network interfaces */
 struct interface {
 	struct interface *next, *prev;
-	char *name;
-	int flags;
-	struct sockaddr_storage ip;
-	struct sockaddr_storage netmask;
-	struct sockaddr_storage bcast;
+	struct in_addr ip;
+	struct in_addr bcast;
+	struct in_addr nmask;
 };
 
 /* Internal message queue for deferred opens. */
@@ -757,7 +759,6 @@
 	struct pending_message_list *next, *prev;
 	struct timeval request_time; /* When was this first issued? */
 	struct timeval end_time; /* When does this time out? */
-	bool encrypted;
 	DATA_BLOB buf;
 	DATA_BLOB private_data;
 };
@@ -767,7 +768,7 @@
 
 /* struct returned by get_share_modes */
 struct share_mode_entry {
-	struct server_id pid;
+	struct process_id pid;
 	uint16 op_mid;
 	uint16 op_type;
 	uint32 access_mask;		/* NTCreateX access bits (FILE_READ_DATA etc.) */
@@ -777,7 +778,8 @@
 				 * NTCREATEX_OPTIONS_PRIVATE_DENY_FCB for
 				 * smbstatus and swat */
 	struct timeval time;
-	struct file_id id;
+	SMB_DEV_T dev;
+	SMB_INO_T inode;
 	unsigned long share_file_id;
 	uint32 uid;		/* uid of file opener. */
 	uint16 flags;		/* See SHARE_MODE_XX above. */
@@ -786,7 +788,7 @@
 /* oplock break message definition - linearization of share_mode_entry.
 
 Offset  Data			length.
-0	struct server_id pid	4
+0	struct process_id pid	4
 4	uint16 op_mid		2
 6	uint16 op_type		2
 8	uint32 access_mask	4
@@ -802,25 +804,19 @@
 54
 
 */
-#ifdef CLUSTER_SUPPORT
-#define MSG_SMB_SHARE_MODE_ENTRY_SIZE 58
-#else
 #define MSG_SMB_SHARE_MODE_ENTRY_SIZE 54
-#endif
 
 struct share_mode_lock {
 	const char *servicepath; /* canonicalized. */
 	const char *filename;
-	struct file_id id;
+	SMB_DEV_T dev;
+	SMB_INO_T ino;
 	int num_share_modes;
 	struct share_mode_entry *share_modes;
 	UNIX_USER_TOKEN *delete_token;
-	bool delete_on_close;
-	struct timespec old_write_time;
-	struct timespec changed_write_time;
-	bool fresh;
-	bool modified;
-	struct db_record *record;
+	BOOL delete_on_close;
+	BOOL fresh;
+	BOOL modified;
 };
 
 /*
@@ -832,9 +828,7 @@
 	union {
 		struct {
 			int num_share_mode_entries;
-			bool delete_on_close;
-			struct timespec old_write_time;
-			struct timespec changed_write_time;
+			BOOL delete_on_close;
 			uint32 delete_token_size; /* Only valid if either of
 						     the two previous fields
 						     are True. */
@@ -852,7 +846,7 @@
 /* Used to store pipe open records for NetFileEnum() */
 
 struct pipe_open_rec {
-	struct server_id pid;
+	struct process_id pid;
 	uid_t uid;
 	int pnum;
 	fstring name;
@@ -899,14 +893,14 @@
 
 /* key and data in the connections database - used in smbstatus and smbd */
 struct connections_key {
-	struct server_id pid;
+	struct process_id pid;
 	int cnum;
 	fstring name;
 };
 
 struct connections_data {
 	int magic;
-	struct server_id pid;
+	struct process_id pid;
 	int cnum;
 	uid_t uid;
 	gid_t gid;
@@ -921,7 +915,7 @@
 /* the following are used by loadparm for option lists */
 typedef enum {
 	P_BOOL,P_BOOLREV,P_CHAR,P_INTEGER,P_OCTAL,P_LIST,
-	P_STRING,P_USTRING,P_ENUM,P_SEP
+	P_STRING,P_USTRING,P_GSTRING,P_UGSTRING,P_ENUM,P_SEP
 } parm_type;
 
 typedef enum {
@@ -938,11 +932,11 @@
 	parm_type type;
 	parm_class p_class;
 	void *ptr;
-	bool (*special)(int snum, const char *, char **);
+	BOOL (*special)(int snum, const char *, char **);
 	const struct enum_list *enum_list;
 	unsigned flags;
 	union {
-		bool bvalue;
+		BOOL bvalue;
 		int ivalue;
 		char *svalue;
 		char cvalue;
@@ -1381,9 +1375,6 @@
 #define NTCREATEX_OPTIONS_PRIVATE_DENY_DOS     0x01000000
 #define NTCREATEX_OPTIONS_PRIVATE_DENY_FCB     0x02000000
 
-/* Private options for streams support */
-#define NTCREATEX_OPTIONS_PRIVATE_STREAM_DELETE 0x04000000
-
 /* Responses when opening a file. */
 #define FILE_WAS_SUPERSEDED 0
 #define FILE_WAS_OPENED 1
@@ -1580,7 +1571,7 @@
 /* Remote architectures we know about. */
 enum remote_arch_types {RA_UNKNOWN, RA_WFWG, RA_OS2, RA_WIN95, RA_WINNT,
 			RA_WIN2K, RA_WINXP, RA_WIN2K3, RA_VISTA,
-			RA_SAMBA, RA_CIFSFS, RA_WINXP64};
+			RA_SAMBA, RA_CIFSFS};
 
 /* case handling */
 enum case_handling {CASE_LOWER,CASE_UPPER};
@@ -1719,17 +1710,16 @@
 
 enum smbd_capability {
     KERNEL_OPLOCK_CAPABILITY,
-    DMAPI_ACCESS_CAPABILITY,
-    LEASE_CAPABILITY
+    DMAPI_ACCESS_CAPABILITY
 };
 
 /* if a kernel does support oplocks then a structure of the following
    typee is used to describe how to interact with the kernel */
 struct kernel_oplocks {
 	files_struct * (*receive_message)(fd_set *fds);
-	bool (*set_oplock)(files_struct *fsp, int oplock_type);
+	BOOL (*set_oplock)(files_struct *fsp, int oplock_type);
 	void (*release_oplock)(files_struct *fsp);
-	bool (*msg_waiting)(fd_set *fds);
+	BOOL (*msg_waiting)(fd_set *fds);
 	int notification_fd;
 };
 
@@ -1762,8 +1752,8 @@
 };
 
 struct pwd_info {
-	bool null_pwd;
-	bool cleartext;
+	BOOL null_pwd;
+	BOOL cleartext;
 
 	fstring password;
 };
@@ -1784,11 +1774,11 @@
 	gid_t gid; /* gid of a validated user */
 
 	userdom_struct user;
-	const char *homedir;
-	const char *unix_homedir;
-	const char *logon_script;
+	char *homedir;
+	char *unix_homedir;
+	char *logon_script;
 	
-	bool guest;
+	BOOL guest;
 
 	/* following groups stuff added by ih */
 	/* This groups info is needed for when we become_user() for this uid */
@@ -1878,7 +1868,7 @@
 
 /* used by the IP comparison function */
 struct ip_service {
-	struct sockaddr_storage ss;
+	struct in_addr ip;
 	unsigned port;
 };
 
@@ -1889,15 +1879,15 @@
 
 typedef struct smb_sign_info {
 	void (*sign_outgoing_message)(char *outbuf, struct smb_sign_info *si);
-	bool (*check_incoming_message)(const char *inbuf, struct smb_sign_info *si, bool must_be_ok);
+	BOOL (*check_incoming_message)(char *inbuf, struct smb_sign_info *si, BOOL must_be_ok);
 	void (*free_signing_context)(struct smb_sign_info *si);
 	void *signing_context;
 
-	bool negotiated_smb_signing;
-	bool allow_smb_signing;
-	bool doing_signing;
-	bool mandatory_signing;
-	bool seen_valid; /* Have I ever seen a validly signed packet? */
+	BOOL negotiated_smb_signing;
+	BOOL allow_smb_signing;
+	BOOL doing_signing;
+	BOOL mandatory_signing;
+	BOOL seen_valid; /* Have I ever seen a validly signed packet? */
 } smb_sign_info;
 
 struct ea_struct {
@@ -1915,11 +1905,8 @@
 #define SAMBA_POSIX_INHERITANCE_EA_NAME "user.SAMBA_PAI"
 /* EA to use for DOS attributes */
 #define SAMBA_XATTR_DOS_ATTRIB "user.DOSATTRIB"
-/* Prefix for DosStreams in the vfs_streams_xattr module */
-#define SAMBA_XATTR_DOSSTREAM_PREFIX "user.DosStream."
 
 #define UUID_SIZE 16
-
 #define UUID_FLAT_SIZE 16
 typedef struct uuid_flat {
 	uint8 info[UUID_FLAT_SIZE];

Modified: branches/samba/upstream/source/include/smb_acls.h
===================================================================
--- branches/samba/upstream/source/include/smb_acls.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/smb_acls.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _SMB_ACLS_H

Modified: branches/samba/upstream/source/include/smb_ldap.h
===================================================================
--- branches/samba/upstream/source/include/smb_ldap.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/smb_ldap.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
     
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -114,7 +115,7 @@
 	enum ldap_deref deref;
 	uint32 timelimit;
 	uint32 sizelimit;
-	bool attributesonly;
+	BOOL attributesonly;
 	char *filter;
 	int num_attributes;
 	const char **attributes;
@@ -162,7 +163,7 @@
 struct ldap_ModifyDNRequest {
 	const char *dn;
 	const char *newrdn;
-	bool deleteolddn;
+	BOOL deleteolddn;
 	const char *newsuperior;
 };
 
@@ -212,7 +213,7 @@
 
 struct ldap_Control {
 	const char *oid;
-	bool        critical;
+	BOOL        critical;
 	DATA_BLOB   value;
 };
 
@@ -237,7 +238,7 @@
 	int next_msgid;
 	char *host;
 	uint16 port;
-	bool ldaps;
+	BOOL ldaps;
 
 	const char *auth_dn;
 	const char *simple_pw;

Modified: branches/samba/upstream/source/include/smb_macros.h
===================================================================
--- branches/samba/upstream/source/include/smb_macros.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/smb_macros.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _SMB_MACROS_H
@@ -48,13 +49,12 @@
 /* assert macros */
 #ifdef DEVELOPER
 #define SMB_ASSERT(b) ( (b) ? (void)0 : \
-        (DEBUG(0,("PANIC: assert failed at %s(%d): %s\n", \
-		 __FILE__, __LINE__, #b)), smb_panic("assert failed: " #b)))
+        (DEBUG(0,("PANIC: assert failed at %s(%d)\n", \
+		 __FILE__, __LINE__)), smb_panic("assert failed")))
 #else
 /* redefine the assert macro for non-developer builds */
 #define SMB_ASSERT(b) ( (b) ? (void)0 : \
-        (DEBUG(0,("PANIC: assert failed at %s(%d): %s\n", \
-	    __FILE__, __LINE__, #b))))
+        (DEBUG(0,("PANIC: assert failed at %s(%d)\n", __FILE__, __LINE__))))
 #endif
 
 #define SMB_WARN(condition, message) \
@@ -158,22 +158,23 @@
 #define SMB_LARGE_LKLEN_OFFSET_HIGH(indx) (12 + (20 * (indx)))
 #define SMB_LARGE_LKLEN_OFFSET_LOW(indx) (16 + (20 * (indx)))
 
+/* Macro to test if an error has been cached for this fnum */
+#define HAS_CACHED_ERROR(fsp) ((fsp)->wbmpx_ptr && \
+                (fsp)->wbmpx_ptr->wr_discard)
+/* Macro to turn the cached error into an error packet */
+#define CACHED_ERROR(fsp) cached_error_packet(outbuf,fsp,__LINE__,__FILE__)
+
 #define ERROR_DOS(class,code) error_packet(outbuf,class,code,NT_STATUS_OK,__LINE__,__FILE__)
 #define ERROR_NT(status) error_packet(outbuf,0,0,status,__LINE__,__FILE__)
+#define ERROR_OPEN(status) error_open(outbuf,status,__LINE__,__FILE__)
 #define ERROR_FORCE_NT(status) error_packet(outbuf,-1,-1,status,__LINE__,__FILE__)
 #define ERROR_BOTH(status,class,code) error_packet(outbuf,class,code,status,__LINE__,__FILE__)
 
-#define reply_nterror(req,status) reply_nt_error(req,status,__LINE__,__FILE__)
-#define reply_force_nterror(req,status) reply_force_nt_error(req,status,__LINE__,__FILE__)
-#define reply_doserror(req,eclass,ecode) reply_dos_error(req,eclass,ecode,__LINE__,__FILE__)
-#define reply_botherror(req,status,eclass,ecode) reply_both_error(req,eclass,ecode,status,__LINE__,__FILE__)
-#define reply_unixerror(req,defclass,deferror) reply_unix_error(req,defclass,deferror,NT_STATUS_OK,__LINE__,__FILE__)
+/* this is how errors are generated */
+#define UNIXERROR(defclass,deferror) unix_error_packet(outbuf,defclass,deferror,NT_STATUS_OK,__LINE__,__FILE__)
 
-#if 0
-/* defined in IDL */
 /* these are the datagram types */
 #define DGRAM_DIRECT_UNIQUE 0x10
-#endif
 
 #define SMB_ROUNDUP(x,r) ( ((x)%(r)) ? ( (((x)+(r))/(r))*(r) ) : (x))
 
@@ -188,16 +189,9 @@
 #define smb_offset(p,buf) (PTR_DIFF(p,buf+4) + chain_size)
 
 #define smb_len(buf) (PVAL(buf,3)|(PVAL(buf,2)<<8)|((PVAL(buf,1)&1)<<16))
-#define _smb_setlen(buf,len) do { buf[0] = 0; buf[1] = ((len)&0x10000)>>16; \
-        buf[2] = ((len)&0xFF00)>>8; buf[3] = (len)&0xFF; } while (0)
+#define _smb_setlen(buf,len) do { buf[0] = 0; buf[1] = (len&0x10000)>>16; \
+        buf[2] = (len&0xFF00)>>8; buf[3] = len&0xFF; } while (0)
 
-#define smb_len_large(buf) (PVAL(buf,3)|(PVAL(buf,2)<<8)|(PVAL(buf,1)<<16))
-#define _smb_setlen_large(buf,len) do { buf[0] = 0; buf[1] = ((len)&0xFF0000)>>16; \
-        buf[2] = ((len)&0xFF00)>>8; buf[3] = (len)&0xFF; } while (0)
-
-#define ENCRYPTION_REQUIRED(conn) ((conn) ? ((conn)->encrypt_level == Required) : false)
-#define IS_CONN_ENCRYPTED(conn) ((conn) ? (conn)->encrypted_tid : false)
-
 /*******************************************************************
 find the difference in milliseconds between two struct timeval
 values
@@ -208,10 +202,11 @@
 	 ((int)(tvalnew)->tv_usec - (int)(tvalold)->tv_usec)/1000)
 
 /****************************************************************************
-true if two IPv4 addresses are equal
+true if two IP addresses are equal
 ****************************************************************************/
 
-#define ip_equal_v4(ip1,ip2) ((ip1).s_addr == (ip2).s_addr)
+#define ip_equal(ip1,ip2) ((ip1).s_addr == (ip2).s_addr)
+#define ip_service_equal(ip1,ip2) ( ((ip1).ip.s_addr == (ip2).ip.s_addr) && ((ip1).port == (ip2).port) )
 
 /*****************************************************************
  splits out the last subkey of a key
@@ -272,13 +267,11 @@
 #define SMB_XMALLOC_P(type) (type *)smb_xmalloc_array(sizeof(type),1)
 #define SMB_XMALLOC_ARRAY(type,count) (type *)smb_xmalloc_array(sizeof(type),(count))
 
+/* limiting size of ipc replies */
+#define SMB_REALLOC_LIMIT(ptr,size) (char *)SMB_REALLOC(ptr,MAX((size),4*1024))
+
 /* The new talloc is paranoid malloc checker safe. */
 
-#if 0
-
-Disable these now we have checked all code paths and ensured
-NULL returns on zero request. JRA.
-
 #define TALLOC(ctx, size) talloc_zeronull(ctx, size, __location__)
 #define TALLOC_P(ctx, type) (type *)talloc_zeronull(ctx, sizeof(type), #type)
 #define TALLOC_ARRAY(ctx, type, count) (type *)_talloc_array_zeronull(ctx, sizeof(type), count, #type)
@@ -286,31 +279,17 @@
 #define TALLOC_ZERO(ctx, size) _talloc_zero_zeronull(ctx, size, __location__)
 #define TALLOC_ZERO_P(ctx, type) (type *)_talloc_zero_zeronull(ctx, sizeof(type), #type)
 #define TALLOC_ZERO_ARRAY(ctx, type, count) (type *)_talloc_zero_array_zeronull(ctx, sizeof(type), count, #type)
-#define TALLOC_SIZE(ctx, size) talloc_zeronull(ctx, size, __location__)
-#define TALLOC_ZERO_SIZE(ctx, size) _talloc_zero_zeronull(ctx, size, __location__)
-
-#else
-
-#define TALLOC(ctx, size) talloc_named_const(ctx, size, __location__)
-#define TALLOC_P(ctx, type) (type *)talloc_named_const(ctx, sizeof(type), #type)
-#define TALLOC_ARRAY(ctx, type, count) (type *)_talloc_array(ctx, sizeof(type), count, #type)
-#define TALLOC_MEMDUP(ctx, ptr, size) _talloc_memdup(ctx, ptr, size, __location__)
-#define TALLOC_ZERO(ctx, size) _talloc_zero(ctx, size, __location__)
-#define TALLOC_ZERO_P(ctx, type) (type *)_talloc_zero(ctx, sizeof(type), #type)
-#define TALLOC_ZERO_ARRAY(ctx, type, count) (type *)_talloc_zero_array(ctx, sizeof(type), count, #type)
-#define TALLOC_SIZE(ctx, size) talloc_named_const(ctx, size, __location__)
-#define TALLOC_ZERO_SIZE(ctx, size) _talloc_zero(ctx, size, __location__)
-
-#endif
-
 #define TALLOC_REALLOC(ctx, ptr, count) _talloc_realloc(ctx, ptr, count, __location__)
 #define TALLOC_REALLOC_ARRAY(ctx, ptr, type, count) (type *)_talloc_realloc_array(ctx, ptr, sizeof(type), count, #type)
 #define talloc_destroy(ctx) talloc_free(ctx)
 #define TALLOC_FREE(ctx) do { if ((ctx) != NULL) {talloc_free(ctx); ctx=NULL;} } while(0)
+#define TALLOC_SIZE(ctx, size) talloc_zeronull(ctx, size, __location__)
+#define TALLOC_ZERO_SIZE(ctx, size) _talloc_zero_zeronull(ctx, size, __location__)
 
-/* only define PARANOID_MALLOC_CHECKER with --enable-developer */
+/* only define PARANOID_MALLOC_CHECKER with --enable-developer and not compiling
+   the smbmount utils */
 
-#if defined(DEVELOPER)
+#if defined(DEVELOPER) && !defined(SMBMOUNT_MALLOC)
 #  define PARANOID_MALLOC_CHECKER 1
 #endif
 
@@ -387,12 +366,4 @@
 #define ISDOTDOT(p) (*(p) == '.' && *((p) + 1) == '.' && *((p) + 2) == '\0')
 #endif /* ISDOTDOT */
 
-#ifndef toupper_ascii_fast
-/* Warning - this must only be called with 0 <= c < 128. IT WILL
- * GIVE GARBAGE if c > 128 or c < 0. JRA.
- */
-extern char toupper_ascii_fast_table[];
-#define toupper_ascii_fast(c) toupper_ascii_fast_table[(unsigned int)(c)];
-#endif
-
 #endif /* _SMB_MACROS_H */

Modified: branches/samba/upstream/source/include/smb_share_modes.h
===================================================================
--- branches/samba/upstream/source/include/smb_share_modes.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/smb_share_modes.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
 
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -14,7 +14,8 @@
    Lesser General Public License for more details.
 
    You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
+   License along with this library; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
 #ifndef _SMB_SHARE_MODES_H_
@@ -50,7 +51,7 @@
 	uint32_t access_mask;
 	struct timeval open_time;
 	uint32_t file_id;
-	struct server_id pid;
+	struct process_id pid;
 };
 
 /*

Modified: branches/samba/upstream/source/include/smbldap.h
===================================================================
--- branches/samba/upstream/source/include/smbldap.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/smbldap.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
     
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -40,7 +41,6 @@
 #define LDAP_OBJ_IDMAP_ENTRY		"sambaIdmapEntry"
 #define LDAP_OBJ_SID_ENTRY		"sambaSidEntry"
 #define LDAP_OBJ_TRUST_PASSWORD         "sambaTrustPassword"
-#define LDAP_OBJ_TRUSTDOM_PASSWORD      "sambaTrustedDomainPassword"
 
 #define LDAP_OBJ_ACCOUNT		"account"
 #define LDAP_OBJ_POSIXACCOUNT		"posixAccount"
@@ -128,7 +128,6 @@
    have to worry about LDAP structure types */
 
 NTSTATUS smbldap_init(TALLOC_CTX *mem_ctx,
-		      struct event_context *event_ctx,
                       const char *location,
                       struct smbldap_state **smbldap_state);
 
@@ -138,9 +137,11 @@
 void smbldap_make_mod(LDAP *ldap_struct, LDAPMessage *existing,
 		      LDAPMod ***mods,
 		      const char *attribute, const char *newval);
-bool smbldap_get_single_attribute (LDAP * ldap_struct, LDAPMessage * entry,
+BOOL smbldap_get_single_attribute (LDAP * ldap_struct, LDAPMessage * entry,
 				   const char *attribute, char *value,
 				   int max_len);
+BOOL smbldap_get_single_pstring (LDAP * ldap_struct, LDAPMessage * entry,
+				 const char *attribute, pstring value);
 char *smbldap_get_dn(LDAP *ld, LDAPMessage *entry);
 int smbldap_modify(struct smbldap_state *ldap_state,
                    const char *dn,
@@ -159,17 +160,16 @@
 	const char *uri;
 
 	/* credentials */
-	bool anonymous;
+	BOOL anonymous;
 	char *bind_dn;
 	char *bind_secret;
 
-	bool paged_results;
+	BOOL paged_results;
 
 	unsigned int num_failures;
 
 	time_t last_use;
-	struct event_context *event_context;
-	struct timed_event *idle_event;
+	smb_event_id_t event_id;
 
 	struct timeval last_rebind;
 };
@@ -220,8 +220,7 @@
 
 #endif 	/* HAVE_LDAP */
 
-#define LDAP_DEFAULT_TIMEOUT   15
-#define LDAP_CONNECTION_DEFAULT_TIMEOUT 2
+#define LDAP_CONNECT_DEFAULT_TIMEOUT   15
 #define LDAP_PAGE_SIZE 1024
 
 #endif	/* _SMBLDAP_H */

Modified: branches/samba/upstream/source/include/smbprofile.h
===================================================================
--- branches/samba/upstream/source/include/smbprofile.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/smbprofile.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
 */
 
@@ -103,10 +104,6 @@
 #define syscall_sendfile_count __profile_stats_value(PR_VALUE_SYSCALL_SENDFILE, count)
 #define syscall_sendfile_time __profile_stats_value(PR_VALUE_SYSCALL_SENDFILE, time)
 
-	PR_VALUE_SYSCALL_RECVFILE,
-#define syscall_recvfile_count __profile_stats_value(PR_VALUE_SYSCALL_RECVFILE, count)
-#define syscall_recvfile_time __profile_stats_value(PR_VALUE_SYSCALL_RECVFILE, time)
-
 	PR_VALUE_SYSCALL_RENAME,
 #define syscall_rename_count __profile_stats_value(PR_VALUE_SYSCALL_RENAME, count)
 #define syscall_rename_time __profile_stats_value(PR_VALUE_SYSCALL_RENAME, time)
@@ -147,10 +144,6 @@
 #define syscall_fchown_count __profile_stats_value(PR_VALUE_SYSCALL_FCHOWN, count)
 #define syscall_fchown_time __profile_stats_value(PR_VALUE_SYSCALL_FCHOWN, time)
 
-	PR_VALUE_SYSCALL_LCHOWN,
-#define syscall_lchown_count __profile_stats_value(PR_VALUE_SYSCALL_LCHOWN, count)
-#define syscall_lchown_time __profile_stats_value(PR_VALUE_SYSCALL_LCHOWN, time)
-
 	PR_VALUE_SYSCALL_CHDIR,
 #define syscall_chdir_count __profile_stats_value(PR_VALUE_SYSCALL_CHDIR, count)
 #define syscall_chdir_time __profile_stats_value(PR_VALUE_SYSCALL_CHDIR, time)
@@ -741,7 +734,6 @@
 	unsigned syscall_read_bytes;
 	unsigned syscall_write_bytes;
 	unsigned syscall_sendfile_bytes;
-	unsigned syscall_recvfile_bytes;
 
 /* stat cache counters */
 	unsigned statcache_lookups;
@@ -769,8 +761,8 @@
 
 extern struct profile_header *profile_h;
 extern struct profile_stats *profile_p;
-extern bool do_profile_flag;
-extern bool do_profile_times;
+extern BOOL do_profile_flag;
+extern BOOL do_profile_times;
 
 #ifdef WITH_PROFILE
 

Modified: branches/samba/upstream/source/include/spnego.h
===================================================================
--- branches/samba/upstream/source/include/spnego.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/spnego.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
 
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef SAMBA_SPNEGO_H

Modified: branches/samba/upstream/source/include/srvstr.h
===================================================================
--- branches/samba/upstream/source/include/srvstr.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/srvstr.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,24 +14,18 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
-#define srvstr_pull(base_ptr, smb_flags2, dest, src, dest_len, src_len, flags) \
-    pull_string(base_ptr, smb_flags2, dest, src, dest_len, src_len, flags)
+#define srvstr_pull(base_ptr, dest, src, dest_len, src_len, flags) \
+    pull_string(base_ptr, dest, src, dest_len, src_len, flags)
 
-/* talloc version of above. */
-#define srvstr_pull_talloc(ctx, base_ptr, smb_flags2, dest, src, src_len, flags) \
-    pull_string_talloc(ctx, base_ptr, smb_flags2, dest, src, src_len, flags)
-
 /* pull a string from the smb_buf part of a packet. In this case the
    string can either be null terminated or it can be terminated by the
    end of the smbbuf area 
 */
 
-#define srvstr_pull_buf(inbuf, smb_flags2, dest, src, dest_len, flags) \
-    pull_string(inbuf, smb_flags2, dest, src, dest_len, smb_bufrem(inbuf, src), flags)
+#define srvstr_pull_buf(inbuf, dest, src, dest_len, flags) \
+    pull_string(inbuf, dest, src, dest_len, smb_bufrem(inbuf, src), flags)
 
-/* talloc version of above. */
-#define srvstr_pull_buf_talloc(ctx, inbuf, smb_flags2, dest, src, flags) \
-    pull_string_talloc(ctx, inbuf, smb_flags2, dest, src, smb_bufrem(inbuf, src), flags)

Modified: branches/samba/upstream/source/include/sysquotas.h
===================================================================
--- branches/samba/upstream/source/include/sysquotas.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/sysquotas.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
     
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 3 of the License, or
+    the Free Software Foundation; either version 2 of the License, or
     (at your option) any later version.
     
     This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
     GNU General Public License for more details.
     
     You should have received a copy of the GNU General Public License
-    along with this program; if not, see <http://www.gnu.org/licenses/>.
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
  
 #ifndef _SYSQUOTAS_H

Deleted: branches/samba/upstream/source/include/talloc_stack.h
===================================================================
--- branches/samba/upstream/source/include/talloc_stack.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/talloc_stack.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,56 +0,0 @@
-/*
-   Unix SMB/CIFS implementation.
-   Implement a stack of talloc contexts
-   Copyright (C) Volker Lendecke 2007
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-/*
- * Implement a stack of talloc frames.
- *
- * When a new talloc stackframe is allocated with talloc_stackframe(), then
- * the TALLOC_CTX returned with talloc_tos() is reset to that new
- * frame. Whenever that stack frame is TALLOC_FREE()'ed, then the reverse
- * happens: The previous talloc_tos() is restored.
- *
- * This API is designed to be robust in the sense that if someone forgets to
- * TALLOC_FREE() a stackframe, then the next outer one correctly cleans up and
- * resets the talloc_tos().
- *
- */
-
-#ifndef _TALLOC_STACK_H
-#define _TALLOC_STACK_H
-
-#include "lib/talloc/talloc.h"
-
-/*
- * Create a new talloc stack frame.
- *
- * When free'd, it frees all stack frames that were created after this one and
- * not explicitly freed.
- */
-
-TALLOC_CTX *talloc_stackframe(void);
-TALLOC_CTX *talloc_stackframe_pool(size_t poolsize);
-
-/*
- * Get us the current top of the talloc stack.
- */
-
-TALLOC_CTX *talloc_tos(void);
-
-#endif

Modified: branches/samba/upstream/source/include/trans2.h
===================================================================
--- branches/samba/upstream/source/include/trans2.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/trans2.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _TRANS2_H_
@@ -528,11 +529,8 @@
 						(chflags) and lsattr */
 #define CIFS_UNIX_POSIX_PATHNAMES_CAP	   0x10 /* Use POSIX pathnames on the wire. */
 #define CIFS_UNIX_POSIX_PATH_OPERATIONS_CAP	   0x20 /* We can cope with POSIX open/mkdir/unlink etc. */
-#define CIFS_UNIX_LARGE_READ_CAP           0x40 /* We can cope with 24 bit reads in readX. */
-#define CIFS_UNIX_LARGE_WRITE_CAP          0x80 /* We can cope with 24 bit writes in writeX. */
-#define CIFS_UNIX_TRANSPORT_ENCRYPTION_CAP      0x100 /* We can do SPNEGO negotiations for encryption. */
-#define CIFS_UNIX_TRANSPORT_ENCRYPTION_MANDATORY_CAP    0x200 /* We *must* SPNEGO negotiations for encryption. */
 
+
 #define SMB_QUERY_POSIX_FS_INFO     0x201
 
 /* Returns FILE_SYSTEM_POSIX_INFO struct as follows
@@ -553,20 +551,6 @@
    (NB statfs field flags can come from FILE_SYSTEM_DEVICE_INFO call)  
 */
 
-#define SMB_QUERY_POSIX_WHO_AM_I  0x202 /* QFS Info */
-/* returns:
-        __u32 flags;  0 = Authenticated user 1 = GUEST 
-        __u32 mask;  which flags bits server understands ie 0x0001 
-        __u64 unix_user_id;
-        __u64 unix_user_gid;
-        __u32 number_of_supplementary_gids;  may be zero 
-        __u32 number_of_sids;  may be zero
-        __u32 length_of_sid_array;  in bytes - may be zero 
-        __u32 pad;  reserved - MBZ 
-        __u64 gid_array[0];  may be empty 
-        __u8 * psid_list  may be empty
-*/
-
 /* ... more as we think of them :-). */
 
 /* SMB POSIX ACL definitions. */
@@ -653,29 +637,6 @@
 	DOM_SID[] -		list of SIDs (may be empty)
 */
 
-/*
- * The following trans2 is done between client and server
- * as a FSINFO call to set up the encryption state for transport
- * encryption.
- * This is a subcommand of the TRANS2_QFSINFO.
- *
- * The request looks like :
- *
- * [data block] -> SPNEGO framed GSSAPI request.
- *
- * The reply looks like :
- *
- * [data block] -> SPNEGO framed GSSAPI reply - if error
- *                 is NT_STATUS_OK then we're done, if it's
- *                 NT_STATUS_MORE_PROCESSING_REQUIRED then the
- *                 client needs to keep going. If it's an
- *                 error it can be any NT_STATUS error.
- *
- */
-
-#define SMB_REQUEST_TRANSPORT_ENCRYPTION     0x203 /* QFSINFO */
-
-
 /* The query/set info levels for POSIX ACLs. */
 #define SMB_QUERY_POSIX_ACL  0x204
 #define SMB_SET_POSIX_ACL  0x204

Deleted: branches/samba/upstream/source/include/transfer_file.h
===================================================================
--- branches/samba/upstream/source/include/transfer_file.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/transfer_file.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,32 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * Utility functions to transfer files.
- *
- * Copyright (C) Michael Adam 2008
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef __TRANSFER_FILE_H__
-#define __TRANSFER_FILE_H__
-
-ssize_t transfer_file_internal(void *in_file,
-			       void *out_file,
-			       size_t n,
-			       ssize_t (*read_fn)(void *, void *, size_t),
-			       ssize_t (*write_fn)(void *, const void *, size_t));
-
-SMB_OFF_T transfer_file(int infd, int outfd, SMB_OFF_T n);
-
-#endif /* __TRANSFER_FILE_H__ */

Modified: branches/samba/upstream/source/include/util_getent.h
===================================================================
--- branches/samba/upstream/source/include/util_getent.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/util_getent.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _UTIL_GETENT_H

Modified: branches/samba/upstream/source/include/util_tdb.h
===================================================================
--- branches/samba/upstream/source/include/util_tdb.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/util_tdb.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef __TDBUTIL_H__
@@ -22,8 +23,10 @@
 
 #include "tdb.h"
 
-#include "talloc.h" /* for tdb_wrap_open() */
-#include "nt_status.h" /* for map_nt_error_from_tdb() */
+#ifndef _BOOL
+typedef int BOOL;
+#define _BOOL
+#endif
 
 /* single node of a list returned by tdb_search_keys */
 typedef struct keys_node 
@@ -38,25 +41,9 @@
 	struct tdb_wrap *next, *prev;
 };
 
-struct tdb_validation_status {
-	bool tdb_error;
-	bool bad_freelist;
-	bool bad_entry;
-	bool unknown_key;
-	bool success;
-};
-
-typedef int (*tdb_validate_data_func)(TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *state);
-
-TDB_DATA make_tdb_data(const uint8 *dptr, size_t dsize);
-TDB_DATA string_tdb_data(const char *string);
-TDB_DATA string_term_tdb_data(const char *string);
-
 TDB_LIST_NODE *tdb_search_keys(struct tdb_context*, const char*);
 void tdb_search_list_free(TDB_LIST_NODE*);
-
-int tdb_chainlock_with_timeout( TDB_CONTEXT *tdb, TDB_DATA key,
-				unsigned int timeout);
+int32_t tdb_change_int32_atomic(struct tdb_context *tdb, const char *keystr, int32_t *oldval, int32_t change_val);
 int tdb_lock_bystring(struct tdb_context *tdb, const char *keyval);
 int tdb_lock_bystring_with_timeout(TDB_CONTEXT *tdb, const char *keyval,
 				   int timeout);
@@ -64,45 +51,26 @@
 int tdb_read_lock_bystring_with_timeout(TDB_CONTEXT *tdb, const char *keyval,
 					unsigned int timeout);
 void tdb_read_unlock_bystring(TDB_CONTEXT *tdb, const char *keyval);
-
-int32 tdb_fetch_int32_byblob(TDB_CONTEXT *tdb, TDB_DATA key);
-int32 tdb_fetch_int32(struct tdb_context *tdb, const char *keystr);
-bool tdb_store_uint32_byblob(TDB_CONTEXT *tdb, TDB_DATA key, uint32 value);
-bool tdb_store_uint32(struct tdb_context *tdb, const char *keystr, uint32 value);
-int tdb_store_int32_byblob(TDB_CONTEXT *tdb, TDB_DATA key, int32 v);
-int tdb_store_int32(struct tdb_context *tdb, const char *keystr, int32 v);
-bool tdb_fetch_uint32_byblob(TDB_CONTEXT *tdb, TDB_DATA key, uint32 *value);
-bool tdb_fetch_uint32(struct tdb_context *tdb, const char *keystr, uint32 *value);
-int32 tdb_change_int32_atomic(struct tdb_context *tdb, const char *keystr, int32 *oldval, int32 change_val);
-bool tdb_change_uint32_atomic(TDB_CONTEXT *tdb, const char *keystr,
-			      uint32 *oldval, uint32 change_val);
-
+int32_t tdb_fetch_int32(struct tdb_context *tdb, const char *keystr);
+int tdb_store_uint32(struct tdb_context *tdb, const char *keystr, uint32_t value);
+int tdb_store_int32(struct tdb_context *tdb, const char *keystr, int32_t v);
+int tdb_fetch_uint32(struct tdb_context *tdb, const char *keystr, uint32_t *value);
+int tdb_traverse_delete_fn(struct tdb_context *the_tdb, TDB_DATA key, TDB_DATA dbuf,
+                     void *state);
 int tdb_store_bystring(struct tdb_context *tdb, const char *keystr, TDB_DATA data, int flags);
-int tdb_trans_store_bystring(TDB_CONTEXT *tdb, const char *keystr,
-			     TDB_DATA data, int flags);
 TDB_DATA tdb_fetch_bystring(struct tdb_context *tdb, const char *keystr);
 int tdb_delete_bystring(struct tdb_context *tdb, const char *keystr);
+struct tdb_context *tdb_open_log(const char *name, int hash_size,
+				 int tdb_flags, int open_flags, mode_t mode);
+int tdb_unpack(char *buf, int bufsize, const char *fmt, ...);
+size_t tdb_pack(char *buf, int bufsize, const char *fmt, ...);
+TDB_DATA make_tdb_data(const char *dptr, size_t dsize);
+TDB_DATA string_tdb_data(const char *string);
 int tdb_trans_store(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf,
 		    int flag);
-int tdb_trans_delete(struct tdb_context *tdb, TDB_DATA key);
+int tdb_change_uint32_atomic(TDB_CONTEXT *tdb, const char *keystr,
+			      uint32 *oldval, uint32 change_val);
+int tdb_chainlock_with_timeout( TDB_CONTEXT *tdb, TDB_DATA key,
+				unsigned int timeout);
 
-int tdb_unpack(const uint8 *buf, int bufsize, const char *fmt, ...);
-size_t tdb_pack(uint8 *buf, int bufsize, const char *fmt, ...);
-bool tdb_pack_append(TALLOC_CTX *mem_ctx, uint8 **buf, size_t *len,
-		     const char *fmt, ...);
-
-struct tdb_context *tdb_open_log(const char *name, int hash_size,
-				 int tdb_flags, int open_flags, mode_t mode);
-
-struct tdb_wrap *tdb_wrap_open(TALLOC_CTX *mem_ctx,
-			       const char *name, int hash_size, int tdb_flags,
-			       int open_flags, mode_t mode);
-
-NTSTATUS map_nt_error_from_tdb(enum TDB_ERROR err);
-
-int tdb_validate(struct tdb_context *tdb, tdb_validate_data_func validate_fn);
-int tdb_validate_open(const char *tdb_path, tdb_validate_data_func validate_fn);
-int tdb_validate_and_backup(const char *tdb_path,
-			    tdb_validate_data_func validate_fn);
-
 #endif /* __TDBUTIL_H__ */

Modified: branches/samba/upstream/source/include/version.h
===================================================================
--- branches/samba/upstream/source/include/version.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/version.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,7 +1,6 @@
 /* Autogenerated by script/mkversion.sh */
 #define SAMBA_VERSION_MAJOR 3
-#define SAMBA_VERSION_MINOR 2
-#define SAMBA_VERSION_RELEASE 0
-#define SAMBA_VERSION_RC_RELEASE 2
-#define SAMBA_VERSION_OFFICIAL_STRING "3.2.0rc2"
+#define SAMBA_VERSION_MINOR 0
+#define SAMBA_VERSION_RELEASE 30
+#define SAMBA_VERSION_OFFICIAL_STRING "3.0.30"
 #define SAMBA_VERSION_STRING samba_version_string()

Modified: branches/samba/upstream/source/include/vfs.h
===================================================================
--- branches/samba/upstream/source/include/vfs.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/vfs.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
    This work was sponsored by Optifacio Software Services, Inc.
 */
@@ -69,47 +70,9 @@
 /* Changed to version 20, use ntimes call instead of utime (greater
  * timestamp resolition. JRA. */
 /* Changed to version21 to add chflags operation -- jpeach */
-/* Changed to version22 to add lchown operation -- jra */
-/* Leave at 22 - not yet released. But change set_nt_acl to return an NTSTATUS. jra. */
-/* Leave at 22 - not yet released. Add file_id_create operation. --metze */
-/* Leave at 22 - not yet released. Change all BOOL parameters (int) to bool. jra. */
-/* Leave at 22 - not yet released. Added recvfile. */
-/* Leave at 22 - not yet released. Change get_nt_acl to return NTSTATUS - vl */
-/* Leave at 22 - not yet released. Change get_nt_acl to *not* take a
- * files_struct. - obnox.*/
-/* Leave at 22 - not yet released. Remove parameter fd from fget_nt_acl. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fd from gset_nt_acl. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fd from pread. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fd from pwrite. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fd from lseek. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fd from fsync. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fd from fstat. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fd from fchmod. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fd from fchown. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fd from ftruncate. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fd from lock. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fd from kernel_flock. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fd from linux_setlease. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fd from getlock. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fd from sys_acl_get_fd. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fd from fchmod_acl. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fd from sys_acl_set_fd. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fd from fgetxattr. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fd from flistxattr. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fd from fremovexattr. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fd from fsetxattr. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fd from aio_cancel. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fd from read. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fd from write. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fromfd from sendfile. - obnox */
-/* Leave at 22 - not yet released. Remove parameter fromfd from recvfile. - obnox */
-/* Leave at 22 - not yet released. Additional change: add operations for offline files -- ab */
-/* Leave at 22 - not yet released. Add the streaminfo call. -- jpeach, vl */
-/* Leave at 22 - not yet released. Remove parameter fd from close_fn. - obnox */
+#define SMB_VFS_INTERFACE_VERSION 21
 
-#define SMB_VFS_INTERFACE_VERSION 22
 
-
 /* to bug old modules which are trying to compile with the old functions */
 #define vfs_init __ERROR_please_port_this_module_to_SMB_VFS_INTERFACE_VERSION_8_donot_use_vfs_init_anymore(void) { __ERROR_please_port_this_module_to_SMB_VFS_INTERFACE_VERSION_8_donot_use_vfs_init_anymore };
 #define lp_parm_string __ERROR_please_port_lp_parm_string_to_lp_parm_const_string_or_lp_parm_talloc_string { \
@@ -128,7 +91,7 @@
 struct vfs_handle_struct;
 struct connection_struct;
 struct files_struct;
-struct security_descriptor;
+struct security_descriptor_info;
 struct vfs_statvfs_struct;
 
 /*
@@ -150,7 +113,6 @@
 	SMB_VFS_OP_SET_QUOTA,
 	SMB_VFS_OP_GET_SHADOW_COPY_DATA,
 	SMB_VFS_OP_STATVFS,
-	SMB_VFS_OP_FS_CAPABILITIES,
 
 	/* Directory operations */
 
@@ -173,7 +135,6 @@
 	SMB_VFS_OP_PWRITE,
 	SMB_VFS_OP_LSEEK,
 	SMB_VFS_OP_SENDFILE,
-	SMB_VFS_OP_RECVFILE,
 	SMB_VFS_OP_RENAME,
 	SMB_VFS_OP_FSYNC,
 	SMB_VFS_OP_STAT,
@@ -184,7 +145,6 @@
 	SMB_VFS_OP_FCHMOD,
 	SMB_VFS_OP_CHOWN,
 	SMB_VFS_OP_FCHOWN,
-	SMB_VFS_OP_LCHOWN,
 	SMB_VFS_OP_CHDIR,
 	SMB_VFS_OP_GETWD,
 	SMB_VFS_OP_NTIMES,
@@ -200,8 +160,6 @@
 	SMB_VFS_OP_REALPATH,
 	SMB_VFS_OP_NOTIFY_WATCH,
 	SMB_VFS_OP_CHFLAGS,
-	SMB_VFS_OP_FILE_ID_CREATE,
-	SMB_VFS_OP_STREAMINFO,
 
 	/* NT ACL operations. */
 
@@ -260,14 +218,9 @@
 	SMB_VFS_OP_AIO_ERROR,
 	SMB_VFS_OP_AIO_FSYNC,
 	SMB_VFS_OP_AIO_SUSPEND,
-        SMB_VFS_OP_AIO_FORCE,
 
-	/* offline operations */
-	SMB_VFS_OP_IS_OFFLINE,
-	SMB_VFS_OP_SET_OFFLINE,
-
 	/* This should always be last enum value */
-
+	
 	SMB_VFS_OP_LAST
 } vfs_op_type;
 
@@ -277,19 +230,18 @@
 struct vfs_ops {
 	struct vfs_fn_pointers {
 		/* Disk operations */
-
+		
 		int (*connect_fn)(struct vfs_handle_struct *handle, const char *service, const char *user);
 		void (*disconnect)(struct vfs_handle_struct *handle);
-		SMB_BIG_UINT (*disk_free)(struct vfs_handle_struct *handle, const char *path, bool small_query, SMB_BIG_UINT *bsize,
+		SMB_BIG_UINT (*disk_free)(struct vfs_handle_struct *handle, const char *path, BOOL small_query, SMB_BIG_UINT *bsize,
 			SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize);
 		int (*get_quota)(struct vfs_handle_struct *handle, enum SMB_QUOTA_TYPE qtype, unid_t id, SMB_DISK_QUOTA *qt);
 		int (*set_quota)(struct vfs_handle_struct *handle, enum SMB_QUOTA_TYPE qtype, unid_t id, SMB_DISK_QUOTA *qt);
-		int (*get_shadow_copy_data)(struct vfs_handle_struct *handle, struct files_struct *fsp, SHADOW_COPY_DATA *shadow_copy_data, bool labels);
+		int (*get_shadow_copy_data)(struct vfs_handle_struct *handle, struct files_struct *fsp, SHADOW_COPY_DATA *shadow_copy_data, BOOL labels);
 		int (*statvfs)(struct vfs_handle_struct *handle, const char *path, struct vfs_statvfs_struct *statbuf);
-		uint32_t (*fs_capabilities)(struct vfs_handle_struct *handle);
-
+		
 		/* Directory operations */
-
+		
 		SMB_STRUCT_DIR *(*opendir)(struct vfs_handle_struct *handle, const char *fname, const char *mask, uint32 attributes);
 		SMB_STRUCT_DIRENT *(*readdir)(struct vfs_handle_struct *handle, SMB_STRUCT_DIR *dirp);
 		void (*seekdir)(struct vfs_handle_struct *handle, SMB_STRUCT_DIR *dirp, long offset);
@@ -298,39 +250,37 @@
 		int (*mkdir)(struct vfs_handle_struct *handle, const char *path, mode_t mode);
 		int (*rmdir)(struct vfs_handle_struct *handle, const char *path);
 		int (*closedir)(struct vfs_handle_struct *handle, SMB_STRUCT_DIR *dir);
-
+		
 		/* File operations */
-
+		
 		int (*open)(struct vfs_handle_struct *handle, const char *fname, files_struct *fsp, int flags, mode_t mode);
-		int (*close_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp);
-		ssize_t (*vfs_read)(struct vfs_handle_struct *handle, struct files_struct *fsp, void *data, size_t n);
-		ssize_t (*pread)(struct vfs_handle_struct *handle, struct files_struct *fsp, void *data, size_t n, SMB_OFF_T offset);
-		ssize_t (*write)(struct vfs_handle_struct *handle, struct files_struct *fsp, const void *data, size_t n);
-		ssize_t (*pwrite)(struct vfs_handle_struct *handle, struct files_struct *fsp, const void *data, size_t n, SMB_OFF_T offset);
-		SMB_OFF_T (*lseek)(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_OFF_T offset, int whence);
-		ssize_t (*sendfile)(struct vfs_handle_struct *handle, int tofd, files_struct *fromfsp, const DATA_BLOB *header, SMB_OFF_T offset, size_t count);
-		ssize_t (*recvfile)(struct vfs_handle_struct *handle, int fromfd, files_struct *tofsp, SMB_OFF_T offset, size_t count);
+		int (*close_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd);
+		ssize_t (*read)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, void *data, size_t n);
+		ssize_t (*pread)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, void *data, size_t n, SMB_OFF_T offset);
+		ssize_t (*write)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, const void *data, size_t n);
+		ssize_t (*pwrite)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, const void *data, size_t n, SMB_OFF_T offset);
+		SMB_OFF_T (*lseek)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, SMB_OFF_T offset, int whence);
+		ssize_t (*sendfile)(struct vfs_handle_struct *handle, int tofd, files_struct *fsp, int fromfd, const DATA_BLOB *header, SMB_OFF_T offset, size_t count);
 		int (*rename)(struct vfs_handle_struct *handle, const char *oldname, const char *newname);
-		int (*fsync)(struct vfs_handle_struct *handle, struct files_struct *fsp);
+		int (*fsync)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd);
 		int (*stat)(struct vfs_handle_struct *handle, const char *fname, SMB_STRUCT_STAT *sbuf);
-		int (*fstat)(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_STAT *sbuf);
+		int (*fstat)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, SMB_STRUCT_STAT *sbuf);
 		int (*lstat)(struct vfs_handle_struct *handle, const char *path, SMB_STRUCT_STAT *sbuf);
 		int (*unlink)(struct vfs_handle_struct *handle, const char *path);
 		int (*chmod)(struct vfs_handle_struct *handle, const char *path, mode_t mode);
-		int (*fchmod)(struct vfs_handle_struct *handle, struct files_struct *fsp, mode_t mode);
+		int (*fchmod)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, mode_t mode);
 		int (*chown)(struct vfs_handle_struct *handle, const char *path, uid_t uid, gid_t gid);
-		int (*fchown)(struct vfs_handle_struct *handle, struct files_struct *fsp, uid_t uid, gid_t gid);
-		int (*lchown)(struct vfs_handle_struct *handle, const char *path, uid_t uid, gid_t gid);
+		int (*fchown)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, uid_t uid, gid_t gid);
 		int (*chdir)(struct vfs_handle_struct *handle, const char *path);
 		char *(*getwd)(struct vfs_handle_struct *handle, char *buf);
 		int (*ntimes)(struct vfs_handle_struct *handle, const char *path, const struct timespec ts[2]);
-		int (*ftruncate)(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_OFF_T offset);
-		bool (*lock)(struct vfs_handle_struct *handle, struct files_struct *fsp, int op, SMB_OFF_T offset, SMB_OFF_T count, int type);
-		int (*kernel_flock)(struct vfs_handle_struct *handle, struct files_struct *fsp, uint32 share_mode);
-		int (*linux_setlease)(struct vfs_handle_struct *handle, struct files_struct *fsp, int leasetype);
-		bool (*getlock)(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_OFF_T *poffset, SMB_OFF_T *pcount, int *ptype, pid_t *ppid);
+		int (*ftruncate)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, SMB_OFF_T offset);
+		BOOL (*lock)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, int op, SMB_OFF_T offset, SMB_OFF_T count, int type);
+		int (*kernel_flock)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, uint32 share_mode);
+		int (*linux_setlease)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, int leasetype);
+		BOOL (*getlock)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, SMB_OFF_T *poffset, SMB_OFF_T *pcount, int *ptype, pid_t *ppid);
 		int (*symlink)(struct vfs_handle_struct *handle, const char *oldpath, const char *newpath);
-		int (*vfs_readlink)(struct vfs_handle_struct *handle, const char *path, char *buf, size_t bufsiz);
+		int (*readlink)(struct vfs_handle_struct *handle, const char *path, char *buf, size_t bufsiz);
 		int (*link)(struct vfs_handle_struct *handle, const char *oldpath, const char *newpath);
 		int (*mknod)(struct vfs_handle_struct *handle, const char *path, mode_t mode, SMB_DEV_T dev);
 		char *(*realpath)(struct vfs_handle_struct *handle, const char *path, char *resolved_path);
@@ -341,47 +291,26 @@
 							  void *private_data,
 							  struct notify_event *ev),
 					 void *private_data, void *handle_p);
-		int (*chflags)(struct vfs_handle_struct *handle, const char *path, unsigned int flags);
-		struct file_id (*file_id_create)(struct vfs_handle_struct *handle, SMB_DEV_T dev, SMB_INO_T inode);
-
-		NTSTATUS (*streaminfo)(struct vfs_handle_struct *handle,
-				       struct files_struct *fsp,
-				       const char *fname,
-				       TALLOC_CTX *mem_ctx,
-				       unsigned int *num_streams,
-				       struct stream_struct **streams);
-
+		int (*chflags)(struct vfs_handle_struct *handle, const char *path, uint flags);
+		
 		/* NT ACL operations. */
-
-		NTSTATUS (*fget_nt_acl)(struct vfs_handle_struct *handle,
-					struct files_struct *fsp,
-					uint32 security_info,
-					struct security_descriptor **ppdesc);
-		NTSTATUS (*get_nt_acl)(struct vfs_handle_struct *handle,
-				       const char *name,
-				       uint32 security_info,
-				       struct security_descriptor **ppdesc);
-		NTSTATUS (*fset_nt_acl)(struct vfs_handle_struct *handle,
-					struct files_struct *fsp,
-					uint32 security_info_sent,
-					struct security_descriptor *psd);
-		NTSTATUS (*set_nt_acl)(struct vfs_handle_struct *handle,
-				       struct files_struct *fsp,
-				       const char *name,
-				       uint32 security_info_sent,
-				       struct security_descriptor *psd);
-
+		
+		size_t (*fget_nt_acl)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd,  uint32 security_info, struct security_descriptor_info **ppdesc);
+		size_t (*get_nt_acl)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name,  uint32 security_info, struct security_descriptor_info **ppdesc);
+		BOOL (*fset_nt_acl)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, uint32 security_info_sent, struct security_descriptor_info *psd);
+		BOOL (*set_nt_acl)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name, uint32 security_info_sent, struct security_descriptor_info *psd);
+		
 		/* POSIX ACL operations. */
-
+		
 		int (*chmod_acl)(struct vfs_handle_struct *handle, const char *name, mode_t mode);
-		int (*fchmod_acl)(struct vfs_handle_struct *handle, struct files_struct *fsp, mode_t mode);
-
+		int (*fchmod_acl)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, mode_t mode);
+		
 		int (*sys_acl_get_entry)(struct vfs_handle_struct *handle, SMB_ACL_T theacl, int entry_id, SMB_ACL_ENTRY_T *entry_p);
 		int (*sys_acl_get_tag_type)(struct vfs_handle_struct *handle, SMB_ACL_ENTRY_T entry_d, SMB_ACL_TAG_T *tag_type_p);
 		int (*sys_acl_get_permset)(struct vfs_handle_struct *handle, SMB_ACL_ENTRY_T entry_d, SMB_ACL_PERMSET_T *permset_p);
 		void * (*sys_acl_get_qualifier)(struct vfs_handle_struct *handle, SMB_ACL_ENTRY_T entry_d);
 		SMB_ACL_T (*sys_acl_get_file)(struct vfs_handle_struct *handle, const char *path_p, SMB_ACL_TYPE_T type);
-		SMB_ACL_T (*sys_acl_get_fd)(struct vfs_handle_struct *handle, struct files_struct *fsp);
+		SMB_ACL_T (*sys_acl_get_fd)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd);
 		int (*sys_acl_clear_perms)(struct vfs_handle_struct *handle, SMB_ACL_PERMSET_T permset);
 		int (*sys_acl_add_perm)(struct vfs_handle_struct *handle, SMB_ACL_PERMSET_T permset, SMB_ACL_PERM_T perm);
 		char * (*sys_acl_to_text)(struct vfs_handle_struct *handle, SMB_ACL_T theacl, ssize_t *plen);
@@ -392,7 +321,7 @@
 		int (*sys_acl_set_permset)(struct vfs_handle_struct *handle, SMB_ACL_ENTRY_T entry, SMB_ACL_PERMSET_T permset);
 		int (*sys_acl_valid)(struct vfs_handle_struct *handle, SMB_ACL_T theacl );
 		int (*sys_acl_set_file)(struct vfs_handle_struct *handle, const char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl);
-		int (*sys_acl_set_fd)(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_ACL_T theacl);
+		int (*sys_acl_set_fd)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, SMB_ACL_T theacl);
 		int (*sys_acl_delete_def_file)(struct vfs_handle_struct *handle, const char *path);
 		int (*sys_acl_get_perm)(struct vfs_handle_struct *handle, SMB_ACL_PERMSET_T permset, SMB_ACL_PERM_T perm);
 		int (*sys_acl_free_text)(struct vfs_handle_struct *handle, char *text);
@@ -402,30 +331,26 @@
 		/* EA operations. */
 		ssize_t (*getxattr)(struct vfs_handle_struct *handle,const char *path, const char *name, void *value, size_t size);
 		ssize_t (*lgetxattr)(struct vfs_handle_struct *handle,const char *path, const char *name, void *value, size_t size);
-		ssize_t (*fgetxattr)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name, void *value, size_t size);
+		ssize_t (*fgetxattr)(struct vfs_handle_struct *handle, struct files_struct *fsp,int fd, const char *name, void *value, size_t size);
 		ssize_t (*listxattr)(struct vfs_handle_struct *handle, const char *path, char *list, size_t size);
 		ssize_t (*llistxattr)(struct vfs_handle_struct *handle, const char *path, char *list, size_t size);
-		ssize_t (*flistxattr)(struct vfs_handle_struct *handle, struct files_struct *fsp, char *list, size_t size);
+		ssize_t (*flistxattr)(struct vfs_handle_struct *handle, struct files_struct *fsp,int fd, char *list, size_t size);
 		int (*removexattr)(struct vfs_handle_struct *handle, const char *path, const char *name);
 		int (*lremovexattr)(struct vfs_handle_struct *handle, const char *path, const char *name);
-		int (*fremovexattr)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name);
+		int (*fremovexattr)(struct vfs_handle_struct *handle, struct files_struct *fsp,int filedes, const char *name);
 		int (*setxattr)(struct vfs_handle_struct *handle, const char *path, const char *name, const void *value, size_t size, int flags);
 		int (*lsetxattr)(struct vfs_handle_struct *handle, const char *path, const char *name, const void *value, size_t size, int flags);
-		int (*fsetxattr)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name, const void *value, size_t size, int flags);
+		int (*fsetxattr)(struct vfs_handle_struct *handle, struct files_struct *fsp,int filedes, const char *name, const void *value, size_t size, int flags);
 
 		/* aio operations */
 		int (*aio_read)(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb);
 		int (*aio_write)(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb);
 		ssize_t (*aio_return_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb);
-		int (*aio_cancel)(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb);
+		int (*aio_cancel)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, SMB_STRUCT_AIOCB *aiocb);
 		int (*aio_error_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb);
 		int (*aio_fsync)(struct vfs_handle_struct *handle, struct files_struct *fsp, int op, SMB_STRUCT_AIOCB *aiocb);
 		int (*aio_suspend)(struct vfs_handle_struct *handle, struct files_struct *fsp, const SMB_STRUCT_AIOCB * const aiocb[], int n, const struct timespec *timeout);
-		bool (*aio_force)(struct vfs_handle_struct *handle, struct files_struct *fsp);
 
-		/* offline operations */
-		bool (*is_offline)(struct vfs_handle_struct *handle, const char *path, SMB_STRUCT_STAT *sbuf);
-		int (*set_offline)(struct vfs_handle_struct *handle, const char *path);
 	} ops;
 
 	struct vfs_handles_pointers {
@@ -438,7 +363,6 @@
 		struct vfs_handle_struct *set_quota;
 		struct vfs_handle_struct *get_shadow_copy_data;
 		struct vfs_handle_struct *statvfs;
-		struct vfs_handle_struct *fs_capabilities;
 
 		/* Directory operations */
 
@@ -455,13 +379,12 @@
 
 		struct vfs_handle_struct *open;
 		struct vfs_handle_struct *close_hnd;
-		struct vfs_handle_struct *vfs_read;
+		struct vfs_handle_struct *read;
 		struct vfs_handle_struct *pread;
 		struct vfs_handle_struct *write;
 		struct vfs_handle_struct *pwrite;
 		struct vfs_handle_struct *lseek;
 		struct vfs_handle_struct *sendfile;
-		struct vfs_handle_struct *recvfile;
 		struct vfs_handle_struct *rename;
 		struct vfs_handle_struct *fsync;
 		struct vfs_handle_struct *stat;
@@ -472,7 +395,6 @@
 		struct vfs_handle_struct *fchmod;
 		struct vfs_handle_struct *chown;
 		struct vfs_handle_struct *fchown;
-		struct vfs_handle_struct *lchown;
 		struct vfs_handle_struct *chdir;
 		struct vfs_handle_struct *getwd;
 		struct vfs_handle_struct *ntimes;
@@ -482,14 +404,12 @@
 		struct vfs_handle_struct *linux_setlease;
 		struct vfs_handle_struct *getlock;
 		struct vfs_handle_struct *symlink;
-		struct vfs_handle_struct *vfs_readlink;
+		struct vfs_handle_struct *readlink;
 		struct vfs_handle_struct *link;
 		struct vfs_handle_struct *mknod;
 		struct vfs_handle_struct *realpath;
 		struct vfs_handle_struct *notify_watch;
 		struct vfs_handle_struct *chflags;
-		struct vfs_handle_struct *file_id_create;
-		struct vfs_handle_struct *streaminfo;
 
 		/* NT ACL operations. */
 
@@ -548,32 +468,27 @@
 		struct vfs_handle_struct *aio_error;
 		struct vfs_handle_struct *aio_fsync;
 		struct vfs_handle_struct *aio_suspend;
-		struct vfs_handle_struct *aio_force;
-
-		/* offline operations */
-		struct vfs_handle_struct *is_offline;
-		struct vfs_handle_struct *set_offline;
 	} handles;
 };
 
 /*
     Possible VFS operation layers (per-operation)
-
+    
     These values are used by VFS subsystem when building vfs_ops for connection
     from multiple VFS modules. Internally, Samba differentiates only opaque and
     transparent layers at this process. Other types are used for providing better
     diagnosing facilities.
-
+    
     Most modules will provide transparent layers. Opaque layer is for modules
     which implement actual file system calls (like DB-based VFS). For example,
     default POSIX VFS which is built in into Samba is an opaque VFS module.
-
+    
     Other layer types (audit, splitter, scanner) were designed to provide different 
     degree of transparency and for diagnosing VFS module behaviour.
-
+    
     Each module can implement several layers at the same time provided that only
     one layer is used per each operation.
-
+    
 */
 
 typedef enum _vfs_op_layer {
@@ -592,7 +507,7 @@
 
 /*
     VFS operation description. Each VFS module registers an array of vfs_op_tuple to VFS subsystem,
-    which describes all operations this module is willing to intercept.
+    which describes all operations this module is willing to intercept. 
     VFS subsystem initializes then the conn->vfs_ops and conn->vfs_opaque_ops structs
     using this information.
 */
@@ -617,12 +532,12 @@
 typedef struct vfs_statvfs_struct {
 	/* For undefined recommended transfer size return -1 in that field */
 	uint32 OptimalTransferSize;  /* bsize on some os, iosize on other os */
-	uint32 BlockSize;
+	uint32 BlockSize; 
 
 	/*
 	 The next three fields are in terms of the block size.
 	 (above). If block size is unknown, 4096 would be a
-	 reasonable block size for a server to report.
+	 reasonable block size for a server to report. 
 	 Note that returning the blocks/blocksavail removes need
 	 to make a second call (to QFSInfo level 0x103 to get this info.
 	 UserBlockAvail is typically less than or equal to BlocksAvail,
@@ -639,25 +554,14 @@
 	SMB_BIG_UINT FsIdentifier;   /* fsid */
 	/* NB Namelen comes from FILE_SYSTEM_ATTRIBUTE_INFO call */
 	/* NB flags can come from FILE_SYSTEM_DEVICE_INFO call   */
-
-	int FsCapabilities;
 } vfs_statvfs_struct;
 
-/* Add a new FSP extension of the given type. Returns a pointer to the
- * extenstion data.
- */
 #define VFS_ADD_FSP_EXTENSION(handle, fsp, type) \
     vfs_add_fsp_extension_notype(handle, (fsp), sizeof(type))
 
-/* Return a pointer to the existing FSP extension data. */
 #define VFS_FETCH_FSP_EXTENSION(handle, fsp) \
     vfs_fetch_fsp_extension(handle, (fsp))
 
-/* Return the talloc context associated with an FSP extension. */
-#define VFS_MEMCTX_FSP_EXTENSION(handle, fsp) \
-    vfs_memctx_fsp_extension(handle, (fsp))
-
-/* Remove and destroy an FSP extension. */
 #define VFS_REMOVE_FSP_EXTENSION(handle, fsp) \
     vfs_remove_fsp_extension((handle), (fsp))
 

Modified: branches/samba/upstream/source/include/vfs_macros.h
===================================================================
--- branches/samba/upstream/source/include/vfs_macros.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/vfs_macros.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,20 +1,21 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    VFS wrapper macros
    Copyright (C) Stefan (metze) Metzmacher	2003
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _VFS_MACROS_H
@@ -26,7 +27,7 @@
  (Fixes should go also into the vfs_opaque_* and vfs_next_* macros!)
 ********************************************************************/
 
-/* Disk operations */
+/* Disk operations */    
 #define SMB_VFS_CONNECT(conn, service, user) ((conn)->vfs.ops.connect_fn((conn)->vfs.handles.connect_hnd, (service), (user)))
 #define SMB_VFS_DISCONNECT(conn) ((conn)->vfs.ops.disconnect((conn)->vfs.handles.disconnect))
 #define SMB_VFS_DISK_FREE(conn, path, small_query, bsize, dfree ,dsize) ((conn)->vfs.ops.disk_free((conn)->vfs.handles.disk_free, (path), (small_query), (bsize), (dfree), (dsize)))
@@ -34,7 +35,6 @@
 #define SMB_VFS_SET_QUOTA(conn, qtype, id, qt) ((conn)->vfs.ops.set_quota((conn)->vfs.handles.set_quota, (qtype), (id), (qt)))
 #define SMB_VFS_GET_SHADOW_COPY_DATA(fsp,shadow_copy_data,labels) ((fsp)->conn->vfs.ops.get_shadow_copy_data((fsp)->conn->vfs.handles.get_shadow_copy_data,(fsp),(shadow_copy_data),(labels)))
 #define SMB_VFS_STATVFS(conn, path, statbuf) ((conn)->vfs.ops.statvfs((conn)->vfs.handles.statvfs, (path), (statbuf)))
-#define SMB_VFS_FS_CAPABILITIES(conn) ((conn)->vfs.ops.fs_capabilities((conn)->vfs.handles.fs_capabilities))
 
 /* Directory operations */
 #define SMB_VFS_OPENDIR(conn, fname, mask, attr) ((conn)->vfs.ops.opendir((conn)->vfs.handles.opendir, (fname), (mask), (attr)))
@@ -45,62 +45,58 @@
 #define SMB_VFS_MKDIR(conn, path, mode) ((conn)->vfs.ops.mkdir((conn)->vfs.handles.mkdir,(path), (mode)))
 #define SMB_VFS_RMDIR(conn, path) ((conn)->vfs.ops.rmdir((conn)->vfs.handles.rmdir, (path)))
 #define SMB_VFS_CLOSEDIR(conn, dir) ((conn)->vfs.ops.closedir((conn)->vfs.handles.closedir, dir))
-
+    
 /* File operations */
 #define SMB_VFS_OPEN(conn, fname, fsp, flags, mode) (((conn)->vfs.ops.open)((conn)->vfs.handles.open, (fname), (fsp), (flags), (mode)))
-#define SMB_VFS_CLOSE(fsp) ((fsp)->conn->vfs.ops.close_fn((fsp)->conn->vfs.handles.close_hnd, (fsp)))
-#define SMB_VFS_READ(fsp, data, n) ((fsp)->conn->vfs.ops.vfs_read((fsp)->conn->vfs.handles.vfs_read, (fsp), (data), (n)))
-#define SMB_VFS_PREAD(fsp, data, n, off) ((fsp)->conn->vfs.ops.pread((fsp)->conn->vfs.handles.pread, (fsp), (data), (n), (off)))
-#define SMB_VFS_WRITE(fsp, data, n) ((fsp)->conn->vfs.ops.write((fsp)->conn->vfs.handles.write, (fsp), (data), (n)))
-#define SMB_VFS_PWRITE(fsp, data, n, off) ((fsp)->conn->vfs.ops.pwrite((fsp)->conn->vfs.handles.pwrite, (fsp), (data), (n), (off)))
-#define SMB_VFS_LSEEK(fsp, offset, whence) ((fsp)->conn->vfs.ops.lseek((fsp)->conn->vfs.handles.lseek, (fsp), (offset), (whence)))
-#define SMB_VFS_SENDFILE(tofd, fromfsp, header, offset, count) ((fsp)->conn->vfs.ops.sendfile((fsp)->conn->vfs.handles.sendfile, (tofd), (fromfsp), (header), (offset), (count)))
-#define SMB_VFS_RECVFILE(fromfd, tofsp, offset, count) ((fsp)->conn->vfs.ops.recvfile((fsp)->conn->vfs.handles.recvfile, (fromfd), (tofsp), (offset), (count)))
+#define SMB_VFS_CLOSE(fsp, fd) ((fsp)->conn->vfs.ops.close_fn((fsp)->conn->vfs.handles.close_hnd, (fsp), (fd)))
+#define SMB_VFS_READ(fsp, fd, data, n) ((fsp)->conn->vfs.ops.read((fsp)->conn->vfs.handles.read, (fsp), (fd), (data), (n)))
+#define SMB_VFS_PREAD(fsp, fd, data, n, off) ((fsp)->conn->vfs.ops.pread((fsp)->conn->vfs.handles.pread, (fsp), (fd), (data), (n), (off)))
+#define SMB_VFS_WRITE(fsp, fd, data, n) ((fsp)->conn->vfs.ops.write((fsp)->conn->vfs.handles.write, (fsp), (fd), (data), (n)))
+#define SMB_VFS_PWRITE(fsp, fd, data, n, off) ((fsp)->conn->vfs.ops.pwrite((fsp)->conn->vfs.handles.pwrite, (fsp), (fd), (data), (n), (off)))
+#define SMB_VFS_LSEEK(fsp, fd, offset, whence) ((fsp)->conn->vfs.ops.lseek((fsp)->conn->vfs.handles.lseek, (fsp), (fd), (offset), (whence)))
+#define SMB_VFS_SENDFILE(tofd, fsp, fromfd, header, offset, count) ((fsp)->conn->vfs.ops.sendfile((fsp)->conn->vfs.handles.sendfile, (tofd), (fsp), (fromfd), (header), (offset), (count)))
 #define SMB_VFS_RENAME(conn, old, new) ((conn)->vfs.ops.rename((conn)->vfs.handles.rename, (old), (new)))
-#define SMB_VFS_FSYNC(fsp) ((fsp)->conn->vfs.ops.fsync((fsp)->conn->vfs.handles.fsync, (fsp)))
+#define SMB_VFS_FSYNC(fsp, fd) ((fsp)->conn->vfs.ops.fsync((fsp)->conn->vfs.handles.fsync, (fsp), (fd)))
 #define SMB_VFS_STAT(conn, fname, sbuf) ((conn)->vfs.ops.stat((conn)->vfs.handles.stat, (fname), (sbuf)))
-#define SMB_VFS_FSTAT(fsp, sbuf) ((fsp)->conn->vfs.ops.fstat((fsp)->conn->vfs.handles.fstat, (fsp), (sbuf)))
+#define SMB_VFS_FSTAT(fsp, fd, sbuf) ((fsp)->conn->vfs.ops.fstat((fsp)->conn->vfs.handles.fstat, (fsp) ,(fd) ,(sbuf)))
 #define SMB_VFS_LSTAT(conn, path, sbuf) ((conn)->vfs.ops.lstat((conn)->vfs.handles.lstat, (path), (sbuf)))
 #define SMB_VFS_UNLINK(conn, path) ((conn)->vfs.ops.unlink((conn)->vfs.handles.unlink, (path)))
 #define SMB_VFS_CHMOD(conn, path, mode) ((conn)->vfs.ops.chmod((conn)->vfs.handles.chmod, (path), (mode)))
-#define SMB_VFS_FCHMOD(fsp, mode) ((fsp)->conn->vfs.ops.fchmod((fsp)->conn->vfs.handles.fchmod, (fsp), (mode)))
+#define SMB_VFS_FCHMOD(fsp, fd, mode) ((fsp)->conn->vfs.ops.fchmod((fsp)->conn->vfs.handles.fchmod, (fsp), (fd), (mode)))
 #define SMB_VFS_CHOWN(conn, path, uid, gid) ((conn)->vfs.ops.chown((conn)->vfs.handles.chown, (path), (uid), (gid)))
-#define SMB_VFS_FCHOWN(fsp, uid, gid) ((fsp)->conn->vfs.ops.fchown((fsp)->conn->vfs.handles.fchown, (fsp), (uid), (gid)))
-#define SMB_VFS_LCHOWN(conn, path, uid, gid) ((conn)->vfs.ops.lchown((conn)->vfs.handles.lchown, (path), (uid), (gid)))
+#define SMB_VFS_FCHOWN(fsp, fd, uid, gid) ((fsp)->conn->vfs.ops.fchown((fsp)->conn->vfs.handles.fchown, (fsp), (fd), (uid), (gid)))
 #define SMB_VFS_CHDIR(conn, path) ((conn)->vfs.ops.chdir((conn)->vfs.handles.chdir, (path)))
 #define SMB_VFS_GETWD(conn, buf) ((conn)->vfs.ops.getwd((conn)->vfs.handles.getwd, (buf)))
 #define SMB_VFS_NTIMES(conn, path, ts) ((conn)->vfs.ops.ntimes((conn)->vfs.handles.ntimes, (path), (ts)))
-#define SMB_VFS_FTRUNCATE(fsp, offset) ((fsp)->conn->vfs.ops.ftruncate((fsp)->conn->vfs.handles.ftruncate, (fsp), (offset)))
-#define SMB_VFS_LOCK(fsp, op, offset, count, type) ((fsp)->conn->vfs.ops.lock((fsp)->conn->vfs.handles.lock, (fsp), (op), (offset), (count), (type)))
-#define SMB_VFS_KERNEL_FLOCK(fsp, share_mode) ((fsp)->conn->vfs.ops.kernel_flock((fsp)->conn->vfs.handles.kernel_flock, (fsp), (share_mode)))
-#define SMB_VFS_LINUX_SETLEASE(fsp, leasetype) ((fsp)->conn->vfs.ops.linux_setlease((fsp)->conn->vfs.handles.linux_setlease, (fsp), (leasetype)))
-#define SMB_VFS_GETLOCK(fsp, poffset, pcount, ptype, ppid) ((fsp)->conn->vfs.ops.getlock((fsp)->conn->vfs.handles.getlock, (fsp), (poffset), (pcount), (ptype), (ppid)))
+#define SMB_VFS_FTRUNCATE(fsp, fd, offset) ((fsp)->conn->vfs.ops.ftruncate((fsp)->conn->vfs.handles.ftruncate, (fsp), (fd), (offset)))
+#define SMB_VFS_LOCK(fsp, fd, op, offset, count, type) ((fsp)->conn->vfs.ops.lock((fsp)->conn->vfs.handles.lock, (fsp), (fd) ,(op), (offset), (count), (type)))
+#define SMB_VFS_KERNEL_FLOCK(fsp, fd, share_mode) ((fsp)->conn->vfs.ops.kernel_flock((fsp)->conn->vfs.handles.kernel_flock, (fsp), (fd), (share_mode)))
+#define SMB_VFS_LINUX_SETLEASE(fsp, fd, leasetype) ((fsp)->conn->vfs.ops.linux_setlease((fsp)->conn->vfs.handles.linux_setlease, (fsp), (fd), (leasetype)))
+#define SMB_VFS_GETLOCK(fsp, fd, poffset, pcount, ptype, ppid) ((fsp)->conn->vfs.ops.getlock((fsp)->conn->vfs.handles.getlock, (fsp), (fd) ,(poffset), (pcount), (ptype), (ppid)))
 #define SMB_VFS_SYMLINK(conn, oldpath, newpath) ((conn)->vfs.ops.symlink((conn)->vfs.handles.symlink, (oldpath), (newpath)))
-#define SMB_VFS_READLINK(conn, path, buf, bufsiz) ((conn)->vfs.ops.vfs_readlink((conn)->vfs.handles.vfs_readlink, (path), (buf), (bufsiz)))
+#define SMB_VFS_READLINK(conn, path, buf, bufsiz) ((conn)->vfs.ops.readlink((conn)->vfs.handles.readlink, (path), (buf), (bufsiz)))
 #define SMB_VFS_LINK(conn, oldpath, newpath) ((conn)->vfs.ops.link((conn)->vfs.handles.link, (oldpath), (newpath)))
 #define SMB_VFS_MKNOD(conn, path, mode, dev) ((conn)->vfs.ops.mknod((conn)->vfs.handles.mknod, (path), (mode), (dev)))
 #define SMB_VFS_REALPATH(conn, path, resolved_path) ((conn)->vfs.ops.realpath((conn)->vfs.handles.realpath, (path), (resolved_path)))
 #define SMB_VFS_NOTIFY_WATCH(conn, ctx, e, callback, private_data, handle_p) ((conn)->vfs.ops.notify_watch((conn)->vfs.handles.notify_watch, (ctx), (e), (callback), (private_data), (handle_p)))
 #define SMB_VFS_CHFLAGS(conn, path, flags) ((conn)->vfs.ops.chflags((conn)->vfs.handles.chflags, (path), (flags)))
-#define SMB_VFS_FILE_ID_CREATE(conn, dev, inode) ((conn)->vfs.ops.file_id_create((conn)->vfs.handles.file_id_create, (dev), (inode)))
-#define SMB_VFS_STREAMINFO(conn, fsp, fname, mem_ctx, num_streams, streams) ((conn)->vfs.ops.streaminfo((conn)->vfs.handles.streaminfo, (fsp), (fname), (mem_ctx), (num_streams), (streams)))
 
 /* NT ACL operations. */
-#define SMB_VFS_FGET_NT_ACL(fsp, security_info, ppdesc) ((fsp)->conn->vfs.ops.fget_nt_acl((fsp)->conn->vfs.handles.fget_nt_acl, (fsp), (security_info), (ppdesc)))
-#define SMB_VFS_GET_NT_ACL(conn, name, security_info, ppdesc) ((conn)->vfs.ops.get_nt_acl((conn)->vfs.handles.get_nt_acl, (name), (security_info), (ppdesc)))
-#define SMB_VFS_FSET_NT_ACL(fsp, security_info_sent, psd) ((fsp)->conn->vfs.ops.fset_nt_acl((fsp)->conn->vfs.handles.fset_nt_acl, (fsp), (security_info_sent), (psd)))
+#define SMB_VFS_FGET_NT_ACL(fsp, fd, security_info, ppdesc) ((fsp)->conn->vfs.ops.fget_nt_acl((fsp)->conn->vfs.handles.fget_nt_acl, (fsp), (fd), (security_info), (ppdesc)))
+#define SMB_VFS_GET_NT_ACL(fsp, name, security_info, ppdesc) ((fsp)->conn->vfs.ops.get_nt_acl((fsp)->conn->vfs.handles.get_nt_acl, (fsp), (name), (security_info), (ppdesc)))
+#define SMB_VFS_FSET_NT_ACL(fsp, fd, security_info_sent, psd) ((fsp)->conn->vfs.ops.fset_nt_acl((fsp)->conn->vfs.handles.fset_nt_acl, (fsp), (fd), (security_info_sent), (psd)))
 #define SMB_VFS_SET_NT_ACL(fsp, name, security_info_sent, psd) ((fsp)->conn->vfs.ops.set_nt_acl((fsp)->conn->vfs.handles.set_nt_acl, (fsp), (name), (security_info_sent), (psd)))
 
 /* POSIX ACL operations. */
 #define SMB_VFS_CHMOD_ACL(conn, name, mode) ((conn)->vfs.ops.chmod_acl((conn)->vfs.handles.chmod_acl, (name), (mode)))
-#define SMB_VFS_FCHMOD_ACL(fsp, mode) ((fsp)->conn->vfs.ops.fchmod_acl((fsp)->conn->vfs.handles.chmod_acl, (fsp), (mode)))
+#define SMB_VFS_FCHMOD_ACL(fsp, fd, mode) ((fsp)->conn->vfs.ops.fchmod_acl((fsp)->conn->vfs.handles.chmod_acl, (fsp), (fd), (mode)))
 
 #define SMB_VFS_SYS_ACL_GET_ENTRY(conn, theacl, entry_id, entry_p) ((conn)->vfs.ops.sys_acl_get_entry((conn)->vfs.handles.sys_acl_get_entry, (theacl), (entry_id), (entry_p)))
 #define SMB_VFS_SYS_ACL_GET_TAG_TYPE(conn, entry_d, tag_type_p) ((conn)->vfs.ops.sys_acl_get_tag_type((conn)->vfs.handles.sys_acl_get_tag_type, (entry_d), (tag_type_p)))
 #define SMB_VFS_SYS_ACL_GET_PERMSET(conn, entry_d, permset_p) ((conn)->vfs.ops.sys_acl_get_permset((conn)->vfs.handles.sys_acl_get_permset, (entry_d), (permset_p)))
 #define SMB_VFS_SYS_ACL_GET_QUALIFIER(conn, entry_d) ((conn)->vfs.ops.sys_acl_get_qualifier((conn)->vfs.handles.sys_acl_get_qualifier, (entry_d)))
 #define SMB_VFS_SYS_ACL_GET_FILE(conn, path_p, type) ((conn)->vfs.ops.sys_acl_get_file((conn)->vfs.handles.sys_acl_get_file, (path_p), (type)))
-#define SMB_VFS_SYS_ACL_GET_FD(fsp) ((fsp)->conn->vfs.ops.sys_acl_get_fd((fsp)->conn->vfs.handles.sys_acl_get_fd, (fsp)))
+#define SMB_VFS_SYS_ACL_GET_FD(fsp, fd) ((fsp)->conn->vfs.ops.sys_acl_get_fd((fsp)->conn->vfs.handles.sys_acl_get_fd, (fsp), (fd)))
 #define SMB_VFS_SYS_ACL_CLEAR_PERMS(conn, permset) ((conn)->vfs.ops.sys_acl_clear_perms((conn)->vfs.handles.sys_acl_clear_perms, (permset)))
 #define SMB_VFS_SYS_ACL_ADD_PERM(conn, permset, perm) ((conn)->vfs.ops.sys_acl_add_perm((conn)->vfs.handles.sys_acl_add_perm, (permset), (perm)))
 #define SMB_VFS_SYS_ACL_TO_TEXT(conn, theacl, plen) ((conn)->vfs.ops.sys_acl_to_text((conn)->vfs.handles.sys_acl_to_text, (theacl), (plen)))
@@ -111,7 +107,7 @@
 #define SMB_VFS_SYS_ACL_SET_PERMSET(conn, entry, permset) ((conn)->vfs.ops.sys_acl_set_permset((conn)->vfs.handles.sys_acl_set_permset, (entry), (permset)))
 #define SMB_VFS_SYS_ACL_VALID(conn, theacl) ((conn)->vfs.ops.sys_acl_valid((conn)->vfs.handles.sys_acl_valid, (theacl)))
 #define SMB_VFS_SYS_ACL_SET_FILE(conn, name, acltype, theacl) ((conn)->vfs.ops.sys_acl_set_file((conn)->vfs.handles.sys_acl_set_file, (name), (acltype), (theacl)))
-#define SMB_VFS_SYS_ACL_SET_FD(fsp, theacl) ((fsp)->conn->vfs.ops.sys_acl_set_fd((fsp)->conn->vfs.handles.sys_acl_set_fd, (fsp), (theacl)))
+#define SMB_VFS_SYS_ACL_SET_FD(fsp, fd, theacl) ((fsp)->conn->vfs.ops.sys_acl_set_fd((fsp)->conn->vfs.handles.sys_acl_set_fd, (fsp), (fd), (theacl)))
 #define SMB_VFS_SYS_ACL_DELETE_DEF_FILE(conn, path) ((conn)->vfs.ops.sys_acl_delete_def_file((conn)->vfs.handles.sys_acl_delete_def_file, (path)))
 #define SMB_VFS_SYS_ACL_GET_PERM(conn, permset, perm) ((conn)->vfs.ops.sys_acl_get_perm((conn)->vfs.handles.sys_acl_get_perm, (permset), (perm)))
 #define SMB_VFS_SYS_ACL_FREE_TEXT(conn, text) ((conn)->vfs.ops.sys_acl_free_text((conn)->vfs.handles.sys_acl_free_text, (text)))
@@ -121,38 +117,33 @@
 /* EA operations. */
 #define SMB_VFS_GETXATTR(conn,path,name,value,size) ((conn)->vfs.ops.getxattr((conn)->vfs.handles.getxattr,(path),(name),(value),(size)))
 #define SMB_VFS_LGETXATTR(conn,path,name,value,size) ((conn)->vfs.ops.lgetxattr((conn)->vfs.handles.lgetxattr,(path),(name),(value),(size)))
-#define SMB_VFS_FGETXATTR(fsp,name,value,size) ((fsp)->conn->vfs.ops.fgetxattr((fsp)->conn->vfs.handles.fgetxattr,(fsp),(name),(value),(size)))
+#define SMB_VFS_FGETXATTR(fsp,fd,name,value,size) ((fsp)->conn->vfs.ops.fgetxattr((fsp)->conn->vfs.handles.fgetxattr,(fsp),(fd),(name),(value),(size)))
 #define SMB_VFS_LISTXATTR(conn,path,list,size) ((conn)->vfs.ops.listxattr((conn)->vfs.handles.listxattr,(path),(list),(size)))
 #define SMB_VFS_LLISTXATTR(conn,path,list,size) ((conn)->vfs.ops.llistxattr((conn)->vfs.handles.llistxattr,(path),(list),(size)))
-#define SMB_VFS_FLISTXATTR(fsp,list,size) ((fsp)->conn->vfs.ops.flistxattr((fsp)->conn->vfs.handles.flistxattr,(fsp),(list),(size)))
+#define SMB_VFS_FLISTXATTR(fsp,fd,list,size) ((fsp)->conn->vfs.ops.flistxattr((fsp)->conn->vfs.handles.flistxattr,(fsp),(fd),(list),(size)))
 #define SMB_VFS_REMOVEXATTR(conn,path,name) ((conn)->vfs.ops.removexattr((conn)->vfs.handles.removexattr,(path),(name)))
 #define SMB_VFS_LREMOVEXATTR(conn,path,name) ((conn)->vfs.ops.lremovexattr((conn)->vfs.handles.lremovexattr,(path),(name)))
-#define SMB_VFS_FREMOVEXATTR(fsp,name) ((fsp)->conn->vfs.ops.fremovexattr((fsp)->conn->vfs.handles.fremovexattr,(fsp),(name)))
+#define SMB_VFS_FREMOVEXATTR(fsp,fd,name) ((fsp)->conn->vfs.ops.fremovexattr((fsp)->conn->vfs.handles.fremovexattr,(fsp),(fd),(name)))
 #define SMB_VFS_SETXATTR(conn,path,name,value,size,flags) ((conn)->vfs.ops.setxattr((conn)->vfs.handles.setxattr,(path),(name),(value),(size),(flags)))
 #define SMB_VFS_LSETXATTR(conn,path,name,value,size,flags) ((conn)->vfs.ops.lsetxattr((conn)->vfs.handles.lsetxattr,(path),(name),(value),(size),(flags)))
-#define SMB_VFS_FSETXATTR(fsp,name,value,size,flags) ((fsp)->conn->vfs.ops.fsetxattr((fsp)->conn->vfs.handles.fsetxattr,(fsp),(name),(value),(size),(flags)))
+#define SMB_VFS_FSETXATTR(fsp,fd,name,value,size,flags) ((fsp)->conn->vfs.ops.fsetxattr((fsp)->conn->vfs.handles.fsetxattr,(fsp),(fd),(name),(value),(size),(flags)))
 
 /* AIO operations. */
 #define SMB_VFS_AIO_READ(fsp,aiocb) ((fsp)->conn->vfs.ops.aio_read((fsp)->conn->vfs.handles.aio_read,(fsp),(aiocb)))
 #define SMB_VFS_AIO_WRITE(fsp,aiocb) ((fsp)->conn->vfs.ops.aio_write((fsp)->conn->vfs.handles.aio_write,(fsp),(aiocb)))
 #define SMB_VFS_AIO_RETURN(fsp,aiocb) ((fsp)->conn->vfs.ops.aio_return_fn((fsp)->conn->vfs.handles.aio_return,(fsp),(aiocb)))
-#define SMB_VFS_AIO_CANCEL(fsp,aiocb) ((fsp)->conn->vfs.ops.aio_cancel((fsp)->conn->vfs.handles.aio_cancel,(fsp),(aiocb)))
+#define SMB_VFS_AIO_CANCEL(fsp,fd,aiocb) ((fsp)->conn->vfs.ops.aio_cancel((fsp)->conn->vfs.handles.aio_cancel,(fsp),(fd),(aiocb)))
 #define SMB_VFS_AIO_ERROR(fsp,aiocb) ((fsp)->conn->vfs.ops.aio_error_fn((fsp)->conn->vfs.handles.aio_error,(fsp),(aiocb)))
 #define SMB_VFS_AIO_FSYNC(fsp,op,aiocb) ((fsp)->conn->vfs.ops.aio_fsync((fsp)->conn->vfs.handles.aio_fsync,(fsp),(op),(aiocb)))
 #define SMB_VFS_AIO_SUSPEND(fsp,aiocb,n,ts) ((fsp)->conn->vfs.ops.aio_suspend((fsp)->conn->vfs.handles.aio_suspend,(fsp),(aiocb),(n),(ts)))
-#define SMB_VFS_AIO_FORCE(fsp) ((fsp)->conn->vfs.ops.aio_force((fsp)->conn->vfs.handles.aio_force,(fsp)))
 
-/* Offline operations */
-#define SMB_VFS_IS_OFFLINE(conn,path,sbuf) ((conn)->vfs.ops.is_offline((conn)->vfs.handles.is_offline,(path),(sbuf)))
-#define SMB_VFS_SET_OFFLINE(conn,path) ((conn)->vfs.ops.set_offline((conn)->vfs.handles.set_offline,(path)))
-
 /*******************************************************************
  Don't access conn->vfs_opaque.ops directly!!!
  Use this macros!
  (Fixes should also go into the vfs_* and vfs_next_* macros!)
 ********************************************************************/
 
-/* Disk operations */
+/* Disk operations */    
 #define SMB_VFS_OPAQUE_CONNECT(conn, service, user) ((conn)->vfs_opaque.ops.connect_fn((conn)->vfs_opaque.handles.connect_hnd, (service), (user)))
 #define SMB_VFS_OPAQUE_DISCONNECT(conn) ((conn)->vfs_opaque.ops.disconnect((conn)->vfs_opaque.handles.disconnect))
 #define SMB_VFS_OPAQUE_DISK_FREE(conn, path, small_query, bsize, dfree ,dsize) ((conn)->vfs_opaque.ops.disk_free((conn)->vfs_opaque.handles.disk_free, (path), (small_query), (bsize), (dfree), (dsize)))
@@ -160,7 +151,6 @@
 #define SMB_VFS_OPAQUE_SET_QUOTA(conn, qtype, id, qt) ((conn)->vfs_opaque.ops.set_quota((conn)->vfs_opaque.handles.set_quota, (qtype), (id), (qt)))
 #define SMB_VFS_OPAQUE_GET_SHADOW_COPY_DATA(fsp,shadow_copy_data,labels) ((fsp)->conn->vfs_opaque.ops.get_shadow_copy_data((fsp)->conn->vfs_opaque.handles.get_shadow_copy_data,(fsp),(shadow_copy_data),(labels)))
 #define SMB_VFS_OPAQUE_STATVFS(conn, path, statbuf) ((conn)->vfs_opaque.ops.statvfs((conn)->vfs_opaque.handles.statvfs, (path), (statbuf)))
-#define SMB_VFS_OPAQUE_FS_CAPABILITIES(conn) ((conn)->vfs_opaque.ops.fs_capabilities((conn)->vfs_opaque.handles.fs_capabilities))
 
 /* Directory operations */
 #define SMB_VFS_OPAQUE_OPENDIR(conn, fname, mask, attr) ((conn)->vfs_opaque.ops.opendir((conn)->vfs_opaque.handles.opendir, (fname), (mask), (attr)))
@@ -171,62 +161,58 @@
 #define SMB_VFS_OPAQUE_MKDIR(conn, path, mode) ((conn)->vfs_opaque.ops.mkdir((conn)->vfs_opaque.handles.mkdir,(path), (mode)))
 #define SMB_VFS_OPAQUE_RMDIR(conn, path) ((conn)->vfs_opaque.ops.rmdir((conn)->vfs_opaque.handles.rmdir, (path)))
 #define SMB_VFS_OPAQUE_CLOSEDIR(conn, dir) ((conn)->vfs_opaque.ops.closedir((conn)->vfs_opaque.handles.closedir, dir))
-
+    
 /* File operations */
 #define SMB_VFS_OPAQUE_OPEN(conn, fname, fsp, flags, mode) (((conn)->vfs_opaque.ops.open)((conn)->vfs_opaque.handles.open, (fname), (fsp), (flags), (mode)))
-#define SMB_VFS_OPAQUE_CLOSE(fsp) ((fsp)->conn->vfs_opaque.ops.close_fn((fsp)->conn->vfs_opaque.handles.close_hnd, (fsp)))
-#define SMB_VFS_OPAQUE_READ(fsp, data, n) ((fsp)->conn->vfs_opaque.ops.vfs_read((fsp)->conn->vfs_opaque.handles.vfs_read, (fsp), (data), (n)))
-#define SMB_VFS_OPAQUE_PREAD(fsp, data, n, off) ((fsp)->conn->vfs_opaque.ops.pread((fsp)->conn->vfs_opaque.handles.pread, (fsp), (data), (n), (off)))
-#define SMB_VFS_OPAQUE_WRITE(fsp, data, n) ((fsp)->conn->vfs_opaque.ops.write((fsp)->conn->vfs_opaque.handles.write, (fsp), (data), (n)))
-#define SMB_VFS_OPAQUE_PWRITE(fsp, data, n, off) ((fsp)->conn->vfs_opaque.ops.pwrite((fsp)->conn->vfs_opaque.handles.pwrite, (fsp), (data), (n), (off)))
-#define SMB_VFS_OPAQUE_LSEEK(fsp, offset, whence) ((fsp)->conn->vfs_opaque.ops.lseek((fsp)->conn->vfs_opaque.handles.lseek, (fsp), (offset), (whence)))
-#define SMB_VFS_OPAQUE_SENDFILE(tofd, fromfsp, header, offset, count) ((fsp)->conn->vfs_opaque.ops.sendfile((fsp)->conn->vfs_opaque.handles.sendfile, (tofd), (fromfsp), (header), (offset), (count)))
-#define SMB_VFS_OPAQUE_RECVFILE(fromfd, tofsp, offset, count) ((fsp)->conn->vfs_opaque.ops.recvfile((fsp)->conn->vfs_opaque.handles.recvfile, (fromfd), (tofsp), (offset), (count)))
+#define SMB_VFS_OPAQUE_CLOSE(fsp, fd) ((fsp)->conn->vfs_opaque.ops.close_fn((fsp)->conn->vfs_opaque.handles.close_hnd, (fsp), (fd)))
+#define SMB_VFS_OPAQUE_READ(fsp, fd, data, n) ((fsp)->conn->vfs_opaque.ops.read((fsp)->conn->vfs_opaque.handles.read, (fsp), (fd), (data), (n)))
+#define SMB_VFS_OPAQUE_PREAD(fsp, fd, data, n, off) ((fsp)->conn->vfs_opaque.ops.pread((fsp)->conn->vfs_opaque.handles.pread, (fsp), (fd), (data), (n), (off)))
+#define SMB_VFS_OPAQUE_WRITE(fsp, fd, data, n) ((fsp)->conn->vfs_opaque.ops.write((fsp)->conn->vfs_opaque.handles.write, (fsp), (fd), (data), (n)))
+#define SMB_VFS_OPAQUE_PWRITE(fsp, fd, data, n, off) ((fsp)->conn->vfs_opaque.ops.pwrite((fsp)->conn->vfs_opaque.handles.pwrite, (fsp), (fd), (data), (n), (off)))
+#define SMB_VFS_OPAQUE_LSEEK(fsp, fd, offset, whence) ((fsp)->conn->vfs_opaque.ops.lseek((fsp)->conn->vfs_opaque.handles.lseek, (fsp), (fd), (offset), (whence)))
+#define SMB_VFS_OPAQUE_SENDFILE(tofd, fsp, fromfd, header, offset, count) ((fsp)->conn->vfs_opaque.ops.sendfile((fsp)->conn->vfs_opaque.handles.sendfile, (tofd), (fsp), (fromfd), (header), (offset), (count)))
 #define SMB_VFS_OPAQUE_RENAME(conn, old, new) ((conn)->vfs_opaque.ops.rename((conn)->vfs_opaque.handles.rename, (old), (new)))
-#define SMB_VFS_OPAQUE_FSYNC(fsp) ((fsp)->conn->vfs_opaque.ops.fsync((fsp)->conn->vfs_opaque.handles.fsync, (fsp)))
+#define SMB_VFS_OPAQUE_FSYNC(fsp, fd) ((fsp)->conn->vfs_opaque.ops.fsync((fsp)->conn->vfs_opaque.handles.fsync, (fsp), (fd)))
 #define SMB_VFS_OPAQUE_STAT(conn, fname, sbuf) ((conn)->vfs_opaque.ops.stat((conn)->vfs_opaque.handles.stat, (fname), (sbuf)))
-#define SMB_VFS_OPAQUE_FSTAT(fsp, sbuf) ((fsp)->conn->vfs_opaque.ops.fstat((fsp)->conn->vfs_opaque.handles.fstat, (fsp), (sbuf)))
+#define SMB_VFS_OPAQUE_FSTAT(fsp, fd, sbuf) ((fsp)->conn->vfs_opaque.ops.fstat((fsp)->conn->vfs_opaque.handles.fstat, (fsp) ,(fd) ,(sbuf)))
 #define SMB_VFS_OPAQUE_LSTAT(conn, path, sbuf) ((conn)->vfs_opaque.ops.lstat((conn)->vfs_opaque.handles.lstat, (path), (sbuf)))
 #define SMB_VFS_OPAQUE_UNLINK(conn, path) ((conn)->vfs_opaque.ops.unlink((conn)->vfs_opaque.handles.unlink, (path)))
 #define SMB_VFS_OPAQUE_CHMOD(conn, path, mode) ((conn)->vfs_opaque.ops.chmod((conn)->vfs_opaque.handles.chmod, (path), (mode)))
-#define SMB_VFS_OPAQUE_FCHMOD(fsp, mode) ((fsp)->conn->vfs_opaque.ops.fchmod((fsp)->conn->vfs_opaque.handles.fchmod, (fsp), (mode)))
+#define SMB_VFS_OPAQUE_FCHMOD(fsp, fd, mode) ((fsp)->conn->vfs_opaque.ops.fchmod((fsp)->conn->vfs_opaque.handles.fchmod, (fsp), (fd), (mode)))
 #define SMB_VFS_OPAQUE_CHOWN(conn, path, uid, gid) ((conn)->vfs_opaque.ops.chown((conn)->vfs_opaque.handles.chown, (path), (uid), (gid)))
-#define SMB_VFS_OPAQUE_FCHOWN(fsp, uid, gid) ((fsp)->conn->vfs_opaque.ops.fchown((fsp)->conn->vfs_opaque.handles.fchown, (fsp), (uid), (gid)))
-#define SMB_VFS_OPAQUE_LCHOWN(conn, path, uid, gid) ((conn)->vfs_opaque.ops.lchown((conn)->vfs_opaque.handles.lchown, (path), (uid), (gid)))
+#define SMB_VFS_OPAQUE_FCHOWN(fsp, fd, uid, gid) ((fsp)->conn->vfs_opaque.ops.fchown((fsp)->conn->vfs_opaque.handles.fchown, (fsp), (fd), (uid), (gid)))
 #define SMB_VFS_OPAQUE_CHDIR(conn, path) ((conn)->vfs_opaque.ops.chdir((conn)->vfs_opaque.handles.chdir, (path)))
 #define SMB_VFS_OPAQUE_GETWD(conn, buf) ((conn)->vfs_opaque.ops.getwd((conn)->vfs_opaque.handles.getwd, (buf)))
 #define SMB_VFS_OPAQUE_NTIMES(conn, path, ts) ((conn)->vfs_opaque.ops.ntimes((conn)->vfs_opaque.handles.ntimes, (path), (ts)))
-#define SMB_VFS_OPAQUE_FTRUNCATE(fsp, offset) ((fsp)->conn->vfs_opaque.ops.ftruncate((fsp)->conn->vfs_opaque.handles.ftruncate, (fsp), (offset)))
-#define SMB_VFS_OPAQUE_LOCK(fsp, op, offset, count, type) ((fsp)->conn->vfs_opaque.ops.lock((fsp)->conn->vfs_opaque.handles.lock, (fsp), (op), (offset), (count), (type)))
-#define SMB_VFS_OPAQUE_KERNEL_FLOCK(fsp, share_mode) ((fsp)->conn->vfs_opaque.ops.kernel_flock((fsp)->conn->vfs_opaque.handles.kernel_flock, (fsp), (share_mode)))
-#define SMB_VFS_OPAQUE_LINUX_SETLEASE(fsp, leasetype) ((fsp)->conn->vfs_opaque.ops.linux_setlease((fsp)->conn->vfs_opaque.handles.linux_setlease, (fsp), (leasetype)))
-#define SMB_VFS_OPAQUE_GETLOCK(fsp, poffset, pcount, ptype, ppid) ((fsp)->conn->vfs_opaque.ops.getlock((fsp)->conn->vfs_opaque.handles.getlock, (fsp), (poffset), (pcount), (ptype), (ppid)))
+#define SMB_VFS_OPAQUE_FTRUNCATE(fsp, fd, offset) ((fsp)->conn->vfs_opaque.ops.ftruncate((fsp)->conn->vfs_opaque.handles.ftruncate, (fsp), (fd), (offset)))
+#define SMB_VFS_OPAQUE_LOCK(fsp, fd, op, offset, count, type) ((fsp)->conn->vfs_opaque.ops.lock((fsp)->conn->vfs_opaque.handles.lock, (fsp), (fd) ,(op), (offset), (count), (type)))
+#define SMB_VFS_OPAQUE_FLOCK(fsp, fd, share_mode) ((fsp)->conn->vfs_opaque.ops.lock((fsp)->conn->vfs_opaque.handles.kernel_flock, (fsp), (fd), (share_mode)))
+#define SMB_VFS_OPAQUE_LINUX_SETLEASE(fsp, fd, leasetype) ((fsp)->conn->vfs_opaque.ops.linux_setlease((fsp)->conn->vfs_opaque.handles.linux_setlease, (fsp), (fd), (leasetype)))
+#define SMB_VFS_OPAQUE_GETLOCK(fsp, fd, poffset, pcount, ptype, ppid) ((fsp)->conn->vfs_opaque.ops.getlock((fsp)->conn->vfs_opaque.handles.getlock, (fsp), (fd), (poffset), (pcount), (ptype), (ppid)))
 #define SMB_VFS_OPAQUE_SYMLINK(conn, oldpath, newpath) ((conn)->vfs_opaque.ops.symlink((conn)->vfs_opaque.handles.symlink, (oldpath), (newpath)))
-#define SMB_VFS_OPAQUE_READLINK(conn, path, buf, bufsiz) ((conn)->vfs_opaque.ops.vfs_readlink((conn)->vfs_opaque.handles.vfs_readlink, (path), (buf), (bufsiz)))
+#define SMB_VFS_OPAQUE_READLINK(conn, path, buf, bufsiz) ((conn)->vfs_opaque.ops.readlink((conn)->vfs_opaque.handles.readlink, (path), (buf), (bufsiz)))
 #define SMB_VFS_OPAQUE_LINK(conn, oldpath, newpath) ((conn)->vfs_opaque.ops.link((conn)->vfs_opaque.handles.link, (oldpath), (newpath)))
 #define SMB_VFS_OPAQUE_MKNOD(conn, path, mode, dev) ((conn)->vfs_opaque.ops.mknod((conn)->vfs_opaque.handles.mknod, (path), (mode), (dev)))
 #define SMB_VFS_OPAQUE_REALPATH(conn, path, resolved_path) ((conn)->vfs_opaque.ops.realpath((conn)->vfs_opaque.handles.realpath, (path), (resolved_path)))
 #define SMB_VFS_OPAQUE_NOTIFY_WATCH(conn, ctx, e, callback, private_data, handle_p) ((conn)->vfs_opaque.ops.notify_watch((conn)->vfs_opaque.handles.notify_watch, (ctx), (e), (callback), (private_data), (handle_p)))
 #define SMB_VFS_OPAQUE_CHFLAGS(conn, path, flags) ((conn)->vfs_opaque.ops.chflags((conn)->vfs_opaque.handles.chflags, (path), (flags)))
-#define SMB_VFS_OPAQUE_FILE_ID_CREATE(conn, dev, inode) ((conn)->vfs.ops_opaque.file_id_create((conn)->vfs_opaque.handles.file_id_create, (dev), (inode)))
-#define SMB_VFS_OPAQUE_STREAMINFO(conn, fsp, fname, mem_ctx, num_streams, streams) ((conn)->vfs_opaque.ops.streaminfo((conn)->vfs_opaque.handles.streaminfo, (fsp), (fname), (mem_ctx), (num_streams), (streams)))
 
 /* NT ACL operations. */
-#define SMB_VFS_OPAQUE_FGET_NT_ACL(fsp, security_info, ppdesc) ((fsp)->conn->vfs_opaque.ops.fget_nt_acl((fsp)->conn->vfs_opaque.handles.fget_nt_acl, (fsp), (security_info), (ppdesc)))
-#define SMB_VFS_OPAQUE_GET_NT_ACL(conn, name, security_info, ppdesc) ((conn)->vfs_opaque.ops.get_nt_acl((conn)->vfs_opaque.handles.get_nt_acl, (name), (security_info), (ppdesc)))
-#define SMB_VFS_OPAQUE_FSET_NT_ACL(fsp, security_info_sent, psd) ((fsp)->conn->vfs_opaque.ops.fset_nt_acl((fsp)->conn->vfs_opaque.handles.fset_nt_acl, (fsp), (security_info_sent), (psd)))
+#define SMB_VFS_OPAQUE_FGET_NT_ACL(fsp, fd, security_info, ppdesc) ((fsp)->conn->vfs_opaque.ops.fget_nt_acl((fsp)->conn->vfs_opaque.handles.fget_nt_acl, (fsp), (fd), (security_info), (ppdesc)))
+#define SMB_VFS_OPAQUE_GET_NT_ACL(fsp, name, security_info, ppdesc) ((fsp)->conn->vfs_opaque.ops.get_nt_acl((fsp)->conn->vfs_opaque.handles.get_nt_acl, (fsp), (name), (security_info), (ppdesc)))
+#define SMB_VFS_OPAQUE_FSET_NT_ACL(fsp, fd, security_info_sent, psd) ((fsp)->conn->vfs_opaque.ops.fset_nt_acl((fsp)->conn->vfs_opaque.handles.fset_nt_acl, (fsp), (fd), (security_info_sent), (psd)))
 #define SMB_VFS_OPAQUE_SET_NT_ACL(fsp, name, security_info_sent, psd) ((fsp)->conn->vfs_opaque.ops.set_nt_acl((fsp)->conn->vfs_opaque.handles.set_nt_acl, (fsp), (name), (security_info_sent), (psd)))
 
 /* POSIX ACL operations. */
 #define SMB_VFS_OPAQUE_CHMOD_ACL(conn, name, mode) ((conn)->vfs_opaque.ops.chmod_acl((conn)->vfs_opaque.handles.chmod_acl, (name), (mode)))
-#define SMB_VFS_OPAQUE_FCHMOD_ACL(fsp, mode) ((fsp)->conn->vfs_opaque.ops.fchmod_acl((fsp)->conn->vfs_opaque.handles.chmod_acl, (fsp), (mode)))
+#define SMB_VFS_OPAQUE_FCHMOD_ACL(fsp, fd, mode) ((fsp)->conn->vfs_opaque.ops.fchmod_acl((fsp)->conn->vfs_opaque.handles.chmod_acl, (fsp), (fd), (mode)))
 
 #define SMB_VFS_OPAQUE_SYS_ACL_GET_ENTRY(conn, theacl, entry_id, entry_p) ((conn)->vfs_opaque.ops.sys_acl_get_entry((conn)->vfs_opaque.handles.sys_acl_get_entry, (theacl), (entry_id), (entry_p)))
 #define SMB_VFS_OPAQUE_SYS_ACL_GET_TAG_TYPE(conn, entry_d, tag_type_p) ((conn)->vfs_opaque.ops.sys_acl_get_tag_type((conn)->vfs_opaque.handles.sys_acl_get_tag_type, (entry_d), (tag_type_p)))
 #define SMB_VFS_OPAQUE_SYS_ACL_GET_PERMSET(conn, entry_d, permset_p) ((conn)->vfs_opaque.ops.sys_acl_get_permset((conn)->vfs_opaque.handles.sys_acl_get_permset, (entry_d), (permset_p)))
 #define SMB_VFS_OPAQUE_SYS_ACL_GET_QUALIFIER(conn, entry_d) ((conn)->vfs_opaque.ops.sys_acl_get_qualifier((conn)->vfs_opaque.handles.sys_acl_get_qualifier, (entry_d)))
 #define SMB_VFS_OPAQUE_SYS_ACL_GET_FILE(conn, path_p, type) ((conn)->vfs_opaque.ops.sys_acl_get_file((conn)->vfs_opaque.handles.sys_acl_get_file, (path_p), (type)))
-#define SMB_VFS_OPAQUE_SYS_ACL_GET_FD(fsp) ((fsp)->conn->vfs_opaque.ops.sys_acl_get_fd((fsp)->conn->vfs_opaque.handles.sys_acl_get_fd, (fsp)))
+#define SMB_VFS_OPAQUE_SYS_ACL_GET_FD(fsp, fd) ((fsp)->conn->vfs_opaque.ops.sys_acl_get_fd((fsp)->conn->vfs_opaque.handles.sys_acl_get_fd, (fsp), (fd)))
 #define SMB_VFS_OPAQUE_SYS_ACL_CLEAR_PERMS(conn, permset) ((conn)->vfs_opaque.ops.sys_acl_clear_perms((conn)->vfs_opaque.handles.sys_acl_clear_perms, (permset)))
 #define SMB_VFS_OPAQUE_SYS_ACL_ADD_PERM(conn, permset, perm) ((conn)->vfs_opaque.ops.sys_acl_add_perm((conn)->vfs_opaque.handles.sys_acl_add_perm, (permset), (perm)))
 #define SMB_VFS_OPAQUE_SYS_ACL_TO_TEXT(conn, theacl, plen) ((conn)->vfs_opaque.ops.sys_acl_to_text((conn)->vfs_opaque.handles.sys_acl_to_text, (theacl), (plen)))
@@ -237,7 +223,7 @@
 #define SMB_VFS_OPAQUE_SYS_ACL_SET_PERMSET(conn, entry, permset) ((conn)->vfs_opaque.ops.sys_acl_set_permset((conn)->vfs_opaque.handles.sys_acl_set_permset, (entry), (permset)))
 #define SMB_VFS_OPAQUE_SYS_ACL_VALID(conn, theacl) ((conn)->vfs_opaque.ops.sys_acl_valid((conn)->vfs_opaque.handles.sys_acl_valid, (theacl)))
 #define SMB_VFS_OPAQUE_SYS_ACL_SET_FILE(conn, name, acltype, theacl) ((conn)->vfs_opaque.ops.sys_acl_set_file((conn)->vfs_opaque.handles.sys_acl_set_file, (name), (acltype), (theacl)))
-#define SMB_VFS_OPAQUE_SYS_ACL_SET_FD(fsp, theacl) ((fsp)->conn->vfs_opaque.ops.sys_acl_set_fd((fsp)->conn->vfs_opaque.handles.sys_acl_set_fd, (fsp), (theacl)))
+#define SMB_VFS_OPAQUE_SYS_ACL_SET_FD(fsp, fd, theacl) ((fsp)->conn->vfs_opaque.ops.sys_acl_set_fd((fsp)->conn->vfs_opaque.handles.sys_acl_set_fd, (fsp), (fd), (theacl)))
 #define SMB_VFS_OPAQUE_SYS_ACL_DELETE_DEF_FILE(conn, path) ((conn)->vfs_opaque.ops.sys_acl_delete_def_file((conn)->vfs_opaque.handles.sys_acl_delete_def_file, (path)))
 #define SMB_VFS_OPAQUE_SYS_ACL_GET_PERM(conn, permset, perm) ((conn)->vfs_opaque.ops.sys_acl_get_perm((conn)->vfs_opaque.handles.sys_acl_get_perm, (permset), (perm)))
 #define SMB_VFS_OPAQUE_SYS_ACL_FREE_TEXT(conn, text) ((conn)->vfs_opaque.ops.sys_acl_free_text((conn)->vfs_opaque.handles.sys_acl_free_text, (text)))
@@ -247,38 +233,33 @@
 /* EA operations. */
 #define SMB_VFS_OPAQUE_GETXATTR(conn,path,name,value,size) ((conn)->vfs_opaque.ops.getxattr((conn)->vfs_opaque.handles.getxattr,(path),(name),(value),(size)))
 #define SMB_VFS_OPAQUE_LGETXATTR(conn,path,name,value,size) ((conn)->vfs_opaque.ops.lgetxattr((conn)->vfs_opaque.handles.lgetxattr,(path),(name),(value),(size)))
-#define SMB_VFS_OPAQUE_FGETXATTR(fsp,name,value,size) ((fsp)->conn->vfs_opaque.ops.fgetxattr((fsp)->conn->vfs_opaque.handles.fgetxattr,(fsp),(name),(value),(size)))
+#define SMB_VFS_OPAQUE_FGETXATTR(fsp,fd,name,value,size) ((fsp)->conn->vfs_opaque.ops.fgetxattr((fsp)->conn->vfs_opaque.handles.fgetxattr,(fsp),(fd),(name),(value),(size)))
 #define SMB_VFS_OPAQUE_LISTXATTR(conn,path,list,size) ((conn)->vfs_opaque.ops.listxattr((conn)->vfs_opaque.handles.listxattr,(path),(list),(size)))
 #define SMB_VFS_OPAQUE_LLISTXATTR(conn,path,list,size) ((conn)->vfs_opaque.ops.llistxattr((conn)->vfs_opaque.handles.llistxattr,(path),(list),(size)))
-#define SMB_VFS_OPAQUE_FLISTXATTR(fsp,list,size) ((fsp)->conn->vfs_opaque.ops.flistxattr((fsp)->conn->vfs_opaque.handles.flistxattr,(fsp),(list),(size)))
+#define SMB_VFS_OPAQUE_FLISTXATTR(fsp,fd,list,size) ((fsp)->conn->vfs_opaque.ops.flistxattr((fsp)->conn->vfs_opaque.handles.flistxattr,(fsp),(fd),(list),(size)))
 #define SMB_VFS_OPAQUE_REMOVEXATTR(conn,path,name) ((conn)->vfs_opaque.ops.removexattr((conn)->vfs_opaque.handles.removexattr,(path),(name)))
 #define SMB_VFS_OPAQUE_LREMOVEXATTR(conn,path,name) ((conn)->vfs_opaque.ops.lremovexattr((conn)->vfs_opaque.handles.lremovexattr,(path),(name)))
-#define SMB_VFS_OPAQUE_FREMOVEXATTR(fsp,name) ((fsp)->conn->vfs_opaque.ops.fremovexattr((fsp)->conn->vfs_opaque.handles.fremovexattr,(fsp),(name)))
+#define SMB_VFS_OPAQUE_FREMOVEXATTR(fsp,fd,name) ((fsp)->conn->vfs_opaque.ops.fremovexattr((fsp)->conn->vfs_opaque.handles.fremovexattr,(fsp),(fd),(name)))
 #define SMB_VFS_OPAQUE_SETXATTR(conn,path,name,value,size,flags) ((conn)->vfs_opaque.ops.setxattr((conn)->vfs_opaque.handles.setxattr,(path),(name),(value),(size),(flags)))
 #define SMB_VFS_OPAQUE_LSETXATTR(conn,path,name,value,size,flags) ((conn)->vfs_opaque.ops.lsetxattr((conn)->vfs_opaque.handles.lsetxattr,(path),(name),(value),(size),(flags)))
-#define SMB_VFS_OPAQUE_FSETXATTR(fsp,name,value,size,flags) ((fsp)->conn->vfs_opaque.ops.fsetxattr((fsp)->conn->vfs_opaque.handles.fsetxattr,(fsp),(name),(value),(size),(flags)))
+#define SMB_VFS_OPAQUE_FSETXATTR(fsp,fd,name,value,size,flags) ((fsp)->conn->vfs_opaque.ops.fsetxattr((fsp)->conn->vfs_opaque.handles.fsetxattr,(fsp),(fd),(name),(value),(size),(flags)))
 
 /* AIO operations. */
 #define SMB_VFS_OPAQUE_AIO_READ(fsp,aiocb) ((fsp)->conn->vfs_opaque.ops.aio_read((fsp)->conn->vfs_opaque.handles.aio_read,(fsp),(aiocb)))
 #define SMB_VFS_OPAQUE_AIO_WRITE(fsp,aiocb) ((fsp)->conn->vfs_opaque.ops.aio_write((fsp)->conn->vfs_opaque.handles.aio_write,(fsp),(aiocb)))
 #define SMB_VFS_OPAQUE_AIO_RETURN(fsp,aiocb) ((fsp)->conn->vfs_opaque.ops.aio_return_fn((fsp)->conn->vfs_opaque.handles.aio_return,(fsp),(aiocb)))
-#define SMB_VFS_OPAQUE_AIO_CANCEL(fsp,aiocb) ((fsp)->conn->vfs_opaque.ops.aio_cancel((fsp)->conn->vfs_opaque.handles.cancel,(fsp),(aiocb)))
+#define SMB_VFS_OPAQUE_AIO_CANCEL(fsp,fd,aiocb) ((fsp)->conn->vfs_opaque.ops.aio_cancel((fsp)->conn->vfs_opaque.handles.cancel,(fsp),(fd),(aiocb)))
 #define SMB_VFS_OPAQUE_AIO_ERROR(fsp,aiocb) ((fsp)->conn->vfs_opaque.ops.aio_error_fn((fsp)->conn->vfs_opaque.handles.aio_error,(fsp),(aiocb)))
 #define SMB_VFS_OPAQUE_AIO_FSYNC(fsp,op,aiocb) ((fsp)->conn->vfs_opaque.ops.aio_fsync((fsp)->conn->vfs_opaque.handles.aio_fsync,(fsp),(op),(aiocb)))
 #define SMB_VFS_OPAQUE_AIO_SUSPEND(fsp,aiocb,n,ts) ((fsp)->conn->vfs_opaque.ops.aio_suspend((fsp)->conn->vfs_opaque.handles.aio_suspend,(fsp),(aiocb),(n),(ts)))
-#define SMB_VFS_OPAQUE_AIO_FORCE(fsp) ((fsp)->conn->vfs_opaque.ops.aio_force((fsp)->conn->vfs_opaque.handles.aio_force,(fsp)))
 
-/* Offline operations */
-#define SMB_VFS_OPAQUE_IS_OFFLINE(conn,path,sbuf) ((conn)->vfs_opaque.ops.is_offline((conn)->vfs_opaque.handles.is_offline,(path),(sbuf)))
-#define SMB_VFS_OPAQUE_SET_OFFLINE(conn,path) ((conn)->vfs_opaque.ops.set_offline((conn)->vfs_opaque.handles.set_offline,(path)))
-
 /*******************************************************************
  Don't access handle->vfs_next.ops.* directly!!!
  Use this macros!
  (Fixes should go also into the vfs_* and vfs_opaque_* macros!)
 ********************************************************************/
 
-/* Disk operations */
+/* Disk operations */    
 #define SMB_VFS_NEXT_CONNECT(handle, service, user) ((handle)->vfs_next.ops.connect_fn((handle)->vfs_next.handles.connect_hnd, (service), (user)))
 #define SMB_VFS_NEXT_DISCONNECT(handle) ((handle)->vfs_next.ops.disconnect((handle)->vfs_next.handles.disconnect))
 #define SMB_VFS_NEXT_DISK_FREE(handle, path, small_query, bsize, dfree ,dsize) ((handle)->vfs_next.ops.disk_free((handle)->vfs_next.handles.disk_free, (path), (small_query), (bsize), (dfree), (dsize)))
@@ -286,7 +267,6 @@
 #define SMB_VFS_NEXT_SET_QUOTA(handle, qtype, id, qt) ((handle)->vfs_next.ops.set_quota((handle)->vfs_next.handles.set_quota, (qtype), (id), (qt)))
 #define SMB_VFS_NEXT_GET_SHADOW_COPY_DATA(handle, fsp, shadow_copy_data ,labels) ((handle)->vfs_next.ops.get_shadow_copy_data((handle)->vfs_next.handles.get_shadow_copy_data,(fsp),(shadow_copy_data),(labels)))
 #define SMB_VFS_NEXT_STATVFS(handle, path, statbuf) ((handle)->vfs_next.ops.statvfs((handle)->vfs_next.handles.statvfs, (path), (statbuf)))
-#define SMB_VFS_NEXT_FS_CAPABILITIES(handle) ((handle)->vfs_next.ops.fs_capabilities((handle)->vfs_next.handles.fs_capabilities))
 
 /* Directory operations */
 #define SMB_VFS_NEXT_OPENDIR(handle, fname, mask, attr) ((handle)->vfs_next.ops.opendir((handle)->vfs_next.handles.opendir, (fname), (mask), (attr)))
@@ -298,62 +278,58 @@
 #define SMB_VFS_NEXT_MKDIR(handle, path, mode) ((handle)->vfs_next.ops.mkdir((handle)->vfs_next.handles.mkdir,(path), (mode)))
 #define SMB_VFS_NEXT_RMDIR(handle, path) ((handle)->vfs_next.ops.rmdir((handle)->vfs_next.handles.rmdir, (path)))
 #define SMB_VFS_NEXT_CLOSEDIR(handle, dir) ((handle)->vfs_next.ops.closedir((handle)->vfs_next.handles.closedir, dir))
-
+    
 /* File operations */
 #define SMB_VFS_NEXT_OPEN(handle, fname, fsp, flags, mode) (((handle)->vfs_next.ops.open)((handle)->vfs_next.handles.open, (fname), (fsp), (flags), (mode)))
-#define SMB_VFS_NEXT_CLOSE(handle, fsp) ((handle)->vfs_next.ops.close_fn((handle)->vfs_next.handles.close_hnd, (fsp)))
-#define SMB_VFS_NEXT_READ(handle, fsp, data, n) ((handle)->vfs_next.ops.vfs_read((handle)->vfs_next.handles.vfs_read, (fsp), (data), (n)))
-#define SMB_VFS_NEXT_PREAD(handle, fsp, data, n, off) ((handle)->vfs_next.ops.pread((handle)->vfs_next.handles.pread, (fsp), (data), (n), (off)))
-#define SMB_VFS_NEXT_WRITE(handle, fsp, data, n) ((handle)->vfs_next.ops.write((handle)->vfs_next.handles.write, (fsp), (data), (n)))
-#define SMB_VFS_NEXT_PWRITE(handle, fsp, data, n, off) ((handle)->vfs_next.ops.pwrite((handle)->vfs_next.handles.pwrite, (fsp), (data), (n), (off)))
-#define SMB_VFS_NEXT_LSEEK(handle, fsp, offset, whence) ((handle)->vfs_next.ops.lseek((handle)->vfs_next.handles.lseek, (fsp), (offset), (whence)))
-#define SMB_VFS_NEXT_SENDFILE(handle, tofd, fromfsp, header, offset, count) ((handle)->vfs_next.ops.sendfile((handle)->vfs_next.handles.sendfile, (tofd), (fromfsp), (header), (offset), (count)))
-#define SMB_VFS_NEXT_RECVFILE(handle, fromfd, tofsp, offset, count) ((handle)->vfs_next.ops.recvfile((handle)->vfs_next.handles.recvfile, (fromfd), (tofsp), (offset), (count)))
+#define SMB_VFS_NEXT_CLOSE(handle, fsp, fd) ((handle)->vfs_next.ops.close_fn((handle)->vfs_next.handles.close_hnd, (fsp), (fd)))
+#define SMB_VFS_NEXT_READ(handle, fsp, fd, data, n) ((handle)->vfs_next.ops.read((handle)->vfs_next.handles.read, (fsp), (fd), (data), (n)))
+#define SMB_VFS_NEXT_PREAD(handle, fsp, fd, data, n, off) ((handle)->vfs_next.ops.pread((handle)->vfs_next.handles.pread, (fsp), (fd), (data), (n), (off)))
+#define SMB_VFS_NEXT_WRITE(handle, fsp, fd, data, n) ((handle)->vfs_next.ops.write((handle)->vfs_next.handles.write, (fsp), (fd), (data), (n)))
+#define SMB_VFS_NEXT_PWRITE(handle, fsp, fd, data, n, off) ((handle)->vfs_next.ops.pwrite((handle)->vfs_next.handles.pwrite, (fsp), (fd), (data), (n), (off)))
+#define SMB_VFS_NEXT_LSEEK(handle, fsp, fd, offset, whence) ((handle)->vfs_next.ops.lseek((handle)->vfs_next.handles.lseek, (fsp), (fd), (offset), (whence)))
+#define SMB_VFS_NEXT_SENDFILE(handle, tofd, fsp, fromfd, header, offset, count) ((handle)->vfs_next.ops.sendfile((handle)->vfs_next.handles.sendfile, (tofd), (fsp), (fromfd), (header), (offset), (count)))
 #define SMB_VFS_NEXT_RENAME(handle, old, new) ((handle)->vfs_next.ops.rename((handle)->vfs_next.handles.rename, (old), (new)))
-#define SMB_VFS_NEXT_FSYNC(handle, fsp) ((handle)->vfs_next.ops.fsync((handle)->vfs_next.handles.fsync, (fsp)))
+#define SMB_VFS_NEXT_FSYNC(handle, fsp, fd) ((handle)->vfs_next.ops.fsync((handle)->vfs_next.handles.fsync, (fsp), (fd)))
 #define SMB_VFS_NEXT_STAT(handle, fname, sbuf) ((handle)->vfs_next.ops.stat((handle)->vfs_next.handles.stat, (fname), (sbuf)))
-#define SMB_VFS_NEXT_FSTAT(handle, fsp, sbuf) ((handle)->vfs_next.ops.fstat((handle)->vfs_next.handles.fstat, (fsp), (sbuf)))
+#define SMB_VFS_NEXT_FSTAT(handle, fsp, fd, sbuf) ((handle)->vfs_next.ops.fstat((handle)->vfs_next.handles.fstat, (fsp) ,(fd) ,(sbuf)))
 #define SMB_VFS_NEXT_LSTAT(handle, path, sbuf) ((handle)->vfs_next.ops.lstat((handle)->vfs_next.handles.lstat, (path), (sbuf)))
 #define SMB_VFS_NEXT_UNLINK(handle, path) ((handle)->vfs_next.ops.unlink((handle)->vfs_next.handles.unlink, (path)))
 #define SMB_VFS_NEXT_CHMOD(handle, path, mode) ((handle)->vfs_next.ops.chmod((handle)->vfs_next.handles.chmod, (path), (mode)))
-#define SMB_VFS_NEXT_FCHMOD(handle, fsp, mode) ((handle)->vfs_next.ops.fchmod((handle)->vfs_next.handles.fchmod, (fsp), (mode)))
+#define SMB_VFS_NEXT_FCHMOD(handle, fsp, fd, mode) ((handle)->vfs_next.ops.fchmod((handle)->vfs_next.handles.fchmod, (fsp), (fd), (mode)))
 #define SMB_VFS_NEXT_CHOWN(handle, path, uid, gid) ((handle)->vfs_next.ops.chown((handle)->vfs_next.handles.chown, (path), (uid), (gid)))
-#define SMB_VFS_NEXT_FCHOWN(handle, fsp, uid, gid) ((handle)->vfs_next.ops.fchown((handle)->vfs_next.handles.fchown, (fsp), (uid), (gid)))
-#define SMB_VFS_NEXT_LCHOWN(handle, path, uid, gid) ((handle)->vfs_next.ops.lchown((handle)->vfs_next.handles.lchown, (path), (uid), (gid)))
+#define SMB_VFS_NEXT_FCHOWN(handle, fsp, fd, uid, gid) ((handle)->vfs_next.ops.fchown((handle)->vfs_next.handles.fchown, (fsp), (fd), (uid), (gid)))
 #define SMB_VFS_NEXT_CHDIR(handle, path) ((handle)->vfs_next.ops.chdir((handle)->vfs_next.handles.chdir, (path)))
 #define SMB_VFS_NEXT_GETWD(handle, buf) ((handle)->vfs_next.ops.getwd((handle)->vfs_next.handles.getwd, (buf)))
 #define SMB_VFS_NEXT_NTIMES(handle, path, ts) ((handle)->vfs_next.ops.ntimes((handle)->vfs_next.handles.ntimes, (path), (ts)))
-#define SMB_VFS_NEXT_FTRUNCATE(handle, fsp, offset) ((handle)->vfs_next.ops.ftruncate((handle)->vfs_next.handles.ftruncate, (fsp), (offset)))
-#define SMB_VFS_NEXT_LOCK(handle, fsp, op, offset, count, type) ((handle)->vfs_next.ops.lock((handle)->vfs_next.handles.lock, (fsp), (op), (offset), (count), (type)))
-#define SMB_VFS_NEXT_KERNEL_FLOCK(handle, fsp, share_mode)((handle)->vfs_next.ops.kernel_flock((handle)->vfs_next.handles.kernel_flock, (fsp), (share_mode)))
-#define SMB_VFS_NEXT_LINUX_SETLEASE(handle, fsp, leasetype)((handle)->vfs_next.ops.linux_setlease((handle)->vfs_next.handles.linux_setlease, (fsp), (leasetype)))
-#define SMB_VFS_NEXT_GETLOCK(handle, fsp, poffset, pcount, ptype, ppid) ((handle)->vfs_next.ops.getlock((handle)->vfs_next.handles.getlock, (fsp), (poffset), (pcount), (ptype), (ppid)))
+#define SMB_VFS_NEXT_FTRUNCATE(handle, fsp, fd, offset) ((handle)->vfs_next.ops.ftruncate((handle)->vfs_next.handles.ftruncate, (fsp), (fd), (offset)))
+#define SMB_VFS_NEXT_LOCK(handle, fsp, fd, op, offset, count, type) ((handle)->vfs_next.ops.lock((handle)->vfs_next.handles.lock, (fsp), (fd) ,(op), (offset), (count), (type)))
+#define SMB_VFS_NEXT_KERNEL_FLOCK(handle, fsp, fd, share_mode)((handle)->vfs_next.ops.kernel_flock((handle)->vfs_next.handles.kernel_flock, (fsp), (fd), (share_mode)))
+#define SMB_VFS_NEXT_LINUX_SETLEASE(handle, fsp, fd, leasetype)((handle)->vfs_next.ops.linux_setlease((handle)->vfs_next.handles.linux_setlease, (fsp), (fd), (leasetype)))
+#define SMB_VFS_NEXT_GETLOCK(handle, fsp, fd, poffset, pcount, ptype, ppid) ((handle)->vfs_next.ops.getlock((handle)->vfs_next.handles.getlock, (fsp), (fd), (poffset), (pcount), (ptype), (ppid)))
 #define SMB_VFS_NEXT_SYMLINK(handle, oldpath, newpath) ((handle)->vfs_next.ops.symlink((handle)->vfs_next.handles.symlink, (oldpath), (newpath)))
-#define SMB_VFS_NEXT_READLINK(handle, path, buf, bufsiz) ((handle)->vfs_next.ops.vfs_readlink((handle)->vfs_next.handles.vfs_readlink, (path), (buf), (bufsiz)))
+#define SMB_VFS_NEXT_READLINK(handle, path, buf, bufsiz) ((handle)->vfs_next.ops.readlink((handle)->vfs_next.handles.readlink, (path), (buf), (bufsiz)))
 #define SMB_VFS_NEXT_LINK(handle, oldpath, newpath) ((handle)->vfs_next.ops.link((handle)->vfs_next.handles.link, (oldpath), (newpath)))
 #define SMB_VFS_NEXT_MKNOD(handle, path, mode, dev) ((handle)->vfs_next.ops.mknod((handle)->vfs_next.handles.mknod, (path), (mode), (dev)))
 #define SMB_VFS_NEXT_REALPATH(handle, path, resolved_path) ((handle)->vfs_next.ops.realpath((handle)->vfs_next.handles.realpath, (path), (resolved_path)))
 #define SMB_VFS_NEXT_NOTIFY_WATCH(conn, ctx, e, callback, private_data, handle_p) ((conn)->vfs_next.ops.notify_watch((conn)->vfs_next.handles.notify_watch, (ctx), (e), (callback), (private_data), (handle_p)))
 #define SMB_VFS_NEXT_CHFLAGS(handle, path, flags) ((handle)->vfs_next.ops.chflags((handle)->vfs_next.handles.chflags, (path), (flags)))
-#define SMB_VFS_NEXT_FILE_ID_CREATE(handle, dev, inode) ((handle)->vfs_next.ops.file_id_create((handle)->vfs_next.handles.file_id_create, (dev), (inode)))
-#define SMB_VFS_NEXT_STREAMINFO(handle, fsp, fname, mem_ctx, num_streams, streams) ((handle)->vfs_next.ops.streaminfo((handle)->vfs_next.handles.streaminfo, (fsp), (fname), (mem_ctx), (num_streams), (streams)))
 
 /* NT ACL operations. */
-#define SMB_VFS_NEXT_FGET_NT_ACL(handle, fsp, security_info, ppdesc) ((handle)->vfs_next.ops.fget_nt_acl((handle)->vfs_next.handles.fget_nt_acl, (fsp), (security_info), (ppdesc)))
-#define SMB_VFS_NEXT_GET_NT_ACL(handle, name, security_info, ppdesc) ((handle)->vfs_next.ops.get_nt_acl((handle)->vfs_next.handles.get_nt_acl, (name), (security_info), (ppdesc)))
-#define SMB_VFS_NEXT_FSET_NT_ACL(handle, fsp, security_info_sent, psd) ((handle)->vfs_next.ops.fset_nt_acl((handle)->vfs_next.handles.fset_nt_acl, (fsp), (security_info_sent), (psd)))
+#define SMB_VFS_NEXT_FGET_NT_ACL(handle, fsp, fd, security_info, ppdesc) ((handle)->vfs_next.ops.fget_nt_acl((handle)->vfs_next.handles.fget_nt_acl, (fsp), (fd), (security_info), (ppdesc)))
+#define SMB_VFS_NEXT_GET_NT_ACL(handle, fsp, name, security_info, ppdesc) ((handle)->vfs_next.ops.get_nt_acl((handle)->vfs_next.handles.get_nt_acl, (fsp), (name), (security_info), (ppdesc)))
+#define SMB_VFS_NEXT_FSET_NT_ACL(handle, fsp, fd, security_info_sent, psd) ((handle)->vfs_next.ops.fset_nt_acl((handle)->vfs_next.handles.fset_nt_acl, (fsp), (fd), (security_info_sent), (psd)))
 #define SMB_VFS_NEXT_SET_NT_ACL(handle, fsp, name, security_info_sent, psd) ((handle)->vfs_next.ops.set_nt_acl((handle)->vfs_next.handles.set_nt_acl, (fsp), (name), (security_info_sent), (psd)))
 
 /* POSIX ACL operations. */
 #define SMB_VFS_NEXT_CHMOD_ACL(handle, name, mode) ((handle)->vfs_next.ops.chmod_acl((handle)->vfs_next.handles.chmod_acl, (name), (mode)))
-#define SMB_VFS_NEXT_FCHMOD_ACL(handle, fsp, mode) ((handle)->vfs_next.ops.fchmod_acl((handle)->vfs_next.handles.chmod_acl, (fsp), (mode)))
+#define SMB_VFS_NEXT_FCHMOD_ACL(handle, fsp, fd, mode) ((handle)->vfs_next.ops.fchmod_acl((handle)->vfs_next.handles.chmod_acl, (fsp), (fd), (mode)))
 
 #define SMB_VFS_NEXT_SYS_ACL_GET_ENTRY(handle, theacl, entry_id, entry_p) ((handle)->vfs_next.ops.sys_acl_get_entry((handle)->vfs_next.handles.sys_acl_get_entry, (theacl), (entry_id), (entry_p)))
 #define SMB_VFS_NEXT_SYS_ACL_GET_TAG_TYPE(handle, entry_d, tag_type_p) ((handle)->vfs_next.ops.sys_acl_get_tag_type((handle)->vfs_next.handles.sys_acl_get_tag_type, (entry_d), (tag_type_p)))
 #define SMB_VFS_NEXT_SYS_ACL_GET_PERMSET(handle, entry_d, permset_p) ((handle)->vfs_next.ops.sys_acl_get_permset((handle)->vfs_next.handles.sys_acl_get_permset, (entry_d), (permset_p)))
 #define SMB_VFS_NEXT_SYS_ACL_GET_QUALIFIER(handle, entry_d) ((handle)->vfs_next.ops.sys_acl_get_qualifier((handle)->vfs_next.handles.sys_acl_get_qualifier, (entry_d)))
 #define SMB_VFS_NEXT_SYS_ACL_GET_FILE(handle, path_p, type) ((handle)->vfs_next.ops.sys_acl_get_file((handle)->vfs_next.handles.sys_acl_get_file, (path_p), (type)))
-#define SMB_VFS_NEXT_SYS_ACL_GET_FD(handle, fsp) ((handle)->vfs_next.ops.sys_acl_get_fd((handle)->vfs_next.handles.sys_acl_get_fd, (fsp)))
+#define SMB_VFS_NEXT_SYS_ACL_GET_FD(handle, fsp, fd) ((handle)->vfs_next.ops.sys_acl_get_fd((handle)->vfs_next.handles.sys_acl_get_fd, (fsp), (fd)))
 #define SMB_VFS_NEXT_SYS_ACL_CLEAR_PERMS(handle, permset) ((handle)->vfs_next.ops.sys_acl_clear_perms((handle)->vfs_next.handles.sys_acl_clear_perms, (permset)))
 #define SMB_VFS_NEXT_SYS_ACL_ADD_PERM(handle, permset, perm) ((handle)->vfs_next.ops.sys_acl_add_perm((handle)->vfs_next.handles.sys_acl_add_perm, (permset), (perm)))
 #define SMB_VFS_NEXT_SYS_ACL_TO_TEXT(handle, theacl, plen) ((handle)->vfs_next.ops.sys_acl_to_text((handle)->vfs_next.handles.sys_acl_to_text, (theacl), (plen)))
@@ -364,7 +340,7 @@
 #define SMB_VFS_NEXT_SYS_ACL_SET_PERMSET(handle, entry, permset) ((handle)->vfs_next.ops.sys_acl_set_permset((handle)->vfs_next.handles.sys_acl_set_permset, (entry), (permset)))
 #define SMB_VFS_NEXT_SYS_ACL_VALID(handle, theacl) ((handle)->vfs_next.ops.sys_acl_valid((handle)->vfs_next.handles.sys_acl_valid, (theacl)))
 #define SMB_VFS_NEXT_SYS_ACL_SET_FILE(handle, name, acltype, theacl) ((handle)->vfs_next.ops.sys_acl_set_file((handle)->vfs_next.handles.sys_acl_set_file, (name), (acltype), (theacl)))
-#define SMB_VFS_NEXT_SYS_ACL_SET_FD(handle, fsp, theacl) ((handle)->vfs_next.ops.sys_acl_set_fd((handle)->vfs_next.handles.sys_acl_set_fd, (fsp), (theacl)))
+#define SMB_VFS_NEXT_SYS_ACL_SET_FD(handle, fsp, fd, theacl) ((handle)->vfs_next.ops.sys_acl_set_fd((handle)->vfs_next.handles.sys_acl_set_fd, (fsp), (fd), (theacl)))
 #define SMB_VFS_NEXT_SYS_ACL_DELETE_DEF_FILE(handle, path) ((handle)->vfs_next.ops.sys_acl_delete_def_file((handle)->vfs_next.handles.sys_acl_delete_def_file, (path)))
 #define SMB_VFS_NEXT_SYS_ACL_GET_PERM(handle, permset, perm) ((handle)->vfs_next.ops.sys_acl_get_perm((handle)->vfs_next.handles.sys_acl_get_perm, (permset), (perm)))
 #define SMB_VFS_NEXT_SYS_ACL_FREE_TEXT(handle, text) ((handle)->vfs_next.ops.sys_acl_free_text((handle)->vfs_next.handles.sys_acl_free_text, (text)))
@@ -374,29 +350,24 @@
 /* EA operations. */
 #define SMB_VFS_NEXT_GETXATTR(handle,path,name,value,size) ((handle)->vfs_next.ops.getxattr((handle)->vfs_next.handles.getxattr,(path),(name),(value),(size)))
 #define SMB_VFS_NEXT_LGETXATTR(handle,path,name,value,size) ((handle)->vfs_next.ops.lgetxattr((handle)->vfs_next.handles.lgetxattr,(path),(name),(value),(size)))
-#define SMB_VFS_NEXT_FGETXATTR(handle,fsp,name,value,size) ((handle)->vfs_next.ops.fgetxattr((handle)->vfs_next.handles.fgetxattr,(fsp),(name),(value),(size)))
+#define SMB_VFS_NEXT_FGETXATTR(handle,fsp,fd,name,value,size) ((handle)->vfs_next.ops.fgetxattr((handle)->vfs_next.handles.fgetxattr,(fsp),(fd),(name),(value),(size)))
 #define SMB_VFS_NEXT_LISTXATTR(handle,path,list,size) ((handle)->vfs_next.ops.listxattr((handle)->vfs_next.handles.listxattr,(path),(list),(size)))
 #define SMB_VFS_NEXT_LLISTXATTR(handle,path,list,size) ((handle)->vfs_next.ops.llistxattr((handle)->vfs_next.handles.llistxattr,(path),(list),(size)))
-#define SMB_VFS_NEXT_FLISTXATTR(handle,fsp,list,size) ((handle)->vfs_next.ops.flistxattr((handle)->vfs_next.handles.flistxattr,(fsp),(list),(size)))
+#define SMB_VFS_NEXT_FLISTXATTR(handle,fsp,fd,list,size) ((handle)->vfs_next.ops.flistxattr((handle)->vfs_next.handles.flistxattr,(fsp),(fd),(list),(size)))
 #define SMB_VFS_NEXT_REMOVEXATTR(handle,path,name) ((handle)->vfs_next.ops.removexattr((handle)->vfs_next.handles.removexattr,(path),(name)))
 #define SMB_VFS_NEXT_LREMOVEXATTR(handle,path,name) ((handle)->vfs_next.ops.lremovexattr((handle)->vfs_next.handles.lremovexattr,(path),(name)))
-#define SMB_VFS_NEXT_FREMOVEXATTR(handle,fsp,name) ((handle)->vfs_next.ops.fremovexattr((handle)->vfs_next.handles.fremovexattr,(fsp),(name)))
+#define SMB_VFS_NEXT_FREMOVEXATTR(handle,fsp,fd,name) ((handle)->vfs_next.ops.fremovexattr((handle)->vfs_next.handles.fremovexattr,(fsp),(fd),(name)))
 #define SMB_VFS_NEXT_SETXATTR(handle,path,name,value,size,flags) ((handle)->vfs_next.ops.setxattr((handle)->vfs_next.handles.setxattr,(path),(name),(value),(size),(flags)))
 #define SMB_VFS_NEXT_LSETXATTR(handle,path,name,value,size,flags) ((handle)->vfs_next.ops.lsetxattr((handle)->vfs_next.handles.lsetxattr,(path),(name),(value),(size),(flags)))
-#define SMB_VFS_NEXT_FSETXATTR(handle,fsp,name,value,size,flags) ((handle)->vfs_next.ops.fsetxattr((handle)->vfs_next.handles.fsetxattr,(fsp),(name),(value),(size),(flags)))
+#define SMB_VFS_NEXT_FSETXATTR(handle,fsp,fd,name,value,size,flags) ((handle)->vfs_next.ops.fsetxattr((handle)->vfs_next.handles.fsetxattr,(fsp),(fd),(name),(value),(size),(flags)))
 
 /* AIO operations. */
 #define SMB_VFS_NEXT_AIO_READ(handle,fsp,aiocb) ((handle)->vfs_next.ops.aio_read((handle)->vfs_next.handles.aio_read,(fsp),(aiocb)))
 #define SMB_VFS_NEXT_AIO_WRITE(handle,fsp,aiocb) ((handle)->vfs_next.ops.aio_write((handle)->vfs_next.handles.aio_write,(fsp),(aiocb)))
 #define SMB_VFS_NEXT_AIO_RETURN(handle,fsp,aiocb) ((handle)->vfs_next.ops.aio_return_fn((handle)->vfs_next.handles.aio_return,(fsp),(aiocb)))
-#define SMB_VFS_NEXT_AIO_CANCEL(handle,fsp,aiocb) ((handle)->vfs_next.ops.aio_cancel((handle)->vfs_next.handles.aio_cancel,(fsp),(aiocb)))
+#define SMB_VFS_NEXT_AIO_CANCEL(handle,fsp,fd,aiocb) ((handle)->vfs_next.ops.aio_cancel((handle)->vfs_next.handles.aio_cancel,(fsp),(fd),(aiocb)))
 #define SMB_VFS_NEXT_AIO_ERROR(handle,fsp,aiocb) ((handle)->vfs_next.ops.aio_error_fn((handle)->vfs_next.handles.aio_error,(fsp),(aiocb)))
 #define SMB_VFS_NEXT_AIO_FSYNC(handle,fsp,op,aiocb) ((handle)->vfs_next.ops.aio_fsync((handle)->vfs_next.handles.aio_fsync,(fsp),(op),(aiocb)))
 #define SMB_VFS_NEXT_AIO_SUSPEND(handle,fsp,aiocb,n,ts) ((handle)->vfs_next.ops.aio_suspend((handle)->vfs_next.handles.aio_suspend,(fsp),(aiocb),(n),(ts)))
-#define SMB_VFS_NEXT_AIO_FORCE(handle,fsp) ((handle)->vfs_next.ops.aio_force((handle)->vfs_next.handles.aio_force,(fsp)))
 
-/* Offline operations */
-#define SMB_VFS_NEXT_IS_OFFLINE(handle,path,sbuf) ((handle)->vfs_next.ops.is_offline((handle)->vfs_next.handles.is_offline,(path),(sbuf)))
-#define SMB_VFS_NEXT_SET_OFFLINE(handle,path) ((handle)->vfs_next.ops.set_offline((handle)->vfs_next.handles.set_offline,(path)))
-
 #endif /* _VFS_MACROS_H */

Modified: branches/samba/upstream/source/include/xfile.h
===================================================================
--- branches/samba/upstream/source/include/xfile.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/include/xfile.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _XFILE_H_

Modified: branches/samba/upstream/source/iniparser/AUTHORS
===================================================================
--- branches/samba/upstream/source/iniparser/AUTHORS	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/iniparser/AUTHORS	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,5 +1 @@
-Author for this package:
 Nicolas Devillard <ndevilla at free.fr>
-
-Many thanks to the many people who contributed ideas, code, suggestions,
-corrections, enhancements.

Modified: branches/samba/upstream/source/iniparser/Makefile
===================================================================
--- branches/samba/upstream/source/iniparser/Makefile	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/iniparser/Makefile	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,16 +4,12 @@
 
 # Compiler settings
 CC      = gcc
-CFLAGS  = -O3 -fPIC
+CFLAGS  = -O3
 
 # Ar settings to build the library
 AR	    = ar
 ARFLAGS = rcv
 
-SHLD = ${CC} ${CFLAGS}
-LDSHFLAGS = -shared -Wl,-Bsymbolic  -Wl,-rpath -Wl,/usr/lib -Wl,-rpath,/usr/lib
-LDFLAGS = -Wl,-rpath -Wl,/usr/lib -Wl,-rpath,/usr/lib
-
 # Set RANLIB to ranlib on systems that require it (Sun OS < 4, Mac OSX)
 # RANLIB  = ranlib
 RANLIB = true
@@ -38,21 +34,17 @@
 OBJS = $(SRCS:.c=.o)
 
 
-default:	libiniparser.a libiniparser.so
+default:	libiniparser.a
 
 libiniparser.a:	$(OBJS)
 	@($(AR) $(ARFLAGS) libiniparser.a $(OBJS))
 	@($(RANLIB) libiniparser.a)
 
-libiniparser.so:	$(OBJS)
-	@$(SHLD) $(LDSHFLAGS) -o $@.0 $(OBJS) $(LDFLAGS) \
-		-Wl,-soname=`basename $@`.0
-
 clean:
 	$(RM) $(OBJS)
 
 veryclean:
-	$(RM) $(OBJS) libiniparser.a libiniparser.so*
+	$(RM) $(OBJS) libiniparser.a
 	rm -rf ./html ; mkdir html
 	cd test ; $(MAKE) veryclean
 

Copied: branches/samba/upstream/source/iniparser/html/dir_000000.html (from rev 1928, branches/samba/upstream/source/iniparser/html/dir_000000.html)
===================================================================
--- branches/samba/upstream/source/iniparser/html/dir_000000.html	                        (rev 0)
+++ branches/samba/upstream/source/iniparser/html/dir_000000.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,27 @@
+<html>
+<head>
+	<meta name="author"    content="ndevilla at free.fr">
+	<meta name="keywords"  content="ini file, config file, parser, C library">
+	<link href="doxygen.css" rel="stylesheet" type="text/css">
+<title>iniparser 2.x</title>
+</head>
+
+<body text="#000000" bgcolor="#ffffff">
+
+
+
+<!-- Generated by Doxygen 1.4.4 -->
+<div class="nav">
+<a class="el" href="dir_000000.html">src</a></div>
+<h1>src Directory Reference</h1><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Files</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html">iniparser.h</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parser for ini files. <br></td></tr>
+
+<p>
+</table>
+
+</body>
+</html>

Copied: branches/samba/upstream/source/iniparser/html/dirs.html (from rev 1928, branches/samba/upstream/source/iniparser/html/dirs.html)
===================================================================
--- branches/samba/upstream/source/iniparser/html/dirs.html	                        (rev 0)
+++ branches/samba/upstream/source/iniparser/html/dirs.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,19 @@
+<html>
+<head>
+	<meta name="author"    content="ndevilla at free.fr">
+	<meta name="keywords"  content="ini file, config file, parser, C library">
+	<link href="doxygen.css" rel="stylesheet" type="text/css">
+<title>iniparser 2.x</title>
+</head>
+
+<body text="#000000" bgcolor="#ffffff">
+
+
+
+<!-- Generated by Doxygen 1.4.4 -->
+<h1>iniparser Directories</h1>This directory hierarchy is sorted roughly, but not completely, alphabetically:<ul>
+<li><a class="el" href="dir_000000.html">src</a>
+</ul>
+
+</body>
+</html>

Modified: branches/samba/upstream/source/iniparser/html/doxygen.css
===================================================================
--- branches/samba/upstream/source/iniparser/html/doxygen.css	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/iniparser/html/doxygen.css	2008-06-15 01:55:18 UTC (rev 1953)
@@ -17,8 +17,8 @@
 CAPTION { font-weight: bold }
 DIV.qindex {
 	width: 100%;
-	background-color: #e8eef2;
-	border: 1px solid #84b0c7;
+	background-color: #eeeeff;
+	border: 1px solid #b0b0b0;
 	text-align: center;
 	margin: 2px;
 	padding: 2px;
@@ -26,16 +26,16 @@
 }
 DIV.nav {
 	width: 100%;
-	background-color: #e8eef2;
-	border: 1px solid #84b0c7;
+	background-color: #eeeeff;
+	border: 1px solid #b0b0b0;
 	text-align: center;
 	margin: 2px;
 	padding: 2px;
 	line-height: 140%;
 }
 DIV.navtab {
-       background-color: #e8eef2;
-       border: 1px solid #84b0c7;
+       background-color: #eeeeff;
+       border: 1px solid #b0b0b0;
        text-align: center;
        margin: 2px;
        margin-right: 15px;
@@ -80,7 +80,7 @@
 A:hover { text-decoration: none; background-color: #f2f2ff }
 DL.el { margin-left: -1cm }
 .fragment {
-       font-family: monospace, fixed;
+       font-family: Fixed, monospace;
        font-size: 95%;
 }
 PRE.fragment {
@@ -96,7 +96,14 @@
 	padding-bottom: 4px;
 }
 DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
-
+TD.md { background-color: #F4F4FB; font-weight: bold; }
+TD.mdPrefix {
+       background-color: #F4F4FB;
+       color: #606060;
+	font-size: 80%;
+}
+TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; }
+TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; }
 DIV.groupHeader {
        margin-left: 16px;
        margin-top: 12px;
@@ -111,7 +118,7 @@
 	margin-left: 20px;
 }
 TD.indexkey {
-	background-color: #e8eef2;
+	background-color: #eeeeff;
 	font-weight: bold;
 	padding-right  : 10px;
 	padding-top    : 2px;
@@ -124,7 +131,7 @@
 	border: 1px solid #CCCCCC;
 }
 TD.indexvalue {
-	background-color: #e8eef2;
+	background-color: #eeeeff;
 	font-style: italic;
 	padding-right  : 10px;
 	padding-top    : 2px;
@@ -149,6 +156,13 @@
 SPAN.preprocessor  { color: #806020 }
 SPAN.stringliteral { color: #002080 }
 SPAN.charliteral   { color: #008080 }
+.mdTable {
+	border: 1px solid #868686;
+	background-color: #F4F4FB;
+}
+.mdRow {
+	padding: 8px 10px;
+}
 .mdescLeft {
        padding: 0px 8px 4px 8px;
 	font-size: 80%;
@@ -272,87 +286,24 @@
 INPUT.search { font-size: 75%;
                color: #000080;
                font-weight: normal;
-               background-color: #e8eef2;
+               background-color: #eeeeff;
 }
 TD.tiny      { font-size: 75%;
 }
 a {
-	color: #1A41A8;
+	color: #252E78;
 }
 a:visited {
-	color: #2A3798;
+	color: #3D2185;
 }
 .dirtab { padding: 4px;
           border-collapse: collapse;
-          border: 1px solid #84b0c7;
+          border: 1px solid #b0b0b0;
 }
-TH.dirtab { background: #e8eef2;
+TH.dirtab { background: #eeeeff;
             font-weight: bold;
 }
 HR { height: 1px;
      border: none;
      border-top: 1px solid black;
 }
-
-/* Style for detailed member documentation */
-.memtemplate {
-  font-size: 80%;
-  color: #606060;
-  font-weight: normal;
-} 
-.memnav { 
-  background-color: #e8eef2;
-  border: 1px solid #84b0c7;
-  text-align: center;
-  margin: 2px;
-  margin-right: 15px;
-  padding: 2px;
-}
-.memitem {
-  padding: 4px;
-  background-color: #eef3f5;
-  border-width: 1px;
-  border-style: solid;
-  border-color: #dedeee;
-  -moz-border-radius: 8px 8px 8px 8px;
-}
-.memname {
-  white-space: nowrap;
-  font-weight: bold;
-}
-.memdoc{
-  padding-left: 10px;
-}
-.memproto {
-  background-color: #d5e1e8;
-  width: 100%;
-  border-width: 1px;
-  border-style: solid;
-  border-color: #84b0c7;
-  font-weight: bold;
-  -moz-border-radius: 8px 8px 8px 8px;
-}
-.paramkey {
-  text-align: right;
-}
-.paramtype {
-  white-space: nowrap;
-}
-.paramname {
-  color: #602020;
-  font-style: italic;
-  white-space: nowrap;
-}
-/* End Styling for detailed member documentation */
-
-/* for the tree view */
-.ftvtree {
-	font-family: sans-serif;
-	margin:0.5em;
-}
-.directory { font-size: 9pt; font-weight: bold; }
-.directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; }
-.directory > h3 { margin-top: 0; }
-.directory p { margin: 0px; white-space: nowrap; }
-.directory div { display: none; margin: 0px; }
-.directory img { vertical-align: -30%; }

Modified: branches/samba/upstream/source/iniparser/html/globals_func.html
===================================================================
--- branches/samba/upstream/source/iniparser/html/globals_func.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/iniparser/html/globals_func.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,45 +10,26 @@
 
 
 
-<!-- Generated by Doxygen 1.5.1 -->
-<div class="tabs">
-  <ul>
-    <li><a href="globals.html"><span>All</span></a></li>
-    <li id="current"><a href="globals_func.html"><span>Functions</span></a></li>
-  </ul>
-</div>
-&nbsp;
+<!-- Generated by Doxygen 1.4.4 -->
+<div class="qindex"><a class="qindex" href="globals.html">All</a> | <a class="qindexHL" href="globals_func.html">Functions</a></div>
+
 <p>
 <ul>
 <li>iniparser_dump()
-: <a class="el" href="iniparser_8h.html#046436b3489cd8854ba8e29109250324">iniparser.h</a>
-<li>iniparser_dump_ini()
-: <a class="el" href="iniparser_8h.html#ece0e32de371c9e9592d8333f816dfac">iniparser.h</a>
-<li>iniparser_find_entry()
-: <a class="el" href="iniparser_8h.html#3d67c98bbc0cb5239f024ad54bdc63f1">iniparser.h</a>
-<li>iniparser_freedict()
-: <a class="el" href="iniparser_8h.html#90549ee518523921886b74454ff872eb">iniparser.h</a>
-<li>iniparser_getboolean()
-: <a class="el" href="iniparser_8h.html#eb93c13fcbb75efaa396f53bfd73ff4d">iniparser.h</a>
-<li>iniparser_getdouble()
-: <a class="el" href="iniparser_8h.html#480d35322f1252344cf2246ac21ee559">iniparser.h</a>
-<li>iniparser_getint()
-: <a class="el" href="iniparser_8h.html#694eb1110f4200db8648820a0bb405fa">iniparser.h</a>
-<li>iniparser_getnsec()
-: <a class="el" href="iniparser_8h.html#0b5d6cdc7587e2d27a30f5cdc4a91931">iniparser.h</a>
-<li>iniparser_getsecname()
-: <a class="el" href="iniparser_8h.html#393212be805f395bbfdeb1bafa8bb72a">iniparser.h</a>
-<li>iniparser_getstr()
-: <a class="el" href="iniparser_8h.html#587eafb48937fdee8ae414ad7a666db8">iniparser.h</a>
-<li>iniparser_getstring()
-: <a class="el" href="iniparser_8h.html#7894f8480e1f254d4a1b4a31bdc51b46">iniparser.h</a>
-<li>iniparser_load()
-: <a class="el" href="iniparser_8h.html#b0be559bfb769224b3f1b75e26242a67">iniparser.h</a>
-<li>iniparser_setstr()
-: <a class="el" href="iniparser_8h.html#605a88057bac4c3249513fc588421c32">iniparser.h</a>
-<li>iniparser_unset()
-: <a class="el" href="iniparser_8h.html#7b1a7f2492a35043867fa801b8f21e52">iniparser.h</a>
-</ul>
+: <a class="el" href="iniparser_8h.html#a3">iniparser.h</a><li>iniparser_dump_ini()
+: <a class="el" href="iniparser_8h.html#a2">iniparser.h</a><li>iniparser_find_entry()
+: <a class="el" href="iniparser_8h.html#a11">iniparser.h</a><li>iniparser_freedict()
+: <a class="el" href="iniparser_8h.html#a13">iniparser.h</a><li>iniparser_getboolean()
+: <a class="el" href="iniparser_8h.html#a8">iniparser.h</a><li>iniparser_getdouble()
+: <a class="el" href="iniparser_8h.html#a7">iniparser.h</a><li>iniparser_getint()
+: <a class="el" href="iniparser_8h.html#a6">iniparser.h</a><li>iniparser_getnsec()
+: <a class="el" href="iniparser_8h.html#a0">iniparser.h</a><li>iniparser_getsecname()
+: <a class="el" href="iniparser_8h.html#a1">iniparser.h</a><li>iniparser_getstr()
+: <a class="el" href="iniparser_8h.html#a4">iniparser.h</a><li>iniparser_getstring()
+: <a class="el" href="iniparser_8h.html#a5">iniparser.h</a><li>iniparser_load()
+: <a class="el" href="iniparser_8h.html#a12">iniparser.h</a><li>iniparser_setstr()
+: <a class="el" href="iniparser_8h.html#a9">iniparser.h</a><li>iniparser_unset()
+: <a class="el" href="iniparser_8h.html#a10">iniparser.h</a></ul>
 
 </body>
 </html>

Modified: branches/samba/upstream/source/iniparser/html/index.html
===================================================================
--- branches/samba/upstream/source/iniparser/html/index.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/iniparser/html/index.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,8 +10,8 @@
 
 
 
-<!-- Generated by Doxygen 1.5.1 -->
-<h1>iniparser documentation</h1>
+<!-- Generated by Doxygen 1.4.4 -->
+<h1>iniparser documentation </h1>
 <p>
 <h3 align="center">2.x </h3><hr>
 <h2><a class="anchor" name="welcome">
@@ -22,17 +22,14 @@
 What is an ini file?</a></h2>
 An ini file is an ASCII file describing simple parameters (character strings, integers, floating-point values or booleans) in an explicit format, easy to use and modify for users.<p>
 An ini file is segmented into Sections, declared by the following syntax:<p>
-<div class="fragment"><pre class="fragment">
-    [Section Name]
+<div class="fragment"><pre class="fragment">    [Section Name]
 	</pre></div><p>
 i.e. the section name enclosed in square brackets, alone on a line. Sections names are allowed to contain any character but square brackets or linefeeds. Slashes (/) are also reserved for hierarchical sections (see below).<p>
 In any section are zero or more variables, declared with the following syntax:<p>
-<div class="fragment"><pre class="fragment">
-    Key = value ; comment
+<div class="fragment"><pre class="fragment">    Key = value ; comment
 	</pre></div><p>
 The key is any string (possibly containing blanks). The value is any character on the right side of the equal sign. Values can be given enclosed with quotes. If no quotes are present, the value is understood as containing all characters between the first and the last non-blank characters. The following declarations are identical:<p>
-<div class="fragment"><pre class="fragment">
-    Hello = "this is a long string value" ; comment
+<div class="fragment"><pre class="fragment">    Hello = "this is a long string value" ; comment
     Hello = this is a long string value ; comment
 	</pre></div><p>
 The semicolon and comment at the end of the line are optional. If there is a comment, it starts from the first character after the semicolon up to the end of the line.<p>
@@ -49,7 +46,7 @@
 To use the library in your programs, add the following line on top of your module:<p>
 <div class="fragment"><pre class="fragment"><span class="preprocessor">    #include "<a class="code" href="iniparser_8h.html">iniparser.h</a>"</span>
 </pre></div><p>
-And link your program with the iniparser library by adding <code>-liniparser.a</code> to the compile line.<p>
+And link your program with the iniparser library by adding <code>-liniparser</code>.a to the compile line.<p>
 See the file test/initest.c for an example.<p>
 <hr>
 <h2><a class="anchor" name="reference">
@@ -62,24 +59,22 @@
 <h2><a class="anchor" name="usage">
 Using the parser</a></h2>
 Comments are discarded by the parser. Then sections are identified, and in each section a new entry is created for every keyword found. The keywords are stored with the following syntax:<p>
-<div class="fragment"><pre class="fragment">
-    [Section]
+<div class="fragment"><pre class="fragment">    [Section]
     Keyword = value ; comment
 	</pre></div><p>
 is converted to the following key pair:<p>
-<div class="fragment"><pre class="fragment">
-    ("section:keyword", "value")
+<div class="fragment"><pre class="fragment">    ("section:keyword", "value")
 	</pre></div><p>
 This means that if you want to retrieve the value that was stored in the section called <code>Pizza</code>, in the keyword <code>Cheese</code>, you would make a request to the dictionary for <code>"pizza:cheese"</code>. All section and keyword names are converted to lowercase before storage in the structure. The value side is conserved as it has been parsed, though.<p>
-Section names are also stored in the structure. They are stored using as key the section name, and a NULL associated value. They can be queried through <a class="el" href="iniparser_8h.html#3d67c98bbc0cb5239f024ad54bdc63f1">iniparser_find_entry()</a>.<p>
-To launch the parser, simply use the function called <a class="el" href="iniparser_8h.html#b0be559bfb769224b3f1b75e26242a67">iniparser_load()</a>, which takes an input file name and returns a newly allocated <em>dictionary</em> structure. This latter object should remain opaque to the user and only accessed through the following accessor functions:<p>
+Section names are also stored in the structure. They are stored using as key the section name, and a NULL associated value. They can be queried through <a class="el" href="iniparser_8h.html#a11">iniparser_find_entry()</a>.<p>
+To launch the parser, simply use the function called <a class="el" href="iniparser_8h.html#a12">iniparser_load()</a>, which takes an input file name and returns a newly allocated <em>dictionary</em> structure. This latter object should remain opaque to the user and only accessed through the following accessor functions:<p>
 <ul>
-<li><a class="el" href="iniparser_8h.html#587eafb48937fdee8ae414ad7a666db8">iniparser_getstr()</a></li><li><a class="el" href="iniparser_8h.html#694eb1110f4200db8648820a0bb405fa">iniparser_getint()</a></li><li><a class="el" href="iniparser_8h.html#480d35322f1252344cf2246ac21ee559">iniparser_getdouble()</a></li><li><a class="el" href="iniparser_8h.html#eb93c13fcbb75efaa396f53bfd73ff4d">iniparser_getboolean()</a></li></ul>
+<li><a class="el" href="iniparser_8h.html#a4">iniparser_getstr()</a></li><li><a class="el" href="iniparser_8h.html#a6">iniparser_getint()</a></li><li><a class="el" href="iniparser_8h.html#a7">iniparser_getdouble()</a></li><li><a class="el" href="iniparser_8h.html#a8">iniparser_getboolean()</a></li></ul>
 <p>
-Finally, discard this structure using <a class="el" href="iniparser_8h.html#90549ee518523921886b74454ff872eb">iniparser_freedict()</a>.<p>
+Finally, discard this structure using <a class="el" href="iniparser_8h.html#a13">iniparser_freedict()</a>.<p>
 All values parsed from the ini file are stored as strings. The getint, getdouble and getboolean accessors are just converting these strings to the requested type on the fly, but you could basically perform this conversion by yourself after having called the getstr accessor.<p>
-Notice that the <a class="el" href="iniparser_8h.html#eb93c13fcbb75efaa396f53bfd73ff4d">iniparser_getboolean()</a> function will return an integer (0 or 1), trying to make sense of what was found in the file. Strings starting with "y", "Y", "t", "T" or "1" are considered true values (return 1), strings starting with "n", "N", "f", "F", "0" are considered false (return 0). This allows flexible handling of boolean answers.<p>
-If you want to add extra information into the structure that was not present in the ini file, you can use <a class="el" href="iniparser_8h.html#605a88057bac4c3249513fc588421c32">iniparser_setstr()</a> to insert a string.<p>
+Notice that the <a class="el" href="iniparser_8h.html#a8">iniparser_getboolean()</a> function will return an integer (0 or 1), trying to make sense of what was found in the file. Strings starting with "y", "Y", "t", "T" or "1" are considered true values (return 1), strings starting with "n", "N", "f", "F", "0" are considered false (return 0). This allows flexible handling of boolean answers.<p>
+If you want to add extra information into the structure that was not present in the ini file, you can use <a class="el" href="iniparser_8h.html#a9">iniparser_setstr()</a> to insert a string.<p>
 <hr>
 <h2><a class="anchor" name="implementation">
 A word about the implementation</a></h2>
@@ -89,8 +84,7 @@
 Hierarchical ini files</a></h2>
 ini files are nice to present informations to the user in a readable format, but lack a very useful feature: the possibility of organizing data in a hierarchical (tree-like) fashion. The following convention can be used to make ini files obtain this second dimension:<p>
 A section depends on another section if it contains its name as a prefix, separated by slashes (/). For example: we have 2 main sections in the ini file. The first one is called <code>Pizza</code> and has two child subsections called <code>Cheese</code> and <code>Ham</code>. The second main section in the ini file is called <code>Wine</code> and has two child subsections called <code>Year</code> and <code>Grape</code>. As a tree, this could appear as:<p>
-<div class="fragment"><pre class="fragment">
-    |
+<div class="fragment"><pre class="fragment">    |
     +-- Pizza
     |     +-- Cheese
     |     +-- Ham
@@ -99,8 +93,7 @@
          +--- Grape
 	</pre></div><p>
 In an ini file, that would be converted to:<p>
-<div class="fragment"><pre class="fragment">
-    [Pizza]
+<div class="fragment"><pre class="fragment">    [Pizza]
 
     [Pizza/Cheese]
     Name   = Gorgonzola ;
@@ -123,16 +116,15 @@
 Accessing the above tree would give something like (error checking removed for clarity sake):<p>
 <div class="fragment"><pre class="fragment">    dictionary * d ;
 
-    d = <a class="code" href="iniparser_8h.html#b0be559bfb769224b3f1b75e26242a67">iniparser_load</a>(<span class="stringliteral">"example.ini"</span>);
+    d = <a class="code" href="iniparser_8h.html#a12">iniparser_load</a>(<span class="stringliteral">"example.ini"</span>);
 
-    printf(<span class="stringliteral">"cheese name is %s\n"</span>, <a class="code" href="iniparser_8h.html#587eafb48937fdee8ae414ad7a666db8">iniparser_getstr</a>(d, <span class="stringliteral">"pizza/cheese:name"</span>));
-    printf(<span class="stringliteral">"grape name is %s\n"</span>,  <a class="code" href="iniparser_8h.html#587eafb48937fdee8ae414ad7a666db8">iniparser_getstr</a>(d, <span class="stringliteral">"wine/grape:name"</span>));
+    printf(<span class="stringliteral">"cheese name is %s\n"</span>, <a class="code" href="iniparser_8h.html#a4">iniparser_getstr</a>(d, <span class="stringliteral">"pizza/cheese:name"</span>));
+    printf(<span class="stringliteral">"grape name is %s\n"</span>,  <a class="code" href="iniparser_8h.html#a4">iniparser_getstr</a>(d, <span class="stringliteral">"wine/grape:name"</span>));
 
-    <a class="code" href="iniparser_8h.html#90549ee518523921886b74454ff872eb">iniparser_freedict</a>(d);
+    <a class="code" href="iniparser_8h.html#a13">iniparser_freedict</a>(d);
 </pre></div><p>
 The whole ini file above is represented in the dictionary as the following list of pairs:<p>
-<div class="fragment"><pre class="fragment">
-    key                             value
+<div class="fragment"><pre class="fragment">    key                             value
 
     "pizza"                         NULL
     "pizza/cheese"                  NULL

Modified: branches/samba/upstream/source/iniparser/html/iniparser_8h.html
===================================================================
--- branches/samba/upstream/source/iniparser/html/iniparser_8h.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/iniparser/html/iniparser_8h.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,87 +10,97 @@
 
 
 
-<!-- Generated by Doxygen 1.5.1 -->
+<!-- Generated by Doxygen 1.4.4 -->
+<div class="nav">
+<a class="el" href="dir_000000.html">src</a></div>
 <h1>iniparser.h File Reference</h1>Parser for ini files. <a href="#_details">More...</a>
 <p>
 <table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
 <tr><td colspan="2"><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#0b5d6cdc7587e2d27a30f5cdc4a91931">iniparser_getnsec</a> (dictionary *d)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#a0">iniparser_getnsec</a> (dictionary *d)</td></tr>
 
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get number of sections in a dictionary.  <a href="#0b5d6cdc7587e2d27a30f5cdc4a91931"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#393212be805f395bbfdeb1bafa8bb72a">iniparser_getsecname</a> (dictionary *d, int n)</td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get number of sections in a dictionary.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#a1">iniparser_getsecname</a> (dictionary *d, int n)</td></tr>
 
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get name for section n in a dictionary.  <a href="#393212be805f395bbfdeb1bafa8bb72a"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#ece0e32de371c9e9592d8333f816dfac">iniparser_dump_ini</a> (dictionary *d, FILE *f)</td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get name for section n in a dictionary.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#a2">iniparser_dump_ini</a> (dictionary *d, FILE *f)</td></tr>
 
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Save a dictionary to a loadable ini file.  <a href="#ece0e32de371c9e9592d8333f816dfac"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#046436b3489cd8854ba8e29109250324">iniparser_dump</a> (dictionary *d, FILE *f)</td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Save a dictionary to a loadable ini file.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#a3">iniparser_dump</a> (dictionary *d, FILE *f)</td></tr>
 
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Dump a dictionary to an opened file pointer.  <a href="#046436b3489cd8854ba8e29109250324"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#587eafb48937fdee8ae414ad7a666db8">iniparser_getstr</a> (dictionary *d, const char *key)</td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Dump a dictionary to an opened file pointer.  <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#a4">iniparser_getstr</a> (dictionary *d, char *key)</td></tr>
 
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the string associated to a key, return NULL if not found.  <a href="#587eafb48937fdee8ae414ad7a666db8"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#7894f8480e1f254d4a1b4a31bdc51b46">iniparser_getstring</a> (dictionary *d, const char *key, char *def)</td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the string associated to a key, return NULL if not found.  <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#a5">iniparser_getstring</a> (dictionary *d, char *key, char *def)</td></tr>
 
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the string associated to a key.  <a href="#7894f8480e1f254d4a1b4a31bdc51b46"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#694eb1110f4200db8648820a0bb405fa">iniparser_getint</a> (dictionary *d, const char *key, int notfound)</td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the string associated to a key.  <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#a6">iniparser_getint</a> (dictionary *d, char *key, int notfound)</td></tr>
 
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the string associated to a key, convert to an int.  <a href="#694eb1110f4200db8648820a0bb405fa"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#480d35322f1252344cf2246ac21ee559">iniparser_getdouble</a> (dictionary *d, char *key, double notfound)</td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the string associated to a key, convert to an int.  <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#a7">iniparser_getdouble</a> (dictionary *d, char *key, double notfound)</td></tr>
 
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the string associated to a key, convert to a double.  <a href="#480d35322f1252344cf2246ac21ee559"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#eb93c13fcbb75efaa396f53bfd73ff4d">iniparser_getboolean</a> (dictionary *d, const char *key, int notfound)</td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the string associated to a key, convert to a double.  <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#a8">iniparser_getboolean</a> (dictionary *d, char *key, int notfound)</td></tr>
 
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the string associated to a key, convert to a boolean.  <a href="#eb93c13fcbb75efaa396f53bfd73ff4d"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#605a88057bac4c3249513fc588421c32">iniparser_setstr</a> (dictionary *ini, char *entry, char *val)</td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the string associated to a key, convert to a boolean.  <a href="#a8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#a9">iniparser_setstr</a> (dictionary *ini, char *entry, char *val)</td></tr>
 
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set an entry in a dictionary.  <a href="#605a88057bac4c3249513fc588421c32"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#7b1a7f2492a35043867fa801b8f21e52">iniparser_unset</a> (dictionary *ini, char *entry)</td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set an entry in a dictionary.  <a href="#a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#a10">iniparser_unset</a> (dictionary *ini, char *entry)</td></tr>
 
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Delete an entry in a dictionary.  <a href="#7b1a7f2492a35043867fa801b8f21e52"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#3d67c98bbc0cb5239f024ad54bdc63f1">iniparser_find_entry</a> (dictionary *ini, char *entry)</td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Delete an entry in a dictionary.  <a href="#a10"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#a11">iniparser_find_entry</a> (dictionary *ini, char *entry)</td></tr>
 
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Finds out if a given entry exists in a dictionary.  <a href="#3d67c98bbc0cb5239f024ad54bdc63f1"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">dictionary *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#b0be559bfb769224b3f1b75e26242a67">iniparser_load</a> (const char *ininame)</td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Finds out if a given entry exists in a dictionary.  <a href="#a11"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">dictionary *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#a12">iniparser_load</a> (char *ininame)</td></tr>
 
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parse an ini file and return an allocated dictionary object.  <a href="#b0be559bfb769224b3f1b75e26242a67"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#90549ee518523921886b74454ff872eb">iniparser_freedict</a> (dictionary *d)</td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Parse an ini file and return an allocated dictionary object.  <a href="#a12"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="iniparser_8h.html#a13">iniparser_freedict</a> (dictionary *d)</td></tr>
 
-<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Free all memory associated to an ini dictionary.  <a href="#90549ee518523921886b74454ff872eb"></a><br></td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Free all memory associated to an ini dictionary.  <a href="#a13"></a><br></td></tr>
 </table>
 <hr><a name="_details"></a><h2>Detailed Description</h2>
 Parser for ini files. 
 <p>
-<dl class="author" compact><dt><b>Author:</b></dt><dd>N. Devillard </dd></dl>
-<dl class="date" compact><dt><b>Date:</b></dt><dd>Mar 2000 </dd></dl>
-<dl class="version" compact><dt><b>Version:</b></dt><dd><dl class="rcs" compact><dt><b>Revision</b></dt><dd>1.23 </dd></dl>
+<dl compact><dt><b>Author:</b></dt><dd>N. Devillard </dd></dl>
+<dl compact><dt><b>Date:</b></dt><dd>Mar 2000 </dd></dl>
+<dl compact><dt><b>Version:</b></dt><dd><dl compact><dt><b>Revision</b></dt><dd>1.20 </dd></dl>
 </dd></dl>
 <hr><h2>Function Documentation</h2>
-<a class="anchor" name="046436b3489cd8854ba8e29109250324"></a><!-- doxytag: member="iniparser.h::iniparser_dump" ref="046436b3489cd8854ba8e29109250324" args="(dictionary *d, FILE *f)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
+<a class="anchor" name="a3"></a><!-- doxytag: member="iniparser.h::iniparser_dump" ref="a3" args="(dictionary *d, FILE *f)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="memname">void iniparser_dump           </td>
-          <td>(</td>
-          <td class="paramtype">dictionary *&nbsp;</td>
-          <td class="paramname"> <em>d</em>, </td>
+          <td class="md" nowrap valign="top">void iniparser_dump           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">dictionary *&nbsp;</td>
+          <td class="mdname" nowrap> <em>d</em>, </td>
         </tr>
         <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">FILE *&nbsp;</td>
-          <td class="paramname"> <em>f</em></td><td>&nbsp;</td>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>FILE *&nbsp;</td>
+          <td class="mdname" nowrap> <em>f</em></td>
         </tr>
         <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"></td>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
 
 <p>
 Dump a dictionary to an opened file pointer. 
@@ -101,34 +111,42 @@
     <tr><td valign="top"></td><td valign="top"><em>f</em>&nbsp;</td><td>Opened file pointer to dump to. </td></tr>
   </table>
 </dl>
-<dl class="return" compact><dt><b>Returns:</b></dt><dd>void</dd></dl>
-This function prints out the contents of a dictionary, one element by line, onto the provided file pointer. It is OK to specify <code>stderr</code> or <code>stdout</code> as output files. This function is meant for debugging purposes mostly. 
-</div>
-</div><p>
-<a class="anchor" name="ece0e32de371c9e9592d8333f816dfac"></a><!-- doxytag: member="iniparser.h::iniparser_dump_ini" ref="ece0e32de371c9e9592d8333f816dfac" args="(dictionary *d, FILE *f)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
+<dl compact><dt><b>Returns:</b></dt><dd>void</dd></dl>
+This function prints out the contents of a dictionary, one element by line, onto the provided file pointer. It is OK to specify <code>stderr</code> or <code>stdout</code> as output files. This function is meant for debugging purposes mostly.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2"></a><!-- doxytag: member="iniparser.h::iniparser_dump_ini" ref="a2" args="(dictionary *d, FILE *f)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="memname">void iniparser_dump_ini           </td>
-          <td>(</td>
-          <td class="paramtype">dictionary *&nbsp;</td>
-          <td class="paramname"> <em>d</em>, </td>
+          <td class="md" nowrap valign="top">void iniparser_dump_ini           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">dictionary *&nbsp;</td>
+          <td class="mdname" nowrap> <em>d</em>, </td>
         </tr>
         <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">FILE *&nbsp;</td>
-          <td class="paramname"> <em>f</em></td><td>&nbsp;</td>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>FILE *&nbsp;</td>
+          <td class="mdname" nowrap> <em>f</em></td>
         </tr>
         <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"></td>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
 
 <p>
 Save a dictionary to a loadable ini file. 
@@ -139,34 +157,42 @@
     <tr><td valign="top"></td><td valign="top"><em>f</em>&nbsp;</td><td>Opened file pointer to dump to </td></tr>
   </table>
 </dl>
-<dl class="return" compact><dt><b>Returns:</b></dt><dd>void</dd></dl>
-This function dumps a given dictionary into a loadable ini file. It is Ok to specify <code>stderr</code> or <code>stdout</code> as output files. 
-</div>
-</div><p>
-<a class="anchor" name="3d67c98bbc0cb5239f024ad54bdc63f1"></a><!-- doxytag: member="iniparser.h::iniparser_find_entry" ref="3d67c98bbc0cb5239f024ad54bdc63f1" args="(dictionary *ini, char *entry)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
+<dl compact><dt><b>Returns:</b></dt><dd>void</dd></dl>
+This function dumps a given dictionary into a loadable ini file. It is Ok to specify <code>stderr</code> or <code>stdout</code> as output files.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a11"></a><!-- doxytag: member="iniparser.h::iniparser_find_entry" ref="a11" args="(dictionary *ini, char *entry)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="memname">int iniparser_find_entry           </td>
-          <td>(</td>
-          <td class="paramtype">dictionary *&nbsp;</td>
-          <td class="paramname"> <em>ini</em>, </td>
+          <td class="md" nowrap valign="top">int iniparser_find_entry           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">dictionary *&nbsp;</td>
+          <td class="mdname" nowrap> <em>ini</em>, </td>
         </tr>
         <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char *&nbsp;</td>
-          <td class="paramname"> <em>entry</em></td><td>&nbsp;</td>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>entry</em></td>
         </tr>
         <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"></td>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
 
 <p>
 Finds out if a given entry exists in a dictionary. 
@@ -177,25 +203,33 @@
     <tr><td valign="top"></td><td valign="top"><em>entry</em>&nbsp;</td><td>Name of the entry to look for </td></tr>
   </table>
 </dl>
-<dl class="return" compact><dt><b>Returns:</b></dt><dd>integer 1 if entry exists, 0 otherwise</dd></dl>
-Finds out if a given entry exists in the dictionary. Since sections are stored as keys with NULL associated values, this is the only way of querying for the presence of sections in a dictionary. 
-</div>
-</div><p>
-<a class="anchor" name="90549ee518523921886b74454ff872eb"></a><!-- doxytag: member="iniparser.h::iniparser_freedict" ref="90549ee518523921886b74454ff872eb" args="(dictionary *d)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
+<dl compact><dt><b>Returns:</b></dt><dd>integer 1 if entry exists, 0 otherwise</dd></dl>
+Finds out if a given entry exists in the dictionary. Since sections are stored as keys with NULL associated values, this is the only way of querying for the presence of sections in a dictionary.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a13"></a><!-- doxytag: member="iniparser.h::iniparser_freedict" ref="a13" args="(dictionary *d)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="memname">void iniparser_freedict           </td>
-          <td>(</td>
-          <td class="paramtype">dictionary *&nbsp;</td>
-          <td class="paramname"> <em>d</em>          </td>
-          <td>&nbsp;)&nbsp;</td>
-          <td width="100%"></td>
+          <td class="md" nowrap valign="top">void iniparser_freedict           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">dictionary *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>d</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
 
 <p>
 Free all memory associated to an ini dictionary. 
@@ -205,40 +239,48 @@
     <tr><td valign="top"></td><td valign="top"><em>d</em>&nbsp;</td><td>Dictionary to free </td></tr>
   </table>
 </dl>
-<dl class="return" compact><dt><b>Returns:</b></dt><dd>void</dd></dl>
-Free all memory associated to an ini dictionary. It is mandatory to call this function before the dictionary object gets out of the current context. 
-</div>
-</div><p>
-<a class="anchor" name="eb93c13fcbb75efaa396f53bfd73ff4d"></a><!-- doxytag: member="iniparser.h::iniparser_getboolean" ref="eb93c13fcbb75efaa396f53bfd73ff4d" args="(dictionary *d, const char *key, int notfound)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
+<dl compact><dt><b>Returns:</b></dt><dd>void</dd></dl>
+Free all memory associated to an ini dictionary. It is mandatory to call this function before the dictionary object gets out of the current context.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a8"></a><!-- doxytag: member="iniparser.h::iniparser_getboolean" ref="a8" args="(dictionary *d, char *key, int notfound)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="memname">int iniparser_getboolean           </td>
-          <td>(</td>
-          <td class="paramtype">dictionary *&nbsp;</td>
-          <td class="paramname"> <em>d</em>, </td>
+          <td class="md" nowrap valign="top">int iniparser_getboolean           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">dictionary *&nbsp;</td>
+          <td class="mdname" nowrap> <em>d</em>, </td>
         </tr>
         <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const char *&nbsp;</td>
-          <td class="paramname"> <em>key</em>, </td>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>key</em>, </td>
         </tr>
         <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int&nbsp;</td>
-          <td class="paramname"> <em>notfound</em></td><td>&nbsp;</td>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>notfound</em></td>
         </tr>
         <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"></td>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
 
 <p>
 Get the string associated to a key, convert to a boolean. 
@@ -250,7 +292,7 @@
     <tr><td valign="top"></td><td valign="top"><em>notfound</em>&nbsp;</td><td>Value to return in case of error </td></tr>
   </table>
 </dl>
-<dl class="return" compact><dt><b>Returns:</b></dt><dd>integer</dd></dl>
+<dl compact><dt><b>Returns:</b></dt><dd>integer</dd></dl>
 This function queries a dictionary for a key. A key as read from an ini file is given as "section:key". If the key cannot be found, the notfound value is returned.<p>
 A true boolean is found if one of the following is matched:<p>
 <ul>
@@ -260,39 +302,47 @@
 <ul>
 <li>A string starting with 'n'</li><li>A string starting with 'N'</li><li>A string starting with 'f'</li><li>A string starting with 'F'</li><li>A string starting with '0'</li></ul>
 <p>
-The notfound value returned if no boolean is identified, does not necessarily have to be 0 or 1. 
-</div>
-</div><p>
-<a class="anchor" name="480d35322f1252344cf2246ac21ee559"></a><!-- doxytag: member="iniparser.h::iniparser_getdouble" ref="480d35322f1252344cf2246ac21ee559" args="(dictionary *d, char *key, double notfound)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
+The notfound value returned if no boolean is identified, does not necessarily have to be 0 or 1.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a7"></a><!-- doxytag: member="iniparser.h::iniparser_getdouble" ref="a7" args="(dictionary *d, char *key, double notfound)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="memname">double iniparser_getdouble           </td>
-          <td>(</td>
-          <td class="paramtype">dictionary *&nbsp;</td>
-          <td class="paramname"> <em>d</em>, </td>
+          <td class="md" nowrap valign="top">double iniparser_getdouble           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">dictionary *&nbsp;</td>
+          <td class="mdname" nowrap> <em>d</em>, </td>
         </tr>
         <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char *&nbsp;</td>
-          <td class="paramname"> <em>key</em>, </td>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>key</em>, </td>
         </tr>
         <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">double&nbsp;</td>
-          <td class="paramname"> <em>notfound</em></td><td>&nbsp;</td>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>double&nbsp;</td>
+          <td class="mdname" nowrap> <em>notfound</em></td>
         </tr>
         <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"></td>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
 
 <p>
 Get the string associated to a key, convert to a double. 
@@ -304,40 +354,48 @@
     <tr><td valign="top"></td><td valign="top"><em>notfound</em>&nbsp;</td><td>Value to return in case of error </td></tr>
   </table>
 </dl>
-<dl class="return" compact><dt><b>Returns:</b></dt><dd>double</dd></dl>
-This function queries a dictionary for a key. A key as read from an ini file is given as "section:key". If the key cannot be found, the notfound value is returned. 
-</div>
-</div><p>
-<a class="anchor" name="694eb1110f4200db8648820a0bb405fa"></a><!-- doxytag: member="iniparser.h::iniparser_getint" ref="694eb1110f4200db8648820a0bb405fa" args="(dictionary *d, const char *key, int notfound)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
+<dl compact><dt><b>Returns:</b></dt><dd>double</dd></dl>
+This function queries a dictionary for a key. A key as read from an ini file is given as "section:key". If the key cannot be found, the notfound value is returned.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a6"></a><!-- doxytag: member="iniparser.h::iniparser_getint" ref="a6" args="(dictionary *d, char *key, int notfound)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="memname">int iniparser_getint           </td>
-          <td>(</td>
-          <td class="paramtype">dictionary *&nbsp;</td>
-          <td class="paramname"> <em>d</em>, </td>
+          <td class="md" nowrap valign="top">int iniparser_getint           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">dictionary *&nbsp;</td>
+          <td class="mdname" nowrap> <em>d</em>, </td>
         </tr>
         <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const char *&nbsp;</td>
-          <td class="paramname"> <em>key</em>, </td>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>key</em>, </td>
         </tr>
         <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int&nbsp;</td>
-          <td class="paramname"> <em>notfound</em></td><td>&nbsp;</td>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>notfound</em></td>
         </tr>
         <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"></td>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
 
 <p>
 Get the string associated to a key, convert to an int. 
@@ -349,31 +407,33 @@
     <tr><td valign="top"></td><td valign="top"><em>notfound</em>&nbsp;</td><td>Value to return in case of error </td></tr>
   </table>
 </dl>
-<dl class="return" compact><dt><b>Returns:</b></dt><dd>integer</dd></dl>
-This function queries a dictionary for a key. A key as read from an ini file is given as "section:key". If the key cannot be found, the notfound value is returned.<p>
-Supported values for integers include the usual C notation so decimal, octal (starting with 0) and hexadecimal (starting with 0x) are supported. Examples:<p>
-<ul>
-<li>"42" -&gt; 42</li><li>"042" -&gt; 34 (octal -&gt; decimal)</li><li>"0x42" -&gt; 66 (hexa -&gt; decimal)</li></ul>
-<p>
-Warning: the conversion may overflow in various ways. Conversion is totally outsourced to strtol(), see the associated man page for overflow handling.<p>
-Credits: Thanks to A. Becker for suggesting strtol() 
-</div>
-</div><p>
-<a class="anchor" name="0b5d6cdc7587e2d27a30f5cdc4a91931"></a><!-- doxytag: member="iniparser.h::iniparser_getnsec" ref="0b5d6cdc7587e2d27a30f5cdc4a91931" args="(dictionary *d)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
+<dl compact><dt><b>Returns:</b></dt><dd>integer</dd></dl>
+This function queries a dictionary for a key. A key as read from an ini file is given as "section:key". If the key cannot be found, the notfound value is returned.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a0"></a><!-- doxytag: member="iniparser.h::iniparser_getnsec" ref="a0" args="(dictionary *d)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="memname">int iniparser_getnsec           </td>
-          <td>(</td>
-          <td class="paramtype">dictionary *&nbsp;</td>
-          <td class="paramname"> <em>d</em>          </td>
-          <td>&nbsp;)&nbsp;</td>
-          <td width="100%"></td>
+          <td class="md" nowrap valign="top">int iniparser_getnsec           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">dictionary *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>d</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
 
 <p>
 Get number of sections in a dictionary. 
@@ -383,36 +443,44 @@
     <tr><td valign="top"></td><td valign="top"><em>d</em>&nbsp;</td><td>Dictionary to examine </td></tr>
   </table>
 </dl>
-<dl class="return" compact><dt><b>Returns:</b></dt><dd>int Number of sections found in dictionary</dd></dl>
+<dl compact><dt><b>Returns:</b></dt><dd>int Number of sections found in dictionary</dd></dl>
 This function returns the number of sections found in a dictionary. The test to recognize sections is done on the string stored in the dictionary: a section name is given as "section" whereas a key is stored as "section:key", thus the test looks for entries that do not contain a colon.<p>
 This clearly fails in the case a section name contains a colon, but this should simply be avoided.<p>
-This function returns -1 in case of error. 
-</div>
-</div><p>
-<a class="anchor" name="393212be805f395bbfdeb1bafa8bb72a"></a><!-- doxytag: member="iniparser.h::iniparser_getsecname" ref="393212be805f395bbfdeb1bafa8bb72a" args="(dictionary *d, int n)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
+This function returns -1 in case of error.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1"></a><!-- doxytag: member="iniparser.h::iniparser_getsecname" ref="a1" args="(dictionary *d, int n)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="memname">char* iniparser_getsecname           </td>
-          <td>(</td>
-          <td class="paramtype">dictionary *&nbsp;</td>
-          <td class="paramname"> <em>d</em>, </td>
+          <td class="md" nowrap valign="top">char* iniparser_getsecname           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">dictionary *&nbsp;</td>
+          <td class="mdname" nowrap> <em>d</em>, </td>
         </tr>
         <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">int&nbsp;</td>
-          <td class="paramname"> <em>n</em></td><td>&nbsp;</td>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>n</em></td>
         </tr>
         <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"></td>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
 
 <p>
 Get name for section n in a dictionary. 
@@ -423,35 +491,43 @@
     <tr><td valign="top"></td><td valign="top"><em>n</em>&nbsp;</td><td>Section number (from 0 to nsec-1). </td></tr>
   </table>
 </dl>
-<dl class="return" compact><dt><b>Returns:</b></dt><dd>Pointer to char string</dd></dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Pointer to char string</dd></dl>
 This function locates the n-th section in a dictionary and returns its name as a pointer to a string statically allocated inside the dictionary. Do not free or modify the returned string!<p>
-This function returns NULL in case of error. 
-</div>
-</div><p>
-<a class="anchor" name="587eafb48937fdee8ae414ad7a666db8"></a><!-- doxytag: member="iniparser.h::iniparser_getstr" ref="587eafb48937fdee8ae414ad7a666db8" args="(dictionary *d, const char *key)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
+This function returns NULL in case of error.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4"></a><!-- doxytag: member="iniparser.h::iniparser_getstr" ref="a4" args="(dictionary *d, char *key)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="memname">char* iniparser_getstr           </td>
-          <td>(</td>
-          <td class="paramtype">dictionary *&nbsp;</td>
-          <td class="paramname"> <em>d</em>, </td>
+          <td class="md" nowrap valign="top">char* iniparser_getstr           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">dictionary *&nbsp;</td>
+          <td class="mdname" nowrap> <em>d</em>, </td>
         </tr>
         <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const char *&nbsp;</td>
-          <td class="paramname"> <em>key</em></td><td>&nbsp;</td>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>key</em></td>
         </tr>
         <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"></td>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
 
 <p>
 Get the string associated to a key, return NULL if not found. 
@@ -462,41 +538,49 @@
     <tr><td valign="top"></td><td valign="top"><em>key</em>&nbsp;</td><td>Key string to look for </td></tr>
   </table>
 </dl>
-<dl class="return" compact><dt><b>Returns:</b></dt><dd>pointer to statically allocated character string, or NULL.</dd></dl>
+<dl compact><dt><b>Returns:</b></dt><dd>pointer to statically allocated character string, or NULL.</dd></dl>
 This function queries a dictionary for a key. A key as read from an ini file is given as "section:key". If the key cannot be found, NULL is returned. The returned char pointer is pointing to a string allocated in the dictionary, do not free or modify it.<p>
-This function is only provided for backwards compatibility with previous versions of iniparser. It is recommended to use <a class="el" href="iniparser_8h.html#7894f8480e1f254d4a1b4a31bdc51b46">iniparser_getstring()</a> instead. 
-</div>
-</div><p>
-<a class="anchor" name="7894f8480e1f254d4a1b4a31bdc51b46"></a><!-- doxytag: member="iniparser.h::iniparser_getstring" ref="7894f8480e1f254d4a1b4a31bdc51b46" args="(dictionary *d, const char *key, char *def)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
+This function is only provided for backwards compatibility with previous versions of iniparser. It is recommended to use <a class="el" href="iniparser_8h.html#a5">iniparser_getstring()</a> instead.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a5"></a><!-- doxytag: member="iniparser.h::iniparser_getstring" ref="a5" args="(dictionary *d, char *key, char *def)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="memname">char* iniparser_getstring           </td>
-          <td>(</td>
-          <td class="paramtype">dictionary *&nbsp;</td>
-          <td class="paramname"> <em>d</em>, </td>
+          <td class="md" nowrap valign="top">char* iniparser_getstring           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">dictionary *&nbsp;</td>
+          <td class="mdname" nowrap> <em>d</em>, </td>
         </tr>
         <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">const char *&nbsp;</td>
-          <td class="paramname"> <em>key</em>, </td>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>key</em>, </td>
         </tr>
         <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char *&nbsp;</td>
-          <td class="paramname"> <em>def</em></td><td>&nbsp;</td>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>def</em></td>
         </tr>
         <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"></td>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
 
 <p>
 Get the string associated to a key. 
@@ -508,25 +592,33 @@
     <tr><td valign="top"></td><td valign="top"><em>def</em>&nbsp;</td><td>Default value to return if key not found. </td></tr>
   </table>
 </dl>
-<dl class="return" compact><dt><b>Returns:</b></dt><dd>pointer to statically allocated character string</dd></dl>
-This function queries a dictionary for a key. A key as read from an ini file is given as "section:key". If the key cannot be found, the pointer passed as 'def' is returned. The returned char pointer is pointing to a string allocated in the dictionary, do not free or modify it. 
-</div>
-</div><p>
-<a class="anchor" name="b0be559bfb769224b3f1b75e26242a67"></a><!-- doxytag: member="iniparser.h::iniparser_load" ref="b0be559bfb769224b3f1b75e26242a67" args="(const char *ininame)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
+<dl compact><dt><b>Returns:</b></dt><dd>pointer to statically allocated character string</dd></dl>
+This function queries a dictionary for a key. A key as read from an ini file is given as "section:key". If the key cannot be found, the pointer passed as 'def' is returned. The returned char pointer is pointing to a string allocated in the dictionary, do not free or modify it.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a12"></a><!-- doxytag: member="iniparser.h::iniparser_load" ref="a12" args="(char *ininame)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="memname">dictionary* iniparser_load           </td>
-          <td>(</td>
-          <td class="paramtype">const char *&nbsp;</td>
-          <td class="paramname"> <em>ininame</em>          </td>
-          <td>&nbsp;)&nbsp;</td>
-          <td width="100%"></td>
+          <td class="md" nowrap valign="top">dictionary* iniparser_load           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>ininame</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
 
 <p>
 Parse an ini file and return an allocated dictionary object. 
@@ -536,41 +628,49 @@
     <tr><td valign="top"></td><td valign="top"><em>ininame</em>&nbsp;</td><td>Name of the ini file to read. </td></tr>
   </table>
 </dl>
-<dl class="return" compact><dt><b>Returns:</b></dt><dd>Pointer to newly allocated dictionary</dd></dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Pointer to newly allocated dictionary</dd></dl>
 This is the parser for ini files. This function is called, providing the name of the file to be read. It returns a dictionary object that should not be accessed directly, but through accessor functions instead.<p>
-The returned dictionary must be freed using <a class="el" href="iniparser_8h.html#90549ee518523921886b74454ff872eb">iniparser_freedict()</a>. 
-</div>
-</div><p>
-<a class="anchor" name="605a88057bac4c3249513fc588421c32"></a><!-- doxytag: member="iniparser.h::iniparser_setstr" ref="605a88057bac4c3249513fc588421c32" args="(dictionary *ini, char *entry, char *val)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
+The returned dictionary must be freed using <a class="el" href="iniparser_8h.html#a13">iniparser_freedict()</a>.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a9"></a><!-- doxytag: member="iniparser.h::iniparser_setstr" ref="a9" args="(dictionary *ini, char *entry, char *val)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="memname">int iniparser_setstr           </td>
-          <td>(</td>
-          <td class="paramtype">dictionary *&nbsp;</td>
-          <td class="paramname"> <em>ini</em>, </td>
+          <td class="md" nowrap valign="top">int iniparser_setstr           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">dictionary *&nbsp;</td>
+          <td class="mdname" nowrap> <em>ini</em>, </td>
         </tr>
         <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char *&nbsp;</td>
-          <td class="paramname"> <em>entry</em>, </td>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>entry</em>, </td>
         </tr>
         <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char *&nbsp;</td>
-          <td class="paramname"> <em>val</em></td><td>&nbsp;</td>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>val</em></td>
         </tr>
         <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"></td>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
 
 <p>
 Set an entry in a dictionary. 
@@ -582,34 +682,42 @@
     <tr><td valign="top"></td><td valign="top"><em>val</em>&nbsp;</td><td>New value to associate to the entry. </td></tr>
   </table>
 </dl>
-<dl class="return" compact><dt><b>Returns:</b></dt><dd>int 0 if Ok, -1 otherwise.</dd></dl>
-If the given entry can be found in the dictionary, it is modified to contain the provided value. If it cannot be found, -1 is returned. It is Ok to set val to NULL. 
-</div>
-</div><p>
-<a class="anchor" name="7b1a7f2492a35043867fa801b8f21e52"></a><!-- doxytag: member="iniparser.h::iniparser_unset" ref="7b1a7f2492a35043867fa801b8f21e52" args="(dictionary *ini, char *entry)" -->
-<div class="memitem">
-<div class="memproto">
-      <table class="memname">
+<dl compact><dt><b>Returns:</b></dt><dd>int 0 if Ok, -1 otherwise.</dd></dl>
+If the given entry can be found in the dictionary, it is modified to contain the provided value. If it cannot be found, -1 is returned. It is Ok to set val to NULL.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a10"></a><!-- doxytag: member="iniparser.h::iniparser_unset" ref="a10" args="(dictionary *ini, char *entry)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td class="memname">void iniparser_unset           </td>
-          <td>(</td>
-          <td class="paramtype">dictionary *&nbsp;</td>
-          <td class="paramname"> <em>ini</em>, </td>
+          <td class="md" nowrap valign="top">void iniparser_unset           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">dictionary *&nbsp;</td>
+          <td class="mdname" nowrap> <em>ini</em>, </td>
         </tr>
         <tr>
-          <td class="paramkey"></td>
-          <td></td>
-          <td class="paramtype">char *&nbsp;</td>
-          <td class="paramname"> <em>entry</em></td><td>&nbsp;</td>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>entry</em></td>
         </tr>
         <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td><td width="100%"></td>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
 
 <p>
 Delete an entry in a dictionary. 
@@ -620,10 +728,10 @@
     <tr><td valign="top"></td><td valign="top"><em>entry</em>&nbsp;</td><td>Entry to delete (entry name) </td></tr>
   </table>
 </dl>
-<dl class="return" compact><dt><b>Returns:</b></dt><dd>void</dd></dl>
-If the given entry can be found, it is deleted from the dictionary. 
-</div>
-</div><p>
+<dl compact><dt><b>Returns:</b></dt><dd>void</dd></dl>
+If the given entry can be found, it is deleted from the dictionary.    </td>
+  </tr>
+</table>
 
 </body>
 </html>

Modified: branches/samba/upstream/source/iniparser/html/iniparser_8main.html
===================================================================
--- branches/samba/upstream/source/iniparser/html/iniparser_8main.html	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/iniparser/html/iniparser_8main.html	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,7 +10,7 @@
 
 
 
-<!-- Generated by Doxygen 1.5.1 -->
+<!-- Generated by Doxygen 1.4.4 -->
 <h1>iniparser.main File Reference</h1><table border="0" cellpadding="0" cellspacing="0">
 <tr><td></td></tr>
 </table>

Deleted: branches/samba/upstream/source/iniparser/html/tab_b.gif
===================================================================
(Binary files differ)

Deleted: branches/samba/upstream/source/iniparser/html/tab_l.gif
===================================================================
(Binary files differ)

Deleted: branches/samba/upstream/source/iniparser/html/tab_r.gif
===================================================================
(Binary files differ)

Deleted: branches/samba/upstream/source/iniparser/html/tabs.css
===================================================================
--- branches/samba/upstream/source/iniparser/html/tabs.css	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/iniparser/html/tabs.css	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,102 +0,0 @@
-/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */
-
-DIV.tabs
-{
-   float            : left;
-   width            : 100%;
-   background       : url("tab_b.gif") repeat-x bottom;
-   margin-bottom    : 4px;
-}
-
-DIV.tabs UL
-{
-   margin           : 0px;
-   padding-left     : 10px;
-   list-style       : none;
-}
-
-DIV.tabs LI, DIV.tabs FORM
-{
-   display          : inline;
-   margin           : 0px;
-   padding          : 0px;
-}
-
-DIV.tabs FORM
-{
-   float            : right;
-}
-
-DIV.tabs A
-{
-   float            : left;
-   background       : url("tab_r.gif") no-repeat right top;
-   border-bottom    : 1px solid #84B0C7;
-   font-size        : x-small;
-   font-weight      : bold;
-   text-decoration  : none;
-}
-
-DIV.tabs A:hover
-{
-   background-position: 100% -150px;
-}
-
-DIV.tabs A:link, DIV.tabs A:visited,
-DIV.tabs A:active, DIV.tabs A:hover
-{
-       color: #1A419D;
-}
-
-DIV.tabs SPAN
-{
-   float            : left;
-   display          : block;
-   background       : url("tab_l.gif") no-repeat left top;
-   padding          : 5px 9px;
-   white-space      : nowrap;
-}
-
-DIV.tabs INPUT
-{
-   float            : right;
-   display          : inline;
-   font-size        : 1em;
-}
-
-DIV.tabs TD
-{
-   font-size        : x-small;
-   font-weight      : bold;
-   text-decoration  : none;
-}
-
-
-
-/* Commented Backslash Hack hides rule from IE5-Mac \*/
-DIV.tabs SPAN {float : none;}
-/* End IE5-Mac hack */
-
-DIV.tabs A:hover SPAN
-{
-   background-position: 0% -150px;
-}
-
-DIV.tabs LI#current A
-{
-   background-position: 100% -150px;
-   border-width     : 0px;
-}
-
-DIV.tabs LI#current SPAN
-{
-   background-position: 0% -150px;
-   padding-bottom   : 6px;
-}
-
-DIV.nav
-{
-   background       : none;
-   border           : none;
-   border-bottom    : 1px solid #84B0C7;
-}

Modified: branches/samba/upstream/source/iniparser/src/dictionary.c
===================================================================
--- branches/samba/upstream/source/iniparser/src/dictionary.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/iniparser/src/dictionary.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
    @file	dictionary.c
    @author	N. Devillard
    @date	Aug 2000
-   @version	$Revision: 1.25 $
+   @version	$Revision: 1.23 $
    @brief	Implements a dictionary for string variables.
 
    This module implements a simple dictionary object, i.e. a list
@@ -14,10 +14,10 @@
 /*--------------------------------------------------------------------------*/
 
 /*
-	$Id: dictionary.c,v 1.25 2007-05-27 13:03:43 ndevilla Exp $
+	$Id: dictionary.c,v 1.23 2002/06/17 09:30:46 ndevilla Exp $
 	$Author: ndevilla $
-	$Date: 2007-05-27 13:03:43 $
-	$Revision: 1.25 $
+	$Date: 2002/06/17 09:30:46 $
+	$Revision: 1.23 $
 */
 
 /*---------------------------------------------------------------------------

Modified: branches/samba/upstream/source/iniparser/src/dictionary.h
===================================================================
--- branches/samba/upstream/source/iniparser/src/dictionary.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/iniparser/src/dictionary.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -14,9 +14,9 @@
 /*--------------------------------------------------------------------------*/
 
 /*
-	$Id: dictionary.h,v 1.11 2002-06-17 09:30:46 ndevilla Exp $
+	$Id: dictionary.h,v 1.11 2002/06/17 09:30:46 ndevilla Exp $
 	$Author: ndevilla $
-	$Date: 2002-06-17 09:30:46 $
+	$Date: 2002/06/17 09:30:46 $
 	$Revision: 1.11 $
 */
 

Modified: branches/samba/upstream/source/iniparser/src/iniparser.c
===================================================================
--- branches/samba/upstream/source/iniparser/src/iniparser.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/iniparser/src/iniparser.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,16 +4,16 @@
    @file    iniparser.c
    @author  N. Devillard
    @date    Mar 2000
-   @version $Revision: 2.17 $
+   @version $Revision: 2.14 $
    @brief   Parser for ini files.
 */
 /*--------------------------------------------------------------------------*/
 
 /*
-    $Id: iniparser.c,v 2.17 2007-05-27 13:03:43 ndevilla Exp $
+    $Id: iniparser.c,v 2.14 2002/12/12 10:49:01 ndevilla Exp $
     $Author: ndevilla $
-    $Date: 2007-05-27 13:03:43 $
-    $Revision: 2.17 $
+    $Date: 2002/12/12 10:49:01 $
+    $Revision: 2.14 $
 */
 
 /*---------------------------------------------------------------------------
@@ -280,20 +280,6 @@
   This function queries a dictionary for a key. A key as read from an
   ini file is given as "section:key". If the key cannot be found,
   the notfound value is returned.
-
-  Supported values for integers include the usual C notation
-  so decimal, octal (starting with 0) and hexadecimal (starting with 0x)
-  are supported. Examples:
-
-  "42"      ->  42
-  "042"     ->  34 (octal -> decimal)
-  "0x42"    ->  66 (hexa  -> decimal)
-
-  Warning: the conversion may overflow in various ways. Conversion is
-  totally outsourced to strtol(), see the associated man page for overflow
-  handling.
-
-  Credits: Thanks to A. Becker for suggesting strtol()
  */
 /*--------------------------------------------------------------------------*/
 int iniparser_getint(dictionary * d, const char * key, int notfound)
@@ -302,7 +288,7 @@
 
     str = iniparser_getstring(d, key, INI_INVALID_KEY);
     if (str==INI_INVALID_KEY) return notfound ;
-    return (int)strtol(str, NULL, 0);
+    return atoi(str);
 }
 
 

Modified: branches/samba/upstream/source/iniparser/src/iniparser.h
===================================================================
--- branches/samba/upstream/source/iniparser/src/iniparser.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/iniparser/src/iniparser.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,16 +4,16 @@
    @file    iniparser.h
    @author  N. Devillard
    @date    Mar 2000
-   @version $Revision: 1.23 $
+   @version $Revision: 1.20 $
    @brief   Parser for ini files.
 */
 /*--------------------------------------------------------------------------*/
 
 /*
-	$Id: iniparser.h,v 1.23 2006-09-27 11:03:35 ndevilla Exp $
+	$Id: iniparser.h,v 1.20 2005/08/19 17:23:21 ndevilla Exp $
 	$Author: ndevilla $
-	$Date: 2006-09-27 11:03:35 $
-	$Revision: 1.23 $
+	$Date: 2005/08/19 17:23:21 $
+	$Revision: 1.20 $
 */
 
 #ifndef _INIPARSER_H_
@@ -154,20 +154,6 @@
   This function queries a dictionary for a key. A key as read from an
   ini file is given as "section:key". If the key cannot be found,
   the notfound value is returned.
-
-  Supported values for integers include the usual C notation
-  so decimal, octal (starting with 0) and hexadecimal (starting with 0x)
-  are supported. Examples:
-
-  - "42"      ->  42
-  - "042"     ->  34 (octal -> decimal)
-  - "0x42"    ->  66 (hexa  -> decimal)
-
-  Warning: the conversion may overflow in various ways. Conversion is
-  totally outsourced to strtol(), see the associated man page for overflow
-  handling.
-
-  Credits: Thanks to A. Becker for suggesting strtol()
  */
 /*--------------------------------------------------------------------------*/
 int iniparser_getint(dictionary * d, const char * key, int notfound);

Modified: branches/samba/upstream/source/iniparser/src/strlib.c
===================================================================
--- branches/samba/upstream/source/iniparser/src/strlib.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/iniparser/src/strlib.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
   @file		strlib.c
   @author	N. Devillard
   @date		Jan 2001
-  @version	$Revision: 1.9 $
+  @version	$Revision: 1.8 $
   @brief	Various string handling routines to complement the C lib.
 
   This modules adds a few complementary string routines usually missing
@@ -13,10 +13,10 @@
 /*--------------------------------------------------------------------------*/
 
 /*
-	$Id: strlib.c,v 1.9 2006-09-27 11:04:11 ndevilla Exp $
+	$Id: strlib.c,v 1.8 2002/12/12 10:29:16 ndevilla Exp $
 	$Author: ndevilla $
-	$Date: 2006-09-27 11:04:11 $
-	$Revision: 1.9 $
+	$Date: 2002/12/12 10:29:16 $
+	$Revision: 1.8 $
 */
 
 /*---------------------------------------------------------------------------

Modified: branches/samba/upstream/source/iniparser/src/strlib.h
===================================================================
--- branches/samba/upstream/source/iniparser/src/strlib.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/iniparser/src/strlib.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
   @file     strlib.h
   @author   N. Devillard
   @date     Jan 2001
-  @version  $Revision: 1.4 $
+  @version  $Revision: 1.3 $
   @brief    Various string handling routines to complement the C lib.
 
   This modules adds a few complementary string routines usually missing
@@ -13,10 +13,10 @@
 /*--------------------------------------------------------------------------*/
 
 /*
-	$Id: strlib.h,v 1.4 2006-09-27 11:04:11 ndevilla Exp $
+	$Id: strlib.h,v 1.3 2001/10/19 08:31:41 ndevilla Exp $
 	$Author: ndevilla $
-	$Date: 2006-09-27 11:04:11 $
-	$Revision: 1.4 $
+	$Date: 2001/10/19 08:31:41 $
+	$Revision: 1.3 $
 */
 
 #ifndef _STRLIB_H_

Modified: branches/samba/upstream/source/intl/lang_tdb.c
===================================================================
--- branches/samba/upstream/source/intl/lang_tdb.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/intl/lang_tdb.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -26,12 +27,12 @@
 
 
 /* load a msg file into the tdb */
-static bool load_msg(const char *msg_file)
+static BOOL load_msg(const char *msg_file)
 {
 	char **lines;
 	int num_lines, i;
 	char *msgid, *msgstr;
-	TDB_DATA data;
+	TDB_DATA key, data;
 
 	lines = file_lines_load(msg_file, &num_lines,0);
 
@@ -45,7 +46,7 @@
 	}
 
 	/* wipe the db */
-	tdb_wipe_all(tdb);
+	tdb_traverse(tdb, tdb_traverse_delete_fn, NULL);
 
 	msgid = NULL;
 	
@@ -62,8 +63,11 @@
 			}
 			all_string_sub(msgid, "\\n", "\n", 0);
 			all_string_sub(msgstr, "\\n", "\n", 0);
-			data = string_term_tdb_data(msgstr);
-			tdb_store_bystring(tdb, msgid, data, 0);
+			key.dptr = msgid;
+			key.dsize = strlen(msgid)+1;
+			data.dptr = msgstr;
+			data.dsize = strlen(msgstr)+1;
+			tdb_store(tdb, key, data, 0);
 			msgid = NULL;
 		}
 	}
@@ -93,14 +97,14 @@
 
 /* initialise the message translation subsystem. If the "lang" argument
    is NULL then get the language from the normal environment variables */
-bool lang_tdb_init(const char *lang)
+BOOL lang_tdb_init(const char *lang)
 {
 	char *path = NULL;
 	char *msg_path = NULL;
 	struct stat st;
 	static int initialised;
 	time_t loadtime;
-	bool result = False;
+	BOOL result = False;
 
 	/* we only want to init once per process, unless given
 	   an override */
@@ -127,11 +131,7 @@
 	if (!lang) 
 		return True;
 
-	if (asprintf(&msg_path, "%s.msg",
-		     data_path((const char *)lang)) == -1) {
-		DEBUG(0, ("asprintf failed\n"));
-		goto done;
-	}
+	asprintf(&msg_path, "%s.msg", lib_path((const char *)lang));
 	if (stat(msg_path, &st) != 0) {
 		/* the msg file isn't available */
 		DEBUG(10, ("lang_tdb_init: %s: %s\n", msg_path, 
@@ -139,10 +139,7 @@
 		goto done;
 	}
 	
-	if (asprintf(&path, "%s%s.tdb", lock_path("lang_"), lang) == -1) {
-		DEBUG(0, ("asprintf failed\n"));
-		goto done;
-	}
+	asprintf(&path, "%s%s.tdb", lock_path("lang_"), lang);
 
 	DEBUG(10, ("lang_tdb_init: loading %s\n", path));
 
@@ -181,7 +178,7 @@
 */
 const char *lang_msg(const char *msgid)
 {
-	TDB_DATA data;
+	TDB_DATA key, data;
 	const char *p;
 	char *q, *msgid_quoted;
 	int count;
@@ -217,7 +214,10 @@
 
 	*q = 0;
 
-	data = tdb_fetch_bystring(tdb, msgid_quoted);
+	key.dptr = (char *)msgid_quoted;
+	key.dsize = strlen(msgid_quoted)+1;
+	
+	data = tdb_fetch(tdb, key);
 
 	free(msgid_quoted);
 
@@ -237,6 +237,32 @@
 	free((void *)msgstr);
 }
 
+
+/*
+  when the _() translation macro is used there is no obvious place to free
+  the resulting string and there is no easy way to give a static pointer.
+  All we can do is rotate between some static buffers and hope a single d_printf() 
+  doesn't have more calls to _() than the number of buffers 
+*/
+const char *lang_msg_rotate(const char *msgid)
+{
+#define NUM_LANG_BUFS 16
+	char *msgstr;
+	static pstring bufs[NUM_LANG_BUFS];
+	static int next;
+
+	msgstr = (char *)lang_msg(msgid);
+	if (!msgstr) return msgid;
+
+	pstrcpy(bufs[next], msgstr);
+	msgstr = bufs[next];
+
+	next = (next+1) % NUM_LANG_BUFS;
+	
+	return msgstr;
+}
+
+
 /* 
    return the current language - needed for language file mappings 
 */

Modified: branches/samba/upstream/source/intl/linux-msg.sed
===================================================================
--- branches/samba/upstream/source/intl/linux-msg.sed	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/intl/linux-msg.sed	2008-06-15 01:55:18 UTC (rev 1953)
@@ -13,7 +13,8 @@
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 #
 #
 # The first directive in the .msg should be the definition of the

Modified: branches/samba/upstream/source/lib/access.c
===================================================================
--- branches/samba/upstream/source/lib/access.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/access.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-/*
+/* 
    This module is an adaption of code from the tcpd-1.4 package written
    by Wietse Venema, Eindhoven University of Technology, The Netherlands.
 
@@ -6,219 +6,165 @@
 
    The code has been considerably changed from the original. Bug reports
    should be sent to samba at samba.org
-
-   Updated for IPv6 by Jeremy Allison (C) 2007.
 */
 
 #include "includes.h"
 
-#define NAME_INDEX 0
-#define ADDR_INDEX 1
+#define	FAIL		(-1)
 
+#define ALLONES  ((uint32)0xFFFFFFFF)
+
 /* masked_match - match address against netnumber/netmask */
-static bool masked_match(const char *tok, const char *slash, const char *s)
+static BOOL masked_match(const char *tok, const char *slash, const char *s)
 {
-	struct sockaddr_storage ss_mask;
-	struct sockaddr_storage ss_tok;
-	struct sockaddr_storage ss_host;
-	char *tok_copy = NULL;
+	uint32 net;
+	uint32 mask;
+	uint32 addr;
+	fstring tok_cpy;
 
-	if (!interpret_string_addr(&ss_host, s, 0)) {
-		return false;
-	}
+	if ((addr = interpret_addr(s)) == INADDR_NONE)
+		return (False);
 
-	if (*tok == '[') {
-		/* IPv6 address - remove braces. */
-		tok_copy = SMB_STRDUP(tok+1);
-		if (!tok_copy) {
-			return false;
-		}
-		/* Remove the terminating ']' */
-		tok_copy[PTR_DIFF(slash,tok)-1] = '\0';
-	} else {
-		tok_copy = SMB_STRDUP(tok);
-		if (!tok_copy) {
-			return false;
-		}
-		/* Remove the terminating '/' */
-		tok_copy[PTR_DIFF(slash,tok)] = '\0';
-	}
+	fstrcpy(tok_cpy, tok);
+	tok_cpy[PTR_DIFF(slash,tok)] = '\0';
+	net = interpret_addr(tok_cpy);
+	tok_cpy[PTR_DIFF(slash,tok)] = '/';
 
-	if (!interpret_string_addr(&ss_tok, tok_copy, 0)) {
-		SAFE_FREE(tok_copy);
-		return false;
-	}
-
-	SAFE_FREE(tok_copy);
-
         if (strlen(slash + 1) > 2) {
-		if (!interpret_string_addr(&ss_mask, slash+1, 0)) {
-			return false;
-		}
+                mask = interpret_addr(slash + 1);
         } else {
-		char *endp = NULL;
-		unsigned long val = strtoul(slash+1, &endp, 0);
-		if (slash+1 == endp || (endp && *endp != '\0')) {
-			return false;
-		}
-		if (!make_netmask(&ss_mask, &ss_tok, val)) {
-			return false;
-		}
+		mask = (uint32)((ALLONES >> atoi(slash + 1)) ^ ALLONES);
+		/* convert to network byte order */
+		mask = htonl(mask);
         }
 
-	return same_net(&ss_host, &ss_tok, &ss_mask);
+	if (net == INADDR_NONE || mask == INADDR_NONE) {
+		DEBUG(0,("access: bad net/mask access control: %s\n", tok));
+		return (False);
+	}
+	
+	return ((addr & mask) == (net & mask));
 }
 
-/* string_match - match string s against token tok */
-static bool string_match(const char *tok,const char *s)
+/* string_match - match string against token */
+static BOOL string_match(const char *tok,const char *s, char *invalid_char)
 {
 	size_t     tok_len;
 	size_t     str_len;
 	const char   *cut;
 
-	/* Return true if a token has the magic value "ALL". Return
-	 * true if the token is "FAIL". If the token starts with a "."
-	 * (domain name), return true if it matches the last fields of
+	*invalid_char = '\0';
+
+	/* Return True if a token has the magic value "ALL". Return
+	 * FAIL if the token is "FAIL". If the token starts with a "."
+	 * (domain name), return True if it matches the last fields of
 	 * the string. If the token has the magic value "LOCAL",
-	 * return true if the string does not contain a "."
+	 * return True if the string does not contain a "."
 	 * character. If the token ends on a "." (network number),
-	 * return true if it matches the first fields of the
+	 * return True if it matches the first fields of the
 	 * string. If the token begins with a "@" (netgroup name),
-	 * return true if the string is a (host) member of the
-	 * netgroup. Return true if the token fully matches the
+	 * return True if the string is a (host) member of the
+	 * netgroup. Return True if the token fully matches the
 	 * string. If the token is a netnumber/netmask pair, return
-	 * true if the address is a member of the specified subnet.
+	 * True if the address is a member of the specified subnet.  
 	 */
 
 	if (tok[0] == '.') {			/* domain: match last fields */
 		if ((str_len = strlen(s)) > (tok_len = strlen(tok))
-		    && strequal(tok, s + str_len - tok_len)) {
-			return true;
-		}
+		    && strequal(tok, s + str_len - tok_len))
+			return (True);
 	} else if (tok[0] == '@') { /* netgroup: look it up */
 #ifdef	HAVE_NETGROUP
-		DATA_BLOB tmp;
-		char *mydomain = NULL;
+		static char *mydomain = NULL;
 		char *hostname = NULL;
-		bool netgroup_ok = false;
+		BOOL netgroup_ok = False;
 
-		if (memcache_lookup(
-			    NULL, SINGLETON_CACHE,
-			    data_blob_string_const("yp_default_domain"),
-			    &tmp)) {
-
-			SMB_ASSERT(tmp.length > 0);
-			mydomain = (tmp.data[0] == '\0')
-				? NULL : (char *)tmp.data;
-		}
-		else {
+		if (!mydomain)
 			yp_get_default_domain(&mydomain);
 
-			memcache_add(
-				NULL, SINGLETON_CACHE,
-				data_blob_string_const("yp_default_domain"),
-				data_blob_string_const(mydomain?mydomain:""));
-		}
-
 		if (!mydomain) {
-			DEBUG(0,("Unable to get default yp domain. "
-				"Try without it.\n"));
+			DEBUG(0,("Unable to get default yp domain. Try without it.\n"));
 		}
 		if (!(hostname = SMB_STRDUP(s))) {
 			DEBUG(1,("out of memory for strdup!\n"));
-			return false;
+			return False;
 		}
-
+		
 		netgroup_ok = innetgr(tok + 1, hostname, (char *) 0, mydomain);
-
-		DEBUG(5,("looking for %s of domain %s in netgroup %s gave %s\n",
+		
+		DEBUG(5,("looking for %s of domain %s in netgroup %s gave %s\n", 
 			 hostname,
-			 mydomain?mydomain:"(ANY)",
+			 mydomain?mydomain:"(ANY)", 
 			 tok+1,
 			 BOOLSTR(netgroup_ok)));
 
 		SAFE_FREE(hostname);
-
+      
 		if (netgroup_ok)
-			return true;
+			return(True);
 #else
 		DEBUG(0,("access: netgroup support is not configured\n"));
-		return false;
+		return (False);
 #endif
 	} else if (strequal(tok, "ALL")) {	/* all: match any */
-		return true;
+		return (True);
 	} else if (strequal(tok, "FAIL")) {	/* fail: match any */
-		return true;
+		return (FAIL);
 	} else if (strequal(tok, "LOCAL")) {	/* local: no dots */
-		if (strchr_m(s, '.') == 0 && !strequal(s, "unknown")) {
-			return true;
-		}
+		if (strchr_m(s, '.') == 0 && !strequal(s, "unknown"))
+			return (True);
 	} else if (strequal(tok, s)) {   /* match host name or address */
-		return true;
+		return (True);
 	} else if (tok[(tok_len = strlen(tok)) - 1] == '.') {	/* network */
-		if (strncmp(tok, s, tok_len) == 0) {
-			return true;
-		}
+		if (strncmp(tok, s, tok_len) == 0)
+			return (True);
 	} else if ((cut = strchr_m(tok, '/')) != 0) {	/* netnumber/netmask */
-		if ((isdigit(s[0]) && strchr_m(tok, '.') != NULL) ||
-			(tok[0] == '[' && cut > tok && cut[-1] == ']') ||
-			((isxdigit(s[0]) || s[0] == ':') &&
-				strchr_m(tok, ':') != NULL)) {
-			/* IPv4/netmask or
-			 * [IPv6:addr]/netmask or IPv6:addr/netmask */
-			return masked_match(tok, cut, s);
-		}
-	} else if (strchr_m(tok, '*') != 0 || strchr_m(tok, '?')) {
-		return unix_wild_match(tok, s);
+		if (isdigit((int)s[0]) && masked_match(tok, cut, s))
+			return (True);
+	} else if (strchr_m(tok, '*') != 0) {
+		*invalid_char = '*';
+	} else if (strchr_m(tok, '?') != 0) {
+		*invalid_char = '?';
 	}
-	return false;
+	return (False);
 }
 
 /* client_match - match host name and address against token */
-static bool client_match(const char *tok, const void *item)
+static BOOL client_match(const char *tok, const char *item)
 {
 	const char **client = (const char **)item;
+	BOOL match;
+	char invalid_char = '\0';
 
 	/*
 	 * Try to match the address first. If that fails, try to match the host
 	 * name if available.
 	 */
 
-	if (string_match(tok, client[ADDR_INDEX])) {
-		return true;
-	}
+	if ((match = string_match(tok, client[1], &invalid_char)) == 0) {
+		if(invalid_char)
+			DEBUG(0,("client_match: address match failing due to invalid character '%c' found in \
+token '%s' in an allow/deny hosts line.\n", invalid_char, tok ));
 
-	if (strnequal(client[ADDR_INDEX],"::ffff:",7) &&
-			!strnequal(tok, "::ffff:",7)) {
-		/* client[ADDR_INDEX] is an IPv4 mapped to IPv6, but
- 		 * the list item is not. Try and match the IPv4 part of
- 		 * address only. This will happen a lot on IPv6 enabled
- 		 * systems with IPv4 allow/deny lists in smb.conf.
- 		 * Bug #5311. JRA.
- 		 */
-		if (string_match(tok, (client[ADDR_INDEX])+7)) {
-			return true;
-		}
-	}
+		if (client[0][0] != 0)
+			match = string_match(tok, client[0], &invalid_char);
 
-	if (client[NAME_INDEX][0] != 0) {
-		if (string_match(tok, client[NAME_INDEX])) {
-			return true;
-		}
+		if(invalid_char)
+			DEBUG(0,("client_match: address match failing due to invalid character '%c' found in \
+token '%s' in an allow/deny hosts line.\n", invalid_char, tok ));
 	}
 
-	return false;
+	return (match);
 }
 
 /* list_match - match an item against a list of tokens with exceptions */
-static bool list_match(const char **list,const void *item,
-		bool (*match_fn)(const char *, const void *))
+static BOOL list_match(const char **list,const char *item,
+		BOOL (*match_fn)(const char *, const char *))
 {
-	bool match = false;
+	BOOL match = False;
 
-	if (!list) {
-		return false;
-	}
+	if (!list)
+		return False;
 
 	/*
 	 * Process tokens one at a time. We have exhausted all possible matches
@@ -228,102 +174,87 @@
 	 */
 
 	for (; *list ; list++) {
-		if (strequal(*list, "EXCEPT")) {
-			/* EXCEPT: give up */
+		if (strequal(*list, "EXCEPT"))	/* EXCEPT: give up */
 			break;
-		}
-		if ((match = (*match_fn) (*list, item))) {
-			/* true or FAIL */
+		if ((match = (*match_fn) (*list, item)))	/* True or FAIL */
 			break;
-		}
 	}
-	/* Process exceptions to true or FAIL matches. */
+	/* Process exceptions to True or FAIL matches. */
 
-	if (match != false) {
-		while (*list  && !strequal(*list, "EXCEPT")) {
+	if (match != False) {
+		while (*list  && !strequal(*list, "EXCEPT"))
 			list++;
-		}
 
 		for (; *list; list++) {
-			if ((*match_fn) (*list, item)) {
-				/* Exception Found */
-				return false;
-			}
+			if ((*match_fn) (*list, item)) /* Exception Found */
+				return False;
 		}
 	}
 
-	return match;
+	return (match);
 }
 
 /* return true if access should be allowed */
-static bool allow_access_internal(const char **deny_list,
-				const char **allow_list,
-				const char *cname,
-				const char *caddr)
+static BOOL allow_access_internal(const char **deny_list,const char **allow_list,
+			const char *cname, const char *caddr)
 {
 	const char *client[2];
 
-	client[NAME_INDEX] = cname;
-	client[ADDR_INDEX] = caddr;
+	client[0] = cname;
+	client[1] = caddr;  
 
 	/* if it is loopback then always allow unless specifically denied */
-	if (strcmp(caddr, "127.0.0.1") == 0 || strcmp(caddr, "::1") == 0) {
+	if (strcmp(caddr, "127.0.0.1") == 0) {
 		/*
 		 * If 127.0.0.1 matches both allow and deny then allow.
 		 * Patch from Steve Langasek vorlon at netexpress.net.
 		 */
-		if (deny_list &&
-			list_match(deny_list,client,client_match) &&
+		if (deny_list && 
+			list_match(deny_list,(const char *)client,client_match) &&
 				(!allow_list ||
-				!list_match(allow_list,client, client_match))) {
-			return false;
+				!list_match(allow_list,(const char *)client, client_match))) {
+			return False;
 		}
-		return true;
+		return True;
 	}
 
 	/* if theres no deny list and no allow list then allow access */
-	if ((!deny_list || *deny_list == 0) &&
+	if ((!deny_list || *deny_list == 0) && 
 	    (!allow_list || *allow_list == 0)) {
-		return true;
+		return(True);  
 	}
 
 	/* if there is an allow list but no deny list then allow only hosts
 	   on the allow list */
-	if (!deny_list || *deny_list == 0) {
-		return(list_match(allow_list,client,client_match));
-	}
+	if (!deny_list || *deny_list == 0)
+		return(list_match(allow_list,(const char *)client,client_match));
 
 	/* if theres a deny list but no allow list then allow
 	   all hosts not on the deny list */
-	if (!allow_list || *allow_list == 0) {
-		return(!list_match(deny_list,client,client_match));
-	}
+	if (!allow_list || *allow_list == 0)
+		return(!list_match(deny_list,(const char *)client,client_match));
 
 	/* if there are both types of list then allow all hosts on the
            allow list */
-	if (list_match(allow_list,(const char *)client,client_match)) {
-		return true;
-	}
+	if (list_match(allow_list,(const char *)client,client_match))
+		return (True);
 
 	/* if there are both types of list and it's not on the allow then
 	   allow it if its not on the deny */
-	if (list_match(deny_list,(const char *)client,client_match)) {
-		return false;
-	}
-
-	return true;
+	if (list_match(deny_list,(const char *)client,client_match))
+		return (False);
+	
+	return (True);
 }
 
 /* return true if access should be allowed */
-bool allow_access(const char **deny_list,
-		const char **allow_list,
-		const char *cname,
-		const char *caddr)
+BOOL allow_access(const char **deny_list, const char **allow_list,
+		  const char *cname, const char *caddr)
 {
-	bool ret;
+	BOOL ret;
 	char *nc_cname = smb_xstrdup(cname);
 	char *nc_caddr = smb_xstrdup(caddr);
-
+	
 	ret = allow_access_internal(deny_list, allow_list, nc_cname, nc_caddr);
 
 	SAFE_FREE(nc_cname);
@@ -331,83 +262,69 @@
 	return ret;
 }
 
-/* return true if the char* contains ip addrs only.  Used to avoid
-name lookup calls */
+/* return true if the char* contains ip addrs only.  Used to avoid 
+gethostbyaddr() calls */
 
-static bool only_ipaddrs_in_list(const char **list)
+static BOOL only_ipaddrs_in_list(const char** list)
 {
-	bool only_ip = true;
-
-	if (!list) {
-		return true;
-	}
-
+	BOOL only_ip = True;
+	
+	if (!list)
+		return True;
+			
 	for (; *list ; list++) {
 		/* factor out the special strings */
-		if (strequal(*list, "ALL") || strequal(*list, "FAIL") ||
+		if (strequal(*list, "ALL") || strequal(*list, "FAIL") || 
 		    strequal(*list, "EXCEPT")) {
 			continue;
 		}
-
+		
 		if (!is_ipaddress(*list)) {
-			/*
-			 * If we failed, make sure that it was not because
-			 * the token was a network/netmask pair. Only
-			 * network/netmask pairs have a '/' in them.
+			/* 
+			 * if we failed, make sure that it was not because the token
+			 * was a network/netmask pair.  Only network/netmask pairs
+			 * have a '/' in them
 			 */
 			if ((strchr_m(*list, '/')) == NULL) {
-				only_ip = false;
-				DEBUG(3,("only_ipaddrs_in_list: list has "
-					"non-ip address (%s)\n",
-					*list));
+				only_ip = False;
+				DEBUG(3,("only_ipaddrs_in_list: list has non-ip address (%s)\n", *list));
 				break;
 			}
 		}
 	}
-
+	
 	return only_ip;
 }
 
 /* return true if access should be allowed to a service for a socket */
-bool check_access(int sock, const char **allow_list, const char **deny_list)
+BOOL check_access(int sock, const char **allow_list, const char **deny_list)
 {
-	bool ret = false;
-	bool only_ip = false;
-
+	BOOL ret = False;
+	BOOL only_ip = False;
+	
 	if ((!deny_list || *deny_list==0) && (!allow_list || *allow_list==0))
-		ret = true;
+		ret = True;
 
 	if (!ret) {
-		char addr[INET6_ADDRSTRLEN];
-
-		/* Bypass name resolution calls if the lists
-		 * only contain IP addrs */
-		if (only_ipaddrs_in_list(allow_list) &&
-				only_ipaddrs_in_list(deny_list)) {
-			only_ip = true;
-			DEBUG (3, ("check_access: no hostnames "
-				"in host allow/deny list.\n"));
-			ret = allow_access(deny_list,
-					allow_list,
-					"",
-					get_peer_addr(sock,addr,sizeof(addr)));
+		/* bypass gethostbyaddr() calls if the lists only contain IP addrs */
+		if (only_ipaddrs_in_list(allow_list) && only_ipaddrs_in_list(deny_list)) {
+			only_ip = True;
+			DEBUG (3, ("check_access: no hostnames in host allow/deny list.\n"));
+			ret = allow_access(deny_list,allow_list, "", get_peer_addr(sock));
 		} else {
-			DEBUG (3, ("check_access: hostnames in "
-				"host allow/deny list.\n"));
-			ret = allow_access(deny_list,
-					allow_list,
-					get_peer_name(sock,true),
-					get_peer_addr(sock,addr,sizeof(addr)));
+			DEBUG (3, ("check_access: hostnames in host allow/deny list.\n"));
+			ret = allow_access(deny_list,allow_list, get_peer_name(sock,True),
+					   get_peer_addr(sock));
 		}
-
+		
 		if (ret) {
 			DEBUG(2,("Allowed connection from %s (%s)\n",
-				 only_ip ? "" : get_peer_name(sock,true),
-				 get_peer_addr(sock,addr,sizeof(addr))));
+				 only_ip ? "" : get_peer_name(sock,True),
+				 get_peer_addr(sock)));
 		} else {
 			DEBUG(0,("Denied connection from %s (%s)\n",
-				 only_ip ? "" : get_peer_name(sock,true),
-				 get_peer_addr(sock,addr,sizeof(addr))));
+				 only_ip ? "" : get_peer_name(sock,True),
+				 get_peer_addr(sock)));
 		}
 	}
 

Modified: branches/samba/upstream/source/lib/account_pol.c
===================================================================
--- branches/samba/upstream/source/lib/account_pol.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/account_pol.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -16,11 +16,12 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
-static struct db_context *db;
+static TDB_CONTEXT *tdb; 
 
 /* cache all entries for 60 seconds for to save ldap-queries (cache is updated
  * after this period if admins do not use pdbedit or usermanager but manipulate
@@ -166,7 +167,7 @@
 Get default value for account policy
 *****************************************************************************/
 
-bool account_policy_get_default(int account_policy, uint32 *val)
+BOOL account_policy_get_default(int account_policy, uint32 *val)
 {
 	int i;
 	for (i=0; account_policy_names[i].field; i++) {
@@ -184,7 +185,7 @@
  Set default for a field if it is empty
 *****************************************************************************/
 
-static bool account_policy_set_default_on_empty(int account_policy)
+static BOOL account_policy_set_default_on_empty(int account_policy)
 {
 
 	uint32 value;
@@ -201,69 +202,43 @@
  Open the account policy tdb.
 ***`*************************************************************************/
 
-bool init_account_policy(void)
+BOOL init_account_policy(void)
 {
 
 	const char *vstring = "INFO/version";
 	uint32 version;
 	int i;
 
-	if (db != NULL) {
+	if (tdb) {
 		return True;
 	}
 
-	db = db_open_trans(NULL, state_path("account_policy.tdb"), 0, TDB_DEFAULT,
-		     O_RDWR, 0600);
-
-	if (db == NULL) { /* the account policies files does not exist or open
-			   * failed, try to create a new one */
-		db = db_open_trans(NULL, state_path("account_policy.tdb"), 0,
-			     TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
-		if (db == NULL) {
+	tdb = tdb_open_log(lock_path("account_policy.tdb"), 0, TDB_DEFAULT, O_RDWR, 0600);
+	if (!tdb) { /* the account policies files does not exist or open failed, try to create a new one */
+		tdb = tdb_open_log(lock_path("account_policy.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
+		if (!tdb) {
 			DEBUG(0,("Failed to open account policy database\n"));
 			return False;
 		}
 	}
 
-	version = dbwrap_fetch_int32(db, vstring);
-	if (version == DATABASE_VERSION) {
-		return true;
-	}
-
 	/* handle a Samba upgrade */
+	tdb_lock_bystring(tdb, vstring);
+	if (!tdb_fetch_uint32(tdb, vstring, &version) || version != DATABASE_VERSION) {
 
-	if (db->transaction_start(db) != 0) {
-		DEBUG(0, ("transaction_start failed\n"));
-		TALLOC_FREE(db);
-		return false;
-	}
+		tdb_store_uint32(tdb, vstring, DATABASE_VERSION);
 
-	version = dbwrap_fetch_int32(db, vstring);
-	if (version == DATABASE_VERSION) {
-		/*
-		 * Race condition
-		 */
-		if (db->transaction_cancel(db)) {
-			smb_panic("transaction_cancel failed");
-		}
-		return true;
-	}
-
-	if (version != DATABASE_VERSION) {
-		if (dbwrap_store_uint32(db, vstring, DATABASE_VERSION) != 0) {
-			DEBUG(0, ("dbwrap_store_uint32 failed\n"));
-			goto cancel;
-		}
-
 		for (i=0; account_policy_names[i].field; i++) {
 
 			if (!account_policy_set_default_on_empty(account_policy_names[i].field)) {
 				DEBUG(0,("failed to set default value in account policy tdb\n"));
-				goto cancel;
+				return False;
 			}
 		}
 	}
 
+	tdb_unlock_bystring(tdb, vstring);
+
 	/* These exist by default on NT4 in [HKLM\SECURITY\Policy\Accounts] */
 
 	privilege_create_account( &global_sid_World );
@@ -281,27 +256,14 @@
 		}
 	}
 
-	if (db->transaction_commit(db) != 0) {
-		DEBUG(0, ("transaction_commit failed\n"));
-		goto cancel;
-	}
-
 	return True;
-
- cancel:
-	if (db->transaction_cancel(db)) {
-		smb_panic("transaction_cancel failed");
-	}
-	TALLOC_FREE(db);
-
-	return false;
 }
 
 /*****************************************************************************
 Get an account policy (from tdb) 
 *****************************************************************************/
 
-bool account_policy_get(int field, uint32 *value)
+BOOL account_policy_get(int field, uint32 *value)
 {
 	const char *name;
 	uint32 regval;
@@ -320,7 +282,7 @@
 		return False;
 	}
 	
-	if (!dbwrap_fetch_uint32(db, name, &regval)) {
+	if (!tdb_fetch_uint32(tdb, name, &regval)) {
 		DEBUG(1, ("account_policy_get: tdb_fetch_uint32 failed for field %d (%s), returning 0\n", field, name));
 		return False;
 	}
@@ -338,10 +300,9 @@
 Set an account policy (in tdb) 
 ****************************************************************************/
 
-bool account_policy_set(int field, uint32 value)
+BOOL account_policy_set(int field, uint32 value)
 {
 	const char *name;
-	NTSTATUS status;
 
 	if (!init_account_policy()) {
 		return False;
@@ -353,10 +314,8 @@
 		return False;
 	}
 
-	status = dbwrap_trans_store_uint32(db, name, value);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(1, ("store_uint32 failed for field %d (%s) on value "
-			  "%u: %s\n", field, name, value, nt_errstr(status)));
+	if (!tdb_store_uint32(tdb, name, value)) {
+		DEBUG(1, ("tdb_store_uint32 failed for field %d (%s) on value %u\n", field, name, value));
 		return False;
 	}
 
@@ -369,12 +328,12 @@
 Set an account policy in the cache 
 ****************************************************************************/
 
-bool cache_account_policy_set(int field, uint32 value)
+BOOL cache_account_policy_set(int field, uint32 value)
 {
 	const char *policy_name = NULL;
 	char *cache_key = NULL;
 	char *cache_value = NULL;
-	bool ret = False;
+	BOOL ret = False;
 
 	policy_name = decode_account_policy_name(field);
 	if (policy_name == NULL) {
@@ -406,12 +365,12 @@
 Get an account policy from the cache 
 *****************************************************************************/
 
-bool cache_account_policy_get(int field, uint32 *value)
+BOOL cache_account_policy_get(int field, uint32 *value)
 {
 	const char *policy_name = NULL;
 	char *cache_key = NULL;
 	char *cache_value = NULL;
-	bool ret = False;
+	BOOL ret = False;
 
 	policy_name = decode_account_policy_name(field);
 	if (policy_name == NULL) {
@@ -439,15 +398,15 @@
 /****************************************************************************
 ****************************************************************************/
 
-struct db_context *get_account_pol_db( void )
+TDB_CONTEXT *get_account_pol_tdb( void )
 {
 
-	if ( db != NULL ) {
+	if ( !tdb ) {
 		if ( !init_account_policy() ) {
 			return NULL;
 		}
 	}
 
-	return db;
+	return tdb;
 }
 

Modified: branches/samba/upstream/source/lib/adt_tree.c
===================================================================
--- branches/samba/upstream/source/lib/adt_tree.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/adt_tree.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -24,7 +25,7 @@
 /**************************************************************************
  *************************************************************************/
 
-static bool trim_tree_keypath( char *path, char **base, char **new_path )
+static BOOL trim_tree_keypath( char *path, char **base, char **new_path )
 {
 	char *p;
 	
@@ -191,23 +192,23 @@
  Add a new node into the tree given a key path and a blob of data
  *************************************************************************/
 
- WERROR pathtree_add( SORTED_TREE *tree, const char *path, void *data_p )
+ BOOL pathtree_add( SORTED_TREE *tree, const char *path, void *data_p )
 {
 	char *str, *base, *path2;
 	TREE_NODE *current, *next;
-	WERROR ret = WERR_OK;
+	BOOL ret = True;
 	
 	DEBUG(8,("pathtree_add: Enter\n"));
 		
 	if ( !path || *path != '/' ) {
 		DEBUG(0,("pathtree_add: Attempt to add a node with a bad path [%s]\n",
 			path ? path : "NULL" ));
-		return WERR_INVALID_PARAM;
+		return False;
 	}
 	
 	if ( !tree ) {
 		DEBUG(0,("pathtree_add: Attempt to add a node to an uninitialized tree!\n"));
-		return WERR_INVALID_PARAM;
+		return False;
 	}
 	
 	/* move past the first '/' */
@@ -216,7 +217,7 @@
 	path2 = SMB_STRDUP( path );
 	if ( !path2 ) {
 		DEBUG(0,("pathtree_add: strdup() failed on string [%s]!?!?!\n", path));
-		return WERR_NOMEM;
+		return False;
 	}
 	
 
@@ -244,7 +245,7 @@
 			next = pathtree_birth_child( current, base );
 			if ( !next ) {
 				DEBUG(0,("pathtree_add: Failed to create new child!\n"));
-				ret = WERR_NOMEM;
+				ret =  False;
 				goto done;
 			}
 		}
@@ -278,41 +279,31 @@
  Recursive routine to print out all children of a TREE_NODE
  *************************************************************************/
 
-static void pathtree_print_children(TALLOC_CTX *ctx,
-				TREE_NODE *node,
-				int debug,
-				const char *path )
+static void pathtree_print_children( TREE_NODE *node, int debug, const char *path )
 {
 	int i;
 	int num_children;
-	char *path2 = NULL;
-
+	pstring path2;
+	
 	if ( !node )
 		return;
-
+	
+	
 	if ( node->key )
 		DEBUG(debug,("%s: [%s] (%s)\n", path ? path : "NULL", node->key,
 			node->data_p ? "data" : "NULL" ));
 
-	if ( path ) {
-		path2 = talloc_strdup(ctx, path);
-		if (!path2) {
-			return;
-		}
-	}
-
-	path2 = talloc_asprintf(ctx,
-			"%s%s/",
-			path ? path : "",
-			node->key ? node->key : "NULL");
-	if (!path2) {
-		return;
-	}
-
+	*path2 = '\0';
+	if ( path )
+		pstrcpy( path2, path );
+	pstrcat( path2, node->key ? node->key : "NULL" );
+	pstrcat( path2, "/" );
+		
 	num_children = node->num_children;
-	for ( i=0; i<num_children; i++ ) {
-		pathtree_print_children(ctx, node->children[i], debug, path2 );
-	}
+	for ( i=0; i<num_children; i++ )
+		pathtree_print_children( node->children[i], debug, path2 );
+	
+
 }
 
 /**************************************************************************
@@ -323,23 +314,21 @@
 {
 	int i;
 	int num_children = tree->root->num_children;
-
+	
 	if ( tree->root->key )
 		DEBUG(debug,("ROOT/: [%s] (%s)\n", tree->root->key,
 			tree->root->data_p ? "data" : "NULL" ));
-
+	
 	for ( i=0; i<num_children; i++ ) {
-		TALLOC_CTX *ctx = talloc_stackframe();
-		pathtree_print_children(ctx, tree->root->children[i], debug,
+		pathtree_print_children( tree->root->children[i], debug, 
 			tree->root->key ? tree->root->key : "ROOT/" );
-		TALLOC_FREE(ctx);
 	}
-
+	
 }
 
 /**************************************************************************
  return the data_p for for the node in tree matching the key string
- The key string is the full path.  We must break it apart and walk
+ The key string is the full path.  We must break it apart and walk 
  the tree
  *************************************************************************/
 

Modified: branches/samba/upstream/source/lib/afs.c
===================================================================
--- branches/samba/upstream/source/lib/afs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/afs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -42,23 +43,20 @@
 			      const struct ClearToken *ct)
 {
 	char *base64_ticket;
-	char *result = NULL;
+	char *result;
 
 	DATA_BLOB key = data_blob(ct->HandShakeKey, 8);
 	char *base64_key;
-	TALLOC_CTX *mem_ctx;
 
-	mem_ctx = talloc_stackframe();
-	if (mem_ctx == NULL)
-		goto done;
-
-	base64_ticket = base64_encode_data_blob(mem_ctx, ticket);
+	base64_ticket = base64_encode_data_blob(ticket);
 	if (base64_ticket == NULL)
-		goto done;
+		return NULL;
 
-	base64_key = base64_encode_data_blob(mem_ctx, key);
-	if (base64_key == NULL)
-		goto done;
+	base64_key = base64_encode_data_blob(key);
+	if (base64_key == NULL) {
+		free(base64_ticket);
+		return NULL;
+	}
 
 	asprintf(&result, "%s\n%u\n%s\n%u\n%u\n%u\n%s\n", cell,
 		 ct->AuthHandle, base64_key, ct->ViceId, ct->BeginTimestamp,
@@ -66,8 +64,8 @@
 
 	DEBUG(10, ("Got ticket string:\n%s\n", result));
 
-done:
-	TALLOC_FREE(mem_ctx);
+	free(base64_ticket);
+	free(base64_key);
 
 	return result;
 }
@@ -75,7 +73,7 @@
 /* Create a ClearToken and an encrypted ticket. ClearToken has not yet the
  * ViceId set, this should be set by the caller. */
 
-static bool afs_createtoken(const char *username, const char *cell,
+static BOOL afs_createtoken(const char *username, const char *cell,
 			    DATA_BLOB *ticket, struct ClearToken *ct)
 {
 	fstring clear_ticket;
@@ -211,44 +209,28 @@
   For the comments "Alice" is the User to be auth'ed, and "Bob" is the
   AFS server.  */
 
-bool afs_login(connection_struct *conn)
+BOOL afs_login(connection_struct *conn)
 {
 	extern userdom_struct current_user_info;
 	extern struct current_user current_user;
 	DATA_BLOB ticket;
-	char *afs_username = NULL;
-	char *cell = NULL;
-	bool result;
-	char *ticket_str = NULL;
+	pstring afs_username;
+	char *cell;
+	BOOL result;
+	char *ticket_str;
 	const DOM_SID *user_sid;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	struct ClearToken ct;
 
-	afs_username = talloc_strdup(ctx,
-				lp_afs_username_map());
-	if (!afs_username) {
-		return false;
-	}
+	pstrcpy(afs_username, lp_afs_username_map());
+	standard_sub_advanced(SNUM(conn), conn->user,
+			      conn->connectpath, conn->gid,
+			      get_current_username(),
+			      current_user_info.domain,
+			      afs_username, sizeof(afs_username));
 
-	afs_username = talloc_sub_advanced(ctx,
-				SNUM(conn), conn->user,
-				conn->connectpath, conn->gid,
-				get_current_username(),
-				current_user_info.domain,
-				afs_username);
-	if (!afs_username) {
-		return false;
-	}
-
 	user_sid = &current_user.nt_user_token->user_sids[0];
-	afs_username = talloc_string_sub(talloc_tos(),
-					afs_username,
-					"%s",
-					sid_string_tos(user_sid));
-	if (!afs_username) {
-		return false;
-	}
+	pstring_sub(afs_username, "%s", sid_string_static(user_sid));
 
 	/* The pts command always generates completely lower-case user
 	 * names. */
@@ -259,13 +241,13 @@
 	if (cell == NULL) {
 		DEBUG(1, ("AFS username doesn't contain a @, "
 			  "could not find cell\n"));
-		return false;
+		return False;
 	}
 
 	*cell = '\0';
 	cell += 1;
 
-	DEBUG(10, ("Trying to log into AFS for user %s@%s\n",
+	DEBUG(10, ("Trying to log into AFS for user %s@%s\n", 
 		   afs_username, cell));
 
 	if (!afs_createtoken(afs_username, cell, &ticket, &ct))
@@ -287,7 +269,7 @@
 
 #else
 
-bool afs_login(connection_struct *conn)
+BOOL afs_login(connection_struct *conn)
 {
 	return True;
 }

Modified: branches/samba/upstream/source/lib/afs_settoken.c
===================================================================
--- branches/samba/upstream/source/lib/afs_settoken.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/afs_settoken.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -48,26 +49,25 @@
 	uint32 EndTimestamp;
 };
 
-static bool afs_decode_token(const char *string, char **cell,
+static BOOL afs_decode_token(const char *string, char **cell,
 			     DATA_BLOB *ticket, struct ClearToken *ct)
 {
 	DATA_BLOB blob;
 	struct ClearToken result_ct;
-	char *saveptr;
 
 	char *s = SMB_STRDUP(string);
 
 	char *t;
 
-	if ((t = strtok_r(s, "\n", &saveptr)) == NULL) {
-		DEBUG(10, ("strtok_r failed\n"));
+	if ((t = strtok(s, "\n")) == NULL) {
+		DEBUG(10, ("strtok failed\n"));
 		return False;
 	}
 
 	*cell = SMB_STRDUP(t);
 
-	if ((t = strtok_r(NULL, "\n", &saveptr)) == NULL) {
-		DEBUG(10, ("strtok_r failed\n"));
+	if ((t = strtok(NULL, "\n")) == NULL) {
+		DEBUG(10, ("strtok failed\n"));
 		return False;
 	}
 
@@ -76,8 +76,8 @@
 		return False;
 	}
 		
-	if ((t = strtok_r(NULL, "\n", &saveptr)) == NULL) {
-		DEBUG(10, ("strtok_r failed\n"));
+	if ((t = strtok(NULL, "\n")) == NULL) {
+		DEBUG(10, ("strtok failed\n"));
 		return False;
 	}
 
@@ -94,8 +94,8 @@
 
 	data_blob_free(&blob);
 
-	if ((t = strtok_r(NULL, "\n", &saveptr)) == NULL) {
-		DEBUG(10, ("strtok_r failed\n"));
+	if ((t = strtok(NULL, "\n")) == NULL) {
+		DEBUG(10, ("strtok failed\n"));
 		return False;
 	}
 
@@ -104,8 +104,8 @@
 		return False;
 	}
 		
-	if ((t = strtok_r(NULL, "\n", &saveptr)) == NULL) {
-		DEBUG(10, ("strtok_r failed\n"));
+	if ((t = strtok(NULL, "\n")) == NULL) {
+		DEBUG(10, ("strtok failed\n"));
 		return False;
 	}
 
@@ -114,8 +114,8 @@
 		return False;
 	}
 		
-	if ((t = strtok_r(NULL, "\n", &saveptr)) == NULL) {
-		DEBUG(10, ("strtok_r failed\n"));
+	if ((t = strtok(NULL, "\n")) == NULL) {
+		DEBUG(10, ("strtok failed\n"));
 		return False;
 	}
 
@@ -124,8 +124,8 @@
 		return False;
 	}
 		
-	if ((t = strtok_r(NULL, "\n", &saveptr)) == NULL) {
-		DEBUG(10, ("strtok_r failed\n"));
+	if ((t = strtok(NULL, "\n")) == NULL) {
+		DEBUG(10, ("strtok failed\n"));
 		return False;
 	}
 
@@ -152,7 +152,7 @@
   to avoid. 
 */
 
-static bool afs_settoken(const char *cell,
+static BOOL afs_settoken(const char *cell,
 			 const struct ClearToken *ctok,
 			 DATA_BLOB ticket)
 {
@@ -208,11 +208,11 @@
 	return (ret == 0);
 }
 
-bool afs_settoken_str(const char *token_string)
+BOOL afs_settoken_str(const char *token_string)
 {
 	DATA_BLOB ticket;
 	struct ClearToken ct;
-	bool result;
+	BOOL result;
 	char *cell;
 
 	if (!afs_decode_token(token_string, &cell, &ticket, &ct))
@@ -231,7 +231,7 @@
 
 #else
 
-bool afs_settoken_str(const char *token_string)
+BOOL afs_settoken_str(const char *token_string)
 {
 	return False;
 }

Modified: branches/samba/upstream/source/lib/arc4.c
===================================================================
--- branches/samba/upstream/source/lib/arc4.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/arc4.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Deleted: branches/samba/upstream/source/lib/async_req.c
===================================================================
--- branches/samba/upstream/source/lib/async_req.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/async_req.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,98 +0,0 @@
-/*
-   Unix SMB/CIFS implementation.
-   Infrastructure for async requests
-   Copyright (C) Volker Lendecke 2008
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-
-char *async_req_print(TALLOC_CTX *mem_ctx, struct async_req *req)
-{
-	return talloc_asprintf(mem_ctx, "async_req: state=%d, status=%s, "
-			       "priv=%s", req->state, nt_errstr(req->status),
-			       talloc_get_name(req->private_data));
-}
-
-struct async_req *async_req_new(TALLOC_CTX *mem_ctx, struct event_context *ev)
-{
-	struct async_req *result;
-
-	result = TALLOC_ZERO_P(mem_ctx, struct async_req);
-	if (result == NULL) {
-		return NULL;
-	}
-	result->state = ASYNC_REQ_IN_PROGRESS;
-	result->event_ctx = ev;
-	result->print = async_req_print;
-	return result;
-}
-
-void async_req_done(struct async_req *req)
-{
-	req->status = NT_STATUS_OK;
-	req->state = ASYNC_REQ_DONE;
-	if (req->async.fn != NULL) {
-		req->async.fn(req);
-	}
-}
-
-void async_req_error(struct async_req *req, NTSTATUS status)
-{
-	req->status = status;
-	req->state = ASYNC_REQ_ERROR;
-	if (req->async.fn != NULL) {
-		req->async.fn(req);
-	}
-}
-
-static void async_trigger(struct event_context *ev, struct timed_event *te,
-			  const struct timeval *now, void *priv)
-{
-	struct async_req *req = talloc_get_type_abort(priv, struct async_req);
-
-	TALLOC_FREE(te);
-	if (NT_STATUS_IS_OK(req->status)) {
-		async_req_done(req);
-	}
-	else {
-		async_req_error(req, req->status);
-	}
-}
-
-bool async_post_status(struct async_req *req, NTSTATUS status)
-{
-	/*
-	 * Used if a request is finished before it even started
-	 */
-
-	req->status = status;
-
-	if (event_add_timed(req->event_ctx, req, timeval_zero(),
-			    "async_trigger",
-			    async_trigger, req) == NULL) {
-		return false;
-	}
-	return true;
-}
-
-bool async_req_nomem(const void *p, struct async_req *req)
-{
-	if (p != NULL) {
-		return false;
-	}
-	async_req_error(req, NT_STATUS_NO_MEMORY);
-	return true;
-}

Modified: branches/samba/upstream/source/lib/audit.c
===================================================================
--- branches/samba/upstream/source/lib/audit.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/audit.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -88,7 +89,7 @@
 	return NULL;
 }
 
-bool get_audit_category_from_param(const char *param, uint32 *audit_category)
+BOOL get_audit_category_from_param(const char *param, uint32 *audit_category)
 {
 	*audit_category = Undefined;
 

Modified: branches/samba/upstream/source/lib/bitmap.c
===================================================================
--- branches/samba/upstream/source/lib/bitmap.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/bitmap.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -99,7 +100,7 @@
 /****************************************************************************
 set a bit in a bitmap
 ****************************************************************************/
-bool bitmap_set(struct bitmap *bm, unsigned i)
+BOOL bitmap_set(struct bitmap *bm, unsigned i)
 {
 	if (i >= bm->n) {
 		DEBUG(0,("Setting invalid bitmap entry %d (of %d)\n",
@@ -113,7 +114,7 @@
 /****************************************************************************
 clear a bit in a bitmap
 ****************************************************************************/
-bool bitmap_clear(struct bitmap *bm, unsigned i)
+BOOL bitmap_clear(struct bitmap *bm, unsigned i)
 {
 	if (i >= bm->n) {
 		DEBUG(0,("clearing invalid bitmap entry %d (of %d)\n",
@@ -127,7 +128,7 @@
 /****************************************************************************
 query a bit in a bitmap
 ****************************************************************************/
-bool bitmap_query(struct bitmap *bm, unsigned i)
+BOOL bitmap_query(struct bitmap *bm, unsigned i)
 {
 	if (i >= bm->n) return False;
 	if (bm->b[i/32] & (1<<(i%32))) {

Modified: branches/samba/upstream/source/lib/charcnv.c
===================================================================
--- branches/samba/upstream/source/lib/charcnv.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/charcnv.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,23 +1,24 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    Character set conversion Extensions
    Copyright (C) Igor Vergeichik <iverg at mail.ru> 2001
    Copyright (C) Andrew Tridgell 2001
    Copyright (C) Simo Sorce 2001
    Copyright (C) Martin Pool 2003
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
 */
 #include "includes.h"
@@ -33,7 +34,7 @@
  * @file
  *
  * @brief Character-set conversion routines built on our iconv.
- *
+ * 
  * @note Samba's internal character set (at least in the 3.0 series)
  * is always the same as the one for the Unix filesystem.  It is
  * <b>not</b> necessarily UTF-8 and may be different on machines that
@@ -46,7 +47,7 @@
 
 
 static smb_iconv_t conv_handles[NUM_CHARSETS][NUM_CHARSETS];
-static bool conv_silent; /* Should we do a debug if the conversion fails ? */
+static BOOL conv_silent; /* Should we do a debug if the conversion fails ? */
 
 /**
  * Return the name of a charset to give to iconv().
@@ -128,7 +129,7 @@
 void init_iconv(void)
 {
 	int c1, c2;
-	bool did_reload = False;
+	BOOL did_reload = False;
 
 	/* so that charset_name() works we need to get the UNIX<->UCS2 going
 	   first */
@@ -167,7 +168,7 @@
 				conv_handles[c1][c2] = smb_iconv_open(n2,n1);
 				if (!conv_handles[c1][c2]) {
 					DEBUG(0,("init_iconv: Conversion from %s to %s failed", n1, n2));
-					smb_panic("init_iconv: conv_handle initialization failed");
+					smb_panic("init_iconv: conv_handle initialization failed.");
 				}
 			}
 		}
@@ -178,6 +179,7 @@
 		 * codepage changes? */
 		/* XXX: Is the did_reload test too strict? */
 		conv_silent = True;
+		init_doschar_table();
 		init_valid_table();
 		conv_silent = False;
 	}
@@ -200,7 +202,7 @@
 
 static size_t convert_string_internal(charset_t from, charset_t to,
 		      void const *src, size_t srclen, 
-		      void *dest, size_t destlen, bool allow_bad_conv)
+		      void *dest, size_t destlen, BOOL allow_bad_conv)
 {
 	size_t i_len, o_len;
 	size_t retval;
@@ -374,7 +376,7 @@
 
 size_t convert_string(charset_t from, charset_t to,
 		      void const *src, size_t srclen, 
-		      void *dest, size_t destlen, bool allow_bad_conv)
+		      void *dest, size_t destlen, BOOL allow_bad_conv)
 {
 	/*
 	 * NB. We deliberately don't do a strlen here if srclen == -1.
@@ -508,25 +510,20 @@
  * Convert between character sets, allocating a new buffer for the result.
  *
  * @param ctx TALLOC_CTX to use to allocate with. If NULL use malloc.
- * (this is a bad interface and needs fixing. JRA).
  * @param srclen length of source buffer.
  * @param dest always set at least to NULL
- * @param converted_size set to the size of the allocated buffer on return
- * true
  * @note -1 is not accepted for srclen.
  *
- * @return True if new buffer was correctly allocated, and string was
- * converted.
+ * @returns Size in bytes of the converted string; or -1 in case of error.
  *
  * Ensure the srclen contains the terminating zero.
- *
+ * 
  * I hate the goto's in this function. It's embarressing.....
  * There has to be a cleaner way to do this. JRA.
  **/
 
-bool convert_string_allocate(TALLOC_CTX *ctx, charset_t from, charset_t to,
-			     void const *src, size_t srclen, void *dst,
-			     size_t *converted_size, bool allow_bad_conv)
+size_t convert_string_allocate(TALLOC_CTX *ctx, charset_t from, charset_t to,
+			       void const *src, size_t srclen, void *dst, BOOL allow_bad_conv)
 {
 	size_t i_len, o_len, destlen = (srclen * 3) / 2;
 	size_t retval;
@@ -537,20 +534,11 @@
 
 	*dest = NULL;
 
-	if (!converted_size) {
-		errno = EINVAL;
-		return false;
-	}
+	if (src == NULL || srclen == (size_t)-1)
+		return (size_t)-1;
+	if (srclen == 0)
+		return 0;
 
-	if (src == NULL || srclen == (size_t)-1) {
-		errno = EINVAL;
-		return false;
-	}
-	if (srclen == 0) {
-		*converted_size = 0;
-		return true;
-	}
-
 	lazy_initialize_conv();
 
 	descriptor = conv_handles[from][to];
@@ -558,8 +546,7 @@
 	if (descriptor == (smb_iconv_t)-1 || descriptor == (smb_iconv_t)0) {
 		if (!conv_silent)
 			DEBUG(0,("convert_string_allocate: Conversion not supported.\n"));
-		errno = EOPNOTSUPP;
-		return false;
+		return (size_t)-1;
 	}
 
   convert:
@@ -571,8 +558,7 @@
 			DEBUG(0, ("convert_string_allocate: destlen wrapped !\n"));
 		if (!ctx)
 			SAFE_FREE(outbuf);
-		errno = EOPNOTSUPP;
-		return false;
+		return (size_t)-1;
 	} else {
 		destlen = destlen * 2;
 	}
@@ -586,8 +572,7 @@
 
 	if (!ob) {
 		DEBUG(0, ("convert_string_allocate: realloc failed!\n"));
-		errno = ENOMEM;
-		return false;
+		return (size_t)-1;
 	}
 	outbuf = ob;
 	i_len = srclen;
@@ -609,7 +594,7 @@
 					goto use_as_is;
 				break;
 			case E2BIG:
-				goto convert;
+				goto convert;		
 			case EILSEQ:
 				reason="Illegal multibyte sequence";
 				if (!conv_silent)
@@ -621,34 +606,22 @@
 		if (!conv_silent)
 			DEBUG(0,("Conversion error: %s(%s)\n",reason,inbuf));
 		/* smb_panic(reason); */
-		if (ctx) {
-			TALLOC_FREE(ob);
-		} else {
-			SAFE_FREE(ob);
-		}
-		return false;
+		return (size_t)-1;
 	}
 
   out:
 
 	destlen = destlen - o_len;
-	/* Don't shrink unless we're reclaiming a lot of
-	 * space. This is in the hot codepath and these
-	 * reallocs *cost*. JRA.
-	 */
-	if (o_len > 1024) {
+	if (ctx) {
 		/* We're shrinking here so we know the +2 is safe from wrap. */
-		if (ctx) {
-			ob = (char *)TALLOC_REALLOC(ctx,ob,destlen + 2);
-		} else {
-			ob = (char *)SMB_REALLOC(ob,destlen + 2);
-		}
+		ob = (char *)TALLOC_REALLOC(ctx,ob,destlen + 2);
+	} else {
+		ob = (char *)SMB_REALLOC(ob,destlen + 2);
 	}
 
 	if (destlen && !ob) {
 		DEBUG(0, ("convert_string_allocate: out of memory!\n"));
-		errno = ENOMEM;
-		return false;
+		return (size_t)-1;
 	}
 
 	*dest = ob;
@@ -657,8 +630,7 @@
 	ob[destlen] = '\0';
 	ob[destlen+1] = '\0';
 
-	*converted_size = destlen;
-	return true;
+	return destlen;
 
  use_as_is:
 
@@ -748,21 +720,21 @@
  * Convert between character sets, allocating a new buffer using talloc for the result.
  *
  * @param srclen length of source buffer.
- * @param dest always set at least to NULL
+ * @param dest always set at least to NULL 
  * @note -1 is not accepted for srclen.
  *
  * @returns Size in bytes of the converted string; or -1 in case of error.
  **/
 size_t convert_string_talloc(TALLOC_CTX *ctx, charset_t from, charset_t to,
 			     void const *src, size_t srclen, void *dst,
-			     bool allow_bad_conv)
+			     BOOL allow_bad_conv)
 {
 	void **dest = (void **)dst;
 	size_t dest_len;
 
 	*dest = NULL;
-	if (!convert_string_allocate(ctx, from, to, src, srclen, dest,
-		&dest_len, allow_bad_conv))
+	dest_len=convert_string_allocate(ctx, from, to, src, srclen, dest, allow_bad_conv);
+	if (dest_len == (size_t)-1)
 		return (size_t)-1;
 	if (*dest == NULL)
 		return (size_t)-1;
@@ -773,16 +745,16 @@
 {
 	size_t size;
 	smb_ucs2_t *buffer;
-
+	
 	size = push_ucs2_allocate(&buffer, src);
 	if (size == (size_t)-1) {
-		return (size_t)-1;
+		smb_panic("failed to create UCS2 buffer");
 	}
 	if (!strupper_w(buffer) && (dest == src)) {
 		free(buffer);
 		return srclen;
 	}
-
+	
 	size = convert_string(CH_UTF16LE, CH_UNIX, buffer, size, dest, destlen, True);
 	free(buffer);
 	return size;
@@ -790,129 +762,59 @@
 
 /**
  strdup() a unix string to upper case.
+ Max size is pstring.
 **/
 
 char *strdup_upper(const char *s)
 {
-	char *out_buffer = SMB_STRDUP(s);
+	pstring out_buffer;
 	const unsigned char *p = (const unsigned char *)s;
 	unsigned char *q = (unsigned char *)out_buffer;
 
-	if (!q) {
-		return NULL;
-	}
-
 	/* this is quite a common operation, so we want it to be
 	   fast. We optimise for the ascii case, knowing that all our
 	   supported multi-byte character sets are ascii-compatible
 	   (ie. they match for the first 128 chars) */
 
-	while (*p) {
+	while (1) {
 		if (*p & 0x80)
 			break;
-		*q++ = toupper_ascii_fast(*p);
-		p++;
-	}
-
-	if (*p) {
-		/* MB case. */
-		size_t size, size2;
-		smb_ucs2_t *buffer = NULL;
-
-		SAFE_FREE(out_buffer);
-		if (!convert_string_allocate(NULL, CH_UNIX, CH_UTF16LE, s,
-			strlen(s) + 1, (void **)(void *)&buffer, &size,
-			True)) {
-			return NULL;
-		}
-
-		strupper_w(buffer);
-
-		if (!convert_string_allocate(NULL, CH_UTF16LE, CH_UNIX, buffer,
-			size, (void **)(void *)&out_buffer, &size2, True)) {
-			TALLOC_FREE(buffer);
-			return NULL;
-		}
-
-		/* Don't need the intermediate buffer
- 		 * anymore.
- 		 */
-		TALLOC_FREE(buffer);
-	}
-
-	return out_buffer;
-}
-
-/**
- talloc_strdup() a unix string to upper case.
-**/
-
-char *talloc_strdup_upper(TALLOC_CTX *ctx, const char *s)
-{
-	char *out_buffer = talloc_strdup(ctx,s);
-	const unsigned char *p = (const unsigned char *)s;
-	unsigned char *q = (unsigned char *)out_buffer;
-
-	if (!q) {
-		return NULL;
-	}
-
-	/* this is quite a common operation, so we want it to be
-	   fast. We optimise for the ascii case, knowing that all our
-	   supported multi-byte character sets are ascii-compatible
-	   (ie. they match for the first 128 chars) */
-
-	while (*p) {
-		if (*p & 0x80)
+		*q++ = toupper_ascii(*p);
+		if (!*p)
 			break;
-		*q++ = toupper_ascii_fast(*p);
 		p++;
+		if (p - ( const unsigned char *)s >= sizeof(pstring))
+			break;
 	}
 
 	if (*p) {
 		/* MB case. */
 		size_t size;
-		smb_ucs2_t *ubuf = NULL;
-
-		/* We're not using the ascii buffer above. */
-		TALLOC_FREE(out_buffer);
-
-		size = convert_string_talloc(ctx, CH_UNIX, CH_UTF16LE,
-				s, strlen(s)+1,
-				(void *)&ubuf,
-				True);
+		wpstring buffer;
+		size = convert_string(CH_UNIX, CH_UTF16LE, s, -1, buffer, sizeof(buffer), True);
 		if (size == (size_t)-1) {
 			return NULL;
 		}
 
-		strupper_w(ubuf);
-
-		size = convert_string_talloc(ctx, CH_UTF16LE, CH_UNIX,
-				ubuf, size,
-				(void *)&out_buffer,
-				True);
-
-		/* Don't need the intermediate buffer
- 		 * anymore.
- 		 */
-
-		TALLOC_FREE(ubuf);
-
+		strupper_w(buffer);
+	
+		size = convert_string(CH_UTF16LE, CH_UNIX, buffer, -1, out_buffer, sizeof(out_buffer), True);
 		if (size == (size_t)-1) {
 			return NULL;
 		}
 	}
 
-	return out_buffer;
+	return SMB_STRDUP(out_buffer);
 }
 
 size_t unix_strlower(const char *src, size_t srclen, char *dest, size_t destlen)
 {
 	size_t size;
 	smb_ucs2_t *buffer = NULL;
-
-	if (!convert_string_allocate(NULL, CH_UNIX, CH_UTF16LE, src, srclen,
-		(void **)(void *)&buffer, &size, True)) {
+	
+	size = convert_string_allocate(NULL, CH_UNIX, CH_UTF16LE, src, srclen,
+				       (void **)(void *)&buffer, True);
+	if (size == (size_t)-1 || !buffer) {
 		smb_panic("failed to create UCS2 buffer");
 	}
 	if (!strlower_w(buffer) && (dest == src)) {
@@ -933,52 +835,26 @@
 	size_t size;
 	smb_ucs2_t *buffer = NULL;
 	char *out_buffer;
-
+	
 	size = push_ucs2_allocate(&buffer, s);
 	if (size == -1 || !buffer) {
 		return NULL;
 	}
 
 	strlower_w(buffer);
-
+	
 	size = pull_ucs2_allocate(&out_buffer, buffer);
 	SAFE_FREE(buffer);
 
 	if (size == (size_t)-1) {
 		return NULL;
 	}
-
+	
 	return out_buffer;
 }
 
-char *talloc_strdup_lower(TALLOC_CTX *ctx, const char *s)
+static size_t ucs2_align(const void *base_ptr, const void *p, int flags)
 {
-	size_t size;
-	smb_ucs2_t *buffer = NULL;
-	char *out_buffer;
-
-	size = push_ucs2_talloc(ctx, &buffer, s);
-	if (size == -1 || !buffer) {
-		TALLOC_FREE(buffer);
-		return NULL;
-	}
-
-	strlower_w(buffer);
-
-	size = pull_ucs2_talloc(ctx, &out_buffer, buffer);
-	TALLOC_FREE(buffer);
-
-	if (size == (size_t)-1) {
-		TALLOC_FREE(out_buffer);
-		return NULL;
-	}
-
-	return out_buffer;
-}
-
-
-size_t ucs2_align(const void *base_ptr, const void *p, int flags)
-{
 	if (flags & (STR_NOALIGN|STR_ASCII))
 		return 0;
 	return PTR_DIFF(p, base_ptr) & 1;
@@ -997,39 +873,33 @@
  * </dl>
  *
  * @param dest_len the maximum length in bytes allowed in the
- * destination.
+ * destination.  If @p dest_len is -1 then no maximum is used.
  **/
 size_t push_ascii(void *dest, const char *src, size_t dest_len, int flags)
 {
 	size_t src_len = strlen(src);
-	char *tmpbuf = NULL;
+	pstring tmpbuf;
 	size_t ret;
 
-	/* No longer allow a length of -1. */
-	if (dest_len == (size_t)-1) {
+	/* No longer allow a length of -1 */
+	if (dest_len == (size_t)-1)
 		smb_panic("push_ascii - dest_len == -1");
-	}
 
 	if (flags & STR_UPPER) {
-		tmpbuf = SMB_STRDUP(src);
-		if (!tmpbuf) {
-			smb_panic("malloc fail");
-		}
+		pstrcpy(tmpbuf, src);
 		strupper_m(tmpbuf);
 		src = tmpbuf;
 	}
 
-	if (flags & (STR_TERMINATE | STR_TERMINATE_ASCII)) {
+	if (flags & (STR_TERMINATE | STR_TERMINATE_ASCII))
 		src_len++;
-	}
 
-	ret = convert_string(CH_UNIX, CH_DOS, src, src_len, dest, dest_len, True);
+	ret =convert_string(CH_UNIX, CH_DOS, src, src_len, dest, dest_len, True);
 	if (ret == (size_t)-1 &&
 			(flags & (STR_TERMINATE | STR_TERMINATE_ASCII))
 			&& dest_len > 0) {
 		((char *)dest)[0] = '\0';
 	}
-	SAFE_FREE(tmpbuf);
 	return ret;
 }
 
@@ -1038,6 +908,11 @@
 	return push_ascii(dest, src, sizeof(fstring), STR_TERMINATE);
 }
 
+size_t push_ascii_pstring(void *dest, const char *src)
+{
+	return push_ascii(dest, src, sizeof(pstring), STR_TERMINATE);
+}
+
 /********************************************************************
  Push an nstring - ensure null terminated. Written by
  moriyama at miraclelinux.com (MORIYAMA Masayuki).
@@ -1077,22 +952,6 @@
 	return dest_len;
 }
 
-/********************************************************************
- Push and malloc an ascii string. src and dest null terminated.
-********************************************************************/
-
-size_t push_ascii_allocate(char **dest, const char *src)
-{
-	size_t dest_len, src_len = strlen(src)+1;
-
-	*dest = NULL;
-	if (!convert_string_allocate(NULL, CH_UNIX, CH_DOS, src, src_len,
-		(void **)dest, &dest_len, True))
-		return (size_t)-1;
-	else
-		return dest_len;
-}
-
 /**
  * Copy a string from a dos codepage source to a unix char* destination.
  *
@@ -1112,10 +971,8 @@
 {
 	size_t ret;
 
-	if (dest_len == (size_t)-1) {
-		/* No longer allow dest_len of -1. */
-		smb_panic("pull_ascii - invalid dest_len of -1");
-	}
+	if (dest_len == (size_t)-1)
+		dest_len = sizeof(pstring);
 
 	if (flags & STR_TERMINATE) {
 		if (src_len == (size_t)-1) {
@@ -1146,77 +1003,9 @@
 	return src_len;
 }
 
-/**
- * Copy a string from a dos codepage source to a unix char* destination.
- Talloc version.
- Uses malloc if TALLOC_CTX is NULL (this is a bad interface and
- needs fixing. JRA).
- *
- * The resulting string in "dest" is always null terminated.
- *
- * @param flags can have:
- * <dl>
- * <dt>STR_TERMINATE</dt>
- * <dd>STR_TERMINATE means the string in @p src
- * is null terminated, and src_len is ignored.</dd>
- * </dl>
- *
- * @param src_len is the length of the source area in bytes.
- * @returns the number of bytes occupied by the string in @p src.
- **/
-
-static size_t pull_ascii_base_talloc(TALLOC_CTX *ctx,
-					char **ppdest,
-					const void *src,
-					size_t src_len,
-					int flags)
+size_t pull_ascii_pstring(char *dest, const void *src)
 {
-	char *dest = NULL;
-	size_t dest_len = 0;
-
-#ifdef DEVELOPER
-	/* Ensure we never use the braindead "malloc" varient. */
-	if (ctx == NULL) {
-		smb_panic("NULL talloc CTX in pull_ascii_base_talloc\n");
-	}
-#endif
-
-	*ppdest = NULL;
-
-	if (flags & STR_TERMINATE) {
-		if (src_len == (size_t)-1) {
-			src_len = strlen((const char *)src) + 1;
-		} else {
-			size_t len = strnlen((const char *)src, src_len);
-			if (len < src_len)
-				len++;
-			src_len = len;
-		}
-		/* Ensure we don't use an insane length from the client. */
-		if (src_len >= 1024*1024) {
-			char *msg = talloc_asprintf(ctx,
-					"Bad src length (%u) in "
-					"pull_ascii_base_talloc",
-					(unsigned int)src_len);
-			smb_panic(msg);
-		}
-	}
-
-	if (!convert_string_allocate(ctx, CH_DOS, CH_UNIX, src, src_len, &dest,
-		&dest_len, True))
-		dest_len = 0;
-
-	if (dest_len && dest) {
-		/* Did we already process the terminating zero ? */
-		if (dest[dest_len-1] != 0) {
-			dest[dest_len-1] = 0;
-		}
-	} else if (dest) {
-		dest[0] = 0;
-	}
-
-	*ppdest = dest;
-	return src_len;
+	return pull_ascii(dest, src, sizeof(pstring), -1, STR_TERMINATE);
 }
 
 size_t pull_ascii_fstring(char *dest, const void *src)
@@ -1245,7 +1034,7 @@
  * </dl>
  *
  * @param dest_len is the maximum length allowed in the
- * destination.
+ * destination. If dest_len is -1 then no maxiumum is used.
  **/
 
 size_t push_ucs2(const void *base_ptr, void *dest, const char *src, size_t dest_len, int flags)
@@ -1254,10 +1043,9 @@
 	size_t src_len;
 	size_t ret;
 
-	if (dest_len == (size_t)-1) {
-		/* No longer allow dest_len of -1. */
-		smb_panic("push_ucs2 - invalid dest_len of -1");
-	}
+	/* treat a pstring as "unlimited" length */
+	if (dest_len == (size_t)-1)
+		dest_len = sizeof(pstring);
 
 	if (flags & STR_TERMINATE)
 		src_len = (size_t)-1;
@@ -1277,12 +1065,7 @@
 
 	ret =  convert_string(CH_UNIX, CH_UTF16LE, src, src_len, dest, dest_len, True);
 	if (ret == (size_t)-1) {
-		if ((flags & STR_TERMINATE) &&
-				dest &&
-				dest_len) {
-			*(char *)dest = 0;
-		}
-		return len;
+		return 0;
 	}
 
 	len += ret;
@@ -1335,14 +1118,10 @@
 
 size_t push_ucs2_allocate(smb_ucs2_t **dest, const char *src)
 {
-	size_t dest_len, src_len = strlen(src)+1;
+	size_t src_len = strlen(src)+1;
 
 	*dest = NULL;
-	if (!convert_string_allocate(NULL, CH_UNIX, CH_UTF16LE, src, src_len,
-		(void **)dest, &dest_len, True))
-		return (size_t)-1;
-	else
-		return dest_len;
+	return convert_string_allocate(NULL, CH_UNIX, CH_UTF16LE, src, src_len, (void **)dest, True);
 }
 
 /**
@@ -1357,32 +1136,23 @@
 
 static size_t push_utf8(void *dest, const char *src, size_t dest_len, int flags)
 {
-	size_t src_len = 0;
-	size_t ret;
-	char *tmpbuf = NULL;
+	size_t src_len = strlen(src);
+	pstring tmpbuf;
 
-	if (dest_len == (size_t)-1) {
-		/* No longer allow dest_len of -1. */
-		smb_panic("push_utf8 - invalid dest_len of -1");
-	}
+	/* treat a pstring as "unlimited" length */
+	if (dest_len == (size_t)-1)
+		dest_len = sizeof(pstring);
 
 	if (flags & STR_UPPER) {
-		tmpbuf = strdup_upper(src);
-		if (!tmpbuf) {
-			return (size_t)-1;
-		}
+		pstrcpy(tmpbuf, src);
+		strupper_m(tmpbuf);
 		src = tmpbuf;
-		src_len = strlen(src);
 	}
 
-	src_len = strlen(src);
-	if (flags & STR_TERMINATE) {
+	if (flags & STR_TERMINATE)
 		src_len++;
-	}
 
-	ret = convert_string(CH_UNIX, CH_UTF8, src, src_len, dest, dest_len, True);
-	SAFE_FREE(tmpbuf);
-	return ret;
+	return convert_string(CH_UNIX, CH_UTF8, src, src_len, dest, dest_len, True);
 }
 
 size_t push_utf8_fstring(void *dest, const char *src)
@@ -1416,14 +1186,10 @@
 
 size_t push_utf8_allocate(char **dest, const char *src)
 {
-	size_t dest_len, src_len = strlen(src)+1;
+	size_t src_len = strlen(src)+1;
 
 	*dest = NULL;
-	if (!convert_string_allocate(NULL, CH_UNIX, CH_UTF8, src, src_len,
-		(void **)dest, &dest_len, True))
-		return (size_t)-1;
-	else
-		return dest_len;
+	return convert_string_allocate(NULL, CH_UNIX, CH_UTF8, src, src_len, (void **)dest, True);	
 }
 
 /**
@@ -1441,18 +1207,9 @@
 {
 	size_t ret;
 
-	if (dest_len == (size_t)-1) {
-		/* No longer allow dest_len of -1. */
-		smb_panic("pull_ucs2 - invalid dest_len of -1");
-	}
+	if (dest_len == (size_t)-1)
+		dest_len = sizeof(pstring);
 
-	if (!src_len) {
-		if (dest && dest_len > 0) {
-			dest[0] = '\0';
-		}
-		return 0;
-	}
-
 	if (ucs2_align(base_ptr, src, flags)) {
 		src = (const void *)((const char *)src + 1);
 		if (src_len != (size_t)-1)
@@ -1473,16 +1230,15 @@
 	/* ucs2 is always a multiple of 2 bytes */
 	if (src_len != (size_t)-1)
 		src_len &= ~1;
-
+	
 	ret = convert_string(CH_UTF16LE, CH_UNIX, src, src_len, dest, dest_len, True);
 	if (ret == (size_t)-1) {
-		ret = 0;
-		dest_len = 0;
+		return 0;
 	}
 
 	if (src_len == (size_t)-1)
 		src_len = ret*2;
-
+		
 	if (dest_len && ret) {
 		/* Did we already process the terminating zero ? */
 		if (dest[MIN(ret-1, dest_len-1)] != 0) {
@@ -1495,114 +1251,9 @@
 	return src_len;
 }
 
-/**
- Copy a string from a ucs2 source to a unix char* destination.
- Talloc version with a base pointer.
- Uses malloc if TALLOC_CTX is NULL (this is a bad interface and
- needs fixing. JRA).
- Flags can have:
-  STR_TERMINATE means the string in src is null terminated.
-  STR_NOALIGN   means don't try to align.
- if STR_TERMINATE is set then src_len is ignored if it is -1.
- src_len is the length of the source area in bytes
- Return the number of bytes occupied by the string in src.
- The resulting string in "dest" is always null terminated.
-**/
-
-size_t pull_ucs2_base_talloc(TALLOC_CTX *ctx,
-			const void *base_ptr,
-			char **ppdest,
-			const void *src,
-			size_t src_len,
-			int flags)
+size_t pull_ucs2_pstring(char *dest, const void *src)
 {
-	char *dest;
-	size_t dest_len;
-
-	*ppdest = NULL;
-
-#ifdef DEVELOPER
-	/* Ensure we never use the braindead "malloc" varient. */
-	if (ctx == NULL) {
-		smb_panic("NULL talloc CTX in pull_ucs2_base_talloc\n");
-	}
-#endif
-
-	if (!src_len) {
-		return 0;
-	}
-
-	if (ucs2_align(base_ptr, src, flags)) {
-		src = (const void *)((const char *)src + 1);
-		if (src_len != (size_t)-1)
-			src_len--;
-	}
-
-	if (flags & STR_TERMINATE) {
-		/* src_len -1 is the default for null terminated strings. */
-		if (src_len != (size_t)-1) {
-			size_t len = strnlen_w((const smb_ucs2_t *)src,
-						src_len/2);
-			if (len < src_len/2)
-				len++;
-			src_len = len*2;
-		} else {
-			/*
-			 * src_len == -1 - alloc interface won't take this
-			 * so we must calculate.
-			 */
-			src_len = (strlen_w((const smb_ucs2_t *)src)+1)*sizeof(smb_ucs2_t);
-		}
-		/* Ensure we don't use an insane length from the client. */
-		if (src_len >= 1024*1024) {
-			smb_panic("Bad src length in pull_ucs2_base_talloc\n");
-		}
-	}
-
-	/* ucs2 is always a multiple of 2 bytes */
-	if (src_len != (size_t)-1) {
-		src_len &= ~1;
-	}
-
-	dest_len = convert_string_talloc(ctx,
-					CH_UTF16LE,
-					CH_UNIX,
-					src,
-					src_len,
-					(void *)&dest,
-					True);
-	if (dest_len == (size_t)-1) {
-		dest_len = 0;
-	}
-
-	if (src_len == (size_t)-1)
-		src_len = dest_len*2;
-
-	if (dest_len) {
-		/* Did we already process the terminating zero ? */
-		if (dest[dest_len-1] != 0) {
-			size_t size = talloc_get_size(dest);
-			/* Have we got space to append the '\0' ? */
-			if (size <= dest_len) {
-				/* No, realloc. */
-				dest = TALLOC_REALLOC_ARRAY(ctx, dest, char,
-						dest_len+1);
-				if (!dest) {
-					/* talloc fail. */
-					dest_len = (size_t)-1;
-					return 0;
-				}
-			}
-			/* Yay - space ! */
-			dest[dest_len] = '\0';
-			dest_len++;
-		}
-	} else if (dest) {
-		dest[0] = 0;
-	}
-
-	*ppdest = dest;
-	return src_len;
+	return pull_ucs2(NULL, dest, src, sizeof(pstring), -1, STR_TERMINATE);
 }
 
 size_t pull_ucs2_fstring(char *dest, const void *src)
@@ -1635,13 +1286,9 @@
 
 size_t pull_ucs2_allocate(char **dest, const smb_ucs2_t *src)
 {
-	size_t dest_len, src_len = (strlen_w(src)+1) * sizeof(smb_ucs2_t);
+	size_t src_len = (strlen_w(src)+1) * sizeof(smb_ucs2_t);
 	*dest = NULL;
-	if (!convert_string_allocate(NULL, CH_UTF16LE, CH_UNIX, src, src_len,
-		(void **)dest, &dest_len, True))
-		return (size_t)-1;
-	else
-		return dest_len;
+	return convert_string_allocate(NULL, CH_UTF16LE, CH_UNIX, src, src_len, (void **)dest, True);
 }
 
 /**
@@ -1669,13 +1316,9 @@
 
 size_t pull_utf8_allocate(char **dest, const char *src)
 {
-	size_t dest_len, src_len = strlen(src)+1;
+	size_t src_len = strlen(src)+1;
 	*dest = NULL;
-	if (!convert_string_allocate(NULL, CH_UTF8, CH_UNIX, src, src_len,
-		(void **)dest, &dest_len, True))
-		return (size_t)-1;
-	else
-		return dest_len;
+	return convert_string_allocate(NULL, CH_UTF8, CH_UNIX, src, src_len, (void **)dest, True);
 }
  
 /**
@@ -1707,10 +1350,7 @@
  is -1 then no maxiumum is used.
 **/
 
-size_t push_string_fn(const char *function, unsigned int line,
-		      const void *base_ptr, uint16 flags2,
-		      void *dest, const char *src,
-		      size_t dest_len, int flags)
+size_t push_string_fn(const char *function, unsigned int line, const void *base_ptr, void *dest, const char *src, size_t dest_len, int flags)
 {
 #ifdef DEVELOPER
 	/* We really need to zero fill here, not clobber
@@ -1720,15 +1360,17 @@
 	 * JRA.
 	 */
 #if 0
-	clobber_region(function, line, dest, dest_len);
+	if (dest_len != (size_t)-1)
+		clobber_region(function, line, dest, dest_len);
 #else
-	memset(dest, '\0', dest_len);
+	if (dest_len != (size_t)-1)
+		memset(dest, '\0', dest_len);
 #endif
 #endif
 
 	if (!(flags & STR_ASCII) && \
 	    ((flags & STR_UNICODE || \
-	      (flags2 & FLAGS2_UNICODE_STRINGS)))) {
+	      (SVAL(base_ptr, smb_flg2) & FLAGS2_UNICODE_STRINGS)))) {
 		return push_ucs2(base_ptr, dest, src, dest_len, flags);
 	}
 	return push_ascii(dest, src, dest_len, flags);
@@ -1749,81 +1391,21 @@
  The resulting string in "dest" is always null terminated.
 **/
 
-size_t pull_string_fn(const char *function,
-			unsigned int line,
-			const void *base_ptr,
-			uint16 smb_flags2,
-			char *dest,
-			const void *src,
-			size_t dest_len,
-			size_t src_len,
-			int flags)
+size_t pull_string_fn(const char *function, unsigned int line, const void *base_ptr, char *dest, const void *src, size_t dest_len, size_t src_len, int flags)
 {
 #ifdef DEVELOPER
-	clobber_region(function, line, dest, dest_len);
+	if (dest_len != (size_t)-1)
+		clobber_region(function, line, dest, dest_len);
 #endif
 
-	if ((base_ptr == NULL) && ((flags & (STR_ASCII|STR_UNICODE)) == 0)) {
-		smb_panic("No base ptr to get flg2 and neither ASCII nor "
-			  "UNICODE defined");
-	}
-
 	if (!(flags & STR_ASCII) && \
 	    ((flags & STR_UNICODE || \
-	      (smb_flags2 & FLAGS2_UNICODE_STRINGS)))) {
+	      (SVAL(base_ptr, smb_flg2) & FLAGS2_UNICODE_STRINGS)))) {
 		return pull_ucs2(base_ptr, dest, src, dest_len, src_len, flags);
 	}
 	return pull_ascii(dest, src, dest_len, src_len, flags);
 }
 
-/**
- Copy a string from a unicode or ascii source (depending on
- the packet flags) to a char* destination.
- Variant that uses talloc.
- Flags can have:
-  STR_TERMINATE means the string in src is null terminated.
-  STR_UNICODE   means to force as unicode.
-  STR_ASCII     use ascii even with unicode packet.
-  STR_NOALIGN   means don't do alignment.
- if STR_TERMINATE is set then src_len is ignored is it is -1
- src_len is the length of the source area in bytes.
- Return the number of bytes occupied by the string in src.
- The resulting string in "dest" is always null terminated.
-**/
-
-size_t pull_string_talloc_fn(const char *function,
-			unsigned int line,
-			TALLOC_CTX *ctx,
-			const void *base_ptr,
-			uint16 smb_flags2,
-			char **ppdest,
-			const void *src,
-			size_t src_len,
-			int flags)
-{
-	if ((base_ptr == NULL) && ((flags & (STR_ASCII|STR_UNICODE)) == 0)) {
-		smb_panic("No base ptr to get flg2 and neither ASCII nor "
-			  "UNICODE defined");
-	}
-
-	if (!(flags & STR_ASCII) && \
-	    ((flags & STR_UNICODE || \
-	      (smb_flags2 & FLAGS2_UNICODE_STRINGS)))) {
-		return pull_ucs2_base_talloc(ctx,
-					base_ptr,
-					ppdest,
-					src,
-					src_len,
-					flags);
-	}
-	return pull_ascii_base_talloc(ctx,
-					ppdest,
-					src,
-					src_len,
-					flags);
-}
-
-
 size_t align_string(const void *base_ptr, const char *p, int flags)
 {
 	if (!(flags & STR_ASCII) && \

Modified: branches/samba/upstream/source/lib/clobber.c
===================================================================
--- branches/samba/upstream/source/lib/clobber.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/clobber.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Deleted: branches/samba/upstream/source/lib/conn_tdb.c
===================================================================
--- branches/samba/upstream/source/lib/conn_tdb.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/conn_tdb.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,126 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   Low-level connections.tdb access functions
-   Copyright (C) Volker Lendecke 2007
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-
-static struct db_context *connections_db_ctx(bool rw)
-{
-	static struct db_context *db_ctx;
-
-	if (db_ctx != NULL) {
-		return db_ctx;
-	}
-
-	if (rw) {
-		db_ctx = db_open(NULL, lock_path("connections.tdb"), 0,
-				 TDB_CLEAR_IF_FIRST|TDB_DEFAULT, 
-				 O_RDWR | O_CREAT, 0644);
-	}
-	else {
-		db_ctx = db_open(NULL, lock_path("connections.tdb"), 0,
-				 TDB_CLEAR_IF_FIRST|TDB_DEFAULT, O_RDONLY, 0);
-	}
-
-	return db_ctx;
-}
-
-struct db_record *connections_fetch_record(TALLOC_CTX *mem_ctx,
-					   TDB_DATA key)
-{
-	struct db_context *ctx = connections_db_ctx(True);
-
-	if (ctx == NULL) {
-		return NULL;
-	}
-
-	return ctx->fetch_locked(ctx, mem_ctx, key);
-}
-
-struct db_record *connections_fetch_entry(TALLOC_CTX *mem_ctx,
-					  connection_struct *conn,
-					  const char *name)
-{
-	struct connections_key ckey;
-	TDB_DATA key;
-
-	ZERO_STRUCT(ckey);
-	ckey.pid = procid_self();
-	ckey.cnum = conn ? conn->cnum : -1;
-	strlcpy(ckey.name, name, sizeof(ckey.name));
-
-	key.dsize = sizeof(ckey);
-	key.dptr = (uint8 *)&ckey;
-
-	return connections_fetch_record(mem_ctx, key);
-}
-
-struct conn_traverse_state {
-	int (*fn)(struct db_record *rec,
-		  const struct connections_key *key,
-		  const struct connections_data *data,
-		  void *private_data);
-	void *private_data;
-};
-
-static int conn_traverse_fn(struct db_record *rec, void *private_data)
-{
-	struct conn_traverse_state *state =
-		(struct conn_traverse_state *)private_data;
-
-	if ((rec->key.dsize != sizeof(struct connections_key))
-	    || (rec->value.dsize != sizeof(struct connections_data))) {
-		return 0;
-	}
-
-	return state->fn(rec, (const struct connections_key *)rec->key.dptr,
-			 (const struct connections_data *)rec->value.dptr,
-			 state->private_data);
-}
-
-int connections_traverse(int (*fn)(struct db_record *rec,
-				   void *private_data),
-			 void *private_data)
-{
-	struct db_context *ctx = connections_db_ctx(False);
-
-	if (ctx == NULL) {
-		return -1;
-	}
-
-	return ctx->traverse(ctx, fn, private_data);
-}
-
-int connections_forall(int (*fn)(struct db_record *rec,
-				 const struct connections_key *key,
-				 const struct connections_data *data,
-				 void *private_data),
-		       void *private_data)
-{
-	struct conn_traverse_state state;
-
-	state.fn = fn;
-	state.private_data = private_data;
-
-	return connections_traverse(conn_traverse_fn, (void *)&state);
-}
-
-bool connections_init(bool rw)
-{
-	return (connections_db_ctx(rw) != NULL);
-}

Deleted: branches/samba/upstream/source/lib/ctdbd_conn.c
===================================================================
--- branches/samba/upstream/source/lib/ctdbd_conn.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/ctdbd_conn.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,1253 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   Samba internal messaging functions
-   Copyright (C) 2007 by Volker Lendecke
-   Copyright (C) 2007 by Andrew Tridgell
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-
-#ifdef CLUSTER_SUPPORT
-
-#include "librpc/gen_ndr/messaging.h"
-#include "librpc/gen_ndr/ndr_messaging.h"
-
-/* paths to these include files come from --with-ctdb= in configure */
-#include "ctdb.h"
-#include "ctdb_private.h"
-
-struct ctdbd_connection {
-	struct messaging_context *msg_ctx;
-	uint32 reqid;
-	uint32 our_vnn;
-	uint64 rand_srvid;
-	struct packet_context *pkt;
-	struct fd_event *fde;
-	
-	void (*release_ip_handler)(const char *ip_addr, void *private_data);
-	void *release_ip_priv;
-};
-
-static NTSTATUS ctdbd_control(struct ctdbd_connection *conn,
-			      uint32_t vnn, uint32 opcode, 
-			      uint64_t srvid, TDB_DATA data, 
-			      TALLOC_CTX *mem_ctx, TDB_DATA *outdata,
-			      int *cstatus);
-
-/*
- * exit on fatal communications errors with the ctdbd daemon
- */
-static void cluster_fatal(const char *why)
-{
-	DEBUG(0,("cluster fatal event: %s - exiting immediately\n", why));
-	/* we don't use smb_panic() as we don't want to delay to write
-	   a core file. We need to release this process id immediately
-	   so that someone else can take over without getting sharing
-	   violations */
-	_exit(0);
-}
-
-/*
- *
- */
-static void ctdb_packet_dump(struct ctdb_req_header *hdr)
-{
-	if (DEBUGLEVEL < 10) {
-		return;
-	}
-	DEBUGADD(10, ("len=%d, magic=%x, vers=%d, gen=%d, op=%d, reqid=%d\n",
-		      (int)hdr->length, (int)hdr->ctdb_magic,
-		      (int)hdr->ctdb_version, (int)hdr->generation,
-		      (int)hdr->operation, (int)hdr->reqid));
-}
-
-/*
- * Register a srvid with ctdbd
- */
-static NTSTATUS register_with_ctdbd(struct ctdbd_connection *conn,
-				    uint64_t srvid)
-{
-
-	int cstatus;
-	return ctdbd_control(conn, CTDB_CURRENT_NODE,
-			     CTDB_CONTROL_REGISTER_SRVID, srvid,
-			     tdb_null, NULL, NULL, &cstatus);
-}
-
-/*
- * get our vnn from the cluster
- */
-static NTSTATUS get_cluster_vnn(struct ctdbd_connection *conn, uint32 *vnn)
-{
-	int32_t cstatus=-1;
-	NTSTATUS status;
-	status = ctdbd_control(conn,
-			       CTDB_CURRENT_NODE, CTDB_CONTROL_GET_PNN, 0,
-			       tdb_null, NULL, NULL, &cstatus);
-	if (!NT_STATUS_IS_OK(status)) {
-		cluster_fatal("ctdbd_control failed\n");
-	}
-	*vnn = (uint32_t)cstatus;
-	return status;
-}
-
-uint32 ctdbd_vnn(const struct ctdbd_connection *conn)
-{
-	return conn->our_vnn;
-}
-
-/*
- * Get us a ctdb connection
- */
-
-static NTSTATUS ctdbd_connect(TALLOC_CTX *mem_ctx,
-			      struct packet_context **presult)
-{
-	struct packet_context *result;
-	const char *sockname = lp_ctdbd_socket();
-	struct sockaddr_un addr;
-	int fd;
-
-	if (!sockname || !*sockname) {
-		sockname = CTDB_PATH;
-	}
-
-	fd = socket(AF_UNIX, SOCK_STREAM, 0);
-	if (fd == -1) {
-		DEBUG(3, ("Could not create socket: %s\n", strerror(errno)));
-		return map_nt_error_from_unix(errno);
-	}
-
-	ZERO_STRUCT(addr);
-	addr.sun_family = AF_UNIX;
-	strncpy(addr.sun_path, sockname, sizeof(addr.sun_path));
-
-	if (sys_connect(fd, (struct sockaddr *)&addr) == -1) {
-		DEBUG(0, ("connect(%s) failed: %s\n", sockname,
-			  strerror(errno)));
-		close(fd);
-		return map_nt_error_from_unix(errno);
-	}
-
-	if (!(result = packet_init(mem_ctx, fd))) {
-		close(fd);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	*presult = result;
-	return NT_STATUS_OK;
-}
-
-/*
- * Do we have a complete ctdb packet in the queue?
- */
-
-static bool ctdb_req_complete(const struct data_blob *data,
-			      size_t *length,
-			      void *private_data)
-{
-	uint32 msglen;
-
-	if (data->length < sizeof(msglen)) {
-		return False;
-	}
-
-	msglen = *((uint32 *)data->data);
-
-	DEBUG(10, ("msglen = %d\n", msglen));
-
-	if (msglen < sizeof(struct ctdb_req_header)) {
-		DEBUG(0, ("Got invalid msglen: %d, expected at least %d for "
-			  "the req_header\n", (int)msglen,
-			  (int)sizeof(struct ctdb_req_header)));
-		cluster_fatal("ctdbd protocol error\n");
-	}
-
-	if (data->length >= msglen) {
-		*length = msglen;
-		return True;
-	}
-
-	return False;
-}
-
-/*
- * State necessary to defer an incoming message while we are waiting for a
- * ctdb reply.
- */
-
-struct deferred_msg_state {
-	struct messaging_context *msg_ctx;
-	struct messaging_rec *rec;
-};
-
-/*
- * Timed event handler for the deferred message
- */
-
-static void deferred_message_dispatch(struct event_context *event_ctx,
-				      struct timed_event *te,
-				      const struct timeval *now,
-				      void *private_data)
-{
-	struct deferred_msg_state *state = talloc_get_type_abort(
-		private_data, struct deferred_msg_state);
-
-	messaging_dispatch_rec(state->msg_ctx, state->rec);
-	TALLOC_FREE(state);
-	TALLOC_FREE(te);
-}
-
-struct req_pull_state {
-	TALLOC_CTX *mem_ctx;
-	DATA_BLOB req;
-};
-
-/*
- * Pull a ctdb request out of the incoming packet queue
- */
-
-static NTSTATUS ctdb_req_pull(const struct data_blob *data,
-			      void *private_data)
-{
-	struct req_pull_state *state = (struct req_pull_state *)private_data;
-
-	state->req = data_blob_talloc(state->mem_ctx, data->data,
-				      data->length);
-	if (state->req.data == NULL) {
-		return NT_STATUS_NO_MEMORY;
-	}
-	return NT_STATUS_OK;
-}
-
-/*
- * Fetch a messaging_rec from an incoming ctdb style message
- */
-
-static struct messaging_rec *ctdb_pull_messaging_rec(TALLOC_CTX *mem_ctx,
-						     size_t overall_length,
-						     struct ctdb_req_message *msg)
-{
-	struct messaging_rec *result;
-	DATA_BLOB blob;
-	enum ndr_err_code ndr_err;
-
-	if ((overall_length < offsetof(struct ctdb_req_message, data))
-	    || (overall_length
-		< offsetof(struct ctdb_req_message, data) + msg->datalen)) {
-
-		cluster_fatal("got invalid msg length");
-	}
-
-	if (!(result = TALLOC_P(mem_ctx, struct messaging_rec))) {
-		DEBUG(0, ("talloc failed\n"));
-		return NULL;
-	}
-
-	blob = data_blob_const(msg->data, msg->datalen);
-
-	ndr_err = ndr_pull_struct_blob(
-		&blob, result, result,
-		(ndr_pull_flags_fn_t)ndr_pull_messaging_rec);
-
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		DEBUG(0, ("ndr_pull_struct_blob failed: %s\n",
-			  ndr_errstr(ndr_err)));
-		TALLOC_FREE(result);
-		return NULL;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		DEBUG(10, ("ctdb_pull_messaging_rec:\n"));
-		NDR_PRINT_DEBUG(messaging_rec, result);
-	}
-
-	return result;
-}
-
-/*
- * Read a full ctdbd request. If we have a messaging context, defer incoming
- * messages that might come in between.
- */
-
-static NTSTATUS ctdb_read_req(struct ctdbd_connection *conn, uint32 reqid,
-			      TALLOC_CTX *mem_ctx, void *result)
-{
-	struct ctdb_req_header *hdr;
-	struct req_pull_state state;
-	NTSTATUS status;
-
- again:
-
-	status = packet_fd_read_sync(conn->pkt);
-
-	if (NT_STATUS_EQUAL(status, NT_STATUS_NETWORK_BUSY)) {
-		/* EAGAIN */
-		goto again;
-	} else if (NT_STATUS_EQUAL(status, NT_STATUS_RETRY)) {
-		/* EAGAIN */
-		goto again;
-	}
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0, ("packet_fd_read failed: %s\n", nt_errstr(status)));
-		cluster_fatal("ctdbd died\n");
-	}
-
- next_pkt:
-
-	ZERO_STRUCT(state);
-	state.mem_ctx = mem_ctx;
-
-	if (!packet_handler(conn->pkt, ctdb_req_complete, ctdb_req_pull,
-			    &state, &status)) {
-		/*
-		 * Not enough data
-		 */
-		DEBUG(10, ("not enough data from ctdb socket, retrying\n"));
-		goto again;
-	}
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0, ("Could not read packet: %s\n", nt_errstr(status)));
-		cluster_fatal("ctdbd died\n");
-	}
-
-	hdr = (struct ctdb_req_header *)state.req.data;
-
-	DEBUG(10, ("Received ctdb packet\n"));
-	ctdb_packet_dump(hdr);
-
-	if (hdr->operation == CTDB_REQ_MESSAGE) {
-		struct timed_event *evt;
-		struct deferred_msg_state *msg_state;
-		struct ctdb_req_message *msg = (struct ctdb_req_message *)hdr;
-
-		if (conn->msg_ctx == NULL) {
-			DEBUG(1, ("Got a message without having a msg ctx, "
-				  "dropping msg %llu\n",
-				  (long long unsigned)msg->srvid));
-			goto next_pkt;
-		}
-		
-		if ((conn->release_ip_handler != NULL)
-		    && (msg->srvid == CTDB_SRVID_RELEASE_IP)) {
-			/* must be dispatched immediately */
-			DEBUG(10, ("received CTDB_SRVID_RELEASE_IP\n"));
-			conn->release_ip_handler((const char *)msg->data,
-						 conn->release_ip_priv);
-			TALLOC_FREE(hdr);
-			goto next_pkt;
-		}
-
-		if (!(msg_state = TALLOC_P(NULL, struct deferred_msg_state))) {
-			DEBUG(0, ("talloc failed\n"));
-			TALLOC_FREE(hdr);
-			goto next_pkt;
-		}
-
-		if (!(msg_state->rec = ctdb_pull_messaging_rec(
-			      msg_state, state.req.length, msg))) {
-			DEBUG(0, ("ctdbd_pull_messaging_rec failed\n"));
-			TALLOC_FREE(msg_state);
-			TALLOC_FREE(hdr);
-			goto next_pkt;
-		}
-
-		TALLOC_FREE(hdr);
-
-		msg_state->msg_ctx = conn->msg_ctx;
-		
-		/*
-		 * We're waiting for a call reply, but an async message has
-		 * crossed. Defer dispatching to the toplevel event loop.
-		 */
-		evt = event_add_timed(conn->msg_ctx->event_ctx,
-				      conn->msg_ctx->event_ctx,
-				      timeval_zero(),
-				      "deferred_message_dispatch",
-				      deferred_message_dispatch,
-				      msg_state);
-		if (evt == NULL) {
-			DEBUG(0, ("event_add_timed failed\n"));
-			TALLOC_FREE(msg_state);
-			TALLOC_FREE(hdr);
-			goto next_pkt;
-		}
-		
-		goto next_pkt;
-	}
-
-	if (hdr->reqid != reqid) {
-		/* we got the wrong reply */
-		DEBUG(0,("Discarding mismatched ctdb reqid %u should have "
-			 "been %u\n", hdr->reqid, reqid));
-		TALLOC_FREE(hdr);
-		goto again;
-	}
-
-	*((void **)result) = talloc_move(mem_ctx, &hdr);
-
-	return NT_STATUS_OK;
-}
-
-/*
- * Get us a ctdbd connection
- */
-
-NTSTATUS ctdbd_init_connection(TALLOC_CTX *mem_ctx,
-			       struct ctdbd_connection **pconn)
-{
-	struct ctdbd_connection *conn;
-	NTSTATUS status;
-
-	if (!(conn = TALLOC_ZERO_P(mem_ctx, struct ctdbd_connection))) {
-		DEBUG(0, ("talloc failed\n"));
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	status = ctdbd_connect(conn, &conn->pkt);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10, ("ctdbd_connect failed: %s\n", nt_errstr(status)));
-		goto fail;
-	}
-
-	status = get_cluster_vnn(conn, &conn->our_vnn);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10, ("get_cluster_vnn failed: %s\n", nt_errstr(status)));
-		goto fail;
-	}
-
-	generate_random_buffer((unsigned char *)&conn->rand_srvid,
-			       sizeof(conn->rand_srvid));
-
-	status = register_with_ctdbd(conn, conn->rand_srvid);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(5, ("Could not register random srvid: %s\n",
-			  nt_errstr(status)));
-		goto fail;
-	}
-
-	*pconn = conn;
-	return NT_STATUS_OK;
-
- fail:
-	TALLOC_FREE(conn);
-	return status;
-}
-
-/*
- * Get us a ctdbd connection and register us as a process
- */
-
-NTSTATUS ctdbd_messaging_connection(TALLOC_CTX *mem_ctx,
-				    struct ctdbd_connection **pconn)
-{
-        struct ctdbd_connection *conn;
-	NTSTATUS status;
-
-	status = ctdbd_init_connection(mem_ctx, &conn);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	status = register_with_ctdbd(conn, (uint64_t)sys_getpid());
-	if (!NT_STATUS_IS_OK(status)) {
-		goto fail;
-	}
-
-	status = register_with_ctdbd(conn, MSG_SRVID_SAMBA);
-	if (!NT_STATUS_IS_OK(status)) {
-		goto fail;
-	}
-
-	*pconn = conn;
-	return NT_STATUS_OK;
-
- fail:
-	TALLOC_FREE(conn);
-	return status;
-}
-
-/*
- * Packet handler to receive and handle a ctdb message
- */
-static NTSTATUS ctdb_handle_message(const struct data_blob *data,
-				    void *private_data)
-{
-	struct ctdbd_connection *conn = talloc_get_type_abort(
-		private_data, struct ctdbd_connection);
-	struct ctdb_req_message *msg;
-	struct messaging_rec *msg_rec;
-
-	msg = (struct ctdb_req_message *)data->data;
-
-	if (msg->hdr.operation != CTDB_REQ_MESSAGE) {
-		DEBUG(0, ("Received async msg of type %u, discarding\n",
-			  msg->hdr.operation));
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	if ((conn->release_ip_handler != NULL)
-	    && (msg->srvid == CTDB_SRVID_RELEASE_IP)) {
-		/* must be dispatched immediately */
-		DEBUG(10, ("received CTDB_SRVID_RELEASE_IP\n"));
-		conn->release_ip_handler((const char *)msg->data,
-					 conn->release_ip_priv);
-		return NT_STATUS_OK;
-	}
-
-	SMB_ASSERT(conn->msg_ctx != NULL);
-
-	if (msg->srvid == CTDB_SRVID_RECONFIGURE) {
-		DEBUG(0,("Got cluster reconfigure message\n"));
-		/*
-		 * when the cluster is reconfigured, we need to clean the brl
-		 * database
-		 */
-		messaging_send(conn->msg_ctx, procid_self(),
-			       MSG_SMB_BRL_VALIDATE, &data_blob_null);
-
-		/*
-		 * it's possible that we have just rejoined the cluster after
-		 * an outage. In that case our pending locks could have been
-		 * removed from the lockdb, so retry them once more
-		 */
-		message_send_all(conn->msg_ctx, MSG_SMB_UNLOCK, NULL, 0, NULL);
-
-		return NT_STATUS_OK;
-		
-	}
-
-	/* only messages to our pid or the broadcast are valid here */
-	if (msg->srvid != sys_getpid() && msg->srvid != MSG_SRVID_SAMBA) {
-		DEBUG(0,("Got unexpected message with srvid=%llu\n", 
-			 (unsigned long long)msg->srvid));
-		return NT_STATUS_OK;
-	}
-
-	if (!(msg_rec = ctdb_pull_messaging_rec(NULL, data->length, msg))) {
-		DEBUG(10, ("ctdb_pull_messaging_rec failed\n"));
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	messaging_dispatch_rec(conn->msg_ctx, msg_rec);
-
-	TALLOC_FREE(msg_rec);
-	return NT_STATUS_OK;
-}
-
-/*
- * The ctdbd socket is readable asynchronuously
- */
-
-static void ctdbd_socket_handler(struct event_context *event_ctx,
-				 struct fd_event *event,
-				 uint16 flags,
-				 void *private_data)
-{
-	struct ctdbd_connection *conn = talloc_get_type_abort(
-		private_data, struct ctdbd_connection);
-
-	NTSTATUS status;
-
-	status = packet_fd_read(conn->pkt);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0, ("packet_fd_read failed: %s\n", nt_errstr(status)));
-		cluster_fatal("ctdbd died\n");
-	}
-
-	while (packet_handler(conn->pkt, ctdb_req_complete,
-			      ctdb_handle_message, conn, &status)) {
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(10, ("could not handle incoming message: %s\n",
-				   nt_errstr(status)));
-		}
-	}
-}
-
-/*
- * Prepare a ctdbd connection to receive messages
- */
-
-NTSTATUS ctdbd_register_msg_ctx(struct ctdbd_connection *conn,
-				struct messaging_context *msg_ctx)
-{
-	SMB_ASSERT(conn->msg_ctx == NULL);
-	SMB_ASSERT(conn->fde == NULL);
-
-	if (!(conn->fde = event_add_fd(msg_ctx->event_ctx, conn,
-				       packet_get_fd(conn->pkt),
-				       EVENT_FD_READ,
-				       ctdbd_socket_handler,
-				       conn))) {
-		DEBUG(0, ("event_add_fd failed\n"));
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	conn->msg_ctx = msg_ctx;
-
-	return NT_STATUS_OK;
-}
-
-/*
- * Send a messaging message across a ctdbd
- */
-
-NTSTATUS ctdbd_messaging_send(struct ctdbd_connection *conn,
-			      uint32 dst_vnn, uint64 dst_srvid,
-			      struct messaging_rec *msg)
-{
-	struct ctdb_req_message r;
-	TALLOC_CTX *mem_ctx;
-	DATA_BLOB blob;
-	NTSTATUS status;
-	enum ndr_err_code ndr_err;
-
-	if (!(mem_ctx = talloc_init("ctdbd_messaging_send"))) {
-		DEBUG(0, ("talloc failed\n"));
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	ndr_err = ndr_push_struct_blob(
-		&blob, mem_ctx, msg,
-		(ndr_push_flags_fn_t)ndr_push_messaging_rec);
-
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		DEBUG(0, ("ndr_push_struct_blob failed: %s\n",
-			  ndr_errstr(ndr_err)));
-		status = ndr_map_error2ntstatus(ndr_err);
-		goto fail;
-	}
-
-	r.hdr.length = offsetof(struct ctdb_req_message, data) + blob.length;
-	r.hdr.ctdb_magic = CTDB_MAGIC;
-	r.hdr.ctdb_version = CTDB_VERSION;
-	r.hdr.generation = 1;
-	r.hdr.operation  = CTDB_REQ_MESSAGE;
-	r.hdr.destnode   = dst_vnn;
-	r.hdr.srcnode    = conn->our_vnn;
-	r.hdr.reqid      = 0;
-	r.srvid          = dst_srvid;
-	r.datalen        = blob.length;
-
-	DEBUG(10, ("ctdbd_messaging_send: Sending ctdb packet\n"));
-	ctdb_packet_dump(&r.hdr);
-
-	status = packet_send(
-		conn->pkt, 2,
-		data_blob_const(&r, offsetof(struct ctdb_req_message, data)),
-		blob);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0, ("packet_send failed: %s\n", nt_errstr(status)));
-		goto fail;
-	}
-
-	status = packet_flush(conn->pkt);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(3, ("write to ctdbd failed: %s\n", nt_errstr(status)));
-		cluster_fatal("cluster dispatch daemon msg write error\n");
-	}
-
-	status = NT_STATUS_OK;
- fail:
-	TALLOC_FREE(mem_ctx);
-	return status;
-}
-
-/*
- * send/recv a generic ctdb control message
- */
-static NTSTATUS ctdbd_control(struct ctdbd_connection *conn,
-			      uint32_t vnn, uint32 opcode, 
-			      uint64_t srvid, TDB_DATA data, 
-			      TALLOC_CTX *mem_ctx, TDB_DATA *outdata,
-			      int *cstatus)
-{
-	struct ctdb_req_control req;
-	struct ctdb_reply_control *reply = NULL;
-	struct ctdbd_connection *new_conn = NULL;
-	NTSTATUS status;
-
-	if (conn == NULL) {
-		status = ctdbd_init_connection(NULL, &new_conn);
-
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(10, ("Could not init temp connection: %s\n",
-				   nt_errstr(status)));
-			goto fail;
-		}
-
-		conn = new_conn;
-	}
-
-	ZERO_STRUCT(req);
-	req.hdr.length = offsetof(struct ctdb_req_control, data) + data.dsize;
-	req.hdr.ctdb_magic   = CTDB_MAGIC;
-	req.hdr.ctdb_version = CTDB_VERSION;
-	req.hdr.operation    = CTDB_REQ_CONTROL;
-	req.hdr.reqid        = ++conn->reqid;
-	req.hdr.destnode     = vnn;
-	req.opcode           = opcode;
-	req.srvid            = srvid;
-	req.datalen          = data.dsize;
-
-	DEBUG(10, ("ctdbd_control: Sending ctdb packet\n"));
-	ctdb_packet_dump(&req.hdr);
-
-	status = packet_send(
-		conn->pkt, 2,
-		data_blob_const(&req, offsetof(struct ctdb_req_control, data)),
-		data_blob_const(data.dptr, data.dsize));
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(3, ("packet_send failed: %s\n", nt_errstr(status)));
-		goto fail;
-	}
-
-	status = packet_flush(conn->pkt);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(3, ("write to ctdbd failed: %s\n", nt_errstr(status)));
-		cluster_fatal("cluster dispatch daemon control write error\n");
-	}
-
-	status = ctdb_read_req(conn, req.hdr.reqid, NULL, (void *)&reply);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10, ("ctdb_read_req failed: %s\n", nt_errstr(status)));
-		goto fail;
-	}
-
-	if (reply->hdr.operation != CTDB_REPLY_CONTROL) {
-		DEBUG(0, ("received invalid reply\n"));
-		goto fail;
-	}
-
-	if (outdata) {
-		if (!(outdata->dptr = (uint8 *)talloc_memdup(
-			      mem_ctx, reply->data, reply->datalen))) {
-			TALLOC_FREE(reply);
-			return NT_STATUS_NO_MEMORY;
-		}
-		outdata->dsize = reply->datalen;
-	}
-	if (cstatus) {
-		(*cstatus) = reply->status;
-	}
-
-	status = NT_STATUS_OK;
-
- fail:
-	TALLOC_FREE(new_conn);
-	TALLOC_FREE(reply);
-	return status;
-}
-
-/*
- * see if a remote process exists
- */
-bool ctdbd_process_exists(struct ctdbd_connection *conn, uint32 vnn, pid_t pid)
-{
-	NTSTATUS status;
-	TDB_DATA data;
-	int32_t cstatus;
-
-	data.dptr = (uint8_t*)&pid;
-	data.dsize = sizeof(pid);
-
-	status = ctdbd_control(conn, vnn, CTDB_CONTROL_PROCESS_EXISTS, 0,
-			       data, NULL, NULL, &cstatus);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0, (__location__ " ctdb_control for process_exists "
-			  "failed\n"));
-		return False;
-	}
-
-	return cstatus == 0;
-}
-
-/*
- * Get a db path
- */
-char *ctdbd_dbpath(struct ctdbd_connection *conn,
-		   TALLOC_CTX *mem_ctx, uint32_t db_id)
-{
-	NTSTATUS status;
-	TDB_DATA data;
-	int32_t cstatus;
-
-	data.dptr = (uint8_t*)&db_id;
-	data.dsize = sizeof(db_id);
-
-	status = ctdbd_control(conn, CTDB_CURRENT_NODE,
-			       CTDB_CONTROL_GETDBPATH, 0, data, 
-			       mem_ctx, &data, &cstatus);
-	if (!NT_STATUS_IS_OK(status) || cstatus != 0) {
-		DEBUG(0,(__location__ " ctdb_control for getdbpath failed\n"));
-		return NULL;
-	}
-
-	return (char *)data.dptr;
-}
-
-/*
- * attach to a ctdb database
- */
-NTSTATUS ctdbd_db_attach(struct ctdbd_connection *conn,
-			 const char *name, uint32_t *db_id, int tdb_flags)
-{
-	NTSTATUS status;
-	TDB_DATA data;
-	int32_t cstatus;
-	bool persistent = (tdb_flags & TDB_CLEAR_IF_FIRST) == 0;
-
-	data.dptr = (uint8_t*)name;
-	data.dsize = strlen(name)+1;
-
-	status = ctdbd_control(conn, CTDB_CURRENT_NODE,
-			       persistent
-			       ? CTDB_CONTROL_DB_ATTACH_PERSISTENT
-			       : CTDB_CONTROL_DB_ATTACH,
-			       0, data, NULL, &data, &cstatus);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0, (__location__ " ctdb_control for db_attach "
-			  "failed: %s\n", nt_errstr(status)));
-		return status;
-	}
-
-	if (cstatus != 0 || data.dsize != sizeof(uint32_t)) {
-		DEBUG(0,(__location__ " ctdb_control for db_attach failed\n"));
-		return NT_STATUS_INTERNAL_ERROR;
-	}
-
-	*db_id = *(uint32_t *)data.dptr;
-	talloc_free(data.dptr);
-
-	if (!(tdb_flags & TDB_SEQNUM)) {
-		return NT_STATUS_OK;
-	}
-
-	data.dptr = (uint8_t *)db_id;
-	data.dsize = sizeof(*db_id);
-
-	status = ctdbd_control(conn, CTDB_CURRENT_NODE,
-			       CTDB_CONTROL_ENABLE_SEQNUM, 0, data, 
-			       NULL, NULL, &cstatus);
-	if (!NT_STATUS_IS_OK(status) || cstatus != 0) {
-		DEBUG(0,(__location__ " ctdb_control for enable seqnum "
-			 "failed\n"));
-		return NT_STATUS_IS_OK(status) ? NT_STATUS_INTERNAL_ERROR :
-			status;
-	}
-
-	return NT_STATUS_OK;
-}
-
-/*
- * force the migration of a record to this node
- */
-NTSTATUS ctdbd_migrate(struct ctdbd_connection *conn, uint32 db_id,
-		       TDB_DATA key)
-{
-	struct ctdb_req_call req;
-	struct ctdb_reply_call *reply;
-	NTSTATUS status;
-
-	ZERO_STRUCT(req);
-	
-	req.hdr.length = offsetof(struct ctdb_req_call, data) + key.dsize;
-	req.hdr.ctdb_magic   = CTDB_MAGIC;
-	req.hdr.ctdb_version = CTDB_VERSION;
-	req.hdr.operation    = CTDB_REQ_CALL;
-	req.hdr.reqid        = ++conn->reqid;
-	req.flags            = CTDB_IMMEDIATE_MIGRATION;
-	req.callid           = CTDB_NULL_FUNC;
-	req.db_id            = db_id;
-	req.keylen           = key.dsize;
-
-	DEBUG(10, ("ctdbd_migrate: Sending ctdb packet\n"));
-	ctdb_packet_dump(&req.hdr);
-
-	status = packet_send(
-		conn->pkt, 2,
-		data_blob_const(&req, offsetof(struct ctdb_req_call, data)),
-		data_blob_const(key.dptr, key.dsize));
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(3, ("packet_send failed: %s\n", nt_errstr(status)));
-		return status;
-	}
-
-	status = packet_flush(conn->pkt);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(3, ("write to ctdbd failed: %s\n", nt_errstr(status)));
-		cluster_fatal("cluster dispatch daemon control write error\n");
-	}
-
-	status = ctdb_read_req(conn, req.hdr.reqid, NULL, (void *)&reply);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0, ("ctdb_read_req failed: %s\n", nt_errstr(status)));
-		goto fail;
-	}
-
-	if (reply->hdr.operation != CTDB_REPLY_CALL) {
-		DEBUG(0, ("received invalid reply\n"));
-		status = NT_STATUS_INTERNAL_ERROR;
-		goto fail;
-	}
-
-	status = NT_STATUS_OK;
- fail:
-
-	TALLOC_FREE(reply);
-	return status;
-}
-
-/*
- * remotely fetch a record without locking it or forcing a migration
- */
-NTSTATUS ctdbd_fetch(struct ctdbd_connection *conn, uint32 db_id,
-		     TDB_DATA key, TALLOC_CTX *mem_ctx, TDB_DATA *data)
-{
-	struct ctdb_req_call req;
-	struct ctdb_reply_call *reply;
-	NTSTATUS status;
-
-	ZERO_STRUCT(req);
-	
-	req.hdr.length = offsetof(struct ctdb_req_call, data) + key.dsize;
-	req.hdr.ctdb_magic   = CTDB_MAGIC;
-	req.hdr.ctdb_version = CTDB_VERSION;
-	req.hdr.operation    = CTDB_REQ_CALL;
-	req.hdr.reqid        = ++conn->reqid;
-	req.flags            = 0;
-	req.callid           = CTDB_FETCH_FUNC;
-	req.db_id            = db_id;
-	req.keylen           = key.dsize;
-
-	status = packet_send(
-		conn->pkt, 2,
-		data_blob_const(&req, offsetof(struct ctdb_req_call, data)),
-		data_blob_const(key.dptr, key.dsize));
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(3, ("packet_send failed: %s\n", nt_errstr(status)));
-		return status;
-	}
-
-	status = packet_flush(conn->pkt);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(3, ("write to ctdbd failed: %s\n", nt_errstr(status)));
-		cluster_fatal("cluster dispatch daemon control write error\n");
-	}
-
-	status = ctdb_read_req(conn, req.hdr.reqid, NULL, (void *)&reply);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0, ("ctdb_read_req failed: %s\n", nt_errstr(status)));
-		goto fail;
-	}
-
-	if (reply->hdr.operation != CTDB_REPLY_CALL) {
-		DEBUG(0, ("received invalid reply\n"));
-		status = NT_STATUS_INTERNAL_ERROR;
-		goto fail;
-	}
-
-	data->dsize = reply->datalen;
-	if (data->dsize == 0) {
-		data->dptr = NULL;
-		goto done;
-	}
-
-	data->dptr = (uint8 *)talloc_memdup(mem_ctx, &reply->data[0],
-					    reply->datalen);
-	if (data->dptr == NULL) {
-		DEBUG(0, ("talloc failed\n"));
-		status = NT_STATUS_NO_MEMORY;
-		goto fail;
-	}
-
- done:
-	status = NT_STATUS_OK;
- fail:
-	TALLOC_FREE(reply);
-	return status;
-}
-
-struct ctdbd_traverse_state {
-	void (*fn)(TDB_DATA key, TDB_DATA data, void *private_data);
-	void *private_data;
-};
-
-/*
- * Handle a traverse record coming in on the ctdbd connection
- */
-
-static NTSTATUS ctdb_traverse_handler(const struct data_blob *blob,
-				      void *private_data)
-{
-	struct ctdbd_traverse_state *state =
-		(struct ctdbd_traverse_state *)private_data;
-
-	struct ctdb_req_message *m;
-	struct ctdb_rec_data *d;
-	TDB_DATA key, data;
-
-	m = (struct ctdb_req_message *)blob->data;
-
-	if (blob->length < sizeof(*m) || m->hdr.length != blob->length) {
-		DEBUG(0, ("Got invalid message of length %d\n",
-			  (int)blob->length));
-		return NT_STATUS_UNEXPECTED_IO_ERROR;
-	}
-
-	d = (struct ctdb_rec_data *)&m->data[0];
-	if (m->datalen < sizeof(uint32_t) || m->datalen != d->length) {
-		DEBUG(0, ("Got invalid traverse data of length %d\n",
-			  (int)m->datalen));
-		return NT_STATUS_UNEXPECTED_IO_ERROR;
-	}
-
-	key.dsize = d->keylen;
-	key.dptr  = &d->data[0];
-	data.dsize = d->datalen;
-	data.dptr = &d->data[d->keylen];		
-
-	if (key.dsize == 0 && data.dsize == 0) {
-		/* end of traverse */
-		return NT_STATUS_END_OF_FILE;
-	}
-
-	if (data.dsize < sizeof(struct ctdb_ltdb_header)) {
-		DEBUG(0, ("Got invalid ltdb header length %d\n",
-			  (int)data.dsize));
-		return NT_STATUS_UNEXPECTED_IO_ERROR;
-	}
-	data.dsize -= sizeof(struct ctdb_ltdb_header);
-	data.dptr += sizeof(struct ctdb_ltdb_header);
-
-	if (state->fn) {
-		state->fn(key, data, state->private_data);
-	}
-
-	return NT_STATUS_OK;
-}
-
-/*
-  Traverse a ctdb database. This uses a kind-of hackish way to open a second
-  connection to ctdbd to avoid the hairy recursive and async problems with
-  everything in-line.
-*/
-
-NTSTATUS ctdbd_traverse(uint32 db_id,
-			void (*fn)(TDB_DATA key, TDB_DATA data,
-				   void *private_data),
-			void *private_data)
-{
-	struct ctdbd_connection *conn;
-	NTSTATUS status;
-
-	TDB_DATA data;
-	struct ctdb_traverse_start t;
-	int cstatus;
-	struct ctdbd_traverse_state state;
-
-	status = ctdbd_init_connection(NULL, &conn);
-
-	t.db_id = db_id;
-	t.srvid = conn->rand_srvid;
-	t.reqid = ++conn->reqid;
-
-	data.dptr = (uint8_t *)&t;
-	data.dsize = sizeof(t);
-
-	status = ctdbd_control(conn, CTDB_CURRENT_NODE,
-			       CTDB_CONTROL_TRAVERSE_START, conn->rand_srvid,
-			       data, NULL, NULL, &cstatus);
-
-	if (!NT_STATUS_IS_OK(status) || (cstatus != 0)) {
-
-		DEBUG(0,("ctdbd_control failed: %s, %d\n", nt_errstr(status),
-			 cstatus));
-
-		if (NT_STATUS_IS_OK(status)) {
-			/*
-			 * We need a mapping here
-			 */
-			status = NT_STATUS_UNSUCCESSFUL;
-		}
-		goto done;
-	}
-
-	state.fn = fn;
-	state.private_data = private_data;
-
-	while (True) {
-
-		status = NT_STATUS_OK;
-
-		if (packet_handler(conn->pkt, ctdb_req_complete,
-				   ctdb_traverse_handler, &state, &status)) {
-
-			if (NT_STATUS_EQUAL(status, NT_STATUS_END_OF_FILE)) {
-				status = NT_STATUS_OK;
-				break;
-			}
-
-			/*
-			 * There might be more in the queue
-			 */
-			continue;
-		}
-
-		if (!NT_STATUS_IS_OK(status)) {
-			break;
-		}
-
-		status = packet_fd_read_sync(conn->pkt);
-
-		if (NT_STATUS_EQUAL(status, NT_STATUS_RETRY)) {
-			/*
-			 * There might be more in the queue
-			 */
-			continue;
-		}
-
-		if (NT_STATUS_EQUAL(status, NT_STATUS_END_OF_FILE)) {
-			status = NT_STATUS_OK;
-		}
-
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(0, ("packet_fd_read_sync failed: %s\n", nt_errstr(status)));
-			cluster_fatal("ctdbd died\n");
-		}
-	}
-
- done:
-	TALLOC_FREE(conn);
-	return status;
-}
-
-/*
- * Register us as a server for a particular tcp connection
- */
-
-NTSTATUS ctdbd_register_ips(struct ctdbd_connection *conn,
-			    const struct sockaddr_in *server,
-			    const struct sockaddr_in *client,
-			    void (*release_ip_handler)(const char *ip_addr,
-						       void *private_data),
-			    void *private_data)
-{
-	struct ctdb_control_tcp p;
-	TDB_DATA data;
-	NTSTATUS status;
-
-	/*
-	 * Only one connection so far
-	 */
-	SMB_ASSERT(conn->release_ip_handler == NULL);
-
-	/*
-	 * We want to be told about IP releases
-	 */
-
-	status = register_with_ctdbd(conn, CTDB_SRVID_RELEASE_IP);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	p.dest = *server;
-	p.src = *client;
-
-	/*
-	 * inform ctdb of our tcp connection, so if IP takeover happens ctdb
-	 * can send an extra ack to trigger a reset for our client, so it
-	 * immediately reconnects
-	 */
-	data.dptr = (uint8_t *)&p;
-	data.dsize = sizeof(p);
-
-	return ctdbd_control(conn, CTDB_CURRENT_NODE, 
-			     CTDB_CONTROL_TCP_CLIENT, 
-			     CTDB_CTRL_FLAG_NOREPLY, data, NULL, NULL, NULL);
-}
-
-/*
- * We want to handle reconfigure events
- */
-NTSTATUS ctdbd_register_reconfigure(struct ctdbd_connection *conn)
-{
-	return register_with_ctdbd(conn, CTDB_SRVID_RECONFIGURE);
-}
-
-/*
-  persstent store. Used when we update a record in a persistent database
- */
-NTSTATUS ctdbd_persistent_store(struct ctdbd_connection *conn, uint32_t db_id, TDB_DATA key, TDB_DATA data)
-{
-       int cstatus=0;
-       struct ctdb_rec_data *rec;
-       TDB_DATA recdata;
-       size_t length;
-       NTSTATUS status;
-
-       length = offsetof(struct ctdb_rec_data, data) + key.dsize + data.dsize;
-
-       rec = (struct ctdb_rec_data *)talloc_size(conn, length);
-       NT_STATUS_HAVE_NO_MEMORY(rec);
-
-       rec->length = length;
-       rec->reqid  = db_id;
-       rec->keylen = key.dsize;
-       rec->datalen= data.dsize;
-       memcpy(&rec->data[0], key.dptr, key.dsize);
-       memcpy(&rec->data[key.dsize], data.dptr, data.dsize);
-
-       recdata.dptr  = (uint8_t *)rec;
-       recdata.dsize = length;
-
-       status = ctdbd_control(conn, CTDB_CURRENT_NODE, 
-                              CTDB_CONTROL_PERSISTENT_STORE, 
-                              0, recdata, NULL, NULL, &cstatus);
-       if (cstatus != 0) {
-               return NT_STATUS_INTERNAL_DB_CORRUPTION;
-       }
-       return status;
-}
-
-
-#else
-
-NTSTATUS ctdbd_init_connection(TALLOC_CTX *mem_ctx,
-			       struct ctdbd_connection **pconn)
-{
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-#endif

Modified: branches/samba/upstream/source/lib/data_blob.c
===================================================================
--- branches/samba/upstream/source/lib/data_blob.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/data_blob.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,13 +15,12 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
-const DATA_BLOB data_blob_null = { NULL, 0, NULL };
-
 /*******************************************************************
  Free() a data blob.
 *******************************************************************/
@@ -73,11 +72,11 @@
 	if (p) {
 		ret.data = (uint8 *)TALLOC_MEMDUP(mem_ctx, p, length);
 		if (ret.data == NULL)
-			smb_panic("data_blob_talloc: TALLOC_MEMDUP failed");
+			smb_panic("data_blob_talloc: TALLOC_MEMDUP failed.\n");
 	} else {
 		ret.data = (uint8 *)TALLOC(mem_ctx, length);
 		if (ret.data == NULL)
-			smb_panic("data_blob_talloc: TALLOC failed");
+			smb_panic("data_blob_talloc: talloc failed.\n");
 	}
 
 	ret.length = length;
@@ -128,7 +127,7 @@
 {
 	DATA_BLOB blob;
 	blob.data = CONST_DISCARD(uint8 *, str);
-	blob.length = strlen(str) + 1;
+	blob.length = strlen(str);
 	blob.free = NULL;
 	return blob;
 }
@@ -144,15 +143,3 @@
 	blob.free = NULL;
 	return blob;
 }
-
-/**
- construct a zero data blob, using supplied TALLOC_CTX.
- use this sparingly as it initialises data - better to initialise
- yourself if you want specific data in the blob
-**/
-DATA_BLOB data_blob_talloc_zero(TALLOC_CTX *mem_ctx, size_t length)
-{
-	DATA_BLOB blob = data_blob_talloc(mem_ctx, NULL, length);
-	data_blob_clear(&blob);
-	return blob;
-}

Deleted: branches/samba/upstream/source/lib/dbwrap.c
===================================================================
--- branches/samba/upstream/source/lib/dbwrap.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/dbwrap.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,208 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   Database interface wrapper
-   Copyright (C) Jim McDonough <jmcd at us.ibm.com> 2006
-
-   Major code contributions from Aleksey Fedoseev (fedoseev at ru.ibm.com)
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-#ifdef CLUSTER_SUPPORT
-#include "ctdb_private.h"
-#endif
-/*
- * Fall back using fetch_locked if no genuine fetch operation is provided
- */
-
-static int dbwrap_fallback_fetch(struct db_context *db, TALLOC_CTX *mem_ctx,
-				 TDB_DATA key, TDB_DATA *data)
-{
-	struct db_record *rec;
-
-	if (!(rec = db->fetch_locked(db, mem_ctx, key))) {
-		return -1;
-	}
-
-	data->dsize = rec->value.dsize;
-	data->dptr = talloc_move(mem_ctx, &rec->value.dptr);
-	TALLOC_FREE(rec);
-	return 0;
-}
-
-/**
- * If you need transaction support use db_open_trans()
- */
-struct db_context *db_open(TALLOC_CTX *mem_ctx,
-			   const char *name,
-			   int hash_size, int tdb_flags,
-			   int open_flags, mode_t mode)
-{
-	struct db_context *result = NULL;
-#ifdef CLUSTER_SUPPORT
-	const char *sockname = lp_ctdbd_socket();
-#endif
-
-#ifdef CLUSTER_SUPPORT
-	if(!sockname || !*sockname) {
-		sockname = CTDB_PATH;
-	}
-
-	if (lp_clustering() && socket_exist(sockname)) {
-		const char *partname;
-		/* ctdb only wants the file part of the name */
-		partname = strrchr(name, '/');
-		if (partname) {
-			partname++;
-		} else {
-			partname = name;
-		}
-		/* allow ctdb for individual databases to be disabled */
-		if (lp_parm_bool(-1, "ctdb", partname, True)) {
-			result = db_open_ctdb(mem_ctx, partname, hash_size,
-					      tdb_flags, open_flags, mode);
-			if (result == NULL) {
-				DEBUG(0,("failed to attach to ctdb %s\n",
-					 partname));
-				smb_panic("failed to attach to a ctdb "
-					  "database");
-			}
-		}
-	}
-
-#endif
-
-	if (result == NULL) {
-		result = db_open_tdb(mem_ctx, name, hash_size,
-				     tdb_flags, open_flags, mode);
-	}
-
-	if ((result != NULL) && (result->fetch == NULL)) {
-		result->fetch = dbwrap_fallback_fetch;
-	}
-
-	return result;
-}
-
-/**
- * If you use this you can only modify with a transaction
- */
-struct db_context *db_open_trans(TALLOC_CTX *mem_ctx,
-				 const char *name,
-				 int hash_size, int tdb_flags,
-				 int open_flags, mode_t mode)
-{
-	bool use_tdb2 = lp_parm_bool(-1, "dbwrap", "use_tdb2", false);
-#ifdef CLUSTER_SUPPORT
-	const char *sockname = lp_ctdbd_socket();
-#endif
-
-	if (tdb_flags & TDB_CLEAR_IF_FIRST) {
-		DEBUG(0,("db_open_trans: called with TDB_CLEAR_IF_FIRST: %s\n",
-			 name));
-		smb_panic("db_open_trans: called with TDB_CLEAR_IF_FIRST");
-	}
-
-#ifdef CLUSTER_SUPPORT
-	if(!sockname || !*sockname) {
-		sockname = CTDB_PATH;
-	}
-
-	if (lp_clustering() && socket_exist(sockname)) {
-		const char *partname;
-		/* ctdb only wants the file part of the name */
-		partname = strrchr(name, '/');
-		if (partname) {
-			partname++;
-		} else {
-			partname = name;
-		}
-		/* allow ctdb for individual databases to be disabled */
-		if (lp_parm_bool(-1, "ctdb", partname, true)) {
-			struct db_context *result = NULL;
-			result = db_open_ctdb(mem_ctx, partname, hash_size,
-					      tdb_flags, open_flags, mode);
-			if (result == NULL) {
-				DEBUG(0,("failed to attach to ctdb %s\n",
-					 partname));
-				smb_panic("failed to attach to a ctdb "
-					  "database");
-			}
-			return result;
-		}
-	}
-#endif
-
-	if (use_tdb2) {
-		const char *partname;
-		/* tdb2 only wants the file part of the name */
-		partname = strrchr(name, '/');
-		if (partname) {
-			partname++;
-		} else {
-			partname = name;
-		}
-		/* allow ctdb for individual databases to be disabled */
-		if (lp_parm_bool(-1, "tdb2", partname, true)) {
-			return db_open_tdb2(mem_ctx, partname, hash_size,
-					    tdb_flags, open_flags, mode);
-		}
-	}
-
-	return db_open_tdb(mem_ctx, name, hash_size,
-			   tdb_flags, open_flags, mode);
-}
-
-NTSTATUS dbwrap_delete_bystring(struct db_context *db, const char *key)
-{
-	struct db_record *rec;
-	NTSTATUS status;
-
-	rec = db->fetch_locked(db, talloc_tos(), string_term_tdb_data(key));
-	if (rec == NULL) {
-		return NT_STATUS_NO_MEMORY;
-	}
-	status = rec->delete_rec(rec);
-	TALLOC_FREE(rec);
-	return status;
-}
-
-NTSTATUS dbwrap_store_bystring(struct db_context *db, const char *key,
-			       TDB_DATA data, int flags)
-{
-	struct db_record *rec;
-	NTSTATUS status;
-
-	rec = db->fetch_locked(db, talloc_tos(), string_term_tdb_data(key));
-	if (rec == NULL) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	status = rec->store(rec, data, flags);
-	TALLOC_FREE(rec);
-	return status;
-}
-
-TDB_DATA dbwrap_fetch_bystring(struct db_context *db, TALLOC_CTX *mem_ctx,
-			       const char *key)
-{
-	TDB_DATA result;
-
-	if (db->fetch(db, mem_ctx, string_term_tdb_data(key), &result) == -1) {
-		return make_tdb_data(NULL, 0);
-	}
-
-	return result;
-}

Deleted: branches/samba/upstream/source/lib/dbwrap_ctdb.c
===================================================================
--- branches/samba/upstream/source/lib/dbwrap_ctdb.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/dbwrap_ctdb.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,514 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   Database interface wrapper around ctdbd
-   Copyright (C) Volker Lendecke 2007
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-#ifdef CLUSTER_SUPPORT
-#include "ctdb.h"
-#include "ctdb_private.h"
-#include "ctdbd_conn.h"
-
-struct db_ctdb_ctx {
-	struct tdb_wrap *wtdb;
-	uint32 db_id;
-};
-
-struct db_ctdb_rec {
-	struct db_ctdb_ctx *ctdb_ctx;
-	struct ctdb_ltdb_header header;
-};
-
-static NTSTATUS db_ctdb_store(struct db_record *rec, TDB_DATA data, int flag)
-{
-	struct db_ctdb_rec *crec = talloc_get_type_abort(
-		rec->private_data, struct db_ctdb_rec);
-	TDB_DATA cdata;
-	int ret;
-
-	cdata.dsize = sizeof(crec->header) + data.dsize;
-
-	if (!(cdata.dptr = SMB_MALLOC_ARRAY(uint8, cdata.dsize))) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	memcpy(cdata.dptr, &crec->header, sizeof(crec->header));
-	memcpy(cdata.dptr + sizeof(crec->header), data.dptr, data.dsize);
-
-	ret = tdb_store(crec->ctdb_ctx->wtdb->tdb, rec->key, cdata, TDB_REPLACE);
-
-	SAFE_FREE(cdata.dptr);
-
-	return (ret == 0) ? NT_STATUS_OK : NT_STATUS_INTERNAL_DB_CORRUPTION;
-}
-
-
-/* for persistent databases the store is a bit different. We have to
-   ask the ctdb daemon to push the record to all nodes after the
-   store */
-static NTSTATUS db_ctdb_store_persistent(struct db_record *rec, TDB_DATA data, int flag)
-{
-	struct db_ctdb_rec *crec = talloc_get_type_abort(
-		rec->private_data, struct db_ctdb_rec);
-	TDB_DATA cdata;
-	int ret;
-	NTSTATUS status;
-
-	cdata.dsize = sizeof(crec->header) + data.dsize;
-
-	if (!(cdata.dptr = SMB_MALLOC_ARRAY(uint8, cdata.dsize))) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	crec->header.rsn++;
-
-	memcpy(cdata.dptr, &crec->header, sizeof(crec->header));
-	memcpy(cdata.dptr + sizeof(crec->header), data.dptr, data.dsize);
-
-	ret = tdb_store(crec->ctdb_ctx->wtdb->tdb, rec->key, cdata, TDB_REPLACE);
-	status = (ret == 0) ? NT_STATUS_OK : NT_STATUS_INTERNAL_DB_CORRUPTION;
-	
-	/* now tell ctdbd to update this record on all other nodes */
-	if (NT_STATUS_IS_OK(status)) {
-		status = ctdbd_persistent_store(messaging_ctdbd_connection(), crec->ctdb_ctx->db_id, rec->key, cdata);
-	}
-
-	SAFE_FREE(cdata.dptr);
-
-	return status;
-}
-
-static NTSTATUS db_ctdb_delete(struct db_record *rec)
-{
-	struct db_ctdb_rec *crec = talloc_get_type_abort(
-		rec->private_data, struct db_ctdb_rec);
-	TDB_DATA data;
-	int ret;
-
-	/*
-	 * We have to store the header with empty data. TODO: Fix the
-	 * tdb-level cleanup
-	 */
-
-	data.dptr = (uint8 *)&crec->header;
-	data.dsize = sizeof(crec->header);
-
-	ret = tdb_store(crec->ctdb_ctx->wtdb->tdb, rec->key, data, TDB_REPLACE);
-
-	return (ret == 0) ? NT_STATUS_OK : NT_STATUS_INTERNAL_DB_CORRUPTION;
-}
-
-static int db_ctdb_record_destr(struct db_record* data)
-{
-	struct db_ctdb_rec *crec = talloc_get_type_abort(
-		data->private_data, struct db_ctdb_rec);
-
-	DEBUG(10, (DEBUGLEVEL > 10
-		   ? "Unlocking db %u key %s\n"
-		   : "Unlocking db %u key %.20s\n",
-		   (int)crec->ctdb_ctx->db_id,
-		   hex_encode(data, (unsigned char *)data->key.dptr,
-			      data->key.dsize)));
-
-	if (tdb_chainunlock(crec->ctdb_ctx->wtdb->tdb, data->key) != 0) {
-		DEBUG(0, ("tdb_chainunlock failed\n"));
-		return -1;
-	}
-
-	return 0;
-}
-
-static struct db_record *db_ctdb_fetch_locked(struct db_context *db,
-					      TALLOC_CTX *mem_ctx,
-					      TDB_DATA key)
-{
-	struct db_ctdb_ctx *ctx = talloc_get_type_abort(db->private_data,
-							struct db_ctdb_ctx);
-	struct db_record *result;
-	struct db_ctdb_rec *crec;
-	NTSTATUS status;
-	TDB_DATA ctdb_data;
-	int migrate_attempts = 0;
-
-	if (!(result = talloc(mem_ctx, struct db_record))) {
-		DEBUG(0, ("talloc failed\n"));
-		return NULL;
-	}
-
-	if (!(crec = TALLOC_ZERO_P(result, struct db_ctdb_rec))) {
-		DEBUG(0, ("talloc failed\n"));
-		TALLOC_FREE(result);
-		return NULL;
-	}
-
-	result->private_data = (void *)crec;
-	crec->ctdb_ctx = ctx;
-
-	result->key.dsize = key.dsize;
-	result->key.dptr = (uint8 *)talloc_memdup(result, key.dptr, key.dsize);
-	if (result->key.dptr == NULL) {
-		DEBUG(0, ("talloc failed\n"));
-		TALLOC_FREE(result);
-		return NULL;
-	}
-
-	/*
-	 * Do a blocking lock on the record
-	 */
-again:
-
-	if (DEBUGLEVEL >= 10) {
-		char *keystr = hex_encode(result, key.dptr, key.dsize);
-		DEBUG(10, (DEBUGLEVEL > 10
-			   ? "Locking db %u key %s\n"
-			   : "Locking db %u key %.20s\n",
-			   (int)crec->ctdb_ctx->db_id, keystr));
-		TALLOC_FREE(keystr);
-	}
-	
-	if (tdb_chainlock(ctx->wtdb->tdb, key) != 0) {
-		DEBUG(3, ("tdb_chainlock failed\n"));
-		TALLOC_FREE(result);
-		return NULL;
-	}
-
-	if (db->persistent) {
-		result->store = db_ctdb_store_persistent;
-	} else {
-		result->store = db_ctdb_store;
-	}
-	result->delete_rec = db_ctdb_delete;
-	talloc_set_destructor(result, db_ctdb_record_destr);
-
-	ctdb_data = tdb_fetch(ctx->wtdb->tdb, key);
-
-	/*
-	 * See if we have a valid record and we are the dmaster. If so, we can
-	 * take the shortcut and just return it.
-	 */
-
-	if ((ctdb_data.dptr == NULL) ||
-	    (ctdb_data.dsize < sizeof(struct ctdb_ltdb_header)) ||
-	    ((struct ctdb_ltdb_header *)ctdb_data.dptr)->dmaster != get_my_vnn()
-#if 0
-	    || (random() % 2 != 0)
-#endif
-) {
-		SAFE_FREE(ctdb_data.dptr);
-		tdb_chainunlock(ctx->wtdb->tdb, key);
-		talloc_set_destructor(result, NULL);
-
-		migrate_attempts += 1;
-
-		DEBUG(10, ("ctdb_data.dptr = %p, dmaster = %u (%u)\n",
-			   ctdb_data.dptr, ctdb_data.dptr ?
-			   ((struct ctdb_ltdb_header *)ctdb_data.dptr)->dmaster : -1,
-			   get_my_vnn()));
-
-		status = ctdbd_migrate(messaging_ctdbd_connection(),ctx->db_id, key);
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(5, ("ctdb_migrate failed: %s\n",
-				  nt_errstr(status)));
-			TALLOC_FREE(result);
-			return NULL;
-		}
-		/* now its migrated, try again */
-		goto again;
-	}
-
-	if (migrate_attempts > 10) {
-		DEBUG(0, ("db_ctdb_fetch_locked needed %d attempts\n",
-			  migrate_attempts));
-	}
-
-	memcpy(&crec->header, ctdb_data.dptr, sizeof(crec->header));
-
-	result->value.dsize = ctdb_data.dsize - sizeof(crec->header);
-	result->value.dptr = NULL;
-
-	if ((result->value.dsize != 0)
-	    && !(result->value.dptr = (uint8 *)talloc_memdup(
-			 result, ctdb_data.dptr + sizeof(crec->header),
-			 result->value.dsize))) {
-		DEBUG(0, ("talloc failed\n"));
-		TALLOC_FREE(result);
-	}
-
-	SAFE_FREE(ctdb_data.dptr);
-
-	return result;
-}
-
-/*
-  fetch (unlocked, no migration) operation on ctdb
- */
-static int db_ctdb_fetch(struct db_context *db, TALLOC_CTX *mem_ctx,
-			 TDB_DATA key, TDB_DATA *data)
-{
-	struct db_ctdb_ctx *ctx = talloc_get_type_abort(db->private_data,
-							struct db_ctdb_ctx);
-	NTSTATUS status;
-	TDB_DATA ctdb_data;
-
-	/* try a direct fetch */
-	ctdb_data = tdb_fetch(ctx->wtdb->tdb, key);
-
-	/*
-	 * See if we have a valid record and we are the dmaster. If so, we can
-	 * take the shortcut and just return it.
-	 * we bypass the dmaster check for persistent databases
-	 */
-	if ((ctdb_data.dptr != NULL) &&
-	    (ctdb_data.dsize >= sizeof(struct ctdb_ltdb_header)) &&
-	    (db->persistent ||
-	     ((struct ctdb_ltdb_header *)ctdb_data.dptr)->dmaster == get_my_vnn())) {
-		/* we are the dmaster - avoid the ctdb protocol op */
-
-		data->dsize = ctdb_data.dsize - sizeof(struct ctdb_ltdb_header);
-		if (data->dsize == 0) {
-			SAFE_FREE(ctdb_data.dptr);
-			data->dptr = NULL;
-			return 0;
-		}
-
-		data->dptr = (uint8 *)talloc_memdup(
-			mem_ctx, ctdb_data.dptr+sizeof(struct ctdb_ltdb_header),
-			data->dsize);
-
-		SAFE_FREE(ctdb_data.dptr);
-
-		if (data->dptr == NULL) {
-			return -1;
-		}
-		return 0;
-	}
-
-	SAFE_FREE(ctdb_data.dptr);
-
-	/* we weren't able to get it locally - ask ctdb to fetch it for us */
-	status = ctdbd_fetch(messaging_ctdbd_connection(),ctx->db_id, key, mem_ctx, data);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(5, ("ctdbd_fetch failed: %s\n", nt_errstr(status)));
-		return -1;
-	}
-
-	return 0;
-}
-
-struct traverse_state {
-	struct db_context *db;
-	int (*fn)(struct db_record *rec, void *private_data);
-	void *private_data;
-};
-
-static void traverse_callback(TDB_DATA key, TDB_DATA data, void *private_data)
-{
-	struct traverse_state *state = (struct traverse_state *)private_data;
-	struct db_record *rec;
-	TALLOC_CTX *tmp_ctx = talloc_new(state->db);
-	/* we have to give them a locked record to prevent races */
-	rec = db_ctdb_fetch_locked(state->db, tmp_ctx, key);
-	if (rec && rec->value.dsize > 0) {
-		state->fn(rec, state->private_data);
-	}
-	talloc_free(tmp_ctx);
-}
-
-static int traverse_persistent_callback(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf,
-					void *private_data)
-{
-	struct traverse_state *state = (struct traverse_state *)private_data;
-	struct db_record *rec;
-	TALLOC_CTX *tmp_ctx = talloc_new(state->db);
-	int ret = 0;
-	/* we have to give them a locked record to prevent races */
-	rec = db_ctdb_fetch_locked(state->db, tmp_ctx, kbuf);
-	if (rec && rec->value.dsize > 0) {
-		ret = state->fn(rec, state->private_data);
-	}
-	talloc_free(tmp_ctx);
-	return ret;
-}
-
-static int db_ctdb_traverse(struct db_context *db,
-			    int (*fn)(struct db_record *rec,
-				      void *private_data),
-			    void *private_data)
-{
-        struct db_ctdb_ctx *ctx = talloc_get_type_abort(db->private_data,
-                                                        struct db_ctdb_ctx);
-	struct traverse_state state;
-
-	state.db = db;
-	state.fn = fn;
-	state.private_data = private_data;
-
-	if (db->persistent) {
-		/* for persistent databases we don't need to do a ctdb traverse,
-		   we can do a faster local traverse */
-		return tdb_traverse(ctx->wtdb->tdb, traverse_persistent_callback, &state);
-	}
-
-
-	ctdbd_traverse(ctx->db_id, traverse_callback, &state);
-	return 0;
-}
-
-static NTSTATUS db_ctdb_store_deny(struct db_record *rec, TDB_DATA data, int flag)
-{
-	return NT_STATUS_MEDIA_WRITE_PROTECTED;
-}
-
-static NTSTATUS db_ctdb_delete_deny(struct db_record *rec)
-{
-	return NT_STATUS_MEDIA_WRITE_PROTECTED;
-}
-
-static void traverse_read_callback(TDB_DATA key, TDB_DATA data, void *private_data)
-{
-	struct traverse_state *state = (struct traverse_state *)private_data;
-	struct db_record rec;
-	rec.key = key;
-	rec.value = data;
-	rec.store = db_ctdb_store_deny;
-	rec.delete_rec = db_ctdb_delete_deny;
-	rec.private_data = state->db;
-	state->fn(&rec, state->private_data);
-}
-
-static int traverse_persistent_callback_read(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf,
-					void *private_data)
-{
-	struct traverse_state *state = (struct traverse_state *)private_data;
-	struct db_record rec;
-	rec.key = kbuf;
-	rec.value = dbuf;
-	rec.store = db_ctdb_store_deny;
-	rec.delete_rec = db_ctdb_delete_deny;
-	rec.private_data = state->db;
-
-	if (rec.value.dsize <= sizeof(struct ctdb_ltdb_header)) {
-		/* a deleted record */
-		return 0;
-	}
-	rec.value.dsize -= sizeof(struct ctdb_ltdb_header);
-	rec.value.dptr += sizeof(struct ctdb_ltdb_header);
-
-	return state->fn(&rec, state->private_data);
-}
-
-static int db_ctdb_traverse_read(struct db_context *db,
-				 int (*fn)(struct db_record *rec,
-					   void *private_data),
-				 void *private_data)
-{
-        struct db_ctdb_ctx *ctx = talloc_get_type_abort(db->private_data,
-                                                        struct db_ctdb_ctx);
-	struct traverse_state state;
-
-	state.db = db;
-	state.fn = fn;
-	state.private_data = private_data;
-
-	if (db->persistent) {
-		/* for persistent databases we don't need to do a ctdb traverse,
-		   we can do a faster local traverse */
-		return tdb_traverse_read(ctx->wtdb->tdb, traverse_persistent_callback_read, &state);
-	}
-
-	ctdbd_traverse(ctx->db_id, traverse_read_callback, &state);
-	return 0;
-}
-
-static int db_ctdb_get_seqnum(struct db_context *db)
-{
-        struct db_ctdb_ctx *ctx = talloc_get_type_abort(db->private_data,
-                                                        struct db_ctdb_ctx);
-	return tdb_get_seqnum(ctx->wtdb->tdb);
-}
-
-static int db_ctdb_trans_dummy(struct db_context *db)
-{
-	/*
-	 * Not implemented yet, just return ok
-	 */
-	return 0;
-}
-
-struct db_context *db_open_ctdb(TALLOC_CTX *mem_ctx,
-				const char *name,
-				int hash_size, int tdb_flags,
-				int open_flags, mode_t mode)
-{
-	struct db_context *result;
-	struct db_ctdb_ctx *db_ctdb;
-	char *db_path;
-
-	if (!lp_clustering()) {
-		DEBUG(10, ("Clustering disabled -- no ctdb\n"));
-		return NULL;
-	}
-
-	if (!(result = TALLOC_ZERO_P(mem_ctx, struct db_context))) {
-		DEBUG(0, ("talloc failed\n"));
-		TALLOC_FREE(result);
-		return NULL;
-	}
-
-	if (!(db_ctdb = TALLOC_P(result, struct db_ctdb_ctx))) {
-		DEBUG(0, ("talloc failed\n"));
-		TALLOC_FREE(result);
-		return NULL;
-	}
-
-	if (!NT_STATUS_IS_OK(ctdbd_db_attach(messaging_ctdbd_connection(),name, &db_ctdb->db_id, tdb_flags))) {
-		DEBUG(0, ("ctdbd_db_attach failed for %s\n", name));
-		TALLOC_FREE(result);
-		return NULL;
-	}
-
-	db_path = ctdbd_dbpath(messaging_ctdbd_connection(), db_ctdb, db_ctdb->db_id);
-
-	result->persistent = ((tdb_flags & TDB_CLEAR_IF_FIRST) == 0);
-
-	/* only pass through specific flags */
-	tdb_flags &= TDB_SEQNUM;
-
-	db_ctdb->wtdb = tdb_wrap_open(db_ctdb, db_path, hash_size, tdb_flags, O_RDWR, 0);
-	if (db_ctdb->wtdb == NULL) {
-		DEBUG(0, ("Could not open tdb %s: %s\n", db_path, strerror(errno)));
-		TALLOC_FREE(result);
-		return NULL;
-	}
-	talloc_free(db_path);
-
-	result->private_data = (void *)db_ctdb;
-	result->fetch_locked = db_ctdb_fetch_locked;
-	result->fetch = db_ctdb_fetch;
-	result->traverse = db_ctdb_traverse;
-	result->traverse_read = db_ctdb_traverse_read;
-	result->get_seqnum = db_ctdb_get_seqnum;
-	result->transaction_start = db_ctdb_trans_dummy;
-	result->transaction_commit = db_ctdb_trans_dummy;
-	result->transaction_cancel = db_ctdb_trans_dummy;
-
-	DEBUG(3,("db_open_ctdb: opened database '%s' with dbid 0x%x\n",
-		 name, db_ctdb->db_id));
-
-	return result;
-}
-#endif

Deleted: branches/samba/upstream/source/lib/dbwrap_file.c
===================================================================
--- branches/samba/upstream/source/lib/dbwrap_file.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/dbwrap_file.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,410 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   Database interface using a file per record
-   Copyright (C) Volker Lendecke 2005
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-
-struct db_file_ctx {
-	const char *dirname;
-
-	/* We only support one locked record at a time -- everything else
-	 * would lead to a potential deadlock anyway! */
-	struct db_record *locked_record;
-};
-
-struct db_locked_file {
-	int fd;
-	uint8 hash;
-	const char *name;
-	const char *path;
-	struct db_file_ctx *parent;
-};
-
-/* Copy from statcache.c... */
-
-static uint32 fsh(const uint8 *p, int len)
-{
-        uint32 n = 0;
-	int i;
-        for (i=0; i<len; i++) {
-                n = ((n << 5) + n) ^ (uint32)(p[i]);
-        }
-        return n;
-}
-
-static int db_locked_file_destr(struct db_locked_file *data)
-{
-	if (data->parent != NULL) {
-		data->parent->locked_record = NULL;
-	}
-
-	if (close(data->fd) != 0) {
-		DEBUG(3, ("close failed: %s\n", strerror(errno)));
-		return -1;
-	}
-
-	return 0;
-}
-
-static NTSTATUS db_file_store(struct db_record *rec, TDB_DATA data, int flag);
-static NTSTATUS db_file_delete(struct db_record *rec);
-
-static struct db_record *db_file_fetch_locked(struct db_context *db,
-					      TALLOC_CTX *mem_ctx,
-					      TDB_DATA key)
-{
-	struct db_file_ctx *ctx = talloc_get_type_abort(db->private_data,
-							struct db_file_ctx);
-	struct db_record *result;
-	struct db_locked_file *file;
-	struct flock fl;
-	SMB_STRUCT_STAT statbuf;
-	ssize_t nread;
-	int ret;
-
-	SMB_ASSERT(ctx->locked_record == NULL);
-
- again:
-	if (!(result = TALLOC_P(mem_ctx, struct db_record))) {
-		DEBUG(0, ("talloc failed\n"));
-		return NULL;
-	}
-
-	if (!(file = TALLOC_P(result, struct db_locked_file))) {
-		DEBUG(0, ("talloc failed\n"));
-		TALLOC_FREE(result);
-		return NULL;
-	}
-
-	result->private_data = file;
-	result->store = db_file_store;
-	result->delete_rec = db_file_delete;
-
-	result->key.dsize = key.dsize;
-	result->key.dptr = (uint8 *)talloc_memdup(result, key.dptr, key.dsize);
-	if (result->key.dptr == NULL) {
-		DEBUG(0, ("talloc failed\n"));
-		TALLOC_FREE(result);
-		return NULL;
-	}
-
-	/* Cut to 8 bits */
-	file->hash = fsh(key.dptr, key.dsize);
-	file->name = hex_encode(file, (unsigned char *)key.dptr, key.dsize);
-	if (file->name == NULL) {
-		DEBUG(0, ("hex_encode failed\n"));
-		TALLOC_FREE(result);
-		return NULL;
-	}
-
-	file->path = talloc_asprintf(file, "%s/%2.2X/%s", ctx->dirname,
-				     file->hash, file->name);
-	if (file->path == NULL) {
-		DEBUG(0, ("talloc_asprintf failed\n"));
-		TALLOC_FREE(result);
-		return NULL;
-	}
-
-	become_root();
-	file->fd = open(file->path, O_RDWR|O_CREAT, 0644);
-	unbecome_root();
-
-	if (file->fd < 0) {
-		DEBUG(3, ("Could not open/create %s: %s\n",
-			  file->path, strerror(errno)));
-		TALLOC_FREE(result);
-		return NULL;
-	}
-
-	talloc_set_destructor(file, db_locked_file_destr);
-
-	fl.l_type = F_WRLCK;
-	fl.l_whence = SEEK_SET;
-	fl.l_start = 0;
-	fl.l_len = 1;
-	fl.l_pid = 0;
-
-	do {
-		ret = fcntl(file->fd, F_SETLKW, &fl);
-	} while ((ret == -1) && (errno == EINTR));
-
-	if (ret == -1) {
-		DEBUG(3, ("Could not get lock on %s: %s\n",
-			  file->path, strerror(errno)));
-		TALLOC_FREE(result);
-		return NULL;
-	}
-
-	if (sys_fstat(file->fd, &statbuf) != 0) {
-		DEBUG(3, ("Could not fstat %s: %s\n",
-			  file->path, strerror(errno)));
-		TALLOC_FREE(result);
-		return NULL;
-	}
-
-	if (statbuf.st_nlink == 0) {
-		/* Someone has deleted it under the lock, retry */
-		TALLOC_FREE(result);
-		goto again;
-	}
-
-	result->value.dsize = 0;
-	result->value.dptr = NULL;
-
-	if (statbuf.st_size != 0) {
-		result->value.dsize = statbuf.st_size;
-		result->value.dptr = TALLOC_ARRAY(result, uint8,
-						  statbuf.st_size);
-		if (result->value.dptr == NULL) {
-			DEBUG(1, ("talloc failed\n"));
-			TALLOC_FREE(result);
-			return NULL;
-		}
-
-		nread = read_data(file->fd, (char *)result->value.dptr,
-				  result->value.dsize);
-		if (nread != result->value.dsize) {
-			DEBUG(3, ("read_data failed: %s\n", strerror(errno)));
-			TALLOC_FREE(result);
-			return NULL;
-		}
-	}
-
-	ctx->locked_record = result;
-	file->parent = (struct db_file_ctx *)talloc_reference(file, ctx);
-
-	return result;
-}
-
-static NTSTATUS db_file_store_root(int fd, TDB_DATA data)
-{
-	if (sys_lseek(fd, 0, SEEK_SET) != 0) {
-		DEBUG(0, ("sys_lseek failed: %s\n", strerror(errno)));
-		return map_nt_error_from_unix(errno);
-	}
-
-	if (write_data(fd, (char *)data.dptr, data.dsize) != data.dsize) {
-		DEBUG(3, ("write_data failed: %s\n", strerror(errno)));
-		return map_nt_error_from_unix(errno);
-	}
-
-	if (sys_ftruncate(fd, data.dsize) != 0) {
-		DEBUG(3, ("sys_ftruncate failed: %s\n", strerror(errno)));
-		return map_nt_error_from_unix(errno);
-	}
-
-	return NT_STATUS_OK;
-}
-
-static NTSTATUS db_file_store(struct db_record *rec, TDB_DATA data, int flag)
-{
-	struct db_locked_file *file =
-		talloc_get_type_abort(rec->private_data,
-				      struct db_locked_file);
-	NTSTATUS status;
-
-	become_root();
-	status = db_file_store_root(file->fd, data);
-	unbecome_root();
-
-	return status;
-}
-
-static NTSTATUS db_file_delete(struct db_record *rec)
-{
-	struct db_locked_file *file =
-		talloc_get_type_abort(rec->private_data,
-				      struct db_locked_file);
-	int res;
-
-	become_root();
-	res = unlink(file->path);
-	unbecome_root();
-
-	if (res == -1) {
-		DEBUG(3, ("unlink(%s) failed: %s\n", file->path,
-			  strerror(errno)));
-		return map_nt_error_from_unix(errno);
-	}
-
-	return NT_STATUS_OK;
-}
-
-static int db_file_traverse(struct db_context *db,
-			    int (*fn)(struct db_record *rec,
-				      void *private_data),
-			    void *private_data)
-{
-	struct db_file_ctx *ctx = talloc_get_type_abort(db->private_data,
-							struct db_file_ctx);
-	TALLOC_CTX *mem_ctx = talloc_init("traversal %s\n", ctx->dirname);
-	
-	int i;
-	int count = 0;
-
-	for (i=0; i<256; i++) {
-		const char *dirname = talloc_asprintf(mem_ctx, "%s/%2.2X",
-						      ctx->dirname, i);
-		DIR *dir;
-		struct dirent *dirent;
-
-		if (dirname == NULL) {
-			DEBUG(0, ("talloc failed\n"));
-			TALLOC_FREE(mem_ctx);
-			return -1;
-		}
-
-		dir = opendir(dirname);
-		if (dir == NULL) {
-			DEBUG(3, ("Could not open dir %s: %s\n", dirname,
-				  strerror(errno)));
-			TALLOC_FREE(mem_ctx);
-			return -1;
-		}
-
-		while ((dirent = readdir(dir)) != NULL) {
-			DATA_BLOB keyblob;
-			TDB_DATA key;
-			struct db_record *rec;
-
-			if ((dirent->d_name[0] == '.') &&
-			    ((dirent->d_name[1] == '\0') ||
-			     ((dirent->d_name[1] == '.') &&
-			      (dirent->d_name[2] == '\0')))) {
-				continue;
-			}
-
-			keyblob = strhex_to_data_blob(mem_ctx, dirent->d_name);
-			if (keyblob.data == NULL) {
-				DEBUG(5, ("strhex_to_data_blob failed\n"));
-				continue;
-			}
-
-			key.dptr = keyblob.data;
-			key.dsize = keyblob.length;
-
-			if ((ctx->locked_record != NULL) &&
-			    (key.dsize == ctx->locked_record->key.dsize) &&
-			    (memcmp(key.dptr, ctx->locked_record->key.dptr,
-				    key.dsize) == 0)) {
-				count += 1;
-				if (fn(ctx->locked_record,
-				       private_data) != 0) {
-					TALLOC_FREE(mem_ctx);
-					closedir(dir);
-					return count;
-				}
-			}
-
-			rec = db_file_fetch_locked(db, mem_ctx, key);
-			if (rec == NULL) {
-				/* Someone might have deleted it */
-				continue;
-			}
-
-			if (rec->value.dptr == NULL) {
-				TALLOC_FREE(rec);
-				continue;
-			}
-
-			count += 1;
-
-			if (fn(rec, private_data) != 0) {
-				TALLOC_FREE(mem_ctx);
-				closedir(dir);
-				return count;
-			}
-			TALLOC_FREE(rec);
-		}
-
-		closedir(dir);
-	}
-
-	TALLOC_FREE(mem_ctx);
-	return count;
-}
-
-struct db_context *db_open_file(TALLOC_CTX *mem_ctx,
-				struct messaging_context *msg_ctx,
-				const char *name,
-				int hash_size, int tdb_flags,
-				int open_flags, mode_t mode)
-{
-	struct db_context *result = NULL;
-	struct db_file_ctx *ctx;
-
-	if (!(result = TALLOC_ZERO_P(mem_ctx, struct db_context))) {
-		DEBUG(0, ("talloc failed\n"));
-		return NULL;
-	}
-
-	if (!(ctx = TALLOC_P(result, struct db_file_ctx))) {
-		DEBUG(0, ("talloc failed\n"));
-		TALLOC_FREE(result);
-		return NULL;
-	}
-
-	result->private_data = ctx;
-	result->fetch_locked = db_file_fetch_locked;
-	result->traverse = db_file_traverse;
-	result->traverse_read = db_file_traverse;
-	result->persistent = ((tdb_flags & TDB_CLEAR_IF_FIRST) == 0);
-
-	ctx->locked_record = NULL;
-	if (!(ctx->dirname = talloc_strdup(ctx, name))) {
-		DEBUG(0, ("talloc failed\n"));
-		TALLOC_FREE(result);
-		return NULL;
-	}
-
-	if (open_flags & O_CREAT) {
-		int ret, i;
-
-		mode |= (mode & S_IRUSR) ? S_IXUSR : 0;
-		mode |= (mode & S_IRGRP) ? S_IXGRP : 0;
-		mode |= (mode & S_IROTH) ? S_IXOTH : 0;
-
-		ret = mkdir(name, mode);
-		if ((ret != 0) && (errno != EEXIST)) {
-			DEBUG(5, ("mkdir(%s,%o) failed: %s\n", name, mode,
-				  strerror(errno)));
-			TALLOC_FREE(result);
-			return NULL;
-		}
-
-		for (i=0; i<256; i++) {
-			char *path;
-			path = talloc_asprintf(result, "%s/%2.2X", name, i);
-			if (path == NULL) {
-				DEBUG(0, ("asprintf failed\n"));
-				TALLOC_FREE(result);
-				return NULL;
-			}
-			ret = mkdir(path, mode);
-			if ((ret != 0) && (errno != EEXIST)) {
-				DEBUG(5, ("mkdir(%s,%o) failed: %s\n", path,
-					  mode, strerror(errno)));
-				TALLOC_FREE(result);
-				return NULL;
-			}
-			TALLOC_FREE(path);
-		}
-	}
-
-	return result;
-}

Deleted: branches/samba/upstream/source/lib/dbwrap_rbt.c
===================================================================
--- branches/samba/upstream/source/lib/dbwrap_rbt.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/dbwrap_rbt.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,389 +0,0 @@
-/*
-   Unix SMB/CIFS implementation.
-   Database interface wrapper around red-black trees
-   Copyright (C) Volker Lendecke 2007, 2008
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-#include "rbtree.h"
-
-#define ALIGN(_size_) (((_size_)+15)&~15)
-
-struct db_rbt_ctx {
-	struct rb_root tree;
-};
-
-struct db_rbt_rec {
-	struct db_rbt_ctx *db_ctx;
-	struct db_rbt_node *node;
-};
-
-/* The structure that ends up in the tree */
-
-struct db_rbt_node {
-	struct rb_node rb_node;
-	size_t keysize, valuesize;
-
-	/*
-	 * key and value are appended implicitly, "data" is only here as a
-	 * target for offsetof()
-	 */
-
-	char data[];
-};
-
-/*
- * Hide the ugly pointer calculations in a function
- */
-
-static struct db_rbt_node *db_rbt2node(struct rb_node *node)
-{
-	return (struct db_rbt_node *)
-		((char *)node - offsetof(struct db_rbt_node, rb_node));
-}
-
-/*
- * Compare two keys
- */
-
-static int db_rbt_compare(TDB_DATA a, TDB_DATA b)
-{
-	int res;
-
-	res = memcmp(a.dptr, b.dptr, MIN(a.dsize, b.dsize));
-
-	if ((res < 0) || ((res == 0) && (a.dsize < b.dsize))) {
-		return -1;
-	}
-	if ((res > 0) || ((res == 0) && (a.dsize > b.dsize))) {
-		return 1;
-	}
-	return 0;
-}
-
-/*
- * dissect a db_rbt_node into its implicit key and value parts
- */
-
-static void db_rbt_parse_node(struct db_rbt_node *node,
-			      TDB_DATA *key, TDB_DATA *value)
-{
-	key->dptr = ((uint8 *)node) + offsetof(struct db_rbt_node, data);
-	key->dsize = node->keysize;
-	value->dptr = key->dptr + node->keysize;
-	value->dsize = node->valuesize;
-}
-
-static NTSTATUS db_rbt_store(struct db_record *rec, TDB_DATA data, int flag)
-{
-	struct db_rbt_rec *rec_priv = (struct db_rbt_rec *)rec->private_data;
-	struct db_rbt_node *node;
-
-	struct rb_node ** p;
-	struct rb_node * parent;
-
-	TDB_DATA this_key, this_val;
-
-	if (rec_priv->node != NULL) {
-
-		/*
-		 * The record was around previously
-		 */
-
-		db_rbt_parse_node(rec_priv->node, &this_key, &this_val);
-
-		SMB_ASSERT(this_key.dsize == rec->key.dsize);
-		SMB_ASSERT(memcmp(this_key.dptr, rec->key.dptr,
-				  this_key.dsize) == 0);
-
-		if (this_val.dsize >= data.dsize) {
-			/*
-			 * The new value fits into the old space
-			 */
-			memcpy(this_val.dptr, data.dptr, data.dsize);
-			rec_priv->node->valuesize = data.dsize;
-			return NT_STATUS_OK;
-		}
-
-		/*
-		 * We need to delete the key from the tree and start fresh,
-		 * there's not enough space in the existing record
-		 */
-
-		rb_erase(&rec_priv->node->rb_node, &rec_priv->db_ctx->tree);
-
-		/*
-		 * Keep the existing node around for a while: If the record
-		 * existed before, we reference the key data in there.
-		 */
-	}
-
-	node = (struct db_rbt_node *)SMB_MALLOC(
-		offsetof(struct db_rbt_node, data) + rec->key.dsize
-		+ data.dsize);
-
-	if (node == NULL) {
-		SAFE_FREE(rec_priv->node);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	ZERO_STRUCT(node->rb_node);
-
-	node->keysize = rec->key.dsize;
-	node->valuesize = data.dsize;
-
-	db_rbt_parse_node(node, &this_key, &this_val);
-
-	memcpy(this_key.dptr, rec->key.dptr, node->keysize);
-	SAFE_FREE(rec_priv->node);
-
-	memcpy(this_val.dptr, data.dptr, node->valuesize);
-
-	parent = NULL;
-	p = &rec_priv->db_ctx->tree.rb_node;
-
-	while (*p) {
-		struct db_rbt_node *r;
-		TDB_DATA search_key, search_val;
-		int res;
-
-		parent = (*p);
-
-		r = db_rbt2node(*p);
-
-		db_rbt_parse_node(r, &search_key, &search_val);
-
-		res = db_rbt_compare(this_key, search_key);
-
-		if (res == -1) {
-			p = &(*p)->rb_left;
-		}
-		else if (res == 1) {
-			p = &(*p)->rb_right;
-		}
-		else {
-			smb_panic("someone messed with the tree");
-		}
-	}
-
-	rb_link_node(&node->rb_node, parent, p);
-	rb_insert_color(&node->rb_node, &rec_priv->db_ctx->tree);
-
-	return NT_STATUS_OK;
-}
-
-static NTSTATUS db_rbt_delete(struct db_record *rec)
-{
-	struct db_rbt_rec *rec_priv = (struct db_rbt_rec *)rec->private_data;
-
-	if (rec_priv->node == NULL) {
-		return NT_STATUS_OK;
-	}
-
-	rb_erase(&rec_priv->node->rb_node, &rec_priv->db_ctx->tree);
-	SAFE_FREE(rec_priv->node);
-
-	return NT_STATUS_OK;
-}
-
-static struct db_record *db_rbt_fetch_locked(struct db_context *db_ctx,
-					     TALLOC_CTX *mem_ctx,
-					     TDB_DATA key)
-{
-	struct db_rbt_ctx *ctx = talloc_get_type_abort(
-		db_ctx->private_data, struct db_rbt_ctx);
-
-	struct db_rbt_rec *rec_priv;
-	struct db_record *result;
-	struct rb_node *n;
-	size_t size;
-	bool found = false;
-	struct db_rbt_node *r = NULL;
-	TDB_DATA search_key = tdb_null, search_val = tdb_null;
-
-	n = ctx->tree.rb_node;
-
-	while (n != NULL) {
-		int res;
-
-		r = db_rbt2node(n);
-
-		db_rbt_parse_node(r, &search_key, &search_val);
-
-		res = db_rbt_compare(key, search_key);
-
-		if (res == -1) {
-			n = n->rb_left;
-		}
-		else if (res == 1) {
-			n = n->rb_right;
-		}
-		else {
-			found = true;
-			break;
-		}
-	}
-
-	/*
-	 * In this low-level routine, play tricks to reduce the number of
-	 * tallocs to one. Not recommened for general use, but here it pays
-	 * off.
-	 */
-
-	size = ALIGN(sizeof(struct db_record)) + sizeof(struct db_rbt_rec);
-
-	if (!found) {
-		/*
-		 * We need to keep the key around for later store
-		 */
-		size += key.dsize;
-	}
-
-	result = (struct db_record *)talloc_size(mem_ctx, size);
-	if (result == NULL) {
-		return NULL;
-	}
-
-	rec_priv = (struct db_rbt_rec *)
-		((char *)result + ALIGN(sizeof(struct db_record)));
-	rec_priv->db_ctx = ctx;
-
-	result->store = db_rbt_store;
-	result->delete_rec = db_rbt_delete;
-	result->private_data = rec_priv;
-
-	if (found) {
-		rec_priv->node = r;
-		result->key = search_key;
-		result->value = search_val;
-	}
-	else {
-		rec_priv->node = NULL;
-		result->key.dptr = (uint8 *)
-			((char *)rec_priv + sizeof(*rec_priv));
-		result->key.dsize = key.dsize;
-		memcpy(result->key.dptr, key.dptr, key.dsize);
-
-		result->value = tdb_null;
-	}
-
-	return result;
-}
-
-static int db_rbt_fetch(struct db_context *db, TALLOC_CTX *mem_ctx,
-			TDB_DATA key, TDB_DATA *data)
-{
-	struct db_rbt_ctx *ctx = talloc_get_type_abort(
-		db->private_data, struct db_rbt_ctx);
-
-	struct rb_node *n;
-	bool found = false;
-	struct db_rbt_node *r = NULL;
-	TDB_DATA search_key, search_val;
-	uint8_t *result;
-
-	n = ctx->tree.rb_node;
-
-	while (n != NULL) {
-		int res;
-
-		r = db_rbt2node(n);
-
-		db_rbt_parse_node(r, &search_key, &search_val);
-
-		res = db_rbt_compare(key, search_key);
-
-		if (res == -1) {
-			n = n->rb_left;
-		}
-		else if (res == 1) {
-			n = n->rb_right;
-		}
-		else {
-			found = true;
-			break;
-		}
-	}
-
-	if (!found) {
-		*data = tdb_null;
-		return 0;
-	}
-
-	result = (uint8 *)talloc_memdup(mem_ctx, search_val.dptr,
-					search_val.dsize);
-	if (result == NULL) {
-		return -1;
-	}
-
-	data->dptr = result;
-	data->dsize = search_val.dsize;
-	return 0;
-}
-
-
-static int db_rbt_traverse(struct db_context *db,
-			   int (*f)(struct db_record *db,
-				    void *private_data),
-			   void *private_data)
-{
-	/*
-	 * Nobody uses this so far, and unused code is broken code :-)
-	 */
-	return -1;
-}
-
-static int db_rbt_get_seqnum(struct db_context *db)
-{
-	return 0;
-}
-
-static int db_rbt_trans_dummy(struct db_context *db)
-{
-	/*
-	 * Transactions are pretty pointless in-memory, just return success.
-	 */
-	return 0;
-}
-
-struct db_context *db_open_rbt(TALLOC_CTX *mem_ctx)
-{
-	struct db_context *result;
-
-	result = talloc(mem_ctx, struct db_context);
-
-	if (result == NULL) {
-		return NULL;
-	}
-
-	result->private_data = TALLOC_ZERO_P(result, struct db_rbt_ctx);
-
-	if (result->private_data == NULL) {
-		TALLOC_FREE(result);
-		return NULL;
-	}
-
-	result->fetch_locked = db_rbt_fetch_locked;
-	result->fetch = db_rbt_fetch;
-	result->traverse = db_rbt_traverse;
-	result->traverse_read = db_rbt_traverse;
-	result->get_seqnum = db_rbt_get_seqnum;
-	result->transaction_start = db_rbt_trans_dummy;
-	result->transaction_commit = db_rbt_trans_dummy;
-	result->transaction_cancel = db_rbt_trans_dummy;
-
-	return result;
-}

Deleted: branches/samba/upstream/source/lib/dbwrap_tdb.c
===================================================================
--- branches/samba/upstream/source/lib/dbwrap_tdb.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/dbwrap_tdb.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,358 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   Database interface wrapper around tdb
-   Copyright (C) Volker Lendecke 2005-2007
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-
-struct db_tdb_ctx {
-	struct tdb_wrap *wtdb;
-};
-
-static NTSTATUS db_tdb_store(struct db_record *rec, TDB_DATA data, int flag);
-static NTSTATUS db_tdb_delete(struct db_record *rec);
-
-static int db_tdb_record_destr(struct db_record* data)
-{
-	struct db_tdb_ctx *ctx =
-		talloc_get_type_abort(data->private_data, struct db_tdb_ctx);
-
-	/* This hex_encode() call allocates memory on data context. By way how current 
-	   __talloc_free() code works, it is OK to allocate in the destructor as 
-	   the children of data will be freed after call to the destructor and this 
-	   new 'child' will be caught and freed correctly.
-	 */
-	DEBUG(10, (DEBUGLEVEL > 10
-		   ? "Unlocking key %s\n" : "Unlocking key %.20s\n",
-		   hex_encode(data, (unsigned char *)data->key.dptr,
-			      data->key.dsize)));
-
-	if (tdb_chainunlock(ctx->wtdb->tdb, data->key) != 0) {
-		DEBUG(0, ("tdb_chainunlock failed\n"));
-		return -1;
-	}
-	return 0;
-}
-
-struct tdb_fetch_locked_state {
-	TALLOC_CTX *mem_ctx;
-	struct db_record *result;
-};
-
-static int db_tdb_fetchlock_parse(TDB_DATA key, TDB_DATA data,
-				  void *private_data)
-{
-	struct tdb_fetch_locked_state *state =
-		(struct tdb_fetch_locked_state *)private_data;
-
-	state->result = (struct db_record *)talloc_size(
-		state->mem_ctx,
-		sizeof(struct db_record) + key.dsize + data.dsize);
-
-	if (state->result == NULL) {
-		return 0;
-	}
-
-	state->result->key.dsize = key.dsize;
-	state->result->key.dptr = ((uint8 *)state->result)
-		+ sizeof(struct db_record);
-	memcpy(state->result->key.dptr, key.dptr, key.dsize);
-
-	state->result->value.dsize = data.dsize;
-
-	if (data.dsize > 0) {
-		state->result->value.dptr = state->result->key.dptr+key.dsize;
-		memcpy(state->result->value.dptr, data.dptr, data.dsize);
-	}
-	else {
-		state->result->value.dptr = NULL;
-	}
-
-	return 0;
-}
-
-static struct db_record *db_tdb_fetch_locked(struct db_context *db,
-				     TALLOC_CTX *mem_ctx, TDB_DATA key)
-{
-	struct db_tdb_ctx *ctx = talloc_get_type_abort(db->private_data,
-						       struct db_tdb_ctx);
-	struct tdb_fetch_locked_state state;
-
-	/* Do not accidently allocate/deallocate w/o need when debug level is lower than needed */
-	if(DEBUGLEVEL >= 10) {
-		char *keystr = hex_encode(NULL, (unsigned char*)key.dptr, key.dsize);
-		DEBUG(10, (DEBUGLEVEL > 10
-			   ? "Locking key %s\n" : "Locking key %.20s\n",
-			   keystr));
-		TALLOC_FREE(keystr);
-	}
-
-	if (tdb_chainlock(ctx->wtdb->tdb, key) != 0) {
-		DEBUG(3, ("tdb_chainlock failed\n"));
-		return NULL;
-	}
-
-	state.mem_ctx = mem_ctx;
-	state.result = NULL;
-
-	tdb_parse_record(ctx->wtdb->tdb, key, db_tdb_fetchlock_parse, &state);
-
-	if (state.result == NULL) {
-		db_tdb_fetchlock_parse(key, tdb_null, &state);
-	}
-
-	if (state.result == NULL) {
-		tdb_chainunlock(ctx->wtdb->tdb, key);
-		return NULL;
-	}
-
-	talloc_set_destructor(state.result, db_tdb_record_destr);
-
-	state.result->private_data = talloc_reference(state.result, ctx);
-	state.result->store = db_tdb_store;
-	state.result->delete_rec = db_tdb_delete;
-
-	DEBUG(10, ("Allocated locked data 0x%p\n", state.result));
-
-	return state.result;
-}
-
-struct tdb_fetch_state {
-	TALLOC_CTX *mem_ctx;
-	int result;
-	TDB_DATA data;
-};
-
-static int db_tdb_fetch_parse(TDB_DATA key, TDB_DATA data,
-			      void *private_data)
-{
-	struct tdb_fetch_state *state =
-		(struct tdb_fetch_state *)private_data;
-
-	state->data.dptr = (uint8 *)talloc_memdup(state->mem_ctx, data.dptr,
-						  data.dsize);
-	if (state->data.dptr == NULL) {
-		state->result = -1;
-		return 0;
-	}
-
-	state->data.dsize = data.dsize;
-	return 0;
-}
-
-static int db_tdb_fetch(struct db_context *db, TALLOC_CTX *mem_ctx,
-			TDB_DATA key, TDB_DATA *pdata)
-{
-	struct db_tdb_ctx *ctx = talloc_get_type_abort(
-		db->private_data, struct db_tdb_ctx);
-
-	struct tdb_fetch_state state;
-
-	state.mem_ctx = mem_ctx;
-	state.result = 0;
-	state.data = tdb_null;
-
-	tdb_parse_record(ctx->wtdb->tdb, key, db_tdb_fetch_parse, &state);
-
-	if (state.result == -1) {
-		return -1;
-	}
-
-	*pdata = state.data;
-	return 0;
-}
-
-static NTSTATUS db_tdb_store(struct db_record *rec, TDB_DATA data, int flag)
-{
-	struct db_tdb_ctx *ctx = talloc_get_type_abort(rec->private_data,
-						       struct db_tdb_ctx);
-
-	/*
-	 * This has a bug: We need to replace rec->value for correct
-	 * operation, but right now brlock and locking don't use the value
-	 * anymore after it was stored.
-	 */
-
-	return (tdb_store(ctx->wtdb->tdb, rec->key, data, flag) == 0) ?
-		NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
-}
-
-static NTSTATUS db_tdb_delete(struct db_record *rec)
-{
-	struct db_tdb_ctx *ctx = talloc_get_type_abort(rec->private_data,
-						       struct db_tdb_ctx);
-
-	if (tdb_delete(ctx->wtdb->tdb, rec->key) == 0) {
-		return NT_STATUS_OK;
-	}
-
-	if (tdb_error(ctx->wtdb->tdb) == TDB_ERR_NOEXIST) {
-		return NT_STATUS_NOT_FOUND;
-	}
-
-	return NT_STATUS_UNSUCCESSFUL;
-}
-
-struct db_tdb_traverse_ctx {
-	struct db_context *db;
-	int (*f)(struct db_record *rec, void *private_data);
-	void *private_data;
-};
-
-static int db_tdb_traverse_func(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf,
-				void *private_data)
-{
-	struct db_tdb_traverse_ctx *ctx =
-		(struct db_tdb_traverse_ctx *)private_data;
-	struct db_record rec;
-
-	rec.key = kbuf;
-	rec.value = dbuf;
-	rec.store = db_tdb_store;
-	rec.delete_rec = db_tdb_delete;
-	rec.private_data = ctx->db->private_data;
-
-	return ctx->f(&rec, ctx->private_data);
-}
-
-static int db_tdb_traverse(struct db_context *db,
-			   int (*f)(struct db_record *rec, void *private_data),
-			   void *private_data)
-{
-	struct db_tdb_ctx *db_ctx =
-		talloc_get_type_abort(db->private_data, struct db_tdb_ctx);
-	struct db_tdb_traverse_ctx ctx;
-
-	ctx.db = db;
-	ctx.f = f;
-	ctx.private_data = private_data;
-	return tdb_traverse(db_ctx->wtdb->tdb, db_tdb_traverse_func, &ctx);
-}
-
-static NTSTATUS db_tdb_store_deny(struct db_record *rec, TDB_DATA data, int flag)
-{
-	return NT_STATUS_MEDIA_WRITE_PROTECTED;
-}
-
-static NTSTATUS db_tdb_delete_deny(struct db_record *rec)
-{
-	return NT_STATUS_MEDIA_WRITE_PROTECTED;
-}
-
-static int db_tdb_traverse_read_func(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf,
-				void *private_data)
-{
-	struct db_tdb_traverse_ctx *ctx =
-		(struct db_tdb_traverse_ctx *)private_data;
-	struct db_record rec;
-
-	rec.key = kbuf;
-	rec.value = dbuf;
-	rec.store = db_tdb_store_deny;
-	rec.delete_rec = db_tdb_delete_deny;
-	rec.private_data = ctx->db->private_data;
-
-	return ctx->f(&rec, ctx->private_data);
-}
-
-static int db_tdb_traverse_read(struct db_context *db,
-			   int (*f)(struct db_record *rec, void *private_data),
-			   void *private_data)
-{
-	struct db_tdb_ctx *db_ctx =
-		talloc_get_type_abort(db->private_data, struct db_tdb_ctx);
-	struct db_tdb_traverse_ctx ctx;
-
-	ctx.db = db;
-	ctx.f = f;
-	ctx.private_data = private_data;
-	return tdb_traverse_read(db_ctx->wtdb->tdb, db_tdb_traverse_read_func, &ctx);
-}
-
-static int db_tdb_get_seqnum(struct db_context *db)
-
-{
-	struct db_tdb_ctx *db_ctx =
-		talloc_get_type_abort(db->private_data, struct db_tdb_ctx);
-	return tdb_get_seqnum(db_ctx->wtdb->tdb);
-}
-
-static int db_tdb_transaction_start(struct db_context *db)
-{
-	struct db_tdb_ctx *db_ctx =
-		talloc_get_type_abort(db->private_data, struct db_tdb_ctx);
-	return tdb_transaction_start(db_ctx->wtdb->tdb);
-}
-
-static int db_tdb_transaction_commit(struct db_context *db)
-{
-	struct db_tdb_ctx *db_ctx =
-		talloc_get_type_abort(db->private_data, struct db_tdb_ctx);
-	return tdb_transaction_commit(db_ctx->wtdb->tdb);
-}
-
-static int db_tdb_transaction_cancel(struct db_context *db)
-{
-	struct db_tdb_ctx *db_ctx =
-		talloc_get_type_abort(db->private_data, struct db_tdb_ctx);
-	return tdb_transaction_cancel(db_ctx->wtdb->tdb);
-}
-
-struct db_context *db_open_tdb(TALLOC_CTX *mem_ctx,
-			       const char *name,
-			       int hash_size, int tdb_flags,
-			       int open_flags, mode_t mode)
-{
-	struct db_context *result = NULL;
-	struct db_tdb_ctx *db_tdb;
-
-	result = TALLOC_ZERO_P(mem_ctx, struct db_context);
-	if (result == NULL) {
-		DEBUG(0, ("talloc failed\n"));
-		goto fail;
-	}
-
-	result->private_data = db_tdb = TALLOC_P(result, struct db_tdb_ctx);
-	if (db_tdb == NULL) {
-		DEBUG(0, ("talloc failed\n"));
-		goto fail;
-	}
-
-	db_tdb->wtdb = tdb_wrap_open(db_tdb, name, hash_size, tdb_flags,
-				     open_flags, mode);
-	if (db_tdb->wtdb == NULL) {
-		DEBUG(3, ("Could not open tdb: %s\n", strerror(errno)));
-		goto fail;
-	}
-
-	result->fetch_locked = db_tdb_fetch_locked;
-	result->fetch = db_tdb_fetch;
-	result->traverse = db_tdb_traverse;
-	result->traverse_read = db_tdb_traverse_read;
-	result->get_seqnum = db_tdb_get_seqnum;
-	result->persistent = ((tdb_flags & TDB_CLEAR_IF_FIRST) == 0);
-	result->transaction_start = db_tdb_transaction_start;
-	result->transaction_commit = db_tdb_transaction_commit;
-	result->transaction_cancel = db_tdb_transaction_cancel;
-	return result;
-
- fail:
-	if (result != NULL) {
-		TALLOC_FREE(result);
-	}
-	return NULL;
-}

Deleted: branches/samba/upstream/source/lib/dbwrap_tdb2.c
===================================================================
--- branches/samba/upstream/source/lib/dbwrap_tdb2.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/dbwrap_tdb2.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,1265 +0,0 @@
-/*
-   Unix SMB/CIFS implementation.
-
-   Database interface wrapper around tdb/ctdb
-
-   Copyright (C) Volker Lendecke 2005-2007
-   Copyright (C) Stefan Metzmacher 2008
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-#include "librpc/gen_ndr/ndr_messaging.h"
-
-struct db_tdb2_ctx {
-	struct db_context *db;
-	const char *name;
-	struct tdb_wrap *mtdb;
-	const char *mtdb_path;
-	bool master_transaction;
-	struct {
-		int hash_size;
-		int tdb_flags;
-		int open_flags;
-		mode_t mode;
-	} open;
-	struct tdb_wrap *ltdb;
-	const char *ltdb_path;
-	bool local_transaction;
-	int transaction;
-	bool out_of_sync;
-	uint32_t lseqnum;
-	uint32_t mseqnum;
-#define DB_TDB2_MASTER_SEQNUM_KEYSTR "DB_TDB2_MASTER_SEQNUM_KEYSTR"
-	TDB_DATA mseqkey;
-	uint32_t max_buffer_size;
-	uint32_t current_buffer_size;
-	struct dbwrap_tdb2_changes changes;
-};
-
-
-static NTSTATUS db_tdb2_store(struct db_record *rec, TDB_DATA data, int flag);
-static NTSTATUS db_tdb2_delete(struct db_record *rec);
-
-static void db_tdb2_queue_change(struct db_tdb2_ctx *db_ctx, const TDB_DATA key);
-static void db_tdb2_send_notify(struct db_tdb2_ctx *db_ctx);
-
-static struct db_context *db_open_tdb2_ex(TALLOC_CTX *mem_ctx,
-					  const char *name,
-					  int hash_size, int tdb_flags,
-					  int open_flags, mode_t mode,
-					  const struct dbwrap_tdb2_changes *chgs);
-
-static int db_tdb2_sync_from_master(struct db_tdb2_ctx *db_ctx,
-				    const struct dbwrap_tdb2_changes *changes);
-
-static int db_tdb2_open_master(struct db_tdb2_ctx *db_ctx, bool transaction,
-			       const struct dbwrap_tdb2_changes *changes);
-static int db_tdb2_commit_local(struct db_tdb2_ctx *db_ctx, uint32_t mseqnum);
-static int db_tdb2_close_master(struct db_tdb2_ctx *db_ctx);
-static int db_tdb2_transaction_cancel(struct db_context *db);
-
-static void db_tdb2_receive_changes(struct messaging_context *msg,
-				    void *private_data,
-				    uint32_t msg_type,
-				    struct server_id server_id,
-				    DATA_BLOB *data);
-
-static struct messaging_context *global_tdb2_msg_ctx;
-static bool global_tdb2_msg_ctx_initialized;
-
-void db_tdb2_setup_messaging(struct messaging_context *msg_ctx, bool server)
-{
-	global_tdb2_msg_ctx = msg_ctx;
-
-	global_tdb2_msg_ctx_initialized = true;
-
-	if (!server) {
-		return;
-	}
-
-	if (!lp_parm_bool(-1, "dbwrap", "use_tdb2", false)) {
-		return;
-	}
-
-	messaging_register(msg_ctx, NULL, MSG_DBWRAP_TDB2_CHANGES,
-			   db_tdb2_receive_changes);
-}
-
-static struct messaging_context *db_tdb2_get_global_messaging_context(void)
-{
-	struct messaging_context *msg_ctx;
-
-	if (global_tdb2_msg_ctx_initialized) {
-		return global_tdb2_msg_ctx;
-	}
-
-	msg_ctx = messaging_init(NULL, procid_self(),
-				 event_context_init(NULL));
-
-	db_tdb2_setup_messaging(msg_ctx, false);
-
-	return global_tdb2_msg_ctx;
-}
-
-struct tdb_fetch_locked_state {
-	TALLOC_CTX *mem_ctx;
-	struct db_record *result;
-};
-
-static int db_tdb2_fetchlock_parse(TDB_DATA key, TDB_DATA data,
-				  void *private_data)
-{
-	struct tdb_fetch_locked_state *state =
-		(struct tdb_fetch_locked_state *)private_data;
-
-	state->result = (struct db_record *)talloc_size(
-		state->mem_ctx,
-		sizeof(struct db_record) + key.dsize + data.dsize);
-
-	if (state->result == NULL) {
-		return 0;
-	}
-
-	state->result->key.dsize = key.dsize;
-	state->result->key.dptr = ((uint8 *)state->result)
-		+ sizeof(struct db_record);
-	memcpy(state->result->key.dptr, key.dptr, key.dsize);
-
-	state->result->value.dsize = data.dsize;
-
-	if (data.dsize > 0) {
-		state->result->value.dptr = state->result->key.dptr+key.dsize;
-		memcpy(state->result->value.dptr, data.dptr, data.dsize);
-	}
-	else {
-		state->result->value.dptr = NULL;
-	}
-
-	return 0;
-}
-
-static struct db_record *db_tdb2_fetch_locked(struct db_context *db,
-					      TALLOC_CTX *mem_ctx, TDB_DATA key)
-{
-	struct db_tdb2_ctx *ctx = talloc_get_type_abort(db->private_data,
-							struct db_tdb2_ctx);
-	struct tdb_fetch_locked_state state;
-
-	/* Do not accidently allocate/deallocate w/o need when debug level is lower than needed */
-	if(DEBUGLEVEL >= 10) {
-		char *keystr = hex_encode(NULL, (unsigned char*)key.dptr, key.dsize);
-		DEBUG(10, (DEBUGLEVEL > 10
-			   ? "Locking key %s\n" : "Locking key %.20s\n",
-			   keystr));
-		TALLOC_FREE(keystr);
-	}
-
-	/*
-	 * we only support modifications within a
-	 * started transaction.
-	 */
-	if (ctx->transaction == 0) {
-		DEBUG(0, ("db_tdb2_fetch_locked[%s]: no transaction started\n",
-			  ctx->name));
-		smb_panic("no transaction");
-		return NULL;
-	}
-
-	state.mem_ctx = mem_ctx;
-	state.result = NULL;
-
-	tdb_parse_record(ctx->mtdb->tdb, key, db_tdb2_fetchlock_parse, &state);
-
-	if (state.result == NULL) {
-		db_tdb2_fetchlock_parse(key, tdb_null, &state);
-	}
-
-	if (state.result == NULL) {
-		return NULL;
-	}
-
-	state.result->private_data = talloc_reference(state.result, ctx);
-	state.result->store = db_tdb2_store;
-	state.result->delete_rec = db_tdb2_delete;
-
-	DEBUG(10, ("Allocated locked data 0x%p\n", state.result));
-
-	return state.result;
-}
-
-struct tdb_fetch_state {
-	TALLOC_CTX *mem_ctx;
-	int result;
-	TDB_DATA data;
-};
-
-static int db_tdb2_fetch_parse(TDB_DATA key, TDB_DATA data,
-			       void *private_data)
-{
-	struct tdb_fetch_state *state =
-		(struct tdb_fetch_state *)private_data;
-
-	state->data.dptr = (uint8 *)talloc_memdup(state->mem_ctx, data.dptr,
-						  data.dsize);
-	if (state->data.dptr == NULL) {
-		state->result = -1;
-		return 0;
-	}
-
-	state->data.dsize = data.dsize;
-	return 0;
-}
-
-static void db_tdb2_resync_before_read(struct db_tdb2_ctx *db_ctx, TDB_DATA *kbuf)
-{
-	if (db_ctx->mtdb) {
-		return;
-	}
-
-	if (!db_ctx->out_of_sync) {
-		return;
-	}
-
-	/*
-	 * this function operates on the local copy,
-	 * so hide the DB_TDB2_MASTER_SEQNUM_KEYSTR from the caller.
-	 */
-	if (kbuf && (db_ctx->mseqkey.dsize == kbuf->dsize) &&
-	    (memcmp(db_ctx->mseqkey.dptr, kbuf->dptr, kbuf->dsize) == 0)) {
-		return;
-	}
-
-	DEBUG(0,("resync_before_read[%s/%s]\n",
-		 db_ctx->mtdb_path, db_ctx->ltdb_path));
-
-	db_tdb2_open_master(db_ctx, false, NULL);
-	db_tdb2_close_master(db_ctx);
-}
-
-static int db_tdb2_fetch(struct db_context *db, TALLOC_CTX *mem_ctx,
-			 TDB_DATA key, TDB_DATA *pdata)
-{
-	struct db_tdb2_ctx *ctx = talloc_get_type_abort(
-		db->private_data, struct db_tdb2_ctx);
-
-	struct tdb_fetch_state state;
-
-	db_tdb2_resync_before_read(ctx, &key);
-
-	if (ctx->out_of_sync) {
-		DEBUG(0,("out of sync[%s] failing fetch\n",
-			 ctx->ltdb_path));
-		errno = EIO;
-		return -1;
-	}
-
-	state.mem_ctx = mem_ctx;
-	state.result = 0;
-	state.data = tdb_null;
-
-	tdb_parse_record(ctx->ltdb->tdb, key, db_tdb2_fetch_parse, &state);
-
-	if (state.result == -1) {
-		return -1;
-	}
-
-	*pdata = state.data;
-	return 0;
-}
-
-static NTSTATUS db_tdb2_store(struct db_record *rec, TDB_DATA data, int flag)
-{
-	struct db_tdb2_ctx *ctx = talloc_get_type_abort(rec->private_data,
-						       struct db_tdb2_ctx);
-	int ret;
-
-	/*
-	 * This has a bug: We need to replace rec->value for correct
-	 * operation, but right now brlock and locking don't use the value
-	 * anymore after it was stored.
-	 */
-
-	/* first store it to the master copy */
-	ret = tdb_store(ctx->mtdb->tdb, rec->key, data, flag);
-	if (ret != 0) {
-		return NT_STATUS_UNSUCCESSFUL;
-	}
-
-	/* then store it to the local copy */
-	ret = tdb_store(ctx->ltdb->tdb, rec->key, data, flag);
-	if (ret != 0) {
-		/* try to restore the old value in the master copy */
-		if (rec->value.dptr) {
-			tdb_store(ctx->mtdb->tdb, rec->key,
-				  rec->value, TDB_REPLACE);
-		} else {
-			tdb_delete(ctx->mtdb->tdb, rec->key);
-		}
-		return NT_STATUS_INTERNAL_DB_CORRUPTION;
-	}
-
-	db_tdb2_queue_change(ctx, rec->key);
-
-	return NT_STATUS_OK;
-}
-
-static NTSTATUS db_tdb2_delete(struct db_record *rec)
-{
-	struct db_tdb2_ctx *ctx = talloc_get_type_abort(rec->private_data,
-						       struct db_tdb2_ctx);
-	int ret;
-
-	ret = tdb_delete(ctx->mtdb->tdb, rec->key);
-	if (ret != 0) {
-		if (tdb_error(ctx->mtdb->tdb) == TDB_ERR_NOEXIST) {
-			return NT_STATUS_NOT_FOUND;
-		}
-
-		return NT_STATUS_UNSUCCESSFUL;
-	}
-
-	ret = tdb_delete(ctx->ltdb->tdb, rec->key);
-	if (ret != 0) {
-		/* try to restore the value in the master copy */
-		tdb_store(ctx->mtdb->tdb, rec->key,
-			  rec->value, TDB_REPLACE);
-		return NT_STATUS_INTERNAL_DB_CORRUPTION;
-	}
-
-	db_tdb2_queue_change(ctx, rec->key);
-
-	return NT_STATUS_OK;
-}
-
-struct db_tdb2_traverse_ctx {
-	struct db_tdb2_ctx *db_ctx;
-	int (*f)(struct db_record *rec, void *private_data);
-	void *private_data;
-};
-
-static int db_tdb2_traverse_func(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf,
-				void *private_data)
-{
-	struct db_tdb2_traverse_ctx *ctx =
-		(struct db_tdb2_traverse_ctx *)private_data;
-	struct db_record rec;
-
-	/* this function operates on the master copy */
-
-	rec.key = kbuf;
-	rec.value = dbuf;
-	rec.store = db_tdb2_store;
-	rec.delete_rec = db_tdb2_delete;
-	rec.private_data = ctx->db_ctx;
-
-	return ctx->f(&rec, ctx->private_data);
-}
-
-static int db_tdb2_traverse(struct db_context *db,
-			   int (*f)(struct db_record *rec, void *private_data),
-			   void *private_data)
-{
-	struct db_tdb2_ctx *db_ctx =
-		talloc_get_type_abort(db->private_data, struct db_tdb2_ctx);
-	struct db_tdb2_traverse_ctx ctx;
-
-	/*
-	 * we only support modifications within a
-	 * started transaction.
-	 */
-	if (db_ctx->transaction == 0) {
-		DEBUG(0, ("db_tdb2_traverse[%s]: no transaction started\n",
-			  db_ctx->name));
-		smb_panic("no transaction");
-		return -1;
-	}
-
-	/* here we traverse the master copy */
-	ctx.db_ctx = db_ctx;
-	ctx.f = f;
-	ctx.private_data = private_data;
-	return tdb_traverse(db_ctx->mtdb->tdb, db_tdb2_traverse_func, &ctx);
-}
-
-static NTSTATUS db_tdb2_store_deny(struct db_record *rec, TDB_DATA data, int flag)
-{
-	return NT_STATUS_MEDIA_WRITE_PROTECTED;
-}
-
-static NTSTATUS db_tdb2_delete_deny(struct db_record *rec)
-{
-	return NT_STATUS_MEDIA_WRITE_PROTECTED;
-}
-
-static int db_tdb2_traverse_read_func(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf,
-				void *private_data)
-{
-	struct db_tdb2_traverse_ctx *ctx =
-		(struct db_tdb2_traverse_ctx *)private_data;
-	struct db_record rec;
-
-	/*
-	 * this function operates on the local copy,
-	 * so hide the DB_TDB2_MASTER_SEQNUM_KEYSTR from the caller.
-	 */
-	if ((ctx->db_ctx->mseqkey.dsize == kbuf.dsize) &&
-	    (memcmp(ctx->db_ctx->mseqkey.dptr, kbuf.dptr, kbuf.dsize) == 0)) {
-		return 0;
-	}
-
-	rec.key = kbuf;
-	rec.value = dbuf;
-	rec.store = db_tdb2_store_deny;
-	rec.delete_rec = db_tdb2_delete_deny;
-	rec.private_data = ctx->db_ctx;
-
-	return ctx->f(&rec, ctx->private_data);
-}
-
-static int db_tdb2_traverse_read(struct db_context *db,
-			   int (*f)(struct db_record *rec, void *private_data),
-			   void *private_data)
-{
-	struct db_tdb2_ctx *db_ctx =
-		talloc_get_type_abort(db->private_data, struct db_tdb2_ctx);
-	struct db_tdb2_traverse_ctx ctx;
-	int ret;
-
-	db_tdb2_resync_before_read(db_ctx, NULL);
-
-	if (db_ctx->out_of_sync) {
-		DEBUG(0,("out of sync[%s] failing traverse_read\n",
-			 db_ctx->ltdb_path));
-		errno = EIO;
-		return -1;
-	}
-
-	/* here we traverse the local copy */
-	ctx.db_ctx = db_ctx;
-	ctx.f = f;
-	ctx.private_data = private_data;
-	ret = tdb_traverse_read(db_ctx->ltdb->tdb, db_tdb2_traverse_read_func, &ctx);
-	if (ret > 0) {
-		/* we have filtered one entry */
-		ret--;
-	}
-
-	return ret;
-}
-
-static int db_tdb2_get_seqnum(struct db_context *db)
-
-{
-	struct db_tdb2_ctx *db_ctx =
-		talloc_get_type_abort(db->private_data, struct db_tdb2_ctx);
-	uint32_t nlseq;
-	uint32_t nmseq;
-	bool ok;
-
-	nlseq = tdb_get_seqnum(db_ctx->ltdb->tdb);
-
-	if (nlseq == db_ctx->lseqnum) {
-		return db_ctx->mseqnum;
-	}
-
-	ok = tdb_fetch_uint32_byblob(db_ctx->ltdb->tdb,
-				     db_ctx->mseqkey,
-				     &nmseq);
-	if (!ok) {
-		/* TODO: what should we do here? */
-		return db_ctx->mseqnum;
-	}
-
-	db_ctx->lseqnum = nlseq;
-	db_ctx->mseqnum = nmseq;
-
-	return db_ctx->mseqnum;
-}
-
-static int db_tdb2_transaction_start(struct db_context *db)
-{
-	struct db_tdb2_ctx *db_ctx =
-		talloc_get_type_abort(db->private_data, struct db_tdb2_ctx);
-	int ret;
-
-	if (db_ctx->transaction) {
-		db_ctx->transaction++;
-		return 0;
-	}
-
-	/* we need to open the master tdb in order to */
-	ret = db_tdb2_open_master(db_ctx, true, NULL);
-	if (ret != 0) {
-		return ret;
-	}
-
-	ret = tdb_transaction_start(db_ctx->ltdb->tdb);
-	if (ret != 0) {
-		db_tdb2_close_master(db_ctx);
-		return ret;
-	}
-
-	db_ctx->local_transaction = true;
-	db_ctx->transaction = 1;
-
-	return 0;
-}
-
-static void db_tdb2_queue_change(struct db_tdb2_ctx *db_ctx, const TDB_DATA key)
-{
-	size_t size_needed = 4 + key.dsize;
-	size_t size_new = db_ctx->current_buffer_size + size_needed;
-	uint32_t i;
-	DATA_BLOB *keys;
-
-	db_ctx->changes.num_changes++;
-
-	if (db_ctx->changes.num_changes > 1 &&
-	    db_ctx->changes.keys == NULL) {
-		/*
-		 * this means we already overflowed
-		 */
-		return;
-	}
-
-	if (db_ctx->changes.num_changes == 1) {
-		db_ctx->changes.old_seqnum = db_ctx->mseqnum;
-	}
-
-	for (i=0; i < db_ctx->changes.num_keys; i++) {
-		int ret;
-
-		if (key.dsize != db_ctx->changes.keys[i].length) {
-			continue;
-		}
-		ret = memcmp(key.dptr, db_ctx->changes.keys[i].data, key.dsize);
-		if (ret != 0) {
-			continue;
-		}
-
-		/*
-		 * the key is already in the list
-		 * so we're done
-		 */
-		return;
-	}
-
-	if (db_ctx->max_buffer_size < size_new) {
-		goto overflow;
-	}
-
-	keys = TALLOC_REALLOC_ARRAY(db_ctx, db_ctx->changes.keys,
-				    DATA_BLOB,
-				    db_ctx->changes.num_keys + 1);
-	if (!keys) {
-		goto overflow;
-	}
-	db_ctx->changes.keys = keys;
-
-	keys[db_ctx->changes.num_keys].data = (uint8_t *)talloc_memdup(keys,
-								key.dptr,
-								key.dsize);
-	if (!keys[db_ctx->changes.num_keys].data) {
-		goto overflow;
-	}
-	keys[db_ctx->changes.num_keys].length = key.dsize;
-	db_ctx->changes.num_keys++;
-	db_ctx->current_buffer_size = size_new;
-
-	return;
-
-overflow:
-	/*
-	 * on overflow discard the buffer and let
-	 * the others reload the whole tdb
-	 */
-	db_ctx->current_buffer_size = 0;
-	db_ctx->changes.num_keys = 0;
-	TALLOC_FREE(db_ctx->changes.keys);
-	return;
-}
-
-static void db_tdb2_send_notify(struct db_tdb2_ctx *db_ctx)
-{
-	enum ndr_err_code ndr_err;
-	bool ok;
-	DATA_BLOB blob;
-	struct messaging_context *msg_ctx;
-	int num_msgs = 0;
-	struct server_id self = procid_self();
-
-	msg_ctx = db_tdb2_get_global_messaging_context();
-
-	db_ctx->changes.name = db_ctx->name;
-
-	DEBUG(10,("%s[%s] size[%u/%u] changes[%u] keys[%u] seqnum[%u=>%u]\n",
-		 __FUNCTION__,
-		 db_ctx->changes.name,
-		 db_ctx->current_buffer_size,
-		 db_ctx->max_buffer_size,
-		 db_ctx->changes.num_changes,
-		 db_ctx->changes.num_keys,
-		 db_ctx->changes.old_seqnum,
-		 db_ctx->changes.new_seqnum));
-
-	if (db_ctx->changes.num_changes == 0) {
-		DEBUG(10,("db_tdb2_send_notify[%s]: no changes\n",
-			db_ctx->changes.name));
-		goto done;
-	}
-
-	if (!msg_ctx) {
-		DEBUG(1,("db_tdb2_send_notify[%s]: skipped (no msg ctx)\n",
-			db_ctx->changes.name));
-		goto done;
-	}
-
-	ndr_err = ndr_push_struct_blob(
-		&blob, talloc_tos(), &db_ctx->changes,
-		(ndr_push_flags_fn_t)ndr_push_dbwrap_tdb2_changes);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		DEBUG(0,("db_tdb2_send_notify[%s]: failed to push changes: %s\n",
-			db_ctx->changes.name,
-			nt_errstr(ndr_map_error2ntstatus(ndr_err))));
-		goto done;
-	}
-
-	ok = message_send_all(msg_ctx, MSG_DBWRAP_TDB2_CHANGES,
-			      blob.data, blob.length, &num_msgs);
-	if (!ok) {
-		DEBUG(0,("db_tdb2_send_notify[%s]: failed to send changes\n",
-			db_ctx->changes.name));
-		goto done;
-	}
-
-	DEBUG(10,("db_tdb2_send_notify[%s]: pid %s send %u messages\n",
-		db_ctx->name, procid_str_static(&self), num_msgs));
-
-done:
-	TALLOC_FREE(db_ctx->changes.keys);
-	ZERO_STRUCT(db_ctx->changes);
-
-	return;
-}
-
-static void db_tdb2_receive_changes(struct messaging_context *msg,
-				    void *private_data,
-				    uint32_t msg_type,
-				    struct server_id server_id,
-				    DATA_BLOB *data)
-{
-	enum ndr_err_code ndr_err;
-	struct dbwrap_tdb2_changes changes;
-	struct db_context *db;
-	struct server_id self;
-
-	if (procid_is_me(&server_id)) {
-		DEBUG(0,("db_tdb2_receive_changes: ignore selfpacket\n"));
-		return;
-	}
-
-	self = procid_self();
-
-	DEBUG(10,("db_tdb2_receive_changes: from %s to %s\n",
-		procid_str(debug_ctx(), &server_id),
-		procid_str(debug_ctx(), &self)));
-
-	ndr_err = ndr_pull_struct_blob_all(
-		data, talloc_tos(), &changes,
-		(ndr_pull_flags_fn_t)ndr_pull_dbwrap_tdb2_changes);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		DEBUG(0,("db_tdb2_receive_changes: failed to pull changes: %s\n",
-			nt_errstr(ndr_map_error2ntstatus(ndr_err))));
-		goto done;
-	}
-
-	if(DEBUGLEVEL >= 10) {
-		NDR_PRINT_DEBUG(dbwrap_tdb2_changes, &changes);
-	}
-
-	/* open the db, this will sync it */
-	db = db_open_tdb2_ex(talloc_tos(), changes.name, 0,
-			     0, O_RDWR, 0600, &changes);
-	TALLOC_FREE(db);
-done:
-	return;
-}
-
-static int db_tdb2_transaction_commit(struct db_context *db)
-{
-	struct db_tdb2_ctx *db_ctx =
-		talloc_get_type_abort(db->private_data, struct db_tdb2_ctx);
-	int ret;
-	uint32_t mseqnum;
-
-	if (db_ctx->transaction == 0) {
-		return -1;
-	} else if (db_ctx->transaction > 1) {
-		db_ctx->transaction--;
-		return 0;
-	}
-
-	mseqnum = tdb_get_seqnum(db_ctx->mtdb->tdb);
-	db_ctx->changes.new_seqnum = mseqnum;
-
-	/* first commit to the master copy */
-	ret = tdb_transaction_commit(db_ctx->mtdb->tdb);
-	db_ctx->master_transaction = false;
-	if (ret != 0) {
-		int saved_errno = errno;
-		db_tdb2_transaction_cancel(db);
-		errno = saved_errno;
-		return ret;
-	}
-
-	/*
-	 * Note: as we've already commited the changes to the master copy
-	 * 	 so we ignore errors in the following functions
-	 */
-	ret = db_tdb2_commit_local(db_ctx, mseqnum);
-	if (ret == 0) {
-		db_ctx->out_of_sync = false;
-	} else {
-		db_ctx->out_of_sync = true;
-	}
-
-	db_ctx->transaction = 0;
-
-	db_tdb2_close_master(db_ctx);
-
-	db_tdb2_send_notify(db_ctx);
-
-	return 0;
-}
-
-static int db_tdb2_transaction_cancel(struct db_context *db)
-{
-	struct db_tdb2_ctx *db_ctx =
-		talloc_get_type_abort(db->private_data, struct db_tdb2_ctx);
-	int saved_errno;
-	int ret;
-
-	if (db_ctx->transaction == 0) {
-		return -1;
-	}
-	if (db_ctx->transaction > 1) {
-		db_ctx->transaction--;
-		return 0;
-	}
-
-	/* cancel the transaction and close the master copy */
-	ret = db_tdb2_close_master(db_ctx);
-	saved_errno = errno;
-
-	/* now cancel on the local copy and ignore any error */
-	tdb_transaction_cancel(db_ctx->ltdb->tdb);
-	db_ctx->local_transaction = false;
-
-	db_ctx->transaction = 0;
-
-	errno = saved_errno;
-	return ret;
-}
-
-static int db_tdb2_open_master(struct db_tdb2_ctx *db_ctx, bool transaction,
-			       const struct dbwrap_tdb2_changes *changes)
-{
-	int ret;
-
-	db_ctx->mtdb = tdb_wrap_open(db_ctx,
-				     db_ctx->mtdb_path,
-				     db_ctx->open.hash_size,
-				     db_ctx->open.tdb_flags|TDB_NOMMAP|TDB_SEQNUM,
-				     db_ctx->open.open_flags,
-				     db_ctx->open.mode);
-	if (db_ctx->mtdb == NULL) {
-		DEBUG(0, ("Could not open master tdb[%s]: %s\n",
-			  db_ctx->mtdb_path,
-			  strerror(errno)));
-		return -1;
-	}
-	DEBUG(10,("open_master[%s]\n", db_ctx->mtdb_path));
-
-	if (!db_ctx->ltdb) {
-		struct stat st;
-
-		if (fstat(tdb_fd(db_ctx->mtdb->tdb), &st) == 0) {
-			db_ctx->open.mode = st.st_mode;
-		}
-
-		/* make sure the local one uses the same hash size as the master one */
-		db_ctx->open.hash_size = tdb_hash_size(db_ctx->mtdb->tdb);
-
-		db_ctx->ltdb = tdb_wrap_open(db_ctx,
-					     db_ctx->ltdb_path,
-					     db_ctx->open.hash_size,
-					     db_ctx->open.tdb_flags|TDB_SEQNUM,
-					     db_ctx->open.open_flags|O_CREAT,
-					     db_ctx->open.mode);
-		if (db_ctx->ltdb == NULL) {
-			DEBUG(0, ("Could not open local tdb[%s]: %s\n",
-				  db_ctx->ltdb_path,
-				  strerror(errno)));
-			TALLOC_FREE(db_ctx->mtdb);
-			return -1;
-		}
-		DEBUG(10,("open_local[%s]\n", db_ctx->ltdb_path));
-	}
-
-	if (transaction) {
-		ret = tdb_transaction_start(db_ctx->mtdb->tdb);
-		if (ret != 0) {
-			DEBUG(0,("open failed to start transaction[%s]\n",
-				 db_ctx->mtdb_path));
-			db_tdb2_close_master(db_ctx);
-			return ret;
-		}
-		db_ctx->master_transaction = true;
-	}
-
-	ret = db_tdb2_sync_from_master(db_ctx, changes);
-	if (ret != 0) {
-		DEBUG(0,("open failed to sync from master[%s]\n",
-			 db_ctx->ltdb_path));
-		db_tdb2_close_master(db_ctx);
-		return ret;
-	}
-
-	return 0;
-}
-
-static int db_tdb2_commit_local(struct db_tdb2_ctx *db_ctx, uint32_t mseqnum)
-{
-	bool ok;
-	int ret;
-
-	/* first fetch the master seqnum */
-	db_ctx->mseqnum = mseqnum;
-
-	/* now we try to store the master seqnum in the local tdb */
-	ok = tdb_store_uint32_byblob(db_ctx->ltdb->tdb,
-				     db_ctx->mseqkey,
-				     db_ctx->mseqnum);
-	if (!ok) {
-		tdb_transaction_cancel(db_ctx->ltdb->tdb);
-		db_ctx->local_transaction = false;
-		DEBUG(0,("local failed[%s] store mseq[%u]\n",
-			 db_ctx->ltdb_path, db_ctx->mseqnum));
-		return -1;
-	}
-
-	/* now commit all changes to the local tdb */
-	ret = tdb_transaction_commit(db_ctx->ltdb->tdb);
-	db_ctx->local_transaction = false;
-	if (ret != 0) {
-		DEBUG(0,("local failed[%s] commit mseq[%u]\n",
-			 db_ctx->ltdb_path, db_ctx->mseqnum));
-		return ret;
-	}
-
-	/*
-	 * and update the cached local seqnum this is needed to
-	 * let us cache the master seqnum.
-	 */
-	db_ctx->lseqnum = tdb_get_seqnum(db_ctx->ltdb->tdb);
-	DEBUG(10,("local updated[%s] mseq[%u]\n",
-		  db_ctx->ltdb_path, db_ctx->mseqnum));
-
-	return 0;
-}
-
-static int db_tdb2_close_master(struct db_tdb2_ctx *db_ctx)
-{
-	if (db_ctx->master_transaction) {
-		tdb_transaction_cancel(db_ctx->mtdb->tdb);
-	}
-	db_ctx->master_transaction = false;
-	/* now we can close the master handle */
-	TALLOC_FREE(db_ctx->mtdb);
-
-	DEBUG(10,("close_master[%s] ok\n", db_ctx->mtdb_path));
-	return 0;
-}
-
-static int db_tdb2_traverse_sync_all_func(TDB_CONTEXT *tdb,
-					  TDB_DATA kbuf, TDB_DATA dbuf,
-					  void *private_data)
-{
-	struct db_tdb2_traverse_ctx *ctx =
-		(struct db_tdb2_traverse_ctx *)private_data;
-	uint32_t *seqnum = (uint32_t *)ctx->private_data;
-	int ret;
-
-	DEBUG(10,("sync_entry[%s]\n", ctx->db_ctx->mtdb_path));
-
-	/* Do not accidently allocate/deallocate w/o need when debug level is lower than needed */
-	if(DEBUGLEVEL >= 10) {
-		char *keystr = hex_encode(NULL, (unsigned char*)kbuf.dptr, kbuf.dsize);
-		DEBUG(10, (DEBUGLEVEL > 10
-			   ? "Locking key %s\n" : "Locking key %.20s\n",
-			   keystr));
-		TALLOC_FREE(keystr);
-	}
-
-	ret = tdb_store(ctx->db_ctx->ltdb->tdb, kbuf, dbuf, TDB_INSERT);
-	if (ret != 0) {
-		DEBUG(0,("sync_entry[%s] %d: %s\n",
-			ctx->db_ctx->ltdb_path, ret,
-			tdb_errorstr(ctx->db_ctx->ltdb->tdb)));
-		return ret;
-	}
-
-	*seqnum = tdb_get_seqnum(ctx->db_ctx->mtdb->tdb);
-
-	return 0;
-}
-
-static int db_tdb2_sync_all(struct db_tdb2_ctx *db_ctx, uint32_t *seqnum)
-{
-	struct db_tdb2_traverse_ctx ctx;
-	int ret;
-
-	ret = tdb_wipe_all(db_ctx->ltdb->tdb);
-	if (ret != 0) {
-		DEBUG(0,("tdb_wipe_all[%s] failed %d: %s\n",
-			 db_ctx->ltdb_path, ret,
-			 tdb_errorstr(db_ctx->ltdb->tdb)));
-		return ret;
-	}
-
-	ctx.db_ctx = db_ctx;
-	ctx.f = NULL;
-	ctx.private_data = seqnum;
-	ret = tdb_traverse_read(db_ctx->mtdb->tdb,
-				db_tdb2_traverse_sync_all_func,
-				&ctx);
-	DEBUG(10,("db_tdb2_sync_all[%s] count[%d]\n",
-		  db_ctx->mtdb_path, ret));
-	if (ret < 0) {
-		return ret;
-	}
-
-	return 0;
-}
-
-static int db_tdb2_sync_changes(struct db_tdb2_ctx *db_ctx,
-				const struct dbwrap_tdb2_changes *changes,
-				uint32_t *seqnum)
-{
-	uint32_t cseqnum;
-	uint32_t mseqnum;
-	uint32_t i;
-	int ret;
-	bool need_full_sync = false;
-
-	DEBUG(10,("db_tdb2_sync_changes[%s] changes[%u]\n",
-		  changes->name, changes->num_changes));
-	if(DEBUGLEVEL >= 10) {
-		NDR_PRINT_DEBUG(dbwrap_tdb2_changes, discard_const(changes));
-	}
-
-	/* for the master tdb for reading */
-	ret = tdb_lockall_read(db_ctx->mtdb->tdb);
-	if (ret != 0) {
-		DEBUG(0,("tdb_lockall_read[%s] %d\n", db_ctx->mtdb_path, ret));
-		return ret;
-	}
-
-	/* first fetch seqnum we know about */
-	cseqnum = db_tdb2_get_seqnum(db_ctx->db);
-
-	/* then fetch the master seqnum */
-	mseqnum = tdb_get_seqnum(db_ctx->mtdb->tdb);
-
-	if (cseqnum == mseqnum) {
-		DEBUG(10,("db_tdb2_sync_changes[%s] uptodate[%u]\n",
-			  db_ctx->mtdb_path, mseqnum));
-		/* we hit a race before and now noticed we're uptodate */
-		goto done;
-	}
-
-	/* now see if the changes describe what we need */
-	if (changes->old_seqnum != cseqnum) {
-		need_full_sync = true;
-	}
-
-	if (changes->new_seqnum != mseqnum) {
-		need_full_sync = true;
-	}
-
-	/* this was the overflow case */
-	if (changes->num_keys == 0) {
-		need_full_sync = true;
-	}
-
-	if (need_full_sync) {
-		tdb_unlockall_read(db_ctx->mtdb->tdb);
-		DEBUG(0,("fallback to full sync[%s] seq[%u=>%u] keys[%u]\n",
-			db_ctx->ltdb_path, cseqnum, mseqnum,
-			changes->num_keys));
-		return db_tdb2_sync_all(db_ctx, &mseqnum);
-	}
-
-	for (i=0; i < changes->num_keys; i++) {
-		const char *op = NULL;
-		bool del = false;
-		TDB_DATA key;
-		TDB_DATA val;
-
-		key.dsize = changes->keys[i].length;
-		key.dptr = changes->keys[i].data;
-
-		val = tdb_fetch(db_ctx->mtdb->tdb, key);
-		ret = tdb_error(db_ctx->mtdb->tdb);
-		if (ret == TDB_ERR_NOEXIST) {
-			del = true;
-		} else if (ret != 0) {
-			DEBUG(0,("sync_changes[%s] failure %d\n",
-				 db_ctx->mtdb_path, ret));
-			goto failed;
-		}
-
-		if (del) {
-			op = "delete";
-			ret = tdb_delete(db_ctx->ltdb->tdb, key);
-			DEBUG(10,("sync_changes[%s] delete key[%u] %d\n",
-				  db_ctx->mtdb_path, i, ret));
-		} else {
-			op = "store";
-			ret = tdb_store(db_ctx->ltdb->tdb, key,
-					val, TDB_REPLACE);
-			DEBUG(10,("sync_changes[%s] store key[%u] %d\n",
-				  db_ctx->mtdb_path, i, ret));
-		}
-		SAFE_FREE(val.dptr);
-		if (ret != 0) {
-			DEBUG(0,("sync_changes[%s] %s key[%u] failed %d\n",
-				 db_ctx->mtdb_path, op, i, ret));
-			goto failed;
-		}
-	}
-
-done:
-	tdb_unlockall_read(db_ctx->mtdb->tdb);
-
-	*seqnum = mseqnum;
-	return 0;
-failed:
-	tdb_unlockall_read(db_ctx->mtdb->tdb);
-	return ret;
-}
-
-static int db_tdb2_sync_from_master(struct db_tdb2_ctx *db_ctx,
-				    const struct dbwrap_tdb2_changes *changes)
-{
-	int ret;
-	uint32_t cseqnum;
-	uint32_t mseqnum;
-	bool force = false;
-
-	/* first fetch seqnum we know about */
-	cseqnum = db_tdb2_get_seqnum(db_ctx->db);
-
-	/* then fetch the master seqnum */
-	mseqnum = tdb_get_seqnum(db_ctx->mtdb->tdb);
-
-	if (db_ctx->lseqnum == 0) {
-		force = true;
-	}
-
-	if (!force && cseqnum == mseqnum) {
-		DEBUG(10,("uptodate[%s] mseq[%u]\n",
-			  db_ctx->ltdb_path, mseqnum));
-		/* the local copy is uptodate, close the master db */
-		return 0;
-	}
-	DEBUG(10,("not uptodate[%s] seq[%u=>%u]\n",
-		  db_ctx->ltdb_path, cseqnum, mseqnum));
-
-	ret = tdb_transaction_start(db_ctx->ltdb->tdb);
-	if (ret != 0) {
-		DEBUG(0,("failed to start transaction[%s] %d: %s\n",
-			 db_ctx->ltdb_path, ret,
-			 tdb_errorstr(db_ctx->ltdb->tdb)));
-		db_ctx->out_of_sync = true;
-		return ret;
-	}
-	db_ctx->local_transaction = true;
-
-	if (changes && !force) {
-		ret = db_tdb2_sync_changes(db_ctx, changes, &mseqnum);
-		if (ret != 0) {
-			db_ctx->out_of_sync = true;
-			tdb_transaction_cancel(db_ctx->ltdb->tdb);
-			db_ctx->local_transaction = false;
-			return ret;
-		}
-	} else {
-		ret = db_tdb2_sync_all(db_ctx, &mseqnum);
-		if (ret != 0) {
-			db_ctx->out_of_sync = true;
-			tdb_transaction_cancel(db_ctx->ltdb->tdb);
-			db_ctx->local_transaction = false;
-			return ret;
-		}
-	}
-
-	ret = db_tdb2_commit_local(db_ctx, mseqnum);
-	if (ret != 0) {
-		db_ctx->out_of_sync = true;
-		return ret;
-	}
-
-	db_ctx->out_of_sync = false;
-
-	return 0;
-}
-
-static int db_tdb2_ctx_destructor(struct db_tdb2_ctx *db_tdb2)
-{
-	db_tdb2_close_master(db_tdb2);
-	if (db_tdb2->local_transaction) {
-		tdb_transaction_cancel(db_tdb2->ltdb->tdb);
-	}
-	db_tdb2->local_transaction = false;
-	TALLOC_FREE(db_tdb2->ltdb);
-	return 0;
-}
-
-static struct db_context *db_open_tdb2_ex(TALLOC_CTX *mem_ctx,
-					  const char *name,
-					  int hash_size, int tdb_flags,
-					  int open_flags, mode_t mode,
-					  const struct dbwrap_tdb2_changes *chgs)
-{
-	struct db_context *result = NULL;
-	struct db_tdb2_ctx *db_tdb2;
-	int ret;
-	const char *md;
-	const char *ld;
-	const char *bn;
-
-	bn = strrchr_m(name, '/');
-	if (bn) {
-		bn++;
-		DEBUG(3,("db_open_tdb2: use basename[%s] of abspath[%s]:\n",
-			bn, name));
-	} else {
-		bn = name;
-	}
-
-	md = lp_parm_const_string(-1, "dbwrap_tdb2", "master directory", NULL);
-	if (!md) {
-		DEBUG(0,("'dbwrap_tdb2:master directory' empty\n"));
-		goto fail;
-	}
-
-	ld = lp_parm_const_string(-1, "dbwrap_tdb2", "local directory", NULL);
-	if (!ld) {
-		DEBUG(0,("'dbwrap_tdb2:local directory' empty\n"));
-		goto fail;
-	}
-
-	result = TALLOC_ZERO_P(mem_ctx, struct db_context);
-	if (result == NULL) {
-		DEBUG(0, ("talloc failed\n"));
-		goto fail;
-	}
-
-	result->private_data = db_tdb2 = TALLOC_ZERO_P(result, struct db_tdb2_ctx);
-	if (db_tdb2 == NULL) {
-		DEBUG(0, ("talloc failed\n"));
-		goto fail;
-	}
-
-	db_tdb2->db = result;
-
-	db_tdb2->open.hash_size	= hash_size;
-	db_tdb2->open.tdb_flags	= tdb_flags;
-	db_tdb2->open.open_flags= open_flags;
-	db_tdb2->open.mode	= mode;
-
-	db_tdb2->max_buffer_size = lp_parm_ulong(-1, "dbwrap_tdb2",
-						 "notify buffer size", 512);
-
-	db_tdb2->name = talloc_strdup(db_tdb2, bn);
-	if (db_tdb2->name == NULL) {
-		DEBUG(0, ("talloc_strdup failed\n"));
-		goto fail;
-	}
-
-	db_tdb2->mtdb_path = talloc_asprintf(db_tdb2, "%s/%s",
-					     md, bn);
-	if (db_tdb2->mtdb_path == NULL) {
-		DEBUG(0, ("talloc_asprintf failed\n"));
-		goto fail;
-	}
-
-	db_tdb2->ltdb_path = talloc_asprintf(db_tdb2, "%s/%s.tdb2",
-					     ld, bn);
-	if (db_tdb2->ltdb_path == NULL) {
-		DEBUG(0, ("talloc_asprintf failed\n"));
-		goto fail;
-	}
-
-	db_tdb2->mseqkey = string_term_tdb_data(DB_TDB2_MASTER_SEQNUM_KEYSTR);
-
-	/*
-	 * this implicit opens the local one if as it's not yet open
-	 * it syncs the local copy.
-	 */
-	ret = db_tdb2_open_master(db_tdb2, false, chgs);
-	if (ret != 0) {
-		goto fail;
-	}
-
-	ret = db_tdb2_close_master(db_tdb2);
-	if (ret != 0) {
-		goto fail;
-	}
-
-	DEBUG(10,("db_open_tdb2[%s] opened with mseq[%u]\n",
-		  db_tdb2->name, db_tdb2->mseqnum));
-
-	result->fetch_locked = db_tdb2_fetch_locked;
-	result->fetch = db_tdb2_fetch;
-	result->traverse = db_tdb2_traverse;
-	result->traverse_read = db_tdb2_traverse_read;
-	result->get_seqnum = db_tdb2_get_seqnum;
-	result->persistent = ((tdb_flags & TDB_CLEAR_IF_FIRST) == 0);
-	result->transaction_start = db_tdb2_transaction_start;
-	result->transaction_commit = db_tdb2_transaction_commit;
-	result->transaction_cancel = db_tdb2_transaction_cancel;
-
-	talloc_set_destructor(db_tdb2, db_tdb2_ctx_destructor);
-
-	return result;
-
- fail:
-	if (result != NULL) {
-		TALLOC_FREE(result);
-	}
-	return NULL;
-}
-
-struct db_context *db_open_tdb2(TALLOC_CTX *mem_ctx,
-				const char *name,
-				int hash_size, int tdb_flags,
-				int open_flags, mode_t mode)
-{
-	return db_open_tdb2_ex(mem_ctx, name, hash_size,
-			       tdb_flags, open_flags, mode, NULL);
-}

Deleted: branches/samba/upstream/source/lib/dbwrap_util.c
===================================================================
--- branches/samba/upstream/source/lib/dbwrap_util.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/dbwrap_util.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,285 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   Utility functions for the dbwrap API
-   Copyright (C) Volker Lendecke 2007
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include "includes.h"
-
-int32_t dbwrap_fetch_int32(struct db_context *db, const char *keystr)
-{
-	TDB_DATA dbuf;
-	int32 ret;
-
-	if (db->fetch(db, NULL, string_term_tdb_data(keystr), &dbuf) != 0) {
-		return -1;
-	}
-
-	if ((dbuf.dptr == NULL) || (dbuf.dsize != sizeof(int32_t))) {
-		TALLOC_FREE(dbuf.dptr);
-		return -1;
-	}
-
-	ret = IVAL(dbuf.dptr, 0);
-	TALLOC_FREE(dbuf.dptr);
-	return ret;
-}
-
-int dbwrap_store_int32(struct db_context *db, const char *keystr, int32_t v)
-{
-	struct db_record *rec;
-	int32 v_store;
-	NTSTATUS status;
-
-	rec = db->fetch_locked(db, NULL, string_term_tdb_data(keystr));
-	if (rec == NULL) {
-		return -1;
-	}
-
-	SIVAL(&v_store, 0, v);
-
-	status = rec->store(rec, make_tdb_data((const uint8 *)&v_store,
-					       sizeof(v_store)),
-			    TDB_REPLACE);
-	TALLOC_FREE(rec);
-	return NT_STATUS_IS_OK(status) ? 0 : -1;
-}
-
-bool dbwrap_fetch_uint32(struct db_context *db, const char *keystr,
-			 uint32_t *val)
-{
-	TDB_DATA dbuf;
-
-	if (db->fetch(db, NULL, string_term_tdb_data(keystr), &dbuf) != 0) {
-		return false;
-	}
-
-	if ((dbuf.dptr == NULL) || (dbuf.dsize != sizeof(uint32_t))) {
-		TALLOC_FREE(dbuf.dptr);
-		return false;
-	}
-
-	*val = IVAL(dbuf.dptr, 0);
-	TALLOC_FREE(dbuf.dptr);
-	return true;
-}
-
-bool dbwrap_store_uint32(struct db_context *db, const char *keystr, uint32_t v)
-{
-	struct db_record *rec;
-	uint32 v_store;
-	NTSTATUS status;
-
-	rec = db->fetch_locked(db, NULL, string_term_tdb_data(keystr));
-	if (rec == NULL) {
-		return false;
-	}
-
-	SIVAL(&v_store, 0, v);
-
-	status = rec->store(rec, make_tdb_data((const uint8 *)&v_store,
-					       sizeof(v_store)),
-			    TDB_REPLACE);
-	TALLOC_FREE(rec);
-	return NT_STATUS_IS_OK(status) ? 0 : -1;
-}
-
-uint32_t dbwrap_change_uint32_atomic(struct db_context *db, const char *keystr,
-				     uint32_t *oldval, uint32_t change_val)
-{
-	struct db_record *rec;
-	uint32 val = -1;
-	TDB_DATA data;
-
-	if (!(rec = db->fetch_locked(db, NULL,
-				     string_term_tdb_data(keystr)))) {
-		return -1;
-	}
-
-	if ((rec->value.dptr != NULL)
-	    && (rec->value.dsize == sizeof(val))) {
-		val = IVAL(rec->value.dptr, 0);
-	}
-
-	val += change_val;
-
-	data.dsize = sizeof(val);
-	data.dptr = (uint8 *)&val;
-
-	rec->store(rec, data, TDB_REPLACE);
-
-	TALLOC_FREE(rec);
-
-	return 0;
-}
-
-int32 dbwrap_change_int32_atomic(struct db_context *db, const char *keystr,
-				 int32 *oldval, int32 change_val)
-{
-	struct db_record *rec;
-	int32 val = -1;
-	TDB_DATA data;
-
-	if (!(rec = db->fetch_locked(db, NULL,
-				     string_term_tdb_data(keystr)))) {
-		return -1;
-	}
-
-	if ((rec->value.dptr != NULL)
-	    && (rec->value.dsize == sizeof(val))) {
-		val = IVAL(rec->value.dptr, 0);
-	}
-
-	val += change_val;
-
-	data.dsize = sizeof(val);
-	data.dptr = (uint8 *)&val;
-
-	rec->store(rec, data, TDB_REPLACE);
-
-	TALLOC_FREE(rec);
-
-	return 0;
-}
-
-NTSTATUS dbwrap_trans_store(struct db_context *db, TDB_DATA key, TDB_DATA dbuf,
-			    int flag)
-{
-	int res;
-	struct db_record *rec = NULL;
-	NTSTATUS status;
-
-	res = db->transaction_start(db);
-	if (res != 0) {
-		DEBUG(5, ("transaction_start failed\n"));
-		return NT_STATUS_INTERNAL_DB_CORRUPTION;
-	}
-
-	rec = db->fetch_locked(db, talloc_tos(), key);
-	if (rec == NULL) {
-		DEBUG(5, ("fetch_locked failed\n"));
-		status = NT_STATUS_NO_MEMORY;
-		goto cancel;
-	}
-
-	status = rec->store(rec, dbuf, flag);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(5, ("store returned %s\n", nt_errstr(status)));
-		goto cancel;
-	}
-
-	TALLOC_FREE(rec);
-
-	res = db->transaction_commit(db);
-	if (res != 0) {
-		DEBUG(5, ("tdb_transaction_commit failed\n"));
-		status = NT_STATUS_INTERNAL_DB_CORRUPTION;
-		goto cancel;
-	}
-
-	return NT_STATUS_OK;
-
- cancel:
-	TALLOC_FREE(rec);
-
-	if (db->transaction_cancel(db) != 0) {
-		smb_panic("Cancelling transaction failed");
-	}
-	return status;
-}
-
-NTSTATUS dbwrap_trans_delete(struct db_context *db, TDB_DATA key)
-{
-	int res;
-	struct db_record *rec = NULL;
-	NTSTATUS status;
-
-	res = db->transaction_start(db);
-	if (res != 0) {
-		DEBUG(5, ("transaction_start failed\n"));
-		return NT_STATUS_INTERNAL_DB_CORRUPTION;
-	}
-
-	rec = db->fetch_locked(db, talloc_tos(), key);
-	if (rec == NULL) {
-		DEBUG(5, ("fetch_locked failed\n"));
-		status = NT_STATUS_NO_MEMORY;
-		goto cancel;
-	}
-
-	status = rec->delete_rec(rec);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(5, ("delete_rec returned %s\n", nt_errstr(status)));
-		goto cancel;
-	}
-
-	TALLOC_FREE(rec);
-
-	res = db->transaction_commit(db);
-	if (res != 0) {
-		DEBUG(5, ("tdb_transaction_commit failed\n"));
-		status = NT_STATUS_INTERNAL_DB_CORRUPTION;
-		goto cancel;
-	}
-
-	return NT_STATUS_OK;
-
- cancel:
-	TALLOC_FREE(rec);
-
-	if (db->transaction_cancel(db) != 0) {
-		smb_panic("Cancelling transaction failed");
-	}
-	return status;
-}
-
-NTSTATUS dbwrap_trans_store_int32(struct db_context *db, const char *keystr,
-				  int32_t v)
-{
-	int32 v_store;
-
-	SIVAL(&v_store, 0, v);
-
-	return dbwrap_trans_store(db, string_term_tdb_data(keystr),
-				  make_tdb_data((const uint8 *)&v_store,
-						sizeof(v_store)),
-				  TDB_REPLACE);
-}
-
-NTSTATUS dbwrap_trans_store_uint32(struct db_context *db, const char *keystr,
-				   uint32_t v)
-{
-	uint32 v_store;
-
-	SIVAL(&v_store, 0, v);
-
-	return dbwrap_trans_store(db, string_term_tdb_data(keystr),
-				  make_tdb_data((const uint8 *)&v_store,
-						sizeof(v_store)),
-				  TDB_REPLACE);
-}
-
-NTSTATUS dbwrap_trans_store_bystring(struct db_context *db, const char *key,
-				     TDB_DATA data, int flags)
-{
-	return dbwrap_trans_store(db, string_term_tdb_data(key), data, flags);
-}
-
-NTSTATUS dbwrap_trans_delete_bystring(struct db_context *db, const char *key)
-{
-	return dbwrap_trans_delete(db, string_term_tdb_data(key));
-}

Modified: branches/samba/upstream/source/lib/debug.c
===================================================================
--- branches/samba/upstream/source/lib/debug.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/debug.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -29,8 +30,7 @@
  *                    for a terminating null byte.
  */
 
-#define FORMAT_BUFR_SIZE 1024
-#define FORMAT_BUFR_MAX (FORMAT_BUFR_SIZE - 1)
+#define FORMAT_BUFR_MAX ( sizeof( format_bufr ) - 1 )
 
 /* -------------------------------------------------------------------------- **
  * This module implements Samba's debugging utility.
@@ -79,29 +79,28 @@
  */
 
 XFILE   *dbf        = NULL;
-static char *debugf = NULL;
-bool    debug_warn_unknown_class = True;
-bool    debug_auto_add_unknown_class = True;
-bool    AllowDebugChange = True;
+pstring debugf     = "";
+BOOL    debug_warn_unknown_class = True;
+BOOL    debug_auto_add_unknown_class = True;
+BOOL    AllowDebugChange = True;
 
-/*
-   used to check if the user specified a
-   logfile on the command line
+/* 
+   used to check if the user specified a 
+   logfile on the command line 
 */
-bool    override_logfile;
+BOOL    override_logfile;		
 
-static TALLOC_CTX *tmp_debug_ctx;
 
 /*
  * This is to allow assignment to DEBUGLEVEL before the debug
  * system has been initialised.
  */
 static int debug_all_class_hack = 1;
-static bool debug_all_class_isset_hack = True;
+static BOOL debug_all_class_isset_hack = True;
 
 static int debug_num_classes = 0;
 int     *DEBUGLEVEL_CLASS = &debug_all_class_hack;
-bool    *DEBUGLEVEL_CLASS_ISSET = &debug_all_class_isset_hack;
+BOOL    *DEBUGLEVEL_CLASS_ISSET = &debug_all_class_isset_hack;
 
 /* DEBUGLEVEL is #defined to *debug_level */
 int     DEBUGLEVEL = &debug_all_class_hack;
@@ -134,14 +133,14 @@
  *                    are unable to open a new log file for some reason.
  */
 
-static bool    stdout_logging = False;
+static BOOL    stdout_logging = False;
 static int     debug_count    = 0;
 #ifdef WITH_SYSLOG
 static int     syslog_level   = 0;
 #endif
-static char *format_bufr = NULL;
+static pstring format_bufr    = { '\0' };
 static size_t     format_pos     = 0;
-static bool    log_overflow   = False;
+static BOOL    log_overflow   = False;
 
 /*
  * Define all the debug class selection names here. Names *MUST NOT* contain 
@@ -168,7 +167,6 @@
 	"locking",	     /* DBGC_LOCKING	  */
 	"msdfs",	     /* DBGC_MSDFS	  */
 	"dmapi",	     /* DBGC_DMAPI	  */
-	"registry",          /* DBGC_REGISTRY     */
 	NULL
 };
 
@@ -199,8 +197,6 @@
 
 	if ( DEBUGLEVEL_CLASS_ISSET != &debug_all_class_isset_hack )
 		SAFE_FREE( DEBUGLEVEL_CLASS_ISSET );
-
-	SAFE_FREE(format_bufr);
 }
 
 /****************************************************************************
@@ -215,7 +211,7 @@
 	char **list;
 	char *buf = NULL;
 	char *b;
-	bool err = False;
+	BOOL err = False;
 
 	if (DEBUGLEVEL_CLASS == &debug_all_class_hack) {
 		return NULL;
@@ -338,10 +334,10 @@
 	if (new_ptr == &debug_all_class_isset_hack) {
 		new_ptr = NULL;
 	}
-	new_ptr = SMB_REALLOC_ARRAY(new_ptr, bool, debug_num_classes + 1);
+	new_ptr = SMB_REALLOC_ARRAY(new_ptr, BOOL, debug_num_classes + 1);
 	if (!new_ptr)
 		return -1;
-	DEBUGLEVEL_CLASS_ISSET = (bool *)new_ptr;
+	DEBUGLEVEL_CLASS_ISSET = (int *)new_ptr;
 	DEBUGLEVEL_CLASS_ISSET[ndx] = False;
 
 	new_ptr = SMB_REALLOC_ARRAY(classname_table, char *, debug_num_classes + 1);
@@ -407,7 +403,7 @@
  printdrivers:7
 ****************************************************************************/
 
-static bool debug_parse_params(char **params)
+static BOOL debug_parse_params(char **params)
 {
 	int   i, ndx;
 	char *class_name;
@@ -429,9 +425,8 @@
 
 	/* Fill in new debug class levels */
 	for (; i < debug_num_classes && params[i]; i++) {
-		char *saveptr;
-		if ((class_name = strtok_r(params[i],":", &saveptr)) &&
-			(class_level = strtok_r(NULL, "\0", &saveptr)) &&
+		if ((class_name=strtok(params[i],":")) &&
+			(class_level=strtok(NULL, "\0")) &&
             ((ndx = debug_lookup_classname(class_name)) != -1)) {
 				DEBUGLEVEL_CLASS[ndx] = atoi(class_level);
 				DEBUGLEVEL_CLASS_ISSET[ndx] = True;
@@ -450,7 +445,7 @@
  Note: the 1st param has no "name:" preceeding it.
 ****************************************************************************/
 
-bool debug_parse_levels(const char *params_str)
+BOOL debug_parse_levels(const char *params_str)
 {
 	char **params;
 
@@ -460,14 +455,14 @@
 	if (AllowDebugChange == False)
 		return True;
 
-	params = str_list_make(talloc_tos(), params_str, NULL);
+	params = str_list_make(params_str, NULL);
 
 	if (debug_parse_params(params)) {
 		debug_dump_status(5);
-		TALLOC_FREE(params);
+		str_list_free(&params);
 		return True;
 	} else {
-		TALLOC_FREE(params);
+		str_list_free(&params);
 		return False;
 	}
 }
@@ -476,16 +471,13 @@
  Receive a "set debug level" message.
 ****************************************************************************/
 
-static void debug_message(struct messaging_context *msg_ctx,
-			  void *private_data, 
-			  uint32_t msg_type, 
-			  struct server_id src,
-			  DATA_BLOB *data)
+static void debug_message(int msg_type, struct process_id src,
+			  void *buf, size_t len, void *private_data)
 {
-	const char *params_str = (const char *)data->data;
+	const char *params_str = (const char *)buf;
 
 	/* Check, it's a proper string! */
-	if (params_str[(data->length)-1] != '\0') {
+	if (params_str[len-1] != '\0') {
 		DEBUG(1, ("Invalid debug message from pid %u to pid %u\n",
 			  (unsigned int)procid_to_pid(&src),
 			  (unsigned int)getpid()));
@@ -500,14 +492,24 @@
 }
 
 /****************************************************************************
+ Send a "set debug level" message.
+****************************************************************************/
+
+void debug_message_send(pid_t pid, const char *params_str)
+{
+	if (!params_str)
+		return;
+	message_send_pid(pid_to_procid(pid), MSG_DEBUG,
+			 params_str, strlen(params_str) + 1,
+			 False);
+}
+
+/****************************************************************************
  Return current debug level.
 ****************************************************************************/
 
-static void debuglevel_message(struct messaging_context *msg_ctx,
-			       void *private_data, 
-			       uint32_t msg_type, 
-			       struct server_id src,
-			       DATA_BLOB *data)
+static void debuglevel_message(int msg_type, struct process_id src,
+			       void *buf, size_t len, void *private_data)
 {
 	char *message = debug_list_class_names_and_levels();
 
@@ -516,10 +518,9 @@
 		return;
 	}
 
-	DEBUG(1,("INFO: Received REQ_DEBUGLEVEL message from PID %s\n",
-		 procid_str_static(&src)));
-	messaging_send_buf(msg_ctx, src, MSG_DEBUGLEVEL,
-			   (uint8 *)message, strlen(message) + 1);
+	DEBUG(1,("INFO: Received REQ_DEBUGLEVEL message from PID %u\n",
+		 (unsigned int)procid_to_pid(&src)));
+	message_send_pid(src, MSG_DEBUGLEVEL, message, strlen(message) + 1, True);
 
 	SAFE_FREE(message);
 }
@@ -530,7 +531,7 @@
 
 void debug_init(void)
 {
-	static bool initialised = False;
+	static BOOL initialised = False;
 	const char **p;
 
 	if (initialised)
@@ -538,27 +539,19 @@
 
 	initialised = True;
 
+	message_register(MSG_DEBUG, debug_message, NULL);
+	message_register(MSG_REQ_DEBUGLEVEL, debuglevel_message, NULL);
+
 	for(p = default_classname_table; *p; p++) {
 		debug_add_class(*p);
 	}
-	format_bufr = (char *)SMB_MALLOC(FORMAT_BUFR_SIZE);
-	if (!format_bufr) {
-		smb_panic("debug_init: unable to create buffer");
-	}
 }
 
-void debug_register_msgs(struct messaging_context *msg_ctx)
-{
-	messaging_register(msg_ctx, NULL, MSG_DEBUG, debug_message);
-	messaging_register(msg_ctx, NULL, MSG_REQ_DEBUGLEVEL,
-			   debuglevel_message);
-}
-
 /***************************************************************************
  Get ready for syslog stuff
 **************************************************************************/
 
-void setup_logging(const char *pname, bool interactive)
+void setup_logging(const char *pname, BOOL interactive)
 {
 	debug_init();
 
@@ -592,16 +585,6 @@
 #endif
 }
 
-/***************************************************************************
- Set the logfile name.
-**************************************************************************/
-
-void debug_set_logfile(const char *name)
-{
-	SAFE_FREE(debugf);
-	debugf = SMB_STRDUP(name);
-}
-
 /**************************************************************************
  reopen the log files
  note that we now do this unconditionally
@@ -610,39 +593,31 @@
  Fix from dgibson at linuxcare.com.
 **************************************************************************/
 
-bool reopen_logs( void )
+BOOL reopen_logs( void )
 {
-	char *fname = NULL;
+	pstring fname;
 	mode_t oldumask;
 	XFILE *new_dbf = NULL;
 	XFILE *old_dbf = NULL;
-	bool ret = True;
+	BOOL ret = True;
 
 	if (stdout_logging)
 		return True;
 
 	oldumask = umask( 022 );
+  
+	pstrcpy(fname, debugf );
+	debugf[0] = '\0';
 
-	fname = debugf;
-	if (!fname) {
-		return false;
-	}
-	debugf = NULL;
-
 	if (lp_loaded()) {
 		char *logfname;
 
 		logfname = lp_logfile();
-		if (*logfname) {
-			SAFE_FREE(fname);
-			fname = SMB_STRDUP(logfname);
-			if (!fname) {
-				return false;
-			}
-		}
+		if (*logfname)
+			pstrcpy(fname, logfname);
 	}
 
-	debugf = fname;
+	pstrcpy( debugf, fname );
 	new_dbf = x_fopen( debugf, O_WRONLY|O_APPEND|O_CREAT, 0644);
 
 	if (!new_dbf) {
@@ -689,7 +664,7 @@
  Check to see if there is any need to check if the logfile has grown too big.
 **************************************************************************/
 
-bool need_to_check_log_size( void )
+BOOL need_to_check_log_size( void )
 {
 	int maxlog;
 
@@ -729,18 +704,15 @@
 	if( sys_fstat( x_fileno( dbf ), &st ) == 0 && st.st_size > maxlog ) {
 		(void)reopen_logs();
 		if( dbf && get_file_size( debugf ) > maxlog ) {
-			char *name = NULL;
+			pstring name;
 
-			if (asprintf(&name, "%s.old", debugf ) < 0) {
-				return;
-			}
-			(void)rename(debugf, name);
-
+			slprintf( name, sizeof(name)-1, "%s.old", debugf );
+			(void)rename( debugf, name );
+      
 			if (!reopen_logs()) {
 				/* We failed to reopen a log - continue using the old name. */
 				(void)rename(name, debugf);
 			}
-			SAFE_FREE(name);
 		}
 	}
 
@@ -777,7 +749,7 @@
 
  int Debug1( const char *format_str, ... )
 {
-	va_list ap;
+	va_list ap;  
 	int old_errno = errno;
 
 	debug_count++;
@@ -788,13 +760,13 @@
 			(void)x_vfprintf( dbf, format_str, ap );
 		va_end( ap );
 		errno = old_errno;
-		goto done;
+		return( 0 );
 	}
 
 	/* prevent recursion by checking if reopen_logs() has temporaily
-	   set the debugf string to NULL */
-	if( debugf == NULL)
-		goto done;
+	   set the debugf string to "" */
+	if( debugf[0] == '\0')
+		return( 0 );
 
 #ifdef WITH_SYSLOG
 	if( !lp_syslog_only() )
@@ -809,7 +781,7 @@
 				x_setbuf( dbf, NULL );
 			} else {
 				errno = old_errno;
-				goto done;
+				return(0);
 			}
 		}
 	}
@@ -819,32 +791,29 @@
 		/* map debug levels to syslog() priorities
 		 * note that not all DEBUG(0, ...) calls are
 		 * necessarily errors */
-		static int priority_map[] = {
+		static int priority_map[] = { 
 			LOG_ERR,     /* 0 */
 			LOG_WARNING, /* 1 */
 			LOG_NOTICE,  /* 2 */
 			LOG_INFO,    /* 3 */
 		};
 		int     priority;
-		char *msgbuf = NULL;
-		int ret;
+		pstring msgbuf;
 
 		if( syslog_level >= ( sizeof(priority_map) / sizeof(priority_map[0]) ) || syslog_level < 0)
 			priority = LOG_DEBUG;
 		else
 			priority = priority_map[syslog_level];
 
-		va_start(ap, format_str);
-		ret = vasprintf(&msgbuf, format_str, ap);
-		va_end(ap);
+		va_start( ap, format_str );
+		vslprintf( msgbuf, sizeof(msgbuf)-1, format_str, ap );
+		va_end( ap );
 
-		if (ret == -1) {
-			syslog(priority, "%s", msgbuf);
-		}
-		SAFE_FREE(msgbuf);
+		msgbuf[255] = '\0';
+		syslog( priority, "%s", msgbuf );
 	}
 #endif
-
+  
 	check_log_size();
 
 #ifdef WITH_SYSLOG
@@ -859,9 +828,6 @@
 			(void)x_fflush( dbf );
 	}
 
- done:
-	TALLOC_FREE(tmp_debug_ctx);
-
 	errno = old_errno;
 
 	return( 0 );
@@ -900,12 +866,8 @@
 static void format_debug_text( const char *msg )
 {
 	size_t i;
-	bool timestamp = (!stdout_logging && (lp_timestamp_logs() || !(lp_loaded())));
+	BOOL timestamp = (!stdout_logging && (lp_timestamp_logs() || !(lp_loaded())));
 
-	if (!format_bufr) {
-		debug_init();
-	}
-
 	for( i = 0; msg[i]; i++ ) {
 		/* Indent two spaces at each new line. */
 		if(timestamp && 0 == format_pos) {
@@ -953,7 +915,6 @@
 
  Input:  level - Debug level of the message (not the system-wide debug
                   level. )
-	  cls   - Debuglevel class of the calling module.
           file  - Pointer to a string containing the name of the file
                   from which this function was called, or an empty string
                   if the __FILE__ macro is not implemented.
@@ -971,7 +932,7 @@
 
 ****************************************************************************/
 
-bool dbghdr(int level, int cls, const char *file, const char *func, int line)
+BOOL dbghdr( int level, const char *file, const char *func, int line )
 {
 	/* Ensure we don't lose any real errno value. */
 	int old_errno = errno;
@@ -1017,26 +978,16 @@
 				(unsigned int)geteuid(), (unsigned int)getegid(),
 				(unsigned int)getuid(), (unsigned int)getgid()); 
 		}
-
-		if (lp_debug_class() && (cls != DBGC_ALL)) {
-			size_t hs_len = strlen(header_str);
-			slprintf(header_str + hs_len,
-				 sizeof(header_str) -1 - hs_len,
-				 ", class=%s",
-				 default_classname_table[cls]);
-		}
   
 		/* Print it all out at once to prevent split syslog output. */
 		if( lp_debug_prefix_timestamp() ) {
-		    (void)Debug1( "[%s, %2d%s] ",
-			current_timestring(debug_ctx(),
-					   lp_debug_hires_timestamp()),
-			level, header_str);
+		    (void)Debug1( "[%s, %d%s] ",
+			current_timestring(lp_debug_hires_timestamp()), level,
+			header_str);
 		} else {
-		    (void)Debug1( "[%s, %2d%s] %s:%s(%d)\n",
-			current_timestring(debug_ctx(),
-					   lp_debug_hires_timestamp()),
-			level, header_str, file, func, line );
+		    (void)Debug1( "[%s, %d%s] %s:%s(%d)\n",
+			current_timestring(lp_debug_hires_timestamp()), level,
+			header_str, file, func, line );
 		}
 	}
 
@@ -1057,33 +1008,16 @@
 
 ***************************************************************************/
 
- bool dbgtext( const char *format_str, ... )
+ BOOL dbgtext( const char *format_str, ... )
 {
 	va_list ap;
-	char *msgbuf = NULL;
-	bool ret = true;
-	int res;
+	pstring msgbuf;
 
-	va_start(ap, format_str);
-	res = vasprintf(&msgbuf, format_str, ap);
-	va_end(ap);
+	va_start( ap, format_str ); 
+	vslprintf( msgbuf, sizeof(msgbuf)-1, format_str, ap );
+	va_end( ap );
 
-	if (res != -1) {
-		format_debug_text(msgbuf);
-	} else {
-		ret = false;
-	}
-	SAFE_FREE(msgbuf);
-	return ret;
-}
+	format_debug_text( msgbuf );
 
-/*
- * Get us a temporary talloc context usable just for DEBUG arguments
- */
-TALLOC_CTX *debug_ctx(void)
-{
-        if (tmp_debug_ctx == NULL) {
-                tmp_debug_ctx = talloc_named_const(NULL, 0, "debug_ctx");
-        }
-        return tmp_debug_ctx;
+  return( True );
 }

Modified: branches/samba/upstream/source/lib/display_sec.c
===================================================================
--- branches/samba/upstream/source/lib/display_sec.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/display_sec.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful, 
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -23,92 +24,34 @@
 /****************************************************************************
 convert a security permissions into a string
 ****************************************************************************/
-
-char *get_sec_mask_str(TALLOC_CTX *ctx, uint32 type)
+char *get_sec_mask_str(uint32 type)
 {
-	char *typestr = talloc_strdup(ctx, "");
+	static fstring typestr="";
 
-	if (!typestr) {
-		return NULL;
-	}
+	typestr[0] = 0;
 
-	if (type & GENERIC_ALL_ACCESS) {
-		typestr = talloc_asprintf_append(typestr,
-				"Generic all access ");
-		if (!typestr) {
-			return NULL;
-		}
-	}
-	if (type & GENERIC_EXECUTE_ACCESS) {
-		typestr = talloc_asprintf_append(typestr,
-				"Generic execute access");
-		if (!typestr) {
-			return NULL;
-		}
-	}
-	if (type & GENERIC_WRITE_ACCESS) {
-		typestr = talloc_asprintf_append(typestr,
-				"Generic write access ");
-		if (!typestr) {
-			return NULL;
-		}
-	}
-	if (type & GENERIC_READ_ACCESS) {
-		typestr = talloc_asprintf_append(typestr,
-				"Generic read access ");
-		if (!typestr) {
-			return NULL;
-		}
-	}
-	if (type & MAXIMUM_ALLOWED_ACCESS) {
-		typestr = talloc_asprintf_append(typestr,
-				"MAXIMUM_ALLOWED_ACCESS ");
-		if (!typestr) {
-			return NULL;
-		}
-	}
-	if (type & SYSTEM_SECURITY_ACCESS) {
-		typestr = talloc_asprintf_append(typestr,
-				"SYSTEM_SECURITY_ACCESS ");
-		if (!typestr) {
-			return NULL;
-		}
-	}
-	if (type & SYNCHRONIZE_ACCESS) {
-		typestr = talloc_asprintf_append(typestr,
-				"SYNCHRONIZE_ACCESS ");
-		if (!typestr) {
-			return NULL;
-		}
-	}
-	if (type & WRITE_OWNER_ACCESS) {
-		typestr = talloc_asprintf_append(typestr,
-				"WRITE_OWNER_ACCESS ");
-		if (!typestr) {
-			return NULL;
-		}
-	}
-	if (type & WRITE_DAC_ACCESS) {
-		typestr = talloc_asprintf_append(typestr,
-				"WRITE_DAC_ACCESS ");
-		if (!typestr) {
-			return NULL;
-		}
-	}
-	if (type & READ_CONTROL_ACCESS) {
-		typestr = talloc_asprintf_append(typestr,
-				"READ_CONTROL_ACCESS ");
-		if (!typestr) {
-			return NULL;
-		}
-	}
-	if (type & DELETE_ACCESS) {
-		typestr = talloc_asprintf_append(typestr,
-				"DELETE_ACCESS ");
-		if (!typestr) {
-			return NULL;
-		}
-	}
+	if (type & GENERIC_ALL_ACCESS)
+		fstrcat(typestr, "Generic all access ");
+	if (type & GENERIC_EXECUTE_ACCESS)
+		fstrcat(typestr, "Generic execute access ");
+	if (type & GENERIC_WRITE_ACCESS)
+		fstrcat(typestr, "Generic write access ");
+	if (type & GENERIC_READ_ACCESS)
+		fstrcat(typestr, "Generic read access ");
+	if (type & MAXIMUM_ALLOWED_ACCESS)
+		fstrcat(typestr, "MAXIMUM_ALLOWED_ACCESS ");
+	if (type & SYSTEM_SECURITY_ACCESS)
+		fstrcat(typestr, "SYSTEM_SECURITY_ACCESS ");
+	if (type & SYNCHRONIZE_ACCESS)
+		fstrcat(typestr, "SYNCHRONIZE_ACCESS ");
+	if (type & WRITE_OWNER_ACCESS)
+		fstrcat(typestr, "WRITE_OWNER_ACCESS ");
+	if (type & WRITE_DAC_ACCESS)
+		fstrcat(typestr, "WRITE_DAC_ACCESS ");
+	if (type & READ_CONTROL_ACCESS)
+		fstrcat(typestr, "READ_CONTROL_ACCESS ");
+	if (type & DELETE_ACCESS)
+		fstrcat(typestr, "DELETE_ACCESS ");
 
 	printf("\t\tSpecific bits: 0x%lx\n", (unsigned long)type&SPECIFIC_RIGHTS_MASK);
 
@@ -120,54 +63,10 @@
  ****************************************************************************/
 void display_sec_access(SEC_ACCESS *info)
 {
-	char *mask_str = get_sec_mask_str(NULL, *info);
-	printf("\t\tPermissions: 0x%x: %s\n", *info, mask_str ? mask_str : "");
-	TALLOC_FREE(mask_str);
+	printf("\t\tPermissions: 0x%x: %s\n", *info, get_sec_mask_str(*info));
 }
 
 /****************************************************************************
- display sec_ace flags
- ****************************************************************************/
-void display_sec_ace_flags(uint8_t flags)
-{
-	if (flags & SEC_ACE_FLAG_OBJECT_INHERIT)
-		printf("SEC_ACE_FLAG_OBJECT_INHERIT ");
-	if (flags & SEC_ACE_FLAG_CONTAINER_INHERIT)
-		printf(" SEC_ACE_FLAG_CONTAINER_INHERIT ");
-	if (flags & SEC_ACE_FLAG_NO_PROPAGATE_INHERIT)
-		printf("SEC_ACE_FLAG_NO_PROPAGATE_INHERIT ");
-	if (flags & SEC_ACE_FLAG_INHERIT_ONLY)
-		printf("SEC_ACE_FLAG_INHERIT_ONLY ");
-	if (flags & SEC_ACE_FLAG_INHERITED_ACE)
-		printf("SEC_ACE_FLAG_INHERITED_ACE ");
-/*	if (flags & SEC_ACE_FLAG_VALID_INHERIT)
-		printf("SEC_ACE_FLAG_VALID_INHERIT "); */
-	if (flags & SEC_ACE_FLAG_SUCCESSFUL_ACCESS)
-		printf("SEC_ACE_FLAG_SUCCESSFUL_ACCESS ");
-	if (flags & SEC_ACE_FLAG_FAILED_ACCESS)
-		printf("SEC_ACE_FLAG_FAILED_ACCESS ");
-
-	printf("\n");
-}
-
-/****************************************************************************
- display sec_ace object
- ****************************************************************************/
-static void disp_sec_ace_object(struct security_ace_object *object)
-{
-	if (object->flags & SEC_ACE_OBJECT_PRESENT) {
-		printf("Object type: SEC_ACE_OBJECT_PRESENT\n");
-		printf("Object GUID: %s\n", smb_uuid_string(talloc_tos(),
-			object->type.type));
-	}
-	if (object->flags & SEC_ACE_OBJECT_INHERITED_PRESENT) {
-		printf("Object type: SEC_ACE_OBJECT_INHERITED_PRESENT\n");
-		printf("Object GUID: %s\n", smb_uuid_string(talloc_tos(), 
-			object->inherited_type.inherited_type));
-	}
-}
-
-/****************************************************************************
  display sec_ace structure
  ****************************************************************************/
 void display_sec_ace(SEC_ACE *ace)
@@ -188,36 +87,14 @@
 		case SEC_ACE_TYPE_SYSTEM_ALARM:
 			printf("SYSTEM ALARM");
 			break;
-		case SEC_ACE_TYPE_ALLOWED_COMPOUND:
-			printf("SEC_ACE_TYPE_ALLOWED_COMPOUND");
-			break;
-		case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT:
-			printf("SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT");
-			break;
-		case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT:
-			printf("SEC_ACE_TYPE_ACCESS_DENIED_OBJECT");
-			break;
-		case SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT:
-			printf("SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT");
-			break;
-		case SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT:
-			printf("SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT");
-			break;
 		default:
 			printf("????");
 			break;
 	}
-
-	printf(" (%d) flags: 0x%02x ", ace->type, ace->flags);
-	display_sec_ace_flags(ace->flags);
+	printf(" (%d) flags: %d\n", ace->type, ace->flags);
 	display_sec_access(&ace->access_mask);
-	sid_to_fstring(sid_str, &ace->trustee);
+	sid_to_string(sid_str, &ace->trustee);
 	printf("\t\tSID: %s\n\n", sid_str);
-
-	if (sec_ace_object(ace->type)) {
-		disp_sec_ace_object(&ace->object.object);
-	}
-
 }
 
 /****************************************************************************
@@ -231,11 +108,10 @@
 			 sec_acl->num_aces, sec_acl->revision); 
 	printf("\t---\n");
 
-	if (sec_acl->size != 0 && sec_acl->num_aces != 0) {
-		for (i = 0; i < sec_acl->num_aces; i++) {
+	if (sec_acl->size != 0 && sec_acl->num_aces != 0)
+		for (i = 0; i < sec_acl->num_aces; i++)
 			display_sec_ace(&sec_acl->aces[i]);
-		}
-	}
+				
 }
 
 void display_acl_type(uint16 type)
@@ -260,20 +136,13 @@
 		fstrcat(typestr, "SEC_DESC_DACL_TRUSTED ");
 	if (type & SEC_DESC_SERVER_SECURITY)	/* 0x0080 */
 		fstrcat(typestr, "SEC_DESC_SERVER_SECURITY ");
-	if (type & SEC_DESC_DACL_AUTO_INHERIT_REQ) /* 0x0100 */
-		fstrcat(typestr, "SEC_DESC_DACL_AUTO_INHERIT_REQ ");
-	if (type & SEC_DESC_SACL_AUTO_INHERIT_REQ) /* 0x0200 */
-		fstrcat(typestr, "SEC_DESC_SACL_AUTO_INHERIT_REQ ");
-	if (type & SEC_DESC_DACL_AUTO_INHERITED) /* 0x0400 */
-		fstrcat(typestr, "SEC_DESC_DACL_AUTO_INHERITED ");
-	if (type & SEC_DESC_SACL_AUTO_INHERITED) /* 0x0800 */
-		fstrcat(typestr, "SEC_DESC_SACL_AUTO_INHERITED ");
-	if (type & SEC_DESC_DACL_PROTECTED)	/* 0x1000 */
-		fstrcat(typestr, "SEC_DESC_DACL_PROTECTED ");
-	if (type & SEC_DESC_SACL_PROTECTED)	/* 0x2000 */
-		fstrcat(typestr, "SEC_DESC_SACL_PROTECTED ");
-	if (type & SEC_DESC_RM_CONTROL_VALID)	/* 0x4000 */
-		fstrcat(typestr, "SEC_DESC_RM_CONTROL_VALID ");
+	if (type & 0x0100) fstrcat(typestr, "0x0100 ");
+	if (type & 0x0200) fstrcat(typestr, "0x0200 ");
+	if (type & 0x0400) fstrcat(typestr, "0x0400 ");
+	if (type & 0x0800) fstrcat(typestr, "0x0800 ");
+	if (type & 0x1000) fstrcat(typestr, "0x1000 ");
+	if (type & 0x2000) fstrcat(typestr, "0x2000 ");
+	if (type & 0x4000) fstrcat(typestr, "0x4000 ");
 	if (type & SEC_DESC_SELF_RELATIVE)	/* 0x8000 */
 		fstrcat(typestr, "SEC_DESC_SELF_RELATIVE ");
 	
@@ -306,12 +175,12 @@
 	}
 
 	if (sec->owner_sid) {
-		sid_to_fstring(sid_str, sec->owner_sid);
+		sid_to_string(sid_str, sec->owner_sid);
 		printf("\tOwner SID:\t%s\n", sid_str);
 	}
 
 	if (sec->group_sid) {
-		sid_to_fstring(sid_str, sec->group_sid);
-		printf("\tGroup SID:\t%s\n", sid_str);
+		sid_to_string(sid_str, sec->group_sid);
+		printf("\tParent SID:\t%s\n", sid_str);
 	}
 }

Modified: branches/samba/upstream/source/lib/dmallocmsg.c
===================================================================
--- branches/samba/upstream/source/lib/dmallocmsg.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/dmallocmsg.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -34,11 +35,10 @@
  * Respond to a POOL_USAGE message by sending back string form of memory
  * usage stats.
  **/
-static void msg_req_dmalloc_mark(struct messaging_context *msg,
-				 void *private_data,
-				 uint32_t msg_type,
-				 struct server_id server_id,
-				 DATA_BLOB *data)
+static void msg_req_dmalloc_mark(int UNUSED(msg_type),
+				 struct process_id UNUSED(src_pid),
+				 void *UNUSED(buf), size_t UNUSED(len),
+				 void *private_data)
 {
 #ifdef ENABLE_DMALLOC
 	our_dm_mark = dmalloc_mark();
@@ -50,11 +50,10 @@
 
 
 
-static void msg_req_dmalloc_log_changed(struct messaging_context *msg,
-					void *private_data,
-					uint32_t msg_type,
-					struct server_id server_id,
-					DATA_BLOB *data)
+static void msg_req_dmalloc_log_changed(int UNUSED(msg_type),
+					struct process_id UNUSED(src_pid),
+					void *UNUSED(buf), size_t UNUSED(len),
+					void *private_data)
 {
 #ifdef ENABLE_DMALLOC
 	dmalloc_log_changed(our_dm_mark, True, True, True);
@@ -68,11 +67,10 @@
 /**
  * Register handler for MSG_REQ_POOL_USAGE
  **/
-void register_dmalloc_msgs(struct messaging_context *msg_ctx)
+void register_dmalloc_msgs(void)
 {
-	messaging_register(msg_ctx, NULL, MSG_REQ_DMALLOC_MARK,
-			   msg_req_dmalloc_mark);
-	messaging_register(msg_ctx, NULL, MSG_REQ_DMALLOC_LOG_CHANGED,
-			   msg_req_dmalloc_log_changed);
+	message_register(MSG_REQ_DMALLOC_MARK, msg_req_dmalloc_mark, NULL);
+	message_register(MSG_REQ_DMALLOC_LOG_CHANGED,
+			 msg_req_dmalloc_log_changed, NULL);
 	DEBUG(2, ("Registered MSG_REQ_DMALLOC_MARK and LOG_CHANGED\n"));
 }	

Modified: branches/samba/upstream/source/lib/dprintf.c
===================================================================
--- branches/samba/upstream/source/lib/dprintf.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/dprintf.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 
@@ -47,10 +48,7 @@
 
 	lang_msg_free(msgstr);
 
-	if (ret <= 0) {
-	  va_end(ap2);
-	  return ret;
-	}
+	if (ret <= 0) return ret;
 
 	/* now we have the string in unix format, convert it to the display
 	   charset, but beware of it growing */
@@ -59,7 +57,6 @@
 	p2 = (char *)SMB_MALLOC(maxlen);
 	if (!p2) {
 		SAFE_FREE(p);
-		va_end(ap2);
 		return -1;
 	}
 	clen = convert_string(CH_UNIX, CH_DISPLAY, p, ret, p2, maxlen, True);
@@ -76,8 +73,6 @@
 	ret = fwrite(p2, 1, clen, f);
 	SAFE_FREE(p2);
 
-	va_end(ap2);
-
 	return ret;
 }
 

Modified: branches/samba/upstream/source/lib/dummyroot.c
===================================================================
--- branches/samba/upstream/source/lib/dummyroot.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/dummyroot.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /* Stupid dummy functions required due to the horrible dependency mess

Modified: branches/samba/upstream/source/lib/dummysmbd.c
===================================================================
--- branches/samba/upstream/source/lib/dummysmbd.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/dummysmbd.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /* Stupid dummy functions required due to the horrible dependency mess
@@ -23,17 +24,12 @@
 
 #include "includes.h"
 
-int get_client_fd(void)
-{
-	return -1;
-}
-
 int find_service(fstring service)
 {
 	return -1;
 }
 
-bool conn_snum_used(int snum)
+BOOL conn_snum_used(int snum)
 {
 	return False;
 }
@@ -51,3 +47,4 @@
 {
 	return NT_STATUS_OK;
 }
+

Deleted: branches/samba/upstream/source/lib/errmap_unix.c
===================================================================
--- branches/samba/upstream/source/lib/errmap_unix.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/errmap_unix.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,122 +0,0 @@
-/* 
- *  Unix SMB/CIFS implementation.
- *  map unix to NT errors, an excerpt of libsmb/errormap.c
- *  Copyright (C) Andrew Tridgell 2001
- *  Copyright (C) Andrew Bartlett 2001
- *  Copyright (C) Tim Potter 2000
- *  Copyright (C) Jeremy Allison 2007
- *  
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *  
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *  
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "includes.h"
-
-/* Mapping from Unix, to NT error numbers */
-
-const struct unix_error_map unix_dos_nt_errmap[] = {
-	{ EPERM, ERRDOS, ERRnoaccess, NT_STATUS_ACCESS_DENIED },
-	{ EACCES, ERRDOS, ERRnoaccess, NT_STATUS_ACCESS_DENIED },
-	{ ENOENT, ERRDOS, ERRbadfile, NT_STATUS_OBJECT_NAME_NOT_FOUND },
-	{ ENOTDIR, ERRDOS, ERRbadpath,  NT_STATUS_NOT_A_DIRECTORY },
-	{ EIO, ERRHRD, ERRgeneral, NT_STATUS_IO_DEVICE_ERROR },
-	{ EBADF, ERRSRV, ERRsrverror, NT_STATUS_INVALID_HANDLE },
-	{ EINVAL, ERRSRV, ERRsrverror, NT_STATUS_INVALID_HANDLE },
-	{ EEXIST, ERRDOS, ERRfilexists, NT_STATUS_OBJECT_NAME_COLLISION},
-	{ ENFILE, ERRDOS, ERRnofids, NT_STATUS_TOO_MANY_OPENED_FILES },
-	{ EMFILE, ERRDOS, ERRnofids, NT_STATUS_TOO_MANY_OPENED_FILES },
-	{ ENOSPC, ERRHRD, ERRdiskfull, NT_STATUS_DISK_FULL },
-	{ ENOMEM, ERRDOS, ERRnomem, NT_STATUS_NO_MEMORY },
-	{ EISDIR, ERRDOS, ERRnoaccess, NT_STATUS_FILE_IS_A_DIRECTORY},
-	{ EMLINK, ERRDOS, ERRgeneral, NT_STATUS_TOO_MANY_LINKS },
-	{ EINTR,  ERRHRD, ERRgeneral, NT_STATUS_RETRY },
-#ifdef ELOOP
-	{ ELOOP, ERRDOS, ERRbadpath, NT_STATUS_OBJECT_PATH_NOT_FOUND },
-#endif
-#ifdef EDQUOT
-	{ EDQUOT, ERRHRD, ERRdiskfull, NT_STATUS_DISK_FULL }, /* Windows apps need this, not NT_STATUS_QUOTA_EXCEEDED */
-#endif
-#ifdef ENOTEMPTY
-	{ ENOTEMPTY, ERRDOS, ERRnoaccess, NT_STATUS_DIRECTORY_NOT_EMPTY },
-#endif
-#ifdef EXDEV
-	{ EXDEV, ERRDOS, ERRdiffdevice, NT_STATUS_NOT_SAME_DEVICE },
-#endif
-#ifdef EROFS
-	{ EROFS, ERRHRD, ERRnowrite, NT_STATUS_ACCESS_DENIED },
-#endif
-#ifdef ENAMETOOLONG
-	{ ENAMETOOLONG, ERRDOS, 206, NT_STATUS_OBJECT_NAME_INVALID },
-#endif
-#ifdef EFBIG
-	{ EFBIG, ERRHRD, ERRdiskfull, NT_STATUS_DISK_FULL },
-#endif
-#ifdef ENOBUFS
-	{ ENOBUFS, ERRDOS, ERRnomem, NT_STATUS_INSUFFICIENT_RESOURCES },
-#endif
-	{ EAGAIN, ERRDOS, 111, NT_STATUS_NETWORK_BUSY },
-#ifdef EADDRINUSE
-	{ EADDRINUSE, ERRDOS, 52, NT_STATUS_ADDRESS_ALREADY_ASSOCIATED},
-#endif
-#ifdef ENETUNREACH
-	{ ENETUNREACH, ERRHRD, ERRgeneral, NT_STATUS_NETWORK_UNREACHABLE},
-#endif
-#ifdef EHOSTUNREACH
-		{ EHOSTUNREACH, ERRHRD, ERRgeneral, NT_STATUS_HOST_UNREACHABLE},
-#endif
-#ifdef ECONNREFUSED
-	{ ECONNREFUSED, ERRHRD, ERRgeneral, NT_STATUS_CONNECTION_REFUSED},
-#endif
-#ifdef ETIMEDOUT
-	{ ETIMEDOUT, ERRHRD, 121, NT_STATUS_IO_TIMEOUT},
-#endif
-#ifdef ECONNABORTED
-	{ ECONNABORTED, ERRHRD, ERRgeneral, NT_STATUS_CONNECTION_ABORTED},
-#endif
-#ifdef ENODEV
-	{ ENODEV, ERRDOS, 55, NT_STATUS_DEVICE_DOES_NOT_EXIST},
-#endif
-#ifdef EPIPE
-	{ EPIPE, ERRDOS, 109, NT_STATUS_PIPE_BROKEN},
-#endif
-#ifdef EWOULDBLOCK
-	{ EWOULDBLOCK, ERRDOS, 111, NT_STATUS_NETWORK_BUSY },
-#endif
-#ifdef ENOATTR
-	{ ENOATTR, ERRDOS, ERRbadfile, NT_STATUS_NOT_FOUND },
-#endif
-
-	{ 0, 0, 0, NT_STATUS_OK }
-};
-
-/*********************************************************************
- Map an NT error code from a Unix error code.
-*********************************************************************/
-
-NTSTATUS map_nt_error_from_unix(int unix_error)
-{
-	int i = 0;
-
-	if (unix_error == 0)
-		return NT_STATUS_OK;
-
-	/* Look through list */
-	while(unix_dos_nt_errmap[i].unix_error != 0) {
-		if (unix_dos_nt_errmap[i].unix_error == unix_error)
-			return unix_dos_nt_errmap[i].nt_error;
-		i++;
-	}
-
-	/* Default return */
-	return NT_STATUS_ACCESS_DENIED;
-}

Modified: branches/samba/upstream/source/lib/events.c
===================================================================
--- branches/samba/upstream/source/lib/events.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/events.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -184,27 +185,20 @@
 	fde->flags &= ~EVENT_FD_READ;
 }
 
-/*
- * Return if there's something in the queue
- */
-
-bool event_add_to_select_args(struct event_context *event_ctx,
+void event_add_to_select_args(struct event_context *event_ctx,
 			      const struct timeval *now,
 			      fd_set *read_fds, fd_set *write_fds,
 			      struct timeval *timeout, int *maxfd)
 {
 	struct fd_event *fde;
 	struct timeval diff;
-	bool ret = False;
 
 	for (fde = event_ctx->fd_events; fde; fde = fde->next) {
 		if (fde->flags & EVENT_FD_READ) {
 			FD_SET(fde->fd, read_fds);
-			ret = True;
 		}
 		if (fde->flags & EVENT_FD_WRITE) {
 			FD_SET(fde->fd, write_fds);
-			ret = True;
 		}
 
 		if ((fde->flags & (EVENT_FD_READ|EVENT_FD_WRITE))
@@ -214,34 +208,17 @@
 	}
 
 	if (event_ctx->timed_events == NULL) {
-		return ret;
+		return;
 	}
 
 	diff = timeval_until(now, &event_ctx->timed_events->when);
 	*timeout = timeval_min(timeout, &diff);
-
-	return True;
 }
 
-bool events_pending(struct event_context *event_ctx)
-{
-	struct fd_event *fde;
-
-	if (event_ctx->timed_events != NULL) {
-		return True;
-	}
-	for (fde = event_ctx->fd_events; fde; fde = fde->next) {
-		if (fde->flags & (EVENT_FD_READ|EVENT_FD_WRITE)) {
-			return True;
-		}
-	}
-	return False;
-}
-
-bool run_events(struct event_context *event_ctx,
+BOOL run_events(struct event_context *event_ctx,
 		int selrtn, fd_set *read_fds, fd_set *write_fds)
 {
-	bool fired = False;
+	BOOL fired = False;
 	struct fd_event *fde, *next;
 
 	/* Run all events that are pending, not just one (as we
@@ -320,40 +297,6 @@
 	return to_ret;
 }
 
-int event_loop_once(struct event_context *ev)
-{
-	struct timeval now, to;
-	fd_set r_fds, w_fds;
-	int maxfd = 0;
-	int ret;
-
-	FD_ZERO(&r_fds);
-	FD_ZERO(&w_fds);
-
-	to.tv_sec = 9999;	/* Max timeout */
-	to.tv_usec = 0;
-
-	GetTimeOfDay(&now);
-
-	if (!event_add_to_select_args(ev, &now, &r_fds, &w_fds, &to, &maxfd)) {
-		return -1;
-	}
-
-	if (timeval_is_zero(&to)) {
-		run_events(ev, 0, NULL, NULL);
-		return 0;
-	}
-
-	ret = sys_select(maxfd, &r_fds, &w_fds, NULL, &to);
-
-	if (ret == -1 && errno != EINTR) {
-		return -1;
-	}
-
-	run_events(ev, ret, &r_fds, &w_fds);
-	return 0;
-}
-
 struct event_context *event_context_init(TALLOC_CTX *mem_ctx)
 {
 	return TALLOC_ZERO_P(NULL, struct event_context);
@@ -390,37 +333,3 @@
 	}
 	return 0;
 }
-
-void dump_event_list(struct event_context *event_ctx)
-{
-	struct timed_event *te;
-	struct fd_event *fe;
-	struct timeval evt, now;
-
-	if (!event_ctx) {
-		return;
-	}
-
-	now = timeval_current();
-
-	DEBUG(10,("dump_event_list:\n"));
-
-	for (te = event_ctx->timed_events; te; te = te->next) {
-
-		evt = timeval_until(&now, &te->when);
-
-		DEBUGADD(10,("Timed Event \"%s\" %lx handled in %d seconds (at %s)\n",
-			   te->event_name,
-			   (unsigned long)te,
-			   (int)evt.tv_sec,
-			   http_timestring(te->when.tv_sec)));
-	}
-
-	for (fe = event_ctx->fd_events; fe; fe = fe->next) {
-
-		DEBUGADD(10,("FD Event %d %lx, flags: 0x%04x\n",
-			   fe->fd,
-			   (unsigned long)fe,
-			   fe->flags));
-	}
-}

Modified: branches/samba/upstream/source/lib/fault.c
===================================================================
--- branches/samba/upstream/source/lib/fault.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/fault.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -24,7 +25,7 @@
 #endif
 
 static void (*cont_fn)(void *);
-static char *corepath;
+static pstring corepath;
 
 /*******************************************************************
 report a fault
@@ -93,13 +94,11 @@
 
 void dump_core_setup(const char *progname)
 {
-	char *logbase = NULL;
-	char *end = NULL;
+	pstring logbase;
+	char * end;
 
 	if (lp_logfile() && *lp_logfile()) {
-		if (asprintf(&logbase, "%s", lp_logfile()) < 0) {
-			return;
-		}
+		snprintf(logbase, sizeof(logbase), "%s", lp_logfile());
 		if ((end = strrchr_m(logbase, '/'))) {
 			*end = '\0';
 		}
@@ -108,32 +107,21 @@
 		 * line by the -l option but the "log file" option is not set
 		 * in smb.conf.
 		 */
-		if (asprintf(&logbase, "%s", get_dyn_LOGFILEBASE()) < 0) {
-			return;
-		}
+		snprintf(logbase, sizeof(logbase), "%s", dyn_LOGFILEBASE);
 	}
 
 	SMB_ASSERT(progname != NULL);
 
-	if (asprintf(&corepath, "%s/cores", logbase) < 0) {
-		SAFE_FREE(logbase);
-		return;
-	}
+	snprintf(corepath, sizeof(corepath), "%s/cores", logbase);
 	mkdir(corepath,0700);
 
-	SAFE_FREE(corepath);
-	if (asprintf(&corepath, "%s/cores/%s",
-			logbase, progname) < 0) {
-		SAFE_FREE(logbase);
-		return;
-	}
+	snprintf(corepath, sizeof(corepath), "%s/cores/%s",
+		logbase, progname);
 	mkdir(corepath,0700);
 
 	sys_chown(corepath,getuid(),getgid());
 	chmod(corepath,0700);
 
-	SAFE_FREE(logbase);
-
 #ifdef HAVE_GETRLIMIT
 #ifdef RLIMIT_CORE
 	{
@@ -163,14 +151,6 @@
 
  void dump_core(void)
 {
-	static bool called;
-
-	if (called) {
-		DEBUG(0, ("dump_core() called recursive\n"));
-		exit(1);
-	}
-	called = true;
-
 	/* Note that even if core dumping has been disabled, we still set up
 	 * the core path. This is to handle the case where core dumping is
 	 * turned on in smb.conf and the relevant daemon is not restarted.

Deleted: branches/samba/upstream/source/lib/file_id.c
===================================================================
--- branches/samba/upstream/source/lib/file_id.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/file_id.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,88 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-
-   file_id structure handling
-
-   Copyright (C) Andrew Tridgell 2007
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-
-/*
-  return a file_id which gives a unique ID for a file given the device and
-  inode numbers
- */
-struct file_id file_id_create_dev(SMB_DEV_T dev, SMB_INO_T inode)
-{
-	struct file_id key;
-	/* the ZERO_STRUCT ensures padding doesn't break using the key as a
-	 * blob */
-	ZERO_STRUCT(key);
-	key.devid = dev;
-	key.inode = inode;
-	return key;
-}
-
-/*
-  generate a file_id from a stat structure
- */
-struct file_id vfs_file_id_from_sbuf(connection_struct *conn, const SMB_STRUCT_STAT *sbuf)
-{
-	return SMB_VFS_FILE_ID_CREATE(conn, sbuf->st_dev, sbuf->st_ino);
-}
-
-/*
-  return True if two file_id structures are equal
- */
-bool file_id_equal(const struct file_id *id1, const struct file_id *id2)
-{
-	return id1->inode == id2->inode && id1->devid == id2->devid;
-}
-
-/*
-  a static string for a file_id structure
- */
-const char *file_id_string_tos(const struct file_id *id)
-{
-	char *result = talloc_asprintf(talloc_tos(), "%llx:%llx", 
-				       (unsigned long long)id->devid, 
-				       (unsigned long long)id->inode);
-	SMB_ASSERT(result != NULL);
-	return result;
-}
-
-/*
-  push a 16 byte version of a file id into a buffer
- */
-void push_file_id_16(char *buf, const struct file_id *id)
-{
-	SIVAL(buf,  0, id->devid&0xFFFFFFFF);
-	SIVAL(buf,  4, id->devid>>32);
-	SIVAL(buf,  8, id->inode&0xFFFFFFFF);
-	SIVAL(buf, 12, id->inode>>32);
-}
-
-/*
-  pul a 16 byte version of a file id from a buffer
- */
-void pull_file_id_16(char *buf, struct file_id *id)
-{
-	ZERO_STRUCTP(id);
-	id->devid  = IVAL(buf,  0);
-	id->devid |= ((uint64_t)IVAL(buf,4))<<32;
-	id->inode  = IVAL(buf,  8);
-	id->inode |= ((uint64_t)IVAL(buf,12))<<32;
-}

Modified: branches/samba/upstream/source/lib/fsusage.c
===================================================================
--- branches/samba/upstream/source/lib/fsusage.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/fsusage.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/source/lib/gencache.c
===================================================================
--- branches/samba/upstream/source/lib/gencache.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/gencache.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -28,10 +29,9 @@
 #define TIMEOUT_LEN 12
 #define CACHE_DATA_FMT	"%12u/%s"
 #define READ_CACHE_DATA_FMT_TEMPLATE "%%12u/%%%us"
-#define BLOB_TYPE "DATA_BLOB"
-#define BLOB_TYPE_LEN 9
 
 static TDB_CONTEXT *cache;
+static BOOL cache_readonly;
 
 /**
  * @file gencache.c
@@ -49,7 +49,7 @@
  *         false on failure
  **/
 
-bool gencache_init(void)
+BOOL gencache_init(void)
 {
 	char* cache_fname = NULL;
 	
@@ -66,6 +66,7 @@
 	if (!cache && (errno == EACCES)) {
 		cache = tdb_open_log(cache_fname, 0, TDB_DEFAULT, O_RDONLY, 0644);
 		if (cache) {
+			cache_readonly = True;
 			DEBUG(5, ("gencache_init: Opening cache file %s read-only.\n", cache_fname));
 		}
 	}
@@ -85,7 +86,7 @@
  *         false on failure during cache shutdown
  **/
  
-bool gencache_shutdown(void)
+BOOL gencache_shutdown(void)
 {
 	int ret;
 	/* tdb_close routine returns -1 on error */
@@ -93,6 +94,7 @@
 	DEBUG(5, ("Closing cache file\n"));
 	ret = tdb_close(cache);
 	cache = NULL;
+	cache_readonly = False;
 	return ret != -1;
 }
 
@@ -109,10 +111,10 @@
  * @retval false on failure
  **/
  
-bool gencache_set(const char *keystr, const char *value, time_t timeout)
+BOOL gencache_set(const char *keystr, const char *value, time_t timeout)
 {
 	int ret;
-	TDB_DATA databuf;
+	TDB_DATA keybuf, databuf;
 	char* valstr = NULL;
 	
 	/* fail completely if get null pointers passed */
@@ -120,17 +122,24 @@
 
 	if (!gencache_init()) return False;
 	
-	if (asprintf(&valstr, CACHE_DATA_FMT, (int)timeout, value) == -1) {
+	if (cache_readonly) {
 		return False;
 	}
 
-	databuf = string_term_tdb_data(valstr);
+	asprintf(&valstr, CACHE_DATA_FMT, (int)timeout, value);
+	if (!valstr)
+		return False;
+
+	keybuf.dptr = CONST_DISCARD(char *, keystr);
+	keybuf.dsize = strlen(keystr)+1;
+	databuf.dptr = valstr;
+	databuf.dsize = strlen(valstr)+1;
 	DEBUG(10, ("Adding cache entry with key = %s; value = %s and timeout ="
-	           " %s (%d seconds %s)\n", keystr, value,ctime(&timeout),
+	           " %s (%d seconds %s)\n", keybuf.dptr, value,ctime(&timeout),
 		   (int)(timeout - time(NULL)), 
 		   timeout > time(NULL) ? "ahead" : "in the past"));
 
-	ret = tdb_store_bystring(cache, keystr, databuf, 0);
+	ret = tdb_store(cache, keybuf, databuf, 0);
 	SAFE_FREE(valstr);
 	
 	return ret == 0;
@@ -145,17 +154,24 @@
  * @retval false in case of failure
  **/
 
-bool gencache_del(const char *keystr)
+BOOL gencache_del(const char *keystr)
 {
 	int ret;
+	TDB_DATA keybuf;
 	
 	/* fail completely if get null pointers passed */
 	SMB_ASSERT(keystr);
 
 	if (!gencache_init()) return False;	
 	
+	if (cache_readonly) {
+		return False;
+	}
+
+	keybuf.dptr = CONST_DISCARD(char *, keystr);
+	keybuf.dsize = strlen(keystr)+1;
 	DEBUG(10, ("Deleting cache entry (key = %s)\n", keystr));
-	ret = tdb_delete_bystring(cache, keystr);
+	ret = tdb_delete(cache, keybuf);
 	
 	return ret == 0;
 }
@@ -174,9 +190,9 @@
  * @retval False for failure
  **/
 
-bool gencache_get(const char *keystr, char **valstr, time_t *timeout)
+BOOL gencache_get(const char *keystr, char **valstr, time_t *timeout)
 {
-	TDB_DATA databuf;
+	TDB_DATA keybuf, databuf;
 	time_t t;
 	char *endptr;
 
@@ -186,16 +202,18 @@
 	if (!gencache_init()) {
 		return False;
 	}
+	
+	keybuf.dptr = CONST_DISCARD(char *, keystr);
+	keybuf.dsize = strlen(keystr)+1;
+	databuf = tdb_fetch(cache, keybuf);
 
-	databuf = tdb_fetch_bystring(cache, keystr);
-
 	if (databuf.dptr == NULL) {
 		DEBUG(10, ("Cache entry with key = %s couldn't be found\n",
 			   keystr));
 		return False;
 	}
 
-	t = strtol((const char *)databuf.dptr, &endptr, 10);
+	t = strtol(databuf.dptr, &endptr, 10);
 
 	if ((endptr == NULL) || (*endptr != '/')) {
 		DEBUG(2, ("Invalid gencache data format: %s\n", databuf.dptr));
@@ -210,7 +228,7 @@
 	if (t <= time(NULL)) {
 
 		/* We're expired, delete the entry */
-		tdb_delete_bystring(cache, keystr);
+		tdb_delete(cache, keybuf);
 
 		SAFE_FREE(databuf.dptr);
 		return False;
@@ -234,158 +252,8 @@
 	return True;
 } 
 
-/**
- * Get existing entry from the cache file.
- *
- * @param keystr string that represents a key of this entry
- * @param blob DATA_BLOB that is filled with entry's blob
- * @param expired pointer to a bool that indicates whether the entry is expired
- *
- * @retval true when entry is successfuly fetched
- * @retval False for failure
- **/
 
-bool gencache_get_data_blob(const char *keystr, DATA_BLOB *blob, bool *expired)
-{
-	TDB_DATA databuf;
-	time_t t;
-	char *blob_type;
-	unsigned char *buf = NULL;
-	bool ret = False;
-	fstring valstr;
-	int buflen = 0, len = 0, blob_len = 0;
-	unsigned char *blob_buf = NULL;
-
-	/* fail completely if get null pointers passed */
-	SMB_ASSERT(keystr);
-
-	if (!gencache_init()) {
-		return False;
-	}
-
-	databuf = tdb_fetch_bystring(cache, keystr);
-	if (!databuf.dptr) {
-		DEBUG(10,("Cache entry with key = %s couldn't be found\n",
-			  keystr));
-		return False;
-	}
-
-	buf = (unsigned char *)databuf.dptr;
-	buflen = databuf.dsize;
-
-	len += tdb_unpack(buf+len, buflen-len, "fB",
-			  &valstr,
-			  &blob_len, &blob_buf);
-	if (len == -1) {
-		goto out;
-	}
-
-	t = strtol(valstr, &blob_type, 10);
-
-	if (strcmp(blob_type+1, BLOB_TYPE) != 0) {
-		goto out;
-	}
-
-	DEBUG(10,("Returning %s cache entry: key = %s, "
-		  "timeout = %s", t > time(NULL) ? "valid" :
-		  "expired", keystr, ctime(&t)));
-
-	if (t <= time(NULL)) {
-		/* We're expired */
-		if (expired) {
-			*expired = True;
-		}
-	}
-
-	if (blob) {
-		*blob = data_blob(blob_buf, blob_len);
-		if (!blob->data) {
-			goto out;
-		}
-	}
-
-	ret = True;
- out:
-	SAFE_FREE(blob_buf);
-	SAFE_FREE(databuf.dptr);
-
-	return ret;
-}
-
 /**
- * Set an entry in the cache file. If there's no such
- * one, then add it.
- *
- * @param keystr string that represents a key of this entry
- * @param blob DATA_BLOB value being cached
- * @param timeout time when the value is expired
- *
- * @retval true when entry is successfuly stored
- * @retval false on failure
- **/
-
-bool gencache_set_data_blob(const char *keystr, const DATA_BLOB *blob, time_t timeout)
-{
-	bool ret = False;
-	int tdb_ret;
-	TDB_DATA databuf;
-	char *valstr = NULL;
-	unsigned char *buf = NULL;
-	int len = 0, buflen = 0;
-
-	/* fail completely if get null pointers passed */
-	SMB_ASSERT(keystr && blob);
-
-	if (!gencache_init()) {
-		return False;
-	}
-
-	if (asprintf(&valstr, "%12u/%s", (int)timeout, BLOB_TYPE) == -1) {
-		return False;
-	}
-
- again:
-	len = 0;
-
-	len += tdb_pack(buf+len, buflen-len, "fB",
-			valstr,
-			blob->length, blob->data);
-
-	if (len == -1) {
-		goto out;
-	}
-
-	if (buflen < len) {
-		SAFE_FREE(buf);
-		buf = SMB_MALLOC_ARRAY(unsigned char, len);
-		if (!buf) {
-			goto out;
-		}
-		buflen = len;
-		goto again;
-	}
-
-	databuf = make_tdb_data(buf, len);
-
-	DEBUG(10,("Adding cache entry with key = %s; "
-		  "blob size = %d and timeout = %s"
-		  "(%d seconds %s)\n", keystr, (int)databuf.dsize,
-		  ctime(&timeout), (int)(timeout - time(NULL)),
-		  timeout > time(NULL) ? "ahead" : "in the past"));
-
-	tdb_ret = tdb_store_bystring(cache, keystr, databuf, 0);
-	if (tdb_ret == 0) {
-		ret = True;
-	}
-
- out:
-	SAFE_FREE(valstr);
-	SAFE_FREE(buf);
-
-	return ret;
-}
-
-/**
  * Iterate through all entries which key matches to specified pattern
  *
  * @param fn pointer to the function that will be supplied with each single
@@ -419,7 +287,7 @@
 		char *fmt;
 
 		/* ensure null termination of the key string */
-		keystr = SMB_STRNDUP((const char *)node->node_key.dptr, node->node_key.dsize);
+		keystr = SMB_STRNDUP(node->node_key.dptr, node->node_key.dsize);
 		if (!keystr) {
 			break;
 		}
@@ -435,7 +303,7 @@
 			node = node->next;
 			continue;
 		}
-		entry = SMB_STRNDUP((const char *)databuf.dptr, databuf.dsize);
+		entry = SMB_STRNDUP(databuf.dptr, databuf.dsize);
 		if (!entry) {
 			SAFE_FREE(databuf.dptr);
 			SAFE_FREE(keystr);
@@ -451,9 +319,8 @@
 			break;
 		}
 
-		if (asprintf(&fmt, READ_CACHE_DATA_FMT_TEMPLATE,
-			     (unsigned int)databuf.dsize - TIMEOUT_LEN)
-		    == -1) {
+		asprintf(&fmt, READ_CACHE_DATA_FMT_TEMPLATE, (unsigned int)databuf.dsize - TIMEOUT_LEN);
+		if (!fmt) {
 			SAFE_FREE(valstr);
 			SAFE_FREE(entry);
 			SAFE_FREE(keystr);

Modified: branches/samba/upstream/source/lib/genrand.c
===================================================================
--- branches/samba/upstream/source/lib/genrand.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/genrand.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -24,7 +25,7 @@
 static unsigned char smb_arc4_state[258];
 static uint32 counter;
 
-static bool done_reseed = False;
+static BOOL done_reseed = False;
 static void (*reseed_callback)(int *newseed);
 
 /**************************************************************** 
@@ -86,7 +87,7 @@
  above...
 **************************************************************/
 
-static int do_reseed(bool use_fd, int fd)
+static int do_reseed(BOOL use_fd, int fd)
 {
 	unsigned char seed_inbuf[40];
 	uint32 v1, v2; struct timeval tval; pid_t mypid;

Modified: branches/samba/upstream/source/lib/hmacmd5.c
===================================================================
--- branches/samba/upstream/source/lib/hmacmd5.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/hmacmd5.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /* taken direct from rfc2104 implementation and modified for suitable use
@@ -121,8 +122,7 @@
  use the microsoft hmacmd5 init method because the key is 16 bytes.
 ************************************************************/
 
-void hmac_md5( unsigned char key[16], const unsigned char *data, int data_len,
-	       unsigned char *digest)
+void hmac_md5( unsigned char key[16], unsigned char *data, int data_len, unsigned char *digest)
 {
 	HMACMD5Context ctx;
 	hmac_md5_init_limK_to_64(key, 16, &ctx);

Modified: branches/samba/upstream/source/lib/iconv.c
===================================================================
--- branches/samba/upstream/source/lib/iconv.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/iconv.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -116,7 +117,7 @@
 
 static void lazy_initialize_iconv(void)
 {
-	static bool initialized;
+	static BOOL initialized;
 	int i;
 
 	if (!initialized) {
@@ -189,7 +190,7 @@
 }
 
 
-static bool is_utf16(const char *name)
+static BOOL is_utf16(const char *name)
 {
 	return strcasecmp(name, "UCS-2LE") == 0 ||
 		strcasecmp(name, "UTF-16LE") == 0;

Modified: branches/samba/upstream/source/lib/interface.c
===================================================================
--- branches/samba/upstream/source/lib/interface.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/interface.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,21 +1,21 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    multiple interface handling
    Copyright (C) Andrew Tridgell 1992-1998
-   Copyright (C) Jeremy Allison 2007
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -23,503 +23,192 @@
 static struct iface_struct *probed_ifaces;
 static int total_probed;
 
+struct in_addr allones_ip;
+struct in_addr loopback_ip;
+
 static struct interface *local_interfaces;
 
-/****************************************************************************
- Check if an IP is one of mine.
-**************************************************************************/
+#define ALLONES  ((uint32)0xFFFFFFFF)
+#define MKBCADDR(_IP, _NM) ((_IP & _NM) | (_NM ^ ALLONES))
+#define MKNETADDR(_IP, _NM) (_IP & _NM)
 
-bool ismyaddr(const struct sockaddr_storage *ip)
-{
-	struct interface *i;
-	for (i=local_interfaces;i;i=i->next) {
-		if (addr_equal(&i->ip,ip)) {
-			return true;
-		}
-	}
-	return false;
-}
-
-bool ismyip_v4(struct in_addr ip)
-{
-	struct sockaddr_storage ss;
-	in_addr_to_sockaddr_storage(&ss, ip);
-	return ismyaddr(&ss);
-}
-
 /****************************************************************************
- Try and find an interface that matches an ip. If we cannot, return NULL.
-**************************************************************************/
-
-static struct interface *iface_find(const struct sockaddr_storage *ip,
-				bool check_mask)
+Try and find an interface that matches an ip. If we cannot, return NULL
+  **************************************************************************/
+static struct interface *iface_find(struct in_addr ip, BOOL CheckMask)
 {
 	struct interface *i;
+	if (is_zero_ip(ip)) return local_interfaces;
 
-	if (is_address_any(ip)) {
-		return local_interfaces;
-	}
+	for (i=local_interfaces;i;i=i->next)
+		if (CheckMask) {
+			if (same_net(i->ip,ip,i->nmask)) return i;
+		} else if ((i->ip).s_addr == ip.s_addr) return i;
 
-	for (i=local_interfaces;i;i=i->next) {
-		if (check_mask) {
-			if (same_net(ip, &i->ip, &i->netmask)) {
-				return i;
-			}
-		} else if (addr_equal(&i->ip, ip)) {
-			return i;
-		}
-	}
-
 	return NULL;
 }
 
-/****************************************************************************
- Check if a packet is from a local (known) net.
-**************************************************************************/
 
-bool is_local_net(const struct sockaddr_storage *from)
-{
-	struct interface *i;
-	for (i=local_interfaces;i;i=i->next) {
-		if (same_net(from, &i->ip, &i->netmask)) {
-			return true;
-		}
-	}
-	return false;
-}
-
-#if defined(HAVE_IPV6)
-void setup_linklocal_scope_id(struct sockaddr_storage *pss)
-{
-	struct interface *i;
-	for (i=local_interfaces;i;i=i->next) {
-		if (addr_equal(&i->ip,pss)) {
-			struct sockaddr_in6 *psa6 =
-				(struct sockaddr_in6 *)pss;
-			psa6->sin6_scope_id = if_nametoindex(i->name);
-			return;
-		}
-	}
-}
-#endif
-
 /****************************************************************************
- Check if a packet is from a local (known) net.
-**************************************************************************/
-
-bool is_local_net_v4(struct in_addr from)
-{
-	struct sockaddr_storage ss;
-
-	in_addr_to_sockaddr_storage(&ss, from);
-	return is_local_net(&ss);
-}
-
-/****************************************************************************
- How many interfaces do we have ?
-**************************************************************************/
-
-int iface_count(void)
-{
-	int ret = 0;
-	struct interface *i;
-
-	for (i=local_interfaces;i;i=i->next) {
-		ret++;
-	}
-	return ret;
-}
-
-/****************************************************************************
- How many interfaces do we have (v4 only) ?
-**************************************************************************/
-
-int iface_count_v4(void)
-{
-	int ret = 0;
-	struct interface *i;
-
-	for (i=local_interfaces;i;i=i->next) {
-		if (i->ip.ss_family == AF_INET) {
-			ret++;
-		}
-	}
-	return ret;
-}
-
-/****************************************************************************
- Return a pointer to the in_addr of the first IPv4 interface.
-**************************************************************************/
-
-const struct in_addr *first_ipv4_iface(void)
-{
-	struct interface *i;
-
-	for (i=local_interfaces;i ;i=i->next) {
-		if (i->ip.ss_family == AF_INET) {
-			break;
-		}
-	}
-
-	if (!i) {
-		return NULL;
-	}
-	return &((const struct sockaddr_in *)&i->ip)->sin_addr;
-}
-
-/****************************************************************************
- Return the Nth interface.
-**************************************************************************/
-
-struct interface *get_interface(int n)
-{
-	struct interface *i;
-
-	for (i=local_interfaces;i && n;i=i->next) {
-		n--;
-	}
-
-	if (i) {
-		return i;
-	}
-	return NULL;
-}
-
-/****************************************************************************
- Return IP sockaddr_storage of the Nth interface.
-**************************************************************************/
-
-const struct sockaddr_storage *iface_n_sockaddr_storage(int n)
-{
-	struct interface *i;
-
-	for (i=local_interfaces;i && n;i=i->next) {
-		n--;
-	}
-
-	if (i) {
-		return &i->ip;
-	}
-	return NULL;
-}
-
-/****************************************************************************
- Return IPv4 of the Nth interface (if a v4 address). NULL otherwise.
-**************************************************************************/
-
-const struct in_addr *iface_n_ip_v4(int n)
-{
-	struct interface *i;
-
-	for (i=local_interfaces;i && n;i=i->next) {
-		n--;
-	}
-
-	if (i && i->ip.ss_family == AF_INET) {
-		return &((const struct sockaddr_in *)&i->ip)->sin_addr;
-	}
-	return NULL;
-}
-
-/****************************************************************************
- Return IPv4 bcast of the Nth interface (if a v4 address). NULL otherwise.
-**************************************************************************/
-
-const struct in_addr *iface_n_bcast_v4(int n)
-{
-	struct interface *i;
-
-	for (i=local_interfaces;i && n;i=i->next) {
-		n--;
-	}
-
-	if (i && i->ip.ss_family == AF_INET) {
-		return &((const struct sockaddr_in *)&i->bcast)->sin_addr;
-	}
-	return NULL;
-}
-
-/****************************************************************************
- Return bcast of the Nth interface.
-**************************************************************************/
-
-const struct sockaddr_storage *iface_n_bcast(int n)
-{
-	struct interface *i;
-
-	for (i=local_interfaces;i && n;i=i->next) {
-		n--;
-	}
-
-	if (i) {
-		return &i->bcast;
-	}
-	return NULL;
-}
-
-/* these 3 functions return the ip/bcast/nmask for the interface
-   most appropriate for the given ip address. If they can't find
-   an appropriate interface they return the requested field of the
-   first known interface. */
-
-const struct sockaddr_storage *iface_ip(const struct sockaddr_storage *ip)
-{
-	struct interface *i = iface_find(ip, true);
-	if (i) {
-		return &i->ip;
-	}
-
-	/* Search for the first interface with
-	 * matching address family. */
-
-	for (i=local_interfaces;i;i=i->next) {
-		if (i->ip.ss_family == ip->ss_family) {
-			return &i->ip;
-		}
-	}
-	return NULL;
-}
-
-/*
-  return True if a IP is directly reachable on one of our interfaces
-*/
-
-bool iface_local(const struct sockaddr_storage *ip)
-{
-	return iface_find(ip, True) ? true : false;
-}
-
-/****************************************************************************
- Add an interface to the linked list of interfaces.
+add an interface to the linked list of interfaces
 ****************************************************************************/
-
-static void add_interface(const struct iface_struct *ifs)
+static void add_interface(struct in_addr ip, struct in_addr nmask)
 {
-	char addr[INET6_ADDRSTRLEN];
 	struct interface *iface;
-
-	if (iface_find(&ifs->ip, False)) {
-		DEBUG(3,("add_interface: not adding duplicate interface %s\n",
-			print_sockaddr(addr, sizeof(addr), &ifs->ip) ));
+	if (iface_find(ip, False)) {
+		DEBUG(3,("not adding duplicate interface %s\n",inet_ntoa(ip)));
 		return;
 	}
 
-	if (!(ifs->flags & (IFF_BROADCAST|IFF_LOOPBACK))) {
-		DEBUG(3,("not adding non-broadcast interface %s\n",
-					ifs->name ));
+#if !defined(__s390__)
+	if (ip_equal(nmask, allones_ip)) {
+		DEBUG(3,("not adding non-broadcast interface %s\n",inet_ntoa(ip)));
 		return;
 	}
+#endif
 
 	iface = SMB_MALLOC_P(struct interface);
-	if (!iface) {
-		return;
-	}
-
+	if (!iface) return;
+	
 	ZERO_STRUCTPN(iface);
 
-	iface->name = SMB_STRDUP(ifs->name);
-	if (!iface->name) {
-		SAFE_FREE(iface);
-		return;
-	}
-	iface->flags = ifs->flags;
-	iface->ip = ifs->ip;
-	iface->netmask = ifs->netmask;
-	iface->bcast = ifs->bcast;
+	iface->ip = ip;
+	iface->nmask = nmask;
+	iface->bcast.s_addr = MKBCADDR(iface->ip.s_addr, iface->nmask.s_addr);
 
 	DLIST_ADD(local_interfaces, iface);
 
-	DEBUG(2,("added interface %s ip=%s ",
-		iface->name,
-		print_sockaddr(addr, sizeof(addr), &iface->ip) ));
-	DEBUG(2,("bcast=%s ",
-		print_sockaddr(addr, sizeof(addr),
-			&iface->bcast) ));
-	DEBUG(2,("netmask=%s\n",
-		print_sockaddr(addr, sizeof(addr),
-			&iface->netmask) ));
+	DEBUG(2,("added interface ip=%s ",inet_ntoa(iface->ip)));
+	DEBUG(2,("bcast=%s ",inet_ntoa(iface->bcast)));
+	DEBUG(2,("nmask=%s\n",inet_ntoa(iface->nmask)));	     
 }
 
+
+
 /****************************************************************************
- Interpret a single element from a interfaces= config line.
+interpret a single element from a interfaces= config line 
 
- This handles the following different forms:
+This handles the following different forms:
 
- 1) wildcard interface name
- 2) DNS name
- 3) IP/masklen
- 4) ip/mask
- 5) bcast/mask
+1) wildcard interface name
+2) DNS name
+3) IP/masklen
+4) ip/mask
+5) bcast/mask
 ****************************************************************************/
-
 static void interpret_interface(char *token)
 {
-	struct sockaddr_storage ss;
-	struct sockaddr_storage ss_mask;
-	struct sockaddr_storage ss_net;
-	struct sockaddr_storage ss_bcast;
-	struct iface_struct ifs;
+	struct in_addr ip, nmask;
 	char *p;
-	int i;
-	bool added=false;
-	bool goodaddr = false;
+	int i, added=0;
 
+        zero_ip(&ip);
+        zero_ip(&nmask);
+	
 	/* first check if it is an interface name */
 	for (i=0;i<total_probed;i++) {
 		if (gen_fnmatch(token, probed_ifaces[i].name) == 0) {
-			add_interface(&probed_ifaces[i]);
-			added = true;
+			add_interface(probed_ifaces[i].ip,
+				      probed_ifaces[i].netmask);
+			added = 1;
 		}
 	}
-	if (added) {
-		return;
-	}
+	if (added) return;
 
 	/* maybe it is a DNS name */
 	p = strchr_m(token,'/');
-	if (p == NULL) {
-		if (!interpret_string_addr(&ss, token, 0)) {
-			DEBUG(2, ("interpret_interface: Can't find address "
-				  "for %s\n", token));
-			return;
-		}
-
+	if (!p) {
+		ip = *interpret_addr2(token);
 		for (i=0;i<total_probed;i++) {
-			if (addr_equal(&ss, &probed_ifaces[i].ip)) {
-				add_interface(&probed_ifaces[i]);
+			if (ip.s_addr == probed_ifaces[i].ip.s_addr &&
+			    !ip_equal(allones_ip, probed_ifaces[i].netmask)) {
+				add_interface(probed_ifaces[i].ip,
+					      probed_ifaces[i].netmask);
 				return;
 			}
 		}
-		DEBUG(2,("interpret_interface: "
-			"can't determine interface for %s\n",
-			token));
+		DEBUG(2,("can't determine netmask for %s\n", token));
 		return;
 	}
 
 	/* parse it into an IP address/netmasklength pair */
 	*p = 0;
-	goodaddr = interpret_string_addr(&ss, token, 0);
+	ip = *interpret_addr2(token);
 	*p++ = '/';
 
-	if (!goodaddr) {
-		DEBUG(2,("interpret_interface: "
-			"can't determine interface for %s\n",
-			token));
-		return;
-	}
-
 	if (strlen(p) > 2) {
-		goodaddr = interpret_string_addr(&ss_mask, p, 0);
-		if (!goodaddr) {
-			DEBUG(2,("interpret_interface: "
-				"can't determine netmask from %s\n",
-				p));
-			return;
-		}
+		nmask = *interpret_addr2(p);
 	} else {
-		char *endp = NULL;
-		unsigned long val = strtoul(p, &endp, 0);
-		if (p == endp || (endp && *endp != '\0')) {
-			DEBUG(2,("interpret_interface: "
-				"can't determine netmask value from %s\n",
-				p));
-			return;
-		}
-		if (!make_netmask(&ss_mask, &ss, val)) {
-			DEBUG(2,("interpret_interface: "
-				"can't apply netmask value %lu from %s\n",
-				val,
-				p));
-			return;
-		}
+		nmask.s_addr = htonl(((ALLONES >> atoi(p)) ^ ALLONES));
 	}
 
-	make_bcast(&ss_bcast, &ss, &ss_mask);
-	make_net(&ss_net, &ss, &ss_mask);
-
-	/* Maybe the first component was a broadcast address. */
-	if (addr_equal(&ss_bcast, &ss) || addr_equal(&ss_net, &ss)) {
+	/* maybe the first component was a broadcast address */
+	if (ip.s_addr == MKBCADDR(ip.s_addr, nmask.s_addr) ||
+	    ip.s_addr == MKNETADDR(ip.s_addr, nmask.s_addr)) {
 		for (i=0;i<total_probed;i++) {
-			if (same_net(&ss, &probed_ifaces[i].ip, &ss_mask)) {
-				/* Temporarily replace netmask on
-				 * the detected interface - user knows
-				 * best.... */
-				struct sockaddr_storage saved_mask =
-					probed_ifaces[i].netmask;
-				probed_ifaces[i].netmask = ss_mask;
-				DEBUG(2,("interpret_interface: "
-					"using netmask value %s from "
-					"config file on interface %s\n",
-					p,
-					probed_ifaces[i].name));
-				add_interface(&probed_ifaces[i]);
-				probed_ifaces[i].netmask = saved_mask;
+			if (same_net(ip, probed_ifaces[i].ip, nmask)) {
+				add_interface(probed_ifaces[i].ip, nmask);
 				return;
 			}
 		}
-		DEBUG(2,("interpret_interface: Can't determine ip for "
-			"broadcast address %s\n",
-			token));
+		DEBUG(2,("Can't determine ip for broadcast address %s\n", token));
 		return;
 	}
 
-	/* Just fake up the interface definition. User knows best. */
-
-	DEBUG(2,("interpret_interface: Adding interface %s\n",
-		token));
-
-	ZERO_STRUCT(ifs);
-	safe_strcpy(ifs.name, token, sizeof(ifs.name)-1);
-	ifs.flags = IFF_BROADCAST;
-	ifs.ip = ss;
-	ifs.netmask = ss_mask;
-	ifs.bcast = ss_bcast;
-	add_interface(&ifs);
+	add_interface(ip, nmask);
 }
 
+
 /****************************************************************************
- Load the list of network interfaces.
+load the list of network interfaces
 ****************************************************************************/
-
 void load_interfaces(void)
 {
-	struct iface_struct ifaces[MAX_INTERFACES];
-	const char **ptr = lp_interfaces();
+	const char **ptr;
 	int i;
+	struct iface_struct ifaces[MAX_INTERFACES];
 
+	ptr = lp_interfaces();
+
+	allones_ip = *interpret_addr2("255.255.255.255");
+	loopback_ip = *interpret_addr2("127.0.0.1");
+
 	SAFE_FREE(probed_ifaces);
 
 	/* dump the current interfaces if any */
 	while (local_interfaces) {
 		struct interface *iface = local_interfaces;
 		DLIST_REMOVE(local_interfaces, local_interfaces);
-		SAFE_FREE(iface->name);
+		ZERO_STRUCTPN(iface);
 		SAFE_FREE(iface);
 	}
 
-	/* Probe the kernel for interfaces */
+	/* probe the kernel for interfaces */
 	total_probed = get_interfaces(ifaces, MAX_INTERFACES);
 
 	if (total_probed > 0) {
-		probed_ifaces = (struct iface_struct *)memdup(ifaces,
-				sizeof(ifaces[0])*total_probed);
+		probed_ifaces = (struct iface_struct *)memdup(ifaces, sizeof(ifaces[0])*total_probed);
 		if (!probed_ifaces) {
 			DEBUG(0,("ERROR: memdup failed\n"));
 			exit(1);
 		}
 	}
 
-	/* if we don't have a interfaces line then use all broadcast capable
+	/* if we don't have a interfaces line then use all broadcast capable 
 	   interfaces except loopback */
 	if (!ptr || !*ptr || !**ptr) {
 		if (total_probed <= 0) {
-			DEBUG(0,("ERROR: Could not determine network "
-			"interfaces, you must use a interfaces config line\n"));
+			DEBUG(0,("ERROR: Could not determine network interfaces, you must use a interfaces config line\n"));
 			exit(1);
 		}
 		for (i=0;i<total_probed;i++) {
-			if (probed_ifaces[i].flags & IFF_BROADCAST) {
-				add_interface(&probed_ifaces[i]);
+			if (
+#if !defined(__s390__)
+			    probed_ifaces[i].netmask.s_addr != allones_ip.s_addr &&
+#endif
+			    probed_ifaces[i].ip.s_addr != loopback_ip.s_addr) {
+				add_interface(probed_ifaces[i].ip, 
+					      probed_ifaces[i].netmask);
 			}
 		}
 		return;
@@ -547,7 +236,7 @@
 	while (local_interfaces) {
 		struct interface *iface = local_interfaces;
 		DLIST_REMOVE(local_interfaces, local_interfaces);
-		SAFE_FREE(iface->name);
+		ZERO_STRUCTPN(iface);
 		SAFE_FREE(iface);
 	}
 
@@ -555,10 +244,9 @@
 }
 
 /****************************************************************************
- Return True if the list of probed interfaces has changed.
+return True if the list of probed interfaces has changed
 ****************************************************************************/
-
-bool interfaces_changed(void)
+BOOL interfaces_changed(void)
 {
 	int n;
 	struct iface_struct ifaces[MAX_INTERFACES];
@@ -566,9 +254,110 @@
 	n = get_interfaces(ifaces, MAX_INTERFACES);
 
 	if ((n > 0 )&& (n != total_probed ||
-			memcmp(ifaces, probed_ifaces, sizeof(ifaces[0])*n))) {
-		return true;
+	    memcmp(ifaces, probed_ifaces, sizeof(ifaces[0])*n))) {
+		return True;
 	}
+	
+	return False;
+}
 
-	return false;
+
+/****************************************************************************
+  check if an IP is one of mine
+  **************************************************************************/
+BOOL ismyip(struct in_addr ip)
+{
+	struct interface *i;
+	for (i=local_interfaces;i;i=i->next)
+		if (ip_equal(i->ip,ip)) return True;
+	return False;
 }
+
+/****************************************************************************
+  check if a packet is from a local (known) net
+  **************************************************************************/
+BOOL is_local_net(struct in_addr from)
+{
+	struct interface *i;
+	for (i=local_interfaces;i;i=i->next) {
+		if((from.s_addr & i->nmask.s_addr) == 
+		   (i->ip.s_addr & i->nmask.s_addr))
+			return True;
+	}
+	return False;
+}
+
+/****************************************************************************
+  how many interfaces do we have
+  **************************************************************************/
+int iface_count(void)
+{
+	int ret = 0;
+	struct interface *i;
+
+	for (i=local_interfaces;i;i=i->next)
+		ret++;
+	return ret;
+}
+
+/****************************************************************************
+  return the Nth interface
+  **************************************************************************/
+struct interface *get_interface(int n)
+{ 
+	struct interface *i;
+  
+	for (i=local_interfaces;i && n;i=i->next)
+		n--;
+
+	if (i) return i;
+	return NULL;
+}
+
+/****************************************************************************
+  return IP of the Nth interface
+  **************************************************************************/
+struct in_addr *iface_n_ip(int n)
+{
+	struct interface *i;
+  
+	for (i=local_interfaces;i && n;i=i->next)
+		n--;
+
+	if (i) return &i->ip;
+	return NULL;
+}
+
+/****************************************************************************
+  return bcast of the Nth interface
+  **************************************************************************/
+struct in_addr *iface_n_bcast(int n)
+{
+	struct interface *i;
+  
+	for (i=local_interfaces;i && n;i=i->next)
+		n--;
+
+	if (i) return &i->bcast;
+	return NULL;
+}
+
+
+/* these 3 functions return the ip/bcast/nmask for the interface
+   most appropriate for the given ip address. If they can't find
+   an appropriate interface they return the requested field of the
+   first known interface. */
+
+struct in_addr *iface_ip(struct in_addr ip)
+{
+	struct interface *i = iface_find(ip, True);
+	return(i ? &i->ip : &local_interfaces->ip);
+}
+
+/*
+  return True if a IP is directly reachable on one of our interfaces
+*/
+BOOL iface_local(struct in_addr ip)
+{
+	return iface_find(ip, True) ? True : False;
+}

Modified: branches/samba/upstream/source/lib/interfaces.c
===================================================================
--- branches/samba/upstream/source/lib/interfaces.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/interfaces.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,21 +1,21 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    return a list of network interfaces
    Copyright (C) Andrew Tridgell 1998
-   Copyright (C) Jeremy Allison 2007
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 
@@ -46,10 +46,6 @@
 #include <netinet/in.h>
 #include <arpa/inet.h>
 
-#ifdef HAVE_IFADDRS_H
-#include <ifaddrs.h>
-#endif
-
 #ifdef HAVE_SYS_TIME_H
 #include <sys/time.h>
 #endif
@@ -84,244 +80,288 @@
 #include <net/if.h>
 #endif
 
-#define SOCKET_WRAPPER_NOT_REPLACE
 #include "interfaces.h"
-#include "lib/replace/replace.h"
 
-/****************************************************************************
- Utility functions.
-****************************************************************************/
+#if HAVE_IFACE_IFCONF
 
+/* this works for Linux 2.2, Solaris 2.5, SunOS4, HPUX 10.20, OSF1
+   V4.0, Ultrix 4.4, SCO Unix 3.2, IRIX 6.4 and FreeBSD 3.2.
+
+   It probably also works on any BSD style system.  */
+
 /****************************************************************************
- Create a struct sockaddr_storage with the netmask bits set to 1.
+  get the netmask address for a local interface
 ****************************************************************************/
+static int _get_interfaces(struct iface_struct *ifaces, int max_interfaces)
+{  
+	struct ifconf ifc;
+	char buff[8192];
+	int fd, i, n;
+	struct ifreq *ifr=NULL;
+	int total = 0;
+	struct in_addr ipaddr;
+	struct in_addr nmask;
+	char *iname;
 
-bool make_netmask(struct sockaddr_storage *pss_out,
-			const struct sockaddr_storage *pss_in,
-			unsigned long masklen)
-{
-	*pss_out = *pss_in;
-	/* Now apply masklen bits of mask. */
-#if defined(HAVE_IPV6)
-	if (pss_in->ss_family == AF_INET6) {
-		char *p = (char *)&((struct sockaddr_in6 *)pss_out)->sin6_addr;
-		unsigned int i;
+	if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
+		return -1;
+	}
+  
+	ifc.ifc_len = sizeof(buff);
+	ifc.ifc_buf = buff;
 
-		if (masklen > 128) {
-			return false;
+	if (ioctl(fd, SIOCGIFCONF, &ifc) != 0) {
+		close(fd);
+		return -1;
+	} 
+
+	ifr = ifc.ifc_req;
+  
+	n = ifc.ifc_len / sizeof(struct ifreq);
+
+	/* Loop through interfaces, looking for given IP address */
+	for (i=n-1;i>=0 && total < max_interfaces;i--) {
+		if (ioctl(fd, SIOCGIFADDR, &ifr[i]) != 0) {
+			continue;
 		}
-		for (i = 0; masklen >= 8; masklen -= 8, i++) {
-			*p++ = 0xff;
+
+		iname = ifr[i].ifr_name;
+		ipaddr = (*(struct sockaddr_in *)&ifr[i].ifr_addr).sin_addr;
+
+		if (ioctl(fd, SIOCGIFFLAGS, &ifr[i]) != 0) {
+			continue;
+		}  
+
+		if (!(ifr[i].ifr_flags & IFF_UP)) {
+			continue;
 		}
-		/* Deal with the partial byte. */
-		*p++ &= (0xff & ~(0xff>>masklen));
-		i++;
-		for (;i < sizeof(struct in6_addr); i++) {
-			*p++ = '\0';
-		}
-		return true;
-	}
-#endif
-	if (pss_in->ss_family == AF_INET) {
-		if (masklen > 32) {
-			return false;
-		}
-		((struct sockaddr_in *)pss_out)->sin_addr.s_addr =
-			htonl(((0xFFFFFFFFL >> masklen) ^ 0xFFFFFFFFL));
-		return true;
-	}
-	return false;
-}
 
-/****************************************************************************
- Create a struct sockaddr_storage set to the broadcast or network adress from
- an incoming sockaddr_storage.
-****************************************************************************/
+		if (ioctl(fd, SIOCGIFNETMASK, &ifr[i]) != 0) {
+			continue;
+		}  
 
-static void make_bcast_or_net(struct sockaddr_storage *pss_out,
-			const struct sockaddr_storage *pss_in,
-			const struct sockaddr_storage *nmask,
-			bool make_bcast_p)
-{
-	unsigned int i = 0, len = 0;
-	char *pmask = NULL;
-	char *p = NULL;
-	*pss_out = *pss_in;
+		nmask = ((struct sockaddr_in *)&ifr[i].ifr_addr)->sin_addr;
 
-	/* Set all zero netmask bits to 1. */
-#if defined(HAVE_IPV6)
-	if (pss_in->ss_family == AF_INET6) {
-		p = (char *)&((struct sockaddr_in6 *)pss_out)->sin6_addr;
-		pmask = (char *)&((struct sockaddr_in6 *)nmask)->sin6_addr;
-		len = 16;
+		strncpy(ifaces[total].name, iname, sizeof(ifaces[total].name)-1);
+		ifaces[total].name[sizeof(ifaces[total].name)-1] = 0;
+		ifaces[total].ip = ipaddr;
+		ifaces[total].netmask = nmask;
+		total++;
 	}
-#endif
-	if (pss_in->ss_family == AF_INET) {
-		p = (char *)&((struct sockaddr_in *)pss_out)->sin_addr;
-		pmask = (char *)&((struct sockaddr_in *)nmask)->sin_addr;
-		len = 4;
-	}
 
-	for (i = 0; i < len; i++, p++, pmask++) {
-		if (make_bcast_p) {
-			*p = (*p & *pmask) | (*pmask ^ 0xff);
-		} else {
-			/* make_net */
-			*p = (*p & *pmask);
-		}
-	}
-}
+	close(fd);
 
-void make_bcast(struct sockaddr_storage *pss_out,
-			const struct sockaddr_storage *pss_in,
-			const struct sockaddr_storage *nmask)
-{
-	make_bcast_or_net(pss_out, pss_in, nmask, true);
-}
+	return total;
+}  
 
-void make_net(struct sockaddr_storage *pss_out,
-			const struct sockaddr_storage *pss_in,
-			const struct sockaddr_storage *nmask)
-{
-	make_bcast_or_net(pss_out, pss_in, nmask, false);
-}
+#define _FOUND_IFACE_ANY
+#endif /* HAVE_IFACE_IFCONF */
+#ifdef HAVE_IFACE_IFREQ
 
-/****************************************************************************
- Try the "standard" getifaddrs/freeifaddrs interfaces.
- Also gets IPv6 interfaces.
-****************************************************************************/
+#ifndef I_STR
+#include <sys/stropts.h>
+#endif
 
 /****************************************************************************
- Get the netmask address for a local interface.
+this should cover most of the streams based systems
+Thanks to Andrej.Borsenkow at mow.siemens.ru for several ideas in this code
 ****************************************************************************/
-
 static int _get_interfaces(struct iface_struct *ifaces, int max_interfaces)
 {
-	struct ifaddrs *iflist = NULL;
-	struct ifaddrs *ifptr = NULL;
+	struct ifreq ifreq;
+	struct strioctl strioctl;
+	char buff[8192];
+	int fd, i, n;
+	struct ifreq *ifr=NULL;
 	int total = 0;
-	size_t copy_size;
+	struct in_addr ipaddr;
+	struct in_addr nmask;
+	char *iname;
 
-	if (getifaddrs(&iflist) < 0) {
+	if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
 		return -1;
 	}
+  
+	strioctl.ic_cmd = SIOCGIFCONF;
+	strioctl.ic_dp  = buff;
+	strioctl.ic_len = sizeof(buff);
+	if (ioctl(fd, I_STR, &strioctl) < 0) {
+		close(fd);
+		return -1;
+	} 
 
-	/* Loop through interfaces, looking for given IP address */
-	for (ifptr = iflist, total = 0;
-			ifptr != NULL && total < max_interfaces;
-			ifptr = ifptr->ifa_next) {
+	/* we can ignore the possible sizeof(int) here as the resulting
+	   number of interface structures won't change */
+	n = strioctl.ic_len / sizeof(struct ifreq);
 
-		memset(&ifaces[total], '\0', sizeof(ifaces[total]));
+	/* we will assume that the kernel returns the length as an int
+           at the start of the buffer if the offered size is a
+           multiple of the structure size plus an int */
+	if (n*sizeof(struct ifreq) + sizeof(int) == strioctl.ic_len) {
+		ifr = (struct ifreq *)(buff + sizeof(int));  
+	} else {
+		ifr = (struct ifreq *)buff;  
+	}
 
-		copy_size = sizeof(struct sockaddr_in);
+	/* Loop through interfaces */
 
-		if (!ifptr->ifa_addr || !ifptr->ifa_netmask) {
+	for (i = 0; i<n && total < max_interfaces; i++) {
+		ifreq = ifr[i];
+  
+		strioctl.ic_cmd = SIOCGIFFLAGS;
+		strioctl.ic_dp  = (char *)&ifreq;
+		strioctl.ic_len = sizeof(struct ifreq);
+		if (ioctl(fd, I_STR, &strioctl) != 0) {
 			continue;
 		}
-
-		ifaces[total].flags = ifptr->ifa_flags;
-
-		/* Check the interface is up. */
-		if (!(ifaces[total].flags & IFF_UP)) {
+		
+		if (!(ifreq.ifr_flags & IFF_UP)) {
 			continue;
 		}
 
-#if defined(HAVE_IPV6)
-		if (ifptr->ifa_addr->sa_family == AF_INET6) {
-			copy_size = sizeof(struct sockaddr_in6);
+		strioctl.ic_cmd = SIOCGIFADDR;
+		strioctl.ic_dp  = (char *)&ifreq;
+		strioctl.ic_len = sizeof(struct ifreq);
+		if (ioctl(fd, I_STR, &strioctl) != 0) {
+			continue;
 		}
-#endif
 
-		memcpy(&ifaces[total].ip, ifptr->ifa_addr, copy_size);
-		memcpy(&ifaces[total].netmask, ifptr->ifa_netmask, copy_size);
+		ipaddr = (*(struct sockaddr_in *) &ifreq.ifr_addr).sin_addr;
+		iname = ifreq.ifr_name;
 
-		if (ifaces[total].flags & (IFF_BROADCAST|IFF_LOOPBACK)) {
-			make_bcast(&ifaces[total].bcast,
-				&ifaces[total].ip,
-				&ifaces[total].netmask);
-		} else if ((ifaces[total].flags & IFF_POINTOPOINT) &&
-			       ifptr->ifa_dstaddr ) {
-			memcpy(&ifaces[total].bcast,
-				ifptr->ifa_dstaddr,
-				copy_size);
-		} else {
+		strioctl.ic_cmd = SIOCGIFNETMASK;
+		strioctl.ic_dp  = (char *)&ifreq;
+		strioctl.ic_len = sizeof(struct ifreq);
+		if (ioctl(fd, I_STR, &strioctl) != 0) {
 			continue;
 		}
 
-		strlcpy(ifaces[total].name, ifptr->ifa_name,
-			sizeof(ifaces[total].name));
+		nmask = ((struct sockaddr_in *)&ifreq.ifr_addr)->sin_addr;
+
+		strncpy(ifaces[total].name, iname, sizeof(ifaces[total].name)-1);
+		ifaces[total].name[sizeof(ifaces[total].name)-1] = 0;
+		ifaces[total].ip = ipaddr;
+		ifaces[total].netmask = nmask;
+
 		total++;
 	}
 
-	freeifaddrs(iflist);
+	close(fd);
 
 	return total;
 }
 
-static int iface_comp(struct iface_struct *i1, struct iface_struct *i2)
+#define _FOUND_IFACE_ANY
+#endif /* HAVE_IFACE_IFREQ */
+#ifdef HAVE_IFACE_AIX
+
+/****************************************************************************
+this one is for AIX (tested on 4.2)
+****************************************************************************/
+static int _get_interfaces(struct iface_struct *ifaces, int max_interfaces)
 {
-	int r;
+	char buff[8192];
+	int fd, i;
+	struct ifconf ifc;
+	struct ifreq *ifr=NULL;
+	struct in_addr ipaddr;
+	struct in_addr nmask;
+	char *iname;
+	int total = 0;
 
-#if defined(HAVE_IPV6)
-	/*
-	 * If we have IPv6 - sort these interfaces lower
-	 * than any IPv4 ones.
-	 */
-	if (i1->ip.ss_family == AF_INET6 &&
-			i2->ip.ss_family == AF_INET) {
+	if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
 		return -1;
-	} else if (i1->ip.ss_family == AF_INET &&
-			i2->ip.ss_family == AF_INET6) {
-		return 1;
 	}
 
-	if (i1->ip.ss_family == AF_INET6) {
-		struct sockaddr_in6 *s1 = (struct sockaddr_in6 *)&i1->ip;
-		struct sockaddr_in6 *s2 = (struct sockaddr_in6 *)&i2->ip;
 
-		r = memcmp(&s1->sin6_addr,
-				&s2->sin6_addr,
-				sizeof(struct in6_addr));
-		if (r) {
-			return r;
-		}
+	ifc.ifc_len = sizeof(buff);
+	ifc.ifc_buf = buff;
 
-		s1 = (struct sockaddr_in6 *)&i1->netmask;
-		s2 = (struct sockaddr_in6 *)&i2->netmask;
+	if (ioctl(fd, SIOCGIFCONF, &ifc) != 0) {
+		close(fd);
+		return -1;
+	}
 
-		r = memcmp(&s1->sin6_addr,
-				&s2->sin6_addr,
-				sizeof(struct in6_addr));
-		if (r) {
-			return r;
+	ifr = ifc.ifc_req;
+
+	/* Loop through interfaces */
+	i = ifc.ifc_len;
+
+	while (i > 0 && total < max_interfaces) {
+		uint_t inc;
+
+		inc = ifr->ifr_addr.sa_len;
+
+		if (ioctl(fd, SIOCGIFADDR, ifr) != 0) {
+			goto next;
 		}
-	}
-#endif
 
-	/* AIX uses __ss_family instead of ss_family inside of
-	   sockaddr_storage. Instead of trying to figure out which field to
-	   use, we can just cast it to a sockaddr.
-	 */
+		ipaddr = (*(struct sockaddr_in *) &ifr->ifr_addr).sin_addr;
+		iname = ifr->ifr_name;
 
-	if (((struct sockaddr *)&i1->ip)->sa_family == AF_INET) {
-		struct sockaddr_in *s1 = (struct sockaddr_in *)&i1->ip;
-		struct sockaddr_in *s2 = (struct sockaddr_in *)&i2->ip;
+		if (ioctl(fd, SIOCGIFFLAGS, ifr) != 0) {
+			goto next;
+		}
 
-		r = ntohl(s1->sin_addr.s_addr) -
-			ntohl(s2->sin_addr.s_addr);
-		if (r) {
-			return r;
+		if (!(ifr->ifr_flags & IFF_UP)) {
+			goto next;
 		}
 
-		s1 = (struct sockaddr_in *)&i1->netmask;
-		s2 = (struct sockaddr_in *)&i2->netmask;
+		if (ioctl(fd, SIOCGIFNETMASK, ifr) != 0) {
+			goto next;
+		}
 
-		return ntohl(s1->sin_addr.s_addr) -
-			ntohl(s2->sin_addr.s_addr);
+		nmask = ((struct sockaddr_in *)&ifr->ifr_addr)->sin_addr;
+
+		strncpy(ifaces[total].name, iname, sizeof(ifaces[total].name)-1);
+		ifaces[total].name[sizeof(ifaces[total].name)-1] = 0;
+		ifaces[total].ip = ipaddr;
+		ifaces[total].netmask = nmask;
+
+		total++;
+
+	next:
+		/*
+		 * Patch from Archie Cobbs (archie at whistle.com).  The
+		 * addresses in the SIOCGIFCONF interface list have a
+		 * minimum size. Usually this doesn't matter, but if
+		 * your machine has tunnel interfaces, etc. that have
+		 * a zero length "link address", this does matter.  */
+
+		if (inc < sizeof(ifr->ifr_addr))
+			inc = sizeof(ifr->ifr_addr);
+		inc += IFNAMSIZ;
+
+		ifr = (struct ifreq*) (((char*) ifr) + inc);
+		i -= inc;
 	}
-	return 0;
+  
+
+	close(fd);
+	return total;
 }
 
+#define _FOUND_IFACE_ANY
+#endif /* HAVE_IFACE_AIX */
+#ifndef _FOUND_IFACE_ANY
+static int _get_interfaces(struct iface_struct *ifaces, int max_interfaces)
+{
+	return -1;
+}
+#endif
+
+
+static int iface_comp(struct iface_struct *i1, struct iface_struct *i2)
+{
+	int r;
+	r = strcmp(i1->name, i2->name);
+	if (r) return r;
+	r = ntohl(i1->ip.s_addr) - ntohl(i2->ip.s_addr);
+	if (r) return r;
+	r = ntohl(i1->netmask.s_addr) - ntohl(i2->netmask.s_addr);
+	return r;
+}
+
 int get_interfaces(struct iface_struct *ifaces, int max_interfaces);
 /* this wrapper is used to remove duplicates from the interface list generated
    above */
@@ -349,3 +389,24 @@
 	return total;
 }
 
+
+#ifdef AUTOCONF_TEST
+/* this is the autoconf driver to test get_interfaces() */
+
+ int main()
+{
+	struct iface_struct ifaces[MAX_INTERFACES];
+	int total = get_interfaces(ifaces, MAX_INTERFACES);
+	int i;
+
+	printf("got %d interfaces:\n", total);
+	if (total <= 0) exit(1);
+
+	for (i=0;i<total;i++) {
+		printf("%-10s ", ifaces[i].name);
+		printf("IP=%s ", inet_ntoa(ifaces[i].ip));
+		printf("NETMASK=%s\n", inet_ntoa(ifaces[i].netmask));
+	}
+	return 0;
+}
+#endif

Modified: branches/samba/upstream/source/lib/ldap_debug_handler.c
===================================================================
--- branches/samba/upstream/source/lib/ldap_debug_handler.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/ldap_debug_handler.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 3 of the License, or (at your option)
+ * Software Foundation; either version 2 of the License, or (at your option)
  * any later version.
  *
  * This program is distributed in the hope that it will be useful, but WITHOUT

Modified: branches/samba/upstream/source/lib/ldap_escape.c
===================================================================
--- branches/samba/upstream/source/lib/ldap_escape.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/ldap_escape.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/source/lib/md4.c
===================================================================
--- branches/samba/upstream/source/lib/md4.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/md4.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -24,14 +25,7 @@
    It assumes that a int is at least 32 bits long
 */
 
-#if 0
 static uint32 A, B, C, D;
-#else
-#define A (state[0])
-#define B (state[1])
-#define C (state[2])
-#define D (state[3])
-#endif
 
 static uint32 F(uint32 X, uint32 Y, uint32 Z)
 {
@@ -59,7 +53,7 @@
 #define ROUND3(a,b,c,d,k,s) a = lshift(a + H(b,c,d) + X[k] + (uint32)0x6ED9EBA1,s)
 
 /* this applies md4 to 64 byte chunks */
-static void mdfour64(uint32_t *state, uint32 *M)
+static void mdfour64(uint32 *M)
 {
 	int j;
 	uint32 AA, BB, CC, DD;
@@ -128,7 +122,6 @@
 {
 	unsigned char buf[128];
 	uint32 M[16];
-	uint32 state[4];
 	uint32 b = n * 8;
 	int i;
 
@@ -139,7 +132,7 @@
 
 	while (n > 64) {
 		copy64(M, in);
-		mdfour64(state, M);
+		mdfour64(M);
 		in += 64;
 		n -= 64;
 	}
@@ -152,13 +145,13 @@
 	if (n <= 55) {
 		copy4(buf+56, b);
 		copy64(M, buf);
-		mdfour64(state, M);
+		mdfour64(M);
 	} else {
 		copy4(buf+120, b); 
 		copy64(M, buf);
-		mdfour64(state, M);
+		mdfour64(M);
 		copy64(M, buf+64);
-		mdfour64(state, M);
+		mdfour64(M);
 	}
 
 	for (i=0;i<128;i++)
@@ -169,6 +162,8 @@
 	copy4(out+4, B);
 	copy4(out+8, C);
 	copy4(out+12, D);
+
+	A = B = C = D = 0;
 }
 
 

Deleted: branches/samba/upstream/source/lib/memcache.c
===================================================================
--- branches/samba/upstream/source/lib/memcache.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/memcache.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,417 +0,0 @@
-/*
-   Unix SMB/CIFS implementation.
-   In-memory cache
-   Copyright (C) Volker Lendecke 2007
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "memcache.h"
-#include "rbtree.h"
-
-static struct memcache *global_cache;
-
-struct memcache_element {
-	struct rb_node rb_node;
-	struct memcache_element *prev, *next;
-	size_t keylength, valuelength;
-	uint8 n;		/* This is really an enum, but save memory */
-	char data[1];		/* placeholder for offsetof */
-};
-
-struct memcache {
-	struct memcache_element *mru, *lru;
-	struct rb_root tree;
-	size_t size;
-	size_t max_size;
-};
-
-static void memcache_element_parse(struct memcache_element *e,
-				   DATA_BLOB *key, DATA_BLOB *value);
-
-static bool memcache_is_talloc(enum memcache_number n)
-{
-	bool result;
-
-	switch (n) {
-	case GETPWNAM_CACHE:
-	case PDB_GETPWSID_CACHE:
-	case SINGLETON_CACHE_TALLOC:
-		result = true;
-		break;
-	default:
-		result = false;
-		break;
-	}
-
-	return result;
-}
-
-static int memcache_destructor(struct memcache *cache) {
-	struct memcache_element *e, *next;
-
-	for (e = cache->mru; e != NULL; e = next) {
-		next = e->next;
-		if (memcache_is_talloc((enum memcache_number)e->n)
-		    && (e->valuelength == sizeof(void *))) {
-			DATA_BLOB key, value;
-			void *ptr;
-			memcache_element_parse(e, &key, &value);
-			memcpy(&ptr, value.data, sizeof(ptr));
-			TALLOC_FREE(ptr);
-		}
-		SAFE_FREE(e);
-	}
-	return 0;
-}
-
-struct memcache *memcache_init(TALLOC_CTX *mem_ctx, size_t max_size)
-{
-	struct memcache *result;
-
-	result = TALLOC_ZERO_P(mem_ctx, struct memcache);
-	if (result == NULL) {
-		return NULL;
-	}
-	result->max_size = max_size;
-	talloc_set_destructor(result, memcache_destructor);
-	return result;
-}
-
-void memcache_set_global(struct memcache *cache)
-{
-	TALLOC_FREE(global_cache);
-	global_cache = cache;
-}
-
-static struct memcache_element *memcache_node2elem(struct rb_node *node)
-{
-	return (struct memcache_element *)
-		((char *)node - offsetof(struct memcache_element, rb_node));
-}
-
-static void memcache_element_parse(struct memcache_element *e,
-				   DATA_BLOB *key, DATA_BLOB *value)
-{
-	key->data = ((uint8 *)e) + offsetof(struct memcache_element, data);
-	key->length = e->keylength;
-	value->data = key->data + e->keylength;
-	value->length = e->valuelength;
-}
-
-static size_t memcache_element_size(size_t key_length, size_t value_length)
-{
-	return sizeof(struct memcache_element) - 1 + key_length + value_length;
-}
-
-static int memcache_compare(struct memcache_element *e, enum memcache_number n,
-			    DATA_BLOB key)
-{
-	DATA_BLOB this_key, this_value;
-
-	if ((int)e->n < (int)n) return 1;
-	if ((int)e->n > (int)n) return -1;
-
-	if (e->keylength < key.length) return 1;
-	if (e->keylength > key.length) return -1;
-
-	memcache_element_parse(e, &this_key, &this_value);
-	return memcmp(this_key.data, key.data, key.length);
-}
-
-static struct memcache_element *memcache_find(
-	struct memcache *cache, enum memcache_number n, DATA_BLOB key)
-{
-	struct rb_node *node;
-
-	node = cache->tree.rb_node;
-
-	while (node != NULL) {
-		struct memcache_element *elem = memcache_node2elem(node);
-		int cmp;
-
-		cmp = memcache_compare(elem, n, key);
-		if (cmp == 0) {
-			return elem;
-		}
-		node = (cmp < 0) ? node->rb_left : node->rb_right;
-	}
-
-	return NULL;
-}
-
-bool memcache_lookup(struct memcache *cache, enum memcache_number n,
-		     DATA_BLOB key, DATA_BLOB *value)
-{
-	struct memcache_element *e;
-
-	if (cache == NULL) {
-		cache = global_cache;
-	}
-	if (cache == NULL) {
-		return false;
-	}
-
-	e = memcache_find(cache, n, key);
-	if (e == NULL) {
-		return false;
-	}
-
-	if (cache->size != 0) {
-		/*
-		 * Do LRU promotion only when we will ever shrink
-		 */
-		if (e == cache->lru) {
-			cache->lru = e->prev;
-		}
-		DLIST_PROMOTE(cache->mru, e);
-		if (cache->mru == NULL) {
-			cache->mru = e;
-		}
-	}
-
-	memcache_element_parse(e, &key, value);
-	return true;
-}
-
-void *memcache_lookup_talloc(struct memcache *cache, enum memcache_number n,
-			     DATA_BLOB key)
-{
-	DATA_BLOB value;
-	void *result;
-
-	if (!memcache_lookup(cache, n, key, &value)) {
-		return NULL;
-	}
-
-	if (value.length != sizeof(result)) {
-		return NULL;
-	}
-
-	memcpy(&result, value.data, sizeof(result));
-
-	return result;
-}
-
-static void memcache_delete_element(struct memcache *cache,
-				    struct memcache_element *e)
-{
-	rb_erase(&e->rb_node, &cache->tree);
-
-	if (e == cache->lru) {
-		cache->lru = e->prev;
-	}
-	DLIST_REMOVE(cache->mru, e);
-
-	cache->size -= memcache_element_size(e->keylength, e->valuelength);
-
-	SAFE_FREE(e);
-}
-
-static void memcache_trim(struct memcache *cache)
-{
-	if (cache->max_size == 0) {
-		return;
-	}
-
-	while ((cache->size > cache->max_size) && (cache->lru != NULL)) {
-		memcache_delete_element(cache, cache->lru);
-	}
-}
-
-void memcache_delete(struct memcache *cache, enum memcache_number n,
-		     DATA_BLOB key)
-{
-	struct memcache_element *e;
-
-	if (cache == NULL) {
-		cache = global_cache;
-	}
-	if (cache == NULL) {
-		return;
-	}
-
-	e = memcache_find(cache, n, key);
-	if (e == NULL) {
-		return;
-	}
-
-	memcache_delete_element(cache, e);
-}
-
-void memcache_add(struct memcache *cache, enum memcache_number n,
-		  DATA_BLOB key, DATA_BLOB value)
-{
-	struct memcache_element *e;
-	struct rb_node **p;
-	struct rb_node *parent;
-	DATA_BLOB cache_key, cache_value;
-	size_t element_size;
-
-	if (cache == NULL) {
-		cache = global_cache;
-	}
-	if (cache == NULL) {
-		return;
-	}
-
-	if (key.length == 0) {
-		return;
-	}
-
-	e = memcache_find(cache, n, key);
-
-	if (e != NULL) {
-		memcache_element_parse(e, &cache_key, &cache_value);
-
-		if (value.length <= cache_value.length) {
-			/*
-			 * We can reuse the existing record
-			 */
-			memcpy(cache_value.data, value.data, value.length);
-			e->valuelength = value.length;
-			return;
-		}
-
-		memcache_delete_element(cache, e);
-	}
-
-	element_size = memcache_element_size(key.length, value.length);
-
-
-	e = (struct memcache_element *)SMB_MALLOC(element_size);
-
-	if (e == NULL) {
-		DEBUG(0, ("malloc failed\n"));
-		return;
-	}
-
-	e->n = n;
-	e->keylength = key.length;
-	e->valuelength = value.length;
-
-	memcache_element_parse(e, &cache_key, &cache_value);
-	memcpy(cache_key.data, key.data, key.length);
-	memcpy(cache_value.data, value.data, value.length);
-
-	parent = NULL;
-	p = &cache->tree.rb_node;
-
-	while (*p) {
-		struct memcache_element *elem = memcache_node2elem(*p);
-		int cmp;
-
-		parent = (*p);
-
-		cmp = memcache_compare(elem, n, key);
-
-		p = (cmp < 0) ? &(*p)->rb_left : &(*p)->rb_right;
-	}
-
-	rb_link_node(&e->rb_node, parent, p);
-	rb_insert_color(&e->rb_node, &cache->tree);
-
-	DLIST_ADD(cache->mru, e);
-	if (cache->lru == NULL) {
-		cache->lru = e;
-	}
-
-	cache->size += element_size;
-	memcache_trim(cache);
-}
-
-void memcache_add_talloc(struct memcache *cache, enum memcache_number n,
-			 DATA_BLOB key, void *ptr)
-{
-	memcache_add(cache, n, key, data_blob_const(&ptr, sizeof(ptr)));
-}
-
-void memcache_flush(struct memcache *cache, enum memcache_number n)
-{
-	struct rb_node *node;
-
-	if (cache == NULL) {
-		cache = global_cache;
-	}
-	if (cache == NULL) {
-		return;
-	}
-
-	/*
-	 * Find the smallest element of number n
-	 */
-
-	node = cache->tree.rb_node;
-	if (node == NULL) {
-		return;
-	}
-
-	/*
-	 * First, find *any* element of number n
-	 */
-
-	while (true) {
-		struct memcache_element *elem = memcache_node2elem(node);
-		struct rb_node *next;
-
-		if ((int)elem->n == (int)n) {
-			break;
-		}
-
-		if ((int)elem->n < (int)n) {
-			next = node->rb_right;
-		}
-		else {
-			next = node->rb_left;
-		}
-		if (next == NULL) {
-			break;
-		}
-		node = next;
-	}
-
-	if (node == NULL) {
-		return;
-	}
-
-	/*
-	 * Then, find the leftmost element with number n
-	 */
-
-	while (true) {
-		struct rb_node *prev = rb_prev(node);
-		struct memcache_element *elem;
-
-		if (prev == NULL) {
-			break;
-		}
-		elem = memcache_node2elem(prev);
-		if ((int)elem->n != (int)n) {
-			break;
-		}
-		node = prev;
-	}
-
-	while (node != NULL) {
-		struct memcache_element *e = memcache_node2elem(node);
-		struct rb_node *next = rb_next(node);
-
-		if (e->n != n) {
-			break;
-		}
-
-		memcache_delete_element(cache, e);
-		node = next;
-	}
-}

Modified: branches/samba/upstream/source/lib/messages.c
===================================================================
--- branches/samba/upstream/source/lib/messages.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/messages.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,11 +4,10 @@
    Copyright (C) Andrew Tridgell 2000
    Copyright (C) 2001 by Martin Pool
    Copyright (C) 2002 by Jeremy Allison
-   Copyright (C) 2007 by Volker Lendecke
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /**
@@ -46,48 +46,572 @@
 */
 
 #include "includes.h"
-#include "librpc/gen_ndr/messaging.h"
-#include "librpc/gen_ndr/ndr_messaging.h"
 
-struct messaging_callback {
-	struct messaging_callback *prev, *next;
-	uint32 msg_type;
-	void (*fn)(struct messaging_context *msg, void *private_data, 
-		   uint32_t msg_type, 
-		   struct server_id server_id, DATA_BLOB *data);
-	void *private_data;
+/* the locking database handle */
+static TDB_CONTEXT *tdb;
+static int received_signal;
+
+/* change the message version with any incompatible changes in the protocol */
+#define MESSAGE_VERSION 1
+
+struct message_rec {
+	int msg_version;
+	int msg_type;
+	struct process_id dest;
+	struct process_id src;
+	size_t len;
 };
 
+/* we have a linked list of dispatch handlers */
+static struct dispatch_fns {
+	struct dispatch_fns *next, *prev;
+	int msg_type;
+	void (*fn)(int msg_type, struct process_id pid, void *buf, size_t len,
+		   void *private_data);
+	void *private_data;
+} *dispatch_fns;
+
 /****************************************************************************
+ Free global objects.
+****************************************************************************/
+
+void gfree_messages(void)
+{
+	struct dispatch_fns *dfn, *next;
+
+	/* delete the dispatch_fns list */
+	dfn = dispatch_fns;
+	while( dfn ) {
+		next = dfn->next;
+		DLIST_REMOVE(dispatch_fns, dfn);
+		SAFE_FREE(dfn);
+		dfn = next;
+	}
+}
+
+/****************************************************************************
+ Notifications come in as signals.
+****************************************************************************/
+
+static void sig_usr1(void)
+{
+	received_signal = 1;
+	sys_select_signal(SIGUSR1);
+}
+
+/****************************************************************************
  A useful function for testing the message system.
 ****************************************************************************/
 
-static void ping_message(struct messaging_context *msg_ctx,
-			 void *private_data,
-			 uint32_t msg_type,
-			 struct server_id src,
-			 DATA_BLOB *data)
+static void ping_message(int msg_type, struct process_id src,
+			 void *buf, size_t len, void *private_data)
 {
-	const char *msg = data->data ? (const char *)data->data : "none";
+	const char *msg = buf ? (const char *)buf : "none";
 
 	DEBUG(1,("INFO: Received PING message from PID %s [%s]\n",
 		 procid_str_static(&src), msg));
-	messaging_send(msg_ctx, src, MSG_PONG, data);
+	message_send_pid(src, MSG_PONG, buf, len, True);
 }
 
 /****************************************************************************
+ Initialise the messaging functions. 
+****************************************************************************/
+
+BOOL message_init(void)
+{
+	sec_init();
+
+	if (tdb)
+		return True;
+
+	tdb = tdb_open_log(lock_path("messages.tdb"), 
+		       0, TDB_CLEAR_IF_FIRST|TDB_DEFAULT, 
+		       O_RDWR|O_CREAT,0600);
+
+	if (!tdb) {
+		DEBUG(0,("ERROR: Failed to initialise messages database\n"));
+		return False;
+	}
+
+	/* Activate the per-hashchain freelist */
+	tdb_set_max_dead(tdb, 5);
+
+	CatchSignal(SIGUSR1, SIGNAL_CAST sig_usr1);
+
+	message_register(MSG_PING, ping_message, NULL);
+
+	/* Register some debugging related messages */
+
+	register_msg_pool_usage();
+	register_dmalloc_msgs();
+
+	return True;
+}
+
+/*******************************************************************
+ Form a static tdb key from a pid.
+******************************************************************/
+
+static TDB_DATA message_key_pid(struct process_id pid)
+{
+	static char key[20];
+	TDB_DATA kbuf;
+
+	slprintf(key, sizeof(key)-1, "PID/%s", procid_str_static(&pid));
+	
+	kbuf.dptr = (char *)key;
+	kbuf.dsize = strlen(key)+1;
+	return kbuf;
+}
+
+/****************************************************************************
+ Notify a process that it has a message. If the process doesn't exist 
+ then delete its record in the database.
+****************************************************************************/
+
+static NTSTATUS message_notify(struct process_id procid)
+{
+	pid_t pid = procid.pid;
+	int ret;
+	uid_t euid = geteuid();
+
+	/*
+	 * Doing kill with a non-positive pid causes messages to be
+	 * sent to places we don't want.
+	 */
+
+	SMB_ASSERT(pid > 0);
+
+	if (euid != 0) {
+		/* If we're not root become so to send the message. */
+		save_re_uid();
+		set_effective_uid(0);
+	}
+
+	ret = kill(pid, SIGUSR1);
+
+	if (euid != 0) {
+		/* Go back to who we were. */
+		int saved_errno = errno;
+		restore_re_uid_fromroot();
+		errno = saved_errno;
+	}
+
+	if (ret == -1) {
+		if (errno == ESRCH) {
+			DEBUG(2,("pid %d doesn't exist - deleting messages record\n",
+				 (int)pid));
+			tdb_delete(tdb, message_key_pid(procid));
+
+			/*
+			 * INVALID_HANDLE is the closest I can think of -- vl
+			 */
+			return NT_STATUS_INVALID_HANDLE;
+		}
+
+		DEBUG(2,("message to process %d failed - %s\n", (int)pid,
+			 strerror(errno)));
+
+		/*
+		 * No call to map_nt_error_from_unix -- don't want to link in
+		 * errormap.o into lots of utils.
+		 */
+
+		if (errno == EINVAL) return NT_STATUS_INVALID_PARAMETER;
+		if (errno == EPERM)  return NT_STATUS_ACCESS_DENIED;
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	return NT_STATUS_OK;
+}
+
+/****************************************************************************
+ Send a message to a particular pid.
+****************************************************************************/
+
+static NTSTATUS message_send_pid_internal(struct process_id pid, int msg_type,
+					  const void *buf, size_t len,
+					  BOOL duplicates_allowed,
+					  unsigned int timeout)
+{
+	TDB_DATA kbuf;
+	TDB_DATA dbuf;
+	TDB_DATA old_dbuf;
+	struct message_rec rec;
+	char *ptr;
+	struct message_rec prec;
+
+	/* NULL pointer means implicit length zero. */
+	if (!buf) {
+		SMB_ASSERT(len == 0);
+	}
+
+	/*
+	 * Doing kill with a non-positive pid causes messages to be
+	 * sent to places we don't want.
+	 */
+
+	SMB_ASSERT(procid_to_pid(&pid) > 0);
+
+	rec.msg_version = MESSAGE_VERSION;
+	rec.msg_type = msg_type;
+	rec.dest = pid;
+	rec.src = procid_self();
+	rec.len = buf ? len : 0;
+
+	kbuf = message_key_pid(pid);
+
+	dbuf.dptr = (char *)SMB_MALLOC(len + sizeof(rec));
+	if (!dbuf.dptr) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	memcpy(dbuf.dptr, &rec, sizeof(rec));
+	if (len > 0 && buf)
+		memcpy((void *)((char*)dbuf.dptr+sizeof(rec)), buf, len);
+
+	dbuf.dsize = len + sizeof(rec);
+
+	if (duplicates_allowed) {
+
+		/* If duplicates are allowed we can just append the message and return. */
+
+		/* lock the record for the destination */
+		if (timeout) {
+			if (tdb_chainlock_with_timeout(tdb, kbuf, timeout) == -1) {
+				DEBUG(0,("message_send_pid_internal: failed to get "
+					 "chainlock with timeout %ul.\n", timeout));
+				SAFE_FREE(dbuf.dptr);
+				return NT_STATUS_IO_TIMEOUT;
+			}
+		} else {
+			if (tdb_chainlock(tdb, kbuf) == -1) {
+				DEBUG(0,("message_send_pid_internal: failed to get "
+					 "chainlock.\n"));
+				SAFE_FREE(dbuf.dptr);
+				return NT_STATUS_LOCK_NOT_GRANTED;
+			}
+		}	
+		tdb_append(tdb, kbuf, dbuf);
+		tdb_chainunlock(tdb, kbuf);
+
+		SAFE_FREE(dbuf.dptr);
+		errno = 0;                    /* paranoia */
+		return message_notify(pid);
+	}
+
+	/* lock the record for the destination */
+	if (timeout) {
+		if (tdb_chainlock_with_timeout(tdb, kbuf, timeout) == -1) {
+			DEBUG(0,("message_send_pid_internal: failed to get chainlock "
+				 "with timeout %ul.\n", timeout));
+			SAFE_FREE(dbuf.dptr);
+			return NT_STATUS_IO_TIMEOUT;
+		}
+	} else {
+		if (tdb_chainlock(tdb, kbuf) == -1) {
+			DEBUG(0,("message_send_pid_internal: failed to get "
+				 "chainlock.\n"));
+			SAFE_FREE(dbuf.dptr);
+			return NT_STATUS_LOCK_NOT_GRANTED;
+		}
+	}	
+
+	old_dbuf = tdb_fetch(tdb, kbuf);
+
+	if (!old_dbuf.dptr) {
+		/* its a new record */
+
+		tdb_store(tdb, kbuf, dbuf, TDB_REPLACE);
+		tdb_chainunlock(tdb, kbuf);
+
+		SAFE_FREE(dbuf.dptr);
+		errno = 0;                    /* paranoia */
+		return message_notify(pid);
+	}
+
+	/* Not a new record. Check for duplicates. */
+
+	for(ptr = (char *)old_dbuf.dptr; ptr < old_dbuf.dptr + old_dbuf.dsize; ) {
+		/*
+		 * First check if the message header matches, then, if it's a non-zero
+		 * sized message, check if the data matches. If so it's a duplicate and
+		 * we can discard it. JRA.
+		 */
+
+		if (!memcmp(ptr, &rec, sizeof(rec))) {
+			if (!len || (len && !memcmp( ptr + sizeof(rec), buf, len))) {
+				tdb_chainunlock(tdb, kbuf);
+				DEBUG(10,("message_send_pid_internal: discarding "
+					  "duplicate message.\n"));
+				SAFE_FREE(dbuf.dptr);
+				SAFE_FREE(old_dbuf.dptr);
+				return NT_STATUS_OK;
+			}
+		}
+		memcpy(&prec, ptr, sizeof(prec));
+		ptr += sizeof(rec) + prec.len;
+	}
+
+	/* we're adding to an existing entry */
+
+	tdb_append(tdb, kbuf, dbuf);
+	tdb_chainunlock(tdb, kbuf);
+
+	SAFE_FREE(old_dbuf.dptr);
+	SAFE_FREE(dbuf.dptr);
+
+	errno = 0;                    /* paranoia */
+	return message_notify(pid);
+}
+
+/****************************************************************************
+ Send a message to a particular pid - no timeout.
+****************************************************************************/
+
+NTSTATUS message_send_pid(struct process_id pid, int msg_type, const void *buf,
+			  size_t len, BOOL duplicates_allowed)
+{
+	return message_send_pid_internal(pid, msg_type, buf, len,
+					 duplicates_allowed, 0);
+}
+
+/****************************************************************************
+ Send a message to a particular pid, with timeout in seconds.
+****************************************************************************/
+
+NTSTATUS message_send_pid_with_timeout(struct process_id pid, int msg_type,
+				       const void *buf, size_t len,
+				       BOOL duplicates_allowed, unsigned int timeout)
+{
+	return message_send_pid_internal(pid, msg_type, buf, len, duplicates_allowed,
+					 timeout);
+}
+
+/****************************************************************************
+ Count the messages pending for a particular pid. Expensive....
+****************************************************************************/
+
+unsigned int messages_pending_for_pid(struct process_id pid)
+{
+	TDB_DATA kbuf;
+	TDB_DATA dbuf;
+	char *buf;
+	unsigned int message_count = 0;
+
+	kbuf = message_key_pid(pid);
+
+	dbuf = tdb_fetch(tdb, kbuf);
+	if (dbuf.dptr == NULL || dbuf.dsize == 0) {
+		SAFE_FREE(dbuf.dptr);
+		return 0;
+	}
+
+	for (buf = dbuf.dptr; dbuf.dsize > sizeof(struct message_rec);) {
+		struct message_rec rec;
+		memcpy(&rec, buf, sizeof(rec));
+		buf += (sizeof(rec) + rec.len);
+		dbuf.dsize -= (sizeof(rec) + rec.len);
+		message_count++;
+	}
+
+	SAFE_FREE(dbuf.dptr);
+	return message_count;
+}
+
+/****************************************************************************
+ Retrieve all messages for the current process.
+****************************************************************************/
+
+static BOOL retrieve_all_messages(char **msgs_buf, size_t *total_len)
+{
+	TDB_DATA kbuf;
+	TDB_DATA dbuf;
+	TDB_DATA null_dbuf;
+
+	ZERO_STRUCT(null_dbuf);
+
+	*msgs_buf = NULL;
+	*total_len = 0;
+
+	kbuf = message_key_pid(pid_to_procid(sys_getpid()));
+
+	if (tdb_chainlock(tdb, kbuf) == -1)
+		return False;
+
+	dbuf = tdb_fetch(tdb, kbuf);
+	/*
+	 * Replace with an empty record to keep the allocated
+	 * space in the tdb.
+	 */
+	tdb_store(tdb, kbuf, null_dbuf, TDB_REPLACE);
+	tdb_chainunlock(tdb, kbuf);
+
+	if (dbuf.dptr == NULL || dbuf.dsize == 0) {
+		SAFE_FREE(dbuf.dptr);
+		return False;
+	}
+
+	*msgs_buf = dbuf.dptr;
+	*total_len = dbuf.dsize;
+
+	return True;
+}
+
+/****************************************************************************
+ Parse out the next message for the current process.
+****************************************************************************/
+
+static BOOL message_recv(char *msgs_buf, size_t total_len, int *msg_type,
+			 struct process_id *src, char **buf, size_t *len)
+{
+	struct message_rec rec;
+	char *ret_buf = *buf;
+
+	*buf = NULL;
+	*len = 0;
+
+	if (total_len - (ret_buf - msgs_buf) < sizeof(rec))
+		return False;
+
+	memcpy(&rec, ret_buf, sizeof(rec));
+	ret_buf += sizeof(rec);
+
+	if (rec.msg_version != MESSAGE_VERSION) {
+		DEBUG(0,("message version %d received (expected %d)\n", rec.msg_version, MESSAGE_VERSION));
+		return False;
+	}
+
+	if (rec.len > 0) {
+		if (total_len - (ret_buf - msgs_buf) < rec.len)
+			return False;
+	}
+
+	*len = rec.len;
+	*msg_type = rec.msg_type;
+	*src = rec.src;
+	*buf = ret_buf;
+
+	return True;
+}
+
+/****************************************************************************
+ Receive and dispatch any messages pending for this process.
+ JRA changed Dec 13 2006. Only one message handler now permitted per type.
+ *NOTE*: Dispatch functions must be able to cope with incoming
+ messages on an *odd* byte boundary.
+****************************************************************************/
+
+void message_dispatch(void)
+{
+	int msg_type;
+	struct process_id src;
+	char *buf;
+	char *msgs_buf;
+	size_t len, total_len;
+	int n_handled;
+
+	if (!received_signal)
+		return;
+
+	DEBUG(10,("message_dispatch: received_signal = %d\n", received_signal));
+
+	received_signal = 0;
+
+	if (!retrieve_all_messages(&msgs_buf, &total_len))
+		return;
+
+	for (buf = msgs_buf; message_recv(msgs_buf, total_len, &msg_type, &src, &buf, &len); buf += len) {
+		struct dispatch_fns *dfn;
+
+		DEBUG(10,("message_dispatch: received msg_type=%d "
+			  "src_pid=%u\n", msg_type,
+			  (unsigned int) procid_to_pid(&src)));
+
+		n_handled = 0;
+		for (dfn = dispatch_fns; dfn; dfn = dfn->next) {
+			if (dfn->msg_type == msg_type) {
+				DEBUG(10,("message_dispatch: processing message of type %d.\n", msg_type));
+				dfn->fn(msg_type, src,
+					len ? (void *)buf : NULL, len,
+					dfn->private_data);
+				n_handled++;
+				break;
+			}
+		}
+		if (!n_handled) {
+			DEBUG(5,("message_dispatch: warning: no handler registed for "
+				 "msg_type %d in pid %u\n",
+				 msg_type, (unsigned int)sys_getpid()));
+		}
+	}
+	SAFE_FREE(msgs_buf);
+}
+
+/****************************************************************************
  Register/replace a dispatch function for a particular message type.
  JRA changed Dec 13 2006. Only one message handler now permitted per type.
  *NOTE*: Dispatch functions must be able to cope with incoming
  messages on an *odd* byte boundary.
 ****************************************************************************/
 
+void message_register(int msg_type, 
+		      void (*fn)(int msg_type, struct process_id pid,
+				 void *buf, size_t len,
+				 void *private_data),
+		      void *private_data)
+{
+	struct dispatch_fns *dfn;
+
+	for (dfn = dispatch_fns; dfn; dfn = dfn->next) {
+		if (dfn->msg_type == msg_type) {
+			dfn->fn = fn;
+			return;
+		}
+	}
+
+	dfn = SMB_MALLOC_P(struct dispatch_fns);
+
+	if (dfn != NULL) {
+
+		ZERO_STRUCTPN(dfn);
+
+		dfn->msg_type = msg_type;
+		dfn->fn = fn;
+		dfn->private_data = private_data;
+
+		DLIST_ADD(dispatch_fns, dfn);
+	}
+	else {
+	
+		DEBUG(0,("message_register: Not enough memory. malloc failed!\n"));
+	}
+}
+
+/****************************************************************************
+ De-register the function for a particular message type.
+****************************************************************************/
+
+void message_deregister(int msg_type)
+{
+	struct dispatch_fns *dfn, *next;
+
+	for (dfn = dispatch_fns; dfn; dfn = next) {
+		next = dfn->next;
+		if (dfn->msg_type == msg_type) {
+			DLIST_REMOVE(dispatch_fns, dfn);
+			SAFE_FREE(dfn);
+			return;
+		}
+	}	
+}
+
 struct msg_all {
-	struct messaging_context *msg_ctx;
 	int msg_type;
 	uint32 msg_flag;
 	const void *buf;
 	size_t len;
+	BOOL duplicates;
 	int n_sent;
 };
 
@@ -95,38 +619,39 @@
  Send one of the messages for the broadcast.
 ****************************************************************************/
 
-static int traverse_fn(struct db_record *rec,
-		       const struct connections_key *ckey,
-		       const struct connections_data *crec,
-		       void *state)
+static int traverse_fn(TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *state)
 {
+	struct connections_data crec;
 	struct msg_all *msg_all = (struct msg_all *)state;
 	NTSTATUS status;
 
-	if (crec->cnum != -1)
+	if (dbuf.dsize != sizeof(crec))
 		return 0;
 
+	memcpy(&crec, dbuf.dptr, sizeof(crec));
+
+	if (crec.cnum != -1)
+		return 0;
+
 	/* Don't send if the receiver hasn't registered an interest. */
 
-	if(!(crec->bcast_msg_flags & msg_all->msg_flag))
+	if(!(crec.bcast_msg_flags & msg_all->msg_flag))
 		return 0;
 
 	/* If the msg send fails because the pid was not found (i.e. smbd died), 
 	 * the msg has already been deleted from the messages.tdb.*/
 
-	status = messaging_send_buf(msg_all->msg_ctx,
-				    crec->pid, msg_all->msg_type,
-				    (uint8 *)msg_all->buf, msg_all->len);
+	status = message_send_pid(crec.pid, msg_all->msg_type,
+				  msg_all->buf, msg_all->len,
+				  msg_all->duplicates);
 
 	if (NT_STATUS_EQUAL(status, NT_STATUS_INVALID_HANDLE)) {
 		
 		/* If the pid was not found delete the entry from connections.tdb */
 
 		DEBUG(2,("pid %s doesn't exist - deleting connections %d [%s]\n",
-			 procid_str_static(&crec->pid), crec->cnum,
-			 crec->servicename));
-
-		rec->delete_rec(rec);
+			 procid_str_static(&crec.pid), crec.cnum, crec.servicename));
+		tdb_delete(the_tdb, kbuf);
 	}
 	msg_all->n_sent++;
 	return 0;
@@ -144,9 +669,9 @@
  *
  * @retval True for success.
  **/
-bool message_send_all(struct messaging_context *msg_ctx,
-		      int msg_type,
+BOOL message_send_all(TDB_CONTEXT *conn_tdb, int msg_type,
 		      const void *buf, size_t len,
+		      BOOL duplicates_allowed,
 		      int *n_sent)
 {
 	struct msg_all msg_all;
@@ -162,108 +687,114 @@
 		msg_all.msg_flag = FLAG_MSG_PRINT_GENERAL;
 	else if (msg_type > 3000 && msg_type < 4000)
 		msg_all.msg_flag = FLAG_MSG_SMBD;
-	else if (msg_type > 4000 && msg_type < 5000)
-		msg_all.msg_flag = FLAG_MSG_DBWRAP;
 	else
 		return False;
 
 	msg_all.buf = buf;
 	msg_all.len = len;
+	msg_all.duplicates = duplicates_allowed;
 	msg_all.n_sent = 0;
-	msg_all.msg_ctx = msg_ctx;
 
-	connections_forall(traverse_fn, &msg_all);
+	tdb_traverse(conn_tdb, traverse_fn, &msg_all);
 	if (n_sent)
 		*n_sent = msg_all.n_sent;
 	return True;
 }
 
-struct event_context *messaging_event_context(struct messaging_context *msg_ctx)
+/*
+ * Block and unblock receiving of messages. Allows removal of race conditions
+ * when doing a fork and changing message disposition.
+ */
+
+void message_block(void)
 {
-	return msg_ctx->event_ctx;
+	BlockSignals(True, SIGUSR1);
 }
 
+void message_unblock(void)
+{
+	BlockSignals(False, SIGUSR1);
+}
+
+/*
+ * Samba4 API wrapper around the Samba3 implementation. Yes, I know, we could
+ * import the whole Samba4 thing, but I want notify.c from Samba4 in first.
+ */
+
+struct messaging_callback {
+	struct messaging_callback *prev, *next;
+	uint32 msg_type;
+	void (*fn)(struct messaging_context *msg, void *private_data, 
+		   uint32_t msg_type, 
+		   struct server_id server_id, DATA_BLOB *data);
+	void *private_data;
+};
+
+struct messaging_context {
+	struct server_id id;
+	struct messaging_callback *callbacks;
+};
+
+static int messaging_context_destructor(struct messaging_context *ctx)
+{
+	struct messaging_callback *cb;
+
+	for (cb = ctx->callbacks; cb; cb = cb->next) {
+		/*
+		 * We unconditionally remove all instances of our callback
+		 * from the tdb basis.
+		 */
+		message_deregister(cb->msg_type);
+	}
+	return 0;
+}
+
 struct messaging_context *messaging_init(TALLOC_CTX *mem_ctx, 
 					 struct server_id server_id, 
 					 struct event_context *ev)
 {
 	struct messaging_context *ctx;
-	NTSTATUS status;
 
 	if (!(ctx = TALLOC_ZERO_P(mem_ctx, struct messaging_context))) {
 		return NULL;
 	}
 
 	ctx->id = server_id;
-	ctx->event_ctx = ev;
-
-	status = messaging_tdb_init(ctx, ctx, &ctx->local);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0, ("messaging_tdb_init failed: %s\n",
-			  nt_errstr(status)));
-		TALLOC_FREE(ctx);
-		return NULL;
-	}
-
-#ifdef CLUSTER_SUPPORT
-	if (lp_clustering()) {
-		status = messaging_ctdbd_init(ctx, ctx, &ctx->remote);
-
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(0, ("messaging_ctdb_init failed: %s\n",
-				  nt_errstr(status)));
-			TALLOC_FREE(ctx);
-			return NULL;
-		}
-	}
-#endif
-
-	messaging_register(ctx, NULL, MSG_PING, ping_message);
-
-	/* Register some debugging related messages */
-
-	register_msg_pool_usage(ctx);
-	register_dmalloc_msgs(ctx);
-	debug_register_msgs(ctx);
-
+	talloc_set_destructor(ctx, messaging_context_destructor);
 	return ctx;
 }
 
-/*
- * re-init after a fork
- */
-NTSTATUS messaging_reinit(struct messaging_context *msg_ctx)
+static void messaging_callback(int msg_type, struct process_id pid,
+			       void *buf, size_t len, void *private_data)
 {
-#ifdef CLUSTER_SUPPORT
+	struct messaging_context *ctx =	talloc_get_type_abort(
+		private_data, struct messaging_context);
+	struct messaging_callback *cb, *next;
 
-	TALLOC_FREE(msg_ctx->remote);
+	for (cb = ctx->callbacks; cb; cb = next) {
+		/*
+		 * Allow a callback to remove itself
+		 */
+		next = cb->next;
 
-	if (lp_clustering()) {
-		NTSTATUS status;
+		if (msg_type == cb->msg_type) {
+			DATA_BLOB blob;
+			struct server_id id;
 
-		status = messaging_ctdbd_init(msg_ctx, msg_ctx,
-					      &msg_ctx->remote);
+			blob.data = (uint8 *)buf;
+			blob.length = len;
+			id.id = pid;
 
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(0, ("messaging_ctdb_init failed: %s\n",
-				  nt_errstr(status)));
-			return status;
+			cb->fn(ctx, cb->private_data, msg_type, id, &blob);
 		}
 	}
-
-#endif
-
-	return NT_STATUS_OK;
 }
 
-
 /*
  * Register a dispatch function for a particular message type. Allow multiple
  * registrants
 */
-NTSTATUS messaging_register(struct messaging_context *msg_ctx,
-			    void *private_data,
+NTSTATUS messaging_register(struct messaging_context *ctx, void *private_data,
 			    uint32_t msg_type,
 			    void (*fn)(struct messaging_context *msg,
 				       void *private_data, 
@@ -273,19 +804,7 @@
 {
 	struct messaging_callback *cb;
 
-	/*
-	 * Only one callback per type
-	 */
-
-	for (cb = msg_ctx->callbacks; cb != NULL; cb = cb->next) {
-		if (cb->msg_type == msg_type) {
-			cb->fn = fn;
-			cb->private_data = private_data;
-			return NT_STATUS_OK;
-		}
-	}
-
-	if (!(cb = talloc(msg_ctx, struct messaging_callback))) {
+	if (!(cb = talloc(ctx, struct messaging_callback))) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
@@ -293,7 +812,8 @@
 	cb->fn = fn;
 	cb->private_data = private_data;
 
-	DLIST_ADD(msg_ctx->callbacks, cb);
+	DLIST_ADD(ctx->callbacks, cb);
+	message_register(msg_type, messaging_callback, ctx);
 	return NT_STATUS_OK;
 }
 
@@ -318,46 +838,12 @@
 /*
   Send a message to a particular server
 */
-NTSTATUS messaging_send(struct messaging_context *msg_ctx,
-			struct server_id server, uint32_t msg_type,
-			const DATA_BLOB *data)
+NTSTATUS messaging_send(struct messaging_context *msg,
+			struct server_id server, 
+			uint32_t msg_type, DATA_BLOB *data)
 {
-#ifdef CLUSTER_SUPPORT
-	if (!procid_is_local(&server)) {
-		return msg_ctx->remote->send_fn(msg_ctx, server,
-						msg_type, data,
-						msg_ctx->remote);
-	}
-#endif
-	return msg_ctx->local->send_fn(msg_ctx, server, msg_type, data,
-				       msg_ctx->local);
+	return message_send_pid_internal(server.id, msg_type, data->data,
+					 data->length, True, 0);
 }
 
-NTSTATUS messaging_send_buf(struct messaging_context *msg_ctx,
-			    struct server_id server, uint32_t msg_type,
-			    const uint8 *buf, size_t len)
-{
-	DATA_BLOB blob = data_blob_const(buf, len);
-	return messaging_send(msg_ctx, server, msg_type, &blob);
-}
-
-/*
-  Dispatch one messsaging_rec
-*/
-void messaging_dispatch_rec(struct messaging_context *msg_ctx,
-			    struct messaging_rec *rec)
-{
-	struct messaging_callback *cb, *next;
-
-	for (cb = msg_ctx->callbacks; cb != NULL; cb = next) {
-		next = cb->next;
-		if (cb->msg_type == rec->msg_type) {
-			cb->fn(msg_ctx, cb->private_data, rec->msg_type,
-			       rec->src, &rec->buf);
-			return;
-		}
-	}
-	return;
-}
-
 /** @} **/

Deleted: branches/samba/upstream/source/lib/messages_ctdbd.c
===================================================================
--- branches/samba/upstream/source/lib/messages_ctdbd.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/messages_ctdbd.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,159 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   Samba internal messaging functions
-   Copyright (C) 2007 by Volker Lendecke
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-
-#ifdef CLUSTER_SUPPORT
-
-#include "librpc/gen_ndr/messaging.h"
-#include "ctdb.h"
-#include "ctdb_private.h"
-#include "ctdbd_conn.h"
-
-
-struct messaging_ctdbd_context {
-	struct ctdbd_connection *conn;
-};
-
-/*
- * This is a Samba3 hack/optimization. Routines like process_exists need to
- * talk to ctdbd, and they don't get handed a messaging context.
- */
-static struct ctdbd_connection *global_ctdbd_connection;
-static int global_ctdb_connection_pid;
-
-struct ctdbd_connection *messaging_ctdbd_connection(void)
-{
-	if (global_ctdb_connection_pid == 0 &&
-	    global_ctdbd_connection == NULL) {
-		struct event_context *ev;
-		struct messaging_context *msg;
-
-		ev = event_context_init(NULL);
-		if (!ev) {
-			DEBUG(0,("event_context_init failed\n"));
-		}
-
-		msg = messaging_init(NULL, procid_self(), ev);
-		if (!msg) {
-			DEBUG(0,("messaging_init failed\n"));
-		}
-
-		db_tdb2_setup_messaging(msg, false);
-	}
-
-	if (global_ctdb_connection_pid != getpid()) {
-		DEBUG(0,("messaging_ctdbd_connection():"
-			 "valid for pid[%d] but it's [%d]\n",
-			 global_ctdb_connection_pid, getpid()));
-		smb_panic("messaging_ctdbd_connection() invalid process\n");
-	}
-
-	return global_ctdbd_connection;
-}
-
-static NTSTATUS messaging_ctdb_send(struct messaging_context *msg_ctx,
-				    struct server_id pid, int msg_type,
-				    const DATA_BLOB *data,
-				    struct messaging_backend *backend)
-{
-	struct messaging_ctdbd_context *ctx = talloc_get_type_abort(
-		backend->private_data, struct messaging_ctdbd_context);
-
-	struct messaging_rec msg;
-
-	msg.msg_version	= MESSAGE_VERSION;
-	msg.msg_type	= msg_type;
-	msg.dest	= pid;
-	msg.src		= procid_self();
-	msg.buf		= *data;
-
-	return ctdbd_messaging_send(ctx->conn, pid.vnn, pid.pid, &msg);
-}
-
-static int messaging_ctdbd_destructor(struct messaging_ctdbd_context *ctx)
-{
-	/*
-	 * The global connection just went away
-	 */
-	global_ctdb_connection_pid = 0;
-	global_ctdbd_connection = NULL;
-	return 0;
-}
-
-NTSTATUS messaging_ctdbd_init(struct messaging_context *msg_ctx,
-			      TALLOC_CTX *mem_ctx,
-			      struct messaging_backend **presult)
-{
-	struct messaging_backend *result;
-	struct messaging_ctdbd_context *ctx;
-	NTSTATUS status;
-
-	if (!(result = TALLOC_P(mem_ctx, struct messaging_backend))) {
-		DEBUG(0, ("talloc failed\n"));
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	if (!(ctx = TALLOC_P(result, struct messaging_ctdbd_context))) {
-		DEBUG(0, ("talloc failed\n"));
-		TALLOC_FREE(result);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	status = ctdbd_messaging_connection(ctx, &ctx->conn);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10, ("ctdbd_messaging_connection failed: %s\n",
-			   nt_errstr(status)));
-		TALLOC_FREE(result);
-		return status;
-	}
-
-	status = ctdbd_register_msg_ctx(ctx->conn, msg_ctx);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10, ("ctdbd_register_msg_ctx failed: %s\n",
-			   nt_errstr(status)));
-		TALLOC_FREE(result);
-		return status;
-	}
-
-	global_ctdb_connection_pid = getpid();
-	global_ctdbd_connection = ctx->conn;
-	talloc_set_destructor(ctx, messaging_ctdbd_destructor);
-
-	set_my_vnn(ctdbd_vnn(ctx->conn));
-
-	result->send_fn = messaging_ctdb_send;
-	result->private_data = (void *)ctx;
-
-	*presult = result;
-	return NT_STATUS_OK;
-}
-
-#else
-
-NTSTATUS messaging_ctdbd_init(struct messaging_context *msg_ctx,
-			      TALLOC_CTX *mem_ctx,
-			      struct messaging_backend **presult)
-{
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-#endif

Deleted: branches/samba/upstream/source/lib/messages_local.c
===================================================================
--- branches/samba/upstream/source/lib/messages_local.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/messages_local.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,434 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   Samba internal messaging functions
-   Copyright (C) 2007 by Volker Lendecke
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/**
-  @defgroup messages Internal messaging framework
-  @{
-  @file messages.c
-  
-  @brief  Module for internal messaging between Samba daemons. 
-
-   The idea is that if a part of Samba wants to do communication with
-   another Samba process then it will do a message_register() of a
-   dispatch function, and use message_send_pid() to send messages to
-   that process.
-
-   The dispatch function is given the pid of the sender, and it can
-   use that to reply by message_send_pid().  See ping_message() for a
-   simple example.
-
-   @caution Dispatch functions must be able to cope with incoming
-   messages on an *odd* byte boundary.
-
-   This system doesn't have any inherent size limitations but is not
-   very efficient for large messages or when messages are sent in very
-   quick succession.
-
-*/
-
-#include "includes.h"
-#include "librpc/gen_ndr/messaging.h"
-#include "librpc/gen_ndr/ndr_messaging.h"
-
-static sig_atomic_t received_signal;
-
-static NTSTATUS messaging_tdb_send(struct messaging_context *msg_ctx,
-				   struct server_id pid, int msg_type,
-				   const DATA_BLOB *data,
-				   struct messaging_backend *backend);
-
-/****************************************************************************
- Notifications come in as signals.
-****************************************************************************/
-
-static void sig_usr1(void)
-{
-	received_signal = 1;
-	sys_select_signal(SIGUSR1);
-}
-
-static int messaging_tdb_destructor(struct messaging_backend *tdb_ctx)
-{
-	TDB_CONTEXT *tdb = (TDB_CONTEXT *)tdb_ctx->private_data;
-	tdb_close(tdb);
-	return 0;
-}
-
-/****************************************************************************
- Initialise the messaging functions. 
-****************************************************************************/
-
-NTSTATUS messaging_tdb_init(struct messaging_context *msg_ctx,
-			    TALLOC_CTX *mem_ctx,
-			    struct messaging_backend **presult)
-{
-	struct messaging_backend *result;
-	TDB_CONTEXT *tdb;
-
-	if (!(result = TALLOC_P(mem_ctx, struct messaging_backend))) {
-		DEBUG(0, ("talloc failed\n"));
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	tdb = tdb_open_log(lock_path("messages.tdb"), 
-			   0, TDB_CLEAR_IF_FIRST|TDB_DEFAULT, 
-			   O_RDWR|O_CREAT,0600);
-
-	if (!tdb) {
-		NTSTATUS status = map_nt_error_from_unix(errno);
-		DEBUG(0, ("ERROR: Failed to initialise messages database: "
-			  "%s\n", strerror(errno)));
-		TALLOC_FREE(result);
-		return status;
-	}
-
-	sec_init();
-
-	/* Activate the per-hashchain freelist */
-	tdb_set_max_dead(tdb, 5);
-
-	CatchSignal(SIGUSR1, SIGNAL_CAST sig_usr1);
-
-	result->private_data = (void *)tdb;
-	result->send_fn = messaging_tdb_send;
-
-	talloc_set_destructor(result, messaging_tdb_destructor);
-
-	*presult = result;
-	return NT_STATUS_OK;
-}
-
-/*******************************************************************
- Form a static tdb key from a pid.
-******************************************************************/
-
-static TDB_DATA message_key_pid(TALLOC_CTX *mem_ctx, struct server_id pid)
-{
-	char *key;
-	TDB_DATA kbuf;
-
-	key = talloc_asprintf(talloc_tos(), "PID/%s", procid_str_static(&pid));
-
-	SMB_ASSERT(key != NULL);
-	
-	kbuf.dptr = (uint8 *)key;
-	kbuf.dsize = strlen(key)+1;
-	return kbuf;
-}
-
-/*
-  Fetch the messaging array for a process
- */
-
-static NTSTATUS messaging_tdb_fetch(TDB_CONTEXT *msg_tdb,
-				    TDB_DATA key,
-				    TALLOC_CTX *mem_ctx,
-				    struct messaging_array **presult)
-{
-	struct messaging_array *result;
-	TDB_DATA data;
-	DATA_BLOB blob;
-	enum ndr_err_code ndr_err;
-
-	if (!(result = TALLOC_ZERO_P(mem_ctx, struct messaging_array))) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	data = tdb_fetch(msg_tdb, key);
-
-	if (data.dptr == NULL) {
-		*presult = result;
-		return NT_STATUS_OK;
-	}
-
-	blob = data_blob_const(data.dptr, data.dsize);
-
-	ndr_err = ndr_pull_struct_blob(
-		&blob, result, result,
-		(ndr_pull_flags_fn_t)ndr_pull_messaging_array);
-
-	SAFE_FREE(data.dptr);
-
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		TALLOC_FREE(result);
-		return ndr_map_error2ntstatus(ndr_err);
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		DEBUG(10, ("messaging_tdb_fetch:\n"));
-		NDR_PRINT_DEBUG(messaging_array, result);
-	}
-
-	*presult = result;
-	return NT_STATUS_OK;
-}
-
-/*
-  Store a messaging array for a pid
-*/
-
-static NTSTATUS messaging_tdb_store(TDB_CONTEXT *msg_tdb,
-				    TDB_DATA key,
-				    struct messaging_array *array)
-{
-	TDB_DATA data;
-	DATA_BLOB blob;
-	enum ndr_err_code ndr_err;
-	TALLOC_CTX *mem_ctx;
-	int ret;
-
-	if (array->num_messages == 0) {
-		tdb_delete(msg_tdb, key);
-		return NT_STATUS_OK;
-	}
-
-	if (!(mem_ctx = talloc_new(array))) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	ndr_err = ndr_push_struct_blob(
-		&blob, mem_ctx, array,
-		(ndr_push_flags_fn_t)ndr_push_messaging_array);
-
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(mem_ctx);
-		return ndr_map_error2ntstatus(ndr_err);
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		DEBUG(10, ("messaging_tdb_store:\n"));
-		NDR_PRINT_DEBUG(messaging_array, array);
-	}
-
-	data.dptr = blob.data;
-	data.dsize = blob.length;
-
-	ret = tdb_store(msg_tdb, key, data, TDB_REPLACE);
-	TALLOC_FREE(mem_ctx);
-
-	return (ret == 0) ? NT_STATUS_OK : NT_STATUS_INTERNAL_DB_CORRUPTION;
-}
-
-/****************************************************************************
- Notify a process that it has a message. If the process doesn't exist 
- then delete its record in the database.
-****************************************************************************/
-
-static NTSTATUS message_notify(struct server_id procid)
-{
-	pid_t pid = procid.pid;
-	int ret;
-	uid_t euid = geteuid();
-
-	/*
-	 * Doing kill with a non-positive pid causes messages to be
-	 * sent to places we don't want.
-	 */
-
-	SMB_ASSERT(pid > 0);
-
-	if (euid != 0) {
-		/* If we're not root become so to send the message. */
-		save_re_uid();
-		set_effective_uid(0);
-	}
-
-	ret = kill(pid, SIGUSR1);
-
-	if (euid != 0) {
-		/* Go back to who we were. */
-		int saved_errno = errno;
-		restore_re_uid_fromroot();
-		errno = saved_errno;
-	}
-
-	if (ret == 0) {
-		return NT_STATUS_OK;
-	}
-
-	/*
-	 * Something has gone wrong
-	 */
-
-	DEBUG(2,("message to process %d failed - %s\n", (int)pid,
-		 strerror(errno)));
-
-	/*
-	 * No call to map_nt_error_from_unix -- don't want to link in
-	 * errormap.o into lots of utils.
-	 */
-
-	if (errno == ESRCH)  return NT_STATUS_INVALID_HANDLE;
-	if (errno == EINVAL) return NT_STATUS_INVALID_PARAMETER;
-	if (errno == EPERM)  return NT_STATUS_ACCESS_DENIED;
-	return NT_STATUS_UNSUCCESSFUL;
-}
-
-/****************************************************************************
- Send a message to a particular pid.
-****************************************************************************/
-
-static NTSTATUS messaging_tdb_send(struct messaging_context *msg_ctx,
-				   struct server_id pid, int msg_type,
-				   const DATA_BLOB *data,
-				   struct messaging_backend *backend)
-{
-	struct messaging_array *msg_array;
-	struct messaging_rec *rec;
-	NTSTATUS status;
-	TDB_DATA key;
-	TDB_CONTEXT *tdb = (TDB_CONTEXT *)backend->private_data;
-	TALLOC_CTX *frame = talloc_stackframe();
-
-	/* NULL pointer means implicit length zero. */
-	if (!data->data) {
-		SMB_ASSERT(data->length == 0);
-	}
-
-	/*
-	 * Doing kill with a non-positive pid causes messages to be
-	 * sent to places we don't want.
-	 */
-
-	SMB_ASSERT(procid_to_pid(&pid) > 0);
-
-	key = message_key_pid(frame, pid);
-
-	if (tdb_chainlock(tdb, key) == -1) {
-		TALLOC_FREE(frame);
-		return NT_STATUS_LOCK_NOT_GRANTED;
-	}
-
-	status = messaging_tdb_fetch(tdb, key, talloc_tos(), &msg_array);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		goto done;
-	}
-
-	if ((msg_type & MSG_FLAG_LOWPRIORITY)
-	    && (msg_array->num_messages > 1000)) {
-		DEBUG(5, ("Dropping message for PID %s\n",
-			  procid_str_static(&pid)));
-		status = NT_STATUS_INSUFFICIENT_RESOURCES;
-		goto done;
-	}
-
-	if (!(rec = TALLOC_REALLOC_ARRAY(talloc_tos(), msg_array->messages,
-					 struct messaging_rec,
-					 msg_array->num_messages+1))) {
-		status = NT_STATUS_NO_MEMORY;
-		goto done;
-	}
-
-	rec[msg_array->num_messages].msg_version = MESSAGE_VERSION;
-	rec[msg_array->num_messages].msg_type = msg_type & MSG_TYPE_MASK;
-	rec[msg_array->num_messages].dest = pid;
-	rec[msg_array->num_messages].src = procid_self();
-	rec[msg_array->num_messages].buf = *data;
-
-	msg_array->messages = rec;
-	msg_array->num_messages += 1;
-
-	status = messaging_tdb_store(tdb, key, msg_array);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		goto done;
-	}
-	
-	status = message_notify(pid);
-
-	if (NT_STATUS_EQUAL(status, NT_STATUS_INVALID_HANDLE)) {
-		DEBUG(2, ("pid %s doesn't exist - deleting messages record\n",
-			  procid_str_static(&pid)));
-		tdb_delete(tdb, message_key_pid(talloc_tos(), pid));
-	}
-
- done:
-	tdb_chainunlock(tdb, key);
-	TALLOC_FREE(frame);
-	return status;
-}
-
-/****************************************************************************
- Retrieve all messages for the current process.
-****************************************************************************/
-
-static NTSTATUS retrieve_all_messages(TDB_CONTEXT *msg_tdb,
-				      TALLOC_CTX *mem_ctx,
-				      struct messaging_array **presult)
-{
-	struct messaging_array *result;
-	TDB_DATA key = message_key_pid(mem_ctx, procid_self());
-	NTSTATUS status;
-
-	if (tdb_chainlock(msg_tdb, key) == -1) {
-		TALLOC_FREE(key.dptr);
-		return NT_STATUS_LOCK_NOT_GRANTED;
-	}
-
-	status = messaging_tdb_fetch(msg_tdb, key, mem_ctx, &result);
-
-	/*
-	 * We delete the record here, tdb_set_max_dead keeps it around
-	 */
-	tdb_delete(msg_tdb, key);
-	tdb_chainunlock(msg_tdb, key);
-
-	if (NT_STATUS_IS_OK(status)) {
-		*presult = result;
-	}
-
-	TALLOC_FREE(key.dptr);
-
-	return status;
-}
-
-/****************************************************************************
- Receive and dispatch any messages pending for this process.
- JRA changed Dec 13 2006. Only one message handler now permitted per type.
- *NOTE*: Dispatch functions must be able to cope with incoming
- messages on an *odd* byte boundary.
-****************************************************************************/
-
-void message_dispatch(struct messaging_context *msg_ctx)
-{
-	struct messaging_array *msg_array = NULL;
-	TDB_CONTEXT *tdb = (TDB_CONTEXT *)(msg_ctx->local->private_data);
-	uint32 i;
-
-	if (!received_signal)
-		return;
-
-	DEBUG(10, ("message_dispatch: received_signal = %d\n",
-		   received_signal));
-
-	received_signal = 0;
-
-	if (!NT_STATUS_IS_OK(retrieve_all_messages(tdb, NULL, &msg_array))) {
-		return;
-	}
-
-	for (i=0; i<msg_array->num_messages; i++) {
-		messaging_dispatch_rec(msg_ctx, &msg_array->messages[i]);
-	}
-
-	TALLOC_FREE(msg_array);
-}
-
-/** @} **/

Modified: branches/samba/upstream/source/lib/module.c
===================================================================
--- branches/samba/upstream/source/lib/module.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/module.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -26,7 +27,7 @@
 /* Load a dynamic module.  Only log a level 0 error if we are not checking 
    for the existence of a module (probling). */
 
-static NTSTATUS do_smb_load_module(const char *module_name, bool is_probe)
+static NTSTATUS do_smb_load_module(const char *module_name, BOOL is_probe)
 {
 	void *handle;
 	init_module_function *init;
@@ -57,7 +58,6 @@
 	if (error) {
 		DEBUG(0, ("Error trying to resolve symbol 'init_module' in %s: %s\n", 
 			  module_name, error));
-		sys_dlclose(handle);
 		return NT_STATUS_UNSUCCESSFUL;
 	}
 
@@ -67,7 +67,6 @@
 	if (!NT_STATUS_IS_OK(status)) {
 		DEBUG(0, ("Module '%s' initialization failed: %s\n",
 			    module_name, get_friendly_nt_error_msg(status)));
-		sys_dlclose(handle);
 	}
 
 	return status;
@@ -78,7 +77,7 @@
 	return do_smb_load_module(module_name, False);
 }
 
-/* Load all modules in list and return number of
+/* Load all modules in list and return number of 
  * modules that has been successfully loaded */
 int smb_load_modules(const char **modules)
 {
@@ -98,41 +97,28 @@
 
 NTSTATUS smb_probe_module(const char *subsystem, const char *module)
 {
-	char *full_path = NULL;
-	TALLOC_CTX *ctx = talloc_stackframe();
-	NTSTATUS status;
-
+	pstring full_path;
+	
 	/* Check for absolute path */
 
-	/* if we make any 'samba multibyte string'
-	   calls here, we break
+	/* if we make any 'samba multibyte string' 
+	   calls here, we break 
 	   for loading string modules */
 
 	DEBUG(5, ("Probing module '%s'\n", module));
 
-	if (module[0] == '/') {
-		status = do_smb_load_module(module, True);
-		TALLOC_FREE(ctx);
-		return status;
-	}
+	if (module[0] == '/')
+		return do_smb_load_module(module, True);
+	
+	pstrcpy(full_path, lib_path(subsystem));
+	pstrcat(full_path, "/");
+	pstrcat(full_path, module);
+	pstrcat(full_path, ".");
+	pstrcat(full_path, shlib_ext());
 
-	full_path = talloc_asprintf(ctx,
-			"%s/%s.%s",
-			lib_path(subsystem),
-			module,
-			shlib_ext());
-	if (!full_path) {
-		TALLOC_FREE(ctx);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	DEBUG(5, ("Probing module '%s': Trying to load from %s\n",
-		module, full_path));
-
-	status = do_smb_load_module(full_path, True);
-
-	TALLOC_FREE(ctx);
-	return status;
+	DEBUG(5, ("Probing module '%s': Trying to load from %s\n", module, full_path));
+	
+	return do_smb_load_module(full_path, True);
 }
 
 #else /* HAVE_DLOPEN */
@@ -164,3 +150,88 @@
 	if(lp_preload_modules()) 
 		smb_load_modules(lp_preload_modules());
 }
+
+
+/***************************************************************************
+ * This Function registers a idle event
+ *
+ * the registered funtions are run periodically
+ * and maybe shutdown idle connections (e.g. to an LDAP server)
+ ***************************************************************************/
+static smb_event_id_t smb_idle_event_id = 1;
+
+struct smb_idle_list_ent {
+	struct smb_idle_list_ent *prev,*next;
+	smb_event_id_t id;
+	smb_idle_event_fn *fn;
+	void *data;
+	time_t interval;
+	time_t lastrun;
+};
+
+static struct smb_idle_list_ent *smb_idle_event_list = NULL;
+
+smb_event_id_t smb_register_idle_event(smb_idle_event_fn *fn, void *data, time_t interval)
+{
+	struct smb_idle_list_ent *event;
+
+	if (!fn) {	
+		return SMB_EVENT_ID_INVALID;
+	}
+
+	event = SMB_MALLOC_P(struct smb_idle_list_ent);
+	if (!event) {
+		DEBUG(0,("malloc() failed!\n"));
+		return SMB_EVENT_ID_INVALID;
+	}
+	event->fn = fn;
+	event->data = data;
+	event->interval = interval;
+	event->lastrun = 0;
+	event->id = smb_idle_event_id++;
+
+	DLIST_ADD(smb_idle_event_list,event);
+
+	return event->id;
+}
+
+BOOL smb_unregister_idle_event(smb_event_id_t id)
+{
+	struct smb_idle_list_ent *event = smb_idle_event_list;
+	
+	while(event) {
+		if (event->id == id) {
+			DLIST_REMOVE(smb_idle_event_list,event);
+			SAFE_FREE(event);
+			return True;
+		}
+		event = event->next;
+	}
+	
+	return False;
+}
+
+void smb_run_idle_events(time_t now)
+{
+	struct smb_idle_list_ent *event = smb_idle_event_list;
+
+	while (event) {
+		struct smb_idle_list_ent *next = event->next;
+		time_t interval;
+
+		if (event->interval <= 0) {
+			interval = SMB_IDLE_EVENT_DEFAULT_INTERVAL;
+		} else if (event->interval >= SMB_IDLE_EVENT_MIN_INTERVAL) {
+			interval = event->interval;
+		} else {
+			interval = SMB_IDLE_EVENT_MIN_INTERVAL;
+		}
+		if (now >(event->lastrun+interval)) {
+			event->lastrun = now;
+			event->fn(&event->data,&event->interval,now);
+		}
+		event = next;
+	}
+
+	return;
+}

Modified: branches/samba/upstream/source/lib/ms_fnmatch.c
===================================================================
--- branches/samba/upstream/source/lib/ms_fnmatch.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/ms_fnmatch.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,27 +1,28 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    filename matching routine
    Copyright (C) Andrew Tridgell 1992-2004
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  
 */
 
 /*
    This module was originally based on fnmatch.c copyright by the Free
    Software Foundation. It bears little (if any) resemblence to that
    code now
-*/
+*/  
 
 
 #include "includes.h"
@@ -53,9 +54,9 @@
   an optimisation only. The ldot pointer is NULL if the string does
   not contain a '.', otherwise it points at the last dot in 'n'.
 */
-static int ms_fnmatch_core(const smb_ucs2_t *p, const smb_ucs2_t *n,
+static int ms_fnmatch_core(const smb_ucs2_t *p, const smb_ucs2_t *n, 
 			   struct max_n *max_n, const smb_ucs2_t *ldot,
-			   bool is_case_sensitive)
+			   BOOL is_case_sensitive)
 {
 	smb_ucs2_t c;
 	int i;
@@ -137,25 +138,22 @@
 			break;
 		}
 	}
-
+	
 	if (! *n) {
 		return 0;
 	}
-
+	
 	return -1;
 }
 
-int ms_fnmatch(const char *pattern, const char *string, bool translate_pattern,
-	       bool is_case_sensitive)
+int ms_fnmatch(const char *pattern, const char *string, BOOL translate_pattern,
+	       BOOL is_case_sensitive)
 {
-	smb_ucs2_t *p = NULL;
-	smb_ucs2_t *s = NULL;
+	wpstring p, s;
 	int ret, count, i;
 	struct max_n *max_n = NULL;
-	struct max_n *max_n_free = NULL;
-	struct max_n one_max_n;
 
-	if (ISDOTDOT(string)) {
+	if (strcmp(string, "..") == 0) {
 		string = ".";
 	}
 
@@ -169,12 +167,15 @@
 		}
 	}
 
-	if (push_ucs2_allocate(&p, pattern) == (size_t)-1) {
+	if (push_ucs2(NULL, p, pattern, sizeof(p), STR_TERMINATE) == (size_t)-1) {
+		/* Not quite the right answer, but finding the right one
+		  under this failure case is expensive, and it's pretty close */
 		return -1;
 	}
 
-	if (push_ucs2_allocate(&s, string) == (size_t)-1) {
-		SAFE_FREE(p);
+	if (push_ucs2(NULL, s, string, sizeof(s), STR_TERMINATE) == (size_t)-1) {
+		/* Not quite the right answer, but finding the right one
+		   under this failure case is expensive, and it's pretty close */
 		return -1;
 	}
 
@@ -187,8 +188,8 @@
 		for (i=0;p[i];i++) {
 			if (p[i] == UCS2_CHAR('?')) {
 				p[i] = UCS2_CHAR('>');
-			} else if (p[i] == UCS2_CHAR('.') &&
-				   (p[i+1] == UCS2_CHAR('?') ||
+			} else if (p[i] == UCS2_CHAR('.') && 
+				   (p[i+1] == UCS2_CHAR('?') || 
 				    p[i+1] == UCS2_CHAR('*') ||
 				    p[i+1] == 0)) {
 				p[i] = UCS2_CHAR('"');
@@ -203,29 +204,18 @@
 	}
 
 	if (count != 0) {
-		if (count == 1) {
-			/*
-			 * We're doing this a LOT, so save the effort to allocate
-			 */
-			ZERO_STRUCT(one_max_n);
-			max_n = &one_max_n;
+		max_n = SMB_CALLOC_ARRAY(struct max_n, count);
+		if (!max_n) {
+			return -1;
 		}
-		else {
-			max_n = SMB_CALLOC_ARRAY(struct max_n, count);
-			if (!max_n) {
-				SAFE_FREE(p);
-				SAFE_FREE(s);
-				return -1;
-			}
-			max_n_free = max_n;
-		}
 	}
 
 	ret = ms_fnmatch_core(p, s, max_n, strrchr_w(s, UCS2_CHAR('.')), is_case_sensitive);
 
-	SAFE_FREE(max_n_free);
-	SAFE_FREE(p);
-	SAFE_FREE(s);
+	if (max_n) {
+		free(max_n);
+	}
+
 	return ret;
 }
 

Deleted: branches/samba/upstream/source/lib/packet.c
===================================================================
--- branches/samba/upstream/source/lib/packet.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/packet.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,257 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   Packet handling
-   Copyright (C) Volker Lendecke 2007
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-
-struct packet_context {
-	int fd;
-	struct data_blob in, out;
-};
-
-/*
- * Close the underlying fd
- */
-static int packet_context_destructor(struct packet_context *ctx)
-{
-	return close(ctx->fd);
-}
-
-/*
- * Initialize a packet context. The fd is given to the packet context, meaning
- * that it is automatically closed when the packet context is freed.
- */
-struct packet_context *packet_init(TALLOC_CTX *mem_ctx, int fd)
-{
-	struct packet_context *result;
-
-	if (!(result = TALLOC_ZERO_P(mem_ctx, struct packet_context))) {
-		return NULL;
-	}
-
-	result->fd = fd;
-	talloc_set_destructor(result, packet_context_destructor);
-	return result;
-}
-
-/*
- * Pull data from the fd
- */
-NTSTATUS packet_fd_read(struct packet_context *ctx)
-{
-	int res, available;
-	size_t new_size;
-	uint8 *in;
-
-	res = ioctl(ctx->fd, FIONREAD, &available);
-
-	if (res == -1) {
-		DEBUG(10, ("ioctl(FIONREAD) failed: %s\n", strerror(errno)));
-		return map_nt_error_from_unix(errno);
-	}
-
-	SMB_ASSERT(available >= 0);
-
-	if (available == 0) {
-		return NT_STATUS_END_OF_FILE;
-	}
-
-	new_size = ctx->in.length + available;
-
-	if (new_size < ctx->in.length) {
-		DEBUG(0, ("integer wrap\n"));
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	if (!(in = TALLOC_REALLOC_ARRAY(ctx, ctx->in.data, uint8, new_size))) {
-		DEBUG(10, ("talloc failed\n"));
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	ctx->in.data = in;
-
-	res = recv(ctx->fd, in + ctx->in.length, available, 0);
-
-	if (res < 0) {
-		DEBUG(10, ("recv failed: %s\n", strerror(errno)));
-		return map_nt_error_from_unix(errno);
-	}
-
-	if (res == 0) {
-		return NT_STATUS_END_OF_FILE;
-	}
-
-	ctx->in.length += res;
-
-	return NT_STATUS_OK;
-}
-
-NTSTATUS packet_fd_read_sync(struct packet_context *ctx)
-{
-	int res;
-	fd_set r_fds;
-
-	FD_ZERO(&r_fds);
-	FD_SET(ctx->fd, &r_fds);
-
-	res = sys_select(ctx->fd+1, &r_fds, NULL, NULL, NULL);
-
-	if (res == -1) {
-		DEBUG(10, ("select returned %s\n", strerror(errno)));
-		return map_nt_error_from_unix(errno);
-	}
-
-	return packet_fd_read(ctx);
-}
-
-bool packet_handler(struct packet_context *ctx,
-		    bool (*full_req)(const struct data_blob *data,
-				     size_t *length,
-				     void *private_data),
-		    NTSTATUS (*callback)(const struct data_blob *data,
-					 void *private_data),
-		    void *private_data,
-		    NTSTATUS *status)
-{
-	size_t length;
-	struct data_blob data;
-
-	if (!full_req(&ctx->in, &length, private_data)) {
-		return False;
-	}
-
-	SMB_ASSERT(length <= ctx->in.length);
-
-	data = data_blob(ctx->in.data, length);
-
-	memmove(ctx->in.data, ctx->in.data + length,
-		ctx->in.length - length);
-	ctx->in.length -= length;
-
-	*status = callback(&data, private_data);
-
-	data_blob_free(&data);
-
-	return True;
-}
-
-/*
- * How many bytes of outgoing data do we have pending?
- */
-size_t packet_outgoing_bytes(struct packet_context *ctx)
-{
-	return ctx->out.length;
-}
-
-/*
- * Push data to the fd
- */
-NTSTATUS packet_fd_write(struct packet_context *ctx)
-{
-	ssize_t sent;
-
-	sent = send(ctx->fd, ctx->out.data, ctx->out.length, 0);
-
-	if (sent == -1) {
-		DEBUG(0, ("send failed: %s\n", strerror(errno)));
-		return map_nt_error_from_unix(errno);
-	}
-
-	memmove(ctx->out.data, ctx->out.data + sent,
-		ctx->out.length - sent);
-	ctx->out.length -= sent;
-
-	return NT_STATUS_OK;
-}
-
-/*
- * Sync flush all outgoing bytes
- */
-NTSTATUS packet_flush(struct packet_context *ctx)
-{
-	while (ctx->out.length != 0) {
-		NTSTATUS status = packet_fd_write(ctx);
-		if (!NT_STATUS_IS_OK(status)) {
-			return status;
-		}
-	}
-	return NT_STATUS_OK;
-}
-
-/*
- * Send a list of DATA_BLOBs
- *
- * Example:  packet_send(ctx, 2, data_blob_const(&size, sizeof(size)),
- *			 data_blob_const(buf, size));
- */
-NTSTATUS packet_send(struct packet_context *ctx, int num_blobs, ...)
-{
-	va_list ap;
-	int i;
-	size_t len;
-	uint8 *out;
-
-	len = ctx->out.length;
-
-	va_start(ap, num_blobs);
-	for (i=0; i<num_blobs; i++) {
-		size_t tmp;
-		struct data_blob blob = va_arg(ap, struct data_blob);
-
-		tmp = len + blob.length;
-		if (tmp < len) {
-			DEBUG(0, ("integer overflow\n"));
-			va_end(ap);
-			return NT_STATUS_NO_MEMORY;
-		}
-		len = tmp;
-	}
-	va_end(ap);
-
-	if (len == 0) {
-		return NT_STATUS_OK;
-	}
-
-	if (!(out = TALLOC_REALLOC_ARRAY(ctx, ctx->out.data, uint8, len))) {
-		DEBUG(0, ("talloc failed\n"));
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	ctx->out.data = out;
-
-	va_start(ap, num_blobs);
-	for (i=0; i<num_blobs; i++) {
-		struct data_blob blob = va_arg(ap, struct data_blob);
-
-		memcpy(ctx->out.data+ctx->out.length, blob.data, blob.length);
-		ctx->out.length += blob.length;
-	}
-	va_end(ap);
-
-	SMB_ASSERT(ctx->out.length == len);
-	return NT_STATUS_OK;
-}
-
-/*
- * Get the packet context's file descriptor
- */
-int packet_get_fd(struct packet_context *ctx)
-{
-	return ctx->fd;
-}
-

Modified: branches/samba/upstream/source/lib/pam_errors.c
===================================================================
--- branches/samba/upstream/source/lib/pam_errors.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/pam_errors.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -14,17 +14,14 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
 
 #ifdef WITH_PAM
-#if defined(HAVE_SECURITY_PAM_APPL_H)
 #include <security/pam_appl.h>
-#elif defined(HAVE_PAM_PAM_APPL_H)
-#include <pam/pam_appl.h>
-#endif
 
 #if defined(PAM_AUTHTOK_RECOVERY_ERR) && !defined(PAM_AUTHTOK_RECOVER_ERR)
 #define PAM_AUTHTOK_RECOVER_ERR PAM_AUTHTOK_RECOVERY_ERR

Modified: branches/samba/upstream/source/lib/pidfile.c
===================================================================
--- branches/samba/upstream/source/lib/pidfile.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/pidfile.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -33,15 +34,12 @@
 	char pidstr[20];
 	pid_t pid;
 	unsigned int ret;
-	char * pidFile;
+	pstring pidFile;
 
-	if (asprintf(&pidFile, "%s/%s.pid", lp_piddir(), name) == -1) {
-		return 0;
-	}
+	slprintf(pidFile, sizeof(pidFile)-1, "%s/%s.pid", lp_piddir(), name);
 
 	fd = sys_open(pidFile, O_NONBLOCK | O_RDONLY, 0644);
 	if (fd == -1) {
-		SAFE_FREE(pidFile);
 		return 0;
 	}
 
@@ -70,14 +68,12 @@
 		goto noproc;
 	}
 
-	SAFE_FREE(pidFile);
 	close(fd);
 	return (pid_t)ret;
 
  noproc:
 	close(fd);
 	unlink(pidFile);
-	SAFE_FREE(pidFile);
 	return 0;
 }
 
@@ -86,33 +82,29 @@
 {
 	int     fd;
 	char    buf[20];
-	const char    *short_configfile;
-	char *name;
-	char *pidFile;
+	char    *short_configfile;
+	pstring name;
+	pstring pidFile;
 	pid_t pid;
 
 	/* Add a suffix to the program name if this is a process with a
 	 * none default configuration file name. */
-	if (strcmp( CONFIGFILE, get_dyn_CONFIGFILE()) == 0) {
-		name = SMB_STRDUP(program_name);
+	if (strcmp( CONFIGFILE, dyn_CONFIGFILE) == 0) {
+		strncpy( name, program_name, sizeof( name)-1);
 	} else {
-		short_configfile = strrchr( get_dyn_CONFIGFILE(), '/');
+		short_configfile = strrchr( dyn_CONFIGFILE, '/');
 		if (short_configfile == NULL) {
 			/* conf file in current directory */
-			short_configfile = get_dyn_CONFIGFILE();
+			short_configfile = dyn_CONFIGFILE;
 		} else {
 			/* full/relative path provided */
 			short_configfile++;
 		}
-		if (asprintf(&name, "%s-%s", program_name,
-			     short_configfile) == -1) {
-			smb_panic("asprintf failed");
-		}
+		slprintf( name, sizeof( name)-1, "%s-%s", program_name,
+			  short_configfile );
 	}
 
-	if (asprintf(&pidFile, "%s/%s.pid", lp_piddir(), name) == -1) {
-		smb_panic("asprintf failed");
-	}
+	slprintf(pidFile, sizeof(pidFile)-1, "%s/%s.pid", lp_piddir(), name);
 
 	pid = pidfile_pid(name);
 	if (pid != 0) {
@@ -142,6 +134,4 @@
 		exit(1);
 	}
 	/* Leave pid file open & locked for the duration... */
-	SAFE_FREE(name);
-	SAFE_FREE(pidFile);
 }

Modified: branches/samba/upstream/source/lib/popt_common.c
===================================================================
--- branches/samba/upstream/source/lib/popt_common.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/popt_common.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -33,32 +34,30 @@
  *		-i,--scope
  */
 
-extern bool AllowDebugChange;
-extern bool override_logfile;
+extern pstring user_socket_options;
+extern BOOL AllowDebugChange;
+extern BOOL override_logfile;
 
+struct user_auth_info cmdline_auth_info;
+
 static void set_logfile(poptContext con, const char * arg)
 {
 
-	char *logfile = NULL;
+	pstring logfile;
 	const char *pname;
-
+	
 	/* Find out basename of current program */
 	pname = strrchr_m(poptGetInvocationName(con),'/');
 
 	if (!pname)
 		pname = poptGetInvocationName(con);
-	else
+	else 
 		pname++;
 
-	if (asprintf(&logfile, "%s/log.%s", arg, pname) < 0) {
-		return;
-	}
+	pstr_sprintf(logfile, "%s/log.%s", arg, pname);
 	lp_set_logfile(logfile);
-	SAFE_FREE(logfile);
 }
 
-static bool PrintSambaVersionString;
-
 static void popt_common_callback(poptContext con,
 			   enum poptCallbackReason reason,
 			   const struct poptOption *opt,
@@ -66,27 +65,10 @@
 {
 
 	if (reason == POPT_CALLBACK_REASON_PRE) {
-		set_logfile(con, get_dyn_LOGFILEBASE());
+		set_logfile(con, dyn_LOGFILEBASE);
 		return;
 	}
 
-	if (reason == POPT_CALLBACK_REASON_POST) {
-
-		if (PrintSambaVersionString) {
-			printf( "Version %s\n", SAMBA_VERSION_STRING);
-			exit(0);
-		}
-
-		if (is_default_dyn_CONFIGFILE()) {
-			if(getenv("SMB_CONF_PATH")) {
-				set_dyn_CONFIGFILE(getenv("SMB_CONF_PATH"));
-			}
-		}
-
-		/* Further 'every Samba program must do this' hooks here. */
-		return;
-	}
-
 	switch(opt->val) {
 	case 'd':
 		if (arg) {
@@ -96,18 +78,19 @@
 		break;
 
 	case 'V':
-		PrintSambaVersionString = True;
+		printf( "Version %s\n", SAMBA_VERSION_STRING);
+		exit(0);
 		break;
 
 	case 'O':
 		if (arg) {
-			lp_do_parameter(-1, "socket options", arg);
+			pstrcpy(user_socket_options,arg);
 		}
 		break;
 
 	case 's':
 		if (arg) {
-			set_dyn_CONFIGFILE(arg);
+			pstrcpy(dyn_CONFIGFILE, arg);
 		}
 		break;
 
@@ -121,7 +104,7 @@
 		if (arg) {
 			set_logfile(con, arg);
 			override_logfile = True;
-			set_dyn_LOGFILEBASE(arg);
+			pstr_sprintf(dyn_LOGFILEBASE, "%s", arg);
 		}
 		break;
 
@@ -151,7 +134,7 @@
 };
 
 struct poptOption popt_common_samba[] = {
-	{ NULL, 0, POPT_ARG_CALLBACK|POPT_CBFLAG_PRE|POPT_CBFLAG_POST, (void *)popt_common_callback },
+	{ NULL, 0, POPT_ARG_CALLBACK|POPT_CBFLAG_PRE, (void *)popt_common_callback },
 	{ "debuglevel", 'd', POPT_ARG_STRING, NULL, 'd', "Set debug level", "DEBUGLEVEL" },
 	{ "configfile", 's', POPT_ARG_STRING, NULL, 's', "Use alternate configuration file", "CONFIGFILE" },
 	{ "log-basename", 'l', POPT_ARG_STRING, NULL, 'l', "Base name for log files", "LOGFILEBASE" },
@@ -159,12 +142,6 @@
 	POPT_TABLEEND
 };
 
-struct poptOption popt_common_configfile[] = {
-	{ NULL, 0, POPT_ARG_CALLBACK|POPT_CBFLAG_PRE|POPT_CBFLAG_POST, (void *)popt_common_callback },
-	{ "configfile", 0, POPT_ARG_STRING, NULL, 's', "Use alternate configuration file", "CONFIGFILE" },
-	POPT_TABLEEND
-};
-
 struct poptOption popt_common_version[] = {
 	{ NULL, 0, POPT_ARG_CALLBACK, (void *)popt_common_callback },
 	{ "version", 'V', POPT_ARG_NONE, NULL, 'V', "Print version" },
@@ -208,61 +185,61 @@
 	switch (opt->val) {
 	case DYN_SBINDIR:
 		if (arg) {
-			set_dyn_SBINDIR(arg);
+			dyn_SBINDIR = SMB_STRDUP(arg);
 		}
 		break;
 
 	case DYN_BINDIR:
 		if (arg) {
-			set_dyn_BINDIR(arg);
+			dyn_BINDIR = SMB_STRDUP(arg);
 		}
 		break;
 
 	case DYN_SWATDIR:
 		if (arg) {
-			set_dyn_SWATDIR(arg);
+			dyn_SWATDIR = SMB_STRDUP(arg);
 		}
 		break;
 
 	case DYN_LMHOSTSFILE:
 		if (arg) {
-			set_dyn_LMHOSTSFILE(arg);
+			pstrcpy(dyn_LMHOSTSFILE, arg);
 		}
 		break;
 
 	case DYN_LIBDIR:
 		if (arg) {
-			set_dyn_LIBDIR(arg);
+			pstrcpy(dyn_LIBDIR, arg);
 		}
 		break;
 
 	case DYN_SHLIBEXT:
 		if (arg) {
-			set_dyn_SHLIBEXT(arg);
+			fstrcpy(dyn_SHLIBEXT, arg);
 		}
 		break;
 
 	case DYN_LOCKDIR:
 		if (arg) {
-			set_dyn_LOCKDIR(arg);
+			pstrcpy(dyn_LOCKDIR, arg);
 		}
 		break;
 
 	case DYN_PIDDIR:
 		if (arg) {
-			set_dyn_PIDDIR(arg);
+			pstrcpy(dyn_PIDDIR, arg);
 		}
 		break;
 
 	case DYN_SMB_PASSWD_FILE:
 		if (arg) {
-			set_dyn_SMB_PASSWD_FILE(arg);
+			pstrcpy(dyn_SMB_PASSWD_FILE, arg);
 		}
 		break;
 
 	case DYN_PRIVATE_DIR:
 		if (arg) {
-			set_dyn_PRIVATE_DIR(arg);
+			pstrcpy(dyn_PRIVATE_DIR, arg);
 		}
 		break;
 
@@ -301,24 +278,22 @@
  * get a password from a a file or file descriptor
  * exit on failure
  * ****************************************************************************/
-
-static void get_password_file(void)
+static void get_password_file(struct user_auth_info *a)
 {
 	int fd = -1;
 	char *p;
-	bool close_it = False;
-	char *spec = NULL;
+	BOOL close_it = False;
+	pstring spec;
 	char pass[128];
 
 	if ((p = getenv("PASSWD_FD")) != NULL) {
-		if (asprintf(&spec, "descriptor %s", p) < 0) {
-			return;
-		}
+		pstrcpy(spec, "descriptor ");
+		pstrcat(spec, p);
 		sscanf(p, "%d", &fd);
-		close_it = false;
+		close_it = False;
 	} else if ((p = getenv("PASSWD_FILE")) != NULL) {
 		fd = sys_open(p, O_RDONLY, 0);
-		spec = SMB_STRDUP(p);
+		pstrcpy(spec, p);
 		if (fd < 0) {
 			fprintf(stderr, "Error opening PASSWD_FILE %s: %s\n",
 					spec, strerror(errno));
@@ -327,11 +302,6 @@
 		close_it = True;
 	}
 
-	if (fd < 0) {
-		fprintf(stderr, "fd = %d, < 0\n", fd);
-		exit(1);
-	}
-
 	for(p = pass, *p = '\0'; /* ensure that pass is null-terminated */
 		p && p - pass < sizeof(pass);) {
 		switch (read(fd, p, 1)) {
@@ -348,26 +318,21 @@
 			} else {
 				fprintf(stderr, "Error reading password from file %s: %s\n",
 						spec, "empty password\n");
-				SAFE_FREE(spec);
 				exit(1);
 			}
 
 		default:
 			fprintf(stderr, "Error reading password from file %s: %s\n",
 					spec, strerror(errno));
-			SAFE_FREE(spec);
 			exit(1);
 		}
 	}
-	SAFE_FREE(spec);
-
-	set_cmdline_auth_info_password(pass);
-	if (close_it) {
+	pstrcpy(a->password, pass);
+	if (close_it)
 		close(fd);
-	}
 }
 
-static void get_credentials_file(const char *file)
+static void get_credentials_file(const char *file, struct user_auth_info *info) 
 {
 	XFILE *auth;
 	fstring buf;
@@ -409,13 +374,15 @@
 		while ((*val!='\0') && ((*val==' ') || (*val=='\t')))
 			val++;
 
-		if (strwicmp("password", param) == 0) {
-			set_cmdline_auth_info_password(val);
-		} else if (strwicmp("username", param) == 0) {
-			set_cmdline_auth_info_username(val);
-		} else if (strwicmp("domain", param) == 0) {
-			set_global_myworkgroup(val);
+		if (strwicmp("password", param) == 0)
+		{
+			pstrcpy(info->password, val);
+			info->got_pass = True;
 		}
+		else if (strwicmp("username", param) == 0)
+			pstrcpy(info->username, val);
+		else if (strwicmp("domain", param) == 0)
+			set_global_myworkgroup(val);
 		memset(buf, 0, sizeof(buf));
 	}
 	x_fclose(auth);
@@ -428,11 +395,10 @@
  *		-N,--no-pass
  *		-S,--signing
  *              -P --machine-pass
- * 		-e --encrypt
  */
 
 
-static void popt_common_credentials_callback(poptContext con,
+static void popt_common_credentials_callback(poptContext con, 
 					enum poptCallbackReason reason,
 					const struct poptOption *opt,
 					const char *arg, const void *data)
@@ -440,35 +406,32 @@
 	char *p;
 
 	if (reason == POPT_CALLBACK_REASON_PRE) {
-		set_cmdline_auth_info_username("GUEST");
+		cmdline_auth_info.use_kerberos = False;
+		cmdline_auth_info.got_pass = False;
+		cmdline_auth_info.signing_state = Undefined;
+		pstrcpy(cmdline_auth_info.username, "GUEST");	
 
-		if (getenv("LOGNAME")) {
-			set_cmdline_auth_info_username(getenv("LOGNAME"));
-		}
+		if (getenv("LOGNAME"))pstrcpy(cmdline_auth_info.username,getenv("LOGNAME"));
 
 		if (getenv("USER")) {
-			char *puser = SMB_STRDUP(getenv("USER"));
-			if (!puser) {
-				exit(ENOMEM);
-			}
-			set_cmdline_auth_info_username(puser);
+			pstrcpy(cmdline_auth_info.username,getenv("USER"));
 
-			if ((p = strchr_m(puser,'%'))) {
-				size_t len;
+			if ((p = strchr_m(cmdline_auth_info.username,'%'))) {
 				*p = 0;
-				len = strlen(p+1);
-				set_cmdline_auth_info_password(p+1);
-				memset(strchr_m(getenv("USER"),'%')+1,'X',len);
+				pstrcpy(cmdline_auth_info.password,p+1);
+				cmdline_auth_info.got_pass = True;
+				memset(strchr_m(getenv("USER"),'%')+1,'X',strlen(cmdline_auth_info.password));
 			}
-			SAFE_FREE(puser);
 		}
 
 		if (getenv("PASSWD")) {
-			set_cmdline_auth_info_password(getenv("PASSWD"));
+			pstrcpy(cmdline_auth_info.password,getenv("PASSWD"));
+			cmdline_auth_info.got_pass = True;
 		}
 
 		if (getenv("PASSWD_FD") || getenv("PASSWD_FILE")) {
-			get_password_file();
+			get_password_file(&cmdline_auth_info);
+			cmdline_auth_info.got_pass = True;
 		}
 
 		return;
@@ -478,24 +441,19 @@
 	case 'U':
 		{
 			char *lp;
-			char *puser = SMB_STRDUP(arg);
 
-			if ((lp=strchr_m(puser,'%'))) {
-				size_t len;
+			pstrcpy(cmdline_auth_info.username,arg);
+			if ((lp=strchr_m(cmdline_auth_info.username,'%'))) {
 				*lp = 0;
-				set_cmdline_auth_info_username(puser);
-				set_cmdline_auth_info_password(lp+1);
-				len = strlen(lp+1);
-				memset(strchr_m(arg,'%')+1,'X',len);
-			} else {
-				set_cmdline_auth_info_username(puser);
+				pstrcpy(cmdline_auth_info.password,lp+1);
+				cmdline_auth_info.got_pass = True;
+				memset(strchr_m(arg,'%')+1,'X',strlen(cmdline_auth_info.password));
 			}
-			SAFE_FREE(puser);
 		}
 		break;
 
 	case 'A':
-		get_credentials_file(arg);
+		get_credentials_file(arg, &cmdline_auth_info);
 		break;
 
 	case 'k':
@@ -503,37 +461,66 @@
 		d_printf("No kerberos support compiled in\n");
 		exit(1);
 #else
-		set_cmdline_auth_info_use_krb5_ticket();
+		cmdline_auth_info.use_kerberos = True;
+		cmdline_auth_info.got_pass = True;
 #endif
 		break;
 
 	case 'S':
-		if (!set_cmdline_auth_info_signing_state(arg)) {
-			fprintf(stderr, "Unknown signing option %s\n", arg );
-			exit(1);
+		{
+			cmdline_auth_info.signing_state = -1;
+			if (strequal(arg, "off") || strequal(arg, "no") || strequal(arg, "false"))
+				cmdline_auth_info.signing_state = False;
+			else if (strequal(arg, "on") || strequal(arg, "yes") || strequal(arg, "true") ||
+					strequal(arg, "auto") )
+				cmdline_auth_info.signing_state = True;
+			else if (strequal(arg, "force") || strequal(arg, "required") || strequal(arg, "forced"))
+				cmdline_auth_info.signing_state = Required;
+			else {
+				fprintf(stderr, "Unknown signing option %s\n", arg );
+				exit(1);
+			}
 		}
 		break;
 	case 'P':
-		set_cmdline_auth_info_use_machine_account();
-		break;
-	case 'N':
-		set_cmdline_auth_info_password("");
-		break;
-	case 'e':
-		set_cmdline_auth_info_smb_encrypt();
-		break;
+	        {
+			char *opt_password = NULL;
+			/* it is very useful to be able to make ads queries as the
+			   machine account for testing purposes and for domain leave */
+			
+			if (!secrets_init()) {
+				d_printf("ERROR: Unable to open secrets database\n");
+				exit(1);
+			}
+			
+			opt_password = secrets_fetch_machine_password(lp_workgroup(), NULL, NULL);
+			
+			if (!opt_password) {
+				d_printf("ERROR: Unable to fetch machine password\n");
+				exit(1);
+			}
+			pstr_sprintf(cmdline_auth_info.username, "%s$", 
+				     global_myname());
+			pstrcpy(cmdline_auth_info.password,opt_password);
+			SAFE_FREE(opt_password);
 
+			/* machine accounts only work with kerberos */
+			cmdline_auth_info.use_kerberos = True;
+			cmdline_auth_info.got_pass = True;
+		}
+		break;
 	}
 }
 
+
+
 struct poptOption popt_common_credentials[] = {
 	{ NULL, 0, POPT_ARG_CALLBACK|POPT_CBFLAG_PRE, (void *)popt_common_credentials_callback },
 	{ "user", 'U', POPT_ARG_STRING, NULL, 'U', "Set the network username", "USERNAME" },
-	{ "no-pass", 'N', POPT_ARG_NONE, NULL, 'N', "Don't ask for a password" },
-	{ "kerberos", 'k', POPT_ARG_NONE, NULL, 'k', "Use kerberos (active directory) authentication" },
+	{ "no-pass", 'N', POPT_ARG_NONE, &cmdline_auth_info.got_pass, 0, "Don't ask for a password" },
+	{ "kerberos", 'k', POPT_ARG_NONE, &cmdline_auth_info.use_kerberos, 'k', "Use kerberos (active directory) authentication" },
 	{ "authentication-file", 'A', POPT_ARG_STRING, NULL, 'A', "Get the credentials from a file", "FILE" },
 	{ "signing", 'S', POPT_ARG_STRING, NULL, 'S', "Set the client signing state", "on|off|required" },
 	{"machine-pass", 'P', POPT_ARG_NONE, NULL, 'P', "Use stored machine account password" },
-	{"encrypt", 'e', POPT_ARG_NONE, NULL, 'e', "Encrypt SMB transport (UNIX extended servers only)" },
 	POPT_TABLEEND
 };

Modified: branches/samba/upstream/source/lib/privileges.c
===================================================================
--- branches/samba/upstream/source/lib/privileges.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/privileges.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,11 +4,10 @@
    Copyright (C) Jean François Micouleau	1998-2001
    Copyright (C) Simo Sorce			2002-2003
    Copyright (C) Gerald (Jerry) Carter          2005
-   Copyright (C) Michael Adam			2007
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
  
@@ -25,49 +25,247 @@
 
 #define PRIVPREFIX              "PRIV_"
 
+static const SE_PRIV se_priv_all  = SE_ALL_PRIVS;
+static const SE_PRIV se_priv_end  = SE_END;
+
+/* Define variables for all privileges so we can use the
+   SE_PRIV* in the various se_priv_XXX() functions */
+
+const SE_PRIV se_priv_none       = SE_NONE;
+const SE_PRIV se_machine_account = SE_MACHINE_ACCOUNT;
+const SE_PRIV se_print_operator  = SE_PRINT_OPERATOR;
+const SE_PRIV se_add_users       = SE_ADD_USERS;
+const SE_PRIV se_disk_operators  = SE_DISK_OPERATOR;
+const SE_PRIV se_remote_shutdown = SE_REMOTE_SHUTDOWN;
+const SE_PRIV se_restore         = SE_RESTORE;
+const SE_PRIV se_take_ownership  = SE_TAKE_OWNERSHIP;
+
+/********************************************************************
+ This is a list of privileges reported by a WIndows 2000 SP4 AD DC
+ just for reference purposes (and I know the LUID is not guaranteed 
+ across reboots):
+
+            SeCreateTokenPrivilege  Create a token object ( 0x0, 0x2 )
+     SeAssignPrimaryTokenPrivilege  Replace a process level token ( 0x0, 0x3 )
+             SeLockMemoryPrivilege  Lock pages in memory ( 0x0, 0x4 )
+          SeIncreaseQuotaPrivilege  Increase quotas ( 0x0, 0x5 )
+         SeMachineAccountPrivilege  Add workstations to domain ( 0x0, 0x6 )
+                    SeTcbPrivilege  Act as part of the operating system ( 0x0, 0x7 )
+               SeSecurityPrivilege  Manage auditing and security log ( 0x0, 0x8 )
+          SeTakeOwnershipPrivilege  Take ownership of files or other objects ( 0x0, 0x9 )
+             SeLoadDriverPrivilege  Load and unload device drivers ( 0x0, 0xa )
+          SeSystemProfilePrivilege  Profile system performance ( 0x0, 0xb )
+             SeSystemtimePrivilege  Change the system time ( 0x0, 0xc )
+   SeProfileSingleProcessPrivilege  Profile single process ( 0x0, 0xd )
+   SeIncreaseBasePriorityPrivilege  Increase scheduling priority ( 0x0, 0xe )
+         SeCreatePagefilePrivilege  Create a pagefile ( 0x0, 0xf )
+        SeCreatePermanentPrivilege  Create permanent shared objects ( 0x0, 0x10 )
+                 SeBackupPrivilege  Back up files and directories ( 0x0, 0x11 )
+                SeRestorePrivilege  Restore files and directories ( 0x0, 0x12 )
+               SeShutdownPrivilege  Shut down the system ( 0x0, 0x13 )
+                  SeDebugPrivilege  Debug programs ( 0x0, 0x14 )
+                  SeAuditPrivilege  Generate security audits ( 0x0, 0x15 )
+      SeSystemEnvironmentPrivilege  Modify firmware environment values ( 0x0, 0x16 )
+           SeChangeNotifyPrivilege  Bypass traverse checking ( 0x0, 0x17 )
+         SeRemoteShutdownPrivilege  Force shutdown from a remote system ( 0x0, 0x18 )
+                 SeUndockPrivilege  Remove computer from docking station ( 0x0, 0x19 )
+              SeSyncAgentPrivilege  Synchronize directory service data ( 0x0, 0x1a )
+       SeEnableDelegationPrivilege  Enable computer and user accounts to be trusted for delegation ( 0x0, 0x1b )
+           SeManageVolumePrivilege  Perform volume maintenance tasks ( 0x0, 0x1c )
+            SeImpersonatePrivilege  Impersonate a client after authentication ( 0x0, 0x1d )
+           SeCreateGlobalPrivilege  Create global objects ( 0x0, 0x1e )
+
+ ********************************************************************/
+
+/* we have to define the LUID here due to a horrible check by printmig.exe
+   that requires the SeBackupPrivilege match what is in Windows.  So match
+   those that we implement and start Samba privileges at 0x1001 */
+   
+PRIVS privs[] = {
+#if 0	/* usrmgr will display these twice if you include them.  We don't 
+	   use them but we'll keep the bitmasks reserved in privileges.h anyways */
+	   
+	{SE_NETWORK_LOGON,	"SeNetworkLogonRight",		"Access this computer from network", 	   { 0x0, 0x0 }},
+	{SE_INTERACTIVE_LOGON,	"SeInteractiveLogonRight",	"Log on locally", 			   { 0x0, 0x0 }},
+	{SE_BATCH_LOGON,	"SeBatchLogonRight",		"Log on as a batch job",		   { 0x0, 0x0 }},
+	{SE_SERVICE_LOGON,	"SeServiceLogonRight",		"Log on as a service",			   { 0x0, 0x0 }},
+#endif
+	{SE_MACHINE_ACCOUNT,	"SeMachineAccountPrivilege",	"Add machines to domain",		   { 0x0, 0x0006 }},
+	{SE_TAKE_OWNERSHIP,     "SeTakeOwnershipPrivilege",     "Take ownership of files or other objects",{ 0x0, 0x0009 }},
+        {SE_BACKUP,             "SeBackupPrivilege",            "Back up files and directories",	   { 0x0, 0x0011 }},
+        {SE_RESTORE,            "SeRestorePrivilege",           "Restore files and directories",	   { 0x0, 0x0012 }},
+	{SE_REMOTE_SHUTDOWN,	"SeRemoteShutdownPrivilege",	"Force shutdown from a remote system",	   { 0x0, 0x0018 }},
+	
+	{SE_PRINT_OPERATOR,	"SePrintOperatorPrivilege",	"Manage printers",			   { 0x0, 0x1001 }},
+	{SE_ADD_USERS,		"SeAddUsersPrivilege",		"Add users and groups to the domain",	   { 0x0, 0x1002 }},
+	{SE_DISK_OPERATOR,	"SeDiskOperatorPrivilege",	"Manage disk shares",			   { 0x0, 0x1003 }},
+
+	{SE_END, "", "", { 0x0, 0x0 }}
+};
+
 typedef struct {
 	size_t count;
 	DOM_SID *list;
 } SID_LIST;
 
 typedef struct {
-	TALLOC_CTX *mem_ctx;
 	SE_PRIV privilege;
 	SID_LIST sids;
 } PRIV_SID_LIST;
 
+/***************************************************************************
+ copy an SE_PRIV structure
+****************************************************************************/
 
-static bool get_privileges( const DOM_SID *sid, SE_PRIV *mask )
+BOOL se_priv_copy( SE_PRIV *dst, const SE_PRIV *src )
 {
-	struct db_context *db = get_account_pol_db();
-	fstring tmp, keystr;
-	TDB_DATA data;
+	if ( !dst || !src )
+		return False;
+		
+	memcpy( dst, src, sizeof(SE_PRIV) );
+	
+	return True;
+}
 
+/***************************************************************************
+ combine 2 SE_PRIV structures and store the resulting set in mew_mask
+****************************************************************************/
+
+void se_priv_add( SE_PRIV *mask, const SE_PRIV *addpriv )
+{
+	int i;
+
+	for ( i=0; i<SE_PRIV_MASKSIZE; i++ ) {
+		mask->mask[i] |= addpriv->mask[i];
+	}
+}
+
+/***************************************************************************
+ remove one SE_PRIV sytucture from another and store the resulting set 
+ in mew_mask
+****************************************************************************/
+
+void se_priv_remove( SE_PRIV *mask, const SE_PRIV *removepriv )
+{	
+	int i;
+
+	for ( i=0; i<SE_PRIV_MASKSIZE; i++ ) {
+		mask->mask[i] &= ~removepriv->mask[i];
+	}
+}
+
+/***************************************************************************
+ invert a given SE_PRIV and store the set in new_mask
+****************************************************************************/
+
+static void se_priv_invert( SE_PRIV *new_mask, const SE_PRIV *mask )
+{	
+	SE_PRIV allprivs;
+	
+	se_priv_copy( &allprivs, &se_priv_all );
+	se_priv_remove( &allprivs, mask );
+	se_priv_copy( new_mask, &allprivs );
+}
+
+/***************************************************************************
+ check if 2 SE_PRIV structure are equal
+****************************************************************************/
+
+static BOOL se_priv_equal( const SE_PRIV *mask1, const SE_PRIV *mask2 )
+{	
+	return ( memcmp(mask1, mask2, sizeof(SE_PRIV)) == 0 );
+}
+
+/***************************************************************************
+ check if a SE_PRIV has any assigned privileges
+****************************************************************************/
+
+static BOOL se_priv_empty( const SE_PRIV *mask )
+{
+	SE_PRIV p1;
+	int i;
+	
+	se_priv_copy( &p1, mask );
+
+	for ( i=0; i<SE_PRIV_MASKSIZE; i++ ) {
+		p1.mask[i] &= se_priv_all.mask[i];
+	}
+	
+	return se_priv_equal( &p1, &se_priv_none );
+}
+
+/*********************************************************************
+ Lookup the SE_PRIV value for a privilege name 
+*********************************************************************/
+
+BOOL se_priv_from_name( const char *name, SE_PRIV *mask )
+{
+	int i;
+
+	for ( i=0; !se_priv_equal(&privs[i].se_priv, &se_priv_end); i++ ) {
+		if ( strequal( privs[i].name, name ) ) {
+			se_priv_copy( mask, &privs[i].se_priv );
+			return True;
+		}
+	}
+
+	return False;
+}
+
+/***************************************************************************
+ dump an SE_PRIV structure to the log files
+****************************************************************************/
+
+void dump_se_priv( int dbg_cl, int dbg_lvl, const SE_PRIV *mask )
+{
+	int i;
+	
+	DEBUGADDC( dbg_cl, dbg_lvl,("SE_PRIV "));
+	
+	for ( i=0; i<SE_PRIV_MASKSIZE; i++ ) {
+		DEBUGADDC( dbg_cl, dbg_lvl,(" 0x%x", mask->mask[i] ));
+	}
+		
+	DEBUGADDC( dbg_cl, dbg_lvl, ("\n"));
+}
+
+/***************************************************************************
+ Retrieve the privilege mask (set) for a given SID
+****************************************************************************/
+
+static BOOL get_privileges( const DOM_SID *sid, SE_PRIV *mask )
+{
+	TDB_CONTEXT *tdb = get_account_pol_tdb();
+	fstring keystr;
+	TDB_DATA key, data;
+
 	/* Fail if the admin has not enable privileges */
 	
 	if ( !lp_enable_privileges() ) {
 		return False;
 	}
 	
-	if ( db == NULL )
+	if ( !tdb )
 		return False;
 
 	/* PRIV_<SID> (NULL terminated) as the key */
 	
-	fstr_sprintf(keystr, "%s%s", PRIVPREFIX, sid_to_fstring(tmp, sid));
+	fstr_sprintf( keystr, "%s%s", PRIVPREFIX, sid_string_static(sid) );
+	key.dptr = keystr;
+	key.dsize = strlen(keystr) + 1;
 
-	data = dbwrap_fetch_bystring( db, talloc_tos(), keystr );
+	data = tdb_fetch( tdb, key );
 	
 	if ( !data.dptr ) {
-		DEBUG(3, ("get_privileges: No privileges assigned to SID "
-			  "[%s]\n", sid_string_dbg(sid)));
+		DEBUG(3,("get_privileges: No privileges assigned to SID [%s]\n",
+			sid_string_static(sid)));
 		return False;
 	}
 	
 	SMB_ASSERT( data.dsize == sizeof( SE_PRIV ) );
 	
 	se_priv_copy( mask, (SE_PRIV*)data.dptr );
-	TALLOC_FREE(data.dptr);
+	SAFE_FREE(data.dptr);
 
 	return True;
 }
@@ -76,16 +274,16 @@
  Store the privilege mask (set) for a given SID
 ****************************************************************************/
 
-static bool set_privileges( const DOM_SID *sid, SE_PRIV *mask )
+static BOOL set_privileges( const DOM_SID *sid, SE_PRIV *mask )
 {
-	struct db_context *db = get_account_pol_db();
-	fstring tmp, keystr;
-	TDB_DATA data;
+	TDB_CONTEXT *tdb = get_account_pol_tdb();
+	fstring keystr;
+	TDB_DATA key, data;
 	
 	if ( !lp_enable_privileges() )
 		return False;
 
-	if ( db == NULL )
+	if ( !tdb )
 		return False;
 
 	if ( !sid || (sid->num_auths == 0) ) {
@@ -95,26 +293,160 @@
 
 	/* PRIV_<SID> (NULL terminated) as the key */
 	
-	fstr_sprintf(keystr, "%s%s", PRIVPREFIX, sid_to_fstring(tmp, sid));
+	fstr_sprintf( keystr, "%s%s", PRIVPREFIX, sid_string_static(sid) );
+	key.dptr = keystr;
+	key.dsize = strlen(keystr) + 1;
 	
 	/* no packing.  static size structure, just write it out */
 	
-	data.dptr  = (uint8 *)mask;
+	data.dptr  = (char*)mask;
 	data.dsize = sizeof(SE_PRIV);
 
-	return NT_STATUS_IS_OK(dbwrap_store_bystring(db, keystr, data,
-						     TDB_REPLACE));
+	return ( tdb_store(tdb, key, data, TDB_REPLACE) != -1 );
 }
 
+/****************************************************************************
+ check if the privilege is in the privilege list
+****************************************************************************/
+
+static BOOL is_privilege_assigned( const SE_PRIV *privileges,
+				   const SE_PRIV *check )
+{
+	SE_PRIV p1, p2;
+
+	if ( !privileges || !check )
+		return False;
+	
+	/* everyone has privileges if you aren't checking for any */
+	
+	if ( se_priv_empty( check ) ) {
+		DEBUG(1,("is_privilege_assigned: no privileges in check_mask!\n"));
+		return True;
+	}
+	
+	se_priv_copy( &p1, check );
+	
+	/* invert the SE_PRIV we want to check for and remove that from the 
+	   original set.  If we are left with the SE_PRIV we are checking 
+	   for then return True */
+	   
+	se_priv_invert( &p1, check );
+	se_priv_copy( &p2, privileges );
+	se_priv_remove( &p2, &p1 );
+	
+	return se_priv_equal( &p2, check );
+}
+
+/****************************************************************************
+ check if the privilege is in the privilege list
+****************************************************************************/
+
+static BOOL is_any_privilege_assigned( SE_PRIV *privileges, const SE_PRIV *check )
+{
+	SE_PRIV p1, p2;
+
+	if ( !privileges || !check )
+		return False;
+	
+	/* everyone has privileges if you aren't checking for any */
+	
+	if ( se_priv_empty( check ) ) {
+		DEBUG(1,("is_any_privilege_assigned: no privileges in check_mask!\n"));
+		return True;
+	}
+	
+	se_priv_copy( &p1, check );
+	
+	/* invert the SE_PRIV we want to check for and remove that from the 
+	   original set.  If we are left with the SE_PRIV we are checking 
+	   for then return True */
+	   
+	se_priv_invert( &p1, check );
+	se_priv_copy( &p2, privileges );
+	se_priv_remove( &p2, &p1 );
+	
+	/* see if we have any bits left */
+	
+	return !se_priv_empty( &p2 );
+}
+
+/****************************************************************************
+ add a privilege to a privilege array
+ ****************************************************************************/
+
+static BOOL privilege_set_add(PRIVILEGE_SET *priv_set, LUID_ATTR set)
+{
+	LUID_ATTR *new_set;
+
+	/* we can allocate memory to add the new privilege */
+
+	new_set = TALLOC_REALLOC_ARRAY(priv_set->mem_ctx, priv_set->set, LUID_ATTR, priv_set->count + 1);
+	if ( !new_set ) {
+		DEBUG(0,("privilege_set_add: failed to allocate memory!\n"));
+		return False;
+	}	
+
+	new_set[priv_set->count].luid.high = set.luid.high;
+	new_set[priv_set->count].luid.low = set.luid.low;
+	new_set[priv_set->count].attr = set.attr;
+
+	priv_set->count++;
+	priv_set->set = new_set;
+
+	return True;
+}
+
 /*********************************************************************
- get a list of all privileges for all sids in the list
+ Generate the LUID_ATTR structure based on a bitmask
+ The assumption here is that the privilege has already been validated
+ so we are guaranteed to find it in the list. 
 *********************************************************************/
 
-bool get_privileges_for_sids(SE_PRIV *privileges, DOM_SID *slist, int scount)
+LUID_ATTR get_privilege_luid( SE_PRIV *mask )
 {
+	LUID_ATTR priv_luid;
+	int i;
+
+	ZERO_STRUCT( priv_luid );
+	
+	for ( i=0; !se_priv_equal(&privs[i].se_priv, &se_priv_end); i++ ) {
+	
+		if ( se_priv_equal( &privs[i].se_priv, mask ) ) {
+			priv_luid.luid = privs[i].luid;
+			break;
+		}
+	}
+
+	return priv_luid;
+}
+
+/*********************************************************************
+ Generate the LUID_ATTR structure based on a bitmask
+*********************************************************************/
+
+const char* get_privilege_dispname( const char *name )
+{
+	int i;
+
+	for ( i=0; !se_priv_equal(&privs[i].se_priv, &se_priv_end); i++ ) {
+	
+		if ( strequal( privs[i].name, name ) ) {
+			return privs[i].description;
+		}
+	}
+
+	return NULL;
+}
+
+/*********************************************************************
+ get a list of all privleges for all sids the in list
+*********************************************************************/
+
+BOOL get_privileges_for_sids(SE_PRIV *privileges, DOM_SID *slist, int scount)
+{
 	SE_PRIV mask;
 	int i;
-	bool found = False;
+	BOOL found = False;
 
 	se_priv_copy( privileges, &se_priv_none );
 	
@@ -124,8 +456,8 @@
 		if ( !get_privileges( &slist[i], &mask ) )
 			continue;
 
-		DEBUG(5,("get_privileges_for_sids: sid = %s\nPrivilege "
-			 "set:\n", sid_string_dbg(&slist[i])));
+		DEBUG(5,("get_privileges_for_sids: sid = %s\nPrivilege set:\n", 
+			sid_string_static(&slist[i])));
 		dump_se_priv( DBGC_ALL, 5, &mask );
 			
 		se_priv_add( privileges, &mask );
@@ -137,10 +469,10 @@
 
 
 /*********************************************************************
- traversal functions for privilege_enumerate_accounts
+ travseral functions for privilege_enumerate_accounts
 *********************************************************************/
 
-static int priv_traverse_fn(struct db_record *rec, void *state)
+static int priv_traverse_fn(TDB_CONTEXT *t, TDB_DATA key, TDB_DATA data, void *state)
 {
 	PRIV_SID_LIST *priv = (PRIV_SID_LIST *)state;
 	int  prefixlen = strlen(PRIVPREFIX);
@@ -149,12 +481,12 @@
 	
 	/* easy check first */
 	
-	if (rec->value.dsize != sizeof(SE_PRIV) )
+	if ( data.dsize != sizeof(SE_PRIV) )
 		return 0;
 
 	/* check we have a PRIV_+SID entry */
 
-	if ( strncmp((char *)rec->key.dptr, PRIVPREFIX, prefixlen) != 0)
+	if ( strncmp(key.dptr, PRIVPREFIX, prefixlen) != 0)
 		return 0;
 		
 	/* check to see if we are looking for a particular privilege */
@@ -162,7 +494,7 @@
 	if ( !se_priv_equal(&priv->privilege, &se_priv_none) ) {
 		SE_PRIV mask;
 		
-		se_priv_copy( &mask, (SE_PRIV*)rec->value.dptr );
+		se_priv_copy( &mask, (SE_PRIV*)data.dptr );
 		
 		/* if the SID does not have the specified privilege 
 		   then just return */
@@ -171,7 +503,7 @@
 			return 0;
 	}
 		
-	fstrcpy( sid_string, (char *)&(rec->key.dptr[strlen(PRIVPREFIX)]) );
+	fstrcpy( sid_string, &key.dptr[strlen(PRIVPREFIX)] );
 
 	/* this is a last ditch safety check to preventing returning
 	   and invalid SID (i've somehow run into this on development branches) */
@@ -185,10 +517,7 @@
 		return 0;
 	}
 
-	if (!NT_STATUS_IS_OK(add_sid_to_array(priv->mem_ctx, &sid,
-					      &priv->sids.list,
-					      &priv->sids.count)))
-	{
+	if (!add_sid_to_array( NULL, &sid, &priv->sids.list, &priv->sids.count )) {
 		return 0;
 	}
 	
@@ -201,10 +530,10 @@
 
 NTSTATUS privilege_enumerate_accounts(DOM_SID **sids, int *num_sids)
 {
-	struct db_context *db = get_account_pol_db();
+	TDB_CONTEXT *tdb = get_account_pol_tdb();
 	PRIV_SID_LIST priv;
 	
-	if (db == NULL) {
+	if (!tdb) {
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
@@ -212,7 +541,7 @@
 
 	se_priv_copy( &priv.privilege, &se_priv_none );
 
-	db->traverse_read(db, priv_traverse_fn, &priv);
+	tdb_traverse( tdb, priv_traverse_fn, &priv);
 
 	/* give the memory away; caller will free */
 	
@@ -222,40 +551,11 @@
 	return NT_STATUS_OK;
 }
 
-/*********************************************************************
- Retrieve list of SIDs granted a particular privilege
-*********************************************************************/
-
-NTSTATUS privilege_enum_sids(const SE_PRIV *mask, TALLOC_CTX *mem_ctx,
-			     DOM_SID **sids, int *num_sids)
-{
-	struct db_context *db = get_account_pol_db();
-	PRIV_SID_LIST priv;
-
-	if (db == NULL) {
-		return NT_STATUS_ACCESS_DENIED;
-	}
-
-	ZERO_STRUCT(priv);
-
-	se_priv_copy(&priv.privilege, mask);
-	priv.mem_ctx = mem_ctx;
-
-	db->traverse_read(db, priv_traverse_fn, &priv);
-
-	/* give the memory away; caller will free */
-
-	*sids      = priv.sids.list;
-	*num_sids  = priv.sids.count;
-
-	return NT_STATUS_OK;
-}
-
 /***************************************************************************
  Add privilege to sid
 ****************************************************************************/
 
-bool grant_privilege(const DOM_SID *sid, const SE_PRIV *priv_mask)
+BOOL grant_privilege(const DOM_SID *sid, const SE_PRIV *priv_mask)
 {
 	SE_PRIV old_mask, new_mask;
 	
@@ -269,7 +569,7 @@
 
 	se_priv_add( &new_mask, priv_mask );
 
-	DEBUG(10,("grant_privilege: %s\n", sid_string_dbg(sid)));
+	DEBUG(10,("grant_privilege: %s\n", sid_string_static(sid)));
 	
 	DEBUGADD( 10, ("original privilege mask:\n"));
 	dump_se_priv( DBGC_ALL, 10, &old_mask );
@@ -284,24 +584,26 @@
  Add a privilege based on its name
 *********************************************************************/
 
-bool grant_privilege_by_name(DOM_SID *sid, const char *name)
+BOOL grant_privilege_by_name(DOM_SID *sid, const char *name)
 {
-	SE_PRIV mask;
+	int i;
 
-	if (! se_priv_from_name(name, &mask)) {
-        	DEBUG(3, ("grant_privilege_by_name: "
-			  "No Such Privilege Found (%s)\n", name));
-		return False;
-	}
+	for ( i=0; !se_priv_equal(&privs[i].se_priv, &se_priv_end); i++ ) {
+		if ( strequal(privs[i].name, name) ) {
+			return grant_privilege( sid, &privs[i].se_priv );
+                }
+        }
 
-	return grant_privilege( sid, &mask );
+        DEBUG(3, ("grant_privilege_by_name: No Such Privilege Found (%s)\n", name));
+
+        return False;
 }
 
 /***************************************************************************
  Remove privilege from sid
 ****************************************************************************/
 
-bool revoke_privilege(const DOM_SID *sid, const SE_PRIV *priv_mask)
+BOOL revoke_privilege(const DOM_SID *sid, const SE_PRIV *priv_mask)
 {
 	SE_PRIV mask;
 	
@@ -310,7 +612,7 @@
 	if ( !get_privileges( sid, &mask ) )
 		return True;
 	
-	DEBUG(10,("revoke_privilege: %s\n", sid_string_dbg(sid)));
+	DEBUG(10,("revoke_privilege: %s\n", sid_string_static(sid)));
 	
 	DEBUGADD( 10, ("original privilege mask:\n"));
 	dump_se_priv( DBGC_ALL, 10, &mask );
@@ -327,7 +629,7 @@
  Revoke all privileges
 *********************************************************************/
 
-bool revoke_all_privileges( DOM_SID *sid )
+BOOL revoke_all_privileges( DOM_SID *sid )
 {
 	return revoke_privilege( sid, &se_priv_all );
 }
@@ -336,18 +638,19 @@
  Add a privilege based on its name
 *********************************************************************/
 
-bool revoke_privilege_by_name(DOM_SID *sid, const char *name)
+BOOL revoke_privilege_by_name(DOM_SID *sid, const char *name)
 {
-	SE_PRIV mask;
+	int i;
 
-	if (! se_priv_from_name(name, &mask)) {
-        	DEBUG(3, ("revoke_privilege_by_name: "
-			  "No Such Privilege Found (%s)\n", name));
-        	return False;
-	}
+	for ( i=0; !se_priv_equal(&privs[i].se_priv, &se_priv_end); i++ ) {
+		if ( strequal(privs[i].name, name) ) {
+			return revoke_privilege( sid, &privs[i].se_priv );
+                }
+        }
 
-	return revoke_privilege(sid, &mask);
+        DEBUG(3, ("revoke_privilege_by_name: No Such Privilege Found (%s)\n", name));
 
+        return False;
 }
 
 /***************************************************************************
@@ -439,11 +742,144 @@
 	return NT_STATUS_OK;
 }
 
+/****************************************************************************
+ Does the user have the specified privilege ?  We only deal with one privilege
+ at a time here.
+*****************************************************************************/
+
+BOOL user_has_privileges(const NT_USER_TOKEN *token, const SE_PRIV *privilege)
+{
+	if ( !token )
+		return False;
+
+	return is_privilege_assigned( &token->privileges, privilege );
+}
+
+/****************************************************************************
+ Does the user have any of the specified privileges ?  We only deal with one privilege
+ at a time here.
+*****************************************************************************/
+
+BOOL user_has_any_privilege(NT_USER_TOKEN *token, const SE_PRIV *privilege)
+{
+	if ( !token )
+		return False;
+
+	return is_any_privilege_assigned( &token->privileges, privilege );
+}
+
+/****************************************************************************
+ Convert a LUID to a named string
+****************************************************************************/
+
+char* luid_to_privilege_name(const LUID *set)
+{
+	static fstring name;
+	int i;
+
+	if (set->high != 0)
+		return NULL;
+
+	for ( i=0; !se_priv_equal(&privs[i].se_priv, &se_priv_end); i++ ) {
+		if ( set->low == privs[i].luid.low ) {
+			fstrcpy( name, privs[i].name );
+			return name;
+		}
+	}
+	
+	return NULL;
+}
+
 /*******************************************************************
+ return the number of elements in the privlege array
 *******************************************************************/
 
-bool is_privileged_sid( const DOM_SID *sid )
+int count_all_privileges( void )
 {
+	static int count;
+	
+	if ( count )
+		return count;
+
+	/* loop over the array and count it */	
+	for ( count=0; !se_priv_equal(&privs[count].se_priv, &se_priv_end); count++ ) ;
+
+	return count;
+}
+
+/*******************************************************************
+*******************************************************************/
+
+BOOL se_priv_to_privilege_set( PRIVILEGE_SET *set, SE_PRIV *mask )
+{
+	int i;
+	uint32 num_privs = count_all_privileges();
+	LUID_ATTR luid;
+	
+	luid.attr = 0;
+	luid.luid.high = 0;
+	
+	for ( i=0; i<num_privs; i++ ) {
+		if ( !is_privilege_assigned(mask, &privs[i].se_priv) )
+			continue;
+		
+		luid.luid = privs[i].luid;
+		
+		if ( !privilege_set_add( set, luid ) )
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+*******************************************************************/
+
+static BOOL luid_to_se_priv( LUID *luid, SE_PRIV *mask )
+{
+	int i;
+	uint32 num_privs = count_all_privileges();
+	
+	for ( i=0; i<num_privs; i++ ) {
+		if ( luid->low == privs[i].luid.low ) {
+			se_priv_copy( mask, &privs[i].se_priv );
+			return True;
+		}
+	}
+
+	return False;
+}
+
+/*******************************************************************
+*******************************************************************/
+
+BOOL privilege_set_to_se_priv( SE_PRIV *mask, PRIVILEGE_SET *privset )
+{
+	int i;
+	
+	ZERO_STRUCTP( mask );
+	
+	for ( i=0; i<privset->count; i++ ) {
+		SE_PRIV r;
+	
+		/* sanity check for invalid privilege.  we really
+		   only care about the low 32 bits */
+		   
+		if ( privset->set[i].luid.high != 0 )
+			return False;
+		
+		if ( luid_to_se_priv( &privset->set[i].luid, &r ) )		
+			se_priv_add( mask, &r );
+	}
+
+	return True;
+}
+
+/*******************************************************************
+*******************************************************************/
+
+BOOL is_privileged_sid( const DOM_SID *sid )
+{
 	SE_PRIV mask;
 	
 	return get_privileges( sid, &mask );
@@ -452,13 +888,17 @@
 /*******************************************************************
 *******************************************************************/
 
-bool grant_all_privileges( const DOM_SID *sid )
+BOOL grant_all_privileges( const DOM_SID *sid )
 {
+	int i;
 	SE_PRIV mask;
+	uint32 num_privs = count_all_privileges();
 
-	if (!se_priv_put_all_privileges(&mask)) {
-		return False;
+	se_priv_copy( &mask, &se_priv_none );
+	
+	for ( i=0; i<num_privs; i++ ) {
+		se_priv_add(&mask, &privs[i].se_priv); 
 	}
-	
+
 	return grant_privilege( sid, &mask );
 }

Deleted: branches/samba/upstream/source/lib/privileges_basic.c
===================================================================
--- branches/samba/upstream/source/lib/privileges_basic.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/privileges_basic.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,515 +0,0 @@
-/*
-   Unix SMB/CIFS implementation.
-   Privileges handling functions
-   Copyright (C) Jean François Micouleau	1998-2001
-   Copyright (C) Simo Sorce			2002-2003
-   Copyright (C) Gerald (Jerry) Carter          2005
-   Copyright (C) Michael Adam			2007
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/*
- * Basic privileges functions (mask-operations and conversion 
- * functions between the different formats (se_priv, privset, luid)
- * moved here * from lib/privileges.c to minimize linker deps.
- *
- * generally SID- and LUID-related code is left in lib/privileges.c
- *
- * some extra functions to hide privs array from lib/privileges.c
- */
- 
-#include "includes.h"
-
-const SE_PRIV se_priv_all         = SE_ALL_PRIVS;
-static const SE_PRIV se_priv_end  = SE_END;
-
-/* Define variables for all privileges so we can use the
-   SE_PRIV* in the various se_priv_XXX() functions */
-
-const SE_PRIV se_priv_none       = SE_NONE;
-const SE_PRIV se_machine_account = SE_MACHINE_ACCOUNT;
-const SE_PRIV se_print_operator  = SE_PRINT_OPERATOR;
-const SE_PRIV se_add_users       = SE_ADD_USERS;
-const SE_PRIV se_disk_operators  = SE_DISK_OPERATOR;
-const SE_PRIV se_remote_shutdown = SE_REMOTE_SHUTDOWN;
-const SE_PRIV se_restore         = SE_RESTORE;
-const SE_PRIV se_take_ownership  = SE_TAKE_OWNERSHIP;
-
-/********************************************************************
- This is a list of privileges reported by a WIndows 2000 SP4 AD DC
- just for reference purposes (and I know the LUID is not guaranteed 
- across reboots):
-
-            SeCreateTokenPrivilege  Create a token object ( 0x0, 0x2 )
-     SeAssignPrimaryTokenPrivilege  Replace a process level token ( 0x0, 0x3 )
-             SeLockMemoryPrivilege  Lock pages in memory ( 0x0, 0x4 )
-          SeIncreaseQuotaPrivilege  Increase quotas ( 0x0, 0x5 )
-         SeMachineAccountPrivilege  Add workstations to domain ( 0x0, 0x6 )
-                    SeTcbPrivilege  Act as part of the operating system ( 0x0, 0x7 )
-               SeSecurityPrivilege  Manage auditing and security log ( 0x0, 0x8 )
-          SeTakeOwnershipPrivilege  Take ownership of files or other objects ( 0x0, 0x9 )
-             SeLoadDriverPrivilege  Load and unload device drivers ( 0x0, 0xa )
-          SeSystemProfilePrivilege  Profile system performance ( 0x0, 0xb )
-             SeSystemtimePrivilege  Change the system time ( 0x0, 0xc )
-   SeProfileSingleProcessPrivilege  Profile single process ( 0x0, 0xd )
-   SeIncreaseBasePriorityPrivilege  Increase scheduling priority ( 0x0, 0xe )
-         SeCreatePagefilePrivilege  Create a pagefile ( 0x0, 0xf )
-        SeCreatePermanentPrivilege  Create permanent shared objects ( 0x0, 0x10 )
-                 SeBackupPrivilege  Back up files and directories ( 0x0, 0x11 )
-                SeRestorePrivilege  Restore files and directories ( 0x0, 0x12 )
-               SeShutdownPrivilege  Shut down the system ( 0x0, 0x13 )
-                  SeDebugPrivilege  Debug programs ( 0x0, 0x14 )
-                  SeAuditPrivilege  Generate security audits ( 0x0, 0x15 )
-      SeSystemEnvironmentPrivilege  Modify firmware environment values ( 0x0, 0x16 )
-           SeChangeNotifyPrivilege  Bypass traverse checking ( 0x0, 0x17 )
-         SeRemoteShutdownPrivilege  Force shutdown from a remote system ( 0x0, 0x18 )
-                 SeUndockPrivilege  Remove computer from docking station ( 0x0, 0x19 )
-              SeSyncAgentPrivilege  Synchronize directory service data ( 0x0, 0x1a )
-       SeEnableDelegationPrivilege  Enable computer and user accounts to be trusted for delegation ( 0x0, 0x1b )
-           SeManageVolumePrivilege  Perform volume maintenance tasks ( 0x0, 0x1c )
-            SeImpersonatePrivilege  Impersonate a client after authentication ( 0x0, 0x1d )
-           SeCreateGlobalPrivilege  Create global objects ( 0x0, 0x1e )
-
- ********************************************************************/
-
-/* we have to define the LUID here due to a horrible check by printmig.exe
-   that requires the SeBackupPrivilege match what is in Windows.  So match
-   those that we implement and start Samba privileges at 0x1001 */
-   
-PRIVS privs[] = {
-#if 0	/* usrmgr will display these twice if you include them.  We don't 
-	   use them but we'll keep the bitmasks reserved in privileges.h anyways */
-	   
-	{SE_NETWORK_LOGON,	"SeNetworkLogonRight",		"Access this computer from network", 	   { 0x0, 0x0 }},
-	{SE_INTERACTIVE_LOGON,	"SeInteractiveLogonRight",	"Log on locally", 			   { 0x0, 0x0 }},
-	{SE_BATCH_LOGON,	"SeBatchLogonRight",		"Log on as a batch job",		   { 0x0, 0x0 }},
-	{SE_SERVICE_LOGON,	"SeServiceLogonRight",		"Log on as a service",			   { 0x0, 0x0 }},
-#endif
-	{SE_MACHINE_ACCOUNT,	"SeMachineAccountPrivilege",	"Add machines to domain",		   { 0x0, 0x0006 }},
-	{SE_TAKE_OWNERSHIP,     "SeTakeOwnershipPrivilege",     "Take ownership of files or other objects",{ 0x0, 0x0009 }},
-        {SE_BACKUP,             "SeBackupPrivilege",            "Back up files and directories",	   { 0x0, 0x0011 }},
-        {SE_RESTORE,            "SeRestorePrivilege",           "Restore files and directories",	   { 0x0, 0x0012 }},
-	{SE_REMOTE_SHUTDOWN,	"SeRemoteShutdownPrivilege",	"Force shutdown from a remote system",	   { 0x0, 0x0018 }},
-	
-	{SE_PRINT_OPERATOR,	"SePrintOperatorPrivilege",	"Manage printers",			   { 0x0, 0x1001 }},
-	{SE_ADD_USERS,		"SeAddUsersPrivilege",		"Add users and groups to the domain",	   { 0x0, 0x1002 }},
-	{SE_DISK_OPERATOR,	"SeDiskOperatorPrivilege",	"Manage disk shares",			   { 0x0, 0x1003 }},
-
-	{SE_END, "", "", { 0x0, 0x0 }}
-};
-
-/***************************************************************************
- copy an SE_PRIV structure
-****************************************************************************/
-
-bool se_priv_copy( SE_PRIV *dst, const SE_PRIV *src )
-{
-	if ( !dst || !src )
-		return False;
-		
-	memcpy( dst, src, sizeof(SE_PRIV) );
-	
-	return True;
-}
-
-/***************************************************************************
- put all privileges into a mask
-****************************************************************************/
-
-bool se_priv_put_all_privileges(SE_PRIV *mask)
-{
-	int i;
-	uint32 num_privs = count_all_privileges();
-
-	if (!se_priv_copy(mask, &se_priv_none)) {
-		return False;
-	}
-	for ( i=0; i<num_privs; i++ ) {
-		se_priv_add(mask, &privs[i].se_priv); 
-	}
-	return True;
-}
-
-/***************************************************************************
- combine 2 SE_PRIV structures and store the resulting set in mew_mask
-****************************************************************************/
-
-void se_priv_add( SE_PRIV *mask, const SE_PRIV *addpriv )
-{
-	int i;
-
-	for ( i=0; i<SE_PRIV_MASKSIZE; i++ ) {
-		mask->mask[i] |= addpriv->mask[i];
-	}
-}
-
-/***************************************************************************
- remove one SE_PRIV sytucture from another and store the resulting set 
- in mew_mask
-****************************************************************************/
-
-void se_priv_remove( SE_PRIV *mask, const SE_PRIV *removepriv )
-{	
-	int i;
-
-	for ( i=0; i<SE_PRIV_MASKSIZE; i++ ) {
-		mask->mask[i] &= ~removepriv->mask[i];
-	}
-}
-
-/***************************************************************************
- invert a given SE_PRIV and store the set in new_mask
-****************************************************************************/
-
-static void se_priv_invert( SE_PRIV *new_mask, const SE_PRIV *mask )
-{	
-	SE_PRIV allprivs;
-	
-	se_priv_copy( &allprivs, &se_priv_all );
-	se_priv_remove( &allprivs, mask );
-	se_priv_copy( new_mask, &allprivs );
-}
-
-/***************************************************************************
- check if 2 SE_PRIV structure are equal
-****************************************************************************/
-
-bool se_priv_equal( const SE_PRIV *mask1, const SE_PRIV *mask2 )
-{	
-	return ( memcmp(mask1, mask2, sizeof(SE_PRIV)) == 0 );
-}
-
-/***************************************************************************
- check if a SE_PRIV has any assigned privileges
-****************************************************************************/
-
-static bool se_priv_empty( const SE_PRIV *mask )
-{
-	SE_PRIV p1;
-	int i;
-	
-	se_priv_copy( &p1, mask );
-
-	for ( i=0; i<SE_PRIV_MASKSIZE; i++ ) {
-		p1.mask[i] &= se_priv_all.mask[i];
-	}
-	
-	return se_priv_equal( &p1, &se_priv_none );
-}
-
-/*********************************************************************
- Lookup the SE_PRIV value for a privilege name 
-*********************************************************************/
-
-bool se_priv_from_name( const char *name, SE_PRIV *mask )
-{
-	int i;
-
-	for ( i=0; !se_priv_equal(&privs[i].se_priv, &se_priv_end); i++ ) {
-		if ( strequal( privs[i].name, name ) ) {
-			se_priv_copy( mask, &privs[i].se_priv );
-			return True;
-		}
-	}
-
-	return False;
-}
-
-/***************************************************************************
- dump an SE_PRIV structure to the log files
-****************************************************************************/
-
-void dump_se_priv( int dbg_cl, int dbg_lvl, const SE_PRIV *mask )
-{
-	int i;
-	
-	DEBUGADDC( dbg_cl, dbg_lvl,("SE_PRIV "));
-	
-	for ( i=0; i<SE_PRIV_MASKSIZE; i++ ) {
-		DEBUGADDC( dbg_cl, dbg_lvl,(" 0x%x", mask->mask[i] ));
-	}
-		
-	DEBUGADDC( dbg_cl, dbg_lvl, ("\n"));
-}
-
-/****************************************************************************
- check if the privilege is in the privilege list
-****************************************************************************/
-
-bool is_privilege_assigned(const SE_PRIV *privileges,
-			   const SE_PRIV *check)
-{
-	SE_PRIV p1, p2;
-
-	if ( !privileges || !check )
-		return False;
-	
-	/* everyone has privileges if you aren't checking for any */
-	
-	if ( se_priv_empty( check ) ) {
-		DEBUG(1,("is_privilege_assigned: no privileges in check_mask!\n"));
-		return True;
-	}
-	
-	se_priv_copy( &p1, check );
-	
-	/* invert the SE_PRIV we want to check for and remove that from the 
-	   original set.  If we are left with the SE_PRIV we are checking 
-	   for then return True */
-	   
-	se_priv_invert( &p1, check );
-	se_priv_copy( &p2, privileges );
-	se_priv_remove( &p2, &p1 );
-	
-	return se_priv_equal( &p2, check );
-}
-
-/****************************************************************************
- check if the privilege is in the privilege list
-****************************************************************************/
-
-static bool is_any_privilege_assigned( SE_PRIV *privileges, const SE_PRIV *check )
-{
-	SE_PRIV p1, p2;
-
-	if ( !privileges || !check )
-		return False;
-	
-	/* everyone has privileges if you aren't checking for any */
-	
-	if ( se_priv_empty( check ) ) {
-		DEBUG(1,("is_any_privilege_assigned: no privileges in check_mask!\n"));
-		return True;
-	}
-	
-	se_priv_copy( &p1, check );
-	
-	/* invert the SE_PRIV we want to check for and remove that from the 
-	   original set.  If we are left with the SE_PRIV we are checking 
-	   for then return True */
-	   
-	se_priv_invert( &p1, check );
-	se_priv_copy( &p2, privileges );
-	se_priv_remove( &p2, &p1 );
-	
-	/* see if we have any bits left */
-	
-	return !se_priv_empty( &p2 );
-}
-
-/*********************************************************************
- Generate the LUID_ATTR structure based on a bitmask
-*********************************************************************/
-
-const char* get_privilege_dispname( const char *name )
-{
-	int i;
-
-	if (!name) {
-		return NULL;
-	}
-
-	for ( i=0; !se_priv_equal(&privs[i].se_priv, &se_priv_end); i++ ) {
-	
-		if ( strequal( privs[i].name, name ) ) {
-			return privs[i].description;
-		}
-	}
-
-	return NULL;
-}
-
-/****************************************************************************
- initialise a privilege list and set the talloc context 
- ****************************************************************************/
- 
-/****************************************************************************
- Does the user have the specified privilege ?  We only deal with one privilege
- at a time here.
-*****************************************************************************/
-
-bool user_has_privileges(const NT_USER_TOKEN *token, const SE_PRIV *privilege)
-{
-	if ( !token )
-		return False;
-
-	return is_privilege_assigned( &token->privileges, privilege );
-}
-
-/****************************************************************************
- Does the user have any of the specified privileges ?  We only deal with one privilege
- at a time here.
-*****************************************************************************/
-
-bool user_has_any_privilege(NT_USER_TOKEN *token, const SE_PRIV *privilege)
-{
-	if ( !token )
-		return False;
-
-	return is_any_privilege_assigned( &token->privileges, privilege );
-}
-
-/*******************************************************************
- return the number of elements in the privlege array
-*******************************************************************/
-
-int count_all_privileges( void )
-{
-	/*
-	 * The -1 is due to the weird SE_END record...
-	 */
-	return (sizeof(privs) / sizeof(privs[0])) - 1;
-}
-
-
-/*********************************************************************
- Generate the LUID_ATTR structure based on a bitmask
- The assumption here is that the privilege has already been validated
- so we are guaranteed to find it in the list. 
-*********************************************************************/
-
-LUID_ATTR get_privilege_luid( SE_PRIV *mask )
-{
-	LUID_ATTR priv_luid;
-	int i;
-
-	ZERO_STRUCT( priv_luid );
-	
-	for ( i=0; !se_priv_equal(&privs[i].se_priv, &se_priv_end); i++ ) {
-	
-		if ( se_priv_equal( &privs[i].se_priv, mask ) ) {
-			priv_luid.luid = privs[i].luid;
-			break;
-		}
-	}
-
-	return priv_luid;
-}
-
-/****************************************************************************
- Convert a LUID to a named string
-****************************************************************************/
-
-const char *luid_to_privilege_name(const LUID *set)
-{
-	int i;
-
-	if (set->high != 0)
-		return NULL;
-
-	for ( i=0; !se_priv_equal(&privs[i].se_priv, &se_priv_end); i++ ) {
-		if ( set->low == privs[i].luid.low ) {
-			return privs[i].name;
-		}
-	}
-	
-	return NULL;
-}
-
-
-/****************************************************************************
- add a privilege to a privilege array
- ****************************************************************************/
-
-static bool privilege_set_add(PRIVILEGE_SET *priv_set, LUID_ATTR set)
-{
-	LUID_ATTR *new_set;
-
-	/* we can allocate memory to add the new privilege */
-
-	new_set = TALLOC_REALLOC_ARRAY(priv_set->mem_ctx, priv_set->set, LUID_ATTR, priv_set->count + 1);
-	if ( !new_set ) {
-		DEBUG(0,("privilege_set_add: failed to allocate memory!\n"));
-		return False;
-	}	
-
-	new_set[priv_set->count].luid.high = set.luid.high;
-	new_set[priv_set->count].luid.low = set.luid.low;
-	new_set[priv_set->count].attr = set.attr;
-
-	priv_set->count++;
-	priv_set->set = new_set;
-
-	return True;
-}
-
-/*******************************************************************
-*******************************************************************/
-
-bool se_priv_to_privilege_set( PRIVILEGE_SET *set, SE_PRIV *mask )
-{
-	int i;
-	uint32 num_privs = count_all_privileges();
-	LUID_ATTR luid;
-	
-	luid.attr = 0;
-	luid.luid.high = 0;
-	
-	for ( i=0; i<num_privs; i++ ) {
-		if ( !is_privilege_assigned(mask, &privs[i].se_priv) )
-			continue;
-		
-		luid.luid = privs[i].luid;
-		
-		if ( !privilege_set_add( set, luid ) )
-			return False;
-	}
-
-	return True;
-}
-
-/*******************************************************************
-*******************************************************************/
-
-static bool luid_to_se_priv( struct lsa_LUID *luid, SE_PRIV *mask )
-{
-	int i;
-	uint32 num_privs = count_all_privileges();
-	
-	for ( i=0; i<num_privs; i++ ) {
-		if ( luid->low == privs[i].luid.low ) {
-			se_priv_copy( mask, &privs[i].se_priv );
-			return True;
-		}
-	}
-
-	return False;
-}
-
-/*******************************************************************
-*******************************************************************/
-
-bool privilege_set_to_se_priv( SE_PRIV *mask, struct lsa_PrivilegeSet *privset )
-{
-	int i;
-	
-	ZERO_STRUCTP( mask );
-	
-	for ( i=0; i<privset->count; i++ ) {
-		SE_PRIV r;
-	
-		/* sanity check for invalid privilege.  we really
-		   only care about the low 32 bits */
-		   
-		if ( privset->set[i].luid.high != 0 )
-			return False;
-		
-		if ( luid_to_se_priv( &privset->set[i].luid, &r ) )		
-			se_priv_add( mask, &r );
-	}
-
-	return True;
-}
-

Deleted: branches/samba/upstream/source/lib/rbtree.c
===================================================================
--- branches/samba/upstream/source/lib/rbtree.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/rbtree.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,422 +0,0 @@
-/*
-  Red Black Trees
-  (C) 1999  Andrea Arcangeli <andrea at suse.de>
-  (C) 2002  David Woodhouse <dwmw2 at infradead.org>
-  
-  This program is free software; you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation; either version 2 of the License, or
-  (at your option) any later version.
-
-  This program is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with this program; if not, write to the Free Software
-  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-  linux/lib/rbtree.c
-*/
-
-#include "includes.h"
-#include "rbtree.h"
-
-#define	RB_RED		0
-#define	RB_BLACK	1
-
-#define rb_parent(r)   ((struct rb_node *)((r)->rb_parent_color & ~3))
-#define rb_color(r)   ((r)->rb_parent_color & 1)
-#define rb_is_red(r)   (!rb_color(r))
-#define rb_is_black(r) rb_color(r)
-#define rb_set_red(r)  do { (r)->rb_parent_color &= ~1; } while (0)
-#define rb_set_black(r)  do { (r)->rb_parent_color |= 1; } while (0)
-
-static void rb_set_parent(struct rb_node *rb, struct rb_node *p)
-{
-	rb->rb_parent_color = (rb->rb_parent_color & 3) | (unsigned long)p;
-}
-static void rb_set_color(struct rb_node *rb, int color)
-{
-	rb->rb_parent_color = (rb->rb_parent_color & ~1) | color;
-}
-
-#define RB_EMPTY_ROOT(root)	((root)->rb_node == NULL)
-#define RB_EMPTY_NODE(node)	(rb_parent(node) == node)
-#define RB_CLEAR_NODE(node)	(rb_set_parent(node, node))
-
-static void __rb_rotate_left(struct rb_node *node, struct rb_root *root)
-{
-	struct rb_node *right = node->rb_right;
-	struct rb_node *parent = rb_parent(node);
-
-	if ((node->rb_right = right->rb_left))
-		rb_set_parent(right->rb_left, node);
-	right->rb_left = node;
-
-	rb_set_parent(right, parent);
-
-	if (parent)
-	{
-		if (node == parent->rb_left)
-			parent->rb_left = right;
-		else
-			parent->rb_right = right;
-	}
-	else
-		root->rb_node = right;
-	rb_set_parent(node, right);
-}
-
-static void __rb_rotate_right(struct rb_node *node, struct rb_root *root)
-{
-	struct rb_node *left = node->rb_left;
-	struct rb_node *parent = rb_parent(node);
-
-	if ((node->rb_left = left->rb_right))
-		rb_set_parent(left->rb_right, node);
-	left->rb_right = node;
-
-	rb_set_parent(left, parent);
-
-	if (parent)
-	{
-		if (node == parent->rb_right)
-			parent->rb_right = left;
-		else
-			parent->rb_left = left;
-	}
-	else
-		root->rb_node = left;
-	rb_set_parent(node, left);
-}
-
-void rb_insert_color(struct rb_node *node, struct rb_root *root)
-{
-	struct rb_node *parent, *gparent;
-
-	while ((parent = rb_parent(node)) && rb_is_red(parent))
-	{
-		gparent = rb_parent(parent);
-
-		if (parent == gparent->rb_left)
-		{
-			{
-				register struct rb_node *uncle = gparent->rb_right;
-				if (uncle && rb_is_red(uncle))
-				{
-					rb_set_black(uncle);
-					rb_set_black(parent);
-					rb_set_red(gparent);
-					node = gparent;
-					continue;
-				}
-			}
-
-			if (parent->rb_right == node)
-			{
-				register struct rb_node *tmp;
-				__rb_rotate_left(parent, root);
-				tmp = parent;
-				parent = node;
-				node = tmp;
-			}
-
-			rb_set_black(parent);
-			rb_set_red(gparent);
-			__rb_rotate_right(gparent, root);
-		} else {
-			{
-				register struct rb_node *uncle = gparent->rb_left;
-				if (uncle && rb_is_red(uncle))
-				{
-					rb_set_black(uncle);
-					rb_set_black(parent);
-					rb_set_red(gparent);
-					node = gparent;
-					continue;
-				}
-			}
-
-			if (parent->rb_left == node)
-			{
-				register struct rb_node *tmp;
-				__rb_rotate_right(parent, root);
-				tmp = parent;
-				parent = node;
-				node = tmp;
-			}
-
-			rb_set_black(parent);
-			rb_set_red(gparent);
-			__rb_rotate_left(gparent, root);
-		}
-	}
-
-	rb_set_black(root->rb_node);
-}
-
-static void __rb_erase_color(struct rb_node *node, struct rb_node *parent,
-			     struct rb_root *root)
-{
-	struct rb_node *other;
-
-	while ((!node || rb_is_black(node)) && node != root->rb_node)
-	{
-		if (parent->rb_left == node)
-		{
-			other = parent->rb_right;
-			if (rb_is_red(other))
-			{
-				rb_set_black(other);
-				rb_set_red(parent);
-				__rb_rotate_left(parent, root);
-				other = parent->rb_right;
-			}
-			if ((!other->rb_left || rb_is_black(other->rb_left)) &&
-			    (!other->rb_right || rb_is_black(other->rb_right)))
-			{
-				rb_set_red(other);
-				node = parent;
-				parent = rb_parent(node);
-			}
-			else
-			{
-				if (!other->rb_right || rb_is_black(other->rb_right))
-				{
-					struct rb_node *o_left;
-					if ((o_left = other->rb_left))
-						rb_set_black(o_left);
-					rb_set_red(other);
-					__rb_rotate_right(other, root);
-					other = parent->rb_right;
-				}
-				rb_set_color(other, rb_color(parent));
-				rb_set_black(parent);
-				if (other->rb_right)
-					rb_set_black(other->rb_right);
-				__rb_rotate_left(parent, root);
-				node = root->rb_node;
-				break;
-			}
-		}
-		else
-		{
-			other = parent->rb_left;
-			if (rb_is_red(other))
-			{
-				rb_set_black(other);
-				rb_set_red(parent);
-				__rb_rotate_right(parent, root);
-				other = parent->rb_left;
-			}
-			if ((!other->rb_left || rb_is_black(other->rb_left)) &&
-			    (!other->rb_right || rb_is_black(other->rb_right)))
-			{
-				rb_set_red(other);
-				node = parent;
-				parent = rb_parent(node);
-			}
-			else
-			{
-				if (!other->rb_left || rb_is_black(other->rb_left))
-				{
-					register struct rb_node *o_right;
-					if ((o_right = other->rb_right))
-						rb_set_black(o_right);
-					rb_set_red(other);
-					__rb_rotate_left(other, root);
-					other = parent->rb_left;
-				}
-				rb_set_color(other, rb_color(parent));
-				rb_set_black(parent);
-				if (other->rb_left)
-					rb_set_black(other->rb_left);
-				__rb_rotate_right(parent, root);
-				node = root->rb_node;
-				break;
-			}
-		}
-	}
-	if (node)
-		rb_set_black(node);
-}
-
-void rb_erase(struct rb_node *node, struct rb_root *root)
-{
-	struct rb_node *child, *parent;
-	int color;
-
-	if (!node->rb_left)
-		child = node->rb_right;
-	else if (!node->rb_right)
-		child = node->rb_left;
-	else
-	{
-		struct rb_node *old = node, *left;
-
-		node = node->rb_right;
-		while ((left = node->rb_left) != NULL)
-			node = left;
-		child = node->rb_right;
-		parent = rb_parent(node);
-		color = rb_color(node);
-
-		if (child)
-			rb_set_parent(child, parent);
-		if (parent == old) {
-			parent->rb_right = child;
-			parent = node;
-		} else
-			parent->rb_left = child;
-
-		node->rb_parent_color = old->rb_parent_color;
-		node->rb_right = old->rb_right;
-		node->rb_left = old->rb_left;
-
-		if (rb_parent(old))
-		{
-			if (rb_parent(old)->rb_left == old)
-				rb_parent(old)->rb_left = node;
-			else
-				rb_parent(old)->rb_right = node;
-		} else
-			root->rb_node = node;
-
-		rb_set_parent(old->rb_left, node);
-		if (old->rb_right)
-			rb_set_parent(old->rb_right, node);
-		goto color;
-	}
-
-	parent = rb_parent(node);
-	color = rb_color(node);
-
-	if (child)
-		rb_set_parent(child, parent);
-	if (parent)
-	{
-		if (parent->rb_left == node)
-			parent->rb_left = child;
-		else
-			parent->rb_right = child;
-	}
-	else
-		root->rb_node = child;
-
- color:
-	if (color == RB_BLACK)
-		__rb_erase_color(child, parent, root);
-}
-
-/*
- * This function returns the first node (in sort order) of the tree.
- */
-struct rb_node *rb_first(struct rb_root *root)
-{
-	struct rb_node	*n;
-
-	n = root->rb_node;
-	if (!n)
-		return NULL;
-	while (n->rb_left)
-		n = n->rb_left;
-	return n;
-}
-
-struct rb_node *rb_last(struct rb_root *root)
-{
-	struct rb_node	*n;
-
-	n = root->rb_node;
-	if (!n)
-		return NULL;
-	while (n->rb_right)
-		n = n->rb_right;
-	return n;
-}
-
-struct rb_node *rb_next(struct rb_node *node)
-{
-	struct rb_node *parent;
-
-	if (rb_parent(node) == node)
-		return NULL;
-
-	/* If we have a right-hand child, go down and then left as far
-	   as we can. */
-	if (node->rb_right) {
-		node = node->rb_right; 
-		while (node->rb_left)
-			node=node->rb_left;
-		return node;
-	}
-
-	/* No right-hand children.  Everything down and left is
-	   smaller than us, so any 'next' node must be in the general
-	   direction of our parent. Go up the tree; any time the
-	   ancestor is a right-hand child of its parent, keep going
-	   up. First time it's a left-hand child of its parent, said
-	   parent is our 'next' node. */
-	while ((parent = rb_parent(node)) && node == parent->rb_right)
-		node = parent;
-
-	return parent;
-}
-
-struct rb_node *rb_prev(struct rb_node *node)
-{
-	struct rb_node *parent;
-
-	if (rb_parent(node) == node)
-		return NULL;
-
-	/* If we have a left-hand child, go down and then right as far
-	   as we can. */
-	if (node->rb_left) {
-		node = node->rb_left; 
-		while (node->rb_right)
-			node=node->rb_right;
-		return node;
-	}
-
-	/* No left-hand children. Go up till we find an ancestor which
-	   is a right-hand child of its parent */
-	while ((parent = rb_parent(node)) && node == parent->rb_left)
-		node = parent;
-
-	return parent;
-}
-
-void rb_replace_node(struct rb_node *victim, struct rb_node *new_node,
-		     struct rb_root *root)
-{
-	struct rb_node *parent = rb_parent(victim);
-
-	/* Set the surrounding nodes to point to the replacement */
-	if (parent) {
-		if (victim == parent->rb_left)
-			parent->rb_left = new_node;
-		else
-			parent->rb_right = new_node;
-	} else {
-		root->rb_node = new_node;
-	}
-	if (victim->rb_left)
-		rb_set_parent(victim->rb_left, new_node);
-	if (victim->rb_right)
-		rb_set_parent(victim->rb_right, new_node);
-
-	/* Copy the pointers/colour from the victim to the replacement */
-	*new_node = *victim;
-}
-
-void rb_link_node(struct rb_node * node, struct rb_node * parent,
-		  struct rb_node ** rb_link)
-{
-	node->rb_parent_color = (unsigned long )parent;
-	node->rb_left = node->rb_right = NULL;
-
-	*rb_link = node;
-}

Modified: branches/samba/upstream/source/lib/readline.c
===================================================================
--- branches/samba/upstream/source/lib/readline.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/readline.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -53,7 +54,7 @@
 				char **(completion_fn)(const char *text, int start, int end))
 {
 	fd_set fds;
-	char *line = NULL;
+	static pstring line;
 	struct timeval timeout;
 	int fd = x_fileno(x_stdin);
 	char *ret;
@@ -64,28 +65,19 @@
 		x_fflush(x_stdout);
 	}
 
-	line = (char *)SMB_MALLOC(BUFSIZ);
-	if (!line) {
-		return NULL;
-	}
-
 	while (1) {
 		timeout.tv_sec = 5;
 		timeout.tv_usec = 0;
 
 		FD_ZERO(&fds);
 		FD_SET(fd,&fds);
-
+	
 		if (sys_select_intr(fd+1,&fds,NULL,NULL,&timeout) == 1) {
-			ret = x_fgets(line, BUFSIZ, x_stdin);
-			if (ret == 0) {
-				SAFE_FREE(line);
-			}
+			ret = x_fgets(line, sizeof(line), x_stdin);
 			return ret;
 		}
-		if (callback) {
+		if (callback)
 			callback();
-		}
 	}
 }
 
@@ -93,15 +85,15 @@
  Display the prompt and wait for input. Call callback() regularly.
 ****************************************************************************/
 
-char *smb_readline(const char *prompt, void (*callback)(void),
+char *smb_readline(const char *prompt, void (*callback)(void), 
 		   char **(completion_fn)(const char *text, int start, int end))
 {
 	char *ret;
-	bool interactive;
+	BOOL interactive;
 
 	interactive = isatty(x_fileno(x_stdin)) || getenv("CLI_FORCE_INTERACTIVE");
 	if (!interactive) {
-		return smb_readline_replacement(NULL, callback, completion_fn);
+	    return smb_readline_replacement(NULL, callback, completion_fn);
 	}
 
 #if HAVE_LIBREADLINE
@@ -169,7 +161,7 @@
 	int i;
 
 	hlist = history_list();
-
+	
 	for (i = 0; hlist && hlist[i]; i++) {
 		DEBUG(0, ("%d: %s\n", i, hlist[i]->line));
 	}
@@ -179,3 +171,4 @@
 
 	return 0;
 }
+

Deleted: branches/samba/upstream/source/lib/recvfile.c
===================================================================
--- branches/samba/upstream/source/lib/recvfile.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/recvfile.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,233 +0,0 @@
-/*
- Unix SMB/Netbios implementation.
- Version 3.2.x
- recvfile implementations.
- Copyright (C) Jeremy Allison 2007.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
-*/
-
-/*
- * This file handles the OS dependent recvfile implementations.
- * The API is such that it returns -1 on error, else returns the
- * number of bytes written.
- */
-
-#include "includes.h"
-
-/* Do this on our own in TRANSFER_BUF_SIZE chunks.
- * It's safe to make direct syscalls to lseek/write here
- * as we're below the Samba vfs layer.
- *
- * If tofd is -1 we just drain the incoming socket of count
- * bytes without writing to the outgoing fd.
- * If a write fails we do the same (to cope with disk full)
- * errors.
- *
- * Returns -1 on short reads from fromfd (read error)
- * and sets errno.
- *
- * Returns number of bytes written to 'tofd'
- * or thrown away if 'tofd == -1'.
- * return != count then sets errno.
- * Returns count if complete success.
- */
-
-#ifndef TRANSFER_BUF_SIZE
-#define TRANSFER_BUF_SIZE (128*1024)
-#endif
-
-static ssize_t default_sys_recvfile(int fromfd,
-			int tofd,
-			SMB_OFF_T offset,
-			size_t count)
-{
-	int saved_errno = 0;
-	size_t total = 0;
-	size_t bufsize = MIN(TRANSFER_BUF_SIZE,count);
-	size_t total_written = 0;
-	char *buffer = NULL;
-
-	DEBUG(10,("default_sys_recvfile: from = %d, to = %d, "
-		"offset=%.0f, count = %lu\n",
-		fromfd, tofd, (double)offset,
-		(unsigned long)count));
-
-	if (count == 0) {
-		return 0;
-	}
-
-	if (tofd != -1 && offset != (SMB_OFF_T)-1) {
-		if (sys_lseek(tofd, offset, SEEK_SET) == -1) {
-			if (errno != ESPIPE) {
-				return -1;
-			}
-		}
-	}
-
-	buffer = SMB_MALLOC_ARRAY(char, bufsize);
-	if (buffer == NULL) {
-		return -1;
-	}
-
-	while (total < count) {
-		size_t num_written = 0;
-		ssize_t read_ret;
-		size_t toread = MIN(bufsize,count - total);
-
-		/* Read from socket - ignore EINTR. */
-		read_ret = sys_read(fromfd, buffer, toread);
-		if (read_ret <= 0) {
-			/* EOF or socket error. */
-			free(buffer);
-			return -1;
-		}
-
-		num_written = 0;
-
-		while (num_written < read_ret) {
-			ssize_t write_ret;
-
-			if (tofd == -1) {
-				write_ret = read_ret;
-			} else {
-				/* Write to file - ignore EINTR. */
-				write_ret = sys_write(tofd,
-						buffer + num_written,
-						read_ret - num_written);
-
-				if (write_ret <= 0) {
-					/* write error - stop writing. */
-					tofd = -1;
-					saved_errno = errno;
-					continue;
-				}
-			}
-
-			num_written += (size_t)write_ret;
-			total_written += (size_t)write_ret;
-		}
-
-		total += read_ret;
-	}
-
-	free(buffer);
-	if (saved_errno) {
-		/* Return the correct write error. */
-		errno = saved_errno;
-	}
-	return (ssize_t)total_written;
-}
-
-#if defined(HAVE_LINUX_SPLICE)
-
-/*
- * Try and use the Linux system call to do this.
- * Remember we only return -1 if the socket read
- * failed. Else we return the number of bytes
- * actually written. We always read count bytes
- * from the network in the case of return != -1.
- */
-
-
-ssize_t sys_recvfile(int fromfd,
-			int tofd,
-			SMB_OFF_T offset,
-			size_t count)
-{
-	static bool try_splice_call = true;
-	size_t total_written = 0;
-
-	DEBUG(10,("sys_recvfile: from = %d, to = %d, "
-		"offset=%.0f, count = %lu\n",
-		fromfd, tofd, (double)offset,
-		(unsigned long)count));
-
-	if (count == 0) {
-		return 0;
-	}
-
-	/*
-	 * Older Linux kernels have splice for sendfile,
-	 * but it fails for recvfile. Ensure we only try
-	 * this once and always fall back to the userspace
-	 * implementation if recvfile splice fails. JRA.
-	 */
-
-	if (!try_splice_call) {
-		return default_sys_recvfile(fromfd,
-				tofd,
-				offset,
-				count);
-	}
-
-	while (total_written < count) {
-		ssize_t ret = splice(fromfd,
-					NULL,
-					tofd,
-					&offset,
-					count,
-					0);
-		if (ret == -1) {
-			if (errno != EINTR) {
-				if (total_written == 0 &&
-						(errno == EBADF || errno == EINVAL)) {
-					try_splice_call = false;
-					return default_sys_recvfile(fromfd,
-								tofd,
-								offset,
-								count);
-				}
-				break;
-			}
-			continue;
-		}
-		total_written += ret;
-		count -= ret;
-	}
-
-	if (total_written < count) {
-		int saved_errno = errno;
-		if (drain_socket(fromfd, count-total_written) !=
-				count-total_written) {
-			/* socket is dead. */
-			return -1;
-		}
-		errno = saved_errno;
-	}
-
-	return total_written;
-}
-#else
-
-/*****************************************************************
- No recvfile system call - use the default 128 chunk implementation.
-*****************************************************************/
-
-ssize_t sys_recvfile(int fromfd,
-			int tofd,
-			SMB_OFF_T offset,
-			size_t count)
-{
-	return default_sys_recvfile(fromfd, tofd, offset, count);
-}
-#endif
-
-/*****************************************************************
- Throw away "count" bytes from the client socket.
-*****************************************************************/
-
-ssize_t drain_socket(int sockfd, size_t count)
-{
-	return default_sys_recvfile(sockfd, -1, (SMB_OFF_T)-1, count);
-}

Copied: branches/samba/upstream/source/lib/repdir.c (from rev 1928, branches/samba/upstream/source/lib/repdir.c)
===================================================================
--- branches/samba/upstream/source/lib/repdir.c	                        (rev 0)
+++ branches/samba/upstream/source/lib/repdir.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,218 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   Copyright (C) Andrew Tridgell 2005
+   Updated for Samba3 64-bit cleanliness (C) Jeremy Allison 2006
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+/*
+  a replacement for opendir/readdir/telldir/seekdir/closedir for BSD systems
+
+  This is needed because the existing directory handling in FreeBSD
+  and OpenBSD (and possibly NetBSD) doesn't correctly handle unlink()
+  on files in a directory where telldir() has been used. On a block
+  boundary it will occasionally miss a file when seekdir() is used to
+  return to a position previously recorded with telldir().
+
+  This also fixes a severe performance and memory usage problem with
+  telldir() on BSD systems. Each call to telldir() in BSD adds an
+  entry to a linked list, and those entries are cleaned up on
+  closedir(). This means with a large directory closedir() can take an
+  arbitrary amount of time, causing network timeouts as millions of
+  telldir() entries are freed
+
+  Note! This replacement code is not portable. It relies on getdents()
+  always leaving the file descriptor at a seek offset that is a
+  multiple of DIR_BUF_SIZE. If the code detects that this doesn't
+  happen then it will abort(). It also does not handle directories
+  with offsets larger than can be stored in a long,
+
+  This code is available under other free software licenses as
+  well. Contact the author.
+*/
+
+#include <include/includes.h>
+
+ void replace_readdir_dummy(void);
+ void replace_readdir_dummy(void) {}
+
+#if defined(REPLACE_READDIR)
+
+#if defined(PARANOID_MALLOC_CHECKER)
+#ifdef malloc
+#undef malloc
+#endif
+#endif
+
+#define DIR_BUF_BITS 9
+#define DIR_BUF_SIZE (1<<DIR_BUF_BITS)
+
+struct dir_buf {
+	int fd;
+	int nbytes, ofs;
+	SMB_OFF_T seekpos;
+	char buf[DIR_BUF_SIZE];
+};
+
+#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OPENDIR64)
+ SMB_STRUCT_DIR *opendir64(const char *dname)
+#else
+ SMB_STRUCT_DIR *opendir(const char *dname)
+#endif
+{
+	struct dir_buf *d;
+	d = malloc(sizeof(*d));
+	if (d == NULL) {
+		errno = ENOMEM;
+		return NULL;
+	}
+#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_OPEN64)
+	d->fd = open64(dname, O_RDONLY);
+#else
+	d->fd = open(dname, O_RDONLY);
+#endif
+
+	if (d->fd == -1) {
+		free(d);
+		return NULL;
+	}
+	d->ofs = 0;
+	d->seekpos = 0;
+	d->nbytes = 0;
+	return (SMB_STRUCT_DIR *)d;
+}
+
+#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_READDIR64)
+ SMB_STRUCT_DIRENT *readdir64(SMB_STRUCT_DIR *dir)
+#else
+ SMB_STRUCT_DIRENT *readdir(SMB_STRUCT_DIR *dir)
+#endif
+{
+	struct dir_buf *d = (struct dir_buf *)dir;
+	SMB_STRUCT_DIRENT *de;
+
+	if (d->ofs >= d->nbytes) {
+#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_LSEEK64)
+		d->seekpos = lseek64(d->fd, 0, SEEK_CUR);
+#else
+		d->seekpos = lseek(d->fd, 0, SEEK_CUR);
+#endif
+
+#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_GETDENTS64)
+		d->nbytes = getdents64(d->fd, d->buf, DIR_BUF_SIZE);
+#else
+		d->nbytes = getdents(d->fd, d->buf, DIR_BUF_SIZE);
+#endif
+		d->ofs = 0;
+	}
+	if (d->ofs >= d->nbytes) {
+		return NULL;
+	}
+	de = (SMB_STRUCT_DIRENT *)&d->buf[d->ofs];
+	d->ofs += de->d_reclen;
+	return de;
+}
+
+#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_TELLDIR64)
+ long telldir64(SMB_STRUCT_DIR *dir)
+#else
+ long telldir(SMB_STRUCT_DIR *dir)
+#endif
+{
+	struct dir_buf *d = (struct dir_buf *)dir;
+	if (d->ofs >= d->nbytes) {
+#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_LSEEK64)
+		d->seekpos = lseek64(d->fd, 0, SEEK_CUR);
+#else
+		d->seekpos = lseek(d->fd, 0, SEEK_CUR);
+#endif
+		d->ofs = 0;
+		d->nbytes = 0;
+	}
+	/* this relies on seekpos always being a multiple of
+	   DIR_BUF_SIZE. Is that always true on BSD systems? */
+	if (d->seekpos & (DIR_BUF_SIZE-1)) {
+		abort();
+	}
+	return d->seekpos + d->ofs;
+}
+
+#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_SEEKDIR64)
+ void seekdir64(SMB_STRUCT_DIR *dir, long ofs)
+#else
+ void seekdir(SMB_STRUCT_DIR *dir, long ofs)
+#endif
+{
+	struct dir_buf *d = (struct dir_buf *)dir;
+#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_LSEEK64)
+	d->seekpos = lseek64(d->fd, ofs & ~(DIR_BUF_SIZE-1), SEEK_SET);
+#else
+	d->seekpos = lseek(d->fd, ofs & ~(DIR_BUF_SIZE-1), SEEK_SET);
+#endif
+
+#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_GETDENTS64)
+	d->nbytes = getdents64(d->fd, d->buf, DIR_BUF_SIZE);
+#else
+	d->nbytes = getdents(d->fd, d->buf, DIR_BUF_SIZE);
+#endif
+
+	d->ofs = 0;
+	while (d->ofs < (ofs & (DIR_BUF_SIZE-1))) {
+#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_READDIR64)
+		if (readdir64(dir) == NULL) break;
+#else
+		if (readdir(dir) == NULL) break;
+#endif
+	}
+}
+
+#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_REWINDDIR64)
+ void rewinddir64(SMB_STRUCT_DIR *dir)
+#else
+ void rewinddir(SMB_STRUCT_DIR *dir)
+#endif
+{
+#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_SEEKDIR64)
+	seekdir64(dir, 0);
+#else
+	seekdir(dir, 0);
+#endif
+}
+
+#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(HAVE_CLOSEDIR64)
+ int closedir64(SMB_STRUCT_DIR *dir)
+#else
+ int closedir(SMB_STRUCT_DIR *dir)
+#endif
+{
+	struct dir_buf *d = (struct dir_buf *)dir;
+	int r = close(d->fd);
+	if (r != 0) {
+		return r;
+	}
+	free(d);
+	return 0;
+}
+
+#ifndef dirfd
+/* darn, this is a macro on some systems. */
+ int dirfd(SMB_STRUCT_DIR *dir)
+{
+	struct dir_buf *d = (struct dir_buf *)dir;
+	return d->fd;
+}
+#endif
+#endif /* REPLACE_READDIR */

Modified: branches/samba/upstream/source/lib/replace/Makefile.in
===================================================================
--- branches/samba/upstream/source/lib/replace/Makefile.in	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/Makefile.in	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,12 +10,10 @@
 srcdir = @srcdir@
 builddir = @builddir@
 INSTALL = @INSTALL@
-LIBS = @LIBS@
 
-.PHONY: test all showflags install installcheck clean distclean realdistclean
+.PHONY: test
 
-CFLAGS=-I. @CFLAGS@
-LDFLAGS=@LDFLAGS@
+CFLAGS=-I. -I at libreplacedir@ @CFLAGS@
 
 OBJS = @LIBREPLACEOBJ@
 
@@ -25,7 +23,6 @@
 	@echo 'libreplace will be compiled with flags:'
 	@echo '  CC     = $(CC)'
 	@echo '  CFLAGS = $(CFLAGS)'
-	@echo '  LDFLAGS= $(LDFLAGS)'
 	@echo '  LIBS   = $(LIBS)'
 
 install: all
@@ -40,10 +37,10 @@
 
 installcheck: install test
 
-TEST_OBJS = test/testsuite.o test/os2_delete.o test/strptime.o test/getifaddrs.o
+TEST_OBJS = test/testsuite.o test/os2_delete.o test/strptime.o
 
 testsuite: libreplace.a $(TEST_OBJS)
-	$(CC) -o testsuite $(TEST_OBJS) -L. -lreplace $(LDFLAGS) $(LIBS)
+	$(CC) -o testsuite $(TEST_OBJS) -L. -lreplace
 
 .c.o:
 	@echo Compiling $*.c

Modified: branches/samba/upstream/source/lib/replace/README
===================================================================
--- branches/samba/upstream/source/lib/replace/README	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/README	2008-06-15 01:55:18 UTC (rev 1953)
@@ -15,6 +15,7 @@
 initgroups
 memmove
 strdup
+inet_ntoa
 setlinebuf
 vsyslog
 timegm
@@ -49,21 +50,10 @@
 getpass
 readline (the library)
 inet_ntoa
-inet_ntop
-inet_pton
-inet_aton
 strtoll
 strtoull
 socketpair
 strptime
-getaddrinfo
-freeaddrinfo
-getnameinfo
-gai_strerror
-getifaddrs
-freeifaddrs
-utime
-utimes
 
 Types:
 bool

Modified: branches/samba/upstream/source/lib/replace/config.guess
===================================================================
--- branches/samba/upstream/source/lib/replace/config.guess	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/config.guess	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful, but
@@ -16,7 +16,9 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a

Modified: branches/samba/upstream/source/lib/replace/config.sub
===================================================================
--- branches/samba/upstream/source/lib/replace/config.sub	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/config.sub	2008-06-15 01:55:18 UTC (rev 1953)
@@ -11,7 +11,7 @@
 #
 # This file is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful,
@@ -20,7 +20,9 @@
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a

Modified: branches/samba/upstream/source/lib/replace/configure.ac
===================================================================
--- branches/samba/upstream/source/lib/replace/configure.ac	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/configure.ac	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,10 +3,7 @@
 AC_CONFIG_SRCDIR([replace.c])
 AC_CONFIG_HEADER(config.h)
 
-CFLAGS="$CFLAGS -I$srcdir"
-
 AC_LIBREPLACE_ALL_CHECKS
-AC_LIBREPLACE_NETWORK_CHECKS
 
 if test "$ac_cv_prog_gcc" = yes; then
    CFLAGS="$CFLAGS -Wall"
@@ -22,9 +19,4 @@
    CFLAGS="$CFLAGS -Wno-format-y2k"
 fi
 
-LIBS="${LIBREPLACE_NETWORK_LIBS}"
-AC_SUBST(LIBS)
-
-AC_SUBST(LDFLAGS)
-
 AC_OUTPUT(Makefile)

Modified: branches/samba/upstream/source/lib/replace/dlfcn.c
===================================================================
--- branches/samba/upstream/source/lib/replace/dlfcn.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/dlfcn.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -11,7 +11,7 @@
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
 
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -19,39 +19,22 @@
    Lesser General Public License for more details.
 
    You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
+   License along with this library; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
 #include "replace.h"
-#ifdef HAVE_DL_H
-#include <dl.h>
-#endif
 
 #ifndef HAVE_DLOPEN
-#ifdef DLOPEN_TAKES_UNSIGNED_FLAGS
-void *rep_dlopen(const char *name, unsigned int flags)
-#else
 void *rep_dlopen(const char *name, int flags)
-#endif
 {
-#ifdef HAVE_SHL_LOAD
-	if (name == NULL)
-		return PROG_HANDLE;
-	return (void *)shl_load(name, flags, 0);
-#else
 	return NULL;
-#endif
 }
 #endif
 
 #ifndef HAVE_DLSYM
 void *rep_dlsym(void *handle, const char *symbol)
 {
-#ifdef HAVE_SHL_FINDSYM
-	void *sym_addr;
-	if (!shl_findsym((shl_t *)&handle, symbol, TYPE_UNDEFINED, &sym_addr))
-		return sym_addr;
-#endif
     return NULL;
 }
 #endif
@@ -66,10 +49,6 @@
 #ifndef HAVE_DLCLOSE
 int rep_dlclose(void *handle)
 {
-#ifdef HAVE_SHL_CLOSE
-	return shl_unload((shl_t)handle);
-#else
 	return 0;
-#endif
 }
 #endif

Modified: branches/samba/upstream/source/lib/replace/dlfcn.m4
===================================================================
--- branches/samba/upstream/source/lib/replace/dlfcn.m4	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/dlfcn.m4	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,23 +5,13 @@
 libreplace_cv_dlfcn=no
 AC_SEARCH_LIBS(dlopen, dl)
 
-AC_CHECK_HEADERS(dlfcn.h)
-AC_CHECK_FUNCS([dlopen dlsym dlerror dlclose],[],[libreplace_cv_dlfcn=yes])
+if test x"${ac_cv_search_dlopen}" = x"no"; then
+	libreplace_cv_dlfcn=yes
+else
+	AC_CHECK_HEADERS(dlfcn.h)
+	AC_CHECK_FUNCS([dlopen dlsym dlerror dlclose],[],[libreplace_cv_dlfcn=yes])
+fi
 
-libreplace_cv_shl=no
-AC_SEARCH_LIBS(shl_load, sl)
-AC_CHECK_HEADERS(dl.h)
-AC_CHECK_FUNCS([shl_load shl_unload shl_findsym],[],[libreplace_cv_shl=yes])
-
-AC_VERIFY_C_PROTOTYPE([void *dlopen(const char* filename, unsigned int flags)],
-	[
-	return 0;
-	],[
-	AC_DEFINE(DLOPEN_TAKES_UNSIGNED_FLAGS, 1, [Whether dlopen takes unsigned int flags])
-	],[],[
-	#include <dlfcn.h>
-	])
-
 if test x"${libreplace_cv_dlfcn}" = x"yes";then
 	LIBREPLACEOBJ="${LIBREPLACEOBJ} dlfcn.o"
 fi

Deleted: branches/samba/upstream/source/lib/replace/getaddrinfo.c
===================================================================
--- branches/samba/upstream/source/lib/replace/getaddrinfo.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/getaddrinfo.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,497 +0,0 @@
-/*
-PostgreSQL Database Management System
-(formerly known as Postgres, then as Postgres95)
-
-Portions Copyright (c) 1996-2005, The PostgreSQL Global Development Group
-
-Portions Copyright (c) 1994, The Regents of the University of California
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose, without fee, and without a written agreement
-is hereby granted, provided that the above copyright notice and this paragraph
-and the following two paragraphs appear in all copies.
-
-IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
-DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING
-LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION,
-EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-
-THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
-ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS
-TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
-
-*/
-
-/*-------------------------------------------------------------------------
- *
- * getaddrinfo.c
- *	  Support getaddrinfo() on platforms that don't have it.
- *
- * We also supply getnameinfo() here, assuming that the platform will have
- * it if and only if it has getaddrinfo().	If this proves false on some
- * platform, we'll need to split this file and provide a separate configure
- * test for getnameinfo().
- *
- * Copyright (c) 2003-2007, PostgreSQL Global Development Group
- *
- * Copyright (C) 2007 Jeremy Allison.
- * Modified to return multiple IPv4 addresses for Samba.
- *
- *-------------------------------------------------------------------------
- */
-
-#include "replace.h"
-#include "system/network.h"
-
-#ifndef SMB_MALLOC
-#define SMB_MALLOC(s) malloc(s)
-#endif
-
-#ifndef SMB_STRDUP
-#define SMB_STRDUP(s) strdup(s)
-#endif
-
-static int check_hostent_err(struct hostent *hp)
-{
-	if (!hp) {
-		switch (h_errno) {
-			case HOST_NOT_FOUND:
-			case NO_DATA:
-				return EAI_NONAME;
-			case TRY_AGAIN:
-				return EAI_AGAIN;
-			case NO_RECOVERY:
-			default:
-				return EAI_FAIL;
-		}
-	}
-	if (!hp->h_name || hp->h_addrtype != AF_INET) {
-		return EAI_FAIL;
-	}
-	return 0;
-}
-
-static char *canon_name_from_hostent(struct hostent *hp,
-				int *perr)
-{
-	char *ret = NULL;
-
-	*perr = check_hostent_err(hp);
-	if (*perr) {
-		return NULL;
-	}
-	ret = SMB_STRDUP(hp->h_name);
-	if (!ret) {
-		*perr = EAI_MEMORY;
-	}
-	return ret;
-}
-
-static char *get_my_canon_name(int *perr)
-{
-	char name[HOST_NAME_MAX+1];
-
-	if (gethostname(name, HOST_NAME_MAX) == -1) {
-		*perr = EAI_FAIL;
-		return NULL;
-	}
-	/* Ensure null termination. */
-	name[HOST_NAME_MAX] = '\0';
-	return canon_name_from_hostent(gethostbyname(name), perr);
-}
-
-static char *get_canon_name_from_addr(struct in_addr ip,
-				int *perr)
-{
-	return canon_name_from_hostent(
-			gethostbyaddr(&ip, sizeof(ip), AF_INET),
-			perr);
-}
-
-static struct addrinfo *alloc_entry(const struct addrinfo *hints,
-				struct in_addr ip,
-				unsigned short port)
-{
-	struct sockaddr_in *psin = NULL;
-	struct addrinfo *ai = SMB_MALLOC(sizeof(*ai));
-
-	if (!ai) {
-		return NULL;
-	}
-	memset(ai, '\0', sizeof(*ai));
-
-	psin = SMB_MALLOC(sizeof(*psin));
-	if (!psin) {
-		free(ai);
-		return NULL;
-	}
-
-	memset(psin, '\0', sizeof(*psin));
-
-	psin->sin_family = AF_INET;
-	psin->sin_port = htons(port);
-	psin->sin_addr = ip;
-
-	ai->ai_flags = 0;
-	ai->ai_family = AF_INET;
-	ai->ai_socktype = hints->ai_socktype;
-	ai->ai_protocol = hints->ai_protocol;
-	ai->ai_addrlen = sizeof(*psin);
-	ai->ai_addr = (struct sockaddr *) psin;
-	ai->ai_canonname = NULL;
-	ai->ai_next = NULL;
-
-	return ai;
-}
-
-/*
- * get address info for a single ipv4 address.
- *
- *	Bugs:	- servname can only be a number, not text.
- */
-
-static int getaddr_info_single_addr(const char *service,
-				uint32_t addr,
-				const struct addrinfo *hints,
-				struct addrinfo **res)
-{
-
-	struct addrinfo *ai = NULL;
-	struct in_addr ip;
-	unsigned short port = 0;
-
-	if (service) {
-		port = (unsigned short)atoi(service);
-	}
-	ip.s_addr = htonl(addr);
-
-	ai = alloc_entry(hints, ip, port);
-	if (!ai) {
-		return EAI_MEMORY;
-	}
-
-	/* If we're asked for the canonical name,
-	 * make sure it returns correctly. */
-	if (!(hints->ai_flags & AI_NUMERICSERV) &&
-			hints->ai_flags & AI_CANONNAME) {
-		int err;
-		if (addr == INADDR_LOOPBACK || addr == INADDR_ANY) {
-			ai->ai_canonname = get_my_canon_name(&err);
-		} else {
-			ai->ai_canonname =
-			get_canon_name_from_addr(ip,&err);
-		}
-		if (ai->ai_canonname == NULL) {
-			freeaddrinfo(ai);
-			return err;
-		}
-	}
-
-	*res = ai;
-	return 0;
-}
-
-/*
- * get address info for multiple ipv4 addresses.
- *
- *	Bugs:	- servname can only be a number, not text.
- */
-
-static int getaddr_info_name(const char *node,
-				const char *service,
-				const struct addrinfo *hints,
-				struct addrinfo **res)
-{
-	struct addrinfo *listp = NULL, *prevp = NULL;
-	char **pptr = NULL;
-	int err;
-	struct hostent *hp = NULL;
-	unsigned short port = 0;
-
-	if (service) {
-		port = (unsigned short)atoi(service);
-	}
-
-	hp = gethostbyname(node);
-	err = check_hostent_err(hp);
-	if (err) {
-		return err;
-	}
-
-	for(pptr = hp->h_addr_list; *pptr; pptr++) {
-		struct in_addr ip = *(struct in_addr *)*pptr;
-		struct addrinfo *ai = alloc_entry(hints, ip, port);
-
-		if (!ai) {
-			freeaddrinfo(listp);
-			return EAI_MEMORY;
-		}
-
-		if (!listp) {
-			listp = ai;
-			prevp = ai;
-			ai->ai_canonname = SMB_STRDUP(hp->h_name);
-			if (!ai->ai_canonname) {
-				freeaddrinfo(listp);
-				return EAI_MEMORY;
-			}
-		} else {
-			prevp->ai_next = ai;
-			prevp = ai;
-		}
-	}
-	*res = listp;
-	return 0;
-}
-
-/*
- * get address info for ipv4 sockets.
- *
- *	Bugs:	- servname can only be a number, not text.
- */
-
-int rep_getaddrinfo(const char *node,
-		const char *service,
-		const struct addrinfo * hintp,
-		struct addrinfo ** res)
-{
-	struct addrinfo hints;
-
-	/* Setup the hints struct. */
-	if (hintp == NULL) {
-		memset(&hints, 0, sizeof(hints));
-		hints.ai_family = AF_INET;
-		hints.ai_socktype = SOCK_STREAM;
-	} else {
-		memcpy(&hints, hintp, sizeof(hints));
-	}
-
-	if (hints.ai_family != AF_INET && hints.ai_family != AF_UNSPEC) {
-		return EAI_FAMILY;
-	}
-
-	if (hints.ai_socktype == 0) {
-		hints.ai_socktype = SOCK_STREAM;
-	}
-
-	if (!node && !service) {
-		return EAI_NONAME;
-	}
-
-	if (node) {
-		if (node[0] == '\0') {
-			return getaddr_info_single_addr(service,
-					INADDR_ANY,
-					&hints,
-					res);
-		} else if (hints.ai_flags & AI_NUMERICHOST) {
-			struct in_addr ip;
-			if (!inet_aton(node, &ip)) {
-				return EAI_FAIL;
-			}
-			return getaddr_info_single_addr(service,
-					ntohl(ip.s_addr),
-					&hints,
-					res);
-		} else {
-			return getaddr_info_name(node,
-						service,
-						&hints,
-						res);
-		}
-	} else if (hints.ai_flags & AI_PASSIVE) {
-		return getaddr_info_single_addr(service,
-					INADDR_ANY,
-					&hints,
-					res);
-	}
-	return getaddr_info_single_addr(service,
-					INADDR_LOOPBACK,
-					&hints,
-					res);
-}
-
-
-void rep_freeaddrinfo(struct addrinfo *res)
-{
-	struct addrinfo *next = NULL;
-
-	for (;res; res = next) {
-		next = res->ai_next;
-		if (res->ai_canonname) {
-			free(res->ai_canonname);
-		}
-		if (res->ai_addr) {
-			free(res->ai_addr);
-		}
-		free(res);
-	}
-}
-
-
-const char *rep_gai_strerror(int errcode)
-{
-#ifdef HAVE_HSTRERROR
-	int			hcode;
-
-	switch (errcode)
-	{
-		case EAI_NONAME:
-			hcode = HOST_NOT_FOUND;
-			break;
-		case EAI_AGAIN:
-			hcode = TRY_AGAIN;
-			break;
-		case EAI_FAIL:
-		default:
-			hcode = NO_RECOVERY;
-			break;
-	}
-
-	return hstrerror(hcode);
-#else							/* !HAVE_HSTRERROR */
-
-	switch (errcode)
-	{
-		case EAI_NONAME:
-			return "Unknown host";
-		case EAI_AGAIN:
-			return "Host name lookup failure";
-#ifdef EAI_BADFLAGS
-		case EAI_BADFLAGS:
-			return "Invalid argument";
-#endif
-#ifdef EAI_FAMILY
-		case EAI_FAMILY:
-			return "Address family not supported";
-#endif
-#ifdef EAI_MEMORY
-		case EAI_MEMORY:
-			return "Not enough memory";
-#endif
-#ifdef EAI_NODATA
-		case EAI_NODATA:
-			return "No host data of that type was found";
-#endif
-#ifdef EAI_SERVICE
-		case EAI_SERVICE:
-			return "Class type not found";
-#endif
-#ifdef EAI_SOCKTYPE
-		case EAI_SOCKTYPE:
-			return "Socket type not supported";
-#endif
-		default:
-			return "Unknown server error";
-	}
-#endif   /* HAVE_HSTRERROR */
-}
-
-static int gethostnameinfo(const struct sockaddr *sa,
-			char *node,
-			size_t nodelen,
-			int flags)
-{
-	int ret = -1;
-	char *p = NULL;
-
-	if (!(flags & NI_NUMERICHOST)) {
-		struct hostent *hp = gethostbyaddr(
-				&((struct sockaddr_in *)sa)->sin_addr,
-				sizeof(struct in_addr),
-				sa->sa_family);
-		ret = check_hostent_err(hp);
-		if (ret == 0) {
-			/* Name looked up successfully. */
-			ret = snprintf(node, nodelen, "%s", hp->h_name);
-			if (ret < 0 || (size_t)ret >= nodelen) {
-				return EAI_MEMORY;
-			}
-			if (flags & NI_NOFQDN) {
-				p = strchr(node,'.');
-				if (p) {
-					*p = '\0';
-				}
-			}
-			return 0;
-		}
-
-		if (flags & NI_NAMEREQD) {
-			/* If we require a name and didn't get one,
-			 * automatically fail. */
-			return ret;
-		}
-		/* Otherwise just fall into the numeric host code... */
-	}
-	p = inet_ntoa(((struct sockaddr_in *)sa)->sin_addr);
-	ret = snprintf(node, nodelen, "%s", p);
-	if (ret < 0 || (size_t)ret >= nodelen) {
-		return EAI_MEMORY;
-	}
-	return 0;
-}
-
-static int getservicenameinfo(const struct sockaddr *sa,
-			char *service,
-			size_t servicelen,
-			int flags)
-{
-	int ret = -1;
-	int port = ntohs(((struct sockaddr_in *)sa)->sin_port);
-
-	if (!(flags & NI_NUMERICSERV)) {
-		struct servent *se = getservbyport(
-				port,
-				(flags & NI_DGRAM) ? "udp" : "tcp");
-		if (se && se->s_name) {
-			/* Service name looked up successfully. */
-			ret = snprintf(service, servicelen, "%s", se->s_name);
-			if (ret < 0 || (size_t)ret >= servicelen) {
-				return EAI_MEMORY;
-			}
-			return 0;
-		}
-		/* Otherwise just fall into the numeric service code... */
-	}
-	ret = snprintf(service, servicelen, "%d", port);
-	if (ret < 0 || (size_t)ret >= servicelen) {
-		return EAI_MEMORY;
-	}
-	return 0;
-}
-
-/*
- * Convert an ipv4 address to a hostname.
- *
- * Bugs:	- No IPv6 support.
- */
-int rep_getnameinfo(const struct sockaddr *sa, socklen_t salen,
-			char *node, size_t nodelen,
-			char *service, size_t servicelen, int flags)
-{
-
-	/* Invalid arguments. */
-	if (sa == NULL || (node == NULL && service == NULL)) {
-		return EAI_FAIL;
-	}
-
-	if (sa->sa_family != AF_INET) {
-		return EAI_FAIL;
-	}
-
-	if (salen < sizeof(struct sockaddr_in)) {
-		return EAI_FAIL;
-	}
-
-	if (node) {
-		return gethostnameinfo(sa, node, nodelen, flags);
-	}
-
-	if (service) {
-		return getservicenameinfo(sa, service, servicelen, flags);
-	}
-	return 0;
-}

Deleted: branches/samba/upstream/source/lib/replace/getaddrinfo.h
===================================================================
--- branches/samba/upstream/source/lib/replace/getaddrinfo.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/getaddrinfo.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,89 +0,0 @@
-/*
-PostgreSQL Database Management System
-(formerly known as Postgres, then as Postgres95)
-
-Portions Copyright (c) 1996-2005, The PostgreSQL Global Development Group
-
-Portions Copyright (c) 1994, The Regents of the University of California
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose, without fee, and without a written agreement
-is hereby granted, provided that the above copyright notice and this paragraph
-and the following two paragraphs appear in all copies.
-
-IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
-DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING
-LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION,
-EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-
-THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
-ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS
-TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
-
-*/
-
-/*-------------------------------------------------------------------------
- *
- * getaddrinfo.h
- *	  Support getaddrinfo() on platforms that don't have it.
- *
- * Note: we use our own routines on platforms that don't HAVE_STRUCT_ADDRINFO,
- * whether or not the library routine getaddrinfo() can be found.  This
- * policy is needed because on some platforms a manually installed libbind.a
- * may provide getaddrinfo(), yet the system headers may not provide the
- * struct definitions needed to call it.  To avoid conflict with the libbind
- * definition in such cases, we rename our routines to pg_xxx() via macros.
- *
-
-in lib/replace we use rep_xxx()
-
- * This code will also work on platforms where struct addrinfo is defined
- * in the system headers but no getaddrinfo() can be located.
- *
- * Copyright (c) 2003-2007, PostgreSQL Global Development Group
- *
- *-------------------------------------------------------------------------
- */
-#ifndef GETADDRINFO_H
-#define GETADDRINFO_H
-
-#ifndef HAVE_GETADDRINFO
-
-/* Rename private copies per comments above */
-#ifdef getaddrinfo
-#undef getaddrinfo
-#endif
-#define getaddrinfo rep_getaddrinfo
-#define HAVE_GETADDRINFO
-
-#ifdef freeaddrinfo
-#undef freeaddrinfo
-#endif
-#define freeaddrinfo rep_freeaddrinfo
-#define HAVE_FREEADDRINFO
-
-#ifdef gai_strerror
-#undef gai_strerror
-#endif
-#define gai_strerror rep_gai_strerror
-#define HAVE_GAI_STRERROR
-
-#ifdef getnameinfo
-#undef getnameinfo
-#endif
-#define getnameinfo rep_getnameinfo
-#define HAVE_GETNAMEINFO
-
-extern int rep_getaddrinfo(const char *node, const char *service,
-			const struct addrinfo * hints, struct addrinfo ** res);
-extern void rep_freeaddrinfo(struct addrinfo * res);
-extern const char *rep_gai_strerror(int errcode);
-extern int rep_getnameinfo(const struct sockaddr * sa, socklen_t salen,
-			char *node, size_t nodelen,
-			char *service, size_t servicelen, int flags);
-#endif   /* HAVE_GETADDRINFO */
-
-#endif   /* GETADDRINFO_H */

Deleted: branches/samba/upstream/source/lib/replace/getifaddrs.c
===================================================================
--- branches/samba/upstream/source/lib/replace/getifaddrs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/getifaddrs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,361 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   Samba utility functions
-   Copyright (C) Andrew Tridgell 1998
-   Copyright (C) Jeremy Allison 2007
-   Copyright (C) Jelmer Vernooij <jelmer at samba.org> 2007
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#define SOCKET_WRAPPER_NOT_REPLACE
-
-#include "replace.h"
-#include "system/network.h"
-
-#include <unistd.h>
-#include <stdio.h>
-#include <sys/types.h>
-
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-
-#ifndef SIOCGIFCONF
-#ifdef HAVE_SYS_SOCKIO_H
-#include <sys/sockio.h>
-#endif
-#endif
-
-#ifdef HAVE_IFACE_GETIFADDRS
-#define _FOUND_IFACE_ANY
-#else
-
-void rep_freeifaddrs(struct ifaddrs *ifp)
-{
-	if (ifp != NULL) {
-		free(ifp->ifa_name);
-		free(ifp->ifa_addr);
-		free(ifp->ifa_netmask);
-		free(ifp->ifa_dstaddr);
-		freeifaddrs(ifp->ifa_next);
-		free(ifp);
-	}
-}
-
-static struct sockaddr *sockaddr_dup(struct sockaddr *sa)
-{
-	struct sockaddr *ret;
-	socklen_t socklen;
-#ifdef HAVE_SOCKADDR_SA_LEN
-	socklen = sa->sa_len;
-#else
-	socklen = sizeof(struct sockaddr_storage);
-#endif
-	ret = calloc(1, socklen);
-	if (ret == NULL)
-		return NULL;
-	memcpy(ret, sa, socklen);
-	return ret;
-}
-#endif
-
-#if HAVE_IFACE_IFCONF
-
-/* this works for Linux 2.2, Solaris 2.5, SunOS4, HPUX 10.20, OSF1
-   V4.0, Ultrix 4.4, SCO Unix 3.2, IRIX 6.4 and FreeBSD 3.2.
-
-   It probably also works on any BSD style system.  */
-
-int rep_getifaddrs(struct ifaddrs **ifap)
-{
-	struct ifconf ifc;
-	char buff[8192];
-	int fd, i, n;
-	struct ifreq *ifr=NULL;
-	struct in_addr ipaddr;
-	struct in_addr nmask;
-	char *iname;
-	struct ifaddrs *curif;
-	struct ifaddrs *lastif = NULL;
-
-	*ifap = NULL;
-
-	if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
-		return -1;
-	}
-  
-	ifc.ifc_len = sizeof(buff);
-	ifc.ifc_buf = buff;
-
-	if (ioctl(fd, SIOCGIFCONF, &ifc) != 0) {
-		close(fd);
-		return -1;
-	} 
-
-	ifr = ifc.ifc_req;
-  
-	n = ifc.ifc_len / sizeof(struct ifreq);
-
-	/* Loop through interfaces, looking for given IP address */
-	for (i=n-1; i>=0; i--) {
-		if (ioctl(fd, SIOCGIFFLAGS, &ifr[i]) == -1) {
-			freeifaddrs(*ifap);
-			return -1;
-		}
-
-		curif = calloc(1, sizeof(struct ifaddrs));
-		curif->ifa_name = strdup(ifr[i].ifr_name);
-		curif->ifa_flags = ifr[i].ifr_flags;
-		curif->ifa_dstaddr = NULL;
-		curif->ifa_data = NULL;
-		curif->ifa_next = NULL;
-
-		curif->ifa_addr = NULL;
-		if (ioctl(fd, SIOCGIFADDR, &ifr[i]) != -1) {
-			curif->ifa_addr = sockaddr_dup(&ifr[i].ifr_addr);
-		}
-
-		curif->ifa_netmask = NULL;
-		if (ioctl(fd, SIOCGIFNETMASK, &ifr[i]) != -1) {
-			curif->ifa_netmask = sockaddr_dup(&ifr[i].ifr_addr);
-		}
-
-		if (lastif == NULL) {
-			*ifap = curif;
-		} else {
-			lastif->ifa_next = curif;
-		}
-		lastif = curif;
-	}
-
-	close(fd);
-
-	return 0;
-}  
-
-#define _FOUND_IFACE_ANY
-#endif /* HAVE_IFACE_IFCONF */
-#ifdef HAVE_IFACE_IFREQ
-
-#ifndef I_STR
-#include <sys/stropts.h>
-#endif
-
-/****************************************************************************
-this should cover most of the streams based systems
-Thanks to Andrej.Borsenkow at mow.siemens.ru for several ideas in this code
-****************************************************************************/
-int rep_getifaddrs(struct ifaddrs **ifap)
-{
-	struct ifreq ifreq;
-	struct strioctl strioctl;
-	char buff[8192];
-	int fd, i, n;
-	struct ifreq *ifr=NULL;
-	struct in_addr ipaddr;
-	struct in_addr nmask;
-	char *iname;
-	struct ifaddrs *curif;
-	struct ifaddrs *lastif = NULL;
-
-	*ifap = NULL;
-
-	if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
-		return -1;
-	}
-  
-	strioctl.ic_cmd = SIOCGIFCONF;
-	strioctl.ic_dp  = buff;
-	strioctl.ic_len = sizeof(buff);
-	if (ioctl(fd, I_STR, &strioctl) < 0) {
-		close(fd);
-		return -1;
-	} 
-
-	/* we can ignore the possible sizeof(int) here as the resulting
-	   number of interface structures won't change */
-	n = strioctl.ic_len / sizeof(struct ifreq);
-
-	/* we will assume that the kernel returns the length as an int
-           at the start of the buffer if the offered size is a
-           multiple of the structure size plus an int */
-	if (n*sizeof(struct ifreq) + sizeof(int) == strioctl.ic_len) {
-		ifr = (struct ifreq *)(buff + sizeof(int));  
-	} else {
-		ifr = (struct ifreq *)buff;  
-	}
-
-	/* Loop through interfaces */
-
-	for (i = 0; i<n; i++) {
-		ifreq = ifr[i];
-  
-		curif = calloc(1, sizeof(struct ifaddrs));
-		if (lastif == NULL) {
-			*ifap = curif;
-		} else {
-			lastif->ifa_next = curif;
-		}
-
-		strioctl.ic_cmd = SIOCGIFFLAGS;
-		strioctl.ic_dp  = (char *)&ifreq;
-		strioctl.ic_len = sizeof(struct ifreq);
-		if (ioctl(fd, I_STR, &strioctl) != 0) {
-			freeifaddrs(*ifap);
-			return -1;
-		}
-
-		curif->ifa_flags = ifreq.ifr_flags;
-		
-		strioctl.ic_cmd = SIOCGIFADDR;
-		strioctl.ic_dp  = (char *)&ifreq;
-		strioctl.ic_len = sizeof(struct ifreq);
-		if (ioctl(fd, I_STR, &strioctl) != 0) {
-			freeifaddrs(*ifap);
-			return -1;
-		}
-
-		curif->ifa_name = strdup(ifreq.ifr_name);
-		curif->ifa_addr = sockaddr_dup(&ifreq.ifr_addr);
-		curif->ifa_dstaddr = NULL;
-		curif->ifa_data = NULL;
-		curif->ifa_next = NULL;
-		curif->ifa_netmask = NULL;
-
-		strioctl.ic_cmd = SIOCGIFNETMASK;
-		strioctl.ic_dp  = (char *)&ifreq;
-		strioctl.ic_len = sizeof(struct ifreq);
-		if (ioctl(fd, I_STR, &strioctl) != 0) {
-			freeifaddrs(*ifap);
-			return -1;
-		}
-
-		curif->ifa_netmask = sockaddr_dup(&ifreq.ifr_addr);
-
-		lastif = curif;
-	}
-
-	close(fd);
-
-	return 0;
-}
-
-#define _FOUND_IFACE_ANY
-#endif /* HAVE_IFACE_IFREQ */
-#ifdef HAVE_IFACE_AIX
-
-/****************************************************************************
-this one is for AIX (tested on 4.2)
-****************************************************************************/
-int rep_getifaddrs(struct ifaddrs **ifap)
-{
-	char buff[8192];
-	int fd, i;
-	struct ifconf ifc;
-	struct ifreq *ifr=NULL;
-	struct in_addr ipaddr;
-	struct in_addr nmask;
-	char *iname;
-	struct ifaddrs *curif;
-	struct ifaddrs *lastif = NULL;
-
-	*ifap = NULL;
-
-	if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
-		return -1;
-	}
-
-	ifc.ifc_len = sizeof(buff);
-	ifc.ifc_buf = buff;
-
-	if (ioctl(fd, SIOCGIFCONF, &ifc) != 0) {
-		close(fd);
-		return -1;
-	}
-
-	ifr = ifc.ifc_req;
-
-	/* Loop through interfaces */
-	i = ifc.ifc_len;
-
-	while (i > 0) {
-		uint_t inc;
-
-		inc = ifr->ifr_addr.sa_len;
-
-		if (ioctl(fd, SIOCGIFADDR, ifr) != 0) {
-			freeaddrinfo(*ifap);
-			return -1;
-		}
-
-		curif = calloc(1, sizeof(struct ifaddrs));
-		if (lastif == NULL) {
-			*ifap = curif;
-		} else {
-			lastif->ifa_next = curif;
-		}
-
-		curif->ifa_name = strdup(ifr->ifr_name);
-		curif->ifa_addr = sockaddr_dup(&ifr->ifr_addr);
-		curif->ifa_dstaddr = NULL;
-		curif->ifa_data = NULL;
-		curif->ifa_netmask = NULL;
-		curif->ifa_next = NULL;
-
-		if (ioctl(fd, SIOCGIFFLAGS, ifr) != 0) {
-			freeaddrinfo(*ifap);
-			return -1;
-		}
-
-		curif->ifa_flags = ifr->ifr_flags;
-
-		if (ioctl(fd, SIOCGIFNETMASK, ifr) != 0) {
-			freeaddrinfo(*ifap);
-			return -1;
-		}
-
-		curif->ifa_netmask = sockaddr_dup(&ifr->ifr_addr);
-
-		lastif = curif;
-
-	next:
-		/*
-		 * Patch from Archie Cobbs (archie at whistle.com).  The
-		 * addresses in the SIOCGIFCONF interface list have a
-		 * minimum size. Usually this doesn't matter, but if
-		 * your machine has tunnel interfaces, etc. that have
-		 * a zero length "link address", this does matter.  */
-
-		if (inc < sizeof(ifr->ifr_addr))
-			inc = sizeof(ifr->ifr_addr);
-		inc += IFNAMSIZ;
-
-		ifr = (struct ifreq*) (((char*) ifr) + inc);
-		i -= inc;
-	}
-
-	close(fd);
-	return 0;
-}
-
-#define _FOUND_IFACE_ANY
-#endif /* HAVE_IFACE_AIX */
-#ifndef _FOUND_IFACE_ANY
-int rep_getifaddrs(struct ifaddrs **ifap)
-{
-	errno = ENOSYS;
-	return -1;
-}
-#endif

Modified: branches/samba/upstream/source/lib/replace/getpass.c
===================================================================
--- branches/samba/upstream/source/lib/replace/getpass.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/getpass.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -2,8 +2,8 @@
 This file is part of the GNU C Library.
 
 The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public License as
-published by the Free Software Foundation; either version 3 of the
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
 License, or (at your option) any later version.
 
 The GNU C Library is distributed in the hope that it will be useful,
@@ -11,18 +11,43 @@
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 Library General Public License for more details.
 
-You should have received a copy of the GNU Lesser General Public
+You should have received a copy of the GNU Library General Public
 License along with the GNU C Library; see the file COPYING.LIB.  If
-not, see <http://www.gnu.org/licenses/>.  */
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
 
 /* Modified to use with samba by Jeremy Allison, 8th July 1995. */
 
 #include "replace.h"
-#include "system/filesys.h"
-#include "system/wait.h"
-#include "system/terminal.h"
-#include "system/passwd.h"
 
+#if defined(REPLACE_GETPASS_BY_GETPASSPHRASE)
+
+#if defined(HAVE_STDIO_H)
+#include <stdio.h>
+#endif
+
+char *getsmbpass(const char *prompt)
+{
+	return getpassphrase(prompt);
+}
+
+#else /* !REPLACE_GETPASS_BY_GETPASSPHRASE */
+
+#if defined(HAVE_TERMIOS_H)
+/* POSIX terminal handling. */
+#include <termios.h>
+#elif defined(HAVE_TERMIO_H)
+/* Older SYSV terminal handling - don't use if we can avoid it. */
+#include <termio.h>
+#elif defined(HAVE_SYS_TERMIO_H)
+/* Older SYSV terminal handling - don't use if we can avoid it. */
+#include <sys/termio.h>
+#endif
+
+#ifdef HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
+
 /*
  * Define additional missing types
  */
@@ -38,6 +63,8 @@
 #define SIGNAL_CAST (RETSIGTYPE (*)(int))
 #endif
 
+#ifdef REPLACE_GETPASS
+
 #ifdef SYSV_TERMIO 
 
 /* SYSTEM V TERMIO HANDLING */
@@ -118,105 +145,83 @@
 	sigemptyset(&act.sa_mask);
 	sigaddset(&act.sa_mask,signum);
 	sigaction(signum,&act,&oldact);
+	return oldact.sa_handler;
 #else /* !HAVE_SIGACTION */
 	/* FIXME: need to handle sigvec and systems with broken signal() */
-	signal(signum, handler);
+	return signal(signum, handler);
 #endif
 }
 
-static sig_atomic_t gotintr;
-static int in_fd = -1;
+char *getsmbpass(const char *prompt)
+{
+  FILE *in, *out;
+  int echo_off;
+  static char buf[256];
+  static size_t bufsize = sizeof(buf);
+  size_t nread;
 
-/***************************************************************
- Signal function to tell us were ^C'ed.
-****************************************************************/
+  /* Catch problematic signals */
+  catch_signal(SIGINT, SIGNAL_CAST SIG_IGN);
 
-static void gotintr_sig(void)
-{
-	gotintr = 1;
-	if (in_fd != -1)
-		close(in_fd); /* Safe way to force a return. */
-	in_fd = -1;
-}
+  /* Try to write to and read from the terminal if we can.
+     If we can't open the terminal, use stderr and stdin.  */
 
-char *rep_getpass(const char *prompt)
-{
-	FILE *in, *out;
-	int echo_off;
-	static char buf[256];
-	static size_t bufsize = sizeof(buf);
-	size_t nread;
+  in = fopen ("/dev/tty", "w+");
+  if (in == NULL)
+    {
+      in = stdin;
+      out = stderr;
+    }
+  else
+    out = in;
 
-	/* Catch problematic signals */
-	catch_signal(SIGINT, SIGNAL_CAST gotintr_sig);
+  setvbuf(in, NULL, _IONBF, 0);
 
-	/* Try to write to and read from the terminal if we can.
-		If we can't open the terminal, use stderr and stdin.  */
+  /* Turn echoing off if it is on now.  */
 
-	in = fopen ("/dev/tty", "w+");
-	if (in == NULL) {
-		in = stdin;
-		out = stderr;
-	} else {
-		out = in;
+  if (tcgetattr (fileno (in), &t) == 0)
+    {
+	  if (ECHO_IS_ON(t))
+	{
+		TURN_ECHO_OFF(t);
+		echo_off = tcsetattr (fileno (in), TCSAFLUSH, &t) == 0;
+		TURN_ECHO_ON(t);
 	}
+      else
+	echo_off = 0;
+    }
+  else
+    echo_off = 0;
 
-	setvbuf(in, NULL, _IONBF, 0);
+  /* Write the prompt.  */
+  fputs (prompt, out);
+  fflush (out);
 
-	/* Turn echoing off if it is on now.  */
+  /* Read the password.  */
+  buf[0] = 0;
+  fgets(buf, bufsize, in);
+  nread = strlen(buf);
+  if (buf[nread - 1] == '\n')
+    buf[nread - 1] = '\0';
 
-	if (tcgetattr (fileno (in), &t) == 0) {
-		if (ECHO_IS_ON(t)) {
-			TURN_ECHO_OFF(t);
-			echo_off = tcsetattr (fileno (in), TCSAFLUSH, &t) == 0;
-			TURN_ECHO_ON(t);
-		} else {
-			echo_off = 0;
-		}
-	} else {
-		echo_off = 0;
-	}
+  /* Restore echoing.  */
+  if (echo_off)
+    (void) tcsetattr (fileno (in), TCSANOW, &t);
 
-	/* Write the prompt.  */
-	fputs(prompt, out);
-	fflush(out);
+  if (in != stdin)
+    /* We opened the terminal; now close it.  */
+    fclose (in);
 
-	/* Read the password.  */
-	buf[0] = 0;
-	if (!gotintr) {
-		in_fd = fileno(in);
-		if (fgets(buf, bufsize, in) == NULL) {
-			buf[0] = 0;
-		}
-	}
-	nread = strlen(buf);
-	if (nread) {
-		if (buf[nread - 1] == '\n')
-			buf[nread - 1] = '\0';
-	}
+  /* Catch problematic signals */
+  catch_signal(SIGINT, SIGNAL_CAST SIG_DFL);
 
-	/* Restore echoing.  */
-	if (echo_off) {
-		if (gotintr && in_fd == -1) {
-			in = fopen ("/dev/tty", "w+");
-		}
-		if (in != NULL)
-			tcsetattr (fileno (in), TCSANOW, &t);
-	}
+  printf("\n");
+  return buf;
+}
 
-	fprintf(out, "\n");
-	fflush(out);
+#else
+ void getsmbpasswd_dummy(void);
+ void getsmbpasswd_dummy(void) {;}
+#endif
 
-	if (in && in != stdin) /* We opened the terminal; now close it.  */
-		fclose(in);
-
-	/* Catch problematic signals */
-	catch_signal(SIGINT, SIGNAL_CAST SIG_DFL);
-
-	if (gotintr) {
-		printf("Interupted by signal.\n");
-		fflush(stdout);
-		exit(1);
-	}
-	return buf;
-}
+#endif /* REPLACE_GETPASS_BY_GETPASSPHRASE */

Modified: branches/samba/upstream/source/lib/replace/getpass.m4
===================================================================
--- branches/samba/upstream/source/lib/replace/getpass.m4	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/getpass.m4	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,22 +1,25 @@
-AC_CHECK_FUNC(getpass, libreplace_cv_HAVE_GETPASS=yes)
-AC_CHECK_FUNC(getpassphrase, libreplace_cv_HAVE_GETPASSPHRASE=yes)
-if test x"$libreplace_cv_HAVE_GETPASS" = x"yes" -a x"$libreplace_cv_HAVE_GETPASSPHRASE" = x"yes"; then
+AC_CHECK_FUNC(getpass, samba_cv_HAVE_GETPASS=yes)
+AC_CHECK_FUNC(getpassphrase, samba_cv_HAVE_GETPASSPHRASE=yes)
+if test x"$samba_cv_HAVE_GETPASS" = x"yes" -a x"$samba_cv_HAVE_GETPASSPHRASE" = x"yes"; then
         AC_DEFINE(REPLACE_GETPASS_BY_GETPASSPHRASE, 1, [getpass returns <9 chars where getpassphrase returns <265 chars])
 	AC_DEFINE(REPLACE_GETPASS,1,[Whether getpass should be replaced])
 	LIBREPLACEOBJ="${LIBREPLACEOBJ} getpass.o"
 else
 
-AC_CACHE_CHECK([whether getpass should be replaced],libreplace_cv_REPLACE_GETPASS,[
+AC_CACHE_CHECK([whether getpass should be replaced],samba_cv_REPLACE_GETPASS,[
 SAVE_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="$CPPFLAGS -I$libreplacedir/"
 AC_TRY_COMPILE([
 #include "confdefs.h"
-#define NO_CONFIG_H
+#define _LIBREPLACE_REPLACE_H
+#define REPLACE_GETPASS 1
+#define main dont_declare_main
 #include "$libreplacedir/getpass.c"
-],[],libreplace_cv_REPLACE_GETPASS=yes,libreplace_cv_REPLACE_GETPASS=no)
+#undef main
+],[],samba_cv_REPLACE_GETPASS=yes,samba_cv_REPLACE_GETPASS=no)
 CPPFLAGS="$SAVE_CPPFLAGS"
 ])
-if test x"$libreplace_cv_REPLACE_GETPASS" = x"yes"; then
+if test x"$samba_cv_REPLACE_GETPASS" = x"yes"; then
 	AC_DEFINE(REPLACE_GETPASS,1,[Whether getpass should be replaced])
 	LIBREPLACEOBJ="${LIBREPLACEOBJ} getpass.o"
 fi

Deleted: branches/samba/upstream/source/lib/replace/inet_aton.c
===================================================================
--- branches/samba/upstream/source/lib/replace/inet_aton.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/inet_aton.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,33 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * replacement functions
- * Copyright (C) Michael Adam <obnox at samba.org> 2008
- *
- *  ** NOTE! The following LGPL license applies to the replace
- *  ** library. This does NOT imply that all of Samba is released
- *  ** under the LGPL
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "replace.h"
-#include "system/network.h"
-
-/**
- * We know that we have inet_pton from earlier libreplace checks.
- */
-int rep_inet_aton(const char *src, struct in_addr *dst)
-{
-	return (inet_pton(AF_INET, src, dst) > 0) ? 1 : 0;
-}

Deleted: branches/samba/upstream/source/lib/replace/inet_ntoa.c
===================================================================
--- branches/samba/upstream/source/lib/replace/inet_ntoa.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/inet_ntoa.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,39 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * replacement routines for broken systems
- * Copyright (C) Andrew Tridgell 2003
- * Copyright (C) Michael Adam 2008
- *
- *  ** NOTE! The following LGPL license applies to the replace
- *  ** library. This does NOT imply that all of Samba is released
- *  ** under the LGPL
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "replace.h"
-#include "system/network.h"
-
-/**
- * NOTE: this is not thread safe, but it can't be, either
- * since it returns a pointer to static memory.
- */
-char *rep_inet_ntoa(struct in_addr ip)
-{
-	uint8_t *p = (uint8_t *)&ip.s_addr;
-	static char buf[18];
-	slprintf(buf, 17, "%d.%d.%d.%d",
-		 (int)p[0], (int)p[1], (int)p[2], (int)p[3]);
-	return buf;
-}

Deleted: branches/samba/upstream/source/lib/replace/inet_ntop.c
===================================================================
--- branches/samba/upstream/source/lib/replace/inet_ntop.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/inet_ntop.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,191 +0,0 @@
-/*
- * Copyright (C) 1996-2001  Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-
-#include "replace.h"
-#include "system/network.h"
-
-#define NS_INT16SZ	 2
-#define NS_IN6ADDRSZ	16
-
-/*
- * WARNING: Don't even consider trying to compile this on a system where
- * sizeof(int) < 4.  sizeof(int) > 4 is fine; all the world's not a VAX.
- */
-
-static const char *inet_ntop4(const unsigned char *src, char *dst,
-			      socklen_t size);
-
-#ifdef AF_INET6
-static const char *inet_ntop6(const unsigned char *src, char *dst,
-			      socklen_t size);
-#endif
-
-/* char *
- * isc_net_ntop(af, src, dst, size)
- *	convert a network format address to presentation format.
- * return:
- *	pointer to presentation format address (`dst'), or NULL (see errno).
- * author:
- *	Paul Vixie, 1996.
- */
-const char *
-rep_inet_ntop(int af, const void *src, char *dst, socklen_t size)
-{
-	switch (af) {
-	case AF_INET:
-		return (inet_ntop4(src, dst, size));
-#ifdef AF_INET6
-	case AF_INET6:
-		return (inet_ntop6(src, dst, size));
-#endif
-	default:
-		errno = EAFNOSUPPORT;
-		return (NULL);
-	}
-	/* NOTREACHED */
-}
-
-/* const char *
- * inet_ntop4(src, dst, size)
- *	format an IPv4 address
- * return:
- *	`dst' (as a const)
- * notes:
- *	(1) uses no statics
- *	(2) takes a unsigned char* not an in_addr as input
- * author:
- *	Paul Vixie, 1996.
- */
-static const char *
-inet_ntop4(const unsigned char *src, char *dst, socklen_t size)
-{
-	static const char *fmt = "%u.%u.%u.%u";
-	char tmp[sizeof "255.255.255.255"];
-	size_t len;
-
-	len = snprintf(tmp, sizeof tmp, fmt, src[0], src[1], src[2], src[3]);
-	if (len >= size) {
-		errno = ENOSPC;
-		return (NULL);
-	}
-	memcpy(dst, tmp, len + 1);
-
-	return (dst);
-}
-
-/* const char *
- * isc_inet_ntop6(src, dst, size)
- *	convert IPv6 binary address into presentation (printable) format
- * author:
- *	Paul Vixie, 1996.
- */
-#ifdef AF_INET6
-static const char *
-inet_ntop6(const unsigned char *src, char *dst, socklen_t size)
-{
-	/*
-	 * Note that int32_t and int16_t need only be "at least" large enough
-	 * to contain a value of the specified size.  On some systems, like
-	 * Crays, there is no such thing as an integer variable with 16 bits.
-	 * Keep this in mind if you think this function should have been coded
-	 * to use pointer overlays.  All the world's not a VAX.
-	 */
-	char tmp[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"], *tp;
-	struct { int base, len; } best, cur;
-	unsigned int words[NS_IN6ADDRSZ / NS_INT16SZ];
-	int i, inc;
-
-	/*
-	 * Preprocess:
-	 *	Copy the input (bytewise) array into a wordwise array.
-	 *	Find the longest run of 0x00's in src[] for :: shorthanding.
-	 */
-	memset(words, '\0', sizeof words);
-	for (i = 0; i < NS_IN6ADDRSZ; i++)
-		words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3));
-	best.base = -1;
-	best.len = 0;
-	cur.base = -1;
-	cur.len = 0;
-	for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) {
-		if (words[i] == 0) {
-			if (cur.base == -1)
-				cur.base = i, cur.len = 1;
-			else
-				cur.len++;
-		} else {
-			if (cur.base != -1) {
-				if (best.base == -1 || cur.len > best.len)
-					best = cur;
-				cur.base = -1;
-			}
-		}
-	}
-	if (cur.base != -1) {
-		if (best.base == -1 || cur.len > best.len)
-			best = cur;
-	}
-	if (best.base != -1 && best.len < 2)
-		best.base = -1;
-
-	/*
-	 * Format the result.
-	 */
-	tp = tmp;
-	for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) {
-		/* Are we inside the best run of 0x00's? */
-		if (best.base != -1 && i >= best.base &&
-		    i < (best.base + best.len)) {
-			if (i == best.base)
-				*tp++ = ':';
-			continue;
-		}
-		/* Are we following an initial run of 0x00s or any real hex? */
-		if (i != 0)
-			*tp++ = ':';
-		/* Is this address an encapsulated IPv4? */
-		if (i == 6 && best.base == 0 &&
-		    (best.len == 6 || (best.len == 5 && words[5] == 0xffff))) {
-			if (!inet_ntop4(src+12, tp, sizeof tmp - (tp - tmp)))
-				return (NULL);
-			tp += strlen(tp);
-			break;
-		}
-		inc = snprintf(tp, 5, "%x", words[i]);
-		if (inc >= 5) {
-			abort();
-		}
-		tp += inc;
-	}
-	/* Was it a trailing run of 0x00's? */
-	if (best.base != -1 && (best.base + best.len) ==
-	    (NS_IN6ADDRSZ / NS_INT16SZ))
-		*tp++ = ':';
-	*tp++ = '\0';
-
-	/*
-	 * Check for overflow, copy, and we're done.
-	 */
-	if ((size_t)(tp - tmp) > size) {
-		errno = ENOSPC;
-		return (NULL);
-	}
-	memcpy(dst, tmp, tp - tmp);
-	return (dst);
-}
-#endif /* AF_INET6 */

Deleted: branches/samba/upstream/source/lib/replace/inet_pton.c
===================================================================
--- branches/samba/upstream/source/lib/replace/inet_pton.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/inet_pton.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,213 +0,0 @@
-/*
- * Copyright (C) 1996-2001  Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "replace.h"
-#include "system/network.h"
-
-#define NS_INT16SZ	 2
-#define NS_INADDRSZ	 4
-#define NS_IN6ADDRSZ	16
-
-/*
- * WARNING: Don't even consider trying to compile this on a system where
- * sizeof(int) < 4.  sizeof(int) > 4 is fine; all the world's not a VAX.
- */
-
-static int inet_pton4(const char *src, unsigned char *dst);
-#ifdef AF_INET6
-static int inet_pton6(const char *src, unsigned char *dst);
-#endif
-
-/* int
- * inet_pton(af, src, dst)
- *	convert from presentation format (which usually means ASCII printable)
- *	to network format (which is usually some kind of binary format).
- * return:
- *	1 if the address was valid for the specified address family
- *	0 if the address wasn't valid (`dst' is untouched in this case)
- *	-1 if some other error occurred (`dst' is untouched in this case, too)
- * author:
- *	Paul Vixie, 1996.
- */
-int
-rep_inet_pton(int af,
-	  const char *src,
-	  void *dst)
-{
-	switch (af) {
-	case AF_INET:
-		return (inet_pton4(src, dst));
-#ifdef AF_INET6
-	case AF_INET6:
-		return (inet_pton6(src, dst));
-#endif
-	default:
-		errno = EAFNOSUPPORT;
-		return (-1);
-	}
-	/* NOTREACHED */
-}
-
-/* int
- * inet_pton4(src, dst)
- *	like inet_aton() but without all the hexadecimal and shorthand.
- * return:
- *	1 if `src' is a valid dotted quad, else 0.
- * notice:
- *	does not touch `dst' unless it's returning 1.
- * author:
- *	Paul Vixie, 1996.
- */
-static int
-inet_pton4(src, dst)
-	const char *src;
-	unsigned char *dst;
-{
-	static const char digits[] = "0123456789";
-	int saw_digit, octets, ch;
-	unsigned char tmp[NS_INADDRSZ], *tp;
-
-	saw_digit = 0;
-	octets = 0;
-	*(tp = tmp) = 0;
-	while ((ch = *src++) != '\0') {
-		const char *pch;
-
-		if ((pch = strchr(digits, ch)) != NULL) {
-			unsigned int new = *tp * 10 + (pch - digits);
-
-			if (new > 255)
-				return (0);
-			*tp = new;
-			if (! saw_digit) {
-				if (++octets > 4)
-					return (0);
-				saw_digit = 1;
-			}
-		} else if (ch == '.' && saw_digit) {
-			if (octets == 4)
-				return (0);
-			*++tp = 0;
-			saw_digit = 0;
-		} else
-			return (0);
-	}
-	if (octets < 4)
-		return (0);
-	memcpy(dst, tmp, NS_INADDRSZ);
-	return (1);
-}
-
-/* int
- * inet_pton6(src, dst)
- *	convert presentation level address to network order binary form.
- * return:
- *	1 if `src' is a valid [RFC1884 2.2] address, else 0.
- * notice:
- *	(1) does not touch `dst' unless it's returning 1.
- *	(2) :: in a full address is silently ignored.
- * credit:
- *	inspired by Mark Andrews.
- * author:
- *	Paul Vixie, 1996.
- */
-#ifdef AF_INET6
-static int
-inet_pton6(src, dst)
-	const char *src;
-	unsigned char *dst;
-{
-	static const char xdigits_l[] = "0123456789abcdef",
-			  xdigits_u[] = "0123456789ABCDEF";
-	unsigned char tmp[NS_IN6ADDRSZ], *tp, *endp, *colonp;
-	const char *xdigits, *curtok;
-	int ch, saw_xdigit;
-	unsigned int val;
-
-	memset((tp = tmp), '\0', NS_IN6ADDRSZ);
-	endp = tp + NS_IN6ADDRSZ;
-	colonp = NULL;
-	/* Leading :: requires some special handling. */
-	if (*src == ':')
-		if (*++src != ':')
-			return (0);
-	curtok = src;
-	saw_xdigit = 0;
-	val = 0;
-	while ((ch = *src++) != '\0') {
-		const char *pch;
-
-		if ((pch = strchr((xdigits = xdigits_l), ch)) == NULL)
-			pch = strchr((xdigits = xdigits_u), ch);
-		if (pch != NULL) {
-			val <<= 4;
-			val |= (pch - xdigits);
-			if (val > 0xffff)
-				return (0);
-			saw_xdigit = 1;
-			continue;
-		}
-		if (ch == ':') {
-			curtok = src;
-			if (!saw_xdigit) {
-				if (colonp)
-					return (0);
-				colonp = tp;
-				continue;
-			}
-			if (tp + NS_INT16SZ > endp)
-				return (0);
-			*tp++ = (unsigned char) (val >> 8) & 0xff;
-			*tp++ = (unsigned char) val & 0xff;
-			saw_xdigit = 0;
-			val = 0;
-			continue;
-		}
-		if (ch == '.' && ((tp + NS_INADDRSZ) <= endp) &&
-		    inet_pton4(curtok, tp) > 0) {
-			tp += NS_INADDRSZ;
-			saw_xdigit = 0;
-			break;	/* '\0' was seen by inet_pton4(). */
-		}
-		return (0);
-	}
-	if (saw_xdigit) {
-		if (tp + NS_INT16SZ > endp)
-			return (0);
-		*tp++ = (unsigned char) (val >> 8) & 0xff;
-		*tp++ = (unsigned char) val & 0xff;
-	}
-	if (colonp != NULL) {
-		/*
-		 * Since some memmove()'s erroneously fail to handle
-		 * overlapping regions, we'll do the shift by hand.
-		 */
-		const int n = tp - colonp;
-		int i;
-
-		for (i = 1; i <= n; i++) {
-			endp[- i] = colonp[n - i];
-			colonp[n - i] = 0;
-		}
-		tp = endp;
-	}
-	if (tp != endp)
-		return (0);
-	memcpy(dst, tmp, NS_IN6ADDRSZ);
-	return (1);
-}
-#endif

Modified: branches/samba/upstream/source/lib/replace/libreplace.m4
===================================================================
--- branches/samba/upstream/source/lib/replace/libreplace.m4	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/libreplace.m4	2008-06-15 01:55:18 UTC (rev 1953)
@@ -85,10 +85,10 @@
 #endif]
 )
 
-AC_CACHE_CHECK([for working mmap],libreplace_cv_HAVE_MMAP,[
+AC_CACHE_CHECK([for working mmap],samba_cv_HAVE_MMAP,[
 AC_TRY_RUN([#include "$libreplacedir/test/shared_mmap.c"],
-           libreplace_cv_HAVE_MMAP=yes,libreplace_cv_HAVE_MMAP=no,libreplace_cv_HAVE_MMAP=cross)])
-if test x"$libreplace_cv_HAVE_MMAP" = x"yes"; then
+           samba_cv_HAVE_MMAP=yes,samba_cv_HAVE_MMAP=no,samba_cv_HAVE_MMAP=cross)])
+if test x"$samba_cv_HAVE_MMAP" = x"yes"; then
     AC_DEFINE(HAVE_MMAP,1,[Whether mmap works])
 fi
 
@@ -96,19 +96,67 @@
 AC_CHECK_HEADERS(sys/syslog.h syslog.h)
 AC_CHECK_HEADERS(sys/time.h time.h)
 AC_CHECK_HEADERS(stdarg.h vararg.h)
-AC_CHECK_HEADERS(sys/mount.h mntent.h)
+AC_CHECK_HEADERS(sys/socket.h netinet/in.h netdb.h arpa/inet.h)
+AC_CHECK_HEADERS(netinet/ip.h netinet/tcp.h netinet/in_systm.h netinet/in_ip.h)
+AC_CHECK_HEADERS(sys/sockio.h sys/un.h)
 AC_CHECK_HEADERS(stropts.h)
 
+dnl we need to check that net/if.h really can be used, to cope with hpux
+dnl where including it always fails
+AC_CACHE_CHECK([for usable net/if.h],libreplace_cv_USABLE_NET_IF_H,[
+	AC_COMPILE_IFELSE([AC_LANG_SOURCE([
+		AC_INCLUDES_DEFAULT
+		#if HAVE_SYS_SOCKET_H
+		# include <sys/socket.h>
+		#endif
+		#include <net/if.h>
+		int main(void) {return 0;}])],
+		[libreplace_cv_USABLE_NET_IF_H=yes],
+		[libreplace_cv_USABLE_NET_IF_H=no]
+	)
+])
+if test x"$libreplace_cv_USABLE_NET_IF_H" = x"yes";then
+	AC_DEFINE(HAVE_NET_IF_H, 1, usability of net/if.h)
+fi
+
+AC_CACHE_CHECK([for broken inet_ntoa],samba_cv_REPLACE_INET_NTOA,[
+AC_TRY_RUN([
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <netinet/in.h>
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+main() { struct in_addr ip; ip.s_addr = 0x12345678;
+if (strcmp(inet_ntoa(ip),"18.52.86.120") &&
+    strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } 
+exit(1);}],
+           samba_cv_REPLACE_INET_NTOA=yes,samba_cv_REPLACE_INET_NTOA=no,samba_cv_REPLACE_INET_NTOA=cross)])
+if test x"$samba_cv_REPLACE_INET_NTOA" = x"yes"; then
+    AC_DEFINE(REPLACE_INET_NTOA,1,[Whether inet_ntoa should be replaced])
+fi
+
+dnl Provided by replace.c:
+AC_TRY_COMPILE([
+#include <sys/types.h>
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <stddef.h>
+#endif
+#include <sys/socket.h>], 
+[socklen_t foo;],,
+[AC_DEFINE(socklen_t, int,[Socket length type])])
+
 AC_CHECK_FUNCS(seteuid setresuid setegid setresgid chroot bzero strerror)
 AC_CHECK_FUNCS(vsyslog setlinebuf mktime ftruncate chsize rename)
 AC_CHECK_FUNCS(waitpid strlcpy strlcat initgroups memmove strdup)
-AC_CHECK_FUNCS(pread pwrite strndup strcasestr strtok_r mkdtemp)
-AC_CHECK_FUNCS(isatty)
+AC_CHECK_FUNCS(pread pwrite strndup strcasestr strtok_r mkdtemp socketpair)
 AC_HAVE_DECL(setresuid, [#include <unistd.h>])
 AC_HAVE_DECL(setresgid, [#include <unistd.h>])
 AC_HAVE_DECL(errno, [#include <errno.h>])
 
-AC_CACHE_CHECK([for secure mkstemp],libreplace_cv_HAVE_SECURE_MKSTEMP,[
+AC_CACHE_CHECK([for secure mkstemp],samba_cv_HAVE_SECURE_MKSTEMP,[
 AC_TRY_RUN([#include <stdlib.h>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -123,10 +171,10 @@
   if ((st.st_mode & 0777) != 0600) exit(1);
   exit(0);
 }],
-libreplace_cv_HAVE_SECURE_MKSTEMP=yes,
-libreplace_cv_HAVE_SECURE_MKSTEMP=no,
-libreplace_cv_HAVE_SECURE_MKSTEMP=cross)])
-if test x"$libreplace_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then
+samba_cv_HAVE_SECURE_MKSTEMP=yes,
+samba_cv_HAVE_SECURE_MKSTEMP=no,
+samba_cv_HAVE_SECURE_MKSTEMP=cross)])
+if test x"$samba_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then
     AC_DEFINE(HAVE_SECURE_MKSTEMP,1,[Whether mkstemp is secure])
 fi
 
@@ -135,7 +183,7 @@
 AC_CHECK_DECLS([snprintf, vsnprintf, asprintf, vasprintf])
 AC_CHECK_FUNCS(snprintf vsnprintf asprintf vasprintf)
 
-AC_CACHE_CHECK([for C99 vsnprintf],libreplace_cv_HAVE_C99_VSNPRINTF,[
+AC_CACHE_CHECK([for C99 vsnprintf],samba_cv_HAVE_C99_VSNPRINTF,[
 AC_TRY_RUN([
 #include <sys/types.h>
 #include <stdio.h>
@@ -169,43 +217,43 @@
 }
 main() { foo("hello"); }
 ],
-libreplace_cv_HAVE_C99_VSNPRINTF=yes,libreplace_cv_HAVE_C99_VSNPRINTF=no,libreplace_cv_HAVE_C99_VSNPRINTF=cross)])
-if test x"$libreplace_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
+samba_cv_HAVE_C99_VSNPRINTF=yes,samba_cv_HAVE_C99_VSNPRINTF=no,samba_cv_HAVE_C99_VSNPRINTF=cross)])
+if test x"$samba_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
     AC_DEFINE(HAVE_C99_VSNPRINTF,1,[Whether there is a C99 compliant vsnprintf])
 fi
 
 
 dnl VA_COPY
-AC_CACHE_CHECK([for va_copy],libreplace_cv_HAVE_VA_COPY,[
+AC_CACHE_CHECK([for va_copy],samba_cv_HAVE_VA_COPY,[
 AC_TRY_LINK([#include <stdarg.h>
 va_list ap1,ap2;], [va_copy(ap1,ap2);],
-libreplace_cv_HAVE_VA_COPY=yes,libreplace_cv_HAVE_VA_COPY=no)])
-if test x"$libreplace_cv_HAVE_VA_COPY" = x"yes"; then
+samba_cv_HAVE_VA_COPY=yes,samba_cv_HAVE_VA_COPY=no)])
+if test x"$samba_cv_HAVE_VA_COPY" = x"yes"; then
     AC_DEFINE(HAVE_VA_COPY,1,[Whether va_copy() is available])
 fi
 
-if test x"$libreplace_cv_HAVE_VA_COPY" != x"yes"; then
-AC_CACHE_CHECK([for __va_copy],libreplace_cv_HAVE___VA_COPY,[
+if test x"$samba_cv_HAVE_VA_COPY" != x"yes"; then
+AC_CACHE_CHECK([for __va_copy],samba_cv_HAVE___VA_COPY,[
 AC_TRY_LINK([#include <stdarg.h>
 va_list ap1,ap2;], [__va_copy(ap1,ap2);],
-libreplace_cv_HAVE___VA_COPY=yes,libreplace_cv_HAVE___VA_COPY=no)])
-if test x"$libreplace_cv_HAVE___VA_COPY" = x"yes"; then
+samba_cv_HAVE___VA_COPY=yes,samba_cv_HAVE___VA_COPY=no)])
+if test x"$samba_cv_HAVE___VA_COPY" = x"yes"; then
     AC_DEFINE(HAVE___VA_COPY,1,[Whether __va_copy() is available])
 fi
 fi
 
 dnl __FUNCTION__ macro
-AC_CACHE_CHECK([for __FUNCTION__ macro],libreplace_cv_HAVE_FUNCTION_MACRO,[
+AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
-libreplace_cv_HAVE_FUNCTION_MACRO=yes,libreplace_cv_HAVE_FUNCTION_MACRO=no)])
-if test x"$libreplace_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
+samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
+if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
 else
     dnl __func__ macro
-    AC_CACHE_CHECK([for __func__ macro],libreplace_cv_HAVE_func_MACRO,[
+    AC_CACHE_CHECK([for __func__ macro],samba_cv_HAVE_func_MACRO,[
     AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __func__);],
-    libreplace_cv_HAVE_func_MACRO=yes,libreplace_cv_HAVE_func_MACRO=no)])
-    if test x"$libreplace_cv_HAVE_func_MACRO" = x"yes"; then
+    samba_cv_HAVE_func_MACRO=yes,samba_cv_HAVE_func_MACRO=no)])
+    if test x"$samba_cv_HAVE_func_MACRO" = x"yes"; then
        AC_DEFINE(HAVE_func_MACRO,1,[Whether there is a __func__ macro])
     fi
 fi
@@ -227,8 +275,11 @@
 eprintf("bla", "bar");
 ], AC_DEFINE(HAVE__VA_ARGS__MACRO, 1, [Whether the __VA_ARGS__ macro is available]))
 
+# Check prerequisites
+AC_CHECK_FUNCS([memset printf syslog], [], 
+			   [ AC_MSG_ERROR([Required function not found])])
 
-AC_CACHE_CHECK([for sig_atomic_t type],libreplace_cv_sig_atomic_t, [
+AC_CACHE_CHECK([for sig_atomic_t type],samba_cv_sig_atomic_t, [
     AC_TRY_COMPILE([
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -236,30 +287,41 @@
 #include <stddef.h>
 #endif
 #include <signal.h>],[sig_atomic_t i = 0],
-	libreplace_cv_sig_atomic_t=yes,libreplace_cv_sig_atomic_t=no)])
-if test x"$libreplace_cv_sig_atomic_t" = x"yes"; then
+	samba_cv_sig_atomic_t=yes,samba_cv_sig_atomic_t=no)])
+if test x"$samba_cv_sig_atomic_t" = x"yes"; then
    AC_DEFINE(HAVE_SIG_ATOMIC_T_TYPE,1,[Whether we have the atomic_t variable type])
 fi
 
 
-AC_CACHE_CHECK([for O_DIRECT flag to open(2)],libreplace_cv_HAVE_OPEN_O_DIRECT,[
+AC_CACHE_CHECK([for O_DIRECT flag to open(2)],samba_cv_HAVE_OPEN_O_DIRECT,[
 AC_TRY_COMPILE([
 #include <unistd.h>
 #ifdef HAVE_FCNTL_H
 #include <fcntl.h>
 #endif],
 [int fd = open("/dev/null", O_DIRECT);],
-libreplace_cv_HAVE_OPEN_O_DIRECT=yes,libreplace_cv_HAVE_OPEN_O_DIRECT=no)])
-if test x"$libreplace_cv_HAVE_OPEN_O_DIRECT" = x"yes"; then
+samba_cv_HAVE_OPEN_O_DIRECT=yes,samba_cv_HAVE_OPEN_O_DIRECT=no)])
+if test x"$samba_cv_HAVE_OPEN_O_DIRECT" = x"yes"; then
     AC_DEFINE(HAVE_OPEN_O_DIRECT,1,[Whether the open(2) accepts O_DIRECT])
-fi
+fi 
 
 
+AC_CACHE_CHECK([that the C compiler can precompile header files],samba_cv_precompiled_headers, [
+	dnl Check whether the compiler can generate precompiled headers
+	touch conftest.h
+	if ${CC-cc} conftest.h 2> /dev/null && test -f conftest.h.gch; then
+		precompiled_headers=yes
+	else
+		precompiled_headers=no
+	fi])
+AC_SUBST(precompiled_headers)
+
+
 dnl Check if the C compiler understands volatile (it should, being ANSI).
-AC_CACHE_CHECK([that the C compiler understands volatile],libreplace_cv_volatile, [
+AC_CACHE_CHECK([that the C compiler understands volatile],samba_cv_volatile, [
 	AC_TRY_COMPILE([#include <sys/types.h>],[volatile int i = 0],
-		libreplace_cv_volatile=yes,libreplace_cv_volatile=no)])
-if test x"$libreplace_cv_volatile" = x"yes"; then
+		samba_cv_volatile=yes,samba_cv_volatile=no)])
+if test x"$samba_cv_volatile" = x"yes"; then
 	AC_DEFINE(HAVE_VOLATILE, 1, [Whether the C compiler understands volatile])
 fi
 
@@ -272,7 +334,7 @@
 m4_include(timegm.m4)
 m4_include(repdir.m4)
 
-AC_CHECK_FUNCS([syslog printf memset memcpy],,[AC_MSG_ERROR([Required function not found])])
+AC_CHECK_FUNCS([syslog memset memcpy],,[AC_MSG_ERROR([Required function not found])])
 
 echo "LIBREPLACE_BROKEN_CHECKS: END"
 ]) dnl end AC_LIBREPLACE_BROKEN_CHECKS
@@ -292,12 +354,8 @@
 AC_LIBREPLACE_CC_CHECKS
 AC_LIBREPLACE_BROKEN_CHECKS
 AC__LIBREPLACE_ALL_CHECKS_END
-CFLAGS="$CFLAGS -I$libreplacedir"
 ])
 
 m4_include(libreplace_cc.m4)
-m4_include(libreplace_ld.m4)
-m4_include(libreplace_network.m4)
 m4_include(libreplace_macros.m4)
-
-m4_ifndef([AC_USE_SYSTEM_EXTENSIONS],[m4_include(autoconf-2.60.m4)])
+m4_include(autoconf-2.60.m4)

Modified: branches/samba/upstream/source/lib/replace/libreplace_cc.m4
===================================================================
--- branches/samba/upstream/source/lib/replace/libreplace_cc.m4	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/libreplace_cc.m4	2008-06-15 01:55:18 UTC (rev 1953)
@@ -48,7 +48,8 @@
 AC_PROG_INSTALL
 
 AC_ISC_POSIX
-AC_N_DEFINE(_XOPEN_SOURCE_EXTENDED)
+AC_EXTENSION_FLAG(_XOPEN_SOURCE_EXTENDED)
+AC_EXTENSION_FLAG(_OSF_SOURCE)
 
 AC_SYS_LARGEFILE
 
@@ -59,9 +60,9 @@
 	*hpux*)
 		# mmap on HPUX is completely broken...
 		AC_DEFINE(MMAP_BLACKLIST, 1, [Whether MMAP is broken])
-		if test "`uname -r`" = "B.11.00" -o "`uname -r`" = "B.11.11"; then
-			AC_MSG_WARN([Enabling HPUX 11.00/11.11 header bug workaround])
-			CFLAGS="$CFLAGS -Dpread=pread64 -Dpwrite=pwrite64"
+		if test "`uname -r`" = "B.11.11"; then
+			AC_MSG_WARN([Enabling HPUX 11.11 header bug workaround])
+			CFLAGS="$CFLAGS -D_LARGEFILE64_SUPPORT -D__LP64__ -DO_LARGEFILE=04000"
 		fi
 		if test "`uname -r`" = "B.11.23"; then
 			AC_MSG_WARN([Enabling HPUX 11.23 machine/sys/getppdp.h bug workaround])
@@ -76,11 +77,6 @@
 			CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
 		fi
 		;;
-	*osf*)
-		# this brings in socklen_t
-		AC_N_DEFINE(_XOPEN_SOURCE,600)
-		AC_N_DEFINE(_OSF_SOURCE)
-		;;
 	#
 	# VOS may need to have POSIX support and System V compatibility enabled.
 	#
@@ -132,8 +128,7 @@
 AC_CHECK_SIZEOF(size_t)
 AC_CHECK_SIZEOF(ssize_t)
 
-AC_CHECK_TYPE(intptr_t, long long)
-AC_CHECK_TYPE(uintptr_t, unsigned long long)
+AC_CHECK_TYPE(intptr_t, unsigned long long)
 AC_CHECK_TYPE(ptrdiff_t, unsigned long long)
 
 if test x"$ac_cv_type_long_long" != x"yes";then

Deleted: branches/samba/upstream/source/lib/replace/libreplace_ld.m4
===================================================================
--- branches/samba/upstream/source/lib/replace/libreplace_ld.m4	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/libreplace_ld.m4	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,319 +0,0 @@
-#
-# This offers a nice overview how to build shared libraries on all platforms
-#        http://www.fortran-2000.com/ArnaudRecipes/sharedlib.html
-#
-
-AC_DEFUN([AC_LIBREPLACE_STLD],
-[
-	AC_PATH_PROG(PROG_AR, ar)
-
-	STLD=${PROG_AR}
-
-	AC_SUBST(STLD)
-])
-
-AC_DEFUN([AC_LIBREPLACE_STLD_FLAGS],
-[
-	STLD_FLAGS="-rcs"
-	AC_SUBST(STLD_FLAGS)
-])
-
-AC_DEFUN([AC_LD_EXPORT_DYNAMIC],
-[
-saved_LDFLAGS="$LDFLAGS"
-if AC_TRY_COMMAND([${CC-cc} $CFLAGS -Wl,--version 2>&1 | grep "GNU ld" >/dev/null]); then
-	LD_EXPORT_DYNAMIC="-Wl,-export-dynamic"
-else
-	case "$host_os" in
-		hpux* )
-		  LD_EXPORT_DYNAMIC="-Wl,-E"
-		  ;;
-		*)
-		  LD_EXPORT_DYNAMIC=""
-		  ;;
-	  esac
-fi
-AC_SUBST(LD_EXPORT_DYNAMIC)
-LDFLAGS="$saved_LDFLAGS"
-])
-
-AC_DEFUN([AC_LD_PICFLAG],
-[
-case "$host_os" in
-	*linux*) 
-		PICFLAG="-fPIC" 
-		;;
-	*solaris*)
-		if test "${GCC}" = "yes"; then
-			PICFLAG="-fPIC"
-		else
-			PICFLAG="-KPIC"
-		fi
-		;;
-	*sunos*)
-		PICFLAG="-KPIC"   # Is this correct for SunOS
-		;;
-	*netbsd* | *freebsd* | *dragonfly* )  
-		PICFLAG="-fPIC -DPIC"
-		;;
-	*openbsd*)
-		PICFLAG="-fPIC"
-		;;
-	*irix*)
-		if test "${GCC}" = "yes"; then
-			PICFLAG="-fPIC"
-		else 
-			PICFLAG="-KPIC"
-		fi
-		;;
-	*aix*)
-		# as AIX code is always position independent...
-		PICFLAG="-O2"
-		;;
-	*hpux*)
-		if test $ac_cv_prog_cc_Ae = yes; then
-			PICFLAG="+z +ESnolit"
-		elif test "${GCC}" = "yes"; then
-			PICFLAG="-fPIC"
-		fi
-		if test "$host_cpu" = "ia64"; then
-			PICFLAG="+z"
-		fi
-		;;
-	*osf*)
-		PICFLAG="-fPIC"
-		;;
-	*unixware*)
-		PICFLAG="-KPIC"
-		;;
-	*darwin*)
-		PICFLAG="-fno-common"
-		;;
-esac
-AC_SUBST(PICFLAG)
-])
-
-AC_DEFUN([AC_LIBREPLACE_LD_SHLIB_LINKER],
-[
-	LD_SHLIB_LINKER="${CC}"
-
-	case "$host_os" in
-		*irix*)
-			LD_SHLIB_LINKER="${PROG_LD}"
-			;;
-	esac
-
-	AC_SUBST(LD_SHLIB_LINKER)
-])
-
-AC_DEFUN([AC_LIBREPLACE_LD_SHLIB_FLAGS],
-[
-	LD_SHLIB_FLAGS="-shared"
-
-	case "$host_os" in
-		*linux*)
-			LD_SHLIB_FLAGS="-shared -Wl,-Bsymbolic"
-			;;
-		*solaris*)
-			LD_SHLIB_FLAGS="-G"
-			if test "${GCC}" = "no"; then
-				## ${CFLAGS} added for building 64-bit shared 
-				## libs using Sun's Compiler
-				LD_SHLIB_FLAGS="-G \${CFLAGS}"
-			fi
-			;;
-		*sunos*)
-			LD_SHLIB_FLAGS="-G"
-			;;
-		*irix*)
-			LD_SHLIB_FLAGS="-shared"
-			;;
-		*aix*)
-			LD_SHLIB_FLAGS="-Wl,-G,-bexpall,-bbigtoc"
-			;;
-		*hpux*)
-			if test "${GCC}" = "yes"; then
-				LD_SHLIB_FLAGS="-shared"
-			else
-				LD_SHLIB_FLAGS="-b"
-			fi
-			;;
-		*osf*)
-			LD_SHLIB_FLAGS="-shared"
-			;;
-		*darwin*)
-			LD_SHLIB_FLAGS="-dynamiclib -Wl,-search_paths_first"
-			;;
-	esac
-
-	AC_SUBST(LD_SHLIB_FLAGS)
-])
-
-AC_DEFUN([AC_LIBREPLACE_LD_SHLIB_DISALLOW_UNDEF_FLAG],
-[
-	LD_SHLIB_DISALLOW_UNDEF_FLAG=""
-
-	#
-	# TODO: enforce error not only warnings
-	#
-	# NOTE: -Wl,--no-allow-shlib-undefined isn't what we want...
-	#       as it bails out on broken system libraries
-	#
-	case "$host_os" in
-		*osf*)
-			LD_SHLIB_DISALLOW_UNDEF_FLAG="-warning_unresolved"
-			;;
-		*darwin*)
-			LD_SHLIB_DISALLOW_UNDEF_FLAG="-undefined error"
-			;;
-	esac
-
-	AC_SUBST(LD_SHLIB_DISALLOW_UNDEF_FLAG)
-])
-
-AC_DEFUN([AC_LIBREPLACE_SHLD],
-[
-	AC_REQUIRE([AC_LIBREPLACE_LD_SHLIB_LINKER])
-	SHLD="$LD_SHLIB_LINKER"
-	AC_SUBST(SHLD)
-])
-
-AC_DEFUN([AC_LIBREPLACE_SHLD_FLAGS],
-[
-	AC_REQUIRE([AC_LIBREPLACE_LD_SHLIB_FLAGS])
-	AC_REQUIRE([AC_LIBREPLACE_LD_SHLIB_DISALLOW_UNDEF_FLAG])
-	SHLD_FLAGS="$LD_SHLIB_FLAGS $LD_SHLIB_DISALLOW_UNDEF_FLAG"
-	AC_SUBST(SHLD_FLAGS)
-])
-
-AC_DEFUN([AC_LD_SHLIBEXT],
-[
-	SHLIBEXT="so"
-	case "$host_os" in
-		*hpux*)
-			if test "$host_cpu" = "ia64"; then
-				SHLIBEXT="so"
-			else
-				SHLIBEXT="sl"
-			fi
-		;;
-		*darwin*)
-			SHLIBEXT="dylib"
-		;;
-	esac
-	AC_SUBST(SHLIBEXT)
-])
-
-AC_DEFUN([AC_LD_SONAMEFLAG],
-[
-	AC_SUBST(SONAMEFLAG)
-	SONAMEFLAG=""
-	case "$host_os" in 
-		*linux*)
-			SONAMEFLAG="-Wl,-soname="
-			;;
-		*solaris*)
-			SONAMEFLAG="-h "
-			if test "${GCC}" = "yes"; then
-				SONAMEFLAG="-Wl,-soname="
-			fi
-			;;
-		*sunos*)
-			SONAMEFLAG="-Wl,-h,"
-			;;
-		*netbsd* | *freebsd* | *dragonfly* )
-			SONAMEFLAG="-Wl,-soname,"
-			;;
-		*openbsd*)
-			SONAMEFLAG="-Wl,-soname,"
-			;;
-		*irix*)
-			SONAMEFLAG="-Wl,-soname,"
-			;;
-		*hpux*)
-			SONAMEFLAG="-Wl,+h,"
-			;;
-		*osf*)
-			SONAMEFLAG="-Wl,-soname,"
-			;;
-		*unixware*)
-			SONAMEFLAG="-Wl,-soname,"
-			;;
-		*darwin*)
-			SONAMEFLAG="#"
-			;;
-		*aix*)
-			# Not supported
-			SONAMEFLAG="#"
-			;;
-		esac
-])
-
-AC_DEFUN([AC_LIBREPLACE_MDLD],
-[
-	AC_REQUIRE([AC_LIBREPLACE_LD_SHLIB_LINKER])
-	MDLD="$LD_SHLIB_LINKER"
-	AC_SUBST(MDLD)
-])
-
-AC_DEFUN([AC_LIBREPLACE_LD_SHLIB_ALLOW_UNDEF_FLAG],
-[
-	LD_ALLOW_SHLIB_UNDEF_FLAG=""
-
-	case "$host_os" in
-		*linux*)
-			LD_SHLIB_ALLOW_UNDEF_FLAG="-Wl,--allow-shlib-undefined"
-			;;
-		*osf*)
-			LD_SHLIB_ALLOW_UNDEF_FLAG="-Wl,-expect_unresolved,\"*\""
-			;;
-		*darwin*)
-			LD_SHLIB_ALLOW_UNDEF_FLAG="-undefined dynamic_lookup"
-			;;
-		*aix*)
-			LD_SHLIB_ALLOW_UNDEF_FLAG="--Wl,-bnoentry"
-			;;
-	esac
-
-	AC_SUBST(LD_SHLIB_ALLOW_UNDEF_FLAG)
-])
-
-AC_DEFUN([AC_LIBREPLACE_MDLD_FLAGS],
-[
-	AC_REQUIRE([AC_LIBREPLACE_LD_SHLIB_FLAGS])
-	AC_REQUIRE([AC_LIBREPLACE_LD_SHLIB_ALLOW_UNDEF_FLAG])
-	MDLD_FLAGS="$LD_SHLIB_FLAGS $LD_SHLIB_ALLOW_UNDEF_FLAG"
-	AC_SUBST(MDLD_FLAGS)
-])
-
-AC_DEFUN([AC_LIBREPLACE_RUNTIME_LIB_PATH_VAR],
-[
-	case "$host_os" in
-		*linux*)
-			LIB_PATH_VAR=LD_LIBRARY_PATH
-		;;
-		*netbsd*)
-			LIB_PATH_VAR=LD_LIBRARY_PATH
-		;;
-		*solaris*)
-			LIB_PATH_VAR=LD_LIBRARY_PATH
-		;;
-		*hpux*)
-			LIB_PATH_VAR=SHLIB_PATH
-		;;
-		*osf*)
-			LIB_PATH_VAR=LD_LIBRARY_PATH
-		;;
-		*aix*)
-			LIB_PATH_VAR=LIB_PATH
-			;;
-		*irix*)
-			LIB_PATH_VAR=LD_LIBRARY_PATH
-			;;
-		*darwin*)
-			LIB_PATH_VAR=DYLD_LIBRARY_PATH
-			;;
-	esac
-
-	AC_SUBST(LIB_PATH_VAR)
-])

Modified: branches/samba/upstream/source/lib/replace/libreplace_macros.m4
===================================================================
--- branches/samba/upstream/source/lib/replace/libreplace_macros.m4	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/libreplace_macros.m4	2008-06-15 01:55:18 UTC (rev 1953)
@@ -87,6 +87,19 @@
 rm -f conftest*
 ])])
 
+AC_DEFUN([AC_EXTENSION_FLAG],
+[
+  cat >>confdefs.h <<\EOF
+#ifndef $1
+# define $1 1
+#endif
+EOF
+AH_VERBATIM([$1], [#ifndef $1
+# define $1 1
+#endif])
+])
+
+
 dnl see if a declaration exists for a function or variable
 dnl defines HAVE_function_DECL if it exists
 dnl AC_HAVE_DECL(var, includes)
@@ -235,18 +248,11 @@
 
 dnl Define an AC_DEFINE with ifndef guard.
 dnl AC_N_DEFINE(VARIABLE [, VALUE])
-AC_DEFUN([AC_N_DEFINE],
-[
-AH_VERBATIM([$1], [
-#ifndef $1
-# undef $1
-#endif
-])
-
- cat >>confdefs.h <<\EOF
-#ifndef $1
-[#define] $1 m4_if($#, 1, 1, [$2])
-#endif
+define(AC_N_DEFINE,
+[cat >> confdefs.h <<\EOF
+[#ifndef] $1
+[#define] $1 ifelse($#, 2, [$2], $#, 3, [$2], 1)
+[#endif]
 EOF
 ])
 
@@ -285,14 +291,14 @@
 dnl AC_VERIFY_C_PROTOTYPE(prototype,functionbody,[IF-TRUE].[IF-FALSE],[extraheaders])
 AC_DEFUN(AC_VERIFY_C_PROTOTYPE,
 [AC_CACHE_CHECK([for prototype $1], AS_TR_SH([ac_cv_c_prototype_$1]),
-	AC_COMPILE_IFELSE([AC_LANG_SOURCE([
+	AC_COMPILE_IFELSE([
 		AC_INCLUDES_DEFAULT
 		$5
 		$1
 		{
 			$2
 		}
-	])],[
+	],[
 		AS_TR_SH([ac_cv_c_prototype_$1])=yes
 	],[
 		AS_TR_SH([ac_cv_c_prototype_$1])=no
@@ -308,25 +314,4 @@
 	)
 ])
 
-dnl AC_HAVE_TYPE(TYPE,INCLUDES)
-AC_DEFUN([AC_HAVE_TYPE], [
-AC_REQUIRE([AC_HEADER_STDC])
-cv=`echo "$1" | sed 'y%./+- %__p__%'`
-AC_MSG_CHECKING(for $1)
-AC_CACHE_VAL([ac_cv_type_$cv],
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-AC_INCLUDES_DEFAULT
-$2]],
-[[$1 foo;]])],
-[eval "ac_cv_type_$cv=yes"],
-[eval "ac_cv_type_$cv=no"]))dnl
-ac_foo=`eval echo \\$ac_cv_type_$cv`
-AC_MSG_RESULT($ac_foo)
-if test "$ac_foo" = yes; then
-  ac_tr_hdr=HAVE_`echo $1 | sed 'y%abcdefghijklmnopqrstuvwxyz./- %ABCDEFGHIJKLMNOPQRSTUVWXYZ____%'`
-if false; then
-	AC_CHECK_TYPES($1)
-fi
-  AC_DEFINE_UNQUOTED($ac_tr_hdr, 1, [Define if you have type `$1'])
-fi
-])
+

Deleted: branches/samba/upstream/source/lib/replace/libreplace_network.m4
===================================================================
--- branches/samba/upstream/source/lib/replace/libreplace_network.m4	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/libreplace_network.m4	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,377 +0,0 @@
-AC_DEFUN_ONCE(AC_LIBREPLACE_NETWORK_CHECKS,
-[
-echo "LIBREPLACE_NETWORK_CHECKS: START"
-
-AC_DEFINE(LIBREPLACE_NETWORK_CHECKS, 1, [LIBREPLACE_NETWORK_CHECKS were used])
-LIBREPLACE_NETWORK_OBJS=""
-LIBREPLACE_NETWORK_LIBS=""
-
-AC_CHECK_HEADERS(sys/socket.h netinet/in.h netdb.h arpa/inet.h)
-AC_CHECK_HEADERS(netinet/ip.h netinet/tcp.h netinet/in_systm.h netinet/in_ip.h)
-AC_CHECK_HEADERS(sys/sockio.h sys/un.h)
-
-dnl we need to check that net/if.h really can be used, to cope with hpux
-dnl where including it always fails
-AC_CACHE_CHECK([for usable net/if.h],libreplace_cv_USABLE_NET_IF_H,[
-	AC_COMPILE_IFELSE([AC_LANG_SOURCE([
-		AC_INCLUDES_DEFAULT
-		#if HAVE_SYS_SOCKET_H
-		# include <sys/socket.h>
-		#endif
-		#include <net/if.h>
-		int main(void) {return 0;}])],
-		[libreplace_cv_USABLE_NET_IF_H=yes],
-		[libreplace_cv_USABLE_NET_IF_H=no]
-	)
-])
-if test x"$libreplace_cv_USABLE_NET_IF_H" = x"yes";then
-	AC_DEFINE(HAVE_NET_IF_H, 1, usability of net/if.h)
-fi
-
-AC_HAVE_TYPE([socklen_t],[#include <sys/socket.h>])
-AC_HAVE_TYPE([sa_family_t],[#include <sys/socket.h>])
-AC_HAVE_TYPE([struct addrinfo], [#include <netdb.h>])
-AC_HAVE_TYPE([struct sockaddr], [#include <sys/socket.h>])
-AC_HAVE_TYPE([struct sockaddr_storage], [
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-])
-AC_HAVE_TYPE([struct sockaddr_in6], [
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-])
-
-if test x"$ac_cv_type_struct_sockaddr_storage" = x"yes"; then
-AC_CHECK_MEMBER(struct sockaddr_storage.ss_family,
-                AC_DEFINE(HAVE_SS_FAMILY, 1, [Defined if struct sockaddr_storage has ss_family field]),,
-                [
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-		])
-
-if test x"$ac_cv_member_struct_sockaddr_storage_ss_family" != x"yes"; then
-AC_CHECK_MEMBER(struct sockaddr_storage.__ss_family,
-                AC_DEFINE(HAVE___SS_FAMILY, 1, [Defined if struct sockaddr_storage has __ss_family field]),,
-                [
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-		])
-fi
-fi
-
-AC_CACHE_CHECK([for sin_len in sock],libreplace_cv_HAVE_SOCK_SIN_LEN,[
-	AC_TRY_COMPILE(
-		[
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-		],[
-struct sockaddr_in sock; sock.sin_len = sizeof(sock);
-		],[
-		libreplace_cv_HAVE_SOCK_SIN_LEN=yes
-		],[
-		libreplace_cv_HAVE_SOCK_SIN_LEN=no
-		])
-])
-if test x"$libreplace_cv_HAVE_SOCK_SIN_LEN" = x"yes"; then
-	AC_DEFINE(HAVE_SOCK_SIN_LEN,1,[Whether the sockaddr_in struct has a sin_len property])
-fi
-
-############################################
-# check for unix domain sockets
-AC_CACHE_CHECK([for unix domain sockets],libreplace_cv_HAVE_UNIXSOCKET,[
-	AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-		],[
-struct sockaddr_un sunaddr;
-sunaddr.sun_family = AF_UNIX;
-		],[
-		libreplace_cv_HAVE_UNIXSOCKET=yes
-		],[
-		libreplace_cv_HAVE_UNIXSOCKET=no
-		])
-])
-if test x"$libreplace_cv_HAVE_UNIXSOCKET" = x"yes"; then
-	AC_DEFINE(HAVE_UNIXSOCKET,1,[If we need to build with unixscoket support])
-fi
-
-dnl The following test is roughl taken from the cvs sources.
-dnl
-dnl If we can't find connect, try looking in -lsocket, -lnsl, and -linet.
-dnl The Irix 5 libc.so has connect and gethostbyname, but Irix 5 also has
-dnl libsocket.so which has a bad implementation of gethostbyname (it
-dnl only looks in /etc/hosts), so we only look for -lsocket if we need
-dnl it.
-AC_CHECK_FUNCS(connect)
-if test x"$ac_cv_func_connect" = x"no"; then
-	AC_CHECK_LIB_EXT(nsl_s, LIBREPLACE_NETWORK_LIBS, connect)
-	AC_CHECK_LIB_EXT(nsl, LIBREPLACE_NETWORK_LIBS, connect)
-	AC_CHECK_LIB_EXT(socket, LIBREPLACE_NETWORK_LIBS, connect)
-	AC_CHECK_LIB_EXT(inet, LIBREPLACE_NETWORK_LIBS, connect)
-	dnl We can't just call AC_CHECK_FUNCS(connect) here,
-	dnl because the value has been cached.
-	if test x"$ac_cv_lib_ext_nsl_s_connect" = x"yes" ||
-		test x"$ac_cv_lib_ext_nsl_connect" = x"yes" ||
-		test x"$ac_cv_lib_ext_socket_connect" = x"yes" ||
-		test x"$ac_cv_lib_ext_inet_connect" = x"yes"
-	then
-		AC_DEFINE(HAVE_CONNECT,1,[Whether the system has connect()])
-	fi
-fi
-
-AC_CHECK_FUNCS(gethostbyname)
-if test x"$ac_cv_func_gethostbyname" = x"no"; then
-	AC_CHECK_LIB_EXT(nsl_s, LIBREPLACE_NETWORK_LIBS, gethostbyname)
-	AC_CHECK_LIB_EXT(nsl, LIBREPLACE_NETWORK_LIBS, gethostbyname)
-	AC_CHECK_LIB_EXT(socket, LIBREPLACE_NETWORK_LIBS, gethostbyname)
-	dnl We can't just call AC_CHECK_FUNCS(gethostbyname) here,
-	dnl because the value has been cached.
-	if test x"$ac_cv_lib_ext_nsl_s_gethostbyname" = x"yes" ||
-		test x"$ac_cv_lib_ext_nsl_gethostbyname" = x"yes" ||
-		test x"$ac_cv_lib_ext_socket_gethostbyname" = x"yes"
-	then
-		AC_DEFINE(HAVE_GETHOSTBYNAME,1,
-			  [Whether the system has gethostbyname()])
-	fi
-fi
-
-dnl HP-UX has if_nametoindex in -lipv6
-AC_CHECK_FUNCS(if_nametoindex)
-if test x"$ac_cv_func_if_nametoindex" = x"no"; then
-	AC_CHECK_LIB_EXT(ipv6, LIBREPLACE_NETWORK_LIBS, if_nametoindex)
-	dnl We can't just call AC_CHECK_FUNCS(if_nametoindex) here,
-	dnl because the value has been cached.
-	if test x"$ac_cv_lib_ext_ipv6_if_nametoindex" = x"yes"
-	then
-		AC_DEFINE(HAVE_IF_NAMETOINDEX, 1,
-			  [Whether the system has if_nametoindex()])
-	fi
-fi
-
-# The following tests need LIBS="${LIBREPLACE_NETWORK_LIBS}"
-old_LIBS=$LIBS
-LIBS="${LIBREPLACE_NETWORK_LIBS}"
-SAVE_CPPFLAGS="$CPPFLAGS"
-CPPFLAGS="$CPPFLAGS -I$libreplacedir"
-
-AC_CHECK_FUNCS(socketpair,[],[LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} socketpair.o"])
-
-AC_CACHE_CHECK([for broken inet_ntoa],libreplace_cv_REPLACE_INET_NTOA,[
-AC_TRY_RUN([
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-main() { struct in_addr ip; ip.s_addr = 0x12345678;
-if (strcmp(inet_ntoa(ip),"18.52.86.120") &&
-    strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); }
-exit(1);}],
-           libreplace_cv_REPLACE_INET_NTOA=yes,libreplace_cv_REPLACE_INET_NTOA=no,libreplace_cv_REPLACE_INET_NTOA=cross)])
-
-AC_CHECK_FUNCS(inet_ntoa,[],[libreplace_cv_REPLACE_INET_NTOA=yes])
-if test x"$libreplace_cv_REPLACE_INET_NTOA" = x"yes"; then
-    AC_DEFINE(REPLACE_INET_NTOA,1,[Whether inet_ntoa should be replaced])
-    LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} inet_ntoa.o"
-fi
-
-AC_CHECK_FUNCS(inet_aton,[],[LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} inet_aton.o"])
-
-AC_CHECK_FUNCS(inet_ntop,[],[LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} inet_ntop.o"])
-
-AC_CHECK_FUNCS(inet_pton,[],[LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} inet_pton.o"])
-
-dnl test for getaddrinfo/getnameinfo
-AC_CACHE_CHECK([for getaddrinfo],libreplace_cv_HAVE_GETADDRINFO,[
-AC_TRY_LINK([
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-#include <sys/socket.h>
-#include <netdb.h>],
-[
-struct sockaddr sa;
-struct addrinfo *ai = NULL;
-int ret = getaddrinfo(NULL, NULL, NULL, &ai);
-if (ret != 0) {
-	const char *es = gai_strerror(ret);
-}
-freeaddrinfo(ai);
-ret = getnameinfo(&sa, sizeof(sa),
-		NULL, 0,
-		NULL, 0, 0);
-
-],
-libreplace_cv_HAVE_GETADDRINFO=yes,libreplace_cv_HAVE_GETADDRINFO=no)])
-if test x"$libreplace_cv_HAVE_GETADDRINFO" = x"yes"; then
-	AC_DEFINE(HAVE_GETADDRINFO,1,[Whether the system has getaddrinfo])
-	AC_DEFINE(HAVE_GETNAMEINFO,1,[Whether the system has getnameinfo])
-	AC_DEFINE(HAVE_FREEADDRINFO,1,[Whether the system has freeaddrinfo])
-	AC_DEFINE(HAVE_GAI_STRERROR,1,[Whether the system has gai_strerror])
-else
-	LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} getaddrinfo.o"
-fi
-
-AC_CHECK_HEADERS([ifaddrs.h])
-
-dnl Used when getifaddrs is not available
-AC_CHECK_MEMBERS([struct sockaddr.sa_len], 
-	 [AC_DEFINE(HAVE_SOCKADDR_SA_LEN, 1, [Whether struct sockaddr has a sa_len member])],
-	 [],
-	 [#include <sys/socket.h>])
-
-dnl test for getifaddrs and freeifaddrs
-AC_CACHE_CHECK([for getifaddrs and freeifaddrs],libreplace_cv_HAVE_GETIFADDRS,[
-AC_TRY_COMPILE([
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <ifaddrs.h>
-#include <netdb.h>],
-[
-struct ifaddrs *ifp = NULL;
-int ret = getifaddrs (&ifp);
-freeifaddrs(ifp);
-],
-libreplace_cv_HAVE_GETIFADDRS=yes,libreplace_cv_HAVE_GETIFADDRS=no)])
-if test x"$libreplace_cv_HAVE_GETIFADDRS" = x"yes"; then
-    AC_DEFINE(HAVE_GETIFADDRS,1,[Whether the system has getifaddrs])
-    AC_DEFINE(HAVE_FREEIFADDRS,1,[Whether the system has freeifaddrs])
-	AC_DEFINE(HAVE_STRUCT_IFADDRS,1,[Whether struct ifaddrs is available])
-fi
-
-##################
-# look for a method of finding the list of network interfaces
-iface=no;
-AC_CACHE_CHECK([for iface getifaddrs],libreplace_cv_HAVE_IFACE_GETIFADDRS,[
-AC_TRY_RUN([
-#define HAVE_IFACE_GETIFADDRS 1
-#define NO_CONFIG_H 1
-#define AUTOCONF_TEST 1
-#define SOCKET_WRAPPER_NOT_REPLACE
-#include "$libreplacedir/replace.c"
-#include "$libreplacedir/inet_ntop.c"
-#include "$libreplacedir/snprintf.c"
-#include "$libreplacedir/getifaddrs.c"
-#define getifaddrs_test main
-#include "$libreplacedir/test/getifaddrs.c"],
-           libreplace_cv_HAVE_IFACE_GETIFADDRS=yes,libreplace_cv_HAVE_IFACE_GETIFADDRS=no,libreplace_cv_HAVE_IFACE_GETIFADDRS=cross)])
-if test x"$libreplace_cv_HAVE_IFACE_GETIFADDRS" = x"yes"; then
-    iface=yes;AC_DEFINE(HAVE_IFACE_GETIFADDRS,1,[Whether iface getifaddrs is available])
-else
-	LIBREPLACE_NETWORK_OBJS="${LIBREPLACE_NETWORK_OBJS} getifaddrs.o"
-fi
-
-
-if test $iface = no; then
-AC_CACHE_CHECK([for iface AIX],libreplace_cv_HAVE_IFACE_AIX,[
-AC_TRY_RUN([
-#define HAVE_IFACE_AIX 1
-#define NO_CONFIG_H 1
-#define AUTOCONF_TEST 1
-#undef _XOPEN_SOURCE_EXTENDED
-#define SOCKET_WRAPPER_NOT_REPLACE
-#include "$libreplacedir/replace.c"
-#include "$libreplacedir/inet_ntop.c"
-#include "$libreplacedir/snprintf.c"
-#include "$libreplacedir/getifaddrs.c"
-#define getifaddrs_test main
-#include "$libreplacedir/test/getifaddrs.c"],
-           libreplace_cv_HAVE_IFACE_AIX=yes,libreplace_cv_HAVE_IFACE_AIX=no,libreplace_cv_HAVE_IFACE_AIX=cross)])
-if test x"$libreplace_cv_HAVE_IFACE_AIX" = x"yes"; then
-    iface=yes;AC_DEFINE(HAVE_IFACE_AIX,1,[Whether iface AIX is available])
-fi
-fi
-
-
-if test $iface = no; then
-AC_CACHE_CHECK([for iface ifconf],libreplace_cv_HAVE_IFACE_IFCONF,[
-AC_TRY_RUN([
-#define HAVE_IFACE_IFCONF 1
-#define NO_CONFIG_H 1
-#define AUTOCONF_TEST 1
-#define SOCKET_WRAPPER_NOT_REPLACE
-#include "$libreplacedir/replace.c"
-#include "$libreplacedir/inet_ntop.c"
-#include "$libreplacedir/snprintf.c"
-#include "$libreplacedir/getifaddrs.c"
-#define getifaddrs_test main
-#include "$libreplacedir/test/getifaddrs.c"],
-           libreplace_cv_HAVE_IFACE_IFCONF=yes,libreplace_cv_HAVE_IFACE_IFCONF=no,libreplace_cv_HAVE_IFACE_IFCONF=cross)])
-if test x"$libreplace_cv_HAVE_IFACE_IFCONF" = x"yes"; then
-    iface=yes;AC_DEFINE(HAVE_IFACE_IFCONF,1,[Whether iface ifconf is available])
-fi
-fi
-
-if test $iface = no; then
-AC_CACHE_CHECK([for iface ifreq],libreplace_cv_HAVE_IFACE_IFREQ,[
-AC_TRY_RUN([
-#define HAVE_IFACE_IFREQ 1
-#define NO_CONFIG_H 1
-#define AUTOCONF_TEST 1
-#define SOCKET_WRAPPER_NOT_REPLACE
-#include "$libreplacedir/replace.c"
-#include "$libreplacedir/inet_ntop.c"
-#include "$libreplacedir/snprintf.c"
-#include "$libreplacedir/getifaddrs.c"
-#define getifaddrs_test main
-#include "$libreplacedir/test/getifaddrs.c"],
-           libreplace_cv_HAVE_IFACE_IFREQ=yes,libreplace_cv_HAVE_IFACE_IFREQ=no,libreplace_cv_HAVE_IFACE_IFREQ=cross)])
-if test x"$libreplace_cv_HAVE_IFACE_IFREQ" = x"yes"; then
-    iface=yes;AC_DEFINE(HAVE_IFACE_IFREQ,1,[Whether iface ifreq is available])
-fi
-fi
-
-dnl test for ipv6
-AC_CACHE_CHECK([for ipv6 support],libreplace_cv_HAVE_IPV6,[
-	AC_TRY_LINK([
-#include <stdlib.h> /* for NULL */
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <netdb.h>
-		],
-		[
-struct sockaddr_storage sa_store;
-struct addrinfo *ai = NULL;
-struct in6_addr in6addr;
-int idx = if_nametoindex("iface1");
-int s = socket(AF_INET6, SOCK_STREAM, 0);
-int ret = getaddrinfo(NULL, NULL, NULL, &ai);
-if (ret != 0) {
-	const char *es = gai_strerror(ret);
-}
-freeaddrinfo(ai);
-		],[
-		libreplace_cv_HAVE_IPV6=yes
-		],[
-		libreplace_cv_HAVE_IPV6=no
-		])
-])
-if test x"$libreplace_cv_HAVE_IPV6" = x"yes"; then
-    AC_DEFINE(HAVE_IPV6,1,[Whether the system has IPv6 support])
-fi
-
-LIBS=$old_LIBS
-CPPFLAGS="$SAVE_CPPFLAGS"
-
-LIBREPLACEOBJ="${LIBREPLACEOBJ} ${LIBREPLACE_NETWORK_OBJS}"
-
-echo "LIBREPLACE_NETWORK_CHECKS: END"
-]) dnl end AC_LIBREPLACE_NETWORK_CHECKS

Modified: branches/samba/upstream/source/lib/replace/repdir_getdents.c
===================================================================
--- branches/samba/upstream/source/lib/replace/repdir_getdents.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/repdir_getdents.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,7 +10,7 @@
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
 
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -18,7 +18,8 @@
    Lesser General Public License for more details.
 
    You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
+   License along with this library; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 /*
   a replacement for opendir/readdir/telldir/seekdir/closedir for BSD systems

Modified: branches/samba/upstream/source/lib/replace/repdir_getdirentries.c
===================================================================
--- branches/samba/upstream/source/lib/replace/repdir_getdirentries.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/repdir_getdirentries.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,7 +10,7 @@
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
 
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -18,7 +18,8 @@
    Lesser General Public License for more details.
 
    You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
+   License along with this library; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 /*
   a replacement for opendir/readdir/telldir/seekdir/closedir for BSD

Modified: branches/samba/upstream/source/lib/replace/replace.c
===================================================================
--- branches/samba/upstream/source/lib/replace/replace.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/replace.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,7 +10,7 @@
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
 
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -18,7 +18,8 @@
    Lesser General Public License for more details.
 
    You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
+   License along with this library; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
 #include "replace.h"
@@ -27,6 +28,7 @@
 #include "system/time.h"
 #include "system/passwd.h"
 #include "system/syslog.h"
+#include "system/network.h"
 #include "system/locale.h"
 #include "system/wait.h"
 
@@ -217,7 +219,7 @@
 #ifndef HAVE_MEMMOVE
 /*******************************************************************
 safely copies memory, ensuring no overlap problems.
-this is only used if the machine does not have its own memmove().
+this is only used if the machine does not have it's own memmove().
 this is not the fastest algorithm in town, but it will do for our
 needs.
 ********************************************************************/
@@ -294,6 +296,20 @@
 }
 #endif /* HAVE_STRDUP */
 
+#ifndef WITH_PTHREADS
+/* REWRITE: not thread safe */
+#ifdef REPLACE_INET_NTOA
+char *rep_inet_ntoa(struct in_addr ip)
+{
+	uint8_t *p = (uint8_t *)&ip.s_addr;
+	static char buf[18];
+	slprintf(buf, 17, "%d.%d.%d.%d", 
+		 (int)p[0], (int)p[1], (int)p[2], (int)p[3]);
+	return buf;
+}
+#endif /* REPLACE_INET_NTOA */
+#endif
+
 #ifndef HAVE_SETLINEBUF
 void rep_setlinebuf(FILE *stream)
 {
@@ -422,10 +438,6 @@
 }
 #endif
 
-/*****************************************************************
- Watch out: this is not thread safe.
-*****************************************************************/
-
 #ifndef HAVE_PREAD
 ssize_t rep_pread(int __fd, void *__buf, size_t __nbytes, off_t __offset)
 {
@@ -436,10 +448,6 @@
 }
 #endif
 
-/*****************************************************************
- Watch out: this is not thread safe.
-*****************************************************************/
-
 #ifndef HAVE_PWRITE
 ssize_t rep_pwrite(int __fd, const void *__buf, size_t __nbytes, off_t __offset)
 {
@@ -458,7 +466,7 @@
 	for (s=haystack;*s;s++) {
 		if (toupper(*needle) == toupper(*s) &&
 		    strncasecmp(s, needle, nlen) == 0) {
-			return (char *)((uintptr_t)s);
+			return (char *)((intptr_t)s);
 		}
 	}
 	return NULL;
@@ -560,24 +568,20 @@
 {
 	extern char **environ;
 	size_t len = strlen(name);
-	size_t i, count;
+	size_t i; 
+	int found = 0;
 
-	if (environ == NULL || getenv(name) == NULL) {
-		return 0;
-	}
+	for (i=0; (environ && environ[i]); i++) {
+		if (found) {
+			environ[i-1] = environ[i];
+			continue;
+		}
 
-	for (i=0;environ[i];i++) /* noop */ ;
-
-	count=i;
-	
-	for (i=0;i<count;) {
 		if (strncmp(environ[i], name, len) == 0 && environ[i][len] == '=') {
-			/* note: we do _not_ free the old variable here. It is unsafe to 
-			   do so, as the pointer may not have come from malloc */
-			memmove(&environ[i], &environ[i+1], (count-i)*sizeof(char *));
-			count--;
-		} else {
-			i++;
+			free(environ[i]);
+			environ[i] = NULL;
+			found = 1;
+			continue;
 		}
 	}
 
@@ -585,29 +589,24 @@
 }
 #endif
 
-#ifndef HAVE_UTIME
-int rep_utime(const char *filename, const struct utimbuf *buf)
+#ifndef HAVE_SOCKETPAIR
+int rep_socketpair(int d, int type, int protocol, int sv[2])
 {
-	errno = ENOSYS;
-	return -1;
-}
-#endif
+	if (d != AF_UNIX) {
+		errno = EAFNOSUPPORT;
+		return -1;
+	}
 
-#ifndef HAVE_UTIMES
-int rep_utimes(const char *filename, const struct timeval tv[2])
-{
-	struct utimbuf u;
-
-	u.actime = tv[0].tv_sec;
-	if (tv[0].tv_usec > 500000) {
-		u.actime += 1;
+	if (protocol != 0) {
+		errno = EPROTONOSUPPORT;
+		return -1;
 	}
 
-	u.modtime = tv[1].tv_sec;
-	if (tv[1].tv_usec > 500000) {
-		u.modtime += 1;
+	if (type != SOCK_STREAM) {
+		errno = EOPNOTSUPP;
+		return -1;
 	}
 
-	return utime(filename, &u);
+	return pipe(sv);
 }
 #endif

Modified: branches/samba/upstream/source/lib/replace/replace.h
===================================================================
--- branches/samba/upstream/source/lib/replace/replace.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/replace.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,20 +1,19 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
 
    macros to go along with the lib/replace/ portability layer code
 
    Copyright (C) Andrew Tridgell 2005
    Copyright (C) Jelmer Vernooij 2006
-   Copyright (C) Jeremy Allison 2007.
 
      ** NOTE! The following LGPL license applies to the replace
      ** library. This does NOT imply that all of Samba is released
      ** under the LGPL
-
+   
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
 
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -22,7 +21,8 @@
    Lesser General Public License for more details.
 
    You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
+   License along with this library; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
 #ifndef _LIBREPLACE_REPLACE_H
@@ -45,7 +45,14 @@
 #include "win32_replace.h"
 #endif
 
+#ifdef __COMPAR_FN_T
+#define QSORT_CAST (__compar_fn_t)
+#endif
 
+#ifndef QSORT_CAST
+#define QSORT_CAST (int (*)(const void *, const void *))
+#endif
+
 #ifdef HAVE_STDINT_H
 #include <stdint.h>
 /* force off HAVE_INTTYPES_H so that roken doesn't try to include both,
@@ -72,6 +79,33 @@
 #include <stddef.h>
 #endif
 
+#if !defined(HAVE_VOLATILE)
+#define volatile
+#endif
+
+/**
+  this is a warning hack. The idea is to use this everywhere that we
+  get the "discarding const" warning from gcc. That doesn't actually
+  fix the problem of course, but it means that when we do get to
+  cleaning them up we can do it by searching the code for
+  discard_const.
+
+  It also means that other error types aren't as swamped by the noise
+  of hundreds of const warnings, so we are more likely to notice when
+  we get new errors.
+
+  Please only add more uses of this macro when you find it
+  _really_ hard to fix const warnings. Our aim is to eventually use
+  this function in only a very few places.
+
+  Also, please call this via the discard_const_p() macro interface, as that
+  makes the return type safe.
+*/
+#define discard_const(ptr) ((void *)((intptr_t)(ptr)))
+
+/** Type-safe version of discard_const */
+#define discard_const_p(type, ptr) ((type *)discard_const(ptr))
+
 #ifndef HAVE_STRERROR
 extern char *sys_errlist[];
 #define strerror(i) sys_errlist[i]
@@ -91,26 +125,21 @@
 void *rep_memmove(void *dest,const void *src,int size);
 #endif
 
+#if !defined(HAVE_MKTIME) || !defined(HAVE_TIMEGM)
+#include "system/time.h"
+#endif
+
 #ifndef HAVE_MKTIME
 #define mktime rep_mktime
-/* prototype is in "system/time.h" */
+time_t rep_mktime(struct tm *t);
 #endif
 
 #ifndef HAVE_TIMEGM
+struct tm;
 #define timegm rep_timegm
-/* prototype is in "system/time.h" */
+time_t rep_timegm(struct tm *tm);
 #endif
 
-#ifndef HAVE_UTIME
-#define utime rep_utime
-/* prototype is in "system/time.h" */
-#endif
-
-#ifndef HAVE_UTIMES
-#define utimes rep_utimes
-/* prototype is in "system/time.h" */
-#endif
-
 #ifndef HAVE_STRLCPY
 #define strlcpy rep_strlcpy
 size_t rep_strlcpy(char *d, const char *s, size_t bufsize);
@@ -144,7 +173,7 @@
 
 #ifndef HAVE_UNSETENV
 #define unsetenv rep_unsetenv
-int rep_unsetenv(const char *name);
+int rep_unsetenv(const char *name); 
 #endif
 
 #ifndef HAVE_SETEUID
@@ -168,7 +197,7 @@
 #endif
 
 #ifndef HAVE_STRTOK_R
-#define strtok_r rep_strtok_r
+#define strtok_r rep_strtok_r 
 char *rep_strtok_r(char *s, const char *delim, char **save_ptr);
 #endif
 
@@ -203,12 +232,8 @@
 
 #ifndef HAVE_DLOPEN
 #define dlopen rep_dlopen
-#ifdef DLOPEN_TAKES_UNSIGNED_FLAGS
-void *rep_dlopen(const char *name, unsigned int flags);
-#else
 void *rep_dlopen(const char *name, int flags);
 #endif
-#endif
 
 #ifndef HAVE_DLSYM
 #define dlsym rep_dlsym
@@ -222,7 +247,7 @@
 
 #ifndef HAVE_SOCKETPAIR
 #define socketpair rep_socketpair
-/* prototype is in system/network.h */
+int rep_socketpair(int d, int type, int protocol, int sv[2]);
 #endif
 
 #ifndef PRINTF_ATTRIBUTE
@@ -237,14 +262,6 @@
 #endif
 #endif
 
-#ifndef _DEPRECATED_
-#if (__GNUC__ >= 3) && (__GNUC_MINOR__ >= 1 )
-#define _DEPRECATED_ __attribute__ ((deprecated))
-#else
-#define _DEPRECATED_
-#endif
-#endif
-
 #ifndef HAVE_VASPRINTF
 #define vasprintf rep_vasprintf
 int rep_vasprintf(char **ptr, const char *format, va_list ap) PRINTF_ATTRIBUTE(2,0);
@@ -308,12 +325,6 @@
 #ifndef RTLD_LAZY
 #define RTLD_LAZY 0
 #endif
-#ifndef RTLD_NOW
-#define RTLD_NOW 0
-#endif
-#ifndef RTLD_GLOBAL
-#define RTLD_GLOBAL 0
-#endif
 
 #ifndef HAVE_SECURE_MKSTEMP
 #define mkstemp(path) rep_mkstemp(path)
@@ -325,64 +336,10 @@
 char *rep_mkdtemp(char *template);
 #endif
 
-#ifndef HAVE_PREAD
-#define pread rep_pread
-ssize_t rep_pread(int __fd, void *__buf, size_t __nbytes, off_t __offset);
-#endif
-
-#ifndef HAVE_PWRITE
-#define pwrite rep_pwrite
-ssize_t rep_pwrite(int __fd, const void *__buf, size_t __nbytes, off_t __offset);
-#endif
-
-#if !defined(HAVE_INET_NTOA) || defined(REPLACE_INET_NTOA)
-#define inet_ntoa rep_inet_ntoa
-/* prototype is in "system/network.h" */
-#endif
-
-#ifndef HAVE_INET_PTON
-#define inet_pton rep_inet_pton
-/* prototype is in "system/network.h" */
-#endif
-
-#ifndef HAVE_INET_NTOP
-#define inet_ntop rep_inet_ntop
-/* prototype is in "system/network.h" */
-#endif
-
-#ifndef HAVE_INET_ATON
-#define inet_aton rep_inet_aton
-/* prototype is in "system/network.h" */
-#endif
-
-#ifndef HAVE_CONNECT
-#define connect rep_connect
-/* prototype is in "system/network.h" */
-#endif
-
-#ifndef HAVE_GETHOSTBYNAME
-#define gethostbyname rep_gethostbyname
-/* prototype is in "system/network.h" */
-#endif
-
-#ifndef HAVE_GETIFADDRS
-#define getifaddrs rep_getifaddrs
-/* prototype is in "system/network.h" */
-#endif
-
-#ifndef HAVE_FREEIFADDRS
-#define freeifaddrs rep_freeifaddrs
-/* prototype is in "system/network.h" */
-#endif
-
 #ifdef HAVE_LIMITS_H
 #include <limits.h>
 #endif
 
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-
 /* The extra casts work around common compiler bugs.  */
 #define _TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
 /* The outer cast is needed to work around a bug in Cray C 5.0.3.0.
@@ -392,17 +349,9 @@
 #define _TYPE_MAXIMUM(t) ((t) (~ (t) 0 - _TYPE_MINIMUM (t)))
 
 #ifndef HOST_NAME_MAX
-#define HOST_NAME_MAX 255
+#define HOST_NAME_MAX 64
 #endif
 
-/*
- * Some older systems seem not to have MAXHOSTNAMELEN
- * defined.
- */
-#ifndef MAXHOSTNAMELEN
-#define MAXHOSTNAMELEN HOST_NAME_MAX
-#endif
-
 #ifndef UINT16_MAX
 #define UINT16_MAX 65535
 #endif
@@ -478,6 +427,9 @@
 #endif
 #endif
 
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
 
 #ifndef MIN
 #define MIN(a,b) ((a)<(b)?(a):(b))
@@ -487,38 +439,11 @@
 #define MAX(a,b) ((a)>(b)?(a):(b))
 #endif
 
-#if !defined(HAVE_VOLATILE)
-#define volatile
-#endif
-
-/**
-  this is a warning hack. The idea is to use this everywhere that we
-  get the "discarding const" warning from gcc. That doesn't actually
-  fix the problem of course, but it means that when we do get to
-  cleaning them up we can do it by searching the code for
-  discard_const.
-
-  It also means that other error types aren't as swamped by the noise
-  of hundreds of const warnings, so we are more likely to notice when
-  we get new errors.
-
-  Please only add more uses of this macro when you find it
-  _really_ hard to fix const warnings. Our aim is to eventually use
-  this function in only a very few places.
-
-  Also, please call this via the discard_const_p() macro interface, as that
-  makes the return type safe.
-*/
-#define discard_const(ptr) ((void *)((uintptr_t)(ptr)))
-
-/** Type-safe version of discard_const */
-#define discard_const_p(type, ptr) ((type *)discard_const(ptr))
-
 #ifndef __STRING
 #define __STRING(x)    #x
 #endif
 
-#ifndef __STRINGSTRING
+#ifndef _STRINGSTRING
 #define __STRINGSTRING(x) __STRING(x)
 #endif
 
@@ -563,20 +488,4 @@
 #undef HAVE_MMAP
 #endif
 
-#ifdef __COMPAR_FN_T
-#define QSORT_CAST (__compar_fn_t)
-#endif
-
-#ifndef QSORT_CAST
-#define QSORT_CAST (int (*)(const void *, const void *))
-#endif
-
-#ifndef PATH_MAX
-#define PATH_MAX 1024
-#endif
-
-#ifndef MAX_DNS_NAME_LENGTH
-#define MAX_DNS_NAME_LENGTH 256 /* Actually 255 but +1 for terminating null. */
-#endif
-
 #endif /* _LIBREPLACE_REPLACE_H */

Modified: branches/samba/upstream/source/lib/replace/samba.m4
===================================================================
--- branches/samba/upstream/source/lib/replace/samba.m4	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/samba.m4	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,12 +1,8 @@
 AC_LIBREPLACE_BROKEN_CHECKS
-AC_LIBREPLACE_NETWORK_CHECKS
 
 SMB_EXT_LIB(LIBREPLACE_EXT, [${LIBDL}])
 SMB_ENABLE(LIBREPLACE_EXT)
 
-SMB_EXT_LIB(LIBREPLACE_NETWORK, [${LIBREPLACE_NETWORK_LIBS}])
-SMB_ENABLE(LIBREPLACE_NETWORK)
-
 # remove leading ./
 LIBREPLACE_DIR=`echo ${libreplacedir} |sed -e 's/^\.\///g'`
 
@@ -24,7 +20,7 @@
 
 SMB_SUBSYSTEM(LIBREPLACE,
 	[${LIBREPLACE_OBJS}],
-	[LIBREPLACE_EXT LIBREPLACE_NETWORK],
+	[LIBREPLACE_EXT],
 	[-Ilib/replace])
 
 LIBREPLACE_HOSTCC_OBJS=`echo ${LIBREPLACE_OBJS} |sed -e 's/\.o/\.ho/g'`

Modified: branches/samba/upstream/source/lib/replace/snprintf.c
===================================================================
--- branches/samba/upstream/source/lib/replace/snprintf.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/snprintf.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1264,7 +1264,7 @@
 	VA_COPY(ap2, ap);
 	ret = vsnprintf(NULL, 0, format, ap2);
 	va_end(ap2);
-	if (ret < 0) return ret;
+	if (ret <= 0) return ret;
 
 	(*ptr) = (char *)malloc(ret+1);
 	if (!*ptr) return -1;

Deleted: branches/samba/upstream/source/lib/replace/socket.c
===================================================================
--- branches/samba/upstream/source/lib/replace/socket.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/socket.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,35 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- *
- * Dummy replacements for socket functions.
- *
- * Copyright (C) Michael Adam <obnox at samba.org> 2008
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "replace.h"
-#include "system/network.h"
-
-int rep_connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen)
-{
-	errno = ENOSYS;
-	return -1;
-}
-
-struct hostent *rep_gethostbyname(const char *name)
-{
-	errno = ENOSYS;
-	return NULL;
-}

Deleted: branches/samba/upstream/source/lib/replace/socketpair.c
===================================================================
--- branches/samba/upstream/source/lib/replace/socketpair.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/socketpair.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,46 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * replacement routines for broken systems
- * Copyright (C) Jelmer Vernooij <jelmer at samba.org> 2006
- * Copyright (C) Michael Adam <obnox at samba.org> 2008
- *
- *  ** NOTE! The following LGPL license applies to the replace
- *  ** library. This does NOT imply that all of Samba is released
- *  ** under the LGPL
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "replace.h"
-#include "system/network.h"
-
-int rep_socketpair(int d, int type, int protocol, int sv[2])
-{
-	if (d != AF_UNIX) {
-		errno = EAFNOSUPPORT;
-		return -1;
-	}
-
-	if (protocol != 0) {
-		errno = EPROTONOSUPPORT;
-		return -1;
-	}
-
-	if (type != SOCK_STREAM) {
-		errno = EOPNOTSUPP;
-		return -1;
-	}
-
-	return pipe(sv);
-}

Modified: branches/samba/upstream/source/lib/replace/strptime.c
===================================================================
--- branches/samba/upstream/source/lib/replace/strptime.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/strptime.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,8 +4,8 @@
    Contributed by Ulrich Drepper <drepper at cygnus.com>, 1996.
 
    The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 3 of the
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
    License, or (at your option) any later version.
 
    The GNU C Library is distributed in the hope that it will be useful,
@@ -13,9 +13,10 @@
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.
 
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; see the file COPYING.LIB.  If not, 
-   see <http://www.gnu.org/licenses/>.  */
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
 
 /* XXX This version of the implementation is not really complete.
    Some of the fields cannot add information alone.  But if seeing

Modified: branches/samba/upstream/source/lib/replace/system/aio.h
===================================================================
--- branches/samba/upstream/source/lib/replace/system/aio.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/system/aio.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,22 +7,19 @@
 
    Copyright (C) Andrew Tridgell 2006
    
-     ** NOTE! The following LGPL license applies to the replace
-     ** library. This does NOT imply that all of Samba is released
-     ** under the LGPL
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
    
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
-
-   This library is distributed in the hope that it will be useful,
+   This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifdef HAVE_LIBAIO_H

Modified: branches/samba/upstream/source/lib/replace/system/capability.h
===================================================================
--- branches/samba/upstream/source/lib/replace/system/capability.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/system/capability.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,45 +7,31 @@
 
    Copyright (C) Andrew Tridgell 2004
    
-     ** NOTE! The following LGPL license applies to the replace
-     ** library. This does NOT imply that all of Samba is released
-     ** under the LGPL
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
    
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
-
-   This library is distributed in the hope that it will be useful,
+   This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifdef HAVE_SYS_CAPABILITY_H
 
-#if defined(BROKEN_REDHAT_7_SYSTEM_HEADERS) && !defined(_I386_STATFS_H) && !defined(_PPC_STATFS_H)
+#if defined(BROKEN_REDHAT_7_SYSTEM_HEADERS) && !defined(_I386_STATFS_H)
 #define _I386_STATFS_H
-#define _PPC_STATFS_H
 #define BROKEN_REDHAT_7_STATFS_WORKAROUND
 #endif
 
-#if defined(BROKEN_RHEL5_SYS_CAP_HEADER) && !defined(_LINUX_TYPES_H)
-#define BROKEN_RHEL5_SYS_CAP_HEADER_WORKAROUND
-#endif
-
 #include <sys/capability.h>
 
-#ifdef BROKEN_RHEL5_SYS_CAP_HEADER_WORKAROUND
-#undef _LINUX_TYPES_H
-#undef BROKEN_RHEL5_SYS_CAP_HEADER_WORKAROUND
-#endif
-
 #ifdef BROKEN_REDHAT_7_STATFS_WORKAROUND
-#undef _PPC_STATFS_H
 #undef _I386_STATFS_H
 #undef BROKEN_REDHAT_7_STATFS_WORKAROUND
 #endif

Modified: branches/samba/upstream/source/lib/replace/system/config.m4
===================================================================
--- branches/samba/upstream/source/lib/replace/system/config.m4	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/system/config.m4	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,6 @@
 # time
 AC_CHECK_HEADERS(sys/time.h utime.h)
 AC_HEADER_TIME
-AC_CHECK_FUNCS(utime utimes)
 
 # wait
 AC_HEADER_SYS_WAIT
@@ -17,106 +16,9 @@
 # capability
 AC_CHECK_HEADERS(sys/capability.h)
 
-case "$host_os" in
-*linux*)
-AC_CACHE_CHECK([for broken RedHat 7.2 system header files],libreplace_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS,[
-AC_TRY_COMPILE([
-	#ifdef HAVE_SYS_VFS_H
-	#include <sys/vfs.h>
-	#endif
-	#ifdef HAVE_SYS_CAPABILITY_H
-	#include <sys/capability.h>
-	#endif
-	],[
-	int i;
-	],
-	libreplace_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no,
-	libreplace_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=yes
-)])
-if test x"$libreplace_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS" = x"yes"; then
-	AC_DEFINE(BROKEN_REDHAT_7_SYSTEM_HEADERS,1,[Broken RedHat 7.2 system header files])
-fi
-
-AC_CACHE_CHECK([for broken RHEL5 sys/capability.h],libreplace_cv_BROKEN_RHEL5_SYS_CAP_HEADER,[
-AC_TRY_COMPILE([
-	#ifdef HAVE_SYS_CAPABILITY_H
-	#include <sys/capability.h>
-	#endif
-	#include <linux/types.h>
-	],[
-	__s8 i;
-	],
-	libreplace_cv_BROKEN_RHEL5_SYS_CAP_HEADER=no,
-	libreplace_cv_BROKEN_RHEL5_SYS_CAP_HEADER=yes
-)])
-if test x"$libreplace_cv_BROKEN_RHEL5_SYS_CAP_HEADER" = x"yes"; then
-	AC_DEFINE(BROKEN_RHEL5_SYS_CAP_HEADER,1,[Broken RHEL5 sys/capability.h])
-fi
-;;
-esac
-
 # passwd
 AC_CHECK_HEADERS(grp.h sys/id.h compat.h shadow.h sys/priv.h pwd.h sys/security.h)
-AC_CHECK_FUNCS(getpwnam_r getpwuid_r getpwent_r)
-AC_HAVE_DECL(getpwent_r, [
-	#include <unistd.h>
-	#include <pwd.h>
-	])
-AC_VERIFY_C_PROTOTYPE([struct passwd *getpwent_r(struct passwd *src, char *buf, int buflen)],
-	[
-	#ifndef HAVE_GETPWENT_R_DECL
-	#error missing getpwent_r prototype
-	#endif
-	return NULL;
-	],[
-	AC_DEFINE(SOLARIS_GETPWENT_R, 1, [getpwent_r solaris function prototype])
-	],[],[
-	#include <unistd.h>
-	#include <pwd.h>
-	])
-AC_VERIFY_C_PROTOTYPE([struct passwd *getpwent_r(struct passwd *src, char *buf, size_t buflen)],
-	[
-	#ifndef HAVE_GETPWENT_R_DECL
-	#error missing getpwent_r prototype
-	#endif
-	return NULL;
-	],[
-	AC_DEFINE(SOLARIS_GETPWENT_R, 1, [getpwent_r irix (similar to solaris) function prototype])
-	],[],[
-	#include <unistd.h>
-	#include <pwd.h>
-	])
-AC_CHECK_FUNCS(getgrnam_r getgrgid_r getgrent_r)
-AC_HAVE_DECL(getgrent_r, [
-	#include <unistd.h>
-	#include <grp.h>
-	])
-AC_VERIFY_C_PROTOTYPE([struct group *getgrent_r(struct group *src, char *buf, int buflen)],
-	[
-	#ifndef HAVE_GETGRENT_R_DECL
-	#error missing getgrent_r prototype
-	#endif
-	return NULL;
-	],[
-	AC_DEFINE(SOLARIS_GETGRENT_R, 1, [getgrent_r solaris function prototype])
-	],[],[
-	#include <unistd.h>
-	#include <grp.h>
-	])
 
-AC_VERIFY_C_PROTOTYPE([struct group *getgrent_r(struct group *src, char *buf, size_t buflen)],
-	[
-	#ifndef HAVE_GETGRENT_R_DECL
-	#error missing getgrent_r prototype
-	#endif
-	return NULL;
-	],[
-	AC_DEFINE(SOLARIS_GETGRENT_R, 1, [getgrent_r irix (similar to solaris)  function prototype])
-	],[],[
-	#include <unistd.h>
-	#include <grp.h>
-	])
-
 # locale
 AC_CHECK_HEADERS(ctype.h locale.h)
 

Modified: branches/samba/upstream/source/lib/replace/system/dir.h
===================================================================
--- branches/samba/upstream/source/lib/replace/system/dir.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/system/dir.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,22 +7,19 @@
 
    Copyright (C) Andrew Tridgell 2004
    
-     ** NOTE! The following LGPL license applies to the replace
-     ** library. This does NOT imply that all of Samba is released
-     ** under the LGPL
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
    
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
-
-   This library is distributed in the hope that it will be useful,
+   This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #if HAVE_DIRENT_H

Modified: branches/samba/upstream/source/lib/replace/system/filesys.h
===================================================================
--- branches/samba/upstream/source/lib/replace/system/filesys.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/system/filesys.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,23 +7,19 @@
 
    Copyright (C) Andrew Tridgell 2004
    
-     ** NOTE! The following LGPL license applies to the replace
-     ** library. This does NOT imply that all of Samba is released
-     ** under the LGPL
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
    
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
-
-   This library is distributed in the hope that it will be useful,
+   This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
-
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include <unistd.h>
@@ -37,10 +33,6 @@
 #include <sys/mount.h>
 #endif
 
-#ifdef HAVE_MNTENT_H
-#include <mntent.h>
-#endif
-
 #ifdef HAVE_SYS_VFS_H
 #include <sys/vfs.h>
 #endif

Modified: branches/samba/upstream/source/lib/replace/system/glob.h
===================================================================
--- branches/samba/upstream/source/lib/replace/system/glob.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/system/glob.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,23 +7,19 @@
 
    Copyright (C) Andrew Tridgell 2004
    
-     ** NOTE! The following LGPL license applies to the replace
-     ** library. This does NOT imply that all of Samba is released
-     ** under the LGPL
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
    
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
-
-   This library is distributed in the hope that it will be useful,
+   This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
-
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifdef HAVE_GLOB_H

Modified: branches/samba/upstream/source/lib/replace/system/iconv.h
===================================================================
--- branches/samba/upstream/source/lib/replace/system/iconv.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/system/iconv.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,23 +7,19 @@
 
    Copyright (C) Andrew Tridgell 2004
    
-     ** NOTE! The following LGPL license applies to the replace
-     ** library. This does NOT imply that all of Samba is released
-     ** under the LGPL
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
    
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
-
-   This library is distributed in the hope that it will be useful,
+   This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
-
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #if !defined(HAVE_ICONV) && defined(HAVE_ICONV_H)

Modified: branches/samba/upstream/source/lib/replace/system/kerberos.h
===================================================================
--- branches/samba/upstream/source/lib/replace/system/kerberos.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/system/kerberos.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,23 +8,19 @@
 
    Copyright (C) Andrew Tridgell 2004
    
-     ** NOTE! The following LGPL license applies to the replace
-     ** library. This does NOT imply that all of Samba is released
-     ** under the LGPL
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
    
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
-
-   This library is distributed in the hope that it will be useful,
+   This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
-
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifdef HAVE_KRB5

Modified: branches/samba/upstream/source/lib/replace/system/locale.h
===================================================================
--- branches/samba/upstream/source/lib/replace/system/locale.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/system/locale.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,23 +8,19 @@
 
    Copyright (C) Andrew Tridgell 2004
    
-     ** NOTE! The following LGPL license applies to the replace
-     ** library. This does NOT imply that all of Samba is released
-     ** under the LGPL
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
    
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
-
-   This library is distributed in the hope that it will be useful,
+   This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
-
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifdef HAVE_CTYPE_H

Modified: branches/samba/upstream/source/lib/replace/system/network.h
===================================================================
--- branches/samba/upstream/source/lib/replace/system/network.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/system/network.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,31 +6,22 @@
    networking system include wrappers
 
    Copyright (C) Andrew Tridgell 2004
-   Copyright (C) Jelmer Vernooij 2007
    
-     ** NOTE! The following LGPL license applies to the replace
-     ** library. This does NOT imply that all of Samba is released
-     ** under the LGPL
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
    
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
-
-   This library is distributed in the hope that it will be useful,
+   This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
-
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
-#ifndef LIBREPLACE_NETWORK_CHECKS
-#error "AC_LIBREPLACE_NETWORK_CHECKS missing in configure"
-#endif
-
 #ifdef HAVE_SYS_SOCKET_H
 #include <sys/socket.h>
 #endif
@@ -87,162 +78,19 @@
 #include <stropts.h>
 #endif
 
-#ifndef HAVE_SOCKLEN_T
-#define HAVE_SOCKLEN_T
-typedef int socklen_t;
+#ifdef SOCKET_WRAPPER
+#ifndef SOCKET_WRAPPER_NOT_REPLACE
+#define SOCKET_WRAPPER_REPLACE
 #endif
+#include "lib/socket_wrapper/socket_wrapper.h"
+#endif
 
-#if !defined (HAVE_INET_NTOA) || defined(REPLACE_INET_NTOA)
-/* define is in "replace.h" */
+#ifdef REPLACE_INET_NTOA
 char *rep_inet_ntoa(struct in_addr ip);
+#define inet_ntoa rep_inet_ntoa
 #endif
 
-#ifndef HAVE_INET_PTON
-/* define is in "replace.h" */
-int rep_inet_pton(int af, const char *src, void *dst);
-#endif
-
-#ifndef HAVE_INET_NTOP
-/* define is in "replace.h" */
-const char *rep_inet_ntop(int af, const void *src, char *dst, socklen_t size);
-#endif
-
-#ifndef HAVE_INET_ATON
-/* define is in "replace.h" */
-int rep_inet_aton(const char *src, struct in_addr *dst);
-#endif
-
-#ifndef HAVE_CONNECT
-/* define is in "replace.h" */
-int rep_connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
-#endif
-
-#ifndef HAVE_GETHOSTBYNAME
-/* define is in "replace.h" */
-struct hostent *rep_gethostbyname(const char *name);
-#endif
-
-#ifdef HAVE_IFADDRS_H
-#include <ifaddrs.h>
-#endif
-
-#ifndef HAVE_STRUCT_IFADDRS
-struct ifaddrs {
-	struct ifaddrs   *ifa_next;         /* Pointer to next struct */
-	char             *ifa_name;         /* Interface name */
-	unsigned int     ifa_flags;         /* Interface flags */
-	struct sockaddr  *ifa_addr;         /* Interface address */
-	struct sockaddr  *ifa_netmask;      /* Interface netmask */
-#undef ifa_dstaddr
-	struct sockaddr  *ifa_dstaddr;      /* P2P interface destination */
-	void             *ifa_data;         /* Address specific data */
-};
-#endif
-
-#ifndef HAVE_GETIFADDRS
-int rep_getifaddrs(struct ifaddrs **);
-#endif
-
-#ifndef HAVE_FREEIFADDRS
-void rep_freeifaddrs(struct ifaddrs *);
-#endif
-
-#ifndef HAVE_SOCKETPAIR
-/* define is in "replace.h" */
-int rep_socketpair(int d, int type, int protocol, int sv[2]);
-#endif
-
 /*
- * Some systems have getaddrinfo but not the
- * defines needed to use it.
- */
-
-/* Various macros that ought to be in <netdb.h>, but might not be */
-
-#ifndef EAI_FAIL
-#define EAI_BADFLAGS	(-1)
-#define EAI_NONAME	(-2)
-#define EAI_AGAIN	(-3)
-#define EAI_FAIL	(-4)
-#define EAI_FAMILY	(-6)
-#define EAI_SOCKTYPE	(-7)
-#define EAI_SERVICE	(-8)
-#define EAI_MEMORY	(-10)
-#define EAI_SYSTEM	(-11)
-#endif   /* !EAI_FAIL */
-
-#ifndef AI_PASSIVE
-#define AI_PASSIVE	0x0001
-#endif
-
-#ifndef AI_CANONNAME
-#define AI_CANONNAME	0x0002
-#endif
-
-#ifndef AI_NUMERICHOST
-/*
- * some platforms don't support AI_NUMERICHOST; define as zero if using
- * the system version of getaddrinfo...
- */
-#if defined(HAVE_STRUCT_ADDRINFO) && defined(HAVE_GETADDRINFO)
-#define AI_NUMERICHOST	0
-#else
-#define AI_NUMERICHOST	0x0004
-#endif
-#endif
-
-#ifndef AI_ADDRCONFIG
-/*
- * logic copied from AI_NUMERICHOST
- */
-#if defined(HAVE_STRUCT_ADDRINFO) && defined(HAVE_GETADDRINFO)
-#define AI_ADDRCONFIG	0
-#else
-#define AI_ADDRCONFIG	0x0020
-#endif
-#endif
-
-#ifndef AI_NUMERICSERV
-/*
- * logic copied from AI_NUMERICHOST
- */
-#if defined(HAVE_STRUCT_ADDRINFO) && defined(HAVE_GETADDRINFO)
-#define AI_NUMERICSERV	0
-#else
-#define AI_NUMERICSERV	0x0400
-#endif
-#endif
-
-#ifndef NI_NUMERICHOST
-#define NI_NUMERICHOST	1
-#endif
-
-#ifndef NI_NUMERICSERV
-#define NI_NUMERICSERV	2
-#endif
-
-#ifndef NI_NOFQDN
-#define NI_NOFQDN	4
-#endif
-
-#ifndef NI_NAMEREQD
-#define NI_NAMEREQD 	8
-#endif
-
-#ifndef NI_DGRAM
-#define NI_DGRAM	16
-#endif
-
-
-#ifndef NI_MAXHOST
-#define NI_MAXHOST	1025
-#endif
-
-#ifndef NI_MAXSERV
-#define NI_MAXSERV	32
-#endif
-
-/*
  * glibc on linux doesn't seem to have MSG_WAITALL
  * defined. I think the kernel has it though..
  */
@@ -250,6 +98,14 @@
 #define MSG_WAITALL 0
 #endif
 
+/*
+ * Some older systems seem not to have MAXHOSTNAMELEN
+ * defined.
+ */
+#ifndef MAXHOSTNAMELEN
+#define MAXHOSTNAMELEN 254
+#endif
+
 #ifndef INADDR_LOOPBACK
 #define INADDR_LOOPBACK 0x7f000001
 #endif
@@ -258,75 +114,4 @@
 #define INADDR_NONE 0xffffffff
 #endif
 
-#ifndef EAFNOSUPPORT
-#define EAFNOSUPPORT EINVAL
 #endif
-
-#ifndef INET_ADDRSTRLEN
-#define INET_ADDRSTRLEN 16
-#endif
-
-#ifndef INET6_ADDRSTRLEN
-#define INET6_ADDRSTRLEN 46
-#endif
-
-#ifndef HOST_NAME_MAX
-#define HOST_NAME_MAX 256
-#endif
-
-#ifndef HAVE_SA_FAMILY_T
-#define HAVE_SA_FAMILY_T
-typedef unsigned short int sa_family_t;
-#endif
-
-#ifndef HAVE_STRUCT_SOCKADDR_STORAGE
-#define HAVE_STRUCT_SOCKADDR_STORAGE
-#ifdef HAVE_STRUCT_SOCKADDR_IN6
-#define sockaddr_storage sockaddr_in6
-#define ss_family sin6_family
-#define HAVE_SS_FAMILY 1
-#else
-#define sockaddr_storage sockaddr_in
-#define ss_family sin_family
-#define HAVE_SS_FAMILY 1
-#endif
-#endif
-
-#ifndef HAVE_SS_FAMILY
-#ifdef HAVE___SS_FAMILY
-#define ss_family __ss_family
-#define HAVE_SS_FAMILY 1
-#endif
-#endif
-
-#ifndef HAVE_STRUCT_ADDRINFO
-#define HAVE_STRUCT_ADDRINFO
-struct addrinfo {
-	int			ai_flags;
-	int			ai_family;
-	int			ai_socktype;
-	int			ai_protocol;
-	socklen_t		ai_addrlen;
-	struct sockaddr 	*ai_addr;
-	char			*ai_canonname;
-	struct addrinfo		*ai_next;
-};
-#endif   /* HAVE_STRUCT_ADDRINFO */
-
-#if !defined(HAVE_GETADDRINFO)
-#include "getaddrinfo.h"
-#endif
-
-/* Needed for some systems that don't define it (Solaris). */
-#ifndef ifr_netmask
-#define ifr_netmask ifr_addr
-#endif
-
-#ifdef SOCKET_WRAPPER
-#ifndef SOCKET_WRAPPER_NOT_REPLACE
-#define SOCKET_WRAPPER_REPLACE
-#endif
-#include "lib/socket_wrapper/socket_wrapper.h"
-#endif
-
-#endif

Modified: branches/samba/upstream/source/lib/replace/system/passwd.h
===================================================================
--- branches/samba/upstream/source/lib/replace/system/passwd.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/system/passwd.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,28 +8,21 @@
 
    Copyright (C) Andrew Tridgell 2004
    
-     ** NOTE! The following LGPL license applies to the replace
-     ** library. This does NOT imply that all of Samba is released
-     ** under the LGPL
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
    
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
-
-   This library is distributed in the hope that it will be useful,
+   This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
-
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
-/* this needs to be included before nss_wrapper.h on some systems */
-#include <unistd.h>
-
 #ifdef HAVE_PWD_H
 #include <pwd.h>
 #endif
@@ -68,13 +61,8 @@
 #endif
 
 #ifdef REPLACE_GETPASS
-#if defined(REPLACE_GETPASS_BY_GETPASSPHRASE)
-#define getpass(prompt) getpassphrase(prompt)
-#else
-#define getpass(prompt) rep_getpass(prompt)
-char *rep_getpass(const char *prompt);
+#define getpass(prompt) getsmbpass((prompt))
 #endif
-#endif
 
 #ifndef NGROUPS_MAX
 #define NGROUPS_MAX 32 /* Guess... */
@@ -100,11 +88,4 @@
 #define ULTRIX_AUTH 1
 #endif
 
-#ifdef NSS_WRAPPER
-#ifndef NSS_WRAPPER_NOT_REPLACE
-#define NSS_WRAPPER_REPLACE
 #endif
-#include "lib/nss_wrapper/nss_wrapper.h"
-#endif
-
-#endif

Copied: branches/samba/upstream/source/lib/replace/system/printing.h (from rev 1928, branches/samba/upstream/source/lib/replace/system/printing.h)
===================================================================
--- branches/samba/upstream/source/lib/replace/system/printing.h	                        (rev 0)
+++ branches/samba/upstream/source/lib/replace/system/printing.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,46 @@
+#ifndef _system_printing_h
+#define _system_printing_h
+
+/* 
+   Unix SMB/CIFS implementation.
+
+   printing system include wrappers
+
+   Copyright (C) Andrew Tridgell 2004
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#ifdef AIX
+#define DEFAULT_PRINTING PRINT_AIX
+#define PRINTCAP_NAME "/etc/qconfig"
+#endif
+
+#ifdef HPUX
+#define DEFAULT_PRINTING PRINT_HPUX
+#endif
+
+#ifdef QNX
+#define DEFAULT_PRINTING PRINT_QNX
+#endif
+
+#ifndef DEFAULT_PRINTING
+#define DEFAULT_PRINTING PRINT_BSD
+#endif
+#ifndef PRINTCAP_NAME
+#define PRINTCAP_NAME "/etc/printcap"
+#endif
+
+#endif

Modified: branches/samba/upstream/source/lib/replace/system/readline.h
===================================================================
--- branches/samba/upstream/source/lib/replace/system/readline.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/system/readline.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,25 +3,21 @@
 /* 
    Unix SMB/CIFS implementation.
 
-   Readline wrappers
+   readline wrappers
    
-     ** NOTE! The following LGPL license applies to the replace
-     ** library. This does NOT imply that all of Samba is released
-     ** under the LGPL
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
    
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
-
-   This library is distributed in the hope that it will be useful,
+   This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
-
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifdef HAVE_LIBREADLINE

Modified: branches/samba/upstream/source/lib/replace/system/select.h
===================================================================
--- branches/samba/upstream/source/lib/replace/system/select.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/system/select.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,33 +7,25 @@
 
    Copyright (C) Andrew Tridgell 2004
    
-     ** NOTE! The following LGPL license applies to the replace
-     ** library. This does NOT imply that all of Samba is released
-     ** under the LGPL
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
    
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
-
-   This library is distributed in the hope that it will be useful,
+   This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
-
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifdef HAVE_SYS_SELECT_H
 #include <sys/select.h>
 #endif
 
-#ifdef HAVE_SYS_EPOLL_H
-#include <sys/epoll.h>
-#endif
-
 #ifndef SELECT_CAST
 #define SELECT_CAST
 #endif

Modified: branches/samba/upstream/source/lib/replace/system/shmem.h
===================================================================
--- branches/samba/upstream/source/lib/replace/system/shmem.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/system/shmem.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,23 +7,19 @@
 
    Copyright (C) Andrew Tridgell 2004
    
-     ** NOTE! The following LGPL license applies to the replace
-     ** library. This does NOT imply that all of Samba is released
-     ** under the LGPL
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
    
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
-
-   This library is distributed in the hope that it will be useful,
+   This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
-
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #if defined(HAVE_SYS_IPC_H)

Modified: branches/samba/upstream/source/lib/replace/system/syslog.h
===================================================================
--- branches/samba/upstream/source/lib/replace/system/syslog.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/system/syslog.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,23 +7,19 @@
 
    Copyright (C) Andrew Tridgell 2004
    
-     ** NOTE! The following LGPL license applies to the replace
-     ** library. This does NOT imply that all of Samba is released
-     ** under the LGPL
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
    
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
-
-   This library is distributed in the hope that it will be useful,
+   This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
-
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifdef HAVE_SYSLOG_H

Modified: branches/samba/upstream/source/lib/replace/system/terminal.h
===================================================================
--- branches/samba/upstream/source/lib/replace/system/terminal.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/system/terminal.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,23 +7,19 @@
 
    Copyright (C) Andrew Tridgell 2004
    
-     ** NOTE! The following LGPL license applies to the replace
-     ** library. This does NOT imply that all of Samba is released
-     ** under the LGPL
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
    
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
-
-   This library is distributed in the hope that it will be useful,
+   This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
-
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifdef SUNOS4

Modified: branches/samba/upstream/source/lib/replace/system/time.h
===================================================================
--- branches/samba/upstream/source/lib/replace/system/time.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/system/time.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,24 +6,20 @@
    time system include wrappers
 
    Copyright (C) Andrew Tridgell 2004
-
-     ** NOTE! The following LGPL license applies to the replace
-     ** library. This does NOT imply that all of Samba is released
-     ** under the LGPL
    
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
-
-   This library is distributed in the hope that it will be useful,
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
-
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifdef TIME_WITH_SYS_TIME
@@ -39,31 +35,6 @@
 
 #ifdef HAVE_UTIME_H
 #include <utime.h>
-#else
-struct utimbuf {
-	time_t actime;       /* access time */
-	time_t modtime;      /* modification time */
-};
 #endif
 
-#ifndef HAVE_MKTIME
-/* define is in "replace.h" */
-time_t rep_mktime(struct tm *t);
 #endif
-
-#ifndef HAVE_TIMEGM
-/* define is in "replace.h" */
-time_t rep_timegm(struct tm *tm);
-#endif
-
-#ifndef HAVE_UTIME
-/* define is in "replace.h" */
-int rep_utime(const char *filename, const struct utimbuf *buf);
-#endif
-
-#ifndef HAVE_UTIMES
-/* define is in "replace.h" */
-int rep_utimes(const char *filename, const struct timeval tv[2]);
-#endif
-
-#endif

Modified: branches/samba/upstream/source/lib/replace/system/wait.h
===================================================================
--- branches/samba/upstream/source/lib/replace/system/wait.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/system/wait.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,24 +6,20 @@
    waitpid system include wrappers
 
    Copyright (C) Andrew Tridgell 2004
-
-     ** NOTE! The following LGPL license applies to the replace
-     ** library. This does NOT imply that all of Samba is released
-     ** under the LGPL
    
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
-
-   This library is distributed in the hope that it will be useful,
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
-
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifdef HAVE_SYS_WAIT_H

Deleted: branches/samba/upstream/source/lib/replace/test/getifaddrs.c
===================================================================
--- branches/samba/upstream/source/lib/replace/test/getifaddrs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/test/getifaddrs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,100 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- *
- * libreplace getifaddrs test
- *
- * Copyright (C) Michael Adam <obnox at samba.org> 2008
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef AUTOCONF_TEST
-#include "replace.h"
-#include "system/network.h"
-#endif
-
-#ifdef HAVE_INET_NTOP
-#define rep_inet_ntop inet_ntop
-#endif
-
-static const char *format_sockaddr(struct sockaddr *addr,
-				   char *addrstring,
-				   socklen_t addrlen)
-{
-	const char *result = NULL;
-
-	if (addr->sa_family == AF_INET) {
-		result = rep_inet_ntop(AF_INET,
-				       &((struct sockaddr_in *)addr)->sin_addr,
-				       addrstring,
-				       addrlen);
-#ifdef HAVE_STRUCT_SOCKADDR_IN6
-	} else if (addr->sa_family == AF_INET6) {
-		result = rep_inet_ntop(AF_INET6,
-				       &((struct sockaddr_in6 *)addr)->sin6_addr,
-				       addrstring,
-				       addrlen);
-#endif
-	}
-	return result;
-}
-
-int getifaddrs_test(void)
-{
-	struct ifaddrs *ifs = NULL;
-	struct ifaddrs *ifs_head = NULL;
-	int ret;
-
-	ret = getifaddrs(&ifs);
-	ifs_head = ifs;
-	if (ret != 0) {
-		fprintf(stderr, "getifaddrs() failed: %s\n", strerror(errno));
-		return 1;
-	}
-
-	while (ifs) {
-		printf("%-10s ", ifs->ifa_name);
-		if (ifs->ifa_addr != NULL) {
-			char addrstring[INET6_ADDRSTRLEN];
-			const char *result;
-
-			result = format_sockaddr(ifs->ifa_addr,
-						 addrstring,
-						 sizeof(addrstring));
-			if (result != NULL) {
-				printf("IP=%s ", addrstring);
-			}
-
-			if (ifs->ifa_netmask != NULL) {
-				result = format_sockaddr(ifs->ifa_netmask,
-							 addrstring,
-							 sizeof(addrstring));
-				if (result != NULL) {
-					printf("NETMASK=%s", addrstring);
-				}
-			} else {
-				printf("AF=%d ", ifs->ifa_addr->sa_family);
-			}
-		} else {
-			printf("<no address>");
-		}
-
-		printf("\n");
-		ifs = ifs->ifa_next;
-	}
-
-	freeifaddrs(ifs_head);
-
-	return 0;
-}

Modified: branches/samba/upstream/source/lib/replace/test/os2_delete.c
===================================================================
--- branches/samba/upstream/source/lib/replace/test/os2_delete.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/test/os2_delete.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -39,15 +39,8 @@
 	int i;
 	for (i=0;i<NUM_FILES;i++) {
 		char fname[40];
-		int fd;
 		sprintf(fname, TESTDIR "/test%u.txt", i);
-		fd = open(fname, O_CREAT|O_RDWR, 0600);
-		if (fd < 0) {
-			FAILED("open");
-		}
-		if (close(fd) != 0) {
-			FAILED("close");
-		}
+		close(open(fname, O_CREAT|O_RDWR, 0600)) == 0 || FAILED("close");
 	}
 }
 

Modified: branches/samba/upstream/source/lib/replace/test/testsuite.c
===================================================================
--- branches/samba/upstream/source/lib/replace/test/testsuite.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/test/testsuite.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -12,7 +12,7 @@
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
 
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,7 +20,8 @@
    Lesser General Public License for more details.
 
    You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
+   License along with this library; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
 #include "replace.h"
@@ -37,6 +38,7 @@
 #include "system/locale.h"
 #include "system/network.h"
 #include "system/passwd.h"
+#include "system/printing.h"
 #include "system/readline.h"
 #include "system/select.h"
 #include "system/shmem.h"
@@ -518,7 +520,7 @@
 {
 	printf("test: strtoll\n");
 
-#define TEST_STRTOLL(str,base,res,diff,errnoo) TEST_STRTO_X(long long int, "%lld", strtoll,str,base,res,diff,errnoo)
+#define TEST_STRTOLL(str,base,res,diff,errnoo) TEST_STRTO_X(int64_t, "%lld", strtoll,str,base,res,diff,errnoo)
 
 	TEST_STRTOLL("15",	10,	15LL,	2, 0);
 	TEST_STRTOLL("  15",	10,	15LL,	4, 0);
@@ -617,7 +619,7 @@
 {
 	printf("test: strtoull\n");
 
-#define TEST_STRTOULL(str,base,res,diff,errnoo) TEST_STRTO_X(long long unsigned int,"%llu",strtoull,str,base,res,diff,errnoo)
+#define TEST_STRTOULL(str,base,res,diff,errnoo) TEST_STRTO_X(uint64_t,"%llu",strtoull,str,base,res,diff,errnoo)
 
 	TEST_STRTOULL("15",	10,	15LLU,	2, 0);
 	TEST_STRTOULL("  15",	10,	15LLU,	4, 0);
@@ -742,7 +744,7 @@
 	TEST_STRTOULL("-02000000000000000000000",8,	18446744073709551615LLU,	24, ERANGE);
 	TEST_STRTOULL("-2000000000000000000000",8,	18446744073709551615LLU,	23, ERANGE);
 
-	printf("success: strtoull\n");
+	printf("success: strtuoll\n");
 	return true;
 }
 
@@ -856,165 +858,6 @@
 	return libreplace_test_strptime();
 }
 
-extern int getifaddrs_test(void);
-
-static int test_getifaddrs(void)
-{
-
-	printf("test: getifaddrs\n");
-
-	if (getifaddrs_test() != 0) {
-		printf("failure: getifaddrs\n");
-		return false;
-	}
-
-	printf("success: getifaddrs\n");
-	return true;
-}
-
-static int test_utime(void)
-{
-	struct utimbuf u;
-	struct stat st1, st2, st3;
-	int fd;
-
-	printf("test: utime\n");
-	unlink(TESTFILE);
-
-	fd = open(TESTFILE, O_RDWR|O_CREAT, 0600);
-	if (fd == -1) {
-		printf("failure: utime [\n"
-		       "creating '%s' failed - %s\n]\n",
-		       TESTFILE, strerror(errno));
-		return false;
-	}
-
-	if (fstat(fd, &st1) != 0) {
-		printf("failure: utime [\n"
-		       "fstat (1) failed - %s\n]\n",
-		       strerror(errno));
-		return false;
-	}
-
-	u.actime = st1.st_atime + 300;
-	u.modtime = st1.st_mtime - 300;
-	if (utime(TESTFILE, &u) != 0) {
-		printf("failure: utime [\n"
-		       "utime(&u) failed - %s\n]\n",
-		       strerror(errno));
-		return false;
-	}
-
-	if (fstat(fd, &st2) != 0) {
-		printf("failure: utime [\n"
-		       "fstat (2) failed - %s\n]\n",
-		       strerror(errno));
-		return false;
-	}
-
-	if (utime(TESTFILE, NULL) != 0) {
-		printf("failure: utime [\n"
-		       "utime(NULL) failed - %s\n]\n",
-		       strerror(errno));
-		return false;
-	}
-
-	if (fstat(fd, &st3) != 0) {
-		printf("failure: utime [\n"
-		       "fstat (3) failed - %s\n]\n",
-		       strerror(errno));
-		return false;
-	}
-
-#define CMP_VAL(a,c,b) do { \
-	if (a c b) { \
-		printf("failure: utime [\n" \
-		       "%s: %s(%d) %s %s(%d)\n]\n", \
-		       __location__, \
-		       #a, (int)a, #c, #b, (int)b); \
-		return false; \
-	} \
-} while(0)
-#define EQUAL_VAL(a,b) CMP_VAL(a,!=,b)
-#define GREATER_VAL(a,b) CMP_VAL(a,<=,b)
-#define LESSER_VAL(a,b) CMP_VAL(a,>=,b)
-
-	EQUAL_VAL(st2.st_atime, st1.st_atime + 300);
-	EQUAL_VAL(st2.st_mtime, st1.st_mtime - 300);
-	LESSER_VAL(st3.st_atime, st2.st_atime);
-	GREATER_VAL(st3.st_mtime, st2.st_mtime);
-
-#undef CMP_VAL
-#undef EQUAL_VAL
-#undef GREATER_VAL
-#undef LESSER_VAL
-
-	unlink(TESTFILE);
-	printf("success: utime\n");
-	return true;
-}
-
-static int test_utimes(void)
-{
-	struct timeval tv[2];
-	struct stat st1, st2;
-	int fd;
-
-	printf("test: utimes\n");
-	unlink(TESTFILE);
-
-	fd = open(TESTFILE, O_RDWR|O_CREAT, 0600);
-	if (fd == -1) {
-		printf("failure: utimes [\n"
-		       "creating '%s' failed - %s\n]\n",
-		       TESTFILE, strerror(errno));
-		return false;
-	}
-
-	if (fstat(fd, &st1) != 0) {
-		printf("failure: utimes [\n"
-		       "fstat (1) failed - %s\n]\n",
-		       strerror(errno));
-		return false;
-	}
-
-	ZERO_STRUCT(tv);
-	tv[0].tv_sec = st1.st_atime + 300;
-	tv[1].tv_sec = st1.st_mtime - 300;
-	if (utimes(TESTFILE, tv) != 0) {
-		printf("failure: utimes [\n"
-		       "utimes(tv) failed - %s\n]\n",
-		       strerror(errno));
-		return false;
-	}
-
-	if (fstat(fd, &st2) != 0) {
-		printf("failure: utimes [\n"
-		       "fstat (2) failed - %s\n]\n",
-		       strerror(errno));
-		return false;
-	}
-
-#define EQUAL_VAL(a,b) do { \
-	if (a != b) { \
-		printf("failure: utimes [\n" \
-		       "%s: %s(%d) != %s(%d)\n]\n", \
-		       __location__, \
-		       #a, (int)a, #b, (int)b); \
-		return false; \
-	} \
-} while(0)
-
-	EQUAL_VAL(st2.st_atime, st1.st_atime + 300);
-	EQUAL_VAL(st2.st_mtime, st1.st_mtime - 300);
-
-#undef EQUAL_VAL
-
-	unlink(TESTFILE);
-	printf("success: utimes\n");
-	return true;
-}
-
 struct torture_context;
 bool torture_local_replace(struct torture_context *ctx)
 {
@@ -1062,9 +905,6 @@
 	ret &= test_MAX();
 	ret &= test_socketpair();
 	ret &= test_strptime();
-	ret &= test_getifaddrs();
-	ret &= test_utime();
-	ret &= test_utimes();
 
 	return ret;
 }

Modified: branches/samba/upstream/source/lib/replace/win32.m4
===================================================================
--- branches/samba/upstream/source/lib/replace/win32.m4	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/replace/win32.m4	2008-06-15 01:55:18 UTC (rev 1953)
@@ -2,7 +2,7 @@
 
 #######################################
 # Check for mkdir mode
-AC_CACHE_CHECK( [whether mkdir supports mode], libreplace_cv_mkdir_has_mode,
+AC_CACHE_CHECK( [whether mkdir supports mode], ac_mkdir_has_mode,
 	AC_TRY_COMPILE([
 		#include <stdio.h>
 		#ifdef HAVE_DIRECT_H
@@ -11,10 +11,10 @@
 			mkdir("foo",0777);
 			return 0;
 	],
-    libreplace_cv_mkdir_has_mode="yes",
-    libreplace_cv_mkdir_has_mode="no") )
+    ac_mkdir_has_mode="yes",
+    ac_mkdir_has_mode="no") )
 
-if test "$libreplace_cv_mkdir_has_mode" = "yes"
+if test "$ac_mkdir_has_mode" = "yes"
 then
     AC_DEFINE(HAVE_MKDIR_MODE, 1, [Define if target mkdir supports mode option])
 fi

Modified: branches/samba/upstream/source/lib/secace.c
===================================================================
--- branches/samba/upstream/source/lib/secace.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/secace.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -26,7 +27,7 @@
  Check if ACE has OBJECT type.
 ********************************************************************/
 
-bool sec_ace_object(uint8 type)
+BOOL sec_ace_object(uint8 type)
 {
 	if (type == SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT ||
             type == SEC_ACE_TYPE_ACCESS_DENIED_OBJECT ||
@@ -46,7 +47,9 @@
 	ace_dest->flags = ace_src->flags;
 	ace_dest->size  = ace_src->size;
 	ace_dest->access_mask = ace_src->access_mask;
-	ace_dest->object = ace_src->object;
+	ace_dest->obj_flags = ace_src->obj_flags;
+	memcpy(&ace_dest->obj_guid, &ace_src->obj_guid, sizeof(struct GUID));
+	memcpy(&ace_dest->inh_guid, &ace_src->inh_guid, sizeof(struct GUID));
 	sid_copy(&ace_dest->trustee, &ace_src->trustee);
 }
 
@@ -54,12 +57,11 @@
  Sets up a SEC_ACE structure.
 ********************************************************************/
 
-void init_sec_ace(SEC_ACE *t, const DOM_SID *sid, enum security_ace_type type,
-		  uint32 mask, uint8 flag)
+void init_sec_ace(SEC_ACE *t, const DOM_SID *sid, uint8 type, SEC_ACCESS mask, uint8 flag)
 {
 	t->type = type;
 	t->flags = flag;
-	t->size = ndr_size_dom_sid(sid, 0) + 8;
+	t->size = sid_size(sid) + 8;
 	t->access_mask = mask;
 
 	ZERO_STRUCTP(&t->trustee);
@@ -84,9 +86,9 @@
 	for (i = 0; i < *num - 1; i ++)
 		sec_ace_copy(&(*pp_new)[i], &old[i]);
 
-	(*pp_new)[i].type  = SEC_ACE_TYPE_ACCESS_ALLOWED;
+	(*pp_new)[i].type  = 0;
 	(*pp_new)[i].flags = 0;
-	(*pp_new)[i].size  = SEC_ACE_HEADER_SIZE + ndr_size_dom_sid(sid, 0);
+	(*pp_new)[i].size  = SEC_ACE_HEADER_SIZE + sid_size(sid);
 	(*pp_new)[i].access_mask = mask;
 	sid_copy(&(*pp_new)[i].trustee, sid);
 	return NT_STATUS_OK;
@@ -147,7 +149,7 @@
  Compares two SEC_ACE structures
 ********************************************************************/
 
-bool sec_ace_equal(SEC_ACE *s1, SEC_ACE *s2)
+BOOL sec_ace_equal(SEC_ACE *s1, SEC_ACE *s2)
 {
 	/* Trivial case */
 
@@ -280,7 +282,7 @@
  Check if this ACE has a SID in common with the token.
 ********************************************************************/
 
-bool token_sid_in_ace(const NT_USER_TOKEN *token, const SEC_ACE *ace)
+BOOL token_sid_in_ace(const NT_USER_TOKEN *token, const SEC_ACE *ace)
 {
 	size_t i;
 

Modified: branches/samba/upstream/source/lib/secacl.c
===================================================================
--- branches/samba/upstream/source/lib/secacl.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/secacl.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -26,8 +27,7 @@
  Create a SEC_ACL structure.  
 ********************************************************************/
 
-SEC_ACL *make_sec_acl(TALLOC_CTX *ctx, enum security_acl_revision revision,
-		      int num_aces, SEC_ACE *ace_list)
+SEC_ACL *make_sec_acl(TALLOC_CTX *ctx, uint16 revision, int num_aces, SEC_ACE *ace_list)
 {
 	SEC_ACL *dst;
 	int i;
@@ -75,7 +75,7 @@
  Compares two SEC_ACL structures
 ********************************************************************/
 
-bool sec_acl_equal(SEC_ACL *s1, SEC_ACL *s2)
+BOOL sec_acl_equal(SEC_ACL *s1, SEC_ACL *s2)
 {
 	unsigned int i, j;
 
@@ -102,7 +102,7 @@
 	   each ACE in s2. */
 
 	for (i = 0; i < s1->num_aces; i++) {
-		bool found = False;
+		BOOL found = False;
 
 		for (j = 0; j < s2->num_aces; j++) {
 			if (sec_ace_equal(&s1->aces[i], &s2->aces[j])) {

Modified: branches/samba/upstream/source/lib/secdesc.c
===================================================================
--- branches/samba/upstream/source/lib/secdesc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/secdesc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -17,14 +17,15 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
 
 /* Map generic permissions to file object specific permissions */
 
-const struct generic_mapping file_generic_mapping = {
+struct generic_mapping file_generic_mapping = {
 	FILE_GENERIC_READ,
 	FILE_GENERIC_WRITE,
 	FILE_GENERIC_EXECUTE,
@@ -32,10 +33,39 @@
 };
 
 /*******************************************************************
+ Works out the linearization size of a SEC_DESC.
+********************************************************************/
+
+size_t sec_desc_size(SEC_DESC *psd)
+{
+	size_t offset;
+
+	if (!psd) return 0;
+
+	offset = SEC_DESC_HEADER_SIZE;
+
+	/* don't align */
+
+	if (psd->owner_sid != NULL)
+		offset += sid_size(psd->owner_sid);
+
+	if (psd->group_sid != NULL)
+		offset += sid_size(psd->group_sid);
+
+	if (psd->sacl != NULL)
+		offset += psd->sacl->size;
+
+	if (psd->dacl != NULL)
+		offset += psd->dacl->size;
+
+	return offset;
+}
+
+/*******************************************************************
  Compares two SEC_DESC structures
 ********************************************************************/
 
-bool sec_desc_equal(SEC_DESC *s1, SEC_DESC *s2)
+BOOL sec_desc_equal(SEC_DESC *s1, SEC_DESC *s2)
 {
 	/* Trivial case */
 
@@ -64,16 +94,24 @@
 	/* Check owner and group */
 
 	if (!sid_equal(s1->owner_sid, s2->owner_sid)) {
+		fstring str1, str2;
+
+		sid_to_string(str1, s1->owner_sid);
+		sid_to_string(str2, s2->owner_sid);
+
 		DEBUG(10, ("sec_desc_equal(): owner differs (%s != %s)\n",
-			   sid_string_dbg(s1->owner_sid),
-			   sid_string_dbg(s2->owner_sid)));
+			   str1, str2));
 		return False;
 	}
 
 	if (!sid_equal(s1->group_sid, s2->group_sid)) {
+		fstring str1, str2;
+
+		sid_to_string(str1, s1->group_sid);
+		sid_to_string(str2, s2->group_sid);
+
 		DEBUG(10, ("sec_desc_equal(): group differs (%s != %s)\n",
-			   sid_string_dbg(s1->group_sid),
-			   sid_string_dbg(s2->group_sid)));
+			   str1, str2));
 		return False;
 	}
 
@@ -116,13 +154,13 @@
 	/* Copy over owner and group sids.  There seems to be no flag for
 	   this so just check the pointer values. */
 
-	owner_sid = new_sdb->sd->owner_sid ? new_sdb->sd->owner_sid :
-		old_sdb->sd->owner_sid;
+	owner_sid = new_sdb->sec->owner_sid ? new_sdb->sec->owner_sid :
+		old_sdb->sec->owner_sid;
 
-	group_sid = new_sdb->sd->group_sid ? new_sdb->sd->group_sid :
-		old_sdb->sd->group_sid;
+	group_sid = new_sdb->sec->group_sid ? new_sdb->sec->group_sid :
+		old_sdb->sec->group_sid;
 	
-	secdesc_type = new_sdb->sd->type;
+	secdesc_type = new_sdb->sec->type;
 
 	/* Ignore changes to the system ACL.  This has the effect of making
 	   changes through the security tab audit button not sticking. 
@@ -134,14 +172,14 @@
 	/* Copy across discretionary ACL */
 
 	if (secdesc_type & SEC_DESC_DACL_PRESENT) {
-		dacl = new_sdb->sd->dacl;
+		dacl = new_sdb->sec->dacl;
 	} else {
-		dacl = old_sdb->sd->dacl;
+		dacl = old_sdb->sec->dacl;
 	}
 
 	/* Create new security descriptor from bits */
 
-	psd = make_sec_desc(ctx, new_sdb->sd->revision, secdesc_type,
+	psd = make_sec_desc(ctx, new_sdb->sec->revision, secdesc_type,
 			    owner_sid, group_sid, sacl, dacl, &secdesc_size);
 
 	return_sdb = make_sec_desc_buf(ctx, secdesc_size, psd);
@@ -153,10 +191,8 @@
  Creates a SEC_DESC structure
 ********************************************************************/
 
-SEC_DESC *make_sec_desc(TALLOC_CTX *ctx,
-			enum security_descriptor_revision revision,
-			uint16 type,
-			const DOM_SID *owner_sid, const DOM_SID *grp_sid,
+SEC_DESC *make_sec_desc(TALLOC_CTX *ctx, uint16 revision, uint16 type,
+			const DOM_SID *owner_sid, const DOM_SID *group_sid,
 			SEC_ACL *sacl, SEC_ACL *dacl, size_t *sd_size)
 {
 	SEC_DESC *dst;
@@ -175,21 +211,21 @@
 	if (dacl)
 		dst->type |= SEC_DESC_DACL_PRESENT;
 
-	dst->owner_sid = NULL;
-	dst->group_sid   = NULL;
-	dst->sacl      = NULL;
-	dst->dacl      = NULL;
+	dst->off_owner_sid = 0;
+	dst->off_grp_sid   = 0;
+	dst->off_sacl      = 0;
+	dst->off_dacl      = 0;
 
-	if(owner_sid && ((dst->owner_sid = sid_dup_talloc(dst,owner_sid)) == NULL))
+	if(owner_sid && ((dst->owner_sid = sid_dup_talloc(ctx,owner_sid)) == NULL))
 		goto error_exit;
 
-	if(grp_sid && ((dst->group_sid = sid_dup_talloc(dst,grp_sid)) == NULL))
+	if(group_sid && ((dst->group_sid = sid_dup_talloc(ctx,group_sid)) == NULL))
 		goto error_exit;
 
-	if(sacl && ((dst->sacl = dup_sec_acl(dst, sacl)) == NULL))
+	if(sacl && ((dst->sacl = dup_sec_acl(ctx, sacl)) == NULL))
 		goto error_exit;
 
-	if(dacl && ((dst->dacl = dup_sec_acl(dst, dacl)) == NULL))
+	if(dacl && ((dst->dacl = dup_sec_acl(ctx, dacl)) == NULL))
 		goto error_exit;
 
 	offset = SEC_DESC_HEADER_SIZE;
@@ -199,18 +235,22 @@
 	 */
 
 	if (dst->sacl != NULL) {
+		dst->off_sacl = offset;
 		offset += dst->sacl->size;
 	}
 	if (dst->dacl != NULL) {
+		dst->off_dacl = offset;
 		offset += dst->dacl->size;
 	}
 
 	if (dst->owner_sid != NULL) {
-		offset += ndr_size_dom_sid(dst->owner_sid, 0);
+		dst->off_owner_sid = offset;
+		offset += sid_size(dst->owner_sid);
 	}
 
 	if (dst->group_sid != NULL) {
-		offset += ndr_size_dom_sid(dst->group_sid, 0);
+		dst->off_grp_sid = offset;
+		offset += sid_size(dst->group_sid);
 	}
 
 	*sd_size = (size_t)offset;
@@ -239,76 +279,14 @@
 }
 
 /*******************************************************************
- Convert a secdesc into a byte stream
-********************************************************************/
-NTSTATUS marshall_sec_desc(TALLOC_CTX *mem_ctx,
-			   struct security_descriptor *secdesc,
-			   uint8 **data, size_t *len)
-{
-	DATA_BLOB blob;
-	enum ndr_err_code ndr_err;
-
-	ndr_err = ndr_push_struct_blob(
-		&blob, mem_ctx, secdesc,
-		(ndr_push_flags_fn_t)ndr_push_security_descriptor);
-
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		DEBUG(0, ("ndr_push_security_descriptor failed: %s\n",
-			  ndr_errstr(ndr_err)));
-		return ndr_map_error2ntstatus(ndr_err);;
-	}
-
-	*data = blob.data;
-	*len = blob.length;
-	return NT_STATUS_OK;
-}
-
-/*******************************************************************
- Parse a byte stream into a secdesc
-********************************************************************/
-NTSTATUS unmarshall_sec_desc(TALLOC_CTX *mem_ctx, uint8 *data, size_t len,
-			     struct security_descriptor **psecdesc)
-{
-	DATA_BLOB blob;
-	enum ndr_err_code ndr_err;
-	struct security_descriptor *result;
-
-	if ((data == NULL) || (len == 0)) {
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	result = TALLOC_ZERO_P(mem_ctx, struct security_descriptor);
-	if (result == NULL) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	blob = data_blob_const(data, len);
-
-	ndr_err = ndr_pull_struct_blob(
-		&blob, result, result,
-		(ndr_pull_flags_fn_t)ndr_pull_security_descriptor);
-
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		DEBUG(0, ("ndr_pull_security_descriptor failed: %s\n",
-			  ndr_errstr(ndr_err)));
-		TALLOC_FREE(result);
-		return ndr_map_error2ntstatus(ndr_err);;
-	}
-
-	*psecdesc = result;
-	return NT_STATUS_OK;
-}
-
-/*******************************************************************
  Creates a SEC_DESC structure with typical defaults.
 ********************************************************************/
 
-SEC_DESC *make_standard_sec_desc(TALLOC_CTX *ctx, const DOM_SID *owner_sid, const DOM_SID *grp_sid,
+SEC_DESC *make_standard_sec_desc(TALLOC_CTX *ctx, const DOM_SID *owner_sid, const DOM_SID *group_sid,
 				 SEC_ACL *dacl, size_t *sd_size)
 {
-	return make_sec_desc(ctx, SECURITY_DESCRIPTOR_REVISION_1,
-			     SEC_DESC_SELF_RELATIVE, owner_sid, grp_sid, NULL,
-			     dacl, sd_size);
+	return make_sec_desc(ctx, SEC_DESC_REVISION, SEC_DESC_SELF_RELATIVE,
+			     owner_sid, group_sid, NULL, dacl, sd_size);
 }
 
 /*******************************************************************
@@ -323,12 +301,15 @@
 		return NULL;
 
 	/* max buffer size (allocated size) */
-	dst->sd_size = (uint32)len;
+	dst->max_len = (uint32)len;
+	dst->len = (uint32)len;
 	
-	if(sec_desc && ((dst->sd = dup_sec_desc(ctx, sec_desc)) == NULL)) {
+	if(sec_desc && ((dst->sec = dup_sec_desc(ctx, sec_desc)) == NULL)) {
 		return NULL;
 	}
 
+	dst->ptr = 0x1;
+
 	return dst;
 }
 
@@ -341,7 +322,7 @@
 	if(src == NULL)
 		return NULL;
 
-	return make_sec_desc_buf( ctx, src->sd_size, src->sd);
+	return make_sec_desc_buf( ctx, src->len, src->sec);
 }
 
 /*******************************************************************
@@ -434,7 +415,7 @@
    non-container object. */
 
 SEC_DESC_BUF *se_create_child_secdesc(TALLOC_CTX *ctx, SEC_DESC *parent_ctr, 
-				      bool child_container)
+				      BOOL child_container)
 {
 	SEC_DESC_BUF *sdb;
 	SEC_DESC *sd;
@@ -460,7 +441,8 @@
 		SEC_ACE *ace = &the_acl->aces[i];
 		SEC_ACE *new_ace = &new_ace_list[new_ace_list_ndx];
 		uint8 new_flags = 0;
-		bool inherit = False;
+		BOOL inherit = False;
+		fstring sid_str;
 
 		/* The OBJECT_INHERIT_ACE flag causes the ACE to be
 		   inherited by non-container children objects.  Container
@@ -516,12 +498,12 @@
 		init_sec_ace(new_ace, &ace->trustee, ace->type,
 			     new_ace->access_mask, new_flags);
 
+		sid_to_string(sid_str, &ace->trustee);
+
 		DEBUG(5, ("se_create_child_secdesc(): %s:%d/0x%02x/0x%08x "
-			  " inherited as %s:%d/0x%02x/0x%08x\n",
-			  sid_string_dbg(&ace->trustee),
+			  " inherited as %s:%d/0x%02x/0x%08x\n", sid_str,
 			  ace->type, ace->flags, ace->access_mask,
-			  sid_string_dbg(&ace->trustee),
-			  new_ace->type, new_ace->flags,
+			  sid_str, new_ace->type, new_ace->flags,
 			  new_ace->access_mask));
 
 		new_ace_list_ndx++;
@@ -535,8 +517,7 @@
 	   correct.  Perhaps the user and group should be passed in as
 	   parameters by the caller? */
 
-	sd = make_sec_desc(ctx, SECURITY_DESCRIPTOR_REVISION_1,
-			   SEC_DESC_SELF_RELATIVE,
+	sd = make_sec_desc(ctx, SEC_DESC_REVISION, SEC_DESC_SELF_RELATIVE,
 			   parent_ctr->owner_sid,
 			   parent_ctr->group_sid,
 			   parent_ctr->sacl,
@@ -551,9 +532,7 @@
  Sets up a SEC_ACCESS structure.
 ********************************************************************/
 
-void init_sec_access(uint32 *t, uint32 mask)
+void init_sec_access(SEC_ACCESS *t, uint32 mask)
 {
 	*t = mask;
 }
-
-

Modified: branches/samba/upstream/source/lib/select.c
===================================================================
--- branches/samba/upstream/source/lib/select.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/select.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -58,8 +59,7 @@
 	fd_set *readfds2, readfds_buf;
 
 	if (initialised != sys_getpid()) {
-		if (pipe(select_pipe) == -1)
-			smb_panic("Could not create select pipe");
+		pipe(select_pipe);
 
 		/*
 		 * These next two lines seem to fix a bug with the Linux
@@ -71,9 +71,9 @@
 		 */
 
 		if(set_blocking(select_pipe[0],0)==-1)
-			smb_panic("select_pipe[0]: O_NONBLOCK failed");
+			smb_panic("select_pipe[0]: O_NONBLOCK failed.\n");
 		if(set_blocking(select_pipe[1],0)==-1)
-			smb_panic("select_pipe[1]: O_NONBLOCK failed");
+			smb_panic("select_pipe[1]: O_NONBLOCK failed.\n");
 
 		initialised = sys_getpid();
 	}

Modified: branches/samba/upstream/source/lib/sendfile.c
===================================================================
--- branches/samba/upstream/source/lib/sendfile.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/sendfile.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 
  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
+ the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.
  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -14,7 +14,8 @@
  GNU General Public License for more details.
 
  You should have received a copy of the GNU General Public License
- along with this program; if not, see <http://www.gnu.org/licenses/>.
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /*

Modified: branches/samba/upstream/source/lib/server_mutex.c
===================================================================
--- branches/samba/upstream/source/lib/server_mutex.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/server_mutex.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -28,51 +29,28 @@
    This locking allows smbd's mutlithread architecture to look
    like the single-connection that NT makes. */
 
-struct named_mutex {
-	struct tdb_wrap *tdb;
-	char *name;
-};
+static char *mutex_server_name;
 
-static int unlock_named_mutex(struct named_mutex *mutex)
+BOOL grab_server_mutex(const char *name)
 {
-	tdb_unlock_bystring(mutex->tdb->tdb, mutex->name);
-	return 0;
-}
-
-struct named_mutex *grab_named_mutex(TALLOC_CTX *mem_ctx, const char *name,
-				     int timeout)
-{
-	struct named_mutex *result;
-
-	result = talloc(mem_ctx, struct named_mutex);
-	if (result == NULL) {
-		DEBUG(0, ("talloc failed\n"));
-		return NULL;
+	mutex_server_name = SMB_STRDUP(name);
+	if (!mutex_server_name) {
+		DEBUG(0,("grab_server_mutex: malloc failed for %s\n", name));
+		return False;
 	}
-
-	result->name = talloc_strdup(result, name);
-	if (result->name == NULL) {
-		DEBUG(0, ("talloc failed\n"));
-		TALLOC_FREE(result);
-		return NULL;
+	if (!secrets_named_mutex(mutex_server_name, 10)) {
+		DEBUG(10,("grab_server_mutex: failed for %s\n", name));
+		SAFE_FREE(mutex_server_name);
+		return False;
 	}
 
-	result->tdb = tdb_wrap_open(result, lock_path("mutex.tdb"), 0,
-				    TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
-	if (result->tdb == NULL) {
-		DEBUG(1, ("Could not open mutex.tdb: %s\n",
-			  strerror(errno)));
-		TALLOC_FREE(result);
-		return NULL;
-	}
+	return True;
+}
 
-	if (tdb_lock_bystring_with_timeout(result->tdb->tdb, name,
-					   timeout) == -1) {
-		DEBUG(1, ("Could not get the lock for %s\n", name));
-		TALLOC_FREE(result);
-		return NULL;
+void release_server_mutex(void)
+{
+	if (mutex_server_name) {
+		secrets_named_mutex_release(mutex_server_name);
+		SAFE_FREE(mutex_server_name);
 	}
-
-	talloc_set_destructor(result, unlock_named_mutex);
-	return result;
 }

Modified: branches/samba/upstream/source/lib/sharesec.c
===================================================================
--- branches/samba/upstream/source/lib/sharesec.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/sharesec.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -23,103 +24,54 @@
  Create the share security tdb.
  ********************************************************************/
 
-static struct db_context *share_db; /* used for share security descriptors */
+static TDB_CONTEXT *share_tdb; /* used for share security descriptors */
 #define SHARE_DATABASE_VERSION_V1 1
 #define SHARE_DATABASE_VERSION_V2 2 /* version id in little endian. */
 
 /* Map generic permissions to file object specific permissions */
 
-static const struct generic_mapping file_generic_mapping = {
+static struct generic_mapping file_generic_mapping = {
         FILE_GENERIC_READ,
         FILE_GENERIC_WRITE,
         FILE_GENERIC_EXECUTE,
         FILE_GENERIC_ALL
 };
 
-static int delete_fn(struct db_record *rec, void *priv)
-{
-	rec->delete_rec(rec);
-	return 0;
-}
 
-static bool share_info_db_init(void)
+BOOL share_info_db_init(void)
 {
 	const char *vstring = "INFO/version";
 	int32 vers_id;
  
-	if (share_db != NULL) {
+	if (share_tdb) {
 		return True;
 	}
 
-	share_db = db_open_trans(NULL, state_path("share_info.tdb"), 0,
-				 TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
-	if (share_db == NULL) {
+	share_tdb = tdb_open_log(lock_path("share_info.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
+	if (!share_tdb) {
 		DEBUG(0,("Failed to open share info database %s (%s)\n",
-			state_path("share_info.tdb"), strerror(errno) ));
+			lock_path("share_info.tdb"), strerror(errno) ));
 		return False;
 	}
  
-	vers_id = dbwrap_fetch_int32(share_db, vstring);
-	if (vers_id == SHARE_DATABASE_VERSION_V2) {
-		return true;
-	}
+	/* handle a Samba upgrade */
+	tdb_lock_bystring(share_tdb, vstring);
 
-	if (share_db->transaction_start(share_db) != 0) {
-		DEBUG(0, ("transaction_start failed\n"));
-		TALLOC_FREE(share_db);
-		return false;
-	}
-
-	vers_id = dbwrap_fetch_int32(share_db, vstring);
-	if (vers_id == SHARE_DATABASE_VERSION_V2) {
-		/*
-		 * Race condition
-		 */
-		if (share_db->transaction_cancel(share_db)) {
-			smb_panic("transaction_cancel failed");
-		}
-		return true;
-	}
-
 	/* Cope with byte-reversed older versions of the db. */
+	vers_id = tdb_fetch_int32(share_tdb, vstring);
 	if ((vers_id == SHARE_DATABASE_VERSION_V1) || (IREV(vers_id) == SHARE_DATABASE_VERSION_V1)) {
 		/* Written on a bigendian machine with old fetch_int code. Save as le. */
-
-		if (dbwrap_store_int32(share_db, vstring,
-				       SHARE_DATABASE_VERSION_V2) != 0) {
-			DEBUG(0, ("dbwrap_store_int32 failed\n"));
-			goto cancel;
-		}
+		tdb_store_int32(share_tdb, vstring, SHARE_DATABASE_VERSION_V2);
 		vers_id = SHARE_DATABASE_VERSION_V2;
 	}
 
 	if (vers_id != SHARE_DATABASE_VERSION_V2) {
-		int ret;
-		ret = share_db->traverse(share_db, delete_fn, NULL);
-		if (ret < 0) {
-			DEBUG(0, ("traverse failed\n"));
-			goto cancel;
-		}
-		if (dbwrap_store_int32(share_db, vstring,
-				       SHARE_DATABASE_VERSION_V2) != 0) {
-			DEBUG(0, ("dbwrap_store_int32 failed\n"));
-			goto cancel;
-		}
+		tdb_traverse(share_tdb, tdb_traverse_delete_fn, NULL);
+		tdb_store_int32(share_tdb, vstring, SHARE_DATABASE_VERSION_V2);
 	}
+	tdb_unlock_bystring(share_tdb, vstring);
 
-	if (share_db->transaction_commit(share_db) != 0) {
-		DEBUG(0, ("transaction_commit failed\n"));
-		goto cancel;
-	}
-
-	return true;
-
- cancel:
-	if (share_db->transaction_cancel(share_db)) {
-		smb_panic("transaction_cancel failed");
-	}
-
-	return false;
+	return True;
 }
 
 /*******************************************************************
@@ -141,9 +93,7 @@
 	init_sec_ace(&ace, &global_sid_World, SEC_ACE_TYPE_ACCESS_ALLOWED, sa, 0);
 
 	if ((psa = make_sec_acl(ctx, NT4_ACL_REVISION, 1, &ace)) != NULL) {
-		psd = make_sec_desc(ctx, SECURITY_DESCRIPTOR_REVISION_1,
-				    SEC_DESC_SELF_RELATIVE, NULL, NULL, NULL,
-				    psa, psize);
+		psd = make_sec_desc(ctx, SEC_DESC_REVISION, SEC_DESC_SELF_RELATIVE, NULL, NULL, NULL, psa, psize);
 	}
 
 	if (!psd) {
@@ -161,42 +111,33 @@
 SEC_DESC *get_share_security( TALLOC_CTX *ctx, const char *servicename,
 			      size_t *psize)
 {
-	char *key;
+	prs_struct ps;
+	fstring key;
 	SEC_DESC *psd = NULL;
-	TDB_DATA data;
-	NTSTATUS status;
 
 	if (!share_info_db_init()) {
 		return NULL;
 	}
 
-	if (!(key = talloc_asprintf(ctx, "SECDESC/%s", servicename))) {
-		DEBUG(0, ("talloc_asprintf failed\n"));
-		return NULL;
-	}
+	*psize = 0;
 
-	data = dbwrap_fetch_bystring(share_db, talloc_tos(), key);
-
-	TALLOC_FREE(key);
-
-	if (data.dptr == NULL) {
-		return get_share_security_default(ctx, psize,
-						  GENERIC_ALL_ACCESS);
+	/* Fetch security descriptor from tdb */
+ 
+	slprintf(key, sizeof(key)-1, "SECDESC/%s", servicename);
+ 
+	if (tdb_prs_fetch(share_tdb, key, &ps, ctx)!=0 ||
+		!sec_io_desc("get_share_security", &psd, &ps, 1)) {
+ 
+		DEBUG(4, ("get_share_security: using default secdesc for %s\n",
+			  servicename));
+ 
+		return get_share_security_default(ctx, psize, GENERIC_ALL_ACCESS);
 	}
 
-	status = unmarshall_sec_desc(ctx, data.dptr, data.dsize, &psd);
-
-	TALLOC_FREE(data.dptr);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0, ("unmarshall_sec_desc failed: %s\n",
-			  nt_errstr(status)));
-		return NULL;
-	}
-
 	if (psd)
-		*psize = ndr_size_security_descriptor(psd, 0);
+		*psize = sec_desc_size(psd);
 
+	prs_mem_free(&ps);
 	return psd;
 }
 
@@ -204,46 +145,42 @@
  Store a security descriptor in the share db.
  ********************************************************************/
 
-bool set_share_security(const char *share_name, SEC_DESC *psd)
+BOOL set_share_security(const char *share_name, SEC_DESC *psd)
 {
-	TALLOC_CTX *frame;
-	char *key;
-	bool ret = False;
-	TDB_DATA blob;
-	NTSTATUS status;
+	prs_struct ps;
+	TALLOC_CTX *mem_ctx = NULL;
+	fstring key;
+	BOOL ret = False;
 
 	if (!share_info_db_init()) {
 		return False;
 	}
 
-	frame = talloc_stackframe();
+	mem_ctx = talloc_init("set_share_security");
+	if (mem_ctx == NULL)
+		return False;
 
-	status = marshall_sec_desc(frame, psd, &blob.dptr, &blob.dsize);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0, ("marshall_sec_desc failed: %s\n",
-			  nt_errstr(status)));
+	prs_init(&ps, (uint32)sec_desc_size(psd), mem_ctx, MARSHALL);
+ 
+	if (!sec_io_desc("share_security", &psd, &ps, 1))
 		goto out;
-	}
+ 
+	slprintf(key, sizeof(key)-1, "SECDESC/%s", share_name);
+ 
+	if (tdb_prs_store(share_tdb, key, &ps)==0) {
+		ret = True;
+		DEBUG(5,("set_share_security: stored secdesc for %s\n", share_name ));
+	} else {
+		DEBUG(1,("set_share_security: Failed to store secdesc for %s\n", share_name ));
+	} 
 
-	if (!(key = talloc_asprintf(frame, "SECDESC/%s", share_name))) {
-		DEBUG(0, ("talloc_asprintf failed\n"));
-		goto out;
-	}
-
-	status = dbwrap_trans_store(share_db, string_term_tdb_data(key), blob,
-				    TDB_REPLACE);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(1, ("set_share_security: Failed to store secdesc for "
-			  "%s: %s\n", share_name, nt_errstr(status)));
-		goto out;
-	}
-
-	DEBUG(5,("set_share_security: stored secdesc for %s\n", share_name ));
-	ret = True;
-
- out:
-	TALLOC_FREE(frame);
+	/* Free malloc'ed memory */
+ 
+out:
+ 
+	prs_mem_free(&ps);
+	if (mem_ctx)
+		talloc_destroy(mem_ctx);
 	return ret;
 }
 
@@ -251,22 +188,19 @@
  Delete a security descriptor.
 ********************************************************************/
 
-bool delete_share_security(const char *servicename)
+BOOL delete_share_security(const struct share_params *params)
 {
 	TDB_DATA kbuf;
-	char *key;
-	NTSTATUS status;
+	fstring key;
 
-	if (!(key = talloc_asprintf(talloc_tos(), "SECDESC/%s",
-				    servicename))) {
-		return False;
-	}
-	kbuf = string_term_tdb_data(key);
+	slprintf(key, sizeof(key)-1, "SECDESC/%s",
+		 lp_servicename(params->service));
+	kbuf.dptr = key;
+	kbuf.dsize = strlen(key)+1;
 
-	status = dbwrap_trans_delete(share_db, kbuf);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0, ("delete_share_security: Failed to delete entry for "
-			  "share %s: %s\n", servicename, nt_errstr(status)));
+	if (tdb_trans_delete(share_tdb, kbuf) != 0) {
+		DEBUG(0,("delete_share_security: Failed to delete entry for share %s\n",
+			 lp_servicename(params->service) ));
 		return False;
 	}
 
@@ -277,25 +211,30 @@
  Can this user access with share with the required permissions ?
 ********************************************************************/
 
-bool share_access_check(const NT_USER_TOKEN *token, const char *sharename,
+BOOL share_access_check(const NT_USER_TOKEN *token, const char *sharename,
 			uint32 desired_access)
 {
 	uint32 granted;
 	NTSTATUS status;
+	TALLOC_CTX *mem_ctx = NULL;
 	SEC_DESC *psd = NULL;
 	size_t sd_size;
-	bool ret = True;
+	BOOL ret = True;
 
-	psd = get_share_security(talloc_tos(), sharename, &sd_size);
+	if (!(mem_ctx = talloc_init("share_access_check"))) {
+		return False;
+	}
 
+	psd = get_share_security(mem_ctx, sharename, &sd_size);
+
 	if (!psd) {
+		TALLOC_FREE(mem_ctx);
 		return True;
 	}
 
 	ret = se_access_check(psd, token, desired_access, &granted, &status);
 
-	TALLOC_FREE(psd);
-
+	talloc_destroy(mem_ctx);
 	return ret;
 }
 
@@ -303,7 +242,7 @@
  Parse the contents of an acl string from a usershare file.
 ***************************************************************************/
 
-bool parse_usershare_acl(TALLOC_CTX *ctx, const char *acl_str, SEC_DESC **ppsd)
+BOOL parse_usershare_acl(TALLOC_CTX *ctx, const char *acl_str, SEC_DESC **ppsd)
 {
 	size_t s_size = 0;
 	const char *pacl = acl_str;
@@ -341,10 +280,10 @@
 		uint32 g_access;
 		uint32 s_access;
 		DOM_SID sid;
-		char *sidstr;
-		enum security_ace_type type = SEC_ACE_TYPE_ACCESS_ALLOWED;
+		fstring sidstr;
+		uint8 type = SEC_ACE_TYPE_ACCESS_ALLOWED;
 
-		if (!next_token_talloc(ctx, &pacl, &sidstr, ":")) {
+		if (!next_token(&pacl, sidstr, ":", sizeof(sidstr))) {
 			DEBUG(0,("parse_usershare_acl: malformed usershare acl looking "
 				"for ':' in string '%s'\n", pacl));
 			return False;
@@ -390,9 +329,7 @@
 	}
 
 	if ((psa = make_sec_acl(ctx, NT4_ACL_REVISION, num_aces, ace_list)) != NULL) {
-		psd = make_sec_desc(ctx, SECURITY_DESCRIPTOR_REVISION_1,
-				    SEC_DESC_SELF_RELATIVE, NULL, NULL, NULL,
-				    psa, &sd_size);
+		psd = make_sec_desc(ctx, SEC_DESC_REVISION, SEC_DESC_SELF_RELATIVE, NULL, NULL, NULL, psa, &sd_size);
 	}
 
 	if (!psd) {

Modified: branches/samba/upstream/source/lib/signal.c
===================================================================
--- branches/samba/upstream/source/lib/signal.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/signal.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -63,7 +64,7 @@
  Block sigs.
 ********************************************************************/
 
-void BlockSignals(bool block,int signum)
+void BlockSignals(BOOL block,int signum)
 {
 #ifdef HAVE_SIGPROCMASK
 	sigset_t set;

Modified: branches/samba/upstream/source/lib/smbldap.c
===================================================================
--- branches/samba/upstream/source/lib/smbldap.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/smbldap.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
     
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -261,7 +262,7 @@
  Search an attribute and return the first value found.
 ******************************************************************/
 
- bool smbldap_get_single_attribute (LDAP * ldap_struct, LDAPMessage * entry,
+ BOOL smbldap_get_single_attribute (LDAP * ldap_struct, LDAPMessage * entry,
 				    const char *attribute, char *value,
 				    int max_len)
 {
@@ -292,6 +293,14 @@
 	return True;
 }
 
+ BOOL smbldap_get_single_pstring (LDAP * ldap_struct, LDAPMessage * entry,
+				  const char *attribute, pstring value)
+{
+	return smbldap_get_single_attribute(ldap_struct, entry,
+					    attribute, value, 
+					    sizeof(pstring));
+}
+
  char * smbldap_talloc_single_attribute(LDAP *ldap_struct, LDAPMessage *entry,
 					const char *attribute,
 					TALLOC_CTX *mem_ctx)
@@ -400,8 +409,9 @@
 	if (mods == NULL) {
 		mods = SMB_MALLOC_P(LDAPMod *);
 		if (mods == NULL) {
-			smb_panic("smbldap_set_mod: out of memory!");
+			smb_panic("smbldap_set_mod: out of memory!\n");
 			/* notreached. */
+			abort();
 		}
 		mods[0] = NULL;
 	}
@@ -414,13 +424,15 @@
 	if (mods[i] == NULL) {
 		mods = SMB_REALLOC_ARRAY (mods, LDAPMod *, i + 2);
 		if (mods == NULL) {
-			smb_panic("smbldap_set_mod: out of memory!");
+			smb_panic("smbldap_set_mod: out of memory!\n");
 			/* notreached. */
+			abort();
 		}
 		mods[i] = SMB_MALLOC_P(LDAPMod);
 		if (mods[i] == NULL) {
-			smb_panic("smbldap_set_mod: out of memory!");
+			smb_panic("smbldap_set_mod: out of memory!\n");
 			/* notreached. */
+			abort();
 		}
 		mods[i]->mod_op = modop;
 		mods[i]->mod_values = NULL;
@@ -438,13 +450,15 @@
 		mods[i]->mod_values = SMB_REALLOC_ARRAY(mods[i]->mod_values, char *, j + 2);
 					       
 		if (mods[i]->mod_values == NULL) {
-			smb_panic("smbldap_set_mod: out of memory!");
+			smb_panic("smbldap_set_mod: out of memory!\n");
 			/* notreached. */
+			abort();
 		}
 
 		if (push_utf8_allocate(&utf8_value, value) == (size_t)-1) {
-			smb_panic("smbldap_set_mod: String conversion failure!");
+			smb_panic("smbldap_set_mod: String conversion failure!\n");
 			/* notreached. */
+			abort();
 		}
 
 		mods[i]->mod_values[j] = utf8_value;
@@ -464,7 +478,7 @@
 		      const char *attribute, const char *newval)
 {
 	char oldval[2048]; /* current largest allowed value is mungeddial */
-	bool existed;
+	BOOL existed;
 
 	if (attribute == NULL) {
 		/* This can actually happen for ldapsam_compat where we for
@@ -670,33 +684,9 @@
 			return LDAP_OPERATIONS_ERROR;
 #endif /* LDAP_OPT_X_TLS */
 		}
-	}
-#endif /* HAVE_LDAP_INITIALIZE */
 
-
-	/* now set connection timeout */
-#ifdef LDAP_X_OPT_CONNECT_TIMEOUT /* Netscape */
-	{
-		int ct = lp_ldap_connection_timeout()*1000;
-		rc = ldap_set_option(*ldap_struct, LDAP_X_OPT_CONNECT_TIMEOUT, &ct);
-		if (rc != LDAP_SUCCESS) {
-			DEBUG(0,("Failed to setup an ldap connection timeout %d: %s\n",
-				ct, ldap_err2string(rc)));
-		}
 	}
-#elif defined (LDAP_OPT_NETWORK_TIMEOUT) /* OpenLDAP */
-	{
-		struct timeval ct;
-		ct.tv_usec = 0;
-		ct.tv_sec = lp_ldap_connection_timeout();
-		rc = ldap_set_option(*ldap_struct, LDAP_OPT_NETWORK_TIMEOUT, &ct);
-		if (rc != LDAP_SUCCESS) {
-			DEBUG(0,("Failed to setup an ldap connection timeout %d: %s\n",
-				(int)ct.tv_sec, ldap_err2string(rc)));
-		}
-	}
-#endif
-
+#endif /* HAVE_LDAP_INITIALIZE */
 	return LDAP_SUCCESS;
 }
 
@@ -1010,18 +1000,13 @@
 	return rc;
 }
 
-static void smbldap_idle_fn(struct event_context *event_ctx,
-			    struct timed_event *te,
-			    const struct timeval *now,
-			    void *private_data);
-
 /**********************************************************************
  Connect to LDAP server (called before every ldap operation)
 *********************************************************************/
 static int smbldap_open(struct smbldap_state *ldap_state)
 {
 	int rc, opt_rc;
-	bool reopen = False;
+	BOOL reopen = False;
 	SMB_ASSERT(ldap_state);
 		
 #ifndef NO_LDAP_SECURITY
@@ -1077,16 +1062,6 @@
 
 	ldap_state->last_ping = time(NULL);
 	ldap_state->pid = sys_getpid();
-
-	TALLOC_FREE(ldap_state->idle_event);
-
-	if (ldap_state->event_context != NULL) {
-		ldap_state->idle_event = event_add_timed(
-			ldap_state->event_context, NULL,
-			timeval_current_ofs(SMBLDAP_IDLE_TIME, 0),
-			"smbldap_idle_fn", smbldap_idle_fn, ldap_state);
-	}
-
 	DEBUG(4,("The LDAP server is successfully connected\n"));
 
 	return LDAP_SUCCESS;
@@ -1113,7 +1088,7 @@
 	return NT_STATUS_OK;
 }
 
-static bool got_alarm;
+static BOOL got_alarm;
 
 static void (*old_handler)(int);
 
@@ -1310,7 +1285,7 @@
 	BerElement 	*cookie_be = NULL;
 	struct berval 	*cookie_bv = NULL;
 	int		tmp = 0, i, rc;
-	bool 		critical = True;
+	BOOL 		critical = True;
 
 	*res = NULL;
 
@@ -1571,28 +1546,17 @@
 			      filter, search_attr, 0, result);
 }
 
-static void smbldap_idle_fn(struct event_context *event_ctx,
-			    struct timed_event *te,
-			    const struct timeval *now,
-			    void *private_data)
+static void smbldap_idle_fn(void **data, time_t *interval, time_t now)
 {
-	struct smbldap_state *state = (struct smbldap_state *)private_data;
+	struct smbldap_state *state = (struct smbldap_state *)(*data);
 
-	TALLOC_FREE(state->idle_event);
-
 	if (state->ldap_struct == NULL) {
 		DEBUG(10,("ldap connection not connected...\n"));
 		return;
 	}
 		
-	if ((state->last_use+SMBLDAP_IDLE_TIME) > now->tv_sec) {
+	if ((state->last_use+SMBLDAP_IDLE_TIME) > now) {
 		DEBUG(10,("ldap connection not idle...\n"));
-
-		state->idle_event = event_add_timed(
-			event_ctx, NULL,
-			timeval_add(now, SMBLDAP_IDLE_TIME, 0),
-			"smbldap_idle_fn", smbldap_idle_fn,
-			private_data);
 		return;
 	}
 		
@@ -1615,7 +1579,7 @@
 	SAFE_FREE((*ldap_state)->bind_dn);
 	SAFE_FREE((*ldap_state)->bind_secret);
 
-	TALLOC_FREE((*ldap_state)->idle_event);
+	smb_unregister_idle_event((*ldap_state)->event_id);
 
 	*ldap_state = NULL;
 
@@ -1627,9 +1591,7 @@
  Intitalise the 'general' ldap structures, on which ldap operations may be conducted
  *********************************************************************/
 
-NTSTATUS smbldap_init(TALLOC_CTX *mem_ctx, struct event_context *event_ctx,
-		      const char *location,
-		      struct smbldap_state **smbldap_state)
+NTSTATUS smbldap_init(TALLOC_CTX *mem_ctx, const char *location, struct smbldap_state **smbldap_state) 
 {
 	*smbldap_state = TALLOC_ZERO_P(mem_ctx, struct smbldap_state);
 	if (!*smbldap_state) {
@@ -1643,8 +1605,15 @@
 		(*smbldap_state)->uri = "ldap://localhost";
 	}
 
-	(*smbldap_state)->event_context = event_ctx;
+	(*smbldap_state)->event_id =
+		smb_register_idle_event(smbldap_idle_fn, (void *)(*smbldap_state),
+					SMBLDAP_IDLE_TIME);
 
+	if ((*smbldap_state)->event_id == SMB_EVENT_ID_INVALID) {
+		DEBUG(0,("Failed to register LDAP idle event!\n"));
+		return NT_STATUS_INVALID_HANDLE;
+	}
+
 	return NT_STATUS_OK;
 }
 
@@ -1691,13 +1660,13 @@
  Check if root-dse has a certain Control or Extension
 ********************************************************************/
 
-static bool smbldap_check_root_dse(LDAP *ld, const char **attrs, const char *value) 
+static BOOL smbldap_check_root_dse(LDAP *ld, const char **attrs, const char *value) 
 {
 	LDAPMessage *msg = NULL;
 	LDAPMessage *entry = NULL;
 	char **values = NULL;
 	int rc, num_result, num_values, i;
-	bool result = False;
+	BOOL result = False;
 
 	if (!attrs[0]) {
 		DEBUG(3,("smbldap_check_root_dse: nothing to look for\n"));
@@ -1767,7 +1736,7 @@
  Check if LDAP-Server supports a certain Control (OID in string format)
 ********************************************************************/
 
-bool smbldap_has_control(LDAP *ld, const char *control)
+BOOL smbldap_has_control(LDAP *ld, const char *control)
 {
 	const char *attrs[] = { "supportedControl", NULL };
 	return smbldap_check_root_dse(ld, attrs, control);
@@ -1777,7 +1746,7 @@
  Check if LDAP-Server supports a certain Extension (OID in string format)
 ********************************************************************/
 
-bool smbldap_has_extension(LDAP *ld, const char *extension)
+BOOL smbldap_has_extension(LDAP *ld, const char *extension)
 {
 	const char *attrs[] = { "supportedExtension", NULL };
 	return smbldap_check_root_dse(ld, attrs, extension);
@@ -1787,13 +1756,13 @@
  Check if LDAP-Server holds a given namingContext
 ********************************************************************/
 
-bool smbldap_has_naming_context(LDAP *ld, const char *naming_context)
+BOOL smbldap_has_naming_context(LDAP *ld, const char *naming_context)
 {
 	const char *attrs[] = { "namingContexts", NULL };
 	return smbldap_check_root_dse(ld, attrs, naming_context);
 }
 
-bool smbldap_set_creds(struct smbldap_state *ldap_state, bool anon, const char *dn, const char *secret)
+BOOL smbldap_set_creds(struct smbldap_state *ldap_state, BOOL anon, const char *dn, const char *secret)
 {
 	ldap_state->anonymous = anon;
 

Modified: branches/samba/upstream/source/lib/smbldap_util.c
===================================================================
--- branches/samba/upstream/source/lib/smbldap_util.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/smbldap_util.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
     
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -36,7 +37,7 @@
 	int i, rc;
 	uint32 policy_default;
 	const char *policy_attr = NULL;
-	char *dn = NULL;
+	pstring dn;
 	LDAPMod **mods = NULL;
 	char *escape_domain_name;
 
@@ -48,18 +49,16 @@
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	if (asprintf(&dn, "%s=%s,%s",
+	pstr_sprintf(dn, "%s=%s,%s", 
 		get_attr_key2string(dominfo_attr_list, LDAP_ATTR_DOMAIN),
-		escape_domain_name, lp_ldap_suffix()) < 0) {
-		SAFE_FREE(escape_domain_name);
-		return NT_STATUS_NO_MEMORY;
-	}
+		escape_domain_name, lp_ldap_suffix());
 
 	SAFE_FREE(escape_domain_name);
 
 	for (i=1; decode_account_policy_name(i) != NULL; i++) {
-		char *val = NULL;
 
+		pstring val;
+
 		policy_attr = get_account_policy_attr(i);
 		if (!policy_attr) {
 			DEBUG(0,("add_new_domain_account_policies: ops. no policy!\n"));
@@ -68,23 +67,17 @@
 
 		if (!account_policy_get_default(i, &policy_default)) {
 			DEBUG(0,("add_new_domain_account_policies: failed to get default account policy\n"));
-			SAFE_FREE(dn);
 			return ntstatus;
 		}
 
 		DEBUG(10,("add_new_domain_account_policies: adding \"%s\" with value: %d\n", policy_attr, policy_default));
 
-		if (asprintf(&val, "%d", policy_default) < 0) {
-			SAFE_FREE(dn);
-			return NT_STATUS_NO_MEMORY;
-		}
+		pstr_sprintf(val, "%d", policy_default); 
 
 		smbldap_set_mod( &mods, LDAP_MOD_REPLACE, policy_attr, val);
 
 		rc = smbldap_modify(ldap_state, dn, mods);
 
-		SAFE_FREE(val);
-
 		if (rc!=LDAP_SUCCESS) {
 			char *ld_error = NULL;
 			ldap_get_option(ldap_state->ldap_struct, LDAP_OPT_ERROR_STRING, &ld_error);
@@ -92,13 +85,11 @@
 				dn, ldap_err2string(rc),
 				ld_error ? ld_error : "unknown"));
 			SAFE_FREE(ld_error);
-			SAFE_FREE(dn);
 			ldap_mods_free(mods, True);
 			return ntstatus;
 		}
 	}
 
-	SAFE_FREE(dn);
 	ldap_mods_free(mods, True);
 
 	return NT_STATUS_OK;
@@ -111,13 +102,12 @@
  TODO:  Add other attributes, and allow modification.
 *********************************************************************/
 
-static NTSTATUS add_new_domain_info(struct smbldap_state *ldap_state,
-                                    const char *domain_name)
+static NTSTATUS add_new_domain_info(struct smbldap_state *ldap_state, 
+                                    const char *domain_name) 
 {
 	fstring sid_string;
 	fstring algorithmic_rid_base_string;
-	char *filter = NULL;
-	char *dn = NULL;
+	pstring filter, dn;
 	LDAPMod **mods = NULL;
 	int rc;
 	LDAPMessage *result = NULL;
@@ -132,33 +122,29 @@
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	if (asprintf(&filter, "(&(%s=%s)(objectclass=%s))",
-		get_attr_key2string(dominfo_attr_list, LDAP_ATTR_DOMAIN),
-			escape_domain_name, LDAP_OBJ_DOMINFO) < 0) {
-		SAFE_FREE(escape_domain_name);
-		return NT_STATUS_NO_MEMORY;
-	}
+	slprintf (filter, sizeof (filter) - 1, "(&(%s=%s)(objectclass=%s))", 
+		  get_attr_key2string(dominfo_attr_list, LDAP_ATTR_DOMAIN), 
+		  escape_domain_name, LDAP_OBJ_DOMINFO);
 
 	SAFE_FREE(escape_domain_name);
 
-	attr_list = get_attr_list(NULL, dominfo_attr_list );
+	attr_list = get_attr_list( NULL, dominfo_attr_list );
 	rc = smbldap_search_suffix(ldap_state, filter, attr_list, &result);
 	TALLOC_FREE( attr_list );
-	SAFE_FREE(filter);
 
 	if (rc != LDAP_SUCCESS) {
 		return NT_STATUS_UNSUCCESSFUL;
 	}
 
 	num_result = ldap_count_entries(ldap_state->ldap_struct, result);
-
+	
 	if (num_result > 1) {
 		DEBUG (0, ("add_new_domain_info: More than domain with that name exists: bailing "
 			   "out!\n"));
 		ldap_msgfree(result);
 		return NT_STATUS_UNSUCCESSFUL;
 	}
-
+	
 	/* Check if we need to add an entry */
 	DEBUG(3,("add_new_domain_info: Adding new domain\n"));
 
@@ -169,12 +155,9 @@
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	if (asprintf(&dn, "%s=%s,%s",
+	pstr_sprintf(dn, "%s=%s,%s",
 		     get_attr_key2string(dominfo_attr_list, LDAP_ATTR_DOMAIN),
-		     escape_domain_name, lp_ldap_suffix()) < 0) {
-		SAFE_FREE(escape_domain_name);
-		return NT_STATUS_NO_MEMORY;
-	}
+		     escape_domain_name, lp_ldap_suffix());
 
 	SAFE_FREE(escape_domain_name);
 
@@ -186,13 +169,13 @@
 
 	smbldap_set_mod(&mods, LDAP_MOD_ADD,
 			get_attr_key2string(dominfo_attr_list,
-					    LDAP_ATTR_DOMAIN),
+					    LDAP_ATTR_DOMAIN), 
 			domain_name);
 
 	/* If we don't have an entry, then ask secrets.tdb for what it thinks.
 	   It may choose to make it up */
 
-	sid_to_fstring(sid_string, get_global_sam_sid());
+	sid_to_string(sid_string, get_global_sam_sid());
 	smbldap_set_mod(&mods, LDAP_MOD_ADD,
 			get_attr_key2string(dominfo_attr_list,
 					    LDAP_ATTR_DOM_SID),
@@ -203,21 +186,21 @@
 		 algorithmic_rid_base());
 	smbldap_set_mod(&mods, LDAP_MOD_ADD,
 			get_attr_key2string(dominfo_attr_list,
-					    LDAP_ATTR_ALGORITHMIC_RID_BASE),
+					    LDAP_ATTR_ALGORITHMIC_RID_BASE), 
 			algorithmic_rid_base_string);
 	smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectclass", LDAP_OBJ_DOMINFO);
-
+	
 	/* add the sambaNextUserRid attributes. */
-
+	
 	{
 		uint32 rid = BASE_RID;
 		fstring rid_str;
-
+		
 		fstr_sprintf( rid_str, "%i", rid );
 		DEBUG(10,("add_new_domain_info: setting next available user rid [%s]\n", rid_str));
-		smbldap_set_mod(&mods, LDAP_MOD_ADD,
+		smbldap_set_mod(&mods, LDAP_MOD_ADD, 
 			get_attr_key2string(dominfo_attr_list,
-					    LDAP_ATTR_NEXT_USERRID),
+					    LDAP_ATTR_NEXT_USERRID), 
 			rid_str);
         }
 
@@ -232,14 +215,13 @@
 			 dn, ldap_err2string(rc),
 			 ld_error?ld_error:"unknown"));
 		SAFE_FREE(ld_error);
-		SAFE_FREE(dn);
+
 		ldap_mods_free(mods, True);
 		return NT_STATUS_UNSUCCESSFUL;
 	}
 
 	DEBUG(2,("add_new_domain_info: added: domain = %s in the LDAP database\n", domain_name));
 	ldap_mods_free(mods, True);
-	SAFE_FREE(dn);
 	return NT_STATUS_OK;
 }
 
@@ -249,28 +231,25 @@
 
 NTSTATUS smbldap_search_domain_info(struct smbldap_state *ldap_state,
                                     LDAPMessage ** result, const char *domain_name,
-                                    bool try_add)
+                                    BOOL try_add)
 {
 	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
-	char *filter = NULL;
+	pstring filter;
 	int rc;
 	const char **attr_list;
 	int count;
 	char *escape_domain_name;
-
+	
 	escape_domain_name = escape_ldap_string_alloc(domain_name);
 	if (!escape_domain_name) {
 		DEBUG(0, ("Out of memory!\n"));
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	if (asprintf(&filter, "(&(objectClass=%s)(%s=%s))",
+	pstr_sprintf(filter, "(&(objectClass=%s)(%s=%s))",
 		LDAP_OBJ_DOMINFO,
-		get_attr_key2string(dominfo_attr_list, LDAP_ATTR_DOMAIN),
-		escape_domain_name) < 0) {
-		SAFE_FREE(escape_domain_name);
-		return NT_STATUS_NO_MEMORY;
-	}
+		get_attr_key2string(dominfo_attr_list, LDAP_ATTR_DOMAIN), 
+		escape_domain_name);
 
 	SAFE_FREE(escape_domain_name);
 
@@ -286,17 +265,14 @@
 		goto failed;
 	}
 
-	SAFE_FREE(filter);
-
 	count = ldap_count_entries(ldap_state->ldap_struct, *result);
 
-	if (count == 1) {
+	if (count == 1)
 		return NT_STATUS_OK;
-	}
 
 	ldap_msgfree(*result);
 	*result = NULL;
-
+	
 	if (count < 1) {
 
 		DEBUG(3, ("smbldap_search_domain_info: Got no domain info entries for domain\n"));
@@ -310,7 +286,7 @@
 				domain_name, nt_errstr(status)));
 			goto failed;
 		}
-
+			
 		status = add_new_domain_account_policies(ldap_state, domain_name);
 		if (!NT_STATUS_IS_OK(status)) {
 			DEBUG(0, ("smbldap_search_domain_info: Adding domain account policies for %s failed with %s\n", 
@@ -319,7 +295,7 @@
 		}
 
 		return smbldap_search_domain_info(ldap_state, result, domain_name, False);
-
+		
 	} 
 	
 	if (count > 1 ) {

Modified: branches/samba/upstream/source/lib/smbrun.c
===================================================================
--- branches/samba/upstream/source/lib/smbrun.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/smbrun.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,20 +1,21 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    run a command as a specified user
    Copyright (C) Andrew Tridgell 1992-1998
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -27,19 +28,11 @@
 ****************************************************************************/
 
 static int setup_out_fd(void)
-{
+{  
 	int fd;
-	TALLOC_CTX *ctx = talloc_stackframe();
-	char *path = NULL;
+	pstring path;
 
-	path = talloc_asprintf(ctx,
-				"%s/smb.XXXXXX",
-				tmpdir());
-	if (!path) {
-		TALLOC_FREE(ctx);
-		errno = ENOMEM;
-		return -1;
-	}
+	slprintf(path, sizeof(path)-1, "%s/smb.XXXXXX", tmpdir());
 
 	/* now create the file */
 	fd = smb_mkstemp(path);
@@ -47,7 +40,6 @@
 	if (fd == -1) {
 		DEBUG(0,("setup_out_fd: Failed to create file %s. (%s)\n",
 			path, strerror(errno) ));
-		TALLOC_FREE(ctx);
 		return -1;
 	}
 
@@ -55,7 +47,6 @@
 
 	/* Ensure file only kept around by open fd. */
 	unlink(path);
-	TALLOC_FREE(ctx);
 	return fd;
 }
 
@@ -64,12 +55,12 @@
 outfd (or discard it if outfd is NULL).
 ****************************************************************************/
 
-static int smbrun_internal(const char *cmd, int *outfd, bool sanitize)
+static int smbrun_internal(const char *cmd, int *outfd, BOOL sanitize)
 {
 	pid_t pid;
 	uid_t uid = current_user.ut.uid;
 	gid_t gid = current_user.ut.gid;
-
+	
 	/*
 	 * Lose any elevated privileges.
 	 */

Modified: branches/samba/upstream/source/lib/sock_exec.c
===================================================================
--- branches/samba/upstream/source/lib/sock_exec.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/sock_exec.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -48,7 +49,7 @@
 #endif
         sock2.sin_family = PF_INET;
 
-        if (bind(listener, (struct sockaddr *)&sock2, sizeof(sock2)) != 0) goto failed;
+        bind(listener, (struct sockaddr *)&sock2, sizeof(sock2));
 
 	if (listen(listener, 1) != 0) goto failed;
 
@@ -60,7 +61,7 @@
 
 	sock.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
 
-	if (sys_connect(fd[1], (struct sockaddr *)&sock) == -1) {
+	if (connect(fd[1],(struct sockaddr *)&sock,sizeof(sock)) == -1) {
 		if (errno != EINPROGRESS) goto failed;
 	} else {
 		connect_done = 1;
@@ -70,7 +71,7 @@
 
 	close(listener);
 	if (connect_done == 0) {
-		if (sys_connect(fd[1], (struct sockaddr *)&sock) != 0
+		if (connect(fd[1],(struct sockaddr *)&sock,sizeof(sock)) != 0
 		    && errno != EISCONN) goto failed;
 	}
 
@@ -105,12 +106,8 @@
 		close(fd[0]);
 		close(0);
 		close(1);
-		if (dup(fd[1]) == -1) {
-			exit(1);
-		}
-		if (dup(fd[1]) == -1) {
-			exit(1);
-		}
+		dup(fd[1]);
+		dup(fd[1]);
 		exit(system(prog));
 	}
 	close(fd[1]);

Modified: branches/samba/upstream/source/lib/socket_wrapper/socket_wrapper.c
===================================================================
--- branches/samba/upstream/source/lib/socket_wrapper/socket_wrapper.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/socket_wrapper/socket_wrapper.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -71,7 +71,6 @@
 #include <unistd.h>
 #include <string.h>
 #include <stdio.h>
-#include <stdint.h>
 
 #define _PUBLIC_
 
@@ -500,67 +499,67 @@
 };
 
 struct swrap_file_hdr {
-	uint32_t	magic;
-	uint16_t	version_major;
-	uint16_t	version_minor;
-	int32_t		timezone;
-	uint32_t	sigfigs;
-	uint32_t	frame_max_len;
+	unsigned long	magic;
+	unsigned short	version_major;	
+	unsigned short	version_minor;
+	long		timezone;
+	unsigned long	sigfigs;
+	unsigned long	frame_max_len;
 #define SWRAP_FRAME_LENGTH_MAX 0xFFFF
-	uint32_t	link_type;
+	unsigned long	link_type;
 };
 #define SWRAP_FILE_HDR_SIZE 24
 
 struct swrap_packet {
 	struct {
-		uint32_t seconds;
-		uint32_t micro_seconds;
-		uint32_t recorded_length;
-		uint32_t full_length;
+		unsigned long seconds;
+		unsigned long micro_seconds;
+		unsigned long recorded_length;
+		unsigned long full_length;
 	} frame;
 #define SWRAP_PACKET__FRAME_SIZE 16
 
 	struct {
 		struct {
-			uint8_t		ver_hdrlen;
-			uint8_t		tos;
-			uint16_t	packet_length;
-			uint16_t	identification;
-			uint8_t		flags;
-			uint8_t		fragment;
-			uint8_t		ttl;
-			uint8_t		protocol;
-			uint16_t	hdr_checksum;
-			uint32_t	src_addr;
-			uint32_t	dest_addr;
+			unsigned char	ver_hdrlen;
+			unsigned char	tos;
+			unsigned short	packet_length;
+			unsigned short	identification;
+			unsigned char	flags;
+			unsigned char	fragment;
+			unsigned char	ttl;
+			unsigned char	protocol;
+			unsigned short	hdr_checksum;
+			unsigned long	src_addr;
+			unsigned long	dest_addr;
 		} hdr;
 #define SWRAP_PACKET__IP_HDR_SIZE 20
 
 		union {
 			struct {
-				uint16_t	source_port;
-				uint16_t	dest_port;
-				uint32_t	seq_num;
-				uint32_t	ack_num;
-				uint8_t		hdr_length;
-				uint8_t		control;
-				uint16_t	window;
-				uint16_t	checksum;
-				uint16_t	urg;
+				unsigned short	source_port;
+				unsigned short	dest_port;
+				unsigned long	seq_num;
+				unsigned long	ack_num;
+				unsigned char	hdr_length;
+				unsigned char	control;
+				unsigned short	window;
+				unsigned short	checksum;
+				unsigned short	urg;
 			} tcp;
 #define SWRAP_PACKET__IP_P_TCP_SIZE 20
 			struct {
-				uint16_t	source_port;
-				uint16_t	dest_port;
-				uint16_t	length;
-				uint16_t	checksum;
+				unsigned short	source_port;
+				unsigned short	dest_port;
+				unsigned short	length;
+				unsigned short	checksum;
 			} udp;
 #define SWRAP_PACKET__IP_P_UDP_SIZE 8
 			struct {
-				uint8_t		type;
-				uint8_t		code;
-				uint16_t	checksum;
-				uint32_t	unused;
+				unsigned char	type;
+				unsigned char	code;
+				unsigned short	checksum;
+				unsigned long	unused;
 			} icmp;
 #define SWRAP_PACKET__IP_P_ICMP_SIZE 8
 		} p;
@@ -572,8 +571,8 @@
 {
 	static int initialized = 0;
 	static const char *s = NULL;
-	static const struct swrap_file_hdr h = { 0, };
-	static const struct swrap_packet p = { { 0, }, { { 0, }, { { 0, } } } };
+	static const struct swrap_file_hdr h;
+	static const struct swrap_packet p;
 
 	if (initialized == 1) {
 		return s;

Modified: branches/samba/upstream/source/lib/substitute.c
===================================================================
--- branches/samba/upstream/source/lib/substitute.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/substitute.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 
@@ -23,191 +24,126 @@
 
 extern struct current_user current_user;
 
+fstring local_machine="";
+fstring remote_arch="UNKNOWN";
 userdom_struct current_user_info;
 fstring remote_proto="UNKNOWN";
 
-/**
+static fstring remote_machine;
+static fstring smb_user_name;
+
+/** 
  * Set the 'local' machine name
  * @param local_name the name we are being called
  * @param if this is the 'final' name for us, not be be changed again
  */
 
-static char *local_machine;
-
-void free_local_machine_name(void)
+void set_local_machine_name(const char* local_name, BOOL perm)
 {
-	SAFE_FREE(local_machine);
-}
+	static BOOL already_perm = False;
+	fstring tmp_local_machine;
 
-bool set_local_machine_name(const char *local_name, bool perm)
-{
-	static bool already_perm = false;
-	char *tmp_local_machine = NULL;
-	char addr[INET6_ADDRSTRLEN];
-	size_t len;
-
-	tmp_local_machine = SMB_STRDUP(local_name);
-	if (!tmp_local_machine) {
-		return false;
-	}
+	fstrcpy(tmp_local_machine,local_name);
 	trim_char(tmp_local_machine,' ',' ');
 
 	/*
 	 * Windows NT/2k uses "*SMBSERVER" and XP uses "*SMBSERV"
-	 * arrggg!!!
+	 * arrggg!!! 
 	 */
 
-	if (strequal(tmp_local_machine, "*SMBSERVER") ||
-			strequal(tmp_local_machine, "*SMBSERV") )  {
-		SAFE_FREE(local_machine);
-		local_machine = SMB_STRDUP(client_socket_addr(get_client_fd(),
-					addr, sizeof(addr)) );
-		SAFE_FREE(tmp_local_machine);
-		return local_machine ? true : false;
+	if ( strequal(tmp_local_machine, "*SMBSERVER") || strequal(tmp_local_machine, "*SMBSERV") )  {
+		fstrcpy( local_machine, client_socket_addr() );
+		return;
 	}
 
-	if (already_perm) {
-		return true;
-	}
+	if (already_perm)
+		return;
 
-	SAFE_FREE(local_machine);
-	len = strlen(tmp_local_machine);
-	local_machine = SMB_CALLOC_ARRAY(char, len+1);
-	if (!local_machine) {
-		SAFE_FREE(tmp_local_machine);
-		return false;
-	}
-	/* alpha_strcpy includes the space for the terminating nul. */
-	alpha_strcpy(local_machine,tmp_local_machine,
-			SAFE_NETBIOS_CHARS,len+1);
-	strlower_m(local_machine);
-	SAFE_FREE(tmp_local_machine);
-
 	already_perm = perm;
 
-	return true;
+	alpha_strcpy(local_machine,tmp_local_machine,SAFE_NETBIOS_CHARS,sizeof(local_machine)-1);
+	strlower_m(local_machine);
 }
 
-const char *get_local_machine_name(void)
-{
-	if (!local_machine || !*local_machine) {
-		return global_myname();
-	}
-
-	return local_machine;
-}
-
-/**
+/** 
  * Set the 'remote' machine name
  * @param remote_name the name our client wants to be called by
  * @param if this is the 'final' name for them, not be be changed again
  */
 
-static char *remote_machine;
-
-bool set_remote_machine_name(const char *remote_name, bool perm)
+void set_remote_machine_name(const char* remote_name, BOOL perm)
 {
-	static bool already_perm = False;
-	char *tmp_remote_machine;
-	size_t len;
+	static BOOL already_perm = False;
+	fstring tmp_remote_machine;
 
-	if (already_perm) {
-		return true;
-	}
+	if (already_perm)
+		return;
 
-	tmp_remote_machine = SMB_STRDUP(remote_name);
-	if (!tmp_remote_machine) {
-		return false;
-	}
-	trim_char(tmp_remote_machine,' ',' ');
+	already_perm = perm;
 
-	SAFE_FREE(remote_machine);
-	len = strlen(tmp_remote_machine);
-	remote_machine = SMB_CALLOC_ARRAY(char, len+1);
-	if (!remote_machine) {
-		SAFE_FREE(tmp_remote_machine);
-		return false;
-	}
-
-	/* alpha_strcpy includes the space for the terminating nul. */
-	alpha_strcpy(remote_machine,tmp_remote_machine,
-			SAFE_NETBIOS_CHARS,len+1);
+	fstrcpy(tmp_remote_machine,remote_name);
+	trim_char(tmp_remote_machine,' ',' ');
+	alpha_strcpy(remote_machine,tmp_remote_machine,SAFE_NETBIOS_CHARS,sizeof(remote_machine)-1);
 	strlower_m(remote_machine);
-	SAFE_FREE(tmp_remote_machine);
+}
 
-	already_perm = perm;
-
-	return true;
+const char* get_remote_machine_name(void) 
+{
+	return remote_machine;
 }
 
-const char *get_remote_machine_name(void)
+const char* get_local_machine_name(void) 
 {
-	return remote_machine ? remote_machine : "";
+	if (!*local_machine) {
+		return global_myname();
+	}
+
+	return local_machine;
 }
 
 /*******************************************************************
  Setup the string used by %U substitution.
 ********************************************************************/
 
-static char *smb_user_name;
-
 void sub_set_smb_name(const char *name)
 {
-	char *tmp;
-	size_t len;
-	bool is_machine_account = false;
+	fstring tmp;
+	int len;
+	BOOL is_machine_account = False;
 
 	/* don't let anonymous logins override the name */
-	if (!name || !*name) {
+	if (! *name)
 		return;
-	}
 
-	tmp = SMB_STRDUP(name);
-	if (!tmp) {
-		return;
-	}
-	trim_char(tmp, ' ', ' ');
-	strlower_m(tmp);
 
-	len = strlen(tmp);
+	fstrcpy( tmp, name );
+	trim_char( tmp, ' ', ' ' );
+	strlower_m( tmp );
 
-	if (len == 0) {
-		SAFE_FREE(tmp);
+	len = strlen( tmp );
+
+	if ( len == 0 )
 		return;
-	}
 
 	/* long story but here goes....we have to allow usernames
 	   ending in '$' as they are valid machine account names.
 	   So check for a machine account and re-add the '$'
 	   at the end after the call to alpha_strcpy().   --jerry  */
-
-	if (tmp[len-1] == '$') {
+	   
+	if ( tmp[len-1] == '$' )
 		is_machine_account = True;
-	}
+	
+	alpha_strcpy( smb_user_name, tmp, SAFE_NETBIOS_CHARS, sizeof(smb_user_name)-1 );
 
-	SAFE_FREE(smb_user_name);
-	smb_user_name = SMB_CALLOC_ARRAY(char, len+1);
-	if (!smb_user_name) {
-		SAFE_FREE(tmp);
-		return;
-	}
-
-	/* alpha_strcpy includes the space for the terminating nul. */
-	alpha_strcpy(smb_user_name, tmp,
-			SAFE_NETBIOS_CHARS,
-			len+1);
-
-	SAFE_FREE(tmp);
-
-	if (is_machine_account) {
-		len = strlen(smb_user_name);
+	if ( is_machine_account ) {
+		len = strlen( smb_user_name );
 		smb_user_name[len-1] = '$';
 	}
 }
 
-static const char *get_smb_user_name(void)
+char* sub_get_smb_name( void )
 {
-	return smb_user_name ? smb_user_name : "";
+	return smb_user_name;
 }
 
 /*******************************************************************
@@ -219,22 +155,20 @@
 {
 	current_user_info = *pcui;
 	/* The following is safe as current_user_info.smb_name
-	 * has already been sanitised in register_existing_vuid. */
-
-	sub_set_smb_name(current_user_info.smb_name);
+	 * has already been sanitised in register_vuid. */
+	fstrcpy(smb_user_name, current_user_info.smb_name);
 }
 
 /*******************************************************************
- Return the current active user name.
+ return the current active user name
 *******************************************************************/
 
-const char *get_current_username(void)
+const char* get_current_username( void )
 {
-	if (current_user_info.smb_name[0] == '\0' ) {
-		return get_smb_user_name();
-	}
+	if ( current_user_info.smb_name[0] == '\0' )
+		return smb_user_name;
 
-	return current_user_info.smb_name;
+	return current_user_info.smb_name; 
 }
 
 /*******************************************************************
@@ -307,14 +241,13 @@
 static char *longvar_domainsid( void )
 {
 	DOM_SID sid;
-	fstring tmp;
 	char *sid_string;
 	
 	if ( !secrets_fetch_domain_sid( lp_workgroup(), &sid ) ) {
 		return NULL;
 	}
 	
-	sid_string = SMB_STRDUP( sid_to_fstring( tmp, &sid ) );
+	sid_string = SMB_STRDUP( sid_string_static( &sid ) );
 	
 	if ( !sid_string ) {
 		DEBUG(0,("longvar_domainsid: failed to dup SID string!\n"));
@@ -331,7 +264,7 @@
 	char* (*fn)( void );
 };
 
-static struct api_longvar longvar_table[] = {
+struct api_longvar longvar_table[] = {
 	{ "DomainSID",		longvar_domainsid },
 	{ NULL, 		NULL }
 };
@@ -394,9 +327,9 @@
 	varname[copylen] = '\0';
 	r = realloc_string_sub(str, varname, value);
 	SAFE_FREE( value );
-
+	
 	/* skip over the %(varname) */
-
+	
 	return r;
 }
 
@@ -405,48 +338,37 @@
  Added this to implement %p (NIS auto-map version of %H)
 *******************************************************************/
 
-static const char *automount_path(const char *user_name)
+static char *automount_path(const char *user_name)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	const char *server_path;
+	static pstring server_path;
 
 	/* use the passwd entry as the default */
 	/* this will be the default if WITH_AUTOMOUNT is not used or fails */
 
-	server_path = talloc_strdup(ctx, get_user_home_dir(ctx, user_name));
-	if (!server_path) {
-		return "";
-	}
+	pstrcpy(server_path, get_user_home_dir(user_name));
 
 #if (defined(HAVE_NETGROUP) && defined (WITH_AUTOMOUNT))
 
 	if (lp_nis_home_map()) {
 		const char *home_path_start;
-		char *automount_value = automount_lookup(ctx, user_name);
+		const char *automount_value = automount_lookup(user_name);
 
-		if(automount_value && strlen(automount_value) > 0) {
+		if(strlen(automount_value) > 0) {
 			home_path_start = strchr_m(automount_value,':');
 			if (home_path_start != NULL) {
-				DEBUG(5, ("NIS lookup succeeded. "
-					"Home path is: %s\n",
-					home_path_start ?
-						(home_path_start+1):""));
-				server_path = talloc_strdup(ctx,
-							home_path_start+1);
-				if (!server_path) {
-					server_path = "";
-				}
+				DEBUG(5, ("NIS lookup succeeded.  Home path is: %s\n",
+						home_path_start?(home_path_start+1):""));
+				pstrcpy(server_path, home_path_start+1);
 			}
 		} else {
-			/* NIS key lookup failed: default to
-			 * user home directory from password file */
-			DEBUG(5, ("NIS lookup failed. Using Home path from "
-			"passwd file. Home path is: %s\n", server_path ));
+			/* NIS key lookup failed: default to user home directory from password file */
+			DEBUG(5, ("NIS lookup failed. Using Home path from passwd file. Home path is: %s\n", server_path ));
 		}
 	}
 #endif
 
 	DEBUG(4,("Home server path: %s\n", server_path));
+
 	return server_path;
 }
 
@@ -458,46 +380,32 @@
 
 static const char *automount_server(const char *user_name)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	const char *server_name;
-	const char *local_machine_name = get_local_machine_name();
+	static pstring server_name;
+	const char *local_machine_name = get_local_machine_name(); 
 
 	/* use the local machine name as the default */
 	/* this will be the default if WITH_AUTOMOUNT is not used or fails */
-	if (local_machine_name && *local_machine_name) {
-		server_name = talloc_strdup(ctx, local_machine_name);
-	} else {
-		server_name = talloc_strdup(ctx, global_myname());
-	}
-
-	if (!server_name) {
-		return "";
-	}
-
+	if (local_machine_name && *local_machine_name)
+		pstrcpy(server_name, local_machine_name);
+	else
+		pstrcpy(server_name, global_myname());
+	
 #if (defined(HAVE_NETGROUP) && defined (WITH_AUTOMOUNT))
+
 	if (lp_nis_home_map()) {
-		char *p;
-		char *srv;
-		char *automount_value = automount_lookup(ctx, user_name);
-		if (!automount_value) {
-			return "";
-		}
-		srv = talloc_strdup(ctx, automount_value);
-		if (!srv) {
-			return "";
-		}
-		p = strchr_m(srv, ':');
-		if (!p) {
-			return "";
-		}
-		*p = '\0';
-		server_name = srv;
-		DEBUG(5, ("NIS lookup succeeded.  Home server %s\n",
-					server_name));
+	        int home_server_len;
+		char *automount_value = automount_lookup(user_name);
+		home_server_len = strcspn(automount_value,":");
+		DEBUG(5, ("NIS lookup succeeded.  Home server length: %d\n",home_server_len));
+		if (home_server_len > sizeof(pstring))
+			home_server_len = sizeof(pstring);
+		strncpy(server_name, automount_value, home_server_len);
+                server_name[home_server_len] = '\0';
 	}
 #endif
 
 	DEBUG(4,("Home server: %s\n", server_name));
+
 	return server_name;
 }
 
@@ -545,10 +453,9 @@
 		      const char *str)
 {
 	char *b, *p, *s, *r, *a_string;
-	fstring pidstr, vnnstr;
-	char addr[INET6_ADDRSTRLEN];
+	fstring pidstr;
+	struct passwd *pass;
 	const char *local_machine_name = get_local_machine_name();
-	TALLOC_CTX *tmp_ctx = NULL;
 
 	/* workaround to prevent a crash while looking at bug #687 */
 	
@@ -562,14 +469,12 @@
 		DEBUG(0, ("alloc_sub_basic: Out of memory!\n"));
 		return NULL;
 	}
-
-	tmp_ctx = talloc_stackframe();
-
+	
 	for (b = s = a_string; (p = strchr_m(s, '%')); s = a_string + (p - b)) {
 
 		r = NULL;
 		b = a_string;
-
+		
 		switch (*(p+1)) {
 		case 'U' : 
 			r = strdup_lower(smb_name);
@@ -578,21 +483,15 @@
 			}
 			a_string = realloc_string_sub(a_string, "%U", r);
 			break;
-		case 'G' : {
-			struct passwd *pass;
+		case 'G' :
 			r = SMB_STRDUP(smb_name);
 			if (r == NULL) {
 				goto error;
 			}
-			pass = Get_Pwnam_alloc(tmp_ctx, r);
-			if (pass != NULL) {
-				a_string = realloc_string_sub(
-					a_string, "%G",
-					gidtoname(pass->pw_gid));
-			}
-			TALLOC_FREE(pass);
+			if ((pass = Get_Pwnam(r))!=NULL) {
+				a_string = realloc_string_sub(a_string, "%G", gidtoname(pass->pw_gid));
+			} 
 			break;
-		}
 		case 'D' :
 			r = strdup_upper(domain_name);
 			if (r == NULL) {
@@ -600,19 +499,11 @@
 			}
 			a_string = realloc_string_sub(a_string, "%D", r);
 			break;
-		case 'I' : {
-			int offset = 0;
-			client_addr(get_client_fd(), addr, sizeof(addr));
-			if (strnequal(addr,"::ffff:",7)) {
-				offset = 7;
-			}
-			a_string = realloc_string_sub(a_string, "%I",
-						      addr + offset);
+		case 'I' :
+			a_string = realloc_string_sub(a_string, "%I", client_addr());
 			break;
-		}
 		case 'i': 
-			a_string = realloc_string_sub( a_string, "%i",
-					client_socket_addr(get_client_fd(), addr, sizeof(addr)) );
+			a_string = realloc_string_sub( a_string, "%i", client_socket_addr() );
 			break;
 		case 'L' : 
 			if ( StrnCaseCmp(p, "%LOGONSERVER%", strlen("%LOGONSERVER%")) == 0 ) {
@@ -628,17 +519,16 @@
 			a_string = realloc_string_sub(a_string, "%N", automount_server(smb_name));
 			break;
 		case 'M' :
-			a_string = realloc_string_sub(a_string, "%M", client_name(get_client_fd()));
+			a_string = realloc_string_sub(a_string, "%M", client_name());
 			break;
 		case 'R' :
 			a_string = realloc_string_sub(a_string, "%R", remote_proto);
 			break;
 		case 'T' :
-			a_string = realloc_string_sub(a_string, "%T", current_timestring(tmp_ctx, False));
+			a_string = realloc_string_sub(a_string, "%T", current_timestring(False));
 			break;
 		case 'a' :
-			a_string = realloc_string_sub(a_string, "%a",
-					get_remote_arch_str());
+			a_string = realloc_string_sub(a_string, "%a", remote_arch);
 			break;
 		case 'd' :
 			slprintf(pidstr,sizeof(pidstr)-1, "%d",(int)sys_getpid());
@@ -662,30 +552,23 @@
 		case '(':
 			a_string = realloc_expand_longvar( a_string, p );
 			break;
-		case 'V' :
-			slprintf(vnnstr,sizeof(vnnstr)-1, "%u", get_my_vnn());
-			a_string = realloc_string_sub(a_string, "%V", vnnstr);
-			break;
 		default: 
 			break;
 		}
 
 		p++;
 		SAFE_FREE(r);
-
-		if (a_string == NULL) {
-			goto done;
+		
+		if ( !a_string ) {
+			return NULL;
 		}
 	}
 
-	goto done;
+	return a_string;
 
 error:
 	SAFE_FREE(a_string);
-
-done:
-	TALLOC_FREE(tmp_ctx);
-	return a_string;
+	return NULL;
 }
 
 /****************************************************************************
@@ -788,7 +671,7 @@
 			 const char *str)
 {
 	char *a_string, *ret_string;
-	char *b, *p, *s;
+	char *b, *p, *s, *h;
 
 	a_string = SMB_STRDUP(str);
 	if (a_string == NULL) {
@@ -804,13 +687,10 @@
 		case 'N' :
 			a_string = realloc_string_sub(a_string, "%N", automount_server(user));
 			break;
-		case 'H': {
-			char *h;
-			if ((h = get_user_home_dir(talloc_tos(), user)))
+		case 'H':
+			if ((h = get_user_home_dir(user)))
 				a_string = realloc_string_sub(a_string, "%H", h);
-			TALLOC_FREE(h);
 			break;
-		}
 		case 'P': 
 			a_string = realloc_string_sub(a_string, "%P", connectpath); 
 			break;
@@ -857,8 +737,8 @@
  */
 
 char *talloc_sub_advanced(TALLOC_CTX *mem_ctx,
-			  const char *servicename, const char *user,
-			  const char *connectpath, gid_t gid,
+			  const char *servicename, const char *user, 
+			  const char *connectpath, gid_t gid, 
 			  const char *smb_name, const char *domain_name,
 			  const char *str)
 {
@@ -874,13 +754,13 @@
 }
 
 
-void standard_sub_advanced(const char *servicename, const char *user,
-			   const char *connectpath, gid_t gid,
+void standard_sub_advanced(const char *servicename, const char *user, 
+			   const char *connectpath, gid_t gid, 
 			   const char *smb_name, const char *domain_name,
 			   char *str, size_t len)
 {
 	char *s;
-
+	
 	s = alloc_sub_advanced(servicename, user, connectpath,
 			       gid, smb_name, domain_name, str);
 
@@ -891,17 +771,19 @@
 }
 
 /****************************************************************************
- Do some standard substitutions in a string.
-****************************************************************************/
+ *  Do some standard substitutions in a string.
+ *  ****************************************************************************/
 
-char *standard_sub_conn(TALLOC_CTX *ctx, connection_struct *conn, const char *str)
+void standard_sub_conn(connection_struct *conn, char *str, size_t len)
 {
-	return talloc_sub_advanced(ctx,
-				lp_servicename(SNUM(conn)),
-				conn->user,
-				conn->connectpath,
-				conn->gid,
-				get_smb_user_name(),
-				"",
-				str);
+	char *s;
+
+	s = alloc_sub_advanced(lp_servicename(SNUM(conn)), conn->user, conn->connectpath,
+			       conn->gid, smb_user_name, "", str);
+
+	if ( s ) {
+		strncpy( str, s, len );
+		SAFE_FREE( s );
+	}
 }
+

Modified: branches/samba/upstream/source/lib/sysacls.c
===================================================================
--- branches/samba/upstream/source/lib/sysacls.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/sysacls.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,11 +3,11 @@
    Samba system utilities for ACL support.
    Copyright (C) Jeremy Allison 2000.
    Copyright (C) Volker Lendecke 2006
-   Copyright (C) Michael Adam 2006,2008
+   Copyright (C) Michael Adam 2006
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -364,9 +365,9 @@
 	return posixacl_sys_acl_get_file(handle, path_p, type);
 }
  
-SMB_ACL_T sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp)
+SMB_ACL_T sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp, int fd)
 {
-	return posixacl_sys_acl_get_fd(handle, fsp);
+	return posixacl_sys_acl_get_fd(handle, fsp, fd);
 }
  
 int sys_acl_set_file(vfs_handle_struct *handle,
@@ -376,9 +377,9 @@
 }
  
 int sys_acl_set_fd(vfs_handle_struct *handle, files_struct *fsp,
-		   SMB_ACL_T acl_d)
+		   int fd, SMB_ACL_T acl_d)
 {
-	return posixacl_sys_acl_set_fd(handle, fsp, acl_d);
+	return posixacl_sys_acl_set_fd(handle, fsp, fd, acl_d);
 }
 
 int sys_acl_delete_def_file(vfs_handle_struct *handle,
@@ -395,9 +396,9 @@
 	return aixacl_sys_acl_get_file(handle, path_p, type);
 }
 
-SMB_ACL_T sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp)
+SMB_ACL_T sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp, int fd)
 {
-	return aixacl_sys_acl_get_fd(handle, fsp);
+	return aixacl_sys_acl_get_fd(handle, fsp, fd);
 }
 
 int sys_acl_set_file(vfs_handle_struct *handle,
@@ -407,9 +408,9 @@
 }
 
 int sys_acl_set_fd(vfs_handle_struct *handle, files_struct *fsp,
-		   SMB_ACL_T acl_d)
+		   int fd, SMB_ACL_T acl_d)
 {
-	return aixacl_sys_acl_set_fd(handle, fsp, acl_d);
+	return aixacl_sys_acl_set_fd(handle, fsp, fd, acl_d);
 }
 
 int sys_acl_delete_def_file(vfs_handle_struct *handle,
@@ -426,9 +427,9 @@
 	return tru64acl_sys_acl_get_file(handle, path_p, type);
 }
 
-SMB_ACL_T sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp)
+SMB_ACL_T sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp, int fd)
 {
-	return tru64acl_sys_acl_get_fd(handle, fsp);
+	return tru64acl_sys_acl_get_fd(handle, fsp, fd);
 }
 
 int sys_acl_set_file(vfs_handle_struct *handle,
@@ -438,9 +439,9 @@
 }
 
 int sys_acl_set_fd(vfs_handle_struct *handle, files_struct *fsp,
-		   SMB_ACL_T acl_d)
+		   int fd, SMB_ACL_T acl_d)
 {
-	return tru64acl_sys_acl_set_fd(handle, fsp, acl_d);
+	return tru64acl_sys_acl_set_fd(handle, fsp, fd, acl_d);
 }
 
 int sys_acl_delete_def_file(vfs_handle_struct *handle,
@@ -457,9 +458,9 @@
 	return solarisacl_sys_acl_get_file(handle, path_p, type);
 }
 
-SMB_ACL_T sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp)
+SMB_ACL_T sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp, int fd)
 {
-	return solarisacl_sys_acl_get_fd(handle, fsp);
+	return solarisacl_sys_acl_get_fd(handle, fsp, fd);
 }
 
 int sys_acl_set_file(vfs_handle_struct *handle,
@@ -469,9 +470,9 @@
 }
 
 int sys_acl_set_fd(vfs_handle_struct *handle, files_struct *fsp,
-		   SMB_ACL_T acl_d)
+		   int fd, SMB_ACL_T acl_d)
 {
-	return solarisacl_sys_acl_set_fd(handle, fsp, acl_d);
+	return solarisacl_sys_acl_set_fd(handle, fsp, fd, acl_d);
 }
 
 int sys_acl_delete_def_file(vfs_handle_struct *handle,
@@ -488,9 +489,9 @@
 	return hpuxacl_sys_acl_get_file(handle, path_p, type);
 }
 
-SMB_ACL_T sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp)
+SMB_ACL_T sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp, int fd)
 {
-	return hpuxacl_sys_acl_get_fd(handle, fsp);
+	return hpuxacl_sys_acl_get_fd(handle, fsp, fd);
 }
 
 int sys_acl_set_file(vfs_handle_struct *handle,
@@ -500,9 +501,9 @@
 }
 
 int sys_acl_set_fd(vfs_handle_struct *handle, files_struct *fsp,
-		   SMB_ACL_T acl_d)
+		   int fd, SMB_ACL_T acl_d)
 {
-	return hpuxacl_sys_acl_set_fd(handle, fsp, acl_d);
+	return hpuxacl_sys_acl_set_fd(handle, fsp, fd, acl_d);
 }
 
 int sys_acl_delete_def_file(vfs_handle_struct *handle,
@@ -519,9 +520,9 @@
 	return irixacl_sys_acl_get_file(handle, path_p, type);
 }
 
-SMB_ACL_T sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp)
+SMB_ACL_T sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp, int fd)
 {
-	return irixacl_sys_acl_get_fd(handle, fsp);
+	return irixacl_sys_acl_get_fd(handle, fsp, fd);
 }
 
 int sys_acl_set_file(vfs_handle_struct *handle,
@@ -531,9 +532,9 @@
 }
 
 int sys_acl_set_fd(vfs_handle_struct *handle, files_struct *fsp,
-		   SMB_ACL_T acl_d)
+		   int fd, SMB_ACL_T acl_d)
 {
-	return irixacl_sys_acl_set_fd(handle, fsp, acl_d);
+	return irixacl_sys_acl_set_fd(handle, fsp, fd, acl_d);
 }
 
 int sys_acl_delete_def_file(vfs_handle_struct *handle,
@@ -555,7 +556,7 @@
 	return NULL;
 }
 
-SMB_ACL_T sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp)
+SMB_ACL_T sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp, int fd)
 {
 #ifdef ENOTSUP
 	errno = ENOTSUP;
@@ -577,7 +578,7 @@
 }
 
 int sys_acl_set_fd(vfs_handle_struct *handle, files_struct *fsp,
-		   SMB_ACL_T acl_d)
+		   int fd, SMB_ACL_T acl_d)
 {
 #ifdef ENOTSUP
 	errno = ENOTSUP;

Modified: branches/samba/upstream/source/lib/sysquotas.c
===================================================================
--- branches/samba/upstream/source/lib/sysquotas.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/sysquotas.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 
@@ -177,19 +178,19 @@
 #ifdef HAVE_XFS_QUOTAS
 	{"xfs", sys_get_xfs_quota, 	sys_set_xfs_quota},
 #endif /* HAVE_XFS_QUOTAS */
-	{NULL, 	NULL, 			NULL}
+	{NULL, 	NULL, 			NULL}	
 };
 
 static int command_get_quota(const char *path, enum SMB_QUOTA_TYPE qtype, unid_t id, SMB_DISK_QUOTA *dp)
 {
 	const char *get_quota_command;
 	char **lines = NULL;
-
+	
 	get_quota_command = lp_get_quota_command();
 	if (get_quota_command && *get_quota_command) {
 		const char *p;
 		char *p2;
-		char *syscmd = NULL;
+		pstring syscmd;
 		int _id = -1;
 
 		switch(qtype) {
@@ -206,16 +207,13 @@
 				return -1;
 		}
 
-		if (asprintf(&syscmd, "%s \"%s\" %d %d",
-			get_quota_command, path, qtype, _id) < 0) {
-			return -1;
-		}
+		slprintf(syscmd, sizeof(syscmd)-1, 
+			"%s \"%s\" %d %d", 
+			get_quota_command, path, qtype, _id);
 
 		DEBUG (3, ("get_quota: Running command %s\n", syscmd));
 
 		lines = file_lines_pload(syscmd, NULL);
-		SAFE_FREE(syscmd);
-
 		if (lines) {
 			char *line = lines[0];
 
@@ -328,7 +326,7 @@
 
 	errno = ENOSYS;
 	return -1;
-
+	
 invalid_param:
 
 	file_lines_free(lines);
@@ -339,11 +337,11 @@
 static int command_set_quota(const char *path, enum SMB_QUOTA_TYPE qtype, unid_t id, SMB_DISK_QUOTA *dp)
 {
 	const char *set_quota_command;
-
+	
 	set_quota_command = lp_set_quota_command();
 	if (set_quota_command && *set_quota_command) {
-		char **lines = NULL;
-		char *syscmd = NULL;
+		char **lines;
+		pstring syscmd;
 		int _id = -1;
 
 		switch(qtype) {
@@ -360,40 +358,37 @@
 		}
 
 #ifdef LARGE_SMB_OFF_T
-		if (asprintf(&syscmd,
+		slprintf(syscmd, sizeof(syscmd)-1, 
 			"%s \"%s\" %d %d "
 			"%u %llu %llu "
-			"%llu %llu %llu ",
+			"%llu %llu %llu ", 
 			set_quota_command, path, qtype, _id, dp->qflags,
 			(long long unsigned)dp->softlimit,(long long unsigned)dp->hardlimit,
 			(long long unsigned)dp->isoftlimit,(long long unsigned)dp->ihardlimit,
-			(long long unsigned)dp->bsize) < 0) {
-			return -1;
-		}
+			(long long unsigned)dp->bsize);
 #else /* LARGE_SMB_OFF_T */
-		if (asprintf(&syscmd,
+		slprintf(syscmd, sizeof(syscmd)-1, 
 			"%s \"%s\" %d %d "
 			"%u %lu %lu "
-			"%lu %lu %lu ",
+			"%lu %lu %lu ", 
 			set_quota_command, path, qtype, _id, dp->qflags,
 			(long unsigned)dp->softlimit,(long unsigned)dp->hardlimit,
 			(long unsigned)dp->isoftlimit,(long unsigned)dp->ihardlimit,
-			(long unsigned)dp->bsize) < 0) {
-			return -1;
-		}
+			(long unsigned)dp->bsize);
 #endif /* LARGE_SMB_OFF_T */
 
+
+
 		DEBUG (3, ("get_quota: Running command %s\n", syscmd));
 
 		lines = file_lines_pload(syscmd, NULL);
-		SAFE_FREE(syscmd);
 		if (lines) {
 			char *line = lines[0];
 
 			DEBUG (3, ("Read output from set_quota, \"%s\"\n", line));
 
 			file_lines_free(lines);
-
+			
 			return 0;
 		}
 		DEBUG (0, ("set_quota_command failed!\n"));
@@ -408,7 +403,7 @@
 {
 	int ret = -1;
 	int i;
-	bool ready = False;
+	BOOL ready = False;
 	char *mntpath = NULL;
 	char *bdev = NULL;
 	char *fs = NULL;
@@ -473,7 +468,7 @@
 {
 	int ret = -1;
 	int i;
-	bool ready = False;
+	BOOL ready = False;
 	char *mntpath = NULL;
 	char *bdev = NULL;
 	char *fs = NULL;

Modified: branches/samba/upstream/source/lib/sysquotas_4A.c
===================================================================
--- branches/samba/upstream/source/lib/sysquotas_4A.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/sysquotas_4A.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 

Modified: branches/samba/upstream/source/lib/sysquotas_linux.c
===================================================================
--- branches/samba/upstream/source/lib/sysquotas_linux.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/sysquotas_linux.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 

Modified: branches/samba/upstream/source/lib/sysquotas_xfs.c
===================================================================
--- branches/samba/upstream/source/lib/sysquotas_xfs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/sysquotas_xfs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 
@@ -33,9 +34,7 @@
 
 #ifdef HAVE_LINUX_XFS_QUOTAS
 #include "samba_linux_quota.h"
-#ifdef HAVE_LINUX_DQBLK_XFS_H
-#include <linux/dqblk_xfs.h>
-#endif
+#include "samba_xfs_quota.h"
 #define HAVE_GROUP_QUOTA
 #else /* IRIX */
 #include <sys/quota.h> 

Modified: branches/samba/upstream/source/lib/system.c
===================================================================
--- branches/samba/upstream/source/lib/system.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/system.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -573,7 +574,7 @@
 {
 	char *wd;
 #ifdef HAVE_GETCWD
-	wd = (char *)getcwd(s, PATH_MAX);
+	wd = (char *)getcwd(s, sizeof (pstring));
 #else
 	wd = (char *)getwd(s);
 #endif
@@ -642,25 +643,6 @@
 }
 
 /*******************************************************************
- Wrapper for lchown.
-********************************************************************/
-
-int sys_lchown(const char *fname,uid_t uid,gid_t gid)
-{
-#ifndef HAVE_LCHOWN
-	static int done;
-	if (!done) {
-		DEBUG(1,("WARNING: no lchown!\n"));
-		done=1;
-	}
-	errno = ENOSYS;
-	return -1;
-#else
-	return(lchown(fname,uid,gid));
-#endif
-}
-
-/*******************************************************************
 os/2 also doesn't have chroot
 ********************************************************************/
 int sys_chroot(const char *dname)
@@ -678,8 +660,69 @@
 #endif
 }
 
+/**************************************************************************
+A wrapper for gethostbyname() that tries avoids looking up hostnames 
+in the root domain, which can cause dial-on-demand links to come up for no
+apparent reason.
+****************************************************************************/
+
+struct hostent *sys_gethostbyname(const char *name)
+{
+#ifdef REDUCE_ROOT_DNS_LOOKUPS
+	char query[256], hostname[256];
+	char *domain;
+
+	/* Does this name have any dots in it? If so, make no change */
+
+	if (strchr_m(name, '.'))
+		return(gethostbyname(name));
+
+	/* Get my hostname, which should have domain name 
+		attached. If not, just do the gethostname on the
+		original string. 
+	*/
+
+	gethostname(hostname, sizeof(hostname) - 1);
+	hostname[sizeof(hostname) - 1] = 0;
+	if ((domain = strchr_m(hostname, '.')) == NULL)
+		return(gethostbyname(name));
+
+	/* Attach domain name to query and do modified query.
+		If names too large, just do gethostname on the
+		original string.
+	*/
+
+	if((strlen(name) + strlen(domain)) >= sizeof(query))
+		return(gethostbyname(name));
+
+	slprintf(query, sizeof(query)-1, "%s%s", name, domain);
+	return(gethostbyname(query));
+#else /* REDUCE_ROOT_DNS_LOOKUPS */
+	return(gethostbyname(name));
+#endif /* REDUCE_ROOT_DNS_LOOKUPS */
+}
+
+
 #if defined(HAVE_POSIX_CAPABILITIES)
 
+#ifdef HAVE_SYS_CAPABILITY_H
+
+#if defined(BROKEN_REDHAT_7_SYSTEM_HEADERS) && !defined(_I386_STATFS_H) && !defined(_PPC_STATFS_H)
+#define _I386_STATFS_H
+#define _PPC_STATFS_H
+#define BROKEN_REDHAT_7_STATFS_WORKAROUND
+#endif
+
+#include <sys/capability.h>
+
+#ifdef BROKEN_REDHAT_7_STATFS_WORKAROUND
+#undef _I386_STATFS_H
+#undef _PPC_STATFS_H
+#undef BROKEN_REDHAT_7_STATFS_WORKAROUND
+#endif
+
+#endif /* HAVE_SYS_CAPABILITY_H */
+
 /**************************************************************************
  Try and abstract process capabilities (for systems that have them).
 ****************************************************************************/
@@ -689,8 +732,8 @@
  * from the inheritable set, because there is no circumstance in which our
  * children should inherit our elevated privileges.
  */
-static bool set_process_capability(enum smbd_capability capability,
-				   bool enable)
+static BOOL set_process_capability(enum smbd_capability capability,
+				   BOOL	enable)
 {
 	cap_value_t cap_vals[2] = {0};
 	int num_cap_vals = 0;
@@ -733,11 +776,6 @@
 			cap_vals[num_cap_vals++] = CAP_MKNOD;
 #endif
 			break;
-		case LEASE_CAPABILITY:
-#ifdef CAP_LEASE
-			cap_vals[num_cap_vals++] = CAP_LEASE;
-#endif
-			break;
 	}
 
 	SMB_ASSERT(num_cap_vals <= ARRAY_SIZE(cap_vals));
@@ -833,13 +871,15 @@
 }
 
 /**************************************************************************
- Wrap setgroups and getgroups for systems that declare getgroups() as
- returning an array of gid_t, but actuall return an array of int.
+ Wrapper for getgroups. Deals with broken (int) case.
 ****************************************************************************/
 
-#if defined(HAVE_BROKEN_GETGROUPS)
-static int sys_broken_getgroups(int setlen, gid_t *gidset)
+int sys_getgroups(int setlen, gid_t *gidset)
 {
+#if !defined(HAVE_BROKEN_GETGROUPS)
+	return getgroups(setlen, gidset);
+#else
+
 	GID_T gid;
 	GID_T *group_list;
 	int i, ngroups;
@@ -861,7 +901,7 @@
 	if (setlen == 0)
 		setlen = groups_max();
 
-	if((group_list = SMB_MALLOC_ARRAY(GID_T, setlen)) == NULL) {
+	if((group_list = (GID_T *)malloc(setlen * sizeof(GID_T))) == NULL) {
 		DEBUG(0,("sys_getgroups: Malloc fail.\n"));
 		return -1;
 	}
@@ -878,10 +918,26 @@
 
 	SAFE_FREE(group_list);
 	return ngroups;
+#endif /* HAVE_BROKEN_GETGROUPS */
 }
 
-static int sys_broken_setgroups(int setlen, gid_t *gidset)
+
+/**************************************************************************
+ Wrapper for setgroups. Deals with broken (int) case. Automatically used
+ if we have broken getgroups.
+****************************************************************************/
+
+int sys_setgroups(int setlen, gid_t *gidset)
 {
+#if !defined(HAVE_SETGROUPS)
+	errno = ENOSYS;
+	return -1;
+#endif /* HAVE_SETGROUPS */
+
+#if !defined(HAVE_BROKEN_GETGROUPS)
+	return setgroups(setlen, gidset);
+#else
+
 	GID_T *group_list;
 	int i ; 
 
@@ -898,7 +954,7 @@
 	 * GID_T array of size setlen.
 	 */
 
-	if((group_list = SMB_MALLOC_ARRAY(GID_T, setlen)) == NULL) {
+	if((group_list = (GID_T *)malloc(setlen * sizeof(GID_T))) == NULL) {
 		DEBUG(0,("sys_setgroups: Malloc fail.\n"));
 		return -1;    
 	}
@@ -915,171 +971,318 @@
  
 	SAFE_FREE(group_list);
 	return 0 ;
+#endif /* HAVE_BROKEN_GETGROUPS */
 }
 
-#endif /* HAVE_BROKEN_GETGROUPS */
+/**************************************************************************
+ Wrappers for setpwent(), getpwent() and endpwent()
+****************************************************************************/
 
-/* This is a list of systems that require the first GID passed to setgroups(2)
- * to be the effective GID. If your system is one of these, add it here.
+void sys_setpwent(void)
+{
+	setpwent();
+}
+
+struct passwd *sys_getpwent(void)
+{
+	return getpwent();
+}
+
+void sys_endpwent(void)
+{
+	endpwent();
+}
+
+/**************************************************************************
+ Wrappers for getpwnam(), getpwuid(), getgrnam(), getgrgid()
+****************************************************************************/
+
+#ifdef ENABLE_BUILD_FARM_HACKS
+
+/*
+ * In the build farm we want to be able to join machines to the domain. As we
+ * don't have root access, we need to bypass direct access to /etc/passwd
+ * after a user has been created via samr. Fake those users.
  */
-#if defined (FREEBSD) || defined (DARWINOS)
-#define USE_BSD_SETGROUPS
-#endif
 
-#if defined(USE_BSD_SETGROUPS)
-/* Depending on the particular BSD implementation, the first GID that is
- * passed to setgroups(2) will either be ignored or will set the credential's
- * effective GID. In either case, the right thing to do is to guarantee that
- * gidset[0] is the effective GID.
- */
-static int sys_bsd_setgroups(gid_t primary_gid, int setlen, const gid_t *gidset)
+static struct passwd *fake_pwd;
+static int num_fake_pwd;
+
+struct passwd *sys_getpwnam(const char *name)
 {
-	gid_t *new_gidset = NULL;
-	int max;
-	int ret;
+	int i;
 
-	/* setgroups(2) will fail with EINVAL if we pass too many groups. */
-	max = groups_max();
+	for (i=0; i<num_fake_pwd; i++) {
+		if (strcmp(fake_pwd[i].pw_name, name) == 0) {
+			DEBUG(10, ("Returning fake user %s\n", name));
+			return &fake_pwd[i];
+		}
+	}
 
-	/* No group list, just make sure we are setting the efective GID. */
-	if (setlen == 0) {
-		return setgroups(1, &primary_gid);
+	return getpwnam(name);
+}
+
+struct passwd *sys_getpwuid(uid_t uid)
+{
+	int i;
+
+	for (i=0; i<num_fake_pwd; i++) {
+		if (fake_pwd[i].pw_uid == uid) {
+			DEBUG(10, ("Returning fake user %s\n",
+				   fake_pwd[i].pw_name));
+			return &fake_pwd[i];
+		}
 	}
 
-	/* If the primary gid is not the first array element, grow the array
-	 * and insert it at the front.
-	 */
-	if (gidset[0] != primary_gid) {
-	        new_gidset = SMB_MALLOC_ARRAY(gid_t, setlen + 1);
-	        if (new_gidset == NULL) {
-			return -1;
-	        }
+	return getpwuid(uid);
+}
 
-		memcpy(new_gidset + 1, gidset, (setlen * sizeof(gid_t)));
-		new_gidset[0] = primary_gid;
-		setlen++;
+void faked_create_user(const char *name)
+{
+	int i;
+	uid_t uid;
+	struct passwd new_pwd;
+
+	for (i=0; i<10; i++) {
+		generate_random_buffer((unsigned char *)&uid,
+				       sizeof(uid));
+		if (getpwuid(uid) == NULL) {
+			break;
+		}
 	}
 
-	if (setlen > max) {
-		DEBUG(3, ("forced to truncate group list from %d to %d\n",
-			setlen, max));
-		setlen = max;
+	if (i==10) {
+		/* Weird. No free uid found... */
+		return;
 	}
 
-#if defined(HAVE_BROKEN_GETGROUPS)
-	ret = sys_broken_setgroups(setlen, new_gidset ? new_gidset : gidset);
+	new_pwd.pw_name = SMB_STRDUP(name);
+	new_pwd.pw_passwd = SMB_STRDUP("x");
+	new_pwd.pw_uid = uid;
+	new_pwd.pw_gid = 100;
+	new_pwd.pw_gecos = SMB_STRDUP("faked user");
+	new_pwd.pw_dir = SMB_STRDUP("/nodir");
+	new_pwd.pw_shell = SMB_STRDUP("/bin/false");
+
+	ADD_TO_ARRAY(NULL, struct passwd, new_pwd, &fake_pwd,
+		     &num_fake_pwd);
+
+	DEBUG(10, ("Added fake user %s, have %d fake users\n",
+		   name, num_fake_pwd));
+}
+
 #else
-	ret = setgroups(setlen, new_gidset ? new_gidset : gidset);
+
+struct passwd *sys_getpwnam(const char *name)
+{
+	return getpwnam(name);
+}
+
+struct passwd *sys_getpwuid(uid_t uid)
+{
+	return getpwuid(uid);
+}
+
 #endif
 
-	if (new_gidset) {
-		int errsav = errno;
-		SAFE_FREE(new_gidset);
-		errno = errsav;
-	}
+struct group *sys_getgrnam(const char *name)
+{
+	return getgrnam(name);
+}
 
-	return ret;
+struct group *sys_getgrgid(gid_t gid)
+{
+	return getgrgid(gid);
 }
 
-#endif /* USE_BSD_SETGROUPS */
+#if 0 /* NOT CURRENTLY USED - JRA */
+/**************************************************************************
+ The following are the UNICODE versions of *all* system interface functions
+ called within Samba. Ok, ok, the exceptions are the gethostbyXX calls,
+ which currently are left as ascii as they are not used other than in name
+ resolution.
+****************************************************************************/
 
 /**************************************************************************
- Wrapper for getgroups. Deals with broken (int) case.
+ Wide stat. Just narrow and call sys_xxx.
 ****************************************************************************/
 
-int sys_getgroups(int setlen, gid_t *gidset)
+int wsys_stat(const smb_ucs2_t *wfname,SMB_STRUCT_STAT *sbuf)
 {
-#if defined(HAVE_BROKEN_GETGROUPS)
-	return sys_broken_getgroups(setlen, gidset);
-#else
-	return getgroups(setlen, gidset);
-#endif
+	pstring fname;
+	return sys_stat(unicode_to_unix(fname,wfname,sizeof(fname)), sbuf);
 }
 
 /**************************************************************************
- Wrapper for setgroups. Deals with broken (int) case and BSD case.
+ Wide lstat. Just narrow and call sys_xxx.
 ****************************************************************************/
 
-int sys_setgroups(gid_t UNUSED(primary_gid), int setlen, gid_t *gidset)
+int wsys_lstat(const smb_ucs2_t *wfname,SMB_STRUCT_STAT *sbuf)
 {
-#if !defined(HAVE_SETGROUPS)
-	errno = ENOSYS;
-	return -1;
-#endif /* HAVE_SETGROUPS */
+	pstring fname;
+	return sys_lstat(unicode_to_unix(fname,wfname,sizeof(fname)), sbuf);
+}
 
-#if defined(USE_BSD_SETGROUPS)
-	return sys_bsd_setgroups(primary_gid, setlen, gidset);
-#elif defined(HAVE_BROKEN_GETGROUPS)
-	return sys_broken_setgroups(setlen, gidset);
-#else
-	return setgroups(setlen, gidset);
-#endif
+/**************************************************************************
+ Wide creat. Just narrow and call sys_xxx.
+****************************************************************************/
+
+int wsys_creat(const smb_ucs2_t *wfname, mode_t mode)
+{
+	pstring fname;
+	return sys_creat(unicode_to_unix(fname,wfname,sizeof(fname)), mode);
 }
 
 /**************************************************************************
- Wrappers for setpwent(), getpwent() and endpwent()
+ Wide open. Just narrow and call sys_xxx.
 ****************************************************************************/
 
-void sys_setpwent(void)
+int wsys_open(const smb_ucs2_t *wfname, int oflag, mode_t mode)
 {
-	setpwent();
+	pstring fname;
+	return sys_open(unicode_to_unix(fname,wfname,sizeof(fname)), oflag, mode);
 }
 
-struct passwd *sys_getpwent(void)
+/**************************************************************************
+ Wide fopen. Just narrow and call sys_xxx.
+****************************************************************************/
+
+FILE *wsys_fopen(const smb_ucs2_t *wfname, const char *type)
 {
-	return getpwent();
+	pstring fname;
+	return sys_fopen(unicode_to_unix(fname,wfname,sizeof(fname)), type);
 }
 
-void sys_endpwent(void)
+/**************************************************************************
+ Wide opendir. Just narrow and call sys_xxx.
+****************************************************************************/
+
+SMB_STRUCT_DIR *wsys_opendir(const smb_ucs2_t *wfname)
 {
-	endpwent();
+	pstring fname;
+	return opendir(unicode_to_unix(fname,wfname,sizeof(fname)));
 }
 
 /**************************************************************************
- Wrappers for getpwnam(), getpwuid(), getgrnam(), getgrgid()
+ Wide readdir. Return a structure pointer containing a wide filename.
 ****************************************************************************/
 
+SMB_STRUCT_WDIRENT *wsys_readdir(SMB_STRUCT_DIR *dirp)
+{
+	static SMB_STRUCT_WDIRENT retval;
+	SMB_STRUCT_DIRENT *dirval = sys_readdir(dirp);
 
-struct passwd *sys_getpwnam(const char *name)
+	if(!dirval)
+		return NULL;
+
+	/*
+	 * The only POSIX defined member of this struct is d_name.
+	 */
+
+	unix_to_unicode(retval.d_name,dirval->d_name,sizeof(retval.d_name));
+
+	return &retval;
+}
+
+/**************************************************************************
+ Wide getwd. Call sys_xxx and widen. Assumes s points to a wpstring.
+****************************************************************************/
+
+smb_ucs2_t *wsys_getwd(smb_ucs2_t *s)
 {
-	return getpwnam(name);
+	pstring fname;
+	char *p = sys_getwd(fname);
+
+	if(!p)
+		return NULL;
+
+	return unix_to_unicode(s, p, sizeof(wpstring));
 }
 
-struct passwd *sys_getpwuid(uid_t uid)
+/**************************************************************************
+ Wide chown. Just narrow and call sys_xxx.
+****************************************************************************/
+
+int wsys_chown(const smb_ucs2_t *wfname, uid_t uid, gid_t gid)
 {
-	return getpwuid(uid);
+	pstring fname;
+	return chown(unicode_to_unix(fname,wfname,sizeof(fname)), uid, gid);
 }
 
-struct group *sys_getgrnam(const char *name)
+/**************************************************************************
+ Wide chroot. Just narrow and call sys_xxx.
+****************************************************************************/
+
+int wsys_chroot(const smb_ucs2_t *wfname)
 {
-	return getgrnam(name);
+	pstring fname;
+	return chroot(unicode_to_unix(fname,wfname,sizeof(fname)));
 }
 
-struct group *sys_getgrgid(gid_t gid)
+/**************************************************************************
+ Wide getpwnam. Return a structure pointer containing wide names.
+****************************************************************************/
+
+SMB_STRUCT_WPASSWD *wsys_getpwnam(const smb_ucs2_t *wname)
 {
-	return getgrgid(gid);
+	static SMB_STRUCT_WPASSWD retval;
+	fstring name;
+	struct passwd *pwret = sys_getpwnam(unicode_to_unix(name,wname,sizeof(name)));
+
+	if(!pwret)
+		return NULL;
+
+	unix_to_unicode(retval.pw_name, pwret->pw_name, sizeof(retval.pw_name));
+	retval.pw_passwd = pwret->pw_passwd;
+	retval.pw_uid = pwret->pw_uid;
+	retval.pw_gid = pwret->pw_gid;
+	unix_to_unicode(retval.pw_gecos, pwret->pw_gecos, sizeof(retval.pw_gecos));
+	unix_to_unicode(retval.pw_dir, pwret->pw_dir, sizeof(retval.pw_dir));
+	unix_to_unicode(retval.pw_shell, pwret->pw_shell, sizeof(retval.pw_shell));
+
+	return &retval;
 }
 
 /**************************************************************************
- Extract a command into an arg list.
+ Wide getpwuid. Return a structure pointer containing wide names.
 ****************************************************************************/
 
-static char **extract_args(TALLOC_CTX *mem_ctx, const char *command)
+SMB_STRUCT_WPASSWD *wsys_getpwuid(uid_t uid)
 {
-	char *trunc_cmd;
-	char *saveptr;
+	static SMB_STRUCT_WPASSWD retval;
+	struct passwd *pwret = sys_getpwuid(uid);
+
+	if(!pwret)
+		return NULL;
+
+	unix_to_unicode(retval.pw_name, pwret->pw_name, sizeof(retval.pw_name));
+	retval.pw_passwd = pwret->pw_passwd;
+	retval.pw_uid = pwret->pw_uid;
+	retval.pw_gid = pwret->pw_gid;
+	unix_to_unicode(retval.pw_gecos, pwret->pw_gecos, sizeof(retval.pw_gecos));
+	unix_to_unicode(retval.pw_dir, pwret->pw_dir, sizeof(retval.pw_dir));
+	unix_to_unicode(retval.pw_shell, pwret->pw_shell, sizeof(retval.pw_shell));
+
+	return &retval;
+}
+#endif /* NOT CURRENTLY USED - JRA */
+
+/**************************************************************************
+ Extract a command into an arg list. Uses a static pstring for storage.
+ Caller frees returned arg list (which contains pointers into the static pstring).
+****************************************************************************/
+
+static char **extract_args(const char *command)
+{
+	static pstring trunc_cmd;
 	char *ptr;
 	int argcl;
 	char **argl = NULL;
 	int i;
 
-	if (!(trunc_cmd = talloc_strdup(mem_ctx, command))) {
-		DEBUG(0, ("talloc failed\n"));
-		goto nomem;
-	}
+	pstrcpy(trunc_cmd, command);
 
-	if(!(ptr = strtok_r(trunc_cmd, " \t", &saveptr))) {
-		TALLOC_FREE(trunc_cmd);
+	if(!(ptr = strtok(trunc_cmd, " \t"))) {
 		errno = EINVAL;
 		return NULL;
 	}
@@ -1088,46 +1291,27 @@
 	 * Count the args.
 	 */
 
-	for( argcl = 1; ptr; ptr = strtok_r(NULL, " \t", &saveptr))
+	for( argcl = 1; ptr; ptr = strtok(NULL, " \t"))
 		argcl++;
 
-	TALLOC_FREE(trunc_cmd);
+	if((argl = (char **)SMB_MALLOC((argcl + 1) * sizeof(char *))) == NULL)
+		return NULL;
 
-	if (!(argl = TALLOC_ARRAY(mem_ctx, char *, argcl + 1))) {
-		goto nomem;
-	}
-
 	/*
 	 * Now do the extraction.
 	 */
 
-	if (!(trunc_cmd = talloc_strdup(mem_ctx, command))) {
-		goto nomem;
-	}
+	pstrcpy(trunc_cmd, command);
 
-	ptr = strtok_r(trunc_cmd, " \t", &saveptr);
+	ptr = strtok(trunc_cmd, " \t");
 	i = 0;
+	argl[i++] = ptr;
 
-	if (!(argl[i++] = talloc_strdup(argl, ptr))) {
-		goto nomem;
-	}
+	while((ptr = strtok(NULL, " \t")) != NULL)
+		argl[i++] = ptr;
 
-	while((ptr = strtok_r(NULL, " \t", &saveptr)) != NULL) {
-
-		if (!(argl[i++] = talloc_strdup(argl, ptr))) {
-			goto nomem;
-		}
-	}
-
 	argl[i++] = NULL;
 	return argl;
-
- nomem:
-	DEBUG(0, ("talloc failed\n"));
-	TALLOC_FREE(trunc_cmd);
-	TALLOC_FREE(argl);
-	errno = ENOMEM;
-	return NULL;
 }
 
 /**************************************************************************
@@ -1201,7 +1385,7 @@
 	 * Extract the command and args into a NULL terminated array.
 	 */
 
-	if(!(argl = extract_args(NULL, command)))
+	if(!(argl = extract_args(command)))
 		goto err_exit;
 
 	entry->child_pid = sys_fork();
@@ -1243,7 +1427,7 @@
 	 */
 
 	close (child_end);
-	TALLOC_FREE(argl);
+	SAFE_FREE(argl);
 
 	/* Link into popen_chain. */
 	entry->next = popen_chain;
@@ -1922,6 +2106,11 @@
 #endif
 }
 
+#if !defined(HAVE_SETXATTR)
+#define XATTR_CREATE  0x1       /* set value, fail if attr already exists */
+#define XATTR_REPLACE 0x2       /* set value, fail if attr does not exist */
+#endif
+
 int sys_setxattr (const char *path, const char *name, const void *value, size_t size, int flags)
 {
 #if defined(HAVE_SETXATTR)
@@ -2168,13 +2357,14 @@
 			/* return the current size of the list of extended attribute names*/
 			len += listlen + 1;
 		} else {
-			/* check size and copy entrieѕ + nul into list. */
+			/* check size and copy entrieѕ + nul into list. */
 			if ((len + listlen + 1) > size) {
 				errno = ERANGE;
 				len = -1;
 				break;
 			} else {
 				safe_strcpy(list + len, de->d_name, listlen);
+				pstrcpy(list + len, de->d_name);
 				len += listlen;
 				list[len] = '\0';
 				++len;
@@ -2239,7 +2429,6 @@
 }
 #endif /*HAVE_ATTROPEN*/
 
-
 /****************************************************************************
  Return the major devicenumber for UNIX extensions.
 ****************************************************************************/
@@ -2448,45 +2637,3 @@
 	return -1;
 #endif
 }
-
-int sys_getnameinfo(const struct sockaddr *psa,
-			socklen_t salen,
-			char *host,
-			size_t hostlen,
-			char *service,
-			size_t servlen,
-			int flags)
-{
-	/*
-	 * For Solaris we must make sure salen is the
-	 * correct length for the incoming sa_family.
-	 */
-
-	if (salen == sizeof(struct sockaddr_storage)) {
-		salen = sizeof(struct sockaddr_in);
-#if defined(HAVE_IPV6)
-		if (psa->sa_family == AF_INET6) {
-			salen = sizeof(struct sockaddr_in6);
-		}
-#endif
-	}
-	return getnameinfo(psa, salen, host, hostlen, service, servlen, flags);
-}
-
-int sys_connect(int fd, const struct sockaddr * addr)
-{
-	socklen_t salen = -1;
-
-	if (addr->sa_family == AF_INET) {
-	    salen = sizeof(struct sockaddr_in);
-	} else if (addr->sa_family == AF_UNIX) {
-	    salen = sizeof(struct sockaddr_un);
-	}
-#if defined(HAVE_IPV6)
-	else if (addr->sa_family == AF_INET6) {
-	    salen = sizeof(struct sockaddr_in6);
-	}
-#endif
-
-	return connect(fd, addr, salen);
-}

Modified: branches/samba/upstream/source/lib/system_smbd.c
===================================================================
--- branches/samba/upstream/source/lib/system_smbd.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/system_smbd.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /* 
@@ -103,10 +104,12 @@
 
 	restore_re_gid();
 
-	if (sys_setgroups(gid, ngrp_saved, gids_saved) != 0) {
+	if (sys_setgroups(ngrp_saved, gids_saved) != 0) {
 		/* yikes! */
 		DEBUG(0,("ERROR: getgrouplist: failed to reset group list!\n"));
-		smb_panic("getgrouplist: failed to reset group list!");
+		smb_panic("getgrouplist: failed to reset group list!\n");
+		free(gids_saved);
+		return -1;
 	}
 
 	free(gids_saved);
@@ -117,7 +120,7 @@
 static int sys_getgrouplist(const char *user, gid_t gid, gid_t *groups, int *grpcnt)
 {
 	int retval;
-	bool winbind_env;
+	BOOL winbind_env;
 
 	DEBUG(10,("sys_getgrouplist: user [%s]\n", user));
 
@@ -125,7 +128,7 @@
 	 * always determined by the info3 coming back from auth3 or the
 	 * PAC. */
 	winbind_env = winbind_env_set();
-	(void)winbind_off();
+	winbind_off();
 
 #ifdef HAVE_GETGROUPLIST
 	retval = getgrouplist(user, gid, groups, grpcnt);
@@ -137,13 +140,13 @@
 
 	/* allow winbindd lookups, but only if they were not already disabled */
 	if (!winbind_env) {
-		(void)winbind_on();
+		winbind_on();
 	}
 
 	return retval;
 }
 
-bool getgroups_unix_user(TALLOC_CTX *mem_ctx, const char *user,
+BOOL getgroups_unix_user(TALLOC_CTX *mem_ctx, const char *user,
 			 gid_t primary_gid,
 			 gid_t **ret_groups, size_t *p_ngroups)
 {
@@ -153,7 +156,7 @@
 	gid_t *groups;
 	int i;
 
-	max_grp = MIN(32, groups_max());
+	max_grp = groups_max();
 	temp_groups = SMB_MALLOC_ARRAY(gid_t, max_grp);
 	if (! temp_groups) {
 		return False;

Modified: branches/samba/upstream/source/lib/talloc/Makefile.in
===================================================================
--- branches/samba/upstream/source/lib/talloc/Makefile.in	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/talloc/Makefile.in	2008-06-15 01:55:18 UTC (rev 1953)
@@ -12,31 +12,60 @@
 XSLTPROC = @XSLTPROC@
 INSTALLCMD = @INSTALL@
 CC = @CC@
-CFLAGS = @CFLAGS@ -DHAVE_CONFIG_H= -I. -I at srcdir@
+CFLAGS = @CFLAGS@ -DHAVE_CONFIG_H= -I. -I at srcdir@ -I at libreplacedir@
 EXTRA_TARGETS = @DOC_TARGET@
-PICFLAG = @PICFLAG@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-SHLIBEXT = @SHLIBEXT@
-SHLD_FLAGS = @SHLD_FLAGS@
-tallocdir = @tallocdir@
 
-LIBOBJ = $(TALLOC_OBJ) @LIBREPLACEOBJ@
+.SUFFIXES: .c .o .3 .3.xml .xml .html
 
-all:: showflags $(EXTRA_TARGETS)
+LIBOBJ = @TALLOCOBJ@ @LIBREPLACEOBJ@
 
-include $(tallocdir)/rules.mk
-include $(tallocdir)/talloc.mk
+all: showflags libtalloc.a testsuite $(EXTRA_TARGETS)
 
-$(SOLIB): $(LIBOBJ)
-	$(CC) $(SHLD_FLAGS) -o $@ $(LIBOBJ) @SONAMEFLAG@$(SONAME)
+showflags:
+	@echo 'talloc will be compiled with flags:'
+	@echo '  CFLAGS = $(CFLAGS)'
+	@echo '  LIBS = $(LIBS)'
 
-check: test
+testsuite: $(LIBOBJ) testsuite.o
+	$(CC) $(CFLAGS) -o testsuite testsuite.o $(LIBOBJ) $(LIBS)
 
-installcheck:: test install
+libtalloc.a: $(LIBOBJ)
+	ar -rv $@ $(LIBOBJ)
+	@-ranlib $@
 
-distclean:: clean
+install: all 
+	${INSTALLCMD} -d ${libdir}
+	${INSTALLCMD} -m 755 libtalloc.a $(libdir)
+	${INSTALLCMD} -d ${includedir}
+	${INSTALLCMD} -m 644 $(srcdir)/talloc.h $(includedir)
+	${INSTALLCMD} -m 644 talloc.pc $(libdir)/pkgconfig
+	if [ -f talloc.3 ];then ${INSTALLCMD} -d ${mandir}/man3; fi
+	if [ -f talloc.3 ];then ${INSTALLCMD} -m 644 talloc.3 $(mandir)/man3; fi
+
+doc: talloc.3 talloc.3.html
+
+.3.xml.3:
+	-test -z "$(XSLTPROC)" || $(XSLTPROC) --nonet -o $@ http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $<
+
+.xml.html:
+	-test -z "$(XSLTPROC)" || $(XSLTPROC) --nonet -o $@ http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl $<
+
+clean:
+	rm -f *~ $(LIBOBJ) libtalloc.a testsuite testsuite.o *.gc?? talloc.3 talloc.3.html
+
+test: testsuite
+	./testsuite
+
+gcov:
+	gcov talloc.c
+
+installcheck: 
+	$(MAKE) test
+
+distclean: clean
+	rm -f *~ */*~
 	rm -f Makefile
 	rm -f config.log config.status config.h config.cache
 
-realdistclean:: distclean
+realdistclean: distclean
 	rm -f configure config.h.in

Modified: branches/samba/upstream/source/lib/talloc/config.guess
===================================================================
--- branches/samba/upstream/source/lib/talloc/config.guess	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/talloc/config.guess	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful, but
@@ -16,7 +16,9 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a

Modified: branches/samba/upstream/source/lib/talloc/config.mk
===================================================================
--- branches/samba/upstream/source/lib/talloc/config.mk	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/talloc/config.mk	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,8 +1,18 @@
+################################################
+# Start LIBRARY LIBTALLOC
 [LIBRARY::LIBTALLOC]
-VERSION = 1.2.0
-SO_VERSION = 1
+VERSION = 0.0.1
+SO_VERSION = 0
 OBJ_FILES = talloc.o
-PC_FILE = talloc.pc
 MANPAGE = talloc.3
 CFLAGS = -Ilib/talloc
 PUBLIC_HEADERS = talloc.h
+DESCRIPTION = A hierarchical pool based memory system with destructors
+#
+# End LIBRARY LIBTALLOC
+################################################
+
+[BINARY::TALLOC]
+OBJ_FILES = testsuite.o
+PRIVATE_DEPENDENCIES = LIBTALLOC
+INSTALLDIR = TORTUREDIR/LOCAL

Modified: branches/samba/upstream/source/lib/talloc/config.sub
===================================================================
--- branches/samba/upstream/source/lib/talloc/config.sub	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/talloc/config.sub	2008-06-15 01:55:18 UTC (rev 1953)
@@ -11,7 +11,7 @@
 #
 # This file is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful,
@@ -20,7 +20,9 @@
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a

Modified: branches/samba/upstream/source/lib/talloc/configure.ac
===================================================================
--- branches/samba/upstream/source/lib/talloc/configure.ac	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/talloc/configure.ac	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,5 +1,5 @@
 AC_PREREQ(2.50)
-AC_INIT(talloc, 1.2.0)
+AC_INIT(talloc.h)
 AC_CONFIG_SRCDIR([talloc.c])
 AC_SUBST(datarootdir)
 AC_CONFIG_HEADER(config.h)
@@ -15,9 +15,4 @@
 fi
 AC_SUBST(DOC_TARGET)
 
-AC_LD_PICFLAG
-AC_LD_SHLIBEXT
-AC_LD_SONAMEFLAG
-AC_LIBREPLACE_SHLD_FLAGS
-
 AC_OUTPUT(Makefile talloc.pc)

Modified: branches/samba/upstream/source/lib/talloc/libtalloc.m4
===================================================================
--- branches/samba/upstream/source/lib/talloc/libtalloc.m4	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/talloc/libtalloc.m4	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,10 +1,10 @@
 dnl find the talloc sources. This is meant to work both for 
 dnl talloc standalone builds, and builds of packages using talloc
 tallocdir=""
-tallocpaths=". lib/talloc talloc ../talloc"
+tallocpaths="$srcdir $srcdir/lib/talloc $srcdir/talloc $srcdir/../talloc"
 for d in $tallocpaths; do
-	if test -f "$srcdir/$d/talloc.c"; then
-		tallocdir="$d"
+	if test -f "$d/talloc.c"; then
+		tallocdir="$d"		
 		AC_SUBST(tallocdir)
 		break;
 	fi
@@ -12,15 +12,9 @@
 if test x"$tallocdir" = "x"; then
    AC_MSG_ERROR([cannot find talloc source in $tallocpaths])
 fi
-TALLOC_OBJ="talloc.o"
-AC_SUBST(TALLOC_OBJ)
+TALLOCOBJ="talloc.o"
+AC_SUBST(TALLOCOBJ)
 
-TALLOC_CFLAGS="-I$srcdir/$tallocdir"
-AC_SUBST(TALLOC_CFLAGS)
-
-TALLOC_LIBS=""
-AC_SUBST(TALLOC_LIBS)
-
 AC_CHECK_SIZEOF(size_t,cross)
 AC_CHECK_SIZEOF(void *,cross)
 

Deleted: branches/samba/upstream/source/lib/talloc/rules.mk
===================================================================
--- branches/samba/upstream/source/lib/talloc/rules.mk	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/talloc/rules.mk	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,18 +0,0 @@
-.SUFFIXES: .c .o .3 .3.xml .xml .html
-
-showflags::
-	@echo 'talloc will be compiled with flags:'
-	@echo '  CFLAGS = $(CFLAGS)'
-	@echo '  LIBS = $(LIBS)'
-
-.c.o:
-	$(CC) $(PICFLAG) -o $@ -c $< $(CFLAGS)
-
-.3.xml.3:
-	-test -z "$(XSLTPROC)" || $(XSLTPROC) --nonet -o $@ http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $<
-
-.xml.html:
-	-test -z "$(XSLTPROC)" || $(XSLTPROC) --nonet -o $@ http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl $<
-
-distclean::
-	rm -f *~ */*~

Modified: branches/samba/upstream/source/lib/talloc/talloc.3.xml
===================================================================
--- branches/samba/upstream/source/lib/talloc/talloc.3.xml	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/talloc/talloc.3.xml	2008-06-15 01:55:18 UTC (rev 1953)
@@ -583,27 +583,11 @@
         </para>
         <programlisting>talloc_set_name_const(ptr, ptr)</programlisting>
     </refsect2>
-    <refsect2><title>char *talloc_append_string(const void *<emphasis role="italic">t</emphasis>, char *<emphasis role="italic">orig</emphasis>, const char *<emphasis role="italic">append</emphasis>);</title>
-        <para>
-	  The talloc_append_string() function appends the given formatted
-	  string to the given string.
-        </para>
-        <para>
-	  This function sets the name of the new pointer to the new
-	  string. This is equivalent to:
-        </para>
-        <programlisting>talloc_set_name_const(ptr, ptr)</programlisting>
-    </refsect2>
     <refsect2><title>char *talloc_vasprintf(const void *<emphasis role="italic">t</emphasis>, const char *<emphasis role="italic">fmt</emphasis>, va_list <emphasis role="italic">ap</emphasis>);</title>
         <para>
 	  The talloc_vasprintf() function is the talloc equivalent of the C
 	  library function vasprintf(3).
         </para>
-        <para>
-	  This function sets the name of the new pointer to the new
-	  string. This is equivalent to:
-        </para>
-        <programlisting>talloc_set_name_const(ptr, ptr)</programlisting>
     </refsect2>
     <refsect2><title>char *talloc_asprintf(const void *<emphasis role="italic">t</emphasis>, const char *<emphasis role="italic">fmt</emphasis>, ...);</title>
         <para>
@@ -621,11 +605,6 @@
 	  The talloc_asprintf_append() function appends the given formatted
 	  string to the given string.
         </para>
-        <para>
-	  This function sets the name of the new pointer to the new
-	  string. This is equivalent to:
-        </para>
-        <programlisting>talloc_set_name_const(ptr, ptr)</programlisting>
     </refsect2>
     <refsect2><title>(type *)talloc_array(const void *ctx, type, uint_t count);</title>
         <para>
@@ -721,7 +700,7 @@
     <para>
       This program is free software; you can redistribute it and/or modify
       it under the terms of the GNU General Public License as published by
-      the Free Software Foundation; either version 3 of the License, or (at
+      the Free Software Foundation; either version 2 of the License, or (at
       your option) any later version.
     </para>
     <para>
@@ -732,7 +711,8 @@
     </para>
     <para>
       You should have received a copy of the GNU General Public License
-      along with this program; if not, see http://www.gnu.org/licenses/.
+      along with this program; if not, write to the Free Software
+      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
     </para>
   </refsect1>
 </refentry>

Modified: branches/samba/upstream/source/lib/talloc/talloc.c
===================================================================
--- branches/samba/upstream/source/lib/talloc/talloc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/talloc/talloc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -15,7 +15,7 @@
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
 
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -23,7 +23,8 @@
    Lesser General Public License for more details.
 
    You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
+   License along with this library; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
 /*
@@ -60,8 +61,6 @@
 #define TALLOC_MAGIC 0xe814ec70
 #define TALLOC_FLAG_FREE 0x01
 #define TALLOC_FLAG_LOOP 0x02
-#define TALLOC_FLAG_POOL 0x04		/* This is a talloc pool */
-#define TALLOC_FLAG_POOLMEM 0x08	/* This is allocated in a pool */
 #define TALLOC_MAGIC_REFERENCE ((const char *)1)
 
 /* by default we abort when given a bad pointer (such as when talloc_free() is called 
@@ -85,8 +84,8 @@
 #define likely(x)   __builtin_expect(!!(x), 1)
 #define unlikely(x) __builtin_expect(!!(x), 0)
 #else
-#define likely(x) (x)
-#define unlikely(x) (x)
+#define likely(x) x
+#define unlikely(x) x
 #endif
 
 /* this null_context is only used if talloc_enable_leak_report() or
@@ -111,35 +110,12 @@
 	const char *name;
 	size_t size;
 	unsigned flags;
-
-	/*
-	 * "pool" has dual use:
-	 *
-	 * For the talloc pool itself (i.e. TALLOC_FLAG_POOL is set), "pool"
-	 * marks the end of the currently allocated area.
-	 *
-	 * For members of the pool (i.e. TALLOC_FLAG_POOLMEM is set), "pool"
-	 * is a pointer to the struct talloc_chunk of the pool that it was
-	 * allocated from. This way children can quickly find the pool to chew
-	 * from.
-	 */
-	void *pool;
 };
 
 /* 16 byte alignment seems to keep everyone happy */
 #define TC_HDR_SIZE ((sizeof(struct talloc_chunk)+15)&~15)
 #define TC_PTR_FROM_CHUNK(tc) ((void *)(TC_HDR_SIZE + (char*)tc))
 
-static void talloc_abort_double_free(void)
-{
-	TALLOC_ABORT("Bad talloc magic value - double free"); 
-}
-
-static void talloc_abort_unknown_value(void)
-{
-	TALLOC_ABORT("Bad talloc magic value - unknown value"); 
-}
-
 /* panic if we get a bad magic value */
 static inline struct talloc_chunk *talloc_chunk_from_ptr(const void *ptr)
 {
@@ -147,9 +123,9 @@
 	struct talloc_chunk *tc = discard_const_p(struct talloc_chunk, pp - TC_HDR_SIZE);
 	if (unlikely((tc->flags & (TALLOC_FLAG_FREE | ~0xF)) != TALLOC_MAGIC)) { 
 		if (tc->flags & TALLOC_FLAG_FREE) {
-			talloc_abort_double_free();
+			TALLOC_ABORT("Bad talloc magic value - double free"); 
 		} else {
-			talloc_abort_unknown_value();
+			TALLOC_ABORT("Bad talloc magic value - unknown value"); 
 		}
 	}
 	return tc;
@@ -215,87 +191,12 @@
 	return tc? tc->name : NULL;
 }
 
-/*
-  A pool carries an in-pool object count count in the first 16 bytes.
-  bytes. This is done to support talloc_steal() to a parent outside of the
-  pool. The count includes the pool itself, so a talloc_free() on a pool will
-  only destroy the pool if the count has dropped to zero. A talloc_free() of a
-  pool member will reduce the count, and eventually also call free(3) on the
-  pool memory.
-
-  The object count is not put into "struct talloc_chunk" because it is only
-  relevant for talloc pools and the alignment to 16 bytes would increase the
-  memory footprint of each talloc chunk by those 16 bytes.
-*/
-
-#define TALLOC_POOL_HDR_SIZE 16
-
-static unsigned int *talloc_pool_objectcount(struct talloc_chunk *tc)
-{
-	return (unsigned int *)((char *)tc + sizeof(struct talloc_chunk));
-}
-
-/*
-  Allocate from a pool
-*/
-
-static struct talloc_chunk *talloc_alloc_pool(struct talloc_chunk *parent,
-					      size_t size)
-{
-	struct talloc_chunk *pool_ctx = NULL;
-	size_t space_left;
-	struct talloc_chunk *result;
-	size_t chunk_size;
-
-	if (parent == NULL) {
-		return NULL;
-	}
-
-	if (parent->flags & TALLOC_FLAG_POOL) {
-		pool_ctx = parent;
-	}
-	else if (parent->flags & TALLOC_FLAG_POOLMEM) {
-		pool_ctx = (struct talloc_chunk *)parent->pool;
-	}
-
-	if (pool_ctx == NULL) {
-		return NULL;
-	}
-
-	space_left = ((char *)pool_ctx + TC_HDR_SIZE + pool_ctx->size)
-		- ((char *)pool_ctx->pool);
-
-	/*
-	 * Align size to 16 bytes
-	 */
-	chunk_size = ((size + 15) & ~15);
-
-	if (space_left < chunk_size) {
-		return NULL;
-	}
-
-	result = (struct talloc_chunk *)pool_ctx->pool;
-
-#if defined(DEVELOPER) && defined(VALGRIND_MAKE_MEM_UNDEFINED)
-	VALGRIND_MAKE_MEM_UNDEFINED(result, size);
-#endif
-
-	pool_ctx->pool = (void *)((char *)result + chunk_size);
-
-	result->flags = TALLOC_MAGIC | TALLOC_FLAG_POOLMEM;
-	result->pool = pool_ctx;
-
-	*talloc_pool_objectcount(pool_ctx) += 1;
-
-	return result;
-}
-
 /* 
    Allocate a bit of memory as a child of an existing pointer
 */
 static inline void *__talloc(const void *context, size_t size)
 {
-	struct talloc_chunk *tc = NULL;
+	struct talloc_chunk *tc;
 
 	if (unlikely(context == NULL)) {
 		context = null_context;
@@ -305,19 +206,11 @@
 		return NULL;
 	}
 
-	if (context != NULL) {
-		tc = talloc_alloc_pool(talloc_chunk_from_ptr(context),
-				       TC_HDR_SIZE+size);
-	}
+	tc = (struct talloc_chunk *)malloc(TC_HDR_SIZE+size);
+	if (unlikely(tc == NULL)) return NULL;
 
-	if (tc == NULL) {
-		tc = (struct talloc_chunk *)malloc(TC_HDR_SIZE+size);
-		if (unlikely(tc == NULL)) return NULL;
-		tc->flags = TALLOC_MAGIC;
-		tc->pool  = NULL;
-	}
-
 	tc->size = size;
+	tc->flags = TALLOC_MAGIC;
 	tc->destructor = NULL;
 	tc->child = NULL;
 	tc->name = NULL;
@@ -344,33 +237,6 @@
 }
 
 /*
- * Create a talloc pool
- */
-
-void *talloc_pool(const void *context, size_t size)
-{
-	void *result = __talloc(context, size + TALLOC_POOL_HDR_SIZE);
-	struct talloc_chunk *tc;
-
-	if (unlikely(result == NULL)) {
-		return NULL;
-	}
-
-	tc = talloc_chunk_from_ptr(result);
-
-	tc->flags |= TALLOC_FLAG_POOL;
-	tc->pool = (char *)result + TALLOC_POOL_HDR_SIZE;
-
-	*talloc_pool_objectcount(tc) = 1;
-
-#if defined(DEVELOPER) && defined(VALGRIND_MAKE_MEM_NOACCESS)
-	VALGRIND_MAKE_MEM_NOACCESS(tc->pool, size);
-#endif
-
-	return result;
-}
-
-/*
   setup a destructor to be called on free of a pointer
   the destructor should return 0 on success, or -1 on failure.
   if the destructor fails then the free is failed, and the memory can
@@ -545,29 +411,7 @@
 	}
 
 	tc->flags |= TALLOC_FLAG_FREE;
-
-	if (tc->flags & (TALLOC_FLAG_POOL|TALLOC_FLAG_POOLMEM)) {
-		struct talloc_chunk *pool;
-		unsigned int *pool_object_count;
-
-		pool = (tc->flags & TALLOC_FLAG_POOL)
-			? tc : (struct talloc_chunk *)tc->pool;
-
-		pool_object_count = talloc_pool_objectcount(pool);
-
-		if (*pool_object_count == 0) {
-			TALLOC_ABORT("Pool object count zero!");
-		}
-
-		*pool_object_count -= 1;
-
-		if (*pool_object_count == 0) {
-			free(pool);
-		}
-	}
-	else {
-		free(tc);
-	}
+	free(tc);
 	return 0;
 }
 
@@ -865,15 +709,6 @@
 			talloc_steal(new_parent, child);
 		}
 	}
-
-	if ((tc->flags & TALLOC_FLAG_POOL)
-	    && (*talloc_pool_objectcount(tc) == 1)) {
-		tc->pool = ((char *)tc + TC_HDR_SIZE + TALLOC_POOL_HDR_SIZE);
-#if defined(DEVELOPER) && defined(VALGRIND_MAKE_MEM_NOACCESS)
-		VALGRIND_MAKE_MEM_NOACCESS(
-			tc->pool, tc->size - TALLOC_POOL_HDR_SIZE);
-#endif
-	}
 }
 
 /* 
@@ -925,7 +760,6 @@
 {
 	struct talloc_chunk *tc;
 	void *new_ptr;
-	bool malloced = false;
 
 	/* size zero is equivalent to free() */
 	if (unlikely(size == 0)) {
@@ -949,12 +783,6 @@
 		return NULL;
 	}
 
-	/* don't shrink if we have less than 1k to gain */
-	if ((size < tc->size) && ((tc->size - size) < 1024)) {
-		tc->size = size;
-		return ptr;
-	}
-
 	/* by resetting magic we catch users of the old memory */
 	tc->flags |= TALLOC_FLAG_FREE;
 
@@ -965,24 +793,7 @@
 		free(tc);
 	}
 #else
-	if (tc->flags & TALLOC_FLAG_POOLMEM) {
-
-		new_ptr = talloc_alloc_pool(tc, size + TC_HDR_SIZE);
-		*talloc_pool_objectcount((struct talloc_chunk *)
-					 (tc->pool)) -= 1;
-
-		if (new_ptr == NULL) {
-			new_ptr = malloc(TC_HDR_SIZE+size);
-			malloced = true;
-		}
-
-		if (new_ptr) {
-			memcpy(new_ptr, tc, MIN(tc->size,size) + TC_HDR_SIZE);
-		}
-	}
-	else {
-		new_ptr = realloc(tc, size + TC_HDR_SIZE);
-	}
+	new_ptr = realloc(tc, size + TC_HDR_SIZE);
 #endif
 	if (unlikely(!new_ptr)) {	
 		tc->flags &= ~TALLOC_FLAG_FREE; 
@@ -990,10 +801,7 @@
 	}
 
 	tc = (struct talloc_chunk *)new_ptr;
-	tc->flags &= ~TALLOC_FLAG_FREE;
-	if (malloced) {
-		tc->flags &= ~TALLOC_FLAG_POOLMEM;
-	}
+	tc->flags &= ~TALLOC_FLAG_FREE; 
 	if (tc->parent) {
 		tc->parent->child = tc;
 	}
@@ -1292,132 +1100,62 @@
 	return newp;
 }
 
-static inline char *__talloc_strlendup(const void *t, const char *p, size_t len)
-{
-	char *ret;
-
-	ret = (char *)__talloc(t, len + 1);
-	if (unlikely(!ret)) return NULL;
-
-	memcpy(ret, p, len);
-	ret[len] = 0;
-
-	_talloc_set_name_const(ret, ret);
-	return ret;
-}
-
 /*
-  strdup with a talloc
+  strdup with a talloc 
 */
 char *talloc_strdup(const void *t, const char *p)
 {
-	if (unlikely(!p)) return NULL;
-	return __talloc_strlendup(t, p, strlen(p));
-}
-
-/*
-  strndup with a talloc
-*/
-char *talloc_strndup(const void *t, const char *p, size_t n)
-{
-	if (unlikely(!p)) return NULL;
-	return __talloc_strlendup(t, p, strnlen(p, n));
-}
-
-static inline char *__talloc_strlendup_append(char *s, size_t slen,
-					      const char *a, size_t alen)
-{
 	char *ret;
-
-	ret = talloc_realloc(NULL, s, char, slen + alen + 1);
-	if (unlikely(!ret)) return NULL;
-
-	/* append the string and the trailing \0 */
-	memcpy(&ret[slen], a, alen);
-	ret[slen+alen] = 0;
-
-	_talloc_set_name_const(ret, ret);
-	return ret;
-}
-
-/*
- * Appends at the end of the string.
- */
-char *talloc_strdup_append(char *s, const char *a)
-{
-	if (unlikely(!s)) {
-		return talloc_strdup(NULL, a);
+	if (!p) {
+		return NULL;
 	}
-
-	if (unlikely(!a)) {
-		return s;
+	ret = (char *)talloc_memdup(t, p, strlen(p) + 1);
+	if (likely(ret)) {
+		_talloc_set_name_const(ret, ret);
 	}
-
-	return __talloc_strlendup_append(s, strlen(s), a, strlen(a));
+	return ret;
 }
 
 /*
- * Appends at the end of the talloc'ed buffer,
- * not the end of the string.
- */
-char *talloc_strdup_append_buffer(char *s, const char *a)
+ append to a talloced string 
+*/
+char *talloc_append_string(const void *t, char *orig, const char *append)
 {
-	size_t slen;
+	char *ret;
+	size_t olen = strlen(orig);
+	size_t alenz;
 
-	if (unlikely(!s)) {
-		return talloc_strdup(NULL, a);
-	}
+	if (!append)
+		return orig;
 
-	if (unlikely(!a)) {
-		return s;
-	}
+	alenz = strlen(append) + 1;
 
-	slen = talloc_get_size(s);
-	if (likely(slen > 0)) {
-		slen--;
-	}
+	ret = talloc_realloc(t, orig, char, olen + alenz);
+	if (!ret)
+		return NULL;
 
-	return __talloc_strlendup_append(s, slen, a, strlen(a));
-}
+	/* append the string with the trailing \0 */
+	memcpy(&ret[olen], append, alenz);
 
-/*
- * Appends at the end of the string.
- */
-char *talloc_strndup_append(char *s, const char *a, size_t n)
-{
-	if (unlikely(!s)) {
-		return talloc_strdup(NULL, a);
-	}
-
-	if (unlikely(!a)) {
-		return s;
-	}
-
-	return __talloc_strlendup_append(s, strlen(s), a, strnlen(a, n));
+	return ret;
 }
 
 /*
- * Appends at the end of the talloc'ed buffer,
- * not the end of the string.
- */
-char *talloc_strndup_append_buffer(char *s, const char *a, size_t n)
+  strndup with a talloc 
+*/
+char *talloc_strndup(const void *t, const char *p, size_t n)
 {
-	size_t slen;
+	size_t len;
+	char *ret;
 
-	if (unlikely(!s)) {
-		return talloc_strdup(NULL, a);
-	}
+	for (len=0; len<n && p[len]; len++) ;
 
-	if (unlikely(!a)) {
-		return s;
-	}
-
-	slen = talloc_get_size(s);
-	if (likely(slen > 0)) {
-		slen--;
-	}
-
-	return __talloc_strlendup_append(s, slen, a, strnlen(a, n));
+	ret = (char *)__talloc(t, len + 1);
+	if (!ret) { return NULL; }
+	memcpy(ret, p, len);
+	ret[len] = 0;
+	_talloc_set_name_const(ret, ret);
+	return ret;
 }
 
 #ifndef HAVE_VA_COPY
@@ -1439,18 +1177,18 @@
 	va_copy(ap2, ap);
 	len = vsnprintf(&c, 1, fmt, ap2);
 	va_end(ap2);
-	if (unlikely(len < 0)) {
+	if (len < 0) {
 		return NULL;
 	}
 
 	ret = (char *)__talloc(t, len+1);
-	if (unlikely(!ret)) return NULL;
+	if (ret) {
+		va_copy(ap2, ap);
+		vsnprintf(ret, len+1, fmt, ap2);
+		va_end(ap2);
+		_talloc_set_name_const(ret, ret);
+	}
 
-	va_copy(ap2, ap);
-	vsnprintf(ret, len+1, fmt, ap2);
-	va_end(ap2);
-
-	_talloc_set_name_const(ret, ret);
 	return ret;
 }
 
@@ -1470,78 +1208,52 @@
 	return ret;
 }
 
-static inline char *__talloc_vaslenprintf_append(char *s, size_t slen,
-						 const char *fmt, va_list ap)
-						 PRINTF_ATTRIBUTE(3,0);
 
-static inline char *__talloc_vaslenprintf_append(char *s, size_t slen,
-						 const char *fmt, va_list ap)
-{
-	ssize_t alen;
+/**
+ * Realloc @p s to append the formatted result of @p fmt and @p ap,
+ * and return @p s, which may have moved.  Good for gradually
+ * accumulating output into a string buffer.
+ **/
+char *talloc_vasprintf_append(char *s, const char *fmt, va_list ap)
+{	
+	struct talloc_chunk *tc;
+	int len, s_len;
 	va_list ap2;
 	char c;
 
+	if (s == NULL) {
+		return talloc_vasprintf(NULL, fmt, ap);
+	}
+
+	tc = talloc_chunk_from_ptr(s);
+
+	s_len = tc->size - 1;
+
 	va_copy(ap2, ap);
-	alen = vsnprintf(&c, 1, fmt, ap2);
+	len = vsnprintf(&c, 1, fmt, ap2);
 	va_end(ap2);
 
-	if (alen <= 0) {
+	if (len <= 0) {
 		/* Either the vsnprintf failed or the format resulted in
 		 * no characters being formatted. In the former case, we
 		 * ought to return NULL, in the latter we ought to return
-		 * the original string. Most current callers of this
+		 * the original string. Most current callers of this 
 		 * function expect it to never return NULL.
 		 */
 		return s;
 	}
 
-	s = talloc_realloc(NULL, s, char, slen + alen + 1);
+	s = talloc_realloc(NULL, s, char, s_len + len+1);
 	if (!s) return NULL;
 
 	va_copy(ap2, ap);
-	vsnprintf(s + slen, alen + 1, fmt, ap2);
+	vsnprintf(s+s_len, len+1, fmt, ap2);
 	va_end(ap2);
-
 	_talloc_set_name_const(s, s);
+
 	return s;
 }
 
-/**
- * Realloc @p s to append the formatted result of @p fmt and @p ap,
- * and return @p s, which may have moved.  Good for gradually
- * accumulating output into a string buffer. Appends at the end
- * of the string.
- **/
-char *talloc_vasprintf_append(char *s, const char *fmt, va_list ap)
-{
-	if (unlikely(!s)) {
-		return talloc_vasprintf(NULL, fmt, ap);
-	}
-
-	return __talloc_vaslenprintf_append(s, strlen(s), fmt, ap);
-}
-
-/**
- * Realloc @p s to append the formatted result of @p fmt and @p ap,
- * and return @p s, which may have moved. Always appends at the
- * end of the talloc'ed buffer, not the end of the string.
- **/
-char *talloc_vasprintf_append_buffer(char *s, const char *fmt, va_list ap)
-{
-	size_t slen;
-
-	if (unlikely(!s)) {
-		return talloc_vasprintf(NULL, fmt, ap);
-	}
-
-	slen = talloc_get_size(s);
-	if (likely(slen > 0)) {
-		slen--;
-	}
-
-	return __talloc_vaslenprintf_append(s, slen, fmt, ap);
-}
-
 /*
   Realloc @p s to append the formatted result of @p fmt and return @p
   s, which may have moved.  Good for gradually accumulating output
@@ -1558,21 +1270,6 @@
 }
 
 /*
-  Realloc @p s to append the formatted result of @p fmt and return @p
-  s, which may have moved.  Good for gradually accumulating output
-  into a buffer.
- */
-char *talloc_asprintf_append_buffer(char *s, const char *fmt, ...)
-{
-	va_list ap;
-
-	va_start(ap, fmt);
-	s = talloc_vasprintf_append_buffer(s, fmt, ap);
-	va_end(ap);
-	return s;
-}
-
-/*
   alloc an array, checking for integer overflow in the array size
 */
 void *_talloc_array(const void *ctx, size_t el_size, unsigned count, const char *name)

Modified: branches/samba/upstream/source/lib/talloc/talloc.h
===================================================================
--- branches/samba/upstream/source/lib/talloc/talloc.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/talloc/talloc.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -14,7 +14,7 @@
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
 
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -22,13 +22,10 @@
    Lesser General Public License for more details.
 
    You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
+   License along with this library; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdarg.h>
-
 /* this is only needed for compatibility with the old talloc */
 typedef void TALLOC_CTX;
 
@@ -111,12 +108,10 @@
 #define talloc_array_p(ctx, type, count) talloc_array(ctx, type, count)
 #define talloc_realloc_p(ctx, p, type, count) talloc_realloc(ctx, p, type, count)
 #define talloc_destroy(ctx) talloc_free(ctx)
-#define talloc_append_string(c, s, a) (s?talloc_strdup_append(s,a):talloc_strdup(c, a))
 #endif
 
 /* The following definitions come from talloc.c  */
 void *_talloc(const void *context, size_t size);
-void *talloc_pool(const void *context, size_t size);
 void _talloc_set_destructor(const void *ptr, int (*destructor)(void *));
 int talloc_increase_ref_count(const void *ptr);
 size_t talloc_reference_count(const void *ptr);
@@ -154,6 +149,13 @@
 void talloc_enable_leak_report_full(void);
 void *_talloc_zero(const void *ctx, size_t size, const char *name);
 void *_talloc_memdup(const void *t, const void *p, size_t size, const char *name);
+char *talloc_strdup(const void *t, const char *p);
+char *talloc_strndup(const void *t, const char *p, size_t n);
+char *talloc_append_string(const void *t, char *orig, const char *append);
+char *talloc_vasprintf(const void *t, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0);
+char *talloc_vasprintf_append(char *s, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0);
+char *talloc_asprintf(const void *t, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
+char *talloc_asprintf_append(char *s, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
 void *_talloc_array(const void *ctx, size_t el_size, unsigned count, const char *name);
 void *_talloc_zero_array(const void *ctx, size_t el_size, unsigned count, const char *name);
 void *_talloc_realloc_array(const void *ctx, void *ptr, size_t el_size, unsigned count, const char *name);
@@ -164,20 +166,4 @@
 void talloc_show_parents(const void *context, FILE *file);
 int talloc_is_parent(const void *context, const void *ptr);
 
-char *talloc_strdup(const void *t, const char *p);
-char *talloc_strdup_append(char *s, const char *a);
-char *talloc_strdup_append_buffer(char *s, const char *a);
-
-char *talloc_strndup(const void *t, const char *p, size_t n);
-char *talloc_strndup_append(char *s, const char *a, size_t n);
-char *talloc_strndup_append_buffer(char *s, const char *a, size_t n);
-
-char *talloc_vasprintf(const void *t, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0);
-char *talloc_vasprintf_append(char *s, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0);
-char *talloc_vasprintf_append_buffer(char *s, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0);
-
-char *talloc_asprintf(const void *t, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
-char *talloc_asprintf_append(char *s, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
-char *talloc_asprintf_append_buffer(char *s, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
-
 #endif

Deleted: branches/samba/upstream/source/lib/talloc/talloc.i
===================================================================
--- branches/samba/upstream/source/lib/talloc/talloc.i	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/talloc/talloc.i	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,31 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   Copyright (C) Jelmer Vernooij <jelmer at samba.org> 2007
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/* Don't expose talloc contexts in Python code. Python does reference 
-   counting for us, so just create a new top-level talloc context.
- */
-%typemap(in, numinputs=0, noblock=1) TALLOC_CTX * {
-    $1 = NULL;
-}
-
-%define %talloctype(TYPE)
-%nodefaultctor TYPE;
-%extend TYPE {
-    ~TYPE() { talloc_free($self); }
-}
-%enddef

Deleted: branches/samba/upstream/source/lib/talloc/talloc.mk
===================================================================
--- branches/samba/upstream/source/lib/talloc/talloc.mk	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/talloc/talloc.mk	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,37 +0,0 @@
-TALLOC_OBJ = $(tallocdir)/talloc.o 
-
-SOLIB = libtalloc.$(SHLIBEXT).$(PACKAGE_VERSION)
-SONAME = libtalloc.$(SHLIBEXT).1
-
-all:: libtalloc.a $(SOLIB) testsuite
-
-testsuite:: $(LIBOBJ) testsuite.o
-	$(CC) $(CFLAGS) -o testsuite testsuite.o $(LIBOBJ) $(LIBS)
-
-libtalloc.a: $(LIBOBJ)
-	ar -rv $@ $(LIBOBJ)
-	@-ranlib $@
-
-install:: all 
-	${INSTALLCMD} -d $(DESTDIR)$(libdir)
-	${INSTALLCMD} -d $(DESTDIR)$(libdir)/pkgconfig
-	${INSTALLCMD} -m 755 libtalloc.a $(DESTDIR)$(libdir)
-	${INSTALLCMD} -m 755 $(SOLIB) $(DESTDIR)$(libdir)
-	${INSTALLCMD} -d $(DESTDIR)${includedir}
-	${INSTALLCMD} -m 644 $(srcdir)/talloc.h $(DESTDIR)$(includedir)
-	${INSTALLCMD} -m 644 talloc.pc $(DESTDIR)$(libdir)/pkgconfig
-	if [ -f talloc.3 ];then ${INSTALLCMD} -d $(DESTDIR)$(mandir)/man3; fi
-	if [ -f talloc.3 ];then ${INSTALLCMD} -m 644 talloc.3 $(DESTDIR)$(mandir)/man3; fi
-	which swig >/dev/null 2>&1 && ${INSTALLCMD} -d $(DESTDIR)`swig -swiglib` || true
-	which swig >/dev/null 2>&1 && ${INSTALLCMD} -m 644 talloc.i $(DESTDIR)`swig -swiglib` || true
-
-doc:: talloc.3 talloc.3.html
-
-clean::
-	rm -f *~ $(LIBOBJ) $(SOLIB) libtalloc.a testsuite testsuite.o *.gc?? talloc.3 talloc.3.html
-
-test:: testsuite
-	./testsuite
-
-gcov::
-	gcov talloc.c

Modified: branches/samba/upstream/source/lib/talloc/talloc.pc.in
===================================================================
--- branches/samba/upstream/source/lib/talloc/talloc.pc.in	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/talloc/talloc.pc.in	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,6 @@
 
 Name: talloc 
 Description: A hierarchical pool based memory system with destructors
-Version: @PACKAGE_VERSION@
-Libs: -L${libdir} -ltalloc
-Cflags: -I${includedir} 
-URL: http://talloc.samba.org/
+Version: 4.0
+Libs: @LIBS@ -L${libdir} -ltalloc
+Cflags: -I${includedir} @CFLAGS@

Modified: branches/samba/upstream/source/lib/talloc/talloc_guide.txt
===================================================================
--- branches/samba/upstream/source/lib/talloc/talloc_guide.txt	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/talloc/talloc_guide.txt	2008-06-15 01:55:18 UTC (rev 1953)
@@ -12,7 +12,7 @@
 Samba4 talloc has been ported back to Samba3, so this guide applies to both.
 
 The new talloc is a hierarchical, reference counted memory pool system
-with destructors. Quite a mouthful really, but not too bad once you
+with destructors. Quite a mounthful really, but not too bad once you
 get used to it.
 
 Perhaps the biggest change from Samba3 is that there is no distinction
@@ -533,34 +533,21 @@
 string. This is equivalent to:
    talloc_set_name_const(ptr, ptr)
 
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-char *talloc_append_string(const void *t, char *orig, const char *append);
 
-The talloc_append_string() function appends the given formatted
-string to the given string.
-
-This function sets the name of the new pointer to the new
-string. This is equivalent to:
-   talloc_set_name_const(ptr, ptr)
-
 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
 char *talloc_vasprintf(const void *t, const char *fmt, va_list ap);
 
 The talloc_vasprintf() function is the talloc equivalent of the C
 library function vasprintf()
 
-This functions sets the name of the new pointer to the new
-string. This is equivalent to:
-   talloc_set_name_const(ptr, ptr)
 
-
 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
 char *talloc_asprintf(const void *t, const char *fmt, ...);
 
 The talloc_asprintf() function is the talloc equivalent of the C
 library function asprintf()
 
-This functions sets the name of the new pointer to the new
+This functions sets the name of the new pointer to the passed
 string. This is equivalent to:
    talloc_set_name_const(ptr, ptr)
 
@@ -568,31 +555,12 @@
 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
 char *talloc_asprintf_append(char *s, const char *fmt, ...);
 
-The talloc_asprintf_append() function appends the given formatted
-string to the given string.
-Use this varient when the string in the current talloc buffer may
-have been truncated in length.
-
-This functions sets the name of the new pointer to the new
-string. This is equivalent to:
-   talloc_set_name_const(ptr, ptr)
-
-
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-char *talloc_asprintf_append_buffer(char *s, const char *fmt, ...);
-
 The talloc_asprintf_append() function appends the given formatted 
-string to the end of the currently allocated talloc buffer.
-Use this varient when the string in the current talloc buffer has
-not been changed.
+string to the given string. 
 
-This functions sets the name of the new pointer to the new
-string. This is equivalent to:
-   talloc_set_name_const(ptr, ptr)
 
-
 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-((type *)talloc_array(const void *ctx, type, uint_t count);
+(type *)talloc_array(const void *ctx, type, uint_t count);
 
 The talloc_array() macro is equivalent to:
 

Modified: branches/samba/upstream/source/lib/talloc/testsuite.c
===================================================================
--- branches/samba/upstream/source/lib/talloc/testsuite.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/talloc/testsuite.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -12,7 +12,7 @@
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
 
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,7 +20,8 @@
    Lesser General Public License for more details.
 
    You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
+   License along with this library; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
 #include "replace.h"
@@ -106,7 +107,7 @@
 {
 	void *root, *p1, *p2, *ref, *r1;
 
-	printf("test: ref1\n# SINGLE REFERENCE FREE\n");
+	printf("test: ref1 [\nSINGLE REFERENCE FREE\n]\n");
 
 	root = talloc_named_const(NULL, 0, "root");
 	p1 = talloc_named_const(root, 1, "p1");
@@ -162,7 +163,7 @@
 {
 	void *root, *p1, *p2, *ref, *r1;
 
-	printf("test: ref2\n# DOUBLE REFERENCE FREE\n");
+	printf("test: ref2 [\nDOUBLE REFERENCE FREE\n]\n");
 	root = talloc_named_const(NULL, 0, "root");
 	p1 = talloc_named_const(root, 1, "p1");
 	talloc_named_const(p1, 1, "x1");
@@ -217,7 +218,7 @@
 {
 	void *root, *p1, *p2, *ref, *r1;
 
-	printf("test: ref3\n# PARENT REFERENCE FREE\n");
+	printf("test: ref3 [\nPARENT REFERENCE FREE\n]\n");
 
 	root = talloc_named_const(NULL, 0, "root");
 	p1 = talloc_named_const(root, 1, "p1");
@@ -256,7 +257,7 @@
 {
 	void *root, *p1, *p2, *ref, *r1;
 
-	printf("test: ref4\n# REFERRER REFERENCE FREE\n");
+	printf("test: ref4 [\nREFERRER REFERENCE FREE\n]\n");
 
 	root = talloc_named_const(NULL, 0, "root");
 	p1 = talloc_named_const(root, 1, "p1");
@@ -306,7 +307,7 @@
 {
 	void *root, *p1, *p2, *ref, *r1;
 
-	printf("test: unlink\n# UNLINK\n");
+	printf("test: unlink [\nUNLINK\n]\n");
 
 	root = talloc_named_const(NULL, 0, "root");
 	p1 = talloc_named_const(root, 1, "p1");
@@ -358,7 +359,7 @@
 	double *d;
 	const char *name;
 
-	printf("test: misc\n# MISCELLANEOUS\n");
+	printf("test: misc [\nMISCELLANEOUS\n]\n");
 
 	root = talloc_new(NULL);
 
@@ -419,15 +420,15 @@
 	p2 = talloc_strndup(p1, "foo", 2);
 	torture_assert("misc", strcmp("fo", p2) == 0, 
 				   "strndup doesn't work\n");
-	p2 = talloc_asprintf_append_buffer(p2, "o%c", 'd');
+	p2 = talloc_asprintf_append(p2, "o%c", 'd');
 	torture_assert("misc", strcmp("food", p2) == 0, 
-				   "talloc_asprintf_append_buffer doesn't work\n");
+				   "talloc_asprintf_append doesn't work\n");
 	CHECK_BLOCKS("misc", p2, 1);
 	CHECK_BLOCKS("misc", p1, 3);
 
-	p2 = talloc_asprintf_append_buffer(NULL, "hello %s", "world");
+	p2 = talloc_asprintf_append(NULL, "hello %s", "world");
 	torture_assert("misc", strcmp("hello world", p2) == 0,
-		"talloc_asprintf_append_buffer doesn't work\n");
+		"talloc_asprintf_append doesn't work\n");
 	CHECK_BLOCKS("misc", p2, 1);
 	CHECK_BLOCKS("misc", p1, 3);
 	talloc_free(p2);
@@ -509,7 +510,7 @@
 {
 	void *root, *p1, *p2;
 
-	printf("test: realloc\n# REALLOC\n");
+	printf("test: realloc [\nREALLOC\n]\n");
 
 	root = talloc_new(NULL);
 
@@ -553,7 +554,7 @@
 
 	talloc_free(root);
 
-	printf("success: realloc\n");
+	printf("success: REALLOC\n");
 
 	return true;
 }
@@ -617,7 +618,7 @@
 	};
 	struct el1 *el1;
 
-	printf("test: type\n# talloc type checking\n");
+	printf("test: type [\ntalloc type checking\n]\n");
 
 	root = talloc_new(NULL);
 
@@ -646,7 +647,7 @@
 {
 	void *root, *p1, *p2;
 
-	printf("test: steal\n# STEAL\n");
+	printf("test: steal [\nSTEAL\n]\n");
 
 	root = talloc_new(NULL);
 
@@ -702,7 +703,7 @@
 		int *x;
 	} *t1, *t2;
 
-	printf("test: move\n# MOVE\n");
+	printf("test: move [\nMOVE\n]\n");
 
 	root = talloc_new(NULL);
 
@@ -732,7 +733,7 @@
 {
 	void *root, *p1;
 
-	printf("test: realloc_fn\n# talloc_realloc_fn\n");
+	printf("test: realloc_fn [\ntalloc_realloc_fn\n]\n");
 
 	root = talloc_new(NULL);
 
@@ -757,7 +758,7 @@
 {
 	void *root, *p1, *p2, *c1;
 
-	printf("test: unref_reparent\n# UNREFERENCE AFTER PARENT FREED\n");
+	printf("test: unref_reparent [\nUNREFERENCE AFTER PARENT FREED\n]\n");
 
 	root = talloc_named_const(NULL, 0, "root");
 	p1 = talloc_named_const(root, 1, "orig parent");
@@ -794,7 +795,7 @@
 	int i;
 	struct timeval tv;
 
-	printf("test: speed\n# TALLOC VS MALLOC SPEED\n");
+	printf("test: speed [\nTALLOC VS MALLOC SPEED\n]\n");
 
 	tv = timeval_current();
 	count = 0;
@@ -813,30 +814,11 @@
 
 	talloc_free(ctx);
 
-	ctx = talloc_pool(NULL, 1024);
-
 	tv = timeval_current();
 	count = 0;
 	do {
 		void *p1, *p2, *p3;
 		for (i=0;i<loop;i++) {
-			p1 = talloc_size(ctx, loop % 100);
-			p2 = talloc_strdup(p1, "foo bar");
-			p3 = talloc_size(p1, 300);
-			talloc_free_children(ctx);
-		}
-		count += 3 * loop;
-	} while (timeval_elapsed(&tv) < 5.0);
-
-	talloc_free(ctx);
-
-	fprintf(stderr, "talloc_pool: %.0f ops/sec\n", count/timeval_elapsed(&tv));
-
-	tv = timeval_current();
-	count = 0;
-	do {
-		void *p1, *p2, *p3;
-		for (i=0;i<loop;i++) {
 			p1 = malloc(loop % 100);
 			p2 = strdup("foo bar");
 			p3 = malloc(300);
@@ -859,7 +841,7 @@
 	char *parent, *child; 
 	void *child_owner = talloc_new(NULL);
 
-	printf("test: lifeless\n# TALLOC_UNLINK LOOP\n");
+	printf("test: lifeless [\nTALLOC_UNLINK LOOP\n]\n");
 
 	parent = talloc_strdup(top, "parent");
 	child = talloc_strdup(parent, "child");  
@@ -893,7 +875,7 @@
 		char *req2, *req3;
 	} *req1;
 
-	printf("test: loop\n# TALLOC LOOP DESTRUCTION\n");
+	printf("test: loop [\nTALLOC LOOP DESTRUCTION\n]\n");
 
 	parent = talloc_strdup(top, "parent");
 	req1 = talloc(parent, struct req1);
@@ -927,7 +909,7 @@
 	char *level2;
 	char *level3;
 
-	printf("test: free_parent_deny_child\n# TALLOC FREE PARENT DENY CHILD\n");
+	printf("test: free_parent_deny_child [\nTALLOC FREE PARENT DENY CHILD\n]\n");
 
 	level1 = talloc_strdup(top, "level1");
 	level2 = talloc_strdup(level1, "level2");
@@ -957,7 +939,7 @@
 	const char *location3;
 	const char *location4;
 
-	printf("test: ptrtype\n# TALLOC PTRTYPE\n");
+	printf("test: ptrtype [\nTALLOC PTRTYPE\n]\n");
 
 	s1 = talloc_ptrtype(top, s1);location1 = __location__;
 
@@ -1011,7 +993,7 @@
 	s4 = talloc_array_ptrtype(top, s4, 10);location4 = __location__;
 
 	if (talloc_get_size(s4) != (sizeof(struct struct1 **) * 10)) {
-		printf("failure: ptrtype [\n"
+		printf("failure: TALLOC PTRTYPE [\n"
 		      "talloc_array_ptrtype() allocated the wrong size "
 		       "%lu (should be %lu)\n]\n",
 			   (unsigned long)talloc_get_size(s4),
@@ -1028,51 +1010,10 @@
 	return true;
 }
 
-static int _test_talloc_free_in_destructor(void **ptr)
-{
-	talloc_free(*ptr);
-	return 0;
-}
-
-static bool test_talloc_free_in_destructor(void)
-{
-	void *level0;
-	void *level1;
-	void *level2;
-	void *level3;
-	void *level4;
-	void **level5;
-
-	printf("test: free_in_destructor\n# TALLOC FREE IN DESTRUCTOR\n");
-
-	level0 = talloc_new(NULL);
-	level1 = talloc_new(level0);
-	level2 = talloc_new(level1);
-	level3 = talloc_new(level2);
-	level4 = talloc_new(level3);
-	level5 = talloc(level4, void *);
-
-	*level5 = level3;
-	(void)talloc_reference(level0, level3);
-	(void)talloc_reference(level3, level3);
-	(void)talloc_reference(level5, level3);
-
-	talloc_set_destructor(level5, _test_talloc_free_in_destructor);
-
-	talloc_free(level1);
-
-	talloc_free(level0);
-
-	printf("success: free_in_destructor\n");
-	return true;
-}
-
 static bool test_autofree(void)
 {
-#if _SAMBA_BUILD_ < 4
-	/* autofree test would kill smbtorture */
 	void *p;
-	printf("test: autofree\n# TALLOC AUTOFREE CONTEXT\n");
+	printf("test: autofree [\nTALLOC AUTOFREE CONTEXT\n]\n");
 
 	p = talloc_autofree_context();
 	talloc_free(p);
@@ -1081,34 +1022,13 @@
 	talloc_free(p);
 
 	printf("success: autofree\n");
-#endif
 	return true;
 }
 
-static bool test_pool(void)
+int main(void)
 {
-	void *pool;
-	void *p1, *p2, *p3, *p4;
-
-	pool = talloc_pool(NULL, 1024);
-
-	p1 = talloc_size(pool, 80);
-	p2 = talloc_size(pool, 20);
-	p3 = talloc_size(p1, 50);
-	p4 = talloc_size(p3, 1000);
-
-	talloc_free(pool);
-
-	return true;
-}
-
-struct torture_context;
-bool torture_local_talloc(struct torture_context *tctx)
-{
 	bool ret = true;
 
-	setlinebuf(stdout);
-
 	talloc_disable_null_tracking();
 	talloc_enable_null_tracking();
 
@@ -1129,23 +1049,13 @@
 	ret &= test_loop();
 	ret &= test_free_parent_deny_child(); 
 	ret &= test_talloc_ptrtype();
-	ret &= test_talloc_free_in_destructor();
-	ret &= test_pool();
 
 	if (ret) {
 		ret &= test_speed();
 	}
 	ret &= test_autofree();
 
-	return ret;
-}
-
-#if _SAMBA_BUILD_ < 4
-int main(void)
-{
-	bool ret = torture_local_talloc(NULL);
 	if (!ret)
 		return -1;
 	return 0;
 }
-#endif

Deleted: branches/samba/upstream/source/lib/talloc_stack.c
===================================================================
--- branches/samba/upstream/source/lib/talloc_stack.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/talloc_stack.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,130 +0,0 @@
-/*
-   Unix SMB/CIFS implementation.
-   Implement a stack of talloc contexts
-   Copyright (C) Volker Lendecke 2007
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-/*
- * Implement a stack of talloc frames.
- *
- * When a new talloc stackframe is allocated with talloc_stackframe(), then
- * the TALLOC_CTX returned with talloc_tos() is reset to that new
- * frame. Whenever that stack frame is TALLOC_FREE()'ed, then the reverse
- * happens: The previous talloc_tos() is restored.
- *
- * This API is designed to be robust in the sense that if someone forgets to
- * TALLOC_FREE() a stackframe, then the next outer one correctly cleans up and
- * resets the talloc_tos().
- *
- * This robustness feature means that we can't rely on a linked list with
- * talloc destructors because in a hierarchy of talloc destructors the parent
- * destructor is called before its children destructors. The child destructor
- * called after the parent would set the talloc_tos() to the wrong value.
- */
-
-#include "includes.h"
-
-static int talloc_stacksize;
-static int talloc_stack_arraysize;
-static TALLOC_CTX **talloc_stack;
-
-static int talloc_pop(TALLOC_CTX *frame)
-{
-	int i;
-
-	for (i=talloc_stacksize-1; i>0; i--) {
-		if (frame == talloc_stack[i]) {
-			break;
-		}
-		talloc_free(talloc_stack[i]);
-	}
-
-	talloc_stacksize = i;
-	return 0;
-}
-
-/*
- * Create a new talloc stack frame.
- *
- * When free'd, it frees all stack frames that were created after this one and
- * not explicitly freed.
- */
-
-static TALLOC_CTX *talloc_stackframe_internal(size_t poolsize)
-{
-	TALLOC_CTX **tmp, *top, *parent;
-
-	if (talloc_stack_arraysize < talloc_stacksize + 1) {
-		tmp = TALLOC_REALLOC_ARRAY(NULL, talloc_stack, TALLOC_CTX *,
-					   talloc_stacksize + 1);
-		if (tmp == NULL) {
-			goto fail;
-		}
-		talloc_stack = tmp;
-		talloc_stack_arraysize = talloc_stacksize + 1;
-        }
-
-	if (talloc_stacksize == 0) {
-		parent = talloc_stack;
-	}
-	else {
-		parent = talloc_stack[talloc_stacksize-1];
-	}
-
-	if (poolsize) {
-		top = talloc_pool(parent, poolsize);
-	} else {
-		top = talloc_new(parent);
-	}
-
-	if (top == NULL) {
-		goto fail;
-	}
-
-	talloc_set_destructor(top, talloc_pop);
-
-	talloc_stack[talloc_stacksize++] = top;
-	return top;
-
- fail:
-	smb_panic("talloc_stackframe failed");
-	return NULL;
-}
-
-TALLOC_CTX *talloc_stackframe(void)
-{
-	return talloc_stackframe_internal(0);
-}
-
-TALLOC_CTX *talloc_stackframe_pool(size_t poolsize)
-{
-	return talloc_stackframe_internal(poolsize);
-}
-
-/*
- * Get us the current top of the talloc stack.
- */
-
-TALLOC_CTX *talloc_tos(void)
-{
-	if (talloc_stacksize == 0) {
-		talloc_stackframe();
-		DEBUG(0, ("no talloc stackframe around, leaking memory\n"));
-	}
-
-	return talloc_stack[talloc_stacksize-1];
-}

Modified: branches/samba/upstream/source/lib/tallocmsg.c
===================================================================
--- branches/samba/upstream/source/lib/tallocmsg.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/tallocmsg.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -64,11 +65,9 @@
  * Respond to a POOL_USAGE message by sending back string form of memory
  * usage stats.
  **/
-static void msg_pool_usage(struct messaging_context *msg_ctx,
-			   void *private_data, 
-			   uint32_t msg_type, 
-			   struct server_id src,
-			   DATA_BLOB *data)
+void msg_pool_usage(int msg_type, struct process_id src_pid,
+		    void *UNUSED(buf), size_t UNUSED(len),
+		    void *private_data)
 {
 	struct msg_pool_usage_state state;
 
@@ -91,8 +90,8 @@
 		return;
 	}
 	
-	messaging_send_buf(msg_ctx, src, MSG_POOL_USAGE,
-			   (uint8 *)state.s, strlen(state.s)+1);
+	message_send_pid(src_pid, MSG_POOL_USAGE,
+			 state.s, strlen(state.s)+1, True);
 
 	talloc_destroy(state.mem_ctx);
 }
@@ -100,8 +99,8 @@
 /**
  * Register handler for MSG_REQ_POOL_USAGE
  **/
-void register_msg_pool_usage(struct messaging_context *msg_ctx)
+void register_msg_pool_usage(void)
 {
-	messaging_register(msg_ctx, NULL, MSG_REQ_POOL_USAGE, msg_pool_usage);
+	message_register(MSG_REQ_POOL_USAGE, msg_pool_usage, NULL);
 	DEBUG(2, ("Registered MSG_REQ_POOL_USAGE\n"));
 }	

Modified: branches/samba/upstream/source/lib/time.c
===================================================================
--- branches/samba/upstream/source/lib/time.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/time.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -117,7 +118,7 @@
  Check if it's a null unix time.
 ****************************************************************************/
 
-bool null_time(time_t t)
+BOOL null_time(time_t t)
 {
 	return t == 0 || 
 		t == (time_t)0xFFFFFFFF || 
@@ -128,7 +129,7 @@
  Check if it's a null NTTIME.
 ****************************************************************************/
 
-bool null_nttime(NTTIME t)
+BOOL null_nttime(NTTIME t)
 {
 	return t == 0 || t == (NTTIME)-1;
 }
@@ -137,7 +138,7 @@
  Check if it's a null timespec.
 ****************************************************************************/
 
-bool null_timespec(struct timespec ts)
+BOOL null_timespec(struct timespec ts)
 {
 	return ts.tv_sec == 0 || 
 		ts.tv_sec == (time_t)0xFFFFFFFF || 
@@ -303,13 +304,13 @@
 
 char *http_timestring(time_t t)
 {
-	fstring buf;
+	static fstring buf;
 	struct tm *tm = localtime(&t);
 
 	if (t == TIME_T_MAX) {
-		fstrcpy(buf, "never");
+		slprintf(buf,sizeof(buf)-1,"never");
 	} else if (!tm) {
-		fstr_sprintf(buf, "%ld seconds since the Epoch", (long)t);
+		slprintf(buf,sizeof(buf)-1,"%ld seconds since the Epoch",(long)t);
 	} else {
 #ifndef HAVE_STRFTIME
 		const char *asct = asctime(tm);
@@ -321,7 +322,7 @@
 		strftime(buf, sizeof(buf)-1, "%a, %d %b %Y %H:%M:%S %Z", tm);
 #endif /* !HAVE_STRFTIME */
 	}
-	return talloc_strdup(talloc_tos(), buf);
+	return buf;
 }
 
 
@@ -401,7 +402,7 @@
 /**
   return True if a timeval is zero
 */
-bool timeval_is_zero(const struct timeval *tv)
+BOOL timeval_is_zero(const struct timeval *tv)
 {
 	return tv->tv_sec == 0 && tv->tv_usec == 0;
 }
@@ -479,7 +480,7 @@
 /**
   return True if a timer is in the past
 */
-bool timeval_expired(const struct timeval *tv)
+BOOL timeval_expired(const struct timeval *tv)
 {
 	struct timeval tv2 = timeval_current();
 	if (tv2.tv_sec > tv->tv_sec) return True;
@@ -634,7 +635,7 @@
  Check if NTTIME is 0.
 ****************************************************************************/
 
-bool nt_time_is_zero(const NTTIME *nt)
+BOOL nt_time_is_zero(const NTTIME *nt)
 {
 	return (*nt == 0);
 }
@@ -687,9 +688,9 @@
  Return the date and time as a string
 ****************************************************************************/
 
-char *current_timestring(TALLOC_CTX *ctx, bool hires)
+char *current_timestring(BOOL hires)
 {
-	fstring TimeBuf;
+	static fstring TimeBuf;
 	struct timeval tp;
 	time_t t;
 	struct tm *tm;
@@ -739,7 +740,7 @@
 		}
 #endif
 	}
-	return talloc_strdup(ctx, TimeBuf);
+	return(TimeBuf);
 }
 
 
@@ -826,7 +827,7 @@
  structure.
 ****************************************************************************/
 
-time_t get_create_time(const SMB_STRUCT_STAT *st,bool fake_dirs)
+time_t get_create_time(const SMB_STRUCT_STAT *st,BOOL fake_dirs)
 {
 	time_t ret, ret1;
 
@@ -848,7 +849,7 @@
 	return ret;
 }
 
-struct timespec get_create_timespec(const SMB_STRUCT_STAT *st,bool fake_dirs)
+struct timespec get_create_timespec(const SMB_STRUCT_STAT *st,BOOL fake_dirs)
 {
 	struct timespec ts;
 	ts.tv_sec = get_create_time(st, fake_dirs);
@@ -1181,17 +1182,17 @@
 	put_dos_date3(buf, offset, unixdate, cli->serverzone);
 }
 
-time_t cli_make_unix_date(struct cli_state *cli, const void *date_ptr)
+time_t cli_make_unix_date(struct cli_state *cli, void *date_ptr)
 {
 	return make_unix_date(date_ptr, cli->serverzone);
 }
 
-time_t cli_make_unix_date2(struct cli_state *cli, const void *date_ptr)
+time_t cli_make_unix_date2(struct cli_state *cli, void *date_ptr)
 {
 	return make_unix_date2(date_ptr, cli->serverzone);
 }
 
-time_t cli_make_unix_date3(struct cli_state *cli, const void *date_ptr)
+time_t cli_make_unix_date3(struct cli_state *cli, void *date_ptr)
 {
 	return make_unix_date3(date_ptr, cli->serverzone);
 }
@@ -1239,7 +1240,7 @@
  Check if two NTTIMEs are the same.
 ****************************************************************************/
 
-bool nt_time_equals(const NTTIME *nt1, const NTTIME *nt2)
+BOOL nt_time_equals(const NTTIME *nt1, const NTTIME *nt2)
 {
 	return (*nt1 == *nt2);
 }
@@ -1382,7 +1383,7 @@
 	d = (double)(t);
 	d *= 1.0e7;
 
-	*nt = (NTTIME)d;
+	*nt = d;
 
 	/* convert to a negative value */
 	*nt=~*nt;
@@ -1393,7 +1394,7 @@
  Check if it's a null mtime.
 ****************************************************************************/
 
-bool null_mtime(time_t mtime)
+BOOL null_mtime(time_t mtime)
 {
 	if (mtime == 0 || mtime == (time_t)0xFFFFFFFF || mtime == (time_t)-1)
 		return(True);
@@ -1423,6 +1424,8 @@
 
 const char *display_time(NTTIME nttime)
 {
+	static fstring string;
+
 	float high;
 	float low;
 	int sec;
@@ -1443,18 +1446,18 @@
 	low = ~(nttime & 0xFFFFFFFF);
 	low = low/(1000*1000*10);
 
-	sec=(int)(high+low);
+	sec=high+low;
 
 	days=sec/(60*60*24);
 	hours=(sec - (days*60*60*24)) / (60*60);
 	mins=(sec - (days*60*60*24) - (hours*60*60) ) / 60;
 	secs=sec - (days*60*60*24) - (hours*60*60) - (mins*60);
 
-	return talloc_asprintf(talloc_tos(), "%u days, %u hours, %u minutes, "
-			       "%u seconds", days, hours, mins, secs);
+	fstr_sprintf(string, "%u days, %u hours, %u minutes, %u seconds", days, hours, mins, secs);
+	return (string);
 }
 
-bool nt_time_is_set(const NTTIME *nt)
+BOOL nt_time_is_set(const NTTIME *nt)
 {
 	if (*nt == 0x7FFFFFFFFFFFFFFFLL) {
 		return False;

Modified: branches/samba/upstream/source/lib/ufc.c
===================================================================
--- branches/samba/upstream/source/lib/ufc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/ufc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -26,17 +26,18 @@
  * Copyright (C) 1991-1998, Free Software Foundation, Inc.
  *
  * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
+ * modify it under the terms of the GNU Library General Public
  * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
+ * version 2 of the License, or (at your option) any later version.
  *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Library General Public License for more details.
  *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  * @(#)crypt_util.c	2.31 02/08/92
  *

Modified: branches/samba/upstream/source/lib/username.c
===================================================================
--- branches/samba/upstream/source/lib/username.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/username.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -32,24 +33,19 @@
  Get a users home directory.
 ****************************************************************************/
 
-char *get_user_home_dir(TALLOC_CTX *mem_ctx, const char *user)
+char *get_user_home_dir(const char *user)
 {
-	struct passwd *pass;
-	char *result;
+	static struct passwd *pass;
 
 	/* Ensure the user exists. */
 
-	pass = Get_Pwnam_alloc(mem_ctx, user);
+	pass = Get_Pwnam(user);
 
 	if (!pass)
 		return(NULL);
-
 	/* Return home directory from struct passwd. */
 
-	result = talloc_move(mem_ctx, &pass->pw_dir);
-
-	TALLOC_FREE(pass);
-	return result;
+	return(pass->pw_dir);      
 }
 
 /****************************************************************************
@@ -60,6 +56,8 @@
  *   - using lp_usernamelevel() for permutations.
 ****************************************************************************/
 
+static struct passwd *Get_Pwnam_ret = NULL;
+
 static struct passwd *Get_Pwnam_internals(TALLOC_CTX *mem_ctx,
 					  const char *user, char *user2)
 {
@@ -137,6 +135,40 @@
 	return ret;  
 }
 
+/****************************************************************************
+ Get_Pwnam wrapper without modification.
+  NOTE: This with NOT modify 'user'! 
+****************************************************************************/
+
+struct passwd *Get_Pwnam(const char *user)
+{
+	struct passwd *ret;
+
+	ret = Get_Pwnam_alloc(NULL, user);
+	
+	/* This call used to just return the 'passwd' static buffer.
+	   This could then have accidental reuse implications, so 
+	   we now malloc a copy, and free it in the next use.
+
+	   This should cause the (ab)user to segfault if it 
+	   uses an old struct. 
+	   
+	   This is better than useing the wrong data in security
+	   critical operations.
+
+	   The real fix is to make the callers free the returned 
+	   malloc'ed data.
+	*/
+
+	if (Get_Pwnam_ret) {
+		TALLOC_FREE(Get_Pwnam_ret);
+	}
+	
+	Get_Pwnam_ret = ret;
+
+	return ret;  
+}
+
 /* The functions below have been taken from password.c and slightly modified */
 /****************************************************************************
  Apply a function to upper/lower case combinations

Modified: branches/samba/upstream/source/lib/util.c
===================================================================
--- branches/samba/upstream/source/lib/util.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/util.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -2,14 +2,14 @@
    Unix SMB/CIFS implementation.
    Samba utility functions
    Copyright (C) Andrew Tridgell 1992-1998
-   Copyright (C) Jeremy Allison 2001-2007
+   Copyright (C) Jeremy Allison 2001-2002
    Copyright (C) Simo Sorce 2001
    Copyright (C) Jim McDonough <jmcd at us.ibm.com> 2003
    Copyright (C) James Peach 2006
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -18,13 +18,16 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
+extern fstring local_machine;
 extern char *global_clobber_region_function;
 extern unsigned int global_clobber_region_line;
+extern fstring remote_arch;
 
 /* Max allowable allococation - 256mb - 0x10000000 */
 #define MAX_ALLOC_SIZE (1024*1024*256)
@@ -57,12 +60,16 @@
 
 enum protocol_types Protocol = PROTOCOL_COREPLUS;
 
+/* a default finfo structure to ensure all fields are sensible */
+file_info def_finfo;
+
 /* this is used by the chaining code */
 int chain_size = 0;
 
 int trans_num = 0;
 
 static enum remote_arch_types ra_type = RA_UNKNOWN;
+pstring user_socket_options=DEFAULT_SOCKET_OPTIONS;   
 
 /***********************************************************************
  Definitions for all names.
@@ -78,7 +85,7 @@
  Allocate and set myname. Ensure upper case.
 ***********************************************************************/
 
-bool set_global_myname(const char *myname)
+BOOL set_global_myname(const char *myname)
 {
 	SAFE_FREE(smb_myname);
 	smb_myname = SMB_STRDUP(myname);
@@ -97,7 +104,7 @@
  Allocate and set myworkgroup. Ensure upper case.
 ***********************************************************************/
 
-bool set_global_myworkgroup(const char *myworkgroup)
+BOOL set_global_myworkgroup(const char *myworkgroup)
 {
 	SAFE_FREE(smb_myworkgroup);
 	smb_myworkgroup = SMB_STRDUP(myworkgroup);
@@ -116,7 +123,7 @@
  Allocate and set scope. Ensure upper case.
 ***********************************************************************/
 
-bool set_global_scope(const char *scope)
+BOOL set_global_scope(const char *scope)
 {
 	SAFE_FREE(smb_scope);
 	smb_scope = SMB_STRDUP(scope);
@@ -148,7 +155,7 @@
 	smb_num_netbios_names = 0;
 }
 
-static bool allocate_my_netbios_names_array(size_t number)
+static BOOL allocate_my_netbios_names_array(size_t number)
 {
 	free_netbios_names_array();
 
@@ -162,7 +169,7 @@
 	return True;
 }
 
-static bool set_my_netbios_names(const char *name, int i)
+static BOOL set_my_netbios_names(const char *name, int i)
 {
 	SAFE_FREE(smb_my_netbios_names[i]);
 
@@ -183,16 +190,16 @@
 	SAFE_FREE( smb_myworkgroup );
 	SAFE_FREE( smb_scope );
 	free_netbios_names_array();
-	free_local_machine_name();
 }
 
 void gfree_all( void )
 {
-	gfree_names();
+	gfree_names();	
 	gfree_loadparm();
 	gfree_case_tables();
 	gfree_debugsyms();
 	gfree_charcnv();
+	gfree_messages();
 	gfree_interfaces();
 
 	/* release the talloc null_context memory last */
@@ -204,7 +211,7 @@
 	return smb_my_netbios_names[i];
 }
 
-bool set_netbios_aliases(const char **str_array)
+BOOL set_netbios_aliases(const char **str_array)
 {
 	size_t namecount;
 
@@ -230,7 +237,7 @@
 		size_t i;
 		for ( i = 0; str_array[i] != NULL; i++) {
 			size_t n;
-			bool duplicate = False;
+			BOOL duplicate = False;
 
 			/* Look for duplicates */
 			for( n=0; n<namecount; n++ ) {
@@ -253,8 +260,9 @@
   Common name initialization code.
 ****************************************************************************/
 
-bool init_names(void)
+BOOL init_names(void)
 {
+	char *p;
 	int n;
 
 	if (global_myname() == NULL || *global_myname() == '\0') {
@@ -267,179 +275,23 @@
 	if (!set_netbios_aliases(lp_netbios_aliases())) {
 		DEBUG( 0, ( "init_structs: malloc fail.\n" ) );
 		return False;
-	}
+	}			
 
-	set_local_machine_name(global_myname(),false);
+	fstrcpy( local_machine, global_myname() );
+	trim_char( local_machine, ' ', ' ' );
+	p = strchr( local_machine, ' ' );
+	if (p)
+		*p = 0;
+	strlower_m( local_machine );
 
 	DEBUG( 5, ("Netbios name list:-\n") );
-	for( n=0; my_netbios_names(n); n++ ) {
-		DEBUGADD( 5, ("my_netbios_names[%d]=\"%s\"\n",
-					n, my_netbios_names(n) ) );
-	}
+	for( n=0; my_netbios_names(n); n++ )
+		DEBUGADD( 5, ( "my_netbios_names[%d]=\"%s\"\n", n, my_netbios_names(n) ) );
 
 	return( True );
 }
 
 /**************************************************************************n
-  Code to cope with username/password auth options from the commandline.
-  Used mainly in client tools.
-****************************************************************************/
-
-static struct user_auth_info cmdline_auth_info = {
-	NULL,	/* username */
-	NULL,	/* password */
-	false,	/* got_pass */
-	false,	/* use_kerberos */
-	Undefined, /* signing state */
-	false,	/* smb_encrypt */
-	false   /* use machine account */
-};
-
-const char *get_cmdline_auth_info_username(void)
-{
-	if (!cmdline_auth_info.username) {
-		return "";
-	}
-	return cmdline_auth_info.username;
-}
-
-void set_cmdline_auth_info_username(const char *username)
-{
-	SAFE_FREE(cmdline_auth_info.username);
-	cmdline_auth_info.username = SMB_STRDUP(username);
-	if (!cmdline_auth_info.username) {
-		exit(ENOMEM);
-	}
-}
-
-const char *get_cmdline_auth_info_password(void)
-{
-	if (!cmdline_auth_info.password) {
-		return "";
-	}
-	return cmdline_auth_info.password;
-}
-
-void set_cmdline_auth_info_password(const char *password)
-{
-	SAFE_FREE(cmdline_auth_info.password);
-	cmdline_auth_info.password = SMB_STRDUP(password);
-	if (!cmdline_auth_info.password) {
-		exit(ENOMEM);
-	}
-	cmdline_auth_info.got_pass = true;
-}
-
-bool set_cmdline_auth_info_signing_state(const char *arg)
-{
-	cmdline_auth_info.signing_state = -1;
-	if (strequal(arg, "off") || strequal(arg, "no") ||
-			strequal(arg, "false")) {
-		cmdline_auth_info.signing_state = false;
-	} else if (strequal(arg, "on") || strequal(arg, "yes") ||
-			strequal(arg, "true") || strequal(arg, "auto")) {
-		cmdline_auth_info.signing_state = true;
-	} else if (strequal(arg, "force") || strequal(arg, "required") ||
-			strequal(arg, "forced")) {
-		cmdline_auth_info.signing_state = Required;
-	} else {
-		return false;
-	}
-	return true;
-}
-
-int get_cmdline_auth_info_signing_state(void)
-{
-	return cmdline_auth_info.signing_state;
-}
-
-bool get_cmdline_auth_info_use_kerberos(void)
-{
-	return cmdline_auth_info.use_kerberos;
-}
-
-/* This should only be used by lib/popt_common.c JRA */
-void set_cmdline_auth_info_use_krb5_ticket(void)
-{
-	cmdline_auth_info.use_kerberos = true;
-	cmdline_auth_info.got_pass = true;
-}
-
-/* This should only be used by lib/popt_common.c JRA */
-void set_cmdline_auth_info_smb_encrypt(void)
-{
-	cmdline_auth_info.smb_encrypt = true;
-}
-
-void set_cmdline_auth_info_use_machine_account(void)
-{
-	cmdline_auth_info.use_machine_account = true;
-}
-
-bool get_cmdline_auth_info_got_pass(void)
-{
-	return cmdline_auth_info.got_pass;
-}
-
-bool get_cmdline_auth_info_smb_encrypt(void)
-{
-	return cmdline_auth_info.smb_encrypt;
-}
-
-bool get_cmdline_auth_info_use_machine_account(void)
-{
-	return cmdline_auth_info.use_machine_account;
-}
-
-bool get_cmdline_auth_info_copy(struct user_auth_info *info)
-{
-	*info = cmdline_auth_info;
-	/* Now re-alloc the strings. */
-	info->username = SMB_STRDUP(get_cmdline_auth_info_username());
-	info->password = SMB_STRDUP(get_cmdline_auth_info_password());
-	if (!info->username || !info->password) {
-		return false;
-	}
-	return true;
-}
-
-bool set_cmdline_auth_info_machine_account_creds(void)
-{
-	char *pass = NULL;
-	char *account = NULL;
-
-	if (!get_cmdline_auth_info_use_machine_account()) {
-		return false;
-	}
-
-	if (!secrets_init()) {
-		d_printf("ERROR: Unable to open secrets database\n");
-		return false;
-	}
-
-	if (asprintf(&account, "%s$@%s", global_myname(), lp_realm()) < 0) {
-		return false;
-	}
-
-	pass = secrets_fetch_machine_password(lp_workgroup(), NULL, NULL);
-	if (!pass) {
-		d_printf("ERROR: Unable to fetch machine password for "
-			"%s in domain %s\n",
-			account, lp_workgroup());
-		SAFE_FREE(account);
-		return false;
-	}
-
-	set_cmdline_auth_info_username(account);
-	set_cmdline_auth_info_password(pass);
-
-	SAFE_FREE(account);
-	SAFE_FREE(pass);
-
-	return true;
-}
-
-/**************************************************************************n
  Find a suitable temporary directory. The result should be copied immediately
  as it may be overwritten by a subsequent call.
 ****************************************************************************/
@@ -456,7 +308,7 @@
  Add a gid to an array of gids if it's not already there.
 ****************************************************************************/
 
-bool add_gid_to_array_unique(TALLOC_CTX *mem_ctx, gid_t gid,
+BOOL add_gid_to_array_unique(TALLOC_CTX *mem_ctx, gid_t gid,
 			     gid_t **gids, size_t *num_gids)
 {
 	int i;
@@ -540,7 +392,7 @@
  Check if a file exists - call vfs_file_exist for samba files.
 ********************************************************************/
 
-bool file_exist(const char *fname,SMB_STRUCT_STAT *sbuf)
+BOOL file_exist(const char *fname,SMB_STRUCT_STAT *sbuf)
 {
 	SMB_STRUCT_STAT st;
 	if (!sbuf)
@@ -553,19 +405,6 @@
 }
 
 /*******************************************************************
- Check if a unix domain socket exists - call vfs_file_exist for samba files.
-********************************************************************/
-
-bool socket_exist(const char *fname)
-{
-	SMB_STRUCT_STAT st;
-	if (sys_stat(fname,&st) != 0) 
-		return(False);
-
-	return S_ISSOCK(st.st_mode);
-}
-
-/*******************************************************************
  Check a files mod time.
 ********************************************************************/
 
@@ -583,10 +422,10 @@
  Check if a directory exists.
 ********************************************************************/
 
-bool directory_exist(char *dname,SMB_STRUCT_STAT *st)
+BOOL directory_exist(char *dname,SMB_STRUCT_STAT *st)
 {
 	SMB_STRUCT_STAT st2;
-	bool ret;
+	BOOL ret;
 
 	if (!st)
 		st = &st2;
@@ -619,7 +458,7 @@
 
 char *attrib_string(uint16 mode)
 {
-	fstring attrstr;
+	static fstring attrstr;
 
 	attrstr[0] = 0;
 
@@ -630,7 +469,7 @@
 	if (mode & aSYSTEM) fstrcat(attrstr,"S");
 	if (mode & aRONLY) fstrcat(attrstr,"R");	  
 
-	return talloc_strdup(talloc_tos(), attrstr);
+	return(attrstr);
 }
 
 /*******************************************************************
@@ -674,34 +513,36 @@
 	if (DEBUGLEVEL < 50)
 		bcc = MIN(bcc, 512);
 
-	dump_data(10, (uint8 *)smb_buf(buf), bcc);	
+	dump_data(10, smb_buf(buf), bcc);	
 }
 
 /*******************************************************************
- Set the length and marker of an encrypted smb packet.
+ Set the length and marker of an smb packet.
 ********************************************************************/
 
-void smb_set_enclen(char *buf,int len,uint16 enc_ctx_num)
+void smb_setlen(char *buf,int len)
 {
 	_smb_setlen(buf,len);
 
 	SCVAL(buf,4,0xFF);
-	SCVAL(buf,5,'E');
-	SSVAL(buf,6,enc_ctx_num);
+	SCVAL(buf,5,'S');
+	SCVAL(buf,6,'M');
+	SCVAL(buf,7,'B');
 }
 
 /*******************************************************************
- Set the length and marker of an smb packet.
+ Setup the word count and byte count for a smb message.
 ********************************************************************/
 
-void smb_setlen(char *buf,int len)
+int set_message(char *buf,int num_words,int num_bytes,BOOL zero)
 {
-	_smb_setlen(buf,len);
-
-	SCVAL(buf,4,0xFF);
-	SCVAL(buf,5,'S');
-	SCVAL(buf,6,'M');
-	SCVAL(buf,7,'B');
+	if (zero && (num_words || num_bytes)) {
+		memset(buf + smb_size,'\0',num_words*2 + num_bytes);
+	}
+	SCVAL(buf,smb_wct,num_words);
+	SSVAL(buf,smb_vwv + num_words*SIZEOFWORD,num_bytes);  
+	smb_setlen(buf,smb_size + num_words*2 + num_bytes - 4);
+	return (smb_size + num_words*2 + num_bytes);
 }
 
 /*******************************************************************
@@ -711,157 +552,113 @@
 int set_message_bcc(char *buf,int num_bytes)
 {
 	int num_words = CVAL(buf,smb_wct);
-	SSVAL(buf,smb_vwv + num_words*SIZEOFWORD,num_bytes);
-	_smb_setlen(buf,smb_size + num_words*2 + num_bytes - 4);
+	SSVAL(buf,smb_vwv + num_words*SIZEOFWORD,num_bytes);  
+	smb_setlen(buf,smb_size + num_words*2 + num_bytes - 4);
 	return (smb_size + num_words*2 + num_bytes);
 }
 
 /*******************************************************************
- Add a data blob to the end of a smb_buf, adjusting bcc and smb_len.
- Return the bytes added
+ Setup only the byte count for a smb message, using the end of the
+ message as a marker.
 ********************************************************************/
 
-ssize_t message_push_blob(uint8 **outbuf, DATA_BLOB blob)
+int set_message_end(void *outbuf,void *end_ptr)
 {
-	size_t newlen = smb_len(*outbuf) + 4 + blob.length;
-	uint8 *tmp;
-
-	if (!(tmp = TALLOC_REALLOC_ARRAY(NULL, *outbuf, uint8, newlen))) {
-		DEBUG(0, ("talloc failed\n"));
-		return -1;
-	}
-	*outbuf = tmp;
-
-	memcpy(tmp + smb_len(tmp) + 4, blob.data, blob.length);
-	set_message_bcc((char *)tmp, smb_buflen(tmp) + blob.length);
-	return blob.length;
+	return set_message_bcc((char *)outbuf,PTR_DIFF(end_ptr,smb_buf((char *)outbuf)));
 }
 
 /*******************************************************************
  Reduce a file name, removing .. elements.
 ********************************************************************/
 
-static char *dos_clean_name(TALLOC_CTX *ctx, const char *s)
+void dos_clean_name(char *s)
 {
-	char *p = NULL;
-	char *str = NULL;
+	char *p=NULL;
 
 	DEBUG(3,("dos_clean_name [%s]\n",s));
 
 	/* remove any double slashes */
-	str = talloc_all_string_sub(ctx, s, "\\\\", "\\");
-	if (!str) {
-		return NULL;
-	}
+	all_string_sub(s, "\\\\", "\\", 0);
 
 	/* Remove leading .\\ characters */
-	if(strncmp(str, ".\\", 2) == 0) {
-		trim_string(str, ".\\", NULL);
-		if(*str == 0) {
-			str = talloc_strdup(ctx, ".\\");
-			if (!str) {
-				return NULL;
-			}
-		}
+	if(strncmp(s, ".\\", 2) == 0) {
+		trim_string(s, ".\\", NULL);
+		if(*s == 0)
+			pstrcpy(s,".\\");
 	}
 
-	while ((p = strstr_m(str,"\\..\\")) != NULL) {
-		char *s1;
+	while ((p = strstr_m(s,"\\..\\")) != NULL) {
+		pstring s1;
 
 		*p = 0;
-		s1 = p+3;
+		pstrcpy(s1,p+3);
 
-		if ((p=strrchr_m(str,'\\')) != NULL) {
+		if ((p=strrchr_m(s,'\\')) != NULL)
 			*p = 0;
-		} else {
-			*str = 0;
-		}
-		str = talloc_asprintf(ctx,
-				"%s%s",
-				str,
-				s1);
-		if (!str) {
-			return NULL;
-		}
-	}
+		else
+			*s = 0;
+		pstrcat(s,s1);
+	}  
 
-	trim_string(str,NULL,"\\..");
-	return talloc_all_string_sub(ctx, str, "\\.\\", "\\");
+	trim_string(s,NULL,"\\..");
+	all_string_sub(s, "\\.\\", "\\", 0);
 }
 
 /*******************************************************************
- Reduce a file name, removing .. elements.
+ Reduce a file name, removing .. elements. 
 ********************************************************************/
 
-char *unix_clean_name(TALLOC_CTX *ctx, const char *s)
+void unix_clean_name(char *s)
 {
-	char *p = NULL;
-	char *str = NULL;
+	char *p=NULL;
 
 	DEBUG(3,("unix_clean_name [%s]\n",s));
 
 	/* remove any double slashes */
-	str = talloc_all_string_sub(ctx, s, "//","/");
-	if (!str) {
-		return NULL;
-	}
+	all_string_sub(s, "//","/", 0);
 
 	/* Remove leading ./ characters */
-	if(strncmp(str, "./", 2) == 0) {
-		trim_string(str, "./", NULL);
-		if(*str == 0) {
-			str = talloc_strdup(ctx, "./");
-			if (!str) {
-				return NULL;
-			}
-		}
+	if(strncmp(s, "./", 2) == 0) {
+		trim_string(s, "./", NULL);
+		if(*s == 0)
+			pstrcpy(s,"./");
 	}
 
-	while ((p = strstr_m(str,"/../")) != NULL) {
-		char *s1;
+	while ((p = strstr_m(s,"/../")) != NULL) {
+		pstring s1;
 
 		*p = 0;
-		s1 = p+3;
+		pstrcpy(s1,p+3);
 
-		if ((p=strrchr_m(str,'/')) != NULL) {
+		if ((p=strrchr_m(s,'/')) != NULL)
 			*p = 0;
-		} else {
-			*str = 0;
-		}
-		str = talloc_asprintf(ctx,
-				"%s%s",
-				str,
-				s1);
-		if (!str) {
-			return NULL;
-		}
-	}
+		else
+			*s = 0;
+		pstrcat(s,s1);
+	}  
 
-	trim_string(str,NULL,"/..");
-	return talloc_all_string_sub(ctx, str, "/./", "/");
+	trim_string(s,NULL,"/..");
+	all_string_sub(s, "/./", "/", 0);
 }
 
-char *clean_name(TALLOC_CTX *ctx, const char *s)
+void clean_name(char *s)
 {
-	char *str = dos_clean_name(ctx, s);
-	if (!str) {
-		return NULL;
-	}
-	return unix_clean_name(ctx, str);
+	dos_clean_name(s);
+	unix_clean_name(s);
 }
 
 /*******************************************************************
  Close the low 3 fd's and open dev/null in their place.
 ********************************************************************/
 
-void close_low_fds(bool stderr_too)
+void close_low_fds(BOOL stderr_too)
 {
 #ifndef VALGRIND
 	int fd;
 	int i;
 
 	close(0);
-	close(1);
+	close(1); 
 
 	if (stderr_too)
 		close(2);
@@ -934,7 +731,7 @@
   if BSD use FNDELAY
 ****************************************************************************/
 
-int set_blocking(int fd, bool set)
+int set_blocking(int fd, BOOL set)
 {
 	int val;
 #ifdef O_NONBLOCK
@@ -957,6 +754,67 @@
 #undef FLAG_TO_SET
 }
 
+/****************************************************************************
+ Transfer some data between two fd's.
+****************************************************************************/
+
+#ifndef TRANSFER_BUF_SIZE
+#define TRANSFER_BUF_SIZE 65536
+#endif
+
+ssize_t transfer_file_internal(int infd, int outfd, size_t n, ssize_t (*read_fn)(int, void *, size_t),
+						ssize_t (*write_fn)(int, const void *, size_t))
+{
+	char *buf;
+	size_t total = 0;
+	ssize_t read_ret;
+	ssize_t write_ret;
+	size_t num_to_read_thistime;
+	size_t num_written = 0;
+
+	if ((buf = SMB_MALLOC_ARRAY(char, TRANSFER_BUF_SIZE)) == NULL)
+		return -1;
+
+	while (total < n) {
+		num_to_read_thistime = MIN((n - total), TRANSFER_BUF_SIZE);
+
+		read_ret = (*read_fn)(infd, buf, num_to_read_thistime);
+		if (read_ret == -1) {
+			DEBUG(0,("transfer_file_internal: read failure. Error = %s\n", strerror(errno) ));
+			SAFE_FREE(buf);
+			return -1;
+		}
+		if (read_ret == 0)
+			break;
+
+		num_written = 0;
+ 
+		while (num_written < read_ret) {
+			write_ret = (*write_fn)(outfd,buf + num_written, read_ret - num_written);
+ 
+			if (write_ret == -1) {
+				DEBUG(0,("transfer_file_internal: write failure. Error = %s\n", strerror(errno) ));
+				SAFE_FREE(buf);
+				return -1;
+			}
+			if (write_ret == 0)
+				return (ssize_t)total;
+ 
+			num_written += (size_t)write_ret;
+		}
+
+		total += (size_t)read_ret;
+	}
+
+	SAFE_FREE(buf);
+	return (ssize_t)total;		
+}
+
+SMB_OFF_T transfer_file(int infd,int outfd,SMB_OFF_T n)
+{
+	return (SMB_OFF_T)transfer_file_internal(infd, outfd, (size_t)n, sys_read, sys_write);
+}
+
 /*******************************************************************
  Sleep for a specified number of milliseconds.
 ********************************************************************/
@@ -1011,7 +869,7 @@
  Become a daemon, discarding the controlling terminal.
 ****************************************************************************/
 
-void become_daemon(bool Fork, bool no_process_group)
+void become_daemon(BOOL Fork, BOOL no_process_group)
 {
 	if (Fork) {
 		if (sys_fork()) {
@@ -1037,44 +895,13 @@
 				  attach it to the logfile */
 }
 
-bool reinit_after_fork(struct messaging_context *msg_ctx,
-		       bool parent_longlived)
-{
-	NTSTATUS status;
-
-	/* Reset the state of the random
-	 * number generation system, so
-	 * children do not get the same random
-	 * numbers as each other */
-	set_need_random_reseed();
-
-	/* tdb needs special fork handling */
-	if (tdb_reopen_all(parent_longlived ? 1 : 0) == -1) {
-		DEBUG(0,("tdb_reopen_all failed.\n"));
-		return false;
-	}
-
-	/*
-	 * For clustering, we need to re-init our ctdbd connection after the
-	 * fork
-	 */
-	status = messaging_reinit(msg_ctx);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0,("messaging_reinit() failed: %s\n",
-			 nt_errstr(status)));
-		return false;
-	}
-
-	return true;
-}
-
 /****************************************************************************
  Put up a yes/no prompt.
 ****************************************************************************/
 
-bool yesno(const char *p)
+BOOL yesno(char *p)
 {
-	char ans[20];
+	pstring ans;
 	printf("%s",p);
 
 	if (!fgets(ans,sizeof(ans)-1,stdin))
@@ -1213,7 +1040,7 @@
  Changes were instigated by Coverity error checking. JRA.
 ****************************************************************************/
 
-void *Realloc(void *p, size_t size, bool free_old_on_error)
+void *Realloc(void *p, size_t size, BOOL free_old_on_error)
 {
 	void *ret=NULL;
 
@@ -1253,7 +1080,7 @@
  Type-safe realloc.
 ****************************************************************************/
 
-void *realloc_array(void *p, size_t el_size, unsigned int count, bool free_old_on_error)
+void *realloc_array(void *p, size_t el_size, unsigned int count, BOOL free_old_on_error)
 {
 	if (count >= MAX_ALLOC_SIZE/el_size) {
 		if (free_old_on_error) {
@@ -1334,10 +1161,9 @@
  Get my own name and IP.
 ****************************************************************************/
 
-char *get_myname(TALLOC_CTX *ctx)
+BOOL get_myname(char *my_name)
 {
-	char *p;
-	char hostname[HOST_NAME_MAX];
+	pstring hostname;
 
 	*hostname = 0;
 
@@ -1345,41 +1171,76 @@
 	if (gethostname(hostname, sizeof(hostname)) == -1) {
 		DEBUG(0,("gethostname failed\n"));
 		return False;
-	}
+	} 
 
 	/* Ensure null termination. */
 	hostname[sizeof(hostname)-1] = '\0';
 
-	/* split off any parts after an initial . */
-	p = strchr_m(hostname,'.');
-	if (p) {
-		*p = 0;
-	}
+	if (my_name) {
+		/* split off any parts after an initial . */
+		char *p = strchr_m(hostname,'.');
 
-	return talloc_strdup(ctx, hostname);
+		if (p)
+			*p = 0;
+		
+		fstrcpy(my_name,hostname);
+	}
+	
+	return(True);
 }
 
 /****************************************************************************
- Get my own domain name, or "" if we have none.
+ Get my own canonical name, including domain.
 ****************************************************************************/
 
-char *get_mydnsdomname(TALLOC_CTX *ctx)
+BOOL get_mydnsfullname(fstring my_dnsname)
 {
-	const char *domname;
-	char *p;
+	static fstring dnshostname;
+	struct hostent *hp;
 
-	domname = get_mydnsfullname();
-	if (!domname) {
-		return NULL;
+	if (!*dnshostname) {
+		/* get my host name */
+		if (gethostname(dnshostname, sizeof(dnshostname)) == -1) {
+			*dnshostname = '\0';
+			DEBUG(0,("gethostname failed\n"));
+			return False;
+		} 
+
+		/* Ensure null termination. */
+		dnshostname[sizeof(dnshostname)-1] = '\0';
+
+		/* Ensure we get the cannonical name. */
+		if (!(hp = sys_gethostbyname(dnshostname))) {
+			*dnshostname = '\0';
+			return False;
+		}
+		fstrcpy(dnshostname, hp->h_name);
 	}
+	fstrcpy(my_dnsname, dnshostname);
+	return True;
+}
 
+/****************************************************************************
+ Get my own domain name.
+****************************************************************************/
+
+BOOL get_mydnsdomname(fstring my_domname)
+{
+	fstring domname;
+	char *p;
+
+	*my_domname = '\0';
+	if (!get_mydnsfullname(domname)) {
+		return False;
+	}	
 	p = strchr_m(domname, '.');
 	if (p) {
 		p++;
-		return talloc_strdup(ctx, p);
-	} else {
-		return talloc_strdup(ctx, "");
+		fstrcpy(my_domname, p);
+		return True;
 	}
+
+	return False;
 }
 
 /****************************************************************************
@@ -1406,88 +1267,181 @@
 	return(def);
 }
 
+/****************************************************************************
+ Return true if a string could be a pure IP address.
+****************************************************************************/
 
+BOOL is_ipaddress(const char *str)
+{
+	BOOL pure_address = True;
+	int i;
+  
+	for (i=0; pure_address && str[i]; i++)
+		if (!(isdigit((int)str[i]) || str[i] == '.'))
+			pure_address = False;
+
+	/* Check that a pure number is not misinterpreted as an IP */
+	pure_address = pure_address && (strchr_m(str, '.') != NULL);
+
+	return pure_address;
+}
+
+/****************************************************************************
+ Interpret an internet address or name into an IP address in 4 byte form.
+****************************************************************************/
+
+uint32 interpret_addr(const char *str)
+{
+	struct hostent *hp;
+	uint32 res;
+
+	if (strcmp(str,"0.0.0.0") == 0)
+		return(0);
+	if (strcmp(str,"255.255.255.255") == 0)
+		return(0xFFFFFFFF);
+
+  /* if it's in the form of an IP address then get the lib to interpret it */
+	if (is_ipaddress(str)) {
+		res = inet_addr(str);
+	} else {
+		/* otherwise assume it's a network name of some sort and use 
+			sys_gethostbyname */
+		if ((hp = sys_gethostbyname(str)) == 0) {
+			DEBUG(3,("sys_gethostbyname: Unknown host. %s\n",str));
+			return 0;
+		}
+
+		if(hp->h_addr == NULL) {
+			DEBUG(3,("sys_gethostbyname: host address is invalid for host %s\n",str));
+			return 0;
+		}
+		putip((char *)&res,(char *)hp->h_addr);
+	}
+
+	if (res == (uint32)-1)
+		return(0);
+
+	return(res);
+}
+
+/*******************************************************************
+ A convenient addition to interpret_addr().
+******************************************************************/
+
+struct in_addr *interpret_addr2(const char *str)
+{
+	static struct in_addr ret;
+	uint32 a = interpret_addr(str);
+	ret.s_addr = a;
+	return(&ret);
+}
+
+/*******************************************************************
+ Check if an IP is the 0.0.0.0.
+******************************************************************/
+
+BOOL is_zero_ip(struct in_addr ip)
+{
+	uint32 a;
+	putip((char *)&a,(char *)&ip);
+	return(a == 0);
+}
+
+/*******************************************************************
+ Set an IP to 0.0.0.0.
+******************************************************************/
+
+void zero_ip(struct in_addr *ip)
+{
+        static BOOL init;
+        static struct in_addr ipzero;
+
+        if (!init) {
+                ipzero = *interpret_addr2("0.0.0.0");
+                init = True;
+        }
+
+        *ip = ipzero;
+}
+
 #if (defined(HAVE_NETGROUP) && defined(WITH_AUTOMOUNT))
 /******************************************************************
  Remove any mount options such as -rsize=2048,wsize=2048 etc.
  Based on a fix from <Thomas.Hepper at icem.de>.
- Returns a malloc'ed string.
 *******************************************************************/
 
-static char *strip_mount_options(TALLOC_CTX *ctx, const char *str)
+static void strip_mount_options( pstring *str)
 {
-	if (*str == '-') {
-		const char *p = str;
+	if (**str == '-') { 
+		char *p = *str;
 		while(*p && !isspace(*p))
 			p++;
 		while(*p && isspace(*p))
 			p++;
 		if(*p) {
-			return talloc_strdup(ctx, p);
+			pstring tmp_str;
+
+			pstrcpy(tmp_str, p);
+			pstrcpy(*str, tmp_str);
 		}
 	}
-	return NULL;
 }
 
 /*******************************************************************
  Patch from jkf at soton.ac.uk
  Split Luke's automount_server into YP lookup and string splitter
- so can easily implement automount_path().
- Returns a malloc'ed string.
+ so can easily implement automount_path(). 
+ As we may end up doing both, cache the last YP result. 
 *******************************************************************/
 
 #ifdef WITH_NISPLUS_HOME
-char *automount_lookup(TALLOC_CTX *ctx, const char *user_name)
+char *automount_lookup(const char *user_name)
 {
-	char *value = NULL;
-
+	static fstring last_key = "";
+	static pstring last_value = "";
+ 
 	char *nis_map = (char *)lp_nis_home_map_name();
-
+ 
 	char buffer[NIS_MAXATTRVAL + 1];
 	nis_result *result;
 	nis_object *object;
 	entry_obj  *entry;
-
-	snprintf(buffer, sizeof(buffer), "[key=%s],%s", user_name, nis_map);
-	DEBUG(5, ("NIS+ querystring: %s\n", buffer));
-
-	if (result = nis_list(buffer, FOLLOW_PATH|EXPAND_NAME|HARD_LOOKUP, NULL, NULL)) {
-		if (result->status != NIS_SUCCESS) {
-			DEBUG(3, ("NIS+ query failed: %s\n", nis_sperrno(result->status)));
-		} else {
-			object = result->objects.objects_val;
-			if (object->zo_data.zo_type == ENTRY_OBJ) {
-				entry = &object->zo_data.objdata_u.en_data;
-				DEBUG(5, ("NIS+ entry type: %s\n", entry->en_type));
-				DEBUG(3, ("NIS+ result: %s\n", entry->en_cols.en_cols_val[1].ec_value.ec_value_val));
-
-				value = talloc_strdup(ctx,
-						entry->en_cols.en_cols_val[1].ec_value.ec_value_val);
-				if (!value) {
-					nis_freeresult(result);
-					return NULL;
+ 
+	if (strcmp(user_name, last_key)) {
+		slprintf(buffer, sizeof(buffer)-1, "[key=%s],%s", user_name, nis_map);
+		DEBUG(5, ("NIS+ querystring: %s\n", buffer));
+ 
+		if (result = nis_list(buffer, FOLLOW_PATH|EXPAND_NAME|HARD_LOOKUP, NULL, NULL)) {
+			if (result->status != NIS_SUCCESS) {
+				DEBUG(3, ("NIS+ query failed: %s\n", nis_sperrno(result->status)));
+				fstrcpy(last_key, ""); pstrcpy(last_value, "");
+			} else {
+				object = result->objects.objects_val;
+				if (object->zo_data.zo_type == ENTRY_OBJ) {
+					entry = &object->zo_data.objdata_u.en_data;
+					DEBUG(5, ("NIS+ entry type: %s\n", entry->en_type));
+					DEBUG(3, ("NIS+ result: %s\n", entry->en_cols.en_cols_val[1].ec_value.ec_value_val));
+ 
+					pstrcpy(last_value, entry->en_cols.en_cols_val[1].ec_value.ec_value_val);
+					pstring_sub(last_value, "&", user_name);
+					fstrcpy(last_key, user_name);
 				}
-				value = talloc_string_sub(ctx,
-						value,
-						"&",
-						user_name);
 			}
 		}
+		nis_freeresult(result);
 	}
-	nis_freeresult(result);
 
-	if (value) {
-		value = strip_mount_options(ctx, value);
-		DEBUG(4, ("NIS+ Lookup: %s resulted in %s\n",
-					user_name, value));
-	}
-	return value;
+	strip_mount_options(&last_value);
+
+	DEBUG(4, ("NIS+ Lookup: %s resulted in %s\n", user_name, last_value));
+	return last_value;
 }
 #else /* WITH_NISPLUS_HOME */
 
-char *automount_lookup(TALLOC_CTX *ctx, const char *user_name)
+char *automount_lookup(const char *user_name)
 {
-	char *value = NULL;
+	static fstring last_key = "";
+	static pstring last_value = "";
 
 	int nis_error;        /* returned by yp all functions */
 	char *nis_result;     /* yp_match inits this */
@@ -1497,64 +1451,82 @@
 
 	if ((nis_error = yp_get_default_domain(&nis_domain)) != 0) {
 		DEBUG(3, ("YP Error: %s\n", yperr_string(nis_error)));
-		return NULL;
+		return last_value;
 	}
 
 	DEBUG(5, ("NIS Domain: %s\n", nis_domain));
 
-	if ((nis_error = yp_match(nis_domain, nis_map, user_name,
-					strlen(user_name), &nis_result,
-					&nis_result_len)) == 0) {
-		value = talloc_strdup(ctx, nis_result);
-		if (!value) {
-			return NULL;
+	if (!strcmp(user_name, last_key)) {
+		nis_result = last_value;
+		nis_result_len = strlen(last_value);
+		nis_error = 0;
+  	} else {
+		if ((nis_error = yp_match(nis_domain, nis_map, user_name, strlen(user_name),
+				&nis_result, &nis_result_len)) == 0) {
+			fstrcpy(last_key, user_name);
+			pstrcpy(last_value, nis_result);
+			strip_mount_options(&last_value);
+
+		} else if(nis_error == YPERR_KEY) {
+
+			/* If Key lookup fails user home server is not in nis_map 
+				use default information for server, and home directory */
+			last_value[0] = 0;
+			DEBUG(3, ("YP Key not found:  while looking up \"%s\" in map \"%s\"\n", 
+					user_name, nis_map));
+			DEBUG(3, ("using defaults for server and home directory\n"));
+		} else {
+			DEBUG(3, ("YP Error: \"%s\" while looking up \"%s\" in map \"%s\"\n", 
+					yperr_string(nis_error), user_name, nis_map));
 		}
-		value = strip_mount_options(ctx, value);
-	} else if(nis_error == YPERR_KEY) {
-		DEBUG(3, ("YP Key not found:  while looking up \"%s\" in map \"%s\"\n", 
-				user_name, nis_map));
-		DEBUG(3, ("using defaults for server and home directory\n"));
-	} else {
-		DEBUG(3, ("YP Error: \"%s\" while looking up \"%s\" in map \"%s\"\n", 
-				yperr_string(nis_error), user_name, nis_map));
 	}
 
-	if (value) {
-		DEBUG(4, ("YP Lookup: %s resulted in %s\n", user_name, value));
-	}
-	return value;
+	DEBUG(4, ("YP Lookup: %s resulted in %s\n", user_name, last_value));
+	return last_value;
 }
 #endif /* WITH_NISPLUS_HOME */
 #endif
 
+/*******************************************************************
+ Are two IPs on the same subnet?
+********************************************************************/
+
+BOOL same_net(struct in_addr ip1,struct in_addr ip2,struct in_addr mask)
+{
+	uint32 net1,net2,nmask;
+
+	nmask = ntohl(mask.s_addr);
+	net1  = ntohl(ip1.s_addr);
+	net2  = ntohl(ip2.s_addr);
+            
+	return((net1 & nmask) == (net2 & nmask));
+}
+
+
 /****************************************************************************
  Check if a process exists. Does this work on all unixes?
 ****************************************************************************/
 
-bool process_exists(const struct server_id pid)
+BOOL process_exists(const struct process_id pid)
 {
 	if (procid_is_me(&pid)) {
 		return True;
 	}
 
-	if (procid_is_local(&pid)) {
-		return (kill(pid.pid,0) == 0 || errno != ESRCH);
+	if (!procid_is_local(&pid)) {
+		/* This *SEVERELY* needs fixing. */
+		return True;
 	}
 
-#ifdef CLUSTER_SUPPORT
-	return ctdbd_process_exists(messaging_ctdbd_connection(), pid.vnn,
-				    pid.pid);
-#else
-	return False;
-#endif
+	/* Doing kill with a non-positive pid causes messages to be
+	 * sent to places we don't want. */
+	SMB_ASSERT(pid.pid > 0);
+	return(kill(pid.pid,0) == 0 || errno != ESRCH);
 }
 
-bool process_exists_by_pid(pid_t pid)
+BOOL process_exists_by_pid(pid_t pid)
 {
-	/* Doing kill with a non-positive pid causes messages to be
-	 * sent to places we don't want. */
-	SMB_ASSERT(pid > 0);
-	return(kill(pid,0) == 0 || errno != ESRCH);
+	return process_exists(pid_to_procid(pid));
 }
 
 /*******************************************************************
@@ -1563,43 +1535,38 @@
 
 const char *uidtoname(uid_t uid)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *name = NULL;
-	struct passwd *pass = NULL;
+	static fstring name;
+	struct passwd *pass;
 
-	pass = getpwuid_alloc(ctx,uid);
+	pass = getpwuid_alloc(NULL, uid);
 	if (pass) {
-		name = talloc_strdup(ctx,pass->pw_name);
+		fstrcpy(name, pass->pw_name);
 		TALLOC_FREE(pass);
 	} else {
-		name = talloc_asprintf(ctx,
-				"%ld",
-				(long int)uid);
+		slprintf(name, sizeof(name) - 1, "%ld",(long int)uid);
 	}
 	return name;
 }
 
+
 /*******************************************************************
  Convert a gid into a group name.
 ********************************************************************/
 
 char *gidtoname(gid_t gid)
 {
+	static fstring name;
 	struct group *grp;
 
 	grp = getgrgid(gid);
-	if (grp) {
-		return talloc_strdup(talloc_tos(), grp->gr_name);
-	}
-	else {
-		return talloc_asprintf(talloc_tos(),
-					"%d",
-					(int)gid);
-	}
+	if (grp)
+		return(grp->gr_name);
+	slprintf(name,sizeof(name) - 1, "%d",(int)gid);
+	return(name);
 }
 
 /*******************************************************************
- Convert a user name into a uid.
+ Convert a user name into a uid. 
 ********************************************************************/
 
 uid_t nametouid(const char *name)
@@ -1849,7 +1816,15 @@
 	dname = dname - 2;
 #endif
 
-	return talloc_strdup(talloc_tos(), dname);
+	{
+		static pstring buf;
+		int len = NAMLEN(ptr);
+		memcpy(buf, dname, len);
+		buf[len] = 0;
+		dname = buf;
+	}
+
+	return(dname);
 }
 
 /*******************************************************************
@@ -1857,7 +1832,7 @@
  of a path matches a (possibly wildcarded) entry in a namelist.
 ********************************************************************/
 
-bool is_in_path(const char *name, name_compare_entry *namelist, bool case_sensitive)
+BOOL is_in_path(const char *name, name_compare_entry *namelist, BOOL case_sensitive)
 {
 	const char *last_component;
 
@@ -2008,7 +1983,7 @@
  Returns True if the lock was granted, False otherwise.
 ****************************************************************************/
 
-bool fcntl_lock(int fd, int op, SMB_OFF_T offset, SMB_OFF_T count, int type)
+BOOL fcntl_lock(int fd, int op, SMB_OFF_T offset, SMB_OFF_T count, int type)
 {
 	SMB_STRUCT_FLOCK lock;
 	int ret;
@@ -2045,7 +2020,7 @@
  F_UNLCK in *ptype if the region is unlocked). False if the call failed.
 ****************************************************************************/
 
-bool fcntl_getlock(int fd, SMB_OFF_T *poffset, SMB_OFF_T *pcount, int *ptype, pid_t *ppid)
+BOOL fcntl_getlock(int fd, SMB_OFF_T *poffset, SMB_OFF_T *pcount, int *ptype, pid_t *ppid)
 {
 	SMB_STRUCT_FLOCK lock;
 	int ret;
@@ -2087,10 +2062,10 @@
  Returns true if it is equal, false otherwise.
 ********************************************************************/
 
-bool is_myname(const char *s)
+BOOL is_myname(const char *s)
 {
 	int n;
-	bool ret = False;
+	BOOL ret = False;
 
 	for (n=0; my_netbios_names(n); n++) {
 		if (strequal(my_netbios_names(n), s)) {
@@ -2102,14 +2077,91 @@
 	return(ret);
 }
 
+BOOL is_myname_or_ipaddr(const char *s)
+{
+	fstring name, dnsname;
+	char *servername;
+
+	if ( !s )
+		return False;
+
+	/* santize the string from '\\name' */
+
+	fstrcpy( name, s );
+
+	servername = strrchr_m( name, '\\' );
+	if ( !servername )
+		servername = name;
+	else
+		servername++;
+
+	/* optimize for the common case */
+
+	if (strequal(servername, global_myname())) 
+		return True;
+
+	/* check for an alias */
+
+	if (is_myname(servername))
+		return True;
+
+	/* check for loopback */
+
+	if (strequal(servername, "127.0.0.1")) 
+		return True;
+
+	if (strequal(servername, "localhost")) 
+		return True;
+
+	/* maybe it's my dns name */
+
+	if ( get_mydnsfullname( dnsname ) )
+		if ( strequal( servername, dnsname ) )
+			return True;
+		
+	/* handle possible CNAME records */
+
+	if ( !is_ipaddress( servername ) ) {
+		/* use DNS to resolve the name, but only the first address */
+		struct hostent *hp;
+
+		if (((hp = sys_gethostbyname(name)) != NULL) && (hp->h_addr != NULL)) {
+			struct in_addr return_ip;
+			putip( (char*)&return_ip, (char*)hp->h_addr );
+			fstrcpy( name, inet_ntoa( return_ip ) );
+			servername = name;
+		}	
+	}
+		
+	/* maybe its an IP address? */
+	if (is_ipaddress(servername)) {
+		struct iface_struct nics[MAX_INTERFACES];
+		int i, n;
+		uint32 ip;
+		
+		ip = interpret_addr(servername);
+		if ((ip==0) || (ip==0xffffffff))
+			return False;
+			
+		n = get_interfaces(nics, MAX_INTERFACES);
+		for (i=0; i<n; i++) {
+			if (ip == nics[i].ip.s_addr)
+				return True;
+		}
+	}	
+
+	/* no match */
+	return False;
+}
+
 /*******************************************************************
  Is the name specified our workgroup/domain.
  Returns true if it is equal, false otherwise.
 ********************************************************************/
 
-bool is_myworkgroup(const char *s)
+BOOL is_myworkgroup(const char *s)
 {
-	bool ret = False;
+	BOOL ret = False;
 
 	if (strequal(s, lp_workgroup())) {
 		ret=True;
@@ -2124,32 +2176,22 @@
    WinXP => "Windows 2002 5.1"
    WinXP 64bit => "Windows XP 5.2"
    Win2k => "Windows 2000 5.0"
-   NT4   => "Windows NT 4.0"
+   NT4   => "Windows NT 4.0" 
    Win9x => "Windows 4.0"
- Windows 2003 doesn't set the native lan manager string but
+ Windows 2003 doesn't set the native lan manager string but 
  they do set the domain to "Windows 2003 5.2" (probably a bug).
 ********************************************************************/
 
 void ra_lanman_string( const char *native_lanman )
-{
+{	
 	if ( strcmp( native_lanman, "Windows 2002 5.1" ) == 0 )
 		set_remote_arch( RA_WINXP );
 	else if ( strcmp( native_lanman, "Windows XP 5.2" ) == 0 )
-		set_remote_arch( RA_WINXP64 );
+		set_remote_arch( RA_WINXP );
 	else if ( strcmp( native_lanman, "Windows Server 2003 5.2" ) == 0 )
 		set_remote_arch( RA_WIN2K3 );
 }
 
-static const char *remote_arch_str;
-
-const char *get_remote_arch_str(void)
-{
-	if (!remote_arch_str) {
-		return "UNKNOWN";
-	}
-	return remote_arch_str;
-}
-
 /*******************************************************************
  Set the horrid remote_arch string based on an enum.
 ********************************************************************/
@@ -2159,46 +2201,42 @@
 	ra_type = type;
 	switch( type ) {
 	case RA_WFWG:
-		remote_arch_str = "WfWg";
+		fstrcpy(remote_arch, "WfWg");
 		break;
 	case RA_OS2:
-		remote_arch_str = "OS2";
+		fstrcpy(remote_arch, "OS2");
 		break;
 	case RA_WIN95:
-		remote_arch_str = "Win95";
+		fstrcpy(remote_arch, "Win95");
 		break;
 	case RA_WINNT:
-		remote_arch_str = "WinNT";
+		fstrcpy(remote_arch, "WinNT");
 		break;
 	case RA_WIN2K:
-		remote_arch_str = "Win2K";
+		fstrcpy(remote_arch, "Win2K");
 		break;
 	case RA_WINXP:
-		remote_arch_str = "WinXP";
+		fstrcpy(remote_arch, "WinXP");
 		break;
-	case RA_WINXP64:
-		remote_arch_str = "WinXP64";
-		break;
 	case RA_WIN2K3:
-		remote_arch_str = "Win2K3";
+		fstrcpy(remote_arch, "Win2K3");
 		break;
 	case RA_VISTA:
-		remote_arch_str = "Vista";
+		fstrcpy(remote_arch, "Vista");
 		break;
 	case RA_SAMBA:
-		remote_arch_str = "Samba";
+		fstrcpy(remote_arch,"Samba");
 		break;
 	case RA_CIFSFS:
-		remote_arch_str = "CIFSFS";
+		fstrcpy(remote_arch,"CIFSFS");
 		break;
 	default:
 		ra_type = RA_UNKNOWN;
-		remote_arch_str = "UNKNOWN";
+		fstrcpy(remote_arch, "UNKNOWN");
 		break;
 	}
 
-	DEBUG(10,("set_remote_arch: Client arch is \'%s\'\n",
-				remote_arch_str));
+	DEBUG(10,("set_remote_arch: Client arch is \'%s\'\n", remote_arch));
 }
 
 /*******************************************************************
@@ -2217,7 +2255,7 @@
 		DEBUG(level,("%c", isprint(buf[i])?buf[i]:'.'));
 }
 
-void dump_data(int level, const unsigned char *buf1,int len)
+void dump_data(int level, const char *buf1,int len)
 {
 	const unsigned char *buf = (const unsigned char *)buf1;
 	int i=0;
@@ -2245,9 +2283,9 @@
 		n = MIN(8,i%16);
 		print_asc(level,&buf[i-(i%16)],n); DEBUGADD(level,( " " ));
 		n = (i%16) - n;
-		if (n>0) print_asc(level,&buf[i-n],n);
-		DEBUGADD(level,("\n"));
-	}
+		if (n>0) print_asc(level,&buf[i-n],n); 
+		DEBUGADD(level,("\n"));    
+	}	
 }
 
 void dump_data_pw(const char *msg, const uchar * data, size_t len)
@@ -2256,17 +2294,17 @@
 	DEBUG(11, ("%s", msg));
 	if (data != NULL && len > 0)
 	{
-		dump_data(11, data, len);
+		dump_data(11, (const char *)data, len);
 	}
 #endif
 }
 
-const char *tab_depth(int level, int depth)
+char *tab_depth(int depth)
 {
-	if( CHECK_DEBUGLVL(level) ) {
-		dbgtext("%*s", depth*4, "");
-	}
-	return "";
+	static pstring spaces;
+	memset(spaces, ' ', depth * 4);
+	spaces[depth * 4] = 0;
+	return spaces;
 }
 
 /*****************************************************************************
@@ -2283,7 +2321,7 @@
 	int res = 0;
 	int c;
 	int i=0;
-
+	
 	while(*s) {
 		c = *s;
 		res ^= (c << (i % 15)) ^ (c >> (15-(i%15)));
@@ -2411,16 +2449,15 @@
 void *smb_xmalloc_array(size_t size, unsigned int count)
 {
 	void *p;
-	if (size == 0) {
-		smb_panic("smb_xmalloc_array: called with zero size");
-	}
+	if (size == 0)
+		smb_panic("smb_xmalloc_array: called with zero size.\n");
         if (count >= MAX_ALLOC_SIZE/size) {
-                smb_panic("smb_xmalloc_array: alloc size too large");
+                smb_panic("smb_xmalloc: alloc size too large.\n");
         }
 	if ((p = SMB_MALLOC(size*count)) == NULL) {
 		DEBUG(0, ("smb_xmalloc_array failed to allocate %lu * %lu bytes\n",
 			(unsigned long)size, (unsigned long)count));
-		smb_panic("smb_xmalloc_array: malloc failed");
+		smb_panic("smb_xmalloc_array: malloc fail.\n");
 	}
 	return p;
 }
@@ -2460,9 +2497,8 @@
 #endif
 #define strdup(s) __ERROR_DONT_USE_STRDUP_DIRECTLY
 #endif
-	if (!s1) {
-		smb_panic("smb_xstrdup: malloc failed");
-	}
+	if (!s1)
+		smb_panic("smb_xstrdup: malloc fail\n");
 	return s1;
 
 }
@@ -2491,9 +2527,8 @@
 #endif
 #define strndup(s,n) __ERROR_DONT_USE_STRNDUP_DIRECTLY
 #endif
-	if (!s1) {
-		smb_panic("smb_xstrndup: malloc failed");
-	}
+	if (!s1)
+		smb_panic("smb_xstrndup: malloc fail\n");
 	return s1;
 }
 
@@ -2509,16 +2544,14 @@
 	VA_COPY(ap2, ap);
 
 	n = vasprintf(ptr, format, ap2);
-	if (n == -1 || ! *ptr) {
+	if (n == -1 || ! *ptr)
 		smb_panic("smb_xvasprintf: out of memory");
-	}
-	va_end(ap2);
 	return n;
 }
 
 /*****************************************************************
  Like strdup but for memory.
-*****************************************************************/
+*****************************************************************/  
 
 void *memdup(const void *p, size_t size)
 {
@@ -2534,59 +2567,54 @@
 
 /*****************************************************************
  Get local hostname and cache result.
-*****************************************************************/
+*****************************************************************/  
 
 char *myhostname(void)
 {
-	static char *ret;
-	if (ret == NULL) {
-		/* This is cached forever so
-		 * use NULL talloc ctx. */
-		ret = get_myname(NULL);
-	}
+	static pstring ret;
+	if (ret[0] == 0)
+		get_myname(ret);
 	return ret;
 }
 
 /*****************************************************************
- A useful function for returning a path in the Samba pid directory.
-*****************************************************************/
+ A useful function for returning a path in the Samba lock directory.
+*****************************************************************/  
 
-static char *xx_path(const char *name, const char *rootpath)
+char *lock_path(const char *name)
 {
-	char *fname = NULL;
+	static pstring fname;
 
-	fname = talloc_strdup(talloc_tos(), rootpath);
-	if (!fname) {
-		return NULL;
-	}
-	trim_string(fname,"","/");
-
-	if (!directory_exist(fname,NULL)) {
+	pstrcpy(fname,lp_lockdir());
+	trim_char(fname,'\0','/');
+	
+	if (!directory_exist(fname,NULL))
 		mkdir(fname,0755);
-	}
+	
+	pstrcat(fname,"/");
+	pstrcat(fname,name);
 
-	return talloc_asprintf(talloc_tos(),
-				"%s/%s",
-				fname,
-				name);
+	return fname;
 }
 
 /*****************************************************************
- A useful function for returning a path in the Samba lock directory.
-*****************************************************************/
-
-char *lock_path(const char *name)
-{
-	return xx_path(name, lp_lockdir());
-}
-
-/*****************************************************************
  A useful function for returning a path in the Samba pid directory.
 *****************************************************************/
 
 char *pid_path(const char *name)
 {
-	return xx_path(name, lp_piddir());
+	static pstring fname;
+
+	pstrcpy(fname,lp_piddir());
+	trim_char(fname,'\0','/');
+
+	if (!directory_exist(fname,NULL))
+		mkdir(fname,0755);
+
+	pstrcat(fname,"/");
+	pstrcat(fname,name);
+
+	return fname;
 }
 
 /**
@@ -2594,65 +2622,56 @@
  *
  * @param name File to find, relative to LIBDIR.
  *
- * @retval Pointer to a string containing the full path.
+ * @retval Pointer to a static #pstring containing the full path.
  **/
 
 char *lib_path(const char *name)
 {
-	return talloc_asprintf(talloc_tos(), "%s/%s", get_dyn_LIBDIR(), name);
+	static pstring fname;
+	fstr_sprintf(fname, "%s/%s", dyn_LIBDIR, name);
+	return fname;
 }
 
 /**
- * @brief Returns an absolute path to a file in the Samba data directory.
- *
- * @param name File to find, relative to CODEPAGEDIR.
- *
- * @retval Pointer to a talloc'ed string containing the full path.
- **/
-
-char *data_path(const char *name)
-{
-	return talloc_asprintf(talloc_tos(), "%s/%s", get_dyn_CODEPAGEDIR(), name);
-}
-
-/*****************************************************************
-a useful function for returning a path in the Samba state directory
- *****************************************************************/
-
-char *state_path(const char *name)
-{
-	return xx_path(name, get_dyn_STATEDIR());
-}
-
-/**
  * @brief Returns the platform specific shared library extension.
  *
- * @retval Pointer to a const char * containing the extension.
+ * @retval Pointer to a static #fstring containing the extension.
  **/
 
 const char *shlib_ext(void)
 {
-	return get_dyn_SHLIBEXT();
+  return dyn_SHLIBEXT;
 }
 
 /*******************************************************************
  Given a filename - get its directory name
  NB: Returned in static storage.  Caveats:
+ o  Not safe in thread environment.
+ o  Caller must not free.
  o  If caller wishes to preserve, they should copy.
 ********************************************************************/
 
 char *parent_dirname(const char *path)
 {
-	char *parent;
+	static pstring dirpath;
+	char *p;
 
-	if (!parent_dirname_talloc(talloc_tos(), path, &parent, NULL)) {
-		return NULL;
-	}
+	if (!path)
+		return(NULL);
 
-	return parent;
+	pstrcpy(dirpath, path);
+	p = strrchr_m(dirpath, '/');  /* Find final '/', if any */
+	if (!p) {
+		pstrcpy(dirpath, ".");    /* No final "/", so dir is "." */
+	} else {
+		if (p == dirpath)
+			++p;    /* For root "/", leave "/" in place */
+		*p = '\0';
+	}
+	return dirpath;
 }
 
-bool parent_dirname_talloc(TALLOC_CTX *mem_ctx, const char *dir,
+BOOL parent_dirname_talloc(TALLOC_CTX *mem_ctx, const char *dir,
 			   char **parent, const char **name)
 {
 	char *p;
@@ -2688,7 +2707,7 @@
  Determine if a pattern contains any Microsoft wildcard characters.
 *******************************************************************/
 
-bool ms_has_wild(const char *s)
+BOOL ms_has_wild(const char *s)
 {
 	char c;
 
@@ -2710,7 +2729,7 @@
 	return False;
 }
 
-bool ms_has_wild_w(const smb_ucs2_t *s)
+BOOL ms_has_wild_w(const smb_ucs2_t *s)
 {
 	smb_ucs2_t c;
 	if (!s) return False;
@@ -2732,7 +2751,7 @@
  of the ".." name.
 *******************************************************************/
 
-bool mask_match(const char *string, const char *pattern, bool is_case_sensitive)
+BOOL mask_match(const char *string, const char *pattern, BOOL is_case_sensitive)
 {
 	if (strcmp(string,"..") == 0)
 		string = ".";
@@ -2748,7 +2767,7 @@
  pattern translation.
 *******************************************************************/
 
-bool mask_match_search(const char *string, const char *pattern, bool is_case_sensitive)
+BOOL mask_match_search(const char *string, const char *pattern, BOOL is_case_sensitive)
 {
 	if (strcmp(string,"..") == 0)
 		string = ".";
@@ -2763,7 +2782,7 @@
  on each.  Returns True if any of the patterns match.
 *******************************************************************/
 
-bool mask_match_list(const char *string, char **list, int listLen, bool is_case_sensitive)
+BOOL mask_match_list(const char *string, char **list, int listLen, BOOL is_case_sensitive)
 {
        while (listLen-- > 0) {
                if (mask_match(string, *list++, is_case_sensitive))
@@ -2776,7 +2795,7 @@
  Recursive routine that is called by unix_wild_match.
 *********************************************************/
 
-static bool unix_do_match(const char *regexp, const char *str)
+static BOOL unix_do_match(const char *regexp, const char *str)
 {
 	const char *p;
 
@@ -2796,7 +2815,7 @@
 				 */
 				p++;
 				if(!*p)
-					return true; /* Automatic match */
+					return True; /* Automatic match */
 				while(*str) {
 
 					while(*str && (*p != *str))
@@ -2831,24 +2850,24 @@
 						}
 
 						if ( matchcount <= 0 )
-							return false;
+							return False;
 					}
 
 					str--; /* We've eaten the match char after the '*' */
 
 					if(unix_do_match(p, str))
-						return true;
+						return True;
 
 					if(!*str)
-						return false;
+						return False;
 					else
 						str++;
 				}
-				return false;
+				return False;
 
 			default:
 				if(*str != *p)
-					return false;
+					return False;
 				str++;
 				p++;
 				break;
@@ -2856,11 +2875,11 @@
 	}
 
 	if(!*p && !*str)
-		return true;
+		return True;
 
 	if (!*p && str[0] == '.' && str[1] == 0)
-		return true;
-
+		return(True);
+  
 	if (!*str && *p == '?') {
 		while (*p == '?')
 			p++;
@@ -2868,9 +2887,9 @@
 	}
 
 	if(!*str && (*p == '*' && p[1] == '\0'))
-		return true;
+		return True;
 
-	return false;
+	return False;
 }
 
 /*******************************************************************
@@ -2878,84 +2897,71 @@
  Returns True if match, False if not.
 *******************************************************************/
 
-bool unix_wild_match(const char *pattern, const char *string)
+BOOL unix_wild_match(const char *pattern, const char *string)
 {
-	TALLOC_CTX *ctx = talloc_stackframe();
-	char *p2;
-	char *s2;
+	pstring p2, s2;
 	char *p;
-	bool ret = false;
 
-	p2 = talloc_strdup(ctx,pattern);
-	s2 = talloc_strdup(ctx,string);
-	if (!p2 || !s2) {
-		TALLOC_FREE(ctx);
-		return false;
-	}
+	pstrcpy(p2, pattern);
+	pstrcpy(s2, string);
 	strlower_m(p2);
 	strlower_m(s2);
 
 	/* Remove any *? and ** from the pattern as they are meaningless */
-	for(p = p2; *p; p++) {
-		while( *p == '*' && (p[1] == '?' ||p[1] == '*')) {
-			memmove(&p[1], &p[2], strlen(&p[2])+1);
-		}
-	}
+	for(p = p2; *p; p++)
+		while( *p == '*' && (p[1] == '?' ||p[1] == '*'))
+			pstrcpy( &p[1], &p[2]);
+ 
+	if (strequal(p2,"*"))
+		return True;
 
-	if (strequal(p2,"*")) {
-		TALLOC_FREE(ctx);
-		return true;
-	}
-
-	ret = unix_do_match(p2, s2);
-	TALLOC_FREE(ctx);
-	return ret;
+	return unix_do_match(p2, s2);
 }
 
 /**********************************************************************
  Converts a name to a fully qualified domain name.
- Returns true if lookup succeeded, false if not (then fqdn is set to name)
- Note we deliberately use gethostbyname here, not getaddrinfo as we want
- to examine the h_aliases and I don't know how to do that with getaddrinfo.
+ Returns True if lookup succeeded, False if not (then fqdn is set to name)
 ***********************************************************************/
-
-bool name_to_fqdn(fstring fqdn, const char *name)
+                                                                                                                                                   
+BOOL name_to_fqdn(fstring fqdn, const char *name)
 {
-	char *full = NULL;
-	struct hostent *hp = gethostbyname(name);
+	struct hostent *hp = sys_gethostbyname(name);
 
-	if (!hp || !hp->h_name || !*hp->h_name) {
-		DEBUG(10,("name_to_fqdn: lookup for %s failed.\n", name));
-		fstrcpy(fqdn, name);
-		return false;
-	}
+	if ( hp && hp->h_name && *hp->h_name ) {
+		char *full = NULL;
 
-	/* Find out if the fqdn is returned as an alias
-	 * to cope with /etc/hosts files where the first
-	 * name is not the fqdn but the short name */
-	if (hp->h_aliases && (! strchr_m(hp->h_name, '.'))) {
-		int i;
-		for (i = 0; hp->h_aliases[i]; i++) {
-			if (strchr_m(hp->h_aliases[i], '.')) {
-				full = hp->h_aliases[i];
-				break;
+		/* find out if the fqdn is returned as an alias
+		 * to cope with /etc/hosts files where the first
+		 * name is not the fqdn but the short name */
+		if (hp->h_aliases && (! strchr_m(hp->h_name, '.'))) {
+			int i;
+			for (i = 0; hp->h_aliases[i]; i++) {
+				if (strchr_m(hp->h_aliases[i], '.')) {
+					full = hp->h_aliases[i];
+					break;
+				}
 			}
 		}
-	}
-	if (full && (StrCaseCmp(full, "localhost.localdomain") == 0)) {
-		DEBUG(1, ("WARNING: your /etc/hosts file may be broken!\n"));
-		DEBUGADD(1, ("    Specifing the machine hostname for address 127.0.0.1 may lead\n"));
-		DEBUGADD(1, ("    to Kerberos authentication problems as localhost.localdomain\n"));
-		DEBUGADD(1, ("    may end up being used instead of the real machine FQDN.\n"));
-		full = hp->h_name;
-	}
-	if (!full) {
-		full = hp->h_name;
-	}
+		if (full && (StrCaseCmp(full, "localhost.localdomain") == 0)) {
+			DEBUG(1, ("WARNING: your /etc/hosts file may be broken!\n"));
+			DEBUGADD(1, ("    Specifing the machine hostname for address 127.0.0.1 may lead\n"));
+			DEBUGADD(1, ("    to Kerberos authentication problems as localhost.localdomain\n"));
+			DEBUGADD(1, ("    may end up being used instead of the real machine FQDN.\n"));
+			full = hp->h_name;
+		}
+			
+		if (!full) {
+			full = hp->h_name;
+		}
 
-	DEBUG(10,("name_to_fqdn: lookup for %s -> %s.\n", name, full));
-	fstrcpy(fqdn, full);
-	return true;
+		DEBUG(10,("name_to_fqdn: lookup for %s -> %s.\n", name, full));
+		fstrcpy(fqdn, full);
+		return True;
+	} else {
+		DEBUG(10,("name_to_fqdn: lookup for %s failed.\n", name));
+		fstrcpy(fqdn, name);
+		return False;
+	}
 }
 
 /**********************************************************************
@@ -2972,11 +2978,51 @@
 
 	DEBUG(0, ("Talloc type mismatch, expected %s, got %s\n",
 		  name, talloc_get_name(ptr)));
-	smb_panic("talloc type mismatch");
+	smb_panic("aborting");
 	/* Keep the compiler happy */
 	return NULL;
 }
 
+
+#ifdef __INSURE__
+
+/*******************************************************************
+This routine is a trick to immediately catch errors when debugging
+with insure. A xterm with a gdb is popped up when insure catches
+a error. It is Linux specific.
+********************************************************************/
+
+int _Insure_trap_error(int a1, int a2, int a3, int a4, int a5, int a6)
+{
+	static int (*fn)();
+	int ret;
+	char pidstr[10];
+	/* you can get /usr/bin/backtrace from 
+           http://samba.org/ftp/unpacked/junkcode/backtrace */
+	pstring cmd = "/usr/bin/backtrace %d";
+
+	slprintf(pidstr, sizeof(pidstr)-1, "%d", sys_getpid());
+	pstring_sub(cmd, "%d", pidstr);
+
+	if (!fn) {
+		static void *h;
+		h = dlopen("/usr/local/parasoft/insure++lite/lib.linux2/libinsure.so", RTLD_LAZY);
+		fn = dlsym(h, "_Insure_trap_error");
+
+		if (!h || h == _Insure_trap_error) {
+			h = dlopen("/usr/local/parasoft/lib.linux2/libinsure.so", RTLD_LAZY);
+			fn = dlsym(h, "_Insure_trap_error");
+		}		
+	}
+
+	ret = fn(a1, a2, a3, a4, a5, a6);
+
+	system(cmd);
+
+	return ret;
+}
+#endif
+
 uint32 map_share_mode_to_deny_mode(uint32 share_access, uint32 private_options)
 {
 	switch (share_access & ~FILE_SHARE_DELETE) {
@@ -2998,133 +3044,71 @@
 	return (uint32)-1;
 }
 
-pid_t procid_to_pid(const struct server_id *proc)
+pid_t procid_to_pid(const struct process_id *proc)
 {
 	return proc->pid;
 }
 
-static uint32 my_vnn = NONCLUSTER_VNN;
-
-void set_my_vnn(uint32 vnn)
+struct process_id pid_to_procid(pid_t pid)
 {
-	DEBUG(10, ("vnn pid %d = %u\n", (int)sys_getpid(), (unsigned int)vnn));
-	my_vnn = vnn;
-}
-
-uint32 get_my_vnn(void)
-{
-	return my_vnn;
-}
-
-struct server_id pid_to_procid(pid_t pid)
-{
-	struct server_id result;
+	struct process_id result;
 	result.pid = pid;
-#ifdef CLUSTER_SUPPORT
-	result.vnn = my_vnn;
-#endif
 	return result;
 }
 
-struct server_id procid_self(void)
+struct process_id procid_self(void)
 {
 	return pid_to_procid(sys_getpid());
 }
 
 struct server_id server_id_self(void)
 {
-	return procid_self();
+	struct server_id id;
+	id.id = procid_self();
+	return id;
 }
 
-bool procid_equal(const struct server_id *p1, const struct server_id *p2)
+BOOL procid_equal(const struct process_id *p1, const struct process_id *p2)
 {
-	if (p1->pid != p2->pid)
-		return False;
-#ifdef CLUSTER_SUPPORT
-	if (p1->vnn != p2->vnn)
-		return False;
-#endif
-	return True;
+	return (p1->pid == p2->pid);
 }
 
-bool cluster_id_equal(const struct server_id *id1,
+BOOL cluster_id_equal(const struct server_id *id1,
 		      const struct server_id *id2)
 {
-	return procid_equal(id1, id2);
+	return procid_equal(&id1->id, &id2->id);
 }
 
-bool procid_is_me(const struct server_id *pid)
+BOOL procid_is_me(const struct process_id *pid)
 {
-	if (pid->pid != sys_getpid())
-		return False;
-#ifdef CLUSTER_SUPPORT
-	if (pid->vnn != my_vnn)
-		return False;
-#endif
-	return True;
+	return (pid->pid == sys_getpid());
 }
 
-struct server_id interpret_pid(const char *pid_string)
+struct process_id interpret_pid(const char *pid_string)
 {
-#ifdef CLUSTER_SUPPORT
-	unsigned int vnn, pid;
-	struct server_id result;
-	if (sscanf(pid_string, "%u:%u", &vnn, &pid) == 2) {
-		result.vnn = vnn;
-		result.pid = pid;
-	}
-	else if (sscanf(pid_string, "%u", &pid) == 1) {
-		result.vnn = NONCLUSTER_VNN;
-		result.pid = pid;
-	}
-	else {
-		result.vnn = NONCLUSTER_VNN;
-		result.pid = -1;
-	}
-	return result;
-#else
 	return pid_to_procid(atoi(pid_string));
-#endif
 }
 
-char *procid_str(TALLOC_CTX *mem_ctx, const struct server_id *pid)
+char *procid_str_static(const struct process_id *pid)
 {
-#ifdef CLUSTER_SUPPORT
-	if (pid->vnn == NONCLUSTER_VNN) {
-		return talloc_asprintf(mem_ctx,
-				"%d",
-				(int)pid->pid);
-	}
-	else {
-		return talloc_asprintf(mem_ctx,
-					"%u:%d",
-					(unsigned)pid->vnn,
-					(int)pid->pid);
-	}
-#else
-	return talloc_asprintf(mem_ctx,
-			"%d",
-			(int)pid->pid);
-#endif
+	static fstring str;
+	fstr_sprintf(str, "%d", pid->pid);
+	return str;
 }
 
-char *procid_str_static(const struct server_id *pid)
+char *procid_str(TALLOC_CTX *mem_ctx, const struct process_id *pid)
 {
-	return procid_str(talloc_tos(), pid);
+	return talloc_strdup(mem_ctx, procid_str_static(pid));
 }
 
-bool procid_valid(const struct server_id *pid)
+BOOL procid_valid(const struct process_id *pid)
 {
 	return (pid->pid != -1);
 }
 
-bool procid_is_local(const struct server_id *pid)
+BOOL procid_is_local(const struct process_id *pid)
 {
-#ifdef CLUSTER_SUPPORT
-	return pid->vnn == my_vnn;
-#else
 	return True;
-#endif
 }
 
 int this_is_smp(void)
@@ -3150,7 +3134,7 @@
  pointer ptr+off.
 ****************************************************************/
 
-bool is_offset_safe(const char *buf_base, size_t buf_len, char *ptr, size_t off)
+BOOL is_offset_safe(const char *buf_base, size_t buf_len, char *ptr, size_t off)
 {
 	const char *end_base = buf_base + buf_len;
 	char *end_ptr = ptr + off;
@@ -3228,35 +3212,6 @@
 }
 
 /****************************************************************
- Split DOM\user into DOM and user. Do not mix with winbind variants of that
- call (they take care of winbind separator and other winbind specific settings).
-****************************************************************/
-
-void split_domain_user(TALLOC_CTX *mem_ctx,
-		       const char *full_name,
-		       char **domain,
-		       char **user)
-{
-	const char *p = NULL;
-
-	p = strchr_m(full_name, '\\');
-
-	if (p != NULL) {
-		*domain = talloc_strndup(mem_ctx, full_name,
-					 PTR_DIFF(p, full_name));
-		*user = talloc_strdup(mem_ctx, p+1);
-	} else {
-		*domain = talloc_strdup(mem_ctx, "");
-		*user = talloc_strdup(mem_ctx, full_name);
-	}
-}
-
-#if 0
-
-Disable these now we have checked all code paths and ensured
-NULL returns on zero request. JRA.
-
-/****************************************************************
  talloc wrapper functions that guarentee a null pointer return
  if size == 0.
 ****************************************************************/
@@ -3354,121 +3309,3 @@
 	}
 	return talloc_named_const(context, size, name);
 }
-#endif
-
-/* Split a path name into filename and stream name components. Canonicalise
- * such that an implicit $DATA token is always explicit.
- *
- * The "specification" of this function can be found in the
- * run_local_stream_name() function in torture.c, I've tried those
- * combinations against a W2k3 server.
- */
-
-NTSTATUS split_ntfs_stream_name(TALLOC_CTX *mem_ctx, const char *fname,
-				char **pbase, char **pstream)
-{
-	char *base = NULL;
-	char *stream = NULL;
-	char *sname; /* stream name */
-	const char *stype; /* stream type */
-
-	DEBUG(10, ("split_ntfs_stream_name called for [%s]\n", fname));
-
-	sname = strchr_m(fname, ':');
-
-	if (lp_posix_pathnames() || (sname == NULL)) {
-		if (pbase != NULL) {
-			base = talloc_strdup(mem_ctx, fname);
-			NT_STATUS_HAVE_NO_MEMORY(base);
-		}
-		goto done;
-	}
-
-	if (pbase != NULL) {
-		base = talloc_strndup(mem_ctx, fname, PTR_DIFF(sname, fname));
-		NT_STATUS_HAVE_NO_MEMORY(base);
-	}
-
-	sname += 1;
-
-	stype = strchr_m(sname, ':');
-
-	if (stype == NULL) {
-		sname = talloc_strdup(mem_ctx, sname);
-		stype = "$DATA";
-	}
-	else {
-		if (StrCaseCmp(stype, ":$DATA") != 0) {
-			/*
-			 * If there is an explicit stream type, so far we only
-			 * allow $DATA. Is there anything else allowed? -- vl
-			 */
-			DEBUG(10, ("[%s] is an invalid stream type\n", stype));
-			TALLOC_FREE(base);
-			return NT_STATUS_OBJECT_NAME_INVALID;
-		}
-		sname = talloc_strndup(mem_ctx, sname, PTR_DIFF(stype, sname));
-		stype += 1;
-	}
-
-	if (sname == NULL) {
-		TALLOC_FREE(base);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	if (sname[0] == '\0') {
-		/*
-		 * no stream name, so no stream
-		 */
-		goto done;
-	}
-
-	if (pstream != NULL) {
-		stream = talloc_asprintf(mem_ctx, "%s:%s", sname, stype);
-		if (stream == NULL) {
-			TALLOC_FREE(sname);
-			TALLOC_FREE(base);
-			return NT_STATUS_NO_MEMORY;
-		}
-		/*
-		 * upper-case the type field
-		 */
-		strupper_m(strchr_m(stream, ':')+1);
-	}
-
- done:
-	if (pbase != NULL) {
-		*pbase = base;
-	}
-	if (pstream != NULL) {
-		*pstream = stream;
-	}
-	return NT_STATUS_OK;
-}
-
-bool is_valid_policy_hnd(const POLICY_HND *hnd)
-{
-	POLICY_HND tmp;
-	ZERO_STRUCT(tmp);
-	return (memcmp(&tmp, hnd, sizeof(tmp)) != 0);
-}
-
-/****************************************************************
- strip off leading '\\' from a hostname
-****************************************************************/
-
-const char *strip_hostname(const char *s)
-{
-	if (!s) {
-		return NULL;
-	}
-
-	if (strlen_m(s) < 3) {
-		return s;
-	}
-
-	if (s[0] == '\\') s++;
-	if (s[0] == '\\') s++;
-
-	return s;
-}

Modified: branches/samba/upstream/source/lib/util_file.c
===================================================================
--- branches/samba/upstream/source/lib/util_file.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/util_file.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  * 
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 3 of the License, or (at your option)
+ * Software Foundation; either version 2 of the License, or (at your option)
  * any later version.
  * 
  * This program is distributed in the hope that it will be useful, but WITHOUT
@@ -14,7 +14,8 @@
  * more details.
  * 
  * You should have received a copy of the GNU General Public License along with
- * this program; if not, see <http://www.gnu.org/licenses/>.
+ * this program; if not, write to the Free Software Foundation, Inc., 675
+ * Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -34,7 +35,7 @@
 	char *s=s2;
 	int len = 0;
 	int c;
-	bool start_of_line = True;
+	BOOL start_of_line = True;
 
 	if (x_feof(f)) {
 		return(NULL);
@@ -101,13 +102,13 @@
  Load from a pipe into memory.
 ****************************************************************************/
 
-static char *file_pload(char *syscmd, size_t *size)
+char *file_pload(char *syscmd, size_t *size)
 {
 	int fd, n;
 	char *p;
-	char buf[1024];
+	pstring buf;
 	size_t total;
-
+	
 	fd = sys_popen(syscmd);
 	if (fd == -1) {
 		return NULL;
@@ -208,7 +209,7 @@
  unmap or free memory
 *******************************************************************/
 
-bool unmap_file(void* start, size_t size)
+BOOL unmap_file(void* start, size_t size)
 {
 #ifdef HAVE_MMAP
 	if ( munmap( start, size ) != 0 ) {
@@ -409,7 +410,7 @@
  Save a lump of data into a file. Mostly used for debugging.
 ****************************************************************************/
 
-bool file_save(const char *fname, void *packet, size_t length)
+BOOL file_save(const char *fname, void *packet, size_t length)
 {
 	int fd;
 	fd = open(fname, O_WRONLY|O_CREAT|O_TRUNC, 0644);

Modified: branches/samba/upstream/source/lib/util_nscd.c
===================================================================
--- branches/samba/upstream/source/lib/util_nscd.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/util_nscd.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Deleted: branches/samba/upstream/source/lib/util_nttoken.c
===================================================================
--- branches/samba/upstream/source/lib/util_nttoken.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/util_nttoken.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,69 +0,0 @@
-/* 
- *  Unix SMB/CIFS implementation.
- *  Authentication utility functions
- *  Copyright (C) Andrew Tridgell 1992-1998
- *  Copyright (C) Andrew Bartlett 2001
- *  Copyright (C) Jeremy Allison 2000-2001
- *  Copyright (C) Rafal Szczesniak 2002
- *  Copyright (C) Volker Lendecke 2006
- *  Copyright (C) Michael Adam 2007
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *  
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *  
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-/* function(s) moved from auth/auth_util.c to minimize linker deps */
-
-#include "includes.h"
-
-/****************************************************************************
- Duplicate a SID token.
-****************************************************************************/
-
-NT_USER_TOKEN *dup_nt_token(TALLOC_CTX *mem_ctx, const NT_USER_TOKEN *ptoken)
-{
-	NT_USER_TOKEN *token;
-
-	if (!ptoken)
-		return NULL;
-
-	token = TALLOC_P(mem_ctx, NT_USER_TOKEN);
-	if (token == NULL) {
-		DEBUG(0, ("talloc failed\n"));
-		return NULL;
-	}
-
-	ZERO_STRUCTP(token);
-
-	if (ptoken->user_sids && ptoken->num_sids) {
-		token->user_sids = (DOM_SID *)talloc_memdup(
-			token, ptoken->user_sids, sizeof(DOM_SID) * ptoken->num_sids );
-
-		if (token->user_sids == NULL) {
-			DEBUG(0, ("talloc_memdup failed\n"));
-			TALLOC_FREE(token);
-			return NULL;
-		}
-		token->num_sids = ptoken->num_sids;
-	}
-	
-	/* copy the privileges; don't consider failure to be critical here */
-	
-	if ( !se_priv_copy( &token->privileges, &ptoken->privileges ) ) {
-		DEBUG(0,("dup_nt_token: Failure to copy SE_PRIV!.  "
-			 "Continuing with 0 privileges assigned.\n"));
-	}
-
-	return token;
-}
-

Modified: branches/samba/upstream/source/lib/util_pw.c
===================================================================
--- branches/samba/upstream/source/lib/util_pw.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/util_pw.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -37,37 +38,75 @@
 	return ret;
 }
 
+#define PWNAMCACHE_SIZE 4
+static struct passwd **pwnam_cache = NULL;
+
+static void init_pwnam_cache(void)
+{
+	if (pwnam_cache != NULL)
+		return;
+
+	pwnam_cache = TALLOC_ZERO_ARRAY(NULL, struct passwd *,
+					PWNAMCACHE_SIZE);
+	if (pwnam_cache == NULL) {
+		smb_panic("Could not init pwnam_cache\n");
+	}
+
+	return;
+}
+
 void flush_pwnam_cache(void)
 {
-	memcache_flush(NULL, GETPWNAM_CACHE);
+	TALLOC_FREE(pwnam_cache);
+	pwnam_cache = NULL;
+	init_pwnam_cache();
 }
 
 struct passwd *getpwnam_alloc(TALLOC_CTX *mem_ctx, const char *name)
 {
-	struct passwd *temp, *cached;
+	int i;
 
-	temp = (struct passwd *)memcache_lookup_talloc(
-		NULL, GETPWNAM_CACHE, data_blob_string_const(name));
-	if (temp != NULL) {
-		return tcopy_passwd(mem_ctx, temp);
+	struct passwd *temp;
+
+	init_pwnam_cache();
+
+	for (i=0; i<PWNAMCACHE_SIZE; i++) {
+		if ((pwnam_cache[i] != NULL) && 
+		    (strcmp(name, pwnam_cache[i]->pw_name) == 0)) {
+			DEBUG(10, ("Got %s from pwnam_cache\n", name));
+			return (struct passwd *)talloc_reference(mem_ctx, pwnam_cache[i]);
+		}
 	}
 
 	temp = sys_getpwnam(name);
-	if (temp == NULL) {
+	
+	if (!temp) {
+#if 0
+		if (errno == ENOMEM) {
+			/* what now? */
+		}
+#endif
 		return NULL;
 	}
 
-	cached = tcopy_passwd(NULL, temp);
-	if (cached == NULL) {
-		/*
-		 * Just don't add this into the cache, ignore the failure
-		 */
-		return temp;
+	for (i=0; i<PWNAMCACHE_SIZE; i++) {
+		if (pwnam_cache[i] == NULL)
+			break;
 	}
 
-	memcache_add_talloc(NULL, GETPWNAM_CACHE, data_blob_string_const(name),
-			    cached);
-	return tcopy_passwd(mem_ctx, temp);
+	if (i == PWNAMCACHE_SIZE)
+		i = rand() % PWNAMCACHE_SIZE;
+
+	if (pwnam_cache[i] != NULL) {
+		TALLOC_FREE(pwnam_cache[i]);
+	}
+
+	pwnam_cache[i] = tcopy_passwd(pwnam_cache, temp);
+	if (pwnam_cache[i]!= NULL && mem_ctx != NULL) {
+		return (struct passwd *)talloc_reference(mem_ctx, pwnam_cache[i]);
+	}
+
+	return tcopy_passwd(NULL, pwnam_cache[i]);
 }
 
 struct passwd *getpwuid_alloc(TALLOC_CTX *mem_ctx, uid_t uid) 

Deleted: branches/samba/upstream/source/lib/util_reg.c
===================================================================
--- branches/samba/upstream/source/lib/util_reg.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/util_reg.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,112 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * Registry helper routines
- * Copyright (C) Volker Lendecke 2006
- * 
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 3 of the License, or (at your option)
- * any later version.
- * 
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
- * more details.
- * 
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "includes.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_REGISTRY
-
-extern REGISTRY_OPS smbconf_reg_ops;
-
-const char *reg_type_lookup(enum winreg_Type type)
-{
-	const char *result;
-
-	switch(type) {
-	case REG_NONE:
-		result = "REG_NONE";
-		break;
-	case REG_SZ:
-		result = "REG_SZ";
-		break;
-	case REG_EXPAND_SZ:
-		result = "REG_EXPAND_SZ";
-		break;
-	case REG_BINARY:
-		result = "REG_BINARY";
-		break;
-	case REG_DWORD:
-		result = "REG_DWORD";
-		break;
-	case REG_DWORD_BIG_ENDIAN:
-		result = "REG_DWORD_BIG_ENDIAN";
-		break;
-	case REG_LINK:
-		result = "REG_LINK";
-		break;
-	case REG_MULTI_SZ:
-		result = "REG_MULTI_SZ";
-		break;
-	case REG_RESOURCE_LIST:
-		result = "REG_RESOURCE_LIST";
-		break;
-	case REG_FULL_RESOURCE_DESCRIPTOR:
-		result = "REG_FULL_RESOURCE_DESCRIPTOR";
-		break;
-	case REG_RESOURCE_REQUIREMENTS_LIST:
-		result = "REG_RESOURCE_REQUIREMENTS_LIST";
-		break;
-	case REG_QWORD:
-		result = "REG_QWORD";
-		break;
-	default:
-		result = "REG TYPE IS UNKNOWN";
-		break;
-	}
-	return result;
-}
-
-WERROR reg_pull_multi_sz(TALLOC_CTX *mem_ctx, const void *buf, size_t len,
-			 uint32 *num_values, char ***values)
-{
-	const smb_ucs2_t *p = (const smb_ucs2_t *)buf;
-	*num_values = 0;
-
-	/*
-	 * Make sure that a talloc context for the strings retrieved exists
-	 */
-
-	if (!(*values = TALLOC_ARRAY(mem_ctx, char *, 1))) {
-		return WERR_NOMEM;
-	}
-
-	len /= 2; 		/* buf is a set of UCS2 strings */
-
-	while (len > 0) {
-		char *val;
-		size_t dstlen, thislen;
-
-		thislen = strnlen_w(p, len) + 1;
-		if (!convert_string_allocate(*values, CH_UTF16LE, CH_UNIX,
-			p, thislen*2, (void *)&val, &dstlen, true)) {
-			TALLOC_FREE(*values);
-			return WERR_NOMEM;
-		}
-
-		ADD_TO_ARRAY(*values, char *, val, values, num_values);
-		if (*values == NULL) {
-			return WERR_NOMEM;
-		}
-
-		p += thislen;
-		len -= thislen;
-	}
-
-	return WERR_OK;
-}

Deleted: branches/samba/upstream/source/lib/util_reg_api.c
===================================================================
--- branches/samba/upstream/source/lib/util_reg_api.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/util_reg_api.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,221 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * Registry helper routines
- * Copyright (C) Volker Lendecke 2006
- * 
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 3 of the License, or (at your option)
- * any later version.
- * 
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
- * more details.
- * 
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "includes.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_REGISTRY
-
-WERROR registry_pull_value(TALLOC_CTX *mem_ctx,
-			   struct registry_value **pvalue,
-			   enum winreg_Type type, uint8 *data,
-			   uint32 size, uint32 length)
-{
-	struct registry_value *value;
-	WERROR err;
-
-	if (!(value = TALLOC_ZERO_P(mem_ctx, struct registry_value))) {
-		return WERR_NOMEM;
-	}
-
-	value->type = type;
-
-	switch (type) {
-	case REG_DWORD:
-		if ((size != 4) || (length != 4)) {
-			err = WERR_INVALID_PARAM;
-			goto error;
-		}
-		value->v.dword = IVAL(data, 0);
-		break;
-	case REG_SZ:
-	case REG_EXPAND_SZ:
-	{
-		/*
-		 * Make sure we get a NULL terminated string for
-		 * convert_string_talloc().
-		 */
-
-		smb_ucs2_t *tmp;
-
-		if (length == 1) {
-			/* win2k regedit gives us a string of 1 byte when
-			 * creating a new value of type REG_SZ. this workaround
-			 * replaces the input by using the same string as
-			 * winxp delivers. */
-			length = 2;
-			if (!(tmp = SMB_MALLOC_ARRAY(smb_ucs2_t, 2))) {
-				err = WERR_NOMEM;
-				goto error;
-			}
-			tmp[0] = 0;
-			tmp[1] = 0;
-			DEBUG(10, ("got REG_SZ value of length 1 - workaround "
-				   "activated.\n"));
-		}
-		else if ((length % 2) != 0) {
-			err = WERR_INVALID_PARAM;
-			goto error;
-		}
-		else {
-			uint32 num_ucs2 = length / 2;
-			if (!(tmp = SMB_MALLOC_ARRAY(smb_ucs2_t, num_ucs2+1))) {
-				err = WERR_NOMEM;
-				goto error;
-			}
-
-			memcpy((void *)tmp, (const void *)data, length);
-			tmp[num_ucs2] = 0;
-		}
-
-		if (length + 2 < length) {
-			/* Integer wrap. */
-			SAFE_FREE(tmp);
-			err = WERR_INVALID_PARAM;
-			goto error;
-		}
-
-		value->v.sz.len = convert_string_talloc(
-			value, CH_UTF16LE, CH_UNIX, tmp, length+2,
-			&value->v.sz.str, False);
-
-		SAFE_FREE(tmp);
-
-		if (value->v.sz.len == (size_t)-1) {
-			err = WERR_INVALID_PARAM;
-			goto error;
-		}
-		break;
-	}
-	case REG_MULTI_SZ:
-		err = reg_pull_multi_sz(value, (void *)data, length,
-					&value->v.multi_sz.num_strings,
-					&value->v.multi_sz.strings);
-		if (!(W_ERROR_IS_OK(err))) {
-			goto error;
-		}
-		break;
-	case REG_BINARY:
-		value->v.binary = data_blob_talloc(mem_ctx, data, length);
-		break;
-	default:
-		err = WERR_INVALID_PARAM;
-		goto error;
-	}
-
-	*pvalue = value;
-	return WERR_OK;
-
- error:
-	TALLOC_FREE(value);
-	return err;
-}
-
-WERROR registry_push_value(TALLOC_CTX *mem_ctx,
-			   const struct registry_value *value,
-			   DATA_BLOB *presult)
-{
-	switch (value->type) {
-	case REG_DWORD: {
-		char buf[4];
-		SIVAL(buf, 0, value->v.dword);
-		*presult = data_blob_talloc(mem_ctx, (void *)buf, 4);
-		if (presult->data == NULL) {
-			return WERR_NOMEM;
-		}
-		break;
-	}
-	case REG_SZ:
-	case REG_EXPAND_SZ: {
-		presult->length = convert_string_talloc(
-			mem_ctx, CH_UNIX, CH_UTF16LE, value->v.sz.str,
-			MIN(value->v.sz.len, strlen(value->v.sz.str)+1),
-			(void *)&(presult->data), False);
-		if (presult->length == (size_t)-1) {
-			return WERR_NOMEM;
-		}
-		break;
-	}
-	case REG_MULTI_SZ: {
-		uint32_t count;
-		size_t len = 0;
-		char **strings;
-		size_t *string_lengths;
-		uint32_t ofs;
-		TALLOC_CTX *tmp_ctx = talloc_stackframe();
-
-		strings = TALLOC_ARRAY(tmp_ctx, char *,
-				       value->v.multi_sz.num_strings);
-		if (strings == NULL) {
-			return WERR_NOMEM;
-		}
-
-		string_lengths = TALLOC_ARRAY(tmp_ctx, size_t,
-					      value->v.multi_sz.num_strings);
-		if (string_lengths == NULL) {
-			TALLOC_FREE(tmp_ctx);
-			return WERR_NOMEM;
-		}
-
-		/* convert the single strings */
-		for (count = 0; count < value->v.multi_sz.num_strings; count++)
-		{
-			string_lengths[count] = convert_string_talloc(
-				strings, CH_UNIX, CH_UTF16LE,
-				value->v.multi_sz.strings[count],
-				strlen(value->v.multi_sz.strings[count])+1,
-				(void *)&strings[count], false);
-			if (string_lengths[count] == (size_t)-1) {
-				TALLOC_FREE(tmp_ctx);
-				return WERR_NOMEM;
-			}
-			len += string_lengths[count];
-		}
-
-		/* now concatenate all into the data blob */
-		presult->data = TALLOC_ARRAY(mem_ctx, uint8_t, len);
-		if (presult->data == NULL) {
-			TALLOC_FREE(tmp_ctx);
-			return WERR_NOMEM;
-		}
-		for (count = 0, ofs = 0;
-		     count < value->v.multi_sz.num_strings;
-		     count++)
-		{
-			memcpy(presult->data + ofs, strings[count],
-			       string_lengths[count]);
-			ofs += string_lengths[count];
-		}
-		presult->length = len;
-
-		TALLOC_FREE(tmp_ctx);
-
-		break;
-	}
-	case REG_BINARY:
-		*presult = data_blob_talloc(mem_ctx,
-					    value->v.binary.data,
-					    value->v.binary.length);
-		break;
-	default:
-		return WERR_INVALID_PARAM;
-	}
-
-	return WERR_OK;
-}

Modified: branches/samba/upstream/source/lib/util_seaccess.c
===================================================================
--- branches/samba/upstream/source/lib/util_seaccess.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/util_seaccess.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -87,7 +88,7 @@
  include other bits requested.
 **********************************************************************************/ 
 
-static bool get_max_access( SEC_ACL *the_acl, const NT_USER_TOKEN *token, uint32 *granted, 
+static BOOL get_max_access( SEC_ACL *the_acl, const NT_USER_TOKEN *token, uint32 *granted, 
 			    uint32 desired, 
 			    NTSTATUS *status)
 {
@@ -146,7 +147,7 @@
    objects.  Each type of object has its own mapping of generic to object
    specific access rights. */
 
-void se_map_generic(uint32 *access_mask, const struct generic_mapping *mapping)
+void se_map_generic(uint32 *access_mask, struct generic_mapping *mapping)
 {
 	uint32 old_mask = *access_mask;
 
@@ -209,12 +210,13 @@
  "Access-Checking" document in MSDN.
 *****************************************************************************/ 
 
-bool se_access_check(const SEC_DESC *sd, const NT_USER_TOKEN *token,
+BOOL se_access_check(const SEC_DESC *sd, const NT_USER_TOKEN *token,
 		     uint32 acc_desired, uint32 *acc_granted, 
 		     NTSTATUS *status)
 {
 	size_t i;
 	SEC_ACL *the_acl;
+	fstring sid_str;
 	uint32 tmp_acc_desired = acc_desired;
 
 	if (!status || !acc_granted)
@@ -226,10 +228,9 @@
 	*status = NT_STATUS_OK;
 	*acc_granted = 0;
 
-	DEBUG(10,("se_access_check: requested access 0x%08x, for NT token "
-		  "with %u entries and first sid %s.\n",
-		  (unsigned int)acc_desired, (unsigned int)token->num_sids,
-		  sid_string_dbg(&token->user_sids[0])));
+	DEBUG(10,("se_access_check: requested access 0x%08x, for NT token with %u entries and first sid %s.\n",
+		 (unsigned int)acc_desired, (unsigned int)token->num_sids,
+		sid_to_string(sid_str, &token->user_sids[0])));
 
 	/*
 	 * No security descriptor or security descriptor with no DACL
@@ -247,13 +248,11 @@
 
 	/* The user sid is the first in the token */
 	if (DEBUGLVL(3)) {
-		DEBUG(3, ("se_access_check: user sid is %s\n",
-			  sid_string_dbg(
-				  &token->user_sids[PRIMARY_USER_SID_INDEX])));
+		DEBUG(3, ("se_access_check: user sid is %s\n", sid_to_string(sid_str, &token->user_sids[PRIMARY_USER_SID_INDEX]) ));
 		
 		for (i = 1; i < token->num_sids; i++) {
 			DEBUGADD(3, ("se_access_check: also %s\n",
-				     sid_string_dbg(&token->user_sids[i])));
+				  sid_to_string(sid_str, &token->user_sids[i])));
 		}
 	}
 
@@ -284,12 +283,11 @@
 	for ( i = 0 ; i < the_acl->num_aces && tmp_acc_desired != 0; i++) {
 		SEC_ACE *ace = &the_acl->aces[i];
 
-		DEBUGADD(10,("se_access_check: ACE %u: type %d, flags = "
-			     "0x%02x, SID = %s mask = %x, current desired "
-			     "= %x\n", (unsigned int)i, ace->type, ace->flags,
-			     sid_string_dbg(&ace->trustee),
-			     (unsigned int) ace->access_mask,
-			     (unsigned int)tmp_acc_desired ));
+		DEBUGADD(10,("se_access_check: ACE %u: type %d, flags = 0x%02x, SID = %s mask = %x, current desired = %x\n",
+			  (unsigned int)i, ace->type, ace->flags,
+			  sid_to_string(sid_str, &ace->trustee),
+			  (unsigned int) ace->access_mask, 
+			  (unsigned int)tmp_acc_desired ));
 
 		tmp_acc_desired = check_ace( ace, token, tmp_acc_desired, status);
 		if (NT_STATUS_V(*status)) {
@@ -350,9 +348,7 @@
 	if ((psa = make_sec_acl(ctx, NT4_ACL_REVISION, 3, ace)) == NULL)
 		return NT_STATUS_NO_MEMORY;
 
-	if ((*psd = make_sec_desc(ctx, SECURITY_DESCRIPTOR_REVISION_1,
-				  SEC_DESC_SELF_RELATIVE, NULL, NULL, NULL,
-				  psa, sd_size)) == NULL)
+	if ((*psd = make_sec_desc(ctx, SEC_DESC_REVISION, SEC_DESC_SELF_RELATIVE, NULL, NULL, NULL, psa, sd_size)) == NULL)
 		return NT_STATUS_NO_MEMORY;
 
 	return NT_STATUS_OK;

Modified: branches/samba/upstream/source/lib/util_sec.c
===================================================================
--- branches/samba/upstream/source/lib/util_sec.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/util_sec.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef AUTOCONF_TEST
@@ -39,7 +40,7 @@
 
 #define DEBUG(x, y) printf y
 #define smb_panic(x) exit(1)
-#define bool int
+#define BOOL int
 #endif
 
 /* are we running as non-root? This is used by the regresison test code,
@@ -82,7 +83,7 @@
 /****************************************************************************
 are we running in non-root mode?
 ****************************************************************************/
-bool non_root_mode(void)
+BOOL non_root_mode(void)
 {
 	return (initial_uid != (uid_t)0);
 }
@@ -476,7 +477,7 @@
 /****************************************************************************
 Check if we are setuid root.  Used in libsmb and smbpasswd paranoia checks.
 ****************************************************************************/
-bool is_setuid_root(void) 
+BOOL is_setuid_root(void) 
 {
 	return (geteuid() == (uid_t)0) && (getuid() != (uid_t)0);
 }

Modified: branches/samba/upstream/source/lib/util_sid.c
===================================================================
--- branches/samba/upstream/source/lib/util_sid.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/util_sid.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,7 +10,7 @@
       
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -19,14 +19,14 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
 /*
- * Some useful sids, more well known sids can be found at
- * http://support.microsoft.com/kb/243330/EN-US/
+ * Some useful sids
  */
 
 
@@ -44,11 +44,6 @@
 { 1, 1, {0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
 const DOM_SID global_sid_Authenticated_Users =	/* All authenticated rids */
 { 1, 1, {0,0,0,0,0,5}, {11,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
-#if 0
-/* for documentation */
-const DOM_SID global_sid_Restriced =			/* Restriced Code */
-{ 1, 1, {0,0,0,0,0,5}, {12,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
-#endif
 const DOM_SID global_sid_Network =			/* Network rids */
 { 1, 1, {0,0,0,0,0,5}, {2,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
 
@@ -172,52 +167,52 @@
  Convert a SID to an ascii string.
 *****************************************************************/
 
-char *sid_to_fstring(fstring sidstr_out, const DOM_SID *sid)
+char *sid_to_string(fstring sidstr_out, const DOM_SID *sid)
 {
-	char *str = sid_string_talloc(talloc_tos(), sid);
-	fstrcpy(sidstr_out, str);
-	TALLOC_FREE(str);
-	return sidstr_out;
-}
+	char subauth[16];
+	int i;
+	uint32 ia;
+  
+	if (!sid) {
+		fstrcpy(sidstr_out, "(NULL SID)");
+		return sidstr_out;
+	}
 
-/*****************************************************************
- Essentially a renamed dom_sid_string from librpc/ndr with a
- panic if it didn't work
+	/*
+	 * BIG NOTE: this function only does SIDS where the identauth is not >= 2^32 
+	 * in a range of 2^48.
+	 */
+	ia = (sid->id_auth[5]) +
+		(sid->id_auth[4] << 8 ) +
+		(sid->id_auth[3] << 16) +
+		(sid->id_auth[2] << 24);
 
- This introduces a dependency on librpc/ndr/sid.o which can easily
- be turned around if necessary
-*****************************************************************/
+	slprintf(sidstr_out, sizeof(fstring) - 1, "S-%u-%lu", (unsigned int)sid->sid_rev_num, (unsigned long)ia);
 
-char *sid_string_talloc(TALLOC_CTX *mem_ctx, const DOM_SID *sid)
-{
-	char *result = dom_sid_string(mem_ctx, sid);
-	SMB_ASSERT(result != NULL);
-	return result;
+	for (i = 0; i < sid->num_auths; i++) {
+		slprintf(subauth, sizeof(subauth)-1, "-%lu", (unsigned long)sid->sub_auths[i]);
+		fstrcat(sidstr_out, subauth);
+	}
+
+	return sidstr_out;
 }
 
 /*****************************************************************
  Useful function for debug lines.
-*****************************************************************/
+*****************************************************************/  
 
-char *sid_string_dbg(const DOM_SID *sid)
+const char *sid_string_static(const DOM_SID *sid)
 {
-	return sid_string_talloc(debug_ctx(), sid);
+	static fstring sid_str;
+	sid_to_string(sid_str, sid);
+	return sid_str;
 }
 
 /*****************************************************************
- Use with care!
-*****************************************************************/
-
-char *sid_string_tos(const DOM_SID *sid)
-{
-	return sid_string_talloc(talloc_tos(), sid);
-}
-
-/*****************************************************************
  Convert a string to a SID. Returns True on success, False on fail.
 *****************************************************************/  
    
-bool string_to_sid(DOM_SID *sidout, const char *sidstr)
+BOOL string_to_sid(DOM_SID *sidout, const char *sidstr)
 {
 	const char *p;
 	char *q;
@@ -288,7 +283,7 @@
  Add a rid to the end of a sid
 *****************************************************************/  
 
-bool sid_append_rid(DOM_SID *sid, uint32 rid)
+BOOL sid_append_rid(DOM_SID *sid, uint32 rid)
 {
 	if (sid->num_auths < MAXSUBAUTHS) {
 		sid->sub_auths[sid->num_auths++] = rid;
@@ -297,7 +292,7 @@
 	return False;
 }
 
-bool sid_compose(DOM_SID *dst, const DOM_SID *domain_sid, uint32 rid)
+BOOL sid_compose(DOM_SID *dst, const DOM_SID *domain_sid, uint32 rid)
 {
 	sid_copy(dst, domain_sid);
 	return sid_append_rid(dst, rid);
@@ -307,7 +302,7 @@
  Removes the last rid from the end of a sid
 *****************************************************************/  
 
-bool sid_split_rid(DOM_SID *sid, uint32 *rid)
+BOOL sid_split_rid(DOM_SID *sid, uint32 *rid)
 {
 	if (sid->num_auths > 0) {
 		sid->num_auths--;
@@ -321,7 +316,7 @@
  Return the last rid from the end of a sid
 *****************************************************************/  
 
-bool sid_peek_rid(const DOM_SID *sid, uint32 *rid)
+BOOL sid_peek_rid(const DOM_SID *sid, uint32 *rid)
 {
 	if (!sid || !rid)
 		return False;		
@@ -338,7 +333,7 @@
  and check the sid against the exp_dom_sid  
 *****************************************************************/  
 
-bool sid_peek_check_rid(const DOM_SID *exp_dom_sid, const DOM_SID *sid, uint32 *rid)
+BOOL sid_peek_check_rid(const DOM_SID *exp_dom_sid, const DOM_SID *sid, uint32 *rid)
 {
 	if (!exp_dom_sid || !sid || !rid)
 		return False;
@@ -378,11 +373,11 @@
  Write a sid out into on-the-wire format.
 *****************************************************************/  
 
-bool sid_linearize(char *outbuf, size_t len, const DOM_SID *sid)
+BOOL sid_linearize(char *outbuf, size_t len, const DOM_SID *sid)
 {
 	size_t i;
 
-	if (len < ndr_size_dom_sid(sid, 0))
+	if (len < sid_size(sid))
 		return False;
 
 	SCVAL(outbuf,0,sid->sid_rev_num);
@@ -398,7 +393,7 @@
  Parse a on-the-wire SID to a DOM_SID.
 *****************************************************************/  
 
-bool sid_parse(const char *inbuf, size_t len, DOM_SID *sid)
+BOOL sid_parse(const char *inbuf, size_t len, DOM_SID *sid)
 {
 	int i;
 	if (len < 8)
@@ -489,16 +484,28 @@
  Compare two sids.
 *****************************************************************/  
 
-bool sid_equal(const DOM_SID *sid1, const DOM_SID *sid2)
+BOOL sid_equal(const DOM_SID *sid1, const DOM_SID *sid2)
 {
 	return sid_compare(sid1, sid2) == 0;
 }
 
 /*****************************************************************
+ Calculates size of a sid.
+*****************************************************************/  
+
+size_t sid_size(const DOM_SID *sid)
+{
+	if (sid == NULL)
+		return 0;
+
+	return sid->num_auths * sizeof(uint32) + 8;
+}
+
+/*****************************************************************
  Returns true if SID is internal (and non-mappable).
 *****************************************************************/
 
-bool non_mappable_sid(DOM_SID *sid)
+BOOL non_mappable_sid(DOM_SID *sid)
 {
 	DOM_SID dom;
 	uint32 rid;
@@ -523,7 +530,7 @@
 char *sid_binstring(const DOM_SID *sid)
 {
 	char *buf, *s;
-	int len = ndr_size_dom_sid(sid, 0);
+	int len = sid_size(sid);
 	buf = (char *)SMB_MALLOC(len);
 	if (!buf)
 		return NULL;
@@ -541,7 +548,7 @@
 char *sid_binstring_hex(const DOM_SID *sid)
 {
 	char *buf, *s;
-	int len = ndr_size_dom_sid(sid, 0);
+	int len = sid_size(sid);
 	buf = (char *)SMB_MALLOC(len);
 	if (!buf)
 		return NULL;
@@ -573,20 +580,20 @@
  Add SID to an array SIDs
 ********************************************************************/
 
-NTSTATUS add_sid_to_array(TALLOC_CTX *mem_ctx, const DOM_SID *sid,
-			  DOM_SID **sids, size_t *num)
+BOOL add_sid_to_array(TALLOC_CTX *mem_ctx, const DOM_SID *sid, 
+		      DOM_SID **sids, size_t *num)
 {
 	*sids = TALLOC_REALLOC_ARRAY(mem_ctx, *sids, DOM_SID,
 					     (*num)+1);
 	if (*sids == NULL) {
 		*num = 0;
-		return NT_STATUS_NO_MEMORY;
+		return False;
 	}
 
 	sid_copy(&((*sids)[*num]), sid);
 	*num += 1;
 
-	return NT_STATUS_OK;
+	return True;
 }
 
 
@@ -594,14 +601,14 @@
  Add SID to an array SIDs ensuring that it is not already there
 ********************************************************************/
 
-NTSTATUS add_sid_to_array_unique(TALLOC_CTX *mem_ctx, const DOM_SID *sid,
-				 DOM_SID **sids, size_t *num_sids)
+BOOL add_sid_to_array_unique(TALLOC_CTX *mem_ctx, const DOM_SID *sid,
+			     DOM_SID **sids, size_t *num_sids)
 {
 	size_t i;
 
 	for (i=0; i<(*num_sids); i++) {
 		if (sid_compare(sid, &(*sids)[i]) == 0)
-			return NT_STATUS_OK;
+			return True;
 	}
 
 	return add_sid_to_array(mem_ctx, sid, sids, num_sids);
@@ -636,7 +643,7 @@
 	return;
 }
 
-bool add_rid_to_array_unique(TALLOC_CTX *mem_ctx,
+BOOL add_rid_to_array_unique(TALLOC_CTX *mem_ctx,
 				    uint32 rid, uint32 **pp_rids, size_t *p_num)
 {
 	size_t i;
@@ -658,94 +665,8 @@
 	return True;
 }
 
-bool is_null_sid(const DOM_SID *sid)
+BOOL is_null_sid(const DOM_SID *sid)
 {
 	static const DOM_SID null_sid = {0};
 	return sid_equal(sid, &null_sid);
 }
-
-NTSTATUS sid_array_from_info3(TALLOC_CTX *mem_ctx,
-			      const struct netr_SamInfo3 *info3,
-			      DOM_SID **user_sids,
-			      size_t *num_user_sids,
-			      bool include_user_group_rid,
-			      bool skip_ressource_groups)
-{
-	NTSTATUS status;
-	DOM_SID sid;
-	DOM_SID *sid_array = NULL;
-	size_t num_sids = 0;
-	int i;
-
-	if (include_user_group_rid) {
-
-		if (!sid_compose(&sid, info3->base.domain_sid, info3->base.rid))
-		{
-			DEBUG(3, ("could not compose user SID from rid 0x%x\n",
-				  info3->base.rid));
-			return NT_STATUS_INVALID_PARAMETER;
-		}
-		status = add_sid_to_array(mem_ctx, &sid, &sid_array, &num_sids);
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(3, ("could not append user SID from rid 0x%x\n",
-				  info3->base.rid));
-			return status;
-		}
-
-		if (!sid_compose(&sid, info3->base.domain_sid, info3->base.primary_gid))
-		{
-			DEBUG(3, ("could not compose group SID from rid 0x%x\n",
-				  info3->base.primary_gid));
-			return NT_STATUS_INVALID_PARAMETER;
-		}
-		status = add_sid_to_array(mem_ctx, &sid, &sid_array, &num_sids);
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(3, ("could not append group SID from rid 0x%x\n",
-				  info3->base.rid));
-			return status;
-		}
-	}
-
-	for (i = 0; i < info3->base.groups.count; i++) {
-		if (!sid_compose(&sid, info3->base.domain_sid,
-				 info3->base.groups.rids[i].rid))
-		{
-			DEBUG(3, ("could not compose SID from additional group "
-				  "rid 0x%x\n", info3->base.groups.rids[i].rid));
-			return NT_STATUS_INVALID_PARAMETER;
-		}
-		status = add_sid_to_array(mem_ctx, &sid, &sid_array, &num_sids);
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(3, ("could not append SID from additional group "
-				  "rid 0x%x\n", info3->base.groups.rids[i].rid));
-			return status;
-		}
-	}
-
-	/* Copy 'other' sids.  We need to do sid filtering here to
- 	   prevent possible elevation of privileges.  See:
-
-           http://www.microsoft.com/windows2000/techinfo/administration/security/sidfilter.asp
-         */
-
-	for (i = 0; i < info3->sidcount; i++) {
-
-		if (skip_ressource_groups &&
-		    (info3->sids[i].attributes & SE_GROUP_RESOURCE)) {
-			continue;
-		}
-
-		status = add_sid_to_array(mem_ctx, info3->sids[i].sid,
-				      &sid_array, &num_sids);
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(3, ("could not add SID to array: %s\n",
-				  sid_string_dbg(info3->sids[i].sid)));
-			return status;
-		}
-	}
-
-	*user_sids = sid_array;
-	*num_user_sids = num_sids;
-
-	return NT_STATUS_OK;
-}

Modified: branches/samba/upstream/source/lib/util_sock.c
===================================================================
--- branches/samba/upstream/source/lib/util_sock.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/util_sock.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,697 +1,126 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    Samba utility functions
    Copyright (C) Andrew Tridgell 1992-1998
    Copyright (C) Tim Potter      2000-2001
-   Copyright (C) Jeremy Allison  1992-2007
-
+   Copyright (C) Jeremy Allison  1992-2005
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
-/****************************************************************************
- Return true if a string could be an IPv4 address.
-****************************************************************************/
+/* the following 3 client_*() functions are nasty ways of allowing
+   some generic functions to get info that really should be hidden in
+   particular modules */
+static int client_fd = -1;
+/* What to print out on a client disconnect error. */
+static char client_ip_string[16];
 
-bool is_ipaddress_v4(const char *str)
+void client_setfd(int fd)
 {
-	int ret = -1;
-	struct in_addr dest;
-
-	ret = inet_pton(AF_INET, str, &dest);
-	if (ret > 0) {
-		return true;
-	}
-	return false;
+	client_fd = fd;
+	safe_strcpy(client_ip_string, get_peer_addr(client_fd), sizeof(client_ip_string)-1);
 }
 
-/****************************************************************************
- Return true if a string could be an IPv4 or IPv6 address.
-****************************************************************************/
-
-bool is_ipaddress(const char *str)
+static char *get_socket_addr(int fd)
 {
-	int ret = -1;
-
-#if defined(HAVE_IPV6)
-	if (strchr_m(str, ':')) {
-		char addr[INET6_ADDRSTRLEN];
-		struct in6_addr dest6;
-		const char *sp = str;
-		char *p = strchr_m(str, '%');
-
-		/*
-		 * Cope with link-local.
-		 * This is IP:v6:addr%ifname.
-		 */
-
-		if (p && (p > str) && (if_nametoindex(p+1) != 0)) {
-			strlcpy(addr, str,
-				MIN(PTR_DIFF(p,str)+1,
-					sizeof(addr)));
-			sp = addr;
-		}
-		ret = inet_pton(AF_INET6, sp, &dest6);
-		if (ret > 0) {
-			return true;
-		}
-	}
-#endif
-	return is_ipaddress_v4(str);
-}
-
-/****************************************************************************
- Is a sockaddr_storage a broadcast address ?
-****************************************************************************/
-
-bool is_broadcast_addr(const struct sockaddr_storage *pss)
-{
-#if defined(HAVE_IPV6)
-	if (pss->ss_family == AF_INET6) {
-		const struct in6_addr *sin6 =
-			&((const struct sockaddr_in6 *)pss)->sin6_addr;
-		return IN6_IS_ADDR_MULTICAST(sin6);
-	}
-#endif
-	if (pss->ss_family == AF_INET) {
-		uint32_t addr =
-		ntohl(((const struct sockaddr_in *)pss)->sin_addr.s_addr);
-		return addr == INADDR_BROADCAST;
-	}
-	return false;
-}
-
-/*******************************************************************
- Wrap getaddrinfo...
-******************************************************************/
-
-static bool interpret_string_addr_internal(struct addrinfo **ppres,
-					const char *str, int flags)
-{
-	int ret;
-	struct addrinfo hints;
-
-	memset(&hints, '\0', sizeof(hints));
-	/* By default make sure it supports TCP. */
-	hints.ai_socktype = SOCK_STREAM;
-	hints.ai_flags = flags;
-
-	/* Linux man page on getaddinfo() says port will be
-	   uninitialized when service string in NULL */
-
-	ret = getaddrinfo(str, NULL,
-			&hints,
-			ppres);
-
-	if (ret) {
-		DEBUG(3,("interpret_string_addr_internal: getaddrinfo failed "
-			"for name %s [%s]\n",
-			str,
-			gai_strerror(ret) ));
-		return false;
-	}
-	return true;
-}
-
-/****************************************************************************
- Interpret an internet address or name into an IP address in 4 byte form.
- RETURNS IN NETWORK BYTE ORDER (big endian).
-****************************************************************************/
-
-uint32 interpret_addr(const char *str)
-{
-	uint32 ret;
-
-	/* If it's in the form of an IP address then
-	 * get the lib to interpret it */
-	if (is_ipaddress_v4(str)) {
-		struct in_addr dest;
-
-		if (inet_pton(AF_INET, str, &dest) <= 0) {
-			/* Error - this shouldn't happen ! */
-			DEBUG(0,("interpret_addr: inet_pton failed "
-				"host %s\n",
-				str));
-			return 0;
-		}
-		ret = dest.s_addr; /* NETWORK BYTE ORDER ! */
-	} else {
-		/* Otherwise assume it's a network name of some sort and use
-			getadddrinfo. */
-		struct addrinfo *res = NULL;
-		struct addrinfo *res_list = NULL;
-		if (!interpret_string_addr_internal(&res_list,
-					str,
-					AI_ADDRCONFIG)) {
-			DEBUG(3,("interpret_addr: Unknown host. %s\n",str));
-			return 0;
-		}
-
-		/* Find the first IPv4 address. */
-		for (res = res_list; res; res = res->ai_next) {
-			if (res->ai_family != AF_INET) {
-				continue;
-			}
-			if (res->ai_addr == NULL) {
-				continue;
-			}
-			break;
-		}
-		if(res == NULL) {
-			DEBUG(3,("interpret_addr: host address is "
-				"invalid for host %s\n",str));
-			if (res_list) {
-				freeaddrinfo(res_list);
-			}
-			return 0;
-		}
-		putip((char *)&ret,
-			&((struct sockaddr_in *)res->ai_addr)->sin_addr.s_addr);
-		if (res_list) {
-			freeaddrinfo(res_list);
-		}
-	}
-
-	/* This is so bogus - all callers need fixing... JRA. */
-	if (ret == (uint32)-1) {
-		return 0;
-	}
-
-	return ret;
-}
-
-/*******************************************************************
- A convenient addition to interpret_addr().
-******************************************************************/
-
-struct in_addr *interpret_addr2(struct in_addr *ip, const char *str)
-{
-	uint32 a = interpret_addr(str);
-	ip->s_addr = a;
-	return ip;
-}
-
-/*******************************************************************
- Map a text hostname or IP address (IPv4 or IPv6) into a
- struct sockaddr_storage.
-******************************************************************/
-
-bool interpret_string_addr(struct sockaddr_storage *pss,
-		const char *str,
-		int flags)
-{
-	char addr[INET6_ADDRSTRLEN];
-	struct addrinfo *res = NULL;
-#if defined(HAVE_IPV6)
-	unsigned int scope_id = 0;
-
-	if (strchr_m(str, ':')) {
-		char *p = strchr_m(str, '%');
-
-		/*
-		 * Cope with link-local.
-		 * This is IP:v6:addr%ifname.
-		 */
-
-		if (p && (p > str) && ((scope_id = if_nametoindex(p+1)) != 0)) {
-			strlcpy(addr, str,
-				MIN(PTR_DIFF(p,str)+1,
-					sizeof(addr)));
-			str = addr;
-		}
-	}
-#endif
-
-	zero_addr(pss);
-
-	if (!interpret_string_addr_internal(&res, str, flags|AI_ADDRCONFIG)) {
-		return false;
-	}
-	if (!res) {
-		return false;
-	}
-	/* Copy the first sockaddr. */
-	memcpy(pss, res->ai_addr, res->ai_addrlen);
-
-#if defined(HAVE_IPV6)
-	if (pss->ss_family == AF_INET6 && scope_id) {
-		struct sockaddr_in6 *ps6 = (struct sockaddr_in6 *)pss;
-		if (IN6_IS_ADDR_LINKLOCAL(&ps6->sin6_addr) &&
-				ps6->sin6_scope_id == 0) {
-			ps6->sin6_scope_id = scope_id;
-		}
-	}
-#endif
-
-	freeaddrinfo(res);
-	return true;
-}
-
-/*******************************************************************
- Check if an IPv7 is 127.0.0.1
-******************************************************************/
-
-bool is_loopback_ip_v4(struct in_addr ip)
-{
-	struct in_addr a;
-	a.s_addr = htonl(INADDR_LOOPBACK);
-	return(ip.s_addr == a.s_addr);
-}
-
-/*******************************************************************
- Check if a struct sockaddr_storage is the loopback address.
-******************************************************************/
-
-bool is_loopback_addr(const struct sockaddr_storage *pss)
-{
-#if defined(HAVE_IPV6)
-	if (pss->ss_family == AF_INET6) {
-		struct in6_addr *pin6 =
-			&((struct sockaddr_in6 *)pss)->sin6_addr;
-		return IN6_IS_ADDR_LOOPBACK(pin6);
-	}
-#endif
-	if (pss->ss_family == AF_INET) {
-		struct in_addr *pin = &((struct sockaddr_in *)pss)->sin_addr;
-		return is_loopback_ip_v4(*pin);
-	}
-	return false;
-}
-
-/*******************************************************************
- Check if an IPv4 is 0.0.0.0.
-******************************************************************/
-
-bool is_zero_ip_v4(struct in_addr ip)
-{
-	uint32 a;
-	putip((char *)&a,(char *)&ip);
-	return(a == 0);
-}
-
-/*******************************************************************
- Check if a struct sockaddr_storage has an unspecified address.
-******************************************************************/
-
-bool is_zero_addr(const struct sockaddr_storage *pss)
-{
-#if defined(HAVE_IPV6)
-	if (pss->ss_family == AF_INET6) {
-		struct in6_addr *pin6 =
-			&((struct sockaddr_in6 *)pss)->sin6_addr;
-		return IN6_IS_ADDR_UNSPECIFIED(pin6);
-	}
-#endif
-	if (pss->ss_family == AF_INET) {
-		struct in_addr *pin = &((struct sockaddr_in *)pss)->sin_addr;
-		return is_zero_ip_v4(*pin);
-	}
-	return false;
-}
-
-/*******************************************************************
- Set an IP to 0.0.0.0.
-******************************************************************/
-
-void zero_ip_v4(struct in_addr *ip)
-{
-	memset(ip, '\0', sizeof(struct in_addr));
-}
-
-/*******************************************************************
- Set an address to INADDR_ANY.
-******************************************************************/
-
-void zero_addr(struct sockaddr_storage *pss)
-{
-	memset(pss, '\0', sizeof(*pss));
-	/* Ensure we're at least a valid sockaddr-storage. */
-	pss->ss_family = AF_INET;
-}
-
-/*******************************************************************
- Are two IPs on the same subnet - IPv4 version ?
-********************************************************************/
-
-bool same_net_v4(struct in_addr ip1,struct in_addr ip2,struct in_addr mask)
-{
-	uint32 net1,net2,nmask;
-
-	nmask = ntohl(mask.s_addr);
-	net1  = ntohl(ip1.s_addr);
-	net2  = ntohl(ip2.s_addr);
-
-	return((net1 & nmask) == (net2 & nmask));
-}
-
-/*******************************************************************
- Convert an IPv4 struct in_addr to a struct sockaddr_storage.
-********************************************************************/
-
-void in_addr_to_sockaddr_storage(struct sockaddr_storage *ss,
-		struct in_addr ip)
-{
-	struct sockaddr_in *sa = (struct sockaddr_in *)ss;
-	memset(ss, '\0', sizeof(*ss));
-	ss->ss_family = AF_INET;
-	sa->sin_addr = ip;
-}
-
-#if defined(HAVE_IPV6)
-/*******************************************************************
- Convert an IPv6 struct in_addr to a struct sockaddr_storage.
-********************************************************************/
-
- void in6_addr_to_sockaddr_storage(struct sockaddr_storage *ss,
-		struct in6_addr ip)
-{
-	struct sockaddr_in6 *sa = (struct sockaddr_in6 *)ss;
-	memset(ss, '\0', sizeof(*ss));
-	ss->ss_family = AF_INET6;
-	sa->sin6_addr = ip;
-}
-#endif
-
-/*******************************************************************
- Are two IPs on the same subnet?
-********************************************************************/
-
-bool same_net(const struct sockaddr_storage *ip1,
-		const struct sockaddr_storage *ip2,
-		const struct sockaddr_storage *mask)
-{
-	if (ip1->ss_family != ip2->ss_family) {
-		/* Never on the same net. */
-		return false;
-	}
-
-#if defined(HAVE_IPV6)
-	if (ip1->ss_family == AF_INET6) {
-		struct sockaddr_in6 ip1_6 = *(struct sockaddr_in6 *)ip1;
-		struct sockaddr_in6 ip2_6 = *(struct sockaddr_in6 *)ip2;
-		struct sockaddr_in6 mask_6 = *(struct sockaddr_in6 *)mask;
-		char *p1 = (char *)&ip1_6.sin6_addr;
-		char *p2 = (char *)&ip2_6.sin6_addr;
-		char *m = (char *)&mask_6.sin6_addr;
-		int i;
-
-		for (i = 0; i < sizeof(struct in6_addr); i++) {
-			*p1++ &= *m;
-			*p2++ &= *m;
-			m++;
-		}
-		return (memcmp(&ip1_6.sin6_addr,
-				&ip2_6.sin6_addr,
-				sizeof(struct in6_addr)) == 0);
-	}
-#endif
-	if (ip1->ss_family == AF_INET) {
-		return same_net_v4(((const struct sockaddr_in *)ip1)->sin_addr,
-				((const struct sockaddr_in *)ip2)->sin_addr,
-				((const struct sockaddr_in *)mask)->sin_addr);
-	}
-	return false;
-}
-
-/*******************************************************************
- Are two sockaddr_storage's the same family and address ? Ignore port etc.
-********************************************************************/
-
-bool addr_equal(const struct sockaddr_storage *ip1,
-		const struct sockaddr_storage *ip2)
-{
-	if (ip1->ss_family != ip2->ss_family) {
-		/* Never the same. */
-		return false;
-	}
-
-#if defined(HAVE_IPV6)
-	if (ip1->ss_family == AF_INET6) {
-		return (memcmp(&((const struct sockaddr_in6 *)ip1)->sin6_addr,
-				&((const struct sockaddr_in6 *)ip2)->sin6_addr,
-				sizeof(struct in6_addr)) == 0);
-	}
-#endif
-	if (ip1->ss_family == AF_INET) {
-		return (memcmp(&((const struct sockaddr_in *)ip1)->sin_addr,
-				&((const struct sockaddr_in *)ip2)->sin_addr,
-				sizeof(struct in_addr)) == 0);
-	}
-	return false;
-}
-
-/****************************************************************************
- Is an IP address the INADDR_ANY or in6addr_any value ?
-****************************************************************************/
-
-bool is_address_any(const struct sockaddr_storage *psa)
-{
-#if defined(HAVE_IPV6)
-	if (psa->ss_family == AF_INET6) {
-		struct sockaddr_in6 *si6 = (struct sockaddr_in6 *)psa;
-		if (memcmp(&in6addr_any,
-				&si6->sin6_addr,
-				sizeof(in6addr_any)) == 0) {
-			return true;
-		}
-		return false;
-	}
-#endif
-	if (psa->ss_family == AF_INET) {
-		struct sockaddr_in *si = (struct sockaddr_in *)psa;
-		if (si->sin_addr.s_addr == INADDR_ANY) {
-			return true;
-		}
-		return false;
-	}
-	return false;
-}
-
-/****************************************************************************
- Get a port number in host byte order from a sockaddr_storage.
-****************************************************************************/
-
-uint16_t get_sockaddr_port(const struct sockaddr_storage *pss)
-{
-	uint16_t port = 0;
-
-	if (pss->ss_family != AF_INET) {
-#if defined(HAVE_IPV6)
-		/* IPv6 */
-		const struct sockaddr_in6 *sa6 =
-			(const struct sockaddr_in6 *)pss;
-		port = ntohs(sa6->sin6_port);
-#endif
-	} else {
-		const struct sockaddr_in *sa =
-			(const struct sockaddr_in *)pss;
-		port = ntohs(sa->sin_port);
-	}
-	return port;
-}
-
-/****************************************************************************
- Print out an IPv4 or IPv6 address from a struct sockaddr_storage.
-****************************************************************************/
-
-static char *print_sockaddr_len(char *dest,
-			size_t destlen,
-			const struct sockaddr_storage *psa,
-			socklen_t psalen)
-{
-	if (destlen > 0) {
-		dest[0] = '\0';
-	}
-	(void)sys_getnameinfo((const struct sockaddr *)psa,
-			psalen,
-			dest, destlen,
-			NULL, 0,
-			NI_NUMERICHOST);
-	return dest;
-}
-
-/****************************************************************************
- Print out an IPv4 or IPv6 address from a struct sockaddr_storage.
-****************************************************************************/
-
-char *print_sockaddr(char *dest,
-			size_t destlen,
-			const struct sockaddr_storage *psa)
-{
-	return print_sockaddr_len(dest, destlen, psa,
-			sizeof(struct sockaddr_storage));
-}
-
-/****************************************************************************
- Print out a canonical IPv4 or IPv6 address from a struct sockaddr_storage.
-****************************************************************************/
-
-char *print_canonical_sockaddr(TALLOC_CTX *ctx,
-			const struct sockaddr_storage *pss)
-{
-	char addr[INET6_ADDRSTRLEN];
-	char *dest = NULL;
-	int ret;
-
-	/* Linux getnameinfo() man pages says port is unitialized if
-	   service name is NULL. */
-
-	ret = sys_getnameinfo((const struct sockaddr *)pss,
-			sizeof(struct sockaddr_storage),
-			addr, sizeof(addr),
-			NULL, 0,
-			NI_NUMERICHOST);
-	if (ret != 0) {
-		return NULL;
-	}
-
-	if (pss->ss_family != AF_INET) {
-#if defined(HAVE_IPV6)
-		dest = talloc_asprintf(ctx, "[%s]", addr);
-#else
-		return NULL;
-#endif
-	} else {
-		dest = talloc_asprintf(ctx, "%s", addr);
-	}
-	
-	return dest;
-}
-
-/****************************************************************************
- Return the string of an IP address (IPv4 or IPv6).
-****************************************************************************/
-
-static const char *get_socket_addr(int fd, char *addr_buf, size_t addr_len)
-{
-	struct sockaddr_storage sa;
+	struct sockaddr sa;
+	struct sockaddr_in *sockin = (struct sockaddr_in *) (&sa);
 	socklen_t length = sizeof(sa);
+	static fstring addr_buf;
 
-	/* Ok, returning a hard coded IPv4 address
- 	 * is bogus, but it's just as bogus as a
- 	 * zero IPv6 address. No good choice here.
- 	 */
+	fstrcpy(addr_buf,"0.0.0.0");
 
-	strlcpy(addr_buf, "0.0.0.0", addr_len);
-
 	if (fd == -1) {
 		return addr_buf;
 	}
-
-	if (getsockname(fd, (struct sockaddr *)&sa, &length) < 0) {
-		DEBUG(0,("getsockname failed. Error was %s\n",
-			strerror(errno) ));
+	
+	if (getsockname(fd, &sa, &length) < 0) {
+		DEBUG(0,("getsockname failed. Error was %s\n", strerror(errno) ));
 		return addr_buf;
 	}
-
-	return print_sockaddr_len(addr_buf, addr_len, &sa, length);
+	
+	fstrcpy(addr_buf,(char *)inet_ntoa(sockin->sin_addr));
+	
+	return addr_buf;
 }
 
-#if 0
-/* Not currently used. JRA. */
-/****************************************************************************
- Return the port number we've bound to on a socket.
-****************************************************************************/
-
 static int get_socket_port(int fd)
 {
-	struct sockaddr_storage sa;
+	struct sockaddr sa;
+	struct sockaddr_in *sockin = (struct sockaddr_in *) (&sa);
 	socklen_t length = sizeof(sa);
 
-	if (fd == -1) {
+	if (fd == -1)
 		return -1;
-	}
-
-	if (getsockname(fd, (struct sockaddr *)&sa, &length) < 0) {
-		DEBUG(0,("getpeername failed. Error was %s\n",
-			strerror(errno) ));
+	
+	if (getsockname(fd, &sa, &length) < 0) {
+		DEBUG(0,("getpeername failed. Error was %s\n", strerror(errno) ));
 		return -1;
 	}
-
-#if defined(HAVE_IPV6)
-	if (sa.ss_family == AF_INET6) {
-		return ntohs(((struct sockaddr_in6 *)&sa)->sin6_port);
-	}
-#endif
-	if (sa.ss_family == AF_INET) {
-		return ntohs(((struct sockaddr_in *)&sa)->sin_port);
-	}
-	return -1;
+	
+	return ntohs(sockin->sin_port);
 }
-#endif
 
-void set_sockaddr_port(struct sockaddr_storage *psa, uint16 port)
+char *client_name(void)
 {
-#if defined(HAVE_IPV6)
-	if (psa->ss_family == AF_INET6) {
-		((struct sockaddr_in6 *)psa)->sin6_port = htons(port);
-	}
-#endif
-	if (psa->ss_family == AF_INET) {
-		((struct sockaddr_in *)psa)->sin_port = htons(port);
-	}
+	return get_peer_name(client_fd,False);
 }
 
-const char *client_name(int fd)
+char *client_addr(void)
 {
-	return get_peer_name(fd,false);
+	return get_peer_addr(client_fd);
 }
 
-const char *client_addr(int fd, char *addr, size_t addrlen)
+char *client_socket_addr(void)
 {
-	return get_peer_addr(fd,addr,addrlen);
+	return get_socket_addr(client_fd);
 }
 
-const char *client_socket_addr(int fd, char *addr, size_t addr_len)
+int client_socket_port(void)
 {
-	return get_socket_addr(fd, addr, addr_len);
+	return get_socket_port(client_fd);
 }
 
-#if 0
-/* Not currently used. JRA. */
-int client_socket_port(int fd)
+struct in_addr *client_inaddr(struct sockaddr *sa)
 {
-	return get_socket_port(fd);
+	struct sockaddr_in *sockin = (struct sockaddr_in *) (sa);
+	socklen_t  length = sizeof(*sa);
+	
+	if (getpeername(client_fd, sa, &length) < 0) {
+		DEBUG(0,("getpeername failed. Error was %s\n", strerror(errno) ));
+		return NULL;
+	}
+	
+	return &sockin->sin_addr;
 }
-#endif
 
-/****************************************************************************
- Accessor functions to make thread-safe code easier later...
-****************************************************************************/
+/* the last IP received from */
+struct in_addr lastip;
 
-void set_smb_read_error(enum smb_read_errors *pre,
-			enum smb_read_errors newerr)
-{
-	if (pre) {
-		*pre = newerr;
-	}
-}
+/* the last port received from */
+int lastport=0;
 
-void cond_set_smb_read_error(enum smb_read_errors *pre,
-			enum smb_read_errors newerr)
-{
-	if (pre && *pre == SMB_READ_OK) {
-		*pre = newerr;
-	}
-}
+int smb_read_error = 0;
 
 /****************************************************************************
  Determine if a file descriptor is in fact a socket.
 ****************************************************************************/
 
-bool is_a_socket(int fd)
+BOOL is_a_socket(int fd)
 {
 	int v;
 	socklen_t l;
@@ -710,50 +139,50 @@
 } smb_socket_option;
 
 static const smb_socket_option socket_options[] = {
-  {"SO_KEEPALIVE", SOL_SOCKET, SO_KEEPALIVE, 0, OPT_BOOL},
-  {"SO_REUSEADDR", SOL_SOCKET, SO_REUSEADDR, 0, OPT_BOOL},
-  {"SO_BROADCAST", SOL_SOCKET, SO_BROADCAST, 0, OPT_BOOL},
+  {"SO_KEEPALIVE",      SOL_SOCKET,    SO_KEEPALIVE,    0,                 OPT_BOOL},
+  {"SO_REUSEADDR",      SOL_SOCKET,    SO_REUSEADDR,    0,                 OPT_BOOL},
+  {"SO_BROADCAST",      SOL_SOCKET,    SO_BROADCAST,    0,                 OPT_BOOL},
 #ifdef TCP_NODELAY
-  {"TCP_NODELAY", IPPROTO_TCP, TCP_NODELAY, 0, OPT_BOOL},
+  {"TCP_NODELAY",       IPPROTO_TCP,   TCP_NODELAY,     0,                 OPT_BOOL},
 #endif
 #ifdef TCP_KEEPCNT
-  {"TCP_KEEPCNT", IPPROTO_TCP, TCP_KEEPCNT, 0, OPT_INT},
+  {"TCP_KEEPCNT",       IPPROTO_TCP,   TCP_KEEPCNT,     0,                 OPT_INT},
 #endif
 #ifdef TCP_KEEPIDLE
-  {"TCP_KEEPIDLE", IPPROTO_TCP, TCP_KEEPIDLE, 0, OPT_INT},
+  {"TCP_KEEPIDLE",      IPPROTO_TCP,   TCP_KEEPIDLE,    0,                 OPT_INT},
 #endif
 #ifdef TCP_KEEPINTVL
-  {"TCP_KEEPINTVL", IPPROTO_TCP, TCP_KEEPINTVL, 0, OPT_INT},
+  {"TCP_KEEPINTVL",     IPPROTO_TCP,   TCP_KEEPINTVL,   0,                 OPT_INT},
 #endif
 #ifdef IPTOS_LOWDELAY
-  {"IPTOS_LOWDELAY", IPPROTO_IP, IP_TOS, IPTOS_LOWDELAY, OPT_ON},
+  {"IPTOS_LOWDELAY",    IPPROTO_IP,    IP_TOS,          IPTOS_LOWDELAY,    OPT_ON},
 #endif
 #ifdef IPTOS_THROUGHPUT
-  {"IPTOS_THROUGHPUT", IPPROTO_IP, IP_TOS, IPTOS_THROUGHPUT, OPT_ON},
+  {"IPTOS_THROUGHPUT",  IPPROTO_IP,    IP_TOS,          IPTOS_THROUGHPUT,  OPT_ON},
 #endif
 #ifdef SO_REUSEPORT
-  {"SO_REUSEPORT", SOL_SOCKET, SO_REUSEPORT, 0, OPT_BOOL},
+  {"SO_REUSEPORT",      SOL_SOCKET,    SO_REUSEPORT,    0,                 OPT_BOOL},
 #endif
 #ifdef SO_SNDBUF
-  {"SO_SNDBUF", SOL_SOCKET, SO_SNDBUF, 0, OPT_INT},
+  {"SO_SNDBUF",         SOL_SOCKET,    SO_SNDBUF,       0,                 OPT_INT},
 #endif
 #ifdef SO_RCVBUF
-  {"SO_RCVBUF", SOL_SOCKET, SO_RCVBUF, 0, OPT_INT},
+  {"SO_RCVBUF",         SOL_SOCKET,    SO_RCVBUF,       0,                 OPT_INT},
 #endif
 #ifdef SO_SNDLOWAT
-  {"SO_SNDLOWAT", SOL_SOCKET, SO_SNDLOWAT, 0, OPT_INT},
+  {"SO_SNDLOWAT",       SOL_SOCKET,    SO_SNDLOWAT,     0,                 OPT_INT},
 #endif
 #ifdef SO_RCVLOWAT
-  {"SO_RCVLOWAT", SOL_SOCKET, SO_RCVLOWAT, 0, OPT_INT},
+  {"SO_RCVLOWAT",       SOL_SOCKET,    SO_RCVLOWAT,     0,                 OPT_INT},
 #endif
 #ifdef SO_SNDTIMEO
-  {"SO_SNDTIMEO", SOL_SOCKET, SO_SNDTIMEO, 0, OPT_INT},
+  {"SO_SNDTIMEO",       SOL_SOCKET,    SO_SNDTIMEO,     0,                 OPT_INT},
 #endif
 #ifdef SO_RCVTIMEO
-  {"SO_RCVTIMEO", SOL_SOCKET, SO_RCVTIMEO, 0, OPT_INT},
+  {"SO_RCVTIMEO",       SOL_SOCKET,    SO_RCVTIMEO,     0,                 OPT_INT},
 #endif
 #ifdef TCP_FASTACK
-  {"TCP_FASTACK", IPPROTO_TCP, TCP_FASTACK, 0, OPT_INT},
+  {"TCP_FASTACK",       IPPROTO_TCP,   TCP_FASTACK,     0,                 OPT_INT},
 #endif
   {NULL,0,0,0,0}};
 
@@ -767,18 +196,14 @@
 	socklen_t vlen = 4;
 	const smb_socket_option *p = &socket_options[0];
 
-	/* wrapped in if statement to prevent streams
-	 * leak in SCO Openserver 5.0 */
+	/* wrapped in if statement to prevent streams leak in SCO Openserver 5.0 */
 	/* reported on samba-technical  --jerry */
 	if ( DEBUGLEVEL >= 5 ) {
-		for (; p->name != NULL; p++) {
-			if (getsockopt(s, p->level, p->option,
-						(void *)&value, &vlen) == -1) {
-				DEBUG(5,("Could not test socket option %s.\n",
-							p->name));
-			} else {
-				DEBUG(5,("socket option %s = %d\n",
-							p->name,value));
+	for (; p->name != NULL; p++) {
+		if (getsockopt(s, p->level, p->option, (void *)&value, &vlen) == -1) {
+			DEBUG(5,("Could not test socket option %s.\n", p->name));
+		} else {
+			DEBUG(5,("socket option %s = %d\n",p->name,value));
 			}
 		}
 	}
@@ -790,19 +215,18 @@
 
 void set_socket_options(int fd, const char *options)
 {
-	TALLOC_CTX *ctx = talloc_stackframe();
-	char *tok;
+	fstring tok;
 
-	while (next_token_talloc(ctx, &options, &tok," \t,")) {
+	while (next_token(&options,tok," \t,", sizeof(tok))) {
 		int ret=0,i;
 		int value = 1;
 		char *p;
-		bool got_value = false;
+		BOOL got_value = False;
 
 		if ((p = strchr_m(tok,'='))) {
 			*p = 0;
 			value = atoi(p+1);
-			got_value = true;
+			got_value = True;
 		}
 
 		for (i=0;socket_options[i].name;i++)
@@ -818,34 +242,25 @@
 		case OPT_BOOL:
 		case OPT_INT:
 			ret = setsockopt(fd,socket_options[i].level,
-					socket_options[i].option,
-					(char *)&value,sizeof(int));
+						socket_options[i].option,(char *)&value,sizeof(int));
 			break;
 
 		case OPT_ON:
 			if (got_value)
-				DEBUG(0,("syntax error - %s "
-					"does not take a value\n",tok));
+				DEBUG(0,("syntax error - %s does not take a value\n",tok));
 
 			{
 				int on = socket_options[i].value;
 				ret = setsockopt(fd,socket_options[i].level,
-					socket_options[i].option,
-					(char *)&on,sizeof(int));
+							socket_options[i].option,(char *)&on,sizeof(int));
 			}
-			break;
+			break;	  
 		}
-
-		if (ret != 0) {
-			/* be aware that some systems like Solaris return
-			 * EINVAL to a setsockopt() call when the client
-			 * sent a RST previously - no need to worry */
-			DEBUG(2,("Failed to set socket option %s (Error %s)\n",
-				tok, strerror(errno) ));
-		}
+      
+		if (ret != 0)
+			DEBUG(0,("Failed to set socket option %s (Error %s)\n",tok, strerror(errno) ));
 	}
 
-	TALLOC_FREE(ctx);
 	print_socket_options(fd);
 }
 
@@ -853,43 +268,126 @@
  Read from a socket.
 ****************************************************************************/
 
-ssize_t read_udp_v4_socket(int fd,
-			char *buf,
-			size_t len,
-			struct sockaddr_storage *psa)
+ssize_t read_udp_socket(int fd,char *buf,size_t len)
 {
 	ssize_t ret;
-	socklen_t socklen = sizeof(*psa);
-	struct sockaddr_in *si = (struct sockaddr_in *)psa;
+	struct sockaddr_in sock;
+	socklen_t socklen = sizeof(sock);
 
-	memset((char *)psa,'\0',socklen);
-
-	ret = (ssize_t)sys_recvfrom(fd,buf,len,0,
-			(struct sockaddr *)psa,&socklen);
+	memset((char *)&sock,'\0',socklen);
+	memset((char *)&lastip,'\0',sizeof(lastip));
+	ret = (ssize_t)sys_recvfrom(fd,buf,len,0,(struct sockaddr *)&sock,&socklen);
 	if (ret <= 0) {
 		/* Don't print a low debug error for a non-blocking socket. */
 		if (errno == EAGAIN) {
-			DEBUG(10,("read_udp_v4_socket: returned EAGAIN\n"));
+			DEBUG(10,("read socket returned EAGAIN. ERRNO=%s\n",strerror(errno)));
 		} else {
-			DEBUG(2,("read_udp_v4_socket: failed. errno=%s\n",
-				strerror(errno)));
+			DEBUG(2,("read socket failed. ERRNO=%s\n",strerror(errno)));
 		}
-		return 0;
+		return(0);
 	}
 
-	if (psa->ss_family != AF_INET) {
-		DEBUG(2,("read_udp_v4_socket: invalid address family %d "
-			"(not IPv4)\n", (int)psa->ss_family));
-		return 0;
+	lastip = sock.sin_addr;
+	lastport = ntohs(sock.sin_port);
+
+	DEBUG(10,("read_udp_socket: lastip %s lastport %d read: %lu\n",
+			inet_ntoa(lastip), lastport, (unsigned long)ret));
+
+	return(ret);
+}
+
+#if 0
+
+Socket routines from HEAD - maybe re-enable in future. JRA.
+
+/****************************************************************************
+ Work out if we've timed out.
+****************************************************************************/
+
+static BOOL timeout_until(struct timeval *timeout, const struct timeval *endtime)
+{
+	struct timeval now;
+	SMB_BIG_INT t_dif;
+
+	GetTimeOfDay(&now);
+
+	t_dif = usec_time_diff(endtime, &now);
+	if (t_dif <= 0) {
+		return False;
 	}
 
-	DEBUG(10,("read_udp_v4_socket: ip %s port %d read: %lu\n",
-			inet_ntoa(si->sin_addr),
-			si->sin_port,
-			(unsigned long)ret));
+	timeout->tv_sec = (t_dif / (SMB_BIG_INT)1000000);
+	timeout->tv_usec = (t_dif % (SMB_BIG_INT)1000000);
+	return True;
+}
 
-	return ret;
+/****************************************************************************
+ Read data from the client, reading exactly N bytes, or until endtime timeout.
+ Use with a non-blocking socket if endtime != NULL.
+****************************************************************************/
+
+ssize_t read_data_until(int fd,char *buffer,size_t N, const struct timeval *endtime)
+{
+	ssize_t ret;
+	size_t total=0;
+
+	smb_read_error = 0;
+
+	while (total < N) {
+
+		if (endtime != NULL) {
+			fd_set r_fds;
+			struct timeval timeout;
+			int selrtn;
+
+			if (!timeout_until(&timeout, endtime)) {
+				DEBUG(10,("read_data_until: read timed out\n"));
+				smb_read_error = READ_TIMEOUT;
+				return -1;
+			}
+
+			FD_ZERO(&r_fds);
+			FD_SET(fd, &r_fds);
+
+			/* Select but ignore EINTR. */
+			selrtn = sys_select_intr(fd+1, &r_fds, NULL, NULL, &timeout);
+			if (selrtn == -1) {
+				/* something is wrong. Maybe the socket is dead? */
+				DEBUG(0,("read_data_until: select error = %s.\n", strerror(errno) ));
+				smb_read_error = READ_ERROR;
+				return -1;
+			}
+
+			/* Did we timeout ? */
+			if (selrtn == 0) {
+				DEBUG(10,("read_data_until: select timed out.\n"));
+				smb_read_error = READ_TIMEOUT;
+				return -1;
+			}
+		}
+
+		ret = sys_read(fd,buffer + total,N - total);
+
+		if (ret == 0) {
+			DEBUG(10,("read_data_until: read of %d returned 0. Error = %s\n", (int)(N - total), strerror(errno) ));
+			smb_read_error = READ_EOF;
+			return 0;
+		}
+
+		if (ret == -1) {
+			if (errno == EAGAIN) {
+				/* Non-blocking socket with no data available. Try select again. */
+				continue;
+			}
+			DEBUG(0,("read_data_until: read failure for %d. Error = %s\n", (int)(N - total), strerror(errno) ));
+			smb_read_error = READ_ERROR;
+			return -1;
+		}
+		total += ret;
+	}
+	return (ssize_t)total;
 }
+#endif
 
 /****************************************************************************
  Read data from a socket with a timout in msec.
@@ -898,142 +396,151 @@
  time_out = timeout in milliseconds
 ****************************************************************************/
 
-NTSTATUS read_socket_with_timeout(int fd, char *buf,
-				  size_t mincnt, size_t maxcnt,
-				  unsigned int time_out,
-				  size_t *size_ret)
+ssize_t read_socket_with_timeout(int fd,char *buf,size_t mincnt,size_t maxcnt,unsigned int time_out)
 {
 	fd_set fds;
 	int selrtn;
 	ssize_t readret;
 	size_t nread = 0;
 	struct timeval timeout;
-	char addr[INET6_ADDRSTRLEN];
-
+	
 	/* just checking .... */
 	if (maxcnt <= 0)
-		return NT_STATUS_OK;
-
+		return(0);
+	
+	smb_read_error = 0;
+	
 	/* Blocking read */
 	if (time_out == 0) {
 		if (mincnt == 0) {
 			mincnt = maxcnt;
 		}
-
+		
 		while (nread < mincnt) {
 			readret = sys_read(fd, buf + nread, maxcnt - nread);
-
+			
 			if (readret == 0) {
-				DEBUG(5,("read_socket_with_timeout: "
-					"blocking read. EOF from client.\n"));
-				return NT_STATUS_END_OF_FILE;
+				DEBUG(5,("read_socket_with_timeout: blocking read. EOF from client.\n"));
+				smb_read_error = READ_EOF;
+				return -1;
 			}
-
+			
 			if (readret == -1) {
-				if (fd == get_client_fd()) {
-					/* Try and give an error message
-					 * saying what client failed. */
-					DEBUG(0,("read_socket_with_timeout: "
-						"client %s read error = %s.\n",
-						get_peer_addr(fd,addr,sizeof(addr)),
-						strerror(errno) ));
+				if (fd == client_fd) {
+					/* Try and give an error message saying what client failed. */
+					DEBUG(0,("read_socket_with_timeout: client %s read error = %s.\n",
+						client_ip_string, strerror(errno) ));
 				} else {
-					DEBUG(0,("read_socket_with_timeout: "
-						"read error = %s.\n",
-						strerror(errno) ));
+					DEBUG(0,("read_socket_with_timeout: read error = %s.\n", strerror(errno) ));
 				}
-				return map_nt_error_from_unix(errno);
+				smb_read_error = READ_ERROR;
+				return -1;
 			}
 			nread += readret;
 		}
-		goto done;
+		return((ssize_t)nread);
 	}
-
+	
 	/* Most difficult - timeout read */
-	/* If this is ever called on a disk file and
+	/* If this is ever called on a disk file and 
 	   mincnt is greater then the filesize then
-	   system performance will suffer severely as
+	   system performance will suffer severely as 
 	   select always returns true on disk files */
-
+	
 	/* Set initial timeout */
 	timeout.tv_sec = (time_t)(time_out / 1000);
 	timeout.tv_usec = (long)(1000 * (time_out % 1000));
-
-	for (nread=0; nread < mincnt; ) {
+	
+	for (nread=0; nread < mincnt; ) {      
 		FD_ZERO(&fds);
 		FD_SET(fd,&fds);
-
+		
 		selrtn = sys_select_intr(fd+1,&fds,NULL,NULL,&timeout);
-
+		
 		/* Check if error */
 		if (selrtn == -1) {
 			/* something is wrong. Maybe the socket is dead? */
-			if (fd == get_client_fd()) {
-				/* Try and give an error message saying
-				 * what client failed. */
-				DEBUG(0,("read_socket_with_timeout: timeout "
-				"read for client %s. select error = %s.\n",
-				get_peer_addr(fd,addr,sizeof(addr)),
-				strerror(errno) ));
+			if (fd == client_fd) {
+				/* Try and give an error message saying what client failed. */
+				DEBUG(0,("read_socket_with_timeout: timeout read for client %s. select error = %s.\n",
+					client_ip_string, strerror(errno) ));
 			} else {
-				DEBUG(0,("read_socket_with_timeout: timeout "
-				"read. select error = %s.\n",
-				strerror(errno) ));
+				DEBUG(0,("read_socket_with_timeout: timeout read. select error = %s.\n", strerror(errno) ));
 			}
-			return map_nt_error_from_unix(errno);
+			smb_read_error = READ_ERROR;
+			return -1;
 		}
-
+		
 		/* Did we timeout ? */
 		if (selrtn == 0) {
-			DEBUG(10,("read_socket_with_timeout: timeout read. "
-				"select timed out.\n"));
-			return NT_STATUS_IO_TIMEOUT;
+			DEBUG(10,("read_socket_with_timeout: timeout read. select timed out.\n"));
+			smb_read_error = READ_TIMEOUT;
+			return -1;
 		}
-
+		
 		readret = sys_read(fd, buf+nread, maxcnt-nread);
-
+		
 		if (readret == 0) {
 			/* we got EOF on the file descriptor */
-			DEBUG(5,("read_socket_with_timeout: timeout read. "
-				"EOF from client.\n"));
-			return NT_STATUS_END_OF_FILE;
+			DEBUG(5,("read_socket_with_timeout: timeout read. EOF from client.\n"));
+			smb_read_error = READ_EOF;
+			return -1;
 		}
-
+		
 		if (readret == -1) {
 			/* the descriptor is probably dead */
-			if (fd == get_client_fd()) {
-				/* Try and give an error message
-				 * saying what client failed. */
-				DEBUG(0,("read_socket_with_timeout: timeout "
-					"read to client %s. read error = %s.\n",
-					get_peer_addr(fd,addr,sizeof(addr)),
-					strerror(errno) ));
+			if (fd == client_fd) {
+				/* Try and give an error message saying what client failed. */
+				DEBUG(0,("read_socket_with_timeout: timeout read to client %s. read error = %s.\n",
+					client_ip_string, strerror(errno) ));
 			} else {
-				DEBUG(0,("read_socket_with_timeout: timeout "
-					"read. read error = %s.\n",
-					strerror(errno) ));
+				DEBUG(0,("read_socket_with_timeout: timeout read. read error = %s.\n", strerror(errno) ));
 			}
-			return map_nt_error_from_unix(errno);
+			smb_read_error = READ_ERROR;
+			return -1;
 		}
-
+		
 		nread += readret;
 	}
-
- done:
+	
 	/* Return the number we got */
-	if (size_ret) {
-		*size_ret = nread;
-	}
-	return NT_STATUS_OK;
+	return (ssize_t)nread;
 }
 
 /****************************************************************************
- Read data from the client, reading exactly N bytes.
+ Read data from the client, reading exactly N bytes. 
 ****************************************************************************/
 
-NTSTATUS read_data(int fd, char *buffer, size_t N)
+ssize_t read_data(int fd,char *buffer,size_t N)
 {
-	return read_socket_with_timeout(fd, buffer, N, N, 0, NULL);
+	ssize_t ret;
+	size_t total=0;  
+ 
+	smb_read_error = 0;
+
+	while (total < N) {
+		ret = sys_read(fd,buffer + total,N - total);
+
+		if (ret == 0) {
+			DEBUG(10,("read_data: read of %d returned 0. Error = %s\n", (int)(N - total), strerror(errno) ));
+			smb_read_error = READ_EOF;
+			return 0;
+		}
+
+		if (ret == -1) {
+			if (fd == client_fd) {
+				/* Try and give an error message saying what client failed. */
+				DEBUG(0,("read_data: read failure for %d bytes to client %s. Error = %s\n",
+					(int)(N - total), client_ip_string, strerror(errno) ));
+			} else {
+				DEBUG(0,("read_data: read failure for %d. Error = %s\n", (int)(N - total), strerror(errno) ));
+			}
+			smb_read_error = READ_ERROR;
+			return -1;
+		}
+		total += ret;
+	}
+	return (ssize_t)total;
 }
 
 /****************************************************************************
@@ -1044,22 +551,17 @@
 {
 	size_t total=0;
 	ssize_t ret;
-	char addr[INET6_ADDRSTRLEN];
 
 	while (total < N) {
 		ret = sys_write(fd,buffer + total,N - total);
 
 		if (ret == -1) {
-			if (fd == get_client_fd()) {
-				/* Try and give an error message saying
-				 * what client failed. */
-				DEBUG(0,("write_data: write failure in "
-					"writing to client %s. Error %s\n",
-					get_peer_addr(fd,addr,sizeof(addr)),
-					strerror(errno) ));
+			if (fd == client_fd) {
+				/* Try and give an error message saying what client failed. */
+				DEBUG(0,("write_data: write failure in writing to client %s. Error %s\n",
+					client_ip_string, strerror(errno) ));
 			} else {
-				DEBUG(0,("write_data: write failure. "
-					"Error = %s\n", strerror(errno) ));
+				DEBUG(0,("write_data: write failure. Error = %s\n", strerror(errno) ));
 			}
 			return -1;
 		}
@@ -1077,7 +579,7 @@
  Send a keepalive packet (rfc1002).
 ****************************************************************************/
 
-bool send_keepalive(int client)
+BOOL send_keepalive(int client)
 {
 	unsigned char buf[4];
 
@@ -1087,6 +589,7 @@
 	return(write_data(client,(char *)buf,4) == 4);
 }
 
+
 /****************************************************************************
  Read 4 bytes of a smb packet and return the smb length of the packet.
  Store the result in the buffer.
@@ -1095,29 +598,31 @@
  Timeout is in milliseconds.
 ****************************************************************************/
 
-NTSTATUS read_smb_length_return_keepalive(int fd, char *inbuf,
-					  unsigned int timeout,
-					  size_t *len)
+static ssize_t read_smb_length_return_keepalive(int fd, char *inbuf, unsigned int timeout)
 {
+	ssize_t len=0;
 	int msg_type;
-	NTSTATUS status;
+	BOOL ok = False;
 
-	status = read_socket_with_timeout(fd, inbuf, 4, 4, timeout, NULL);
+	while (!ok) {
+		if (timeout > 0)
+			ok = (read_socket_with_timeout(fd,inbuf,4,4,timeout) == 4);
+		else 
+			ok = (read_data(fd,inbuf,4) == 4);
 
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
+		if (!ok)
+			return(-1);
 
-	*len = smb_len(inbuf);
-	msg_type = CVAL(inbuf,0);
+		len = smb_len(inbuf);
+		msg_type = CVAL(inbuf,0);
 
-	if (msg_type == SMBkeepalive) {
-		DEBUG(5,("Got keepalive packet\n"));
+		if (msg_type == SMBkeepalive) 
+			DEBUG(5,("Got keepalive packet\n"));
 	}
 
-	DEBUG(10,("got smb length of %lu\n",(unsigned long)(*len)));
+	DEBUG(10,("got smb length of %lu\n",(unsigned long)len));
 
-	return NT_STATUS_OK;
+	return(len);
 }
 
 /****************************************************************************
@@ -1127,106 +632,160 @@
  Timeout is in milliseconds.
 ****************************************************************************/
 
-NTSTATUS read_smb_length(int fd, char *inbuf, unsigned int timeout,
-			 size_t *len)
+ssize_t read_smb_length(int fd, char *inbuf, unsigned int timeout)
 {
-	uint8_t msgtype = SMBkeepalive;
+	ssize_t len;
 
-	while (msgtype == SMBkeepalive) {
-		NTSTATUS status;
+	for(;;) {
+		len = read_smb_length_return_keepalive(fd, inbuf, timeout);
 
-		status = read_smb_length_return_keepalive(fd, inbuf, timeout,
-							  len);
-		if (!NT_STATUS_IS_OK(status)) {
-			return status;
-		}
+		if(len < 0)
+			return len;
 
-		msgtype = CVAL(inbuf, 0);
+		/* Ignore session keepalives. */
+		if(CVAL(inbuf,0) != SMBkeepalive)
+			break;
 	}
 
 	DEBUG(10,("read_smb_length: got smb length of %lu\n",
 		  (unsigned long)len));
 
-	return NT_STATUS_OK;
+	return len;
 }
 
 /****************************************************************************
- Read an smb from a fd.
- The timeout is in milliseconds.
+ Read an smb from a fd. 
+ The timeout is in milliseconds. 
  This function will return on receipt of a session keepalive packet.
- maxlen is the max number of bytes to return, not including the 4 byte
- length. If zero it means buflen limit.
  Doesn't check the MAC on signed packets.
 ****************************************************************************/
 
-NTSTATUS receive_smb_raw(int fd, char *buffer, size_t buflen, unsigned int timeout,
-			 size_t maxlen, size_t *p_len)
+BOOL receive_smb_raw(int fd, char *buffer, size_t buflen, unsigned int timeout)
 {
-	size_t len;
-	NTSTATUS status;
+	ssize_t len,ret;
 
-	status = read_smb_length_return_keepalive(fd,buffer,timeout,&len);
+	smb_read_error = 0;
 
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10, ("receive_smb_raw: %s!\n", nt_errstr(status)));
-		return status;
+	len = read_smb_length_return_keepalive(fd,buffer,timeout);
+	if (len < 0) {
+		DEBUG(10,("receive_smb_raw: length < 0!\n"));
+
+		/*
+		 * Correct fix. smb_read_error may have already been
+		 * set. Only set it here if not already set. Global
+		 * variables still suck :-). JRA.
+		 */
+
+		if (smb_read_error == 0)
+			smb_read_error = READ_ERROR;
+		return False;
 	}
 
 	if (len > buflen) {
-		DEBUG(0,("Invalid packet length! (%lu bytes).\n",
-					(unsigned long)len));
-		return NT_STATUS_INVALID_PARAMETER;
+		DEBUG(0,("Invalid packet length! (%lu bytes).\n",(unsigned long)len));
+
+		/*
+		 * smb_read_error may have already been
+		 * set. Only set it here if not already set. Global
+		 * variables still suck :-). JRA.
+		 */
+
+		if (smb_read_error == 0)
+			smb_read_error = READ_ERROR;
+		return False;
 	}
 
 	if(len > 0) {
-		if (maxlen) {
-			len = MIN(len,maxlen);
+		if (timeout > 0) {
+			ret = read_socket_with_timeout(fd,buffer+4,len,len,timeout);
+		} else {
+			ret = read_data(fd,buffer+4,len);
 		}
 
-		status = read_socket_with_timeout(
-			fd, buffer+4, len, len, timeout, &len);
-
-		if (!NT_STATUS_IS_OK(status)) {
-			return status;
+		if (ret != len) {
+			if (smb_read_error == 0) {
+				smb_read_error = READ_ERROR;
+			}
+			return False;
 		}
-
-		/* not all of samba3 properly checks for packet-termination
-		 * of strings. This ensures that we don't run off into
-		 * empty space. */
+		
+		/* not all of samba3 properly checks for packet-termination of strings. This
+		   ensures that we don't run off into empty space. */
 		SSVAL(buffer+4,len, 0);
 	}
 
-	*p_len = len;
-	return NT_STATUS_OK;
+	return True;
 }
 
 /****************************************************************************
+ Wrapper for receive_smb_raw().
+ Checks the MAC on signed packets.
+****************************************************************************/
+
+BOOL receive_smb(int fd, char *buffer, size_t buflen, unsigned int timeout)
+{
+	if (!receive_smb_raw(fd, buffer, buflen, timeout)) {
+		return False;
+	}
+
+	/* Check the incoming SMB signature. */
+	if (!srv_check_sign_mac(buffer, True)) {
+		DEBUG(0, ("receive_smb: SMB Signature verification failed on incoming packet!\n"));
+		if (smb_read_error == 0)
+			smb_read_error = READ_BAD_SIG;
+		return False;
+	};
+
+	return(True);
+}
+
+/****************************************************************************
+ Send an smb to a fd.
+****************************************************************************/
+
+BOOL send_smb(int fd, char *buffer)
+{
+	size_t len;
+	size_t nwritten=0;
+	ssize_t ret;
+
+	/* Sign the outgoing packet if required. */
+	srv_calculate_sign_mac(buffer);
+
+	len = smb_len(buffer) + 4;
+
+	while (nwritten < len) {
+		ret = write_data(fd,buffer+nwritten,len - nwritten);
+		if (ret <= 0) {
+			DEBUG(0,("Error writing %d bytes to client. %d. (%s)\n",
+				(int)len,(int)ret, strerror(errno) ));
+			return False;
+		}
+		nwritten += ret;
+	}
+
+	return True;
+}
+
+/****************************************************************************
  Open a socket of the specified type, port, and address for incoming data.
 ****************************************************************************/
 
-int open_socket_in(int type,
-		uint16_t port,
-		int dlevel,
-		const struct sockaddr_storage *psock,
-		bool rebind)
+int open_socket_in( int type, int port, int dlevel, uint32 socket_addr, BOOL rebind )
 {
-	struct sockaddr_storage sock;
+	struct sockaddr_in sock;
 	int res;
-	socklen_t slen = sizeof(struct sockaddr_in);
 
-	sock = *psock;
+	memset( (char *)&sock, '\0', sizeof(sock) );
 
-#if defined(HAVE_IPV6)
-	if (sock.ss_family == AF_INET6) {
-		((struct sockaddr_in6 *)&sock)->sin6_port = htons(port);
-		slen = sizeof(struct sockaddr_in6);
-	}
+#ifdef HAVE_SOCK_SIN_LEN
+	sock.sin_len         = sizeof(sock);
 #endif
-	if (sock.ss_family == AF_INET) {
-		((struct sockaddr_in *)&sock)->sin_port = htons(port);
-	}
+	sock.sin_port        = htons( port );
+	sock.sin_family      = AF_INET;
+	sock.sin_addr.s_addr = socket_addr;
 
-	res = socket(sock.ss_family, type, 0 );
+	res = socket( AF_INET, type, 0 );
 	if( res == -1 ) {
 		if( DEBUGLVL(0) ) {
 			dbgtext( "open_socket_in(): socket() call failed: " );
@@ -1238,46 +797,39 @@
 	/* This block sets/clears the SO_REUSEADDR and possibly SO_REUSEPORT. */
 	{
 		int val = rebind ? 1 : 0;
-		if( setsockopt(res,SOL_SOCKET,SO_REUSEADDR,
-					(char *)&val,sizeof(val)) == -1 ) {
+		if( setsockopt(res,SOL_SOCKET,SO_REUSEADDR,(char *)&val,sizeof(val)) == -1 ) {
 			if( DEBUGLVL( dlevel ) ) {
 				dbgtext( "open_socket_in(): setsockopt: " );
-				dbgtext( "SO_REUSEADDR = %s ",
-						val?"true":"false" );
+				dbgtext( "SO_REUSEADDR = %s ", val?"True":"False" );
 				dbgtext( "on port %d failed ", port );
 				dbgtext( "with error = %s\n", strerror(errno) );
 			}
 		}
 #ifdef SO_REUSEPORT
-		if( setsockopt(res,SOL_SOCKET,SO_REUSEPORT,
-					(char *)&val,sizeof(val)) == -1 ) {
+		if( setsockopt(res,SOL_SOCKET,SO_REUSEPORT,(char *)&val,sizeof(val)) == -1 ) {
 			if( DEBUGLVL( dlevel ) ) {
 				dbgtext( "open_socket_in(): setsockopt: ");
-				dbgtext( "SO_REUSEPORT = %s ",
-						val?"true":"false");
-				dbgtext( "on port %d failed ", port);
-				dbgtext( "with error = %s\n", strerror(errno));
+				dbgtext( "SO_REUSEPORT = %s ", val?"True":"False" );
+				dbgtext( "on port %d failed ", port );
+				dbgtext( "with error = %s\n", strerror(errno) );
 			}
 		}
 #endif /* SO_REUSEPORT */
 	}
 
 	/* now we've got a socket - we need to bind it */
-	if (bind(res, (struct sockaddr *)&sock, slen) == -1 ) {
-		if( DEBUGLVL(dlevel) && (port == SMB_PORT1 ||
-				port == SMB_PORT2 || port == NMB_PORT) ) {
-			char addr[INET6_ADDRSTRLEN];
-			print_sockaddr(addr, sizeof(addr),
-					&sock);
-			dbgtext( "bind failed on port %d ", port);
-			dbgtext( "socket_addr = %s.\n", addr);
-			dbgtext( "Error = %s\n", strerror(errno));
+	if( bind( res, (struct sockaddr *)&sock, sizeof(sock) ) == -1 ) {
+		if( DEBUGLVL(dlevel) && (port == SMB_PORT1 || port == SMB_PORT2 || port == NMB_PORT) ) {
+			dbgtext( "bind failed on port %d ", port );
+			dbgtext( "socket_addr = %s.\n", inet_ntoa( sock.sin_addr ) );
+			dbgtext( "Error = %s\n", strerror(errno) );
 		}
-		close(res);
-		return -1;
+		close( res ); 
+		return( -1 ); 
 	}
 
 	DEBUG( 10, ( "bind succeeded on port %d\n", port ) );
+
 	return( res );
  }
 
@@ -1285,55 +837,38 @@
  Create an outgoing socket. timeout is in milliseconds.
 **************************************************************************/
 
-int open_socket_out(int type,
-		const struct sockaddr_storage *pss,
-		uint16_t port,
-		int timeout)
+int open_socket_out(int type, struct in_addr *addr, int port ,int timeout)
 {
-	char addr[INET6_ADDRSTRLEN];
-	struct sockaddr_storage sock_out = *pss;
+	struct sockaddr_in sock_out;
 	int res,ret;
 	int connect_loop = 10;
 	int increment = 10;
 
 	/* create a socket to write to */
-	res = socket(pss->ss_family, type, 0);
+	res = socket(PF_INET, type, 0);
 	if (res == -1) {
                 DEBUG(0,("socket error (%s)\n", strerror(errno)));
 		return -1;
 	}
 
-	if (type != SOCK_STREAM) {
-		return res;
-	}
+	if (type != SOCK_STREAM)
+		return(res);
+  
+	memset((char *)&sock_out,'\0',sizeof(sock_out));
+	putip((char *)&sock_out.sin_addr,(char *)addr);
+  
+	sock_out.sin_port = htons( port );
+	sock_out.sin_family = PF_INET;
 
-#if defined(HAVE_IPV6)
-	if (pss->ss_family == AF_INET6) {
-		struct sockaddr_in6 *psa6 = (struct sockaddr_in6 *)&sock_out;
-		psa6->sin6_port = htons(port);
-		if (psa6->sin6_scope_id == 0 &&
-				IN6_IS_ADDR_LINKLOCAL(&psa6->sin6_addr)) {
-			setup_linklocal_scope_id(&sock_out);
-		}
-	}
-#endif
-	if (pss->ss_family == AF_INET) {
-		struct sockaddr_in *psa = (struct sockaddr_in *)&sock_out;
-		psa->sin_port = htons(port);
-	}
-
 	/* set it non-blocking */
-	set_blocking(res,false);
+	set_blocking(res,False);
 
-	print_sockaddr(addr, sizeof(addr), &sock_out);
-	DEBUG(3,("Connecting to %s at port %u\n",
-				addr,
-				(unsigned int)port));
-
+	DEBUG(3,("Connecting to %s at port %d\n",inet_ntoa(*addr),port));
+  
 	/* and connect it to the destination */
   connect_again:
 
-	ret = sys_connect(res, (struct sockaddr *)&sock_out);
+	ret = connect(res,(struct sockaddr *)&sock_out,sizeof(sock_out));
 
 	/* Some systems return EAGAIN when they mean EINPROGRESS */
 	if (ret < 0 && (errno == EINPROGRESS || errno == EALREADY ||
@@ -1350,14 +885,13 @@
 
 	if (ret < 0 && (errno == EINPROGRESS || errno == EALREADY ||
 			errno == EAGAIN)) {
-		DEBUG(1,("timeout connecting to %s:%u\n",
-					addr,
-					(unsigned int)port));
+		DEBUG(1,("timeout connecting to %s:%d\n",inet_ntoa(*addr),port));
 		close(res);
 		return -1;
 	}
 
 #ifdef EISCONN
+
 	if (ret < 0 && errno == EISCONN) {
 		errno = 0;
 		ret = 0;
@@ -1366,15 +900,13 @@
 
 	if (ret < 0) {
 		DEBUG(2,("error connecting to %s:%d (%s)\n",
-				addr,
-				(unsigned int)port,
-				strerror(errno)));
+				inet_ntoa(*addr),port,strerror(errno)));
 		close(res);
 		return -1;
 	}
 
 	/* set it blocking again */
-	set_blocking(res,true);
+	set_blocking(res,True);
 
 	return res;
 }
@@ -1385,12 +917,12 @@
  of DC's all of which are equivalent for our purposes.
 **************************************************************************/
 
-bool open_any_socket_out(struct sockaddr_storage *addrs, int num_addrs,
+BOOL open_any_socket_out(struct sockaddr_in *addrs, int num_addrs,
 			 int timeout, int *fd_index, int *fd)
 {
 	int i, resulting_index, res;
 	int *sockets;
-	bool good_connect;
+	BOOL good_connect;
 
 	fd_set r_fds, wr_fds;
 	struct timeval tv;
@@ -1403,7 +935,7 @@
 	sockets = SMB_MALLOC_ARRAY(int, num_addrs);
 
 	if (sockets == NULL)
-		return false;
+		return False;
 
 	resulting_index = -1;
 
@@ -1411,23 +943,22 @@
 		sockets[i] = -1;
 
 	for (i=0; i<num_addrs; i++) {
-		sockets[i] = socket(addrs[i].ss_family, SOCK_STREAM, 0);
+		sockets[i] = socket(PF_INET, SOCK_STREAM, 0);
 		if (sockets[i] < 0)
 			goto done;
-		set_blocking(sockets[i], false);
+		set_blocking(sockets[i], False);
 	}
 
  connect_again:
-	good_connect = false;
+	good_connect = False;
 
 	for (i=0; i<num_addrs; i++) {
-		const struct sockaddr * a = 
-		    (const struct sockaddr *)&(addrs[i]);
 
 		if (sockets[i] == -1)
 			continue;
 
-		if (sys_connect(sockets[i], a) == 0) {
+		if (connect(sockets[i], (struct sockaddr *)&(addrs[i]),
+			    sizeof(*addrs)) == 0) {
 			/* Rather unlikely as we are non-blocking, but it
 			 * might actually happen. */
 			resulting_index = i;
@@ -1441,7 +972,7 @@
 		    errno == EAGAIN || errno == EINTR) {
 			/* These are the error messages that something is
 			   progressing. */
-			good_connect = true;
+			good_connect = True;
 		} else if (errno != 0) {
 			/* There was a direct error */
 			close(sockets[i]);
@@ -1526,7 +1057,7 @@
 	if (resulting_index >= 0) {
 		*fd_index = resulting_index;
 		*fd = sockets[*fd_index];
-		set_blocking(*fd, true);
+		set_blocking(*fd, True);
 	}
 
 	free(sockets);
@@ -1542,9 +1073,9 @@
 	int type = SOCK_DGRAM;
 	struct sockaddr_in sock_out;
 	int res;
-	struct in_addr addr;
+	struct in_addr *addr;
 
-	(void)interpret_addr2(&addr, host);
+	addr = interpret_addr2(host);
 
 	res = socket(PF_INET, type, 0);
 	if (res == -1) {
@@ -1552,11 +1083,11 @@
 	}
 
 	memset((char *)&sock_out,'\0',sizeof(sock_out));
-	putip((char *)&sock_out.sin_addr,(char *)&addr);
+	putip((char *)&sock_out.sin_addr,(char *)addr);
 	sock_out.sin_port = htons(port);
 	sock_out.sin_family = PF_INET;
 
-	if (sys_connect(res,(struct sockaddr *)&sock_out)) {
+	if (connect(res,(struct sockaddr *)&sock_out,sizeof(sock_out))) {
 		close(res);
 		return -1;
 	}
@@ -1564,259 +1095,139 @@
 	return res;
 }
 
-/*******************************************************************
- Return the IP addr of the remote end of a socket as a string.
- Optionally return the struct sockaddr_storage.
- ******************************************************************/
 
-static const char *get_peer_addr_internal(int fd,
-				char *addr_buf,
-				size_t addr_buf_len,
-				struct sockaddr_storage *pss,
-				socklen_t *plength)
-{
-	struct sockaddr_storage ss;
-	socklen_t length = sizeof(ss);
-
-	strlcpy(addr_buf,"0.0.0.0",addr_buf_len);
-
-	if (fd == -1) {
-		return addr_buf;
-	}
-
-	if (pss == NULL) {
-		pss = &ss;
-	}
-	if (plength == NULL) {
-		plength = &length;
-	}
-
-	if (getpeername(fd, (struct sockaddr *)pss, plength) < 0) {
-		DEBUG(0,("getpeername failed. Error was %s\n",
-					strerror(errno) ));
-		return addr_buf;
-	}
-
-	print_sockaddr_len(addr_buf,
-			addr_buf_len,
-			pss,
-			*plength);
-	return addr_buf;
-}
-
 /*******************************************************************
  Matchname - determine if host name matches IP address. Used to
  confirm a hostname lookup to prevent spoof attacks.
 ******************************************************************/
 
-static bool matchname(const char *remotehost,
-		const struct sockaddr_storage *pss,
-		socklen_t len)
+static BOOL matchname(char *remotehost,struct in_addr  addr)
 {
-	struct addrinfo *res = NULL;
-	struct addrinfo *ailist = NULL;
-	char addr_buf[INET6_ADDRSTRLEN];
-	bool ret = interpret_string_addr_internal(&ailist,
-			remotehost,
-			AI_ADDRCONFIG|AI_CANONNAME);
+	struct hostent *hp;
+	int     i;
+	
+	if ((hp = sys_gethostbyname(remotehost)) == 0) {
+		DEBUG(0,("sys_gethostbyname(%s): lookup failure.\n", remotehost));
+		return False;
+	} 
 
-	if (!ret || ailist == NULL) {
-		DEBUG(3,("matchname: getaddrinfo failed for "
-			"name %s [%s]\n",
-			remotehost,
-			gai_strerror(ret) ));
-		return false;
-	}
-
 	/*
-	 * Make sure that getaddrinfo() returns the "correct" host name.
+	 * Make sure that gethostbyname() returns the "correct" host name.
+	 * Unfortunately, gethostbyname("localhost") sometimes yields
+	 * "localhost.domain". Since the latter host name comes from the
+	 * local DNS, we just have to trust it (all bets are off if the local
+	 * DNS is perverted). We always check the address list, though.
 	 */
-
-	if (ailist->ai_canonname == NULL ||
-		(!strequal(remotehost, ailist->ai_canonname) &&
-		 !strequal(remotehost, "localhost"))) {
-		DEBUG(0,("matchname: host name/name mismatch: %s != %s\n",
-			 remotehost,
-			 ailist->ai_canonname ?
-				 ailist->ai_canonname : "(NULL)"));
-		freeaddrinfo(ailist);
-		return false;
+	
+	if (!strequal(remotehost, hp->h_name)
+	    && !strequal(remotehost, "localhost")) {
+		DEBUG(0,("host name/name mismatch: %s != %s\n",
+			 remotehost, hp->h_name));
+		return False;
 	}
-
+	
 	/* Look up the host address in the address list we just got. */
-	for (res = ailist; res; res = res->ai_next) {
-		if (!res->ai_addr) {
-			continue;
-		}
-		if (addr_equal((const struct sockaddr_storage *)res->ai_addr,
-					pss)) {
-			freeaddrinfo(ailist);
-			return true;
-		}
+	for (i = 0; hp->h_addr_list[i]; i++) {
+		if (memcmp(hp->h_addr_list[i], (char *) & addr, sizeof(addr)) == 0)
+			return True;
 	}
-
+	
 	/*
 	 * The host name does not map to the original host address. Perhaps
 	 * someone has compromised a name server. More likely someone botched
 	 * it, but that could be dangerous, too.
 	 */
-
-	DEBUG(0,("matchname: host name/address mismatch: %s != %s\n",
-		print_sockaddr_len(addr_buf,
-			sizeof(addr_buf),
-			pss,
-			len),
-		 ailist->ai_canonname ? ailist->ai_canonname : "(NULL)"));
-
-	if (ailist) {
-		freeaddrinfo(ailist);
-	}
-	return false;
+	
+	DEBUG(0,("host name/address mismatch: %s != %s\n",
+		 inet_ntoa(addr), hp->h_name));
+	return False;
 }
 
 /*******************************************************************
- Deal with the singleton cache.
-******************************************************************/
-
-struct name_addr_pair {
-	struct sockaddr_storage ss;
-	const char *name;
-};
-
-/*******************************************************************
- Lookup a name/addr pair. Returns memory allocated from memcache.
-******************************************************************/
-
-static bool lookup_nc(struct name_addr_pair *nc)
-{
-	DATA_BLOB tmp;
-
-	ZERO_STRUCTP(nc);
-
-	if (!memcache_lookup(
-			NULL, SINGLETON_CACHE,
-			data_blob_string_const("get_peer_name"),
-			&tmp)) {
-		return false;
-	}
-
-	memcpy(&nc->ss, tmp.data, sizeof(nc->ss));
-	nc->name = (const char *)tmp.data + sizeof(nc->ss);
-	return true;
-}
-
-/*******************************************************************
- Save a name/addr pair.
-******************************************************************/
-
-static void store_nc(const struct name_addr_pair *nc)
-{
-	DATA_BLOB tmp;
-	size_t namelen = strlen(nc->name);
-
-	tmp = data_blob(NULL, sizeof(nc->ss) + namelen + 1);
-	if (!tmp.data) {
-		return;
-	}
-	memcpy(tmp.data, &nc->ss, sizeof(nc->ss));
-	memcpy(tmp.data+sizeof(nc->ss), nc->name, namelen+1);
-
-	memcache_add(NULL, SINGLETON_CACHE,
-			data_blob_string_const("get_peer_name"),
-			tmp);
-	data_blob_free(&tmp);
-}
-
-/*******************************************************************
  Return the DNS name of the remote end of a socket.
 ******************************************************************/
 
-const char *get_peer_name(int fd, bool force_lookup)
+char *get_peer_name(int fd, BOOL force_lookup)
 {
-	struct name_addr_pair nc;
-	char addr_buf[INET6_ADDRSTRLEN];
-	struct sockaddr_storage ss;
-	socklen_t length = sizeof(ss);
-	const char *p;
-	int ret;
-	char name_buf[MAX_DNS_NAME_LENGTH];
-	char tmp_name[MAX_DNS_NAME_LENGTH];
+	static pstring name_buf;
+	pstring tmp_name;
+	static fstring addr_buf;
+	struct hostent *hp;
+	struct in_addr addr;
+	char *p;
 
 	/* reverse lookups can be *very* expensive, and in many
 	   situations won't work because many networks don't link dhcp
 	   with dns. To avoid the delay we avoid the lookup if
 	   possible */
-	if (!lp_hostname_lookups() && (force_lookup == false)) {
-		length = sizeof(nc.ss);
-		nc.name = get_peer_addr_internal(fd, addr_buf, sizeof(addr_buf),
-			&nc.ss, &length);
-		store_nc(&nc);
-		lookup_nc(&nc);
-		return nc.name ? nc.name : "UNKNOWN";
+	if (!lp_hostname_lookups() && (force_lookup == False)) {
+		return get_peer_addr(fd);
 	}
+	
+	p = get_peer_addr(fd);
 
-	lookup_nc(&nc);
-
-	memset(&ss, '\0', sizeof(ss));
-	p = get_peer_addr_internal(fd, addr_buf, sizeof(addr_buf), &ss, &length);
-
 	/* it might be the same as the last one - save some DNS work */
-	if (addr_equal(&ss, &nc.ss)) {
-		return nc.name ? nc.name : "UNKNOWN";
-	}
+	if (strcmp(p, addr_buf) == 0) 
+		return name_buf;
 
-	/* Not the same. We need to lookup. */
-	if (fd == -1) {
-		return "UNKNOWN";
-	}
+	pstrcpy(name_buf,"UNKNOWN");
+	if (fd == -1) 
+		return name_buf;
 
-	/* Look up the remote host name. */
-	ret = sys_getnameinfo((struct sockaddr *)&ss,
-			length,
-			name_buf,
-			sizeof(name_buf),
-			NULL,
-			0,
-			0);
+	fstrcpy(addr_buf, p);
 
-	if (ret) {
-		DEBUG(1,("get_peer_name: getnameinfo failed "
-			"for %s with error %s\n",
-			p,
-			gai_strerror(ret)));
-		strlcpy(name_buf, p, sizeof(name_buf));
+	addr = *interpret_addr2(p);
+	
+	/* Look up the remote host name. */
+	if ((hp = gethostbyaddr((char *)&addr.s_addr, sizeof(addr.s_addr), AF_INET)) == 0) {
+		DEBUG(1,("Gethostbyaddr failed for %s\n",p));
+		pstrcpy(name_buf, p);
 	} else {
-		if (!matchname(name_buf, &ss, length)) {
+		pstrcpy(name_buf,(char *)hp->h_name);
+		if (!matchname(name_buf, addr)) {
 			DEBUG(0,("Matchname failed on %s %s\n",name_buf,p));
-			strlcpy(name_buf,"UNKNOWN",sizeof(name_buf));
+			pstrcpy(name_buf,"UNKNOWN");
 		}
 	}
 
-	/* can't pass the same source and dest strings in when you
-	   use --enable-developer or the clobber_region() call will
+	/* can't pass the same source and dest strings in when you 
+	   use --enable-developer or the clobber_region() call will 
 	   get you */
-
-	strlcpy(tmp_name, name_buf, sizeof(tmp_name));
+	
+	pstrcpy( tmp_name, name_buf );
 	alpha_strcpy(name_buf, tmp_name, "_-.", sizeof(name_buf));
 	if (strstr(name_buf,"..")) {
-		strlcpy(name_buf, "UNKNOWN", sizeof(name_buf));
+		pstrcpy(name_buf, "UNKNOWN");
 	}
 
-	nc.name = name_buf;
-	nc.ss = ss;
-
-	store_nc(&nc);
-	lookup_nc(&nc);
-	return nc.name ? nc.name : "UNKNOWN";
+	return name_buf;
 }
 
 /*******************************************************************
  Return the IP addr of the remote end of a socket as a string.
  ******************************************************************/
 
-const char *get_peer_addr(int fd, char *addr, size_t addr_len)
+char *get_peer_addr(int fd)
 {
-	return get_peer_addr_internal(fd, addr, addr_len, NULL, NULL);
+	struct sockaddr sa;
+	struct sockaddr_in *sockin = (struct sockaddr_in *) (&sa);
+	socklen_t length = sizeof(sa);
+	static fstring addr_buf;
+
+	fstrcpy(addr_buf,"0.0.0.0");
+
+	if (fd == -1) {
+		return addr_buf;
+	}
+	
+	if (getpeername(fd, &sa, &length) < 0) {
+		DEBUG(0,("getpeername failed. Error was %s\n", strerror(errno) ));
+		return addr_buf;
+	}
+	
+	fstrcpy(addr_buf,(char *)inet_ntoa(sockin->sin_addr));
+	
+	return addr_buf;
 }
 
 /*******************************************************************
@@ -1836,18 +1247,18 @@
 	struct stat st;
 	int sock;
 	mode_t old_umask;
-	char *path = NULL;
-
+	pstring path;
+        
 	old_umask = umask(0);
-
+        
 	/* Create the socket directory or reuse the existing one */
-
+        
 	if (lstat(socket_dir, &st) == -1) {
 		if (errno == ENOENT) {
 			/* Create directory */
 			if (mkdir(socket_dir, dir_perms) == -1) {
 				DEBUG(0, ("error creating socket directory "
-					"%s: %s\n", socket_dir,
+					"%s: %s\n", socket_dir, 
 					strerror(errno)));
 				goto out_umask;
 			}
@@ -1863,54 +1274,47 @@
 				socket_dir));
 			goto out_umask;
 		}
-		if ((st.st_uid != sec_initial_uid()) ||
+		if ((st.st_uid != sec_initial_uid()) || 
 				((st.st_mode & 0777) != dir_perms)) {
 			DEBUG(0, ("invalid permissions on socket directory "
 				"%s\n", socket_dir));
 			goto out_umask;
 		}
 	}
-
+        
 	/* Create the socket file */
-
+        
 	sock = socket(AF_UNIX, SOCK_STREAM, 0);
-
+        
 	if (sock == -1) {
-		DEBUG(0, ("create_pipe_sock: socket error %s\n",
-			strerror(errno) ));
-                goto out_close;
+		perror("socket");
+                goto out_umask;
 	}
-
-	if (asprintf(&path, "%s/%s", socket_dir, socket_name) == -1) {
-                goto out_close;
-	}
-
+        
+	pstr_sprintf(path, "%s/%s", socket_dir, socket_name);
+        
 	unlink(path);
 	memset(&sunaddr, 0, sizeof(sunaddr));
 	sunaddr.sun_family = AF_UNIX;
-	strlcpy(sunaddr.sun_path, path, sizeof(sunaddr.sun_path));
-
+	safe_strcpy(sunaddr.sun_path, path, sizeof(sunaddr.sun_path)-1);
+        
 	if (bind(sock, (struct sockaddr *)&sunaddr, sizeof(sunaddr)) == -1) {
 		DEBUG(0, ("bind failed on pipe socket %s: %s\n", path,
 			strerror(errno)));
 		goto out_close;
 	}
-
+        
 	if (listen(sock, 5) == -1) {
 		DEBUG(0, ("listen failed on pipe socket %s: %s\n", path,
 			strerror(errno)));
 		goto out_close;
 	}
-
-	SAFE_FREE(path);
-
+        
 	umask(old_umask);
 	return sock;
 
 out_close:
-	SAFE_FREE(path);
-	if (sock != -1)
-		close(sock);
+	close(sock);
 
 out_umask:
 	umask(old_umask);
@@ -1921,173 +1325,3 @@
         return -1;
 #endif /* HAVE_UNIXSOCKET */
 }
-
-/****************************************************************************
- Get my own canonical name, including domain.
-****************************************************************************/
-
-const char *get_mydnsfullname(void)
-{
-	struct addrinfo *res = NULL;
-	char my_hostname[HOST_NAME_MAX];
-	bool ret;
-	DATA_BLOB tmp;
-
-	if (memcache_lookup(NULL, SINGLETON_CACHE,
-			data_blob_string_const("get_mydnsfullname"),
-			&tmp)) {
-		SMB_ASSERT(tmp.length > 0);
-		return (const char *)tmp.data;
-	}
-
-	/* get my host name */
-	if (gethostname(my_hostname, sizeof(my_hostname)) == -1) {
-		DEBUG(0,("get_mydnsfullname: gethostname failed\n"));
-		return NULL;
-	}
-
-	/* Ensure null termination. */
-	my_hostname[sizeof(my_hostname)-1] = '\0';
-
-	ret = interpret_string_addr_internal(&res,
-				my_hostname,
-				AI_ADDRCONFIG|AI_CANONNAME);
-
-	if (!ret || res == NULL) {
-		DEBUG(3,("get_mydnsfullname: getaddrinfo failed for "
-			"name %s [%s]\n",
-			my_hostname,
-			gai_strerror(ret) ));
-		return NULL;
-	}
-
-	/*
-	 * Make sure that getaddrinfo() returns the "correct" host name.
-	 */
-
-	if (res->ai_canonname == NULL) {
-		DEBUG(3,("get_mydnsfullname: failed to get "
-			"canonical name for %s\n",
-			my_hostname));
-		freeaddrinfo(res);
-		return NULL;
-	}
-
-	/* This copies the data, so we must do a lookup
-	 * afterwards to find the value to return.
-	 */
-
-	memcache_add(NULL, SINGLETON_CACHE,
-			data_blob_string_const("get_mydnsfullname"),
-			data_blob_string_const(res->ai_canonname));
-
-	if (!memcache_lookup(NULL, SINGLETON_CACHE,
-			data_blob_string_const("get_mydnsfullname"),
-			&tmp)) {
-		tmp = data_blob_talloc(talloc_tos(), res->ai_canonname,
-				strlen(res->ai_canonname) + 1);
-	}
-
-	freeaddrinfo(res);
-
-	return (const char *)tmp.data;
-}
-
-/************************************************************
- Is this my name ?
-************************************************************/
-
-bool is_myname_or_ipaddr(const char *s)
-{
-	TALLOC_CTX *ctx = talloc_tos();
-	char *name = NULL;
-	const char *dnsname;
-	char *servername = NULL;
-
-	if (!s) {
-		return false;
-	}
-
-	/* Santize the string from '\\name' */
-	name = talloc_strdup(ctx, s);
-	if (!name) {
-		return false;
-	}
-
-	servername = strrchr_m(name, '\\' );
-	if (!servername) {
-		servername = name;
-	} else {
-		servername++;
-	}
-
-	/* Optimize for the common case */
-	if (strequal(servername, global_myname())) {
-		return true;
-	}
-
-	/* Check for an alias */
-	if (is_myname(servername)) {
-		return true;
-	}
-
-	/* Check for loopback */
-	if (strequal(servername, "127.0.0.1") ||
-			strequal(servername, "::1")) {
-		return true;
-	}
-
-	if (strequal(servername, "localhost")) {
-		return true;
-	}
-
-	/* Maybe it's my dns name */
-	dnsname = get_mydnsfullname();
-	if (dnsname && strequal(servername, dnsname)) {
-		return true;
-	}
-
-	/* Handle possible CNAME records - convert to an IP addr. */
-	if (!is_ipaddress(servername)) {
-		/* Use DNS to resolve the name, but only the first address */
-		struct sockaddr_storage ss;
-		if (interpret_string_addr(&ss, servername,0)) {
-			print_sockaddr(name,
-					sizeof(name),
-					&ss);
-			servername = name;
-		}
-	}
-
-	/* Maybe its an IP address? */
-	if (is_ipaddress(servername)) {
-		struct sockaddr_storage ss;
-		struct iface_struct *nics;
-		int i, n;
-
-		if (!interpret_string_addr(&ss, servername, AI_NUMERICHOST)) {
-			return false;
-		}
-
-		if (is_zero_addr(&ss) || is_loopback_addr(&ss)) {
-			return false;
-		}
-
-		nics = TALLOC_ARRAY(ctx, struct iface_struct,
-					MAX_INTERFACES);
-		if (!nics) {
-			return false;
-		}
-		n = get_interfaces(nics, MAX_INTERFACES);
-		for (i=0; i<n; i++) {
-			if (addr_equal(&nics[i].ip, &ss)) {
-				TALLOC_FREE(nics);
-				return true;
-			}
-		}
-		TALLOC_FREE(nics);
-	}
-
-	/* No match */
-	return false;
-}

Modified: branches/samba/upstream/source/lib/util_str.c
===================================================================
--- branches/samba/upstream/source/lib/util_str.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/util_str.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,153 +1,188 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    Samba utility functions
-
+   
    Copyright (C) Andrew Tridgell 1992-2001
    Copyright (C) Simo Sorce      2001-2002
    Copyright (C) Martin Pool     2003
    Copyright (C) James Peach	 2006
-   Copyright (C) Jeremy Allison  1992-2007
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
-char toupper_ascii_fast_table[128] = {
-	0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf,
-	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
-	0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
-	0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
-	0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
-	0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
-	0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
-	0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f
-};
-
 /**
  * @file
  * @brief String utilities.
  **/
 
-static bool next_token_internal_talloc(TALLOC_CTX *ctx,
-				const char **ptr,
-                                char **pp_buff,
+/**
+ * Internal function to get the next token from a string, return False if none
+ * found.  Handles double-quotes.  This is the work horse function called by
+ * next_token() and next_token_no_ltrim().
+ *
+ * Based on a routine by GJC at VILLAGE.COM. 
+ * Extensively modified by Andrew.Tridgell at anu.edu.au
+ */
+static BOOL next_token_internal(const char **ptr,
+                                char *buff,
                                 const char *sep,
-                                bool ltrim)
+                                size_t bufsize,
+                                BOOL ltrim)
 {
 	char *s;
-	char *saved_s;
 	char *pbuf;
-	bool quoted;
+	BOOL quoted;
 	size_t len=1;
 
-	*pp_buff = NULL;
-	if (!ptr) {
-		return(false);
-	}
+	if (!ptr)
+		return(False);
 
 	s = (char *)*ptr;
 
 	/* default to simple separators */
-	if (!sep) {
+	if (!sep)
 		sep = " \t\n\r";
-	}
 
 	/* find the first non sep char, if left-trimming is requested */
 	if (ltrim) {
-		while (*s && strchr_m(sep,*s)) {
+		while (*s && strchr_m(sep,*s))
 			s++;
-		}
 	}
-
+	
 	/* nothing left? */
-	if (!*s) {
-		return false;
-	}
-
-	/* When restarting we need to go from here. */
-	saved_s = s;
-
-	/* Work out the length needed. */
-	for (quoted = false; *s &&
-			(quoted || !strchr_m(sep,*s)); s++) {
-		if (*s == '\"') {
-			quoted = !quoted;
-		} else {
-			len++;
-		}
-	}
-
-	/* We started with len = 1 so we have space for the nul. */
-	*pp_buff = TALLOC_ARRAY(ctx, char, len);
-	if (!*pp_buff) {
-		return false;
-	}
-
+	if (! *s)
+		return(False);
+	
 	/* copy over the token */
-	pbuf = *pp_buff;
-	s = saved_s;
-	for (quoted = false; *s &&
-			(quoted || !strchr_m(sep,*s)); s++) {
+	pbuf = buff;
+	for (quoted = False; len < bufsize && *s && (quoted || !strchr_m(sep,*s)); s++) {
 		if ( *s == '\"' ) {
 			quoted = !quoted;
 		} else {
+			len++;
 			*pbuf++ = *s;
 		}
 	}
-
-	*ptr = (*s) ? s+1 : s;
+	
+	*ptr = (*s) ? s+1 : s;  
 	*pbuf = 0;
-
-	return true;
+	
+	return(True);
 }
 
-#if 0
 /*
- * Get the next token from a string, return false if none found.  Handles
+ * Get the next token from a string, return False if none found.  Handles
  * double-quotes.  This version trims leading separator characters before
  * looking for a token.
  */
-bool next_token(const char **ptr, char *buff, const char *sep, size_t bufsize)
+BOOL next_token(const char **ptr, char *buff, const char *sep, size_t bufsize)
 {
-	return next_token_internal(ptr, buff, sep, bufsize, true);
+    return next_token_internal(ptr, buff, sep, bufsize, True);
 }
-#endif
 
-bool next_token_talloc(TALLOC_CTX *ctx,
-			const char **ptr,
-			char **pp_buff,
-			const char *sep)
-{
-	return next_token_internal_talloc(ctx, ptr, pp_buff, sep, true);
-}
-
 /*
- * Get the next token from a string, return false if none found.  Handles
+ * Get the next token from a string, return False if none found.  Handles
  * double-quotes.  This version does not trim leading separator characters
  * before looking for a token.
  */
+BOOL next_token_no_ltrim(const char **ptr,
+                         char *buff,
+                         const char *sep,
+                         size_t bufsize)
+{
+    return next_token_internal(ptr, buff, sep, bufsize, False);
+}
 
-bool next_token_no_ltrim_talloc(TALLOC_CTX *ctx,
-			const char **ptr,
-			char **pp_buff,
-			const char *sep)
+/**
+This is like next_token but is not re-entrant and "remembers" the first 
+parameter so you can pass NULL. This is useful for user interface code
+but beware the fact that it is not re-entrant!
+**/
+
+static const char *last_ptr=NULL;
+
+BOOL next_token_nr(const char **ptr,char *buff, const char *sep, size_t bufsize)
 {
-	return next_token_internal_talloc(ctx, ptr, pp_buff, sep, false);
+	BOOL ret;
+	if (!ptr)
+		ptr = &last_ptr;
+
+	ret = next_token(ptr, buff, sep, bufsize);
+	last_ptr = *ptr;
+	return ret;	
 }
 
+static uint16 tmpbuf[sizeof(pstring)];
+
+void set_first_token(char *ptr)
+{
+	last_ptr = ptr;
+}
+
 /**
+ Convert list of tokens to array; dependent on above routine.
+ Uses last_ptr from above - bit of a hack.
+**/
+
+char **toktocliplist(int *ctok, const char *sep)
+{
+	char *s=(char *)last_ptr;
+	int ictok=0;
+	char **ret, **iret;
+
+	if (!sep)
+		sep = " \t\n\r";
+
+	while(*s && strchr_m(sep,*s))
+		s++;
+
+	/* nothing left? */
+	if (!*s)
+		return(NULL);
+
+	do {
+		ictok++;
+		while(*s && (!strchr_m(sep,*s)))
+			s++;
+		while(*s && strchr_m(sep,*s))
+			*s++=0;
+	} while(*s);
+	
+	*ctok=ictok;
+	s=(char *)last_ptr;
+	
+	if (!(ret=iret=SMB_MALLOC_ARRAY(char *,ictok+1)))
+		return NULL;
+	
+	while(ictok--) {    
+		*iret++=s;
+		if (ictok > 0) {
+			while(*s++)
+				;
+			while(!*s)
+				s++;
+		}
+	}
+
+	ret[*ctok] = NULL;
+	return ret;
+}
+
+/**
  * Case insensitive string compararison.
  *
  * iconv does not directly give us a way to compare strings in
@@ -174,7 +209,7 @@
  * different, we'd need to restart the whole thing.
  *
  * Even better is to implement strcasecmp for each encoding and use a
- * function pointer.
+ * function pointer. 
  **/
 int StrCaseCmp(const char *s, const char *t)
 {
@@ -194,12 +229,11 @@
 		else if (!*pt)
 			return +1; /* t is a prefix */
 		else if ((*ps & 0x80) || (*pt & 0x80))
-			/* not ascii anymore, do it the hard way
-			 * from here on in */
+			/* not ascii anymore, do it the hard way from here on in */
 			break;
 
-		us = toupper_ascii_fast(*ps);
-		ut = toupper_ascii_fast(*pt);
+		us = toupper_ascii(*ps);
+		ut = toupper_ascii(*pt);
 		if (us == ut)
 			continue;
 		else if (us < ut)
@@ -210,21 +244,19 @@
 
 	size = push_ucs2_allocate(&buffer_s, ps);
 	if (size == (size_t)-1) {
-		return strcmp(ps, pt);
+		return strcmp(ps, pt); 
 		/* Not quite the right answer, but finding the right one
-		   under this failure case is expensive, and it's pretty
-		   close */
+		   under this failure case is expensive, and it's pretty close */
 	}
-
+	
 	size = push_ucs2_allocate(&buffer_t, pt);
 	if (size == (size_t)-1) {
 		SAFE_FREE(buffer_s);
-		return strcmp(ps, pt);
+		return strcmp(ps, pt); 
 		/* Not quite the right answer, but finding the right one
-		   under this failure case is expensive, and it's pretty
-		   close */
+		   under this failure case is expensive, and it's pretty close */
 	}
-
+	
 	ret = strcasecmp_w(buffer_s, buffer_t);
 	SAFE_FREE(buffer_s);
 	SAFE_FREE(buffer_t);
@@ -235,63 +267,12 @@
 /**
  Case insensitive string compararison, length limited.
 **/
-int StrnCaseCmp(const char *s, const char *t, size_t len)
+int StrnCaseCmp(const char *s, const char *t, size_t n)
 {
-	size_t n = 0;
-	const char *ps, *pt;
-	size_t size;
-	smb_ucs2_t *buffer_s, *buffer_t;
-	int ret;
-
-	for (ps = s, pt = t; n < len ; ps++, pt++, n++) {
-		char us, ut;
-
-		if (!*ps && !*pt)
-			return 0; /* both ended */
- 		else if (!*ps)
-			return -1; /* s is a prefix */
-		else if (!*pt)
-			return +1; /* t is a prefix */
-		else if ((*ps & 0x80) || (*pt & 0x80))
-			/* not ascii anymore, do it the
-			 * hard way from here on in */
-			break;
-
-		us = toupper_ascii_fast(*ps);
-		ut = toupper_ascii_fast(*pt);
-		if (us == ut)
-			continue;
-		else if (us < ut)
-			return -1;
-		else if (us > ut)
-			return +1;
-	}
-
-	if (n == len) {
-		return 0;
-	}
-
-	size = push_ucs2_allocate(&buffer_s, ps);
-	if (size == (size_t)-1) {
-		return strncmp(ps, pt, len-n);
-		/* Not quite the right answer, but finding the right one
-		   under this failure case is expensive,
-		   and it's pretty close */
-	}
-
-	size = push_ucs2_allocate(&buffer_t, pt);
-	if (size == (size_t)-1) {
-		SAFE_FREE(buffer_s);
-		return strncmp(ps, pt, len-n);
-		/* Not quite the right answer, but finding the right one
-		   under this failure case is expensive,
-		   and it's pretty close */
-	}
-
-	ret = strncasecmp_w(buffer_s, buffer_t, len-n);
-	SAFE_FREE(buffer_s);
-	SAFE_FREE(buffer_t);
-	return ret;
+	pstring buf1, buf2;
+	unix_strupper(s, strlen(s)+1, buf1, sizeof(buf1));
+	unix_strupper(t, strlen(t)+1, buf2, sizeof(buf2));
+	return strncmp(buf1,buf2,n);
 }
 
 /**
@@ -299,13 +280,13 @@
  *
  * @note The comparison is case-insensitive.
  **/
-bool strequal(const char *s1, const char *s2)
+BOOL strequal(const char *s1, const char *s2)
 {
 	if (s1 == s2)
-		return(true);
+		return(True);
 	if (!s1 || !s2)
-		return(false);
-
+		return(False);
+  
 	return(StrCaseCmp(s1,s2)==0);
 }
 
@@ -314,13 +295,13 @@
  *
  * @note The comparison is case-insensitive.
  **/
-bool strnequal(const char *s1,const char *s2,size_t n)
+BOOL strnequal(const char *s1,const char *s2,size_t n)
 {
 	if (s1 == s2)
-		return(true);
+		return(True);
 	if (!s1 || !s2 || !n)
-		return(false);
-
+		return(False);
+  
 	return(StrnCaseCmp(s1,s2,n)==0);
 }
 
@@ -328,13 +309,13 @@
  Compare 2 strings (case sensitive).
 **/
 
-bool strcsequal(const char *s1,const char *s2)
+BOOL strcsequal(const char *s1,const char *s2)
 {
 	if (s1 == s2)
-		return(true);
+		return(True);
 	if (!s1 || !s2)
-		return(false);
-
+		return(False);
+  
 	return(strcmp(s1,s2)==0);
 }
 
@@ -359,8 +340,8 @@
 			psz1++;
 		while (isspace((int)*psz2))
 			psz2++;
-		if (toupper_ascii(*psz1) != toupper_ascii(*psz2) ||
-				*psz1 == '\0' || *psz2 == '\0')
+		if (toupper_ascii(*psz1) != toupper_ascii(*psz2) || *psz1 == '\0'
+		    || *psz2 == '\0')
 			break;
 		psz1++;
 		psz2++;
@@ -368,7 +349,22 @@
 	return (*psz1 - *psz2);
 }
 
+
 /**
+ Convert a string to upper case, but don't modify it.
+**/
+
+char *strupper_static(const char *s)
+{
+	static pstring str;
+
+	pstrcpy(str, s);
+	strupper_m(str);
+
+	return str;
+}
+
+/**
  Convert a string to "normal" form.
 **/
 
@@ -384,11 +380,11 @@
  Check if a string is in "normal" case.
 **/
 
-bool strisnormal(const char *s, int case_default)
+BOOL strisnormal(const char *s, int case_default)
 {
 	if (case_default == CASE_UPPER)
 		return(!strhaslower(s));
-
+	
 	return(!strhasupper(s));
 }
 
@@ -397,6 +393,11 @@
  String replace.
  NOTE: oldc and newc must be 7 bit characters
 **/
+
+/**
+ String replace.
+ NOTE: oldc and newc must be 7 bit characters
+**/
 void string_replace( char *s, char oldc, char newc )
 {
 	char *p;
@@ -480,14 +481,9 @@
 
 size_t str_charnum(const char *s)
 {
-	size_t ret;
-	smb_ucs2_t *tmpbuf2 = NULL;
-	if (push_ucs2_allocate(&tmpbuf2, s) == (size_t)-1) {
-		return 0;
-	}
-	ret = strlen_w(tmpbuf2);
-	SAFE_FREE(tmpbuf2);
-	return ret;
+	uint16 tmpbuf2[sizeof(pstring)];
+	push_ucs2(NULL, tmpbuf2,s, sizeof(tmpbuf2), STR_TERMINATE);
+	return strlen_w(tmpbuf2);
 }
 
 /**
@@ -498,25 +494,20 @@
 
 size_t str_ascii_charnum(const char *s)
 {
-	size_t ret;
-	char *tmpbuf2 = NULL;
-	if (push_ascii_allocate(&tmpbuf2, s) == (size_t)-1) {
-		return 0;
-	}
-	ret = strlen(tmpbuf2);
-	SAFE_FREE(tmpbuf2);
-	return ret;
+	pstring tmpbuf2;
+	push_ascii(tmpbuf2, s, sizeof(tmpbuf2), STR_TERMINATE);
+	return strlen(tmpbuf2);
 }
 
-bool trim_char(char *s,char cfront,char cback)
+BOOL trim_char(char *s,char cfront,char cback)
 {
-	bool ret = false;
+	BOOL ret = False;
 	char *ep;
 	char *fp = s;
 
 	/* Ignore null or empty strings. */
 	if (!s || (s[0] == '\0'))
-		return false;
+		return False;
 
 	if (cfront) {
 		while (*fp && *fp == cfront)
@@ -524,17 +515,17 @@
 		if (!*fp) {
 			/* We ate the string. */
 			s[0] = '\0';
-			return true;
+			return True;
 		}
 		if (fp != s)
-			ret = true;
+			ret = True;
 	}
 
 	ep = fp + strlen(fp) - 1;
 	if (cback) {
 		/* Attempt ascii only. Bail for mb strings. */
 		while ((ep >= fp) && (*ep == cback)) {
-			ret = true;
+			ret = True;
 			if ((ep > fp) && (((unsigned char)ep[-1]) & 0x80)) {
 				/* Could be mb... bail back to tim_string. */
 				char fs[2], bs[2];
@@ -552,7 +543,7 @@
 		if (ep < fp) {
 			/* We ate the string. */
 			s[0] = '\0';
-			return true;
+			return True;
 		}
 	}
 
@@ -565,16 +556,16 @@
  Trim the specified elements off the front and back of a string.
 **/
 
-bool trim_string(char *s,const char *front,const char *back)
+BOOL trim_string(char *s,const char *front,const char *back)
 {
-	bool ret = false;
+	BOOL ret = False;
 	size_t front_len;
 	size_t back_len;
 	size_t len;
 
 	/* Ignore null or empty strings. */
 	if (!s || (s[0] == '\0'))
-		return false;
+		return False;
 
 	front_len	= front? strlen(front) : 0;
 	back_len	= back? strlen(back) : 0;
@@ -587,16 +578,15 @@
 			 * easily overlap. Found by valgrind. JRA. */
 			memmove(s, s+front_len, (len-front_len)+1);
 			len -= front_len;
-			ret=true;
+			ret=True;
 		}
 	}
-
+	
 	if (back_len) {
-		while ((len >= back_len) &&
-				strncmp(s+len-back_len,back,back_len)==0) {
+		while ((len >= back_len) && strncmp(s+len-back_len,back,back_len)==0) {
 			s[len-back_len]='\0';
 			len -= back_len;
-			ret=true;
+			ret=True;
 		}
 	}
 	return ret;
@@ -606,48 +596,28 @@
  Does a string have any uppercase chars in it?
 **/
 
-bool strhasupper(const char *s)
+BOOL strhasupper(const char *s)
 {
-	smb_ucs2_t *tmp, *p;
-	bool ret;
-
-	if (push_ucs2_allocate(&tmp, s) == -1) {
-		return false;
-	}
-
-	for(p = tmp; *p != 0; p++) {
-		if(isupper_w(*p)) {
-			break;
-		}
-	}
-
-	ret = (*p != 0);
-	SAFE_FREE(tmp);
-	return ret;
+	smb_ucs2_t *ptr;
+	push_ucs2(NULL, tmpbuf,s, sizeof(tmpbuf), STR_TERMINATE);
+	for(ptr=tmpbuf;*ptr;ptr++)
+		if(isupper_w(*ptr))
+			return True;
+	return(False);
 }
 
 /**
  Does a string have any lowercase chars in it?
 **/
 
-bool strhaslower(const char *s)
+BOOL strhaslower(const char *s)
 {
-	smb_ucs2_t *tmp, *p;
-	bool ret;
-
-	if (push_ucs2_allocate(&tmp, s) == -1) {
-		return false;
-	}
-
-	for(p = tmp; *p != 0; p++) {
-		if(islower_w(*p)) {
-			break;
-		}
-	}
-
-	ret = (*p != 0);
-	SAFE_FREE(tmp);
-	return ret;
+	smb_ucs2_t *ptr;
+	push_ucs2(NULL, tmpbuf,s, sizeof(tmpbuf), STR_TERMINATE);
+	for(ptr=tmpbuf;*ptr;ptr++)
+		if(islower_w(*ptr))
+			return True;
+	return(False);
 }
 
 /**
@@ -677,17 +647,12 @@
  include the terminating zero.
 **/
 
-char *safe_strcpy_fn(const char *fn,
-		int line,
-		char *dest,
-		const char *src,
-		size_t maxlength)
+char *safe_strcpy_fn(const char *fn, int line, char *dest,const char *src, size_t maxlength)
 {
 	size_t len;
 
 	if (!dest) {
-		DEBUG(0,("ERROR: NULL dest in safe_strcpy, "
-			"called from [%s][%d]\n", fn, line));
+		DEBUG(0,("ERROR: NULL dest in safe_strcpy, called from [%s][%d]\n", fn, line));
 		return NULL;
 	}
 
@@ -698,44 +663,38 @@
 	if (!src) {
 		*dest = 0;
 		return dest;
-	}
+	}  
 
 	len = strnlen(src, maxlength+1);
 
 	if (len > maxlength) {
-		DEBUG(0,("ERROR: string overflow by "
-			"%lu (%lu - %lu) in safe_strcpy [%.50s]\n",
-			 (unsigned long)(len-maxlength), (unsigned long)len,
+		DEBUG(0,("ERROR: string overflow by %lu (%lu - %lu) in safe_strcpy [%.50s]\n",
+			 (unsigned long)(len-maxlength), (unsigned long)len, 
 			 (unsigned long)maxlength, src));
 		len = maxlength;
 	}
-
+      
 	memmove(dest, src, len);
 	dest[len] = 0;
 	return dest;
-}
+}  
 
 /**
  Safe string cat into a string. maxlength does not
  include the terminating zero.
 **/
-char *safe_strcat_fn(const char *fn,
-		int line,
-		char *dest,
-		const char *src,
-		size_t maxlength)
+char *safe_strcat_fn(const char *fn, int line, char *dest, const char *src, size_t maxlength)
 {
 	size_t src_len, dest_len;
 
 	if (!dest) {
-		DEBUG(0,("ERROR: NULL dest in safe_strcat, "
-			"called from [%s][%d]\n", fn, line));
+		DEBUG(0,("ERROR: NULL dest in safe_strcat, called from [%s][%d]\n", fn, line));
 		return NULL;
 	}
 
 	if (!src)
 		return dest;
-
+	
 	src_len = strnlen(src, maxlength + 1);
 	dest_len = strnlen(dest, maxlength + 1);
 
@@ -744,8 +703,7 @@
 #endif
 
 	if (src_len + dest_len > maxlength) {
-		DEBUG(0,("ERROR: string overflow by %d "
-			"in safe_strcat [%.50s]\n",
+		DEBUG(0,("ERROR: string overflow by %d in safe_strcat [%.50s]\n",
 			 (int)(src_len + dest_len - maxlength), src));
 		if (maxlength > dest_len) {
 			memcpy(&dest[dest_len], src, maxlength - dest_len);
@@ -765,13 +723,7 @@
  and replaces with '_'. Deliberately does *NOT* check for multibyte
  characters. Don't change it !
 **/
-
-char *alpha_strcpy_fn(const char *fn,
-		int line,
-		char *dest,
-		const char *src,
-		const char *other_safe_chars,
-		size_t maxlength)
+char *alpha_strcpy_fn(const char *fn, int line, char *dest, const char *src, const char *other_safe_chars, size_t maxlength)
 {
 	size_t len, i;
 
@@ -780,15 +732,14 @@
 #endif
 
 	if (!dest) {
-		DEBUG(0,("ERROR: NULL dest in alpha_strcpy, "
-			"called from [%s][%d]\n", fn, line));
+		DEBUG(0,("ERROR: NULL dest in alpha_strcpy, called from [%s][%d]\n", fn, line));
 		return NULL;
 	}
 
 	if (!src) {
 		*dest = 0;
 		return dest;
-	}
+	}  
 
 	len = strlen(src);
 	if (len >= maxlength)
@@ -799,8 +750,7 @@
 
 	for(i = 0; i < len; i++) {
 		int val = (src[i] & 0xff);
-		if (isupper_ascii(val) || islower_ascii(val) ||
-				isdigit(val) || strchr_m(other_safe_chars, val))
+		if (isupper_ascii(val) || islower_ascii(val) || isdigit(val) || strchr_m(other_safe_chars, val))
 			dest[i] = src[i];
 		else
 			dest[i] = '_';
@@ -824,8 +774,7 @@
 #endif
 
 	if (!dest) {
-		DEBUG(0,("ERROR: NULL dest in StrnCpy, "
-			"called from [%s][%d]\n", fn, line));
+		DEBUG(0,("ERROR: NULL dest in StrnCpy, called from [%s][%d]\n", fn, line));
 		return(NULL);
 	}
 
@@ -833,7 +782,7 @@
 		*dest = 0;
 		return(dest);
 	}
-
+	
 	while (n-- && (*d = *src)) {
 		d++;
 		src++;
@@ -881,7 +830,7 @@
 
 **/
 
-size_t strhex_to_str(char *buf, size_t buf_len, const char *strhex, size_t strhex_len)
+size_t strhex_to_str(char *p, size_t len, const char *strhex)
 {
 	size_t i;
 	size_t num_chars = 0;
@@ -889,7 +838,7 @@
 	const char     *hexchars = "0123456789ABCDEF";
 	char           *p1 = NULL, *p2 = NULL;
 
-	for (i = 0; i < strhex_len && strhex[i] != 0; i++) {
+	for (i = 0; i < len && strhex[i] != 0; i++) {
 		if (strnequal(hexchars, "0x", 2)) {
 			i++; /* skip two chars */
 			continue;
@@ -907,10 +856,7 @@
 		hinybble = PTR_DIFF(p1, hexchars);
 		lonybble = PTR_DIFF(p2, hexchars);
 
-		if (num_chars >= buf_len) {
-			break;
-		}
-		buf[num_chars] = (hinybble << 4) | lonybble;
+		p[num_chars] = (hinybble << 4) | lonybble;
 		num_chars++;
 
 		p1 = NULL;
@@ -919,7 +865,7 @@
 	return num_chars;
 }
 
-DATA_BLOB strhex_to_data_blob(TALLOC_CTX *mem_ctx, const char *strhex)
+DATA_BLOB strhex_to_data_blob(TALLOC_CTX *mem_ctx, const char *strhex) 
 {
 	DATA_BLOB ret_blob;
 
@@ -928,10 +874,9 @@
 	else
 		ret_blob = data_blob(NULL, strlen(strhex)/2+1);
 
-	ret_blob.length = strhex_to_str((char*)ret_blob.data,
-					ret_blob.length,
-					strhex,
-					strlen(strhex));
+	ret_blob.length = strhex_to_str((char*)ret_blob.data, 	
+					strlen(strhex), 
+					strhex);
 
 	return ret_blob;
 }
@@ -957,46 +902,38 @@
  Check if a string is part of a list.
 **/
 
-bool in_list(const char *s, const char *list, bool casesensitive)
+BOOL in_list(const char *s, const char *list, BOOL casesensitive)
 {
-	char *tok = NULL;
-	bool ret = false;
-	TALLOC_CTX *frame;
+	pstring tok;
+	const char *p=list;
 
-	if (!list) {
-		return false;
-	}
+	if (!list)
+		return(False);
 
-	frame = talloc_stackframe();
-	while (next_token_talloc(frame, &list, &tok,LIST_SEP)) {
+	while (next_token(&p,tok,LIST_SEP,sizeof(tok))) {
 		if (casesensitive) {
-			if (strcmp(tok,s) == 0) {
-				ret = true;
-				break;
-			}
+			if (strcmp(tok,s) == 0)
+				return(True);
 		} else {
-			if (StrCaseCmp(tok,s) == 0) {
-				ret = true;
-				break;
-			}
+			if (StrCaseCmp(tok,s) == 0)
+				return(True);
 		}
 	}
-	TALLOC_FREE(frame);
-	return ret;
+	return(False);
 }
 
 /* this is used to prevent lots of mallocs of size 1 */
-static const char null_string[] = "";
+static const char *null_string = "";
 
 /**
  Set a string value, allocing the space for the string
 **/
 
-static bool string_init(char **dest,const char *src)
+static BOOL string_init(char **dest,const char *src)
 {
 	size_t l;
 
-	if (!src)
+	if (!src)     
 		src = "";
 
 	l = strlen(src);
@@ -1007,10 +944,10 @@
 		(*dest) = SMB_STRDUP(src);
 		if ((*dest) == NULL) {
 			DEBUG(0,("Out of memory in string_init\n"));
-			return false;
+			return False;
 		}
 	}
-	return(true);
+	return(True);
 }
 
 /**
@@ -1031,17 +968,17 @@
  for the string
 **/
 
-bool string_set(char **dest,const char *src)
+BOOL string_set(char **dest,const char *src)
 {
 	string_free(dest);
 	return(string_init(dest,src));
 }
 
 /**
- Substitute a string for a pattern in another string. Make sure there is
+ Substitute a string for a pattern in another string. Make sure there is 
  enough room!
 
- This routine looks for pattern in s and replaces it with
+ This routine looks for pattern in s and replaces it with 
  insert. It may do multiple replacements or just one.
 
  Any of " ; ' $ or ` in the insert string are replaced with _
@@ -1049,9 +986,8 @@
  use of len==0 which was for no length checks to be done.
 **/
 
-void string_sub2(char *s,const char *pattern, const char *insert, size_t len,
-		 bool remove_unsafe_characters, bool replace_once,
-		 bool allow_trailing_dollar)
+void string_sub2(char *s,const char *pattern, const char *insert, size_t len, 
+		 BOOL remove_unsafe_characters, BOOL replace_once, BOOL allow_trailing_dollar)
 {
 	char *p;
 	ssize_t ls,lp,li, i;
@@ -1068,8 +1004,7 @@
 
 	while (lp <= ls && (p = strstr_m(s,pattern))) {
 		if (ls + (li-lp) >= len) {
-			DEBUG(0,("ERROR: string overflow by "
-				"%d in string_sub(%.50s, %d)\n",
+			DEBUG(0,("ERROR: string overflow by %d in string_sub(%.50s, %d)\n", 
 				 (int)(ls + (li-lp) - len),
 				 pattern, (int)len));
 			break;
@@ -1084,8 +1019,7 @@
 			case '\'':
 			case ';':
 			case '$':
-				/* allow a trailing $
-				 * (as in machine accounts) */
+				/* allow a trailing $ (as in machine accounts) */
 				if (allow_trailing_dollar && (i == li - 1 )) {
 					p[i] = insert[i];
 					break;
@@ -1095,9 +1029,8 @@
 			case '\n':
 				if ( remove_unsafe_characters ) {
 					p[i] = '_';
-					/* yes this break should be here
-					 * since we want to fall throw if
-					 * not replacing unsafe chars */
+					/* yes this break should be here since we want to 
+					   fall throw if not replacing unsafe chars */
 					break;
 				}
 			default:
@@ -1112,15 +1045,14 @@
 	}
 }
 
-void string_sub_once(char *s, const char *pattern,
-		const char *insert, size_t len)
+void string_sub_once(char *s, const char *pattern, const char *insert, size_t len)
 {
-	string_sub2( s, pattern, insert, len, true, true, false );
+	string_sub2( s, pattern, insert, len, True, True, False );
 }
 
 void string_sub(char *s,const char *pattern, const char *insert, size_t len)
 {
-	string_sub2( s, pattern, insert, len, true, false, false );
+	string_sub2( s, pattern, insert, len, True, False, False );
 }
 
 void fstring_sub(char *s,const char *pattern,const char *insert)
@@ -1128,18 +1060,20 @@
 	string_sub(s, pattern, insert, sizeof(fstring));
 }
 
+void pstring_sub(char *s,const char *pattern,const char *insert)
+{
+	string_sub(s, pattern, insert, sizeof(pstring));
+}
+
 /**
- Similar to string_sub2, but it will accept only allocated strings
+ Similar to string_sub, but it will accept only allocated strings
  and may realloc them so pay attention at what you pass on no
- pointers inside strings, no const may be passed
+ pointers inside strings, no pstrings or const may be passed
  as string.
 **/
 
-char *realloc_string_sub2(char *string,
-			const char *pattern,
-			const char *insert,
-			bool remove_unsafe_characters,
-			bool allow_trailing_dollar)
+char *realloc_string_sub(char *string, const char *pattern,
+			 const char *insert)
 {
 	char *p, *in;
 	char *s;
@@ -1166,31 +1100,22 @@
 			case '\'':
 			case ';':
 			case '$':
-				/* allow a trailing $
-				 * (as in machine accounts) */
-				if (allow_trailing_dollar && (i == li - 1 )) {
-					break;
-				}
 			case '%':
 			case '\r':
 			case '\n':
-				if ( remove_unsafe_characters ) {
-					in[i] = '_';
-					break;
-				}
+				in[i] = '_';
 			default:
 				/* ok */
 				break;
 		}
 	}
-
+	
 	while ((p = strstr_m(s,pattern))) {
 		if (ld > 0) {
 			int offset = PTR_DIFF(s,string);
 			string = (char *)SMB_REALLOC(string, ls + ld + 1);
 			if (!string) {
-				DEBUG(0, ("realloc_string_sub: "
-					"out of memory!\n"));
+				DEBUG(0, ("realloc_string_sub: out of memory!\n"));
 				SAFE_FREE(in);
 				return NULL;
 			}
@@ -1207,38 +1132,22 @@
 	return string;
 }
 
-char *realloc_string_sub(char *string,
-			const char *pattern,
-			const char *insert)
-{
-	return realloc_string_sub2(string, pattern, insert, true, false);
-}
+/* Same as string_sub, but returns a talloc'ed string */
 
-/*
- * Internal guts of talloc_string_sub and talloc_all_string_sub.
- * talloc version of string_sub2.
- */
-
-char *talloc_string_sub2(TALLOC_CTX *mem_ctx, const char *src,
-			const char *pattern,
-			const char *insert,
-			bool remove_unsafe_characters,
-			bool replace_once,
-			bool allow_trailing_dollar)
+char *talloc_string_sub(TALLOC_CTX *mem_ctx, const char *src,
+			const char *pattern, const char *insert)
 {
 	char *p, *in;
 	char *s;
 	char *string;
 	ssize_t ls,lp,li,ld, i;
 
-	if (!insert || !pattern || !*pattern || !src || !*src) {
+	if (!insert || !pattern || !*pattern || !src || !*src)
 		return NULL;
-	}
 
 	string = talloc_strdup(mem_ctx, src);
 	if (string == NULL) {
-		DEBUG(0, ("talloc_string_sub2: "
-			"talloc_strdup failed\n"));
+		DEBUG(0, ("talloc_strdup failed\n"));
 		return NULL;
 	}
 
@@ -1246,14 +1155,13 @@
 
 	in = SMB_STRDUP(insert);
 	if (!in) {
-		DEBUG(0, ("talloc_string_sub2: ENOMEM\n"));
+		DEBUG(0, ("talloc_string_sub: out of memory!\n"));
 		return NULL;
 	}
 	ls = (ssize_t)strlen(s);
 	lp = (ssize_t)strlen(pattern);
 	li = (ssize_t)strlen(insert);
 	ld = li - lp;
-
 	for (i=0;i<li;i++) {
 		switch (in[i]) {
 			case '`':
@@ -1261,24 +1169,16 @@
 			case '\'':
 			case ';':
 			case '$':
-				/* allow a trailing $
-				 * (as in machine accounts) */
-				if (allow_trailing_dollar && (i == li - 1 )) {
-					break;
-				}
 			case '%':
 			case '\r':
 			case '\n':
-				if (remove_unsafe_characters) {
-					in[i] = '_';
-					break;
-				}
+				in[i] = '_';
 			default:
 				/* ok */
 				break;
 		}
 	}
-
+	
 	while ((p = strstr_m(s,pattern))) {
 		if (ld > 0) {
 			int offset = PTR_DIFF(s,string);
@@ -1298,28 +1198,13 @@
 		memcpy(p, in, li);
 		s = p + li;
 		ls += ld;
-
-		if (replace_once) {
-			break;
-		}
 	}
 	SAFE_FREE(in);
 	return string;
 }
 
-/* Same as string_sub, but returns a talloc'ed string */
-
-char *talloc_string_sub(TALLOC_CTX *mem_ctx,
-			const char *src,
-			const char *pattern,
-			const char *insert)
-{
-	return talloc_string_sub2(mem_ctx, src, pattern, insert,
-			true, false, false);
-}
-
 /**
- Similar to string_sub() but allows for any character to be substituted.
+ Similar to string_sub() but allows for any character to be substituted. 
  Use with caution!
  if len==0 then the string cannot be extended. This is different from the old
  use of len==0 which was for no length checks to be done.
@@ -1339,14 +1224,13 @@
 
 	if (!*pattern)
 		return;
-
+	
 	if (len == 0)
 		len = ls + 1; /* len is number of *bytes* */
-
+	
 	while (lp <= ls && (p = strstr_m(s,pattern))) {
 		if (ls + (li-lp) >= len) {
-			DEBUG(0,("ERROR: string overflow by "
-				"%d in all_string_sub(%.50s, %d)\n",
+			DEBUG(0,("ERROR: string overflow by %d in all_string_sub(%.50s, %d)\n", 
 				 (int)(ls + (li-lp) - len),
 				 pattern, (int)len));
 			break;
@@ -1360,33 +1244,111 @@
 	}
 }
 
-char *talloc_all_string_sub(TALLOC_CTX *ctx,
-				const char *src,
-				const char *pattern,
-				const char *insert)
+/**
+ Similar to all_string_sub but for unicode strings.
+ Return a new allocated unicode string.
+ similar to string_sub() but allows for any character to be substituted.
+ Use with caution!
+**/
+
+static smb_ucs2_t *all_string_sub_w(const smb_ucs2_t *s, const smb_ucs2_t *pattern,
+				const smb_ucs2_t *insert)
 {
-	return talloc_string_sub2(ctx, src, pattern, insert,
-			false, false, false);
+	smb_ucs2_t *r, *rp;
+	const smb_ucs2_t *sp;
+	size_t	lr, lp, li, lt;
+
+	if (!insert || !pattern || !*pattern || !s)
+		return NULL;
+
+	lt = (size_t)strlen_w(s);
+	lp = (size_t)strlen_w(pattern);
+	li = (size_t)strlen_w(insert);
+
+	if (li > lp) {
+		const smb_ucs2_t *st = s;
+		int ld = li - lp;
+		while ((sp = strstr_w(st, pattern))) {
+			st = sp + lp;
+			lt += ld;
+		}
+	}
+
+	r = rp = SMB_MALLOC_ARRAY(smb_ucs2_t, lt + 1);
+	if (!r) {
+		DEBUG(0, ("all_string_sub_w: out of memory!\n"));
+		return NULL;
+	}
+
+	while ((sp = strstr_w(s, pattern))) {
+		memcpy(rp, s, (sp - s));
+		rp += ((sp - s) / sizeof(smb_ucs2_t));
+		memcpy(rp, insert, (li * sizeof(smb_ucs2_t)));
+		s = sp + lp;
+		rp += li;
+	}
+	lr = ((rp - r) / sizeof(smb_ucs2_t));
+	if (lr < lt) {
+		memcpy(rp, s, ((lt - lr) * sizeof(smb_ucs2_t)));
+		rp += (lt - lr);
+	}
+	*rp = 0;
+
+	return r;
 }
 
+smb_ucs2_t *all_string_sub_wa(smb_ucs2_t *s, const char *pattern,
+					     const char *insert)
+{
+	wpstring p, i;
+
+	if (!insert || !pattern || !s)
+		return NULL;
+	push_ucs2(NULL, p, pattern, sizeof(wpstring) - 1, STR_TERMINATE);
+	push_ucs2(NULL, i, insert, sizeof(wpstring) - 1, STR_TERMINATE);
+	return all_string_sub_w(s, p, i);
+}
+
+#if 0
 /**
- Write an octal as a string.
+ Splits out the front and back at a separator.
 **/
 
-char *octal_string(int i)
+static void split_at_last_component(char *path, char *front, char sep, char *back)
 {
-	char *result;
-	if (i == -1) {
-		result = talloc_strdup(talloc_tos(), "-1");
+	char *p = strrchr_m(path, sep);
+
+	if (p != NULL)
+		*p = 0;
+
+	if (front != NULL)
+		pstrcpy(front, path);
+
+	if (p != NULL) {
+		if (back != NULL)
+			pstrcpy(back, p+1);
+		*p = '\\';
+	} else {
+		if (back != NULL)
+			back[0] = 0;
 	}
-	else {
-		result = talloc_asprintf(talloc_tos(), "0%o", i);
-	}
-	SMB_ASSERT(result != NULL);
-	return result;
 }
+#endif
 
+/**
+ Write an octal as a string.
+**/
 
+const char *octal_string(int i)
+{
+	static char ret[64];
+	if (i == -1)
+		return "-1";
+	slprintf(ret, sizeof(ret)-1, "0%o", i);
+	return ret;
+}
+
+
 /**
  Truncate a string at a specified length.
 **/
@@ -1399,17 +1361,16 @@
 }
 
 /**
- Strchr and strrchr_m are very hard to do on general multi-byte strings.
+ Strchr and strrchr_m are very hard to do on general multi-byte strings. 
  We convert via ucs2 for now.
 **/
 
 char *strchr_m(const char *src, char c)
 {
-	smb_ucs2_t *ws = NULL;
-	char *s2 = NULL;
+	wpstring ws;
+	pstring s2;
 	smb_ucs2_t *p;
 	const char *s;
-	char *ret;
 
 	/* characters below 0x3F are guaranteed to not appear in
 	   non-initial position in multi-byte charsets */
@@ -1435,25 +1396,13 @@
 	s = src;
 #endif
 
-	if (push_ucs2_allocate(&ws, s)==(size_t)-1) {
-		/* Wrong answer, but what can we do... */
-		return strchr(src, c);
-	}
+	push_ucs2(NULL, ws, s, sizeof(ws), STR_TERMINATE);
 	p = strchr_w(ws, UCS2_CHAR(c));
-	if (!p) {
-		SAFE_FREE(ws);
+	if (!p)
 		return NULL;
-	}
 	*p = 0;
-	if (pull_ucs2_allocate(&s2, ws)==(size_t)-1) {
-		SAFE_FREE(ws);
-		/* Wrong answer, but what can we do... */
-		return strchr(src, c);
-	}
-	ret = (char *)(s+strlen(s2));
-	SAFE_FREE(ws);
-	SAFE_FREE(s2);
-	return ret;
+	pull_ucs2_pstring(s2, ws);
+	return (char *)(s+strlen(s2));
 }
 
 char *strrchr_m(const char *s, char c)
@@ -1476,7 +1425,7 @@
 	{
 		size_t len = strlen(s);
 		const char *cp = s;
-		bool got_mb = false;
+		BOOL got_mb = False;
 
 		if (len == 0)
 			return NULL;
@@ -1484,10 +1433,9 @@
 		do {
 			if (c == *cp) {
 				/* Could be a match. Part of a multibyte ? */
-			       	if ((cp > s) &&
-					(((unsigned char)cp[-1]) & 0x80)) {
+			       	if ((cp > s) && (((unsigned char)cp[-1]) & 0x80)) {
 					/* Yep - go slow :-( */
-					got_mb = true;
+					got_mb = True;
 					break;
 				}
 				/* No - we have a match ! */
@@ -1500,30 +1448,17 @@
 
 	/* String contained a non-ascii char. Slow path. */
 	{
-		smb_ucs2_t *ws = NULL;
-		char *s2 = NULL;
+		wpstring ws;
+		pstring s2;
 		smb_ucs2_t *p;
-		char *ret;
 
-		if (push_ucs2_allocate(&ws,s)==(size_t)-1) {
-			/* Wrong answer, but what can we do. */
-			return strrchr(s, c);
-		}
+		push_ucs2(NULL, ws, s, sizeof(ws), STR_TERMINATE);
 		p = strrchr_w(ws, UCS2_CHAR(c));
-		if (!p) {
-			SAFE_FREE(ws);
+		if (!p)
 			return NULL;
-		}
 		*p = 0;
-		if (pull_ucs2_allocate(&s2,ws)==(size_t)-1) {
-			SAFE_FREE(ws);
-			/* Wrong answer, but what can we do. */
-			return strrchr(s, c);
-		}
-		ret = (char *)(s+strlen(s2));
-		SAFE_FREE(ws);
-		SAFE_FREE(s2);
-		return ret;
+		pull_ucs2_pstring(s2, ws);
+		return (char *)(s+strlen(s2));
 	}
 }
 
@@ -1534,30 +1469,17 @@
 
 char *strnrchr_m(const char *s, char c, unsigned int n)
 {
-	smb_ucs2_t *ws = NULL;
-	char *s2 = NULL;
+	wpstring ws;
+	pstring s2;
 	smb_ucs2_t *p;
-	char *ret;
 
-	if (push_ucs2_allocate(&ws,s)==(size_t)-1) {
-		/* Too hard to try and get right. */
-		return NULL;
-	}
+	push_ucs2(NULL, ws, s, sizeof(ws), STR_TERMINATE);
 	p = strnrchr_w(ws, UCS2_CHAR(c), n);
-	if (!p) {
-		SAFE_FREE(ws);
+	if (!p)
 		return NULL;
-	}
 	*p = 0;
-	if (pull_ucs2_allocate(&s2,ws)==(size_t)-1) {
-		SAFE_FREE(ws);
-		/* Too hard to try and get right. */
-		return NULL;
-	}
-	ret = (char *)(s+strlen(s2));
-	SAFE_FREE(ws);
-	SAFE_FREE(s2);
-	return ret;
+	pull_ucs2_pstring(s2, ws);
+	return (char *)(s+strlen(s2));
 }
 
 /***********************************************************************
@@ -1589,7 +1511,7 @@
 
 	for (s = src; *s && !(((unsigned char)s[0]) & 0x80); s++) {
 		if (*s == *findstr) {
-			if (!findstr_len)
+			if (!findstr_len) 
 				findstr_len = strlen(findstr);
 
 			if (strncmp(s, findstr, findstr_len) == 0) {
@@ -1612,7 +1534,7 @@
 		DEBUG(0,("strstr_m: src malloc fail\n"));
 		return NULL;
 	}
-
+	
 	if (push_ucs2_allocate(&find_w, findstr) == (size_t)-1) {
 		SAFE_FREE(src_w);
 		DEBUG(0,("strstr_m: find malloc fail\n"));
@@ -1626,7 +1548,7 @@
 		SAFE_FREE(find_w);
 		return NULL;
 	}
-
+	
 	*p = 0;
 	if (pull_ucs2_allocate(&s2, src_w) == (size_t)-1) {
 		SAFE_FREE(src_w);
@@ -1668,7 +1590,7 @@
 	len = strlen(s) + 1;
 	errno_save = errno;
 	errno = 0;
-	unix_strlower(s,len,s,len);
+	unix_strlower(s,len,s,len);	
 	/* Catch mb conversion errors that may not terminate. */
 	if (errno)
 		s[len-1] = '\0';
@@ -1690,7 +1612,7 @@
 	   (ie. they match for the first 128 chars) */
 
 	while (*s && !(((unsigned char)s[0]) & 0x80)) {
-		*s = toupper_ascii_fast((unsigned char)*s);
+		*s = toupper_ascii((unsigned char)*s);
 		s++;
 	}
 
@@ -1702,7 +1624,7 @@
 	len = strlen(s) + 1;
 	errno_save = errno;
 	errno = 0;
-	unix_strupper(s,len,s,len);
+	unix_strupper(s,len,s,len);	
 	/* Catch mb conversion errors that may not terminate. */
 	if (errno)
 		s[len-1] = '\0';
@@ -1819,7 +1741,22 @@
 	s[j] = 0;
 	return s;
 }
+/**
+ Just a typesafety wrapper for snprintf into a pstring.
+**/
 
+ int pstr_sprintf(pstring s, const char *fmt, ...)
+{
+	va_list ap;
+	int ret;
+
+	va_start(ap, fmt);
+	ret = vsnprintf(s, PSTRING_LEN, fmt, ap);
+	va_end(ap);
+	return ret;
+}
+
+
 /**
  Just a typesafety wrapper for snprintf into a fstring.
 **/
@@ -1841,119 +1778,188 @@
 
 #define S_LIST_ABS 16 /* List Allocation Block Size */
 
-char **str_list_make(TALLOC_CTX *mem_ctx, const char *string, const char *sep)
+static char **str_list_make_internal(TALLOC_CTX *mem_ctx, const char *string, const char *sep)
 {
-	char **list;
+	char **list, **rlist;
 	const char *str;
 	char *s;
 	int num, lsize;
-	char *tok;
-
+	pstring tok;
+	
 	if (!string || !*string)
 		return NULL;
-
-	list = TALLOC_ARRAY(mem_ctx, char *, S_LIST_ABS+1);
-	if (list == NULL) {
-		return NULL;
+	if (mem_ctx) {
+		s = talloc_strdup(mem_ctx, string);
+	} else {
+		s = SMB_STRDUP(string);
 	}
-	lsize = S_LIST_ABS;
-
-	s = talloc_strdup(list, string);
-	if (s == NULL) {
+	if (!s) {
 		DEBUG(0,("str_list_make: Unable to allocate memory"));
-		TALLOC_FREE(list);
 		return NULL;
 	}
 	if (!sep) sep = LIST_SEP;
-
-	num = 0;
+	
+	num = lsize = 0;
+	list = NULL;
+	
 	str = s;
-
-	while (next_token_talloc(list, &str, &tok, sep)) {
-
+	while (next_token(&str, tok, sep, sizeof(tok))) {		
 		if (num == lsize) {
-			char **tmp;
-
 			lsize += S_LIST_ABS;
-
-			tmp = TALLOC_REALLOC_ARRAY(mem_ctx, list, char *,
-						   lsize + 1);
-			if (tmp == NULL) {
-				DEBUG(0,("str_list_make: "
-					"Unable to allocate memory"));
-				TALLOC_FREE(list);
+			if (mem_ctx) {
+				rlist = TALLOC_REALLOC_ARRAY(mem_ctx, list, char *, lsize +1);
+			} else {
+				/* We need to keep the old list on error so we can free the elements
+				   if the realloc fails. */
+				rlist = SMB_REALLOC_ARRAY_KEEP_OLD_ON_ERROR(list, char *, lsize +1);
+			}
+			if (!rlist) {
+				DEBUG(0,("str_list_make: Unable to allocate memory"));
+				str_list_free(&list);
+				if (mem_ctx) {
+					TALLOC_FREE(s);
+				} else {
+					SAFE_FREE(s);
+				}
 				return NULL;
+			} else {
+				list = rlist;
 			}
+			memset (&list[num], 0, ((sizeof(char**)) * (S_LIST_ABS +1)));
+		}
 
-			list = tmp;
-
-			memset (&list[num], 0,
-				((sizeof(char**)) * (S_LIST_ABS +1)));
+		if (mem_ctx) {
+			list[num] = talloc_strdup(mem_ctx, tok);
+		} else {
+			list[num] = SMB_STRDUP(tok);
 		}
+		
+		if (!list[num]) {
+			DEBUG(0,("str_list_make: Unable to allocate memory"));
+			str_list_free(&list);
+			if (mem_ctx) {
+				TALLOC_FREE(s);
+			} else {
+				SAFE_FREE(s);
+			}
+			return NULL;
+		}
+	
+		num++;	
+	}
 
-		list[num] = tok;
-		num += 1;
+	if (mem_ctx) {
+		TALLOC_FREE(s);
+	} else {
+		SAFE_FREE(s);
 	}
 
-	list[num] = NULL;
-
-	TALLOC_FREE(s);
 	return list;
 }
 
-bool str_list_copy(TALLOC_CTX *mem_ctx, char ***dest, const char **src)
+char **str_list_make_talloc(TALLOC_CTX *mem_ctx, const char *string, const char *sep)
 {
-	char **list;
-	int i, num;
+	return str_list_make_internal(mem_ctx, string, sep);
+}
 
+char **str_list_make(const char *string, const char *sep)
+{
+	return str_list_make_internal(NULL, string, sep);
+}
+
+BOOL str_list_copy(char ***dest, const char **src)
+{
+	char **list, **rlist;
+	int num, lsize;
+	
 	*dest = NULL;
 	if (!src)
-		return false;
+		return False;
+	
+	num = lsize = 0;
+	list = NULL;
+		
+	while (src[num]) {
+		if (num == lsize) {
+			lsize += S_LIST_ABS;
+			rlist = SMB_REALLOC_ARRAY_KEEP_OLD_ON_ERROR(list, char *, lsize +1);
+			if (!rlist) {
+				DEBUG(0,("str_list_copy: Unable to re-allocate memory"));
+				str_list_free(&list);
+				return False;
+			} else {
+				list = rlist;
+			}
+			memset (&list[num], 0, ((sizeof(char **)) * (S_LIST_ABS +1)));
+		}
+		
+		list[num] = SMB_STRDUP(src[num]);
+		if (!list[num]) {
+			DEBUG(0,("str_list_copy: Unable to allocate memory"));
+			str_list_free(&list);
+			return False;
+		}
 
-	num = 0;
-	while (src[num] != NULL) {
-		num += 1;
+		num++;
 	}
-
-	list = TALLOC_ARRAY(mem_ctx, char *, num+1);
-	if (list == NULL) {
-		return false;
-	}
-
-	for (i=0; i<num; i++) {
-		list[i] = talloc_strdup(list, src[i]);
-		if (list[i] == NULL) {
-			TALLOC_FREE(list);
-			return false;
-		}
-	}
-	list[i] = NULL;
+	
 	*dest = list;
-	return true;
+	return True;	
 }
 
 /**
  * Return true if all the elements of the list match exactly.
  **/
-bool str_list_compare(char **list1, char **list2)
+BOOL str_list_compare(char **list1, char **list2)
 {
 	int num;
-
+	
 	if (!list1 || !list2)
-		return (list1 == list2);
-
+		return (list1 == list2); 
+	
 	for (num = 0; list1[num]; num++) {
 		if (!list2[num])
-			return false;
+			return False;
 		if (!strcsequal(list1[num], list2[num]))
-			return false;
+			return False;
 	}
 	if (list2[num])
-		return false; /* if list2 has more elements than list1 fail */
+		return False; /* if list2 has more elements than list1 fail */
+	
+	return True;
+}
 
-	return true;
+static void str_list_free_internal(TALLOC_CTX *mem_ctx, char ***list)
+{
+	char **tlist;
+	
+	if (!list || !*list)
+		return;
+	tlist = *list;
+	for(; *tlist; tlist++) {
+		if (mem_ctx) {
+			TALLOC_FREE(*tlist);
+		} else {
+			SAFE_FREE(*tlist);
+		}
+	}
+	if (mem_ctx) {
+		TALLOC_FREE(*tlist);
+	} else {
+		SAFE_FREE(*list);
+	}
 }
 
+void str_list_free_talloc(TALLOC_CTX *mem_ctx, char ***list)
+{
+	str_list_free_internal(mem_ctx, list);
+}
+
+void str_list_free(char ***list)
+{
+	str_list_free_internal(NULL, list);
+}
+
 /******************************************************************************
  *****************************************************************************/
 
@@ -1965,61 +1971,59 @@
 		return 0;
 
 	/* count the number of list members */
-
+	
 	for ( i=0; *list; i++, list++ );
-
+	
 	return i;
 }
 
 /******************************************************************************
- version of standard_sub_basic() for string lists; uses talloc_sub_basic()
+ version of standard_sub_basic() for string lists; uses alloc_sub_basic() 
  for the work
  *****************************************************************************/
-
-bool str_list_sub_basic( char **list, const char *smb_name,
+ 
+BOOL str_list_sub_basic( char **list, const char *smb_name,
 			 const char *domain_name )
 {
-	TALLOC_CTX *ctx = list;
 	char *s, *tmpstr;
-
+	
 	while ( *list ) {
 		s = *list;
-		tmpstr = talloc_sub_basic(ctx, smb_name, domain_name, s);
+		tmpstr = alloc_sub_basic(smb_name, domain_name, s);
 		if ( !tmpstr ) {
-			DEBUG(0,("str_list_sub_basic: "
-				"alloc_sub_basic() return NULL!\n"));
-			return false;
+			DEBUG(0,("str_list_sub_basic: alloc_sub_basic() return NULL!\n"));
+			return False;
 		}
 
-		TALLOC_FREE(*list);
+		SAFE_FREE(*list);
 		*list = tmpstr;
-
+			
 		list++;
 	}
 
-	return true;
+	return True;
 }
 
 /******************************************************************************
  substritute a specific pattern in a string list
  *****************************************************************************/
-
-bool str_list_substitute(char **list, const char *pattern, const char *insert)
+ 
+BOOL str_list_substitute(char **list, const char *pattern, const char *insert)
 {
 	char *p, *s, *t;
 	ssize_t ls, lp, li, ld, i, d;
 
 	if (!list)
-		return false;
+		return False;
 	if (!pattern)
-		return false;
+		return False;
 	if (!insert)
-		return false;
+		return False;
 
 	lp = (ssize_t)strlen(pattern);
 	li = (ssize_t)strlen(insert);
 	ld = li -lp;
-
+			
 	while (*list) {
 		s = *list;
 		ls = (ssize_t)strlen(s);
@@ -2030,9 +2034,8 @@
 			if (ld) {
 				t = (char *) SMB_MALLOC(ls +ld +1);
 				if (!t) {
-					DEBUG(0,("str_list_substitute: "
-						"Unable to allocate memory"));
-					return false;
+					DEBUG(0,("str_list_substitute: Unable to allocate memory"));
+					return False;
 				}
 				memcpy(t, *list, d);
 				memcpy(t +d +li, p +lp, ls -d -lp +1);
@@ -2041,7 +2044,7 @@
 				ls += ld;
 				s = t +d +li;
 			}
-
+			
 			for (i = 0; i < li; i++) {
 				switch (insert[i]) {
 					case '`':
@@ -2057,13 +2060,14 @@
 					default:
 						t[d +i] = insert[i];
 				}
-			}
+			}	
 		}
-
+		
+		
 		list++;
 	}
-
-	return true;
+	
+	return True;
 }
 
 
@@ -2083,53 +2087,26 @@
  *         reallocated to new length
  **/
 
-static char *ipstr_list_add(char **ipstr_list, const struct ip_service *service)
+char* ipstr_list_add(char** ipstr_list, const struct ip_service *service)
 {
-	char *new_ipstr = NULL;
-	char addr_buf[INET6_ADDRSTRLEN];
-	int ret;
-
+	char* new_ipstr = NULL;
+	
 	/* arguments checking */
-	if (!ipstr_list || !service) {
-		return NULL;
-	}
+	if (!ipstr_list || !service) return NULL;
 
-	print_sockaddr(addr_buf,
-			sizeof(addr_buf),
-			&service->ss);
-
 	/* attempt to convert ip to a string and append colon separator to it */
 	if (*ipstr_list) {
-		if (service->ss.ss_family == AF_INET) {
-			/* IPv4 */
-			ret = asprintf(&new_ipstr, "%s%s%s:%d",	*ipstr_list,
-				       IPSTR_LIST_SEP, addr_buf,
-				       service->port);
-		} else {
-			/* IPv6 */
-			ret = asprintf(&new_ipstr, "%s%s[%s]:%d", *ipstr_list,
-				       IPSTR_LIST_SEP, addr_buf,
-				       service->port);
-		}
+		asprintf(&new_ipstr, "%s%s%s:%d", *ipstr_list, IPSTR_LIST_SEP,
+			inet_ntoa(service->ip), service->port);
 		SAFE_FREE(*ipstr_list);
 	} else {
-		if (service->ss.ss_family == AF_INET) {
-			/* IPv4 */
-			ret = asprintf(&new_ipstr, "%s:%d", addr_buf,
-				       service->port);
-		} else {
-			/* IPv6 */
-			ret = asprintf(&new_ipstr, "[%s]:%d", addr_buf,
-				       service->port);
-		}
+		asprintf(&new_ipstr, "%s:%d", inet_ntoa(service->ip), service->port);
 	}
-	if (ret == -1) {
-		return NULL;
-	}
 	*ipstr_list = new_ipstr;
 	return *ipstr_list;
 }
 
+
 /**
  * Allocate and initialise an ipstr list using ip adresses
  * passed as arguments.
@@ -2139,88 +2116,75 @@
  * @param ip_count number of addresses stored in ip_list
  * @return pointer to allocated ip string
  **/
-
-char *ipstr_list_make(char **ipstr_list,
-			const struct ip_service *ip_list,
-			int ip_count)
+ 
+char* ipstr_list_make(char** ipstr_list, const struct ip_service* ip_list, int ip_count)
 {
 	int i;
-
+	
 	/* arguments checking */
-	if (!ip_list || !ipstr_list) {
-		return 0;
-	}
+	if (!ip_list || !ipstr_list) return 0;
 
 	*ipstr_list = NULL;
-
+	
 	/* process ip addresses given as arguments */
-	for (i = 0; i < ip_count; i++) {
+	for (i = 0; i < ip_count; i++)
 		*ipstr_list = ipstr_list_add(ipstr_list, &ip_list[i]);
-	}
-
+	
 	return (*ipstr_list);
 }
 
 
 /**
  * Parse given ip string list into array of ip addresses
- * (as ip_service structures)
- *    e.g. [IPv6]:port,192.168.1.100:389,192.168.1.78, ...
+ * (as ip_service structures)  
+ *    e.g. 192.168.1.100:389,192.168.1.78, ...
  *
- * @param ipstr ip string list to be parsed
+ * @param ipstr ip string list to be parsed 
  * @param ip_list pointer to array of ip addresses which is
  *        allocated by this function and must be freed by caller
  * @return number of successfully parsed addresses
  **/
-
-int ipstr_list_parse(const char *ipstr_list, struct ip_service **ip_list)
+ 
+int ipstr_list_parse(const char* ipstr_list, struct ip_service **ip_list)
 {
-	TALLOC_CTX *frame;
-	char *token_str = NULL;
+	fstring token_str;
 	size_t count;
 	int i;
 
-	if (!ipstr_list || !ip_list)
+	if (!ipstr_list || !ip_list) 
 		return 0;
-
+	
 	count = count_chars(ipstr_list, IPSTR_LIST_CHAR) + 1;
 	if ( (*ip_list = SMB_MALLOC_ARRAY(struct ip_service, count)) == NULL ) {
-		DEBUG(0,("ipstr_list_parse: malloc failed for %lu entries\n",
-					(unsigned long)count));
+		DEBUG(0,("ipstr_list_parse: malloc failed for %lu entries\n", (unsigned long)count));
 		return 0;
 	}
-
-	frame = talloc_stackframe();
-	for ( i=0; next_token_talloc(frame, &ipstr_list, &token_str,
-				IPSTR_LIST_SEP) && i<count; i++ ) {
-		char *s = token_str;
-		char *p = strrchr(token_str, ':');
-
+	
+	for ( i=0; 
+		next_token(&ipstr_list, token_str, IPSTR_LIST_SEP, FSTRING_LEN) && i<count; 
+		i++ ) 
+	{
+		struct in_addr addr;
+		unsigned port = 0;	
+		char *p = strchr(token_str, ':');
+		
 		if (p) {
 			*p = 0;
-			(*ip_list)[i].port = atoi(p+1);
+			port = atoi(p+1);
 		}
 
 		/* convert single token to ip address */
-		if (token_str[0] == '[') {
-			/* IPv6 address. */
-			s++;
-			p = strchr(token_str, ']');
-			if (!p) {
-				continue;
-			}
-			*p = '\0';
-		}
-		if (!interpret_string_addr(&(*ip_list)[i].ss,
-					s,
-					AI_NUMERICHOST)) {
-			continue;
-		}
+		if ( (addr.s_addr = inet_addr(token_str)) == INADDR_NONE )
+			break;
+				
+		(*ip_list)[i].ip = addr;
+		(*ip_list)[i].port = port;
 	}
-	TALLOC_FREE(frame);
+	
 	return count;
 }
 
+
 /**
  * Safely free ip string list
  *
@@ -2232,6 +2196,7 @@
 	SAFE_FREE(ipstr_list);
 }
 
+
 /**
  Unescape a URL encoded string, in place.
 **/
@@ -2259,7 +2224,7 @@
 		else if (c2 >= 'a' && c2 <= 'f')
 			c2 = 10 + c2 - 'a';
 		else {p++; continue;}
-
+			
 		*p = (c1<<4) | c2;
 
 		memmove(p+1, p+3, strlen(p+3)+1);
@@ -2267,7 +2232,7 @@
 	}
 }
 
-static const char b64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+static const char *b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
 
 /**
  * Decode a base64 string into a DATA_BLOB - simple and slow algorithm
@@ -2327,13 +2292,11 @@
 }
 
 /**
- * Encode a base64 string into a talloc()ed string caller to free.
+ * Encode a base64 string into a malloc()ed string caller to free.
  *
- * From SQUID: adopted from http://ftp.sunet.se/pub2/gnu/vm/base64-encode.c
- * with adjustments
+ *From SQUID: adopted from http://ftp.sunet.se/pub2/gnu/vm/base64-encode.c with adjustments
  **/
-
-char *base64_encode_data_blob(TALLOC_CTX *mem_ctx, DATA_BLOB data)
+char * base64_encode_data_blob(DATA_BLOB data)
 {
 	int bits = 0;
 	int char_count = 0;
@@ -2346,8 +2309,7 @@
 	out_cnt = 0;
 	len = data.length;
 	output_len = data.length * 2;
-	result = TALLOC_ARRAY(mem_ctx, char, output_len); /* get us plenty of space */
-	SMB_ASSERT(result != NULL);
+	result = (char *)SMB_MALLOC(output_len); /* get us plenty of space */
 
 	while (len-- && out_cnt < (data.length * 2) - 5) {
 		int c = (unsigned char) *(data.data++);
@@ -2357,27 +2319,27 @@
 			result[out_cnt++] = b64[bits >> 18];
 			result[out_cnt++] = b64[(bits >> 12) & 0x3f];
 			result[out_cnt++] = b64[(bits >> 6) & 0x3f];
-			result[out_cnt++] = b64[bits & 0x3f];
-			bits = 0;
-			char_count = 0;
-		} else {
-			bits <<= 8;
-		}
+	    result[out_cnt++] = b64[bits & 0x3f];
+	    bits = 0;
+	    char_count = 0;
+	} else {
+	    bits <<= 8;
 	}
-	if (char_count != 0) {
-		bits <<= 16 - (8 * char_count);
-		result[out_cnt++] = b64[bits >> 18];
-		result[out_cnt++] = b64[(bits >> 12) & 0x3f];
-		if (char_count == 1) {
-			result[out_cnt++] = '=';
-			result[out_cnt++] = '=';
-		} else {
-			result[out_cnt++] = b64[(bits >> 6) & 0x3f];
-			result[out_cnt++] = '=';
-		}
+    }
+    if (char_count != 0) {
+	bits <<= 16 - (8 * char_count);
+	result[out_cnt++] = b64[bits >> 18];
+	result[out_cnt++] = b64[(bits >> 12) & 0x3f];
+	if (char_count == 1) {
+	    result[out_cnt++] = '=';
+	    result[out_cnt++] = '=';
+	} else {
+	    result[out_cnt++] = b64[(bits >> 6) & 0x3f];
+	    result[out_cnt++] = '=';
 	}
-	result[out_cnt] = '\0';	/* terminate */
-	return result;
+    }
+    result[out_cnt] = '\0';	/* terminate */
+    return result;
 }
 
 /* read a SMB_BIG_UINT from a string */
@@ -2386,7 +2348,7 @@
 
 	SMB_BIG_UINT val = -1;
 	const char *p = nptr;
-
+	
 	if (!p) {
 		if (entptr) {
 			*entptr = p;
@@ -2398,7 +2360,7 @@
 		p++;
 
 #ifdef LARGE_SMB_OFF_T
-	sscanf(p,"%llu",&val);
+	sscanf(p,"%llu",&val);	
 #else /* LARGE_SMB_OFF_T */
 	sscanf(p,"%lu",&val);
 #endif /* LARGE_SMB_OFF_T */
@@ -2497,23 +2459,22 @@
 	safe_strcat(*left, right, new_len-1);
 }
 
-bool add_string_to_array(TALLOC_CTX *mem_ctx,
+BOOL add_string_to_array(TALLOC_CTX *mem_ctx,
 			 const char *str, const char ***strings,
 			 int *num)
 {
 	char *dup_str = talloc_strdup(mem_ctx, str);
 
-	*strings = TALLOC_REALLOC_ARRAY(mem_ctx, *strings,
-			const char *, (*num)+1);
+	*strings = TALLOC_REALLOC_ARRAY(mem_ctx, *strings, const char *, (*num)+1);
 
 	if ((*strings == NULL) || (dup_str == NULL)) {
 		*num = 0;
-		return false;
+		return False;
 	}
 
 	(*strings)[*num] = dup_str;
 	*num += 1;
-	return true;
+	return True;
 }
 
 /* Append an sprintf'ed string. Double buffer size on demand. Usable without
@@ -2526,7 +2487,7 @@
 	va_list ap;
 	char *newstr;
 	int ret;
-	bool increased;
+	BOOL increased;
 
 	/* len<0 is an internal marker that something failed */
 	if (*len < 0)
@@ -2548,10 +2509,10 @@
 	if (ret < 0)
 		goto error;
 
-	increased = false;
+	increased = False;
 
 	while ((*len)+ret >= *bufsize) {
-		increased = true;
+		increased = True;
 		*bufsize *= 2;
 		if (*bufsize >= (1024*1024*256))
 			goto error;
@@ -2576,44 +2537,6 @@
 }
 
 /*
- * asprintf into a string and strupper_m it after that.
- */
-
-int asprintf_strupper_m(char **strp, const char *fmt, ...)
-{
-	va_list ap;
-	char *result;
-	int ret;
-
-	va_start(ap, fmt);
-	ret = vasprintf(&result, fmt, ap);
-	va_end(ap);
-
-	if (ret == -1)
-		return -1;
-
-	strupper_m(result);
-	*strp = result;
-	return ret;
-}
-
-char *talloc_asprintf_strupper_m(TALLOC_CTX *t, const char *fmt, ...)
-{
-	va_list ap;
-	char *ret;
-
-	va_start(ap, fmt);
-	ret = talloc_vasprintf(t, fmt, ap);
-	va_end(ap);
-
-	if (ret == NULL) {
-		return NULL;
-	}
-	strupper_m(ret);
-	return ret;
-}
-
-/*
    Returns the substring from src between the first occurrence of
    the char "front" and the first occurence of the char "back".
    Mallocs the return string which must be freed.  Not for use
@@ -2645,20 +2568,18 @@
  characters.
 ********************************************************************/
 
-bool validate_net_name( const char *name,
-		const char *invalid_chars,
-		int max_len)
+BOOL validate_net_name( const char *name, const char *invalid_chars, int max_len )
 {
 	int i;
 
 	for ( i=0; i<max_len && name[i]; i++ ) {
 		/* fail if strchr_m() finds one of the invalid characters */
 		if ( name[i] && strchr_m( invalid_chars, name[i] ) ) {
-			return false;
+			return False;
 		}
 	}
 
-	return true;
+	return True;
 }
 
 
@@ -2721,11 +2642,11 @@
 char *escape_shell_string(const char *src)
 {
 	size_t srclen = strlen(src);
-	char *ret = SMB_MALLOC_ARRAY(char, (srclen * 2) + 1);
+	char *ret = SMB_MALLOC((srclen * 2) + 1);
 	char *dest = ret;
-	bool in_s_quote = false;
-	bool in_d_quote = false;
-	bool next_escaped = false;
+	BOOL in_s_quote = False;
+	BOOL in_d_quote = False;
+	BOOL next_escaped = False;
 
 	if (!ret) {
 		return NULL;
@@ -2744,7 +2665,7 @@
 			memcpy(dest, src, c_size);
 			src += c_size;
 			dest += c_size;
-			next_escaped = false;
+			next_escaped = False;
 			continue;
 		}
 
@@ -2755,7 +2676,7 @@
 
 		if (next_escaped) {
 			*dest++ = *src++;
-			next_escaped = false;
+			next_escaped = False;
 			continue;
 		}
 
@@ -2767,13 +2688,13 @@
 
 		if (in_s_quote) {
 			if (*src == '\'') {
-				in_s_quote = false;
+				in_s_quote = False;
 			}
 			*dest++ = *src++;
 			continue;
 		}
 
-		/*
+		/* 
 		 * Deal with double quote state. The most
 		 * complex state. We must cope with \, meaning
 		 * possibly escape next char (depending what it
@@ -2784,7 +2705,7 @@
 
 		if (in_d_quote) {
 			if (*src == '\\') {
-				/*
+				/* 
 				 * Next character might be escaped.
 				 * We have to peek. Inside double
 				 * quotes only INSIDE_DQUOTE_LIST
@@ -2809,9 +2730,8 @@
 
 				nextchar = src[1];
 
-				if (nextchar && strchr(INSIDE_DQUOTE_LIST,
-							(int)nextchar)) {
-					next_escaped = true;
+				if (nextchar && strchr(INSIDE_DQUOTE_LIST, (int)nextchar)) {
+					next_escaped = True;
 				}
 				*dest++ = *src++;
 				continue;
@@ -2819,7 +2739,7 @@
 
 			if (*src == '\"') {
 				/* Exit double quote state. */
-				in_d_quote = false;
+				in_d_quote = False;
 				*dest++ = *src++;
 				continue;
 			}
@@ -2837,28 +2757,28 @@
 			continue;
 		}
 
-		/*
+		/* 
 		 * From here to the end of the loop we're
 		 * not in the single or double quote state.
 		 */
 
 		if (*src == '\\') {
 			/* Next character must be escaped. */
-			next_escaped = true;
+			next_escaped = True;
 			*dest++ = *src++;
 			continue;
 		}
 
 		if (*src == '\'') {
 			/* Go into single quote state. */
-			in_s_quote = true;
+			in_s_quote = True;
 			*dest++ = *src++;
 			continue;
 		}
 
 		if (*src == '\"') {
 			/* Go into double quote state. */
-			in_d_quote = true;
+			in_d_quote = True;
 			*dest++ = *src++;
 			continue;
 		}

Modified: branches/samba/upstream/source/lib/util_tdb.c
===================================================================
--- branches/samba/upstream/source/lib/util_tdb.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/util_tdb.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,11 +3,10 @@
    tdb utility functions
    Copyright (C) Andrew Tridgell   1992-1998
    Copyright (C) Rafal Szczesniak  2002
-   Copyright (C) Michael Adam      2007
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -43,24 +43,19 @@
  Make a TDB_DATA and keep the const warning in one place
 ****************************************************************/
 
-TDB_DATA make_tdb_data(const uint8 *dptr, size_t dsize)
+TDB_DATA make_tdb_data(const char *dptr, size_t dsize)
 {
 	TDB_DATA ret;
-	ret.dptr = CONST_DISCARD(uint8 *, dptr);
+	ret.dptr = CONST_DISCARD(char *, dptr);
 	ret.dsize = dsize;
 	return ret;
 }
 
 TDB_DATA string_tdb_data(const char *string)
 {
-	return make_tdb_data((const uint8 *)string, string ? strlen(string) : 0 );
+	return make_tdb_data(string, strlen(string));
 }
 
-TDB_DATA string_term_tdb_data(const char *string)
-{
-	return make_tdb_data((const uint8 *)string, string ? strlen(string) + 1 : 0);
-}
-
 /****************************************************************************
  Lock a chain with timeout (in seconds).
 ****************************************************************************/
@@ -115,7 +110,7 @@
 
 int tdb_lock_bystring(TDB_CONTEXT *tdb, const char *keyval)
 {
-	TDB_DATA key = string_term_tdb_data(keyval);
+	TDB_DATA key = make_tdb_data(keyval, strlen(keyval)+1);
 	
 	return tdb_chainlock(tdb, key);
 }
@@ -123,7 +118,7 @@
 int tdb_lock_bystring_with_timeout(TDB_CONTEXT *tdb, const char *keyval,
 				   int timeout)
 {
-	TDB_DATA key = string_term_tdb_data(keyval);
+	TDB_DATA key = make_tdb_data(keyval, strlen(keyval)+1);
 	
 	return tdb_chainlock_with_timeout(tdb, key, timeout);
 }
@@ -134,7 +129,7 @@
 
 void tdb_unlock_bystring(TDB_CONTEXT *tdb, const char *keyval)
 {
-	TDB_DATA key = string_term_tdb_data(keyval);
+	TDB_DATA key = make_tdb_data(keyval, strlen(keyval)+1);
 
 	tdb_chainunlock(tdb, key);
 }
@@ -145,7 +140,7 @@
 
 int tdb_read_lock_bystring_with_timeout(TDB_CONTEXT *tdb, const char *keyval, unsigned int timeout)
 {
-	TDB_DATA key = string_term_tdb_data(keyval);
+	TDB_DATA key = make_tdb_data(keyval, strlen(keyval)+1);
 	
 	return tdb_chainlock_with_timeout_internal(tdb, key, timeout, F_RDLCK);
 }
@@ -156,7 +151,7 @@
 
 void tdb_read_unlock_bystring(TDB_CONTEXT *tdb, const char *keyval)
 {
-	TDB_DATA key = string_term_tdb_data(keyval);
+	TDB_DATA key = make_tdb_data(keyval, strlen(keyval)+1);
 	
 	tdb_chainunlock_read(tdb, key);
 }
@@ -167,8 +162,9 @@
  Output is int32 in native byte order.
 ****************************************************************************/
 
-int32 tdb_fetch_int32_byblob(TDB_CONTEXT *tdb, TDB_DATA key)
+int32 tdb_fetch_int32_byblob(TDB_CONTEXT *tdb, const char *keyval, size_t len)
 {
+	TDB_DATA key = make_tdb_data(keyval, len);
 	TDB_DATA data;
 	int32 ret;
 
@@ -190,9 +186,7 @@
 
 int32 tdb_fetch_int32(TDB_CONTEXT *tdb, const char *keystr)
 {
-	TDB_DATA key = string_term_tdb_data(keystr);
-
-	return tdb_fetch_int32_byblob(tdb, key);
+	return tdb_fetch_int32_byblob(tdb, keystr, strlen(keystr) + 1);
 }
 
 /****************************************************************************
@@ -200,13 +194,14 @@
  Input is int32 in native byte order. Output in tdb is in little-endian.
 ****************************************************************************/
 
-int tdb_store_int32_byblob(TDB_CONTEXT *tdb, TDB_DATA key, int32 v)
+int tdb_store_int32_byblob(TDB_CONTEXT *tdb, const char *keystr, size_t len, int32 v)
 {
+	TDB_DATA key = make_tdb_data(keystr, len);
 	TDB_DATA data;
 	int32 v_store;
 
 	SIVAL(&v_store,0,v);
-	data.dptr = (uint8 *)&v_store;
+	data.dptr = (char *)&v_store;
 	data.dsize = sizeof(int32);
 
 	return tdb_store(tdb, key, data, TDB_REPLACE);
@@ -219,9 +214,7 @@
 
 int tdb_store_int32(TDB_CONTEXT *tdb, const char *keystr, int32 v)
 {
-	TDB_DATA key = string_term_tdb_data(keystr);
-
-	return tdb_store_int32_byblob(tdb, key, v);
+	return tdb_store_int32_byblob(tdb, keystr, strlen(keystr) + 1, v);
 }
 
 /****************************************************************************
@@ -229,8 +222,9 @@
  Output is uint32 in native byte order.
 ****************************************************************************/
 
-bool tdb_fetch_uint32_byblob(TDB_CONTEXT *tdb, TDB_DATA key, uint32 *value)
+BOOL tdb_fetch_uint32_byblob(TDB_CONTEXT *tdb, const char *keyval, size_t len, uint32 *value)
 {
+	TDB_DATA key = make_tdb_data(keyval, len);
 	TDB_DATA data;
 
 	data = tdb_fetch(tdb, key);
@@ -249,11 +243,9 @@
  Output is uint32 in native byte order.
 ****************************************************************************/
 
-bool tdb_fetch_uint32(TDB_CONTEXT *tdb, const char *keystr, uint32 *value)
+BOOL tdb_fetch_uint32(TDB_CONTEXT *tdb, const char *keystr, uint32 *value)
 {
-	TDB_DATA key = string_term_tdb_data(keystr);
-
-	return tdb_fetch_uint32_byblob(tdb, key, value);
+	return tdb_fetch_uint32_byblob(tdb, keystr, strlen(keystr) + 1, value);
 }
 
 /****************************************************************************
@@ -261,14 +253,15 @@
  Input is uint32 in native byte order. Output in tdb is in little-endian.
 ****************************************************************************/
 
-bool tdb_store_uint32_byblob(TDB_CONTEXT *tdb, TDB_DATA key, uint32 value)
+BOOL tdb_store_uint32_byblob(TDB_CONTEXT *tdb, const char *keystr, size_t len, uint32 value)
 {
+	TDB_DATA key = make_tdb_data(keystr, len);
 	TDB_DATA data;
 	uint32 v_store;
-	bool ret = True;
+	BOOL ret = True;
 
 	SIVAL(&v_store, 0, value);
-	data.dptr = (uint8 *)&v_store;
+	data.dptr = (char *)&v_store;
 	data.dsize = sizeof(uint32);
 
 	if (tdb_store(tdb, key, data, TDB_REPLACE) == -1)
@@ -282,11 +275,9 @@
  Input is uint32 in native byte order. Output in tdb is in little-endian.
 ****************************************************************************/
 
-bool tdb_store_uint32(TDB_CONTEXT *tdb, const char *keystr, uint32 value)
+BOOL tdb_store_uint32(TDB_CONTEXT *tdb, const char *keystr, uint32 value)
 {
-	TDB_DATA key = string_term_tdb_data(keystr);
-
-	return tdb_store_uint32_byblob(tdb, key, value);
+	return tdb_store_uint32_byblob(tdb, keystr, strlen(keystr) + 1, value);
 }
 /****************************************************************************
  Store a buffer by a null terminated string key.  Return 0 on success, -1
@@ -295,19 +286,11 @@
 
 int tdb_store_bystring(TDB_CONTEXT *tdb, const char *keystr, TDB_DATA data, int flags)
 {
-	TDB_DATA key = string_term_tdb_data(keystr);
-
+	TDB_DATA key = make_tdb_data(keystr, strlen(keystr)+1);
+	
 	return tdb_store(tdb, key, data, flags);
 }
 
-int tdb_trans_store_bystring(TDB_CONTEXT *tdb, const char *keystr,
-			     TDB_DATA data, int flags)
-{
-	TDB_DATA key = string_term_tdb_data(keystr);
-	
-	return tdb_trans_store(tdb, key, data, flags);
-}
-
 /****************************************************************************
  Fetch a buffer using a null terminated string key.  Don't forget to call
  free() on the result dptr.
@@ -315,7 +298,7 @@
 
 TDB_DATA tdb_fetch_bystring(TDB_CONTEXT *tdb, const char *keystr)
 {
-	TDB_DATA key = string_term_tdb_data(keystr);
+	TDB_DATA key = make_tdb_data(keystr, strlen(keystr)+1);
 
 	return tdb_fetch(tdb, key);
 }
@@ -326,7 +309,7 @@
 
 int tdb_delete_bystring(TDB_CONTEXT *tdb, const char *keystr)
 {
-	TDB_DATA key = string_term_tdb_data(keystr);
+	TDB_DATA key = make_tdb_data(keystr, strlen(keystr)+1);
 
 	return tdb_delete(tdb, key);
 }
@@ -376,10 +359,10 @@
  Atomic unsigned integer change. Returns old value. To create, set initial value in *oldval. 
 ****************************************************************************/
 
-bool tdb_change_uint32_atomic(TDB_CONTEXT *tdb, const char *keystr, uint32 *oldval, uint32 change_val)
+BOOL tdb_change_uint32_atomic(TDB_CONTEXT *tdb, const char *keystr, uint32 *oldval, uint32 change_val)
 {
 	uint32 val;
-	bool ret = False;
+	BOOL ret = False;
 
 	if (tdb_lock_bystring(tdb, keystr) == -1)
 		return False;
@@ -419,7 +402,7 @@
  integers and strings.
 ****************************************************************************/
 
-static size_t tdb_pack_va(uint8 *buf, int bufsize, const char *fmt, va_list ap)
+size_t tdb_pack_va(char *buf, int bufsize, const char *fmt, va_list ap)
 {
 	uint8 bt;
 	uint16 w;
@@ -429,7 +412,7 @@
 	int len;
 	char *s;
 	char c;
-	uint8 *buf0 = buf;
+	char *buf0 = buf;
 	const char *fmt0 = fmt;
 	int bufsize0 = bufsize;
 
@@ -503,7 +486,7 @@
 	return PTR_DIFF(buf, buf0);
 }
 
-size_t tdb_pack(uint8 *buf, int bufsize, const char *fmt, ...)
+size_t tdb_pack(char *buf, int bufsize, const char *fmt, ...)
 {
 	va_list ap;
 	size_t result;
@@ -514,7 +497,7 @@
 	return result;
 }
 
-bool tdb_pack_append(TALLOC_CTX *mem_ctx, uint8 **buf, size_t *len,
+BOOL tdb_pack_append(TALLOC_CTX *mem_ctx, uint8 **buf, size_t *len,
 		     const char *fmt, ...)
 {
 	va_list ap;
@@ -536,7 +519,7 @@
 	}
 
 	va_start(ap, fmt);
-	len2 = tdb_pack_va((*buf)+(*len), len1, fmt, ap);
+	len2 = tdb_pack_va((char *)(*buf)+(*len), len1, fmt, ap);
 	va_end(ap);
 
 	if (len1 != len2) {
@@ -553,7 +536,7 @@
  integers and strings.
 ****************************************************************************/
 
-int tdb_unpack(const uint8 *buf, int bufsize, const char *fmt, ...)
+int tdb_unpack(char *buf, int bufsize, const char *fmt, ...)
 {
 	va_list ap;
 	uint8 *bt;
@@ -562,14 +545,14 @@
 	int len;
 	int *i;
 	void **p;
-	char *s, **b, **ps;
+	char *s, **b;
 	char c;
-	const uint8 *buf0 = buf;
+	char *buf0 = buf;
 	const char *fmt0 = fmt;
 	int bufsize0 = bufsize;
 
 	va_start(ap, fmt);
-
+	
 	while (*fmt) {
 		switch ((c=*fmt++)) {
 		case 'b':
@@ -598,7 +581,7 @@
 			p = va_arg(ap, void **);
 			if (bufsize < len)
 				goto no_space;
-			/*
+			/* 
 			 * This isn't a real pointer - only a token (1 or 0)
 			 * to mark the fact a pointer is present.
 			 */
@@ -606,14 +589,15 @@
 			*p = (void *)(IVAL(buf, 0) ? (void *)1 : NULL);
 			break;
 		case 'P':
-			/* Return malloc'ed string. */
-			ps = va_arg(ap,char **);
-			len = strlen((const char *)buf) + 1;
-			*ps = SMB_STRDUP((const char *)buf);
+			s = va_arg(ap,char *);
+			len = strlen(buf) + 1;
+			if (bufsize < len || len > sizeof(pstring))
+				goto no_space;
+			memcpy(s, buf, len);
 			break;
 		case 'f':
 			s = va_arg(ap,char *);
-			len = strlen((const char *)buf) + 1;
+			len = strlen(buf) + 1;
 			if (bufsize < len || len > sizeof(fstring))
 				goto no_space;
 			memcpy(s, buf, len);
@@ -638,7 +622,7 @@
 			memcpy(*b, buf+4, *i);
 			break;
 		default:
-			DEBUG(0,("Unknown tdb_unpack format %c in %s\n",
+			DEBUG(0,("Unknown tdb_unpack format %c in %s\n", 
 				 c, fmt));
 
 			len = 0;
@@ -651,13 +635,12 @@
 
 	va_end(ap);
 
-	DEBUG(18,("tdb_unpack(%s, %d) -> %d\n",
+	DEBUG(18,("tdb_unpack(%s, %d) -> %d\n", 
 		 fmt0, bufsize0, (int)PTR_DIFF(buf, buf0)));
 
 	return PTR_DIFF(buf, buf0);
 
  no_space:
-	va_end(ap);
 	return -1;
 }
 
@@ -670,13 +653,12 @@
 {
 	va_list ap;
 	char *ptr = NULL;
-	int ret;
 
 	va_start(ap, format);
-	ret = vasprintf(&ptr, format, ap);
+	vasprintf(&ptr, format, ap);
 	va_end(ap);
-
-	if ((ret == -1) || !*ptr)
+	
+	if (!ptr || !*ptr)
 		return;
 
 	DEBUG((int)level, ("tdb(%s): %s", tdb_name(tdb) ? tdb_name(tdb) : "unnamed", ptr));
@@ -700,17 +682,6 @@
 	log_ctx.log_fn = tdb_log;
 	log_ctx.log_private = NULL;
 
-	if ((hash_size == 0) && (name != NULL)) {
-		const char *base = strrchr_m(name, '/');
-		if (base != NULL) {
-			base += 1;
-		}
-		else {
-			base = name;
-		}
-		hash_size = lp_parm_int(-1, "tdb_hashsize", base, 0);
-	}
-
 	tdb = tdb_open_ex(name, hash_size, tdb_flags, 
 			  open_flags, mode, &log_ctx, NULL);
 	if (!tdb)
@@ -719,7 +690,18 @@
 	return tdb;
 }
 
+/****************************************************************************
+ Allow tdb_delete to be used as a tdb_traversal_fn.
+****************************************************************************/
 
+int tdb_traverse_delete_fn(TDB_CONTEXT *the_tdb, TDB_DATA key, TDB_DATA dbuf,
+                     void *state)
+{
+    return tdb_delete(the_tdb, key);
+}
+
+
+
 /**
  * Search across the whole tdb for keys that match the given pattern
  * return the result as a list of keys
@@ -737,7 +719,7 @@
 	
 	for (key = tdb_firstkey(tdb); key.dptr; key = next) {
 		/* duplicate key string to ensure null-termination */
-		char *key_str = SMB_STRNDUP((const char *)key.dptr, key.dsize);
+		char *key_str = (char*) SMB_STRNDUP(key.dptr, key.dsize);
 		if (!key_str) {
 			DEBUG(0, ("tdb_search_keys: strndup() failed!\n"));
 			smb_panic("strndup failed!\n");
@@ -805,7 +787,7 @@
 	if ((res = tdb_store(tdb, key, dbuf, flag)) != 0) {
 		DEBUG(10, ("tdb_store failed\n"));
 		if (tdb_transaction_cancel(tdb) != 0) {
-			smb_panic("Cancelling transaction failed");
+			smb_panic("Cancelling transaction failed\n");
 		}
 		return res;
 	}
@@ -834,7 +816,7 @@
 	if ((res = tdb_delete(tdb, key)) != 0) {
 		DEBUG(10, ("tdb_delete failed\n"));
 		if (tdb_transaction_cancel(tdb) != 0) {
-			smb_panic("Cancelling transaction failed");
+			smb_panic("Cancelling transaction failed\n");
 		}
 		return res;
 	}
@@ -858,8 +840,11 @@
 	va_list ap;
 	char *ptr = NULL;
 	int debuglevel = 0;
-	int ret;
 
+	va_start(ap, format);
+	vasprintf(&ptr, format, ap);
+	va_end(ap);
+	
 	switch (level) {
 	case TDB_DEBUG_FATAL:
 		debuglevel = 0;
@@ -877,11 +862,7 @@
 		debuglevel = 0;
 	}		
 
-	va_start(ap, format);
-	ret = vasprintf(&ptr, format, ap);
-	va_end(ap);
-
-	if (ret != -1) {
+	if (ptr != NULL) {
 		const char *name = tdb_name(tdb);
 		DEBUG(debuglevel, ("tdb(%s): %s", name ? name : "unnamed", ptr));
 		free(ptr);
@@ -910,9 +891,6 @@
 	struct tdb_logging_context log_ctx;
 	log_ctx.log_fn = tdb_wrap_log;
 
-	if (!lp_use_mmap())
-		tdb_flags |= TDB_NOMMAP;
-
 	for (w=tdb_list;w;w=w->next) {
 		if (strcmp(name, w->name) == 0) {
 			/*
@@ -934,17 +912,6 @@
 		return NULL;
 	}
 
-	if ((hash_size == 0) && (name != NULL)) {
-		const char *base = strrchr_m(name, '/');
-		if (base != NULL) {
-			base += 1;
-		}
-		else {
-			base = name;
-		}
-		hash_size = lp_parm_int(-1, "tdb_hashsize", base, 0);
-	}
-
 	w->tdb = tdb_open_ex(name, hash_size, tdb_flags, 
 			     open_flags, mode, &log_ctx, NULL);
 	if (w->tdb == NULL) {
@@ -958,524 +925,3 @@
 
 	return w;
 }
-
-NTSTATUS map_nt_error_from_tdb(enum TDB_ERROR err)
-{
-	struct { enum TDB_ERROR err; NTSTATUS status; }	map[] =
-		{ { TDB_SUCCESS,	NT_STATUS_OK },
-		  { TDB_ERR_CORRUPT,	NT_STATUS_INTERNAL_DB_CORRUPTION },
-		  { TDB_ERR_IO,		NT_STATUS_UNEXPECTED_IO_ERROR },
-		  { TDB_ERR_OOM,	NT_STATUS_NO_MEMORY },
-		  { TDB_ERR_EXISTS,	NT_STATUS_OBJECT_NAME_COLLISION },
-
-		  /*
-		   * TDB_ERR_LOCK is very broad, we could for example
-		   * distinguish between fcntl locks and invalid lock
-		   * sequences. So NT_STATUS_FILE_LOCK_CONFLICT is a
-		   * compromise.
-		   */
-		  { TDB_ERR_LOCK,	NT_STATUS_FILE_LOCK_CONFLICT },
-		  /*
-		   * The next two ones in the enum are not actually used
-		   */
-		  { TDB_ERR_NOLOCK,	NT_STATUS_FILE_LOCK_CONFLICT },
-		  { TDB_ERR_LOCK_TIMEOUT, NT_STATUS_FILE_LOCK_CONFLICT },
-		  { TDB_ERR_NOEXIST,	NT_STATUS_NOT_FOUND },
-		  { TDB_ERR_EINVAL,	NT_STATUS_INVALID_PARAMETER },
-		  { TDB_ERR_RDONLY,	NT_STATUS_ACCESS_DENIED }
-		};
-
-	int i;
-
-	for (i=0; i < sizeof(map) / sizeof(map[0]); i++) {
-		if (err == map[i].err) {
-			return map[i].status;
-		}
-	}
-
-	return NT_STATUS_INTERNAL_ERROR;
-}
-
-
-/*********************************************************************
- * the following is a generic validation mechanism for tdbs.
- *********************************************************************/
-
-/* 
- * internal validation function, executed by the child.  
- */
-static int tdb_validate_child(struct tdb_context *tdb,
-			      tdb_validate_data_func validate_fn)
-{
-	int ret = 1;
-	int num_entries = 0;
-	struct tdb_validation_status v_status;
-
-	v_status.tdb_error = False;
-	v_status.bad_freelist = False;
-	v_status.bad_entry = False;
-	v_status.unknown_key = False;
-	v_status.success = True;
-
-	if (!tdb) {
-		v_status.tdb_error = True;
-		v_status.success = False;
-		goto out;
-	}
-
-	/* Check if the tdb's freelist is good. */
-	if (tdb_validate_freelist(tdb, &num_entries) == -1) {
-		v_status.bad_freelist = True;
-		v_status.success = False;
-		goto out;
-	}
-
-	DEBUG(10,("tdb_validate_child: tdb %s freelist has %d entries\n",
-		  tdb_name(tdb), num_entries));
-
-	/* Now traverse the tdb to validate it. */
-	num_entries = tdb_traverse(tdb, validate_fn, (void *)&v_status);
-	if (!v_status.success) {
-		goto out;
-	} else if (num_entries == -1) {
-		v_status.tdb_error = True;
-		v_status.success = False;
-		goto out;
-	}
-
-	DEBUG(10,("tdb_validate_child: tdb %s is good with %d entries\n",
-		  tdb_name(tdb), num_entries));
-	ret = 0; /* Cache is good. */
-
-out:
-	DEBUG(10,   ("tdb_validate_child: summary of validation status:\n"));
-	DEBUGADD(10,(" * tdb error: %s\n", v_status.tdb_error ? "yes" : "no"));
-	DEBUGADD(10,(" * bad freelist: %s\n",v_status.bad_freelist?"yes":"no"));
-	DEBUGADD(10,(" * bad entry: %s\n", v_status.bad_entry ? "yes" : "no"));
-	DEBUGADD(10,(" * unknown key: %s\n", v_status.unknown_key?"yes":"no"));
-	DEBUGADD(10,(" => overall success: %s\n", v_status.success?"yes":"no"));
-
-	return ret;
-}
-
-/*
- * tdb validation function.
- * returns 0 if tdb is ok, != 0 if it isn't.
- * this function expects an opened tdb.
- */
-int tdb_validate(struct tdb_context *tdb, tdb_validate_data_func validate_fn)
-{
-	pid_t child_pid = -1;
-	int child_status = 0;
-	int wait_pid = 0;
-	int ret = 1;
-
-	if (tdb == NULL) {
-		DEBUG(1, ("Error: tdb_validate called with tdb == NULL\n"));
-		return ret;
-	}
-
-	DEBUG(5, ("tdb_validate called for tdb '%s'\n", tdb_name(tdb)));
-
-	/* fork and let the child do the validation.
-	 * benefit: no need to twist signal handlers and panic functions.
-	 * just let the child panic. we catch the signal. */
-
-	DEBUG(10, ("tdb_validate: forking to let child do validation.\n"));
-	child_pid = sys_fork();
-	if (child_pid == 0) {
-		/* child code */
-		DEBUG(10, ("tdb_validate (validation child): created\n"));
-		DEBUG(10, ("tdb_validate (validation child): "
-			   "calling tdb_validate_child\n"));
-		exit(tdb_validate_child(tdb, validate_fn));
-	}
-	else if (child_pid < 0) {
-		DEBUG(1, ("tdb_validate: fork for validation failed.\n"));
-		goto done;
-	}
-
-	/* parent */
-
-	DEBUG(10, ("tdb_validate: fork succeeded, child PID = %d\n",child_pid));
-
-	DEBUG(10, ("tdb_validate: waiting for child to finish...\n"));
-	while  ((wait_pid = sys_waitpid(child_pid, &child_status, 0)) < 0) {
-		if (errno == EINTR) {
-			DEBUG(10, ("tdb_validate: got signal during waitpid, "
-				   "retrying\n"));
-			errno = 0;
-			continue;
-		}
-		DEBUG(1, ("tdb_validate: waitpid failed with error '%s'.\n",
-			  strerror(errno)));
-		goto done;
-	}
-	if (wait_pid != child_pid) {
-		DEBUG(1, ("tdb_validate: waitpid returned pid %d, "
-			  "but %d was expected\n", wait_pid, child_pid));
-		goto done;
-	}
-
-	DEBUG(10, ("tdb_validate: validating child returned.\n"));
-	if (WIFEXITED(child_status)) {
-		DEBUG(10, ("tdb_validate: child exited, code %d.\n",
-			   WEXITSTATUS(child_status)));
-		ret = WEXITSTATUS(child_status);
-	}
-	if (WIFSIGNALED(child_status)) {
-		DEBUG(10, ("tdb_validate: child terminated by signal %d\n",
-			   WTERMSIG(child_status)));
-#ifdef WCOREDUMP
-		if (WCOREDUMP(child_status)) {
-			DEBUGADD(10, ("core dumped\n"));
-		}
-#endif
-		ret = WTERMSIG(child_status);
-	}
-	if (WIFSTOPPED(child_status)) {
-		DEBUG(10, ("tdb_validate: child was stopped by signal %d\n",
-			   WSTOPSIG(child_status)));
-		ret = WSTOPSIG(child_status);
-	}
-
-done:
-	DEBUG(5, ("tdb_validate returning code '%d' for tdb '%s'\n", ret,
-		  tdb_name(tdb)));
-
-	return ret;
-}
-
-/*
- * tdb validation function.
- * returns 0 if tdb is ok, != 0 if it isn't.
- * this is a wrapper around the actual validation function that opens and closes
- * the tdb.
- */
-int tdb_validate_open(const char *tdb_path, tdb_validate_data_func validate_fn)
-{
-	TDB_CONTEXT *tdb = NULL;
-	int ret = 1;
-
-	DEBUG(5, ("tdb_validate_open called for tdb '%s'\n", tdb_path));
-
-	tdb = tdb_open_log(tdb_path, 0, TDB_DEFAULT, O_RDONLY, 0);
-	if (!tdb) {
-		DEBUG(1, ("Error opening tdb %s\n", tdb_path));
-		return ret;
-	}
-
-	ret = tdb_validate(tdb, validate_fn);
-	tdb_close(tdb);
-	return ret;
-}
-
-/*
- * tdb backup function and helpers for tdb_validate wrapper with backup
- * handling.
- */
-
-/* this structure eliminates the need for a global overall status for
- * the traverse-copy */
-struct tdb_copy_data {
-	struct tdb_context *dst;
-	bool success;
-};
-
-static int traverse_copy_fn(struct tdb_context *tdb, TDB_DATA key,
-			    TDB_DATA dbuf, void *private_data)
-{
-	struct tdb_copy_data *data = (struct tdb_copy_data *)private_data;
-
-	if (tdb_store(data->dst, key, dbuf, TDB_INSERT) != 0) {
-		DEBUG(4, ("Failed to insert into %s: %s\n", tdb_name(data->dst),
-			  strerror(errno)));
-		data->success = False;
-		return 1;
-	}
-	return 0;
-}
-
-static int tdb_copy(struct tdb_context *src, struct tdb_context *dst)
-{
-	struct tdb_copy_data data;
-	int count;
-
-	data.dst = dst;
-	data.success = True;
-
-	count = tdb_traverse(src, traverse_copy_fn, (void *)(&data));
-	if ((count < 0) || (data.success == False)) {
-		return -1;
-	}
-	return count;
-}
-
-static int tdb_verify_basic(struct tdb_context *tdb)
-{
-	return tdb_traverse(tdb, NULL, NULL);
-}
-
-/* this backup function is essentially taken from lib/tdb/tools/tdbbackup.tdb
- */
-static int tdb_backup(TALLOC_CTX *ctx, const char *src_path,
-		      const char *dst_path, int hash_size)
-{
-	struct tdb_context *src_tdb = NULL;
-	struct tdb_context *dst_tdb = NULL;
-	char *tmp_path = NULL;
-	struct stat st;
-	int count1, count2;
-	int saved_errno = 0;
-	int ret = -1;
-
-	if (stat(src_path, &st) != 0) {
-		DEBUG(3, ("Could not stat '%s': %s\n", src_path,
-			  strerror(errno)));
-		goto done;
-	}
-
-	/* open old tdb RDWR - so we can lock it */
-	src_tdb = tdb_open_log(src_path, 0, TDB_DEFAULT, O_RDWR, 0);
-	if (src_tdb == NULL) {
-		DEBUG(3, ("Failed to open tdb '%s'\n", src_path));
-		goto done;
-	}
-
-	if (tdb_lockall(src_tdb) != 0) {
-		DEBUG(3, ("Failed to lock tdb '%s'\n", src_path));
-		goto done;
-	}
-
-	tmp_path = talloc_asprintf(ctx, "%s%s", dst_path, ".tmp");
-	unlink(tmp_path);
-	dst_tdb = tdb_open_log(tmp_path,
-			       hash_size ? hash_size : tdb_hash_size(src_tdb),
-			       TDB_DEFAULT, O_RDWR | O_CREAT | O_EXCL,
-			       st.st_mode & 0777);
-	if (dst_tdb == NULL) {
-		DEBUG(3, ("Error creating tdb '%s': %s\n", tmp_path,
-			  strerror(errno)));
-		saved_errno = errno;
-		unlink(tmp_path);
-		goto done;
-	}
-
-	count1 = tdb_copy(src_tdb, dst_tdb);
-	if (count1 < 0) {
-		DEBUG(3, ("Failed to copy tdb '%s': %s\n", src_path,
-			  strerror(errno)));
-		tdb_close(dst_tdb);
-		goto done;
-	}
-
-	/* reopen ro and do basic verification */
-	tdb_close(dst_tdb);
-	dst_tdb = tdb_open_log(tmp_path, 0, TDB_DEFAULT, O_RDONLY, 0);
-	if (!dst_tdb) {
-		DEBUG(3, ("Failed to reopen tdb '%s': %s\n", tmp_path,
-			  strerror(errno)));
-		goto done;
-	}
-	count2 = tdb_verify_basic(dst_tdb);
-	if (count2 != count1) {
-		DEBUG(3, ("Failed to verify result of copying tdb '%s'.\n",
-			  src_path));
-		tdb_close(dst_tdb);
-		goto done;
-	}
-
-	DEBUG(10, ("tdb_backup: successfully copied %d entries\n", count1));
-
-	/* make sure the new tdb has reached stable storage
-	 * then rename it to its destination */
-	fsync(tdb_fd(dst_tdb));
-	tdb_close(dst_tdb);
-	unlink(dst_path);
-	if (rename(tmp_path, dst_path) != 0) {
-		DEBUG(3, ("Failed to rename '%s' to '%s': %s\n",
-			  tmp_path, dst_path, strerror(errno)));
-		goto done;
-	}
-
-	/* success */
-	ret = 0;
-
-done:
-	if (src_tdb != NULL) {
-		tdb_close(src_tdb);
-	}
-	if (tmp_path != NULL) {
-		unlink(tmp_path);
-		TALLOC_FREE(tmp_path);
-	}
-	if (saved_errno != 0) {
-		errno = saved_errno;
-	}
-	return ret;
-}
-
-static int rename_file_with_suffix(TALLOC_CTX *ctx, const char *path,
-				   const char *suffix)
-{
-	int ret = -1;
-	char *dst_path;
-
-	dst_path = talloc_asprintf(ctx, "%s%s", path, suffix);
-
-	ret = (rename(path, dst_path) != 0);
-
-	if (ret == 0) {
-		DEBUG(5, ("moved '%s' to '%s'\n", path, dst_path));
-	} else if (errno == ENOENT) {
-		DEBUG(3, ("file '%s' does not exist - so not moved\n", path));
-		ret = 0;
-	} else {
-		DEBUG(3, ("error renaming %s to %s: %s\n", path, dst_path,
-			  strerror(errno)));
-	}
-
-	TALLOC_FREE(dst_path);
-	return ret;
-}
-
-/*
- * do a backup of a tdb, moving the destination out of the way first
- */
-static int tdb_backup_with_rotate(TALLOC_CTX *ctx, const char *src_path,
-		      		  const char *dst_path, int hash_size,
-				  const char *rotate_suffix,
-				  bool retry_norotate_if_nospc,
-				  bool rename_as_last_resort_if_nospc)
-{
-	int ret;
-
-        rename_file_with_suffix(ctx, dst_path, rotate_suffix);
-
-        ret = tdb_backup(ctx, src_path, dst_path, hash_size);
-
-	if (ret != 0) {
-		DEBUG(10, ("backup of %s failed: %s\n", src_path, strerror(errno)));
-	}
-        if ((ret != 0) && (errno == ENOSPC) && retry_norotate_if_nospc)
-        {
-                char *rotate_path = talloc_asprintf(ctx, "%s%s", dst_path,
-                                                    rotate_suffix);
-                DEBUG(10, ("backup of %s failed due to lack of space\n",
-			   src_path));
-                DEBUGADD(10, ("trying to free some space by removing rotated "
-			      "dst %s\n", rotate_path));
-                if (unlink(rotate_path) == -1) {
-                        DEBUG(10, ("unlink of %s failed: %s\n", rotate_path,
-				   strerror(errno)));
-                } else {
-                        ret = tdb_backup(ctx, src_path, dst_path, hash_size);
-                }
-                TALLOC_FREE(rotate_path);
-        }
-
-        if ((ret != 0) && (errno == ENOSPC) && rename_as_last_resort_if_nospc)
-        {
-                DEBUG(10, ("backup of %s failed due to lack of space\n", 
-			   src_path));
-                DEBUGADD(10, ("using 'rename' as a last resort\n"));
-                ret = rename(src_path, dst_path);
-        }
-
-        return ret;
-}
-
-/*
- * validation function with backup handling:
- *
- *  - calls tdb_validate
- *  - if the tdb is ok, create a backup "name.bak", possibly moving
- *    existing backup to name.bak.old,
- *    return 0 (success) even if the backup fails
- *  - if the tdb is corrupt:
- *    - move the tdb to "name.corrupt"
- *    - check if there is valid backup.
- *      if so, restore the backup.
- *      if restore is successful, return 0 (success),
- *    - otherwise return -1 (failure)
- */
-int tdb_validate_and_backup(const char *tdb_path,
-			    tdb_validate_data_func validate_fn)
-{
-	int ret = -1;
-	const char *backup_suffix = ".bak";
-	const char *corrupt_suffix = ".corrupt";
-	const char *rotate_suffix = ".old";
-	char *tdb_path_backup;
-	struct stat st;
-	TALLOC_CTX *ctx = NULL;
-
-	ctx = talloc_new(NULL);
-	if (ctx == NULL) {
-		DEBUG(0, ("tdb_validate_and_backup: out of memory\n"));
-		goto done;
-	}
-
-	tdb_path_backup = talloc_asprintf(ctx, "%s%s", tdb_path, backup_suffix);
-
-	ret = tdb_validate_open(tdb_path, validate_fn);
-
-	if (ret == 0) {
-		DEBUG(1, ("tdb '%s' is valid\n", tdb_path));
-		ret = tdb_backup_with_rotate(ctx, tdb_path, tdb_path_backup, 0,
-					     rotate_suffix, True, False);
-		if (ret != 0) {
-			DEBUG(1, ("Error creating backup of tdb '%s'\n",
-				  tdb_path));
-			/* the actual validation was successful: */
-			ret = 0;
-		} else {
-			DEBUG(1, ("Created backup '%s' of tdb '%s'\n",
-				  tdb_path_backup, tdb_path));
-		}
-	} else {
-		DEBUG(1, ("tdb '%s' is invalid\n", tdb_path));
-
-		ret =stat(tdb_path_backup, &st);
-		if (ret != 0) {
-			DEBUG(5, ("Could not stat '%s': %s\n", tdb_path_backup,
-				  strerror(errno)));
-			DEBUG(1, ("No backup found.\n"));
-		} else {
-			DEBUG(1, ("backup '%s' found.\n", tdb_path_backup));
-			ret = tdb_validate_open(tdb_path_backup, validate_fn);
-			if (ret != 0) {
-				DEBUG(1, ("Backup '%s' is invalid.\n",
-					  tdb_path_backup));
-			}
-		}
-
-		if (ret != 0) {
-			int renamed = rename_file_with_suffix(ctx, tdb_path,
-							      corrupt_suffix);
-			if (renamed != 0) {
-				DEBUG(1, ("Error moving tdb to '%s%s'\n",
-					  tdb_path, corrupt_suffix));
-			} else {
-				DEBUG(1, ("Corrupt tdb stored as '%s%s'\n",
-					  tdb_path, corrupt_suffix));
-			}
-			goto done;
-		}
-
-		DEBUG(1, ("valid backup '%s' found\n", tdb_path_backup));
-		ret = tdb_backup_with_rotate(ctx, tdb_path_backup, tdb_path, 0,
-					     corrupt_suffix, True, True);
-		if (ret != 0) {
-			DEBUG(1, ("Error restoring backup from '%s'\n",
-				  tdb_path_backup));
-		} else {
-			DEBUG(1, ("Restored tdb backup from '%s'\n",
-				  tdb_path_backup));
-		}
-	}
-
-done:
-	TALLOC_FREE(ctx);
-	return ret;
-}

Deleted: branches/samba/upstream/source/lib/util_transfer_file.c
===================================================================
--- branches/samba/upstream/source/lib/util_transfer_file.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/util_transfer_file.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,110 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * Utility functions to transfer files.
- *
- * Copyright (C) Jeremy Allison 2001-2002
- * Copyright (C) Michael Adam 2008
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#include <includes.h>
-
-/****************************************************************************
- Transfer some data between two fd's.
-****************************************************************************/
-
-#ifndef TRANSFER_BUF_SIZE
-#define TRANSFER_BUF_SIZE 65536
-#endif
-
-
-ssize_t transfer_file_internal(void *in_file,
-			       void *out_file,
-			       size_t n,
-			       ssize_t (*read_fn)(void *, void *, size_t),
-			       ssize_t (*write_fn)(void *, const void *, size_t))
-{
-	char *buf;
-	size_t total = 0;
-	ssize_t read_ret;
-	ssize_t write_ret;
-	size_t num_to_read_thistime;
-	size_t num_written = 0;
-
-	if ((buf = SMB_MALLOC_ARRAY(char, TRANSFER_BUF_SIZE)) == NULL) {
-		return -1;
-	}
-
-	while (total < n) {
-		num_to_read_thistime = MIN((n - total), TRANSFER_BUF_SIZE);
-
-		read_ret = (*read_fn)(in_file, buf, num_to_read_thistime);
-		if (read_ret == -1) {
-			DEBUG(0,("transfer_file_internal: read failure. "
-				 "Error = %s\n", strerror(errno) ));
-			SAFE_FREE(buf);
-			return -1;
-		}
-		if (read_ret == 0) {
-			break;
-		}
-
-		num_written = 0;
-
-		while (num_written < read_ret) {
-			write_ret = (*write_fn)(out_file, buf + num_written,
-					        read_ret - num_written);
-
-			if (write_ret == -1) {
-				DEBUG(0,("transfer_file_internal: "
-					 "write failure. Error = %s\n",
-					 strerror(errno) ));
-				SAFE_FREE(buf);
-				return -1;
-			}
-			if (write_ret == 0) {
-				return (ssize_t)total;
-			}
-
-			num_written += (size_t)write_ret;
-		}
-
-		total += (size_t)read_ret;
-	}
-
-	SAFE_FREE(buf);
-	return (ssize_t)total;
-}
-
-static ssize_t sys_read_fn(void *file, void *buf, size_t len)
-{
-	int *fd = (int *)file;
-
-	return sys_read(*fd, buf, len);
-}
-
-static ssize_t sys_write_fn(void *file, const void *buf, size_t len)
-{
-	int *fd = (int *)file;
-
-	return sys_write(*fd, buf, len);
-}
-
-SMB_OFF_T transfer_file(int infd, int outfd, SMB_OFF_T n)
-{
-	return (SMB_OFF_T)transfer_file_internal(&infd, &outfd, (size_t)n,
-						 sys_read_fn, sys_write_fn);
-}

Modified: branches/samba/upstream/source/lib/util_unistr.c
===================================================================
--- branches/samba/upstream/source/lib/util_unistr.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/util_unistr.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -30,11 +31,19 @@
 static smb_ucs2_t *upcase_table;
 static smb_ucs2_t *lowcase_table;
 static uint8 *valid_table;
-static bool upcase_table_use_unmap;
-static bool lowcase_table_use_unmap;
-static bool valid_table_use_unmap;
+static BOOL upcase_table_use_unmap;
+static BOOL lowcase_table_use_unmap;
+static BOOL valid_table_use_unmap;
 
 /**
+ * This table says which Unicode characters are valid dos
+ * characters.
+ *
+ * Each value is just a single bit.
+ **/
+static uint8 doschar_table[8192]; /* 65536 characters / 8 bits/byte */
+
+/**
  * Destroy global objects allocated by load_case_tables()
  **/
 void gfree_case_tables(void)
@@ -73,20 +82,17 @@
 	static int initialised;
 	char *old_locale = NULL, *saved_locale = NULL;
 	int i;
-	TALLOC_CTX *frame = NULL;
 
 	if (initialised) {
 		return;
 	}
 	initialised = 1;
 
-	frame = talloc_stackframe();
-
-	upcase_table = (smb_ucs2_t *)map_file(data_path("upcase.dat"),
+	upcase_table = (smb_ucs2_t *)map_file(lib_path("upcase.dat"),
 					      0x20000);
 	upcase_table_use_unmap = ( upcase_table != NULL );
 
-	lowcase_table = (smb_ucs2_t *)map_file(data_path("lowcase.dat"),
+	lowcase_table = (smb_ucs2_t *)map_file(lib_path("lowcase.dat"),
 					       0x20000);
 	lowcase_table_use_unmap = ( lowcase_table != NULL );
 
@@ -142,9 +148,23 @@
 		SAFE_FREE(saved_locale);
 	}
 #endif
-	TALLOC_FREE(frame);
 }
 
+/*
+  see if a ucs2 character can be mapped correctly to a dos character
+  and mapped back to the same character in ucs2
+*/
+
+int check_dos_char(smb_ucs2_t c)
+{
+	lazy_initialize_conv();
+	
+	/* Find the right byte, and right bit within the byte; return
+	 * 1 or 0 */
+	return (doschar_table[(c & 0xffff) / 8] & (1 << (c & 7))) != 0;
+}
+
+
 static int check_dos_char_slowly(smb_ucs2_t c)
 {
 	char buf[10];
@@ -162,7 +182,34 @@
 	return (c == c2);
 }
 
+
 /**
+ * Fill out doschar table the hard way, by examining each character
+ **/
+
+void init_doschar_table(void)
+{
+	int i, j, byteval;
+
+	/* For each byte of packed table */
+	
+	for (i = 0; i <= 0xffff; i += 8) {
+		byteval = 0;
+		for (j = 0; j <= 7; j++) {
+			smb_ucs2_t c;
+
+			c = i + j;
+			
+			if (check_dos_char_slowly(c)) {
+				byteval |= 1 << j;
+			}
+		}
+		doschar_table[i/8] = byteval;
+	}
+}
+
+
+/**
  * Load the valid character map table from <tt>valid.dat</tt> or
  * create from the configured codepage.
  *
@@ -183,7 +230,7 @@
 		return;
 	}
 
-	valid_file = (uint8 *)map_file(data_path("valid.dat"), 0x10000);
+	valid_file = (uint8 *)map_file(lib_path("valid.dat"), 0x10000);
 	if (valid_file) {
 		valid_table = valid_file;
 		mapped_file = 1;
@@ -195,24 +242,22 @@
 	 * It might need to be regenerated if the code page changed.
 	 * We know that we're not using a mapped file, so we can
 	 * free() the old one. */
-	SAFE_FREE(valid_table);
+	if (valid_table) 
+		SAFE_FREE(valid_table);
 
 	/* use free rather than unmap */
 	valid_table_use_unmap = False;
 
 	DEBUG(2,("creating default valid table\n"));
 	valid_table = (uint8 *)SMB_MALLOC(0x10000);
-	SMB_ASSERT(valid_table != NULL);
 	for (i=0;i<128;i++) {
 		valid_table[i] = isalnum(i) || strchr(allowed,i);
 	}
-
-	lazy_initialize_conv();
-
+	
 	for (;i<0x10000;i++) {
 		smb_ucs2_t c;
 		SSVAL(&c, 0, i);
-		valid_table[i] = check_dos_char_slowly(c);
+		valid_table[i] = check_dos_char(c);
 	}
 }
 
@@ -227,7 +272,7 @@
  null termination if applied
 ********************************************************************/
 
-size_t dos_PutUniCode(char *dst,const char *src, size_t len, bool null_terminate)
+size_t dos_PutUniCode(char *dst,const char *src, size_t len, BOOL null_terminate)
 {
 	int flags = null_terminate ? STR_UNICODE|STR_NOALIGN|STR_TERMINATE
 				   : STR_UNICODE|STR_NOALIGN;
@@ -271,25 +316,6 @@
 	return pull_ucs2(NULL, dest, src, dest_len, src_len, flags|STR_UNICODE|STR_NOALIGN);
 }
 
-/* Copy a string from little-endian or big-endian unicode source (depending
- * on flags) to internal samba format destination. Allocates on talloc ctx.
- */
-
-int rpcstr_pull_talloc(TALLOC_CTX *ctx,
-			char **dest,
-			void *src,
-			int src_len,
-			int flags)
-{
-	return pull_ucs2_base_talloc(ctx,
-			NULL,
-			dest,
-			src,
-			src_len,
-			flags|STR_UNICODE|STR_NOALIGN);
-
-}
-
 /* Copy a string from a unistr2 source to internal samba format
    destination.  Use this instead of direct calls to rpcstr_pull() to avoid
    having to determine whether the source string is null terminated. */
@@ -304,144 +330,91 @@
  * copy because I don't really know how pull_ucs2 and friends calculate the
  * target size. If this turns out to be a major bottleneck someone with deeper
  * multi-byte knowledge needs to revisit this.
- * I just did (JRA :-). No longer uses copy.
  * My (VL) use is dsr_getdcname, which returns 6 strings, the alternative would
  * have been to manually talloc_strdup them in rpc_client/cli_netlogon.c.
  */
 
-char *rpcstr_pull_unistr2_talloc(TALLOC_CTX *ctx, const UNISTR2 *src)
+char *rpcstr_pull_unistr2_talloc(TALLOC_CTX *mem_ctx, const UNISTR2 *src)
 {
-	char *dest = NULL;
-	size_t dest_len = convert_string_talloc(ctx,
-				CH_UTF16LE,
-				CH_UNIX,
-				src->buffer,
-				src->uni_str_len * 2,
-				(void *)&dest,
-				true);
-	if (dest_len == (size_t)-1) {
+	pstring tmp;
+	size_t result;
+
+	result = pull_ucs2(NULL, tmp, src->buffer, sizeof(tmp),
+			   src->uni_str_len * 2, 0);
+	if (result == (size_t)-1) {
 		return NULL;
 	}
 
-	/* Ensure we're returning a null terminated string. */
-	if (dest_len) {
-		/* Did we already process the terminating zero ? */
-		if (dest[dest_len-1] != 0) {
-			size_t size = talloc_get_size(dest);
-			/* Have we got space to append the '\0' ? */
-			if (size <= dest_len) {
-				/* No, realloc. */
-				dest = TALLOC_REALLOC_ARRAY(ctx, dest, char,
-						dest_len+1);
-				if (!dest) {
-					/* talloc fail. */
-					dest_len = (size_t)-1;
-					return NULL;
-				}
-			}
-			/* Yay - space ! */
-			dest[dest_len] = '\0';
-			dest_len++;
-		}
-	} else if (dest) {
-		dest[0] = 0;
-	}
-
-	return dest;
+	return talloc_strdup(mem_ctx, tmp);
 }
 
 /* Converts a string from internal samba format to unicode
- */
+ */ 
 
-int rpcstr_push(void *dest, const char *src, size_t dest_len, int flags)
+int rpcstr_push(void* dest, const char *src, size_t dest_len, int flags)
 {
 	return push_ucs2(NULL, dest, src, dest_len, flags|STR_UNICODE|STR_NOALIGN);
 }
 
-/* Converts a string from internal samba format to unicode. Always terminates.
- * Actually just a wrapper round push_ucs2_talloc().
- */
-
-int rpcstr_push_talloc(TALLOC_CTX *ctx, smb_ucs2_t **dest, const char *src)
-{
-	return push_ucs2_talloc(ctx, dest, src);
-}
-
 /*******************************************************************
  Convert a (little-endian) UNISTR2 structure to an ASCII string.
 ********************************************************************/
 
 void unistr2_to_ascii(char *dest, const UNISTR2 *str, size_t maxlen)
 {
-	if ((str == NULL) || (str->uni_str_len == 0)) {
+	if (str == NULL) {
 		*dest='\0';
 		return;
 	}
 	pull_ucs2(NULL, dest, str->buffer, maxlen, str->uni_str_len*2, STR_NOALIGN);
 }
 
-#if 0
 /*******************************************************************
  Convert a (little-endian) UNISTR3 structure to an ASCII string.
 ********************************************************************/
 
 void unistr3_to_ascii(char *dest, const UNISTR3 *str, size_t maxlen)
 {
-	if ((str == NULL) || (str->uni_str_len == 0)) {
+	if (str == NULL) {
 		*dest='\0';
 		return;
 	}
 	pull_ucs2(NULL, dest, str->str.buffer, maxlen, str->uni_str_len*2,
 	          STR_NOALIGN);
 }
-#endif
+	
+/*******************************************************************
+ Give a static string for displaying a UNISTR2.
+********************************************************************/
 
+const char *unistr2_static(const UNISTR2 *str)
+{
+	static pstring ret;
+	unistr2_to_ascii(ret, str, sizeof(ret));
+	return ret;
+}
+
 /*******************************************************************
  Duplicate a UNISTR2 string into a null terminated char*
  using a talloc context.
 ********************************************************************/
 
-char *unistr2_to_ascii_talloc(TALLOC_CTX *ctx, const UNISTR2 *str)
+char *unistr2_tdup(TALLOC_CTX *ctx, const UNISTR2 *str)
 {
-	char *s = NULL;
-
-	if (!str || !str->buffer) {
+	char *s;
+	int maxlen = (str->uni_str_len+1)*4;
+	if (!str->buffer) {
 		return NULL;
 	}
-	if (pull_ucs2_base_talloc(ctx,
-				NULL,
-				&s,
-				str->buffer,
-				str->uni_str_len*2,
-				STR_NOALIGN) == (size_t)-1) {
+	s = (char *)TALLOC(ctx, maxlen); /* convervative */
+	if (!s) {
 		return NULL;
 	}
+	pull_ucs2(NULL, s, str->buffer, maxlen, str->uni_str_len*2, STR_NOALIGN);
 	return s;
 }
 
 /*******************************************************************
- Return a string for displaying a UNISTR2. Guarentees to return a
- valid string - "" if nothing else.
- Changed to use talloc_tos() under the covers.... JRA.
-********************************************************************/
-
-const char *unistr2_static(const UNISTR2 *str)
-{
-	char *dest = NULL;
-
-	if ((str == NULL) || (str->uni_str_len == 0)) {
-		return "";
-	}
-
-	dest = unistr2_to_ascii_talloc(talloc_tos(), str);
-	if (!dest) {
-		return "";
-	}
-
-	return dest;
-}
-
-/*******************************************************************
  Convert a wchar to upper case.
 ********************************************************************/
 
@@ -463,7 +436,7 @@
  Determine if a character is lowercase.
 ********************************************************************/
 
-bool islower_w(smb_ucs2_t c)
+BOOL islower_w(smb_ucs2_t c)
 {
 	return upcase_table[SVAL(&c,0)] != c;
 }
@@ -472,7 +445,7 @@
  Determine if a character is uppercase.
 ********************************************************************/
 
-bool isupper_w(smb_ucs2_t c)
+BOOL isupper_w(smb_ucs2_t c)
 {
 	return lowcase_table[SVAL(&c,0)] != c;
 }
@@ -481,7 +454,7 @@
  Determine if a character is valid in a 8.3 name.
 ********************************************************************/
 
-bool isvalid83_w(smb_ucs2_t c)
+BOOL isvalid83_w(smb_ucs2_t c)
 {
 	return valid_table[SVAL(&c,0)] != 0;
 }
@@ -622,10 +595,10 @@
  return True if any char is converted
 ********************************************************************/
 
-bool strlower_w(smb_ucs2_t *s)
+BOOL strlower_w(smb_ucs2_t *s)
 {
 	smb_ucs2_t cp;
-	bool ret = False;
+	BOOL ret = False;
 
 	while (*(COPY_UCS2_CHAR(&cp,s))) {
 		smb_ucs2_t v = tolower_w(cp);
@@ -643,10 +616,10 @@
  return True if any char is converted
 ********************************************************************/
 
-bool strupper_w(smb_ucs2_t *s)
+BOOL strupper_w(smb_ucs2_t *s)
 {
 	smb_ucs2_t cp;
-	bool ret = False;
+	BOOL ret = False;
 	while (*(COPY_UCS2_CHAR(&cp,s))) {
 		smb_ucs2_t v = toupper_w(cp);
 		if (v != cp) {
@@ -734,7 +707,7 @@
  Compare 2 strings.
 ********************************************************************/
 
-bool strequal_w(const smb_ucs2_t *s1, const smb_ucs2_t *s2)
+BOOL strequal_w(const smb_ucs2_t *s1, const smb_ucs2_t *s2)
 {
 	if (s1 == s2) {
 		return(True);
@@ -750,7 +723,7 @@
  Compare 2 strings up to and including the nth char.
 ******************************************************************/
 
-bool strnequal_w(const smb_ucs2_t *s1,const smb_ucs2_t *s2,size_t n)
+BOOL strnequal_w(const smb_ucs2_t *s1,const smb_ucs2_t *s2,size_t n)
 {
 	if (s1 == s2) {
 		return(True);
@@ -877,10 +850,10 @@
  Trim unicode string.
 ********************************************************************/
 
-bool trim_string_w(smb_ucs2_t *s, const smb_ucs2_t *front,
+BOOL trim_string_w(smb_ucs2_t *s, const smb_ucs2_t *front,
 				  const smb_ucs2_t *back)
 {
-	bool ret = False;
+	BOOL ret = False;
 	size_t len, front_len, back_len;
 
 	if (!s) {
@@ -979,6 +952,24 @@
 	return NULL;
 }
 
+BOOL trim_string_wa(smb_ucs2_t *s, const char *front,
+				  const char *back)
+{
+	wpstring f, b;
+
+	if (front) {
+		push_ucs2(NULL, f, front, sizeof(wpstring) - 1, STR_TERMINATE);
+	} else {
+		*f = 0;
+	}
+	if (back) {
+		push_ucs2(NULL, b, back, sizeof(wpstring) - 1, STR_TERMINATE);
+	} else {
+		*b = 0;
+	}
+	return trim_string_w(s, f, b);
+}
+
 /*******************************************************************
  Returns the length in number of wide characters.
 ******************************************************************/

Modified: branches/samba/upstream/source/lib/util_uuid.c
===================================================================
--- branches/samba/upstream/source/lib/util_uuid.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/util_uuid.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -44,6 +45,14 @@
 	memcpy(uu->node, in.info+10, 6);
 }
 
+struct GUID smb_uuid_unpack_static(const UUID_FLAT in)
+{
+	static struct GUID uu;
+
+	smb_uuid_unpack(in, &uu);
+	return uu;
+}
+
 void smb_uuid_generate_random(struct GUID *uu)
 {
 	UUID_FLAT tmp;
@@ -55,25 +64,35 @@
 	uu->time_hi_and_version = (uu->time_hi_and_version & 0x0FFF) | 0x4000;
 }
 
-const char *smb_uuid_string(TALLOC_CTX *mem_ctx, const struct GUID uu)
+char *smb_uuid_to_string(const struct GUID uu)
 {
-	char *result;
+	char *out;
 
-	result = talloc_asprintf(
-		mem_ctx,
-		"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
-		uu.time_low, uu.time_mid, uu.time_hi_and_version,
-		uu.clock_seq[0], uu.clock_seq[1],
-		uu.node[0], uu.node[1], uu.node[2], 
-		uu.node[3], uu.node[4], uu.node[5]);
+	asprintf(&out, "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
+		 uu.time_low, uu.time_mid, uu.time_hi_and_version,
+		 uu.clock_seq[0], uu.clock_seq[1],
+		 uu.node[0], uu.node[1], uu.node[2], 
+		 uu.node[3], uu.node[4], uu.node[5]);
 
-	SMB_ASSERT(result != NULL);
-	return result;
+	return out;
 }
 
-bool smb_string_to_uuid(const char *in, struct GUID* uu)
+const char *smb_uuid_string_static(const struct GUID uu)
 {
-	bool ret = False;
+	static char out[37];
+
+	slprintf(out, sizeof(out), 
+		 "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
+		 uu.time_low, uu.time_mid, uu.time_hi_and_version,
+		 uu.clock_seq[0], uu.clock_seq[1],
+		 uu.node[0], uu.node[1], uu.node[2], 
+		 uu.node[3], uu.node[4], uu.node[5]);
+	return out;
+}
+
+BOOL smb_string_to_uuid(const char *in, struct GUID* uu)
+{
+	BOOL ret = False;
 	const char *ptr = in;
 	char *end = (char *)in;
 	int i;
@@ -115,19 +134,3 @@
 out:
         return ret;
 }
-
-/*****************************************************************
- Return the binary string representation of a GUID.
- Caller must free.
-*****************************************************************/
-
-char *guid_binstring(const struct GUID *guid)
-{
-	UUID_FLAT guid_flat;
-
-	smb_uuid_pack(*guid, &guid_flat);
-
-	return binary_string_rfc2254((char *)guid_flat.info, UUID_FLAT_SIZE);
-}
-
-

Modified: branches/samba/upstream/source/lib/version.c
===================================================================
--- branches/samba/upstream/source/lib/version.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/version.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,47 +15,38 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
-#include <assert.h>
 
 const char *samba_version_string(void)
 {
 #ifndef SAMBA_VERSION_VENDOR_SUFFIX
 	return SAMBA_VERSION_OFFICIAL_STRING;
 #else
-	static char *samba_version;
-	int res;
+	static fstring samba_version;
+	static BOOL init_samba_version;
 #ifdef SAMBA_VERSION_VENDOR_PATCH
-	char *tmp_version;
+	fstring tmp_version;
+	size_t remaining;
 #endif
 
-	if (samba_version != NULL)
+	if (init_samba_version)
 		return samba_version;
 
-	res = asprintf(&samba_version, "%s-%s",
-		       SAMBA_VERSION_OFFICIAL_STRING,
-		       SAMBA_VERSION_VENDOR_SUFFIX);
-	/*
-	 * Can't use smb_panic here due to dependencies
-	 */
-	assert(res != -1);
+	snprintf(samba_version,sizeof(samba_version),"%s-%s",
+		SAMBA_VERSION_OFFICIAL_STRING,
+		SAMBA_VERSION_VENDOR_SUFFIX);
 
 #ifdef SAMBA_VERSION_VENDOR_PATCH
-	res = asprintf(&tmp_version, "%s-%d", samba_version,
-		       SAMBA_VERSION_VENDOR_PATCH);
-	/*
-	 * Can't use smb_panic here due to dependencies
-	 */
-	assert(res != -1);
-
-	SAFE_FREE(samba_version);
-
-	samba_version = tmp_version;
+	remaining = sizeof(samba_version)-strlen(samba_version);
+	snprintf( tmp_version, sizeof(tmp_version),  "-%d", SAMBA_VERSION_VENDOR_PATCH);
+	strlcat( samba_version, tmp_version, remaining-1 );
 #endif
 
+	init_samba_version = True;
 	return samba_version;
 #endif
 }

Deleted: branches/samba/upstream/source/lib/winbind_util.c
===================================================================
--- branches/samba/upstream/source/lib/winbind_util.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/winbind_util.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,321 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   Winbind Utility functions
-
-   Copyright (C) Gerald (Jerry) Carter   2007
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-
-#if defined(WITH_WINBIND)
-
-#include "nsswitch/libwbclient/wbclient.h"
-
-/* Call winbindd to convert a name to a sid */
-
-bool winbind_lookup_name(const char *dom_name, const char *name, DOM_SID *sid, 
-                         enum lsa_SidType *name_type)
-{
-	struct wbcDomainSid dom_sid;
-	wbcErr result;
-	enum wbcSidType type;	
-
-	result = wbcLookupName(dom_name, name, &dom_sid, &type);
-	if (result != WBC_ERR_SUCCESS)
-		return false;
-
-	memcpy(sid, &dom_sid, sizeof(DOM_SID));	
-	*name_type = (enum lsa_SidType)type;	
-
-	return true;	
-}
-
-/* Call winbindd to convert sid to name */
-
-bool winbind_lookup_sid(TALLOC_CTX *mem_ctx, const DOM_SID *sid, 
-			const char **domain, const char **name,
-                        enum lsa_SidType *name_type)
-{
-	struct wbcDomainSid dom_sid;
-	wbcErr result;
-	enum wbcSidType type;
-	char *domain_name = NULL;
-	char *account_name = NULL;
-
-	memcpy(&dom_sid, sid, sizeof(dom_sid));	
-
-	result = wbcLookupSid(&dom_sid, &domain_name, &account_name, &type);
-	if (result != WBC_ERR_SUCCESS)
-		return false;
-
-	/* Copy out result */
-
-	if (domain) {		
-		*domain = talloc_strdup(mem_ctx, domain_name);
-	}
-	if (name) {
-		*name = talloc_strdup(mem_ctx, account_name);
-	}
-	*name_type = (enum lsa_SidType)type;
-
-	DEBUG(10, ("winbind_lookup_sid: SUCCESS: SID %s -> %s %s\n", 
-		   sid_string_dbg(sid), domain_name, account_name));
-
-	wbcFreeMemory(domain_name);
-	wbcFreeMemory(account_name);
-	
-	if ((domain && !*domain) || (name && !*name)) {		
-		DEBUG(0,("winbind_lookup_sid: talloc() failed!\n"));
-		return false;
-	}	
-
-
-	return true;
-}
-
-/* Ping winbindd to see it is alive */
-
-bool winbind_ping(void)
-{
-	wbcErr result = wbcPing();
-
-	return (result == WBC_ERR_SUCCESS);
-}
-
-/* Call winbindd to convert SID to uid */
-
-bool winbind_sid_to_uid(uid_t *puid, const DOM_SID *sid)
-{
-	struct wbcDomainSid dom_sid;
-	wbcErr result;
-
-	memcpy(&dom_sid, sid, sizeof(dom_sid));	
-
-	result = wbcSidToUid(&dom_sid, puid);	
-
-	return (result == WBC_ERR_SUCCESS);	
-}
-
-/* Call winbindd to convert uid to sid */
-
-bool winbind_uid_to_sid(DOM_SID *sid, uid_t uid)
-{
-	struct wbcDomainSid dom_sid;
-	wbcErr result;
-
-	result = wbcUidToSid(uid, &dom_sid);
-	if (result == WBC_ERR_SUCCESS) {
-		memcpy(sid, &dom_sid, sizeof(DOM_SID));
-	} else {
-		sid_copy(sid, &global_sid_NULL);
-	}
-
-	return (result == WBC_ERR_SUCCESS);
-}
-
-/* Call winbindd to convert SID to gid */
-
-bool winbind_sid_to_gid(gid_t *pgid, const DOM_SID *sid)
-{
-	struct wbcDomainSid dom_sid;
-	wbcErr result;
-
-	memcpy(&dom_sid, sid, sizeof(dom_sid));	
-
-	result = wbcSidToGid(&dom_sid, pgid);	
-
-	return (result == WBC_ERR_SUCCESS);	
-}
-
-/* Call winbindd to convert gid to sid */
-
-bool winbind_gid_to_sid(DOM_SID *sid, gid_t gid)
-{
-	struct wbcDomainSid dom_sid;
-	wbcErr result;
-
-	result = wbcGidToSid(gid, &dom_sid);
-	if (result == WBC_ERR_SUCCESS) {
-		memcpy(sid, &dom_sid, sizeof(DOM_SID));
-	} else {
-		sid_copy(sid, &global_sid_NULL);
-	}
-
-	return (result == WBC_ERR_SUCCESS);
-}
-
-/* Check for a trusted domain */
-
-wbcErr wb_is_trusted_domain(const char *domain)
-{
-	wbcErr result;
-	struct wbcDomainInfo *info = NULL;
-	
-	result = wbcDomainInfo(domain, &info);
-
-	if (WBC_ERROR_IS_OK(result)) {
-		wbcFreeMemory(info);
-	}
-
-	return result;	
-}
-
-/* Lookup a set of rids in a given domain */
-
-bool winbind_lookup_rids(TALLOC_CTX *mem_ctx,
-			 const DOM_SID *domain_sid,
-			 int num_rids, uint32 *rids,
-			 const char **domain_name,
-			 const char ***names, enum lsa_SidType **types)
-{
-	const char *dom_name = NULL;
-	const char **namelist = NULL;
-	enum wbcSidType *name_types = NULL;
-	struct wbcDomainSid dom_sid;
-	wbcErr ret;
-	int i;	
-	
-	memcpy(&dom_sid, domain_sid, sizeof(struct wbcDomainSid));
-	
-	ret = wbcLookupRids(&dom_sid, num_rids, rids,
-			    &dom_name, &namelist, &name_types);
-	if (ret != WBC_ERR_SUCCESS) {		
-		return false;
-	}	
-	
-	*domain_name = talloc_strdup(mem_ctx, dom_name);
-	*names       = TALLOC_ARRAY(mem_ctx, const char*, num_rids);
-	*types       = TALLOC_ARRAY(mem_ctx, enum lsa_SidType, num_rids);
-
-	for(i=0; i<num_rids; i++) {
-		(*names)[i] = talloc_strdup(*names, namelist[i]);
-		(*types)[i] = (enum lsa_SidType)name_types[i];
-	}
-
-	wbcFreeMemory(CONST_DISCARD(char*, dom_name));
-	wbcFreeMemory(namelist);
-	wbcFreeMemory(name_types);
-	
-	return true;	
-}
-
-/* Ask Winbind to allocate a new uid for us */
-
-bool winbind_allocate_uid(uid_t *uid)
-{
-	wbcErr ret;
-	
-	ret = wbcAllocateUid(uid);
-	
-	return (ret == WBC_ERR_SUCCESS);
-}
-
-/* Ask Winbind to allocate a new gid for us */
-
-bool winbind_allocate_gid(gid_t *gid)
-{
-	wbcErr ret;
-	
-	ret = wbcAllocateGid(gid);
-	
-	return (ret == WBC_ERR_SUCCESS);
-}
-
-#else      /* WITH_WINBIND */
-
-bool winbind_lookup_name(const char *dom_name, const char *name, DOM_SID *sid, 
-                         enum lsa_SidType *name_type)
-{
-	return false;
-}
-
-/* Call winbindd to convert sid to name */
-
-bool winbind_lookup_sid(TALLOC_CTX *mem_ctx, const DOM_SID *sid, 
-			const char **domain, const char **name,
-                        enum lsa_SidType *name_type)
-{
-	return false;
-}
-
-/* Ping winbindd to see it is alive */
-
-bool winbind_ping(void)
-{
-	return false;
-}
-
-/* Call winbindd to convert SID to uid */
-
-bool winbind_sid_to_uid(uid_t *puid, const DOM_SID *sid)
-{
-	return false;
-}
-
-/* Call winbindd to convert uid to sid */
-
-bool winbind_uid_to_sid(DOM_SID *sid, uid_t uid)
-{
-	return false;
-}
-
-/* Call winbindd to convert SID to gid */
-
-bool winbind_sid_to_gid(gid_t *pgid, const DOM_SID *sid)
-{
-	return false;	
-}
-
-/* Call winbindd to convert gid to sid */
-
-bool winbind_gid_to_sid(DOM_SID *sid, gid_t gid)
-{
-	return false;
-}
-
-/* Check for a trusted domain */
-
-wbcErr wb_is_trusted_domain(const char *domain)
-{
-	return WBC_ERR_UNKNOWN_FAILURE;
-}
-
-/* Lookup a set of rids in a given domain */
-
-bool winbind_lookup_rids(TALLOC_CTX *mem_ctx,
-			 const DOM_SID *domain_sid,
-			 int num_rids, uint32 *rids,
-			 const char **domain_name,
-			 const char ***names, enum lsa_SidType **types)
-{
-	return false;
-}
-
-/* Ask Winbind to allocate a new uid for us */
-
-bool winbind_allocate_uid(uid_t *uid)
-{
-	return false;
-}
-
-/* Ask Winbind to allocate a new gid for us */
-
-bool winbind_allocate_gid(gid_t *gid)
-{
-	return false;
-}
-
-#endif     /* WITH_WINBIND */

Modified: branches/samba/upstream/source/lib/wins_srv.c
===================================================================
--- branches/samba/upstream/source/lib/wins_srv.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/wins_srv.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -16,11 +16,14 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
+extern struct in_addr loopback_ip;
+
 /*
   This is pretty much a complete rewrite of the earlier code. The main
   aim of the rewrite is to add support for having multiple wins server
@@ -94,10 +97,10 @@
   see if an ip is on the dead list
 */
 
-bool wins_srv_is_dead(struct in_addr wins_ip, struct in_addr src_ip)
+BOOL wins_srv_is_dead(struct in_addr wins_ip, struct in_addr src_ip)
 {
 	char *keystr = wins_srv_keystr(wins_ip, src_ip);
-	bool result;
+	BOOL result;
 
 	/* If the key exists then the WINS server has been marked as dead */
 
@@ -132,7 +135,7 @@
 {
 	char *keystr;
 
-	if (is_zero_ip_v4(wins_ip) || wins_srv_is_dead(wins_ip, src_ip))
+	if (is_zero_ip(wins_ip) || wins_srv_is_dead(wins_ip, src_ip))
 		return;
 
 	keystr = wins_srv_keystr(wins_ip, src_ip);
@@ -183,16 +186,14 @@
 	char *s = strchr(str, ':');
 	if (!s) {
 		fstrcpy(ip->tag, "*");
-		(void)interpret_addr2(&ip->ip,str);
+		ip->ip = *interpret_addr2(str);
 		return;
 	} 
 
-	(void)interpret_addr2(&ip->ip,s+1);
+	ip->ip = *interpret_addr2(s+1);
 	fstrcpy(ip->tag, str);
 	s = strchr(ip->tag, ':');
-	if (s) {
-		*s = 0;
-	}
+	if (s) *s = 0;
 }
 
 
@@ -284,15 +285,13 @@
 
 	/* if we are a wins server then we always just talk to ourselves */
 	if (lp_wins_support()) {
-		struct in_addr loopback_ip;
-		loopback_ip.s_addr = htonl(INADDR_LOOPBACK);
 		return loopback_ip;
 	}
 
 	list = lp_wins_server_list();
 	if (!list || !list[0]) {
 		struct in_addr ip;
-		zero_ip_v4(&ip);
+		zero_ip(&ip);
 		return ip;
 	}
 
@@ -324,7 +323,7 @@
 	}
 
 	/* this can't happen?? */
-	zero_ip_v4(&t_ip.ip);
+	zero_ip(&t_ip.ip);
 	return t_ip.ip;
 }
 

Modified: branches/samba/upstream/source/lib/xfile.c
===================================================================
--- branches/samba/upstream/source/lib/xfile.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/lib/xfile.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /*
@@ -227,15 +228,9 @@
 	VA_COPY(ap2, ap);
 
 	len = vasprintf(&p, format, ap2);
-	if (len <= 0) {
-		va_end(ap2);
-		return len;
-	}
+	if (len <= 0) return len;
 	ret = x_fwrite(p, 1, len, f);
 	SAFE_FREE(p);
-
-	va_end(ap2);
-
 	return ret;
 }
 

Modified: branches/samba/upstream/source/libaddns/addns.h
===================================================================
--- branches/samba/upstream/source/libaddns/addns.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libaddns/addns.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -19,7 +19,9 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, see <http://www.gnu.org/licenses/>.
+  License along with this library; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
+  02110-1301  USA
 */
 
 #ifndef _ADDNS_H

Modified: branches/samba/upstream/source/libaddns/dns.h
===================================================================
--- branches/samba/upstream/source/libaddns/dns.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libaddns/dns.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -19,23 +19,16 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, see <http://www.gnu.org/licenses/>.
+  License along with this library; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
+  02110-1301  USA
 */
 
 #ifndef _DNS_H
 #define _DNS_H
 
-#include "lib/replace/replace.h"
-#include "system/network.h"
+#include "config.h"
 
-/* make sure we have included the correct config.h */
-#ifndef NO_CONFIG_H /* for some tests */
-#ifndef CONFIG_H_IS_FROM_SAMBA
-#error "make sure you have removed all config.h files from standalone builds!"
-#error "the included config.h isn't from samba!"
-#endif
-#endif /* NO_CONFIG_H */
-
 #include <stdio.h>
 #include <stdlib.h>
 #include <fcntl.h>
@@ -95,11 +88,6 @@
 
 #include <talloc.h>
 
-#if 0
-
-Disable these now we have checked all code paths and ensured
-NULL returns on zero request. JRA.
-
 void *_talloc_zero_zeronull(const void *ctx, size_t size, const char *name);
 void *_talloc_memdup_zeronull(const void *t, const void *p, size_t size, const char *name);
 void *_talloc_array_zeronull(const void *ctx, size_t el_size, unsigned count, const char *name);
@@ -113,27 +101,12 @@
 #define TALLOC_ZERO(ctx, size) _talloc_zero_zeronull(ctx, size, __location__)
 #define TALLOC_ZERO_P(ctx, type) (type *)_talloc_zero_zeronull(ctx, sizeof(type), #type)
 #define TALLOC_ZERO_ARRAY(ctx, type, count) (type *)_talloc_zero_array_zeronull(ctx, sizeof(type), count, #type)
-#define TALLOC_SIZE(ctx, size) talloc_zeronull(ctx, size, __location__)
-#define TALLOC_ZERO_SIZE(ctx, size) _talloc_zero_zeronull(ctx, size, __location__)
-
-#else
-
-#define TALLOC(ctx, size) talloc_named_const(ctx, size, __location__)
-#define TALLOC_P(ctx, type) (type *)talloc_named_const(ctx, sizeof(type), #type)
-#define TALLOC_ARRAY(ctx, type, count) (type *)_talloc_array(ctx, sizeof(type), count, #type)
-#define TALLOC_MEMDUP(ctx, ptr, size) _talloc_memdup(ctx, ptr, size, __location__)
-#define TALLOC_ZERO(ctx, size) _talloc_zero(ctx, size, __location__)
-#define TALLOC_ZERO_P(ctx, type) (type *)_talloc_zero(ctx, sizeof(type), #type)
-#define TALLOC_ZERO_ARRAY(ctx, type, count) (type *)_talloc_zero_array(ctx, sizeof(type), count, #type)
-#define TALLOC_SIZE(ctx, size) talloc_named_const(ctx, size, __location__)
-#define TALLOC_ZERO_SIZE(ctx, size) _talloc_zero(ctx, size, __location__)
-
-#endif
-
 #define TALLOC_REALLOC(ctx, ptr, count) _talloc_realloc(ctx, ptr, count, __location__)
 #define TALLOC_REALLOC_ARRAY(ctx, ptr, type, count) (type *)_talloc_realloc_array(ctx, ptr, sizeof(type), count, #type)
 #define talloc_destroy(ctx) talloc_free(ctx)
 #define TALLOC_FREE(ctx) do { if ((ctx) != NULL) {talloc_free(ctx); ctx=NULL;} } while(0)
+#define TALLOC_SIZE(ctx, size) talloc_zeronull(ctx, size, __location__)
+#define TALLOC_ZERO_SIZE(ctx, size) _talloc_zero_zeronull(ctx, size, __location__)
 
 /*******************************************************************
    Type definitions for int16, int32, uint16 and uint32.  Needed
@@ -310,6 +283,12 @@
 
 typedef long HANDLE;
 
+#ifndef _UPPER_BOOL
+typedef int BOOL;
+#define _UPPER_BOOL
+#endif
+
+
 enum dns_ServerType { DNS_SRV_ANY, DNS_SRV_WIN2000, DNS_SRV_WIN2003 };
 
 struct dns_domain_label {
@@ -420,7 +399,7 @@
 			     struct dns_update_request **preq );
 DNS_ERROR dns_create_probe(TALLOC_CTX *mem_ctx, const char *zone,
 			   const char *host, int num_ips,
-			   const struct sockaddr_storage *sslist,
+			   const struct in_addr *iplist,
 			   struct dns_update_request **preq);
 DNS_ERROR dns_create_rrec(TALLOC_CTX *mem_ctx, const char *name,
 			  uint16 type, uint16 r_class, uint32 ttl,
@@ -435,7 +414,7 @@
 				 struct dns_rrec **prec);
 DNS_ERROR dns_create_name_in_use_record(TALLOC_CTX *mem_ctx,
 					const char *name,
-					const struct sockaddr_storage *ip,
+					const struct in_addr *ip,
 					struct dns_rrec **prec);
 DNS_ERROR dns_create_delete_record(TALLOC_CTX *mem_ctx, const char *name,
 				   uint16 type, uint16 r_class,
@@ -444,7 +423,7 @@
 					    const char *name, uint32 type,
 					    struct dns_rrec **prec);
 DNS_ERROR dns_create_a_record(TALLOC_CTX *mem_ctx, const char *host,
-			      uint32 ttl, const struct sockaddr_storage *pss,
+			      uint32 ttl, struct in_addr ip,
 			      struct dns_rrec **prec);
 DNS_ERROR dns_unmarshall_tkey_record(TALLOC_CTX *mem_ctx, struct dns_rrec *rec,
 				     struct dns_tkey_record **ptkey);
@@ -526,7 +505,7 @@
 DNS_ERROR dns_create_update_request(TALLOC_CTX *mem_ctx,
 				    const char *domainname,
 				    const char *hostname,
-				    const struct sockaddr_storage *ip_addr,
+				    const struct in_addr *ip_addr,
 				    size_t num_adds,
 				    struct dns_update_request **preq);
 

Modified: branches/samba/upstream/source/libaddns/dnserr.h
===================================================================
--- branches/samba/upstream/source/libaddns/dnserr.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libaddns/dnserr.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -19,7 +19,9 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, see <http://www.gnu.org/licenses/>.
+  License along with this library; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
+  02110-1301  USA
 */
 
 #ifndef _DNSERR_H

Modified: branches/samba/upstream/source/libaddns/dnsgss.c
===================================================================
--- branches/samba/upstream/source/libaddns/dnsgss.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libaddns/dnsgss.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -19,7 +19,9 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, see <http://www.gnu.org/licenses/>.
+  License along with this library; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+  02110-1301  USA
 */
 
 #include "dns.h"
@@ -219,8 +221,11 @@
 
 	gss_name_t targ_name;
 
+	krb5_principal host_principal;
+	krb5_context krb_ctx = NULL;
+
 	gss_OID_desc nt_host_oid_desc =
-		{10, (char *)"\x2a\x86\x48\x86\xf7\x12\x01\x02\x02\x01"};
+		{ 10, (char *)"\052\206\110\206\367\022\001\002\002\002" };
 
 	TALLOC_CTX *mem_ctx;
 
@@ -244,13 +249,23 @@
 		goto error;
 	}
 
-	input_name.value = targetname;
-	input_name.length = strlen(targetname);
+	krb5_init_context( &krb_ctx );
+	krb5_parse_name( krb_ctx, targetname, &host_principal );
 
+	/* don't free the principal until after you call
+	   gss_release_name() or else you'll get a segv
+	   as the krb5_copy_principal() does a structure 
+	   copy and not a deep copy.    --jerry*/
+
+	input_name.value = &host_principal;
+	input_name.length = sizeof( host_principal );
+
 	major = gss_import_name( &minor, &input_name,
 				 &nt_host_oid_desc, &targ_name );
 
 	if (major) {
+		krb5_free_principal( krb_ctx, host_principal );
+		krb5_free_context( krb_ctx );
 		err = ERROR_DNS_GSS_ERROR;
 		goto error;
 	}
@@ -260,6 +275,11 @@
 	
 	gss_release_name( &minor, &targ_name );
 
+	/* now we can free the principal */
+
+	krb5_free_principal( krb_ctx, host_principal );
+	krb5_free_context( krb_ctx );
+
  error:
 	TALLOC_FREE(mem_ctx);
 

Modified: branches/samba/upstream/source/libaddns/dnsmarshall.c
===================================================================
--- branches/samba/upstream/source/libaddns/dnsmarshall.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libaddns/dnsmarshall.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -17,7 +17,9 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, see <http://www.gnu.org/licenses/>.
+  License along with this library; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
+  02110-1301  USA
 */
 
 #include "dns.h"

Modified: branches/samba/upstream/source/libaddns/dnsrecord.c
===================================================================
--- branches/samba/upstream/source/libaddns/dnsrecord.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libaddns/dnsrecord.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -18,7 +18,9 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, see <http://www.gnu.org/licenses/>.
+  License along with this library; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
+  02110-1301  USA
 */
 
 #include "dns.h"
@@ -119,19 +121,12 @@
 }
 
 DNS_ERROR dns_create_a_record(TALLOC_CTX *mem_ctx, const char *host,
-			      uint32 ttl, const struct sockaddr_storage *pss,
+			      uint32 ttl, struct in_addr ip,
 			      struct dns_rrec **prec)
 {
 	uint8 *data;
 	DNS_ERROR err;
-	struct in_addr ip;
 
-	if (pss->ss_family != AF_INET) {
-		/* Silently ignore this. */
-		return ERROR_DNS_SUCCESS;
-	}
-
-	ip = ((struct sockaddr_in *)pss)->sin_addr;
 	if (!(data = (uint8 *)TALLOC_MEMDUP(mem_ctx, (const void *)&ip.s_addr,
 					    sizeof(ip.s_addr)))) {
 		return ERROR_DNS_NO_MEMORY;
@@ -149,11 +144,11 @@
 
 DNS_ERROR dns_create_name_in_use_record(TALLOC_CTX *mem_ctx,
 					const char *name,
-					const struct sockaddr_storage *ss,
+					const struct in_addr *ip,
 					struct dns_rrec **prec)
 {
-	if (ss != NULL) {
-		return dns_create_a_record(mem_ctx, name, 0, ss, prec);
+	if (ip != NULL) {
+		return dns_create_a_record(mem_ctx, name, 0, *ip, prec);
 	}
 
 	return dns_create_rrec(mem_ctx, name, QTYPE_ANY, DNS_CLASS_IN, 0, 0,
@@ -328,7 +323,7 @@
 
 DNS_ERROR dns_create_probe(TALLOC_CTX *mem_ctx, const char *zone,
 			   const char *host, int num_ips,
-			   const struct sockaddr_storage *sslist,
+			   const struct in_addr *iplist,
 			   struct dns_update_request **preq)
 {
 	struct dns_update_request *req;
@@ -347,7 +342,7 @@
 
 	for (i=0; i<num_ips; i++) {
 		err = dns_create_name_in_use_record(req, host,
-						    &sslist[i], &rec);
+						    &iplist[i], &rec);
 		if (!ERR_DNS_IS_OK(err)) goto error;
 
 		err = dns_add_rrec(req, rec, &req->num_preqs, &req->preqs);
@@ -365,14 +360,14 @@
 DNS_ERROR dns_create_update_request(TALLOC_CTX *mem_ctx,
 				    const char *domainname,
 				    const char *hostname,
-				    const struct sockaddr_storage *ss_addrs,
+				    const struct in_addr *ip_addrs,
 				    size_t num_addrs,
 				    struct dns_update_request **preq)
 {
 	struct dns_update_request *req;
 	struct dns_rrec *rec;
 	DNS_ERROR err;
-	size_t i;
+	size_t i;	
 
 	err = dns_create_update(mem_ctx, domainname, &req);
 	if (!ERR_DNS_IS_OK(err)) return err;
@@ -395,7 +390,7 @@
 	err = dns_create_delete_record(req, hostname, QTYPE_A, DNS_CLASS_ANY,
 				       &rec);
 	if (!ERR_DNS_IS_OK(err)) goto error;
-
+	
 	err = dns_add_rrec(req, rec, &req->num_updates, &req->updates);
 	if (!ERR_DNS_IS_OK(err)) goto error;
 
@@ -403,15 +398,15 @@
 	 * .. and add our IPs
 	 */
 
-	for ( i=0; i<num_addrs; i++ ) {
-		err = dns_create_a_record(req, hostname, 3600, &ss_addrs[i], &rec);
-		if (!ERR_DNS_IS_OK(err))
+	for ( i=0; i<num_addrs; i++ ) {		
+		err = dns_create_a_record(req, hostname, 3600, ip_addrs[i], &rec);
+		if (!ERR_DNS_IS_OK(err)) 
 			goto error;
 
 		err = dns_add_rrec(req, rec, &req->num_updates, &req->updates);
-		if (!ERR_DNS_IS_OK(err))
+		if (!ERR_DNS_IS_OK(err)) 
 			goto error;
-	}
+	}	
 
 	*preq = req;
 	return ERROR_DNS_SUCCESS;

Modified: branches/samba/upstream/source/libaddns/dnssock.c
===================================================================
--- branches/samba/upstream/source/libaddns/dnssock.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libaddns/dnssock.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -19,7 +19,9 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, see <http://www.gnu.org/licenses/>.
+  License along with this library; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
+  02110-1301  USA
 */
 
 #include "dns.h"
@@ -118,7 +120,6 @@
 	   the receiver (in this example case "123.456.789.1")
 	   and the specified port number. */
 
-	ZERO_STRUCT(RecvAddr);
 	RecvAddr.sin_family = AF_INET;
 	RecvAddr.sin_port = htons( DNS_UDP_PORT );
 	RecvAddr.sin_addr.s_addr = ulAddress;

Modified: branches/samba/upstream/source/libaddns/dnsutils.c
===================================================================
--- branches/samba/upstream/source/libaddns/dnsutils.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libaddns/dnsutils.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -19,7 +19,9 @@
   Lesser General Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, see <http://www.gnu.org/licenses/>.
+  License along with this library; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
+  02110-1301  USA
 */
 
 #include "dns.h"

Modified: branches/samba/upstream/source/libads/ads_status.c
===================================================================
--- branches/samba/upstream/source/libads/ads_status.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libads/ads_status.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -99,6 +100,10 @@
 */
 const char *ads_errstr(ADS_STATUS status)
 {
+	static char *ret;
+
+	SAFE_FREE(ret);
+
 	switch (status.error_type) {
 	case ENUM_ADS_ERROR_SYSTEM:
 		return strerror(status.err.rc);
@@ -113,7 +118,6 @@
 #ifdef HAVE_GSSAPI
 	case ENUM_ADS_ERROR_GSS:
 	{
-		char *ret;
 		uint32 msg_ctx;
 		uint32 minor;
 		gss_buffer_desc msg1, msg2;
@@ -126,9 +130,7 @@
 				   GSS_C_NULL_OID, &msg_ctx, &msg1);
 		gss_display_status(&minor, status.minor_status, GSS_C_MECH_CODE,
 				   GSS_C_NULL_OID, &msg_ctx, &msg2);
-		ret = talloc_asprintf(talloc_tos(), "%s : %s",
-				      (char *)msg1.value, (char *)msg2.value);
-		SMB_ASSERT(ret != NULL);
+		asprintf(&ret, "%s : %s", (char *)msg1.value, (char *)msg2.value);
 		gss_release_buffer(&minor, &msg1);
 		gss_release_buffer(&minor, &msg2);
 		return ret;
@@ -139,14 +141,7 @@
 	default:
 		return "Unknown ADS error type!? (not compiled in?)";
 	}
-}
 
-#ifdef HAVE_GSSAPI
-NTSTATUS gss_err_to_ntstatus(uint32 maj, uint32 min)
-{
-        ADS_STATUS adss = ADS_ERROR_GSS(maj, min);
-        DEBUG(10,("gss_err_to_ntstatus: Error %s\n",
-                ads_errstr(adss) ));
-        return ads_ntstatus(adss);
 }
-#endif
+
+

Modified: branches/samba/upstream/source/libads/ads_struct.c
===================================================================
--- branches/samba/upstream/source/libads/ads_struct.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libads/ads_struct.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -29,42 +30,35 @@
 	int numbits = 0;
 	char *ret;
 	int len;
-	char *saveptr;
-
+	
 	r = SMB_STRDUP(realm);
 
-	if (!r || !*r) {
+	if (!r || !*r)
 		return r;
-	}
 
-	for (p=r; *p; p++) {
-		if (strchr(sep, *p)) {
+	for (p=r; *p; p++)
+		if (strchr(sep, *p))
 			numbits++;
-		}
-	}
 
 	len = (numbits+1)*(strlen(field)+1) + strlen(r) + 1;
 
 	ret = (char *)SMB_MALLOC(len);
-	if (!ret) {
-		free(r);
+	if (!ret)
 		return NULL;
-	}
 
 	strlcpy(ret,field, len);
-	p=strtok_r(r, sep, &saveptr);
+	p=strtok(r,sep); 
 	if (p) {
 		strlcat(ret, p, len);
 	
-		while ((p=strtok_r(NULL, sep, &saveptr)) != NULL) {
+		while ((p=strtok(NULL,sep))) {
 			char *s;
 			if (reverse)
 				asprintf(&s, "%s%s,%s", field, p, ret);
 			else
 				asprintf(&s, "%s,%s%s", ret, field, p);
 			free(ret);
-			ret = SMB_STRDUP(s);
-			free(s);
+			ret = s;
 		}
 	}
 
@@ -116,7 +110,6 @@
 		     const char *ldap_server)
 {
 	ADS_STRUCT *ads;
-	int wrap_flags;
 	
 	ads = SMB_XMALLOC_P(ADS_STRUCT);
 	ZERO_STRUCTP(ads);
@@ -136,13 +129,6 @@
 	/* the caller will own the memory by default */
 	ads->is_mine = 1;
 
-	wrap_flags = lp_client_ldap_sasl_wrapping();
-	if (wrap_flags == -1) {
-		wrap_flags = 0;
-	}
-
-	ads->auth.flags = wrap_flags;
-
 	return ads;
 }
 
@@ -152,11 +138,13 @@
 void ads_destroy(ADS_STRUCT **ads)
 {
 	if (ads && *ads) {
-		bool is_mine;
+		BOOL is_mine;
 
 		is_mine = (*ads)->is_mine;
 #if HAVE_LDAP
-		ads_disconnect(*ads);
+		if ((*ads)->ld) {
+			ldap_unbind((*ads)->ld);
+		}
 #endif
 		SAFE_FREE((*ads)->server.realm);
 		SAFE_FREE((*ads)->server.workgroup);
@@ -172,8 +160,6 @@
 		SAFE_FREE((*ads)->config.ldap_server_name);
 		SAFE_FREE((*ads)->config.server_site_name);
 		SAFE_FREE((*ads)->config.client_site_name);
-		SAFE_FREE((*ads)->config.schema_path);
-		SAFE_FREE((*ads)->config.config_path);
 		
 		ZERO_STRUCTP(*ads);
 

Modified: branches/samba/upstream/source/libads/ads_utils.c
===================================================================
--- branches/samba/upstream/source/libads/ads_utils.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libads/ads_utils.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/source/libads/authdata.c
===================================================================
--- branches/samba/upstream/source/libads/authdata.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libads/authdata.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,563 +1,955 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    kerberos authorization data (PAC) utility library
-   Copyright (C) Jim McDonough <jmcd at us.ibm.com> 2003
+   Copyright (C) Jim McDonough <jmcd at us.ibm.com> 2003   
    Copyright (C) Andrew Bartlett <abartlet at samba.org> 2004-2005
    Copyright (C) Andrew Tridgell 2001
    Copyright (C) Luke Howard 2002-2003
    Copyright (C) Stefan Metzmacher 2004-2005
-   Copyright (C) Guenther Deschner 2005,2007,2008
-
+   Copyright (C) Guenther Deschner 2005
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
 #ifdef HAVE_KRB5
 
-/****************************************************************
-****************************************************************/
-
-static krb5_error_code check_pac_checksum(TALLOC_CTX *mem_ctx,
-					  DATA_BLOB pac_data,
-					  struct PAC_SIGNATURE_DATA *sig,
-					  krb5_context context,
-					  krb5_keyblock *keyblock)
+static BOOL pac_io_logon_name(const char *desc, PAC_LOGON_NAME *logon_name,
+			      prs_struct *ps, int depth)
 {
-	krb5_error_code ret;
-	krb5_checksum cksum;
-	krb5_keyusage usage = 0;
+	if (NULL == logon_name)
+		return False;
 
-	smb_krb5_checksum_from_pac_sig(&cksum, sig);
+	prs_debug(ps, depth, desc, "pac_io_logon_name");
+	depth++;
 
-#ifdef HAVE_KRB5_KU_OTHER_CKSUM /* Heimdal */
-	usage = KRB5_KU_OTHER_CKSUM;
-#elif defined(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM) /* MIT */
-	usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;
-#else
-#error UNKNOWN_KRB5_KEYUSAGE
-#endif
+	if (!smb_io_time("logon_time", &logon_name->logon_time, ps, depth))
+		return False;
 
-	ret = smb_krb5_verify_checksum(context,
-				       keyblock,
-				       usage,
-				       &cksum,
-				       pac_data.data,
-				       pac_data.length);
+	if (!prs_uint16("len", ps, depth, &logon_name->len))
+		return False;
 
-	if (ret) {
-		DEBUG(2,("check_pac_checksum: PAC Verification failed: %s (%d)\n",
-			error_message(ret), ret));
-		return ret;
+	/* The following string is always in little endian 16 bit values,
+	   copy as 8 bits to avoid endian reversal on big-endian machines.
+	   len is the length in bytes. */
+
+	if (UNMARSHALLING(ps) && logon_name->len) {
+		logon_name->username = PRS_ALLOC_MEM(ps, uint8, logon_name->len);
+		if (!logon_name->username) {
+			DEBUG(3, ("No memory available\n"));
+			return False;
+		}
 	}
 
-	return ret;
+	if (!prs_uint8s(True, "name", ps, depth, logon_name->username, logon_name->len))
+		return False;
+
+	return True;
 }
 
-/****************************************************************
-****************************************************************/
+#if 0 /* Unused (handled now in net_io_user_info3()) - Guenther */
+static BOOL pac_io_krb_sids(const char *desc, KRB_SID_AND_ATTRS *sid_and_attr,
+			    prs_struct *ps, int depth)
+{
+	if (NULL == sid_and_attr)
+		return False;
 
- NTSTATUS decode_pac_data(TALLOC_CTX *mem_ctx,
-			 DATA_BLOB *pac_data_blob,
-			 krb5_context context,
-			 krb5_keyblock *service_keyblock,
-			 krb5_const_principal client_principal,
-			 time_t tgs_authtime,
-			 struct PAC_DATA **pac_data_out)
+	prs_debug(ps, depth, desc, "pac_io_krb_sids");
+	depth++;
+
+	if (UNMARSHALLING(ps)) {
+		sid_and_attr->sid = PRS_ALLOC_MEM(ps, DOM_SID2, 1);
+		if (!sid_and_attr->sid) {
+			DEBUG(3, ("No memory available\n"));
+			return False;
+		}
+	}
+
+	if(!smb_io_dom_sid2("sid", sid_and_attr->sid, ps, depth))
+		return False;
+
+	return True;
+}
+
+
+static BOOL pac_io_krb_attrs(const char *desc, KRB_SID_AND_ATTRS *sid_and_attr,
+			     prs_struct *ps, int depth)
 {
-	NTSTATUS status;
-	enum ndr_err_code ndr_err;
-	krb5_error_code ret;
-	DATA_BLOB modified_pac_blob;
+	if (NULL == sid_and_attr)
+		return False;
 
-	NTTIME tgs_authtime_nttime;
-	krb5_principal client_principal_pac = NULL;
+	prs_debug(ps, depth, desc, "pac_io_krb_attrs");
+	depth++;
+
+	if (!prs_uint32("sid_ptr", ps, depth, &sid_and_attr->sid_ptr))
+		return False;
+	if (!prs_uint32("attrs", ps, depth, &sid_and_attr->attrs))
+		return False;
+
+	return True;
+}
+
+static BOOL pac_io_krb_sid_and_attr_array(const char *desc, 
+					  KRB_SID_AND_ATTR_ARRAY *array,
+					  uint32 num,
+					  prs_struct *ps, int depth)
+{
 	int i;
 
-	struct PAC_SIGNATURE_DATA *srv_sig_ptr = NULL;
-	struct PAC_SIGNATURE_DATA *kdc_sig_ptr = NULL;
-	struct PAC_SIGNATURE_DATA *srv_sig_wipe = NULL;
-	struct PAC_SIGNATURE_DATA *kdc_sig_wipe = NULL;
-	struct PAC_LOGON_NAME *logon_name = NULL;
-	struct PAC_LOGON_INFO *logon_info = NULL;
-	struct PAC_DATA *pac_data = NULL;
-	struct PAC_DATA_RAW *pac_data_raw = NULL;
+	if (NULL == array)
+		return False;
 
-	DATA_BLOB *srv_sig_blob = NULL;
-	DATA_BLOB *kdc_sig_blob = NULL;
+	prs_debug(ps, depth, desc, "pac_io_krb_sid_and_attr_array");
+	depth++;
 
-	*pac_data_out = NULL;
 
-	pac_data = TALLOC_ZERO_P(mem_ctx, struct PAC_DATA);
-	pac_data_raw = TALLOC_ZERO_P(mem_ctx, struct PAC_DATA_RAW);
-	kdc_sig_wipe = TALLOC_ZERO_P(mem_ctx, struct PAC_SIGNATURE_DATA);
-	srv_sig_wipe = TALLOC_ZERO_P(mem_ctx, struct PAC_SIGNATURE_DATA);
-	if (!pac_data_raw || !pac_data || !kdc_sig_wipe || !srv_sig_wipe) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	if (!prs_uint32("count", ps, depth, &array->count))
+		return False;
 
-	ndr_err = ndr_pull_struct_blob(pac_data_blob, pac_data,
-			pac_data,
-		       (ndr_pull_flags_fn_t)ndr_pull_PAC_DATA);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		status = ndr_map_error2ntstatus(ndr_err);
-		DEBUG(0,("can't parse the PAC: %s\n",
-			nt_errstr(status)));
-		return status;
+	if (UNMARSHALLING(ps)) {
+		if (num) {
+			array->krb_sid_and_attrs = PRS_ALLOC_MEM(ps, KRB_SID_AND_ATTRS, num);
+			if (!array->krb_sid_and_attrs) {
+				DEBUG(3, ("No memory available\n"));
+				return False;
+			}
+		} else {
+			array->krb_sid_and_attrs = NULL;
+		}
 	}
 
-	if (pac_data->num_buffers < 4) {
-		/* we need logon_ingo, service_key and kdc_key */
-		DEBUG(0,("less than 4 PAC buffers\n"));
-		return NT_STATUS_INVALID_PARAMETER;
-	}
+	for (i=0; i<num; i++) {
+		if (!pac_io_krb_attrs(desc, 
+				      &array->krb_sid_and_attrs[i],
+				      ps, depth))
+			return False;
 
-	ndr_err = ndr_pull_struct_blob(pac_data_blob, pac_data_raw,
-				       pac_data_raw,
-				       (ndr_pull_flags_fn_t)ndr_pull_PAC_DATA_RAW);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		status = ndr_map_error2ntstatus(ndr_err);
-		DEBUG(0,("can't parse the PAC: %s\n",
-			nt_errstr(status)));
-		return status;
 	}
+	for (i=0; i<num; i++) {
+		if (!pac_io_krb_sids(desc, 
+				     &array->krb_sid_and_attrs[i],
+				     ps, depth))
+			return False;
 
-	if (pac_data_raw->num_buffers < 4) {
-		/* we need logon_ingo, service_key and kdc_key */
-		DEBUG(0,("less than 4 PAC buffers\n"));
-		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-	if (pac_data->num_buffers != pac_data_raw->num_buffers) {
-		/* we need logon_ingo, service_key and kdc_key */
-		DEBUG(0,("misparse!  PAC_DATA has %d buffers while PAC_DATA_RAW has %d\n",
-			 pac_data->num_buffers, pac_data_raw->num_buffers));
-		return NT_STATUS_INVALID_PARAMETER;
-	}
+	return True;
 
-	for (i=0; i < pac_data->num_buffers; i++) {
-		if (pac_data->buffers[i].type != pac_data_raw->buffers[i].type) {
-			DEBUG(0,("misparse!  PAC_DATA buffer %d has type %d while PAC_DATA_RAW has %d\n",
-				 i, pac_data->buffers[i].type, pac_data->buffers[i].type));
-			return NT_STATUS_INVALID_PARAMETER;
+}
+#endif
+
+static BOOL pac_io_group_membership(const char *desc, 
+				    GROUP_MEMBERSHIP *membership,
+				    prs_struct *ps, int depth)
+{
+	if (NULL == membership)
+		return False;
+
+	prs_debug(ps, depth, desc, "pac_io_group_membership");
+	depth++;
+
+	if (!prs_uint32("rid", ps, depth, &membership->rid))
+		return False;
+	if (!prs_uint32("attrs", ps, depth, &membership->attrs))
+		return False;
+
+	return True;
+}
+
+
+static BOOL pac_io_group_membership_array(const char *desc, 
+					  GROUP_MEMBERSHIP_ARRAY *array,
+					  uint32 num,
+					  prs_struct *ps, int depth)
+{
+	int i;
+
+	if (NULL == array)
+		return False;
+
+	prs_debug(ps, depth, desc, "pac_io_group_membership_array");
+	depth++;
+
+
+	if (!prs_uint32("count", ps, depth, &array->count))
+		return False;
+
+	if (UNMARSHALLING(ps)) {
+		if (num) {
+			array->group_membership = PRS_ALLOC_MEM(ps, GROUP_MEMBERSHIP, num);
+			if (!array->group_membership) {
+				DEBUG(3, ("No memory available\n"));
+				return False;
+			}
+		} else {
+			array->group_membership = NULL;
 		}
-		switch (pac_data->buffers[i].type) {
-			case PAC_TYPE_LOGON_INFO:
-				if (!pac_data->buffers[i].info) {
-					break;
-				}
-				logon_info = pac_data->buffers[i].info->logon_info.info;
-				break;
-			case PAC_TYPE_SRV_CHECKSUM:
-				if (!pac_data->buffers[i].info) {
-					break;
-				}
-				srv_sig_ptr = &pac_data->buffers[i].info->srv_cksum;
-				srv_sig_blob = &pac_data_raw->buffers[i].info->remaining;
-				break;
-			case PAC_TYPE_KDC_CHECKSUM:
-				if (!pac_data->buffers[i].info) {
-					break;
-				}
-				kdc_sig_ptr = &pac_data->buffers[i].info->kdc_cksum;
-				kdc_sig_blob = &pac_data_raw->buffers[i].info->remaining;
-				break;
-			case PAC_TYPE_LOGON_NAME:
-				logon_name = &pac_data->buffers[i].info->logon_name;
-				break;
-			default:
-				break;
-		}
 	}
 
-	if (!logon_info) {
-		DEBUG(0,("PAC no logon_info\n"));
-		return NT_STATUS_INVALID_PARAMETER;
-	}
+	for (i=0; i<num; i++) {
+		if (!pac_io_group_membership(desc, 
+					     &array->group_membership[i],
+					     ps, depth))
+			return False;
 
-	if (!logon_name) {
-		DEBUG(0,("PAC no logon_name\n"));
-		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-	if (!srv_sig_ptr || !srv_sig_blob) {
-		DEBUG(0,("PAC no srv_key\n"));
-		return NT_STATUS_INVALID_PARAMETER;
-	}
+	return True;
 
-	if (!kdc_sig_ptr || !kdc_sig_blob) {
-		DEBUG(0,("PAC no kdc_key\n"));
-		return NT_STATUS_INVALID_PARAMETER;
-	}
+}
 
-	/* Find and zero out the signatures, as required by the signing algorithm */
+#if 0 /* Unused, replaced using an expanded net_io_user_info3() now - Guenther */
+static BOOL pac_io_pac_logon_info(const char *desc, PAC_LOGON_INFO *info, 
+				  prs_struct *ps, int depth)
+{
+	uint32 garbage, i;
 
-	/* We find the data blobs above, now we parse them to get at the exact portion we should zero */
-	ndr_err = ndr_pull_struct_blob(kdc_sig_blob, kdc_sig_wipe,
-				       kdc_sig_wipe,
-				       (ndr_pull_flags_fn_t)ndr_pull_PAC_SIGNATURE_DATA);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		status = ndr_map_error2ntstatus(ndr_err);
-		DEBUG(0,("can't parse the KDC signature: %s\n",
-			nt_errstr(status)));
-		return status;
+	if (NULL == info)
+		return False;
+
+	prs_debug(ps, depth, desc, "pac_io_pac_logon_info");
+	depth++;
+
+	if (!prs_align(ps))
+		return False;
+	if (!prs_uint32("unknown", ps, depth, &garbage)) /* 00081001 */
+		return False;
+	if (!prs_uint32("unknown", ps, depth, &garbage)) /* cccccccc */
+		return False;
+	if (!prs_uint32("bufferlen", ps, depth, &garbage))
+		return False;
+	if (!prs_uint32("bufferlenhi", ps, depth, &garbage)) /* 00000000 */
+		return False;
+
+	if (!prs_uint32("pointer", ps, depth, &garbage))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+	if (!smb_io_time("logon_time", &info->logon_time, ps, depth))
+		return False;
+	if (!smb_io_time("logoff_time", &info->logoff_time, ps, depth))
+		return False;
+	if (!smb_io_time("kickoff_time", &info->kickoff_time, ps, depth))
+		return False;
+	if (!smb_io_time("pass_last_set_time", &info->pass_last_set_time, 
+			 ps, depth))
+		return False;
+	if (!smb_io_time("pass_can_change_time", &info->pass_can_change_time, 
+			 ps, depth))
+		return False;
+	if (!smb_io_time("pass_must_change_time", &info->pass_must_change_time,
+			 ps, depth))
+		return False;
+
+	if (!smb_io_unihdr("hdr_user_name", &info->hdr_user_name, ps, depth))
+		return False;
+	if (!smb_io_unihdr("hdr_full_name", &info->hdr_full_name, ps, depth))
+		return False;
+	if (!smb_io_unihdr("hdr_logon_script", &info->hdr_logon_script, 
+			   ps, depth))
+		return False;
+	if (!smb_io_unihdr("hdr_profile_path", &info->hdr_profile_path, 
+			   ps, depth))
+		return False;
+	if (!smb_io_unihdr("hdr_home_dir", &info->hdr_home_dir, ps, depth))
+		return False;
+	if (!smb_io_unihdr("hdr_dir_drive", &info->hdr_dir_drive, ps, depth))
+		return False;
+
+	if (!prs_uint16("logon_count", ps, depth, &info->logon_count))
+		return False;
+	if (!prs_uint16("bad_password_count", ps, depth, &info->bad_password_count))
+		return False;
+	if (!prs_uint32("user_rid", ps, depth, &info->user_rid))
+		return False;
+	if (!prs_uint32("group_rid", ps, depth, &info->group_rid))
+		return False;
+	if (!prs_uint32("group_count", ps, depth, &info->group_count))
+		return False;
+	/* I haven't seen this contain anything yet, but when it does
+	   we will have to make sure we decode the contents in the middle
+	   all the unistr2s ... */
+	if (!prs_uint32("group_mem_ptr", ps, depth, 
+			&info->group_membership_ptr))
+		return False;
+	if (!prs_uint32("user_flags", ps, depth, &info->user_flags))
+		return False;
+
+	if (!prs_uint8s(False, "session_key", ps, depth, info->session_key, 16)) 
+		return False;
+	
+	if (!smb_io_unihdr("hdr_dom_controller", 
+			   &info->hdr_dom_controller, ps, depth))
+		return False;
+	if (!smb_io_unihdr("hdr_dom_name", &info->hdr_dom_name, ps, depth))
+		return False;
+
+	/* this should be followed, but just get ptr for now */
+	if (!prs_uint32("ptr_dom_sid", ps, depth, &info->ptr_dom_sid))
+		return False;
+
+	if (!prs_uint8s(False, "lm_session_key", ps, depth, info->lm_session_key, 8)) 
+		return False;
+
+	if (!prs_uint32("acct_flags", ps, depth, &info->acct_flags))
+		return False;
+
+	for (i = 0; i < 7; i++)
+	{
+		if (!prs_uint32("unkown", ps, depth, &info->unknown[i])) /* unknown */
+                        return False;
 	}
 
-	ndr_err = ndr_pull_struct_blob(srv_sig_blob, srv_sig_wipe,
-				       srv_sig_wipe,
-				       (ndr_pull_flags_fn_t)ndr_pull_PAC_SIGNATURE_DATA);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		status = ndr_map_error2ntstatus(ndr_err);
-		DEBUG(0,("can't parse the SRV signature: %s\n",
-			nt_errstr(status)));
-		return status;
+	if (!prs_uint32("sid_count", ps, depth, &info->sid_count))
+		return False;
+	if (!prs_uint32("ptr_extra_sids", ps, depth, &info->ptr_extra_sids))
+		return False;
+	if (!prs_uint32("ptr_res_group_dom_sid", ps, depth, 
+			&info->ptr_res_group_dom_sid))
+		return False;
+	if (!prs_uint32("res_group_count", ps, depth, &info->res_group_count))
+		return False;
+	if (!prs_uint32("ptr_res_groups", ps, depth, &info->ptr_res_groups))
+		return False;
+
+	if(!smb_io_unistr2("uni_user_name", &info->uni_user_name, 
+			   info->hdr_user_name.buffer, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni_full_name", &info->uni_full_name, 
+			   info->hdr_full_name.buffer, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni_logon_script", &info->uni_logon_script, 
+			   info->hdr_logon_script.buffer, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni_profile_path", &info->uni_profile_path,
+			   info->hdr_profile_path.buffer, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni_home_dir", &info->uni_home_dir,
+			   info->hdr_home_dir.buffer, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni_dir_drive", &info->uni_dir_drive,
+			   info->hdr_dir_drive.buffer, ps, depth))
+		return False;
+
+	if (info->group_membership_ptr) {
+		if (!pac_io_group_membership_array("group membership",
+						   &info->groups,
+						   info->group_count,
+						   ps, depth))
+			return False;
 	}
 
-	/* Now zero the decoded structure */
-	memset(kdc_sig_wipe->signature.data, '\0', kdc_sig_wipe->signature.length);
-	memset(srv_sig_wipe->signature.data, '\0', srv_sig_wipe->signature.length);
 
-	/* and reencode, back into the same place it came from */
-	ndr_err = ndr_push_struct_blob(kdc_sig_blob, pac_data_raw,
-				       kdc_sig_wipe,
-				       (ndr_push_flags_fn_t)ndr_push_PAC_SIGNATURE_DATA);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		status = ndr_map_error2ntstatus(ndr_err);
-		DEBUG(0,("can't repack the KDC signature: %s\n",
-			nt_errstr(status)));
-		return status;
+	if(!smb_io_unistr2("uni_dom_controller", &info->uni_dom_controller,
+			   info->hdr_dom_controller.buffer, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni_dom_name", &info->uni_dom_name, 
+			   info->hdr_dom_name.buffer, ps, depth))
+		return False;
+
+	if(info->ptr_dom_sid)
+		if(!smb_io_dom_sid2("dom_sid", &info->dom_sid, ps, depth))
+			return False;
+
+	
+	if (info->sid_count && info->ptr_extra_sids)
+		if (!pac_io_krb_sid_and_attr_array("extra_sids", 
+						   &info->extra_sids,
+						   info->sid_count,
+						   ps, depth))
+			return False;
+
+	if (info->ptr_res_group_dom_sid)
+		if (!smb_io_dom_sid2("res_group_dom_sid", 
+				     &info->res_group_dom_sid, ps, depth))
+			return False;
+
+	if (info->ptr_res_groups) {
+
+		if (!(info->user_flgs & LOGON_RESOURCE_GROUPS)) {
+			DEBUG(0,("user_flgs attribute does not have LOGON_RESOURCE_GROUPS\n"));
+			/* return False; */
+		}
+
+		if (!pac_io_group_membership_array("res group membership",
+						   &info->res_groups,
+						   info->res_group_count,
+						   ps, depth))
+			return False;
 	}
-	ndr_err = ndr_push_struct_blob(srv_sig_blob, pac_data_raw,
-				       srv_sig_wipe,
-				       (ndr_push_flags_fn_t)ndr_push_PAC_SIGNATURE_DATA);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		status = ndr_map_error2ntstatus(ndr_err);
-		DEBUG(0,("can't repack the SRV signature: %s\n",
-			nt_errstr(status)));
-		return status;
-	}
 
-	/* push out the whole structure, but now with zero'ed signatures */
-	ndr_err = ndr_push_struct_blob(&modified_pac_blob, pac_data_raw,
-				       pac_data_raw,
-				       (ndr_push_flags_fn_t)ndr_push_PAC_DATA_RAW);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		status = ndr_map_error2ntstatus(ndr_err);
-		DEBUG(0,("can't repack the RAW PAC: %s\n",
-			nt_errstr(status)));
-		return status;
+	return True;
+}
+#endif
+
+static BOOL pac_io_pac_logon_info(const char *desc, PAC_LOGON_INFO *info, 
+				  prs_struct *ps, int depth)
+{
+	uint32 garbage;
+	BOOL kerb_validation_info = True;
+
+	if (NULL == info)
+		return False;
+
+	prs_debug(ps, depth, desc, "pac_io_pac_logon_info");
+	depth++;
+
+	if (!prs_align(ps))
+		return False;
+	if (!prs_uint32("unknown", ps, depth, &garbage)) /* 00081001 */
+		return False;
+	if (!prs_uint32("unknown", ps, depth, &garbage)) /* cccccccc */
+		return False;
+	if (!prs_uint32("bufferlen", ps, depth, &garbage))
+		return False;
+	if (!prs_uint32("bufferlenhi", ps, depth, &garbage)) /* 00000000 */
+		return False;
+
+	if(!net_io_user_info3("", &info->info3, ps, depth, 3, kerb_validation_info))
+		return False;
+
+	if (info->info3.ptr_res_group_dom_sid) {
+		if (!smb_io_dom_sid2("res_group_dom_sid", 
+				     &info->res_group_dom_sid, ps, depth))
+			return False;
 	}
 
-	/* verify by service_key */
-	ret = check_pac_checksum(mem_ctx,
-				 modified_pac_blob, srv_sig_ptr,
-				 context,
-				 service_keyblock);
-	if (ret) {
-		DEBUG(1, ("PAC Decode: Failed to verify the service signature: %s\n",
-			  error_message(ret)));
-		return NT_STATUS_ACCESS_DENIED;
+	if (info->info3.ptr_res_groups) {
+
+		if (!(info->info3.user_flgs & LOGON_RESOURCE_GROUPS)) {
+			DEBUG(0,("user_flgs attribute does not have LOGON_RESOURCE_GROUPS\n"));
+			/* return False; */
+		}
+
+		if (!pac_io_group_membership_array("res group membership",
+						   &info->res_groups,
+						   info->info3.res_group_count,
+						   ps, depth))
+			return False;
 	}
 
-	/* Convert to NT time, so as not to loose accuracy in comparison */
-	unix_to_nt_time(&tgs_authtime_nttime, tgs_authtime);
+	return True;
+}
 
-	if (tgs_authtime_nttime != logon_name->logon_time) {
-		DEBUG(2, ("PAC Decode: Logon time mismatch between ticket and PAC!\n"));
-		DEBUG(2, ("PAC Decode: PAC: %s\n", nt_time_string(mem_ctx, logon_name->logon_time)));
-		DEBUG(2, ("PAC Decode: Ticket: %s\n", nt_time_string(mem_ctx, tgs_authtime_nttime)));
-		return NT_STATUS_ACCESS_DENIED;
+
+
+static BOOL pac_io_pac_signature_data(const char *desc, 
+				      PAC_SIGNATURE_DATA *data, uint32 length,
+				      prs_struct *ps, int depth)
+{
+	uint32 siglen = length - sizeof(uint32);
+	prs_debug(ps, depth, desc, "pac_io_pac_signature_data");
+	depth++;
+	
+	if (data == NULL)
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+	if (!prs_uint32("type", ps, depth, &data->type))
+		return False;
+
+	if (UNMARSHALLING(ps) && length) {
+		if (siglen) {
+			data->signature.buffer = PRS_ALLOC_MEM(ps, uint8, siglen);
+			if (!data->signature.buffer) {
+				DEBUG(3, ("No memory available\n"));
+				return False;
+			}
+		} else {
+			data->signature.buffer = NULL;
+		}
 	}
 
-	ret = smb_krb5_parse_name_norealm(context, logon_name->account_name,
-				    &client_principal_pac);
-	if (ret) {
-		DEBUG(2, ("Could not parse name from incoming PAC: [%s]: %s\n",
-			  logon_name->account_name,
-			  error_message(ret)));
-		return NT_STATUS_INVALID_PARAMETER;
+	data->signature.buf_len = siglen;
+
+	if (!prs_uint8s(False, "signature", ps, depth, data->signature.buffer, data->signature.buf_len))
+		return False;
+
+
+	return True;
+}
+
+static BOOL pac_io_pac_info_hdr_ctr(const char *desc, PAC_BUFFER *hdr,
+				    prs_struct *ps, int depth)
+{
+	if (NULL == hdr)
+		return False;
+
+	prs_debug(ps, depth, desc, "pac_io_pac_info_hdr_ctr");
+	depth++;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (hdr->offset != prs_offset(ps)) {
+		DEBUG(5,("offset in header(x%x) and data(x%x) do not match, correcting\n",
+			 hdr->offset, prs_offset(ps)));
+		prs_set_offset(ps, hdr->offset);
 	}
 
-	if (!smb_krb5_principal_compare_any_realm(context, client_principal, client_principal_pac)) {
-		DEBUG(2, ("Name in PAC [%s] does not match principal name in ticket\n",
-			  logon_name->account_name));
-		krb5_free_principal(context, client_principal_pac);
-		return NT_STATUS_ACCESS_DENIED;
+	if (UNMARSHALLING(ps) && hdr->size > 0) {
+		hdr->ctr = PRS_ALLOC_MEM(ps, PAC_INFO_CTR, 1);
+		if (!hdr->ctr) {
+			DEBUG(3, ("No memory available\n"));
+			return False;
+		}
 	}
 
-	DEBUG(3,("Found account name from PAC: %s [%s]\n",
-		 logon_info->info3.base.account_name.string,
-		 logon_info->info3.base.full_name.string));
+	switch(hdr->type) {
+	case PAC_TYPE_LOGON_INFO:
+		DEBUG(5, ("PAC_TYPE_LOGON_INFO\n"));
+		if (UNMARSHALLING(ps))
+			hdr->ctr->pac.logon_info = PRS_ALLOC_MEM(ps, PAC_LOGON_INFO, 1);
+		if (!hdr->ctr->pac.logon_info) {
+			DEBUG(3, ("No memory available\n"));
+			return False;
+		}
+		if (!pac_io_pac_logon_info(desc, hdr->ctr->pac.logon_info,
+					   ps, depth))
+			return False;
+		break;
 
-	DEBUG(10,("Successfully validated Kerberos PAC\n"));
+	case PAC_TYPE_SERVER_CHECKSUM:
+		DEBUG(5, ("PAC_TYPE_SERVER_CHECKSUM\n"));
+		if (UNMARSHALLING(ps))
+			hdr->ctr->pac.srv_cksum = PRS_ALLOC_MEM(ps, PAC_SIGNATURE_DATA, 1);
+		if (!hdr->ctr->pac.srv_cksum) {
+			DEBUG(3, ("No memory available\n"));
+			return False;
+		}
+		if (!pac_io_pac_signature_data(desc, hdr->ctr->pac.srv_cksum,
+					       hdr->size, ps, depth))
+			return False;
+		break;
 
-	if (DEBUGLEVEL >= 10) {
-		const char *s;
-		s = NDR_PRINT_STRUCT_STRING(mem_ctx, PAC_DATA, pac_data);
-		if (s) {
-			DEBUGADD(10,("%s\n", s));
+	case PAC_TYPE_PRIVSVR_CHECKSUM:
+		DEBUG(5, ("PAC_TYPE_PRIVSVR_CHECKSUM\n"));
+		if (UNMARSHALLING(ps))
+			hdr->ctr->pac.privsrv_cksum = PRS_ALLOC_MEM(ps, PAC_SIGNATURE_DATA, 1);
+		if (!hdr->ctr->pac.privsrv_cksum) {
+			DEBUG(3, ("No memory available\n"));
+			return False;
 		}
+		if (!pac_io_pac_signature_data(desc, 
+					       hdr->ctr->pac.privsrv_cksum,
+					       hdr->size, ps, depth))
+			return False;
+		break;
+
+	case PAC_TYPE_LOGON_NAME:
+		DEBUG(5, ("PAC_TYPE_LOGON_NAME\n"));
+		if (UNMARSHALLING(ps))
+			hdr->ctr->pac.logon_name = PRS_ALLOC_MEM(ps, PAC_LOGON_NAME, 1);
+		if (!hdr->ctr->pac.logon_name) {
+			DEBUG(3, ("No memory available\n"));
+			return False;
+		}
+		if (!pac_io_logon_name(desc, hdr->ctr->pac.logon_name,
+					    ps, depth))
+			return False;
+		break;
+
+	default:
+		/* dont' know, so we need to skip it */
+		DEBUG(3, ("unknown PAC type %d\n", hdr->type));
+		prs_set_offset(ps, prs_offset(ps) + hdr->size);
 	}
 
-	*pac_data_out = pac_data;
+#if 0
+	/* obscure pad */
+	if (!prs_uint32("pad", ps, depth, &hdr->pad))
+		return False;
+#endif
+	return True;
+}
 
-	return NT_STATUS_OK;
+static BOOL pac_io_pac_info_hdr(const char *desc, PAC_BUFFER *hdr, 
+				prs_struct *ps, int depth)
+{
+	if (NULL == hdr)
+		return False;
+
+	prs_debug(ps, depth, desc, "pac_io_pac_info_hdr");
+	depth++;
+
+	if (!prs_align(ps))
+		return False;
+	if (!prs_uint32("type", ps, depth, &hdr->type))
+		return False;
+	if (!prs_uint32("size", ps, depth, &hdr->size))
+		return False;
+	if (!prs_uint32("offset", ps, depth, &hdr->offset))
+		return False;
+	if (!prs_uint32("offsethi", ps, depth, &hdr->offsethi))
+		return False;
+
+	return True;
 }
 
-/****************************************************************
-****************************************************************/
-
-struct PAC_LOGON_INFO *get_logon_info_from_pac(struct PAC_DATA *pac_data)
+static BOOL pac_io_pac_data(const char *desc, PAC_DATA *data, 
+			    prs_struct *ps, int depth)
 {
 	int i;
 
-	for (i=0; i < pac_data->num_buffers; i++) {
+	if (NULL == data)
+		return False;
 
-		if (pac_data->buffers[i].type != PAC_TYPE_LOGON_INFO) {
-			continue;
+	prs_debug(ps, depth, desc, "pac_io_pac_data");
+	depth++;
+
+	if (!prs_align(ps))
+		return False;
+	if (!prs_uint32("num_buffers", ps, depth, &data->num_buffers))
+		return False;
+	if (!prs_uint32("version", ps, depth, &data->version))
+		return False;
+
+	if (UNMARSHALLING(ps) && data->num_buffers > 0) {
+		if ((data->pac_buffer = PRS_ALLOC_MEM(ps, PAC_BUFFER, data->num_buffers)) == NULL) {
+			return False;
 		}
+	}
 
-		return pac_data->buffers[i].info->logon_info.info;
+	for (i=0; i<data->num_buffers; i++) {
+		if (!pac_io_pac_info_hdr(desc, &data->pac_buffer[i], ps, 
+					 depth))
+			return False;
 	}
 
-	return NULL;
+	for (i=0; i<data->num_buffers; i++) {
+		if (!pac_io_pac_info_hdr_ctr(desc, &data->pac_buffer[i],
+					     ps, depth))
+			return False;
+	}
+
+	return True;
 }
 
-/****************************************************************
-****************************************************************/
-
-NTSTATUS kerberos_return_pac(TALLOC_CTX *mem_ctx,
-			     const char *name,
-			     const char *pass,
-			     time_t time_offset,
-			     time_t *expire_time,
-			     time_t *renew_till_time,
-			     const char *cache_name,
-			     bool request_pac,
-			     bool add_netbios_addr,
-			     time_t renewable_time,
-			     struct PAC_DATA **pac_ret)
+static NTSTATUS check_pac_checksum(TALLOC_CTX *mem_ctx, 
+				   DATA_BLOB pac_data,
+				   PAC_SIGNATURE_DATA *sig,
+				   krb5_context context,
+				   krb5_keyblock *keyblock)
 {
 	krb5_error_code ret;
-	NTSTATUS status = NT_STATUS_INVALID_PARAMETER;
-	DATA_BLOB tkt, ap_rep, sesskey1, sesskey2;
-	struct PAC_DATA *pac_data = NULL;
-	char *client_princ_out = NULL;
-	const char *auth_princ = NULL;
-	const char *local_service = NULL;
-	const char *cc = "MEMORY:kerberos_return_pac";
+	krb5_checksum cksum;
+	krb5_keyusage usage = 0;
 
-	ZERO_STRUCT(tkt);
-	ZERO_STRUCT(ap_rep);
-	ZERO_STRUCT(sesskey1);
-	ZERO_STRUCT(sesskey2);
+	smb_krb5_checksum_from_pac_sig(&cksum, sig);
 
-	if (!name || !pass) {
+#ifdef HAVE_KRB5_KU_OTHER_CKSUM /* Heimdal */
+	usage = KRB5_KU_OTHER_CKSUM;
+#elif defined(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM) /* MIT */
+	usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;
+#else
+#error UNKNOWN_KRB5_KEYUSAGE
+#endif
+
+	ret = smb_krb5_verify_checksum(context, 
+				       keyblock, 
+				       usage, 
+				       &cksum,
+				       pac_data.data, 
+				       pac_data.length);
+
+	if (ret) {
+		DEBUG(2,("check_pac_checksum: PAC Verification failed: %s (%d)\n", 
+			error_message(ret), ret));
+		return NT_STATUS_ACCESS_DENIED;
+	}
+
+	return NT_STATUS_OK;
+}
+
+static NTSTATUS parse_pac_data(TALLOC_CTX *mem_ctx, DATA_BLOB *pac_data_blob, PAC_DATA *pac_data)
+{
+	prs_struct ps;
+	PAC_DATA *my_pac;
+
+	if (!prs_init(&ps, pac_data_blob->length, mem_ctx, UNMARSHALL))
+		return NT_STATUS_NO_MEMORY;
+
+	if (!prs_copy_data_in(&ps, (char *)pac_data_blob->data, pac_data_blob->length))
 		return NT_STATUS_INVALID_PARAMETER;
+
+	prs_set_offset(&ps, 0);
+
+	my_pac = TALLOC_ZERO_P(mem_ctx, PAC_DATA);
+	if (!pac_io_pac_data("pac data", my_pac, &ps, 0))
+		return NT_STATUS_INVALID_PARAMETER;
+
+	prs_mem_free(&ps);
+
+	*pac_data = *my_pac;
+
+	return NT_STATUS_OK;
+}
+
+/* just for debugging, will be removed later - Guenther */
+char *pac_group_attr_string(uint32 attr)
+{
+	fstring name = "";
+
+	if (!attr)
+		return NULL;
+
+	if (attr & SE_GROUP_MANDATORY)			fstrcat(name, "SE_GROUP_MANDATORY ");
+	if (attr & SE_GROUP_ENABLED_BY_DEFAULT)		fstrcat(name, "SE_GROUP_ENABLED_BY_DEFAULT ");
+	if (attr & SE_GROUP_ENABLED)			fstrcat(name, "SE_GROUP_ENABLED ");
+	if (attr & SE_GROUP_OWNER)			fstrcat(name, "SE_GROUP_OWNER ");
+	if (attr & SE_GROUP_USE_FOR_DENY_ONLY)		fstrcat(name, "SE_GROUP_USE_FOR_DENY_ONLY ");
+	if (attr & SE_GROUP_LOGON_ID)			fstrcat(name, "SE_GROUP_LOGON_ID ");
+	if (attr & SE_GROUP_RESOURCE)			fstrcat(name, "SE_GROUP_RESOURCE ");
+
+	return SMB_STRDUP(name);
+}
+
+/* just for debugging, will be removed later - Guenther */
+static void dump_pac_logon_info(PAC_LOGON_INFO *logon_info) {
+
+	DOM_SID dom_sid, res_group_dom_sid;
+	int i;
+	char *attr_string;
+	uint32 user_flgs = logon_info->info3.user_flgs;
+
+	if (logon_info->info3.ptr_res_group_dom_sid) {
+		sid_copy(&res_group_dom_sid, &logon_info->res_group_dom_sid.sid);
 	}
+	sid_copy(&dom_sid, &logon_info->info3.dom_sid.sid);
+	
+	DEBUG(10,("The PAC:\n"));
+	
+	DEBUGADD(10,("\tUser Flags: 0x%x (%d)\n", user_flgs, user_flgs));
+	if (user_flgs & LOGON_EXTRA_SIDS)
+		DEBUGADD(10,("\tUser Flags: LOGON_EXTRA_SIDS 0x%x (%d)\n", LOGON_EXTRA_SIDS, LOGON_EXTRA_SIDS));
+	if (user_flgs & LOGON_RESOURCE_GROUPS)
+		DEBUGADD(10,("\tUser Flags: LOGON_RESOURCE_GROUPS 0x%x (%d)\n", LOGON_RESOURCE_GROUPS, LOGON_RESOURCE_GROUPS));
+	DEBUGADD(10,("\tUser SID: %s-%d\n", sid_string_static(&dom_sid), logon_info->info3.user_rid));
+	DEBUGADD(10,("\tGroup SID: %s-%d\n", sid_string_static(&dom_sid), logon_info->info3.group_rid));
 
-	if (cache_name) {
-		cc = cache_name;
+	DEBUGADD(10,("\tGroup Membership (Global and Universal Groups of own domain):\n"));
+	for (i = 0; i < logon_info->info3.num_groups; i++) {
+		attr_string = pac_group_attr_string(logon_info->info3.gids[i].attr);
+		DEBUGADD(10,("\t\t%d: sid: %s-%d\n\t\t   attr: 0x%x == %s\n", 
+			i, sid_string_static(&dom_sid), 
+			logon_info->info3.gids[i].g_rid,
+			logon_info->info3.gids[i].attr,
+			attr_string));
+		SAFE_FREE(attr_string);
 	}
 
-	if (!strchr_m(name, '@')) {
-		auth_princ = talloc_asprintf(mem_ctx, "%s@%s", name,
-			lp_realm());
-	} else {
-		auth_princ = name;
+	DEBUGADD(10,("\tGroup Membership (Domain Local Groups and Groups from Trusted Domains):\n"));
+	for (i = 0; i < logon_info->info3.num_other_sids; i++) {
+		attr_string = pac_group_attr_string(logon_info->info3.other_sids_attrib[i]);
+		DEBUGADD(10,("\t\t%d: sid: %s\n\t\t   attr: 0x%x == %s\n", 
+			i, sid_string_static(&logon_info->info3.other_sids[i].sid), 
+			logon_info->info3.other_sids_attrib[i],
+			attr_string));
+		SAFE_FREE(attr_string);
 	}
-	NT_STATUS_HAVE_NO_MEMORY(auth_princ);
 
-	local_service = talloc_asprintf(mem_ctx, "%s$@%s",
-					global_myname(), lp_realm());
-	NT_STATUS_HAVE_NO_MEMORY(local_service);
+	DEBUGADD(10,("\tGroup Membership (Ressource Groups (SID History ?)):\n"));
+	for (i = 0; i < logon_info->info3.res_group_count; i++) {
+		attr_string = pac_group_attr_string(logon_info->res_groups.group_membership[i].attrs);
+		DEBUGADD(10,("\t\t%d: sid: %s-%d\n\t\t   attr: 0x%x == %s\n", 
+			i, sid_string_static(&res_group_dom_sid),
+			logon_info->res_groups.group_membership[i].rid,
+			logon_info->res_groups.group_membership[i].attrs,
+			attr_string));
+		SAFE_FREE(attr_string);
+	}
+}
 
-	ret = kerberos_kinit_password_ext(auth_princ,
-					  pass,
-					  time_offset,
-					  expire_time,
-					  renew_till_time,
-					  cc,
-					  request_pac,
-					  add_netbios_addr,
-					  renewable_time,
-					  &status);
-	if (ret) {
-		DEBUG(1,("kinit failed for '%s' with: %s (%d)\n",
-			auth_princ, error_message(ret), ret));
-		/* status already set */
-		goto out;
+ NTSTATUS decode_pac_data(TALLOC_CTX *mem_ctx,
+			 DATA_BLOB *pac_data_blob,
+			 krb5_context context, 
+			 krb5_keyblock *service_keyblock,
+			 krb5_const_principal client_principal,
+			 time_t tgs_authtime,
+			 PAC_DATA **pac_data)
+			 
+{
+	DATA_BLOB modified_pac_blob;
+	PAC_DATA *my_pac;
+	NTSTATUS nt_status;
+	krb5_error_code ret;
+	PAC_SIGNATURE_DATA *srv_sig = NULL;
+	PAC_SIGNATURE_DATA *kdc_sig = NULL;
+	PAC_LOGON_NAME *logon_name = NULL;
+	PAC_LOGON_INFO *logon_info = NULL;
+	krb5_principal client_principal_pac = NULL;
+	NTTIME tgs_authtime_nttime;
+	int i, srv_sig_pos = 0, kdc_sig_pos = 0;
+	fstring username;
+
+	*pac_data = NULL;
+
+	my_pac = talloc(mem_ctx, PAC_DATA);
+	if (!my_pac) {
+		return NT_STATUS_NO_MEMORY;
 	}
 
-	DEBUG(10,("got TGT for %s in %s\n", auth_princ, cc));
-	if (expire_time) {
-		DEBUGADD(10,("\tvalid until: %s (%d)\n",
-			http_timestring(*expire_time),
-			(int)*expire_time));
+	nt_status = parse_pac_data(mem_ctx, pac_data_blob, my_pac);
+	if (!NT_STATUS_IS_OK(nt_status)) {
+		DEBUG(0,("decode_pac_data: failed to parse PAC\n"));
+		return nt_status;
 	}
-	if (renew_till_time) {
-		DEBUGADD(10,("\trenewable till: %s (%d)\n",
-			http_timestring(*renew_till_time),
-			(int)*renew_till_time));
-	}
 
-	/* we cannot continue with krb5 when UF_DONT_REQUIRE_PREAUTH is set,
-	 * in that case fallback to NTLM - gd */
+	modified_pac_blob = data_blob_talloc(mem_ctx, pac_data_blob->data, pac_data_blob->length);
 
-	if (expire_time && renew_till_time &&
-	    (*expire_time == 0) && (*renew_till_time == 0)) {
-		return NT_STATUS_INVALID_LOGON_TYPE;
+	if (my_pac->num_buffers < 4) {
+		nt_status = NT_STATUS_INVALID_PARAMETER;
+		goto out;
 	}
 
+	/* store signatures */
+	for (i=0; i < my_pac->num_buffers; i++) {
+	
+		switch (my_pac->pac_buffer[i].type) {
+		
+			case PAC_TYPE_SERVER_CHECKSUM:
+				if (!my_pac->pac_buffer[i].ctr->pac.srv_cksum) {
+					break;
+				}
+				
+				srv_sig = my_pac->pac_buffer[i].ctr->pac.srv_cksum;
+				
+				/* get position of signature buffer */
+				srv_sig_pos = my_pac->pac_buffer[i].offset;
+				srv_sig_pos += sizeof(uint32);
+				
+				break;
+				
+			case PAC_TYPE_PRIVSVR_CHECKSUM:
+				if (!my_pac->pac_buffer[i].ctr->pac.privsrv_cksum) {
+					break;
+				}
 
-	ret = cli_krb5_get_ticket(local_service,
-				  time_offset,
-				  &tkt,
-				  &sesskey1,
-				  0,
-				  cc,
-				  NULL);
-	if (ret) {
-		DEBUG(1,("failed to get ticket for %s: %s\n",
-			local_service, error_message(ret)));
-		status = krb5_to_nt_status(ret);
-		goto out;
+				kdc_sig = my_pac->pac_buffer[i].ctr->pac.privsrv_cksum;
+				
+				/* get position of signature buffer */
+				kdc_sig_pos = my_pac->pac_buffer[i].offset;
+				kdc_sig_pos += sizeof(uint32);
+				
+				break;
+				
+			case PAC_TYPE_LOGON_NAME:
+				if (!my_pac->pac_buffer[i].ctr->pac.logon_name) {
+					break;
+				}
+
+				logon_name = my_pac->pac_buffer[i].ctr->pac.logon_name;
+				break;
+
+			case PAC_TYPE_LOGON_INFO:
+				if (!my_pac->pac_buffer[i].ctr->pac.logon_info) {
+					break;
+				}
+
+				logon_info = my_pac->pac_buffer[i].ctr->pac.logon_info;
+				break;
+			}
+
 	}
 
-	status = ads_verify_ticket(mem_ctx,
-				   lp_realm(),
-				   time_offset,
-				   &tkt,
-				   &client_princ_out,
-				   &pac_data,
-				   &ap_rep,
-				   &sesskey2,
-				   False);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(1,("ads_verify_ticket failed: %s\n",
-			nt_errstr(status)));
+	if (!srv_sig || !kdc_sig || !logon_name || !logon_info) {
+		nt_status = NT_STATUS_INVALID_PARAMETER;
 		goto out;
 	}
 
-	if (!pac_data) {
-		DEBUG(1,("no PAC\n"));
-		status = NT_STATUS_INVALID_PARAMETER;
+	/* zero PAC_SIGNATURE_DATA signature buffer */
+	memset(&modified_pac_blob.data[srv_sig_pos], '\0', srv_sig->signature.buf_len);
+	memset(&modified_pac_blob.data[kdc_sig_pos], '\0', kdc_sig->signature.buf_len);
+
+	/* check server signature */
+	nt_status = check_pac_checksum(mem_ctx, modified_pac_blob, srv_sig, context, service_keyblock);
+	if (!NT_STATUS_IS_OK(nt_status)) {
+		DEBUG(0,("decode_pac_data: failed to verify PAC server signature\n"));
 		goto out;
 	}
 
-	*pac_ret = pac_data;
+	/* Convert to NT time, so as not to loose accuracy in comparison */
+	unix_to_nt_time(&tgs_authtime_nttime, tgs_authtime);
 
-out:
-	if (cc != cache_name) {
-		ads_kdestroy(cc);
+	if (!nt_time_equals(&tgs_authtime_nttime, &logon_name->logon_time)) {
+	
+		DEBUG(2,("decode_pac_data: Logon time mismatch between ticket and PAC!\n"));
+		DEBUGADD(2, ("decode_pac_data: PAC: %s\n", 
+			http_timestring(nt_time_to_unix(logon_name->logon_time))));
+		DEBUGADD(2, ("decode_pac_data: Ticket: %s\n", 
+			http_timestring(nt_time_to_unix(tgs_authtime_nttime))));
+		
+		nt_status = NT_STATUS_ACCESS_DENIED;
+		goto out;
 	}
 
-	data_blob_free(&tkt);
-	data_blob_free(&ap_rep);
-	data_blob_free(&sesskey1);
-	data_blob_free(&sesskey2);
+	if (!logon_name->len) {
+		DEBUG(2,("decode_pac_data: No Logon Name available\n"));
+		nt_status = NT_STATUS_INVALID_PARAMETER;
+		goto out;
+	}
+	rpcstr_pull(username, logon_name->username, sizeof(username), logon_name->len, 0);
 
-	SAFE_FREE(client_princ_out);
+	ret = smb_krb5_parse_name_norealm(context, username, &client_principal_pac);
+	if (ret) {
+		DEBUG(2,("decode_pac_data: Could not parse name from incoming PAC: [%s]: %s\n", 
+			username, error_message(ret)));
+		nt_status = NT_STATUS_INVALID_PARAMETER;
+		goto out;
+	}
 
-	return status;
-}
+	if (!smb_krb5_principal_compare_any_realm(context, client_principal, client_principal_pac)) {
+		DEBUG(2,("decode_pac_data: Name in PAC [%s] does not match principal name in ticket\n", 
+			username));
+		nt_status = NT_STATUS_ACCESS_DENIED;
+		goto out;
+	}
 
-/****************************************************************
-****************************************************************/
+	DEBUG(10,("Successfully validated Kerberos PAC\n"));
 
-static NTSTATUS kerberos_return_pac_logon_info(TALLOC_CTX *mem_ctx,
-					       const char *name,
-					       const char *pass,
-					       time_t time_offset,
-					       time_t *expire_time,
-					       time_t *renew_till_time,
-					       const char *cache_name,
-					       bool request_pac,
-					       bool add_netbios_addr,
-					       time_t renewable_time,
-					       struct PAC_LOGON_INFO **logon_info)
-{
-	NTSTATUS status;
-	struct PAC_DATA *pac_data = NULL;
-	struct PAC_LOGON_INFO *info = NULL;
+	dump_pac_logon_info(logon_info);
 
-	status = kerberos_return_pac(mem_ctx,
-				     name,
-				     pass,
-				     time_offset,
-				     expire_time,
-				     renew_till_time,
-				     cache_name,
-				     request_pac,
-				     add_netbios_addr,
-				     renewable_time,
-				     &pac_data);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
+	*pac_data = my_pac;
 
-	if (!pac_data) {
-		DEBUG(3,("no pac\n"));
-		return NT_STATUS_INVALID_USER_BUFFER;
-	}
+	nt_status = NT_STATUS_OK;
 
-	info = get_logon_info_from_pac(pac_data);
-	if (!info) {
-		DEBUG(1,("no logon_info\n"));
-		return NT_STATUS_INVALID_USER_BUFFER;
+out:
+	if (client_principal_pac) {
+		krb5_free_principal(context, client_principal_pac);
 	}
 
-	*logon_info = info;
-
-	return NT_STATUS_OK;
+	return nt_status;
 }
 
-/****************************************************************
-****************************************************************/
-
-NTSTATUS kerberos_return_info3_from_pac(TALLOC_CTX *mem_ctx,
-					const char *name,
-					const char *pass,
-					time_t time_offset,
-					time_t *expire_time,
-					time_t *renew_till_time,
-					const char *cache_name,
-					bool request_pac,
-					bool add_netbios_addr,
-					time_t renewable_time,
-					struct netr_SamInfo3 **info3)
+ PAC_LOGON_INFO *get_logon_info_from_pac(PAC_DATA *pac_data) 
 {
-	NTSTATUS status;
-	struct PAC_LOGON_INFO *logon_info = NULL;
+	PAC_LOGON_INFO *logon_info = NULL;
+	int i;
+	
+	for (i=0; i < pac_data->num_buffers; i++) {
 
-	status = kerberos_return_pac_logon_info(mem_ctx,
-						name,
-						pass,
-						time_offset,
-						expire_time,
-						renew_till_time,
-						cache_name,
-						request_pac,
-						add_netbios_addr,
-						renewable_time,
-						&logon_info);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+		if (pac_data->pac_buffer[i].type != PAC_TYPE_LOGON_INFO)
+			continue;
+
+		logon_info = pac_data->pac_buffer[i].ctr->pac.logon_info;
+		break;
 	}
+	return logon_info;
+}
 
-	*info3 = &logon_info->info3;
-
-	return NT_STATUS_OK;
-}
 #endif

Modified: branches/samba/upstream/source/libads/cldap.c
===================================================================
--- branches/samba/upstream/source/libads/cldap.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libads/cldap.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,11 +3,10 @@
    net ads cldap functions 
    Copyright (C) 2001 Andrew Tridgell (tridge at samba.org)
    Copyright (C) 2003 Jim McDonough (jmcd at us.ibm.com)
-   Copyright (C) 2008 Guenther Deschner (gd at samba.org)
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,12 +15,79 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  
 */
 
 #include "includes.h"
 
 /*
+  These seem to be strings as described in RFC1035 4.1.4 and can be:
+
+   - a sequence of labels ending in a zero octet
+   - a pointer
+   - a sequence of labels ending with a pointer
+
+  A label is a byte where the first two bits must be zero and the remaining
+  bits represent the length of the label followed by the label itself.
+  Therefore, the length of a label is at max 64 bytes.  Under RFC1035, a
+  sequence of labels cannot exceed 255 bytes.
+
+  A pointer consists of a 14 bit offset from the beginning of the data.
+
+  struct ptr {
+    unsigned ident:2; // must be 11
+    unsigned offset:14; // from the beginning of data
+  };
+
+  This is used as a method to compress the packet by eliminated duplicate
+  domain components.  Since a UDP packet should probably be < 512 bytes and a
+  DNS name can be up to 255 bytes, this actually makes a lot of sense.
+*/
+static unsigned pull_netlogon_string(char *ret, const char *ptr,
+				     const char *data)
+{
+	char *pret = ret;
+	int followed_ptr = 0;
+	unsigned ret_len = 0;
+
+	memset(pret, 0, MAX_DNS_LABEL);
+	do {
+		if ((*ptr & 0xc0) == 0xc0) {
+			uint16 len;
+
+			if (!followed_ptr) {
+				ret_len += 2;
+				followed_ptr = 1;
+			}
+			len = ((ptr[0] & 0x3f) << 8) | ptr[1];
+			ptr = data + len;
+		} else if (*ptr) {
+			uint8 len = (uint8)*(ptr++);
+
+			if ((pret - ret + len + 1) >= MAX_DNS_LABEL) {
+				DEBUG(1,("DC returning too long DNS name\n"));
+				return 0;
+			}
+
+			if (pret != ret) {
+				*pret = '.';
+				pret++;
+			}
+			memcpy(pret, ptr, len);
+			pret += len;
+			ptr += len;
+
+			if (!followed_ptr) {
+				ret_len += (len + 1);
+			}
+		}
+	} while (*ptr);
+
+	return followed_ptr ? ret_len : ret_len + 1;
+}
+
+/*
   do a cldap netlogon query
 */
 static int send_cldap_netlogon(int sock, const char *domain, 
@@ -117,21 +183,18 @@
 /*
   receive a cldap netlogon reply
 */
-static int recv_cldap_netlogon(TALLOC_CTX *mem_ctx,
-			       int sock,
-			       uint32_t *nt_version,
-			       union nbt_cldap_netlogon **reply)
+static int recv_cldap_netlogon(int sock, struct cldap_netlogon_reply *reply)
 {
 	int ret;
 	ASN1_DATA data;
-	DATA_BLOB blob = data_blob_null;
-	DATA_BLOB os1 = data_blob_null;
-	DATA_BLOB os2 = data_blob_null;
-	DATA_BLOB os3 = data_blob_null;
+	DATA_BLOB blob = data_blob(NULL, 0);
+	DATA_BLOB os1 = data_blob(NULL, 0);
+	DATA_BLOB os2 = data_blob(NULL, 0);
+	DATA_BLOB os3 = data_blob(NULL, 0);
 	int i1;
 	/* half the time of a regular ldap timeout, not less than 3 seconds. */
 	unsigned int al_secs = MAX(3,lp_ldap_timeout()/2);
-	union nbt_cldap_netlogon *r = NULL;
+	char *p;
 
 	blob = data_blob(NULL, 8192);
 	if (blob.data == NULL) {
@@ -185,25 +248,34 @@
 		return -1;
 	}
 
-	r = TALLOC_ZERO_P(mem_ctx, union nbt_cldap_netlogon);
-	if (!r) {
-		errno = ENOMEM;
-		data_blob_free(&os1);
-		data_blob_free(&os2);
-		data_blob_free(&os3);
-		data_blob_free(&blob);
-		return -1;
-	}
+	p = (char *)os3.data;
 
-	if (!pull_mailslot_cldap_reply(mem_ctx, &os3, r, nt_version)) {
-		data_blob_free(&os1);
-		data_blob_free(&os2);
-		data_blob_free(&os3);
-		data_blob_free(&blob);
-		TALLOC_FREE(r);
-		return -1;
+	reply->type = IVAL(p, 0); p += 4;
+	reply->flags = IVAL(p, 0); p += 4;
+
+	memcpy(&reply->guid.info, p, UUID_FLAT_SIZE);
+	p += UUID_FLAT_SIZE;
+
+	p += pull_netlogon_string(reply->forest, p, (const char *)os3.data);
+	p += pull_netlogon_string(reply->domain, p, (const char *)os3.data);
+	p += pull_netlogon_string(reply->hostname, p, (const char *)os3.data);
+	p += pull_netlogon_string(reply->netbios_domain, p, (const char *)os3.data);
+	p += pull_netlogon_string(reply->netbios_hostname, p, (const char *)os3.data);
+	p += pull_netlogon_string(reply->unk, p, (const char *)os3.data);
+
+	if (reply->type == SAMLOGON_AD_R) {
+		p += pull_netlogon_string(reply->user_name, p, (const char *)os3.data);
+	} else {
+		*reply->user_name = 0;
 	}
 
+	p += pull_netlogon_string(reply->server_site_name, p, (const char *)os3.data);
+	p += pull_netlogon_string(reply->client_site_name, p, (const char *)os3.data);
+
+	reply->version = IVAL(p, 0);
+	reply->lmnt_token = SVAL(p, 4);
+	reply->lm20_token = SVAL(p, 6);
+
 	data_blob_free(&os1);
 	data_blob_free(&os2);
 	data_blob_free(&os3);
@@ -211,12 +283,6 @@
 	
 	asn1_free(&data);
 
-	if (reply) {
-		*reply = r;
-	} else {
-		TALLOC_FREE(r);
-	}
-
 	return 0;
 }
 
@@ -224,11 +290,7 @@
   do a cldap netlogon query.  Always 389/udp
 *******************************************************************/
 
-bool ads_cldap_netlogon(TALLOC_CTX *mem_ctx,
-			const char *server,
-			const char *realm,
-			uint32_t *nt_version,
-			union nbt_cldap_netlogon **reply)
+BOOL ads_cldap_netlogon(const char *server, const char *realm,  struct cldap_netlogon_reply *reply)
 {
 	int sock;
 	int ret;
@@ -240,12 +302,12 @@
 		return False;
 	}
 
-	ret = send_cldap_netlogon(sock, realm, global_myname(), *nt_version);
+	ret = send_cldap_netlogon(sock, realm, global_myname(), 6);
 	if (ret != 0) {
 		close(sock);
 		return False;
 	}
-	ret = recv_cldap_netlogon(mem_ctx, sock, nt_version, reply);
+	ret = recv_cldap_netlogon(sock, reply);
 	close(sock);
 
 	if (ret == -1) {
@@ -254,115 +316,3 @@
 
 	return True;
 }
-
-/*******************************************************************
-  do a cldap netlogon query.  Always 389/udp
-*******************************************************************/
-
-bool ads_cldap_netlogon_5(TALLOC_CTX *mem_ctx,
-			  const char *server,
-			  const char *realm,
-			  struct nbt_cldap_netlogon_5 *reply5)
-{
-	uint32_t nt_version = NETLOGON_VERSION_5 | NETLOGON_VERSION_5EX;
-	union nbt_cldap_netlogon *reply = NULL;
-	bool ret;
-
-	ret = ads_cldap_netlogon(mem_ctx, server, realm, &nt_version, &reply);
-	if (!ret) {
-		return false;
-	}
-
-	if (nt_version != (NETLOGON_VERSION_5 | NETLOGON_VERSION_5EX)) {
-		return false;
-	}
-
-	*reply5 = reply->logon5;
-
-	return true;
-}
-
-/****************************************************************
-****************************************************************/
-
-bool pull_mailslot_cldap_reply(TALLOC_CTX *mem_ctx,
-			       const DATA_BLOB *blob,
-			       union nbt_cldap_netlogon *r,
-			       uint32_t *nt_version)
-{
-	enum ndr_err_code ndr_err;
-	uint32_t nt_version_query = ((*nt_version) & 0x0000001f);
-	uint16_t command = 0;
-
-	ndr_err = ndr_pull_struct_blob(blob, mem_ctx, &command,
-			(ndr_pull_flags_fn_t)ndr_pull_uint16);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		return false;
-	}
-
-	switch (command) {
-		case 0x13: /* 19 */
-		case 0x15: /* 21 */
-		case 0x17: /* 23 */
-		case 0x19: /* 25 */
-			 break;
-		default:
-			DEBUG(1,("got unexpected command: %d (0x%08x)\n",
-				command, command));
-			return false;
-	}
-
-	ndr_err = ndr_pull_union_blob_all(blob, mem_ctx, r, nt_version_query,
-		       (ndr_pull_flags_fn_t)ndr_pull_nbt_cldap_netlogon);
-	if (NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		goto done;
-	}
-
-	/* when the caller requested just those nt_version bits that the server
-	 * was able to reply to, we are fine and all done. otherwise we need to
-	 * assume downgraded replies which are painfully parsed here - gd */
-
-	if (nt_version_query & NETLOGON_VERSION_WITH_CLOSEST_SITE) {
-		nt_version_query &= ~NETLOGON_VERSION_WITH_CLOSEST_SITE;
-	}
-	ndr_err = ndr_pull_union_blob_all(blob, mem_ctx, r, nt_version_query,
-		       (ndr_pull_flags_fn_t)ndr_pull_nbt_cldap_netlogon);
-	if (NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		goto done;
-	}
-	if (nt_version_query & NETLOGON_VERSION_5EX_WITH_IP) {
-		nt_version_query &= ~NETLOGON_VERSION_5EX_WITH_IP;
-	}
-	ndr_err = ndr_pull_union_blob_all(blob, mem_ctx, r, nt_version_query,
-		       (ndr_pull_flags_fn_t)ndr_pull_nbt_cldap_netlogon);
-	if (NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		goto done;
-	}
-	if (nt_version_query & NETLOGON_VERSION_5EX) {
-		nt_version_query &= ~NETLOGON_VERSION_5EX;
-	}
-	ndr_err = ndr_pull_union_blob_all(blob, mem_ctx, r, nt_version_query,
-		       (ndr_pull_flags_fn_t)ndr_pull_nbt_cldap_netlogon);
-	if (NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		goto done;
-	}
-	if (nt_version_query & NETLOGON_VERSION_5) {
-		nt_version_query &= ~NETLOGON_VERSION_5;
-	}
-	ndr_err = ndr_pull_union_blob_all(blob, mem_ctx, r, nt_version_query,
-		       (ndr_pull_flags_fn_t)ndr_pull_nbt_cldap_netlogon);
-	if (NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		goto done;
-	}
-
-	return false;
-
- done:
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_UNION_DEBUG(nbt_cldap_netlogon, nt_version_query, r);
-	}
-
-	*nt_version = nt_version_query;
-
-	return true;
-}

Modified: branches/samba/upstream/source/libads/disp_sec.c
===================================================================
--- branches/samba/upstream/source/libads/disp_sec.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libads/disp_sec.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful, 
@@ -14,13 +14,12 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
-#ifdef HAVE_LDAP
-
 static struct perm_mask_str {
 	uint32  mask;
 	const char   *str;
@@ -47,7 +46,6 @@
 
 	{SEC_RIGHTS_CHANGE_PASSWD,	"[Change Password]"},	
 	{SEC_RIGHTS_RESET_PASSWD,	"[Reset Password]"},
-
 	{0,				0}
 };
 
@@ -68,7 +66,7 @@
 		if (type & (1 << i)) {
 			for (j = 1; perms[j].str; j ++) {
 				if (perms[j].mask == (((unsigned) 1) << i)) {
-					printf("\n\t%s (0x%08x)", perms[j].str, perms[j].mask);
+					printf("\n\t%s", perms[j].str);
 				}	
 			}
 			type &= ~(1 << i);
@@ -82,54 +80,8 @@
 	puts("");
 }
 
-static const char *ads_interprete_guid_from_object(ADS_STRUCT *ads, 
-						   TALLOC_CTX *mem_ctx, 
-						   const struct GUID *guid)
-{
-	const char *ret = NULL;
-
-	if (!ads || !mem_ctx) {
-		return NULL;
-	}
-
-	ret = ads_get_attrname_by_guid(ads, ads->config.schema_path, 
-				       mem_ctx, guid);
-	if (ret) {
-		return talloc_asprintf(mem_ctx, "LDAP attribute: \"%s\"", ret);
-	}
-
-	ret = ads_get_extended_right_name_by_guid(ads, ads->config.config_path,
-						  mem_ctx, guid);
-
-	if (ret) {
-		return talloc_asprintf(mem_ctx, "Extended right: \"%s\"", ret);
-	}
-
-	return ret;
-}
-
-static void ads_disp_sec_ace_object(ADS_STRUCT *ads, 
-				    TALLOC_CTX *mem_ctx, 
-				    struct security_ace_object *object)
-{
-	if (object->flags & SEC_ACE_OBJECT_PRESENT) {
-		printf("Object type: SEC_ACE_OBJECT_PRESENT\n");
-		printf("Object GUID: %s (%s)\n", smb_uuid_string(mem_ctx, 
-			object->type.type), 
-			ads_interprete_guid_from_object(ads, mem_ctx, 
-				&object->type.type));
-	}
-	if (object->flags & SEC_ACE_OBJECT_INHERITED_PRESENT) {
-		printf("Object type: SEC_ACE_OBJECT_INHERITED_PRESENT\n");
-		printf("Object GUID: %s (%s)\n", smb_uuid_string(mem_ctx,
-			object->inherited_type.inherited_type),
-			ads_interprete_guid_from_object(ads, mem_ctx, 
-				&object->inherited_type.inherited_type));
-	}
-}
-
 /* display ACE */
-static void ads_disp_ace(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx, SEC_ACE *sec_ace)
+static void ads_disp_ace(SEC_ACE *sec_ace)
 {
 	const char *access_type = "UNKNOWN";
 
@@ -145,7 +97,7 @@
 		  sec_ace->flags,
 		  sec_ace->size,
 		  sec_ace->access_mask,
-		  sec_ace->object.object.flags);
+		  sec_ace->obj_flags);
 	}
 	
 	if (sec_ace->type == SEC_ACE_TYPE_ACCESS_ALLOWED) {
@@ -163,12 +115,8 @@
 	}
 
 	printf("access SID:  %s\naccess type: %s\n", 
-               sid_string_talloc(mem_ctx, &sec_ace->trustee), access_type);
+               sid_string_static(&sec_ace->trustee), access_type);
 
-	if (sec_ace_object(sec_ace->type)) {
-		ads_disp_sec_ace_object(ads, mem_ctx, &sec_ace->object.object);
-	}
-
 	ads_disp_perms(sec_ace->access_mask);
 }
 
@@ -187,51 +135,25 @@
 }
 
 /* display SD */
-void ads_disp_sd(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx, SEC_DESC *sd)
+void ads_disp_sd(SEC_DESC *sd)
 {
 	int i;
-	char *tmp_path = NULL;
-
-	if (!sd) {
-		return;
-	}
-
-	if (ads && !ads->config.schema_path) {
-		if (ADS_ERR_OK(ads_schema_path(ads, mem_ctx, &tmp_path))) {
-			ads->config.schema_path = SMB_STRDUP(tmp_path);
-		}
-	}
-
-	if (ads && !ads->config.config_path) {
-		if (ADS_ERR_OK(ads_config_path(ads, mem_ctx, &tmp_path))) {
-			ads->config.config_path = SMB_STRDUP(tmp_path);
-		}
-	}
-
+	
 	printf("-------------- Security Descriptor (revision: %d, type: 0x%02x)\n", 
                sd->revision,
                sd->type);
+	printf("owner SID: %s\n", sid_string_static(sd->owner_sid));
+	printf("group SID: %s\n", sid_string_static(sd->group_sid));
 
-	printf("owner SID: %s\n", sd->owner_sid ? 
-		sid_string_talloc(mem_ctx, sd->owner_sid) : "(null)");
-	printf("group SID: %s\n", sd->group_sid ?
-		sid_string_talloc(mem_ctx, sd->group_sid) : "(null)");
-
 	ads_disp_acl(sd->sacl, "system");
-	if (sd->sacl) {
-		for (i = 0; i < sd->sacl->num_aces; i ++) {
-			ads_disp_ace(ads, mem_ctx, &sd->sacl->aces[i]);
-		}
-	}
+	for (i = 0; i < sd->sacl->num_aces; i ++)
+		ads_disp_ace(&sd->sacl->aces[i]);
 	
 	ads_disp_acl(sd->dacl, "user");
-	if (sd->dacl) {
-		for (i = 0; i < sd->dacl->num_aces; i ++) {
-			ads_disp_ace(ads, mem_ctx, &sd->dacl->aces[i]);
-		}
-	}
+	for (i = 0; i < sd->dacl->num_aces; i ++)
+		ads_disp_ace(&sd->dacl->aces[i]);
 
 	printf("-------------- End Of Security Descriptor\n");
 }
 
-#endif
+

Modified: branches/samba/upstream/source/libads/dns.c
===================================================================
--- branches/samba/upstream/source/libads/dns.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libads/dns.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,21 +1,21 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    DNS utility library
    Copyright (C) Gerald (Jerry) Carter           2006.
-   Copyright (C) Jeremy Allison                  2007.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -45,13 +45,6 @@
 #if !defined(T_A)	/* AIX 5.3 already defines T_A */
 #  define T_A   	ns_t_a
 #endif
-
-#if defined(HAVE_IPV6)
-#if !defined(T_AAAA)
-#  define T_AAAA	ns_t_aaaa
-#endif
-#endif
-
 #  define T_SRV 	ns_t_srv
 #if !defined(T_NS)	/* AIX 5.3 already defines T_NS */
 #  define T_NS 		ns_t_ns
@@ -73,15 +66,15 @@
 /*********************************************************************
 *********************************************************************/
 
-static bool ads_dns_parse_query( TALLOC_CTX *ctx, uint8 *start, uint8 *end,
+static BOOL ads_dns_parse_query( TALLOC_CTX *ctx, uint8 *start, uint8 *end,
                           uint8 **ptr, struct dns_query *q )
 {
 	uint8 *p = *ptr;
-	char hostname[MAX_DNS_NAME_LENGTH];
+	pstring hostname;
 	int namelen;
 
 	ZERO_STRUCTP( q );
-
+	
 	if ( !start || !end || !q || !*ptr)
 		return False;
 
@@ -111,11 +104,11 @@
 /*********************************************************************
 *********************************************************************/
 
-static bool ads_dns_parse_rr( TALLOC_CTX *ctx, uint8 *start, uint8 *end,
+static BOOL ads_dns_parse_rr( TALLOC_CTX *ctx, uint8 *start, uint8 *end,
                        uint8 **ptr, struct dns_rr *rr )
 {
 	uint8 *p = *ptr;
-	char hostname[MAX_DNS_NAME_LENGTH];
+	pstring hostname;
 	int namelen;
 
 	if ( !start || !end || !rr || !*ptr)
@@ -142,7 +135,7 @@
 	rr->in_class = RSVAL(p, 2);
 	rr->ttl      = RIVAL(p, 4);
 	rr->rdatalen = RSVAL(p, 8);
-
+	
 	p += 10;
 
 	/* sanity check the available space */
@@ -165,18 +158,18 @@
 /*********************************************************************
 *********************************************************************/
 
-static bool ads_dns_parse_rr_srv( TALLOC_CTX *ctx, uint8 *start, uint8 *end,
+static BOOL ads_dns_parse_rr_srv( TALLOC_CTX *ctx, uint8 *start, uint8 *end,
                        uint8 **ptr, struct dns_rr_srv *srv )
 {
 	struct dns_rr rr;
 	uint8 *p;
-	char dcname[MAX_DNS_NAME_LENGTH];
+	pstring dcname;
 	int namelen;
 
 	if ( !start || !end || !srv || !*ptr)
 		return -1;
 
-	/* Parse the RR entry.  Coming out of the this, ptr is at the beginning
+	/* Parse the RR entry.  Coming out of the this, ptr is at the beginning 
 	   of the next record */
 
 	if ( !ads_dns_parse_rr( ctx, start, end, ptr, &rr ) ) {
@@ -185,8 +178,7 @@
 	}
 
 	if ( rr.type != T_SRV ) {
-		DEBUG(1,("ads_dns_parse_rr_srv: Bad answer type (%d)\n",
-					rr.type));
+		DEBUG(1,("ads_dns_parse_rr_srv: Bad answer type (%d)\n", rr.type));
 		return False;
 	}
 
@@ -218,18 +210,18 @@
 /*********************************************************************
 *********************************************************************/
 
-static bool ads_dns_parse_rr_ns( TALLOC_CTX *ctx, uint8 *start, uint8 *end,
+static BOOL ads_dns_parse_rr_ns( TALLOC_CTX *ctx, uint8 *start, uint8 *end,
                        uint8 **ptr, struct dns_rr_ns *nsrec )
 {
 	struct dns_rr rr;
 	uint8 *p;
-	char nsname[MAX_DNS_NAME_LENGTH];
+	pstring nsname;
 	int namelen;
 
 	if ( !start || !end || !nsrec || !*ptr)
 		return -1;
 
-	/* Parse the RR entry.  Coming out of the this, ptr is at the beginning
+	/* Parse the RR entry.  Coming out of the this, ptr is at the beginning 
 	   of the next record */
 
 	if ( !ads_dns_parse_rr( ctx, start, end, ptr, &rr ) ) {
@@ -238,15 +230,14 @@
 	}
 
 	if ( rr.type != T_NS ) {
-		DEBUG(1,("ads_dns_parse_rr_ns: Bad answer type (%d)\n",
-					rr.type));
+		DEBUG(1,("ads_dns_parse_rr_ns: Bad answer type (%d)\n", rr.type));
 		return False;
 	}
 
 	p = rr.rdata;
 
 	/* ame server hostname */
-
+	
 	namelen = dn_expand( start, end, p, nsname, sizeof(nsname) );
 	if ( namelen < 0 ) {
 		DEBUG(1,("ads_dns_parse_rr_ns: Failed to uncompress name!\n"));
@@ -266,16 +257,16 @@
 	if ( a->priority == b->priority ) {
 
 		/* randomize entries with an equal weight and priority */
-		if ( a->weight == b->weight )
+		if ( a->weight == b->weight ) 
 			return 0;
 
-		/* higher weights should be sorted lower */
+		/* higher weights should be sorted lower */ 
 		if ( a->weight > b->weight )
 			return -1;
 		else
 			return 1;
 	}
-
+		
 	if ( a->priority < b->priority )
 		return -1;
 
@@ -286,72 +277,38 @@
  Simple wrapper for a DNS query
 *********************************************************************/
 
-#define DNS_FAILED_WAITTIME          30
-
-static NTSTATUS dns_send_req( TALLOC_CTX *ctx, const char *name, int q_type,
+static NTSTATUS dns_send_req( TALLOC_CTX *ctx, const char *name, int q_type, 
                               uint8 **buf, int *resp_length )
 {
 	uint8 *buffer = NULL;
 	size_t buf_len = 0;
-	int resp_len = NS_PACKETSZ;
-	static time_t last_dns_check = 0;
-	static NTSTATUS last_dns_status = NT_STATUS_OK;
-	time_t now = time(NULL);
-
-	/* Try to prevent bursts of DNS lookups if the server is down */
-
-	/* Protect against large clock changes */
-
-	if ( last_dns_check > now )
-		last_dns_check = 0;
-
-	/* IF we had a DNS timeout or a bad server and we are still
-	   in the 30 second cache window, just return the previous
-	   status and save the network timeout. */
-
-	if ( (NT_STATUS_EQUAL(last_dns_status,NT_STATUS_IO_TIMEOUT) ||
-	      NT_STATUS_EQUAL(last_dns_status,NT_STATUS_CONNECTION_REFUSED)) &&
-	     (last_dns_check+DNS_FAILED_WAITTIME) > now )
-	{
-		DEBUG(10,("last_dns_check: Returning cached status (%s)\n",
-			  nt_errstr(last_dns_status) ));
-		return last_dns_status;
-	}
-
-	/* Send the Query */
+	int resp_len = NS_PACKETSZ;	
+	
 	do {
 		if ( buffer )
 			TALLOC_FREE( buffer );
-
+		
 		buf_len = resp_len * sizeof(uint8);
 
 		if (buf_len) {
-			if ((buffer = TALLOC_ARRAY(ctx, uint8, buf_len))
-					== NULL ) {
-				DEBUG(0,("ads_dns_lookup_srv: "
-					"talloc() failed!\n"));
-				last_dns_status = NT_STATUS_NO_MEMORY;
-				last_dns_check = time(NULL);
-				return last_dns_status;
+			if ( (buffer = TALLOC_ARRAY(ctx, uint8, buf_len)) == NULL ) {
+				DEBUG(0,("ads_dns_lookup_srv: talloc() failed!\n"));
+				return NT_STATUS_NO_MEMORY;
 			}
+		} else {
+			buffer = NULL;
 		}
 
-		if ((resp_len = res_query(name, C_IN, q_type, buffer, buf_len))
-				< 0 ) {
-			DEBUG(3,("ads_dns_lookup_srv: "
-				"Failed to resolve %s (%s)\n",
-				name, strerror(errno)));
+		if ( (resp_len = res_query(name, C_IN, q_type, buffer, buf_len)) < 0 ) {
+			DEBUG(3,("ads_dns_lookup_srv: Failed to resolve %s (%s)\n", name, strerror(errno)));
 			TALLOC_FREE( buffer );
-			last_dns_status = NT_STATUS_UNSUCCESSFUL;
-
 			if (errno == ETIMEDOUT) {
-				last_dns_status = NT_STATUS_IO_TIMEOUT;
+				return NT_STATUS_IO_TIMEOUT;
 			}
 			if (errno == ECONNREFUSED) {
-				last_dns_status = NT_STATUS_CONNECTION_REFUSED;
+				return NT_STATUS_CONNECTION_REFUSED;
 			}
-			last_dns_check = time(NULL);
-			return last_dns_status;
+			return NT_STATUS_UNSUCCESSFUL;
 		}
 
 		/* On AIX, Solaris, and possibly some older glibc systems (e.g. SLES8)
@@ -363,9 +320,7 @@
 				DEBUG(1,("dns_send_req: DNS reply too large when resolving %s\n",
 					name));
 				TALLOC_FREE( buffer );
-				last_dns_status = NT_STATUS_BUFFER_TOO_SMALL;
-				last_dns_check = time(NULL);
-				return last_dns_status;
+				return NT_STATUS_BUFFER_TOO_SMALL;
 			}
 
 			resp_len = MIN(resp_len*2, MAX_DNS_PACKET_SIZE);
@@ -377,19 +332,14 @@
 	*buf = buffer;
 	*resp_length = resp_len;
 
-	last_dns_check = time(NULL);
-	last_dns_status = NT_STATUS_OK;
-	return last_dns_status;
+	return NT_STATUS_OK;
 }
 
 /*********************************************************************
  Simple wrapper for a DNS SRV query
 *********************************************************************/
 
-static NTSTATUS ads_dns_lookup_srv( TALLOC_CTX *ctx,
-				const char *name,
-				struct dns_rr_srv **dclist,
-				int *numdcs)
+static NTSTATUS ads_dns_lookup_srv( TALLOC_CTX *ctx, const char *name, struct dns_rr_srv **dclist, int *numdcs )
 {
 	uint8 *buffer = NULL;
 	int resp_len = 0;
@@ -403,8 +353,8 @@
 	if ( !ctx || !name || !dclist ) {
 		return NT_STATUS_INVALID_PARAMETER;
 	}
-
-	/* Send the request.  May have to loop several times in case
+	
+	/* Send the request.  May have to loop several times in case 
 	   of large replies */
 
 	status = dns_send_req( ctx, name, T_SRV, &buffer, &resp_len );
@@ -419,23 +369,19 @@
 	   available in libresolv.a, and not the shared lib.  Who knows why....
 	   So we have to parse the DNS reply ourselves */
 
-	/* Pull the answer RR's count from the header.
-	 * Use the NMB ordering macros */
+	/* Pull the answer RR's count from the header.  Use the NMB ordering macros */
 
 	query_count      = RSVAL( p, 4 );
 	answer_count     = RSVAL( p, 6 );
 	auth_count       = RSVAL( p, 8 );
 	additional_count = RSVAL( p, 10 );
 
-	DEBUG(4,("ads_dns_lookup_srv: "
-		"%d records returned in the answer section.\n",
+	DEBUG(4,("ads_dns_lookup_srv: %d records returned in the answer section.\n", 
 		answer_count));
-
+		
 	if (answer_count) {
-		if ((dcs = TALLOC_ZERO_ARRAY(ctx, struct dns_rr_srv,
-						answer_count)) == NULL ) {
-			DEBUG(0,("ads_dns_lookup_srv: "
-				"talloc() failure for %d char*'s\n",
+		if ( (dcs = TALLOC_ZERO_ARRAY(ctx, struct dns_rr_srv, answer_count)) == NULL ) {
+			DEBUG(0,("ads_dns_lookup_srv: talloc() failure for %d char*'s\n", 
 				answer_count));
 			return NT_STATUS_NO_MEMORY;
 		}
@@ -468,7 +414,7 @@
 			DEBUG(1,("ads_dns_lookup_srv: "
 				 "Failed to parse answer recordi [%d]!\n", rrnum));
 			return NT_STATUS_UNSUCCESSFUL;
-		}
+		}		
 	}
 	idx = rrnum;
 
@@ -499,74 +445,53 @@
 			return NT_STATUS_UNSUCCESSFUL;
 		}
 
-		/* Only interested in A or AAAA records as a shortcut for having
-		 * to come back later and lookup the name. For multi-homed
-		 * hosts, the number of additional records and exceed the
-		 * number of answer records. */
+		/* only interested in A records as a shortcut for having to come 
+		   back later and lookup the name.  For multi-homed hosts, the 
+		   number of additional records and exceed the number of answer 
+		   records. */
+		  
 
-		if (rr.type != T_A || rr.rdatalen != 4) {
-#if defined(HAVE_IPV6)
-			/* FIXME. RFC2874 defines A6 records. This
-			 * requires recusive and horribly complex lookups.
-			 * Bastards. Ignore this for now.... JRA.
-			 */
-			if (rr.type != T_AAAA || rr.rdatalen != 16)
-#endif
-				continue;
-		}
+		if ( (rr.type != T_A) || (rr.rdatalen != 4) ) 
+			continue;
 
 		for ( i=0; i<idx; i++ ) {
 			if ( strcmp( rr.hostname, dcs[i].hostname ) == 0 ) {
 				int num_ips = dcs[i].num_ips;
-				struct sockaddr_storage *tmp_ss_s;
+				uint8 *buf;
+				struct in_addr *tmp_ips;
 
 				/* allocate new memory */
-
-				if (dcs[i].num_ips == 0) {
-					if ((dcs[i].ss_s = TALLOC_ARRAY(dcs,
-						struct sockaddr_storage, 1 ))
-							== NULL ) {
+				
+				if ( dcs[i].num_ips == 0 ) {
+					if ( (dcs[i].ips = TALLOC_ARRAY( dcs, 
+						struct in_addr, 1 )) == NULL ) 
+					{
 						return NT_STATUS_NO_MEMORY;
 					}
 				} else {
-					if ((tmp_ss_s = TALLOC_REALLOC_ARRAY(dcs,
-							dcs[i].ss_s,
-							struct sockaddr_storage,
-							dcs[i].num_ips+1))
-								== NULL ) {
+					if ( (tmp_ips = TALLOC_REALLOC_ARRAY( dcs, dcs[i].ips,
+						struct in_addr, dcs[i].num_ips+1)) == NULL ) 
+					{
 						return NT_STATUS_NO_MEMORY;
 					}
-
-					dcs[i].ss_s = tmp_ss_s;
+					
+					dcs[i].ips = tmp_ips;
 				}
 				dcs[i].num_ips++;
-
+				
 				/* copy the new IP address */
-				if (rr.type == T_A) {
-					struct in_addr ip;
-					memcpy(&ip, rr.rdata, 4);
-					in_addr_to_sockaddr_storage(
-							&dcs[i].ss_s[num_ips],
-							ip);
-				}
-#if defined(HAVE_IPV6)
-				if (rr.type == T_AAAA) {
-					struct in6_addr ip6;
-					memcpy(&ip6, rr.rdata, rr.rdatalen);
-					in6_addr_to_sockaddr_storage(
-							&dcs[i].ss_s[num_ips],
-							ip6);
-				}
-#endif
+				
+				buf = (uint8*)&dcs[i].ips[num_ips].s_addr;
+				memcpy( buf, rr.rdata, 4 );
 			}
 		}
 	}
 
 	qsort( dcs, idx, sizeof(struct dns_rr_srv), QSORT_CAST dnssrvcmp );
-
+	
 	*dclist = dcs;
 	*numdcs = idx;
-
+	
 	return NT_STATUS_OK;
 }
 
@@ -574,10 +499,7 @@
  Simple wrapper for a DNS NS query
 *********************************************************************/
 
-NTSTATUS ads_dns_lookup_ns(TALLOC_CTX *ctx,
-				const char *dnsdomain,
-				struct dns_rr_ns **nslist,
-				int *numns)
+NTSTATUS ads_dns_lookup_ns( TALLOC_CTX *ctx, const char *dnsdomain, struct dns_rr_ns **nslist, int *numns )
 {
 	uint8 *buffer = NULL;
 	int resp_len = 0;
@@ -591,10 +513,10 @@
 	if ( !ctx || !dnsdomain || !nslist ) {
 		return NT_STATUS_INVALID_PARAMETER;
 	}
-
-	/* Send the request.  May have to loop several times in case
+	
+	/* Send the request.  May have to loop several times in case 
 	   of large replies */
-
+	   
 	status = dns_send_req( ctx, dnsdomain, T_NS, &buffer, &resp_len );
 	if ( !NT_STATUS_IS_OK(status) ) {
 		DEBUG(3,("ads_dns_lookup_ns: Failed to send DNS query (%s)\n",
@@ -607,23 +529,19 @@
 	   available in libresolv.a, and not the shared lib.  Who knows why....
 	   So we have to parse the DNS reply ourselves */
 
-	/* Pull the answer RR's count from the header.
-	 * Use the NMB ordering macros */
+	/* Pull the answer RR's count from the header.  Use the NMB ordering macros */
 
 	query_count      = RSVAL( p, 4 );
 	answer_count     = RSVAL( p, 6 );
 	auth_count       = RSVAL( p, 8 );
 	additional_count = RSVAL( p, 10 );
 
-	DEBUG(4,("ads_dns_lookup_ns: "
-		"%d records returned in the answer section.\n",
+	DEBUG(4,("ads_dns_lookup_ns: %d records returned in the answer section.\n", 
 		answer_count));
-
+		
 	if (answer_count) {
-		if ((nsarray = TALLOC_ARRAY(ctx, struct dns_rr_ns,
-						answer_count)) == NULL ) {
-			DEBUG(0,("ads_dns_lookup_ns: "
-				"talloc() failure for %d char*'s\n",
+		if ( (nsarray = TALLOC_ARRAY(ctx, struct dns_rr_ns, answer_count)) == NULL ) {
+			DEBUG(0,("ads_dns_lookup_ns: talloc() failure for %d char*'s\n", 
 				answer_count));
 			return NT_STATUS_NO_MEMORY;
 		}
@@ -640,10 +558,8 @@
 	for ( rrnum=0; rrnum<query_count; rrnum++ ) {
 		struct dns_query q;
 
-		if (!ads_dns_parse_query(ctx, buffer, buffer+resp_len,
-					&p, &q)) {
-			DEBUG(1,("ads_dns_lookup_ns: "
-				" Failed to parse query record!\n"));
+		if ( !ads_dns_parse_query( ctx, buffer, buffer+resp_len, &p, &q ) ) {
+			DEBUG(1,("ads_dns_lookup_ns: Failed to parse query record!\n"));
 			return NT_STATUS_UNSUCCESSFUL;
 		}
 	}
@@ -651,12 +567,10 @@
 	/* now we are at the answer section */
 
 	for ( rrnum=0; rrnum<answer_count; rrnum++ ) {
-		if (!ads_dns_parse_rr_ns(ctx, buffer, buffer+resp_len,
-					&p, &nsarray[rrnum])) {
-			DEBUG(1,("ads_dns_lookup_ns: "
-				"Failed to parse answer record!\n"));
+		if ( !ads_dns_parse_rr_ns( ctx, buffer, buffer+resp_len, &p, &nsarray[rrnum] ) ) {
+			DEBUG(1,("ads_dns_lookup_ns: Failed to parse answer record!\n"));
 			return NT_STATUS_UNSUCCESSFUL;
-		}
+		}		
 	}
 	idx = rrnum;
 
@@ -666,10 +580,8 @@
 	for ( rrnum=0; rrnum<auth_count; rrnum++ ) {
 		struct dns_rr rr;
 
-		if ( !ads_dns_parse_rr(ctx, buffer, buffer+resp_len,
-					&p, &rr)) {
-			DEBUG(1,("ads_dns_lookup_ns: "
-				"Failed to parse authority record!\n"));
+		if ( !ads_dns_parse_rr( ctx, buffer, buffer+resp_len, &p, &rr ) ) {
+			DEBUG(1,("ads_dns_lookup_ns: Failed to parse authority record!\n"));
 			return NT_STATUS_UNSUCCESSFUL;
 		}
 	}
@@ -680,48 +592,28 @@
 		struct dns_rr rr;
 		int i;
 
-		if (!ads_dns_parse_rr(ctx, buffer, buffer+resp_len,
-					&p, &rr)) {
-			DEBUG(1,("ads_dns_lookup_ns: Failed "
-				"to parse additional records section!\n"));
+		if ( !ads_dns_parse_rr( ctx, buffer, buffer+resp_len, &p, &rr ) ) {
+			DEBUG(1,("ads_dns_lookup_ns: Failed to parse additional records section!\n"));
 			return NT_STATUS_UNSUCCESSFUL;
 		}
 
-		/* only interested in A records as a shortcut for having to come
+		/* only interested in A records as a shortcut for having to come 
 		   back later and lookup the name */
 
-		if (rr.type != T_A || rr.rdatalen != 4) {
-#if defined(HAVE_IPV6)
-			if (rr.type != T_AAAA || rr.rdatalen != 16)
-#endif
-				continue;
-		}
+		if ( (rr.type != T_A) || (rr.rdatalen != 4) ) 
+			continue;
 
 		for ( i=0; i<idx; i++ ) {
-			if (strcmp(rr.hostname, nsarray[i].hostname) == 0) {
-				if (rr.type == T_A) {
-					struct in_addr ip;
-					memcpy(&ip, rr.rdata, 4);
-					in_addr_to_sockaddr_storage(
-							&nsarray[i].ss,
-							ip);
-				}
-#if defined(HAVE_IPV6)
-				if (rr.type == T_AAAA) {
-					struct in6_addr ip6;
-					memcpy(&ip6, rr.rdata, rr.rdatalen);
-					in6_addr_to_sockaddr_storage(
-							&nsarray[i].ss,
-							ip6);
-				}
-#endif
+			if ( strcmp( rr.hostname, nsarray[i].hostname ) == 0 ) {
+				uint8 *buf = (uint8*)&nsarray[i].ip.s_addr;
+				memcpy( buf, rr.rdata, 4 );
 			}
 		}
 	}
-
+	
 	*nslist = nsarray;
 	*numns = idx;
-
+	
 	return NT_STATUS_OK;
 }
 
@@ -734,8 +626,8 @@
 static char *sitename_key(const char *realm)
 {
 	char *keystr;
-
-	if (asprintf_strupper_m(&keystr, SITENAME_KEY, realm) == -1) {
+	
+	if (asprintf(&keystr, SITENAME_KEY, strupper_static(realm)) == -1) {
 		return NULL;
 	}
 
@@ -748,10 +640,10 @@
  We store indefinately as every new CLDAP query will re-write this.
 ****************************************************************************/
 
-bool sitename_store(const char *realm, const char *sitename)
+BOOL sitename_store(const char *realm, const char *sitename)
 {
 	time_t expire;
-	bool ret = False;
+	BOOL ret = False;
 	char *key;
 
 	if (!gencache_init()) {
@@ -762,7 +654,7 @@
 		DEBUG(0,("sitename_store: no realm\n"));
 		return False;
 	}
-
+	
 	key = sitename_key(realm);
 
 	if (!sitename || (sitename && !*sitename)) {
@@ -773,7 +665,7 @@
 	}
 
 	expire = get_time_t_max(); /* Store indefinately. */
-
+	
 	DEBUG(10,("sitename_store: realm = [%s], sitename = [%s], expire = [%u]\n",
 		realm, sitename, (unsigned int)expire ));
 
@@ -791,16 +683,16 @@
 {
 	char *sitename = NULL;
 	time_t timeout;
-	bool ret = False;
+	BOOL ret = False;
 	const char *query_realm;
 	char *key;
-
+	
 	if (!gencache_init()) {
 		return False;
 	}
 
 	if (!realm || (strlen(realm) == 0)) {
-		query_realm = lp_realm();
+		query_realm = lp_realm(); 
 	} else {
 		query_realm = realm;
 	}
@@ -823,9 +715,9 @@
  Did the sitename change ?
 ****************************************************************************/
 
-bool stored_sitename_changed(const char *realm, const char *sitename)
+BOOL stored_sitename_changed(const char *realm, const char *sitename)
 {
-	bool ret = False;
+	BOOL ret = False;
 
 	char *new_sitename;
 
@@ -850,23 +742,21 @@
  Query with optional sitename.
 ********************************************************************/
 
-static NTSTATUS ads_dns_query_internal(TALLOC_CTX *ctx,
-				       const char *servicename,
-				       const char *dc_pdc_gc_domains,
-				       const char *realm,
-				       const char *sitename,
-				       struct dns_rr_srv **dclist,
-				       int *numdcs )
+NTSTATUS ads_dns_query_internal(TALLOC_CTX *ctx,
+				const char *servicename,
+				const char *realm,
+				const char *sitename,
+				struct dns_rr_srv **dclist,
+				int *numdcs )
 {
 	char *name;
 	if (sitename) {
-		name = talloc_asprintf(ctx, "%s._tcp.%s._sites.%s._msdcs.%s",
-				       servicename, sitename,
-				       dc_pdc_gc_domains, realm);
-  	} else {
-		name = talloc_asprintf(ctx, "%s._tcp.%s._msdcs.%s",
-				servicename, dc_pdc_gc_domains, realm);
-  	}
+		name = talloc_asprintf(ctx, "%s._tcp.%s._sites.dc._msdcs.%s",
+				servicename, sitename, realm );
+	} else {
+		name = talloc_asprintf(ctx, "%s._tcp.dc._msdcs.%s",
+				servicename, realm );
+	}
 	if (!name) {
 		return NT_STATUS_NO_MEMORY;
 	}
@@ -878,14 +768,14 @@
 ********************************************************************/
 
 NTSTATUS ads_dns_query_dcs(TALLOC_CTX *ctx,
-			   const char *realm,
-			   const char *sitename,
-			   struct dns_rr_srv **dclist,
-			   int *numdcs )
+			const char *realm,
+			const char *sitename,
+			struct dns_rr_srv **dclist,
+			int *numdcs )
 {
 	NTSTATUS status;
 
-	status = ads_dns_query_internal(ctx, "_ldap", "dc", realm, sitename,
+	status = ads_dns_query_internal(ctx, "_ldap", realm, sitename,
 					dclist, numdcs);
 
 	if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT) ||
@@ -893,119 +783,40 @@
 		return status;
 	}
 
-	if (sitename &&
-	    ((!NT_STATUS_IS_OK(status)) ||
-	     (NT_STATUS_IS_OK(status) && (numdcs == 0)))) {
+	if (sitename && !NT_STATUS_IS_OK(status)) {
 		/* Sitename DNS query may have failed. Try without. */
-		status = ads_dns_query_internal(ctx, "_ldap", "dc", realm,
-						NULL, dclist, numdcs);
+		status = ads_dns_query_internal(ctx, "_ldap", realm, NULL,
+						dclist, numdcs);
 	}
 	return status;
 }
 
 /********************************************************************
- Query for AD GC's.
-********************************************************************/
-
-NTSTATUS ads_dns_query_gcs(TALLOC_CTX *ctx,
-			   const char *realm,
-			   const char *sitename,
-			   struct dns_rr_srv **dclist,
-			   int *numdcs )
-{
-	NTSTATUS status;
-
-	status = ads_dns_query_internal(ctx, "_ldap", "gc", realm, sitename,
-					dclist, numdcs);
-
-	if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT) ||
-	    NT_STATUS_EQUAL(status, NT_STATUS_CONNECTION_REFUSED)) {
-		return status;
-	}
-
-	if (sitename &&
-	    ((!NT_STATUS_IS_OK(status)) ||
-	     (NT_STATUS_IS_OK(status) && (numdcs == 0)))) {
-		/* Sitename DNS query may have failed. Try without. */
-		status = ads_dns_query_internal(ctx, "_ldap", "gc", realm,
-						NULL, dclist, numdcs);
-	}
-	return status;
-}
-
-/********************************************************************
  Query for AD KDC's.
  Even if our underlying kerberos libraries are UDP only, this
  is pretty safe as it's unlikely that a KDC supports TCP and not UDP.
 ********************************************************************/
 
 NTSTATUS ads_dns_query_kdcs(TALLOC_CTX *ctx,
-			    const char *dns_forest_name,
-			    const char *sitename,
-			    struct dns_rr_srv **dclist,
-			    int *numdcs )
+			const char *realm,
+			const char *sitename,
+			struct dns_rr_srv **dclist,
+			int *numdcs )
 {
 	NTSTATUS status;
 
-	status = ads_dns_query_internal(ctx, "_kerberos", "dc",
-					dns_forest_name, sitename, dclist,
-					numdcs);
+	status = ads_dns_query_internal(ctx, "_kerberos", realm, sitename,
+					dclist, numdcs);
 
 	if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT) ||
 	    NT_STATUS_EQUAL(status, NT_STATUS_CONNECTION_REFUSED)) {
 		return status;
 	}
 
-	if (sitename &&
-	    ((!NT_STATUS_IS_OK(status)) ||
-	     (NT_STATUS_IS_OK(status) && (numdcs == 0)))) {
+	if (sitename && !NT_STATUS_IS_OK(status)) {
 		/* Sitename DNS query may have failed. Try without. */
-		status = ads_dns_query_internal(ctx, "_kerberos", "dc",
-						dns_forest_name, NULL,
+		status = ads_dns_query_internal(ctx, "_kerberos", realm, NULL,
 						dclist, numdcs);
 	}
 	return status;
 }
-
-/********************************************************************
- Query for AD PDC. Sitename is obsolete here.
-********************************************************************/
-
-NTSTATUS ads_dns_query_pdc(TALLOC_CTX *ctx,
-			   const char *dns_domain_name,
-			   struct dns_rr_srv **dclist,
-			   int *numdcs )
-{
-	return ads_dns_query_internal(ctx, "_ldap", "pdc", dns_domain_name,
-				      NULL, dclist, numdcs);
-}
-
-/********************************************************************
- Query for AD DC by guid. Sitename is obsolete here.
-********************************************************************/
-
-NTSTATUS ads_dns_query_dcs_guid(TALLOC_CTX *ctx,
-				const char *dns_forest_name,
-				const struct GUID *domain_guid,
-				struct dns_rr_srv **dclist,
-				int *numdcs )
-{
-	/*_ldap._tcp.DomainGuid.domains._msdcs.DnsForestName */
-
-	const char *domains;
-	const char *guid_string;
-
-	guid_string = GUID_string(ctx, domain_guid);
-	if (!guid_string) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	/* little hack */
-	domains = talloc_asprintf(ctx, "%s.domains", guid_string);
-	if (!domains) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	return ads_dns_query_internal(ctx, "_ldap", domains, dns_forest_name,
-				      NULL, dclist, numdcs);
-}

Modified: branches/samba/upstream/source/libads/kerberos.c
===================================================================
--- branches/samba/upstream/source/libads/kerberos.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libads/kerberos.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -18,15 +18,14 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
 #ifdef HAVE_KRB5
 
-#define DEFAULT_KRB5_PORT 88
-
 #define LIBADS_CCACHE_NAME "MEMORY:libads"
 
 /*
@@ -56,127 +55,6 @@
 	return 0;
 }
 
-static bool smb_krb5_err_io_nstatus(TALLOC_CTX *mem_ctx, 
-				    DATA_BLOB *edata_blob, 
-				    KRB5_EDATA_NTSTATUS *edata)
-{
-	bool ret = False;
-	prs_struct ps;
-
-	if (!mem_ctx || !edata_blob || !edata) 
-		return False;
-
-	if (!prs_init(&ps, edata_blob->length, mem_ctx, UNMARSHALL))
-		return False;
-
-	if (!prs_copy_data_in(&ps, (char *)edata_blob->data, edata_blob->length))
-		goto out;
-
-	prs_set_offset(&ps, 0);
-
-	if (!prs_ntstatus("ntstatus", &ps, 1, &edata->ntstatus))
-		goto out;
-
-	if (!prs_uint32("unknown1", &ps, 1, &edata->unknown1))
-		goto out;
-
-	if (!prs_uint32("unknown2", &ps, 1, &edata->unknown2)) /* only seen 00000001 here */
-		goto out;
-
-	ret = True;
- out:
-	prs_mem_free(&ps);
-
-	return ret;
-}
-
- static bool smb_krb5_get_ntstatus_from_krb5_error(krb5_error *error,
-						   NTSTATUS *nt_status)
-{
-	DATA_BLOB edata;
-	DATA_BLOB unwrapped_edata;
-	TALLOC_CTX *mem_ctx;
-	KRB5_EDATA_NTSTATUS parsed_edata;
-
-#ifdef HAVE_E_DATA_POINTER_IN_KRB5_ERROR
-	edata = data_blob(error->e_data->data, error->e_data->length);
-#else
-	edata = data_blob(error->e_data.data, error->e_data.length);
-#endif /* HAVE_E_DATA_POINTER_IN_KRB5_ERROR */
-
-#ifdef DEVELOPER
-	dump_data(10, edata.data, edata.length);
-#endif /* DEVELOPER */
-
-	mem_ctx = talloc_init("smb_krb5_get_ntstatus_from_krb5_error");
-	if (mem_ctx == NULL) {
-		data_blob_free(&edata);
-		return False;
-	}
-
-	if (!unwrap_edata_ntstatus(mem_ctx, &edata, &unwrapped_edata)) {
-		data_blob_free(&edata);
-		TALLOC_FREE(mem_ctx);
-		return False;
-	}
-
-	data_blob_free(&edata);
-
-	if (!smb_krb5_err_io_nstatus(mem_ctx, &unwrapped_edata, &parsed_edata)) {
-		data_blob_free(&unwrapped_edata);
-		TALLOC_FREE(mem_ctx);
-		return False;
-	}
-
-	data_blob_free(&unwrapped_edata);
-
-	if (nt_status) {
-		*nt_status = parsed_edata.ntstatus;
-	}
-
-	TALLOC_FREE(mem_ctx);
-
-	return True;
-}
-
- static bool smb_krb5_get_ntstatus_from_krb5_error_init_creds_opt(krb5_context ctx, 
- 								  krb5_get_init_creds_opt *opt, 
-								  NTSTATUS *nt_status)
-{
-	bool ret = False;
-	krb5_error *error = NULL;
-
-#ifdef HAVE_KRB5_GET_INIT_CREDS_OPT_GET_ERROR
-	ret = krb5_get_init_creds_opt_get_error(ctx, opt, &error);
-	if (ret) {
-		DEBUG(1,("krb5_get_init_creds_opt_get_error gave: %s\n", 
-			error_message(ret)));
-		return False;
-	}
-#endif /* HAVE_KRB5_GET_INIT_CREDS_OPT_GET_ERROR */
-
-	if (!error) {
-		DEBUG(1,("no krb5_error\n"));
-		return False;
-	}
-
-#ifdef HAVE_E_DATA_POINTER_IN_KRB5_ERROR
-	if (!error->e_data) {
-#else
-	if (error->e_data.data == NULL) {
-#endif /* HAVE_E_DATA_POINTER_IN_KRB5_ERROR */
-		DEBUG(1,("no edata in krb5_error\n")); 
-		krb5_free_error(ctx, error);
-		return False;
-	}
-
-	ret = smb_krb5_get_ntstatus_from_krb5_error(error, nt_status);
-
-	krb5_free_error(ctx, error);
-
-	return ret;
-}
-
 /*
   simulate a kinit, putting the tgt in the given cache location. If cache_name == NULL
   place in default cache location.
@@ -188,44 +66,46 @@
 				time_t *expire_time,
 				time_t *renew_till_time,
 				const char *cache_name,
-				bool request_pac,
-				bool add_netbios_addr,
-				time_t renewable_time,
-				NTSTATUS *ntstatus)
+				BOOL request_pac,
+				BOOL add_netbios_addr,
+				time_t renewable_time)
 {
 	krb5_context ctx = NULL;
 	krb5_error_code code = 0;
 	krb5_ccache cc = NULL;
-	krb5_principal me = NULL;
+	krb5_principal me;
 	krb5_creds my_creds;
 	krb5_get_init_creds_opt *opt = NULL;
 	smb_krb5_addresses *addr = NULL;
 
-	ZERO_STRUCT(my_creds);
-
 	initialize_krb5_error_table();
 	if ((code = krb5_init_context(&ctx)))
-		goto out;
+		return code;
 
 	if (time_offset != 0) {
 		krb5_set_real_time(ctx, time(NULL) + time_offset, 0);
 	}
 
-	DEBUG(10,("kerberos_kinit_password: as %s using [%s] as ccache and config [%s]\n",
-			principal,
+	DEBUG(10,("kerberos_kinit_password: using [%s] as ccache and config [%s]\n",
 			cache_name ? cache_name: krb5_cc_default_name(ctx),
 			getenv("KRB5_CONFIG")));
 
 	if ((code = krb5_cc_resolve(ctx, cache_name ? cache_name : krb5_cc_default_name(ctx), &cc))) {
-		goto out;
+		krb5_free_context(ctx);
+		return code;
 	}
 	
 	if ((code = smb_krb5_parse_name(ctx, principal, &me))) {
-		goto out;
+		krb5_cc_close(ctx, cc);
+		krb5_free_context(ctx);	
+		return code;
 	}
 
-	if ((code = smb_krb5_get_init_creds_opt_alloc(ctx, &opt))) {
-		goto out;
+	code = smb_krb5_get_init_creds_opt_alloc(ctx, &opt);
+	if (code) {
+		krb5_cc_close(ctx, cc);
+		krb5_free_context(ctx);	
+		return code;
 	}
 
 	krb5_get_init_creds_opt_set_renew_life(opt, renewable_time);
@@ -237,30 +117,56 @@
 
 #ifdef HAVE_KRB5_GET_INIT_CREDS_OPT_SET_PAC_REQUEST
 	if (request_pac) {
-		if ((code = krb5_get_init_creds_opt_set_pac_request(ctx, opt, (krb5_boolean)request_pac))) {
-			goto out;
+		code = krb5_get_init_creds_opt_set_pac_request(ctx, opt, (krb5_boolean)request_pac);
+		if (code) {
+			krb5_cc_close(ctx, cc);
+			krb5_free_principal(ctx, me);
+			krb5_free_context(ctx);
+			return code;
 		}
 	}
 #endif
 	if (add_netbios_addr) {
-		if ((code = smb_krb5_gen_netbios_krb5_address(&addr))) {
-			goto out;
+		code = smb_krb5_gen_netbios_krb5_address(&addr);
+		if (code) {
+			krb5_cc_close(ctx, cc);
+			krb5_free_principal(ctx, me);
+			krb5_free_context(ctx);		
+			return code;	
 		}
 		krb5_get_init_creds_opt_set_address_list(opt, addr->addrs);
 	}
 
 	if ((code = krb5_get_init_creds_password(ctx, &my_creds, me, CONST_DISCARD(char *,password), 
 						 kerb_prompter, CONST_DISCARD(char *,password),
-						 0, NULL, opt))) {
-		goto out;
+						 0, NULL, opt)))
+	{
+		smb_krb5_get_init_creds_opt_free(ctx, opt);
+		smb_krb5_free_addresses(ctx, addr);
+		krb5_cc_close(ctx, cc);
+		krb5_free_principal(ctx, me);
+		krb5_free_context(ctx);
+		return code;
 	}
 
+	smb_krb5_get_init_creds_opt_free(ctx, opt);
+
 	if ((code = krb5_cc_initialize(ctx, cc, me))) {
-		goto out;
+		smb_krb5_free_addresses(ctx, addr);
+		krb5_free_cred_contents(ctx, &my_creds);
+		krb5_cc_close(ctx, cc);
+		krb5_free_principal(ctx, me);
+		krb5_free_context(ctx);		
+		return code;
 	}
 	
 	if ((code = krb5_cc_store_cred(ctx, cc, &my_creds))) {
-		goto out;
+		krb5_cc_close(ctx, cc);
+		smb_krb5_free_addresses(ctx, addr);
+		krb5_free_cred_contents(ctx, &my_creds);
+		krb5_free_principal(ctx, me);
+		krb5_free_context(ctx);		
+		return code;
 	}
 
 	if (expire_time) {
@@ -270,47 +176,14 @@
 	if (renew_till_time) {
 		*renew_till_time = (time_t) my_creds.times.renew_till;
 	}
- out:
-	if (ntstatus) {
 
-		NTSTATUS status;
-
-		/* fast path */
-		if (code == 0) {
-			*ntstatus = NT_STATUS_OK;
-			goto cleanup;
-		}
-
-		/* try to get ntstatus code out of krb5_error when we have it
-		 * inside the krb5_get_init_creds_opt - gd */
-
-		if (opt && smb_krb5_get_ntstatus_from_krb5_error_init_creds_opt(ctx, opt, &status)) {
-			*ntstatus = status;
-			goto cleanup;
-		}
-
-		/* fall back to self-made-mapping */
-		*ntstatus = krb5_to_nt_status(code);
-	}
-
- cleanup:
+	krb5_cc_close(ctx, cc);
+	smb_krb5_free_addresses(ctx, addr);
 	krb5_free_cred_contents(ctx, &my_creds);
-	if (me) {
-		krb5_free_principal(ctx, me);
-	}
-	if (addr) {
-		smb_krb5_free_addresses(ctx, addr);
-	}
- 	if (opt) {
-		smb_krb5_get_init_creds_opt_free(ctx, opt);
-	}
-	if (cc) {
-		krb5_cc_close(ctx, cc);
-	}
-	if (ctx) {
-		krb5_free_context(ctx);
-	}
-	return code;
+	krb5_free_principal(ctx, me);
+	krb5_free_context(ctx);		
+	
+	return 0;
 }
 
 
@@ -348,8 +221,7 @@
 	}
 	
 	ret = kerberos_kinit_password_ext(s, ads->auth.password, ads->auth.time_offset,
-			&ads->auth.tgt_expire, NULL, NULL, False, False, ads->auth.renewable, 
-			NULL);
+			&ads->auth.tgt_expire, NULL, NULL, False, False, ads->auth.renewable);
 
 	if (ret) {
 		DEBUG(0,("kerberos_kinit_password %s failed: %s\n", 
@@ -407,8 +279,8 @@
 	char *key = NULL;
 	char *ret = NULL;
 
-	if (asprintf(&key, "%s/%s/enctype=%d",
-		     SECRETS_SALTING_PRINCIPAL, service, enctype) == -1) {
+	asprintf(&key, "%s/%s/enctype=%d", SECRETS_SALTING_PRINCIPAL, service, enctype);
+	if (!key) {
 		return NULL;
 	}
 	ret = (char *)secrets_fetch(key, NULL);
@@ -438,10 +310,7 @@
 {
 	char *key;
 
-	if (asprintf(&key, "%s/DES/%s", SECRETS_SALTING_PRINCIPAL,
-		     lp_realm()) == -1) {
-		return NULL;
-	}
+	asprintf(&key, "%s/DES/%s", SECRETS_SALTING_PRINCIPAL, lp_realm());
 
 	return key;
 }
@@ -449,10 +318,10 @@
 /************************************************************************
 ************************************************************************/
 
-bool kerberos_secrets_store_des_salt( const char* salt )
+BOOL kerberos_secrets_store_des_salt( const char* salt )
 {
 	char* key;
-	bool ret;
+	BOOL ret;
 
 	if ( (key = des_salt_key()) == NULL ) {
 		DEBUG(0,("kerberos_secrets_store_des_salt: failed to generate key!\n"));
@@ -596,31 +465,25 @@
  Setting principal to NULL deletes this entry.
  ************************************************************************/
 
-bool kerberos_secrets_store_salting_principal(const char *service,
+BOOL kerberos_secrets_store_salting_principal(const char *service,
 					      int enctype,
 					      const char *principal)
 {
 	char *key = NULL;
-	bool ret = False;
+	BOOL ret = False;
 	krb5_context context = NULL;
 	krb5_principal princ = NULL;
 	char *princ_s = NULL;
 	char *unparsed_name = NULL;
-	krb5_error_code code;
 
-	if (((code = krb5_init_context(&context)) != 0) || (context == NULL)) {
-		DEBUG(5, ("kerberos_secrets_store_salting_pricipal: kdb5_init_context failed: %s\n",
-			  error_message(code)));
+	krb5_init_context(&context);
+	if (!context) {
 		return False;
 	}
 	if (strchr_m(service, '@')) {
-		if (asprintf(&princ_s, "%s", service) == -1) {
-			goto out;
-		}
+		asprintf(&princ_s, "%s", service);
 	} else {
-		if (asprintf(&princ_s, "%s@%s", service, lp_realm()) == -1) {
-			goto out;
-		}
+		asprintf(&princ_s, "%s@%s", service, lp_realm());
 	}
 
 	if (smb_krb5_parse_name(context, princ_s, &princ) != 0) {
@@ -631,9 +494,8 @@
 		goto out;
 	}
 
-	if (asprintf(&key, "%s/%s/enctype=%d",
-		     SECRETS_SALTING_PRINCIPAL, unparsed_name, enctype)
-	    == -1) {
+	asprintf(&key, "%s/%s/enctype=%d", SECRETS_SALTING_PRINCIPAL, unparsed_name, enctype);
+	if (!key)  {
 		goto out;
 	}
 
@@ -649,10 +511,6 @@
 	SAFE_FREE(princ_s);
 	SAFE_FREE(unparsed_name);
 
-	if (princ) {
-		krb5_free_principal(context, princ);
-	}
-
 	if (context) {
 		krb5_free_context(context);
 	}
@@ -677,77 +535,23 @@
 					   cache_name,
 					   False,
 					   False,
-					   0,
-					   NULL);
+					   0);
 }
 
 /************************************************************************
-************************************************************************/
-
-static char *print_kdc_line(char *mem_ctx,
-			const char *prev_line,
-			const struct sockaddr_storage *pss)
-{
-	char *kdc_str = NULL;
-
-	if (pss->ss_family == AF_INET) {
-		kdc_str = talloc_asprintf(mem_ctx, "%s\tkdc = %s\n",
-					prev_line,
-                                        print_canonical_sockaddr(mem_ctx, pss));
-	} else {
-		char addr[INET6_ADDRSTRLEN];
-		uint16_t port = get_sockaddr_port(pss);
-
-		if (port != 0 && port != DEFAULT_KRB5_PORT) {
-			/* Currently for IPv6 we can't specify a non-default
-			   krb5 port with an address, as this requires a ':'.
-			   Resolve to a name. */
-			char hostname[MAX_DNS_NAME_LENGTH];
-			int ret = sys_getnameinfo((const struct sockaddr *)pss,
-					sizeof(*pss),
-					hostname, sizeof(hostname),
-					NULL, 0,
-					NI_NAMEREQD);
-			if (ret) {
-				DEBUG(0,("print_kdc_line: can't resolve name "
-					"for kdc with non-default port %s. "
-					"Error %s\n.",
-					print_canonical_sockaddr(mem_ctx, pss),
-					gai_strerror(ret)));
-			}
-			/* Success, use host:port */
-			kdc_str = talloc_asprintf(mem_ctx,
-					"%s\tkdc = %s:%u\n",
-					prev_line,
-					hostname,
-					(unsigned int)port);
-		} else {
-			kdc_str = talloc_asprintf(mem_ctx, "%s\tkdc = %s\n",
-					prev_line,
-					print_sockaddr(addr,
-						sizeof(addr),
-						pss));
-		}
-	}
-	return kdc_str;
-}
-
-/************************************************************************
  Create a string list of available kdc's, possibly searching by sitename.
  Does DNS queries.
 ************************************************************************/
 
-static char *get_kdc_ip_string(char *mem_ctx,
-		const char *realm,
-		const char *sitename,
-		struct sockaddr_storage *pss)
+static char *get_kdc_ip_string(char *mem_ctx, const char *realm, const char *sitename, struct in_addr primary_ip)
 {
 	int i;
 	struct ip_service *ip_srv_site = NULL;
-	struct ip_service *ip_srv_nonsite = NULL;
+	struct ip_service *ip_srv_nonsite;
 	int count_site = 0;
 	int count_nonsite;
-	char *kdc_str = print_kdc_line(mem_ctx, "", pss);
+	char *kdc_str = talloc_asprintf(mem_ctx, "\tkdc = %s\n",
+					inet_ntoa(primary_ip));
 
 	if (kdc_str == NULL) {
 		return NULL;
@@ -760,14 +564,12 @@
 		get_kdc_list(realm, sitename, &ip_srv_site, &count_site);
 
 		for (i = 0; i < count_site; i++) {
-			if (addr_equal(&ip_srv_site[i].ss, pss)) {
+			if (ip_equal(ip_srv_site[i].ip, primary_ip)) {
 				continue;
 			}
-			/* Append to the string - inefficient
-			 * but not done often. */
-			kdc_str = print_kdc_line(mem_ctx,
-						kdc_str,
-						&ip_srv_site[i].ss);
+			/* Append to the string - inefficient but not done often. */
+			kdc_str = talloc_asprintf(mem_ctx, "%s\tkdc = %s\n",
+				kdc_str, inet_ntoa(ip_srv_site[i].ip));
 			if (!kdc_str) {
 				SAFE_FREE(ip_srv_site);
 				return NULL;
@@ -782,14 +584,13 @@
 	for (i = 0; i < count_nonsite; i++) {
 		int j;
 
-		if (addr_equal(&ip_srv_nonsite[i].ss, pss)) {
+		if (ip_equal(ip_srv_nonsite[i].ip, primary_ip)) {
 			continue;
 		}
 
 		/* Ensure this isn't an IP already seen (YUK! this is n*n....) */
 		for (j = 0; j < count_site; j++) {
-			if (addr_equal(&ip_srv_nonsite[i].ss,
-						&ip_srv_site[j].ss)) {
+			if (ip_equal(ip_srv_nonsite[i].ip, ip_srv_site[j].ip)) {
 				break;
 			}
 			/* As the lists are sorted we can break early if nonsite > site. */
@@ -802,9 +603,8 @@
 		}
 
 		/* Append to the string - inefficient but not done often. */
-		kdc_str = print_kdc_line(mem_ctx,
-				kdc_str,
-				&ip_srv_nonsite[i].ss);
+		kdc_str = talloc_asprintf(mem_ctx, "%s\tkdc = %s\n",
+			kdc_str, inet_ntoa(ip_srv_nonsite[i].ip));
 		if (!kdc_str) {
 			SAFE_FREE(ip_srv_site);
 			SAFE_FREE(ip_srv_nonsite);
@@ -829,10 +629,8 @@
  run as root or will fail (which is a good thing :-).
 ************************************************************************/
 
-bool create_local_private_krb5_conf_for_domain(const char *realm,
-						const char *domain,
-						const char *sitename,
-						struct sockaddr_storage *pss)
+BOOL create_local_private_krb5_conf_for_domain(const char *realm, const char *domain,
+					const char *sitename, struct in_addr ip)
 {
 	char *dname = talloc_asprintf(NULL, "%s/smb_krb5", lp_lockdir());
 	char *tmpname = NULL;
@@ -873,7 +671,7 @@
 	realm_upper = talloc_strdup(fname, realm);
 	strupper_m(realm_upper);
 
-	kdc_ip_string = get_kdc_ip_string(dname, realm, sitename, pss);
+	kdc_ip_string = get_kdc_ip_string(dname, realm, sitename, ip);
 	if (!kdc_ip_string) {
 		TALLOC_FREE(dname);
 		return False;
@@ -900,8 +698,6 @@
 		DEBUG(0,("create_local_private_krb5_conf_for_domain: smb_mkstemp failed,"
 			" for file %s. Errno %s\n",
 			tmpname, strerror(errno) ));
-		TALLOC_FREE(dname);
-		return false;
 	}
 
 	if (fchmod(fd, 0644)==-1) {
@@ -942,8 +738,8 @@
 	}
 
 	DEBUG(5,("create_local_private_krb5_conf_for_domain: wrote "
-		"file %s with realm %s KDC list = %s\n",
-		fname, realm_upper, kdc_ip_string));
+		"file %s with realm %s KDC = %s\n",
+		fname, realm_upper, inet_ntoa(ip) ));
 
 	/* Set the environment variable to this file. */
 	setenv("KRB5_CONFIG", fname, 1);
@@ -954,15 +750,13 @@
 	/* Insanity, sheer insanity..... */
 
 	if (strequal(realm, lp_realm())) {
-		char linkpath[PATH_MAX+1];
+		pstring linkpath;
 		int lret;
 
 		lret = readlink(SYSTEM_KRB5_CONF_PATH, linkpath, sizeof(linkpath)-1);
-		if (lret != -1) {
-			linkpath[lret] = '\0';
-		}
+		linkpath[sizeof(pstring)-1] = '\0';
 
-		if (lret != -1 || strcmp(linkpath, fname) == 0) {
+		if (lret == 0 || strcmp(linkpath, fname) == 0) {
 			/* Symlink already exists. */
 			TALLOC_FREE(dname);
 			return True;
@@ -970,7 +764,6 @@
 
 		/* Try and replace with a symlink. */
 		if (symlink(fname, SYSTEM_KRB5_CONF_PATH) == -1) {
-			const char *newpath = SYSTEM_KRB5_CONF_PATH ## ".saved";
 			if (errno != EEXIST) {
 				DEBUG(0,("create_local_private_krb5_conf_for_domain: symlink "
 					"of %s to %s failed. Errno %s\n",
@@ -979,17 +772,20 @@
 				return True; /* Not a fatal error. */
 			}
 
+			pstrcpy(linkpath, SYSTEM_KRB5_CONF_PATH);
+			pstrcat(linkpath, ".saved");
+
 			/* Yes, this is a race conditon... too bad. */
-			if (rename(SYSTEM_KRB5_CONF_PATH, newpath) == -1) {
+			if (rename(SYSTEM_KRB5_CONF_PATH, linkpath) == -1) {
 				DEBUG(0,("create_local_private_krb5_conf_for_domain: rename "
 					"of %s to %s failed. Errno %s\n",
-					SYSTEM_KRB5_CONF_PATH, newpath,
+					SYSTEM_KRB5_CONF_PATH, linkpath,
 					strerror(errno) ));
 				TALLOC_FREE(dname);
 				return True; /* Not a fatal error. */
 			}
 
-			if (symlink(fname, SYSTEM_KRB5_CONF_PATH) == -1) {
+			if (symlink(fname, "/etc/krb5.conf") == -1) {
 				DEBUG(0,("create_local_private_krb5_conf_for_domain: "
 					"forced symlink of %s to /etc/krb5.conf failed. Errno %s\n",
 					fname, strerror(errno) ));

Modified: branches/samba/upstream/source/libads/kerberos_keytab.c
===================================================================
--- branches/samba/upstream/source/libads/kerberos_keytab.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libads/kerberos_keytab.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -13,7 +13,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -22,13 +22,20 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
 #ifdef HAVE_KRB5
 
+/* This MAX_NAME_LEN is a constant defined in krb5.h */
+#ifndef MAX_KEYTAB_NAME_LEN
+#define MAX_KEYTAB_NAME_LEN 1100
+#endif
+
+
 /**********************************************************************
 **********************************************************************/
 
@@ -57,7 +64,7 @@
 	if (ret != KRB5_KT_END && ret != ENOENT ) {
 		DEBUG(3,("smb_krb5_kt_add_entry: Will try to delete old keytab entries\n"));
 		while(!krb5_kt_next_entry(context, keytab, &kt_entry, &cursor)) {
-			bool compare_name_ok = False;
+			BOOL compare_name_ok = False;
 
 			ret = smb_krb5_unparse_name(context, kt_entry.principal, &ktprinc);
 			if (ret) {
@@ -224,6 +231,7 @@
 	char *princ_s = NULL, *short_princ_s = NULL;
 	char *password_s = NULL;
 	char *my_fqdn;
+	char keytab_name[MAX_KEYTAB_NAME_LEN];          
 	TALLOC_CTX *ctx = NULL;
 	char *machine_name;
 
@@ -237,12 +245,24 @@
 		DEBUG(1,("ads_keytab_add_entry: could not krb5_init_context: %s\n",error_message(ret)));
 		return -1;
 	}
-
-	ret = smb_krb5_open_keytab(context, NULL, True, &keytab);
+	
+#ifdef HAVE_WRFILE_KEYTAB       /* MIT */
+	keytab_name[0] = 'W';
+	keytab_name[1] = 'R';
+	ret = krb5_kt_default_name(context, (char *) &keytab_name[2], MAX_KEYTAB_NAME_LEN - 4);
+#else                           /* Heimdal */
+	ret = krb5_kt_default_name(context, (char *) &keytab_name[0], MAX_KEYTAB_NAME_LEN - 2);
+#endif
 	if (ret) {
-		DEBUG(1,("ads_keytab_add_entry: smb_krb5_open_keytab failed (%s)\n", error_message(ret)));
+		DEBUG(1,("ads_keytab_add_entry: krb5_kt_default_name failed (%s)\n", error_message(ret)));
 		goto out;
 	}
+	DEBUG(2,("ads_keytab_add_entry: Using default system keytab: %s\n", (char *) &keytab_name));
+	ret = krb5_kt_resolve(context, (char *) &keytab_name, &keytab);
+	if (ret) {
+		DEBUG(1,("ads_keytab_add_entry: krb5_kt_resolve failed (%s)\n", error_message(ret)));
+		goto out;
+	}
 
 	/* retrieve the password */
 	if (!secrets_init()) {
@@ -363,6 +383,7 @@
 	krb5_kt_cursor cursor;
 	krb5_keytab_entry kt_entry;
 	krb5_kvno kvno;
+	char keytab_name[MAX_KEYTAB_NAME_LEN];
 
 	ZERO_STRUCT(kt_entry);
 	ZERO_STRUCT(cursor);
@@ -373,12 +394,23 @@
 		DEBUG(1,("ads_keytab_flush: could not krb5_init_context: %s\n",error_message(ret)));
 		return ret;
 	}
-
-	ret = smb_krb5_open_keytab(context, NULL, True, &keytab);
+#ifdef HAVE_WRFILE_KEYTAB
+	keytab_name[0] = 'W';
+	keytab_name[1] = 'R';
+	ret = krb5_kt_default_name(context, (char *) &keytab_name[2], MAX_KEYTAB_NAME_LEN - 4);
+#else
+	ret = krb5_kt_default_name(context, (char *) &keytab_name[0], MAX_KEYTAB_NAME_LEN - 2);
+#endif
 	if (ret) {
-		DEBUG(1,("ads_keytab_flush: smb_krb5_open_keytab failed (%s)\n", error_message(ret)));
+		DEBUG(1,("ads_keytab_flush: krb5_kt_default failed (%s)\n", error_message(ret)));
 		goto out;
 	}
+	DEBUG(3,("ads_keytab_flush: Using default keytab: %s\n", (char *) &keytab_name));
+	ret = krb5_kt_resolve(context, (char *) &keytab_name, &keytab);
+	if (ret) {
+		DEBUG(1,("ads_keytab_flush: krb5_kt_resolve failed (%s)\n", error_message(ret)));
+		goto out;
+	}
 
 	kvno = (krb5_kvno) ads_get_kvno(ads, global_myname());
 	if (kvno == -1) {       /* -1 indicates a failure */
@@ -545,10 +577,9 @@
 		DEBUG(1,("ads_keytab_create_default: could not krb5_init_context: %s\n",error_message(ret)));
 		return ret;
 	}
-
-	ret = smb_krb5_open_keytab(context, NULL, True, &keytab);
+	ret = krb5_kt_default(context, &keytab);
 	if (ret) {
-		DEBUG(1,("ads_keytab_create_default: smb_krb5_open_keytab failed (%s)\n", error_message(ret)));
+		DEBUG(1,("ads_keytab_create_default: krb5_kt_default failed (%s)\n",error_message(ret)));
 		goto done;
 	}
 
@@ -660,104 +691,4 @@
 	}
 	return ret;
 }
-
-/**********************************************************************
- List system keytab.
-***********************************************************************/
-
-int ads_keytab_list(const char *keytab_name)
-{
-	krb5_error_code ret = 0;
-	krb5_context context = NULL;
-	krb5_keytab keytab = NULL;
-	krb5_kt_cursor cursor;
-	krb5_keytab_entry kt_entry;
-
-	ZERO_STRUCT(kt_entry);
-	ZERO_STRUCT(cursor);
-
-	initialize_krb5_error_table();
-	ret = krb5_init_context(&context);
-	if (ret) {
-		DEBUG(1,("ads_keytab_list: could not krb5_init_context: %s\n",error_message(ret)));
-		return ret;
-	}
-
-	ret = smb_krb5_open_keytab(context, keytab_name, False, &keytab);
-	if (ret) {
-		DEBUG(1,("ads_keytab_list: smb_krb5_open_keytab failed (%s)\n", error_message(ret)));
-		goto out;
-	}
-
-	ret = krb5_kt_start_seq_get(context, keytab, &cursor);
-	if (ret) {
-		goto out;
-	}
-
-	printf("Vno  Type        Principal\n");
-
-	while (krb5_kt_next_entry(context, keytab, &kt_entry, &cursor) == 0) {
-	
-		char *princ_s = NULL;
-		char *etype_s = NULL;
-		krb5_enctype enctype = 0;
-
-		ret = smb_krb5_unparse_name(context, kt_entry.principal, &princ_s);
-		if (ret) {
-			goto out;
-		}
-
-		enctype = smb_get_enctype_from_kt_entry(&kt_entry);
-
-		ret = smb_krb5_enctype_to_string(context, enctype, &etype_s);
-		if (ret) {
-			SAFE_FREE(princ_s);
-			goto out;
-		}
-
-		printf("%3d  %s\t\t %s\n", kt_entry.vno, etype_s, princ_s);
-
-		SAFE_FREE(princ_s);
-		SAFE_FREE(etype_s);
-
-		ret = smb_krb5_kt_free_entry(context, &kt_entry);
-		if (ret) {
-			goto out;
-		}
-	}
-
-	ret = krb5_kt_end_seq_get(context, keytab, &cursor);
-	if (ret) {
-		goto out;
-	}
-
-	/* Ensure we don't double free. */
-	ZERO_STRUCT(kt_entry);
-	ZERO_STRUCT(cursor);
-out:
-
-	{
-		krb5_keytab_entry zero_kt_entry;
-		ZERO_STRUCT(zero_kt_entry);
-		if (memcmp(&zero_kt_entry, &kt_entry, sizeof(krb5_keytab_entry))) {
-			smb_krb5_kt_free_entry(context, &kt_entry);
-		}
-	}
-	{
-		krb5_kt_cursor zero_csr;
-		ZERO_STRUCT(zero_csr);
-		if ((memcmp(&cursor, &zero_csr, sizeof(krb5_kt_cursor)) != 0) && keytab) {
-			krb5_kt_end_seq_get(context, keytab, &cursor);	
-		}
-	}
-
-	if (keytab) {
-		krb5_kt_close(context, keytab);
-	}
-	if (context) {
-		krb5_free_context(context);
-	}
-	return ret;
-}
-
 #endif /* HAVE_KRB5 */

Modified: branches/samba/upstream/source/libads/kerberos_verify.c
===================================================================
--- branches/samba/upstream/source/libads/kerberos_verify.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libads/kerberos_verify.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -11,7 +11,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -20,7 +20,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -37,7 +38,7 @@
  ads_keytab_add_entry function for details.
 ***********************************************************************************/
 
-static bool ads_keytab_verify_ticket(krb5_context context,
+static BOOL ads_keytab_verify_ticket(krb5_context context,
 					krb5_auth_context auth_context,
 					const DATA_BLOB *ticket,
 					krb5_ticket **pp_tkt,
@@ -45,7 +46,7 @@
 					krb5_error_code *perr)
 {
 	krb5_error_code ret = 0;
-	bool auth_ok = False;
+	BOOL auth_ok = False;
 	krb5_keytab keytab = NULL;
 	krb5_kt_cursor kt_cursor;
 	krb5_keytab_entry kt_entry;
@@ -80,9 +81,9 @@
 	ZERO_STRUCT(kt_entry);
 	ZERO_STRUCT(kt_cursor);
 
-	ret = smb_krb5_open_keytab(context, NULL, False, &keytab);
+	ret = krb5_kt_default(context, &keytab);
 	if (ret) {
-		DEBUG(1, ("ads_keytab_verify_ticket: smb_krb5_open_keytab failed (%s)\n", error_message(ret)));
+		DEBUG(1, ("ads_keytab_verify_ticket: krb5_kt_default failed (%s)\n", error_message(ret)));
 		goto out;
 	}
 
@@ -210,17 +211,10 @@
 						krb5_error_code *perr)
 {
 	krb5_error_code ret = 0;
-	bool auth_ok = False;
+	BOOL auth_ok = False;
 	char *password_s = NULL;
 	krb5_data password;
-	krb5_enctype enctypes[] = { 
-#if defined(ENCTYPE_ARCFOUR_HMAC)
-		ENCTYPE_ARCFOUR_HMAC,
-#endif
-		ENCTYPE_DES_CBC_CRC, 
-		ENCTYPE_DES_CBC_MD5, 
-		ENCTYPE_NULL
-	};
+	krb5_enctype enctypes[4] = { ENCTYPE_DES_CBC_CRC, ENCTYPE_DES_CBC_MD5, 0, 0 };
 	krb5_data packet;
 	int i;
 
@@ -228,6 +222,9 @@
 	*keyblock = NULL;
 	*perr = 0;
 
+#if defined(ENCTYPE_ARCFOUR_HMAC)
+	enctypes[2] = ENCTYPE_ARCFOUR_HMAC;
+#endif
 
 	if (!secrets_init()) {
 		DEBUG(1,("ads_secrets_verify_ticket: secrets_init failed\n"));
@@ -285,7 +282,6 @@
 		if (ret == KRB5KRB_AP_ERR_TKT_NYV || 
 		    ret == KRB5KRB_AP_ERR_TKT_EXPIRED ||
 		    ret == KRB5KRB_AP_ERR_SKEW) {
-			krb5_free_keyblock(context, key);
 			break;
 		}
 
@@ -309,10 +305,9 @@
 			   time_t time_offset,
 			   const DATA_BLOB *ticket,
 			   char **principal,
-			   struct PAC_DATA **pac_data,
+			   PAC_DATA **pac_data,
 			   DATA_BLOB *ap_rep,
-			   DATA_BLOB *session_key,
-			   bool use_replay_cache)
+			   DATA_BLOB *session_key)
 {
 	NTSTATUS sret = NT_STATUS_LOGON_FAILURE;
 	NTSTATUS pac_ret;
@@ -325,21 +320,21 @@
 	krb5_keyblock *keyblock = NULL;
 	time_t authtime;
 	krb5_error_code ret = 0;
-	int flags = 0;	
+	
 	krb5_principal host_princ = NULL;
 	krb5_const_principal client_principal = NULL;
 	char *host_princ_s = NULL;
-	bool auth_ok = False;
-	bool got_auth_data = False;
-	struct named_mutex *mutex = NULL;
+	BOOL auth_ok = False;
+	BOOL got_replay_mutex = False;
+	BOOL got_auth_data = False;
 
 	ZERO_STRUCT(packet);
 	ZERO_STRUCT(auth_data);
 
 	*principal = NULL;
 	*pac_data = NULL;
-	*ap_rep = data_blob_null;
-	*session_key = data_blob_null;
+	*ap_rep = data_blob(NULL,0);
+	*session_key = data_blob(NULL,0);
 
 	initialize_krb5_error_table();
 	ret = krb5_init_context(&context);
@@ -368,13 +363,6 @@
 		goto out;
 	}
 
-	krb5_auth_con_getflags( context, auth_context, &flags );
-	if ( !use_replay_cache ) {
-		/* Disable default use of a replay cache */
-		flags &= ~KRB5_AUTH_CONTEXT_DO_TIME;
-		krb5_auth_con_setflags( context, auth_context, flags );
-	}
-
 	asprintf(&host_princ_s, "%s$", global_myname());
 	if (!host_princ_s) {
 		goto out;
@@ -389,70 +377,51 @@
 	}
 
 
-	if ( use_replay_cache ) {
-		
-		/* Lock a mutex surrounding the replay as there is no 
-		   locking in the MIT krb5 code surrounding the replay 
-		   cache... */
+	/* Lock a mutex surrounding the replay as there is no locking in the MIT krb5
+	 * code surrounding the replay cache... */
 
-		mutex = grab_named_mutex(talloc_tos(), "replay cache mutex",
-					 10);
-		if (mutex == NULL) {
-			DEBUG(1,("ads_verify_ticket: unable to protect "
-				 "replay cache with mutex.\n"));
-			ret = KRB5_CC_IO;
-			goto out;
-		}
-
-		/* JRA. We must set the rcache here. This will prevent 
-		   replay attacks. */
-		
-		ret = krb5_get_server_rcache(context, 
-					     krb5_princ_component(context, host_princ, 0), 
-					     &rcache);
-		if (ret) {
-			DEBUG(1,("ads_verify_ticket: krb5_get_server_rcache "
-				 "failed (%s)\n", error_message(ret)));
-			goto out;
-		}
-
-		ret = krb5_auth_con_setrcache(context, auth_context, rcache);
-		if (ret) {
-			DEBUG(1,("ads_verify_ticket: krb5_auth_con_setrcache "
-				 "failed (%s)\n", error_message(ret)));
-			goto out;
-		}
+	if (!grab_server_mutex("replay cache mutex")) {
+		DEBUG(1,("ads_verify_ticket: unable to protect replay cache with mutex.\n"));
+		ret = KRB5_CC_IO;
+		goto out;
 	}
 
-	/* Try secrets.tdb first and fallback to the krb5.keytab if
-	   necessary */
+	got_replay_mutex = True;
 
-	auth_ok = ads_secrets_verify_ticket(context, auth_context, host_princ,
-					    ticket, &tkt, &keyblock, &ret);
+	/*
+	 * JRA. We must set the rcache here. This will prevent replay attacks.
+	 */
 
-	if (!auth_ok &&
-	    (ret == KRB5KRB_AP_ERR_TKT_NYV ||
-	     ret == KRB5KRB_AP_ERR_TKT_EXPIRED ||
-	     ret == KRB5KRB_AP_ERR_SKEW)) {
-		goto auth_failed;
+	ret = krb5_get_server_rcache(context, krb5_princ_component(context, host_princ, 0), &rcache);
+	if (ret) {
+		DEBUG(1,("ads_verify_ticket: krb5_get_server_rcache failed (%s)\n", error_message(ret)));
+		goto out;
 	}
 
-	if (!auth_ok && lp_use_kerberos_keytab()) {
-		auth_ok = ads_keytab_verify_ticket(context, auth_context, 
-						   ticket, &tkt, &keyblock, &ret);
+	ret = krb5_auth_con_setrcache(context, auth_context, rcache);
+	if (ret) {
+		DEBUG(1,("ads_verify_ticket: krb5_auth_con_setrcache failed (%s)\n", error_message(ret)));
+		goto out;
 	}
 
-	if ( use_replay_cache ) {		
-		TALLOC_FREE(mutex);
+	if (lp_use_kerberos_keytab()) {
+		auth_ok = ads_keytab_verify_ticket(context, auth_context, ticket, &tkt, &keyblock, &ret);
+	}
+	if (!auth_ok) {
+		auth_ok = ads_secrets_verify_ticket(context, auth_context, host_princ,
+						    ticket, &tkt, &keyblock, &ret);
+	}
+
+	release_server_mutex();
+	got_replay_mutex = False;
+
 #if 0
-		/* Heimdal leaks here, if we fix the leak, MIT crashes */
-		if (rcache) {
-			krb5_rc_close(context, rcache);
-		}
+	/* Heimdal leaks here, if we fix the leak, MIT crashes */
+	if (rcache) {
+		krb5_rc_close(context, rcache);
+	}
 #endif
-	}	
 
- auth_failed:
 	if (!auth_ok) {
 		DEBUG(3,("ads_verify_ticket: krb5_rd_req with auth failed (%s)\n", 
 			 error_message(ret)));
@@ -500,7 +469,8 @@
 		DEBUG(3,("ads_verify_ticket: did not retrieve auth data. continuing without PAC\n"));
 	}
 
-	if (got_auth_data) {
+	if (got_auth_data && pac_data != NULL) {
+
 		pac_ret = decode_pac_data(mem_ctx, &auth_data, context, keyblock, client_principal, authtime, pac_data);
 		if (!NT_STATUS_IS_OK(pac_ret)) {
 			DEBUG(3,("ads_verify_ticket: failed to decode PAC_DATA: %s\n", nt_errstr(pac_ret)));
@@ -538,7 +508,9 @@
 
  out:
 
-	TALLOC_FREE(mutex);
+	if (got_replay_mutex) {
+		release_server_mutex();
+	}
 
 	if (!NT_STATUS_IS_OK(sret)) {
 		data_blob_free(&auth_data);

Modified: branches/samba/upstream/source/libads/krb5_errs.c
===================================================================
--- branches/samba/upstream/source/libads/krb5_errs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libads/krb5_errs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -57,12 +58,10 @@
 #endif
 	{KRB5_CC_NOTFOUND, NT_STATUS_NO_SUCH_FILE},
 	{KRB5_FCC_NOFILE, NT_STATUS_NO_SUCH_FILE},
+	{KRB5KDC_ERR_NONE, NT_STATUS_OK},
 	{KRB5_RC_MALLOC, NT_STATUS_NO_MEMORY},
 	{ENOMEM, NT_STATUS_NO_MEMORY},
-	{KRB5_REALM_CANT_RESOLVE, NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND},
-
-	/* Must be last entry */
-	{KRB5KDC_ERR_NONE, NT_STATUS_OK}
+	{0, NT_STATUS_OK}
 };
 
 static const struct {

Modified: branches/samba/upstream/source/libads/krb5_setpw.c
===================================================================
--- branches/samba/upstream/source/libads/krb5_setpw.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libads/krb5_setpw.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -87,7 +88,7 @@
 		realm = c;
 	} else {
 		/* We must have a realm component. */
-		return data_blob_null;
+		return data_blob(NULL, 0);
 	}
 
 	memset(&req, 0, sizeof(req));
@@ -136,7 +137,7 @@
 					   krb5_data *ap_req,
 					   const char *princ,
 					   const char *passwd,
-					   bool use_tcp,
+					   BOOL use_tcp,
 					   krb5_data *packet)
 {
 	krb5_error_code ret;
@@ -267,7 +268,7 @@
 	}
 }
 static krb5_error_code parse_setpw_reply(krb5_context context,
-					 bool use_tcp,
+					 BOOL use_tcp,
 					 krb5_auth_context auth_context,
 					 krb5_data *packet)
 {
@@ -401,15 +402,12 @@
 	krb5_data ap_req, chpw_req, chpw_rep;
 	int ret, sock;
 	socklen_t addr_len;
-	struct sockaddr_storage remote_addr, local_addr;
-	struct sockaddr_storage addr;
+	struct sockaddr remote_addr, local_addr;
+	struct in_addr *addr = interpret_addr2(kdc_host);
 	krb5_address local_kaddr, remote_kaddr;
-	bool use_tcp = False;
+	BOOL	use_tcp = False;
 
 
-	if (!interpret_string_addr(&addr, kdc_host, 0)) {
-	}
-
 	ret = krb5_mk_req_extended(context, &auth_context, AP_OPTS_USE_SUBKEY,
 				   NULL, credsp, &ap_req);
 	if (ret) {
@@ -425,7 +423,7 @@
 
 		} else {
 
-			sock = open_socket_out(SOCK_STREAM, &addr, DEFAULT_KPASSWD_PORT, 
+			sock = open_socket_out(SOCK_STREAM, addr, DEFAULT_KPASSWD_PORT, 
 					       LONG_CONNECT_TIMEOUT);
 		}
 
@@ -433,37 +431,19 @@
 			int rc = errno;
 			SAFE_FREE(ap_req.data);
 			krb5_auth_con_free(context, auth_context);
-			DEBUG(1,("failed to open kpasswd socket to %s (%s)\n",
+			DEBUG(1,("failed to open kpasswd socket to %s (%s)\n", 
 				 kdc_host, strerror(errno)));
 			return ADS_ERROR_SYSTEM(rc);
 		}
+		
 		addr_len = sizeof(remote_addr);
-		if (getpeername(sock, (struct sockaddr *)&remote_addr, &addr_len) != 0) {
-			close(sock);
-			SAFE_FREE(ap_req.data);
-			krb5_auth_con_free(context, auth_context);
-			DEBUG(1,("getpeername() failed (%s)\n", error_message(errno)));
-			return ADS_ERROR_SYSTEM(errno);
-		}
+		getpeername(sock, &remote_addr, &addr_len);
 		addr_len = sizeof(local_addr);
-		if (getsockname(sock, (struct sockaddr *)&local_addr, &addr_len) != 0) {
-			close(sock);
-			SAFE_FREE(ap_req.data);
-			krb5_auth_con_free(context, auth_context);
-			DEBUG(1,("getsockname() failed (%s)\n", error_message(errno)));
-			return ADS_ERROR_SYSTEM(errno);
-		}
-		if (!setup_kaddr(&remote_kaddr, &remote_addr) ||
-				!setup_kaddr(&local_kaddr, &local_addr)) {
-			DEBUG(1,("do_krb5_kpasswd_request: "
-				"Failed to setup addresses.\n"));
-			close(sock);
-			SAFE_FREE(ap_req.data);
-			krb5_auth_con_free(context, auth_context);
-			errno = EINVAL;
-			return ADS_ERROR_SYSTEM(EINVAL);
-		}
-
+		getsockname(sock, &local_addr, &addr_len);
+		
+		setup_kaddr(&remote_kaddr, &remote_addr);
+		setup_kaddr(&local_kaddr, &local_addr);
+	
 		ret = krb5_auth_con_setaddrs(context, auth_context, &local_kaddr, NULL);
 		if (ret) {
 			close(sock);
@@ -472,7 +452,7 @@
 			DEBUG(1,("krb5_auth_con_setaddrs failed (%s)\n", error_message(ret)));
 			return ADS_ERROR_KRB5(ret);
 		}
-
+	
 		ret = build_kpasswd_request(pversion, context, auth_context, &ap_req,
 					  princ, newpw, use_tcp, &chpw_req);
 		if (ret) {

Modified: branches/samba/upstream/source/libads/ldap.c
===================================================================
--- branches/samba/upstream/source/libads/ldap.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libads/ldap.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -18,11 +18,11 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
-#include "lib/ldb/include/includes.h"
 
 #ifdef HAVE_LDAP
 
@@ -43,7 +43,7 @@
 #define LDAP_SERVER_TREE_DELETE_OID	"1.2.840.113556.1.4.805"
 
 static SIG_ATOMIC_T gotalarm;
-
+                                                                                                                   
 /***************************************************************
  Signal function to tell us we timed out.
 ****************************************************************/
@@ -57,10 +57,6 @@
 {
 	LDAP *ldp = NULL;
 
-
-	DEBUG(10, ("Opening connection to LDAP server '%s:%d', timeout "
-		   "%u seconds\n", server, port, to));
-
 	/* Setup timeout */
 	gotalarm = 0;
 	CatchSignal(SIGALRM, SIGNAL_CAST gotalarm_sig);
@@ -70,10 +66,8 @@
 	ldp = ldap_open(server, port);
 
 	if (ldp == NULL) {
-		DEBUG(2,("Could not open connection to LDAP server %s:%d: %s\n",
+		DEBUG(2,("Could not open LDAP connection to %s:%d: %s\n",
 			 server, port, strerror(errno)));
-	} else {
-		DEBUG(10, ("Connected to LDAP server '%s:%d'\n", server, port));
 	}
 
 	/* Teardown timeout. */
@@ -125,7 +119,7 @@
  Do client and server sitename match ?
 **********************************************/
 
-bool ads_sitename_match(ADS_STRUCT *ads)
+BOOL ads_sitename_match(ADS_STRUCT *ads)
 {
 	if (ads->config.server_site_name == NULL &&
 	    ads->config.client_site_name == NULL ) {
@@ -149,16 +143,16 @@
  Is this the closest DC ?
 **********************************************/
 
-bool ads_closest_dc(ADS_STRUCT *ads)
+BOOL ads_closest_dc(ADS_STRUCT *ads)
 {
-	if (ads->config.flags & NBT_SERVER_CLOSEST) {
-		DEBUG(10,("ads_closest_dc: NBT_SERVER_CLOSEST flag set\n"));
+	if (ads->config.flags & ADS_CLOSEST) {
+		DEBUG(10,("ads_closest_dc: ADS_CLOSEST flag set\n"));
 		return True;
 	}
 
 	/* not sure if this can ever happen */
 	if (ads_sitename_match(ads)) {
-		DEBUG(10,("ads_closest_dc: NBT_SERVER_CLOSEST flag not set but sites match\n"));
+		DEBUG(10,("ads_closest_dc: ADS_CLOSEST flag not set but sites match\n"));
 		return True;
 	}
 
@@ -173,12 +167,10 @@
   try a connection to a given ldap server, returning True and setting the servers IP
   in the ads struct if successful
  */
-bool ads_try_connect(ADS_STRUCT *ads, const char *server )
+BOOL ads_try_connect(ADS_STRUCT *ads, const char *server )
 {
 	char *srv;
-	struct nbt_cldap_netlogon_5 cldap_reply;
-	TALLOC_CTX *mem_ctx = NULL;
-	bool ret = false;
+	struct cldap_netlogon_reply cldap_reply;
 
 	if (!server || !*server) {
 		return False;
@@ -187,31 +179,25 @@
 	DEBUG(5,("ads_try_connect: sending CLDAP request to %s (realm: %s)\n", 
 		server, ads->server.realm));
 
-	mem_ctx = talloc_init("ads_try_connect");
-	if (!mem_ctx) {
-		DEBUG(0,("out of memory\n"));
-		return false;
-	}
-
 	/* this copes with inet_ntoa brokenness */
 	
 	srv = SMB_STRDUP(server);
 
 	ZERO_STRUCT( cldap_reply );
 
-	if ( !ads_cldap_netlogon_5(mem_ctx, srv, ads->server.realm, &cldap_reply ) ) {
+	if ( !ads_cldap_netlogon( srv, ads->server.realm, &cldap_reply ) ) {
 		DEBUG(3,("ads_try_connect: CLDAP request %s failed.\n", srv));
-		ret = false;
-		goto out;
+		SAFE_FREE( srv );
+		return False;
 	}
 
 	/* Check the CLDAP reply flags */
 
-	if ( !(cldap_reply.server_type & NBT_SERVER_LDAP) ) {
+	if ( !(cldap_reply.flags & ADS_LDAP) ) {
 		DEBUG(1,("ads_try_connect: %s's CLDAP reply says it is not an LDAP server!\n",
 			srv));
-		ret = false;
-		goto out;
+		SAFE_FREE( srv );
+		return False;
 	}
 
 	/* Fill in the ads->config values */
@@ -223,40 +209,30 @@
 	SAFE_FREE(ads->config.client_site_name);
 	SAFE_FREE(ads->server.workgroup);
 
-	ads->config.flags	       = cldap_reply.server_type;
-	ads->config.ldap_server_name   = SMB_STRDUP(cldap_reply.pdc_dns_name);
-	ads->config.realm              = SMB_STRDUP(cldap_reply.dns_domain);
-	strupper_m(ads->config.realm);
+	ads->config.flags	       = cldap_reply.flags;
+	ads->config.ldap_server_name   = SMB_STRDUP(cldap_reply.hostname);
+	strupper_m(cldap_reply.domain);
+	ads->config.realm              = SMB_STRDUP(cldap_reply.domain);
 	ads->config.bind_path          = ads_build_dn(ads->config.realm);
-	if (*cldap_reply.server_site) {
+	if (*cldap_reply.server_site_name) {
 		ads->config.server_site_name =
-			SMB_STRDUP(cldap_reply.server_site);
+			SMB_STRDUP(cldap_reply.server_site_name);
 	}
-	if (*cldap_reply.client_site) {
+	if (*cldap_reply.client_site_name) {
 		ads->config.client_site_name =
-			SMB_STRDUP(cldap_reply.client_site);
+			SMB_STRDUP(cldap_reply.client_site_name);
 	}
-	ads->server.workgroup          = SMB_STRDUP(cldap_reply.domain);
+		
+	ads->server.workgroup          = SMB_STRDUP(cldap_reply.netbios_domain);
 
-	ads->ldap.port = LDAP_PORT;
-	if (!interpret_string_addr(&ads->ldap.ss, srv, 0)) {
-		DEBUG(1,("ads_try_connect: unable to convert %s "
-			"to an address\n",
-			srv));
-		ret = false;
-		goto out;
-	}
-
+	ads->ldap_port = LDAP_PORT;
+	ads->ldap_ip = *interpret_addr2(srv);
+	SAFE_FREE(srv);
+	
 	/* Store our site name. */
-	sitename_store( cldap_reply.domain, cldap_reply.client_site);
-	sitename_store( cldap_reply.dns_domain, cldap_reply.client_site);
+	sitename_store( cldap_reply.domain, cldap_reply.client_site_name );
 
-	ret = true;
- out:
-	SAFE_FREE(srv);
-	TALLOC_FREE(mem_ctx);
-
-	return ret;
+	return True;
 }
 
 /**********************************************************************
@@ -270,9 +246,9 @@
 	const char *c_realm;
 	int count, i=0;
 	struct ip_service *ip_list;
-	const char *realm;
-	bool got_realm = False;
-	bool use_own_domain = False;
+	pstring realm;
+	BOOL got_realm = False;
+	BOOL use_own_domain = False;
 	char *sitename;
 	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
 
@@ -280,7 +256,7 @@
 
 	/* realm */
 	c_realm = ads->server.realm;
-
+	
 	if ( !c_realm || !*c_realm ) {
 		/* special case where no realm and no workgroup means our own */
 		if ( !ads->server.workgroup || !*ads->server.workgroup ) {
@@ -288,54 +264,53 @@
 			c_realm = lp_realm();
 		}
 	}
-
-	if (c_realm && *c_realm)
+	
+	if (c_realm && *c_realm) 
 		got_realm = True;
-
-	/* we need to try once with the realm name and fallback to the
+		   
+	/* we need to try once with the realm name and fallback to the 
 	   netbios domain name if we fail (if netbios has not been disabled */
-
+	   
 	if ( !got_realm	&& !lp_disable_netbios() ) {
 		c_realm = ads->server.workgroup;
 		if (!c_realm || !*c_realm) {
 			if ( use_own_domain )
 				c_realm = lp_workgroup();
 		}
-
+		
 		if ( !c_realm || !*c_realm ) {
 			DEBUG(0,("ads_find_dc: no realm or workgroup!  Don't know what to do\n"));
 			return NT_STATUS_INVALID_PARAMETER; /* rather need MISSING_PARAMETER ... */
 		}
 	}
+	
+	pstrcpy( realm, c_realm );
 
-	realm = c_realm;
-
 	sitename = sitename_fetch(realm);
 
  again:
 
-	DEBUG(6,("ads_find_dc: looking for %s '%s'\n",
+	DEBUG(6,("ads_find_dc: looking for %s '%s'\n", 
 		(got_realm ? "realm" : "domain"), realm));
 
 	status = get_sorted_dc_list(realm, sitename, &ip_list, &count, got_realm);
 	if (!NT_STATUS_IS_OK(status)) {
-		SAFE_FREE(ip_list);
 		/* fall back to netbios if we can */
 		if ( got_realm && !lp_disable_netbios() ) {
 			got_realm = False;
 			goto again;
 		}
-
+		
 		SAFE_FREE(sitename);
 		return status;
 	}
 
 	/* if we fail this loop, then giveup since all the IP addresses returned were dead */
 	for ( i=0; i<count; i++ ) {
-		char server[INET6_ADDRSTRLEN];
-
-		print_sockaddr(server, sizeof(server), &ip_list[i].ss);
-
+		fstring server;
+		
+		fstrcpy( server, inet_ntoa(ip_list[i].ip) );
+		
 		if ( !NT_STATUS_IS_OK(check_negative_conn_cache(realm, server)) )
 			continue;
 
@@ -358,7 +333,7 @@
 				continue;
 			}
 		}
-
+			
 		if ( ads_try_connect(ads, server) ) {
 			SAFE_FREE(ip_list);
 			SAFE_FREE(sitename);
@@ -397,22 +372,13 @@
 	int version = LDAP_VERSION3;
 	ADS_STATUS status;
 	NTSTATUS ntstatus;
-	char addr[INET6_ADDRSTRLEN];
 
-	ZERO_STRUCT(ads->ldap);
-	ads->ldap.last_attempt	= time(NULL);
-	ads->ldap.wrap_type	= ADS_SASLWRAP_TYPE_PLAIN;
+	ads->last_attempt = time(NULL);
+	ads->ld = NULL;
 
 	/* try with a user specified server */
 
-	if (DEBUGLEVEL >= 11) {
-		char *s = NDR_PRINT_STRUCT_STRING(talloc_tos(), ads_struct, ads);
-		DEBUG(11,("ads_connect: entering\n"));
-		DEBUGADD(11,("%s\n", s));
-		TALLOC_FREE(s);
-	}
-
-	if (ads->server.ldap_server &&
+	if (ads->server.ldap_server && 
 	    ads_try_connect(ads, ads->server.ldap_server)) {
 		goto got_connection;
 	}
@@ -422,14 +388,11 @@
 		goto got_connection;
 	}
 
-	status = ADS_ERROR_NT(ntstatus);
-	goto out;
+	return ADS_ERROR_NT(ntstatus);
 
 got_connection:
+	DEBUG(3,("Connected to LDAP server %s\n", inet_ntoa(ads->ldap_ip)));
 
-	print_sockaddr(addr, sizeof(addr), &ads->ldap.ss);
-	DEBUG(3,("Successfully contacted LDAP server %s\n", addr));
-
 	if (!ads->auth.user_name) {
 		/* Must use the userPrincipalName value here or sAMAccountName
 		   and not servicePrincipalName; found by Guenther Deschner */
@@ -442,8 +405,7 @@
 	}
 
 	if (!ads->auth.kdc_server) {
-		print_sockaddr(addr, sizeof(addr), &ads->ldap.ss);
-		ads->auth.kdc_server = SMB_STRDUP(addr);
+		ads->auth.kdc_server = SMB_STRDUP(inet_ntoa(ads->ldap_ip));
 	}
 
 #if KRB5_DNS_HACK
@@ -460,92 +422,50 @@
 	/* If the caller() requested no LDAP bind, then we are done */
 	
 	if (ads->auth.flags & ADS_AUTH_NO_BIND) {
-		status = ADS_SUCCESS;
-		goto out;
+		return ADS_SUCCESS;
 	}
-
-	ads->ldap.mem_ctx = talloc_init("ads LDAP connection memory");
-	if (!ads->ldap.mem_ctx) {
-		status = ADS_ERROR_NT(NT_STATUS_NO_MEMORY);
-		goto out;
-	}
 	
 	/* Otherwise setup the TCP LDAP session */
 
-	ads->ldap.ld = ldap_open_with_timeout(ads->config.ldap_server_name,
-					      LDAP_PORT, lp_ldap_timeout());
-	if (ads->ldap.ld == NULL) {
-		status = ADS_ERROR(LDAP_OPERATIONS_ERROR);
-		goto out;
+	if ( (ads->ld = ldap_open_with_timeout(ads->config.ldap_server_name, 
+		LDAP_PORT, lp_ldap_timeout())) == NULL )
+	{
+		return ADS_ERROR(LDAP_OPERATIONS_ERROR);
 	}
-	DEBUG(3,("Connected to LDAP server %s\n", ads->config.ldap_server_name));
 
 	/* cache the successful connection for workgroup and realm */
 	if (ads_closest_dc(ads)) {
-		print_sockaddr(addr, sizeof(addr), &ads->ldap.ss);
-		saf_store( ads->server.workgroup, addr);
-		saf_store( ads->server.realm, addr);
+		saf_store( ads->server.workgroup, inet_ntoa(ads->ldap_ip));
+		saf_store( ads->server.realm, inet_ntoa(ads->ldap_ip));
 	}
 
-	ldap_set_option(ads->ldap.ld, LDAP_OPT_PROTOCOL_VERSION, &version);
+	ldap_set_option(ads->ld, LDAP_OPT_PROTOCOL_VERSION, &version);
 
-	status = ADS_ERROR(smb_ldap_start_tls(ads->ldap.ld, version));
+	status = ADS_ERROR(smb_ldap_start_tls(ads->ld, version));
 	if (!ADS_ERR_OK(status)) {
-		goto out;
+		return status;
 	}
 
 	/* fill in the current time and offsets */
 	
 	status = ads_current_time( ads );
 	if ( !ADS_ERR_OK(status) ) {
-		goto out;
+		return status;
 	}
 
 	/* Now do the bind */
 	
 	if (ads->auth.flags & ADS_AUTH_ANON_BIND) {
-		status = ADS_ERROR(ldap_simple_bind_s(ads->ldap.ld, NULL, NULL));
-		goto out;
+		return ADS_ERROR(ldap_simple_bind_s( ads->ld, NULL, NULL));
 	}
 
 	if (ads->auth.flags & ADS_AUTH_SIMPLE_BIND) {
-		status = ADS_ERROR(ldap_simple_bind_s(ads->ldap.ld, ads->auth.user_name, ads->auth.password));
-		goto out;
+		return ADS_ERROR(ldap_simple_bind_s( ads->ld, ads->auth.user_name, ads->auth.password));
 	}
 
-	status = ads_sasl_bind(ads);
-
- out:
-	if (DEBUGLEVEL >= 11) {
-		char *s = NDR_PRINT_STRUCT_STRING(talloc_tos(), ads_struct, ads);
-		DEBUG(11,("ads_connect: leaving with: %s\n",
-			ads_errstr(status)));
-		DEBUGADD(11,("%s\n", s));
-		TALLOC_FREE(s);
-	}
-
-	return status;
+	return ads_sasl_bind(ads);
 }
 
-/**
- * Disconnect the LDAP server
- * @param ads Pointer to an existing ADS_STRUCT
- **/
-void ads_disconnect(ADS_STRUCT *ads)
-{
-	if (ads->ldap.ld) {
-		ldap_unbind(ads->ldap.ld);
-		ads->ldap.ld = NULL;
-	}
-	if (ads->ldap.wrap_ops && ads->ldap.wrap_ops->disconnect) {
-		ads->ldap.wrap_ops->disconnect(ads);
-	}
-	if (ads->ldap.mem_ctx) {
-		talloc_free(ads->ldap.mem_ctx);
-	}
-	ZERO_STRUCT(ads->ldap);
-}
-
 /*
   Duplicate a struct berval into talloc'ed memory
  */
@@ -602,10 +522,7 @@
 	if (!values) return NULL;
 
 	for (i=0; in_vals[i]; i++) {
-		if (push_utf8_talloc(ctx, &values[i], in_vals[i]) == (size_t) -1) {
-			TALLOC_FREE(values);
-			return NULL;
-		}
+		push_utf8_talloc(ctx, &values[i], in_vals[i]);
 	}
 	return values;
 }
@@ -653,11 +570,11 @@
 {
 	int rc, i, version;
 	char *utf8_expr, *utf8_path, **search_attrs;
-	LDAPControl PagedResults, NoReferrals, ExternalCtrl, *controls[4], **rcontrols;
+	LDAPControl PagedResults, NoReferrals, ExtendedDn, *controls[4], **rcontrols;
 	BerElement *cookie_be = NULL;
 	struct berval *cookie_bv= NULL;
-	BerElement *ext_be = NULL;
-	struct berval *ext_bv= NULL;
+	BerElement *extdn_be = NULL;
+	struct berval *extdn_bv= NULL;
 
 	TALLOC_CTX *ctx;
 	ads_control *external_control = (ads_control *) args;
@@ -681,14 +598,15 @@
 	else {
 		/* This would be the utf8-encoded version...*/
 		/* if (!(search_attrs = ads_push_strvals(ctx, attrs))) */
-		if (!(str_list_copy(talloc_tos(), &search_attrs, attrs))) {
+		if (!(str_list_copy(&search_attrs, attrs))) {
 			rc = LDAP_NO_MEMORY;
 			goto done;
 		}
 	}
 		
+		
 	/* Paged results only available on ldap v3 or later */
-	ldap_get_option(ads->ldap.ld, LDAP_OPT_PROTOCOL_VERSION, &version);
+	ldap_get_option(ads->ld, LDAP_OPT_PROTOCOL_VERSION, &version);
 	if (version < LDAP_VERSION3) {
 		rc =  LDAP_NOT_SUPPORTED;
 		goto done;
@@ -713,42 +631,40 @@
 	NoReferrals.ldctl_value.bv_len = 0;
 	NoReferrals.ldctl_value.bv_val = CONST_DISCARD(char *, "");
 
-	if (external_control && 
-	    (strequal(external_control->control, ADS_EXTENDED_DN_OID) || 
-	     strequal(external_control->control, ADS_SD_FLAGS_OID))) {
+	if (external_control && strequal(external_control->control, ADS_EXTENDED_DN_OID)) {
 
-		ExternalCtrl.ldctl_oid = CONST_DISCARD(char *, external_control->control);
-		ExternalCtrl.ldctl_iscritical = (char) external_control->critical;
+		ExtendedDn.ldctl_oid = CONST_DISCARD(char *, external_control->control);
+		ExtendedDn.ldctl_iscritical = (char) external_control->critical;
 
 		/* win2k does not accept a ldctl_value beeing passed in */
 
 		if (external_control->val != 0) {
 
-			if ((ext_be = ber_alloc_t(LBER_USE_DER)) == NULL ) {
+			if ((extdn_be = ber_alloc_t(LBER_USE_DER)) == NULL ) {
 				rc = LDAP_NO_MEMORY;
 				goto done;
 			}
 
-			if ((ber_printf(ext_be, "{i}", (ber_int_t) external_control->val)) == -1) {
+			if ((ber_printf(extdn_be, "{i}", (ber_int_t) external_control->val)) == -1) {
 				rc = LDAP_NO_MEMORY;
 				goto done;
 			}
-			if ((ber_flatten(ext_be, &ext_bv)) == -1) {
+			if ((ber_flatten(extdn_be, &extdn_bv)) == -1) {
 				rc = LDAP_NO_MEMORY;
 				goto done;
 			}
 
-			ExternalCtrl.ldctl_value.bv_len = ext_bv->bv_len;
-			ExternalCtrl.ldctl_value.bv_val = ext_bv->bv_val;
+			ExtendedDn.ldctl_value.bv_len = extdn_bv->bv_len;
+			ExtendedDn.ldctl_value.bv_val = extdn_bv->bv_val;
 
 		} else {
-			ExternalCtrl.ldctl_value.bv_len = 0;
-			ExternalCtrl.ldctl_value.bv_val = NULL;
+			ExtendedDn.ldctl_value.bv_len = 0;
+			ExtendedDn.ldctl_value.bv_val = NULL;
 		}
 
 		controls[0] = &NoReferrals;
 		controls[1] = &PagedResults;
-		controls[2] = &ExternalCtrl;
+		controls[2] = &ExtendedDn;
 		controls[3] = NULL;
 
 	} else {
@@ -765,9 +681,9 @@
 	   leaving this in despite the control that says don't generate
 	   referrals, in case the server doesn't support it (jmcd)
 	*/
-	ldap_set_option(ads->ldap.ld, LDAP_OPT_REFERRALS, LDAP_OPT_OFF);
+	ldap_set_option(ads->ld, LDAP_OPT_REFERRALS, LDAP_OPT_OFF);
 
-	rc = ldap_search_with_timeout(ads->ldap.ld, utf8_path, scope, utf8_expr, 
+	rc = ldap_search_with_timeout(ads->ld, utf8_path, scope, utf8_expr, 
 				      search_attrs, 0, controls,
 				      NULL, LDAP_NO_LIMIT,
 				      (LDAPMessage **)res);
@@ -781,7 +697,7 @@
 		goto done;
 	}
 
-	rc = ldap_parse_result(ads->ldap.ld, *res, NULL, NULL, NULL,
+	rc = ldap_parse_result(ads->ld, *res, NULL, NULL, NULL,
 					NULL, &rcontrols,  0);
 
 	if (!rcontrols) {
@@ -809,16 +725,16 @@
 done:
 	talloc_destroy(ctx);
 
-	if (ext_be) {
-		ber_free(ext_be, 1);
+	if (extdn_be) {
+		ber_free(extdn_be, 1);
 	}
 
-	if (ext_bv) {
-		ber_bvfree(ext_bv);
+	if (extdn_bv) {
+		ber_bvfree(extdn_bv);
 	}
  
 	/* if/when we decide to utf8-encode attrs, take out this next line */
-	TALLOC_FREE(search_attrs);
+	str_list_free(&search_attrs);
 
 	return ADS_ERROR(rc);
 }
@@ -894,21 +810,6 @@
 	return ads_do_search_all_args(ads, bind_path, scope, expr, attrs, NULL, res);
 }
 
- ADS_STATUS ads_do_search_all_sd_flags(ADS_STRUCT *ads, const char *bind_path,
-				       int scope, const char *expr,
-				       const char **attrs, uint32 sd_flags, 
-				       LDAPMessage **res)
-{
-	ads_control args;
-
-	args.control = ADS_SD_FLAGS_OID;
-	args.val = sd_flags;
-	args.critical = True;
-
-	return ads_do_search_all_args(ads, bind_path, scope, expr, attrs, &args, res);
-}
-
-
 /**
  * Run a function on all results for a search.  Uses ads_do_paged_search() and
  *  runs the function as each page is returned, using ads_process_results()
@@ -923,7 +824,7 @@
  **/
 ADS_STATUS ads_do_search_all_fn(ADS_STRUCT *ads, const char *bind_path,
 				int scope, const char *expr, const char **attrs,
-				bool (*fn)(ADS_STRUCT *, char *, void **, void *), 
+				BOOL(*fn)(char *, void **, void *), 
 				void *data_area)
 {
 	struct berval *cookie = NULL;
@@ -991,7 +892,7 @@
 	else {
 		/* This would be the utf8-encoded version...*/
 		/* if (!(search_attrs = ads_push_strvals(ctx, attrs)))  */
-		if (!(str_list_copy(talloc_tos(), &search_attrs, attrs)))
+		if (!(str_list_copy(&search_attrs, attrs)))
 		{
 			DEBUG(1,("ads_do_search: str_list_copy() failed!"));
 			rc = LDAP_NO_MEMORY;
@@ -1000,9 +901,9 @@
 	}
 
 	/* see the note in ads_do_paged_search - we *must* disable referrals */
-	ldap_set_option(ads->ldap.ld, LDAP_OPT_REFERRALS, LDAP_OPT_OFF);
+	ldap_set_option(ads->ld, LDAP_OPT_REFERRALS, LDAP_OPT_OFF);
 
-	rc = ldap_search_with_timeout(ads->ldap.ld, utf8_path, scope, utf8_expr,
+	rc = ldap_search_with_timeout(ads->ld, utf8_path, scope, utf8_expr,
 				      search_attrs, 0, NULL, NULL, 
 				      LDAP_NO_LIMIT,
 				      (LDAPMessage **)res);
@@ -1015,7 +916,7 @@
  done:
 	talloc_destroy(ctx);
 	/* if/when we decide to utf8-encode attrs, take out this next line */
-	TALLOC_FREE(search_attrs);
+	str_list_free(&search_attrs);
 	return ADS_ERROR(rc);
 }
 /**
@@ -1079,7 +980,7 @@
 {
 	char *utf8_dn, *unix_dn;
 
-	utf8_dn = ldap_get_dn(ads->ldap.ld, msg);
+	utf8_dn = ldap_get_dn(ads->ld, msg);
 
 	if (!utf8_dn) {
 		DEBUG (5, ("ads_get_dn: ldap_get_dn failed\n"));
@@ -1309,7 +1210,7 @@
 	for(i=0;(mods[i]!=0)&&(mods[i]!=(LDAPMod *) -1);i++);
 	/* make sure the end of the list is NULL */
 	mods[i] = NULL;
-	ret = ldap_modify_ext_s(ads->ldap.ld, utf8_dn,
+	ret = ldap_modify_ext_s(ads->ld, utf8_dn,
 				(LDAPMod **) mods, controls, NULL);
 	SAFE_FREE(utf8_dn);
 	return ADS_ERROR(ret);
@@ -1337,7 +1238,7 @@
 	/* make sure the end of the list is NULL */
 	mods[i] = NULL;
 
-	ret = ldap_add_s(ads->ldap.ld, utf8_dn, (LDAPMod**)mods);
+	ret = ldap_add_s(ads->ld, utf8_dn, (LDAPMod**)mods);
 	SAFE_FREE(utf8_dn);
 	return ADS_ERROR(ret);
 }
@@ -1357,7 +1258,7 @@
 		return ADS_ERROR_NT(NT_STATUS_NO_MEMORY);
 	}
 	
-	ret = ldap_delete_s(ads->ldap.ld, utf8_dn);
+	ret = ldap_delete_s(ads->ld, utf8_dn);
 	SAFE_FREE(utf8_dn);
 	return ADS_ERROR(ret);
 }
@@ -1787,81 +1688,10 @@
 	return ret;
 }
 
-/**
- * move a machine account to another OU on the ADS server
- * @param ads - An intialized ADS_STRUCT
- * @param machine_name - the NetBIOS machine name of this account.
- * @param org_unit - The LDAP path in which to place this account
- * @param moved - whether we moved the machine account (optional)
- * @return 0 upon success, or non-zero otherwise
-**/
-
-ADS_STATUS ads_move_machine_acct(ADS_STRUCT *ads, const char *machine_name, 
-                                 const char *org_unit, bool *moved)
-{
-	ADS_STATUS rc;
-	int ldap_status;
-	LDAPMessage *res = NULL;
-	char *filter = NULL;
-	char *computer_dn = NULL;
-	char *parent_dn;
-	char *computer_rdn = NULL;
-	bool need_move = False;
-
-	if (asprintf(&filter, "(samAccountName=%s$)", machine_name) == -1) {
-		rc = ADS_ERROR(LDAP_NO_MEMORY);
-		goto done;
-	}
-
-	/* Find pre-existing machine */
-	rc = ads_search(ads, &res, filter, NULL);
-	if (!ADS_ERR_OK(rc)) {
-		goto done;
-	}
-
-	computer_dn = ads_get_dn(ads, res);
-	if (!computer_dn) {
-		rc = ADS_ERROR(LDAP_NO_MEMORY);
-		goto done;
-	}
-
-	parent_dn = ads_parent_dn(computer_dn);
-	if (strequal(parent_dn, org_unit)) {
-		goto done;
-	}
-
-	need_move = True;
-
-	if (asprintf(&computer_rdn, "CN=%s", machine_name) == -1) {
-		rc = ADS_ERROR(LDAP_NO_MEMORY);
-		goto done;
-	}
-
-	ldap_status = ldap_rename_s(ads->ldap.ld, computer_dn, computer_rdn, 
-				    org_unit, 1, NULL, NULL);
-	rc = ADS_ERROR(ldap_status);
-
-done:
-	ads_msgfree(ads, res);
-	SAFE_FREE(filter);
-	SAFE_FREE(computer_dn);
-	SAFE_FREE(computer_rdn);
-
-	if (!ADS_ERR_OK(rc)) {
-		need_move = False;
-	}
-
-	if (moved) {
-		*moved = need_move;
-	}
-
-	return rc;
-}
-
 /*
   dump a binary result from ldap
 */
-static void dump_binary(ADS_STRUCT *ads, const char *field, struct berval **values)
+static void dump_binary(const char *field, struct berval **values)
 {
 	int i, j;
 	for (i=0; values[i]; i++) {
@@ -1873,57 +1703,58 @@
 	}
 }
 
-static void dump_guid(ADS_STRUCT *ads, const char *field, struct berval **values)
+static void dump_guid(const char *field, struct berval **values)
 {
 	int i;
+	UUID_FLAT guid;
 	for (i=0; values[i]; i++) {
-
-		UUID_FLAT guid;
-		struct GUID tmp;
-
 		memcpy(guid.info, values[i]->bv_val, sizeof(guid.info));
-		smb_uuid_unpack(guid, &tmp);
-		printf("%s: %s\n", field, smb_uuid_string(talloc_tos(), tmp));
+		printf("%s: %s\n", field, 
+		       smb_uuid_string_static(smb_uuid_unpack_static(guid)));
 	}
 }
 
 /*
   dump a sid result from ldap
 */
-static void dump_sid(ADS_STRUCT *ads, const char *field, struct berval **values)
+static void dump_sid(const char *field, struct berval **values)
 {
 	int i;
 	for (i=0; values[i]; i++) {
 		DOM_SID sid;
-		fstring tmp;
 		sid_parse(values[i]->bv_val, values[i]->bv_len, &sid);
-		printf("%s: %s\n", field, sid_to_fstring(tmp, &sid));
+		printf("%s: %s\n", field, sid_string_static(&sid));
 	}
 }
 
 /*
   dump ntSecurityDescriptor
 */
-static void dump_sd(ADS_STRUCT *ads, const char *filed, struct berval **values)
+static void dump_sd(const char *filed, struct berval **values)
 {
-	TALLOC_CTX *frame = talloc_stackframe();
-	struct security_descriptor *psd;
-	NTSTATUS status;
+	prs_struct ps;
+	
+	SEC_DESC   *psd = 0;
+	TALLOC_CTX *ctx = 0;
 
-	status = unmarshall_sec_desc(talloc_tos(), (uint8 *)values[0]->bv_val,
-				     values[0]->bv_len, &psd);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0, ("unmarshall_sec_desc failed: %s\n",
-			  nt_errstr(status)));
-		TALLOC_FREE(frame);
+	if (!(ctx = talloc_init("sec_io_desc")))
 		return;
-	}
 
-	if (psd) {
-		ads_disp_sd(ads, talloc_tos(), psd);
+	/* prepare data */
+	prs_init(&ps, values[0]->bv_len, ctx, UNMARSHALL);
+	prs_copy_data_in(&ps, values[0]->bv_val, values[0]->bv_len);
+	prs_set_offset(&ps,0);
+
+	/* parse secdesc */
+	if (!sec_io_desc("sd", &psd, &ps, 1)) {
+		prs_mem_free(&ps);
+		talloc_destroy(ctx);
+		return;
 	}
+	if (psd) ads_disp_sd(psd);
 
-	TALLOC_FREE(frame);
+	prs_mem_free(&ps);
+	talloc_destroy(ctx);
 }
 
 /*
@@ -1942,12 +1773,12 @@
   used for debugging
 */
 
-static bool ads_dump_field(ADS_STRUCT *ads, char *field, void **values, void *data_area)
+static BOOL ads_dump_field(char *field, void **values, void *data_area)
 {
 	const struct {
 		const char *name;
-		bool string;
-		void (*handler)(ADS_STRUCT *, const char *, struct berval **);
+		BOOL string;
+		void (*handler)(const char *, struct berval **);
 	} handlers[] = {
 		{"objectGUID", False, dump_guid},
 		{"netbootGUID", False, dump_guid},
@@ -1958,7 +1789,6 @@
 		{"tokenGroupsNoGCAcceptable", False, dump_sid},
 		{"tokengroupsGlobalandUniversal", False, dump_sid},
 		{"mS-DS-CreatorSID", False, dump_sid},
-		{"msExchMailboxGuid", False, dump_guid},
 		{NULL, True, NULL}
 	};
 	int i;
@@ -1972,7 +1802,7 @@
 		if (StrCaseCmp(handlers[i].name, field) == 0) {
 			if (!values) /* first time, indicate string or not */
 				return handlers[i].string;
-			handlers[i].handler(ads, field, (struct berval **) values);
+			handlers[i].handler(field, (struct berval **) values);
 			break;
 		}
 	}
@@ -2008,7 +1838,7 @@
  * @param data_area user-defined area to pass to function
  **/
  void ads_process_results(ADS_STRUCT *ads, LDAPMessage *res,
-			  bool (*fn)(ADS_STRUCT *, char *, void **, void *),
+			  BOOL(*fn)(char *, void **, void *),
 			  void *data_area)
 {
 	LDAPMessage *msg;
@@ -2022,30 +1852,30 @@
 		char *utf8_field;
 		BerElement *b;
 	
-		for (utf8_field=ldap_first_attribute(ads->ldap.ld,
+		for (utf8_field=ldap_first_attribute(ads->ld,
 						     (LDAPMessage *)msg,&b); 
 		     utf8_field;
-		     utf8_field=ldap_next_attribute(ads->ldap.ld,
+		     utf8_field=ldap_next_attribute(ads->ld,
 						    (LDAPMessage *)msg,b)) {
 			struct berval **ber_vals;
 			char **str_vals, **utf8_vals;
 			char *field;
-			bool string; 
+			BOOL string; 
 
 			pull_utf8_talloc(ctx, &field, utf8_field);
-			string = fn(ads, field, NULL, data_area);
+			string = fn(field, NULL, data_area);
 
 			if (string) {
-				utf8_vals = ldap_get_values(ads->ldap.ld,
+				utf8_vals = ldap_get_values(ads->ld,
 					       	 (LDAPMessage *)msg, field);
 				str_vals = ads_pull_strvals(ctx, 
 						  (const char **) utf8_vals);
-				fn(ads, field, (void **) str_vals, data_area);
+				fn(field, (void **) str_vals, data_area);
 				ldap_value_free(utf8_vals);
 			} else {
-				ber_vals = ldap_get_values_len(ads->ldap.ld, 
+				ber_vals = ldap_get_values_len(ads->ld, 
 						 (LDAPMessage *)msg, field);
-				fn(ads, field, (void **) ber_vals, data_area);
+				fn(field, (void **) ber_vals, data_area);
 
 				ldap_value_free_len(ber_vals);
 			}
@@ -2053,7 +1883,7 @@
 		}
 		ber_free(b, 0);
 		talloc_free_children(ctx);
-		fn(ads, NULL, NULL, data_area); /* completed an entry */
+		fn(NULL, NULL, data_area); /* completed an entry */
 
 	}
 	talloc_destroy(ctx);
@@ -2067,7 +1897,7 @@
  **/
 int ads_count_replies(ADS_STRUCT *ads, void *res)
 {
-	return ldap_count_entries(ads->ldap.ld, (LDAPMessage *)res);
+	return ldap_count_entries(ads->ld, (LDAPMessage *)res);
 }
 
 /**
@@ -2078,7 +1908,7 @@
  **/
  LDAPMessage *ads_first_entry(ADS_STRUCT *ads, LDAPMessage *res)
 {
-	return ldap_first_entry(ads->ldap.ld, res);
+	return ldap_first_entry(ads->ld, res);
 }
 
 /**
@@ -2089,7 +1919,7 @@
  **/
  LDAPMessage *ads_next_entry(ADS_STRUCT *ads, LDAPMessage *res)
 {
-	return ldap_next_entry(ads->ldap.ld, res);
+	return ldap_next_entry(ads->ld, res);
 }
 
 /**
@@ -2100,7 +1930,7 @@
  **/
  LDAPMessage *ads_first_message(ADS_STRUCT *ads, LDAPMessage *res)
 {
-	return ldap_first_message(ads->ldap.ld, res);
+	return ldap_first_message(ads->ld, res);
 }
 
 /**
@@ -2111,7 +1941,7 @@
  **/
  LDAPMessage *ads_next_message(ADS_STRUCT *ads, LDAPMessage *res)
 {
-	return ldap_next_message(ads->ldap.ld, res);
+	return ldap_next_message(ads->ld, res);
 }
 
 /**
@@ -2130,7 +1960,7 @@
 	char *ux_string;
 	size_t rc;
 
-	values = ldap_get_values(ads->ldap.ld, msg, field);
+	values = ldap_get_values(ads->ld, msg, field);
 	if (!values)
 		return NULL;
 	
@@ -2161,7 +1991,7 @@
 	char **ret = NULL;
 	int i;
 
-	values = ldap_get_values(ads->ldap.ld, msg, field);
+	values = ldap_get_values(ads->ld, msg, field);
 	if (!values)
 		return NULL;
 
@@ -2204,7 +2034,7 @@
 			       char **current_strings,
 			       const char **next_attribute,
 			       size_t *num_strings,
-			       bool *more_strings)
+			       BOOL *more_strings)
 {
 	char *attr;
 	char *expected_range_attrib, *range_attr;
@@ -2224,9 +2054,9 @@
 	expected_range_attrib = talloc_asprintf(mem_ctx, "%s;Range=", field);
 
 	/* look for Range result */
-	for (attr = ldap_first_attribute(ads->ldap.ld, (LDAPMessage *)msg, &ptr); 
+	for (attr = ldap_first_attribute(ads->ld, (LDAPMessage *)msg, &ptr); 
 	     attr; 
-	     attr = ldap_next_attribute(ads->ldap.ld, (LDAPMessage *)msg, ptr)) {
+	     attr = ldap_next_attribute(ads->ld, (LDAPMessage *)msg, ptr)) {
 		/* we ignore the fact that this is utf8, as all attributes are ascii... */
 		if (strnequal(attr, expected_range_attrib, strlen(expected_range_attrib))) {
 			range_attr = attr;
@@ -2321,12 +2151,12 @@
  * @param v Pointer to int to store result
  * @return boolean inidicating success
 */
- bool ads_pull_uint32(ADS_STRUCT *ads, LDAPMessage *msg, const char *field,
+ BOOL ads_pull_uint32(ADS_STRUCT *ads, LDAPMessage *msg, const char *field,
 		      uint32 *v)
 {
 	char **values;
 
-	values = ldap_get_values(ads->ldap.ld, msg, field);
+	values = ldap_get_values(ads->ld, msg, field);
 	if (!values)
 		return False;
 	if (!values[0]) {
@@ -2346,12 +2176,12 @@
  * @param guid 37-byte area to receive text guid
  * @return boolean indicating success
  **/
- bool ads_pull_guid(ADS_STRUCT *ads, LDAPMessage *msg, struct GUID *guid)
+ BOOL ads_pull_guid(ADS_STRUCT *ads, LDAPMessage *msg, struct GUID *guid)
 {
 	char **values;
 	UUID_FLAT flat_guid;
 
-	values = ldap_get_values(ads->ldap.ld, msg, "objectGUID");
+	values = ldap_get_values(ads->ld, msg, "objectGUID");
 	if (!values)
 		return False;
 	
@@ -2375,13 +2205,13 @@
  * @param sid Pointer to sid to store result
  * @return boolean inidicating success
 */
- bool ads_pull_sid(ADS_STRUCT *ads, LDAPMessage *msg, const char *field,
+ BOOL ads_pull_sid(ADS_STRUCT *ads, LDAPMessage *msg, const char *field,
 		   DOM_SID *sid)
 {
 	struct berval **values;
-	bool ret = False;
+	BOOL ret = False;
 
-	values = ldap_get_values_len(ads->ldap.ld, msg, field);
+	values = ldap_get_values_len(ads->ld, msg, field);
 
 	if (!values)
 		return False;
@@ -2406,10 +2236,10 @@
 		   LDAPMessage *msg, const char *field, DOM_SID **sids)
 {
 	struct berval **values;
-	bool ret;
+	BOOL ret;
 	int count, i;
 
-	values = ldap_get_values_len(ads->ldap.ld, msg, field);
+	values = ldap_get_values_len(ads->ld, msg, field);
 
 	if (!values)
 		return 0;
@@ -2431,8 +2261,8 @@
 	for (i=0; values[i]; i++) {
 		ret = sid_parse(values[i]->bv_val, values[i]->bv_len, &(*sids)[count]);
 		if (ret) {
-			DEBUG(10, ("pulling SID: %s\n",
-				   sid_string_dbg(&(*sids)[count])));
+			fstring sid;
+			DEBUG(10, ("pulling SID: %s\n", sid_to_string(sid, &(*sids)[count])));
 			count++;
 		}
 	}
@@ -2450,26 +2280,24 @@
  * @param sd Pointer to *SEC_DESC to store result (talloc()ed)
  * @return boolean inidicating success
 */
- bool ads_pull_sd(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx,
+ BOOL ads_pull_sd(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx,
 		  LDAPMessage *msg, const char *field, SEC_DESC **sd)
 {
 	struct berval **values;
-	bool ret = true;
+	BOOL ret = False;
 
-	values = ldap_get_values_len(ads->ldap.ld, msg, field);
+	values = ldap_get_values_len(ads->ld, msg, field);
 
-	if (!values) return false;
+	if (!values) return False;
 
 	if (values[0]) {
-		NTSTATUS status;
-		status = unmarshall_sec_desc(mem_ctx,
-					     (uint8 *)values[0]->bv_val,
-					     values[0]->bv_len, sd);
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(0, ("unmarshall_sec_desc failed: %s\n",
-				  nt_errstr(status)));
-			ret = false;
-		}
+		prs_struct ps;
+		prs_init(&ps, values[0]->bv_len, mem_ctx, UNMARSHALL);
+		prs_copy_data_in(&ps, values[0]->bv_val, values[0]->bv_len);
+		prs_set_offset(&ps,0);
+
+		ret = sec_io_desc("sd", sd, &ps, 1);
+		prs_mem_free(&ps);
 	}
 	
 	ldap_value_free_len(values);
@@ -2575,7 +2403,7 @@
 
         /* establish a new ldap tcp session if necessary */
 
-	if ( !ads->ldap.ld ) {
+	if ( !ads->ld ) {
 		if ( (ads_s = ads_init( ads->server.realm, ads->server.workgroup, 
 			ads->server.ldap_server )) == NULL )
 		{
@@ -2636,7 +2464,7 @@
 
         /* establish a new ldap tcp session if necessary */
 
-	if ( !ads->ldap.ld ) {
+	if ( !ads->ld ) {
 		if ( (ads_s = ads_init( ads->server.realm, ads->server.workgroup, 
 			ads->server.ldap_server )) == NULL )
 		{
@@ -2756,8 +2584,8 @@
 {
 	ADS_STATUS status;
 	LDAPMessage *res;
-	const char *parent, *filter;
-	char *config_context = NULL;
+	const char *parent, *config_context, *filter;
+	const char *attrs[] = { "configurationNamingContext", NULL };
 	char *dn;
 
 	/* shortcut a query */
@@ -2765,18 +2593,26 @@
 		return ads_site_dn(ads, mem_ctx, site_dn);
 	}
 
-	status = ads_config_path(ads, mem_ctx, &config_context);
+	status = ads_do_search(ads, "", LDAP_SCOPE_BASE, "(objectclass=*)", attrs, &res);
 	if (!ADS_ERR_OK(status)) {
 		return status;
 	}
 
+	config_context = ads_pull_string(ads, mem_ctx, res, "configurationNamingContext");
+	if (config_context == NULL) {
+		ads_msgfree(ads, res);
+		return ADS_ERROR(LDAP_NO_MEMORY);
+	}
+
 	filter = talloc_asprintf(mem_ctx, "(cn=%s)", computer_name);
 	if (filter == NULL) {
+		ads_msgfree(ads, res);
 		return ADS_ERROR(LDAP_NO_MEMORY);
 	}
 
-	status = ads_do_search(ads, config_context, LDAP_SCOPE_SUBTREE, 
-			       filter, NULL, &res);
+	ads_msgfree(ads, res);
+
+	status = ads_do_search(ads, config_context, LDAP_SCOPE_SUBTREE, filter, NULL, &res);
 	if (!ADS_ERR_OK(status)) {
 		return status;
 	}
@@ -2825,27 +2661,34 @@
 {
 	ADS_STATUS status;
 	LDAPMessage *res;
-	const char *base;
-	char *config_context = NULL;
-	const char *attrs[] = { "uPNSuffixes", NULL };
+	const char *config_context, *base;
+	const char *attrs[] = { "configurationNamingContext", NULL };
+	const char *attrs2[] = { "uPNSuffixes", NULL };
 
-	status = ads_config_path(ads, mem_ctx, &config_context);
+	status = ads_do_search(ads, "", LDAP_SCOPE_BASE, "(objectclass=*)", attrs, &res);
 	if (!ADS_ERR_OK(status)) {
 		return status;
 	}
 
+	config_context = ads_pull_string(ads, mem_ctx, res, "configurationNamingContext");
+	if (config_context == NULL) {
+		ads_msgfree(ads, res);
+		return ADS_ERROR(LDAP_NO_MEMORY);
+	}
+
+	ads_msgfree(ads, res);
+
 	base = talloc_asprintf(mem_ctx, "cn=Partitions,%s", config_context);
 	if (base == NULL) {
 		return ADS_ERROR(LDAP_NO_MEMORY);
 	}
 
-	status = ads_search_dn(ads, &res, base, attrs);
+	status = ads_search_dn(ads, &res, base, attrs2); 
 	if (!ADS_ERR_OK(status)) {
 		return status;
 	}
 
 	if (ads_count_replies(ads, res) != 1) {
-		ads_msgfree(ads, res);
 		return ADS_ERROR(LDAP_NO_SUCH_OBJECT);
 	}
 
@@ -2861,88 +2704,23 @@
 }
 
 /**
- * get the joinable ous for a domain
- * @param ads connection to ads server
- * @param mem_ctx Pointer to talloc context
- * @param ous Pointer to an array of ous
- * @param num_ous Pointer to the number of ous
- * @return status of search
- **/
-ADS_STATUS ads_get_joinable_ous(ADS_STRUCT *ads,
-				TALLOC_CTX *mem_ctx,
-				char ***ous,
-				size_t *num_ous)
-{
-	ADS_STATUS status;
-	LDAPMessage *res = NULL;
-	LDAPMessage *msg = NULL;
-	const char *attrs[] = { "dn", NULL };
-	int count = 0;
-
-	status = ads_search(ads, &res,
-			    "(|(objectClass=domain)(objectclass=organizationalUnit))",
-			    attrs);
-	if (!ADS_ERR_OK(status)) {
-		return status;
-	}
-
-	count = ads_count_replies(ads, res);
-	if (count < 1) {
-		ads_msgfree(ads, res);
-		return ADS_ERROR(LDAP_NO_RESULTS_RETURNED);
-	}
-
-	for (msg = ads_first_entry(ads, res); msg;
-	     msg = ads_next_entry(ads, msg)) {
-
-		char *dn = NULL;
-
-		dn = ads_get_dn(ads, msg);
-		if (!dn) {
-			ads_msgfree(ads, res);
-			return ADS_ERROR(LDAP_NO_MEMORY);
-		}
-
-		if (!add_string_to_array(mem_ctx, dn,
-					 (const char ***)ous,
-					 (int *)num_ous)) {
-			ads_memfree(ads, dn);
-			ads_msgfree(ads, res);
-			return ADS_ERROR(LDAP_NO_MEMORY);
-		}
-
-		ads_memfree(ads, dn);
-	}
-
-	ads_msgfree(ads, res);
-
-	return status;
-}
-
-
-/**
  * pull a DOM_SID from an extended dn string
  * @param mem_ctx TALLOC_CTX 
- * @param extended_dn string
  * @param flags string type of extended_dn
  * @param sid pointer to a DOM_SID
  * @return boolean inidicating success
  **/
-bool ads_get_sid_from_extended_dn(TALLOC_CTX *mem_ctx, 
-				  const char *extended_dn, 
+BOOL ads_get_sid_from_extended_dn(TALLOC_CTX *mem_ctx, 
+				  const char *dn, 
 				  enum ads_extended_dn_flags flags, 
 				  DOM_SID *sid)
 {
-	char *p, *q, *dn;
+	char *p, *q;
 
-	if (!extended_dn) {
+	if (!dn) {
 		return False;
 	}
 
-	/* otherwise extended_dn gets stripped off */
-	if ((dn = talloc_strdup(mem_ctx, extended_dn)) == NULL) {
-		return False;
-	}
 	/* 
 	 * ADS_EXTENDED_DN_HEX_STRING:
 	 * <GUID=238e1963cb390f4bb032ba0105525a29>;<SID=010500000000000515000000bb68c8fd6b61b427572eb04556040000>;CN=gd,OU=berlin,OU=suse,DC=ber,DC=suse,DC=de
@@ -2979,10 +2757,10 @@
 		}
 		break;
 	case ADS_EXTENDED_DN_HEX_STRING: {
-		fstring buf;
+		pstring buf;
 		size_t buf_len;
 
-		buf_len = strhex_to_str(buf, sizeof(buf), p, strlen(p));
+		buf_len = strhex_to_str(buf, strlen(p), p);
 		if (buf_len == 0) {
 			return False;
 		}
@@ -3089,26 +2867,26 @@
 	ADS_STATUS status;
 	int count = 0;
 	char *name = NULL;
-
-	status = ads_find_machine_acct(ads, &res, machine_name);
+	
+	status = ads_find_machine_acct(ads, &res, global_myname());
 	if (!ADS_ERR_OK(status)) {
 		DEBUG(0,("ads_get_upn: Failed to find account for %s\n",
 			global_myname()));
 		goto out;
 	}
-
+		
 	if ( (count = ads_count_replies(ads, res)) != 1 ) {
 		DEBUG(1,("ads_get_upn: %d entries returned!\n", count));
 		goto out;
 	}
-
+		
 	if ( (name = ads_pull_string(ads, ctx, res, "userPrincipalName")) == NULL ) {
 		DEBUG(2,("ads_get_upn: No userPrincipalName attribute!\n"));
 	}
 
 out:
 	ads_msgfree(ads, res);
-
+	
 	return name;
 }
 
@@ -3239,7 +3017,7 @@
 
 	hostnameDN = ads_get_dn(ads, (LDAPMessage *)msg);
 
-	rc = ldap_delete_ext_s(ads->ldap.ld, hostnameDN, pldap_control, NULL);
+	rc = ldap_delete_ext_s(ads->ld, hostnameDN, pldap_control, NULL);
 	if (rc) {
 		DEBUG(3,("ldap_delete_ext_s failed with error code %d\n", rc));
 	}else {
@@ -3320,317 +3098,4 @@
 	return status;
 }
 
-/**
- * pull all token-sids from an LDAP dn
- * @param ads connection to ads server
- * @param mem_ctx TALLOC_CTX for allocating sid array
- * @param dn of LDAP object
- * @param user_sid pointer to DOM_SID (objectSid)
- * @param primary_group_sid pointer to DOM_SID (self composed)
- * @param sids pointer to sid array to allocate
- * @param num_sids counter of SIDs pulled
- * @return status of token query
- **/
- ADS_STATUS ads_get_tokensids(ADS_STRUCT *ads,
-			      TALLOC_CTX *mem_ctx,
-			      const char *dn,
-			      DOM_SID *user_sid,
-			      DOM_SID *primary_group_sid,
-			      DOM_SID **sids,
-			      size_t *num_sids)
-{
-	ADS_STATUS status;
-	LDAPMessage *res = NULL;
-	int count = 0;
-	size_t tmp_num_sids;
-	DOM_SID *tmp_sids;
-	DOM_SID tmp_user_sid;
-	DOM_SID tmp_primary_group_sid;
-	uint32 pgid;
-	const char *attrs[] = {
-		"objectSid",
-		"tokenGroups",
-		"primaryGroupID",
-		NULL
-	};
-
-	status = ads_search_retry_dn(ads, &res, dn, attrs);
-	if (!ADS_ERR_OK(status)) {
-		return status;
-	}
-
-	count = ads_count_replies(ads, res);
-	if (count != 1) {
-		ads_msgfree(ads, res);
-		return ADS_ERROR_LDAP(LDAP_NO_SUCH_OBJECT);
-	}
-
-	if (!ads_pull_sid(ads, res, "objectSid", &tmp_user_sid)) {
-		ads_msgfree(ads, res);
-		return ADS_ERROR_LDAP(LDAP_NO_MEMORY);
-	}
-
-	if (!ads_pull_uint32(ads, res, "primaryGroupID", &pgid)) {
-		ads_msgfree(ads, res);
-		return ADS_ERROR_LDAP(LDAP_NO_MEMORY);
-	}
-
-	{
-		/* hack to compose the primary group sid without knowing the
-		 * domsid */
-
-		DOM_SID domsid;
-		uint32 dummy_rid;
-
-		sid_copy(&domsid, &tmp_user_sid);
-
-		if (!sid_split_rid(&domsid, &dummy_rid)) {
-			ads_msgfree(ads, res);
-			return ADS_ERROR_LDAP(LDAP_NO_MEMORY);
-		}
-
-		if (!sid_compose(&tmp_primary_group_sid, &domsid, pgid)) {
-			ads_msgfree(ads, res);
-			return ADS_ERROR_LDAP(LDAP_NO_MEMORY);
-		}
-	}
-
-	tmp_num_sids = ads_pull_sids(ads, mem_ctx, res, "tokenGroups", &tmp_sids);
-
-	if (tmp_num_sids == 0 || !tmp_sids) {
-		ads_msgfree(ads, res);
-		return ADS_ERROR_LDAP(LDAP_NO_MEMORY);
-	}
-
-	if (num_sids) {
-		*num_sids = tmp_num_sids;
-	}
-
-	if (sids) {
-		*sids = tmp_sids;
-	}
-
-	if (user_sid) {
-		*user_sid = tmp_user_sid;
-	}
-
-	if (primary_group_sid) {
-		*primary_group_sid = tmp_primary_group_sid;
-	}
-
-	DEBUG(10,("ads_get_tokensids: returned %d sids\n", (int)tmp_num_sids + 2));
-
-	ads_msgfree(ads, res);
-	return ADS_ERROR_LDAP(LDAP_SUCCESS);
-}
-
-/**
- * Find a sAMAccoutName in LDAP
- * @param ads connection to ads server
- * @param mem_ctx TALLOC_CTX for allocating sid array
- * @param samaccountname to search
- * @param uac_ret uint32 pointer userAccountControl attribute value
- * @param dn_ret pointer to dn
- * @return status of token query
- **/
-ADS_STATUS ads_find_samaccount(ADS_STRUCT *ads,
-			       TALLOC_CTX *mem_ctx,
-			       const char *samaccountname,
-			       uint32 *uac_ret,
-			       const char **dn_ret)
-{
-	ADS_STATUS status;
-	const char *attrs[] = { "userAccountControl", NULL };
-	const char *filter;
-	LDAPMessage *res = NULL;
-	char *dn = NULL;
-	uint32 uac = 0;
-
-	filter = talloc_asprintf(mem_ctx, "(&(objectclass=user)(sAMAccountName=%s))",
-		samaccountname);
-	if (filter == NULL) {
-		status = ADS_ERROR_NT(NT_STATUS_NO_MEMORY);
-		goto out;
-	}
-
-	status = ads_do_search_all(ads, ads->config.bind_path,
-				   LDAP_SCOPE_SUBTREE,
-				   filter, attrs, &res);
-	
-	if (!ADS_ERR_OK(status)) {
-		goto out;
-	}
-
-	if (ads_count_replies(ads, res) != 1) {
-		status = ADS_ERROR(LDAP_NO_RESULTS_RETURNED);
-		goto out;
-	}
-
-	dn = ads_get_dn(ads, res);
-	if (dn == NULL) {
-		status = ADS_ERROR(LDAP_NO_MEMORY);
-		goto out;
-	}
-
-	if (!ads_pull_uint32(ads, res, "userAccountControl", &uac)) {
-		status = ADS_ERROR(LDAP_NO_SUCH_ATTRIBUTE);
-		goto out;
-	}
-
-	if (uac_ret) {
-		*uac_ret = uac;
-	}
-
-	if (dn_ret) {
-		*dn_ret = talloc_strdup(mem_ctx, dn);
-		if (!*dn_ret) {
-			status = ADS_ERROR(LDAP_NO_MEMORY);
-			goto out;
-		}
-	}
- out:
-	ads_memfree(ads, dn);
-	ads_msgfree(ads, res);
-
-	return status;
-}
-
-/**
- * find our configuration path 
- * @param ads connection to ads server
- * @param mem_ctx Pointer to talloc context
- * @param config_path Pointer to the config path
- * @return status of search
- **/
-ADS_STATUS ads_config_path(ADS_STRUCT *ads, 
-			   TALLOC_CTX *mem_ctx, 
-			   char **config_path)
-{
-	ADS_STATUS status;
-	LDAPMessage *res = NULL;
-	const char *config_context = NULL;
-	const char *attrs[] = { "configurationNamingContext", NULL };
-
-	status = ads_do_search(ads, "", LDAP_SCOPE_BASE, 
-			       "(objectclass=*)", attrs, &res);
-	if (!ADS_ERR_OK(status)) {
-		return status;
-	}
-
-	config_context = ads_pull_string(ads, mem_ctx, res, 
-					 "configurationNamingContext");
-	ads_msgfree(ads, res);
-	if (!config_context) {
-		return ADS_ERROR(LDAP_NO_MEMORY);
-	}
-
-	if (config_path) {
-		*config_path = talloc_strdup(mem_ctx, config_context);
-		if (!*config_path) {
-			return ADS_ERROR(LDAP_NO_MEMORY);
-		}
-	}
-
-	return ADS_ERROR(LDAP_SUCCESS);
-}
-
-/**
- * find the displayName of an extended right 
- * @param ads connection to ads server
- * @param config_path The config path
- * @param mem_ctx Pointer to talloc context
- * @param GUID struct of the rightsGUID
- * @return status of search
- **/
-const char *ads_get_extended_right_name_by_guid(ADS_STRUCT *ads, 
-						const char *config_path, 
-						TALLOC_CTX *mem_ctx, 
-						const struct GUID *rights_guid)
-{
-	ADS_STATUS rc;
-	LDAPMessage *res = NULL;
-	char *expr = NULL;
-	const char *attrs[] = { "displayName", NULL };
-	const char *result = NULL;
-	const char *path;
-
-	if (!ads || !mem_ctx || !rights_guid) {
-		goto done;
-	}
-
-	expr = talloc_asprintf(mem_ctx, "(rightsGuid=%s)", 
-			       smb_uuid_string(mem_ctx, *rights_guid));
-	if (!expr) {
-		goto done;
-	}
-
-	path = talloc_asprintf(mem_ctx, "cn=Extended-Rights,%s", config_path);
-	if (!path) {
-		goto done;
-	}
-
-	rc = ads_do_search_retry(ads, path, LDAP_SCOPE_SUBTREE, 
-				 expr, attrs, &res);
-	if (!ADS_ERR_OK(rc)) {
-		goto done;
-	}
-
-	if (ads_count_replies(ads, res) != 1) {
-		goto done;
-	}
-
-	result = ads_pull_string(ads, mem_ctx, res, "displayName");
-
- done:
-	ads_msgfree(ads, res);
-	return result;
-	
-}
-
-/**
- * verify or build and verify an account ou
- * @param mem_ctx Pointer to talloc context
- * @param ads connection to ads server
- * @param account_ou
- * @return status of search
- **/
-
-ADS_STATUS ads_check_ou_dn(TALLOC_CTX *mem_ctx,
-			   ADS_STRUCT *ads,
-			   const char **account_ou)
-{
-	struct ldb_dn *name_dn = NULL;
-	const char *name = NULL;
-	char *ou_string = NULL;
-
-	name_dn = ldb_dn_explode(mem_ctx, *account_ou);
-	if (name_dn) {
-		return ADS_SUCCESS;
-	}
-
-	ou_string = ads_ou_string(ads, *account_ou);
-	if (!ou_string) {
-		return ADS_ERROR_LDAP(LDAP_INVALID_DN_SYNTAX);
-	}
-
-	name = talloc_asprintf(mem_ctx, "%s,%s", ou_string,
-			       ads->config.bind_path);
-	SAFE_FREE(ou_string);
-	if (!name) {
-		return ADS_ERROR_LDAP(LDAP_NO_MEMORY);
-	}
-
-	name_dn = ldb_dn_explode(mem_ctx, name);
-	if (!name_dn) {
-		return ADS_ERROR_LDAP(LDAP_INVALID_DN_SYNTAX);
-	}
-
-	*account_ou = talloc_strdup(mem_ctx, name);
-	if (!*account_ou) {
-		return ADS_ERROR_LDAP(LDAP_NO_MEMORY);
-	}
-
-	return ADS_SUCCESS;
-}
-
 #endif

Modified: branches/samba/upstream/source/libads/ldap_printer.c
===================================================================
--- branches/samba/upstream/source/libads/ldap_printer.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libads/ldap_printer.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -43,7 +44,7 @@
 	if (ads_count_replies(ads, *res) != 1) {
 		return ADS_ERROR(LDAP_NO_SUCH_OBJECT);
 	}
-	srv_dn = ldap_get_dn(ads->ldap.ld, *res);
+	srv_dn = ldap_get_dn(ads->ld, *res);
 	if (srv_dn == NULL) {
 		return ADS_ERROR(LDAP_NO_MEMORY);
 	}
@@ -99,7 +100,7 @@
 /*
   map a REG_SZ to an ldap mod
 */
-static bool map_sz(TALLOC_CTX *ctx, ADS_MODLIST *mods, 
+static BOOL map_sz(TALLOC_CTX *ctx, ADS_MODLIST *mods, 
 			    const REGISTRY_VALUE *value)
 {
 	char *str_value = NULL;
@@ -120,7 +121,7 @@
 /*
   map a REG_DWORD to an ldap mod
 */
-static bool map_dword(TALLOC_CTX *ctx, ADS_MODLIST *mods, 
+static BOOL map_dword(TALLOC_CTX *ctx, ADS_MODLIST *mods, 
 		      const REGISTRY_VALUE *value)
 {
 	char *str_value = NULL;
@@ -139,7 +140,7 @@
 /*
   map a boolean REG_BINARY to an ldap mod
 */
-static bool map_bool(TALLOC_CTX *ctx, ADS_MODLIST *mods,
+static BOOL map_bool(TALLOC_CTX *ctx, ADS_MODLIST *mods,
 		     const REGISTRY_VALUE *value)
 {
 	char *str_value;
@@ -159,7 +160,7 @@
 /*
   map a REG_MULTI_SZ to an ldap mod
 */
-static bool map_multi_sz(TALLOC_CTX *ctx, ADS_MODLIST *mods,
+static BOOL map_multi_sz(TALLOC_CTX *ctx, ADS_MODLIST *mods,
 			 const REGISTRY_VALUE *value)
 {
 	char **str_values = NULL;
@@ -198,7 +199,7 @@
 
 struct valmap_to_ads {
 	const char *valname;
-	bool (*fn)(TALLOC_CTX *, ADS_MODLIST *, const REGISTRY_VALUE *);
+	BOOL (*fn)(TALLOC_CTX *, ADS_MODLIST *, const REGISTRY_VALUE *);
 };
 
 /*
@@ -347,7 +348,7 @@
 	return result;
 }
 
-bool get_local_printer_publishing_data(TALLOC_CTX *mem_ctx,
+BOOL get_local_printer_publishing_data(TALLOC_CTX *mem_ctx,
 				       ADS_MODLIST *mods,
 				       NT_PRINTER_DATA *data)
 {

Modified: branches/samba/upstream/source/libads/ldap_schema.c
===================================================================
--- branches/samba/upstream/source/libads/ldap_schema.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libads/ldap_schema.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,12 +1,12 @@
 /* 
    Unix SMB/CIFS implementation.
    ads (active directory) utility library
-   Copyright (C) Guenther Deschner 2005-2007
+   Copyright (C) Guenther Deschner 2005-2006
    Copyright (C) Gerald (Jerry) Carter 2006
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -48,13 +49,13 @@
 
 	for (i=0; i<num_OIDs; i++) {
 
-		if ((expr = talloc_asprintf_append_buffer(expr, "(attributeId=%s)", 
+		if ((expr = talloc_asprintf_append(expr, "(attributeId=%s)", 
 						   OIDs[i])) == NULL) {
 			return ADS_ERROR(LDAP_NO_MEMORY);
 		}
 	}
 
-	if ((expr = talloc_asprintf_append_buffer(expr, ")")) == NULL) {
+	if ((expr = talloc_asprintf_append(expr, ")")) == NULL) {
 		return ADS_ERROR(LDAP_NO_MEMORY);
 	}
 
@@ -106,51 +107,6 @@
 	return status;
 }
 
-const char *ads_get_attrname_by_guid(ADS_STRUCT *ads, 
-				     const char *schema_path, 
-				     TALLOC_CTX *mem_ctx, 
-				     const struct GUID *schema_guid)
-{
-	ADS_STATUS rc;
-	LDAPMessage *res = NULL;
-	char *expr = NULL;
-	const char *attrs[] = { "lDAPDisplayName", NULL };
-	const char *result = NULL;
-	char *guid_bin = NULL;
-
-	if (!ads || !mem_ctx || !schema_guid) {
-		goto done;
-	}
-
-	guid_bin = guid_binstring(schema_guid);
-	if (!guid_bin) {
-		goto done;
-	}
-
-	expr = talloc_asprintf(mem_ctx, "(schemaIDGUID=%s)", guid_bin);
-	if (!expr) {
-		goto done;
-	}
-
-	rc = ads_do_search_retry(ads, schema_path, LDAP_SCOPE_SUBTREE, 
-				 expr, attrs, &res);
-	if (!ADS_ERR_OK(rc)) {
-		goto done;
-	}
-
-	if (ads_count_replies(ads, res) != 1) {
-		goto done;
-	}
-
-	result = ads_pull_string(ads, mem_ctx, res, "lDAPDisplayName");
-
- done:
-	SAFE_FREE(guid_bin);
-	ads_msgfree(ads, res);
-	return result;
-	
-}
-
 const char *ads_get_attrname_by_oid(ADS_STRUCT *ads, const char *schema_path, TALLOC_CTX *mem_ctx, const char * OID)
 {
 	ADS_STATUS rc;
@@ -192,10 +148,11 @@
 	ads_msgfree(ads, res);
 	return NULL;
 }
+
 /*********************************************************************
 *********************************************************************/
 
-ADS_STATUS ads_schema_path(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx, char **schema_path)
+static ADS_STATUS ads_schema_path(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx, char **schema_path)
 {
 	ADS_STATUS status;
 	LDAPMessage *res;
@@ -248,38 +205,14 @@
 					ADS_ATTR_SFU_SHELL_OID,
 					ADS_ATTR_SFU_GECOS_OID};
 
-	const char *oids_sfu20[] = { 	ADS_ATTR_SFU20_UIDNUMBER_OID,
-					ADS_ATTR_SFU20_GIDNUMBER_OID,
-					ADS_ATTR_SFU20_HOMEDIR_OID,
-					ADS_ATTR_SFU20_SHELL_OID,
-					ADS_ATTR_SFU20_GECOS_OID};
-
 	const char *oids_rfc2307[] = {	ADS_ATTR_RFC2307_UIDNUMBER_OID,
 					ADS_ATTR_RFC2307_GIDNUMBER_OID,
 					ADS_ATTR_RFC2307_HOMEDIR_OID,
 					ADS_ATTR_RFC2307_SHELL_OID,
 					ADS_ATTR_RFC2307_GECOS_OID };
 
-	DEBUG(10,("ads_check_posix_schema_mapping for schema mode: %d\n", map_type));
+	DEBUG(10,("ads_check_posix_schema_mapping\n"));
 
-	switch (map_type) {
-	
-		case WB_POSIX_MAP_TEMPLATE:
-		case WB_POSIX_MAP_UNIXINFO:
-			DEBUG(10,("ads_check_posix_schema_mapping: nothing to do\n"));
-			return ADS_ERROR(LDAP_SUCCESS);
-
-		case WB_POSIX_MAP_SFU:
-		case WB_POSIX_MAP_SFU20:
-		case WB_POSIX_MAP_RFC2307:
-			break;
-
-		default:
-			DEBUG(0,("ads_check_posix_schema_mapping: "
-				 "unknown enum %d\n", map_type));
-			return ADS_ERROR(LDAP_PARAM_ERROR);
-	}
-
 	if ( (ctx = talloc_init("ads_check_posix_schema_mapping")) == NULL ) {
 		return ADS_ERROR(LDAP_NO_MEMORY);
 	}
@@ -295,25 +228,14 @@
 		goto done;
 	}
 
-	switch (map_type) {
-		case WB_POSIX_MAP_SFU:
-			status = ads_get_attrnames_by_oids(ads, ctx, schema_path, oids_sfu, 
-							   ARRAY_SIZE(oids_sfu), 
-							   &oids_out, &names_out, &num_names);
-			break;
-		case WB_POSIX_MAP_SFU20:
-			status = ads_get_attrnames_by_oids(ads, ctx, schema_path, oids_sfu20, 
-							   ARRAY_SIZE(oids_sfu20), 
-							   &oids_out, &names_out, &num_names);
-			break;
-		case WB_POSIX_MAP_RFC2307:
-			status = ads_get_attrnames_by_oids(ads, ctx, schema_path, oids_rfc2307, 
-							   ARRAY_SIZE(oids_rfc2307), 
-							   &oids_out, &names_out, &num_names);
-			break;
-		default:
-			status = ADS_ERROR_NT(NT_STATUS_INVALID_PARAMETER);
-			break;
+	if (map_type == WB_POSIX_MAP_SFU) {
+		status = ads_get_attrnames_by_oids(ads, ctx, schema_path, oids_sfu, 
+						   ARRAY_SIZE(oids_sfu), 
+						   &oids_out, &names_out, &num_names);
+	} else { 
+		status = ads_get_attrnames_by_oids(ads, ctx, schema_path, oids_rfc2307, 
+						   ARRAY_SIZE(oids_rfc2307), 
+						   &oids_out, &names_out, &num_names);
 	}
 
 	if (!ADS_ERR_OK(status)) {
@@ -327,36 +249,31 @@
 		DEBUGADD(10,("\tOID %s has name: %s\n", oids_out[i], names_out[i]));
 
 		if (strequal(ADS_ATTR_RFC2307_UIDNUMBER_OID, oids_out[i]) ||
-		    strequal(ADS_ATTR_SFU_UIDNUMBER_OID, oids_out[i]) ||
-		    strequal(ADS_ATTR_SFU20_UIDNUMBER_OID, oids_out[i])) {
+		    strequal(ADS_ATTR_SFU_UIDNUMBER_OID, oids_out[i])) {
 			schema->posix_uidnumber_attr = talloc_strdup(schema, names_out[i]);
 			continue;		       
 		}
 
 		if (strequal(ADS_ATTR_RFC2307_GIDNUMBER_OID, oids_out[i]) ||
-		    strequal(ADS_ATTR_SFU_GIDNUMBER_OID, oids_out[i]) ||
-		    strequal(ADS_ATTR_SFU20_GIDNUMBER_OID, oids_out[i])) {
+		    strequal(ADS_ATTR_SFU_GIDNUMBER_OID, oids_out[i])) {
 			schema->posix_gidnumber_attr = talloc_strdup(schema, names_out[i]);
 			continue;		
 		}
 
 		if (strequal(ADS_ATTR_RFC2307_HOMEDIR_OID, oids_out[i]) ||
-		    strequal(ADS_ATTR_SFU_HOMEDIR_OID, oids_out[i]) ||
-		    strequal(ADS_ATTR_SFU20_HOMEDIR_OID, oids_out[i])) {
+		    strequal(ADS_ATTR_SFU_HOMEDIR_OID, oids_out[i])) {
 			schema->posix_homedir_attr = talloc_strdup(schema, names_out[i]);
 			continue;			
 		}
 
 		if (strequal(ADS_ATTR_RFC2307_SHELL_OID, oids_out[i]) ||
-		    strequal(ADS_ATTR_SFU_SHELL_OID, oids_out[i]) ||
-		    strequal(ADS_ATTR_SFU20_SHELL_OID, oids_out[i])) {
+		    strequal(ADS_ATTR_SFU_SHELL_OID, oids_out[i])) {
 			schema->posix_shell_attr = talloc_strdup(schema, names_out[i]);
 			continue;			
 		}
 
 		if (strequal(ADS_ATTR_RFC2307_GECOS_OID, oids_out[i]) ||
-		    strequal(ADS_ATTR_SFU_GECOS_OID, oids_out[i]) ||
-		    strequal(ADS_ATTR_SFU20_GECOS_OID, oids_out[i])) {
+		    strequal(ADS_ATTR_SFU_GECOS_OID, oids_out[i])) {
 			schema->posix_gecos_attr = talloc_strdup(schema, names_out[i]);
 		}
 	}
@@ -376,7 +293,9 @@
 	status = ADS_ERROR(LDAP_SUCCESS);
 	
 done:
-	TALLOC_FREE(ctx);
+	if (ctx) {
+		talloc_destroy(ctx);
+	}
 
 	return status;
 }

Modified: branches/samba/upstream/source/libads/ldap_user.c
===================================================================
--- branches/samba/upstream/source/libads/ldap_user.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libads/ldap_user.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/source/libads/ldap_utils.c
===================================================================
--- branches/samba/upstream/source/libads/ldap_utils.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libads/ldap_utils.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,11 +4,10 @@
    Some Helpful wrappers on LDAP 
 
    Copyright (C) Andrew Tridgell 2001
-   Copyright (C) Guenther Deschner 2006,2007
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -38,15 +38,15 @@
 
 	*res = NULL;
 
-	if (!ads->ldap.ld &&
-	    time(NULL) - ads->ldap.last_attempt < ADS_RECONNECT_TIME) {
+	if (!ads->ld &&
+	    time(NULL) - ads->last_attempt < ADS_RECONNECT_TIME) {
 		return ADS_ERROR(LDAP_SERVER_DOWN);
 	}
 
 	bp = SMB_STRDUP(bind_path);
 
 	if (!bp) {
-		return ADS_ERROR(LDAP_NO_MEMORY);
+		return ADS_ERROR_NT(NT_STATUS_NO_MEMORY);
 	}
 
 	*res = NULL;
@@ -75,7 +75,11 @@
 		DEBUG(3,("Reopening ads connection to realm '%s' after error %s\n", 
 			 ads->config.realm, ads_errstr(status)));
 			 
-		ads_disconnect(ads);
+		if (ads->ld) {
+			ldap_unbind(ads->ld); 
+		}
+		
+		ads->ld = NULL;
 		status = ads_connect(ads);
 		
 		if (!ADS_ERR_OK(status)) {
@@ -159,45 +163,6 @@
 					"(objectclass=*)", attrs, &args, res);
 }
 
- ADS_STATUS ads_search_retry_dn_sd_flags(ADS_STRUCT *ads, LDAPMessage **res, 
-					 uint32 sd_flags,
-					 const char *dn, 
-					 const char **attrs)
-{
-	ads_control args;
-
-	args.control = ADS_SD_FLAGS_OID;
-	args.val = sd_flags;
-	args.critical = True;
-
-	return ads_do_search_retry_args(ads, dn, LDAP_SCOPE_BASE,
-					"(objectclass=*)", attrs, &args, res);
-}
-
- ADS_STATUS ads_search_retry_extended_dn_ranged(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx, 
-						const char *dn, 
-						const char **attrs,
-						enum ads_extended_dn_flags flags,
-						char ***strings,
-						size_t *num_strings)
-{
-	ads_control args;
-
-	args.control = ADS_EXTENDED_DN_OID;
-	args.val = flags;
-	args.critical = True;
-
-	/* we can only range process one attribute */
-	if (!attrs || !attrs[0] || attrs[1]) {
-		return ADS_ERROR_NT(NT_STATUS_INVALID_PARAMETER);
-	}
-
-	return ads_ranged_search(ads, mem_ctx, LDAP_SCOPE_BASE, dn, 
-				 "(objectclass=*)", &args, attrs[0],
-				 strings, num_strings);
-
-}
-
  ADS_STATUS ads_search_retry_sid(ADS_STRUCT *ads, LDAPMessage **res, 
 				 const DOM_SID *sid,
 				 const char **attrs)
@@ -222,152 +187,4 @@
 	return status;
 }
 
-ADS_STATUS ads_ranged_search(ADS_STRUCT *ads, 
-			     TALLOC_CTX *mem_ctx,
-			     int scope,
-			     const char *base,
-			     const char *filter,
-			     void *args,
-			     const char *range_attr,
-			     char ***strings,
-			     size_t *num_strings)
-{
-	ADS_STATUS status;
-	uint32 first_usn;
-	int num_retries = 0;
-	const char **attrs;
-	bool more_values = False;
-
-	*num_strings = 0;
-	*strings = NULL;
-
-	attrs = TALLOC_ARRAY(mem_ctx, const char *, 3);
-	ADS_ERROR_HAVE_NO_MEMORY(attrs);
-
-	attrs[0] = talloc_strdup(mem_ctx, range_attr);
-	attrs[1] = talloc_strdup(mem_ctx, "usnChanged");
-	attrs[2] = NULL;
-
-	ADS_ERROR_HAVE_NO_MEMORY(attrs[0]);
-	ADS_ERROR_HAVE_NO_MEMORY(attrs[1]);
-
-	do {
-		status = ads_ranged_search_internal(ads, mem_ctx, 
-						    scope, base, filter, 
-						    attrs, args, range_attr, 
-						    strings, num_strings,
-						    &first_usn, &num_retries, 
-						    &more_values);
-
-		if (NT_STATUS_EQUAL(STATUS_MORE_ENTRIES, ads_ntstatus(status))) {
-			continue;
-		}
-
-		if (!ADS_ERR_OK(status)) {
-			*num_strings = 0;
-			strings = NULL;
-			goto done;
-		}
-
-	} while (more_values);
-
- done:
-	DEBUG(10,("returning with %d strings\n", (int)*num_strings));
-
-	return status;
-}
-
-ADS_STATUS ads_ranged_search_internal(ADS_STRUCT *ads, 
-				      TALLOC_CTX *mem_ctx,
-				      int scope,
-				      const char *base,
-				      const char *filter,
-				      const char **attrs,
-				      void *args,
-				      const char *range_attr,
-				      char ***strings,
-				      size_t *num_strings,
-				      uint32 *first_usn,
-				      int *num_retries,
-				      bool *more_values)
-{
-	LDAPMessage *res = NULL;
-	ADS_STATUS status;
-	int count;
-	uint32 current_usn;
-
-	DEBUG(10, ("Searching for attrs[0] = %s, attrs[1] = %s\n", attrs[0], attrs[1]));
-
-	*more_values = False;
-
-	status = ads_do_search_retry_internal(ads, base, scope, filter, attrs, args, &res);
-
-	if (!ADS_ERR_OK(status)) {
-		DEBUG(1,("ads_search: %s\n",
-			 ads_errstr(status)));
-		return status;
-	}
-	
-	if (!res) {
-		return ADS_ERROR(LDAP_NO_MEMORY);
-	}
-
-	count = ads_count_replies(ads, res);
-	if (count == 0) {
-		ads_msgfree(ads, res);
-		return ADS_ERROR(LDAP_SUCCESS);
-	}
-
-	if (*num_strings == 0) {
-		if (!ads_pull_uint32(ads, res, "usnChanged", first_usn)) {
-			DEBUG(1, ("could not pull first usnChanged!\n"));
-			ads_msgfree(ads, res);
-			return ADS_ERROR(LDAP_NO_MEMORY);
-		}
-	}
-
-	if (!ads_pull_uint32(ads, res, "usnChanged", &current_usn)) {
-		DEBUG(1, ("could not pull current usnChanged!\n"));
-		ads_msgfree(ads, res);
-		return ADS_ERROR(LDAP_NO_MEMORY);
-	}
-
-	if (*first_usn != current_usn) {
-		DEBUG(5, ("USN on this record changed"
-			  " - restarting search\n"));
-		if (*num_retries < 5) {
-			(*num_retries)++;
-			*num_strings = 0;
-			ads_msgfree(ads, res);
-			return ADS_ERROR_NT(STATUS_MORE_ENTRIES);
-		} else {
-			DEBUG(5, ("USN on this record changed"
-				  " - restarted search too many times, aborting!\n"));
-			ads_msgfree(ads, res);
-			return ADS_ERROR(LDAP_NO_MEMORY);
-		}
-	}
-
-	*strings = ads_pull_strings_range(ads, mem_ctx, res,
-					 range_attr,
-					 *strings,
-					 &attrs[0],
-					 num_strings,
-					 more_values);
-
-	ads_msgfree(ads, res);
-
-	/* paranoia checks */
-	if (*strings == NULL && *more_values) {
-		DEBUG(0,("no strings found but more values???\n"));
-		return ADS_ERROR(LDAP_NO_MEMORY);
-	}
-	if (*num_strings == 0 && *more_values) {
-		DEBUG(0,("no strings found but more values???\n"));
-		return ADS_ERROR(LDAP_NO_MEMORY);
-	}
-
-	return (*more_values) ? ADS_ERROR_NT(STATUS_MORE_ENTRIES) : ADS_ERROR(LDAP_SUCCESS);
-}
-
 #endif

Deleted: branches/samba/upstream/source/libads/ndr.c
===================================================================
--- branches/samba/upstream/source/libads/ndr.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libads/ndr.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,118 +0,0 @@
-/*
-   Unix SMB/CIFS implementation.
-
-   debug print helpers
-
-   Copyright (C) Guenther Deschner 2008
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-
-void ndr_print_ads_auth_flags(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ADS_AUTH_DISABLE_KERBEROS", ADS_AUTH_DISABLE_KERBEROS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ADS_AUTH_NO_BIND", ADS_AUTH_NO_BIND, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ADS_AUTH_ANON_BIND", ADS_AUTH_ANON_BIND, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ADS_AUTH_SIMPLE_BIND", ADS_AUTH_SIMPLE_BIND, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ADS_AUTH_ALLOW_NTLMSSP", ADS_AUTH_ALLOW_NTLMSSP, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ADS_AUTH_SASL_SIGN", ADS_AUTH_SASL_SIGN, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ADS_AUTH_SASL_SEAL", ADS_AUTH_SASL_SEAL, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ADS_AUTH_SASL_FORCE", ADS_AUTH_SASL_FORCE, r);
-	ndr->depth--;
-}
-
-void ndr_print_ads_struct(struct ndr_print *ndr, const char *name, const struct ads_struct *r)
-{
-	if (!r) { return; }
-
-	ndr_print_struct(ndr, name, "ads_struct");
-	ndr->depth++;
-	ndr_print_bool(ndr, "is_mine", r->is_mine);
-	ndr_print_struct(ndr, name, "server");
-	ndr->depth++;
-	ndr_print_string(ndr, "realm", r->server.realm);
-	ndr_print_string(ndr, "workgroup", r->server.workgroup);
-	ndr_print_string(ndr, "ldap_server", r->server.ldap_server);
-	ndr_print_bool(ndr, "foreign", r->server.foreign);
-	ndr->depth--;
-	ndr_print_struct(ndr, name, "auth");
-	ndr->depth++;
-	ndr_print_string(ndr, "realm", r->auth.realm);
-#ifdef DEBUG_PASSWORD
-	ndr_print_string(ndr, "password", r->auth.password);
-#else
-	ndr_print_string(ndr, "password", "(PASSWORD ommited)");
-#endif
-	ndr_print_string(ndr, "user_name", r->auth.user_name);
-	ndr_print_string(ndr, "kdc_server", r->auth.kdc_server);
-	ndr_print_ads_auth_flags(ndr, "flags", r->auth.flags);
-	ndr_print_uint32(ndr, "time_offset", r->auth.time_offset);
-	ndr_print_time_t(ndr, "tgt_expire", r->auth.tgt_expire);
-	ndr_print_time_t(ndr, "tgs_expire", r->auth.tgs_expire);
-	ndr_print_time_t(ndr, "renewable", r->auth.renewable);
-	ndr->depth--;
-	ndr_print_struct(ndr, name, "config");
-	ndr->depth++;
-	ndr_print_netr_DsR_DcFlags(ndr, "flags", r->config.flags);
-	ndr_print_string(ndr, "realm", r->config.realm);
-	ndr_print_string(ndr, "bind_path", r->config.bind_path);
-	ndr_print_string(ndr, "ldap_server_name", r->config.ldap_server_name);
-	ndr_print_string(ndr, "server_site_name", r->config.server_site_name);
-	ndr_print_string(ndr, "client_site_name", r->config.client_site_name);
-	ndr_print_time_t(ndr, "current_time", r->config.current_time);
-	ndr_print_bool(ndr, "tried_closest_dc", r->config.tried_closest_dc);
-	ndr_print_string(ndr, "schema_path", r->config.schema_path);
-	ndr_print_string(ndr, "config_path", r->config.config_path);
-	ndr->depth--;
-#ifdef HAVE_LDAP
-	ndr_print_struct(ndr, name, "ldap");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "ld", r->ldap.ld);
-	ndr_print_sockaddr_storage(ndr, "ss", &r->ldap.ss);
-	ndr_print_time_t(ndr, "last_attempt", r->ldap.last_attempt);
-	ndr_print_uint32(ndr, "port", r->ldap.port);
-	ndr_print_uint16(ndr, "wrap_type", r->ldap.wrap_type);
-#ifdef HAVE_LDAP_SASL_WRAPPING
-	ndr_print_ptr(ndr, "sbiod", r->ldap.sbiod);
-#endif /* HAVE_LDAP_SASL_WRAPPING */
-	ndr_print_ptr(ndr, "mem_ctx", r->ldap.mem_ctx);
-	ndr_print_ptr(ndr, "wrap_ops", r->ldap.wrap_ops);
-	ndr_print_ptr(ndr, "wrap_private_data", r->ldap.wrap_private_data);
-	ndr_print_struct(ndr, name, "in");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "ofs", r->ldap.in.ofs);
-	ndr_print_uint32(ndr, "needed", r->ldap.in.needed);
-	ndr_print_uint32(ndr, "left", r->ldap.in.left);
-	ndr_print_uint32(ndr, "max_wrapped", r->ldap.in.max_wrapped);
-	ndr_print_uint32(ndr, "min_wrapped", r->ldap.in.min_wrapped);
-	ndr_print_uint32(ndr, "size", r->ldap.in.size);
-	ndr_print_array_uint8(ndr, "buf", r->ldap.in.buf, r->ldap.in.size);
-	ndr->depth--;
-	ndr_print_struct(ndr, name, "out");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "ofs", r->ldap.out.ofs);
-	ndr_print_uint32(ndr, "left", r->ldap.out.left);
-	ndr_print_uint32(ndr, "max_unwrapped", r->ldap.out.max_unwrapped);
-	ndr_print_uint32(ndr, "sig_size", r->ldap.out.sig_size);
-	ndr_print_uint32(ndr, "size", r->ldap.out.size);
-	ndr_print_array_uint8(ndr, "buf", r->ldap.out.buf, r->ldap.out.size);
-	ndr->depth--;
-	ndr->depth--;
-#endif /* HAVE_LDAP */
-	ndr->depth--;
-}

Modified: branches/samba/upstream/source/libads/sasl.c
===================================================================
--- branches/samba/upstream/source/libads/sasl.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libads/sasl.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,121 +14,28 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
 #ifdef HAVE_LDAP
 
-static ADS_STATUS ads_sasl_ntlmssp_wrap(ADS_STRUCT *ads, uint8 *buf, uint32 len)
-{
-	struct ntlmssp_state *ntlmssp_state =
-		(struct ntlmssp_state *)ads->ldap.wrap_private_data;
-	ADS_STATUS status;
-	NTSTATUS nt_status;
-	DATA_BLOB sig;
-	uint8 *dptr = ads->ldap.out.buf + (4 + NTLMSSP_SIG_SIZE);
-
-	/* copy the data to the right location */
-	memcpy(dptr, buf, len);
-
-	/* create the signature and may encrypt the data */
-	if (ntlmssp_state->neg_flags & NTLMSSP_NEGOTIATE_SEAL) {
-		nt_status = ntlmssp_seal_packet(ntlmssp_state,
-						dptr, len,
-						dptr, len,
-						&sig);
-	} else {
-		nt_status = ntlmssp_sign_packet(ntlmssp_state,
-						dptr, len,
-						dptr, len,
-						&sig);
-	}
-	status = ADS_ERROR_NT(nt_status);
-	if (!ADS_ERR_OK(status)) return status;
-
-	/* copy the signature to the right location */
-	memcpy(ads->ldap.out.buf + 4,
-	       sig.data, NTLMSSP_SIG_SIZE);
-
-	data_blob_free(&sig);
-
-	/* set how many bytes must be written to the underlying socket */
-	ads->ldap.out.left = 4 + NTLMSSP_SIG_SIZE + len;
-
-	return ADS_SUCCESS;
-}
-
-static ADS_STATUS ads_sasl_ntlmssp_unwrap(ADS_STRUCT *ads)
-{
-	struct ntlmssp_state *ntlmssp_state =
-		(struct ntlmssp_state *)ads->ldap.wrap_private_data;
-	ADS_STATUS status;
-	NTSTATUS nt_status;
-	DATA_BLOB sig;
-	uint8 *dptr = ads->ldap.in.buf + (4 + NTLMSSP_SIG_SIZE);
-	uint32 dlen = ads->ldap.in.ofs - (4 + NTLMSSP_SIG_SIZE);
-
-	/* wrap the signature into a DATA_BLOB */
-	sig = data_blob_const(ads->ldap.in.buf + 4, NTLMSSP_SIG_SIZE);
-
-	/* verify the signature and maybe decrypt the data */
-	if (ntlmssp_state->neg_flags & NTLMSSP_NEGOTIATE_SEAL) {
-		nt_status = ntlmssp_unseal_packet(ntlmssp_state,
-						  dptr, dlen,
-						  dptr, dlen,
-						  &sig);
-	} else {
-		nt_status = ntlmssp_check_packet(ntlmssp_state,
-						 dptr, dlen,
-						 dptr, dlen,
-						 &sig);
-	}
-	status = ADS_ERROR_NT(nt_status);
-	if (!ADS_ERR_OK(status)) return status;
-
-	/* set the amount of bytes for the upper layer and set the ofs to the data */
-	ads->ldap.in.left	= dlen;
-	ads->ldap.in.ofs	= 4 + NTLMSSP_SIG_SIZE;
-
-	return ADS_SUCCESS;
-}
-
-static void ads_sasl_ntlmssp_disconnect(ADS_STRUCT *ads)
-{
-	struct ntlmssp_state *ntlmssp_state =
-		(struct ntlmssp_state *)ads->ldap.wrap_private_data;
-
-	ntlmssp_end(&ntlmssp_state);
-
-	ads->ldap.wrap_ops = NULL;
-	ads->ldap.wrap_private_data = NULL;
-}
-
-static const struct ads_saslwrap_ops ads_sasl_ntlmssp_ops = {
-	.name		= "ntlmssp",
-	.wrap		= ads_sasl_ntlmssp_wrap,
-	.unwrap		= ads_sasl_ntlmssp_unwrap,
-	.disconnect	= ads_sasl_ntlmssp_disconnect
-};
-
 /* 
    perform a LDAP/SASL/SPNEGO/NTLMSSP bind (just how many layers can
    we fit on one socket??)
 */
 static ADS_STATUS ads_sasl_spnego_ntlmssp_bind(ADS_STRUCT *ads)
 {
-	DATA_BLOB msg1 = data_blob_null;
-	DATA_BLOB blob = data_blob_null;
-	DATA_BLOB blob_in = data_blob_null;
-	DATA_BLOB blob_out = data_blob_null;
+	DATA_BLOB msg1 = data_blob(NULL, 0);
+	DATA_BLOB blob = data_blob(NULL, 0);
+	DATA_BLOB blob_in = data_blob(NULL, 0);
+	DATA_BLOB blob_out = data_blob(NULL, 0);
 	struct berval cred, *scred = NULL;
 	int rc;
 	NTSTATUS nt_status;
-	ADS_STATUS status;
 	int turn = 1;
-	uint32 features = 0;
 
 	struct ntlmssp_state *ntlmssp_state;
 
@@ -147,30 +54,8 @@
 		return ADS_ERROR_NT(nt_status);
 	}
 
-	switch (ads->ldap.wrap_type) {
-	case ADS_SASLWRAP_TYPE_SEAL:
-		features = NTLMSSP_FEATURE_SIGN | NTLMSSP_FEATURE_SEAL;
-		break;
-	case ADS_SASLWRAP_TYPE_SIGN:
-		if (ads->auth.flags & ADS_AUTH_SASL_FORCE) {
-			features = NTLMSSP_FEATURE_SIGN;
-		} else {
-			/*
-			 * windows servers are broken with sign only,
-			 * so we need to use seal here too
-			 */
-			features = NTLMSSP_FEATURE_SIGN | NTLMSSP_FEATURE_SEAL;
-			ads->ldap.wrap_type = ADS_SASLWRAP_TYPE_SEAL;
-		}
-		break;
-	case ADS_SASLWRAP_TYPE_PLAIN:
-		break;
-	}
+	blob_in = data_blob(NULL, 0);
 
-	ntlmssp_want_feature(ntlmssp_state, features);
-
-	blob_in = data_blob_null;
-
 	do {
 		nt_status = ntlmssp_update(ntlmssp_state, 
 					   blob_in, &blob_out);
@@ -191,7 +76,7 @@
 			cred.bv_val = (char *)msg1.data;
 			cred.bv_len = msg1.length;
 			scred = NULL;
-			rc = ldap_sasl_bind_s(ads->ldap.ld, NULL, "GSS-SPNEGO", &cred, NULL, NULL, &scred);
+			rc = ldap_sasl_bind_s(ads->ld, NULL, "GSS-SPNEGO", &cred, NULL, NULL, &scred);
 			data_blob_free(&msg1);
 			if ((rc != LDAP_SASL_BIND_IN_PROGRESS) && (rc != 0)) {
 				if (scred) {
@@ -205,7 +90,7 @@
 				blob = data_blob(scred->bv_val, scred->bv_len);
 				ber_bvfree(scred);
 			} else {
-				blob = data_blob_null;
+				blob = data_blob(NULL, 0);
 			}
 
 		} else {
@@ -217,7 +102,7 @@
 		
 		if ((turn == 1) && 
 		    (rc == LDAP_SASL_BIND_IN_PROGRESS)) {
-			DATA_BLOB tmp_blob = data_blob_null;
+			DATA_BLOB tmp_blob = data_blob(NULL, 0);
 			/* the server might give us back two challenges */
 			if (!spnego_parse_challenge(blob, &blob_in, 
 						    &tmp_blob)) {
@@ -229,7 +114,7 @@
 			}
 			data_blob_free(&tmp_blob);
 		} else if (rc == LDAP_SASL_BIND_IN_PROGRESS) {
-			if (!spnego_parse_auth_response(blob, nt_status, OID_NTLMSSP, 
+			if (!spnego_parse_auth_response(blob, nt_status, 
 							&blob_in)) {
 
 				ntlmssp_end(&ntlmssp_state);
@@ -246,367 +131,11 @@
 	/* we have a reference conter on ntlmssp_state, if we are signing
 	   then the state will be kept by the signing engine */
 
-	if (ads->ldap.wrap_type > ADS_SASLWRAP_TYPE_PLAIN) {
-		ads->ldap.out.max_unwrapped = ADS_SASL_WRAPPING_OUT_MAX_WRAPPED - NTLMSSP_SIG_SIZE;
-		ads->ldap.out.sig_size = NTLMSSP_SIG_SIZE;
-		ads->ldap.in.min_wrapped = ads->ldap.out.sig_size;
-		ads->ldap.in.max_wrapped = ADS_SASL_WRAPPING_IN_MAX_WRAPPED;
-		status = ads_setup_sasl_wrapping(ads, &ads_sasl_ntlmssp_ops, ntlmssp_state);
-		if (!ADS_ERR_OK(status)) {
-			DEBUG(0, ("ads_setup_sasl_wrapping() failed: %s\n",
-				ads_errstr(status)));
-			ntlmssp_end(&ntlmssp_state);
-			return status;
-		}
-	} else {
-		ntlmssp_end(&ntlmssp_state);
-	}
+	ntlmssp_end(&ntlmssp_state);
 
 	return ADS_ERROR(rc);
 }
 
-#ifdef HAVE_GSSAPI
-static ADS_STATUS ads_sasl_gssapi_wrap(ADS_STRUCT *ads, uint8 *buf, uint32 len)
-{
-	gss_ctx_id_t context_handle = (gss_ctx_id_t)ads->ldap.wrap_private_data;
-	ADS_STATUS status;
-	int gss_rc;
-	uint32 minor_status;
-	gss_buffer_desc unwrapped, wrapped;
-	int conf_req_flag, conf_state;
-
-	unwrapped.value		= buf;
-	unwrapped.length	= len;
-
-	/* for now request sign and seal */
-	conf_req_flag	= (ads->ldap.wrap_type == ADS_SASLWRAP_TYPE_SEAL);
-
-	gss_rc = gss_wrap(&minor_status, context_handle,
-			  conf_req_flag, GSS_C_QOP_DEFAULT,
-			  &unwrapped, &conf_state,
-			  &wrapped);
-	status = ADS_ERROR_GSS(gss_rc, minor_status);
-	if (!ADS_ERR_OK(status)) return status;
-
-	if (conf_req_flag && conf_state == 0) {
-		return ADS_ERROR_NT(NT_STATUS_ACCESS_DENIED);
-	}
-
-	if ((ads->ldap.out.size - 4) < wrapped.length) {
-		return ADS_ERROR_NT(NT_STATUS_INTERNAL_ERROR);
-	}
-
-	/* copy the wrapped blob to the right location */
-	memcpy(ads->ldap.out.buf + 4, wrapped.value, wrapped.length);
-
-	/* set how many bytes must be written to the underlying socket */
-	ads->ldap.out.left = 4 + wrapped.length;
-
-	gss_release_buffer(&minor_status, &wrapped);
-
-	return ADS_SUCCESS;
-}
-
-static ADS_STATUS ads_sasl_gssapi_unwrap(ADS_STRUCT *ads)
-{
-	gss_ctx_id_t context_handle = (gss_ctx_id_t)ads->ldap.wrap_private_data;
-	ADS_STATUS status;
-	int gss_rc;
-	uint32 minor_status;
-	gss_buffer_desc unwrapped, wrapped;
-	int conf_state;
-
-	wrapped.value	= ads->ldap.in.buf + 4;
-	wrapped.length	= ads->ldap.in.ofs - 4;
-
-	gss_rc = gss_unwrap(&minor_status, context_handle,
-			    &wrapped, &unwrapped,
-			    &conf_state, GSS_C_QOP_DEFAULT);
-	status = ADS_ERROR_GSS(gss_rc, minor_status);
-	if (!ADS_ERR_OK(status)) return status;
-
-	if (ads->ldap.wrap_type == ADS_SASLWRAP_TYPE_SEAL && conf_state == 0) {
-		return ADS_ERROR_NT(NT_STATUS_ACCESS_DENIED);
-	}
-
-	if (wrapped.length < unwrapped.length) {
-		return ADS_ERROR_NT(NT_STATUS_INTERNAL_ERROR);
-	}
-
-	/* copy the wrapped blob to the right location */
-	memcpy(ads->ldap.in.buf + 4, unwrapped.value, unwrapped.length);
-
-	/* set how many bytes must be written to the underlying socket */
-	ads->ldap.in.left	= unwrapped.length;
-	ads->ldap.in.ofs	= 4;
-
-	gss_release_buffer(&minor_status, &unwrapped);
-
-	return ADS_SUCCESS;
-}
-
-static void ads_sasl_gssapi_disconnect(ADS_STRUCT *ads)
-{
-	gss_ctx_id_t context_handle = (gss_ctx_id_t)ads->ldap.wrap_private_data;
-	uint32 minor_status;
-
-	gss_delete_sec_context(&minor_status, &context_handle, GSS_C_NO_BUFFER);
-
-	ads->ldap.wrap_ops = NULL;
-	ads->ldap.wrap_private_data = NULL;
-}
-
-static const struct ads_saslwrap_ops ads_sasl_gssapi_ops = {
-	.name		= "gssapi",
-	.wrap		= ads_sasl_gssapi_wrap,
-	.unwrap		= ads_sasl_gssapi_unwrap,
-	.disconnect	= ads_sasl_gssapi_disconnect
-};
-
-/* 
-   perform a LDAP/SASL/SPNEGO/GSSKRB5 bind
-*/
-static ADS_STATUS ads_sasl_spnego_gsskrb5_bind(ADS_STRUCT *ads, const gss_name_t serv_name)
-{
-	ADS_STATUS status;
-	bool ok;
-	uint32 minor_status;
-	int gss_rc, rc;
-	gss_OID_desc krb5_mech_type =
-	{9, CONST_DISCARD(char *, "\x2a\x86\x48\x86\xf7\x12\x01\x02\x02") };
-	gss_OID mech_type = &krb5_mech_type;
-	gss_OID actual_mech_type = GSS_C_NULL_OID;
-	const char *spnego_mechs[] = {OID_KERBEROS5_OLD, OID_KERBEROS5, OID_NTLMSSP, NULL};
-	gss_ctx_id_t context_handle = GSS_C_NO_CONTEXT;
-	gss_buffer_desc input_token, output_token;
-	uint32 req_flags, ret_flags;
-	uint32 req_tmp, ret_tmp;
-	DATA_BLOB unwrapped;
-	DATA_BLOB wrapped;
-	struct berval cred, *scred = NULL;
-
-	input_token.value = NULL;
-	input_token.length = 0;
-
-	req_flags = GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG;
-	switch (ads->ldap.wrap_type) {
-	case ADS_SASLWRAP_TYPE_SEAL:
-		req_flags |= GSS_C_INTEG_FLAG | GSS_C_CONF_FLAG;
-		break;
-	case ADS_SASLWRAP_TYPE_SIGN:
-		req_flags |= GSS_C_INTEG_FLAG;
-		break;
-	case ADS_SASLWRAP_TYPE_PLAIN:
-		break;
-	}
-
-	/* Note: here we explicit ask for the krb5 mech_type */
-	gss_rc = gss_init_sec_context(&minor_status,
-				      GSS_C_NO_CREDENTIAL,
-				      &context_handle,
-				      serv_name,
-				      mech_type,
-				      req_flags,
-				      0,
-				      NULL,
-				      &input_token,
-				      &actual_mech_type,
-				      &output_token,
-				      &ret_flags,
-				      NULL);
-	if (gss_rc && gss_rc != GSS_S_CONTINUE_NEEDED) {
-		status = ADS_ERROR_GSS(gss_rc, minor_status);
-		goto failed;
-	}
-
-	/*
-	 * As some gssapi krb5 mech implementations
-	 * automaticly add GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG
-	 * to req_flags internaly, it's not possible to
-	 * use plain or signing only connection via
-	 * the gssapi interface.
-	 *
-	 * Because of this we need to check it the ret_flags
-	 * has more flags as req_flags and correct the value
-	 * of ads->ldap.wrap_type.
-	 *
-	 * I ads->auth.flags has ADS_AUTH_SASL_FORCE
-	 * we need to give an error.
-	 */
-	req_tmp = req_flags & (GSS_C_INTEG_FLAG | GSS_C_CONF_FLAG);
-	ret_tmp = ret_flags & (GSS_C_INTEG_FLAG | GSS_C_CONF_FLAG);
-
-	if (req_tmp == ret_tmp) {
-		/* everythings fine... */
-
-	} else if (req_flags & GSS_C_CONF_FLAG) {
-		/*
-		 * here we wanted sealing but didn't got it
-		 * from the gssapi library
-		 */
-		status = ADS_ERROR_NT(NT_STATUS_NOT_SUPPORTED);
-		goto failed;
-
-	} else if ((req_flags & GSS_C_INTEG_FLAG) &&
-		   !(ret_flags & GSS_C_INTEG_FLAG)) {
-		/*
-		 * here we wanted siging but didn't got it
-		 * from the gssapi library
-		 */
-		status = ADS_ERROR_NT(NT_STATUS_NOT_SUPPORTED);
-		goto failed;
-
-	} else if (ret_flags & GSS_C_CONF_FLAG) {
-		/*
-		 * here we didn't want sealing
-		 * but the gssapi library forces it
-		 * so correct the needed wrap_type if
-		 * the caller didn't forced siging only
-		 */
-		if (ads->auth.flags & ADS_AUTH_SASL_FORCE) {
-			status = ADS_ERROR_NT(NT_STATUS_NOT_SUPPORTED);
-			goto failed;
-		}
-
-		ads->ldap.wrap_type = ADS_SASLWRAP_TYPE_SEAL;
-		req_flags = ret_flags;
-
-	} else if (ret_flags & GSS_C_INTEG_FLAG) {
-		/*
-		 * here we didn't want signing
-		 * but the gssapi library forces it
-		 * so correct the needed wrap_type if
-		 * the caller didn't forced plain
-		 */
-		if (ads->auth.flags & ADS_AUTH_SASL_FORCE) {
-			status = ADS_ERROR_NT(NT_STATUS_NOT_SUPPORTED);
-			goto failed;
-		}
-
-		ads->ldap.wrap_type = ADS_SASLWRAP_TYPE_SIGN;
-		req_flags = ret_flags;
-	} else {
-		/*
-		 * This could (should?) not happen
-		 */
-		status = ADS_ERROR_NT(NT_STATUS_INTERNAL_ERROR);
-		goto failed;
-	
-	}
-
-	/* and wrap that in a shiny SPNEGO wrapper */
-	unwrapped = data_blob_const(output_token.value, output_token.length);
-	wrapped = gen_negTokenTarg(spnego_mechs, unwrapped);
-	gss_release_buffer(&minor_status, &output_token);
-	if (unwrapped.length > wrapped.length) {
-		status = ADS_ERROR_NT(NT_STATUS_NO_MEMORY);
-		goto failed;
-	}
-
-	cred.bv_val = (char *)wrapped.data;
-	cred.bv_len = wrapped.length;
-
-	rc = ldap_sasl_bind_s(ads->ldap.ld, NULL, "GSS-SPNEGO", &cred, NULL, NULL, 
-			      &scred);
-	data_blob_free(&wrapped);
-	if (rc != LDAP_SUCCESS) {
-		status = ADS_ERROR(rc);
-		goto failed;
-	}
-
-	if (scred) {
-		wrapped = data_blob_const(scred->bv_val, scred->bv_len);
-	} else {
-		wrapped = data_blob_null;
-	}
-
-	ok = spnego_parse_auth_response(wrapped, NT_STATUS_OK,
-					OID_KERBEROS5_OLD,
-					&unwrapped);
-	if (scred) ber_bvfree(scred);
-	if (!ok) {
-		status = ADS_ERROR_NT(NT_STATUS_INVALID_NETWORK_RESPONSE);
-		goto failed;
-	}
-
-	input_token.value	= unwrapped.data;
-	input_token.length	= unwrapped.length;
-
-	/* 
-	 * As we asked for mutal authentication
-	 * we need to pass the servers response
-	 * to gssapi
-	 */
-	gss_rc = gss_init_sec_context(&minor_status,
-				      GSS_C_NO_CREDENTIAL,
-				      &context_handle,
-				      serv_name,
-				      mech_type,
-				      req_flags,
-				      0,
-				      NULL,
-				      &input_token,
-				      &actual_mech_type,
-				      &output_token,
-				      &ret_flags,
-				      NULL);
-	data_blob_free(&unwrapped);
-	if (gss_rc) {
-		status = ADS_ERROR_GSS(gss_rc, minor_status);
-		goto failed;
-	}
-
-	gss_release_buffer(&minor_status, &output_token);
-
-	/*
-	 * If we the sign and seal options
-	 * doesn't match after getting the response
-	 * from the server, we don't want to use the connection
-	 */
-	req_tmp = req_flags & (GSS_C_INTEG_FLAG | GSS_C_CONF_FLAG);
-	ret_tmp = ret_flags & (GSS_C_INTEG_FLAG | GSS_C_CONF_FLAG);
-
-	if (req_tmp != ret_tmp) {
-		/* everythings fine... */
-		status = ADS_ERROR_NT(NT_STATUS_INVALID_NETWORK_RESPONSE);
-		goto failed;
-	}
-
-	if (ads->ldap.wrap_type > ADS_SASLWRAP_TYPE_PLAIN) {
-		uint32 max_msg_size = ADS_SASL_WRAPPING_OUT_MAX_WRAPPED;
-
-		gss_rc = gss_wrap_size_limit(&minor_status, context_handle,
-					     (ads->ldap.wrap_type == ADS_SASLWRAP_TYPE_SEAL),
-					     GSS_C_QOP_DEFAULT,
-					     max_msg_size, &ads->ldap.out.max_unwrapped);
-		if (gss_rc) {
-			status = ADS_ERROR_GSS(gss_rc, minor_status);
-			goto failed;
-		}
-
-		ads->ldap.out.sig_size = max_msg_size - ads->ldap.out.max_unwrapped;
-		ads->ldap.in.min_wrapped = 0x2C; /* taken from a capture with LDAP unbind */
-		ads->ldap.in.max_wrapped = max_msg_size;
-		status = ads_setup_sasl_wrapping(ads, &ads_sasl_gssapi_ops, context_handle);
-		if (!ADS_ERR_OK(status)) {
-			DEBUG(0, ("ads_setup_sasl_wrapping() failed: %s\n",
-				ads_errstr(status)));
-			goto failed;
-		}
-		/* make sure we don't free context_handle */
-		context_handle = GSS_C_NO_CONTEXT;
-	}
-
-	status = ADS_SUCCESS;
-
-failed:
-	if (context_handle != GSS_C_NO_CONTEXT)
-		gss_delete_sec_context(&minor_status, &context_handle, GSS_C_NO_BUFFER);
-	return status;
-}
-
-#endif /* HAVE_GSSAPI */
-
 #ifdef HAVE_KRB5
 struct ads_service_principal {
 	 char *string;
@@ -684,15 +213,11 @@
 */
 static ADS_STATUS ads_sasl_spnego_rawkrb5_bind(ADS_STRUCT *ads, const char *principal)
 {
-	DATA_BLOB blob = data_blob_null;
+	DATA_BLOB blob = data_blob(NULL, 0);
 	struct berval cred, *scred = NULL;
-	DATA_BLOB session_key = data_blob_null;
+	DATA_BLOB session_key = data_blob(NULL, 0);
 	int rc;
 
-	if (ads->ldap.wrap_type > ADS_SASLWRAP_TYPE_PLAIN) {
-		return ADS_ERROR_NT(NT_STATUS_NOT_SUPPORTED);
-	}
-
 	rc = spnego_gen_negTokenTarg(principal, ads->auth.time_offset, &blob, &session_key, 0,
 				     &ads->auth.tgs_expire);
 
@@ -704,7 +229,7 @@
 	cred.bv_val = (char *)blob.data;
 	cred.bv_len = blob.length;
 
-	rc = ldap_sasl_bind_s(ads->ldap.ld, NULL, "GSS-SPNEGO", &cred, NULL, NULL, &scred);
+	rc = ldap_sasl_bind_s(ads->ld, NULL, "GSS-SPNEGO", &cred, NULL, NULL, &scred);
 
 	data_blob_free(&blob);
 	data_blob_free(&session_key);
@@ -717,25 +242,11 @@
 static ADS_STATUS ads_sasl_spnego_krb5_bind(ADS_STRUCT *ads,
 					    struct ads_service_principal *p)
 {
-#ifdef HAVE_GSSAPI
-	/*
-	 * we only use the gsskrb5 based implementation
-	 * when sasl sign or seal is requested.
-	 *
-	 * This has the following reasons:
-	 * - it's likely that the gssapi krb5 mech implementation
-	 *   doesn't support to negotiate plain connections
-	 * - the ads_sasl_spnego_rawkrb5_bind is more robust
-	 *   against clock skew errors
-	 */
-	if (ads->ldap.wrap_type > ADS_SASLWRAP_TYPE_PLAIN) {
-		return ads_sasl_spnego_gsskrb5_bind(ads, p->name);
-	}
-#endif
 	return ads_sasl_spnego_rawkrb5_bind(ads, p->string);
 }
-#endif /* HAVE_KRB5 */
 
+#endif
+
 /* 
    this performs a SASL/SPNEGO bind
 */
@@ -748,10 +259,10 @@
 	char *given_principal = NULL;
 	char *OIDs[ASN1_MAX_OIDS];
 #ifdef HAVE_KRB5
-	bool got_kerberos_mechanism = False;
+	BOOL got_kerberos_mechanism = False;
 #endif
 
-	rc = ldap_sasl_bind_s(ads->ldap.ld, NULL, "GSS-SPNEGO", NULL, NULL, NULL, &scred);
+	rc = ldap_sasl_bind_s(ads->ld, NULL, "GSS-SPNEGO", NULL, NULL, NULL, &scred);
 
 	if (rc != LDAP_SASL_BIND_IN_PROGRESS) {
 		status = ADS_ERROR(rc);
@@ -851,40 +362,88 @@
    this routine is much less fragile
    see RFC2078 and RFC2222 for details
 */
-static ADS_STATUS ads_sasl_gssapi_do_bind(ADS_STRUCT *ads, const gss_name_t serv_name)
+static ADS_STATUS ads_sasl_gssapi_bind(ADS_STRUCT *ads)
 {
 	uint32 minor_status;
+	gss_name_t serv_name;
+	gss_buffer_desc input_name;
 	gss_ctx_id_t context_handle = GSS_C_NO_CONTEXT;
 	gss_OID mech_type = GSS_C_NULL_OID;
 	gss_buffer_desc output_token, input_token;
-	uint32 req_flags, ret_flags;
-	int conf_state;
+	uint32 ret_flags, conf_state;
 	struct berval cred;
 	struct berval *scred = NULL;
 	int i=0;
 	int gss_rc, rc;
 	uint8 *p;
-	uint32 max_msg_size = ADS_SASL_WRAPPING_OUT_MAX_WRAPPED;
-	uint8 wrap_type = ADS_SASLWRAP_TYPE_PLAIN;
+	uint32 max_msg_size = 0;
+	char *sname = NULL;
 	ADS_STATUS status;
+	krb5_principal principal = NULL;
+	krb5_context ctx = NULL;
+	krb5_enctype enc_types[] = {
+#ifdef ENCTYPE_ARCFOUR_HMAC
+			ENCTYPE_ARCFOUR_HMAC,
+#endif
+			ENCTYPE_DES_CBC_MD5,
+			ENCTYPE_NULL};
+	gss_OID_desc nt_principal = 
+	{10, CONST_DISCARD(char *, "\052\206\110\206\367\022\001\002\002\002")};
 
-	input_token.value = NULL;
-	input_token.length = 0;
+	/* we need to fetch a service ticket as the ldap user in the
+	   servers realm, regardless of our realm */
+	asprintf(&sname, "ldap/%s@%s", ads->config.ldap_server_name, ads->config.realm);
 
+	initialize_krb5_error_table();
+	status = ADS_ERROR_KRB5(krb5_init_context(&ctx));
+	if (!ADS_ERR_OK(status)) {
+		SAFE_FREE(sname);
+		return status;
+	}
+	status = ADS_ERROR_KRB5(krb5_set_default_tgs_ktypes(ctx, enc_types));
+	if (!ADS_ERR_OK(status)) {
+		SAFE_FREE(sname);
+		krb5_free_context(ctx);	
+		return status;
+	}
+	status = ADS_ERROR_KRB5(smb_krb5_parse_name(ctx, sname, &principal));
+	if (!ADS_ERR_OK(status)) {
+		SAFE_FREE(sname);
+		krb5_free_context(ctx);	
+		return status;
+	}
+
+	input_name.value = &principal;
+	input_name.length = sizeof(principal);
+
+	gss_rc = gss_import_name(&minor_status, &input_name, &nt_principal, &serv_name);
+
 	/*
-	 * Note: here we always ask the gssapi for sign and seal
-	 *       as this is negotiated later after the mutal
-	 *       authentication
+	 * The MIT libraries have a *HORRIBLE* bug - input_value.value needs
+	 * to point to the *address* of the krb5_principal, and the gss libraries
+	 * to a shallow copy of the krb5_principal pointer - so we need to keep
+	 * the krb5_principal around until we do the gss_release_name. MIT *SUCKS* !
+	 * Just one more way in which MIT engineers screwed me over.... JRA.
 	 */
-	req_flags = GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG | GSS_C_INTEG_FLAG | GSS_C_CONF_FLAG;
 
+	SAFE_FREE(sname);
+
+	if (gss_rc) {
+		krb5_free_principal(ctx, principal);
+		krb5_free_context(ctx);	
+		return ADS_ERROR_GSS(gss_rc, minor_status);
+	}
+
+	input_token.value = NULL;
+	input_token.length = 0;
+
 	for (i=0; i < MAX_GSS_PASSES; i++) {
 		gss_rc = gss_init_sec_context(&minor_status,
 					  GSS_C_NO_CREDENTIAL,
 					  &context_handle,
 					  serv_name,
 					  mech_type,
-					  req_flags,
+					  GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG,
 					  0,
 					  NULL,
 					  &input_token,
@@ -892,10 +451,11 @@
 					  &output_token,
 					  &ret_flags,
 					  NULL);
-		if (scred) {
-			ber_bvfree(scred);
-			scred = NULL;
+
+		if (input_token.value) {
+			gss_release_buffer(&minor_status, &input_token);
 		}
+
 		if (gss_rc && gss_rc != GSS_S_CONTINUE_NEEDED) {
 			status = ADS_ERROR_GSS(gss_rc, minor_status);
 			goto failed;
@@ -904,7 +464,7 @@
 		cred.bv_val = (char *)output_token.value;
 		cred.bv_len = output_token.length;
 
-		rc = ldap_sasl_bind_s(ads->ldap.ld, NULL, "GSSAPI", &cred, NULL, NULL, 
+		rc = ldap_sasl_bind_s(ads->ld, NULL, "GSSAPI", &cred, NULL, NULL, 
 				      &scred);
 		if (rc != LDAP_SASL_BIND_IN_PROGRESS) {
 			status = ADS_ERROR(rc);
@@ -927,16 +487,14 @@
 	}
 
 	gss_rc = gss_unwrap(&minor_status,context_handle,&input_token,&output_token,
-			    &conf_state,NULL);
-	if (scred) {
-		ber_bvfree(scred);
-		scred = NULL;
-	}
+			    (int *)&conf_state,NULL);
 	if (gss_rc) {
 		status = ADS_ERROR_GSS(gss_rc, minor_status);
 		goto failed;
 	}
 
+	gss_release_buffer(&minor_status, &input_token);
+
 	p = (uint8 *)output_token.value;
 
 #if 0
@@ -944,48 +502,26 @@
 #endif
 
 	if (p) {
-		wrap_type = CVAL(p,0);
-		SCVAL(p,0,0);
-		max_msg_size = RIVAL(p,0);
+		max_msg_size = (p[1]<<16) | (p[2]<<8) | p[3];
 	}
 
 	gss_release_buffer(&minor_status, &output_token);
 
-	if (!(wrap_type & ads->ldap.wrap_type)) {
-		/*
-		 * the server doesn't supports the wrap
-		 * type we want :-(
-		 */
-		DEBUG(0,("The ldap sasl wrap type doesn't match wanted[%d] server[%d]\n",
-			ads->ldap.wrap_type, wrap_type));
-		DEBUGADD(0,("You may want to set the 'client ldap sasl wrapping' option\n"));
-		status = ADS_ERROR_NT(NT_STATUS_NOT_SUPPORTED);
-		goto failed;
-	}
-
-	/* 0x58 is the minimum windows accepts */
-	if (max_msg_size < 0x58) {
-		max_msg_size = 0x58;
-	}
-
-	output_token.length = 4;
-	output_token.value = SMB_MALLOC(output_token.length);
+	output_token.value = SMB_MALLOC(strlen(ads->config.bind_path) + 8);
 	p = (uint8 *)output_token.value;
 
-	RSIVAL(p,0,max_msg_size);
-	SCVAL(p,0,ads->ldap.wrap_type);
+	*p++ = 1; /* no sign & seal selection */
+	/* choose the same size as the server gave us */
+	*p++ = max_msg_size>>16;
+	*p++ = max_msg_size>>8;
+	*p++ = max_msg_size;
+	snprintf((char *)p, strlen(ads->config.bind_path)+4, "dn:%s", ads->config.bind_path);
+	p += strlen((const char *)p);
 
-	/*
-	 * we used to add sprintf("dn:%s", ads->config.bind_path) here.
-	 * but using ads->config.bind_path is the wrong! It should be
-	 * the DN of the user object!
-	 *
-	 * w2k3 gives an error when we send an incorrect DN, but sending nothing
-	 * is ok and matches the information flow used in GSS-SPNEGO.
-	 */
+	output_token.length = PTR_DIFF(p, output_token.value);
 
 	gss_rc = gss_wrap(&minor_status, context_handle,0,GSS_C_QOP_DEFAULT,
-			  &output_token, &conf_state,
+			  &output_token, (int *)&conf_state,
 			  &input_token);
 	if (gss_rc) {
 		status = ADS_ERROR_GSS(gss_rc, minor_status);
@@ -997,79 +533,26 @@
 	cred.bv_val = (char *)input_token.value;
 	cred.bv_len = input_token.length;
 
-	rc = ldap_sasl_bind_s(ads->ldap.ld, NULL, "GSSAPI", &cred, NULL, NULL, 
+	rc = ldap_sasl_bind_s(ads->ld, NULL, "GSSAPI", &cred, NULL, NULL, 
 			      &scred);
-	gss_release_buffer(&minor_status, &input_token);
 	status = ADS_ERROR(rc);
-	if (!ADS_ERR_OK(status)) {
-		goto failed;
-	}
 
-	if (ads->ldap.wrap_type > ADS_SASLWRAP_TYPE_PLAIN) {
-		gss_rc = gss_wrap_size_limit(&minor_status, context_handle,
-					     (ads->ldap.wrap_type == ADS_SASLWRAP_TYPE_SEAL),
-					     GSS_C_QOP_DEFAULT,
-					     max_msg_size, &ads->ldap.out.max_unwrapped);
-		if (gss_rc) {
-			status = ADS_ERROR_GSS(gss_rc, minor_status);
-			goto failed;
-		}
+	gss_release_buffer(&minor_status, &input_token);
 
-		ads->ldap.out.sig_size = max_msg_size - ads->ldap.out.max_unwrapped;
-		ads->ldap.in.min_wrapped = 0x2C; /* taken from a capture with LDAP unbind */
-		ads->ldap.in.max_wrapped = max_msg_size;
-		status = ads_setup_sasl_wrapping(ads, &ads_sasl_gssapi_ops, context_handle);
-		if (!ADS_ERR_OK(status)) {
-			DEBUG(0, ("ads_setup_sasl_wrapping() failed: %s\n",
-				ads_errstr(status)));
-			goto failed;
-		}
-		/* make sure we don't free context_handle */
-		context_handle = GSS_C_NO_CONTEXT;
-	}
-
 failed:
 
+	gss_release_name(&minor_status, &serv_name);
 	if (context_handle != GSS_C_NO_CONTEXT)
 		gss_delete_sec_context(&minor_status, &context_handle, GSS_C_NO_BUFFER);
+	krb5_free_principal(ctx, principal);
+	krb5_free_context(ctx);	
 
 	if(scred)
 		ber_bvfree(scred);
 	return status;
 }
+#endif /* HAVE_GGSAPI */
 
-static ADS_STATUS ads_sasl_gssapi_bind(ADS_STRUCT *ads)
-{
-	ADS_STATUS status;
-	struct ads_service_principal p;
-
-	status = ads_generate_service_principal(ads, NULL, &p);
-	if (!ADS_ERR_OK(status)) {
-		return status;
-	}
-
-	status = ads_sasl_gssapi_do_bind(ads, p.name);
-	if (ADS_ERR_OK(status)) {
-		ads_free_service_principal(&p);
-		return status;
-	}
-
-	DEBUG(10,("ads_sasl_gssapi_do_bind failed with: %s, "
-		  "calling kinit\n", ads_errstr(status)));
-
-	status = ADS_ERROR_KRB5(ads_kinit_password(ads));
-
-	if (ADS_ERR_OK(status)) {
-		status = ads_sasl_gssapi_do_bind(ads, p.name);
-	}
-
-	ads_free_service_principal(&p);
-
-	return status;
-}
-
-#endif /* HAVE_GSSAPI */
-
 /* mapping between SASL mechanisms and functions */
 static struct {
 	const char *name;
@@ -1094,16 +577,8 @@
 	status = ads_do_search(ads, "", LDAP_SCOPE_BASE, "(objectclass=*)", attrs, &res);
 	if (!ADS_ERR_OK(status)) return status;
 
-	values = ldap_get_values(ads->ldap.ld, res, "supportedSASLMechanisms");
+	values = ldap_get_values(ads->ld, res, "supportedSASLMechanisms");
 
-	if (ads->auth.flags & ADS_AUTH_SASL_SEAL) {
-		ads->ldap.wrap_type = ADS_SASLWRAP_TYPE_SEAL;
-	} else if (ads->auth.flags & ADS_AUTH_SASL_SIGN) {
-		ads->ldap.wrap_type = ADS_SASLWRAP_TYPE_SIGN;
-	} else {
-		ads->ldap.wrap_type = ADS_SASLWRAP_TYPE_PLAIN;
-	}
-
 	/* try our supported mechanisms in order */
 	for (i=0;sasl_mechanisms[i].name;i++) {
 		/* see if the server supports it */

Deleted: branches/samba/upstream/source/libads/sasl_wrapping.c
===================================================================
--- branches/samba/upstream/source/libads/sasl_wrapping.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libads/sasl_wrapping.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,312 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   ads sasl wrapping code
-   Copyright (C) Stefan Metzmacher 2007
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-
-#ifdef HAVE_LDAP_SASL_WRAPPING
-
-static int ads_saslwrap_setup(Sockbuf_IO_Desc *sbiod, void *arg)
-{
-	ADS_STRUCT *ads = (ADS_STRUCT *)arg;
-
-	ads->ldap.sbiod	= sbiod;
-
-	sbiod->sbiod_pvt = ads;
-
-	return 0;
-}
-
-static int ads_saslwrap_remove(Sockbuf_IO_Desc *sbiod)
-{
-	return 0;
-}
-
-static ber_slen_t ads_saslwrap_prepare_inbuf(ADS_STRUCT *ads)
-{
-	ads->ldap.in.ofs	= 0;
-	ads->ldap.in.needed	= 0;
-	ads->ldap.in.left	= 0;
-	ads->ldap.in.size	= 4 + ads->ldap.in.min_wrapped;
-	ads->ldap.in.buf	= talloc_array(ads->ldap.mem_ctx,
-					       uint8, ads->ldap.in.size);
-	if (!ads->ldap.in.buf) {
-		return -1;
-	}
-
-	return 0;
-}
-
-static ber_slen_t ads_saslwrap_grow_inbuf(ADS_STRUCT *ads)
-{
-	if (ads->ldap.in.size == (4 + ads->ldap.in.needed)) {
-		return 0;
-	}
-
-	ads->ldap.in.size	= 4 + ads->ldap.in.needed;
-	ads->ldap.in.buf	= talloc_realloc(ads->ldap.mem_ctx,
-						 ads->ldap.in.buf,
-						 uint8, ads->ldap.in.size);
-	if (!ads->ldap.in.buf) {
-		return -1;
-	}
-
-	return 0;
-}
-
-static void ads_saslwrap_shrink_inbuf(ADS_STRUCT *ads)
-{
-	talloc_free(ads->ldap.in.buf);
-
-	ads->ldap.in.buf	= NULL;
-	ads->ldap.in.size	= 0;
-	ads->ldap.in.ofs	= 0;
-	ads->ldap.in.needed	= 0;
-	ads->ldap.in.left	= 0;
-}
-
-static ber_slen_t ads_saslwrap_read(Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len)
-{
-	ADS_STRUCT *ads = (ADS_STRUCT *)sbiod->sbiod_pvt;
-	ber_slen_t ret;
-
-	/* If ofs < 4 it means we don't have read the length header yet */
-	if (ads->ldap.in.ofs < 4) {
-		ret = ads_saslwrap_prepare_inbuf(ads);
-		if (ret < 0) return ret;
-
-		ret = LBER_SBIOD_READ_NEXT(sbiod,
-					   ads->ldap.in.buf + ads->ldap.in.ofs,
-					   4 - ads->ldap.in.ofs);
-		if (ret <= 0) return ret;
-		ads->ldap.in.ofs += ret;
-
-		if (ads->ldap.in.ofs < 4) goto eagain;
-
-		ads->ldap.in.needed = RIVAL(ads->ldap.in.buf, 0);
-		if (ads->ldap.in.needed > ads->ldap.in.max_wrapped) {
-			errno = EINVAL;
-			return -1;
-		}
-		if (ads->ldap.in.needed < ads->ldap.in.min_wrapped) {
-			errno = EINVAL;
-			return -1;
-		}
-
-		ret = ads_saslwrap_grow_inbuf(ads);
-		if (ret < 0) return ret;
-	}
-
-	/*
-	 * if there's more data needed from the remote end,
-	 * we need to read more
-	 */
-	if (ads->ldap.in.needed > 0) {
-		ret = LBER_SBIOD_READ_NEXT(sbiod,
-					   ads->ldap.in.buf + ads->ldap.in.ofs,
-					   ads->ldap.in.needed);
-		if (ret <= 0) return ret;
-		ads->ldap.in.ofs += ret;
-		ads->ldap.in.needed -= ret;
-
-		if (ads->ldap.in.needed > 0) goto eagain;
-	}
-
-	/*
-	 * if we have a complete packet and have not yet unwrapped it
-	 * we need to call the mech specific unwrap() hook
-	 */
-	if (ads->ldap.in.needed == 0 && ads->ldap.in.left == 0) {
-		ADS_STATUS status;
-		status = ads->ldap.wrap_ops->unwrap(ads);
-		if (!ADS_ERR_OK(status)) {
-			errno = EACCES;
-			return -1;
-		}
-	}
-
-	/*
-	 * if we have unwrapped data give it to the caller
-	 */
-	if (ads->ldap.in.left > 0) {
-		ret = MIN(ads->ldap.in.left, len);
-		memcpy(buf, ads->ldap.in.buf + ads->ldap.in.ofs, ret);
-		ads->ldap.in.ofs += ret;
-		ads->ldap.in.left -= ret;
-
-		/*
-		 * if no more is left shrink the inbuf,
-		 * this will trigger reading a new SASL packet
-		 * from the remote stream in the next call
-		 */
-		if (ads->ldap.in.left == 0) {
-			ads_saslwrap_shrink_inbuf(ads);
-		}
-
-		return ret;
-	}
-
-	/*
-	 * if we don't have anything for the caller yet,
-	 * tell him to ask again
-	 */
-eagain:
-	errno = EAGAIN;
-	return -1;
-}
-
-static ber_slen_t ads_saslwrap_prepare_outbuf(ADS_STRUCT *ads, uint32 len)
-{
-	ads->ldap.out.ofs	= 0;
-	ads->ldap.out.left	= 0;
-	ads->ldap.out.size	= 4 + ads->ldap.out.sig_size + len;
-	ads->ldap.out.buf	= talloc_array(ads->ldap.mem_ctx,
-					       uint8, ads->ldap.out.size);
-	if (!ads->ldap.out.buf) {
-		return -1;
-	}
-
-	return 0;
-}
-
-static void ads_saslwrap_shrink_outbuf(ADS_STRUCT *ads)
-{
-	talloc_free(ads->ldap.out.buf);
-
-	ads->ldap.out.buf	= NULL;
-	ads->ldap.out.size	= 0;
-	ads->ldap.out.ofs	= 0;
-	ads->ldap.out.left	= 0;
-}
-
-static ber_slen_t ads_saslwrap_write(Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len)
-{
-	ADS_STRUCT *ads = (ADS_STRUCT *)sbiod->sbiod_pvt;
-	ber_slen_t ret, rlen;
-
-	/* if the buffer is empty, we need to wrap in incoming buffer */
-	if (ads->ldap.out.left == 0) {
-		ADS_STATUS status;
-
-		if (len == 0) {
-			errno = EINVAL;
-			return -1;
-		}
-
-		rlen = MIN(len, ads->ldap.out.max_unwrapped);
-
-		ret = ads_saslwrap_prepare_outbuf(ads, rlen);
-		if (ret < 0) return ret;
-		
-		status = ads->ldap.wrap_ops->wrap(ads, (uint8 *)buf, rlen);
-		if (!ADS_ERR_OK(status)) {
-			errno = EACCES;
-			return -1;
-		}
-
-		RSIVAL(ads->ldap.out.buf, 0, ads->ldap.out.left - 4);
-	} else {
-		rlen = -1;
-	}
-
-	ret = LBER_SBIOD_WRITE_NEXT(sbiod,
-				    ads->ldap.out.buf + ads->ldap.out.ofs,
-				    ads->ldap.out.left);
-	if (ret <= 0) return ret;
-	ads->ldap.out.ofs += ret;
-	ads->ldap.out.left -= ret;
-
-	if (ads->ldap.out.left == 0) {
-		ads_saslwrap_shrink_outbuf(ads);
-	}
-
-	if (rlen > 0) return rlen;
-
-	errno = EAGAIN;
-	return -1;
-}
-
-static int ads_saslwrap_ctrl(Sockbuf_IO_Desc *sbiod, int opt, void *arg)
-{
-	ADS_STRUCT *ads = (ADS_STRUCT *)sbiod->sbiod_pvt;
-	int ret;
-
-	switch (opt) {
-	case LBER_SB_OPT_DATA_READY:
-		if (ads->ldap.in.left > 0) {
-			return 1;
-		}
-		ret = LBER_SBIOD_CTRL_NEXT(sbiod, opt, arg);
-		break;
-	default:
-		ret = LBER_SBIOD_CTRL_NEXT(sbiod, opt, arg);
-		break;
-	}
-
-	return ret;
-}
-
-static int ads_saslwrap_close(Sockbuf_IO_Desc *sbiod)
-{
-	return 0;
-}
-
-static const Sockbuf_IO ads_saslwrap_sockbuf_io = {
-	ads_saslwrap_setup,	/* sbi_setup */
-	ads_saslwrap_remove,	/* sbi_remove */
-	ads_saslwrap_ctrl,	/* sbi_ctrl */
-	ads_saslwrap_read,	/* sbi_read */
-	ads_saslwrap_write,	/* sbi_write */
-	ads_saslwrap_close	/* sbi_close */
-};
-
-ADS_STATUS ads_setup_sasl_wrapping(ADS_STRUCT *ads,
-				   const struct ads_saslwrap_ops *ops,
-				   void *private_data)
-{
-	ADS_STATUS status;
-	Sockbuf *sb;
-	Sockbuf_IO *io = discard_const_p(Sockbuf_IO, &ads_saslwrap_sockbuf_io);
-	int rc;
-
-	rc = ldap_get_option(ads->ldap.ld, LDAP_OPT_SOCKBUF, &sb);
-	status = ADS_ERROR_LDAP(rc);
-	if (!ADS_ERR_OK(status)) {
-		return status;
-	}
-
-	/* setup the real wrapping callbacks */
-	rc = ber_sockbuf_add_io(sb, io, LBER_SBIOD_LEVEL_TRANSPORT, ads);
-	status = ADS_ERROR_LDAP(rc);
-	if (!ADS_ERR_OK(status)) {
-		return status;
-	}
-
-	ads->ldap.wrap_ops		= ops;
-	ads->ldap.wrap_private_data	= private_data;
-
-	return ADS_SUCCESS;
-}
-#else
-ADS_STATUS ads_setup_sasl_wrapping(ADS_STRUCT *ads,
-				   const struct ads_saslwrap_ops *ops,
-				   void *private_data)
-{
-	return ADS_ERROR_NT(NT_STATUS_NOT_SUPPORTED);
-}
-#endif /* HAVE_LDAP_SASL_WRAPPING */

Copied: branches/samba/upstream/source/libads/smb_krb5_locator.c (from rev 1928, branches/samba/upstream/source/libads/smb_krb5_locator.c)
===================================================================
--- branches/samba/upstream/source/libads/smb_krb5_locator.c	                        (rev 0)
+++ branches/samba/upstream/source/libads/smb_krb5_locator.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,386 @@
+/* 
+   Unix SMB/CIFS implementation.
+   kerberos locator plugin
+   Copyright (C) Guenther Deschner 2007
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+
+#if defined(HAVE_KRB5) && defined(HAVE_KRB5_LOCATE_PLUGIN_H)
+
+#include <krb5/locate_plugin.h>
+
+static const char *get_service_from_locate_service_type(enum locate_service_type svc)
+{
+	switch (svc) {
+		case locate_service_kdc:
+		case locate_service_master_kdc:
+			return "88";
+		case locate_service_kadmin:
+		case locate_service_krb524:
+			/* not supported */
+			return NULL;
+		case locate_service_kpasswd:
+			return "464";
+		default:
+			break;
+	}
+	return NULL;
+
+}
+
+static const char *locate_service_type_name(enum locate_service_type svc)
+{
+	switch (svc) {
+		case locate_service_kdc:
+			return "locate_service_kdc";
+		case locate_service_master_kdc:
+			return "locate_service_master_kdc";
+		case locate_service_kadmin:
+			return "locate_service_kadmin";
+		case locate_service_krb524:
+			return "locate_service_krb524";
+		case locate_service_kpasswd:
+			return "locate_service_kpasswd";
+		default:
+			break;
+	}
+	return NULL;
+}
+
+static const char *socktype_name(int socktype)
+{
+	switch (socktype) {
+		case SOCK_STREAM:
+			return "SOCK_STREAM";
+		case SOCK_DGRAM:
+			return "SOCK_DGRAM";
+		default:
+			break;
+	}
+	return "unknown";
+}
+
+static const char *family_name(int family)
+{
+	switch (family) {
+		case AF_UNSPEC:
+			return "AF_UNSPEC";
+		case AF_INET:
+			return "AF_INET";
+		case AF_INET6:
+			return "AF_INET6";
+		default:
+			break;
+	}
+	return "unknown";
+}
+
+/**
+ * Check input parameters, return KRB5_PLUGIN_NO_HANDLE for unsupported ones
+ *
+ * @param svc 
+ * @param realm string
+ * @param socktype integer
+ * @param family integer
+ *
+ * @return integer.
+ */
+
+static int smb_krb5_locator_lookup_sanity_check(enum locate_service_type svc,
+						const char *realm,
+						int socktype,
+						int family)
+{
+	if (!realm || strlen(realm) == 0) {
+		return EINVAL;
+	}
+
+	switch (svc) {
+		case locate_service_kdc:
+		case locate_service_master_kdc:
+		case locate_service_kpasswd:
+			break;
+		case locate_service_kadmin:
+		case locate_service_krb524:
+#ifdef KRB5_PLUGIN_NO_HANDLE
+			return KRB5_PLUGIN_NO_HANDLE;
+#else
+			return KRB5_KDC_UNREACH; /* Heimdal */
+#endif
+		default:
+			return EINVAL;
+	}
+
+	switch (family) {
+		case AF_UNSPEC:
+		case AF_INET:
+			break;
+		case AF_INET6: /* not yet */
+#ifdef KRB5_PLUGIN_NO_HANDLE
+			return KRB5_PLUGIN_NO_HANDLE;
+#else
+			return KRB5_KDC_UNREACH; /* Heimdal */
+#endif
+		default:
+			return EINVAL;
+	}
+
+	switch (socktype) {
+		case SOCK_STREAM:
+		case SOCK_DGRAM:
+		case 0: /* Heimdal uses that */
+			break;
+		default:
+			return EINVAL;
+	}
+
+	return 0;
+}
+
+/**
+ * Try to get addrinfo for a given host and call the krb5 callback
+ *
+ * @param name string
+ * @param service string
+ * @param in struct addrinfo hint
+ * @param cbfunc krb5 callback function
+ * @param cbdata void pointer cbdata
+ *
+ * @return krb5_error_code.
+ */
+
+static krb5_error_code smb_krb5_locator_call_cbfunc(const char *name, 
+						    const char *service,
+						    struct addrinfo *in,
+						    int (*cbfunc)(void *, int, struct sockaddr *),
+						    void *cbdata)
+{
+	struct addrinfo *out;
+	int ret;
+	int count = 3;
+
+	while (count) {
+
+		ret = getaddrinfo(name, service, in, &out);
+		if (ret == 0) {
+			break;
+		}
+
+		if (ret == EAI_AGAIN) {
+			count--;
+			continue;
+		}
+
+		DEBUG(10,("smb_krb5_locator_lookup: got ret: %s (%d)\n", 
+			gai_strerror(ret), ret));
+#ifdef KRB5_PLUGIN_NO_HANDLE
+		return KRB5_PLUGIN_NO_HANDLE;
+#else
+		return KRB5_KDC_UNREACH; /* Heimdal */
+#endif
+	}
+
+	ret = cbfunc(cbdata, out->ai_socktype, out->ai_addr);
+	if (ret) {
+		DEBUG(10,("smb_krb5_locator_lookup: failed to call callback: %s (%d)\n", 
+			error_message(ret), ret));
+	}
+
+	freeaddrinfo(out);
+
+	return ret;
+}
+
+/**
+ * PUBLIC INTERFACE: locate init
+ *
+ * @param context krb5_context
+ * @param privata_data pointer to private data pointer
+ *
+ * @return krb5_error_code.
+ */
+
+krb5_error_code smb_krb5_locator_init(krb5_context context, 
+				      void **private_data)
+{
+	setup_logging("smb_krb5_locator", True);
+	load_case_tables();
+	lp_load(dyn_CONFIGFILE,True,False,False,True);
+
+	DEBUG(10,("smb_krb5_locator_init: called\n"));
+
+	return 0;
+}
+
+/**
+ * PUBLIC INTERFACE: close locate
+ *
+ * @param private_data pointer to private data
+ *
+ * @return void.
+ */
+
+void smb_krb5_locator_close(void *private_data)
+{
+	DEBUG(10,("smb_krb5_locator_close: called\n"));
+
+	/* gfree_all(); */
+}
+
+/**
+ * PUBLIC INTERFACE: locate lookup
+ *
+ * @param private_data pointer to private data
+ * @param svc enum locate_service_type.
+ * @param realm string
+ * @param socktype integer
+ * @param family integer
+ * @param cbfunc callback function to send back entries
+ * @param cbdata void pointer to cbdata
+ *
+ * @return krb5_error_code.
+ */
+
+krb5_error_code smb_krb5_locator_lookup(void *private_data,
+					enum locate_service_type svc,
+					const char *realm,
+					int socktype,
+					int family,
+					int (*cbfunc)(void *, int, struct sockaddr *),
+					void *cbdata)
+{
+	NTSTATUS status;
+	krb5_error_code ret;
+	char *sitename = NULL;
+	struct ip_service *ip_list;
+	int count = 0;
+	struct addrinfo aihints;
+	char *saf_name = NULL;
+	int i;
+
+	DEBUG(10,("smb_krb5_locator_lookup: called for\n"));
+	DEBUGADD(10,("\tsvc: %s (%d), realm: %s\n", 
+		locate_service_type_name(svc), svc, realm));
+	DEBUGADD(10,("\tsocktype: %s (%d), family: %s (%d)\n", 
+		socktype_name(socktype), socktype,
+	        family_name(family), family));
+
+	ret = smb_krb5_locator_lookup_sanity_check(svc, realm, socktype, family);
+	if (ret) {
+		DEBUG(10,("smb_krb5_locator_lookup: returning ret: %s (%d)\n", 
+			error_message(ret), ret));
+		return ret;
+	}
+
+	/* first try to fetch from SAF cache */
+
+	saf_name = saf_fetch(realm);
+	if (!saf_name || strlen(saf_name) == 0) {
+		DEBUG(10,("smb_krb5_locator_lookup: no SAF name stored for %s\n", 
+			realm));
+		goto find_kdc;
+	}
+
+	DEBUG(10,("smb_krb5_locator_lookup: got %s for %s from SAF cache\n", 
+		saf_name, realm));
+
+	ZERO_STRUCT(aihints);
+	
+	aihints.ai_family = family;
+	aihints.ai_socktype = socktype;
+
+	ret = smb_krb5_locator_call_cbfunc(saf_name, 
+					  get_service_from_locate_service_type(svc), 
+					  &aihints, 
+					  cbfunc, cbdata);
+	if (ret) {
+		return ret;
+	}
+
+	return 0;
+
+ find_kdc:
+
+	/* now try to find via site-aware DNS SRV query */
+
+	sitename = sitename_fetch(realm);
+	status = get_kdc_list(realm, sitename, &ip_list, &count);
+
+	/* if we didn't found any KDCs on our site go to the main list */
+
+	if (NT_STATUS_IS_OK(status) && sitename && (count == 0)) {
+		SAFE_FREE(ip_list);
+		SAFE_FREE(sitename);
+		status = get_kdc_list(realm, NULL, &ip_list, &count);
+	}
+
+	SAFE_FREE(sitename);
+
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(10,("smb_krb5_locator_lookup: got %s (%s)\n",
+			nt_errstr(status), 
+			error_message(nt_status_to_krb5(status))));
+#ifdef KRB5_PLUGIN_NO_HANDLE
+		return KRB5_PLUGIN_NO_HANDLE;
+#else
+		return KRB5_KDC_UNREACH; /* Heimdal */
+#endif
+	}
+
+	for (i=0; i<count; i++) {
+
+		const char *host = NULL;
+		const char *port = NULL;
+
+		ZERO_STRUCT(aihints);
+
+		aihints.ai_family = family;
+		aihints.ai_socktype = socktype;
+
+		host = inet_ntoa(ip_list[i].ip);
+		port = get_service_from_locate_service_type(svc);
+
+		ret = smb_krb5_locator_call_cbfunc(host,
+						  port,
+						  &aihints, 
+						  cbfunc, cbdata);
+		if (ret) {
+			/* got error */
+			break;
+		}
+	}
+
+	SAFE_FREE(ip_list);
+
+	return ret;
+}
+
+#ifdef HEIMDAL_KRB5_LOCATE_PLUGIN_H
+#define SMB_KRB5_LOCATOR_SYMBOL_NAME resolve /* Heimdal */
+#else
+#define SMB_KRB5_LOCATOR_SYMBOL_NAME service_locator /* MIT */
+#endif
+
+const krb5plugin_service_locate_ftable SMB_KRB5_LOCATOR_SYMBOL_NAME = {
+	0, /* version */
+	smb_krb5_locator_init,
+	smb_krb5_locator_close,
+	smb_krb5_locator_lookup,
+};
+
+#endif

Modified: branches/samba/upstream/source/libads/util.c
===================================================================
--- branches/samba/upstream/source/libads/util.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libads/util.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -64,8 +65,6 @@
 		server_realm = SMB_STRDUP(ads->server.realm);
 
 		if (!server || !server_realm) {
-			SAFE_FREE(server);
-			SAFE_FREE(server_realm);
 			return ADS_ERROR(LDAP_NO_MEMORY);
 		}
 

Modified: branches/samba/upstream/source/libgpo/gpo_fetch.c
===================================================================
--- branches/samba/upstream/source/libgpo/gpo_fetch.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libgpo/gpo_fetch.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,20 +1,21 @@
-/*
+/* 
  *  Unix SMB/CIFS implementation.
  *  Group Policy Object Support
  *  Copyright (C) Guenther Deschner 2005-2006
- *
+ *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
- *
+ *  
  *  This program is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
- *
+ *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -23,55 +24,51 @@
  explode the GPO CIFS URI into their components
 ****************************************************************/
 
-NTSTATUS gpo_explode_filesyspath(TALLOC_CTX *mem_ctx,
-				 const char *file_sys_path,
-				 char **server,
-				 char **service,
-				 char **nt_path,
-				 char **unix_path)
+NTSTATUS ads_gpo_explode_filesyspath(ADS_STRUCT *ads, 
+				     TALLOC_CTX *mem_ctx, 
+				     const char *file_sys_path, 
+				     char **server, 
+				     char **service, 
+				     char **nt_path,
+				     char **unix_path)
 {
-	char *path = NULL;
+	fstring tok;
+	pstring path;
 
 	*server = NULL;
 	*service = NULL;
 	*nt_path = NULL;
 	*unix_path = NULL;
 
-	if (!file_sys_path) {
-		return NT_STATUS_OK;
+	if (!next_token(&file_sys_path, tok, "\\", sizeof(tok))) {
+		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-	if (!next_token_talloc(mem_ctx, &file_sys_path, server, "\\")) {
-		return NT_STATUS_INVALID_PARAMETER;
+	if ((*server = talloc_strdup(mem_ctx, tok)) == NULL) {
+		return NT_STATUS_NO_MEMORY;
 	}
-	NT_STATUS_HAVE_NO_MEMORY(*server);
 
-	if (!next_token_talloc(mem_ctx, &file_sys_path, service, "\\")) {
+	if (!next_token(&file_sys_path, tok, "\\", sizeof(tok))) {
 		return NT_STATUS_INVALID_PARAMETER;
 	}
-	NT_STATUS_HAVE_NO_MEMORY(*service);
 
-	if ((*nt_path = talloc_asprintf(mem_ctx, "\\%s", file_sys_path))
-		== NULL) {
+	if ((*service = talloc_strdup(mem_ctx, tok)) == NULL) {
 		return NT_STATUS_NO_MEMORY;
 	}
-	NT_STATUS_HAVE_NO_MEMORY(*nt_path);
 
-	if ((path = talloc_asprintf(mem_ctx,
-					"%s/%s",
-					lock_path(GPO_CACHE_DIR),
-					file_sys_path)) == NULL) {
+	if ((*nt_path = talloc_asprintf(mem_ctx, "\\%s", file_sys_path)) == NULL) {
 		return NT_STATUS_NO_MEMORY;
 	}
-	path = talloc_string_sub(mem_ctx, path, "\\", "/");
-	if (!path) {
+
+	pstrcpy(path, lock_path(GPO_CACHE_DIR));
+	pstrcat(path, "/");
+	pstrcat(path, file_sys_path);
+	pstring_sub(path, "\\", "/");
+
+	if ((*unix_path = talloc_strdup(mem_ctx, path)) == NULL) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	*unix_path = talloc_strdup(mem_ctx, path);
-	NT_STATUS_HAVE_NO_MEMORY(*unix_path);
-
-	TALLOC_FREE(path);
 	return NT_STATUS_OK;
 }
 
@@ -79,12 +76,13 @@
  prepare the local disc storage for "unix_path"
 ****************************************************************/
 
-static NTSTATUS gpo_prepare_local_store(TALLOC_CTX *mem_ctx,
-					const char *unix_path)
+NTSTATUS ads_gpo_prepare_local_store(ADS_STRUCT *ads, 
+				     TALLOC_CTX *mem_ctx, 
+				     const char *unix_path)
 {
 	const char *top_dir = lock_path(GPO_CACHE_DIR);
 	char *current_dir;
-	char *tok;
+	fstring tok;
 
 	current_dir = talloc_strdup(mem_ctx, top_dir);
 	NT_STATUS_HAVE_NO_MEMORY(current_dir);
@@ -93,14 +91,16 @@
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	while (next_token_talloc(mem_ctx, &unix_path, &tok, "/")) {
+	while (next_token(&unix_path, tok, "/", sizeof(tok))) {
+	
 		if (strequal(tok, GPO_CACHE_DIR)) {
 			break;
 		}
 	}
 
-	while (next_token_talloc(mem_ctx, &unix_path, &tok, "/")) {
-		current_dir = talloc_asprintf_append_buffer(current_dir, "/%s", tok);
+	while (next_token(&unix_path, tok, "/", sizeof(tok))) {
+
+		current_dir = talloc_asprintf_append(current_dir, "/%s", tok);
 		NT_STATUS_HAVE_NO_MEMORY(current_dir);
 
 		if ((mkdir(current_dir, 0644)) < 0 && errno != EEXIST) {
@@ -115,62 +115,70 @@
  download a full GPO via CIFS
 ****************************************************************/
 
-NTSTATUS gpo_fetch_files(TALLOC_CTX *mem_ctx,
-			 struct cli_state *cli,
-			 struct GROUP_POLICY_OBJECT *gpo)
+NTSTATUS ads_fetch_gpo_files(ADS_STRUCT *ads, 
+			    TALLOC_CTX *mem_ctx, 
+			    struct cli_state *cli, 
+			    struct GROUP_POLICY_OBJECT *gpo)
 {
 	NTSTATUS result;
-	char *server, *service, *nt_path, *unix_path;
-	char *nt_ini_path, *unix_ini_path;
+	char *server, *service, *nt_path, *unix_path, *nt_ini_path, *unix_ini_path;
 
-	result = gpo_explode_filesyspath(mem_ctx, gpo->file_sys_path,
-					 &server, &service, &nt_path,
-					 &unix_path);
-	NT_STATUS_NOT_OK_RETURN(result);
+	result = ads_gpo_explode_filesyspath(ads, mem_ctx, gpo->file_sys_path, 
+					     &server, &service, &nt_path, &unix_path);
+	if (!NT_STATUS_IS_OK(result)) {
+		goto out;
+	}
 
-	result = gpo_prepare_local_store(mem_ctx, unix_path);
-	NT_STATUS_NOT_OK_RETURN(result);
+	result = ads_gpo_prepare_local_store(ads, mem_ctx, unix_path);
+	if (!NT_STATUS_IS_OK(result)) {
+		goto out;
+	}
 
 	unix_ini_path = talloc_asprintf(mem_ctx, "%s/%s", unix_path, GPT_INI);
 	nt_ini_path = talloc_asprintf(mem_ctx, "%s\\%s", nt_path, GPT_INI);
-	NT_STATUS_HAVE_NO_MEMORY(unix_ini_path);
-	NT_STATUS_HAVE_NO_MEMORY(nt_ini_path);
+	if (!unix_path || !nt_ini_path) {
+		result = NT_STATUS_NO_MEMORY;
+		goto out;
+	}
 
 	result = gpo_copy_file(mem_ctx, cli, nt_ini_path, unix_ini_path);
-	NT_STATUS_NOT_OK_RETURN(result);
+	if (!NT_STATUS_IS_OK(result)) {
+		goto out;
+	}
 
 	result = gpo_sync_directories(mem_ctx, cli, nt_path, unix_path);
-	NT_STATUS_NOT_OK_RETURN(result);
+	if (!NT_STATUS_IS_OK(result)) {
+		goto out;
+	}
 
-	return NT_STATUS_OK;
+	result = NT_STATUS_OK;
+
+ out:
+	return result;
 }
 
 /****************************************************************
  get the locally stored gpt.ini version number
 ****************************************************************/
 
-NTSTATUS gpo_get_sysvol_gpt_version(TALLOC_CTX *mem_ctx,
-				    const char *unix_path,
-				    uint32_t *sysvol_version,
-				    char **display_name)
+NTSTATUS ads_gpo_get_sysvol_gpt_version(ADS_STRUCT *ads, 
+					TALLOC_CTX *mem_ctx, 
+					const char *unix_path, 
+					uint32 *sysvol_version,
+					char **display_name)
 {
 	NTSTATUS status;
-	uint32_t version = 0;
+	uint32 version;
 	char *local_path = NULL;
 	char *name = NULL;
 
-	if (!unix_path) {
-		return NT_STATUS_OK;
-	}
-
 	local_path = talloc_asprintf(mem_ctx, "%s/%s", unix_path, GPT_INI);
 	NT_STATUS_HAVE_NO_MEMORY(local_path);
 
 	status = parse_gpt_ini(mem_ctx, local_path, &version, &name);
 	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10,("gpo_get_sysvol_gpt_version: "
-			"failed to parse ini [%s]: %s\n",
-			local_path, nt_errstr(status)));
+		DEBUG(10,("ads_gpo_get_sysvol_gpt_version: failed to parse ini [%s]: %s\n", 
+			unix_path, nt_errstr(status)));
 		return status;
 	}
 

Modified: branches/samba/upstream/source/libgpo/gpo_filesync.c
===================================================================
--- branches/samba/upstream/source/libgpo/gpo_filesync.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libgpo/gpo_filesync.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,20 +1,21 @@
-/*
+/* 
  *  Unix SMB/CIFS implementation.
  *  Group Policy Object Support
  *  Copyright (C) Guenther Deschner 2006
- *
+ *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
- *
+ *  
  *  This program is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
- *
+ *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -24,14 +25,14 @@
 	struct cli_state *cli;
 	char *remote_path;
 	char *local_path;
-	char *mask;
-	uint16_t attribute;
+	pstring mask;
+	uint16 attribute;
 };
 
 static void gpo_sync_func(const char *mnt,
-			  file_info *info,
-			  const char *mask,
-			  void *state);
+			   file_info *info,
+			   const char *mask,
+			   void *state);
 
 NTSTATUS gpo_copy_file(TALLOC_CTX *mem_ctx,
 		       struct cli_state *cli,
@@ -44,6 +45,7 @@
 	char *data = NULL;
 	static int io_bufsize = 64512;
 	int read_size = io_bufsize;
+	off_t start = 0;
 	off_t nread = 0;
 
 	if ((fnum = cli_open(cli, nt_path, O_RDONLY, DENY_NONE)) == -1) {
@@ -55,7 +57,7 @@
 		result = map_nt_error_from_unix(errno);
 		goto out;
 	}
-
+	 
 	if ((data = (char *)SMB_MALLOC(read_size)) == NULL) {
 		result = NT_STATUS_NO_MEMORY;
 		goto out;
@@ -63,7 +65,7 @@
 
 	while (1) {
 
-		int n = cli_read(cli, fnum, data, nread, read_size);
+		int n = cli_read(cli, fnum, data, nread + start, read_size);
 
 		if (n <= 0)
 			break;
@@ -106,21 +108,17 @@
  sync files
 ****************************************************************/
 
-static bool gpo_sync_files(struct sync_context *ctx)
+static BOOL gpo_sync_files(struct sync_context *ctx)
 {
 	DEBUG(3,("calling cli_list with mask: %s\n", ctx->mask));
 
-	if (cli_list(ctx->cli,
-		     ctx->mask,
-		     ctx->attribute,
-		     gpo_sync_func,
-		     ctx) == -1) {
-		DEBUG(1,("listing [%s] failed with error: %s\n",
+	if (cli_list(ctx->cli, ctx->mask, ctx->attribute, gpo_sync_func, ctx) == -1) {
+		DEBUG(1,("listing [%s] failed with error: %s\n", 
 			ctx->mask, cli_errstr(ctx->cli)));
-		return false;
+		return False;
 	}
 
-	return true;
+	return True;
 }
 
 /****************************************************************
@@ -144,7 +142,7 @@
 		return;
 	}
 
-	DEBUG(5,("gpo_sync_func: got mask: [%s], name: [%s]\n",
+	DEBUG(5,("gpo_sync_func: got mask: [%s], name: [%s]\n", 
 		mask, info->name));
 
 	if (info->mode & aDIR) {
@@ -161,23 +159,18 @@
 
 		result = gpo_copy_dir(unix_dir);
 		if (!NT_STATUS_IS_OK(result)) {
-			DEBUG(1,("failed to copy dir: %s\n",
-				nt_errstr(result)));
+			DEBUG(1,("failed to copy dir: %s\n", nt_errstr(result)));
 		}
 
 		old_nt_dir = ctx->remote_path;
-		ctx->remote_path = talloc_strdup(ctx->mem_ctx, nt_dir);
-
+		ctx->remote_path = nt_dir;
+		
 		old_unix_dir = ctx->local_path;
 		ctx->local_path = talloc_strdup(ctx->mem_ctx, unix_dir);
 
-		ctx->mask = talloc_asprintf(ctx->mem_ctx,
-					"%s\\*",
-					nt_dir);
-		if (!ctx->local_path || !ctx->mask || !ctx->remote_path) {
-			DEBUG(0,("gpo_sync_func: ENOMEM\n"));
-			return;
-		}
+		pstrcpy(ctx->mask, nt_dir);
+		pstrcat(ctx->mask, "\\*");
+
 		if (!gpo_sync_files(ctx)) {
 			DEBUG(0,("could not sync files\n"));
 		}
@@ -197,11 +190,9 @@
 	fstrcat(unix_filename, "/");
 	fstrcat(unix_filename, info->name);
 
-	result = gpo_copy_file(ctx->mem_ctx, ctx->cli,
-			       nt_filename, unix_filename);
+	result = gpo_copy_file(ctx->mem_ctx, ctx->cli, nt_filename, unix_filename);
 	if (!NT_STATUS_IS_OK(result)) {
-		DEBUG(1,("failed to copy file: %s\n",
-			nt_errstr(result)));
+		DEBUG(1,("failed to copy file: %s\n", nt_errstr(result)));
 	}
 }
 
@@ -210,9 +201,9 @@
  list a remote directory and download recursivly
 ****************************************************************/
 
-NTSTATUS gpo_sync_directories(TALLOC_CTX *mem_ctx,
-			      struct cli_state *cli,
-			      const char *nt_path,
+NTSTATUS gpo_sync_directories(TALLOC_CTX *mem_ctx, 
+			      struct cli_state *cli, 
+			      const char *nt_path, 
 			      const char *local_path)
 {
 	struct sync_context ctx;
@@ -223,12 +214,8 @@
 	ctx.local_path	= CONST_DISCARD(char *, local_path);
 	ctx.attribute 	= (aSYSTEM | aHIDDEN | aDIR);
 
-	ctx.mask = talloc_asprintf(mem_ctx,
-				"%s\\*",
-				nt_path);
-	if (!ctx.mask) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	pstrcpy(ctx.mask, nt_path);
+	pstrcat(ctx.mask, "\\*");
 
 	if (!gpo_sync_files(&ctx)) {
 		return NT_STATUS_NO_SUCH_FILE;

Deleted: branches/samba/upstream/source/libgpo/gpo_ini.c
===================================================================
--- branches/samba/upstream/source/libgpo/gpo_ini.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libgpo/gpo_ini.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,245 +0,0 @@
-/*
- *  Unix SMB/CIFS implementation.
- *  Group Policy Support
- *  Copyright (C) Guenther Deschner 2007
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "includes.h"
-#include "gpo_ini.h"
-
-/****************************************************************
-****************************************************************/
-
-static int gp_inifile_free_context(struct gp_inifile_context *ctx)
-{
-	if (!ctx) {
-		return 0;
-	}
-
-	if (ctx->generated_filename) {
-		unlink(ctx->generated_filename);
-		ctx->generated_filename = NULL;
-	}
-
-	if (ctx->dict) {
-		iniparser_freedict(ctx->dict);
-		ctx->dict = NULL;
-	}
-
-	ctx = NULL;
-
-	return 0;
-}
-
-/****************************************************************
-****************************************************************/
-
-static NTSTATUS convert_file_from_ucs2(TALLOC_CTX *mem_ctx,
-				       const char *filename_in,
-				       char **filename_out)
-{
-	int tmp_fd = -1;
-	uint8 *data_in = NULL;
-	uint8 *data_out = NULL;
-	char *tmp_name = NULL;
-	NTSTATUS status;
-	size_t n = 0;
-
-	if (!filename_out) {
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	data_in = (uint8 *)file_load(filename_in, &n, 0);
-	if (!data_in) {
-		status = NT_STATUS_NO_SUCH_FILE;
-		goto out;
-	}
-
-	tmp_name = talloc_asprintf(mem_ctx, "%s/convert_file_from_ucs2.XXXXXX",
-		tmpdir());
-	if (!tmp_name) {
-		status = NT_STATUS_NO_MEMORY;
-		goto out;
-	}
-
-	tmp_fd = smb_mkstemp(tmp_name);
-	if (tmp_fd == -1) {
-		status = NT_STATUS_ACCESS_DENIED;
-		goto out;
-	}
-
-	n = convert_string_talloc(mem_ctx, CH_UTF16LE, CH_UNIX,
-				  data_in, n, &data_out, False);
-
-	if (n == -1) {
-		status = NT_STATUS_INVALID_BUFFER_SIZE;
-		goto out;
-	}
-
-	/* skip utf8 BOM */
-	DEBUG(11,("convert_file_from_ucs2: "
-	       "data_out[0]: 0x%x, data_out[1]: 0x%x, data_out[2]: 0x%x\n",
-		data_out[0], data_out[1], data_out[2]));
-
-	if ((data_out[0] == 0xef) && (data_out[1] == 0xbb) &&
-	    (data_out[2] == 0xbf)) {
-		DEBUG(11,("convert_file_from_ucs2: "
-			 "%s skipping utf8 BOM\n", tmp_name));
-		data_out += 3;
-		n -= 3;
-	}
-
-	if (sys_write(tmp_fd, data_out, n) != n) {
-		status = map_nt_error_from_unix(errno);
-		goto out;
-	}
-
-	*filename_out = tmp_name;
-
-	status = NT_STATUS_OK;
-
- out:
-	if (tmp_fd != -1) {
-		close(tmp_fd);
-	}
-
-	SAFE_FREE(data_in);
-
-	return status;
-}
-
-/****************************************************************
-****************************************************************/
-
- NTSTATUS gp_inifile_init_context(TALLOC_CTX *mem_ctx,
-				 uint32_t flags,
-				 const char *unix_path,
-				 const char *suffix,
-				 struct gp_inifile_context **ctx_ret)
-{
-	struct gp_inifile_context *ctx = NULL;
-	NTSTATUS status;
-	dictionary *dict = NULL;
-	char *tmp_filename = NULL;
-	const char *ini_filename = NULL;
-
-	if (!unix_path || !ctx_ret) {
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	ctx = TALLOC_ZERO_P(mem_ctx, struct gp_inifile_context);
-	NT_STATUS_HAVE_NO_MEMORY(ctx);
-
-	talloc_set_destructor(ctx, gp_inifile_free_context);
-
-	status = gp_find_file(mem_ctx, flags, unix_path, suffix,
-			      &ini_filename);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		goto failed;
-	}
-
-	status = convert_file_from_ucs2(mem_ctx, ini_filename,
-					&tmp_filename);
-	if (!NT_STATUS_IS_OK(status)) {
-		goto failed;
-	}
-
-	dict = iniparser_load(tmp_filename);
-	if (!dict) {
-		status = NT_STATUS_NO_SUCH_FILE;
-		goto failed;
-	}
-
-	ctx->generated_filename = tmp_filename;
-	ctx->dict = dict;
-	ctx->mem_ctx = mem_ctx;
-
-	*ctx_ret = ctx;
-
-	return NT_STATUS_OK;
-
- failed:
-
-	DEBUG(1,("gp_inifile_init_context failed: %s\n",
-		nt_errstr(status)));
-
-	TALLOC_FREE(ctx);
-
-	return status;
-}
-
-/****************************************************************
- parse the local gpt.ini file
-****************************************************************/
-
-#define GPT_INI_SECTION_GENERAL "General"
-#define GPT_INI_PARAMETER_VERSION "Version"
-#define GPT_INI_PARAMETER_DISPLAYNAME "displayName"
-
-NTSTATUS parse_gpt_ini(TALLOC_CTX *mem_ctx,
-		       const char *filename,
-		       uint32_t *version,
-		       char **display_name)
-{
-	NTSTATUS result;
-	uint32_t v = 0;
-	char *name = NULL;
-	dictionary *dict = NULL;
-
-	if (!filename) {
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	dict = iniparser_load(filename);
-	if (!dict) {
-		return NT_STATUS_NO_SUCH_FILE;
-	}
-
-	if ((name = iniparser_getstring(dict, GPT_INI_SECTION_GENERAL
-			":"GPT_INI_PARAMETER_DISPLAYNAME, NULL)) == NULL) {
-		/* the default domain policy and the default domain controller
-		 * policy never have a displayname in their gpt.ini file */
-		DEBUG(10,("parse_gpt_ini: no name in %s\n", filename));
-	}
-
-	if (name && display_name) {
-		*display_name = talloc_strdup(mem_ctx, name);
-		if (*display_name == NULL) {
-			result = NT_STATUS_NO_MEMORY;
-			goto out;
-		}
-	}
-
-	if ((v = iniparser_getint(dict, GPT_INI_SECTION_GENERAL
-			":"GPT_INI_PARAMETER_VERSION, Undefined)) == Undefined) {
-		DEBUG(10,("parse_gpt_ini: no version\n"));
-		result = NT_STATUS_INTERNAL_DB_CORRUPTION;
-		goto out;
-	}
-
-	if (version) {
-		*version = v;
-	}
-
-	result = NT_STATUS_OK;
- out:
-	if (dict) {
-		iniparser_freedict(dict);
-	}
-
-	return result;
-}

Deleted: branches/samba/upstream/source/libgpo/gpo_ini.h
===================================================================
--- branches/samba/upstream/source/libgpo/gpo_ini.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libgpo/gpo_ini.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,33 +0,0 @@
-/*
- *  Unix SMB/CIFS implementation.
- *  Group Policy Support
- *  Copyright (C) Guenther Deschner 2007
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-/* FIXME: get rid of iniparser */
-#include <iniparser.h>
-
-struct gp_inifile_context {
-	TALLOC_CTX *mem_ctx;
-	dictionary *dict;
-	const char *generated_filename;
-};
-
-/* prototypes */
-
-NTSTATUS gp_inifile_init_context(TALLOC_CTX *mem_ctx, uint32_t flags,
-				 const char *unix_path, const char *suffix,
-				 struct gp_inifile_context **ctx_ret);

Modified: branches/samba/upstream/source/libgpo/gpo_ldap.c
===================================================================
--- branches/samba/upstream/source/libgpo/gpo_ldap.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libgpo/gpo_ldap.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,84 +1,77 @@
-/*
+/* 
  *  Unix SMB/CIFS implementation.
  *  Group Policy Object Support
- *  Copyright (C) Guenther Deschner 2005,2007
- *
+ *  Copyright (C) Guenther Deschner 2005
+ *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
- *
+ *  
  *  This program is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
- *
+ *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
 
+#ifdef HAVE_LDAP
+
 /****************************************************************
  parse the raw extension string into a GP_EXT structure
 ****************************************************************/
 
-bool ads_parse_gp_ext(TALLOC_CTX *mem_ctx,
-		      const char *extension_raw,
-		      struct GP_EXT **gp_ext)
+ADS_STATUS ads_parse_gp_ext(TALLOC_CTX *mem_ctx,
+			    const char *extension_raw,
+			    struct GP_EXT *gp_ext)
 {
-	bool ret = false;
-	struct GP_EXT *ext = NULL;
-	char **ext_list = NULL;
+	char **ext_list;
 	char **ext_strings = NULL;
 	int i;
 
-	if (!extension_raw) {
-		goto parse_error;
-	}
-
 	DEBUG(20,("ads_parse_gp_ext: %s\n", extension_raw));
 
-	ext = TALLOC_ZERO_P(mem_ctx, struct GP_EXT);
-	if (!ext) {
+	ext_list = str_list_make_talloc(mem_ctx, extension_raw, "]");
+	if (ext_list == NULL) {
 		goto parse_error;
 	}
 
-	ext_list = str_list_make(mem_ctx, extension_raw, "]");
-	if (!ext_list) {
-		goto parse_error;
-	}
-
 	for (i = 0; ext_list[i] != NULL; i++) {
 		/* no op */
 	}
 
-	ext->num_exts = i;
-
-	if (ext->num_exts) {
-		ext->extensions 	= TALLOC_ZERO_ARRAY(mem_ctx, char *,
-							    ext->num_exts);
-		ext->extensions_guid	= TALLOC_ZERO_ARRAY(mem_ctx, char *,
-							    ext->num_exts);
-		ext->snapins		= TALLOC_ZERO_ARRAY(mem_ctx, char *,
-							    ext->num_exts);
-		ext->snapins_guid	= TALLOC_ZERO_ARRAY(mem_ctx, char *,
-							    ext->num_exts);
+	gp_ext->num_exts = i;
+	
+	if (gp_ext->num_exts) {
+		gp_ext->extensions = TALLOC_ZERO_ARRAY(mem_ctx, char *, gp_ext->num_exts);
+		gp_ext->extensions_guid = TALLOC_ZERO_ARRAY(mem_ctx, char *, gp_ext->num_exts);
+		gp_ext->snapins = TALLOC_ZERO_ARRAY(mem_ctx, char *, gp_ext->num_exts);
+		gp_ext->snapins_guid = TALLOC_ZERO_ARRAY(mem_ctx, char *, gp_ext->num_exts);
+	} else {
+		gp_ext->extensions = NULL;
+		gp_ext->extensions_guid = NULL;
+		gp_ext->snapins = NULL;
+		gp_ext->snapins_guid = NULL;
 	}
 
-	ext->gp_extension = talloc_strdup(mem_ctx, extension_raw);
-
-	if (!ext->extensions || !ext->extensions_guid ||
-	    !ext->snapins || !ext->snapins_guid ||
-	    !ext->gp_extension) {
+	if (gp_ext->extensions == NULL || gp_ext->extensions_guid == NULL || 
+	    gp_ext->snapins == NULL || gp_ext->snapins_guid == NULL || 
+	    gp_ext->gp_extension == NULL) {
 		goto parse_error;
 	}
 
+	gp_ext->gp_extension = talloc_strdup(mem_ctx, extension_raw);
+
 	for (i = 0; ext_list[i] != NULL; i++) {
 
 		int k;
 		char *p, *q;
-
+		
 		DEBUGADD(10,("extension #%d\n", i));
 
 		p = ext_list[i];
@@ -87,7 +80,7 @@
 			p++;
 		}
 
-		ext_strings = str_list_make(mem_ctx, p, "}");
+		ext_strings = str_list_make_talloc(mem_ctx, p, "}");
 		if (ext_strings == NULL) {
 			goto parse_error;
 		}
@@ -102,15 +95,14 @@
 			q++;
 		}
 
-		ext->extensions[i] = talloc_strdup(mem_ctx,
-					   cse_gpo_guid_string_to_name(q));
-		ext->extensions_guid[i] = talloc_strdup(mem_ctx, q);
+		gp_ext->extensions[i] = talloc_strdup(mem_ctx, cse_gpo_guid_string_to_name(q));
+		gp_ext->extensions_guid[i] = talloc_strdup(mem_ctx, q);
 
 		/* we might have no name for the guid */
-		if (ext->extensions_guid[i] == NULL) {
+		if (gp_ext->extensions_guid[i] == NULL) {
 			goto parse_error;
 		}
-
+		
 		for (k = 1; ext_strings[k] != NULL; k++) {
 
 			char *m = ext_strings[k];
@@ -119,51 +111,53 @@
 				m++;
 			}
 
-			/* FIXME: theoretically there could be more than one
-			 * snapin per extension */
-			ext->snapins[i] = talloc_strdup(mem_ctx,
-				cse_snapin_gpo_guid_string_to_name(m));
-			ext->snapins_guid[i] = talloc_strdup(mem_ctx, m);
+			/* FIXME: theoretically there could be more than one snapin per extension */
+			gp_ext->snapins[i] = talloc_strdup(mem_ctx, cse_snapin_gpo_guid_string_to_name(m));
+			gp_ext->snapins_guid[i] = talloc_strdup(mem_ctx, m);
 
 			/* we might have no name for the guid */
-			if (ext->snapins_guid[i] == NULL) {
+			if (gp_ext->snapins_guid[i] == NULL) {
 				goto parse_error;
 			}
 		}
 	}
 
-	*gp_ext = ext;
+	if (ext_list) {
+		str_list_free_talloc(mem_ctx, &ext_list); 
+	}
+	if (ext_strings) {
+		str_list_free_talloc(mem_ctx, &ext_strings); 
+	}
 
-	ret = true;
+	return ADS_ERROR(LDAP_SUCCESS);
 
- parse_error:
-	TALLOC_FREE(ext_list);
-	TALLOC_FREE(ext_strings);
+parse_error:
+	if (ext_list) {
+		str_list_free_talloc(mem_ctx, &ext_list); 
+	}
+	if (ext_strings) {
+		str_list_free_talloc(mem_ctx, &ext_strings); 
+	}
 
-	return ret;
+	return ADS_ERROR(LDAP_NO_MEMORY);
 }
 
-#ifdef HAVE_LDAP
-
 /****************************************************************
  parse the raw link string into a GP_LINK structure
 ****************************************************************/
 
-static ADS_STATUS gpo_parse_gplink(TALLOC_CTX *mem_ctx,
-				   const char *gp_link_raw,
-				   uint32_t options,
-				   struct GP_LINK *gp_link)
+ADS_STATUS ads_parse_gplink(TALLOC_CTX *mem_ctx, 
+			    const char *gp_link_raw,
+			    uint32 options,
+			    struct GP_LINK *gp_link)
 {
-	ADS_STATUS status = ADS_ERROR_NT(NT_STATUS_NO_MEMORY);
 	char **link_list;
 	int i;
+	
+	DEBUG(10,("ads_parse_gplink: gPLink: %s\n", gp_link_raw));
 
-	ZERO_STRUCTP(gp_link);
-
-	DEBUG(10,("gpo_parse_gplink: gPLink: %s\n", gp_link_raw));
-
-	link_list = str_list_make(mem_ctx, gp_link_raw, "]");
-	if (!link_list) {
+	link_list = str_list_make_talloc(mem_ctx, gp_link_raw, "]");
+	if (link_list == NULL) {
 		goto parse_error;
 	}
 
@@ -173,17 +167,18 @@
 
 	gp_link->gp_opts = options;
 	gp_link->num_links = i;
-
+	
 	if (gp_link->num_links) {
-		gp_link->link_names = TALLOC_ZERO_ARRAY(mem_ctx, char *,
-							gp_link->num_links);
-		gp_link->link_opts = TALLOC_ZERO_ARRAY(mem_ctx, uint32_t,
-						       gp_link->num_links);
+		gp_link->link_names = TALLOC_ZERO_ARRAY(mem_ctx, char *, gp_link->num_links);
+		gp_link->link_opts = TALLOC_ZERO_ARRAY(mem_ctx, uint32, gp_link->num_links);
+	} else {
+		gp_link->link_names = NULL;
+		gp_link->link_opts = NULL;
 	}
-
+	
 	gp_link->gp_link = talloc_strdup(mem_ctx, gp_link_raw);
 
-	if (!gp_link->link_names || !gp_link->link_opts || !gp_link->gp_link) {
+	if (gp_link->link_names == NULL || gp_link->link_opts == NULL || gp_link->gp_link == NULL) {
 		goto parse_error;
 	}
 
@@ -191,7 +186,7 @@
 
 		char *p, *q;
 
-		DEBUGADD(10,("gpo_parse_gplink: processing link #%d\n", i));
+		DEBUGADD(10,("ads_parse_gplink: processing link #%d\n", i));
 
 		q = link_list[i];
 		if (q[0] == '[') {
@@ -199,7 +194,7 @@
 		};
 
 		p = strchr(q, ';');
-
+		
 		if (p == NULL) {
 			goto parse_error;
 		}
@@ -212,19 +207,23 @@
 
 		gp_link->link_opts[i] = atoi(p + 1);
 
-		DEBUGADD(10,("gpo_parse_gplink: link: %s\n",
-			gp_link->link_names[i]));
-		DEBUGADD(10,("gpo_parse_gplink: opt: %d\n",
-			gp_link->link_opts[i]));
+		DEBUGADD(10,("ads_parse_gplink: link: %s\n", gp_link->link_names[i]));
+		DEBUGADD(10,("ads_parse_gplink: opt: %d\n", gp_link->link_opts[i]));
 
 	}
 
-	status = ADS_SUCCESS;
+	if (link_list) {
+		str_list_free_talloc(mem_ctx, &link_list);
+	}
 
- parse_error:
-	TALLOC_FREE(link_list);
+	return ADS_ERROR(LDAP_SUCCESS);
 
-	return status;
+parse_error:
+	if (link_list) {
+		str_list_free_talloc(mem_ctx, &link_list);
+	}
+
+	return ADS_ERROR(LDAP_NO_MEMORY);
 }
 
 /****************************************************************
@@ -240,14 +239,13 @@
 	const char *attrs[] = {"gPLink", "gPOptions", NULL};
 	LDAPMessage *res = NULL;
 	const char *gp_link;
-	uint32_t gp_options;
+	uint32 gp_options;
 
 	ZERO_STRUCTP(gp_link_struct);
 
 	status = ads_search_dn(ads, &res, link_dn, attrs);
 	if (!ADS_ERR_OK(status)) {
-		DEBUG(10,("ads_get_gpo_link: search failed with %s\n",
-			ads_errstr(status)));
+		DEBUG(10,("ads_get_gpo_link: search failed with %s\n", ads_errstr(status)));
 		return status;
 	}
 
@@ -257,34 +255,33 @@
 		return ADS_ERROR(LDAP_NO_SUCH_OBJECT);
 	}
 
-	gp_link = ads_pull_string(ads, mem_ctx, res, "gPLink");
+	gp_link = ads_pull_string(ads, mem_ctx, res, "gPLink"); 
 	if (gp_link == NULL) {
 		DEBUG(10,("ads_get_gpo_link: no 'gPLink' attribute found\n"));
 		ads_msgfree(ads, res);
-		return ADS_ERROR(LDAP_NO_SUCH_ATTRIBUTE);
+		return ADS_ERROR(LDAP_NO_SUCH_ATTRIBUTE);	
 	}
 
-	/* perfectly legal to have no options */
+	/* perfectly leggal to have no options */
 	if (!ads_pull_uint32(ads, res, "gPOptions", &gp_options)) {
-		DEBUG(10,("ads_get_gpo_link: "
-			"no 'gPOptions' attribute found\n"));
+		DEBUG(10,("ads_get_gpo_link: no 'gPOptions' attribute found\n"));
 		gp_options = 0;
 	}
 
 	ads_msgfree(ads, res);
 
-	return gpo_parse_gplink(mem_ctx, gp_link, gp_options, gp_link_struct);
+	return ads_parse_gplink(mem_ctx, gp_link, gp_options, gp_link_struct); 
 }
 
 /****************************************************************
  helper call to add a gp link
 ****************************************************************/
 
-ADS_STATUS ads_add_gpo_link(ADS_STRUCT *ads,
-			    TALLOC_CTX *mem_ctx,
-			    const char *link_dn,
-			    const char *gpo_dn,
-			    uint32_t gpo_opt)
+ADS_STATUS ads_add_gpo_link(ADS_STRUCT *ads, 
+			    TALLOC_CTX *mem_ctx, 
+			    const char *link_dn, 
+			    const char *gpo_dn, 
+			    uint32 gpo_opt)
 {
 	ADS_STATUS status;
 	const char *attrs[] = {"gPLink", NULL};
@@ -296,13 +293,12 @@
 	 * the gpo_dn is sane */
 
 	if (!strnequal(gpo_dn, "LDAP://CN={", strlen("LDAP://CN={")) != 0) {
-		return ADS_ERROR(LDAP_INVALID_DN_SYNTAX);
+		return ADS_ERROR(LDAP_INVALID_DN_SYNTAX);	
 	}
 
 	status = ads_search_dn(ads, &res, link_dn, attrs);
 	if (!ADS_ERR_OK(status)) {
-		DEBUG(10,("ads_add_gpo_link: search failed with %s\n",
-			ads_errstr(status)));
+		DEBUG(10,("ads_add_gpo_link: search failed with %s\n", ads_errstr(status)));
 		return status;
 	}
 
@@ -312,13 +308,11 @@
 		return ADS_ERROR(LDAP_NO_SUCH_OBJECT);
 	}
 
-	gp_link = ads_pull_string(ads, mem_ctx, res, "gPLink");
+	gp_link = ads_pull_string(ads, mem_ctx, res, "gPLink"); 
 	if (gp_link == NULL) {
-		gp_link_new = talloc_asprintf(mem_ctx, "[%s;%d]",
-			gpo_dn, gpo_opt);
+		gp_link_new = talloc_asprintf(mem_ctx, "[%s;%d]", gpo_dn, gpo_opt);
 	} else {
-		gp_link_new = talloc_asprintf(mem_ctx, "%s[%s;%d]",
-			gp_link, gpo_dn, gpo_opt);
+		gp_link_new = talloc_asprintf(mem_ctx, "%s[%s;%d]", gp_link, gpo_dn, gpo_opt);
 	}
 
 	ads_msgfree(ads, res);
@@ -332,7 +326,7 @@
 		return status;
 	}
 
-	return ads_gen_mod(ads, link_dn, mods);
+	return ads_gen_mod(ads, link_dn, mods); 
 }
 
 /****************************************************************
@@ -340,9 +334,9 @@
 ****************************************************************/
 
 /* untested & broken */
-ADS_STATUS ads_delete_gpo_link(ADS_STRUCT *ads,
-			       TALLOC_CTX *mem_ctx,
-			       const char *link_dn,
+ADS_STATUS ads_delete_gpo_link(ADS_STRUCT *ads, 
+			       TALLOC_CTX *mem_ctx, 
+			       const char *link_dn, 
 			       const char *gpo_dn)
 {
 	ADS_STATUS status;
@@ -356,7 +350,7 @@
 		DEBUG(10,("ads_delete_gpo_link: first char not: [\n"));
 		return ADS_ERROR(LDAP_INVALID_DN_SYNTAX);
 	}
-
+		
 	if (gpo_dn[strlen(gpo_dn)] != ']') {
 		DEBUG(10,("ads_delete_gpo_link: last char not: ]\n"));
 		return ADS_ERROR(LDAP_INVALID_DN_SYNTAX);
@@ -364,8 +358,7 @@
 
 	status = ads_search_dn(ads, &res, link_dn, attrs);
 	if (!ADS_ERR_OK(status)) {
-		DEBUG(10,("ads_delete_gpo_link: search failed with %s\n",
-			ads_errstr(status)));
+		DEBUG(10,("ads_delete_gpo_link: search failed with %s\n", ads_errstr(status)));
 		return status;
 	}
 
@@ -375,14 +368,13 @@
 		return ADS_ERROR(LDAP_NO_SUCH_OBJECT);
 	}
 
-	gp_link = ads_pull_string(ads, mem_ctx, res, "gPLink");
+	gp_link = ads_pull_string(ads, mem_ctx, res, "gPLink"); 
 	if (gp_link == NULL) {
 		return ADS_ERROR(LDAP_NO_SUCH_ATTRIBUTE);
 	}
 
 	/* find link to delete */
-	/* gp_link_new = talloc_asprintf(mem_ctx, "%s[%s;%d]", gp_link,
-					 gpo_dn, gpo_opt); */
+	/* gp_link_new = talloc_asprintf(mem_ctx, "%s[%s;%d]", gp_link, gpo_dn, gpo_opt); */
 
 	ads_msgfree(ads, res);
 	ADS_ERROR_HAVE_NO_MEMORY(gp_link_new);
@@ -395,7 +387,7 @@
 		return status;
 	}
 
-	return ads_gen_mod(ads, link_dn, mods);
+	return ads_gen_mod(ads, link_dn, mods); 
 }
 
 /****************************************************************
@@ -424,31 +416,24 @@
 		return ADS_ERROR(LDAP_NO_MEMORY);
 	}
 
+	/* sure ??? */
 	if (!ads_pull_uint32(ads, res, "flags", &gpo->options)) {
 		return ADS_ERROR(LDAP_NO_MEMORY);
 	}
 
-	gpo->file_sys_path = ads_pull_string(ads, mem_ctx, res,
-		"gPCFileSysPath");
+	gpo->file_sys_path = ads_pull_string(ads, mem_ctx, res, "gPCFileSysPath");
 	ADS_ERROR_HAVE_NO_MEMORY(gpo->file_sys_path);
 
-	gpo->display_name = ads_pull_string(ads, mem_ctx, res,
-		"displayName");
+	gpo->display_name = ads_pull_string(ads, mem_ctx, res, "displayName");
 	ADS_ERROR_HAVE_NO_MEMORY(gpo->display_name);
 
-	gpo->name = ads_pull_string(ads, mem_ctx, res,
-		"name");
+	gpo->name = ads_pull_string(ads, mem_ctx, res, "name");
 	ADS_ERROR_HAVE_NO_MEMORY(gpo->name);
 
-	gpo->machine_extensions = ads_pull_string(ads, mem_ctx, res,
-		"gPCMachineExtensionNames");
-	gpo->user_extensions = ads_pull_string(ads, mem_ctx, res,
-		"gPCUserExtensionNames");
+	/* ???, this is optional to have and what does it depend on, the 'flags' ?) */
+	gpo->machine_extensions = ads_pull_string(ads, mem_ctx, res, "gPCMachineExtensionNames");
+	gpo->user_extensions = ads_pull_string(ads, mem_ctx, res, "gPCUserExtensionNames");
 
-	ads_pull_sd(ads, mem_ctx, res, "ntSecurityDescriptor",
-		&gpo->security_descriptor);
-	ADS_ERROR_HAVE_NO_MEMORY(gpo->security_descriptor);
-
 	return ADS_ERROR(LDAP_SUCCESS);
 }
 
@@ -467,20 +452,10 @@
 	LDAPMessage *res = NULL;
 	char *dn;
 	const char *filter;
-	const char *attrs[] = {
-		"cn",
-		"displayName",
-		"flags",
-		"gPCFileSysPath",
-		"gPCFunctionalityVersion",
-		"gPCMachineExtensionNames",
-		"gPCUserExtensionNames",
-		"gPCWQLFilter",
-		"name",
-		"ntSecurityDescriptor",
-		"versionNumber",
-		NULL};
-	uint32_t sd_flags = DACL_SECURITY_INFORMATION;
+	const char *attrs[] = { "cn", "displayName", "flags", "gPCFileSysPath", 
+				"gPCFunctionalityVersion", "gPCMachineExtensionNames", 
+				"gPCUserExtensionNames", "gPCWQLFilter", "name", 
+				"versionNumber", NULL};
 
 	ZERO_STRUCTP(gpo);
 
@@ -489,31 +464,28 @@
 	}
 
 	if (gpo_dn) {
-
+	
 		if (strnequal(gpo_dn, "LDAP://", strlen("LDAP://")) != 0) {
 			gpo_dn = gpo_dn + strlen("LDAP://");
 		}
 
-		status = ads_search_retry_dn_sd_flags(ads, &res,
-						      sd_flags,
-						      gpo_dn, attrs);
-
+		status = ads_search_dn(ads, &res, gpo_dn, attrs);
+		
 	} else if (display_name || guid_name) {
 
-		filter = talloc_asprintf(mem_ctx,
-				 "(&(objectclass=groupPolicyContainer)(%s=%s))",
-				 display_name ? "displayName" : "name",
-				 display_name ? display_name : guid_name);
+		filter = talloc_asprintf(mem_ctx, 
+					 "(&(objectclass=groupPolicyContainer)(%s=%s))", 
+					 display_name ? "displayName" : "name",
+					 display_name ? display_name : guid_name);
 		ADS_ERROR_HAVE_NO_MEMORY(filter);
 
-		status = ads_do_search_all_sd_flags(ads, ads->config.bind_path,
-						    LDAP_SCOPE_SUBTREE, filter,
-						    attrs, sd_flags, &res);
+		status = ads_do_search_all(ads, ads->config.bind_path,
+					   LDAP_SCOPE_SUBTREE, filter, 
+					   attrs, &res);
 	}
 
 	if (!ADS_ERR_OK(status)) {
-		DEBUG(10,("ads_get_gpo: search failed with %s\n",
-			ads_errstr(status)));
+		DEBUG(10,("ads_get_gpo: search failed with %s\n", ads_errstr(status)));
 		return status;
 	}
 
@@ -528,7 +500,7 @@
 		ads_msgfree(ads, res);
 		return ADS_ERROR(LDAP_NO_MEMORY);
 	}
-
+	
 	status = ads_parse_gpo(ads, mem_ctx, res, dn, gpo);
 	ads_msgfree(ads, res);
 	ads_memfree(ads, dn);
@@ -540,14 +512,13 @@
  add a gplink to the GROUP_POLICY_OBJECT linked list
 ****************************************************************/
 
-static ADS_STATUS add_gplink_to_gpo_list(ADS_STRUCT *ads,
-					 TALLOC_CTX *mem_ctx,
-					 struct GROUP_POLICY_OBJECT **gpo_list,
-					 const char *link_dn,
-					 struct GP_LINK *gp_link,
-					 enum GPO_LINK_TYPE link_type,
-					 bool only_add_forced_gpos,
-					 const struct nt_user_token *token)
+ADS_STATUS add_gplink_to_gpo_list(ADS_STRUCT *ads,
+				  TALLOC_CTX *mem_ctx, 
+				  struct GROUP_POLICY_OBJECT **gpo_list,
+				  const char *link_dn,
+				  struct GP_LINK *gp_link,
+				  enum GPO_LINK_TYPE link_type,
+				  BOOL only_add_forced_gpos)
 {
 	ADS_STATUS status;
 	int i;
@@ -562,248 +533,123 @@
 		}
 
 		if (only_add_forced_gpos) {
-
-			if (!(gp_link->link_opts[i] & GPO_LINK_OPT_ENFORCED)) {
-				DEBUG(10,("skipping nonenforced GPO link "
-					"because GPOPTIONS_BLOCK_INHERITANCE "
-					"has been set\n"));
+		
+			if (! (gp_link->link_opts[i] & GPO_LINK_OPT_ENFORCED)) {
+				DEBUG(10,("skipping nonenforced GPO link because GPOPTIONS_BLOCK_INHERITANCE has been set\n"));
 				continue;
 			} else {
-				DEBUG(10,("adding enforced GPO link although "
-					"the GPOPTIONS_BLOCK_INHERITANCE "
-					"has been set\n"));
+				DEBUG(10,("adding enforced GPO link although the GPOPTIONS_BLOCK_INHERITANCE has been set\n"));
 			}
 		}
 
-		new_gpo = TALLOC_ZERO_P(mem_ctx, struct GROUP_POLICY_OBJECT);
+		new_gpo = TALLOC_P(mem_ctx, struct GROUP_POLICY_OBJECT);
 		ADS_ERROR_HAVE_NO_MEMORY(new_gpo);
 
-		status = ads_get_gpo(ads, mem_ctx, gp_link->link_names[i],
-				     NULL, NULL, new_gpo);
+		ZERO_STRUCTP(new_gpo);
+
+		status = ads_get_gpo(ads, mem_ctx, gp_link->link_names[i], NULL, NULL, new_gpo);
 		if (!ADS_ERR_OK(status)) {
-			DEBUG(10,("failed to get gpo: %s\n",
-				gp_link->link_names[i]));
 			return status;
 		}
 
-		status = ADS_ERROR_NT(gpo_apply_security_filtering(new_gpo,
-								   token));
-		if (!ADS_ERR_OK(status)) {
-			DEBUG(10,("skipping GPO \"%s\" as object "
-				"has no access to it\n",
-				new_gpo->display_name));
-			TALLOC_FREE(new_gpo);
-			continue;
-		}
-
 		new_gpo->link = link_dn;
-		new_gpo->link_type = link_type;
+		new_gpo->link_type = link_type; 
 
 		DLIST_ADD(*gpo_list, new_gpo);
 
-		DEBUG(10,("add_gplink_to_gplist: added GPLINK #%d %s "
-			"to GPO list\n", i, gp_link->link_names[i]));
+		DEBUG(10,("add_gplink_to_gplist: added GPLINK #%d %s to GPO list\n", 
+			i, gp_link->link_names[i]));
 	}
 
 	return ADS_ERROR(LDAP_SUCCESS);
 }
 
 /****************************************************************
-****************************************************************/
-
-ADS_STATUS ads_get_sid_token(ADS_STRUCT *ads,
-			     TALLOC_CTX *mem_ctx,
-			     const char *dn,
-			     struct nt_user_token **token)
-{
-	ADS_STATUS status;
-	DOM_SID object_sid;
-	DOM_SID primary_group_sid;
-	DOM_SID *ad_token_sids;
-	size_t num_ad_token_sids = 0;
-	DOM_SID *token_sids;
-	size_t num_token_sids = 0;
-	struct nt_user_token *new_token = NULL;
-	int i;
-
-	status = ads_get_tokensids(ads, mem_ctx, dn,
-				   &object_sid, &primary_group_sid,
-				   &ad_token_sids, &num_ad_token_sids);
-	if (!ADS_ERR_OK(status)) {
-		return status;
-	}
-
-	token_sids = TALLOC_ARRAY(mem_ctx, DOM_SID, 1);
-	ADS_ERROR_HAVE_NO_MEMORY(token_sids);
-
-	status = ADS_ERROR_NT(add_sid_to_array_unique(mem_ctx,
-						      &primary_group_sid,
-						      &token_sids,
-						      &num_token_sids));
-	if (!ADS_ERR_OK(status)) {
-		return status;
-	}
-
-	for (i = 0; i < num_ad_token_sids; i++) {
-
-		if (sid_check_is_in_builtin(&ad_token_sids[i])) {
-			continue;
-		}
-
-		status = ADS_ERROR_NT(add_sid_to_array_unique(mem_ctx,
-							      &ad_token_sids[i],
-							      &token_sids,
-							      &num_token_sids));
-		if (!ADS_ERR_OK(status)) {
-			return status;
-		}
-	}
-
-	new_token = create_local_nt_token(mem_ctx, &object_sid, false,
-					  num_token_sids, token_sids);
-	ADS_ERROR_HAVE_NO_MEMORY(new_token);
-
-	*token = new_token;
-
-	debug_nt_user_token(DBGC_CLASS, 5, *token);
-
-	return ADS_ERROR_LDAP(LDAP_SUCCESS);
-}
-
-/****************************************************************
-****************************************************************/
-
-static ADS_STATUS add_local_policy_to_gpo_list(TALLOC_CTX *mem_ctx,
-					       struct GROUP_POLICY_OBJECT **gpo_list,
-					       enum GPO_LINK_TYPE link_type)
-{
-	struct GROUP_POLICY_OBJECT *gpo = NULL;
-
-	ADS_ERROR_HAVE_NO_MEMORY(gpo_list);
-
-	gpo = TALLOC_ZERO_P(mem_ctx, struct GROUP_POLICY_OBJECT);
-	ADS_ERROR_HAVE_NO_MEMORY(gpo);
-
-	gpo->name = talloc_strdup(mem_ctx, "Local Policy");
-	ADS_ERROR_HAVE_NO_MEMORY(gpo->name);
-
-	gpo->display_name = talloc_strdup(mem_ctx, "Local Policy");
-	ADS_ERROR_HAVE_NO_MEMORY(gpo->display_name);
-
-	gpo->link_type = link_type;
-
-	DLIST_ADD(*gpo_list, gpo);
-
-	return ADS_ERROR_NT(NT_STATUS_OK);
-}
-
-/****************************************************************
  get the full list of GROUP_POLICY_OBJECTs for a given dn
 ****************************************************************/
 
-ADS_STATUS ads_get_gpo_list(ADS_STRUCT *ads,
-			    TALLOC_CTX *mem_ctx,
+ADS_STATUS ads_get_gpo_list(ADS_STRUCT *ads, 
+			    TALLOC_CTX *mem_ctx, 
 			    const char *dn,
-			    uint32_t flags,
-			    const struct nt_user_token *token,
+			    uint32 flags,
 			    struct GROUP_POLICY_OBJECT **gpo_list)
 {
 	/* (L)ocal (S)ite (D)omain (O)rganizational(U)nit */
-
+	
 	ADS_STATUS status;
 	struct GP_LINK gp_link;
 	const char *parent_dn, *site_dn, *tmp_dn;
-	bool add_only_forced_gpos = false;
+	BOOL add_only_forced_gpos = False;
 
 	ZERO_STRUCTP(gpo_list);
 
-	if (!dn) {
-		return ADS_ERROR(LDAP_PARAM_ERROR);
-	}
-
 	DEBUG(10,("ads_get_gpo_list: getting GPO list for [%s]\n", dn));
 
 	/* (L)ocal */
-	status = add_local_policy_to_gpo_list(mem_ctx, gpo_list,
-					      GP_LINK_UNKOWN);
-	if (!ADS_ERR_OK(status)) {
-		return status;
-	}
-
+	/* not yet... */
+	
 	/* (S)ite */
 
 	/* are site GPOs valid for users as well ??? */
 	if (flags & GPO_LIST_FLAG_MACHINE) {
 
-		status = ads_site_dn_for_machine(ads, mem_ctx,
-						 ads->config.ldap_server_name,
-						 &site_dn);
+		status = ads_site_dn_for_machine(ads, mem_ctx, ads->config.ldap_server_name, &site_dn);
 		if (!ADS_ERR_OK(status)) {
 			return status;
 		}
 
-		DEBUG(10,("ads_get_gpo_list: query SITE: [%s] for GPOs\n",
-			site_dn));
+		DEBUG(10,("ads_get_gpo_list: query SITE: [%s] for GPOs\n", site_dn));
 
 		status = ads_get_gpo_link(ads, mem_ctx, site_dn, &gp_link);
 		if (ADS_ERR_OK(status)) {
-
+		
 			if (DEBUGLEVEL >= 100) {
 				dump_gplink(ads, mem_ctx, &gp_link);
 			}
-
-			status = add_gplink_to_gpo_list(ads, mem_ctx, gpo_list,
-							site_dn, &gp_link,
-							GP_LINK_SITE,
-							add_only_forced_gpos,
-							token);
+			
+			status = add_gplink_to_gpo_list(ads, mem_ctx, gpo_list, 
+							site_dn, &gp_link, GP_LINK_SITE, 
+							add_only_forced_gpos);
 			if (!ADS_ERR_OK(status)) {
 				return status;
 			}
-
+	
 			if (flags & GPO_LIST_FLAG_SITEONLY) {
 				return ADS_ERROR(LDAP_SUCCESS);
 			}
-
+	
 			/* inheritance can't be blocked at the site level */
 		}
 	}
 
 	tmp_dn = dn;
 
-	while ((parent_dn = ads_parent_dn(tmp_dn)) &&
-	       (!strequal(parent_dn, ads_parent_dn(ads->config.bind_path)))) {
+	while ( (parent_dn = ads_parent_dn(tmp_dn)) && 
+		(!strequal(parent_dn, ads_parent_dn(ads->config.bind_path))) ) {
 
 		/* (D)omain */
 
 		/* An account can just be a member of one domain */
 		if (strncmp(parent_dn, "DC=", strlen("DC=")) == 0) {
 
-			DEBUG(10,("ads_get_gpo_list: query DC: [%s] for GPOs\n",
-				parent_dn));
+			DEBUG(10,("ads_get_gpo_list: query DC: [%s] for GPOs\n", parent_dn));
 
-			status = ads_get_gpo_link(ads, mem_ctx, parent_dn,
-						  &gp_link);
+			status = ads_get_gpo_link(ads, mem_ctx, parent_dn, &gp_link);
 			if (ADS_ERR_OK(status)) {
-
+				
 				if (DEBUGLEVEL >= 100) {
 					dump_gplink(ads, mem_ctx, &gp_link);
 				}
 
 				/* block inheritance from now on */
-				if (gp_link.gp_opts &
-				    GPOPTIONS_BLOCK_INHERITANCE) {
-					add_only_forced_gpos = true;
+				if (gp_link.gp_opts & GPOPTIONS_BLOCK_INHERITANCE) {
+					add_only_forced_gpos = True;
 				}
 
-				status = add_gplink_to_gpo_list(ads,
-							mem_ctx,
-							gpo_list,
-							parent_dn,
-							&gp_link,
-							GP_LINK_DOMAIN,
-							add_only_forced_gpos,
-							token);
+				status = add_gplink_to_gpo_list(ads, mem_ctx, 
+								gpo_list, parent_dn, 
+								&gp_link, GP_LINK_DOMAIN, 
+								add_only_forced_gpos);
 				if (!ADS_ERR_OK(status)) {
 					return status;
 				}
@@ -815,21 +661,19 @@
 
 	/* reset dn again */
 	tmp_dn = dn;
+	
+	while ( (parent_dn = ads_parent_dn(tmp_dn)) && 
+		(!strequal(parent_dn, ads_parent_dn(ads->config.bind_path))) ) {
 
-	while ((parent_dn = ads_parent_dn(tmp_dn)) &&
-	       (!strequal(parent_dn, ads_parent_dn(ads->config.bind_path)))) {
 
-
 		/* (O)rganizational(U)nit */
 
 		/* An account can be a member of more OUs */
 		if (strncmp(parent_dn, "OU=", strlen("OU=")) == 0) {
+		
+			DEBUG(10,("ads_get_gpo_list: query OU: [%s] for GPOs\n", parent_dn));
 
-			DEBUG(10,("ads_get_gpo_list: query OU: [%s] for GPOs\n",
-				parent_dn));
-
-			status = ads_get_gpo_link(ads, mem_ctx, parent_dn,
-						  &gp_link);
+			status = ads_get_gpo_link(ads, mem_ctx, parent_dn, &gp_link);
 			if (ADS_ERR_OK(status)) {
 
 				if (DEBUGLEVEL >= 100) {
@@ -837,19 +681,14 @@
 				}
 
 				/* block inheritance from now on */
-				if (gp_link.gp_opts &
-				    GPOPTIONS_BLOCK_INHERITANCE) {
-					add_only_forced_gpos = true;
+				if (gp_link.gp_opts & GPOPTIONS_BLOCK_INHERITANCE) {
+					add_only_forced_gpos = True;
 				}
 
-				status = add_gplink_to_gpo_list(ads,
-							mem_ctx,
-							gpo_list,
-							parent_dn,
-							&gp_link,
-							GP_LINK_OU,
-							add_only_forced_gpos,
-							token);
+				status = add_gplink_to_gpo_list(ads, mem_ctx, 
+								gpo_list, parent_dn, 
+								&gp_link, GP_LINK_OU, 
+								add_only_forced_gpos);
 				if (!ADS_ERR_OK(status)) {
 					return status;
 				}

Copied: branches/samba/upstream/source/libgpo/gpo_parse.c (from rev 1928, branches/samba/upstream/source/libgpo/gpo_parse.c)
===================================================================
--- branches/samba/upstream/source/libgpo/gpo_parse.c	                        (rev 0)
+++ branches/samba/upstream/source/libgpo/gpo_parse.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,299 @@
+/* 
+ *  Unix SMB/CIFS implementation.
+ *  Group Policy Object Support
+ *  Copyright (C) Guenther Deschner 2005-2006
+ *  
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "includes.h"
+#include "iniparser/src/iniparser.h"
+
+/****************************************************************
+ parse the local gpt.ini file
+****************************************************************/
+
+#define GPT_INI_SECTION_GENERAL "General"
+#define GPT_INI_PARAMETER_VERSION "Version"
+#define GPT_INI_PARAMETER_DISPLAYNAME "displayName"
+
+NTSTATUS parse_gpt_ini(TALLOC_CTX *mem_ctx, const char *filename, uint32 *version, char **display_name)
+{
+	NTSTATUS result;
+	uint32 v;
+	char *name = NULL;
+	dictionary *d;
+
+	d = iniparser_load(filename);
+	if (d == NULL) {
+		return NT_STATUS_NO_SUCH_FILE;
+	}
+
+	if ((name = iniparser_getstring(d, GPT_INI_SECTION_GENERAL
+			":"GPT_INI_PARAMETER_DISPLAYNAME, NULL)) == NULL) {
+		/* the default domain policy and the default domain controller
+		 * policy never have a displayname in their gpt.ini file */
+		DEBUG(10,("parse_gpt_ini: no name in %s\n", filename));
+	}
+
+	if (name && display_name) {
+		*display_name = talloc_strdup(mem_ctx, name);
+		if (*display_name == NULL) {
+			result = NT_STATUS_NO_MEMORY;
+			goto out;
+		}
+	}
+
+	if ((v = iniparser_getint(d, GPT_INI_SECTION_GENERAL
+			":"GPT_INI_PARAMETER_VERSION, Undefined)) == Undefined) {
+		DEBUG(10,("parse_gpt_ini: no version\n"));
+		result = NT_STATUS_INTERNAL_DB_CORRUPTION;
+		goto out;
+	}
+
+	if (version) {
+		*version = v;
+	}
+
+	result = NT_STATUS_OK;
+ out:
+ 	if (d) {
+		iniparser_freedict(d);
+	}
+
+	return result;
+}
+
+#if 0 /* not yet */
+
+/****************************************************************
+ parse the Version section from gpttmpl file
+****************************************************************/
+
+#define GPTTMPL_SECTION_VERSION "Version"
+#define GPTTMPL_PARAMETER_REVISION "Revision"
+#define GPTTMPL_PARAMETER_SIGNATURE "signature"
+#define GPTTMPL_CHICAGO "$CHICAGO$" /* whatever this is good for... */
+#define GPTTMPL_SECTION_UNICODE "Unicode"
+#define GPTTMPL_PARAMETER_UNICODE "Unicode"
+
+static NTSTATUS parse_gpttmpl(dictionary *d, uint32 *version_out)
+{
+	const char *signature = NULL;
+	uint32 version;
+
+	if ((signature = iniparser_getstring(d, GPTTMPL_SECTION_VERSION
+			":"GPTTMPL_PARAMETER_SIGNATURE, NULL)) == NULL) {
+		return NT_STATUS_INTERNAL_DB_CORRUPTION;
+	}
+
+	if (!strequal(signature, GPTTMPL_CHICAGO)) {
+		return NT_STATUS_INTERNAL_DB_CORRUPTION;
+	}
+
+	if ((version = iniparser_getint(d, GPTTMPL_SECTION_VERSION
+			":"GPTTMPL_PARAMETER_REVISION, Undefined)) == Undefined) {
+		return NT_STATUS_INTERNAL_DB_CORRUPTION;
+	}
+
+	if (version_out) {
+		*version_out = version;
+	}
+
+	/* treat that as boolean */
+	if ((!iniparser_getboolean(d, GPTTMPL_SECTION_UNICODE
+			":"GPTTMPL_PARAMETER_UNICODE, Undefined)) == Undefined) {
+		return NT_STATUS_INTERNAL_DB_CORRUPTION;
+	}
+
+	return NT_STATUS_OK;
+}
+
+/****************************************************************
+ parse the "System Access" section from gpttmpl file
+****************************************************************/
+
+#define GPTTMPL_SECTION_SYSTEM_ACCESS "System Access"
+#define GPTTMPL_PARAMETER_MINPWDAGE "MinimumPasswordAge"
+#define GPTTMPL_PARAMETER_MAXPWDAGE "MaximumPasswordAge"
+#define GPTTMPL_PARAMETER_MINPWDLEN "MinimumPasswordLength"
+#define GPTTMPL_PARAMETER_PWDCOMPLEX "PasswordComplexity"
+#define GPTTMPL_PARAMETER_PWDHISTORY "PasswordHistorySize"
+#define GPTTMPL_PARAMETER_LOCKOUTCOUNT "LockoutBadCount"
+
+static NTSTATUS parse_gpttmpl_system_access(const char *filename)
+{
+	NTSTATUS status;
+	dictionary *d = NULL;
+	uint32 pwd_min_age, pwd_max_age, pwd_min_len, pwd_history;
+	uint32 lockout_count;
+	BOOL pwd_complex;
+	uint32 version;
+
+	d = iniparser_load(filename);
+	if (d == NULL) {
+		return NT_STATUS_NO_SUCH_FILE;
+	}
+
+	status = parse_gpttmpl(d, &version);
+	if (!NT_STATUS_IS_OK(status)) {
+		goto out;
+	}
+
+	status = NT_STATUS_INVALID_PARAMETER;
+
+	if ((pwd_min_age = iniparser_getint(d, GPTTMPL_SECTION_SYSTEM_ACCESS
+			":"GPTTMPL_PARAMETER_MINPWDAGE, Undefined)) == Undefined) {
+		goto out;
+	}
+
+	if ((pwd_max_age = iniparser_getint(d, GPTTMPL_SECTION_SYSTEM_ACCESS
+			":"GPTTMPL_PARAMETER_MINPWDAGE, Undefined)) == Undefined) {
+		goto out;
+	}
+
+	if ((pwd_min_len = iniparser_getint(d, GPTTMPL_SECTION_SYSTEM_ACCESS
+			":"GPTTMPL_PARAMETER_MINPWDLEN, Undefined)) == Undefined) {
+		goto out;
+	}
+
+	if ((pwd_complex = iniparser_getboolean(d, GPTTMPL_SECTION_SYSTEM_ACCESS
+			":"GPTTMPL_PARAMETER_PWDCOMPLEX, Undefined)) == Undefined) {
+		goto out;
+	}
+
+	if ((pwd_history = iniparser_getint(d, GPTTMPL_SECTION_SYSTEM_ACCESS
+			":"GPTTMPL_PARAMETER_PWDHISTORY, Undefined)) == Undefined) {
+		goto out;
+	}
+
+	if ((lockout_count = iniparser_getint(d, GPTTMPL_SECTION_SYSTEM_ACCESS
+			":"GPTTMPL_PARAMETER_LOCKOUTCOUNT, Undefined)) == Undefined) {
+		goto out;
+	}
+
+	/* TODO ? 
+	RequireLogonToChangePassword = 0
+	ForceLogoffWhenHourExpire = 0
+	ClearTextPassword = 0
+	*/
+
+	status = NT_STATUS_OK;
+
+ out:
+	if (d) {
+		iniparser_freedict(d);
+	}
+
+ 	return status;
+}
+
+/****************************************************************
+ parse the "Kerberos Policy" section from gpttmpl file
+****************************************************************/
+
+#define GPTTMPL_SECTION_KERBEROS_POLICY "Kerberos Policy"
+#define GPTTMPL_PARAMETER_MAXTKTAGE "MaxTicketAge"
+#define GPTTMPL_PARAMETER_MAXRENEWAGE "MaxRenewAge"
+#define GPTTMPL_PARAMETER_MAXTGSAGE "MaxServiceAge"
+#define GPTTMPL_PARAMETER_MAXCLOCKSKEW "MaxClockSkew"
+#define GPTTMPL_PARAMETER_TKTVALIDATECLIENT "TicketValidateClient"
+
+static NTSTATUS parse_gpttmpl_kerberos_policy(const char *filename)
+{
+	NTSTATUS status;
+	dictionary *d = NULL;
+	uint32 tkt_max_age, tkt_max_renew, tgs_max_age, max_clock_skew;
+	BOOL tkt_validate;
+	uint32 version;
+
+	d = iniparser_load(filename);
+	if (d == NULL) {
+		return NT_STATUS_NO_SUCH_FILE;
+	}
+
+	status = parse_gpttmpl(d, &version);
+	if (!NT_STATUS_IS_OK(status)) {
+		goto out;
+	}
+
+	status = NT_STATUS_INVALID_PARAMETER;
+
+	if ((tkt_max_age = iniparser_getint(d, GPTTMPL_SECTION_KERBEROS_POLICY
+			":"GPTTMPL_PARAMETER_MAXTKTAGE, Undefined)) != Undefined) {
+		goto out;
+	}
+
+	if ((tkt_max_renew = iniparser_getint(d, GPTTMPL_SECTION_KERBEROS_POLICY
+			":"GPTTMPL_PARAMETER_MAXRENEWAGE, Undefined)) != Undefined) {
+		goto out;
+	}
+
+	if ((tgs_max_age = iniparser_getint(d, GPTTMPL_SECTION_KERBEROS_POLICY
+			":"GPTTMPL_PARAMETER_MAXTGSAGE, Undefined)) != Undefined) {
+		goto out;
+	}
+
+	if ((max_clock_skew = iniparser_getint(d, GPTTMPL_SECTION_KERBEROS_POLICY
+			":"GPTTMPL_PARAMETER_MAXCLOCKSKEW, Undefined)) != Undefined) {
+		goto out;
+	}
+
+	if ((tkt_validate = iniparser_getboolean(d, GPTTMPL_SECTION_KERBEROS_POLICY
+			":"GPTTMPL_PARAMETER_TKTVALIDATECLIENT, Undefined)) != Undefined) {
+		goto out;
+	}
+
+	status = NT_STATUS_OK;
+
+ out:
+	if (d) {
+		iniparser_freedict(d);
+	}
+
+ 	return status;
+}
+
+#endif
+
+/*
+
+perfectly parseable with iniparser:
+
+{GUID}/Machine/Microsoft/Windows NT/SecEdit/GptTmpl.inf
+
+
+[Unicode]
+Unicode=yes
+[System Access]
+MinimumPasswordAge = 1
+MaximumPasswordAge = 42
+MinimumPasswordLength = 7
+PasswordComplexity = 1
+PasswordHistorySize = 24
+LockoutBadCount = 0
+RequireLogonToChangePassword = 0
+ForceLogoffWhenHourExpire = 0
+ClearTextPassword = 0
+[Kerberos Policy]
+MaxTicketAge = 10
+MaxRenewAge = 7
+MaxServiceAge = 600
+MaxClockSkew = 5
+TicketValidateClient = 1
+[Version]
+signature="$CHICAGO$"
+Revision=1
+*/

Deleted: branches/samba/upstream/source/libgpo/gpo_sec.c
===================================================================
--- branches/samba/upstream/source/libgpo/gpo_sec.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libgpo/gpo_sec.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,186 +0,0 @@
-/*
- *  Unix SMB/CIFS implementation.
- *  Group Policy Object Support
- *  Copyright (C) Guenther Deschner 2007
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "includes.h"
-
-/****************************************************************
-****************************************************************/
-
-static bool gpo_sd_check_agp_object_guid(const struct security_ace_object *object)
-{
-	struct GUID ext_right_apg_guid;
-	NTSTATUS status;
-
-	if (!object) {
-		return false;
-	}
-
-	status = GUID_from_string(ADS_EXTENDED_RIGHT_APPLY_GROUP_POLICY,
-				  &ext_right_apg_guid);
-	if (!NT_STATUS_IS_OK(status)) {
-		return false;
-	}
-
-	switch (object->flags) {
-		case SEC_ACE_OBJECT_PRESENT:
-			if (GUID_equal(&object->type.type,
-				       &ext_right_apg_guid)) {
-				return True;
-			}
-		case SEC_ACE_OBJECT_INHERITED_PRESENT:
-			if (GUID_equal(&object->inherited_type.inherited_type,
-				       &ext_right_apg_guid)) {
-				return True;
-			}
-		default:
-			break;
-	}
-
-	return false;
-}
-
-/****************************************************************
-****************************************************************/
-
-static bool gpo_sd_check_agp_object(const SEC_ACE *ace)
-{
-	if (!sec_ace_object(ace->type)) {
-		return false;
-	}
-
-	return gpo_sd_check_agp_object_guid(&ace->object.object);
-}
-
-/****************************************************************
-****************************************************************/
-
-static bool gpo_sd_check_agp_access_bits(uint32_t access_mask)
-{
-	return (access_mask & SEC_RIGHTS_EXTENDED);
-}
-
-#if 0
-/****************************************************************
-****************************************************************/
-
-static bool gpo_sd_check_read_access_bits(uint32_t access_mask)
-{
-	uint32_t read_bits = SEC_RIGHTS_LIST_CONTENTS |
-			   SEC_RIGHTS_READ_ALL_PROP |
-			   SEC_RIGHTS_READ_PERMS;
-
-	return (read_bits == (access_mask & read_bits));
-}
-#endif
-
-/****************************************************************
-****************************************************************/
-
-static NTSTATUS gpo_sd_check_ace_denied_object(const SEC_ACE *ace,
-					       const struct nt_user_token *token)
-{
-	if (gpo_sd_check_agp_object(ace) &&
-	    gpo_sd_check_agp_access_bits(ace->access_mask) &&
-	    nt_token_check_sid(&ace->trustee, token)) {
-		DEBUG(10,("gpo_sd_check_ace_denied_object: "
-			"Access denied as of ace for %s\n",
-			sid_string_dbg(&ace->trustee)));
-		return NT_STATUS_ACCESS_DENIED;
-	}
-
-	return STATUS_MORE_ENTRIES;
-}
-
-/****************************************************************
-****************************************************************/
-
-static NTSTATUS gpo_sd_check_ace_allowed_object(const SEC_ACE *ace,
-						const struct nt_user_token *token)
-{
-	if (gpo_sd_check_agp_object(ace) &&
-	    gpo_sd_check_agp_access_bits(ace->access_mask) &&
-	    nt_token_check_sid(&ace->trustee, token)) {
-		DEBUG(10,("gpo_sd_check_ace_allowed_object: "
-			"Access granted as of ace for %s\n",
-			sid_string_dbg(&ace->trustee)));
-		return NT_STATUS_OK;
-	}
-
-	return STATUS_MORE_ENTRIES;
-}
-
-/****************************************************************
-****************************************************************/
-
-static NTSTATUS gpo_sd_check_ace(const SEC_ACE *ace,
-				 const struct nt_user_token *token)
-{
-	switch (ace->type) {
-		case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT:
-			return gpo_sd_check_ace_denied_object(ace, token);
-		case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT:
-			return gpo_sd_check_ace_allowed_object(ace, token);
-		default:
-			return STATUS_MORE_ENTRIES;
-	}
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS gpo_apply_security_filtering(const struct GROUP_POLICY_OBJECT *gpo,
-				      const struct nt_user_token *token)
-{
-	SEC_DESC *sd = gpo->security_descriptor;
-	SEC_ACL *dacl = NULL;
-	NTSTATUS status = NT_STATUS_ACCESS_DENIED;
-	int i;
-
-	if (!token) {
-		return NT_STATUS_INVALID_USER_BUFFER;
-	}
-
-	if (!sd) {
-		return NT_STATUS_INVALID_SECURITY_DESCR;
-	}
-
-	dacl = sd->dacl;
-	if (!dacl) {
-		return NT_STATUS_INVALID_SECURITY_DESCR;
-	}
-
-	/* check all aces and only return NT_STATUS_OK (== Access granted) or
-	 * NT_STATUS_ACCESS_DENIED ( == Access denied) - the default is to
-	 * deny access */
-
-	for (i = 0; i < dacl->num_aces; i ++) {
-
-		status = gpo_sd_check_ace(&dacl->aces[i], token);
-
-		if (NT_STATUS_EQUAL(status, NT_STATUS_ACCESS_DENIED)) {
-			return status;
-		} else if (NT_STATUS_IS_OK(status)) {
-			return status;
-		}
-
-		continue;
-	}
-
-	return NT_STATUS_ACCESS_DENIED;
-}

Modified: branches/samba/upstream/source/libgpo/gpo_util.c
===================================================================
--- branches/samba/upstream/source/libgpo/gpo_util.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libgpo/gpo_util.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,110 +1,108 @@
-/*
+/* 
  *  Unix SMB/CIFS implementation.
  *  Group Policy Object Support
- *  Copyright (C) Guenther Deschner 2005-2007
- *
+ *  Copyright (C) Guenther Deschner 2005-2006
+ *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
- *
+ *  
  *  This program is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
- *
+ *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
 
+#ifdef HAVE_LDAP
+
 #define DEFAULT_DOMAIN_POLICY "Default Domain Policy"
 #define DEFAULT_DOMAIN_CONTROLLERS_POLICY "Default Domain Controllers Policy"
 
 /* should we store a parsed guid ? */
-struct gp_table {
+struct gpo_table {
 	const char *name;
 	const char *guid_string;
 };
 
+struct snapin_table {
+	const char *name;
+	const char *guid_string;
+	ADS_STATUS (*snapin_fn)(ADS_STRUCT *, TALLOC_CTX *mem_ctx, const char *, const char *);
+};
+
 #if 0 /* unused */
-static struct gp_table gpo_default_policy[] = {
-	{ DEFAULT_DOMAIN_POLICY,
+static struct gpo_table gpo_default_policy[] = {
+	{ DEFAULT_DOMAIN_POLICY, 
 		"31B2F340-016D-11D2-945F-00C04FB984F9" },
-	{ DEFAULT_DOMAIN_CONTROLLERS_POLICY,
+	{ DEFAULT_DOMAIN_CONTROLLERS_POLICY, 
 		"6AC1786C-016F-11D2-945F-00C04fB984F9" },
 	{ NULL, NULL }
 };
 #endif
 
-/* the following is seen in gPCMachineExtensionNames / gPCUserExtensionNames */
+/* the following is seen in gPCMachineExtensionNames or gPCUserExtensionNames */
 
-static struct gp_table gpo_cse_extensions[] = {
-	/* used to be "Administrative Templates Extension" */
-	/* "Registry Settings"
-	(http://support.microsoft.com/kb/216357/EN-US/) */
-	{ "Registry Settings",
-		GP_EXT_GUID_REGISTRY },
-	{ "Microsoft Disc Quota",
+static struct gpo_table gpo_cse_extensions[] = {
+	{ "Administrative Templates Extension", 
+		"35378EAC-683F-11D2-A89A-00C04FBBCFA2" }, /* Registry Policy ? */
+	{ "Microsoft Disc Quota", 
 		"3610EDA5-77EF-11D2-8DC5-00C04FA31A66" },
-	{ "EFS recovery",
+	{ "EFS recovery", 
 		"B1BE8D72-6EAC-11D2-A4EA-00C04F79F83A" },
-	{ "Folder Redirection",
+	{ "Folder Redirection", 
 		"25537BA6-77A8-11D2-9B6C-0000F8080861" },
-	{ "IP Security",
+	{ "IP Security", 
 		"E437BC1C-AA7D-11D2-A382-00C04F991E27" },
-	{ "Internet Explorer Branding",
+	{ "Internet Explorer Branding", 
 		"A2E30F80-D7DE-11d2-BBDE-00C04F86AE3B" },
-	{ "QoS Packet Scheduler",
+	{ "QoS Packet Scheduler", 
 		"426031c0-0b47-4852-b0ca-ac3d37bfcb39" },
-	{ "Scripts",
-		GP_EXT_GUID_SCRIPTS },
-	{ "Security",
-		GP_EXT_GUID_SECURITY },
-	{ "Software Installation",
+	{ "Scripts", 
+		"42B5FAAE-6536-11D2-AE5A-0000F87571E3" },
+	{ "Security", 
+		"827D319E-6EAC-11D2-A4EA-00C04F79F83A" },
+	{ "Software Installation", 
 		"C6DC5466-785A-11D2-84D0-00C04FB169F7" },
-	{ "Wireless Group Policy",
+	{ "Wireless Group Policy", 
 		"0ACDD40C-75AC-BAA0-BF6DE7E7FE63" },
-	{ "Application Management",
-		"C6DC5466-785A-11D2-84D0-00C04FB169F7" },
-	{ "unknown",
-		"3060E8D0-7020-11D2-842D-00C04FA372D4" },
 	{ NULL, NULL }
 };
 
 /* guess work */
-static struct gp_table gpo_cse_snapin_extensions[] = {
-	{ "Administrative Templates",
-		"0F6B957D-509E-11D1-A7CC-0000F87571E3" },
-	{ "Certificates",
-		"53D6AB1D-2488-11D1-A28C-00C04FB94F17" },
-	{ "EFS recovery policy processing",
-		"B1BE8D72-6EAC-11D2-A4EA-00C04F79F83A" },
-	{ "Folder Redirection policy processing",
-		"25537BA6-77A8-11D2-9B6C-0000F8080861" },
-	{ "Folder Redirection",
-		"88E729D6-BDC1-11D1-BD2A-00C04FB9603F" },
-	{ "Registry policy processing",
-		"35378EAC-683F-11D2-A89A-00C04FBBCFA2" },
-	{ "Remote Installation Services",
-		"3060E8CE-7020-11D2-842D-00C04FA372D4" },
-	{ "Security Settings",
-		"803E14A0-B4FB-11D0-A0D0-00A0C90F574B" },
-	{ "Security policy processing",
-		"827D319E-6EAC-11D2-A4EA-00C04F79F83A" },
-	{ "unknown",
-		"3060E8D0-7020-11D2-842D-00C04FA372D4" },
-	{ "unknown2",
-		"53D6AB1B-2488-11D1-A28C-00C04FB94F17" },
-	{ NULL, NULL }
+static struct snapin_table gpo_cse_snapin_extensions[] = {
+	{ "Administrative Templates", 
+		"0F6B957D-509E-11D1-A7CC-0000F87571E3", gpo_snapin_handler_none },
+	{ "Certificates", 
+		"53D6AB1D-2488-11D1-A28C-00C04FB94F17", gpo_snapin_handler_none },
+	{ "EFS recovery policy processing", 
+		"B1BE8D72-6EAC-11D2-A4EA-00C04F79F83A", gpo_snapin_handler_none },
+	{ "Folder Redirection policy processing", 
+		"25537BA6-77A8-11D2-9B6C-0000F8080861", gpo_snapin_handler_none },
+	{ "Folder Redirection", 
+		"88E729D6-BDC1-11D1-BD2A-00C04FB9603F", gpo_snapin_handler_none },
+	{ "Registry policy processing", 
+		"35378EAC-683F-11D2-A89A-00C04FBBCFA2", gpo_snapin_handler_none },
+	{ "Remote Installation Services", 
+		"3060E8CE-7020-11D2-842D-00C04FA372D4", gpo_snapin_handler_none },
+	{ "Security Settings", 
+		"803E14A0-B4FB-11D0-A0D0-00A0C90F574B", gpo_snapin_handler_security_settings },
+	{ "Security policy processing", 
+		"827D319E-6EAC-11D2-A4EA-00C04F79F83A", gpo_snapin_handler_security_settings },
+	{ "unknown", 
+		"3060E8D0-7020-11D2-842D-00C04FA372D4", gpo_snapin_handler_none },
+	{ "unknown2", 
+		"53D6AB1B-2488-11D1-A28C-00C04FB94F17", gpo_snapin_handler_none },
+	{ NULL, NULL, NULL }
 };
 
-/****************************************************************
-****************************************************************/
-
-static const char *name_to_guid_string(const char *name,
-				       struct gp_table *table)
+static const char *name_to_guid_string(const char *name, struct gpo_table *table)
 {
 	int i;
 
@@ -113,15 +111,11 @@
 			return table[i].guid_string;
 		}
 	}
-
+	
 	return NULL;
 }
 
-/****************************************************************
-****************************************************************/
-
-static const char *guid_string_to_name(const char *guid_string,
-				       struct gp_table *table)
+static const char *guid_string_to_name(const char *guid_string, struct gpo_table *table)
 {
 	int i;
 
@@ -130,15 +124,12 @@
 			return table[i].name;
 		}
 	}
-
+	
 	return NULL;
 }
 
-/****************************************************************
-****************************************************************/
-
-static const char *snapin_guid_string_to_name(const char *guid_string,
-					      struct gp_table *table)
+static const char *snapin_guid_string_to_name(const char *guid_string, 
+					      struct snapin_table *table)
 {
 	int i;
 	for (i = 0; table[i].guid_string; i++) {
@@ -161,33 +152,21 @@
 }
 #endif
 
-/****************************************************************
-****************************************************************/
-
 const char *cse_gpo_guid_string_to_name(const char *guid)
 {
 	return guid_string_to_name(guid, gpo_cse_extensions);
 }
 
-/****************************************************************
-****************************************************************/
-
-const char *cse_gpo_name_to_guid_string(const char *name)
+static const char *cse_gpo_name_to_guid_string(const char *name)
 {
 	return name_to_guid_string(name, gpo_cse_extensions);
 }
 
-/****************************************************************
-****************************************************************/
-
 const char *cse_snapin_gpo_guid_string_to_name(const char *guid)
 {
 	return snapin_guid_string_to_name(guid, gpo_cse_snapin_extensions);
 }
 
-/****************************************************************
-****************************************************************/
-
 void dump_gp_ext(struct GP_EXT *gp_ext, int debuglevel)
 {
 	int lvl = debuglevel;
@@ -202,27 +181,15 @@
 
 	for (i=0; i< gp_ext->num_exts; i++) {
 
-		DEBUGADD(lvl,("\textension:\t\t\t%s\n",
-			gp_ext->extensions_guid[i]));
-		DEBUGADD(lvl,("\textension (name):\t\t\t%s\n",
-			gp_ext->extensions[i]));
-
-		DEBUGADD(lvl,("\tsnapin:\t\t\t%s\n",
-			gp_ext->snapins_guid[i]));
-		DEBUGADD(lvl,("\tsnapin (name):\t\t\t%s\n",
-			gp_ext->snapins[i]));
+		DEBUGADD(lvl,("\textension:\t\t\t%s\n", gp_ext->extensions_guid[i]));
+		DEBUGADD(lvl,("\textension (name):\t\t\t%s\n", gp_ext->extensions[i]));
+		
+		DEBUGADD(lvl,("\tsnapin:\t\t\t%s\n", gp_ext->snapins_guid[i]));
+		DEBUGADD(lvl,("\tsnapin (name):\t\t\t%s\n", gp_ext->snapins[i]));
 	}
 }
 
-#ifdef HAVE_LDAP
-
-/****************************************************************
-****************************************************************/
-
-void dump_gpo(ADS_STRUCT *ads,
-	      TALLOC_CTX *mem_ctx,
-	      struct GROUP_POLICY_OBJECT *gpo,
-	      int debuglevel)
+void dump_gpo(TALLOC_CTX *mem_ctx, struct GROUP_POLICY_OBJECT *gpo, int debuglevel) 
 {
 	int lvl = debuglevel;
 
@@ -235,105 +202,73 @@
 	DEBUGADD(lvl,("name:\t\t\t%s\n", gpo->name));
 	DEBUGADD(lvl,("displayname:\t\t%s\n", gpo->display_name));
 	DEBUGADD(lvl,("version:\t\t%d (0x%08x)\n", gpo->version, gpo->version));
-	DEBUGADD(lvl,("version_user:\t\t%d (0x%04x)\n",
-		GPO_VERSION_USER(gpo->version),
-		GPO_VERSION_USER(gpo->version)));
-	DEBUGADD(lvl,("version_machine:\t%d (0x%04x)\n",
-		GPO_VERSION_MACHINE(gpo->version),
-		 GPO_VERSION_MACHINE(gpo->version)));
+	DEBUGADD(lvl,("version_user:\t\t%d (0x%04x)\n", GPO_VERSION_USER(gpo->version), 
+							GPO_VERSION_USER(gpo->version)));
+	DEBUGADD(lvl,("version_machine:\t%d (0x%04x)\n", GPO_VERSION_MACHINE(gpo->version), 
+							 GPO_VERSION_MACHINE(gpo->version)));
 	DEBUGADD(lvl,("filesyspath:\t\t%s\n", gpo->file_sys_path));
 	DEBUGADD(lvl,("dspath:\t\t%s\n", gpo->ds_path));
 
 	DEBUGADD(lvl,("options:\t\t%d ", gpo->options));
-	switch (gpo->options) {
-		case GPFLAGS_ALL_ENABLED:
-			DEBUGADD(lvl,("GPFLAGS_ALL_ENABLED\n"));
-			break;
-		case GPFLAGS_USER_SETTINGS_DISABLED:
-			DEBUGADD(lvl,("GPFLAGS_USER_SETTINGS_DISABLED\n"));
-			break;
-		case GPFLAGS_MACHINE_SETTINGS_DISABLED:
-			DEBUGADD(lvl,("GPFLAGS_MACHINE_SETTINGS_DISABLED\n"));
-			break;
-		case GPFLAGS_ALL_DISABLED:
-			DEBUGADD(lvl,("GPFLAGS_ALL_DISABLED\n"));
-			break;
-		default:
-			DEBUGADD(lvl,("unknown option: %d\n", gpo->options));
-			break;
+	if (gpo->options & GPFLAGS_USER_SETTINGS_DISABLED) {
+		DEBUGADD(lvl,("GPFLAGS_USER_SETTINGS_DISABLED ")); 
 	}
+	if (gpo->options & GPFLAGS_MACHINE_SETTINGS_DISABLED) {
+		DEBUGADD(lvl,("GPFLAGS_MACHINE_SETTINGS_DISABLED")); 
+	}
+	DEBUGADD(lvl,("\n"));
 
 	DEBUGADD(lvl,("link:\t\t\t%s\n", gpo->link));
 	DEBUGADD(lvl,("link_type:\t\t%d ", gpo->link_type));
 	switch (gpo->link_type) {
-		case GP_LINK_UNKOWN:
-			DEBUGADD(lvl,("GP_LINK_UNKOWN\n"));
-			break;
-		case GP_LINK_OU:
-			DEBUGADD(lvl,("GP_LINK_OU\n"));
-			break;
-		case GP_LINK_DOMAIN:
-			DEBUGADD(lvl,("GP_LINK_DOMAIN\n"));
-			break;
-		case GP_LINK_SITE:
-			DEBUGADD(lvl,("GP_LINK_SITE\n"));
-			break;
-		case GP_LINK_MACHINE:
-			DEBUGADD(lvl,("GP_LINK_MACHINE\n"));
-			break;
-		default:
-			break;
+	case GP_LINK_UNKOWN:
+		DEBUGADD(lvl,("GP_LINK_UNKOWN\n"));
+		break;
+	case GP_LINK_OU:
+		DEBUGADD(lvl,("GP_LINK_OU\n"));
+		break;
+	case GP_LINK_DOMAIN:
+		DEBUGADD(lvl,("GP_LINK_DOMAIN\n"));
+		break;
+	case GP_LINK_SITE:
+		DEBUGADD(lvl,("GP_LINK_SITE\n"));
+		break;
+	case GP_LINK_MACHINE:
+		DEBUGADD(lvl,("GP_LINK_MACHINE\n"));
+		break;
+	default:
+		break;
 	}
 
-	DEBUGADD(lvl,("machine_extensions:\t%s\n", gpo->machine_extensions));
-
 	if (gpo->machine_extensions) {
 
-		struct GP_EXT *gp_ext = NULL;
+		struct GP_EXT gp_ext;
+		ADS_STATUS status;
 
-		if (!ads_parse_gp_ext(mem_ctx, gpo->machine_extensions,
-				      &gp_ext)) {
+		DEBUGADD(lvl,("machine_extensions:\t%s\n", gpo->machine_extensions));
+
+		status = ads_parse_gp_ext(mem_ctx, gpo->machine_extensions, &gp_ext);
+		if (!ADS_ERR_OK(status)) {
 			return;
 		}
-		dump_gp_ext(gp_ext, lvl);
+		dump_gp_ext(&gp_ext, lvl);
 	}
-
-	DEBUGADD(lvl,("user_extensions:\t%s\n", gpo->user_extensions));
-
+	
 	if (gpo->user_extensions) {
+	
+		struct GP_EXT gp_ext;
+		ADS_STATUS status;
+		
+		DEBUGADD(lvl,("user_extensions:\t%s\n", gpo->user_extensions));
 
-		struct GP_EXT *gp_ext = NULL;
-
-		if (!ads_parse_gp_ext(mem_ctx, gpo->user_extensions,
-				      &gp_ext)) {
+		status = ads_parse_gp_ext(mem_ctx, gpo->user_extensions, &gp_ext);
+		if (!ADS_ERR_OK(status)) {
 			return;
 		}
-		dump_gp_ext(gp_ext, lvl);
+		dump_gp_ext(&gp_ext, lvl);
 	}
-
-	DEBUGADD(lvl,("security descriptor:\n"));
-
-	ads_disp_sd(ads, mem_ctx, gpo->security_descriptor);
 }
 
-/****************************************************************
-****************************************************************/
-
-void dump_gpo_list(ADS_STRUCT *ads,
-		   TALLOC_CTX *mem_ctx,
-		   struct GROUP_POLICY_OBJECT *gpo_list,
-		   int debuglevel)
-{
-	struct GROUP_POLICY_OBJECT *gpo = NULL;
-
-	for (gpo = gpo_list; gpo; gpo = gpo->next) {
-		dump_gpo(ads, mem_ctx, gpo, debuglevel);
-	}
-}
-
-/****************************************************************
-****************************************************************/
-
 void dump_gplink(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx, struct GP_LINK *gp_link)
 {
 	ADS_STATUS status;
@@ -349,22 +284,22 @@
 	DEBUGADD(lvl,("gplink: %s\n", gp_link->gp_link));
 	DEBUGADD(lvl,("gpopts: %d ", gp_link->gp_opts));
 	switch (gp_link->gp_opts) {
-		case GPOPTIONS_INHERIT:
-			DEBUGADD(lvl,("GPOPTIONS_INHERIT\n"));
-			break;
-		case GPOPTIONS_BLOCK_INHERITANCE:
-			DEBUGADD(lvl,("GPOPTIONS_BLOCK_INHERITANCE\n"));
-			break;
-		default:
-			break;
+	case GPOPTIONS_INHERIT:
+		DEBUGADD(lvl,("GPOPTIONS_INHERIT\n"));
+		break;
+	case GPOPTIONS_BLOCK_INHERITANCE:
+		DEBUGADD(lvl,("GPOPTIONS_BLOCK_INHERITANCE\n"));
+		break;
+	default:
+		break;
 	}
 
 	DEBUGADD(lvl,("num links: %d\n", gp_link->num_links));
 
 	for (i = 0; i < gp_link->num_links; i++) {
-
+	
 		DEBUGADD(lvl,("---------------------\n\n"));
-
+	
 		DEBUGADD(lvl,("link: #%d\n", i + 1));
 		DEBUGADD(lvl,("name: %s\n", gp_link->link_names[i]));
 
@@ -381,243 +316,293 @@
 
 			struct GROUP_POLICY_OBJECT gpo;
 
-			status = ads_get_gpo(ads, mem_ctx,
-					     gp_link->link_names[i],
-					     NULL, NULL, &gpo);
+			status = ads_get_gpo(ads, mem_ctx, gp_link->link_names[i], NULL, NULL, &gpo);
 			if (!ADS_ERR_OK(status)) {
-				DEBUG(lvl,("get gpo for %s failed: %s\n",
-					gp_link->link_names[i],
-					ads_errstr(status)));
+				DEBUG(lvl,("get gpo for %s failed: %s\n", gp_link->link_names[i], ads_errstr(status)));
 				return;
 			}
-			dump_gpo(ads, mem_ctx, &gpo, lvl);
+			dump_gpo(mem_ctx, &gpo, lvl);
 		}
 	}
 }
 
-#endif /* HAVE_LDAP */
+ADS_STATUS process_extension_with_snapin(ADS_STRUCT *ads,
+					 TALLOC_CTX *mem_ctx,
+					 const char *extension_guid,
+					 const char *snapin_guid)
+{
+	int i;
 
-/****************************************************************
-****************************************************************/
+	for (i=0; gpo_cse_snapin_extensions[i].guid_string; i++) {
+	
+		if (strcmp(gpo_cse_snapin_extensions[i].guid_string, snapin_guid) == 0) {
+		
+			return gpo_cse_snapin_extensions[i].snapin_fn(ads, mem_ctx, 
+								      extension_guid, snapin_guid);
+		}
+	}
 
-NTSTATUS process_extension(ADS_STRUCT *ads,
-			   TALLOC_CTX *mem_ctx,
-			   uint32_t flags,
-			   const struct nt_user_token *token,
-			   struct GROUP_POLICY_OBJECT *gpo,
-			   const char *extension_guid,
-			   const char *snapin_guid)
-{
-	DEBUG(0,("process_extension: no extension available for:\n"));
-	DEBUGADD(0,("%s (%s) (snapin: %s)\n",
-		extension_guid,
-		cse_gpo_guid_string_to_name(extension_guid),
-		snapin_guid));
+	DEBUG(10,("process_extension_with_snapin: no snapin handler for extension %s (%s) found\n", 
+		extension_guid, snapin_guid));
 
-	return NT_STATUS_OK;
+	return ADS_ERROR(LDAP_SUCCESS);
 }
 
-/****************************************************************
-****************************************************************/
-
 ADS_STATUS gpo_process_a_gpo(ADS_STRUCT *ads,
 			     TALLOC_CTX *mem_ctx,
-			     const struct nt_user_token *token,
 			     struct GROUP_POLICY_OBJECT *gpo,
-			     const char *extension_guid_filter,
-			     uint32_t flags)
+			     const char *extension_guid,
+			     uint32 flags)
 {
-	struct GP_EXT *gp_ext = NULL;
+	ADS_STATUS status;
+	struct GP_EXT gp_ext;
 	int i;
-
-	DEBUG(10,("gpo_process_a_gpo: processing gpo %s (%s)\n",
-		gpo->name, gpo->display_name));
-	if (extension_guid_filter) {
-		DEBUGADD(10,("gpo_process_a_gpo: using filter %s\n",
-			extension_guid_filter));
-	}
-
+	
 	if (flags & GPO_LIST_FLAG_MACHINE) {
 
 		if (gpo->machine_extensions) {
 
-			if (!ads_parse_gp_ext(mem_ctx, gpo->machine_extensions,
-					      &gp_ext)) {
-				return ADS_ERROR_NT(NT_STATUS_INVALID_PARAMETER);
+			status = ads_parse_gp_ext(mem_ctx, gpo->machine_extensions, &gp_ext);
+
+			if (!ADS_ERR_OK(status)) {
+				return status;
 			}
 
 		} else {
 			/* nothing to apply */
-			return ADS_SUCCESS;
+			return ADS_ERROR(LDAP_SUCCESS);
 		}
-
+	
 	} else {
 
 		if (gpo->user_extensions) {
+		
+			status = ads_parse_gp_ext(mem_ctx, gpo->user_extensions, &gp_ext);
 
-			if (!ads_parse_gp_ext(mem_ctx, gpo->user_extensions,
-					      &gp_ext)) {
-				return ADS_ERROR_NT(NT_STATUS_INVALID_PARAMETER);
+			if (!ADS_ERR_OK(status)) {
+				return status;
 			}
 		} else {
 			/* nothing to apply */
-			return ADS_SUCCESS;
+			return ADS_ERROR(LDAP_SUCCESS);
 		}
 	}
 
-	for (i=0; i<gp_ext->num_exts; i++) {
+	for (i=0; i<gp_ext.num_exts; i++) {
 
-		NTSTATUS ntstatus;
-
-		if (extension_guid_filter &&
-		    !strequal(extension_guid_filter,
-		    	      gp_ext->extensions_guid[i])) {
+		if (extension_guid && !strequal(extension_guid, gp_ext.extensions_guid[i])) {
 			continue;
 		}
 
-		ntstatus = process_extension(ads, mem_ctx,
-					     flags, token, gpo,
-					     gp_ext->extensions_guid[i],
-					     gp_ext->snapins_guid[i]);
-		if (!NT_STATUS_IS_OK(ntstatus)) {
-			ADS_ERROR_NT(ntstatus);
+		status = process_extension_with_snapin(ads, mem_ctx, gp_ext.extensions_guid[i], 
+						       gp_ext.snapins_guid[i]);
+		if (!ADS_ERR_OK(status)) {
+			return status;
 		}
 	}
 
-	return ADS_SUCCESS;
+	return ADS_ERROR(LDAP_SUCCESS);
 }
 
-/****************************************************************
-****************************************************************/
-
 ADS_STATUS gpo_process_gpo_list(ADS_STRUCT *ads,
 				TALLOC_CTX *mem_ctx,
-				const struct nt_user_token *token,
-				struct GROUP_POLICY_OBJECT *gpo_list,
+				struct GROUP_POLICY_OBJECT **gpo_list,
 				const char *extensions_guid,
-				uint32_t flags)
+				uint32 flags)
 {
 	ADS_STATUS status;
-	struct GROUP_POLICY_OBJECT *gpo;
+	struct GROUP_POLICY_OBJECT *gpo = *gpo_list;
 
-	/* FIXME: ok, this is wrong, windows does process the extensions and
-	 * hands the list of gpos to each extension and not process each gpo
-	 * with all extensions (this is how the extension can store the list
-	 * gplist in the registry) */
-
-	for (gpo = gpo_list; gpo; gpo = gpo->next) {
-
-		status = gpo_process_a_gpo(ads, mem_ctx, token, gpo,
+	for (gpo = *gpo_list; gpo; gpo = gpo->next) {
+	
+		status = gpo_process_a_gpo(ads, mem_ctx, gpo, 
 					   extensions_guid, flags);
-
+	
 		if (!ADS_ERR_OK(status)) {
-			DEBUG(0,("failed to process gpo: %s\n",
-				ads_errstr(status)));
 			return status;
 		}
 
 	}
 
-	return ADS_SUCCESS;
+	return ADS_ERROR(LDAP_SUCCESS);
 }
 
+ADS_STATUS gpo_snapin_handler_none(ADS_STRUCT *ads, 
+				   TALLOC_CTX *mem_ctx, 
+				   const char *extension_guid, 
+				   const char *snapin_guid)
+{
+	DEBUG(10,("gpo_snapin_handler_none\n"));
+
+	return ADS_ERROR(LDAP_SUCCESS);
+}
+
+ADS_STATUS gpo_snapin_handler_security_settings(ADS_STRUCT *ads, 
+						TALLOC_CTX *mem_ctx, 
+						const char *extension_guid, 
+						const char *snapin_guid)
+{
+	DEBUG(10,("gpo_snapin_handler_security_settings\n"));
+
+	return ADS_ERROR(LDAP_SUCCESS);
+}
+
+ADS_STATUS gpo_lockout_policy(ADS_STRUCT *ads,
+			      TALLOC_CTX *mem_ctx,
+			      const char *hostname,
+			      SAM_UNK_INFO_12 *lockout_policy)
+{
+	return ADS_ERROR_NT(NT_STATUS_NOT_IMPLEMENTED);
+}
+
+ADS_STATUS gpo_password_policy(ADS_STRUCT *ads,
+			       TALLOC_CTX *mem_ctx,
+			       const char *hostname,
+			       SAM_UNK_INFO_1 *password_policy)
+{
+	ADS_STATUS status;
+	struct GROUP_POLICY_OBJECT *gpo_list;
+	const char *attrs[] = {"distinguishedName", "userAccountControl", NULL};
+	char *filter, *dn;
+	LDAPMessage *res = NULL;
+	uint32 uac;
+
+	filter = talloc_asprintf(mem_ctx, "(&(objectclass=user)(sAMAccountName=%s))", hostname);
+	if (filter == NULL) {
+		return ADS_ERROR(LDAP_NO_MEMORY);
+	}
+
+	status = ads_do_search_all(ads, ads->config.bind_path,
+				   LDAP_SCOPE_SUBTREE,
+				   filter, attrs, &res);
+	
+	if (!ADS_ERR_OK(status)) {
+		return status;
+	}
+
+	if (ads_count_replies(ads, res) != 1) {
+		ads_msgfree(ads, res);
+		return ADS_ERROR(LDAP_NO_SUCH_OBJECT);
+	}
+
+	dn = ads_get_dn(ads, res);
+	if (dn == NULL) {
+		ads_msgfree(ads, res);
+		return ADS_ERROR(LDAP_NO_MEMORY);
+	}
+
+	if (!ads_pull_uint32(ads, res, "userAccountControl", &uac)) {
+		ads_msgfree(ads, res);
+		ads_memfree(ads, dn);
+		return ADS_ERROR(LDAP_NO_MEMORY);
+	}
+
+	ads_msgfree(ads, res);
+
+	if (!(uac & UF_WORKSTATION_TRUST_ACCOUNT)) {
+		ads_memfree(ads, dn);
+		return ADS_ERROR(LDAP_NO_SUCH_OBJECT);
+	}
+
+	status = ads_get_gpo_list(ads, mem_ctx, dn, GPO_LIST_FLAG_MACHINE, &gpo_list);
+	if (!ADS_ERR_OK(status)) {
+		ads_memfree(ads, dn);
+		return status;
+	}
+
+	ads_memfree(ads, dn);
+
+	status = gpo_process_gpo_list(ads, mem_ctx, &gpo_list, 
+				      cse_gpo_name_to_guid_string("Security"), 
+				      GPO_LIST_FLAG_MACHINE); 
+	if (!ADS_ERR_OK(status)) {
+		return status;
+	}
+
+	return ADS_ERROR(LDAP_SUCCESS);
+}
+
 /****************************************************************
  check wether the version number in a GROUP_POLICY_OBJECT match those of the
  locally stored version. If not, fetch the required policy via CIFS
 ****************************************************************/
 
-NTSTATUS check_refresh_gpo(ADS_STRUCT *ads,
+NTSTATUS check_refresh_gpo(ADS_STRUCT *ads, 
 			   TALLOC_CTX *mem_ctx,
-			   uint32_t flags,
 			   struct GROUP_POLICY_OBJECT *gpo,
 			   struct cli_state **cli_out)
 {
 	NTSTATUS result;
-	char *server = NULL;
-	char *share = NULL;
-	char *nt_path = NULL;
-	char *unix_path = NULL;
-	uint32_t sysvol_gpt_version = 0;
-	char *display_name = NULL;
+	char *server, *share, *nt_path, *unix_path;
+	uint32 sysvol_gpt_version = 0;
+	char *display_name;
 	struct cli_state *cli = NULL;
 
-	result = gpo_explode_filesyspath(mem_ctx, gpo->file_sys_path,
-					 &server, &share, &nt_path, &unix_path);
+	result = ads_gpo_explode_filesyspath(ads, mem_ctx, gpo->file_sys_path, 
+					     &server, &share, &nt_path, &unix_path);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		goto out;
 	}
 
-	result = gpo_get_sysvol_gpt_version(mem_ctx,
-					    unix_path,
-					    &sysvol_gpt_version,
-					    &display_name);
-	if (!NT_STATUS_IS_OK(result) &&
+	result = ads_gpo_get_sysvol_gpt_version(ads, mem_ctx, 
+						unix_path,
+						&sysvol_gpt_version,
+						&display_name); 
+	if (!NT_STATUS_IS_OK(result) && 
 	    !NT_STATUS_EQUAL(result, NT_STATUS_NO_SUCH_FILE)) {
-		DEBUG(10,("check_refresh_gpo: "
-			"failed to get local gpt version: %s\n",
+		DEBUG(10,("check_refresh_gpo: failed to get local gpt version: %s\n", 
 			nt_errstr(result)));
 		goto out;
 	}
 
-	DEBUG(10,("check_refresh_gpo: versions gpo %d sysvol %d\n",
-		gpo->version, sysvol_gpt_version));
-
-	/* FIXME: handle GPO_INFO_FLAG_FORCED_REFRESH from flags */
-
 	while (gpo->version > sysvol_gpt_version) {
 
 		DEBUG(1,("check_refresh_gpo: need to refresh GPO\n"));
 
 		if (*cli_out == NULL) {
 
-			result = cli_full_connection(&cli,
-					global_myname(),
-					ads->config.ldap_server_name,
-					/* server */
-					NULL, 0,
-					share, "A:",
-					ads->auth.user_name, NULL,
-					ads->auth.password,
-					CLI_FULL_CONNECTION_USE_KERBEROS,
-					Undefined, NULL);
+			result = cli_full_connection(&cli, global_myname(), 
+						     server, /* ads->config.ldap_server_name, */
+						     NULL, 0,
+						     share, "A:",
+						     ads->auth.user_name, NULL, ads->auth.password,
+						     CLI_FULL_CONNECTION_USE_KERBEROS,
+						     Undefined, NULL);
 			if (!NT_STATUS_IS_OK(result)) {
-				DEBUG(10,("check_refresh_gpo: "
-					"failed to connect: %s\n",
-					nt_errstr(result)));
+				DEBUG(10,("check_refresh_gpo: failed to connect: %s\n", nt_errstr(result)));
 				goto out;
 			}
 
 			*cli_out = cli;
 		}
 
-		result = gpo_fetch_files(mem_ctx, *cli_out, gpo);
+		result = ads_fetch_gpo_files(ads, mem_ctx, *cli_out, gpo);
 		if (!NT_STATUS_IS_OK(result)) {
 			goto out;
 		}
 
-		result = gpo_get_sysvol_gpt_version(mem_ctx,
-						    unix_path,
-						    &sysvol_gpt_version,
-						    &display_name);
+		result = ads_gpo_get_sysvol_gpt_version(ads, mem_ctx, 
+							unix_path, 
+							&sysvol_gpt_version,
+							&display_name); 
 		if (!NT_STATUS_IS_OK(result)) {
-			DEBUG(10,("check_refresh_gpo: "
-				"failed to get local gpt version: %s\n",
+			DEBUG(10,("check_refresh_gpo: failed to get local gpt version: %s\n", 
 				nt_errstr(result)));
 			goto out;
 		}
-
+		
 		if (gpo->version == sysvol_gpt_version) {
 			break;
 		}
-	}
+	} 
 
-	DEBUG(10,("Name:\t\t\t%s (%s)\n", gpo->display_name, gpo->name));
-	DEBUGADD(10,("sysvol GPT version:\t%d (user: %d, machine: %d)\n",
-		sysvol_gpt_version,
-		GPO_VERSION_USER(sysvol_gpt_version),
-		GPO_VERSION_MACHINE(sysvol_gpt_version)));
-	DEBUGADD(10,("LDAP GPO version:\t%d (user: %d, machine: %d)\n",
+	DEBUG(10,("Name:\t\t\t%s\n", gpo->display_name));
+	DEBUGADD(10,("sysvol GPT version:\t%d (user: %d, machine: %d)\n", 
+		sysvol_gpt_version, 
+		GPO_VERSION_USER(sysvol_gpt_version), 
+		GPO_VERSION_MACHINE(sysvol_gpt_version))); 
+	DEBUGADD(10,("LDAP GPO version:\t%d (user: %d, machine: %d)\n", 
 		gpo->version,
 		GPO_VERSION_USER(gpo->version),
 		GPO_VERSION_MACHINE(gpo->version)));
@@ -634,22 +619,17 @@
  not, go and get each required GPO via CIFS
  ****************************************************************/
 
-NTSTATUS check_refresh_gpo_list(ADS_STRUCT *ads,
-				TALLOC_CTX *mem_ctx,
-				uint32_t flags,
+NTSTATUS check_refresh_gpo_list(ADS_STRUCT *ads, 
+				TALLOC_CTX *mem_ctx, 
 				struct GROUP_POLICY_OBJECT *gpo_list)
 {
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	struct cli_state *cli = NULL;
 	struct GROUP_POLICY_OBJECT *gpo;
 
-	if (!gpo_list) {
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
 	for (gpo = gpo_list; gpo; gpo = gpo->next) {
 
-		result = check_refresh_gpo(ads, mem_ctx, flags, gpo, &cli);
+		result = check_refresh_gpo(ads, mem_ctx, gpo, &cli);
 		if (!NT_STATUS_IS_OK(result)) {
 			goto out;
 		}
@@ -665,43 +645,4 @@
 	return result;
 }
 
-/****************************************************************
-****************************************************************/
-
-NTSTATUS gp_find_file(TALLOC_CTX *mem_ctx,
-		      uint32_t flags,
-		      const char *filename,
-		      const char *suffix,
-		      const char **filename_out)
-{
-	const char *tmp = NULL;
-	SMB_STRUCT_STAT sbuf;
-	const char *path = NULL;
-
-	if (flags & GPO_LIST_FLAG_MACHINE) {
-		path = "Machine";
-	} else {
-		path = "User";
-	}
-
-	tmp = talloc_asprintf(mem_ctx, "%s/%s/%s", filename,
-			      path, suffix);
-	NT_STATUS_HAVE_NO_MEMORY(tmp);
-
-	if (sys_stat(tmp, &sbuf) == 0) {
-		*filename_out = tmp;
-		return NT_STATUS_OK;
-	}
-
-	tmp = talloc_asprintf_strupper_m(mem_ctx, "%s/%s/%s", filename, path,
-					 suffix);
-	NT_STATUS_HAVE_NO_MEMORY(tmp);
-
-	if (sys_stat(tmp, &sbuf) == 0) {
-		*filename_out = tmp;
-		return NT_STATUS_OK;
-	}
-
-	return NT_STATUS_NO_SUCH_FILE;
-}
-
+#endif /* HAVE_LDAP */

Copied: branches/samba/upstream/source/libmsrpc (from rev 1928, branches/samba/upstream/source/libmsrpc)

Deleted: branches/samba/upstream/source/library-versions.in
===================================================================
--- branches/samba/upstream/source/library-versions.in	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/library-versions.in	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +0,0 @@
-##
-## Basic script for defining the major and minor library revision numbers
-## Makefile_target:major:minor
-##
-bin/libtalloc. at SHLIBEXT@:1:2
-bin/libtdb. at SHLIBEXT@:1:1
-bin/libsmbclient. at SHLIBEXT@:0:1
-bin/libsmbsharemodes. at SHLIBEXT@:0:2
-bin/libaddns. at SHLIBEXT@:0:1
-bin/libwbclient. at SHLIBEXT@:0:1
-bin/libnetapi. at SHLIBEXT@:0:1

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_dfs.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_dfs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_dfs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,1122 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * client auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/cli_dfs.h"
-
-NTSTATUS rpccli_dfs_GetManagerVersion(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      enum dfs_ManagerVersion *version /* [out] [ref] */)
-{
-	struct dfs_GetManagerVersion r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_GetManagerVersion, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETDFS,
-				&ndr_table_netdfs,
-				NDR_DFS_GETMANAGERVERSION,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_GetManagerVersion, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*version = *r.out.version;
-
-	/* Return result */
-	return NT_STATUS_OK;
-}
-
-NTSTATUS rpccli_dfs_Add(struct rpc_pipe_client *cli,
-			TALLOC_CTX *mem_ctx,
-			const char *path /* [in] [ref,charset(UTF16)] */,
-			const char *server /* [in] [ref,charset(UTF16)] */,
-			const char *share /* [in] [unique,charset(UTF16)] */,
-			const char *comment /* [in] [unique,charset(UTF16)] */,
-			uint32_t flags /* [in]  */,
-			WERROR *werror)
-{
-	struct dfs_Add r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.path = path;
-	r.in.server = server;
-	r.in.share = share;
-	r.in.comment = comment;
-	r.in.flags = flags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_Add, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETDFS,
-				&ndr_table_netdfs,
-				NDR_DFS_ADD,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_Add, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dfs_Remove(struct rpc_pipe_client *cli,
-			   TALLOC_CTX *mem_ctx,
-			   const char *dfs_entry_path /* [in] [ref,charset(UTF16)] */,
-			   const char *servername /* [in] [unique,charset(UTF16)] */,
-			   const char *sharename /* [in] [unique,charset(UTF16)] */,
-			   WERROR *werror)
-{
-	struct dfs_Remove r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.dfs_entry_path = dfs_entry_path;
-	r.in.servername = servername;
-	r.in.sharename = sharename;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_Remove, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETDFS,
-				&ndr_table_netdfs,
-				NDR_DFS_REMOVE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_Remove, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dfs_SetInfo(struct rpc_pipe_client *cli,
-			    TALLOC_CTX *mem_ctx,
-			    const char *dfs_entry_path /* [in] [charset(UTF16)] */,
-			    const char *servername /* [in] [unique,charset(UTF16)] */,
-			    const char *sharename /* [in] [unique,charset(UTF16)] */,
-			    uint32_t level /* [in]  */,
-			    union dfs_Info *info /* [in] [ref,switch_is(level)] */,
-			    WERROR *werror)
-{
-	struct dfs_SetInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.dfs_entry_path = dfs_entry_path;
-	r.in.servername = servername;
-	r.in.sharename = sharename;
-	r.in.level = level;
-	r.in.info = info;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_SetInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETDFS,
-				&ndr_table_netdfs,
-				NDR_DFS_SETINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_SetInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dfs_GetInfo(struct rpc_pipe_client *cli,
-			    TALLOC_CTX *mem_ctx,
-			    const char *dfs_entry_path /* [in] [charset(UTF16)] */,
-			    const char *servername /* [in] [unique,charset(UTF16)] */,
-			    const char *sharename /* [in] [unique,charset(UTF16)] */,
-			    uint32_t level /* [in]  */,
-			    union dfs_Info *info /* [out] [ref,switch_is(level)] */,
-			    WERROR *werror)
-{
-	struct dfs_GetInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.dfs_entry_path = dfs_entry_path;
-	r.in.servername = servername;
-	r.in.sharename = sharename;
-	r.in.level = level;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_GetInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETDFS,
-				&ndr_table_netdfs,
-				NDR_DFS_GETINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_GetInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dfs_Enum(struct rpc_pipe_client *cli,
-			 TALLOC_CTX *mem_ctx,
-			 uint32_t level /* [in]  */,
-			 uint32_t bufsize /* [in]  */,
-			 struct dfs_EnumStruct *info /* [in,out] [unique] */,
-			 uint32_t *total /* [in,out] [unique] */,
-			 WERROR *werror)
-{
-	struct dfs_Enum r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.level = level;
-	r.in.bufsize = bufsize;
-	r.in.info = info;
-	r.in.total = total;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_Enum, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETDFS,
-				&ndr_table_netdfs,
-				NDR_DFS_ENUM,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_Enum, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	if (info && r.out.info) {
-		*info = *r.out.info;
-	}
-	if (total && r.out.total) {
-		*total = *r.out.total;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dfs_Rename(struct rpc_pipe_client *cli,
-			   TALLOC_CTX *mem_ctx,
-			   WERROR *werror)
-{
-	struct dfs_Rename r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_Rename, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETDFS,
-				&ndr_table_netdfs,
-				NDR_DFS_RENAME,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_Rename, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dfs_Move(struct rpc_pipe_client *cli,
-			 TALLOC_CTX *mem_ctx,
-			 WERROR *werror)
-{
-	struct dfs_Move r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_Move, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETDFS,
-				&ndr_table_netdfs,
-				NDR_DFS_MOVE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_Move, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dfs_ManagerGetConfigInfo(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 WERROR *werror)
-{
-	struct dfs_ManagerGetConfigInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_ManagerGetConfigInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETDFS,
-				&ndr_table_netdfs,
-				NDR_DFS_MANAGERGETCONFIGINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_ManagerGetConfigInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dfs_ManagerSendSiteInfo(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					WERROR *werror)
-{
-	struct dfs_ManagerSendSiteInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_ManagerSendSiteInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETDFS,
-				&ndr_table_netdfs,
-				NDR_DFS_MANAGERSENDSITEINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_ManagerSendSiteInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dfs_AddFtRoot(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      const char *servername /* [in] [charset(UTF16)] */,
-			      const char *dns_servername /* [in] [charset(UTF16)] */,
-			      const char *dfsname /* [in] [charset(UTF16)] */,
-			      const char *rootshare /* [in] [charset(UTF16)] */,
-			      const char *comment /* [in] [charset(UTF16)] */,
-			      const char *dfs_config_dn /* [in] [charset(UTF16)] */,
-			      uint8_t unknown1 /* [in]  */,
-			      uint32_t flags /* [in]  */,
-			      struct dfs_UnknownStruct **unknown2 /* [in,out] [unique] */,
-			      WERROR *werror)
-{
-	struct dfs_AddFtRoot r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.servername = servername;
-	r.in.dns_servername = dns_servername;
-	r.in.dfsname = dfsname;
-	r.in.rootshare = rootshare;
-	r.in.comment = comment;
-	r.in.dfs_config_dn = dfs_config_dn;
-	r.in.unknown1 = unknown1;
-	r.in.flags = flags;
-	r.in.unknown2 = unknown2;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_AddFtRoot, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETDFS,
-				&ndr_table_netdfs,
-				NDR_DFS_ADDFTROOT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_AddFtRoot, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	if (unknown2 && r.out.unknown2) {
-		*unknown2 = *r.out.unknown2;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dfs_RemoveFtRoot(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 const char *servername /* [in] [charset(UTF16)] */,
-				 const char *dns_servername /* [in] [charset(UTF16)] */,
-				 const char *dfsname /* [in] [charset(UTF16)] */,
-				 const char *rootshare /* [in] [charset(UTF16)] */,
-				 uint32_t flags /* [in]  */,
-				 struct dfs_UnknownStruct **unknown /* [in,out] [unique] */,
-				 WERROR *werror)
-{
-	struct dfs_RemoveFtRoot r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.servername = servername;
-	r.in.dns_servername = dns_servername;
-	r.in.dfsname = dfsname;
-	r.in.rootshare = rootshare;
-	r.in.flags = flags;
-	r.in.unknown = unknown;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_RemoveFtRoot, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETDFS,
-				&ndr_table_netdfs,
-				NDR_DFS_REMOVEFTROOT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_RemoveFtRoot, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	if (unknown && r.out.unknown) {
-		*unknown = *r.out.unknown;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dfs_AddStdRoot(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       const char *servername /* [in] [charset(UTF16)] */,
-			       const char *rootshare /* [in] [charset(UTF16)] */,
-			       const char *comment /* [in] [charset(UTF16)] */,
-			       uint32_t flags /* [in]  */,
-			       WERROR *werror)
-{
-	struct dfs_AddStdRoot r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.servername = servername;
-	r.in.rootshare = rootshare;
-	r.in.comment = comment;
-	r.in.flags = flags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_AddStdRoot, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETDFS,
-				&ndr_table_netdfs,
-				NDR_DFS_ADDSTDROOT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_AddStdRoot, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dfs_RemoveStdRoot(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  const char *servername /* [in] [charset(UTF16)] */,
-				  const char *rootshare /* [in] [charset(UTF16)] */,
-				  uint32_t flags /* [in]  */,
-				  WERROR *werror)
-{
-	struct dfs_RemoveStdRoot r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.servername = servername;
-	r.in.rootshare = rootshare;
-	r.in.flags = flags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_RemoveStdRoot, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETDFS,
-				&ndr_table_netdfs,
-				NDR_DFS_REMOVESTDROOT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_RemoveStdRoot, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dfs_ManagerInitialize(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      const char *servername /* [in] [ref,charset(UTF16)] */,
-				      uint32_t flags /* [in]  */,
-				      WERROR *werror)
-{
-	struct dfs_ManagerInitialize r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.servername = servername;
-	r.in.flags = flags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_ManagerInitialize, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETDFS,
-				&ndr_table_netdfs,
-				NDR_DFS_MANAGERINITIALIZE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_ManagerInitialize, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dfs_AddStdRootForced(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     const char *servername /* [in] [charset(UTF16)] */,
-				     const char *rootshare /* [in] [charset(UTF16)] */,
-				     const char *comment /* [in] [charset(UTF16)] */,
-				     const char *store /* [in] [charset(UTF16)] */,
-				     WERROR *werror)
-{
-	struct dfs_AddStdRootForced r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.servername = servername;
-	r.in.rootshare = rootshare;
-	r.in.comment = comment;
-	r.in.store = store;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_AddStdRootForced, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETDFS,
-				&ndr_table_netdfs,
-				NDR_DFS_ADDSTDROOTFORCED,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_AddStdRootForced, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dfs_GetDcAddress(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 const char *servername /* [in] [charset(UTF16)] */,
-				 const char **server_fullname /* [in,out] [ref,charset(UTF16)] */,
-				 uint8_t *is_root /* [in,out] [ref] */,
-				 uint32_t *ttl /* [in,out] [ref] */,
-				 WERROR *werror)
-{
-	struct dfs_GetDcAddress r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.servername = servername;
-	r.in.server_fullname = server_fullname;
-	r.in.is_root = is_root;
-	r.in.ttl = ttl;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_GetDcAddress, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETDFS,
-				&ndr_table_netdfs,
-				NDR_DFS_GETDCADDRESS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_GetDcAddress, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*server_fullname = *r.out.server_fullname;
-	*is_root = *r.out.is_root;
-	*ttl = *r.out.ttl;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dfs_SetDcAddress(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 const char *servername /* [in] [charset(UTF16)] */,
-				 const char *server_fullname /* [in] [charset(UTF16)] */,
-				 uint32_t flags /* [in]  */,
-				 uint32_t ttl /* [in]  */,
-				 WERROR *werror)
-{
-	struct dfs_SetDcAddress r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.servername = servername;
-	r.in.server_fullname = server_fullname;
-	r.in.flags = flags;
-	r.in.ttl = ttl;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_SetDcAddress, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETDFS,
-				&ndr_table_netdfs,
-				NDR_DFS_SETDCADDRESS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_SetDcAddress, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dfs_FlushFtTable(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 const char *servername /* [in] [charset(UTF16)] */,
-				 const char *rootshare /* [in] [charset(UTF16)] */,
-				 WERROR *werror)
-{
-	struct dfs_FlushFtTable r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.servername = servername;
-	r.in.rootshare = rootshare;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_FlushFtTable, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETDFS,
-				&ndr_table_netdfs,
-				NDR_DFS_FLUSHFTTABLE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_FlushFtTable, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dfs_Add2(struct rpc_pipe_client *cli,
-			 TALLOC_CTX *mem_ctx,
-			 WERROR *werror)
-{
-	struct dfs_Add2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_Add2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETDFS,
-				&ndr_table_netdfs,
-				NDR_DFS_ADD2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_Add2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dfs_Remove2(struct rpc_pipe_client *cli,
-			    TALLOC_CTX *mem_ctx,
-			    WERROR *werror)
-{
-	struct dfs_Remove2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_Remove2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETDFS,
-				&ndr_table_netdfs,
-				NDR_DFS_REMOVE2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_Remove2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dfs_EnumEx(struct rpc_pipe_client *cli,
-			   TALLOC_CTX *mem_ctx,
-			   const char *dfs_name /* [in] [charset(UTF16)] */,
-			   uint32_t level /* [in]  */,
-			   uint32_t bufsize /* [in]  */,
-			   struct dfs_EnumStruct *info /* [in,out] [unique] */,
-			   uint32_t *total /* [in,out] [unique] */,
-			   WERROR *werror)
-{
-	struct dfs_EnumEx r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.dfs_name = dfs_name;
-	r.in.level = level;
-	r.in.bufsize = bufsize;
-	r.in.info = info;
-	r.in.total = total;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_EnumEx, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETDFS,
-				&ndr_table_netdfs,
-				NDR_DFS_ENUMEX,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_EnumEx, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	if (info && r.out.info) {
-		*info = *r.out.info;
-	}
-	if (total && r.out.total) {
-		*total = *r.out.total;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dfs_SetInfo2(struct rpc_pipe_client *cli,
-			     TALLOC_CTX *mem_ctx,
-			     WERROR *werror)
-{
-	struct dfs_SetInfo2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_SetInfo2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETDFS,
-				&ndr_table_netdfs,
-				NDR_DFS_SETINFO2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_SetInfo2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_dfs.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_dfs.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_dfs.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,138 +0,0 @@
-#include "librpc/gen_ndr/ndr_dfs.h"
-#ifndef __CLI_NETDFS__
-#define __CLI_NETDFS__
-NTSTATUS rpccli_dfs_GetManagerVersion(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      enum dfs_ManagerVersion *version /* [out] [ref] */);
-NTSTATUS rpccli_dfs_Add(struct rpc_pipe_client *cli,
-			TALLOC_CTX *mem_ctx,
-			const char *path /* [in] [ref,charset(UTF16)] */,
-			const char *server /* [in] [ref,charset(UTF16)] */,
-			const char *share /* [in] [unique,charset(UTF16)] */,
-			const char *comment /* [in] [unique,charset(UTF16)] */,
-			uint32_t flags /* [in]  */,
-			WERROR *werror);
-NTSTATUS rpccli_dfs_Remove(struct rpc_pipe_client *cli,
-			   TALLOC_CTX *mem_ctx,
-			   const char *dfs_entry_path /* [in] [ref,charset(UTF16)] */,
-			   const char *servername /* [in] [unique,charset(UTF16)] */,
-			   const char *sharename /* [in] [unique,charset(UTF16)] */,
-			   WERROR *werror);
-NTSTATUS rpccli_dfs_SetInfo(struct rpc_pipe_client *cli,
-			    TALLOC_CTX *mem_ctx,
-			    const char *dfs_entry_path /* [in] [charset(UTF16)] */,
-			    const char *servername /* [in] [unique,charset(UTF16)] */,
-			    const char *sharename /* [in] [unique,charset(UTF16)] */,
-			    uint32_t level /* [in]  */,
-			    union dfs_Info *info /* [in] [ref,switch_is(level)] */,
-			    WERROR *werror);
-NTSTATUS rpccli_dfs_GetInfo(struct rpc_pipe_client *cli,
-			    TALLOC_CTX *mem_ctx,
-			    const char *dfs_entry_path /* [in] [charset(UTF16)] */,
-			    const char *servername /* [in] [unique,charset(UTF16)] */,
-			    const char *sharename /* [in] [unique,charset(UTF16)] */,
-			    uint32_t level /* [in]  */,
-			    union dfs_Info *info /* [out] [ref,switch_is(level)] */,
-			    WERROR *werror);
-NTSTATUS rpccli_dfs_Enum(struct rpc_pipe_client *cli,
-			 TALLOC_CTX *mem_ctx,
-			 uint32_t level /* [in]  */,
-			 uint32_t bufsize /* [in]  */,
-			 struct dfs_EnumStruct *info /* [in,out] [unique] */,
-			 uint32_t *total /* [in,out] [unique] */,
-			 WERROR *werror);
-NTSTATUS rpccli_dfs_Rename(struct rpc_pipe_client *cli,
-			   TALLOC_CTX *mem_ctx,
-			   WERROR *werror);
-NTSTATUS rpccli_dfs_Move(struct rpc_pipe_client *cli,
-			 TALLOC_CTX *mem_ctx,
-			 WERROR *werror);
-NTSTATUS rpccli_dfs_ManagerGetConfigInfo(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 WERROR *werror);
-NTSTATUS rpccli_dfs_ManagerSendSiteInfo(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					WERROR *werror);
-NTSTATUS rpccli_dfs_AddFtRoot(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      const char *servername /* [in] [charset(UTF16)] */,
-			      const char *dns_servername /* [in] [charset(UTF16)] */,
-			      const char *dfsname /* [in] [charset(UTF16)] */,
-			      const char *rootshare /* [in] [charset(UTF16)] */,
-			      const char *comment /* [in] [charset(UTF16)] */,
-			      const char *dfs_config_dn /* [in] [charset(UTF16)] */,
-			      uint8_t unknown1 /* [in]  */,
-			      uint32_t flags /* [in]  */,
-			      struct dfs_UnknownStruct **unknown2 /* [in,out] [unique] */,
-			      WERROR *werror);
-NTSTATUS rpccli_dfs_RemoveFtRoot(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 const char *servername /* [in] [charset(UTF16)] */,
-				 const char *dns_servername /* [in] [charset(UTF16)] */,
-				 const char *dfsname /* [in] [charset(UTF16)] */,
-				 const char *rootshare /* [in] [charset(UTF16)] */,
-				 uint32_t flags /* [in]  */,
-				 struct dfs_UnknownStruct **unknown /* [in,out] [unique] */,
-				 WERROR *werror);
-NTSTATUS rpccli_dfs_AddStdRoot(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       const char *servername /* [in] [charset(UTF16)] */,
-			       const char *rootshare /* [in] [charset(UTF16)] */,
-			       const char *comment /* [in] [charset(UTF16)] */,
-			       uint32_t flags /* [in]  */,
-			       WERROR *werror);
-NTSTATUS rpccli_dfs_RemoveStdRoot(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  const char *servername /* [in] [charset(UTF16)] */,
-				  const char *rootshare /* [in] [charset(UTF16)] */,
-				  uint32_t flags /* [in]  */,
-				  WERROR *werror);
-NTSTATUS rpccli_dfs_ManagerInitialize(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      const char *servername /* [in] [ref,charset(UTF16)] */,
-				      uint32_t flags /* [in]  */,
-				      WERROR *werror);
-NTSTATUS rpccli_dfs_AddStdRootForced(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     const char *servername /* [in] [charset(UTF16)] */,
-				     const char *rootshare /* [in] [charset(UTF16)] */,
-				     const char *comment /* [in] [charset(UTF16)] */,
-				     const char *store /* [in] [charset(UTF16)] */,
-				     WERROR *werror);
-NTSTATUS rpccli_dfs_GetDcAddress(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 const char *servername /* [in] [charset(UTF16)] */,
-				 const char **server_fullname /* [in,out] [ref,charset(UTF16)] */,
-				 uint8_t *is_root /* [in,out] [ref] */,
-				 uint32_t *ttl /* [in,out] [ref] */,
-				 WERROR *werror);
-NTSTATUS rpccli_dfs_SetDcAddress(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 const char *servername /* [in] [charset(UTF16)] */,
-				 const char *server_fullname /* [in] [charset(UTF16)] */,
-				 uint32_t flags /* [in]  */,
-				 uint32_t ttl /* [in]  */,
-				 WERROR *werror);
-NTSTATUS rpccli_dfs_FlushFtTable(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 const char *servername /* [in] [charset(UTF16)] */,
-				 const char *rootshare /* [in] [charset(UTF16)] */,
-				 WERROR *werror);
-NTSTATUS rpccli_dfs_Add2(struct rpc_pipe_client *cli,
-			 TALLOC_CTX *mem_ctx,
-			 WERROR *werror);
-NTSTATUS rpccli_dfs_Remove2(struct rpc_pipe_client *cli,
-			    TALLOC_CTX *mem_ctx,
-			    WERROR *werror);
-NTSTATUS rpccli_dfs_EnumEx(struct rpc_pipe_client *cli,
-			   TALLOC_CTX *mem_ctx,
-			   const char *dfs_name /* [in] [charset(UTF16)] */,
-			   uint32_t level /* [in]  */,
-			   uint32_t bufsize /* [in]  */,
-			   struct dfs_EnumStruct *info /* [in,out] [unique] */,
-			   uint32_t *total /* [in,out] [unique] */,
-			   WERROR *werror);
-NTSTATUS rpccli_dfs_SetInfo2(struct rpc_pipe_client *cli,
-			     TALLOC_CTX *mem_ctx,
-			     WERROR *werror);
-#endif /* __CLI_NETDFS__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_dssetup.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_dssetup.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_dssetup.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,476 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * client auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/cli_dssetup.h"
-
-NTSTATUS rpccli_dssetup_DsRoleGetPrimaryDomainInformation(struct rpc_pipe_client *cli,
-							  TALLOC_CTX *mem_ctx,
-							  enum dssetup_DsRoleInfoLevel level /* [in]  */,
-							  union dssetup_DsRoleInfo *info /* [out] [unique,switch_is(level)] */,
-							  WERROR *werror)
-{
-	struct dssetup_DsRoleGetPrimaryDomainInformation r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.level = level;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dssetup_DsRoleGetPrimaryDomainInformation, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_DSSETUP,
-				&ndr_table_dssetup,
-				NDR_DSSETUP_DSROLEGETPRIMARYDOMAININFORMATION,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleGetPrimaryDomainInformation, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	if (info && r.out.info) {
-		*info = *r.out.info;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dssetup_DsRoleDnsNameToFlatName(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx,
-						WERROR *werror)
-{
-	struct dssetup_DsRoleDnsNameToFlatName r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dssetup_DsRoleDnsNameToFlatName, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_DSSETUP,
-				&ndr_table_dssetup,
-				NDR_DSSETUP_DSROLEDNSNAMETOFLATNAME,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleDnsNameToFlatName, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dssetup_DsRoleDcAsDc(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     WERROR *werror)
-{
-	struct dssetup_DsRoleDcAsDc r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dssetup_DsRoleDcAsDc, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_DSSETUP,
-				&ndr_table_dssetup,
-				NDR_DSSETUP_DSROLEDCASDC,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleDcAsDc, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dssetup_DsRoleDcAsReplica(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  WERROR *werror)
-{
-	struct dssetup_DsRoleDcAsReplica r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dssetup_DsRoleDcAsReplica, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_DSSETUP,
-				&ndr_table_dssetup,
-				NDR_DSSETUP_DSROLEDCASREPLICA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleDcAsReplica, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dssetup_DsRoleDemoteDc(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       WERROR *werror)
-{
-	struct dssetup_DsRoleDemoteDc r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dssetup_DsRoleDemoteDc, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_DSSETUP,
-				&ndr_table_dssetup,
-				NDR_DSSETUP_DSROLEDEMOTEDC,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleDemoteDc, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dssetup_DsRoleGetDcOperationProgress(struct rpc_pipe_client *cli,
-						     TALLOC_CTX *mem_ctx,
-						     WERROR *werror)
-{
-	struct dssetup_DsRoleGetDcOperationProgress r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dssetup_DsRoleGetDcOperationProgress, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_DSSETUP,
-				&ndr_table_dssetup,
-				NDR_DSSETUP_DSROLEGETDCOPERATIONPROGRESS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleGetDcOperationProgress, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dssetup_DsRoleGetDcOperationResults(struct rpc_pipe_client *cli,
-						    TALLOC_CTX *mem_ctx,
-						    WERROR *werror)
-{
-	struct dssetup_DsRoleGetDcOperationResults r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dssetup_DsRoleGetDcOperationResults, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_DSSETUP,
-				&ndr_table_dssetup,
-				NDR_DSSETUP_DSROLEGETDCOPERATIONRESULTS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleGetDcOperationResults, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dssetup_DsRoleCancel(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     WERROR *werror)
-{
-	struct dssetup_DsRoleCancel r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dssetup_DsRoleCancel, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_DSSETUP,
-				&ndr_table_dssetup,
-				NDR_DSSETUP_DSROLECANCEL,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleCancel, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dssetup_DsRoleServerSaveStateForUpgrade(struct rpc_pipe_client *cli,
-							TALLOC_CTX *mem_ctx,
-							WERROR *werror)
-{
-	struct dssetup_DsRoleServerSaveStateForUpgrade r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dssetup_DsRoleServerSaveStateForUpgrade, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_DSSETUP,
-				&ndr_table_dssetup,
-				NDR_DSSETUP_DSROLESERVERSAVESTATEFORUPGRADE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleServerSaveStateForUpgrade, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dssetup_DsRoleUpgradeDownlevelServer(struct rpc_pipe_client *cli,
-						     TALLOC_CTX *mem_ctx,
-						     WERROR *werror)
-{
-	struct dssetup_DsRoleUpgradeDownlevelServer r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dssetup_DsRoleUpgradeDownlevelServer, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_DSSETUP,
-				&ndr_table_dssetup,
-				NDR_DSSETUP_DSROLEUPGRADEDOWNLEVELSERVER,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleUpgradeDownlevelServer, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_dssetup_DsRoleAbortDownlevelServerUpgrade(struct rpc_pipe_client *cli,
-							  TALLOC_CTX *mem_ctx,
-							  WERROR *werror)
-{
-	struct dssetup_DsRoleAbortDownlevelServerUpgrade r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dssetup_DsRoleAbortDownlevelServerUpgrade, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_DSSETUP,
-				&ndr_table_dssetup,
-				NDR_DSSETUP_DSROLEABORTDOWNLEVELSERVERUPGRADE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleAbortDownlevelServerUpgrade, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_dssetup.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_dssetup.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_dssetup.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,39 +0,0 @@
-#include "librpc/gen_ndr/ndr_dssetup.h"
-#ifndef __CLI_DSSETUP__
-#define __CLI_DSSETUP__
-NTSTATUS rpccli_dssetup_DsRoleGetPrimaryDomainInformation(struct rpc_pipe_client *cli,
-							  TALLOC_CTX *mem_ctx,
-							  enum dssetup_DsRoleInfoLevel level /* [in]  */,
-							  union dssetup_DsRoleInfo *info /* [out] [unique,switch_is(level)] */,
-							  WERROR *werror);
-NTSTATUS rpccli_dssetup_DsRoleDnsNameToFlatName(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx,
-						WERROR *werror);
-NTSTATUS rpccli_dssetup_DsRoleDcAsDc(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     WERROR *werror);
-NTSTATUS rpccli_dssetup_DsRoleDcAsReplica(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  WERROR *werror);
-NTSTATUS rpccli_dssetup_DsRoleDemoteDc(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       WERROR *werror);
-NTSTATUS rpccli_dssetup_DsRoleGetDcOperationProgress(struct rpc_pipe_client *cli,
-						     TALLOC_CTX *mem_ctx,
-						     WERROR *werror);
-NTSTATUS rpccli_dssetup_DsRoleGetDcOperationResults(struct rpc_pipe_client *cli,
-						    TALLOC_CTX *mem_ctx,
-						    WERROR *werror);
-NTSTATUS rpccli_dssetup_DsRoleCancel(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     WERROR *werror);
-NTSTATUS rpccli_dssetup_DsRoleServerSaveStateForUpgrade(struct rpc_pipe_client *cli,
-							TALLOC_CTX *mem_ctx,
-							WERROR *werror);
-NTSTATUS rpccli_dssetup_DsRoleUpgradeDownlevelServer(struct rpc_pipe_client *cli,
-						     TALLOC_CTX *mem_ctx,
-						     WERROR *werror);
-NTSTATUS rpccli_dssetup_DsRoleAbortDownlevelServerUpgrade(struct rpc_pipe_client *cli,
-							  TALLOC_CTX *mem_ctx,
-							  WERROR *werror);
-#endif /* __CLI_DSSETUP__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_echo.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_echo.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_echo.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,420 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * client auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/cli_echo.h"
-
-NTSTATUS rpccli_echo_AddOne(struct rpc_pipe_client *cli,
-			    TALLOC_CTX *mem_ctx,
-			    uint32_t in_data /* [in]  */,
-			    uint32_t *out_data /* [out] [ref] */)
-{
-	struct echo_AddOne r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.in_data = in_data;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(echo_AddOne, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_RPCECHO,
-				&ndr_table_rpcecho,
-				NDR_ECHO_ADDONE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(echo_AddOne, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*out_data = *r.out.out_data;
-
-	/* Return result */
-	return NT_STATUS_OK;
-}
-
-NTSTATUS rpccli_echo_EchoData(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      uint32_t len /* [in]  */,
-			      uint8_t *in_data /* [in] [size_is(len)] */,
-			      uint8_t *out_data /* [out] [size_is(len)] */)
-{
-	struct echo_EchoData r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.len = len;
-	r.in.in_data = in_data;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(echo_EchoData, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_RPCECHO,
-				&ndr_table_rpcecho,
-				NDR_ECHO_ECHODATA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(echo_EchoData, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	memcpy(out_data, r.out.out_data, r.in.len * sizeof(*out_data));
-
-	/* Return result */
-	return NT_STATUS_OK;
-}
-
-NTSTATUS rpccli_echo_SinkData(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      uint32_t len /* [in]  */,
-			      uint8_t *data /* [in] [size_is(len)] */)
-{
-	struct echo_SinkData r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.len = len;
-	r.in.data = data;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(echo_SinkData, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_RPCECHO,
-				&ndr_table_rpcecho,
-				NDR_ECHO_SINKDATA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(echo_SinkData, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return NT_STATUS_OK;
-}
-
-NTSTATUS rpccli_echo_SourceData(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				uint32_t len /* [in]  */,
-				uint8_t *data /* [out] [size_is(len)] */)
-{
-	struct echo_SourceData r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.len = len;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(echo_SourceData, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_RPCECHO,
-				&ndr_table_rpcecho,
-				NDR_ECHO_SOURCEDATA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(echo_SourceData, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	memcpy(data, r.out.data, r.in.len * sizeof(*data));
-
-	/* Return result */
-	return NT_STATUS_OK;
-}
-
-NTSTATUS rpccli_echo_TestCall(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      const char *s1 /* [in] [ref,charset(UTF16)] */,
-			      const char **s2 /* [out] [ref,charset(UTF16)] */)
-{
-	struct echo_TestCall r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.s1 = s1;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(echo_TestCall, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_RPCECHO,
-				&ndr_table_rpcecho,
-				NDR_ECHO_TESTCALL,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(echo_TestCall, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*s2 = *r.out.s2;
-
-	/* Return result */
-	return NT_STATUS_OK;
-}
-
-NTSTATUS rpccli_echo_TestCall2(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       uint16_t level /* [in]  */,
-			       union echo_Info *info /* [out] [ref,switch_is(level)] */)
-{
-	struct echo_TestCall2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.level = level;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(echo_TestCall2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_RPCECHO,
-				&ndr_table_rpcecho,
-				NDR_ECHO_TESTCALL2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(echo_TestCall2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_echo_TestSleep(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       uint32_t seconds /* [in]  */)
-{
-	struct echo_TestSleep r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.seconds = seconds;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(echo_TestSleep, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_RPCECHO,
-				&ndr_table_rpcecho,
-				NDR_ECHO_TESTSLEEP,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(echo_TestSleep, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return NT_STATUS_OK;
-}
-
-NTSTATUS rpccli_echo_TestEnum(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      enum echo_Enum1 *foo1 /* [in,out] [ref] */,
-			      struct echo_Enum2 *foo2 /* [in,out] [ref] */,
-			      union echo_Enum3 *foo3 /* [in,out] [ref,switch_is(*foo1)] */)
-{
-	struct echo_TestEnum r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.foo1 = foo1;
-	r.in.foo2 = foo2;
-	r.in.foo3 = foo3;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(echo_TestEnum, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_RPCECHO,
-				&ndr_table_rpcecho,
-				NDR_ECHO_TESTENUM,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(echo_TestEnum, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*foo1 = *r.out.foo1;
-	*foo2 = *r.out.foo2;
-	*foo3 = *r.out.foo3;
-
-	/* Return result */
-	return NT_STATUS_OK;
-}
-
-NTSTATUS rpccli_echo_TestSurrounding(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     struct echo_Surrounding *data /* [in,out] [ref] */)
-{
-	struct echo_TestSurrounding r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.data = data;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(echo_TestSurrounding, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_RPCECHO,
-				&ndr_table_rpcecho,
-				NDR_ECHO_TESTSURROUNDING,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(echo_TestSurrounding, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*data = *r.out.data;
-
-	/* Return result */
-	return NT_STATUS_OK;
-}
-
-NTSTATUS rpccli_echo_TestDoublePointer(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       uint16_t ***data /* [in] [ref] */)
-{
-	struct echo_TestDoublePointer r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.data = data;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(echo_TestDoublePointer, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_RPCECHO,
-				&ndr_table_rpcecho,
-				NDR_ECHO_TESTDOUBLEPOINTER,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(echo_TestDoublePointer, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return NT_STATUS_OK;
-}
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_echo.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_echo.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_echo.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,43 +0,0 @@
-#include "librpc/gen_ndr/ndr_echo.h"
-#ifndef __CLI_RPCECHO__
-#define __CLI_RPCECHO__
-NTSTATUS rpccli_echo_AddOne(struct rpc_pipe_client *cli,
-			    TALLOC_CTX *mem_ctx,
-			    uint32_t in_data /* [in]  */,
-			    uint32_t *out_data /* [out] [ref] */);
-NTSTATUS rpccli_echo_EchoData(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      uint32_t len /* [in]  */,
-			      uint8_t *in_data /* [in] [size_is(len)] */,
-			      uint8_t *out_data /* [out] [size_is(len)] */);
-NTSTATUS rpccli_echo_SinkData(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      uint32_t len /* [in]  */,
-			      uint8_t *data /* [in] [size_is(len)] */);
-NTSTATUS rpccli_echo_SourceData(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				uint32_t len /* [in]  */,
-				uint8_t *data /* [out] [size_is(len)] */);
-NTSTATUS rpccli_echo_TestCall(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      const char *s1 /* [in] [ref,charset(UTF16)] */,
-			      const char **s2 /* [out] [ref,charset(UTF16)] */);
-NTSTATUS rpccli_echo_TestCall2(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       uint16_t level /* [in]  */,
-			       union echo_Info *info /* [out] [ref,switch_is(level)] */);
-NTSTATUS rpccli_echo_TestSleep(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       uint32_t seconds /* [in]  */);
-NTSTATUS rpccli_echo_TestEnum(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      enum echo_Enum1 *foo1 /* [in,out] [ref] */,
-			      struct echo_Enum2 *foo2 /* [in,out] [ref] */,
-			      union echo_Enum3 *foo3 /* [in,out] [ref,switch_is(*foo1)] */);
-NTSTATUS rpccli_echo_TestSurrounding(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     struct echo_Surrounding *data /* [in,out] [ref] */);
-NTSTATUS rpccli_echo_TestDoublePointer(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       uint16_t ***data /* [in] [ref] */);
-#endif /* __CLI_RPCECHO__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_epmapper.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_epmapper.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_epmapper.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,355 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * client auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/cli_epmapper.h"
-
-NTSTATUS rpccli_epm_Insert(struct rpc_pipe_client *cli,
-			   TALLOC_CTX *mem_ctx,
-			   uint32_t num_ents /* [in]  */,
-			   struct epm_entry_t *entries /* [in] [size_is(num_ents)] */,
-			   uint32_t replace /* [in]  */)
-{
-	struct epm_Insert r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.num_ents = num_ents;
-	r.in.entries = entries;
-	r.in.replace = replace;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(epm_Insert, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EPMAPPER,
-				&ndr_table_epmapper,
-				NDR_EPM_INSERT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(epm_Insert, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return NT_STATUS_OK;
-}
-
-NTSTATUS rpccli_epm_Delete(struct rpc_pipe_client *cli,
-			   TALLOC_CTX *mem_ctx,
-			   uint32_t num_ents /* [in]  */,
-			   struct epm_entry_t *entries /* [in] [size_is(num_ents)] */)
-{
-	struct epm_Delete r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.num_ents = num_ents;
-	r.in.entries = entries;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(epm_Delete, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EPMAPPER,
-				&ndr_table_epmapper,
-				NDR_EPM_DELETE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(epm_Delete, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return NT_STATUS_OK;
-}
-
-NTSTATUS rpccli_epm_Lookup(struct rpc_pipe_client *cli,
-			   TALLOC_CTX *mem_ctx,
-			   uint32_t inquiry_type /* [in]  */,
-			   struct GUID *object /* [in] [ptr] */,
-			   struct rpc_if_id_t *interface_id /* [in] [ptr] */,
-			   uint32_t vers_option /* [in]  */,
-			   struct policy_handle *entry_handle /* [in,out] [ref] */,
-			   uint32_t max_ents /* [in]  */,
-			   uint32_t *num_ents /* [out] [ref] */,
-			   struct epm_entry_t *entries /* [out] [length_is(*num_ents),size_is(max_ents)] */)
-{
-	struct epm_Lookup r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.inquiry_type = inquiry_type;
-	r.in.object = object;
-	r.in.interface_id = interface_id;
-	r.in.vers_option = vers_option;
-	r.in.entry_handle = entry_handle;
-	r.in.max_ents = max_ents;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(epm_Lookup, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EPMAPPER,
-				&ndr_table_epmapper,
-				NDR_EPM_LOOKUP,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(epm_Lookup, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*entry_handle = *r.out.entry_handle;
-	*num_ents = *r.out.num_ents;
-	memcpy(entries, r.out.entries, r.in.max_ents * sizeof(*entries));
-
-	/* Return result */
-	return NT_STATUS_OK;
-}
-
-NTSTATUS rpccli_epm_Map(struct rpc_pipe_client *cli,
-			TALLOC_CTX *mem_ctx,
-			struct GUID *object /* [in] [ptr] */,
-			struct epm_twr_t *map_tower /* [in] [ptr] */,
-			struct policy_handle *entry_handle /* [in,out] [ref] */,
-			uint32_t max_towers /* [in]  */,
-			uint32_t *num_towers /* [out] [ref] */,
-			struct epm_twr_p_t *towers /* [out] [length_is(*num_towers),size_is(max_towers)] */)
-{
-	struct epm_Map r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.object = object;
-	r.in.map_tower = map_tower;
-	r.in.entry_handle = entry_handle;
-	r.in.max_towers = max_towers;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(epm_Map, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EPMAPPER,
-				&ndr_table_epmapper,
-				NDR_EPM_MAP,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(epm_Map, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*entry_handle = *r.out.entry_handle;
-	*num_towers = *r.out.num_towers;
-	memcpy(towers, r.out.towers, r.in.max_towers * sizeof(*towers));
-
-	/* Return result */
-	return NT_STATUS_OK;
-}
-
-NTSTATUS rpccli_epm_LookupHandleFree(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     struct policy_handle *entry_handle /* [in,out] [ref] */)
-{
-	struct epm_LookupHandleFree r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.entry_handle = entry_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(epm_LookupHandleFree, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EPMAPPER,
-				&ndr_table_epmapper,
-				NDR_EPM_LOOKUPHANDLEFREE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(epm_LookupHandleFree, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*entry_handle = *r.out.entry_handle;
-
-	/* Return result */
-	return NT_STATUS_OK;
-}
-
-NTSTATUS rpccli_epm_InqObject(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      struct GUID *epm_object /* [in] [ref] */)
-{
-	struct epm_InqObject r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.epm_object = epm_object;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(epm_InqObject, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EPMAPPER,
-				&ndr_table_epmapper,
-				NDR_EPM_INQOBJECT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(epm_InqObject, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return NT_STATUS_OK;
-}
-
-NTSTATUS rpccli_epm_MgmtDelete(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       uint32_t object_speced /* [in]  */,
-			       struct GUID *object /* [in] [ptr] */,
-			       struct epm_twr_t *tower /* [in] [ptr] */)
-{
-	struct epm_MgmtDelete r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.object_speced = object_speced;
-	r.in.object = object;
-	r.in.tower = tower;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(epm_MgmtDelete, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EPMAPPER,
-				&ndr_table_epmapper,
-				NDR_EPM_MGMTDELETE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(epm_MgmtDelete, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return NT_STATUS_OK;
-}
-
-NTSTATUS rpccli_epm_MapAuth(struct rpc_pipe_client *cli,
-			    TALLOC_CTX *mem_ctx)
-{
-	struct epm_MapAuth r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(epm_MapAuth, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EPMAPPER,
-				&ndr_table_epmapper,
-				NDR_EPM_MAPAUTH,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(epm_MapAuth, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return NT_STATUS_OK;
-}
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_epmapper.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_epmapper.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_epmapper.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,44 +0,0 @@
-#include "librpc/gen_ndr/ndr_epmapper.h"
-#ifndef __CLI_EPMAPPER__
-#define __CLI_EPMAPPER__
-NTSTATUS rpccli_epm_Insert(struct rpc_pipe_client *cli,
-			   TALLOC_CTX *mem_ctx,
-			   uint32_t num_ents /* [in]  */,
-			   struct epm_entry_t *entries /* [in] [size_is(num_ents)] */,
-			   uint32_t replace /* [in]  */);
-NTSTATUS rpccli_epm_Delete(struct rpc_pipe_client *cli,
-			   TALLOC_CTX *mem_ctx,
-			   uint32_t num_ents /* [in]  */,
-			   struct epm_entry_t *entries /* [in] [size_is(num_ents)] */);
-NTSTATUS rpccli_epm_Lookup(struct rpc_pipe_client *cli,
-			   TALLOC_CTX *mem_ctx,
-			   uint32_t inquiry_type /* [in]  */,
-			   struct GUID *object /* [in] [ptr] */,
-			   struct rpc_if_id_t *interface_id /* [in] [ptr] */,
-			   uint32_t vers_option /* [in]  */,
-			   struct policy_handle *entry_handle /* [in,out] [ref] */,
-			   uint32_t max_ents /* [in]  */,
-			   uint32_t *num_ents /* [out] [ref] */,
-			   struct epm_entry_t *entries /* [out] [length_is(*num_ents),size_is(max_ents)] */);
-NTSTATUS rpccli_epm_Map(struct rpc_pipe_client *cli,
-			TALLOC_CTX *mem_ctx,
-			struct GUID *object /* [in] [ptr] */,
-			struct epm_twr_t *map_tower /* [in] [ptr] */,
-			struct policy_handle *entry_handle /* [in,out] [ref] */,
-			uint32_t max_towers /* [in]  */,
-			uint32_t *num_towers /* [out] [ref] */,
-			struct epm_twr_p_t *towers /* [out] [length_is(*num_towers),size_is(max_towers)] */);
-NTSTATUS rpccli_epm_LookupHandleFree(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     struct policy_handle *entry_handle /* [in,out] [ref] */);
-NTSTATUS rpccli_epm_InqObject(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      struct GUID *epm_object /* [in] [ref] */);
-NTSTATUS rpccli_epm_MgmtDelete(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       uint32_t object_speced /* [in]  */,
-			       struct GUID *object /* [in] [ptr] */,
-			       struct epm_twr_t *tower /* [in] [ptr] */);
-NTSTATUS rpccli_epm_MapAuth(struct rpc_pipe_client *cli,
-			    TALLOC_CTX *mem_ctx);
-#endif /* __CLI_EPMAPPER__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_eventlog.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_eventlog.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_eventlog.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,939 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * client auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/cli_eventlog.h"
-
-NTSTATUS rpccli_eventlog_ClearEventLogW(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					struct policy_handle *handle /* [in] [ref] */,
-					struct lsa_String *backupfile /* [in] [unique] */)
-{
-	struct eventlog_ClearEventLogW r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.backupfile = backupfile;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_ClearEventLogW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EVENTLOG,
-				&ndr_table_eventlog,
-				NDR_EVENTLOG_CLEAREVENTLOGW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_ClearEventLogW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_eventlog_BackupEventLogW(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx)
-{
-	struct eventlog_BackupEventLogW r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_BackupEventLogW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EVENTLOG,
-				&ndr_table_eventlog,
-				NDR_EVENTLOG_BACKUPEVENTLOGW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_BackupEventLogW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_eventlog_CloseEventLog(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct policy_handle *handle /* [in,out] [ref] */)
-{
-	struct eventlog_CloseEventLog r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_CloseEventLog, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EVENTLOG,
-				&ndr_table_eventlog,
-				NDR_EVENTLOG_CLOSEEVENTLOG,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_CloseEventLog, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*handle = *r.out.handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_eventlog_DeregisterEventSource(struct rpc_pipe_client *cli,
-					       TALLOC_CTX *mem_ctx)
-{
-	struct eventlog_DeregisterEventSource r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_DeregisterEventSource, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EVENTLOG,
-				&ndr_table_eventlog,
-				NDR_EVENTLOG_DEREGISTEREVENTSOURCE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_DeregisterEventSource, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_eventlog_GetNumRecords(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct policy_handle *handle /* [in] [ref] */,
-				       uint32_t *number /* [out] [ref] */)
-{
-	struct eventlog_GetNumRecords r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_GetNumRecords, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EVENTLOG,
-				&ndr_table_eventlog,
-				NDR_EVENTLOG_GETNUMRECORDS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_GetNumRecords, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*number = *r.out.number;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_eventlog_GetOldestRecord(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 struct policy_handle *handle /* [in] [ref] */,
-					 uint32_t *oldest_entry /* [out] [ref] */)
-{
-	struct eventlog_GetOldestRecord r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_GetOldestRecord, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EVENTLOG,
-				&ndr_table_eventlog,
-				NDR_EVENTLOG_GETOLDESTRECORD,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_GetOldestRecord, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*oldest_entry = *r.out.oldest_entry;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_eventlog_ChangeNotify(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx)
-{
-	struct eventlog_ChangeNotify r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_ChangeNotify, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EVENTLOG,
-				&ndr_table_eventlog,
-				NDR_EVENTLOG_CHANGENOTIFY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_ChangeNotify, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_eventlog_OpenEventLogW(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct eventlog_OpenUnknown0 *unknown0 /* [in] [unique] */,
-				       struct lsa_String *logname /* [in] [ref] */,
-				       struct lsa_String *servername /* [in] [ref] */,
-				       uint32_t unknown2 /* [in]  */,
-				       uint32_t unknown3 /* [in]  */,
-				       struct policy_handle *handle /* [out] [ref] */)
-{
-	struct eventlog_OpenEventLogW r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.unknown0 = unknown0;
-	r.in.logname = logname;
-	r.in.servername = servername;
-	r.in.unknown2 = unknown2;
-	r.in.unknown3 = unknown3;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_OpenEventLogW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EVENTLOG,
-				&ndr_table_eventlog,
-				NDR_EVENTLOG_OPENEVENTLOGW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_OpenEventLogW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*handle = *r.out.handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_eventlog_RegisterEventSourceW(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx)
-{
-	struct eventlog_RegisterEventSourceW r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_RegisterEventSourceW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EVENTLOG,
-				&ndr_table_eventlog,
-				NDR_EVENTLOG_REGISTEREVENTSOURCEW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_RegisterEventSourceW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_eventlog_OpenBackupEventLogW(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx)
-{
-	struct eventlog_OpenBackupEventLogW r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_OpenBackupEventLogW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EVENTLOG,
-				&ndr_table_eventlog,
-				NDR_EVENTLOG_OPENBACKUPEVENTLOGW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_OpenBackupEventLogW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_eventlog_ReadEventLogW(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct policy_handle *handle /* [in] [ref] */,
-				       uint32_t flags /* [in]  */,
-				       uint32_t offset /* [in]  */,
-				       uint32_t number_of_bytes /* [in] [range(0,0x7FFFF)] */,
-				       uint8_t *data /* [out] [ref,size_is(number_of_bytes)] */,
-				       uint32_t *sent_size /* [out] [ref] */,
-				       uint32_t *real_size /* [out] [ref] */)
-{
-	struct eventlog_ReadEventLogW r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.flags = flags;
-	r.in.offset = offset;
-	r.in.number_of_bytes = number_of_bytes;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_ReadEventLogW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EVENTLOG,
-				&ndr_table_eventlog,
-				NDR_EVENTLOG_READEVENTLOGW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_ReadEventLogW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	memcpy(data, r.out.data, r.in.number_of_bytes * sizeof(*data));
-	*sent_size = *r.out.sent_size;
-	*real_size = *r.out.real_size;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_eventlog_ReportEventW(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx)
-{
-	struct eventlog_ReportEventW r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_ReportEventW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EVENTLOG,
-				&ndr_table_eventlog,
-				NDR_EVENTLOG_REPORTEVENTW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_ReportEventW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_eventlog_ClearEventLogA(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx)
-{
-	struct eventlog_ClearEventLogA r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_ClearEventLogA, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EVENTLOG,
-				&ndr_table_eventlog,
-				NDR_EVENTLOG_CLEAREVENTLOGA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_ClearEventLogA, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_eventlog_BackupEventLogA(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx)
-{
-	struct eventlog_BackupEventLogA r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_BackupEventLogA, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EVENTLOG,
-				&ndr_table_eventlog,
-				NDR_EVENTLOG_BACKUPEVENTLOGA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_BackupEventLogA, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_eventlog_OpenEventLogA(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx)
-{
-	struct eventlog_OpenEventLogA r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_OpenEventLogA, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EVENTLOG,
-				&ndr_table_eventlog,
-				NDR_EVENTLOG_OPENEVENTLOGA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_OpenEventLogA, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_eventlog_RegisterEventSourceA(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx)
-{
-	struct eventlog_RegisterEventSourceA r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_RegisterEventSourceA, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EVENTLOG,
-				&ndr_table_eventlog,
-				NDR_EVENTLOG_REGISTEREVENTSOURCEA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_RegisterEventSourceA, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_eventlog_OpenBackupEventLogA(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx)
-{
-	struct eventlog_OpenBackupEventLogA r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_OpenBackupEventLogA, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EVENTLOG,
-				&ndr_table_eventlog,
-				NDR_EVENTLOG_OPENBACKUPEVENTLOGA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_OpenBackupEventLogA, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_eventlog_ReadEventLogA(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx)
-{
-	struct eventlog_ReadEventLogA r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_ReadEventLogA, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EVENTLOG,
-				&ndr_table_eventlog,
-				NDR_EVENTLOG_READEVENTLOGA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_ReadEventLogA, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_eventlog_ReportEventA(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx)
-{
-	struct eventlog_ReportEventA r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_ReportEventA, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EVENTLOG,
-				&ndr_table_eventlog,
-				NDR_EVENTLOG_REPORTEVENTA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_ReportEventA, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_eventlog_RegisterClusterSvc(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx)
-{
-	struct eventlog_RegisterClusterSvc r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_RegisterClusterSvc, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EVENTLOG,
-				&ndr_table_eventlog,
-				NDR_EVENTLOG_REGISTERCLUSTERSVC,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_RegisterClusterSvc, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_eventlog_DeregisterClusterSvc(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx)
-{
-	struct eventlog_DeregisterClusterSvc r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_DeregisterClusterSvc, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EVENTLOG,
-				&ndr_table_eventlog,
-				NDR_EVENTLOG_DEREGISTERCLUSTERSVC,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_DeregisterClusterSvc, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_eventlog_WriteClusterEvents(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx)
-{
-	struct eventlog_WriteClusterEvents r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_WriteClusterEvents, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EVENTLOG,
-				&ndr_table_eventlog,
-				NDR_EVENTLOG_WRITECLUSTEREVENTS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_WriteClusterEvents, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_eventlog_GetLogIntormation(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx)
-{
-	struct eventlog_GetLogIntormation r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_GetLogIntormation, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EVENTLOG,
-				&ndr_table_eventlog,
-				NDR_EVENTLOG_GETLOGINTORMATION,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_GetLogIntormation, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_eventlog_FlushEventLog(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct policy_handle *handle /* [in] [ref] */)
-{
-	struct eventlog_FlushEventLog r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_FlushEventLog, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_EVENTLOG,
-				&ndr_table_eventlog,
-				NDR_EVENTLOG_FLUSHEVENTLOG,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_FlushEventLog, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_eventlog.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_eventlog.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_eventlog.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,73 +0,0 @@
-#include "librpc/gen_ndr/ndr_eventlog.h"
-#ifndef __CLI_EVENTLOG__
-#define __CLI_EVENTLOG__
-NTSTATUS rpccli_eventlog_ClearEventLogW(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					struct policy_handle *handle /* [in] [ref] */,
-					struct lsa_String *backupfile /* [in] [unique] */);
-NTSTATUS rpccli_eventlog_BackupEventLogW(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_eventlog_CloseEventLog(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct policy_handle *handle /* [in,out] [ref] */);
-NTSTATUS rpccli_eventlog_DeregisterEventSource(struct rpc_pipe_client *cli,
-					       TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_eventlog_GetNumRecords(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct policy_handle *handle /* [in] [ref] */,
-				       uint32_t *number /* [out] [ref] */);
-NTSTATUS rpccli_eventlog_GetOldestRecord(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 struct policy_handle *handle /* [in] [ref] */,
-					 uint32_t *oldest_entry /* [out] [ref] */);
-NTSTATUS rpccli_eventlog_ChangeNotify(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_eventlog_OpenEventLogW(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct eventlog_OpenUnknown0 *unknown0 /* [in] [unique] */,
-				       struct lsa_String *logname /* [in] [ref] */,
-				       struct lsa_String *servername /* [in] [ref] */,
-				       uint32_t unknown2 /* [in]  */,
-				       uint32_t unknown3 /* [in]  */,
-				       struct policy_handle *handle /* [out] [ref] */);
-NTSTATUS rpccli_eventlog_RegisterEventSourceW(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_eventlog_OpenBackupEventLogW(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_eventlog_ReadEventLogW(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct policy_handle *handle /* [in] [ref] */,
-				       uint32_t flags /* [in]  */,
-				       uint32_t offset /* [in]  */,
-				       uint32_t number_of_bytes /* [in] [range(0,0x7FFFF)] */,
-				       uint8_t *data /* [out] [ref,size_is(number_of_bytes)] */,
-				       uint32_t *sent_size /* [out] [ref] */,
-				       uint32_t *real_size /* [out] [ref] */);
-NTSTATUS rpccli_eventlog_ReportEventW(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_eventlog_ClearEventLogA(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_eventlog_BackupEventLogA(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_eventlog_OpenEventLogA(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_eventlog_RegisterEventSourceA(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_eventlog_OpenBackupEventLogA(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_eventlog_ReadEventLogA(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_eventlog_ReportEventA(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_eventlog_RegisterClusterSvc(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_eventlog_DeregisterClusterSvc(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_eventlog_WriteClusterEvents(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_eventlog_GetLogIntormation(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_eventlog_FlushEventLog(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct policy_handle *handle /* [in] [ref] */);
-#endif /* __CLI_EVENTLOG__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_initshutdown.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_initshutdown.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_initshutdown.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,158 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * client auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/cli_initshutdown.h"
-
-NTSTATUS rpccli_initshutdown_Init(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  uint16_t *hostname /* [in] [unique] */,
-				  struct initshutdown_String *message /* [in] [unique] */,
-				  uint32_t timeout /* [in]  */,
-				  uint8_t force_apps /* [in]  */,
-				  uint8_t reboot /* [in]  */,
-				  WERROR *werror)
-{
-	struct initshutdown_Init r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.hostname = hostname;
-	r.in.message = message;
-	r.in.timeout = timeout;
-	r.in.force_apps = force_apps;
-	r.in.reboot = reboot;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(initshutdown_Init, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_INITSHUTDOWN,
-				&ndr_table_initshutdown,
-				NDR_INITSHUTDOWN_INIT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(initshutdown_Init, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_initshutdown_Abort(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   uint16_t *server /* [in] [unique] */,
-				   WERROR *werror)
-{
-	struct initshutdown_Abort r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server = server;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(initshutdown_Abort, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_INITSHUTDOWN,
-				&ndr_table_initshutdown,
-				NDR_INITSHUTDOWN_ABORT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(initshutdown_Abort, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_initshutdown_InitEx(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    uint16_t *hostname /* [in] [unique] */,
-				    struct initshutdown_String *message /* [in] [unique] */,
-				    uint32_t timeout /* [in]  */,
-				    uint8_t force_apps /* [in]  */,
-				    uint8_t reboot /* [in]  */,
-				    uint32_t reason /* [in]  */,
-				    WERROR *werror)
-{
-	struct initshutdown_InitEx r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.hostname = hostname;
-	r.in.message = message;
-	r.in.timeout = timeout;
-	r.in.force_apps = force_apps;
-	r.in.reboot = reboot;
-	r.in.reason = reason;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(initshutdown_InitEx, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_INITSHUTDOWN,
-				&ndr_table_initshutdown,
-				NDR_INITSHUTDOWN_INITEX,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(initshutdown_InitEx, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_initshutdown.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_initshutdown.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_initshutdown.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,25 +0,0 @@
-#include "librpc/gen_ndr/ndr_initshutdown.h"
-#ifndef __CLI_INITSHUTDOWN__
-#define __CLI_INITSHUTDOWN__
-NTSTATUS rpccli_initshutdown_Init(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  uint16_t *hostname /* [in] [unique] */,
-				  struct initshutdown_String *message /* [in] [unique] */,
-				  uint32_t timeout /* [in]  */,
-				  uint8_t force_apps /* [in]  */,
-				  uint8_t reboot /* [in]  */,
-				  WERROR *werror);
-NTSTATUS rpccli_initshutdown_Abort(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   uint16_t *server /* [in] [unique] */,
-				   WERROR *werror);
-NTSTATUS rpccli_initshutdown_InitEx(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    uint16_t *hostname /* [in] [unique] */,
-				    struct initshutdown_String *message /* [in] [unique] */,
-				    uint32_t timeout /* [in]  */,
-				    uint8_t force_apps /* [in]  */,
-				    uint8_t reboot /* [in]  */,
-				    uint32_t reason /* [in]  */,
-				    WERROR *werror);
-#endif /* __CLI_INITSHUTDOWN__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_lsa.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_lsa.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_lsa.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,3483 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * client auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/cli_lsa.h"
-
-NTSTATUS rpccli_lsa_Close(struct rpc_pipe_client *cli,
-			  TALLOC_CTX *mem_ctx,
-			  struct policy_handle *handle /* [in,out] [ref] */)
-{
-	struct lsa_Close r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_Close, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_CLOSE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_Close, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*handle = *r.out.handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_Delete(struct rpc_pipe_client *cli,
-			   TALLOC_CTX *mem_ctx,
-			   struct policy_handle *handle /* [in] [ref] */)
-{
-	struct lsa_Delete r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_Delete, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_DELETE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_Delete, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_EnumPrivs(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      struct policy_handle *handle /* [in] [ref] */,
-			      uint32_t *resume_handle /* [in,out] [ref] */,
-			      struct lsa_PrivArray *privs /* [out] [ref] */,
-			      uint32_t max_count /* [in]  */)
-{
-	struct lsa_EnumPrivs r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.resume_handle = resume_handle;
-	r.in.max_count = max_count;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_EnumPrivs, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_ENUMPRIVS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_EnumPrivs, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*resume_handle = *r.out.resume_handle;
-	*privs = *r.out.privs;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_QuerySecurity(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  struct policy_handle *handle /* [in] [ref] */,
-				  uint32_t sec_info /* [in]  */,
-				  struct sec_desc_buf **sdbuf /* [out] [ref] */)
-{
-	struct lsa_QuerySecurity r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.sec_info = sec_info;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_QuerySecurity, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_QUERYSECURITY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_QuerySecurity, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*sdbuf = *r.out.sdbuf;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_SetSecObj(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      struct policy_handle *handle /* [in] [ref] */,
-			      uint32_t sec_info /* [in]  */,
-			      struct sec_desc_buf *sdbuf /* [in] [ref] */)
-{
-	struct lsa_SetSecObj r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.sec_info = sec_info;
-	r.in.sdbuf = sdbuf;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_SetSecObj, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_SETSECOBJ,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_SetSecObj, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_ChangePassword(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx)
-{
-	struct lsa_ChangePassword r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_ChangePassword, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_CHANGEPASSWORD,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_ChangePassword, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_OpenPolicy(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       uint16_t *system_name /* [in] [unique] */,
-			       struct lsa_ObjectAttribute *attr /* [in] [ref] */,
-			       uint32_t access_mask /* [in]  */,
-			       struct policy_handle *handle /* [out] [ref] */)
-{
-	struct lsa_OpenPolicy r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.system_name = system_name;
-	r.in.attr = attr;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_OpenPolicy, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_OPENPOLICY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_OpenPolicy, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*handle = *r.out.handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_QueryInfoPolicy(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    struct policy_handle *handle /* [in] [ref] */,
-				    enum lsa_PolicyInfo level /* [in]  */,
-				    union lsa_PolicyInformation **info /* [out] [ref,switch_is(level)] */)
-{
-	struct lsa_QueryInfoPolicy r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.level = level;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_QueryInfoPolicy, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_QUERYINFOPOLICY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_QueryInfoPolicy, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_SetInfoPolicy(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  struct policy_handle *handle /* [in] [ref] */,
-				  enum lsa_PolicyInfo level /* [in]  */,
-				  union lsa_PolicyInformation *info /* [in] [ref,switch_is(level)] */)
-{
-	struct lsa_SetInfoPolicy r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.level = level;
-	r.in.info = info;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_SetInfoPolicy, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_SETINFOPOLICY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_SetInfoPolicy, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_ClearAuditLog(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx)
-{
-	struct lsa_ClearAuditLog r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_ClearAuditLog, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_CLEARAUDITLOG,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_ClearAuditLog, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_CreateAccount(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  struct policy_handle *handle /* [in] [ref] */,
-				  struct dom_sid2 *sid /* [in] [ref] */,
-				  uint32_t access_mask /* [in]  */,
-				  struct policy_handle *acct_handle /* [out] [ref] */)
-{
-	struct lsa_CreateAccount r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.sid = sid;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CreateAccount, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_CREATEACCOUNT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CreateAccount, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*acct_handle = *r.out.acct_handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_EnumAccounts(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *handle /* [in] [ref] */,
-				 uint32_t *resume_handle /* [in,out] [ref] */,
-				 struct lsa_SidArray *sids /* [out] [ref] */,
-				 uint32_t num_entries /* [in] [range(0,8192)] */)
-{
-	struct lsa_EnumAccounts r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.resume_handle = resume_handle;
-	r.in.num_entries = num_entries;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_EnumAccounts, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_ENUMACCOUNTS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_EnumAccounts, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*resume_handle = *r.out.resume_handle;
-	*sids = *r.out.sids;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_CreateTrustedDomain(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					struct policy_handle *handle /* [in] [ref] */,
-					struct lsa_DomainInfo *info /* [in] [ref] */,
-					uint32_t access_mask /* [in]  */,
-					struct policy_handle *trustdom_handle /* [out] [ref] */)
-{
-	struct lsa_CreateTrustedDomain r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.info = info;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CreateTrustedDomain, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_CREATETRUSTEDDOMAIN,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CreateTrustedDomain, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*trustdom_handle = *r.out.trustdom_handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_EnumTrustDom(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *handle /* [in] [ref] */,
-				 uint32_t *resume_handle /* [in,out] [ref] */,
-				 struct lsa_DomainList *domains /* [out] [ref] */,
-				 uint32_t max_size /* [in]  */)
-{
-	struct lsa_EnumTrustDom r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.resume_handle = resume_handle;
-	r.in.max_size = max_size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_EnumTrustDom, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_ENUMTRUSTDOM,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_EnumTrustDom, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*resume_handle = *r.out.resume_handle;
-	*domains = *r.out.domains;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_LookupNames(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				struct policy_handle *handle /* [in] [ref] */,
-				uint32_t num_names /* [in] [range(0,1000)] */,
-				struct lsa_String *names /* [in] [size_is(num_names)] */,
-				struct lsa_RefDomainList **domains /* [out] [ref] */,
-				struct lsa_TransSidArray *sids /* [in,out] [ref] */,
-				enum lsa_LookupNamesLevel level /* [in]  */,
-				uint32_t *count /* [in,out] [ref] */)
-{
-	struct lsa_LookupNames r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.num_names = num_names;
-	r.in.names = names;
-	r.in.sids = sids;
-	r.in.level = level;
-	r.in.count = count;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LookupNames, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_LOOKUPNAMES,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LookupNames, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*domains = *r.out.domains;
-	*sids = *r.out.sids;
-	*count = *r.out.count;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_LookupSids(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       struct policy_handle *handle /* [in] [ref] */,
-			       struct lsa_SidArray *sids /* [in] [ref] */,
-			       struct lsa_RefDomainList **domains /* [out] [ref] */,
-			       struct lsa_TransNameArray *names /* [in,out] [ref] */,
-			       uint16_t level /* [in]  */,
-			       uint32_t *count /* [in,out] [ref] */)
-{
-	struct lsa_LookupSids r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.sids = sids;
-	r.in.names = names;
-	r.in.level = level;
-	r.in.count = count;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LookupSids, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_LOOKUPSIDS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LookupSids, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*domains = *r.out.domains;
-	*names = *r.out.names;
-	*count = *r.out.count;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_CreateSecret(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *handle /* [in] [ref] */,
-				 struct lsa_String name /* [in]  */,
-				 uint32_t access_mask /* [in]  */,
-				 struct policy_handle *sec_handle /* [out] [ref] */)
-{
-	struct lsa_CreateSecret r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.name = name;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CreateSecret, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_CREATESECRET,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CreateSecret, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*sec_handle = *r.out.sec_handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_OpenAccount(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				struct policy_handle *handle /* [in] [ref] */,
-				struct dom_sid2 *sid /* [in] [ref] */,
-				uint32_t access_mask /* [in]  */,
-				struct policy_handle *acct_handle /* [out] [ref] */)
-{
-	struct lsa_OpenAccount r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.sid = sid;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_OpenAccount, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_OPENACCOUNT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_OpenAccount, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*acct_handle = *r.out.acct_handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_EnumPrivsAccount(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     struct policy_handle *handle /* [in] [ref] */,
-				     struct lsa_PrivilegeSet **privs /* [out] [ref] */)
-{
-	struct lsa_EnumPrivsAccount r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_EnumPrivsAccount, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_ENUMPRIVSACCOUNT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_EnumPrivsAccount, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*privs = *r.out.privs;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_AddPrivilegesToAccount(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   struct policy_handle *handle /* [in] [ref] */,
-					   struct lsa_PrivilegeSet *privs /* [in] [ref] */)
-{
-	struct lsa_AddPrivilegesToAccount r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.privs = privs;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_AddPrivilegesToAccount, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_ADDPRIVILEGESTOACCOUNT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_AddPrivilegesToAccount, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_RemovePrivilegesFromAccount(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx,
-						struct policy_handle *handle /* [in] [ref] */,
-						uint8_t remove_all /* [in]  */,
-						struct lsa_PrivilegeSet *privs /* [in] [unique] */)
-{
-	struct lsa_RemovePrivilegesFromAccount r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.remove_all = remove_all;
-	r.in.privs = privs;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_RemovePrivilegesFromAccount, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_REMOVEPRIVILEGESFROMACCOUNT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_RemovePrivilegesFromAccount, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_GetQuotasForAccount(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx)
-{
-	struct lsa_GetQuotasForAccount r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_GetQuotasForAccount, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_GETQUOTASFORACCOUNT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_GetQuotasForAccount, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_SetQuotasForAccount(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx)
-{
-	struct lsa_SetQuotasForAccount r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_SetQuotasForAccount, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_SETQUOTASFORACCOUNT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_SetQuotasForAccount, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_GetSystemAccessAccount(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   struct policy_handle *handle /* [in] [ref] */,
-					   uint32_t *access_mask /* [out] [ref] */)
-{
-	struct lsa_GetSystemAccessAccount r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_GetSystemAccessAccount, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_GETSYSTEMACCESSACCOUNT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_GetSystemAccessAccount, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*access_mask = *r.out.access_mask;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_SetSystemAccessAccount(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   struct policy_handle *handle /* [in] [ref] */,
-					   uint32_t access_mask /* [in]  */)
-{
-	struct lsa_SetSystemAccessAccount r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_SetSystemAccessAccount, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_SETSYSTEMACCESSACCOUNT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_SetSystemAccessAccount, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_OpenTrustedDomain(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *handle /* [in] [ref] */,
-				      struct dom_sid2 *sid /* [in] [ref] */,
-				      uint32_t access_mask /* [in]  */,
-				      struct policy_handle *trustdom_handle /* [out] [ref] */)
-{
-	struct lsa_OpenTrustedDomain r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.sid = sid;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_OpenTrustedDomain, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_OPENTRUSTEDDOMAIN,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_OpenTrustedDomain, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*trustdom_handle = *r.out.trustdom_handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_QueryTrustedDomainInfo(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   struct policy_handle *trustdom_handle /* [in] [ref] */,
-					   enum lsa_TrustDomInfoEnum level /* [in]  */,
-					   union lsa_TrustedDomainInfo **info /* [out] [ref,switch_is(level)] */)
-{
-	struct lsa_QueryTrustedDomainInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.trustdom_handle = trustdom_handle;
-	r.in.level = level;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_QueryTrustedDomainInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_QUERYTRUSTEDDOMAININFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_QueryTrustedDomainInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_SetInformationTrustedDomain(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx)
-{
-	struct lsa_SetInformationTrustedDomain r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_SetInformationTrustedDomain, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_SETINFORMATIONTRUSTEDDOMAIN,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_SetInformationTrustedDomain, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_OpenSecret(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       struct policy_handle *handle /* [in] [ref] */,
-			       struct lsa_String name /* [in]  */,
-			       uint32_t access_mask /* [in]  */,
-			       struct policy_handle *sec_handle /* [out] [ref] */)
-{
-	struct lsa_OpenSecret r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.name = name;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_OpenSecret, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_OPENSECRET,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_OpenSecret, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*sec_handle = *r.out.sec_handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_SetSecret(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      struct policy_handle *sec_handle /* [in] [ref] */,
-			      struct lsa_DATA_BUF *new_val /* [in] [unique] */,
-			      struct lsa_DATA_BUF *old_val /* [in] [unique] */)
-{
-	struct lsa_SetSecret r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.sec_handle = sec_handle;
-	r.in.new_val = new_val;
-	r.in.old_val = old_val;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_SetSecret, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_SETSECRET,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_SetSecret, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_QuerySecret(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				struct policy_handle *sec_handle /* [in] [ref] */,
-				struct lsa_DATA_BUF_PTR *new_val /* [in,out] [unique] */,
-				NTTIME *new_mtime /* [in,out] [unique] */,
-				struct lsa_DATA_BUF_PTR *old_val /* [in,out] [unique] */,
-				NTTIME *old_mtime /* [in,out] [unique] */)
-{
-	struct lsa_QuerySecret r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.sec_handle = sec_handle;
-	r.in.new_val = new_val;
-	r.in.new_mtime = new_mtime;
-	r.in.old_val = old_val;
-	r.in.old_mtime = old_mtime;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_QuerySecret, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_QUERYSECRET,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_QuerySecret, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	if (new_val && r.out.new_val) {
-		*new_val = *r.out.new_val;
-	}
-	if (new_mtime && r.out.new_mtime) {
-		*new_mtime = *r.out.new_mtime;
-	}
-	if (old_val && r.out.old_val) {
-		*old_val = *r.out.old_val;
-	}
-	if (old_mtime && r.out.old_mtime) {
-		*old_mtime = *r.out.old_mtime;
-	}
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_LookupPrivValue(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    struct policy_handle *handle /* [in] [ref] */,
-				    struct lsa_String *name /* [in] [ref] */,
-				    struct lsa_LUID *luid /* [out] [ref] */)
-{
-	struct lsa_LookupPrivValue r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.name = name;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LookupPrivValue, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_LOOKUPPRIVVALUE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LookupPrivValue, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*luid = *r.out.luid;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_LookupPrivName(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   struct policy_handle *handle /* [in] [ref] */,
-				   struct lsa_LUID *luid /* [in] [ref] */,
-				   struct lsa_StringLarge **name /* [out] [ref] */)
-{
-	struct lsa_LookupPrivName r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.luid = luid;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LookupPrivName, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_LOOKUPPRIVNAME,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LookupPrivName, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*name = *r.out.name;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_LookupPrivDisplayName(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  struct policy_handle *handle /* [in] [ref] */,
-					  struct lsa_String *name /* [in] [ref] */,
-					  uint16_t language_id /* [in]  */,
-					  uint16_t language_id_sys /* [in]  */,
-					  struct lsa_StringLarge **disp_name /* [out] [ref] */,
-					  uint16_t *returned_language_id /* [out] [ref] */)
-{
-	struct lsa_LookupPrivDisplayName r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.name = name;
-	r.in.language_id = language_id;
-	r.in.language_id_sys = language_id_sys;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LookupPrivDisplayName, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_LOOKUPPRIVDISPLAYNAME,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LookupPrivDisplayName, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*disp_name = *r.out.disp_name;
-	*returned_language_id = *r.out.returned_language_id;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_DeleteObject(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *handle /* [in,out] [ref] */)
-{
-	struct lsa_DeleteObject r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_DeleteObject, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_DELETEOBJECT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_DeleteObject, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*handle = *r.out.handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_EnumAccountsWithUserRight(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      struct policy_handle *handle /* [in] [ref] */,
-					      struct lsa_String *name /* [in] [unique] */,
-					      struct lsa_SidArray *sids /* [out] [ref] */)
-{
-	struct lsa_EnumAccountsWithUserRight r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.name = name;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_EnumAccountsWithUserRight, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_ENUMACCOUNTSWITHUSERRIGHT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_EnumAccountsWithUserRight, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*sids = *r.out.sids;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_EnumAccountRights(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *handle /* [in] [ref] */,
-				      struct dom_sid2 *sid /* [in] [ref] */,
-				      struct lsa_RightSet *rights /* [out] [ref] */)
-{
-	struct lsa_EnumAccountRights r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.sid = sid;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_EnumAccountRights, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_ENUMACCOUNTRIGHTS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_EnumAccountRights, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*rights = *r.out.rights;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_AddAccountRights(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     struct policy_handle *handle /* [in] [ref] */,
-				     struct dom_sid2 *sid /* [in] [ref] */,
-				     struct lsa_RightSet *rights /* [in] [ref] */)
-{
-	struct lsa_AddAccountRights r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.sid = sid;
-	r.in.rights = rights;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_AddAccountRights, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_ADDACCOUNTRIGHTS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_AddAccountRights, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_RemoveAccountRights(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					struct policy_handle *handle /* [in] [ref] */,
-					struct dom_sid2 *sid /* [in] [ref] */,
-					uint8_t remove_all /* [in]  */,
-					struct lsa_RightSet *rights /* [in] [ref] */)
-{
-	struct lsa_RemoveAccountRights r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.sid = sid;
-	r.in.remove_all = remove_all;
-	r.in.rights = rights;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_RemoveAccountRights, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_REMOVEACCOUNTRIGHTS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_RemoveAccountRights, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_QueryTrustedDomainInfoBySid(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx,
-						struct policy_handle *handle /* [in] [ref] */,
-						struct dom_sid2 *dom_sid /* [in] [ref] */,
-						enum lsa_TrustDomInfoEnum level /* [in]  */,
-						union lsa_TrustedDomainInfo **info /* [out] [ref,switch_is(level)] */)
-{
-	struct lsa_QueryTrustedDomainInfoBySid r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.dom_sid = dom_sid;
-	r.in.level = level;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_QueryTrustedDomainInfoBySid, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_QUERYTRUSTEDDOMAININFOBYSID,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_QueryTrustedDomainInfoBySid, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_SetTrustedDomainInfo(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx)
-{
-	struct lsa_SetTrustedDomainInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_SetTrustedDomainInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_SETTRUSTEDDOMAININFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_SetTrustedDomainInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_DeleteTrustedDomain(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					struct policy_handle *handle /* [in] [ref] */,
-					struct dom_sid2 *dom_sid /* [in] [ref] */)
-{
-	struct lsa_DeleteTrustedDomain r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.dom_sid = dom_sid;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_DeleteTrustedDomain, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_DELETETRUSTEDDOMAIN,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_DeleteTrustedDomain, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_StorePrivateData(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx)
-{
-	struct lsa_StorePrivateData r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_StorePrivateData, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_STOREPRIVATEDATA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_StorePrivateData, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_RetrievePrivateData(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx)
-{
-	struct lsa_RetrievePrivateData r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_RetrievePrivateData, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_RETRIEVEPRIVATEDATA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_RetrievePrivateData, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_OpenPolicy2(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				const char *system_name /* [in] [unique,charset(UTF16)] */,
-				struct lsa_ObjectAttribute *attr /* [in] [ref] */,
-				uint32_t access_mask /* [in]  */,
-				struct policy_handle *handle /* [out] [ref] */)
-{
-	struct lsa_OpenPolicy2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.system_name = system_name;
-	r.in.attr = attr;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_OpenPolicy2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_OPENPOLICY2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_OpenPolicy2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*handle = *r.out.handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_GetUserName(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				const char *system_name /* [in] [unique,charset(UTF16)] */,
-				struct lsa_String **account_name /* [in,out] [ref] */,
-				struct lsa_String **authority_name /* [in,out] [unique] */)
-{
-	struct lsa_GetUserName r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.system_name = system_name;
-	r.in.account_name = account_name;
-	r.in.authority_name = authority_name;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_GetUserName, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_GETUSERNAME,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_GetUserName, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*account_name = *r.out.account_name;
-	if (authority_name && r.out.authority_name) {
-		*authority_name = *r.out.authority_name;
-	}
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_QueryInfoPolicy2(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     struct policy_handle *handle /* [in] [ref] */,
-				     enum lsa_PolicyInfo level /* [in]  */,
-				     union lsa_PolicyInformation **info /* [out] [ref,switch_is(level)] */)
-{
-	struct lsa_QueryInfoPolicy2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.level = level;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_QueryInfoPolicy2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_QUERYINFOPOLICY2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_QueryInfoPolicy2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_SetInfoPolicy2(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   struct policy_handle *handle /* [in] [ref] */,
-				   enum lsa_PolicyInfo level /* [in]  */,
-				   union lsa_PolicyInformation *info /* [in] [ref,switch_is(level)] */)
-{
-	struct lsa_SetInfoPolicy2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.level = level;
-	r.in.info = info;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_SetInfoPolicy2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_SETINFOPOLICY2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_SetInfoPolicy2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_QueryTrustedDomainInfoByName(struct rpc_pipe_client *cli,
-						 TALLOC_CTX *mem_ctx,
-						 struct policy_handle *handle /* [in] [ref] */,
-						 struct lsa_String *trusted_domain /* [in] [ref] */,
-						 enum lsa_TrustDomInfoEnum level /* [in]  */,
-						 union lsa_TrustedDomainInfo **info /* [out] [ref,switch_is(level)] */)
-{
-	struct lsa_QueryTrustedDomainInfoByName r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.trusted_domain = trusted_domain;
-	r.in.level = level;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_QueryTrustedDomainInfoByName, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_QUERYTRUSTEDDOMAININFOBYNAME,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_QueryTrustedDomainInfoByName, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_SetTrustedDomainInfoByName(struct rpc_pipe_client *cli,
-					       TALLOC_CTX *mem_ctx,
-					       struct policy_handle *handle /* [in] [ref] */,
-					       struct lsa_String trusted_domain /* [in]  */,
-					       enum lsa_TrustDomInfoEnum level /* [in]  */,
-					       union lsa_TrustedDomainInfo *info /* [in] [unique,switch_is(level)] */)
-{
-	struct lsa_SetTrustedDomainInfoByName r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.trusted_domain = trusted_domain;
-	r.in.level = level;
-	r.in.info = info;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_SetTrustedDomainInfoByName, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_SETTRUSTEDDOMAININFOBYNAME,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_SetTrustedDomainInfoByName, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_EnumTrustedDomainsEx(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 struct policy_handle *handle /* [in] [ref] */,
-					 uint32_t *resume_handle /* [in,out] [ref] */,
-					 struct lsa_DomainListEx *domains /* [out] [ref] */,
-					 uint32_t max_size /* [in]  */)
-{
-	struct lsa_EnumTrustedDomainsEx r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.resume_handle = resume_handle;
-	r.in.max_size = max_size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_EnumTrustedDomainsEx, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_ENUMTRUSTEDDOMAINSEX,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_EnumTrustedDomainsEx, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*resume_handle = *r.out.resume_handle;
-	*domains = *r.out.domains;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_CreateTrustedDomainEx(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx)
-{
-	struct lsa_CreateTrustedDomainEx r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CreateTrustedDomainEx, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_CREATETRUSTEDDOMAINEX,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CreateTrustedDomainEx, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_CloseTrustedDomainEx(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 struct policy_handle *handle /* [in,out] [ref] */)
-{
-	struct lsa_CloseTrustedDomainEx r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CloseTrustedDomainEx, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_CLOSETRUSTEDDOMAINEX,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CloseTrustedDomainEx, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*handle = *r.out.handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_QueryDomainInformationPolicy(struct rpc_pipe_client *cli,
-						 TALLOC_CTX *mem_ctx,
-						 struct policy_handle *handle /* [in] [ref] */,
-						 uint16_t level /* [in]  */,
-						 union lsa_DomainInformationPolicy **info /* [out] [ref,switch_is(level)] */)
-{
-	struct lsa_QueryDomainInformationPolicy r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.level = level;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_QueryDomainInformationPolicy, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_QUERYDOMAININFORMATIONPOLICY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_QueryDomainInformationPolicy, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_SetDomainInformationPolicy(struct rpc_pipe_client *cli,
-					       TALLOC_CTX *mem_ctx,
-					       struct policy_handle *handle /* [in] [ref] */,
-					       uint16_t level /* [in]  */,
-					       union lsa_DomainInformationPolicy *info /* [in] [unique,switch_is(level)] */)
-{
-	struct lsa_SetDomainInformationPolicy r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.level = level;
-	r.in.info = info;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_SetDomainInformationPolicy, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_SETDOMAININFORMATIONPOLICY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_SetDomainInformationPolicy, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_OpenTrustedDomainByName(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    struct policy_handle *handle /* [in] [ref] */,
-					    struct lsa_String name /* [in]  */,
-					    uint32_t access_mask /* [in]  */,
-					    struct policy_handle *trustdom_handle /* [out] [ref] */)
-{
-	struct lsa_OpenTrustedDomainByName r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.name = name;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_OpenTrustedDomainByName, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_OPENTRUSTEDDOMAINBYNAME,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_OpenTrustedDomainByName, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*trustdom_handle = *r.out.trustdom_handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_TestCall(struct rpc_pipe_client *cli,
-			     TALLOC_CTX *mem_ctx)
-{
-	struct lsa_TestCall r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_TestCall, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_TESTCALL,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_TestCall, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_LookupSids2(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				struct policy_handle *handle /* [in] [ref] */,
-				struct lsa_SidArray *sids /* [in] [ref] */,
-				struct lsa_RefDomainList **domains /* [out] [ref] */,
-				struct lsa_TransNameArray2 *names /* [in,out] [ref] */,
-				uint16_t level /* [in]  */,
-				uint32_t *count /* [in,out] [ref] */,
-				uint32_t unknown1 /* [in]  */,
-				uint32_t unknown2 /* [in]  */)
-{
-	struct lsa_LookupSids2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.sids = sids;
-	r.in.names = names;
-	r.in.level = level;
-	r.in.count = count;
-	r.in.unknown1 = unknown1;
-	r.in.unknown2 = unknown2;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LookupSids2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_LOOKUPSIDS2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LookupSids2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*domains = *r.out.domains;
-	*names = *r.out.names;
-	*count = *r.out.count;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_LookupNames2(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *handle /* [in] [ref] */,
-				 uint32_t num_names /* [in] [range(0,1000)] */,
-				 struct lsa_String *names /* [in] [size_is(num_names)] */,
-				 struct lsa_RefDomainList **domains /* [out] [ref] */,
-				 struct lsa_TransSidArray2 *sids /* [in,out] [ref] */,
-				 enum lsa_LookupNamesLevel level /* [in]  */,
-				 uint32_t *count /* [in,out] [ref] */,
-				 uint32_t unknown1 /* [in]  */,
-				 uint32_t unknown2 /* [in]  */)
-{
-	struct lsa_LookupNames2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.num_names = num_names;
-	r.in.names = names;
-	r.in.sids = sids;
-	r.in.level = level;
-	r.in.count = count;
-	r.in.unknown1 = unknown1;
-	r.in.unknown2 = unknown2;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LookupNames2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_LOOKUPNAMES2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LookupNames2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*domains = *r.out.domains;
-	*sids = *r.out.sids;
-	*count = *r.out.count;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_CreateTrustedDomainEx2(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx)
-{
-	struct lsa_CreateTrustedDomainEx2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CreateTrustedDomainEx2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_CREATETRUSTEDDOMAINEX2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CreateTrustedDomainEx2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_CREDRWRITE(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx)
-{
-	struct lsa_CREDRWRITE r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CREDRWRITE, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_CREDRWRITE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CREDRWRITE, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_CREDRREAD(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx)
-{
-	struct lsa_CREDRREAD r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CREDRREAD, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_CREDRREAD,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CREDRREAD, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_CREDRENUMERATE(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx)
-{
-	struct lsa_CREDRENUMERATE r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CREDRENUMERATE, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_CREDRENUMERATE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CREDRENUMERATE, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_CREDRWRITEDOMAINCREDENTIALS(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx)
-{
-	struct lsa_CREDRWRITEDOMAINCREDENTIALS r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CREDRWRITEDOMAINCREDENTIALS, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_CREDRWRITEDOMAINCREDENTIALS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CREDRWRITEDOMAINCREDENTIALS, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_CREDRREADDOMAINCREDENTIALS(struct rpc_pipe_client *cli,
-					       TALLOC_CTX *mem_ctx)
-{
-	struct lsa_CREDRREADDOMAINCREDENTIALS r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CREDRREADDOMAINCREDENTIALS, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_CREDRREADDOMAINCREDENTIALS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CREDRREADDOMAINCREDENTIALS, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_CREDRDELETE(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx)
-{
-	struct lsa_CREDRDELETE r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CREDRDELETE, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_CREDRDELETE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CREDRDELETE, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_CREDRGETTARGETINFO(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx)
-{
-	struct lsa_CREDRGETTARGETINFO r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CREDRGETTARGETINFO, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_CREDRGETTARGETINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CREDRGETTARGETINFO, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_CREDRPROFILELOADED(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx)
-{
-	struct lsa_CREDRPROFILELOADED r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CREDRPROFILELOADED, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_CREDRPROFILELOADED,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CREDRPROFILELOADED, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_LookupNames3(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *handle /* [in] [ref] */,
-				 uint32_t num_names /* [in] [range(0,1000)] */,
-				 struct lsa_String *names /* [in] [size_is(num_names)] */,
-				 struct lsa_RefDomainList **domains /* [out] [ref] */,
-				 struct lsa_TransSidArray3 *sids /* [in,out] [ref] */,
-				 enum lsa_LookupNamesLevel level /* [in]  */,
-				 uint32_t *count /* [in,out] [ref] */,
-				 uint32_t unknown1 /* [in]  */,
-				 uint32_t unknown2 /* [in]  */)
-{
-	struct lsa_LookupNames3 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.num_names = num_names;
-	r.in.names = names;
-	r.in.sids = sids;
-	r.in.level = level;
-	r.in.count = count;
-	r.in.unknown1 = unknown1;
-	r.in.unknown2 = unknown2;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LookupNames3, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_LOOKUPNAMES3,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LookupNames3, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*domains = *r.out.domains;
-	*sids = *r.out.sids;
-	*count = *r.out.count;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_CREDRGETSESSIONTYPES(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx)
-{
-	struct lsa_CREDRGETSESSIONTYPES r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CREDRGETSESSIONTYPES, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_CREDRGETSESSIONTYPES,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CREDRGETSESSIONTYPES, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_LSARREGISTERAUDITEVENT(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx)
-{
-	struct lsa_LSARREGISTERAUDITEVENT r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LSARREGISTERAUDITEVENT, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_LSARREGISTERAUDITEVENT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LSARREGISTERAUDITEVENT, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_LSARGENAUDITEVENT(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx)
-{
-	struct lsa_LSARGENAUDITEVENT r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LSARGENAUDITEVENT, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_LSARGENAUDITEVENT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LSARGENAUDITEVENT, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_LSARUNREGISTERAUDITEVENT(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx)
-{
-	struct lsa_LSARUNREGISTERAUDITEVENT r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LSARUNREGISTERAUDITEVENT, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_LSARUNREGISTERAUDITEVENT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LSARUNREGISTERAUDITEVENT, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_lsaRQueryForestTrustInformation(struct rpc_pipe_client *cli,
-						    TALLOC_CTX *mem_ctx,
-						    struct policy_handle *handle /* [in] [ref] */,
-						    struct lsa_String *trusted_domain_name /* [in] [ref] */,
-						    uint16_t unknown /* [in]  */,
-						    struct lsa_ForestTrustInformation **forest_trust_info /* [out] [ref] */)
-{
-	struct lsa_lsaRQueryForestTrustInformation r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.trusted_domain_name = trusted_domain_name;
-	r.in.unknown = unknown;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_lsaRQueryForestTrustInformation, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_LSARQUERYFORESTTRUSTINFORMATION,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_lsaRQueryForestTrustInformation, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*forest_trust_info = *r.out.forest_trust_info;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_LSARSETFORESTTRUSTINFORMATION(struct rpc_pipe_client *cli,
-						  TALLOC_CTX *mem_ctx)
-{
-	struct lsa_LSARSETFORESTTRUSTINFORMATION r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LSARSETFORESTTRUSTINFORMATION, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_LSARSETFORESTTRUSTINFORMATION,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LSARSETFORESTTRUSTINFORMATION, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_CREDRRENAME(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx)
-{
-	struct lsa_CREDRRENAME r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CREDRRENAME, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_CREDRRENAME,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CREDRRENAME, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_LookupSids3(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				struct lsa_SidArray *sids /* [in] [ref] */,
-				struct lsa_RefDomainList **domains /* [out] [ref] */,
-				struct lsa_TransNameArray2 *names /* [in,out] [ref] */,
-				uint16_t level /* [in]  */,
-				uint32_t *count /* [in,out] [ref] */,
-				uint32_t unknown1 /* [in]  */,
-				uint32_t unknown2 /* [in]  */)
-{
-	struct lsa_LookupSids3 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.sids = sids;
-	r.in.names = names;
-	r.in.level = level;
-	r.in.count = count;
-	r.in.unknown1 = unknown1;
-	r.in.unknown2 = unknown2;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LookupSids3, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_LOOKUPSIDS3,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LookupSids3, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*domains = *r.out.domains;
-	*names = *r.out.names;
-	*count = *r.out.count;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_LookupNames4(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 uint32_t num_names /* [in] [range(0,1000)] */,
-				 struct lsa_String *names /* [in] [size_is(num_names)] */,
-				 struct lsa_RefDomainList **domains /* [out] [ref] */,
-				 struct lsa_TransSidArray3 *sids /* [in,out] [ref] */,
-				 enum lsa_LookupNamesLevel level /* [in]  */,
-				 uint32_t *count /* [in,out] [ref] */,
-				 uint32_t unknown1 /* [in]  */,
-				 uint32_t unknown2 /* [in]  */)
-{
-	struct lsa_LookupNames4 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.num_names = num_names;
-	r.in.names = names;
-	r.in.sids = sids;
-	r.in.level = level;
-	r.in.count = count;
-	r.in.unknown1 = unknown1;
-	r.in.unknown2 = unknown2;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LookupNames4, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_LOOKUPNAMES4,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LookupNames4, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*domains = *r.out.domains;
-	*sids = *r.out.sids;
-	*count = *r.out.count;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_LSAROPENPOLICYSCE(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx)
-{
-	struct lsa_LSAROPENPOLICYSCE r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LSAROPENPOLICYSCE, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_LSAROPENPOLICYSCE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LSAROPENPOLICYSCE, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_LSARADTREGISTERSECURITYEVENTSOURCE(struct rpc_pipe_client *cli,
-						       TALLOC_CTX *mem_ctx)
-{
-	struct lsa_LSARADTREGISTERSECURITYEVENTSOURCE r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LSARADTREGISTERSECURITYEVENTSOURCE, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_LSARADTREGISTERSECURITYEVENTSOURCE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LSARADTREGISTERSECURITYEVENTSOURCE, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE(struct rpc_pipe_client *cli,
-							 TALLOC_CTX *mem_ctx)
-{
-	struct lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_LSARADTUNREGISTERSECURITYEVENTSOURCE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_lsa_LSARADTREPORTSECURITYEVENT(struct rpc_pipe_client *cli,
-					       TALLOC_CTX *mem_ctx)
-{
-	struct lsa_LSARADTREPORTSECURITYEVENT r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LSARADTREPORTSECURITYEVENT, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_LSARPC,
-				&ndr_table_lsarpc,
-				NDR_LSA_LSARADTREPORTSECURITYEVENT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LSARADTREPORTSECURITYEVENT, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_lsa.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_lsa.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_lsa.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,370 +0,0 @@
-#include "librpc/gen_ndr/ndr_lsa.h"
-#ifndef __CLI_LSARPC__
-#define __CLI_LSARPC__
-NTSTATUS rpccli_lsa_Close(struct rpc_pipe_client *cli,
-			  TALLOC_CTX *mem_ctx,
-			  struct policy_handle *handle /* [in,out] [ref] */);
-NTSTATUS rpccli_lsa_Delete(struct rpc_pipe_client *cli,
-			   TALLOC_CTX *mem_ctx,
-			   struct policy_handle *handle /* [in] [ref] */);
-NTSTATUS rpccli_lsa_EnumPrivs(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      struct policy_handle *handle /* [in] [ref] */,
-			      uint32_t *resume_handle /* [in,out] [ref] */,
-			      struct lsa_PrivArray *privs /* [out] [ref] */,
-			      uint32_t max_count /* [in]  */);
-NTSTATUS rpccli_lsa_QuerySecurity(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  struct policy_handle *handle /* [in] [ref] */,
-				  uint32_t sec_info /* [in]  */,
-				  struct sec_desc_buf **sdbuf /* [out] [ref] */);
-NTSTATUS rpccli_lsa_SetSecObj(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      struct policy_handle *handle /* [in] [ref] */,
-			      uint32_t sec_info /* [in]  */,
-			      struct sec_desc_buf *sdbuf /* [in] [ref] */);
-NTSTATUS rpccli_lsa_ChangePassword(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_OpenPolicy(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       uint16_t *system_name /* [in] [unique] */,
-			       struct lsa_ObjectAttribute *attr /* [in] [ref] */,
-			       uint32_t access_mask /* [in]  */,
-			       struct policy_handle *handle /* [out] [ref] */);
-NTSTATUS rpccli_lsa_QueryInfoPolicy(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    struct policy_handle *handle /* [in] [ref] */,
-				    enum lsa_PolicyInfo level /* [in]  */,
-				    union lsa_PolicyInformation **info /* [out] [ref,switch_is(level)] */);
-NTSTATUS rpccli_lsa_SetInfoPolicy(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  struct policy_handle *handle /* [in] [ref] */,
-				  enum lsa_PolicyInfo level /* [in]  */,
-				  union lsa_PolicyInformation *info /* [in] [ref,switch_is(level)] */);
-NTSTATUS rpccli_lsa_ClearAuditLog(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_CreateAccount(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  struct policy_handle *handle /* [in] [ref] */,
-				  struct dom_sid2 *sid /* [in] [ref] */,
-				  uint32_t access_mask /* [in]  */,
-				  struct policy_handle *acct_handle /* [out] [ref] */);
-NTSTATUS rpccli_lsa_EnumAccounts(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *handle /* [in] [ref] */,
-				 uint32_t *resume_handle /* [in,out] [ref] */,
-				 struct lsa_SidArray *sids /* [out] [ref] */,
-				 uint32_t num_entries /* [in] [range(0,8192)] */);
-NTSTATUS rpccli_lsa_CreateTrustedDomain(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					struct policy_handle *handle /* [in] [ref] */,
-					struct lsa_DomainInfo *info /* [in] [ref] */,
-					uint32_t access_mask /* [in]  */,
-					struct policy_handle *trustdom_handle /* [out] [ref] */);
-NTSTATUS rpccli_lsa_EnumTrustDom(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *handle /* [in] [ref] */,
-				 uint32_t *resume_handle /* [in,out] [ref] */,
-				 struct lsa_DomainList *domains /* [out] [ref] */,
-				 uint32_t max_size /* [in]  */);
-NTSTATUS rpccli_lsa_LookupNames(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				struct policy_handle *handle /* [in] [ref] */,
-				uint32_t num_names /* [in] [range(0,1000)] */,
-				struct lsa_String *names /* [in] [size_is(num_names)] */,
-				struct lsa_RefDomainList **domains /* [out] [ref] */,
-				struct lsa_TransSidArray *sids /* [in,out] [ref] */,
-				enum lsa_LookupNamesLevel level /* [in]  */,
-				uint32_t *count /* [in,out] [ref] */);
-NTSTATUS rpccli_lsa_LookupSids(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       struct policy_handle *handle /* [in] [ref] */,
-			       struct lsa_SidArray *sids /* [in] [ref] */,
-			       struct lsa_RefDomainList **domains /* [out] [ref] */,
-			       struct lsa_TransNameArray *names /* [in,out] [ref] */,
-			       uint16_t level /* [in]  */,
-			       uint32_t *count /* [in,out] [ref] */);
-NTSTATUS rpccli_lsa_CreateSecret(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *handle /* [in] [ref] */,
-				 struct lsa_String name /* [in]  */,
-				 uint32_t access_mask /* [in]  */,
-				 struct policy_handle *sec_handle /* [out] [ref] */);
-NTSTATUS rpccli_lsa_OpenAccount(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				struct policy_handle *handle /* [in] [ref] */,
-				struct dom_sid2 *sid /* [in] [ref] */,
-				uint32_t access_mask /* [in]  */,
-				struct policy_handle *acct_handle /* [out] [ref] */);
-NTSTATUS rpccli_lsa_EnumPrivsAccount(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     struct policy_handle *handle /* [in] [ref] */,
-				     struct lsa_PrivilegeSet **privs /* [out] [ref] */);
-NTSTATUS rpccli_lsa_AddPrivilegesToAccount(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   struct policy_handle *handle /* [in] [ref] */,
-					   struct lsa_PrivilegeSet *privs /* [in] [ref] */);
-NTSTATUS rpccli_lsa_RemovePrivilegesFromAccount(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx,
-						struct policy_handle *handle /* [in] [ref] */,
-						uint8_t remove_all /* [in]  */,
-						struct lsa_PrivilegeSet *privs /* [in] [unique] */);
-NTSTATUS rpccli_lsa_GetQuotasForAccount(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_SetQuotasForAccount(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_GetSystemAccessAccount(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   struct policy_handle *handle /* [in] [ref] */,
-					   uint32_t *access_mask /* [out] [ref] */);
-NTSTATUS rpccli_lsa_SetSystemAccessAccount(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   struct policy_handle *handle /* [in] [ref] */,
-					   uint32_t access_mask /* [in]  */);
-NTSTATUS rpccli_lsa_OpenTrustedDomain(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *handle /* [in] [ref] */,
-				      struct dom_sid2 *sid /* [in] [ref] */,
-				      uint32_t access_mask /* [in]  */,
-				      struct policy_handle *trustdom_handle /* [out] [ref] */);
-NTSTATUS rpccli_lsa_QueryTrustedDomainInfo(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   struct policy_handle *trustdom_handle /* [in] [ref] */,
-					   enum lsa_TrustDomInfoEnum level /* [in]  */,
-					   union lsa_TrustedDomainInfo **info /* [out] [ref,switch_is(level)] */);
-NTSTATUS rpccli_lsa_SetInformationTrustedDomain(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_OpenSecret(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       struct policy_handle *handle /* [in] [ref] */,
-			       struct lsa_String name /* [in]  */,
-			       uint32_t access_mask /* [in]  */,
-			       struct policy_handle *sec_handle /* [out] [ref] */);
-NTSTATUS rpccli_lsa_SetSecret(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      struct policy_handle *sec_handle /* [in] [ref] */,
-			      struct lsa_DATA_BUF *new_val /* [in] [unique] */,
-			      struct lsa_DATA_BUF *old_val /* [in] [unique] */);
-NTSTATUS rpccli_lsa_QuerySecret(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				struct policy_handle *sec_handle /* [in] [ref] */,
-				struct lsa_DATA_BUF_PTR *new_val /* [in,out] [unique] */,
-				NTTIME *new_mtime /* [in,out] [unique] */,
-				struct lsa_DATA_BUF_PTR *old_val /* [in,out] [unique] */,
-				NTTIME *old_mtime /* [in,out] [unique] */);
-NTSTATUS rpccli_lsa_LookupPrivValue(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    struct policy_handle *handle /* [in] [ref] */,
-				    struct lsa_String *name /* [in] [ref] */,
-				    struct lsa_LUID *luid /* [out] [ref] */);
-NTSTATUS rpccli_lsa_LookupPrivName(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   struct policy_handle *handle /* [in] [ref] */,
-				   struct lsa_LUID *luid /* [in] [ref] */,
-				   struct lsa_StringLarge **name /* [out] [ref] */);
-NTSTATUS rpccli_lsa_LookupPrivDisplayName(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  struct policy_handle *handle /* [in] [ref] */,
-					  struct lsa_String *name /* [in] [ref] */,
-					  uint16_t language_id /* [in]  */,
-					  uint16_t language_id_sys /* [in]  */,
-					  struct lsa_StringLarge **disp_name /* [out] [ref] */,
-					  uint16_t *returned_language_id /* [out] [ref] */);
-NTSTATUS rpccli_lsa_DeleteObject(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *handle /* [in,out] [ref] */);
-NTSTATUS rpccli_lsa_EnumAccountsWithUserRight(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      struct policy_handle *handle /* [in] [ref] */,
-					      struct lsa_String *name /* [in] [unique] */,
-					      struct lsa_SidArray *sids /* [out] [ref] */);
-NTSTATUS rpccli_lsa_EnumAccountRights(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *handle /* [in] [ref] */,
-				      struct dom_sid2 *sid /* [in] [ref] */,
-				      struct lsa_RightSet *rights /* [out] [ref] */);
-NTSTATUS rpccli_lsa_AddAccountRights(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     struct policy_handle *handle /* [in] [ref] */,
-				     struct dom_sid2 *sid /* [in] [ref] */,
-				     struct lsa_RightSet *rights /* [in] [ref] */);
-NTSTATUS rpccli_lsa_RemoveAccountRights(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					struct policy_handle *handle /* [in] [ref] */,
-					struct dom_sid2 *sid /* [in] [ref] */,
-					uint8_t remove_all /* [in]  */,
-					struct lsa_RightSet *rights /* [in] [ref] */);
-NTSTATUS rpccli_lsa_QueryTrustedDomainInfoBySid(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx,
-						struct policy_handle *handle /* [in] [ref] */,
-						struct dom_sid2 *dom_sid /* [in] [ref] */,
-						enum lsa_TrustDomInfoEnum level /* [in]  */,
-						union lsa_TrustedDomainInfo **info /* [out] [ref,switch_is(level)] */);
-NTSTATUS rpccli_lsa_SetTrustedDomainInfo(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_DeleteTrustedDomain(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					struct policy_handle *handle /* [in] [ref] */,
-					struct dom_sid2 *dom_sid /* [in] [ref] */);
-NTSTATUS rpccli_lsa_StorePrivateData(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_RetrievePrivateData(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_OpenPolicy2(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				const char *system_name /* [in] [unique,charset(UTF16)] */,
-				struct lsa_ObjectAttribute *attr /* [in] [ref] */,
-				uint32_t access_mask /* [in]  */,
-				struct policy_handle *handle /* [out] [ref] */);
-NTSTATUS rpccli_lsa_GetUserName(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				const char *system_name /* [in] [unique,charset(UTF16)] */,
-				struct lsa_String **account_name /* [in,out] [ref] */,
-				struct lsa_String **authority_name /* [in,out] [unique] */);
-NTSTATUS rpccli_lsa_QueryInfoPolicy2(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     struct policy_handle *handle /* [in] [ref] */,
-				     enum lsa_PolicyInfo level /* [in]  */,
-				     union lsa_PolicyInformation **info /* [out] [ref,switch_is(level)] */);
-NTSTATUS rpccli_lsa_SetInfoPolicy2(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   struct policy_handle *handle /* [in] [ref] */,
-				   enum lsa_PolicyInfo level /* [in]  */,
-				   union lsa_PolicyInformation *info /* [in] [ref,switch_is(level)] */);
-NTSTATUS rpccli_lsa_QueryTrustedDomainInfoByName(struct rpc_pipe_client *cli,
-						 TALLOC_CTX *mem_ctx,
-						 struct policy_handle *handle /* [in] [ref] */,
-						 struct lsa_String *trusted_domain /* [in] [ref] */,
-						 enum lsa_TrustDomInfoEnum level /* [in]  */,
-						 union lsa_TrustedDomainInfo **info /* [out] [ref,switch_is(level)] */);
-NTSTATUS rpccli_lsa_SetTrustedDomainInfoByName(struct rpc_pipe_client *cli,
-					       TALLOC_CTX *mem_ctx,
-					       struct policy_handle *handle /* [in] [ref] */,
-					       struct lsa_String trusted_domain /* [in]  */,
-					       enum lsa_TrustDomInfoEnum level /* [in]  */,
-					       union lsa_TrustedDomainInfo *info /* [in] [unique,switch_is(level)] */);
-NTSTATUS rpccli_lsa_EnumTrustedDomainsEx(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 struct policy_handle *handle /* [in] [ref] */,
-					 uint32_t *resume_handle /* [in,out] [ref] */,
-					 struct lsa_DomainListEx *domains /* [out] [ref] */,
-					 uint32_t max_size /* [in]  */);
-NTSTATUS rpccli_lsa_CreateTrustedDomainEx(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_CloseTrustedDomainEx(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 struct policy_handle *handle /* [in,out] [ref] */);
-NTSTATUS rpccli_lsa_QueryDomainInformationPolicy(struct rpc_pipe_client *cli,
-						 TALLOC_CTX *mem_ctx,
-						 struct policy_handle *handle /* [in] [ref] */,
-						 uint16_t level /* [in]  */,
-						 union lsa_DomainInformationPolicy **info /* [out] [ref,switch_is(level)] */);
-NTSTATUS rpccli_lsa_SetDomainInformationPolicy(struct rpc_pipe_client *cli,
-					       TALLOC_CTX *mem_ctx,
-					       struct policy_handle *handle /* [in] [ref] */,
-					       uint16_t level /* [in]  */,
-					       union lsa_DomainInformationPolicy *info /* [in] [unique,switch_is(level)] */);
-NTSTATUS rpccli_lsa_OpenTrustedDomainByName(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    struct policy_handle *handle /* [in] [ref] */,
-					    struct lsa_String name /* [in]  */,
-					    uint32_t access_mask /* [in]  */,
-					    struct policy_handle *trustdom_handle /* [out] [ref] */);
-NTSTATUS rpccli_lsa_TestCall(struct rpc_pipe_client *cli,
-			     TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_LookupSids2(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				struct policy_handle *handle /* [in] [ref] */,
-				struct lsa_SidArray *sids /* [in] [ref] */,
-				struct lsa_RefDomainList **domains /* [out] [ref] */,
-				struct lsa_TransNameArray2 *names /* [in,out] [ref] */,
-				uint16_t level /* [in]  */,
-				uint32_t *count /* [in,out] [ref] */,
-				uint32_t unknown1 /* [in]  */,
-				uint32_t unknown2 /* [in]  */);
-NTSTATUS rpccli_lsa_LookupNames2(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *handle /* [in] [ref] */,
-				 uint32_t num_names /* [in] [range(0,1000)] */,
-				 struct lsa_String *names /* [in] [size_is(num_names)] */,
-				 struct lsa_RefDomainList **domains /* [out] [ref] */,
-				 struct lsa_TransSidArray2 *sids /* [in,out] [ref] */,
-				 enum lsa_LookupNamesLevel level /* [in]  */,
-				 uint32_t *count /* [in,out] [ref] */,
-				 uint32_t unknown1 /* [in]  */,
-				 uint32_t unknown2 /* [in]  */);
-NTSTATUS rpccli_lsa_CreateTrustedDomainEx2(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_CREDRWRITE(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_CREDRREAD(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_CREDRENUMERATE(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_CREDRWRITEDOMAINCREDENTIALS(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_CREDRREADDOMAINCREDENTIALS(struct rpc_pipe_client *cli,
-					       TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_CREDRDELETE(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_CREDRGETTARGETINFO(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_CREDRPROFILELOADED(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_LookupNames3(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *handle /* [in] [ref] */,
-				 uint32_t num_names /* [in] [range(0,1000)] */,
-				 struct lsa_String *names /* [in] [size_is(num_names)] */,
-				 struct lsa_RefDomainList **domains /* [out] [ref] */,
-				 struct lsa_TransSidArray3 *sids /* [in,out] [ref] */,
-				 enum lsa_LookupNamesLevel level /* [in]  */,
-				 uint32_t *count /* [in,out] [ref] */,
-				 uint32_t unknown1 /* [in]  */,
-				 uint32_t unknown2 /* [in]  */);
-NTSTATUS rpccli_lsa_CREDRGETSESSIONTYPES(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_LSARREGISTERAUDITEVENT(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_LSARGENAUDITEVENT(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_LSARUNREGISTERAUDITEVENT(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_lsaRQueryForestTrustInformation(struct rpc_pipe_client *cli,
-						    TALLOC_CTX *mem_ctx,
-						    struct policy_handle *handle /* [in] [ref] */,
-						    struct lsa_String *trusted_domain_name /* [in] [ref] */,
-						    uint16_t unknown /* [in]  */,
-						    struct lsa_ForestTrustInformation **forest_trust_info /* [out] [ref] */);
-NTSTATUS rpccli_lsa_LSARSETFORESTTRUSTINFORMATION(struct rpc_pipe_client *cli,
-						  TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_CREDRRENAME(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_LookupSids3(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				struct lsa_SidArray *sids /* [in] [ref] */,
-				struct lsa_RefDomainList **domains /* [out] [ref] */,
-				struct lsa_TransNameArray2 *names /* [in,out] [ref] */,
-				uint16_t level /* [in]  */,
-				uint32_t *count /* [in,out] [ref] */,
-				uint32_t unknown1 /* [in]  */,
-				uint32_t unknown2 /* [in]  */);
-NTSTATUS rpccli_lsa_LookupNames4(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 uint32_t num_names /* [in] [range(0,1000)] */,
-				 struct lsa_String *names /* [in] [size_is(num_names)] */,
-				 struct lsa_RefDomainList **domains /* [out] [ref] */,
-				 struct lsa_TransSidArray3 *sids /* [in,out] [ref] */,
-				 enum lsa_LookupNamesLevel level /* [in]  */,
-				 uint32_t *count /* [in,out] [ref] */,
-				 uint32_t unknown1 /* [in]  */,
-				 uint32_t unknown2 /* [in]  */);
-NTSTATUS rpccli_lsa_LSAROPENPOLICYSCE(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_LSARADTREGISTERSECURITYEVENTSOURCE(struct rpc_pipe_client *cli,
-						       TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE(struct rpc_pipe_client *cli,
-							 TALLOC_CTX *mem_ctx);
-NTSTATUS rpccli_lsa_LSARADTREPORTSECURITYEVENT(struct rpc_pipe_client *cli,
-					       TALLOC_CTX *mem_ctx);
-#endif /* __CLI_LSARPC__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_netlogon.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_netlogon.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_netlogon.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,2385 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * client auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/cli_netlogon.h"
-
-NTSTATUS rpccli_netr_LogonUasLogon(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *server_name /* [in] [unique,charset(UTF16)] */,
-				   const char *account_name /* [in] [charset(UTF16)] */,
-				   const char *workstation /* [in] [charset(UTF16)] */,
-				   struct netr_UasInfo *info /* [out] [ref] */,
-				   WERROR *werror)
-{
-	struct netr_LogonUasLogon r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.account_name = account_name;
-	r.in.workstation = workstation;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_LogonUasLogon, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_LOGONUASLOGON,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_LogonUasLogon, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_LogonUasLogoff(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    const char *server_name /* [in] [unique,charset(UTF16)] */,
-				    const char *account_name /* [in] [charset(UTF16)] */,
-				    const char *workstation /* [in] [charset(UTF16)] */,
-				    struct netr_UasLogoffInfo *info /* [out] [ref] */,
-				    WERROR *werror)
-{
-	struct netr_LogonUasLogoff r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.account_name = account_name;
-	r.in.workstation = workstation;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_LogonUasLogoff, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_LOGONUASLOGOFF,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_LogonUasLogoff, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_LogonSamLogon(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *server_name /* [in] [unique,charset(UTF16)] */,
-				   const char *computer_name /* [in] [unique,charset(UTF16)] */,
-				   struct netr_Authenticator *credential /* [in] [unique] */,
-				   struct netr_Authenticator *return_authenticator /* [in,out] [unique] */,
-				   enum netr_LogonLevel logon_level /* [in]  */,
-				   union netr_LogonInfo *logon /* [in] [ref,switch_is(logon_level)] */,
-				   uint16_t validation_level /* [in]  */,
-				   union netr_Validation *validation /* [out] [ref,switch_is(validation_level)] */,
-				   uint8_t *authoritative /* [out] [ref] */)
-{
-	struct netr_LogonSamLogon r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.computer_name = computer_name;
-	r.in.credential = credential;
-	r.in.return_authenticator = return_authenticator;
-	r.in.logon_level = logon_level;
-	r.in.logon = logon;
-	r.in.validation_level = validation_level;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_LogonSamLogon, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_LOGONSAMLOGON,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_LogonSamLogon, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	if (return_authenticator && r.out.return_authenticator) {
-		*return_authenticator = *r.out.return_authenticator;
-	}
-	*validation = *r.out.validation;
-	*authoritative = *r.out.authoritative;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_netr_LogonSamLogoff(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    const char *server_name /* [in] [unique,charset(UTF16)] */,
-				    const char *computer_name /* [in] [unique,charset(UTF16)] */,
-				    struct netr_Authenticator *credential /* [in] [unique] */,
-				    struct netr_Authenticator *return_authenticator /* [in,out] [unique] */,
-				    enum netr_LogonLevel logon_level /* [in]  */,
-				    union netr_LogonInfo logon /* [in] [switch_is(logon_level)] */)
-{
-	struct netr_LogonSamLogoff r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.computer_name = computer_name;
-	r.in.credential = credential;
-	r.in.return_authenticator = return_authenticator;
-	r.in.logon_level = logon_level;
-	r.in.logon = logon;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_LogonSamLogoff, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_LOGONSAMLOGOFF,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_LogonSamLogoff, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	if (return_authenticator && r.out.return_authenticator) {
-		*return_authenticator = *r.out.return_authenticator;
-	}
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_netr_ServerReqChallenge(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					const char *server_name /* [in] [unique,charset(UTF16)] */,
-					const char *computer_name /* [in] [charset(UTF16)] */,
-					struct netr_Credential *credentials /* [in] [ref] */,
-					struct netr_Credential *return_credentials /* [out] [ref] */)
-{
-	struct netr_ServerReqChallenge r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.computer_name = computer_name;
-	r.in.credentials = credentials;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_ServerReqChallenge, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_SERVERREQCHALLENGE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_ServerReqChallenge, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*return_credentials = *r.out.return_credentials;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_netr_ServerAuthenticate(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					const char *server_name /* [in] [unique,charset(UTF16)] */,
-					const char *account_name /* [in] [charset(UTF16)] */,
-					enum netr_SchannelType secure_channel_type /* [in]  */,
-					const char *computer_name /* [in] [charset(UTF16)] */,
-					struct netr_Credential *credentials /* [in] [ref] */,
-					struct netr_Credential *return_credentials /* [out] [ref] */)
-{
-	struct netr_ServerAuthenticate r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.account_name = account_name;
-	r.in.secure_channel_type = secure_channel_type;
-	r.in.computer_name = computer_name;
-	r.in.credentials = credentials;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_ServerAuthenticate, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_SERVERAUTHENTICATE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_ServerAuthenticate, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*return_credentials = *r.out.return_credentials;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_netr_ServerPasswordSet(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       const char *server_name /* [in] [unique,charset(UTF16)] */,
-				       const char *account_name /* [in] [charset(UTF16)] */,
-				       enum netr_SchannelType secure_channel_type /* [in]  */,
-				       const char *computer_name /* [in] [charset(UTF16)] */,
-				       struct netr_Authenticator *credential /* [in] [ref] */,
-				       struct netr_Authenticator *return_authenticator /* [out] [ref] */,
-				       struct samr_Password *new_password /* [in] [ref] */)
-{
-	struct netr_ServerPasswordSet r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.account_name = account_name;
-	r.in.secure_channel_type = secure_channel_type;
-	r.in.computer_name = computer_name;
-	r.in.credential = credential;
-	r.in.new_password = new_password;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_ServerPasswordSet, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_SERVERPASSWORDSET,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_ServerPasswordSet, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*return_authenticator = *r.out.return_authenticator;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_netr_DatabaseDeltas(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    const char *logon_server /* [in] [charset(UTF16)] */,
-				    const char *computername /* [in] [charset(UTF16)] */,
-				    struct netr_Authenticator *credential /* [in] [ref] */,
-				    struct netr_Authenticator *return_authenticator /* [in,out] [ref] */,
-				    enum netr_SamDatabaseID database_id /* [in]  */,
-				    uint64_t *sequence_num /* [in,out] [ref] */,
-				    struct netr_DELTA_ENUM_ARRAY **delta_enum_array /* [out] [ref] */,
-				    uint32_t preferredmaximumlength /* [in]  */)
-{
-	struct netr_DatabaseDeltas r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.logon_server = logon_server;
-	r.in.computername = computername;
-	r.in.credential = credential;
-	r.in.return_authenticator = return_authenticator;
-	r.in.database_id = database_id;
-	r.in.sequence_num = sequence_num;
-	r.in.preferredmaximumlength = preferredmaximumlength;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DatabaseDeltas, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_DATABASEDELTAS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DatabaseDeltas, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*return_authenticator = *r.out.return_authenticator;
-	*sequence_num = *r.out.sequence_num;
-	*delta_enum_array = *r.out.delta_enum_array;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_netr_DatabaseSync(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  const char *logon_server /* [in] [charset(UTF16)] */,
-				  const char *computername /* [in] [charset(UTF16)] */,
-				  struct netr_Authenticator credential /* [in]  */,
-				  struct netr_Authenticator *return_authenticator /* [in,out] [ref] */,
-				  enum netr_SamDatabaseID database_id /* [in]  */,
-				  uint32_t *sync_context /* [in,out] [ref] */,
-				  uint32_t preferredmaximumlength /* [in]  */,
-				  struct netr_DELTA_ENUM_ARRAY *delta_enum_array /* [out] [ref] */)
-{
-	struct netr_DatabaseSync r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.logon_server = logon_server;
-	r.in.computername = computername;
-	r.in.credential = credential;
-	r.in.return_authenticator = return_authenticator;
-	r.in.database_id = database_id;
-	r.in.sync_context = sync_context;
-	r.in.preferredmaximumlength = preferredmaximumlength;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DatabaseSync, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_DATABASESYNC,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DatabaseSync, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*return_authenticator = *r.out.return_authenticator;
-	*sync_context = *r.out.sync_context;
-	*delta_enum_array = *r.out.delta_enum_array;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_netr_AccountDeltas(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *logon_server /* [in] [unique,charset(UTF16)] */,
-				   const char *computername /* [in] [charset(UTF16)] */,
-				   struct netr_Authenticator credential /* [in]  */,
-				   struct netr_Authenticator *return_authenticator /* [in,out] [ref] */,
-				   struct netr_UAS_INFO_0 uas /* [in]  */,
-				   uint32_t count /* [in]  */,
-				   uint32_t level /* [in]  */,
-				   uint32_t buffersize /* [in]  */,
-				   struct netr_AccountBuffer *buffer /* [out] [ref,subcontext(4)] */,
-				   uint32_t *count_returned /* [out] [ref] */,
-				   uint32_t *total_entries /* [out] [ref] */,
-				   struct netr_UAS_INFO_0 *recordid /* [out] [ref] */)
-{
-	struct netr_AccountDeltas r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.logon_server = logon_server;
-	r.in.computername = computername;
-	r.in.credential = credential;
-	r.in.return_authenticator = return_authenticator;
-	r.in.uas = uas;
-	r.in.count = count;
-	r.in.level = level;
-	r.in.buffersize = buffersize;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_AccountDeltas, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_ACCOUNTDELTAS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_AccountDeltas, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*return_authenticator = *r.out.return_authenticator;
-	*buffer = *r.out.buffer;
-	*count_returned = *r.out.count_returned;
-	*total_entries = *r.out.total_entries;
-	*recordid = *r.out.recordid;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_netr_AccountSync(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 const char *logon_server /* [in] [unique,charset(UTF16)] */,
-				 const char *computername /* [in] [charset(UTF16)] */,
-				 struct netr_Authenticator credential /* [in]  */,
-				 struct netr_Authenticator *return_authenticator /* [in,out] [ref] */,
-				 uint32_t reference /* [in]  */,
-				 uint32_t level /* [in]  */,
-				 uint32_t buffersize /* [in]  */,
-				 struct netr_AccountBuffer *buffer /* [out] [ref,subcontext(4)] */,
-				 uint32_t *count_returned /* [out] [ref] */,
-				 uint32_t *total_entries /* [out] [ref] */,
-				 uint32_t *next_reference /* [out] [ref] */,
-				 struct netr_UAS_INFO_0 *recordid /* [in,out] [ref] */)
-{
-	struct netr_AccountSync r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.logon_server = logon_server;
-	r.in.computername = computername;
-	r.in.credential = credential;
-	r.in.return_authenticator = return_authenticator;
-	r.in.reference = reference;
-	r.in.level = level;
-	r.in.buffersize = buffersize;
-	r.in.recordid = recordid;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_AccountSync, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_ACCOUNTSYNC,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_AccountSync, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*return_authenticator = *r.out.return_authenticator;
-	*buffer = *r.out.buffer;
-	*count_returned = *r.out.count_returned;
-	*total_entries = *r.out.total_entries;
-	*next_reference = *r.out.next_reference;
-	*recordid = *r.out.recordid;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_netr_GetDcName(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       const char *logon_server /* [in] [charset(UTF16)] */,
-			       const char *domainname /* [in] [unique,charset(UTF16)] */,
-			       const char **dcname /* [out] [ref,charset(UTF16)] */,
-			       WERROR *werror)
-{
-	struct netr_GetDcName r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.logon_server = logon_server;
-	r.in.domainname = domainname;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_GetDcName, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_GETDCNAME,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_GetDcName, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*dcname = *r.out.dcname;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_LogonControl(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  const char *logon_server /* [in] [unique,charset(UTF16)] */,
-				  enum netr_LogonControlCode function_code /* [in]  */,
-				  uint32_t level /* [in]  */,
-				  union netr_CONTROL_QUERY_INFORMATION *info /* [out] [ref,switch_is(level)] */,
-				  WERROR *werror)
-{
-	struct netr_LogonControl r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.logon_server = logon_server;
-	r.in.function_code = function_code;
-	r.in.level = level;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_LogonControl, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_LOGONCONTROL,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_LogonControl, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_GetAnyDCName(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  const char *logon_server /* [in] [unique,charset(UTF16)] */,
-				  const char *domainname /* [in] [unique,charset(UTF16)] */,
-				  const char **dcname /* [out] [ref,charset(UTF16)] */,
-				  WERROR *werror)
-{
-	struct netr_GetAnyDCName r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.logon_server = logon_server;
-	r.in.domainname = domainname;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_GetAnyDCName, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_GETANYDCNAME,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_GetAnyDCName, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*dcname = *r.out.dcname;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_LogonControl2(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *logon_server /* [in] [unique,charset(UTF16)] */,
-				   enum netr_LogonControlCode function_code /* [in]  */,
-				   uint32_t level /* [in]  */,
-				   union netr_CONTROL_DATA_INFORMATION *data /* [in] [ref,switch_is(function_code)] */,
-				   union netr_CONTROL_QUERY_INFORMATION *query /* [out] [ref,switch_is(level)] */,
-				   WERROR *werror)
-{
-	struct netr_LogonControl2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.logon_server = logon_server;
-	r.in.function_code = function_code;
-	r.in.level = level;
-	r.in.data = data;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_LogonControl2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_LOGONCONTROL2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_LogonControl2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*query = *r.out.query;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_ServerAuthenticate2(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 const char *server_name /* [in] [unique,charset(UTF16)] */,
-					 const char *account_name /* [in] [charset(UTF16)] */,
-					 enum netr_SchannelType secure_channel_type /* [in]  */,
-					 const char *computer_name /* [in] [charset(UTF16)] */,
-					 struct netr_Credential *credentials /* [in] [ref] */,
-					 struct netr_Credential *return_credentials /* [out] [ref] */,
-					 uint32_t *negotiate_flags /* [in,out] [ref] */)
-{
-	struct netr_ServerAuthenticate2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.account_name = account_name;
-	r.in.secure_channel_type = secure_channel_type;
-	r.in.computer_name = computer_name;
-	r.in.credentials = credentials;
-	r.in.negotiate_flags = negotiate_flags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_ServerAuthenticate2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_SERVERAUTHENTICATE2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_ServerAuthenticate2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*return_credentials = *r.out.return_credentials;
-	*negotiate_flags = *r.out.negotiate_flags;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_netr_DatabaseSync2(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *logon_server /* [in] [charset(UTF16)] */,
-				   const char *computername /* [in] [charset(UTF16)] */,
-				   struct netr_Authenticator *credential /* [in] [ref] */,
-				   struct netr_Authenticator *return_authenticator /* [in,out] [ref] */,
-				   enum netr_SamDatabaseID database_id /* [in]  */,
-				   uint16_t restart_state /* [in]  */,
-				   uint32_t *sync_context /* [in,out] [ref] */,
-				   struct netr_DELTA_ENUM_ARRAY **delta_enum_array /* [out] [ref] */,
-				   uint32_t preferredmaximumlength /* [in]  */)
-{
-	struct netr_DatabaseSync2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.logon_server = logon_server;
-	r.in.computername = computername;
-	r.in.credential = credential;
-	r.in.return_authenticator = return_authenticator;
-	r.in.database_id = database_id;
-	r.in.restart_state = restart_state;
-	r.in.sync_context = sync_context;
-	r.in.preferredmaximumlength = preferredmaximumlength;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DatabaseSync2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_DATABASESYNC2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DatabaseSync2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*return_authenticator = *r.out.return_authenticator;
-	*sync_context = *r.out.sync_context;
-	*delta_enum_array = *r.out.delta_enum_array;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_netr_DatabaseRedo(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  const char *logon_server /* [in] [charset(UTF16)] */,
-				  const char *computername /* [in] [charset(UTF16)] */,
-				  struct netr_Authenticator credential /* [in]  */,
-				  struct netr_Authenticator *return_authenticator /* [in,out] [ref] */,
-				  uint8_t *change_log_entry /* [in] [unique,size_is(change_log_entry_size)] */,
-				  uint32_t change_log_entry_size /* [in]  */,
-				  struct netr_DELTA_ENUM_ARRAY *delta_enum_array /* [out] [ref] */)
-{
-	struct netr_DatabaseRedo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.logon_server = logon_server;
-	r.in.computername = computername;
-	r.in.credential = credential;
-	r.in.return_authenticator = return_authenticator;
-	r.in.change_log_entry = change_log_entry;
-	r.in.change_log_entry_size = change_log_entry_size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DatabaseRedo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_DATABASEREDO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DatabaseRedo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*return_authenticator = *r.out.return_authenticator;
-	*delta_enum_array = *r.out.delta_enum_array;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_netr_LogonControl2Ex(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     const char *logon_server /* [in] [unique,charset(UTF16)] */,
-				     uint32_t function_code /* [in]  */,
-				     uint32_t level /* [in]  */,
-				     union netr_CONTROL_DATA_INFORMATION data /* [in] [switch_is(function_code)] */,
-				     union netr_CONTROL_QUERY_INFORMATION *query /* [out] [ref,switch_is(level)] */,
-				     WERROR *werror)
-{
-	struct netr_LogonControl2Ex r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.logon_server = logon_server;
-	r.in.function_code = function_code;
-	r.in.level = level;
-	r.in.data = data;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_LogonControl2Ex, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_LOGONCONTROL2EX,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_LogonControl2Ex, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*query = *r.out.query;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_NetrEnumerateTrustedDomains(struct rpc_pipe_client *cli,
-						 TALLOC_CTX *mem_ctx,
-						 const char *server_name /* [in] [unique,charset(UTF16)] */,
-						 struct netr_Blob *trusted_domains_blob /* [out] [ref] */,
-						 WERROR *werror)
-{
-	struct netr_NetrEnumerateTrustedDomains r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_NetrEnumerateTrustedDomains, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_NETRENUMERATETRUSTEDDOMAINS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_NetrEnumerateTrustedDomains, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*trusted_domains_blob = *r.out.trusted_domains_blob;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_DsRGetDCName(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				  const char *domain_name /* [in] [unique,charset(UTF16)] */,
-				  struct GUID *domain_guid /* [in] [unique] */,
-				  struct GUID *site_guid /* [in] [unique] */,
-				  uint32_t flags /* [in]  */,
-				  struct netr_DsRGetDCNameInfo **info /* [out] [ref] */,
-				  WERROR *werror)
-{
-	struct netr_DsRGetDCName r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.domain_name = domain_name;
-	r.in.domain_guid = domain_guid;
-	r.in.site_guid = site_guid;
-	r.in.flags = flags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DsRGetDCName, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_DSRGETDCNAME,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DsRGetDCName, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_NETRLOGONDUMMYROUTINE1(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    WERROR *werror)
-{
-	struct netr_NETRLOGONDUMMYROUTINE1 r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_NETRLOGONDUMMYROUTINE1, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_NETRLOGONDUMMYROUTINE1,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_NETRLOGONDUMMYROUTINE1, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_NETRLOGONSETSERVICEBITS(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx,
-					     WERROR *werror)
-{
-	struct netr_NETRLOGONSETSERVICEBITS r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_NETRLOGONSETSERVICEBITS, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_NETRLOGONSETSERVICEBITS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_NETRLOGONSETSERVICEBITS, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_LogonGetTrustRid(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      const char *server_name /* [in] [unique,charset(UTF16)] */,
-				      const char *domain_name /* [in] [unique,charset(UTF16)] */,
-				      uint32_t *rid /* [out] [ref] */,
-				      WERROR *werror)
-{
-	struct netr_LogonGetTrustRid r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.domain_name = domain_name;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_LogonGetTrustRid, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_LOGONGETTRUSTRID,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_LogonGetTrustRid, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*rid = *r.out.rid;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_NETRLOGONCOMPUTESERVERDIGEST(struct rpc_pipe_client *cli,
-						  TALLOC_CTX *mem_ctx,
-						  WERROR *werror)
-{
-	struct netr_NETRLOGONCOMPUTESERVERDIGEST r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_NETRLOGONCOMPUTESERVERDIGEST, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_NETRLOGONCOMPUTESERVERDIGEST,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_NETRLOGONCOMPUTESERVERDIGEST, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_NETRLOGONCOMPUTECLIENTDIGEST(struct rpc_pipe_client *cli,
-						  TALLOC_CTX *mem_ctx,
-						  WERROR *werror)
-{
-	struct netr_NETRLOGONCOMPUTECLIENTDIGEST r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_NETRLOGONCOMPUTECLIENTDIGEST, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_NETRLOGONCOMPUTECLIENTDIGEST,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_NETRLOGONCOMPUTECLIENTDIGEST, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_ServerAuthenticate3(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 const char *server_name /* [in] [unique,charset(UTF16)] */,
-					 const char *account_name /* [in] [charset(UTF16)] */,
-					 enum netr_SchannelType secure_channel_type /* [in]  */,
-					 const char *computer_name /* [in] [charset(UTF16)] */,
-					 struct netr_Credential *credentials /* [in,out] [ref] */,
-					 uint32_t *negotiate_flags /* [in,out] [ref] */,
-					 uint32_t *rid /* [out] [ref] */)
-{
-	struct netr_ServerAuthenticate3 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.account_name = account_name;
-	r.in.secure_channel_type = secure_channel_type;
-	r.in.computer_name = computer_name;
-	r.in.credentials = credentials;
-	r.in.negotiate_flags = negotiate_flags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_ServerAuthenticate3, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_SERVERAUTHENTICATE3,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_ServerAuthenticate3, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*credentials = *r.out.credentials;
-	*negotiate_flags = *r.out.negotiate_flags;
-	*rid = *r.out.rid;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_netr_DsRGetDCNameEx(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				    const char *domain_name /* [in] [unique,charset(UTF16)] */,
-				    struct GUID *domain_guid /* [in] [unique] */,
-				    const char *site_name /* [in] [unique,charset(UTF16)] */,
-				    uint32_t flags /* [in]  */,
-				    struct netr_DsRGetDCNameInfo **info /* [out] [ref] */,
-				    WERROR *werror)
-{
-	struct netr_DsRGetDCNameEx r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.domain_name = domain_name;
-	r.in.domain_guid = domain_guid;
-	r.in.site_name = site_name;
-	r.in.flags = flags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DsRGetDCNameEx, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_DSRGETDCNAMEEX,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DsRGetDCNameEx, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_DsRGetSiteName(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    const char *computer_name /* [in] [unique,charset(UTF16)] */,
-				    const char **site /* [out] [ref,charset(UTF16)] */,
-				    WERROR *werror)
-{
-	struct netr_DsRGetSiteName r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.computer_name = computer_name;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DsRGetSiteName, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_DSRGETSITENAME,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DsRGetSiteName, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*site = *r.out.site;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_LogonGetDomainInfo(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					const char *server_name /* [in] [charset(UTF16)] */,
-					const char *computer_name /* [in] [unique,charset(UTF16)] */,
-					struct netr_Authenticator *credential /* [in] [ref] */,
-					struct netr_Authenticator *return_authenticator /* [in,out] [ref] */,
-					uint32_t level /* [in]  */,
-					union netr_DomainQuery query /* [in] [switch_is(level)] */,
-					union netr_DomainInfo *info /* [out] [ref,switch_is(level)] */)
-{
-	struct netr_LogonGetDomainInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.computer_name = computer_name;
-	r.in.credential = credential;
-	r.in.return_authenticator = return_authenticator;
-	r.in.level = level;
-	r.in.query = query;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_LogonGetDomainInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_LOGONGETDOMAININFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_LogonGetDomainInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*return_authenticator = *r.out.return_authenticator;
-	*info = *r.out.info;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_netr_ServerPasswordSet2(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					const char *server_name /* [in] [unique,charset(UTF16)] */,
-					const char *account_name /* [in] [charset(UTF16)] */,
-					enum netr_SchannelType secure_channel_type /* [in]  */,
-					const char *computer_name /* [in] [charset(UTF16)] */,
-					struct netr_Authenticator credential /* [in]  */,
-					struct netr_CryptPassword new_password /* [in]  */,
-					struct netr_Authenticator *return_authenticator /* [out] [ref] */)
-{
-	struct netr_ServerPasswordSet2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.account_name = account_name;
-	r.in.secure_channel_type = secure_channel_type;
-	r.in.computer_name = computer_name;
-	r.in.credential = credential;
-	r.in.new_password = new_password;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_ServerPasswordSet2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_SERVERPASSWORDSET2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_ServerPasswordSet2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*return_authenticator = *r.out.return_authenticator;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_netr_ServerPasswordGet(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       const char *server_name /* [in] [unique,charset(UTF16)] */,
-				       const char *account_name /* [in] [charset(UTF16)] */,
-				       enum netr_SchannelType secure_channel_type /* [in]  */,
-				       const char *computer_name /* [in] [charset(UTF16)] */,
-				       struct netr_Authenticator *credential /* [in] [ref] */,
-				       struct netr_Authenticator *return_authenticator /* [out] [ref] */,
-				       struct samr_Password *password /* [out] [ref] */,
-				       WERROR *werror)
-{
-	struct netr_ServerPasswordGet r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.account_name = account_name;
-	r.in.secure_channel_type = secure_channel_type;
-	r.in.computer_name = computer_name;
-	r.in.credential = credential;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_ServerPasswordGet, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_SERVERPASSWORDGET,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_ServerPasswordGet, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*return_authenticator = *r.out.return_authenticator;
-	*password = *r.out.password;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_NETRLOGONSENDTOSAM(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					WERROR *werror)
-{
-	struct netr_NETRLOGONSENDTOSAM r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_NETRLOGONSENDTOSAM, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_NETRLOGONSENDTOSAM,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_NETRLOGONSENDTOSAM, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_DsRAddressToSitenamesW(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    const char *server_name /* [in] [unique,charset(UTF16)] */,
-					    uint32_t count /* [in] [range(0,32000)] */,
-					    struct netr_DsRAddress *addresses /* [in] [ref,size_is(count)] */,
-					    struct netr_DsRAddressToSitenamesWCtr **ctr /* [out] [ref] */,
-					    WERROR *werror)
-{
-	struct netr_DsRAddressToSitenamesW r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.count = count;
-	r.in.addresses = addresses;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DsRAddressToSitenamesW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_DSRADDRESSTOSITENAMESW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DsRAddressToSitenamesW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*ctr = *r.out.ctr;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_DsRGetDCNameEx2(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				     const char *client_account /* [in] [unique,charset(UTF16)] */,
-				     uint32_t mask /* [in]  */,
-				     const char *domain_name /* [in] [unique,charset(UTF16)] */,
-				     struct GUID *domain_guid /* [in] [unique] */,
-				     const char *site_name /* [in] [unique,charset(UTF16)] */,
-				     uint32_t flags /* [in]  */,
-				     struct netr_DsRGetDCNameInfo **info /* [out] [ref] */,
-				     WERROR *werror)
-{
-	struct netr_DsRGetDCNameEx2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.client_account = client_account;
-	r.in.mask = mask;
-	r.in.domain_name = domain_name;
-	r.in.domain_guid = domain_guid;
-	r.in.site_name = site_name;
-	r.in.flags = flags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DsRGetDCNameEx2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_DSRGETDCNAMEEX2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DsRGetDCNameEx2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN(struct rpc_pipe_client *cli,
-							 TALLOC_CTX *mem_ctx,
-							 WERROR *werror)
-{
-	struct netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_NETRLOGONGETTIMESERVICEPARENTDOMAIN,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_NetrEnumerateTrustedDomainsEx(struct rpc_pipe_client *cli,
-						   TALLOC_CTX *mem_ctx,
-						   const char *server_name /* [in] [unique,charset(UTF16)] */,
-						   struct netr_DomainTrustList *dom_trust_list /* [out] [ref] */,
-						   WERROR *werror)
-{
-	struct netr_NetrEnumerateTrustedDomainsEx r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_NetrEnumerateTrustedDomainsEx, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_NETRENUMERATETRUSTEDDOMAINSEX,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_NetrEnumerateTrustedDomainsEx, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*dom_trust_list = *r.out.dom_trust_list;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_DsRAddressToSitenamesExW(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      const char *server_name /* [in] [unique,charset(UTF16)] */,
-					      uint32_t count /* [in] [range(0,32000)] */,
-					      struct netr_DsRAddress *addresses /* [in] [ref,size_is(count)] */,
-					      struct netr_DsRAddressToSitenamesExWCtr **ctr /* [out] [ref] */,
-					      WERROR *werror)
-{
-	struct netr_DsRAddressToSitenamesExW r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.count = count;
-	r.in.addresses = addresses;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DsRAddressToSitenamesExW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_DSRADDRESSTOSITENAMESEXW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DsRAddressToSitenamesExW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*ctr = *r.out.ctr;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_DsrGetDcSiteCoverageW(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   const char *server_name /* [in] [unique,charset(UTF16)] */,
-					   struct DcSitesCtr *ctr /* [out] [ref] */,
-					   WERROR *werror)
-{
-	struct netr_DsrGetDcSiteCoverageW r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DsrGetDcSiteCoverageW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_DSRGETDCSITECOVERAGEW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DsrGetDcSiteCoverageW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*ctr = *r.out.ctr;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_LogonSamLogonEx(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     const char *server_name /* [in] [unique,charset(UTF16)] */,
-				     const char *computer_name /* [in] [unique,charset(UTF16)] */,
-				     enum netr_LogonLevel logon_level /* [in]  */,
-				     union netr_LogonInfo *logon /* [in] [ref,switch_is(logon_level)] */,
-				     uint16_t validation_level /* [in]  */,
-				     union netr_Validation *validation /* [out] [ref,switch_is(validation_level)] */,
-				     uint8_t *authoritative /* [out] [ref] */,
-				     uint32_t *flags /* [in,out] [ref] */)
-{
-	struct netr_LogonSamLogonEx r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.computer_name = computer_name;
-	r.in.logon_level = logon_level;
-	r.in.logon = logon;
-	r.in.validation_level = validation_level;
-	r.in.flags = flags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_LogonSamLogonEx, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_LOGONSAMLOGONEX,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_LogonSamLogonEx, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*validation = *r.out.validation;
-	*authoritative = *r.out.authoritative;
-	*flags = *r.out.flags;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_netr_DsrEnumerateDomainTrusts(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      const char *server_name /* [in] [unique,charset(UTF16)] */,
-					      uint32_t trust_flags /* [in]  */,
-					      struct netr_DomainTrustList *trusts /* [out] [ref] */,
-					      WERROR *werror)
-{
-	struct netr_DsrEnumerateDomainTrusts r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.trust_flags = trust_flags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DsrEnumerateDomainTrusts, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_DSRENUMERATEDOMAINTRUSTS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DsrEnumerateDomainTrusts, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*trusts = *r.out.trusts;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_DsrDeregisterDNSHostRecords(struct rpc_pipe_client *cli,
-						 TALLOC_CTX *mem_ctx,
-						 const char *server_name /* [in] [unique,charset(UTF16)] */,
-						 const char *domain /* [in] [unique,charset(UTF16)] */,
-						 struct GUID *domain_guid /* [in] [unique] */,
-						 struct GUID *dsa_guid /* [in] [unique] */,
-						 const char *dns_host /* [in] [ref,charset(UTF16)] */,
-						 WERROR *werror)
-{
-	struct netr_DsrDeregisterDNSHostRecords r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.domain = domain;
-	r.in.domain_guid = domain_guid;
-	r.in.dsa_guid = dsa_guid;
-	r.in.dns_host = dns_host;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DsrDeregisterDNSHostRecords, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_DSRDEREGISTERDNSHOSTRECORDS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DsrDeregisterDNSHostRecords, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_ServerTrustPasswordsGet(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx,
-					     const char *server_name /* [in] [unique,charset(UTF16)] */,
-					     const char *account_name /* [in] [charset(UTF16)] */,
-					     enum netr_SchannelType secure_channel_type /* [in]  */,
-					     const char *computer_name /* [in] [charset(UTF16)] */,
-					     struct netr_Authenticator *credential /* [in] [ref] */,
-					     struct netr_Authenticator *return_authenticator /* [out] [ref] */,
-					     struct samr_Password *password /* [out] [ref] */,
-					     struct samr_Password *password2 /* [out] [ref] */)
-{
-	struct netr_ServerTrustPasswordsGet r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.account_name = account_name;
-	r.in.secure_channel_type = secure_channel_type;
-	r.in.computer_name = computer_name;
-	r.in.credential = credential;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_ServerTrustPasswordsGet, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_SERVERTRUSTPASSWORDSGET,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_ServerTrustPasswordsGet, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*return_authenticator = *r.out.return_authenticator;
-	*password = *r.out.password;
-	*password2 = *r.out.password2;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_netr_DsRGetForestTrustInformation(struct rpc_pipe_client *cli,
-						  TALLOC_CTX *mem_ctx,
-						  const char *server_name /* [in] [unique,charset(UTF16)] */,
-						  const char *trusted_domain_name /* [in] [unique,charset(UTF16)] */,
-						  uint32_t flags /* [in]  */,
-						  struct lsa_ForestTrustInformation **forest_trust_info /* [out] [ref] */,
-						  WERROR *werror)
-{
-	struct netr_DsRGetForestTrustInformation r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.trusted_domain_name = trusted_domain_name;
-	r.in.flags = flags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DsRGetForestTrustInformation, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_DSRGETFORESTTRUSTINFORMATION,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DsRGetForestTrustInformation, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*forest_trust_info = *r.out.forest_trust_info;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_GetForestTrustInformation(struct rpc_pipe_client *cli,
-					       TALLOC_CTX *mem_ctx,
-					       const char *server_name /* [in] [unique,charset(UTF16)] */,
-					       const char *trusted_domain_name /* [in] [ref,charset(UTF16)] */,
-					       struct netr_Authenticator *credential /* [in] [ref] */,
-					       struct netr_Authenticator *return_authenticator /* [out] [ref] */,
-					       uint32_t flags /* [in]  */,
-					       struct lsa_ForestTrustInformation **forest_trust_info /* [out] [ref] */,
-					       WERROR *werror)
-{
-	struct netr_GetForestTrustInformation r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.trusted_domain_name = trusted_domain_name;
-	r.in.credential = credential;
-	r.in.flags = flags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_GetForestTrustInformation, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_GETFORESTTRUSTINFORMATION,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_GetForestTrustInformation, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*return_authenticator = *r.out.return_authenticator;
-	*forest_trust_info = *r.out.forest_trust_info;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_netr_LogonSamLogonWithFlags(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    const char *server_name /* [in] [unique,charset(UTF16)] */,
-					    const char *computer_name /* [in] [unique,charset(UTF16)] */,
-					    struct netr_Authenticator *credential /* [in] [unique] */,
-					    struct netr_Authenticator *return_authenticator /* [in,out] [unique] */,
-					    enum netr_LogonLevel logon_level /* [in]  */,
-					    union netr_LogonInfo logon /* [in] [switch_is(logon_level)] */,
-					    uint16_t validation_level /* [in]  */,
-					    union netr_Validation *validation /* [out] [ref,switch_is(validation_level)] */,
-					    uint8_t *authoritative /* [out] [ref] */,
-					    uint32_t *flags /* [in,out] [ref] */)
-{
-	struct netr_LogonSamLogonWithFlags r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.computer_name = computer_name;
-	r.in.credential = credential;
-	r.in.return_authenticator = return_authenticator;
-	r.in.logon_level = logon_level;
-	r.in.logon = logon;
-	r.in.validation_level = validation_level;
-	r.in.flags = flags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_LogonSamLogonWithFlags, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_LOGONSAMLOGONWITHFLAGS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_LogonSamLogonWithFlags, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	if (return_authenticator && r.out.return_authenticator) {
-		*return_authenticator = *r.out.return_authenticator;
-	}
-	*validation = *r.out.validation;
-	*authoritative = *r.out.authoritative;
-	*flags = *r.out.flags;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_netr_NETRSERVERGETTRUSTINFO(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    WERROR *werror)
-{
-	struct netr_NETRSERVERGETTRUSTINFO r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_NETRSERVERGETTRUSTINFO, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NETLOGON,
-				&ndr_table_netlogon,
-				NDR_NETR_NETRSERVERGETTRUSTINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_NETRSERVERGETTRUSTINFO, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_netlogon.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_netlogon.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_netlogon.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,361 +0,0 @@
-#include "librpc/gen_ndr/ndr_netlogon.h"
-#ifndef __CLI_NETLOGON__
-#define __CLI_NETLOGON__
-NTSTATUS rpccli_netr_LogonUasLogon(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *server_name /* [in] [unique,charset(UTF16)] */,
-				   const char *account_name /* [in] [charset(UTF16)] */,
-				   const char *workstation /* [in] [charset(UTF16)] */,
-				   struct netr_UasInfo *info /* [out] [ref] */,
-				   WERROR *werror);
-NTSTATUS rpccli_netr_LogonUasLogoff(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    const char *server_name /* [in] [unique,charset(UTF16)] */,
-				    const char *account_name /* [in] [charset(UTF16)] */,
-				    const char *workstation /* [in] [charset(UTF16)] */,
-				    struct netr_UasLogoffInfo *info /* [out] [ref] */,
-				    WERROR *werror);
-NTSTATUS rpccli_netr_LogonSamLogon(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *server_name /* [in] [unique,charset(UTF16)] */,
-				   const char *computer_name /* [in] [unique,charset(UTF16)] */,
-				   struct netr_Authenticator *credential /* [in] [unique] */,
-				   struct netr_Authenticator *return_authenticator /* [in,out] [unique] */,
-				   enum netr_LogonLevel logon_level /* [in]  */,
-				   union netr_LogonInfo *logon /* [in] [ref,switch_is(logon_level)] */,
-				   uint16_t validation_level /* [in]  */,
-				   union netr_Validation *validation /* [out] [ref,switch_is(validation_level)] */,
-				   uint8_t *authoritative /* [out] [ref] */);
-NTSTATUS rpccli_netr_LogonSamLogoff(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    const char *server_name /* [in] [unique,charset(UTF16)] */,
-				    const char *computer_name /* [in] [unique,charset(UTF16)] */,
-				    struct netr_Authenticator *credential /* [in] [unique] */,
-				    struct netr_Authenticator *return_authenticator /* [in,out] [unique] */,
-				    enum netr_LogonLevel logon_level /* [in]  */,
-				    union netr_LogonInfo logon /* [in] [switch_is(logon_level)] */);
-NTSTATUS rpccli_netr_ServerReqChallenge(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					const char *server_name /* [in] [unique,charset(UTF16)] */,
-					const char *computer_name /* [in] [charset(UTF16)] */,
-					struct netr_Credential *credentials /* [in] [ref] */,
-					struct netr_Credential *return_credentials /* [out] [ref] */);
-NTSTATUS rpccli_netr_ServerAuthenticate(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					const char *server_name /* [in] [unique,charset(UTF16)] */,
-					const char *account_name /* [in] [charset(UTF16)] */,
-					enum netr_SchannelType secure_channel_type /* [in]  */,
-					const char *computer_name /* [in] [charset(UTF16)] */,
-					struct netr_Credential *credentials /* [in] [ref] */,
-					struct netr_Credential *return_credentials /* [out] [ref] */);
-NTSTATUS rpccli_netr_ServerPasswordSet(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       const char *server_name /* [in] [unique,charset(UTF16)] */,
-				       const char *account_name /* [in] [charset(UTF16)] */,
-				       enum netr_SchannelType secure_channel_type /* [in]  */,
-				       const char *computer_name /* [in] [charset(UTF16)] */,
-				       struct netr_Authenticator *credential /* [in] [ref] */,
-				       struct netr_Authenticator *return_authenticator /* [out] [ref] */,
-				       struct samr_Password *new_password /* [in] [ref] */);
-NTSTATUS rpccli_netr_DatabaseDeltas(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    const char *logon_server /* [in] [charset(UTF16)] */,
-				    const char *computername /* [in] [charset(UTF16)] */,
-				    struct netr_Authenticator *credential /* [in] [ref] */,
-				    struct netr_Authenticator *return_authenticator /* [in,out] [ref] */,
-				    enum netr_SamDatabaseID database_id /* [in]  */,
-				    uint64_t *sequence_num /* [in,out] [ref] */,
-				    struct netr_DELTA_ENUM_ARRAY **delta_enum_array /* [out] [ref] */,
-				    uint32_t preferredmaximumlength /* [in]  */);
-NTSTATUS rpccli_netr_DatabaseSync(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  const char *logon_server /* [in] [charset(UTF16)] */,
-				  const char *computername /* [in] [charset(UTF16)] */,
-				  struct netr_Authenticator credential /* [in]  */,
-				  struct netr_Authenticator *return_authenticator /* [in,out] [ref] */,
-				  enum netr_SamDatabaseID database_id /* [in]  */,
-				  uint32_t *sync_context /* [in,out] [ref] */,
-				  uint32_t preferredmaximumlength /* [in]  */,
-				  struct netr_DELTA_ENUM_ARRAY *delta_enum_array /* [out] [ref] */);
-NTSTATUS rpccli_netr_AccountDeltas(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *logon_server /* [in] [unique,charset(UTF16)] */,
-				   const char *computername /* [in] [charset(UTF16)] */,
-				   struct netr_Authenticator credential /* [in]  */,
-				   struct netr_Authenticator *return_authenticator /* [in,out] [ref] */,
-				   struct netr_UAS_INFO_0 uas /* [in]  */,
-				   uint32_t count /* [in]  */,
-				   uint32_t level /* [in]  */,
-				   uint32_t buffersize /* [in]  */,
-				   struct netr_AccountBuffer *buffer /* [out] [ref,subcontext(4)] */,
-				   uint32_t *count_returned /* [out] [ref] */,
-				   uint32_t *total_entries /* [out] [ref] */,
-				   struct netr_UAS_INFO_0 *recordid /* [out] [ref] */);
-NTSTATUS rpccli_netr_AccountSync(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 const char *logon_server /* [in] [unique,charset(UTF16)] */,
-				 const char *computername /* [in] [charset(UTF16)] */,
-				 struct netr_Authenticator credential /* [in]  */,
-				 struct netr_Authenticator *return_authenticator /* [in,out] [ref] */,
-				 uint32_t reference /* [in]  */,
-				 uint32_t level /* [in]  */,
-				 uint32_t buffersize /* [in]  */,
-				 struct netr_AccountBuffer *buffer /* [out] [ref,subcontext(4)] */,
-				 uint32_t *count_returned /* [out] [ref] */,
-				 uint32_t *total_entries /* [out] [ref] */,
-				 uint32_t *next_reference /* [out] [ref] */,
-				 struct netr_UAS_INFO_0 *recordid /* [in,out] [ref] */);
-NTSTATUS rpccli_netr_GetDcName(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       const char *logon_server /* [in] [charset(UTF16)] */,
-			       const char *domainname /* [in] [unique,charset(UTF16)] */,
-			       const char **dcname /* [out] [ref,charset(UTF16)] */,
-			       WERROR *werror);
-NTSTATUS rpccli_netr_LogonControl(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  const char *logon_server /* [in] [unique,charset(UTF16)] */,
-				  enum netr_LogonControlCode function_code /* [in]  */,
-				  uint32_t level /* [in]  */,
-				  union netr_CONTROL_QUERY_INFORMATION *info /* [out] [ref,switch_is(level)] */,
-				  WERROR *werror);
-NTSTATUS rpccli_netr_GetAnyDCName(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  const char *logon_server /* [in] [unique,charset(UTF16)] */,
-				  const char *domainname /* [in] [unique,charset(UTF16)] */,
-				  const char **dcname /* [out] [ref,charset(UTF16)] */,
-				  WERROR *werror);
-NTSTATUS rpccli_netr_LogonControl2(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *logon_server /* [in] [unique,charset(UTF16)] */,
-				   enum netr_LogonControlCode function_code /* [in]  */,
-				   uint32_t level /* [in]  */,
-				   union netr_CONTROL_DATA_INFORMATION *data /* [in] [ref,switch_is(function_code)] */,
-				   union netr_CONTROL_QUERY_INFORMATION *query /* [out] [ref,switch_is(level)] */,
-				   WERROR *werror);
-NTSTATUS rpccli_netr_ServerAuthenticate2(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 const char *server_name /* [in] [unique,charset(UTF16)] */,
-					 const char *account_name /* [in] [charset(UTF16)] */,
-					 enum netr_SchannelType secure_channel_type /* [in]  */,
-					 const char *computer_name /* [in] [charset(UTF16)] */,
-					 struct netr_Credential *credentials /* [in] [ref] */,
-					 struct netr_Credential *return_credentials /* [out] [ref] */,
-					 uint32_t *negotiate_flags /* [in,out] [ref] */);
-NTSTATUS rpccli_netr_DatabaseSync2(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *logon_server /* [in] [charset(UTF16)] */,
-				   const char *computername /* [in] [charset(UTF16)] */,
-				   struct netr_Authenticator *credential /* [in] [ref] */,
-				   struct netr_Authenticator *return_authenticator /* [in,out] [ref] */,
-				   enum netr_SamDatabaseID database_id /* [in]  */,
-				   uint16_t restart_state /* [in]  */,
-				   uint32_t *sync_context /* [in,out] [ref] */,
-				   struct netr_DELTA_ENUM_ARRAY **delta_enum_array /* [out] [ref] */,
-				   uint32_t preferredmaximumlength /* [in]  */);
-NTSTATUS rpccli_netr_DatabaseRedo(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  const char *logon_server /* [in] [charset(UTF16)] */,
-				  const char *computername /* [in] [charset(UTF16)] */,
-				  struct netr_Authenticator credential /* [in]  */,
-				  struct netr_Authenticator *return_authenticator /* [in,out] [ref] */,
-				  uint8_t *change_log_entry /* [in] [unique,size_is(change_log_entry_size)] */,
-				  uint32_t change_log_entry_size /* [in]  */,
-				  struct netr_DELTA_ENUM_ARRAY *delta_enum_array /* [out] [ref] */);
-NTSTATUS rpccli_netr_LogonControl2Ex(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     const char *logon_server /* [in] [unique,charset(UTF16)] */,
-				     uint32_t function_code /* [in]  */,
-				     uint32_t level /* [in]  */,
-				     union netr_CONTROL_DATA_INFORMATION data /* [in] [switch_is(function_code)] */,
-				     union netr_CONTROL_QUERY_INFORMATION *query /* [out] [ref,switch_is(level)] */,
-				     WERROR *werror);
-NTSTATUS rpccli_netr_NetrEnumerateTrustedDomains(struct rpc_pipe_client *cli,
-						 TALLOC_CTX *mem_ctx,
-						 const char *server_name /* [in] [unique,charset(UTF16)] */,
-						 struct netr_Blob *trusted_domains_blob /* [out] [ref] */,
-						 WERROR *werror);
-NTSTATUS rpccli_netr_DsRGetDCName(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				  const char *domain_name /* [in] [unique,charset(UTF16)] */,
-				  struct GUID *domain_guid /* [in] [unique] */,
-				  struct GUID *site_guid /* [in] [unique] */,
-				  uint32_t flags /* [in]  */,
-				  struct netr_DsRGetDCNameInfo **info /* [out] [ref] */,
-				  WERROR *werror);
-NTSTATUS rpccli_netr_NETRLOGONDUMMYROUTINE1(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    WERROR *werror);
-NTSTATUS rpccli_netr_NETRLOGONSETSERVICEBITS(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx,
-					     WERROR *werror);
-NTSTATUS rpccli_netr_LogonGetTrustRid(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      const char *server_name /* [in] [unique,charset(UTF16)] */,
-				      const char *domain_name /* [in] [unique,charset(UTF16)] */,
-				      uint32_t *rid /* [out] [ref] */,
-				      WERROR *werror);
-NTSTATUS rpccli_netr_NETRLOGONCOMPUTESERVERDIGEST(struct rpc_pipe_client *cli,
-						  TALLOC_CTX *mem_ctx,
-						  WERROR *werror);
-NTSTATUS rpccli_netr_NETRLOGONCOMPUTECLIENTDIGEST(struct rpc_pipe_client *cli,
-						  TALLOC_CTX *mem_ctx,
-						  WERROR *werror);
-NTSTATUS rpccli_netr_ServerAuthenticate3(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 const char *server_name /* [in] [unique,charset(UTF16)] */,
-					 const char *account_name /* [in] [charset(UTF16)] */,
-					 enum netr_SchannelType secure_channel_type /* [in]  */,
-					 const char *computer_name /* [in] [charset(UTF16)] */,
-					 struct netr_Credential *credentials /* [in,out] [ref] */,
-					 uint32_t *negotiate_flags /* [in,out] [ref] */,
-					 uint32_t *rid /* [out] [ref] */);
-NTSTATUS rpccli_netr_DsRGetDCNameEx(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				    const char *domain_name /* [in] [unique,charset(UTF16)] */,
-				    struct GUID *domain_guid /* [in] [unique] */,
-				    const char *site_name /* [in] [unique,charset(UTF16)] */,
-				    uint32_t flags /* [in]  */,
-				    struct netr_DsRGetDCNameInfo **info /* [out] [ref] */,
-				    WERROR *werror);
-NTSTATUS rpccli_netr_DsRGetSiteName(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    const char *computer_name /* [in] [unique,charset(UTF16)] */,
-				    const char **site /* [out] [ref,charset(UTF16)] */,
-				    WERROR *werror);
-NTSTATUS rpccli_netr_LogonGetDomainInfo(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					const char *server_name /* [in] [charset(UTF16)] */,
-					const char *computer_name /* [in] [unique,charset(UTF16)] */,
-					struct netr_Authenticator *credential /* [in] [ref] */,
-					struct netr_Authenticator *return_authenticator /* [in,out] [ref] */,
-					uint32_t level /* [in]  */,
-					union netr_DomainQuery query /* [in] [switch_is(level)] */,
-					union netr_DomainInfo *info /* [out] [ref,switch_is(level)] */);
-NTSTATUS rpccli_netr_ServerPasswordSet2(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					const char *server_name /* [in] [unique,charset(UTF16)] */,
-					const char *account_name /* [in] [charset(UTF16)] */,
-					enum netr_SchannelType secure_channel_type /* [in]  */,
-					const char *computer_name /* [in] [charset(UTF16)] */,
-					struct netr_Authenticator credential /* [in]  */,
-					struct netr_CryptPassword new_password /* [in]  */,
-					struct netr_Authenticator *return_authenticator /* [out] [ref] */);
-NTSTATUS rpccli_netr_ServerPasswordGet(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       const char *server_name /* [in] [unique,charset(UTF16)] */,
-				       const char *account_name /* [in] [charset(UTF16)] */,
-				       enum netr_SchannelType secure_channel_type /* [in]  */,
-				       const char *computer_name /* [in] [charset(UTF16)] */,
-				       struct netr_Authenticator *credential /* [in] [ref] */,
-				       struct netr_Authenticator *return_authenticator /* [out] [ref] */,
-				       struct samr_Password *password /* [out] [ref] */,
-				       WERROR *werror);
-NTSTATUS rpccli_netr_NETRLOGONSENDTOSAM(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					WERROR *werror);
-NTSTATUS rpccli_netr_DsRAddressToSitenamesW(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    const char *server_name /* [in] [unique,charset(UTF16)] */,
-					    uint32_t count /* [in] [range(0,32000)] */,
-					    struct netr_DsRAddress *addresses /* [in] [ref,size_is(count)] */,
-					    struct netr_DsRAddressToSitenamesWCtr **ctr /* [out] [ref] */,
-					    WERROR *werror);
-NTSTATUS rpccli_netr_DsRGetDCNameEx2(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				     const char *client_account /* [in] [unique,charset(UTF16)] */,
-				     uint32_t mask /* [in]  */,
-				     const char *domain_name /* [in] [unique,charset(UTF16)] */,
-				     struct GUID *domain_guid /* [in] [unique] */,
-				     const char *site_name /* [in] [unique,charset(UTF16)] */,
-				     uint32_t flags /* [in]  */,
-				     struct netr_DsRGetDCNameInfo **info /* [out] [ref] */,
-				     WERROR *werror);
-NTSTATUS rpccli_netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN(struct rpc_pipe_client *cli,
-							 TALLOC_CTX *mem_ctx,
-							 WERROR *werror);
-NTSTATUS rpccli_netr_NetrEnumerateTrustedDomainsEx(struct rpc_pipe_client *cli,
-						   TALLOC_CTX *mem_ctx,
-						   const char *server_name /* [in] [unique,charset(UTF16)] */,
-						   struct netr_DomainTrustList *dom_trust_list /* [out] [ref] */,
-						   WERROR *werror);
-NTSTATUS rpccli_netr_DsRAddressToSitenamesExW(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      const char *server_name /* [in] [unique,charset(UTF16)] */,
-					      uint32_t count /* [in] [range(0,32000)] */,
-					      struct netr_DsRAddress *addresses /* [in] [ref,size_is(count)] */,
-					      struct netr_DsRAddressToSitenamesExWCtr **ctr /* [out] [ref] */,
-					      WERROR *werror);
-NTSTATUS rpccli_netr_DsrGetDcSiteCoverageW(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   const char *server_name /* [in] [unique,charset(UTF16)] */,
-					   struct DcSitesCtr *ctr /* [out] [ref] */,
-					   WERROR *werror);
-NTSTATUS rpccli_netr_LogonSamLogonEx(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     const char *server_name /* [in] [unique,charset(UTF16)] */,
-				     const char *computer_name /* [in] [unique,charset(UTF16)] */,
-				     enum netr_LogonLevel logon_level /* [in]  */,
-				     union netr_LogonInfo *logon /* [in] [ref,switch_is(logon_level)] */,
-				     uint16_t validation_level /* [in]  */,
-				     union netr_Validation *validation /* [out] [ref,switch_is(validation_level)] */,
-				     uint8_t *authoritative /* [out] [ref] */,
-				     uint32_t *flags /* [in,out] [ref] */);
-NTSTATUS rpccli_netr_DsrEnumerateDomainTrusts(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      const char *server_name /* [in] [unique,charset(UTF16)] */,
-					      uint32_t trust_flags /* [in]  */,
-					      struct netr_DomainTrustList *trusts /* [out] [ref] */,
-					      WERROR *werror);
-NTSTATUS rpccli_netr_DsrDeregisterDNSHostRecords(struct rpc_pipe_client *cli,
-						 TALLOC_CTX *mem_ctx,
-						 const char *server_name /* [in] [unique,charset(UTF16)] */,
-						 const char *domain /* [in] [unique,charset(UTF16)] */,
-						 struct GUID *domain_guid /* [in] [unique] */,
-						 struct GUID *dsa_guid /* [in] [unique] */,
-						 const char *dns_host /* [in] [ref,charset(UTF16)] */,
-						 WERROR *werror);
-NTSTATUS rpccli_netr_ServerTrustPasswordsGet(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx,
-					     const char *server_name /* [in] [unique,charset(UTF16)] */,
-					     const char *account_name /* [in] [charset(UTF16)] */,
-					     enum netr_SchannelType secure_channel_type /* [in]  */,
-					     const char *computer_name /* [in] [charset(UTF16)] */,
-					     struct netr_Authenticator *credential /* [in] [ref] */,
-					     struct netr_Authenticator *return_authenticator /* [out] [ref] */,
-					     struct samr_Password *password /* [out] [ref] */,
-					     struct samr_Password *password2 /* [out] [ref] */);
-NTSTATUS rpccli_netr_DsRGetForestTrustInformation(struct rpc_pipe_client *cli,
-						  TALLOC_CTX *mem_ctx,
-						  const char *server_name /* [in] [unique,charset(UTF16)] */,
-						  const char *trusted_domain_name /* [in] [unique,charset(UTF16)] */,
-						  uint32_t flags /* [in]  */,
-						  struct lsa_ForestTrustInformation **forest_trust_info /* [out] [ref] */,
-						  WERROR *werror);
-NTSTATUS rpccli_netr_GetForestTrustInformation(struct rpc_pipe_client *cli,
-					       TALLOC_CTX *mem_ctx,
-					       const char *server_name /* [in] [unique,charset(UTF16)] */,
-					       const char *trusted_domain_name /* [in] [ref,charset(UTF16)] */,
-					       struct netr_Authenticator *credential /* [in] [ref] */,
-					       struct netr_Authenticator *return_authenticator /* [out] [ref] */,
-					       uint32_t flags /* [in]  */,
-					       struct lsa_ForestTrustInformation **forest_trust_info /* [out] [ref] */,
-					       WERROR *werror);
-NTSTATUS rpccli_netr_LogonSamLogonWithFlags(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    const char *server_name /* [in] [unique,charset(UTF16)] */,
-					    const char *computer_name /* [in] [unique,charset(UTF16)] */,
-					    struct netr_Authenticator *credential /* [in] [unique] */,
-					    struct netr_Authenticator *return_authenticator /* [in,out] [unique] */,
-					    enum netr_LogonLevel logon_level /* [in]  */,
-					    union netr_LogonInfo logon /* [in] [switch_is(logon_level)] */,
-					    uint16_t validation_level /* [in]  */,
-					    union netr_Validation *validation /* [out] [ref,switch_is(validation_level)] */,
-					    uint8_t *authoritative /* [out] [ref] */,
-					    uint32_t *flags /* [in,out] [ref] */);
-NTSTATUS rpccli_netr_NETRSERVERGETTRUSTINFO(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    WERROR *werror);
-#endif /* __CLI_NETLOGON__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_ntsvcs.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_ntsvcs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_ntsvcs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,2783 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * client auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/cli_ntsvcs.h"
-
-NTSTATUS rpccli_PNP_Disconnect(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       WERROR *werror)
-{
-	struct PNP_Disconnect r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_Disconnect, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_DISCONNECT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_Disconnect, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_Connect(struct rpc_pipe_client *cli,
-			    TALLOC_CTX *mem_ctx,
-			    WERROR *werror)
-{
-	struct PNP_Connect r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_Connect, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_CONNECT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_Connect, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetVersion(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       uint16_t *version /* [out] [ref] */,
-			       WERROR *werror)
-{
-	struct PNP_GetVersion r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetVersion, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETVERSION,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetVersion, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*version = *r.out.version;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetGlobalState(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   WERROR *werror)
-{
-	struct PNP_GetGlobalState r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetGlobalState, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETGLOBALSTATE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetGlobalState, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_InitDetection(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  WERROR *werror)
-{
-	struct PNP_InitDetection r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_InitDetection, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_INITDETECTION,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_InitDetection, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_ReportLogOn(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				WERROR *werror)
-{
-	struct PNP_ReportLogOn r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_ReportLogOn, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_REPORTLOGON,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_ReportLogOn, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_ValidateDeviceInstance(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   const char *devicepath /* [in] [ref,charset(UTF16)] */,
-					   uint32_t flags /* [in]  */,
-					   WERROR *werror)
-{
-	struct PNP_ValidateDeviceInstance r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.devicepath = devicepath;
-	r.in.flags = flags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_ValidateDeviceInstance, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_VALIDATEDEVICEINSTANCE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_ValidateDeviceInstance, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetRootDeviceInstance(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  WERROR *werror)
-{
-	struct PNP_GetRootDeviceInstance r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetRootDeviceInstance, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETROOTDEVICEINSTANCE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetRootDeviceInstance, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetRelatedDeviceInstance(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx,
-					     WERROR *werror)
-{
-	struct PNP_GetRelatedDeviceInstance r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetRelatedDeviceInstance, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETRELATEDDEVICEINSTANCE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetRelatedDeviceInstance, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_EnumerateSubKeys(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     WERROR *werror)
-{
-	struct PNP_EnumerateSubKeys r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_EnumerateSubKeys, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_ENUMERATESUBKEYS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_EnumerateSubKeys, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetDeviceList(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  WERROR *werror)
-{
-	struct PNP_GetDeviceList r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetDeviceList, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETDEVICELIST,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetDeviceList, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetDeviceListSize(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      const char *devicename /* [in] [unique,charset(UTF16)] */,
-				      uint32_t *size /* [out] [ref] */,
-				      uint32_t flags /* [in]  */,
-				      WERROR *werror)
-{
-	struct PNP_GetDeviceListSize r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.devicename = devicename;
-	r.in.flags = flags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetDeviceListSize, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETDEVICELISTSIZE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetDeviceListSize, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*size = *r.out.size;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetDepth(struct rpc_pipe_client *cli,
-			     TALLOC_CTX *mem_ctx,
-			     WERROR *werror)
-{
-	struct PNP_GetDepth r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetDepth, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETDEPTH,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetDepth, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetDeviceRegProp(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     WERROR *werror)
-{
-	struct PNP_GetDeviceRegProp r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetDeviceRegProp, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETDEVICEREGPROP,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetDeviceRegProp, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_SetDeviceRegProp(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     WERROR *werror)
-{
-	struct PNP_SetDeviceRegProp r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_SetDeviceRegProp, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_SETDEVICEREGPROP,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_SetDeviceRegProp, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetClassInstance(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     WERROR *werror)
-{
-	struct PNP_GetClassInstance r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetClassInstance, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETCLASSINSTANCE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetClassInstance, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_CreateKey(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      WERROR *werror)
-{
-	struct PNP_CreateKey r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_CreateKey, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_CREATEKEY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_CreateKey, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_DeleteRegistryKey(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      WERROR *werror)
-{
-	struct PNP_DeleteRegistryKey r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_DeleteRegistryKey, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_DELETEREGISTRYKEY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_DeleteRegistryKey, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetClassCount(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  WERROR *werror)
-{
-	struct PNP_GetClassCount r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetClassCount, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETCLASSCOUNT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetClassCount, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetClassName(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 WERROR *werror)
-{
-	struct PNP_GetClassName r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetClassName, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETCLASSNAME,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetClassName, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_DeleteClassKey(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   WERROR *werror)
-{
-	struct PNP_DeleteClassKey r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_DeleteClassKey, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_DELETECLASSKEY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_DeleteClassKey, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetInterfaceDeviceAlias(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    WERROR *werror)
-{
-	struct PNP_GetInterfaceDeviceAlias r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetInterfaceDeviceAlias, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETINTERFACEDEVICEALIAS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetInterfaceDeviceAlias, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetInterfaceDeviceList(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   WERROR *werror)
-{
-	struct PNP_GetInterfaceDeviceList r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetInterfaceDeviceList, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETINTERFACEDEVICELIST,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetInterfaceDeviceList, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetInterfaceDeviceListSize(struct rpc_pipe_client *cli,
-					       TALLOC_CTX *mem_ctx,
-					       WERROR *werror)
-{
-	struct PNP_GetInterfaceDeviceListSize r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetInterfaceDeviceListSize, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETINTERFACEDEVICELISTSIZE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetInterfaceDeviceListSize, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_RegisterDeviceClassAssociation(struct rpc_pipe_client *cli,
-						   TALLOC_CTX *mem_ctx,
-						   WERROR *werror)
-{
-	struct PNP_RegisterDeviceClassAssociation r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_RegisterDeviceClassAssociation, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_REGISTERDEVICECLASSASSOCIATION,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_RegisterDeviceClassAssociation, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_UnregisterDeviceClassAssociation(struct rpc_pipe_client *cli,
-						     TALLOC_CTX *mem_ctx,
-						     WERROR *werror)
-{
-	struct PNP_UnregisterDeviceClassAssociation r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_UnregisterDeviceClassAssociation, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_UNREGISTERDEVICECLASSASSOCIATION,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_UnregisterDeviceClassAssociation, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetClassRegProp(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    WERROR *werror)
-{
-	struct PNP_GetClassRegProp r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetClassRegProp, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETCLASSREGPROP,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetClassRegProp, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_SetClassRegProp(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    WERROR *werror)
-{
-	struct PNP_SetClassRegProp r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_SetClassRegProp, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_SETCLASSREGPROP,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_SetClassRegProp, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_CreateDevInst(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  WERROR *werror)
-{
-	struct PNP_CreateDevInst r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_CreateDevInst, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_CREATEDEVINST,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_CreateDevInst, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_DeviceInstanceAction(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 WERROR *werror)
-{
-	struct PNP_DeviceInstanceAction r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_DeviceInstanceAction, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_DEVICEINSTANCEACTION,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_DeviceInstanceAction, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetDeviceStatus(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    WERROR *werror)
-{
-	struct PNP_GetDeviceStatus r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetDeviceStatus, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETDEVICESTATUS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetDeviceStatus, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_SetDeviceProblem(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     WERROR *werror)
-{
-	struct PNP_SetDeviceProblem r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_SetDeviceProblem, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_SETDEVICEPROBLEM,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_SetDeviceProblem, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_DisableDevInst(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   WERROR *werror)
-{
-	struct PNP_DisableDevInst r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_DisableDevInst, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_DISABLEDEVINST,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_DisableDevInst, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_UninstallDevInst(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     WERROR *werror)
-{
-	struct PNP_UninstallDevInst r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_UninstallDevInst, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_UNINSTALLDEVINST,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_UninstallDevInst, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_AddID(struct rpc_pipe_client *cli,
-			  TALLOC_CTX *mem_ctx,
-			  WERROR *werror)
-{
-	struct PNP_AddID r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_AddID, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_ADDID,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_AddID, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_RegisterDriver(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   WERROR *werror)
-{
-	struct PNP_RegisterDriver r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_RegisterDriver, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_REGISTERDRIVER,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_RegisterDriver, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_QueryRemove(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				WERROR *werror)
-{
-	struct PNP_QueryRemove r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_QueryRemove, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_QUERYREMOVE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_QueryRemove, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_RequestDeviceEject(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       WERROR *werror)
-{
-	struct PNP_RequestDeviceEject r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_RequestDeviceEject, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_REQUESTDEVICEEJECT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_RequestDeviceEject, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_IsDockStationPresent(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 WERROR *werror)
-{
-	struct PNP_IsDockStationPresent r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_IsDockStationPresent, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_ISDOCKSTATIONPRESENT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_IsDockStationPresent, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_RequestEjectPC(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   WERROR *werror)
-{
-	struct PNP_RequestEjectPC r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_RequestEjectPC, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_REQUESTEJECTPC,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_RequestEjectPC, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_HwProfFlags(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				uint32_t unknown1 /* [in]  */,
-				const char *devicepath /* [in] [ref,charset(UTF16)] */,
-				uint32_t unknown2 /* [in]  */,
-				uint32_t *unknown3 /* [in,out] [ref] */,
-				uint16_t *unknown4 /* [in,out] [unique] */,
-				const char *unknown5 /* [in] [unique,charset(UTF16)] */,
-				const char **unknown5a /* [out] [unique,charset(UTF16)] */,
-				uint32_t unknown6 /* [in]  */,
-				uint32_t unknown7 /* [in]  */,
-				WERROR *werror)
-{
-	struct PNP_HwProfFlags r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.unknown1 = unknown1;
-	r.in.devicepath = devicepath;
-	r.in.unknown2 = unknown2;
-	r.in.unknown3 = unknown3;
-	r.in.unknown4 = unknown4;
-	r.in.unknown5 = unknown5;
-	r.in.unknown6 = unknown6;
-	r.in.unknown7 = unknown7;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_HwProfFlags, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_HWPROFFLAGS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_HwProfFlags, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*unknown3 = *r.out.unknown3;
-	if (unknown4 && r.out.unknown4) {
-		*unknown4 = *r.out.unknown4;
-	}
-	if (unknown5a && r.out.unknown5a) {
-		*unknown5a = *r.out.unknown5a;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetHwProfInfo(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  uint32_t idx /* [in]  */,
-				  struct PNP_HwProfInfo *info /* [in,out] [ref] */,
-				  uint32_t unknown1 /* [in]  */,
-				  uint32_t unknown2 /* [in]  */,
-				  WERROR *werror)
-{
-	struct PNP_GetHwProfInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.idx = idx;
-	r.in.info = info;
-	r.in.unknown1 = unknown1;
-	r.in.unknown2 = unknown2;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetHwProfInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETHWPROFINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetHwProfInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_AddEmptyLogConf(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    WERROR *werror)
-{
-	struct PNP_AddEmptyLogConf r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_AddEmptyLogConf, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_ADDEMPTYLOGCONF,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_AddEmptyLogConf, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_FreeLogConf(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				WERROR *werror)
-{
-	struct PNP_FreeLogConf r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_FreeLogConf, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_FREELOGCONF,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_FreeLogConf, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetFirstLogConf(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    WERROR *werror)
-{
-	struct PNP_GetFirstLogConf r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetFirstLogConf, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETFIRSTLOGCONF,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetFirstLogConf, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetNextLogConf(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   WERROR *werror)
-{
-	struct PNP_GetNextLogConf r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetNextLogConf, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETNEXTLOGCONF,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetNextLogConf, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetLogConfPriority(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       WERROR *werror)
-{
-	struct PNP_GetLogConfPriority r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetLogConfPriority, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETLOGCONFPRIORITY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetLogConfPriority, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_AddResDes(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      WERROR *werror)
-{
-	struct PNP_AddResDes r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_AddResDes, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_ADDRESDES,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_AddResDes, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_FreeResDes(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       WERROR *werror)
-{
-	struct PNP_FreeResDes r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_FreeResDes, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_FREERESDES,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_FreeResDes, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetNextResDes(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  WERROR *werror)
-{
-	struct PNP_GetNextResDes r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetNextResDes, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETNEXTRESDES,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetNextResDes, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetResDesData(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  WERROR *werror)
-{
-	struct PNP_GetResDesData r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetResDesData, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETRESDESDATA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetResDesData, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetResDesDataSize(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      WERROR *werror)
-{
-	struct PNP_GetResDesDataSize r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetResDesDataSize, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETRESDESDATASIZE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetResDesDataSize, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_ModifyResDes(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 WERROR *werror)
-{
-	struct PNP_ModifyResDes r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_ModifyResDes, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_MODIFYRESDES,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_ModifyResDes, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_DetectResourceLimit(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					WERROR *werror)
-{
-	struct PNP_DetectResourceLimit r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_DetectResourceLimit, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_DETECTRESOURCELIMIT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_DetectResourceLimit, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_QueryResConfList(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     WERROR *werror)
-{
-	struct PNP_QueryResConfList r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_QueryResConfList, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_QUERYRESCONFLIST,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_QueryResConfList, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_SetHwProf(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      WERROR *werror)
-{
-	struct PNP_SetHwProf r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_SetHwProf, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_SETHWPROF,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_SetHwProf, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_QueryArbitratorFreeData(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    WERROR *werror)
-{
-	struct PNP_QueryArbitratorFreeData r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_QueryArbitratorFreeData, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_QUERYARBITRATORFREEDATA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_QueryArbitratorFreeData, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_QueryArbitratorFreeSize(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    WERROR *werror)
-{
-	struct PNP_QueryArbitratorFreeSize r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_QueryArbitratorFreeSize, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_QUERYARBITRATORFREESIZE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_QueryArbitratorFreeSize, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_RunDetection(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 WERROR *werror)
-{
-	struct PNP_RunDetection r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_RunDetection, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_RUNDETECTION,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_RunDetection, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_RegisterNotification(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 WERROR *werror)
-{
-	struct PNP_RegisterNotification r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_RegisterNotification, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_REGISTERNOTIFICATION,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_RegisterNotification, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_UnregisterNotification(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   WERROR *werror)
-{
-	struct PNP_UnregisterNotification r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_UnregisterNotification, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_UNREGISTERNOTIFICATION,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_UnregisterNotification, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetCustomDevProp(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     WERROR *werror)
-{
-	struct PNP_GetCustomDevProp r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetCustomDevProp, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETCUSTOMDEVPROP,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetCustomDevProp, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetVersionInternal(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       WERROR *werror)
-{
-	struct PNP_GetVersionInternal r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetVersionInternal, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETVERSIONINTERNAL,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetVersionInternal, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetBlockedDriverInfo(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 WERROR *werror)
-{
-	struct PNP_GetBlockedDriverInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetBlockedDriverInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETBLOCKEDDRIVERINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetBlockedDriverInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_PNP_GetServerSideDeviceInstallFlags(struct rpc_pipe_client *cli,
-						    TALLOC_CTX *mem_ctx,
-						    WERROR *werror)
-{
-	struct PNP_GetServerSideDeviceInstallFlags r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetServerSideDeviceInstallFlags, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_NTSVCS,
-				&ndr_table_ntsvcs,
-				NDR_PNP_GETSERVERSIDEDEVICEINSTALLFLAGS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetServerSideDeviceInstallFlags, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_ntsvcs.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_ntsvcs.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_ntsvcs.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,218 +0,0 @@
-#include "librpc/gen_ndr/ndr_ntsvcs.h"
-#ifndef __CLI_NTSVCS__
-#define __CLI_NTSVCS__
-NTSTATUS rpccli_PNP_Disconnect(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       WERROR *werror);
-NTSTATUS rpccli_PNP_Connect(struct rpc_pipe_client *cli,
-			    TALLOC_CTX *mem_ctx,
-			    WERROR *werror);
-NTSTATUS rpccli_PNP_GetVersion(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       uint16_t *version /* [out] [ref] */,
-			       WERROR *werror);
-NTSTATUS rpccli_PNP_GetGlobalState(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   WERROR *werror);
-NTSTATUS rpccli_PNP_InitDetection(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  WERROR *werror);
-NTSTATUS rpccli_PNP_ReportLogOn(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				WERROR *werror);
-NTSTATUS rpccli_PNP_ValidateDeviceInstance(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   const char *devicepath /* [in] [ref,charset(UTF16)] */,
-					   uint32_t flags /* [in]  */,
-					   WERROR *werror);
-NTSTATUS rpccli_PNP_GetRootDeviceInstance(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  WERROR *werror);
-NTSTATUS rpccli_PNP_GetRelatedDeviceInstance(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx,
-					     WERROR *werror);
-NTSTATUS rpccli_PNP_EnumerateSubKeys(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     WERROR *werror);
-NTSTATUS rpccli_PNP_GetDeviceList(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  WERROR *werror);
-NTSTATUS rpccli_PNP_GetDeviceListSize(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      const char *devicename /* [in] [unique,charset(UTF16)] */,
-				      uint32_t *size /* [out] [ref] */,
-				      uint32_t flags /* [in]  */,
-				      WERROR *werror);
-NTSTATUS rpccli_PNP_GetDepth(struct rpc_pipe_client *cli,
-			     TALLOC_CTX *mem_ctx,
-			     WERROR *werror);
-NTSTATUS rpccli_PNP_GetDeviceRegProp(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     WERROR *werror);
-NTSTATUS rpccli_PNP_SetDeviceRegProp(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     WERROR *werror);
-NTSTATUS rpccli_PNP_GetClassInstance(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     WERROR *werror);
-NTSTATUS rpccli_PNP_CreateKey(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      WERROR *werror);
-NTSTATUS rpccli_PNP_DeleteRegistryKey(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      WERROR *werror);
-NTSTATUS rpccli_PNP_GetClassCount(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  WERROR *werror);
-NTSTATUS rpccli_PNP_GetClassName(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 WERROR *werror);
-NTSTATUS rpccli_PNP_DeleteClassKey(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   WERROR *werror);
-NTSTATUS rpccli_PNP_GetInterfaceDeviceAlias(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    WERROR *werror);
-NTSTATUS rpccli_PNP_GetInterfaceDeviceList(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   WERROR *werror);
-NTSTATUS rpccli_PNP_GetInterfaceDeviceListSize(struct rpc_pipe_client *cli,
-					       TALLOC_CTX *mem_ctx,
-					       WERROR *werror);
-NTSTATUS rpccli_PNP_RegisterDeviceClassAssociation(struct rpc_pipe_client *cli,
-						   TALLOC_CTX *mem_ctx,
-						   WERROR *werror);
-NTSTATUS rpccli_PNP_UnregisterDeviceClassAssociation(struct rpc_pipe_client *cli,
-						     TALLOC_CTX *mem_ctx,
-						     WERROR *werror);
-NTSTATUS rpccli_PNP_GetClassRegProp(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    WERROR *werror);
-NTSTATUS rpccli_PNP_SetClassRegProp(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    WERROR *werror);
-NTSTATUS rpccli_PNP_CreateDevInst(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  WERROR *werror);
-NTSTATUS rpccli_PNP_DeviceInstanceAction(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 WERROR *werror);
-NTSTATUS rpccli_PNP_GetDeviceStatus(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    WERROR *werror);
-NTSTATUS rpccli_PNP_SetDeviceProblem(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     WERROR *werror);
-NTSTATUS rpccli_PNP_DisableDevInst(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   WERROR *werror);
-NTSTATUS rpccli_PNP_UninstallDevInst(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     WERROR *werror);
-NTSTATUS rpccli_PNP_AddID(struct rpc_pipe_client *cli,
-			  TALLOC_CTX *mem_ctx,
-			  WERROR *werror);
-NTSTATUS rpccli_PNP_RegisterDriver(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   WERROR *werror);
-NTSTATUS rpccli_PNP_QueryRemove(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				WERROR *werror);
-NTSTATUS rpccli_PNP_RequestDeviceEject(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       WERROR *werror);
-NTSTATUS rpccli_PNP_IsDockStationPresent(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 WERROR *werror);
-NTSTATUS rpccli_PNP_RequestEjectPC(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   WERROR *werror);
-NTSTATUS rpccli_PNP_HwProfFlags(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				uint32_t unknown1 /* [in]  */,
-				const char *devicepath /* [in] [ref,charset(UTF16)] */,
-				uint32_t unknown2 /* [in]  */,
-				uint32_t *unknown3 /* [in,out] [ref] */,
-				uint16_t *unknown4 /* [in,out] [unique] */,
-				const char *unknown5 /* [in] [unique,charset(UTF16)] */,
-				const char **unknown5a /* [out] [unique,charset(UTF16)] */,
-				uint32_t unknown6 /* [in]  */,
-				uint32_t unknown7 /* [in]  */,
-				WERROR *werror);
-NTSTATUS rpccli_PNP_GetHwProfInfo(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  uint32_t idx /* [in]  */,
-				  struct PNP_HwProfInfo *info /* [in,out] [ref] */,
-				  uint32_t unknown1 /* [in]  */,
-				  uint32_t unknown2 /* [in]  */,
-				  WERROR *werror);
-NTSTATUS rpccli_PNP_AddEmptyLogConf(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    WERROR *werror);
-NTSTATUS rpccli_PNP_FreeLogConf(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				WERROR *werror);
-NTSTATUS rpccli_PNP_GetFirstLogConf(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    WERROR *werror);
-NTSTATUS rpccli_PNP_GetNextLogConf(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   WERROR *werror);
-NTSTATUS rpccli_PNP_GetLogConfPriority(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       WERROR *werror);
-NTSTATUS rpccli_PNP_AddResDes(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      WERROR *werror);
-NTSTATUS rpccli_PNP_FreeResDes(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       WERROR *werror);
-NTSTATUS rpccli_PNP_GetNextResDes(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  WERROR *werror);
-NTSTATUS rpccli_PNP_GetResDesData(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  WERROR *werror);
-NTSTATUS rpccli_PNP_GetResDesDataSize(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      WERROR *werror);
-NTSTATUS rpccli_PNP_ModifyResDes(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 WERROR *werror);
-NTSTATUS rpccli_PNP_DetectResourceLimit(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					WERROR *werror);
-NTSTATUS rpccli_PNP_QueryResConfList(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     WERROR *werror);
-NTSTATUS rpccli_PNP_SetHwProf(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      WERROR *werror);
-NTSTATUS rpccli_PNP_QueryArbitratorFreeData(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    WERROR *werror);
-NTSTATUS rpccli_PNP_QueryArbitratorFreeSize(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    WERROR *werror);
-NTSTATUS rpccli_PNP_RunDetection(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 WERROR *werror);
-NTSTATUS rpccli_PNP_RegisterNotification(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 WERROR *werror);
-NTSTATUS rpccli_PNP_UnregisterNotification(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   WERROR *werror);
-NTSTATUS rpccli_PNP_GetCustomDevProp(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     WERROR *werror);
-NTSTATUS rpccli_PNP_GetVersionInternal(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       WERROR *werror);
-NTSTATUS rpccli_PNP_GetBlockedDriverInfo(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 WERROR *werror);
-NTSTATUS rpccli_PNP_GetServerSideDeviceInstallFlags(struct rpc_pipe_client *cli,
-						    TALLOC_CTX *mem_ctx,
-						    WERROR *werror);
-#endif /* __CLI_NTSVCS__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_samr.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_samr.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_samr.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,3030 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * client auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/cli_samr.h"
-
-NTSTATUS rpccli_samr_Connect(struct rpc_pipe_client *cli,
-			     TALLOC_CTX *mem_ctx,
-			     uint16_t *system_name /* [in] [unique] */,
-			     uint32_t access_mask /* [in]  */,
-			     struct policy_handle *connect_handle /* [out] [ref] */)
-{
-	struct samr_Connect r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.system_name = system_name;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_Connect, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_CONNECT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_Connect, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*connect_handle = *r.out.connect_handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_Close(struct rpc_pipe_client *cli,
-			   TALLOC_CTX *mem_ctx,
-			   struct policy_handle *handle /* [in,out] [ref] */)
-{
-	struct samr_Close r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_Close, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_CLOSE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_Close, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*handle = *r.out.handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_SetSecurity(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *handle /* [in] [ref] */,
-				 uint32_t sec_info /* [in]  */,
-				 struct sec_desc_buf *sdbuf /* [in] [ref] */)
-{
-	struct samr_SetSecurity r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.sec_info = sec_info;
-	r.in.sdbuf = sdbuf;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_SetSecurity, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_SETSECURITY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_SetSecurity, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_QuerySecurity(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   struct policy_handle *handle /* [in] [ref] */,
-				   uint32_t sec_info /* [in]  */,
-				   struct sec_desc_buf **sdbuf /* [out] [ref] */)
-{
-	struct samr_QuerySecurity r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.sec_info = sec_info;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_QuerySecurity, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_QUERYSECURITY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_QuerySecurity, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*sdbuf = *r.out.sdbuf;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_Shutdown(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      struct policy_handle *connect_handle /* [in] [ref] */)
-{
-	struct samr_Shutdown r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.connect_handle = connect_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_Shutdown, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_SHUTDOWN,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_Shutdown, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_LookupDomain(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  struct policy_handle *connect_handle /* [in] [ref] */,
-				  struct lsa_String *domain_name /* [in] [ref] */,
-				  struct dom_sid2 **sid /* [out] [ref] */)
-{
-	struct samr_LookupDomain r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.connect_handle = connect_handle;
-	r.in.domain_name = domain_name;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_LookupDomain, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_LOOKUPDOMAIN,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_LookupDomain, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*sid = *r.out.sid;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_EnumDomains(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *connect_handle /* [in] [ref] */,
-				 uint32_t *resume_handle /* [in,out] [ref] */,
-				 struct samr_SamArray **sam /* [out] [ref] */,
-				 uint32_t buf_size /* [in]  */,
-				 uint32_t *num_entries /* [out] [ref] */)
-{
-	struct samr_EnumDomains r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.connect_handle = connect_handle;
-	r.in.resume_handle = resume_handle;
-	r.in.buf_size = buf_size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_EnumDomains, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_ENUMDOMAINS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_EnumDomains, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*resume_handle = *r.out.resume_handle;
-	*sam = *r.out.sam;
-	*num_entries = *r.out.num_entries;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_OpenDomain(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				struct policy_handle *connect_handle /* [in] [ref] */,
-				uint32_t access_mask /* [in]  */,
-				struct dom_sid2 *sid /* [in] [ref] */,
-				struct policy_handle *domain_handle /* [out] [ref] */)
-{
-	struct samr_OpenDomain r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.connect_handle = connect_handle;
-	r.in.access_mask = access_mask;
-	r.in.sid = sid;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_OpenDomain, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_OPENDOMAIN,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_OpenDomain, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*domain_handle = *r.out.domain_handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_QueryDomainInfo(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     struct policy_handle *domain_handle /* [in] [ref] */,
-				     uint16_t level /* [in]  */,
-				     union samr_DomainInfo **info /* [out] [ref,switch_is(level)] */)
-{
-	struct samr_QueryDomainInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-	r.in.level = level;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_QueryDomainInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_QUERYDOMAININFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_QueryDomainInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_SetDomainInfo(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   struct policy_handle *domain_handle /* [in] [ref] */,
-				   uint16_t level /* [in]  */,
-				   union samr_DomainInfo *info /* [in] [ref,switch_is(level)] */)
-{
-	struct samr_SetDomainInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-	r.in.level = level;
-	r.in.info = info;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_SetDomainInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_SETDOMAININFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_SetDomainInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_CreateDomainGroup(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct policy_handle *domain_handle /* [in] [ref] */,
-				       struct lsa_String *name /* [in] [ref] */,
-				       uint32_t access_mask /* [in]  */,
-				       struct policy_handle *group_handle /* [out] [ref] */,
-				       uint32_t *rid /* [out] [ref] */)
-{
-	struct samr_CreateDomainGroup r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-	r.in.name = name;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_CreateDomainGroup, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_CREATEDOMAINGROUP,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_CreateDomainGroup, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*group_handle = *r.out.group_handle;
-	*rid = *r.out.rid;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_EnumDomainGroups(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *domain_handle /* [in] [ref] */,
-				      uint32_t *resume_handle /* [in,out] [ref] */,
-				      struct samr_SamArray **sam /* [out] [ref] */,
-				      uint32_t max_size /* [in]  */,
-				      uint32_t *num_entries /* [out] [ref] */)
-{
-	struct samr_EnumDomainGroups r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-	r.in.resume_handle = resume_handle;
-	r.in.max_size = max_size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_EnumDomainGroups, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_ENUMDOMAINGROUPS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_EnumDomainGroups, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*resume_handle = *r.out.resume_handle;
-	*sam = *r.out.sam;
-	*num_entries = *r.out.num_entries;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_CreateUser(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				struct policy_handle *domain_handle /* [in] [ref] */,
-				struct lsa_String *account_name /* [in] [ref] */,
-				uint32_t access_mask /* [in]  */,
-				struct policy_handle *user_handle /* [out] [ref] */,
-				uint32_t *rid /* [out] [ref] */)
-{
-	struct samr_CreateUser r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-	r.in.account_name = account_name;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_CreateUser, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_CREATEUSER,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_CreateUser, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*user_handle = *r.out.user_handle;
-	*rid = *r.out.rid;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_EnumDomainUsers(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     struct policy_handle *domain_handle /* [in] [ref] */,
-				     uint32_t *resume_handle /* [in,out] [ref] */,
-				     uint32_t acct_flags /* [in]  */,
-				     struct samr_SamArray **sam /* [out] [ref] */,
-				     uint32_t max_size /* [in]  */,
-				     uint32_t *num_entries /* [out] [ref] */)
-{
-	struct samr_EnumDomainUsers r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-	r.in.resume_handle = resume_handle;
-	r.in.acct_flags = acct_flags;
-	r.in.max_size = max_size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_EnumDomainUsers, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_ENUMDOMAINUSERS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_EnumDomainUsers, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*resume_handle = *r.out.resume_handle;
-	*sam = *r.out.sam;
-	*num_entries = *r.out.num_entries;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_CreateDomAlias(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    struct policy_handle *domain_handle /* [in] [ref] */,
-				    struct lsa_String *alias_name /* [in] [ref] */,
-				    uint32_t access_mask /* [in]  */,
-				    struct policy_handle *alias_handle /* [out] [ref] */,
-				    uint32_t *rid /* [out] [ref] */)
-{
-	struct samr_CreateDomAlias r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-	r.in.alias_name = alias_name;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_CreateDomAlias, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_CREATEDOMALIAS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_CreateDomAlias, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*alias_handle = *r.out.alias_handle;
-	*rid = *r.out.rid;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_EnumDomainAliases(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct policy_handle *domain_handle /* [in] [ref] */,
-				       uint32_t *resume_handle /* [in,out] [ref] */,
-				       struct samr_SamArray **sam /* [out] [ref] */,
-				       uint32_t max_size /* [in]  */,
-				       uint32_t *num_entries /* [out] [ref] */)
-{
-	struct samr_EnumDomainAliases r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-	r.in.resume_handle = resume_handle;
-	r.in.max_size = max_size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_EnumDomainAliases, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_ENUMDOMAINALIASES,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_EnumDomainAliases, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*resume_handle = *r.out.resume_handle;
-	*sam = *r.out.sam;
-	*num_entries = *r.out.num_entries;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_GetAliasMembership(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					struct policy_handle *domain_handle /* [in] [ref] */,
-					struct lsa_SidArray *sids /* [in] [ref] */,
-					struct samr_Ids *rids /* [out] [ref] */)
-{
-	struct samr_GetAliasMembership r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-	r.in.sids = sids;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_GetAliasMembership, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_GETALIASMEMBERSHIP,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_GetAliasMembership, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*rids = *r.out.rids;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_LookupNames(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *domain_handle /* [in] [ref] */,
-				 uint32_t num_names /* [in] [range(0,1000)] */,
-				 struct lsa_String *names /* [in] [length_is(num_names),size_is(1000)] */,
-				 struct samr_Ids *rids /* [out] [ref] */,
-				 struct samr_Ids *types /* [out] [ref] */)
-{
-	struct samr_LookupNames r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-	r.in.num_names = num_names;
-	r.in.names = names;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_LookupNames, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_LOOKUPNAMES,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_LookupNames, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*rids = *r.out.rids;
-	*types = *r.out.types;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_LookupRids(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				struct policy_handle *domain_handle /* [in] [ref] */,
-				uint32_t num_rids /* [in] [range(0,1000)] */,
-				uint32_t *rids /* [in] [length_is(num_rids),size_is(1000)] */,
-				struct lsa_Strings *names /* [out] [ref] */,
-				struct samr_Ids *types /* [out] [ref] */)
-{
-	struct samr_LookupRids r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-	r.in.num_rids = num_rids;
-	r.in.rids = rids;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_LookupRids, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_LOOKUPRIDS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_LookupRids, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*names = *r.out.names;
-	*types = *r.out.types;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_OpenGroup(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       struct policy_handle *domain_handle /* [in] [ref] */,
-			       uint32_t access_mask /* [in]  */,
-			       uint32_t rid /* [in]  */,
-			       struct policy_handle *group_handle /* [out] [ref] */)
-{
-	struct samr_OpenGroup r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-	r.in.access_mask = access_mask;
-	r.in.rid = rid;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_OpenGroup, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_OPENGROUP,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_OpenGroup, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*group_handle = *r.out.group_handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_QueryGroupInfo(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    struct policy_handle *group_handle /* [in] [ref] */,
-				    enum samr_GroupInfoEnum level /* [in]  */,
-				    union samr_GroupInfo **info /* [out] [ref,switch_is(level)] */)
-{
-	struct samr_QueryGroupInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.group_handle = group_handle;
-	r.in.level = level;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_QueryGroupInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_QUERYGROUPINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_QueryGroupInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_SetGroupInfo(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  struct policy_handle *group_handle /* [in] [ref] */,
-				  enum samr_GroupInfoEnum level /* [in]  */,
-				  union samr_GroupInfo *info /* [in] [ref,switch_is(level)] */)
-{
-	struct samr_SetGroupInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.group_handle = group_handle;
-	r.in.level = level;
-	r.in.info = info;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_SetGroupInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_SETGROUPINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_SetGroupInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_AddGroupMember(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    struct policy_handle *group_handle /* [in] [ref] */,
-				    uint32_t rid /* [in]  */,
-				    uint32_t flags /* [in]  */)
-{
-	struct samr_AddGroupMember r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.group_handle = group_handle;
-	r.in.rid = rid;
-	r.in.flags = flags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_AddGroupMember, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_ADDGROUPMEMBER,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_AddGroupMember, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_DeleteDomainGroup(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct policy_handle *group_handle /* [in,out] [ref] */)
-{
-	struct samr_DeleteDomainGroup r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.group_handle = group_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_DeleteDomainGroup, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_DELETEDOMAINGROUP,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_DeleteDomainGroup, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*group_handle = *r.out.group_handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_DeleteGroupMember(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct policy_handle *group_handle /* [in] [ref] */,
-				       uint32_t rid /* [in]  */)
-{
-	struct samr_DeleteGroupMember r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.group_handle = group_handle;
-	r.in.rid = rid;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_DeleteGroupMember, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_DELETEGROUPMEMBER,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_DeleteGroupMember, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_QueryGroupMember(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *group_handle /* [in] [ref] */,
-				      struct samr_RidTypeArray **rids /* [out] [ref] */)
-{
-	struct samr_QueryGroupMember r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.group_handle = group_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_QueryGroupMember, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_QUERYGROUPMEMBER,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_QueryGroupMember, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*rids = *r.out.rids;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_SetMemberAttributesOfGroup(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx,
-						struct policy_handle *group_handle /* [in] [ref] */,
-						uint32_t unknown1 /* [in]  */,
-						uint32_t unknown2 /* [in]  */)
-{
-	struct samr_SetMemberAttributesOfGroup r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.group_handle = group_handle;
-	r.in.unknown1 = unknown1;
-	r.in.unknown2 = unknown2;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_SetMemberAttributesOfGroup, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_SETMEMBERATTRIBUTESOFGROUP,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_SetMemberAttributesOfGroup, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_OpenAlias(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       struct policy_handle *domain_handle /* [in] [ref] */,
-			       uint32_t access_mask /* [in]  */,
-			       uint32_t rid /* [in]  */,
-			       struct policy_handle *alias_handle /* [out] [ref] */)
-{
-	struct samr_OpenAlias r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-	r.in.access_mask = access_mask;
-	r.in.rid = rid;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_OpenAlias, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_OPENALIAS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_OpenAlias, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*alias_handle = *r.out.alias_handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_QueryAliasInfo(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    struct policy_handle *alias_handle /* [in] [ref] */,
-				    enum samr_AliasInfoEnum level /* [in]  */,
-				    union samr_AliasInfo **info /* [out] [ref,switch_is(level)] */)
-{
-	struct samr_QueryAliasInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.alias_handle = alias_handle;
-	r.in.level = level;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_QueryAliasInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_QUERYALIASINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_QueryAliasInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_SetAliasInfo(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  struct policy_handle *alias_handle /* [in] [ref] */,
-				  enum samr_AliasInfoEnum level /* [in]  */,
-				  union samr_AliasInfo *info /* [in] [ref,switch_is(level)] */)
-{
-	struct samr_SetAliasInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.alias_handle = alias_handle;
-	r.in.level = level;
-	r.in.info = info;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_SetAliasInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_SETALIASINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_SetAliasInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_DeleteDomAlias(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    struct policy_handle *alias_handle /* [in,out] [ref] */)
-{
-	struct samr_DeleteDomAlias r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.alias_handle = alias_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_DeleteDomAlias, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_DELETEDOMALIAS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_DeleteDomAlias, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*alias_handle = *r.out.alias_handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_AddAliasMember(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    struct policy_handle *alias_handle /* [in] [ref] */,
-				    struct dom_sid2 *sid /* [in] [ref] */)
-{
-	struct samr_AddAliasMember r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.alias_handle = alias_handle;
-	r.in.sid = sid;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_AddAliasMember, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_ADDALIASMEMBER,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_AddAliasMember, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_DeleteAliasMember(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct policy_handle *alias_handle /* [in] [ref] */,
-				       struct dom_sid2 *sid /* [in] [ref] */)
-{
-	struct samr_DeleteAliasMember r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.alias_handle = alias_handle;
-	r.in.sid = sid;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_DeleteAliasMember, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_DELETEALIASMEMBER,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_DeleteAliasMember, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_GetMembersInAlias(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct policy_handle *alias_handle /* [in] [ref] */,
-				       struct lsa_SidArray *sids /* [out] [ref] */)
-{
-	struct samr_GetMembersInAlias r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.alias_handle = alias_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_GetMembersInAlias, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_GETMEMBERSINALIAS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_GetMembersInAlias, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*sids = *r.out.sids;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_OpenUser(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      struct policy_handle *domain_handle /* [in] [ref] */,
-			      uint32_t access_mask /* [in]  */,
-			      uint32_t rid /* [in]  */,
-			      struct policy_handle *user_handle /* [out] [ref] */)
-{
-	struct samr_OpenUser r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-	r.in.access_mask = access_mask;
-	r.in.rid = rid;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_OpenUser, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_OPENUSER,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_OpenUser, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*user_handle = *r.out.user_handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_DeleteUser(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				struct policy_handle *user_handle /* [in,out] [ref] */)
-{
-	struct samr_DeleteUser r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.user_handle = user_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_DeleteUser, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_DELETEUSER,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_DeleteUser, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*user_handle = *r.out.user_handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_QueryUserInfo(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   struct policy_handle *user_handle /* [in] [ref] */,
-				   uint16_t level /* [in]  */,
-				   union samr_UserInfo **info /* [out] [ref,switch_is(level)] */)
-{
-	struct samr_QueryUserInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.user_handle = user_handle;
-	r.in.level = level;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_QueryUserInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_QUERYUSERINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_QueryUserInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_SetUserInfo(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *user_handle /* [in] [ref] */,
-				 uint16_t level /* [in]  */,
-				 union samr_UserInfo *info /* [in] [ref,switch_is(level)] */)
-{
-	struct samr_SetUserInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.user_handle = user_handle;
-	r.in.level = level;
-	r.in.info = info;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_SetUserInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_SETUSERINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_SetUserInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_ChangePasswordUser(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					struct policy_handle *user_handle /* [in] [ref] */,
-					uint8_t lm_present /* [in]  */,
-					struct samr_Password *old_lm_crypted /* [in] [unique] */,
-					struct samr_Password *new_lm_crypted /* [in] [unique] */,
-					uint8_t nt_present /* [in]  */,
-					struct samr_Password *old_nt_crypted /* [in] [unique] */,
-					struct samr_Password *new_nt_crypted /* [in] [unique] */,
-					uint8_t cross1_present /* [in]  */,
-					struct samr_Password *nt_cross /* [in] [unique] */,
-					uint8_t cross2_present /* [in]  */,
-					struct samr_Password *lm_cross /* [in] [unique] */)
-{
-	struct samr_ChangePasswordUser r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.user_handle = user_handle;
-	r.in.lm_present = lm_present;
-	r.in.old_lm_crypted = old_lm_crypted;
-	r.in.new_lm_crypted = new_lm_crypted;
-	r.in.nt_present = nt_present;
-	r.in.old_nt_crypted = old_nt_crypted;
-	r.in.new_nt_crypted = new_nt_crypted;
-	r.in.cross1_present = cross1_present;
-	r.in.nt_cross = nt_cross;
-	r.in.cross2_present = cross2_present;
-	r.in.lm_cross = lm_cross;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_ChangePasswordUser, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_CHANGEPASSWORDUSER,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_ChangePasswordUser, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_GetGroupsForUser(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *user_handle /* [in] [ref] */,
-				      struct samr_RidWithAttributeArray **rids /* [out] [ref] */)
-{
-	struct samr_GetGroupsForUser r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.user_handle = user_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_GetGroupsForUser, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_GETGROUPSFORUSER,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_GetGroupsForUser, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*rids = *r.out.rids;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_QueryDisplayInfo(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *domain_handle /* [in] [ref] */,
-				      uint16_t level /* [in]  */,
-				      uint32_t start_idx /* [in]  */,
-				      uint32_t max_entries /* [in]  */,
-				      uint32_t buf_size /* [in]  */,
-				      uint32_t *total_size /* [out] [ref] */,
-				      uint32_t *returned_size /* [out] [ref] */,
-				      union samr_DispInfo *info /* [out] [ref,switch_is(level)] */)
-{
-	struct samr_QueryDisplayInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-	r.in.level = level;
-	r.in.start_idx = start_idx;
-	r.in.max_entries = max_entries;
-	r.in.buf_size = buf_size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_QueryDisplayInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_QUERYDISPLAYINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_QueryDisplayInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*total_size = *r.out.total_size;
-	*returned_size = *r.out.returned_size;
-	*info = *r.out.info;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_GetDisplayEnumerationIndex(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx,
-						struct policy_handle *domain_handle /* [in] [ref] */,
-						uint16_t level /* [in]  */,
-						struct lsa_String *name /* [in] [ref] */,
-						uint32_t *idx /* [out] [ref] */)
-{
-	struct samr_GetDisplayEnumerationIndex r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-	r.in.level = level;
-	r.in.name = name;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_GetDisplayEnumerationIndex, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_GETDISPLAYENUMERATIONINDEX,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_GetDisplayEnumerationIndex, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*idx = *r.out.idx;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_TestPrivateFunctionsDomain(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx,
-						struct policy_handle *domain_handle /* [in] [ref] */)
-{
-	struct samr_TestPrivateFunctionsDomain r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_TestPrivateFunctionsDomain, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_TESTPRIVATEFUNCTIONSDOMAIN,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_TestPrivateFunctionsDomain, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_TestPrivateFunctionsUser(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      struct policy_handle *user_handle /* [in] [ref] */)
-{
-	struct samr_TestPrivateFunctionsUser r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.user_handle = user_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_TestPrivateFunctionsUser, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_TESTPRIVATEFUNCTIONSUSER,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_TestPrivateFunctionsUser, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_GetUserPwInfo(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   struct policy_handle *user_handle /* [in] [ref] */,
-				   struct samr_PwInfo *info /* [out] [ref] */)
-{
-	struct samr_GetUserPwInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.user_handle = user_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_GetUserPwInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_GETUSERPWINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_GetUserPwInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_RemoveMemberFromForeignDomain(struct rpc_pipe_client *cli,
-						   TALLOC_CTX *mem_ctx,
-						   struct policy_handle *domain_handle /* [in] [ref] */,
-						   struct dom_sid2 *sid /* [in] [ref] */)
-{
-	struct samr_RemoveMemberFromForeignDomain r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-	r.in.sid = sid;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_RemoveMemberFromForeignDomain, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_REMOVEMEMBERFROMFOREIGNDOMAIN,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_RemoveMemberFromForeignDomain, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_QueryDomainInfo2(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *domain_handle /* [in] [ref] */,
-				      uint16_t level /* [in]  */,
-				      union samr_DomainInfo **info /* [out] [ref,switch_is(level)] */)
-{
-	struct samr_QueryDomainInfo2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-	r.in.level = level;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_QueryDomainInfo2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_QUERYDOMAININFO2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_QueryDomainInfo2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_QueryUserInfo2(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    struct policy_handle *user_handle /* [in] [ref] */,
-				    uint16_t level /* [in]  */,
-				    union samr_UserInfo *info /* [out] [ref,switch_is(level)] */)
-{
-	struct samr_QueryUserInfo2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.user_handle = user_handle;
-	r.in.level = level;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_QueryUserInfo2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_QUERYUSERINFO2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_QueryUserInfo2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_QueryDisplayInfo2(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct policy_handle *domain_handle /* [in] [ref] */,
-				       uint16_t level /* [in]  */,
-				       uint32_t start_idx /* [in]  */,
-				       uint32_t max_entries /* [in]  */,
-				       uint32_t buf_size /* [in]  */,
-				       uint32_t *total_size /* [out] [ref] */,
-				       uint32_t *returned_size /* [out] [ref] */,
-				       union samr_DispInfo *info /* [out] [ref,switch_is(level)] */)
-{
-	struct samr_QueryDisplayInfo2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-	r.in.level = level;
-	r.in.start_idx = start_idx;
-	r.in.max_entries = max_entries;
-	r.in.buf_size = buf_size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_QueryDisplayInfo2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_QUERYDISPLAYINFO2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_QueryDisplayInfo2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*total_size = *r.out.total_size;
-	*returned_size = *r.out.returned_size;
-	*info = *r.out.info;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_GetDisplayEnumerationIndex2(struct rpc_pipe_client *cli,
-						 TALLOC_CTX *mem_ctx,
-						 struct policy_handle *domain_handle /* [in] [ref] */,
-						 uint16_t level /* [in]  */,
-						 struct lsa_String *name /* [in] [ref] */,
-						 uint32_t *idx /* [out] [ref] */)
-{
-	struct samr_GetDisplayEnumerationIndex2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-	r.in.level = level;
-	r.in.name = name;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_GetDisplayEnumerationIndex2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_GETDISPLAYENUMERATIONINDEX2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_GetDisplayEnumerationIndex2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*idx = *r.out.idx;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_CreateUser2(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *domain_handle /* [in] [ref] */,
-				 struct lsa_String *account_name /* [in] [ref] */,
-				 uint32_t acct_flags /* [in]  */,
-				 uint32_t access_mask /* [in]  */,
-				 struct policy_handle *user_handle /* [out] [ref] */,
-				 uint32_t *access_granted /* [out] [ref] */,
-				 uint32_t *rid /* [out] [ref] */)
-{
-	struct samr_CreateUser2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-	r.in.account_name = account_name;
-	r.in.acct_flags = acct_flags;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_CreateUser2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_CREATEUSER2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_CreateUser2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*user_handle = *r.out.user_handle;
-	*access_granted = *r.out.access_granted;
-	*rid = *r.out.rid;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_QueryDisplayInfo3(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct policy_handle *domain_handle /* [in] [ref] */,
-				       uint16_t level /* [in]  */,
-				       uint32_t start_idx /* [in]  */,
-				       uint32_t max_entries /* [in]  */,
-				       uint32_t buf_size /* [in]  */,
-				       uint32_t *total_size /* [out] [ref] */,
-				       uint32_t *returned_size /* [out] [ref] */,
-				       union samr_DispInfo *info /* [out] [ref,switch_is(level)] */)
-{
-	struct samr_QueryDisplayInfo3 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-	r.in.level = level;
-	r.in.start_idx = start_idx;
-	r.in.max_entries = max_entries;
-	r.in.buf_size = buf_size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_QueryDisplayInfo3, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_QUERYDISPLAYINFO3,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_QueryDisplayInfo3, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*total_size = *r.out.total_size;
-	*returned_size = *r.out.returned_size;
-	*info = *r.out.info;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_AddMultipleMembersToAlias(struct rpc_pipe_client *cli,
-					       TALLOC_CTX *mem_ctx,
-					       struct policy_handle *alias_handle /* [in] [ref] */,
-					       struct lsa_SidArray *sids /* [in] [ref] */)
-{
-	struct samr_AddMultipleMembersToAlias r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.alias_handle = alias_handle;
-	r.in.sids = sids;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_AddMultipleMembersToAlias, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_ADDMULTIPLEMEMBERSTOALIAS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_AddMultipleMembersToAlias, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_RemoveMultipleMembersFromAlias(struct rpc_pipe_client *cli,
-						    TALLOC_CTX *mem_ctx,
-						    struct policy_handle *alias_handle /* [in] [ref] */,
-						    struct lsa_SidArray *sids /* [in] [ref] */)
-{
-	struct samr_RemoveMultipleMembersFromAlias r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.alias_handle = alias_handle;
-	r.in.sids = sids;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_RemoveMultipleMembersFromAlias, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_REMOVEMULTIPLEMEMBERSFROMALIAS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_RemoveMultipleMembersFromAlias, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_OemChangePasswordUser2(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    struct lsa_AsciiString *server /* [in] [unique] */,
-					    struct lsa_AsciiString *account /* [in] [ref] */,
-					    struct samr_CryptPassword *password /* [in] [unique] */,
-					    struct samr_Password *hash /* [in] [unique] */)
-{
-	struct samr_OemChangePasswordUser2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server = server;
-	r.in.account = account;
-	r.in.password = password;
-	r.in.hash = hash;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_OemChangePasswordUser2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_OEMCHANGEPASSWORDUSER2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_OemChangePasswordUser2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_ChangePasswordUser2(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 struct lsa_String *server /* [in] [unique] */,
-					 struct lsa_String *account /* [in] [ref] */,
-					 struct samr_CryptPassword *nt_password /* [in] [unique] */,
-					 struct samr_Password *nt_verifier /* [in] [unique] */,
-					 uint8_t lm_change /* [in]  */,
-					 struct samr_CryptPassword *lm_password /* [in] [unique] */,
-					 struct samr_Password *lm_verifier /* [in] [unique] */)
-{
-	struct samr_ChangePasswordUser2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server = server;
-	r.in.account = account;
-	r.in.nt_password = nt_password;
-	r.in.nt_verifier = nt_verifier;
-	r.in.lm_change = lm_change;
-	r.in.lm_password = lm_password;
-	r.in.lm_verifier = lm_verifier;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_ChangePasswordUser2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_CHANGEPASSWORDUSER2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_ChangePasswordUser2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_GetDomPwInfo(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  struct lsa_String *domain_name /* [in] [unique] */,
-				  struct samr_PwInfo *info /* [out] [ref] */)
-{
-	struct samr_GetDomPwInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_name = domain_name;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_GetDomPwInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_GETDOMPWINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_GetDomPwInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_Connect2(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      const char *system_name /* [in] [unique,charset(UTF16)] */,
-			      uint32_t access_mask /* [in]  */,
-			      struct policy_handle *connect_handle /* [out] [ref] */)
-{
-	struct samr_Connect2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.system_name = system_name;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_Connect2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_CONNECT2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_Connect2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*connect_handle = *r.out.connect_handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_SetUserInfo2(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  struct policy_handle *user_handle /* [in] [ref] */,
-				  uint16_t level /* [in]  */,
-				  union samr_UserInfo *info /* [in] [ref,switch_is(level)] */)
-{
-	struct samr_SetUserInfo2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.user_handle = user_handle;
-	r.in.level = level;
-	r.in.info = info;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_SetUserInfo2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_SETUSERINFO2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_SetUserInfo2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_SetBootKeyInformation(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   struct policy_handle *connect_handle /* [in] [ref] */,
-					   uint32_t unknown1 /* [in]  */,
-					   uint32_t unknown2 /* [in]  */,
-					   uint32_t unknown3 /* [in]  */)
-{
-	struct samr_SetBootKeyInformation r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.connect_handle = connect_handle;
-	r.in.unknown1 = unknown1;
-	r.in.unknown2 = unknown2;
-	r.in.unknown3 = unknown3;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_SetBootKeyInformation, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_SETBOOTKEYINFORMATION,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_SetBootKeyInformation, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_GetBootKeyInformation(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   struct policy_handle *domain_handle /* [in] [ref] */,
-					   uint32_t *unknown /* [out] [ref] */)
-{
-	struct samr_GetBootKeyInformation r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_GetBootKeyInformation, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_GETBOOTKEYINFORMATION,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_GetBootKeyInformation, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*unknown = *r.out.unknown;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_Connect3(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      const char *system_name /* [in] [unique,charset(UTF16)] */,
-			      uint32_t unknown /* [in]  */,
-			      uint32_t access_mask /* [in]  */,
-			      struct policy_handle *connect_handle /* [out] [ref] */)
-{
-	struct samr_Connect3 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.system_name = system_name;
-	r.in.unknown = unknown;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_Connect3, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_CONNECT3,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_Connect3, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*connect_handle = *r.out.connect_handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_Connect4(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      const char *system_name /* [in] [unique,charset(UTF16)] */,
-			      enum samr_ConnectVersion client_version /* [in]  */,
-			      uint32_t access_mask /* [in]  */,
-			      struct policy_handle *connect_handle /* [out] [ref] */)
-{
-	struct samr_Connect4 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.system_name = system_name;
-	r.in.client_version = client_version;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_Connect4, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_CONNECT4,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_Connect4, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*connect_handle = *r.out.connect_handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_ChangePasswordUser3(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 struct lsa_String *server /* [in] [unique] */,
-					 struct lsa_String *account /* [in] [ref] */,
-					 struct samr_CryptPassword *nt_password /* [in] [unique] */,
-					 struct samr_Password *nt_verifier /* [in] [unique] */,
-					 uint8_t lm_change /* [in]  */,
-					 struct samr_CryptPassword *lm_password /* [in] [unique] */,
-					 struct samr_Password *lm_verifier /* [in] [unique] */,
-					 struct samr_CryptPassword *password3 /* [in] [unique] */,
-					 struct samr_DomInfo1 **dominfo /* [out] [ref] */,
-					 struct samr_ChangeReject **reject /* [out] [ref] */)
-{
-	struct samr_ChangePasswordUser3 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server = server;
-	r.in.account = account;
-	r.in.nt_password = nt_password;
-	r.in.nt_verifier = nt_verifier;
-	r.in.lm_change = lm_change;
-	r.in.lm_password = lm_password;
-	r.in.lm_verifier = lm_verifier;
-	r.in.password3 = password3;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_ChangePasswordUser3, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_CHANGEPASSWORDUSER3,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_ChangePasswordUser3, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*dominfo = *r.out.dominfo;
-	*reject = *r.out.reject;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_Connect5(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      const char *system_name /* [in] [unique,charset(UTF16)] */,
-			      uint32_t access_mask /* [in]  */,
-			      uint32_t level_in /* [in]  */,
-			      union samr_ConnectInfo *info_in /* [in] [ref,switch_is(level_in)] */,
-			      uint32_t *level_out /* [out] [ref] */,
-			      union samr_ConnectInfo *info_out /* [out] [ref,switch_is(*level_out)] */,
-			      struct policy_handle *connect_handle /* [out] [ref] */)
-{
-	struct samr_Connect5 r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.system_name = system_name;
-	r.in.access_mask = access_mask;
-	r.in.level_in = level_in;
-	r.in.info_in = info_in;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_Connect5, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_CONNECT5,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_Connect5, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*level_out = *r.out.level_out;
-	*info_out = *r.out.info_out;
-	*connect_handle = *r.out.connect_handle;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_RidToSid(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      struct policy_handle *domain_handle /* [in] [ref] */,
-			      uint32_t rid /* [in]  */,
-			      struct dom_sid2 *sid /* [out] [ref] */)
-{
-	struct samr_RidToSid r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.domain_handle = domain_handle;
-	r.in.rid = rid;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_RidToSid, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_RIDTOSID,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_RidToSid, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*sid = *r.out.sid;
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_SetDsrmPassword(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     struct lsa_String *name /* [in] [unique] */,
-				     uint32_t unknown /* [in]  */,
-				     struct samr_Password *hash /* [in] [unique] */)
-{
-	struct samr_SetDsrmPassword r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.name = name;
-	r.in.unknown = unknown;
-	r.in.hash = hash;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_SetDsrmPassword, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_SETDSRMPASSWORD,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_SetDsrmPassword, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	return r.out.result;
-}
-
-NTSTATUS rpccli_samr_ValidatePassword(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      enum samr_ValidatePasswordLevel level /* [in]  */,
-				      union samr_ValidatePasswordReq req /* [in] [switch_is(level)] */,
-				      union samr_ValidatePasswordRep *rep /* [out] [ref,switch_is(level)] */)
-{
-	struct samr_ValidatePassword r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.level = level;
-	r.in.req = req;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_ValidatePassword, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SAMR,
-				&ndr_table_samr,
-				NDR_SAMR_VALIDATEPASSWORD,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_ValidatePassword, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*rep = *r.out.rep;
-
-	/* Return result */
-	return r.out.result;
-}
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_samr.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_samr.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_samr.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,389 +0,0 @@
-#include "librpc/gen_ndr/ndr_samr.h"
-#ifndef __CLI_SAMR__
-#define __CLI_SAMR__
-NTSTATUS rpccli_samr_Connect(struct rpc_pipe_client *cli,
-			     TALLOC_CTX *mem_ctx,
-			     uint16_t *system_name /* [in] [unique] */,
-			     uint32_t access_mask /* [in]  */,
-			     struct policy_handle *connect_handle /* [out] [ref] */);
-NTSTATUS rpccli_samr_Close(struct rpc_pipe_client *cli,
-			   TALLOC_CTX *mem_ctx,
-			   struct policy_handle *handle /* [in,out] [ref] */);
-NTSTATUS rpccli_samr_SetSecurity(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *handle /* [in] [ref] */,
-				 uint32_t sec_info /* [in]  */,
-				 struct sec_desc_buf *sdbuf /* [in] [ref] */);
-NTSTATUS rpccli_samr_QuerySecurity(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   struct policy_handle *handle /* [in] [ref] */,
-				   uint32_t sec_info /* [in]  */,
-				   struct sec_desc_buf **sdbuf /* [out] [ref] */);
-NTSTATUS rpccli_samr_Shutdown(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      struct policy_handle *connect_handle /* [in] [ref] */);
-NTSTATUS rpccli_samr_LookupDomain(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  struct policy_handle *connect_handle /* [in] [ref] */,
-				  struct lsa_String *domain_name /* [in] [ref] */,
-				  struct dom_sid2 **sid /* [out] [ref] */);
-NTSTATUS rpccli_samr_EnumDomains(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *connect_handle /* [in] [ref] */,
-				 uint32_t *resume_handle /* [in,out] [ref] */,
-				 struct samr_SamArray **sam /* [out] [ref] */,
-				 uint32_t buf_size /* [in]  */,
-				 uint32_t *num_entries /* [out] [ref] */);
-NTSTATUS rpccli_samr_OpenDomain(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				struct policy_handle *connect_handle /* [in] [ref] */,
-				uint32_t access_mask /* [in]  */,
-				struct dom_sid2 *sid /* [in] [ref] */,
-				struct policy_handle *domain_handle /* [out] [ref] */);
-NTSTATUS rpccli_samr_QueryDomainInfo(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     struct policy_handle *domain_handle /* [in] [ref] */,
-				     uint16_t level /* [in]  */,
-				     union samr_DomainInfo **info /* [out] [ref,switch_is(level)] */);
-NTSTATUS rpccli_samr_SetDomainInfo(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   struct policy_handle *domain_handle /* [in] [ref] */,
-				   uint16_t level /* [in]  */,
-				   union samr_DomainInfo *info /* [in] [ref,switch_is(level)] */);
-NTSTATUS rpccli_samr_CreateDomainGroup(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct policy_handle *domain_handle /* [in] [ref] */,
-				       struct lsa_String *name /* [in] [ref] */,
-				       uint32_t access_mask /* [in]  */,
-				       struct policy_handle *group_handle /* [out] [ref] */,
-				       uint32_t *rid /* [out] [ref] */);
-NTSTATUS rpccli_samr_EnumDomainGroups(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *domain_handle /* [in] [ref] */,
-				      uint32_t *resume_handle /* [in,out] [ref] */,
-				      struct samr_SamArray **sam /* [out] [ref] */,
-				      uint32_t max_size /* [in]  */,
-				      uint32_t *num_entries /* [out] [ref] */);
-NTSTATUS rpccli_samr_CreateUser(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				struct policy_handle *domain_handle /* [in] [ref] */,
-				struct lsa_String *account_name /* [in] [ref] */,
-				uint32_t access_mask /* [in]  */,
-				struct policy_handle *user_handle /* [out] [ref] */,
-				uint32_t *rid /* [out] [ref] */);
-NTSTATUS rpccli_samr_EnumDomainUsers(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     struct policy_handle *domain_handle /* [in] [ref] */,
-				     uint32_t *resume_handle /* [in,out] [ref] */,
-				     uint32_t acct_flags /* [in]  */,
-				     struct samr_SamArray **sam /* [out] [ref] */,
-				     uint32_t max_size /* [in]  */,
-				     uint32_t *num_entries /* [out] [ref] */);
-NTSTATUS rpccli_samr_CreateDomAlias(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    struct policy_handle *domain_handle /* [in] [ref] */,
-				    struct lsa_String *alias_name /* [in] [ref] */,
-				    uint32_t access_mask /* [in]  */,
-				    struct policy_handle *alias_handle /* [out] [ref] */,
-				    uint32_t *rid /* [out] [ref] */);
-NTSTATUS rpccli_samr_EnumDomainAliases(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct policy_handle *domain_handle /* [in] [ref] */,
-				       uint32_t *resume_handle /* [in,out] [ref] */,
-				       struct samr_SamArray **sam /* [out] [ref] */,
-				       uint32_t max_size /* [in]  */,
-				       uint32_t *num_entries /* [out] [ref] */);
-NTSTATUS rpccli_samr_GetAliasMembership(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					struct policy_handle *domain_handle /* [in] [ref] */,
-					struct lsa_SidArray *sids /* [in] [ref] */,
-					struct samr_Ids *rids /* [out] [ref] */);
-NTSTATUS rpccli_samr_LookupNames(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *domain_handle /* [in] [ref] */,
-				 uint32_t num_names /* [in] [range(0,1000)] */,
-				 struct lsa_String *names /* [in] [length_is(num_names),size_is(1000)] */,
-				 struct samr_Ids *rids /* [out] [ref] */,
-				 struct samr_Ids *types /* [out] [ref] */);
-NTSTATUS rpccli_samr_LookupRids(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				struct policy_handle *domain_handle /* [in] [ref] */,
-				uint32_t num_rids /* [in] [range(0,1000)] */,
-				uint32_t *rids /* [in] [length_is(num_rids),size_is(1000)] */,
-				struct lsa_Strings *names /* [out] [ref] */,
-				struct samr_Ids *types /* [out] [ref] */);
-NTSTATUS rpccli_samr_OpenGroup(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       struct policy_handle *domain_handle /* [in] [ref] */,
-			       uint32_t access_mask /* [in]  */,
-			       uint32_t rid /* [in]  */,
-			       struct policy_handle *group_handle /* [out] [ref] */);
-NTSTATUS rpccli_samr_QueryGroupInfo(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    struct policy_handle *group_handle /* [in] [ref] */,
-				    enum samr_GroupInfoEnum level /* [in]  */,
-				    union samr_GroupInfo **info /* [out] [ref,switch_is(level)] */);
-NTSTATUS rpccli_samr_SetGroupInfo(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  struct policy_handle *group_handle /* [in] [ref] */,
-				  enum samr_GroupInfoEnum level /* [in]  */,
-				  union samr_GroupInfo *info /* [in] [ref,switch_is(level)] */);
-NTSTATUS rpccli_samr_AddGroupMember(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    struct policy_handle *group_handle /* [in] [ref] */,
-				    uint32_t rid /* [in]  */,
-				    uint32_t flags /* [in]  */);
-NTSTATUS rpccli_samr_DeleteDomainGroup(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct policy_handle *group_handle /* [in,out] [ref] */);
-NTSTATUS rpccli_samr_DeleteGroupMember(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct policy_handle *group_handle /* [in] [ref] */,
-				       uint32_t rid /* [in]  */);
-NTSTATUS rpccli_samr_QueryGroupMember(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *group_handle /* [in] [ref] */,
-				      struct samr_RidTypeArray **rids /* [out] [ref] */);
-NTSTATUS rpccli_samr_SetMemberAttributesOfGroup(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx,
-						struct policy_handle *group_handle /* [in] [ref] */,
-						uint32_t unknown1 /* [in]  */,
-						uint32_t unknown2 /* [in]  */);
-NTSTATUS rpccli_samr_OpenAlias(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       struct policy_handle *domain_handle /* [in] [ref] */,
-			       uint32_t access_mask /* [in]  */,
-			       uint32_t rid /* [in]  */,
-			       struct policy_handle *alias_handle /* [out] [ref] */);
-NTSTATUS rpccli_samr_QueryAliasInfo(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    struct policy_handle *alias_handle /* [in] [ref] */,
-				    enum samr_AliasInfoEnum level /* [in]  */,
-				    union samr_AliasInfo **info /* [out] [ref,switch_is(level)] */);
-NTSTATUS rpccli_samr_SetAliasInfo(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  struct policy_handle *alias_handle /* [in] [ref] */,
-				  enum samr_AliasInfoEnum level /* [in]  */,
-				  union samr_AliasInfo *info /* [in] [ref,switch_is(level)] */);
-NTSTATUS rpccli_samr_DeleteDomAlias(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    struct policy_handle *alias_handle /* [in,out] [ref] */);
-NTSTATUS rpccli_samr_AddAliasMember(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    struct policy_handle *alias_handle /* [in] [ref] */,
-				    struct dom_sid2 *sid /* [in] [ref] */);
-NTSTATUS rpccli_samr_DeleteAliasMember(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct policy_handle *alias_handle /* [in] [ref] */,
-				       struct dom_sid2 *sid /* [in] [ref] */);
-NTSTATUS rpccli_samr_GetMembersInAlias(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct policy_handle *alias_handle /* [in] [ref] */,
-				       struct lsa_SidArray *sids /* [out] [ref] */);
-NTSTATUS rpccli_samr_OpenUser(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      struct policy_handle *domain_handle /* [in] [ref] */,
-			      uint32_t access_mask /* [in]  */,
-			      uint32_t rid /* [in]  */,
-			      struct policy_handle *user_handle /* [out] [ref] */);
-NTSTATUS rpccli_samr_DeleteUser(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				struct policy_handle *user_handle /* [in,out] [ref] */);
-NTSTATUS rpccli_samr_QueryUserInfo(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   struct policy_handle *user_handle /* [in] [ref] */,
-				   uint16_t level /* [in]  */,
-				   union samr_UserInfo **info /* [out] [ref,switch_is(level)] */);
-NTSTATUS rpccli_samr_SetUserInfo(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *user_handle /* [in] [ref] */,
-				 uint16_t level /* [in]  */,
-				 union samr_UserInfo *info /* [in] [ref,switch_is(level)] */);
-NTSTATUS rpccli_samr_ChangePasswordUser(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					struct policy_handle *user_handle /* [in] [ref] */,
-					uint8_t lm_present /* [in]  */,
-					struct samr_Password *old_lm_crypted /* [in] [unique] */,
-					struct samr_Password *new_lm_crypted /* [in] [unique] */,
-					uint8_t nt_present /* [in]  */,
-					struct samr_Password *old_nt_crypted /* [in] [unique] */,
-					struct samr_Password *new_nt_crypted /* [in] [unique] */,
-					uint8_t cross1_present /* [in]  */,
-					struct samr_Password *nt_cross /* [in] [unique] */,
-					uint8_t cross2_present /* [in]  */,
-					struct samr_Password *lm_cross /* [in] [unique] */);
-NTSTATUS rpccli_samr_GetGroupsForUser(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *user_handle /* [in] [ref] */,
-				      struct samr_RidWithAttributeArray **rids /* [out] [ref] */);
-NTSTATUS rpccli_samr_QueryDisplayInfo(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *domain_handle /* [in] [ref] */,
-				      uint16_t level /* [in]  */,
-				      uint32_t start_idx /* [in]  */,
-				      uint32_t max_entries /* [in]  */,
-				      uint32_t buf_size /* [in]  */,
-				      uint32_t *total_size /* [out] [ref] */,
-				      uint32_t *returned_size /* [out] [ref] */,
-				      union samr_DispInfo *info /* [out] [ref,switch_is(level)] */);
-NTSTATUS rpccli_samr_GetDisplayEnumerationIndex(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx,
-						struct policy_handle *domain_handle /* [in] [ref] */,
-						uint16_t level /* [in]  */,
-						struct lsa_String *name /* [in] [ref] */,
-						uint32_t *idx /* [out] [ref] */);
-NTSTATUS rpccli_samr_TestPrivateFunctionsDomain(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx,
-						struct policy_handle *domain_handle /* [in] [ref] */);
-NTSTATUS rpccli_samr_TestPrivateFunctionsUser(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      struct policy_handle *user_handle /* [in] [ref] */);
-NTSTATUS rpccli_samr_GetUserPwInfo(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   struct policy_handle *user_handle /* [in] [ref] */,
-				   struct samr_PwInfo *info /* [out] [ref] */);
-NTSTATUS rpccli_samr_RemoveMemberFromForeignDomain(struct rpc_pipe_client *cli,
-						   TALLOC_CTX *mem_ctx,
-						   struct policy_handle *domain_handle /* [in] [ref] */,
-						   struct dom_sid2 *sid /* [in] [ref] */);
-NTSTATUS rpccli_samr_QueryDomainInfo2(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *domain_handle /* [in] [ref] */,
-				      uint16_t level /* [in]  */,
-				      union samr_DomainInfo **info /* [out] [ref,switch_is(level)] */);
-NTSTATUS rpccli_samr_QueryUserInfo2(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    struct policy_handle *user_handle /* [in] [ref] */,
-				    uint16_t level /* [in]  */,
-				    union samr_UserInfo *info /* [out] [ref,switch_is(level)] */);
-NTSTATUS rpccli_samr_QueryDisplayInfo2(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct policy_handle *domain_handle /* [in] [ref] */,
-				       uint16_t level /* [in]  */,
-				       uint32_t start_idx /* [in]  */,
-				       uint32_t max_entries /* [in]  */,
-				       uint32_t buf_size /* [in]  */,
-				       uint32_t *total_size /* [out] [ref] */,
-				       uint32_t *returned_size /* [out] [ref] */,
-				       union samr_DispInfo *info /* [out] [ref,switch_is(level)] */);
-NTSTATUS rpccli_samr_GetDisplayEnumerationIndex2(struct rpc_pipe_client *cli,
-						 TALLOC_CTX *mem_ctx,
-						 struct policy_handle *domain_handle /* [in] [ref] */,
-						 uint16_t level /* [in]  */,
-						 struct lsa_String *name /* [in] [ref] */,
-						 uint32_t *idx /* [out] [ref] */);
-NTSTATUS rpccli_samr_CreateUser2(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *domain_handle /* [in] [ref] */,
-				 struct lsa_String *account_name /* [in] [ref] */,
-				 uint32_t acct_flags /* [in]  */,
-				 uint32_t access_mask /* [in]  */,
-				 struct policy_handle *user_handle /* [out] [ref] */,
-				 uint32_t *access_granted /* [out] [ref] */,
-				 uint32_t *rid /* [out] [ref] */);
-NTSTATUS rpccli_samr_QueryDisplayInfo3(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       struct policy_handle *domain_handle /* [in] [ref] */,
-				       uint16_t level /* [in]  */,
-				       uint32_t start_idx /* [in]  */,
-				       uint32_t max_entries /* [in]  */,
-				       uint32_t buf_size /* [in]  */,
-				       uint32_t *total_size /* [out] [ref] */,
-				       uint32_t *returned_size /* [out] [ref] */,
-				       union samr_DispInfo *info /* [out] [ref,switch_is(level)] */);
-NTSTATUS rpccli_samr_AddMultipleMembersToAlias(struct rpc_pipe_client *cli,
-					       TALLOC_CTX *mem_ctx,
-					       struct policy_handle *alias_handle /* [in] [ref] */,
-					       struct lsa_SidArray *sids /* [in] [ref] */);
-NTSTATUS rpccli_samr_RemoveMultipleMembersFromAlias(struct rpc_pipe_client *cli,
-						    TALLOC_CTX *mem_ctx,
-						    struct policy_handle *alias_handle /* [in] [ref] */,
-						    struct lsa_SidArray *sids /* [in] [ref] */);
-NTSTATUS rpccli_samr_OemChangePasswordUser2(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    struct lsa_AsciiString *server /* [in] [unique] */,
-					    struct lsa_AsciiString *account /* [in] [ref] */,
-					    struct samr_CryptPassword *password /* [in] [unique] */,
-					    struct samr_Password *hash /* [in] [unique] */);
-NTSTATUS rpccli_samr_ChangePasswordUser2(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 struct lsa_String *server /* [in] [unique] */,
-					 struct lsa_String *account /* [in] [ref] */,
-					 struct samr_CryptPassword *nt_password /* [in] [unique] */,
-					 struct samr_Password *nt_verifier /* [in] [unique] */,
-					 uint8_t lm_change /* [in]  */,
-					 struct samr_CryptPassword *lm_password /* [in] [unique] */,
-					 struct samr_Password *lm_verifier /* [in] [unique] */);
-NTSTATUS rpccli_samr_GetDomPwInfo(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  struct lsa_String *domain_name /* [in] [unique] */,
-				  struct samr_PwInfo *info /* [out] [ref] */);
-NTSTATUS rpccli_samr_Connect2(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      const char *system_name /* [in] [unique,charset(UTF16)] */,
-			      uint32_t access_mask /* [in]  */,
-			      struct policy_handle *connect_handle /* [out] [ref] */);
-NTSTATUS rpccli_samr_SetUserInfo2(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  struct policy_handle *user_handle /* [in] [ref] */,
-				  uint16_t level /* [in]  */,
-				  union samr_UserInfo *info /* [in] [ref,switch_is(level)] */);
-NTSTATUS rpccli_samr_SetBootKeyInformation(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   struct policy_handle *connect_handle /* [in] [ref] */,
-					   uint32_t unknown1 /* [in]  */,
-					   uint32_t unknown2 /* [in]  */,
-					   uint32_t unknown3 /* [in]  */);
-NTSTATUS rpccli_samr_GetBootKeyInformation(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   struct policy_handle *domain_handle /* [in] [ref] */,
-					   uint32_t *unknown /* [out] [ref] */);
-NTSTATUS rpccli_samr_Connect3(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      const char *system_name /* [in] [unique,charset(UTF16)] */,
-			      uint32_t unknown /* [in]  */,
-			      uint32_t access_mask /* [in]  */,
-			      struct policy_handle *connect_handle /* [out] [ref] */);
-NTSTATUS rpccli_samr_Connect4(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      const char *system_name /* [in] [unique,charset(UTF16)] */,
-			      enum samr_ConnectVersion client_version /* [in]  */,
-			      uint32_t access_mask /* [in]  */,
-			      struct policy_handle *connect_handle /* [out] [ref] */);
-NTSTATUS rpccli_samr_ChangePasswordUser3(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 struct lsa_String *server /* [in] [unique] */,
-					 struct lsa_String *account /* [in] [ref] */,
-					 struct samr_CryptPassword *nt_password /* [in] [unique] */,
-					 struct samr_Password *nt_verifier /* [in] [unique] */,
-					 uint8_t lm_change /* [in]  */,
-					 struct samr_CryptPassword *lm_password /* [in] [unique] */,
-					 struct samr_Password *lm_verifier /* [in] [unique] */,
-					 struct samr_CryptPassword *password3 /* [in] [unique] */,
-					 struct samr_DomInfo1 **dominfo /* [out] [ref] */,
-					 struct samr_ChangeReject **reject /* [out] [ref] */);
-NTSTATUS rpccli_samr_Connect5(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      const char *system_name /* [in] [unique,charset(UTF16)] */,
-			      uint32_t access_mask /* [in]  */,
-			      uint32_t level_in /* [in]  */,
-			      union samr_ConnectInfo *info_in /* [in] [ref,switch_is(level_in)] */,
-			      uint32_t *level_out /* [out] [ref] */,
-			      union samr_ConnectInfo *info_out /* [out] [ref,switch_is(*level_out)] */,
-			      struct policy_handle *connect_handle /* [out] [ref] */);
-NTSTATUS rpccli_samr_RidToSid(struct rpc_pipe_client *cli,
-			      TALLOC_CTX *mem_ctx,
-			      struct policy_handle *domain_handle /* [in] [ref] */,
-			      uint32_t rid /* [in]  */,
-			      struct dom_sid2 *sid /* [out] [ref] */);
-NTSTATUS rpccli_samr_SetDsrmPassword(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     struct lsa_String *name /* [in] [unique] */,
-				     uint32_t unknown /* [in]  */,
-				     struct samr_Password *hash /* [in] [unique] */);
-NTSTATUS rpccli_samr_ValidatePassword(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      enum samr_ValidatePasswordLevel level /* [in]  */,
-				      union samr_ValidatePasswordReq req /* [in] [switch_is(level)] */,
-				      union samr_ValidatePasswordRep *rep /* [out] [ref,switch_is(level)] */);
-#endif /* __CLI_SAMR__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_srvsvc.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_srvsvc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_srvsvc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,2695 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * client auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/cli_srvsvc.h"
-
-NTSTATUS rpccli_srvsvc_NetCharDevEnum(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				      uint32_t *level /* [in,out] [ref] */,
-				      union srvsvc_NetCharDevCtr *ctr /* [in,out] [ref,switch_is(*level)] */,
-				      uint32_t max_buffer /* [in]  */,
-				      uint32_t *totalentries /* [out] [ref] */,
-				      uint32_t *resume_handle /* [in,out] [unique] */,
-				      WERROR *werror)
-{
-	struct srvsvc_NetCharDevEnum r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.level = level;
-	r.in.ctr = ctr;
-	r.in.max_buffer = max_buffer;
-	r.in.resume_handle = resume_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetCharDevEnum, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETCHARDEVENUM,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetCharDevEnum, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*level = *r.out.level;
-	*ctr = *r.out.ctr;
-	*totalentries = *r.out.totalentries;
-	if (resume_handle && r.out.resume_handle) {
-		*resume_handle = *r.out.resume_handle;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetCharDevGetInfo(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					 const char *device_name /* [in] [charset(UTF16)] */,
-					 uint32_t level /* [in]  */,
-					 union srvsvc_NetCharDevInfo *info /* [out] [ref,switch_is(level)] */,
-					 WERROR *werror)
-{
-	struct srvsvc_NetCharDevGetInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.device_name = device_name;
-	r.in.level = level;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetCharDevGetInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETCHARDEVGETINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetCharDevGetInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetCharDevControl(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					 const char *device_name /* [in] [charset(UTF16)] */,
-					 uint32_t opcode /* [in]  */,
-					 WERROR *werror)
-{
-	struct srvsvc_NetCharDevControl r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.device_name = device_name;
-	r.in.opcode = opcode;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetCharDevControl, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETCHARDEVCONTROL,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetCharDevControl, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetCharDevQEnum(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				       const char *user /* [in] [unique,charset(UTF16)] */,
-				       uint32_t *level /* [in,out] [ref] */,
-				       union srvsvc_NetCharDevQCtr *ctr /* [in,out] [ref,switch_is(*level)] */,
-				       uint32_t max_buffer /* [in]  */,
-				       uint32_t *totalentries /* [out] [ref] */,
-				       uint32_t *resume_handle /* [in,out] [unique] */,
-				       WERROR *werror)
-{
-	struct srvsvc_NetCharDevQEnum r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.user = user;
-	r.in.level = level;
-	r.in.ctr = ctr;
-	r.in.max_buffer = max_buffer;
-	r.in.resume_handle = resume_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetCharDevQEnum, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETCHARDEVQENUM,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetCharDevQEnum, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*level = *r.out.level;
-	*ctr = *r.out.ctr;
-	*totalentries = *r.out.totalentries;
-	if (resume_handle && r.out.resume_handle) {
-		*resume_handle = *r.out.resume_handle;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetCharDevQGetInfo(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					  const char *queue_name /* [in] [charset(UTF16)] */,
-					  const char *user /* [in] [charset(UTF16)] */,
-					  uint32_t level /* [in]  */,
-					  union srvsvc_NetCharDevQInfo *info /* [out] [ref,switch_is(level)] */,
-					  WERROR *werror)
-{
-	struct srvsvc_NetCharDevQGetInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.queue_name = queue_name;
-	r.in.user = user;
-	r.in.level = level;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetCharDevQGetInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETCHARDEVQGETINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetCharDevQGetInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetCharDevQSetInfo(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					  const char *queue_name /* [in] [charset(UTF16)] */,
-					  uint32_t level /* [in]  */,
-					  union srvsvc_NetCharDevQInfo info /* [in] [switch_is(level)] */,
-					  uint32_t *parm_error /* [in,out] [unique] */,
-					  WERROR *werror)
-{
-	struct srvsvc_NetCharDevQSetInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.queue_name = queue_name;
-	r.in.level = level;
-	r.in.info = info;
-	r.in.parm_error = parm_error;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetCharDevQSetInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETCHARDEVQSETINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetCharDevQSetInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	if (parm_error && r.out.parm_error) {
-		*parm_error = *r.out.parm_error;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetCharDevQPurge(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					const char *queue_name /* [in] [charset(UTF16)] */,
-					WERROR *werror)
-{
-	struct srvsvc_NetCharDevQPurge r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.queue_name = queue_name;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetCharDevQPurge, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETCHARDEVQPURGE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetCharDevQPurge, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetCharDevQPurgeSelf(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					    const char *queue_name /* [in] [charset(UTF16)] */,
-					    const char *computer_name /* [in] [charset(UTF16)] */,
-					    WERROR *werror)
-{
-	struct srvsvc_NetCharDevQPurgeSelf r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.queue_name = queue_name;
-	r.in.computer_name = computer_name;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetCharDevQPurgeSelf, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETCHARDEVQPURGESELF,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetCharDevQPurgeSelf, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetConnEnum(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				   const char *path /* [in] [unique,charset(UTF16)] */,
-				   struct srvsvc_NetConnInfoCtr *info_ctr /* [in,out] [ref] */,
-				   uint32_t max_buffer /* [in]  */,
-				   uint32_t *totalentries /* [out] [ref] */,
-				   uint32_t *resume_handle /* [in,out] [unique] */,
-				   WERROR *werror)
-{
-	struct srvsvc_NetConnEnum r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.path = path;
-	r.in.info_ctr = info_ctr;
-	r.in.max_buffer = max_buffer;
-	r.in.resume_handle = resume_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetConnEnum, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETCONNENUM,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetConnEnum, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info_ctr = *r.out.info_ctr;
-	*totalentries = *r.out.totalentries;
-	if (resume_handle && r.out.resume_handle) {
-		*resume_handle = *r.out.resume_handle;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetFileEnum(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				   const char *path /* [in] [unique,charset(UTF16)] */,
-				   const char *user /* [in] [unique,charset(UTF16)] */,
-				   struct srvsvc_NetFileInfoCtr *info_ctr /* [in,out] [ref] */,
-				   uint32_t max_buffer /* [in]  */,
-				   uint32_t *totalentries /* [out] [ref] */,
-				   uint32_t *resume_handle /* [in,out] [unique] */,
-				   WERROR *werror)
-{
-	struct srvsvc_NetFileEnum r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.path = path;
-	r.in.user = user;
-	r.in.info_ctr = info_ctr;
-	r.in.max_buffer = max_buffer;
-	r.in.resume_handle = resume_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetFileEnum, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETFILEENUM,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetFileEnum, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info_ctr = *r.out.info_ctr;
-	*totalentries = *r.out.totalentries;
-	if (resume_handle && r.out.resume_handle) {
-		*resume_handle = *r.out.resume_handle;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetFileGetInfo(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				      uint32_t fid /* [in]  */,
-				      uint32_t level /* [in]  */,
-				      union srvsvc_NetFileInfo *info /* [out] [ref,switch_is(level)] */,
-				      WERROR *werror)
-{
-	struct srvsvc_NetFileGetInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.fid = fid;
-	r.in.level = level;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetFileGetInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETFILEGETINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetFileGetInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetFileClose(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				    uint32_t fid /* [in]  */,
-				    WERROR *werror)
-{
-	struct srvsvc_NetFileClose r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.fid = fid;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetFileClose, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETFILECLOSE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetFileClose, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetSessEnum(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				   const char *client /* [in] [unique,charset(UTF16)] */,
-				   const char *user /* [in] [unique,charset(UTF16)] */,
-				   struct srvsvc_NetSessInfoCtr *info_ctr /* [in,out] [ref] */,
-				   uint32_t max_buffer /* [in]  */,
-				   uint32_t *totalentries /* [out] [ref] */,
-				   uint32_t *resume_handle /* [in,out] [unique] */,
-				   WERROR *werror)
-{
-	struct srvsvc_NetSessEnum r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.client = client;
-	r.in.user = user;
-	r.in.info_ctr = info_ctr;
-	r.in.max_buffer = max_buffer;
-	r.in.resume_handle = resume_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetSessEnum, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETSESSENUM,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetSessEnum, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info_ctr = *r.out.info_ctr;
-	*totalentries = *r.out.totalentries;
-	if (resume_handle && r.out.resume_handle) {
-		*resume_handle = *r.out.resume_handle;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetSessDel(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				  const char *client /* [in] [unique,charset(UTF16)] */,
-				  const char *user /* [in] [unique,charset(UTF16)] */,
-				  WERROR *werror)
-{
-	struct srvsvc_NetSessDel r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.client = client;
-	r.in.user = user;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetSessDel, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETSESSDEL,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetSessDel, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetShareAdd(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				   uint32_t level /* [in]  */,
-				   union srvsvc_NetShareInfo *info /* [in] [ref,switch_is(level)] */,
-				   uint32_t *parm_error /* [in,out] [unique] */,
-				   WERROR *werror)
-{
-	struct srvsvc_NetShareAdd r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.level = level;
-	r.in.info = info;
-	r.in.parm_error = parm_error;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetShareAdd, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETSHAREADD,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetShareAdd, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	if (parm_error && r.out.parm_error) {
-		*parm_error = *r.out.parm_error;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetShareEnumAll(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				       struct srvsvc_NetShareInfoCtr *info_ctr /* [in,out] [ref] */,
-				       uint32_t max_buffer /* [in]  */,
-				       uint32_t *totalentries /* [out] [ref] */,
-				       uint32_t *resume_handle /* [in,out] [unique] */,
-				       WERROR *werror)
-{
-	struct srvsvc_NetShareEnumAll r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.info_ctr = info_ctr;
-	r.in.max_buffer = max_buffer;
-	r.in.resume_handle = resume_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetShareEnumAll, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETSHAREENUMALL,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetShareEnumAll, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info_ctr = *r.out.info_ctr;
-	*totalentries = *r.out.totalentries;
-	if (resume_handle && r.out.resume_handle) {
-		*resume_handle = *r.out.resume_handle;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetShareGetInfo(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				       const char *share_name /* [in] [charset(UTF16)] */,
-				       uint32_t level /* [in]  */,
-				       union srvsvc_NetShareInfo *info /* [out] [ref,switch_is(level)] */,
-				       WERROR *werror)
-{
-	struct srvsvc_NetShareGetInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.share_name = share_name;
-	r.in.level = level;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetShareGetInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETSHAREGETINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetShareGetInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetShareSetInfo(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				       const char *share_name /* [in] [charset(UTF16)] */,
-				       uint32_t level /* [in]  */,
-				       union srvsvc_NetShareInfo *info /* [in] [ref,switch_is(level)] */,
-				       uint32_t *parm_error /* [in,out] [unique] */,
-				       WERROR *werror)
-{
-	struct srvsvc_NetShareSetInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.share_name = share_name;
-	r.in.level = level;
-	r.in.info = info;
-	r.in.parm_error = parm_error;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetShareSetInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETSHARESETINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetShareSetInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	if (parm_error && r.out.parm_error) {
-		*parm_error = *r.out.parm_error;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetShareDel(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				   const char *share_name /* [in] [charset(UTF16)] */,
-				   uint32_t reserved /* [in]  */,
-				   WERROR *werror)
-{
-	struct srvsvc_NetShareDel r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.share_name = share_name;
-	r.in.reserved = reserved;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetShareDel, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETSHAREDEL,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetShareDel, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetShareDelSticky(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					 const char *share_name /* [in] [charset(UTF16)] */,
-					 uint32_t reserved /* [in]  */,
-					 WERROR *werror)
-{
-	struct srvsvc_NetShareDelSticky r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.share_name = share_name;
-	r.in.reserved = reserved;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetShareDelSticky, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETSHAREDELSTICKY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetShareDelSticky, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetShareCheck(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				     const char *device_name /* [in] [charset(UTF16)] */,
-				     enum srvsvc_ShareType *type /* [out] [ref] */,
-				     WERROR *werror)
-{
-	struct srvsvc_NetShareCheck r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.device_name = device_name;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetShareCheck, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETSHARECHECK,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetShareCheck, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*type = *r.out.type;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetSrvGetInfo(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				     uint32_t level /* [in]  */,
-				     union srvsvc_NetSrvInfo *info /* [out] [ref,switch_is(level)] */,
-				     WERROR *werror)
-{
-	struct srvsvc_NetSrvGetInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.level = level;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetSrvGetInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETSRVGETINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetSrvGetInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetSrvSetInfo(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				     uint32_t level /* [in]  */,
-				     union srvsvc_NetSrvInfo *info /* [in] [ref,switch_is(level)] */,
-				     uint32_t *parm_error /* [in,out] [unique] */,
-				     WERROR *werror)
-{
-	struct srvsvc_NetSrvSetInfo r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.level = level;
-	r.in.info = info;
-	r.in.parm_error = parm_error;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetSrvSetInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETSRVSETINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetSrvSetInfo, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	if (parm_error && r.out.parm_error) {
-		*parm_error = *r.out.parm_error;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetDiskEnum(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				   uint32_t level /* [in]  */,
-				   struct srvsvc_NetDiskInfo *info /* [in,out] [ref] */,
-				   uint32_t maxlen /* [in]  */,
-				   uint32_t *totalentries /* [out] [ref] */,
-				   uint32_t *resume_handle /* [in,out] [unique] */,
-				   WERROR *werror)
-{
-	struct srvsvc_NetDiskEnum r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.level = level;
-	r.in.info = info;
-	r.in.maxlen = maxlen;
-	r.in.resume_handle = resume_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetDiskEnum, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETDISKENUM,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetDiskEnum, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-	*totalentries = *r.out.totalentries;
-	if (resume_handle && r.out.resume_handle) {
-		*resume_handle = *r.out.resume_handle;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetServerStatisticsGet(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					      const char *service /* [in] [unique,charset(UTF16)] */,
-					      uint32_t level /* [in]  */,
-					      uint32_t options /* [in]  */,
-					      struct srvsvc_Statistics *stats /* [out] [ref] */,
-					      WERROR *werror)
-{
-	struct srvsvc_NetServerStatisticsGet r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.service = service;
-	r.in.level = level;
-	r.in.options = options;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetServerStatisticsGet, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETSERVERSTATISTICSGET,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetServerStatisticsGet, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*stats = *r.out.stats;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetTransportAdd(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				       uint32_t level /* [in]  */,
-				       union srvsvc_NetTransportInfo info /* [in] [switch_is(level)] */,
-				       WERROR *werror)
-{
-	struct srvsvc_NetTransportAdd r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.level = level;
-	r.in.info = info;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetTransportAdd, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETTRANSPORTADD,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetTransportAdd, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetTransportEnum(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					uint32_t *level /* [in,out] [ref] */,
-					union srvsvc_NetTransportCtr *transports /* [in,out] [ref,switch_is(*level)] */,
-					uint32_t max_buffer /* [in]  */,
-					uint32_t *totalentries /* [out] [ref] */,
-					uint32_t *resume_handle /* [in,out] [unique] */,
-					WERROR *werror)
-{
-	struct srvsvc_NetTransportEnum r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.level = level;
-	r.in.transports = transports;
-	r.in.max_buffer = max_buffer;
-	r.in.resume_handle = resume_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetTransportEnum, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETTRANSPORTENUM,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetTransportEnum, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*level = *r.out.level;
-	*transports = *r.out.transports;
-	*totalentries = *r.out.totalentries;
-	if (resume_handle && r.out.resume_handle) {
-		*resume_handle = *r.out.resume_handle;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetTransportDel(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				       uint32_t unknown /* [in]  */,
-				       struct srvsvc_NetTransportInfo0 transport /* [in]  */,
-				       WERROR *werror)
-{
-	struct srvsvc_NetTransportDel r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.unknown = unknown;
-	r.in.transport = transport;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetTransportDel, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETTRANSPORTDEL,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetTransportDel, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetRemoteTOD(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				    struct srvsvc_NetRemoteTODInfo **info /* [out] [ref] */,
-				    WERROR *werror)
-{
-	struct srvsvc_NetRemoteTOD r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetRemoteTOD, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETREMOTETOD,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetRemoteTOD, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info = *r.out.info;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetSetServiceBits(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					 const char *transport /* [in] [unique,charset(UTF16)] */,
-					 uint32_t servicebits /* [in]  */,
-					 uint32_t updateimmediately /* [in]  */,
-					 WERROR *werror)
-{
-	struct srvsvc_NetSetServiceBits r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.transport = transport;
-	r.in.servicebits = servicebits;
-	r.in.updateimmediately = updateimmediately;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetSetServiceBits, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETSETSERVICEBITS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetSetServiceBits, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetPathType(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				   const char *path /* [in] [charset(UTF16)] */,
-				   uint32_t pathflags /* [in]  */,
-				   uint32_t *pathtype /* [out] [ref] */,
-				   WERROR *werror)
-{
-	struct srvsvc_NetPathType r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.path = path;
-	r.in.pathflags = pathflags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetPathType, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETPATHTYPE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetPathType, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*pathtype = *r.out.pathtype;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetPathCanonicalize(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					   const char *path /* [in] [charset(UTF16)] */,
-					   uint8_t *can_path /* [out] [size_is(maxbuf)] */,
-					   uint32_t maxbuf /* [in]  */,
-					   const char *prefix /* [in] [charset(UTF16)] */,
-					   uint32_t *pathtype /* [in,out] [ref] */,
-					   uint32_t pathflags /* [in]  */,
-					   WERROR *werror)
-{
-	struct srvsvc_NetPathCanonicalize r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.path = path;
-	r.in.maxbuf = maxbuf;
-	r.in.prefix = prefix;
-	r.in.pathtype = pathtype;
-	r.in.pathflags = pathflags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetPathCanonicalize, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETPATHCANONICALIZE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetPathCanonicalize, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	memcpy(can_path, r.out.can_path, r.in.maxbuf * sizeof(*can_path));
-	*pathtype = *r.out.pathtype;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetPathCompare(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				      const char *path1 /* [in] [charset(UTF16)] */,
-				      const char *path2 /* [in] [charset(UTF16)] */,
-				      uint32_t pathtype /* [in]  */,
-				      uint32_t pathflags /* [in]  */,
-				      WERROR *werror)
-{
-	struct srvsvc_NetPathCompare r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.path1 = path1;
-	r.in.path2 = path2;
-	r.in.pathtype = pathtype;
-	r.in.pathflags = pathflags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetPathCompare, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETPATHCOMPARE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetPathCompare, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetNameValidate(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				       const char *name /* [in] [charset(UTF16)] */,
-				       uint32_t name_type /* [in]  */,
-				       uint32_t flags /* [in]  */,
-				       WERROR *werror)
-{
-	struct srvsvc_NetNameValidate r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.name = name;
-	r.in.name_type = name_type;
-	r.in.flags = flags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetNameValidate, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETNAMEVALIDATE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetNameValidate, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NETRPRNAMECANONICALIZE(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      WERROR *werror)
-{
-	struct srvsvc_NETRPRNAMECANONICALIZE r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NETRPRNAMECANONICALIZE, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETRPRNAMECANONICALIZE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NETRPRNAMECANONICALIZE, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetPRNameCompare(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					const char *name1 /* [in] [charset(UTF16)] */,
-					const char *name2 /* [in] [charset(UTF16)] */,
-					uint32_t name_type /* [in]  */,
-					uint32_t flags /* [in]  */,
-					WERROR *werror)
-{
-	struct srvsvc_NetPRNameCompare r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.name1 = name1;
-	r.in.name2 = name2;
-	r.in.name_type = name_type;
-	r.in.flags = flags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetPRNameCompare, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETPRNAMECOMPARE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetPRNameCompare, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetShareEnum(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				    struct srvsvc_NetShareInfoCtr *info_ctr /* [in,out] [ref] */,
-				    uint32_t max_buffer /* [in]  */,
-				    uint32_t *totalentries /* [out] [ref] */,
-				    uint32_t *resume_handle /* [in,out] [unique] */,
-				    WERROR *werror)
-{
-	struct srvsvc_NetShareEnum r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.info_ctr = info_ctr;
-	r.in.max_buffer = max_buffer;
-	r.in.resume_handle = resume_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetShareEnum, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETSHAREENUM,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetShareEnum, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*info_ctr = *r.out.info_ctr;
-	*totalentries = *r.out.totalentries;
-	if (resume_handle && r.out.resume_handle) {
-		*resume_handle = *r.out.resume_handle;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetShareDelStart(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					const char *share /* [in] [charset(UTF16)] */,
-					uint32_t reserved /* [in]  */,
-					struct policy_handle *hnd /* [out] [unique] */,
-					WERROR *werror)
-{
-	struct srvsvc_NetShareDelStart r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.share = share;
-	r.in.reserved = reserved;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetShareDelStart, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETSHAREDELSTART,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetShareDelStart, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	if (hnd && r.out.hnd) {
-		*hnd = *r.out.hnd;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetShareDelCommit(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 struct policy_handle *hnd /* [in,out] [unique] */,
-					 WERROR *werror)
-{
-	struct srvsvc_NetShareDelCommit r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.hnd = hnd;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetShareDelCommit, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETSHAREDELCOMMIT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetShareDelCommit, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	if (hnd && r.out.hnd) {
-		*hnd = *r.out.hnd;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetGetFileSecurity(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					  const char *share /* [in] [unique,charset(UTF16)] */,
-					  const char *file /* [in] [charset(UTF16)] */,
-					  uint32_t securityinformation /* [in]  */,
-					  struct sec_desc_buf **sd_buf /* [out] [ref] */,
-					  WERROR *werror)
-{
-	struct srvsvc_NetGetFileSecurity r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.share = share;
-	r.in.file = file;
-	r.in.securityinformation = securityinformation;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetGetFileSecurity, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETGETFILESECURITY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetGetFileSecurity, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*sd_buf = *r.out.sd_buf;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetSetFileSecurity(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					  const char *share /* [in] [unique,charset(UTF16)] */,
-					  const char *file /* [in] [charset(UTF16)] */,
-					  uint32_t securityinformation /* [in]  */,
-					  struct sec_desc_buf *sd_buf /* [in] [ref] */,
-					  WERROR *werror)
-{
-	struct srvsvc_NetSetFileSecurity r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.share = share;
-	r.in.file = file;
-	r.in.securityinformation = securityinformation;
-	r.in.sd_buf = sd_buf;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetSetFileSecurity, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETSETFILESECURITY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetSetFileSecurity, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetServerTransportAddEx(struct rpc_pipe_client *cli,
-					       TALLOC_CTX *mem_ctx,
-					       const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					       uint32_t level /* [in]  */,
-					       union srvsvc_NetTransportInfo info /* [in] [switch_is(level)] */,
-					       WERROR *werror)
-{
-	struct srvsvc_NetServerTransportAddEx r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.level = level;
-	r.in.info = info;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetServerTransportAddEx, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETSERVERTRANSPORTADDEX,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetServerTransportAddEx, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NetServerSetServiceBitsEx(struct rpc_pipe_client *cli,
-						 TALLOC_CTX *mem_ctx,
-						 const char *server_unc /* [in] [unique,charset(UTF16)] */,
-						 const char *emulated_server_unc /* [in] [unique,charset(UTF16)] */,
-						 const char *transport /* [in] [unique,charset(UTF16)] */,
-						 uint32_t servicebitsofinterest /* [in]  */,
-						 uint32_t servicebits /* [in]  */,
-						 uint32_t updateimmediately /* [in]  */,
-						 WERROR *werror)
-{
-	struct srvsvc_NetServerSetServiceBitsEx r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server_unc = server_unc;
-	r.in.emulated_server_unc = emulated_server_unc;
-	r.in.transport = transport;
-	r.in.servicebitsofinterest = servicebitsofinterest;
-	r.in.servicebits = servicebits;
-	r.in.updateimmediately = updateimmediately;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetServerSetServiceBitsEx, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETSERVERSETSERVICEBITSEX,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetServerSetServiceBitsEx, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NETRDFSGETVERSION(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 WERROR *werror)
-{
-	struct srvsvc_NETRDFSGETVERSION r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NETRDFSGETVERSION, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETRDFSGETVERSION,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NETRDFSGETVERSION, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NETRDFSCREATELOCALPARTITION(struct rpc_pipe_client *cli,
-						   TALLOC_CTX *mem_ctx,
-						   WERROR *werror)
-{
-	struct srvsvc_NETRDFSCREATELOCALPARTITION r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NETRDFSCREATELOCALPARTITION, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETRDFSCREATELOCALPARTITION,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NETRDFSCREATELOCALPARTITION, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NETRDFSDELETELOCALPARTITION(struct rpc_pipe_client *cli,
-						   TALLOC_CTX *mem_ctx,
-						   WERROR *werror)
-{
-	struct srvsvc_NETRDFSDELETELOCALPARTITION r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NETRDFSDELETELOCALPARTITION, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETRDFSDELETELOCALPARTITION,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NETRDFSDELETELOCALPARTITION, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NETRDFSSETLOCALVOLUMESTATE(struct rpc_pipe_client *cli,
-						  TALLOC_CTX *mem_ctx,
-						  WERROR *werror)
-{
-	struct srvsvc_NETRDFSSETLOCALVOLUMESTATE r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NETRDFSSETLOCALVOLUMESTATE, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETRDFSSETLOCALVOLUMESTATE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NETRDFSSETLOCALVOLUMESTATE, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NETRDFSSETSERVERINFO(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    WERROR *werror)
-{
-	struct srvsvc_NETRDFSSETSERVERINFO r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NETRDFSSETSERVERINFO, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETRDFSSETSERVERINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NETRDFSSETSERVERINFO, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NETRDFSCREATEEXITPOINT(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      WERROR *werror)
-{
-	struct srvsvc_NETRDFSCREATEEXITPOINT r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NETRDFSCREATEEXITPOINT, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETRDFSCREATEEXITPOINT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NETRDFSCREATEEXITPOINT, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NETRDFSDELETEEXITPOINT(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      WERROR *werror)
-{
-	struct srvsvc_NETRDFSDELETEEXITPOINT r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NETRDFSDELETEEXITPOINT, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETRDFSDELETEEXITPOINT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NETRDFSDELETEEXITPOINT, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NETRDFSMODIFYPREFIX(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   WERROR *werror)
-{
-	struct srvsvc_NETRDFSMODIFYPREFIX r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NETRDFSMODIFYPREFIX, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETRDFSMODIFYPREFIX,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NETRDFSMODIFYPREFIX, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NETRDFSFIXLOCALVOLUME(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx,
-					     WERROR *werror)
-{
-	struct srvsvc_NETRDFSFIXLOCALVOLUME r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NETRDFSFIXLOCALVOLUME, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETRDFSFIXLOCALVOLUME,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NETRDFSFIXLOCALVOLUME, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NETRDFSMANAGERREPORTSITEINFO(struct rpc_pipe_client *cli,
-						    TALLOC_CTX *mem_ctx,
-						    WERROR *werror)
-{
-	struct srvsvc_NETRDFSMANAGERREPORTSITEINFO r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NETRDFSMANAGERREPORTSITEINFO, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETRDFSMANAGERREPORTSITEINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NETRDFSMANAGERREPORTSITEINFO, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_srvsvc_NETRSERVERTRANSPORTDELEX(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx,
-						WERROR *werror)
-{
-	struct srvsvc_NETRSERVERTRANSPORTDELEX r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NETRSERVERTRANSPORTDELEX, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SRVSVC,
-				&ndr_table_srvsvc,
-				NDR_SRVSVC_NETRSERVERTRANSPORTDELEX,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NETRSERVERTRANSPORTDELEX, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_srvsvc.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_srvsvc.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_srvsvc.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,347 +0,0 @@
-#include "librpc/gen_ndr/ndr_srvsvc.h"
-#ifndef __CLI_SRVSVC__
-#define __CLI_SRVSVC__
-NTSTATUS rpccli_srvsvc_NetCharDevEnum(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				      uint32_t *level /* [in,out] [ref] */,
-				      union srvsvc_NetCharDevCtr *ctr /* [in,out] [ref,switch_is(*level)] */,
-				      uint32_t max_buffer /* [in]  */,
-				      uint32_t *totalentries /* [out] [ref] */,
-				      uint32_t *resume_handle /* [in,out] [unique] */,
-				      WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetCharDevGetInfo(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					 const char *device_name /* [in] [charset(UTF16)] */,
-					 uint32_t level /* [in]  */,
-					 union srvsvc_NetCharDevInfo *info /* [out] [ref,switch_is(level)] */,
-					 WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetCharDevControl(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					 const char *device_name /* [in] [charset(UTF16)] */,
-					 uint32_t opcode /* [in]  */,
-					 WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetCharDevQEnum(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				       const char *user /* [in] [unique,charset(UTF16)] */,
-				       uint32_t *level /* [in,out] [ref] */,
-				       union srvsvc_NetCharDevQCtr *ctr /* [in,out] [ref,switch_is(*level)] */,
-				       uint32_t max_buffer /* [in]  */,
-				       uint32_t *totalentries /* [out] [ref] */,
-				       uint32_t *resume_handle /* [in,out] [unique] */,
-				       WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetCharDevQGetInfo(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					  const char *queue_name /* [in] [charset(UTF16)] */,
-					  const char *user /* [in] [charset(UTF16)] */,
-					  uint32_t level /* [in]  */,
-					  union srvsvc_NetCharDevQInfo *info /* [out] [ref,switch_is(level)] */,
-					  WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetCharDevQSetInfo(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					  const char *queue_name /* [in] [charset(UTF16)] */,
-					  uint32_t level /* [in]  */,
-					  union srvsvc_NetCharDevQInfo info /* [in] [switch_is(level)] */,
-					  uint32_t *parm_error /* [in,out] [unique] */,
-					  WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetCharDevQPurge(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					const char *queue_name /* [in] [charset(UTF16)] */,
-					WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetCharDevQPurgeSelf(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					    const char *queue_name /* [in] [charset(UTF16)] */,
-					    const char *computer_name /* [in] [charset(UTF16)] */,
-					    WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetConnEnum(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				   const char *path /* [in] [unique,charset(UTF16)] */,
-				   struct srvsvc_NetConnInfoCtr *info_ctr /* [in,out] [ref] */,
-				   uint32_t max_buffer /* [in]  */,
-				   uint32_t *totalentries /* [out] [ref] */,
-				   uint32_t *resume_handle /* [in,out] [unique] */,
-				   WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetFileEnum(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				   const char *path /* [in] [unique,charset(UTF16)] */,
-				   const char *user /* [in] [unique,charset(UTF16)] */,
-				   struct srvsvc_NetFileInfoCtr *info_ctr /* [in,out] [ref] */,
-				   uint32_t max_buffer /* [in]  */,
-				   uint32_t *totalentries /* [out] [ref] */,
-				   uint32_t *resume_handle /* [in,out] [unique] */,
-				   WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetFileGetInfo(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				      uint32_t fid /* [in]  */,
-				      uint32_t level /* [in]  */,
-				      union srvsvc_NetFileInfo *info /* [out] [ref,switch_is(level)] */,
-				      WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetFileClose(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				    uint32_t fid /* [in]  */,
-				    WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetSessEnum(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				   const char *client /* [in] [unique,charset(UTF16)] */,
-				   const char *user /* [in] [unique,charset(UTF16)] */,
-				   struct srvsvc_NetSessInfoCtr *info_ctr /* [in,out] [ref] */,
-				   uint32_t max_buffer /* [in]  */,
-				   uint32_t *totalentries /* [out] [ref] */,
-				   uint32_t *resume_handle /* [in,out] [unique] */,
-				   WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetSessDel(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				  const char *client /* [in] [unique,charset(UTF16)] */,
-				  const char *user /* [in] [unique,charset(UTF16)] */,
-				  WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetShareAdd(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				   uint32_t level /* [in]  */,
-				   union srvsvc_NetShareInfo *info /* [in] [ref,switch_is(level)] */,
-				   uint32_t *parm_error /* [in,out] [unique] */,
-				   WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetShareEnumAll(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				       struct srvsvc_NetShareInfoCtr *info_ctr /* [in,out] [ref] */,
-				       uint32_t max_buffer /* [in]  */,
-				       uint32_t *totalentries /* [out] [ref] */,
-				       uint32_t *resume_handle /* [in,out] [unique] */,
-				       WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetShareGetInfo(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				       const char *share_name /* [in] [charset(UTF16)] */,
-				       uint32_t level /* [in]  */,
-				       union srvsvc_NetShareInfo *info /* [out] [ref,switch_is(level)] */,
-				       WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetShareSetInfo(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				       const char *share_name /* [in] [charset(UTF16)] */,
-				       uint32_t level /* [in]  */,
-				       union srvsvc_NetShareInfo *info /* [in] [ref,switch_is(level)] */,
-				       uint32_t *parm_error /* [in,out] [unique] */,
-				       WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetShareDel(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				   const char *share_name /* [in] [charset(UTF16)] */,
-				   uint32_t reserved /* [in]  */,
-				   WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetShareDelSticky(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					 const char *share_name /* [in] [charset(UTF16)] */,
-					 uint32_t reserved /* [in]  */,
-					 WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetShareCheck(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				     const char *device_name /* [in] [charset(UTF16)] */,
-				     enum srvsvc_ShareType *type /* [out] [ref] */,
-				     WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetSrvGetInfo(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				     uint32_t level /* [in]  */,
-				     union srvsvc_NetSrvInfo *info /* [out] [ref,switch_is(level)] */,
-				     WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetSrvSetInfo(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				     uint32_t level /* [in]  */,
-				     union srvsvc_NetSrvInfo *info /* [in] [ref,switch_is(level)] */,
-				     uint32_t *parm_error /* [in,out] [unique] */,
-				     WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetDiskEnum(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				   uint32_t level /* [in]  */,
-				   struct srvsvc_NetDiskInfo *info /* [in,out] [ref] */,
-				   uint32_t maxlen /* [in]  */,
-				   uint32_t *totalentries /* [out] [ref] */,
-				   uint32_t *resume_handle /* [in,out] [unique] */,
-				   WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetServerStatisticsGet(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					      const char *service /* [in] [unique,charset(UTF16)] */,
-					      uint32_t level /* [in]  */,
-					      uint32_t options /* [in]  */,
-					      struct srvsvc_Statistics *stats /* [out] [ref] */,
-					      WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetTransportAdd(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				       uint32_t level /* [in]  */,
-				       union srvsvc_NetTransportInfo info /* [in] [switch_is(level)] */,
-				       WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetTransportEnum(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					uint32_t *level /* [in,out] [ref] */,
-					union srvsvc_NetTransportCtr *transports /* [in,out] [ref,switch_is(*level)] */,
-					uint32_t max_buffer /* [in]  */,
-					uint32_t *totalentries /* [out] [ref] */,
-					uint32_t *resume_handle /* [in,out] [unique] */,
-					WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetTransportDel(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				       uint32_t unknown /* [in]  */,
-				       struct srvsvc_NetTransportInfo0 transport /* [in]  */,
-				       WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetRemoteTOD(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				    struct srvsvc_NetRemoteTODInfo **info /* [out] [ref] */,
-				    WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetSetServiceBits(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					 const char *transport /* [in] [unique,charset(UTF16)] */,
-					 uint32_t servicebits /* [in]  */,
-					 uint32_t updateimmediately /* [in]  */,
-					 WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetPathType(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				   const char *path /* [in] [charset(UTF16)] */,
-				   uint32_t pathflags /* [in]  */,
-				   uint32_t *pathtype /* [out] [ref] */,
-				   WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetPathCanonicalize(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					   const char *path /* [in] [charset(UTF16)] */,
-					   uint8_t *can_path /* [out] [size_is(maxbuf)] */,
-					   uint32_t maxbuf /* [in]  */,
-					   const char *prefix /* [in] [charset(UTF16)] */,
-					   uint32_t *pathtype /* [in,out] [ref] */,
-					   uint32_t pathflags /* [in]  */,
-					   WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetPathCompare(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				      const char *path1 /* [in] [charset(UTF16)] */,
-				      const char *path2 /* [in] [charset(UTF16)] */,
-				      uint32_t pathtype /* [in]  */,
-				      uint32_t pathflags /* [in]  */,
-				      WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetNameValidate(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				       const char *name /* [in] [charset(UTF16)] */,
-				       uint32_t name_type /* [in]  */,
-				       uint32_t flags /* [in]  */,
-				       WERROR *werror);
-NTSTATUS rpccli_srvsvc_NETRPRNAMECANONICALIZE(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetPRNameCompare(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					const char *name1 /* [in] [charset(UTF16)] */,
-					const char *name2 /* [in] [charset(UTF16)] */,
-					uint32_t name_type /* [in]  */,
-					uint32_t flags /* [in]  */,
-					WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetShareEnum(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    const char *server_unc /* [in] [unique,charset(UTF16)] */,
-				    struct srvsvc_NetShareInfoCtr *info_ctr /* [in,out] [ref] */,
-				    uint32_t max_buffer /* [in]  */,
-				    uint32_t *totalentries /* [out] [ref] */,
-				    uint32_t *resume_handle /* [in,out] [unique] */,
-				    WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetShareDelStart(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					const char *share /* [in] [charset(UTF16)] */,
-					uint32_t reserved /* [in]  */,
-					struct policy_handle *hnd /* [out] [unique] */,
-					WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetShareDelCommit(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 struct policy_handle *hnd /* [in,out] [unique] */,
-					 WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetGetFileSecurity(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					  const char *share /* [in] [unique,charset(UTF16)] */,
-					  const char *file /* [in] [charset(UTF16)] */,
-					  uint32_t securityinformation /* [in]  */,
-					  struct sec_desc_buf **sd_buf /* [out] [ref] */,
-					  WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetSetFileSecurity(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					  const char *share /* [in] [unique,charset(UTF16)] */,
-					  const char *file /* [in] [charset(UTF16)] */,
-					  uint32_t securityinformation /* [in]  */,
-					  struct sec_desc_buf *sd_buf /* [in] [ref] */,
-					  WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetServerTransportAddEx(struct rpc_pipe_client *cli,
-					       TALLOC_CTX *mem_ctx,
-					       const char *server_unc /* [in] [unique,charset(UTF16)] */,
-					       uint32_t level /* [in]  */,
-					       union srvsvc_NetTransportInfo info /* [in] [switch_is(level)] */,
-					       WERROR *werror);
-NTSTATUS rpccli_srvsvc_NetServerSetServiceBitsEx(struct rpc_pipe_client *cli,
-						 TALLOC_CTX *mem_ctx,
-						 const char *server_unc /* [in] [unique,charset(UTF16)] */,
-						 const char *emulated_server_unc /* [in] [unique,charset(UTF16)] */,
-						 const char *transport /* [in] [unique,charset(UTF16)] */,
-						 uint32_t servicebitsofinterest /* [in]  */,
-						 uint32_t servicebits /* [in]  */,
-						 uint32_t updateimmediately /* [in]  */,
-						 WERROR *werror);
-NTSTATUS rpccli_srvsvc_NETRDFSGETVERSION(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 WERROR *werror);
-NTSTATUS rpccli_srvsvc_NETRDFSCREATELOCALPARTITION(struct rpc_pipe_client *cli,
-						   TALLOC_CTX *mem_ctx,
-						   WERROR *werror);
-NTSTATUS rpccli_srvsvc_NETRDFSDELETELOCALPARTITION(struct rpc_pipe_client *cli,
-						   TALLOC_CTX *mem_ctx,
-						   WERROR *werror);
-NTSTATUS rpccli_srvsvc_NETRDFSSETLOCALVOLUMESTATE(struct rpc_pipe_client *cli,
-						  TALLOC_CTX *mem_ctx,
-						  WERROR *werror);
-NTSTATUS rpccli_srvsvc_NETRDFSSETSERVERINFO(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    WERROR *werror);
-NTSTATUS rpccli_srvsvc_NETRDFSCREATEEXITPOINT(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      WERROR *werror);
-NTSTATUS rpccli_srvsvc_NETRDFSDELETEEXITPOINT(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      WERROR *werror);
-NTSTATUS rpccli_srvsvc_NETRDFSMODIFYPREFIX(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   WERROR *werror);
-NTSTATUS rpccli_srvsvc_NETRDFSFIXLOCALVOLUME(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx,
-					     WERROR *werror);
-NTSTATUS rpccli_srvsvc_NETRDFSMANAGERREPORTSITEINFO(struct rpc_pipe_client *cli,
-						    TALLOC_CTX *mem_ctx,
-						    WERROR *werror);
-NTSTATUS rpccli_srvsvc_NETRSERVERTRANSPORTDELEX(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx,
-						WERROR *werror);
-#endif /* __CLI_SRVSVC__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_svcctl.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_svcctl.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_svcctl.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,2291 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * client auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/cli_svcctl.h"
-
-NTSTATUS rpccli_svcctl_CloseServiceHandle(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  struct policy_handle *handle /* [in,out] [ref] */,
-					  WERROR *werror)
-{
-	struct svcctl_CloseServiceHandle r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_CloseServiceHandle, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_CLOSESERVICEHANDLE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_CloseServiceHandle, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*handle = *r.out.handle;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_ControlService(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *handle /* [in] [ref] */,
-				      uint32_t control /* [in]  */,
-				      struct SERVICE_STATUS *service_status /* [out] [ref] */,
-				      WERROR *werror)
-{
-	struct svcctl_ControlService r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.control = control;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_ControlService, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_CONTROLSERVICE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_ControlService, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*service_status = *r.out.service_status;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_DeleteService(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     struct policy_handle *handle /* [in] [ref] */,
-				     WERROR *werror)
-{
-	struct svcctl_DeleteService r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_DeleteService, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_DELETESERVICE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_DeleteService, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_LockServiceDatabase(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   struct policy_handle *handle /* [in] [ref] */,
-					   struct policy_handle *lock /* [out] [ref] */,
-					   WERROR *werror)
-{
-	struct svcctl_LockServiceDatabase r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_LockServiceDatabase, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_LOCKSERVICEDATABASE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_LockServiceDatabase, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*lock = *r.out.lock;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_QueryServiceObjectSecurity(struct rpc_pipe_client *cli,
-						  TALLOC_CTX *mem_ctx,
-						  struct policy_handle *handle /* [in] [ref] */,
-						  uint32_t security_flags /* [in]  */,
-						  uint8_t *buffer /* [out] [ref,size_is(buffer_size)] */,
-						  uint32_t buffer_size /* [in] [range(0,0x40000)] */,
-						  uint32_t *needed /* [out] [ref,range(0,0x40000)] */,
-						  WERROR *werror)
-{
-	struct svcctl_QueryServiceObjectSecurity r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.security_flags = security_flags;
-	r.in.buffer_size = buffer_size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_QueryServiceObjectSecurity, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_QUERYSERVICEOBJECTSECURITY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_QueryServiceObjectSecurity, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	memcpy(buffer, r.out.buffer, r.in.buffer_size * sizeof(*buffer));
-	*needed = *r.out.needed;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_SetServiceObjectSecurity(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx,
-						struct policy_handle *handle /* [in] [ref] */,
-						uint32_t security_flags /* [in]  */,
-						uint8_t *buffer /* [in] [ref,size_is(buffer_size)] */,
-						uint32_t buffer_size /* [in]  */,
-						WERROR *werror)
-{
-	struct svcctl_SetServiceObjectSecurity r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.security_flags = security_flags;
-	r.in.buffer = buffer;
-	r.in.buffer_size = buffer_size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_SetServiceObjectSecurity, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_SETSERVICEOBJECTSECURITY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_SetServiceObjectSecurity, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_QueryServiceStatus(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  struct policy_handle *handle /* [in] [ref] */,
-					  struct SERVICE_STATUS *service_status /* [out] [ref] */,
-					  WERROR *werror)
-{
-	struct svcctl_QueryServiceStatus r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_QueryServiceStatus, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_QUERYSERVICESTATUS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_QueryServiceStatus, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*service_status = *r.out.service_status;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_SetServiceStatus(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					WERROR *werror)
-{
-	struct svcctl_SetServiceStatus r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_SetServiceStatus, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_SETSERVICESTATUS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_SetServiceStatus, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_UnlockServiceDatabase(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx,
-					     struct policy_handle *lock /* [in,out] [ref] */,
-					     WERROR *werror)
-{
-	struct svcctl_UnlockServiceDatabase r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.lock = lock;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_UnlockServiceDatabase, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_UNLOCKSERVICEDATABASE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_UnlockServiceDatabase, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*lock = *r.out.lock;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_NotifyBootConfigStatus(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      WERROR *werror)
-{
-	struct svcctl_NotifyBootConfigStatus r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_NotifyBootConfigStatus, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_NOTIFYBOOTCONFIGSTATUS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_NotifyBootConfigStatus, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_SCSetServiceBitsW(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 struct policy_handle *handle /* [in] [ref] */,
-					 uint32_t bits /* [in]  */,
-					 uint32_t bitson /* [in]  */,
-					 uint32_t immediate /* [in]  */,
-					 WERROR *werror)
-{
-	struct svcctl_SCSetServiceBitsW r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.bits = bits;
-	r.in.bitson = bitson;
-	r.in.immediate = immediate;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_SCSetServiceBitsW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_SCSETSERVICEBITSW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_SCSetServiceBitsW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_ChangeServiceConfigW(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    struct policy_handle *handle /* [in] [ref] */,
-					    uint32_t type /* [in]  */,
-					    uint32_t start /* [in]  */,
-					    uint32_t error /* [in]  */,
-					    const char *binary_path /* [in] [unique,charset(UTF16)] */,
-					    const char *load_order_group /* [in] [unique,charset(UTF16)] */,
-					    uint32_t *tag_id /* [out] [ref] */,
-					    const char *dependencies /* [in] [unique,charset(UTF16)] */,
-					    const char *service_start_name /* [in] [unique,charset(UTF16)] */,
-					    const char *password /* [in] [unique,charset(UTF16)] */,
-					    const char *display_name /* [in] [unique,charset(UTF16)] */,
-					    WERROR *werror)
-{
-	struct svcctl_ChangeServiceConfigW r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.type = type;
-	r.in.start = start;
-	r.in.error = error;
-	r.in.binary_path = binary_path;
-	r.in.load_order_group = load_order_group;
-	r.in.dependencies = dependencies;
-	r.in.service_start_name = service_start_name;
-	r.in.password = password;
-	r.in.display_name = display_name;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_ChangeServiceConfigW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_CHANGESERVICECONFIGW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_ChangeServiceConfigW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*tag_id = *r.out.tag_id;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_CreateServiceW(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *scmanager_handle /* [in] [ref] */,
-				      const char *ServiceName /* [in] [charset(UTF16)] */,
-				      const char *DisplayName /* [in] [unique,charset(UTF16)] */,
-				      uint32_t desired_access /* [in]  */,
-				      uint32_t type /* [in]  */,
-				      uint32_t start_type /* [in]  */,
-				      uint32_t error_control /* [in]  */,
-				      const char *binary_path /* [in] [charset(UTF16)] */,
-				      const char *LoadOrderGroupKey /* [in] [unique,charset(UTF16)] */,
-				      uint32_t *TagId /* [in,out] [unique] */,
-				      uint8_t *dependencies /* [in] [unique,size_is(dependencies_size)] */,
-				      uint32_t dependencies_size /* [in]  */,
-				      const char *service_start_name /* [in] [unique,charset(UTF16)] */,
-				      uint8_t *password /* [in] [unique,size_is(password_size)] */,
-				      uint32_t password_size /* [in]  */,
-				      struct policy_handle *handle /* [out] [ref] */,
-				      WERROR *werror)
-{
-	struct svcctl_CreateServiceW r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.scmanager_handle = scmanager_handle;
-	r.in.ServiceName = ServiceName;
-	r.in.DisplayName = DisplayName;
-	r.in.desired_access = desired_access;
-	r.in.type = type;
-	r.in.start_type = start_type;
-	r.in.error_control = error_control;
-	r.in.binary_path = binary_path;
-	r.in.LoadOrderGroupKey = LoadOrderGroupKey;
-	r.in.TagId = TagId;
-	r.in.dependencies = dependencies;
-	r.in.dependencies_size = dependencies_size;
-	r.in.service_start_name = service_start_name;
-	r.in.password = password;
-	r.in.password_size = password_size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_CreateServiceW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_CREATESERVICEW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_CreateServiceW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	if (TagId && r.out.TagId) {
-		*TagId = *r.out.TagId;
-	}
-	*handle = *r.out.handle;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_EnumDependentServicesW(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      struct policy_handle *service /* [in] [ref] */,
-					      uint32_t state /* [in]  */,
-					      struct ENUM_SERVICE_STATUS *service_status /* [out] [unique] */,
-					      uint32_t buf_size /* [in]  */,
-					      uint32_t *bytes_needed /* [out] [ref] */,
-					      uint32_t *services_returned /* [out] [ref] */,
-					      WERROR *werror)
-{
-	struct svcctl_EnumDependentServicesW r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.service = service;
-	r.in.state = state;
-	r.in.buf_size = buf_size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_EnumDependentServicesW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_ENUMDEPENDENTSERVICESW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_EnumDependentServicesW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	if (service_status && r.out.service_status) {
-		*service_status = *r.out.service_status;
-	}
-	*bytes_needed = *r.out.bytes_needed;
-	*services_returned = *r.out.services_returned;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_EnumServicesStatusW(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   struct policy_handle *handle /* [in] [ref] */,
-					   uint32_t type /* [in]  */,
-					   uint32_t state /* [in]  */,
-					   uint32_t buf_size /* [in]  */,
-					   uint8_t *service /* [out] [size_is(buf_size)] */,
-					   uint32_t *bytes_needed /* [out] [ref] */,
-					   uint32_t *services_returned /* [out] [ref] */,
-					   uint32_t *resume_handle /* [in,out] [unique] */,
-					   WERROR *werror)
-{
-	struct svcctl_EnumServicesStatusW r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.type = type;
-	r.in.state = state;
-	r.in.buf_size = buf_size;
-	r.in.resume_handle = resume_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_EnumServicesStatusW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_ENUMSERVICESSTATUSW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_EnumServicesStatusW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	memcpy(service, r.out.service, r.in.buf_size * sizeof(*service));
-	*bytes_needed = *r.out.bytes_needed;
-	*services_returned = *r.out.services_returned;
-	if (resume_handle && r.out.resume_handle) {
-		*resume_handle = *r.out.resume_handle;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_OpenSCManagerW(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      const char *MachineName /* [in] [unique,charset(UTF16)] */,
-				      const char *DatabaseName /* [in] [unique,charset(UTF16)] */,
-				      uint32_t access_mask /* [in]  */,
-				      struct policy_handle *handle /* [out] [ref] */,
-				      WERROR *werror)
-{
-	struct svcctl_OpenSCManagerW r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.MachineName = MachineName;
-	r.in.DatabaseName = DatabaseName;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_OpenSCManagerW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_OPENSCMANAGERW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_OpenSCManagerW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*handle = *r.out.handle;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_OpenServiceW(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    struct policy_handle *scmanager_handle /* [in] [ref] */,
-				    const char *ServiceName /* [in] [charset(UTF16)] */,
-				    uint32_t access_mask /* [in]  */,
-				    struct policy_handle *handle /* [out] [ref] */,
-				    WERROR *werror)
-{
-	struct svcctl_OpenServiceW r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.scmanager_handle = scmanager_handle;
-	r.in.ServiceName = ServiceName;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_OpenServiceW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_OPENSERVICEW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_OpenServiceW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*handle = *r.out.handle;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_QueryServiceConfigW(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   struct policy_handle *handle /* [in] [ref] */,
-					   uint8_t *query /* [out]  */,
-					   uint32_t buf_size /* [in]  */,
-					   uint32_t *bytes_needed /* [out] [ref] */,
-					   WERROR *werror)
-{
-	struct svcctl_QueryServiceConfigW r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.buf_size = buf_size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_QueryServiceConfigW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_QUERYSERVICECONFIGW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_QueryServiceConfigW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	memcpy(query, r.out.query, r.in.buf_size * sizeof(*query));
-	*bytes_needed = *r.out.bytes_needed;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_QueryServiceLockStatusW(struct rpc_pipe_client *cli,
-					       TALLOC_CTX *mem_ctx,
-					       struct policy_handle *handle /* [in] [ref] */,
-					       uint32_t buf_size /* [in]  */,
-					       struct SERVICE_LOCK_STATUS *lock_status /* [out] [ref] */,
-					       uint32_t *required_buf_size /* [out] [ref] */,
-					       WERROR *werror)
-{
-	struct svcctl_QueryServiceLockStatusW r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.buf_size = buf_size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_QueryServiceLockStatusW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_QUERYSERVICELOCKSTATUSW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_QueryServiceLockStatusW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*lock_status = *r.out.lock_status;
-	*required_buf_size = *r.out.required_buf_size;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_StartServiceW(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     struct policy_handle *handle /* [in] [ref] */,
-				     uint32_t NumArgs /* [in]  */,
-				     const char *Arguments /* [in] [unique,charset(UTF16)] */,
-				     WERROR *werror)
-{
-	struct svcctl_StartServiceW r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.NumArgs = NumArgs;
-	r.in.Arguments = Arguments;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_StartServiceW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_STARTSERVICEW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_StartServiceW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_GetServiceDisplayNameW(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      struct policy_handle *handle /* [in] [ref] */,
-					      const char *service_name /* [in] [unique,charset(UTF16)] */,
-					      const char **display_name /* [out] [ref,charset(UTF16)] */,
-					      uint32_t *display_name_length /* [in,out] [unique] */,
-					      WERROR *werror)
-{
-	struct svcctl_GetServiceDisplayNameW r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.service_name = service_name;
-	r.in.display_name_length = display_name_length;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_GetServiceDisplayNameW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_GETSERVICEDISPLAYNAMEW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_GetServiceDisplayNameW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*display_name = *r.out.display_name;
-	if (display_name_length && r.out.display_name_length) {
-		*display_name_length = *r.out.display_name_length;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_GetServiceKeyNameW(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  struct policy_handle *handle /* [in] [ref] */,
-					  const char *service_name /* [in] [unique,charset(UTF16)] */,
-					  const char **key_name /* [out] [ref,charset(UTF16)] */,
-					  uint32_t *display_name_length /* [in,out] [unique] */,
-					  WERROR *werror)
-{
-	struct svcctl_GetServiceKeyNameW r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.service_name = service_name;
-	r.in.display_name_length = display_name_length;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_GetServiceKeyNameW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_GETSERVICEKEYNAMEW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_GetServiceKeyNameW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*key_name = *r.out.key_name;
-	if (display_name_length && r.out.display_name_length) {
-		*display_name_length = *r.out.display_name_length;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_SCSetServiceBitsA(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 struct policy_handle *handle /* [in] [ref] */,
-					 uint32_t bits /* [in]  */,
-					 uint32_t bitson /* [in]  */,
-					 uint32_t immediate /* [in]  */,
-					 WERROR *werror)
-{
-	struct svcctl_SCSetServiceBitsA r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.bits = bits;
-	r.in.bitson = bitson;
-	r.in.immediate = immediate;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_SCSetServiceBitsA, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_SCSETSERVICEBITSA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_SCSetServiceBitsA, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_ChangeServiceConfigA(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    struct policy_handle *handle /* [in] [ref] */,
-					    uint32_t type /* [in]  */,
-					    uint32_t start /* [in]  */,
-					    uint32_t error /* [in]  */,
-					    const char *binary_path /* [in] [unique,charset(UTF16)] */,
-					    const char *load_order_group /* [in] [unique,charset(UTF16)] */,
-					    uint32_t *tag_id /* [out] [ref] */,
-					    const char *dependencies /* [in] [unique,charset(UTF16)] */,
-					    const char *service_start_name /* [in] [unique,charset(UTF16)] */,
-					    const char *password /* [in] [unique,charset(UTF16)] */,
-					    const char *display_name /* [in] [unique,charset(UTF16)] */,
-					    WERROR *werror)
-{
-	struct svcctl_ChangeServiceConfigA r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.type = type;
-	r.in.start = start;
-	r.in.error = error;
-	r.in.binary_path = binary_path;
-	r.in.load_order_group = load_order_group;
-	r.in.dependencies = dependencies;
-	r.in.service_start_name = service_start_name;
-	r.in.password = password;
-	r.in.display_name = display_name;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_ChangeServiceConfigA, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_CHANGESERVICECONFIGA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_ChangeServiceConfigA, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*tag_id = *r.out.tag_id;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_CreateServiceA(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *handle /* [in] [ref] */,
-				      const char *ServiceName /* [in] [unique,charset(UTF16)] */,
-				      const char *DisplayName /* [in] [unique,charset(UTF16)] */,
-				      uint32_t desired_access /* [in]  */,
-				      uint32_t type /* [in]  */,
-				      uint32_t start_type /* [in]  */,
-				      uint32_t error_control /* [in]  */,
-				      const char *binary_path /* [in] [unique,charset(UTF16)] */,
-				      const char *LoadOrderGroupKey /* [in] [unique,charset(UTF16)] */,
-				      uint32_t *TagId /* [out] [unique] */,
-				      const char *dependencies /* [in] [unique,charset(UTF16)] */,
-				      const char *service_start_name /* [in] [unique,charset(UTF16)] */,
-				      const char *password /* [in] [unique,charset(UTF16)] */,
-				      WERROR *werror)
-{
-	struct svcctl_CreateServiceA r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.ServiceName = ServiceName;
-	r.in.DisplayName = DisplayName;
-	r.in.desired_access = desired_access;
-	r.in.type = type;
-	r.in.start_type = start_type;
-	r.in.error_control = error_control;
-	r.in.binary_path = binary_path;
-	r.in.LoadOrderGroupKey = LoadOrderGroupKey;
-	r.in.dependencies = dependencies;
-	r.in.service_start_name = service_start_name;
-	r.in.password = password;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_CreateServiceA, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_CREATESERVICEA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_CreateServiceA, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	if (TagId && r.out.TagId) {
-		*TagId = *r.out.TagId;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_EnumDependentServicesA(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      struct policy_handle *service /* [in] [ref] */,
-					      uint32_t state /* [in]  */,
-					      struct ENUM_SERVICE_STATUS *service_status /* [out] [unique] */,
-					      uint32_t buf_size /* [in]  */,
-					      uint32_t *bytes_needed /* [out] [ref] */,
-					      uint32_t *services_returned /* [out] [ref] */,
-					      WERROR *werror)
-{
-	struct svcctl_EnumDependentServicesA r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.service = service;
-	r.in.state = state;
-	r.in.buf_size = buf_size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_EnumDependentServicesA, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_ENUMDEPENDENTSERVICESA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_EnumDependentServicesA, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	if (service_status && r.out.service_status) {
-		*service_status = *r.out.service_status;
-	}
-	*bytes_needed = *r.out.bytes_needed;
-	*services_returned = *r.out.services_returned;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_EnumServicesStatusA(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   struct policy_handle *handle /* [in] [ref] */,
-					   uint32_t type /* [in]  */,
-					   uint32_t state /* [in]  */,
-					   uint32_t buf_size /* [in]  */,
-					   uint8_t *service /* [out] [size_is(buf_size)] */,
-					   uint32_t *bytes_needed /* [out] [ref] */,
-					   uint32_t *services_returned /* [out] [ref] */,
-					   uint32_t *resume_handle /* [in,out] [unique] */,
-					   WERROR *werror)
-{
-	struct svcctl_EnumServicesStatusA r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.type = type;
-	r.in.state = state;
-	r.in.buf_size = buf_size;
-	r.in.resume_handle = resume_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_EnumServicesStatusA, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_ENUMSERVICESSTATUSA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_EnumServicesStatusA, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	memcpy(service, r.out.service, r.in.buf_size * sizeof(*service));
-	*bytes_needed = *r.out.bytes_needed;
-	*services_returned = *r.out.services_returned;
-	if (resume_handle && r.out.resume_handle) {
-		*resume_handle = *r.out.resume_handle;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_OpenSCManagerA(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      const char *MachineName /* [in] [unique,charset(UTF16)] */,
-				      const char *DatabaseName /* [in] [unique,charset(UTF16)] */,
-				      uint32_t access_mask /* [in]  */,
-				      struct policy_handle *handle /* [out] [ref] */,
-				      WERROR *werror)
-{
-	struct svcctl_OpenSCManagerA r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.MachineName = MachineName;
-	r.in.DatabaseName = DatabaseName;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_OpenSCManagerA, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_OPENSCMANAGERA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_OpenSCManagerA, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*handle = *r.out.handle;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_OpenServiceA(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    struct policy_handle *scmanager_handle /* [in] [ref] */,
-				    const char *ServiceName /* [in] [unique,charset(UTF16)] */,
-				    uint32_t access_mask /* [in]  */,
-				    WERROR *werror)
-{
-	struct svcctl_OpenServiceA r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.scmanager_handle = scmanager_handle;
-	r.in.ServiceName = ServiceName;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_OpenServiceA, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_OPENSERVICEA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_OpenServiceA, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_QueryServiceConfigA(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   struct policy_handle *handle /* [in] [ref] */,
-					   uint8_t *query /* [out]  */,
-					   uint32_t buf_size /* [in]  */,
-					   uint32_t *bytes_needed /* [out] [ref] */,
-					   WERROR *werror)
-{
-	struct svcctl_QueryServiceConfigA r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.buf_size = buf_size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_QueryServiceConfigA, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_QUERYSERVICECONFIGA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_QueryServiceConfigA, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	memcpy(query, r.out.query, r.in.buf_size * sizeof(*query));
-	*bytes_needed = *r.out.bytes_needed;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_QueryServiceLockStatusA(struct rpc_pipe_client *cli,
-					       TALLOC_CTX *mem_ctx,
-					       struct policy_handle *handle /* [in] [ref] */,
-					       uint32_t buf_size /* [in]  */,
-					       struct SERVICE_LOCK_STATUS *lock_status /* [out] [ref] */,
-					       uint32_t *required_buf_size /* [out] [ref] */,
-					       WERROR *werror)
-{
-	struct svcctl_QueryServiceLockStatusA r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.buf_size = buf_size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_QueryServiceLockStatusA, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_QUERYSERVICELOCKSTATUSA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_QueryServiceLockStatusA, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*lock_status = *r.out.lock_status;
-	*required_buf_size = *r.out.required_buf_size;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_StartServiceA(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     struct policy_handle *handle /* [in] [ref] */,
-				     uint32_t NumArgs /* [in]  */,
-				     const char *Arguments /* [in] [unique,charset(UTF16)] */,
-				     WERROR *werror)
-{
-	struct svcctl_StartServiceA r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.NumArgs = NumArgs;
-	r.in.Arguments = Arguments;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_StartServiceA, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_STARTSERVICEA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_StartServiceA, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_GetServiceDisplayNameA(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      struct policy_handle *handle /* [in] [ref] */,
-					      const char *service_name /* [in] [unique,charset(UTF16)] */,
-					      const char **display_name /* [out] [ref,charset(UTF16)] */,
-					      uint32_t *display_name_length /* [in,out] [unique] */,
-					      WERROR *werror)
-{
-	struct svcctl_GetServiceDisplayNameA r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.service_name = service_name;
-	r.in.display_name_length = display_name_length;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_GetServiceDisplayNameA, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_GETSERVICEDISPLAYNAMEA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_GetServiceDisplayNameA, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*display_name = *r.out.display_name;
-	if (display_name_length && r.out.display_name_length) {
-		*display_name_length = *r.out.display_name_length;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_GetServiceKeyNameA(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  struct policy_handle *handle /* [in] [ref] */,
-					  const char *service_name /* [in] [unique,charset(UTF16)] */,
-					  const char **key_name /* [out] [ref,charset(UTF16)] */,
-					  uint32_t *display_name_length /* [in,out] [unique] */,
-					  WERROR *werror)
-{
-	struct svcctl_GetServiceKeyNameA r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.service_name = service_name;
-	r.in.display_name_length = display_name_length;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_GetServiceKeyNameA, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_GETSERVICEKEYNAMEA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_GetServiceKeyNameA, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*key_name = *r.out.key_name;
-	if (display_name_length && r.out.display_name_length) {
-		*display_name_length = *r.out.display_name_length;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_GetCurrentGroupeStateW(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      WERROR *werror)
-{
-	struct svcctl_GetCurrentGroupeStateW r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_GetCurrentGroupeStateW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_GETCURRENTGROUPESTATEW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_GetCurrentGroupeStateW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_EnumServiceGroupW(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 WERROR *werror)
-{
-	struct svcctl_EnumServiceGroupW r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_EnumServiceGroupW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_ENUMSERVICEGROUPW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_EnumServiceGroupW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_ChangeServiceConfig2A(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx,
-					     struct policy_handle *handle /* [in] [ref] */,
-					     uint32_t info_level /* [in]  */,
-					     uint8_t *info /* [in] [unique] */,
-					     WERROR *werror)
-{
-	struct svcctl_ChangeServiceConfig2A r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.info_level = info_level;
-	r.in.info = info;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_ChangeServiceConfig2A, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_CHANGESERVICECONFIG2A,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_ChangeServiceConfig2A, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_ChangeServiceConfig2W(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx,
-					     struct policy_handle *handle /* [in] [ref] */,
-					     uint32_t info_level /* [in]  */,
-					     uint8_t *info /* [in] [unique] */,
-					     WERROR *werror)
-{
-	struct svcctl_ChangeServiceConfig2W r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.info_level = info_level;
-	r.in.info = info;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_ChangeServiceConfig2W, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_CHANGESERVICECONFIG2W,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_ChangeServiceConfig2W, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_QueryServiceConfig2A(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    struct policy_handle *handle /* [in] [ref] */,
-					    uint32_t info_level /* [in]  */,
-					    uint8_t *buffer /* [out]  */,
-					    uint32_t buf_size /* [in]  */,
-					    uint32_t *bytes_needed /* [out] [ref] */,
-					    WERROR *werror)
-{
-	struct svcctl_QueryServiceConfig2A r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.info_level = info_level;
-	r.in.buf_size = buf_size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_QueryServiceConfig2A, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_QUERYSERVICECONFIG2A,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_QueryServiceConfig2A, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	memcpy(buffer, r.out.buffer, r.in.buf_size * sizeof(*buffer));
-	*bytes_needed = *r.out.bytes_needed;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_QueryServiceConfig2W(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    struct policy_handle *handle /* [in] [ref] */,
-					    uint32_t info_level /* [in]  */,
-					    uint8_t *buffer /* [out]  */,
-					    uint32_t buf_size /* [in]  */,
-					    uint32_t *bytes_needed /* [out] [ref] */,
-					    WERROR *werror)
-{
-	struct svcctl_QueryServiceConfig2W r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.info_level = info_level;
-	r.in.buf_size = buf_size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_QueryServiceConfig2W, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_QUERYSERVICECONFIG2W,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_QueryServiceConfig2W, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	memcpy(buffer, r.out.buffer, r.in.buf_size * sizeof(*buffer));
-	*bytes_needed = *r.out.bytes_needed;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_QueryServiceStatusEx(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    struct policy_handle *handle /* [in] [ref] */,
-					    uint32_t info_level /* [in]  */,
-					    uint8_t *buffer /* [out]  */,
-					    uint32_t buf_size /* [in]  */,
-					    uint32_t *bytes_needed /* [out] [ref] */,
-					    WERROR *werror)
-{
-	struct svcctl_QueryServiceStatusEx r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.info_level = info_level;
-	r.in.buf_size = buf_size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_QueryServiceStatusEx, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_QUERYSERVICESTATUSEX,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_QueryServiceStatusEx, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	memcpy(buffer, r.out.buffer, r.in.buf_size * sizeof(*buffer));
-	*bytes_needed = *r.out.bytes_needed;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_EnumServicesStatusExA(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *scmanager /* [in] [ref] */,
-				      uint32_t info_level /* [in]  */,
-				      uint32_t type /* [in]  */,
-				      uint32_t state /* [in]  */,
-				      uint8_t *services /* [out]  */,
-				      uint32_t buf_size /* [in]  */,
-				      uint32_t *bytes_needed /* [out] [ref] */,
-				      uint32_t *service_returned /* [out] [ref] */,
-				      uint32_t *resume_handle /* [in,out] [unique] */,
-				      const char **group_name /* [out] [ref,charset(UTF16)] */,
-				      WERROR *werror)
-{
-	struct EnumServicesStatusExA r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.scmanager = scmanager;
-	r.in.info_level = info_level;
-	r.in.type = type;
-	r.in.state = state;
-	r.in.buf_size = buf_size;
-	r.in.resume_handle = resume_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(EnumServicesStatusExA, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_ENUMSERVICESSTATUSEXA,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(EnumServicesStatusExA, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	memcpy(services, r.out.services, r.in.buf_size * sizeof(*services));
-	*bytes_needed = *r.out.bytes_needed;
-	*service_returned = *r.out.service_returned;
-	if (resume_handle && r.out.resume_handle) {
-		*resume_handle = *r.out.resume_handle;
-	}
-	*group_name = *r.out.group_name;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_EnumServicesStatusExW(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *scmanager /* [in] [ref] */,
-				      uint32_t info_level /* [in]  */,
-				      uint32_t type /* [in]  */,
-				      uint32_t state /* [in]  */,
-				      uint8_t *services /* [out]  */,
-				      uint32_t buf_size /* [in]  */,
-				      uint32_t *bytes_needed /* [out] [ref] */,
-				      uint32_t *service_returned /* [out] [ref] */,
-				      uint32_t *resume_handle /* [in,out] [unique] */,
-				      const char **group_name /* [out] [ref,charset(UTF16)] */,
-				      WERROR *werror)
-{
-	struct EnumServicesStatusExW r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.scmanager = scmanager;
-	r.in.info_level = info_level;
-	r.in.type = type;
-	r.in.state = state;
-	r.in.buf_size = buf_size;
-	r.in.resume_handle = resume_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(EnumServicesStatusExW, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_ENUMSERVICESSTATUSEXW,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(EnumServicesStatusExW, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	memcpy(services, r.out.services, r.in.buf_size * sizeof(*services));
-	*bytes_needed = *r.out.bytes_needed;
-	*service_returned = *r.out.service_returned;
-	if (resume_handle && r.out.resume_handle) {
-		*resume_handle = *r.out.resume_handle;
-	}
-	*group_name = *r.out.group_name;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_svcctl_SCSendTSMessage(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       WERROR *werror)
-{
-	struct svcctl_SCSendTSMessage r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_SCSendTSMessage, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_SVCCTL,
-				&ndr_table_svcctl,
-				NDR_SVCCTL_SCSENDTSMESSAGE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_SCSendTSMessage, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_svcctl.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_svcctl.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_svcctl.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,336 +0,0 @@
-#include "librpc/gen_ndr/ndr_svcctl.h"
-#ifndef __CLI_SVCCTL__
-#define __CLI_SVCCTL__
-NTSTATUS rpccli_svcctl_CloseServiceHandle(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  struct policy_handle *handle /* [in,out] [ref] */,
-					  WERROR *werror);
-NTSTATUS rpccli_svcctl_ControlService(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *handle /* [in] [ref] */,
-				      uint32_t control /* [in]  */,
-				      struct SERVICE_STATUS *service_status /* [out] [ref] */,
-				      WERROR *werror);
-NTSTATUS rpccli_svcctl_DeleteService(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     struct policy_handle *handle /* [in] [ref] */,
-				     WERROR *werror);
-NTSTATUS rpccli_svcctl_LockServiceDatabase(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   struct policy_handle *handle /* [in] [ref] */,
-					   struct policy_handle *lock /* [out] [ref] */,
-					   WERROR *werror);
-NTSTATUS rpccli_svcctl_QueryServiceObjectSecurity(struct rpc_pipe_client *cli,
-						  TALLOC_CTX *mem_ctx,
-						  struct policy_handle *handle /* [in] [ref] */,
-						  uint32_t security_flags /* [in]  */,
-						  uint8_t *buffer /* [out] [ref,size_is(buffer_size)] */,
-						  uint32_t buffer_size /* [in] [range(0,0x40000)] */,
-						  uint32_t *needed /* [out] [ref,range(0,0x40000)] */,
-						  WERROR *werror);
-NTSTATUS rpccli_svcctl_SetServiceObjectSecurity(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx,
-						struct policy_handle *handle /* [in] [ref] */,
-						uint32_t security_flags /* [in]  */,
-						uint8_t *buffer /* [in] [ref,size_is(buffer_size)] */,
-						uint32_t buffer_size /* [in]  */,
-						WERROR *werror);
-NTSTATUS rpccli_svcctl_QueryServiceStatus(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  struct policy_handle *handle /* [in] [ref] */,
-					  struct SERVICE_STATUS *service_status /* [out] [ref] */,
-					  WERROR *werror);
-NTSTATUS rpccli_svcctl_SetServiceStatus(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					WERROR *werror);
-NTSTATUS rpccli_svcctl_UnlockServiceDatabase(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx,
-					     struct policy_handle *lock /* [in,out] [ref] */,
-					     WERROR *werror);
-NTSTATUS rpccli_svcctl_NotifyBootConfigStatus(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      WERROR *werror);
-NTSTATUS rpccli_svcctl_SCSetServiceBitsW(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 struct policy_handle *handle /* [in] [ref] */,
-					 uint32_t bits /* [in]  */,
-					 uint32_t bitson /* [in]  */,
-					 uint32_t immediate /* [in]  */,
-					 WERROR *werror);
-NTSTATUS rpccli_svcctl_ChangeServiceConfigW(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    struct policy_handle *handle /* [in] [ref] */,
-					    uint32_t type /* [in]  */,
-					    uint32_t start /* [in]  */,
-					    uint32_t error /* [in]  */,
-					    const char *binary_path /* [in] [unique,charset(UTF16)] */,
-					    const char *load_order_group /* [in] [unique,charset(UTF16)] */,
-					    uint32_t *tag_id /* [out] [ref] */,
-					    const char *dependencies /* [in] [unique,charset(UTF16)] */,
-					    const char *service_start_name /* [in] [unique,charset(UTF16)] */,
-					    const char *password /* [in] [unique,charset(UTF16)] */,
-					    const char *display_name /* [in] [unique,charset(UTF16)] */,
-					    WERROR *werror);
-NTSTATUS rpccli_svcctl_CreateServiceW(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *scmanager_handle /* [in] [ref] */,
-				      const char *ServiceName /* [in] [charset(UTF16)] */,
-				      const char *DisplayName /* [in] [unique,charset(UTF16)] */,
-				      uint32_t desired_access /* [in]  */,
-				      uint32_t type /* [in]  */,
-				      uint32_t start_type /* [in]  */,
-				      uint32_t error_control /* [in]  */,
-				      const char *binary_path /* [in] [charset(UTF16)] */,
-				      const char *LoadOrderGroupKey /* [in] [unique,charset(UTF16)] */,
-				      uint32_t *TagId /* [in,out] [unique] */,
-				      uint8_t *dependencies /* [in] [unique,size_is(dependencies_size)] */,
-				      uint32_t dependencies_size /* [in]  */,
-				      const char *service_start_name /* [in] [unique,charset(UTF16)] */,
-				      uint8_t *password /* [in] [unique,size_is(password_size)] */,
-				      uint32_t password_size /* [in]  */,
-				      struct policy_handle *handle /* [out] [ref] */,
-				      WERROR *werror);
-NTSTATUS rpccli_svcctl_EnumDependentServicesW(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      struct policy_handle *service /* [in] [ref] */,
-					      uint32_t state /* [in]  */,
-					      struct ENUM_SERVICE_STATUS *service_status /* [out] [unique] */,
-					      uint32_t buf_size /* [in]  */,
-					      uint32_t *bytes_needed /* [out] [ref] */,
-					      uint32_t *services_returned /* [out] [ref] */,
-					      WERROR *werror);
-NTSTATUS rpccli_svcctl_EnumServicesStatusW(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   struct policy_handle *handle /* [in] [ref] */,
-					   uint32_t type /* [in]  */,
-					   uint32_t state /* [in]  */,
-					   uint32_t buf_size /* [in]  */,
-					   uint8_t *service /* [out] [size_is(buf_size)] */,
-					   uint32_t *bytes_needed /* [out] [ref] */,
-					   uint32_t *services_returned /* [out] [ref] */,
-					   uint32_t *resume_handle /* [in,out] [unique] */,
-					   WERROR *werror);
-NTSTATUS rpccli_svcctl_OpenSCManagerW(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      const char *MachineName /* [in] [unique,charset(UTF16)] */,
-				      const char *DatabaseName /* [in] [unique,charset(UTF16)] */,
-				      uint32_t access_mask /* [in]  */,
-				      struct policy_handle *handle /* [out] [ref] */,
-				      WERROR *werror);
-NTSTATUS rpccli_svcctl_OpenServiceW(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    struct policy_handle *scmanager_handle /* [in] [ref] */,
-				    const char *ServiceName /* [in] [charset(UTF16)] */,
-				    uint32_t access_mask /* [in]  */,
-				    struct policy_handle *handle /* [out] [ref] */,
-				    WERROR *werror);
-NTSTATUS rpccli_svcctl_QueryServiceConfigW(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   struct policy_handle *handle /* [in] [ref] */,
-					   uint8_t *query /* [out]  */,
-					   uint32_t buf_size /* [in]  */,
-					   uint32_t *bytes_needed /* [out] [ref] */,
-					   WERROR *werror);
-NTSTATUS rpccli_svcctl_QueryServiceLockStatusW(struct rpc_pipe_client *cli,
-					       TALLOC_CTX *mem_ctx,
-					       struct policy_handle *handle /* [in] [ref] */,
-					       uint32_t buf_size /* [in]  */,
-					       struct SERVICE_LOCK_STATUS *lock_status /* [out] [ref] */,
-					       uint32_t *required_buf_size /* [out] [ref] */,
-					       WERROR *werror);
-NTSTATUS rpccli_svcctl_StartServiceW(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     struct policy_handle *handle /* [in] [ref] */,
-				     uint32_t NumArgs /* [in]  */,
-				     const char *Arguments /* [in] [unique,charset(UTF16)] */,
-				     WERROR *werror);
-NTSTATUS rpccli_svcctl_GetServiceDisplayNameW(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      struct policy_handle *handle /* [in] [ref] */,
-					      const char *service_name /* [in] [unique,charset(UTF16)] */,
-					      const char **display_name /* [out] [ref,charset(UTF16)] */,
-					      uint32_t *display_name_length /* [in,out] [unique] */,
-					      WERROR *werror);
-NTSTATUS rpccli_svcctl_GetServiceKeyNameW(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  struct policy_handle *handle /* [in] [ref] */,
-					  const char *service_name /* [in] [unique,charset(UTF16)] */,
-					  const char **key_name /* [out] [ref,charset(UTF16)] */,
-					  uint32_t *display_name_length /* [in,out] [unique] */,
-					  WERROR *werror);
-NTSTATUS rpccli_svcctl_SCSetServiceBitsA(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 struct policy_handle *handle /* [in] [ref] */,
-					 uint32_t bits /* [in]  */,
-					 uint32_t bitson /* [in]  */,
-					 uint32_t immediate /* [in]  */,
-					 WERROR *werror);
-NTSTATUS rpccli_svcctl_ChangeServiceConfigA(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    struct policy_handle *handle /* [in] [ref] */,
-					    uint32_t type /* [in]  */,
-					    uint32_t start /* [in]  */,
-					    uint32_t error /* [in]  */,
-					    const char *binary_path /* [in] [unique,charset(UTF16)] */,
-					    const char *load_order_group /* [in] [unique,charset(UTF16)] */,
-					    uint32_t *tag_id /* [out] [ref] */,
-					    const char *dependencies /* [in] [unique,charset(UTF16)] */,
-					    const char *service_start_name /* [in] [unique,charset(UTF16)] */,
-					    const char *password /* [in] [unique,charset(UTF16)] */,
-					    const char *display_name /* [in] [unique,charset(UTF16)] */,
-					    WERROR *werror);
-NTSTATUS rpccli_svcctl_CreateServiceA(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *handle /* [in] [ref] */,
-				      const char *ServiceName /* [in] [unique,charset(UTF16)] */,
-				      const char *DisplayName /* [in] [unique,charset(UTF16)] */,
-				      uint32_t desired_access /* [in]  */,
-				      uint32_t type /* [in]  */,
-				      uint32_t start_type /* [in]  */,
-				      uint32_t error_control /* [in]  */,
-				      const char *binary_path /* [in] [unique,charset(UTF16)] */,
-				      const char *LoadOrderGroupKey /* [in] [unique,charset(UTF16)] */,
-				      uint32_t *TagId /* [out] [unique] */,
-				      const char *dependencies /* [in] [unique,charset(UTF16)] */,
-				      const char *service_start_name /* [in] [unique,charset(UTF16)] */,
-				      const char *password /* [in] [unique,charset(UTF16)] */,
-				      WERROR *werror);
-NTSTATUS rpccli_svcctl_EnumDependentServicesA(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      struct policy_handle *service /* [in] [ref] */,
-					      uint32_t state /* [in]  */,
-					      struct ENUM_SERVICE_STATUS *service_status /* [out] [unique] */,
-					      uint32_t buf_size /* [in]  */,
-					      uint32_t *bytes_needed /* [out] [ref] */,
-					      uint32_t *services_returned /* [out] [ref] */,
-					      WERROR *werror);
-NTSTATUS rpccli_svcctl_EnumServicesStatusA(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   struct policy_handle *handle /* [in] [ref] */,
-					   uint32_t type /* [in]  */,
-					   uint32_t state /* [in]  */,
-					   uint32_t buf_size /* [in]  */,
-					   uint8_t *service /* [out] [size_is(buf_size)] */,
-					   uint32_t *bytes_needed /* [out] [ref] */,
-					   uint32_t *services_returned /* [out] [ref] */,
-					   uint32_t *resume_handle /* [in,out] [unique] */,
-					   WERROR *werror);
-NTSTATUS rpccli_svcctl_OpenSCManagerA(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      const char *MachineName /* [in] [unique,charset(UTF16)] */,
-				      const char *DatabaseName /* [in] [unique,charset(UTF16)] */,
-				      uint32_t access_mask /* [in]  */,
-				      struct policy_handle *handle /* [out] [ref] */,
-				      WERROR *werror);
-NTSTATUS rpccli_svcctl_OpenServiceA(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    struct policy_handle *scmanager_handle /* [in] [ref] */,
-				    const char *ServiceName /* [in] [unique,charset(UTF16)] */,
-				    uint32_t access_mask /* [in]  */,
-				    WERROR *werror);
-NTSTATUS rpccli_svcctl_QueryServiceConfigA(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   struct policy_handle *handle /* [in] [ref] */,
-					   uint8_t *query /* [out]  */,
-					   uint32_t buf_size /* [in]  */,
-					   uint32_t *bytes_needed /* [out] [ref] */,
-					   WERROR *werror);
-NTSTATUS rpccli_svcctl_QueryServiceLockStatusA(struct rpc_pipe_client *cli,
-					       TALLOC_CTX *mem_ctx,
-					       struct policy_handle *handle /* [in] [ref] */,
-					       uint32_t buf_size /* [in]  */,
-					       struct SERVICE_LOCK_STATUS *lock_status /* [out] [ref] */,
-					       uint32_t *required_buf_size /* [out] [ref] */,
-					       WERROR *werror);
-NTSTATUS rpccli_svcctl_StartServiceA(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     struct policy_handle *handle /* [in] [ref] */,
-				     uint32_t NumArgs /* [in]  */,
-				     const char *Arguments /* [in] [unique,charset(UTF16)] */,
-				     WERROR *werror);
-NTSTATUS rpccli_svcctl_GetServiceDisplayNameA(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      struct policy_handle *handle /* [in] [ref] */,
-					      const char *service_name /* [in] [unique,charset(UTF16)] */,
-					      const char **display_name /* [out] [ref,charset(UTF16)] */,
-					      uint32_t *display_name_length /* [in,out] [unique] */,
-					      WERROR *werror);
-NTSTATUS rpccli_svcctl_GetServiceKeyNameA(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  struct policy_handle *handle /* [in] [ref] */,
-					  const char *service_name /* [in] [unique,charset(UTF16)] */,
-					  const char **key_name /* [out] [ref,charset(UTF16)] */,
-					  uint32_t *display_name_length /* [in,out] [unique] */,
-					  WERROR *werror);
-NTSTATUS rpccli_svcctl_GetCurrentGroupeStateW(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      WERROR *werror);
-NTSTATUS rpccli_svcctl_EnumServiceGroupW(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 WERROR *werror);
-NTSTATUS rpccli_svcctl_ChangeServiceConfig2A(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx,
-					     struct policy_handle *handle /* [in] [ref] */,
-					     uint32_t info_level /* [in]  */,
-					     uint8_t *info /* [in] [unique] */,
-					     WERROR *werror);
-NTSTATUS rpccli_svcctl_ChangeServiceConfig2W(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx,
-					     struct policy_handle *handle /* [in] [ref] */,
-					     uint32_t info_level /* [in]  */,
-					     uint8_t *info /* [in] [unique] */,
-					     WERROR *werror);
-NTSTATUS rpccli_svcctl_QueryServiceConfig2A(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    struct policy_handle *handle /* [in] [ref] */,
-					    uint32_t info_level /* [in]  */,
-					    uint8_t *buffer /* [out]  */,
-					    uint32_t buf_size /* [in]  */,
-					    uint32_t *bytes_needed /* [out] [ref] */,
-					    WERROR *werror);
-NTSTATUS rpccli_svcctl_QueryServiceConfig2W(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    struct policy_handle *handle /* [in] [ref] */,
-					    uint32_t info_level /* [in]  */,
-					    uint8_t *buffer /* [out]  */,
-					    uint32_t buf_size /* [in]  */,
-					    uint32_t *bytes_needed /* [out] [ref] */,
-					    WERROR *werror);
-NTSTATUS rpccli_svcctl_QueryServiceStatusEx(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    struct policy_handle *handle /* [in] [ref] */,
-					    uint32_t info_level /* [in]  */,
-					    uint8_t *buffer /* [out]  */,
-					    uint32_t buf_size /* [in]  */,
-					    uint32_t *bytes_needed /* [out] [ref] */,
-					    WERROR *werror);
-NTSTATUS rpccli_EnumServicesStatusExA(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *scmanager /* [in] [ref] */,
-				      uint32_t info_level /* [in]  */,
-				      uint32_t type /* [in]  */,
-				      uint32_t state /* [in]  */,
-				      uint8_t *services /* [out]  */,
-				      uint32_t buf_size /* [in]  */,
-				      uint32_t *bytes_needed /* [out] [ref] */,
-				      uint32_t *service_returned /* [out] [ref] */,
-				      uint32_t *resume_handle /* [in,out] [unique] */,
-				      const char **group_name /* [out] [ref,charset(UTF16)] */,
-				      WERROR *werror);
-NTSTATUS rpccli_EnumServicesStatusExW(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *scmanager /* [in] [ref] */,
-				      uint32_t info_level /* [in]  */,
-				      uint32_t type /* [in]  */,
-				      uint32_t state /* [in]  */,
-				      uint8_t *services /* [out]  */,
-				      uint32_t buf_size /* [in]  */,
-				      uint32_t *bytes_needed /* [out] [ref] */,
-				      uint32_t *service_returned /* [out] [ref] */,
-				      uint32_t *resume_handle /* [in,out] [unique] */,
-				      const char **group_name /* [out] [ref,charset(UTF16)] */,
-				      WERROR *werror);
-NTSTATUS rpccli_svcctl_SCSendTSMessage(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       WERROR *werror);
-#endif /* __CLI_SVCCTL__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_winreg.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_winreg.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_winreg.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,1761 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * client auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/cli_winreg.h"
-
-NTSTATUS rpccli_winreg_OpenHKCR(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				uint16_t *system_name /* [in] [unique] */,
-				uint32_t access_mask /* [in]  */,
-				struct policy_handle *handle /* [out] [ref] */,
-				WERROR *werror)
-{
-	struct winreg_OpenHKCR r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.system_name = system_name;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_OpenHKCR, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_OPENHKCR,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_OpenHKCR, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*handle = *r.out.handle;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_OpenHKCU(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				uint16_t *system_name /* [in] [unique] */,
-				uint32_t access_mask /* [in]  */,
-				struct policy_handle *handle /* [out] [ref] */,
-				WERROR *werror)
-{
-	struct winreg_OpenHKCU r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.system_name = system_name;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_OpenHKCU, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_OPENHKCU,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_OpenHKCU, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*handle = *r.out.handle;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_OpenHKLM(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				uint16_t *system_name /* [in] [unique] */,
-				uint32_t access_mask /* [in]  */,
-				struct policy_handle *handle /* [out] [ref] */,
-				WERROR *werror)
-{
-	struct winreg_OpenHKLM r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.system_name = system_name;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_OpenHKLM, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_OPENHKLM,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_OpenHKLM, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*handle = *r.out.handle;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_OpenHKPD(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				uint16_t *system_name /* [in] [unique] */,
-				uint32_t access_mask /* [in]  */,
-				struct policy_handle *handle /* [out] [ref] */,
-				WERROR *werror)
-{
-	struct winreg_OpenHKPD r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.system_name = system_name;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_OpenHKPD, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_OPENHKPD,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_OpenHKPD, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*handle = *r.out.handle;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_OpenHKU(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       uint16_t *system_name /* [in] [unique] */,
-			       uint32_t access_mask /* [in]  */,
-			       struct policy_handle *handle /* [out] [ref] */,
-			       WERROR *werror)
-{
-	struct winreg_OpenHKU r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.system_name = system_name;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_OpenHKU, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_OPENHKU,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_OpenHKU, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*handle = *r.out.handle;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_CloseKey(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				struct policy_handle *handle /* [in,out] [ref] */,
-				WERROR *werror)
-{
-	struct winreg_CloseKey r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_CloseKey, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_CLOSEKEY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_CloseKey, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*handle = *r.out.handle;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_CreateKey(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *handle /* [in] [ref] */,
-				 struct winreg_String name /* [in]  */,
-				 struct winreg_String keyclass /* [in]  */,
-				 uint32_t options /* [in]  */,
-				 uint32_t access_mask /* [in]  */,
-				 struct winreg_SecBuf *secdesc /* [in] [unique] */,
-				 struct policy_handle *new_handle /* [out] [ref] */,
-				 enum winreg_CreateAction *action_taken /* [in,out] [unique] */,
-				 WERROR *werror)
-{
-	struct winreg_CreateKey r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.name = name;
-	r.in.keyclass = keyclass;
-	r.in.options = options;
-	r.in.access_mask = access_mask;
-	r.in.secdesc = secdesc;
-	r.in.action_taken = action_taken;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_CreateKey, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_CREATEKEY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_CreateKey, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*new_handle = *r.out.new_handle;
-	if (action_taken && r.out.action_taken) {
-		*action_taken = *r.out.action_taken;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_DeleteKey(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *handle /* [in] [ref] */,
-				 struct winreg_String key /* [in]  */,
-				 WERROR *werror)
-{
-	struct winreg_DeleteKey r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.key = key;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_DeleteKey, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_DELETEKEY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_DeleteKey, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_DeleteValue(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   struct policy_handle *handle /* [in] [ref] */,
-				   struct winreg_String value /* [in]  */,
-				   WERROR *werror)
-{
-	struct winreg_DeleteValue r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.value = value;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_DeleteValue, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_DELETEVALUE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_DeleteValue, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_EnumKey(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       struct policy_handle *handle /* [in] [ref] */,
-			       uint32_t enum_index /* [in]  */,
-			       struct winreg_StringBuf *name /* [in,out] [ref] */,
-			       struct winreg_StringBuf *keyclass /* [in,out] [unique] */,
-			       NTTIME *last_changed_time /* [in,out] [unique] */,
-			       WERROR *werror)
-{
-	struct winreg_EnumKey r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.enum_index = enum_index;
-	r.in.name = name;
-	r.in.keyclass = keyclass;
-	r.in.last_changed_time = last_changed_time;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_EnumKey, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_ENUMKEY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_EnumKey, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*name = *r.out.name;
-	if (keyclass && r.out.keyclass) {
-		*keyclass = *r.out.keyclass;
-	}
-	if (last_changed_time && r.out.last_changed_time) {
-		*last_changed_time = *r.out.last_changed_time;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_EnumValue(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *handle /* [in] [ref] */,
-				 uint32_t enum_index /* [in]  */,
-				 struct winreg_ValNameBuf *name /* [in,out] [ref] */,
-				 enum winreg_Type *type /* [in,out] [unique] */,
-				 uint8_t *value /* [in,out] [unique,length_is(*length),size_is(*size)] */,
-				 uint32_t *size /* [in,out] [unique] */,
-				 uint32_t *length /* [in,out] [unique] */,
-				 WERROR *werror)
-{
-	struct winreg_EnumValue r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.enum_index = enum_index;
-	r.in.name = name;
-	r.in.type = type;
-	r.in.value = value;
-	r.in.size = size;
-	r.in.length = length;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_EnumValue, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_ENUMVALUE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_EnumValue, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*name = *r.out.name;
-	if (type && r.out.type) {
-		*type = *r.out.type;
-	}
-	if (value && r.out.value) {
-		memcpy(value, r.out.value, *r.in.size * sizeof(*value));
-	}
-	if (size && r.out.size) {
-		*size = *r.out.size;
-	}
-	if (length && r.out.length) {
-		*length = *r.out.length;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_FlushKey(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				struct policy_handle *handle /* [in] [ref] */,
-				WERROR *werror)
-{
-	struct winreg_FlushKey r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_FlushKey, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_FLUSHKEY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_FlushKey, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_GetKeySecurity(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *handle /* [in] [ref] */,
-				      uint32_t sec_info /* [in]  */,
-				      struct KeySecurityData *sd /* [in,out] [ref] */,
-				      WERROR *werror)
-{
-	struct winreg_GetKeySecurity r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.sec_info = sec_info;
-	r.in.sd = sd;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_GetKeySecurity, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_GETKEYSECURITY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_GetKeySecurity, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*sd = *r.out.sd;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_LoadKey(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       struct policy_handle *handle /* [in] [ref] */,
-			       struct winreg_String *keyname /* [in] [unique] */,
-			       struct winreg_String *filename /* [in] [unique] */,
-			       WERROR *werror)
-{
-	struct winreg_LoadKey r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.keyname = keyname;
-	r.in.filename = filename;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_LoadKey, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_LOADKEY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_LoadKey, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_NotifyChangeKeyValue(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    struct policy_handle *handle /* [in] [ref] */,
-					    uint8_t watch_subtree /* [in]  */,
-					    uint32_t notify_filter /* [in]  */,
-					    uint32_t unknown /* [in]  */,
-					    struct winreg_String string1 /* [in]  */,
-					    struct winreg_String string2 /* [in]  */,
-					    uint32_t unknown2 /* [in]  */,
-					    WERROR *werror)
-{
-	struct winreg_NotifyChangeKeyValue r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.watch_subtree = watch_subtree;
-	r.in.notify_filter = notify_filter;
-	r.in.unknown = unknown;
-	r.in.string1 = string1;
-	r.in.string2 = string2;
-	r.in.unknown2 = unknown2;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_NotifyChangeKeyValue, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_NOTIFYCHANGEKEYVALUE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_NotifyChangeKeyValue, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_OpenKey(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       struct policy_handle *parent_handle /* [in] [ref] */,
-			       struct winreg_String keyname /* [in]  */,
-			       uint32_t unknown /* [in]  */,
-			       uint32_t access_mask /* [in]  */,
-			       struct policy_handle *handle /* [out] [ref] */,
-			       WERROR *werror)
-{
-	struct winreg_OpenKey r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.parent_handle = parent_handle;
-	r.in.keyname = keyname;
-	r.in.unknown = unknown;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_OpenKey, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_OPENKEY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_OpenKey, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*handle = *r.out.handle;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_QueryInfoKey(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    struct policy_handle *handle /* [in] [ref] */,
-				    struct winreg_String *classname /* [in,out] [ref] */,
-				    uint32_t *num_subkeys /* [out] [ref] */,
-				    uint32_t *max_subkeylen /* [out] [ref] */,
-				    uint32_t *max_classlen /* [out] [ref] */,
-				    uint32_t *num_values /* [out] [ref] */,
-				    uint32_t *max_valnamelen /* [out] [ref] */,
-				    uint32_t *max_valbufsize /* [out] [ref] */,
-				    uint32_t *secdescsize /* [out] [ref] */,
-				    NTTIME *last_changed_time /* [out] [ref] */,
-				    WERROR *werror)
-{
-	struct winreg_QueryInfoKey r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.classname = classname;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_QueryInfoKey, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_QUERYINFOKEY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_QueryInfoKey, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*classname = *r.out.classname;
-	*num_subkeys = *r.out.num_subkeys;
-	*max_subkeylen = *r.out.max_subkeylen;
-	*max_classlen = *r.out.max_classlen;
-	*num_values = *r.out.num_values;
-	*max_valnamelen = *r.out.max_valnamelen;
-	*max_valbufsize = *r.out.max_valbufsize;
-	*secdescsize = *r.out.secdescsize;
-	*last_changed_time = *r.out.last_changed_time;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_QueryValue(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  struct policy_handle *handle /* [in] [ref] */,
-				  struct winreg_String *value_name /* [in] [ref] */,
-				  enum winreg_Type *type /* [in,out] [unique] */,
-				  uint8_t *data /* [in,out] [unique,length_is(*value_length),size_is(*data_size)] */,
-				  uint32_t *data_size /* [in,out] [unique] */,
-				  uint32_t *value_length /* [in,out] [unique] */,
-				  WERROR *werror)
-{
-	struct winreg_QueryValue r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.value_name = value_name;
-	r.in.type = type;
-	r.in.data = data;
-	r.in.data_size = data_size;
-	r.in.value_length = value_length;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_QueryValue, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_QUERYVALUE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_QueryValue, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	if (type && r.out.type) {
-		*type = *r.out.type;
-	}
-	if (data && r.out.data) {
-		memcpy(data, r.out.data, *r.in.data_size * sizeof(*data));
-	}
-	if (data_size && r.out.data_size) {
-		*data_size = *r.out.data_size;
-	}
-	if (value_length && r.out.value_length) {
-		*value_length = *r.out.value_length;
-	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_ReplaceKey(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  WERROR *werror)
-{
-	struct winreg_ReplaceKey r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_ReplaceKey, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_REPLACEKEY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_ReplaceKey, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_RestoreKey(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  struct policy_handle *handle /* [in] [ref] */,
-				  struct winreg_String *filename /* [in] [ref] */,
-				  uint32_t flags /* [in]  */,
-				  WERROR *werror)
-{
-	struct winreg_RestoreKey r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.filename = filename;
-	r.in.flags = flags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_RestoreKey, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_RESTOREKEY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_RestoreKey, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_SaveKey(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       struct policy_handle *handle /* [in] [ref] */,
-			       struct winreg_String *filename /* [in] [ref] */,
-			       struct KeySecurityAttribute *sec_attrib /* [in] [unique] */,
-			       WERROR *werror)
-{
-	struct winreg_SaveKey r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.filename = filename;
-	r.in.sec_attrib = sec_attrib;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_SaveKey, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_SAVEKEY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_SaveKey, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_SetKeySecurity(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *handle /* [in] [ref] */,
-				      uint32_t access_mask /* [in]  */,
-				      struct KeySecurityData *sd /* [in] [ref] */,
-				      WERROR *werror)
-{
-	struct winreg_SetKeySecurity r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.access_mask = access_mask;
-	r.in.sd = sd;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_SetKeySecurity, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_SETKEYSECURITY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_SetKeySecurity, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_SetValue(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				struct policy_handle *handle /* [in] [ref] */,
-				struct winreg_String name /* [in]  */,
-				enum winreg_Type type /* [in]  */,
-				uint8_t *data /* [in] [ref,size_is(size)] */,
-				uint32_t size /* [in]  */,
-				WERROR *werror)
-{
-	struct winreg_SetValue r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-	r.in.name = name;
-	r.in.type = type;
-	r.in.data = data;
-	r.in.size = size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_SetValue, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_SETVALUE,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_SetValue, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_UnLoadKey(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 WERROR *werror)
-{
-	struct winreg_UnLoadKey r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_UnLoadKey, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_UNLOADKEY,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_UnLoadKey, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_InitiateSystemShutdown(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      uint16_t *hostname /* [in] [unique] */,
-					      struct initshutdown_String *message /* [in] [unique] */,
-					      uint32_t timeout /* [in]  */,
-					      uint8_t force_apps /* [in]  */,
-					      uint8_t reboot /* [in]  */,
-					      WERROR *werror)
-{
-	struct winreg_InitiateSystemShutdown r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.hostname = hostname;
-	r.in.message = message;
-	r.in.timeout = timeout;
-	r.in.force_apps = force_apps;
-	r.in.reboot = reboot;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_InitiateSystemShutdown, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_INITIATESYSTEMSHUTDOWN,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_InitiateSystemShutdown, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_AbortSystemShutdown(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   uint16_t *server /* [in] [unique] */,
-					   WERROR *werror)
-{
-	struct winreg_AbortSystemShutdown r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.server = server;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_AbortSystemShutdown, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_ABORTSYSTEMSHUTDOWN,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_AbortSystemShutdown, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_GetVersion(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  struct policy_handle *handle /* [in] [ref] */,
-				  uint32_t *version /* [out] [ref] */,
-				  WERROR *werror)
-{
-	struct winreg_GetVersion r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.handle = handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_GetVersion, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_GETVERSION,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_GetVersion, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*version = *r.out.version;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_OpenHKCC(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				uint16_t *system_name /* [in] [unique] */,
-				uint32_t access_mask /* [in]  */,
-				struct policy_handle *handle /* [out] [ref] */,
-				WERROR *werror)
-{
-	struct winreg_OpenHKCC r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.system_name = system_name;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_OpenHKCC, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_OPENHKCC,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_OpenHKCC, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*handle = *r.out.handle;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_OpenHKDD(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				uint16_t *system_name /* [in] [unique] */,
-				uint32_t access_mask /* [in]  */,
-				struct policy_handle *handle /* [out] [ref] */,
-				WERROR *werror)
-{
-	struct winreg_OpenHKDD r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.system_name = system_name;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_OpenHKDD, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_OPENHKDD,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_OpenHKDD, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*handle = *r.out.handle;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_QueryMultipleValues(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   struct policy_handle *key_handle /* [in] [ref] */,
-					   struct QueryMultipleValue *values /* [in,out] [ref,length_is(num_values),size_is(num_values)] */,
-					   uint32_t num_values /* [in]  */,
-					   uint8_t *buffer /* [in,out] [unique,length_is(*buffer_size),size_is(*buffer_size)] */,
-					   uint32_t *buffer_size /* [in,out] [ref] */,
-					   WERROR *werror)
-{
-	struct winreg_QueryMultipleValues r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.key_handle = key_handle;
-	r.in.values = values;
-	r.in.num_values = num_values;
-	r.in.buffer = buffer;
-	r.in.buffer_size = buffer_size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_QueryMultipleValues, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_QUERYMULTIPLEVALUES,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_QueryMultipleValues, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	memcpy(values, r.out.values, r.in.num_values * sizeof(*values));
-	if (buffer && r.out.buffer) {
-		memcpy(buffer, r.out.buffer, *r.in.buffer_size * sizeof(*buffer));
-	}
-	*buffer_size = *r.out.buffer_size;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_InitiateSystemShutdownEx(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx,
-						uint16_t *hostname /* [in] [unique] */,
-						struct initshutdown_String *message /* [in] [unique] */,
-						uint32_t timeout /* [in]  */,
-						uint8_t force_apps /* [in]  */,
-						uint8_t reboot /* [in]  */,
-						uint32_t reason /* [in]  */,
-						WERROR *werror)
-{
-	struct winreg_InitiateSystemShutdownEx r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.hostname = hostname;
-	r.in.message = message;
-	r.in.timeout = timeout;
-	r.in.force_apps = force_apps;
-	r.in.reboot = reboot;
-	r.in.reason = reason;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_InitiateSystemShutdownEx, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_INITIATESYSTEMSHUTDOWNEX,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_InitiateSystemShutdownEx, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_SaveKeyEx(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 WERROR *werror)
-{
-	struct winreg_SaveKeyEx r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_SaveKeyEx, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_SAVEKEYEX,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_SaveKeyEx, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_OpenHKPT(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				uint16_t *system_name /* [in] [unique] */,
-				uint32_t access_mask /* [in]  */,
-				struct policy_handle *handle /* [out] [ref] */,
-				WERROR *werror)
-{
-	struct winreg_OpenHKPT r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.system_name = system_name;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_OpenHKPT, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_OPENHKPT,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_OpenHKPT, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*handle = *r.out.handle;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_OpenHKPN(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				uint16_t *system_name /* [in] [unique] */,
-				uint32_t access_mask /* [in]  */,
-				struct policy_handle *handle /* [out] [ref] */,
-				WERROR *werror)
-{
-	struct winreg_OpenHKPN r;
-	NTSTATUS status;
-
-	/* In parameters */
-	r.in.system_name = system_name;
-	r.in.access_mask = access_mask;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_OpenHKPN, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_OPENHKPN,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_OpenHKPN, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-	*handle = *r.out.handle;
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-
-NTSTATUS rpccli_winreg_QueryMultipleValues2(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    WERROR *werror)
-{
-	struct winreg_QueryMultipleValues2 r;
-	NTSTATUS status;
-
-	/* In parameters */
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_QueryMultipleValues2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WINREG,
-				&ndr_table_winreg,
-				NDR_WINREG_QUERYMULTIPLEVALUES2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_QueryMultipleValues2, &r);
-	}
-
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
-	/* Return variables */
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
-	return werror_to_ntstatus(r.out.result);
-}
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/cli_winreg.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_winreg.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_winreg.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,229 +0,0 @@
-#include "librpc/gen_ndr/ndr_winreg.h"
-#ifndef __CLI_WINREG__
-#define __CLI_WINREG__
-NTSTATUS rpccli_winreg_OpenHKCR(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				uint16_t *system_name /* [in] [unique] */,
-				uint32_t access_mask /* [in]  */,
-				struct policy_handle *handle /* [out] [ref] */,
-				WERROR *werror);
-NTSTATUS rpccli_winreg_OpenHKCU(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				uint16_t *system_name /* [in] [unique] */,
-				uint32_t access_mask /* [in]  */,
-				struct policy_handle *handle /* [out] [ref] */,
-				WERROR *werror);
-NTSTATUS rpccli_winreg_OpenHKLM(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				uint16_t *system_name /* [in] [unique] */,
-				uint32_t access_mask /* [in]  */,
-				struct policy_handle *handle /* [out] [ref] */,
-				WERROR *werror);
-NTSTATUS rpccli_winreg_OpenHKPD(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				uint16_t *system_name /* [in] [unique] */,
-				uint32_t access_mask /* [in]  */,
-				struct policy_handle *handle /* [out] [ref] */,
-				WERROR *werror);
-NTSTATUS rpccli_winreg_OpenHKU(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       uint16_t *system_name /* [in] [unique] */,
-			       uint32_t access_mask /* [in]  */,
-			       struct policy_handle *handle /* [out] [ref] */,
-			       WERROR *werror);
-NTSTATUS rpccli_winreg_CloseKey(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				struct policy_handle *handle /* [in,out] [ref] */,
-				WERROR *werror);
-NTSTATUS rpccli_winreg_CreateKey(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *handle /* [in] [ref] */,
-				 struct winreg_String name /* [in]  */,
-				 struct winreg_String keyclass /* [in]  */,
-				 uint32_t options /* [in]  */,
-				 uint32_t access_mask /* [in]  */,
-				 struct winreg_SecBuf *secdesc /* [in] [unique] */,
-				 struct policy_handle *new_handle /* [out] [ref] */,
-				 enum winreg_CreateAction *action_taken /* [in,out] [unique] */,
-				 WERROR *werror);
-NTSTATUS rpccli_winreg_DeleteKey(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *handle /* [in] [ref] */,
-				 struct winreg_String key /* [in]  */,
-				 WERROR *werror);
-NTSTATUS rpccli_winreg_DeleteValue(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   struct policy_handle *handle /* [in] [ref] */,
-				   struct winreg_String value /* [in]  */,
-				   WERROR *werror);
-NTSTATUS rpccli_winreg_EnumKey(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       struct policy_handle *handle /* [in] [ref] */,
-			       uint32_t enum_index /* [in]  */,
-			       struct winreg_StringBuf *name /* [in,out] [ref] */,
-			       struct winreg_StringBuf *keyclass /* [in,out] [unique] */,
-			       NTTIME *last_changed_time /* [in,out] [unique] */,
-			       WERROR *werror);
-NTSTATUS rpccli_winreg_EnumValue(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 struct policy_handle *handle /* [in] [ref] */,
-				 uint32_t enum_index /* [in]  */,
-				 struct winreg_ValNameBuf *name /* [in,out] [ref] */,
-				 enum winreg_Type *type /* [in,out] [unique] */,
-				 uint8_t *value /* [in,out] [unique,length_is(*length),size_is(*size)] */,
-				 uint32_t *size /* [in,out] [unique] */,
-				 uint32_t *length /* [in,out] [unique] */,
-				 WERROR *werror);
-NTSTATUS rpccli_winreg_FlushKey(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				struct policy_handle *handle /* [in] [ref] */,
-				WERROR *werror);
-NTSTATUS rpccli_winreg_GetKeySecurity(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *handle /* [in] [ref] */,
-				      uint32_t sec_info /* [in]  */,
-				      struct KeySecurityData *sd /* [in,out] [ref] */,
-				      WERROR *werror);
-NTSTATUS rpccli_winreg_LoadKey(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       struct policy_handle *handle /* [in] [ref] */,
-			       struct winreg_String *keyname /* [in] [unique] */,
-			       struct winreg_String *filename /* [in] [unique] */,
-			       WERROR *werror);
-NTSTATUS rpccli_winreg_NotifyChangeKeyValue(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    struct policy_handle *handle /* [in] [ref] */,
-					    uint8_t watch_subtree /* [in]  */,
-					    uint32_t notify_filter /* [in]  */,
-					    uint32_t unknown /* [in]  */,
-					    struct winreg_String string1 /* [in]  */,
-					    struct winreg_String string2 /* [in]  */,
-					    uint32_t unknown2 /* [in]  */,
-					    WERROR *werror);
-NTSTATUS rpccli_winreg_OpenKey(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       struct policy_handle *parent_handle /* [in] [ref] */,
-			       struct winreg_String keyname /* [in]  */,
-			       uint32_t unknown /* [in]  */,
-			       uint32_t access_mask /* [in]  */,
-			       struct policy_handle *handle /* [out] [ref] */,
-			       WERROR *werror);
-NTSTATUS rpccli_winreg_QueryInfoKey(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    struct policy_handle *handle /* [in] [ref] */,
-				    struct winreg_String *classname /* [in,out] [ref] */,
-				    uint32_t *num_subkeys /* [out] [ref] */,
-				    uint32_t *max_subkeylen /* [out] [ref] */,
-				    uint32_t *max_classlen /* [out] [ref] */,
-				    uint32_t *num_values /* [out] [ref] */,
-				    uint32_t *max_valnamelen /* [out] [ref] */,
-				    uint32_t *max_valbufsize /* [out] [ref] */,
-				    uint32_t *secdescsize /* [out] [ref] */,
-				    NTTIME *last_changed_time /* [out] [ref] */,
-				    WERROR *werror);
-NTSTATUS rpccli_winreg_QueryValue(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  struct policy_handle *handle /* [in] [ref] */,
-				  struct winreg_String *value_name /* [in] [ref] */,
-				  enum winreg_Type *type /* [in,out] [unique] */,
-				  uint8_t *data /* [in,out] [unique,length_is(*value_length),size_is(*data_size)] */,
-				  uint32_t *data_size /* [in,out] [unique] */,
-				  uint32_t *value_length /* [in,out] [unique] */,
-				  WERROR *werror);
-NTSTATUS rpccli_winreg_ReplaceKey(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  WERROR *werror);
-NTSTATUS rpccli_winreg_RestoreKey(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  struct policy_handle *handle /* [in] [ref] */,
-				  struct winreg_String *filename /* [in] [ref] */,
-				  uint32_t flags /* [in]  */,
-				  WERROR *werror);
-NTSTATUS rpccli_winreg_SaveKey(struct rpc_pipe_client *cli,
-			       TALLOC_CTX *mem_ctx,
-			       struct policy_handle *handle /* [in] [ref] */,
-			       struct winreg_String *filename /* [in] [ref] */,
-			       struct KeySecurityAttribute *sec_attrib /* [in] [unique] */,
-			       WERROR *werror);
-NTSTATUS rpccli_winreg_SetKeySecurity(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      struct policy_handle *handle /* [in] [ref] */,
-				      uint32_t access_mask /* [in]  */,
-				      struct KeySecurityData *sd /* [in] [ref] */,
-				      WERROR *werror);
-NTSTATUS rpccli_winreg_SetValue(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				struct policy_handle *handle /* [in] [ref] */,
-				struct winreg_String name /* [in]  */,
-				enum winreg_Type type /* [in]  */,
-				uint8_t *data /* [in] [ref,size_is(size)] */,
-				uint32_t size /* [in]  */,
-				WERROR *werror);
-NTSTATUS rpccli_winreg_UnLoadKey(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 WERROR *werror);
-NTSTATUS rpccli_winreg_InitiateSystemShutdown(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      uint16_t *hostname /* [in] [unique] */,
-					      struct initshutdown_String *message /* [in] [unique] */,
-					      uint32_t timeout /* [in]  */,
-					      uint8_t force_apps /* [in]  */,
-					      uint8_t reboot /* [in]  */,
-					      WERROR *werror);
-NTSTATUS rpccli_winreg_AbortSystemShutdown(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   uint16_t *server /* [in] [unique] */,
-					   WERROR *werror);
-NTSTATUS rpccli_winreg_GetVersion(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  struct policy_handle *handle /* [in] [ref] */,
-				  uint32_t *version /* [out] [ref] */,
-				  WERROR *werror);
-NTSTATUS rpccli_winreg_OpenHKCC(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				uint16_t *system_name /* [in] [unique] */,
-				uint32_t access_mask /* [in]  */,
-				struct policy_handle *handle /* [out] [ref] */,
-				WERROR *werror);
-NTSTATUS rpccli_winreg_OpenHKDD(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				uint16_t *system_name /* [in] [unique] */,
-				uint32_t access_mask /* [in]  */,
-				struct policy_handle *handle /* [out] [ref] */,
-				WERROR *werror);
-NTSTATUS rpccli_winreg_QueryMultipleValues(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   struct policy_handle *key_handle /* [in] [ref] */,
-					   struct QueryMultipleValue *values /* [in,out] [ref,length_is(num_values),size_is(num_values)] */,
-					   uint32_t num_values /* [in]  */,
-					   uint8_t *buffer /* [in,out] [unique,length_is(*buffer_size),size_is(*buffer_size)] */,
-					   uint32_t *buffer_size /* [in,out] [ref] */,
-					   WERROR *werror);
-NTSTATUS rpccli_winreg_InitiateSystemShutdownEx(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx,
-						uint16_t *hostname /* [in] [unique] */,
-						struct initshutdown_String *message /* [in] [unique] */,
-						uint32_t timeout /* [in]  */,
-						uint8_t force_apps /* [in]  */,
-						uint8_t reboot /* [in]  */,
-						uint32_t reason /* [in]  */,
-						WERROR *werror);
-NTSTATUS rpccli_winreg_SaveKeyEx(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx,
-				 WERROR *werror);
-NTSTATUS rpccli_winreg_OpenHKPT(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				uint16_t *system_name /* [in] [unique] */,
-				uint32_t access_mask /* [in]  */,
-				struct policy_handle *handle /* [out] [ref] */,
-				WERROR *werror);
-NTSTATUS rpccli_winreg_OpenHKPN(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				uint16_t *system_name /* [in] [unique] */,
-				uint32_t access_mask /* [in]  */,
-				struct policy_handle *handle /* [out] [ref] */,
-				WERROR *werror);
-NTSTATUS rpccli_winreg_QueryMultipleValues2(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    WERROR *werror);
-#endif /* __CLI_WINREG__ */

Modified: branches/samba/upstream/source/librpc/gen_ndr/cli_wkssvc.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_wkssvc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_wkssvc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,1596 +6,959 @@
 #include "includes.h"
 #include "librpc/gen_ndr/cli_wkssvc.h"
 
-NTSTATUS rpccli_wkssvc_NetWkstaGetInfo(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       const char *server_name /* [in] [unique,charset(UTF16)] */,
-				       uint32_t level /* [in]  */,
-				       union wkssvc_NetWkstaInfo *info /* [out] [ref,switch_is(level)] */,
-				       WERROR *werror)
+NTSTATUS rpccli_wkssvc_NetWkstaGetInfo(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const char *server_name, uint32_t level, union wkssvc_NetWkstaInfo *info)
 {
 	struct wkssvc_NetWkstaGetInfo r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
 	r.in.server_name = server_name;
 	r.in.level = level;
-
-	if (DEBUGLEVEL >= 10) {
+	
+	if (DEBUGLEVEL >= 10)
 		NDR_PRINT_IN_DEBUG(wkssvc_NetWkstaGetInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETWKSTAGETINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETWKSTAGETINFO, &r, (ndr_pull_flags_fn_t)ndr_pull_wkssvc_NetWkstaGetInfo, (ndr_push_flags_fn_t)ndr_push_wkssvc_NetWkstaGetInfo);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
+	
+	if (DEBUGLEVEL >= 10)
 		NDR_PRINT_OUT_DEBUG(wkssvc_NetWkstaGetInfo, &r);
-	}
-
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
 	*info = *r.out.info;
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetWkstaSetInfo(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       const char *server_name /* [in] [unique,charset(UTF16)] */,
-				       uint32_t level /* [in]  */,
-				       union wkssvc_NetWkstaInfo *info /* [in] [ref,switch_is(level)] */,
-				       uint32_t *parm_error /* [in,out] [ref] */,
-				       WERROR *werror)
+NTSTATUS rpccli_wkssvc_NetWkstaSetInfo(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const char *server_name, uint32_t level, union wkssvc_NetWkstaInfo *info, uint32_t *parm_error)
 {
 	struct wkssvc_NetWkstaSetInfo r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
 	r.in.server_name = server_name;
 	r.in.level = level;
 	r.in.info = info;
 	r.in.parm_error = parm_error;
-
-	if (DEBUGLEVEL >= 10) {
+	
+	if (DEBUGLEVEL >= 10)
 		NDR_PRINT_IN_DEBUG(wkssvc_NetWkstaSetInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETWKSTASETINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETWKSTASETINFO, &r, (ndr_pull_flags_fn_t)ndr_pull_wkssvc_NetWkstaSetInfo, (ndr_push_flags_fn_t)ndr_push_wkssvc_NetWkstaSetInfo);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
+	
+	if (DEBUGLEVEL >= 10)
 		NDR_PRINT_OUT_DEBUG(wkssvc_NetWkstaSetInfo, &r);
-	}
-
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
 	*parm_error = *r.out.parm_error;
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetWkstaEnumUsers(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 const char *server_name /* [in] [unique,charset(UTF16)] */,
-					 struct wkssvc_NetWkstaEnumUsersInfo *info /* [in,out] [ref] */,
-					 uint32_t prefmaxlen /* [in]  */,
-					 uint32_t *entries_read /* [out] [ref] */,
-					 uint32_t *resume_handle /* [in,out] [unique] */,
-					 WERROR *werror)
+NTSTATUS rpccli_wkssvc_NetWkstaEnumUsers(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const char *server_name, uint32_t level, union WKS_USER_ENUM_UNION *users, uint32_t prefmaxlen, uint32_t *entriesread, uint32_t *totalentries, uint32_t *resumehandle)
 {
 	struct wkssvc_NetWkstaEnumUsers r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
 	r.in.server_name = server_name;
-	r.in.info = info;
+	r.in.level = level;
+	r.in.users = users;
 	r.in.prefmaxlen = prefmaxlen;
-	r.in.resume_handle = resume_handle;
-
-	if (DEBUGLEVEL >= 10) {
+	r.in.resumehandle = resumehandle;
+	
+	if (DEBUGLEVEL >= 10)
 		NDR_PRINT_IN_DEBUG(wkssvc_NetWkstaEnumUsers, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETWKSTAENUMUSERS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETWKSTAENUMUSERS, &r, (ndr_pull_flags_fn_t)ndr_pull_wkssvc_NetWkstaEnumUsers, (ndr_push_flags_fn_t)ndr_push_wkssvc_NetWkstaEnumUsers);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
+	
+	if (DEBUGLEVEL >= 10)
 		NDR_PRINT_OUT_DEBUG(wkssvc_NetWkstaEnumUsers, &r);
-	}
-
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-	*info = *r.out.info;
-	*entries_read = *r.out.entries_read;
-	if (resume_handle && r.out.resume_handle) {
-		*resume_handle = *r.out.resume_handle;
+	*users = *r.out.users;
+	if (entriesread && r.out.entriesread) {
+		*entriesread = *r.out.entriesread;
 	}
-
-	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
+	if (totalentries && r.out.totalentries) {
+		*totalentries = *r.out.totalentries;
 	}
-
+	*resumehandle = *r.out.resumehandle;
+	
+	/* Return result */
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrWkstaUserGetInfo(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    const char *unknown /* [in] [unique,charset(UTF16)] */,
-					    uint32_t level /* [in]  */,
-					    union wkssvc_NetrWkstaUserInfo *info /* [out] [ref,switch_is(level)] */,
-					    WERROR *werror)
+NTSTATUS rpccli_WKSSVC_NETRWKSTAUSERGETINFO(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
 {
-	struct wkssvc_NetrWkstaUserGetInfo r;
+	struct WKSSVC_NETRWKSTAUSERGETINFO r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
-	r.in.unknown = unknown;
-	r.in.level = level;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrWkstaUserGetInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRWKSTAUSERGETINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRWKSTAUSERGETINFO, &r);
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRWKSTAUSERGETINFO, &r, (ndr_pull_flags_fn_t)ndr_pull_WKSSVC_NETRWKSTAUSERGETINFO, (ndr_push_flags_fn_t)ndr_push_WKSSVC_NETRWKSTAUSERGETINFO);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrWkstaUserGetInfo, &r);
-	}
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRWKSTAUSERGETINFO, &r);
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-	*info = *r.out.info;
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrWkstaUserSetInfo(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    const char *unknown /* [in] [unique,charset(UTF16)] */,
-					    uint32_t level /* [in]  */,
-					    union wkssvc_NetrWkstaUserInfo *info /* [in] [ref,switch_is(level)] */,
-					    uint32_t *parm_err /* [in,out] [unique] */,
-					    WERROR *werror)
+NTSTATUS rpccli_WKSSVC_NETRWKSTAUSERSETINFO(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
 {
-	struct wkssvc_NetrWkstaUserSetInfo r;
+	struct WKSSVC_NETRWKSTAUSERSETINFO r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
-	r.in.unknown = unknown;
-	r.in.level = level;
-	r.in.info = info;
-	r.in.parm_err = parm_err;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrWkstaUserSetInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRWKSTAUSERSETINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRWKSTAUSERSETINFO, &r);
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRWKSTAUSERSETINFO, &r, (ndr_pull_flags_fn_t)ndr_pull_WKSSVC_NETRWKSTAUSERSETINFO, (ndr_push_flags_fn_t)ndr_push_WKSSVC_NETRWKSTAUSERSETINFO);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrWkstaUserSetInfo, &r);
-	}
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRWKSTAUSERSETINFO, &r);
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-	if (parm_err && r.out.parm_err) {
-		*parm_err = *r.out.parm_err;
-	}
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetWkstaTransportEnum(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx,
-					     const char *server_name /* [in] [unique,charset(UTF16)] */,
-					     struct wkssvc_NetWkstaTransportInfo *info /* [in,out] [ref] */,
-					     uint32_t max_buffer /* [in]  */,
-					     uint32_t *total_entries /* [out] [ref] */,
-					     uint32_t *resume_handle /* [in,out] [unique] */,
-					     WERROR *werror)
+NTSTATUS rpccli_wkssvc_NetWkstaTransportEnum(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const char *server_name, uint32_t *level, union wkssvc_NetWkstaTransportCtr *ctr, uint32_t max_buffer, uint32_t *totalentries, uint32_t *resume_handle)
 {
 	struct wkssvc_NetWkstaTransportEnum r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
 	r.in.server_name = server_name;
-	r.in.info = info;
+	r.in.level = level;
+	r.in.ctr = ctr;
 	r.in.max_buffer = max_buffer;
 	r.in.resume_handle = resume_handle;
-
-	if (DEBUGLEVEL >= 10) {
+	
+	if (DEBUGLEVEL >= 10)
 		NDR_PRINT_IN_DEBUG(wkssvc_NetWkstaTransportEnum, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETWKSTATRANSPORTENUM,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETWKSTATRANSPORTENUM, &r, (ndr_pull_flags_fn_t)ndr_pull_wkssvc_NetWkstaTransportEnum, (ndr_push_flags_fn_t)ndr_push_wkssvc_NetWkstaTransportEnum);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
+	
+	if (DEBUGLEVEL >= 10)
 		NDR_PRINT_OUT_DEBUG(wkssvc_NetWkstaTransportEnum, &r);
-	}
-
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-	*info = *r.out.info;
-	*total_entries = *r.out.total_entries;
-	if (resume_handle && r.out.resume_handle) {
-		*resume_handle = *r.out.resume_handle;
+	*level = *r.out.level;
+	*ctr = *r.out.ctr;
+	if (totalentries && r.out.totalentries) {
+		*totalentries = *r.out.totalentries;
 	}
-
+	*resume_handle = *r.out.resume_handle;
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrWkstaTransportAdd(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx,
-					     const char *server_name /* [in] [unique,charset(UTF16)] */,
-					     uint32_t level /* [in]  */,
-					     struct wkssvc_NetWkstaTransportInfo0 *info0 /* [in] [ref] */,
-					     uint32_t *parm_err /* [in,out] [unique] */,
-					     WERROR *werror)
+NTSTATUS rpccli_WKSSVC_NETRWKSTATRANSPORTADD(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
 {
-	struct wkssvc_NetrWkstaTransportAdd r;
+	struct WKSSVC_NETRWKSTATRANSPORTADD r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.level = level;
-	r.in.info0 = info0;
-	r.in.parm_err = parm_err;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrWkstaTransportAdd, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRWKSTATRANSPORTADD,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRWKSTATRANSPORTADD, &r);
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRWKSTATRANSPORTADD, &r, (ndr_pull_flags_fn_t)ndr_pull_WKSSVC_NETRWKSTATRANSPORTADD, (ndr_push_flags_fn_t)ndr_push_WKSSVC_NETRWKSTATRANSPORTADD);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrWkstaTransportAdd, &r);
-	}
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRWKSTATRANSPORTADD, &r);
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-	if (parm_err && r.out.parm_err) {
-		*parm_err = *r.out.parm_err;
-	}
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrWkstaTransportDel(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx,
-					     const char *server_name /* [in] [unique,charset(UTF16)] */,
-					     const char *transport_name /* [in] [unique,charset(UTF16)] */,
-					     uint32_t unknown3 /* [in]  */,
-					     WERROR *werror)
+NTSTATUS rpccli_WKSSVC_NETRWKSTATRANSPORTDEL(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
 {
-	struct wkssvc_NetrWkstaTransportDel r;
+	struct WKSSVC_NETRWKSTATRANSPORTDEL r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.transport_name = transport_name;
-	r.in.unknown3 = unknown3;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrWkstaTransportDel, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRWKSTATRANSPORTDEL,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRWKSTATRANSPORTDEL, &r);
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRWKSTATRANSPORTDEL, &r, (ndr_pull_flags_fn_t)ndr_pull_WKSSVC_NETRWKSTATRANSPORTDEL, (ndr_push_flags_fn_t)ndr_push_WKSSVC_NETRWKSTATRANSPORTDEL);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrWkstaTransportDel, &r);
-	}
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRWKSTATRANSPORTDEL, &r);
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrUseAdd(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  const char *server_name /* [in] [unique,charset(UTF16)] */,
-				  uint32_t level /* [in]  */,
-				  union wkssvc_NetrUseGetInfoCtr *ctr /* [in] [ref,switch_is(level)] */,
-				  uint32_t *parm_err /* [in,out] [unique] */,
-				  WERROR *werror)
+NTSTATUS rpccli_WKSSVC_NETRUSEADD(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
 {
-	struct wkssvc_NetrUseAdd r;
+	struct WKSSVC_NETRUSEADD r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.level = level;
-	r.in.ctr = ctr;
-	r.in.parm_err = parm_err;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrUseAdd, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRUSEADD,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRUSEADD, &r);
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRUSEADD, &r, (ndr_pull_flags_fn_t)ndr_pull_WKSSVC_NETRUSEADD, (ndr_push_flags_fn_t)ndr_push_WKSSVC_NETRUSEADD);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrUseAdd, &r);
-	}
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRUSEADD, &r);
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-	if (parm_err && r.out.parm_err) {
-		*parm_err = *r.out.parm_err;
-	}
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrUseGetInfo(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      const char *server_name /* [in] [unique,charset(UTF16)] */,
-				      const char *use_name /* [in] [ref,charset(UTF16)] */,
-				      uint32_t level /* [in]  */,
-				      union wkssvc_NetrUseGetInfoCtr *ctr /* [out] [ref,switch_is(level)] */,
-				      WERROR *werror)
+NTSTATUS rpccli_WKSSVC_NETRUSEGETINFO(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
 {
-	struct wkssvc_NetrUseGetInfo r;
+	struct WKSSVC_NETRUSEGETINFO r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.use_name = use_name;
-	r.in.level = level;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrUseGetInfo, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRUSEGETINFO,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRUSEGETINFO, &r);
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRUSEGETINFO, &r, (ndr_pull_flags_fn_t)ndr_pull_WKSSVC_NETRUSEGETINFO, (ndr_push_flags_fn_t)ndr_push_WKSSVC_NETRUSEGETINFO);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrUseGetInfo, &r);
-	}
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRUSEGETINFO, &r);
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-	*ctr = *r.out.ctr;
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrUseDel(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  const char *server_name /* [in] [unique,charset(UTF16)] */,
-				  const char *use_name /* [in] [ref,charset(UTF16)] */,
-				  uint32_t force_cond /* [in]  */,
-				  WERROR *werror)
+NTSTATUS rpccli_WKSSVC_NETRUSEDEL(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
 {
-	struct wkssvc_NetrUseDel r;
+	struct WKSSVC_NETRUSEDEL r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.use_name = use_name;
-	r.in.force_cond = force_cond;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrUseDel, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRUSEDEL,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRUSEDEL, &r);
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRUSEDEL, &r, (ndr_pull_flags_fn_t)ndr_pull_WKSSVC_NETRUSEDEL, (ndr_push_flags_fn_t)ndr_push_WKSSVC_NETRUSEDEL);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrUseDel, &r);
-	}
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRUSEDEL, &r);
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrUseEnum(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *server_name /* [in] [unique,charset(UTF16)] */,
-				   struct wkssvc_NetrUseEnumInfo *info /* [in,out] [ref] */,
-				   uint32_t prefmaxlen /* [in]  */,
-				   uint32_t *entries_read /* [out] [ref] */,
-				   uint32_t *resume_handle /* [in,out] [unique] */,
-				   WERROR *werror)
+NTSTATUS rpccli_WKSSVC_NETRUSEENUM(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
 {
-	struct wkssvc_NetrUseEnum r;
+	struct WKSSVC_NETRUSEENUM r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.info = info;
-	r.in.prefmaxlen = prefmaxlen;
-	r.in.resume_handle = resume_handle;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrUseEnum, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRUSEENUM,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRUSEENUM, &r);
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRUSEENUM, &r, (ndr_pull_flags_fn_t)ndr_pull_WKSSVC_NETRUSEENUM, (ndr_push_flags_fn_t)ndr_push_WKSSVC_NETRUSEENUM);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrUseEnum, &r);
-	}
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRUSEENUM, &r);
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-	*info = *r.out.info;
-	*entries_read = *r.out.entries_read;
-	if (resume_handle && r.out.resume_handle) {
-		*resume_handle = *r.out.resume_handle;
-	}
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrMessageBufferSend(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx,
-					     const char *server_name /* [in] [unique,charset(UTF16)] */,
-					     const char *message_name /* [in] [ref,charset(UTF16)] */,
-					     const char *message_sender_name /* [in] [unique,charset(UTF16)] */,
-					     uint8_t *message_buffer /* [in] [ref,size_is(message_size)] */,
-					     uint32_t message_size /* [in]  */,
-					     WERROR *werror)
+NTSTATUS rpccli_WKSSVC_NETRMESSAGEBUFFERSEND(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
 {
-	struct wkssvc_NetrMessageBufferSend r;
+	struct WKSSVC_NETRMESSAGEBUFFERSEND r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.message_name = message_name;
-	r.in.message_sender_name = message_sender_name;
-	r.in.message_buffer = message_buffer;
-	r.in.message_size = message_size;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrMessageBufferSend, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRMESSAGEBUFFERSEND,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRMESSAGEBUFFERSEND, &r);
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRMESSAGEBUFFERSEND, &r, (ndr_pull_flags_fn_t)ndr_pull_WKSSVC_NETRMESSAGEBUFFERSEND, (ndr_push_flags_fn_t)ndr_push_WKSSVC_NETRMESSAGEBUFFERSEND);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrMessageBufferSend, &r);
-	}
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRMESSAGEBUFFERSEND, &r);
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrWorkstationStatisticsGet(struct rpc_pipe_client *cli,
-						    TALLOC_CTX *mem_ctx,
-						    const char *server_name /* [in] [unique,charset(UTF16)] */,
-						    const char *unknown2 /* [in] [unique,charset(UTF16)] */,
-						    uint32_t unknown3 /* [in]  */,
-						    uint32_t unknown4 /* [in]  */,
-						    struct wkssvc_NetrWorkstationStatistics **info /* [out] [ref] */,
-						    WERROR *werror)
+NTSTATUS rpccli_WKSSVC_NETRWORKSTATIONSTATISTICSGET(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
 {
-	struct wkssvc_NetrWorkstationStatisticsGet r;
+	struct WKSSVC_NETRWORKSTATIONSTATISTICSGET r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.unknown2 = unknown2;
-	r.in.unknown3 = unknown3;
-	r.in.unknown4 = unknown4;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrWorkstationStatisticsGet, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRWORKSTATIONSTATISTICSGET,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRWORKSTATIONSTATISTICSGET, &r);
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRWORKSTATIONSTATISTICSGET, &r, (ndr_pull_flags_fn_t)ndr_pull_WKSSVC_NETRWORKSTATIONSTATISTICSGET, (ndr_push_flags_fn_t)ndr_push_WKSSVC_NETRWORKSTATIONSTATISTICSGET);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrWorkstationStatisticsGet, &r);
-	}
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRWORKSTATIONSTATISTICSGET, &r);
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-	*info = *r.out.info;
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrLogonDomainNameAdd(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      const char *domain_name /* [in] [ref,charset(UTF16)] */,
-					      WERROR *werror)
+NTSTATUS rpccli_WKSSVC_NETRLOGONDOMAINNAMEADD(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
 {
-	struct wkssvc_NetrLogonDomainNameAdd r;
+	struct WKSSVC_NETRLOGONDOMAINNAMEADD r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
-	r.in.domain_name = domain_name;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrLogonDomainNameAdd, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRLOGONDOMAINNAMEADD,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRLOGONDOMAINNAMEADD, &r);
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRLOGONDOMAINNAMEADD, &r, (ndr_pull_flags_fn_t)ndr_pull_WKSSVC_NETRLOGONDOMAINNAMEADD, (ndr_push_flags_fn_t)ndr_push_WKSSVC_NETRLOGONDOMAINNAMEADD);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrLogonDomainNameAdd, &r);
-	}
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRLOGONDOMAINNAMEADD, &r);
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrLogonDomainNameDel(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      const char *domain_name /* [in] [ref,charset(UTF16)] */,
-					      WERROR *werror)
+NTSTATUS rpccli_WKSSVC_NETRLOGONDOMAINNAMEDEL(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
 {
-	struct wkssvc_NetrLogonDomainNameDel r;
+	struct WKSSVC_NETRLOGONDOMAINNAMEDEL r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
-	r.in.domain_name = domain_name;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrLogonDomainNameDel, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRLOGONDOMAINNAMEDEL,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRLOGONDOMAINNAMEDEL, &r);
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRLOGONDOMAINNAMEDEL, &r, (ndr_pull_flags_fn_t)ndr_pull_WKSSVC_NETRLOGONDOMAINNAMEDEL, (ndr_push_flags_fn_t)ndr_push_WKSSVC_NETRLOGONDOMAINNAMEDEL);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrLogonDomainNameDel, &r);
-	}
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRLOGONDOMAINNAMEDEL, &r);
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrJoinDomain(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      const char *server_name /* [in] [unique,charset(UTF16)] */,
-				      const char *domain_name /* [in] [ref,charset(UTF16)] */,
-				      const char *account_ou /* [in] [unique,charset(UTF16)] */,
-				      const char *Account /* [in] [unique,charset(UTF16)] */,
-				      const char *password /* [in] [unique,charset(UTF16)] */,
-				      uint32_t join_flags /* [in]  */,
-				      WERROR *werror)
+NTSTATUS rpccli_WKSSVC_NETRJOINDOMAIN(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
 {
-	struct wkssvc_NetrJoinDomain r;
+	struct WKSSVC_NETRJOINDOMAIN r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.domain_name = domain_name;
-	r.in.account_ou = account_ou;
-	r.in.Account = Account;
-	r.in.password = password;
-	r.in.join_flags = join_flags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrJoinDomain, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRJOINDOMAIN,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRJOINDOMAIN, &r);
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRJOINDOMAIN, &r, (ndr_pull_flags_fn_t)ndr_pull_WKSSVC_NETRJOINDOMAIN, (ndr_push_flags_fn_t)ndr_push_WKSSVC_NETRJOINDOMAIN);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrJoinDomain, &r);
-	}
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRJOINDOMAIN, &r);
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrUnjoinDomain(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					const char *server_name /* [in] [unique,charset(UTF16)] */,
-					const char *Account /* [in] [unique,charset(UTF16)] */,
-					const char *password /* [in] [unique,charset(UTF16)] */,
-					uint32_t unjoin_flags /* [in]  */,
-					WERROR *werror)
+NTSTATUS rpccli_WKSSVC_NETRUNJOINDOMAIN(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
 {
-	struct wkssvc_NetrUnjoinDomain r;
+	struct WKSSVC_NETRUNJOINDOMAIN r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.Account = Account;
-	r.in.password = password;
-	r.in.unjoin_flags = unjoin_flags;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrUnjoinDomain, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRUNJOINDOMAIN,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRUNJOINDOMAIN, &r);
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRUNJOINDOMAIN, &r, (ndr_pull_flags_fn_t)ndr_pull_WKSSVC_NETRUNJOINDOMAIN, (ndr_push_flags_fn_t)ndr_push_WKSSVC_NETRUNJOINDOMAIN);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrUnjoinDomain, &r);
-	}
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRUNJOINDOMAIN, &r);
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrRenameMachineInDomain(struct rpc_pipe_client *cli,
-						 TALLOC_CTX *mem_ctx,
-						 const char *server_name /* [in] [unique,charset(UTF16)] */,
-						 const char *NewMachineName /* [in] [unique,charset(UTF16)] */,
-						 const char *Account /* [in] [unique,charset(UTF16)] */,
-						 const char *password /* [in] [unique,charset(UTF16)] */,
-						 uint32_t RenameOptions /* [in]  */,
-						 WERROR *werror)
+NTSTATUS rpccli_WKSSVC_NETRRENAMEMACHINEINDOMAIN(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
 {
-	struct wkssvc_NetrRenameMachineInDomain r;
+	struct WKSSVC_NETRRENAMEMACHINEINDOMAIN r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.NewMachineName = NewMachineName;
-	r.in.Account = Account;
-	r.in.password = password;
-	r.in.RenameOptions = RenameOptions;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrRenameMachineInDomain, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRRENAMEMACHINEINDOMAIN,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRRENAMEMACHINEINDOMAIN, &r);
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRRENAMEMACHINEINDOMAIN, &r, (ndr_pull_flags_fn_t)ndr_pull_WKSSVC_NETRRENAMEMACHINEINDOMAIN, (ndr_push_flags_fn_t)ndr_push_WKSSVC_NETRRENAMEMACHINEINDOMAIN);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrRenameMachineInDomain, &r);
-	}
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRRENAMEMACHINEINDOMAIN, &r);
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrValidateName(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					const char *server_name /* [in] [unique,charset(UTF16)] */,
-					const char *name /* [in] [ref,charset(UTF16)] */,
-					const char *Account /* [in] [unique,charset(UTF16)] */,
-					const char *Password /* [in] [unique,charset(UTF16)] */,
-					enum wkssvc_NetValidateNameType name_type /* [in]  */,
-					WERROR *werror)
+NTSTATUS rpccli_WKSSVC_NETRVALIDATENAME(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
 {
-	struct wkssvc_NetrValidateName r;
+	struct WKSSVC_NETRVALIDATENAME r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.name = name;
-	r.in.Account = Account;
-	r.in.Password = Password;
-	r.in.name_type = name_type;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrValidateName, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRVALIDATENAME,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRVALIDATENAME, &r);
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRVALIDATENAME, &r, (ndr_pull_flags_fn_t)ndr_pull_WKSSVC_NETRVALIDATENAME, (ndr_push_flags_fn_t)ndr_push_WKSSVC_NETRVALIDATENAME);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrValidateName, &r);
-	}
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRVALIDATENAME, &r);
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrGetJoinInformation(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      const char *server_name /* [in] [unique,charset(UTF16)] */,
-					      const char **name_buffer /* [in,out] [ref,charset(UTF16)] */,
-					      enum wkssvc_NetJoinStatus *name_type /* [out] [ref] */,
-					      WERROR *werror)
+NTSTATUS rpccli_WKSSVC_NETRGETJOININFORMATION(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
 {
-	struct wkssvc_NetrGetJoinInformation r;
+	struct WKSSVC_NETRGETJOININFORMATION r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.name_buffer = name_buffer;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrGetJoinInformation, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRGETJOININFORMATION,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRGETJOININFORMATION, &r);
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRGETJOININFORMATION, &r, (ndr_pull_flags_fn_t)ndr_pull_WKSSVC_NETRGETJOININFORMATION, (ndr_push_flags_fn_t)ndr_push_WKSSVC_NETRGETJOININFORMATION);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrGetJoinInformation, &r);
-	}
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRGETJOININFORMATION, &r);
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-	*name_buffer = *r.out.name_buffer;
-	*name_type = *r.out.name_type;
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrGetJoinableOus(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  const char *server_name /* [in] [unique,charset(UTF16)] */,
-					  const char *domain_name /* [in] [ref,charset(UTF16)] */,
-					  const char *Account /* [in] [unique,charset(UTF16)] */,
-					  const char *unknown /* [in] [unique,charset(UTF16)] */,
-					  uint32_t *num_ous /* [in,out] [ref] */,
-					  const char ***ous /* [out] [ref,charset(UTF16),size_is(,*num_ous)] */,
-					  WERROR *werror)
+NTSTATUS rpccli_WKSSVC_NETRGETJOINABLEOUS(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
 {
-	struct wkssvc_NetrGetJoinableOus r;
+	struct WKSSVC_NETRGETJOINABLEOUS r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.domain_name = domain_name;
-	r.in.Account = Account;
-	r.in.unknown = unknown;
-	r.in.num_ous = num_ous;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrGetJoinableOus, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRGETJOINABLEOUS,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRGETJOINABLEOUS, &r);
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRGETJOINABLEOUS, &r, (ndr_pull_flags_fn_t)ndr_pull_WKSSVC_NETRGETJOINABLEOUS, (ndr_push_flags_fn_t)ndr_push_WKSSVC_NETRGETJOINABLEOUS);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrGetJoinableOus, &r);
-	}
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRGETJOINABLEOUS, &r);
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-	*num_ous = *r.out.num_ous;
-	*ous = *r.out.ous;
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrJoinDomain2(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       const char *server_name /* [in] [unique,charset(UTF16)] */,
-				       const char *domain_name /* [in] [ref,charset(UTF16)] */,
-				       const char *account_ou /* [in] [unique,charset(UTF16)] */,
-				       const char *admin_account /* [in] [unique,charset(UTF16)] */,
-				       struct wkssvc_PasswordBuffer *encrypted_password /* [in] [unique] */,
-				       uint32_t join_flags /* [in]  */,
-				       WERROR *werror)
+NTSTATUS rpccli_wkssvc_NetrJoinDomain2(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const char *server_name, const char *domain_name, const char *account_name, const char *admin_account, struct wkssvc_PasswordBuffer *encrypted_password, uint32_t join_flags)
 {
 	struct wkssvc_NetrJoinDomain2 r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
 	r.in.server_name = server_name;
 	r.in.domain_name = domain_name;
-	r.in.account_ou = account_ou;
+	r.in.account_name = account_name;
 	r.in.admin_account = admin_account;
 	r.in.encrypted_password = encrypted_password;
 	r.in.join_flags = join_flags;
-
-	if (DEBUGLEVEL >= 10) {
+	
+	if (DEBUGLEVEL >= 10)
 		NDR_PRINT_IN_DEBUG(wkssvc_NetrJoinDomain2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRJOINDOMAIN2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRJOINDOMAIN2, &r, (ndr_pull_flags_fn_t)ndr_pull_wkssvc_NetrJoinDomain2, (ndr_push_flags_fn_t)ndr_push_wkssvc_NetrJoinDomain2);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
+	
+	if (DEBUGLEVEL >= 10)
 		NDR_PRINT_OUT_DEBUG(wkssvc_NetrJoinDomain2, &r);
-	}
-
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrUnjoinDomain2(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 const char *server_name /* [in] [unique,charset(UTF16)] */,
-					 const char *account /* [in] [unique,charset(UTF16)] */,
-					 struct wkssvc_PasswordBuffer *encrypted_password /* [in] [unique] */,
-					 uint32_t unjoin_flags /* [in]  */,
-					 WERROR *werror)
+NTSTATUS rpccli_wkssvc_NetrUnjoinDomain2(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const char *server_name, const char *account, struct wkssvc_PasswordBuffer *encrypted_password, uint32_t unjoin_flags)
 {
 	struct wkssvc_NetrUnjoinDomain2 r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
 	r.in.server_name = server_name;
 	r.in.account = account;
 	r.in.encrypted_password = encrypted_password;
 	r.in.unjoin_flags = unjoin_flags;
-
-	if (DEBUGLEVEL >= 10) {
+	
+	if (DEBUGLEVEL >= 10)
 		NDR_PRINT_IN_DEBUG(wkssvc_NetrUnjoinDomain2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRUNJOINDOMAIN2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRUNJOINDOMAIN2, &r, (ndr_pull_flags_fn_t)ndr_pull_wkssvc_NetrUnjoinDomain2, (ndr_push_flags_fn_t)ndr_push_wkssvc_NetrUnjoinDomain2);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
+	
+	if (DEBUGLEVEL >= 10)
 		NDR_PRINT_OUT_DEBUG(wkssvc_NetrUnjoinDomain2, &r);
-	}
-
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrRenameMachineInDomain2(struct rpc_pipe_client *cli,
-						  TALLOC_CTX *mem_ctx,
-						  const char *server_name /* [in] [unique,charset(UTF16)] */,
-						  const char *NewMachineName /* [in] [unique,charset(UTF16)] */,
-						  const char *Account /* [in] [unique,charset(UTF16)] */,
-						  struct wkssvc_PasswordBuffer *EncryptedPassword /* [in] [unique] */,
-						  uint32_t RenameOptions /* [in]  */,
-						  WERROR *werror)
+NTSTATUS rpccli_wkssvc_NetrRenameMachineInDomain2(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const char *server_name, const char *NewMachineName, const char *Account, struct wkssvc_PasswordBuffer *EncryptedPassword, uint32_t RenameOptions)
 {
 	struct wkssvc_NetrRenameMachineInDomain2 r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
 	r.in.server_name = server_name;
 	r.in.NewMachineName = NewMachineName;
 	r.in.Account = Account;
 	r.in.EncryptedPassword = EncryptedPassword;
 	r.in.RenameOptions = RenameOptions;
-
-	if (DEBUGLEVEL >= 10) {
+	
+	if (DEBUGLEVEL >= 10)
 		NDR_PRINT_IN_DEBUG(wkssvc_NetrRenameMachineInDomain2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRRENAMEMACHINEINDOMAIN2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRRENAMEMACHINEINDOMAIN2, &r, (ndr_pull_flags_fn_t)ndr_pull_wkssvc_NetrRenameMachineInDomain2, (ndr_push_flags_fn_t)ndr_push_wkssvc_NetrRenameMachineInDomain2);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
+	
+	if (DEBUGLEVEL >= 10)
 		NDR_PRINT_OUT_DEBUG(wkssvc_NetrRenameMachineInDomain2, &r);
-	}
-
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrValidateName2(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 const char *server_name /* [in] [unique,charset(UTF16)] */,
-					 const char *name /* [in] [ref,charset(UTF16)] */,
-					 const char *Account /* [in] [unique,charset(UTF16)] */,
-					 struct wkssvc_PasswordBuffer *EncryptedPassword /* [in] [unique] */,
-					 enum wkssvc_NetValidateNameType name_type /* [in]  */,
-					 WERROR *werror)
+NTSTATUS rpccli_WKSSVC_NETRVALIDATENAME2(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
 {
-	struct wkssvc_NetrValidateName2 r;
+	struct WKSSVC_NETRVALIDATENAME2 r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.name = name;
-	r.in.Account = Account;
-	r.in.EncryptedPassword = EncryptedPassword;
-	r.in.name_type = name_type;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrValidateName2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRVALIDATENAME2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRVALIDATENAME2, &r);
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRVALIDATENAME2, &r, (ndr_pull_flags_fn_t)ndr_pull_WKSSVC_NETRVALIDATENAME2, (ndr_push_flags_fn_t)ndr_push_WKSSVC_NETRVALIDATENAME2);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrValidateName2, &r);
-	}
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRVALIDATENAME2, &r);
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrGetJoinableOus2(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   const char *server_name /* [in] [unique,charset(UTF16)] */,
-					   const char *domain_name /* [in] [ref,charset(UTF16)] */,
-					   const char *Account /* [in] [unique,charset(UTF16)] */,
-					   struct wkssvc_PasswordBuffer *EncryptedPassword /* [in] [unique] */,
-					   uint32_t *num_ous /* [in,out] [ref] */,
-					   const char ***ous /* [out] [ref,charset(UTF16),size_is(,*num_ous)] */,
-					   WERROR *werror)
+NTSTATUS rpccli_WKSSVC_NETRGETJOINABLEOUS2(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
 {
-	struct wkssvc_NetrGetJoinableOus2 r;
+	struct WKSSVC_NETRGETJOINABLEOUS2 r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.domain_name = domain_name;
-	r.in.Account = Account;
-	r.in.EncryptedPassword = EncryptedPassword;
-	r.in.num_ous = num_ous;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrGetJoinableOus2, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRGETJOINABLEOUS2,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRGETJOINABLEOUS2, &r);
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRGETJOINABLEOUS2, &r, (ndr_pull_flags_fn_t)ndr_pull_WKSSVC_NETRGETJOINABLEOUS2, (ndr_push_flags_fn_t)ndr_push_WKSSVC_NETRGETJOINABLEOUS2);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrGetJoinableOus2, &r);
-	}
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRGETJOINABLEOUS2, &r);
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-	*num_ous = *r.out.num_ous;
-	*ous = *r.out.ous;
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrAddAlternateComputerName(struct rpc_pipe_client *cli,
-						    TALLOC_CTX *mem_ctx,
-						    const char *server_name /* [in] [unique,charset(UTF16)] */,
-						    const char *NewAlternateMachineName /* [in] [unique,charset(UTF16)] */,
-						    const char *Account /* [in] [unique,charset(UTF16)] */,
-						    struct wkssvc_PasswordBuffer *EncryptedPassword /* [in] [unique] */,
-						    uint32_t Reserved /* [in]  */,
-						    WERROR *werror)
+NTSTATUS rpccli_wkssvc_NetrAddAlternateComputerName(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const char *server_name, const char *NewAlternateMachineName, const char *Account, struct wkssvc_PasswordBuffer *EncryptedPassword, uint32_t Reserved)
 {
 	struct wkssvc_NetrAddAlternateComputerName r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
 	r.in.server_name = server_name;
 	r.in.NewAlternateMachineName = NewAlternateMachineName;
 	r.in.Account = Account;
 	r.in.EncryptedPassword = EncryptedPassword;
 	r.in.Reserved = Reserved;
-
-	if (DEBUGLEVEL >= 10) {
+	
+	if (DEBUGLEVEL >= 10)
 		NDR_PRINT_IN_DEBUG(wkssvc_NetrAddAlternateComputerName, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRADDALTERNATECOMPUTERNAME,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRADDALTERNATECOMPUTERNAME, &r, (ndr_pull_flags_fn_t)ndr_pull_wkssvc_NetrAddAlternateComputerName, (ndr_push_flags_fn_t)ndr_push_wkssvc_NetrAddAlternateComputerName);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
+	
+	if (DEBUGLEVEL >= 10)
 		NDR_PRINT_OUT_DEBUG(wkssvc_NetrAddAlternateComputerName, &r);
-	}
-
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrRemoveAlternateComputerName(struct rpc_pipe_client *cli,
-						       TALLOC_CTX *mem_ctx,
-						       const char *server_name /* [in] [unique,charset(UTF16)] */,
-						       const char *AlternateMachineNameToRemove /* [in] [unique,charset(UTF16)] */,
-						       const char *Account /* [in] [unique,charset(UTF16)] */,
-						       struct wkssvc_PasswordBuffer *EncryptedPassword /* [in] [unique] */,
-						       uint32_t Reserved /* [in]  */,
-						       WERROR *werror)
+NTSTATUS rpccli_wkssvc_NetrRemoveAlternateComputerName(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const char *server_name, const char *AlternateMachineNameToRemove, const char *Account, struct wkssvc_PasswordBuffer *EncryptedPassword, uint32_t Reserved)
 {
 	struct wkssvc_NetrRemoveAlternateComputerName r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
 	r.in.server_name = server_name;
 	r.in.AlternateMachineNameToRemove = AlternateMachineNameToRemove;
 	r.in.Account = Account;
 	r.in.EncryptedPassword = EncryptedPassword;
 	r.in.Reserved = Reserved;
-
-	if (DEBUGLEVEL >= 10) {
+	
+	if (DEBUGLEVEL >= 10)
 		NDR_PRINT_IN_DEBUG(wkssvc_NetrRemoveAlternateComputerName, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRREMOVEALTERNATECOMPUTERNAME,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRREMOVEALTERNATECOMPUTERNAME, &r, (ndr_pull_flags_fn_t)ndr_pull_wkssvc_NetrRemoveAlternateComputerName, (ndr_push_flags_fn_t)ndr_push_wkssvc_NetrRemoveAlternateComputerName);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
+	
+	if (DEBUGLEVEL >= 10)
 		NDR_PRINT_OUT_DEBUG(wkssvc_NetrRemoveAlternateComputerName, &r);
-	}
-
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrSetPrimaryComputername(struct rpc_pipe_client *cli,
-						  TALLOC_CTX *mem_ctx,
-						  const char *server_name /* [in] [unique,charset(UTF16)] */,
-						  const char *primary_name /* [in] [unique,charset(UTF16)] */,
-						  const char *Account /* [in] [unique,charset(UTF16)] */,
-						  struct wkssvc_PasswordBuffer *EncryptedPassword /* [in] [unique] */,
-						  uint32_t Reserved /* [in]  */,
-						  WERROR *werror)
+NTSTATUS rpccli_WKSSVC_NETRSETPRIMARYCOMPUTERNAME(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
 {
-	struct wkssvc_NetrSetPrimaryComputername r;
+	struct WKSSVC_NETRSETPRIMARYCOMPUTERNAME r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.primary_name = primary_name;
-	r.in.Account = Account;
-	r.in.EncryptedPassword = EncryptedPassword;
-	r.in.Reserved = Reserved;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrSetPrimaryComputername, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRSETPRIMARYCOMPUTERNAME,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRSETPRIMARYCOMPUTERNAME, &r);
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRSETPRIMARYCOMPUTERNAME, &r, (ndr_pull_flags_fn_t)ndr_pull_WKSSVC_NETRSETPRIMARYCOMPUTERNAME, (ndr_push_flags_fn_t)ndr_push_WKSSVC_NETRSETPRIMARYCOMPUTERNAME);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrSetPrimaryComputername, &r);
-	}
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRSETPRIMARYCOMPUTERNAME, &r);
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 
-NTSTATUS rpccli_wkssvc_NetrEnumerateComputerNames(struct rpc_pipe_client *cli,
-						  TALLOC_CTX *mem_ctx,
-						  const char *server_name /* [in] [unique,charset(UTF16)] */,
-						  enum wkssvc_ComputerNameType name_type /* [in]  */,
-						  uint32_t Reserved /* [in]  */,
-						  struct wkssvc_ComputerNamesCtr **ctr /* [out] [ref] */,
-						  WERROR *werror)
+NTSTATUS rpccli_WKSSVC_NETRENUMERATECOMPUTERNAMES(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
 {
-	struct wkssvc_NetrEnumerateComputerNames r;
+	struct WKSSVC_NETRENUMERATECOMPUTERNAMES r;
 	NTSTATUS status;
-
+	
 	/* In parameters */
-	r.in.server_name = server_name;
-	r.in.name_type = name_type;
-	r.in.Reserved = Reserved;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrEnumerateComputerNames, &r);
-	}
-
-	status = cli_do_rpc_ndr(cli,
-				mem_ctx,
-				PI_WKSSVC,
-				&ndr_table_wkssvc,
-				NDR_WKSSVC_NETRENUMERATECOMPUTERNAMES,
-				&r);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRENUMERATECOMPUTERNAMES, &r);
+	
+	status = cli_do_rpc_ndr(cli, mem_ctx, PI_WKSSVC, DCERPC_WKSSVC_NETRENUMERATECOMPUTERNAMES, &r, (ndr_pull_flags_fn_t)ndr_pull_WKSSVC_NETRENUMERATECOMPUTERNAMES, (ndr_push_flags_fn_t)ndr_push_WKSSVC_NETRENUMERATECOMPUTERNAMES);
+	
+	if ( !NT_STATUS_IS_OK(status) ) {
 		return status;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrEnumerateComputerNames, &r);
-	}
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRENUMERATECOMPUTERNAMES, &r);
+	
 	if (NT_STATUS_IS_ERR(status)) {
 		return status;
 	}
-
+	
 	/* Return variables */
-	*ctr = *r.out.ctr;
-
+	
 	/* Return result */
-	if (werror) {
-		*werror = r.out.result;
-	}
-
 	return werror_to_ntstatus(r.out.result);
 }
 

Modified: branches/samba/upstream/source/librpc/gen_ndr/cli_wkssvc.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/cli_wkssvc.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/cli_wkssvc.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,230 +1,35 @@
 #include "librpc/gen_ndr/ndr_wkssvc.h"
 #ifndef __CLI_WKSSVC__
 #define __CLI_WKSSVC__
-NTSTATUS rpccli_wkssvc_NetWkstaGetInfo(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       const char *server_name /* [in] [unique,charset(UTF16)] */,
-				       uint32_t level /* [in]  */,
-				       union wkssvc_NetWkstaInfo *info /* [out] [ref,switch_is(level)] */,
-				       WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetWkstaSetInfo(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       const char *server_name /* [in] [unique,charset(UTF16)] */,
-				       uint32_t level /* [in]  */,
-				       union wkssvc_NetWkstaInfo *info /* [in] [ref,switch_is(level)] */,
-				       uint32_t *parm_error /* [in,out] [ref] */,
-				       WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetWkstaEnumUsers(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 const char *server_name /* [in] [unique,charset(UTF16)] */,
-					 struct wkssvc_NetWkstaEnumUsersInfo *info /* [in,out] [ref] */,
-					 uint32_t prefmaxlen /* [in]  */,
-					 uint32_t *entries_read /* [out] [ref] */,
-					 uint32_t *resume_handle /* [in,out] [unique] */,
-					 WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrWkstaUserGetInfo(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    const char *unknown /* [in] [unique,charset(UTF16)] */,
-					    uint32_t level /* [in]  */,
-					    union wkssvc_NetrWkstaUserInfo *info /* [out] [ref,switch_is(level)] */,
-					    WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrWkstaUserSetInfo(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    const char *unknown /* [in] [unique,charset(UTF16)] */,
-					    uint32_t level /* [in]  */,
-					    union wkssvc_NetrWkstaUserInfo *info /* [in] [ref,switch_is(level)] */,
-					    uint32_t *parm_err /* [in,out] [unique] */,
-					    WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetWkstaTransportEnum(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx,
-					     const char *server_name /* [in] [unique,charset(UTF16)] */,
-					     struct wkssvc_NetWkstaTransportInfo *info /* [in,out] [ref] */,
-					     uint32_t max_buffer /* [in]  */,
-					     uint32_t *total_entries /* [out] [ref] */,
-					     uint32_t *resume_handle /* [in,out] [unique] */,
-					     WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrWkstaTransportAdd(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx,
-					     const char *server_name /* [in] [unique,charset(UTF16)] */,
-					     uint32_t level /* [in]  */,
-					     struct wkssvc_NetWkstaTransportInfo0 *info0 /* [in] [ref] */,
-					     uint32_t *parm_err /* [in,out] [unique] */,
-					     WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrWkstaTransportDel(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx,
-					     const char *server_name /* [in] [unique,charset(UTF16)] */,
-					     const char *transport_name /* [in] [unique,charset(UTF16)] */,
-					     uint32_t unknown3 /* [in]  */,
-					     WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrUseAdd(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  const char *server_name /* [in] [unique,charset(UTF16)] */,
-				  uint32_t level /* [in]  */,
-				  union wkssvc_NetrUseGetInfoCtr *ctr /* [in] [ref,switch_is(level)] */,
-				  uint32_t *parm_err /* [in,out] [unique] */,
-				  WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrUseGetInfo(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      const char *server_name /* [in] [unique,charset(UTF16)] */,
-				      const char *use_name /* [in] [ref,charset(UTF16)] */,
-				      uint32_t level /* [in]  */,
-				      union wkssvc_NetrUseGetInfoCtr *ctr /* [out] [ref,switch_is(level)] */,
-				      WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrUseDel(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  const char *server_name /* [in] [unique,charset(UTF16)] */,
-				  const char *use_name /* [in] [ref,charset(UTF16)] */,
-				  uint32_t force_cond /* [in]  */,
-				  WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrUseEnum(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   const char *server_name /* [in] [unique,charset(UTF16)] */,
-				   struct wkssvc_NetrUseEnumInfo *info /* [in,out] [ref] */,
-				   uint32_t prefmaxlen /* [in]  */,
-				   uint32_t *entries_read /* [out] [ref] */,
-				   uint32_t *resume_handle /* [in,out] [unique] */,
-				   WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrMessageBufferSend(struct rpc_pipe_client *cli,
-					     TALLOC_CTX *mem_ctx,
-					     const char *server_name /* [in] [unique,charset(UTF16)] */,
-					     const char *message_name /* [in] [ref,charset(UTF16)] */,
-					     const char *message_sender_name /* [in] [unique,charset(UTF16)] */,
-					     uint8_t *message_buffer /* [in] [ref,size_is(message_size)] */,
-					     uint32_t message_size /* [in]  */,
-					     WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrWorkstationStatisticsGet(struct rpc_pipe_client *cli,
-						    TALLOC_CTX *mem_ctx,
-						    const char *server_name /* [in] [unique,charset(UTF16)] */,
-						    const char *unknown2 /* [in] [unique,charset(UTF16)] */,
-						    uint32_t unknown3 /* [in]  */,
-						    uint32_t unknown4 /* [in]  */,
-						    struct wkssvc_NetrWorkstationStatistics **info /* [out] [ref] */,
-						    WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrLogonDomainNameAdd(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      const char *domain_name /* [in] [ref,charset(UTF16)] */,
-					      WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrLogonDomainNameDel(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      const char *domain_name /* [in] [ref,charset(UTF16)] */,
-					      WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrJoinDomain(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      const char *server_name /* [in] [unique,charset(UTF16)] */,
-				      const char *domain_name /* [in] [ref,charset(UTF16)] */,
-				      const char *account_ou /* [in] [unique,charset(UTF16)] */,
-				      const char *Account /* [in] [unique,charset(UTF16)] */,
-				      const char *password /* [in] [unique,charset(UTF16)] */,
-				      uint32_t join_flags /* [in]  */,
-				      WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrUnjoinDomain(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					const char *server_name /* [in] [unique,charset(UTF16)] */,
-					const char *Account /* [in] [unique,charset(UTF16)] */,
-					const char *password /* [in] [unique,charset(UTF16)] */,
-					uint32_t unjoin_flags /* [in]  */,
-					WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrRenameMachineInDomain(struct rpc_pipe_client *cli,
-						 TALLOC_CTX *mem_ctx,
-						 const char *server_name /* [in] [unique,charset(UTF16)] */,
-						 const char *NewMachineName /* [in] [unique,charset(UTF16)] */,
-						 const char *Account /* [in] [unique,charset(UTF16)] */,
-						 const char *password /* [in] [unique,charset(UTF16)] */,
-						 uint32_t RenameOptions /* [in]  */,
-						 WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrValidateName(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					const char *server_name /* [in] [unique,charset(UTF16)] */,
-					const char *name /* [in] [ref,charset(UTF16)] */,
-					const char *Account /* [in] [unique,charset(UTF16)] */,
-					const char *Password /* [in] [unique,charset(UTF16)] */,
-					enum wkssvc_NetValidateNameType name_type /* [in]  */,
-					WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrGetJoinInformation(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      const char *server_name /* [in] [unique,charset(UTF16)] */,
-					      const char **name_buffer /* [in,out] [ref,charset(UTF16)] */,
-					      enum wkssvc_NetJoinStatus *name_type /* [out] [ref] */,
-					      WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrGetJoinableOus(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  const char *server_name /* [in] [unique,charset(UTF16)] */,
-					  const char *domain_name /* [in] [ref,charset(UTF16)] */,
-					  const char *Account /* [in] [unique,charset(UTF16)] */,
-					  const char *unknown /* [in] [unique,charset(UTF16)] */,
-					  uint32_t *num_ous /* [in,out] [ref] */,
-					  const char ***ous /* [out] [ref,charset(UTF16),size_is(,*num_ous)] */,
-					  WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrJoinDomain2(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       const char *server_name /* [in] [unique,charset(UTF16)] */,
-				       const char *domain_name /* [in] [ref,charset(UTF16)] */,
-				       const char *account_ou /* [in] [unique,charset(UTF16)] */,
-				       const char *admin_account /* [in] [unique,charset(UTF16)] */,
-				       struct wkssvc_PasswordBuffer *encrypted_password /* [in] [unique] */,
-				       uint32_t join_flags /* [in]  */,
-				       WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrUnjoinDomain2(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 const char *server_name /* [in] [unique,charset(UTF16)] */,
-					 const char *account /* [in] [unique,charset(UTF16)] */,
-					 struct wkssvc_PasswordBuffer *encrypted_password /* [in] [unique] */,
-					 uint32_t unjoin_flags /* [in]  */,
-					 WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrRenameMachineInDomain2(struct rpc_pipe_client *cli,
-						  TALLOC_CTX *mem_ctx,
-						  const char *server_name /* [in] [unique,charset(UTF16)] */,
-						  const char *NewMachineName /* [in] [unique,charset(UTF16)] */,
-						  const char *Account /* [in] [unique,charset(UTF16)] */,
-						  struct wkssvc_PasswordBuffer *EncryptedPassword /* [in] [unique] */,
-						  uint32_t RenameOptions /* [in]  */,
-						  WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrValidateName2(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 const char *server_name /* [in] [unique,charset(UTF16)] */,
-					 const char *name /* [in] [ref,charset(UTF16)] */,
-					 const char *Account /* [in] [unique,charset(UTF16)] */,
-					 struct wkssvc_PasswordBuffer *EncryptedPassword /* [in] [unique] */,
-					 enum wkssvc_NetValidateNameType name_type /* [in]  */,
-					 WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrGetJoinableOus2(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   const char *server_name /* [in] [unique,charset(UTF16)] */,
-					   const char *domain_name /* [in] [ref,charset(UTF16)] */,
-					   const char *Account /* [in] [unique,charset(UTF16)] */,
-					   struct wkssvc_PasswordBuffer *EncryptedPassword /* [in] [unique] */,
-					   uint32_t *num_ous /* [in,out] [ref] */,
-					   const char ***ous /* [out] [ref,charset(UTF16),size_is(,*num_ous)] */,
-					   WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrAddAlternateComputerName(struct rpc_pipe_client *cli,
-						    TALLOC_CTX *mem_ctx,
-						    const char *server_name /* [in] [unique,charset(UTF16)] */,
-						    const char *NewAlternateMachineName /* [in] [unique,charset(UTF16)] */,
-						    const char *Account /* [in] [unique,charset(UTF16)] */,
-						    struct wkssvc_PasswordBuffer *EncryptedPassword /* [in] [unique] */,
-						    uint32_t Reserved /* [in]  */,
-						    WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrRemoveAlternateComputerName(struct rpc_pipe_client *cli,
-						       TALLOC_CTX *mem_ctx,
-						       const char *server_name /* [in] [unique,charset(UTF16)] */,
-						       const char *AlternateMachineNameToRemove /* [in] [unique,charset(UTF16)] */,
-						       const char *Account /* [in] [unique,charset(UTF16)] */,
-						       struct wkssvc_PasswordBuffer *EncryptedPassword /* [in] [unique] */,
-						       uint32_t Reserved /* [in]  */,
-						       WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrSetPrimaryComputername(struct rpc_pipe_client *cli,
-						  TALLOC_CTX *mem_ctx,
-						  const char *server_name /* [in] [unique,charset(UTF16)] */,
-						  const char *primary_name /* [in] [unique,charset(UTF16)] */,
-						  const char *Account /* [in] [unique,charset(UTF16)] */,
-						  struct wkssvc_PasswordBuffer *EncryptedPassword /* [in] [unique] */,
-						  uint32_t Reserved /* [in]  */,
-						  WERROR *werror);
-NTSTATUS rpccli_wkssvc_NetrEnumerateComputerNames(struct rpc_pipe_client *cli,
-						  TALLOC_CTX *mem_ctx,
-						  const char *server_name /* [in] [unique,charset(UTF16)] */,
-						  enum wkssvc_ComputerNameType name_type /* [in]  */,
-						  uint32_t Reserved /* [in]  */,
-						  struct wkssvc_ComputerNamesCtr **ctr /* [out] [ref] */,
-						  WERROR *werror);
+NTSTATUS rpccli_wkssvc_NetWkstaGetInfo(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const char *server_name, uint32_t level, union wkssvc_NetWkstaInfo *info);
+NTSTATUS rpccli_wkssvc_NetWkstaSetInfo(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const char *server_name, uint32_t level, union wkssvc_NetWkstaInfo *info, uint32_t *parm_error);
+NTSTATUS rpccli_wkssvc_NetWkstaEnumUsers(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const char *server_name, uint32_t level, union WKS_USER_ENUM_UNION *users, uint32_t prefmaxlen, uint32_t *entriesread, uint32_t *totalentries, uint32_t *resumehandle);
+NTSTATUS rpccli_WKSSVC_NETRWKSTAUSERGETINFO(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx);
+NTSTATUS rpccli_WKSSVC_NETRWKSTAUSERSETINFO(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx);
+NTSTATUS rpccli_wkssvc_NetWkstaTransportEnum(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const char *server_name, uint32_t *level, union wkssvc_NetWkstaTransportCtr *ctr, uint32_t max_buffer, uint32_t *totalentries, uint32_t *resume_handle);
+NTSTATUS rpccli_WKSSVC_NETRWKSTATRANSPORTADD(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx);
+NTSTATUS rpccli_WKSSVC_NETRWKSTATRANSPORTDEL(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx);
+NTSTATUS rpccli_WKSSVC_NETRUSEADD(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx);
+NTSTATUS rpccli_WKSSVC_NETRUSEGETINFO(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx);
+NTSTATUS rpccli_WKSSVC_NETRUSEDEL(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx);
+NTSTATUS rpccli_WKSSVC_NETRUSEENUM(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx);
+NTSTATUS rpccli_WKSSVC_NETRMESSAGEBUFFERSEND(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx);
+NTSTATUS rpccli_WKSSVC_NETRWORKSTATIONSTATISTICSGET(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx);
+NTSTATUS rpccli_WKSSVC_NETRLOGONDOMAINNAMEADD(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx);
+NTSTATUS rpccli_WKSSVC_NETRLOGONDOMAINNAMEDEL(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx);
+NTSTATUS rpccli_WKSSVC_NETRJOINDOMAIN(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx);
+NTSTATUS rpccli_WKSSVC_NETRUNJOINDOMAIN(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx);
+NTSTATUS rpccli_WKSSVC_NETRRENAMEMACHINEINDOMAIN(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx);
+NTSTATUS rpccli_WKSSVC_NETRVALIDATENAME(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx);
+NTSTATUS rpccli_WKSSVC_NETRGETJOININFORMATION(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx);
+NTSTATUS rpccli_WKSSVC_NETRGETJOINABLEOUS(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx);
+NTSTATUS rpccli_wkssvc_NetrJoinDomain2(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const char *server_name, const char *domain_name, const char *account_name, const char *admin_account, struct wkssvc_PasswordBuffer *encrypted_password, uint32_t join_flags);
+NTSTATUS rpccli_wkssvc_NetrUnjoinDomain2(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const char *server_name, const char *account, struct wkssvc_PasswordBuffer *encrypted_password, uint32_t unjoin_flags);
+NTSTATUS rpccli_wkssvc_NetrRenameMachineInDomain2(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const char *server_name, const char *NewMachineName, const char *Account, struct wkssvc_PasswordBuffer *EncryptedPassword, uint32_t RenameOptions);
+NTSTATUS rpccli_WKSSVC_NETRVALIDATENAME2(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx);
+NTSTATUS rpccli_WKSSVC_NETRGETJOINABLEOUS2(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx);
+NTSTATUS rpccli_wkssvc_NetrAddAlternateComputerName(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const char *server_name, const char *NewAlternateMachineName, const char *Account, struct wkssvc_PasswordBuffer *EncryptedPassword, uint32_t Reserved);
+NTSTATUS rpccli_wkssvc_NetrRemoveAlternateComputerName(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const char *server_name, const char *AlternateMachineNameToRemove, const char *Account, struct wkssvc_PasswordBuffer *EncryptedPassword, uint32_t Reserved);
+NTSTATUS rpccli_WKSSVC_NETRSETPRIMARYCOMPUTERNAME(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx);
+NTSTATUS rpccli_WKSSVC_NETRENUMERATECOMPUTERNAMES(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx);
 #endif /* __CLI_WKSSVC__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/dfs.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/dfs.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/dfs.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,579 +0,0 @@
-/* header auto-generated by pidl */
-
-#include <stdint.h>
-
-#ifndef _HEADER_netdfs
-#define _HEADER_netdfs
-
-#define DFS_STORAGE_STATES	( 0xf )
-enum dfs_ManagerVersion
-#ifndef USE_UINT_ENUMS
- {
-	DFS_MANAGER_VERSION_NT4=1,
-	DFS_MANAGER_VERSION_W2K=2,
-	DFS_MANAGER_VERSION_W2K3=4
-}
-#else
- { __donnot_use_enum_dfs_ManagerVersion=0x7FFFFFFF}
-#define DFS_MANAGER_VERSION_NT4 ( 1 )
-#define DFS_MANAGER_VERSION_W2K ( 2 )
-#define DFS_MANAGER_VERSION_W2K3 ( 4 )
-#endif
-;
-
-struct dfs_Info0 {
-	char _empty_;
-};
-
-struct dfs_Info1 {
-	const char *path;/* [unique,charset(UTF16)] */
-};
-
-/* bitmap dfs_VolumeState */
-#define DFS_VOLUME_STATE_OK ( 0x1 )
-#define DFS_VOLUME_STATE_INCONSISTENT ( 0x2 )
-#define DFS_VOLUME_STATE_OFFLINE ( 0x3 )
-#define DFS_VOLUME_STATE_ONLINE ( 0x4 )
-#define DFS_VOLUME_STATE_STANDALONE ( DFS_VOLUME_FLAVOR_STANDALONE )
-#define DFS_VOLUME_STATE_AD_BLOB ( DFS_VOLUME_FLAVOR_AD_BLOB )
-
-struct dfs_Info2 {
-	const char *path;/* [unique,charset(UTF16)] */
-	const char *comment;/* [unique,charset(UTF16)] */
-	uint32_t state;
-	uint32_t num_stores;
-};
-
-/* bitmap dfs_StorageState */
-#define DFS_STORAGE_STATE_OFFLINE ( 1 )
-#define DFS_STORAGE_STATE_ONLINE ( 2 )
-#define DFS_STORAGE_STATE_ACTIVE ( 4 )
-
-struct dfs_StorageInfo {
-	uint32_t state;
-	const char *server;/* [unique,charset(UTF16)] */
-	const char *share;/* [unique,charset(UTF16)] */
-};
-
-struct dfs_Info3 {
-	const char *path;/* [unique,charset(UTF16)] */
-	const char *comment;/* [unique,charset(UTF16)] */
-	uint32_t state;
-	uint32_t num_stores;
-	struct dfs_StorageInfo *stores;/* [unique,size_is(num_stores)] */
-};
-
-struct dfs_Info4 {
-	const char *path;/* [unique,charset(UTF16)] */
-	const char *comment;/* [unique,charset(UTF16)] */
-	uint32_t state;
-	uint32_t timeout;
-	struct GUID guid;
-	uint32_t num_stores;
-	struct dfs_StorageInfo *stores;/* [unique,size_is(num_stores)] */
-};
-
-/* bitmap dfs_PropertyFlags */
-#define DFS_PROPERTY_FLAG_INSITE_REFERRALS ( 0x01 )
-#define DFS_PROPERTY_FLAG_ROOT_SCALABILITY ( 0x02 )
-#define DFS_PROPERTY_FLAG_SITE_COSTING ( 0x04 )
-#define DFS_PROPERTY_FLAG_TARGET_FAILBACK ( 0x08 )
-#define DFS_PROPERTY_FLAG_CLUSTER_ENABLED ( 0x10 )
-
-struct dfs_Info5 {
-	const char *path;/* [unique,charset(UTF16)] */
-	const char *comment;/* [unique,charset(UTF16)] */
-	uint32_t state;
-	uint32_t timeout;
-	struct GUID guid;
-	uint32_t flags;
-	uint32_t pktsize;
-	uint32_t num_stores;
-};
-
-enum dfs_Target_PriorityClass
-#ifndef USE_UINT_ENUMS
- {
-	DFS_INVALID_PRIORITY_CLASS=-1,
-	DFS_SITE_COST_NORMAL_PRIORITY_CLASS=0,
-	DFS_GLOBAL_HIGH_PRIORITY_CLASS=1,
-	DFS_SITE_COST_HIGH_PRIORITY_CLASS=2,
-	DFS_SITE_COST_LOW_PRIORITY_CLASS=3,
-	DFS_GLOBAL_LOW_PRIORITY_CLASS=4
-}
-#else
- { __donnot_use_enum_dfs_Target_PriorityClass=0x7FFFFFFF}
-#define DFS_INVALID_PRIORITY_CLASS ( -1 )
-#define DFS_SITE_COST_NORMAL_PRIORITY_CLASS ( 0 )
-#define DFS_GLOBAL_HIGH_PRIORITY_CLASS ( 1 )
-#define DFS_SITE_COST_HIGH_PRIORITY_CLASS ( 2 )
-#define DFS_SITE_COST_LOW_PRIORITY_CLASS ( 3 )
-#define DFS_GLOBAL_LOW_PRIORITY_CLASS ( 4 )
-#endif
-;
-
-struct dfs_Target_Priority {
-	enum dfs_Target_PriorityClass target_priority_class;
-	uint16_t target_priority_rank;
-	uint16_t reserved;
-};
-
-struct dfs_StorageInfo2 {
-	struct dfs_StorageInfo info;
-	struct dfs_Target_Priority target_priority;
-};
-
-struct dfs_Info6 {
-	const char *entry_path;/* [unique,charset(UTF16)] */
-	const char *comment;/* [unique,charset(UTF16)] */
-	uint32_t state;
-	uint32_t timeout;
-	struct GUID guid;
-	uint32_t flags;
-	uint32_t pktsize;
-	uint16_t num_stores;
-	struct dfs_StorageInfo2 *stores;/* [unique,size_is(num_stores)] */
-};
-
-struct dfs_Info7 {
-	struct GUID generation_guid;
-};
-
-struct dfs_Info100 {
-	const char *comment;/* [unique,charset(UTF16)] */
-};
-
-struct dfs_Info101 {
-	uint32_t state;
-};
-
-struct dfs_Info102 {
-	uint32_t timeout;
-};
-
-struct dfs_Info103 {
-	uint32_t flags;
-};
-
-struct dfs_Info104 {
-	struct dfs_Target_Priority priority;
-};
-
-struct dfs_Info105 {
-	const char *comment;/* [unique,charset(UTF16)] */
-	uint32_t state;
-	uint32_t timeout;
-	uint32_t property_flag_mask;
-	uint32_t property_flags;
-};
-
-struct dfs_Info106 {
-	uint32_t state;
-	struct dfs_Target_Priority priority;
-};
-
-struct dfs_Info200 {
-	const char *dom_root;/* [unique,charset(UTF16)] */
-};
-
-enum dfs_VolumeFlavor
-#ifndef USE_UINT_ENUMS
- {
-	DFS_VOLUME_FLAVOR_STANDALONE=0x100,
-	DFS_VOLUME_FLAVOR_AD_BLOB=0x200
-}
-#else
- { __donnot_use_enum_dfs_VolumeFlavor=0x7FFFFFFF}
-#define DFS_VOLUME_FLAVOR_STANDALONE ( 0x100 )
-#define DFS_VOLUME_FLAVOR_AD_BLOB ( 0x200 )
-#endif
-;
-
-struct dfs_Info300 {
-	enum dfs_VolumeFlavor flavor;
-	const char *dom_root;/* [unique,charset(UTF16)] */
-};
-
-union dfs_Info {
-	struct dfs_Info0 *info0;/* [unique,case(0)] */
-	struct dfs_Info1 *info1;/* [unique,case] */
-	struct dfs_Info2 *info2;/* [unique,case(2)] */
-	struct dfs_Info3 *info3;/* [unique,case(3)] */
-	struct dfs_Info4 *info4;/* [unique,case(4)] */
-	struct dfs_Info5 *info5;/* [unique,case(5)] */
-	struct dfs_Info6 *info6;/* [unique,case(6)] */
-	struct dfs_Info7 *info7;/* [unique,case(7)] */
-	struct dfs_Info100 *info100;/* [unique,case(100)] */
-	struct dfs_Info101 *info101;/* [unique,case(101)] */
-	struct dfs_Info102 *info102;/* [unique,case(102)] */
-	struct dfs_Info103 *info103;/* [unique,case(103)] */
-	struct dfs_Info104 *info104;/* [unique,case(104)] */
-	struct dfs_Info105 *info105;/* [unique,case(105)] */
-	struct dfs_Info106 *info106;/* [unique,case(106)] */
-};
-
-struct dfs_EnumArray1 {
-	uint32_t count;
-	struct dfs_Info1 *s;/* [unique,size_is(count)] */
-};
-
-struct dfs_EnumArray2 {
-	uint32_t count;
-	struct dfs_Info2 *s;/* [unique,size_is(count)] */
-};
-
-struct dfs_EnumArray3 {
-	uint32_t count;
-	struct dfs_Info3 *s;/* [unique,size_is(count)] */
-};
-
-struct dfs_EnumArray4 {
-	uint32_t count;
-	struct dfs_Info4 *s;/* [unique,size_is(count)] */
-};
-
-struct dfs_EnumArray5 {
-	uint32_t count;
-	struct dfs_Info5 *s;/* [unique,size_is(count)] */
-};
-
-struct dfs_EnumArray6 {
-	uint32_t count;
-	struct dfs_Info6 *s;/* [unique,size_is(count)] */
-};
-
-struct dfs_EnumArray200 {
-	uint32_t count;
-	struct dfs_Info200 *s;/* [unique,size_is(count)] */
-};
-
-struct dfs_EnumArray300 {
-	uint32_t count;
-	struct dfs_Info300 *s;/* [unique,size_is(count)] */
-};
-
-union dfs_EnumInfo {
-	struct dfs_EnumArray1 *info1;/* [unique,case] */
-	struct dfs_EnumArray2 *info2;/* [unique,case(2)] */
-	struct dfs_EnumArray3 *info3;/* [unique,case(3)] */
-	struct dfs_EnumArray4 *info4;/* [unique,case(4)] */
-	struct dfs_EnumArray5 *info5;/* [unique,case(5)] */
-	struct dfs_EnumArray6 *info6;/* [unique,case(6)] */
-	struct dfs_EnumArray200 *info200;/* [unique,case(200)] */
-	struct dfs_EnumArray300 *info300;/* [unique,case(300)] */
-};
-
-struct dfs_EnumStruct {
-	uint32_t level;
-	union dfs_EnumInfo e;/* [switch_is(level)] */
-};
-
-struct dfs_UnknownStruct {
-	uint32_t unknown1;
-	const char *unknown2;/* [unique,charset(UTF16)] */
-};
-
-
-struct dfs_GetManagerVersion {
-	struct {
-		enum dfs_ManagerVersion *version;/* [ref] */
-	} out;
-
-};
-
-
-struct dfs_Add {
-	struct {
-		const char *path;/* [ref,charset(UTF16)] */
-		const char *server;/* [ref,charset(UTF16)] */
-		const char *share;/* [unique,charset(UTF16)] */
-		const char *comment;/* [unique,charset(UTF16)] */
-		uint32_t flags;
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct dfs_Remove {
-	struct {
-		const char *dfs_entry_path;/* [ref,charset(UTF16)] */
-		const char *servername;/* [unique,charset(UTF16)] */
-		const char *sharename;/* [unique,charset(UTF16)] */
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct dfs_SetInfo {
-	struct {
-		const char *dfs_entry_path;/* [charset(UTF16)] */
-		const char *servername;/* [unique,charset(UTF16)] */
-		const char *sharename;/* [unique,charset(UTF16)] */
-		uint32_t level;
-		union dfs_Info *info;/* [ref,switch_is(level)] */
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct dfs_GetInfo {
-	struct {
-		const char *dfs_entry_path;/* [charset(UTF16)] */
-		const char *servername;/* [unique,charset(UTF16)] */
-		const char *sharename;/* [unique,charset(UTF16)] */
-		uint32_t level;
-	} in;
-
-	struct {
-		union dfs_Info *info;/* [ref,switch_is(level)] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct dfs_Enum {
-	struct {
-		uint32_t level;
-		uint32_t bufsize;
-		struct dfs_EnumStruct *info;/* [unique] */
-		uint32_t *total;/* [unique] */
-	} in;
-
-	struct {
-		struct dfs_EnumStruct *info;/* [unique] */
-		uint32_t *total;/* [unique] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct dfs_Rename {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct dfs_Move {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct dfs_ManagerGetConfigInfo {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct dfs_ManagerSendSiteInfo {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct dfs_AddFtRoot {
-	struct {
-		const char *servername;/* [charset(UTF16)] */
-		const char *dns_servername;/* [charset(UTF16)] */
-		const char *dfsname;/* [charset(UTF16)] */
-		const char *rootshare;/* [charset(UTF16)] */
-		const char *comment;/* [charset(UTF16)] */
-		const char *dfs_config_dn;/* [charset(UTF16)] */
-		uint8_t unknown1;
-		uint32_t flags;
-		struct dfs_UnknownStruct **unknown2;/* [unique] */
-	} in;
-
-	struct {
-		struct dfs_UnknownStruct **unknown2;/* [unique] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct dfs_RemoveFtRoot {
-	struct {
-		const char *servername;/* [charset(UTF16)] */
-		const char *dns_servername;/* [charset(UTF16)] */
-		const char *dfsname;/* [charset(UTF16)] */
-		const char *rootshare;/* [charset(UTF16)] */
-		uint32_t flags;
-		struct dfs_UnknownStruct **unknown;/* [unique] */
-	} in;
-
-	struct {
-		struct dfs_UnknownStruct **unknown;/* [unique] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct dfs_AddStdRoot {
-	struct {
-		const char *servername;/* [charset(UTF16)] */
-		const char *rootshare;/* [charset(UTF16)] */
-		const char *comment;/* [charset(UTF16)] */
-		uint32_t flags;
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct dfs_RemoveStdRoot {
-	struct {
-		const char *servername;/* [charset(UTF16)] */
-		const char *rootshare;/* [charset(UTF16)] */
-		uint32_t flags;
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct dfs_ManagerInitialize {
-	struct {
-		const char *servername;/* [ref,charset(UTF16)] */
-		uint32_t flags;
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct dfs_AddStdRootForced {
-	struct {
-		const char *servername;/* [charset(UTF16)] */
-		const char *rootshare;/* [charset(UTF16)] */
-		const char *comment;/* [charset(UTF16)] */
-		const char *store;/* [charset(UTF16)] */
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct dfs_GetDcAddress {
-	struct {
-		const char *servername;/* [charset(UTF16)] */
-		const char **server_fullname;/* [ref,charset(UTF16)] */
-		uint8_t *is_root;/* [ref] */
-		uint32_t *ttl;/* [ref] */
-	} in;
-
-	struct {
-		const char **server_fullname;/* [ref,charset(UTF16)] */
-		uint8_t *is_root;/* [ref] */
-		uint32_t *ttl;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct dfs_SetDcAddress {
-	struct {
-		const char *servername;/* [charset(UTF16)] */
-		const char *server_fullname;/* [charset(UTF16)] */
-		uint32_t flags;
-		uint32_t ttl;
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct dfs_FlushFtTable {
-	struct {
-		const char *servername;/* [charset(UTF16)] */
-		const char *rootshare;/* [charset(UTF16)] */
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct dfs_Add2 {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct dfs_Remove2 {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct dfs_EnumEx {
-	struct {
-		const char *dfs_name;/* [charset(UTF16)] */
-		uint32_t level;
-		uint32_t bufsize;
-		struct dfs_EnumStruct *info;/* [unique] */
-		uint32_t *total;/* [unique] */
-	} in;
-
-	struct {
-		struct dfs_EnumStruct *info;/* [unique] */
-		uint32_t *total;/* [unique] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct dfs_SetInfo2 {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-#endif /* _HEADER_netdfs */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/dssetup.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/dssetup.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/dssetup.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,211 +0,0 @@
-/* header auto-generated by pidl */
-
-#include <stdint.h>
-
-#include "librpc/gen_ndr/misc.h"
-#ifndef _HEADER_dssetup
-#define _HEADER_dssetup
-
-enum dssetup_DsRole
-#ifndef USE_UINT_ENUMS
- {
-	DS_ROLE_STANDALONE_WORKSTATION=0,
-	DS_ROLE_MEMBER_WORKSTATION=1,
-	DS_ROLE_STANDALONE_SERVER=2,
-	DS_ROLE_MEMBER_SERVER=3,
-	DS_ROLE_BACKUP_DC=4,
-	DS_ROLE_PRIMARY_DC=5
-}
-#else
- { __donnot_use_enum_dssetup_DsRole=0x7FFFFFFF}
-#define DS_ROLE_STANDALONE_WORKSTATION ( 0 )
-#define DS_ROLE_MEMBER_WORKSTATION ( 1 )
-#define DS_ROLE_STANDALONE_SERVER ( 2 )
-#define DS_ROLE_MEMBER_SERVER ( 3 )
-#define DS_ROLE_BACKUP_DC ( 4 )
-#define DS_ROLE_PRIMARY_DC ( 5 )
-#endif
-;
-
-/* bitmap dssetup_DsRoleFlags */
-#define DS_ROLE_PRIMARY_DS_RUNNING ( 0x00000001 )
-#define DS_ROLE_PRIMARY_DS_MIXED_MODE ( 0x00000002 )
-#define DS_ROLE_UPGRADE_IN_PROGRESS ( 0x00000004 )
-#define DS_ROLE_PRIMARY_DOMAIN_GUID_PRESENT ( 0x01000000 )
-
-struct dssetup_DsRolePrimaryDomInfoBasic {
-	enum dssetup_DsRole role;
-	uint32_t flags;
-	const char *domain;/* [unique,charset(UTF16)] */
-	const char *dns_domain;/* [unique,charset(UTF16)] */
-	const char *forest;/* [unique,charset(UTF16)] */
-	struct GUID domain_guid;
-};
-
-enum dssetup_DsUpgrade
-#ifndef USE_UINT_ENUMS
- {
-	DS_ROLE_NOT_UPGRADING=0,
-	DS_ROLE_UPGRADING=1
-}
-#else
- { __donnot_use_enum_dssetup_DsUpgrade=0x7FFFFFFF}
-#define DS_ROLE_NOT_UPGRADING ( 0 )
-#define DS_ROLE_UPGRADING ( 1 )
-#endif
-;
-
-enum dssetup_DsPrevious
-#ifndef USE_UINT_ENUMS
- {
-	DS_ROLE_PREVIOUS_UNKNOWN=0,
-	DS_ROLE_PREVIOUS_PRIMARY=1,
-	DS_ROLE_PREVIOUS_BACKUP=2
-}
-#else
- { __donnot_use_enum_dssetup_DsPrevious=0x7FFFFFFF}
-#define DS_ROLE_PREVIOUS_UNKNOWN ( 0 )
-#define DS_ROLE_PREVIOUS_PRIMARY ( 1 )
-#define DS_ROLE_PREVIOUS_BACKUP ( 2 )
-#endif
-;
-
-struct dssetup_DsRoleUpgradeStatus {
-	enum dssetup_DsUpgrade upgrading;
-	enum dssetup_DsPrevious previous_role;
-};
-
-enum dssetup_DsRoleOp
-#ifndef USE_UINT_ENUMS
- {
-	DS_ROLE_OP_IDLE=0,
-	DS_ROLE_OP_ACTIVE=1,
-	DS_ROLE_OP_NEEDS_REBOOT=2
-}
-#else
- { __donnot_use_enum_dssetup_DsRoleOp=0x7FFFFFFF}
-#define DS_ROLE_OP_IDLE ( 0 )
-#define DS_ROLE_OP_ACTIVE ( 1 )
-#define DS_ROLE_OP_NEEDS_REBOOT ( 2 )
-#endif
-;
-
-struct dssetup_DsRoleOpStatus {
-	enum dssetup_DsRoleOp status;
-};
-
-enum dssetup_DsRoleInfoLevel
-#ifndef USE_UINT_ENUMS
- {
-	DS_ROLE_BASIC_INFORMATION=1,
-	DS_ROLE_UPGRADE_STATUS=2,
-	DS_ROLE_OP_STATUS=3
-}
-#else
- { __donnot_use_enum_dssetup_DsRoleInfoLevel=0x7FFFFFFF}
-#define DS_ROLE_BASIC_INFORMATION ( 1 )
-#define DS_ROLE_UPGRADE_STATUS ( 2 )
-#define DS_ROLE_OP_STATUS ( 3 )
-#endif
-;
-
-union dssetup_DsRoleInfo {
-	struct dssetup_DsRolePrimaryDomInfoBasic basic;/* [case(DS_ROLE_BASIC_INFORMATION)] */
-	struct dssetup_DsRoleUpgradeStatus upgrade;/* [case(DS_ROLE_UPGRADE_STATUS)] */
-	struct dssetup_DsRoleOpStatus opstatus;/* [case(DS_ROLE_OP_STATUS)] */
-}/* [switch_type(dssetup_DsRoleInfoLevel)] */;
-
-
-struct dssetup_DsRoleGetPrimaryDomainInformation {
-	struct {
-		enum dssetup_DsRoleInfoLevel level;
-	} in;
-
-	struct {
-		union dssetup_DsRoleInfo *info;/* [unique,switch_is(level)] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct dssetup_DsRoleDnsNameToFlatName {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct dssetup_DsRoleDcAsDc {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct dssetup_DsRoleDcAsReplica {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct dssetup_DsRoleDemoteDc {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct dssetup_DsRoleGetDcOperationProgress {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct dssetup_DsRoleGetDcOperationResults {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct dssetup_DsRoleCancel {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct dssetup_DsRoleServerSaveStateForUpgrade {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct dssetup_DsRoleUpgradeDownlevelServer {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct dssetup_DsRoleAbortDownlevelServerUpgrade {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-#endif /* _HEADER_dssetup */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/echo.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/echo.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/echo.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,213 +0,0 @@
-/* header auto-generated by pidl */
-
-#include <stdint.h>
-
-#ifndef _HEADER_rpcecho
-#define _HEADER_rpcecho
-
-struct echo_info1 {
-	uint8_t v;
-};
-
-struct echo_info2 {
-	uint16_t v;
-};
-
-struct echo_info3 {
-	uint32_t v;
-};
-
-struct echo_info4 {
-	uint64_t v;
-};
-
-struct echo_info5 {
-	uint8_t v1;
-	uint64_t v2;
-};
-
-struct echo_info6 {
-	uint8_t v1;
-	struct echo_info1 info1;
-};
-
-struct echo_info7 {
-	uint8_t v1;
-	struct echo_info4 info4;
-};
-
-union echo_Info {
-	struct echo_info1 info1;/* [case] */
-	struct echo_info2 info2;/* [case(2)] */
-	struct echo_info3 info3;/* [case(3)] */
-	struct echo_info4 info4;/* [case(4)] */
-	struct echo_info5 info5;/* [case(5)] */
-	struct echo_info6 info6;/* [case(6)] */
-	struct echo_info7 info7;/* [case(7)] */
-}/* [switch_type(uint16)] */;
-
-enum echo_Enum1
-#ifndef USE_UINT_ENUMS
- {
-	ECHO_ENUM1=1,
-	ECHO_ENUM2=2
-}
-#else
- { __donnot_use_enum_echo_Enum1=0x7FFFFFFF}
-#define ECHO_ENUM1 ( 1 )
-#define ECHO_ENUM2 ( 2 )
-#endif
-;
-
-enum echo_Enum1_32
-#ifndef USE_UINT_ENUMS
- {
-	ECHO_ENUM1_32=1,
-	ECHO_ENUM2_32=2
-}
-#else
- { __donnot_use_enum_echo_Enum1_32=0x7FFFFFFF}
-#define ECHO_ENUM1_32 ( 1 )
-#define ECHO_ENUM2_32 ( 2 )
-#endif
-;
-
-struct echo_Enum2 {
-	enum echo_Enum1 e1;
-	enum echo_Enum1_32 e2;
-};
-
-union echo_Enum3 {
-	enum echo_Enum1 e1;/* [case(ECHO_ENUM1)] */
-	struct echo_Enum2 e2;/* [case(ECHO_ENUM2)] */
-}/* [switch_type(uint16)] */;
-
-struct echo_Surrounding {
-	uint32_t x;
-	uint16_t *surrounding;/* [size_is(x)] */
-};
-
-
-struct echo_AddOne {
-	struct {
-		uint32_t in_data;
-	} in;
-
-	struct {
-		uint32_t *out_data;/* [ref] */
-	} out;
-
-};
-
-
-struct echo_EchoData {
-	struct {
-		uint32_t len;
-		uint8_t *in_data;/* [size_is(len)] */
-	} in;
-
-	struct {
-		uint8_t *out_data;/* [size_is(len)] */
-	} out;
-
-};
-
-
-struct echo_SinkData {
-	struct {
-		uint32_t len;
-		uint8_t *data;/* [size_is(len)] */
-	} in;
-
-};
-
-
-struct echo_SourceData {
-	struct {
-		uint32_t len;
-	} in;
-
-	struct {
-		uint8_t *data;/* [size_is(len)] */
-	} out;
-
-};
-
-
-struct echo_TestCall {
-	struct {
-		const char *s1;/* [ref,charset(UTF16)] */
-	} in;
-
-	struct {
-		const char **s2;/* [ref,charset(UTF16)] */
-	} out;
-
-};
-
-
-struct echo_TestCall2 {
-	struct {
-		uint16_t level;
-	} in;
-
-	struct {
-		union echo_Info *info;/* [ref,switch_is(level)] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct echo_TestSleep {
-	struct {
-		uint32_t seconds;
-	} in;
-
-	struct {
-		uint32_t result;
-	} out;
-
-};
-
-
-struct echo_TestEnum {
-	struct {
-		enum echo_Enum1 *foo1;/* [ref] */
-		struct echo_Enum2 *foo2;/* [ref] */
-		union echo_Enum3 *foo3;/* [ref,switch_is(*foo1)] */
-	} in;
-
-	struct {
-		enum echo_Enum1 *foo1;/* [ref] */
-		struct echo_Enum2 *foo2;/* [ref] */
-		union echo_Enum3 *foo3;/* [ref,switch_is(*foo1)] */
-	} out;
-
-};
-
-
-struct echo_TestSurrounding {
-	struct {
-		struct echo_Surrounding *data;/* [ref] */
-	} in;
-
-	struct {
-		struct echo_Surrounding *data;/* [ref] */
-	} out;
-
-};
-
-
-struct echo_TestDoublePointer {
-	struct {
-		uint16_t ***data;/* [ref] */
-	} in;
-
-	struct {
-		uint16_t result;
-	} out;
-
-};
-
-#endif /* _HEADER_rpcecho */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/epmapper.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/epmapper.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/epmapper.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,354 +0,0 @@
-/* header auto-generated by pidl */
-
-#include <stdint.h>
-
-#ifndef _HEADER_epmapper
-#define _HEADER_epmapper
-
-#define EPMAPPER_STATUS_NO_MORE_ENTRIES	( 0x16c9a0d6 )
-#define EPMAPPER_STATUS_NO_MEMORY	( 0x16C9A012 )
-#define EPMAPPER_STATUS_OK	( 0 )
-enum epm_protocol
-#ifndef USE_UINT_ENUMS
- {
-	EPM_PROTOCOL_DNET_NSP=0x04,
-	EPM_PROTOCOL_OSI_TP4=0x05,
-	EPM_PROTOCOL_OSI_CLNS=0x06,
-	EPM_PROTOCOL_TCP=0x07,
-	EPM_PROTOCOL_UDP=0x08,
-	EPM_PROTOCOL_IP=0x09,
-	EPM_PROTOCOL_NCADG=0x0a,
-	EPM_PROTOCOL_NCACN=0x0b,
-	EPM_PROTOCOL_NCALRPC=0x0c,
-	EPM_PROTOCOL_UUID=0x0d,
-	EPM_PROTOCOL_IPX=0x0e,
-	EPM_PROTOCOL_SMB=0x0f,
-	EPM_PROTOCOL_PIPE=0x10,
-	EPM_PROTOCOL_NETBIOS=0x11,
-	EPM_PROTOCOL_NETBEUI=0x12,
-	EPM_PROTOCOL_SPX=0x13,
-	EPM_PROTOCOL_NB_IPX=0x14,
-	EPM_PROTOCOL_DSP=0x16,
-	EPM_PROTOCOL_DDP=0x17,
-	EPM_PROTOCOL_APPLETALK=0x18,
-	EPM_PROTOCOL_VINES_SPP=0x1a,
-	EPM_PROTOCOL_VINES_IPC=0x1b,
-	EPM_PROTOCOL_STREETTALK=0x1c,
-	EPM_PROTOCOL_HTTP=0x1f,
-	EPM_PROTOCOL_UNIX_DS=0x20,
-	EPM_PROTOCOL_NULL=0x21
-}
-#else
- { __donnot_use_enum_epm_protocol=0x7FFFFFFF}
-#define EPM_PROTOCOL_DNET_NSP ( 0x04 )
-#define EPM_PROTOCOL_OSI_TP4 ( 0x05 )
-#define EPM_PROTOCOL_OSI_CLNS ( 0x06 )
-#define EPM_PROTOCOL_TCP ( 0x07 )
-#define EPM_PROTOCOL_UDP ( 0x08 )
-#define EPM_PROTOCOL_IP ( 0x09 )
-#define EPM_PROTOCOL_NCADG ( 0x0a )
-#define EPM_PROTOCOL_NCACN ( 0x0b )
-#define EPM_PROTOCOL_NCALRPC ( 0x0c )
-#define EPM_PROTOCOL_UUID ( 0x0d )
-#define EPM_PROTOCOL_IPX ( 0x0e )
-#define EPM_PROTOCOL_SMB ( 0x0f )
-#define EPM_PROTOCOL_PIPE ( 0x10 )
-#define EPM_PROTOCOL_NETBIOS ( 0x11 )
-#define EPM_PROTOCOL_NETBEUI ( 0x12 )
-#define EPM_PROTOCOL_SPX ( 0x13 )
-#define EPM_PROTOCOL_NB_IPX ( 0x14 )
-#define EPM_PROTOCOL_DSP ( 0x16 )
-#define EPM_PROTOCOL_DDP ( 0x17 )
-#define EPM_PROTOCOL_APPLETALK ( 0x18 )
-#define EPM_PROTOCOL_VINES_SPP ( 0x1a )
-#define EPM_PROTOCOL_VINES_IPC ( 0x1b )
-#define EPM_PROTOCOL_STREETTALK ( 0x1c )
-#define EPM_PROTOCOL_HTTP ( 0x1f )
-#define EPM_PROTOCOL_UNIX_DS ( 0x20 )
-#define EPM_PROTOCOL_NULL ( 0x21 )
-#endif
-;
-
-struct epm_rhs_dnet_nsp {
-	char _empty_;
-};
-
-struct epm_rhs_osi_tp4 {
-	char _empty_;
-};
-
-struct epm_rhs_osi_clns {
-	char _empty_;
-};
-
-struct epm_rhs_udp {
-	uint16_t port;
-};
-
-struct epm_rhs_tcp {
-	uint16_t port;
-};
-
-struct epm_rhs_ip {
-	const char * ipaddr;
-};
-
-struct epm_rhs_ncadg {
-	uint16_t minor_version;
-};
-
-struct epm_rhs_ncacn {
-	uint16_t minor_version;
-};
-
-struct epm_rhs_uuid {
-	DATA_BLOB unknown;/* [flag(LIBNDR_FLAG_REMAINING)] */
-};
-
-struct epm_rhs_ipx {
-	char _empty_;
-};
-
-struct epm_rhs_smb {
-	const char * unc;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
-};
-
-struct epm_rhs_pipe {
-	const char * path;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
-};
-
-struct epm_rhs_netbios {
-	const char * name;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
-};
-
-struct epm_rhs_netbeui {
-	char _empty_;
-};
-
-struct epm_rhs_spx {
-	char _empty_;
-};
-
-struct epm_rhs_nb_ipx {
-	char _empty_;
-};
-
-struct epm_rhs_http {
-	uint16_t port;
-};
-
-struct epm_rhs_unix_ds {
-	const char * path;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
-};
-
-struct epm_rhs_null {
-	char _empty_;
-};
-
-struct epm_rhs_ncalrpc {
-	uint16_t minor_version;
-};
-
-struct epm_rhs_appletalk {
-	char _empty_;
-};
-
-struct epm_rhs_atalk_stream {
-	char _empty_;
-};
-
-struct epm_rhs_atalk_datagram {
-	char _empty_;
-};
-
-struct epm_rhs_vines_spp {
-	uint16_t port;
-};
-
-struct epm_rhs_vines_ipc {
-	uint16_t port;
-};
-
-struct epm_rhs_streettalk {
-	const char * streettalk;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
-};
-
-union epm_rhs {
-	struct epm_rhs_dnet_nsp dnet_nsp;/* [case(EPM_PROTOCOL_DNET_NSP)] */
-	struct epm_rhs_osi_tp4 osi_tp4;/* [case(EPM_PROTOCOL_OSI_TP4)] */
-	struct epm_rhs_osi_clns osi_clns;/* [case(EPM_PROTOCOL_OSI_CLNS)] */
-	struct epm_rhs_tcp tcp;/* [case(EPM_PROTOCOL_TCP)] */
-	struct epm_rhs_udp udp;/* [case(EPM_PROTOCOL_UDP)] */
-	struct epm_rhs_ip ip;/* [case(EPM_PROTOCOL_IP)] */
-	struct epm_rhs_ncadg ncadg;/* [case(EPM_PROTOCOL_NCADG)] */
-	struct epm_rhs_ncacn ncacn;/* [case(EPM_PROTOCOL_NCACN)] */
-	struct epm_rhs_ncalrpc ncalrpc;/* [case(EPM_PROTOCOL_NCALRPC)] */
-	struct epm_rhs_uuid uuid;/* [case(EPM_PROTOCOL_UUID)] */
-	struct epm_rhs_ipx ipx;/* [case(EPM_PROTOCOL_IPX)] */
-	struct epm_rhs_smb smb;/* [case(EPM_PROTOCOL_SMB)] */
-	struct epm_rhs_pipe pipe;/* [case(EPM_PROTOCOL_PIPE)] */
-	struct epm_rhs_netbios netbios;/* [case(EPM_PROTOCOL_NETBIOS)] */
-	struct epm_rhs_netbeui netbeui;/* [case(EPM_PROTOCOL_NETBEUI)] */
-	struct epm_rhs_spx spx;/* [case(EPM_PROTOCOL_SPX)] */
-	struct epm_rhs_nb_ipx nb_ipx;/* [case(EPM_PROTOCOL_NB_IPX)] */
-	struct epm_rhs_atalk_stream atalk_stream;/* [case(EPM_PROTOCOL_DSP)] */
-	struct epm_rhs_atalk_datagram atalk_datagram;/* [case(EPM_PROTOCOL_DDP)] */
-	struct epm_rhs_appletalk appletalk;/* [case(EPM_PROTOCOL_APPLETALK)] */
-	struct epm_rhs_vines_spp vines_spp;/* [case(EPM_PROTOCOL_VINES_SPP)] */
-	struct epm_rhs_vines_ipc vines_ipc;/* [case(EPM_PROTOCOL_VINES_IPC)] */
-	struct epm_rhs_streettalk streettalk;/* [case(EPM_PROTOCOL_STREETTALK)] */
-	struct epm_rhs_http http;/* [case(EPM_PROTOCOL_HTTP)] */
-	struct epm_rhs_unix_ds unix_ds;/* [case(EPM_PROTOCOL_UNIX_DS)] */
-	struct epm_rhs_null null;/* [case(EPM_PROTOCOL_NULL)] */
-	DATA_BLOB unknown;/* [default,flag(LIBNDR_FLAG_REMAINING)] */
-}/* [nodiscriminant,flag(LIBNDR_FLAG_BIGENDIAN)] */;
-
-struct epm_lhs {
-	enum epm_protocol protocol;
-	DATA_BLOB lhs_data;/* [flag(LIBNDR_FLAG_REMAINING)] */
-};
-
-struct epm_floor {
-	struct epm_lhs lhs;/* [subcontext(2)] */
-	union epm_rhs rhs;/* [subcontext(2),switch_is(lhs.protocol)] */
-};
-
-struct epm_tower {
-	uint16_t num_floors;
-	struct epm_floor *floors;
-}/* [gensize,flag(LIBNDR_FLAG_NOALIGN|LIBNDR_FLAG_LITTLE_ENDIAN)] */;
-
-struct epm_twr_t {
-	uint32_t tower_length;/* [value(ndr_size_epm_tower(&tower,ndr->flags))] */
-	struct epm_tower tower;/* [subcontext(4)] */
-};
-
-struct epm_entry_t {
-	struct GUID object;
-	struct epm_twr_t *tower;/* [ptr] */
-	const char * annotation;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_LEN4)] */
-};
-
-struct rpc_if_id_t {
-	struct GUID uuid;
-	uint16_t vers_major;
-	uint16_t vers_minor;
-};
-
-struct epm_twr_p_t {
-	struct epm_twr_t *twr;/* [ptr] */
-};
-
-
-struct epm_Insert {
-	struct {
-		uint32_t num_ents;
-		struct epm_entry_t *entries;/* [size_is(num_ents)] */
-		uint32_t replace;
-	} in;
-
-	struct {
-		uint32_t result;
-	} out;
-
-};
-
-
-struct epm_Delete {
-	struct {
-		uint32_t num_ents;
-		struct epm_entry_t *entries;/* [size_is(num_ents)] */
-	} in;
-
-	struct {
-		uint32_t result;
-	} out;
-
-};
-
-
-struct epm_Lookup {
-	struct {
-		uint32_t inquiry_type;
-		struct GUID *object;/* [ptr] */
-		struct rpc_if_id_t *interface_id;/* [ptr] */
-		uint32_t vers_option;
-		uint32_t max_ents;
-		struct policy_handle *entry_handle;/* [ref] */
-	} in;
-
-	struct {
-		uint32_t *num_ents;/* [ref] */
-		struct epm_entry_t *entries;/* [length_is(*num_ents),size_is(max_ents)] */
-		struct policy_handle *entry_handle;/* [ref] */
-		uint32_t result;
-	} out;
-
-};
-
-
-struct epm_Map {
-	struct {
-		struct GUID *object;/* [ptr] */
-		struct epm_twr_t *map_tower;/* [ptr] */
-		uint32_t max_towers;
-		struct policy_handle *entry_handle;/* [ref] */
-	} in;
-
-	struct {
-		uint32_t *num_towers;/* [ref] */
-		struct epm_twr_p_t *towers;/* [length_is(*num_towers),size_is(max_towers)] */
-		struct policy_handle *entry_handle;/* [ref] */
-		uint32_t result;
-	} out;
-
-};
-
-
-struct epm_LookupHandleFree {
-	struct {
-		struct policy_handle *entry_handle;/* [ref] */
-	} in;
-
-	struct {
-		struct policy_handle *entry_handle;/* [ref] */
-		uint32_t result;
-	} out;
-
-};
-
-
-struct epm_InqObject {
-	struct {
-		struct GUID *epm_object;/* [ref] */
-	} in;
-
-	struct {
-		uint32_t result;
-	} out;
-
-};
-
-
-struct epm_MgmtDelete {
-	struct {
-		uint32_t object_speced;
-		struct GUID *object;/* [ptr] */
-		struct epm_twr_t *tower;/* [ptr] */
-	} in;
-
-	struct {
-		uint32_t result;
-	} out;
-
-};
-
-
-struct epm_MapAuth {
-	struct {
-		uint32_t result;
-	} out;
-
-};
-
-#endif /* _HEADER_epmapper */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/eventlog.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/eventlog.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/eventlog.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,287 +0,0 @@
-/* header auto-generated by pidl */
-
-#include <stdint.h>
-
-#include "librpc/gen_ndr/lsa.h"
-#include "librpc/gen_ndr/security.h"
-#ifndef _HEADER_eventlog
-#define _HEADER_eventlog
-
-/* bitmap eventlogReadFlags */
-#define EVENTLOG_SEQUENTIAL_READ ( 0x0001 )
-#define EVENTLOG_SEEK_READ ( 0x0002 )
-#define EVENTLOG_FORWARDS_READ ( 0x0004 )
-#define EVENTLOG_BACKWARDS_READ ( 0x0008 )
-
-/* bitmap eventlogEventTypes */
-#define EVENTLOG_SUCCESS ( 0x0000 )
-#define EVENTLOG_ERROR_TYPE ( 0x0001 )
-#define EVENTLOG_WARNING_TYPE ( 0x0002 )
-#define EVENTLOG_INFORMATION_TYPE ( 0x0004 )
-#define EVENTLOG_AUDIT_SUCCESS ( 0x0008 )
-#define EVENTLOG_AUDIT_FAILURE ( 0x0010 )
-
-struct eventlog_OpenUnknown0 {
-	uint16_t unknown0;
-	uint16_t unknown1;
-};
-
-struct eventlog_Record {
-	uint32_t size;
-	uint32_t reserved;
-	uint32_t record_number;
-	uint32_t time_generated;
-	uint32_t time_written;
-	uint32_t event_id;
-	uint16_t event_type;
-	uint16_t num_of_strings;
-	uint16_t event_category;
-	uint16_t reserved_flags;
-	uint32_t closing_record_number;
-	uint32_t stringoffset;
-	uint32_t sid_length;
-	uint32_t sid_offset;
-	uint32_t data_length;
-	uint32_t data_offset;
-	const char * source_name;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */
-	const char * computer_name;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */
-	const char * *strings;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */
-	const char * raw_data;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
-}/* [public] */;
-
-
-struct eventlog_ClearEventLogW {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct lsa_String *backupfile;/* [unique] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct eventlog_BackupEventLogW {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct eventlog_CloseEventLog {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-	} in;
-
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct eventlog_DeregisterEventSource {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct eventlog_GetNumRecords {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-	} in;
-
-	struct {
-		uint32_t *number;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct eventlog_GetOldestRecord {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-	} in;
-
-	struct {
-		uint32_t *oldest_entry;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct eventlog_ChangeNotify {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct eventlog_OpenEventLogW {
-	struct {
-		struct eventlog_OpenUnknown0 *unknown0;/* [unique] */
-		struct lsa_String *logname;/* [ref] */
-		struct lsa_String *servername;/* [ref] */
-		uint32_t unknown2;
-		uint32_t unknown3;
-	} in;
-
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct eventlog_RegisterEventSourceW {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct eventlog_OpenBackupEventLogW {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct eventlog_ReadEventLogW {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		uint32_t flags;
-		uint32_t offset;
-		uint32_t number_of_bytes;/* [range(0,0x7FFFF)] */
-	} in;
-
-	struct {
-		uint8_t *data;/* [ref,size_is(number_of_bytes)] */
-		uint32_t *sent_size;/* [ref] */
-		uint32_t *real_size;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct eventlog_ReportEventW {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct eventlog_ClearEventLogA {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct eventlog_BackupEventLogA {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct eventlog_OpenEventLogA {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct eventlog_RegisterEventSourceA {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct eventlog_OpenBackupEventLogA {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct eventlog_ReadEventLogA {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct eventlog_ReportEventA {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct eventlog_RegisterClusterSvc {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct eventlog_DeregisterClusterSvc {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct eventlog_WriteClusterEvents {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct eventlog_GetLogIntormation {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct eventlog_FlushEventLog {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-#endif /* _HEADER_eventlog */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/initshutdown.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/initshutdown.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/initshutdown.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,64 +0,0 @@
-/* header auto-generated by pidl */
-
-#include <stdint.h>
-
-#ifndef _HEADER_initshutdown
-#define _HEADER_initshutdown
-
-struct initshutdown_String_sub {
-	uint32_t name_size;/* [value(strlen_m_term(name))] */
-	const char * name;/* [flag(LIBNDR_FLAG_STR_LEN4|LIBNDR_FLAG_STR_NOTERM)] */
-};
-
-struct initshutdown_String {
-	uint16_t name_len;/* [value(strlen_m(name->name)*2)] */
-	uint16_t name_size;/* [value(strlen_m_term(name->name)*2)] */
-	struct initshutdown_String_sub *name;/* [unique] */
-}/* [public] */;
-
-
-struct initshutdown_Init {
-	struct {
-		uint16_t *hostname;/* [unique] */
-		struct initshutdown_String *message;/* [unique] */
-		uint32_t timeout;
-		uint8_t force_apps;
-		uint8_t reboot;
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct initshutdown_Abort {
-	struct {
-		uint16_t *server;/* [unique] */
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct initshutdown_InitEx {
-	struct {
-		uint16_t *hostname;/* [unique] */
-		struct initshutdown_String *message;/* [unique] */
-		uint32_t timeout;
-		uint8_t force_apps;
-		uint8_t reboot;
-		uint32_t reason;
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-#endif /* _HEADER_initshutdown */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/krb5pac.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/krb5pac.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/krb5pac.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,137 +0,0 @@
-/* header auto-generated by pidl */
-
-#include <stdint.h>
-
-#include "librpc/gen_ndr/security.h"
-#include "librpc/gen_ndr/netlogon.h"
-#include "librpc/gen_ndr/samr.h"
-#ifndef _HEADER_krb5pac
-#define _HEADER_krb5pac
-
-struct PAC_LOGON_NAME {
-	NTTIME logon_time;
-	uint16_t size;/* [value(2*strlen_m(account_name))] */
-	const char *account_name;/* [charset(UTF16)] */
-};
-
-struct PAC_SIGNATURE_DATA {
-	uint32_t type;
-	DATA_BLOB signature;/* [flag(LIBNDR_FLAG_REMAINING)] */
-}/* [public,flag(LIBNDR_PRINT_ARRAY_HEX)] */;
-
-struct PAC_LOGON_INFO {
-	struct netr_SamInfo3 info3;
-	struct dom_sid2 *res_group_dom_sid;/* [unique] */
-	struct samr_RidWithAttributeArray res_groups;
-}/* [gensize] */;
-
-struct PAC_UNKNOWN_12 {
-	uint16_t upn_size;/* [value(2*strlen_m(upn_name))] */
-	uint16_t upn_offset;
-	uint16_t domain_size;/* [value(2*strlen_m(domain_name))] */
-	uint16_t domain_offset;
-	uint16_t unknown3;
-	uint16_t unknown4;
-	uint32_t unknown5;
-	const char *upn_name;/* [charset(UTF16)] */
-	const char *domain_name;/* [charset(UTF16)] */
-	uint32_t unknown6;
-};
-
-struct PAC_LOGON_INFO_CTR {
-	uint32_t unknown1;/* [value(0x00081001)] */
-	uint32_t unknown2;/* [value(0xCCCCCCCC)] */
-	uint32_t _ndr_size;/* [value(NDR_ROUND(ndr_size_PAC_LOGON_INFO(info,ndr->flags)+4,8))] */
-	uint32_t unknown3;/* [value(0x00000000)] */
-	struct PAC_LOGON_INFO *info;/* [unique] */
-}/* [public] */;
-
-enum PAC_TYPE
-#ifndef USE_UINT_ENUMS
- {
-	PAC_TYPE_LOGON_INFO=1,
-	PAC_TYPE_SRV_CHECKSUM=6,
-	PAC_TYPE_KDC_CHECKSUM=7,
-	PAC_TYPE_LOGON_NAME=10,
-	PAC_TYPE_CONSTRAINED_DELEGATION=11,
-	PAC_TYPE_UNKNOWN_12=12
-}
-#else
- { __donnot_use_enum_PAC_TYPE=0x7FFFFFFF}
-#define PAC_TYPE_LOGON_INFO ( 1 )
-#define PAC_TYPE_SRV_CHECKSUM ( 6 )
-#define PAC_TYPE_KDC_CHECKSUM ( 7 )
-#define PAC_TYPE_LOGON_NAME ( 10 )
-#define PAC_TYPE_CONSTRAINED_DELEGATION ( 11 )
-#define PAC_TYPE_UNKNOWN_12 ( 12 )
-#endif
-;
-
-struct DATA_BLOB_REM {
-	DATA_BLOB remaining;/* [flag(LIBNDR_FLAG_REMAINING)] */
-};
-
-union PAC_INFO {
-	struct PAC_LOGON_INFO_CTR logon_info;/* [case(PAC_TYPE_LOGON_INFO)] */
-	struct PAC_SIGNATURE_DATA srv_cksum;/* [case(PAC_TYPE_SRV_CHECKSUM)] */
-	struct PAC_SIGNATURE_DATA kdc_cksum;/* [case(PAC_TYPE_KDC_CHECKSUM)] */
-	struct PAC_LOGON_NAME logon_name;/* [case(PAC_TYPE_LOGON_NAME)] */
-	struct DATA_BLOB_REM unknown;/* [subcontext(0),case(PAC_TYPE_UNKNOWN_12)] */
-}/* [gensize,nodiscriminant,public] */;
-
-struct PAC_BUFFER {
-	enum PAC_TYPE type;
-	uint32_t _ndr_size;/* [value(_ndr_size_PAC_INFO(info,type,0))] */
-	union PAC_INFO *info;/* [relative,subcontext_size(_subcontext_size_PAC_INFO(r,ndr->flags)),subcontext(0),switch_is(type),flag(LIBNDR_FLAG_ALIGN8)] */
-	uint32_t _pad;/* [value(0)] */
-}/* [noprint,nopull,public,nopush] */;
-
-struct PAC_DATA {
-	uint32_t num_buffers;
-	uint32_t version;
-	struct PAC_BUFFER *buffers;
-}/* [public] */;
-
-struct PAC_BUFFER_RAW {
-	enum PAC_TYPE type;
-	uint32_t ndr_size;
-	struct DATA_BLOB_REM *info;/* [relative,subcontext_size(NDR_ROUND(ndr_size,8)),subcontext(0),flag(LIBNDR_FLAG_ALIGN8)] */
-	uint32_t _pad;/* [value(0)] */
-}/* [public] */;
-
-struct PAC_DATA_RAW {
-	uint32_t num_buffers;
-	uint32_t version;
-	struct PAC_BUFFER_RAW *buffers;
-}/* [public] */;
-
-struct netsamlogoncache_entry {
-	time_t timestamp;
-	struct netr_SamInfo3 info3;
-}/* [public] */;
-
-
-struct decode_pac {
-	struct {
-		struct PAC_DATA pac;
-	} in;
-
-};
-
-
-struct decode_pac_raw {
-	struct {
-		struct PAC_DATA_RAW pac;
-	} in;
-
-};
-
-
-struct decode_login_info {
-	struct {
-		struct PAC_LOGON_INFO logon_info;
-	} in;
-
-};
-
-#endif /* _HEADER_krb5pac */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/libnet_join.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/libnet_join.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/libnet_join.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,78 +0,0 @@
-/* header auto-generated by pidl */
-
-#include <stdint.h>
-
-#include "librpc/gen_ndr/wkssvc.h"
-#include "librpc/gen_ndr/security.h"
-#ifndef _HEADER_libnetjoin
-#define _HEADER_libnetjoin
-
-enum netr_SchannelType;
-
-
-struct libnet_JoinCtx {
-	struct {
-		const char * dc_name;
-		const char * machine_name;
-		const char * domain_name;/* [ref] */
-		const char * account_ou;
-		const char * admin_account;
-		const char * admin_password;
-		const char * machine_password;
-		uint32_t join_flags;
-		const char * os_version;
-		const char * os_name;
-		uint8_t create_upn;
-		const char * upn;
-		uint8_t modify_config;
-		struct ads_struct *ads;/* [ref] */
-		uint8_t debug;
-		enum netr_SchannelType secure_channel_type;
-		struct messaging_context *msg_ctx;/* [noprint,ref] */
-	} in;
-
-	struct {
-		const char * account_name;
-		const char * netbios_domain_name;
-		const char * dns_domain_name;
-		const char * dn;
-		struct dom_sid *domain_sid;/* [ref] */
-		uint8_t modified_config;
-		const char * error_string;
-		uint8_t domain_is_ad;
-		WERROR result;
-	} out;
-
-};
-
-
-struct libnet_UnjoinCtx {
-	struct {
-		const char * dc_name;
-		const char * machine_name;
-		const char * domain_name;
-		const char * account_ou;
-		const char * admin_account;
-		const char * admin_password;
-		const char * machine_password;
-		uint32_t unjoin_flags;
-		uint8_t modify_config;
-		struct dom_sid *domain_sid;/* [ref] */
-		struct ads_struct *ads;/* [ref] */
-		uint8_t debug;
-		struct messaging_context *msg_ctx;/* [noprint,ref] */
-	} in;
-
-	struct {
-		const char * netbios_domain_name;
-		const char * dns_domain_name;
-		uint8_t modified_config;
-		const char * error_string;
-		uint8_t disabled_machine_account;
-		uint8_t deleted_machine_account;
-		WERROR result;
-	} out;
-
-};
-
-#endif /* _HEADER_libnetjoin */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/libnetapi.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/libnetapi.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/libnetapi.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,280 +0,0 @@
-/* header auto-generated by pidl */
-
-#include <stdint.h>
-
-#define LIBNETAPI_LOCAL_SERVER(x) (!x || is_myname_or_ipaddr(x))
-#ifndef _HEADER_libnetapi
-#define _HEADER_libnetapi
-
-#define ERROR_MORE_DATA	( 234L )
-enum NET_API_STATUS
-#ifndef USE_UINT_ENUMS
- {
-	NERR_Success=0
-}
-#else
- { __donnot_use_enum_NET_API_STATUS=0x7FFFFFFF}
-#define NERR_Success ( 0 )
-#endif
-;
-
-struct SERVER_INFO_1005 {
-	const char * sv1005_comment;
-};
-
-struct DOMAIN_CONTROLLER_INFO {
-	const char * domain_controller_name;
-	const char * domain_controller_address;
-	uint32_t domain_controller_address_type;
-	struct GUID domain_guid;
-	const char * domain_name;
-	const char * dns_forest_name;
-	uint32_t flags;
-	const char * dc_site_name;
-	const char * client_site_name;
-};
-
-struct USER_INFO_0 {
-	const char * usri0_name;
-};
-
-struct USER_INFO_1 {
-	const char * usri1_name;
-	const char * usri1_password;
-	uint32_t usri1_password_age;
-	uint32_t usri1_priv;
-	const char * usri1_home_dir;
-	const char * usri1_comment;
-	uint32_t usri1_flags;
-	const char * usri1_script_path;
-};
-
-struct NET_DISPLAY_USER {
-	const char * usri1_name;
-	const char * usri1_comment;
-	uint32_t usri1_flags;
-	const char * usri1_full_name;
-	uint32_t usri1_user_id;
-	uint32_t usri1_next_index;
-};
-
-struct NET_DISPLAY_MACHINE {
-	const char * usri2_name;
-	const char * usri2_comment;
-	uint32_t usri2_flags;
-	uint32_t usri2_user_id;
-	uint32_t usri2_next_index;
-};
-
-struct NET_DISPLAY_GROUP {
-	const char * grpi3_name;
-	const char * grpi3_comment;
-	uint32_t grpi3_group_id;
-	uint32_t grpi3_attributes;
-	uint32_t grpi3_next_index;
-};
-
-
-struct NetJoinDomain {
-	struct {
-		const char * server;/* [unique] */
-		const char * domain;/* [ref] */
-		const char * account_ou;/* [unique] */
-		const char * account;/* [unique] */
-		const char * password;/* [unique] */
-		uint32_t join_flags;
-	} in;
-
-	struct {
-		enum NET_API_STATUS result;
-	} out;
-
-};
-
-
-struct NetUnjoinDomain {
-	struct {
-		const char * server_name;/* [unique] */
-		const char * account;/* [unique] */
-		const char * password;/* [unique] */
-		uint32_t unjoin_flags;
-	} in;
-
-	struct {
-		enum NET_API_STATUS result;
-	} out;
-
-};
-
-
-struct NetGetJoinInformation {
-	struct {
-		const char * server_name;/* [unique] */
-	} in;
-
-	struct {
-		const char * *name_buffer;/* [ref] */
-		uint16_t *name_type;/* [ref] */
-		enum NET_API_STATUS result;
-	} out;
-
-};
-
-
-struct NetGetJoinableOUs {
-	struct {
-		const char * server_name;/* [unique] */
-		const char * domain;/* [ref] */
-		const char * account;/* [unique] */
-		const char * password;/* [unique] */
-	} in;
-
-	struct {
-		uint32_t *ou_count;/* [ref] */
-		const char * **ous;/* [ref] */
-		enum NET_API_STATUS result;
-	} out;
-
-};
-
-
-struct NetServerGetInfo {
-	struct {
-		const char * server_name;/* [unique] */
-		uint32_t level;
-	} in;
-
-	struct {
-		uint8_t **buffer;/* [ref] */
-		enum NET_API_STATUS result;
-	} out;
-
-};
-
-
-struct NetServerSetInfo {
-	struct {
-		const char * server_name;/* [unique] */
-		uint32_t level;
-		uint8_t *buffer;/* [ref] */
-	} in;
-
-	struct {
-		uint32_t *parm_error;/* [ref] */
-		enum NET_API_STATUS result;
-	} out;
-
-};
-
-
-struct NetGetDCName {
-	struct {
-		const char * server_name;/* [unique] */
-		const char * domain_name;/* [unique] */
-	} in;
-
-	struct {
-		uint8_t **buffer;/* [ref] */
-		enum NET_API_STATUS result;
-	} out;
-
-};
-
-
-struct NetGetAnyDCName {
-	struct {
-		const char * server_name;/* [unique] */
-		const char * domain_name;/* [unique] */
-	} in;
-
-	struct {
-		uint8_t **buffer;/* [ref] */
-		enum NET_API_STATUS result;
-	} out;
-
-};
-
-
-struct DsGetDcName {
-	struct {
-		const char * server_name;/* [unique] */
-		const char * domain_name;/* [ref] */
-		struct GUID *domain_guid;/* [unique] */
-		const char * site_name;/* [unique] */
-		uint32_t flags;
-	} in;
-
-	struct {
-		struct DOMAIN_CONTROLLER_INFO **dc_info;/* [ref] */
-		enum NET_API_STATUS result;
-	} out;
-
-};
-
-
-struct NetUserAdd {
-	struct {
-		const char * server_name;/* [unique] */
-		uint32_t level;
-		uint8_t *buffer;/* [ref] */
-	} in;
-
-	struct {
-		uint32_t *parm_error;/* [ref] */
-		enum NET_API_STATUS result;
-	} out;
-
-};
-
-
-struct NetUserDel {
-	struct {
-		const char * server_name;/* [unique] */
-		const char * user_name;/* [ref] */
-	} in;
-
-	struct {
-		enum NET_API_STATUS result;
-	} out;
-
-};
-
-
-struct NetUserEnum {
-	struct {
-		const char * server_name;/* [unique] */
-		uint32_t level;
-		uint32_t filter;
-		uint32_t prefmaxlen;
-		uint32_t *resume_handle;/* [ref] */
-	} in;
-
-	struct {
-		uint8_t **buffer;/* [ref] */
-		uint32_t *entries_read;/* [ref] */
-		uint32_t *total_entries;/* [ref] */
-		uint32_t *resume_handle;/* [ref] */
-		enum NET_API_STATUS result;
-	} out;
-
-};
-
-
-struct NetQueryDisplayInformation {
-	struct {
-		const char * server_name;/* [unique] */
-		uint32_t level;
-		uint32_t idx;
-		uint32_t entries_requested;
-		uint32_t prefmaxlen;
-	} in;
-
-	struct {
-		uint32_t *entries_read;/* [ref] */
-		void **buffer;/* [noprint,ref] */
-		enum NET_API_STATUS result;
-	} out;
-
-};
-
-#endif /* _HEADER_libnetapi */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/lsa.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/lsa.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/lsa.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,1647 +0,0 @@
-/* header auto-generated by pidl */
-
-#include <stdint.h>
-
-#include "librpc/gen_ndr/security.h"
-#ifndef _HEADER_lsarpc
-#define _HEADER_lsarpc
-
-#define LSA_ENUM_TRUST_DOMAIN_MULTIPLIER	( 60 )
-#define LSA_REF_DOMAIN_LIST_MULTIPLIER	( 32 )
-#define MAX_REF_DOMAINS	( LSA_REF_DOMAIN_LIST_MULTIPLIER )
-#define MAX_LOOKUP_SIDS	( 0x5000 )
-#define LSA_ENUM_TRUST_DOMAIN_EX_MULTIPLIER	( 82 )
-struct lsa_String {
-	uint16_t length;/* [value(2*strlen_m(string))] */
-	uint16_t size;/* [value(2*strlen_m(string))] */
-	const char *string;/* [unique,charset(UTF16),length_is(length/2),size_is(size/2)] */
-}/* [public,noejs] */;
-
-struct lsa_StringLarge {
-	uint16_t length;/* [value(2*strlen_m(string))] */
-	uint16_t size;/* [value(2*strlen_m_term(string))] */
-	const char *string;/* [unique,charset(UTF16),length_is(length/2),size_is(size/2)] */
-}/* [public] */;
-
-struct lsa_Strings {
-	uint32_t count;
-	struct lsa_String *names;/* [unique,size_is(count)] */
-}/* [public] */;
-
-struct lsa_AsciiString {
-	uint16_t length;/* [value(strlen_m(string))] */
-	uint16_t size;/* [value(strlen_m(string))] */
-	const char *string;/* [unique,charset(DOS),length_is(length),size_is(size)] */
-}/* [public] */;
-
-struct lsa_AsciiStringLarge {
-	uint16_t length;/* [value(strlen_m(string))] */
-	uint16_t size;/* [value(strlen_m_term(string))] */
-	const char *string;/* [unique,charset(DOS),length_is(length),size_is(size)] */
-}/* [public] */;
-
-struct lsa_BinaryString {
-	uint16_t length;
-	uint16_t size;
-	uint16_t *array;/* [unique,length_is(length/2),size_is(size/2)] */
-}/* [public] */;
-
-struct lsa_LUID {
-	uint32_t low;
-	uint32_t high;
-};
-
-struct lsa_PrivEntry {
-	struct lsa_StringLarge name;
-	struct lsa_LUID luid;
-};
-
-struct lsa_PrivArray {
-	uint32_t count;
-	struct lsa_PrivEntry *privs;/* [unique,size_is(count)] */
-};
-
-struct lsa_QosInfo {
-	uint32_t len;
-	uint16_t impersonation_level;
-	uint8_t context_mode;
-	uint8_t effective_only;
-};
-
-struct lsa_ObjectAttribute {
-	uint32_t len;
-	uint8_t *root_dir;/* [unique] */
-	const char *object_name;/* [unique,charset(UTF16)] */
-	uint32_t attributes;
-	struct security_descriptor *sec_desc;/* [unique] */
-	struct lsa_QosInfo *sec_qos;/* [unique] */
-};
-
-/* bitmap lsa_PolicyAccessMask */
-#define LSA_POLICY_VIEW_LOCAL_INFORMATION ( 0x00000001 )
-#define LSA_POLICY_VIEW_AUDIT_INFORMATION ( 0x00000002 )
-#define LSA_POLICY_GET_PRIVATE_INFORMATION ( 0x00000004 )
-#define LSA_POLICY_TRUST_ADMIN ( 0x00000008 )
-#define LSA_POLICY_CREATE_ACCOUNT ( 0x00000010 )
-#define LSA_POLICY_CREATE_SECRET ( 0x00000020 )
-#define LSA_POLICY_CREATE_PRIVILEGE ( 0x00000040 )
-#define LSA_POLICY_SET_DEFAULT_QUOTA_LIMITS ( 0x00000080 )
-#define LSA_POLICY_SET_AUDIT_REQUIREMENTS ( 0x00000100 )
-#define LSA_POLICY_AUDIT_LOG_ADMIN ( 0x00000200 )
-#define LSA_POLICY_SERVER_ADMIN ( 0x00000400 )
-#define LSA_POLICY_LOOKUP_NAMES ( 0x00000800 )
-
-struct lsa_AuditLogInfo {
-	uint32_t percent_full;
-	uint32_t log_size;
-	NTTIME retention_time;
-	uint8_t shutdown_in_progress;
-	NTTIME time_to_shutdown;
-	uint32_t next_audit_record;
-	uint32_t unknown;
-};
-
-enum lsa_PolicyAuditPolicy
-#ifndef USE_UINT_ENUMS
- {
-	LSA_AUDIT_POLICY_NONE=0,
-	LSA_AUDIT_POLICY_SUCCESS=1,
-	LSA_AUDIT_POLICY_FAILURE=2,
-	LSA_AUDIT_POLICY_ALL=(LSA_AUDIT_POLICY_SUCCESS|LSA_AUDIT_POLICY_FAILURE),
-	LSA_AUDIT_POLICY_CLEAR=4
-}
-#else
- { __donnot_use_enum_lsa_PolicyAuditPolicy=0x7FFFFFFF}
-#define LSA_AUDIT_POLICY_NONE ( 0 )
-#define LSA_AUDIT_POLICY_SUCCESS ( 1 )
-#define LSA_AUDIT_POLICY_FAILURE ( 2 )
-#define LSA_AUDIT_POLICY_ALL ( (LSA_AUDIT_POLICY_SUCCESS|LSA_AUDIT_POLICY_FAILURE) )
-#define LSA_AUDIT_POLICY_CLEAR ( 4 )
-#endif
-;
-
-enum lsa_PolicyAuditEventType
-#ifndef USE_UINT_ENUMS
- {
-	LSA_AUDIT_CATEGORY_SYSTEM=0,
-	LSA_AUDIT_CATEGORY_LOGON=1,
-	LSA_AUDIT_CATEGORY_FILE_AND_OBJECT_ACCESS=2,
-	LSA_AUDIT_CATEGORY_USE_OF_USER_RIGHTS=3,
-	LSA_AUDIT_CATEGORY_PROCCESS_TRACKING=4,
-	LSA_AUDIT_CATEGORY_SECURITY_POLICY_CHANGES=5,
-	LSA_AUDIT_CATEGORY_ACCOUNT_MANAGEMENT=6,
-	LSA_AUDIT_CATEGORY_DIRECTORY_SERVICE_ACCESS=7,
-	LSA_AUDIT_CATEGORY_ACCOUNT_LOGON=8
-}
-#else
- { __donnot_use_enum_lsa_PolicyAuditEventType=0x7FFFFFFF}
-#define LSA_AUDIT_CATEGORY_SYSTEM ( 0 )
-#define LSA_AUDIT_CATEGORY_LOGON ( 1 )
-#define LSA_AUDIT_CATEGORY_FILE_AND_OBJECT_ACCESS ( 2 )
-#define LSA_AUDIT_CATEGORY_USE_OF_USER_RIGHTS ( 3 )
-#define LSA_AUDIT_CATEGORY_PROCCESS_TRACKING ( 4 )
-#define LSA_AUDIT_CATEGORY_SECURITY_POLICY_CHANGES ( 5 )
-#define LSA_AUDIT_CATEGORY_ACCOUNT_MANAGEMENT ( 6 )
-#define LSA_AUDIT_CATEGORY_DIRECTORY_SERVICE_ACCESS ( 7 )
-#define LSA_AUDIT_CATEGORY_ACCOUNT_LOGON ( 8 )
-#endif
-;
-
-struct lsa_AuditEventsInfo {
-	uint32_t auditing_mode;
-	enum lsa_PolicyAuditPolicy *settings;/* [unique,size_is(count)] */
-	uint32_t count;
-};
-
-struct lsa_DomainInfo {
-	struct lsa_StringLarge name;
-	struct dom_sid2 *sid;/* [unique] */
-};
-
-struct lsa_PDAccountInfo {
-	struct lsa_String name;
-};
-
-struct lsa_ServerRole {
-	uint16_t unknown;
-	uint16_t role;
-};
-
-struct lsa_ReplicaSourceInfo {
-	struct lsa_String source;
-	struct lsa_String account;
-};
-
-struct lsa_DefaultQuotaInfo {
-	uint32_t paged_pool;
-	uint32_t non_paged_pool;
-	uint32_t min_wss;
-	uint32_t max_wss;
-	uint32_t pagefile;
-	uint64_t unknown;
-};
-
-struct lsa_ModificationInfo {
-	uint64_t modified_id;
-	NTTIME db_create_time;
-};
-
-struct lsa_AuditFullSetInfo {
-	uint8_t shutdown_on_full;
-};
-
-struct lsa_AuditFullQueryInfo {
-	uint16_t unknown;
-	uint8_t shutdown_on_full;
-	uint8_t log_is_full;
-};
-
-struct lsa_DnsDomainInfo {
-	struct lsa_StringLarge name;
-	struct lsa_StringLarge dns_domain;
-	struct lsa_StringLarge dns_forest;
-	struct GUID domain_guid;
-	struct dom_sid2 *sid;/* [unique] */
-};
-
-enum lsa_PolicyInfo
-#ifndef USE_UINT_ENUMS
- {
-	LSA_POLICY_INFO_AUDIT_LOG=1,
-	LSA_POLICY_INFO_AUDIT_EVENTS=2,
-	LSA_POLICY_INFO_DOMAIN=3,
-	LSA_POLICY_INFO_PD=4,
-	LSA_POLICY_INFO_ACCOUNT_DOMAIN=5,
-	LSA_POLICY_INFO_ROLE=6,
-	LSA_POLICY_INFO_REPLICA=7,
-	LSA_POLICY_INFO_QUOTA=8,
-	LSA_POLICY_INFO_DB=9,
-	LSA_POLICY_INFO_AUDIT_FULL_SET=10,
-	LSA_POLICY_INFO_AUDIT_FULL_QUERY=11,
-	LSA_POLICY_INFO_DNS=12
-}
-#else
- { __donnot_use_enum_lsa_PolicyInfo=0x7FFFFFFF}
-#define LSA_POLICY_INFO_AUDIT_LOG ( 1 )
-#define LSA_POLICY_INFO_AUDIT_EVENTS ( 2 )
-#define LSA_POLICY_INFO_DOMAIN ( 3 )
-#define LSA_POLICY_INFO_PD ( 4 )
-#define LSA_POLICY_INFO_ACCOUNT_DOMAIN ( 5 )
-#define LSA_POLICY_INFO_ROLE ( 6 )
-#define LSA_POLICY_INFO_REPLICA ( 7 )
-#define LSA_POLICY_INFO_QUOTA ( 8 )
-#define LSA_POLICY_INFO_DB ( 9 )
-#define LSA_POLICY_INFO_AUDIT_FULL_SET ( 10 )
-#define LSA_POLICY_INFO_AUDIT_FULL_QUERY ( 11 )
-#define LSA_POLICY_INFO_DNS ( 12 )
-#endif
-;
-
-union lsa_PolicyInformation {
-	struct lsa_AuditLogInfo audit_log;/* [case(LSA_POLICY_INFO_AUDIT_LOG)] */
-	struct lsa_AuditEventsInfo audit_events;/* [case(LSA_POLICY_INFO_AUDIT_EVENTS)] */
-	struct lsa_DomainInfo domain;/* [case(LSA_POLICY_INFO_DOMAIN)] */
-	struct lsa_PDAccountInfo pd;/* [case(LSA_POLICY_INFO_PD)] */
-	struct lsa_DomainInfo account_domain;/* [case(LSA_POLICY_INFO_ACCOUNT_DOMAIN)] */
-	struct lsa_ServerRole role;/* [case(LSA_POLICY_INFO_ROLE)] */
-	struct lsa_ReplicaSourceInfo replica;/* [case(LSA_POLICY_INFO_REPLICA)] */
-	struct lsa_DefaultQuotaInfo quota;/* [case(LSA_POLICY_INFO_QUOTA)] */
-	struct lsa_ModificationInfo db;/* [case(LSA_POLICY_INFO_DB)] */
-	struct lsa_AuditFullSetInfo auditfullset;/* [case(LSA_POLICY_INFO_AUDIT_FULL_SET)] */
-	struct lsa_AuditFullQueryInfo auditfullquery;/* [case(LSA_POLICY_INFO_AUDIT_FULL_QUERY)] */
-	struct lsa_DnsDomainInfo dns;/* [case(LSA_POLICY_INFO_DNS)] */
-}/* [switch_type(uint16)] */;
-
-struct lsa_SidPtr {
-	struct dom_sid2 *sid;/* [unique] */
-};
-
-struct lsa_SidArray {
-	uint32_t num_sids;/* [range(0,1000)] */
-	struct lsa_SidPtr *sids;/* [unique,size_is(num_sids)] */
-}/* [public] */;
-
-struct lsa_DomainList {
-	uint32_t count;
-	struct lsa_DomainInfo *domains;/* [unique,size_is(count)] */
-};
-
-enum lsa_SidType
-#ifndef USE_UINT_ENUMS
- {
-	SID_NAME_USE_NONE=0,
-	SID_NAME_USER=1,
-	SID_NAME_DOM_GRP=2,
-	SID_NAME_DOMAIN=3,
-	SID_NAME_ALIAS=4,
-	SID_NAME_WKN_GRP=5,
-	SID_NAME_DELETED=6,
-	SID_NAME_INVALID=7,
-	SID_NAME_UNKNOWN=8,
-	SID_NAME_COMPUTER=9
-}
-#else
- { __donnot_use_enum_lsa_SidType=0x7FFFFFFF}
-#define SID_NAME_USE_NONE ( 0 )
-#define SID_NAME_USER ( 1 )
-#define SID_NAME_DOM_GRP ( 2 )
-#define SID_NAME_DOMAIN ( 3 )
-#define SID_NAME_ALIAS ( 4 )
-#define SID_NAME_WKN_GRP ( 5 )
-#define SID_NAME_DELETED ( 6 )
-#define SID_NAME_INVALID ( 7 )
-#define SID_NAME_UNKNOWN ( 8 )
-#define SID_NAME_COMPUTER ( 9 )
-#endif
-;
-
-struct lsa_TranslatedSid {
-	enum lsa_SidType sid_type;
-	uint32_t rid;
-	uint32_t sid_index;
-};
-
-struct lsa_TransSidArray {
-	uint32_t count;/* [range(0,1000)] */
-	struct lsa_TranslatedSid *sids;/* [unique,size_is(count)] */
-};
-
-struct lsa_RefDomainList {
-	uint32_t count;/* [range(0,1000)] */
-	struct lsa_DomainInfo *domains;/* [unique,size_is(count)] */
-	uint32_t max_size;
-};
-
-enum lsa_LookupNamesLevel
-#ifndef USE_UINT_ENUMS
- {
-	LSA_LOOKUP_NAMES_ALL=1,
-	LSA_LOOKUP_NAMES_DOMAINS_ONLY=2,
-	LSA_LOOKUP_NAMES_PRIMARY_DOMAIN_ONLY=3,
-	LSA_LOOKUP_NAMES_UPLEVEL_TRUSTS_ONLY=4,
-	LSA_LOOKUP_NAMES_FOREST_TRUSTS_ONLY=5,
-	LSA_LOOKUP_NAMES_UPLEVEL_TRUSTS_ONLY2=6
-}
-#else
- { __donnot_use_enum_lsa_LookupNamesLevel=0x7FFFFFFF}
-#define LSA_LOOKUP_NAMES_ALL ( 1 )
-#define LSA_LOOKUP_NAMES_DOMAINS_ONLY ( 2 )
-#define LSA_LOOKUP_NAMES_PRIMARY_DOMAIN_ONLY ( 3 )
-#define LSA_LOOKUP_NAMES_UPLEVEL_TRUSTS_ONLY ( 4 )
-#define LSA_LOOKUP_NAMES_FOREST_TRUSTS_ONLY ( 5 )
-#define LSA_LOOKUP_NAMES_UPLEVEL_TRUSTS_ONLY2 ( 6 )
-#endif
-;
-
-struct lsa_TranslatedName {
-	enum lsa_SidType sid_type;
-	struct lsa_String name;
-	uint32_t sid_index;
-};
-
-struct lsa_TransNameArray {
-	uint32_t count;/* [range(0,1000)] */
-	struct lsa_TranslatedName *names;/* [unique,size_is(count)] */
-};
-
-struct lsa_LUIDAttribute {
-	struct lsa_LUID luid;
-	uint32_t attribute;
-};
-
-struct lsa_PrivilegeSet {
-	uint32_t count;/* [range(0,1000)] */
-	uint32_t unknown;
-	struct lsa_LUIDAttribute *set;/* [size_is(count)] */
-};
-
-struct lsa_DATA_BUF {
-	uint32_t length;
-	uint32_t size;
-	uint8_t *data;/* [unique,length_is(length),size_is(size)] */
-}/* [flag(LIBNDR_PRINT_ARRAY_HEX)] */;
-
-struct lsa_DATA_BUF2 {
-	uint32_t size;/* [range(0,65536)] */
-	uint8_t *data;/* [unique,size_is(size)] */
-}/* [flag(LIBNDR_PRINT_ARRAY_HEX)] */;
-
-enum lsa_TrustDomInfoEnum
-#ifndef USE_UINT_ENUMS
- {
-	LSA_TRUSTED_DOMAIN_INFO_NAME=1,
-	LSA_TRUSTED_DOMAIN_INFO_CONTROLLERS_INFO=2,
-	LSA_TRUSTED_DOMAIN_INFO_POSIX_OFFSET=3,
-	LSA_TRUSTED_DOMAIN_INFO_PASSWORD=4,
-	LSA_TRUSTED_DOMAIN_INFO_BASIC=5,
-	LSA_TRUSTED_DOMAIN_INFO_INFO_EX=6,
-	LSA_TRUSTED_DOMAIN_INFO_AUTH_INFO=7,
-	LSA_TRUSTED_DOMAIN_INFO_FULL_INFO=8,
-	LSA_TRUSTED_DOMAIN_INFO_11=11,
-	LSA_TRUSTED_DOMAIN_INFO_INFO_ALL=12
-}
-#else
- { __donnot_use_enum_lsa_TrustDomInfoEnum=0x7FFFFFFF}
-#define LSA_TRUSTED_DOMAIN_INFO_NAME ( 1 )
-#define LSA_TRUSTED_DOMAIN_INFO_CONTROLLERS_INFO ( 2 )
-#define LSA_TRUSTED_DOMAIN_INFO_POSIX_OFFSET ( 3 )
-#define LSA_TRUSTED_DOMAIN_INFO_PASSWORD ( 4 )
-#define LSA_TRUSTED_DOMAIN_INFO_BASIC ( 5 )
-#define LSA_TRUSTED_DOMAIN_INFO_INFO_EX ( 6 )
-#define LSA_TRUSTED_DOMAIN_INFO_AUTH_INFO ( 7 )
-#define LSA_TRUSTED_DOMAIN_INFO_FULL_INFO ( 8 )
-#define LSA_TRUSTED_DOMAIN_INFO_11 ( 11 )
-#define LSA_TRUSTED_DOMAIN_INFO_INFO_ALL ( 12 )
-#endif
-;
-
-struct lsa_TrustDomainInfoName {
-	struct lsa_StringLarge netbios_name;
-};
-
-struct lsa_TrustDomainInfoPosixOffset {
-	uint32_t posix_offset;
-};
-
-struct lsa_TrustDomainInfoPassword {
-	struct lsa_DATA_BUF *password;/* [unique] */
-	struct lsa_DATA_BUF *old_password;/* [unique] */
-};
-
-struct lsa_TrustDomainInfoBasic {
-	struct lsa_String netbios_name;
-	struct dom_sid2 *sid;/* [unique] */
-};
-
-struct lsa_TrustDomainInfoInfoEx {
-	struct lsa_StringLarge domain_name;
-	struct lsa_StringLarge netbios_name;
-	struct dom_sid2 *sid;/* [unique] */
-	uint32_t trust_direction;
-	uint32_t trust_type;
-	uint32_t trust_attributes;
-};
-
-struct lsa_TrustDomainInfoBuffer {
-	NTTIME last_update_time;
-	uint32_t secret_type;
-	struct lsa_DATA_BUF2 data;
-};
-
-struct lsa_TrustDomainInfoAuthInfo {
-	uint32_t incoming_count;
-	struct lsa_TrustDomainInfoBuffer *incoming_current_auth_info;/* [unique] */
-	struct lsa_TrustDomainInfoBuffer *incoming_previous_auth_info;/* [unique] */
-	uint32_t outgoing_count;
-	struct lsa_TrustDomainInfoBuffer *outgoing_current_auth_info;/* [unique] */
-	struct lsa_TrustDomainInfoBuffer *outgoing_previous_auth_info;/* [unique] */
-};
-
-struct lsa_TrustDomainInfoFullInfo {
-	struct lsa_TrustDomainInfoInfoEx info_ex;
-	struct lsa_TrustDomainInfoPosixOffset posix_offset;
-	struct lsa_TrustDomainInfoAuthInfo auth_info;
-};
-
-struct lsa_TrustDomainInfo11 {
-	struct lsa_TrustDomainInfoInfoEx info_ex;
-	struct lsa_DATA_BUF2 data1;
-};
-
-struct lsa_TrustDomainInfoInfoAll {
-	struct lsa_TrustDomainInfoInfoEx info_ex;
-	struct lsa_DATA_BUF2 data1;
-	struct lsa_TrustDomainInfoPosixOffset posix_offset;
-	struct lsa_TrustDomainInfoAuthInfo auth_info;
-};
-
-union lsa_TrustedDomainInfo {
-	struct lsa_TrustDomainInfoName name;/* [case(LSA_TRUSTED_DOMAIN_INFO_NAME)] */
-	struct lsa_TrustDomainInfoPosixOffset posix_offset;/* [case(LSA_TRUSTED_DOMAIN_INFO_POSIX_OFFSET)] */
-	struct lsa_TrustDomainInfoPassword password;/* [case(LSA_TRUSTED_DOMAIN_INFO_PASSWORD)] */
-	struct lsa_TrustDomainInfoBasic info_basic;/* [case(LSA_TRUSTED_DOMAIN_INFO_BASIC)] */
-	struct lsa_TrustDomainInfoInfoEx info_ex;/* [case(LSA_TRUSTED_DOMAIN_INFO_INFO_EX)] */
-	struct lsa_TrustDomainInfoAuthInfo auth_info;/* [case(LSA_TRUSTED_DOMAIN_INFO_AUTH_INFO)] */
-	struct lsa_TrustDomainInfoFullInfo full_info;/* [case(LSA_TRUSTED_DOMAIN_INFO_FULL_INFO)] */
-	struct lsa_TrustDomainInfo11 info11;/* [case(LSA_TRUSTED_DOMAIN_INFO_11)] */
-	struct lsa_TrustDomainInfoInfoAll info_all;/* [case(LSA_TRUSTED_DOMAIN_INFO_INFO_ALL)] */
-}/* [switch_type(lsa_TrustDomInfoEnum)] */;
-
-struct lsa_DATA_BUF_PTR {
-	struct lsa_DATA_BUF *buf;/* [unique] */
-};
-
-struct lsa_RightAttribute {
-	const char *name;/* [unique,charset(UTF16)] */
-};
-
-struct lsa_RightSet {
-	uint32_t count;/* [range(0,256)] */
-	struct lsa_StringLarge *names;/* [unique,size_is(count)] */
-};
-
-struct lsa_DomainListEx {
-	uint32_t count;
-	struct lsa_TrustDomainInfoInfoEx *domains;/* [unique,size_is(count)] */
-};
-
-struct lsa_DomainInfoKerberos {
-	uint32_t enforce_restrictions;
-	uint64_t service_tkt_lifetime;
-	uint64_t user_tkt_lifetime;
-	uint64_t user_tkt_renewaltime;
-	uint64_t clock_skew;
-	uint64_t unknown6;
-};
-
-struct lsa_DomainInfoEfs {
-	uint32_t blob_size;
-	uint8_t *efs_blob;/* [unique,size_is(blob_size)] */
-};
-
-enum lsa_DomainInfoEnum
-#ifndef USE_UINT_ENUMS
- {
-	LSA_DOMAIN_INFO_POLICY_EFS=2,
-	LSA_DOMAIN_INFO_POLICY_KERBEROS=3
-}
-#else
- { __donnot_use_enum_lsa_DomainInfoEnum=0x7FFFFFFF}
-#define LSA_DOMAIN_INFO_POLICY_EFS ( 2 )
-#define LSA_DOMAIN_INFO_POLICY_KERBEROS ( 3 )
-#endif
-;
-
-union lsa_DomainInformationPolicy {
-	struct lsa_DomainInfoEfs efs_info;/* [case(LSA_DOMAIN_INFO_POLICY_EFS)] */
-	struct lsa_DomainInfoKerberos kerberos_info;/* [case(LSA_DOMAIN_INFO_POLICY_KERBEROS)] */
-}/* [switch_type(uint16)] */;
-
-struct lsa_TranslatedName2 {
-	enum lsa_SidType sid_type;
-	struct lsa_String name;
-	uint32_t sid_index;
-	uint32_t unknown;
-};
-
-struct lsa_TransNameArray2 {
-	uint32_t count;/* [range(0,1000)] */
-	struct lsa_TranslatedName2 *names;/* [unique,size_is(count)] */
-};
-
-struct lsa_TranslatedSid2 {
-	enum lsa_SidType sid_type;
-	uint32_t rid;
-	uint32_t sid_index;
-	uint32_t unknown;
-};
-
-struct lsa_TransSidArray2 {
-	uint32_t count;/* [range(0,1000)] */
-	struct lsa_TranslatedSid2 *sids;/* [unique,size_is(count)] */
-};
-
-struct lsa_TranslatedSid3 {
-	enum lsa_SidType sid_type;
-	struct dom_sid2 *sid;/* [unique] */
-	uint32_t sid_index;
-	uint32_t unknown;
-};
-
-struct lsa_TransSidArray3 {
-	uint32_t count;/* [range(0,1000)] */
-	struct lsa_TranslatedSid3 *sids;/* [unique,size_is(count)] */
-};
-
-struct lsa_ForestTrustBinaryData {
-	uint32_t length;/* [range(0,131072)] */
-	uint8_t *data;/* [unique,size_is(length)] */
-};
-
-struct lsa_ForestTrustDomainInfo {
-	struct dom_sid2 *domain_sid;/* [unique] */
-	struct lsa_StringLarge dns_domain_name;
-	struct lsa_StringLarge netbios_domain_name;
-};
-
-union lsa_ForestTrustData {
-	struct lsa_String top_level_name;/* [case(LSA_FOREST_TRUST_TOP_LEVEL_NAME)] */
-	struct lsa_StringLarge top_level_name_ex;/* [case(LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX)] */
-	struct lsa_ForestTrustDomainInfo domain_info;/* [case(LSA_FOREST_TRUST_DOMAIN_INFO)] */
-	struct lsa_ForestTrustBinaryData data;/* [default] */
-}/* [switch_type(uint32)] */;
-
-enum lsa_ForestTrustRecordType
-#ifndef USE_UINT_ENUMS
- {
-	LSA_FOREST_TRUST_TOP_LEVEL_NAME=0,
-	LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX=1,
-	LSA_FOREST_TRUST_DOMAIN_INFO=2,
-	LSA_FOREST_TRUST_RECORD_TYPE_LAST=3
-}
-#else
- { __donnot_use_enum_lsa_ForestTrustRecordType=0x7FFFFFFF}
-#define LSA_FOREST_TRUST_TOP_LEVEL_NAME ( 0 )
-#define LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX ( 1 )
-#define LSA_FOREST_TRUST_DOMAIN_INFO ( 2 )
-#define LSA_FOREST_TRUST_RECORD_TYPE_LAST ( 3 )
-#endif
-;
-
-struct lsa_ForestTrustRecord {
-	uint32_t flags;
-	enum lsa_ForestTrustRecordType level;
-	uint64_t unknown;
-	union lsa_ForestTrustData forest_trust_data;/* [switch_is(level)] */
-};
-
-struct lsa_ForestTrustInformation {
-	uint32_t count;/* [range(0,4000)] */
-	struct lsa_ForestTrustRecord **entries;/* [unique,size_is(count)] */
-}/* [public] */;
-
-
-struct lsa_Close {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-	} in;
-
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_Delete {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_EnumPrivs {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		uint32_t max_count;
-		uint32_t *resume_handle;/* [ref] */
-	} in;
-
-	struct {
-		struct lsa_PrivArray *privs;/* [ref] */
-		uint32_t *resume_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_QuerySecurity {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		uint32_t sec_info;
-	} in;
-
-	struct {
-		struct sec_desc_buf **sdbuf;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_SetSecObj {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		uint32_t sec_info;
-		struct sec_desc_buf *sdbuf;/* [ref] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_ChangePassword {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_OpenPolicy {
-	struct {
-		uint16_t *system_name;/* [unique] */
-		struct lsa_ObjectAttribute *attr;/* [ref] */
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_QueryInfoPolicy {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		enum lsa_PolicyInfo level;
-	} in;
-
-	struct {
-		union lsa_PolicyInformation **info;/* [ref,switch_is(level)] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_SetInfoPolicy {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		enum lsa_PolicyInfo level;
-		union lsa_PolicyInformation *info;/* [ref,switch_is(level)] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_ClearAuditLog {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_CreateAccount {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct dom_sid2 *sid;/* [ref] */
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *acct_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_EnumAccounts {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		uint32_t num_entries;/* [range(0,8192)] */
-		uint32_t *resume_handle;/* [ref] */
-	} in;
-
-	struct {
-		struct lsa_SidArray *sids;/* [ref] */
-		uint32_t *resume_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_CreateTrustedDomain {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct lsa_DomainInfo *info;/* [ref] */
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *trustdom_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_EnumTrustDom {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		uint32_t max_size;
-		uint32_t *resume_handle;/* [ref] */
-	} in;
-
-	struct {
-		struct lsa_DomainList *domains;/* [ref] */
-		uint32_t *resume_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_LookupNames {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		uint32_t num_names;/* [range(0,1000)] */
-		struct lsa_String *names;/* [size_is(num_names)] */
-		enum lsa_LookupNamesLevel level;
-		struct lsa_TransSidArray *sids;/* [ref] */
-		uint32_t *count;/* [ref] */
-	} in;
-
-	struct {
-		struct lsa_RefDomainList **domains;/* [ref] */
-		struct lsa_TransSidArray *sids;/* [ref] */
-		uint32_t *count;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_LookupSids {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct lsa_SidArray *sids;/* [ref] */
-		uint16_t level;
-		struct lsa_TransNameArray *names;/* [ref] */
-		uint32_t *count;/* [ref] */
-	} in;
-
-	struct {
-		struct lsa_RefDomainList **domains;/* [ref] */
-		struct lsa_TransNameArray *names;/* [ref] */
-		uint32_t *count;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_CreateSecret {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct lsa_String name;
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *sec_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_OpenAccount {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct dom_sid2 *sid;/* [ref] */
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *acct_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_EnumPrivsAccount {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-	} in;
-
-	struct {
-		struct lsa_PrivilegeSet **privs;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_AddPrivilegesToAccount {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct lsa_PrivilegeSet *privs;/* [ref] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_RemovePrivilegesFromAccount {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		uint8_t remove_all;
-		struct lsa_PrivilegeSet *privs;/* [unique] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_GetQuotasForAccount {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_SetQuotasForAccount {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_GetSystemAccessAccount {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-	} in;
-
-	struct {
-		uint32_t *access_mask;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_SetSystemAccessAccount {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_OpenTrustedDomain {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct dom_sid2 *sid;/* [ref] */
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *trustdom_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_QueryTrustedDomainInfo {
-	struct {
-		struct policy_handle *trustdom_handle;/* [ref] */
-		enum lsa_TrustDomInfoEnum level;
-	} in;
-
-	struct {
-		union lsa_TrustedDomainInfo **info;/* [ref,switch_is(level)] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_SetInformationTrustedDomain {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_OpenSecret {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct lsa_String name;
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *sec_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_SetSecret {
-	struct {
-		struct policy_handle *sec_handle;/* [ref] */
-		struct lsa_DATA_BUF *new_val;/* [unique] */
-		struct lsa_DATA_BUF *old_val;/* [unique] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_QuerySecret {
-	struct {
-		struct policy_handle *sec_handle;/* [ref] */
-		struct lsa_DATA_BUF_PTR *new_val;/* [unique] */
-		NTTIME *new_mtime;/* [unique] */
-		struct lsa_DATA_BUF_PTR *old_val;/* [unique] */
-		NTTIME *old_mtime;/* [unique] */
-	} in;
-
-	struct {
-		struct lsa_DATA_BUF_PTR *new_val;/* [unique] */
-		NTTIME *new_mtime;/* [unique] */
-		struct lsa_DATA_BUF_PTR *old_val;/* [unique] */
-		NTTIME *old_mtime;/* [unique] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_LookupPrivValue {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct lsa_String *name;/* [ref] */
-	} in;
-
-	struct {
-		struct lsa_LUID *luid;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_LookupPrivName {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct lsa_LUID *luid;/* [ref] */
-	} in;
-
-	struct {
-		struct lsa_StringLarge **name;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_LookupPrivDisplayName {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct lsa_String *name;/* [ref] */
-		uint16_t language_id;
-		uint16_t language_id_sys;
-	} in;
-
-	struct {
-		struct lsa_StringLarge **disp_name;/* [ref] */
-		uint16_t *returned_language_id;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_DeleteObject {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-	} in;
-
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_EnumAccountsWithUserRight {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct lsa_String *name;/* [unique] */
-	} in;
-
-	struct {
-		struct lsa_SidArray *sids;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_EnumAccountRights {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct dom_sid2 *sid;/* [ref] */
-	} in;
-
-	struct {
-		struct lsa_RightSet *rights;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_AddAccountRights {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct dom_sid2 *sid;/* [ref] */
-		struct lsa_RightSet *rights;/* [ref] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_RemoveAccountRights {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct dom_sid2 *sid;/* [ref] */
-		uint8_t remove_all;
-		struct lsa_RightSet *rights;/* [ref] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_QueryTrustedDomainInfoBySid {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct dom_sid2 *dom_sid;/* [ref] */
-		enum lsa_TrustDomInfoEnum level;
-	} in;
-
-	struct {
-		union lsa_TrustedDomainInfo **info;/* [ref,switch_is(level)] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_SetTrustedDomainInfo {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_DeleteTrustedDomain {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct dom_sid2 *dom_sid;/* [ref] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_StorePrivateData {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_RetrievePrivateData {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_OpenPolicy2 {
-	struct {
-		const char *system_name;/* [unique,charset(UTF16)] */
-		struct lsa_ObjectAttribute *attr;/* [ref] */
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_GetUserName {
-	struct {
-		const char *system_name;/* [unique,charset(UTF16)] */
-		struct lsa_String **account_name;/* [ref] */
-		struct lsa_String **authority_name;/* [unique] */
-	} in;
-
-	struct {
-		struct lsa_String **account_name;/* [ref] */
-		struct lsa_String **authority_name;/* [unique] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_QueryInfoPolicy2 {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		enum lsa_PolicyInfo level;
-	} in;
-
-	struct {
-		union lsa_PolicyInformation **info;/* [ref,switch_is(level)] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_SetInfoPolicy2 {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		enum lsa_PolicyInfo level;
-		union lsa_PolicyInformation *info;/* [ref,switch_is(level)] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_QueryTrustedDomainInfoByName {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct lsa_String *trusted_domain;/* [ref] */
-		enum lsa_TrustDomInfoEnum level;
-	} in;
-
-	struct {
-		union lsa_TrustedDomainInfo **info;/* [ref,switch_is(level)] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_SetTrustedDomainInfoByName {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct lsa_String trusted_domain;
-		enum lsa_TrustDomInfoEnum level;
-		union lsa_TrustedDomainInfo *info;/* [unique,switch_is(level)] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_EnumTrustedDomainsEx {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		uint32_t max_size;
-		uint32_t *resume_handle;/* [ref] */
-	} in;
-
-	struct {
-		struct lsa_DomainListEx *domains;/* [ref] */
-		uint32_t *resume_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_CreateTrustedDomainEx {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_CloseTrustedDomainEx {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-	} in;
-
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_QueryDomainInformationPolicy {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		uint16_t level;
-	} in;
-
-	struct {
-		union lsa_DomainInformationPolicy **info;/* [ref,switch_is(level)] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_SetDomainInformationPolicy {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		uint16_t level;
-		union lsa_DomainInformationPolicy *info;/* [unique,switch_is(level)] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_OpenTrustedDomainByName {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct lsa_String name;
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *trustdom_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_TestCall {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_LookupSids2 {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct lsa_SidArray *sids;/* [ref] */
-		uint16_t level;
-		uint32_t unknown1;
-		uint32_t unknown2;
-		struct lsa_TransNameArray2 *names;/* [ref] */
-		uint32_t *count;/* [ref] */
-	} in;
-
-	struct {
-		struct lsa_RefDomainList **domains;/* [ref] */
-		struct lsa_TransNameArray2 *names;/* [ref] */
-		uint32_t *count;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_LookupNames2 {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		uint32_t num_names;/* [range(0,1000)] */
-		struct lsa_String *names;/* [size_is(num_names)] */
-		enum lsa_LookupNamesLevel level;
-		uint32_t unknown1;
-		uint32_t unknown2;
-		struct lsa_TransSidArray2 *sids;/* [ref] */
-		uint32_t *count;/* [ref] */
-	} in;
-
-	struct {
-		struct lsa_RefDomainList **domains;/* [ref] */
-		struct lsa_TransSidArray2 *sids;/* [ref] */
-		uint32_t *count;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_CreateTrustedDomainEx2 {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_CREDRWRITE {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_CREDRREAD {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_CREDRENUMERATE {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_CREDRWRITEDOMAINCREDENTIALS {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_CREDRREADDOMAINCREDENTIALS {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_CREDRDELETE {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_CREDRGETTARGETINFO {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_CREDRPROFILELOADED {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_LookupNames3 {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		uint32_t num_names;/* [range(0,1000)] */
-		struct lsa_String *names;/* [size_is(num_names)] */
-		enum lsa_LookupNamesLevel level;
-		uint32_t unknown1;
-		uint32_t unknown2;
-		struct lsa_TransSidArray3 *sids;/* [ref] */
-		uint32_t *count;/* [ref] */
-	} in;
-
-	struct {
-		struct lsa_RefDomainList **domains;/* [ref] */
-		struct lsa_TransSidArray3 *sids;/* [ref] */
-		uint32_t *count;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_CREDRGETSESSIONTYPES {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_LSARREGISTERAUDITEVENT {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_LSARGENAUDITEVENT {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_LSARUNREGISTERAUDITEVENT {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_lsaRQueryForestTrustInformation {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct lsa_String *trusted_domain_name;/* [ref] */
-		uint16_t unknown;
-	} in;
-
-	struct {
-		struct lsa_ForestTrustInformation **forest_trust_info;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_LSARSETFORESTTRUSTINFORMATION {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_CREDRRENAME {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_LookupSids3 {
-	struct {
-		struct lsa_SidArray *sids;/* [ref] */
-		uint16_t level;
-		uint32_t unknown1;
-		uint32_t unknown2;
-		struct lsa_TransNameArray2 *names;/* [ref] */
-		uint32_t *count;/* [ref] */
-	} in;
-
-	struct {
-		struct lsa_RefDomainList **domains;/* [ref] */
-		struct lsa_TransNameArray2 *names;/* [ref] */
-		uint32_t *count;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_LookupNames4 {
-	struct {
-		uint32_t num_names;/* [range(0,1000)] */
-		struct lsa_String *names;/* [size_is(num_names)] */
-		enum lsa_LookupNamesLevel level;
-		uint32_t unknown1;
-		uint32_t unknown2;
-		struct lsa_TransSidArray3 *sids;/* [ref] */
-		uint32_t *count;/* [ref] */
-	} in;
-
-	struct {
-		struct lsa_RefDomainList **domains;/* [ref] */
-		struct lsa_TransSidArray3 *sids;/* [ref] */
-		uint32_t *count;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_LSAROPENPOLICYSCE {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_LSARADTREGISTERSECURITYEVENTSOURCE {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct lsa_LSARADTREPORTSECURITYEVENT {
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-#endif /* _HEADER_lsarpc */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/messaging.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/messaging.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/messaging.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,32 +0,0 @@
-/* header auto-generated by pidl */
-
-#include <stdint.h>
-
-#ifndef _HEADER_messaging
-#define _HEADER_messaging
-
-struct messaging_rec {
-	uint32_t msg_version;
-	uint32_t msg_type;
-	struct server_id dest;
-	struct server_id src;
-	DATA_BLOB buf;
-}/* [public] */;
-
-struct messaging_array {
-	uint32_t num_messages;
-	struct messaging_rec *messages;
-}/* [public] */;
-
-struct dbwrap_tdb2_changes {
-	const char *magic_string;/* [value("TDB2"),charset(DOS)] */
-	uint32_t magic_version;/* [value] */
-	const char *name;/* [charset(UTF8)] */
-	uint32_t old_seqnum;
-	uint32_t new_seqnum;
-	uint32_t num_changes;
-	uint32_t num_keys;
-	DATA_BLOB *keys;
-}/* [public] */;
-
-#endif /* _HEADER_messaging */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/misc.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/misc.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/misc.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,73 +0,0 @@
-/* header auto-generated by pidl */
-
-#include <stdint.h>
-
-#ifndef _HEADER_misc
-#define _HEADER_misc
-
-struct GUID {
-	uint32_t time_low;
-	uint16_t time_mid;
-	uint16_t time_hi_and_version;
-	uint8_t clock_seq[2];
-	uint8_t node[6];
-}/* [noprint,gensize,public,noejs] */;
-
-struct ndr_syntax_id {
-	struct GUID uuid;
-	uint32_t if_version;
-}/* [public] */;
-
-struct policy_handle {
-	uint32_t handle_type;
-	struct GUID uuid;
-}/* [public] */;
-
-enum netr_SchannelType
-#ifndef USE_UINT_ENUMS
- {
-	SEC_CHAN_WKSTA=2,
-	SEC_CHAN_DOMAIN=4,
-	SEC_CHAN_BDC=6
-}
-#else
- { __donnot_use_enum_netr_SchannelType=0x7FFFFFFF}
-#define SEC_CHAN_WKSTA ( 2 )
-#define SEC_CHAN_DOMAIN ( 4 )
-#define SEC_CHAN_BDC ( 6 )
-#endif
-;
-
-enum netr_SamDatabaseID
-#ifndef USE_UINT_ENUMS
- {
-	SAM_DATABASE_DOMAIN=0,
-	SAM_DATABASE_BUILTIN=1,
-	SAM_DATABASE_PRIVS=2
-}
-#else
- { __donnot_use_enum_netr_SamDatabaseID=0x7FFFFFFF}
-#define SAM_DATABASE_DOMAIN ( 0 )
-#define SAM_DATABASE_BUILTIN ( 1 )
-#define SAM_DATABASE_PRIVS ( 2 )
-#endif
-;
-
-enum samr_RejectReason
-#ifndef USE_UINT_ENUMS
- {
-	SAMR_REJECT_OTHER=0,
-	SAMR_REJECT_TOO_SHORT=1,
-	SAMR_REJECT_IN_HISTORY=2,
-	SAMR_REJECT_COMPLEXITY=5
-}
-#else
- { __donnot_use_enum_samr_RejectReason=0x7FFFFFFF}
-#define SAMR_REJECT_OTHER ( 0 )
-#define SAMR_REJECT_TOO_SHORT ( 1 )
-#define SAMR_REJECT_IN_HISTORY ( 2 )
-#define SAMR_REJECT_COMPLEXITY ( 5 )
-#endif
-;
-
-#endif /* _HEADER_misc */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/nbt.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/nbt.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/nbt.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,820 +0,0 @@
-/* header auto-generated by pidl */
-
-#include <stdint.h>
-
-#include "librpc/gen_ndr/misc.h"
-#include "librpc/gen_ndr/security.h"
-#include "librpc/gen_ndr/svcctl.h"
-#include "librpc/gen_ndr/samr.h"
-#ifndef _HEADER_nbt
-#define _HEADER_nbt
-
-#define NBT_NAME_SERVICE_PORT	( 137 )
-#define NBT_DGRAM_SERVICE_PORT	( 138 )
-#define NBT_MAILSLOT_NETLOGON	( "\\MAILSLOT\\NET\\NETLOGON" )
-#define NBT_MAILSLOT_NTLOGON	( "\\MAILSLOT\\NET\\NTLOGON" )
-#define NBT_MAILSLOT_GETDC	( "\\MAILSLOT\\NET\\GETDC" )
-#define NBT_MAILSLOT_BROWSE	( "\\MAILSLOT\\BROWSE" )
-#define DGRAM_SMB	( 0xff534d42 )
-/* bitmap nbt_operation */
-#define NBT_RCODE ( 0x000F )
-#define NBT_FLAG_BROADCAST ( 0x0010 )
-#define NBT_FLAG_RECURSION_AVAIL ( 0x0080 )
-#define NBT_FLAG_RECURSION_DESIRED ( 0x0100 )
-#define NBT_FLAG_TRUNCATION ( 0x0200 )
-#define NBT_FLAG_AUTHORITIVE ( 0x0400 )
-#define NBT_OPCODE ( 0x7800 )
-#define NBT_FLAG_REPLY ( 0x8000 )
-
-enum nbt_opcode
-#ifndef USE_UINT_ENUMS
- {
-	NBT_OPCODE_QUERY=(0x0<<11),
-	NBT_OPCODE_REGISTER=(0x5<<11),
-	NBT_OPCODE_RELEASE=(0x6<<11),
-	NBT_OPCODE_WACK=(0x7<<11),
-	NBT_OPCODE_REFRESH=(0x8<<11),
-	NBT_OPCODE_REFRESH2=(0x9<<11),
-	NBT_OPCODE_MULTI_HOME_REG=(0xf<<11)
-}
-#else
- { __donnot_use_enum_nbt_opcode=0x7FFFFFFF}
-#define NBT_OPCODE_QUERY ( (0x0<<11) )
-#define NBT_OPCODE_REGISTER ( (0x5<<11) )
-#define NBT_OPCODE_RELEASE ( (0x6<<11) )
-#define NBT_OPCODE_WACK ( (0x7<<11) )
-#define NBT_OPCODE_REFRESH ( (0x8<<11) )
-#define NBT_OPCODE_REFRESH2 ( (0x9<<11) )
-#define NBT_OPCODE_MULTI_HOME_REG ( (0xf<<11) )
-#endif
-;
-
-enum nbt_rcode
-#ifndef USE_UINT_ENUMS
- {
-	NBT_RCODE_OK=0x0,
-	NBT_RCODE_FMT=0x1,
-	NBT_RCODE_SVR=0x2,
-	NBT_RCODE_NAM=0x3,
-	NBT_RCODE_IMP=0x4,
-	NBT_RCODE_RFS=0x5,
-	NBT_RCODE_ACT=0x6,
-	NBT_RCODE_CFT=0x7
-}
-#else
- { __donnot_use_enum_nbt_rcode=0x7FFFFFFF}
-#define NBT_RCODE_OK ( 0x0 )
-#define NBT_RCODE_FMT ( 0x1 )
-#define NBT_RCODE_SVR ( 0x2 )
-#define NBT_RCODE_NAM ( 0x3 )
-#define NBT_RCODE_IMP ( 0x4 )
-#define NBT_RCODE_RFS ( 0x5 )
-#define NBT_RCODE_ACT ( 0x6 )
-#define NBT_RCODE_CFT ( 0x7 )
-#endif
-;
-
-enum nbt_name_type
-#ifndef USE_UINT_ENUMS
- {
-	NBT_NAME_CLIENT=0x00,
-	NBT_NAME_MS=0x01,
-	NBT_NAME_USER=0x03,
-	NBT_NAME_SERVER=0x20,
-	NBT_NAME_PDC=0x1B,
-	NBT_NAME_LOGON=0x1C,
-	NBT_NAME_MASTER=0x1D,
-	NBT_NAME_BROWSER=0x1E
-}
-#else
- { __donnot_use_enum_nbt_name_type=0x7FFFFFFF}
-#define NBT_NAME_CLIENT ( 0x00 )
-#define NBT_NAME_MS ( 0x01 )
-#define NBT_NAME_USER ( 0x03 )
-#define NBT_NAME_SERVER ( 0x20 )
-#define NBT_NAME_PDC ( 0x1B )
-#define NBT_NAME_LOGON ( 0x1C )
-#define NBT_NAME_MASTER ( 0x1D )
-#define NBT_NAME_BROWSER ( 0x1E )
-#endif
-;
-
-struct nbt_name {
-	const char * name;
-	const char * scope;
-	enum nbt_name_type type;
-}/* [nopull,public,nopush] */;
-
-enum nbt_qclass
-#ifndef USE_UINT_ENUMS
- {
-	NBT_QCLASS_IP=0x01
-}
-#else
- { __donnot_use_enum_nbt_qclass=0x7FFFFFFF}
-#define NBT_QCLASS_IP ( 0x01 )
-#endif
-;
-
-enum nbt_qtype
-#ifndef USE_UINT_ENUMS
- {
-	NBT_QTYPE_ADDRESS=0x0001,
-	NBT_QTYPE_NAMESERVICE=0x0002,
-	NBT_QTYPE_NULL=0x000A,
-	NBT_QTYPE_NETBIOS=0x0020,
-	NBT_QTYPE_STATUS=0x0021
-}
-#else
- { __donnot_use_enum_nbt_qtype=0x7FFFFFFF}
-#define NBT_QTYPE_ADDRESS ( 0x0001 )
-#define NBT_QTYPE_NAMESERVICE ( 0x0002 )
-#define NBT_QTYPE_NULL ( 0x000A )
-#define NBT_QTYPE_NETBIOS ( 0x0020 )
-#define NBT_QTYPE_STATUS ( 0x0021 )
-#endif
-;
-
-struct nbt_name_question {
-	struct nbt_name name;
-	enum nbt_qtype question_type;
-	enum nbt_qclass question_class;
-};
-
-enum nbt_node_type
-#ifndef USE_UINT_ENUMS
- {
-	NBT_NODE_B=0x0000,
-	NBT_NODE_P=0x2000,
-	NBT_NODE_M=0x4000,
-	NBT_NODE_H=0x6000
-}
-#else
- { __donnot_use_enum_nbt_node_type=0x7FFFFFFF}
-#define NBT_NODE_B ( 0x0000 )
-#define NBT_NODE_P ( 0x2000 )
-#define NBT_NODE_M ( 0x4000 )
-#define NBT_NODE_H ( 0x6000 )
-#endif
-;
-
-/* bitmap nb_flags */
-#define NBT_NM_PERMANENT ( 0x0200 )
-#define NBT_NM_ACTIVE ( 0x0400 )
-#define NBT_NM_CONFLICT ( 0x0800 )
-#define NBT_NM_DEREGISTER ( 0x1000 )
-#define NBT_NM_OWNER_TYPE ( 0x6000 )
-#define NBT_NM_GROUP ( 0x8000 )
-
-struct nbt_rdata_address {
-	uint16_t nb_flags;
-	const char * ipaddr;
-};
-
-struct nbt_rdata_netbios {
-	uint16_t length;
-	struct nbt_rdata_address *addresses;
-};
-
-struct nbt_statistics {
-	uint8_t unit_id[6];
-	uint8_t jumpers;
-	uint8_t test_result;
-	uint16_t version_number;
-	uint16_t period_of_statistics;
-	uint16_t number_of_crcs;
-	uint16_t number_alignment_errors;
-	uint16_t number_of_collisions;
-	uint16_t number_send_aborts;
-	uint32_t number_good_sends;
-	uint32_t number_good_receives;
-	uint16_t number_retransmits;
-	uint16_t number_no_resource_conditions;
-	uint16_t number_free_command_blocks;
-	uint16_t total_number_command_blocks;
-	uint16_t max_total_number_command_blocks;
-	uint16_t number_pending_sessions;
-	uint16_t max_number_pending_sessions;
-	uint16_t max_total_sessions_possible;
-	uint16_t session_data_packet_size;
-};
-
-struct nbt_status_name {
-	const char *name;/* [charset(DOS)] */
-	enum nbt_name_type type;
-	uint16_t nb_flags;
-};
-
-struct nbt_rdata_status {
-	uint16_t length;/* [value(num_names*18+47)] */
-	uint8_t num_names;
-	struct nbt_status_name *names;
-	struct nbt_statistics statistics;
-};
-
-struct nbt_rdata_data {
-	uint16_t length;
-	uint8_t *data;
-};
-
-union nbt_rdata {
-	struct nbt_rdata_netbios netbios;/* [case(NBT_QTYPE_NETBIOS)] */
-	struct nbt_rdata_status status;/* [case(NBT_QTYPE_STATUS)] */
-	struct nbt_rdata_data data;/* [default] */
-}/* [nodiscriminant] */;
-
-struct nbt_res_rec {
-	struct nbt_name name;
-	enum nbt_qtype rr_type;
-	enum nbt_qclass rr_class;
-	uint32_t ttl;
-	union nbt_rdata rdata;/* [switch_is(((((rr_type)==NBT_QTYPE_NETBIOS)&&talloc_check_name(ndr,"struct ndr_push")&&((rdata).data.length==2))?0:rr_type))] */
-}/* [flag(LIBNDR_PRINT_ARRAY_HEX)] */;
-
-struct nbt_name_packet {
-	uint16_t name_trn_id;
-	uint16_t operation;
-	uint16_t qdcount;
-	uint16_t ancount;
-	uint16_t nscount;
-	uint16_t arcount;
-	struct nbt_name_question *questions;
-	struct nbt_res_rec *answers;
-	struct nbt_res_rec *nsrecs;
-	struct nbt_res_rec *additional;
-	DATA_BLOB padding;/* [flag(LIBNDR_FLAG_REMAINING)] */
-}/* [public,flag(LIBNDR_FLAG_NOALIGN|LIBNDR_FLAG_BIGENDIAN|LIBNDR_PRINT_ARRAY_HEX)] */;
-
-enum dgram_msg_type
-#ifndef USE_UINT_ENUMS
- {
-	DGRAM_DIRECT_UNIQUE=0x10,
-	DGRAM_DIRECT_GROUP=0x11,
-	DGRAM_BCAST=0x12,
-	DGRAM_ERROR=0x13,
-	DGRAM_QUERY=0x14,
-	DGRAM_QUERY_POSITIVE=0x15,
-	DGRAM_QUERY_NEGATIVE=0x16
-}
-#else
- { __donnot_use_enum_dgram_msg_type=0x7FFFFFFF}
-#define DGRAM_DIRECT_UNIQUE ( 0x10 )
-#define DGRAM_DIRECT_GROUP ( 0x11 )
-#define DGRAM_BCAST ( 0x12 )
-#define DGRAM_ERROR ( 0x13 )
-#define DGRAM_QUERY ( 0x14 )
-#define DGRAM_QUERY_POSITIVE ( 0x15 )
-#define DGRAM_QUERY_NEGATIVE ( 0x16 )
-#endif
-;
-
-/* bitmap dgram_flags */
-#define DGRAM_FLAG_MORE ( 0x01 )
-#define DGRAM_FLAG_FIRST ( 0x02 )
-#define DGRAM_FLAG_NODE_TYPE ( 0x0C )
-
-enum dgram_node_type
-#ifndef USE_UINT_ENUMS
- {
-	DGRAM_NODE_B=0x00,
-	DGRAM_NODE_P=0x04,
-	DGRAM_NODE_M=0x08,
-	DGRAM_NODE_NBDD=0x0C
-}
-#else
- { __donnot_use_enum_dgram_node_type=0x7FFFFFFF}
-#define DGRAM_NODE_B ( 0x00 )
-#define DGRAM_NODE_P ( 0x04 )
-#define DGRAM_NODE_M ( 0x08 )
-#define DGRAM_NODE_NBDD ( 0x0C )
-#endif
-;
-
-enum smb_command
-#ifndef USE_UINT_ENUMS
- {
-	SMB_TRANSACTION=0x25
-}
-#else
- { __donnot_use_enum_smb_command=0x7FFFFFFF}
-#define SMB_TRANSACTION ( 0x25 )
-#endif
-;
-
-struct smb_trans_body {
-	uint8_t wct;/* [value(17),range(17,17)] */
-	uint16_t total_param_count;
-	uint16_t total_data_count;
-	uint16_t max_param_count;
-	uint16_t max_data_count;
-	uint8_t max_setup_count;
-	uint8_t pad;
-	uint16_t trans_flags;
-	uint32_t timeout;
-	uint16_t reserved;
-	uint16_t param_count;
-	uint16_t param_offset;
-	uint16_t data_count;
-	uint16_t data_offset;
-	uint8_t setup_count;/* [value(3),range(3,3)] */
-	uint8_t pad2;
-	uint16_t opcode;
-	uint16_t priority;
-	uint16_t _class;
-	uint16_t byte_count;/* [value(strlen(mailslot_name)+1+data.length)] */
-	const char * mailslot_name;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
-	DATA_BLOB data;/* [flag(LIBNDR_FLAG_REMAINING)] */
-};
-
-union smb_body {
-	struct smb_trans_body trans;/* [case(SMB_TRANSACTION)] */
-}/* [nodiscriminant] */;
-
-struct dgram_smb_packet {
-	enum smb_command smb_command;
-	uint8_t err_class;
-	uint8_t pad;
-	uint16_t err_code;
-	uint8_t flags;
-	uint16_t flags2;
-	uint16_t pid_high;
-	uint8_t signature[8];
-	uint16_t reserved;
-	uint16_t tid;
-	uint16_t pid;
-	uint16_t vuid;
-	uint16_t mid;
-	union smb_body body;/* [switch_is(smb_command)] */
-}/* [public,flag(LIBNDR_FLAG_NOALIGN|LIBNDR_FLAG_LITTLE_ENDIAN|LIBNDR_PRINT_ARRAY_HEX)] */;
-
-union dgram_message_body {
-	struct dgram_smb_packet smb;/* [case(DGRAM_SMB)] */
-}/* [nodiscriminant] */;
-
-struct dgram_message {
-	uint16_t length;
-	uint16_t offset;
-	struct nbt_name source_name;
-	struct nbt_name dest_name;
-	uint32_t dgram_body_type;
-	union dgram_message_body body;/* [switch_is(dgram_body_type)] */
-};
-
-enum dgram_err_code
-#ifndef USE_UINT_ENUMS
- {
-	DGRAM_ERROR_NAME_NOT_PRESENT=0x82,
-	DGRAM_ERROR_INVALID_SOURCE=0x83,
-	DGRAM_ERROR_INVALID_DEST=0x84
-}
-#else
- { __donnot_use_enum_dgram_err_code=0x7FFFFFFF}
-#define DGRAM_ERROR_NAME_NOT_PRESENT ( 0x82 )
-#define DGRAM_ERROR_INVALID_SOURCE ( 0x83 )
-#define DGRAM_ERROR_INVALID_DEST ( 0x84 )
-#endif
-;
-
-union dgram_data {
-	struct dgram_message msg;/* [case(DGRAM_DIRECT_UNIQUE)] */
-	enum dgram_err_code error;/* [case(DGRAM_ERROR)] */
-	struct nbt_name dest_name;/* [case(DGRAM_QUERY)] */
-}/* [nodiscriminant] */;
-
-struct nbt_dgram_packet {
-	enum dgram_msg_type msg_type;
-	uint8_t flags;
-	uint16_t dgram_id;
-	const char * src_addr;
-	uint16_t src_port;
-	union dgram_data data;/* [switch_is(msg_type)] */
-}/* [public,flag(LIBNDR_FLAG_NOALIGN|LIBNDR_FLAG_BIGENDIAN|LIBNDR_PRINT_ARRAY_HEX)] */;
-
-enum nbt_netlogon_command
-#ifndef USE_UINT_ENUMS
- {
-	NETLOGON_QUERY_FOR_PDC=0x7,
-	NETLOGON_ANNOUNCE_UAS=0xa,
-	NETLOGON_RESPONSE_FROM_PDC=0xc,
-	NETLOGON_QUERY_FOR_PDC2=0x12,
-	NETLOGON_RESPONSE_FROM_PDC2=0x17,
-	NETLOGON_RESPONSE_FROM_PDC_USER=0x19
-}
-#else
- { __donnot_use_enum_nbt_netlogon_command=0x7FFFFFFF}
-#define NETLOGON_QUERY_FOR_PDC ( 0x7 )
-#define NETLOGON_ANNOUNCE_UAS ( 0xa )
-#define NETLOGON_RESPONSE_FROM_PDC ( 0xc )
-#define NETLOGON_QUERY_FOR_PDC2 ( 0x12 )
-#define NETLOGON_RESPONSE_FROM_PDC2 ( 0x17 )
-#define NETLOGON_RESPONSE_FROM_PDC_USER ( 0x19 )
-#endif
-;
-
-/* bitmap nbt_netlogon_version */
-#define NETLOGON_VERSION_1 ( 0x00000001 )
-#define NETLOGON_VERSION_5 ( 0x00000002 )
-#define NETLOGON_VERSION_5EX ( 0x00000004 )
-#define NETLOGON_VERSION_5EX_WITH_IP ( 0x00000008 )
-#define NETLOGON_VERSION_WITH_CLOSEST_SITE ( 0x00000010 )
-#define NETLOGON_VERSION_AVOID_NT4_EMUL ( 0x01000000 )
-#define NETLOGON_VERSION_PDC ( 0x10000000 )
-#define NETLOGON_VERSION_IP ( 0x20000000 )
-#define NETLOGON_VERSION_LOCAL ( 0x40000000 )
-#define NETLOGON_VERSION_GC ( 0x80000000 )
-
-struct nbt_netlogon_query_for_pdc {
-	const char * computer_name;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
-	const char * mailslot_name;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
-	DATA_BLOB _pad;/* [flag(LIBNDR_FLAG_ALIGN2)] */
-	const char * unicode_name;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */
-	uint32_t nt_version;
-	uint16_t lmnt_token;
-	uint16_t lm20_token;
-};
-
-struct nbt_netlogon_query_for_pdc2 {
-	uint16_t request_count;
-	const char * computer_name;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */
-	const char * user_name;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */
-	const char * mailslot_name;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
-	uint32_t unknown[2];
-	uint32_t nt_version;
-	uint16_t lmnt_token;
-	uint16_t lm20_token;
-};
-
-struct nbt_netlogon_response_from_pdc {
-	const char * pdc_name;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
-	DATA_BLOB _pad;/* [flag(LIBNDR_FLAG_ALIGN2)] */
-	const char * unicode_pdc_name;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */
-	const char * domain_name;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */
-	uint32_t nt_version;
-	uint16_t lmnt_token;
-	uint16_t lm20_token;
-};
-
-/* bitmap nbt_server_type */
-#define NBT_SERVER_PDC ( 0x00000001 )
-#define NBT_SERVER_GC ( 0x00000004 )
-#define NBT_SERVER_LDAP ( 0x00000008 )
-#define NBT_SERVER_DS ( 0x00000010 )
-#define NBT_SERVER_KDC ( 0x00000020 )
-#define NBT_SERVER_TIMESERV ( 0x00000040 )
-#define NBT_SERVER_CLOSEST ( 0x00000080 )
-#define NBT_SERVER_WRITABLE ( 0x00000100 )
-#define NBT_SERVER_GOOD_TIMESERV ( 0x00000200 )
-#define NBT_SERVER_NDNC ( 0x00000400 )
-#define NBT_SERVER_SELECT_SECRET_DOMAIN_6 ( 0x00000800 )
-#define NBT_SERVER_FULL_SECRET_DOMAIN_6 ( 0x00001000 )
-
-struct nbt_dc_sock_addr {
-	uint32_t family;
-	const char * pdc_ip;/* [flag(LIBNDR_FLAG_BIGENDIAN)] */
-	DATA_BLOB remaining;/* [flag(LIBNDR_FLAG_REMAINING)] */
-};
-
-struct nbt_netlogon_response_from_pdc2 {
-	DATA_BLOB _pad;/* [flag(LIBNDR_FLAG_ALIGN4)] */
-	uint32_t server_type;
-	struct GUID domain_uuid;
-	const char * forest;
-	const char * dns_domain;
-	const char * pdc_dns_name;
-	const char * domain;
-	const char * pdc_name;
-	const char * user_name;
-	const char * server_site;
-	const char * client_site;
-	uint8_t dc_sock_addr_size;
-	struct nbt_dc_sock_addr dc_sock_addr;/* [subcontext_size(dc_sock_addr_size),subcontext(0)] */
-	uint32_t nt_version;
-	uint16_t lmnt_token;
-	uint16_t lm20_token;
-};
-
-enum netr_SamDatabaseID;
-
-struct nbt_db_change {
-	enum netr_SamDatabaseID db_index;
-	uint64_t serial;
-	NTTIME timestamp;
-};
-
-struct nbt_netlogon_announce_uas {
-	uint32_t serial_lo;
-	time_t timestamp;
-	uint32_t pulse;
-	uint32_t random;
-	const char * pdc_name;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
-	const char * domain;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
-	DATA_BLOB _pad;/* [flag(LIBNDR_FLAG_ALIGN2)] */
-	const char * unicode_pdc_name;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */
-	const char * unicode_domain;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */
-	uint32_t db_count;
-	struct nbt_db_change *dbchange;
-	uint32_t sid_size;/* [value(ndr_size_dom_sid0(&sid,ndr->flags))] */
-	struct dom_sid0 sid;/* [subcontext_size(sid_size),subcontext(0)] */
-	uint32_t nt_version;
-	uint16_t lmnt_token;
-	uint16_t lm20_token;
-};
-
-union nbt_netlogon_request {
-	struct nbt_netlogon_query_for_pdc pdc;/* [case(NETLOGON_QUERY_FOR_PDC)] */
-	struct nbt_netlogon_query_for_pdc2 pdc2;/* [case(NETLOGON_QUERY_FOR_PDC2)] */
-	struct nbt_netlogon_announce_uas uas;/* [case(NETLOGON_ANNOUNCE_UAS)] */
-	struct nbt_netlogon_response_from_pdc response;/* [case(NETLOGON_RESPONSE_FROM_PDC)] */
-	struct nbt_netlogon_response_from_pdc2 response2;/* [case(NETLOGON_RESPONSE_FROM_PDC2)] */
-}/* [nodiscriminant] */;
-
-struct nbt_netlogon_packet {
-	enum nbt_netlogon_command command;
-	union nbt_netlogon_request req;/* [switch_is(command)] */
-}/* [public,flag(LIBNDR_FLAG_NOALIGN)] */;
-
-struct nbt_cldap_netlogon_1 {
-	enum nbt_netlogon_command type;
-	const char * pdc_name;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */
-	const char * user_name;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */
-	const char * domain_name;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */
-	uint32_t nt_version;/* [value] */
-	uint16_t lmnt_token;
-	uint16_t lm20_token;
-};
-
-struct nbt_cldap_netlogon_3 {
-	enum nbt_netlogon_command type;
-	const char * pdc_name;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */
-	const char * user_name;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */
-	const char * domain_name;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */
-	struct GUID domain_uuid;
-	struct GUID unknown_uuid;
-	const char * forest;
-	const char * dns_domain;
-	const char * pdc_dns_name;
-	const char * pdc_ip;
-	uint32_t server_type;
-	uint32_t nt_version;/* [value(3)] */
-	uint16_t lmnt_token;
-	uint16_t lm20_token;
-};
-
-struct nbt_cldap_netlogon_5 {
-	enum nbt_netlogon_command type;
-	uint16_t sbz;
-	uint32_t server_type;
-	struct GUID domain_uuid;
-	const char * forest;
-	const char * dns_domain;
-	const char * pdc_dns_name;
-	const char * domain;
-	const char * pdc_name;
-	const char * user_name;
-	const char * server_site;
-	const char * client_site;
-	uint32_t nt_version;/* [value(5)] */
-	uint16_t lmnt_token;
-	uint16_t lm20_token;
-}/* [public] */;
-
-struct nbt_cldap_netlogon_13 {
-	enum nbt_netlogon_command type;
-	uint16_t sbz;
-	uint32_t server_type;
-	struct GUID domain_uuid;
-	const char * forest;
-	const char * dns_domain;
-	const char * pdc_dns_name;
-	const char * domain;
-	const char * pdc_name;
-	const char * user_name;
-	const char * server_site;
-	const char * client_site;
-	uint8_t dc_sock_addr_size;
-	struct nbt_dc_sock_addr dc_sock_addr;/* [subcontext_size(dc_sock_addr_size),subcontext(0)] */
-	uint32_t nt_version;/* [value(13)] */
-	uint16_t lmnt_token;
-	uint16_t lm20_token;
-};
-
-struct nbt_cldap_netlogon_15 {
-	enum nbt_netlogon_command type;
-	uint16_t sbz;
-	uint32_t server_type;
-	struct GUID domain_uuid;
-	const char * forest;
-	const char * dns_domain;
-	const char * pdc_dns_name;
-	const char * domain;
-	const char * pdc_name;
-	const char * user_name;
-	const char * server_site;
-	const char * client_site;
-	const char * next_closest_site;
-	uint32_t nt_version;/* [value(15)] */
-	uint16_t lmnt_token;
-	uint16_t lm20_token;
-}/* [public] */;
-
-struct nbt_cldap_netlogon_29 {
-	enum nbt_netlogon_command type;
-	uint16_t sbz;
-	uint32_t server_type;
-	struct GUID domain_uuid;
-	const char * forest;
-	const char * dns_domain;
-	const char * pdc_dns_name;
-	const char * domain;
-	const char * pdc_name;
-	const char * user_name;
-	const char * server_site;
-	const char * client_site;
-	uint8_t dc_sock_addr_size;
-	struct nbt_dc_sock_addr dc_sock_addr;/* [subcontext_size(dc_sock_addr_size),subcontext(0)] */
-	const char * next_closest_site;
-	uint32_t nt_version;/* [value(29)] */
-	uint16_t lmnt_token;
-	uint16_t lm20_token;
-}/* [public] */;
-
-union nbt_cldap_netlogon {
-	struct nbt_cldap_netlogon_1 logon1;/* [case(0)] */
-	struct nbt_cldap_netlogon_3 logon3;/* [case(2)] */
-	struct nbt_cldap_netlogon_5 logon5;/* [case(4)] */
-	struct nbt_cldap_netlogon_13 logon13;/* [case(8)] */
-	struct nbt_cldap_netlogon_15 logon15;/* [case(20)] */
-	struct nbt_cldap_netlogon_29 logon29;/* [case(29)] */
-}/* [public,nodiscriminant,flag(LIBNDR_FLAG_NOALIGN)] */;
-
-enum nbt_ntlogon_command
-#ifndef USE_UINT_ENUMS
- {
-	NTLOGON_SAM_LOGON=0x12,
-	NTLOGON_SAM_LOGON_REPLY=0x13,
-	NTLOGON_SAM_LOGON_REPLY15=0x15,
-	NTLOGON_RESPONSE_FROM_PDC2=0x17
-}
-#else
- { __donnot_use_enum_nbt_ntlogon_command=0x7FFFFFFF}
-#define NTLOGON_SAM_LOGON ( 0x12 )
-#define NTLOGON_SAM_LOGON_REPLY ( 0x13 )
-#define NTLOGON_SAM_LOGON_REPLY15 ( 0x15 )
-#define NTLOGON_RESPONSE_FROM_PDC2 ( 0x17 )
-#endif
-;
-
-struct nbt_ntlogon_sam_logon {
-	uint16_t request_count;
-	const char * computer_name;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */
-	const char * user_name;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */
-	const char * mailslot_name;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
-	uint32_t acct_control;
-	uint32_t sid_size;/* [value(ndr_size_dom_sid0(&sid,ndr->flags))] */
-	struct dom_sid0 sid;/* [subcontext_size(sid_size),subcontext(0)] */
-	uint32_t nt_version;
-	uint16_t lmnt_token;
-	uint16_t lm20_token;
-};
-
-struct nbt_ntlogon_sam_logon_reply {
-	const char * server;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */
-	const char * user_name;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */
-	const char * domain;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */
-	uint32_t nt_version;
-	uint16_t lmnt_token;
-	uint16_t lm20_token;
-};
-
-union nbt_ntlogon_request {
-	struct nbt_ntlogon_sam_logon logon;/* [case(NTLOGON_SAM_LOGON)] */
-	struct nbt_ntlogon_sam_logon_reply reply;/* [case(NTLOGON_SAM_LOGON_REPLY)] */
-	struct nbt_netlogon_response_from_pdc2 reply2;/* [case(NTLOGON_RESPONSE_FROM_PDC2)] */
-}/* [nodiscriminant] */;
-
-struct nbt_ntlogon_packet {
-	enum nbt_ntlogon_command command;
-	union nbt_ntlogon_request req;/* [switch_is(command)] */
-}/* [public,flag(LIBNDR_FLAG_NOALIGN)] */;
-
-enum nbt_browse_opcode
-#ifndef USE_UINT_ENUMS
- {
-	HostAnnouncement=1,
-	AnnouncementRequest=2,
-	Election=8,
-	GetBackupListReq=9,
-	GetBackupListResp=10,
-	BecomeBackup=11,
-	DomainAnnouncement=12,
-	MasterAnnouncement=13,
-	ResetBrowserState=14,
-	LocalMasterAnnouncement=15
-}
-#else
- { __donnot_use_enum_nbt_browse_opcode=0x7FFFFFFF}
-#define HostAnnouncement ( 1 )
-#define AnnouncementRequest ( 2 )
-#define Election ( 8 )
-#define GetBackupListReq ( 9 )
-#define GetBackupListResp ( 10 )
-#define BecomeBackup ( 11 )
-#define DomainAnnouncement ( 12 )
-#define MasterAnnouncement ( 13 )
-#define ResetBrowserState ( 14 )
-#define LocalMasterAnnouncement ( 15 )
-#endif
-;
-
-struct nbt_browse_host_announcement {
-	uint8_t UpdateCount;
-	uint32_t Periodicity;
-	const char *ServerName;/* [charset(DOS)] */
-	uint8_t OSMajor;
-	uint8_t OSMinor;
-	uint32_t ServerType;
-	uint8_t BroMajorVer;
-	uint8_t BroMinorVer;
-	uint16_t Signature;
-	const char * Comment;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
-};
-
-struct nbt_browse_announcement_request {
-	uint8_t Unused;
-	const char * ResponseName;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
-};
-
-struct nbt_browse_election_request {
-	uint8_t Version;
-	uint32_t Criteria;
-	uint32_t UpTime;
-	uint32_t Reserved;
-	const char * ServerName;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
-};
-
-struct nbt_browse_backup_list_request {
-	uint8_t ReqCount;
-	uint32_t Token;
-};
-
-struct nbt_browse_backup_list_response {
-	uint8_t BackupCount;
-	uint32_t Token;
-	struct nbt_name *BackupServerList;
-};
-
-struct nbt_browse_become_backup {
-	const char * BrowserName;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
-};
-
-struct nbt_browse_domain_announcement {
-	uint8_t UpdateCount;
-	uint32_t Periodicity;
-	const char *ServerName;/* [charset(DOS)] */
-	uint8_t OSMajor;
-	uint8_t OSMinor;
-	uint32_t ServerType;
-	uint32_t MysteriousField;
-	const char * Comment;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
-};
-
-struct nbt_browse_master_announcement {
-	const char * ServerName;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
-};
-
-struct nbt_browse_reset_state {
-	uint8_t Command;
-};
-
-struct nbt_browse_local_master_announcement {
-	uint8_t UpdateCount;
-	uint32_t Periodicity;
-	const char *ServerName;/* [charset(DOS)] */
-	uint8_t OSMajor;
-	uint8_t OSMinor;
-	uint32_t ServerType;
-	uint8_t BroMajorVer;
-	uint8_t BroMinorVer;
-	uint16_t Signature;
-	const char * Comment;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
-};
-
-union nbt_browse_payload {
-	struct nbt_browse_host_announcement host_annoucement;/* [case(HostAnnouncement)] */
-	struct nbt_browse_announcement_request announcement_request;/* [case(AnnouncementRequest)] */
-	struct nbt_browse_election_request election_request;/* [case(Election)] */
-	struct nbt_browse_backup_list_request backup_list_request;/* [case(GetBackupListReq)] */
-	struct nbt_browse_backup_list_response backup_list_response;/* [case(GetBackupListResp)] */
-	struct nbt_browse_become_backup become_backup;/* [case(BecomeBackup)] */
-	struct nbt_browse_domain_announcement domain_announcement;/* [case(DomainAnnouncement)] */
-	struct nbt_browse_master_announcement master_announcement;/* [case(MasterAnnouncement)] */
-	struct nbt_browse_reset_state reset_browser_state;/* [case(ResetBrowserState)] */
-	struct nbt_browse_local_master_announcement local_master_announcement;/* [case(LocalMasterAnnouncement)] */
-}/* [nodiscriminant] */;
-
-struct nbt_browse_packet {
-	enum nbt_browse_opcode opcode;
-	union nbt_browse_payload payload;/* [switch_is(opcode)] */
-}/* [public,flag(LIBNDR_FLAG_NOALIGN)] */;
-
-#endif /* _HEADER_nbt */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_dfs.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_dfs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_dfs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,5801 +0,0 @@
-/* parser auto-generated by pidl */
-
-#include "includes.h"
-#include "librpc/gen_ndr/ndr_dfs.h"
-
-static enum ndr_err_code ndr_push_dfs_ManagerVersion(struct ndr_push *ndr, int ndr_flags, enum dfs_ManagerVersion r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_ManagerVersion(struct ndr_pull *ndr, int ndr_flags, enum dfs_ManagerVersion *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_ManagerVersion(struct ndr_print *ndr, const char *name, enum dfs_ManagerVersion r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case DFS_MANAGER_VERSION_NT4: val = "DFS_MANAGER_VERSION_NT4"; break;
-		case DFS_MANAGER_VERSION_W2K: val = "DFS_MANAGER_VERSION_W2K"; break;
-		case DFS_MANAGER_VERSION_W2K3: val = "DFS_MANAGER_VERSION_W2K3"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_dfs_Info0(struct ndr_push *ndr, int ndr_flags, const struct dfs_Info0 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Info0(struct ndr_pull *ndr, int ndr_flags, struct dfs_Info0 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Info0(struct ndr_print *ndr, const char *name, const struct dfs_Info0 *r)
-{
-	ndr_print_struct(ndr, name, "dfs_Info0");
-	ndr->depth++;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_Info1(struct ndr_push *ndr, int ndr_flags, const struct dfs_Info1 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->path));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->path) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->path, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->path, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->path, ndr_charset_length(r->path, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Info1(struct ndr_pull *ndr, int ndr_flags, struct dfs_Info1 *r)
-{
-	uint32_t _ptr_path;
-	TALLOC_CTX *_mem_save_path_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_path));
-		if (_ptr_path) {
-			NDR_PULL_ALLOC(ndr, r->path);
-		} else {
-			r->path = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->path) {
-			_mem_save_path_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->path, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->path));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->path));
-			if (ndr_get_array_length(ndr, &r->path) > ndr_get_array_size(ndr, &r->path)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->path), ndr_get_array_length(ndr, &r->path));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->path), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->path, ndr_get_array_length(ndr, &r->path), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_path_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Info1(struct ndr_print *ndr, const char *name, const struct dfs_Info1 *r)
-{
-	ndr_print_struct(ndr, name, "dfs_Info1");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "path", r->path);
-	ndr->depth++;
-	if (r->path) {
-		ndr_print_string(ndr, "path", r->path);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_dfs_VolumeState(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_dfs_VolumeState(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_VolumeState(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DFS_VOLUME_STATE_OK", DFS_VOLUME_STATE_OK, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DFS_VOLUME_STATE_INCONSISTENT", DFS_VOLUME_STATE_INCONSISTENT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DFS_VOLUME_STATE_OFFLINE", DFS_VOLUME_STATE_OFFLINE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DFS_VOLUME_STATE_ONLINE", DFS_VOLUME_STATE_ONLINE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DFS_VOLUME_STATE_STANDALONE", DFS_VOLUME_STATE_STANDALONE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DFS_VOLUME_STATE_AD_BLOB", DFS_VOLUME_STATE_AD_BLOB, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_Info2(struct ndr_push *ndr, int ndr_flags, const struct dfs_Info2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->path));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->comment));
-		NDR_CHECK(ndr_push_dfs_VolumeState(ndr, NDR_SCALARS, r->state));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_stores));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->path) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->path, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->path, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->path, ndr_charset_length(r->path, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->comment) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->comment, ndr_charset_length(r->comment, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Info2(struct ndr_pull *ndr, int ndr_flags, struct dfs_Info2 *r)
-{
-	uint32_t _ptr_path;
-	TALLOC_CTX *_mem_save_path_0;
-	uint32_t _ptr_comment;
-	TALLOC_CTX *_mem_save_comment_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_path));
-		if (_ptr_path) {
-			NDR_PULL_ALLOC(ndr, r->path);
-		} else {
-			r->path = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_comment));
-		if (_ptr_comment) {
-			NDR_PULL_ALLOC(ndr, r->comment);
-		} else {
-			r->comment = NULL;
-		}
-		NDR_CHECK(ndr_pull_dfs_VolumeState(ndr, NDR_SCALARS, &r->state));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_stores));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->path) {
-			_mem_save_path_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->path, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->path));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->path));
-			if (ndr_get_array_length(ndr, &r->path) > ndr_get_array_size(ndr, &r->path)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->path), ndr_get_array_length(ndr, &r->path));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->path), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->path, ndr_get_array_length(ndr, &r->path), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_path_0, 0);
-		}
-		if (r->comment) {
-			_mem_save_comment_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->comment, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->comment));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->comment));
-			if (ndr_get_array_length(ndr, &r->comment) > ndr_get_array_size(ndr, &r->comment)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->comment), ndr_get_array_length(ndr, &r->comment));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->comment, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_comment_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Info2(struct ndr_print *ndr, const char *name, const struct dfs_Info2 *r)
-{
-	ndr_print_struct(ndr, name, "dfs_Info2");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "path", r->path);
-	ndr->depth++;
-	if (r->path) {
-		ndr_print_string(ndr, "path", r->path);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "comment", r->comment);
-	ndr->depth++;
-	if (r->comment) {
-		ndr_print_string(ndr, "comment", r->comment);
-	}
-	ndr->depth--;
-	ndr_print_dfs_VolumeState(ndr, "state", r->state);
-	ndr_print_uint32(ndr, "num_stores", r->num_stores);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_dfs_StorageState(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_dfs_StorageState(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_StorageState(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DFS_STORAGE_STATE_OFFLINE", DFS_STORAGE_STATE_OFFLINE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DFS_STORAGE_STATE_ONLINE", DFS_STORAGE_STATE_ONLINE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DFS_STORAGE_STATE_ACTIVE", DFS_STORAGE_STATE_ACTIVE, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_StorageInfo(struct ndr_push *ndr, int ndr_flags, const struct dfs_StorageInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_dfs_StorageState(ndr, NDR_SCALARS, r->state));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->server));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->share));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->server) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->server, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->server, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->server, ndr_charset_length(r->server, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->share) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->share, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->share, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->share, ndr_charset_length(r->share, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_StorageInfo(struct ndr_pull *ndr, int ndr_flags, struct dfs_StorageInfo *r)
-{
-	uint32_t _ptr_server;
-	TALLOC_CTX *_mem_save_server_0;
-	uint32_t _ptr_share;
-	TALLOC_CTX *_mem_save_share_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_dfs_StorageState(ndr, NDR_SCALARS, &r->state));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server));
-		if (_ptr_server) {
-			NDR_PULL_ALLOC(ndr, r->server);
-		} else {
-			r->server = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_share));
-		if (_ptr_share) {
-			NDR_PULL_ALLOC(ndr, r->share);
-		} else {
-			r->share = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->server) {
-			_mem_save_server_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->server, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->server));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->server));
-			if (ndr_get_array_length(ndr, &r->server) > ndr_get_array_size(ndr, &r->server)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->server), ndr_get_array_length(ndr, &r->server));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->server), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->server, ndr_get_array_length(ndr, &r->server), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_0, 0);
-		}
-		if (r->share) {
-			_mem_save_share_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->share, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->share));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->share));
-			if (ndr_get_array_length(ndr, &r->share) > ndr_get_array_size(ndr, &r->share)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->share), ndr_get_array_length(ndr, &r->share));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->share), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->share, ndr_get_array_length(ndr, &r->share), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_share_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_StorageInfo(struct ndr_print *ndr, const char *name, const struct dfs_StorageInfo *r)
-{
-	ndr_print_struct(ndr, name, "dfs_StorageInfo");
-	ndr->depth++;
-	ndr_print_dfs_StorageState(ndr, "state", r->state);
-	ndr_print_ptr(ndr, "server", r->server);
-	ndr->depth++;
-	if (r->server) {
-		ndr_print_string(ndr, "server", r->server);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "share", r->share);
-	ndr->depth++;
-	if (r->share) {
-		ndr_print_string(ndr, "share", r->share);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_Info3(struct ndr_push *ndr, int ndr_flags, const struct dfs_Info3 *r)
-{
-	uint32_t cntr_stores_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->path));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->comment));
-		NDR_CHECK(ndr_push_dfs_VolumeState(ndr, NDR_SCALARS, r->state));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_stores));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->stores));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->path) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->path, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->path, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->path, ndr_charset_length(r->path, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->comment) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->comment, ndr_charset_length(r->comment, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->stores) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_stores));
-			for (cntr_stores_1 = 0; cntr_stores_1 < r->num_stores; cntr_stores_1++) {
-				NDR_CHECK(ndr_push_dfs_StorageInfo(ndr, NDR_SCALARS, &r->stores[cntr_stores_1]));
-			}
-			for (cntr_stores_1 = 0; cntr_stores_1 < r->num_stores; cntr_stores_1++) {
-				NDR_CHECK(ndr_push_dfs_StorageInfo(ndr, NDR_BUFFERS, &r->stores[cntr_stores_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Info3(struct ndr_pull *ndr, int ndr_flags, struct dfs_Info3 *r)
-{
-	uint32_t _ptr_path;
-	TALLOC_CTX *_mem_save_path_0;
-	uint32_t _ptr_comment;
-	TALLOC_CTX *_mem_save_comment_0;
-	uint32_t _ptr_stores;
-	uint32_t cntr_stores_1;
-	TALLOC_CTX *_mem_save_stores_0;
-	TALLOC_CTX *_mem_save_stores_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_path));
-		if (_ptr_path) {
-			NDR_PULL_ALLOC(ndr, r->path);
-		} else {
-			r->path = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_comment));
-		if (_ptr_comment) {
-			NDR_PULL_ALLOC(ndr, r->comment);
-		} else {
-			r->comment = NULL;
-		}
-		NDR_CHECK(ndr_pull_dfs_VolumeState(ndr, NDR_SCALARS, &r->state));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_stores));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_stores));
-		if (_ptr_stores) {
-			NDR_PULL_ALLOC(ndr, r->stores);
-		} else {
-			r->stores = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->path) {
-			_mem_save_path_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->path, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->path));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->path));
-			if (ndr_get_array_length(ndr, &r->path) > ndr_get_array_size(ndr, &r->path)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->path), ndr_get_array_length(ndr, &r->path));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->path), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->path, ndr_get_array_length(ndr, &r->path), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_path_0, 0);
-		}
-		if (r->comment) {
-			_mem_save_comment_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->comment, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->comment));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->comment));
-			if (ndr_get_array_length(ndr, &r->comment) > ndr_get_array_size(ndr, &r->comment)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->comment), ndr_get_array_length(ndr, &r->comment));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->comment, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_comment_0, 0);
-		}
-		if (r->stores) {
-			_mem_save_stores_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->stores, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->stores));
-			NDR_PULL_ALLOC_N(ndr, r->stores, ndr_get_array_size(ndr, &r->stores));
-			_mem_save_stores_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->stores, 0);
-			for (cntr_stores_1 = 0; cntr_stores_1 < r->num_stores; cntr_stores_1++) {
-				NDR_CHECK(ndr_pull_dfs_StorageInfo(ndr, NDR_SCALARS, &r->stores[cntr_stores_1]));
-			}
-			for (cntr_stores_1 = 0; cntr_stores_1 < r->num_stores; cntr_stores_1++) {
-				NDR_CHECK(ndr_pull_dfs_StorageInfo(ndr, NDR_BUFFERS, &r->stores[cntr_stores_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_stores_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_stores_0, 0);
-		}
-		if (r->stores) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->stores, r->num_stores));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Info3(struct ndr_print *ndr, const char *name, const struct dfs_Info3 *r)
-{
-	uint32_t cntr_stores_1;
-	ndr_print_struct(ndr, name, "dfs_Info3");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "path", r->path);
-	ndr->depth++;
-	if (r->path) {
-		ndr_print_string(ndr, "path", r->path);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "comment", r->comment);
-	ndr->depth++;
-	if (r->comment) {
-		ndr_print_string(ndr, "comment", r->comment);
-	}
-	ndr->depth--;
-	ndr_print_dfs_VolumeState(ndr, "state", r->state);
-	ndr_print_uint32(ndr, "num_stores", r->num_stores);
-	ndr_print_ptr(ndr, "stores", r->stores);
-	ndr->depth++;
-	if (r->stores) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "stores", r->num_stores);
-		ndr->depth++;
-		for (cntr_stores_1=0;cntr_stores_1<r->num_stores;cntr_stores_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_stores_1) != -1) {
-				ndr_print_dfs_StorageInfo(ndr, "stores", &r->stores[cntr_stores_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_Info4(struct ndr_push *ndr, int ndr_flags, const struct dfs_Info4 *r)
-{
-	uint32_t cntr_stores_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->path));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->comment));
-		NDR_CHECK(ndr_push_dfs_VolumeState(ndr, NDR_SCALARS, r->state));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->timeout));
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->guid));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_stores));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->stores));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->path) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->path, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->path, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->path, ndr_charset_length(r->path, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->comment) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->comment, ndr_charset_length(r->comment, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_BUFFERS, &r->guid));
-		if (r->stores) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_stores));
-			for (cntr_stores_1 = 0; cntr_stores_1 < r->num_stores; cntr_stores_1++) {
-				NDR_CHECK(ndr_push_dfs_StorageInfo(ndr, NDR_SCALARS, &r->stores[cntr_stores_1]));
-			}
-			for (cntr_stores_1 = 0; cntr_stores_1 < r->num_stores; cntr_stores_1++) {
-				NDR_CHECK(ndr_push_dfs_StorageInfo(ndr, NDR_BUFFERS, &r->stores[cntr_stores_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Info4(struct ndr_pull *ndr, int ndr_flags, struct dfs_Info4 *r)
-{
-	uint32_t _ptr_path;
-	TALLOC_CTX *_mem_save_path_0;
-	uint32_t _ptr_comment;
-	TALLOC_CTX *_mem_save_comment_0;
-	uint32_t _ptr_stores;
-	uint32_t cntr_stores_1;
-	TALLOC_CTX *_mem_save_stores_0;
-	TALLOC_CTX *_mem_save_stores_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_path));
-		if (_ptr_path) {
-			NDR_PULL_ALLOC(ndr, r->path);
-		} else {
-			r->path = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_comment));
-		if (_ptr_comment) {
-			NDR_PULL_ALLOC(ndr, r->comment);
-		} else {
-			r->comment = NULL;
-		}
-		NDR_CHECK(ndr_pull_dfs_VolumeState(ndr, NDR_SCALARS, &r->state));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->timeout));
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->guid));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_stores));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_stores));
-		if (_ptr_stores) {
-			NDR_PULL_ALLOC(ndr, r->stores);
-		} else {
-			r->stores = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->path) {
-			_mem_save_path_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->path, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->path));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->path));
-			if (ndr_get_array_length(ndr, &r->path) > ndr_get_array_size(ndr, &r->path)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->path), ndr_get_array_length(ndr, &r->path));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->path), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->path, ndr_get_array_length(ndr, &r->path), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_path_0, 0);
-		}
-		if (r->comment) {
-			_mem_save_comment_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->comment, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->comment));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->comment));
-			if (ndr_get_array_length(ndr, &r->comment) > ndr_get_array_size(ndr, &r->comment)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->comment), ndr_get_array_length(ndr, &r->comment));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->comment, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_comment_0, 0);
-		}
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_BUFFERS, &r->guid));
-		if (r->stores) {
-			_mem_save_stores_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->stores, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->stores));
-			NDR_PULL_ALLOC_N(ndr, r->stores, ndr_get_array_size(ndr, &r->stores));
-			_mem_save_stores_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->stores, 0);
-			for (cntr_stores_1 = 0; cntr_stores_1 < r->num_stores; cntr_stores_1++) {
-				NDR_CHECK(ndr_pull_dfs_StorageInfo(ndr, NDR_SCALARS, &r->stores[cntr_stores_1]));
-			}
-			for (cntr_stores_1 = 0; cntr_stores_1 < r->num_stores; cntr_stores_1++) {
-				NDR_CHECK(ndr_pull_dfs_StorageInfo(ndr, NDR_BUFFERS, &r->stores[cntr_stores_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_stores_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_stores_0, 0);
-		}
-		if (r->stores) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->stores, r->num_stores));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Info4(struct ndr_print *ndr, const char *name, const struct dfs_Info4 *r)
-{
-	uint32_t cntr_stores_1;
-	ndr_print_struct(ndr, name, "dfs_Info4");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "path", r->path);
-	ndr->depth++;
-	if (r->path) {
-		ndr_print_string(ndr, "path", r->path);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "comment", r->comment);
-	ndr->depth++;
-	if (r->comment) {
-		ndr_print_string(ndr, "comment", r->comment);
-	}
-	ndr->depth--;
-	ndr_print_dfs_VolumeState(ndr, "state", r->state);
-	ndr_print_uint32(ndr, "timeout", r->timeout);
-	ndr_print_GUID(ndr, "guid", &r->guid);
-	ndr_print_uint32(ndr, "num_stores", r->num_stores);
-	ndr_print_ptr(ndr, "stores", r->stores);
-	ndr->depth++;
-	if (r->stores) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "stores", r->num_stores);
-		ndr->depth++;
-		for (cntr_stores_1=0;cntr_stores_1<r->num_stores;cntr_stores_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_stores_1) != -1) {
-				ndr_print_dfs_StorageInfo(ndr, "stores", &r->stores[cntr_stores_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_dfs_PropertyFlags(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_dfs_PropertyFlags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_PropertyFlags(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DFS_PROPERTY_FLAG_INSITE_REFERRALS", DFS_PROPERTY_FLAG_INSITE_REFERRALS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DFS_PROPERTY_FLAG_ROOT_SCALABILITY", DFS_PROPERTY_FLAG_ROOT_SCALABILITY, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DFS_PROPERTY_FLAG_SITE_COSTING", DFS_PROPERTY_FLAG_SITE_COSTING, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DFS_PROPERTY_FLAG_TARGET_FAILBACK", DFS_PROPERTY_FLAG_TARGET_FAILBACK, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DFS_PROPERTY_FLAG_CLUSTER_ENABLED", DFS_PROPERTY_FLAG_CLUSTER_ENABLED, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_Info5(struct ndr_push *ndr, int ndr_flags, const struct dfs_Info5 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->path));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->comment));
-		NDR_CHECK(ndr_push_dfs_VolumeState(ndr, NDR_SCALARS, r->state));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->timeout));
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->guid));
-		NDR_CHECK(ndr_push_dfs_PropertyFlags(ndr, NDR_SCALARS, r->flags));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->pktsize));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_stores));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->path) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->path, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->path, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->path, ndr_charset_length(r->path, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->comment) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->comment, ndr_charset_length(r->comment, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_BUFFERS, &r->guid));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Info5(struct ndr_pull *ndr, int ndr_flags, struct dfs_Info5 *r)
-{
-	uint32_t _ptr_path;
-	TALLOC_CTX *_mem_save_path_0;
-	uint32_t _ptr_comment;
-	TALLOC_CTX *_mem_save_comment_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_path));
-		if (_ptr_path) {
-			NDR_PULL_ALLOC(ndr, r->path);
-		} else {
-			r->path = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_comment));
-		if (_ptr_comment) {
-			NDR_PULL_ALLOC(ndr, r->comment);
-		} else {
-			r->comment = NULL;
-		}
-		NDR_CHECK(ndr_pull_dfs_VolumeState(ndr, NDR_SCALARS, &r->state));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->timeout));
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->guid));
-		NDR_CHECK(ndr_pull_dfs_PropertyFlags(ndr, NDR_SCALARS, &r->flags));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->pktsize));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_stores));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->path) {
-			_mem_save_path_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->path, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->path));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->path));
-			if (ndr_get_array_length(ndr, &r->path) > ndr_get_array_size(ndr, &r->path)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->path), ndr_get_array_length(ndr, &r->path));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->path), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->path, ndr_get_array_length(ndr, &r->path), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_path_0, 0);
-		}
-		if (r->comment) {
-			_mem_save_comment_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->comment, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->comment));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->comment));
-			if (ndr_get_array_length(ndr, &r->comment) > ndr_get_array_size(ndr, &r->comment)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->comment), ndr_get_array_length(ndr, &r->comment));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->comment, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_comment_0, 0);
-		}
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_BUFFERS, &r->guid));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Info5(struct ndr_print *ndr, const char *name, const struct dfs_Info5 *r)
-{
-	ndr_print_struct(ndr, name, "dfs_Info5");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "path", r->path);
-	ndr->depth++;
-	if (r->path) {
-		ndr_print_string(ndr, "path", r->path);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "comment", r->comment);
-	ndr->depth++;
-	if (r->comment) {
-		ndr_print_string(ndr, "comment", r->comment);
-	}
-	ndr->depth--;
-	ndr_print_dfs_VolumeState(ndr, "state", r->state);
-	ndr_print_uint32(ndr, "timeout", r->timeout);
-	ndr_print_GUID(ndr, "guid", &r->guid);
-	ndr_print_dfs_PropertyFlags(ndr, "flags", r->flags);
-	ndr_print_uint32(ndr, "pktsize", r->pktsize);
-	ndr_print_uint32(ndr, "num_stores", r->num_stores);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_Target_PriorityClass(struct ndr_push *ndr, int ndr_flags, enum dfs_Target_PriorityClass r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Target_PriorityClass(struct ndr_pull *ndr, int ndr_flags, enum dfs_Target_PriorityClass *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Target_PriorityClass(struct ndr_print *ndr, const char *name, enum dfs_Target_PriorityClass r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case DFS_INVALID_PRIORITY_CLASS: val = "DFS_INVALID_PRIORITY_CLASS"; break;
-		case DFS_SITE_COST_NORMAL_PRIORITY_CLASS: val = "DFS_SITE_COST_NORMAL_PRIORITY_CLASS"; break;
-		case DFS_GLOBAL_HIGH_PRIORITY_CLASS: val = "DFS_GLOBAL_HIGH_PRIORITY_CLASS"; break;
-		case DFS_SITE_COST_HIGH_PRIORITY_CLASS: val = "DFS_SITE_COST_HIGH_PRIORITY_CLASS"; break;
-		case DFS_SITE_COST_LOW_PRIORITY_CLASS: val = "DFS_SITE_COST_LOW_PRIORITY_CLASS"; break;
-		case DFS_GLOBAL_LOW_PRIORITY_CLASS: val = "DFS_GLOBAL_LOW_PRIORITY_CLASS"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_dfs_Target_Priority(struct ndr_push *ndr, int ndr_flags, const struct dfs_Target_Priority *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_dfs_Target_PriorityClass(ndr, NDR_SCALARS, r->target_priority_class));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->target_priority_rank));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->reserved));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Target_Priority(struct ndr_pull *ndr, int ndr_flags, struct dfs_Target_Priority *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_dfs_Target_PriorityClass(ndr, NDR_SCALARS, &r->target_priority_class));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->target_priority_rank));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->reserved));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Target_Priority(struct ndr_print *ndr, const char *name, const struct dfs_Target_Priority *r)
-{
-	ndr_print_struct(ndr, name, "dfs_Target_Priority");
-	ndr->depth++;
-	ndr_print_dfs_Target_PriorityClass(ndr, "target_priority_class", r->target_priority_class);
-	ndr_print_uint16(ndr, "target_priority_rank", r->target_priority_rank);
-	ndr_print_uint16(ndr, "reserved", r->reserved);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_StorageInfo2(struct ndr_push *ndr, int ndr_flags, const struct dfs_StorageInfo2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_dfs_StorageInfo(ndr, NDR_SCALARS, &r->info));
-		NDR_CHECK(ndr_push_dfs_Target_Priority(ndr, NDR_SCALARS, &r->target_priority));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_dfs_StorageInfo(ndr, NDR_BUFFERS, &r->info));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_StorageInfo2(struct ndr_pull *ndr, int ndr_flags, struct dfs_StorageInfo2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_dfs_StorageInfo(ndr, NDR_SCALARS, &r->info));
-		NDR_CHECK(ndr_pull_dfs_Target_Priority(ndr, NDR_SCALARS, &r->target_priority));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_dfs_StorageInfo(ndr, NDR_BUFFERS, &r->info));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_StorageInfo2(struct ndr_print *ndr, const char *name, const struct dfs_StorageInfo2 *r)
-{
-	ndr_print_struct(ndr, name, "dfs_StorageInfo2");
-	ndr->depth++;
-	ndr_print_dfs_StorageInfo(ndr, "info", &r->info);
-	ndr_print_dfs_Target_Priority(ndr, "target_priority", &r->target_priority);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_Info6(struct ndr_push *ndr, int ndr_flags, const struct dfs_Info6 *r)
-{
-	uint32_t cntr_stores_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->entry_path));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->comment));
-		NDR_CHECK(ndr_push_dfs_VolumeState(ndr, NDR_SCALARS, r->state));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->timeout));
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->guid));
-		NDR_CHECK(ndr_push_dfs_PropertyFlags(ndr, NDR_SCALARS, r->flags));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->pktsize));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->num_stores));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->stores));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->entry_path) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->entry_path, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->entry_path, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->entry_path, ndr_charset_length(r->entry_path, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->comment) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->comment, ndr_charset_length(r->comment, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_BUFFERS, &r->guid));
-		if (r->stores) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_stores));
-			for (cntr_stores_1 = 0; cntr_stores_1 < r->num_stores; cntr_stores_1++) {
-				NDR_CHECK(ndr_push_dfs_StorageInfo2(ndr, NDR_SCALARS, &r->stores[cntr_stores_1]));
-			}
-			for (cntr_stores_1 = 0; cntr_stores_1 < r->num_stores; cntr_stores_1++) {
-				NDR_CHECK(ndr_push_dfs_StorageInfo2(ndr, NDR_BUFFERS, &r->stores[cntr_stores_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Info6(struct ndr_pull *ndr, int ndr_flags, struct dfs_Info6 *r)
-{
-	uint32_t _ptr_entry_path;
-	TALLOC_CTX *_mem_save_entry_path_0;
-	uint32_t _ptr_comment;
-	TALLOC_CTX *_mem_save_comment_0;
-	uint32_t _ptr_stores;
-	uint32_t cntr_stores_1;
-	TALLOC_CTX *_mem_save_stores_0;
-	TALLOC_CTX *_mem_save_stores_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_entry_path));
-		if (_ptr_entry_path) {
-			NDR_PULL_ALLOC(ndr, r->entry_path);
-		} else {
-			r->entry_path = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_comment));
-		if (_ptr_comment) {
-			NDR_PULL_ALLOC(ndr, r->comment);
-		} else {
-			r->comment = NULL;
-		}
-		NDR_CHECK(ndr_pull_dfs_VolumeState(ndr, NDR_SCALARS, &r->state));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->timeout));
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->guid));
-		NDR_CHECK(ndr_pull_dfs_PropertyFlags(ndr, NDR_SCALARS, &r->flags));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->pktsize));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->num_stores));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_stores));
-		if (_ptr_stores) {
-			NDR_PULL_ALLOC(ndr, r->stores);
-		} else {
-			r->stores = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->entry_path) {
-			_mem_save_entry_path_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->entry_path, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->entry_path));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->entry_path));
-			if (ndr_get_array_length(ndr, &r->entry_path) > ndr_get_array_size(ndr, &r->entry_path)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->entry_path), ndr_get_array_length(ndr, &r->entry_path));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->entry_path), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->entry_path, ndr_get_array_length(ndr, &r->entry_path), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entry_path_0, 0);
-		}
-		if (r->comment) {
-			_mem_save_comment_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->comment, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->comment));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->comment));
-			if (ndr_get_array_length(ndr, &r->comment) > ndr_get_array_size(ndr, &r->comment)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->comment), ndr_get_array_length(ndr, &r->comment));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->comment, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_comment_0, 0);
-		}
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_BUFFERS, &r->guid));
-		if (r->stores) {
-			_mem_save_stores_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->stores, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->stores));
-			NDR_PULL_ALLOC_N(ndr, r->stores, ndr_get_array_size(ndr, &r->stores));
-			_mem_save_stores_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->stores, 0);
-			for (cntr_stores_1 = 0; cntr_stores_1 < r->num_stores; cntr_stores_1++) {
-				NDR_CHECK(ndr_pull_dfs_StorageInfo2(ndr, NDR_SCALARS, &r->stores[cntr_stores_1]));
-			}
-			for (cntr_stores_1 = 0; cntr_stores_1 < r->num_stores; cntr_stores_1++) {
-				NDR_CHECK(ndr_pull_dfs_StorageInfo2(ndr, NDR_BUFFERS, &r->stores[cntr_stores_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_stores_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_stores_0, 0);
-		}
-		if (r->stores) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->stores, r->num_stores));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Info6(struct ndr_print *ndr, const char *name, const struct dfs_Info6 *r)
-{
-	uint32_t cntr_stores_1;
-	ndr_print_struct(ndr, name, "dfs_Info6");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "entry_path", r->entry_path);
-	ndr->depth++;
-	if (r->entry_path) {
-		ndr_print_string(ndr, "entry_path", r->entry_path);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "comment", r->comment);
-	ndr->depth++;
-	if (r->comment) {
-		ndr_print_string(ndr, "comment", r->comment);
-	}
-	ndr->depth--;
-	ndr_print_dfs_VolumeState(ndr, "state", r->state);
-	ndr_print_uint32(ndr, "timeout", r->timeout);
-	ndr_print_GUID(ndr, "guid", &r->guid);
-	ndr_print_dfs_PropertyFlags(ndr, "flags", r->flags);
-	ndr_print_uint32(ndr, "pktsize", r->pktsize);
-	ndr_print_uint16(ndr, "num_stores", r->num_stores);
-	ndr_print_ptr(ndr, "stores", r->stores);
-	ndr->depth++;
-	if (r->stores) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "stores", r->num_stores);
-		ndr->depth++;
-		for (cntr_stores_1=0;cntr_stores_1<r->num_stores;cntr_stores_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_stores_1) != -1) {
-				ndr_print_dfs_StorageInfo2(ndr, "stores", &r->stores[cntr_stores_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_Info7(struct ndr_push *ndr, int ndr_flags, const struct dfs_Info7 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->generation_guid));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_BUFFERS, &r->generation_guid));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Info7(struct ndr_pull *ndr, int ndr_flags, struct dfs_Info7 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->generation_guid));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_BUFFERS, &r->generation_guid));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Info7(struct ndr_print *ndr, const char *name, const struct dfs_Info7 *r)
-{
-	ndr_print_struct(ndr, name, "dfs_Info7");
-	ndr->depth++;
-	ndr_print_GUID(ndr, "generation_guid", &r->generation_guid);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_Info100(struct ndr_push *ndr, int ndr_flags, const struct dfs_Info100 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->comment));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->comment) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->comment, ndr_charset_length(r->comment, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Info100(struct ndr_pull *ndr, int ndr_flags, struct dfs_Info100 *r)
-{
-	uint32_t _ptr_comment;
-	TALLOC_CTX *_mem_save_comment_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_comment));
-		if (_ptr_comment) {
-			NDR_PULL_ALLOC(ndr, r->comment);
-		} else {
-			r->comment = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->comment) {
-			_mem_save_comment_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->comment, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->comment));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->comment));
-			if (ndr_get_array_length(ndr, &r->comment) > ndr_get_array_size(ndr, &r->comment)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->comment), ndr_get_array_length(ndr, &r->comment));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->comment, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_comment_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Info100(struct ndr_print *ndr, const char *name, const struct dfs_Info100 *r)
-{
-	ndr_print_struct(ndr, name, "dfs_Info100");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "comment", r->comment);
-	ndr->depth++;
-	if (r->comment) {
-		ndr_print_string(ndr, "comment", r->comment);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_Info101(struct ndr_push *ndr, int ndr_flags, const struct dfs_Info101 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_dfs_StorageState(ndr, NDR_SCALARS, r->state));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Info101(struct ndr_pull *ndr, int ndr_flags, struct dfs_Info101 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_dfs_StorageState(ndr, NDR_SCALARS, &r->state));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Info101(struct ndr_print *ndr, const char *name, const struct dfs_Info101 *r)
-{
-	ndr_print_struct(ndr, name, "dfs_Info101");
-	ndr->depth++;
-	ndr_print_dfs_StorageState(ndr, "state", r->state);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_Info102(struct ndr_push *ndr, int ndr_flags, const struct dfs_Info102 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->timeout));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Info102(struct ndr_pull *ndr, int ndr_flags, struct dfs_Info102 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->timeout));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Info102(struct ndr_print *ndr, const char *name, const struct dfs_Info102 *r)
-{
-	ndr_print_struct(ndr, name, "dfs_Info102");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "timeout", r->timeout);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_Info103(struct ndr_push *ndr, int ndr_flags, const struct dfs_Info103 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_dfs_PropertyFlags(ndr, NDR_SCALARS, r->flags));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Info103(struct ndr_pull *ndr, int ndr_flags, struct dfs_Info103 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_dfs_PropertyFlags(ndr, NDR_SCALARS, &r->flags));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Info103(struct ndr_print *ndr, const char *name, const struct dfs_Info103 *r)
-{
-	ndr_print_struct(ndr, name, "dfs_Info103");
-	ndr->depth++;
-	ndr_print_dfs_PropertyFlags(ndr, "flags", r->flags);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_Info104(struct ndr_push *ndr, int ndr_flags, const struct dfs_Info104 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_dfs_Target_Priority(ndr, NDR_SCALARS, &r->priority));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Info104(struct ndr_pull *ndr, int ndr_flags, struct dfs_Info104 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_dfs_Target_Priority(ndr, NDR_SCALARS, &r->priority));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Info104(struct ndr_print *ndr, const char *name, const struct dfs_Info104 *r)
-{
-	ndr_print_struct(ndr, name, "dfs_Info104");
-	ndr->depth++;
-	ndr_print_dfs_Target_Priority(ndr, "priority", &r->priority);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_Info105(struct ndr_push *ndr, int ndr_flags, const struct dfs_Info105 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->comment));
-		NDR_CHECK(ndr_push_dfs_VolumeState(ndr, NDR_SCALARS, r->state));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->timeout));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->property_flag_mask));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->property_flags));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->comment) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->comment, ndr_charset_length(r->comment, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Info105(struct ndr_pull *ndr, int ndr_flags, struct dfs_Info105 *r)
-{
-	uint32_t _ptr_comment;
-	TALLOC_CTX *_mem_save_comment_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_comment));
-		if (_ptr_comment) {
-			NDR_PULL_ALLOC(ndr, r->comment);
-		} else {
-			r->comment = NULL;
-		}
-		NDR_CHECK(ndr_pull_dfs_VolumeState(ndr, NDR_SCALARS, &r->state));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->timeout));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->property_flag_mask));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->property_flags));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->comment) {
-			_mem_save_comment_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->comment, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->comment));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->comment));
-			if (ndr_get_array_length(ndr, &r->comment) > ndr_get_array_size(ndr, &r->comment)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->comment), ndr_get_array_length(ndr, &r->comment));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->comment, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_comment_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Info105(struct ndr_print *ndr, const char *name, const struct dfs_Info105 *r)
-{
-	ndr_print_struct(ndr, name, "dfs_Info105");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "comment", r->comment);
-	ndr->depth++;
-	if (r->comment) {
-		ndr_print_string(ndr, "comment", r->comment);
-	}
-	ndr->depth--;
-	ndr_print_dfs_VolumeState(ndr, "state", r->state);
-	ndr_print_uint32(ndr, "timeout", r->timeout);
-	ndr_print_uint32(ndr, "property_flag_mask", r->property_flag_mask);
-	ndr_print_uint32(ndr, "property_flags", r->property_flags);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_Info106(struct ndr_push *ndr, int ndr_flags, const struct dfs_Info106 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_dfs_StorageState(ndr, NDR_SCALARS, r->state));
-		NDR_CHECK(ndr_push_dfs_Target_Priority(ndr, NDR_SCALARS, &r->priority));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Info106(struct ndr_pull *ndr, int ndr_flags, struct dfs_Info106 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_dfs_StorageState(ndr, NDR_SCALARS, &r->state));
-		NDR_CHECK(ndr_pull_dfs_Target_Priority(ndr, NDR_SCALARS, &r->priority));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Info106(struct ndr_print *ndr, const char *name, const struct dfs_Info106 *r)
-{
-	ndr_print_struct(ndr, name, "dfs_Info106");
-	ndr->depth++;
-	ndr_print_dfs_StorageState(ndr, "state", r->state);
-	ndr_print_dfs_Target_Priority(ndr, "priority", &r->priority);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_Info200(struct ndr_push *ndr, int ndr_flags, const struct dfs_Info200 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->dom_root));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->dom_root) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->dom_root, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->dom_root, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->dom_root, ndr_charset_length(r->dom_root, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Info200(struct ndr_pull *ndr, int ndr_flags, struct dfs_Info200 *r)
-{
-	uint32_t _ptr_dom_root;
-	TALLOC_CTX *_mem_save_dom_root_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dom_root));
-		if (_ptr_dom_root) {
-			NDR_PULL_ALLOC(ndr, r->dom_root);
-		} else {
-			r->dom_root = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->dom_root) {
-			_mem_save_dom_root_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->dom_root, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->dom_root));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->dom_root));
-			if (ndr_get_array_length(ndr, &r->dom_root) > ndr_get_array_size(ndr, &r->dom_root)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->dom_root), ndr_get_array_length(ndr, &r->dom_root));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->dom_root), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->dom_root, ndr_get_array_length(ndr, &r->dom_root), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dom_root_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Info200(struct ndr_print *ndr, const char *name, const struct dfs_Info200 *r)
-{
-	ndr_print_struct(ndr, name, "dfs_Info200");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "dom_root", r->dom_root);
-	ndr->depth++;
-	if (r->dom_root) {
-		ndr_print_string(ndr, "dom_root", r->dom_root);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_VolumeFlavor(struct ndr_push *ndr, int ndr_flags, enum dfs_VolumeFlavor r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_VolumeFlavor(struct ndr_pull *ndr, int ndr_flags, enum dfs_VolumeFlavor *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_VolumeFlavor(struct ndr_print *ndr, const char *name, enum dfs_VolumeFlavor r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case DFS_VOLUME_FLAVOR_STANDALONE: val = "DFS_VOLUME_FLAVOR_STANDALONE"; break;
-		case DFS_VOLUME_FLAVOR_AD_BLOB: val = "DFS_VOLUME_FLAVOR_AD_BLOB"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_dfs_Info300(struct ndr_push *ndr, int ndr_flags, const struct dfs_Info300 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_dfs_VolumeFlavor(ndr, NDR_SCALARS, r->flavor));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->dom_root));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->dom_root) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->dom_root, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->dom_root, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->dom_root, ndr_charset_length(r->dom_root, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Info300(struct ndr_pull *ndr, int ndr_flags, struct dfs_Info300 *r)
-{
-	uint32_t _ptr_dom_root;
-	TALLOC_CTX *_mem_save_dom_root_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_dfs_VolumeFlavor(ndr, NDR_SCALARS, &r->flavor));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dom_root));
-		if (_ptr_dom_root) {
-			NDR_PULL_ALLOC(ndr, r->dom_root);
-		} else {
-			r->dom_root = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->dom_root) {
-			_mem_save_dom_root_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->dom_root, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->dom_root));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->dom_root));
-			if (ndr_get_array_length(ndr, &r->dom_root) > ndr_get_array_size(ndr, &r->dom_root)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->dom_root), ndr_get_array_length(ndr, &r->dom_root));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->dom_root), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->dom_root, ndr_get_array_length(ndr, &r->dom_root), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dom_root_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Info300(struct ndr_print *ndr, const char *name, const struct dfs_Info300 *r)
-{
-	ndr_print_struct(ndr, name, "dfs_Info300");
-	ndr->depth++;
-	ndr_print_dfs_VolumeFlavor(ndr, "flavor", r->flavor);
-	ndr_print_ptr(ndr, "dom_root", r->dom_root);
-	ndr->depth++;
-	if (r->dom_root) {
-		ndr_print_string(ndr, "dom_root", r->dom_root);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_Info(struct ndr_push *ndr, int ndr_flags, const union dfs_Info *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 0: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info0));
-			break; }
-
-			case 1: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info2));
-			break; }
-
-			case 3: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info3));
-			break; }
-
-			case 4: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info4));
-			break; }
-
-			case 5: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info5));
-			break; }
-
-			case 6: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info6));
-			break; }
-
-			case 7: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info7));
-			break; }
-
-			case 100: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info100));
-			break; }
-
-			case 101: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info101));
-			break; }
-
-			case 102: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info102));
-			break; }
-
-			case 103: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info103));
-			break; }
-
-			case 104: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info104));
-			break; }
-
-			case 105: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info105));
-			break; }
-
-			case 106: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info106));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 0:
-				if (r->info0) {
-					NDR_CHECK(ndr_push_dfs_Info0(ndr, NDR_SCALARS, r->info0));
-				}
-			break;
-
-			case 1:
-				if (r->info1) {
-					NDR_CHECK(ndr_push_dfs_Info1(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1));
-				}
-			break;
-
-			case 2:
-				if (r->info2) {
-					NDR_CHECK(ndr_push_dfs_Info2(ndr, NDR_SCALARS|NDR_BUFFERS, r->info2));
-				}
-			break;
-
-			case 3:
-				if (r->info3) {
-					NDR_CHECK(ndr_push_dfs_Info3(ndr, NDR_SCALARS|NDR_BUFFERS, r->info3));
-				}
-			break;
-
-			case 4:
-				if (r->info4) {
-					NDR_CHECK(ndr_push_dfs_Info4(ndr, NDR_SCALARS|NDR_BUFFERS, r->info4));
-				}
-			break;
-
-			case 5:
-				if (r->info5) {
-					NDR_CHECK(ndr_push_dfs_Info5(ndr, NDR_SCALARS|NDR_BUFFERS, r->info5));
-				}
-			break;
-
-			case 6:
-				if (r->info6) {
-					NDR_CHECK(ndr_push_dfs_Info6(ndr, NDR_SCALARS|NDR_BUFFERS, r->info6));
-				}
-			break;
-
-			case 7:
-				if (r->info7) {
-					NDR_CHECK(ndr_push_dfs_Info7(ndr, NDR_SCALARS|NDR_BUFFERS, r->info7));
-				}
-			break;
-
-			case 100:
-				if (r->info100) {
-					NDR_CHECK(ndr_push_dfs_Info100(ndr, NDR_SCALARS|NDR_BUFFERS, r->info100));
-				}
-			break;
-
-			case 101:
-				if (r->info101) {
-					NDR_CHECK(ndr_push_dfs_Info101(ndr, NDR_SCALARS, r->info101));
-				}
-			break;
-
-			case 102:
-				if (r->info102) {
-					NDR_CHECK(ndr_push_dfs_Info102(ndr, NDR_SCALARS, r->info102));
-				}
-			break;
-
-			case 103:
-				if (r->info103) {
-					NDR_CHECK(ndr_push_dfs_Info103(ndr, NDR_SCALARS, r->info103));
-				}
-			break;
-
-			case 104:
-				if (r->info104) {
-					NDR_CHECK(ndr_push_dfs_Info104(ndr, NDR_SCALARS, r->info104));
-				}
-			break;
-
-			case 105:
-				if (r->info105) {
-					NDR_CHECK(ndr_push_dfs_Info105(ndr, NDR_SCALARS|NDR_BUFFERS, r->info105));
-				}
-			break;
-
-			case 106:
-				if (r->info106) {
-					NDR_CHECK(ndr_push_dfs_Info106(ndr, NDR_SCALARS, r->info106));
-				}
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Info(struct ndr_pull *ndr, int ndr_flags, union dfs_Info *r)
-{
-	int level;
-	uint32_t _level;
-	TALLOC_CTX *_mem_save_info0_0;
-	TALLOC_CTX *_mem_save_info1_0;
-	TALLOC_CTX *_mem_save_info2_0;
-	TALLOC_CTX *_mem_save_info3_0;
-	TALLOC_CTX *_mem_save_info4_0;
-	TALLOC_CTX *_mem_save_info5_0;
-	TALLOC_CTX *_mem_save_info6_0;
-	TALLOC_CTX *_mem_save_info7_0;
-	TALLOC_CTX *_mem_save_info100_0;
-	TALLOC_CTX *_mem_save_info101_0;
-	TALLOC_CTX *_mem_save_info102_0;
-	TALLOC_CTX *_mem_save_info103_0;
-	TALLOC_CTX *_mem_save_info104_0;
-	TALLOC_CTX *_mem_save_info105_0;
-	TALLOC_CTX *_mem_save_info106_0;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 0: {
-				uint32_t _ptr_info0;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info0));
-				if (_ptr_info0) {
-					NDR_PULL_ALLOC(ndr, r->info0);
-				} else {
-					r->info0 = NULL;
-				}
-			break; }
-
-			case 1: {
-				uint32_t _ptr_info1;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1));
-				if (_ptr_info1) {
-					NDR_PULL_ALLOC(ndr, r->info1);
-				} else {
-					r->info1 = NULL;
-				}
-			break; }
-
-			case 2: {
-				uint32_t _ptr_info2;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info2));
-				if (_ptr_info2) {
-					NDR_PULL_ALLOC(ndr, r->info2);
-				} else {
-					r->info2 = NULL;
-				}
-			break; }
-
-			case 3: {
-				uint32_t _ptr_info3;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info3));
-				if (_ptr_info3) {
-					NDR_PULL_ALLOC(ndr, r->info3);
-				} else {
-					r->info3 = NULL;
-				}
-			break; }
-
-			case 4: {
-				uint32_t _ptr_info4;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info4));
-				if (_ptr_info4) {
-					NDR_PULL_ALLOC(ndr, r->info4);
-				} else {
-					r->info4 = NULL;
-				}
-			break; }
-
-			case 5: {
-				uint32_t _ptr_info5;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info5));
-				if (_ptr_info5) {
-					NDR_PULL_ALLOC(ndr, r->info5);
-				} else {
-					r->info5 = NULL;
-				}
-			break; }
-
-			case 6: {
-				uint32_t _ptr_info6;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info6));
-				if (_ptr_info6) {
-					NDR_PULL_ALLOC(ndr, r->info6);
-				} else {
-					r->info6 = NULL;
-				}
-			break; }
-
-			case 7: {
-				uint32_t _ptr_info7;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info7));
-				if (_ptr_info7) {
-					NDR_PULL_ALLOC(ndr, r->info7);
-				} else {
-					r->info7 = NULL;
-				}
-			break; }
-
-			case 100: {
-				uint32_t _ptr_info100;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info100));
-				if (_ptr_info100) {
-					NDR_PULL_ALLOC(ndr, r->info100);
-				} else {
-					r->info100 = NULL;
-				}
-			break; }
-
-			case 101: {
-				uint32_t _ptr_info101;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info101));
-				if (_ptr_info101) {
-					NDR_PULL_ALLOC(ndr, r->info101);
-				} else {
-					r->info101 = NULL;
-				}
-			break; }
-
-			case 102: {
-				uint32_t _ptr_info102;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info102));
-				if (_ptr_info102) {
-					NDR_PULL_ALLOC(ndr, r->info102);
-				} else {
-					r->info102 = NULL;
-				}
-			break; }
-
-			case 103: {
-				uint32_t _ptr_info103;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info103));
-				if (_ptr_info103) {
-					NDR_PULL_ALLOC(ndr, r->info103);
-				} else {
-					r->info103 = NULL;
-				}
-			break; }
-
-			case 104: {
-				uint32_t _ptr_info104;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info104));
-				if (_ptr_info104) {
-					NDR_PULL_ALLOC(ndr, r->info104);
-				} else {
-					r->info104 = NULL;
-				}
-			break; }
-
-			case 105: {
-				uint32_t _ptr_info105;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info105));
-				if (_ptr_info105) {
-					NDR_PULL_ALLOC(ndr, r->info105);
-				} else {
-					r->info105 = NULL;
-				}
-			break; }
-
-			case 106: {
-				uint32_t _ptr_info106;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info106));
-				if (_ptr_info106) {
-					NDR_PULL_ALLOC(ndr, r->info106);
-				} else {
-					r->info106 = NULL;
-				}
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 0:
-				if (r->info0) {
-					_mem_save_info0_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info0, 0);
-					NDR_CHECK(ndr_pull_dfs_Info0(ndr, NDR_SCALARS, r->info0));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info0_0, 0);
-				}
-			break;
-
-			case 1:
-				if (r->info1) {
-					_mem_save_info1_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1, 0);
-					NDR_CHECK(ndr_pull_dfs_Info1(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1_0, 0);
-				}
-			break;
-
-			case 2:
-				if (r->info2) {
-					_mem_save_info2_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info2, 0);
-					NDR_CHECK(ndr_pull_dfs_Info2(ndr, NDR_SCALARS|NDR_BUFFERS, r->info2));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info2_0, 0);
-				}
-			break;
-
-			case 3:
-				if (r->info3) {
-					_mem_save_info3_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info3, 0);
-					NDR_CHECK(ndr_pull_dfs_Info3(ndr, NDR_SCALARS|NDR_BUFFERS, r->info3));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info3_0, 0);
-				}
-			break;
-
-			case 4:
-				if (r->info4) {
-					_mem_save_info4_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info4, 0);
-					NDR_CHECK(ndr_pull_dfs_Info4(ndr, NDR_SCALARS|NDR_BUFFERS, r->info4));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info4_0, 0);
-				}
-			break;
-
-			case 5:
-				if (r->info5) {
-					_mem_save_info5_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info5, 0);
-					NDR_CHECK(ndr_pull_dfs_Info5(ndr, NDR_SCALARS|NDR_BUFFERS, r->info5));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info5_0, 0);
-				}
-			break;
-
-			case 6:
-				if (r->info6) {
-					_mem_save_info6_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info6, 0);
-					NDR_CHECK(ndr_pull_dfs_Info6(ndr, NDR_SCALARS|NDR_BUFFERS, r->info6));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info6_0, 0);
-				}
-			break;
-
-			case 7:
-				if (r->info7) {
-					_mem_save_info7_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info7, 0);
-					NDR_CHECK(ndr_pull_dfs_Info7(ndr, NDR_SCALARS|NDR_BUFFERS, r->info7));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info7_0, 0);
-				}
-			break;
-
-			case 100:
-				if (r->info100) {
-					_mem_save_info100_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info100, 0);
-					NDR_CHECK(ndr_pull_dfs_Info100(ndr, NDR_SCALARS|NDR_BUFFERS, r->info100));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info100_0, 0);
-				}
-			break;
-
-			case 101:
-				if (r->info101) {
-					_mem_save_info101_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info101, 0);
-					NDR_CHECK(ndr_pull_dfs_Info101(ndr, NDR_SCALARS, r->info101));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info101_0, 0);
-				}
-			break;
-
-			case 102:
-				if (r->info102) {
-					_mem_save_info102_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info102, 0);
-					NDR_CHECK(ndr_pull_dfs_Info102(ndr, NDR_SCALARS, r->info102));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info102_0, 0);
-				}
-			break;
-
-			case 103:
-				if (r->info103) {
-					_mem_save_info103_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info103, 0);
-					NDR_CHECK(ndr_pull_dfs_Info103(ndr, NDR_SCALARS, r->info103));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info103_0, 0);
-				}
-			break;
-
-			case 104:
-				if (r->info104) {
-					_mem_save_info104_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info104, 0);
-					NDR_CHECK(ndr_pull_dfs_Info104(ndr, NDR_SCALARS, r->info104));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info104_0, 0);
-				}
-			break;
-
-			case 105:
-				if (r->info105) {
-					_mem_save_info105_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info105, 0);
-					NDR_CHECK(ndr_pull_dfs_Info105(ndr, NDR_SCALARS|NDR_BUFFERS, r->info105));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info105_0, 0);
-				}
-			break;
-
-			case 106:
-				if (r->info106) {
-					_mem_save_info106_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info106, 0);
-					NDR_CHECK(ndr_pull_dfs_Info106(ndr, NDR_SCALARS, r->info106));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info106_0, 0);
-				}
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Info(struct ndr_print *ndr, const char *name, const union dfs_Info *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "dfs_Info");
-	switch (level) {
-		case 0:
-			ndr_print_ptr(ndr, "info0", r->info0);
-			ndr->depth++;
-			if (r->info0) {
-				ndr_print_dfs_Info0(ndr, "info0", r->info0);
-			}
-			ndr->depth--;
-		break;
-
-		case 1:
-			ndr_print_ptr(ndr, "info1", r->info1);
-			ndr->depth++;
-			if (r->info1) {
-				ndr_print_dfs_Info1(ndr, "info1", r->info1);
-			}
-			ndr->depth--;
-		break;
-
-		case 2:
-			ndr_print_ptr(ndr, "info2", r->info2);
-			ndr->depth++;
-			if (r->info2) {
-				ndr_print_dfs_Info2(ndr, "info2", r->info2);
-			}
-			ndr->depth--;
-		break;
-
-		case 3:
-			ndr_print_ptr(ndr, "info3", r->info3);
-			ndr->depth++;
-			if (r->info3) {
-				ndr_print_dfs_Info3(ndr, "info3", r->info3);
-			}
-			ndr->depth--;
-		break;
-
-		case 4:
-			ndr_print_ptr(ndr, "info4", r->info4);
-			ndr->depth++;
-			if (r->info4) {
-				ndr_print_dfs_Info4(ndr, "info4", r->info4);
-			}
-			ndr->depth--;
-		break;
-
-		case 5:
-			ndr_print_ptr(ndr, "info5", r->info5);
-			ndr->depth++;
-			if (r->info5) {
-				ndr_print_dfs_Info5(ndr, "info5", r->info5);
-			}
-			ndr->depth--;
-		break;
-
-		case 6:
-			ndr_print_ptr(ndr, "info6", r->info6);
-			ndr->depth++;
-			if (r->info6) {
-				ndr_print_dfs_Info6(ndr, "info6", r->info6);
-			}
-			ndr->depth--;
-		break;
-
-		case 7:
-			ndr_print_ptr(ndr, "info7", r->info7);
-			ndr->depth++;
-			if (r->info7) {
-				ndr_print_dfs_Info7(ndr, "info7", r->info7);
-			}
-			ndr->depth--;
-		break;
-
-		case 100:
-			ndr_print_ptr(ndr, "info100", r->info100);
-			ndr->depth++;
-			if (r->info100) {
-				ndr_print_dfs_Info100(ndr, "info100", r->info100);
-			}
-			ndr->depth--;
-		break;
-
-		case 101:
-			ndr_print_ptr(ndr, "info101", r->info101);
-			ndr->depth++;
-			if (r->info101) {
-				ndr_print_dfs_Info101(ndr, "info101", r->info101);
-			}
-			ndr->depth--;
-		break;
-
-		case 102:
-			ndr_print_ptr(ndr, "info102", r->info102);
-			ndr->depth++;
-			if (r->info102) {
-				ndr_print_dfs_Info102(ndr, "info102", r->info102);
-			}
-			ndr->depth--;
-		break;
-
-		case 103:
-			ndr_print_ptr(ndr, "info103", r->info103);
-			ndr->depth++;
-			if (r->info103) {
-				ndr_print_dfs_Info103(ndr, "info103", r->info103);
-			}
-			ndr->depth--;
-		break;
-
-		case 104:
-			ndr_print_ptr(ndr, "info104", r->info104);
-			ndr->depth++;
-			if (r->info104) {
-				ndr_print_dfs_Info104(ndr, "info104", r->info104);
-			}
-			ndr->depth--;
-		break;
-
-		case 105:
-			ndr_print_ptr(ndr, "info105", r->info105);
-			ndr->depth++;
-			if (r->info105) {
-				ndr_print_dfs_Info105(ndr, "info105", r->info105);
-			}
-			ndr->depth--;
-		break;
-
-		case 106:
-			ndr_print_ptr(ndr, "info106", r->info106);
-			ndr->depth++;
-			if (r->info106) {
-				ndr_print_dfs_Info106(ndr, "info106", r->info106);
-			}
-			ndr->depth--;
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_dfs_EnumArray1(struct ndr_push *ndr, int ndr_flags, const struct dfs_EnumArray1 *r)
-{
-	uint32_t cntr_s_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->s));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->s) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_push_dfs_Info1(ndr, NDR_SCALARS, &r->s[cntr_s_1]));
-			}
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_push_dfs_Info1(ndr, NDR_BUFFERS, &r->s[cntr_s_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_EnumArray1(struct ndr_pull *ndr, int ndr_flags, struct dfs_EnumArray1 *r)
-{
-	uint32_t _ptr_s;
-	uint32_t cntr_s_1;
-	TALLOC_CTX *_mem_save_s_0;
-	TALLOC_CTX *_mem_save_s_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_s));
-		if (_ptr_s) {
-			NDR_PULL_ALLOC(ndr, r->s);
-		} else {
-			r->s = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->s) {
-			_mem_save_s_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->s, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->s));
-			NDR_PULL_ALLOC_N(ndr, r->s, ndr_get_array_size(ndr, &r->s));
-			_mem_save_s_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->s, 0);
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_pull_dfs_Info1(ndr, NDR_SCALARS, &r->s[cntr_s_1]));
-			}
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_pull_dfs_Info1(ndr, NDR_BUFFERS, &r->s[cntr_s_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_s_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_s_0, 0);
-		}
-		if (r->s) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->s, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_EnumArray1(struct ndr_print *ndr, const char *name, const struct dfs_EnumArray1 *r)
-{
-	uint32_t cntr_s_1;
-	ndr_print_struct(ndr, name, "dfs_EnumArray1");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "s", r->s);
-	ndr->depth++;
-	if (r->s) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "s", r->count);
-		ndr->depth++;
-		for (cntr_s_1=0;cntr_s_1<r->count;cntr_s_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_s_1) != -1) {
-				ndr_print_dfs_Info1(ndr, "s", &r->s[cntr_s_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_EnumArray2(struct ndr_push *ndr, int ndr_flags, const struct dfs_EnumArray2 *r)
-{
-	uint32_t cntr_s_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->s));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->s) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_push_dfs_Info2(ndr, NDR_SCALARS, &r->s[cntr_s_1]));
-			}
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_push_dfs_Info2(ndr, NDR_BUFFERS, &r->s[cntr_s_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_EnumArray2(struct ndr_pull *ndr, int ndr_flags, struct dfs_EnumArray2 *r)
-{
-	uint32_t _ptr_s;
-	uint32_t cntr_s_1;
-	TALLOC_CTX *_mem_save_s_0;
-	TALLOC_CTX *_mem_save_s_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_s));
-		if (_ptr_s) {
-			NDR_PULL_ALLOC(ndr, r->s);
-		} else {
-			r->s = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->s) {
-			_mem_save_s_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->s, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->s));
-			NDR_PULL_ALLOC_N(ndr, r->s, ndr_get_array_size(ndr, &r->s));
-			_mem_save_s_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->s, 0);
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_pull_dfs_Info2(ndr, NDR_SCALARS, &r->s[cntr_s_1]));
-			}
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_pull_dfs_Info2(ndr, NDR_BUFFERS, &r->s[cntr_s_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_s_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_s_0, 0);
-		}
-		if (r->s) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->s, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_EnumArray2(struct ndr_print *ndr, const char *name, const struct dfs_EnumArray2 *r)
-{
-	uint32_t cntr_s_1;
-	ndr_print_struct(ndr, name, "dfs_EnumArray2");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "s", r->s);
-	ndr->depth++;
-	if (r->s) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "s", r->count);
-		ndr->depth++;
-		for (cntr_s_1=0;cntr_s_1<r->count;cntr_s_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_s_1) != -1) {
-				ndr_print_dfs_Info2(ndr, "s", &r->s[cntr_s_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_EnumArray3(struct ndr_push *ndr, int ndr_flags, const struct dfs_EnumArray3 *r)
-{
-	uint32_t cntr_s_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->s));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->s) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_push_dfs_Info3(ndr, NDR_SCALARS, &r->s[cntr_s_1]));
-			}
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_push_dfs_Info3(ndr, NDR_BUFFERS, &r->s[cntr_s_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_EnumArray3(struct ndr_pull *ndr, int ndr_flags, struct dfs_EnumArray3 *r)
-{
-	uint32_t _ptr_s;
-	uint32_t cntr_s_1;
-	TALLOC_CTX *_mem_save_s_0;
-	TALLOC_CTX *_mem_save_s_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_s));
-		if (_ptr_s) {
-			NDR_PULL_ALLOC(ndr, r->s);
-		} else {
-			r->s = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->s) {
-			_mem_save_s_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->s, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->s));
-			NDR_PULL_ALLOC_N(ndr, r->s, ndr_get_array_size(ndr, &r->s));
-			_mem_save_s_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->s, 0);
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_pull_dfs_Info3(ndr, NDR_SCALARS, &r->s[cntr_s_1]));
-			}
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_pull_dfs_Info3(ndr, NDR_BUFFERS, &r->s[cntr_s_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_s_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_s_0, 0);
-		}
-		if (r->s) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->s, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_EnumArray3(struct ndr_print *ndr, const char *name, const struct dfs_EnumArray3 *r)
-{
-	uint32_t cntr_s_1;
-	ndr_print_struct(ndr, name, "dfs_EnumArray3");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "s", r->s);
-	ndr->depth++;
-	if (r->s) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "s", r->count);
-		ndr->depth++;
-		for (cntr_s_1=0;cntr_s_1<r->count;cntr_s_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_s_1) != -1) {
-				ndr_print_dfs_Info3(ndr, "s", &r->s[cntr_s_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_EnumArray4(struct ndr_push *ndr, int ndr_flags, const struct dfs_EnumArray4 *r)
-{
-	uint32_t cntr_s_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->s));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->s) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_push_dfs_Info4(ndr, NDR_SCALARS, &r->s[cntr_s_1]));
-			}
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_push_dfs_Info4(ndr, NDR_BUFFERS, &r->s[cntr_s_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_EnumArray4(struct ndr_pull *ndr, int ndr_flags, struct dfs_EnumArray4 *r)
-{
-	uint32_t _ptr_s;
-	uint32_t cntr_s_1;
-	TALLOC_CTX *_mem_save_s_0;
-	TALLOC_CTX *_mem_save_s_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_s));
-		if (_ptr_s) {
-			NDR_PULL_ALLOC(ndr, r->s);
-		} else {
-			r->s = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->s) {
-			_mem_save_s_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->s, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->s));
-			NDR_PULL_ALLOC_N(ndr, r->s, ndr_get_array_size(ndr, &r->s));
-			_mem_save_s_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->s, 0);
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_pull_dfs_Info4(ndr, NDR_SCALARS, &r->s[cntr_s_1]));
-			}
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_pull_dfs_Info4(ndr, NDR_BUFFERS, &r->s[cntr_s_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_s_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_s_0, 0);
-		}
-		if (r->s) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->s, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_EnumArray4(struct ndr_print *ndr, const char *name, const struct dfs_EnumArray4 *r)
-{
-	uint32_t cntr_s_1;
-	ndr_print_struct(ndr, name, "dfs_EnumArray4");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "s", r->s);
-	ndr->depth++;
-	if (r->s) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "s", r->count);
-		ndr->depth++;
-		for (cntr_s_1=0;cntr_s_1<r->count;cntr_s_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_s_1) != -1) {
-				ndr_print_dfs_Info4(ndr, "s", &r->s[cntr_s_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_EnumArray5(struct ndr_push *ndr, int ndr_flags, const struct dfs_EnumArray5 *r)
-{
-	uint32_t cntr_s_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->s));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->s) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_push_dfs_Info5(ndr, NDR_SCALARS, &r->s[cntr_s_1]));
-			}
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_push_dfs_Info5(ndr, NDR_BUFFERS, &r->s[cntr_s_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_EnumArray5(struct ndr_pull *ndr, int ndr_flags, struct dfs_EnumArray5 *r)
-{
-	uint32_t _ptr_s;
-	uint32_t cntr_s_1;
-	TALLOC_CTX *_mem_save_s_0;
-	TALLOC_CTX *_mem_save_s_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_s));
-		if (_ptr_s) {
-			NDR_PULL_ALLOC(ndr, r->s);
-		} else {
-			r->s = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->s) {
-			_mem_save_s_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->s, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->s));
-			NDR_PULL_ALLOC_N(ndr, r->s, ndr_get_array_size(ndr, &r->s));
-			_mem_save_s_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->s, 0);
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_pull_dfs_Info5(ndr, NDR_SCALARS, &r->s[cntr_s_1]));
-			}
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_pull_dfs_Info5(ndr, NDR_BUFFERS, &r->s[cntr_s_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_s_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_s_0, 0);
-		}
-		if (r->s) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->s, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_EnumArray5(struct ndr_print *ndr, const char *name, const struct dfs_EnumArray5 *r)
-{
-	uint32_t cntr_s_1;
-	ndr_print_struct(ndr, name, "dfs_EnumArray5");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "s", r->s);
-	ndr->depth++;
-	if (r->s) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "s", r->count);
-		ndr->depth++;
-		for (cntr_s_1=0;cntr_s_1<r->count;cntr_s_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_s_1) != -1) {
-				ndr_print_dfs_Info5(ndr, "s", &r->s[cntr_s_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_EnumArray6(struct ndr_push *ndr, int ndr_flags, const struct dfs_EnumArray6 *r)
-{
-	uint32_t cntr_s_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->s));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->s) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_push_dfs_Info6(ndr, NDR_SCALARS, &r->s[cntr_s_1]));
-			}
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_push_dfs_Info6(ndr, NDR_BUFFERS, &r->s[cntr_s_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_EnumArray6(struct ndr_pull *ndr, int ndr_flags, struct dfs_EnumArray6 *r)
-{
-	uint32_t _ptr_s;
-	uint32_t cntr_s_1;
-	TALLOC_CTX *_mem_save_s_0;
-	TALLOC_CTX *_mem_save_s_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_s));
-		if (_ptr_s) {
-			NDR_PULL_ALLOC(ndr, r->s);
-		} else {
-			r->s = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->s) {
-			_mem_save_s_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->s, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->s));
-			NDR_PULL_ALLOC_N(ndr, r->s, ndr_get_array_size(ndr, &r->s));
-			_mem_save_s_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->s, 0);
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_pull_dfs_Info6(ndr, NDR_SCALARS, &r->s[cntr_s_1]));
-			}
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_pull_dfs_Info6(ndr, NDR_BUFFERS, &r->s[cntr_s_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_s_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_s_0, 0);
-		}
-		if (r->s) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->s, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_EnumArray6(struct ndr_print *ndr, const char *name, const struct dfs_EnumArray6 *r)
-{
-	uint32_t cntr_s_1;
-	ndr_print_struct(ndr, name, "dfs_EnumArray6");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "s", r->s);
-	ndr->depth++;
-	if (r->s) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "s", r->count);
-		ndr->depth++;
-		for (cntr_s_1=0;cntr_s_1<r->count;cntr_s_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_s_1) != -1) {
-				ndr_print_dfs_Info6(ndr, "s", &r->s[cntr_s_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_EnumArray200(struct ndr_push *ndr, int ndr_flags, const struct dfs_EnumArray200 *r)
-{
-	uint32_t cntr_s_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->s));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->s) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_push_dfs_Info200(ndr, NDR_SCALARS, &r->s[cntr_s_1]));
-			}
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_push_dfs_Info200(ndr, NDR_BUFFERS, &r->s[cntr_s_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_EnumArray200(struct ndr_pull *ndr, int ndr_flags, struct dfs_EnumArray200 *r)
-{
-	uint32_t _ptr_s;
-	uint32_t cntr_s_1;
-	TALLOC_CTX *_mem_save_s_0;
-	TALLOC_CTX *_mem_save_s_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_s));
-		if (_ptr_s) {
-			NDR_PULL_ALLOC(ndr, r->s);
-		} else {
-			r->s = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->s) {
-			_mem_save_s_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->s, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->s));
-			NDR_PULL_ALLOC_N(ndr, r->s, ndr_get_array_size(ndr, &r->s));
-			_mem_save_s_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->s, 0);
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_pull_dfs_Info200(ndr, NDR_SCALARS, &r->s[cntr_s_1]));
-			}
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_pull_dfs_Info200(ndr, NDR_BUFFERS, &r->s[cntr_s_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_s_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_s_0, 0);
-		}
-		if (r->s) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->s, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_EnumArray200(struct ndr_print *ndr, const char *name, const struct dfs_EnumArray200 *r)
-{
-	uint32_t cntr_s_1;
-	ndr_print_struct(ndr, name, "dfs_EnumArray200");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "s", r->s);
-	ndr->depth++;
-	if (r->s) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "s", r->count);
-		ndr->depth++;
-		for (cntr_s_1=0;cntr_s_1<r->count;cntr_s_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_s_1) != -1) {
-				ndr_print_dfs_Info200(ndr, "s", &r->s[cntr_s_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_EnumArray300(struct ndr_push *ndr, int ndr_flags, const struct dfs_EnumArray300 *r)
-{
-	uint32_t cntr_s_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->s));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->s) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_push_dfs_Info300(ndr, NDR_SCALARS, &r->s[cntr_s_1]));
-			}
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_push_dfs_Info300(ndr, NDR_BUFFERS, &r->s[cntr_s_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_EnumArray300(struct ndr_pull *ndr, int ndr_flags, struct dfs_EnumArray300 *r)
-{
-	uint32_t _ptr_s;
-	uint32_t cntr_s_1;
-	TALLOC_CTX *_mem_save_s_0;
-	TALLOC_CTX *_mem_save_s_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_s));
-		if (_ptr_s) {
-			NDR_PULL_ALLOC(ndr, r->s);
-		} else {
-			r->s = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->s) {
-			_mem_save_s_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->s, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->s));
-			NDR_PULL_ALLOC_N(ndr, r->s, ndr_get_array_size(ndr, &r->s));
-			_mem_save_s_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->s, 0);
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_pull_dfs_Info300(ndr, NDR_SCALARS, &r->s[cntr_s_1]));
-			}
-			for (cntr_s_1 = 0; cntr_s_1 < r->count; cntr_s_1++) {
-				NDR_CHECK(ndr_pull_dfs_Info300(ndr, NDR_BUFFERS, &r->s[cntr_s_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_s_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_s_0, 0);
-		}
-		if (r->s) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->s, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_EnumArray300(struct ndr_print *ndr, const char *name, const struct dfs_EnumArray300 *r)
-{
-	uint32_t cntr_s_1;
-	ndr_print_struct(ndr, name, "dfs_EnumArray300");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "s", r->s);
-	ndr->depth++;
-	if (r->s) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "s", r->count);
-		ndr->depth++;
-		for (cntr_s_1=0;cntr_s_1<r->count;cntr_s_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_s_1) != -1) {
-				ndr_print_dfs_Info300(ndr, "s", &r->s[cntr_s_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_EnumInfo(struct ndr_push *ndr, int ndr_flags, const union dfs_EnumInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 1: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info2));
-			break; }
-
-			case 3: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info3));
-			break; }
-
-			case 4: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info4));
-			break; }
-
-			case 5: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info5));
-			break; }
-
-			case 6: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info6));
-			break; }
-
-			case 200: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info200));
-			break; }
-
-			case 300: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info300));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 1:
-				if (r->info1) {
-					NDR_CHECK(ndr_push_dfs_EnumArray1(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1));
-				}
-			break;
-
-			case 2:
-				if (r->info2) {
-					NDR_CHECK(ndr_push_dfs_EnumArray2(ndr, NDR_SCALARS|NDR_BUFFERS, r->info2));
-				}
-			break;
-
-			case 3:
-				if (r->info3) {
-					NDR_CHECK(ndr_push_dfs_EnumArray3(ndr, NDR_SCALARS|NDR_BUFFERS, r->info3));
-				}
-			break;
-
-			case 4:
-				if (r->info4) {
-					NDR_CHECK(ndr_push_dfs_EnumArray4(ndr, NDR_SCALARS|NDR_BUFFERS, r->info4));
-				}
-			break;
-
-			case 5:
-				if (r->info5) {
-					NDR_CHECK(ndr_push_dfs_EnumArray5(ndr, NDR_SCALARS|NDR_BUFFERS, r->info5));
-				}
-			break;
-
-			case 6:
-				if (r->info6) {
-					NDR_CHECK(ndr_push_dfs_EnumArray6(ndr, NDR_SCALARS|NDR_BUFFERS, r->info6));
-				}
-			break;
-
-			case 200:
-				if (r->info200) {
-					NDR_CHECK(ndr_push_dfs_EnumArray200(ndr, NDR_SCALARS|NDR_BUFFERS, r->info200));
-				}
-			break;
-
-			case 300:
-				if (r->info300) {
-					NDR_CHECK(ndr_push_dfs_EnumArray300(ndr, NDR_SCALARS|NDR_BUFFERS, r->info300));
-				}
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_EnumInfo(struct ndr_pull *ndr, int ndr_flags, union dfs_EnumInfo *r)
-{
-	int level;
-	uint32_t _level;
-	TALLOC_CTX *_mem_save_info1_0;
-	TALLOC_CTX *_mem_save_info2_0;
-	TALLOC_CTX *_mem_save_info3_0;
-	TALLOC_CTX *_mem_save_info4_0;
-	TALLOC_CTX *_mem_save_info5_0;
-	TALLOC_CTX *_mem_save_info6_0;
-	TALLOC_CTX *_mem_save_info200_0;
-	TALLOC_CTX *_mem_save_info300_0;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 1: {
-				uint32_t _ptr_info1;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1));
-				if (_ptr_info1) {
-					NDR_PULL_ALLOC(ndr, r->info1);
-				} else {
-					r->info1 = NULL;
-				}
-			break; }
-
-			case 2: {
-				uint32_t _ptr_info2;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info2));
-				if (_ptr_info2) {
-					NDR_PULL_ALLOC(ndr, r->info2);
-				} else {
-					r->info2 = NULL;
-				}
-			break; }
-
-			case 3: {
-				uint32_t _ptr_info3;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info3));
-				if (_ptr_info3) {
-					NDR_PULL_ALLOC(ndr, r->info3);
-				} else {
-					r->info3 = NULL;
-				}
-			break; }
-
-			case 4: {
-				uint32_t _ptr_info4;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info4));
-				if (_ptr_info4) {
-					NDR_PULL_ALLOC(ndr, r->info4);
-				} else {
-					r->info4 = NULL;
-				}
-			break; }
-
-			case 5: {
-				uint32_t _ptr_info5;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info5));
-				if (_ptr_info5) {
-					NDR_PULL_ALLOC(ndr, r->info5);
-				} else {
-					r->info5 = NULL;
-				}
-			break; }
-
-			case 6: {
-				uint32_t _ptr_info6;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info6));
-				if (_ptr_info6) {
-					NDR_PULL_ALLOC(ndr, r->info6);
-				} else {
-					r->info6 = NULL;
-				}
-			break; }
-
-			case 200: {
-				uint32_t _ptr_info200;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info200));
-				if (_ptr_info200) {
-					NDR_PULL_ALLOC(ndr, r->info200);
-				} else {
-					r->info200 = NULL;
-				}
-			break; }
-
-			case 300: {
-				uint32_t _ptr_info300;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info300));
-				if (_ptr_info300) {
-					NDR_PULL_ALLOC(ndr, r->info300);
-				} else {
-					r->info300 = NULL;
-				}
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 1:
-				if (r->info1) {
-					_mem_save_info1_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1, 0);
-					NDR_CHECK(ndr_pull_dfs_EnumArray1(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1_0, 0);
-				}
-			break;
-
-			case 2:
-				if (r->info2) {
-					_mem_save_info2_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info2, 0);
-					NDR_CHECK(ndr_pull_dfs_EnumArray2(ndr, NDR_SCALARS|NDR_BUFFERS, r->info2));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info2_0, 0);
-				}
-			break;
-
-			case 3:
-				if (r->info3) {
-					_mem_save_info3_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info3, 0);
-					NDR_CHECK(ndr_pull_dfs_EnumArray3(ndr, NDR_SCALARS|NDR_BUFFERS, r->info3));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info3_0, 0);
-				}
-			break;
-
-			case 4:
-				if (r->info4) {
-					_mem_save_info4_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info4, 0);
-					NDR_CHECK(ndr_pull_dfs_EnumArray4(ndr, NDR_SCALARS|NDR_BUFFERS, r->info4));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info4_0, 0);
-				}
-			break;
-
-			case 5:
-				if (r->info5) {
-					_mem_save_info5_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info5, 0);
-					NDR_CHECK(ndr_pull_dfs_EnumArray5(ndr, NDR_SCALARS|NDR_BUFFERS, r->info5));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info5_0, 0);
-				}
-			break;
-
-			case 6:
-				if (r->info6) {
-					_mem_save_info6_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info6, 0);
-					NDR_CHECK(ndr_pull_dfs_EnumArray6(ndr, NDR_SCALARS|NDR_BUFFERS, r->info6));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info6_0, 0);
-				}
-			break;
-
-			case 200:
-				if (r->info200) {
-					_mem_save_info200_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info200, 0);
-					NDR_CHECK(ndr_pull_dfs_EnumArray200(ndr, NDR_SCALARS|NDR_BUFFERS, r->info200));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info200_0, 0);
-				}
-			break;
-
-			case 300:
-				if (r->info300) {
-					_mem_save_info300_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info300, 0);
-					NDR_CHECK(ndr_pull_dfs_EnumArray300(ndr, NDR_SCALARS|NDR_BUFFERS, r->info300));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info300_0, 0);
-				}
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_EnumInfo(struct ndr_print *ndr, const char *name, const union dfs_EnumInfo *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "dfs_EnumInfo");
-	switch (level) {
-		case 1:
-			ndr_print_ptr(ndr, "info1", r->info1);
-			ndr->depth++;
-			if (r->info1) {
-				ndr_print_dfs_EnumArray1(ndr, "info1", r->info1);
-			}
-			ndr->depth--;
-		break;
-
-		case 2:
-			ndr_print_ptr(ndr, "info2", r->info2);
-			ndr->depth++;
-			if (r->info2) {
-				ndr_print_dfs_EnumArray2(ndr, "info2", r->info2);
-			}
-			ndr->depth--;
-		break;
-
-		case 3:
-			ndr_print_ptr(ndr, "info3", r->info3);
-			ndr->depth++;
-			if (r->info3) {
-				ndr_print_dfs_EnumArray3(ndr, "info3", r->info3);
-			}
-			ndr->depth--;
-		break;
-
-		case 4:
-			ndr_print_ptr(ndr, "info4", r->info4);
-			ndr->depth++;
-			if (r->info4) {
-				ndr_print_dfs_EnumArray4(ndr, "info4", r->info4);
-			}
-			ndr->depth--;
-		break;
-
-		case 5:
-			ndr_print_ptr(ndr, "info5", r->info5);
-			ndr->depth++;
-			if (r->info5) {
-				ndr_print_dfs_EnumArray5(ndr, "info5", r->info5);
-			}
-			ndr->depth--;
-		break;
-
-		case 6:
-			ndr_print_ptr(ndr, "info6", r->info6);
-			ndr->depth++;
-			if (r->info6) {
-				ndr_print_dfs_EnumArray6(ndr, "info6", r->info6);
-			}
-			ndr->depth--;
-		break;
-
-		case 200:
-			ndr_print_ptr(ndr, "info200", r->info200);
-			ndr->depth++;
-			if (r->info200) {
-				ndr_print_dfs_EnumArray200(ndr, "info200", r->info200);
-			}
-			ndr->depth--;
-		break;
-
-		case 300:
-			ndr_print_ptr(ndr, "info300", r->info300);
-			ndr->depth++;
-			if (r->info300) {
-				ndr_print_dfs_EnumArray300(ndr, "info300", r->info300);
-			}
-			ndr->depth--;
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_dfs_EnumStruct(struct ndr_push *ndr, int ndr_flags, const struct dfs_EnumStruct *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->level));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->e, r->level));
-		NDR_CHECK(ndr_push_dfs_EnumInfo(ndr, NDR_SCALARS, &r->e));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_dfs_EnumInfo(ndr, NDR_BUFFERS, &r->e));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_EnumStruct(struct ndr_pull *ndr, int ndr_flags, struct dfs_EnumStruct *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->level));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->e, r->level));
-		NDR_CHECK(ndr_pull_dfs_EnumInfo(ndr, NDR_SCALARS, &r->e));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_dfs_EnumInfo(ndr, NDR_BUFFERS, &r->e));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_EnumStruct(struct ndr_print *ndr, const char *name, const struct dfs_EnumStruct *r)
-{
-	ndr_print_struct(ndr, name, "dfs_EnumStruct");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "level", r->level);
-	ndr_print_set_switch_value(ndr, &r->e, r->level);
-	ndr_print_dfs_EnumInfo(ndr, "e", &r->e);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_UnknownStruct(struct ndr_push *ndr, int ndr_flags, const struct dfs_UnknownStruct *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown1));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->unknown2));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->unknown2) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->unknown2, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->unknown2, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->unknown2, ndr_charset_length(r->unknown2, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_UnknownStruct(struct ndr_pull *ndr, int ndr_flags, struct dfs_UnknownStruct *r)
-{
-	uint32_t _ptr_unknown2;
-	TALLOC_CTX *_mem_save_unknown2_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown2));
-		if (_ptr_unknown2) {
-			NDR_PULL_ALLOC(ndr, r->unknown2);
-		} else {
-			r->unknown2 = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->unknown2) {
-			_mem_save_unknown2_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->unknown2, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->unknown2));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->unknown2));
-			if (ndr_get_array_length(ndr, &r->unknown2) > ndr_get_array_size(ndr, &r->unknown2)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->unknown2), ndr_get_array_length(ndr, &r->unknown2));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->unknown2), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->unknown2, ndr_get_array_length(ndr, &r->unknown2), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown2_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_UnknownStruct(struct ndr_print *ndr, const char *name, const struct dfs_UnknownStruct *r)
-{
-	ndr_print_struct(ndr, name, "dfs_UnknownStruct");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "unknown1", r->unknown1);
-	ndr_print_ptr(ndr, "unknown2", r->unknown2);
-	ndr->depth++;
-	if (r->unknown2) {
-		ndr_print_string(ndr, "unknown2", r->unknown2);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_dfs_GetManagerVersion(struct ndr_push *ndr, int flags, const struct dfs_GetManagerVersion *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.version == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_dfs_ManagerVersion(ndr, NDR_SCALARS, *r->out.version));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_dfs_GetManagerVersion(struct ndr_pull *ndr, int flags, struct dfs_GetManagerVersion *r)
-{
-	TALLOC_CTX *_mem_save_version_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_PULL_ALLOC(ndr, r->out.version);
-		ZERO_STRUCTP(r->out.version);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.version);
-		}
-		_mem_save_version_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.version, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_dfs_ManagerVersion(ndr, NDR_SCALARS, r->out.version));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_version_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_GetManagerVersion(struct ndr_print *ndr, const char *name, int flags, const struct dfs_GetManagerVersion *r)
-{
-	ndr_print_struct(ndr, name, "dfs_GetManagerVersion");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dfs_GetManagerVersion");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dfs_GetManagerVersion");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "version", r->out.version);
-		ndr->depth++;
-		ndr_print_dfs_ManagerVersion(ndr, "version", *r->out.version);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_Add(struct ndr_push *ndr, int flags, const struct dfs_Add *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.path == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.path, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.path, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.path, ndr_charset_length(r->in.path, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		if (r->in.server == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server, ndr_charset_length(r->in.server, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.share));
-		if (r->in.share) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.share, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.share, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.share, ndr_charset_length(r->in.share, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.comment));
-		if (r->in.comment) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.comment, ndr_charset_length(r->in.comment, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Add(struct ndr_pull *ndr, int flags, struct dfs_Add *r)
-{
-	uint32_t _ptr_share;
-	uint32_t _ptr_comment;
-	TALLOC_CTX *_mem_save_share_0;
-	TALLOC_CTX *_mem_save_comment_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.path));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.path));
-		if (ndr_get_array_length(ndr, &r->in.path) > ndr_get_array_size(ndr, &r->in.path)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.path), ndr_get_array_length(ndr, &r->in.path));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.path), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.path, ndr_get_array_length(ndr, &r->in.path), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server));
-		if (ndr_get_array_length(ndr, &r->in.server) > ndr_get_array_size(ndr, &r->in.server)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server), ndr_get_array_length(ndr, &r->in.server));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server, ndr_get_array_length(ndr, &r->in.server), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_share));
-		if (_ptr_share) {
-			NDR_PULL_ALLOC(ndr, r->in.share);
-		} else {
-			r->in.share = NULL;
-		}
-		if (r->in.share) {
-			_mem_save_share_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.share, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.share));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.share));
-			if (ndr_get_array_length(ndr, &r->in.share) > ndr_get_array_size(ndr, &r->in.share)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.share), ndr_get_array_length(ndr, &r->in.share));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.share), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.share, ndr_get_array_length(ndr, &r->in.share), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_share_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_comment));
-		if (_ptr_comment) {
-			NDR_PULL_ALLOC(ndr, r->in.comment);
-		} else {
-			r->in.comment = NULL;
-		}
-		if (r->in.comment) {
-			_mem_save_comment_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.comment, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.comment));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.comment));
-			if (ndr_get_array_length(ndr, &r->in.comment) > ndr_get_array_size(ndr, &r->in.comment)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.comment), ndr_get_array_length(ndr, &r->in.comment));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.comment), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.comment, ndr_get_array_length(ndr, &r->in.comment), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_comment_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Add(struct ndr_print *ndr, const char *name, int flags, const struct dfs_Add *r)
-{
-	ndr_print_struct(ndr, name, "dfs_Add");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dfs_Add");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "path", r->in.path);
-		ndr->depth++;
-		ndr_print_string(ndr, "path", r->in.path);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "server", r->in.server);
-		ndr->depth++;
-		ndr_print_string(ndr, "server", r->in.server);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "share", r->in.share);
-		ndr->depth++;
-		if (r->in.share) {
-			ndr_print_string(ndr, "share", r->in.share);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "comment", r->in.comment);
-		ndr->depth++;
-		if (r->in.comment) {
-			ndr_print_string(ndr, "comment", r->in.comment);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "flags", r->in.flags);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dfs_Add");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_Remove(struct ndr_push *ndr, int flags, const struct dfs_Remove *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.dfs_entry_path == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dfs_entry_path, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dfs_entry_path, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.dfs_entry_path, ndr_charset_length(r->in.dfs_entry_path, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.servername));
-		if (r->in.servername) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.servername, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.servername, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.servername, ndr_charset_length(r->in.servername, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.sharename));
-		if (r->in.sharename) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.sharename, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.sharename, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.sharename, ndr_charset_length(r->in.sharename, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Remove(struct ndr_pull *ndr, int flags, struct dfs_Remove *r)
-{
-	uint32_t _ptr_servername;
-	uint32_t _ptr_sharename;
-	TALLOC_CTX *_mem_save_servername_0;
-	TALLOC_CTX *_mem_save_sharename_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.dfs_entry_path));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.dfs_entry_path));
-		if (ndr_get_array_length(ndr, &r->in.dfs_entry_path) > ndr_get_array_size(ndr, &r->in.dfs_entry_path)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.dfs_entry_path), ndr_get_array_length(ndr, &r->in.dfs_entry_path));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.dfs_entry_path), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.dfs_entry_path, ndr_get_array_length(ndr, &r->in.dfs_entry_path), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_servername));
-		if (_ptr_servername) {
-			NDR_PULL_ALLOC(ndr, r->in.servername);
-		} else {
-			r->in.servername = NULL;
-		}
-		if (r->in.servername) {
-			_mem_save_servername_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.servername, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.servername));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.servername));
-			if (ndr_get_array_length(ndr, &r->in.servername) > ndr_get_array_size(ndr, &r->in.servername)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.servername), ndr_get_array_length(ndr, &r->in.servername));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.servername, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_servername_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sharename));
-		if (_ptr_sharename) {
-			NDR_PULL_ALLOC(ndr, r->in.sharename);
-		} else {
-			r->in.sharename = NULL;
-		}
-		if (r->in.sharename) {
-			_mem_save_sharename_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.sharename, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.sharename));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.sharename));
-			if (ndr_get_array_length(ndr, &r->in.sharename) > ndr_get_array_size(ndr, &r->in.sharename)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.sharename), ndr_get_array_length(ndr, &r->in.sharename));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.sharename), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.sharename, ndr_get_array_length(ndr, &r->in.sharename), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sharename_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Remove(struct ndr_print *ndr, const char *name, int flags, const struct dfs_Remove *r)
-{
-	ndr_print_struct(ndr, name, "dfs_Remove");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dfs_Remove");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "dfs_entry_path", r->in.dfs_entry_path);
-		ndr->depth++;
-		ndr_print_string(ndr, "dfs_entry_path", r->in.dfs_entry_path);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "servername", r->in.servername);
-		ndr->depth++;
-		if (r->in.servername) {
-			ndr_print_string(ndr, "servername", r->in.servername);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sharename", r->in.sharename);
-		ndr->depth++;
-		if (r->in.sharename) {
-			ndr_print_string(ndr, "sharename", r->in.sharename);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dfs_Remove");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_SetInfo(struct ndr_push *ndr, int flags, const struct dfs_SetInfo *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dfs_entry_path, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dfs_entry_path, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.dfs_entry_path, ndr_charset_length(r->in.dfs_entry_path, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.servername));
-		if (r->in.servername) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.servername, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.servername, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.servername, ndr_charset_length(r->in.servername, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.sharename));
-		if (r->in.sharename) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.sharename, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.sharename, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.sharename, ndr_charset_length(r->in.sharename, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.info, r->in.level));
-		NDR_CHECK(ndr_push_dfs_Info(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_SetInfo(struct ndr_pull *ndr, int flags, struct dfs_SetInfo *r)
-{
-	uint32_t _ptr_servername;
-	uint32_t _ptr_sharename;
-	TALLOC_CTX *_mem_save_servername_0;
-	TALLOC_CTX *_mem_save_sharename_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.dfs_entry_path));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.dfs_entry_path));
-		if (ndr_get_array_length(ndr, &r->in.dfs_entry_path) > ndr_get_array_size(ndr, &r->in.dfs_entry_path)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.dfs_entry_path), ndr_get_array_length(ndr, &r->in.dfs_entry_path));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.dfs_entry_path), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.dfs_entry_path, ndr_get_array_length(ndr, &r->in.dfs_entry_path), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_servername));
-		if (_ptr_servername) {
-			NDR_PULL_ALLOC(ndr, r->in.servername);
-		} else {
-			r->in.servername = NULL;
-		}
-		if (r->in.servername) {
-			_mem_save_servername_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.servername, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.servername));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.servername));
-			if (ndr_get_array_length(ndr, &r->in.servername) > ndr_get_array_size(ndr, &r->in.servername)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.servername), ndr_get_array_length(ndr, &r->in.servername));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.servername, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_servername_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sharename));
-		if (_ptr_sharename) {
-			NDR_PULL_ALLOC(ndr, r->in.sharename);
-		} else {
-			r->in.sharename = NULL;
-		}
-		if (r->in.sharename) {
-			_mem_save_sharename_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.sharename, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.sharename));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.sharename));
-			if (ndr_get_array_length(ndr, &r->in.sharename) > ndr_get_array_size(ndr, &r->in.sharename)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.sharename), ndr_get_array_length(ndr, &r->in.sharename));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.sharename), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.sharename, ndr_get_array_length(ndr, &r->in.sharename), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sharename_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.info, r->in.level));
-		NDR_CHECK(ndr_pull_dfs_Info(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_SetInfo(struct ndr_print *ndr, const char *name, int flags, const struct dfs_SetInfo *r)
-{
-	ndr_print_struct(ndr, name, "dfs_SetInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dfs_SetInfo");
-		ndr->depth++;
-		ndr_print_string(ndr, "dfs_entry_path", r->in.dfs_entry_path);
-		ndr_print_ptr(ndr, "servername", r->in.servername);
-		ndr->depth++;
-		if (r->in.servername) {
-			ndr_print_string(ndr, "servername", r->in.servername);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sharename", r->in.sharename);
-		ndr->depth++;
-		if (r->in.sharename) {
-			ndr_print_string(ndr, "sharename", r->in.sharename);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "info", r->in.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->in.info, r->in.level);
-		ndr_print_dfs_Info(ndr, "info", r->in.info);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dfs_SetInfo");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_GetInfo(struct ndr_push *ndr, int flags, const struct dfs_GetInfo *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dfs_entry_path, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dfs_entry_path, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.dfs_entry_path, ndr_charset_length(r->in.dfs_entry_path, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.servername));
-		if (r->in.servername) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.servername, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.servername, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.servername, ndr_charset_length(r->in.servername, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.sharename));
-		if (r->in.sharename) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.sharename, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.sharename, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.sharename, ndr_charset_length(r->in.sharename, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_push_dfs_Info(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_GetInfo(struct ndr_pull *ndr, int flags, struct dfs_GetInfo *r)
-{
-	uint32_t _ptr_servername;
-	uint32_t _ptr_sharename;
-	TALLOC_CTX *_mem_save_servername_0;
-	TALLOC_CTX *_mem_save_sharename_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.dfs_entry_path));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.dfs_entry_path));
-		if (ndr_get_array_length(ndr, &r->in.dfs_entry_path) > ndr_get_array_size(ndr, &r->in.dfs_entry_path)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.dfs_entry_path), ndr_get_array_length(ndr, &r->in.dfs_entry_path));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.dfs_entry_path), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.dfs_entry_path, ndr_get_array_length(ndr, &r->in.dfs_entry_path), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_servername));
-		if (_ptr_servername) {
-			NDR_PULL_ALLOC(ndr, r->in.servername);
-		} else {
-			r->in.servername = NULL;
-		}
-		if (r->in.servername) {
-			_mem_save_servername_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.servername, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.servername));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.servername));
-			if (ndr_get_array_length(ndr, &r->in.servername) > ndr_get_array_size(ndr, &r->in.servername)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.servername), ndr_get_array_length(ndr, &r->in.servername));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.servername, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_servername_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sharename));
-		if (_ptr_sharename) {
-			NDR_PULL_ALLOC(ndr, r->in.sharename);
-		} else {
-			r->in.sharename = NULL;
-		}
-		if (r->in.sharename) {
-			_mem_save_sharename_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.sharename, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.sharename));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.sharename));
-			if (ndr_get_array_length(ndr, &r->in.sharename) > ndr_get_array_size(ndr, &r->in.sharename)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.sharename), ndr_get_array_length(ndr, &r->in.sharename));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.sharename), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.sharename, ndr_get_array_length(ndr, &r->in.sharename), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sharename_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_pull_dfs_Info(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_GetInfo(struct ndr_print *ndr, const char *name, int flags, const struct dfs_GetInfo *r)
-{
-	ndr_print_struct(ndr, name, "dfs_GetInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dfs_GetInfo");
-		ndr->depth++;
-		ndr_print_string(ndr, "dfs_entry_path", r->in.dfs_entry_path);
-		ndr_print_ptr(ndr, "servername", r->in.servername);
-		ndr->depth++;
-		if (r->in.servername) {
-			ndr_print_string(ndr, "servername", r->in.servername);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sharename", r->in.sharename);
-		ndr->depth++;
-		if (r->in.sharename) {
-			ndr_print_string(ndr, "sharename", r->in.sharename);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dfs_GetInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.info, r->in.level);
-		ndr_print_dfs_Info(ndr, "info", r->out.info);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_Enum(struct ndr_push *ndr, int flags, const struct dfs_Enum *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.bufsize));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.info));
-		if (r->in.info) {
-			NDR_CHECK(ndr_push_dfs_EnumStruct(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.total));
-		if (r->in.total) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.total));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.info));
-		if (r->out.info) {
-			NDR_CHECK(ndr_push_dfs_EnumStruct(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.total));
-		if (r->out.total) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.total));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Enum(struct ndr_pull *ndr, int flags, struct dfs_Enum *r)
-{
-	uint32_t _ptr_info;
-	uint32_t _ptr_total;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_total_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.bufsize));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, r->in.info);
-		} else {
-			r->in.info = NULL;
-		}
-		if (r->in.info) {
-			_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.info, 0);
-			NDR_CHECK(ndr_pull_dfs_EnumStruct(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_total));
-		if (_ptr_total) {
-			NDR_PULL_ALLOC(ndr, r->in.total);
-		} else {
-			r->in.total = NULL;
-		}
-		if (r->in.total) {
-			_mem_save_total_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.total, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.total));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_total_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		} else {
-			r->out.info = NULL;
-		}
-		if (r->out.info) {
-			_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.info, 0);
-			NDR_CHECK(ndr_pull_dfs_EnumStruct(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_total));
-		if (_ptr_total) {
-			NDR_PULL_ALLOC(ndr, r->out.total);
-		} else {
-			r->out.total = NULL;
-		}
-		if (r->out.total) {
-			_mem_save_total_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.total, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.total));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_total_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Enum(struct ndr_print *ndr, const char *name, int flags, const struct dfs_Enum *r)
-{
-	ndr_print_struct(ndr, name, "dfs_Enum");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dfs_Enum");
-		ndr->depth++;
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr_print_uint32(ndr, "bufsize", r->in.bufsize);
-		ndr_print_ptr(ndr, "info", r->in.info);
-		ndr->depth++;
-		if (r->in.info) {
-			ndr_print_dfs_EnumStruct(ndr, "info", r->in.info);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "total", r->in.total);
-		ndr->depth++;
-		if (r->in.total) {
-			ndr_print_uint32(ndr, "total", *r->in.total);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dfs_Enum");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		if (r->out.info) {
-			ndr_print_dfs_EnumStruct(ndr, "info", r->out.info);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "total", r->out.total);
-		ndr->depth++;
-		if (r->out.total) {
-			ndr_print_uint32(ndr, "total", *r->out.total);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_Rename(struct ndr_push *ndr, int flags, const struct dfs_Rename *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Rename(struct ndr_pull *ndr, int flags, struct dfs_Rename *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Rename(struct ndr_print *ndr, const char *name, int flags, const struct dfs_Rename *r)
-{
-	ndr_print_struct(ndr, name, "dfs_Rename");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dfs_Rename");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dfs_Rename");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_Move(struct ndr_push *ndr, int flags, const struct dfs_Move *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Move(struct ndr_pull *ndr, int flags, struct dfs_Move *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Move(struct ndr_print *ndr, const char *name, int flags, const struct dfs_Move *r)
-{
-	ndr_print_struct(ndr, name, "dfs_Move");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dfs_Move");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dfs_Move");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_ManagerGetConfigInfo(struct ndr_push *ndr, int flags, const struct dfs_ManagerGetConfigInfo *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_ManagerGetConfigInfo(struct ndr_pull *ndr, int flags, struct dfs_ManagerGetConfigInfo *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_ManagerGetConfigInfo(struct ndr_print *ndr, const char *name, int flags, const struct dfs_ManagerGetConfigInfo *r)
-{
-	ndr_print_struct(ndr, name, "dfs_ManagerGetConfigInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dfs_ManagerGetConfigInfo");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dfs_ManagerGetConfigInfo");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_ManagerSendSiteInfo(struct ndr_push *ndr, int flags, const struct dfs_ManagerSendSiteInfo *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_ManagerSendSiteInfo(struct ndr_pull *ndr, int flags, struct dfs_ManagerSendSiteInfo *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_ManagerSendSiteInfo(struct ndr_print *ndr, const char *name, int flags, const struct dfs_ManagerSendSiteInfo *r)
-{
-	ndr_print_struct(ndr, name, "dfs_ManagerSendSiteInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dfs_ManagerSendSiteInfo");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dfs_ManagerSendSiteInfo");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_AddFtRoot(struct ndr_push *ndr, int flags, const struct dfs_AddFtRoot *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.servername, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.servername, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.servername, ndr_charset_length(r->in.servername, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dns_servername, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dns_servername, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.dns_servername, ndr_charset_length(r->in.dns_servername, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dfsname, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dfsname, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.dfsname, ndr_charset_length(r->in.dfsname, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.rootshare, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.rootshare, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.rootshare, ndr_charset_length(r->in.rootshare, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.comment, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.comment, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.comment, ndr_charset_length(r->in.comment, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dfs_config_dn, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dfs_config_dn, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.dfs_config_dn, ndr_charset_length(r->in.dfs_config_dn, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->in.unknown1));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.flags));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.unknown2));
-		if (r->in.unknown2) {
-			NDR_CHECK(ndr_push_unique_ptr(ndr, *r->in.unknown2));
-			if (*r->in.unknown2) {
-				NDR_CHECK(ndr_push_dfs_UnknownStruct(ndr, NDR_SCALARS|NDR_BUFFERS, *r->in.unknown2));
-			}
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.unknown2));
-		if (r->out.unknown2) {
-			NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.unknown2));
-			if (*r->out.unknown2) {
-				NDR_CHECK(ndr_push_dfs_UnknownStruct(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.unknown2));
-			}
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_AddFtRoot(struct ndr_pull *ndr, int flags, struct dfs_AddFtRoot *r)
-{
-	uint32_t _ptr_unknown2;
-	TALLOC_CTX *_mem_save_unknown2_0;
-	TALLOC_CTX *_mem_save_unknown2_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.servername));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.servername));
-		if (ndr_get_array_length(ndr, &r->in.servername) > ndr_get_array_size(ndr, &r->in.servername)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.servername), ndr_get_array_length(ndr, &r->in.servername));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.servername, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.dns_servername));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.dns_servername));
-		if (ndr_get_array_length(ndr, &r->in.dns_servername) > ndr_get_array_size(ndr, &r->in.dns_servername)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.dns_servername), ndr_get_array_length(ndr, &r->in.dns_servername));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.dns_servername), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.dns_servername, ndr_get_array_length(ndr, &r->in.dns_servername), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.dfsname));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.dfsname));
-		if (ndr_get_array_length(ndr, &r->in.dfsname) > ndr_get_array_size(ndr, &r->in.dfsname)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.dfsname), ndr_get_array_length(ndr, &r->in.dfsname));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.dfsname), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.dfsname, ndr_get_array_length(ndr, &r->in.dfsname), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.rootshare));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.rootshare));
-		if (ndr_get_array_length(ndr, &r->in.rootshare) > ndr_get_array_size(ndr, &r->in.rootshare)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.rootshare), ndr_get_array_length(ndr, &r->in.rootshare));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.rootshare), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.rootshare, ndr_get_array_length(ndr, &r->in.rootshare), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.comment));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.comment));
-		if (ndr_get_array_length(ndr, &r->in.comment) > ndr_get_array_size(ndr, &r->in.comment)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.comment), ndr_get_array_length(ndr, &r->in.comment));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.comment), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.comment, ndr_get_array_length(ndr, &r->in.comment), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.dfs_config_dn));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.dfs_config_dn));
-		if (ndr_get_array_length(ndr, &r->in.dfs_config_dn) > ndr_get_array_size(ndr, &r->in.dfs_config_dn)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.dfs_config_dn), ndr_get_array_length(ndr, &r->in.dfs_config_dn));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.dfs_config_dn), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.dfs_config_dn, ndr_get_array_length(ndr, &r->in.dfs_config_dn), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->in.unknown1));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.flags));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown2));
-		if (_ptr_unknown2) {
-			NDR_PULL_ALLOC(ndr, r->in.unknown2);
-		} else {
-			r->in.unknown2 = NULL;
-		}
-		if (r->in.unknown2) {
-			_mem_save_unknown2_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.unknown2, 0);
-			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown2));
-			if (_ptr_unknown2) {
-				NDR_PULL_ALLOC(ndr, *r->in.unknown2);
-			} else {
-				*r->in.unknown2 = NULL;
-			}
-			if (*r->in.unknown2) {
-				_mem_save_unknown2_1 = NDR_PULL_GET_MEM_CTX(ndr);
-				NDR_PULL_SET_MEM_CTX(ndr, *r->in.unknown2, 0);
-				NDR_CHECK(ndr_pull_dfs_UnknownStruct(ndr, NDR_SCALARS|NDR_BUFFERS, *r->in.unknown2));
-				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown2_1, 0);
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown2_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown2));
-		if (_ptr_unknown2) {
-			NDR_PULL_ALLOC(ndr, r->out.unknown2);
-		} else {
-			r->out.unknown2 = NULL;
-		}
-		if (r->out.unknown2) {
-			_mem_save_unknown2_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.unknown2, 0);
-			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown2));
-			if (_ptr_unknown2) {
-				NDR_PULL_ALLOC(ndr, *r->out.unknown2);
-			} else {
-				*r->out.unknown2 = NULL;
-			}
-			if (*r->out.unknown2) {
-				_mem_save_unknown2_1 = NDR_PULL_GET_MEM_CTX(ndr);
-				NDR_PULL_SET_MEM_CTX(ndr, *r->out.unknown2, 0);
-				NDR_CHECK(ndr_pull_dfs_UnknownStruct(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.unknown2));
-				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown2_1, 0);
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown2_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_AddFtRoot(struct ndr_print *ndr, const char *name, int flags, const struct dfs_AddFtRoot *r)
-{
-	ndr_print_struct(ndr, name, "dfs_AddFtRoot");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dfs_AddFtRoot");
-		ndr->depth++;
-		ndr_print_string(ndr, "servername", r->in.servername);
-		ndr_print_string(ndr, "dns_servername", r->in.dns_servername);
-		ndr_print_string(ndr, "dfsname", r->in.dfsname);
-		ndr_print_string(ndr, "rootshare", r->in.rootshare);
-		ndr_print_string(ndr, "comment", r->in.comment);
-		ndr_print_string(ndr, "dfs_config_dn", r->in.dfs_config_dn);
-		ndr_print_uint8(ndr, "unknown1", r->in.unknown1);
-		ndr_print_uint32(ndr, "flags", r->in.flags);
-		ndr_print_ptr(ndr, "unknown2", r->in.unknown2);
-		ndr->depth++;
-		if (r->in.unknown2) {
-			ndr_print_ptr(ndr, "unknown2", *r->in.unknown2);
-			ndr->depth++;
-			if (*r->in.unknown2) {
-				ndr_print_dfs_UnknownStruct(ndr, "unknown2", *r->in.unknown2);
-			}
-			ndr->depth--;
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dfs_AddFtRoot");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "unknown2", r->out.unknown2);
-		ndr->depth++;
-		if (r->out.unknown2) {
-			ndr_print_ptr(ndr, "unknown2", *r->out.unknown2);
-			ndr->depth++;
-			if (*r->out.unknown2) {
-				ndr_print_dfs_UnknownStruct(ndr, "unknown2", *r->out.unknown2);
-			}
-			ndr->depth--;
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_RemoveFtRoot(struct ndr_push *ndr, int flags, const struct dfs_RemoveFtRoot *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.servername, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.servername, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.servername, ndr_charset_length(r->in.servername, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dns_servername, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dns_servername, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.dns_servername, ndr_charset_length(r->in.dns_servername, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dfsname, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dfsname, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.dfsname, ndr_charset_length(r->in.dfsname, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.rootshare, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.rootshare, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.rootshare, ndr_charset_length(r->in.rootshare, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.flags));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.unknown));
-		if (r->in.unknown) {
-			NDR_CHECK(ndr_push_unique_ptr(ndr, *r->in.unknown));
-			if (*r->in.unknown) {
-				NDR_CHECK(ndr_push_dfs_UnknownStruct(ndr, NDR_SCALARS|NDR_BUFFERS, *r->in.unknown));
-			}
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.unknown));
-		if (r->out.unknown) {
-			NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.unknown));
-			if (*r->out.unknown) {
-				NDR_CHECK(ndr_push_dfs_UnknownStruct(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.unknown));
-			}
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_RemoveFtRoot(struct ndr_pull *ndr, int flags, struct dfs_RemoveFtRoot *r)
-{
-	uint32_t _ptr_unknown;
-	TALLOC_CTX *_mem_save_unknown_0;
-	TALLOC_CTX *_mem_save_unknown_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.servername));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.servername));
-		if (ndr_get_array_length(ndr, &r->in.servername) > ndr_get_array_size(ndr, &r->in.servername)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.servername), ndr_get_array_length(ndr, &r->in.servername));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.servername, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.dns_servername));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.dns_servername));
-		if (ndr_get_array_length(ndr, &r->in.dns_servername) > ndr_get_array_size(ndr, &r->in.dns_servername)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.dns_servername), ndr_get_array_length(ndr, &r->in.dns_servername));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.dns_servername), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.dns_servername, ndr_get_array_length(ndr, &r->in.dns_servername), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.dfsname));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.dfsname));
-		if (ndr_get_array_length(ndr, &r->in.dfsname) > ndr_get_array_size(ndr, &r->in.dfsname)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.dfsname), ndr_get_array_length(ndr, &r->in.dfsname));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.dfsname), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.dfsname, ndr_get_array_length(ndr, &r->in.dfsname), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.rootshare));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.rootshare));
-		if (ndr_get_array_length(ndr, &r->in.rootshare) > ndr_get_array_size(ndr, &r->in.rootshare)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.rootshare), ndr_get_array_length(ndr, &r->in.rootshare));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.rootshare), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.rootshare, ndr_get_array_length(ndr, &r->in.rootshare), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.flags));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown));
-		if (_ptr_unknown) {
-			NDR_PULL_ALLOC(ndr, r->in.unknown);
-		} else {
-			r->in.unknown = NULL;
-		}
-		if (r->in.unknown) {
-			_mem_save_unknown_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.unknown, 0);
-			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown));
-			if (_ptr_unknown) {
-				NDR_PULL_ALLOC(ndr, *r->in.unknown);
-			} else {
-				*r->in.unknown = NULL;
-			}
-			if (*r->in.unknown) {
-				_mem_save_unknown_1 = NDR_PULL_GET_MEM_CTX(ndr);
-				NDR_PULL_SET_MEM_CTX(ndr, *r->in.unknown, 0);
-				NDR_CHECK(ndr_pull_dfs_UnknownStruct(ndr, NDR_SCALARS|NDR_BUFFERS, *r->in.unknown));
-				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown_1, 0);
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown));
-		if (_ptr_unknown) {
-			NDR_PULL_ALLOC(ndr, r->out.unknown);
-		} else {
-			r->out.unknown = NULL;
-		}
-		if (r->out.unknown) {
-			_mem_save_unknown_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.unknown, 0);
-			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown));
-			if (_ptr_unknown) {
-				NDR_PULL_ALLOC(ndr, *r->out.unknown);
-			} else {
-				*r->out.unknown = NULL;
-			}
-			if (*r->out.unknown) {
-				_mem_save_unknown_1 = NDR_PULL_GET_MEM_CTX(ndr);
-				NDR_PULL_SET_MEM_CTX(ndr, *r->out.unknown, 0);
-				NDR_CHECK(ndr_pull_dfs_UnknownStruct(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.unknown));
-				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown_1, 0);
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_RemoveFtRoot(struct ndr_print *ndr, const char *name, int flags, const struct dfs_RemoveFtRoot *r)
-{
-	ndr_print_struct(ndr, name, "dfs_RemoveFtRoot");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dfs_RemoveFtRoot");
-		ndr->depth++;
-		ndr_print_string(ndr, "servername", r->in.servername);
-		ndr_print_string(ndr, "dns_servername", r->in.dns_servername);
-		ndr_print_string(ndr, "dfsname", r->in.dfsname);
-		ndr_print_string(ndr, "rootshare", r->in.rootshare);
-		ndr_print_uint32(ndr, "flags", r->in.flags);
-		ndr_print_ptr(ndr, "unknown", r->in.unknown);
-		ndr->depth++;
-		if (r->in.unknown) {
-			ndr_print_ptr(ndr, "unknown", *r->in.unknown);
-			ndr->depth++;
-			if (*r->in.unknown) {
-				ndr_print_dfs_UnknownStruct(ndr, "unknown", *r->in.unknown);
-			}
-			ndr->depth--;
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dfs_RemoveFtRoot");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "unknown", r->out.unknown);
-		ndr->depth++;
-		if (r->out.unknown) {
-			ndr_print_ptr(ndr, "unknown", *r->out.unknown);
-			ndr->depth++;
-			if (*r->out.unknown) {
-				ndr_print_dfs_UnknownStruct(ndr, "unknown", *r->out.unknown);
-			}
-			ndr->depth--;
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_AddStdRoot(struct ndr_push *ndr, int flags, const struct dfs_AddStdRoot *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.servername, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.servername, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.servername, ndr_charset_length(r->in.servername, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.rootshare, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.rootshare, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.rootshare, ndr_charset_length(r->in.rootshare, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.comment, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.comment, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.comment, ndr_charset_length(r->in.comment, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_AddStdRoot(struct ndr_pull *ndr, int flags, struct dfs_AddStdRoot *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.servername));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.servername));
-		if (ndr_get_array_length(ndr, &r->in.servername) > ndr_get_array_size(ndr, &r->in.servername)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.servername), ndr_get_array_length(ndr, &r->in.servername));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.servername, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.rootshare));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.rootshare));
-		if (ndr_get_array_length(ndr, &r->in.rootshare) > ndr_get_array_size(ndr, &r->in.rootshare)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.rootshare), ndr_get_array_length(ndr, &r->in.rootshare));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.rootshare), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.rootshare, ndr_get_array_length(ndr, &r->in.rootshare), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.comment));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.comment));
-		if (ndr_get_array_length(ndr, &r->in.comment) > ndr_get_array_size(ndr, &r->in.comment)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.comment), ndr_get_array_length(ndr, &r->in.comment));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.comment), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.comment, ndr_get_array_length(ndr, &r->in.comment), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_AddStdRoot(struct ndr_print *ndr, const char *name, int flags, const struct dfs_AddStdRoot *r)
-{
-	ndr_print_struct(ndr, name, "dfs_AddStdRoot");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dfs_AddStdRoot");
-		ndr->depth++;
-		ndr_print_string(ndr, "servername", r->in.servername);
-		ndr_print_string(ndr, "rootshare", r->in.rootshare);
-		ndr_print_string(ndr, "comment", r->in.comment);
-		ndr_print_uint32(ndr, "flags", r->in.flags);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dfs_AddStdRoot");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_RemoveStdRoot(struct ndr_push *ndr, int flags, const struct dfs_RemoveStdRoot *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.servername, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.servername, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.servername, ndr_charset_length(r->in.servername, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.rootshare, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.rootshare, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.rootshare, ndr_charset_length(r->in.rootshare, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_RemoveStdRoot(struct ndr_pull *ndr, int flags, struct dfs_RemoveStdRoot *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.servername));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.servername));
-		if (ndr_get_array_length(ndr, &r->in.servername) > ndr_get_array_size(ndr, &r->in.servername)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.servername), ndr_get_array_length(ndr, &r->in.servername));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.servername, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.rootshare));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.rootshare));
-		if (ndr_get_array_length(ndr, &r->in.rootshare) > ndr_get_array_size(ndr, &r->in.rootshare)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.rootshare), ndr_get_array_length(ndr, &r->in.rootshare));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.rootshare), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.rootshare, ndr_get_array_length(ndr, &r->in.rootshare), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_RemoveStdRoot(struct ndr_print *ndr, const char *name, int flags, const struct dfs_RemoveStdRoot *r)
-{
-	ndr_print_struct(ndr, name, "dfs_RemoveStdRoot");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dfs_RemoveStdRoot");
-		ndr->depth++;
-		ndr_print_string(ndr, "servername", r->in.servername);
-		ndr_print_string(ndr, "rootshare", r->in.rootshare);
-		ndr_print_uint32(ndr, "flags", r->in.flags);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dfs_RemoveStdRoot");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_ManagerInitialize(struct ndr_push *ndr, int flags, const struct dfs_ManagerInitialize *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.servername == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.servername, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.servername, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.servername, ndr_charset_length(r->in.servername, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_ManagerInitialize(struct ndr_pull *ndr, int flags, struct dfs_ManagerInitialize *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.servername));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.servername));
-		if (ndr_get_array_length(ndr, &r->in.servername) > ndr_get_array_size(ndr, &r->in.servername)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.servername), ndr_get_array_length(ndr, &r->in.servername));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.servername, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_ManagerInitialize(struct ndr_print *ndr, const char *name, int flags, const struct dfs_ManagerInitialize *r)
-{
-	ndr_print_struct(ndr, name, "dfs_ManagerInitialize");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dfs_ManagerInitialize");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "servername", r->in.servername);
-		ndr->depth++;
-		ndr_print_string(ndr, "servername", r->in.servername);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "flags", r->in.flags);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dfs_ManagerInitialize");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_AddStdRootForced(struct ndr_push *ndr, int flags, const struct dfs_AddStdRootForced *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.servername, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.servername, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.servername, ndr_charset_length(r->in.servername, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.rootshare, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.rootshare, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.rootshare, ndr_charset_length(r->in.rootshare, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.comment, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.comment, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.comment, ndr_charset_length(r->in.comment, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.store, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.store, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.store, ndr_charset_length(r->in.store, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_AddStdRootForced(struct ndr_pull *ndr, int flags, struct dfs_AddStdRootForced *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.servername));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.servername));
-		if (ndr_get_array_length(ndr, &r->in.servername) > ndr_get_array_size(ndr, &r->in.servername)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.servername), ndr_get_array_length(ndr, &r->in.servername));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.servername, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.rootshare));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.rootshare));
-		if (ndr_get_array_length(ndr, &r->in.rootshare) > ndr_get_array_size(ndr, &r->in.rootshare)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.rootshare), ndr_get_array_length(ndr, &r->in.rootshare));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.rootshare), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.rootshare, ndr_get_array_length(ndr, &r->in.rootshare), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.comment));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.comment));
-		if (ndr_get_array_length(ndr, &r->in.comment) > ndr_get_array_size(ndr, &r->in.comment)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.comment), ndr_get_array_length(ndr, &r->in.comment));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.comment), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.comment, ndr_get_array_length(ndr, &r->in.comment), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.store));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.store));
-		if (ndr_get_array_length(ndr, &r->in.store) > ndr_get_array_size(ndr, &r->in.store)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.store), ndr_get_array_length(ndr, &r->in.store));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.store), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.store, ndr_get_array_length(ndr, &r->in.store), sizeof(uint16_t), CH_UTF16));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_AddStdRootForced(struct ndr_print *ndr, const char *name, int flags, const struct dfs_AddStdRootForced *r)
-{
-	ndr_print_struct(ndr, name, "dfs_AddStdRootForced");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dfs_AddStdRootForced");
-		ndr->depth++;
-		ndr_print_string(ndr, "servername", r->in.servername);
-		ndr_print_string(ndr, "rootshare", r->in.rootshare);
-		ndr_print_string(ndr, "comment", r->in.comment);
-		ndr_print_string(ndr, "store", r->in.store);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dfs_AddStdRootForced");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_GetDcAddress(struct ndr_push *ndr, int flags, const struct dfs_GetDcAddress *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.servername, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.servername, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.servername, ndr_charset_length(r->in.servername, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		if (r->in.server_fullname == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->in.server_fullname));
-		if (*r->in.server_fullname) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->in.server_fullname, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->in.server_fullname, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, *r->in.server_fullname, ndr_charset_length(*r->in.server_fullname, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.is_root == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, *r->in.is_root));
-		if (r->in.ttl == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.ttl));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.server_fullname == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.server_fullname));
-		if (*r->out.server_fullname) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.server_fullname, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.server_fullname, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, *r->out.server_fullname, ndr_charset_length(*r->out.server_fullname, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->out.is_root == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, *r->out.is_root));
-		if (r->out.ttl == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.ttl));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_GetDcAddress(struct ndr_pull *ndr, int flags, struct dfs_GetDcAddress *r)
-{
-	uint32_t _ptr_server_fullname;
-	TALLOC_CTX *_mem_save_server_fullname_0;
-	TALLOC_CTX *_mem_save_server_fullname_1;
-	TALLOC_CTX *_mem_save_is_root_0;
-	TALLOC_CTX *_mem_save_ttl_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.servername));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.servername));
-		if (ndr_get_array_length(ndr, &r->in.servername) > ndr_get_array_size(ndr, &r->in.servername)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.servername), ndr_get_array_length(ndr, &r->in.servername));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.servername, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t), CH_UTF16));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.server_fullname);
-		}
-		_mem_save_server_fullname_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.server_fullname, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_fullname));
-		if (_ptr_server_fullname) {
-			NDR_PULL_ALLOC(ndr, *r->in.server_fullname);
-		} else {
-			*r->in.server_fullname = NULL;
-		}
-		if (*r->in.server_fullname) {
-			_mem_save_server_fullname_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->in.server_fullname, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, r->in.server_fullname));
-			NDR_CHECK(ndr_pull_array_length(ndr, r->in.server_fullname));
-			if (ndr_get_array_length(ndr, r->in.server_fullname) > ndr_get_array_size(ndr, r->in.server_fullname)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, r->in.server_fullname), ndr_get_array_length(ndr, r->in.server_fullname));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, r->in.server_fullname), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->in.server_fullname, ndr_get_array_length(ndr, r->in.server_fullname), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_fullname_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_fullname_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.is_root);
-		}
-		_mem_save_is_root_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.is_root, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, r->in.is_root));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_is_root_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.ttl);
-		}
-		_mem_save_ttl_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.ttl, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.ttl));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ttl_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.server_fullname);
-		*r->out.server_fullname = *r->in.server_fullname;
-		NDR_PULL_ALLOC(ndr, r->out.is_root);
-		*r->out.is_root = *r->in.is_root;
-		NDR_PULL_ALLOC(ndr, r->out.ttl);
-		*r->out.ttl = *r->in.ttl;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.server_fullname);
-		}
-		_mem_save_server_fullname_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.server_fullname, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_fullname));
-		if (_ptr_server_fullname) {
-			NDR_PULL_ALLOC(ndr, *r->out.server_fullname);
-		} else {
-			*r->out.server_fullname = NULL;
-		}
-		if (*r->out.server_fullname) {
-			_mem_save_server_fullname_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.server_fullname, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, r->out.server_fullname));
-			NDR_CHECK(ndr_pull_array_length(ndr, r->out.server_fullname));
-			if (ndr_get_array_length(ndr, r->out.server_fullname) > ndr_get_array_size(ndr, r->out.server_fullname)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, r->out.server_fullname), ndr_get_array_length(ndr, r->out.server_fullname));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, r->out.server_fullname), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->out.server_fullname, ndr_get_array_length(ndr, r->out.server_fullname), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_fullname_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_fullname_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.is_root);
-		}
-		_mem_save_is_root_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.is_root, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, r->out.is_root));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_is_root_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.ttl);
-		}
-		_mem_save_ttl_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.ttl, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.ttl));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ttl_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_GetDcAddress(struct ndr_print *ndr, const char *name, int flags, const struct dfs_GetDcAddress *r)
-{
-	ndr_print_struct(ndr, name, "dfs_GetDcAddress");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dfs_GetDcAddress");
-		ndr->depth++;
-		ndr_print_string(ndr, "servername", r->in.servername);
-		ndr_print_ptr(ndr, "server_fullname", r->in.server_fullname);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_fullname", *r->in.server_fullname);
-		ndr->depth++;
-		if (*r->in.server_fullname) {
-			ndr_print_string(ndr, "server_fullname", *r->in.server_fullname);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "is_root", r->in.is_root);
-		ndr->depth++;
-		ndr_print_uint8(ndr, "is_root", *r->in.is_root);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "ttl", r->in.ttl);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "ttl", *r->in.ttl);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dfs_GetDcAddress");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_fullname", r->out.server_fullname);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_fullname", *r->out.server_fullname);
-		ndr->depth++;
-		if (*r->out.server_fullname) {
-			ndr_print_string(ndr, "server_fullname", *r->out.server_fullname);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "is_root", r->out.is_root);
-		ndr->depth++;
-		ndr_print_uint8(ndr, "is_root", *r->out.is_root);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "ttl", r->out.ttl);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "ttl", *r->out.ttl);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_SetDcAddress(struct ndr_push *ndr, int flags, const struct dfs_SetDcAddress *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.servername, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.servername, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.servername, ndr_charset_length(r->in.servername, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_fullname, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_fullname, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_fullname, ndr_charset_length(r->in.server_fullname, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.flags));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.ttl));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_SetDcAddress(struct ndr_pull *ndr, int flags, struct dfs_SetDcAddress *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.servername));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.servername));
-		if (ndr_get_array_length(ndr, &r->in.servername) > ndr_get_array_size(ndr, &r->in.servername)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.servername), ndr_get_array_length(ndr, &r->in.servername));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.servername, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_fullname));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_fullname));
-		if (ndr_get_array_length(ndr, &r->in.server_fullname) > ndr_get_array_size(ndr, &r->in.server_fullname)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_fullname), ndr_get_array_length(ndr, &r->in.server_fullname));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_fullname), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_fullname, ndr_get_array_length(ndr, &r->in.server_fullname), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.flags));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.ttl));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_SetDcAddress(struct ndr_print *ndr, const char *name, int flags, const struct dfs_SetDcAddress *r)
-{
-	ndr_print_struct(ndr, name, "dfs_SetDcAddress");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dfs_SetDcAddress");
-		ndr->depth++;
-		ndr_print_string(ndr, "servername", r->in.servername);
-		ndr_print_string(ndr, "server_fullname", r->in.server_fullname);
-		ndr_print_uint32(ndr, "flags", r->in.flags);
-		ndr_print_uint32(ndr, "ttl", r->in.ttl);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dfs_SetDcAddress");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_FlushFtTable(struct ndr_push *ndr, int flags, const struct dfs_FlushFtTable *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.servername, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.servername, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.servername, ndr_charset_length(r->in.servername, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.rootshare, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.rootshare, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.rootshare, ndr_charset_length(r->in.rootshare, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_FlushFtTable(struct ndr_pull *ndr, int flags, struct dfs_FlushFtTable *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.servername));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.servername));
-		if (ndr_get_array_length(ndr, &r->in.servername) > ndr_get_array_size(ndr, &r->in.servername)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.servername), ndr_get_array_length(ndr, &r->in.servername));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.servername, ndr_get_array_length(ndr, &r->in.servername), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.rootshare));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.rootshare));
-		if (ndr_get_array_length(ndr, &r->in.rootshare) > ndr_get_array_size(ndr, &r->in.rootshare)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.rootshare), ndr_get_array_length(ndr, &r->in.rootshare));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.rootshare), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.rootshare, ndr_get_array_length(ndr, &r->in.rootshare), sizeof(uint16_t), CH_UTF16));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_FlushFtTable(struct ndr_print *ndr, const char *name, int flags, const struct dfs_FlushFtTable *r)
-{
-	ndr_print_struct(ndr, name, "dfs_FlushFtTable");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dfs_FlushFtTable");
-		ndr->depth++;
-		ndr_print_string(ndr, "servername", r->in.servername);
-		ndr_print_string(ndr, "rootshare", r->in.rootshare);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dfs_FlushFtTable");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_Add2(struct ndr_push *ndr, int flags, const struct dfs_Add2 *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Add2(struct ndr_pull *ndr, int flags, struct dfs_Add2 *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Add2(struct ndr_print *ndr, const char *name, int flags, const struct dfs_Add2 *r)
-{
-	ndr_print_struct(ndr, name, "dfs_Add2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dfs_Add2");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dfs_Add2");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_Remove2(struct ndr_push *ndr, int flags, const struct dfs_Remove2 *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_Remove2(struct ndr_pull *ndr, int flags, struct dfs_Remove2 *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_Remove2(struct ndr_print *ndr, const char *name, int flags, const struct dfs_Remove2 *r)
-{
-	ndr_print_struct(ndr, name, "dfs_Remove2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dfs_Remove2");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dfs_Remove2");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_dfs_EnumEx(struct ndr_push *ndr, int flags, const struct dfs_EnumEx *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dfs_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dfs_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.dfs_name, ndr_charset_length(r->in.dfs_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.bufsize));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.info));
-		if (r->in.info) {
-			NDR_CHECK(ndr_push_dfs_EnumStruct(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.total));
-		if (r->in.total) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.total));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.info));
-		if (r->out.info) {
-			NDR_CHECK(ndr_push_dfs_EnumStruct(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.total));
-		if (r->out.total) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.total));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_dfs_EnumEx(struct ndr_pull *ndr, int flags, struct dfs_EnumEx *r)
-{
-	uint32_t _ptr_info;
-	uint32_t _ptr_total;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_total_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.dfs_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.dfs_name));
-		if (ndr_get_array_length(ndr, &r->in.dfs_name) > ndr_get_array_size(ndr, &r->in.dfs_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.dfs_name), ndr_get_array_length(ndr, &r->in.dfs_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.dfs_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.dfs_name, ndr_get_array_length(ndr, &r->in.dfs_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.bufsize));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, r->in.info);
-		} else {
-			r->in.info = NULL;
-		}
-		if (r->in.info) {
-			_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.info, 0);
-			NDR_CHECK(ndr_pull_dfs_EnumStruct(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_total));
-		if (_ptr_total) {
-			NDR_PULL_ALLOC(ndr, r->in.total);
-		} else {
-			r->in.total = NULL;
-		}
-		if (r->in.total) {
-			_mem_save_total_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.total, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.total));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_total_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		} else {
-			r->out.info = NULL;
-		}
-		if (r->out.info) {
-			_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.info, 0);
-			NDR_CHECK(ndr_pull_dfs_EnumStruct(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_total));
-		if (_ptr_total) {
-			NDR_PULL_ALLOC(ndr, r->out.total);
-		} else {
-			r->out.total = NULL;
-		}
-		if (r->out.total) {
-			_mem_save_total_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.total, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.total));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_total_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_EnumEx(struct ndr_print *ndr, const char *name, int flags, const struct dfs_EnumEx *r)
-{
-	ndr_print_struct(ndr, name, "dfs_EnumEx");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dfs_EnumEx");
-		ndr->depth++;
-		ndr_print_string(ndr, "dfs_name", r->in.dfs_name);
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr_print_uint32(ndr, "bufsize", r->in.bufsize);
-		ndr_print_ptr(ndr, "info", r->in.info);
-		ndr->depth++;
-		if (r->in.info) {
-			ndr_print_dfs_EnumStruct(ndr, "info", r->in.info);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "total", r->in.total);
-		ndr->depth++;
-		if (r->in.total) {
-			ndr_print_uint32(ndr, "total", *r->in.total);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dfs_EnumEx");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		if (r->out.info) {
-			ndr_print_dfs_EnumStruct(ndr, "info", r->out.info);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "total", r->out.total);
-		ndr->depth++;
-		if (r->out.total) {
-			ndr_print_uint32(ndr, "total", *r->out.total);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dfs_SetInfo2(struct ndr_push *ndr, int flags, const struct dfs_SetInfo2 *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dfs_SetInfo2(struct ndr_pull *ndr, int flags, struct dfs_SetInfo2 *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dfs_SetInfo2(struct ndr_print *ndr, const char *name, int flags, const struct dfs_SetInfo2 *r)
-{
-	ndr_print_struct(ndr, name, "dfs_SetInfo2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dfs_SetInfo2");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dfs_SetInfo2");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static const struct ndr_interface_call netdfs_calls[] = {
-	{
-		"dfs_GetManagerVersion",
-		sizeof(struct dfs_GetManagerVersion),
-		(ndr_push_flags_fn_t) ndr_push_dfs_GetManagerVersion,
-		(ndr_pull_flags_fn_t) ndr_pull_dfs_GetManagerVersion,
-		(ndr_print_function_t) ndr_print_dfs_GetManagerVersion,
-		false,
-	},
-	{
-		"dfs_Add",
-		sizeof(struct dfs_Add),
-		(ndr_push_flags_fn_t) ndr_push_dfs_Add,
-		(ndr_pull_flags_fn_t) ndr_pull_dfs_Add,
-		(ndr_print_function_t) ndr_print_dfs_Add,
-		false,
-	},
-	{
-		"dfs_Remove",
-		sizeof(struct dfs_Remove),
-		(ndr_push_flags_fn_t) ndr_push_dfs_Remove,
-		(ndr_pull_flags_fn_t) ndr_pull_dfs_Remove,
-		(ndr_print_function_t) ndr_print_dfs_Remove,
-		false,
-	},
-	{
-		"dfs_SetInfo",
-		sizeof(struct dfs_SetInfo),
-		(ndr_push_flags_fn_t) ndr_push_dfs_SetInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_dfs_SetInfo,
-		(ndr_print_function_t) ndr_print_dfs_SetInfo,
-		false,
-	},
-	{
-		"dfs_GetInfo",
-		sizeof(struct dfs_GetInfo),
-		(ndr_push_flags_fn_t) ndr_push_dfs_GetInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_dfs_GetInfo,
-		(ndr_print_function_t) ndr_print_dfs_GetInfo,
-		false,
-	},
-	{
-		"dfs_Enum",
-		sizeof(struct dfs_Enum),
-		(ndr_push_flags_fn_t) ndr_push_dfs_Enum,
-		(ndr_pull_flags_fn_t) ndr_pull_dfs_Enum,
-		(ndr_print_function_t) ndr_print_dfs_Enum,
-		false,
-	},
-	{
-		"dfs_Rename",
-		sizeof(struct dfs_Rename),
-		(ndr_push_flags_fn_t) ndr_push_dfs_Rename,
-		(ndr_pull_flags_fn_t) ndr_pull_dfs_Rename,
-		(ndr_print_function_t) ndr_print_dfs_Rename,
-		false,
-	},
-	{
-		"dfs_Move",
-		sizeof(struct dfs_Move),
-		(ndr_push_flags_fn_t) ndr_push_dfs_Move,
-		(ndr_pull_flags_fn_t) ndr_pull_dfs_Move,
-		(ndr_print_function_t) ndr_print_dfs_Move,
-		false,
-	},
-	{
-		"dfs_ManagerGetConfigInfo",
-		sizeof(struct dfs_ManagerGetConfigInfo),
-		(ndr_push_flags_fn_t) ndr_push_dfs_ManagerGetConfigInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_dfs_ManagerGetConfigInfo,
-		(ndr_print_function_t) ndr_print_dfs_ManagerGetConfigInfo,
-		false,
-	},
-	{
-		"dfs_ManagerSendSiteInfo",
-		sizeof(struct dfs_ManagerSendSiteInfo),
-		(ndr_push_flags_fn_t) ndr_push_dfs_ManagerSendSiteInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_dfs_ManagerSendSiteInfo,
-		(ndr_print_function_t) ndr_print_dfs_ManagerSendSiteInfo,
-		false,
-	},
-	{
-		"dfs_AddFtRoot",
-		sizeof(struct dfs_AddFtRoot),
-		(ndr_push_flags_fn_t) ndr_push_dfs_AddFtRoot,
-		(ndr_pull_flags_fn_t) ndr_pull_dfs_AddFtRoot,
-		(ndr_print_function_t) ndr_print_dfs_AddFtRoot,
-		false,
-	},
-	{
-		"dfs_RemoveFtRoot",
-		sizeof(struct dfs_RemoveFtRoot),
-		(ndr_push_flags_fn_t) ndr_push_dfs_RemoveFtRoot,
-		(ndr_pull_flags_fn_t) ndr_pull_dfs_RemoveFtRoot,
-		(ndr_print_function_t) ndr_print_dfs_RemoveFtRoot,
-		false,
-	},
-	{
-		"dfs_AddStdRoot",
-		sizeof(struct dfs_AddStdRoot),
-		(ndr_push_flags_fn_t) ndr_push_dfs_AddStdRoot,
-		(ndr_pull_flags_fn_t) ndr_pull_dfs_AddStdRoot,
-		(ndr_print_function_t) ndr_print_dfs_AddStdRoot,
-		false,
-	},
-	{
-		"dfs_RemoveStdRoot",
-		sizeof(struct dfs_RemoveStdRoot),
-		(ndr_push_flags_fn_t) ndr_push_dfs_RemoveStdRoot,
-		(ndr_pull_flags_fn_t) ndr_pull_dfs_RemoveStdRoot,
-		(ndr_print_function_t) ndr_print_dfs_RemoveStdRoot,
-		false,
-	},
-	{
-		"dfs_ManagerInitialize",
-		sizeof(struct dfs_ManagerInitialize),
-		(ndr_push_flags_fn_t) ndr_push_dfs_ManagerInitialize,
-		(ndr_pull_flags_fn_t) ndr_pull_dfs_ManagerInitialize,
-		(ndr_print_function_t) ndr_print_dfs_ManagerInitialize,
-		false,
-	},
-	{
-		"dfs_AddStdRootForced",
-		sizeof(struct dfs_AddStdRootForced),
-		(ndr_push_flags_fn_t) ndr_push_dfs_AddStdRootForced,
-		(ndr_pull_flags_fn_t) ndr_pull_dfs_AddStdRootForced,
-		(ndr_print_function_t) ndr_print_dfs_AddStdRootForced,
-		false,
-	},
-	{
-		"dfs_GetDcAddress",
-		sizeof(struct dfs_GetDcAddress),
-		(ndr_push_flags_fn_t) ndr_push_dfs_GetDcAddress,
-		(ndr_pull_flags_fn_t) ndr_pull_dfs_GetDcAddress,
-		(ndr_print_function_t) ndr_print_dfs_GetDcAddress,
-		false,
-	},
-	{
-		"dfs_SetDcAddress",
-		sizeof(struct dfs_SetDcAddress),
-		(ndr_push_flags_fn_t) ndr_push_dfs_SetDcAddress,
-		(ndr_pull_flags_fn_t) ndr_pull_dfs_SetDcAddress,
-		(ndr_print_function_t) ndr_print_dfs_SetDcAddress,
-		false,
-	},
-	{
-		"dfs_FlushFtTable",
-		sizeof(struct dfs_FlushFtTable),
-		(ndr_push_flags_fn_t) ndr_push_dfs_FlushFtTable,
-		(ndr_pull_flags_fn_t) ndr_pull_dfs_FlushFtTable,
-		(ndr_print_function_t) ndr_print_dfs_FlushFtTable,
-		false,
-	},
-	{
-		"dfs_Add2",
-		sizeof(struct dfs_Add2),
-		(ndr_push_flags_fn_t) ndr_push_dfs_Add2,
-		(ndr_pull_flags_fn_t) ndr_pull_dfs_Add2,
-		(ndr_print_function_t) ndr_print_dfs_Add2,
-		false,
-	},
-	{
-		"dfs_Remove2",
-		sizeof(struct dfs_Remove2),
-		(ndr_push_flags_fn_t) ndr_push_dfs_Remove2,
-		(ndr_pull_flags_fn_t) ndr_pull_dfs_Remove2,
-		(ndr_print_function_t) ndr_print_dfs_Remove2,
-		false,
-	},
-	{
-		"dfs_EnumEx",
-		sizeof(struct dfs_EnumEx),
-		(ndr_push_flags_fn_t) ndr_push_dfs_EnumEx,
-		(ndr_pull_flags_fn_t) ndr_pull_dfs_EnumEx,
-		(ndr_print_function_t) ndr_print_dfs_EnumEx,
-		false,
-	},
-	{
-		"dfs_SetInfo2",
-		sizeof(struct dfs_SetInfo2),
-		(ndr_push_flags_fn_t) ndr_push_dfs_SetInfo2,
-		(ndr_pull_flags_fn_t) ndr_pull_dfs_SetInfo2,
-		(ndr_print_function_t) ndr_print_dfs_SetInfo2,
-		false,
-	},
-	{ NULL, 0, NULL, NULL, NULL, false }
-};
-
-static const char * const netdfs_endpoint_strings[] = {
-	"ncacn_np:[\\pipe\\netdfs]", 
-	"ncacn_ip_tcp:", 
-	"ncalrpc:", 
-};
-
-static const struct ndr_interface_string_array netdfs_endpoints = {
-	.count	= 3,
-	.names	= netdfs_endpoint_strings
-};
-
-static const char * const netdfs_authservice_strings[] = {
-	"host", 
-};
-
-static const struct ndr_interface_string_array netdfs_authservices = {
-	.count	= 1,
-	.names	= netdfs_authservice_strings
-};
-
-
-const struct ndr_interface_table ndr_table_netdfs = {
-	.name		= "netdfs",
-	.syntax_id	= {
-		{0x4fc742e0,0x4a10,0x11cf,{0x82,0x73},{0x00,0xaa,0x00,0x4a,0xe6,0x73}},
-		NDR_NETDFS_VERSION
-	},
-	.helpstring	= NDR_NETDFS_HELPSTRING,
-	.num_calls	= 23,
-	.calls		= netdfs_calls,
-	.endpoints	= &netdfs_endpoints,
-	.authservices	= &netdfs_authservices
-};
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_dfs.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_dfs.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_dfs.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,132 +0,0 @@
-/* header auto-generated by pidl */
-
-#include "librpc/ndr/libndr.h"
-#include "librpc/gen_ndr/dfs.h"
-
-#ifndef _HEADER_NDR_netdfs
-#define _HEADER_NDR_netdfs
-
-#define NDR_NETDFS_UUID "4fc742e0-4a10-11cf-8273-00aa004ae673"
-#define NDR_NETDFS_VERSION 3.0
-#define NDR_NETDFS_NAME "netdfs"
-#define NDR_NETDFS_HELPSTRING "Settings for Microsoft Distributed File System"
-extern const struct ndr_interface_table ndr_table_netdfs;
-#define NDR_DFS_GETMANAGERVERSION (0x00)
-
-#define NDR_DFS_ADD (0x01)
-
-#define NDR_DFS_REMOVE (0x02)
-
-#define NDR_DFS_SETINFO (0x03)
-
-#define NDR_DFS_GETINFO (0x04)
-
-#define NDR_DFS_ENUM (0x05)
-
-#define NDR_DFS_RENAME (0x06)
-
-#define NDR_DFS_MOVE (0x07)
-
-#define NDR_DFS_MANAGERGETCONFIGINFO (0x08)
-
-#define NDR_DFS_MANAGERSENDSITEINFO (0x09)
-
-#define NDR_DFS_ADDFTROOT (0x0a)
-
-#define NDR_DFS_REMOVEFTROOT (0x0b)
-
-#define NDR_DFS_ADDSTDROOT (0x0c)
-
-#define NDR_DFS_REMOVESTDROOT (0x0d)
-
-#define NDR_DFS_MANAGERINITIALIZE (0x0e)
-
-#define NDR_DFS_ADDSTDROOTFORCED (0x0f)
-
-#define NDR_DFS_GETDCADDRESS (0x10)
-
-#define NDR_DFS_SETDCADDRESS (0x11)
-
-#define NDR_DFS_FLUSHFTTABLE (0x12)
-
-#define NDR_DFS_ADD2 (0x13)
-
-#define NDR_DFS_REMOVE2 (0x14)
-
-#define NDR_DFS_ENUMEX (0x15)
-
-#define NDR_DFS_SETINFO2 (0x16)
-
-#define NDR_NETDFS_CALL_COUNT (23)
-void ndr_print_dfs_ManagerVersion(struct ndr_print *ndr, const char *name, enum dfs_ManagerVersion r);
-void ndr_print_dfs_Info0(struct ndr_print *ndr, const char *name, const struct dfs_Info0 *r);
-void ndr_print_dfs_Info1(struct ndr_print *ndr, const char *name, const struct dfs_Info1 *r);
-enum ndr_err_code ndr_push_dfs_VolumeState(struct ndr_push *ndr, int ndr_flags, uint32_t r);
-enum ndr_err_code ndr_pull_dfs_VolumeState(struct ndr_pull *ndr, int ndr_flags, uint32_t *r);
-void ndr_print_dfs_VolumeState(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_dfs_Info2(struct ndr_print *ndr, const char *name, const struct dfs_Info2 *r);
-enum ndr_err_code ndr_push_dfs_StorageState(struct ndr_push *ndr, int ndr_flags, uint32_t r);
-enum ndr_err_code ndr_pull_dfs_StorageState(struct ndr_pull *ndr, int ndr_flags, uint32_t *r);
-void ndr_print_dfs_StorageState(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_dfs_StorageInfo(struct ndr_print *ndr, const char *name, const struct dfs_StorageInfo *r);
-void ndr_print_dfs_Info3(struct ndr_print *ndr, const char *name, const struct dfs_Info3 *r);
-void ndr_print_dfs_Info4(struct ndr_print *ndr, const char *name, const struct dfs_Info4 *r);
-enum ndr_err_code ndr_push_dfs_PropertyFlags(struct ndr_push *ndr, int ndr_flags, uint32_t r);
-enum ndr_err_code ndr_pull_dfs_PropertyFlags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r);
-void ndr_print_dfs_PropertyFlags(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_dfs_Info5(struct ndr_print *ndr, const char *name, const struct dfs_Info5 *r);
-void ndr_print_dfs_Target_PriorityClass(struct ndr_print *ndr, const char *name, enum dfs_Target_PriorityClass r);
-void ndr_print_dfs_Target_Priority(struct ndr_print *ndr, const char *name, const struct dfs_Target_Priority *r);
-void ndr_print_dfs_StorageInfo2(struct ndr_print *ndr, const char *name, const struct dfs_StorageInfo2 *r);
-void ndr_print_dfs_Info6(struct ndr_print *ndr, const char *name, const struct dfs_Info6 *r);
-void ndr_print_dfs_Info7(struct ndr_print *ndr, const char *name, const struct dfs_Info7 *r);
-void ndr_print_dfs_Info100(struct ndr_print *ndr, const char *name, const struct dfs_Info100 *r);
-void ndr_print_dfs_Info101(struct ndr_print *ndr, const char *name, const struct dfs_Info101 *r);
-void ndr_print_dfs_Info102(struct ndr_print *ndr, const char *name, const struct dfs_Info102 *r);
-void ndr_print_dfs_Info103(struct ndr_print *ndr, const char *name, const struct dfs_Info103 *r);
-void ndr_print_dfs_Info104(struct ndr_print *ndr, const char *name, const struct dfs_Info104 *r);
-void ndr_print_dfs_Info105(struct ndr_print *ndr, const char *name, const struct dfs_Info105 *r);
-void ndr_print_dfs_Info106(struct ndr_print *ndr, const char *name, const struct dfs_Info106 *r);
-void ndr_print_dfs_Info200(struct ndr_print *ndr, const char *name, const struct dfs_Info200 *r);
-void ndr_print_dfs_VolumeFlavor(struct ndr_print *ndr, const char *name, enum dfs_VolumeFlavor r);
-void ndr_print_dfs_Info300(struct ndr_print *ndr, const char *name, const struct dfs_Info300 *r);
-void ndr_print_dfs_Info(struct ndr_print *ndr, const char *name, const union dfs_Info *r);
-void ndr_print_dfs_EnumArray1(struct ndr_print *ndr, const char *name, const struct dfs_EnumArray1 *r);
-void ndr_print_dfs_EnumArray2(struct ndr_print *ndr, const char *name, const struct dfs_EnumArray2 *r);
-void ndr_print_dfs_EnumArray3(struct ndr_print *ndr, const char *name, const struct dfs_EnumArray3 *r);
-void ndr_print_dfs_EnumArray4(struct ndr_print *ndr, const char *name, const struct dfs_EnumArray4 *r);
-void ndr_print_dfs_EnumArray5(struct ndr_print *ndr, const char *name, const struct dfs_EnumArray5 *r);
-void ndr_print_dfs_EnumArray6(struct ndr_print *ndr, const char *name, const struct dfs_EnumArray6 *r);
-void ndr_print_dfs_EnumArray200(struct ndr_print *ndr, const char *name, const struct dfs_EnumArray200 *r);
-void ndr_print_dfs_EnumArray300(struct ndr_print *ndr, const char *name, const struct dfs_EnumArray300 *r);
-void ndr_print_dfs_EnumInfo(struct ndr_print *ndr, const char *name, const union dfs_EnumInfo *r);
-void ndr_print_dfs_EnumStruct(struct ndr_print *ndr, const char *name, const struct dfs_EnumStruct *r);
-void ndr_print_dfs_UnknownStruct(struct ndr_print *ndr, const char *name, const struct dfs_UnknownStruct *r);
-enum ndr_err_code ndr_push_dfs_GetManagerVersion(struct ndr_push *ndr, int flags, const struct dfs_GetManagerVersion *r);
-enum ndr_err_code ndr_pull_dfs_GetManagerVersion(struct ndr_pull *ndr, int flags, struct dfs_GetManagerVersion *r);
-void ndr_print_dfs_GetManagerVersion(struct ndr_print *ndr, const char *name, int flags, const struct dfs_GetManagerVersion *r);
-void ndr_print_dfs_Add(struct ndr_print *ndr, const char *name, int flags, const struct dfs_Add *r);
-void ndr_print_dfs_Remove(struct ndr_print *ndr, const char *name, int flags, const struct dfs_Remove *r);
-void ndr_print_dfs_SetInfo(struct ndr_print *ndr, const char *name, int flags, const struct dfs_SetInfo *r);
-void ndr_print_dfs_GetInfo(struct ndr_print *ndr, const char *name, int flags, const struct dfs_GetInfo *r);
-void ndr_print_dfs_Enum(struct ndr_print *ndr, const char *name, int flags, const struct dfs_Enum *r);
-void ndr_print_dfs_Rename(struct ndr_print *ndr, const char *name, int flags, const struct dfs_Rename *r);
-void ndr_print_dfs_Move(struct ndr_print *ndr, const char *name, int flags, const struct dfs_Move *r);
-void ndr_print_dfs_ManagerGetConfigInfo(struct ndr_print *ndr, const char *name, int flags, const struct dfs_ManagerGetConfigInfo *r);
-void ndr_print_dfs_ManagerSendSiteInfo(struct ndr_print *ndr, const char *name, int flags, const struct dfs_ManagerSendSiteInfo *r);
-void ndr_print_dfs_AddFtRoot(struct ndr_print *ndr, const char *name, int flags, const struct dfs_AddFtRoot *r);
-void ndr_print_dfs_RemoveFtRoot(struct ndr_print *ndr, const char *name, int flags, const struct dfs_RemoveFtRoot *r);
-void ndr_print_dfs_AddStdRoot(struct ndr_print *ndr, const char *name, int flags, const struct dfs_AddStdRoot *r);
-void ndr_print_dfs_RemoveStdRoot(struct ndr_print *ndr, const char *name, int flags, const struct dfs_RemoveStdRoot *r);
-void ndr_print_dfs_ManagerInitialize(struct ndr_print *ndr, const char *name, int flags, const struct dfs_ManagerInitialize *r);
-void ndr_print_dfs_AddStdRootForced(struct ndr_print *ndr, const char *name, int flags, const struct dfs_AddStdRootForced *r);
-void ndr_print_dfs_GetDcAddress(struct ndr_print *ndr, const char *name, int flags, const struct dfs_GetDcAddress *r);
-void ndr_print_dfs_SetDcAddress(struct ndr_print *ndr, const char *name, int flags, const struct dfs_SetDcAddress *r);
-void ndr_print_dfs_FlushFtTable(struct ndr_print *ndr, const char *name, int flags, const struct dfs_FlushFtTable *r);
-void ndr_print_dfs_Add2(struct ndr_print *ndr, const char *name, int flags, const struct dfs_Add2 *r);
-void ndr_print_dfs_Remove2(struct ndr_print *ndr, const char *name, int flags, const struct dfs_Remove2 *r);
-enum ndr_err_code ndr_push_dfs_EnumEx(struct ndr_push *ndr, int flags, const struct dfs_EnumEx *r);
-enum ndr_err_code ndr_pull_dfs_EnumEx(struct ndr_pull *ndr, int flags, struct dfs_EnumEx *r);
-void ndr_print_dfs_EnumEx(struct ndr_print *ndr, const char *name, int flags, const struct dfs_EnumEx *r);
-void ndr_print_dfs_SetInfo2(struct ndr_print *ndr, const char *name, int flags, const struct dfs_SetInfo2 *r);
-#endif /* _HEADER_NDR_netdfs */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_dssetup.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_dssetup.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_dssetup.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,1082 +0,0 @@
-/* parser auto-generated by pidl */
-
-#include "includes.h"
-#include "librpc/gen_ndr/ndr_dssetup.h"
-
-#include "librpc/gen_ndr/ndr_misc.h"
-static enum ndr_err_code ndr_push_dssetup_DsRole(struct ndr_push *ndr, int ndr_flags, enum dssetup_DsRole r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dssetup_DsRole(struct ndr_pull *ndr, int ndr_flags, enum dssetup_DsRole *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dssetup_DsRole(struct ndr_print *ndr, const char *name, enum dssetup_DsRole r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case DS_ROLE_STANDALONE_WORKSTATION: val = "DS_ROLE_STANDALONE_WORKSTATION"; break;
-		case DS_ROLE_MEMBER_WORKSTATION: val = "DS_ROLE_MEMBER_WORKSTATION"; break;
-		case DS_ROLE_STANDALONE_SERVER: val = "DS_ROLE_STANDALONE_SERVER"; break;
-		case DS_ROLE_MEMBER_SERVER: val = "DS_ROLE_MEMBER_SERVER"; break;
-		case DS_ROLE_BACKUP_DC: val = "DS_ROLE_BACKUP_DC"; break;
-		case DS_ROLE_PRIMARY_DC: val = "DS_ROLE_PRIMARY_DC"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_dssetup_DsRoleFlags(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dssetup_DsRoleFlags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dssetup_DsRoleFlags(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_ROLE_PRIMARY_DS_RUNNING", DS_ROLE_PRIMARY_DS_RUNNING, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_ROLE_PRIMARY_DS_MIXED_MODE", DS_ROLE_PRIMARY_DS_MIXED_MODE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_ROLE_UPGRADE_IN_PROGRESS", DS_ROLE_UPGRADE_IN_PROGRESS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_ROLE_PRIMARY_DOMAIN_GUID_PRESENT", DS_ROLE_PRIMARY_DOMAIN_GUID_PRESENT, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dssetup_DsRolePrimaryDomInfoBasic(struct ndr_push *ndr, int ndr_flags, const struct dssetup_DsRolePrimaryDomInfoBasic *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_dssetup_DsRole(ndr, NDR_SCALARS, r->role));
-		NDR_CHECK(ndr_push_dssetup_DsRoleFlags(ndr, NDR_SCALARS, r->flags));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->domain));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->dns_domain));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->forest));
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->domain_guid));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->domain) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->domain, ndr_charset_length(r->domain, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->dns_domain) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->dns_domain, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->dns_domain, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->dns_domain, ndr_charset_length(r->dns_domain, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->forest) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->forest, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->forest, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->forest, ndr_charset_length(r->forest, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dssetup_DsRolePrimaryDomInfoBasic(struct ndr_pull *ndr, int ndr_flags, struct dssetup_DsRolePrimaryDomInfoBasic *r)
-{
-	uint32_t _ptr_domain;
-	TALLOC_CTX *_mem_save_domain_0;
-	uint32_t _ptr_dns_domain;
-	TALLOC_CTX *_mem_save_dns_domain_0;
-	uint32_t _ptr_forest;
-	TALLOC_CTX *_mem_save_forest_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_dssetup_DsRole(ndr, NDR_SCALARS, &r->role));
-		NDR_CHECK(ndr_pull_dssetup_DsRoleFlags(ndr, NDR_SCALARS, &r->flags));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain));
-		if (_ptr_domain) {
-			NDR_PULL_ALLOC(ndr, r->domain);
-		} else {
-			r->domain = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dns_domain));
-		if (_ptr_dns_domain) {
-			NDR_PULL_ALLOC(ndr, r->dns_domain);
-		} else {
-			r->dns_domain = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_forest));
-		if (_ptr_forest) {
-			NDR_PULL_ALLOC(ndr, r->forest);
-		} else {
-			r->forest = NULL;
-		}
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->domain_guid));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->domain) {
-			_mem_save_domain_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->domain, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->domain));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->domain));
-			if (ndr_get_array_length(ndr, &r->domain) > ndr_get_array_size(ndr, &r->domain)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->domain), ndr_get_array_length(ndr, &r->domain));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->domain), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->domain, ndr_get_array_length(ndr, &r->domain), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_0, 0);
-		}
-		if (r->dns_domain) {
-			_mem_save_dns_domain_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->dns_domain, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->dns_domain));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->dns_domain));
-			if (ndr_get_array_length(ndr, &r->dns_domain) > ndr_get_array_size(ndr, &r->dns_domain)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->dns_domain), ndr_get_array_length(ndr, &r->dns_domain));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->dns_domain), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->dns_domain, ndr_get_array_length(ndr, &r->dns_domain), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dns_domain_0, 0);
-		}
-		if (r->forest) {
-			_mem_save_forest_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->forest, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->forest));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->forest));
-			if (ndr_get_array_length(ndr, &r->forest) > ndr_get_array_size(ndr, &r->forest)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->forest), ndr_get_array_length(ndr, &r->forest));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->forest), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->forest, ndr_get_array_length(ndr, &r->forest), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_forest_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dssetup_DsRolePrimaryDomInfoBasic(struct ndr_print *ndr, const char *name, const struct dssetup_DsRolePrimaryDomInfoBasic *r)
-{
-	ndr_print_struct(ndr, name, "dssetup_DsRolePrimaryDomInfoBasic");
-	ndr->depth++;
-	ndr_print_dssetup_DsRole(ndr, "role", r->role);
-	ndr_print_dssetup_DsRoleFlags(ndr, "flags", r->flags);
-	ndr_print_ptr(ndr, "domain", r->domain);
-	ndr->depth++;
-	if (r->domain) {
-		ndr_print_string(ndr, "domain", r->domain);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "dns_domain", r->dns_domain);
-	ndr->depth++;
-	if (r->dns_domain) {
-		ndr_print_string(ndr, "dns_domain", r->dns_domain);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "forest", r->forest);
-	ndr->depth++;
-	if (r->forest) {
-		ndr_print_string(ndr, "forest", r->forest);
-	}
-	ndr->depth--;
-	ndr_print_GUID(ndr, "domain_guid", &r->domain_guid);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dssetup_DsUpgrade(struct ndr_push *ndr, int ndr_flags, enum dssetup_DsUpgrade r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dssetup_DsUpgrade(struct ndr_pull *ndr, int ndr_flags, enum dssetup_DsUpgrade *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dssetup_DsUpgrade(struct ndr_print *ndr, const char *name, enum dssetup_DsUpgrade r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case DS_ROLE_NOT_UPGRADING: val = "DS_ROLE_NOT_UPGRADING"; break;
-		case DS_ROLE_UPGRADING: val = "DS_ROLE_UPGRADING"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_dssetup_DsPrevious(struct ndr_push *ndr, int ndr_flags, enum dssetup_DsPrevious r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dssetup_DsPrevious(struct ndr_pull *ndr, int ndr_flags, enum dssetup_DsPrevious *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dssetup_DsPrevious(struct ndr_print *ndr, const char *name, enum dssetup_DsPrevious r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case DS_ROLE_PREVIOUS_UNKNOWN: val = "DS_ROLE_PREVIOUS_UNKNOWN"; break;
-		case DS_ROLE_PREVIOUS_PRIMARY: val = "DS_ROLE_PREVIOUS_PRIMARY"; break;
-		case DS_ROLE_PREVIOUS_BACKUP: val = "DS_ROLE_PREVIOUS_BACKUP"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_dssetup_DsRoleUpgradeStatus(struct ndr_push *ndr, int ndr_flags, const struct dssetup_DsRoleUpgradeStatus *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_dssetup_DsUpgrade(ndr, NDR_SCALARS, r->upgrading));
-		NDR_CHECK(ndr_push_dssetup_DsPrevious(ndr, NDR_SCALARS, r->previous_role));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dssetup_DsRoleUpgradeStatus(struct ndr_pull *ndr, int ndr_flags, struct dssetup_DsRoleUpgradeStatus *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_dssetup_DsUpgrade(ndr, NDR_SCALARS, &r->upgrading));
-		NDR_CHECK(ndr_pull_dssetup_DsPrevious(ndr, NDR_SCALARS, &r->previous_role));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dssetup_DsRoleUpgradeStatus(struct ndr_print *ndr, const char *name, const struct dssetup_DsRoleUpgradeStatus *r)
-{
-	ndr_print_struct(ndr, name, "dssetup_DsRoleUpgradeStatus");
-	ndr->depth++;
-	ndr_print_dssetup_DsUpgrade(ndr, "upgrading", r->upgrading);
-	ndr_print_dssetup_DsPrevious(ndr, "previous_role", r->previous_role);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dssetup_DsRoleOp(struct ndr_push *ndr, int ndr_flags, enum dssetup_DsRoleOp r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dssetup_DsRoleOp(struct ndr_pull *ndr, int ndr_flags, enum dssetup_DsRoleOp *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dssetup_DsRoleOp(struct ndr_print *ndr, const char *name, enum dssetup_DsRoleOp r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case DS_ROLE_OP_IDLE: val = "DS_ROLE_OP_IDLE"; break;
-		case DS_ROLE_OP_ACTIVE: val = "DS_ROLE_OP_ACTIVE"; break;
-		case DS_ROLE_OP_NEEDS_REBOOT: val = "DS_ROLE_OP_NEEDS_REBOOT"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_dssetup_DsRoleOpStatus(struct ndr_push *ndr, int ndr_flags, const struct dssetup_DsRoleOpStatus *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 2));
-		NDR_CHECK(ndr_push_dssetup_DsRoleOp(ndr, NDR_SCALARS, r->status));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dssetup_DsRoleOpStatus(struct ndr_pull *ndr, int ndr_flags, struct dssetup_DsRoleOpStatus *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 2));
-		NDR_CHECK(ndr_pull_dssetup_DsRoleOp(ndr, NDR_SCALARS, &r->status));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dssetup_DsRoleOpStatus(struct ndr_print *ndr, const char *name, const struct dssetup_DsRoleOpStatus *r)
-{
-	ndr_print_struct(ndr, name, "dssetup_DsRoleOpStatus");
-	ndr->depth++;
-	ndr_print_dssetup_DsRoleOp(ndr, "status", r->status);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dssetup_DsRoleInfoLevel(struct ndr_push *ndr, int ndr_flags, enum dssetup_DsRoleInfoLevel r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dssetup_DsRoleInfoLevel(struct ndr_pull *ndr, int ndr_flags, enum dssetup_DsRoleInfoLevel *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dssetup_DsRoleInfoLevel(struct ndr_print *ndr, const char *name, enum dssetup_DsRoleInfoLevel r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case DS_ROLE_BASIC_INFORMATION: val = "DS_ROLE_BASIC_INFORMATION"; break;
-		case DS_ROLE_UPGRADE_STATUS: val = "DS_ROLE_UPGRADE_STATUS"; break;
-		case DS_ROLE_OP_STATUS: val = "DS_ROLE_OP_STATUS"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_dssetup_DsRoleInfo(struct ndr_push *ndr, int ndr_flags, const union dssetup_DsRoleInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_dssetup_DsRoleInfoLevel(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case DS_ROLE_BASIC_INFORMATION: {
-				NDR_CHECK(ndr_push_dssetup_DsRolePrimaryDomInfoBasic(ndr, NDR_SCALARS, &r->basic));
-			break; }
-
-			case DS_ROLE_UPGRADE_STATUS: {
-				NDR_CHECK(ndr_push_dssetup_DsRoleUpgradeStatus(ndr, NDR_SCALARS, &r->upgrade));
-			break; }
-
-			case DS_ROLE_OP_STATUS: {
-				NDR_CHECK(ndr_push_dssetup_DsRoleOpStatus(ndr, NDR_SCALARS, &r->opstatus));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case DS_ROLE_BASIC_INFORMATION:
-				NDR_CHECK(ndr_push_dssetup_DsRolePrimaryDomInfoBasic(ndr, NDR_BUFFERS, &r->basic));
-			break;
-
-			case DS_ROLE_UPGRADE_STATUS:
-			break;
-
-			case DS_ROLE_OP_STATUS:
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dssetup_DsRoleInfo(struct ndr_pull *ndr, int ndr_flags, union dssetup_DsRoleInfo *r)
-{
-	int level;
-	uint16_t _level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case DS_ROLE_BASIC_INFORMATION: {
-				NDR_CHECK(ndr_pull_dssetup_DsRolePrimaryDomInfoBasic(ndr, NDR_SCALARS, &r->basic));
-			break; }
-
-			case DS_ROLE_UPGRADE_STATUS: {
-				NDR_CHECK(ndr_pull_dssetup_DsRoleUpgradeStatus(ndr, NDR_SCALARS, &r->upgrade));
-			break; }
-
-			case DS_ROLE_OP_STATUS: {
-				NDR_CHECK(ndr_pull_dssetup_DsRoleOpStatus(ndr, NDR_SCALARS, &r->opstatus));
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case DS_ROLE_BASIC_INFORMATION:
-				NDR_CHECK(ndr_pull_dssetup_DsRolePrimaryDomInfoBasic(ndr, NDR_BUFFERS, &r->basic));
-			break;
-
-			case DS_ROLE_UPGRADE_STATUS:
-			break;
-
-			case DS_ROLE_OP_STATUS:
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dssetup_DsRoleInfo(struct ndr_print *ndr, const char *name, const union dssetup_DsRoleInfo *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "dssetup_DsRoleInfo");
-	switch (level) {
-		case DS_ROLE_BASIC_INFORMATION:
-			ndr_print_dssetup_DsRolePrimaryDomInfoBasic(ndr, "basic", &r->basic);
-		break;
-
-		case DS_ROLE_UPGRADE_STATUS:
-			ndr_print_dssetup_DsRoleUpgradeStatus(ndr, "upgrade", &r->upgrade);
-		break;
-
-		case DS_ROLE_OP_STATUS:
-			ndr_print_dssetup_DsRoleOpStatus(ndr, "opstatus", &r->opstatus);
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_dssetup_DsRoleGetPrimaryDomainInformation(struct ndr_push *ndr, int flags, const struct dssetup_DsRoleGetPrimaryDomainInformation *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_dssetup_DsRoleInfoLevel(ndr, NDR_SCALARS, r->in.level));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.info));
-		if (r->out.info) {
-			NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.info, r->in.level));
-			NDR_CHECK(ndr_push_dssetup_DsRoleInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dssetup_DsRoleGetPrimaryDomainInformation(struct ndr_pull *ndr, int flags, struct dssetup_DsRoleGetPrimaryDomainInformation *r)
-{
-	uint32_t _ptr_info;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_dssetup_DsRoleInfoLevel(ndr, NDR_SCALARS, &r->in.level));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		} else {
-			r->out.info = NULL;
-		}
-		if (r->out.info) {
-			_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.info, 0);
-			NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.info, r->in.level));
-			NDR_CHECK(ndr_pull_dssetup_DsRoleInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dssetup_DsRoleGetPrimaryDomainInformation(struct ndr_print *ndr, const char *name, int flags, const struct dssetup_DsRoleGetPrimaryDomainInformation *r)
-{
-	ndr_print_struct(ndr, name, "dssetup_DsRoleGetPrimaryDomainInformation");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dssetup_DsRoleGetPrimaryDomainInformation");
-		ndr->depth++;
-		ndr_print_dssetup_DsRoleInfoLevel(ndr, "level", r->in.level);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dssetup_DsRoleGetPrimaryDomainInformation");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		if (r->out.info) {
-			ndr_print_set_switch_value(ndr, r->out.info, r->in.level);
-			ndr_print_dssetup_DsRoleInfo(ndr, "info", r->out.info);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dssetup_DsRoleDnsNameToFlatName(struct ndr_push *ndr, int flags, const struct dssetup_DsRoleDnsNameToFlatName *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dssetup_DsRoleDnsNameToFlatName(struct ndr_pull *ndr, int flags, struct dssetup_DsRoleDnsNameToFlatName *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dssetup_DsRoleDnsNameToFlatName(struct ndr_print *ndr, const char *name, int flags, const struct dssetup_DsRoleDnsNameToFlatName *r)
-{
-	ndr_print_struct(ndr, name, "dssetup_DsRoleDnsNameToFlatName");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dssetup_DsRoleDnsNameToFlatName");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dssetup_DsRoleDnsNameToFlatName");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dssetup_DsRoleDcAsDc(struct ndr_push *ndr, int flags, const struct dssetup_DsRoleDcAsDc *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dssetup_DsRoleDcAsDc(struct ndr_pull *ndr, int flags, struct dssetup_DsRoleDcAsDc *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dssetup_DsRoleDcAsDc(struct ndr_print *ndr, const char *name, int flags, const struct dssetup_DsRoleDcAsDc *r)
-{
-	ndr_print_struct(ndr, name, "dssetup_DsRoleDcAsDc");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dssetup_DsRoleDcAsDc");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dssetup_DsRoleDcAsDc");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dssetup_DsRoleDcAsReplica(struct ndr_push *ndr, int flags, const struct dssetup_DsRoleDcAsReplica *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dssetup_DsRoleDcAsReplica(struct ndr_pull *ndr, int flags, struct dssetup_DsRoleDcAsReplica *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dssetup_DsRoleDcAsReplica(struct ndr_print *ndr, const char *name, int flags, const struct dssetup_DsRoleDcAsReplica *r)
-{
-	ndr_print_struct(ndr, name, "dssetup_DsRoleDcAsReplica");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dssetup_DsRoleDcAsReplica");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dssetup_DsRoleDcAsReplica");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dssetup_DsRoleDemoteDc(struct ndr_push *ndr, int flags, const struct dssetup_DsRoleDemoteDc *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dssetup_DsRoleDemoteDc(struct ndr_pull *ndr, int flags, struct dssetup_DsRoleDemoteDc *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dssetup_DsRoleDemoteDc(struct ndr_print *ndr, const char *name, int flags, const struct dssetup_DsRoleDemoteDc *r)
-{
-	ndr_print_struct(ndr, name, "dssetup_DsRoleDemoteDc");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dssetup_DsRoleDemoteDc");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dssetup_DsRoleDemoteDc");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dssetup_DsRoleGetDcOperationProgress(struct ndr_push *ndr, int flags, const struct dssetup_DsRoleGetDcOperationProgress *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dssetup_DsRoleGetDcOperationProgress(struct ndr_pull *ndr, int flags, struct dssetup_DsRoleGetDcOperationProgress *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dssetup_DsRoleGetDcOperationProgress(struct ndr_print *ndr, const char *name, int flags, const struct dssetup_DsRoleGetDcOperationProgress *r)
-{
-	ndr_print_struct(ndr, name, "dssetup_DsRoleGetDcOperationProgress");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dssetup_DsRoleGetDcOperationProgress");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dssetup_DsRoleGetDcOperationProgress");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dssetup_DsRoleGetDcOperationResults(struct ndr_push *ndr, int flags, const struct dssetup_DsRoleGetDcOperationResults *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dssetup_DsRoleGetDcOperationResults(struct ndr_pull *ndr, int flags, struct dssetup_DsRoleGetDcOperationResults *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dssetup_DsRoleGetDcOperationResults(struct ndr_print *ndr, const char *name, int flags, const struct dssetup_DsRoleGetDcOperationResults *r)
-{
-	ndr_print_struct(ndr, name, "dssetup_DsRoleGetDcOperationResults");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dssetup_DsRoleGetDcOperationResults");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dssetup_DsRoleGetDcOperationResults");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dssetup_DsRoleCancel(struct ndr_push *ndr, int flags, const struct dssetup_DsRoleCancel *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dssetup_DsRoleCancel(struct ndr_pull *ndr, int flags, struct dssetup_DsRoleCancel *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dssetup_DsRoleCancel(struct ndr_print *ndr, const char *name, int flags, const struct dssetup_DsRoleCancel *r)
-{
-	ndr_print_struct(ndr, name, "dssetup_DsRoleCancel");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dssetup_DsRoleCancel");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dssetup_DsRoleCancel");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dssetup_DsRoleServerSaveStateForUpgrade(struct ndr_push *ndr, int flags, const struct dssetup_DsRoleServerSaveStateForUpgrade *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dssetup_DsRoleServerSaveStateForUpgrade(struct ndr_pull *ndr, int flags, struct dssetup_DsRoleServerSaveStateForUpgrade *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dssetup_DsRoleServerSaveStateForUpgrade(struct ndr_print *ndr, const char *name, int flags, const struct dssetup_DsRoleServerSaveStateForUpgrade *r)
-{
-	ndr_print_struct(ndr, name, "dssetup_DsRoleServerSaveStateForUpgrade");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dssetup_DsRoleServerSaveStateForUpgrade");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dssetup_DsRoleServerSaveStateForUpgrade");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dssetup_DsRoleUpgradeDownlevelServer(struct ndr_push *ndr, int flags, const struct dssetup_DsRoleUpgradeDownlevelServer *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dssetup_DsRoleUpgradeDownlevelServer(struct ndr_pull *ndr, int flags, struct dssetup_DsRoleUpgradeDownlevelServer *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dssetup_DsRoleUpgradeDownlevelServer(struct ndr_print *ndr, const char *name, int flags, const struct dssetup_DsRoleUpgradeDownlevelServer *r)
-{
-	ndr_print_struct(ndr, name, "dssetup_DsRoleUpgradeDownlevelServer");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dssetup_DsRoleUpgradeDownlevelServer");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dssetup_DsRoleUpgradeDownlevelServer");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dssetup_DsRoleAbortDownlevelServerUpgrade(struct ndr_push *ndr, int flags, const struct dssetup_DsRoleAbortDownlevelServerUpgrade *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dssetup_DsRoleAbortDownlevelServerUpgrade(struct ndr_pull *ndr, int flags, struct dssetup_DsRoleAbortDownlevelServerUpgrade *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dssetup_DsRoleAbortDownlevelServerUpgrade(struct ndr_print *ndr, const char *name, int flags, const struct dssetup_DsRoleAbortDownlevelServerUpgrade *r)
-{
-	ndr_print_struct(ndr, name, "dssetup_DsRoleAbortDownlevelServerUpgrade");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "dssetup_DsRoleAbortDownlevelServerUpgrade");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "dssetup_DsRoleAbortDownlevelServerUpgrade");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static const struct ndr_interface_call dssetup_calls[] = {
-	{
-		"dssetup_DsRoleGetPrimaryDomainInformation",
-		sizeof(struct dssetup_DsRoleGetPrimaryDomainInformation),
-		(ndr_push_flags_fn_t) ndr_push_dssetup_DsRoleGetPrimaryDomainInformation,
-		(ndr_pull_flags_fn_t) ndr_pull_dssetup_DsRoleGetPrimaryDomainInformation,
-		(ndr_print_function_t) ndr_print_dssetup_DsRoleGetPrimaryDomainInformation,
-		false,
-	},
-	{
-		"dssetup_DsRoleDnsNameToFlatName",
-		sizeof(struct dssetup_DsRoleDnsNameToFlatName),
-		(ndr_push_flags_fn_t) ndr_push_dssetup_DsRoleDnsNameToFlatName,
-		(ndr_pull_flags_fn_t) ndr_pull_dssetup_DsRoleDnsNameToFlatName,
-		(ndr_print_function_t) ndr_print_dssetup_DsRoleDnsNameToFlatName,
-		false,
-	},
-	{
-		"dssetup_DsRoleDcAsDc",
-		sizeof(struct dssetup_DsRoleDcAsDc),
-		(ndr_push_flags_fn_t) ndr_push_dssetup_DsRoleDcAsDc,
-		(ndr_pull_flags_fn_t) ndr_pull_dssetup_DsRoleDcAsDc,
-		(ndr_print_function_t) ndr_print_dssetup_DsRoleDcAsDc,
-		false,
-	},
-	{
-		"dssetup_DsRoleDcAsReplica",
-		sizeof(struct dssetup_DsRoleDcAsReplica),
-		(ndr_push_flags_fn_t) ndr_push_dssetup_DsRoleDcAsReplica,
-		(ndr_pull_flags_fn_t) ndr_pull_dssetup_DsRoleDcAsReplica,
-		(ndr_print_function_t) ndr_print_dssetup_DsRoleDcAsReplica,
-		false,
-	},
-	{
-		"dssetup_DsRoleDemoteDc",
-		sizeof(struct dssetup_DsRoleDemoteDc),
-		(ndr_push_flags_fn_t) ndr_push_dssetup_DsRoleDemoteDc,
-		(ndr_pull_flags_fn_t) ndr_pull_dssetup_DsRoleDemoteDc,
-		(ndr_print_function_t) ndr_print_dssetup_DsRoleDemoteDc,
-		false,
-	},
-	{
-		"dssetup_DsRoleGetDcOperationProgress",
-		sizeof(struct dssetup_DsRoleGetDcOperationProgress),
-		(ndr_push_flags_fn_t) ndr_push_dssetup_DsRoleGetDcOperationProgress,
-		(ndr_pull_flags_fn_t) ndr_pull_dssetup_DsRoleGetDcOperationProgress,
-		(ndr_print_function_t) ndr_print_dssetup_DsRoleGetDcOperationProgress,
-		false,
-	},
-	{
-		"dssetup_DsRoleGetDcOperationResults",
-		sizeof(struct dssetup_DsRoleGetDcOperationResults),
-		(ndr_push_flags_fn_t) ndr_push_dssetup_DsRoleGetDcOperationResults,
-		(ndr_pull_flags_fn_t) ndr_pull_dssetup_DsRoleGetDcOperationResults,
-		(ndr_print_function_t) ndr_print_dssetup_DsRoleGetDcOperationResults,
-		false,
-	},
-	{
-		"dssetup_DsRoleCancel",
-		sizeof(struct dssetup_DsRoleCancel),
-		(ndr_push_flags_fn_t) ndr_push_dssetup_DsRoleCancel,
-		(ndr_pull_flags_fn_t) ndr_pull_dssetup_DsRoleCancel,
-		(ndr_print_function_t) ndr_print_dssetup_DsRoleCancel,
-		false,
-	},
-	{
-		"dssetup_DsRoleServerSaveStateForUpgrade",
-		sizeof(struct dssetup_DsRoleServerSaveStateForUpgrade),
-		(ndr_push_flags_fn_t) ndr_push_dssetup_DsRoleServerSaveStateForUpgrade,
-		(ndr_pull_flags_fn_t) ndr_pull_dssetup_DsRoleServerSaveStateForUpgrade,
-		(ndr_print_function_t) ndr_print_dssetup_DsRoleServerSaveStateForUpgrade,
-		false,
-	},
-	{
-		"dssetup_DsRoleUpgradeDownlevelServer",
-		sizeof(struct dssetup_DsRoleUpgradeDownlevelServer),
-		(ndr_push_flags_fn_t) ndr_push_dssetup_DsRoleUpgradeDownlevelServer,
-		(ndr_pull_flags_fn_t) ndr_pull_dssetup_DsRoleUpgradeDownlevelServer,
-		(ndr_print_function_t) ndr_print_dssetup_DsRoleUpgradeDownlevelServer,
-		false,
-	},
-	{
-		"dssetup_DsRoleAbortDownlevelServerUpgrade",
-		sizeof(struct dssetup_DsRoleAbortDownlevelServerUpgrade),
-		(ndr_push_flags_fn_t) ndr_push_dssetup_DsRoleAbortDownlevelServerUpgrade,
-		(ndr_pull_flags_fn_t) ndr_pull_dssetup_DsRoleAbortDownlevelServerUpgrade,
-		(ndr_print_function_t) ndr_print_dssetup_DsRoleAbortDownlevelServerUpgrade,
-		false,
-	},
-	{ NULL, 0, NULL, NULL, NULL, false }
-};
-
-static const char * const dssetup_endpoint_strings[] = {
-	"ncacn_np:[\\pipe\\lsarpc]", 
-	"ncacn_np:[\\pipe\\lsass]", 
-	"ncacn_ip_tcp:", 
-	"ncalrpc:", 
-};
-
-static const struct ndr_interface_string_array dssetup_endpoints = {
-	.count	= 4,
-	.names	= dssetup_endpoint_strings
-};
-
-static const char * const dssetup_authservice_strings[] = {
-	"host", 
-};
-
-static const struct ndr_interface_string_array dssetup_authservices = {
-	.count	= 1,
-	.names	= dssetup_authservice_strings
-};
-
-
-const struct ndr_interface_table ndr_table_dssetup = {
-	.name		= "dssetup",
-	.syntax_id	= {
-		{0x3919286a,0xb10c,0x11d0,{0x9b,0xa8},{0x00,0xc0,0x4f,0xd9,0x2e,0xf5}},
-		NDR_DSSETUP_VERSION
-	},
-	.helpstring	= NDR_DSSETUP_HELPSTRING,
-	.num_calls	= 11,
-	.calls		= dssetup_calls,
-	.endpoints	= &dssetup_endpoints,
-	.authservices	= &dssetup_authservices
-};
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_dssetup.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_dssetup.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_dssetup.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,58 +0,0 @@
-/* header auto-generated by pidl */
-
-#include "librpc/ndr/libndr.h"
-#include "librpc/gen_ndr/dssetup.h"
-
-#ifndef _HEADER_NDR_dssetup
-#define _HEADER_NDR_dssetup
-
-#define NDR_DSSETUP_UUID "3919286a-b10c-11d0-9ba8-00c04fd92ef5"
-#define NDR_DSSETUP_VERSION 0.0
-#define NDR_DSSETUP_NAME "dssetup"
-#define NDR_DSSETUP_HELPSTRING "Active Directory Setup"
-extern const struct ndr_interface_table ndr_table_dssetup;
-#define NDR_DSSETUP_DSROLEGETPRIMARYDOMAININFORMATION (0x00)
-
-#define NDR_DSSETUP_DSROLEDNSNAMETOFLATNAME (0x01)
-
-#define NDR_DSSETUP_DSROLEDCASDC (0x02)
-
-#define NDR_DSSETUP_DSROLEDCASREPLICA (0x03)
-
-#define NDR_DSSETUP_DSROLEDEMOTEDC (0x04)
-
-#define NDR_DSSETUP_DSROLEGETDCOPERATIONPROGRESS (0x05)
-
-#define NDR_DSSETUP_DSROLEGETDCOPERATIONRESULTS (0x06)
-
-#define NDR_DSSETUP_DSROLECANCEL (0x07)
-
-#define NDR_DSSETUP_DSROLESERVERSAVESTATEFORUPGRADE (0x08)
-
-#define NDR_DSSETUP_DSROLEUPGRADEDOWNLEVELSERVER (0x09)
-
-#define NDR_DSSETUP_DSROLEABORTDOWNLEVELSERVERUPGRADE (0x0a)
-
-#define NDR_DSSETUP_CALL_COUNT (11)
-void ndr_print_dssetup_DsRole(struct ndr_print *ndr, const char *name, enum dssetup_DsRole r);
-void ndr_print_dssetup_DsRoleFlags(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_dssetup_DsRolePrimaryDomInfoBasic(struct ndr_print *ndr, const char *name, const struct dssetup_DsRolePrimaryDomInfoBasic *r);
-void ndr_print_dssetup_DsUpgrade(struct ndr_print *ndr, const char *name, enum dssetup_DsUpgrade r);
-void ndr_print_dssetup_DsPrevious(struct ndr_print *ndr, const char *name, enum dssetup_DsPrevious r);
-void ndr_print_dssetup_DsRoleUpgradeStatus(struct ndr_print *ndr, const char *name, const struct dssetup_DsRoleUpgradeStatus *r);
-void ndr_print_dssetup_DsRoleOp(struct ndr_print *ndr, const char *name, enum dssetup_DsRoleOp r);
-void ndr_print_dssetup_DsRoleOpStatus(struct ndr_print *ndr, const char *name, const struct dssetup_DsRoleOpStatus *r);
-void ndr_print_dssetup_DsRoleInfoLevel(struct ndr_print *ndr, const char *name, enum dssetup_DsRoleInfoLevel r);
-void ndr_print_dssetup_DsRoleInfo(struct ndr_print *ndr, const char *name, const union dssetup_DsRoleInfo *r);
-void ndr_print_dssetup_DsRoleGetPrimaryDomainInformation(struct ndr_print *ndr, const char *name, int flags, const struct dssetup_DsRoleGetPrimaryDomainInformation *r);
-void ndr_print_dssetup_DsRoleDnsNameToFlatName(struct ndr_print *ndr, const char *name, int flags, const struct dssetup_DsRoleDnsNameToFlatName *r);
-void ndr_print_dssetup_DsRoleDcAsDc(struct ndr_print *ndr, const char *name, int flags, const struct dssetup_DsRoleDcAsDc *r);
-void ndr_print_dssetup_DsRoleDcAsReplica(struct ndr_print *ndr, const char *name, int flags, const struct dssetup_DsRoleDcAsReplica *r);
-void ndr_print_dssetup_DsRoleDemoteDc(struct ndr_print *ndr, const char *name, int flags, const struct dssetup_DsRoleDemoteDc *r);
-void ndr_print_dssetup_DsRoleGetDcOperationProgress(struct ndr_print *ndr, const char *name, int flags, const struct dssetup_DsRoleGetDcOperationProgress *r);
-void ndr_print_dssetup_DsRoleGetDcOperationResults(struct ndr_print *ndr, const char *name, int flags, const struct dssetup_DsRoleGetDcOperationResults *r);
-void ndr_print_dssetup_DsRoleCancel(struct ndr_print *ndr, const char *name, int flags, const struct dssetup_DsRoleCancel *r);
-void ndr_print_dssetup_DsRoleServerSaveStateForUpgrade(struct ndr_print *ndr, const char *name, int flags, const struct dssetup_DsRoleServerSaveStateForUpgrade *r);
-void ndr_print_dssetup_DsRoleUpgradeDownlevelServer(struct ndr_print *ndr, const char *name, int flags, const struct dssetup_DsRoleUpgradeDownlevelServer *r);
-void ndr_print_dssetup_DsRoleAbortDownlevelServerUpgrade(struct ndr_print *ndr, const char *name, int flags, const struct dssetup_DsRoleAbortDownlevelServerUpgrade *r);
-#endif /* _HEADER_NDR_dssetup */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_echo.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_echo.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_echo.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,1513 +0,0 @@
-/* parser auto-generated by pidl */
-
-#include "includes.h"
-#include "librpc/gen_ndr/ndr_echo.h"
-
-static enum ndr_err_code ndr_push_echo_info1(struct ndr_push *ndr, int ndr_flags, const struct echo_info1 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 1));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->v));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_echo_info1(struct ndr_pull *ndr, int ndr_flags, struct echo_info1 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 1));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->v));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_echo_info1(struct ndr_print *ndr, const char *name, const struct echo_info1 *r)
-{
-	ndr_print_struct(ndr, name, "echo_info1");
-	ndr->depth++;
-	ndr_print_uint8(ndr, "v", r->v);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_echo_info2(struct ndr_push *ndr, int ndr_flags, const struct echo_info2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 2));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->v));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_echo_info2(struct ndr_pull *ndr, int ndr_flags, struct echo_info2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 2));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->v));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_echo_info2(struct ndr_print *ndr, const char *name, const struct echo_info2 *r)
-{
-	ndr_print_struct(ndr, name, "echo_info2");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "v", r->v);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_echo_info3(struct ndr_push *ndr, int ndr_flags, const struct echo_info3 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->v));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_echo_info3(struct ndr_pull *ndr, int ndr_flags, struct echo_info3 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->v));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_echo_info3(struct ndr_print *ndr, const char *name, const struct echo_info3 *r)
-{
-	ndr_print_struct(ndr, name, "echo_info3");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "v", r->v);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_STRUCT_echo_info4(struct ndr_push *ndr, int ndr_flags, const struct echo_info4 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 8));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->v));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_STRUCT_echo_info4(struct ndr_pull *ndr, int ndr_flags, struct echo_info4 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 8));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->v));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_STRUCT_echo_info4(struct ndr_print *ndr, const char *name, const struct echo_info4 *r)
-{
-	ndr_print_struct(ndr, name, "echo_info4");
-	ndr->depth++;
-	ndr_print_hyper(ndr, "v", r->v);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_echo_info5(struct ndr_push *ndr, int ndr_flags, const struct echo_info5 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 8));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->v1));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->v2));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_echo_info5(struct ndr_pull *ndr, int ndr_flags, struct echo_info5 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 8));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->v1));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->v2));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_echo_info5(struct ndr_print *ndr, const char *name, const struct echo_info5 *r)
-{
-	ndr_print_struct(ndr, name, "echo_info5");
-	ndr->depth++;
-	ndr_print_uint8(ndr, "v1", r->v1);
-	ndr_print_hyper(ndr, "v2", r->v2);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_echo_info6(struct ndr_push *ndr, int ndr_flags, const struct echo_info6 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 1));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->v1));
-		NDR_CHECK(ndr_push_echo_info1(ndr, NDR_SCALARS, &r->info1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_echo_info6(struct ndr_pull *ndr, int ndr_flags, struct echo_info6 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 1));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->v1));
-		NDR_CHECK(ndr_pull_echo_info1(ndr, NDR_SCALARS, &r->info1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_echo_info6(struct ndr_print *ndr, const char *name, const struct echo_info6 *r)
-{
-	ndr_print_struct(ndr, name, "echo_info6");
-	ndr->depth++;
-	ndr_print_uint8(ndr, "v1", r->v1);
-	ndr_print_echo_info1(ndr, "info1", &r->info1);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_echo_info7(struct ndr_push *ndr, int ndr_flags, const struct echo_info7 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 8));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->v1));
-		NDR_CHECK(ndr_push_STRUCT_echo_info4(ndr, NDR_SCALARS, &r->info4));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_echo_info7(struct ndr_pull *ndr, int ndr_flags, struct echo_info7 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 8));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->v1));
-		NDR_CHECK(ndr_pull_STRUCT_echo_info4(ndr, NDR_SCALARS, &r->info4));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_echo_info7(struct ndr_print *ndr, const char *name, const struct echo_info7 *r)
-{
-	ndr_print_struct(ndr, name, "echo_info7");
-	ndr->depth++;
-	ndr_print_uint8(ndr, "v1", r->v1);
-	ndr_print_STRUCT_echo_info4(ndr, "info4", &r->info4);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_echo_Info(struct ndr_push *ndr, int ndr_flags, const union echo_Info *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 1: {
-				NDR_CHECK(ndr_push_echo_info1(ndr, NDR_SCALARS, &r->info1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_push_echo_info2(ndr, NDR_SCALARS, &r->info2));
-			break; }
-
-			case 3: {
-				NDR_CHECK(ndr_push_echo_info3(ndr, NDR_SCALARS, &r->info3));
-			break; }
-
-			case 4: {
-				NDR_CHECK(ndr_push_STRUCT_echo_info4(ndr, NDR_SCALARS, &r->info4));
-			break; }
-
-			case 5: {
-				NDR_CHECK(ndr_push_echo_info5(ndr, NDR_SCALARS, &r->info5));
-			break; }
-
-			case 6: {
-				NDR_CHECK(ndr_push_echo_info6(ndr, NDR_SCALARS, &r->info6));
-			break; }
-
-			case 7: {
-				NDR_CHECK(ndr_push_echo_info7(ndr, NDR_SCALARS, &r->info7));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 1:
-			break;
-
-			case 2:
-			break;
-
-			case 3:
-			break;
-
-			case 4:
-			break;
-
-			case 5:
-			break;
-
-			case 6:
-			break;
-
-			case 7:
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_echo_Info(struct ndr_pull *ndr, int ndr_flags, union echo_Info *r)
-{
-	int level;
-	uint16_t _level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 1: {
-				NDR_CHECK(ndr_pull_echo_info1(ndr, NDR_SCALARS, &r->info1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_pull_echo_info2(ndr, NDR_SCALARS, &r->info2));
-			break; }
-
-			case 3: {
-				NDR_CHECK(ndr_pull_echo_info3(ndr, NDR_SCALARS, &r->info3));
-			break; }
-
-			case 4: {
-				NDR_CHECK(ndr_pull_STRUCT_echo_info4(ndr, NDR_SCALARS, &r->info4));
-			break; }
-
-			case 5: {
-				NDR_CHECK(ndr_pull_echo_info5(ndr, NDR_SCALARS, &r->info5));
-			break; }
-
-			case 6: {
-				NDR_CHECK(ndr_pull_echo_info6(ndr, NDR_SCALARS, &r->info6));
-			break; }
-
-			case 7: {
-				NDR_CHECK(ndr_pull_echo_info7(ndr, NDR_SCALARS, &r->info7));
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 1:
-			break;
-
-			case 2:
-			break;
-
-			case 3:
-			break;
-
-			case 4:
-			break;
-
-			case 5:
-			break;
-
-			case 6:
-			break;
-
-			case 7:
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_echo_Info(struct ndr_print *ndr, const char *name, const union echo_Info *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "echo_Info");
-	switch (level) {
-		case 1:
-			ndr_print_echo_info1(ndr, "info1", &r->info1);
-		break;
-
-		case 2:
-			ndr_print_echo_info2(ndr, "info2", &r->info2);
-		break;
-
-		case 3:
-			ndr_print_echo_info3(ndr, "info3", &r->info3);
-		break;
-
-		case 4:
-			ndr_print_STRUCT_echo_info4(ndr, "info4", &r->info4);
-		break;
-
-		case 5:
-			ndr_print_echo_info5(ndr, "info5", &r->info5);
-		break;
-
-		case 6:
-			ndr_print_echo_info6(ndr, "info6", &r->info6);
-		break;
-
-		case 7:
-			ndr_print_echo_info7(ndr, "info7", &r->info7);
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_echo_Enum1(struct ndr_push *ndr, int ndr_flags, enum echo_Enum1 r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_echo_Enum1(struct ndr_pull *ndr, int ndr_flags, enum echo_Enum1 *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_echo_Enum1(struct ndr_print *ndr, const char *name, enum echo_Enum1 r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case ECHO_ENUM1: val = "ECHO_ENUM1"; break;
-		case ECHO_ENUM2: val = "ECHO_ENUM2"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_echo_Enum1_32(struct ndr_push *ndr, int ndr_flags, enum echo_Enum1_32 r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_echo_Enum1_32(struct ndr_pull *ndr, int ndr_flags, enum echo_Enum1_32 *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_echo_Enum1_32(struct ndr_print *ndr, const char *name, enum echo_Enum1_32 r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case ECHO_ENUM1_32: val = "ECHO_ENUM1_32"; break;
-		case ECHO_ENUM2_32: val = "ECHO_ENUM2_32"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_echo_Enum2(struct ndr_push *ndr, int ndr_flags, const struct echo_Enum2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_echo_Enum1(ndr, NDR_SCALARS, r->e1));
-		NDR_CHECK(ndr_push_echo_Enum1_32(ndr, NDR_SCALARS, r->e2));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_echo_Enum2(struct ndr_pull *ndr, int ndr_flags, struct echo_Enum2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_echo_Enum1(ndr, NDR_SCALARS, &r->e1));
-		NDR_CHECK(ndr_pull_echo_Enum1_32(ndr, NDR_SCALARS, &r->e2));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_echo_Enum2(struct ndr_print *ndr, const char *name, const struct echo_Enum2 *r)
-{
-	ndr_print_struct(ndr, name, "echo_Enum2");
-	ndr->depth++;
-	ndr_print_echo_Enum1(ndr, "e1", r->e1);
-	ndr_print_echo_Enum1_32(ndr, "e2", r->e2);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_echo_Enum3(struct ndr_push *ndr, int ndr_flags, const union echo_Enum3 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case ECHO_ENUM1: {
-				NDR_CHECK(ndr_push_echo_Enum1(ndr, NDR_SCALARS, r->e1));
-			break; }
-
-			case ECHO_ENUM2: {
-				NDR_CHECK(ndr_push_echo_Enum2(ndr, NDR_SCALARS, &r->e2));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case ECHO_ENUM1:
-			break;
-
-			case ECHO_ENUM2:
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_echo_Enum3(struct ndr_pull *ndr, int ndr_flags, union echo_Enum3 *r)
-{
-	int level;
-	uint16_t _level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case ECHO_ENUM1: {
-				NDR_CHECK(ndr_pull_echo_Enum1(ndr, NDR_SCALARS, &r->e1));
-			break; }
-
-			case ECHO_ENUM2: {
-				NDR_CHECK(ndr_pull_echo_Enum2(ndr, NDR_SCALARS, &r->e2));
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case ECHO_ENUM1:
-			break;
-
-			case ECHO_ENUM2:
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_echo_Enum3(struct ndr_print *ndr, const char *name, const union echo_Enum3 *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "echo_Enum3");
-	switch (level) {
-		case ECHO_ENUM1:
-			ndr_print_echo_Enum1(ndr, "e1", r->e1);
-		break;
-
-		case ECHO_ENUM2:
-			ndr_print_echo_Enum2(ndr, "e2", &r->e2);
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_echo_Surrounding(struct ndr_push *ndr, int ndr_flags, const struct echo_Surrounding *r)
-{
-	uint32_t cntr_surrounding_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->x));
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->x));
-		for (cntr_surrounding_0 = 0; cntr_surrounding_0 < r->x; cntr_surrounding_0++) {
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->surrounding[cntr_surrounding_0]));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_echo_Surrounding(struct ndr_pull *ndr, int ndr_flags, struct echo_Surrounding *r)
-{
-	uint32_t cntr_surrounding_0;
-	TALLOC_CTX *_mem_save_surrounding_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->surrounding));
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->x));
-		NDR_PULL_ALLOC_N(ndr, r->surrounding, ndr_get_array_size(ndr, &r->surrounding));
-		_mem_save_surrounding_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->surrounding, 0);
-		for (cntr_surrounding_0 = 0; cntr_surrounding_0 < r->x; cntr_surrounding_0++) {
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->surrounding[cntr_surrounding_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_surrounding_0, 0);
-		if (r->surrounding) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->surrounding, r->x));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_echo_Surrounding(struct ndr_print *ndr, const char *name, const struct echo_Surrounding *r)
-{
-	uint32_t cntr_surrounding_0;
-	ndr_print_struct(ndr, name, "echo_Surrounding");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "x", r->x);
-	ndr->print(ndr, "%s: ARRAY(%d)", "surrounding", r->x);
-	ndr->depth++;
-	for (cntr_surrounding_0=0;cntr_surrounding_0<r->x;cntr_surrounding_0++) {
-		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_surrounding_0) != -1) {
-			ndr_print_uint16(ndr, "surrounding", r->surrounding[cntr_surrounding_0]);
-			free(idx_0);
-		}
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_echo_AddOne(struct ndr_push *ndr, int flags, const struct echo_AddOne *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.in_data));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.out_data == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.out_data));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_echo_AddOne(struct ndr_pull *ndr, int flags, struct echo_AddOne *r)
-{
-	TALLOC_CTX *_mem_save_out_data_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.in_data));
-		NDR_PULL_ALLOC(ndr, r->out.out_data);
-		ZERO_STRUCTP(r->out.out_data);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.out_data);
-		}
-		_mem_save_out_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.out_data, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.out_data));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_out_data_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_echo_AddOne(struct ndr_print *ndr, const char *name, int flags, const struct echo_AddOne *r)
-{
-	ndr_print_struct(ndr, name, "echo_AddOne");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "echo_AddOne");
-		ndr->depth++;
-		ndr_print_uint32(ndr, "in_data", r->in.in_data);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "echo_AddOne");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "out_data", r->out.out_data);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "out_data", *r->out.out_data);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_echo_EchoData(struct ndr_push *ndr, int flags, const struct echo_EchoData *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.len));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.len));
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->in.in_data, r->in.len));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.len));
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->out.out_data, r->in.len));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_echo_EchoData(struct ndr_pull *ndr, int flags, struct echo_EchoData *r)
-{
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.len));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.in_data));
-		NDR_PULL_ALLOC_N(ndr, r->in.in_data, ndr_get_array_size(ndr, &r->in.in_data));
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->in.in_data, ndr_get_array_size(ndr, &r->in.in_data)));
-		if (r->in.in_data) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.in_data, r->in.len));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->out.out_data));
-		NDR_PULL_ALLOC_N(ndr, r->out.out_data, ndr_get_array_size(ndr, &r->out.out_data));
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.out_data, ndr_get_array_size(ndr, &r->out.out_data)));
-		if (r->out.out_data) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->out.out_data, r->in.len));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_echo_EchoData(struct ndr_print *ndr, const char *name, int flags, const struct echo_EchoData *r)
-{
-	ndr_print_struct(ndr, name, "echo_EchoData");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "echo_EchoData");
-		ndr->depth++;
-		ndr_print_uint32(ndr, "len", r->in.len);
-		ndr_print_array_uint8(ndr, "in_data", r->in.in_data, r->in.len);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "echo_EchoData");
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "out_data", r->out.out_data, r->in.len);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_echo_SinkData(struct ndr_push *ndr, int flags, const struct echo_SinkData *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.len));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.len));
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->in.data, r->in.len));
-	}
-	if (flags & NDR_OUT) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_echo_SinkData(struct ndr_pull *ndr, int flags, struct echo_SinkData *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.len));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.data));
-		NDR_PULL_ALLOC_N(ndr, r->in.data, ndr_get_array_size(ndr, &r->in.data));
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->in.data, ndr_get_array_size(ndr, &r->in.data)));
-		if (r->in.data) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.data, r->in.len));
-		}
-	}
-	if (flags & NDR_OUT) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_echo_SinkData(struct ndr_print *ndr, const char *name, int flags, const struct echo_SinkData *r)
-{
-	ndr_print_struct(ndr, name, "echo_SinkData");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "echo_SinkData");
-		ndr->depth++;
-		ndr_print_uint32(ndr, "len", r->in.len);
-		ndr_print_array_uint8(ndr, "data", r->in.data, r->in.len);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "echo_SinkData");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_echo_SourceData(struct ndr_push *ndr, int flags, const struct echo_SourceData *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.len));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.len));
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->out.data, r->in.len));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_echo_SourceData(struct ndr_pull *ndr, int flags, struct echo_SourceData *r)
-{
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.len));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->out.data));
-		NDR_PULL_ALLOC_N(ndr, r->out.data, ndr_get_array_size(ndr, &r->out.data));
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.data, ndr_get_array_size(ndr, &r->out.data)));
-		if (r->out.data) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->out.data, r->in.len));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_echo_SourceData(struct ndr_print *ndr, const char *name, int flags, const struct echo_SourceData *r)
-{
-	ndr_print_struct(ndr, name, "echo_SourceData");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "echo_SourceData");
-		ndr->depth++;
-		ndr_print_uint32(ndr, "len", r->in.len);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "echo_SourceData");
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "data", r->out.data, r->in.len);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_echo_TestCall(struct ndr_push *ndr, int flags, const struct echo_TestCall *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.s1 == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.s1, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.s1, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.s1, ndr_charset_length(r->in.s1, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.s2 == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.s2));
-		if (*r->out.s2) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.s2, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.s2, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, *r->out.s2, ndr_charset_length(*r->out.s2, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_echo_TestCall(struct ndr_pull *ndr, int flags, struct echo_TestCall *r)
-{
-	uint32_t _ptr_s2;
-	TALLOC_CTX *_mem_save_s2_0;
-	TALLOC_CTX *_mem_save_s2_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.s1));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.s1));
-		if (ndr_get_array_length(ndr, &r->in.s1) > ndr_get_array_size(ndr, &r->in.s1)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.s1), ndr_get_array_length(ndr, &r->in.s1));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.s1), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.s1, ndr_get_array_length(ndr, &r->in.s1), sizeof(uint16_t), CH_UTF16));
-		NDR_PULL_ALLOC(ndr, r->out.s2);
-		ZERO_STRUCTP(r->out.s2);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.s2);
-		}
-		_mem_save_s2_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.s2, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_s2));
-		if (_ptr_s2) {
-			NDR_PULL_ALLOC(ndr, *r->out.s2);
-		} else {
-			*r->out.s2 = NULL;
-		}
-		if (*r->out.s2) {
-			_mem_save_s2_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.s2, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, r->out.s2));
-			NDR_CHECK(ndr_pull_array_length(ndr, r->out.s2));
-			if (ndr_get_array_length(ndr, r->out.s2) > ndr_get_array_size(ndr, r->out.s2)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, r->out.s2), ndr_get_array_length(ndr, r->out.s2));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, r->out.s2), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->out.s2, ndr_get_array_length(ndr, r->out.s2), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_s2_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_s2_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_echo_TestCall(struct ndr_print *ndr, const char *name, int flags, const struct echo_TestCall *r)
-{
-	ndr_print_struct(ndr, name, "echo_TestCall");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "echo_TestCall");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "s1", r->in.s1);
-		ndr->depth++;
-		ndr_print_string(ndr, "s1", r->in.s1);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "echo_TestCall");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "s2", r->out.s2);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "s2", *r->out.s2);
-		ndr->depth++;
-		if (*r->out.s2) {
-			ndr_print_string(ndr, "s2", *r->out.s2);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_echo_TestCall2(struct ndr_push *ndr, int flags, const struct echo_TestCall2 *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.level));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_push_echo_Info(ndr, NDR_SCALARS, r->out.info));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_echo_TestCall2(struct ndr_pull *ndr, int flags, struct echo_TestCall2 *r)
-{
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.level));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_pull_echo_Info(ndr, NDR_SCALARS, r->out.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_echo_TestCall2(struct ndr_print *ndr, const char *name, int flags, const struct echo_TestCall2 *r)
-{
-	ndr_print_struct(ndr, name, "echo_TestCall2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "echo_TestCall2");
-		ndr->depth++;
-		ndr_print_uint16(ndr, "level", r->in.level);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "echo_TestCall2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.info, r->in.level);
-		ndr_print_echo_Info(ndr, "info", r->out.info);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_echo_TestSleep(struct ndr_push *ndr, int flags, const struct echo_TestSleep *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.seconds));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_echo_TestSleep(struct ndr_pull *ndr, int flags, struct echo_TestSleep *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.seconds));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_echo_TestSleep(struct ndr_print *ndr, const char *name, int flags, const struct echo_TestSleep *r)
-{
-	ndr_print_struct(ndr, name, "echo_TestSleep");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "echo_TestSleep");
-		ndr->depth++;
-		ndr_print_uint32(ndr, "seconds", r->in.seconds);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "echo_TestSleep");
-		ndr->depth++;
-		ndr_print_uint32(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_echo_TestEnum(struct ndr_push *ndr, int flags, const struct echo_TestEnum *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.foo1 == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_echo_Enum1(ndr, NDR_SCALARS, *r->in.foo1));
-		if (r->in.foo2 == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_echo_Enum2(ndr, NDR_SCALARS, r->in.foo2));
-		if (r->in.foo3 == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.foo3, *r->in.foo1));
-		NDR_CHECK(ndr_push_echo_Enum3(ndr, NDR_SCALARS, r->in.foo3));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.foo1 == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_echo_Enum1(ndr, NDR_SCALARS, *r->out.foo1));
-		if (r->out.foo2 == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_echo_Enum2(ndr, NDR_SCALARS, r->out.foo2));
-		if (r->out.foo3 == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.foo3, *r->out.foo1));
-		NDR_CHECK(ndr_push_echo_Enum3(ndr, NDR_SCALARS, r->out.foo3));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_echo_TestEnum(struct ndr_pull *ndr, int flags, struct echo_TestEnum *r)
-{
-	TALLOC_CTX *_mem_save_foo1_0;
-	TALLOC_CTX *_mem_save_foo2_0;
-	TALLOC_CTX *_mem_save_foo3_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.foo1);
-		}
-		_mem_save_foo1_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.foo1, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_echo_Enum1(ndr, NDR_SCALARS, r->in.foo1));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_foo1_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.foo2);
-		}
-		_mem_save_foo2_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.foo2, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_echo_Enum2(ndr, NDR_SCALARS, r->in.foo2));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_foo2_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.foo3);
-		}
-		_mem_save_foo3_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.foo3, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.foo3, *r->in.foo1));
-		NDR_CHECK(ndr_pull_echo_Enum3(ndr, NDR_SCALARS, r->in.foo3));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_foo3_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.foo1);
-		*r->out.foo1 = *r->in.foo1;
-		NDR_PULL_ALLOC(ndr, r->out.foo2);
-		*r->out.foo2 = *r->in.foo2;
-		NDR_PULL_ALLOC(ndr, r->out.foo3);
-		*r->out.foo3 = *r->in.foo3;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.foo1);
-		}
-		_mem_save_foo1_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.foo1, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_echo_Enum1(ndr, NDR_SCALARS, r->out.foo1));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_foo1_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.foo2);
-		}
-		_mem_save_foo2_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.foo2, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_echo_Enum2(ndr, NDR_SCALARS, r->out.foo2));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_foo2_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.foo3);
-		}
-		_mem_save_foo3_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.foo3, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.foo3, *r->out.foo1));
-		NDR_CHECK(ndr_pull_echo_Enum3(ndr, NDR_SCALARS, r->out.foo3));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_foo3_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_echo_TestEnum(struct ndr_print *ndr, const char *name, int flags, const struct echo_TestEnum *r)
-{
-	ndr_print_struct(ndr, name, "echo_TestEnum");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "echo_TestEnum");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "foo1", r->in.foo1);
-		ndr->depth++;
-		ndr_print_echo_Enum1(ndr, "foo1", *r->in.foo1);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "foo2", r->in.foo2);
-		ndr->depth++;
-		ndr_print_echo_Enum2(ndr, "foo2", r->in.foo2);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "foo3", r->in.foo3);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->in.foo3, *r->in.foo1);
-		ndr_print_echo_Enum3(ndr, "foo3", r->in.foo3);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "echo_TestEnum");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "foo1", r->out.foo1);
-		ndr->depth++;
-		ndr_print_echo_Enum1(ndr, "foo1", *r->out.foo1);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "foo2", r->out.foo2);
-		ndr->depth++;
-		ndr_print_echo_Enum2(ndr, "foo2", r->out.foo2);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "foo3", r->out.foo3);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.foo3, *r->out.foo1);
-		ndr_print_echo_Enum3(ndr, "foo3", r->out.foo3);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_echo_TestSurrounding(struct ndr_push *ndr, int flags, const struct echo_TestSurrounding *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.data == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_echo_Surrounding(ndr, NDR_SCALARS, r->in.data));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.data == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_echo_Surrounding(ndr, NDR_SCALARS, r->out.data));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_echo_TestSurrounding(struct ndr_pull *ndr, int flags, struct echo_TestSurrounding *r)
-{
-	TALLOC_CTX *_mem_save_data_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.data);
-		}
-		_mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.data, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_echo_Surrounding(ndr, NDR_SCALARS, r->in.data));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.data);
-		*r->out.data = *r->in.data;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.data);
-		}
-		_mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.data, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_echo_Surrounding(ndr, NDR_SCALARS, r->out.data));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_echo_TestSurrounding(struct ndr_print *ndr, const char *name, int flags, const struct echo_TestSurrounding *r)
-{
-	ndr_print_struct(ndr, name, "echo_TestSurrounding");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "echo_TestSurrounding");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "data", r->in.data);
-		ndr->depth++;
-		ndr_print_echo_Surrounding(ndr, "data", r->in.data);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "echo_TestSurrounding");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "data", r->out.data);
-		ndr->depth++;
-		ndr_print_echo_Surrounding(ndr, "data", r->out.data);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_echo_TestDoublePointer(struct ndr_push *ndr, int flags, const struct echo_TestDoublePointer *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.data == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->in.data));
-		if (*r->in.data) {
-			NDR_CHECK(ndr_push_unique_ptr(ndr, **r->in.data));
-			if (**r->in.data) {
-				NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ***r->in.data));
-			}
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_echo_TestDoublePointer(struct ndr_pull *ndr, int flags, struct echo_TestDoublePointer *r)
-{
-	uint32_t _ptr_data;
-	TALLOC_CTX *_mem_save_data_0;
-	TALLOC_CTX *_mem_save_data_1;
-	TALLOC_CTX *_mem_save_data_2;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.data);
-		}
-		_mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.data, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_data));
-		if (_ptr_data) {
-			NDR_PULL_ALLOC(ndr, *r->in.data);
-		} else {
-			*r->in.data = NULL;
-		}
-		if (*r->in.data) {
-			_mem_save_data_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->in.data, 0);
-			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_data));
-			if (_ptr_data) {
-				NDR_PULL_ALLOC(ndr, **r->in.data);
-			} else {
-				**r->in.data = NULL;
-			}
-			if (**r->in.data) {
-				_mem_save_data_2 = NDR_PULL_GET_MEM_CTX(ndr);
-				NDR_PULL_SET_MEM_CTX(ndr, **r->in.data, 0);
-				NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, **r->in.data));
-				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_2, 0);
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_echo_TestDoublePointer(struct ndr_print *ndr, const char *name, int flags, const struct echo_TestDoublePointer *r)
-{
-	ndr_print_struct(ndr, name, "echo_TestDoublePointer");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "echo_TestDoublePointer");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "data", r->in.data);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "data", *r->in.data);
-		ndr->depth++;
-		if (*r->in.data) {
-			ndr_print_ptr(ndr, "data", **r->in.data);
-			ndr->depth++;
-			if (**r->in.data) {
-				ndr_print_uint16(ndr, "data", ***r->in.data);
-			}
-			ndr->depth--;
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "echo_TestDoublePointer");
-		ndr->depth++;
-		ndr_print_uint16(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static const struct ndr_interface_call rpcecho_calls[] = {
-	{
-		"echo_AddOne",
-		sizeof(struct echo_AddOne),
-		(ndr_push_flags_fn_t) ndr_push_echo_AddOne,
-		(ndr_pull_flags_fn_t) ndr_pull_echo_AddOne,
-		(ndr_print_function_t) ndr_print_echo_AddOne,
-		false,
-	},
-	{
-		"echo_EchoData",
-		sizeof(struct echo_EchoData),
-		(ndr_push_flags_fn_t) ndr_push_echo_EchoData,
-		(ndr_pull_flags_fn_t) ndr_pull_echo_EchoData,
-		(ndr_print_function_t) ndr_print_echo_EchoData,
-		false,
-	},
-	{
-		"echo_SinkData",
-		sizeof(struct echo_SinkData),
-		(ndr_push_flags_fn_t) ndr_push_echo_SinkData,
-		(ndr_pull_flags_fn_t) ndr_pull_echo_SinkData,
-		(ndr_print_function_t) ndr_print_echo_SinkData,
-		false,
-	},
-	{
-		"echo_SourceData",
-		sizeof(struct echo_SourceData),
-		(ndr_push_flags_fn_t) ndr_push_echo_SourceData,
-		(ndr_pull_flags_fn_t) ndr_pull_echo_SourceData,
-		(ndr_print_function_t) ndr_print_echo_SourceData,
-		false,
-	},
-	{
-		"echo_TestCall",
-		sizeof(struct echo_TestCall),
-		(ndr_push_flags_fn_t) ndr_push_echo_TestCall,
-		(ndr_pull_flags_fn_t) ndr_pull_echo_TestCall,
-		(ndr_print_function_t) ndr_print_echo_TestCall,
-		false,
-	},
-	{
-		"echo_TestCall2",
-		sizeof(struct echo_TestCall2),
-		(ndr_push_flags_fn_t) ndr_push_echo_TestCall2,
-		(ndr_pull_flags_fn_t) ndr_pull_echo_TestCall2,
-		(ndr_print_function_t) ndr_print_echo_TestCall2,
-		false,
-	},
-	{
-		"echo_TestSleep",
-		sizeof(struct echo_TestSleep),
-		(ndr_push_flags_fn_t) ndr_push_echo_TestSleep,
-		(ndr_pull_flags_fn_t) ndr_pull_echo_TestSleep,
-		(ndr_print_function_t) ndr_print_echo_TestSleep,
-		false,
-	},
-	{
-		"echo_TestEnum",
-		sizeof(struct echo_TestEnum),
-		(ndr_push_flags_fn_t) ndr_push_echo_TestEnum,
-		(ndr_pull_flags_fn_t) ndr_pull_echo_TestEnum,
-		(ndr_print_function_t) ndr_print_echo_TestEnum,
-		false,
-	},
-	{
-		"echo_TestSurrounding",
-		sizeof(struct echo_TestSurrounding),
-		(ndr_push_flags_fn_t) ndr_push_echo_TestSurrounding,
-		(ndr_pull_flags_fn_t) ndr_pull_echo_TestSurrounding,
-		(ndr_print_function_t) ndr_print_echo_TestSurrounding,
-		false,
-	},
-	{
-		"echo_TestDoublePointer",
-		sizeof(struct echo_TestDoublePointer),
-		(ndr_push_flags_fn_t) ndr_push_echo_TestDoublePointer,
-		(ndr_pull_flags_fn_t) ndr_pull_echo_TestDoublePointer,
-		(ndr_print_function_t) ndr_print_echo_TestDoublePointer,
-		false,
-	},
-	{ NULL, 0, NULL, NULL, NULL, false }
-};
-
-static const char * const rpcecho_endpoint_strings[] = {
-	"ncacn_np:[\\pipe\\rpcecho]", 
-	"ncacn_ip_tcp:", 
-	"ncalrpc:", 
-};
-
-static const struct ndr_interface_string_array rpcecho_endpoints = {
-	.count	= 3,
-	.names	= rpcecho_endpoint_strings
-};
-
-static const char * const rpcecho_authservice_strings[] = {
-	"host", 
-};
-
-static const struct ndr_interface_string_array rpcecho_authservices = {
-	.count	= 1,
-	.names	= rpcecho_authservice_strings
-};
-
-
-const struct ndr_interface_table ndr_table_rpcecho = {
-	.name		= "rpcecho",
-	.syntax_id	= {
-		{0x60a15ec5,0x4de8,0x11d7,{0xa6,0x37},{0x00,0x50,0x56,0xa2,0x01,0x82}},
-		NDR_RPCECHO_VERSION
-	},
-	.helpstring	= NDR_RPCECHO_HELPSTRING,
-	.num_calls	= 10,
-	.calls		= rpcecho_calls,
-	.endpoints	= &rpcecho_endpoints,
-	.authservices	= &rpcecho_authservices
-};
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_echo.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_echo.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_echo.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,58 +0,0 @@
-/* header auto-generated by pidl */
-
-#include "librpc/ndr/libndr.h"
-#include "librpc/gen_ndr/echo.h"
-
-#ifndef _HEADER_NDR_rpcecho
-#define _HEADER_NDR_rpcecho
-
-#define NDR_RPCECHO_UUID "60a15ec5-4de8-11d7-a637-005056a20182"
-#define NDR_RPCECHO_VERSION 1.0
-#define NDR_RPCECHO_NAME "rpcecho"
-#define NDR_RPCECHO_HELPSTRING "Simple echo pipe"
-extern const struct ndr_interface_table ndr_table_rpcecho;
-#define NDR_ECHO_ADDONE (0x00)
-
-#define NDR_ECHO_ECHODATA (0x01)
-
-#define NDR_ECHO_SINKDATA (0x02)
-
-#define NDR_ECHO_SOURCEDATA (0x03)
-
-#define NDR_ECHO_TESTCALL (0x04)
-
-#define NDR_ECHO_TESTCALL2 (0x05)
-
-#define NDR_ECHO_TESTSLEEP (0x06)
-
-#define NDR_ECHO_TESTENUM (0x07)
-
-#define NDR_ECHO_TESTSURROUNDING (0x08)
-
-#define NDR_ECHO_TESTDOUBLEPOINTER (0x09)
-
-#define NDR_RPCECHO_CALL_COUNT (10)
-void ndr_print_echo_info1(struct ndr_print *ndr, const char *name, const struct echo_info1 *r);
-void ndr_print_echo_info2(struct ndr_print *ndr, const char *name, const struct echo_info2 *r);
-void ndr_print_echo_info3(struct ndr_print *ndr, const char *name, const struct echo_info3 *r);
-void ndr_print_STRUCT_echo_info4(struct ndr_print *ndr, const char *name, const struct echo_info4 *r);
-void ndr_print_echo_info5(struct ndr_print *ndr, const char *name, const struct echo_info5 *r);
-void ndr_print_echo_info6(struct ndr_print *ndr, const char *name, const struct echo_info6 *r);
-void ndr_print_echo_info7(struct ndr_print *ndr, const char *name, const struct echo_info7 *r);
-void ndr_print_echo_Info(struct ndr_print *ndr, const char *name, const union echo_Info *r);
-void ndr_print_echo_Enum1(struct ndr_print *ndr, const char *name, enum echo_Enum1 r);
-void ndr_print_echo_Enum1_32(struct ndr_print *ndr, const char *name, enum echo_Enum1_32 r);
-void ndr_print_echo_Enum2(struct ndr_print *ndr, const char *name, const struct echo_Enum2 *r);
-void ndr_print_echo_Enum3(struct ndr_print *ndr, const char *name, const union echo_Enum3 *r);
-void ndr_print_echo_Surrounding(struct ndr_print *ndr, const char *name, const struct echo_Surrounding *r);
-void ndr_print_echo_AddOne(struct ndr_print *ndr, const char *name, int flags, const struct echo_AddOne *r);
-void ndr_print_echo_EchoData(struct ndr_print *ndr, const char *name, int flags, const struct echo_EchoData *r);
-void ndr_print_echo_SinkData(struct ndr_print *ndr, const char *name, int flags, const struct echo_SinkData *r);
-void ndr_print_echo_SourceData(struct ndr_print *ndr, const char *name, int flags, const struct echo_SourceData *r);
-void ndr_print_echo_TestCall(struct ndr_print *ndr, const char *name, int flags, const struct echo_TestCall *r);
-void ndr_print_echo_TestCall2(struct ndr_print *ndr, const char *name, int flags, const struct echo_TestCall2 *r);
-void ndr_print_echo_TestSleep(struct ndr_print *ndr, const char *name, int flags, const struct echo_TestSleep *r);
-void ndr_print_echo_TestEnum(struct ndr_print *ndr, const char *name, int flags, const struct echo_TestEnum *r);
-void ndr_print_echo_TestSurrounding(struct ndr_print *ndr, const char *name, int flags, const struct echo_TestSurrounding *r);
-void ndr_print_echo_TestDoublePointer(struct ndr_print *ndr, const char *name, int flags, const struct echo_TestDoublePointer *r);
-#endif /* _HEADER_NDR_rpcecho */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_epmapper.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_epmapper.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_epmapper.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,2699 +0,0 @@
-/* parser auto-generated by pidl */
-
-#include "includes.h"
-#include "librpc/gen_ndr/ndr_epmapper.h"
-
-static enum ndr_err_code ndr_push_epm_protocol(struct ndr_push *ndr, int ndr_flags, enum epm_protocol r)
-{
-	NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_protocol(struct ndr_pull *ndr, int ndr_flags, enum epm_protocol *r)
-{
-	uint8_t v;
-	NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_protocol(struct ndr_print *ndr, const char *name, enum epm_protocol r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case EPM_PROTOCOL_DNET_NSP: val = "EPM_PROTOCOL_DNET_NSP"; break;
-		case EPM_PROTOCOL_OSI_TP4: val = "EPM_PROTOCOL_OSI_TP4"; break;
-		case EPM_PROTOCOL_OSI_CLNS: val = "EPM_PROTOCOL_OSI_CLNS"; break;
-		case EPM_PROTOCOL_TCP: val = "EPM_PROTOCOL_TCP"; break;
-		case EPM_PROTOCOL_UDP: val = "EPM_PROTOCOL_UDP"; break;
-		case EPM_PROTOCOL_IP: val = "EPM_PROTOCOL_IP"; break;
-		case EPM_PROTOCOL_NCADG: val = "EPM_PROTOCOL_NCADG"; break;
-		case EPM_PROTOCOL_NCACN: val = "EPM_PROTOCOL_NCACN"; break;
-		case EPM_PROTOCOL_NCALRPC: val = "EPM_PROTOCOL_NCALRPC"; break;
-		case EPM_PROTOCOL_UUID: val = "EPM_PROTOCOL_UUID"; break;
-		case EPM_PROTOCOL_IPX: val = "EPM_PROTOCOL_IPX"; break;
-		case EPM_PROTOCOL_SMB: val = "EPM_PROTOCOL_SMB"; break;
-		case EPM_PROTOCOL_PIPE: val = "EPM_PROTOCOL_PIPE"; break;
-		case EPM_PROTOCOL_NETBIOS: val = "EPM_PROTOCOL_NETBIOS"; break;
-		case EPM_PROTOCOL_NETBEUI: val = "EPM_PROTOCOL_NETBEUI"; break;
-		case EPM_PROTOCOL_SPX: val = "EPM_PROTOCOL_SPX"; break;
-		case EPM_PROTOCOL_NB_IPX: val = "EPM_PROTOCOL_NB_IPX"; break;
-		case EPM_PROTOCOL_DSP: val = "EPM_PROTOCOL_DSP"; break;
-		case EPM_PROTOCOL_DDP: val = "EPM_PROTOCOL_DDP"; break;
-		case EPM_PROTOCOL_APPLETALK: val = "EPM_PROTOCOL_APPLETALK"; break;
-		case EPM_PROTOCOL_VINES_SPP: val = "EPM_PROTOCOL_VINES_SPP"; break;
-		case EPM_PROTOCOL_VINES_IPC: val = "EPM_PROTOCOL_VINES_IPC"; break;
-		case EPM_PROTOCOL_STREETTALK: val = "EPM_PROTOCOL_STREETTALK"; break;
-		case EPM_PROTOCOL_HTTP: val = "EPM_PROTOCOL_HTTP"; break;
-		case EPM_PROTOCOL_UNIX_DS: val = "EPM_PROTOCOL_UNIX_DS"; break;
-		case EPM_PROTOCOL_NULL: val = "EPM_PROTOCOL_NULL"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_dnet_nsp(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_dnet_nsp *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_dnet_nsp(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_dnet_nsp *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_dnet_nsp(struct ndr_print *ndr, const char *name, const struct epm_rhs_dnet_nsp *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_dnet_nsp");
-	ndr->depth++;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_osi_tp4(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_osi_tp4 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_osi_tp4(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_osi_tp4 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_osi_tp4(struct ndr_print *ndr, const char *name, const struct epm_rhs_osi_tp4 *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_osi_tp4");
-	ndr->depth++;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_osi_clns(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_osi_clns *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_osi_clns(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_osi_clns *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_osi_clns(struct ndr_print *ndr, const char *name, const struct epm_rhs_osi_clns *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_osi_clns");
-	ndr->depth++;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_udp(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_udp *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 2));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->port));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_udp(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_udp *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 2));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->port));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_udp(struct ndr_print *ndr, const char *name, const struct epm_rhs_udp *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_udp");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "port", r->port);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_tcp(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_tcp *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 2));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->port));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_tcp(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_tcp *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 2));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->port));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_tcp(struct ndr_print *ndr, const char *name, const struct epm_rhs_tcp *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_tcp");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "port", r->port);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_ip(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_ip *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_ipv4address(ndr, NDR_SCALARS, r->ipaddr));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_ip(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_ip *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_ipv4address(ndr, NDR_SCALARS, &r->ipaddr));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_ip(struct ndr_print *ndr, const char *name, const struct epm_rhs_ip *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_ip");
-	ndr->depth++;
-	ndr_print_ipv4address(ndr, "ipaddr", r->ipaddr);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_ncadg(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_ncadg *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 2));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->minor_version));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_ncadg(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_ncadg *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 2));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->minor_version));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_ncadg(struct ndr_print *ndr, const char *name, const struct epm_rhs_ncadg *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_ncadg");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "minor_version", r->minor_version);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_ncacn(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_ncacn *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 2));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->minor_version));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_ncacn(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_ncacn *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 2));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->minor_version));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_ncacn(struct ndr_print *ndr, const char *name, const struct epm_rhs_ncacn *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_ncacn");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "minor_version", r->minor_version);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_uuid(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_uuid *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		{
-			uint32_t _flags_save_DATA_BLOB = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-			NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->unknown));
-			ndr->flags = _flags_save_DATA_BLOB;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_uuid(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_uuid *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		{
-			uint32_t _flags_save_DATA_BLOB = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-			NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->unknown));
-			ndr->flags = _flags_save_DATA_BLOB;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_uuid(struct ndr_print *ndr, const char *name, const struct epm_rhs_uuid *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_uuid");
-	ndr->depth++;
-	ndr_print_DATA_BLOB(ndr, "unknown", r->unknown);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_ipx(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_ipx *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_ipx(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_ipx *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_ipx(struct ndr_print *ndr, const char *name, const struct epm_rhs_ipx *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_ipx");
-	ndr->depth++;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_smb(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_smb *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->unc));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_smb(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_smb *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->unc));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_smb(struct ndr_print *ndr, const char *name, const struct epm_rhs_smb *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_smb");
-	ndr->depth++;
-	ndr_print_string(ndr, "unc", r->unc);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_pipe(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_pipe *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->path));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_pipe(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_pipe *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->path));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_pipe(struct ndr_print *ndr, const char *name, const struct epm_rhs_pipe *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_pipe");
-	ndr->depth++;
-	ndr_print_string(ndr, "path", r->path);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_netbios(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_netbios *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->name));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_netbios(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_netbios *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->name));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_netbios(struct ndr_print *ndr, const char *name, const struct epm_rhs_netbios *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_netbios");
-	ndr->depth++;
-	ndr_print_string(ndr, "name", r->name);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_netbeui(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_netbeui *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_netbeui(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_netbeui *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_netbeui(struct ndr_print *ndr, const char *name, const struct epm_rhs_netbeui *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_netbeui");
-	ndr->depth++;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_spx(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_spx *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_spx(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_spx *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_spx(struct ndr_print *ndr, const char *name, const struct epm_rhs_spx *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_spx");
-	ndr->depth++;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_nb_ipx(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_nb_ipx *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_nb_ipx(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_nb_ipx *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_nb_ipx(struct ndr_print *ndr, const char *name, const struct epm_rhs_nb_ipx *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_nb_ipx");
-	ndr->depth++;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_http(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_http *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 2));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->port));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_http(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_http *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 2));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->port));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_http(struct ndr_print *ndr, const char *name, const struct epm_rhs_http *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_http");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "port", r->port);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_unix_ds(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_unix_ds *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->path));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_unix_ds(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_unix_ds *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->path));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_unix_ds(struct ndr_print *ndr, const char *name, const struct epm_rhs_unix_ds *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_unix_ds");
-	ndr->depth++;
-	ndr_print_string(ndr, "path", r->path);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_null(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_null *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_null(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_null *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_null(struct ndr_print *ndr, const char *name, const struct epm_rhs_null *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_null");
-	ndr->depth++;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_ncalrpc(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_ncalrpc *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 2));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->minor_version));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_ncalrpc(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_ncalrpc *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 2));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->minor_version));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_ncalrpc(struct ndr_print *ndr, const char *name, const struct epm_rhs_ncalrpc *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_ncalrpc");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "minor_version", r->minor_version);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_appletalk(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_appletalk *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_appletalk(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_appletalk *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_appletalk(struct ndr_print *ndr, const char *name, const struct epm_rhs_appletalk *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_appletalk");
-	ndr->depth++;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_atalk_stream(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_atalk_stream *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_atalk_stream(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_atalk_stream *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_atalk_stream(struct ndr_print *ndr, const char *name, const struct epm_rhs_atalk_stream *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_atalk_stream");
-	ndr->depth++;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_atalk_datagram(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_atalk_datagram *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_atalk_datagram(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_atalk_datagram *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_atalk_datagram(struct ndr_print *ndr, const char *name, const struct epm_rhs_atalk_datagram *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_atalk_datagram");
-	ndr->depth++;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_vines_spp(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_vines_spp *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 2));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->port));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_vines_spp(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_vines_spp *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 2));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->port));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_vines_spp(struct ndr_print *ndr, const char *name, const struct epm_rhs_vines_spp *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_vines_spp");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "port", r->port);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_vines_ipc(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_vines_ipc *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 2));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->port));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_vines_ipc(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_vines_ipc *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 2));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->port));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_vines_ipc(struct ndr_print *ndr, const char *name, const struct epm_rhs_vines_ipc *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_vines_ipc");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "port", r->port);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs_streettalk(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_streettalk *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->streettalk));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs_streettalk(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_streettalk *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->streettalk));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs_streettalk(struct ndr_print *ndr, const char *name, const struct epm_rhs_streettalk *r)
-{
-	ndr_print_struct(ndr, name, "epm_rhs_streettalk");
-	ndr->depth++;
-	ndr_print_string(ndr, "streettalk", r->streettalk);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_rhs(struct ndr_push *ndr, int ndr_flags, const union epm_rhs *r)
-{
-	{
-		uint32_t _flags_save_UNION = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_BIGENDIAN);
-		if (ndr_flags & NDR_SCALARS) {
-			int level = ndr_push_get_switch_value(ndr, r);
-			switch (level) {
-				case EPM_PROTOCOL_DNET_NSP: {
-					NDR_CHECK(ndr_push_epm_rhs_dnet_nsp(ndr, NDR_SCALARS, &r->dnet_nsp));
-				break; }
-
-				case EPM_PROTOCOL_OSI_TP4: {
-					NDR_CHECK(ndr_push_epm_rhs_osi_tp4(ndr, NDR_SCALARS, &r->osi_tp4));
-				break; }
-
-				case EPM_PROTOCOL_OSI_CLNS: {
-					NDR_CHECK(ndr_push_epm_rhs_osi_clns(ndr, NDR_SCALARS, &r->osi_clns));
-				break; }
-
-				case EPM_PROTOCOL_TCP: {
-					NDR_CHECK(ndr_push_epm_rhs_tcp(ndr, NDR_SCALARS, &r->tcp));
-				break; }
-
-				case EPM_PROTOCOL_UDP: {
-					NDR_CHECK(ndr_push_epm_rhs_udp(ndr, NDR_SCALARS, &r->udp));
-				break; }
-
-				case EPM_PROTOCOL_IP: {
-					NDR_CHECK(ndr_push_epm_rhs_ip(ndr, NDR_SCALARS, &r->ip));
-				break; }
-
-				case EPM_PROTOCOL_NCADG: {
-					NDR_CHECK(ndr_push_epm_rhs_ncadg(ndr, NDR_SCALARS, &r->ncadg));
-				break; }
-
-				case EPM_PROTOCOL_NCACN: {
-					NDR_CHECK(ndr_push_epm_rhs_ncacn(ndr, NDR_SCALARS, &r->ncacn));
-				break; }
-
-				case EPM_PROTOCOL_NCALRPC: {
-					NDR_CHECK(ndr_push_epm_rhs_ncalrpc(ndr, NDR_SCALARS, &r->ncalrpc));
-				break; }
-
-				case EPM_PROTOCOL_UUID: {
-					NDR_CHECK(ndr_push_epm_rhs_uuid(ndr, NDR_SCALARS, &r->uuid));
-				break; }
-
-				case EPM_PROTOCOL_IPX: {
-					NDR_CHECK(ndr_push_epm_rhs_ipx(ndr, NDR_SCALARS, &r->ipx));
-				break; }
-
-				case EPM_PROTOCOL_SMB: {
-					NDR_CHECK(ndr_push_epm_rhs_smb(ndr, NDR_SCALARS, &r->smb));
-				break; }
-
-				case EPM_PROTOCOL_PIPE: {
-					NDR_CHECK(ndr_push_epm_rhs_pipe(ndr, NDR_SCALARS, &r->pipe));
-				break; }
-
-				case EPM_PROTOCOL_NETBIOS: {
-					NDR_CHECK(ndr_push_epm_rhs_netbios(ndr, NDR_SCALARS, &r->netbios));
-				break; }
-
-				case EPM_PROTOCOL_NETBEUI: {
-					NDR_CHECK(ndr_push_epm_rhs_netbeui(ndr, NDR_SCALARS, &r->netbeui));
-				break; }
-
-				case EPM_PROTOCOL_SPX: {
-					NDR_CHECK(ndr_push_epm_rhs_spx(ndr, NDR_SCALARS, &r->spx));
-				break; }
-
-				case EPM_PROTOCOL_NB_IPX: {
-					NDR_CHECK(ndr_push_epm_rhs_nb_ipx(ndr, NDR_SCALARS, &r->nb_ipx));
-				break; }
-
-				case EPM_PROTOCOL_DSP: {
-					NDR_CHECK(ndr_push_epm_rhs_atalk_stream(ndr, NDR_SCALARS, &r->atalk_stream));
-				break; }
-
-				case EPM_PROTOCOL_DDP: {
-					NDR_CHECK(ndr_push_epm_rhs_atalk_datagram(ndr, NDR_SCALARS, &r->atalk_datagram));
-				break; }
-
-				case EPM_PROTOCOL_APPLETALK: {
-					NDR_CHECK(ndr_push_epm_rhs_appletalk(ndr, NDR_SCALARS, &r->appletalk));
-				break; }
-
-				case EPM_PROTOCOL_VINES_SPP: {
-					NDR_CHECK(ndr_push_epm_rhs_vines_spp(ndr, NDR_SCALARS, &r->vines_spp));
-				break; }
-
-				case EPM_PROTOCOL_VINES_IPC: {
-					NDR_CHECK(ndr_push_epm_rhs_vines_ipc(ndr, NDR_SCALARS, &r->vines_ipc));
-				break; }
-
-				case EPM_PROTOCOL_STREETTALK: {
-					NDR_CHECK(ndr_push_epm_rhs_streettalk(ndr, NDR_SCALARS, &r->streettalk));
-				break; }
-
-				case EPM_PROTOCOL_HTTP: {
-					NDR_CHECK(ndr_push_epm_rhs_http(ndr, NDR_SCALARS, &r->http));
-				break; }
-
-				case EPM_PROTOCOL_UNIX_DS: {
-					NDR_CHECK(ndr_push_epm_rhs_unix_ds(ndr, NDR_SCALARS, &r->unix_ds));
-				break; }
-
-				case EPM_PROTOCOL_NULL: {
-					NDR_CHECK(ndr_push_epm_rhs_null(ndr, NDR_SCALARS, &r->null));
-				break; }
-
-				default: {
-					{
-						uint32_t _flags_save_DATA_BLOB = ndr->flags;
-						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-						NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->unknown));
-						ndr->flags = _flags_save_DATA_BLOB;
-					}
-				break; }
-
-			}
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-			int level = ndr_push_get_switch_value(ndr, r);
-			switch (level) {
-				case EPM_PROTOCOL_DNET_NSP:
-				break;
-
-				case EPM_PROTOCOL_OSI_TP4:
-				break;
-
-				case EPM_PROTOCOL_OSI_CLNS:
-				break;
-
-				case EPM_PROTOCOL_TCP:
-				break;
-
-				case EPM_PROTOCOL_UDP:
-				break;
-
-				case EPM_PROTOCOL_IP:
-				break;
-
-				case EPM_PROTOCOL_NCADG:
-				break;
-
-				case EPM_PROTOCOL_NCACN:
-				break;
-
-				case EPM_PROTOCOL_NCALRPC:
-				break;
-
-				case EPM_PROTOCOL_UUID:
-				break;
-
-				case EPM_PROTOCOL_IPX:
-				break;
-
-				case EPM_PROTOCOL_SMB:
-				break;
-
-				case EPM_PROTOCOL_PIPE:
-				break;
-
-				case EPM_PROTOCOL_NETBIOS:
-				break;
-
-				case EPM_PROTOCOL_NETBEUI:
-				break;
-
-				case EPM_PROTOCOL_SPX:
-				break;
-
-				case EPM_PROTOCOL_NB_IPX:
-				break;
-
-				case EPM_PROTOCOL_DSP:
-				break;
-
-				case EPM_PROTOCOL_DDP:
-				break;
-
-				case EPM_PROTOCOL_APPLETALK:
-				break;
-
-				case EPM_PROTOCOL_VINES_SPP:
-				break;
-
-				case EPM_PROTOCOL_VINES_IPC:
-				break;
-
-				case EPM_PROTOCOL_STREETTALK:
-				break;
-
-				case EPM_PROTOCOL_HTTP:
-				break;
-
-				case EPM_PROTOCOL_UNIX_DS:
-				break;
-
-				case EPM_PROTOCOL_NULL:
-				break;
-
-				default:
-				break;
-
-			}
-		}
-		ndr->flags = _flags_save_UNION;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_rhs(struct ndr_pull *ndr, int ndr_flags, union epm_rhs *r)
-{
-	int level;
-	{
-		uint32_t _flags_save_UNION = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_BIGENDIAN);
-		level = ndr_pull_get_switch_value(ndr, r);
-		if (ndr_flags & NDR_SCALARS) {
-			switch (level) {
-				case EPM_PROTOCOL_DNET_NSP: {
-					NDR_CHECK(ndr_pull_epm_rhs_dnet_nsp(ndr, NDR_SCALARS, &r->dnet_nsp));
-				break; }
-
-				case EPM_PROTOCOL_OSI_TP4: {
-					NDR_CHECK(ndr_pull_epm_rhs_osi_tp4(ndr, NDR_SCALARS, &r->osi_tp4));
-				break; }
-
-				case EPM_PROTOCOL_OSI_CLNS: {
-					NDR_CHECK(ndr_pull_epm_rhs_osi_clns(ndr, NDR_SCALARS, &r->osi_clns));
-				break; }
-
-				case EPM_PROTOCOL_TCP: {
-					NDR_CHECK(ndr_pull_epm_rhs_tcp(ndr, NDR_SCALARS, &r->tcp));
-				break; }
-
-				case EPM_PROTOCOL_UDP: {
-					NDR_CHECK(ndr_pull_epm_rhs_udp(ndr, NDR_SCALARS, &r->udp));
-				break; }
-
-				case EPM_PROTOCOL_IP: {
-					NDR_CHECK(ndr_pull_epm_rhs_ip(ndr, NDR_SCALARS, &r->ip));
-				break; }
-
-				case EPM_PROTOCOL_NCADG: {
-					NDR_CHECK(ndr_pull_epm_rhs_ncadg(ndr, NDR_SCALARS, &r->ncadg));
-				break; }
-
-				case EPM_PROTOCOL_NCACN: {
-					NDR_CHECK(ndr_pull_epm_rhs_ncacn(ndr, NDR_SCALARS, &r->ncacn));
-				break; }
-
-				case EPM_PROTOCOL_NCALRPC: {
-					NDR_CHECK(ndr_pull_epm_rhs_ncalrpc(ndr, NDR_SCALARS, &r->ncalrpc));
-				break; }
-
-				case EPM_PROTOCOL_UUID: {
-					NDR_CHECK(ndr_pull_epm_rhs_uuid(ndr, NDR_SCALARS, &r->uuid));
-				break; }
-
-				case EPM_PROTOCOL_IPX: {
-					NDR_CHECK(ndr_pull_epm_rhs_ipx(ndr, NDR_SCALARS, &r->ipx));
-				break; }
-
-				case EPM_PROTOCOL_SMB: {
-					NDR_CHECK(ndr_pull_epm_rhs_smb(ndr, NDR_SCALARS, &r->smb));
-				break; }
-
-				case EPM_PROTOCOL_PIPE: {
-					NDR_CHECK(ndr_pull_epm_rhs_pipe(ndr, NDR_SCALARS, &r->pipe));
-				break; }
-
-				case EPM_PROTOCOL_NETBIOS: {
-					NDR_CHECK(ndr_pull_epm_rhs_netbios(ndr, NDR_SCALARS, &r->netbios));
-				break; }
-
-				case EPM_PROTOCOL_NETBEUI: {
-					NDR_CHECK(ndr_pull_epm_rhs_netbeui(ndr, NDR_SCALARS, &r->netbeui));
-				break; }
-
-				case EPM_PROTOCOL_SPX: {
-					NDR_CHECK(ndr_pull_epm_rhs_spx(ndr, NDR_SCALARS, &r->spx));
-				break; }
-
-				case EPM_PROTOCOL_NB_IPX: {
-					NDR_CHECK(ndr_pull_epm_rhs_nb_ipx(ndr, NDR_SCALARS, &r->nb_ipx));
-				break; }
-
-				case EPM_PROTOCOL_DSP: {
-					NDR_CHECK(ndr_pull_epm_rhs_atalk_stream(ndr, NDR_SCALARS, &r->atalk_stream));
-				break; }
-
-				case EPM_PROTOCOL_DDP: {
-					NDR_CHECK(ndr_pull_epm_rhs_atalk_datagram(ndr, NDR_SCALARS, &r->atalk_datagram));
-				break; }
-
-				case EPM_PROTOCOL_APPLETALK: {
-					NDR_CHECK(ndr_pull_epm_rhs_appletalk(ndr, NDR_SCALARS, &r->appletalk));
-				break; }
-
-				case EPM_PROTOCOL_VINES_SPP: {
-					NDR_CHECK(ndr_pull_epm_rhs_vines_spp(ndr, NDR_SCALARS, &r->vines_spp));
-				break; }
-
-				case EPM_PROTOCOL_VINES_IPC: {
-					NDR_CHECK(ndr_pull_epm_rhs_vines_ipc(ndr, NDR_SCALARS, &r->vines_ipc));
-				break; }
-
-				case EPM_PROTOCOL_STREETTALK: {
-					NDR_CHECK(ndr_pull_epm_rhs_streettalk(ndr, NDR_SCALARS, &r->streettalk));
-				break; }
-
-				case EPM_PROTOCOL_HTTP: {
-					NDR_CHECK(ndr_pull_epm_rhs_http(ndr, NDR_SCALARS, &r->http));
-				break; }
-
-				case EPM_PROTOCOL_UNIX_DS: {
-					NDR_CHECK(ndr_pull_epm_rhs_unix_ds(ndr, NDR_SCALARS, &r->unix_ds));
-				break; }
-
-				case EPM_PROTOCOL_NULL: {
-					NDR_CHECK(ndr_pull_epm_rhs_null(ndr, NDR_SCALARS, &r->null));
-				break; }
-
-				default: {
-					{
-						uint32_t _flags_save_DATA_BLOB = ndr->flags;
-						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-						NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->unknown));
-						ndr->flags = _flags_save_DATA_BLOB;
-					}
-				break; }
-
-			}
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-			switch (level) {
-				case EPM_PROTOCOL_DNET_NSP:
-				break;
-
-				case EPM_PROTOCOL_OSI_TP4:
-				break;
-
-				case EPM_PROTOCOL_OSI_CLNS:
-				break;
-
-				case EPM_PROTOCOL_TCP:
-				break;
-
-				case EPM_PROTOCOL_UDP:
-				break;
-
-				case EPM_PROTOCOL_IP:
-				break;
-
-				case EPM_PROTOCOL_NCADG:
-				break;
-
-				case EPM_PROTOCOL_NCACN:
-				break;
-
-				case EPM_PROTOCOL_NCALRPC:
-				break;
-
-				case EPM_PROTOCOL_UUID:
-				break;
-
-				case EPM_PROTOCOL_IPX:
-				break;
-
-				case EPM_PROTOCOL_SMB:
-				break;
-
-				case EPM_PROTOCOL_PIPE:
-				break;
-
-				case EPM_PROTOCOL_NETBIOS:
-				break;
-
-				case EPM_PROTOCOL_NETBEUI:
-				break;
-
-				case EPM_PROTOCOL_SPX:
-				break;
-
-				case EPM_PROTOCOL_NB_IPX:
-				break;
-
-				case EPM_PROTOCOL_DSP:
-				break;
-
-				case EPM_PROTOCOL_DDP:
-				break;
-
-				case EPM_PROTOCOL_APPLETALK:
-				break;
-
-				case EPM_PROTOCOL_VINES_SPP:
-				break;
-
-				case EPM_PROTOCOL_VINES_IPC:
-				break;
-
-				case EPM_PROTOCOL_STREETTALK:
-				break;
-
-				case EPM_PROTOCOL_HTTP:
-				break;
-
-				case EPM_PROTOCOL_UNIX_DS:
-				break;
-
-				case EPM_PROTOCOL_NULL:
-				break;
-
-				default:
-				break;
-
-			}
-		}
-		ndr->flags = _flags_save_UNION;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_rhs(struct ndr_print *ndr, const char *name, const union epm_rhs *r)
-{
-	int level;
-	{
-		uint32_t _flags_save_UNION = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_BIGENDIAN);
-		level = ndr_print_get_switch_value(ndr, r);
-		ndr_print_union(ndr, name, level, "epm_rhs");
-		switch (level) {
-			case EPM_PROTOCOL_DNET_NSP:
-				ndr_print_epm_rhs_dnet_nsp(ndr, "dnet_nsp", &r->dnet_nsp);
-			break;
-
-			case EPM_PROTOCOL_OSI_TP4:
-				ndr_print_epm_rhs_osi_tp4(ndr, "osi_tp4", &r->osi_tp4);
-			break;
-
-			case EPM_PROTOCOL_OSI_CLNS:
-				ndr_print_epm_rhs_osi_clns(ndr, "osi_clns", &r->osi_clns);
-			break;
-
-			case EPM_PROTOCOL_TCP:
-				ndr_print_epm_rhs_tcp(ndr, "tcp", &r->tcp);
-			break;
-
-			case EPM_PROTOCOL_UDP:
-				ndr_print_epm_rhs_udp(ndr, "udp", &r->udp);
-			break;
-
-			case EPM_PROTOCOL_IP:
-				ndr_print_epm_rhs_ip(ndr, "ip", &r->ip);
-			break;
-
-			case EPM_PROTOCOL_NCADG:
-				ndr_print_epm_rhs_ncadg(ndr, "ncadg", &r->ncadg);
-			break;
-
-			case EPM_PROTOCOL_NCACN:
-				ndr_print_epm_rhs_ncacn(ndr, "ncacn", &r->ncacn);
-			break;
-
-			case EPM_PROTOCOL_NCALRPC:
-				ndr_print_epm_rhs_ncalrpc(ndr, "ncalrpc", &r->ncalrpc);
-			break;
-
-			case EPM_PROTOCOL_UUID:
-				ndr_print_epm_rhs_uuid(ndr, "uuid", &r->uuid);
-			break;
-
-			case EPM_PROTOCOL_IPX:
-				ndr_print_epm_rhs_ipx(ndr, "ipx", &r->ipx);
-			break;
-
-			case EPM_PROTOCOL_SMB:
-				ndr_print_epm_rhs_smb(ndr, "smb", &r->smb);
-			break;
-
-			case EPM_PROTOCOL_PIPE:
-				ndr_print_epm_rhs_pipe(ndr, "pipe", &r->pipe);
-			break;
-
-			case EPM_PROTOCOL_NETBIOS:
-				ndr_print_epm_rhs_netbios(ndr, "netbios", &r->netbios);
-			break;
-
-			case EPM_PROTOCOL_NETBEUI:
-				ndr_print_epm_rhs_netbeui(ndr, "netbeui", &r->netbeui);
-			break;
-
-			case EPM_PROTOCOL_SPX:
-				ndr_print_epm_rhs_spx(ndr, "spx", &r->spx);
-			break;
-
-			case EPM_PROTOCOL_NB_IPX:
-				ndr_print_epm_rhs_nb_ipx(ndr, "nb_ipx", &r->nb_ipx);
-			break;
-
-			case EPM_PROTOCOL_DSP:
-				ndr_print_epm_rhs_atalk_stream(ndr, "atalk_stream", &r->atalk_stream);
-			break;
-
-			case EPM_PROTOCOL_DDP:
-				ndr_print_epm_rhs_atalk_datagram(ndr, "atalk_datagram", &r->atalk_datagram);
-			break;
-
-			case EPM_PROTOCOL_APPLETALK:
-				ndr_print_epm_rhs_appletalk(ndr, "appletalk", &r->appletalk);
-			break;
-
-			case EPM_PROTOCOL_VINES_SPP:
-				ndr_print_epm_rhs_vines_spp(ndr, "vines_spp", &r->vines_spp);
-			break;
-
-			case EPM_PROTOCOL_VINES_IPC:
-				ndr_print_epm_rhs_vines_ipc(ndr, "vines_ipc", &r->vines_ipc);
-			break;
-
-			case EPM_PROTOCOL_STREETTALK:
-				ndr_print_epm_rhs_streettalk(ndr, "streettalk", &r->streettalk);
-			break;
-
-			case EPM_PROTOCOL_HTTP:
-				ndr_print_epm_rhs_http(ndr, "http", &r->http);
-			break;
-
-			case EPM_PROTOCOL_UNIX_DS:
-				ndr_print_epm_rhs_unix_ds(ndr, "unix_ds", &r->unix_ds);
-			break;
-
-			case EPM_PROTOCOL_NULL:
-				ndr_print_epm_rhs_null(ndr, "null", &r->null);
-			break;
-
-			default:
-				ndr_print_DATA_BLOB(ndr, "unknown", r->unknown);
-			break;
-
-		}
-		ndr->flags = _flags_save_UNION;
-	}
-}
-
-static enum ndr_err_code ndr_push_epm_lhs(struct ndr_push *ndr, int ndr_flags, const struct epm_lhs *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_epm_protocol(ndr, NDR_SCALARS, r->protocol));
-		{
-			uint32_t _flags_save_DATA_BLOB = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-			NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->lhs_data));
-			ndr->flags = _flags_save_DATA_BLOB;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_lhs(struct ndr_pull *ndr, int ndr_flags, struct epm_lhs *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_epm_protocol(ndr, NDR_SCALARS, &r->protocol));
-		{
-			uint32_t _flags_save_DATA_BLOB = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-			NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->lhs_data));
-			ndr->flags = _flags_save_DATA_BLOB;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_lhs(struct ndr_print *ndr, const char *name, const struct epm_lhs *r)
-{
-	ndr_print_struct(ndr, name, "epm_lhs");
-	ndr->depth++;
-	ndr_print_epm_protocol(ndr, "protocol", r->protocol);
-	ndr_print_DATA_BLOB(ndr, "lhs_data", r->lhs_data);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_floor(struct ndr_push *ndr, int ndr_flags, const struct epm_floor *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 1));
-		{
-			struct ndr_push *_ndr_lhs;
-			NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_lhs, 2, -1));
-			NDR_CHECK(ndr_push_epm_lhs(_ndr_lhs, NDR_SCALARS, &r->lhs));
-			NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_lhs, 2, -1));
-		}
-		{
-			struct ndr_push *_ndr_rhs;
-			NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_rhs, 2, -1));
-			NDR_CHECK(ndr_push_set_switch_value(_ndr_rhs, &r->rhs, r->lhs.protocol));
-			NDR_CHECK(ndr_push_epm_rhs(_ndr_rhs, NDR_SCALARS, &r->rhs));
-			NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_rhs, 2, -1));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_floor(struct ndr_pull *ndr, int ndr_flags, struct epm_floor *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 1));
-		{
-			struct ndr_pull *_ndr_lhs;
-			NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_lhs, 2, -1));
-			NDR_CHECK(ndr_pull_epm_lhs(_ndr_lhs, NDR_SCALARS, &r->lhs));
-			NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_lhs, 2, -1));
-		}
-		{
-			struct ndr_pull *_ndr_rhs;
-			NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_rhs, 2, -1));
-			NDR_CHECK(ndr_pull_set_switch_value(_ndr_rhs, &r->rhs, r->lhs.protocol));
-			NDR_CHECK(ndr_pull_epm_rhs(_ndr_rhs, NDR_SCALARS, &r->rhs));
-			NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_rhs, 2, -1));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_floor(struct ndr_print *ndr, const char *name, const struct epm_floor *r)
-{
-	ndr_print_struct(ndr, name, "epm_floor");
-	ndr->depth++;
-	ndr_print_epm_lhs(ndr, "lhs", &r->lhs);
-	ndr_print_set_switch_value(ndr, &r->rhs, r->lhs.protocol);
-	ndr_print_epm_rhs(ndr, "rhs", &r->rhs);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_tower(struct ndr_push *ndr, int ndr_flags, const struct epm_tower *r)
-{
-	uint32_t cntr_floors_0;
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN|LIBNDR_FLAG_LITTLE_ENDIAN);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 2));
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->num_floors));
-			for (cntr_floors_0 = 0; cntr_floors_0 < r->num_floors; cntr_floors_0++) {
-				NDR_CHECK(ndr_push_epm_floor(ndr, NDR_SCALARS, &r->floors[cntr_floors_0]));
-			}
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_tower(struct ndr_pull *ndr, int ndr_flags, struct epm_tower *r)
-{
-	uint32_t cntr_floors_0;
-	TALLOC_CTX *_mem_save_floors_0;
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN|LIBNDR_FLAG_LITTLE_ENDIAN);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 2));
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->num_floors));
-			NDR_PULL_ALLOC_N(ndr, r->floors, r->num_floors);
-			_mem_save_floors_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->floors, 0);
-			for (cntr_floors_0 = 0; cntr_floors_0 < r->num_floors; cntr_floors_0++) {
-				NDR_CHECK(ndr_pull_epm_floor(ndr, NDR_SCALARS, &r->floors[cntr_floors_0]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_floors_0, 0);
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_tower(struct ndr_print *ndr, const char *name, const struct epm_tower *r)
-{
-	uint32_t cntr_floors_0;
-	ndr_print_struct(ndr, name, "epm_tower");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN|LIBNDR_FLAG_LITTLE_ENDIAN);
-		ndr->depth++;
-		ndr_print_uint16(ndr, "num_floors", r->num_floors);
-		ndr->print(ndr, "%s: ARRAY(%d)", "floors", r->num_floors);
-		ndr->depth++;
-		for (cntr_floors_0=0;cntr_floors_0<r->num_floors;cntr_floors_0++) {
-			char *idx_0=NULL;
-			if (asprintf(&idx_0, "[%d]", cntr_floors_0) != -1) {
-				ndr_print_epm_floor(ndr, "floors", &r->floors[cntr_floors_0]);
-				free(idx_0);
-			}
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-
-static size_t ndr_size_epm_tower(const struct epm_tower *r, int flags)
-{
-	flags |= LIBNDR_FLAG_NOALIGN|LIBNDR_FLAG_LITTLE_ENDIAN;
-	return ndr_size_struct(r, flags, (ndr_push_flags_fn_t)ndr_push_epm_tower);
-}
-
-static enum ndr_err_code ndr_push_epm_twr_t(struct ndr_push *ndr, int ndr_flags, const struct epm_twr_t *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_size_epm_tower(&r->tower, ndr->flags)));
-		{
-			struct ndr_push *_ndr_tower;
-			NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_tower, 4, -1));
-			NDR_CHECK(ndr_push_epm_tower(_ndr_tower, NDR_SCALARS, &r->tower));
-			NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_tower, 4, -1));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_twr_t(struct ndr_pull *ndr, int ndr_flags, struct epm_twr_t *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->tower_length));
-		{
-			struct ndr_pull *_ndr_tower;
-			NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_tower, 4, -1));
-			NDR_CHECK(ndr_pull_epm_tower(_ndr_tower, NDR_SCALARS, &r->tower));
-			NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_tower, 4, -1));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_twr_t(struct ndr_print *ndr, const char *name, const struct epm_twr_t *r)
-{
-	ndr_print_struct(ndr, name, "epm_twr_t");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "tower_length", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_epm_tower(&r->tower, ndr->flags):r->tower_length);
-	ndr_print_epm_tower(ndr, "tower", &r->tower);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_entry_t(struct ndr_push *ndr, int ndr_flags, const struct epm_entry_t *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->object));
-		NDR_CHECK(ndr_push_full_ptr(ndr, r->tower));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_LEN4);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->annotation));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_BUFFERS, &r->object));
-		if (r->tower) {
-			NDR_CHECK(ndr_push_epm_twr_t(ndr, NDR_SCALARS, r->tower));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_entry_t(struct ndr_pull *ndr, int ndr_flags, struct epm_entry_t *r)
-{
-	uint32_t _ptr_tower;
-	TALLOC_CTX *_mem_save_tower_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->object));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_tower));
-		if (_ptr_tower) {
-			NDR_PULL_ALLOC(ndr, r->tower);
-		} else {
-			r->tower = NULL;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_LEN4);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->annotation));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_BUFFERS, &r->object));
-		if (r->tower) {
-			_mem_save_tower_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->tower, 0);
-			NDR_CHECK(ndr_pull_epm_twr_t(ndr, NDR_SCALARS, r->tower));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_tower_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_entry_t(struct ndr_print *ndr, const char *name, const struct epm_entry_t *r)
-{
-	ndr_print_struct(ndr, name, "epm_entry_t");
-	ndr->depth++;
-	ndr_print_GUID(ndr, "object", &r->object);
-	ndr_print_ptr(ndr, "tower", r->tower);
-	ndr->depth++;
-	if (r->tower) {
-		ndr_print_epm_twr_t(ndr, "tower", r->tower);
-	}
-	ndr->depth--;
-	ndr_print_string(ndr, "annotation", r->annotation);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_rpc_if_id_t(struct ndr_push *ndr, int ndr_flags, const struct rpc_if_id_t *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->uuid));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->vers_major));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->vers_minor));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_BUFFERS, &r->uuid));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_rpc_if_id_t(struct ndr_pull *ndr, int ndr_flags, struct rpc_if_id_t *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->uuid));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->vers_major));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->vers_minor));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_BUFFERS, &r->uuid));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_rpc_if_id_t(struct ndr_print *ndr, const char *name, const struct rpc_if_id_t *r)
-{
-	ndr_print_struct(ndr, name, "rpc_if_id_t");
-	ndr->depth++;
-	ndr_print_GUID(ndr, "uuid", &r->uuid);
-	ndr_print_uint16(ndr, "vers_major", r->vers_major);
-	ndr_print_uint16(ndr, "vers_minor", r->vers_minor);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_twr_p_t(struct ndr_push *ndr, int ndr_flags, const struct epm_twr_p_t *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_full_ptr(ndr, r->twr));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->twr) {
-			NDR_CHECK(ndr_push_epm_twr_t(ndr, NDR_SCALARS, r->twr));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_twr_p_t(struct ndr_pull *ndr, int ndr_flags, struct epm_twr_p_t *r)
-{
-	uint32_t _ptr_twr;
-	TALLOC_CTX *_mem_save_twr_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_twr));
-		if (_ptr_twr) {
-			NDR_PULL_ALLOC(ndr, r->twr);
-		} else {
-			r->twr = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->twr) {
-			_mem_save_twr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->twr, 0);
-			NDR_CHECK(ndr_pull_epm_twr_t(ndr, NDR_SCALARS, r->twr));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_twr_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_twr_p_t(struct ndr_print *ndr, const char *name, const struct epm_twr_p_t *r)
-{
-	ndr_print_struct(ndr, name, "epm_twr_p_t");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "twr", r->twr);
-	ndr->depth++;
-	if (r->twr) {
-		ndr_print_epm_twr_t(ndr, "twr", r->twr);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_Insert(struct ndr_push *ndr, int flags, const struct epm_Insert *r)
-{
-	uint32_t cntr_entries_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.num_ents));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.num_ents));
-		for (cntr_entries_0 = 0; cntr_entries_0 < r->in.num_ents; cntr_entries_0++) {
-			NDR_CHECK(ndr_push_epm_entry_t(ndr, NDR_SCALARS, &r->in.entries[cntr_entries_0]));
-		}
-		for (cntr_entries_0 = 0; cntr_entries_0 < r->in.num_ents; cntr_entries_0++) {
-			NDR_CHECK(ndr_push_epm_entry_t(ndr, NDR_BUFFERS, &r->in.entries[cntr_entries_0]));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.replace));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_Insert(struct ndr_pull *ndr, int flags, struct epm_Insert *r)
-{
-	uint32_t cntr_entries_0;
-	TALLOC_CTX *_mem_save_entries_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.num_ents));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.entries));
-		NDR_PULL_ALLOC_N(ndr, r->in.entries, ndr_get_array_size(ndr, &r->in.entries));
-		_mem_save_entries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.entries, 0);
-		for (cntr_entries_0 = 0; cntr_entries_0 < r->in.num_ents; cntr_entries_0++) {
-			NDR_CHECK(ndr_pull_epm_entry_t(ndr, NDR_SCALARS, &r->in.entries[cntr_entries_0]));
-		}
-		for (cntr_entries_0 = 0; cntr_entries_0 < r->in.num_ents; cntr_entries_0++) {
-			NDR_CHECK(ndr_pull_epm_entry_t(ndr, NDR_BUFFERS, &r->in.entries[cntr_entries_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entries_0, 0);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.replace));
-		if (r->in.entries) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.entries, r->in.num_ents));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_Insert(struct ndr_print *ndr, const char *name, int flags, const struct epm_Insert *r)
-{
-	uint32_t cntr_entries_0;
-	ndr_print_struct(ndr, name, "epm_Insert");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "epm_Insert");
-		ndr->depth++;
-		ndr_print_uint32(ndr, "num_ents", r->in.num_ents);
-		ndr->print(ndr, "%s: ARRAY(%d)", "entries", r->in.num_ents);
-		ndr->depth++;
-		for (cntr_entries_0=0;cntr_entries_0<r->in.num_ents;cntr_entries_0++) {
-			char *idx_0=NULL;
-			if (asprintf(&idx_0, "[%d]", cntr_entries_0) != -1) {
-				ndr_print_epm_entry_t(ndr, "entries", &r->in.entries[cntr_entries_0]);
-				free(idx_0);
-			}
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "replace", r->in.replace);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "epm_Insert");
-		ndr->depth++;
-		ndr_print_uint32(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_Delete(struct ndr_push *ndr, int flags, const struct epm_Delete *r)
-{
-	uint32_t cntr_entries_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.num_ents));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.num_ents));
-		for (cntr_entries_0 = 0; cntr_entries_0 < r->in.num_ents; cntr_entries_0++) {
-			NDR_CHECK(ndr_push_epm_entry_t(ndr, NDR_SCALARS, &r->in.entries[cntr_entries_0]));
-		}
-		for (cntr_entries_0 = 0; cntr_entries_0 < r->in.num_ents; cntr_entries_0++) {
-			NDR_CHECK(ndr_push_epm_entry_t(ndr, NDR_BUFFERS, &r->in.entries[cntr_entries_0]));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_Delete(struct ndr_pull *ndr, int flags, struct epm_Delete *r)
-{
-	uint32_t cntr_entries_0;
-	TALLOC_CTX *_mem_save_entries_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.num_ents));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.entries));
-		NDR_PULL_ALLOC_N(ndr, r->in.entries, ndr_get_array_size(ndr, &r->in.entries));
-		_mem_save_entries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.entries, 0);
-		for (cntr_entries_0 = 0; cntr_entries_0 < r->in.num_ents; cntr_entries_0++) {
-			NDR_CHECK(ndr_pull_epm_entry_t(ndr, NDR_SCALARS, &r->in.entries[cntr_entries_0]));
-		}
-		for (cntr_entries_0 = 0; cntr_entries_0 < r->in.num_ents; cntr_entries_0++) {
-			NDR_CHECK(ndr_pull_epm_entry_t(ndr, NDR_BUFFERS, &r->in.entries[cntr_entries_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entries_0, 0);
-		if (r->in.entries) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.entries, r->in.num_ents));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_Delete(struct ndr_print *ndr, const char *name, int flags, const struct epm_Delete *r)
-{
-	uint32_t cntr_entries_0;
-	ndr_print_struct(ndr, name, "epm_Delete");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "epm_Delete");
-		ndr->depth++;
-		ndr_print_uint32(ndr, "num_ents", r->in.num_ents);
-		ndr->print(ndr, "%s: ARRAY(%d)", "entries", r->in.num_ents);
-		ndr->depth++;
-		for (cntr_entries_0=0;cntr_entries_0<r->in.num_ents;cntr_entries_0++) {
-			char *idx_0=NULL;
-			if (asprintf(&idx_0, "[%d]", cntr_entries_0) != -1) {
-				ndr_print_epm_entry_t(ndr, "entries", &r->in.entries[cntr_entries_0]);
-				free(idx_0);
-			}
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "epm_Delete");
-		ndr->depth++;
-		ndr_print_uint32(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_Lookup(struct ndr_push *ndr, int flags, const struct epm_Lookup *r)
-{
-	uint32_t cntr_entries_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.inquiry_type));
-		NDR_CHECK(ndr_push_full_ptr(ndr, r->in.object));
-		if (r->in.object) {
-			NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.object));
-		}
-		NDR_CHECK(ndr_push_full_ptr(ndr, r->in.interface_id));
-		if (r->in.interface_id) {
-			NDR_CHECK(ndr_push_rpc_if_id_t(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.interface_id));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.vers_option));
-		if (r->in.entry_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.entry_handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_ents));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.entry_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.entry_handle));
-		if (r->out.num_ents == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.num_ents));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_ents));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.num_ents));
-		for (cntr_entries_0 = 0; cntr_entries_0 < *r->out.num_ents; cntr_entries_0++) {
-			NDR_CHECK(ndr_push_epm_entry_t(ndr, NDR_SCALARS, &r->out.entries[cntr_entries_0]));
-		}
-		for (cntr_entries_0 = 0; cntr_entries_0 < *r->out.num_ents; cntr_entries_0++) {
-			NDR_CHECK(ndr_push_epm_entry_t(ndr, NDR_BUFFERS, &r->out.entries[cntr_entries_0]));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_Lookup(struct ndr_pull *ndr, int flags, struct epm_Lookup *r)
-{
-	uint32_t _ptr_object;
-	uint32_t _ptr_interface_id;
-	uint32_t cntr_entries_0;
-	TALLOC_CTX *_mem_save_object_0;
-	TALLOC_CTX *_mem_save_interface_id_0;
-	TALLOC_CTX *_mem_save_entry_handle_0;
-	TALLOC_CTX *_mem_save_num_ents_0;
-	TALLOC_CTX *_mem_save_entries_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.inquiry_type));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_object));
-		if (_ptr_object) {
-			NDR_PULL_ALLOC(ndr, r->in.object);
-		} else {
-			r->in.object = NULL;
-		}
-		if (r->in.object) {
-			_mem_save_object_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.object, 0);
-			NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.object));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_object_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_interface_id));
-		if (_ptr_interface_id) {
-			NDR_PULL_ALLOC(ndr, r->in.interface_id);
-		} else {
-			r->in.interface_id = NULL;
-		}
-		if (r->in.interface_id) {
-			_mem_save_interface_id_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.interface_id, 0);
-			NDR_CHECK(ndr_pull_rpc_if_id_t(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.interface_id));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_interface_id_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.vers_option));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.entry_handle);
-		}
-		_mem_save_entry_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.entry_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.entry_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entry_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_ents));
-		NDR_PULL_ALLOC(ndr, r->out.entry_handle);
-		*r->out.entry_handle = *r->in.entry_handle;
-		NDR_PULL_ALLOC(ndr, r->out.num_ents);
-		ZERO_STRUCTP(r->out.num_ents);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.entry_handle);
-		}
-		_mem_save_entry_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.entry_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.entry_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entry_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.num_ents);
-		}
-		_mem_save_num_ents_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.num_ents, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.num_ents));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_num_ents_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->out.entries));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->out.entries));
-		if (ndr_get_array_length(ndr, &r->out.entries) > ndr_get_array_size(ndr, &r->out.entries)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->out.entries), ndr_get_array_length(ndr, &r->out.entries));
-		}
-		NDR_PULL_ALLOC_N(ndr, r->out.entries, ndr_get_array_size(ndr, &r->out.entries));
-		_mem_save_entries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.entries, 0);
-		for (cntr_entries_0 = 0; cntr_entries_0 < *r->out.num_ents; cntr_entries_0++) {
-			NDR_CHECK(ndr_pull_epm_entry_t(ndr, NDR_SCALARS, &r->out.entries[cntr_entries_0]));
-		}
-		for (cntr_entries_0 = 0; cntr_entries_0 < *r->out.num_ents; cntr_entries_0++) {
-			NDR_CHECK(ndr_pull_epm_entry_t(ndr, NDR_BUFFERS, &r->out.entries[cntr_entries_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entries_0, 0);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->out.result));
-		if (r->out.entries) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->out.entries, r->in.max_ents));
-		}
-		if (r->out.entries) {
-			NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->out.entries, *r->out.num_ents));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_Lookup(struct ndr_print *ndr, const char *name, int flags, const struct epm_Lookup *r)
-{
-	uint32_t cntr_entries_0;
-	ndr_print_struct(ndr, name, "epm_Lookup");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "epm_Lookup");
-		ndr->depth++;
-		ndr_print_uint32(ndr, "inquiry_type", r->in.inquiry_type);
-		ndr_print_ptr(ndr, "object", r->in.object);
-		ndr->depth++;
-		if (r->in.object) {
-			ndr_print_GUID(ndr, "object", r->in.object);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "interface_id", r->in.interface_id);
-		ndr->depth++;
-		if (r->in.interface_id) {
-			ndr_print_rpc_if_id_t(ndr, "interface_id", r->in.interface_id);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "vers_option", r->in.vers_option);
-		ndr_print_ptr(ndr, "entry_handle", r->in.entry_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "entry_handle", r->in.entry_handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "max_ents", r->in.max_ents);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "epm_Lookup");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "entry_handle", r->out.entry_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "entry_handle", r->out.entry_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "num_ents", r->out.num_ents);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "num_ents", *r->out.num_ents);
-		ndr->depth--;
-		ndr->print(ndr, "%s: ARRAY(%d)", "entries", *r->out.num_ents);
-		ndr->depth++;
-		for (cntr_entries_0=0;cntr_entries_0<*r->out.num_ents;cntr_entries_0++) {
-			char *idx_0=NULL;
-			if (asprintf(&idx_0, "[%d]", cntr_entries_0) != -1) {
-				ndr_print_epm_entry_t(ndr, "entries", &r->out.entries[cntr_entries_0]);
-				free(idx_0);
-			}
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_epm_Map(struct ndr_push *ndr, int flags, const struct epm_Map *r)
-{
-	uint32_t cntr_towers_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_full_ptr(ndr, r->in.object));
-		if (r->in.object) {
-			NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.object));
-		}
-		NDR_CHECK(ndr_push_full_ptr(ndr, r->in.map_tower));
-		if (r->in.map_tower) {
-			NDR_CHECK(ndr_push_epm_twr_t(ndr, NDR_SCALARS, r->in.map_tower));
-		}
-		if (r->in.entry_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.entry_handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_towers));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.entry_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.entry_handle));
-		if (r->out.num_towers == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.num_towers));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_towers));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.num_towers));
-		for (cntr_towers_0 = 0; cntr_towers_0 < *r->out.num_towers; cntr_towers_0++) {
-			NDR_CHECK(ndr_push_epm_twr_p_t(ndr, NDR_SCALARS, &r->out.towers[cntr_towers_0]));
-		}
-		for (cntr_towers_0 = 0; cntr_towers_0 < *r->out.num_towers; cntr_towers_0++) {
-			NDR_CHECK(ndr_push_epm_twr_p_t(ndr, NDR_BUFFERS, &r->out.towers[cntr_towers_0]));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_epm_Map(struct ndr_pull *ndr, int flags, struct epm_Map *r)
-{
-	uint32_t _ptr_object;
-	uint32_t _ptr_map_tower;
-	uint32_t cntr_towers_0;
-	TALLOC_CTX *_mem_save_object_0;
-	TALLOC_CTX *_mem_save_map_tower_0;
-	TALLOC_CTX *_mem_save_entry_handle_0;
-	TALLOC_CTX *_mem_save_num_towers_0;
-	TALLOC_CTX *_mem_save_towers_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_object));
-		if (_ptr_object) {
-			NDR_PULL_ALLOC(ndr, r->in.object);
-		} else {
-			r->in.object = NULL;
-		}
-		if (r->in.object) {
-			_mem_save_object_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.object, 0);
-			NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.object));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_object_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_map_tower));
-		if (_ptr_map_tower) {
-			NDR_PULL_ALLOC(ndr, r->in.map_tower);
-		} else {
-			r->in.map_tower = NULL;
-		}
-		if (r->in.map_tower) {
-			_mem_save_map_tower_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.map_tower, 0);
-			NDR_CHECK(ndr_pull_epm_twr_t(ndr, NDR_SCALARS, r->in.map_tower));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_map_tower_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.entry_handle);
-		}
-		_mem_save_entry_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.entry_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.entry_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entry_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_towers));
-		NDR_PULL_ALLOC(ndr, r->out.entry_handle);
-		*r->out.entry_handle = *r->in.entry_handle;
-		NDR_PULL_ALLOC(ndr, r->out.num_towers);
-		ZERO_STRUCTP(r->out.num_towers);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.entry_handle);
-		}
-		_mem_save_entry_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.entry_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.entry_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entry_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.num_towers);
-		}
-		_mem_save_num_towers_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.num_towers, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.num_towers));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_num_towers_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->out.towers));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->out.towers));
-		if (ndr_get_array_length(ndr, &r->out.towers) > ndr_get_array_size(ndr, &r->out.towers)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->out.towers), ndr_get_array_length(ndr, &r->out.towers));
-		}
-		NDR_PULL_ALLOC_N(ndr, r->out.towers, ndr_get_array_size(ndr, &r->out.towers));
-		_mem_save_towers_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.towers, 0);
-		for (cntr_towers_0 = 0; cntr_towers_0 < *r->out.num_towers; cntr_towers_0++) {
-			NDR_CHECK(ndr_pull_epm_twr_p_t(ndr, NDR_SCALARS, &r->out.towers[cntr_towers_0]));
-		}
-		for (cntr_towers_0 = 0; cntr_towers_0 < *r->out.num_towers; cntr_towers_0++) {
-			NDR_CHECK(ndr_pull_epm_twr_p_t(ndr, NDR_BUFFERS, &r->out.towers[cntr_towers_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_towers_0, 0);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->out.result));
-		if (r->out.towers) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->out.towers, r->in.max_towers));
-		}
-		if (r->out.towers) {
-			NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->out.towers, *r->out.num_towers));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_Map(struct ndr_print *ndr, const char *name, int flags, const struct epm_Map *r)
-{
-	uint32_t cntr_towers_0;
-	ndr_print_struct(ndr, name, "epm_Map");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "epm_Map");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "object", r->in.object);
-		ndr->depth++;
-		if (r->in.object) {
-			ndr_print_GUID(ndr, "object", r->in.object);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "map_tower", r->in.map_tower);
-		ndr->depth++;
-		if (r->in.map_tower) {
-			ndr_print_epm_twr_t(ndr, "map_tower", r->in.map_tower);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "entry_handle", r->in.entry_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "entry_handle", r->in.entry_handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "max_towers", r->in.max_towers);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "epm_Map");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "entry_handle", r->out.entry_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "entry_handle", r->out.entry_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "num_towers", r->out.num_towers);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "num_towers", *r->out.num_towers);
-		ndr->depth--;
-		ndr->print(ndr, "%s: ARRAY(%d)", "towers", *r->out.num_towers);
-		ndr->depth++;
-		for (cntr_towers_0=0;cntr_towers_0<*r->out.num_towers;cntr_towers_0++) {
-			char *idx_0=NULL;
-			if (asprintf(&idx_0, "[%d]", cntr_towers_0) != -1) {
-				ndr_print_epm_twr_p_t(ndr, "towers", &r->out.towers[cntr_towers_0]);
-				free(idx_0);
-			}
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_LookupHandleFree(struct ndr_push *ndr, int flags, const struct epm_LookupHandleFree *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.entry_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.entry_handle));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.entry_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.entry_handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_LookupHandleFree(struct ndr_pull *ndr, int flags, struct epm_LookupHandleFree *r)
-{
-	TALLOC_CTX *_mem_save_entry_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.entry_handle);
-		}
-		_mem_save_entry_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.entry_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.entry_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entry_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.entry_handle);
-		*r->out.entry_handle = *r->in.entry_handle;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.entry_handle);
-		}
-		_mem_save_entry_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.entry_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.entry_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entry_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_LookupHandleFree(struct ndr_print *ndr, const char *name, int flags, const struct epm_LookupHandleFree *r)
-{
-	ndr_print_struct(ndr, name, "epm_LookupHandleFree");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "epm_LookupHandleFree");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "entry_handle", r->in.entry_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "entry_handle", r->in.entry_handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "epm_LookupHandleFree");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "entry_handle", r->out.entry_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "entry_handle", r->out.entry_handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_InqObject(struct ndr_push *ndr, int flags, const struct epm_InqObject *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.epm_object == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.epm_object));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_InqObject(struct ndr_pull *ndr, int flags, struct epm_InqObject *r)
-{
-	TALLOC_CTX *_mem_save_epm_object_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.epm_object);
-		}
-		_mem_save_epm_object_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.epm_object, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.epm_object));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_epm_object_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_InqObject(struct ndr_print *ndr, const char *name, int flags, const struct epm_InqObject *r)
-{
-	ndr_print_struct(ndr, name, "epm_InqObject");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "epm_InqObject");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "epm_object", r->in.epm_object);
-		ndr->depth++;
-		ndr_print_GUID(ndr, "epm_object", r->in.epm_object);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "epm_InqObject");
-		ndr->depth++;
-		ndr_print_uint32(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_MgmtDelete(struct ndr_push *ndr, int flags, const struct epm_MgmtDelete *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.object_speced));
-		NDR_CHECK(ndr_push_full_ptr(ndr, r->in.object));
-		if (r->in.object) {
-			NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.object));
-		}
-		NDR_CHECK(ndr_push_full_ptr(ndr, r->in.tower));
-		if (r->in.tower) {
-			NDR_CHECK(ndr_push_epm_twr_t(ndr, NDR_SCALARS, r->in.tower));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_MgmtDelete(struct ndr_pull *ndr, int flags, struct epm_MgmtDelete *r)
-{
-	uint32_t _ptr_object;
-	uint32_t _ptr_tower;
-	TALLOC_CTX *_mem_save_object_0;
-	TALLOC_CTX *_mem_save_tower_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.object_speced));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_object));
-		if (_ptr_object) {
-			NDR_PULL_ALLOC(ndr, r->in.object);
-		} else {
-			r->in.object = NULL;
-		}
-		if (r->in.object) {
-			_mem_save_object_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.object, 0);
-			NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.object));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_object_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_tower));
-		if (_ptr_tower) {
-			NDR_PULL_ALLOC(ndr, r->in.tower);
-		} else {
-			r->in.tower = NULL;
-		}
-		if (r->in.tower) {
-			_mem_save_tower_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.tower, 0);
-			NDR_CHECK(ndr_pull_epm_twr_t(ndr, NDR_SCALARS, r->in.tower));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_tower_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_MgmtDelete(struct ndr_print *ndr, const char *name, int flags, const struct epm_MgmtDelete *r)
-{
-	ndr_print_struct(ndr, name, "epm_MgmtDelete");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "epm_MgmtDelete");
-		ndr->depth++;
-		ndr_print_uint32(ndr, "object_speced", r->in.object_speced);
-		ndr_print_ptr(ndr, "object", r->in.object);
-		ndr->depth++;
-		if (r->in.object) {
-			ndr_print_GUID(ndr, "object", r->in.object);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "tower", r->in.tower);
-		ndr->depth++;
-		if (r->in.tower) {
-			ndr_print_epm_twr_t(ndr, "tower", r->in.tower);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "epm_MgmtDelete");
-		ndr->depth++;
-		ndr_print_uint32(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_epm_MapAuth(struct ndr_push *ndr, int flags, const struct epm_MapAuth *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_epm_MapAuth(struct ndr_pull *ndr, int flags, struct epm_MapAuth *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_epm_MapAuth(struct ndr_print *ndr, const char *name, int flags, const struct epm_MapAuth *r)
-{
-	ndr_print_struct(ndr, name, "epm_MapAuth");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "epm_MapAuth");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "epm_MapAuth");
-		ndr->depth++;
-		ndr_print_uint32(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static const struct ndr_interface_call epmapper_calls[] = {
-	{
-		"epm_Insert",
-		sizeof(struct epm_Insert),
-		(ndr_push_flags_fn_t) ndr_push_epm_Insert,
-		(ndr_pull_flags_fn_t) ndr_pull_epm_Insert,
-		(ndr_print_function_t) ndr_print_epm_Insert,
-		false,
-	},
-	{
-		"epm_Delete",
-		sizeof(struct epm_Delete),
-		(ndr_push_flags_fn_t) ndr_push_epm_Delete,
-		(ndr_pull_flags_fn_t) ndr_pull_epm_Delete,
-		(ndr_print_function_t) ndr_print_epm_Delete,
-		false,
-	},
-	{
-		"epm_Lookup",
-		sizeof(struct epm_Lookup),
-		(ndr_push_flags_fn_t) ndr_push_epm_Lookup,
-		(ndr_pull_flags_fn_t) ndr_pull_epm_Lookup,
-		(ndr_print_function_t) ndr_print_epm_Lookup,
-		false,
-	},
-	{
-		"epm_Map",
-		sizeof(struct epm_Map),
-		(ndr_push_flags_fn_t) ndr_push_epm_Map,
-		(ndr_pull_flags_fn_t) ndr_pull_epm_Map,
-		(ndr_print_function_t) ndr_print_epm_Map,
-		false,
-	},
-	{
-		"epm_LookupHandleFree",
-		sizeof(struct epm_LookupHandleFree),
-		(ndr_push_flags_fn_t) ndr_push_epm_LookupHandleFree,
-		(ndr_pull_flags_fn_t) ndr_pull_epm_LookupHandleFree,
-		(ndr_print_function_t) ndr_print_epm_LookupHandleFree,
-		false,
-	},
-	{
-		"epm_InqObject",
-		sizeof(struct epm_InqObject),
-		(ndr_push_flags_fn_t) ndr_push_epm_InqObject,
-		(ndr_pull_flags_fn_t) ndr_pull_epm_InqObject,
-		(ndr_print_function_t) ndr_print_epm_InqObject,
-		false,
-	},
-	{
-		"epm_MgmtDelete",
-		sizeof(struct epm_MgmtDelete),
-		(ndr_push_flags_fn_t) ndr_push_epm_MgmtDelete,
-		(ndr_pull_flags_fn_t) ndr_pull_epm_MgmtDelete,
-		(ndr_print_function_t) ndr_print_epm_MgmtDelete,
-		false,
-	},
-	{
-		"epm_MapAuth",
-		sizeof(struct epm_MapAuth),
-		(ndr_push_flags_fn_t) ndr_push_epm_MapAuth,
-		(ndr_pull_flags_fn_t) ndr_pull_epm_MapAuth,
-		(ndr_print_function_t) ndr_print_epm_MapAuth,
-		false,
-	},
-	{ NULL, 0, NULL, NULL, NULL, false }
-};
-
-static const char * const epmapper_endpoint_strings[] = {
-	"ncacn_np:[\\pipe\\epmapper]", 
-	"ncacn_ip_tcp:[135]", 
-	"ncalrpc:[EPMAPPER]", 
-};
-
-static const struct ndr_interface_string_array epmapper_endpoints = {
-	.count	= 3,
-	.names	= epmapper_endpoint_strings
-};
-
-static const char * const epmapper_authservice_strings[] = {
-	"host", 
-};
-
-static const struct ndr_interface_string_array epmapper_authservices = {
-	.count	= 1,
-	.names	= epmapper_authservice_strings
-};
-
-
-const struct ndr_interface_table ndr_table_epmapper = {
-	.name		= "epmapper",
-	.syntax_id	= {
-		{0xe1af8308,0x5d1f,0x11c9,{0x91,0xa4},{0x08,0x00,0x2b,0x14,0xa0,0xfa}},
-		NDR_EPMAPPER_VERSION
-	},
-	.helpstring	= NDR_EPMAPPER_HELPSTRING,
-	.num_calls	= 8,
-	.calls		= epmapper_calls,
-	.endpoints	= &epmapper_endpoints,
-	.authservices	= &epmapper_authservices
-};
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_epmapper.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_epmapper.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_epmapper.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,76 +0,0 @@
-/* header auto-generated by pidl */
-
-#include "librpc/ndr/libndr.h"
-#include "librpc/gen_ndr/epmapper.h"
-
-#ifndef _HEADER_NDR_epmapper
-#define _HEADER_NDR_epmapper
-
-#define NDR_EPMAPPER_UUID "e1af8308-5d1f-11c9-91a4-08002b14a0fa"
-#define NDR_EPMAPPER_VERSION 3.0
-#define NDR_EPMAPPER_NAME "epmapper"
-#define NDR_EPMAPPER_HELPSTRING "EndPoint Mapper"
-extern const struct ndr_interface_table ndr_table_epmapper;
-#define NDR_EPM_INSERT (0x00)
-
-#define NDR_EPM_DELETE (0x01)
-
-#define NDR_EPM_LOOKUP (0x02)
-
-#define NDR_EPM_MAP (0x03)
-
-#define NDR_EPM_LOOKUPHANDLEFREE (0x04)
-
-#define NDR_EPM_INQOBJECT (0x05)
-
-#define NDR_EPM_MGMTDELETE (0x06)
-
-#define NDR_EPM_MAPAUTH (0x07)
-
-#define NDR_EPMAPPER_CALL_COUNT (8)
-void ndr_print_epm_protocol(struct ndr_print *ndr, const char *name, enum epm_protocol r);
-void ndr_print_epm_rhs_dnet_nsp(struct ndr_print *ndr, const char *name, const struct epm_rhs_dnet_nsp *r);
-void ndr_print_epm_rhs_osi_tp4(struct ndr_print *ndr, const char *name, const struct epm_rhs_osi_tp4 *r);
-void ndr_print_epm_rhs_osi_clns(struct ndr_print *ndr, const char *name, const struct epm_rhs_osi_clns *r);
-void ndr_print_epm_rhs_udp(struct ndr_print *ndr, const char *name, const struct epm_rhs_udp *r);
-void ndr_print_epm_rhs_tcp(struct ndr_print *ndr, const char *name, const struct epm_rhs_tcp *r);
-void ndr_print_epm_rhs_ip(struct ndr_print *ndr, const char *name, const struct epm_rhs_ip *r);
-void ndr_print_epm_rhs_ncadg(struct ndr_print *ndr, const char *name, const struct epm_rhs_ncadg *r);
-void ndr_print_epm_rhs_ncacn(struct ndr_print *ndr, const char *name, const struct epm_rhs_ncacn *r);
-void ndr_print_epm_rhs_uuid(struct ndr_print *ndr, const char *name, const struct epm_rhs_uuid *r);
-void ndr_print_epm_rhs_ipx(struct ndr_print *ndr, const char *name, const struct epm_rhs_ipx *r);
-void ndr_print_epm_rhs_smb(struct ndr_print *ndr, const char *name, const struct epm_rhs_smb *r);
-void ndr_print_epm_rhs_pipe(struct ndr_print *ndr, const char *name, const struct epm_rhs_pipe *r);
-void ndr_print_epm_rhs_netbios(struct ndr_print *ndr, const char *name, const struct epm_rhs_netbios *r);
-void ndr_print_epm_rhs_netbeui(struct ndr_print *ndr, const char *name, const struct epm_rhs_netbeui *r);
-void ndr_print_epm_rhs_spx(struct ndr_print *ndr, const char *name, const struct epm_rhs_spx *r);
-void ndr_print_epm_rhs_nb_ipx(struct ndr_print *ndr, const char *name, const struct epm_rhs_nb_ipx *r);
-void ndr_print_epm_rhs_http(struct ndr_print *ndr, const char *name, const struct epm_rhs_http *r);
-void ndr_print_epm_rhs_unix_ds(struct ndr_print *ndr, const char *name, const struct epm_rhs_unix_ds *r);
-void ndr_print_epm_rhs_null(struct ndr_print *ndr, const char *name, const struct epm_rhs_null *r);
-void ndr_print_epm_rhs_ncalrpc(struct ndr_print *ndr, const char *name, const struct epm_rhs_ncalrpc *r);
-void ndr_print_epm_rhs_appletalk(struct ndr_print *ndr, const char *name, const struct epm_rhs_appletalk *r);
-void ndr_print_epm_rhs_atalk_stream(struct ndr_print *ndr, const char *name, const struct epm_rhs_atalk_stream *r);
-void ndr_print_epm_rhs_atalk_datagram(struct ndr_print *ndr, const char *name, const struct epm_rhs_atalk_datagram *r);
-void ndr_print_epm_rhs_vines_spp(struct ndr_print *ndr, const char *name, const struct epm_rhs_vines_spp *r);
-void ndr_print_epm_rhs_vines_ipc(struct ndr_print *ndr, const char *name, const struct epm_rhs_vines_ipc *r);
-void ndr_print_epm_rhs_streettalk(struct ndr_print *ndr, const char *name, const struct epm_rhs_streettalk *r);
-void ndr_print_epm_rhs(struct ndr_print *ndr, const char *name, const union epm_rhs *r);
-void ndr_print_epm_lhs(struct ndr_print *ndr, const char *name, const struct epm_lhs *r);
-void ndr_print_epm_floor(struct ndr_print *ndr, const char *name, const struct epm_floor *r);
-void ndr_print_epm_tower(struct ndr_print *ndr, const char *name, const struct epm_tower *r);
-void ndr_print_epm_twr_t(struct ndr_print *ndr, const char *name, const struct epm_twr_t *r);
-void ndr_print_epm_entry_t(struct ndr_print *ndr, const char *name, const struct epm_entry_t *r);
-void ndr_print_rpc_if_id_t(struct ndr_print *ndr, const char *name, const struct rpc_if_id_t *r);
-void ndr_print_epm_twr_p_t(struct ndr_print *ndr, const char *name, const struct epm_twr_p_t *r);
-void ndr_print_epm_Insert(struct ndr_print *ndr, const char *name, int flags, const struct epm_Insert *r);
-void ndr_print_epm_Delete(struct ndr_print *ndr, const char *name, int flags, const struct epm_Delete *r);
-void ndr_print_epm_Lookup(struct ndr_print *ndr, const char *name, int flags, const struct epm_Lookup *r);
-enum ndr_err_code ndr_push_epm_Map(struct ndr_push *ndr, int flags, const struct epm_Map *r);
-enum ndr_err_code ndr_pull_epm_Map(struct ndr_pull *ndr, int flags, struct epm_Map *r);
-void ndr_print_epm_Map(struct ndr_print *ndr, const char *name, int flags, const struct epm_Map *r);
-void ndr_print_epm_LookupHandleFree(struct ndr_print *ndr, const char *name, int flags, const struct epm_LookupHandleFree *r);
-void ndr_print_epm_InqObject(struct ndr_print *ndr, const char *name, int flags, const struct epm_InqObject *r);
-void ndr_print_epm_MgmtDelete(struct ndr_print *ndr, const char *name, int flags, const struct epm_MgmtDelete *r);
-void ndr_print_epm_MapAuth(struct ndr_print *ndr, const char *name, int flags, const struct epm_MapAuth *r);
-#endif /* _HEADER_NDR_epmapper */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_eventlog.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_eventlog.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_eventlog.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,1730 +0,0 @@
-/* parser auto-generated by pidl */
-
-#include "includes.h"
-#include "librpc/gen_ndr/ndr_eventlog.h"
-
-#include "librpc/gen_ndr/ndr_lsa.h"
-#include "librpc/gen_ndr/ndr_security.h"
-static enum ndr_err_code ndr_push_eventlog_OpenUnknown0(struct ndr_push *ndr, int ndr_flags, const struct eventlog_OpenUnknown0 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 2));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->unknown0));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->unknown1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_OpenUnknown0(struct ndr_pull *ndr, int ndr_flags, struct eventlog_OpenUnknown0 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 2));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->unknown0));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->unknown1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_OpenUnknown0(struct ndr_print *ndr, const char *name, const struct eventlog_OpenUnknown0 *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_OpenUnknown0");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "unknown0", r->unknown0);
-	ndr_print_uint16(ndr, "unknown1", r->unknown1);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_eventlog_Record(struct ndr_push *ndr, int ndr_flags, const struct eventlog_Record *r)
-{
-	uint32_t cntr_strings_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->size));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->reserved));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->record_number));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->time_generated));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->time_written));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->event_id));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->event_type));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->num_of_strings));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->event_category));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->reserved_flags));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->closing_record_number));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->stringoffset));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sid_length));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sid_offset));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->data_length));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->data_offset));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->source_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->computer_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			for (cntr_strings_0 = 0; cntr_strings_0 < r->num_of_strings; cntr_strings_0++) {
-				NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->strings[cntr_strings_0]));
-			}
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->raw_data));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_eventlog_Record(struct ndr_pull *ndr, int ndr_flags, struct eventlog_Record *r)
-{
-	uint32_t cntr_strings_0;
-	TALLOC_CTX *_mem_save_strings_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->size));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->reserved));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->record_number));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->time_generated));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->time_written));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->event_id));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->event_type));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->num_of_strings));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->event_category));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->reserved_flags));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->closing_record_number));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->stringoffset));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sid_length));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sid_offset));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->data_length));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->data_offset));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->source_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->computer_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_PULL_ALLOC_N(ndr, r->strings, r->num_of_strings);
-			_mem_save_strings_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->strings, 0);
-			for (cntr_strings_0 = 0; cntr_strings_0 < r->num_of_strings; cntr_strings_0++) {
-				NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->strings[cntr_strings_0]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_strings_0, 0);
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->raw_data));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_Record(struct ndr_print *ndr, const char *name, const struct eventlog_Record *r)
-{
-	uint32_t cntr_strings_0;
-	ndr_print_struct(ndr, name, "eventlog_Record");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "size", r->size);
-	ndr_print_uint32(ndr, "reserved", r->reserved);
-	ndr_print_uint32(ndr, "record_number", r->record_number);
-	ndr_print_uint32(ndr, "time_generated", r->time_generated);
-	ndr_print_uint32(ndr, "time_written", r->time_written);
-	ndr_print_uint32(ndr, "event_id", r->event_id);
-	ndr_print_uint16(ndr, "event_type", r->event_type);
-	ndr_print_uint16(ndr, "num_of_strings", r->num_of_strings);
-	ndr_print_uint16(ndr, "event_category", r->event_category);
-	ndr_print_uint16(ndr, "reserved_flags", r->reserved_flags);
-	ndr_print_uint32(ndr, "closing_record_number", r->closing_record_number);
-	ndr_print_uint32(ndr, "stringoffset", r->stringoffset);
-	ndr_print_uint32(ndr, "sid_length", r->sid_length);
-	ndr_print_uint32(ndr, "sid_offset", r->sid_offset);
-	ndr_print_uint32(ndr, "data_length", r->data_length);
-	ndr_print_uint32(ndr, "data_offset", r->data_offset);
-	ndr_print_string(ndr, "source_name", r->source_name);
-	ndr_print_string(ndr, "computer_name", r->computer_name);
-	ndr->print(ndr, "%s: ARRAY(%d)", "strings", r->num_of_strings);
-	ndr->depth++;
-	for (cntr_strings_0=0;cntr_strings_0<r->num_of_strings;cntr_strings_0++) {
-		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_strings_0) != -1) {
-			ndr_print_string(ndr, "strings", r->strings[cntr_strings_0]);
-			free(idx_0);
-		}
-	}
-	ndr->depth--;
-	ndr_print_string(ndr, "raw_data", r->raw_data);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_eventlog_ClearEventLogW(struct ndr_push *ndr, int flags, const struct eventlog_ClearEventLogW *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.backupfile));
-		if (r->in.backupfile) {
-			NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.backupfile));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_ClearEventLogW(struct ndr_pull *ndr, int flags, struct eventlog_ClearEventLogW *r)
-{
-	uint32_t _ptr_backupfile;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_backupfile_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_backupfile));
-		if (_ptr_backupfile) {
-			NDR_PULL_ALLOC(ndr, r->in.backupfile);
-		} else {
-			r->in.backupfile = NULL;
-		}
-		if (r->in.backupfile) {
-			_mem_save_backupfile_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.backupfile, 0);
-			NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.backupfile));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_backupfile_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_ClearEventLogW(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_ClearEventLogW *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_ClearEventLogW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "eventlog_ClearEventLogW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "backupfile", r->in.backupfile);
-		ndr->depth++;
-		if (r->in.backupfile) {
-			ndr_print_lsa_String(ndr, "backupfile", r->in.backupfile);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "eventlog_ClearEventLogW");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_eventlog_BackupEventLogW(struct ndr_push *ndr, int flags, const struct eventlog_BackupEventLogW *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_BackupEventLogW(struct ndr_pull *ndr, int flags, struct eventlog_BackupEventLogW *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_BackupEventLogW(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_BackupEventLogW *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_BackupEventLogW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "eventlog_BackupEventLogW");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "eventlog_BackupEventLogW");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_eventlog_CloseEventLog(struct ndr_push *ndr, int flags, const struct eventlog_CloseEventLog *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_CloseEventLog(struct ndr_pull *ndr, int flags, struct eventlog_CloseEventLog *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.handle);
-		*r->out.handle = *r->in.handle;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_CloseEventLog(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_CloseEventLog *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_CloseEventLog");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "eventlog_CloseEventLog");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "eventlog_CloseEventLog");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->out.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->out.handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_eventlog_DeregisterEventSource(struct ndr_push *ndr, int flags, const struct eventlog_DeregisterEventSource *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_DeregisterEventSource(struct ndr_pull *ndr, int flags, struct eventlog_DeregisterEventSource *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_DeregisterEventSource(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_DeregisterEventSource *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_DeregisterEventSource");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "eventlog_DeregisterEventSource");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "eventlog_DeregisterEventSource");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_eventlog_GetNumRecords(struct ndr_push *ndr, int flags, const struct eventlog_GetNumRecords *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.number == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.number));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_GetNumRecords(struct ndr_pull *ndr, int flags, struct eventlog_GetNumRecords *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_number_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.number);
-		ZERO_STRUCTP(r->out.number);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.number);
-		}
-		_mem_save_number_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.number, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.number));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_number_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_GetNumRecords(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_GetNumRecords *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_GetNumRecords");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "eventlog_GetNumRecords");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "eventlog_GetNumRecords");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "number", r->out.number);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "number", *r->out.number);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_eventlog_GetOldestRecord(struct ndr_push *ndr, int flags, const struct eventlog_GetOldestRecord *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.oldest_entry == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.oldest_entry));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_GetOldestRecord(struct ndr_pull *ndr, int flags, struct eventlog_GetOldestRecord *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_oldest_entry_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.oldest_entry);
-		ZERO_STRUCTP(r->out.oldest_entry);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.oldest_entry);
-		}
-		_mem_save_oldest_entry_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.oldest_entry, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.oldest_entry));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_oldest_entry_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_GetOldestRecord(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_GetOldestRecord *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_GetOldestRecord");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "eventlog_GetOldestRecord");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "eventlog_GetOldestRecord");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "oldest_entry", r->out.oldest_entry);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "oldest_entry", *r->out.oldest_entry);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_eventlog_ChangeNotify(struct ndr_push *ndr, int flags, const struct eventlog_ChangeNotify *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_ChangeNotify(struct ndr_pull *ndr, int flags, struct eventlog_ChangeNotify *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_ChangeNotify(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_ChangeNotify *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_ChangeNotify");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "eventlog_ChangeNotify");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "eventlog_ChangeNotify");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_eventlog_OpenEventLogW(struct ndr_push *ndr, int flags, const struct eventlog_OpenEventLogW *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.unknown0));
-		if (r->in.unknown0) {
-			NDR_CHECK(ndr_push_eventlog_OpenUnknown0(ndr, NDR_SCALARS, r->in.unknown0));
-		}
-		if (r->in.logname == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.logname));
-		if (r->in.servername == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.servername));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown2));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown3));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_OpenEventLogW(struct ndr_pull *ndr, int flags, struct eventlog_OpenEventLogW *r)
-{
-	uint32_t _ptr_unknown0;
-	TALLOC_CTX *_mem_save_unknown0_0;
-	TALLOC_CTX *_mem_save_logname_0;
-	TALLOC_CTX *_mem_save_servername_0;
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown0));
-		if (_ptr_unknown0) {
-			NDR_PULL_ALLOC(ndr, r->in.unknown0);
-		} else {
-			r->in.unknown0 = NULL;
-		}
-		if (r->in.unknown0) {
-			_mem_save_unknown0_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.unknown0, 0);
-			NDR_CHECK(ndr_pull_eventlog_OpenUnknown0(ndr, NDR_SCALARS, r->in.unknown0));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown0_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.logname);
-		}
-		_mem_save_logname_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.logname, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.logname));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_logname_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.servername);
-		}
-		_mem_save_servername_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.servername, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.servername));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_servername_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown2));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown3));
-		NDR_PULL_ALLOC(ndr, r->out.handle);
-		ZERO_STRUCTP(r->out.handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_OpenEventLogW(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_OpenEventLogW *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_OpenEventLogW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "eventlog_OpenEventLogW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "unknown0", r->in.unknown0);
-		ndr->depth++;
-		if (r->in.unknown0) {
-			ndr_print_eventlog_OpenUnknown0(ndr, "unknown0", r->in.unknown0);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "logname", r->in.logname);
-		ndr->depth++;
-		ndr_print_lsa_String(ndr, "logname", r->in.logname);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "servername", r->in.servername);
-		ndr->depth++;
-		ndr_print_lsa_String(ndr, "servername", r->in.servername);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "unknown2", r->in.unknown2);
-		ndr_print_uint32(ndr, "unknown3", r->in.unknown3);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "eventlog_OpenEventLogW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->out.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->out.handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_eventlog_RegisterEventSourceW(struct ndr_push *ndr, int flags, const struct eventlog_RegisterEventSourceW *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_RegisterEventSourceW(struct ndr_pull *ndr, int flags, struct eventlog_RegisterEventSourceW *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_RegisterEventSourceW(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_RegisterEventSourceW *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_RegisterEventSourceW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "eventlog_RegisterEventSourceW");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "eventlog_RegisterEventSourceW");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_eventlog_OpenBackupEventLogW(struct ndr_push *ndr, int flags, const struct eventlog_OpenBackupEventLogW *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_OpenBackupEventLogW(struct ndr_pull *ndr, int flags, struct eventlog_OpenBackupEventLogW *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_OpenBackupEventLogW(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_OpenBackupEventLogW *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_OpenBackupEventLogW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "eventlog_OpenBackupEventLogW");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "eventlog_OpenBackupEventLogW");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_eventlog_ReadEventLogW(struct ndr_push *ndr, int flags, const struct eventlog_ReadEventLogW *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.flags));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.offset));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.number_of_bytes));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.data == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.number_of_bytes));
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->out.data, r->in.number_of_bytes));
-		if (r->out.sent_size == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.sent_size));
-		if (r->out.real_size == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.real_size));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_ReadEventLogW(struct ndr_pull *ndr, int flags, struct eventlog_ReadEventLogW *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_sent_size_0;
-	TALLOC_CTX *_mem_save_real_size_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.flags));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.offset));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.number_of_bytes));
-		if (r->in.number_of_bytes < 0 || r->in.number_of_bytes > 0x7FFFF) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_PULL_ALLOC_N(ndr, r->out.data, r->in.number_of_bytes);
-		memset(r->out.data, 0, (r->in.number_of_bytes) * sizeof(*r->out.data));
-		NDR_PULL_ALLOC(ndr, r->out.sent_size);
-		ZERO_STRUCTP(r->out.sent_size);
-		NDR_PULL_ALLOC(ndr, r->out.real_size);
-		ZERO_STRUCTP(r->out.real_size);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->out.data));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC_N(ndr, r->out.data, ndr_get_array_size(ndr, &r->out.data));
-		}
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.data, ndr_get_array_size(ndr, &r->out.data)));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.sent_size);
-		}
-		_mem_save_sent_size_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.sent_size, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.sent_size));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sent_size_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.real_size);
-		}
-		_mem_save_real_size_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.real_size, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.real_size));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_real_size_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-		if (r->out.data) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->out.data, r->in.number_of_bytes));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_ReadEventLogW(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_ReadEventLogW *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_ReadEventLogW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "eventlog_ReadEventLogW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "flags", r->in.flags);
-		ndr_print_uint32(ndr, "offset", r->in.offset);
-		ndr_print_uint32(ndr, "number_of_bytes", r->in.number_of_bytes);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "eventlog_ReadEventLogW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "data", r->out.data);
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "data", r->out.data, r->in.number_of_bytes);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sent_size", r->out.sent_size);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "sent_size", *r->out.sent_size);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "real_size", r->out.real_size);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "real_size", *r->out.real_size);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_eventlog_ReportEventW(struct ndr_push *ndr, int flags, const struct eventlog_ReportEventW *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_ReportEventW(struct ndr_pull *ndr, int flags, struct eventlog_ReportEventW *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_ReportEventW(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_ReportEventW *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_ReportEventW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "eventlog_ReportEventW");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "eventlog_ReportEventW");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_eventlog_ClearEventLogA(struct ndr_push *ndr, int flags, const struct eventlog_ClearEventLogA *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_ClearEventLogA(struct ndr_pull *ndr, int flags, struct eventlog_ClearEventLogA *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_ClearEventLogA(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_ClearEventLogA *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_ClearEventLogA");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "eventlog_ClearEventLogA");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "eventlog_ClearEventLogA");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_eventlog_BackupEventLogA(struct ndr_push *ndr, int flags, const struct eventlog_BackupEventLogA *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_BackupEventLogA(struct ndr_pull *ndr, int flags, struct eventlog_BackupEventLogA *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_BackupEventLogA(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_BackupEventLogA *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_BackupEventLogA");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "eventlog_BackupEventLogA");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "eventlog_BackupEventLogA");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_eventlog_OpenEventLogA(struct ndr_push *ndr, int flags, const struct eventlog_OpenEventLogA *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_OpenEventLogA(struct ndr_pull *ndr, int flags, struct eventlog_OpenEventLogA *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_OpenEventLogA(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_OpenEventLogA *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_OpenEventLogA");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "eventlog_OpenEventLogA");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "eventlog_OpenEventLogA");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_eventlog_RegisterEventSourceA(struct ndr_push *ndr, int flags, const struct eventlog_RegisterEventSourceA *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_RegisterEventSourceA(struct ndr_pull *ndr, int flags, struct eventlog_RegisterEventSourceA *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_RegisterEventSourceA(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_RegisterEventSourceA *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_RegisterEventSourceA");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "eventlog_RegisterEventSourceA");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "eventlog_RegisterEventSourceA");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_eventlog_OpenBackupEventLogA(struct ndr_push *ndr, int flags, const struct eventlog_OpenBackupEventLogA *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_OpenBackupEventLogA(struct ndr_pull *ndr, int flags, struct eventlog_OpenBackupEventLogA *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_OpenBackupEventLogA(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_OpenBackupEventLogA *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_OpenBackupEventLogA");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "eventlog_OpenBackupEventLogA");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "eventlog_OpenBackupEventLogA");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_eventlog_ReadEventLogA(struct ndr_push *ndr, int flags, const struct eventlog_ReadEventLogA *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_ReadEventLogA(struct ndr_pull *ndr, int flags, struct eventlog_ReadEventLogA *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_ReadEventLogA(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_ReadEventLogA *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_ReadEventLogA");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "eventlog_ReadEventLogA");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "eventlog_ReadEventLogA");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_eventlog_ReportEventA(struct ndr_push *ndr, int flags, const struct eventlog_ReportEventA *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_ReportEventA(struct ndr_pull *ndr, int flags, struct eventlog_ReportEventA *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_ReportEventA(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_ReportEventA *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_ReportEventA");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "eventlog_ReportEventA");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "eventlog_ReportEventA");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_eventlog_RegisterClusterSvc(struct ndr_push *ndr, int flags, const struct eventlog_RegisterClusterSvc *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_RegisterClusterSvc(struct ndr_pull *ndr, int flags, struct eventlog_RegisterClusterSvc *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_RegisterClusterSvc(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_RegisterClusterSvc *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_RegisterClusterSvc");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "eventlog_RegisterClusterSvc");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "eventlog_RegisterClusterSvc");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_eventlog_DeregisterClusterSvc(struct ndr_push *ndr, int flags, const struct eventlog_DeregisterClusterSvc *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_DeregisterClusterSvc(struct ndr_pull *ndr, int flags, struct eventlog_DeregisterClusterSvc *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_DeregisterClusterSvc(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_DeregisterClusterSvc *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_DeregisterClusterSvc");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "eventlog_DeregisterClusterSvc");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "eventlog_DeregisterClusterSvc");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_eventlog_WriteClusterEvents(struct ndr_push *ndr, int flags, const struct eventlog_WriteClusterEvents *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_WriteClusterEvents(struct ndr_pull *ndr, int flags, struct eventlog_WriteClusterEvents *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_WriteClusterEvents(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_WriteClusterEvents *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_WriteClusterEvents");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "eventlog_WriteClusterEvents");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "eventlog_WriteClusterEvents");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_eventlog_GetLogIntormation(struct ndr_push *ndr, int flags, const struct eventlog_GetLogIntormation *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_GetLogIntormation(struct ndr_pull *ndr, int flags, struct eventlog_GetLogIntormation *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_GetLogIntormation(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_GetLogIntormation *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_GetLogIntormation");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "eventlog_GetLogIntormation");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "eventlog_GetLogIntormation");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_eventlog_FlushEventLog(struct ndr_push *ndr, int flags, const struct eventlog_FlushEventLog *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_eventlog_FlushEventLog(struct ndr_pull *ndr, int flags, struct eventlog_FlushEventLog *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_eventlog_FlushEventLog(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_FlushEventLog *r)
-{
-	ndr_print_struct(ndr, name, "eventlog_FlushEventLog");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "eventlog_FlushEventLog");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "eventlog_FlushEventLog");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static const struct ndr_interface_call eventlog_calls[] = {
-	{
-		"eventlog_ClearEventLogW",
-		sizeof(struct eventlog_ClearEventLogW),
-		(ndr_push_flags_fn_t) ndr_push_eventlog_ClearEventLogW,
-		(ndr_pull_flags_fn_t) ndr_pull_eventlog_ClearEventLogW,
-		(ndr_print_function_t) ndr_print_eventlog_ClearEventLogW,
-		false,
-	},
-	{
-		"eventlog_BackupEventLogW",
-		sizeof(struct eventlog_BackupEventLogW),
-		(ndr_push_flags_fn_t) ndr_push_eventlog_BackupEventLogW,
-		(ndr_pull_flags_fn_t) ndr_pull_eventlog_BackupEventLogW,
-		(ndr_print_function_t) ndr_print_eventlog_BackupEventLogW,
-		false,
-	},
-	{
-		"eventlog_CloseEventLog",
-		sizeof(struct eventlog_CloseEventLog),
-		(ndr_push_flags_fn_t) ndr_push_eventlog_CloseEventLog,
-		(ndr_pull_flags_fn_t) ndr_pull_eventlog_CloseEventLog,
-		(ndr_print_function_t) ndr_print_eventlog_CloseEventLog,
-		false,
-	},
-	{
-		"eventlog_DeregisterEventSource",
-		sizeof(struct eventlog_DeregisterEventSource),
-		(ndr_push_flags_fn_t) ndr_push_eventlog_DeregisterEventSource,
-		(ndr_pull_flags_fn_t) ndr_pull_eventlog_DeregisterEventSource,
-		(ndr_print_function_t) ndr_print_eventlog_DeregisterEventSource,
-		false,
-	},
-	{
-		"eventlog_GetNumRecords",
-		sizeof(struct eventlog_GetNumRecords),
-		(ndr_push_flags_fn_t) ndr_push_eventlog_GetNumRecords,
-		(ndr_pull_flags_fn_t) ndr_pull_eventlog_GetNumRecords,
-		(ndr_print_function_t) ndr_print_eventlog_GetNumRecords,
-		false,
-	},
-	{
-		"eventlog_GetOldestRecord",
-		sizeof(struct eventlog_GetOldestRecord),
-		(ndr_push_flags_fn_t) ndr_push_eventlog_GetOldestRecord,
-		(ndr_pull_flags_fn_t) ndr_pull_eventlog_GetOldestRecord,
-		(ndr_print_function_t) ndr_print_eventlog_GetOldestRecord,
-		false,
-	},
-	{
-		"eventlog_ChangeNotify",
-		sizeof(struct eventlog_ChangeNotify),
-		(ndr_push_flags_fn_t) ndr_push_eventlog_ChangeNotify,
-		(ndr_pull_flags_fn_t) ndr_pull_eventlog_ChangeNotify,
-		(ndr_print_function_t) ndr_print_eventlog_ChangeNotify,
-		false,
-	},
-	{
-		"eventlog_OpenEventLogW",
-		sizeof(struct eventlog_OpenEventLogW),
-		(ndr_push_flags_fn_t) ndr_push_eventlog_OpenEventLogW,
-		(ndr_pull_flags_fn_t) ndr_pull_eventlog_OpenEventLogW,
-		(ndr_print_function_t) ndr_print_eventlog_OpenEventLogW,
-		false,
-	},
-	{
-		"eventlog_RegisterEventSourceW",
-		sizeof(struct eventlog_RegisterEventSourceW),
-		(ndr_push_flags_fn_t) ndr_push_eventlog_RegisterEventSourceW,
-		(ndr_pull_flags_fn_t) ndr_pull_eventlog_RegisterEventSourceW,
-		(ndr_print_function_t) ndr_print_eventlog_RegisterEventSourceW,
-		false,
-	},
-	{
-		"eventlog_OpenBackupEventLogW",
-		sizeof(struct eventlog_OpenBackupEventLogW),
-		(ndr_push_flags_fn_t) ndr_push_eventlog_OpenBackupEventLogW,
-		(ndr_pull_flags_fn_t) ndr_pull_eventlog_OpenBackupEventLogW,
-		(ndr_print_function_t) ndr_print_eventlog_OpenBackupEventLogW,
-		false,
-	},
-	{
-		"eventlog_ReadEventLogW",
-		sizeof(struct eventlog_ReadEventLogW),
-		(ndr_push_flags_fn_t) ndr_push_eventlog_ReadEventLogW,
-		(ndr_pull_flags_fn_t) ndr_pull_eventlog_ReadEventLogW,
-		(ndr_print_function_t) ndr_print_eventlog_ReadEventLogW,
-		false,
-	},
-	{
-		"eventlog_ReportEventW",
-		sizeof(struct eventlog_ReportEventW),
-		(ndr_push_flags_fn_t) ndr_push_eventlog_ReportEventW,
-		(ndr_pull_flags_fn_t) ndr_pull_eventlog_ReportEventW,
-		(ndr_print_function_t) ndr_print_eventlog_ReportEventW,
-		false,
-	},
-	{
-		"eventlog_ClearEventLogA",
-		sizeof(struct eventlog_ClearEventLogA),
-		(ndr_push_flags_fn_t) ndr_push_eventlog_ClearEventLogA,
-		(ndr_pull_flags_fn_t) ndr_pull_eventlog_ClearEventLogA,
-		(ndr_print_function_t) ndr_print_eventlog_ClearEventLogA,
-		false,
-	},
-	{
-		"eventlog_BackupEventLogA",
-		sizeof(struct eventlog_BackupEventLogA),
-		(ndr_push_flags_fn_t) ndr_push_eventlog_BackupEventLogA,
-		(ndr_pull_flags_fn_t) ndr_pull_eventlog_BackupEventLogA,
-		(ndr_print_function_t) ndr_print_eventlog_BackupEventLogA,
-		false,
-	},
-	{
-		"eventlog_OpenEventLogA",
-		sizeof(struct eventlog_OpenEventLogA),
-		(ndr_push_flags_fn_t) ndr_push_eventlog_OpenEventLogA,
-		(ndr_pull_flags_fn_t) ndr_pull_eventlog_OpenEventLogA,
-		(ndr_print_function_t) ndr_print_eventlog_OpenEventLogA,
-		false,
-	},
-	{
-		"eventlog_RegisterEventSourceA",
-		sizeof(struct eventlog_RegisterEventSourceA),
-		(ndr_push_flags_fn_t) ndr_push_eventlog_RegisterEventSourceA,
-		(ndr_pull_flags_fn_t) ndr_pull_eventlog_RegisterEventSourceA,
-		(ndr_print_function_t) ndr_print_eventlog_RegisterEventSourceA,
-		false,
-	},
-	{
-		"eventlog_OpenBackupEventLogA",
-		sizeof(struct eventlog_OpenBackupEventLogA),
-		(ndr_push_flags_fn_t) ndr_push_eventlog_OpenBackupEventLogA,
-		(ndr_pull_flags_fn_t) ndr_pull_eventlog_OpenBackupEventLogA,
-		(ndr_print_function_t) ndr_print_eventlog_OpenBackupEventLogA,
-		false,
-	},
-	{
-		"eventlog_ReadEventLogA",
-		sizeof(struct eventlog_ReadEventLogA),
-		(ndr_push_flags_fn_t) ndr_push_eventlog_ReadEventLogA,
-		(ndr_pull_flags_fn_t) ndr_pull_eventlog_ReadEventLogA,
-		(ndr_print_function_t) ndr_print_eventlog_ReadEventLogA,
-		false,
-	},
-	{
-		"eventlog_ReportEventA",
-		sizeof(struct eventlog_ReportEventA),
-		(ndr_push_flags_fn_t) ndr_push_eventlog_ReportEventA,
-		(ndr_pull_flags_fn_t) ndr_pull_eventlog_ReportEventA,
-		(ndr_print_function_t) ndr_print_eventlog_ReportEventA,
-		false,
-	},
-	{
-		"eventlog_RegisterClusterSvc",
-		sizeof(struct eventlog_RegisterClusterSvc),
-		(ndr_push_flags_fn_t) ndr_push_eventlog_RegisterClusterSvc,
-		(ndr_pull_flags_fn_t) ndr_pull_eventlog_RegisterClusterSvc,
-		(ndr_print_function_t) ndr_print_eventlog_RegisterClusterSvc,
-		false,
-	},
-	{
-		"eventlog_DeregisterClusterSvc",
-		sizeof(struct eventlog_DeregisterClusterSvc),
-		(ndr_push_flags_fn_t) ndr_push_eventlog_DeregisterClusterSvc,
-		(ndr_pull_flags_fn_t) ndr_pull_eventlog_DeregisterClusterSvc,
-		(ndr_print_function_t) ndr_print_eventlog_DeregisterClusterSvc,
-		false,
-	},
-	{
-		"eventlog_WriteClusterEvents",
-		sizeof(struct eventlog_WriteClusterEvents),
-		(ndr_push_flags_fn_t) ndr_push_eventlog_WriteClusterEvents,
-		(ndr_pull_flags_fn_t) ndr_pull_eventlog_WriteClusterEvents,
-		(ndr_print_function_t) ndr_print_eventlog_WriteClusterEvents,
-		false,
-	},
-	{
-		"eventlog_GetLogIntormation",
-		sizeof(struct eventlog_GetLogIntormation),
-		(ndr_push_flags_fn_t) ndr_push_eventlog_GetLogIntormation,
-		(ndr_pull_flags_fn_t) ndr_pull_eventlog_GetLogIntormation,
-		(ndr_print_function_t) ndr_print_eventlog_GetLogIntormation,
-		false,
-	},
-	{
-		"eventlog_FlushEventLog",
-		sizeof(struct eventlog_FlushEventLog),
-		(ndr_push_flags_fn_t) ndr_push_eventlog_FlushEventLog,
-		(ndr_pull_flags_fn_t) ndr_pull_eventlog_FlushEventLog,
-		(ndr_print_function_t) ndr_print_eventlog_FlushEventLog,
-		false,
-	},
-	{ NULL, 0, NULL, NULL, NULL, false }
-};
-
-static const char * const eventlog_endpoint_strings[] = {
-	"ncacn_np:[\\pipe\\eventlog]", 
-};
-
-static const struct ndr_interface_string_array eventlog_endpoints = {
-	.count	= 1,
-	.names	= eventlog_endpoint_strings
-};
-
-static const char * const eventlog_authservice_strings[] = {
-	"host", 
-};
-
-static const struct ndr_interface_string_array eventlog_authservices = {
-	.count	= 1,
-	.names	= eventlog_authservice_strings
-};
-
-
-const struct ndr_interface_table ndr_table_eventlog = {
-	.name		= "eventlog",
-	.syntax_id	= {
-		{0x82273fdc,0xe32a,0x18c3,{0x3f,0x78},{0x82,0x79,0x29,0xdc,0x23,0xea}},
-		NDR_EVENTLOG_VERSION
-	},
-	.helpstring	= NDR_EVENTLOG_HELPSTRING,
-	.num_calls	= 24,
-	.calls		= eventlog_calls,
-	.endpoints	= &eventlog_endpoints,
-	.authservices	= &eventlog_authservices
-};
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_eventlog.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_eventlog.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_eventlog.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,91 +0,0 @@
-/* header auto-generated by pidl */
-
-#include "librpc/ndr/libndr.h"
-#include "librpc/gen_ndr/eventlog.h"
-
-#ifndef _HEADER_NDR_eventlog
-#define _HEADER_NDR_eventlog
-
-#define NDR_EVENTLOG_UUID "82273fdc-e32a-18c3-3f78-827929dc23ea"
-#define NDR_EVENTLOG_VERSION 0.0
-#define NDR_EVENTLOG_NAME "eventlog"
-#define NDR_EVENTLOG_HELPSTRING "Event Logger"
-extern const struct ndr_interface_table ndr_table_eventlog;
-#define NDR_EVENTLOG_CLEAREVENTLOGW (0x00)
-
-#define NDR_EVENTLOG_BACKUPEVENTLOGW (0x01)
-
-#define NDR_EVENTLOG_CLOSEEVENTLOG (0x02)
-
-#define NDR_EVENTLOG_DEREGISTEREVENTSOURCE (0x03)
-
-#define NDR_EVENTLOG_GETNUMRECORDS (0x04)
-
-#define NDR_EVENTLOG_GETOLDESTRECORD (0x05)
-
-#define NDR_EVENTLOG_CHANGENOTIFY (0x06)
-
-#define NDR_EVENTLOG_OPENEVENTLOGW (0x07)
-
-#define NDR_EVENTLOG_REGISTEREVENTSOURCEW (0x08)
-
-#define NDR_EVENTLOG_OPENBACKUPEVENTLOGW (0x09)
-
-#define NDR_EVENTLOG_READEVENTLOGW (0x0a)
-
-#define NDR_EVENTLOG_REPORTEVENTW (0x0b)
-
-#define NDR_EVENTLOG_CLEAREVENTLOGA (0x0c)
-
-#define NDR_EVENTLOG_BACKUPEVENTLOGA (0x0d)
-
-#define NDR_EVENTLOG_OPENEVENTLOGA (0x0e)
-
-#define NDR_EVENTLOG_REGISTEREVENTSOURCEA (0x0f)
-
-#define NDR_EVENTLOG_OPENBACKUPEVENTLOGA (0x10)
-
-#define NDR_EVENTLOG_READEVENTLOGA (0x11)
-
-#define NDR_EVENTLOG_REPORTEVENTA (0x12)
-
-#define NDR_EVENTLOG_REGISTERCLUSTERSVC (0x13)
-
-#define NDR_EVENTLOG_DEREGISTERCLUSTERSVC (0x14)
-
-#define NDR_EVENTLOG_WRITECLUSTEREVENTS (0x15)
-
-#define NDR_EVENTLOG_GETLOGINTORMATION (0x16)
-
-#define NDR_EVENTLOG_FLUSHEVENTLOG (0x17)
-
-#define NDR_EVENTLOG_CALL_COUNT (24)
-void ndr_print_eventlog_OpenUnknown0(struct ndr_print *ndr, const char *name, const struct eventlog_OpenUnknown0 *r);
-enum ndr_err_code ndr_push_eventlog_Record(struct ndr_push *ndr, int ndr_flags, const struct eventlog_Record *r);
-enum ndr_err_code ndr_pull_eventlog_Record(struct ndr_pull *ndr, int ndr_flags, struct eventlog_Record *r);
-void ndr_print_eventlog_Record(struct ndr_print *ndr, const char *name, const struct eventlog_Record *r);
-void ndr_print_eventlog_ClearEventLogW(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_ClearEventLogW *r);
-void ndr_print_eventlog_BackupEventLogW(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_BackupEventLogW *r);
-void ndr_print_eventlog_CloseEventLog(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_CloseEventLog *r);
-void ndr_print_eventlog_DeregisterEventSource(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_DeregisterEventSource *r);
-void ndr_print_eventlog_GetNumRecords(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_GetNumRecords *r);
-void ndr_print_eventlog_GetOldestRecord(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_GetOldestRecord *r);
-void ndr_print_eventlog_ChangeNotify(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_ChangeNotify *r);
-void ndr_print_eventlog_OpenEventLogW(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_OpenEventLogW *r);
-void ndr_print_eventlog_RegisterEventSourceW(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_RegisterEventSourceW *r);
-void ndr_print_eventlog_OpenBackupEventLogW(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_OpenBackupEventLogW *r);
-void ndr_print_eventlog_ReadEventLogW(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_ReadEventLogW *r);
-void ndr_print_eventlog_ReportEventW(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_ReportEventW *r);
-void ndr_print_eventlog_ClearEventLogA(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_ClearEventLogA *r);
-void ndr_print_eventlog_BackupEventLogA(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_BackupEventLogA *r);
-void ndr_print_eventlog_OpenEventLogA(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_OpenEventLogA *r);
-void ndr_print_eventlog_RegisterEventSourceA(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_RegisterEventSourceA *r);
-void ndr_print_eventlog_OpenBackupEventLogA(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_OpenBackupEventLogA *r);
-void ndr_print_eventlog_ReadEventLogA(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_ReadEventLogA *r);
-void ndr_print_eventlog_ReportEventA(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_ReportEventA *r);
-void ndr_print_eventlog_RegisterClusterSvc(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_RegisterClusterSvc *r);
-void ndr_print_eventlog_DeregisterClusterSvc(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_DeregisterClusterSvc *r);
-void ndr_print_eventlog_WriteClusterEvents(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_WriteClusterEvents *r);
-void ndr_print_eventlog_GetLogIntormation(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_GetLogIntormation *r);
-void ndr_print_eventlog_FlushEventLog(struct ndr_print *ndr, const char *name, int flags, const struct eventlog_FlushEventLog *r);
-#endif /* _HEADER_NDR_eventlog */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_initshutdown.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_initshutdown.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_initshutdown.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,429 +0,0 @@
-/* parser auto-generated by pidl */
-
-#include "includes.h"
-#include "librpc/gen_ndr/ndr_initshutdown.h"
-
-static enum ndr_err_code ndr_push_initshutdown_String_sub(struct ndr_push *ndr, int ndr_flags, const struct initshutdown_String_sub *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, strlen_m_term(r->name)));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_LEN4|LIBNDR_FLAG_STR_NOTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->name));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_initshutdown_String_sub(struct ndr_pull *ndr, int ndr_flags, struct initshutdown_String_sub *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->name_size));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_LEN4|LIBNDR_FLAG_STR_NOTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->name));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_initshutdown_String_sub(struct ndr_print *ndr, const char *name, const struct initshutdown_String_sub *r)
-{
-	ndr_print_struct(ndr, name, "initshutdown_String_sub");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "name_size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?strlen_m_term(r->name):r->name_size);
-	ndr_print_string(ndr, "name", r->name);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_initshutdown_String(struct ndr_push *ndr, int ndr_flags, const struct initshutdown_String *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, strlen_m(r->name->name) * 2));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, strlen_m_term(r->name->name) * 2));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			NDR_CHECK(ndr_push_initshutdown_String_sub(ndr, NDR_SCALARS, r->name));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_initshutdown_String(struct ndr_pull *ndr, int ndr_flags, struct initshutdown_String *r)
-{
-	uint32_t _ptr_name;
-	TALLOC_CTX *_mem_save_name_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->name_len));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->name_size));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_name));
-		if (_ptr_name) {
-			NDR_PULL_ALLOC(ndr, r->name);
-		} else {
-			r->name = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->name, 0);
-			NDR_CHECK(ndr_pull_initshutdown_String_sub(ndr, NDR_SCALARS, r->name));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_initshutdown_String(struct ndr_print *ndr, const char *name, const struct initshutdown_String *r)
-{
-	ndr_print_struct(ndr, name, "initshutdown_String");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "name_len", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?strlen_m(r->name->name) * 2:r->name_len);
-	ndr_print_uint16(ndr, "name_size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?strlen_m_term(r->name->name) * 2:r->name_size);
-	ndr_print_ptr(ndr, "name", r->name);
-	ndr->depth++;
-	if (r->name) {
-		ndr_print_initshutdown_String_sub(ndr, "name", r->name);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_initshutdown_Init(struct ndr_push *ndr, int flags, const struct initshutdown_Init *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.hostname));
-		if (r->in.hostname) {
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, *r->in.hostname));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.message));
-		if (r->in.message) {
-			NDR_CHECK(ndr_push_initshutdown_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.message));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.timeout));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->in.force_apps));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->in.reboot));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_initshutdown_Init(struct ndr_pull *ndr, int flags, struct initshutdown_Init *r)
-{
-	uint32_t _ptr_hostname;
-	uint32_t _ptr_message;
-	TALLOC_CTX *_mem_save_hostname_0;
-	TALLOC_CTX *_mem_save_message_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_hostname));
-		if (_ptr_hostname) {
-			NDR_PULL_ALLOC(ndr, r->in.hostname);
-		} else {
-			r->in.hostname = NULL;
-		}
-		if (r->in.hostname) {
-			_mem_save_hostname_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.hostname, 0);
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, r->in.hostname));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_hostname_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_message));
-		if (_ptr_message) {
-			NDR_PULL_ALLOC(ndr, r->in.message);
-		} else {
-			r->in.message = NULL;
-		}
-		if (r->in.message) {
-			_mem_save_message_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.message, 0);
-			NDR_CHECK(ndr_pull_initshutdown_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.message));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_message_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.timeout));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->in.force_apps));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->in.reboot));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_initshutdown_Init(struct ndr_print *ndr, const char *name, int flags, const struct initshutdown_Init *r)
-{
-	ndr_print_struct(ndr, name, "initshutdown_Init");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "initshutdown_Init");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "hostname", r->in.hostname);
-		ndr->depth++;
-		if (r->in.hostname) {
-			ndr_print_uint16(ndr, "hostname", *r->in.hostname);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "message", r->in.message);
-		ndr->depth++;
-		if (r->in.message) {
-			ndr_print_initshutdown_String(ndr, "message", r->in.message);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "timeout", r->in.timeout);
-		ndr_print_uint8(ndr, "force_apps", r->in.force_apps);
-		ndr_print_uint8(ndr, "reboot", r->in.reboot);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "initshutdown_Init");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_initshutdown_Abort(struct ndr_push *ndr, int flags, const struct initshutdown_Abort *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server));
-		if (r->in.server) {
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, *r->in.server));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_initshutdown_Abort(struct ndr_pull *ndr, int flags, struct initshutdown_Abort *r)
-{
-	uint32_t _ptr_server;
-	TALLOC_CTX *_mem_save_server_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server));
-		if (_ptr_server) {
-			NDR_PULL_ALLOC(ndr, r->in.server);
-		} else {
-			r->in.server = NULL;
-		}
-		if (r->in.server) {
-			_mem_save_server_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server, 0);
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, r->in.server));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_initshutdown_Abort(struct ndr_print *ndr, const char *name, int flags, const struct initshutdown_Abort *r)
-{
-	ndr_print_struct(ndr, name, "initshutdown_Abort");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "initshutdown_Abort");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server", r->in.server);
-		ndr->depth++;
-		if (r->in.server) {
-			ndr_print_uint16(ndr, "server", *r->in.server);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "initshutdown_Abort");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_initshutdown_InitEx(struct ndr_push *ndr, int flags, const struct initshutdown_InitEx *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.hostname));
-		if (r->in.hostname) {
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, *r->in.hostname));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.message));
-		if (r->in.message) {
-			NDR_CHECK(ndr_push_initshutdown_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.message));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.timeout));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->in.force_apps));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->in.reboot));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.reason));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_initshutdown_InitEx(struct ndr_pull *ndr, int flags, struct initshutdown_InitEx *r)
-{
-	uint32_t _ptr_hostname;
-	uint32_t _ptr_message;
-	TALLOC_CTX *_mem_save_hostname_0;
-	TALLOC_CTX *_mem_save_message_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_hostname));
-		if (_ptr_hostname) {
-			NDR_PULL_ALLOC(ndr, r->in.hostname);
-		} else {
-			r->in.hostname = NULL;
-		}
-		if (r->in.hostname) {
-			_mem_save_hostname_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.hostname, 0);
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, r->in.hostname));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_hostname_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_message));
-		if (_ptr_message) {
-			NDR_PULL_ALLOC(ndr, r->in.message);
-		} else {
-			r->in.message = NULL;
-		}
-		if (r->in.message) {
-			_mem_save_message_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.message, 0);
-			NDR_CHECK(ndr_pull_initshutdown_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.message));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_message_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.timeout));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->in.force_apps));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->in.reboot));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.reason));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_initshutdown_InitEx(struct ndr_print *ndr, const char *name, int flags, const struct initshutdown_InitEx *r)
-{
-	ndr_print_struct(ndr, name, "initshutdown_InitEx");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "initshutdown_InitEx");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "hostname", r->in.hostname);
-		ndr->depth++;
-		if (r->in.hostname) {
-			ndr_print_uint16(ndr, "hostname", *r->in.hostname);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "message", r->in.message);
-		ndr->depth++;
-		if (r->in.message) {
-			ndr_print_initshutdown_String(ndr, "message", r->in.message);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "timeout", r->in.timeout);
-		ndr_print_uint8(ndr, "force_apps", r->in.force_apps);
-		ndr_print_uint8(ndr, "reboot", r->in.reboot);
-		ndr_print_uint32(ndr, "reason", r->in.reason);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "initshutdown_InitEx");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static const struct ndr_interface_call initshutdown_calls[] = {
-	{
-		"initshutdown_Init",
-		sizeof(struct initshutdown_Init),
-		(ndr_push_flags_fn_t) ndr_push_initshutdown_Init,
-		(ndr_pull_flags_fn_t) ndr_pull_initshutdown_Init,
-		(ndr_print_function_t) ndr_print_initshutdown_Init,
-		false,
-	},
-	{
-		"initshutdown_Abort",
-		sizeof(struct initshutdown_Abort),
-		(ndr_push_flags_fn_t) ndr_push_initshutdown_Abort,
-		(ndr_pull_flags_fn_t) ndr_pull_initshutdown_Abort,
-		(ndr_print_function_t) ndr_print_initshutdown_Abort,
-		false,
-	},
-	{
-		"initshutdown_InitEx",
-		sizeof(struct initshutdown_InitEx),
-		(ndr_push_flags_fn_t) ndr_push_initshutdown_InitEx,
-		(ndr_pull_flags_fn_t) ndr_pull_initshutdown_InitEx,
-		(ndr_print_function_t) ndr_print_initshutdown_InitEx,
-		false,
-	},
-	{ NULL, 0, NULL, NULL, NULL, false }
-};
-
-static const char * const initshutdown_endpoint_strings[] = {
-	"ncacn_np:[\\pipe\\InitShutdown]", 
-};
-
-static const struct ndr_interface_string_array initshutdown_endpoints = {
-	.count	= 1,
-	.names	= initshutdown_endpoint_strings
-};
-
-static const char * const initshutdown_authservice_strings[] = {
-	"host", 
-};
-
-static const struct ndr_interface_string_array initshutdown_authservices = {
-	.count	= 1,
-	.names	= initshutdown_authservice_strings
-};
-
-
-const struct ndr_interface_table ndr_table_initshutdown = {
-	.name		= "initshutdown",
-	.syntax_id	= {
-		{0x894de0c0,0x0d55,0x11d3,{0xa3,0x22},{0x00,0xc0,0x4f,0xa3,0x21,0xa1}},
-		NDR_INITSHUTDOWN_VERSION
-	},
-	.helpstring	= NDR_INITSHUTDOWN_HELPSTRING,
-	.num_calls	= 3,
-	.calls		= initshutdown_calls,
-	.endpoints	= &initshutdown_endpoints,
-	.authservices	= &initshutdown_authservices
-};
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_initshutdown.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_initshutdown.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_initshutdown.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,28 +0,0 @@
-/* header auto-generated by pidl */
-
-#include "librpc/ndr/libndr.h"
-#include "librpc/gen_ndr/initshutdown.h"
-
-#ifndef _HEADER_NDR_initshutdown
-#define _HEADER_NDR_initshutdown
-
-#define NDR_INITSHUTDOWN_UUID "894de0c0-0d55-11d3-a322-00c04fa321a1"
-#define NDR_INITSHUTDOWN_VERSION 1.0
-#define NDR_INITSHUTDOWN_NAME "initshutdown"
-#define NDR_INITSHUTDOWN_HELPSTRING "Init shutdown service"
-extern const struct ndr_interface_table ndr_table_initshutdown;
-#define NDR_INITSHUTDOWN_INIT (0x00)
-
-#define NDR_INITSHUTDOWN_ABORT (0x01)
-
-#define NDR_INITSHUTDOWN_INITEX (0x02)
-
-#define NDR_INITSHUTDOWN_CALL_COUNT (3)
-void ndr_print_initshutdown_String_sub(struct ndr_print *ndr, const char *name, const struct initshutdown_String_sub *r);
-enum ndr_err_code ndr_push_initshutdown_String(struct ndr_push *ndr, int ndr_flags, const struct initshutdown_String *r);
-enum ndr_err_code ndr_pull_initshutdown_String(struct ndr_pull *ndr, int ndr_flags, struct initshutdown_String *r);
-void ndr_print_initshutdown_String(struct ndr_print *ndr, const char *name, const struct initshutdown_String *r);
-void ndr_print_initshutdown_Init(struct ndr_print *ndr, const char *name, int flags, const struct initshutdown_Init *r);
-void ndr_print_initshutdown_Abort(struct ndr_print *ndr, const char *name, int flags, const struct initshutdown_Abort *r);
-void ndr_print_initshutdown_InitEx(struct ndr_print *ndr, const char *name, int flags, const struct initshutdown_InitEx *r);
-#endif /* _HEADER_NDR_initshutdown */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_krb5pac.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_krb5pac.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_krb5pac.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,902 +0,0 @@
-/* parser auto-generated by pidl */
-
-#include "includes.h"
-#include "librpc/gen_ndr/ndr_krb5pac.h"
-
-#include "librpc/gen_ndr/ndr_security.h"
-#include "librpc/gen_ndr/ndr_netlogon.h"
-#include "librpc/gen_ndr/ndr_samr.h"
-static enum ndr_err_code ndr_push_PAC_LOGON_NAME(struct ndr_push *ndr, int ndr_flags, const struct PAC_LOGON_NAME *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->logon_time));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, 2 * strlen_m(r->account_name)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->account_name, 2 * strlen_m(r->account_name), sizeof(uint8_t), CH_UTF16));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PAC_LOGON_NAME(struct ndr_pull *ndr, int ndr_flags, struct PAC_LOGON_NAME *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->logon_time));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->account_name, r->size, sizeof(uint8_t), CH_UTF16));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PAC_LOGON_NAME(struct ndr_print *ndr, const char *name, const struct PAC_LOGON_NAME *r)
-{
-	ndr_print_struct(ndr, name, "PAC_LOGON_NAME");
-	ndr->depth++;
-	ndr_print_NTTIME(ndr, "logon_time", r->logon_time);
-	ndr_print_uint16(ndr, "size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?2 * strlen_m(r->account_name):r->size);
-	ndr_print_string(ndr, "account_name", r->account_name);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_PAC_SIGNATURE_DATA(struct ndr_push *ndr, int ndr_flags, const struct PAC_SIGNATURE_DATA *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 4));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->type));
-			{
-				uint32_t _flags_save_DATA_BLOB = ndr->flags;
-				ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-				NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->signature));
-				ndr->flags = _flags_save_DATA_BLOB;
-			}
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_PAC_SIGNATURE_DATA(struct ndr_pull *ndr, int ndr_flags, struct PAC_SIGNATURE_DATA *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 4));
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->type));
-			{
-				uint32_t _flags_save_DATA_BLOB = ndr->flags;
-				ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-				NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->signature));
-				ndr->flags = _flags_save_DATA_BLOB;
-			}
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PAC_SIGNATURE_DATA(struct ndr_print *ndr, const char *name, const struct PAC_SIGNATURE_DATA *r)
-{
-	ndr_print_struct(ndr, name, "PAC_SIGNATURE_DATA");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "type", r->type);
-		ndr_print_DATA_BLOB(ndr, "signature", r->signature);
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-
-static enum ndr_err_code ndr_push_PAC_LOGON_INFO(struct ndr_push *ndr, int ndr_flags, const struct PAC_LOGON_INFO *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_netr_SamInfo3(ndr, NDR_SCALARS, &r->info3));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->res_group_dom_sid));
-		NDR_CHECK(ndr_push_samr_RidWithAttributeArray(ndr, NDR_SCALARS, &r->res_groups));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_netr_SamInfo3(ndr, NDR_BUFFERS, &r->info3));
-		if (r->res_group_dom_sid) {
-			NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->res_group_dom_sid));
-		}
-		NDR_CHECK(ndr_push_samr_RidWithAttributeArray(ndr, NDR_BUFFERS, &r->res_groups));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PAC_LOGON_INFO(struct ndr_pull *ndr, int ndr_flags, struct PAC_LOGON_INFO *r)
-{
-	uint32_t _ptr_res_group_dom_sid;
-	TALLOC_CTX *_mem_save_res_group_dom_sid_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_netr_SamInfo3(ndr, NDR_SCALARS, &r->info3));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_res_group_dom_sid));
-		if (_ptr_res_group_dom_sid) {
-			NDR_PULL_ALLOC(ndr, r->res_group_dom_sid);
-		} else {
-			r->res_group_dom_sid = NULL;
-		}
-		NDR_CHECK(ndr_pull_samr_RidWithAttributeArray(ndr, NDR_SCALARS, &r->res_groups));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_netr_SamInfo3(ndr, NDR_BUFFERS, &r->info3));
-		if (r->res_group_dom_sid) {
-			_mem_save_res_group_dom_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->res_group_dom_sid, 0);
-			NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->res_group_dom_sid));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_res_group_dom_sid_0, 0);
-		}
-		NDR_CHECK(ndr_pull_samr_RidWithAttributeArray(ndr, NDR_BUFFERS, &r->res_groups));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PAC_LOGON_INFO(struct ndr_print *ndr, const char *name, const struct PAC_LOGON_INFO *r)
-{
-	ndr_print_struct(ndr, name, "PAC_LOGON_INFO");
-	ndr->depth++;
-	ndr_print_netr_SamInfo3(ndr, "info3", &r->info3);
-	ndr_print_ptr(ndr, "res_group_dom_sid", r->res_group_dom_sid);
-	ndr->depth++;
-	if (r->res_group_dom_sid) {
-		ndr_print_dom_sid2(ndr, "res_group_dom_sid", r->res_group_dom_sid);
-	}
-	ndr->depth--;
-	ndr_print_samr_RidWithAttributeArray(ndr, "res_groups", &r->res_groups);
-	ndr->depth--;
-}
-
-static size_t ndr_size_PAC_LOGON_INFO(const struct PAC_LOGON_INFO *r, int flags)
-{
-	return ndr_size_struct(r, flags, (ndr_push_flags_fn_t)ndr_push_PAC_LOGON_INFO);
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_PAC_LOGON_INFO_CTR(struct ndr_push *ndr, int ndr_flags, const struct PAC_LOGON_INFO_CTR *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0x00081001));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0xCCCCCCCC));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, NDR_ROUND(ndr_size_PAC_LOGON_INFO(r->info, ndr->flags) + 4, 8)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0x00000000));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->info));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->info) {
-			NDR_CHECK(ndr_push_PAC_LOGON_INFO(ndr, NDR_SCALARS|NDR_BUFFERS, r->info));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_PAC_LOGON_INFO_CTR(struct ndr_pull *ndr, int ndr_flags, struct PAC_LOGON_INFO_CTR *r)
-{
-	uint32_t _ptr_info;
-	TALLOC_CTX *_mem_save_info_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->_ndr_size));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, r->info);
-		} else {
-			r->info = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->info) {
-			_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->info, 0);
-			NDR_CHECK(ndr_pull_PAC_LOGON_INFO(ndr, NDR_SCALARS|NDR_BUFFERS, r->info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PAC_LOGON_INFO_CTR(struct ndr_print *ndr, const char *name, const struct PAC_LOGON_INFO_CTR *r)
-{
-	ndr_print_struct(ndr, name, "PAC_LOGON_INFO_CTR");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "unknown1", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?0x00081001:r->unknown1);
-	ndr_print_uint32(ndr, "unknown2", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?0xCCCCCCCC:r->unknown2);
-	ndr_print_uint32(ndr, "_ndr_size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?NDR_ROUND(ndr_size_PAC_LOGON_INFO(r->info, ndr->flags) + 4, 8):r->_ndr_size);
-	ndr_print_uint32(ndr, "unknown3", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?0x00000000:r->unknown3);
-	ndr_print_ptr(ndr, "info", r->info);
-	ndr->depth++;
-	if (r->info) {
-		ndr_print_PAC_LOGON_INFO(ndr, "info", r->info);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_PAC_TYPE(struct ndr_push *ndr, int ndr_flags, enum PAC_TYPE r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_PAC_TYPE(struct ndr_pull *ndr, int ndr_flags, enum PAC_TYPE *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PAC_TYPE(struct ndr_print *ndr, const char *name, enum PAC_TYPE r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case PAC_TYPE_LOGON_INFO: val = "PAC_TYPE_LOGON_INFO"; break;
-		case PAC_TYPE_SRV_CHECKSUM: val = "PAC_TYPE_SRV_CHECKSUM"; break;
-		case PAC_TYPE_KDC_CHECKSUM: val = "PAC_TYPE_KDC_CHECKSUM"; break;
-		case PAC_TYPE_LOGON_NAME: val = "PAC_TYPE_LOGON_NAME"; break;
-		case PAC_TYPE_CONSTRAINED_DELEGATION: val = "PAC_TYPE_CONSTRAINED_DELEGATION"; break;
-		case PAC_TYPE_UNKNOWN_12: val = "PAC_TYPE_UNKNOWN_12"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_DATA_BLOB_REM(struct ndr_push *ndr, int ndr_flags, const struct DATA_BLOB_REM *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		{
-			uint32_t _flags_save_DATA_BLOB = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-			NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->remaining));
-			ndr->flags = _flags_save_DATA_BLOB;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_DATA_BLOB_REM(struct ndr_pull *ndr, int ndr_flags, struct DATA_BLOB_REM *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		{
-			uint32_t _flags_save_DATA_BLOB = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-			NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->remaining));
-			ndr->flags = _flags_save_DATA_BLOB;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_DATA_BLOB_REM(struct ndr_print *ndr, const char *name, const struct DATA_BLOB_REM *r)
-{
-	ndr_print_struct(ndr, name, "DATA_BLOB_REM");
-	ndr->depth++;
-	ndr_print_DATA_BLOB(ndr, "remaining", r->remaining);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_PAC_INFO(struct ndr_push *ndr, int ndr_flags, const union PAC_INFO *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case PAC_TYPE_LOGON_INFO: {
-				NDR_CHECK(ndr_push_PAC_LOGON_INFO_CTR(ndr, NDR_SCALARS, &r->logon_info));
-			break; }
-
-			case PAC_TYPE_SRV_CHECKSUM: {
-				NDR_CHECK(ndr_push_PAC_SIGNATURE_DATA(ndr, NDR_SCALARS, &r->srv_cksum));
-			break; }
-
-			case PAC_TYPE_KDC_CHECKSUM: {
-				NDR_CHECK(ndr_push_PAC_SIGNATURE_DATA(ndr, NDR_SCALARS, &r->kdc_cksum));
-			break; }
-
-			case PAC_TYPE_LOGON_NAME: {
-				NDR_CHECK(ndr_push_PAC_LOGON_NAME(ndr, NDR_SCALARS, &r->logon_name));
-			break; }
-
-			case PAC_TYPE_UNKNOWN_12: {
-				{
-					struct ndr_push *_ndr_unknown;
-					NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_unknown, 0, -1));
-					NDR_CHECK(ndr_push_DATA_BLOB_REM(_ndr_unknown, NDR_SCALARS, &r->unknown));
-					NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_unknown, 0, -1));
-				}
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case PAC_TYPE_LOGON_INFO:
-				NDR_CHECK(ndr_push_PAC_LOGON_INFO_CTR(ndr, NDR_BUFFERS, &r->logon_info));
-			break;
-
-			case PAC_TYPE_SRV_CHECKSUM:
-			break;
-
-			case PAC_TYPE_KDC_CHECKSUM:
-			break;
-
-			case PAC_TYPE_LOGON_NAME:
-			break;
-
-			case PAC_TYPE_UNKNOWN_12:
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_PAC_INFO(struct ndr_pull *ndr, int ndr_flags, union PAC_INFO *r)
-{
-	int level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		switch (level) {
-			case PAC_TYPE_LOGON_INFO: {
-				NDR_CHECK(ndr_pull_PAC_LOGON_INFO_CTR(ndr, NDR_SCALARS, &r->logon_info));
-			break; }
-
-			case PAC_TYPE_SRV_CHECKSUM: {
-				NDR_CHECK(ndr_pull_PAC_SIGNATURE_DATA(ndr, NDR_SCALARS, &r->srv_cksum));
-			break; }
-
-			case PAC_TYPE_KDC_CHECKSUM: {
-				NDR_CHECK(ndr_pull_PAC_SIGNATURE_DATA(ndr, NDR_SCALARS, &r->kdc_cksum));
-			break; }
-
-			case PAC_TYPE_LOGON_NAME: {
-				NDR_CHECK(ndr_pull_PAC_LOGON_NAME(ndr, NDR_SCALARS, &r->logon_name));
-			break; }
-
-			case PAC_TYPE_UNKNOWN_12: {
-				{
-					struct ndr_pull *_ndr_unknown;
-					NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_unknown, 0, -1));
-					NDR_CHECK(ndr_pull_DATA_BLOB_REM(_ndr_unknown, NDR_SCALARS, &r->unknown));
-					NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_unknown, 0, -1));
-				}
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case PAC_TYPE_LOGON_INFO:
-				NDR_CHECK(ndr_pull_PAC_LOGON_INFO_CTR(ndr, NDR_BUFFERS, &r->logon_info));
-			break;
-
-			case PAC_TYPE_SRV_CHECKSUM:
-			break;
-
-			case PAC_TYPE_KDC_CHECKSUM:
-			break;
-
-			case PAC_TYPE_LOGON_NAME:
-			break;
-
-			case PAC_TYPE_UNKNOWN_12:
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PAC_INFO(struct ndr_print *ndr, const char *name, const union PAC_INFO *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "PAC_INFO");
-	switch (level) {
-		case PAC_TYPE_LOGON_INFO:
-			ndr_print_PAC_LOGON_INFO_CTR(ndr, "logon_info", &r->logon_info);
-		break;
-
-		case PAC_TYPE_SRV_CHECKSUM:
-			ndr_print_PAC_SIGNATURE_DATA(ndr, "srv_cksum", &r->srv_cksum);
-		break;
-
-		case PAC_TYPE_KDC_CHECKSUM:
-			ndr_print_PAC_SIGNATURE_DATA(ndr, "kdc_cksum", &r->kdc_cksum);
-		break;
-
-		case PAC_TYPE_LOGON_NAME:
-			ndr_print_PAC_LOGON_NAME(ndr, "logon_name", &r->logon_name);
-		break;
-
-		case PAC_TYPE_UNKNOWN_12:
-			ndr_print_DATA_BLOB_REM(ndr, "unknown", &r->unknown);
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-_PUBLIC_ size_t ndr_size_PAC_INFO(const union PAC_INFO *r, uint32_t level, int flags)
-{
-	return ndr_size_union(r, flags, level, (ndr_push_flags_fn_t)ndr_push_PAC_INFO);
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_PAC_DATA(struct ndr_push *ndr, int ndr_flags, const struct PAC_DATA *r)
-{
-	uint32_t cntr_buffers_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_buffers));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->version));
-		for (cntr_buffers_0 = 0; cntr_buffers_0 < r->num_buffers; cntr_buffers_0++) {
-			NDR_CHECK(ndr_push_PAC_BUFFER(ndr, NDR_SCALARS, &r->buffers[cntr_buffers_0]));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		for (cntr_buffers_0 = 0; cntr_buffers_0 < r->num_buffers; cntr_buffers_0++) {
-			NDR_CHECK(ndr_push_PAC_BUFFER(ndr, NDR_BUFFERS, &r->buffers[cntr_buffers_0]));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_PAC_DATA(struct ndr_pull *ndr, int ndr_flags, struct PAC_DATA *r)
-{
-	uint32_t cntr_buffers_0;
-	TALLOC_CTX *_mem_save_buffers_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_buffers));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->version));
-		NDR_PULL_ALLOC_N(ndr, r->buffers, r->num_buffers);
-		_mem_save_buffers_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->buffers, 0);
-		for (cntr_buffers_0 = 0; cntr_buffers_0 < r->num_buffers; cntr_buffers_0++) {
-			NDR_CHECK(ndr_pull_PAC_BUFFER(ndr, NDR_SCALARS, &r->buffers[cntr_buffers_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_buffers_0, 0);
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		_mem_save_buffers_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->buffers, 0);
-		for (cntr_buffers_0 = 0; cntr_buffers_0 < r->num_buffers; cntr_buffers_0++) {
-			NDR_CHECK(ndr_pull_PAC_BUFFER(ndr, NDR_BUFFERS, &r->buffers[cntr_buffers_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_buffers_0, 0);
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PAC_DATA(struct ndr_print *ndr, const char *name, const struct PAC_DATA *r)
-{
-	uint32_t cntr_buffers_0;
-	ndr_print_struct(ndr, name, "PAC_DATA");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "num_buffers", r->num_buffers);
-	ndr_print_uint32(ndr, "version", r->version);
-	ndr->print(ndr, "%s: ARRAY(%d)", "buffers", r->num_buffers);
-	ndr->depth++;
-	for (cntr_buffers_0=0;cntr_buffers_0<r->num_buffers;cntr_buffers_0++) {
-		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_buffers_0) != -1) {
-			ndr_print_PAC_BUFFER(ndr, "buffers", &r->buffers[cntr_buffers_0]);
-			free(idx_0);
-		}
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_PAC_BUFFER_RAW(struct ndr_push *ndr, int ndr_flags, const struct PAC_BUFFER_RAW *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_PAC_TYPE(ndr, NDR_SCALARS, r->type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->ndr_size));
-		{
-			uint32_t _flags_save_DATA_BLOB_REM = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN8);
-			NDR_CHECK(ndr_push_relative_ptr1(ndr, r->info));
-			ndr->flags = _flags_save_DATA_BLOB_REM;
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		{
-			uint32_t _flags_save_DATA_BLOB_REM = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN8);
-			if (r->info) {
-				NDR_CHECK(ndr_push_relative_ptr2(ndr, r->info));
-				{
-					struct ndr_push *_ndr_info;
-					NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_info, 0, NDR_ROUND(r->ndr_size, 8)));
-					NDR_CHECK(ndr_push_DATA_BLOB_REM(_ndr_info, NDR_SCALARS, r->info));
-					NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_info, 0, NDR_ROUND(r->ndr_size, 8)));
-				}
-			}
-			ndr->flags = _flags_save_DATA_BLOB_REM;
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_PAC_BUFFER_RAW(struct ndr_pull *ndr, int ndr_flags, struct PAC_BUFFER_RAW *r)
-{
-	uint32_t _ptr_info;
-	TALLOC_CTX *_mem_save_info_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_PAC_TYPE(ndr, NDR_SCALARS, &r->type));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->ndr_size));
-		{
-			uint32_t _flags_save_DATA_BLOB_REM = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN8);
-			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-			if (_ptr_info) {
-				NDR_PULL_ALLOC(ndr, r->info);
-				NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->info, _ptr_info));
-			} else {
-				r->info = NULL;
-			}
-			ndr->flags = _flags_save_DATA_BLOB_REM;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->_pad));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		{
-			uint32_t _flags_save_DATA_BLOB_REM = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN8);
-			if (r->info) {
-				uint32_t _relative_save_offset;
-				_relative_save_offset = ndr->offset;
-				NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->info));
-				_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-				NDR_PULL_SET_MEM_CTX(ndr, r->info, 0);
-				{
-					struct ndr_pull *_ndr_info;
-					NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_info, 0, NDR_ROUND(r->ndr_size, 8)));
-					NDR_CHECK(ndr_pull_DATA_BLOB_REM(_ndr_info, NDR_SCALARS, r->info));
-					NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_info, 0, NDR_ROUND(r->ndr_size, 8)));
-				}
-				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
-				ndr->offset = _relative_save_offset;
-			}
-			ndr->flags = _flags_save_DATA_BLOB_REM;
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PAC_BUFFER_RAW(struct ndr_print *ndr, const char *name, const struct PAC_BUFFER_RAW *r)
-{
-	ndr_print_struct(ndr, name, "PAC_BUFFER_RAW");
-	ndr->depth++;
-	ndr_print_PAC_TYPE(ndr, "type", r->type);
-	ndr_print_uint32(ndr, "ndr_size", r->ndr_size);
-	ndr_print_ptr(ndr, "info", r->info);
-	ndr->depth++;
-	if (r->info) {
-		ndr_print_DATA_BLOB_REM(ndr, "info", r->info);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "_pad", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?0:r->_pad);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_PAC_DATA_RAW(struct ndr_push *ndr, int ndr_flags, const struct PAC_DATA_RAW *r)
-{
-	uint32_t cntr_buffers_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_buffers));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->version));
-		for (cntr_buffers_0 = 0; cntr_buffers_0 < r->num_buffers; cntr_buffers_0++) {
-			NDR_CHECK(ndr_push_PAC_BUFFER_RAW(ndr, NDR_SCALARS, &r->buffers[cntr_buffers_0]));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		for (cntr_buffers_0 = 0; cntr_buffers_0 < r->num_buffers; cntr_buffers_0++) {
-			NDR_CHECK(ndr_push_PAC_BUFFER_RAW(ndr, NDR_BUFFERS, &r->buffers[cntr_buffers_0]));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_PAC_DATA_RAW(struct ndr_pull *ndr, int ndr_flags, struct PAC_DATA_RAW *r)
-{
-	uint32_t cntr_buffers_0;
-	TALLOC_CTX *_mem_save_buffers_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_buffers));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->version));
-		NDR_PULL_ALLOC_N(ndr, r->buffers, r->num_buffers);
-		_mem_save_buffers_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->buffers, 0);
-		for (cntr_buffers_0 = 0; cntr_buffers_0 < r->num_buffers; cntr_buffers_0++) {
-			NDR_CHECK(ndr_pull_PAC_BUFFER_RAW(ndr, NDR_SCALARS, &r->buffers[cntr_buffers_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_buffers_0, 0);
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		_mem_save_buffers_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->buffers, 0);
-		for (cntr_buffers_0 = 0; cntr_buffers_0 < r->num_buffers; cntr_buffers_0++) {
-			NDR_CHECK(ndr_pull_PAC_BUFFER_RAW(ndr, NDR_BUFFERS, &r->buffers[cntr_buffers_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_buffers_0, 0);
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PAC_DATA_RAW(struct ndr_print *ndr, const char *name, const struct PAC_DATA_RAW *r)
-{
-	uint32_t cntr_buffers_0;
-	ndr_print_struct(ndr, name, "PAC_DATA_RAW");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "num_buffers", r->num_buffers);
-	ndr_print_uint32(ndr, "version", r->version);
-	ndr->print(ndr, "%s: ARRAY(%d)", "buffers", r->num_buffers);
-	ndr->depth++;
-	for (cntr_buffers_0=0;cntr_buffers_0<r->num_buffers;cntr_buffers_0++) {
-		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_buffers_0) != -1) {
-			ndr_print_PAC_BUFFER_RAW(ndr, "buffers", &r->buffers[cntr_buffers_0]);
-			free(idx_0);
-		}
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_netsamlogoncache_entry(struct ndr_push *ndr, int ndr_flags, const struct netsamlogoncache_entry *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_time_t(ndr, NDR_SCALARS, r->timestamp));
-		NDR_CHECK(ndr_push_netr_SamInfo3(ndr, NDR_SCALARS, &r->info3));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_netr_SamInfo3(ndr, NDR_BUFFERS, &r->info3));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_netsamlogoncache_entry(struct ndr_pull *ndr, int ndr_flags, struct netsamlogoncache_entry *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_time_t(ndr, NDR_SCALARS, &r->timestamp));
-		NDR_CHECK(ndr_pull_netr_SamInfo3(ndr, NDR_SCALARS, &r->info3));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_netr_SamInfo3(ndr, NDR_BUFFERS, &r->info3));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netsamlogoncache_entry(struct ndr_print *ndr, const char *name, const struct netsamlogoncache_entry *r)
-{
-	ndr_print_struct(ndr, name, "netsamlogoncache_entry");
-	ndr->depth++;
-	ndr_print_time_t(ndr, "timestamp", r->timestamp);
-	ndr_print_netr_SamInfo3(ndr, "info3", &r->info3);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_decode_pac(struct ndr_push *ndr, int flags, const struct decode_pac *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_PAC_DATA(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.pac));
-	}
-	if (flags & NDR_OUT) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_decode_pac(struct ndr_pull *ndr, int flags, struct decode_pac *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_PAC_DATA(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.pac));
-	}
-	if (flags & NDR_OUT) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_decode_pac(struct ndr_print *ndr, const char *name, int flags, const struct decode_pac *r)
-{
-	ndr_print_struct(ndr, name, "decode_pac");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "decode_pac");
-		ndr->depth++;
-		ndr_print_PAC_DATA(ndr, "pac", &r->in.pac);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "decode_pac");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_decode_pac_raw(struct ndr_push *ndr, int flags, const struct decode_pac_raw *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_PAC_DATA_RAW(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.pac));
-	}
-	if (flags & NDR_OUT) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_decode_pac_raw(struct ndr_pull *ndr, int flags, struct decode_pac_raw *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_PAC_DATA_RAW(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.pac));
-	}
-	if (flags & NDR_OUT) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_decode_pac_raw(struct ndr_print *ndr, const char *name, int flags, const struct decode_pac_raw *r)
-{
-	ndr_print_struct(ndr, name, "decode_pac_raw");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "decode_pac_raw");
-		ndr->depth++;
-		ndr_print_PAC_DATA_RAW(ndr, "pac", &r->in.pac);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "decode_pac_raw");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_decode_login_info(struct ndr_push *ndr, int flags, const struct decode_login_info *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_PAC_LOGON_INFO(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.logon_info));
-	}
-	if (flags & NDR_OUT) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_decode_login_info(struct ndr_pull *ndr, int flags, struct decode_login_info *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_PAC_LOGON_INFO(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.logon_info));
-	}
-	if (flags & NDR_OUT) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_decode_login_info(struct ndr_print *ndr, const char *name, int flags, const struct decode_login_info *r)
-{
-	ndr_print_struct(ndr, name, "decode_login_info");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "decode_login_info");
-		ndr->depth++;
-		ndr_print_PAC_LOGON_INFO(ndr, "logon_info", &r->in.logon_info);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "decode_login_info");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static const struct ndr_interface_call krb5pac_calls[] = {
-	{
-		"decode_pac",
-		sizeof(struct decode_pac),
-		(ndr_push_flags_fn_t) ndr_push_decode_pac,
-		(ndr_pull_flags_fn_t) ndr_pull_decode_pac,
-		(ndr_print_function_t) ndr_print_decode_pac,
-		false,
-	},
-	{
-		"decode_pac_raw",
-		sizeof(struct decode_pac_raw),
-		(ndr_push_flags_fn_t) ndr_push_decode_pac_raw,
-		(ndr_pull_flags_fn_t) ndr_pull_decode_pac_raw,
-		(ndr_print_function_t) ndr_print_decode_pac_raw,
-		false,
-	},
-	{
-		"decode_login_info",
-		sizeof(struct decode_login_info),
-		(ndr_push_flags_fn_t) ndr_push_decode_login_info,
-		(ndr_pull_flags_fn_t) ndr_pull_decode_login_info,
-		(ndr_print_function_t) ndr_print_decode_login_info,
-		false,
-	},
-	{ NULL, 0, NULL, NULL, NULL, false }
-};
-
-static const char * const krb5pac_endpoint_strings[] = {
-	"ncacn_np:[\\pipe\\krb5pac]", 
-};
-
-static const struct ndr_interface_string_array krb5pac_endpoints = {
-	.count	= 1,
-	.names	= krb5pac_endpoint_strings
-};
-
-static const char * const krb5pac_authservice_strings[] = {
-	"host", 
-};
-
-static const struct ndr_interface_string_array krb5pac_authservices = {
-	.count	= 1,
-	.names	= krb5pac_authservice_strings
-};
-
-
-const struct ndr_interface_table ndr_table_krb5pac = {
-	.name		= "krb5pac",
-	.syntax_id	= {
-		{0x12345778,0x1234,0xabcd,{0x00,0x00},{0x00,0x00,0x00,0x00}},
-		NDR_KRB5PAC_VERSION
-	},
-	.helpstring	= NDR_KRB5PAC_HELPSTRING,
-	.num_calls	= 3,
-	.calls		= krb5pac_calls,
-	.endpoints	= &krb5pac_endpoints,
-	.authservices	= &krb5pac_authservices
-};
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_krb5pac.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_krb5pac.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_krb5pac.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,55 +0,0 @@
-/* header auto-generated by pidl */
-
-#include "librpc/ndr/libndr.h"
-#include "librpc/gen_ndr/krb5pac.h"
-
-#ifndef _HEADER_NDR_krb5pac
-#define _HEADER_NDR_krb5pac
-
-#define NDR_KRB5PAC_UUID "12345778-1234-abcd-0000-00000000"
-#define NDR_KRB5PAC_VERSION 0.0
-#define NDR_KRB5PAC_NAME "krb5pac"
-#define NDR_KRB5PAC_HELPSTRING "Active Directory KRB5 PAC"
-extern const struct ndr_interface_table ndr_table_krb5pac;
-#define NDR_DECODE_PAC (0x00)
-
-#define NDR_DECODE_PAC_RAW (0x01)
-
-#define NDR_DECODE_LOGIN_INFO (0x02)
-
-#define NDR_KRB5PAC_CALL_COUNT (3)
-void ndr_print_PAC_LOGON_NAME(struct ndr_print *ndr, const char *name, const struct PAC_LOGON_NAME *r);
-enum ndr_err_code ndr_push_PAC_SIGNATURE_DATA(struct ndr_push *ndr, int ndr_flags, const struct PAC_SIGNATURE_DATA *r);
-enum ndr_err_code ndr_pull_PAC_SIGNATURE_DATA(struct ndr_pull *ndr, int ndr_flags, struct PAC_SIGNATURE_DATA *r);
-void ndr_print_PAC_SIGNATURE_DATA(struct ndr_print *ndr, const char *name, const struct PAC_SIGNATURE_DATA *r);
-void ndr_print_PAC_LOGON_INFO(struct ndr_print *ndr, const char *name, const struct PAC_LOGON_INFO *r);
-enum ndr_err_code ndr_push_PAC_LOGON_INFO_CTR(struct ndr_push *ndr, int ndr_flags, const struct PAC_LOGON_INFO_CTR *r);
-enum ndr_err_code ndr_pull_PAC_LOGON_INFO_CTR(struct ndr_pull *ndr, int ndr_flags, struct PAC_LOGON_INFO_CTR *r);
-void ndr_print_PAC_LOGON_INFO_CTR(struct ndr_print *ndr, const char *name, const struct PAC_LOGON_INFO_CTR *r);
-enum ndr_err_code ndr_push_PAC_TYPE(struct ndr_push *ndr, int ndr_flags, enum PAC_TYPE r);
-enum ndr_err_code ndr_pull_PAC_TYPE(struct ndr_pull *ndr, int ndr_flags, enum PAC_TYPE *r);
-void ndr_print_PAC_TYPE(struct ndr_print *ndr, const char *name, enum PAC_TYPE r);
-void ndr_print_DATA_BLOB_REM(struct ndr_print *ndr, const char *name, const struct DATA_BLOB_REM *r);
-enum ndr_err_code ndr_push_PAC_INFO(struct ndr_push *ndr, int ndr_flags, const union PAC_INFO *r);
-enum ndr_err_code ndr_pull_PAC_INFO(struct ndr_pull *ndr, int ndr_flags, union PAC_INFO *r);
-void ndr_print_PAC_INFO(struct ndr_print *ndr, const char *name, const union PAC_INFO *r);
-size_t ndr_size_PAC_INFO(const union PAC_INFO *r, uint32_t level, int flags);
-enum ndr_err_code ndr_push_PAC_BUFFER(struct ndr_push *ndr, int ndr_flags, const struct PAC_BUFFER *r);
-enum ndr_err_code ndr_pull_PAC_BUFFER(struct ndr_pull *ndr, int ndr_flags, struct PAC_BUFFER *r);
-void ndr_print_PAC_BUFFER(struct ndr_print *ndr, const char *name, const struct PAC_BUFFER *r);
-enum ndr_err_code ndr_push_PAC_DATA(struct ndr_push *ndr, int ndr_flags, const struct PAC_DATA *r);
-enum ndr_err_code ndr_pull_PAC_DATA(struct ndr_pull *ndr, int ndr_flags, struct PAC_DATA *r);
-void ndr_print_PAC_DATA(struct ndr_print *ndr, const char *name, const struct PAC_DATA *r);
-enum ndr_err_code ndr_push_PAC_BUFFER_RAW(struct ndr_push *ndr, int ndr_flags, const struct PAC_BUFFER_RAW *r);
-enum ndr_err_code ndr_pull_PAC_BUFFER_RAW(struct ndr_pull *ndr, int ndr_flags, struct PAC_BUFFER_RAW *r);
-void ndr_print_PAC_BUFFER_RAW(struct ndr_print *ndr, const char *name, const struct PAC_BUFFER_RAW *r);
-enum ndr_err_code ndr_push_PAC_DATA_RAW(struct ndr_push *ndr, int ndr_flags, const struct PAC_DATA_RAW *r);
-enum ndr_err_code ndr_pull_PAC_DATA_RAW(struct ndr_pull *ndr, int ndr_flags, struct PAC_DATA_RAW *r);
-void ndr_print_PAC_DATA_RAW(struct ndr_print *ndr, const char *name, const struct PAC_DATA_RAW *r);
-enum ndr_err_code ndr_push_netsamlogoncache_entry(struct ndr_push *ndr, int ndr_flags, const struct netsamlogoncache_entry *r);
-enum ndr_err_code ndr_pull_netsamlogoncache_entry(struct ndr_pull *ndr, int ndr_flags, struct netsamlogoncache_entry *r);
-void ndr_print_netsamlogoncache_entry(struct ndr_print *ndr, const char *name, const struct netsamlogoncache_entry *r);
-void ndr_print_decode_pac(struct ndr_print *ndr, const char *name, int flags, const struct decode_pac *r);
-void ndr_print_decode_pac_raw(struct ndr_print *ndr, const char *name, int flags, const struct decode_pac_raw *r);
-void ndr_print_decode_login_info(struct ndr_print *ndr, const char *name, int flags, const struct decode_login_info *r);
-#endif /* _HEADER_NDR_krb5pac */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_libnet_join.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_libnet_join.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_libnet_join.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,116 +0,0 @@
-/* parser auto-generated by pidl */
-
-#include "includes.h"
-#include "librpc/gen_ndr/ndr_libnet_join.h"
-
-#include "librpc/gen_ndr/ndr_wkssvc.h"
-#include "librpc/gen_ndr/ndr_security.h"
-_PUBLIC_ void ndr_print_libnet_JoinCtx(struct ndr_print *ndr, const char *name, int flags, const struct libnet_JoinCtx *r)
-{
-	ndr_print_struct(ndr, name, "libnet_JoinCtx");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "libnet_JoinCtx");
-		ndr->depth++;
-		ndr_print_string(ndr, "dc_name", r->in.dc_name);
-		ndr_print_string(ndr, "machine_name", r->in.machine_name);
-		ndr_print_ptr(ndr, "domain_name", r->in.domain_name);
-		ndr->depth++;
-		ndr_print_string(ndr, "domain_name", r->in.domain_name);
-		ndr->depth--;
-		ndr_print_string(ndr, "account_ou", r->in.account_ou);
-		ndr_print_string(ndr, "admin_account", r->in.admin_account);
-#ifdef DEBUG_PASSWORD
-		ndr_print_string(ndr, "admin_password", r->in.admin_password);
-		ndr_print_string(ndr, "machine_password", r->in.machine_password);
-#else
-		ndr_print_ptr(ndr, "admin_password", r->in.admin_password);
-		ndr_print_ptr(ndr, "machine_password", r->in.machine_password);
-#endif
-		ndr_print_wkssvc_joinflags(ndr, "join_flags", r->in.join_flags);
-		ndr_print_string(ndr, "os_version", r->in.os_version);
-		ndr_print_string(ndr, "os_name", r->in.os_name);
-		ndr_print_uint8(ndr, "create_upn", r->in.create_upn);
-		ndr_print_string(ndr, "upn", r->in.upn);
-		ndr_print_uint8(ndr, "modify_config", r->in.modify_config);
-		ndr_print_ptr(ndr, "ads", r->in.ads);
-		ndr->depth++;
-		ndr_print_ads_struct(ndr, "ads", r->in.ads);
-		ndr->depth--;
-		ndr_print_uint8(ndr, "debug", r->in.debug);
-		ndr_print_netr_SchannelType(ndr, "secure_channel_type", r->in.secure_channel_type);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "libnet_JoinCtx");
-		ndr->depth++;
-		ndr_print_string(ndr, "account_name", r->out.account_name);
-		ndr_print_string(ndr, "netbios_domain_name", r->out.netbios_domain_name);
-		ndr_print_string(ndr, "dns_domain_name", r->out.dns_domain_name);
-		ndr_print_string(ndr, "dn", r->out.dn);
-		ndr_print_ptr(ndr, "domain_sid", r->out.domain_sid);
-		ndr->depth++;
-		ndr_print_dom_sid(ndr, "domain_sid", r->out.domain_sid);
-		ndr->depth--;
-		ndr_print_uint8(ndr, "modified_config", r->out.modified_config);
-		ndr_print_string(ndr, "error_string", r->out.error_string);
-		ndr_print_uint8(ndr, "domain_is_ad", r->out.domain_is_ad);
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ void ndr_print_libnet_UnjoinCtx(struct ndr_print *ndr, const char *name, int flags, const struct libnet_UnjoinCtx *r)
-{
-	ndr_print_struct(ndr, name, "libnet_UnjoinCtx");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "libnet_UnjoinCtx");
-		ndr->depth++;
-		ndr_print_string(ndr, "dc_name", r->in.dc_name);
-		ndr_print_string(ndr, "machine_name", r->in.machine_name);
-		ndr_print_string(ndr, "domain_name", r->in.domain_name);
-		ndr_print_string(ndr, "account_ou", r->in.account_ou);
-		ndr_print_string(ndr, "admin_account", r->in.admin_account);
-#ifdef DEBUG_PASSWORD
-		ndr_print_string(ndr, "admin_password", r->in.admin_password);
-		ndr_print_string(ndr, "machine_password", r->in.machine_password);
-#else
-		ndr_print_ptr(ndr, "admin_password", r->in.admin_password);
-		ndr_print_ptr(ndr, "machine_password", r->in.machine_password);
-#endif
-		ndr_print_wkssvc_joinflags(ndr, "unjoin_flags", r->in.unjoin_flags);
-		ndr_print_uint8(ndr, "modify_config", r->in.modify_config);
-		ndr_print_ptr(ndr, "domain_sid", r->in.domain_sid);
-		ndr->depth++;
-		ndr_print_dom_sid(ndr, "domain_sid", r->in.domain_sid);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "ads", r->in.ads);
-		ndr->depth++;
-		ndr_print_ads_struct(ndr, "ads", r->in.ads);
-		ndr->depth--;
-		ndr_print_uint8(ndr, "debug", r->in.debug);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "libnet_UnjoinCtx");
-		ndr->depth++;
-		ndr_print_string(ndr, "netbios_domain_name", r->out.netbios_domain_name);
-		ndr_print_string(ndr, "dns_domain_name", r->out.dns_domain_name);
-		ndr_print_uint8(ndr, "modified_config", r->out.modified_config);
-		ndr_print_string(ndr, "error_string", r->out.error_string);
-		ndr_print_uint8(ndr, "disabled_machine_account", r->out.disabled_machine_account);
-		ndr_print_uint8(ndr, "deleted_machine_account", r->out.deleted_machine_account);
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_libnet_join.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_libnet_join.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_libnet_join.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,16 +0,0 @@
-/* header auto-generated by pidl */
-
-#include "librpc/ndr/libndr.h"
-#include "librpc/gen_ndr/libnet_join.h"
-
-#ifndef _HEADER_NDR_libnetjoin
-#define _HEADER_NDR_libnetjoin
-
-#define NDR_LIBNETJOIN_CALL_COUNT (0)
-enum ndr_err_code ndr_push_libnet_JoinCtx(struct ndr_push *ndr, int flags, const struct libnet_JoinCtx *r);
-enum ndr_err_code ndr_pull_libnet_JoinCtx(struct ndr_pull *ndr, int flags, struct libnet_JoinCtx *r);
-void ndr_print_libnet_JoinCtx(struct ndr_print *ndr, const char *name, int flags, const struct libnet_JoinCtx *r);
-enum ndr_err_code ndr_push_libnet_UnjoinCtx(struct ndr_push *ndr, int flags, const struct libnet_UnjoinCtx *r);
-enum ndr_err_code ndr_pull_libnet_UnjoinCtx(struct ndr_pull *ndr, int flags, struct libnet_UnjoinCtx *r);
-void ndr_print_libnet_UnjoinCtx(struct ndr_print *ndr, const char *name, int flags, const struct libnet_UnjoinCtx *r);
-#endif /* _HEADER_NDR_libnetjoin */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_libnetapi.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_libnetapi.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_libnetapi.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,881 +0,0 @@
-/* parser auto-generated by pidl */
-
-#include "includes.h"
-#include "librpc/gen_ndr/ndr_libnetapi.h"
-
-_PUBLIC_ enum ndr_err_code ndr_push_NET_API_STATUS(struct ndr_push *ndr, int ndr_flags, enum NET_API_STATUS r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_NET_API_STATUS(struct ndr_pull *ndr, int ndr_flags, enum NET_API_STATUS *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_NET_API_STATUS(struct ndr_print *ndr, const char *name, enum NET_API_STATUS r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case NERR_Success: val = "NERR_Success"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_SERVER_INFO_1005(struct ndr_push *ndr, int ndr_flags, const struct SERVER_INFO_1005 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->sv1005_comment));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_SERVER_INFO_1005(struct ndr_pull *ndr, int ndr_flags, struct SERVER_INFO_1005 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->sv1005_comment));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_SERVER_INFO_1005(struct ndr_print *ndr, const char *name, const struct SERVER_INFO_1005 *r)
-{
-	ndr_print_struct(ndr, name, "SERVER_INFO_1005");
-	ndr->depth++;
-	ndr_print_string(ndr, "sv1005_comment", r->sv1005_comment);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_DOMAIN_CONTROLLER_INFO(struct ndr_push *ndr, int ndr_flags, const struct DOMAIN_CONTROLLER_INFO *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->domain_controller_name));
-		NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->domain_controller_address));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->domain_controller_address_type));
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->domain_guid));
-		NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->domain_name));
-		NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->dns_forest_name));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->flags));
-		NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->dc_site_name));
-		NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->client_site_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_DOMAIN_CONTROLLER_INFO(struct ndr_pull *ndr, int ndr_flags, struct DOMAIN_CONTROLLER_INFO *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->domain_controller_name));
-		NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->domain_controller_address));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->domain_controller_address_type));
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->domain_guid));
-		NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->domain_name));
-		NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->dns_forest_name));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->flags));
-		NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->dc_site_name));
-		NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->client_site_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_DOMAIN_CONTROLLER_INFO(struct ndr_print *ndr, const char *name, const struct DOMAIN_CONTROLLER_INFO *r)
-{
-	ndr_print_struct(ndr, name, "DOMAIN_CONTROLLER_INFO");
-	ndr->depth++;
-	ndr_print_string(ndr, "domain_controller_name", r->domain_controller_name);
-	ndr_print_string(ndr, "domain_controller_address", r->domain_controller_address);
-	ndr_print_uint32(ndr, "domain_controller_address_type", r->domain_controller_address_type);
-	ndr_print_GUID(ndr, "domain_guid", &r->domain_guid);
-	ndr_print_string(ndr, "domain_name", r->domain_name);
-	ndr_print_string(ndr, "dns_forest_name", r->dns_forest_name);
-	ndr_print_uint32(ndr, "flags", r->flags);
-	ndr_print_string(ndr, "dc_site_name", r->dc_site_name);
-	ndr_print_string(ndr, "client_site_name", r->client_site_name);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_USER_INFO_0(struct ndr_push *ndr, int ndr_flags, const struct USER_INFO_0 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->usri0_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_USER_INFO_0(struct ndr_pull *ndr, int ndr_flags, struct USER_INFO_0 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->usri0_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_USER_INFO_0(struct ndr_print *ndr, const char *name, const struct USER_INFO_0 *r)
-{
-	ndr_print_struct(ndr, name, "USER_INFO_0");
-	ndr->depth++;
-	ndr_print_string(ndr, "usri0_name", r->usri0_name);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_USER_INFO_1(struct ndr_push *ndr, int ndr_flags, const struct USER_INFO_1 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->usri1_name));
-		NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->usri1_password));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->usri1_password_age));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->usri1_priv));
-		NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->usri1_home_dir));
-		NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->usri1_comment));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->usri1_flags));
-		NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->usri1_script_path));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_USER_INFO_1(struct ndr_pull *ndr, int ndr_flags, struct USER_INFO_1 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->usri1_name));
-		NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->usri1_password));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->usri1_password_age));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->usri1_priv));
-		NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->usri1_home_dir));
-		NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->usri1_comment));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->usri1_flags));
-		NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->usri1_script_path));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_USER_INFO_1(struct ndr_print *ndr, const char *name, const struct USER_INFO_1 *r)
-{
-	ndr_print_struct(ndr, name, "USER_INFO_1");
-	ndr->depth++;
-	ndr_print_string(ndr, "usri1_name", r->usri1_name);
-	ndr_print_string(ndr, "usri1_password", r->usri1_password);
-	ndr_print_uint32(ndr, "usri1_password_age", r->usri1_password_age);
-	ndr_print_uint32(ndr, "usri1_priv", r->usri1_priv);
-	ndr_print_string(ndr, "usri1_home_dir", r->usri1_home_dir);
-	ndr_print_string(ndr, "usri1_comment", r->usri1_comment);
-	ndr_print_uint32(ndr, "usri1_flags", r->usri1_flags);
-	ndr_print_string(ndr, "usri1_script_path", r->usri1_script_path);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_NET_DISPLAY_USER(struct ndr_push *ndr, int ndr_flags, const struct NET_DISPLAY_USER *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->usri1_name));
-		NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->usri1_comment));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->usri1_flags));
-		NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->usri1_full_name));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->usri1_user_id));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->usri1_next_index));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_NET_DISPLAY_USER(struct ndr_pull *ndr, int ndr_flags, struct NET_DISPLAY_USER *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->usri1_name));
-		NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->usri1_comment));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->usri1_flags));
-		NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->usri1_full_name));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->usri1_user_id));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->usri1_next_index));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_NET_DISPLAY_USER(struct ndr_print *ndr, const char *name, const struct NET_DISPLAY_USER *r)
-{
-	ndr_print_struct(ndr, name, "NET_DISPLAY_USER");
-	ndr->depth++;
-	ndr_print_string(ndr, "usri1_name", r->usri1_name);
-	ndr_print_string(ndr, "usri1_comment", r->usri1_comment);
-	ndr_print_uint32(ndr, "usri1_flags", r->usri1_flags);
-	ndr_print_string(ndr, "usri1_full_name", r->usri1_full_name);
-	ndr_print_uint32(ndr, "usri1_user_id", r->usri1_user_id);
-	ndr_print_uint32(ndr, "usri1_next_index", r->usri1_next_index);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_NET_DISPLAY_MACHINE(struct ndr_push *ndr, int ndr_flags, const struct NET_DISPLAY_MACHINE *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->usri2_name));
-		NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->usri2_comment));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->usri2_flags));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->usri2_user_id));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->usri2_next_index));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_NET_DISPLAY_MACHINE(struct ndr_pull *ndr, int ndr_flags, struct NET_DISPLAY_MACHINE *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->usri2_name));
-		NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->usri2_comment));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->usri2_flags));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->usri2_user_id));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->usri2_next_index));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_NET_DISPLAY_MACHINE(struct ndr_print *ndr, const char *name, const struct NET_DISPLAY_MACHINE *r)
-{
-	ndr_print_struct(ndr, name, "NET_DISPLAY_MACHINE");
-	ndr->depth++;
-	ndr_print_string(ndr, "usri2_name", r->usri2_name);
-	ndr_print_string(ndr, "usri2_comment", r->usri2_comment);
-	ndr_print_uint32(ndr, "usri2_flags", r->usri2_flags);
-	ndr_print_uint32(ndr, "usri2_user_id", r->usri2_user_id);
-	ndr_print_uint32(ndr, "usri2_next_index", r->usri2_next_index);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_NET_DISPLAY_GROUP(struct ndr_push *ndr, int ndr_flags, const struct NET_DISPLAY_GROUP *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->grpi3_name));
-		NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->grpi3_comment));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->grpi3_group_id));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->grpi3_attributes));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->grpi3_next_index));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_NET_DISPLAY_GROUP(struct ndr_pull *ndr, int ndr_flags, struct NET_DISPLAY_GROUP *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->grpi3_name));
-		NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->grpi3_comment));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->grpi3_group_id));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->grpi3_attributes));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->grpi3_next_index));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_NET_DISPLAY_GROUP(struct ndr_print *ndr, const char *name, const struct NET_DISPLAY_GROUP *r)
-{
-	ndr_print_struct(ndr, name, "NET_DISPLAY_GROUP");
-	ndr->depth++;
-	ndr_print_string(ndr, "grpi3_name", r->grpi3_name);
-	ndr_print_string(ndr, "grpi3_comment", r->grpi3_comment);
-	ndr_print_uint32(ndr, "grpi3_group_id", r->grpi3_group_id);
-	ndr_print_uint32(ndr, "grpi3_attributes", r->grpi3_attributes);
-	ndr_print_uint32(ndr, "grpi3_next_index", r->grpi3_next_index);
-	ndr->depth--;
-}
-
-_PUBLIC_ void ndr_print_NetJoinDomain(struct ndr_print *ndr, const char *name, int flags, const struct NetJoinDomain *r)
-{
-	ndr_print_struct(ndr, name, "NetJoinDomain");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "NetJoinDomain");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server", r->in.server);
-		ndr->depth++;
-		if (r->in.server) {
-			ndr_print_string(ndr, "server", r->in.server);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "domain", r->in.domain);
-		ndr->depth++;
-		ndr_print_string(ndr, "domain", r->in.domain);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "account_ou", r->in.account_ou);
-		ndr->depth++;
-		if (r->in.account_ou) {
-			ndr_print_string(ndr, "account_ou", r->in.account_ou);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "account", r->in.account);
-		ndr->depth++;
-		if (r->in.account) {
-			ndr_print_string(ndr, "account", r->in.account);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "password", r->in.password);
-		ndr->depth++;
-		if (r->in.password) {
-			ndr_print_string(ndr, "password", r->in.password);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "join_flags", r->in.join_flags);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "NetJoinDomain");
-		ndr->depth++;
-		ndr_print_NET_API_STATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ void ndr_print_NetUnjoinDomain(struct ndr_print *ndr, const char *name, int flags, const struct NetUnjoinDomain *r)
-{
-	ndr_print_struct(ndr, name, "NetUnjoinDomain");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "NetUnjoinDomain");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "account", r->in.account);
-		ndr->depth++;
-		if (r->in.account) {
-			ndr_print_string(ndr, "account", r->in.account);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "password", r->in.password);
-		ndr->depth++;
-		if (r->in.password) {
-			ndr_print_string(ndr, "password", r->in.password);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "unjoin_flags", r->in.unjoin_flags);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "NetUnjoinDomain");
-		ndr->depth++;
-		ndr_print_NET_API_STATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ void ndr_print_NetGetJoinInformation(struct ndr_print *ndr, const char *name, int flags, const struct NetGetJoinInformation *r)
-{
-	ndr_print_struct(ndr, name, "NetGetJoinInformation");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "NetGetJoinInformation");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "NetGetJoinInformation");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "name_buffer", r->out.name_buffer);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "name_buffer", *r->out.name_buffer);
-		ndr->depth++;
-		if (*r->out.name_buffer) {
-			ndr_print_string(ndr, "name_buffer", *r->out.name_buffer);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "name_type", r->out.name_type);
-		ndr->depth++;
-		ndr_print_uint16(ndr, "name_type", *r->out.name_type);
-		ndr->depth--;
-		ndr_print_NET_API_STATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ void ndr_print_NetGetJoinableOUs(struct ndr_print *ndr, const char *name, int flags, const struct NetGetJoinableOUs *r)
-{
-	ndr_print_struct(ndr, name, "NetGetJoinableOUs");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "NetGetJoinableOUs");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "domain", r->in.domain);
-		ndr->depth++;
-		ndr_print_string(ndr, "domain", r->in.domain);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "account", r->in.account);
-		ndr->depth++;
-		if (r->in.account) {
-			ndr_print_string(ndr, "account", r->in.account);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "password", r->in.password);
-		ndr->depth++;
-		if (r->in.password) {
-			ndr_print_string(ndr, "password", r->in.password);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "NetGetJoinableOUs");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "ou_count", r->out.ou_count);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "ou_count", *r->out.ou_count);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "ous", r->out.ous);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "ous", *r->out.ous);
-		ndr->depth++;
-		if (*r->out.ous) {
-			ndr_print_ptr(ndr, "ous", **r->out.ous);
-			ndr->depth++;
-			if (**r->out.ous) {
-				ndr_print_string(ndr, "ous", **r->out.ous);
-			}
-			ndr->depth--;
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NET_API_STATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ void ndr_print_NetServerGetInfo(struct ndr_print *ndr, const char *name, int flags, const struct NetServerGetInfo *r)
-{
-	ndr_print_struct(ndr, name, "NetServerGetInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "NetServerGetInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "NetServerGetInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "buffer", r->out.buffer);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "buffer", *r->out.buffer);
-		ndr->depth++;
-		if (*r->out.buffer) {
-			ndr_print_uint8(ndr, "buffer", **r->out.buffer);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NET_API_STATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ void ndr_print_NetServerSetInfo(struct ndr_print *ndr, const char *name, int flags, const struct NetServerSetInfo *r)
-{
-	ndr_print_struct(ndr, name, "NetServerSetInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "NetServerSetInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "buffer", r->in.buffer);
-		ndr->depth++;
-		ndr_print_uint8(ndr, "buffer", *r->in.buffer);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "NetServerSetInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "parm_error", r->out.parm_error);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "parm_error", *r->out.parm_error);
-		ndr->depth--;
-		ndr_print_NET_API_STATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ void ndr_print_NetGetDCName(struct ndr_print *ndr, const char *name, int flags, const struct NetGetDCName *r)
-{
-	ndr_print_struct(ndr, name, "NetGetDCName");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "NetGetDCName");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "domain_name", r->in.domain_name);
-		ndr->depth++;
-		if (r->in.domain_name) {
-			ndr_print_string(ndr, "domain_name", r->in.domain_name);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "NetGetDCName");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "buffer", r->out.buffer);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "buffer", *r->out.buffer);
-		ndr->depth++;
-		if (*r->out.buffer) {
-			ndr_print_uint8(ndr, "buffer", **r->out.buffer);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NET_API_STATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ void ndr_print_NetGetAnyDCName(struct ndr_print *ndr, const char *name, int flags, const struct NetGetAnyDCName *r)
-{
-	ndr_print_struct(ndr, name, "NetGetAnyDCName");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "NetGetAnyDCName");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "domain_name", r->in.domain_name);
-		ndr->depth++;
-		if (r->in.domain_name) {
-			ndr_print_string(ndr, "domain_name", r->in.domain_name);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "NetGetAnyDCName");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "buffer", r->out.buffer);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "buffer", *r->out.buffer);
-		ndr->depth++;
-		if (*r->out.buffer) {
-			ndr_print_uint8(ndr, "buffer", **r->out.buffer);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NET_API_STATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ void ndr_print_DsGetDcName(struct ndr_print *ndr, const char *name, int flags, const struct DsGetDcName *r)
-{
-	ndr_print_struct(ndr, name, "DsGetDcName");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "DsGetDcName");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "domain_name", r->in.domain_name);
-		ndr->depth++;
-		ndr_print_string(ndr, "domain_name", r->in.domain_name);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "domain_guid", r->in.domain_guid);
-		ndr->depth++;
-		if (r->in.domain_guid) {
-			ndr_print_GUID(ndr, "domain_guid", r->in.domain_guid);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "site_name", r->in.site_name);
-		ndr->depth++;
-		if (r->in.site_name) {
-			ndr_print_string(ndr, "site_name", r->in.site_name);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "flags", r->in.flags);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "DsGetDcName");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "dc_info", r->out.dc_info);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "dc_info", *r->out.dc_info);
-		ndr->depth++;
-		if (*r->out.dc_info) {
-			ndr_print_DOMAIN_CONTROLLER_INFO(ndr, "dc_info", *r->out.dc_info);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NET_API_STATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ void ndr_print_NetUserAdd(struct ndr_print *ndr, const char *name, int flags, const struct NetUserAdd *r)
-{
-	ndr_print_struct(ndr, name, "NetUserAdd");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "NetUserAdd");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "buffer", r->in.buffer);
-		ndr->depth++;
-		ndr_print_uint8(ndr, "buffer", *r->in.buffer);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "NetUserAdd");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "parm_error", r->out.parm_error);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "parm_error", *r->out.parm_error);
-		ndr->depth--;
-		ndr_print_NET_API_STATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ void ndr_print_NetUserDel(struct ndr_print *ndr, const char *name, int flags, const struct NetUserDel *r)
-{
-	ndr_print_struct(ndr, name, "NetUserDel");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "NetUserDel");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "user_name", r->in.user_name);
-		ndr->depth++;
-		ndr_print_string(ndr, "user_name", r->in.user_name);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "NetUserDel");
-		ndr->depth++;
-		ndr_print_NET_API_STATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ void ndr_print_NetUserEnum(struct ndr_print *ndr, const char *name, int flags, const struct NetUserEnum *r)
-{
-	ndr_print_struct(ndr, name, "NetUserEnum");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "NetUserEnum");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr_print_uint32(ndr, "filter", r->in.filter);
-		ndr_print_uint32(ndr, "prefmaxlen", r->in.prefmaxlen);
-		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "NetUserEnum");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "buffer", r->out.buffer);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "buffer", *r->out.buffer);
-		ndr->depth++;
-		if (*r->out.buffer) {
-			ndr_print_uint8(ndr, "buffer", **r->out.buffer);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "entries_read", r->out.entries_read);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "entries_read", *r->out.entries_read);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "total_entries", r->out.total_entries);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "total_entries", *r->out.total_entries);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
-		ndr->depth--;
-		ndr_print_NET_API_STATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ void ndr_print_NetQueryDisplayInformation(struct ndr_print *ndr, const char *name, int flags, const struct NetQueryDisplayInformation *r)
-{
-	ndr_print_struct(ndr, name, "NetQueryDisplayInformation");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "NetQueryDisplayInformation");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr_print_uint32(ndr, "idx", r->in.idx);
-		ndr_print_uint32(ndr, "entries_requested", r->in.entries_requested);
-		ndr_print_uint32(ndr, "prefmaxlen", r->in.prefmaxlen);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "NetQueryDisplayInformation");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "entries_read", r->out.entries_read);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "entries_read", *r->out.entries_read);
-		ndr->depth--;
-		ndr_print_NET_API_STATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_libnetapi.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_libnetapi.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_libnetapi.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,99 +0,0 @@
-/* header auto-generated by pidl */
-
-#include "librpc/ndr/libndr.h"
-#include "librpc/gen_ndr/libnetapi.h"
-
-#ifndef _HEADER_NDR_libnetapi
-#define _HEADER_NDR_libnetapi
-
-#define NDR_NETJOINDOMAIN (0x00)
-
-#define NDR_NETUNJOINDOMAIN (0x01)
-
-#define NDR_NETGETJOININFORMATION (0x02)
-
-#define NDR_NETGETJOINABLEOUS (0x03)
-
-#define NDR_NETSERVERGETINFO (0x04)
-
-#define NDR_NETSERVERSETINFO (0x05)
-
-#define NDR_NETGETDCNAME (0x06)
-
-#define NDR_NETGETANYDCNAME (0x07)
-
-#define NDR_DSGETDCNAME (0x08)
-
-#define NDR_NETUSERADD (0x09)
-
-#define NDR_NETUSERDEL (0x0a)
-
-#define NDR_NETUSERENUM (0x0b)
-
-#define NDR_NETQUERYDISPLAYINFORMATION (0x0c)
-
-#define NDR_LIBNETAPI_CALL_COUNT (13)
-enum ndr_err_code ndr_push_NET_API_STATUS(struct ndr_push *ndr, int ndr_flags, enum NET_API_STATUS r);
-enum ndr_err_code ndr_pull_NET_API_STATUS(struct ndr_pull *ndr, int ndr_flags, enum NET_API_STATUS *r);
-void ndr_print_NET_API_STATUS(struct ndr_print *ndr, const char *name, enum NET_API_STATUS r);
-enum ndr_err_code ndr_push_SERVER_INFO_1005(struct ndr_push *ndr, int ndr_flags, const struct SERVER_INFO_1005 *r);
-enum ndr_err_code ndr_pull_SERVER_INFO_1005(struct ndr_pull *ndr, int ndr_flags, struct SERVER_INFO_1005 *r);
-void ndr_print_SERVER_INFO_1005(struct ndr_print *ndr, const char *name, const struct SERVER_INFO_1005 *r);
-enum ndr_err_code ndr_push_DOMAIN_CONTROLLER_INFO(struct ndr_push *ndr, int ndr_flags, const struct DOMAIN_CONTROLLER_INFO *r);
-enum ndr_err_code ndr_pull_DOMAIN_CONTROLLER_INFO(struct ndr_pull *ndr, int ndr_flags, struct DOMAIN_CONTROLLER_INFO *r);
-void ndr_print_DOMAIN_CONTROLLER_INFO(struct ndr_print *ndr, const char *name, const struct DOMAIN_CONTROLLER_INFO *r);
-enum ndr_err_code ndr_push_USER_INFO_0(struct ndr_push *ndr, int ndr_flags, const struct USER_INFO_0 *r);
-enum ndr_err_code ndr_pull_USER_INFO_0(struct ndr_pull *ndr, int ndr_flags, struct USER_INFO_0 *r);
-void ndr_print_USER_INFO_0(struct ndr_print *ndr, const char *name, const struct USER_INFO_0 *r);
-enum ndr_err_code ndr_push_USER_INFO_1(struct ndr_push *ndr, int ndr_flags, const struct USER_INFO_1 *r);
-enum ndr_err_code ndr_pull_USER_INFO_1(struct ndr_pull *ndr, int ndr_flags, struct USER_INFO_1 *r);
-void ndr_print_USER_INFO_1(struct ndr_print *ndr, const char *name, const struct USER_INFO_1 *r);
-enum ndr_err_code ndr_push_NET_DISPLAY_USER(struct ndr_push *ndr, int ndr_flags, const struct NET_DISPLAY_USER *r);
-enum ndr_err_code ndr_pull_NET_DISPLAY_USER(struct ndr_pull *ndr, int ndr_flags, struct NET_DISPLAY_USER *r);
-void ndr_print_NET_DISPLAY_USER(struct ndr_print *ndr, const char *name, const struct NET_DISPLAY_USER *r);
-enum ndr_err_code ndr_push_NET_DISPLAY_MACHINE(struct ndr_push *ndr, int ndr_flags, const struct NET_DISPLAY_MACHINE *r);
-enum ndr_err_code ndr_pull_NET_DISPLAY_MACHINE(struct ndr_pull *ndr, int ndr_flags, struct NET_DISPLAY_MACHINE *r);
-void ndr_print_NET_DISPLAY_MACHINE(struct ndr_print *ndr, const char *name, const struct NET_DISPLAY_MACHINE *r);
-enum ndr_err_code ndr_push_NET_DISPLAY_GROUP(struct ndr_push *ndr, int ndr_flags, const struct NET_DISPLAY_GROUP *r);
-enum ndr_err_code ndr_pull_NET_DISPLAY_GROUP(struct ndr_pull *ndr, int ndr_flags, struct NET_DISPLAY_GROUP *r);
-void ndr_print_NET_DISPLAY_GROUP(struct ndr_print *ndr, const char *name, const struct NET_DISPLAY_GROUP *r);
-enum ndr_err_code ndr_push_NetJoinDomain(struct ndr_push *ndr, int flags, const struct NetJoinDomain *r);
-enum ndr_err_code ndr_pull_NetJoinDomain(struct ndr_pull *ndr, int flags, struct NetJoinDomain *r);
-void ndr_print_NetJoinDomain(struct ndr_print *ndr, const char *name, int flags, const struct NetJoinDomain *r);
-enum ndr_err_code ndr_push_NetUnjoinDomain(struct ndr_push *ndr, int flags, const struct NetUnjoinDomain *r);
-enum ndr_err_code ndr_pull_NetUnjoinDomain(struct ndr_pull *ndr, int flags, struct NetUnjoinDomain *r);
-void ndr_print_NetUnjoinDomain(struct ndr_print *ndr, const char *name, int flags, const struct NetUnjoinDomain *r);
-enum ndr_err_code ndr_push_NetGetJoinInformation(struct ndr_push *ndr, int flags, const struct NetGetJoinInformation *r);
-enum ndr_err_code ndr_pull_NetGetJoinInformation(struct ndr_pull *ndr, int flags, struct NetGetJoinInformation *r);
-void ndr_print_NetGetJoinInformation(struct ndr_print *ndr, const char *name, int flags, const struct NetGetJoinInformation *r);
-enum ndr_err_code ndr_push_NetGetJoinableOUs(struct ndr_push *ndr, int flags, const struct NetGetJoinableOUs *r);
-enum ndr_err_code ndr_pull_NetGetJoinableOUs(struct ndr_pull *ndr, int flags, struct NetGetJoinableOUs *r);
-void ndr_print_NetGetJoinableOUs(struct ndr_print *ndr, const char *name, int flags, const struct NetGetJoinableOUs *r);
-enum ndr_err_code ndr_push_NetServerGetInfo(struct ndr_push *ndr, int flags, const struct NetServerGetInfo *r);
-enum ndr_err_code ndr_pull_NetServerGetInfo(struct ndr_pull *ndr, int flags, struct NetServerGetInfo *r);
-void ndr_print_NetServerGetInfo(struct ndr_print *ndr, const char *name, int flags, const struct NetServerGetInfo *r);
-enum ndr_err_code ndr_push_NetServerSetInfo(struct ndr_push *ndr, int flags, const struct NetServerSetInfo *r);
-enum ndr_err_code ndr_pull_NetServerSetInfo(struct ndr_pull *ndr, int flags, struct NetServerSetInfo *r);
-void ndr_print_NetServerSetInfo(struct ndr_print *ndr, const char *name, int flags, const struct NetServerSetInfo *r);
-enum ndr_err_code ndr_push_NetGetDCName(struct ndr_push *ndr, int flags, const struct NetGetDCName *r);
-enum ndr_err_code ndr_pull_NetGetDCName(struct ndr_pull *ndr, int flags, struct NetGetDCName *r);
-void ndr_print_NetGetDCName(struct ndr_print *ndr, const char *name, int flags, const struct NetGetDCName *r);
-enum ndr_err_code ndr_push_NetGetAnyDCName(struct ndr_push *ndr, int flags, const struct NetGetAnyDCName *r);
-enum ndr_err_code ndr_pull_NetGetAnyDCName(struct ndr_pull *ndr, int flags, struct NetGetAnyDCName *r);
-void ndr_print_NetGetAnyDCName(struct ndr_print *ndr, const char *name, int flags, const struct NetGetAnyDCName *r);
-enum ndr_err_code ndr_push_DsGetDcName(struct ndr_push *ndr, int flags, const struct DsGetDcName *r);
-enum ndr_err_code ndr_pull_DsGetDcName(struct ndr_pull *ndr, int flags, struct DsGetDcName *r);
-void ndr_print_DsGetDcName(struct ndr_print *ndr, const char *name, int flags, const struct DsGetDcName *r);
-enum ndr_err_code ndr_push_NetUserAdd(struct ndr_push *ndr, int flags, const struct NetUserAdd *r);
-enum ndr_err_code ndr_pull_NetUserAdd(struct ndr_pull *ndr, int flags, struct NetUserAdd *r);
-void ndr_print_NetUserAdd(struct ndr_print *ndr, const char *name, int flags, const struct NetUserAdd *r);
-enum ndr_err_code ndr_push_NetUserDel(struct ndr_push *ndr, int flags, const struct NetUserDel *r);
-enum ndr_err_code ndr_pull_NetUserDel(struct ndr_pull *ndr, int flags, struct NetUserDel *r);
-void ndr_print_NetUserDel(struct ndr_print *ndr, const char *name, int flags, const struct NetUserDel *r);
-enum ndr_err_code ndr_push_NetUserEnum(struct ndr_push *ndr, int flags, const struct NetUserEnum *r);
-enum ndr_err_code ndr_pull_NetUserEnum(struct ndr_pull *ndr, int flags, struct NetUserEnum *r);
-void ndr_print_NetUserEnum(struct ndr_print *ndr, const char *name, int flags, const struct NetUserEnum *r);
-enum ndr_err_code ndr_push_NetQueryDisplayInformation(struct ndr_push *ndr, int flags, const struct NetQueryDisplayInformation *r);
-enum ndr_err_code ndr_pull_NetQueryDisplayInformation(struct ndr_pull *ndr, int flags, struct NetQueryDisplayInformation *r);
-void ndr_print_NetQueryDisplayInformation(struct ndr_print *ndr, const char *name, int flags, const struct NetQueryDisplayInformation *r);
-#endif /* _HEADER_NDR_libnetapi */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_lsa.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_lsa.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_lsa.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,12547 +0,0 @@
-/* parser auto-generated by pidl */
-
-#include "includes.h"
-#include "librpc/gen_ndr/ndr_lsa.h"
-
-#include "librpc/gen_ndr/ndr_security.h"
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_String(struct ndr_push *ndr, int ndr_flags, const struct lsa_String *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, 2 * strlen_m(r->string)));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, 2 * strlen_m(r->string)));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->string));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->string) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 2 * strlen_m(r->string) / 2));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 2 * strlen_m(r->string) / 2));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->string, 2 * strlen_m(r->string) / 2, sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_String(struct ndr_pull *ndr, int ndr_flags, struct lsa_String *r)
-{
-	uint32_t _ptr_string;
-	TALLOC_CTX *_mem_save_string_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->length));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_string));
-		if (_ptr_string) {
-			NDR_PULL_ALLOC(ndr, r->string);
-		} else {
-			r->string = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->string) {
-			_mem_save_string_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->string, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->string));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->string));
-			if (ndr_get_array_length(ndr, &r->string) > ndr_get_array_size(ndr, &r->string)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->string), ndr_get_array_length(ndr, &r->string));
-			}
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->string, ndr_get_array_length(ndr, &r->string), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_string_0, 0);
-		}
-		if (r->string) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->string, r->size / 2));
-		}
-		if (r->string) {
-			NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->string, r->length / 2));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_String(struct ndr_print *ndr, const char *name, const struct lsa_String *r)
-{
-	ndr_print_struct(ndr, name, "lsa_String");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "length", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?2 * strlen_m(r->string):r->length);
-	ndr_print_uint16(ndr, "size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?2 * strlen_m(r->string):r->size);
-	ndr_print_ptr(ndr, "string", r->string);
-	ndr->depth++;
-	if (r->string) {
-		ndr_print_string(ndr, "string", r->string);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_StringLarge(struct ndr_push *ndr, int ndr_flags, const struct lsa_StringLarge *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, 2 * strlen_m(r->string)));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, 2 * strlen_m_term(r->string)));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->string));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->string) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 2 * strlen_m_term(r->string) / 2));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 2 * strlen_m(r->string) / 2));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->string, 2 * strlen_m(r->string) / 2, sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_StringLarge(struct ndr_pull *ndr, int ndr_flags, struct lsa_StringLarge *r)
-{
-	uint32_t _ptr_string;
-	TALLOC_CTX *_mem_save_string_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->length));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_string));
-		if (_ptr_string) {
-			NDR_PULL_ALLOC(ndr, r->string);
-		} else {
-			r->string = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->string) {
-			_mem_save_string_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->string, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->string));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->string));
-			if (ndr_get_array_length(ndr, &r->string) > ndr_get_array_size(ndr, &r->string)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->string), ndr_get_array_length(ndr, &r->string));
-			}
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->string, ndr_get_array_length(ndr, &r->string), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_string_0, 0);
-		}
-		if (r->string) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->string, r->size / 2));
-		}
-		if (r->string) {
-			NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->string, r->length / 2));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_StringLarge(struct ndr_print *ndr, const char *name, const struct lsa_StringLarge *r)
-{
-	ndr_print_struct(ndr, name, "lsa_StringLarge");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "length", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?2 * strlen_m(r->string):r->length);
-	ndr_print_uint16(ndr, "size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?2 * strlen_m_term(r->string):r->size);
-	ndr_print_ptr(ndr, "string", r->string);
-	ndr->depth++;
-	if (r->string) {
-		ndr_print_string(ndr, "string", r->string);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_Strings(struct ndr_push *ndr, int ndr_flags, const struct lsa_Strings *r)
-{
-	uint32_t cntr_names_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->names));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->names) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_names_1 = 0; cntr_names_1 < r->count; cntr_names_1++) {
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->names[cntr_names_1]));
-			}
-			for (cntr_names_1 = 0; cntr_names_1 < r->count; cntr_names_1++) {
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->names[cntr_names_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_Strings(struct ndr_pull *ndr, int ndr_flags, struct lsa_Strings *r)
-{
-	uint32_t _ptr_names;
-	uint32_t cntr_names_1;
-	TALLOC_CTX *_mem_save_names_0;
-	TALLOC_CTX *_mem_save_names_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_names));
-		if (_ptr_names) {
-			NDR_PULL_ALLOC(ndr, r->names);
-		} else {
-			r->names = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->names) {
-			_mem_save_names_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->names, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->names));
-			NDR_PULL_ALLOC_N(ndr, r->names, ndr_get_array_size(ndr, &r->names));
-			_mem_save_names_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->names, 0);
-			for (cntr_names_1 = 0; cntr_names_1 < r->count; cntr_names_1++) {
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->names[cntr_names_1]));
-			}
-			for (cntr_names_1 = 0; cntr_names_1 < r->count; cntr_names_1++) {
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->names[cntr_names_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_names_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_names_0, 0);
-		}
-		if (r->names) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->names, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_Strings(struct ndr_print *ndr, const char *name, const struct lsa_Strings *r)
-{
-	uint32_t cntr_names_1;
-	ndr_print_struct(ndr, name, "lsa_Strings");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "names", r->names);
-	ndr->depth++;
-	if (r->names) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "names", r->count);
-		ndr->depth++;
-		for (cntr_names_1=0;cntr_names_1<r->count;cntr_names_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_names_1) != -1) {
-				ndr_print_lsa_String(ndr, "names", &r->names[cntr_names_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_AsciiString(struct ndr_push *ndr, int ndr_flags, const struct lsa_AsciiString *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, strlen_m(r->string)));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, strlen_m(r->string)));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->string));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->string) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, strlen_m(r->string)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, strlen_m(r->string)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->string, strlen_m(r->string), sizeof(uint8_t), CH_DOS));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_AsciiString(struct ndr_pull *ndr, int ndr_flags, struct lsa_AsciiString *r)
-{
-	uint32_t _ptr_string;
-	TALLOC_CTX *_mem_save_string_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->length));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_string));
-		if (_ptr_string) {
-			NDR_PULL_ALLOC(ndr, r->string);
-		} else {
-			r->string = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->string) {
-			_mem_save_string_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->string, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->string));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->string));
-			if (ndr_get_array_length(ndr, &r->string) > ndr_get_array_size(ndr, &r->string)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->string), ndr_get_array_length(ndr, &r->string));
-			}
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->string, ndr_get_array_length(ndr, &r->string), sizeof(uint8_t), CH_DOS));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_string_0, 0);
-		}
-		if (r->string) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->string, r->size));
-		}
-		if (r->string) {
-			NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->string, r->length));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_AsciiString(struct ndr_print *ndr, const char *name, const struct lsa_AsciiString *r)
-{
-	ndr_print_struct(ndr, name, "lsa_AsciiString");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "length", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?strlen_m(r->string):r->length);
-	ndr_print_uint16(ndr, "size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?strlen_m(r->string):r->size);
-	ndr_print_ptr(ndr, "string", r->string);
-	ndr->depth++;
-	if (r->string) {
-		ndr_print_string(ndr, "string", r->string);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_AsciiStringLarge(struct ndr_push *ndr, int ndr_flags, const struct lsa_AsciiStringLarge *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, strlen_m(r->string)));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, strlen_m_term(r->string)));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->string));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->string) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, strlen_m_term(r->string)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, strlen_m(r->string)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->string, strlen_m(r->string), sizeof(uint8_t), CH_DOS));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_AsciiStringLarge(struct ndr_pull *ndr, int ndr_flags, struct lsa_AsciiStringLarge *r)
-{
-	uint32_t _ptr_string;
-	TALLOC_CTX *_mem_save_string_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->length));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_string));
-		if (_ptr_string) {
-			NDR_PULL_ALLOC(ndr, r->string);
-		} else {
-			r->string = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->string) {
-			_mem_save_string_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->string, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->string));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->string));
-			if (ndr_get_array_length(ndr, &r->string) > ndr_get_array_size(ndr, &r->string)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->string), ndr_get_array_length(ndr, &r->string));
-			}
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->string, ndr_get_array_length(ndr, &r->string), sizeof(uint8_t), CH_DOS));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_string_0, 0);
-		}
-		if (r->string) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->string, r->size));
-		}
-		if (r->string) {
-			NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->string, r->length));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_AsciiStringLarge(struct ndr_print *ndr, const char *name, const struct lsa_AsciiStringLarge *r)
-{
-	ndr_print_struct(ndr, name, "lsa_AsciiStringLarge");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "length", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?strlen_m(r->string):r->length);
-	ndr_print_uint16(ndr, "size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?strlen_m_term(r->string):r->size);
-	ndr_print_ptr(ndr, "string", r->string);
-	ndr->depth++;
-	if (r->string) {
-		ndr_print_string(ndr, "string", r->string);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_BinaryString(struct ndr_push *ndr, int ndr_flags, const struct lsa_BinaryString *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->length));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->size));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->size / 2));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->length / 2));
-			for (cntr_array_1 = 0; cntr_array_1 < r->length / 2; cntr_array_1++) {
-				NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_BinaryString(struct ndr_pull *ndr, int ndr_flags, struct lsa_BinaryString *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->length));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->array));
-			if (ndr_get_array_length(ndr, &r->array) > ndr_get_array_size(ndr, &r->array)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->array), ndr_get_array_length(ndr, &r->array));
-			}
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->length / 2; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->size / 2));
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->array, r->length / 2));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_BinaryString(struct ndr_print *ndr, const char *name, const struct lsa_BinaryString *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "lsa_BinaryString");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "length", r->length);
-	ndr_print_uint16(ndr, "size", r->size);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->length / 2);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->length / 2;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_uint16(ndr, "array", r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_LUID(struct ndr_push *ndr, int ndr_flags, const struct lsa_LUID *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->low));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->high));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_LUID(struct ndr_pull *ndr, int ndr_flags, struct lsa_LUID *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->low));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->high));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_LUID(struct ndr_print *ndr, const char *name, const struct lsa_LUID *r)
-{
-	ndr_print_struct(ndr, name, "lsa_LUID");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "low", r->low);
-	ndr_print_uint32(ndr, "high", r->high);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_PrivEntry(struct ndr_push *ndr, int ndr_flags, const struct lsa_PrivEntry *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->name));
-		NDR_CHECK(ndr_push_lsa_LUID(ndr, NDR_SCALARS, &r->luid));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_PrivEntry(struct ndr_pull *ndr, int ndr_flags, struct lsa_PrivEntry *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->name));
-		NDR_CHECK(ndr_pull_lsa_LUID(ndr, NDR_SCALARS, &r->luid));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_PrivEntry(struct ndr_print *ndr, const char *name, const struct lsa_PrivEntry *r)
-{
-	ndr_print_struct(ndr, name, "lsa_PrivEntry");
-	ndr->depth++;
-	ndr_print_lsa_StringLarge(ndr, "name", &r->name);
-	ndr_print_lsa_LUID(ndr, "luid", &r->luid);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_PrivArray(struct ndr_push *ndr, int ndr_flags, const struct lsa_PrivArray *r)
-{
-	uint32_t cntr_privs_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->privs));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->privs) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_privs_1 = 0; cntr_privs_1 < r->count; cntr_privs_1++) {
-				NDR_CHECK(ndr_push_lsa_PrivEntry(ndr, NDR_SCALARS, &r->privs[cntr_privs_1]));
-			}
-			for (cntr_privs_1 = 0; cntr_privs_1 < r->count; cntr_privs_1++) {
-				NDR_CHECK(ndr_push_lsa_PrivEntry(ndr, NDR_BUFFERS, &r->privs[cntr_privs_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_PrivArray(struct ndr_pull *ndr, int ndr_flags, struct lsa_PrivArray *r)
-{
-	uint32_t _ptr_privs;
-	uint32_t cntr_privs_1;
-	TALLOC_CTX *_mem_save_privs_0;
-	TALLOC_CTX *_mem_save_privs_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_privs));
-		if (_ptr_privs) {
-			NDR_PULL_ALLOC(ndr, r->privs);
-		} else {
-			r->privs = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->privs) {
-			_mem_save_privs_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->privs, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->privs));
-			NDR_PULL_ALLOC_N(ndr, r->privs, ndr_get_array_size(ndr, &r->privs));
-			_mem_save_privs_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->privs, 0);
-			for (cntr_privs_1 = 0; cntr_privs_1 < r->count; cntr_privs_1++) {
-				NDR_CHECK(ndr_pull_lsa_PrivEntry(ndr, NDR_SCALARS, &r->privs[cntr_privs_1]));
-			}
-			for (cntr_privs_1 = 0; cntr_privs_1 < r->count; cntr_privs_1++) {
-				NDR_CHECK(ndr_pull_lsa_PrivEntry(ndr, NDR_BUFFERS, &r->privs[cntr_privs_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_privs_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_privs_0, 0);
-		}
-		if (r->privs) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->privs, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_PrivArray(struct ndr_print *ndr, const char *name, const struct lsa_PrivArray *r)
-{
-	uint32_t cntr_privs_1;
-	ndr_print_struct(ndr, name, "lsa_PrivArray");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "privs", r->privs);
-	ndr->depth++;
-	if (r->privs) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "privs", r->count);
-		ndr->depth++;
-		for (cntr_privs_1=0;cntr_privs_1<r->count;cntr_privs_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_privs_1) != -1) {
-				ndr_print_lsa_PrivEntry(ndr, "privs", &r->privs[cntr_privs_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_QosInfo(struct ndr_push *ndr, int ndr_flags, const struct lsa_QosInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->len));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->impersonation_level));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->context_mode));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->effective_only));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_QosInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_QosInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->len));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->impersonation_level));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->context_mode));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->effective_only));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_QosInfo(struct ndr_print *ndr, const char *name, const struct lsa_QosInfo *r)
-{
-	ndr_print_struct(ndr, name, "lsa_QosInfo");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "len", r->len);
-	ndr_print_uint16(ndr, "impersonation_level", r->impersonation_level);
-	ndr_print_uint8(ndr, "context_mode", r->context_mode);
-	ndr_print_uint8(ndr, "effective_only", r->effective_only);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_ObjectAttribute(struct ndr_push *ndr, int ndr_flags, const struct lsa_ObjectAttribute *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->len));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->root_dir));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->object_name));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->attributes));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sec_desc));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sec_qos));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->root_dir) {
-			NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, *r->root_dir));
-		}
-		if (r->object_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->object_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->object_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->object_name, ndr_charset_length(r->object_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->sec_desc) {
-			NDR_CHECK(ndr_push_security_descriptor(ndr, NDR_SCALARS|NDR_BUFFERS, r->sec_desc));
-		}
-		if (r->sec_qos) {
-			NDR_CHECK(ndr_push_lsa_QosInfo(ndr, NDR_SCALARS, r->sec_qos));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_ObjectAttribute(struct ndr_pull *ndr, int ndr_flags, struct lsa_ObjectAttribute *r)
-{
-	uint32_t _ptr_root_dir;
-	TALLOC_CTX *_mem_save_root_dir_0;
-	uint32_t _ptr_object_name;
-	TALLOC_CTX *_mem_save_object_name_0;
-	uint32_t _ptr_sec_desc;
-	TALLOC_CTX *_mem_save_sec_desc_0;
-	uint32_t _ptr_sec_qos;
-	TALLOC_CTX *_mem_save_sec_qos_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->len));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_root_dir));
-		if (_ptr_root_dir) {
-			NDR_PULL_ALLOC(ndr, r->root_dir);
-		} else {
-			r->root_dir = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_object_name));
-		if (_ptr_object_name) {
-			NDR_PULL_ALLOC(ndr, r->object_name);
-		} else {
-			r->object_name = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->attributes));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sec_desc));
-		if (_ptr_sec_desc) {
-			NDR_PULL_ALLOC(ndr, r->sec_desc);
-		} else {
-			r->sec_desc = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sec_qos));
-		if (_ptr_sec_qos) {
-			NDR_PULL_ALLOC(ndr, r->sec_qos);
-		} else {
-			r->sec_qos = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->root_dir) {
-			_mem_save_root_dir_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->root_dir, 0);
-			NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, r->root_dir));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_root_dir_0, 0);
-		}
-		if (r->object_name) {
-			_mem_save_object_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->object_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->object_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->object_name));
-			if (ndr_get_array_length(ndr, &r->object_name) > ndr_get_array_size(ndr, &r->object_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->object_name), ndr_get_array_length(ndr, &r->object_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->object_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->object_name, ndr_get_array_length(ndr, &r->object_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_object_name_0, 0);
-		}
-		if (r->sec_desc) {
-			_mem_save_sec_desc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sec_desc, 0);
-			NDR_CHECK(ndr_pull_security_descriptor(ndr, NDR_SCALARS|NDR_BUFFERS, r->sec_desc));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sec_desc_0, 0);
-		}
-		if (r->sec_qos) {
-			_mem_save_sec_qos_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sec_qos, 0);
-			NDR_CHECK(ndr_pull_lsa_QosInfo(ndr, NDR_SCALARS, r->sec_qos));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sec_qos_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_ObjectAttribute(struct ndr_print *ndr, const char *name, const struct lsa_ObjectAttribute *r)
-{
-	ndr_print_struct(ndr, name, "lsa_ObjectAttribute");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "len", r->len);
-	ndr_print_ptr(ndr, "root_dir", r->root_dir);
-	ndr->depth++;
-	if (r->root_dir) {
-		ndr_print_uint8(ndr, "root_dir", *r->root_dir);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "object_name", r->object_name);
-	ndr->depth++;
-	if (r->object_name) {
-		ndr_print_string(ndr, "object_name", r->object_name);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "attributes", r->attributes);
-	ndr_print_ptr(ndr, "sec_desc", r->sec_desc);
-	ndr->depth++;
-	if (r->sec_desc) {
-		ndr_print_security_descriptor(ndr, "sec_desc", r->sec_desc);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "sec_qos", r->sec_qos);
-	ndr->depth++;
-	if (r->sec_qos) {
-		ndr_print_lsa_QosInfo(ndr, "sec_qos", r->sec_qos);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_PolicyAccessMask(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_PolicyAccessMask(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_PolicyAccessMask(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "LSA_POLICY_VIEW_LOCAL_INFORMATION", LSA_POLICY_VIEW_LOCAL_INFORMATION, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "LSA_POLICY_VIEW_AUDIT_INFORMATION", LSA_POLICY_VIEW_AUDIT_INFORMATION, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "LSA_POLICY_GET_PRIVATE_INFORMATION", LSA_POLICY_GET_PRIVATE_INFORMATION, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "LSA_POLICY_TRUST_ADMIN", LSA_POLICY_TRUST_ADMIN, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "LSA_POLICY_CREATE_ACCOUNT", LSA_POLICY_CREATE_ACCOUNT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "LSA_POLICY_CREATE_SECRET", LSA_POLICY_CREATE_SECRET, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "LSA_POLICY_CREATE_PRIVILEGE", LSA_POLICY_CREATE_PRIVILEGE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "LSA_POLICY_SET_DEFAULT_QUOTA_LIMITS", LSA_POLICY_SET_DEFAULT_QUOTA_LIMITS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "LSA_POLICY_SET_AUDIT_REQUIREMENTS", LSA_POLICY_SET_AUDIT_REQUIREMENTS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "LSA_POLICY_AUDIT_LOG_ADMIN", LSA_POLICY_AUDIT_LOG_ADMIN, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "LSA_POLICY_SERVER_ADMIN", LSA_POLICY_SERVER_ADMIN, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "LSA_POLICY_LOOKUP_NAMES", LSA_POLICY_LOOKUP_NAMES, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_AuditLogInfo(struct ndr_push *ndr, int ndr_flags, const struct lsa_AuditLogInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->percent_full));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->log_size));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->retention_time));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->shutdown_in_progress));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->time_to_shutdown));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->next_audit_record));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_AuditLogInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_AuditLogInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->percent_full));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->log_size));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->retention_time));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->shutdown_in_progress));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->time_to_shutdown));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->next_audit_record));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_AuditLogInfo(struct ndr_print *ndr, const char *name, const struct lsa_AuditLogInfo *r)
-{
-	ndr_print_struct(ndr, name, "lsa_AuditLogInfo");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "percent_full", r->percent_full);
-	ndr_print_uint32(ndr, "log_size", r->log_size);
-	ndr_print_NTTIME(ndr, "retention_time", r->retention_time);
-	ndr_print_uint8(ndr, "shutdown_in_progress", r->shutdown_in_progress);
-	ndr_print_NTTIME(ndr, "time_to_shutdown", r->time_to_shutdown);
-	ndr_print_uint32(ndr, "next_audit_record", r->next_audit_record);
-	ndr_print_uint32(ndr, "unknown", r->unknown);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_PolicyAuditPolicy(struct ndr_push *ndr, int ndr_flags, enum lsa_PolicyAuditPolicy r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_PolicyAuditPolicy(struct ndr_pull *ndr, int ndr_flags, enum lsa_PolicyAuditPolicy *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_PolicyAuditPolicy(struct ndr_print *ndr, const char *name, enum lsa_PolicyAuditPolicy r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case LSA_AUDIT_POLICY_NONE: val = "LSA_AUDIT_POLICY_NONE"; break;
-		case LSA_AUDIT_POLICY_SUCCESS: val = "LSA_AUDIT_POLICY_SUCCESS"; break;
-		case LSA_AUDIT_POLICY_FAILURE: val = "LSA_AUDIT_POLICY_FAILURE"; break;
-		case LSA_AUDIT_POLICY_ALL: val = "LSA_AUDIT_POLICY_ALL"; break;
-		case LSA_AUDIT_POLICY_CLEAR: val = "LSA_AUDIT_POLICY_CLEAR"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_lsa_AuditEventsInfo(struct ndr_push *ndr, int ndr_flags, const struct lsa_AuditEventsInfo *r)
-{
-	uint32_t cntr_settings_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->auditing_mode));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->settings));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->settings) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_settings_1 = 0; cntr_settings_1 < r->count; cntr_settings_1++) {
-				NDR_CHECK(ndr_push_lsa_PolicyAuditPolicy(ndr, NDR_SCALARS, r->settings[cntr_settings_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_AuditEventsInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_AuditEventsInfo *r)
-{
-	uint32_t _ptr_settings;
-	uint32_t cntr_settings_1;
-	TALLOC_CTX *_mem_save_settings_0;
-	TALLOC_CTX *_mem_save_settings_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->auditing_mode));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_settings));
-		if (_ptr_settings) {
-			NDR_PULL_ALLOC(ndr, r->settings);
-		} else {
-			r->settings = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->settings) {
-			_mem_save_settings_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->settings, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->settings));
-			NDR_PULL_ALLOC_N(ndr, r->settings, ndr_get_array_size(ndr, &r->settings));
-			_mem_save_settings_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->settings, 0);
-			for (cntr_settings_1 = 0; cntr_settings_1 < r->count; cntr_settings_1++) {
-				NDR_CHECK(ndr_pull_lsa_PolicyAuditPolicy(ndr, NDR_SCALARS, &r->settings[cntr_settings_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_settings_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_settings_0, 0);
-		}
-		if (r->settings) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->settings, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_AuditEventsInfo(struct ndr_print *ndr, const char *name, const struct lsa_AuditEventsInfo *r)
-{
-	uint32_t cntr_settings_1;
-	ndr_print_struct(ndr, name, "lsa_AuditEventsInfo");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "auditing_mode", r->auditing_mode);
-	ndr_print_ptr(ndr, "settings", r->settings);
-	ndr->depth++;
-	if (r->settings) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "settings", r->count);
-		ndr->depth++;
-		for (cntr_settings_1=0;cntr_settings_1<r->count;cntr_settings_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_settings_1) != -1) {
-				ndr_print_lsa_PolicyAuditPolicy(ndr, "settings", r->settings[cntr_settings_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_DomainInfo(struct ndr_push *ndr, int ndr_flags, const struct lsa_DomainInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->name));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sid));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->name));
-		if (r->sid) {
-			NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_DomainInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_DomainInfo *r)
-{
-	uint32_t _ptr_sid;
-	TALLOC_CTX *_mem_save_sid_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->name));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sid));
-		if (_ptr_sid) {
-			NDR_PULL_ALLOC(ndr, r->sid);
-		} else {
-			r->sid = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->name));
-		if (r->sid) {
-			_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sid, 0);
-			NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_DomainInfo(struct ndr_print *ndr, const char *name, const struct lsa_DomainInfo *r)
-{
-	ndr_print_struct(ndr, name, "lsa_DomainInfo");
-	ndr->depth++;
-	ndr_print_lsa_StringLarge(ndr, "name", &r->name);
-	ndr_print_ptr(ndr, "sid", r->sid);
-	ndr->depth++;
-	if (r->sid) {
-		ndr_print_dom_sid2(ndr, "sid", r->sid);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_PDAccountInfo(struct ndr_push *ndr, int ndr_flags, const struct lsa_PDAccountInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_PDAccountInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_PDAccountInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_PDAccountInfo(struct ndr_print *ndr, const char *name, const struct lsa_PDAccountInfo *r)
-{
-	ndr_print_struct(ndr, name, "lsa_PDAccountInfo");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "name", &r->name);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_ServerRole(struct ndr_push *ndr, int ndr_flags, const struct lsa_ServerRole *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 2));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->unknown));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->role));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_ServerRole(struct ndr_pull *ndr, int ndr_flags, struct lsa_ServerRole *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 2));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->unknown));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->role));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_ServerRole(struct ndr_print *ndr, const char *name, const struct lsa_ServerRole *r)
-{
-	ndr_print_struct(ndr, name, "lsa_ServerRole");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "unknown", r->unknown);
-	ndr_print_uint16(ndr, "role", r->role);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_ReplicaSourceInfo(struct ndr_push *ndr, int ndr_flags, const struct lsa_ReplicaSourceInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->source));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->account));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->source));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->account));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_ReplicaSourceInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_ReplicaSourceInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->source));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->account));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->source));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->account));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_ReplicaSourceInfo(struct ndr_print *ndr, const char *name, const struct lsa_ReplicaSourceInfo *r)
-{
-	ndr_print_struct(ndr, name, "lsa_ReplicaSourceInfo");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "source", &r->source);
-	ndr_print_lsa_String(ndr, "account", &r->account);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_DefaultQuotaInfo(struct ndr_push *ndr, int ndr_flags, const struct lsa_DefaultQuotaInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 8));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->paged_pool));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->non_paged_pool));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->min_wss));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->max_wss));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->pagefile));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->unknown));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_DefaultQuotaInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_DefaultQuotaInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 8));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->paged_pool));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->non_paged_pool));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->min_wss));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->max_wss));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->pagefile));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->unknown));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_DefaultQuotaInfo(struct ndr_print *ndr, const char *name, const struct lsa_DefaultQuotaInfo *r)
-{
-	ndr_print_struct(ndr, name, "lsa_DefaultQuotaInfo");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "paged_pool", r->paged_pool);
-	ndr_print_uint32(ndr, "non_paged_pool", r->non_paged_pool);
-	ndr_print_uint32(ndr, "min_wss", r->min_wss);
-	ndr_print_uint32(ndr, "max_wss", r->max_wss);
-	ndr_print_uint32(ndr, "pagefile", r->pagefile);
-	ndr_print_hyper(ndr, "unknown", r->unknown);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_ModificationInfo(struct ndr_push *ndr, int ndr_flags, const struct lsa_ModificationInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 8));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->modified_id));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->db_create_time));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_ModificationInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_ModificationInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 8));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->modified_id));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->db_create_time));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_ModificationInfo(struct ndr_print *ndr, const char *name, const struct lsa_ModificationInfo *r)
-{
-	ndr_print_struct(ndr, name, "lsa_ModificationInfo");
-	ndr->depth++;
-	ndr_print_hyper(ndr, "modified_id", r->modified_id);
-	ndr_print_NTTIME(ndr, "db_create_time", r->db_create_time);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_AuditFullSetInfo(struct ndr_push *ndr, int ndr_flags, const struct lsa_AuditFullSetInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 1));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->shutdown_on_full));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_AuditFullSetInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_AuditFullSetInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 1));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->shutdown_on_full));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_AuditFullSetInfo(struct ndr_print *ndr, const char *name, const struct lsa_AuditFullSetInfo *r)
-{
-	ndr_print_struct(ndr, name, "lsa_AuditFullSetInfo");
-	ndr->depth++;
-	ndr_print_uint8(ndr, "shutdown_on_full", r->shutdown_on_full);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_AuditFullQueryInfo(struct ndr_push *ndr, int ndr_flags, const struct lsa_AuditFullQueryInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 2));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->unknown));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->shutdown_on_full));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->log_is_full));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_AuditFullQueryInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_AuditFullQueryInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 2));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->unknown));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->shutdown_on_full));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->log_is_full));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_AuditFullQueryInfo(struct ndr_print *ndr, const char *name, const struct lsa_AuditFullQueryInfo *r)
-{
-	ndr_print_struct(ndr, name, "lsa_AuditFullQueryInfo");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "unknown", r->unknown);
-	ndr_print_uint8(ndr, "shutdown_on_full", r->shutdown_on_full);
-	ndr_print_uint8(ndr, "log_is_full", r->log_is_full);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_DnsDomainInfo(struct ndr_push *ndr, int ndr_flags, const struct lsa_DnsDomainInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->name));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->dns_domain));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->dns_forest));
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->domain_guid));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sid));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->name));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->dns_domain));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->dns_forest));
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_BUFFERS, &r->domain_guid));
-		if (r->sid) {
-			NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_DnsDomainInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_DnsDomainInfo *r)
-{
-	uint32_t _ptr_sid;
-	TALLOC_CTX *_mem_save_sid_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->name));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->dns_domain));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->dns_forest));
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->domain_guid));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sid));
-		if (_ptr_sid) {
-			NDR_PULL_ALLOC(ndr, r->sid);
-		} else {
-			r->sid = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->name));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->dns_domain));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->dns_forest));
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_BUFFERS, &r->domain_guid));
-		if (r->sid) {
-			_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sid, 0);
-			NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_DnsDomainInfo(struct ndr_print *ndr, const char *name, const struct lsa_DnsDomainInfo *r)
-{
-	ndr_print_struct(ndr, name, "lsa_DnsDomainInfo");
-	ndr->depth++;
-	ndr_print_lsa_StringLarge(ndr, "name", &r->name);
-	ndr_print_lsa_StringLarge(ndr, "dns_domain", &r->dns_domain);
-	ndr_print_lsa_StringLarge(ndr, "dns_forest", &r->dns_forest);
-	ndr_print_GUID(ndr, "domain_guid", &r->domain_guid);
-	ndr_print_ptr(ndr, "sid", r->sid);
-	ndr->depth++;
-	if (r->sid) {
-		ndr_print_dom_sid2(ndr, "sid", r->sid);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_PolicyInfo(struct ndr_push *ndr, int ndr_flags, enum lsa_PolicyInfo r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_PolicyInfo(struct ndr_pull *ndr, int ndr_flags, enum lsa_PolicyInfo *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_PolicyInfo(struct ndr_print *ndr, const char *name, enum lsa_PolicyInfo r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case LSA_POLICY_INFO_AUDIT_LOG: val = "LSA_POLICY_INFO_AUDIT_LOG"; break;
-		case LSA_POLICY_INFO_AUDIT_EVENTS: val = "LSA_POLICY_INFO_AUDIT_EVENTS"; break;
-		case LSA_POLICY_INFO_DOMAIN: val = "LSA_POLICY_INFO_DOMAIN"; break;
-		case LSA_POLICY_INFO_PD: val = "LSA_POLICY_INFO_PD"; break;
-		case LSA_POLICY_INFO_ACCOUNT_DOMAIN: val = "LSA_POLICY_INFO_ACCOUNT_DOMAIN"; break;
-		case LSA_POLICY_INFO_ROLE: val = "LSA_POLICY_INFO_ROLE"; break;
-		case LSA_POLICY_INFO_REPLICA: val = "LSA_POLICY_INFO_REPLICA"; break;
-		case LSA_POLICY_INFO_QUOTA: val = "LSA_POLICY_INFO_QUOTA"; break;
-		case LSA_POLICY_INFO_DB: val = "LSA_POLICY_INFO_DB"; break;
-		case LSA_POLICY_INFO_AUDIT_FULL_SET: val = "LSA_POLICY_INFO_AUDIT_FULL_SET"; break;
-		case LSA_POLICY_INFO_AUDIT_FULL_QUERY: val = "LSA_POLICY_INFO_AUDIT_FULL_QUERY"; break;
-		case LSA_POLICY_INFO_DNS: val = "LSA_POLICY_INFO_DNS"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_lsa_PolicyInformation(struct ndr_push *ndr, int ndr_flags, const union lsa_PolicyInformation *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case LSA_POLICY_INFO_AUDIT_LOG: {
-				NDR_CHECK(ndr_push_lsa_AuditLogInfo(ndr, NDR_SCALARS, &r->audit_log));
-			break; }
-
-			case LSA_POLICY_INFO_AUDIT_EVENTS: {
-				NDR_CHECK(ndr_push_lsa_AuditEventsInfo(ndr, NDR_SCALARS, &r->audit_events));
-			break; }
-
-			case LSA_POLICY_INFO_DOMAIN: {
-				NDR_CHECK(ndr_push_lsa_DomainInfo(ndr, NDR_SCALARS, &r->domain));
-			break; }
-
-			case LSA_POLICY_INFO_PD: {
-				NDR_CHECK(ndr_push_lsa_PDAccountInfo(ndr, NDR_SCALARS, &r->pd));
-			break; }
-
-			case LSA_POLICY_INFO_ACCOUNT_DOMAIN: {
-				NDR_CHECK(ndr_push_lsa_DomainInfo(ndr, NDR_SCALARS, &r->account_domain));
-			break; }
-
-			case LSA_POLICY_INFO_ROLE: {
-				NDR_CHECK(ndr_push_lsa_ServerRole(ndr, NDR_SCALARS, &r->role));
-			break; }
-
-			case LSA_POLICY_INFO_REPLICA: {
-				NDR_CHECK(ndr_push_lsa_ReplicaSourceInfo(ndr, NDR_SCALARS, &r->replica));
-			break; }
-
-			case LSA_POLICY_INFO_QUOTA: {
-				NDR_CHECK(ndr_push_lsa_DefaultQuotaInfo(ndr, NDR_SCALARS, &r->quota));
-			break; }
-
-			case LSA_POLICY_INFO_DB: {
-				NDR_CHECK(ndr_push_lsa_ModificationInfo(ndr, NDR_SCALARS, &r->db));
-			break; }
-
-			case LSA_POLICY_INFO_AUDIT_FULL_SET: {
-				NDR_CHECK(ndr_push_lsa_AuditFullSetInfo(ndr, NDR_SCALARS, &r->auditfullset));
-			break; }
-
-			case LSA_POLICY_INFO_AUDIT_FULL_QUERY: {
-				NDR_CHECK(ndr_push_lsa_AuditFullQueryInfo(ndr, NDR_SCALARS, &r->auditfullquery));
-			break; }
-
-			case LSA_POLICY_INFO_DNS: {
-				NDR_CHECK(ndr_push_lsa_DnsDomainInfo(ndr, NDR_SCALARS, &r->dns));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case LSA_POLICY_INFO_AUDIT_LOG:
-			break;
-
-			case LSA_POLICY_INFO_AUDIT_EVENTS:
-				NDR_CHECK(ndr_push_lsa_AuditEventsInfo(ndr, NDR_BUFFERS, &r->audit_events));
-			break;
-
-			case LSA_POLICY_INFO_DOMAIN:
-				NDR_CHECK(ndr_push_lsa_DomainInfo(ndr, NDR_BUFFERS, &r->domain));
-			break;
-
-			case LSA_POLICY_INFO_PD:
-				NDR_CHECK(ndr_push_lsa_PDAccountInfo(ndr, NDR_BUFFERS, &r->pd));
-			break;
-
-			case LSA_POLICY_INFO_ACCOUNT_DOMAIN:
-				NDR_CHECK(ndr_push_lsa_DomainInfo(ndr, NDR_BUFFERS, &r->account_domain));
-			break;
-
-			case LSA_POLICY_INFO_ROLE:
-			break;
-
-			case LSA_POLICY_INFO_REPLICA:
-				NDR_CHECK(ndr_push_lsa_ReplicaSourceInfo(ndr, NDR_BUFFERS, &r->replica));
-			break;
-
-			case LSA_POLICY_INFO_QUOTA:
-			break;
-
-			case LSA_POLICY_INFO_DB:
-			break;
-
-			case LSA_POLICY_INFO_AUDIT_FULL_SET:
-			break;
-
-			case LSA_POLICY_INFO_AUDIT_FULL_QUERY:
-			break;
-
-			case LSA_POLICY_INFO_DNS:
-				NDR_CHECK(ndr_push_lsa_DnsDomainInfo(ndr, NDR_BUFFERS, &r->dns));
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_PolicyInformation(struct ndr_pull *ndr, int ndr_flags, union lsa_PolicyInformation *r)
-{
-	int level;
-	uint16_t _level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case LSA_POLICY_INFO_AUDIT_LOG: {
-				NDR_CHECK(ndr_pull_lsa_AuditLogInfo(ndr, NDR_SCALARS, &r->audit_log));
-			break; }
-
-			case LSA_POLICY_INFO_AUDIT_EVENTS: {
-				NDR_CHECK(ndr_pull_lsa_AuditEventsInfo(ndr, NDR_SCALARS, &r->audit_events));
-			break; }
-
-			case LSA_POLICY_INFO_DOMAIN: {
-				NDR_CHECK(ndr_pull_lsa_DomainInfo(ndr, NDR_SCALARS, &r->domain));
-			break; }
-
-			case LSA_POLICY_INFO_PD: {
-				NDR_CHECK(ndr_pull_lsa_PDAccountInfo(ndr, NDR_SCALARS, &r->pd));
-			break; }
-
-			case LSA_POLICY_INFO_ACCOUNT_DOMAIN: {
-				NDR_CHECK(ndr_pull_lsa_DomainInfo(ndr, NDR_SCALARS, &r->account_domain));
-			break; }
-
-			case LSA_POLICY_INFO_ROLE: {
-				NDR_CHECK(ndr_pull_lsa_ServerRole(ndr, NDR_SCALARS, &r->role));
-			break; }
-
-			case LSA_POLICY_INFO_REPLICA: {
-				NDR_CHECK(ndr_pull_lsa_ReplicaSourceInfo(ndr, NDR_SCALARS, &r->replica));
-			break; }
-
-			case LSA_POLICY_INFO_QUOTA: {
-				NDR_CHECK(ndr_pull_lsa_DefaultQuotaInfo(ndr, NDR_SCALARS, &r->quota));
-			break; }
-
-			case LSA_POLICY_INFO_DB: {
-				NDR_CHECK(ndr_pull_lsa_ModificationInfo(ndr, NDR_SCALARS, &r->db));
-			break; }
-
-			case LSA_POLICY_INFO_AUDIT_FULL_SET: {
-				NDR_CHECK(ndr_pull_lsa_AuditFullSetInfo(ndr, NDR_SCALARS, &r->auditfullset));
-			break; }
-
-			case LSA_POLICY_INFO_AUDIT_FULL_QUERY: {
-				NDR_CHECK(ndr_pull_lsa_AuditFullQueryInfo(ndr, NDR_SCALARS, &r->auditfullquery));
-			break; }
-
-			case LSA_POLICY_INFO_DNS: {
-				NDR_CHECK(ndr_pull_lsa_DnsDomainInfo(ndr, NDR_SCALARS, &r->dns));
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case LSA_POLICY_INFO_AUDIT_LOG:
-			break;
-
-			case LSA_POLICY_INFO_AUDIT_EVENTS:
-				NDR_CHECK(ndr_pull_lsa_AuditEventsInfo(ndr, NDR_BUFFERS, &r->audit_events));
-			break;
-
-			case LSA_POLICY_INFO_DOMAIN:
-				NDR_CHECK(ndr_pull_lsa_DomainInfo(ndr, NDR_BUFFERS, &r->domain));
-			break;
-
-			case LSA_POLICY_INFO_PD:
-				NDR_CHECK(ndr_pull_lsa_PDAccountInfo(ndr, NDR_BUFFERS, &r->pd));
-			break;
-
-			case LSA_POLICY_INFO_ACCOUNT_DOMAIN:
-				NDR_CHECK(ndr_pull_lsa_DomainInfo(ndr, NDR_BUFFERS, &r->account_domain));
-			break;
-
-			case LSA_POLICY_INFO_ROLE:
-			break;
-
-			case LSA_POLICY_INFO_REPLICA:
-				NDR_CHECK(ndr_pull_lsa_ReplicaSourceInfo(ndr, NDR_BUFFERS, &r->replica));
-			break;
-
-			case LSA_POLICY_INFO_QUOTA:
-			break;
-
-			case LSA_POLICY_INFO_DB:
-			break;
-
-			case LSA_POLICY_INFO_AUDIT_FULL_SET:
-			break;
-
-			case LSA_POLICY_INFO_AUDIT_FULL_QUERY:
-			break;
-
-			case LSA_POLICY_INFO_DNS:
-				NDR_CHECK(ndr_pull_lsa_DnsDomainInfo(ndr, NDR_BUFFERS, &r->dns));
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_PolicyInformation(struct ndr_print *ndr, const char *name, const union lsa_PolicyInformation *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "lsa_PolicyInformation");
-	switch (level) {
-		case LSA_POLICY_INFO_AUDIT_LOG:
-			ndr_print_lsa_AuditLogInfo(ndr, "audit_log", &r->audit_log);
-		break;
-
-		case LSA_POLICY_INFO_AUDIT_EVENTS:
-			ndr_print_lsa_AuditEventsInfo(ndr, "audit_events", &r->audit_events);
-		break;
-
-		case LSA_POLICY_INFO_DOMAIN:
-			ndr_print_lsa_DomainInfo(ndr, "domain", &r->domain);
-		break;
-
-		case LSA_POLICY_INFO_PD:
-			ndr_print_lsa_PDAccountInfo(ndr, "pd", &r->pd);
-		break;
-
-		case LSA_POLICY_INFO_ACCOUNT_DOMAIN:
-			ndr_print_lsa_DomainInfo(ndr, "account_domain", &r->account_domain);
-		break;
-
-		case LSA_POLICY_INFO_ROLE:
-			ndr_print_lsa_ServerRole(ndr, "role", &r->role);
-		break;
-
-		case LSA_POLICY_INFO_REPLICA:
-			ndr_print_lsa_ReplicaSourceInfo(ndr, "replica", &r->replica);
-		break;
-
-		case LSA_POLICY_INFO_QUOTA:
-			ndr_print_lsa_DefaultQuotaInfo(ndr, "quota", &r->quota);
-		break;
-
-		case LSA_POLICY_INFO_DB:
-			ndr_print_lsa_ModificationInfo(ndr, "db", &r->db);
-		break;
-
-		case LSA_POLICY_INFO_AUDIT_FULL_SET:
-			ndr_print_lsa_AuditFullSetInfo(ndr, "auditfullset", &r->auditfullset);
-		break;
-
-		case LSA_POLICY_INFO_AUDIT_FULL_QUERY:
-			ndr_print_lsa_AuditFullQueryInfo(ndr, "auditfullquery", &r->auditfullquery);
-		break;
-
-		case LSA_POLICY_INFO_DNS:
-			ndr_print_lsa_DnsDomainInfo(ndr, "dns", &r->dns);
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_lsa_SidPtr(struct ndr_push *ndr, int ndr_flags, const struct lsa_SidPtr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sid));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->sid) {
-			NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_SidPtr(struct ndr_pull *ndr, int ndr_flags, struct lsa_SidPtr *r)
-{
-	uint32_t _ptr_sid;
-	TALLOC_CTX *_mem_save_sid_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sid));
-		if (_ptr_sid) {
-			NDR_PULL_ALLOC(ndr, r->sid);
-		} else {
-			r->sid = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->sid) {
-			_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sid, 0);
-			NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_SidPtr(struct ndr_print *ndr, const char *name, const struct lsa_SidPtr *r)
-{
-	ndr_print_struct(ndr, name, "lsa_SidPtr");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "sid", r->sid);
-	ndr->depth++;
-	if (r->sid) {
-		ndr_print_dom_sid2(ndr, "sid", r->sid);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_SidArray(struct ndr_push *ndr, int ndr_flags, const struct lsa_SidArray *r)
-{
-	uint32_t cntr_sids_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_sids));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sids));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->sids) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_sids));
-			for (cntr_sids_1 = 0; cntr_sids_1 < r->num_sids; cntr_sids_1++) {
-				NDR_CHECK(ndr_push_lsa_SidPtr(ndr, NDR_SCALARS, &r->sids[cntr_sids_1]));
-			}
-			for (cntr_sids_1 = 0; cntr_sids_1 < r->num_sids; cntr_sids_1++) {
-				NDR_CHECK(ndr_push_lsa_SidPtr(ndr, NDR_BUFFERS, &r->sids[cntr_sids_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_SidArray(struct ndr_pull *ndr, int ndr_flags, struct lsa_SidArray *r)
-{
-	uint32_t _ptr_sids;
-	uint32_t cntr_sids_1;
-	TALLOC_CTX *_mem_save_sids_0;
-	TALLOC_CTX *_mem_save_sids_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_sids));
-		if (r->num_sids < 0 || r->num_sids > 1000) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sids));
-		if (_ptr_sids) {
-			NDR_PULL_ALLOC(ndr, r->sids);
-		} else {
-			r->sids = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->sids) {
-			_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sids, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->sids));
-			NDR_PULL_ALLOC_N(ndr, r->sids, ndr_get_array_size(ndr, &r->sids));
-			_mem_save_sids_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sids, 0);
-			for (cntr_sids_1 = 0; cntr_sids_1 < r->num_sids; cntr_sids_1++) {
-				NDR_CHECK(ndr_pull_lsa_SidPtr(ndr, NDR_SCALARS, &r->sids[cntr_sids_1]));
-			}
-			for (cntr_sids_1 = 0; cntr_sids_1 < r->num_sids; cntr_sids_1++) {
-				NDR_CHECK(ndr_pull_lsa_SidPtr(ndr, NDR_BUFFERS, &r->sids[cntr_sids_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, 0);
-		}
-		if (r->sids) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->sids, r->num_sids));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_SidArray(struct ndr_print *ndr, const char *name, const struct lsa_SidArray *r)
-{
-	uint32_t cntr_sids_1;
-	ndr_print_struct(ndr, name, "lsa_SidArray");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "num_sids", r->num_sids);
-	ndr_print_ptr(ndr, "sids", r->sids);
-	ndr->depth++;
-	if (r->sids) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "sids", r->num_sids);
-		ndr->depth++;
-		for (cntr_sids_1=0;cntr_sids_1<r->num_sids;cntr_sids_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_sids_1) != -1) {
-				ndr_print_lsa_SidPtr(ndr, "sids", &r->sids[cntr_sids_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_DomainList(struct ndr_push *ndr, int ndr_flags, const struct lsa_DomainList *r)
-{
-	uint32_t cntr_domains_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->domains));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->domains) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_domains_1 = 0; cntr_domains_1 < r->count; cntr_domains_1++) {
-				NDR_CHECK(ndr_push_lsa_DomainInfo(ndr, NDR_SCALARS, &r->domains[cntr_domains_1]));
-			}
-			for (cntr_domains_1 = 0; cntr_domains_1 < r->count; cntr_domains_1++) {
-				NDR_CHECK(ndr_push_lsa_DomainInfo(ndr, NDR_BUFFERS, &r->domains[cntr_domains_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_DomainList(struct ndr_pull *ndr, int ndr_flags, struct lsa_DomainList *r)
-{
-	uint32_t _ptr_domains;
-	uint32_t cntr_domains_1;
-	TALLOC_CTX *_mem_save_domains_0;
-	TALLOC_CTX *_mem_save_domains_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domains));
-		if (_ptr_domains) {
-			NDR_PULL_ALLOC(ndr, r->domains);
-		} else {
-			r->domains = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->domains) {
-			_mem_save_domains_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->domains, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->domains));
-			NDR_PULL_ALLOC_N(ndr, r->domains, ndr_get_array_size(ndr, &r->domains));
-			_mem_save_domains_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->domains, 0);
-			for (cntr_domains_1 = 0; cntr_domains_1 < r->count; cntr_domains_1++) {
-				NDR_CHECK(ndr_pull_lsa_DomainInfo(ndr, NDR_SCALARS, &r->domains[cntr_domains_1]));
-			}
-			for (cntr_domains_1 = 0; cntr_domains_1 < r->count; cntr_domains_1++) {
-				NDR_CHECK(ndr_pull_lsa_DomainInfo(ndr, NDR_BUFFERS, &r->domains[cntr_domains_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domains_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domains_0, 0);
-		}
-		if (r->domains) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->domains, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_DomainList(struct ndr_print *ndr, const char *name, const struct lsa_DomainList *r)
-{
-	uint32_t cntr_domains_1;
-	ndr_print_struct(ndr, name, "lsa_DomainList");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "domains", r->domains);
-	ndr->depth++;
-	if (r->domains) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "domains", r->count);
-		ndr->depth++;
-		for (cntr_domains_1=0;cntr_domains_1<r->count;cntr_domains_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_domains_1) != -1) {
-				ndr_print_lsa_DomainInfo(ndr, "domains", &r->domains[cntr_domains_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_SidType(struct ndr_push *ndr, int ndr_flags, enum lsa_SidType r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_SidType(struct ndr_pull *ndr, int ndr_flags, enum lsa_SidType *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_SidType(struct ndr_print *ndr, const char *name, enum lsa_SidType r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case SID_NAME_USE_NONE: val = "SID_NAME_USE_NONE"; break;
-		case SID_NAME_USER: val = "SID_NAME_USER"; break;
-		case SID_NAME_DOM_GRP: val = "SID_NAME_DOM_GRP"; break;
-		case SID_NAME_DOMAIN: val = "SID_NAME_DOMAIN"; break;
-		case SID_NAME_ALIAS: val = "SID_NAME_ALIAS"; break;
-		case SID_NAME_WKN_GRP: val = "SID_NAME_WKN_GRP"; break;
-		case SID_NAME_DELETED: val = "SID_NAME_DELETED"; break;
-		case SID_NAME_INVALID: val = "SID_NAME_INVALID"; break;
-		case SID_NAME_UNKNOWN: val = "SID_NAME_UNKNOWN"; break;
-		case SID_NAME_COMPUTER: val = "SID_NAME_COMPUTER"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_lsa_TranslatedSid(struct ndr_push *ndr, int ndr_flags, const struct lsa_TranslatedSid *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_SidType(ndr, NDR_SCALARS, r->sid_type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sid_index));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_TranslatedSid(struct ndr_pull *ndr, int ndr_flags, struct lsa_TranslatedSid *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_SidType(ndr, NDR_SCALARS, &r->sid_type));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sid_index));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_TranslatedSid(struct ndr_print *ndr, const char *name, const struct lsa_TranslatedSid *r)
-{
-	ndr_print_struct(ndr, name, "lsa_TranslatedSid");
-	ndr->depth++;
-	ndr_print_lsa_SidType(ndr, "sid_type", r->sid_type);
-	ndr_print_uint32(ndr, "rid", r->rid);
-	ndr_print_uint32(ndr, "sid_index", r->sid_index);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_TransSidArray(struct ndr_push *ndr, int ndr_flags, const struct lsa_TransSidArray *r)
-{
-	uint32_t cntr_sids_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sids));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->sids) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_sids_1 = 0; cntr_sids_1 < r->count; cntr_sids_1++) {
-				NDR_CHECK(ndr_push_lsa_TranslatedSid(ndr, NDR_SCALARS, &r->sids[cntr_sids_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_TransSidArray(struct ndr_pull *ndr, int ndr_flags, struct lsa_TransSidArray *r)
-{
-	uint32_t _ptr_sids;
-	uint32_t cntr_sids_1;
-	TALLOC_CTX *_mem_save_sids_0;
-	TALLOC_CTX *_mem_save_sids_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		if (r->count < 0 || r->count > 1000) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sids));
-		if (_ptr_sids) {
-			NDR_PULL_ALLOC(ndr, r->sids);
-		} else {
-			r->sids = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->sids) {
-			_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sids, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->sids));
-			NDR_PULL_ALLOC_N(ndr, r->sids, ndr_get_array_size(ndr, &r->sids));
-			_mem_save_sids_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sids, 0);
-			for (cntr_sids_1 = 0; cntr_sids_1 < r->count; cntr_sids_1++) {
-				NDR_CHECK(ndr_pull_lsa_TranslatedSid(ndr, NDR_SCALARS, &r->sids[cntr_sids_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, 0);
-		}
-		if (r->sids) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->sids, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_TransSidArray(struct ndr_print *ndr, const char *name, const struct lsa_TransSidArray *r)
-{
-	uint32_t cntr_sids_1;
-	ndr_print_struct(ndr, name, "lsa_TransSidArray");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "sids", r->sids);
-	ndr->depth++;
-	if (r->sids) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "sids", r->count);
-		ndr->depth++;
-		for (cntr_sids_1=0;cntr_sids_1<r->count;cntr_sids_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_sids_1) != -1) {
-				ndr_print_lsa_TranslatedSid(ndr, "sids", &r->sids[cntr_sids_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_RefDomainList(struct ndr_push *ndr, int ndr_flags, const struct lsa_RefDomainList *r)
-{
-	uint32_t cntr_domains_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->domains));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->max_size));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->domains) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_domains_1 = 0; cntr_domains_1 < r->count; cntr_domains_1++) {
-				NDR_CHECK(ndr_push_lsa_DomainInfo(ndr, NDR_SCALARS, &r->domains[cntr_domains_1]));
-			}
-			for (cntr_domains_1 = 0; cntr_domains_1 < r->count; cntr_domains_1++) {
-				NDR_CHECK(ndr_push_lsa_DomainInfo(ndr, NDR_BUFFERS, &r->domains[cntr_domains_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_RefDomainList(struct ndr_pull *ndr, int ndr_flags, struct lsa_RefDomainList *r)
-{
-	uint32_t _ptr_domains;
-	uint32_t cntr_domains_1;
-	TALLOC_CTX *_mem_save_domains_0;
-	TALLOC_CTX *_mem_save_domains_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		if (r->count < 0 || r->count > 1000) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domains));
-		if (_ptr_domains) {
-			NDR_PULL_ALLOC(ndr, r->domains);
-		} else {
-			r->domains = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->max_size));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->domains) {
-			_mem_save_domains_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->domains, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->domains));
-			NDR_PULL_ALLOC_N(ndr, r->domains, ndr_get_array_size(ndr, &r->domains));
-			_mem_save_domains_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->domains, 0);
-			for (cntr_domains_1 = 0; cntr_domains_1 < r->count; cntr_domains_1++) {
-				NDR_CHECK(ndr_pull_lsa_DomainInfo(ndr, NDR_SCALARS, &r->domains[cntr_domains_1]));
-			}
-			for (cntr_domains_1 = 0; cntr_domains_1 < r->count; cntr_domains_1++) {
-				NDR_CHECK(ndr_pull_lsa_DomainInfo(ndr, NDR_BUFFERS, &r->domains[cntr_domains_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domains_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domains_0, 0);
-		}
-		if (r->domains) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->domains, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_RefDomainList(struct ndr_print *ndr, const char *name, const struct lsa_RefDomainList *r)
-{
-	uint32_t cntr_domains_1;
-	ndr_print_struct(ndr, name, "lsa_RefDomainList");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "domains", r->domains);
-	ndr->depth++;
-	if (r->domains) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "domains", r->count);
-		ndr->depth++;
-		for (cntr_domains_1=0;cntr_domains_1<r->count;cntr_domains_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_domains_1) != -1) {
-				ndr_print_lsa_DomainInfo(ndr, "domains", &r->domains[cntr_domains_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "max_size", r->max_size);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_LookupNamesLevel(struct ndr_push *ndr, int ndr_flags, enum lsa_LookupNamesLevel r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_LookupNamesLevel(struct ndr_pull *ndr, int ndr_flags, enum lsa_LookupNamesLevel *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_LookupNamesLevel(struct ndr_print *ndr, const char *name, enum lsa_LookupNamesLevel r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case LSA_LOOKUP_NAMES_ALL: val = "LSA_LOOKUP_NAMES_ALL"; break;
-		case LSA_LOOKUP_NAMES_DOMAINS_ONLY: val = "LSA_LOOKUP_NAMES_DOMAINS_ONLY"; break;
-		case LSA_LOOKUP_NAMES_PRIMARY_DOMAIN_ONLY: val = "LSA_LOOKUP_NAMES_PRIMARY_DOMAIN_ONLY"; break;
-		case LSA_LOOKUP_NAMES_UPLEVEL_TRUSTS_ONLY: val = "LSA_LOOKUP_NAMES_UPLEVEL_TRUSTS_ONLY"; break;
-		case LSA_LOOKUP_NAMES_FOREST_TRUSTS_ONLY: val = "LSA_LOOKUP_NAMES_FOREST_TRUSTS_ONLY"; break;
-		case LSA_LOOKUP_NAMES_UPLEVEL_TRUSTS_ONLY2: val = "LSA_LOOKUP_NAMES_UPLEVEL_TRUSTS_ONLY2"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_lsa_TranslatedName(struct ndr_push *ndr, int ndr_flags, const struct lsa_TranslatedName *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_SidType(ndr, NDR_SCALARS, r->sid_type));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->name));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sid_index));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_TranslatedName(struct ndr_pull *ndr, int ndr_flags, struct lsa_TranslatedName *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_SidType(ndr, NDR_SCALARS, &r->sid_type));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->name));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sid_index));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_TranslatedName(struct ndr_print *ndr, const char *name, const struct lsa_TranslatedName *r)
-{
-	ndr_print_struct(ndr, name, "lsa_TranslatedName");
-	ndr->depth++;
-	ndr_print_lsa_SidType(ndr, "sid_type", r->sid_type);
-	ndr_print_lsa_String(ndr, "name", &r->name);
-	ndr_print_uint32(ndr, "sid_index", r->sid_index);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_TransNameArray(struct ndr_push *ndr, int ndr_flags, const struct lsa_TransNameArray *r)
-{
-	uint32_t cntr_names_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->names));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->names) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_names_1 = 0; cntr_names_1 < r->count; cntr_names_1++) {
-				NDR_CHECK(ndr_push_lsa_TranslatedName(ndr, NDR_SCALARS, &r->names[cntr_names_1]));
-			}
-			for (cntr_names_1 = 0; cntr_names_1 < r->count; cntr_names_1++) {
-				NDR_CHECK(ndr_push_lsa_TranslatedName(ndr, NDR_BUFFERS, &r->names[cntr_names_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_TransNameArray(struct ndr_pull *ndr, int ndr_flags, struct lsa_TransNameArray *r)
-{
-	uint32_t _ptr_names;
-	uint32_t cntr_names_1;
-	TALLOC_CTX *_mem_save_names_0;
-	TALLOC_CTX *_mem_save_names_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		if (r->count < 0 || r->count > 1000) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_names));
-		if (_ptr_names) {
-			NDR_PULL_ALLOC(ndr, r->names);
-		} else {
-			r->names = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->names) {
-			_mem_save_names_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->names, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->names));
-			NDR_PULL_ALLOC_N(ndr, r->names, ndr_get_array_size(ndr, &r->names));
-			_mem_save_names_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->names, 0);
-			for (cntr_names_1 = 0; cntr_names_1 < r->count; cntr_names_1++) {
-				NDR_CHECK(ndr_pull_lsa_TranslatedName(ndr, NDR_SCALARS, &r->names[cntr_names_1]));
-			}
-			for (cntr_names_1 = 0; cntr_names_1 < r->count; cntr_names_1++) {
-				NDR_CHECK(ndr_pull_lsa_TranslatedName(ndr, NDR_BUFFERS, &r->names[cntr_names_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_names_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_names_0, 0);
-		}
-		if (r->names) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->names, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_TransNameArray(struct ndr_print *ndr, const char *name, const struct lsa_TransNameArray *r)
-{
-	uint32_t cntr_names_1;
-	ndr_print_struct(ndr, name, "lsa_TransNameArray");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "names", r->names);
-	ndr->depth++;
-	if (r->names) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "names", r->count);
-		ndr->depth++;
-		for (cntr_names_1=0;cntr_names_1<r->count;cntr_names_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_names_1) != -1) {
-				ndr_print_lsa_TranslatedName(ndr, "names", &r->names[cntr_names_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_LUIDAttribute(struct ndr_push *ndr, int ndr_flags, const struct lsa_LUIDAttribute *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_LUID(ndr, NDR_SCALARS, &r->luid));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->attribute));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_LUIDAttribute(struct ndr_pull *ndr, int ndr_flags, struct lsa_LUIDAttribute *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_LUID(ndr, NDR_SCALARS, &r->luid));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->attribute));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_LUIDAttribute(struct ndr_print *ndr, const char *name, const struct lsa_LUIDAttribute *r)
-{
-	ndr_print_struct(ndr, name, "lsa_LUIDAttribute");
-	ndr->depth++;
-	ndr_print_lsa_LUID(ndr, "luid", &r->luid);
-	ndr_print_uint32(ndr, "attribute", r->attribute);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_PrivilegeSet(struct ndr_push *ndr, int ndr_flags, const struct lsa_PrivilegeSet *r)
-{
-	uint32_t cntr_set_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown));
-		for (cntr_set_0 = 0; cntr_set_0 < r->count; cntr_set_0++) {
-			NDR_CHECK(ndr_push_lsa_LUIDAttribute(ndr, NDR_SCALARS, &r->set[cntr_set_0]));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_PrivilegeSet(struct ndr_pull *ndr, int ndr_flags, struct lsa_PrivilegeSet *r)
-{
-	uint32_t cntr_set_0;
-	TALLOC_CTX *_mem_save_set_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->set));
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		if (r->count < 0 || r->count > 1000) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown));
-		NDR_PULL_ALLOC_N(ndr, r->set, ndr_get_array_size(ndr, &r->set));
-		_mem_save_set_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->set, 0);
-		for (cntr_set_0 = 0; cntr_set_0 < r->count; cntr_set_0++) {
-			NDR_CHECK(ndr_pull_lsa_LUIDAttribute(ndr, NDR_SCALARS, &r->set[cntr_set_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_set_0, 0);
-		if (r->set) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->set, r->count));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_PrivilegeSet(struct ndr_print *ndr, const char *name, const struct lsa_PrivilegeSet *r)
-{
-	uint32_t cntr_set_0;
-	ndr_print_struct(ndr, name, "lsa_PrivilegeSet");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_uint32(ndr, "unknown", r->unknown);
-	ndr->print(ndr, "%s: ARRAY(%d)", "set", r->count);
-	ndr->depth++;
-	for (cntr_set_0=0;cntr_set_0<r->count;cntr_set_0++) {
-		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_set_0) != -1) {
-			ndr_print_lsa_LUIDAttribute(ndr, "set", &r->set[cntr_set_0]);
-			free(idx_0);
-		}
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_DATA_BUF(struct ndr_push *ndr, int ndr_flags, const struct lsa_DATA_BUF *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 4));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->length));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->size));
-			NDR_CHECK(ndr_push_unique_ptr(ndr, r->data));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-			if (r->data) {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->size));
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->length));
-				NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->data, r->length));
-			}
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_DATA_BUF(struct ndr_pull *ndr, int ndr_flags, struct lsa_DATA_BUF *r)
-{
-	uint32_t _ptr_data;
-	TALLOC_CTX *_mem_save_data_0;
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 4));
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->length));
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->size));
-			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_data));
-			if (_ptr_data) {
-				NDR_PULL_ALLOC(ndr, r->data);
-			} else {
-				r->data = NULL;
-			}
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-			if (r->data) {
-				_mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
-				NDR_PULL_SET_MEM_CTX(ndr, r->data, 0);
-				NDR_CHECK(ndr_pull_array_size(ndr, &r->data));
-				NDR_CHECK(ndr_pull_array_length(ndr, &r->data));
-				if (ndr_get_array_length(ndr, &r->data) > ndr_get_array_size(ndr, &r->data)) {
-					return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->data), ndr_get_array_length(ndr, &r->data));
-				}
-				NDR_PULL_ALLOC_N(ndr, r->data, ndr_get_array_size(ndr, &r->data));
-				NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->data, ndr_get_array_length(ndr, &r->data)));
-				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, 0);
-			}
-			if (r->data) {
-				NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->data, r->size));
-			}
-			if (r->data) {
-				NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->data, r->length));
-			}
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_DATA_BUF(struct ndr_print *ndr, const char *name, const struct lsa_DATA_BUF *r)
-{
-	ndr_print_struct(ndr, name, "lsa_DATA_BUF");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "length", r->length);
-		ndr_print_uint32(ndr, "size", r->size);
-		ndr_print_ptr(ndr, "data", r->data);
-		ndr->depth++;
-		if (r->data) {
-			ndr_print_array_uint8(ndr, "data", r->data, r->length);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-
-static enum ndr_err_code ndr_push_lsa_DATA_BUF2(struct ndr_push *ndr, int ndr_flags, const struct lsa_DATA_BUF2 *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 4));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->size));
-			NDR_CHECK(ndr_push_unique_ptr(ndr, r->data));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-			if (r->data) {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->size));
-				NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->data, r->size));
-			}
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_DATA_BUF2(struct ndr_pull *ndr, int ndr_flags, struct lsa_DATA_BUF2 *r)
-{
-	uint32_t _ptr_data;
-	TALLOC_CTX *_mem_save_data_0;
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 4));
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->size));
-			if (r->size < 0 || r->size > 65536) {
-				return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-			}
-			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_data));
-			if (_ptr_data) {
-				NDR_PULL_ALLOC(ndr, r->data);
-			} else {
-				r->data = NULL;
-			}
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-			if (r->data) {
-				_mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
-				NDR_PULL_SET_MEM_CTX(ndr, r->data, 0);
-				NDR_CHECK(ndr_pull_array_size(ndr, &r->data));
-				NDR_PULL_ALLOC_N(ndr, r->data, ndr_get_array_size(ndr, &r->data));
-				NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->data, ndr_get_array_size(ndr, &r->data)));
-				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, 0);
-			}
-			if (r->data) {
-				NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->data, r->size));
-			}
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_DATA_BUF2(struct ndr_print *ndr, const char *name, const struct lsa_DATA_BUF2 *r)
-{
-	ndr_print_struct(ndr, name, "lsa_DATA_BUF2");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "size", r->size);
-		ndr_print_ptr(ndr, "data", r->data);
-		ndr->depth++;
-		if (r->data) {
-			ndr_print_array_uint8(ndr, "data", r->data, r->size);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-
-static enum ndr_err_code ndr_push_lsa_TrustDomInfoEnum(struct ndr_push *ndr, int ndr_flags, enum lsa_TrustDomInfoEnum r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_TrustDomInfoEnum(struct ndr_pull *ndr, int ndr_flags, enum lsa_TrustDomInfoEnum *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_TrustDomInfoEnum(struct ndr_print *ndr, const char *name, enum lsa_TrustDomInfoEnum r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case LSA_TRUSTED_DOMAIN_INFO_NAME: val = "LSA_TRUSTED_DOMAIN_INFO_NAME"; break;
-		case LSA_TRUSTED_DOMAIN_INFO_CONTROLLERS_INFO: val = "LSA_TRUSTED_DOMAIN_INFO_CONTROLLERS_INFO"; break;
-		case LSA_TRUSTED_DOMAIN_INFO_POSIX_OFFSET: val = "LSA_TRUSTED_DOMAIN_INFO_POSIX_OFFSET"; break;
-		case LSA_TRUSTED_DOMAIN_INFO_PASSWORD: val = "LSA_TRUSTED_DOMAIN_INFO_PASSWORD"; break;
-		case LSA_TRUSTED_DOMAIN_INFO_BASIC: val = "LSA_TRUSTED_DOMAIN_INFO_BASIC"; break;
-		case LSA_TRUSTED_DOMAIN_INFO_INFO_EX: val = "LSA_TRUSTED_DOMAIN_INFO_INFO_EX"; break;
-		case LSA_TRUSTED_DOMAIN_INFO_AUTH_INFO: val = "LSA_TRUSTED_DOMAIN_INFO_AUTH_INFO"; break;
-		case LSA_TRUSTED_DOMAIN_INFO_FULL_INFO: val = "LSA_TRUSTED_DOMAIN_INFO_FULL_INFO"; break;
-		case LSA_TRUSTED_DOMAIN_INFO_11: val = "LSA_TRUSTED_DOMAIN_INFO_11"; break;
-		case LSA_TRUSTED_DOMAIN_INFO_INFO_ALL: val = "LSA_TRUSTED_DOMAIN_INFO_INFO_ALL"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_lsa_TrustDomainInfoName(struct ndr_push *ndr, int ndr_flags, const struct lsa_TrustDomainInfoName *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->netbios_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->netbios_name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_TrustDomainInfoName(struct ndr_pull *ndr, int ndr_flags, struct lsa_TrustDomainInfoName *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->netbios_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->netbios_name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_TrustDomainInfoName(struct ndr_print *ndr, const char *name, const struct lsa_TrustDomainInfoName *r)
-{
-	ndr_print_struct(ndr, name, "lsa_TrustDomainInfoName");
-	ndr->depth++;
-	ndr_print_lsa_StringLarge(ndr, "netbios_name", &r->netbios_name);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_TrustDomainInfoPosixOffset(struct ndr_push *ndr, int ndr_flags, const struct lsa_TrustDomainInfoPosixOffset *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->posix_offset));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_TrustDomainInfoPosixOffset(struct ndr_pull *ndr, int ndr_flags, struct lsa_TrustDomainInfoPosixOffset *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->posix_offset));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_TrustDomainInfoPosixOffset(struct ndr_print *ndr, const char *name, const struct lsa_TrustDomainInfoPosixOffset *r)
-{
-	ndr_print_struct(ndr, name, "lsa_TrustDomainInfoPosixOffset");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "posix_offset", r->posix_offset);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_TrustDomainInfoPassword(struct ndr_push *ndr, int ndr_flags, const struct lsa_TrustDomainInfoPassword *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->password));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->old_password));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->password) {
-			NDR_CHECK(ndr_push_lsa_DATA_BUF(ndr, NDR_SCALARS|NDR_BUFFERS, r->password));
-		}
-		if (r->old_password) {
-			NDR_CHECK(ndr_push_lsa_DATA_BUF(ndr, NDR_SCALARS|NDR_BUFFERS, r->old_password));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_TrustDomainInfoPassword(struct ndr_pull *ndr, int ndr_flags, struct lsa_TrustDomainInfoPassword *r)
-{
-	uint32_t _ptr_password;
-	TALLOC_CTX *_mem_save_password_0;
-	uint32_t _ptr_old_password;
-	TALLOC_CTX *_mem_save_old_password_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_password));
-		if (_ptr_password) {
-			NDR_PULL_ALLOC(ndr, r->password);
-		} else {
-			r->password = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_old_password));
-		if (_ptr_old_password) {
-			NDR_PULL_ALLOC(ndr, r->old_password);
-		} else {
-			r->old_password = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->password) {
-			_mem_save_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->password, 0);
-			NDR_CHECK(ndr_pull_lsa_DATA_BUF(ndr, NDR_SCALARS|NDR_BUFFERS, r->password));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_password_0, 0);
-		}
-		if (r->old_password) {
-			_mem_save_old_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->old_password, 0);
-			NDR_CHECK(ndr_pull_lsa_DATA_BUF(ndr, NDR_SCALARS|NDR_BUFFERS, r->old_password));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_old_password_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_TrustDomainInfoPassword(struct ndr_print *ndr, const char *name, const struct lsa_TrustDomainInfoPassword *r)
-{
-	ndr_print_struct(ndr, name, "lsa_TrustDomainInfoPassword");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "password", r->password);
-	ndr->depth++;
-	if (r->password) {
-		ndr_print_lsa_DATA_BUF(ndr, "password", r->password);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "old_password", r->old_password);
-	ndr->depth++;
-	if (r->old_password) {
-		ndr_print_lsa_DATA_BUF(ndr, "old_password", r->old_password);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_TrustDomainInfoBasic(struct ndr_push *ndr, int ndr_flags, const struct lsa_TrustDomainInfoBasic *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->netbios_name));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sid));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->netbios_name));
-		if (r->sid) {
-			NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_TrustDomainInfoBasic(struct ndr_pull *ndr, int ndr_flags, struct lsa_TrustDomainInfoBasic *r)
-{
-	uint32_t _ptr_sid;
-	TALLOC_CTX *_mem_save_sid_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->netbios_name));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sid));
-		if (_ptr_sid) {
-			NDR_PULL_ALLOC(ndr, r->sid);
-		} else {
-			r->sid = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->netbios_name));
-		if (r->sid) {
-			_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sid, 0);
-			NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_TrustDomainInfoBasic(struct ndr_print *ndr, const char *name, const struct lsa_TrustDomainInfoBasic *r)
-{
-	ndr_print_struct(ndr, name, "lsa_TrustDomainInfoBasic");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "netbios_name", &r->netbios_name);
-	ndr_print_ptr(ndr, "sid", r->sid);
-	ndr->depth++;
-	if (r->sid) {
-		ndr_print_dom_sid2(ndr, "sid", r->sid);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_TrustDomainInfoInfoEx(struct ndr_push *ndr, int ndr_flags, const struct lsa_TrustDomainInfoInfoEx *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->domain_name));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->netbios_name));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sid));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->trust_direction));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->trust_type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->trust_attributes));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->domain_name));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->netbios_name));
-		if (r->sid) {
-			NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_TrustDomainInfoInfoEx(struct ndr_pull *ndr, int ndr_flags, struct lsa_TrustDomainInfoInfoEx *r)
-{
-	uint32_t _ptr_sid;
-	TALLOC_CTX *_mem_save_sid_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->domain_name));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->netbios_name));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sid));
-		if (_ptr_sid) {
-			NDR_PULL_ALLOC(ndr, r->sid);
-		} else {
-			r->sid = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->trust_direction));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->trust_type));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->trust_attributes));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->domain_name));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->netbios_name));
-		if (r->sid) {
-			_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sid, 0);
-			NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_TrustDomainInfoInfoEx(struct ndr_print *ndr, const char *name, const struct lsa_TrustDomainInfoInfoEx *r)
-{
-	ndr_print_struct(ndr, name, "lsa_TrustDomainInfoInfoEx");
-	ndr->depth++;
-	ndr_print_lsa_StringLarge(ndr, "domain_name", &r->domain_name);
-	ndr_print_lsa_StringLarge(ndr, "netbios_name", &r->netbios_name);
-	ndr_print_ptr(ndr, "sid", r->sid);
-	ndr->depth++;
-	if (r->sid) {
-		ndr_print_dom_sid2(ndr, "sid", r->sid);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "trust_direction", r->trust_direction);
-	ndr_print_uint32(ndr, "trust_type", r->trust_type);
-	ndr_print_uint32(ndr, "trust_attributes", r->trust_attributes);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_TrustDomainInfoBuffer(struct ndr_push *ndr, int ndr_flags, const struct lsa_TrustDomainInfoBuffer *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 8));
-		NDR_CHECK(ndr_push_NTTIME_hyper(ndr, NDR_SCALARS, r->last_update_time));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->secret_type));
-		NDR_CHECK(ndr_push_lsa_DATA_BUF2(ndr, NDR_SCALARS, &r->data));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_DATA_BUF2(ndr, NDR_BUFFERS, &r->data));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_TrustDomainInfoBuffer(struct ndr_pull *ndr, int ndr_flags, struct lsa_TrustDomainInfoBuffer *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 8));
-		NDR_CHECK(ndr_pull_NTTIME_hyper(ndr, NDR_SCALARS, &r->last_update_time));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->secret_type));
-		NDR_CHECK(ndr_pull_lsa_DATA_BUF2(ndr, NDR_SCALARS, &r->data));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_DATA_BUF2(ndr, NDR_BUFFERS, &r->data));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_TrustDomainInfoBuffer(struct ndr_print *ndr, const char *name, const struct lsa_TrustDomainInfoBuffer *r)
-{
-	ndr_print_struct(ndr, name, "lsa_TrustDomainInfoBuffer");
-	ndr->depth++;
-	ndr_print_NTTIME_hyper(ndr, "last_update_time", r->last_update_time);
-	ndr_print_uint32(ndr, "secret_type", r->secret_type);
-	ndr_print_lsa_DATA_BUF2(ndr, "data", &r->data);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_TrustDomainInfoAuthInfo(struct ndr_push *ndr, int ndr_flags, const struct lsa_TrustDomainInfoAuthInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->incoming_count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->incoming_current_auth_info));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->incoming_previous_auth_info));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->outgoing_count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->outgoing_current_auth_info));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->outgoing_previous_auth_info));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->incoming_current_auth_info) {
-			NDR_CHECK(ndr_push_lsa_TrustDomainInfoBuffer(ndr, NDR_SCALARS|NDR_BUFFERS, r->incoming_current_auth_info));
-		}
-		if (r->incoming_previous_auth_info) {
-			NDR_CHECK(ndr_push_lsa_TrustDomainInfoBuffer(ndr, NDR_SCALARS|NDR_BUFFERS, r->incoming_previous_auth_info));
-		}
-		if (r->outgoing_current_auth_info) {
-			NDR_CHECK(ndr_push_lsa_TrustDomainInfoBuffer(ndr, NDR_SCALARS|NDR_BUFFERS, r->outgoing_current_auth_info));
-		}
-		if (r->outgoing_previous_auth_info) {
-			NDR_CHECK(ndr_push_lsa_TrustDomainInfoBuffer(ndr, NDR_SCALARS|NDR_BUFFERS, r->outgoing_previous_auth_info));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_TrustDomainInfoAuthInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_TrustDomainInfoAuthInfo *r)
-{
-	uint32_t _ptr_incoming_current_auth_info;
-	TALLOC_CTX *_mem_save_incoming_current_auth_info_0;
-	uint32_t _ptr_incoming_previous_auth_info;
-	TALLOC_CTX *_mem_save_incoming_previous_auth_info_0;
-	uint32_t _ptr_outgoing_current_auth_info;
-	TALLOC_CTX *_mem_save_outgoing_current_auth_info_0;
-	uint32_t _ptr_outgoing_previous_auth_info;
-	TALLOC_CTX *_mem_save_outgoing_previous_auth_info_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->incoming_count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_incoming_current_auth_info));
-		if (_ptr_incoming_current_auth_info) {
-			NDR_PULL_ALLOC(ndr, r->incoming_current_auth_info);
-		} else {
-			r->incoming_current_auth_info = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_incoming_previous_auth_info));
-		if (_ptr_incoming_previous_auth_info) {
-			NDR_PULL_ALLOC(ndr, r->incoming_previous_auth_info);
-		} else {
-			r->incoming_previous_auth_info = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->outgoing_count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_outgoing_current_auth_info));
-		if (_ptr_outgoing_current_auth_info) {
-			NDR_PULL_ALLOC(ndr, r->outgoing_current_auth_info);
-		} else {
-			r->outgoing_current_auth_info = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_outgoing_previous_auth_info));
-		if (_ptr_outgoing_previous_auth_info) {
-			NDR_PULL_ALLOC(ndr, r->outgoing_previous_auth_info);
-		} else {
-			r->outgoing_previous_auth_info = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->incoming_current_auth_info) {
-			_mem_save_incoming_current_auth_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->incoming_current_auth_info, 0);
-			NDR_CHECK(ndr_pull_lsa_TrustDomainInfoBuffer(ndr, NDR_SCALARS|NDR_BUFFERS, r->incoming_current_auth_info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_incoming_current_auth_info_0, 0);
-		}
-		if (r->incoming_previous_auth_info) {
-			_mem_save_incoming_previous_auth_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->incoming_previous_auth_info, 0);
-			NDR_CHECK(ndr_pull_lsa_TrustDomainInfoBuffer(ndr, NDR_SCALARS|NDR_BUFFERS, r->incoming_previous_auth_info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_incoming_previous_auth_info_0, 0);
-		}
-		if (r->outgoing_current_auth_info) {
-			_mem_save_outgoing_current_auth_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->outgoing_current_auth_info, 0);
-			NDR_CHECK(ndr_pull_lsa_TrustDomainInfoBuffer(ndr, NDR_SCALARS|NDR_BUFFERS, r->outgoing_current_auth_info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_outgoing_current_auth_info_0, 0);
-		}
-		if (r->outgoing_previous_auth_info) {
-			_mem_save_outgoing_previous_auth_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->outgoing_previous_auth_info, 0);
-			NDR_CHECK(ndr_pull_lsa_TrustDomainInfoBuffer(ndr, NDR_SCALARS|NDR_BUFFERS, r->outgoing_previous_auth_info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_outgoing_previous_auth_info_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_TrustDomainInfoAuthInfo(struct ndr_print *ndr, const char *name, const struct lsa_TrustDomainInfoAuthInfo *r)
-{
-	ndr_print_struct(ndr, name, "lsa_TrustDomainInfoAuthInfo");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "incoming_count", r->incoming_count);
-	ndr_print_ptr(ndr, "incoming_current_auth_info", r->incoming_current_auth_info);
-	ndr->depth++;
-	if (r->incoming_current_auth_info) {
-		ndr_print_lsa_TrustDomainInfoBuffer(ndr, "incoming_current_auth_info", r->incoming_current_auth_info);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "incoming_previous_auth_info", r->incoming_previous_auth_info);
-	ndr->depth++;
-	if (r->incoming_previous_auth_info) {
-		ndr_print_lsa_TrustDomainInfoBuffer(ndr, "incoming_previous_auth_info", r->incoming_previous_auth_info);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "outgoing_count", r->outgoing_count);
-	ndr_print_ptr(ndr, "outgoing_current_auth_info", r->outgoing_current_auth_info);
-	ndr->depth++;
-	if (r->outgoing_current_auth_info) {
-		ndr_print_lsa_TrustDomainInfoBuffer(ndr, "outgoing_current_auth_info", r->outgoing_current_auth_info);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "outgoing_previous_auth_info", r->outgoing_previous_auth_info);
-	ndr->depth++;
-	if (r->outgoing_previous_auth_info) {
-		ndr_print_lsa_TrustDomainInfoBuffer(ndr, "outgoing_previous_auth_info", r->outgoing_previous_auth_info);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_TrustDomainInfoFullInfo(struct ndr_push *ndr, int ndr_flags, const struct lsa_TrustDomainInfoFullInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_TrustDomainInfoInfoEx(ndr, NDR_SCALARS, &r->info_ex));
-		NDR_CHECK(ndr_push_lsa_TrustDomainInfoPosixOffset(ndr, NDR_SCALARS, &r->posix_offset));
-		NDR_CHECK(ndr_push_lsa_TrustDomainInfoAuthInfo(ndr, NDR_SCALARS, &r->auth_info));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_TrustDomainInfoInfoEx(ndr, NDR_BUFFERS, &r->info_ex));
-		NDR_CHECK(ndr_push_lsa_TrustDomainInfoAuthInfo(ndr, NDR_BUFFERS, &r->auth_info));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_TrustDomainInfoFullInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_TrustDomainInfoFullInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_TrustDomainInfoInfoEx(ndr, NDR_SCALARS, &r->info_ex));
-		NDR_CHECK(ndr_pull_lsa_TrustDomainInfoPosixOffset(ndr, NDR_SCALARS, &r->posix_offset));
-		NDR_CHECK(ndr_pull_lsa_TrustDomainInfoAuthInfo(ndr, NDR_SCALARS, &r->auth_info));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_TrustDomainInfoInfoEx(ndr, NDR_BUFFERS, &r->info_ex));
-		NDR_CHECK(ndr_pull_lsa_TrustDomainInfoAuthInfo(ndr, NDR_BUFFERS, &r->auth_info));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_TrustDomainInfoFullInfo(struct ndr_print *ndr, const char *name, const struct lsa_TrustDomainInfoFullInfo *r)
-{
-	ndr_print_struct(ndr, name, "lsa_TrustDomainInfoFullInfo");
-	ndr->depth++;
-	ndr_print_lsa_TrustDomainInfoInfoEx(ndr, "info_ex", &r->info_ex);
-	ndr_print_lsa_TrustDomainInfoPosixOffset(ndr, "posix_offset", &r->posix_offset);
-	ndr_print_lsa_TrustDomainInfoAuthInfo(ndr, "auth_info", &r->auth_info);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_TrustDomainInfo11(struct ndr_push *ndr, int ndr_flags, const struct lsa_TrustDomainInfo11 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_TrustDomainInfoInfoEx(ndr, NDR_SCALARS, &r->info_ex));
-		NDR_CHECK(ndr_push_lsa_DATA_BUF2(ndr, NDR_SCALARS, &r->data1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_TrustDomainInfoInfoEx(ndr, NDR_BUFFERS, &r->info_ex));
-		NDR_CHECK(ndr_push_lsa_DATA_BUF2(ndr, NDR_BUFFERS, &r->data1));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_TrustDomainInfo11(struct ndr_pull *ndr, int ndr_flags, struct lsa_TrustDomainInfo11 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_TrustDomainInfoInfoEx(ndr, NDR_SCALARS, &r->info_ex));
-		NDR_CHECK(ndr_pull_lsa_DATA_BUF2(ndr, NDR_SCALARS, &r->data1));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_TrustDomainInfoInfoEx(ndr, NDR_BUFFERS, &r->info_ex));
-		NDR_CHECK(ndr_pull_lsa_DATA_BUF2(ndr, NDR_BUFFERS, &r->data1));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_TrustDomainInfo11(struct ndr_print *ndr, const char *name, const struct lsa_TrustDomainInfo11 *r)
-{
-	ndr_print_struct(ndr, name, "lsa_TrustDomainInfo11");
-	ndr->depth++;
-	ndr_print_lsa_TrustDomainInfoInfoEx(ndr, "info_ex", &r->info_ex);
-	ndr_print_lsa_DATA_BUF2(ndr, "data1", &r->data1);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_TrustDomainInfoInfoAll(struct ndr_push *ndr, int ndr_flags, const struct lsa_TrustDomainInfoInfoAll *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_TrustDomainInfoInfoEx(ndr, NDR_SCALARS, &r->info_ex));
-		NDR_CHECK(ndr_push_lsa_DATA_BUF2(ndr, NDR_SCALARS, &r->data1));
-		NDR_CHECK(ndr_push_lsa_TrustDomainInfoPosixOffset(ndr, NDR_SCALARS, &r->posix_offset));
-		NDR_CHECK(ndr_push_lsa_TrustDomainInfoAuthInfo(ndr, NDR_SCALARS, &r->auth_info));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_TrustDomainInfoInfoEx(ndr, NDR_BUFFERS, &r->info_ex));
-		NDR_CHECK(ndr_push_lsa_DATA_BUF2(ndr, NDR_BUFFERS, &r->data1));
-		NDR_CHECK(ndr_push_lsa_TrustDomainInfoAuthInfo(ndr, NDR_BUFFERS, &r->auth_info));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_TrustDomainInfoInfoAll(struct ndr_pull *ndr, int ndr_flags, struct lsa_TrustDomainInfoInfoAll *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_TrustDomainInfoInfoEx(ndr, NDR_SCALARS, &r->info_ex));
-		NDR_CHECK(ndr_pull_lsa_DATA_BUF2(ndr, NDR_SCALARS, &r->data1));
-		NDR_CHECK(ndr_pull_lsa_TrustDomainInfoPosixOffset(ndr, NDR_SCALARS, &r->posix_offset));
-		NDR_CHECK(ndr_pull_lsa_TrustDomainInfoAuthInfo(ndr, NDR_SCALARS, &r->auth_info));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_TrustDomainInfoInfoEx(ndr, NDR_BUFFERS, &r->info_ex));
-		NDR_CHECK(ndr_pull_lsa_DATA_BUF2(ndr, NDR_BUFFERS, &r->data1));
-		NDR_CHECK(ndr_pull_lsa_TrustDomainInfoAuthInfo(ndr, NDR_BUFFERS, &r->auth_info));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_TrustDomainInfoInfoAll(struct ndr_print *ndr, const char *name, const struct lsa_TrustDomainInfoInfoAll *r)
-{
-	ndr_print_struct(ndr, name, "lsa_TrustDomainInfoInfoAll");
-	ndr->depth++;
-	ndr_print_lsa_TrustDomainInfoInfoEx(ndr, "info_ex", &r->info_ex);
-	ndr_print_lsa_DATA_BUF2(ndr, "data1", &r->data1);
-	ndr_print_lsa_TrustDomainInfoPosixOffset(ndr, "posix_offset", &r->posix_offset);
-	ndr_print_lsa_TrustDomainInfoAuthInfo(ndr, "auth_info", &r->auth_info);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_TrustedDomainInfo(struct ndr_push *ndr, int ndr_flags, const union lsa_TrustedDomainInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_lsa_TrustDomInfoEnum(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case LSA_TRUSTED_DOMAIN_INFO_NAME: {
-				NDR_CHECK(ndr_push_lsa_TrustDomainInfoName(ndr, NDR_SCALARS, &r->name));
-			break; }
-
-			case LSA_TRUSTED_DOMAIN_INFO_POSIX_OFFSET: {
-				NDR_CHECK(ndr_push_lsa_TrustDomainInfoPosixOffset(ndr, NDR_SCALARS, &r->posix_offset));
-			break; }
-
-			case LSA_TRUSTED_DOMAIN_INFO_PASSWORD: {
-				NDR_CHECK(ndr_push_lsa_TrustDomainInfoPassword(ndr, NDR_SCALARS, &r->password));
-			break; }
-
-			case LSA_TRUSTED_DOMAIN_INFO_BASIC: {
-				NDR_CHECK(ndr_push_lsa_TrustDomainInfoBasic(ndr, NDR_SCALARS, &r->info_basic));
-			break; }
-
-			case LSA_TRUSTED_DOMAIN_INFO_INFO_EX: {
-				NDR_CHECK(ndr_push_lsa_TrustDomainInfoInfoEx(ndr, NDR_SCALARS, &r->info_ex));
-			break; }
-
-			case LSA_TRUSTED_DOMAIN_INFO_AUTH_INFO: {
-				NDR_CHECK(ndr_push_lsa_TrustDomainInfoAuthInfo(ndr, NDR_SCALARS, &r->auth_info));
-			break; }
-
-			case LSA_TRUSTED_DOMAIN_INFO_FULL_INFO: {
-				NDR_CHECK(ndr_push_lsa_TrustDomainInfoFullInfo(ndr, NDR_SCALARS, &r->full_info));
-			break; }
-
-			case LSA_TRUSTED_DOMAIN_INFO_11: {
-				NDR_CHECK(ndr_push_lsa_TrustDomainInfo11(ndr, NDR_SCALARS, &r->info11));
-			break; }
-
-			case LSA_TRUSTED_DOMAIN_INFO_INFO_ALL: {
-				NDR_CHECK(ndr_push_lsa_TrustDomainInfoInfoAll(ndr, NDR_SCALARS, &r->info_all));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case LSA_TRUSTED_DOMAIN_INFO_NAME:
-				NDR_CHECK(ndr_push_lsa_TrustDomainInfoName(ndr, NDR_BUFFERS, &r->name));
-			break;
-
-			case LSA_TRUSTED_DOMAIN_INFO_POSIX_OFFSET:
-			break;
-
-			case LSA_TRUSTED_DOMAIN_INFO_PASSWORD:
-				NDR_CHECK(ndr_push_lsa_TrustDomainInfoPassword(ndr, NDR_BUFFERS, &r->password));
-			break;
-
-			case LSA_TRUSTED_DOMAIN_INFO_BASIC:
-				NDR_CHECK(ndr_push_lsa_TrustDomainInfoBasic(ndr, NDR_BUFFERS, &r->info_basic));
-			break;
-
-			case LSA_TRUSTED_DOMAIN_INFO_INFO_EX:
-				NDR_CHECK(ndr_push_lsa_TrustDomainInfoInfoEx(ndr, NDR_BUFFERS, &r->info_ex));
-			break;
-
-			case LSA_TRUSTED_DOMAIN_INFO_AUTH_INFO:
-				NDR_CHECK(ndr_push_lsa_TrustDomainInfoAuthInfo(ndr, NDR_BUFFERS, &r->auth_info));
-			break;
-
-			case LSA_TRUSTED_DOMAIN_INFO_FULL_INFO:
-				NDR_CHECK(ndr_push_lsa_TrustDomainInfoFullInfo(ndr, NDR_BUFFERS, &r->full_info));
-			break;
-
-			case LSA_TRUSTED_DOMAIN_INFO_11:
-				NDR_CHECK(ndr_push_lsa_TrustDomainInfo11(ndr, NDR_BUFFERS, &r->info11));
-			break;
-
-			case LSA_TRUSTED_DOMAIN_INFO_INFO_ALL:
-				NDR_CHECK(ndr_push_lsa_TrustDomainInfoInfoAll(ndr, NDR_BUFFERS, &r->info_all));
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_TrustedDomainInfo(struct ndr_pull *ndr, int ndr_flags, union lsa_TrustedDomainInfo *r)
-{
-	int level;
-	uint16_t _level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case LSA_TRUSTED_DOMAIN_INFO_NAME: {
-				NDR_CHECK(ndr_pull_lsa_TrustDomainInfoName(ndr, NDR_SCALARS, &r->name));
-			break; }
-
-			case LSA_TRUSTED_DOMAIN_INFO_POSIX_OFFSET: {
-				NDR_CHECK(ndr_pull_lsa_TrustDomainInfoPosixOffset(ndr, NDR_SCALARS, &r->posix_offset));
-			break; }
-
-			case LSA_TRUSTED_DOMAIN_INFO_PASSWORD: {
-				NDR_CHECK(ndr_pull_lsa_TrustDomainInfoPassword(ndr, NDR_SCALARS, &r->password));
-			break; }
-
-			case LSA_TRUSTED_DOMAIN_INFO_BASIC: {
-				NDR_CHECK(ndr_pull_lsa_TrustDomainInfoBasic(ndr, NDR_SCALARS, &r->info_basic));
-			break; }
-
-			case LSA_TRUSTED_DOMAIN_INFO_INFO_EX: {
-				NDR_CHECK(ndr_pull_lsa_TrustDomainInfoInfoEx(ndr, NDR_SCALARS, &r->info_ex));
-			break; }
-
-			case LSA_TRUSTED_DOMAIN_INFO_AUTH_INFO: {
-				NDR_CHECK(ndr_pull_lsa_TrustDomainInfoAuthInfo(ndr, NDR_SCALARS, &r->auth_info));
-			break; }
-
-			case LSA_TRUSTED_DOMAIN_INFO_FULL_INFO: {
-				NDR_CHECK(ndr_pull_lsa_TrustDomainInfoFullInfo(ndr, NDR_SCALARS, &r->full_info));
-			break; }
-
-			case LSA_TRUSTED_DOMAIN_INFO_11: {
-				NDR_CHECK(ndr_pull_lsa_TrustDomainInfo11(ndr, NDR_SCALARS, &r->info11));
-			break; }
-
-			case LSA_TRUSTED_DOMAIN_INFO_INFO_ALL: {
-				NDR_CHECK(ndr_pull_lsa_TrustDomainInfoInfoAll(ndr, NDR_SCALARS, &r->info_all));
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case LSA_TRUSTED_DOMAIN_INFO_NAME:
-				NDR_CHECK(ndr_pull_lsa_TrustDomainInfoName(ndr, NDR_BUFFERS, &r->name));
-			break;
-
-			case LSA_TRUSTED_DOMAIN_INFO_POSIX_OFFSET:
-			break;
-
-			case LSA_TRUSTED_DOMAIN_INFO_PASSWORD:
-				NDR_CHECK(ndr_pull_lsa_TrustDomainInfoPassword(ndr, NDR_BUFFERS, &r->password));
-			break;
-
-			case LSA_TRUSTED_DOMAIN_INFO_BASIC:
-				NDR_CHECK(ndr_pull_lsa_TrustDomainInfoBasic(ndr, NDR_BUFFERS, &r->info_basic));
-			break;
-
-			case LSA_TRUSTED_DOMAIN_INFO_INFO_EX:
-				NDR_CHECK(ndr_pull_lsa_TrustDomainInfoInfoEx(ndr, NDR_BUFFERS, &r->info_ex));
-			break;
-
-			case LSA_TRUSTED_DOMAIN_INFO_AUTH_INFO:
-				NDR_CHECK(ndr_pull_lsa_TrustDomainInfoAuthInfo(ndr, NDR_BUFFERS, &r->auth_info));
-			break;
-
-			case LSA_TRUSTED_DOMAIN_INFO_FULL_INFO:
-				NDR_CHECK(ndr_pull_lsa_TrustDomainInfoFullInfo(ndr, NDR_BUFFERS, &r->full_info));
-			break;
-
-			case LSA_TRUSTED_DOMAIN_INFO_11:
-				NDR_CHECK(ndr_pull_lsa_TrustDomainInfo11(ndr, NDR_BUFFERS, &r->info11));
-			break;
-
-			case LSA_TRUSTED_DOMAIN_INFO_INFO_ALL:
-				NDR_CHECK(ndr_pull_lsa_TrustDomainInfoInfoAll(ndr, NDR_BUFFERS, &r->info_all));
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_TrustedDomainInfo(struct ndr_print *ndr, const char *name, const union lsa_TrustedDomainInfo *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "lsa_TrustedDomainInfo");
-	switch (level) {
-		case LSA_TRUSTED_DOMAIN_INFO_NAME:
-			ndr_print_lsa_TrustDomainInfoName(ndr, "name", &r->name);
-		break;
-
-		case LSA_TRUSTED_DOMAIN_INFO_POSIX_OFFSET:
-			ndr_print_lsa_TrustDomainInfoPosixOffset(ndr, "posix_offset", &r->posix_offset);
-		break;
-
-		case LSA_TRUSTED_DOMAIN_INFO_PASSWORD:
-			ndr_print_lsa_TrustDomainInfoPassword(ndr, "password", &r->password);
-		break;
-
-		case LSA_TRUSTED_DOMAIN_INFO_BASIC:
-			ndr_print_lsa_TrustDomainInfoBasic(ndr, "info_basic", &r->info_basic);
-		break;
-
-		case LSA_TRUSTED_DOMAIN_INFO_INFO_EX:
-			ndr_print_lsa_TrustDomainInfoInfoEx(ndr, "info_ex", &r->info_ex);
-		break;
-
-		case LSA_TRUSTED_DOMAIN_INFO_AUTH_INFO:
-			ndr_print_lsa_TrustDomainInfoAuthInfo(ndr, "auth_info", &r->auth_info);
-		break;
-
-		case LSA_TRUSTED_DOMAIN_INFO_FULL_INFO:
-			ndr_print_lsa_TrustDomainInfoFullInfo(ndr, "full_info", &r->full_info);
-		break;
-
-		case LSA_TRUSTED_DOMAIN_INFO_11:
-			ndr_print_lsa_TrustDomainInfo11(ndr, "info11", &r->info11);
-		break;
-
-		case LSA_TRUSTED_DOMAIN_INFO_INFO_ALL:
-			ndr_print_lsa_TrustDomainInfoInfoAll(ndr, "info_all", &r->info_all);
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_lsa_DATA_BUF_PTR(struct ndr_push *ndr, int ndr_flags, const struct lsa_DATA_BUF_PTR *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->buf));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->buf) {
-			NDR_CHECK(ndr_push_lsa_DATA_BUF(ndr, NDR_SCALARS|NDR_BUFFERS, r->buf));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_DATA_BUF_PTR(struct ndr_pull *ndr, int ndr_flags, struct lsa_DATA_BUF_PTR *r)
-{
-	uint32_t _ptr_buf;
-	TALLOC_CTX *_mem_save_buf_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_buf));
-		if (_ptr_buf) {
-			NDR_PULL_ALLOC(ndr, r->buf);
-		} else {
-			r->buf = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->buf) {
-			_mem_save_buf_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->buf, 0);
-			NDR_CHECK(ndr_pull_lsa_DATA_BUF(ndr, NDR_SCALARS|NDR_BUFFERS, r->buf));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_buf_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_DATA_BUF_PTR(struct ndr_print *ndr, const char *name, const struct lsa_DATA_BUF_PTR *r)
-{
-	ndr_print_struct(ndr, name, "lsa_DATA_BUF_PTR");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "buf", r->buf);
-	ndr->depth++;
-	if (r->buf) {
-		ndr_print_lsa_DATA_BUF(ndr, "buf", r->buf);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_RightSet(struct ndr_push *ndr, int ndr_flags, const struct lsa_RightSet *r)
-{
-	uint32_t cntr_names_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->names));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->names) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_names_1 = 0; cntr_names_1 < r->count; cntr_names_1++) {
-				NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->names[cntr_names_1]));
-			}
-			for (cntr_names_1 = 0; cntr_names_1 < r->count; cntr_names_1++) {
-				NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->names[cntr_names_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_RightSet(struct ndr_pull *ndr, int ndr_flags, struct lsa_RightSet *r)
-{
-	uint32_t _ptr_names;
-	uint32_t cntr_names_1;
-	TALLOC_CTX *_mem_save_names_0;
-	TALLOC_CTX *_mem_save_names_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		if (r->count < 0 || r->count > 256) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_names));
-		if (_ptr_names) {
-			NDR_PULL_ALLOC(ndr, r->names);
-		} else {
-			r->names = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->names) {
-			_mem_save_names_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->names, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->names));
-			NDR_PULL_ALLOC_N(ndr, r->names, ndr_get_array_size(ndr, &r->names));
-			_mem_save_names_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->names, 0);
-			for (cntr_names_1 = 0; cntr_names_1 < r->count; cntr_names_1++) {
-				NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->names[cntr_names_1]));
-			}
-			for (cntr_names_1 = 0; cntr_names_1 < r->count; cntr_names_1++) {
-				NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->names[cntr_names_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_names_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_names_0, 0);
-		}
-		if (r->names) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->names, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_RightSet(struct ndr_print *ndr, const char *name, const struct lsa_RightSet *r)
-{
-	uint32_t cntr_names_1;
-	ndr_print_struct(ndr, name, "lsa_RightSet");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "names", r->names);
-	ndr->depth++;
-	if (r->names) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "names", r->count);
-		ndr->depth++;
-		for (cntr_names_1=0;cntr_names_1<r->count;cntr_names_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_names_1) != -1) {
-				ndr_print_lsa_StringLarge(ndr, "names", &r->names[cntr_names_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_DomainListEx(struct ndr_push *ndr, int ndr_flags, const struct lsa_DomainListEx *r)
-{
-	uint32_t cntr_domains_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->domains));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->domains) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_domains_1 = 0; cntr_domains_1 < r->count; cntr_domains_1++) {
-				NDR_CHECK(ndr_push_lsa_TrustDomainInfoInfoEx(ndr, NDR_SCALARS, &r->domains[cntr_domains_1]));
-			}
-			for (cntr_domains_1 = 0; cntr_domains_1 < r->count; cntr_domains_1++) {
-				NDR_CHECK(ndr_push_lsa_TrustDomainInfoInfoEx(ndr, NDR_BUFFERS, &r->domains[cntr_domains_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_DomainListEx(struct ndr_pull *ndr, int ndr_flags, struct lsa_DomainListEx *r)
-{
-	uint32_t _ptr_domains;
-	uint32_t cntr_domains_1;
-	TALLOC_CTX *_mem_save_domains_0;
-	TALLOC_CTX *_mem_save_domains_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domains));
-		if (_ptr_domains) {
-			NDR_PULL_ALLOC(ndr, r->domains);
-		} else {
-			r->domains = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->domains) {
-			_mem_save_domains_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->domains, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->domains));
-			NDR_PULL_ALLOC_N(ndr, r->domains, ndr_get_array_size(ndr, &r->domains));
-			_mem_save_domains_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->domains, 0);
-			for (cntr_domains_1 = 0; cntr_domains_1 < r->count; cntr_domains_1++) {
-				NDR_CHECK(ndr_pull_lsa_TrustDomainInfoInfoEx(ndr, NDR_SCALARS, &r->domains[cntr_domains_1]));
-			}
-			for (cntr_domains_1 = 0; cntr_domains_1 < r->count; cntr_domains_1++) {
-				NDR_CHECK(ndr_pull_lsa_TrustDomainInfoInfoEx(ndr, NDR_BUFFERS, &r->domains[cntr_domains_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domains_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domains_0, 0);
-		}
-		if (r->domains) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->domains, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_DomainListEx(struct ndr_print *ndr, const char *name, const struct lsa_DomainListEx *r)
-{
-	uint32_t cntr_domains_1;
-	ndr_print_struct(ndr, name, "lsa_DomainListEx");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "domains", r->domains);
-	ndr->depth++;
-	if (r->domains) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "domains", r->count);
-		ndr->depth++;
-		for (cntr_domains_1=0;cntr_domains_1<r->count;cntr_domains_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_domains_1) != -1) {
-				ndr_print_lsa_TrustDomainInfoInfoEx(ndr, "domains", &r->domains[cntr_domains_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_DomainInfoKerberos(struct ndr_push *ndr, int ndr_flags, const struct lsa_DomainInfoKerberos *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 8));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enforce_restrictions));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->service_tkt_lifetime));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->user_tkt_lifetime));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->user_tkt_renewaltime));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->clock_skew));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->unknown6));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_DomainInfoKerberos(struct ndr_pull *ndr, int ndr_flags, struct lsa_DomainInfoKerberos *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 8));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enforce_restrictions));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->service_tkt_lifetime));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->user_tkt_lifetime));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->user_tkt_renewaltime));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->clock_skew));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->unknown6));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_DomainInfoKerberos(struct ndr_print *ndr, const char *name, const struct lsa_DomainInfoKerberos *r)
-{
-	ndr_print_struct(ndr, name, "lsa_DomainInfoKerberos");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "enforce_restrictions", r->enforce_restrictions);
-	ndr_print_hyper(ndr, "service_tkt_lifetime", r->service_tkt_lifetime);
-	ndr_print_hyper(ndr, "user_tkt_lifetime", r->user_tkt_lifetime);
-	ndr_print_hyper(ndr, "user_tkt_renewaltime", r->user_tkt_renewaltime);
-	ndr_print_hyper(ndr, "clock_skew", r->clock_skew);
-	ndr_print_hyper(ndr, "unknown6", r->unknown6);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_DomainInfoEfs(struct ndr_push *ndr, int ndr_flags, const struct lsa_DomainInfoEfs *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->blob_size));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->efs_blob));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->efs_blob) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->blob_size));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->efs_blob, r->blob_size));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_DomainInfoEfs(struct ndr_pull *ndr, int ndr_flags, struct lsa_DomainInfoEfs *r)
-{
-	uint32_t _ptr_efs_blob;
-	TALLOC_CTX *_mem_save_efs_blob_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->blob_size));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_efs_blob));
-		if (_ptr_efs_blob) {
-			NDR_PULL_ALLOC(ndr, r->efs_blob);
-		} else {
-			r->efs_blob = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->efs_blob) {
-			_mem_save_efs_blob_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->efs_blob, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->efs_blob));
-			NDR_PULL_ALLOC_N(ndr, r->efs_blob, ndr_get_array_size(ndr, &r->efs_blob));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->efs_blob, ndr_get_array_size(ndr, &r->efs_blob)));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_efs_blob_0, 0);
-		}
-		if (r->efs_blob) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->efs_blob, r->blob_size));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_DomainInfoEfs(struct ndr_print *ndr, const char *name, const struct lsa_DomainInfoEfs *r)
-{
-	ndr_print_struct(ndr, name, "lsa_DomainInfoEfs");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "blob_size", r->blob_size);
-	ndr_print_ptr(ndr, "efs_blob", r->efs_blob);
-	ndr->depth++;
-	if (r->efs_blob) {
-		ndr_print_array_uint8(ndr, "efs_blob", r->efs_blob, r->blob_size);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_DomainInformationPolicy(struct ndr_push *ndr, int ndr_flags, const union lsa_DomainInformationPolicy *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case LSA_DOMAIN_INFO_POLICY_EFS: {
-				NDR_CHECK(ndr_push_lsa_DomainInfoEfs(ndr, NDR_SCALARS, &r->efs_info));
-			break; }
-
-			case LSA_DOMAIN_INFO_POLICY_KERBEROS: {
-				NDR_CHECK(ndr_push_lsa_DomainInfoKerberos(ndr, NDR_SCALARS, &r->kerberos_info));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case LSA_DOMAIN_INFO_POLICY_EFS:
-				NDR_CHECK(ndr_push_lsa_DomainInfoEfs(ndr, NDR_BUFFERS, &r->efs_info));
-			break;
-
-			case LSA_DOMAIN_INFO_POLICY_KERBEROS:
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_DomainInformationPolicy(struct ndr_pull *ndr, int ndr_flags, union lsa_DomainInformationPolicy *r)
-{
-	int level;
-	uint16_t _level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case LSA_DOMAIN_INFO_POLICY_EFS: {
-				NDR_CHECK(ndr_pull_lsa_DomainInfoEfs(ndr, NDR_SCALARS, &r->efs_info));
-			break; }
-
-			case LSA_DOMAIN_INFO_POLICY_KERBEROS: {
-				NDR_CHECK(ndr_pull_lsa_DomainInfoKerberos(ndr, NDR_SCALARS, &r->kerberos_info));
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case LSA_DOMAIN_INFO_POLICY_EFS:
-				NDR_CHECK(ndr_pull_lsa_DomainInfoEfs(ndr, NDR_BUFFERS, &r->efs_info));
-			break;
-
-			case LSA_DOMAIN_INFO_POLICY_KERBEROS:
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_DomainInformationPolicy(struct ndr_print *ndr, const char *name, const union lsa_DomainInformationPolicy *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "lsa_DomainInformationPolicy");
-	switch (level) {
-		case LSA_DOMAIN_INFO_POLICY_EFS:
-			ndr_print_lsa_DomainInfoEfs(ndr, "efs_info", &r->efs_info);
-		break;
-
-		case LSA_DOMAIN_INFO_POLICY_KERBEROS:
-			ndr_print_lsa_DomainInfoKerberos(ndr, "kerberos_info", &r->kerberos_info);
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_lsa_TranslatedName2(struct ndr_push *ndr, int ndr_flags, const struct lsa_TranslatedName2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_SidType(ndr, NDR_SCALARS, r->sid_type));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->name));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sid_index));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_TranslatedName2(struct ndr_pull *ndr, int ndr_flags, struct lsa_TranslatedName2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_SidType(ndr, NDR_SCALARS, &r->sid_type));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->name));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sid_index));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_TranslatedName2(struct ndr_print *ndr, const char *name, const struct lsa_TranslatedName2 *r)
-{
-	ndr_print_struct(ndr, name, "lsa_TranslatedName2");
-	ndr->depth++;
-	ndr_print_lsa_SidType(ndr, "sid_type", r->sid_type);
-	ndr_print_lsa_String(ndr, "name", &r->name);
-	ndr_print_uint32(ndr, "sid_index", r->sid_index);
-	ndr_print_uint32(ndr, "unknown", r->unknown);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_TransNameArray2(struct ndr_push *ndr, int ndr_flags, const struct lsa_TransNameArray2 *r)
-{
-	uint32_t cntr_names_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->names));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->names) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_names_1 = 0; cntr_names_1 < r->count; cntr_names_1++) {
-				NDR_CHECK(ndr_push_lsa_TranslatedName2(ndr, NDR_SCALARS, &r->names[cntr_names_1]));
-			}
-			for (cntr_names_1 = 0; cntr_names_1 < r->count; cntr_names_1++) {
-				NDR_CHECK(ndr_push_lsa_TranslatedName2(ndr, NDR_BUFFERS, &r->names[cntr_names_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_TransNameArray2(struct ndr_pull *ndr, int ndr_flags, struct lsa_TransNameArray2 *r)
-{
-	uint32_t _ptr_names;
-	uint32_t cntr_names_1;
-	TALLOC_CTX *_mem_save_names_0;
-	TALLOC_CTX *_mem_save_names_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		if (r->count < 0 || r->count > 1000) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_names));
-		if (_ptr_names) {
-			NDR_PULL_ALLOC(ndr, r->names);
-		} else {
-			r->names = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->names) {
-			_mem_save_names_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->names, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->names));
-			NDR_PULL_ALLOC_N(ndr, r->names, ndr_get_array_size(ndr, &r->names));
-			_mem_save_names_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->names, 0);
-			for (cntr_names_1 = 0; cntr_names_1 < r->count; cntr_names_1++) {
-				NDR_CHECK(ndr_pull_lsa_TranslatedName2(ndr, NDR_SCALARS, &r->names[cntr_names_1]));
-			}
-			for (cntr_names_1 = 0; cntr_names_1 < r->count; cntr_names_1++) {
-				NDR_CHECK(ndr_pull_lsa_TranslatedName2(ndr, NDR_BUFFERS, &r->names[cntr_names_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_names_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_names_0, 0);
-		}
-		if (r->names) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->names, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_TransNameArray2(struct ndr_print *ndr, const char *name, const struct lsa_TransNameArray2 *r)
-{
-	uint32_t cntr_names_1;
-	ndr_print_struct(ndr, name, "lsa_TransNameArray2");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "names", r->names);
-	ndr->depth++;
-	if (r->names) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "names", r->count);
-		ndr->depth++;
-		for (cntr_names_1=0;cntr_names_1<r->count;cntr_names_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_names_1) != -1) {
-				ndr_print_lsa_TranslatedName2(ndr, "names", &r->names[cntr_names_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_TranslatedSid2(struct ndr_push *ndr, int ndr_flags, const struct lsa_TranslatedSid2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_SidType(ndr, NDR_SCALARS, r->sid_type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sid_index));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_TranslatedSid2(struct ndr_pull *ndr, int ndr_flags, struct lsa_TranslatedSid2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_SidType(ndr, NDR_SCALARS, &r->sid_type));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sid_index));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_TranslatedSid2(struct ndr_print *ndr, const char *name, const struct lsa_TranslatedSid2 *r)
-{
-	ndr_print_struct(ndr, name, "lsa_TranslatedSid2");
-	ndr->depth++;
-	ndr_print_lsa_SidType(ndr, "sid_type", r->sid_type);
-	ndr_print_uint32(ndr, "rid", r->rid);
-	ndr_print_uint32(ndr, "sid_index", r->sid_index);
-	ndr_print_uint32(ndr, "unknown", r->unknown);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_TransSidArray2(struct ndr_push *ndr, int ndr_flags, const struct lsa_TransSidArray2 *r)
-{
-	uint32_t cntr_sids_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sids));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->sids) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_sids_1 = 0; cntr_sids_1 < r->count; cntr_sids_1++) {
-				NDR_CHECK(ndr_push_lsa_TranslatedSid2(ndr, NDR_SCALARS, &r->sids[cntr_sids_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_TransSidArray2(struct ndr_pull *ndr, int ndr_flags, struct lsa_TransSidArray2 *r)
-{
-	uint32_t _ptr_sids;
-	uint32_t cntr_sids_1;
-	TALLOC_CTX *_mem_save_sids_0;
-	TALLOC_CTX *_mem_save_sids_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		if (r->count < 0 || r->count > 1000) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sids));
-		if (_ptr_sids) {
-			NDR_PULL_ALLOC(ndr, r->sids);
-		} else {
-			r->sids = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->sids) {
-			_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sids, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->sids));
-			NDR_PULL_ALLOC_N(ndr, r->sids, ndr_get_array_size(ndr, &r->sids));
-			_mem_save_sids_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sids, 0);
-			for (cntr_sids_1 = 0; cntr_sids_1 < r->count; cntr_sids_1++) {
-				NDR_CHECK(ndr_pull_lsa_TranslatedSid2(ndr, NDR_SCALARS, &r->sids[cntr_sids_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, 0);
-		}
-		if (r->sids) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->sids, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_TransSidArray2(struct ndr_print *ndr, const char *name, const struct lsa_TransSidArray2 *r)
-{
-	uint32_t cntr_sids_1;
-	ndr_print_struct(ndr, name, "lsa_TransSidArray2");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "sids", r->sids);
-	ndr->depth++;
-	if (r->sids) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "sids", r->count);
-		ndr->depth++;
-		for (cntr_sids_1=0;cntr_sids_1<r->count;cntr_sids_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_sids_1) != -1) {
-				ndr_print_lsa_TranslatedSid2(ndr, "sids", &r->sids[cntr_sids_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_TranslatedSid3(struct ndr_push *ndr, int ndr_flags, const struct lsa_TranslatedSid3 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_SidType(ndr, NDR_SCALARS, r->sid_type));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sid));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sid_index));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->sid) {
-			NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_TranslatedSid3(struct ndr_pull *ndr, int ndr_flags, struct lsa_TranslatedSid3 *r)
-{
-	uint32_t _ptr_sid;
-	TALLOC_CTX *_mem_save_sid_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_SidType(ndr, NDR_SCALARS, &r->sid_type));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sid));
-		if (_ptr_sid) {
-			NDR_PULL_ALLOC(ndr, r->sid);
-		} else {
-			r->sid = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sid_index));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->sid) {
-			_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sid, 0);
-			NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_TranslatedSid3(struct ndr_print *ndr, const char *name, const struct lsa_TranslatedSid3 *r)
-{
-	ndr_print_struct(ndr, name, "lsa_TranslatedSid3");
-	ndr->depth++;
-	ndr_print_lsa_SidType(ndr, "sid_type", r->sid_type);
-	ndr_print_ptr(ndr, "sid", r->sid);
-	ndr->depth++;
-	if (r->sid) {
-		ndr_print_dom_sid2(ndr, "sid", r->sid);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "sid_index", r->sid_index);
-	ndr_print_uint32(ndr, "unknown", r->unknown);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_TransSidArray3(struct ndr_push *ndr, int ndr_flags, const struct lsa_TransSidArray3 *r)
-{
-	uint32_t cntr_sids_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sids));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->sids) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_sids_1 = 0; cntr_sids_1 < r->count; cntr_sids_1++) {
-				NDR_CHECK(ndr_push_lsa_TranslatedSid3(ndr, NDR_SCALARS, &r->sids[cntr_sids_1]));
-			}
-			for (cntr_sids_1 = 0; cntr_sids_1 < r->count; cntr_sids_1++) {
-				NDR_CHECK(ndr_push_lsa_TranslatedSid3(ndr, NDR_BUFFERS, &r->sids[cntr_sids_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_TransSidArray3(struct ndr_pull *ndr, int ndr_flags, struct lsa_TransSidArray3 *r)
-{
-	uint32_t _ptr_sids;
-	uint32_t cntr_sids_1;
-	TALLOC_CTX *_mem_save_sids_0;
-	TALLOC_CTX *_mem_save_sids_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		if (r->count < 0 || r->count > 1000) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sids));
-		if (_ptr_sids) {
-			NDR_PULL_ALLOC(ndr, r->sids);
-		} else {
-			r->sids = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->sids) {
-			_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sids, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->sids));
-			NDR_PULL_ALLOC_N(ndr, r->sids, ndr_get_array_size(ndr, &r->sids));
-			_mem_save_sids_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sids, 0);
-			for (cntr_sids_1 = 0; cntr_sids_1 < r->count; cntr_sids_1++) {
-				NDR_CHECK(ndr_pull_lsa_TranslatedSid3(ndr, NDR_SCALARS, &r->sids[cntr_sids_1]));
-			}
-			for (cntr_sids_1 = 0; cntr_sids_1 < r->count; cntr_sids_1++) {
-				NDR_CHECK(ndr_pull_lsa_TranslatedSid3(ndr, NDR_BUFFERS, &r->sids[cntr_sids_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, 0);
-		}
-		if (r->sids) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->sids, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_TransSidArray3(struct ndr_print *ndr, const char *name, const struct lsa_TransSidArray3 *r)
-{
-	uint32_t cntr_sids_1;
-	ndr_print_struct(ndr, name, "lsa_TransSidArray3");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "sids", r->sids);
-	ndr->depth++;
-	if (r->sids) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "sids", r->count);
-		ndr->depth++;
-		for (cntr_sids_1=0;cntr_sids_1<r->count;cntr_sids_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_sids_1) != -1) {
-				ndr_print_lsa_TranslatedSid3(ndr, "sids", &r->sids[cntr_sids_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_ForestTrustBinaryData(struct ndr_push *ndr, int ndr_flags, const struct lsa_ForestTrustBinaryData *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->length));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->data));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->data) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->length));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->data, r->length));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_ForestTrustBinaryData(struct ndr_pull *ndr, int ndr_flags, struct lsa_ForestTrustBinaryData *r)
-{
-	uint32_t _ptr_data;
-	TALLOC_CTX *_mem_save_data_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->length));
-		if (r->length < 0 || r->length > 131072) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_data));
-		if (_ptr_data) {
-			NDR_PULL_ALLOC(ndr, r->data);
-		} else {
-			r->data = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->data) {
-			_mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->data, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->data));
-			NDR_PULL_ALLOC_N(ndr, r->data, ndr_get_array_size(ndr, &r->data));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->data, ndr_get_array_size(ndr, &r->data)));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, 0);
-		}
-		if (r->data) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->data, r->length));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_ForestTrustBinaryData(struct ndr_print *ndr, const char *name, const struct lsa_ForestTrustBinaryData *r)
-{
-	ndr_print_struct(ndr, name, "lsa_ForestTrustBinaryData");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "length", r->length);
-	ndr_print_ptr(ndr, "data", r->data);
-	ndr->depth++;
-	if (r->data) {
-		ndr_print_array_uint8(ndr, "data", r->data, r->length);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_ForestTrustDomainInfo(struct ndr_push *ndr, int ndr_flags, const struct lsa_ForestTrustDomainInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->domain_sid));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->dns_domain_name));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->netbios_domain_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->domain_sid) {
-			NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->domain_sid));
-		}
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->dns_domain_name));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->netbios_domain_name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_ForestTrustDomainInfo(struct ndr_pull *ndr, int ndr_flags, struct lsa_ForestTrustDomainInfo *r)
-{
-	uint32_t _ptr_domain_sid;
-	TALLOC_CTX *_mem_save_domain_sid_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain_sid));
-		if (_ptr_domain_sid) {
-			NDR_PULL_ALLOC(ndr, r->domain_sid);
-		} else {
-			r->domain_sid = NULL;
-		}
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->dns_domain_name));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->netbios_domain_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->domain_sid) {
-			_mem_save_domain_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->domain_sid, 0);
-			NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->domain_sid));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_sid_0, 0);
-		}
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->dns_domain_name));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->netbios_domain_name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_ForestTrustDomainInfo(struct ndr_print *ndr, const char *name, const struct lsa_ForestTrustDomainInfo *r)
-{
-	ndr_print_struct(ndr, name, "lsa_ForestTrustDomainInfo");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "domain_sid", r->domain_sid);
-	ndr->depth++;
-	if (r->domain_sid) {
-		ndr_print_dom_sid2(ndr, "domain_sid", r->domain_sid);
-	}
-	ndr->depth--;
-	ndr_print_lsa_StringLarge(ndr, "dns_domain_name", &r->dns_domain_name);
-	ndr_print_lsa_StringLarge(ndr, "netbios_domain_name", &r->netbios_domain_name);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_ForestTrustData(struct ndr_push *ndr, int ndr_flags, const union lsa_ForestTrustData *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case LSA_FOREST_TRUST_TOP_LEVEL_NAME: {
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->top_level_name));
-			break; }
-
-			case LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX: {
-				NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->top_level_name_ex));
-			break; }
-
-			case LSA_FOREST_TRUST_DOMAIN_INFO: {
-				NDR_CHECK(ndr_push_lsa_ForestTrustDomainInfo(ndr, NDR_SCALARS, &r->domain_info));
-			break; }
-
-			default: {
-				NDR_CHECK(ndr_push_lsa_ForestTrustBinaryData(ndr, NDR_SCALARS, &r->data));
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case LSA_FOREST_TRUST_TOP_LEVEL_NAME:
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->top_level_name));
-			break;
-
-			case LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX:
-				NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->top_level_name_ex));
-			break;
-
-			case LSA_FOREST_TRUST_DOMAIN_INFO:
-				NDR_CHECK(ndr_push_lsa_ForestTrustDomainInfo(ndr, NDR_BUFFERS, &r->domain_info));
-			break;
-
-			default:
-				NDR_CHECK(ndr_push_lsa_ForestTrustBinaryData(ndr, NDR_BUFFERS, &r->data));
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_ForestTrustData(struct ndr_pull *ndr, int ndr_flags, union lsa_ForestTrustData *r)
-{
-	int level;
-	uint32_t _level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case LSA_FOREST_TRUST_TOP_LEVEL_NAME: {
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->top_level_name));
-			break; }
-
-			case LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX: {
-				NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->top_level_name_ex));
-			break; }
-
-			case LSA_FOREST_TRUST_DOMAIN_INFO: {
-				NDR_CHECK(ndr_pull_lsa_ForestTrustDomainInfo(ndr, NDR_SCALARS, &r->domain_info));
-			break; }
-
-			default: {
-				NDR_CHECK(ndr_pull_lsa_ForestTrustBinaryData(ndr, NDR_SCALARS, &r->data));
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case LSA_FOREST_TRUST_TOP_LEVEL_NAME:
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->top_level_name));
-			break;
-
-			case LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX:
-				NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->top_level_name_ex));
-			break;
-
-			case LSA_FOREST_TRUST_DOMAIN_INFO:
-				NDR_CHECK(ndr_pull_lsa_ForestTrustDomainInfo(ndr, NDR_BUFFERS, &r->domain_info));
-			break;
-
-			default:
-				NDR_CHECK(ndr_pull_lsa_ForestTrustBinaryData(ndr, NDR_BUFFERS, &r->data));
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_ForestTrustData(struct ndr_print *ndr, const char *name, const union lsa_ForestTrustData *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "lsa_ForestTrustData");
-	switch (level) {
-		case LSA_FOREST_TRUST_TOP_LEVEL_NAME:
-			ndr_print_lsa_String(ndr, "top_level_name", &r->top_level_name);
-		break;
-
-		case LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX:
-			ndr_print_lsa_StringLarge(ndr, "top_level_name_ex", &r->top_level_name_ex);
-		break;
-
-		case LSA_FOREST_TRUST_DOMAIN_INFO:
-			ndr_print_lsa_ForestTrustDomainInfo(ndr, "domain_info", &r->domain_info);
-		break;
-
-		default:
-			ndr_print_lsa_ForestTrustBinaryData(ndr, "data", &r->data);
-		break;
-
-	}
-}
-
-static enum ndr_err_code ndr_push_lsa_ForestTrustRecordType(struct ndr_push *ndr, int ndr_flags, enum lsa_ForestTrustRecordType r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_ForestTrustRecordType(struct ndr_pull *ndr, int ndr_flags, enum lsa_ForestTrustRecordType *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_ForestTrustRecordType(struct ndr_print *ndr, const char *name, enum lsa_ForestTrustRecordType r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case LSA_FOREST_TRUST_TOP_LEVEL_NAME: val = "LSA_FOREST_TRUST_TOP_LEVEL_NAME"; break;
-		case LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX: val = "LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX"; break;
-		case LSA_FOREST_TRUST_DOMAIN_INFO: val = "LSA_FOREST_TRUST_DOMAIN_INFO"; break;
-		case LSA_FOREST_TRUST_RECORD_TYPE_LAST: val = "LSA_FOREST_TRUST_RECORD_TYPE_LAST"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_lsa_ForestTrustRecord(struct ndr_push *ndr, int ndr_flags, const struct lsa_ForestTrustRecord *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 8));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->flags));
-		NDR_CHECK(ndr_push_lsa_ForestTrustRecordType(ndr, NDR_SCALARS, r->level));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->unknown));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->forest_trust_data, r->level));
-		NDR_CHECK(ndr_push_lsa_ForestTrustData(ndr, NDR_SCALARS, &r->forest_trust_data));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_ForestTrustData(ndr, NDR_BUFFERS, &r->forest_trust_data));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_ForestTrustRecord(struct ndr_pull *ndr, int ndr_flags, struct lsa_ForestTrustRecord *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 8));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->flags));
-		NDR_CHECK(ndr_pull_lsa_ForestTrustRecordType(ndr, NDR_SCALARS, &r->level));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->unknown));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->forest_trust_data, r->level));
-		NDR_CHECK(ndr_pull_lsa_ForestTrustData(ndr, NDR_SCALARS, &r->forest_trust_data));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_ForestTrustData(ndr, NDR_BUFFERS, &r->forest_trust_data));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_ForestTrustRecord(struct ndr_print *ndr, const char *name, const struct lsa_ForestTrustRecord *r)
-{
-	ndr_print_struct(ndr, name, "lsa_ForestTrustRecord");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "flags", r->flags);
-	ndr_print_lsa_ForestTrustRecordType(ndr, "level", r->level);
-	ndr_print_hyper(ndr, "unknown", r->unknown);
-	ndr_print_set_switch_value(ndr, &r->forest_trust_data, r->level);
-	ndr_print_lsa_ForestTrustData(ndr, "forest_trust_data", &r->forest_trust_data);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_ForestTrustInformation(struct ndr_push *ndr, int ndr_flags, const struct lsa_ForestTrustInformation *r)
-{
-	uint32_t cntr_entries_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->entries));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->entries) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_entries_1 = 0; cntr_entries_1 < r->count; cntr_entries_1++) {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->entries[cntr_entries_1]));
-			}
-			for (cntr_entries_1 = 0; cntr_entries_1 < r->count; cntr_entries_1++) {
-				if (r->entries[cntr_entries_1]) {
-					NDR_CHECK(ndr_push_lsa_ForestTrustRecord(ndr, NDR_SCALARS|NDR_BUFFERS, r->entries[cntr_entries_1]));
-				}
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_ForestTrustInformation(struct ndr_pull *ndr, int ndr_flags, struct lsa_ForestTrustInformation *r)
-{
-	uint32_t _ptr_entries;
-	uint32_t cntr_entries_1;
-	TALLOC_CTX *_mem_save_entries_0;
-	TALLOC_CTX *_mem_save_entries_1;
-	TALLOC_CTX *_mem_save_entries_2;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		if (r->count < 0 || r->count > 4000) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_entries));
-		if (_ptr_entries) {
-			NDR_PULL_ALLOC(ndr, r->entries);
-		} else {
-			r->entries = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->entries) {
-			_mem_save_entries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->entries, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->entries));
-			NDR_PULL_ALLOC_N(ndr, r->entries, ndr_get_array_size(ndr, &r->entries));
-			_mem_save_entries_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->entries, 0);
-			for (cntr_entries_1 = 0; cntr_entries_1 < r->count; cntr_entries_1++) {
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_entries));
-				if (_ptr_entries) {
-					NDR_PULL_ALLOC(ndr, r->entries[cntr_entries_1]);
-				} else {
-					r->entries[cntr_entries_1] = NULL;
-				}
-			}
-			for (cntr_entries_1 = 0; cntr_entries_1 < r->count; cntr_entries_1++) {
-				if (r->entries[cntr_entries_1]) {
-					_mem_save_entries_2 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->entries[cntr_entries_1], 0);
-					NDR_CHECK(ndr_pull_lsa_ForestTrustRecord(ndr, NDR_SCALARS|NDR_BUFFERS, r->entries[cntr_entries_1]));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entries_2, 0);
-				}
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entries_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entries_0, 0);
-		}
-		if (r->entries) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->entries, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_ForestTrustInformation(struct ndr_print *ndr, const char *name, const struct lsa_ForestTrustInformation *r)
-{
-	uint32_t cntr_entries_1;
-	ndr_print_struct(ndr, name, "lsa_ForestTrustInformation");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "entries", r->entries);
-	ndr->depth++;
-	if (r->entries) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "entries", r->count);
-		ndr->depth++;
-		for (cntr_entries_1=0;cntr_entries_1<r->count;cntr_entries_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_entries_1) != -1) {
-				ndr_print_ptr(ndr, "entries", r->entries[cntr_entries_1]);
-				ndr->depth++;
-				if (r->entries[cntr_entries_1]) {
-					ndr_print_lsa_ForestTrustRecord(ndr, "entries", r->entries[cntr_entries_1]);
-				}
-				ndr->depth--;
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_Close(struct ndr_push *ndr, int flags, const struct lsa_Close *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_Close(struct ndr_pull *ndr, int flags, struct lsa_Close *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.handle);
-		*r->out.handle = *r->in.handle;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_Close(struct ndr_print *ndr, const char *name, int flags, const struct lsa_Close *r)
-{
-	ndr_print_struct(ndr, name, "lsa_Close");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_Close");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_Close");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->out.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->out.handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_Delete(struct ndr_push *ndr, int flags, const struct lsa_Delete *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_Delete(struct ndr_pull *ndr, int flags, struct lsa_Delete *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_Delete(struct ndr_print *ndr, const char *name, int flags, const struct lsa_Delete *r)
-{
-	ndr_print_struct(ndr, name, "lsa_Delete");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_Delete");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_Delete");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_EnumPrivs(struct ndr_push *ndr, int flags, const struct lsa_EnumPrivs *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.resume_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_count));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.resume_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		if (r->out.privs == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_PrivArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.privs));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_EnumPrivs(struct ndr_pull *ndr, int flags, struct lsa_EnumPrivs *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_resume_handle_0;
-	TALLOC_CTX *_mem_save_privs_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.resume_handle);
-		}
-		_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_count));
-		NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		*r->out.resume_handle = *r->in.resume_handle;
-		NDR_PULL_ALLOC(ndr, r->out.privs);
-		ZERO_STRUCTP(r->out.privs);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		}
-		_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.privs);
-		}
-		_mem_save_privs_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.privs, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_PrivArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.privs));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_privs_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_EnumPrivs(struct ndr_print *ndr, const char *name, int flags, const struct lsa_EnumPrivs *r)
-{
-	ndr_print_struct(ndr, name, "lsa_EnumPrivs");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_EnumPrivs");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "max_count", r->in.max_count);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_EnumPrivs");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "privs", r->out.privs);
-		ndr->depth++;
-		ndr_print_lsa_PrivArray(ndr, "privs", r->out.privs);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_QuerySecurity(struct ndr_push *ndr, int flags, const struct lsa_QuerySecurity *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_security_secinfo(ndr, NDR_SCALARS, r->in.sec_info));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.sdbuf == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.sdbuf));
-		if (*r->out.sdbuf) {
-			NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.sdbuf));
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_QuerySecurity(struct ndr_pull *ndr, int flags, struct lsa_QuerySecurity *r)
-{
-	uint32_t _ptr_sdbuf;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_sdbuf_0;
-	TALLOC_CTX *_mem_save_sdbuf_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_security_secinfo(ndr, NDR_SCALARS, &r->in.sec_info));
-		NDR_PULL_ALLOC(ndr, r->out.sdbuf);
-		ZERO_STRUCTP(r->out.sdbuf);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.sdbuf);
-		}
-		_mem_save_sdbuf_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.sdbuf, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sdbuf));
-		if (_ptr_sdbuf) {
-			NDR_PULL_ALLOC(ndr, *r->out.sdbuf);
-		} else {
-			*r->out.sdbuf = NULL;
-		}
-		if (*r->out.sdbuf) {
-			_mem_save_sdbuf_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.sdbuf, 0);
-			NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.sdbuf));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sdbuf_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sdbuf_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_QuerySecurity(struct ndr_print *ndr, const char *name, int flags, const struct lsa_QuerySecurity *r)
-{
-	ndr_print_struct(ndr, name, "lsa_QuerySecurity");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_QuerySecurity");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_security_secinfo(ndr, "sec_info", r->in.sec_info);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_QuerySecurity");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "sdbuf", r->out.sdbuf);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "sdbuf", *r->out.sdbuf);
-		ndr->depth++;
-		if (*r->out.sdbuf) {
-			ndr_print_sec_desc_buf(ndr, "sdbuf", *r->out.sdbuf);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_SetSecObj(struct ndr_push *ndr, int flags, const struct lsa_SetSecObj *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_security_secinfo(ndr, NDR_SCALARS, r->in.sec_info));
-		if (r->in.sdbuf == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sdbuf));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_SetSecObj(struct ndr_pull *ndr, int flags, struct lsa_SetSecObj *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_sdbuf_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_security_secinfo(ndr, NDR_SCALARS, &r->in.sec_info));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sdbuf);
-		}
-		_mem_save_sdbuf_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sdbuf, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sdbuf));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sdbuf_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_SetSecObj(struct ndr_print *ndr, const char *name, int flags, const struct lsa_SetSecObj *r)
-{
-	ndr_print_struct(ndr, name, "lsa_SetSecObj");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_SetSecObj");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_security_secinfo(ndr, "sec_info", r->in.sec_info);
-		ndr_print_ptr(ndr, "sdbuf", r->in.sdbuf);
-		ndr->depth++;
-		ndr_print_sec_desc_buf(ndr, "sdbuf", r->in.sdbuf);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_SetSecObj");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_ChangePassword(struct ndr_push *ndr, int flags, const struct lsa_ChangePassword *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_ChangePassword(struct ndr_pull *ndr, int flags, struct lsa_ChangePassword *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_ChangePassword(struct ndr_print *ndr, const char *name, int flags, const struct lsa_ChangePassword *r)
-{
-	ndr_print_struct(ndr, name, "lsa_ChangePassword");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_ChangePassword");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_ChangePassword");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_OpenPolicy(struct ndr_push *ndr, int flags, const struct lsa_OpenPolicy *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.system_name));
-		if (r->in.system_name) {
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, *r->in.system_name));
-		}
-		if (r->in.attr == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_ObjectAttribute(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.attr));
-		NDR_CHECK(ndr_push_lsa_PolicyAccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_OpenPolicy(struct ndr_pull *ndr, int flags, struct lsa_OpenPolicy *r)
-{
-	uint32_t _ptr_system_name;
-	TALLOC_CTX *_mem_save_system_name_0;
-	TALLOC_CTX *_mem_save_attr_0;
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_system_name));
-		if (_ptr_system_name) {
-			NDR_PULL_ALLOC(ndr, r->in.system_name);
-		} else {
-			r->in.system_name = NULL;
-		}
-		if (r->in.system_name) {
-			_mem_save_system_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.system_name, 0);
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, r->in.system_name));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_system_name_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.attr);
-		}
-		_mem_save_attr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.attr, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_ObjectAttribute(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.attr));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_attr_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_PolicyAccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.handle);
-		ZERO_STRUCTP(r->out.handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_OpenPolicy(struct ndr_print *ndr, const char *name, int flags, const struct lsa_OpenPolicy *r)
-{
-	ndr_print_struct(ndr, name, "lsa_OpenPolicy");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_OpenPolicy");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "system_name", r->in.system_name);
-		ndr->depth++;
-		if (r->in.system_name) {
-			ndr_print_uint16(ndr, "system_name", *r->in.system_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "attr", r->in.attr);
-		ndr->depth++;
-		ndr_print_lsa_ObjectAttribute(ndr, "attr", r->in.attr);
-		ndr->depth--;
-		ndr_print_lsa_PolicyAccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_OpenPolicy");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->out.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->out.handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_QueryInfoPolicy(struct ndr_push *ndr, int flags, const struct lsa_QueryInfoPolicy *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_lsa_PolicyInfo(ndr, NDR_SCALARS, r->in.level));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.info));
-		if (*r->out.info) {
-			NDR_CHECK(ndr_push_set_switch_value(ndr, *r->out.info, r->in.level));
-			NDR_CHECK(ndr_push_lsa_PolicyInformation(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_QueryInfoPolicy(struct ndr_pull *ndr, int flags, struct lsa_QueryInfoPolicy *r)
-{
-	uint32_t _ptr_info;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_info_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_PolicyInfo(ndr, NDR_SCALARS, &r->in.level));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, *r->out.info);
-		} else {
-			*r->out.info = NULL;
-		}
-		if (*r->out.info) {
-			_mem_save_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.info, 0);
-			NDR_CHECK(ndr_pull_set_switch_value(ndr, *r->out.info, r->in.level));
-			NDR_CHECK(ndr_pull_lsa_PolicyInformation(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_QueryInfoPolicy(struct ndr_print *ndr, const char *name, int flags, const struct lsa_QueryInfoPolicy *r)
-{
-	ndr_print_struct(ndr, name, "lsa_QueryInfoPolicy");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_QueryInfoPolicy");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_lsa_PolicyInfo(ndr, "level", r->in.level);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_QueryInfoPolicy");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", *r->out.info);
-		ndr->depth++;
-		if (*r->out.info) {
-			ndr_print_set_switch_value(ndr, *r->out.info, r->in.level);
-			ndr_print_lsa_PolicyInformation(ndr, "info", *r->out.info);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_SetInfoPolicy(struct ndr_push *ndr, int flags, const struct lsa_SetInfoPolicy *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_lsa_PolicyInfo(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.info, r->in.level));
-		NDR_CHECK(ndr_push_lsa_PolicyInformation(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_SetInfoPolicy(struct ndr_pull *ndr, int flags, struct lsa_SetInfoPolicy *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_PolicyInfo(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.info, r->in.level));
-		NDR_CHECK(ndr_pull_lsa_PolicyInformation(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_SetInfoPolicy(struct ndr_print *ndr, const char *name, int flags, const struct lsa_SetInfoPolicy *r)
-{
-	ndr_print_struct(ndr, name, "lsa_SetInfoPolicy");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_SetInfoPolicy");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_lsa_PolicyInfo(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "info", r->in.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->in.info, r->in.level);
-		ndr_print_lsa_PolicyInformation(ndr, "info", r->in.info);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_SetInfoPolicy");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_ClearAuditLog(struct ndr_push *ndr, int flags, const struct lsa_ClearAuditLog *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_ClearAuditLog(struct ndr_pull *ndr, int flags, struct lsa_ClearAuditLog *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_ClearAuditLog(struct ndr_print *ndr, const char *name, int flags, const struct lsa_ClearAuditLog *r)
-{
-	ndr_print_struct(ndr, name, "lsa_ClearAuditLog");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_ClearAuditLog");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_ClearAuditLog");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_CreateAccount(struct ndr_push *ndr, int flags, const struct lsa_CreateAccount *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.sid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sid));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.acct_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.acct_handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_CreateAccount(struct ndr_pull *ndr, int flags, struct lsa_CreateAccount *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_sid_0;
-	TALLOC_CTX *_mem_save_acct_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sid);
-		}
-		_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sid));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.acct_handle);
-		ZERO_STRUCTP(r->out.acct_handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.acct_handle);
-		}
-		_mem_save_acct_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.acct_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.acct_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_acct_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_CreateAccount(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CreateAccount *r)
-{
-	ndr_print_struct(ndr, name, "lsa_CreateAccount");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_CreateAccount");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sid", r->in.sid);
-		ndr->depth++;
-		ndr_print_dom_sid2(ndr, "sid", r->in.sid);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_CreateAccount");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "acct_handle", r->out.acct_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "acct_handle", r->out.acct_handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_EnumAccounts(struct ndr_push *ndr, int flags, const struct lsa_EnumAccounts *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.resume_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.num_entries));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.resume_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		if (r->out.sids == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_SidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sids));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_EnumAccounts(struct ndr_pull *ndr, int flags, struct lsa_EnumAccounts *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_resume_handle_0;
-	TALLOC_CTX *_mem_save_sids_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.resume_handle);
-		}
-		_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.num_entries));
-		if (r->in.num_entries < 0 || r->in.num_entries > 8192) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		*r->out.resume_handle = *r->in.resume_handle;
-		NDR_PULL_ALLOC(ndr, r->out.sids);
-		ZERO_STRUCTP(r->out.sids);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		}
-		_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.sids);
-		}
-		_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.sids, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_SidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sids));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_EnumAccounts(struct ndr_print *ndr, const char *name, int flags, const struct lsa_EnumAccounts *r)
-{
-	ndr_print_struct(ndr, name, "lsa_EnumAccounts");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_EnumAccounts");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "num_entries", r->in.num_entries);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_EnumAccounts");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sids", r->out.sids);
-		ndr->depth++;
-		ndr_print_lsa_SidArray(ndr, "sids", r->out.sids);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_CreateTrustedDomain(struct ndr_push *ndr, int flags, const struct lsa_CreateTrustedDomain *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_DomainInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.trustdom_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.trustdom_handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_CreateTrustedDomain(struct ndr_pull *ndr, int flags, struct lsa_CreateTrustedDomain *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_trustdom_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_DomainInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.trustdom_handle);
-		ZERO_STRUCTP(r->out.trustdom_handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.trustdom_handle);
-		}
-		_mem_save_trustdom_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.trustdom_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.trustdom_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_trustdom_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_CreateTrustedDomain(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CreateTrustedDomain *r)
-{
-	ndr_print_struct(ndr, name, "lsa_CreateTrustedDomain");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_CreateTrustedDomain");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "info", r->in.info);
-		ndr->depth++;
-		ndr_print_lsa_DomainInfo(ndr, "info", r->in.info);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_CreateTrustedDomain");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "trustdom_handle", r->out.trustdom_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "trustdom_handle", r->out.trustdom_handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_EnumTrustDom(struct ndr_push *ndr, int flags, const struct lsa_EnumTrustDom *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.resume_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_size));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.resume_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		if (r->out.domains == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_DomainList(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.domains));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_EnumTrustDom(struct ndr_pull *ndr, int flags, struct lsa_EnumTrustDom *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_resume_handle_0;
-	TALLOC_CTX *_mem_save_domains_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.resume_handle);
-		}
-		_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_size));
-		NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		*r->out.resume_handle = *r->in.resume_handle;
-		NDR_PULL_ALLOC(ndr, r->out.domains);
-		ZERO_STRUCTP(r->out.domains);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		}
-		_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.domains);
-		}
-		_mem_save_domains_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.domains, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_DomainList(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.domains));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domains_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_EnumTrustDom(struct ndr_print *ndr, const char *name, int flags, const struct lsa_EnumTrustDom *r)
-{
-	ndr_print_struct(ndr, name, "lsa_EnumTrustDom");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_EnumTrustDom");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "max_size", r->in.max_size);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_EnumTrustDom");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "domains", r->out.domains);
-		ndr->depth++;
-		ndr_print_lsa_DomainList(ndr, "domains", r->out.domains);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_LookupNames(struct ndr_push *ndr, int flags, const struct lsa_LookupNames *r)
-{
-	uint32_t cntr_names_0;
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.num_names));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.num_names));
-		for (cntr_names_0 = 0; cntr_names_0 < r->in.num_names; cntr_names_0++) {
-			NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->in.names[cntr_names_0]));
-		}
-		for (cntr_names_0 = 0; cntr_names_0 < r->in.num_names; cntr_names_0++) {
-			NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->in.names[cntr_names_0]));
-		}
-		if (r->in.sids == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_TransSidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sids));
-		NDR_CHECK(ndr_push_lsa_LookupNamesLevel(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.count == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.count));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.domains == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.domains));
-		if (*r->out.domains) {
-			NDR_CHECK(ndr_push_lsa_RefDomainList(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.domains));
-		}
-		if (r->out.sids == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_TransSidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sids));
-		if (r->out.count == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.count));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_LookupNames(struct ndr_pull *ndr, int flags, struct lsa_LookupNames *r)
-{
-	uint32_t cntr_names_0;
-	uint32_t _ptr_domains;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_names_0;
-	TALLOC_CTX *_mem_save_domains_0;
-	TALLOC_CTX *_mem_save_domains_1;
-	TALLOC_CTX *_mem_save_sids_0;
-	TALLOC_CTX *_mem_save_count_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.num_names));
-		if (r->in.num_names < 0 || r->in.num_names > 1000) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.names));
-		NDR_PULL_ALLOC_N(ndr, r->in.names, ndr_get_array_size(ndr, &r->in.names));
-		_mem_save_names_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.names, 0);
-		for (cntr_names_0 = 0; cntr_names_0 < r->in.num_names; cntr_names_0++) {
-			NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->in.names[cntr_names_0]));
-		}
-		for (cntr_names_0 = 0; cntr_names_0 < r->in.num_names; cntr_names_0++) {
-			NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->in.names[cntr_names_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_names_0, 0);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sids);
-		}
-		_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sids, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_TransSidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sids));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_LookupNamesLevel(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.count);
-		}
-		_mem_save_count_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.count, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.count));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_count_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.domains);
-		ZERO_STRUCTP(r->out.domains);
-		NDR_PULL_ALLOC(ndr, r->out.sids);
-		*r->out.sids = *r->in.sids;
-		NDR_PULL_ALLOC(ndr, r->out.count);
-		*r->out.count = *r->in.count;
-		if (r->in.names) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.names, r->in.num_names));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.domains);
-		}
-		_mem_save_domains_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.domains, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domains));
-		if (_ptr_domains) {
-			NDR_PULL_ALLOC(ndr, *r->out.domains);
-		} else {
-			*r->out.domains = NULL;
-		}
-		if (*r->out.domains) {
-			_mem_save_domains_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.domains, 0);
-			NDR_CHECK(ndr_pull_lsa_RefDomainList(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.domains));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domains_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domains_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.sids);
-		}
-		_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.sids, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_TransSidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sids));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.count);
-		}
-		_mem_save_count_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.count, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.count));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_count_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_LookupNames(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LookupNames *r)
-{
-	uint32_t cntr_names_0;
-	ndr_print_struct(ndr, name, "lsa_LookupNames");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_LookupNames");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "num_names", r->in.num_names);
-		ndr->print(ndr, "%s: ARRAY(%d)", "names", r->in.num_names);
-		ndr->depth++;
-		for (cntr_names_0=0;cntr_names_0<r->in.num_names;cntr_names_0++) {
-			char *idx_0=NULL;
-			if (asprintf(&idx_0, "[%d]", cntr_names_0) != -1) {
-				ndr_print_lsa_String(ndr, "names", &r->in.names[cntr_names_0]);
-				free(idx_0);
-			}
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sids", r->in.sids);
-		ndr->depth++;
-		ndr_print_lsa_TransSidArray(ndr, "sids", r->in.sids);
-		ndr->depth--;
-		ndr_print_lsa_LookupNamesLevel(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "count", r->in.count);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "count", *r->in.count);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_LookupNames");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domains", r->out.domains);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domains", *r->out.domains);
-		ndr->depth++;
-		if (*r->out.domains) {
-			ndr_print_lsa_RefDomainList(ndr, "domains", *r->out.domains);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sids", r->out.sids);
-		ndr->depth++;
-		ndr_print_lsa_TransSidArray(ndr, "sids", r->out.sids);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "count", r->out.count);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "count", *r->out.count);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_LookupSids(struct ndr_push *ndr, int flags, const struct lsa_LookupSids *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.sids == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_SidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sids));
-		if (r->in.names == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_TransNameArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.names));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.count == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.count));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.domains == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.domains));
-		if (*r->out.domains) {
-			NDR_CHECK(ndr_push_lsa_RefDomainList(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.domains));
-		}
-		if (r->out.names == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_TransNameArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.names));
-		if (r->out.count == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.count));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_LookupSids(struct ndr_pull *ndr, int flags, struct lsa_LookupSids *r)
-{
-	uint32_t _ptr_domains;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_sids_0;
-	TALLOC_CTX *_mem_save_domains_0;
-	TALLOC_CTX *_mem_save_domains_1;
-	TALLOC_CTX *_mem_save_names_0;
-	TALLOC_CTX *_mem_save_count_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sids);
-		}
-		_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sids, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_SidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sids));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.names);
-		}
-		_mem_save_names_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.names, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_TransNameArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.names));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_names_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.count);
-		}
-		_mem_save_count_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.count, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.count));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_count_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.domains);
-		ZERO_STRUCTP(r->out.domains);
-		NDR_PULL_ALLOC(ndr, r->out.names);
-		*r->out.names = *r->in.names;
-		NDR_PULL_ALLOC(ndr, r->out.count);
-		*r->out.count = *r->in.count;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.domains);
-		}
-		_mem_save_domains_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.domains, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domains));
-		if (_ptr_domains) {
-			NDR_PULL_ALLOC(ndr, *r->out.domains);
-		} else {
-			*r->out.domains = NULL;
-		}
-		if (*r->out.domains) {
-			_mem_save_domains_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.domains, 0);
-			NDR_CHECK(ndr_pull_lsa_RefDomainList(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.domains));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domains_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domains_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.names);
-		}
-		_mem_save_names_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.names, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_TransNameArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.names));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_names_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.count);
-		}
-		_mem_save_count_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.count, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.count));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_count_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_LookupSids(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LookupSids *r)
-{
-	ndr_print_struct(ndr, name, "lsa_LookupSids");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_LookupSids");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sids", r->in.sids);
-		ndr->depth++;
-		ndr_print_lsa_SidArray(ndr, "sids", r->in.sids);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "names", r->in.names);
-		ndr->depth++;
-		ndr_print_lsa_TransNameArray(ndr, "names", r->in.names);
-		ndr->depth--;
-		ndr_print_uint16(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "count", r->in.count);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "count", *r->in.count);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_LookupSids");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domains", r->out.domains);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domains", *r->out.domains);
-		ndr->depth++;
-		if (*r->out.domains) {
-			ndr_print_lsa_RefDomainList(ndr, "domains", *r->out.domains);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "names", r->out.names);
-		ndr->depth++;
-		ndr_print_lsa_TransNameArray(ndr, "names", r->out.names);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "count", r->out.count);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "count", *r->out.count);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_CreateSecret(struct ndr_push *ndr, int flags, const struct lsa_CreateSecret *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.name));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.sec_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sec_handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_CreateSecret(struct ndr_pull *ndr, int flags, struct lsa_CreateSecret *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_sec_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.name));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.sec_handle);
-		ZERO_STRUCTP(r->out.sec_handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.sec_handle);
-		}
-		_mem_save_sec_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.sec_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sec_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sec_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_CreateSecret(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CreateSecret *r)
-{
-	ndr_print_struct(ndr, name, "lsa_CreateSecret");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_CreateSecret");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_lsa_String(ndr, "name", &r->in.name);
-		ndr_print_uint32(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_CreateSecret");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "sec_handle", r->out.sec_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "sec_handle", r->out.sec_handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_OpenAccount(struct ndr_push *ndr, int flags, const struct lsa_OpenAccount *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.sid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sid));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.acct_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.acct_handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_OpenAccount(struct ndr_pull *ndr, int flags, struct lsa_OpenAccount *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_sid_0;
-	TALLOC_CTX *_mem_save_acct_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sid);
-		}
-		_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sid));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.acct_handle);
-		ZERO_STRUCTP(r->out.acct_handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.acct_handle);
-		}
-		_mem_save_acct_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.acct_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.acct_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_acct_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_OpenAccount(struct ndr_print *ndr, const char *name, int flags, const struct lsa_OpenAccount *r)
-{
-	ndr_print_struct(ndr, name, "lsa_OpenAccount");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_OpenAccount");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sid", r->in.sid);
-		ndr->depth++;
-		ndr_print_dom_sid2(ndr, "sid", r->in.sid);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_OpenAccount");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "acct_handle", r->out.acct_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "acct_handle", r->out.acct_handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_EnumPrivsAccount(struct ndr_push *ndr, int flags, const struct lsa_EnumPrivsAccount *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.privs == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.privs));
-		if (*r->out.privs) {
-			NDR_CHECK(ndr_push_lsa_PrivilegeSet(ndr, NDR_SCALARS, *r->out.privs));
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_EnumPrivsAccount(struct ndr_pull *ndr, int flags, struct lsa_EnumPrivsAccount *r)
-{
-	uint32_t _ptr_privs;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_privs_0;
-	TALLOC_CTX *_mem_save_privs_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.privs);
-		ZERO_STRUCTP(r->out.privs);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.privs);
-		}
-		_mem_save_privs_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.privs, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_privs));
-		if (_ptr_privs) {
-			NDR_PULL_ALLOC(ndr, *r->out.privs);
-		} else {
-			*r->out.privs = NULL;
-		}
-		if (*r->out.privs) {
-			_mem_save_privs_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.privs, 0);
-			NDR_CHECK(ndr_pull_lsa_PrivilegeSet(ndr, NDR_SCALARS, *r->out.privs));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_privs_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_privs_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_EnumPrivsAccount(struct ndr_print *ndr, const char *name, int flags, const struct lsa_EnumPrivsAccount *r)
-{
-	ndr_print_struct(ndr, name, "lsa_EnumPrivsAccount");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_EnumPrivsAccount");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_EnumPrivsAccount");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "privs", r->out.privs);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "privs", *r->out.privs);
-		ndr->depth++;
-		if (*r->out.privs) {
-			ndr_print_lsa_PrivilegeSet(ndr, "privs", *r->out.privs);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_AddPrivilegesToAccount(struct ndr_push *ndr, int flags, const struct lsa_AddPrivilegesToAccount *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.privs == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_PrivilegeSet(ndr, NDR_SCALARS, r->in.privs));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_AddPrivilegesToAccount(struct ndr_pull *ndr, int flags, struct lsa_AddPrivilegesToAccount *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_privs_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.privs);
-		}
-		_mem_save_privs_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.privs, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_PrivilegeSet(ndr, NDR_SCALARS, r->in.privs));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_privs_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_AddPrivilegesToAccount(struct ndr_print *ndr, const char *name, int flags, const struct lsa_AddPrivilegesToAccount *r)
-{
-	ndr_print_struct(ndr, name, "lsa_AddPrivilegesToAccount");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_AddPrivilegesToAccount");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "privs", r->in.privs);
-		ndr->depth++;
-		ndr_print_lsa_PrivilegeSet(ndr, "privs", r->in.privs);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_AddPrivilegesToAccount");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_RemovePrivilegesFromAccount(struct ndr_push *ndr, int flags, const struct lsa_RemovePrivilegesFromAccount *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->in.remove_all));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.privs));
-		if (r->in.privs) {
-			NDR_CHECK(ndr_push_lsa_PrivilegeSet(ndr, NDR_SCALARS, r->in.privs));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_RemovePrivilegesFromAccount(struct ndr_pull *ndr, int flags, struct lsa_RemovePrivilegesFromAccount *r)
-{
-	uint32_t _ptr_privs;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_privs_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->in.remove_all));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_privs));
-		if (_ptr_privs) {
-			NDR_PULL_ALLOC(ndr, r->in.privs);
-		} else {
-			r->in.privs = NULL;
-		}
-		if (r->in.privs) {
-			_mem_save_privs_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.privs, 0);
-			NDR_CHECK(ndr_pull_lsa_PrivilegeSet(ndr, NDR_SCALARS, r->in.privs));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_privs_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_RemovePrivilegesFromAccount(struct ndr_print *ndr, const char *name, int flags, const struct lsa_RemovePrivilegesFromAccount *r)
-{
-	ndr_print_struct(ndr, name, "lsa_RemovePrivilegesFromAccount");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_RemovePrivilegesFromAccount");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint8(ndr, "remove_all", r->in.remove_all);
-		ndr_print_ptr(ndr, "privs", r->in.privs);
-		ndr->depth++;
-		if (r->in.privs) {
-			ndr_print_lsa_PrivilegeSet(ndr, "privs", r->in.privs);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_RemovePrivilegesFromAccount");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_GetQuotasForAccount(struct ndr_push *ndr, int flags, const struct lsa_GetQuotasForAccount *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_GetQuotasForAccount(struct ndr_pull *ndr, int flags, struct lsa_GetQuotasForAccount *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_GetQuotasForAccount(struct ndr_print *ndr, const char *name, int flags, const struct lsa_GetQuotasForAccount *r)
-{
-	ndr_print_struct(ndr, name, "lsa_GetQuotasForAccount");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_GetQuotasForAccount");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_GetQuotasForAccount");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_SetQuotasForAccount(struct ndr_push *ndr, int flags, const struct lsa_SetQuotasForAccount *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_SetQuotasForAccount(struct ndr_pull *ndr, int flags, struct lsa_SetQuotasForAccount *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_SetQuotasForAccount(struct ndr_print *ndr, const char *name, int flags, const struct lsa_SetQuotasForAccount *r)
-{
-	ndr_print_struct(ndr, name, "lsa_SetQuotasForAccount");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_SetQuotasForAccount");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_SetQuotasForAccount");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_GetSystemAccessAccount(struct ndr_push *ndr, int flags, const struct lsa_GetSystemAccessAccount *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.access_mask == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.access_mask));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_GetSystemAccessAccount(struct ndr_pull *ndr, int flags, struct lsa_GetSystemAccessAccount *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_access_mask_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.access_mask);
-		ZERO_STRUCTP(r->out.access_mask);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.access_mask);
-		}
-		_mem_save_access_mask_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.access_mask, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.access_mask));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_access_mask_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_GetSystemAccessAccount(struct ndr_print *ndr, const char *name, int flags, const struct lsa_GetSystemAccessAccount *r)
-{
-	ndr_print_struct(ndr, name, "lsa_GetSystemAccessAccount");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_GetSystemAccessAccount");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_GetSystemAccessAccount");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "access_mask", r->out.access_mask);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "access_mask", *r->out.access_mask);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_SetSystemAccessAccount(struct ndr_push *ndr, int flags, const struct lsa_SetSystemAccessAccount *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_SetSystemAccessAccount(struct ndr_pull *ndr, int flags, struct lsa_SetSystemAccessAccount *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_SetSystemAccessAccount(struct ndr_print *ndr, const char *name, int flags, const struct lsa_SetSystemAccessAccount *r)
-{
-	ndr_print_struct(ndr, name, "lsa_SetSystemAccessAccount");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_SetSystemAccessAccount");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_SetSystemAccessAccount");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_OpenTrustedDomain(struct ndr_push *ndr, int flags, const struct lsa_OpenTrustedDomain *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.sid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sid));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.trustdom_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.trustdom_handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_OpenTrustedDomain(struct ndr_pull *ndr, int flags, struct lsa_OpenTrustedDomain *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_sid_0;
-	TALLOC_CTX *_mem_save_trustdom_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sid);
-		}
-		_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sid));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.trustdom_handle);
-		ZERO_STRUCTP(r->out.trustdom_handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.trustdom_handle);
-		}
-		_mem_save_trustdom_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.trustdom_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.trustdom_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_trustdom_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_OpenTrustedDomain(struct ndr_print *ndr, const char *name, int flags, const struct lsa_OpenTrustedDomain *r)
-{
-	ndr_print_struct(ndr, name, "lsa_OpenTrustedDomain");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_OpenTrustedDomain");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sid", r->in.sid);
-		ndr->depth++;
-		ndr_print_dom_sid2(ndr, "sid", r->in.sid);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_OpenTrustedDomain");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "trustdom_handle", r->out.trustdom_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "trustdom_handle", r->out.trustdom_handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_QueryTrustedDomainInfo(struct ndr_push *ndr, int flags, const struct lsa_QueryTrustedDomainInfo *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.trustdom_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.trustdom_handle));
-		NDR_CHECK(ndr_push_lsa_TrustDomInfoEnum(ndr, NDR_SCALARS, r->in.level));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.info));
-		if (*r->out.info) {
-			NDR_CHECK(ndr_push_set_switch_value(ndr, *r->out.info, r->in.level));
-			NDR_CHECK(ndr_push_lsa_TrustedDomainInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_QueryTrustedDomainInfo(struct ndr_pull *ndr, int flags, struct lsa_QueryTrustedDomainInfo *r)
-{
-	uint32_t _ptr_info;
-	TALLOC_CTX *_mem_save_trustdom_handle_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_info_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.trustdom_handle);
-		}
-		_mem_save_trustdom_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.trustdom_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.trustdom_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_trustdom_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_TrustDomInfoEnum(ndr, NDR_SCALARS, &r->in.level));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, *r->out.info);
-		} else {
-			*r->out.info = NULL;
-		}
-		if (*r->out.info) {
-			_mem_save_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.info, 0);
-			NDR_CHECK(ndr_pull_set_switch_value(ndr, *r->out.info, r->in.level));
-			NDR_CHECK(ndr_pull_lsa_TrustedDomainInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_QueryTrustedDomainInfo(struct ndr_print *ndr, const char *name, int flags, const struct lsa_QueryTrustedDomainInfo *r)
-{
-	ndr_print_struct(ndr, name, "lsa_QueryTrustedDomainInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_QueryTrustedDomainInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "trustdom_handle", r->in.trustdom_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "trustdom_handle", r->in.trustdom_handle);
-		ndr->depth--;
-		ndr_print_lsa_TrustDomInfoEnum(ndr, "level", r->in.level);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_QueryTrustedDomainInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", *r->out.info);
-		ndr->depth++;
-		if (*r->out.info) {
-			ndr_print_set_switch_value(ndr, *r->out.info, r->in.level);
-			ndr_print_lsa_TrustedDomainInfo(ndr, "info", *r->out.info);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_SetInformationTrustedDomain(struct ndr_push *ndr, int flags, const struct lsa_SetInformationTrustedDomain *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_SetInformationTrustedDomain(struct ndr_pull *ndr, int flags, struct lsa_SetInformationTrustedDomain *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_SetInformationTrustedDomain(struct ndr_print *ndr, const char *name, int flags, const struct lsa_SetInformationTrustedDomain *r)
-{
-	ndr_print_struct(ndr, name, "lsa_SetInformationTrustedDomain");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_SetInformationTrustedDomain");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_SetInformationTrustedDomain");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_OpenSecret(struct ndr_push *ndr, int flags, const struct lsa_OpenSecret *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.name));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.sec_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sec_handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_OpenSecret(struct ndr_pull *ndr, int flags, struct lsa_OpenSecret *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_sec_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.name));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.sec_handle);
-		ZERO_STRUCTP(r->out.sec_handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.sec_handle);
-		}
-		_mem_save_sec_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.sec_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sec_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sec_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_OpenSecret(struct ndr_print *ndr, const char *name, int flags, const struct lsa_OpenSecret *r)
-{
-	ndr_print_struct(ndr, name, "lsa_OpenSecret");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_OpenSecret");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_lsa_String(ndr, "name", &r->in.name);
-		ndr_print_uint32(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_OpenSecret");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "sec_handle", r->out.sec_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "sec_handle", r->out.sec_handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_SetSecret(struct ndr_push *ndr, int flags, const struct lsa_SetSecret *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.sec_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sec_handle));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.new_val));
-		if (r->in.new_val) {
-			NDR_CHECK(ndr_push_lsa_DATA_BUF(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.new_val));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.old_val));
-		if (r->in.old_val) {
-			NDR_CHECK(ndr_push_lsa_DATA_BUF(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.old_val));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_SetSecret(struct ndr_pull *ndr, int flags, struct lsa_SetSecret *r)
-{
-	uint32_t _ptr_new_val;
-	uint32_t _ptr_old_val;
-	TALLOC_CTX *_mem_save_sec_handle_0;
-	TALLOC_CTX *_mem_save_new_val_0;
-	TALLOC_CTX *_mem_save_old_val_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sec_handle);
-		}
-		_mem_save_sec_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sec_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sec_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sec_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_new_val));
-		if (_ptr_new_val) {
-			NDR_PULL_ALLOC(ndr, r->in.new_val);
-		} else {
-			r->in.new_val = NULL;
-		}
-		if (r->in.new_val) {
-			_mem_save_new_val_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.new_val, 0);
-			NDR_CHECK(ndr_pull_lsa_DATA_BUF(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.new_val));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_new_val_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_old_val));
-		if (_ptr_old_val) {
-			NDR_PULL_ALLOC(ndr, r->in.old_val);
-		} else {
-			r->in.old_val = NULL;
-		}
-		if (r->in.old_val) {
-			_mem_save_old_val_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.old_val, 0);
-			NDR_CHECK(ndr_pull_lsa_DATA_BUF(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.old_val));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_old_val_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_SetSecret(struct ndr_print *ndr, const char *name, int flags, const struct lsa_SetSecret *r)
-{
-	ndr_print_struct(ndr, name, "lsa_SetSecret");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_SetSecret");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "sec_handle", r->in.sec_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "sec_handle", r->in.sec_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "new_val", r->in.new_val);
-		ndr->depth++;
-		if (r->in.new_val) {
-			ndr_print_lsa_DATA_BUF(ndr, "new_val", r->in.new_val);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "old_val", r->in.old_val);
-		ndr->depth++;
-		if (r->in.old_val) {
-			ndr_print_lsa_DATA_BUF(ndr, "old_val", r->in.old_val);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_SetSecret");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_QuerySecret(struct ndr_push *ndr, int flags, const struct lsa_QuerySecret *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.sec_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sec_handle));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.new_val));
-		if (r->in.new_val) {
-			NDR_CHECK(ndr_push_lsa_DATA_BUF_PTR(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.new_val));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.new_mtime));
-		if (r->in.new_mtime) {
-			NDR_CHECK(ndr_push_NTTIME_hyper(ndr, NDR_SCALARS, *r->in.new_mtime));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.old_val));
-		if (r->in.old_val) {
-			NDR_CHECK(ndr_push_lsa_DATA_BUF_PTR(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.old_val));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.old_mtime));
-		if (r->in.old_mtime) {
-			NDR_CHECK(ndr_push_NTTIME_hyper(ndr, NDR_SCALARS, *r->in.old_mtime));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.new_val));
-		if (r->out.new_val) {
-			NDR_CHECK(ndr_push_lsa_DATA_BUF_PTR(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.new_val));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.new_mtime));
-		if (r->out.new_mtime) {
-			NDR_CHECK(ndr_push_NTTIME_hyper(ndr, NDR_SCALARS, *r->out.new_mtime));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.old_val));
-		if (r->out.old_val) {
-			NDR_CHECK(ndr_push_lsa_DATA_BUF_PTR(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.old_val));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.old_mtime));
-		if (r->out.old_mtime) {
-			NDR_CHECK(ndr_push_NTTIME_hyper(ndr, NDR_SCALARS, *r->out.old_mtime));
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_QuerySecret(struct ndr_pull *ndr, int flags, struct lsa_QuerySecret *r)
-{
-	uint32_t _ptr_new_val;
-	uint32_t _ptr_new_mtime;
-	uint32_t _ptr_old_val;
-	uint32_t _ptr_old_mtime;
-	TALLOC_CTX *_mem_save_sec_handle_0;
-	TALLOC_CTX *_mem_save_new_val_0;
-	TALLOC_CTX *_mem_save_new_mtime_0;
-	TALLOC_CTX *_mem_save_old_val_0;
-	TALLOC_CTX *_mem_save_old_mtime_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sec_handle);
-		}
-		_mem_save_sec_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sec_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sec_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sec_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_new_val));
-		if (_ptr_new_val) {
-			NDR_PULL_ALLOC(ndr, r->in.new_val);
-		} else {
-			r->in.new_val = NULL;
-		}
-		if (r->in.new_val) {
-			_mem_save_new_val_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.new_val, 0);
-			NDR_CHECK(ndr_pull_lsa_DATA_BUF_PTR(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.new_val));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_new_val_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_new_mtime));
-		if (_ptr_new_mtime) {
-			NDR_PULL_ALLOC(ndr, r->in.new_mtime);
-		} else {
-			r->in.new_mtime = NULL;
-		}
-		if (r->in.new_mtime) {
-			_mem_save_new_mtime_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.new_mtime, 0);
-			NDR_CHECK(ndr_pull_NTTIME_hyper(ndr, NDR_SCALARS, r->in.new_mtime));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_new_mtime_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_old_val));
-		if (_ptr_old_val) {
-			NDR_PULL_ALLOC(ndr, r->in.old_val);
-		} else {
-			r->in.old_val = NULL;
-		}
-		if (r->in.old_val) {
-			_mem_save_old_val_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.old_val, 0);
-			NDR_CHECK(ndr_pull_lsa_DATA_BUF_PTR(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.old_val));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_old_val_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_old_mtime));
-		if (_ptr_old_mtime) {
-			NDR_PULL_ALLOC(ndr, r->in.old_mtime);
-		} else {
-			r->in.old_mtime = NULL;
-		}
-		if (r->in.old_mtime) {
-			_mem_save_old_mtime_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.old_mtime, 0);
-			NDR_CHECK(ndr_pull_NTTIME_hyper(ndr, NDR_SCALARS, r->in.old_mtime));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_old_mtime_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_new_val));
-		if (_ptr_new_val) {
-			NDR_PULL_ALLOC(ndr, r->out.new_val);
-		} else {
-			r->out.new_val = NULL;
-		}
-		if (r->out.new_val) {
-			_mem_save_new_val_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.new_val, 0);
-			NDR_CHECK(ndr_pull_lsa_DATA_BUF_PTR(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.new_val));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_new_val_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_new_mtime));
-		if (_ptr_new_mtime) {
-			NDR_PULL_ALLOC(ndr, r->out.new_mtime);
-		} else {
-			r->out.new_mtime = NULL;
-		}
-		if (r->out.new_mtime) {
-			_mem_save_new_mtime_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.new_mtime, 0);
-			NDR_CHECK(ndr_pull_NTTIME_hyper(ndr, NDR_SCALARS, r->out.new_mtime));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_new_mtime_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_old_val));
-		if (_ptr_old_val) {
-			NDR_PULL_ALLOC(ndr, r->out.old_val);
-		} else {
-			r->out.old_val = NULL;
-		}
-		if (r->out.old_val) {
-			_mem_save_old_val_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.old_val, 0);
-			NDR_CHECK(ndr_pull_lsa_DATA_BUF_PTR(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.old_val));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_old_val_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_old_mtime));
-		if (_ptr_old_mtime) {
-			NDR_PULL_ALLOC(ndr, r->out.old_mtime);
-		} else {
-			r->out.old_mtime = NULL;
-		}
-		if (r->out.old_mtime) {
-			_mem_save_old_mtime_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.old_mtime, 0);
-			NDR_CHECK(ndr_pull_NTTIME_hyper(ndr, NDR_SCALARS, r->out.old_mtime));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_old_mtime_0, 0);
-		}
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_QuerySecret(struct ndr_print *ndr, const char *name, int flags, const struct lsa_QuerySecret *r)
-{
-	ndr_print_struct(ndr, name, "lsa_QuerySecret");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_QuerySecret");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "sec_handle", r->in.sec_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "sec_handle", r->in.sec_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "new_val", r->in.new_val);
-		ndr->depth++;
-		if (r->in.new_val) {
-			ndr_print_lsa_DATA_BUF_PTR(ndr, "new_val", r->in.new_val);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "new_mtime", r->in.new_mtime);
-		ndr->depth++;
-		if (r->in.new_mtime) {
-			ndr_print_NTTIME_hyper(ndr, "new_mtime", *r->in.new_mtime);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "old_val", r->in.old_val);
-		ndr->depth++;
-		if (r->in.old_val) {
-			ndr_print_lsa_DATA_BUF_PTR(ndr, "old_val", r->in.old_val);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "old_mtime", r->in.old_mtime);
-		ndr->depth++;
-		if (r->in.old_mtime) {
-			ndr_print_NTTIME_hyper(ndr, "old_mtime", *r->in.old_mtime);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_QuerySecret");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "new_val", r->out.new_val);
-		ndr->depth++;
-		if (r->out.new_val) {
-			ndr_print_lsa_DATA_BUF_PTR(ndr, "new_val", r->out.new_val);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "new_mtime", r->out.new_mtime);
-		ndr->depth++;
-		if (r->out.new_mtime) {
-			ndr_print_NTTIME_hyper(ndr, "new_mtime", *r->out.new_mtime);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "old_val", r->out.old_val);
-		ndr->depth++;
-		if (r->out.old_val) {
-			ndr_print_lsa_DATA_BUF_PTR(ndr, "old_val", r->out.old_val);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "old_mtime", r->out.old_mtime);
-		ndr->depth++;
-		if (r->out.old_mtime) {
-			ndr_print_NTTIME_hyper(ndr, "old_mtime", *r->out.old_mtime);
-		}
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_LookupPrivValue(struct ndr_push *ndr, int flags, const struct lsa_LookupPrivValue *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.name));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.luid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_LUID(ndr, NDR_SCALARS, r->out.luid));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_LookupPrivValue(struct ndr_pull *ndr, int flags, struct lsa_LookupPrivValue *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_name_0;
-	TALLOC_CTX *_mem_save_luid_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.name);
-		}
-		_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.name));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.luid);
-		ZERO_STRUCTP(r->out.luid);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.luid);
-		}
-		_mem_save_luid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.luid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_LUID(ndr, NDR_SCALARS, r->out.luid));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_luid_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_LookupPrivValue(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LookupPrivValue *r)
-{
-	ndr_print_struct(ndr, name, "lsa_LookupPrivValue");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_LookupPrivValue");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "name", r->in.name);
-		ndr->depth++;
-		ndr_print_lsa_String(ndr, "name", r->in.name);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_LookupPrivValue");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "luid", r->out.luid);
-		ndr->depth++;
-		ndr_print_lsa_LUID(ndr, "luid", r->out.luid);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_LookupPrivName(struct ndr_push *ndr, int flags, const struct lsa_LookupPrivName *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.luid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_LUID(ndr, NDR_SCALARS, r->in.luid));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.name));
-		if (*r->out.name) {
-			NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.name));
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_LookupPrivName(struct ndr_pull *ndr, int flags, struct lsa_LookupPrivName *r)
-{
-	uint32_t _ptr_name;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_luid_0;
-	TALLOC_CTX *_mem_save_name_0;
-	TALLOC_CTX *_mem_save_name_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.luid);
-		}
-		_mem_save_luid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.luid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_LUID(ndr, NDR_SCALARS, r->in.luid));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_luid_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.name);
-		ZERO_STRUCTP(r->out.name);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.name);
-		}
-		_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_name));
-		if (_ptr_name) {
-			NDR_PULL_ALLOC(ndr, *r->out.name);
-		} else {
-			*r->out.name = NULL;
-		}
-		if (*r->out.name) {
-			_mem_save_name_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.name, 0);
-			NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.name));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_LookupPrivName(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LookupPrivName *r)
-{
-	ndr_print_struct(ndr, name, "lsa_LookupPrivName");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_LookupPrivName");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "luid", r->in.luid);
-		ndr->depth++;
-		ndr_print_lsa_LUID(ndr, "luid", r->in.luid);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_LookupPrivName");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "name", r->out.name);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "name", *r->out.name);
-		ndr->depth++;
-		if (*r->out.name) {
-			ndr_print_lsa_StringLarge(ndr, "name", *r->out.name);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_LookupPrivDisplayName(struct ndr_push *ndr, int flags, const struct lsa_LookupPrivDisplayName *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.name));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.language_id));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.language_id_sys));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.disp_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.disp_name));
-		if (*r->out.disp_name) {
-			NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.disp_name));
-		}
-		if (r->out.returned_language_id == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, *r->out.returned_language_id));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_LookupPrivDisplayName(struct ndr_pull *ndr, int flags, struct lsa_LookupPrivDisplayName *r)
-{
-	uint32_t _ptr_disp_name;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_name_0;
-	TALLOC_CTX *_mem_save_disp_name_0;
-	TALLOC_CTX *_mem_save_disp_name_1;
-	TALLOC_CTX *_mem_save_returned_language_id_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.name);
-		}
-		_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.name));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.language_id));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.language_id_sys));
-		NDR_PULL_ALLOC(ndr, r->out.disp_name);
-		ZERO_STRUCTP(r->out.disp_name);
-		NDR_PULL_ALLOC(ndr, r->out.returned_language_id);
-		ZERO_STRUCTP(r->out.returned_language_id);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.disp_name);
-		}
-		_mem_save_disp_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.disp_name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_disp_name));
-		if (_ptr_disp_name) {
-			NDR_PULL_ALLOC(ndr, *r->out.disp_name);
-		} else {
-			*r->out.disp_name = NULL;
-		}
-		if (*r->out.disp_name) {
-			_mem_save_disp_name_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.disp_name, 0);
-			NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.disp_name));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_disp_name_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_disp_name_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.returned_language_id);
-		}
-		_mem_save_returned_language_id_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.returned_language_id, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, r->out.returned_language_id));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_returned_language_id_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_LookupPrivDisplayName(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LookupPrivDisplayName *r)
-{
-	ndr_print_struct(ndr, name, "lsa_LookupPrivDisplayName");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_LookupPrivDisplayName");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "name", r->in.name);
-		ndr->depth++;
-		ndr_print_lsa_String(ndr, "name", r->in.name);
-		ndr->depth--;
-		ndr_print_uint16(ndr, "language_id", r->in.language_id);
-		ndr_print_uint16(ndr, "language_id_sys", r->in.language_id_sys);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_LookupPrivDisplayName");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "disp_name", r->out.disp_name);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "disp_name", *r->out.disp_name);
-		ndr->depth++;
-		if (*r->out.disp_name) {
-			ndr_print_lsa_StringLarge(ndr, "disp_name", *r->out.disp_name);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "returned_language_id", r->out.returned_language_id);
-		ndr->depth++;
-		ndr_print_uint16(ndr, "returned_language_id", *r->out.returned_language_id);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_DeleteObject(struct ndr_push *ndr, int flags, const struct lsa_DeleteObject *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_DeleteObject(struct ndr_pull *ndr, int flags, struct lsa_DeleteObject *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.handle);
-		*r->out.handle = *r->in.handle;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_DeleteObject(struct ndr_print *ndr, const char *name, int flags, const struct lsa_DeleteObject *r)
-{
-	ndr_print_struct(ndr, name, "lsa_DeleteObject");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_DeleteObject");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_DeleteObject");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->out.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->out.handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_EnumAccountsWithUserRight(struct ndr_push *ndr, int flags, const struct lsa_EnumAccountsWithUserRight *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.name));
-		if (r->in.name) {
-			NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.name));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.sids == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_SidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sids));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_EnumAccountsWithUserRight(struct ndr_pull *ndr, int flags, struct lsa_EnumAccountsWithUserRight *r)
-{
-	uint32_t _ptr_name;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_name_0;
-	TALLOC_CTX *_mem_save_sids_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_name));
-		if (_ptr_name) {
-			NDR_PULL_ALLOC(ndr, r->in.name);
-		} else {
-			r->in.name = NULL;
-		}
-		if (r->in.name) {
-			_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.name, 0);
-			NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.name));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.sids);
-		ZERO_STRUCTP(r->out.sids);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.sids);
-		}
-		_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.sids, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_SidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sids));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_EnumAccountsWithUserRight(struct ndr_print *ndr, const char *name, int flags, const struct lsa_EnumAccountsWithUserRight *r)
-{
-	ndr_print_struct(ndr, name, "lsa_EnumAccountsWithUserRight");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_EnumAccountsWithUserRight");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "name", r->in.name);
-		ndr->depth++;
-		if (r->in.name) {
-			ndr_print_lsa_String(ndr, "name", r->in.name);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_EnumAccountsWithUserRight");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "sids", r->out.sids);
-		ndr->depth++;
-		ndr_print_lsa_SidArray(ndr, "sids", r->out.sids);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_EnumAccountRights(struct ndr_push *ndr, int flags, const struct lsa_EnumAccountRights *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.sid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sid));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.rights == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_RightSet(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.rights));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_EnumAccountRights(struct ndr_pull *ndr, int flags, struct lsa_EnumAccountRights *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_sid_0;
-	TALLOC_CTX *_mem_save_rights_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sid);
-		}
-		_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sid));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.rights);
-		ZERO_STRUCTP(r->out.rights);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.rights);
-		}
-		_mem_save_rights_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.rights, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_RightSet(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.rights));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rights_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_EnumAccountRights(struct ndr_print *ndr, const char *name, int flags, const struct lsa_EnumAccountRights *r)
-{
-	ndr_print_struct(ndr, name, "lsa_EnumAccountRights");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_EnumAccountRights");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sid", r->in.sid);
-		ndr->depth++;
-		ndr_print_dom_sid2(ndr, "sid", r->in.sid);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_EnumAccountRights");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "rights", r->out.rights);
-		ndr->depth++;
-		ndr_print_lsa_RightSet(ndr, "rights", r->out.rights);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_AddAccountRights(struct ndr_push *ndr, int flags, const struct lsa_AddAccountRights *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.sid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sid));
-		if (r->in.rights == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_RightSet(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.rights));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_AddAccountRights(struct ndr_pull *ndr, int flags, struct lsa_AddAccountRights *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_sid_0;
-	TALLOC_CTX *_mem_save_rights_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sid);
-		}
-		_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sid));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.rights);
-		}
-		_mem_save_rights_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.rights, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_RightSet(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.rights));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rights_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_AddAccountRights(struct ndr_print *ndr, const char *name, int flags, const struct lsa_AddAccountRights *r)
-{
-	ndr_print_struct(ndr, name, "lsa_AddAccountRights");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_AddAccountRights");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sid", r->in.sid);
-		ndr->depth++;
-		ndr_print_dom_sid2(ndr, "sid", r->in.sid);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "rights", r->in.rights);
-		ndr->depth++;
-		ndr_print_lsa_RightSet(ndr, "rights", r->in.rights);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_AddAccountRights");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_RemoveAccountRights(struct ndr_push *ndr, int flags, const struct lsa_RemoveAccountRights *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.sid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sid));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->in.remove_all));
-		if (r->in.rights == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_RightSet(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.rights));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_RemoveAccountRights(struct ndr_pull *ndr, int flags, struct lsa_RemoveAccountRights *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_sid_0;
-	TALLOC_CTX *_mem_save_rights_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sid);
-		}
-		_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sid));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->in.remove_all));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.rights);
-		}
-		_mem_save_rights_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.rights, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_RightSet(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.rights));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rights_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_RemoveAccountRights(struct ndr_print *ndr, const char *name, int flags, const struct lsa_RemoveAccountRights *r)
-{
-	ndr_print_struct(ndr, name, "lsa_RemoveAccountRights");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_RemoveAccountRights");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sid", r->in.sid);
-		ndr->depth++;
-		ndr_print_dom_sid2(ndr, "sid", r->in.sid);
-		ndr->depth--;
-		ndr_print_uint8(ndr, "remove_all", r->in.remove_all);
-		ndr_print_ptr(ndr, "rights", r->in.rights);
-		ndr->depth++;
-		ndr_print_lsa_RightSet(ndr, "rights", r->in.rights);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_RemoveAccountRights");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_QueryTrustedDomainInfoBySid(struct ndr_push *ndr, int flags, const struct lsa_QueryTrustedDomainInfoBySid *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.dom_sid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.dom_sid));
-		NDR_CHECK(ndr_push_lsa_TrustDomInfoEnum(ndr, NDR_SCALARS, r->in.level));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.info));
-		if (*r->out.info) {
-			NDR_CHECK(ndr_push_set_switch_value(ndr, *r->out.info, r->in.level));
-			NDR_CHECK(ndr_push_lsa_TrustedDomainInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_QueryTrustedDomainInfoBySid(struct ndr_pull *ndr, int flags, struct lsa_QueryTrustedDomainInfoBySid *r)
-{
-	uint32_t _ptr_info;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_dom_sid_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_info_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.dom_sid);
-		}
-		_mem_save_dom_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.dom_sid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.dom_sid));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dom_sid_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_TrustDomInfoEnum(ndr, NDR_SCALARS, &r->in.level));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, *r->out.info);
-		} else {
-			*r->out.info = NULL;
-		}
-		if (*r->out.info) {
-			_mem_save_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.info, 0);
-			NDR_CHECK(ndr_pull_set_switch_value(ndr, *r->out.info, r->in.level));
-			NDR_CHECK(ndr_pull_lsa_TrustedDomainInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_QueryTrustedDomainInfoBySid(struct ndr_print *ndr, const char *name, int flags, const struct lsa_QueryTrustedDomainInfoBySid *r)
-{
-	ndr_print_struct(ndr, name, "lsa_QueryTrustedDomainInfoBySid");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_QueryTrustedDomainInfoBySid");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "dom_sid", r->in.dom_sid);
-		ndr->depth++;
-		ndr_print_dom_sid2(ndr, "dom_sid", r->in.dom_sid);
-		ndr->depth--;
-		ndr_print_lsa_TrustDomInfoEnum(ndr, "level", r->in.level);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_QueryTrustedDomainInfoBySid");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", *r->out.info);
-		ndr->depth++;
-		if (*r->out.info) {
-			ndr_print_set_switch_value(ndr, *r->out.info, r->in.level);
-			ndr_print_lsa_TrustedDomainInfo(ndr, "info", *r->out.info);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_SetTrustedDomainInfo(struct ndr_push *ndr, int flags, const struct lsa_SetTrustedDomainInfo *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_SetTrustedDomainInfo(struct ndr_pull *ndr, int flags, struct lsa_SetTrustedDomainInfo *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_SetTrustedDomainInfo(struct ndr_print *ndr, const char *name, int flags, const struct lsa_SetTrustedDomainInfo *r)
-{
-	ndr_print_struct(ndr, name, "lsa_SetTrustedDomainInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_SetTrustedDomainInfo");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_SetTrustedDomainInfo");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_DeleteTrustedDomain(struct ndr_push *ndr, int flags, const struct lsa_DeleteTrustedDomain *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.dom_sid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.dom_sid));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_DeleteTrustedDomain(struct ndr_pull *ndr, int flags, struct lsa_DeleteTrustedDomain *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_dom_sid_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.dom_sid);
-		}
-		_mem_save_dom_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.dom_sid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.dom_sid));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dom_sid_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_DeleteTrustedDomain(struct ndr_print *ndr, const char *name, int flags, const struct lsa_DeleteTrustedDomain *r)
-{
-	ndr_print_struct(ndr, name, "lsa_DeleteTrustedDomain");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_DeleteTrustedDomain");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "dom_sid", r->in.dom_sid);
-		ndr->depth++;
-		ndr_print_dom_sid2(ndr, "dom_sid", r->in.dom_sid);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_DeleteTrustedDomain");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_StorePrivateData(struct ndr_push *ndr, int flags, const struct lsa_StorePrivateData *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_StorePrivateData(struct ndr_pull *ndr, int flags, struct lsa_StorePrivateData *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_StorePrivateData(struct ndr_print *ndr, const char *name, int flags, const struct lsa_StorePrivateData *r)
-{
-	ndr_print_struct(ndr, name, "lsa_StorePrivateData");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_StorePrivateData");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_StorePrivateData");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_RetrievePrivateData(struct ndr_push *ndr, int flags, const struct lsa_RetrievePrivateData *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_RetrievePrivateData(struct ndr_pull *ndr, int flags, struct lsa_RetrievePrivateData *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_RetrievePrivateData(struct ndr_print *ndr, const char *name, int flags, const struct lsa_RetrievePrivateData *r)
-{
-	ndr_print_struct(ndr, name, "lsa_RetrievePrivateData");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_RetrievePrivateData");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_RetrievePrivateData");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_OpenPolicy2(struct ndr_push *ndr, int flags, const struct lsa_OpenPolicy2 *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.system_name));
-		if (r->in.system_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.system_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.system_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.system_name, ndr_charset_length(r->in.system_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.attr == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_ObjectAttribute(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.attr));
-		NDR_CHECK(ndr_push_lsa_PolicyAccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_OpenPolicy2(struct ndr_pull *ndr, int flags, struct lsa_OpenPolicy2 *r)
-{
-	uint32_t _ptr_system_name;
-	TALLOC_CTX *_mem_save_system_name_0;
-	TALLOC_CTX *_mem_save_attr_0;
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_system_name));
-		if (_ptr_system_name) {
-			NDR_PULL_ALLOC(ndr, r->in.system_name);
-		} else {
-			r->in.system_name = NULL;
-		}
-		if (r->in.system_name) {
-			_mem_save_system_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.system_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.system_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.system_name));
-			if (ndr_get_array_length(ndr, &r->in.system_name) > ndr_get_array_size(ndr, &r->in.system_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.system_name), ndr_get_array_length(ndr, &r->in.system_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.system_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.system_name, ndr_get_array_length(ndr, &r->in.system_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_system_name_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.attr);
-		}
-		_mem_save_attr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.attr, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_ObjectAttribute(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.attr));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_attr_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_PolicyAccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.handle);
-		ZERO_STRUCTP(r->out.handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_OpenPolicy2(struct ndr_print *ndr, const char *name, int flags, const struct lsa_OpenPolicy2 *r)
-{
-	ndr_print_struct(ndr, name, "lsa_OpenPolicy2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_OpenPolicy2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "system_name", r->in.system_name);
-		ndr->depth++;
-		if (r->in.system_name) {
-			ndr_print_string(ndr, "system_name", r->in.system_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "attr", r->in.attr);
-		ndr->depth++;
-		ndr_print_lsa_ObjectAttribute(ndr, "attr", r->in.attr);
-		ndr->depth--;
-		ndr_print_lsa_PolicyAccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_OpenPolicy2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->out.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->out.handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_GetUserName(struct ndr_push *ndr, int flags, const struct lsa_GetUserName *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.system_name));
-		if (r->in.system_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.system_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.system_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.system_name, ndr_charset_length(r->in.system_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.account_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->in.account_name));
-		if (*r->in.account_name) {
-			NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, *r->in.account_name));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.authority_name));
-		if (r->in.authority_name) {
-			NDR_CHECK(ndr_push_unique_ptr(ndr, *r->in.authority_name));
-			if (*r->in.authority_name) {
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, *r->in.authority_name));
-			}
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.account_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.account_name));
-		if (*r->out.account_name) {
-			NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.account_name));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.authority_name));
-		if (r->out.authority_name) {
-			NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.authority_name));
-			if (*r->out.authority_name) {
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.authority_name));
-			}
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_GetUserName(struct ndr_pull *ndr, int flags, struct lsa_GetUserName *r)
-{
-	uint32_t _ptr_system_name;
-	uint32_t _ptr_account_name;
-	uint32_t _ptr_authority_name;
-	TALLOC_CTX *_mem_save_system_name_0;
-	TALLOC_CTX *_mem_save_account_name_0;
-	TALLOC_CTX *_mem_save_account_name_1;
-	TALLOC_CTX *_mem_save_authority_name_0;
-	TALLOC_CTX *_mem_save_authority_name_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_system_name));
-		if (_ptr_system_name) {
-			NDR_PULL_ALLOC(ndr, r->in.system_name);
-		} else {
-			r->in.system_name = NULL;
-		}
-		if (r->in.system_name) {
-			_mem_save_system_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.system_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.system_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.system_name));
-			if (ndr_get_array_length(ndr, &r->in.system_name) > ndr_get_array_size(ndr, &r->in.system_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.system_name), ndr_get_array_length(ndr, &r->in.system_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.system_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.system_name, ndr_get_array_length(ndr, &r->in.system_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_system_name_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.account_name);
-		}
-		_mem_save_account_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.account_name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_account_name));
-		if (_ptr_account_name) {
-			NDR_PULL_ALLOC(ndr, *r->in.account_name);
-		} else {
-			*r->in.account_name = NULL;
-		}
-		if (*r->in.account_name) {
-			_mem_save_account_name_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->in.account_name, 0);
-			NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, *r->in.account_name));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_account_name_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_account_name_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_authority_name));
-		if (_ptr_authority_name) {
-			NDR_PULL_ALLOC(ndr, r->in.authority_name);
-		} else {
-			r->in.authority_name = NULL;
-		}
-		if (r->in.authority_name) {
-			_mem_save_authority_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.authority_name, 0);
-			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_authority_name));
-			if (_ptr_authority_name) {
-				NDR_PULL_ALLOC(ndr, *r->in.authority_name);
-			} else {
-				*r->in.authority_name = NULL;
-			}
-			if (*r->in.authority_name) {
-				_mem_save_authority_name_1 = NDR_PULL_GET_MEM_CTX(ndr);
-				NDR_PULL_SET_MEM_CTX(ndr, *r->in.authority_name, 0);
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, *r->in.authority_name));
-				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_authority_name_1, 0);
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_authority_name_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.account_name);
-		*r->out.account_name = *r->in.account_name;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.account_name);
-		}
-		_mem_save_account_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.account_name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_account_name));
-		if (_ptr_account_name) {
-			NDR_PULL_ALLOC(ndr, *r->out.account_name);
-		} else {
-			*r->out.account_name = NULL;
-		}
-		if (*r->out.account_name) {
-			_mem_save_account_name_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.account_name, 0);
-			NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.account_name));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_account_name_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_account_name_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_authority_name));
-		if (_ptr_authority_name) {
-			NDR_PULL_ALLOC(ndr, r->out.authority_name);
-		} else {
-			r->out.authority_name = NULL;
-		}
-		if (r->out.authority_name) {
-			_mem_save_authority_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.authority_name, 0);
-			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_authority_name));
-			if (_ptr_authority_name) {
-				NDR_PULL_ALLOC(ndr, *r->out.authority_name);
-			} else {
-				*r->out.authority_name = NULL;
-			}
-			if (*r->out.authority_name) {
-				_mem_save_authority_name_1 = NDR_PULL_GET_MEM_CTX(ndr);
-				NDR_PULL_SET_MEM_CTX(ndr, *r->out.authority_name, 0);
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.authority_name));
-				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_authority_name_1, 0);
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_authority_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_GetUserName(struct ndr_print *ndr, const char *name, int flags, const struct lsa_GetUserName *r)
-{
-	ndr_print_struct(ndr, name, "lsa_GetUserName");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_GetUserName");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "system_name", r->in.system_name);
-		ndr->depth++;
-		if (r->in.system_name) {
-			ndr_print_string(ndr, "system_name", r->in.system_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "account_name", r->in.account_name);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "account_name", *r->in.account_name);
-		ndr->depth++;
-		if (*r->in.account_name) {
-			ndr_print_lsa_String(ndr, "account_name", *r->in.account_name);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "authority_name", r->in.authority_name);
-		ndr->depth++;
-		if (r->in.authority_name) {
-			ndr_print_ptr(ndr, "authority_name", *r->in.authority_name);
-			ndr->depth++;
-			if (*r->in.authority_name) {
-				ndr_print_lsa_String(ndr, "authority_name", *r->in.authority_name);
-			}
-			ndr->depth--;
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_GetUserName");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "account_name", r->out.account_name);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "account_name", *r->out.account_name);
-		ndr->depth++;
-		if (*r->out.account_name) {
-			ndr_print_lsa_String(ndr, "account_name", *r->out.account_name);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "authority_name", r->out.authority_name);
-		ndr->depth++;
-		if (r->out.authority_name) {
-			ndr_print_ptr(ndr, "authority_name", *r->out.authority_name);
-			ndr->depth++;
-			if (*r->out.authority_name) {
-				ndr_print_lsa_String(ndr, "authority_name", *r->out.authority_name);
-			}
-			ndr->depth--;
-		}
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_QueryInfoPolicy2(struct ndr_push *ndr, int flags, const struct lsa_QueryInfoPolicy2 *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_lsa_PolicyInfo(ndr, NDR_SCALARS, r->in.level));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.info));
-		if (*r->out.info) {
-			NDR_CHECK(ndr_push_set_switch_value(ndr, *r->out.info, r->in.level));
-			NDR_CHECK(ndr_push_lsa_PolicyInformation(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_QueryInfoPolicy2(struct ndr_pull *ndr, int flags, struct lsa_QueryInfoPolicy2 *r)
-{
-	uint32_t _ptr_info;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_info_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_PolicyInfo(ndr, NDR_SCALARS, &r->in.level));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, *r->out.info);
-		} else {
-			*r->out.info = NULL;
-		}
-		if (*r->out.info) {
-			_mem_save_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.info, 0);
-			NDR_CHECK(ndr_pull_set_switch_value(ndr, *r->out.info, r->in.level));
-			NDR_CHECK(ndr_pull_lsa_PolicyInformation(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_QueryInfoPolicy2(struct ndr_print *ndr, const char *name, int flags, const struct lsa_QueryInfoPolicy2 *r)
-{
-	ndr_print_struct(ndr, name, "lsa_QueryInfoPolicy2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_QueryInfoPolicy2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_lsa_PolicyInfo(ndr, "level", r->in.level);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_QueryInfoPolicy2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", *r->out.info);
-		ndr->depth++;
-		if (*r->out.info) {
-			ndr_print_set_switch_value(ndr, *r->out.info, r->in.level);
-			ndr_print_lsa_PolicyInformation(ndr, "info", *r->out.info);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_SetInfoPolicy2(struct ndr_push *ndr, int flags, const struct lsa_SetInfoPolicy2 *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_lsa_PolicyInfo(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.info, r->in.level));
-		NDR_CHECK(ndr_push_lsa_PolicyInformation(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_SetInfoPolicy2(struct ndr_pull *ndr, int flags, struct lsa_SetInfoPolicy2 *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_PolicyInfo(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.info, r->in.level));
-		NDR_CHECK(ndr_pull_lsa_PolicyInformation(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_SetInfoPolicy2(struct ndr_print *ndr, const char *name, int flags, const struct lsa_SetInfoPolicy2 *r)
-{
-	ndr_print_struct(ndr, name, "lsa_SetInfoPolicy2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_SetInfoPolicy2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_lsa_PolicyInfo(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "info", r->in.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->in.info, r->in.level);
-		ndr_print_lsa_PolicyInformation(ndr, "info", r->in.info);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_SetInfoPolicy2");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_QueryTrustedDomainInfoByName(struct ndr_push *ndr, int flags, const struct lsa_QueryTrustedDomainInfoByName *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.trusted_domain == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.trusted_domain));
-		NDR_CHECK(ndr_push_lsa_TrustDomInfoEnum(ndr, NDR_SCALARS, r->in.level));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.info));
-		if (*r->out.info) {
-			NDR_CHECK(ndr_push_set_switch_value(ndr, *r->out.info, r->in.level));
-			NDR_CHECK(ndr_push_lsa_TrustedDomainInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_QueryTrustedDomainInfoByName(struct ndr_pull *ndr, int flags, struct lsa_QueryTrustedDomainInfoByName *r)
-{
-	uint32_t _ptr_info;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_trusted_domain_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_info_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.trusted_domain);
-		}
-		_mem_save_trusted_domain_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.trusted_domain, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.trusted_domain));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_trusted_domain_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_TrustDomInfoEnum(ndr, NDR_SCALARS, &r->in.level));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, *r->out.info);
-		} else {
-			*r->out.info = NULL;
-		}
-		if (*r->out.info) {
-			_mem_save_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.info, 0);
-			NDR_CHECK(ndr_pull_set_switch_value(ndr, *r->out.info, r->in.level));
-			NDR_CHECK(ndr_pull_lsa_TrustedDomainInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_QueryTrustedDomainInfoByName(struct ndr_print *ndr, const char *name, int flags, const struct lsa_QueryTrustedDomainInfoByName *r)
-{
-	ndr_print_struct(ndr, name, "lsa_QueryTrustedDomainInfoByName");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_QueryTrustedDomainInfoByName");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "trusted_domain", r->in.trusted_domain);
-		ndr->depth++;
-		ndr_print_lsa_String(ndr, "trusted_domain", r->in.trusted_domain);
-		ndr->depth--;
-		ndr_print_lsa_TrustDomInfoEnum(ndr, "level", r->in.level);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_QueryTrustedDomainInfoByName");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", *r->out.info);
-		ndr->depth++;
-		if (*r->out.info) {
-			ndr_print_set_switch_value(ndr, *r->out.info, r->in.level);
-			ndr_print_lsa_TrustedDomainInfo(ndr, "info", *r->out.info);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_SetTrustedDomainInfoByName(struct ndr_push *ndr, int flags, const struct lsa_SetTrustedDomainInfoByName *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.trusted_domain));
-		NDR_CHECK(ndr_push_lsa_TrustDomInfoEnum(ndr, NDR_SCALARS, r->in.level));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.info));
-		if (r->in.info) {
-			NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.info, r->in.level));
-			NDR_CHECK(ndr_push_lsa_TrustedDomainInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_SetTrustedDomainInfoByName(struct ndr_pull *ndr, int flags, struct lsa_SetTrustedDomainInfoByName *r)
-{
-	uint32_t _ptr_info;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.trusted_domain));
-		NDR_CHECK(ndr_pull_lsa_TrustDomInfoEnum(ndr, NDR_SCALARS, &r->in.level));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, r->in.info);
-		} else {
-			r->in.info = NULL;
-		}
-		if (r->in.info) {
-			_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.info, 0);
-			NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.info, r->in.level));
-			NDR_CHECK(ndr_pull_lsa_TrustedDomainInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_SetTrustedDomainInfoByName(struct ndr_print *ndr, const char *name, int flags, const struct lsa_SetTrustedDomainInfoByName *r)
-{
-	ndr_print_struct(ndr, name, "lsa_SetTrustedDomainInfoByName");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_SetTrustedDomainInfoByName");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_lsa_String(ndr, "trusted_domain", &r->in.trusted_domain);
-		ndr_print_lsa_TrustDomInfoEnum(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "info", r->in.info);
-		ndr->depth++;
-		if (r->in.info) {
-			ndr_print_set_switch_value(ndr, r->in.info, r->in.level);
-			ndr_print_lsa_TrustedDomainInfo(ndr, "info", r->in.info);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_SetTrustedDomainInfoByName");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_EnumTrustedDomainsEx(struct ndr_push *ndr, int flags, const struct lsa_EnumTrustedDomainsEx *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.resume_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_size));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.resume_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		if (r->out.domains == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_DomainListEx(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.domains));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_EnumTrustedDomainsEx(struct ndr_pull *ndr, int flags, struct lsa_EnumTrustedDomainsEx *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_resume_handle_0;
-	TALLOC_CTX *_mem_save_domains_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.resume_handle);
-		}
-		_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_size));
-		NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		*r->out.resume_handle = *r->in.resume_handle;
-		NDR_PULL_ALLOC(ndr, r->out.domains);
-		ZERO_STRUCTP(r->out.domains);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		}
-		_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.domains);
-		}
-		_mem_save_domains_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.domains, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_DomainListEx(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.domains));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domains_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_EnumTrustedDomainsEx(struct ndr_print *ndr, const char *name, int flags, const struct lsa_EnumTrustedDomainsEx *r)
-{
-	ndr_print_struct(ndr, name, "lsa_EnumTrustedDomainsEx");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_EnumTrustedDomainsEx");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "max_size", r->in.max_size);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_EnumTrustedDomainsEx");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "domains", r->out.domains);
-		ndr->depth++;
-		ndr_print_lsa_DomainListEx(ndr, "domains", r->out.domains);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_CreateTrustedDomainEx(struct ndr_push *ndr, int flags, const struct lsa_CreateTrustedDomainEx *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_CreateTrustedDomainEx(struct ndr_pull *ndr, int flags, struct lsa_CreateTrustedDomainEx *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_CreateTrustedDomainEx(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CreateTrustedDomainEx *r)
-{
-	ndr_print_struct(ndr, name, "lsa_CreateTrustedDomainEx");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_CreateTrustedDomainEx");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_CreateTrustedDomainEx");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_CloseTrustedDomainEx(struct ndr_push *ndr, int flags, const struct lsa_CloseTrustedDomainEx *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_CloseTrustedDomainEx(struct ndr_pull *ndr, int flags, struct lsa_CloseTrustedDomainEx *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.handle);
-		*r->out.handle = *r->in.handle;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_CloseTrustedDomainEx(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CloseTrustedDomainEx *r)
-{
-	ndr_print_struct(ndr, name, "lsa_CloseTrustedDomainEx");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_CloseTrustedDomainEx");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_CloseTrustedDomainEx");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->out.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->out.handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_QueryDomainInformationPolicy(struct ndr_push *ndr, int flags, const struct lsa_QueryDomainInformationPolicy *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.level));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.info));
-		if (*r->out.info) {
-			NDR_CHECK(ndr_push_set_switch_value(ndr, *r->out.info, r->in.level));
-			NDR_CHECK(ndr_push_lsa_DomainInformationPolicy(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_QueryDomainInformationPolicy(struct ndr_pull *ndr, int flags, struct lsa_QueryDomainInformationPolicy *r)
-{
-	uint32_t _ptr_info;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_info_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.level));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, *r->out.info);
-		} else {
-			*r->out.info = NULL;
-		}
-		if (*r->out.info) {
-			_mem_save_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.info, 0);
-			NDR_CHECK(ndr_pull_set_switch_value(ndr, *r->out.info, r->in.level));
-			NDR_CHECK(ndr_pull_lsa_DomainInformationPolicy(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_QueryDomainInformationPolicy(struct ndr_print *ndr, const char *name, int flags, const struct lsa_QueryDomainInformationPolicy *r)
-{
-	ndr_print_struct(ndr, name, "lsa_QueryDomainInformationPolicy");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_QueryDomainInformationPolicy");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint16(ndr, "level", r->in.level);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_QueryDomainInformationPolicy");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", *r->out.info);
-		ndr->depth++;
-		if (*r->out.info) {
-			ndr_print_set_switch_value(ndr, *r->out.info, r->in.level);
-			ndr_print_lsa_DomainInformationPolicy(ndr, "info", *r->out.info);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_SetDomainInformationPolicy(struct ndr_push *ndr, int flags, const struct lsa_SetDomainInformationPolicy *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.level));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.info));
-		if (r->in.info) {
-			NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.info, r->in.level));
-			NDR_CHECK(ndr_push_lsa_DomainInformationPolicy(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_SetDomainInformationPolicy(struct ndr_pull *ndr, int flags, struct lsa_SetDomainInformationPolicy *r)
-{
-	uint32_t _ptr_info;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.level));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, r->in.info);
-		} else {
-			r->in.info = NULL;
-		}
-		if (r->in.info) {
-			_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.info, 0);
-			NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.info, r->in.level));
-			NDR_CHECK(ndr_pull_lsa_DomainInformationPolicy(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_SetDomainInformationPolicy(struct ndr_print *ndr, const char *name, int flags, const struct lsa_SetDomainInformationPolicy *r)
-{
-	ndr_print_struct(ndr, name, "lsa_SetDomainInformationPolicy");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_SetDomainInformationPolicy");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint16(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "info", r->in.info);
-		ndr->depth++;
-		if (r->in.info) {
-			ndr_print_set_switch_value(ndr, r->in.info, r->in.level);
-			ndr_print_lsa_DomainInformationPolicy(ndr, "info", r->in.info);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_SetDomainInformationPolicy");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_OpenTrustedDomainByName(struct ndr_push *ndr, int flags, const struct lsa_OpenTrustedDomainByName *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.name));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.trustdom_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.trustdom_handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_OpenTrustedDomainByName(struct ndr_pull *ndr, int flags, struct lsa_OpenTrustedDomainByName *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_trustdom_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.name));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.trustdom_handle);
-		ZERO_STRUCTP(r->out.trustdom_handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.trustdom_handle);
-		}
-		_mem_save_trustdom_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.trustdom_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.trustdom_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_trustdom_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_OpenTrustedDomainByName(struct ndr_print *ndr, const char *name, int flags, const struct lsa_OpenTrustedDomainByName *r)
-{
-	ndr_print_struct(ndr, name, "lsa_OpenTrustedDomainByName");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_OpenTrustedDomainByName");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_lsa_String(ndr, "name", &r->in.name);
-		ndr_print_uint32(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_OpenTrustedDomainByName");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "trustdom_handle", r->out.trustdom_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "trustdom_handle", r->out.trustdom_handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_TestCall(struct ndr_push *ndr, int flags, const struct lsa_TestCall *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_TestCall(struct ndr_pull *ndr, int flags, struct lsa_TestCall *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_TestCall(struct ndr_print *ndr, const char *name, int flags, const struct lsa_TestCall *r)
-{
-	ndr_print_struct(ndr, name, "lsa_TestCall");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_TestCall");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_TestCall");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_LookupSids2(struct ndr_push *ndr, int flags, const struct lsa_LookupSids2 *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.sids == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_SidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sids));
-		if (r->in.names == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_TransNameArray2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.names));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.count == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.count));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown1));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown2));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.domains == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.domains));
-		if (*r->out.domains) {
-			NDR_CHECK(ndr_push_lsa_RefDomainList(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.domains));
-		}
-		if (r->out.names == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_TransNameArray2(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.names));
-		if (r->out.count == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.count));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_LookupSids2(struct ndr_pull *ndr, int flags, struct lsa_LookupSids2 *r)
-{
-	uint32_t _ptr_domains;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_sids_0;
-	TALLOC_CTX *_mem_save_domains_0;
-	TALLOC_CTX *_mem_save_domains_1;
-	TALLOC_CTX *_mem_save_names_0;
-	TALLOC_CTX *_mem_save_count_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sids);
-		}
-		_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sids, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_SidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sids));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.names);
-		}
-		_mem_save_names_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.names, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_TransNameArray2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.names));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_names_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.count);
-		}
-		_mem_save_count_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.count, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.count));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_count_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown1));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown2));
-		NDR_PULL_ALLOC(ndr, r->out.domains);
-		ZERO_STRUCTP(r->out.domains);
-		NDR_PULL_ALLOC(ndr, r->out.names);
-		*r->out.names = *r->in.names;
-		NDR_PULL_ALLOC(ndr, r->out.count);
-		*r->out.count = *r->in.count;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.domains);
-		}
-		_mem_save_domains_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.domains, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domains));
-		if (_ptr_domains) {
-			NDR_PULL_ALLOC(ndr, *r->out.domains);
-		} else {
-			*r->out.domains = NULL;
-		}
-		if (*r->out.domains) {
-			_mem_save_domains_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.domains, 0);
-			NDR_CHECK(ndr_pull_lsa_RefDomainList(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.domains));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domains_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domains_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.names);
-		}
-		_mem_save_names_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.names, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_TransNameArray2(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.names));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_names_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.count);
-		}
-		_mem_save_count_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.count, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.count));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_count_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_LookupSids2(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LookupSids2 *r)
-{
-	ndr_print_struct(ndr, name, "lsa_LookupSids2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_LookupSids2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sids", r->in.sids);
-		ndr->depth++;
-		ndr_print_lsa_SidArray(ndr, "sids", r->in.sids);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "names", r->in.names);
-		ndr->depth++;
-		ndr_print_lsa_TransNameArray2(ndr, "names", r->in.names);
-		ndr->depth--;
-		ndr_print_uint16(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "count", r->in.count);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "count", *r->in.count);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "unknown1", r->in.unknown1);
-		ndr_print_uint32(ndr, "unknown2", r->in.unknown2);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_LookupSids2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domains", r->out.domains);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domains", *r->out.domains);
-		ndr->depth++;
-		if (*r->out.domains) {
-			ndr_print_lsa_RefDomainList(ndr, "domains", *r->out.domains);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "names", r->out.names);
-		ndr->depth++;
-		ndr_print_lsa_TransNameArray2(ndr, "names", r->out.names);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "count", r->out.count);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "count", *r->out.count);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_LookupNames2(struct ndr_push *ndr, int flags, const struct lsa_LookupNames2 *r)
-{
-	uint32_t cntr_names_0;
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.num_names));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.num_names));
-		for (cntr_names_0 = 0; cntr_names_0 < r->in.num_names; cntr_names_0++) {
-			NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->in.names[cntr_names_0]));
-		}
-		for (cntr_names_0 = 0; cntr_names_0 < r->in.num_names; cntr_names_0++) {
-			NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->in.names[cntr_names_0]));
-		}
-		if (r->in.sids == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_TransSidArray2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sids));
-		NDR_CHECK(ndr_push_lsa_LookupNamesLevel(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.count == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.count));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown1));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown2));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.domains == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.domains));
-		if (*r->out.domains) {
-			NDR_CHECK(ndr_push_lsa_RefDomainList(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.domains));
-		}
-		if (r->out.sids == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_TransSidArray2(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sids));
-		if (r->out.count == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.count));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_LookupNames2(struct ndr_pull *ndr, int flags, struct lsa_LookupNames2 *r)
-{
-	uint32_t cntr_names_0;
-	uint32_t _ptr_domains;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_names_0;
-	TALLOC_CTX *_mem_save_domains_0;
-	TALLOC_CTX *_mem_save_domains_1;
-	TALLOC_CTX *_mem_save_sids_0;
-	TALLOC_CTX *_mem_save_count_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.num_names));
-		if (r->in.num_names < 0 || r->in.num_names > 1000) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.names));
-		NDR_PULL_ALLOC_N(ndr, r->in.names, ndr_get_array_size(ndr, &r->in.names));
-		_mem_save_names_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.names, 0);
-		for (cntr_names_0 = 0; cntr_names_0 < r->in.num_names; cntr_names_0++) {
-			NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->in.names[cntr_names_0]));
-		}
-		for (cntr_names_0 = 0; cntr_names_0 < r->in.num_names; cntr_names_0++) {
-			NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->in.names[cntr_names_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_names_0, 0);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sids);
-		}
-		_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sids, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_TransSidArray2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sids));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_LookupNamesLevel(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.count);
-		}
-		_mem_save_count_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.count, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.count));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_count_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown1));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown2));
-		NDR_PULL_ALLOC(ndr, r->out.domains);
-		ZERO_STRUCTP(r->out.domains);
-		NDR_PULL_ALLOC(ndr, r->out.sids);
-		*r->out.sids = *r->in.sids;
-		NDR_PULL_ALLOC(ndr, r->out.count);
-		*r->out.count = *r->in.count;
-		if (r->in.names) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.names, r->in.num_names));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.domains);
-		}
-		_mem_save_domains_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.domains, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domains));
-		if (_ptr_domains) {
-			NDR_PULL_ALLOC(ndr, *r->out.domains);
-		} else {
-			*r->out.domains = NULL;
-		}
-		if (*r->out.domains) {
-			_mem_save_domains_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.domains, 0);
-			NDR_CHECK(ndr_pull_lsa_RefDomainList(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.domains));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domains_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domains_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.sids);
-		}
-		_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.sids, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_TransSidArray2(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sids));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.count);
-		}
-		_mem_save_count_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.count, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.count));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_count_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_LookupNames2(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LookupNames2 *r)
-{
-	uint32_t cntr_names_0;
-	ndr_print_struct(ndr, name, "lsa_LookupNames2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_LookupNames2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "num_names", r->in.num_names);
-		ndr->print(ndr, "%s: ARRAY(%d)", "names", r->in.num_names);
-		ndr->depth++;
-		for (cntr_names_0=0;cntr_names_0<r->in.num_names;cntr_names_0++) {
-			char *idx_0=NULL;
-			if (asprintf(&idx_0, "[%d]", cntr_names_0) != -1) {
-				ndr_print_lsa_String(ndr, "names", &r->in.names[cntr_names_0]);
-				free(idx_0);
-			}
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sids", r->in.sids);
-		ndr->depth++;
-		ndr_print_lsa_TransSidArray2(ndr, "sids", r->in.sids);
-		ndr->depth--;
-		ndr_print_lsa_LookupNamesLevel(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "count", r->in.count);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "count", *r->in.count);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "unknown1", r->in.unknown1);
-		ndr_print_uint32(ndr, "unknown2", r->in.unknown2);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_LookupNames2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domains", r->out.domains);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domains", *r->out.domains);
-		ndr->depth++;
-		if (*r->out.domains) {
-			ndr_print_lsa_RefDomainList(ndr, "domains", *r->out.domains);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sids", r->out.sids);
-		ndr->depth++;
-		ndr_print_lsa_TransSidArray2(ndr, "sids", r->out.sids);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "count", r->out.count);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "count", *r->out.count);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_CreateTrustedDomainEx2(struct ndr_push *ndr, int flags, const struct lsa_CreateTrustedDomainEx2 *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_CreateTrustedDomainEx2(struct ndr_pull *ndr, int flags, struct lsa_CreateTrustedDomainEx2 *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_CreateTrustedDomainEx2(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CreateTrustedDomainEx2 *r)
-{
-	ndr_print_struct(ndr, name, "lsa_CreateTrustedDomainEx2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_CreateTrustedDomainEx2");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_CreateTrustedDomainEx2");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_CREDRWRITE(struct ndr_push *ndr, int flags, const struct lsa_CREDRWRITE *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_CREDRWRITE(struct ndr_pull *ndr, int flags, struct lsa_CREDRWRITE *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_CREDRWRITE(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CREDRWRITE *r)
-{
-	ndr_print_struct(ndr, name, "lsa_CREDRWRITE");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_CREDRWRITE");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_CREDRWRITE");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_CREDRREAD(struct ndr_push *ndr, int flags, const struct lsa_CREDRREAD *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_CREDRREAD(struct ndr_pull *ndr, int flags, struct lsa_CREDRREAD *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_CREDRREAD(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CREDRREAD *r)
-{
-	ndr_print_struct(ndr, name, "lsa_CREDRREAD");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_CREDRREAD");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_CREDRREAD");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_CREDRENUMERATE(struct ndr_push *ndr, int flags, const struct lsa_CREDRENUMERATE *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_CREDRENUMERATE(struct ndr_pull *ndr, int flags, struct lsa_CREDRENUMERATE *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_CREDRENUMERATE(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CREDRENUMERATE *r)
-{
-	ndr_print_struct(ndr, name, "lsa_CREDRENUMERATE");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_CREDRENUMERATE");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_CREDRENUMERATE");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_CREDRWRITEDOMAINCREDENTIALS(struct ndr_push *ndr, int flags, const struct lsa_CREDRWRITEDOMAINCREDENTIALS *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_CREDRWRITEDOMAINCREDENTIALS(struct ndr_pull *ndr, int flags, struct lsa_CREDRWRITEDOMAINCREDENTIALS *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_CREDRWRITEDOMAINCREDENTIALS(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CREDRWRITEDOMAINCREDENTIALS *r)
-{
-	ndr_print_struct(ndr, name, "lsa_CREDRWRITEDOMAINCREDENTIALS");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_CREDRWRITEDOMAINCREDENTIALS");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_CREDRWRITEDOMAINCREDENTIALS");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_CREDRREADDOMAINCREDENTIALS(struct ndr_push *ndr, int flags, const struct lsa_CREDRREADDOMAINCREDENTIALS *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_CREDRREADDOMAINCREDENTIALS(struct ndr_pull *ndr, int flags, struct lsa_CREDRREADDOMAINCREDENTIALS *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_CREDRREADDOMAINCREDENTIALS(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CREDRREADDOMAINCREDENTIALS *r)
-{
-	ndr_print_struct(ndr, name, "lsa_CREDRREADDOMAINCREDENTIALS");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_CREDRREADDOMAINCREDENTIALS");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_CREDRREADDOMAINCREDENTIALS");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_CREDRDELETE(struct ndr_push *ndr, int flags, const struct lsa_CREDRDELETE *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_CREDRDELETE(struct ndr_pull *ndr, int flags, struct lsa_CREDRDELETE *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_CREDRDELETE(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CREDRDELETE *r)
-{
-	ndr_print_struct(ndr, name, "lsa_CREDRDELETE");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_CREDRDELETE");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_CREDRDELETE");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_CREDRGETTARGETINFO(struct ndr_push *ndr, int flags, const struct lsa_CREDRGETTARGETINFO *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_CREDRGETTARGETINFO(struct ndr_pull *ndr, int flags, struct lsa_CREDRGETTARGETINFO *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_CREDRGETTARGETINFO(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CREDRGETTARGETINFO *r)
-{
-	ndr_print_struct(ndr, name, "lsa_CREDRGETTARGETINFO");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_CREDRGETTARGETINFO");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_CREDRGETTARGETINFO");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_CREDRPROFILELOADED(struct ndr_push *ndr, int flags, const struct lsa_CREDRPROFILELOADED *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_CREDRPROFILELOADED(struct ndr_pull *ndr, int flags, struct lsa_CREDRPROFILELOADED *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_CREDRPROFILELOADED(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CREDRPROFILELOADED *r)
-{
-	ndr_print_struct(ndr, name, "lsa_CREDRPROFILELOADED");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_CREDRPROFILELOADED");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_CREDRPROFILELOADED");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_LookupNames3(struct ndr_push *ndr, int flags, const struct lsa_LookupNames3 *r)
-{
-	uint32_t cntr_names_0;
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.num_names));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.num_names));
-		for (cntr_names_0 = 0; cntr_names_0 < r->in.num_names; cntr_names_0++) {
-			NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->in.names[cntr_names_0]));
-		}
-		for (cntr_names_0 = 0; cntr_names_0 < r->in.num_names; cntr_names_0++) {
-			NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->in.names[cntr_names_0]));
-		}
-		if (r->in.sids == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_TransSidArray3(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sids));
-		NDR_CHECK(ndr_push_lsa_LookupNamesLevel(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.count == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.count));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown1));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown2));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.domains == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.domains));
-		if (*r->out.domains) {
-			NDR_CHECK(ndr_push_lsa_RefDomainList(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.domains));
-		}
-		if (r->out.sids == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_TransSidArray3(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sids));
-		if (r->out.count == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.count));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_LookupNames3(struct ndr_pull *ndr, int flags, struct lsa_LookupNames3 *r)
-{
-	uint32_t cntr_names_0;
-	uint32_t _ptr_domains;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_names_0;
-	TALLOC_CTX *_mem_save_domains_0;
-	TALLOC_CTX *_mem_save_domains_1;
-	TALLOC_CTX *_mem_save_sids_0;
-	TALLOC_CTX *_mem_save_count_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.num_names));
-		if (r->in.num_names < 0 || r->in.num_names > 1000) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.names));
-		NDR_PULL_ALLOC_N(ndr, r->in.names, ndr_get_array_size(ndr, &r->in.names));
-		_mem_save_names_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.names, 0);
-		for (cntr_names_0 = 0; cntr_names_0 < r->in.num_names; cntr_names_0++) {
-			NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->in.names[cntr_names_0]));
-		}
-		for (cntr_names_0 = 0; cntr_names_0 < r->in.num_names; cntr_names_0++) {
-			NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->in.names[cntr_names_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_names_0, 0);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sids);
-		}
-		_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sids, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_TransSidArray3(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sids));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_LookupNamesLevel(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.count);
-		}
-		_mem_save_count_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.count, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.count));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_count_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown1));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown2));
-		NDR_PULL_ALLOC(ndr, r->out.domains);
-		ZERO_STRUCTP(r->out.domains);
-		NDR_PULL_ALLOC(ndr, r->out.sids);
-		*r->out.sids = *r->in.sids;
-		NDR_PULL_ALLOC(ndr, r->out.count);
-		*r->out.count = *r->in.count;
-		if (r->in.names) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.names, r->in.num_names));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.domains);
-		}
-		_mem_save_domains_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.domains, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domains));
-		if (_ptr_domains) {
-			NDR_PULL_ALLOC(ndr, *r->out.domains);
-		} else {
-			*r->out.domains = NULL;
-		}
-		if (*r->out.domains) {
-			_mem_save_domains_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.domains, 0);
-			NDR_CHECK(ndr_pull_lsa_RefDomainList(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.domains));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domains_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domains_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.sids);
-		}
-		_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.sids, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_TransSidArray3(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sids));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.count);
-		}
-		_mem_save_count_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.count, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.count));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_count_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_LookupNames3(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LookupNames3 *r)
-{
-	uint32_t cntr_names_0;
-	ndr_print_struct(ndr, name, "lsa_LookupNames3");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_LookupNames3");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "num_names", r->in.num_names);
-		ndr->print(ndr, "%s: ARRAY(%d)", "names", r->in.num_names);
-		ndr->depth++;
-		for (cntr_names_0=0;cntr_names_0<r->in.num_names;cntr_names_0++) {
-			char *idx_0=NULL;
-			if (asprintf(&idx_0, "[%d]", cntr_names_0) != -1) {
-				ndr_print_lsa_String(ndr, "names", &r->in.names[cntr_names_0]);
-				free(idx_0);
-			}
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sids", r->in.sids);
-		ndr->depth++;
-		ndr_print_lsa_TransSidArray3(ndr, "sids", r->in.sids);
-		ndr->depth--;
-		ndr_print_lsa_LookupNamesLevel(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "count", r->in.count);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "count", *r->in.count);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "unknown1", r->in.unknown1);
-		ndr_print_uint32(ndr, "unknown2", r->in.unknown2);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_LookupNames3");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domains", r->out.domains);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domains", *r->out.domains);
-		ndr->depth++;
-		if (*r->out.domains) {
-			ndr_print_lsa_RefDomainList(ndr, "domains", *r->out.domains);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sids", r->out.sids);
-		ndr->depth++;
-		ndr_print_lsa_TransSidArray3(ndr, "sids", r->out.sids);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "count", r->out.count);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "count", *r->out.count);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_CREDRGETSESSIONTYPES(struct ndr_push *ndr, int flags, const struct lsa_CREDRGETSESSIONTYPES *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_CREDRGETSESSIONTYPES(struct ndr_pull *ndr, int flags, struct lsa_CREDRGETSESSIONTYPES *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_CREDRGETSESSIONTYPES(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CREDRGETSESSIONTYPES *r)
-{
-	ndr_print_struct(ndr, name, "lsa_CREDRGETSESSIONTYPES");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_CREDRGETSESSIONTYPES");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_CREDRGETSESSIONTYPES");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_LSARREGISTERAUDITEVENT(struct ndr_push *ndr, int flags, const struct lsa_LSARREGISTERAUDITEVENT *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_LSARREGISTERAUDITEVENT(struct ndr_pull *ndr, int flags, struct lsa_LSARREGISTERAUDITEVENT *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_LSARREGISTERAUDITEVENT(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LSARREGISTERAUDITEVENT *r)
-{
-	ndr_print_struct(ndr, name, "lsa_LSARREGISTERAUDITEVENT");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_LSARREGISTERAUDITEVENT");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_LSARREGISTERAUDITEVENT");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_LSARGENAUDITEVENT(struct ndr_push *ndr, int flags, const struct lsa_LSARGENAUDITEVENT *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_LSARGENAUDITEVENT(struct ndr_pull *ndr, int flags, struct lsa_LSARGENAUDITEVENT *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_LSARGENAUDITEVENT(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LSARGENAUDITEVENT *r)
-{
-	ndr_print_struct(ndr, name, "lsa_LSARGENAUDITEVENT");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_LSARGENAUDITEVENT");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_LSARGENAUDITEVENT");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_LSARUNREGISTERAUDITEVENT(struct ndr_push *ndr, int flags, const struct lsa_LSARUNREGISTERAUDITEVENT *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_LSARUNREGISTERAUDITEVENT(struct ndr_pull *ndr, int flags, struct lsa_LSARUNREGISTERAUDITEVENT *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_LSARUNREGISTERAUDITEVENT(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LSARUNREGISTERAUDITEVENT *r)
-{
-	ndr_print_struct(ndr, name, "lsa_LSARUNREGISTERAUDITEVENT");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_LSARUNREGISTERAUDITEVENT");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_LSARUNREGISTERAUDITEVENT");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_lsaRQueryForestTrustInformation(struct ndr_push *ndr, int flags, const struct lsa_lsaRQueryForestTrustInformation *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.trusted_domain_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.trusted_domain_name));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.unknown));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.forest_trust_info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.forest_trust_info));
-		if (*r->out.forest_trust_info) {
-			NDR_CHECK(ndr_push_lsa_ForestTrustInformation(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.forest_trust_info));
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_lsaRQueryForestTrustInformation(struct ndr_pull *ndr, int flags, struct lsa_lsaRQueryForestTrustInformation *r)
-{
-	uint32_t _ptr_forest_trust_info;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_trusted_domain_name_0;
-	TALLOC_CTX *_mem_save_forest_trust_info_0;
-	TALLOC_CTX *_mem_save_forest_trust_info_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.trusted_domain_name);
-		}
-		_mem_save_trusted_domain_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.trusted_domain_name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.trusted_domain_name));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_trusted_domain_name_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.unknown));
-		NDR_PULL_ALLOC(ndr, r->out.forest_trust_info);
-		ZERO_STRUCTP(r->out.forest_trust_info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.forest_trust_info);
-		}
-		_mem_save_forest_trust_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.forest_trust_info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_forest_trust_info));
-		if (_ptr_forest_trust_info) {
-			NDR_PULL_ALLOC(ndr, *r->out.forest_trust_info);
-		} else {
-			*r->out.forest_trust_info = NULL;
-		}
-		if (*r->out.forest_trust_info) {
-			_mem_save_forest_trust_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.forest_trust_info, 0);
-			NDR_CHECK(ndr_pull_lsa_ForestTrustInformation(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.forest_trust_info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_forest_trust_info_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_forest_trust_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_lsaRQueryForestTrustInformation(struct ndr_print *ndr, const char *name, int flags, const struct lsa_lsaRQueryForestTrustInformation *r)
-{
-	ndr_print_struct(ndr, name, "lsa_lsaRQueryForestTrustInformation");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_lsaRQueryForestTrustInformation");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "trusted_domain_name", r->in.trusted_domain_name);
-		ndr->depth++;
-		ndr_print_lsa_String(ndr, "trusted_domain_name", r->in.trusted_domain_name);
-		ndr->depth--;
-		ndr_print_uint16(ndr, "unknown", r->in.unknown);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_lsaRQueryForestTrustInformation");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "forest_trust_info", r->out.forest_trust_info);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "forest_trust_info", *r->out.forest_trust_info);
-		ndr->depth++;
-		if (*r->out.forest_trust_info) {
-			ndr_print_lsa_ForestTrustInformation(ndr, "forest_trust_info", *r->out.forest_trust_info);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_LSARSETFORESTTRUSTINFORMATION(struct ndr_push *ndr, int flags, const struct lsa_LSARSETFORESTTRUSTINFORMATION *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_LSARSETFORESTTRUSTINFORMATION(struct ndr_pull *ndr, int flags, struct lsa_LSARSETFORESTTRUSTINFORMATION *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_LSARSETFORESTTRUSTINFORMATION(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LSARSETFORESTTRUSTINFORMATION *r)
-{
-	ndr_print_struct(ndr, name, "lsa_LSARSETFORESTTRUSTINFORMATION");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_LSARSETFORESTTRUSTINFORMATION");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_LSARSETFORESTTRUSTINFORMATION");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_CREDRRENAME(struct ndr_push *ndr, int flags, const struct lsa_CREDRRENAME *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_CREDRRENAME(struct ndr_pull *ndr, int flags, struct lsa_CREDRRENAME *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_CREDRRENAME(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CREDRRENAME *r)
-{
-	ndr_print_struct(ndr, name, "lsa_CREDRRENAME");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_CREDRRENAME");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_CREDRRENAME");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_lsa_LookupSids3(struct ndr_push *ndr, int flags, const struct lsa_LookupSids3 *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.sids == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_SidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sids));
-		if (r->in.names == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_TransNameArray2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.names));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.count == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.count));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown1));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown2));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.domains == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.domains));
-		if (*r->out.domains) {
-			NDR_CHECK(ndr_push_lsa_RefDomainList(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.domains));
-		}
-		if (r->out.names == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_TransNameArray2(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.names));
-		if (r->out.count == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.count));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_lsa_LookupSids3(struct ndr_pull *ndr, int flags, struct lsa_LookupSids3 *r)
-{
-	uint32_t _ptr_domains;
-	TALLOC_CTX *_mem_save_sids_0;
-	TALLOC_CTX *_mem_save_domains_0;
-	TALLOC_CTX *_mem_save_domains_1;
-	TALLOC_CTX *_mem_save_names_0;
-	TALLOC_CTX *_mem_save_count_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sids);
-		}
-		_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sids, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_SidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sids));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.names);
-		}
-		_mem_save_names_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.names, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_TransNameArray2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.names));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_names_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.count);
-		}
-		_mem_save_count_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.count, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.count));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_count_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown1));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown2));
-		NDR_PULL_ALLOC(ndr, r->out.domains);
-		ZERO_STRUCTP(r->out.domains);
-		NDR_PULL_ALLOC(ndr, r->out.names);
-		*r->out.names = *r->in.names;
-		NDR_PULL_ALLOC(ndr, r->out.count);
-		*r->out.count = *r->in.count;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.domains);
-		}
-		_mem_save_domains_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.domains, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domains));
-		if (_ptr_domains) {
-			NDR_PULL_ALLOC(ndr, *r->out.domains);
-		} else {
-			*r->out.domains = NULL;
-		}
-		if (*r->out.domains) {
-			_mem_save_domains_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.domains, 0);
-			NDR_CHECK(ndr_pull_lsa_RefDomainList(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.domains));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domains_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domains_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.names);
-		}
-		_mem_save_names_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.names, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_TransNameArray2(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.names));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_names_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.count);
-		}
-		_mem_save_count_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.count, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.count));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_count_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_LookupSids3(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LookupSids3 *r)
-{
-	ndr_print_struct(ndr, name, "lsa_LookupSids3");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_LookupSids3");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "sids", r->in.sids);
-		ndr->depth++;
-		ndr_print_lsa_SidArray(ndr, "sids", r->in.sids);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "names", r->in.names);
-		ndr->depth++;
-		ndr_print_lsa_TransNameArray2(ndr, "names", r->in.names);
-		ndr->depth--;
-		ndr_print_uint16(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "count", r->in.count);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "count", *r->in.count);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "unknown1", r->in.unknown1);
-		ndr_print_uint32(ndr, "unknown2", r->in.unknown2);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_LookupSids3");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domains", r->out.domains);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domains", *r->out.domains);
-		ndr->depth++;
-		if (*r->out.domains) {
-			ndr_print_lsa_RefDomainList(ndr, "domains", *r->out.domains);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "names", r->out.names);
-		ndr->depth++;
-		ndr_print_lsa_TransNameArray2(ndr, "names", r->out.names);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "count", r->out.count);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "count", *r->out.count);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_LookupNames4(struct ndr_push *ndr, int flags, const struct lsa_LookupNames4 *r)
-{
-	uint32_t cntr_names_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.num_names));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.num_names));
-		for (cntr_names_0 = 0; cntr_names_0 < r->in.num_names; cntr_names_0++) {
-			NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->in.names[cntr_names_0]));
-		}
-		for (cntr_names_0 = 0; cntr_names_0 < r->in.num_names; cntr_names_0++) {
-			NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->in.names[cntr_names_0]));
-		}
-		if (r->in.sids == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_TransSidArray3(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sids));
-		NDR_CHECK(ndr_push_lsa_LookupNamesLevel(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.count == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.count));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown1));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown2));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.domains == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.domains));
-		if (*r->out.domains) {
-			NDR_CHECK(ndr_push_lsa_RefDomainList(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.domains));
-		}
-		if (r->out.sids == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_TransSidArray3(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sids));
-		if (r->out.count == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.count));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_LookupNames4(struct ndr_pull *ndr, int flags, struct lsa_LookupNames4 *r)
-{
-	uint32_t cntr_names_0;
-	uint32_t _ptr_domains;
-	TALLOC_CTX *_mem_save_names_0;
-	TALLOC_CTX *_mem_save_domains_0;
-	TALLOC_CTX *_mem_save_domains_1;
-	TALLOC_CTX *_mem_save_sids_0;
-	TALLOC_CTX *_mem_save_count_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.num_names));
-		if (r->in.num_names < 0 || r->in.num_names > 1000) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.names));
-		NDR_PULL_ALLOC_N(ndr, r->in.names, ndr_get_array_size(ndr, &r->in.names));
-		_mem_save_names_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.names, 0);
-		for (cntr_names_0 = 0; cntr_names_0 < r->in.num_names; cntr_names_0++) {
-			NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->in.names[cntr_names_0]));
-		}
-		for (cntr_names_0 = 0; cntr_names_0 < r->in.num_names; cntr_names_0++) {
-			NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->in.names[cntr_names_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_names_0, 0);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sids);
-		}
-		_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sids, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_TransSidArray3(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sids));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_LookupNamesLevel(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.count);
-		}
-		_mem_save_count_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.count, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.count));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_count_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown1));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown2));
-		NDR_PULL_ALLOC(ndr, r->out.domains);
-		ZERO_STRUCTP(r->out.domains);
-		NDR_PULL_ALLOC(ndr, r->out.sids);
-		*r->out.sids = *r->in.sids;
-		NDR_PULL_ALLOC(ndr, r->out.count);
-		*r->out.count = *r->in.count;
-		if (r->in.names) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.names, r->in.num_names));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.domains);
-		}
-		_mem_save_domains_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.domains, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domains));
-		if (_ptr_domains) {
-			NDR_PULL_ALLOC(ndr, *r->out.domains);
-		} else {
-			*r->out.domains = NULL;
-		}
-		if (*r->out.domains) {
-			_mem_save_domains_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.domains, 0);
-			NDR_CHECK(ndr_pull_lsa_RefDomainList(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.domains));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domains_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domains_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.sids);
-		}
-		_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.sids, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_TransSidArray3(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sids));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.count);
-		}
-		_mem_save_count_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.count, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.count));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_count_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_LookupNames4(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LookupNames4 *r)
-{
-	uint32_t cntr_names_0;
-	ndr_print_struct(ndr, name, "lsa_LookupNames4");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_LookupNames4");
-		ndr->depth++;
-		ndr_print_uint32(ndr, "num_names", r->in.num_names);
-		ndr->print(ndr, "%s: ARRAY(%d)", "names", r->in.num_names);
-		ndr->depth++;
-		for (cntr_names_0=0;cntr_names_0<r->in.num_names;cntr_names_0++) {
-			char *idx_0=NULL;
-			if (asprintf(&idx_0, "[%d]", cntr_names_0) != -1) {
-				ndr_print_lsa_String(ndr, "names", &r->in.names[cntr_names_0]);
-				free(idx_0);
-			}
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sids", r->in.sids);
-		ndr->depth++;
-		ndr_print_lsa_TransSidArray3(ndr, "sids", r->in.sids);
-		ndr->depth--;
-		ndr_print_lsa_LookupNamesLevel(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "count", r->in.count);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "count", *r->in.count);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "unknown1", r->in.unknown1);
-		ndr_print_uint32(ndr, "unknown2", r->in.unknown2);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_LookupNames4");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domains", r->out.domains);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domains", *r->out.domains);
-		ndr->depth++;
-		if (*r->out.domains) {
-			ndr_print_lsa_RefDomainList(ndr, "domains", *r->out.domains);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sids", r->out.sids);
-		ndr->depth++;
-		ndr_print_lsa_TransSidArray3(ndr, "sids", r->out.sids);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "count", r->out.count);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "count", *r->out.count);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_LSAROPENPOLICYSCE(struct ndr_push *ndr, int flags, const struct lsa_LSAROPENPOLICYSCE *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_LSAROPENPOLICYSCE(struct ndr_pull *ndr, int flags, struct lsa_LSAROPENPOLICYSCE *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_LSAROPENPOLICYSCE(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LSAROPENPOLICYSCE *r)
-{
-	ndr_print_struct(ndr, name, "lsa_LSAROPENPOLICYSCE");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_LSAROPENPOLICYSCE");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_LSAROPENPOLICYSCE");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_LSARADTREGISTERSECURITYEVENTSOURCE(struct ndr_push *ndr, int flags, const struct lsa_LSARADTREGISTERSECURITYEVENTSOURCE *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_LSARADTREGISTERSECURITYEVENTSOURCE(struct ndr_pull *ndr, int flags, struct lsa_LSARADTREGISTERSECURITYEVENTSOURCE *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_LSARADTREGISTERSECURITYEVENTSOURCE(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LSARADTREGISTERSECURITYEVENTSOURCE *r)
-{
-	ndr_print_struct(ndr, name, "lsa_LSARADTREGISTERSECURITYEVENTSOURCE");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_LSARADTREGISTERSECURITYEVENTSOURCE");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_LSARADTREGISTERSECURITYEVENTSOURCE");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE(struct ndr_push *ndr, int flags, const struct lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE(struct ndr_pull *ndr, int flags, struct lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE *r)
-{
-	ndr_print_struct(ndr, name, "lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_lsa_LSARADTREPORTSECURITYEVENT(struct ndr_push *ndr, int flags, const struct lsa_LSARADTREPORTSECURITYEVENT *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_lsa_LSARADTREPORTSECURITYEVENT(struct ndr_pull *ndr, int flags, struct lsa_LSARADTREPORTSECURITYEVENT *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_lsa_LSARADTREPORTSECURITYEVENT(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LSARADTREPORTSECURITYEVENT *r)
-{
-	ndr_print_struct(ndr, name, "lsa_LSARADTREPORTSECURITYEVENT");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "lsa_LSARADTREPORTSECURITYEVENT");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "lsa_LSARADTREPORTSECURITYEVENT");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static const struct ndr_interface_call lsarpc_calls[] = {
-	{
-		"lsa_Close",
-		sizeof(struct lsa_Close),
-		(ndr_push_flags_fn_t) ndr_push_lsa_Close,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_Close,
-		(ndr_print_function_t) ndr_print_lsa_Close,
-		false,
-	},
-	{
-		"lsa_Delete",
-		sizeof(struct lsa_Delete),
-		(ndr_push_flags_fn_t) ndr_push_lsa_Delete,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_Delete,
-		(ndr_print_function_t) ndr_print_lsa_Delete,
-		false,
-	},
-	{
-		"lsa_EnumPrivs",
-		sizeof(struct lsa_EnumPrivs),
-		(ndr_push_flags_fn_t) ndr_push_lsa_EnumPrivs,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_EnumPrivs,
-		(ndr_print_function_t) ndr_print_lsa_EnumPrivs,
-		false,
-	},
-	{
-		"lsa_QuerySecurity",
-		sizeof(struct lsa_QuerySecurity),
-		(ndr_push_flags_fn_t) ndr_push_lsa_QuerySecurity,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_QuerySecurity,
-		(ndr_print_function_t) ndr_print_lsa_QuerySecurity,
-		false,
-	},
-	{
-		"lsa_SetSecObj",
-		sizeof(struct lsa_SetSecObj),
-		(ndr_push_flags_fn_t) ndr_push_lsa_SetSecObj,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_SetSecObj,
-		(ndr_print_function_t) ndr_print_lsa_SetSecObj,
-		false,
-	},
-	{
-		"lsa_ChangePassword",
-		sizeof(struct lsa_ChangePassword),
-		(ndr_push_flags_fn_t) ndr_push_lsa_ChangePassword,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_ChangePassword,
-		(ndr_print_function_t) ndr_print_lsa_ChangePassword,
-		false,
-	},
-	{
-		"lsa_OpenPolicy",
-		sizeof(struct lsa_OpenPolicy),
-		(ndr_push_flags_fn_t) ndr_push_lsa_OpenPolicy,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_OpenPolicy,
-		(ndr_print_function_t) ndr_print_lsa_OpenPolicy,
-		false,
-	},
-	{
-		"lsa_QueryInfoPolicy",
-		sizeof(struct lsa_QueryInfoPolicy),
-		(ndr_push_flags_fn_t) ndr_push_lsa_QueryInfoPolicy,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_QueryInfoPolicy,
-		(ndr_print_function_t) ndr_print_lsa_QueryInfoPolicy,
-		false,
-	},
-	{
-		"lsa_SetInfoPolicy",
-		sizeof(struct lsa_SetInfoPolicy),
-		(ndr_push_flags_fn_t) ndr_push_lsa_SetInfoPolicy,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_SetInfoPolicy,
-		(ndr_print_function_t) ndr_print_lsa_SetInfoPolicy,
-		false,
-	},
-	{
-		"lsa_ClearAuditLog",
-		sizeof(struct lsa_ClearAuditLog),
-		(ndr_push_flags_fn_t) ndr_push_lsa_ClearAuditLog,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_ClearAuditLog,
-		(ndr_print_function_t) ndr_print_lsa_ClearAuditLog,
-		false,
-	},
-	{
-		"lsa_CreateAccount",
-		sizeof(struct lsa_CreateAccount),
-		(ndr_push_flags_fn_t) ndr_push_lsa_CreateAccount,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_CreateAccount,
-		(ndr_print_function_t) ndr_print_lsa_CreateAccount,
-		false,
-	},
-	{
-		"lsa_EnumAccounts",
-		sizeof(struct lsa_EnumAccounts),
-		(ndr_push_flags_fn_t) ndr_push_lsa_EnumAccounts,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_EnumAccounts,
-		(ndr_print_function_t) ndr_print_lsa_EnumAccounts,
-		false,
-	},
-	{
-		"lsa_CreateTrustedDomain",
-		sizeof(struct lsa_CreateTrustedDomain),
-		(ndr_push_flags_fn_t) ndr_push_lsa_CreateTrustedDomain,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_CreateTrustedDomain,
-		(ndr_print_function_t) ndr_print_lsa_CreateTrustedDomain,
-		false,
-	},
-	{
-		"lsa_EnumTrustDom",
-		sizeof(struct lsa_EnumTrustDom),
-		(ndr_push_flags_fn_t) ndr_push_lsa_EnumTrustDom,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_EnumTrustDom,
-		(ndr_print_function_t) ndr_print_lsa_EnumTrustDom,
-		false,
-	},
-	{
-		"lsa_LookupNames",
-		sizeof(struct lsa_LookupNames),
-		(ndr_push_flags_fn_t) ndr_push_lsa_LookupNames,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_LookupNames,
-		(ndr_print_function_t) ndr_print_lsa_LookupNames,
-		false,
-	},
-	{
-		"lsa_LookupSids",
-		sizeof(struct lsa_LookupSids),
-		(ndr_push_flags_fn_t) ndr_push_lsa_LookupSids,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_LookupSids,
-		(ndr_print_function_t) ndr_print_lsa_LookupSids,
-		false,
-	},
-	{
-		"lsa_CreateSecret",
-		sizeof(struct lsa_CreateSecret),
-		(ndr_push_flags_fn_t) ndr_push_lsa_CreateSecret,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_CreateSecret,
-		(ndr_print_function_t) ndr_print_lsa_CreateSecret,
-		false,
-	},
-	{
-		"lsa_OpenAccount",
-		sizeof(struct lsa_OpenAccount),
-		(ndr_push_flags_fn_t) ndr_push_lsa_OpenAccount,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_OpenAccount,
-		(ndr_print_function_t) ndr_print_lsa_OpenAccount,
-		false,
-	},
-	{
-		"lsa_EnumPrivsAccount",
-		sizeof(struct lsa_EnumPrivsAccount),
-		(ndr_push_flags_fn_t) ndr_push_lsa_EnumPrivsAccount,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_EnumPrivsAccount,
-		(ndr_print_function_t) ndr_print_lsa_EnumPrivsAccount,
-		false,
-	},
-	{
-		"lsa_AddPrivilegesToAccount",
-		sizeof(struct lsa_AddPrivilegesToAccount),
-		(ndr_push_flags_fn_t) ndr_push_lsa_AddPrivilegesToAccount,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_AddPrivilegesToAccount,
-		(ndr_print_function_t) ndr_print_lsa_AddPrivilegesToAccount,
-		false,
-	},
-	{
-		"lsa_RemovePrivilegesFromAccount",
-		sizeof(struct lsa_RemovePrivilegesFromAccount),
-		(ndr_push_flags_fn_t) ndr_push_lsa_RemovePrivilegesFromAccount,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_RemovePrivilegesFromAccount,
-		(ndr_print_function_t) ndr_print_lsa_RemovePrivilegesFromAccount,
-		false,
-	},
-	{
-		"lsa_GetQuotasForAccount",
-		sizeof(struct lsa_GetQuotasForAccount),
-		(ndr_push_flags_fn_t) ndr_push_lsa_GetQuotasForAccount,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_GetQuotasForAccount,
-		(ndr_print_function_t) ndr_print_lsa_GetQuotasForAccount,
-		false,
-	},
-	{
-		"lsa_SetQuotasForAccount",
-		sizeof(struct lsa_SetQuotasForAccount),
-		(ndr_push_flags_fn_t) ndr_push_lsa_SetQuotasForAccount,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_SetQuotasForAccount,
-		(ndr_print_function_t) ndr_print_lsa_SetQuotasForAccount,
-		false,
-	},
-	{
-		"lsa_GetSystemAccessAccount",
-		sizeof(struct lsa_GetSystemAccessAccount),
-		(ndr_push_flags_fn_t) ndr_push_lsa_GetSystemAccessAccount,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_GetSystemAccessAccount,
-		(ndr_print_function_t) ndr_print_lsa_GetSystemAccessAccount,
-		false,
-	},
-	{
-		"lsa_SetSystemAccessAccount",
-		sizeof(struct lsa_SetSystemAccessAccount),
-		(ndr_push_flags_fn_t) ndr_push_lsa_SetSystemAccessAccount,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_SetSystemAccessAccount,
-		(ndr_print_function_t) ndr_print_lsa_SetSystemAccessAccount,
-		false,
-	},
-	{
-		"lsa_OpenTrustedDomain",
-		sizeof(struct lsa_OpenTrustedDomain),
-		(ndr_push_flags_fn_t) ndr_push_lsa_OpenTrustedDomain,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_OpenTrustedDomain,
-		(ndr_print_function_t) ndr_print_lsa_OpenTrustedDomain,
-		false,
-	},
-	{
-		"lsa_QueryTrustedDomainInfo",
-		sizeof(struct lsa_QueryTrustedDomainInfo),
-		(ndr_push_flags_fn_t) ndr_push_lsa_QueryTrustedDomainInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_QueryTrustedDomainInfo,
-		(ndr_print_function_t) ndr_print_lsa_QueryTrustedDomainInfo,
-		false,
-	},
-	{
-		"lsa_SetInformationTrustedDomain",
-		sizeof(struct lsa_SetInformationTrustedDomain),
-		(ndr_push_flags_fn_t) ndr_push_lsa_SetInformationTrustedDomain,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_SetInformationTrustedDomain,
-		(ndr_print_function_t) ndr_print_lsa_SetInformationTrustedDomain,
-		false,
-	},
-	{
-		"lsa_OpenSecret",
-		sizeof(struct lsa_OpenSecret),
-		(ndr_push_flags_fn_t) ndr_push_lsa_OpenSecret,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_OpenSecret,
-		(ndr_print_function_t) ndr_print_lsa_OpenSecret,
-		false,
-	},
-	{
-		"lsa_SetSecret",
-		sizeof(struct lsa_SetSecret),
-		(ndr_push_flags_fn_t) ndr_push_lsa_SetSecret,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_SetSecret,
-		(ndr_print_function_t) ndr_print_lsa_SetSecret,
-		false,
-	},
-	{
-		"lsa_QuerySecret",
-		sizeof(struct lsa_QuerySecret),
-		(ndr_push_flags_fn_t) ndr_push_lsa_QuerySecret,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_QuerySecret,
-		(ndr_print_function_t) ndr_print_lsa_QuerySecret,
-		false,
-	},
-	{
-		"lsa_LookupPrivValue",
-		sizeof(struct lsa_LookupPrivValue),
-		(ndr_push_flags_fn_t) ndr_push_lsa_LookupPrivValue,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_LookupPrivValue,
-		(ndr_print_function_t) ndr_print_lsa_LookupPrivValue,
-		false,
-	},
-	{
-		"lsa_LookupPrivName",
-		sizeof(struct lsa_LookupPrivName),
-		(ndr_push_flags_fn_t) ndr_push_lsa_LookupPrivName,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_LookupPrivName,
-		(ndr_print_function_t) ndr_print_lsa_LookupPrivName,
-		false,
-	},
-	{
-		"lsa_LookupPrivDisplayName",
-		sizeof(struct lsa_LookupPrivDisplayName),
-		(ndr_push_flags_fn_t) ndr_push_lsa_LookupPrivDisplayName,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_LookupPrivDisplayName,
-		(ndr_print_function_t) ndr_print_lsa_LookupPrivDisplayName,
-		false,
-	},
-	{
-		"lsa_DeleteObject",
-		sizeof(struct lsa_DeleteObject),
-		(ndr_push_flags_fn_t) ndr_push_lsa_DeleteObject,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_DeleteObject,
-		(ndr_print_function_t) ndr_print_lsa_DeleteObject,
-		false,
-	},
-	{
-		"lsa_EnumAccountsWithUserRight",
-		sizeof(struct lsa_EnumAccountsWithUserRight),
-		(ndr_push_flags_fn_t) ndr_push_lsa_EnumAccountsWithUserRight,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_EnumAccountsWithUserRight,
-		(ndr_print_function_t) ndr_print_lsa_EnumAccountsWithUserRight,
-		false,
-	},
-	{
-		"lsa_EnumAccountRights",
-		sizeof(struct lsa_EnumAccountRights),
-		(ndr_push_flags_fn_t) ndr_push_lsa_EnumAccountRights,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_EnumAccountRights,
-		(ndr_print_function_t) ndr_print_lsa_EnumAccountRights,
-		false,
-	},
-	{
-		"lsa_AddAccountRights",
-		sizeof(struct lsa_AddAccountRights),
-		(ndr_push_flags_fn_t) ndr_push_lsa_AddAccountRights,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_AddAccountRights,
-		(ndr_print_function_t) ndr_print_lsa_AddAccountRights,
-		false,
-	},
-	{
-		"lsa_RemoveAccountRights",
-		sizeof(struct lsa_RemoveAccountRights),
-		(ndr_push_flags_fn_t) ndr_push_lsa_RemoveAccountRights,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_RemoveAccountRights,
-		(ndr_print_function_t) ndr_print_lsa_RemoveAccountRights,
-		false,
-	},
-	{
-		"lsa_QueryTrustedDomainInfoBySid",
-		sizeof(struct lsa_QueryTrustedDomainInfoBySid),
-		(ndr_push_flags_fn_t) ndr_push_lsa_QueryTrustedDomainInfoBySid,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_QueryTrustedDomainInfoBySid,
-		(ndr_print_function_t) ndr_print_lsa_QueryTrustedDomainInfoBySid,
-		false,
-	},
-	{
-		"lsa_SetTrustedDomainInfo",
-		sizeof(struct lsa_SetTrustedDomainInfo),
-		(ndr_push_flags_fn_t) ndr_push_lsa_SetTrustedDomainInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_SetTrustedDomainInfo,
-		(ndr_print_function_t) ndr_print_lsa_SetTrustedDomainInfo,
-		false,
-	},
-	{
-		"lsa_DeleteTrustedDomain",
-		sizeof(struct lsa_DeleteTrustedDomain),
-		(ndr_push_flags_fn_t) ndr_push_lsa_DeleteTrustedDomain,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_DeleteTrustedDomain,
-		(ndr_print_function_t) ndr_print_lsa_DeleteTrustedDomain,
-		false,
-	},
-	{
-		"lsa_StorePrivateData",
-		sizeof(struct lsa_StorePrivateData),
-		(ndr_push_flags_fn_t) ndr_push_lsa_StorePrivateData,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_StorePrivateData,
-		(ndr_print_function_t) ndr_print_lsa_StorePrivateData,
-		false,
-	},
-	{
-		"lsa_RetrievePrivateData",
-		sizeof(struct lsa_RetrievePrivateData),
-		(ndr_push_flags_fn_t) ndr_push_lsa_RetrievePrivateData,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_RetrievePrivateData,
-		(ndr_print_function_t) ndr_print_lsa_RetrievePrivateData,
-		false,
-	},
-	{
-		"lsa_OpenPolicy2",
-		sizeof(struct lsa_OpenPolicy2),
-		(ndr_push_flags_fn_t) ndr_push_lsa_OpenPolicy2,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_OpenPolicy2,
-		(ndr_print_function_t) ndr_print_lsa_OpenPolicy2,
-		false,
-	},
-	{
-		"lsa_GetUserName",
-		sizeof(struct lsa_GetUserName),
-		(ndr_push_flags_fn_t) ndr_push_lsa_GetUserName,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_GetUserName,
-		(ndr_print_function_t) ndr_print_lsa_GetUserName,
-		false,
-	},
-	{
-		"lsa_QueryInfoPolicy2",
-		sizeof(struct lsa_QueryInfoPolicy2),
-		(ndr_push_flags_fn_t) ndr_push_lsa_QueryInfoPolicy2,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_QueryInfoPolicy2,
-		(ndr_print_function_t) ndr_print_lsa_QueryInfoPolicy2,
-		false,
-	},
-	{
-		"lsa_SetInfoPolicy2",
-		sizeof(struct lsa_SetInfoPolicy2),
-		(ndr_push_flags_fn_t) ndr_push_lsa_SetInfoPolicy2,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_SetInfoPolicy2,
-		(ndr_print_function_t) ndr_print_lsa_SetInfoPolicy2,
-		false,
-	},
-	{
-		"lsa_QueryTrustedDomainInfoByName",
-		sizeof(struct lsa_QueryTrustedDomainInfoByName),
-		(ndr_push_flags_fn_t) ndr_push_lsa_QueryTrustedDomainInfoByName,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_QueryTrustedDomainInfoByName,
-		(ndr_print_function_t) ndr_print_lsa_QueryTrustedDomainInfoByName,
-		false,
-	},
-	{
-		"lsa_SetTrustedDomainInfoByName",
-		sizeof(struct lsa_SetTrustedDomainInfoByName),
-		(ndr_push_flags_fn_t) ndr_push_lsa_SetTrustedDomainInfoByName,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_SetTrustedDomainInfoByName,
-		(ndr_print_function_t) ndr_print_lsa_SetTrustedDomainInfoByName,
-		false,
-	},
-	{
-		"lsa_EnumTrustedDomainsEx",
-		sizeof(struct lsa_EnumTrustedDomainsEx),
-		(ndr_push_flags_fn_t) ndr_push_lsa_EnumTrustedDomainsEx,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_EnumTrustedDomainsEx,
-		(ndr_print_function_t) ndr_print_lsa_EnumTrustedDomainsEx,
-		false,
-	},
-	{
-		"lsa_CreateTrustedDomainEx",
-		sizeof(struct lsa_CreateTrustedDomainEx),
-		(ndr_push_flags_fn_t) ndr_push_lsa_CreateTrustedDomainEx,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_CreateTrustedDomainEx,
-		(ndr_print_function_t) ndr_print_lsa_CreateTrustedDomainEx,
-		false,
-	},
-	{
-		"lsa_CloseTrustedDomainEx",
-		sizeof(struct lsa_CloseTrustedDomainEx),
-		(ndr_push_flags_fn_t) ndr_push_lsa_CloseTrustedDomainEx,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_CloseTrustedDomainEx,
-		(ndr_print_function_t) ndr_print_lsa_CloseTrustedDomainEx,
-		false,
-	},
-	{
-		"lsa_QueryDomainInformationPolicy",
-		sizeof(struct lsa_QueryDomainInformationPolicy),
-		(ndr_push_flags_fn_t) ndr_push_lsa_QueryDomainInformationPolicy,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_QueryDomainInformationPolicy,
-		(ndr_print_function_t) ndr_print_lsa_QueryDomainInformationPolicy,
-		false,
-	},
-	{
-		"lsa_SetDomainInformationPolicy",
-		sizeof(struct lsa_SetDomainInformationPolicy),
-		(ndr_push_flags_fn_t) ndr_push_lsa_SetDomainInformationPolicy,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_SetDomainInformationPolicy,
-		(ndr_print_function_t) ndr_print_lsa_SetDomainInformationPolicy,
-		false,
-	},
-	{
-		"lsa_OpenTrustedDomainByName",
-		sizeof(struct lsa_OpenTrustedDomainByName),
-		(ndr_push_flags_fn_t) ndr_push_lsa_OpenTrustedDomainByName,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_OpenTrustedDomainByName,
-		(ndr_print_function_t) ndr_print_lsa_OpenTrustedDomainByName,
-		false,
-	},
-	{
-		"lsa_TestCall",
-		sizeof(struct lsa_TestCall),
-		(ndr_push_flags_fn_t) ndr_push_lsa_TestCall,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_TestCall,
-		(ndr_print_function_t) ndr_print_lsa_TestCall,
-		false,
-	},
-	{
-		"lsa_LookupSids2",
-		sizeof(struct lsa_LookupSids2),
-		(ndr_push_flags_fn_t) ndr_push_lsa_LookupSids2,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_LookupSids2,
-		(ndr_print_function_t) ndr_print_lsa_LookupSids2,
-		false,
-	},
-	{
-		"lsa_LookupNames2",
-		sizeof(struct lsa_LookupNames2),
-		(ndr_push_flags_fn_t) ndr_push_lsa_LookupNames2,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_LookupNames2,
-		(ndr_print_function_t) ndr_print_lsa_LookupNames2,
-		false,
-	},
-	{
-		"lsa_CreateTrustedDomainEx2",
-		sizeof(struct lsa_CreateTrustedDomainEx2),
-		(ndr_push_flags_fn_t) ndr_push_lsa_CreateTrustedDomainEx2,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_CreateTrustedDomainEx2,
-		(ndr_print_function_t) ndr_print_lsa_CreateTrustedDomainEx2,
-		false,
-	},
-	{
-		"lsa_CREDRWRITE",
-		sizeof(struct lsa_CREDRWRITE),
-		(ndr_push_flags_fn_t) ndr_push_lsa_CREDRWRITE,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_CREDRWRITE,
-		(ndr_print_function_t) ndr_print_lsa_CREDRWRITE,
-		false,
-	},
-	{
-		"lsa_CREDRREAD",
-		sizeof(struct lsa_CREDRREAD),
-		(ndr_push_flags_fn_t) ndr_push_lsa_CREDRREAD,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_CREDRREAD,
-		(ndr_print_function_t) ndr_print_lsa_CREDRREAD,
-		false,
-	},
-	{
-		"lsa_CREDRENUMERATE",
-		sizeof(struct lsa_CREDRENUMERATE),
-		(ndr_push_flags_fn_t) ndr_push_lsa_CREDRENUMERATE,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_CREDRENUMERATE,
-		(ndr_print_function_t) ndr_print_lsa_CREDRENUMERATE,
-		false,
-	},
-	{
-		"lsa_CREDRWRITEDOMAINCREDENTIALS",
-		sizeof(struct lsa_CREDRWRITEDOMAINCREDENTIALS),
-		(ndr_push_flags_fn_t) ndr_push_lsa_CREDRWRITEDOMAINCREDENTIALS,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_CREDRWRITEDOMAINCREDENTIALS,
-		(ndr_print_function_t) ndr_print_lsa_CREDRWRITEDOMAINCREDENTIALS,
-		false,
-	},
-	{
-		"lsa_CREDRREADDOMAINCREDENTIALS",
-		sizeof(struct lsa_CREDRREADDOMAINCREDENTIALS),
-		(ndr_push_flags_fn_t) ndr_push_lsa_CREDRREADDOMAINCREDENTIALS,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_CREDRREADDOMAINCREDENTIALS,
-		(ndr_print_function_t) ndr_print_lsa_CREDRREADDOMAINCREDENTIALS,
-		false,
-	},
-	{
-		"lsa_CREDRDELETE",
-		sizeof(struct lsa_CREDRDELETE),
-		(ndr_push_flags_fn_t) ndr_push_lsa_CREDRDELETE,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_CREDRDELETE,
-		(ndr_print_function_t) ndr_print_lsa_CREDRDELETE,
-		false,
-	},
-	{
-		"lsa_CREDRGETTARGETINFO",
-		sizeof(struct lsa_CREDRGETTARGETINFO),
-		(ndr_push_flags_fn_t) ndr_push_lsa_CREDRGETTARGETINFO,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_CREDRGETTARGETINFO,
-		(ndr_print_function_t) ndr_print_lsa_CREDRGETTARGETINFO,
-		false,
-	},
-	{
-		"lsa_CREDRPROFILELOADED",
-		sizeof(struct lsa_CREDRPROFILELOADED),
-		(ndr_push_flags_fn_t) ndr_push_lsa_CREDRPROFILELOADED,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_CREDRPROFILELOADED,
-		(ndr_print_function_t) ndr_print_lsa_CREDRPROFILELOADED,
-		false,
-	},
-	{
-		"lsa_LookupNames3",
-		sizeof(struct lsa_LookupNames3),
-		(ndr_push_flags_fn_t) ndr_push_lsa_LookupNames3,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_LookupNames3,
-		(ndr_print_function_t) ndr_print_lsa_LookupNames3,
-		false,
-	},
-	{
-		"lsa_CREDRGETSESSIONTYPES",
-		sizeof(struct lsa_CREDRGETSESSIONTYPES),
-		(ndr_push_flags_fn_t) ndr_push_lsa_CREDRGETSESSIONTYPES,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_CREDRGETSESSIONTYPES,
-		(ndr_print_function_t) ndr_print_lsa_CREDRGETSESSIONTYPES,
-		false,
-	},
-	{
-		"lsa_LSARREGISTERAUDITEVENT",
-		sizeof(struct lsa_LSARREGISTERAUDITEVENT),
-		(ndr_push_flags_fn_t) ndr_push_lsa_LSARREGISTERAUDITEVENT,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_LSARREGISTERAUDITEVENT,
-		(ndr_print_function_t) ndr_print_lsa_LSARREGISTERAUDITEVENT,
-		false,
-	},
-	{
-		"lsa_LSARGENAUDITEVENT",
-		sizeof(struct lsa_LSARGENAUDITEVENT),
-		(ndr_push_flags_fn_t) ndr_push_lsa_LSARGENAUDITEVENT,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_LSARGENAUDITEVENT,
-		(ndr_print_function_t) ndr_print_lsa_LSARGENAUDITEVENT,
-		false,
-	},
-	{
-		"lsa_LSARUNREGISTERAUDITEVENT",
-		sizeof(struct lsa_LSARUNREGISTERAUDITEVENT),
-		(ndr_push_flags_fn_t) ndr_push_lsa_LSARUNREGISTERAUDITEVENT,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_LSARUNREGISTERAUDITEVENT,
-		(ndr_print_function_t) ndr_print_lsa_LSARUNREGISTERAUDITEVENT,
-		false,
-	},
-	{
-		"lsa_lsaRQueryForestTrustInformation",
-		sizeof(struct lsa_lsaRQueryForestTrustInformation),
-		(ndr_push_flags_fn_t) ndr_push_lsa_lsaRQueryForestTrustInformation,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_lsaRQueryForestTrustInformation,
-		(ndr_print_function_t) ndr_print_lsa_lsaRQueryForestTrustInformation,
-		false,
-	},
-	{
-		"lsa_LSARSETFORESTTRUSTINFORMATION",
-		sizeof(struct lsa_LSARSETFORESTTRUSTINFORMATION),
-		(ndr_push_flags_fn_t) ndr_push_lsa_LSARSETFORESTTRUSTINFORMATION,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_LSARSETFORESTTRUSTINFORMATION,
-		(ndr_print_function_t) ndr_print_lsa_LSARSETFORESTTRUSTINFORMATION,
-		false,
-	},
-	{
-		"lsa_CREDRRENAME",
-		sizeof(struct lsa_CREDRRENAME),
-		(ndr_push_flags_fn_t) ndr_push_lsa_CREDRRENAME,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_CREDRRENAME,
-		(ndr_print_function_t) ndr_print_lsa_CREDRRENAME,
-		false,
-	},
-	{
-		"lsa_LookupSids3",
-		sizeof(struct lsa_LookupSids3),
-		(ndr_push_flags_fn_t) ndr_push_lsa_LookupSids3,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_LookupSids3,
-		(ndr_print_function_t) ndr_print_lsa_LookupSids3,
-		false,
-	},
-	{
-		"lsa_LookupNames4",
-		sizeof(struct lsa_LookupNames4),
-		(ndr_push_flags_fn_t) ndr_push_lsa_LookupNames4,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_LookupNames4,
-		(ndr_print_function_t) ndr_print_lsa_LookupNames4,
-		false,
-	},
-	{
-		"lsa_LSAROPENPOLICYSCE",
-		sizeof(struct lsa_LSAROPENPOLICYSCE),
-		(ndr_push_flags_fn_t) ndr_push_lsa_LSAROPENPOLICYSCE,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_LSAROPENPOLICYSCE,
-		(ndr_print_function_t) ndr_print_lsa_LSAROPENPOLICYSCE,
-		false,
-	},
-	{
-		"lsa_LSARADTREGISTERSECURITYEVENTSOURCE",
-		sizeof(struct lsa_LSARADTREGISTERSECURITYEVENTSOURCE),
-		(ndr_push_flags_fn_t) ndr_push_lsa_LSARADTREGISTERSECURITYEVENTSOURCE,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_LSARADTREGISTERSECURITYEVENTSOURCE,
-		(ndr_print_function_t) ndr_print_lsa_LSARADTREGISTERSECURITYEVENTSOURCE,
-		false,
-	},
-	{
-		"lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE",
-		sizeof(struct lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE),
-		(ndr_push_flags_fn_t) ndr_push_lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE,
-		(ndr_print_function_t) ndr_print_lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE,
-		false,
-	},
-	{
-		"lsa_LSARADTREPORTSECURITYEVENT",
-		sizeof(struct lsa_LSARADTREPORTSECURITYEVENT),
-		(ndr_push_flags_fn_t) ndr_push_lsa_LSARADTREPORTSECURITYEVENT,
-		(ndr_pull_flags_fn_t) ndr_pull_lsa_LSARADTREPORTSECURITYEVENT,
-		(ndr_print_function_t) ndr_print_lsa_LSARADTREPORTSECURITYEVENT,
-		false,
-	},
-	{ NULL, 0, NULL, NULL, NULL, false }
-};
-
-static const char * const lsarpc_endpoint_strings[] = {
-	"ncacn_np:[\\pipe\\lsarpc]", 
-	"ncacn_np:[\\pipe\\netlogon]", 
-	"ncacn_np:[\\pipe\\lsass]", 
-	"ncacn_ip_tcp:", 
-	"ncalrpc:", 
-};
-
-static const struct ndr_interface_string_array lsarpc_endpoints = {
-	.count	= 5,
-	.names	= lsarpc_endpoint_strings
-};
-
-static const char * const lsarpc_authservice_strings[] = {
-	"host", 
-};
-
-static const struct ndr_interface_string_array lsarpc_authservices = {
-	.count	= 1,
-	.names	= lsarpc_authservice_strings
-};
-
-
-const struct ndr_interface_table ndr_table_lsarpc = {
-	.name		= "lsarpc",
-	.syntax_id	= {
-		{0x12345778,0x1234,0xabcd,{0xef,0x00},{0x01,0x23,0x45,0x67,0x89,0xab}},
-		NDR_LSARPC_VERSION
-	},
-	.helpstring	= NDR_LSARPC_HELPSTRING,
-	.num_calls	= 82,
-	.calls		= lsarpc_calls,
-	.endpoints	= &lsarpc_endpoints,
-	.authservices	= &lsarpc_authservices
-};
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_lsa.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_lsa.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_lsa.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,383 +0,0 @@
-/* header auto-generated by pidl */
-
-#include "librpc/ndr/libndr.h"
-#include "librpc/gen_ndr/lsa.h"
-
-#ifndef _HEADER_NDR_lsarpc
-#define _HEADER_NDR_lsarpc
-
-#define NDR_LSARPC_UUID "12345778-1234-abcd-ef00-0123456789ab"
-#define NDR_LSARPC_VERSION 0.0
-#define NDR_LSARPC_NAME "lsarpc"
-#define NDR_LSARPC_HELPSTRING "Local Security Authority"
-extern const struct ndr_interface_table ndr_table_lsarpc;
-#define NDR_LSA_CLOSE (0x00)
-
-#define NDR_LSA_DELETE (0x01)
-
-#define NDR_LSA_ENUMPRIVS (0x02)
-
-#define NDR_LSA_QUERYSECURITY (0x03)
-
-#define NDR_LSA_SETSECOBJ (0x04)
-
-#define NDR_LSA_CHANGEPASSWORD (0x05)
-
-#define NDR_LSA_OPENPOLICY (0x06)
-
-#define NDR_LSA_QUERYINFOPOLICY (0x07)
-
-#define NDR_LSA_SETINFOPOLICY (0x08)
-
-#define NDR_LSA_CLEARAUDITLOG (0x09)
-
-#define NDR_LSA_CREATEACCOUNT (0x0a)
-
-#define NDR_LSA_ENUMACCOUNTS (0x0b)
-
-#define NDR_LSA_CREATETRUSTEDDOMAIN (0x0c)
-
-#define NDR_LSA_ENUMTRUSTDOM (0x0d)
-
-#define NDR_LSA_LOOKUPNAMES (0x0e)
-
-#define NDR_LSA_LOOKUPSIDS (0x0f)
-
-#define NDR_LSA_CREATESECRET (0x10)
-
-#define NDR_LSA_OPENACCOUNT (0x11)
-
-#define NDR_LSA_ENUMPRIVSACCOUNT (0x12)
-
-#define NDR_LSA_ADDPRIVILEGESTOACCOUNT (0x13)
-
-#define NDR_LSA_REMOVEPRIVILEGESFROMACCOUNT (0x14)
-
-#define NDR_LSA_GETQUOTASFORACCOUNT (0x15)
-
-#define NDR_LSA_SETQUOTASFORACCOUNT (0x16)
-
-#define NDR_LSA_GETSYSTEMACCESSACCOUNT (0x17)
-
-#define NDR_LSA_SETSYSTEMACCESSACCOUNT (0x18)
-
-#define NDR_LSA_OPENTRUSTEDDOMAIN (0x19)
-
-#define NDR_LSA_QUERYTRUSTEDDOMAININFO (0x1a)
-
-#define NDR_LSA_SETINFORMATIONTRUSTEDDOMAIN (0x1b)
-
-#define NDR_LSA_OPENSECRET (0x1c)
-
-#define NDR_LSA_SETSECRET (0x1d)
-
-#define NDR_LSA_QUERYSECRET (0x1e)
-
-#define NDR_LSA_LOOKUPPRIVVALUE (0x1f)
-
-#define NDR_LSA_LOOKUPPRIVNAME (0x20)
-
-#define NDR_LSA_LOOKUPPRIVDISPLAYNAME (0x21)
-
-#define NDR_LSA_DELETEOBJECT (0x22)
-
-#define NDR_LSA_ENUMACCOUNTSWITHUSERRIGHT (0x23)
-
-#define NDR_LSA_ENUMACCOUNTRIGHTS (0x24)
-
-#define NDR_LSA_ADDACCOUNTRIGHTS (0x25)
-
-#define NDR_LSA_REMOVEACCOUNTRIGHTS (0x26)
-
-#define NDR_LSA_QUERYTRUSTEDDOMAININFOBYSID (0x27)
-
-#define NDR_LSA_SETTRUSTEDDOMAININFO (0x28)
-
-#define NDR_LSA_DELETETRUSTEDDOMAIN (0x29)
-
-#define NDR_LSA_STOREPRIVATEDATA (0x2a)
-
-#define NDR_LSA_RETRIEVEPRIVATEDATA (0x2b)
-
-#define NDR_LSA_OPENPOLICY2 (0x2c)
-
-#define NDR_LSA_GETUSERNAME (0x2d)
-
-#define NDR_LSA_QUERYINFOPOLICY2 (0x2e)
-
-#define NDR_LSA_SETINFOPOLICY2 (0x2f)
-
-#define NDR_LSA_QUERYTRUSTEDDOMAININFOBYNAME (0x30)
-
-#define NDR_LSA_SETTRUSTEDDOMAININFOBYNAME (0x31)
-
-#define NDR_LSA_ENUMTRUSTEDDOMAINSEX (0x32)
-
-#define NDR_LSA_CREATETRUSTEDDOMAINEX (0x33)
-
-#define NDR_LSA_CLOSETRUSTEDDOMAINEX (0x34)
-
-#define NDR_LSA_QUERYDOMAININFORMATIONPOLICY (0x35)
-
-#define NDR_LSA_SETDOMAININFORMATIONPOLICY (0x36)
-
-#define NDR_LSA_OPENTRUSTEDDOMAINBYNAME (0x37)
-
-#define NDR_LSA_TESTCALL (0x38)
-
-#define NDR_LSA_LOOKUPSIDS2 (0x39)
-
-#define NDR_LSA_LOOKUPNAMES2 (0x3a)
-
-#define NDR_LSA_CREATETRUSTEDDOMAINEX2 (0x3b)
-
-#define NDR_LSA_CREDRWRITE (0x3c)
-
-#define NDR_LSA_CREDRREAD (0x3d)
-
-#define NDR_LSA_CREDRENUMERATE (0x3e)
-
-#define NDR_LSA_CREDRWRITEDOMAINCREDENTIALS (0x3f)
-
-#define NDR_LSA_CREDRREADDOMAINCREDENTIALS (0x40)
-
-#define NDR_LSA_CREDRDELETE (0x41)
-
-#define NDR_LSA_CREDRGETTARGETINFO (0x42)
-
-#define NDR_LSA_CREDRPROFILELOADED (0x43)
-
-#define NDR_LSA_LOOKUPNAMES3 (0x44)
-
-#define NDR_LSA_CREDRGETSESSIONTYPES (0x45)
-
-#define NDR_LSA_LSARREGISTERAUDITEVENT (0x46)
-
-#define NDR_LSA_LSARGENAUDITEVENT (0x47)
-
-#define NDR_LSA_LSARUNREGISTERAUDITEVENT (0x48)
-
-#define NDR_LSA_LSARQUERYFORESTTRUSTINFORMATION (0x49)
-
-#define NDR_LSA_LSARSETFORESTTRUSTINFORMATION (0x4a)
-
-#define NDR_LSA_CREDRRENAME (0x4b)
-
-#define NDR_LSA_LOOKUPSIDS3 (0x4c)
-
-#define NDR_LSA_LOOKUPNAMES4 (0x4d)
-
-#define NDR_LSA_LSAROPENPOLICYSCE (0x4e)
-
-#define NDR_LSA_LSARADTREGISTERSECURITYEVENTSOURCE (0x4f)
-
-#define NDR_LSA_LSARADTUNREGISTERSECURITYEVENTSOURCE (0x50)
-
-#define NDR_LSA_LSARADTREPORTSECURITYEVENT (0x51)
-
-#define NDR_LSARPC_CALL_COUNT (82)
-enum ndr_err_code ndr_push_lsa_String(struct ndr_push *ndr, int ndr_flags, const struct lsa_String *r);
-enum ndr_err_code ndr_pull_lsa_String(struct ndr_pull *ndr, int ndr_flags, struct lsa_String *r);
-void ndr_print_lsa_String(struct ndr_print *ndr, const char *name, const struct lsa_String *r);
-enum ndr_err_code ndr_push_lsa_StringLarge(struct ndr_push *ndr, int ndr_flags, const struct lsa_StringLarge *r);
-enum ndr_err_code ndr_pull_lsa_StringLarge(struct ndr_pull *ndr, int ndr_flags, struct lsa_StringLarge *r);
-void ndr_print_lsa_StringLarge(struct ndr_print *ndr, const char *name, const struct lsa_StringLarge *r);
-enum ndr_err_code ndr_push_lsa_Strings(struct ndr_push *ndr, int ndr_flags, const struct lsa_Strings *r);
-enum ndr_err_code ndr_pull_lsa_Strings(struct ndr_pull *ndr, int ndr_flags, struct lsa_Strings *r);
-void ndr_print_lsa_Strings(struct ndr_print *ndr, const char *name, const struct lsa_Strings *r);
-enum ndr_err_code ndr_push_lsa_AsciiString(struct ndr_push *ndr, int ndr_flags, const struct lsa_AsciiString *r);
-enum ndr_err_code ndr_pull_lsa_AsciiString(struct ndr_pull *ndr, int ndr_flags, struct lsa_AsciiString *r);
-void ndr_print_lsa_AsciiString(struct ndr_print *ndr, const char *name, const struct lsa_AsciiString *r);
-enum ndr_err_code ndr_push_lsa_AsciiStringLarge(struct ndr_push *ndr, int ndr_flags, const struct lsa_AsciiStringLarge *r);
-enum ndr_err_code ndr_pull_lsa_AsciiStringLarge(struct ndr_pull *ndr, int ndr_flags, struct lsa_AsciiStringLarge *r);
-void ndr_print_lsa_AsciiStringLarge(struct ndr_print *ndr, const char *name, const struct lsa_AsciiStringLarge *r);
-enum ndr_err_code ndr_push_lsa_BinaryString(struct ndr_push *ndr, int ndr_flags, const struct lsa_BinaryString *r);
-enum ndr_err_code ndr_pull_lsa_BinaryString(struct ndr_pull *ndr, int ndr_flags, struct lsa_BinaryString *r);
-void ndr_print_lsa_BinaryString(struct ndr_print *ndr, const char *name, const struct lsa_BinaryString *r);
-void ndr_print_lsa_LUID(struct ndr_print *ndr, const char *name, const struct lsa_LUID *r);
-void ndr_print_lsa_PrivEntry(struct ndr_print *ndr, const char *name, const struct lsa_PrivEntry *r);
-void ndr_print_lsa_PrivArray(struct ndr_print *ndr, const char *name, const struct lsa_PrivArray *r);
-void ndr_print_lsa_QosInfo(struct ndr_print *ndr, const char *name, const struct lsa_QosInfo *r);
-void ndr_print_lsa_ObjectAttribute(struct ndr_print *ndr, const char *name, const struct lsa_ObjectAttribute *r);
-enum ndr_err_code ndr_push_lsa_PolicyAccessMask(struct ndr_push *ndr, int ndr_flags, uint32_t r);
-enum ndr_err_code ndr_pull_lsa_PolicyAccessMask(struct ndr_pull *ndr, int ndr_flags, uint32_t *r);
-void ndr_print_lsa_PolicyAccessMask(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_lsa_AuditLogInfo(struct ndr_print *ndr, const char *name, const struct lsa_AuditLogInfo *r);
-void ndr_print_lsa_PolicyAuditPolicy(struct ndr_print *ndr, const char *name, enum lsa_PolicyAuditPolicy r);
-void ndr_print_lsa_AuditEventsInfo(struct ndr_print *ndr, const char *name, const struct lsa_AuditEventsInfo *r);
-void ndr_print_lsa_DomainInfo(struct ndr_print *ndr, const char *name, const struct lsa_DomainInfo *r);
-void ndr_print_lsa_PDAccountInfo(struct ndr_print *ndr, const char *name, const struct lsa_PDAccountInfo *r);
-void ndr_print_lsa_ServerRole(struct ndr_print *ndr, const char *name, const struct lsa_ServerRole *r);
-void ndr_print_lsa_ReplicaSourceInfo(struct ndr_print *ndr, const char *name, const struct lsa_ReplicaSourceInfo *r);
-void ndr_print_lsa_DefaultQuotaInfo(struct ndr_print *ndr, const char *name, const struct lsa_DefaultQuotaInfo *r);
-void ndr_print_lsa_ModificationInfo(struct ndr_print *ndr, const char *name, const struct lsa_ModificationInfo *r);
-void ndr_print_lsa_AuditFullSetInfo(struct ndr_print *ndr, const char *name, const struct lsa_AuditFullSetInfo *r);
-void ndr_print_lsa_AuditFullQueryInfo(struct ndr_print *ndr, const char *name, const struct lsa_AuditFullQueryInfo *r);
-void ndr_print_lsa_DnsDomainInfo(struct ndr_print *ndr, const char *name, const struct lsa_DnsDomainInfo *r);
-void ndr_print_lsa_PolicyInfo(struct ndr_print *ndr, const char *name, enum lsa_PolicyInfo r);
-void ndr_print_lsa_PolicyInformation(struct ndr_print *ndr, const char *name, const union lsa_PolicyInformation *r);
-void ndr_print_lsa_SidPtr(struct ndr_print *ndr, const char *name, const struct lsa_SidPtr *r);
-enum ndr_err_code ndr_push_lsa_SidArray(struct ndr_push *ndr, int ndr_flags, const struct lsa_SidArray *r);
-enum ndr_err_code ndr_pull_lsa_SidArray(struct ndr_pull *ndr, int ndr_flags, struct lsa_SidArray *r);
-void ndr_print_lsa_SidArray(struct ndr_print *ndr, const char *name, const struct lsa_SidArray *r);
-void ndr_print_lsa_DomainList(struct ndr_print *ndr, const char *name, const struct lsa_DomainList *r);
-void ndr_print_lsa_SidType(struct ndr_print *ndr, const char *name, enum lsa_SidType r);
-void ndr_print_lsa_TranslatedSid(struct ndr_print *ndr, const char *name, const struct lsa_TranslatedSid *r);
-void ndr_print_lsa_TransSidArray(struct ndr_print *ndr, const char *name, const struct lsa_TransSidArray *r);
-void ndr_print_lsa_RefDomainList(struct ndr_print *ndr, const char *name, const struct lsa_RefDomainList *r);
-void ndr_print_lsa_LookupNamesLevel(struct ndr_print *ndr, const char *name, enum lsa_LookupNamesLevel r);
-void ndr_print_lsa_TranslatedName(struct ndr_print *ndr, const char *name, const struct lsa_TranslatedName *r);
-void ndr_print_lsa_TransNameArray(struct ndr_print *ndr, const char *name, const struct lsa_TransNameArray *r);
-void ndr_print_lsa_LUIDAttribute(struct ndr_print *ndr, const char *name, const struct lsa_LUIDAttribute *r);
-void ndr_print_lsa_PrivilegeSet(struct ndr_print *ndr, const char *name, const struct lsa_PrivilegeSet *r);
-void ndr_print_lsa_DATA_BUF(struct ndr_print *ndr, const char *name, const struct lsa_DATA_BUF *r);
-void ndr_print_lsa_DATA_BUF2(struct ndr_print *ndr, const char *name, const struct lsa_DATA_BUF2 *r);
-void ndr_print_lsa_TrustDomInfoEnum(struct ndr_print *ndr, const char *name, enum lsa_TrustDomInfoEnum r);
-void ndr_print_lsa_TrustDomainInfoName(struct ndr_print *ndr, const char *name, const struct lsa_TrustDomainInfoName *r);
-void ndr_print_lsa_TrustDomainInfoPosixOffset(struct ndr_print *ndr, const char *name, const struct lsa_TrustDomainInfoPosixOffset *r);
-void ndr_print_lsa_TrustDomainInfoPassword(struct ndr_print *ndr, const char *name, const struct lsa_TrustDomainInfoPassword *r);
-void ndr_print_lsa_TrustDomainInfoBasic(struct ndr_print *ndr, const char *name, const struct lsa_TrustDomainInfoBasic *r);
-void ndr_print_lsa_TrustDomainInfoInfoEx(struct ndr_print *ndr, const char *name, const struct lsa_TrustDomainInfoInfoEx *r);
-void ndr_print_lsa_TrustDomainInfoBuffer(struct ndr_print *ndr, const char *name, const struct lsa_TrustDomainInfoBuffer *r);
-void ndr_print_lsa_TrustDomainInfoAuthInfo(struct ndr_print *ndr, const char *name, const struct lsa_TrustDomainInfoAuthInfo *r);
-void ndr_print_lsa_TrustDomainInfoFullInfo(struct ndr_print *ndr, const char *name, const struct lsa_TrustDomainInfoFullInfo *r);
-void ndr_print_lsa_TrustDomainInfo11(struct ndr_print *ndr, const char *name, const struct lsa_TrustDomainInfo11 *r);
-void ndr_print_lsa_TrustDomainInfoInfoAll(struct ndr_print *ndr, const char *name, const struct lsa_TrustDomainInfoInfoAll *r);
-void ndr_print_lsa_TrustedDomainInfo(struct ndr_print *ndr, const char *name, const union lsa_TrustedDomainInfo *r);
-void ndr_print_lsa_DATA_BUF_PTR(struct ndr_print *ndr, const char *name, const struct lsa_DATA_BUF_PTR *r);
-void ndr_print_lsa_RightSet(struct ndr_print *ndr, const char *name, const struct lsa_RightSet *r);
-void ndr_print_lsa_DomainListEx(struct ndr_print *ndr, const char *name, const struct lsa_DomainListEx *r);
-void ndr_print_lsa_DomainInfoKerberos(struct ndr_print *ndr, const char *name, const struct lsa_DomainInfoKerberos *r);
-void ndr_print_lsa_DomainInfoEfs(struct ndr_print *ndr, const char *name, const struct lsa_DomainInfoEfs *r);
-void ndr_print_lsa_DomainInformationPolicy(struct ndr_print *ndr, const char *name, const union lsa_DomainInformationPolicy *r);
-void ndr_print_lsa_TranslatedName2(struct ndr_print *ndr, const char *name, const struct lsa_TranslatedName2 *r);
-void ndr_print_lsa_TransNameArray2(struct ndr_print *ndr, const char *name, const struct lsa_TransNameArray2 *r);
-void ndr_print_lsa_TranslatedSid2(struct ndr_print *ndr, const char *name, const struct lsa_TranslatedSid2 *r);
-void ndr_print_lsa_TransSidArray2(struct ndr_print *ndr, const char *name, const struct lsa_TransSidArray2 *r);
-void ndr_print_lsa_TranslatedSid3(struct ndr_print *ndr, const char *name, const struct lsa_TranslatedSid3 *r);
-void ndr_print_lsa_TransSidArray3(struct ndr_print *ndr, const char *name, const struct lsa_TransSidArray3 *r);
-void ndr_print_lsa_ForestTrustBinaryData(struct ndr_print *ndr, const char *name, const struct lsa_ForestTrustBinaryData *r);
-void ndr_print_lsa_ForestTrustDomainInfo(struct ndr_print *ndr, const char *name, const struct lsa_ForestTrustDomainInfo *r);
-void ndr_print_lsa_ForestTrustData(struct ndr_print *ndr, const char *name, const union lsa_ForestTrustData *r);
-void ndr_print_lsa_ForestTrustRecordType(struct ndr_print *ndr, const char *name, enum lsa_ForestTrustRecordType r);
-void ndr_print_lsa_ForestTrustRecord(struct ndr_print *ndr, const char *name, const struct lsa_ForestTrustRecord *r);
-enum ndr_err_code ndr_push_lsa_ForestTrustInformation(struct ndr_push *ndr, int ndr_flags, const struct lsa_ForestTrustInformation *r);
-enum ndr_err_code ndr_pull_lsa_ForestTrustInformation(struct ndr_pull *ndr, int ndr_flags, struct lsa_ForestTrustInformation *r);
-void ndr_print_lsa_ForestTrustInformation(struct ndr_print *ndr, const char *name, const struct lsa_ForestTrustInformation *r);
-void ndr_print_lsa_Close(struct ndr_print *ndr, const char *name, int flags, const struct lsa_Close *r);
-enum ndr_err_code ndr_push_lsa_Delete(struct ndr_push *ndr, int flags, const struct lsa_Delete *r);
-enum ndr_err_code ndr_pull_lsa_Delete(struct ndr_pull *ndr, int flags, struct lsa_Delete *r);
-void ndr_print_lsa_Delete(struct ndr_print *ndr, const char *name, int flags, const struct lsa_Delete *r);
-enum ndr_err_code ndr_push_lsa_EnumPrivs(struct ndr_push *ndr, int flags, const struct lsa_EnumPrivs *r);
-enum ndr_err_code ndr_pull_lsa_EnumPrivs(struct ndr_pull *ndr, int flags, struct lsa_EnumPrivs *r);
-void ndr_print_lsa_EnumPrivs(struct ndr_print *ndr, const char *name, int flags, const struct lsa_EnumPrivs *r);
-void ndr_print_lsa_QuerySecurity(struct ndr_print *ndr, const char *name, int flags, const struct lsa_QuerySecurity *r);
-void ndr_print_lsa_SetSecObj(struct ndr_print *ndr, const char *name, int flags, const struct lsa_SetSecObj *r);
-void ndr_print_lsa_ChangePassword(struct ndr_print *ndr, const char *name, int flags, const struct lsa_ChangePassword *r);
-enum ndr_err_code ndr_push_lsa_OpenPolicy(struct ndr_push *ndr, int flags, const struct lsa_OpenPolicy *r);
-enum ndr_err_code ndr_pull_lsa_OpenPolicy(struct ndr_pull *ndr, int flags, struct lsa_OpenPolicy *r);
-void ndr_print_lsa_OpenPolicy(struct ndr_print *ndr, const char *name, int flags, const struct lsa_OpenPolicy *r);
-void ndr_print_lsa_QueryInfoPolicy(struct ndr_print *ndr, const char *name, int flags, const struct lsa_QueryInfoPolicy *r);
-void ndr_print_lsa_SetInfoPolicy(struct ndr_print *ndr, const char *name, int flags, const struct lsa_SetInfoPolicy *r);
-void ndr_print_lsa_ClearAuditLog(struct ndr_print *ndr, const char *name, int flags, const struct lsa_ClearAuditLog *r);
-enum ndr_err_code ndr_push_lsa_CreateAccount(struct ndr_push *ndr, int flags, const struct lsa_CreateAccount *r);
-enum ndr_err_code ndr_pull_lsa_CreateAccount(struct ndr_pull *ndr, int flags, struct lsa_CreateAccount *r);
-void ndr_print_lsa_CreateAccount(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CreateAccount *r);
-enum ndr_err_code ndr_push_lsa_EnumAccounts(struct ndr_push *ndr, int flags, const struct lsa_EnumAccounts *r);
-enum ndr_err_code ndr_pull_lsa_EnumAccounts(struct ndr_pull *ndr, int flags, struct lsa_EnumAccounts *r);
-void ndr_print_lsa_EnumAccounts(struct ndr_print *ndr, const char *name, int flags, const struct lsa_EnumAccounts *r);
-enum ndr_err_code ndr_push_lsa_CreateTrustedDomain(struct ndr_push *ndr, int flags, const struct lsa_CreateTrustedDomain *r);
-enum ndr_err_code ndr_pull_lsa_CreateTrustedDomain(struct ndr_pull *ndr, int flags, struct lsa_CreateTrustedDomain *r);
-void ndr_print_lsa_CreateTrustedDomain(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CreateTrustedDomain *r);
-void ndr_print_lsa_EnumTrustDom(struct ndr_print *ndr, const char *name, int flags, const struct lsa_EnumTrustDom *r);
-enum ndr_err_code ndr_push_lsa_LookupNames(struct ndr_push *ndr, int flags, const struct lsa_LookupNames *r);
-enum ndr_err_code ndr_pull_lsa_LookupNames(struct ndr_pull *ndr, int flags, struct lsa_LookupNames *r);
-void ndr_print_lsa_LookupNames(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LookupNames *r);
-enum ndr_err_code ndr_push_lsa_LookupSids(struct ndr_push *ndr, int flags, const struct lsa_LookupSids *r);
-enum ndr_err_code ndr_pull_lsa_LookupSids(struct ndr_pull *ndr, int flags, struct lsa_LookupSids *r);
-void ndr_print_lsa_LookupSids(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LookupSids *r);
-enum ndr_err_code ndr_push_lsa_CreateSecret(struct ndr_push *ndr, int flags, const struct lsa_CreateSecret *r);
-enum ndr_err_code ndr_pull_lsa_CreateSecret(struct ndr_pull *ndr, int flags, struct lsa_CreateSecret *r);
-void ndr_print_lsa_CreateSecret(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CreateSecret *r);
-void ndr_print_lsa_OpenAccount(struct ndr_print *ndr, const char *name, int flags, const struct lsa_OpenAccount *r);
-void ndr_print_lsa_EnumPrivsAccount(struct ndr_print *ndr, const char *name, int flags, const struct lsa_EnumPrivsAccount *r);
-void ndr_print_lsa_AddPrivilegesToAccount(struct ndr_print *ndr, const char *name, int flags, const struct lsa_AddPrivilegesToAccount *r);
-void ndr_print_lsa_RemovePrivilegesFromAccount(struct ndr_print *ndr, const char *name, int flags, const struct lsa_RemovePrivilegesFromAccount *r);
-void ndr_print_lsa_GetQuotasForAccount(struct ndr_print *ndr, const char *name, int flags, const struct lsa_GetQuotasForAccount *r);
-void ndr_print_lsa_SetQuotasForAccount(struct ndr_print *ndr, const char *name, int flags, const struct lsa_SetQuotasForAccount *r);
-void ndr_print_lsa_GetSystemAccessAccount(struct ndr_print *ndr, const char *name, int flags, const struct lsa_GetSystemAccessAccount *r);
-void ndr_print_lsa_SetSystemAccessAccount(struct ndr_print *ndr, const char *name, int flags, const struct lsa_SetSystemAccessAccount *r);
-void ndr_print_lsa_OpenTrustedDomain(struct ndr_print *ndr, const char *name, int flags, const struct lsa_OpenTrustedDomain *r);
-void ndr_print_lsa_QueryTrustedDomainInfo(struct ndr_print *ndr, const char *name, int flags, const struct lsa_QueryTrustedDomainInfo *r);
-void ndr_print_lsa_SetInformationTrustedDomain(struct ndr_print *ndr, const char *name, int flags, const struct lsa_SetInformationTrustedDomain *r);
-enum ndr_err_code ndr_push_lsa_OpenSecret(struct ndr_push *ndr, int flags, const struct lsa_OpenSecret *r);
-enum ndr_err_code ndr_pull_lsa_OpenSecret(struct ndr_pull *ndr, int flags, struct lsa_OpenSecret *r);
-void ndr_print_lsa_OpenSecret(struct ndr_print *ndr, const char *name, int flags, const struct lsa_OpenSecret *r);
-enum ndr_err_code ndr_push_lsa_SetSecret(struct ndr_push *ndr, int flags, const struct lsa_SetSecret *r);
-enum ndr_err_code ndr_pull_lsa_SetSecret(struct ndr_pull *ndr, int flags, struct lsa_SetSecret *r);
-void ndr_print_lsa_SetSecret(struct ndr_print *ndr, const char *name, int flags, const struct lsa_SetSecret *r);
-enum ndr_err_code ndr_push_lsa_QuerySecret(struct ndr_push *ndr, int flags, const struct lsa_QuerySecret *r);
-enum ndr_err_code ndr_pull_lsa_QuerySecret(struct ndr_pull *ndr, int flags, struct lsa_QuerySecret *r);
-void ndr_print_lsa_QuerySecret(struct ndr_print *ndr, const char *name, int flags, const struct lsa_QuerySecret *r);
-void ndr_print_lsa_LookupPrivValue(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LookupPrivValue *r);
-void ndr_print_lsa_LookupPrivName(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LookupPrivName *r);
-void ndr_print_lsa_LookupPrivDisplayName(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LookupPrivDisplayName *r);
-void ndr_print_lsa_DeleteObject(struct ndr_print *ndr, const char *name, int flags, const struct lsa_DeleteObject *r);
-void ndr_print_lsa_EnumAccountsWithUserRight(struct ndr_print *ndr, const char *name, int flags, const struct lsa_EnumAccountsWithUserRight *r);
-void ndr_print_lsa_EnumAccountRights(struct ndr_print *ndr, const char *name, int flags, const struct lsa_EnumAccountRights *r);
-void ndr_print_lsa_AddAccountRights(struct ndr_print *ndr, const char *name, int flags, const struct lsa_AddAccountRights *r);
-void ndr_print_lsa_RemoveAccountRights(struct ndr_print *ndr, const char *name, int flags, const struct lsa_RemoveAccountRights *r);
-void ndr_print_lsa_QueryTrustedDomainInfoBySid(struct ndr_print *ndr, const char *name, int flags, const struct lsa_QueryTrustedDomainInfoBySid *r);
-void ndr_print_lsa_SetTrustedDomainInfo(struct ndr_print *ndr, const char *name, int flags, const struct lsa_SetTrustedDomainInfo *r);
-void ndr_print_lsa_DeleteTrustedDomain(struct ndr_print *ndr, const char *name, int flags, const struct lsa_DeleteTrustedDomain *r);
-void ndr_print_lsa_StorePrivateData(struct ndr_print *ndr, const char *name, int flags, const struct lsa_StorePrivateData *r);
-void ndr_print_lsa_RetrievePrivateData(struct ndr_print *ndr, const char *name, int flags, const struct lsa_RetrievePrivateData *r);
-enum ndr_err_code ndr_push_lsa_OpenPolicy2(struct ndr_push *ndr, int flags, const struct lsa_OpenPolicy2 *r);
-enum ndr_err_code ndr_pull_lsa_OpenPolicy2(struct ndr_pull *ndr, int flags, struct lsa_OpenPolicy2 *r);
-void ndr_print_lsa_OpenPolicy2(struct ndr_print *ndr, const char *name, int flags, const struct lsa_OpenPolicy2 *r);
-void ndr_print_lsa_GetUserName(struct ndr_print *ndr, const char *name, int flags, const struct lsa_GetUserName *r);
-void ndr_print_lsa_QueryInfoPolicy2(struct ndr_print *ndr, const char *name, int flags, const struct lsa_QueryInfoPolicy2 *r);
-void ndr_print_lsa_SetInfoPolicy2(struct ndr_print *ndr, const char *name, int flags, const struct lsa_SetInfoPolicy2 *r);
-void ndr_print_lsa_QueryTrustedDomainInfoByName(struct ndr_print *ndr, const char *name, int flags, const struct lsa_QueryTrustedDomainInfoByName *r);
-void ndr_print_lsa_SetTrustedDomainInfoByName(struct ndr_print *ndr, const char *name, int flags, const struct lsa_SetTrustedDomainInfoByName *r);
-void ndr_print_lsa_EnumTrustedDomainsEx(struct ndr_print *ndr, const char *name, int flags, const struct lsa_EnumTrustedDomainsEx *r);
-void ndr_print_lsa_CreateTrustedDomainEx(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CreateTrustedDomainEx *r);
-void ndr_print_lsa_CloseTrustedDomainEx(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CloseTrustedDomainEx *r);
-void ndr_print_lsa_QueryDomainInformationPolicy(struct ndr_print *ndr, const char *name, int flags, const struct lsa_QueryDomainInformationPolicy *r);
-void ndr_print_lsa_SetDomainInformationPolicy(struct ndr_print *ndr, const char *name, int flags, const struct lsa_SetDomainInformationPolicy *r);
-void ndr_print_lsa_OpenTrustedDomainByName(struct ndr_print *ndr, const char *name, int flags, const struct lsa_OpenTrustedDomainByName *r);
-void ndr_print_lsa_TestCall(struct ndr_print *ndr, const char *name, int flags, const struct lsa_TestCall *r);
-enum ndr_err_code ndr_push_lsa_LookupSids2(struct ndr_push *ndr, int flags, const struct lsa_LookupSids2 *r);
-enum ndr_err_code ndr_pull_lsa_LookupSids2(struct ndr_pull *ndr, int flags, struct lsa_LookupSids2 *r);
-void ndr_print_lsa_LookupSids2(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LookupSids2 *r);
-enum ndr_err_code ndr_push_lsa_LookupNames2(struct ndr_push *ndr, int flags, const struct lsa_LookupNames2 *r);
-enum ndr_err_code ndr_pull_lsa_LookupNames2(struct ndr_pull *ndr, int flags, struct lsa_LookupNames2 *r);
-void ndr_print_lsa_LookupNames2(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LookupNames2 *r);
-void ndr_print_lsa_CreateTrustedDomainEx2(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CreateTrustedDomainEx2 *r);
-void ndr_print_lsa_CREDRWRITE(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CREDRWRITE *r);
-void ndr_print_lsa_CREDRREAD(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CREDRREAD *r);
-void ndr_print_lsa_CREDRENUMERATE(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CREDRENUMERATE *r);
-void ndr_print_lsa_CREDRWRITEDOMAINCREDENTIALS(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CREDRWRITEDOMAINCREDENTIALS *r);
-void ndr_print_lsa_CREDRREADDOMAINCREDENTIALS(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CREDRREADDOMAINCREDENTIALS *r);
-void ndr_print_lsa_CREDRDELETE(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CREDRDELETE *r);
-void ndr_print_lsa_CREDRGETTARGETINFO(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CREDRGETTARGETINFO *r);
-void ndr_print_lsa_CREDRPROFILELOADED(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CREDRPROFILELOADED *r);
-enum ndr_err_code ndr_push_lsa_LookupNames3(struct ndr_push *ndr, int flags, const struct lsa_LookupNames3 *r);
-enum ndr_err_code ndr_pull_lsa_LookupNames3(struct ndr_pull *ndr, int flags, struct lsa_LookupNames3 *r);
-void ndr_print_lsa_LookupNames3(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LookupNames3 *r);
-void ndr_print_lsa_CREDRGETSESSIONTYPES(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CREDRGETSESSIONTYPES *r);
-void ndr_print_lsa_LSARREGISTERAUDITEVENT(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LSARREGISTERAUDITEVENT *r);
-void ndr_print_lsa_LSARGENAUDITEVENT(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LSARGENAUDITEVENT *r);
-void ndr_print_lsa_LSARUNREGISTERAUDITEVENT(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LSARUNREGISTERAUDITEVENT *r);
-void ndr_print_lsa_lsaRQueryForestTrustInformation(struct ndr_print *ndr, const char *name, int flags, const struct lsa_lsaRQueryForestTrustInformation *r);
-void ndr_print_lsa_LSARSETFORESTTRUSTINFORMATION(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LSARSETFORESTTRUSTINFORMATION *r);
-void ndr_print_lsa_CREDRRENAME(struct ndr_print *ndr, const char *name, int flags, const struct lsa_CREDRRENAME *r);
-enum ndr_err_code ndr_push_lsa_LookupSids3(struct ndr_push *ndr, int flags, const struct lsa_LookupSids3 *r);
-enum ndr_err_code ndr_pull_lsa_LookupSids3(struct ndr_pull *ndr, int flags, struct lsa_LookupSids3 *r);
-void ndr_print_lsa_LookupSids3(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LookupSids3 *r);
-void ndr_print_lsa_LookupNames4(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LookupNames4 *r);
-void ndr_print_lsa_LSAROPENPOLICYSCE(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LSAROPENPOLICYSCE *r);
-void ndr_print_lsa_LSARADTREGISTERSECURITYEVENTSOURCE(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LSARADTREGISTERSECURITYEVENTSOURCE *r);
-void ndr_print_lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE *r);
-void ndr_print_lsa_LSARADTREPORTSECURITYEVENT(struct ndr_print *ndr, const char *name, int flags, const struct lsa_LSARADTREPORTSECURITYEVENT *r);
-#endif /* _HEADER_NDR_lsarpc */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_messaging.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_messaging.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_messaging.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,195 +0,0 @@
-/* parser auto-generated by pidl */
-
-#include "includes.h"
-#include "librpc/gen_ndr/ndr_messaging.h"
-
-_PUBLIC_ enum ndr_err_code ndr_push_messaging_rec(struct ndr_push *ndr, int ndr_flags, const struct messaging_rec *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->msg_version));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->msg_type));
-		NDR_CHECK(ndr_push_server_id(ndr, NDR_SCALARS, &r->dest));
-		NDR_CHECK(ndr_push_server_id(ndr, NDR_SCALARS, &r->src));
-		NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->buf));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_server_id(ndr, NDR_BUFFERS, &r->dest));
-		NDR_CHECK(ndr_push_server_id(ndr, NDR_BUFFERS, &r->src));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_messaging_rec(struct ndr_pull *ndr, int ndr_flags, struct messaging_rec *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->msg_version));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->msg_type));
-		NDR_CHECK(ndr_pull_server_id(ndr, NDR_SCALARS, &r->dest));
-		NDR_CHECK(ndr_pull_server_id(ndr, NDR_SCALARS, &r->src));
-		NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->buf));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_server_id(ndr, NDR_BUFFERS, &r->dest));
-		NDR_CHECK(ndr_pull_server_id(ndr, NDR_BUFFERS, &r->src));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_messaging_rec(struct ndr_print *ndr, const char *name, const struct messaging_rec *r)
-{
-	ndr_print_struct(ndr, name, "messaging_rec");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "msg_version", r->msg_version);
-	ndr_print_uint32(ndr, "msg_type", r->msg_type);
-	ndr_print_server_id(ndr, "dest", &r->dest);
-	ndr_print_server_id(ndr, "src", &r->src);
-	ndr_print_DATA_BLOB(ndr, "buf", r->buf);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_messaging_array(struct ndr_push *ndr, int ndr_flags, const struct messaging_array *r)
-{
-	uint32_t cntr_messages_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_messages));
-		for (cntr_messages_0 = 0; cntr_messages_0 < r->num_messages; cntr_messages_0++) {
-			NDR_CHECK(ndr_push_messaging_rec(ndr, NDR_SCALARS, &r->messages[cntr_messages_0]));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		for (cntr_messages_0 = 0; cntr_messages_0 < r->num_messages; cntr_messages_0++) {
-			NDR_CHECK(ndr_push_messaging_rec(ndr, NDR_BUFFERS, &r->messages[cntr_messages_0]));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_messaging_array(struct ndr_pull *ndr, int ndr_flags, struct messaging_array *r)
-{
-	uint32_t cntr_messages_0;
-	TALLOC_CTX *_mem_save_messages_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_messages));
-		NDR_PULL_ALLOC_N(ndr, r->messages, r->num_messages);
-		_mem_save_messages_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->messages, 0);
-		for (cntr_messages_0 = 0; cntr_messages_0 < r->num_messages; cntr_messages_0++) {
-			NDR_CHECK(ndr_pull_messaging_rec(ndr, NDR_SCALARS, &r->messages[cntr_messages_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_messages_0, 0);
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		_mem_save_messages_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->messages, 0);
-		for (cntr_messages_0 = 0; cntr_messages_0 < r->num_messages; cntr_messages_0++) {
-			NDR_CHECK(ndr_pull_messaging_rec(ndr, NDR_BUFFERS, &r->messages[cntr_messages_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_messages_0, 0);
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_messaging_array(struct ndr_print *ndr, const char *name, const struct messaging_array *r)
-{
-	uint32_t cntr_messages_0;
-	ndr_print_struct(ndr, name, "messaging_array");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "num_messages", r->num_messages);
-	ndr->print(ndr, "%s: ARRAY(%d)", "messages", r->num_messages);
-	ndr->depth++;
-	for (cntr_messages_0=0;cntr_messages_0<r->num_messages;cntr_messages_0++) {
-		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_messages_0) != -1) {
-			ndr_print_messaging_rec(ndr, "messages", &r->messages[cntr_messages_0]);
-			free(idx_0);
-		}
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_dbwrap_tdb2_changes(struct ndr_push *ndr, int ndr_flags, const struct dbwrap_tdb2_changes *r)
-{
-	uint32_t cntr_keys_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, "TDB2", 4, sizeof(uint8_t), CH_DOS));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 1));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF8)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF8)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->name, ndr_charset_length(r->name, CH_UTF8), sizeof(uint8_t), CH_UTF8));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->old_seqnum));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->new_seqnum));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_changes));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_keys));
-		for (cntr_keys_0 = 0; cntr_keys_0 < r->num_keys; cntr_keys_0++) {
-			NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->keys[cntr_keys_0]));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_dbwrap_tdb2_changes(struct ndr_pull *ndr, int ndr_flags, struct dbwrap_tdb2_changes *r)
-{
-	uint32_t cntr_keys_0;
-	TALLOC_CTX *_mem_save_keys_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->magic_string, 4, sizeof(uint8_t), CH_DOS));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->magic_version));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->name));
-		if (ndr_get_array_length(ndr, &r->name) > ndr_get_array_size(ndr, &r->name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->name), ndr_get_array_length(ndr, &r->name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->name), sizeof(uint8_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->name, ndr_get_array_length(ndr, &r->name), sizeof(uint8_t), CH_UTF8));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->old_seqnum));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->new_seqnum));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_changes));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_keys));
-		NDR_PULL_ALLOC_N(ndr, r->keys, r->num_keys);
-		_mem_save_keys_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->keys, 0);
-		for (cntr_keys_0 = 0; cntr_keys_0 < r->num_keys; cntr_keys_0++) {
-			NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->keys[cntr_keys_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_keys_0, 0);
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dbwrap_tdb2_changes(struct ndr_print *ndr, const char *name, const struct dbwrap_tdb2_changes *r)
-{
-	uint32_t cntr_keys_0;
-	ndr_print_struct(ndr, name, "dbwrap_tdb2_changes");
-	ndr->depth++;
-	ndr_print_string(ndr, "magic_string", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?"TDB2":r->magic_string);
-	ndr_print_uint32(ndr, "magic_version", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?1:r->magic_version);
-	ndr_print_string(ndr, "name", r->name);
-	ndr_print_uint32(ndr, "old_seqnum", r->old_seqnum);
-	ndr_print_uint32(ndr, "new_seqnum", r->new_seqnum);
-	ndr_print_uint32(ndr, "num_changes", r->num_changes);
-	ndr_print_uint32(ndr, "num_keys", r->num_keys);
-	ndr->print(ndr, "%s: ARRAY(%d)", "keys", r->num_keys);
-	ndr->depth++;
-	for (cntr_keys_0=0;cntr_keys_0<r->num_keys;cntr_keys_0++) {
-		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_keys_0) != -1) {
-			ndr_print_DATA_BLOB(ndr, "keys", r->keys[cntr_keys_0]);
-			free(idx_0);
-		}
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_messaging.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_messaging.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_messaging.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,19 +0,0 @@
-/* header auto-generated by pidl */
-
-#include "librpc/ndr/libndr.h"
-#include "librpc/gen_ndr/messaging.h"
-
-#ifndef _HEADER_NDR_messaging
-#define _HEADER_NDR_messaging
-
-#define NDR_MESSAGING_CALL_COUNT (0)
-enum ndr_err_code ndr_push_messaging_rec(struct ndr_push *ndr, int ndr_flags, const struct messaging_rec *r);
-enum ndr_err_code ndr_pull_messaging_rec(struct ndr_pull *ndr, int ndr_flags, struct messaging_rec *r);
-void ndr_print_messaging_rec(struct ndr_print *ndr, const char *name, const struct messaging_rec *r);
-enum ndr_err_code ndr_push_messaging_array(struct ndr_push *ndr, int ndr_flags, const struct messaging_array *r);
-enum ndr_err_code ndr_pull_messaging_array(struct ndr_pull *ndr, int ndr_flags, struct messaging_array *r);
-void ndr_print_messaging_array(struct ndr_print *ndr, const char *name, const struct messaging_array *r);
-enum ndr_err_code ndr_push_dbwrap_tdb2_changes(struct ndr_push *ndr, int ndr_flags, const struct dbwrap_tdb2_changes *r);
-enum ndr_err_code ndr_pull_dbwrap_tdb2_changes(struct ndr_pull *ndr, int ndr_flags, struct dbwrap_tdb2_changes *r);
-void ndr_print_dbwrap_tdb2_changes(struct ndr_print *ndr, const char *name, const struct dbwrap_tdb2_changes *r);
-#endif /* _HEADER_NDR_messaging */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_misc.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_misc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_misc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,185 +0,0 @@
-/* parser auto-generated by pidl */
-
-#include "includes.h"
-#include "librpc/gen_ndr/ndr_misc.h"
-
-_PUBLIC_ enum ndr_err_code ndr_push_GUID(struct ndr_push *ndr, int ndr_flags, const struct GUID *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->time_low));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->time_mid));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->time_hi_and_version));
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->clock_seq, 2));
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->node, 6));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_GUID(struct ndr_pull *ndr, int ndr_flags, struct GUID *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->time_low));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->time_mid));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->time_hi_and_version));
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->clock_seq, 2));
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->node, 6));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ size_t ndr_size_GUID(const struct GUID *r, int flags)
-{
-	return ndr_size_struct(r, flags, (ndr_push_flags_fn_t)ndr_push_GUID);
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_ndr_syntax_id(struct ndr_push *ndr, int ndr_flags, const struct ndr_syntax_id *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->uuid));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->if_version));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_ndr_syntax_id(struct ndr_pull *ndr, int ndr_flags, struct ndr_syntax_id *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->uuid));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->if_version));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_ndr_syntax_id(struct ndr_print *ndr, const char *name, const struct ndr_syntax_id *r)
-{
-	ndr_print_struct(ndr, name, "ndr_syntax_id");
-	ndr->depth++;
-	ndr_print_GUID(ndr, "uuid", &r->uuid);
-	ndr_print_uint32(ndr, "if_version", r->if_version);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_policy_handle(struct ndr_push *ndr, int ndr_flags, const struct policy_handle *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->handle_type));
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->uuid));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_policy_handle(struct ndr_pull *ndr, int ndr_flags, struct policy_handle *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->handle_type));
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->uuid));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_policy_handle(struct ndr_print *ndr, const char *name, const struct policy_handle *r)
-{
-	ndr_print_struct(ndr, name, "policy_handle");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "handle_type", r->handle_type);
-	ndr_print_GUID(ndr, "uuid", &r->uuid);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_netr_SchannelType(struct ndr_push *ndr, int ndr_flags, enum netr_SchannelType r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_netr_SchannelType(struct ndr_pull *ndr, int ndr_flags, enum netr_SchannelType *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_SchannelType(struct ndr_print *ndr, const char *name, enum netr_SchannelType r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case SEC_CHAN_WKSTA: val = "SEC_CHAN_WKSTA"; break;
-		case SEC_CHAN_DOMAIN: val = "SEC_CHAN_DOMAIN"; break;
-		case SEC_CHAN_BDC: val = "SEC_CHAN_BDC"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_netr_SamDatabaseID(struct ndr_push *ndr, int ndr_flags, enum netr_SamDatabaseID r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_netr_SamDatabaseID(struct ndr_pull *ndr, int ndr_flags, enum netr_SamDatabaseID *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_SamDatabaseID(struct ndr_print *ndr, const char *name, enum netr_SamDatabaseID r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case SAM_DATABASE_DOMAIN: val = "SAM_DATABASE_DOMAIN"; break;
-		case SAM_DATABASE_BUILTIN: val = "SAM_DATABASE_BUILTIN"; break;
-		case SAM_DATABASE_PRIVS: val = "SAM_DATABASE_PRIVS"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_samr_RejectReason(struct ndr_push *ndr, int ndr_flags, enum samr_RejectReason r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_samr_RejectReason(struct ndr_pull *ndr, int ndr_flags, enum samr_RejectReason *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_RejectReason(struct ndr_print *ndr, const char *name, enum samr_RejectReason r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case SAMR_REJECT_OTHER: val = "SAMR_REJECT_OTHER"; break;
-		case SAMR_REJECT_TOO_SHORT: val = "SAMR_REJECT_TOO_SHORT"; break;
-		case SAMR_REJECT_IN_HISTORY: val = "SAMR_REJECT_IN_HISTORY"; break;
-		case SAMR_REJECT_COMPLEXITY: val = "SAMR_REJECT_COMPLEXITY"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_misc.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_misc.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_misc.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,29 +0,0 @@
-/* header auto-generated by pidl */
-
-#include "librpc/ndr/libndr.h"
-#include "librpc/gen_ndr/misc.h"
-
-#ifndef _HEADER_NDR_misc
-#define _HEADER_NDR_misc
-
-#define NDR_MISC_CALL_COUNT (0)
-enum ndr_err_code ndr_push_GUID(struct ndr_push *ndr, int ndr_flags, const struct GUID *r);
-enum ndr_err_code ndr_pull_GUID(struct ndr_pull *ndr, int ndr_flags, struct GUID *r);
-void ndr_print_GUID(struct ndr_print *ndr, const char *name, const struct GUID *r);
-size_t ndr_size_GUID(const struct GUID *r, int flags);
-enum ndr_err_code ndr_push_ndr_syntax_id(struct ndr_push *ndr, int ndr_flags, const struct ndr_syntax_id *r);
-enum ndr_err_code ndr_pull_ndr_syntax_id(struct ndr_pull *ndr, int ndr_flags, struct ndr_syntax_id *r);
-void ndr_print_ndr_syntax_id(struct ndr_print *ndr, const char *name, const struct ndr_syntax_id *r);
-enum ndr_err_code ndr_push_policy_handle(struct ndr_push *ndr, int ndr_flags, const struct policy_handle *r);
-enum ndr_err_code ndr_pull_policy_handle(struct ndr_pull *ndr, int ndr_flags, struct policy_handle *r);
-void ndr_print_policy_handle(struct ndr_print *ndr, const char *name, const struct policy_handle *r);
-enum ndr_err_code ndr_push_netr_SchannelType(struct ndr_push *ndr, int ndr_flags, enum netr_SchannelType r);
-enum ndr_err_code ndr_pull_netr_SchannelType(struct ndr_pull *ndr, int ndr_flags, enum netr_SchannelType *r);
-void ndr_print_netr_SchannelType(struct ndr_print *ndr, const char *name, enum netr_SchannelType r);
-enum ndr_err_code ndr_push_netr_SamDatabaseID(struct ndr_push *ndr, int ndr_flags, enum netr_SamDatabaseID r);
-enum ndr_err_code ndr_pull_netr_SamDatabaseID(struct ndr_pull *ndr, int ndr_flags, enum netr_SamDatabaseID *r);
-void ndr_print_netr_SamDatabaseID(struct ndr_print *ndr, const char *name, enum netr_SamDatabaseID r);
-enum ndr_err_code ndr_push_samr_RejectReason(struct ndr_push *ndr, int ndr_flags, enum samr_RejectReason r);
-enum ndr_err_code ndr_pull_samr_RejectReason(struct ndr_pull *ndr, int ndr_flags, enum samr_RejectReason *r);
-void ndr_print_samr_RejectReason(struct ndr_print *ndr, const char *name, enum samr_RejectReason r);
-#endif /* _HEADER_NDR_misc */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_nbt.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_nbt.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_nbt.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4807 +0,0 @@
-/* parser auto-generated by pidl */
-
-#include "includes.h"
-#include "librpc/gen_ndr/ndr_nbt.h"
-
-#include "librpc/gen_ndr/ndr_misc.h"
-#include "librpc/gen_ndr/ndr_security.h"
-#include "librpc/gen_ndr/ndr_svcctl.h"
-#include "librpc/gen_ndr/ndr_samr.h"
-static enum ndr_err_code ndr_push_nbt_operation(struct ndr_push *ndr, int ndr_flags, uint16_t r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_operation(struct ndr_pull *ndr, int ndr_flags, uint16_t *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_operation(struct ndr_print *ndr, const char *name, uint16_t r)
-{
-	ndr_print_uint16(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "NBT_RCODE", NBT_RCODE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "NBT_FLAG_BROADCAST", NBT_FLAG_BROADCAST, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "NBT_FLAG_RECURSION_AVAIL", NBT_FLAG_RECURSION_AVAIL, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "NBT_FLAG_RECURSION_DESIRED", NBT_FLAG_RECURSION_DESIRED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "NBT_FLAG_TRUNCATION", NBT_FLAG_TRUNCATION, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "NBT_FLAG_AUTHORITIVE", NBT_FLAG_AUTHORITIVE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "NBT_OPCODE", NBT_OPCODE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "NBT_FLAG_REPLY", NBT_FLAG_REPLY, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_name_type(struct ndr_push *ndr, int ndr_flags, enum nbt_name_type r)
-{
-	NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_name_type(struct ndr_pull *ndr, int ndr_flags, enum nbt_name_type *r)
-{
-	uint8_t v;
-	NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_name_type(struct ndr_print *ndr, const char *name, enum nbt_name_type r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case NBT_NAME_CLIENT: val = "NBT_NAME_CLIENT"; break;
-		case NBT_NAME_MS: val = "NBT_NAME_MS"; break;
-		case NBT_NAME_USER: val = "NBT_NAME_USER"; break;
-		case NBT_NAME_SERVER: val = "NBT_NAME_SERVER"; break;
-		case NBT_NAME_PDC: val = "NBT_NAME_PDC"; break;
-		case NBT_NAME_LOGON: val = "NBT_NAME_LOGON"; break;
-		case NBT_NAME_MASTER: val = "NBT_NAME_MASTER"; break;
-		case NBT_NAME_BROWSER: val = "NBT_NAME_BROWSER"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-_PUBLIC_ void ndr_print_nbt_name(struct ndr_print *ndr, const char *name, const struct nbt_name *r)
-{
-	ndr_print_struct(ndr, name, "nbt_name");
-	ndr->depth++;
-	ndr_print_string(ndr, "name", r->name);
-	ndr_print_string(ndr, "scope", r->scope);
-	ndr_print_nbt_name_type(ndr, "type", r->type);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_qclass(struct ndr_push *ndr, int ndr_flags, enum nbt_qclass r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_qclass(struct ndr_pull *ndr, int ndr_flags, enum nbt_qclass *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_qclass(struct ndr_print *ndr, const char *name, enum nbt_qclass r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case NBT_QCLASS_IP: val = "NBT_QCLASS_IP"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_nbt_qtype(struct ndr_push *ndr, int ndr_flags, enum nbt_qtype r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_qtype(struct ndr_pull *ndr, int ndr_flags, enum nbt_qtype *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_qtype(struct ndr_print *ndr, const char *name, enum nbt_qtype r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case NBT_QTYPE_ADDRESS: val = "NBT_QTYPE_ADDRESS"; break;
-		case NBT_QTYPE_NAMESERVICE: val = "NBT_QTYPE_NAMESERVICE"; break;
-		case NBT_QTYPE_NULL: val = "NBT_QTYPE_NULL"; break;
-		case NBT_QTYPE_NETBIOS: val = "NBT_QTYPE_NETBIOS"; break;
-		case NBT_QTYPE_STATUS: val = "NBT_QTYPE_STATUS"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_nbt_name_question(struct ndr_push *ndr, int ndr_flags, const struct nbt_name_question *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_nbt_name(ndr, NDR_SCALARS, &r->name));
-		NDR_CHECK(ndr_push_nbt_qtype(ndr, NDR_SCALARS, r->question_type));
-		NDR_CHECK(ndr_push_nbt_qclass(ndr, NDR_SCALARS, r->question_class));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_name_question(struct ndr_pull *ndr, int ndr_flags, struct nbt_name_question *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_nbt_name(ndr, NDR_SCALARS, &r->name));
-		NDR_CHECK(ndr_pull_nbt_qtype(ndr, NDR_SCALARS, &r->question_type));
-		NDR_CHECK(ndr_pull_nbt_qclass(ndr, NDR_SCALARS, &r->question_class));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_name_question(struct ndr_print *ndr, const char *name, const struct nbt_name_question *r)
-{
-	ndr_print_struct(ndr, name, "nbt_name_question");
-	ndr->depth++;
-	ndr_print_nbt_name(ndr, "name", &r->name);
-	ndr_print_nbt_qtype(ndr, "question_type", r->question_type);
-	ndr_print_nbt_qclass(ndr, "question_class", r->question_class);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nb_flags(struct ndr_push *ndr, int ndr_flags, uint16_t r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nb_flags(struct ndr_pull *ndr, int ndr_flags, uint16_t *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nb_flags(struct ndr_print *ndr, const char *name, uint16_t r)
-{
-	ndr_print_uint16(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "NBT_NM_PERMANENT", NBT_NM_PERMANENT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "NBT_NM_ACTIVE", NBT_NM_ACTIVE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "NBT_NM_CONFLICT", NBT_NM_CONFLICT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "NBT_NM_DEREGISTER", NBT_NM_DEREGISTER, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "NBT_NM_OWNER_TYPE", NBT_NM_OWNER_TYPE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "NBT_NM_GROUP", NBT_NM_GROUP, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_rdata_address(struct ndr_push *ndr, int ndr_flags, const struct nbt_rdata_address *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_nb_flags(ndr, NDR_SCALARS, r->nb_flags));
-		NDR_CHECK(ndr_push_ipv4address(ndr, NDR_SCALARS, r->ipaddr));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_rdata_address(struct ndr_pull *ndr, int ndr_flags, struct nbt_rdata_address *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_nb_flags(ndr, NDR_SCALARS, &r->nb_flags));
-		NDR_CHECK(ndr_pull_ipv4address(ndr, NDR_SCALARS, &r->ipaddr));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_rdata_address(struct ndr_print *ndr, const char *name, const struct nbt_rdata_address *r)
-{
-	ndr_print_struct(ndr, name, "nbt_rdata_address");
-	ndr->depth++;
-	ndr_print_nb_flags(ndr, "nb_flags", r->nb_flags);
-	ndr_print_ipv4address(ndr, "ipaddr", r->ipaddr);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_rdata_netbios(struct ndr_push *ndr, int ndr_flags, const struct nbt_rdata_netbios *r)
-{
-	uint32_t cntr_addresses_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->length));
-		for (cntr_addresses_0 = 0; cntr_addresses_0 < r->length / 6; cntr_addresses_0++) {
-			NDR_CHECK(ndr_push_nbt_rdata_address(ndr, NDR_SCALARS, &r->addresses[cntr_addresses_0]));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_rdata_netbios(struct ndr_pull *ndr, int ndr_flags, struct nbt_rdata_netbios *r)
-{
-	uint32_t cntr_addresses_0;
-	TALLOC_CTX *_mem_save_addresses_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->length));
-		NDR_PULL_ALLOC_N(ndr, r->addresses, r->length / 6);
-		_mem_save_addresses_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->addresses, 0);
-		for (cntr_addresses_0 = 0; cntr_addresses_0 < r->length / 6; cntr_addresses_0++) {
-			NDR_CHECK(ndr_pull_nbt_rdata_address(ndr, NDR_SCALARS, &r->addresses[cntr_addresses_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_addresses_0, 0);
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_rdata_netbios(struct ndr_print *ndr, const char *name, const struct nbt_rdata_netbios *r)
-{
-	uint32_t cntr_addresses_0;
-	ndr_print_struct(ndr, name, "nbt_rdata_netbios");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "length", r->length);
-	ndr->print(ndr, "%s: ARRAY(%d)", "addresses", r->length / 6);
-	ndr->depth++;
-	for (cntr_addresses_0=0;cntr_addresses_0<r->length / 6;cntr_addresses_0++) {
-		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_addresses_0) != -1) {
-			ndr_print_nbt_rdata_address(ndr, "addresses", &r->addresses[cntr_addresses_0]);
-			free(idx_0);
-		}
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_statistics(struct ndr_push *ndr, int ndr_flags, const struct nbt_statistics *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->unit_id, 6));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->jumpers));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->test_result));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->version_number));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->period_of_statistics));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->number_of_crcs));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->number_alignment_errors));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->number_of_collisions));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->number_send_aborts));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->number_good_sends));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->number_good_receives));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->number_retransmits));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->number_no_resource_conditions));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->number_free_command_blocks));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->total_number_command_blocks));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->max_total_number_command_blocks));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->number_pending_sessions));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->max_number_pending_sessions));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->max_total_sessions_possible));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->session_data_packet_size));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_statistics(struct ndr_pull *ndr, int ndr_flags, struct nbt_statistics *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->unit_id, 6));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->jumpers));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->test_result));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->version_number));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->period_of_statistics));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->number_of_crcs));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->number_alignment_errors));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->number_of_collisions));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->number_send_aborts));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->number_good_sends));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->number_good_receives));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->number_retransmits));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->number_no_resource_conditions));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->number_free_command_blocks));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->total_number_command_blocks));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->max_total_number_command_blocks));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->number_pending_sessions));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->max_number_pending_sessions));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->max_total_sessions_possible));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->session_data_packet_size));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_statistics(struct ndr_print *ndr, const char *name, const struct nbt_statistics *r)
-{
-	ndr_print_struct(ndr, name, "nbt_statistics");
-	ndr->depth++;
-	ndr_print_array_uint8(ndr, "unit_id", r->unit_id, 6);
-	ndr_print_uint8(ndr, "jumpers", r->jumpers);
-	ndr_print_uint8(ndr, "test_result", r->test_result);
-	ndr_print_uint16(ndr, "version_number", r->version_number);
-	ndr_print_uint16(ndr, "period_of_statistics", r->period_of_statistics);
-	ndr_print_uint16(ndr, "number_of_crcs", r->number_of_crcs);
-	ndr_print_uint16(ndr, "number_alignment_errors", r->number_alignment_errors);
-	ndr_print_uint16(ndr, "number_of_collisions", r->number_of_collisions);
-	ndr_print_uint16(ndr, "number_send_aborts", r->number_send_aborts);
-	ndr_print_uint32(ndr, "number_good_sends", r->number_good_sends);
-	ndr_print_uint32(ndr, "number_good_receives", r->number_good_receives);
-	ndr_print_uint16(ndr, "number_retransmits", r->number_retransmits);
-	ndr_print_uint16(ndr, "number_no_resource_conditions", r->number_no_resource_conditions);
-	ndr_print_uint16(ndr, "number_free_command_blocks", r->number_free_command_blocks);
-	ndr_print_uint16(ndr, "total_number_command_blocks", r->total_number_command_blocks);
-	ndr_print_uint16(ndr, "max_total_number_command_blocks", r->max_total_number_command_blocks);
-	ndr_print_uint16(ndr, "number_pending_sessions", r->number_pending_sessions);
-	ndr_print_uint16(ndr, "max_number_pending_sessions", r->max_number_pending_sessions);
-	ndr_print_uint16(ndr, "max_total_sessions_possible", r->max_total_sessions_possible);
-	ndr_print_uint16(ndr, "session_data_packet_size", r->session_data_packet_size);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_status_name(struct ndr_push *ndr, int ndr_flags, const struct nbt_status_name *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 2));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->name, 15, sizeof(uint8_t), CH_DOS));
-		NDR_CHECK(ndr_push_nbt_name_type(ndr, NDR_SCALARS, r->type));
-		NDR_CHECK(ndr_push_nb_flags(ndr, NDR_SCALARS, r->nb_flags));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_status_name(struct ndr_pull *ndr, int ndr_flags, struct nbt_status_name *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 2));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->name, 15, sizeof(uint8_t), CH_DOS));
-		NDR_CHECK(ndr_pull_nbt_name_type(ndr, NDR_SCALARS, &r->type));
-		NDR_CHECK(ndr_pull_nb_flags(ndr, NDR_SCALARS, &r->nb_flags));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_status_name(struct ndr_print *ndr, const char *name, const struct nbt_status_name *r)
-{
-	ndr_print_struct(ndr, name, "nbt_status_name");
-	ndr->depth++;
-	ndr_print_string(ndr, "name", r->name);
-	ndr_print_nbt_name_type(ndr, "type", r->type);
-	ndr_print_nb_flags(ndr, "nb_flags", r->nb_flags);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_rdata_status(struct ndr_push *ndr, int ndr_flags, const struct nbt_rdata_status *r)
-{
-	uint32_t cntr_names_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->num_names * 18 + 47));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->num_names));
-		for (cntr_names_0 = 0; cntr_names_0 < r->num_names; cntr_names_0++) {
-			NDR_CHECK(ndr_push_nbt_status_name(ndr, NDR_SCALARS, &r->names[cntr_names_0]));
-		}
-		NDR_CHECK(ndr_push_nbt_statistics(ndr, NDR_SCALARS, &r->statistics));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_rdata_status(struct ndr_pull *ndr, int ndr_flags, struct nbt_rdata_status *r)
-{
-	uint32_t cntr_names_0;
-	TALLOC_CTX *_mem_save_names_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->length));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->num_names));
-		NDR_PULL_ALLOC_N(ndr, r->names, r->num_names);
-		_mem_save_names_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->names, 0);
-		for (cntr_names_0 = 0; cntr_names_0 < r->num_names; cntr_names_0++) {
-			NDR_CHECK(ndr_pull_nbt_status_name(ndr, NDR_SCALARS, &r->names[cntr_names_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_names_0, 0);
-		NDR_CHECK(ndr_pull_nbt_statistics(ndr, NDR_SCALARS, &r->statistics));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_rdata_status(struct ndr_print *ndr, const char *name, const struct nbt_rdata_status *r)
-{
-	uint32_t cntr_names_0;
-	ndr_print_struct(ndr, name, "nbt_rdata_status");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "length", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->num_names * 18 + 47:r->length);
-	ndr_print_uint8(ndr, "num_names", r->num_names);
-	ndr->print(ndr, "%s: ARRAY(%d)", "names", r->num_names);
-	ndr->depth++;
-	for (cntr_names_0=0;cntr_names_0<r->num_names;cntr_names_0++) {
-		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_names_0) != -1) {
-			ndr_print_nbt_status_name(ndr, "names", &r->names[cntr_names_0]);
-			free(idx_0);
-		}
-	}
-	ndr->depth--;
-	ndr_print_nbt_statistics(ndr, "statistics", &r->statistics);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_rdata_data(struct ndr_push *ndr, int ndr_flags, const struct nbt_rdata_data *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 2));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->length));
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->data, r->length));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_rdata_data(struct ndr_pull *ndr, int ndr_flags, struct nbt_rdata_data *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 2));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->length));
-		NDR_PULL_ALLOC_N(ndr, r->data, r->length);
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->data, r->length));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_rdata_data(struct ndr_print *ndr, const char *name, const struct nbt_rdata_data *r)
-{
-	ndr_print_struct(ndr, name, "nbt_rdata_data");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "length", r->length);
-	ndr_print_array_uint8(ndr, "data", r->data, r->length);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_rdata(struct ndr_push *ndr, int ndr_flags, const union nbt_rdata *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case NBT_QTYPE_NETBIOS: {
-				NDR_CHECK(ndr_push_nbt_rdata_netbios(ndr, NDR_SCALARS, &r->netbios));
-			break; }
-
-			case NBT_QTYPE_STATUS: {
-				NDR_CHECK(ndr_push_nbt_rdata_status(ndr, NDR_SCALARS, &r->status));
-			break; }
-
-			default: {
-				NDR_CHECK(ndr_push_nbt_rdata_data(ndr, NDR_SCALARS, &r->data));
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case NBT_QTYPE_NETBIOS:
-			break;
-
-			case NBT_QTYPE_STATUS:
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_rdata(struct ndr_pull *ndr, int ndr_flags, union nbt_rdata *r)
-{
-	int level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		switch (level) {
-			case NBT_QTYPE_NETBIOS: {
-				NDR_CHECK(ndr_pull_nbt_rdata_netbios(ndr, NDR_SCALARS, &r->netbios));
-			break; }
-
-			case NBT_QTYPE_STATUS: {
-				NDR_CHECK(ndr_pull_nbt_rdata_status(ndr, NDR_SCALARS, &r->status));
-			break; }
-
-			default: {
-				NDR_CHECK(ndr_pull_nbt_rdata_data(ndr, NDR_SCALARS, &r->data));
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case NBT_QTYPE_NETBIOS:
-			break;
-
-			case NBT_QTYPE_STATUS:
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_rdata(struct ndr_print *ndr, const char *name, const union nbt_rdata *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "nbt_rdata");
-	switch (level) {
-		case NBT_QTYPE_NETBIOS:
-			ndr_print_nbt_rdata_netbios(ndr, "netbios", &r->netbios);
-		break;
-
-		case NBT_QTYPE_STATUS:
-			ndr_print_nbt_rdata_status(ndr, "status", &r->status);
-		break;
-
-		default:
-			ndr_print_nbt_rdata_data(ndr, "data", &r->data);
-		break;
-
-	}
-}
-
-static enum ndr_err_code ndr_push_nbt_res_rec(struct ndr_push *ndr, int ndr_flags, const struct nbt_res_rec *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 4));
-			NDR_CHECK(ndr_push_nbt_name(ndr, NDR_SCALARS, &r->name));
-			NDR_CHECK(ndr_push_nbt_qtype(ndr, NDR_SCALARS, r->rr_type));
-			NDR_CHECK(ndr_push_nbt_qclass(ndr, NDR_SCALARS, r->rr_class));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->ttl));
-			NDR_CHECK(ndr_push_set_switch_value(ndr, &r->rdata, ((((r->rr_type) == NBT_QTYPE_NETBIOS) && talloc_check_name(ndr, "struct ndr_push") && ((r->rdata).data.length == 2))?0:r->rr_type)));
-			NDR_CHECK(ndr_push_nbt_rdata(ndr, NDR_SCALARS, &r->rdata));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_res_rec(struct ndr_pull *ndr, int ndr_flags, struct nbt_res_rec *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 4));
-			NDR_CHECK(ndr_pull_nbt_name(ndr, NDR_SCALARS, &r->name));
-			NDR_CHECK(ndr_pull_nbt_qtype(ndr, NDR_SCALARS, &r->rr_type));
-			NDR_CHECK(ndr_pull_nbt_qclass(ndr, NDR_SCALARS, &r->rr_class));
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->ttl));
-			NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->rdata, ((((r->rr_type) == NBT_QTYPE_NETBIOS) && talloc_check_name(ndr, "struct ndr_push") && ((r->rdata).data.length == 2))?0:r->rr_type)));
-			NDR_CHECK(ndr_pull_nbt_rdata(ndr, NDR_SCALARS, &r->rdata));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_res_rec(struct ndr_print *ndr, const char *name, const struct nbt_res_rec *r)
-{
-	ndr_print_struct(ndr, name, "nbt_res_rec");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		ndr->depth++;
-		ndr_print_nbt_name(ndr, "name", &r->name);
-		ndr_print_nbt_qtype(ndr, "rr_type", r->rr_type);
-		ndr_print_nbt_qclass(ndr, "rr_class", r->rr_class);
-		ndr_print_uint32(ndr, "ttl", r->ttl);
-		ndr_print_set_switch_value(ndr, &r->rdata, ((((r->rr_type) == NBT_QTYPE_NETBIOS) && talloc_check_name(ndr, "struct ndr_push") && ((r->rdata).data.length == 2))?0:r->rr_type));
-		ndr_print_nbt_rdata(ndr, "rdata", &r->rdata);
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_nbt_name_packet(struct ndr_push *ndr, int ndr_flags, const struct nbt_name_packet *r)
-{
-	uint32_t cntr_questions_0;
-	uint32_t cntr_answers_0;
-	uint32_t cntr_nsrecs_0;
-	uint32_t cntr_additional_0;
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN|LIBNDR_FLAG_BIGENDIAN|LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 4));
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->name_trn_id));
-			NDR_CHECK(ndr_push_nbt_operation(ndr, NDR_SCALARS, r->operation));
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->qdcount));
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->ancount));
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->nscount));
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->arcount));
-			for (cntr_questions_0 = 0; cntr_questions_0 < r->qdcount; cntr_questions_0++) {
-				NDR_CHECK(ndr_push_nbt_name_question(ndr, NDR_SCALARS, &r->questions[cntr_questions_0]));
-			}
-			for (cntr_answers_0 = 0; cntr_answers_0 < r->ancount; cntr_answers_0++) {
-				NDR_CHECK(ndr_push_nbt_res_rec(ndr, NDR_SCALARS, &r->answers[cntr_answers_0]));
-			}
-			for (cntr_nsrecs_0 = 0; cntr_nsrecs_0 < r->nscount; cntr_nsrecs_0++) {
-				NDR_CHECK(ndr_push_nbt_res_rec(ndr, NDR_SCALARS, &r->nsrecs[cntr_nsrecs_0]));
-			}
-			for (cntr_additional_0 = 0; cntr_additional_0 < r->arcount; cntr_additional_0++) {
-				NDR_CHECK(ndr_push_nbt_res_rec(ndr, NDR_SCALARS, &r->additional[cntr_additional_0]));
-			}
-			{
-				uint32_t _flags_save_DATA_BLOB = ndr->flags;
-				ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-				NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->padding));
-				ndr->flags = _flags_save_DATA_BLOB;
-			}
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_nbt_name_packet(struct ndr_pull *ndr, int ndr_flags, struct nbt_name_packet *r)
-{
-	uint32_t cntr_questions_0;
-	TALLOC_CTX *_mem_save_questions_0;
-	uint32_t cntr_answers_0;
-	TALLOC_CTX *_mem_save_answers_0;
-	uint32_t cntr_nsrecs_0;
-	TALLOC_CTX *_mem_save_nsrecs_0;
-	uint32_t cntr_additional_0;
-	TALLOC_CTX *_mem_save_additional_0;
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN|LIBNDR_FLAG_BIGENDIAN|LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 4));
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->name_trn_id));
-			NDR_CHECK(ndr_pull_nbt_operation(ndr, NDR_SCALARS, &r->operation));
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->qdcount));
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->ancount));
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->nscount));
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->arcount));
-			NDR_PULL_ALLOC_N(ndr, r->questions, r->qdcount);
-			_mem_save_questions_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->questions, 0);
-			for (cntr_questions_0 = 0; cntr_questions_0 < r->qdcount; cntr_questions_0++) {
-				NDR_CHECK(ndr_pull_nbt_name_question(ndr, NDR_SCALARS, &r->questions[cntr_questions_0]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_questions_0, 0);
-			NDR_PULL_ALLOC_N(ndr, r->answers, r->ancount);
-			_mem_save_answers_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->answers, 0);
-			for (cntr_answers_0 = 0; cntr_answers_0 < r->ancount; cntr_answers_0++) {
-				NDR_CHECK(ndr_pull_nbt_res_rec(ndr, NDR_SCALARS, &r->answers[cntr_answers_0]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_answers_0, 0);
-			NDR_PULL_ALLOC_N(ndr, r->nsrecs, r->nscount);
-			_mem_save_nsrecs_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->nsrecs, 0);
-			for (cntr_nsrecs_0 = 0; cntr_nsrecs_0 < r->nscount; cntr_nsrecs_0++) {
-				NDR_CHECK(ndr_pull_nbt_res_rec(ndr, NDR_SCALARS, &r->nsrecs[cntr_nsrecs_0]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_nsrecs_0, 0);
-			NDR_PULL_ALLOC_N(ndr, r->additional, r->arcount);
-			_mem_save_additional_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->additional, 0);
-			for (cntr_additional_0 = 0; cntr_additional_0 < r->arcount; cntr_additional_0++) {
-				NDR_CHECK(ndr_pull_nbt_res_rec(ndr, NDR_SCALARS, &r->additional[cntr_additional_0]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_additional_0, 0);
-			{
-				uint32_t _flags_save_DATA_BLOB = ndr->flags;
-				ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-				NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->padding));
-				ndr->flags = _flags_save_DATA_BLOB;
-			}
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_name_packet(struct ndr_print *ndr, const char *name, const struct nbt_name_packet *r)
-{
-	uint32_t cntr_questions_0;
-	uint32_t cntr_answers_0;
-	uint32_t cntr_nsrecs_0;
-	uint32_t cntr_additional_0;
-	ndr_print_struct(ndr, name, "nbt_name_packet");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN|LIBNDR_FLAG_BIGENDIAN|LIBNDR_PRINT_ARRAY_HEX);
-		ndr->depth++;
-		ndr_print_uint16(ndr, "name_trn_id", r->name_trn_id);
-		ndr_print_nbt_operation(ndr, "operation", r->operation);
-		ndr_print_uint16(ndr, "qdcount", r->qdcount);
-		ndr_print_uint16(ndr, "ancount", r->ancount);
-		ndr_print_uint16(ndr, "nscount", r->nscount);
-		ndr_print_uint16(ndr, "arcount", r->arcount);
-		ndr->print(ndr, "%s: ARRAY(%d)", "questions", r->qdcount);
-		ndr->depth++;
-		for (cntr_questions_0=0;cntr_questions_0<r->qdcount;cntr_questions_0++) {
-			char *idx_0=NULL;
-			if (asprintf(&idx_0, "[%d]", cntr_questions_0) != -1) {
-				ndr_print_nbt_name_question(ndr, "questions", &r->questions[cntr_questions_0]);
-				free(idx_0);
-			}
-		}
-		ndr->depth--;
-		ndr->print(ndr, "%s: ARRAY(%d)", "answers", r->ancount);
-		ndr->depth++;
-		for (cntr_answers_0=0;cntr_answers_0<r->ancount;cntr_answers_0++) {
-			char *idx_0=NULL;
-			if (asprintf(&idx_0, "[%d]", cntr_answers_0) != -1) {
-				ndr_print_nbt_res_rec(ndr, "answers", &r->answers[cntr_answers_0]);
-				free(idx_0);
-			}
-		}
-		ndr->depth--;
-		ndr->print(ndr, "%s: ARRAY(%d)", "nsrecs", r->nscount);
-		ndr->depth++;
-		for (cntr_nsrecs_0=0;cntr_nsrecs_0<r->nscount;cntr_nsrecs_0++) {
-			char *idx_0=NULL;
-			if (asprintf(&idx_0, "[%d]", cntr_nsrecs_0) != -1) {
-				ndr_print_nbt_res_rec(ndr, "nsrecs", &r->nsrecs[cntr_nsrecs_0]);
-				free(idx_0);
-			}
-		}
-		ndr->depth--;
-		ndr->print(ndr, "%s: ARRAY(%d)", "additional", r->arcount);
-		ndr->depth++;
-		for (cntr_additional_0=0;cntr_additional_0<r->arcount;cntr_additional_0++) {
-			char *idx_0=NULL;
-			if (asprintf(&idx_0, "[%d]", cntr_additional_0) != -1) {
-				ndr_print_nbt_res_rec(ndr, "additional", &r->additional[cntr_additional_0]);
-				free(idx_0);
-			}
-		}
-		ndr->depth--;
-		ndr_print_DATA_BLOB(ndr, "padding", r->padding);
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-
-static enum ndr_err_code ndr_push_dgram_msg_type(struct ndr_push *ndr, int ndr_flags, enum dgram_msg_type r)
-{
-	NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dgram_msg_type(struct ndr_pull *ndr, int ndr_flags, enum dgram_msg_type *r)
-{
-	uint8_t v;
-	NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dgram_msg_type(struct ndr_print *ndr, const char *name, enum dgram_msg_type r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case DGRAM_DIRECT_UNIQUE: val = "DGRAM_DIRECT_UNIQUE"; break;
-		case DGRAM_DIRECT_GROUP: val = "DGRAM_DIRECT_GROUP"; break;
-		case DGRAM_BCAST: val = "DGRAM_BCAST"; break;
-		case DGRAM_ERROR: val = "DGRAM_ERROR"; break;
-		case DGRAM_QUERY: val = "DGRAM_QUERY"; break;
-		case DGRAM_QUERY_POSITIVE: val = "DGRAM_QUERY_POSITIVE"; break;
-		case DGRAM_QUERY_NEGATIVE: val = "DGRAM_QUERY_NEGATIVE"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_dgram_flags(struct ndr_push *ndr, int ndr_flags, uint8_t r)
-{
-	NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dgram_flags(struct ndr_pull *ndr, int ndr_flags, uint8_t *r)
-{
-	uint8_t v;
-	NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dgram_flags(struct ndr_print *ndr, const char *name, uint8_t r)
-{
-	ndr_print_uint8(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "DGRAM_FLAG_MORE", DGRAM_FLAG_MORE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "DGRAM_FLAG_FIRST", DGRAM_FLAG_FIRST, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "DGRAM_FLAG_NODE_TYPE", DGRAM_FLAG_NODE_TYPE, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_smb_command(struct ndr_push *ndr, int ndr_flags, enum smb_command r)
-{
-	NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_smb_command(struct ndr_pull *ndr, int ndr_flags, enum smb_command *r)
-{
-	uint8_t v;
-	NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_smb_command(struct ndr_print *ndr, const char *name, enum smb_command r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case SMB_TRANSACTION: val = "SMB_TRANSACTION"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_smb_trans_body(struct ndr_push *ndr, int ndr_flags, const struct smb_trans_body *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, 17));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->total_param_count));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->total_data_count));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->max_param_count));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->max_data_count));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->max_setup_count));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->pad));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->trans_flags));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->timeout));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->reserved));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->param_count));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->param_offset));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->data_count));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->data_offset));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, 3));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->pad2));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->opcode));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->priority));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->_class));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, strlen(r->mailslot_name) + 1 + r->data.length));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->mailslot_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_DATA_BLOB = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-			NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->data));
-			ndr->flags = _flags_save_DATA_BLOB;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_smb_trans_body(struct ndr_pull *ndr, int ndr_flags, struct smb_trans_body *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->wct));
-		if (r->wct < 17 || r->wct > 17) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->total_param_count));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->total_data_count));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->max_param_count));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->max_data_count));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->max_setup_count));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->pad));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->trans_flags));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->timeout));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->reserved));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->param_count));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->param_offset));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->data_count));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->data_offset));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->setup_count));
-		if (r->setup_count < 3 || r->setup_count > 3) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->pad2));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->opcode));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->priority));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->_class));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->byte_count));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->mailslot_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_DATA_BLOB = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-			NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->data));
-			ndr->flags = _flags_save_DATA_BLOB;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_smb_trans_body(struct ndr_print *ndr, const char *name, const struct smb_trans_body *r)
-{
-	ndr_print_struct(ndr, name, "smb_trans_body");
-	ndr->depth++;
-	ndr_print_uint8(ndr, "wct", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?17:r->wct);
-	ndr_print_uint16(ndr, "total_param_count", r->total_param_count);
-	ndr_print_uint16(ndr, "total_data_count", r->total_data_count);
-	ndr_print_uint16(ndr, "max_param_count", r->max_param_count);
-	ndr_print_uint16(ndr, "max_data_count", r->max_data_count);
-	ndr_print_uint8(ndr, "max_setup_count", r->max_setup_count);
-	ndr_print_uint8(ndr, "pad", r->pad);
-	ndr_print_uint16(ndr, "trans_flags", r->trans_flags);
-	ndr_print_uint32(ndr, "timeout", r->timeout);
-	ndr_print_uint16(ndr, "reserved", r->reserved);
-	ndr_print_uint16(ndr, "param_count", r->param_count);
-	ndr_print_uint16(ndr, "param_offset", r->param_offset);
-	ndr_print_uint16(ndr, "data_count", r->data_count);
-	ndr_print_uint16(ndr, "data_offset", r->data_offset);
-	ndr_print_uint8(ndr, "setup_count", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?3:r->setup_count);
-	ndr_print_uint8(ndr, "pad2", r->pad2);
-	ndr_print_uint16(ndr, "opcode", r->opcode);
-	ndr_print_uint16(ndr, "priority", r->priority);
-	ndr_print_uint16(ndr, "_class", r->_class);
-	ndr_print_uint16(ndr, "byte_count", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?strlen(r->mailslot_name) + 1 + r->data.length:r->byte_count);
-	ndr_print_string(ndr, "mailslot_name", r->mailslot_name);
-	ndr_print_DATA_BLOB(ndr, "data", r->data);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_smb_body(struct ndr_push *ndr, int ndr_flags, const union smb_body *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case SMB_TRANSACTION: {
-				NDR_CHECK(ndr_push_smb_trans_body(ndr, NDR_SCALARS, &r->trans));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case SMB_TRANSACTION:
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_smb_body(struct ndr_pull *ndr, int ndr_flags, union smb_body *r)
-{
-	int level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		switch (level) {
-			case SMB_TRANSACTION: {
-				NDR_CHECK(ndr_pull_smb_trans_body(ndr, NDR_SCALARS, &r->trans));
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case SMB_TRANSACTION:
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_smb_body(struct ndr_print *ndr, const char *name, const union smb_body *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "smb_body");
-	switch (level) {
-		case SMB_TRANSACTION:
-			ndr_print_smb_trans_body(ndr, "trans", &r->trans);
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_dgram_smb_packet(struct ndr_push *ndr, int ndr_flags, const struct dgram_smb_packet *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN|LIBNDR_FLAG_LITTLE_ENDIAN|LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 4));
-			NDR_CHECK(ndr_push_smb_command(ndr, NDR_SCALARS, r->smb_command));
-			NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->err_class));
-			NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->pad));
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->err_code));
-			NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->flags));
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->flags2));
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->pid_high));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->signature, 8));
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->reserved));
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->tid));
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->pid));
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->vuid));
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->mid));
-			NDR_CHECK(ndr_push_set_switch_value(ndr, &r->body, r->smb_command));
-			NDR_CHECK(ndr_push_smb_body(ndr, NDR_SCALARS, &r->body));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_dgram_smb_packet(struct ndr_pull *ndr, int ndr_flags, struct dgram_smb_packet *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN|LIBNDR_FLAG_LITTLE_ENDIAN|LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 4));
-			NDR_CHECK(ndr_pull_smb_command(ndr, NDR_SCALARS, &r->smb_command));
-			NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->err_class));
-			NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->pad));
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->err_code));
-			NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->flags));
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->flags2));
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->pid_high));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->signature, 8));
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->reserved));
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->tid));
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->pid));
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->vuid));
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->mid));
-			NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->body, r->smb_command));
-			NDR_CHECK(ndr_pull_smb_body(ndr, NDR_SCALARS, &r->body));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dgram_smb_packet(struct ndr_print *ndr, const char *name, const struct dgram_smb_packet *r)
-{
-	ndr_print_struct(ndr, name, "dgram_smb_packet");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN|LIBNDR_FLAG_LITTLE_ENDIAN|LIBNDR_PRINT_ARRAY_HEX);
-		ndr->depth++;
-		ndr_print_smb_command(ndr, "smb_command", r->smb_command);
-		ndr_print_uint8(ndr, "err_class", r->err_class);
-		ndr_print_uint8(ndr, "pad", r->pad);
-		ndr_print_uint16(ndr, "err_code", r->err_code);
-		ndr_print_uint8(ndr, "flags", r->flags);
-		ndr_print_uint16(ndr, "flags2", r->flags2);
-		ndr_print_uint16(ndr, "pid_high", r->pid_high);
-		ndr_print_array_uint8(ndr, "signature", r->signature, 8);
-		ndr_print_uint16(ndr, "reserved", r->reserved);
-		ndr_print_uint16(ndr, "tid", r->tid);
-		ndr_print_uint16(ndr, "pid", r->pid);
-		ndr_print_uint16(ndr, "vuid", r->vuid);
-		ndr_print_uint16(ndr, "mid", r->mid);
-		ndr_print_set_switch_value(ndr, &r->body, r->smb_command);
-		ndr_print_smb_body(ndr, "body", &r->body);
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-
-static enum ndr_err_code ndr_push_dgram_message_body(struct ndr_push *ndr, int ndr_flags, const union dgram_message_body *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case DGRAM_SMB: {
-				NDR_CHECK(ndr_push_dgram_smb_packet(ndr, NDR_SCALARS, &r->smb));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case DGRAM_SMB:
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dgram_message_body(struct ndr_pull *ndr, int ndr_flags, union dgram_message_body *r)
-{
-	int level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		switch (level) {
-			case DGRAM_SMB: {
-				NDR_CHECK(ndr_pull_dgram_smb_packet(ndr, NDR_SCALARS, &r->smb));
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case DGRAM_SMB:
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dgram_message_body(struct ndr_print *ndr, const char *name, const union dgram_message_body *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "dgram_message_body");
-	switch (level) {
-		case DGRAM_SMB:
-			ndr_print_dgram_smb_packet(ndr, "smb", &r->smb);
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_dgram_message(struct ndr_push *ndr, int ndr_flags, const struct dgram_message *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->length));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->offset));
-		NDR_CHECK(ndr_push_nbt_name(ndr, NDR_SCALARS, &r->source_name));
-		NDR_CHECK(ndr_push_nbt_name(ndr, NDR_SCALARS, &r->dest_name));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->dgram_body_type));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->body, r->dgram_body_type));
-		NDR_CHECK(ndr_push_dgram_message_body(ndr, NDR_SCALARS, &r->body));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dgram_message(struct ndr_pull *ndr, int ndr_flags, struct dgram_message *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->length));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->offset));
-		NDR_CHECK(ndr_pull_nbt_name(ndr, NDR_SCALARS, &r->source_name));
-		NDR_CHECK(ndr_pull_nbt_name(ndr, NDR_SCALARS, &r->dest_name));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->dgram_body_type));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->body, r->dgram_body_type));
-		NDR_CHECK(ndr_pull_dgram_message_body(ndr, NDR_SCALARS, &r->body));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dgram_message(struct ndr_print *ndr, const char *name, const struct dgram_message *r)
-{
-	ndr_print_struct(ndr, name, "dgram_message");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "length", r->length);
-	ndr_print_uint16(ndr, "offset", r->offset);
-	ndr_print_nbt_name(ndr, "source_name", &r->source_name);
-	ndr_print_nbt_name(ndr, "dest_name", &r->dest_name);
-	ndr_print_uint32(ndr, "dgram_body_type", r->dgram_body_type);
-	ndr_print_set_switch_value(ndr, &r->body, r->dgram_body_type);
-	ndr_print_dgram_message_body(ndr, "body", &r->body);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_dgram_err_code(struct ndr_push *ndr, int ndr_flags, enum dgram_err_code r)
-{
-	NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dgram_err_code(struct ndr_pull *ndr, int ndr_flags, enum dgram_err_code *r)
-{
-	uint8_t v;
-	NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dgram_err_code(struct ndr_print *ndr, const char *name, enum dgram_err_code r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case DGRAM_ERROR_NAME_NOT_PRESENT: val = "DGRAM_ERROR_NAME_NOT_PRESENT"; break;
-		case DGRAM_ERROR_INVALID_SOURCE: val = "DGRAM_ERROR_INVALID_SOURCE"; break;
-		case DGRAM_ERROR_INVALID_DEST: val = "DGRAM_ERROR_INVALID_DEST"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_dgram_data(struct ndr_push *ndr, int ndr_flags, const union dgram_data *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case DGRAM_DIRECT_UNIQUE: {
-				NDR_CHECK(ndr_push_dgram_message(ndr, NDR_SCALARS, &r->msg));
-			break; }
-
-			case DGRAM_DIRECT_GROUP: {
-				NDR_CHECK(ndr_push_dgram_message(ndr, NDR_SCALARS, &r->msg));
-			break; }
-
-			case DGRAM_BCAST: {
-				NDR_CHECK(ndr_push_dgram_message(ndr, NDR_SCALARS, &r->msg));
-			break; }
-
-			case DGRAM_ERROR: {
-				NDR_CHECK(ndr_push_dgram_err_code(ndr, NDR_SCALARS, r->error));
-			break; }
-
-			case DGRAM_QUERY: {
-				NDR_CHECK(ndr_push_nbt_name(ndr, NDR_SCALARS, &r->dest_name));
-			break; }
-
-			case DGRAM_QUERY_POSITIVE: {
-				NDR_CHECK(ndr_push_nbt_name(ndr, NDR_SCALARS, &r->dest_name));
-			break; }
-
-			case DGRAM_QUERY_NEGATIVE: {
-				NDR_CHECK(ndr_push_nbt_name(ndr, NDR_SCALARS, &r->dest_name));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case DGRAM_DIRECT_UNIQUE:
-			break;
-
-			case DGRAM_DIRECT_GROUP:
-			break;
-
-			case DGRAM_BCAST:
-			break;
-
-			case DGRAM_ERROR:
-			break;
-
-			case DGRAM_QUERY:
-			break;
-
-			case DGRAM_QUERY_POSITIVE:
-			break;
-
-			case DGRAM_QUERY_NEGATIVE:
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_dgram_data(struct ndr_pull *ndr, int ndr_flags, union dgram_data *r)
-{
-	int level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		switch (level) {
-			case DGRAM_DIRECT_UNIQUE: {
-				NDR_CHECK(ndr_pull_dgram_message(ndr, NDR_SCALARS, &r->msg));
-			break; }
-
-			case DGRAM_DIRECT_GROUP: {
-				NDR_CHECK(ndr_pull_dgram_message(ndr, NDR_SCALARS, &r->msg));
-			break; }
-
-			case DGRAM_BCAST: {
-				NDR_CHECK(ndr_pull_dgram_message(ndr, NDR_SCALARS, &r->msg));
-			break; }
-
-			case DGRAM_ERROR: {
-				NDR_CHECK(ndr_pull_dgram_err_code(ndr, NDR_SCALARS, &r->error));
-			break; }
-
-			case DGRAM_QUERY: {
-				NDR_CHECK(ndr_pull_nbt_name(ndr, NDR_SCALARS, &r->dest_name));
-			break; }
-
-			case DGRAM_QUERY_POSITIVE: {
-				NDR_CHECK(ndr_pull_nbt_name(ndr, NDR_SCALARS, &r->dest_name));
-			break; }
-
-			case DGRAM_QUERY_NEGATIVE: {
-				NDR_CHECK(ndr_pull_nbt_name(ndr, NDR_SCALARS, &r->dest_name));
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case DGRAM_DIRECT_UNIQUE:
-			break;
-
-			case DGRAM_DIRECT_GROUP:
-			break;
-
-			case DGRAM_BCAST:
-			break;
-
-			case DGRAM_ERROR:
-			break;
-
-			case DGRAM_QUERY:
-			break;
-
-			case DGRAM_QUERY_POSITIVE:
-			break;
-
-			case DGRAM_QUERY_NEGATIVE:
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_dgram_data(struct ndr_print *ndr, const char *name, const union dgram_data *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "dgram_data");
-	switch (level) {
-		case DGRAM_DIRECT_UNIQUE:
-			ndr_print_dgram_message(ndr, "msg", &r->msg);
-		break;
-
-		case DGRAM_DIRECT_GROUP:
-			ndr_print_dgram_message(ndr, "msg", &r->msg);
-		break;
-
-		case DGRAM_BCAST:
-			ndr_print_dgram_message(ndr, "msg", &r->msg);
-		break;
-
-		case DGRAM_ERROR:
-			ndr_print_dgram_err_code(ndr, "error", r->error);
-		break;
-
-		case DGRAM_QUERY:
-			ndr_print_nbt_name(ndr, "dest_name", &r->dest_name);
-		break;
-
-		case DGRAM_QUERY_POSITIVE:
-			ndr_print_nbt_name(ndr, "dest_name", &r->dest_name);
-		break;
-
-		case DGRAM_QUERY_NEGATIVE:
-			ndr_print_nbt_name(ndr, "dest_name", &r->dest_name);
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_nbt_dgram_packet(struct ndr_push *ndr, int ndr_flags, const struct nbt_dgram_packet *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN|LIBNDR_FLAG_BIGENDIAN|LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 4));
-			NDR_CHECK(ndr_push_dgram_msg_type(ndr, NDR_SCALARS, r->msg_type));
-			NDR_CHECK(ndr_push_dgram_flags(ndr, NDR_SCALARS, r->flags));
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->dgram_id));
-			NDR_CHECK(ndr_push_ipv4address(ndr, NDR_SCALARS, r->src_addr));
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->src_port));
-			NDR_CHECK(ndr_push_set_switch_value(ndr, &r->data, r->msg_type));
-			NDR_CHECK(ndr_push_dgram_data(ndr, NDR_SCALARS, &r->data));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_nbt_dgram_packet(struct ndr_pull *ndr, int ndr_flags, struct nbt_dgram_packet *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN|LIBNDR_FLAG_BIGENDIAN|LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 4));
-			NDR_CHECK(ndr_pull_dgram_msg_type(ndr, NDR_SCALARS, &r->msg_type));
-			NDR_CHECK(ndr_pull_dgram_flags(ndr, NDR_SCALARS, &r->flags));
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->dgram_id));
-			NDR_CHECK(ndr_pull_ipv4address(ndr, NDR_SCALARS, &r->src_addr));
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->src_port));
-			NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->data, r->msg_type));
-			NDR_CHECK(ndr_pull_dgram_data(ndr, NDR_SCALARS, &r->data));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_dgram_packet(struct ndr_print *ndr, const char *name, const struct nbt_dgram_packet *r)
-{
-	ndr_print_struct(ndr, name, "nbt_dgram_packet");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN|LIBNDR_FLAG_BIGENDIAN|LIBNDR_PRINT_ARRAY_HEX);
-		ndr->depth++;
-		ndr_print_dgram_msg_type(ndr, "msg_type", r->msg_type);
-		ndr_print_dgram_flags(ndr, "flags", r->flags);
-		ndr_print_uint16(ndr, "dgram_id", r->dgram_id);
-		ndr_print_ipv4address(ndr, "src_addr", r->src_addr);
-		ndr_print_uint16(ndr, "src_port", r->src_port);
-		ndr_print_set_switch_value(ndr, &r->data, r->msg_type);
-		ndr_print_dgram_data(ndr, "data", &r->data);
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-
-static enum ndr_err_code ndr_push_nbt_netlogon_command(struct ndr_push *ndr, int ndr_flags, enum nbt_netlogon_command r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_netlogon_command(struct ndr_pull *ndr, int ndr_flags, enum nbt_netlogon_command *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_netlogon_command(struct ndr_print *ndr, const char *name, enum nbt_netlogon_command r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case NETLOGON_QUERY_FOR_PDC: val = "NETLOGON_QUERY_FOR_PDC"; break;
-		case NETLOGON_ANNOUNCE_UAS: val = "NETLOGON_ANNOUNCE_UAS"; break;
-		case NETLOGON_RESPONSE_FROM_PDC: val = "NETLOGON_RESPONSE_FROM_PDC"; break;
-		case NETLOGON_QUERY_FOR_PDC2: val = "NETLOGON_QUERY_FOR_PDC2"; break;
-		case NETLOGON_RESPONSE_FROM_PDC2: val = "NETLOGON_RESPONSE_FROM_PDC2"; break;
-		case NETLOGON_RESPONSE_FROM_PDC_USER: val = "NETLOGON_RESPONSE_FROM_PDC_USER"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_nbt_netlogon_version(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	{
-		uint32_t _flags_save_BITMAP = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-		ndr->flags = _flags_save_BITMAP;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_netlogon_version(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	{
-		uint32_t _flags_save_BITMAP = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-		*r = v;
-		ndr->flags = _flags_save_BITMAP;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_netlogon_version(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	{
-		uint32_t _flags_save_BITMAP = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN);
-		ndr_print_uint32(ndr, name, r);
-		ndr->depth++;
-		ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_VERSION_1", NETLOGON_VERSION_1, r);
-		ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_VERSION_5", NETLOGON_VERSION_5, r);
-		ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_VERSION_5EX", NETLOGON_VERSION_5EX, r);
-		ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_VERSION_5EX_WITH_IP", NETLOGON_VERSION_5EX_WITH_IP, r);
-		ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_VERSION_WITH_CLOSEST_SITE", NETLOGON_VERSION_WITH_CLOSEST_SITE, r);
-		ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_VERSION_AVOID_NT4_EMUL", NETLOGON_VERSION_AVOID_NT4_EMUL, r);
-		ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_VERSION_PDC", NETLOGON_VERSION_PDC, r);
-		ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_VERSION_IP", NETLOGON_VERSION_IP, r);
-		ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_VERSION_LOCAL", NETLOGON_VERSION_LOCAL, r);
-		ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_VERSION_GC", NETLOGON_VERSION_GC, r);
-		ndr->depth--;
-		ndr->flags = _flags_save_BITMAP;
-	}
-}
-
-static enum ndr_err_code ndr_push_nbt_netlogon_query_for_pdc(struct ndr_push *ndr, int ndr_flags, const struct nbt_netlogon_query_for_pdc *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->computer_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->mailslot_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_DATA_BLOB = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN2);
-			NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->_pad));
-			ndr->flags = _flags_save_DATA_BLOB;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->unicode_name));
-			ndr->flags = _flags_save_string;
-		}
-		NDR_CHECK(ndr_push_nbt_netlogon_version(ndr, NDR_SCALARS, r->nt_version));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lmnt_token));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_netlogon_query_for_pdc(struct ndr_pull *ndr, int ndr_flags, struct nbt_netlogon_query_for_pdc *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->computer_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->mailslot_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_DATA_BLOB = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN2);
-			NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->_pad));
-			ndr->flags = _flags_save_DATA_BLOB;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->unicode_name));
-			ndr->flags = _flags_save_string;
-		}
-		NDR_CHECK(ndr_pull_nbt_netlogon_version(ndr, NDR_SCALARS, &r->nt_version));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lmnt_token));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_netlogon_query_for_pdc(struct ndr_print *ndr, const char *name, const struct nbt_netlogon_query_for_pdc *r)
-{
-	ndr_print_struct(ndr, name, "nbt_netlogon_query_for_pdc");
-	ndr->depth++;
-	ndr_print_string(ndr, "computer_name", r->computer_name);
-	ndr_print_string(ndr, "mailslot_name", r->mailslot_name);
-	ndr_print_DATA_BLOB(ndr, "_pad", r->_pad);
-	ndr_print_string(ndr, "unicode_name", r->unicode_name);
-	ndr_print_nbt_netlogon_version(ndr, "nt_version", r->nt_version);
-	ndr_print_uint16(ndr, "lmnt_token", r->lmnt_token);
-	ndr_print_uint16(ndr, "lm20_token", r->lm20_token);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_netlogon_query_for_pdc2(struct ndr_push *ndr, int ndr_flags, const struct nbt_netlogon_query_for_pdc2 *r)
-{
-	uint32_t cntr_unknown_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->request_count));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->computer_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->user_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->mailslot_name));
-			ndr->flags = _flags_save_string;
-		}
-		for (cntr_unknown_0 = 0; cntr_unknown_0 < 2; cntr_unknown_0++) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown[cntr_unknown_0]));
-		}
-		NDR_CHECK(ndr_push_nbt_netlogon_version(ndr, NDR_SCALARS, r->nt_version));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lmnt_token));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_netlogon_query_for_pdc2(struct ndr_pull *ndr, int ndr_flags, struct nbt_netlogon_query_for_pdc2 *r)
-{
-	uint32_t cntr_unknown_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->request_count));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->computer_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->user_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->mailslot_name));
-			ndr->flags = _flags_save_string;
-		}
-		for (cntr_unknown_0 = 0; cntr_unknown_0 < 2; cntr_unknown_0++) {
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown[cntr_unknown_0]));
-		}
-		NDR_CHECK(ndr_pull_nbt_netlogon_version(ndr, NDR_SCALARS, &r->nt_version));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lmnt_token));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_netlogon_query_for_pdc2(struct ndr_print *ndr, const char *name, const struct nbt_netlogon_query_for_pdc2 *r)
-{
-	uint32_t cntr_unknown_0;
-	ndr_print_struct(ndr, name, "nbt_netlogon_query_for_pdc2");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "request_count", r->request_count);
-	ndr_print_string(ndr, "computer_name", r->computer_name);
-	ndr_print_string(ndr, "user_name", r->user_name);
-	ndr_print_string(ndr, "mailslot_name", r->mailslot_name);
-	ndr->print(ndr, "%s: ARRAY(%d)", "unknown", 2);
-	ndr->depth++;
-	for (cntr_unknown_0=0;cntr_unknown_0<2;cntr_unknown_0++) {
-		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_unknown_0) != -1) {
-			ndr_print_uint32(ndr, "unknown", r->unknown[cntr_unknown_0]);
-			free(idx_0);
-		}
-	}
-	ndr->depth--;
-	ndr_print_nbt_netlogon_version(ndr, "nt_version", r->nt_version);
-	ndr_print_uint16(ndr, "lmnt_token", r->lmnt_token);
-	ndr_print_uint16(ndr, "lm20_token", r->lm20_token);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_netlogon_response_from_pdc(struct ndr_push *ndr, int ndr_flags, const struct nbt_netlogon_response_from_pdc *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->pdc_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_DATA_BLOB = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN2);
-			NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->_pad));
-			ndr->flags = _flags_save_DATA_BLOB;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->unicode_pdc_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->domain_name));
-			ndr->flags = _flags_save_string;
-		}
-		NDR_CHECK(ndr_push_nbt_netlogon_version(ndr, NDR_SCALARS, r->nt_version));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lmnt_token));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_netlogon_response_from_pdc(struct ndr_pull *ndr, int ndr_flags, struct nbt_netlogon_response_from_pdc *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->pdc_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_DATA_BLOB = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN2);
-			NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->_pad));
-			ndr->flags = _flags_save_DATA_BLOB;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->unicode_pdc_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->domain_name));
-			ndr->flags = _flags_save_string;
-		}
-		NDR_CHECK(ndr_pull_nbt_netlogon_version(ndr, NDR_SCALARS, &r->nt_version));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lmnt_token));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_netlogon_response_from_pdc(struct ndr_print *ndr, const char *name, const struct nbt_netlogon_response_from_pdc *r)
-{
-	ndr_print_struct(ndr, name, "nbt_netlogon_response_from_pdc");
-	ndr->depth++;
-	ndr_print_string(ndr, "pdc_name", r->pdc_name);
-	ndr_print_DATA_BLOB(ndr, "_pad", r->_pad);
-	ndr_print_string(ndr, "unicode_pdc_name", r->unicode_pdc_name);
-	ndr_print_string(ndr, "domain_name", r->domain_name);
-	ndr_print_nbt_netlogon_version(ndr, "nt_version", r->nt_version);
-	ndr_print_uint16(ndr, "lmnt_token", r->lmnt_token);
-	ndr_print_uint16(ndr, "lm20_token", r->lm20_token);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_server_type(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_server_type(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_server_type(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NBT_SERVER_PDC", NBT_SERVER_PDC, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NBT_SERVER_GC", NBT_SERVER_GC, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NBT_SERVER_LDAP", NBT_SERVER_LDAP, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NBT_SERVER_DS", NBT_SERVER_DS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NBT_SERVER_KDC", NBT_SERVER_KDC, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NBT_SERVER_TIMESERV", NBT_SERVER_TIMESERV, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NBT_SERVER_CLOSEST", NBT_SERVER_CLOSEST, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NBT_SERVER_WRITABLE", NBT_SERVER_WRITABLE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NBT_SERVER_GOOD_TIMESERV", NBT_SERVER_GOOD_TIMESERV, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NBT_SERVER_NDNC", NBT_SERVER_NDNC, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NBT_SERVER_SELECT_SECRET_DOMAIN_6", NBT_SERVER_SELECT_SECRET_DOMAIN_6, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NBT_SERVER_FULL_SECRET_DOMAIN_6", NBT_SERVER_FULL_SECRET_DOMAIN_6, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_dc_sock_addr(struct ndr_push *ndr, int ndr_flags, const struct nbt_dc_sock_addr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->family));
-		{
-			uint32_t _flags_save_ipv4address = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_BIGENDIAN);
-			NDR_CHECK(ndr_push_ipv4address(ndr, NDR_SCALARS, r->pdc_ip));
-			ndr->flags = _flags_save_ipv4address;
-		}
-		{
-			uint32_t _flags_save_DATA_BLOB = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-			NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->remaining));
-			ndr->flags = _flags_save_DATA_BLOB;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_dc_sock_addr(struct ndr_pull *ndr, int ndr_flags, struct nbt_dc_sock_addr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->family));
-		{
-			uint32_t _flags_save_ipv4address = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_BIGENDIAN);
-			NDR_CHECK(ndr_pull_ipv4address(ndr, NDR_SCALARS, &r->pdc_ip));
-			ndr->flags = _flags_save_ipv4address;
-		}
-		{
-			uint32_t _flags_save_DATA_BLOB = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-			NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->remaining));
-			ndr->flags = _flags_save_DATA_BLOB;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_dc_sock_addr(struct ndr_print *ndr, const char *name, const struct nbt_dc_sock_addr *r)
-{
-	ndr_print_struct(ndr, name, "nbt_dc_sock_addr");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "family", r->family);
-	ndr_print_ipv4address(ndr, "pdc_ip", r->pdc_ip);
-	ndr_print_DATA_BLOB(ndr, "remaining", r->remaining);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_netlogon_response_from_pdc2(struct ndr_push *ndr, int ndr_flags, const struct nbt_netlogon_response_from_pdc2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		{
-			uint32_t _flags_save_DATA_BLOB = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
-			NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->_pad));
-			ndr->flags = _flags_save_DATA_BLOB;
-		}
-		NDR_CHECK(ndr_push_nbt_server_type(ndr, NDR_SCALARS, r->server_type));
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->domain_uuid));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->forest));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->dns_domain));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->pdc_dns_name));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->domain));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->pdc_name));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->user_name));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->server_site));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->client_site));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->dc_sock_addr_size));
-		{
-			struct ndr_push *_ndr_dc_sock_addr;
-			NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_dc_sock_addr, 0, r->dc_sock_addr_size));
-			NDR_CHECK(ndr_push_nbt_dc_sock_addr(_ndr_dc_sock_addr, NDR_SCALARS, &r->dc_sock_addr));
-			NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_dc_sock_addr, 0, r->dc_sock_addr_size));
-		}
-		NDR_CHECK(ndr_push_nbt_netlogon_version(ndr, NDR_SCALARS, r->nt_version));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lmnt_token));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_netlogon_response_from_pdc2(struct ndr_pull *ndr, int ndr_flags, struct nbt_netlogon_response_from_pdc2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		{
-			uint32_t _flags_save_DATA_BLOB = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
-			NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->_pad));
-			ndr->flags = _flags_save_DATA_BLOB;
-		}
-		NDR_CHECK(ndr_pull_nbt_server_type(ndr, NDR_SCALARS, &r->server_type));
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->domain_uuid));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->forest));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->dns_domain));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->pdc_dns_name));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->domain));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->pdc_name));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->user_name));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->server_site));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->client_site));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->dc_sock_addr_size));
-		{
-			struct ndr_pull *_ndr_dc_sock_addr;
-			NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_dc_sock_addr, 0, r->dc_sock_addr_size));
-			NDR_CHECK(ndr_pull_nbt_dc_sock_addr(_ndr_dc_sock_addr, NDR_SCALARS, &r->dc_sock_addr));
-			NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_dc_sock_addr, 0, r->dc_sock_addr_size));
-		}
-		NDR_CHECK(ndr_pull_nbt_netlogon_version(ndr, NDR_SCALARS, &r->nt_version));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lmnt_token));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_netlogon_response_from_pdc2(struct ndr_print *ndr, const char *name, const struct nbt_netlogon_response_from_pdc2 *r)
-{
-	ndr_print_struct(ndr, name, "nbt_netlogon_response_from_pdc2");
-	ndr->depth++;
-	ndr_print_DATA_BLOB(ndr, "_pad", r->_pad);
-	ndr_print_nbt_server_type(ndr, "server_type", r->server_type);
-	ndr_print_GUID(ndr, "domain_uuid", &r->domain_uuid);
-	ndr_print_nbt_string(ndr, "forest", r->forest);
-	ndr_print_nbt_string(ndr, "dns_domain", r->dns_domain);
-	ndr_print_nbt_string(ndr, "pdc_dns_name", r->pdc_dns_name);
-	ndr_print_nbt_string(ndr, "domain", r->domain);
-	ndr_print_nbt_string(ndr, "pdc_name", r->pdc_name);
-	ndr_print_nbt_string(ndr, "user_name", r->user_name);
-	ndr_print_nbt_string(ndr, "server_site", r->server_site);
-	ndr_print_nbt_string(ndr, "client_site", r->client_site);
-	ndr_print_uint8(ndr, "dc_sock_addr_size", r->dc_sock_addr_size);
-	ndr_print_nbt_dc_sock_addr(ndr, "dc_sock_addr", &r->dc_sock_addr);
-	ndr_print_nbt_netlogon_version(ndr, "nt_version", r->nt_version);
-	ndr_print_uint16(ndr, "lmnt_token", r->lmnt_token);
-	ndr_print_uint16(ndr, "lm20_token", r->lm20_token);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_db_change(struct ndr_push *ndr, int ndr_flags, const struct nbt_db_change *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 8));
-		NDR_CHECK(ndr_push_netr_SamDatabaseID(ndr, NDR_SCALARS, r->db_index));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->serial));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->timestamp));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_db_change(struct ndr_pull *ndr, int ndr_flags, struct nbt_db_change *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 8));
-		NDR_CHECK(ndr_pull_netr_SamDatabaseID(ndr, NDR_SCALARS, &r->db_index));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->serial));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->timestamp));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_db_change(struct ndr_print *ndr, const char *name, const struct nbt_db_change *r)
-{
-	ndr_print_struct(ndr, name, "nbt_db_change");
-	ndr->depth++;
-	ndr_print_netr_SamDatabaseID(ndr, "db_index", r->db_index);
-	ndr_print_hyper(ndr, "serial", r->serial);
-	ndr_print_NTTIME(ndr, "timestamp", r->timestamp);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_netlogon_announce_uas(struct ndr_push *ndr, int ndr_flags, const struct nbt_netlogon_announce_uas *r)
-{
-	uint32_t cntr_dbchange_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 8));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->serial_lo));
-		NDR_CHECK(ndr_push_time_t(ndr, NDR_SCALARS, r->timestamp));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->pulse));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->random));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->pdc_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->domain));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_DATA_BLOB = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN2);
-			NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->_pad));
-			ndr->flags = _flags_save_DATA_BLOB;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->unicode_pdc_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->unicode_domain));
-			ndr->flags = _flags_save_string;
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->db_count));
-		for (cntr_dbchange_0 = 0; cntr_dbchange_0 < r->db_count; cntr_dbchange_0++) {
-			NDR_CHECK(ndr_push_nbt_db_change(ndr, NDR_SCALARS, &r->dbchange[cntr_dbchange_0]));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_size_dom_sid0(&r->sid, ndr->flags)));
-		{
-			struct ndr_push *_ndr_sid;
-			NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_sid, 0, ndr_size_dom_sid0(&r->sid, ndr->flags)));
-			NDR_CHECK(ndr_push_dom_sid0(_ndr_sid, NDR_SCALARS|NDR_BUFFERS, &r->sid));
-			NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_sid, 0, ndr_size_dom_sid0(&r->sid, ndr->flags)));
-		}
-		NDR_CHECK(ndr_push_nbt_netlogon_version(ndr, NDR_SCALARS, r->nt_version));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lmnt_token));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_netlogon_announce_uas(struct ndr_pull *ndr, int ndr_flags, struct nbt_netlogon_announce_uas *r)
-{
-	uint32_t cntr_dbchange_0;
-	TALLOC_CTX *_mem_save_dbchange_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 8));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->serial_lo));
-		NDR_CHECK(ndr_pull_time_t(ndr, NDR_SCALARS, &r->timestamp));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->pulse));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->random));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->pdc_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->domain));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_DATA_BLOB = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN2);
-			NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->_pad));
-			ndr->flags = _flags_save_DATA_BLOB;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->unicode_pdc_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->unicode_domain));
-			ndr->flags = _flags_save_string;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->db_count));
-		NDR_PULL_ALLOC_N(ndr, r->dbchange, r->db_count);
-		_mem_save_dbchange_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->dbchange, 0);
-		for (cntr_dbchange_0 = 0; cntr_dbchange_0 < r->db_count; cntr_dbchange_0++) {
-			NDR_CHECK(ndr_pull_nbt_db_change(ndr, NDR_SCALARS, &r->dbchange[cntr_dbchange_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dbchange_0, 0);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sid_size));
-		{
-			struct ndr_pull *_ndr_sid;
-			NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_sid, 0, r->sid_size));
-			NDR_CHECK(ndr_pull_dom_sid0(_ndr_sid, NDR_SCALARS|NDR_BUFFERS, &r->sid));
-			NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_sid, 0, r->sid_size));
-		}
-		NDR_CHECK(ndr_pull_nbt_netlogon_version(ndr, NDR_SCALARS, &r->nt_version));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lmnt_token));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_netlogon_announce_uas(struct ndr_print *ndr, const char *name, const struct nbt_netlogon_announce_uas *r)
-{
-	uint32_t cntr_dbchange_0;
-	ndr_print_struct(ndr, name, "nbt_netlogon_announce_uas");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "serial_lo", r->serial_lo);
-	ndr_print_time_t(ndr, "timestamp", r->timestamp);
-	ndr_print_uint32(ndr, "pulse", r->pulse);
-	ndr_print_uint32(ndr, "random", r->random);
-	ndr_print_string(ndr, "pdc_name", r->pdc_name);
-	ndr_print_string(ndr, "domain", r->domain);
-	ndr_print_DATA_BLOB(ndr, "_pad", r->_pad);
-	ndr_print_string(ndr, "unicode_pdc_name", r->unicode_pdc_name);
-	ndr_print_string(ndr, "unicode_domain", r->unicode_domain);
-	ndr_print_uint32(ndr, "db_count", r->db_count);
-	ndr->print(ndr, "%s: ARRAY(%d)", "dbchange", r->db_count);
-	ndr->depth++;
-	for (cntr_dbchange_0=0;cntr_dbchange_0<r->db_count;cntr_dbchange_0++) {
-		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_dbchange_0) != -1) {
-			ndr_print_nbt_db_change(ndr, "dbchange", &r->dbchange[cntr_dbchange_0]);
-			free(idx_0);
-		}
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "sid_size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_dom_sid0(&r->sid, ndr->flags):r->sid_size);
-	ndr_print_dom_sid0(ndr, "sid", &r->sid);
-	ndr_print_nbt_netlogon_version(ndr, "nt_version", r->nt_version);
-	ndr_print_uint16(ndr, "lmnt_token", r->lmnt_token);
-	ndr_print_uint16(ndr, "lm20_token", r->lm20_token);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_netlogon_request(struct ndr_push *ndr, int ndr_flags, const union nbt_netlogon_request *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case NETLOGON_QUERY_FOR_PDC: {
-				NDR_CHECK(ndr_push_nbt_netlogon_query_for_pdc(ndr, NDR_SCALARS, &r->pdc));
-			break; }
-
-			case NETLOGON_QUERY_FOR_PDC2: {
-				NDR_CHECK(ndr_push_nbt_netlogon_query_for_pdc2(ndr, NDR_SCALARS, &r->pdc2));
-			break; }
-
-			case NETLOGON_ANNOUNCE_UAS: {
-				NDR_CHECK(ndr_push_nbt_netlogon_announce_uas(ndr, NDR_SCALARS, &r->uas));
-			break; }
-
-			case NETLOGON_RESPONSE_FROM_PDC: {
-				NDR_CHECK(ndr_push_nbt_netlogon_response_from_pdc(ndr, NDR_SCALARS, &r->response));
-			break; }
-
-			case NETLOGON_RESPONSE_FROM_PDC2: {
-				NDR_CHECK(ndr_push_nbt_netlogon_response_from_pdc2(ndr, NDR_SCALARS, &r->response2));
-			break; }
-
-			case NETLOGON_RESPONSE_FROM_PDC_USER: {
-				NDR_CHECK(ndr_push_nbt_netlogon_response_from_pdc2(ndr, NDR_SCALARS, &r->response2));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case NETLOGON_QUERY_FOR_PDC:
-			break;
-
-			case NETLOGON_QUERY_FOR_PDC2:
-			break;
-
-			case NETLOGON_ANNOUNCE_UAS:
-				NDR_CHECK(ndr_push_nbt_netlogon_announce_uas(ndr, NDR_BUFFERS, &r->uas));
-			break;
-
-			case NETLOGON_RESPONSE_FROM_PDC:
-			break;
-
-			case NETLOGON_RESPONSE_FROM_PDC2:
-			break;
-
-			case NETLOGON_RESPONSE_FROM_PDC_USER:
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_netlogon_request(struct ndr_pull *ndr, int ndr_flags, union nbt_netlogon_request *r)
-{
-	int level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		switch (level) {
-			case NETLOGON_QUERY_FOR_PDC: {
-				NDR_CHECK(ndr_pull_nbt_netlogon_query_for_pdc(ndr, NDR_SCALARS, &r->pdc));
-			break; }
-
-			case NETLOGON_QUERY_FOR_PDC2: {
-				NDR_CHECK(ndr_pull_nbt_netlogon_query_for_pdc2(ndr, NDR_SCALARS, &r->pdc2));
-			break; }
-
-			case NETLOGON_ANNOUNCE_UAS: {
-				NDR_CHECK(ndr_pull_nbt_netlogon_announce_uas(ndr, NDR_SCALARS, &r->uas));
-			break; }
-
-			case NETLOGON_RESPONSE_FROM_PDC: {
-				NDR_CHECK(ndr_pull_nbt_netlogon_response_from_pdc(ndr, NDR_SCALARS, &r->response));
-			break; }
-
-			case NETLOGON_RESPONSE_FROM_PDC2: {
-				NDR_CHECK(ndr_pull_nbt_netlogon_response_from_pdc2(ndr, NDR_SCALARS, &r->response2));
-			break; }
-
-			case NETLOGON_RESPONSE_FROM_PDC_USER: {
-				NDR_CHECK(ndr_pull_nbt_netlogon_response_from_pdc2(ndr, NDR_SCALARS, &r->response2));
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case NETLOGON_QUERY_FOR_PDC:
-			break;
-
-			case NETLOGON_QUERY_FOR_PDC2:
-			break;
-
-			case NETLOGON_ANNOUNCE_UAS:
-				NDR_CHECK(ndr_pull_nbt_netlogon_announce_uas(ndr, NDR_BUFFERS, &r->uas));
-			break;
-
-			case NETLOGON_RESPONSE_FROM_PDC:
-			break;
-
-			case NETLOGON_RESPONSE_FROM_PDC2:
-			break;
-
-			case NETLOGON_RESPONSE_FROM_PDC_USER:
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_netlogon_request(struct ndr_print *ndr, const char *name, const union nbt_netlogon_request *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "nbt_netlogon_request");
-	switch (level) {
-		case NETLOGON_QUERY_FOR_PDC:
-			ndr_print_nbt_netlogon_query_for_pdc(ndr, "pdc", &r->pdc);
-		break;
-
-		case NETLOGON_QUERY_FOR_PDC2:
-			ndr_print_nbt_netlogon_query_for_pdc2(ndr, "pdc2", &r->pdc2);
-		break;
-
-		case NETLOGON_ANNOUNCE_UAS:
-			ndr_print_nbt_netlogon_announce_uas(ndr, "uas", &r->uas);
-		break;
-
-		case NETLOGON_RESPONSE_FROM_PDC:
-			ndr_print_nbt_netlogon_response_from_pdc(ndr, "response", &r->response);
-		break;
-
-		case NETLOGON_RESPONSE_FROM_PDC2:
-			ndr_print_nbt_netlogon_response_from_pdc2(ndr, "response2", &r->response2);
-		break;
-
-		case NETLOGON_RESPONSE_FROM_PDC_USER:
-			ndr_print_nbt_netlogon_response_from_pdc2(ndr, "response2", &r->response2);
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_nbt_netlogon_packet(struct ndr_push *ndr, int ndr_flags, const struct nbt_netlogon_packet *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 8));
-			NDR_CHECK(ndr_push_nbt_netlogon_command(ndr, NDR_SCALARS, r->command));
-			NDR_CHECK(ndr_push_set_switch_value(ndr, &r->req, r->command));
-			NDR_CHECK(ndr_push_nbt_netlogon_request(ndr, NDR_SCALARS, &r->req));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-			NDR_CHECK(ndr_push_nbt_netlogon_request(ndr, NDR_BUFFERS, &r->req));
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_nbt_netlogon_packet(struct ndr_pull *ndr, int ndr_flags, struct nbt_netlogon_packet *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 8));
-			NDR_CHECK(ndr_pull_nbt_netlogon_command(ndr, NDR_SCALARS, &r->command));
-			NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->req, r->command));
-			NDR_CHECK(ndr_pull_nbt_netlogon_request(ndr, NDR_SCALARS, &r->req));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-			NDR_CHECK(ndr_pull_nbt_netlogon_request(ndr, NDR_BUFFERS, &r->req));
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_netlogon_packet(struct ndr_print *ndr, const char *name, const struct nbt_netlogon_packet *r)
-{
-	ndr_print_struct(ndr, name, "nbt_netlogon_packet");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN);
-		ndr->depth++;
-		ndr_print_nbt_netlogon_command(ndr, "command", r->command);
-		ndr_print_set_switch_value(ndr, &r->req, r->command);
-		ndr_print_nbt_netlogon_request(ndr, "req", &r->req);
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-
-static enum ndr_err_code ndr_push_nbt_cldap_netlogon_1(struct ndr_push *ndr, int ndr_flags, const struct nbt_cldap_netlogon_1 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_nbt_netlogon_command(ndr, NDR_SCALARS, r->type));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->pdc_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->user_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->domain_name));
-			ndr->flags = _flags_save_string;
-		}
-		NDR_CHECK(ndr_push_nbt_netlogon_version(ndr, NDR_SCALARS, 1));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lmnt_token));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_cldap_netlogon_1(struct ndr_pull *ndr, int ndr_flags, struct nbt_cldap_netlogon_1 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_nbt_netlogon_command(ndr, NDR_SCALARS, &r->type));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->pdc_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->user_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->domain_name));
-			ndr->flags = _flags_save_string;
-		}
-		NDR_CHECK(ndr_pull_nbt_netlogon_version(ndr, NDR_SCALARS, &r->nt_version));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lmnt_token));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_cldap_netlogon_1(struct ndr_print *ndr, const char *name, const struct nbt_cldap_netlogon_1 *r)
-{
-	ndr_print_struct(ndr, name, "nbt_cldap_netlogon_1");
-	ndr->depth++;
-	ndr_print_nbt_netlogon_command(ndr, "type", r->type);
-	ndr_print_string(ndr, "pdc_name", r->pdc_name);
-	ndr_print_string(ndr, "user_name", r->user_name);
-	ndr_print_string(ndr, "domain_name", r->domain_name);
-	ndr_print_nbt_netlogon_version(ndr, "nt_version", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?1:r->nt_version);
-	ndr_print_uint16(ndr, "lmnt_token", r->lmnt_token);
-	ndr_print_uint16(ndr, "lm20_token", r->lm20_token);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_cldap_netlogon_3(struct ndr_push *ndr, int ndr_flags, const struct nbt_cldap_netlogon_3 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_nbt_netlogon_command(ndr, NDR_SCALARS, r->type));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->pdc_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->user_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->domain_name));
-			ndr->flags = _flags_save_string;
-		}
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->domain_uuid));
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->unknown_uuid));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->forest));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->dns_domain));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->pdc_dns_name));
-		NDR_CHECK(ndr_push_ipv4address(ndr, NDR_SCALARS, r->pdc_ip));
-		NDR_CHECK(ndr_push_nbt_server_type(ndr, NDR_SCALARS, r->server_type));
-		NDR_CHECK(ndr_push_nbt_netlogon_version(ndr, NDR_SCALARS, 3));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lmnt_token));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_cldap_netlogon_3(struct ndr_pull *ndr, int ndr_flags, struct nbt_cldap_netlogon_3 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_nbt_netlogon_command(ndr, NDR_SCALARS, &r->type));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->pdc_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->user_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->domain_name));
-			ndr->flags = _flags_save_string;
-		}
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->domain_uuid));
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->unknown_uuid));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->forest));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->dns_domain));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->pdc_dns_name));
-		NDR_CHECK(ndr_pull_ipv4address(ndr, NDR_SCALARS, &r->pdc_ip));
-		NDR_CHECK(ndr_pull_nbt_server_type(ndr, NDR_SCALARS, &r->server_type));
-		NDR_CHECK(ndr_pull_nbt_netlogon_version(ndr, NDR_SCALARS, &r->nt_version));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lmnt_token));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_cldap_netlogon_3(struct ndr_print *ndr, const char *name, const struct nbt_cldap_netlogon_3 *r)
-{
-	ndr_print_struct(ndr, name, "nbt_cldap_netlogon_3");
-	ndr->depth++;
-	ndr_print_nbt_netlogon_command(ndr, "type", r->type);
-	ndr_print_string(ndr, "pdc_name", r->pdc_name);
-	ndr_print_string(ndr, "user_name", r->user_name);
-	ndr_print_string(ndr, "domain_name", r->domain_name);
-	ndr_print_GUID(ndr, "domain_uuid", &r->domain_uuid);
-	ndr_print_GUID(ndr, "unknown_uuid", &r->unknown_uuid);
-	ndr_print_nbt_string(ndr, "forest", r->forest);
-	ndr_print_nbt_string(ndr, "dns_domain", r->dns_domain);
-	ndr_print_nbt_string(ndr, "pdc_dns_name", r->pdc_dns_name);
-	ndr_print_ipv4address(ndr, "pdc_ip", r->pdc_ip);
-	ndr_print_nbt_server_type(ndr, "server_type", r->server_type);
-	ndr_print_nbt_netlogon_version(ndr, "nt_version", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?3:r->nt_version);
-	ndr_print_uint16(ndr, "lmnt_token", r->lmnt_token);
-	ndr_print_uint16(ndr, "lm20_token", r->lm20_token);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_nbt_cldap_netlogon_5(struct ndr_push *ndr, int ndr_flags, const struct nbt_cldap_netlogon_5 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_nbt_netlogon_command(ndr, NDR_SCALARS, r->type));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->sbz));
-		NDR_CHECK(ndr_push_nbt_server_type(ndr, NDR_SCALARS, r->server_type));
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->domain_uuid));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->forest));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->dns_domain));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->pdc_dns_name));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->domain));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->pdc_name));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->user_name));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->server_site));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->client_site));
-		NDR_CHECK(ndr_push_nbt_netlogon_version(ndr, NDR_SCALARS, 5));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lmnt_token));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_nbt_cldap_netlogon_5(struct ndr_pull *ndr, int ndr_flags, struct nbt_cldap_netlogon_5 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_nbt_netlogon_command(ndr, NDR_SCALARS, &r->type));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->sbz));
-		NDR_CHECK(ndr_pull_nbt_server_type(ndr, NDR_SCALARS, &r->server_type));
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->domain_uuid));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->forest));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->dns_domain));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->pdc_dns_name));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->domain));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->pdc_name));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->user_name));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->server_site));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->client_site));
-		NDR_CHECK(ndr_pull_nbt_netlogon_version(ndr, NDR_SCALARS, &r->nt_version));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lmnt_token));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_cldap_netlogon_5(struct ndr_print *ndr, const char *name, const struct nbt_cldap_netlogon_5 *r)
-{
-	ndr_print_struct(ndr, name, "nbt_cldap_netlogon_5");
-	ndr->depth++;
-	ndr_print_nbt_netlogon_command(ndr, "type", r->type);
-	ndr_print_uint16(ndr, "sbz", r->sbz);
-	ndr_print_nbt_server_type(ndr, "server_type", r->server_type);
-	ndr_print_GUID(ndr, "domain_uuid", &r->domain_uuid);
-	ndr_print_nbt_string(ndr, "forest", r->forest);
-	ndr_print_nbt_string(ndr, "dns_domain", r->dns_domain);
-	ndr_print_nbt_string(ndr, "pdc_dns_name", r->pdc_dns_name);
-	ndr_print_nbt_string(ndr, "domain", r->domain);
-	ndr_print_nbt_string(ndr, "pdc_name", r->pdc_name);
-	ndr_print_nbt_string(ndr, "user_name", r->user_name);
-	ndr_print_nbt_string(ndr, "server_site", r->server_site);
-	ndr_print_nbt_string(ndr, "client_site", r->client_site);
-	ndr_print_nbt_netlogon_version(ndr, "nt_version", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?5:r->nt_version);
-	ndr_print_uint16(ndr, "lmnt_token", r->lmnt_token);
-	ndr_print_uint16(ndr, "lm20_token", r->lm20_token);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_cldap_netlogon_13(struct ndr_push *ndr, int ndr_flags, const struct nbt_cldap_netlogon_13 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_nbt_netlogon_command(ndr, NDR_SCALARS, r->type));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->sbz));
-		NDR_CHECK(ndr_push_nbt_server_type(ndr, NDR_SCALARS, r->server_type));
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->domain_uuid));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->forest));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->dns_domain));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->pdc_dns_name));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->domain));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->pdc_name));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->user_name));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->server_site));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->client_site));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->dc_sock_addr_size));
-		{
-			struct ndr_push *_ndr_dc_sock_addr;
-			NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_dc_sock_addr, 0, r->dc_sock_addr_size));
-			NDR_CHECK(ndr_push_nbt_dc_sock_addr(_ndr_dc_sock_addr, NDR_SCALARS, &r->dc_sock_addr));
-			NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_dc_sock_addr, 0, r->dc_sock_addr_size));
-		}
-		NDR_CHECK(ndr_push_nbt_netlogon_version(ndr, NDR_SCALARS, 13));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lmnt_token));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_cldap_netlogon_13(struct ndr_pull *ndr, int ndr_flags, struct nbt_cldap_netlogon_13 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_nbt_netlogon_command(ndr, NDR_SCALARS, &r->type));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->sbz));
-		NDR_CHECK(ndr_pull_nbt_server_type(ndr, NDR_SCALARS, &r->server_type));
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->domain_uuid));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->forest));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->dns_domain));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->pdc_dns_name));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->domain));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->pdc_name));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->user_name));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->server_site));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->client_site));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->dc_sock_addr_size));
-		{
-			struct ndr_pull *_ndr_dc_sock_addr;
-			NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_dc_sock_addr, 0, r->dc_sock_addr_size));
-			NDR_CHECK(ndr_pull_nbt_dc_sock_addr(_ndr_dc_sock_addr, NDR_SCALARS, &r->dc_sock_addr));
-			NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_dc_sock_addr, 0, r->dc_sock_addr_size));
-		}
-		NDR_CHECK(ndr_pull_nbt_netlogon_version(ndr, NDR_SCALARS, &r->nt_version));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lmnt_token));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_cldap_netlogon_13(struct ndr_print *ndr, const char *name, const struct nbt_cldap_netlogon_13 *r)
-{
-	ndr_print_struct(ndr, name, "nbt_cldap_netlogon_13");
-	ndr->depth++;
-	ndr_print_nbt_netlogon_command(ndr, "type", r->type);
-	ndr_print_uint16(ndr, "sbz", r->sbz);
-	ndr_print_nbt_server_type(ndr, "server_type", r->server_type);
-	ndr_print_GUID(ndr, "domain_uuid", &r->domain_uuid);
-	ndr_print_nbt_string(ndr, "forest", r->forest);
-	ndr_print_nbt_string(ndr, "dns_domain", r->dns_domain);
-	ndr_print_nbt_string(ndr, "pdc_dns_name", r->pdc_dns_name);
-	ndr_print_nbt_string(ndr, "domain", r->domain);
-	ndr_print_nbt_string(ndr, "pdc_name", r->pdc_name);
-	ndr_print_nbt_string(ndr, "user_name", r->user_name);
-	ndr_print_nbt_string(ndr, "server_site", r->server_site);
-	ndr_print_nbt_string(ndr, "client_site", r->client_site);
-	ndr_print_uint8(ndr, "dc_sock_addr_size", r->dc_sock_addr_size);
-	ndr_print_nbt_dc_sock_addr(ndr, "dc_sock_addr", &r->dc_sock_addr);
-	ndr_print_nbt_netlogon_version(ndr, "nt_version", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?13:r->nt_version);
-	ndr_print_uint16(ndr, "lmnt_token", r->lmnt_token);
-	ndr_print_uint16(ndr, "lm20_token", r->lm20_token);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_nbt_cldap_netlogon_15(struct ndr_push *ndr, int ndr_flags, const struct nbt_cldap_netlogon_15 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_nbt_netlogon_command(ndr, NDR_SCALARS, r->type));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->sbz));
-		NDR_CHECK(ndr_push_nbt_server_type(ndr, NDR_SCALARS, r->server_type));
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->domain_uuid));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->forest));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->dns_domain));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->pdc_dns_name));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->domain));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->pdc_name));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->user_name));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->server_site));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->client_site));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->next_closest_site));
-		NDR_CHECK(ndr_push_nbt_netlogon_version(ndr, NDR_SCALARS, 15));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lmnt_token));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_nbt_cldap_netlogon_15(struct ndr_pull *ndr, int ndr_flags, struct nbt_cldap_netlogon_15 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_nbt_netlogon_command(ndr, NDR_SCALARS, &r->type));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->sbz));
-		NDR_CHECK(ndr_pull_nbt_server_type(ndr, NDR_SCALARS, &r->server_type));
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->domain_uuid));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->forest));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->dns_domain));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->pdc_dns_name));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->domain));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->pdc_name));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->user_name));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->server_site));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->client_site));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->next_closest_site));
-		NDR_CHECK(ndr_pull_nbt_netlogon_version(ndr, NDR_SCALARS, &r->nt_version));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lmnt_token));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_cldap_netlogon_15(struct ndr_print *ndr, const char *name, const struct nbt_cldap_netlogon_15 *r)
-{
-	ndr_print_struct(ndr, name, "nbt_cldap_netlogon_15");
-	ndr->depth++;
-	ndr_print_nbt_netlogon_command(ndr, "type", r->type);
-	ndr_print_uint16(ndr, "sbz", r->sbz);
-	ndr_print_nbt_server_type(ndr, "server_type", r->server_type);
-	ndr_print_GUID(ndr, "domain_uuid", &r->domain_uuid);
-	ndr_print_nbt_string(ndr, "forest", r->forest);
-	ndr_print_nbt_string(ndr, "dns_domain", r->dns_domain);
-	ndr_print_nbt_string(ndr, "pdc_dns_name", r->pdc_dns_name);
-	ndr_print_nbt_string(ndr, "domain", r->domain);
-	ndr_print_nbt_string(ndr, "pdc_name", r->pdc_name);
-	ndr_print_nbt_string(ndr, "user_name", r->user_name);
-	ndr_print_nbt_string(ndr, "server_site", r->server_site);
-	ndr_print_nbt_string(ndr, "client_site", r->client_site);
-	ndr_print_nbt_string(ndr, "next_closest_site", r->next_closest_site);
-	ndr_print_nbt_netlogon_version(ndr, "nt_version", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?15:r->nt_version);
-	ndr_print_uint16(ndr, "lmnt_token", r->lmnt_token);
-	ndr_print_uint16(ndr, "lm20_token", r->lm20_token);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_nbt_cldap_netlogon_29(struct ndr_push *ndr, int ndr_flags, const struct nbt_cldap_netlogon_29 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_nbt_netlogon_command(ndr, NDR_SCALARS, r->type));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->sbz));
-		NDR_CHECK(ndr_push_nbt_server_type(ndr, NDR_SCALARS, r->server_type));
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->domain_uuid));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->forest));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->dns_domain));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->pdc_dns_name));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->domain));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->pdc_name));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->user_name));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->server_site));
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->client_site));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->dc_sock_addr_size));
-		{
-			struct ndr_push *_ndr_dc_sock_addr;
-			NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_dc_sock_addr, 0, r->dc_sock_addr_size));
-			NDR_CHECK(ndr_push_nbt_dc_sock_addr(_ndr_dc_sock_addr, NDR_SCALARS, &r->dc_sock_addr));
-			NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_dc_sock_addr, 0, r->dc_sock_addr_size));
-		}
-		NDR_CHECK(ndr_push_nbt_string(ndr, NDR_SCALARS, r->next_closest_site));
-		NDR_CHECK(ndr_push_nbt_netlogon_version(ndr, NDR_SCALARS, 29));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lmnt_token));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_nbt_cldap_netlogon_29(struct ndr_pull *ndr, int ndr_flags, struct nbt_cldap_netlogon_29 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_nbt_netlogon_command(ndr, NDR_SCALARS, &r->type));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->sbz));
-		NDR_CHECK(ndr_pull_nbt_server_type(ndr, NDR_SCALARS, &r->server_type));
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->domain_uuid));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->forest));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->dns_domain));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->pdc_dns_name));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->domain));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->pdc_name));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->user_name));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->server_site));
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->client_site));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->dc_sock_addr_size));
-		{
-			struct ndr_pull *_ndr_dc_sock_addr;
-			NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_dc_sock_addr, 0, r->dc_sock_addr_size));
-			NDR_CHECK(ndr_pull_nbt_dc_sock_addr(_ndr_dc_sock_addr, NDR_SCALARS, &r->dc_sock_addr));
-			NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_dc_sock_addr, 0, r->dc_sock_addr_size));
-		}
-		NDR_CHECK(ndr_pull_nbt_string(ndr, NDR_SCALARS, &r->next_closest_site));
-		NDR_CHECK(ndr_pull_nbt_netlogon_version(ndr, NDR_SCALARS, &r->nt_version));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lmnt_token));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_cldap_netlogon_29(struct ndr_print *ndr, const char *name, const struct nbt_cldap_netlogon_29 *r)
-{
-	ndr_print_struct(ndr, name, "nbt_cldap_netlogon_29");
-	ndr->depth++;
-	ndr_print_nbt_netlogon_command(ndr, "type", r->type);
-	ndr_print_uint16(ndr, "sbz", r->sbz);
-	ndr_print_nbt_server_type(ndr, "server_type", r->server_type);
-	ndr_print_GUID(ndr, "domain_uuid", &r->domain_uuid);
-	ndr_print_nbt_string(ndr, "forest", r->forest);
-	ndr_print_nbt_string(ndr, "dns_domain", r->dns_domain);
-	ndr_print_nbt_string(ndr, "pdc_dns_name", r->pdc_dns_name);
-	ndr_print_nbt_string(ndr, "domain", r->domain);
-	ndr_print_nbt_string(ndr, "pdc_name", r->pdc_name);
-	ndr_print_nbt_string(ndr, "user_name", r->user_name);
-	ndr_print_nbt_string(ndr, "server_site", r->server_site);
-	ndr_print_nbt_string(ndr, "client_site", r->client_site);
-	ndr_print_uint8(ndr, "dc_sock_addr_size", r->dc_sock_addr_size);
-	ndr_print_nbt_dc_sock_addr(ndr, "dc_sock_addr", &r->dc_sock_addr);
-	ndr_print_nbt_string(ndr, "next_closest_site", r->next_closest_site);
-	ndr_print_nbt_netlogon_version(ndr, "nt_version", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?29:r->nt_version);
-	ndr_print_uint16(ndr, "lmnt_token", r->lmnt_token);
-	ndr_print_uint16(ndr, "lm20_token", r->lm20_token);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_nbt_cldap_netlogon(struct ndr_push *ndr, int ndr_flags, const union nbt_cldap_netlogon *r)
-{
-	{
-		uint32_t _flags_save_UNION = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN);
-		if (ndr_flags & NDR_SCALARS) {
-			int level = ndr_push_get_switch_value(ndr, r);
-			switch (level) {
-				case 0: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_1(ndr, NDR_SCALARS, &r->logon1));
-				break; }
-
-				case 1: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_1(ndr, NDR_SCALARS, &r->logon1));
-				break; }
-
-				case 2: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_3(ndr, NDR_SCALARS, &r->logon3));
-				break; }
-
-				case 3: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_3(ndr, NDR_SCALARS, &r->logon3));
-				break; }
-
-				case 4: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_5(ndr, NDR_SCALARS, &r->logon5));
-				break; }
-
-				case 5: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_5(ndr, NDR_SCALARS, &r->logon5));
-				break; }
-
-				case 6: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_5(ndr, NDR_SCALARS, &r->logon5));
-				break; }
-
-				case 7: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_5(ndr, NDR_SCALARS, &r->logon5));
-				break; }
-
-				case 8: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_13(ndr, NDR_SCALARS, &r->logon13));
-				break; }
-
-				case 9: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_13(ndr, NDR_SCALARS, &r->logon13));
-				break; }
-
-				case 10: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_13(ndr, NDR_SCALARS, &r->logon13));
-				break; }
-
-				case 11: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_13(ndr, NDR_SCALARS, &r->logon13));
-				break; }
-
-				case 12: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_13(ndr, NDR_SCALARS, &r->logon13));
-				break; }
-
-				case 13: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_13(ndr, NDR_SCALARS, &r->logon13));
-				break; }
-
-				case 14: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_13(ndr, NDR_SCALARS, &r->logon13));
-				break; }
-
-				case 15: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_13(ndr, NDR_SCALARS, &r->logon13));
-				break; }
-
-				case 16: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_1(ndr, NDR_SCALARS, &r->logon1));
-				break; }
-
-				case 17: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_1(ndr, NDR_SCALARS, &r->logon1));
-				break; }
-
-				case 18: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_3(ndr, NDR_SCALARS, &r->logon3));
-				break; }
-
-				case 19: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_3(ndr, NDR_SCALARS, &r->logon3));
-				break; }
-
-				case 20: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_15(ndr, NDR_SCALARS, &r->logon15));
-				break; }
-
-				case 21: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_15(ndr, NDR_SCALARS, &r->logon15));
-				break; }
-
-				case 22: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_15(ndr, NDR_SCALARS, &r->logon15));
-				break; }
-
-				case 23: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_15(ndr, NDR_SCALARS, &r->logon15));
-				break; }
-
-				case 24: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_15(ndr, NDR_SCALARS, &r->logon15));
-				break; }
-
-				case 25: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_15(ndr, NDR_SCALARS, &r->logon15));
-				break; }
-
-				case 26: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_15(ndr, NDR_SCALARS, &r->logon15));
-				break; }
-
-				case 27: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_15(ndr, NDR_SCALARS, &r->logon15));
-				break; }
-
-				case 28: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_15(ndr, NDR_SCALARS, &r->logon15));
-				break; }
-
-				case 29: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_29(ndr, NDR_SCALARS, &r->logon29));
-				break; }
-
-				case 30: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_29(ndr, NDR_SCALARS, &r->logon29));
-				break; }
-
-				case 31: {
-					NDR_CHECK(ndr_push_nbt_cldap_netlogon_29(ndr, NDR_SCALARS, &r->logon29));
-				break; }
-
-				default:
-					return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-			}
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-			int level = ndr_push_get_switch_value(ndr, r);
-			switch (level) {
-				case 0:
-				break;
-
-				case 1:
-				break;
-
-				case 2:
-				break;
-
-				case 3:
-				break;
-
-				case 4:
-				break;
-
-				case 5:
-				break;
-
-				case 6:
-				break;
-
-				case 7:
-				break;
-
-				case 8:
-				break;
-
-				case 9:
-				break;
-
-				case 10:
-				break;
-
-				case 11:
-				break;
-
-				case 12:
-				break;
-
-				case 13:
-				break;
-
-				case 14:
-				break;
-
-				case 15:
-				break;
-
-				case 16:
-				break;
-
-				case 17:
-				break;
-
-				case 18:
-				break;
-
-				case 19:
-				break;
-
-				case 20:
-				break;
-
-				case 21:
-				break;
-
-				case 22:
-				break;
-
-				case 23:
-				break;
-
-				case 24:
-				break;
-
-				case 25:
-				break;
-
-				case 26:
-				break;
-
-				case 27:
-				break;
-
-				case 28:
-				break;
-
-				case 29:
-				break;
-
-				case 30:
-				break;
-
-				case 31:
-				break;
-
-				default:
-					return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-			}
-		}
-		ndr->flags = _flags_save_UNION;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_nbt_cldap_netlogon(struct ndr_pull *ndr, int ndr_flags, union nbt_cldap_netlogon *r)
-{
-	int level;
-	{
-		uint32_t _flags_save_UNION = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN);
-		level = ndr_pull_get_switch_value(ndr, r);
-		if (ndr_flags & NDR_SCALARS) {
-			switch (level) {
-				case 0: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_1(ndr, NDR_SCALARS, &r->logon1));
-				break; }
-
-				case 1: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_1(ndr, NDR_SCALARS, &r->logon1));
-				break; }
-
-				case 2: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_3(ndr, NDR_SCALARS, &r->logon3));
-				break; }
-
-				case 3: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_3(ndr, NDR_SCALARS, &r->logon3));
-				break; }
-
-				case 4: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_5(ndr, NDR_SCALARS, &r->logon5));
-				break; }
-
-				case 5: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_5(ndr, NDR_SCALARS, &r->logon5));
-				break; }
-
-				case 6: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_5(ndr, NDR_SCALARS, &r->logon5));
-				break; }
-
-				case 7: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_5(ndr, NDR_SCALARS, &r->logon5));
-				break; }
-
-				case 8: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_13(ndr, NDR_SCALARS, &r->logon13));
-				break; }
-
-				case 9: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_13(ndr, NDR_SCALARS, &r->logon13));
-				break; }
-
-				case 10: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_13(ndr, NDR_SCALARS, &r->logon13));
-				break; }
-
-				case 11: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_13(ndr, NDR_SCALARS, &r->logon13));
-				break; }
-
-				case 12: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_13(ndr, NDR_SCALARS, &r->logon13));
-				break; }
-
-				case 13: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_13(ndr, NDR_SCALARS, &r->logon13));
-				break; }
-
-				case 14: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_13(ndr, NDR_SCALARS, &r->logon13));
-				break; }
-
-				case 15: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_13(ndr, NDR_SCALARS, &r->logon13));
-				break; }
-
-				case 16: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_1(ndr, NDR_SCALARS, &r->logon1));
-				break; }
-
-				case 17: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_1(ndr, NDR_SCALARS, &r->logon1));
-				break; }
-
-				case 18: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_3(ndr, NDR_SCALARS, &r->logon3));
-				break; }
-
-				case 19: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_3(ndr, NDR_SCALARS, &r->logon3));
-				break; }
-
-				case 20: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_15(ndr, NDR_SCALARS, &r->logon15));
-				break; }
-
-				case 21: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_15(ndr, NDR_SCALARS, &r->logon15));
-				break; }
-
-				case 22: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_15(ndr, NDR_SCALARS, &r->logon15));
-				break; }
-
-				case 23: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_15(ndr, NDR_SCALARS, &r->logon15));
-				break; }
-
-				case 24: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_15(ndr, NDR_SCALARS, &r->logon15));
-				break; }
-
-				case 25: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_15(ndr, NDR_SCALARS, &r->logon15));
-				break; }
-
-				case 26: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_15(ndr, NDR_SCALARS, &r->logon15));
-				break; }
-
-				case 27: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_15(ndr, NDR_SCALARS, &r->logon15));
-				break; }
-
-				case 28: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_15(ndr, NDR_SCALARS, &r->logon15));
-				break; }
-
-				case 29: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_29(ndr, NDR_SCALARS, &r->logon29));
-				break; }
-
-				case 30: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_29(ndr, NDR_SCALARS, &r->logon29));
-				break; }
-
-				case 31: {
-					NDR_CHECK(ndr_pull_nbt_cldap_netlogon_29(ndr, NDR_SCALARS, &r->logon29));
-				break; }
-
-				default:
-					return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-			}
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-			switch (level) {
-				case 0:
-				break;
-
-				case 1:
-				break;
-
-				case 2:
-				break;
-
-				case 3:
-				break;
-
-				case 4:
-				break;
-
-				case 5:
-				break;
-
-				case 6:
-				break;
-
-				case 7:
-				break;
-
-				case 8:
-				break;
-
-				case 9:
-				break;
-
-				case 10:
-				break;
-
-				case 11:
-				break;
-
-				case 12:
-				break;
-
-				case 13:
-				break;
-
-				case 14:
-				break;
-
-				case 15:
-				break;
-
-				case 16:
-				break;
-
-				case 17:
-				break;
-
-				case 18:
-				break;
-
-				case 19:
-				break;
-
-				case 20:
-				break;
-
-				case 21:
-				break;
-
-				case 22:
-				break;
-
-				case 23:
-				break;
-
-				case 24:
-				break;
-
-				case 25:
-				break;
-
-				case 26:
-				break;
-
-				case 27:
-				break;
-
-				case 28:
-				break;
-
-				case 29:
-				break;
-
-				case 30:
-				break;
-
-				case 31:
-				break;
-
-				default:
-					return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-			}
-		}
-		ndr->flags = _flags_save_UNION;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_cldap_netlogon(struct ndr_print *ndr, const char *name, const union nbt_cldap_netlogon *r)
-{
-	int level;
-	{
-		uint32_t _flags_save_UNION = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN);
-		level = ndr_print_get_switch_value(ndr, r);
-		ndr_print_union(ndr, name, level, "nbt_cldap_netlogon");
-		switch (level) {
-			case 0:
-				ndr_print_nbt_cldap_netlogon_1(ndr, "logon1", &r->logon1);
-			break;
-
-			case 1:
-				ndr_print_nbt_cldap_netlogon_1(ndr, "logon1", &r->logon1);
-			break;
-
-			case 2:
-				ndr_print_nbt_cldap_netlogon_3(ndr, "logon3", &r->logon3);
-			break;
-
-			case 3:
-				ndr_print_nbt_cldap_netlogon_3(ndr, "logon3", &r->logon3);
-			break;
-
-			case 4:
-				ndr_print_nbt_cldap_netlogon_5(ndr, "logon5", &r->logon5);
-			break;
-
-			case 5:
-				ndr_print_nbt_cldap_netlogon_5(ndr, "logon5", &r->logon5);
-			break;
-
-			case 6:
-				ndr_print_nbt_cldap_netlogon_5(ndr, "logon5", &r->logon5);
-			break;
-
-			case 7:
-				ndr_print_nbt_cldap_netlogon_5(ndr, "logon5", &r->logon5);
-			break;
-
-			case 8:
-				ndr_print_nbt_cldap_netlogon_13(ndr, "logon13", &r->logon13);
-			break;
-
-			case 9:
-				ndr_print_nbt_cldap_netlogon_13(ndr, "logon13", &r->logon13);
-			break;
-
-			case 10:
-				ndr_print_nbt_cldap_netlogon_13(ndr, "logon13", &r->logon13);
-			break;
-
-			case 11:
-				ndr_print_nbt_cldap_netlogon_13(ndr, "logon13", &r->logon13);
-			break;
-
-			case 12:
-				ndr_print_nbt_cldap_netlogon_13(ndr, "logon13", &r->logon13);
-			break;
-
-			case 13:
-				ndr_print_nbt_cldap_netlogon_13(ndr, "logon13", &r->logon13);
-			break;
-
-			case 14:
-				ndr_print_nbt_cldap_netlogon_13(ndr, "logon13", &r->logon13);
-			break;
-
-			case 15:
-				ndr_print_nbt_cldap_netlogon_13(ndr, "logon13", &r->logon13);
-			break;
-
-			case 16:
-				ndr_print_nbt_cldap_netlogon_1(ndr, "logon1", &r->logon1);
-			break;
-
-			case 17:
-				ndr_print_nbt_cldap_netlogon_1(ndr, "logon1", &r->logon1);
-			break;
-
-			case 18:
-				ndr_print_nbt_cldap_netlogon_3(ndr, "logon3", &r->logon3);
-			break;
-
-			case 19:
-				ndr_print_nbt_cldap_netlogon_3(ndr, "logon3", &r->logon3);
-			break;
-
-			case 20:
-				ndr_print_nbt_cldap_netlogon_15(ndr, "logon15", &r->logon15);
-			break;
-
-			case 21:
-				ndr_print_nbt_cldap_netlogon_15(ndr, "logon15", &r->logon15);
-			break;
-
-			case 22:
-				ndr_print_nbt_cldap_netlogon_15(ndr, "logon15", &r->logon15);
-			break;
-
-			case 23:
-				ndr_print_nbt_cldap_netlogon_15(ndr, "logon15", &r->logon15);
-			break;
-
-			case 24:
-				ndr_print_nbt_cldap_netlogon_15(ndr, "logon15", &r->logon15);
-			break;
-
-			case 25:
-				ndr_print_nbt_cldap_netlogon_15(ndr, "logon15", &r->logon15);
-			break;
-
-			case 26:
-				ndr_print_nbt_cldap_netlogon_15(ndr, "logon15", &r->logon15);
-			break;
-
-			case 27:
-				ndr_print_nbt_cldap_netlogon_15(ndr, "logon15", &r->logon15);
-			break;
-
-			case 28:
-				ndr_print_nbt_cldap_netlogon_15(ndr, "logon15", &r->logon15);
-			break;
-
-			case 29:
-				ndr_print_nbt_cldap_netlogon_29(ndr, "logon29", &r->logon29);
-			break;
-
-			case 30:
-				ndr_print_nbt_cldap_netlogon_29(ndr, "logon29", &r->logon29);
-			break;
-
-			case 31:
-				ndr_print_nbt_cldap_netlogon_29(ndr, "logon29", &r->logon29);
-			break;
-
-			default:
-				ndr_print_bad_level(ndr, name, level);
-		}
-		ndr->flags = _flags_save_UNION;
-	}
-}
-
-static enum ndr_err_code ndr_push_nbt_ntlogon_command(struct ndr_push *ndr, int ndr_flags, enum nbt_ntlogon_command r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_ntlogon_command(struct ndr_pull *ndr, int ndr_flags, enum nbt_ntlogon_command *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_ntlogon_command(struct ndr_print *ndr, const char *name, enum nbt_ntlogon_command r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case NTLOGON_SAM_LOGON: val = "NTLOGON_SAM_LOGON"; break;
-		case NTLOGON_SAM_LOGON_REPLY: val = "NTLOGON_SAM_LOGON_REPLY"; break;
-		case NTLOGON_SAM_LOGON_REPLY15: val = "NTLOGON_SAM_LOGON_REPLY15"; break;
-		case NTLOGON_RESPONSE_FROM_PDC2: val = "NTLOGON_RESPONSE_FROM_PDC2"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_nbt_ntlogon_sam_logon(struct ndr_push *ndr, int ndr_flags, const struct nbt_ntlogon_sam_logon *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->request_count));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->computer_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->user_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->mailslot_name));
-			ndr->flags = _flags_save_string;
-		}
-		NDR_CHECK(ndr_push_samr_AcctFlags(ndr, NDR_SCALARS, r->acct_control));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_size_dom_sid0(&r->sid, ndr->flags)));
-		{
-			struct ndr_push *_ndr_sid;
-			NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_sid, 0, ndr_size_dom_sid0(&r->sid, ndr->flags)));
-			NDR_CHECK(ndr_push_dom_sid0(_ndr_sid, NDR_SCALARS|NDR_BUFFERS, &r->sid));
-			NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_sid, 0, ndr_size_dom_sid0(&r->sid, ndr->flags)));
-		}
-		NDR_CHECK(ndr_push_nbt_netlogon_version(ndr, NDR_SCALARS, r->nt_version));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lmnt_token));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_ntlogon_sam_logon(struct ndr_pull *ndr, int ndr_flags, struct nbt_ntlogon_sam_logon *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->request_count));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->computer_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->user_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->mailslot_name));
-			ndr->flags = _flags_save_string;
-		}
-		NDR_CHECK(ndr_pull_samr_AcctFlags(ndr, NDR_SCALARS, &r->acct_control));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sid_size));
-		{
-			struct ndr_pull *_ndr_sid;
-			NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_sid, 0, r->sid_size));
-			NDR_CHECK(ndr_pull_dom_sid0(_ndr_sid, NDR_SCALARS|NDR_BUFFERS, &r->sid));
-			NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_sid, 0, r->sid_size));
-		}
-		NDR_CHECK(ndr_pull_nbt_netlogon_version(ndr, NDR_SCALARS, &r->nt_version));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lmnt_token));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_ntlogon_sam_logon(struct ndr_print *ndr, const char *name, const struct nbt_ntlogon_sam_logon *r)
-{
-	ndr_print_struct(ndr, name, "nbt_ntlogon_sam_logon");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "request_count", r->request_count);
-	ndr_print_string(ndr, "computer_name", r->computer_name);
-	ndr_print_string(ndr, "user_name", r->user_name);
-	ndr_print_string(ndr, "mailslot_name", r->mailslot_name);
-	ndr_print_samr_AcctFlags(ndr, "acct_control", r->acct_control);
-	ndr_print_uint32(ndr, "sid_size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_dom_sid0(&r->sid, ndr->flags):r->sid_size);
-	ndr_print_dom_sid0(ndr, "sid", &r->sid);
-	ndr_print_nbt_netlogon_version(ndr, "nt_version", r->nt_version);
-	ndr_print_uint16(ndr, "lmnt_token", r->lmnt_token);
-	ndr_print_uint16(ndr, "lm20_token", r->lm20_token);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_ntlogon_sam_logon_reply(struct ndr_push *ndr, int ndr_flags, const struct nbt_ntlogon_sam_logon_reply *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->server));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->user_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->domain));
-			ndr->flags = _flags_save_string;
-		}
-		NDR_CHECK(ndr_push_nbt_netlogon_version(ndr, NDR_SCALARS, r->nt_version));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lmnt_token));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_ntlogon_sam_logon_reply(struct ndr_pull *ndr, int ndr_flags, struct nbt_ntlogon_sam_logon_reply *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->server));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->user_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->domain));
-			ndr->flags = _flags_save_string;
-		}
-		NDR_CHECK(ndr_pull_nbt_netlogon_version(ndr, NDR_SCALARS, &r->nt_version));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lmnt_token));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lm20_token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_ntlogon_sam_logon_reply(struct ndr_print *ndr, const char *name, const struct nbt_ntlogon_sam_logon_reply *r)
-{
-	ndr_print_struct(ndr, name, "nbt_ntlogon_sam_logon_reply");
-	ndr->depth++;
-	ndr_print_string(ndr, "server", r->server);
-	ndr_print_string(ndr, "user_name", r->user_name);
-	ndr_print_string(ndr, "domain", r->domain);
-	ndr_print_nbt_netlogon_version(ndr, "nt_version", r->nt_version);
-	ndr_print_uint16(ndr, "lmnt_token", r->lmnt_token);
-	ndr_print_uint16(ndr, "lm20_token", r->lm20_token);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_ntlogon_request(struct ndr_push *ndr, int ndr_flags, const union nbt_ntlogon_request *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case NTLOGON_SAM_LOGON: {
-				NDR_CHECK(ndr_push_nbt_ntlogon_sam_logon(ndr, NDR_SCALARS, &r->logon));
-			break; }
-
-			case NTLOGON_SAM_LOGON_REPLY: {
-				NDR_CHECK(ndr_push_nbt_ntlogon_sam_logon_reply(ndr, NDR_SCALARS, &r->reply));
-			break; }
-
-			case NTLOGON_SAM_LOGON_REPLY15: {
-				NDR_CHECK(ndr_push_nbt_ntlogon_sam_logon_reply(ndr, NDR_SCALARS, &r->reply));
-			break; }
-
-			case NTLOGON_RESPONSE_FROM_PDC2: {
-				NDR_CHECK(ndr_push_nbt_netlogon_response_from_pdc2(ndr, NDR_SCALARS, &r->reply2));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case NTLOGON_SAM_LOGON:
-				NDR_CHECK(ndr_push_nbt_ntlogon_sam_logon(ndr, NDR_BUFFERS, &r->logon));
-			break;
-
-			case NTLOGON_SAM_LOGON_REPLY:
-			break;
-
-			case NTLOGON_SAM_LOGON_REPLY15:
-			break;
-
-			case NTLOGON_RESPONSE_FROM_PDC2:
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_ntlogon_request(struct ndr_pull *ndr, int ndr_flags, union nbt_ntlogon_request *r)
-{
-	int level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		switch (level) {
-			case NTLOGON_SAM_LOGON: {
-				NDR_CHECK(ndr_pull_nbt_ntlogon_sam_logon(ndr, NDR_SCALARS, &r->logon));
-			break; }
-
-			case NTLOGON_SAM_LOGON_REPLY: {
-				NDR_CHECK(ndr_pull_nbt_ntlogon_sam_logon_reply(ndr, NDR_SCALARS, &r->reply));
-			break; }
-
-			case NTLOGON_SAM_LOGON_REPLY15: {
-				NDR_CHECK(ndr_pull_nbt_ntlogon_sam_logon_reply(ndr, NDR_SCALARS, &r->reply));
-			break; }
-
-			case NTLOGON_RESPONSE_FROM_PDC2: {
-				NDR_CHECK(ndr_pull_nbt_netlogon_response_from_pdc2(ndr, NDR_SCALARS, &r->reply2));
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case NTLOGON_SAM_LOGON:
-				NDR_CHECK(ndr_pull_nbt_ntlogon_sam_logon(ndr, NDR_BUFFERS, &r->logon));
-			break;
-
-			case NTLOGON_SAM_LOGON_REPLY:
-			break;
-
-			case NTLOGON_SAM_LOGON_REPLY15:
-			break;
-
-			case NTLOGON_RESPONSE_FROM_PDC2:
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_ntlogon_request(struct ndr_print *ndr, const char *name, const union nbt_ntlogon_request *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "nbt_ntlogon_request");
-	switch (level) {
-		case NTLOGON_SAM_LOGON:
-			ndr_print_nbt_ntlogon_sam_logon(ndr, "logon", &r->logon);
-		break;
-
-		case NTLOGON_SAM_LOGON_REPLY:
-			ndr_print_nbt_ntlogon_sam_logon_reply(ndr, "reply", &r->reply);
-		break;
-
-		case NTLOGON_SAM_LOGON_REPLY15:
-			ndr_print_nbt_ntlogon_sam_logon_reply(ndr, "reply", &r->reply);
-		break;
-
-		case NTLOGON_RESPONSE_FROM_PDC2:
-			ndr_print_nbt_netlogon_response_from_pdc2(ndr, "reply2", &r->reply2);
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_nbt_ntlogon_packet(struct ndr_push *ndr, int ndr_flags, const struct nbt_ntlogon_packet *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 4));
-			NDR_CHECK(ndr_push_nbt_ntlogon_command(ndr, NDR_SCALARS, r->command));
-			NDR_CHECK(ndr_push_set_switch_value(ndr, &r->req, r->command));
-			NDR_CHECK(ndr_push_nbt_ntlogon_request(ndr, NDR_SCALARS, &r->req));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-			NDR_CHECK(ndr_push_nbt_ntlogon_request(ndr, NDR_BUFFERS, &r->req));
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_nbt_ntlogon_packet(struct ndr_pull *ndr, int ndr_flags, struct nbt_ntlogon_packet *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 4));
-			NDR_CHECK(ndr_pull_nbt_ntlogon_command(ndr, NDR_SCALARS, &r->command));
-			NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->req, r->command));
-			NDR_CHECK(ndr_pull_nbt_ntlogon_request(ndr, NDR_SCALARS, &r->req));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-			NDR_CHECK(ndr_pull_nbt_ntlogon_request(ndr, NDR_BUFFERS, &r->req));
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_ntlogon_packet(struct ndr_print *ndr, const char *name, const struct nbt_ntlogon_packet *r)
-{
-	ndr_print_struct(ndr, name, "nbt_ntlogon_packet");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN);
-		ndr->depth++;
-		ndr_print_nbt_ntlogon_command(ndr, "command", r->command);
-		ndr_print_set_switch_value(ndr, &r->req, r->command);
-		ndr_print_nbt_ntlogon_request(ndr, "req", &r->req);
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-
-static enum ndr_err_code ndr_push_nbt_browse_opcode(struct ndr_push *ndr, int ndr_flags, enum nbt_browse_opcode r)
-{
-	NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_browse_opcode(struct ndr_pull *ndr, int ndr_flags, enum nbt_browse_opcode *r)
-{
-	uint8_t v;
-	NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_browse_opcode(struct ndr_print *ndr, const char *name, enum nbt_browse_opcode r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case HostAnnouncement: val = "HostAnnouncement"; break;
-		case AnnouncementRequest: val = "AnnouncementRequest"; break;
-		case Election: val = "Election"; break;
-		case GetBackupListReq: val = "GetBackupListReq"; break;
-		case GetBackupListResp: val = "GetBackupListResp"; break;
-		case BecomeBackup: val = "BecomeBackup"; break;
-		case DomainAnnouncement: val = "DomainAnnouncement"; break;
-		case MasterAnnouncement: val = "MasterAnnouncement"; break;
-		case ResetBrowserState: val = "ResetBrowserState"; break;
-		case LocalMasterAnnouncement: val = "LocalMasterAnnouncement"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_nbt_browse_host_announcement(struct ndr_push *ndr, int ndr_flags, const struct nbt_browse_host_announcement *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->UpdateCount));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->Periodicity));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->ServerName, 16, sizeof(uint8_t), CH_DOS));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->OSMajor));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->OSMinor));
-		NDR_CHECK(ndr_push_svcctl_ServerType(ndr, NDR_SCALARS, r->ServerType));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->BroMajorVer));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->BroMinorVer));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->Signature));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->Comment));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_browse_host_announcement(struct ndr_pull *ndr, int ndr_flags, struct nbt_browse_host_announcement *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->UpdateCount));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->Periodicity));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->ServerName, 16, sizeof(uint8_t), CH_DOS));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->OSMajor));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->OSMinor));
-		NDR_CHECK(ndr_pull_svcctl_ServerType(ndr, NDR_SCALARS, &r->ServerType));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->BroMajorVer));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->BroMinorVer));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->Signature));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->Comment));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_browse_host_announcement(struct ndr_print *ndr, const char *name, const struct nbt_browse_host_announcement *r)
-{
-	ndr_print_struct(ndr, name, "nbt_browse_host_announcement");
-	ndr->depth++;
-	ndr_print_uint8(ndr, "UpdateCount", r->UpdateCount);
-	ndr_print_uint32(ndr, "Periodicity", r->Periodicity);
-	ndr_print_string(ndr, "ServerName", r->ServerName);
-	ndr_print_uint8(ndr, "OSMajor", r->OSMajor);
-	ndr_print_uint8(ndr, "OSMinor", r->OSMinor);
-	ndr_print_svcctl_ServerType(ndr, "ServerType", r->ServerType);
-	ndr_print_uint8(ndr, "BroMajorVer", r->BroMajorVer);
-	ndr_print_uint8(ndr, "BroMinorVer", r->BroMinorVer);
-	ndr_print_uint16(ndr, "Signature", r->Signature);
-	ndr_print_string(ndr, "Comment", r->Comment);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_browse_announcement_request(struct ndr_push *ndr, int ndr_flags, const struct nbt_browse_announcement_request *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->Unused));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->ResponseName));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_browse_announcement_request(struct ndr_pull *ndr, int ndr_flags, struct nbt_browse_announcement_request *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->Unused));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->ResponseName));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_browse_announcement_request(struct ndr_print *ndr, const char *name, const struct nbt_browse_announcement_request *r)
-{
-	ndr_print_struct(ndr, name, "nbt_browse_announcement_request");
-	ndr->depth++;
-	ndr_print_uint8(ndr, "Unused", r->Unused);
-	ndr_print_string(ndr, "ResponseName", r->ResponseName);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_browse_election_request(struct ndr_push *ndr, int ndr_flags, const struct nbt_browse_election_request *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->Version));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->Criteria));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->UpTime));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->Reserved));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->ServerName));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_browse_election_request(struct ndr_pull *ndr, int ndr_flags, struct nbt_browse_election_request *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->Version));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->Criteria));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->UpTime));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->Reserved));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->ServerName));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_browse_election_request(struct ndr_print *ndr, const char *name, const struct nbt_browse_election_request *r)
-{
-	ndr_print_struct(ndr, name, "nbt_browse_election_request");
-	ndr->depth++;
-	ndr_print_uint8(ndr, "Version", r->Version);
-	ndr_print_uint32(ndr, "Criteria", r->Criteria);
-	ndr_print_uint32(ndr, "UpTime", r->UpTime);
-	ndr_print_uint32(ndr, "Reserved", r->Reserved);
-	ndr_print_string(ndr, "ServerName", r->ServerName);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_browse_backup_list_request(struct ndr_push *ndr, int ndr_flags, const struct nbt_browse_backup_list_request *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->ReqCount));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->Token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_browse_backup_list_request(struct ndr_pull *ndr, int ndr_flags, struct nbt_browse_backup_list_request *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->ReqCount));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->Token));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_browse_backup_list_request(struct ndr_print *ndr, const char *name, const struct nbt_browse_backup_list_request *r)
-{
-	ndr_print_struct(ndr, name, "nbt_browse_backup_list_request");
-	ndr->depth++;
-	ndr_print_uint8(ndr, "ReqCount", r->ReqCount);
-	ndr_print_uint32(ndr, "Token", r->Token);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_browse_backup_list_response(struct ndr_push *ndr, int ndr_flags, const struct nbt_browse_backup_list_response *r)
-{
-	uint32_t cntr_BackupServerList_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->BackupCount));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->Token));
-		for (cntr_BackupServerList_0 = 0; cntr_BackupServerList_0 < r->BackupCount; cntr_BackupServerList_0++) {
-			NDR_CHECK(ndr_push_nbt_name(ndr, NDR_SCALARS, &r->BackupServerList[cntr_BackupServerList_0]));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_browse_backup_list_response(struct ndr_pull *ndr, int ndr_flags, struct nbt_browse_backup_list_response *r)
-{
-	uint32_t cntr_BackupServerList_0;
-	TALLOC_CTX *_mem_save_BackupServerList_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->BackupCount));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->Token));
-		NDR_PULL_ALLOC_N(ndr, r->BackupServerList, r->BackupCount);
-		_mem_save_BackupServerList_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->BackupServerList, 0);
-		for (cntr_BackupServerList_0 = 0; cntr_BackupServerList_0 < r->BackupCount; cntr_BackupServerList_0++) {
-			NDR_CHECK(ndr_pull_nbt_name(ndr, NDR_SCALARS, &r->BackupServerList[cntr_BackupServerList_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_BackupServerList_0, 0);
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_browse_backup_list_response(struct ndr_print *ndr, const char *name, const struct nbt_browse_backup_list_response *r)
-{
-	uint32_t cntr_BackupServerList_0;
-	ndr_print_struct(ndr, name, "nbt_browse_backup_list_response");
-	ndr->depth++;
-	ndr_print_uint8(ndr, "BackupCount", r->BackupCount);
-	ndr_print_uint32(ndr, "Token", r->Token);
-	ndr->print(ndr, "%s: ARRAY(%d)", "BackupServerList", r->BackupCount);
-	ndr->depth++;
-	for (cntr_BackupServerList_0=0;cntr_BackupServerList_0<r->BackupCount;cntr_BackupServerList_0++) {
-		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_BackupServerList_0) != -1) {
-			ndr_print_nbt_name(ndr, "BackupServerList", &r->BackupServerList[cntr_BackupServerList_0]);
-			free(idx_0);
-		}
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_browse_become_backup(struct ndr_push *ndr, int ndr_flags, const struct nbt_browse_become_backup *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->BrowserName));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_browse_become_backup(struct ndr_pull *ndr, int ndr_flags, struct nbt_browse_become_backup *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->BrowserName));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_browse_become_backup(struct ndr_print *ndr, const char *name, const struct nbt_browse_become_backup *r)
-{
-	ndr_print_struct(ndr, name, "nbt_browse_become_backup");
-	ndr->depth++;
-	ndr_print_string(ndr, "BrowserName", r->BrowserName);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_browse_domain_announcement(struct ndr_push *ndr, int ndr_flags, const struct nbt_browse_domain_announcement *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->UpdateCount));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->Periodicity));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->ServerName, 16, sizeof(uint8_t), CH_DOS));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->OSMajor));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->OSMinor));
-		NDR_CHECK(ndr_push_svcctl_ServerType(ndr, NDR_SCALARS, r->ServerType));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->MysteriousField));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->Comment));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_browse_domain_announcement(struct ndr_pull *ndr, int ndr_flags, struct nbt_browse_domain_announcement *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->UpdateCount));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->Periodicity));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->ServerName, 16, sizeof(uint8_t), CH_DOS));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->OSMajor));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->OSMinor));
-		NDR_CHECK(ndr_pull_svcctl_ServerType(ndr, NDR_SCALARS, &r->ServerType));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->MysteriousField));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->Comment));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_browse_domain_announcement(struct ndr_print *ndr, const char *name, const struct nbt_browse_domain_announcement *r)
-{
-	ndr_print_struct(ndr, name, "nbt_browse_domain_announcement");
-	ndr->depth++;
-	ndr_print_uint8(ndr, "UpdateCount", r->UpdateCount);
-	ndr_print_uint32(ndr, "Periodicity", r->Periodicity);
-	ndr_print_string(ndr, "ServerName", r->ServerName);
-	ndr_print_uint8(ndr, "OSMajor", r->OSMajor);
-	ndr_print_uint8(ndr, "OSMinor", r->OSMinor);
-	ndr_print_svcctl_ServerType(ndr, "ServerType", r->ServerType);
-	ndr_print_uint32(ndr, "MysteriousField", r->MysteriousField);
-	ndr_print_string(ndr, "Comment", r->Comment);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_browse_master_announcement(struct ndr_push *ndr, int ndr_flags, const struct nbt_browse_master_announcement *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->ServerName));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_browse_master_announcement(struct ndr_pull *ndr, int ndr_flags, struct nbt_browse_master_announcement *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->ServerName));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_browse_master_announcement(struct ndr_print *ndr, const char *name, const struct nbt_browse_master_announcement *r)
-{
-	ndr_print_struct(ndr, name, "nbt_browse_master_announcement");
-	ndr->depth++;
-	ndr_print_string(ndr, "ServerName", r->ServerName);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_browse_reset_state(struct ndr_push *ndr, int ndr_flags, const struct nbt_browse_reset_state *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 1));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->Command));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_browse_reset_state(struct ndr_pull *ndr, int ndr_flags, struct nbt_browse_reset_state *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 1));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->Command));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_browse_reset_state(struct ndr_print *ndr, const char *name, const struct nbt_browse_reset_state *r)
-{
-	ndr_print_struct(ndr, name, "nbt_browse_reset_state");
-	ndr->depth++;
-	ndr_print_uint8(ndr, "Command", r->Command);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_browse_local_master_announcement(struct ndr_push *ndr, int ndr_flags, const struct nbt_browse_local_master_announcement *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->UpdateCount));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->Periodicity));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->ServerName, 16, sizeof(uint8_t), CH_DOS));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->OSMajor));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->OSMinor));
-		NDR_CHECK(ndr_push_svcctl_ServerType(ndr, NDR_SCALARS, r->ServerType));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->BroMajorVer));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->BroMinorVer));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->Signature));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->Comment));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_browse_local_master_announcement(struct ndr_pull *ndr, int ndr_flags, struct nbt_browse_local_master_announcement *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->UpdateCount));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->Periodicity));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->ServerName, 16, sizeof(uint8_t), CH_DOS));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->OSMajor));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->OSMinor));
-		NDR_CHECK(ndr_pull_svcctl_ServerType(ndr, NDR_SCALARS, &r->ServerType));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->BroMajorVer));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->BroMinorVer));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->Signature));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->Comment));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_browse_local_master_announcement(struct ndr_print *ndr, const char *name, const struct nbt_browse_local_master_announcement *r)
-{
-	ndr_print_struct(ndr, name, "nbt_browse_local_master_announcement");
-	ndr->depth++;
-	ndr_print_uint8(ndr, "UpdateCount", r->UpdateCount);
-	ndr_print_uint32(ndr, "Periodicity", r->Periodicity);
-	ndr_print_string(ndr, "ServerName", r->ServerName);
-	ndr_print_uint8(ndr, "OSMajor", r->OSMajor);
-	ndr_print_uint8(ndr, "OSMinor", r->OSMinor);
-	ndr_print_svcctl_ServerType(ndr, "ServerType", r->ServerType);
-	ndr_print_uint8(ndr, "BroMajorVer", r->BroMajorVer);
-	ndr_print_uint8(ndr, "BroMinorVer", r->BroMinorVer);
-	ndr_print_uint16(ndr, "Signature", r->Signature);
-	ndr_print_string(ndr, "Comment", r->Comment);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_nbt_browse_payload(struct ndr_push *ndr, int ndr_flags, const union nbt_browse_payload *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case HostAnnouncement: {
-				NDR_CHECK(ndr_push_nbt_browse_host_announcement(ndr, NDR_SCALARS, &r->host_annoucement));
-			break; }
-
-			case AnnouncementRequest: {
-				NDR_CHECK(ndr_push_nbt_browse_announcement_request(ndr, NDR_SCALARS, &r->announcement_request));
-			break; }
-
-			case Election: {
-				NDR_CHECK(ndr_push_nbt_browse_election_request(ndr, NDR_SCALARS, &r->election_request));
-			break; }
-
-			case GetBackupListReq: {
-				NDR_CHECK(ndr_push_nbt_browse_backup_list_request(ndr, NDR_SCALARS, &r->backup_list_request));
-			break; }
-
-			case GetBackupListResp: {
-				NDR_CHECK(ndr_push_nbt_browse_backup_list_response(ndr, NDR_SCALARS, &r->backup_list_response));
-			break; }
-
-			case BecomeBackup: {
-				NDR_CHECK(ndr_push_nbt_browse_become_backup(ndr, NDR_SCALARS, &r->become_backup));
-			break; }
-
-			case DomainAnnouncement: {
-				NDR_CHECK(ndr_push_nbt_browse_domain_announcement(ndr, NDR_SCALARS, &r->domain_announcement));
-			break; }
-
-			case MasterAnnouncement: {
-				NDR_CHECK(ndr_push_nbt_browse_master_announcement(ndr, NDR_SCALARS, &r->master_announcement));
-			break; }
-
-			case ResetBrowserState: {
-				NDR_CHECK(ndr_push_nbt_browse_reset_state(ndr, NDR_SCALARS, &r->reset_browser_state));
-			break; }
-
-			case LocalMasterAnnouncement: {
-				NDR_CHECK(ndr_push_nbt_browse_local_master_announcement(ndr, NDR_SCALARS, &r->local_master_announcement));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case HostAnnouncement:
-			break;
-
-			case AnnouncementRequest:
-			break;
-
-			case Election:
-			break;
-
-			case GetBackupListReq:
-			break;
-
-			case GetBackupListResp:
-			break;
-
-			case BecomeBackup:
-			break;
-
-			case DomainAnnouncement:
-			break;
-
-			case MasterAnnouncement:
-			break;
-
-			case ResetBrowserState:
-			break;
-
-			case LocalMasterAnnouncement:
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_nbt_browse_payload(struct ndr_pull *ndr, int ndr_flags, union nbt_browse_payload *r)
-{
-	int level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		switch (level) {
-			case HostAnnouncement: {
-				NDR_CHECK(ndr_pull_nbt_browse_host_announcement(ndr, NDR_SCALARS, &r->host_annoucement));
-			break; }
-
-			case AnnouncementRequest: {
-				NDR_CHECK(ndr_pull_nbt_browse_announcement_request(ndr, NDR_SCALARS, &r->announcement_request));
-			break; }
-
-			case Election: {
-				NDR_CHECK(ndr_pull_nbt_browse_election_request(ndr, NDR_SCALARS, &r->election_request));
-			break; }
-
-			case GetBackupListReq: {
-				NDR_CHECK(ndr_pull_nbt_browse_backup_list_request(ndr, NDR_SCALARS, &r->backup_list_request));
-			break; }
-
-			case GetBackupListResp: {
-				NDR_CHECK(ndr_pull_nbt_browse_backup_list_response(ndr, NDR_SCALARS, &r->backup_list_response));
-			break; }
-
-			case BecomeBackup: {
-				NDR_CHECK(ndr_pull_nbt_browse_become_backup(ndr, NDR_SCALARS, &r->become_backup));
-			break; }
-
-			case DomainAnnouncement: {
-				NDR_CHECK(ndr_pull_nbt_browse_domain_announcement(ndr, NDR_SCALARS, &r->domain_announcement));
-			break; }
-
-			case MasterAnnouncement: {
-				NDR_CHECK(ndr_pull_nbt_browse_master_announcement(ndr, NDR_SCALARS, &r->master_announcement));
-			break; }
-
-			case ResetBrowserState: {
-				NDR_CHECK(ndr_pull_nbt_browse_reset_state(ndr, NDR_SCALARS, &r->reset_browser_state));
-			break; }
-
-			case LocalMasterAnnouncement: {
-				NDR_CHECK(ndr_pull_nbt_browse_local_master_announcement(ndr, NDR_SCALARS, &r->local_master_announcement));
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case HostAnnouncement:
-			break;
-
-			case AnnouncementRequest:
-			break;
-
-			case Election:
-			break;
-
-			case GetBackupListReq:
-			break;
-
-			case GetBackupListResp:
-			break;
-
-			case BecomeBackup:
-			break;
-
-			case DomainAnnouncement:
-			break;
-
-			case MasterAnnouncement:
-			break;
-
-			case ResetBrowserState:
-			break;
-
-			case LocalMasterAnnouncement:
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_browse_payload(struct ndr_print *ndr, const char *name, const union nbt_browse_payload *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "nbt_browse_payload");
-	switch (level) {
-		case HostAnnouncement:
-			ndr_print_nbt_browse_host_announcement(ndr, "host_annoucement", &r->host_annoucement);
-		break;
-
-		case AnnouncementRequest:
-			ndr_print_nbt_browse_announcement_request(ndr, "announcement_request", &r->announcement_request);
-		break;
-
-		case Election:
-			ndr_print_nbt_browse_election_request(ndr, "election_request", &r->election_request);
-		break;
-
-		case GetBackupListReq:
-			ndr_print_nbt_browse_backup_list_request(ndr, "backup_list_request", &r->backup_list_request);
-		break;
-
-		case GetBackupListResp:
-			ndr_print_nbt_browse_backup_list_response(ndr, "backup_list_response", &r->backup_list_response);
-		break;
-
-		case BecomeBackup:
-			ndr_print_nbt_browse_become_backup(ndr, "become_backup", &r->become_backup);
-		break;
-
-		case DomainAnnouncement:
-			ndr_print_nbt_browse_domain_announcement(ndr, "domain_announcement", &r->domain_announcement);
-		break;
-
-		case MasterAnnouncement:
-			ndr_print_nbt_browse_master_announcement(ndr, "master_announcement", &r->master_announcement);
-		break;
-
-		case ResetBrowserState:
-			ndr_print_nbt_browse_reset_state(ndr, "reset_browser_state", &r->reset_browser_state);
-		break;
-
-		case LocalMasterAnnouncement:
-			ndr_print_nbt_browse_local_master_announcement(ndr, "local_master_announcement", &r->local_master_announcement);
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_nbt_browse_packet(struct ndr_push *ndr, int ndr_flags, const struct nbt_browse_packet *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 4));
-			NDR_CHECK(ndr_push_nbt_browse_opcode(ndr, NDR_SCALARS, r->opcode));
-			NDR_CHECK(ndr_push_set_switch_value(ndr, &r->payload, r->opcode));
-			NDR_CHECK(ndr_push_nbt_browse_payload(ndr, NDR_SCALARS, &r->payload));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_nbt_browse_packet(struct ndr_pull *ndr, int ndr_flags, struct nbt_browse_packet *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 4));
-			NDR_CHECK(ndr_pull_nbt_browse_opcode(ndr, NDR_SCALARS, &r->opcode));
-			NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->payload, r->opcode));
-			NDR_CHECK(ndr_pull_nbt_browse_payload(ndr, NDR_SCALARS, &r->payload));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_nbt_browse_packet(struct ndr_print *ndr, const char *name, const struct nbt_browse_packet *r)
-{
-	ndr_print_struct(ndr, name, "nbt_browse_packet");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN);
-		ndr->depth++;
-		ndr_print_nbt_browse_opcode(ndr, "opcode", r->opcode);
-		ndr_print_set_switch_value(ndr, &r->payload, r->opcode);
-		ndr_print_nbt_browse_payload(ndr, "payload", &r->payload);
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_nbt.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_nbt.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_nbt.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,97 +0,0 @@
-/* header auto-generated by pidl */
-
-#include "librpc/ndr/libndr.h"
-#include "librpc/gen_ndr/nbt.h"
-
-#ifndef _HEADER_NDR_nbt
-#define _HEADER_NDR_nbt
-
-#include "libcli/nbt/libnbt.h"
-#define NDR_NBT_CALL_COUNT (0)
-void ndr_print_nbt_operation(struct ndr_print *ndr, const char *name, uint16_t r);
-void ndr_print_nbt_name_type(struct ndr_print *ndr, const char *name, enum nbt_name_type r);
-enum ndr_err_code ndr_push_nbt_name(struct ndr_push *ndr, int ndr_flags, const struct nbt_name *r);
-enum ndr_err_code ndr_pull_nbt_name(struct ndr_pull *ndr, int ndr_flags, struct nbt_name *r);
-void ndr_print_nbt_name(struct ndr_print *ndr, const char *name, const struct nbt_name *r);
-void ndr_print_nbt_qclass(struct ndr_print *ndr, const char *name, enum nbt_qclass r);
-void ndr_print_nbt_qtype(struct ndr_print *ndr, const char *name, enum nbt_qtype r);
-void ndr_print_nbt_name_question(struct ndr_print *ndr, const char *name, const struct nbt_name_question *r);
-void ndr_print_nb_flags(struct ndr_print *ndr, const char *name, uint16_t r);
-void ndr_print_nbt_rdata_address(struct ndr_print *ndr, const char *name, const struct nbt_rdata_address *r);
-void ndr_print_nbt_rdata_netbios(struct ndr_print *ndr, const char *name, const struct nbt_rdata_netbios *r);
-void ndr_print_nbt_statistics(struct ndr_print *ndr, const char *name, const struct nbt_statistics *r);
-void ndr_print_nbt_status_name(struct ndr_print *ndr, const char *name, const struct nbt_status_name *r);
-void ndr_print_nbt_rdata_status(struct ndr_print *ndr, const char *name, const struct nbt_rdata_status *r);
-void ndr_print_nbt_rdata_data(struct ndr_print *ndr, const char *name, const struct nbt_rdata_data *r);
-void ndr_print_nbt_rdata(struct ndr_print *ndr, const char *name, const union nbt_rdata *r);
-void ndr_print_nbt_res_rec(struct ndr_print *ndr, const char *name, const struct nbt_res_rec *r);
-enum ndr_err_code ndr_push_nbt_name_packet(struct ndr_push *ndr, int ndr_flags, const struct nbt_name_packet *r);
-enum ndr_err_code ndr_pull_nbt_name_packet(struct ndr_pull *ndr, int ndr_flags, struct nbt_name_packet *r);
-void ndr_print_nbt_name_packet(struct ndr_print *ndr, const char *name, const struct nbt_name_packet *r);
-void ndr_print_dgram_msg_type(struct ndr_print *ndr, const char *name, enum dgram_msg_type r);
-void ndr_print_dgram_flags(struct ndr_print *ndr, const char *name, uint8_t r);
-void ndr_print_smb_command(struct ndr_print *ndr, const char *name, enum smb_command r);
-void ndr_print_smb_trans_body(struct ndr_print *ndr, const char *name, const struct smb_trans_body *r);
-void ndr_print_smb_body(struct ndr_print *ndr, const char *name, const union smb_body *r);
-enum ndr_err_code ndr_push_dgram_smb_packet(struct ndr_push *ndr, int ndr_flags, const struct dgram_smb_packet *r);
-enum ndr_err_code ndr_pull_dgram_smb_packet(struct ndr_pull *ndr, int ndr_flags, struct dgram_smb_packet *r);
-void ndr_print_dgram_smb_packet(struct ndr_print *ndr, const char *name, const struct dgram_smb_packet *r);
-void ndr_print_dgram_message_body(struct ndr_print *ndr, const char *name, const union dgram_message_body *r);
-void ndr_print_dgram_message(struct ndr_print *ndr, const char *name, const struct dgram_message *r);
-void ndr_print_dgram_err_code(struct ndr_print *ndr, const char *name, enum dgram_err_code r);
-void ndr_print_dgram_data(struct ndr_print *ndr, const char *name, const union dgram_data *r);
-enum ndr_err_code ndr_push_nbt_dgram_packet(struct ndr_push *ndr, int ndr_flags, const struct nbt_dgram_packet *r);
-enum ndr_err_code ndr_pull_nbt_dgram_packet(struct ndr_pull *ndr, int ndr_flags, struct nbt_dgram_packet *r);
-void ndr_print_nbt_dgram_packet(struct ndr_print *ndr, const char *name, const struct nbt_dgram_packet *r);
-void ndr_print_nbt_netlogon_command(struct ndr_print *ndr, const char *name, enum nbt_netlogon_command r);
-void ndr_print_nbt_netlogon_version(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_nbt_netlogon_query_for_pdc(struct ndr_print *ndr, const char *name, const struct nbt_netlogon_query_for_pdc *r);
-void ndr_print_nbt_netlogon_query_for_pdc2(struct ndr_print *ndr, const char *name, const struct nbt_netlogon_query_for_pdc2 *r);
-void ndr_print_nbt_netlogon_response_from_pdc(struct ndr_print *ndr, const char *name, const struct nbt_netlogon_response_from_pdc *r);
-void ndr_print_nbt_server_type(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_nbt_dc_sock_addr(struct ndr_print *ndr, const char *name, const struct nbt_dc_sock_addr *r);
-void ndr_print_nbt_netlogon_response_from_pdc2(struct ndr_print *ndr, const char *name, const struct nbt_netlogon_response_from_pdc2 *r);
-void ndr_print_nbt_db_change(struct ndr_print *ndr, const char *name, const struct nbt_db_change *r);
-void ndr_print_nbt_netlogon_announce_uas(struct ndr_print *ndr, const char *name, const struct nbt_netlogon_announce_uas *r);
-void ndr_print_nbt_netlogon_request(struct ndr_print *ndr, const char *name, const union nbt_netlogon_request *r);
-enum ndr_err_code ndr_push_nbt_netlogon_packet(struct ndr_push *ndr, int ndr_flags, const struct nbt_netlogon_packet *r);
-enum ndr_err_code ndr_pull_nbt_netlogon_packet(struct ndr_pull *ndr, int ndr_flags, struct nbt_netlogon_packet *r);
-void ndr_print_nbt_netlogon_packet(struct ndr_print *ndr, const char *name, const struct nbt_netlogon_packet *r);
-void ndr_print_nbt_cldap_netlogon_1(struct ndr_print *ndr, const char *name, const struct nbt_cldap_netlogon_1 *r);
-void ndr_print_nbt_cldap_netlogon_3(struct ndr_print *ndr, const char *name, const struct nbt_cldap_netlogon_3 *r);
-enum ndr_err_code ndr_push_nbt_cldap_netlogon_5(struct ndr_push *ndr, int ndr_flags, const struct nbt_cldap_netlogon_5 *r);
-enum ndr_err_code ndr_pull_nbt_cldap_netlogon_5(struct ndr_pull *ndr, int ndr_flags, struct nbt_cldap_netlogon_5 *r);
-void ndr_print_nbt_cldap_netlogon_5(struct ndr_print *ndr, const char *name, const struct nbt_cldap_netlogon_5 *r);
-void ndr_print_nbt_cldap_netlogon_13(struct ndr_print *ndr, const char *name, const struct nbt_cldap_netlogon_13 *r);
-enum ndr_err_code ndr_push_nbt_cldap_netlogon_15(struct ndr_push *ndr, int ndr_flags, const struct nbt_cldap_netlogon_15 *r);
-enum ndr_err_code ndr_pull_nbt_cldap_netlogon_15(struct ndr_pull *ndr, int ndr_flags, struct nbt_cldap_netlogon_15 *r);
-void ndr_print_nbt_cldap_netlogon_15(struct ndr_print *ndr, const char *name, const struct nbt_cldap_netlogon_15 *r);
-enum ndr_err_code ndr_push_nbt_cldap_netlogon_29(struct ndr_push *ndr, int ndr_flags, const struct nbt_cldap_netlogon_29 *r);
-enum ndr_err_code ndr_pull_nbt_cldap_netlogon_29(struct ndr_pull *ndr, int ndr_flags, struct nbt_cldap_netlogon_29 *r);
-void ndr_print_nbt_cldap_netlogon_29(struct ndr_print *ndr, const char *name, const struct nbt_cldap_netlogon_29 *r);
-enum ndr_err_code ndr_push_nbt_cldap_netlogon(struct ndr_push *ndr, int ndr_flags, const union nbt_cldap_netlogon *r);
-enum ndr_err_code ndr_pull_nbt_cldap_netlogon(struct ndr_pull *ndr, int ndr_flags, union nbt_cldap_netlogon *r);
-void ndr_print_nbt_cldap_netlogon(struct ndr_print *ndr, const char *name, const union nbt_cldap_netlogon *r);
-void ndr_print_nbt_ntlogon_command(struct ndr_print *ndr, const char *name, enum nbt_ntlogon_command r);
-void ndr_print_nbt_ntlogon_sam_logon(struct ndr_print *ndr, const char *name, const struct nbt_ntlogon_sam_logon *r);
-void ndr_print_nbt_ntlogon_sam_logon_reply(struct ndr_print *ndr, const char *name, const struct nbt_ntlogon_sam_logon_reply *r);
-void ndr_print_nbt_ntlogon_request(struct ndr_print *ndr, const char *name, const union nbt_ntlogon_request *r);
-enum ndr_err_code ndr_push_nbt_ntlogon_packet(struct ndr_push *ndr, int ndr_flags, const struct nbt_ntlogon_packet *r);
-enum ndr_err_code ndr_pull_nbt_ntlogon_packet(struct ndr_pull *ndr, int ndr_flags, struct nbt_ntlogon_packet *r);
-void ndr_print_nbt_ntlogon_packet(struct ndr_print *ndr, const char *name, const struct nbt_ntlogon_packet *r);
-void ndr_print_nbt_browse_opcode(struct ndr_print *ndr, const char *name, enum nbt_browse_opcode r);
-void ndr_print_nbt_browse_host_announcement(struct ndr_print *ndr, const char *name, const struct nbt_browse_host_announcement *r);
-void ndr_print_nbt_browse_announcement_request(struct ndr_print *ndr, const char *name, const struct nbt_browse_announcement_request *r);
-void ndr_print_nbt_browse_election_request(struct ndr_print *ndr, const char *name, const struct nbt_browse_election_request *r);
-void ndr_print_nbt_browse_backup_list_request(struct ndr_print *ndr, const char *name, const struct nbt_browse_backup_list_request *r);
-void ndr_print_nbt_browse_backup_list_response(struct ndr_print *ndr, const char *name, const struct nbt_browse_backup_list_response *r);
-void ndr_print_nbt_browse_become_backup(struct ndr_print *ndr, const char *name, const struct nbt_browse_become_backup *r);
-void ndr_print_nbt_browse_domain_announcement(struct ndr_print *ndr, const char *name, const struct nbt_browse_domain_announcement *r);
-void ndr_print_nbt_browse_master_announcement(struct ndr_print *ndr, const char *name, const struct nbt_browse_master_announcement *r);
-void ndr_print_nbt_browse_reset_state(struct ndr_print *ndr, const char *name, const struct nbt_browse_reset_state *r);
-void ndr_print_nbt_browse_local_master_announcement(struct ndr_print *ndr, const char *name, const struct nbt_browse_local_master_announcement *r);
-void ndr_print_nbt_browse_payload(struct ndr_print *ndr, const char *name, const union nbt_browse_payload *r);
-enum ndr_err_code ndr_push_nbt_browse_packet(struct ndr_push *ndr, int ndr_flags, const struct nbt_browse_packet *r);
-enum ndr_err_code ndr_pull_nbt_browse_packet(struct ndr_pull *ndr, int ndr_flags, struct nbt_browse_packet *r);
-void ndr_print_nbt_browse_packet(struct ndr_print *ndr, const char *name, const struct nbt_browse_packet *r);
-#endif /* _HEADER_NDR_nbt */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_netlogon.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_netlogon.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_netlogon.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,15105 +0,0 @@
-/* parser auto-generated by pidl */
-
-#include "includes.h"
-#include "librpc/gen_ndr/ndr_netlogon.h"
-
-#include "librpc/gen_ndr/ndr_lsa.h"
-#include "librpc/gen_ndr/ndr_samr.h"
-#include "librpc/gen_ndr/ndr_security.h"
-#include "librpc/gen_ndr/ndr_nbt.h"
-static enum ndr_err_code ndr_push_netr_UasInfo(struct ndr_push *ndr, int ndr_flags, const struct netr_UasInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->account_name));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->priv));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->auth_flags));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->logon_count));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->bad_pw_count));
-		NDR_CHECK(ndr_push_time_t(ndr, NDR_SCALARS, r->last_logon));
-		NDR_CHECK(ndr_push_time_t(ndr, NDR_SCALARS, r->last_logoff));
-		NDR_CHECK(ndr_push_time_t(ndr, NDR_SCALARS, r->logoff_time));
-		NDR_CHECK(ndr_push_time_t(ndr, NDR_SCALARS, r->kickoff_time));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->password_age));
-		NDR_CHECK(ndr_push_time_t(ndr, NDR_SCALARS, r->pw_can_change));
-		NDR_CHECK(ndr_push_time_t(ndr, NDR_SCALARS, r->pw_must_change));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->computer));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->domain));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->script_path));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->account_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->account_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->account_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->account_name, ndr_charset_length(r->account_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->computer) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->computer, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->computer, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->computer, ndr_charset_length(r->computer, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->domain) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->domain, ndr_charset_length(r->domain, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->script_path) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->script_path, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->script_path, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->script_path, ndr_charset_length(r->script_path, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_UasInfo(struct ndr_pull *ndr, int ndr_flags, struct netr_UasInfo *r)
-{
-	uint32_t _ptr_account_name;
-	TALLOC_CTX *_mem_save_account_name_0;
-	uint32_t _ptr_computer;
-	TALLOC_CTX *_mem_save_computer_0;
-	uint32_t _ptr_domain;
-	TALLOC_CTX *_mem_save_domain_0;
-	uint32_t _ptr_script_path;
-	TALLOC_CTX *_mem_save_script_path_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_account_name));
-		if (_ptr_account_name) {
-			NDR_PULL_ALLOC(ndr, r->account_name);
-		} else {
-			r->account_name = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->priv));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->auth_flags));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->logon_count));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->bad_pw_count));
-		NDR_CHECK(ndr_pull_time_t(ndr, NDR_SCALARS, &r->last_logon));
-		NDR_CHECK(ndr_pull_time_t(ndr, NDR_SCALARS, &r->last_logoff));
-		NDR_CHECK(ndr_pull_time_t(ndr, NDR_SCALARS, &r->logoff_time));
-		NDR_CHECK(ndr_pull_time_t(ndr, NDR_SCALARS, &r->kickoff_time));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->password_age));
-		NDR_CHECK(ndr_pull_time_t(ndr, NDR_SCALARS, &r->pw_can_change));
-		NDR_CHECK(ndr_pull_time_t(ndr, NDR_SCALARS, &r->pw_must_change));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_computer));
-		if (_ptr_computer) {
-			NDR_PULL_ALLOC(ndr, r->computer);
-		} else {
-			r->computer = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain));
-		if (_ptr_domain) {
-			NDR_PULL_ALLOC(ndr, r->domain);
-		} else {
-			r->domain = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_script_path));
-		if (_ptr_script_path) {
-			NDR_PULL_ALLOC(ndr, r->script_path);
-		} else {
-			r->script_path = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->account_name) {
-			_mem_save_account_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->account_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->account_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->account_name));
-			if (ndr_get_array_length(ndr, &r->account_name) > ndr_get_array_size(ndr, &r->account_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->account_name), ndr_get_array_length(ndr, &r->account_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->account_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->account_name, ndr_get_array_length(ndr, &r->account_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_account_name_0, 0);
-		}
-		if (r->computer) {
-			_mem_save_computer_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->computer, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->computer));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->computer));
-			if (ndr_get_array_length(ndr, &r->computer) > ndr_get_array_size(ndr, &r->computer)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->computer), ndr_get_array_length(ndr, &r->computer));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->computer), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->computer, ndr_get_array_length(ndr, &r->computer), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_computer_0, 0);
-		}
-		if (r->domain) {
-			_mem_save_domain_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->domain, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->domain));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->domain));
-			if (ndr_get_array_length(ndr, &r->domain) > ndr_get_array_size(ndr, &r->domain)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->domain), ndr_get_array_length(ndr, &r->domain));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->domain), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->domain, ndr_get_array_length(ndr, &r->domain), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_0, 0);
-		}
-		if (r->script_path) {
-			_mem_save_script_path_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->script_path, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->script_path));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->script_path));
-			if (ndr_get_array_length(ndr, &r->script_path) > ndr_get_array_size(ndr, &r->script_path)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->script_path), ndr_get_array_length(ndr, &r->script_path));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->script_path), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->script_path, ndr_get_array_length(ndr, &r->script_path), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_script_path_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_UasInfo(struct ndr_print *ndr, const char *name, const struct netr_UasInfo *r)
-{
-	ndr_print_struct(ndr, name, "netr_UasInfo");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "account_name", r->account_name);
-	ndr->depth++;
-	if (r->account_name) {
-		ndr_print_string(ndr, "account_name", r->account_name);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "priv", r->priv);
-	ndr_print_uint32(ndr, "auth_flags", r->auth_flags);
-	ndr_print_uint32(ndr, "logon_count", r->logon_count);
-	ndr_print_uint32(ndr, "bad_pw_count", r->bad_pw_count);
-	ndr_print_time_t(ndr, "last_logon", r->last_logon);
-	ndr_print_time_t(ndr, "last_logoff", r->last_logoff);
-	ndr_print_time_t(ndr, "logoff_time", r->logoff_time);
-	ndr_print_time_t(ndr, "kickoff_time", r->kickoff_time);
-	ndr_print_uint32(ndr, "password_age", r->password_age);
-	ndr_print_time_t(ndr, "pw_can_change", r->pw_can_change);
-	ndr_print_time_t(ndr, "pw_must_change", r->pw_must_change);
-	ndr_print_ptr(ndr, "computer", r->computer);
-	ndr->depth++;
-	if (r->computer) {
-		ndr_print_string(ndr, "computer", r->computer);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "domain", r->domain);
-	ndr->depth++;
-	if (r->domain) {
-		ndr_print_string(ndr, "domain", r->domain);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "script_path", r->script_path);
-	ndr->depth++;
-	if (r->script_path) {
-		ndr_print_string(ndr, "script_path", r->script_path);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "unknown", r->unknown);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_UasLogoffInfo(struct ndr_push *ndr, int ndr_flags, const struct netr_UasLogoffInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->duration));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->logon_count));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_UasLogoffInfo(struct ndr_pull *ndr, int ndr_flags, struct netr_UasLogoffInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->duration));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->logon_count));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_UasLogoffInfo(struct ndr_print *ndr, const char *name, const struct netr_UasLogoffInfo *r)
-{
-	ndr_print_struct(ndr, name, "netr_UasLogoffInfo");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "duration", r->duration);
-	ndr_print_uint16(ndr, "logon_count", r->logon_count);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_netr_AcctLockStr(struct ndr_push *ndr, int ndr_flags, const struct netr_AcctLockStr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_dlong(ndr, NDR_SCALARS, r->lockout_duration));
-		NDR_CHECK(ndr_push_udlong(ndr, NDR_SCALARS, r->reset_count));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->bad_attempt_lockout));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->dummy));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_netr_AcctLockStr(struct ndr_pull *ndr, int ndr_flags, struct netr_AcctLockStr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_dlong(ndr, NDR_SCALARS, &r->lockout_duration));
-		NDR_CHECK(ndr_pull_udlong(ndr, NDR_SCALARS, &r->reset_count));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->bad_attempt_lockout));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->dummy));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_AcctLockStr(struct ndr_print *ndr, const char *name, const struct netr_AcctLockStr *r)
-{
-	ndr_print_struct(ndr, name, "netr_AcctLockStr");
-	ndr->depth++;
-	ndr_print_dlong(ndr, "lockout_duration", r->lockout_duration);
-	ndr_print_udlong(ndr, "reset_count", r->reset_count);
-	ndr_print_uint32(ndr, "bad_attempt_lockout", r->bad_attempt_lockout);
-	ndr_print_uint32(ndr, "dummy", r->dummy);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_netr_LogonParameterControl(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_netr_LogonParameterControl(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_LogonParameterControl(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "MSV1_0_CLEARTEXT_PASSWORD_ALLOWED", MSV1_0_CLEARTEXT_PASSWORD_ALLOWED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "MSV1_0_UPDATE_LOGON_STATISTICS", MSV1_0_UPDATE_LOGON_STATISTICS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "MSV1_0_RETURN_USER_PARAMETERS", MSV1_0_RETURN_USER_PARAMETERS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT", MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "MSV1_0_RETURN_PROFILE_PATH", MSV1_0_RETURN_PROFILE_PATH, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT", MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_IdentityInfo(struct ndr_push *ndr, int ndr_flags, const struct netr_IdentityInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->domain_name));
-		NDR_CHECK(ndr_push_netr_LogonParameterControl(ndr, NDR_SCALARS, r->parameter_control));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->logon_id_low));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->logon_id_high));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->account_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->workstation));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->domain_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->account_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->workstation));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_IdentityInfo(struct ndr_pull *ndr, int ndr_flags, struct netr_IdentityInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->domain_name));
-		NDR_CHECK(ndr_pull_netr_LogonParameterControl(ndr, NDR_SCALARS, &r->parameter_control));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->logon_id_low));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->logon_id_high));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->account_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->workstation));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->domain_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->account_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->workstation));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_IdentityInfo(struct ndr_print *ndr, const char *name, const struct netr_IdentityInfo *r)
-{
-	ndr_print_struct(ndr, name, "netr_IdentityInfo");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "domain_name", &r->domain_name);
-	ndr_print_netr_LogonParameterControl(ndr, "parameter_control", r->parameter_control);
-	ndr_print_uint32(ndr, "logon_id_low", r->logon_id_low);
-	ndr_print_uint32(ndr, "logon_id_high", r->logon_id_high);
-	ndr_print_lsa_String(ndr, "account_name", &r->account_name);
-	ndr_print_lsa_String(ndr, "workstation", &r->workstation);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_PasswordInfo(struct ndr_push *ndr, int ndr_flags, const struct netr_PasswordInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_netr_IdentityInfo(ndr, NDR_SCALARS, &r->identity_info));
-		NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, &r->lmpassword));
-		NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, &r->ntpassword));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_netr_IdentityInfo(ndr, NDR_BUFFERS, &r->identity_info));
-		NDR_CHECK(ndr_push_samr_Password(ndr, NDR_BUFFERS, &r->lmpassword));
-		NDR_CHECK(ndr_push_samr_Password(ndr, NDR_BUFFERS, &r->ntpassword));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_PasswordInfo(struct ndr_pull *ndr, int ndr_flags, struct netr_PasswordInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_netr_IdentityInfo(ndr, NDR_SCALARS, &r->identity_info));
-		NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, &r->lmpassword));
-		NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, &r->ntpassword));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_netr_IdentityInfo(ndr, NDR_BUFFERS, &r->identity_info));
-		NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_BUFFERS, &r->lmpassword));
-		NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_BUFFERS, &r->ntpassword));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_PasswordInfo(struct ndr_print *ndr, const char *name, const struct netr_PasswordInfo *r)
-{
-	ndr_print_struct(ndr, name, "netr_PasswordInfo");
-	ndr->depth++;
-	ndr_print_netr_IdentityInfo(ndr, "identity_info", &r->identity_info);
-	ndr_print_samr_Password(ndr, "lmpassword", &r->lmpassword);
-	ndr_print_samr_Password(ndr, "ntpassword", &r->ntpassword);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_ChallengeResponse(struct ndr_push *ndr, int ndr_flags, const struct netr_ChallengeResponse *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 4));
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->length));
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->length));
-			NDR_CHECK(ndr_push_unique_ptr(ndr, r->data));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-			if (r->data) {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->length));
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->length));
-				NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->data, r->length));
-			}
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_ChallengeResponse(struct ndr_pull *ndr, int ndr_flags, struct netr_ChallengeResponse *r)
-{
-	uint32_t _ptr_data;
-	TALLOC_CTX *_mem_save_data_0;
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 4));
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->length));
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
-			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_data));
-			if (_ptr_data) {
-				NDR_PULL_ALLOC(ndr, r->data);
-			} else {
-				r->data = NULL;
-			}
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-			if (r->data) {
-				_mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
-				NDR_PULL_SET_MEM_CTX(ndr, r->data, 0);
-				NDR_CHECK(ndr_pull_array_size(ndr, &r->data));
-				NDR_CHECK(ndr_pull_array_length(ndr, &r->data));
-				if (ndr_get_array_length(ndr, &r->data) > ndr_get_array_size(ndr, &r->data)) {
-					return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->data), ndr_get_array_length(ndr, &r->data));
-				}
-				NDR_PULL_ALLOC_N(ndr, r->data, ndr_get_array_size(ndr, &r->data));
-				NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->data, ndr_get_array_length(ndr, &r->data)));
-				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, 0);
-			}
-			if (r->data) {
-				NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->data, r->length));
-			}
-			if (r->data) {
-				NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->data, r->length));
-			}
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_ChallengeResponse(struct ndr_print *ndr, const char *name, const struct netr_ChallengeResponse *r)
-{
-	ndr_print_struct(ndr, name, "netr_ChallengeResponse");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		ndr->depth++;
-		ndr_print_uint16(ndr, "length", r->length);
-		ndr_print_uint16(ndr, "size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->length:r->size);
-		ndr_print_ptr(ndr, "data", r->data);
-		ndr->depth++;
-		if (r->data) {
-			ndr_print_array_uint8(ndr, "data", r->data, r->length);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-
-static enum ndr_err_code ndr_push_netr_NetworkInfo(struct ndr_push *ndr, int ndr_flags, const struct netr_NetworkInfo *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 4));
-			NDR_CHECK(ndr_push_netr_IdentityInfo(ndr, NDR_SCALARS, &r->identity_info));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->challenge, 8));
-			NDR_CHECK(ndr_push_netr_ChallengeResponse(ndr, NDR_SCALARS, &r->nt));
-			NDR_CHECK(ndr_push_netr_ChallengeResponse(ndr, NDR_SCALARS, &r->lm));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-			NDR_CHECK(ndr_push_netr_IdentityInfo(ndr, NDR_BUFFERS, &r->identity_info));
-			NDR_CHECK(ndr_push_netr_ChallengeResponse(ndr, NDR_BUFFERS, &r->nt));
-			NDR_CHECK(ndr_push_netr_ChallengeResponse(ndr, NDR_BUFFERS, &r->lm));
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_NetworkInfo(struct ndr_pull *ndr, int ndr_flags, struct netr_NetworkInfo *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 4));
-			NDR_CHECK(ndr_pull_netr_IdentityInfo(ndr, NDR_SCALARS, &r->identity_info));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->challenge, 8));
-			NDR_CHECK(ndr_pull_netr_ChallengeResponse(ndr, NDR_SCALARS, &r->nt));
-			NDR_CHECK(ndr_pull_netr_ChallengeResponse(ndr, NDR_SCALARS, &r->lm));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-			NDR_CHECK(ndr_pull_netr_IdentityInfo(ndr, NDR_BUFFERS, &r->identity_info));
-			NDR_CHECK(ndr_pull_netr_ChallengeResponse(ndr, NDR_BUFFERS, &r->nt));
-			NDR_CHECK(ndr_pull_netr_ChallengeResponse(ndr, NDR_BUFFERS, &r->lm));
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_NetworkInfo(struct ndr_print *ndr, const char *name, const struct netr_NetworkInfo *r)
-{
-	ndr_print_struct(ndr, name, "netr_NetworkInfo");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		ndr->depth++;
-		ndr_print_netr_IdentityInfo(ndr, "identity_info", &r->identity_info);
-		ndr_print_array_uint8(ndr, "challenge", r->challenge, 8);
-		ndr_print_netr_ChallengeResponse(ndr, "nt", &r->nt);
-		ndr_print_netr_ChallengeResponse(ndr, "lm", &r->lm);
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_netr_LogonInfo(struct ndr_push *ndr, int ndr_flags, const union netr_LogonInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 1: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->password));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->network));
-			break; }
-
-			case 3: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->password));
-			break; }
-
-			case 5: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->password));
-			break; }
-
-			case 6: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->network));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 1:
-				if (r->password) {
-					NDR_CHECK(ndr_push_netr_PasswordInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->password));
-				}
-			break;
-
-			case 2:
-				if (r->network) {
-					NDR_CHECK(ndr_push_netr_NetworkInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->network));
-				}
-			break;
-
-			case 3:
-				if (r->password) {
-					NDR_CHECK(ndr_push_netr_PasswordInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->password));
-				}
-			break;
-
-			case 5:
-				if (r->password) {
-					NDR_CHECK(ndr_push_netr_PasswordInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->password));
-				}
-			break;
-
-			case 6:
-				if (r->network) {
-					NDR_CHECK(ndr_push_netr_NetworkInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->network));
-				}
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_netr_LogonInfo(struct ndr_pull *ndr, int ndr_flags, union netr_LogonInfo *r)
-{
-	int level;
-	uint16_t _level;
-	TALLOC_CTX *_mem_save_password_0;
-	TALLOC_CTX *_mem_save_network_0;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 1: {
-				uint32_t _ptr_password;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_password));
-				if (_ptr_password) {
-					NDR_PULL_ALLOC(ndr, r->password);
-				} else {
-					r->password = NULL;
-				}
-			break; }
-
-			case 2: {
-				uint32_t _ptr_network;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_network));
-				if (_ptr_network) {
-					NDR_PULL_ALLOC(ndr, r->network);
-				} else {
-					r->network = NULL;
-				}
-			break; }
-
-			case 3: {
-				uint32_t _ptr_password;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_password));
-				if (_ptr_password) {
-					NDR_PULL_ALLOC(ndr, r->password);
-				} else {
-					r->password = NULL;
-				}
-			break; }
-
-			case 5: {
-				uint32_t _ptr_password;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_password));
-				if (_ptr_password) {
-					NDR_PULL_ALLOC(ndr, r->password);
-				} else {
-					r->password = NULL;
-				}
-			break; }
-
-			case 6: {
-				uint32_t _ptr_network;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_network));
-				if (_ptr_network) {
-					NDR_PULL_ALLOC(ndr, r->network);
-				} else {
-					r->network = NULL;
-				}
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 1:
-				if (r->password) {
-					_mem_save_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->password, 0);
-					NDR_CHECK(ndr_pull_netr_PasswordInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->password));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_password_0, 0);
-				}
-			break;
-
-			case 2:
-				if (r->network) {
-					_mem_save_network_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->network, 0);
-					NDR_CHECK(ndr_pull_netr_NetworkInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->network));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_network_0, 0);
-				}
-			break;
-
-			case 3:
-				if (r->password) {
-					_mem_save_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->password, 0);
-					NDR_CHECK(ndr_pull_netr_PasswordInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->password));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_password_0, 0);
-				}
-			break;
-
-			case 5:
-				if (r->password) {
-					_mem_save_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->password, 0);
-					NDR_CHECK(ndr_pull_netr_PasswordInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->password));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_password_0, 0);
-				}
-			break;
-
-			case 6:
-				if (r->network) {
-					_mem_save_network_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->network, 0);
-					NDR_CHECK(ndr_pull_netr_NetworkInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->network));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_network_0, 0);
-				}
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_LogonInfo(struct ndr_print *ndr, const char *name, const union netr_LogonInfo *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "netr_LogonInfo");
-	switch (level) {
-		case 1:
-			ndr_print_ptr(ndr, "password", r->password);
-			ndr->depth++;
-			if (r->password) {
-				ndr_print_netr_PasswordInfo(ndr, "password", r->password);
-			}
-			ndr->depth--;
-		break;
-
-		case 2:
-			ndr_print_ptr(ndr, "network", r->network);
-			ndr->depth++;
-			if (r->network) {
-				ndr_print_netr_NetworkInfo(ndr, "network", r->network);
-			}
-			ndr->depth--;
-		break;
-
-		case 3:
-			ndr_print_ptr(ndr, "password", r->password);
-			ndr->depth++;
-			if (r->password) {
-				ndr_print_netr_PasswordInfo(ndr, "password", r->password);
-			}
-			ndr->depth--;
-		break;
-
-		case 5:
-			ndr_print_ptr(ndr, "password", r->password);
-			ndr->depth++;
-			if (r->password) {
-				ndr_print_netr_PasswordInfo(ndr, "password", r->password);
-			}
-			ndr->depth--;
-		break;
-
-		case 6:
-			ndr_print_ptr(ndr, "network", r->network);
-			ndr->depth++;
-			if (r->network) {
-				ndr_print_netr_NetworkInfo(ndr, "network", r->network);
-			}
-			ndr->depth--;
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_netr_UserSessionKey(struct ndr_push *ndr, int ndr_flags, const struct netr_UserSessionKey *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 1));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->key, 16));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_netr_UserSessionKey(struct ndr_pull *ndr, int ndr_flags, struct netr_UserSessionKey *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 1));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->key, 16));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_UserSessionKey(struct ndr_print *ndr, const char *name, const struct netr_UserSessionKey *r)
-{
-	ndr_print_struct(ndr, name, "netr_UserSessionKey");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "key", r->key, 16);
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_netr_LMSessionKey(struct ndr_push *ndr, int ndr_flags, const struct netr_LMSessionKey *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 1));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->key, 8));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_netr_LMSessionKey(struct ndr_pull *ndr, int ndr_flags, struct netr_LMSessionKey *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 1));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->key, 8));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_LMSessionKey(struct ndr_print *ndr, const char *name, const struct netr_LMSessionKey *r)
-{
-	ndr_print_struct(ndr, name, "netr_LMSessionKey");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "key", r->key, 8);
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_netr_UserFlags(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_netr_UserFlags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_UserFlags(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_GUEST", NETLOGON_GUEST, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NOENCRYPTION", NETLOGON_NOENCRYPTION, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_CACHED_ACCOUNT", NETLOGON_CACHED_ACCOUNT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_USED_LM_PASSWORD", NETLOGON_USED_LM_PASSWORD, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_EXTRA_SIDS", NETLOGON_EXTRA_SIDS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_SUBAUTH_SESSION_KEY", NETLOGON_SUBAUTH_SESSION_KEY, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_SERVER_TRUST_ACCOUNT", NETLOGON_SERVER_TRUST_ACCOUNT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NTLMV2_ENABLED", NETLOGON_NTLMV2_ENABLED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_RESOURCE_GROUPS", NETLOGON_RESOURCE_GROUPS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_PROFILE_PATH_RETURNED", NETLOGON_PROFILE_PATH_RETURNED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_GRACE_LOGON", NETLOGON_GRACE_LOGON, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_SamBaseInfo(struct ndr_push *ndr, int ndr_flags, const struct netr_SamBaseInfo *r)
-{
-	uint32_t cntr_unknown_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->last_logon));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->last_logoff));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->acct_expiry));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->last_password_change));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->allow_password_change));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->force_password_change));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->account_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->full_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->logon_script));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->profile_path));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->home_directory));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->home_drive));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->logon_count));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->bad_password_count));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->primary_gid));
-		NDR_CHECK(ndr_push_samr_RidWithAttributeArray(ndr, NDR_SCALARS, &r->groups));
-		NDR_CHECK(ndr_push_netr_UserFlags(ndr, NDR_SCALARS, r->user_flags));
-		NDR_CHECK(ndr_push_netr_UserSessionKey(ndr, NDR_SCALARS, &r->key));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->logon_server));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->domain));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->domain_sid));
-		NDR_CHECK(ndr_push_netr_LMSessionKey(ndr, NDR_SCALARS, &r->LMSessKey));
-		NDR_CHECK(ndr_push_samr_AcctFlags(ndr, NDR_SCALARS, r->acct_flags));
-		for (cntr_unknown_0 = 0; cntr_unknown_0 < 7; cntr_unknown_0++) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown[cntr_unknown_0]));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->account_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->full_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->logon_script));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->profile_path));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->home_directory));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->home_drive));
-		NDR_CHECK(ndr_push_samr_RidWithAttributeArray(ndr, NDR_BUFFERS, &r->groups));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->logon_server));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->domain));
-		if (r->domain_sid) {
-			NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->domain_sid));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_SamBaseInfo(struct ndr_pull *ndr, int ndr_flags, struct netr_SamBaseInfo *r)
-{
-	uint32_t _ptr_domain_sid;
-	TALLOC_CTX *_mem_save_domain_sid_0;
-	uint32_t cntr_unknown_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->last_logon));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->last_logoff));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->acct_expiry));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->last_password_change));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->allow_password_change));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->force_password_change));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->account_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->full_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->logon_script));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->profile_path));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->home_directory));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->home_drive));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->logon_count));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->bad_password_count));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->primary_gid));
-		NDR_CHECK(ndr_pull_samr_RidWithAttributeArray(ndr, NDR_SCALARS, &r->groups));
-		NDR_CHECK(ndr_pull_netr_UserFlags(ndr, NDR_SCALARS, &r->user_flags));
-		NDR_CHECK(ndr_pull_netr_UserSessionKey(ndr, NDR_SCALARS, &r->key));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->logon_server));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->domain));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain_sid));
-		if (_ptr_domain_sid) {
-			NDR_PULL_ALLOC(ndr, r->domain_sid);
-		} else {
-			r->domain_sid = NULL;
-		}
-		NDR_CHECK(ndr_pull_netr_LMSessionKey(ndr, NDR_SCALARS, &r->LMSessKey));
-		NDR_CHECK(ndr_pull_samr_AcctFlags(ndr, NDR_SCALARS, &r->acct_flags));
-		for (cntr_unknown_0 = 0; cntr_unknown_0 < 7; cntr_unknown_0++) {
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown[cntr_unknown_0]));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->account_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->full_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->logon_script));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->profile_path));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->home_directory));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->home_drive));
-		NDR_CHECK(ndr_pull_samr_RidWithAttributeArray(ndr, NDR_BUFFERS, &r->groups));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->logon_server));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->domain));
-		if (r->domain_sid) {
-			_mem_save_domain_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->domain_sid, 0);
-			NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->domain_sid));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_sid_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_SamBaseInfo(struct ndr_print *ndr, const char *name, const struct netr_SamBaseInfo *r)
-{
-	uint32_t cntr_unknown_0;
-	ndr_print_struct(ndr, name, "netr_SamBaseInfo");
-	ndr->depth++;
-	ndr_print_NTTIME(ndr, "last_logon", r->last_logon);
-	ndr_print_NTTIME(ndr, "last_logoff", r->last_logoff);
-	ndr_print_NTTIME(ndr, "acct_expiry", r->acct_expiry);
-	ndr_print_NTTIME(ndr, "last_password_change", r->last_password_change);
-	ndr_print_NTTIME(ndr, "allow_password_change", r->allow_password_change);
-	ndr_print_NTTIME(ndr, "force_password_change", r->force_password_change);
-	ndr_print_lsa_String(ndr, "account_name", &r->account_name);
-	ndr_print_lsa_String(ndr, "full_name", &r->full_name);
-	ndr_print_lsa_String(ndr, "logon_script", &r->logon_script);
-	ndr_print_lsa_String(ndr, "profile_path", &r->profile_path);
-	ndr_print_lsa_String(ndr, "home_directory", &r->home_directory);
-	ndr_print_lsa_String(ndr, "home_drive", &r->home_drive);
-	ndr_print_uint16(ndr, "logon_count", r->logon_count);
-	ndr_print_uint16(ndr, "bad_password_count", r->bad_password_count);
-	ndr_print_uint32(ndr, "rid", r->rid);
-	ndr_print_uint32(ndr, "primary_gid", r->primary_gid);
-	ndr_print_samr_RidWithAttributeArray(ndr, "groups", &r->groups);
-	ndr_print_netr_UserFlags(ndr, "user_flags", r->user_flags);
-	ndr_print_netr_UserSessionKey(ndr, "key", &r->key);
-	ndr_print_lsa_StringLarge(ndr, "logon_server", &r->logon_server);
-	ndr_print_lsa_StringLarge(ndr, "domain", &r->domain);
-	ndr_print_ptr(ndr, "domain_sid", r->domain_sid);
-	ndr->depth++;
-	if (r->domain_sid) {
-		ndr_print_dom_sid2(ndr, "domain_sid", r->domain_sid);
-	}
-	ndr->depth--;
-	ndr_print_netr_LMSessionKey(ndr, "LMSessKey", &r->LMSessKey);
-	ndr_print_samr_AcctFlags(ndr, "acct_flags", r->acct_flags);
-	ndr->print(ndr, "%s: ARRAY(%d)", "unknown", 7);
-	ndr->depth++;
-	for (cntr_unknown_0=0;cntr_unknown_0<7;cntr_unknown_0++) {
-		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_unknown_0) != -1) {
-			ndr_print_uint32(ndr, "unknown", r->unknown[cntr_unknown_0]);
-			free(idx_0);
-		}
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_SamInfo2(struct ndr_push *ndr, int ndr_flags, const struct netr_SamInfo2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_netr_SamBaseInfo(ndr, NDR_SCALARS, &r->base));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_netr_SamBaseInfo(ndr, NDR_BUFFERS, &r->base));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_SamInfo2(struct ndr_pull *ndr, int ndr_flags, struct netr_SamInfo2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_netr_SamBaseInfo(ndr, NDR_SCALARS, &r->base));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_netr_SamBaseInfo(ndr, NDR_BUFFERS, &r->base));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_SamInfo2(struct ndr_print *ndr, const char *name, const struct netr_SamInfo2 *r)
-{
-	ndr_print_struct(ndr, name, "netr_SamInfo2");
-	ndr->depth++;
-	ndr_print_netr_SamBaseInfo(ndr, "base", &r->base);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_SidAttr(struct ndr_push *ndr, int ndr_flags, const struct netr_SidAttr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sid));
-		NDR_CHECK(ndr_push_samr_GroupAttrs(ndr, NDR_SCALARS, r->attributes));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->sid) {
-			NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_SidAttr(struct ndr_pull *ndr, int ndr_flags, struct netr_SidAttr *r)
-{
-	uint32_t _ptr_sid;
-	TALLOC_CTX *_mem_save_sid_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sid));
-		if (_ptr_sid) {
-			NDR_PULL_ALLOC(ndr, r->sid);
-		} else {
-			r->sid = NULL;
-		}
-		NDR_CHECK(ndr_pull_samr_GroupAttrs(ndr, NDR_SCALARS, &r->attributes));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->sid) {
-			_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sid, 0);
-			NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_SidAttr(struct ndr_print *ndr, const char *name, const struct netr_SidAttr *r)
-{
-	ndr_print_struct(ndr, name, "netr_SidAttr");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "sid", r->sid);
-	ndr->depth++;
-	if (r->sid) {
-		ndr_print_dom_sid2(ndr, "sid", r->sid);
-	}
-	ndr->depth--;
-	ndr_print_samr_GroupAttrs(ndr, "attributes", r->attributes);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_netr_SamInfo3(struct ndr_push *ndr, int ndr_flags, const struct netr_SamInfo3 *r)
-{
-	uint32_t cntr_sids_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_netr_SamBaseInfo(ndr, NDR_SCALARS, &r->base));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sidcount));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sids));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_netr_SamBaseInfo(ndr, NDR_BUFFERS, &r->base));
-		if (r->sids) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sidcount));
-			for (cntr_sids_1 = 0; cntr_sids_1 < r->sidcount; cntr_sids_1++) {
-				NDR_CHECK(ndr_push_netr_SidAttr(ndr, NDR_SCALARS, &r->sids[cntr_sids_1]));
-			}
-			for (cntr_sids_1 = 0; cntr_sids_1 < r->sidcount; cntr_sids_1++) {
-				NDR_CHECK(ndr_push_netr_SidAttr(ndr, NDR_BUFFERS, &r->sids[cntr_sids_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_netr_SamInfo3(struct ndr_pull *ndr, int ndr_flags, struct netr_SamInfo3 *r)
-{
-	uint32_t _ptr_sids;
-	uint32_t cntr_sids_1;
-	TALLOC_CTX *_mem_save_sids_0;
-	TALLOC_CTX *_mem_save_sids_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_netr_SamBaseInfo(ndr, NDR_SCALARS, &r->base));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sidcount));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sids));
-		if (_ptr_sids) {
-			NDR_PULL_ALLOC(ndr, r->sids);
-		} else {
-			r->sids = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_netr_SamBaseInfo(ndr, NDR_BUFFERS, &r->base));
-		if (r->sids) {
-			_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sids, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->sids));
-			NDR_PULL_ALLOC_N(ndr, r->sids, ndr_get_array_size(ndr, &r->sids));
-			_mem_save_sids_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sids, 0);
-			for (cntr_sids_1 = 0; cntr_sids_1 < r->sidcount; cntr_sids_1++) {
-				NDR_CHECK(ndr_pull_netr_SidAttr(ndr, NDR_SCALARS, &r->sids[cntr_sids_1]));
-			}
-			for (cntr_sids_1 = 0; cntr_sids_1 < r->sidcount; cntr_sids_1++) {
-				NDR_CHECK(ndr_pull_netr_SidAttr(ndr, NDR_BUFFERS, &r->sids[cntr_sids_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, 0);
-		}
-		if (r->sids) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->sids, r->sidcount));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_SamInfo3(struct ndr_print *ndr, const char *name, const struct netr_SamInfo3 *r)
-{
-	uint32_t cntr_sids_1;
-	ndr_print_struct(ndr, name, "netr_SamInfo3");
-	ndr->depth++;
-	ndr_print_netr_SamBaseInfo(ndr, "base", &r->base);
-	ndr_print_uint32(ndr, "sidcount", r->sidcount);
-	ndr_print_ptr(ndr, "sids", r->sids);
-	ndr->depth++;
-	if (r->sids) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "sids", r->sidcount);
-		ndr->depth++;
-		for (cntr_sids_1=0;cntr_sids_1<r->sidcount;cntr_sids_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_sids_1) != -1) {
-				ndr_print_netr_SidAttr(ndr, "sids", &r->sids[cntr_sids_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_SamInfo6(struct ndr_push *ndr, int ndr_flags, const struct netr_SamInfo6 *r)
-{
-	uint32_t cntr_sids_1;
-	uint32_t cntr_unknown4_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_netr_SamBaseInfo(ndr, NDR_SCALARS, &r->base));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sidcount));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sids));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->forest));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->principle));
-		for (cntr_unknown4_0 = 0; cntr_unknown4_0 < 20; cntr_unknown4_0++) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown4[cntr_unknown4_0]));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_netr_SamBaseInfo(ndr, NDR_BUFFERS, &r->base));
-		if (r->sids) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sidcount));
-			for (cntr_sids_1 = 0; cntr_sids_1 < r->sidcount; cntr_sids_1++) {
-				NDR_CHECK(ndr_push_netr_SidAttr(ndr, NDR_SCALARS, &r->sids[cntr_sids_1]));
-			}
-			for (cntr_sids_1 = 0; cntr_sids_1 < r->sidcount; cntr_sids_1++) {
-				NDR_CHECK(ndr_push_netr_SidAttr(ndr, NDR_BUFFERS, &r->sids[cntr_sids_1]));
-			}
-		}
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->forest));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->principle));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_SamInfo6(struct ndr_pull *ndr, int ndr_flags, struct netr_SamInfo6 *r)
-{
-	uint32_t _ptr_sids;
-	uint32_t cntr_sids_1;
-	TALLOC_CTX *_mem_save_sids_0;
-	TALLOC_CTX *_mem_save_sids_1;
-	uint32_t cntr_unknown4_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_netr_SamBaseInfo(ndr, NDR_SCALARS, &r->base));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sidcount));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sids));
-		if (_ptr_sids) {
-			NDR_PULL_ALLOC(ndr, r->sids);
-		} else {
-			r->sids = NULL;
-		}
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->forest));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->principle));
-		for (cntr_unknown4_0 = 0; cntr_unknown4_0 < 20; cntr_unknown4_0++) {
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown4[cntr_unknown4_0]));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_netr_SamBaseInfo(ndr, NDR_BUFFERS, &r->base));
-		if (r->sids) {
-			_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sids, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->sids));
-			NDR_PULL_ALLOC_N(ndr, r->sids, ndr_get_array_size(ndr, &r->sids));
-			_mem_save_sids_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sids, 0);
-			for (cntr_sids_1 = 0; cntr_sids_1 < r->sidcount; cntr_sids_1++) {
-				NDR_CHECK(ndr_pull_netr_SidAttr(ndr, NDR_SCALARS, &r->sids[cntr_sids_1]));
-			}
-			for (cntr_sids_1 = 0; cntr_sids_1 < r->sidcount; cntr_sids_1++) {
-				NDR_CHECK(ndr_pull_netr_SidAttr(ndr, NDR_BUFFERS, &r->sids[cntr_sids_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, 0);
-		}
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->forest));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->principle));
-		if (r->sids) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->sids, r->sidcount));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_SamInfo6(struct ndr_print *ndr, const char *name, const struct netr_SamInfo6 *r)
-{
-	uint32_t cntr_sids_1;
-	uint32_t cntr_unknown4_0;
-	ndr_print_struct(ndr, name, "netr_SamInfo6");
-	ndr->depth++;
-	ndr_print_netr_SamBaseInfo(ndr, "base", &r->base);
-	ndr_print_uint32(ndr, "sidcount", r->sidcount);
-	ndr_print_ptr(ndr, "sids", r->sids);
-	ndr->depth++;
-	if (r->sids) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "sids", r->sidcount);
-		ndr->depth++;
-		for (cntr_sids_1=0;cntr_sids_1<r->sidcount;cntr_sids_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_sids_1) != -1) {
-				ndr_print_netr_SidAttr(ndr, "sids", &r->sids[cntr_sids_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr_print_lsa_String(ndr, "forest", &r->forest);
-	ndr_print_lsa_String(ndr, "principle", &r->principle);
-	ndr->print(ndr, "%s: ARRAY(%d)", "unknown4", 20);
-	ndr->depth++;
-	for (cntr_unknown4_0=0;cntr_unknown4_0<20;cntr_unknown4_0++) {
-		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_unknown4_0) != -1) {
-			ndr_print_uint32(ndr, "unknown4", r->unknown4[cntr_unknown4_0]);
-			free(idx_0);
-		}
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_PacInfo(struct ndr_push *ndr, int ndr_flags, const struct netr_PacInfo *r)
-{
-	uint32_t cntr_expansionroom_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->pac_size));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->pac));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->logon_domain));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->logon_server));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->principal_name));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->auth_size));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->auth));
-		NDR_CHECK(ndr_push_netr_UserSessionKey(ndr, NDR_SCALARS, &r->user_session_key));
-		for (cntr_expansionroom_0 = 0; cntr_expansionroom_0 < 10; cntr_expansionroom_0++) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->expansionroom[cntr_expansionroom_0]));
-		}
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown4));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->pac) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->pac_size));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->pac, r->pac_size));
-		}
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->logon_domain));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->logon_server));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->principal_name));
-		if (r->auth) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->auth_size));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->auth, r->auth_size));
-		}
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown1));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown4));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_PacInfo(struct ndr_pull *ndr, int ndr_flags, struct netr_PacInfo *r)
-{
-	uint32_t _ptr_pac;
-	TALLOC_CTX *_mem_save_pac_0;
-	uint32_t _ptr_auth;
-	TALLOC_CTX *_mem_save_auth_0;
-	uint32_t cntr_expansionroom_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->pac_size));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_pac));
-		if (_ptr_pac) {
-			NDR_PULL_ALLOC(ndr, r->pac);
-		} else {
-			r->pac = NULL;
-		}
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->logon_domain));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->logon_server));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->principal_name));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->auth_size));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_auth));
-		if (_ptr_auth) {
-			NDR_PULL_ALLOC(ndr, r->auth);
-		} else {
-			r->auth = NULL;
-		}
-		NDR_CHECK(ndr_pull_netr_UserSessionKey(ndr, NDR_SCALARS, &r->user_session_key));
-		for (cntr_expansionroom_0 = 0; cntr_expansionroom_0 < 10; cntr_expansionroom_0++) {
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->expansionroom[cntr_expansionroom_0]));
-		}
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown4));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->pac) {
-			_mem_save_pac_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->pac, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->pac));
-			NDR_PULL_ALLOC_N(ndr, r->pac, ndr_get_array_size(ndr, &r->pac));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->pac, ndr_get_array_size(ndr, &r->pac)));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_pac_0, 0);
-		}
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->logon_domain));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->logon_server));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->principal_name));
-		if (r->auth) {
-			_mem_save_auth_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->auth, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->auth));
-			NDR_PULL_ALLOC_N(ndr, r->auth, ndr_get_array_size(ndr, &r->auth));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->auth, ndr_get_array_size(ndr, &r->auth)));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_auth_0, 0);
-		}
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown1));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown4));
-		if (r->pac) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->pac, r->pac_size));
-		}
-		if (r->auth) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->auth, r->auth_size));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_PacInfo(struct ndr_print *ndr, const char *name, const struct netr_PacInfo *r)
-{
-	uint32_t cntr_expansionroom_0;
-	ndr_print_struct(ndr, name, "netr_PacInfo");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "pac_size", r->pac_size);
-	ndr_print_ptr(ndr, "pac", r->pac);
-	ndr->depth++;
-	if (r->pac) {
-		ndr_print_array_uint8(ndr, "pac", r->pac, r->pac_size);
-	}
-	ndr->depth--;
-	ndr_print_lsa_String(ndr, "logon_domain", &r->logon_domain);
-	ndr_print_lsa_String(ndr, "logon_server", &r->logon_server);
-	ndr_print_lsa_String(ndr, "principal_name", &r->principal_name);
-	ndr_print_uint32(ndr, "auth_size", r->auth_size);
-	ndr_print_ptr(ndr, "auth", r->auth);
-	ndr->depth++;
-	if (r->auth) {
-		ndr_print_array_uint8(ndr, "auth", r->auth, r->auth_size);
-	}
-	ndr->depth--;
-	ndr_print_netr_UserSessionKey(ndr, "user_session_key", &r->user_session_key);
-	ndr->print(ndr, "%s: ARRAY(%d)", "expansionroom", 10);
-	ndr->depth++;
-	for (cntr_expansionroom_0=0;cntr_expansionroom_0<10;cntr_expansionroom_0++) {
-		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_expansionroom_0) != -1) {
-			ndr_print_uint32(ndr, "expansionroom", r->expansionroom[cntr_expansionroom_0]);
-			free(idx_0);
-		}
-	}
-	ndr->depth--;
-	ndr_print_lsa_String(ndr, "unknown1", &r->unknown1);
-	ndr_print_lsa_String(ndr, "unknown2", &r->unknown2);
-	ndr_print_lsa_String(ndr, "unknown3", &r->unknown3);
-	ndr_print_lsa_String(ndr, "unknown4", &r->unknown4);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_netr_Validation(struct ndr_push *ndr, int ndr_flags, const union netr_Validation *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 2: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->sam2));
-			break; }
-
-			case 3: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->sam3));
-			break; }
-
-			case 4: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->pac));
-			break; }
-
-			case 5: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->pac));
-			break; }
-
-			case 6: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->sam6));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 2:
-				if (r->sam2) {
-					NDR_CHECK(ndr_push_netr_SamInfo2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sam2));
-				}
-			break;
-
-			case 3:
-				if (r->sam3) {
-					NDR_CHECK(ndr_push_netr_SamInfo3(ndr, NDR_SCALARS|NDR_BUFFERS, r->sam3));
-				}
-			break;
-
-			case 4:
-				if (r->pac) {
-					NDR_CHECK(ndr_push_netr_PacInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->pac));
-				}
-			break;
-
-			case 5:
-				if (r->pac) {
-					NDR_CHECK(ndr_push_netr_PacInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->pac));
-				}
-			break;
-
-			case 6:
-				if (r->sam6) {
-					NDR_CHECK(ndr_push_netr_SamInfo6(ndr, NDR_SCALARS|NDR_BUFFERS, r->sam6));
-				}
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_netr_Validation(struct ndr_pull *ndr, int ndr_flags, union netr_Validation *r)
-{
-	int level;
-	uint16_t _level;
-	TALLOC_CTX *_mem_save_sam2_0;
-	TALLOC_CTX *_mem_save_sam3_0;
-	TALLOC_CTX *_mem_save_pac_0;
-	TALLOC_CTX *_mem_save_sam6_0;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 2: {
-				uint32_t _ptr_sam2;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sam2));
-				if (_ptr_sam2) {
-					NDR_PULL_ALLOC(ndr, r->sam2);
-				} else {
-					r->sam2 = NULL;
-				}
-			break; }
-
-			case 3: {
-				uint32_t _ptr_sam3;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sam3));
-				if (_ptr_sam3) {
-					NDR_PULL_ALLOC(ndr, r->sam3);
-				} else {
-					r->sam3 = NULL;
-				}
-			break; }
-
-			case 4: {
-				uint32_t _ptr_pac;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_pac));
-				if (_ptr_pac) {
-					NDR_PULL_ALLOC(ndr, r->pac);
-				} else {
-					r->pac = NULL;
-				}
-			break; }
-
-			case 5: {
-				uint32_t _ptr_pac;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_pac));
-				if (_ptr_pac) {
-					NDR_PULL_ALLOC(ndr, r->pac);
-				} else {
-					r->pac = NULL;
-				}
-			break; }
-
-			case 6: {
-				uint32_t _ptr_sam6;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sam6));
-				if (_ptr_sam6) {
-					NDR_PULL_ALLOC(ndr, r->sam6);
-				} else {
-					r->sam6 = NULL;
-				}
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 2:
-				if (r->sam2) {
-					_mem_save_sam2_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->sam2, 0);
-					NDR_CHECK(ndr_pull_netr_SamInfo2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sam2));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sam2_0, 0);
-				}
-			break;
-
-			case 3:
-				if (r->sam3) {
-					_mem_save_sam3_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->sam3, 0);
-					NDR_CHECK(ndr_pull_netr_SamInfo3(ndr, NDR_SCALARS|NDR_BUFFERS, r->sam3));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sam3_0, 0);
-				}
-			break;
-
-			case 4:
-				if (r->pac) {
-					_mem_save_pac_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->pac, 0);
-					NDR_CHECK(ndr_pull_netr_PacInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->pac));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_pac_0, 0);
-				}
-			break;
-
-			case 5:
-				if (r->pac) {
-					_mem_save_pac_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->pac, 0);
-					NDR_CHECK(ndr_pull_netr_PacInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->pac));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_pac_0, 0);
-				}
-			break;
-
-			case 6:
-				if (r->sam6) {
-					_mem_save_sam6_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->sam6, 0);
-					NDR_CHECK(ndr_pull_netr_SamInfo6(ndr, NDR_SCALARS|NDR_BUFFERS, r->sam6));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sam6_0, 0);
-				}
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_Validation(struct ndr_print *ndr, const char *name, const union netr_Validation *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "netr_Validation");
-	switch (level) {
-		case 2:
-			ndr_print_ptr(ndr, "sam2", r->sam2);
-			ndr->depth++;
-			if (r->sam2) {
-				ndr_print_netr_SamInfo2(ndr, "sam2", r->sam2);
-			}
-			ndr->depth--;
-		break;
-
-		case 3:
-			ndr_print_ptr(ndr, "sam3", r->sam3);
-			ndr->depth++;
-			if (r->sam3) {
-				ndr_print_netr_SamInfo3(ndr, "sam3", r->sam3);
-			}
-			ndr->depth--;
-		break;
-
-		case 4:
-			ndr_print_ptr(ndr, "pac", r->pac);
-			ndr->depth++;
-			if (r->pac) {
-				ndr_print_netr_PacInfo(ndr, "pac", r->pac);
-			}
-			ndr->depth--;
-		break;
-
-		case 5:
-			ndr_print_ptr(ndr, "pac", r->pac);
-			ndr->depth++;
-			if (r->pac) {
-				ndr_print_netr_PacInfo(ndr, "pac", r->pac);
-			}
-			ndr->depth--;
-		break;
-
-		case 6:
-			ndr_print_ptr(ndr, "sam6", r->sam6);
-			ndr->depth++;
-			if (r->sam6) {
-				ndr_print_netr_SamInfo6(ndr, "sam6", r->sam6);
-			}
-			ndr->depth--;
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_netr_Credential(struct ndr_push *ndr, int ndr_flags, const struct netr_Credential *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 1));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->data, 8));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_netr_Credential(struct ndr_pull *ndr, int ndr_flags, struct netr_Credential *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 1));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->data, 8));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_Credential(struct ndr_print *ndr, const char *name, const struct netr_Credential *r)
-{
-	ndr_print_struct(ndr, name, "netr_Credential");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "data", r->data, 8);
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_netr_Authenticator(struct ndr_push *ndr, int ndr_flags, const struct netr_Authenticator *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_netr_Credential(ndr, NDR_SCALARS, &r->cred));
-		NDR_CHECK(ndr_push_time_t(ndr, NDR_SCALARS, r->timestamp));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_netr_Authenticator(struct ndr_pull *ndr, int ndr_flags, struct netr_Authenticator *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_netr_Credential(ndr, NDR_SCALARS, &r->cred));
-		NDR_CHECK(ndr_pull_time_t(ndr, NDR_SCALARS, &r->timestamp));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_Authenticator(struct ndr_print *ndr, const char *name, const struct netr_Authenticator *r)
-{
-	ndr_print_struct(ndr, name, "netr_Authenticator");
-	ndr->depth++;
-	ndr_print_netr_Credential(ndr, "cred", &r->cred);
-	ndr_print_time_t(ndr, "timestamp", r->timestamp);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_LogonLevel(struct ndr_push *ndr, int ndr_flags, enum netr_LogonLevel r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_LogonLevel(struct ndr_pull *ndr, int ndr_flags, enum netr_LogonLevel *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_LogonLevel(struct ndr_print *ndr, const char *name, enum netr_LogonLevel r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case INTERACTIVE_LOGON_TYPE: val = "INTERACTIVE_LOGON_TYPE"; break;
-		case NET_LOGON_TYPE: val = "NET_LOGON_TYPE"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_netr_DELTA_DELETE_USER(struct ndr_push *ndr, int ndr_flags, const struct netr_DELTA_DELETE_USER *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->account_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown5));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown6));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown7));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown8));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->account_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->account_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->account_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->account_name, ndr_charset_length(r->account_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown1));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown4));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DELTA_DELETE_USER(struct ndr_pull *ndr, int ndr_flags, struct netr_DELTA_DELETE_USER *r)
-{
-	uint32_t _ptr_account_name;
-	TALLOC_CTX *_mem_save_account_name_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_account_name));
-		if (_ptr_account_name) {
-			NDR_PULL_ALLOC(ndr, r->account_name);
-		} else {
-			r->account_name = NULL;
-		}
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown5));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown6));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown7));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown8));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->account_name) {
-			_mem_save_account_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->account_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->account_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->account_name));
-			if (ndr_get_array_length(ndr, &r->account_name) > ndr_get_array_size(ndr, &r->account_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->account_name), ndr_get_array_length(ndr, &r->account_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->account_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->account_name, ndr_get_array_length(ndr, &r->account_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_account_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown1));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown4));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DELTA_DELETE_USER(struct ndr_print *ndr, const char *name, const struct netr_DELTA_DELETE_USER *r)
-{
-	ndr_print_struct(ndr, name, "netr_DELTA_DELETE_USER");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "account_name", r->account_name);
-	ndr->depth++;
-	if (r->account_name) {
-		ndr_print_string(ndr, "account_name", r->account_name);
-	}
-	ndr->depth--;
-	ndr_print_lsa_String(ndr, "unknown1", &r->unknown1);
-	ndr_print_lsa_String(ndr, "unknown2", &r->unknown2);
-	ndr_print_lsa_String(ndr, "unknown3", &r->unknown3);
-	ndr_print_lsa_String(ndr, "unknown4", &r->unknown4);
-	ndr_print_uint32(ndr, "unknown5", r->unknown5);
-	ndr_print_uint32(ndr, "unknown6", r->unknown6);
-	ndr_print_uint32(ndr, "unknown7", r->unknown7);
-	ndr_print_uint32(ndr, "unknown8", r->unknown8);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_USER_KEY16(struct ndr_push *ndr, int ndr_flags, const struct netr_USER_KEY16 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->length));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->length));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->flags));
-		NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, &r->pwd));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_samr_Password(ndr, NDR_BUFFERS, &r->pwd));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_USER_KEY16(struct ndr_pull *ndr, int ndr_flags, struct netr_USER_KEY16 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->length));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->flags));
-		NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, &r->pwd));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_BUFFERS, &r->pwd));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_USER_KEY16(struct ndr_print *ndr, const char *name, const struct netr_USER_KEY16 *r)
-{
-	ndr_print_struct(ndr, name, "netr_USER_KEY16");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "length", r->length);
-	ndr_print_uint16(ndr, "size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->length:r->size);
-	ndr_print_uint32(ndr, "flags", r->flags);
-	ndr_print_samr_Password(ndr, "pwd", &r->pwd);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_PasswordHistory(struct ndr_push *ndr, int ndr_flags, const struct netr_PasswordHistory *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->nt_length));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->nt_length));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->nt_flags));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lm_length));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lm_length));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->lm_flags));
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->nt_history, r->nt_length));
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->lm_history, r->lm_length));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_PasswordHistory(struct ndr_pull *ndr, int ndr_flags, struct netr_PasswordHistory *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->nt_length));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->nt_size));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->nt_flags));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lm_length));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lm_size));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->lm_flags));
-		NDR_PULL_ALLOC_N(ndr, r->nt_history, r->nt_length);
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->nt_history, r->nt_length));
-		NDR_PULL_ALLOC_N(ndr, r->lm_history, r->lm_length);
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->lm_history, r->lm_length));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_PasswordHistory(struct ndr_print *ndr, const char *name, const struct netr_PasswordHistory *r)
-{
-	ndr_print_struct(ndr, name, "netr_PasswordHistory");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "nt_length", r->nt_length);
-	ndr_print_uint16(ndr, "nt_size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->nt_length:r->nt_size);
-	ndr_print_uint32(ndr, "nt_flags", r->nt_flags);
-	ndr_print_uint16(ndr, "lm_length", r->lm_length);
-	ndr_print_uint16(ndr, "lm_size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?r->lm_length:r->lm_size);
-	ndr_print_uint32(ndr, "lm_flags", r->lm_flags);
-	ndr_print_array_uint8(ndr, "nt_history", r->nt_history, r->nt_length);
-	ndr_print_array_uint8(ndr, "lm_history", r->lm_history, r->lm_length);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_USER_KEYS2(struct ndr_push *ndr, int ndr_flags, const struct netr_USER_KEYS2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_netr_USER_KEY16(ndr, NDR_SCALARS, &r->lmpassword));
-		NDR_CHECK(ndr_push_netr_USER_KEY16(ndr, NDR_SCALARS, &r->ntpassword));
-		NDR_CHECK(ndr_push_netr_PasswordHistory(ndr, NDR_SCALARS, &r->history));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_netr_USER_KEY16(ndr, NDR_BUFFERS, &r->lmpassword));
-		NDR_CHECK(ndr_push_netr_USER_KEY16(ndr, NDR_BUFFERS, &r->ntpassword));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_USER_KEYS2(struct ndr_pull *ndr, int ndr_flags, struct netr_USER_KEYS2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_netr_USER_KEY16(ndr, NDR_SCALARS, &r->lmpassword));
-		NDR_CHECK(ndr_pull_netr_USER_KEY16(ndr, NDR_SCALARS, &r->ntpassword));
-		NDR_CHECK(ndr_pull_netr_PasswordHistory(ndr, NDR_SCALARS, &r->history));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_netr_USER_KEY16(ndr, NDR_BUFFERS, &r->lmpassword));
-		NDR_CHECK(ndr_pull_netr_USER_KEY16(ndr, NDR_BUFFERS, &r->ntpassword));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_USER_KEYS2(struct ndr_print *ndr, const char *name, const struct netr_USER_KEYS2 *r)
-{
-	ndr_print_struct(ndr, name, "netr_USER_KEYS2");
-	ndr->depth++;
-	ndr_print_netr_USER_KEY16(ndr, "lmpassword", &r->lmpassword);
-	ndr_print_netr_USER_KEY16(ndr, "ntpassword", &r->ntpassword);
-	ndr_print_netr_PasswordHistory(ndr, "history", &r->history);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_USER_KEY_UNION(struct ndr_push *ndr, int ndr_flags, const struct netr_USER_KEY_UNION *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_netr_USER_KEYS2(ndr, NDR_SCALARS, &r->keys2));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_netr_USER_KEYS2(ndr, NDR_BUFFERS, &r->keys2));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_USER_KEY_UNION(struct ndr_pull *ndr, int ndr_flags, struct netr_USER_KEY_UNION *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_netr_USER_KEYS2(ndr, NDR_SCALARS, &r->keys2));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_netr_USER_KEYS2(ndr, NDR_BUFFERS, &r->keys2));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_USER_KEY_UNION(struct ndr_print *ndr, const char *name, const struct netr_USER_KEY_UNION *r)
-{
-	ndr_print_struct(ndr, name, "netr_USER_KEY_UNION");
-	ndr->depth++;
-	ndr_print_netr_USER_KEYS2(ndr, "keys2", &r->keys2);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_netr_USER_KEYS(struct ndr_push *ndr, int ndr_flags, const struct netr_USER_KEYS *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->version));
-		NDR_CHECK(ndr_push_netr_USER_KEY_UNION(ndr, NDR_SCALARS, &r->keys));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_netr_USER_KEY_UNION(ndr, NDR_BUFFERS, &r->keys));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_netr_USER_KEYS(struct ndr_pull *ndr, int ndr_flags, struct netr_USER_KEYS *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->version));
-		NDR_CHECK(ndr_pull_netr_USER_KEY_UNION(ndr, NDR_SCALARS, &r->keys));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_netr_USER_KEY_UNION(ndr, NDR_BUFFERS, &r->keys));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_USER_KEYS(struct ndr_print *ndr, const char *name, const struct netr_USER_KEYS *r)
-{
-	ndr_print_struct(ndr, name, "netr_USER_KEYS");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "version", r->version);
-	ndr_print_netr_USER_KEY_UNION(ndr, "keys", &r->keys);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_USER_PRIVATE_INFO(struct ndr_push *ndr, int ndr_flags, const struct netr_USER_PRIVATE_INFO *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->SensitiveDataFlag));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->DataLength));
-		{
-			uint32_t _flags_save_uint8 = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-			NDR_CHECK(ndr_push_unique_ptr(ndr, r->SensitiveData));
-			ndr->flags = _flags_save_uint8;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		{
-			uint32_t _flags_save_uint8 = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-			if (r->SensitiveData) {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->DataLength));
-				NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->SensitiveData, r->DataLength));
-			}
-			ndr->flags = _flags_save_uint8;
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_USER_PRIVATE_INFO(struct ndr_pull *ndr, int ndr_flags, struct netr_USER_PRIVATE_INFO *r)
-{
-	uint32_t _ptr_SensitiveData;
-	TALLOC_CTX *_mem_save_SensitiveData_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->SensitiveDataFlag));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->DataLength));
-		{
-			uint32_t _flags_save_uint8 = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_SensitiveData));
-			if (_ptr_SensitiveData) {
-				NDR_PULL_ALLOC(ndr, r->SensitiveData);
-			} else {
-				r->SensitiveData = NULL;
-			}
-			ndr->flags = _flags_save_uint8;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		{
-			uint32_t _flags_save_uint8 = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-			if (r->SensitiveData) {
-				_mem_save_SensitiveData_0 = NDR_PULL_GET_MEM_CTX(ndr);
-				NDR_PULL_SET_MEM_CTX(ndr, r->SensitiveData, 0);
-				NDR_CHECK(ndr_pull_array_size(ndr, &r->SensitiveData));
-				NDR_PULL_ALLOC_N(ndr, r->SensitiveData, ndr_get_array_size(ndr, &r->SensitiveData));
-				NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->SensitiveData, ndr_get_array_size(ndr, &r->SensitiveData)));
-				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_SensitiveData_0, 0);
-			}
-			ndr->flags = _flags_save_uint8;
-		}
-		if (r->SensitiveData) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->SensitiveData, r->DataLength));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_USER_PRIVATE_INFO(struct ndr_print *ndr, const char *name, const struct netr_USER_PRIVATE_INFO *r)
-{
-	ndr_print_struct(ndr, name, "netr_USER_PRIVATE_INFO");
-	ndr->depth++;
-	ndr_print_uint8(ndr, "SensitiveDataFlag", r->SensitiveDataFlag);
-	ndr_print_uint32(ndr, "DataLength", r->DataLength);
-	ndr_print_ptr(ndr, "SensitiveData", r->SensitiveData);
-	ndr->depth++;
-	if (r->SensitiveData) {
-		ndr_print_array_uint8(ndr, "SensitiveData", r->SensitiveData, r->DataLength);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DELTA_USER(struct ndr_push *ndr, int ndr_flags, const struct netr_DELTA_USER *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->account_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->full_name));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->primary_gid));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->home_directory));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->home_drive));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->logon_script));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->description));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->workstations));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->last_logon));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->last_logoff));
-		NDR_CHECK(ndr_push_samr_LogonHours(ndr, NDR_SCALARS, &r->logon_hours));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->bad_password_count));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->logon_count));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->last_password_change));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->acct_expiry));
-		NDR_CHECK(ndr_push_samr_AcctFlags(ndr, NDR_SCALARS, r->acct_flags));
-		NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, &r->lmpassword));
-		NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, &r->ntpassword));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->nt_password_present));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->lm_password_present));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->password_expired));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->comment));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->parameters));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->country_code));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->code_page));
-		NDR_CHECK(ndr_push_netr_USER_PRIVATE_INFO(ndr, NDR_SCALARS, &r->user_private_info));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->SecurityInformation));
-		NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_SCALARS, &r->sdbuf));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->profile_path));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown5));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown6));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown7));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown8));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->account_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->full_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->home_directory));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->home_drive));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->logon_script));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->description));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->workstations));
-		NDR_CHECK(ndr_push_samr_LogonHours(ndr, NDR_BUFFERS, &r->logon_hours));
-		NDR_CHECK(ndr_push_samr_Password(ndr, NDR_BUFFERS, &r->lmpassword));
-		NDR_CHECK(ndr_push_samr_Password(ndr, NDR_BUFFERS, &r->ntpassword));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->comment));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->parameters));
-		NDR_CHECK(ndr_push_netr_USER_PRIVATE_INFO(ndr, NDR_BUFFERS, &r->user_private_info));
-		NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_BUFFERS, &r->sdbuf));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->profile_path));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown4));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DELTA_USER(struct ndr_pull *ndr, int ndr_flags, struct netr_DELTA_USER *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->account_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->full_name));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->primary_gid));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->home_directory));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->home_drive));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->logon_script));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->description));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->workstations));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->last_logon));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->last_logoff));
-		NDR_CHECK(ndr_pull_samr_LogonHours(ndr, NDR_SCALARS, &r->logon_hours));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->bad_password_count));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->logon_count));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->last_password_change));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->acct_expiry));
-		NDR_CHECK(ndr_pull_samr_AcctFlags(ndr, NDR_SCALARS, &r->acct_flags));
-		NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, &r->lmpassword));
-		NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, &r->ntpassword));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->nt_password_present));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->lm_password_present));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->password_expired));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->comment));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->parameters));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->country_code));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->code_page));
-		NDR_CHECK(ndr_pull_netr_USER_PRIVATE_INFO(ndr, NDR_SCALARS, &r->user_private_info));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->SecurityInformation));
-		NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_SCALARS, &r->sdbuf));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->profile_path));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown5));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown6));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown7));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown8));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->account_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->full_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->home_directory));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->home_drive));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->logon_script));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->description));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->workstations));
-		NDR_CHECK(ndr_pull_samr_LogonHours(ndr, NDR_BUFFERS, &r->logon_hours));
-		NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_BUFFERS, &r->lmpassword));
-		NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_BUFFERS, &r->ntpassword));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->comment));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->parameters));
-		NDR_CHECK(ndr_pull_netr_USER_PRIVATE_INFO(ndr, NDR_BUFFERS, &r->user_private_info));
-		NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_BUFFERS, &r->sdbuf));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->profile_path));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown4));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DELTA_USER(struct ndr_print *ndr, const char *name, const struct netr_DELTA_USER *r)
-{
-	ndr_print_struct(ndr, name, "netr_DELTA_USER");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "account_name", &r->account_name);
-	ndr_print_lsa_String(ndr, "full_name", &r->full_name);
-	ndr_print_uint32(ndr, "rid", r->rid);
-	ndr_print_uint32(ndr, "primary_gid", r->primary_gid);
-	ndr_print_lsa_String(ndr, "home_directory", &r->home_directory);
-	ndr_print_lsa_String(ndr, "home_drive", &r->home_drive);
-	ndr_print_lsa_String(ndr, "logon_script", &r->logon_script);
-	ndr_print_lsa_String(ndr, "description", &r->description);
-	ndr_print_lsa_String(ndr, "workstations", &r->workstations);
-	ndr_print_NTTIME(ndr, "last_logon", r->last_logon);
-	ndr_print_NTTIME(ndr, "last_logoff", r->last_logoff);
-	ndr_print_samr_LogonHours(ndr, "logon_hours", &r->logon_hours);
-	ndr_print_uint16(ndr, "bad_password_count", r->bad_password_count);
-	ndr_print_uint16(ndr, "logon_count", r->logon_count);
-	ndr_print_NTTIME(ndr, "last_password_change", r->last_password_change);
-	ndr_print_NTTIME(ndr, "acct_expiry", r->acct_expiry);
-	ndr_print_samr_AcctFlags(ndr, "acct_flags", r->acct_flags);
-	ndr_print_samr_Password(ndr, "lmpassword", &r->lmpassword);
-	ndr_print_samr_Password(ndr, "ntpassword", &r->ntpassword);
-	ndr_print_uint8(ndr, "nt_password_present", r->nt_password_present);
-	ndr_print_uint8(ndr, "lm_password_present", r->lm_password_present);
-	ndr_print_uint8(ndr, "password_expired", r->password_expired);
-	ndr_print_lsa_String(ndr, "comment", &r->comment);
-	ndr_print_lsa_String(ndr, "parameters", &r->parameters);
-	ndr_print_uint16(ndr, "country_code", r->country_code);
-	ndr_print_uint16(ndr, "code_page", r->code_page);
-	ndr_print_netr_USER_PRIVATE_INFO(ndr, "user_private_info", &r->user_private_info);
-	ndr_print_uint32(ndr, "SecurityInformation", r->SecurityInformation);
-	ndr_print_sec_desc_buf(ndr, "sdbuf", &r->sdbuf);
-	ndr_print_lsa_String(ndr, "profile_path", &r->profile_path);
-	ndr_print_lsa_String(ndr, "unknown2", &r->unknown2);
-	ndr_print_lsa_String(ndr, "unknown3", &r->unknown3);
-	ndr_print_lsa_String(ndr, "unknown4", &r->unknown4);
-	ndr_print_uint32(ndr, "unknown5", r->unknown5);
-	ndr_print_uint32(ndr, "unknown6", r->unknown6);
-	ndr_print_uint32(ndr, "unknown7", r->unknown7);
-	ndr_print_uint32(ndr, "unknown8", r->unknown8);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DELTA_DOMAIN(struct ndr_push *ndr, int ndr_flags, const struct netr_DELTA_DOMAIN *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->domain_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->comment));
-		NDR_CHECK(ndr_push_dlong(ndr, NDR_SCALARS, r->force_logoff_time));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->min_password_length));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->password_history_length));
-		NDR_CHECK(ndr_push_dlong(ndr, NDR_SCALARS, r->max_password_age));
-		NDR_CHECK(ndr_push_dlong(ndr, NDR_SCALARS, r->min_password_age));
-		NDR_CHECK(ndr_push_udlong(ndr, NDR_SCALARS, r->sequence_num));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->domain_create_time));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->SecurityInformation));
-		NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_SCALARS, &r->sdbuf));
-		NDR_CHECK(ndr_push_lsa_BinaryString(ndr, NDR_SCALARS, &r->account_lockout));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->logon_to_chgpass));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown6));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown7));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown8));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->domain_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->comment));
-		NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_BUFFERS, &r->sdbuf));
-		NDR_CHECK(ndr_push_lsa_BinaryString(ndr, NDR_BUFFERS, &r->account_lockout));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown4));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DELTA_DOMAIN(struct ndr_pull *ndr, int ndr_flags, struct netr_DELTA_DOMAIN *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->domain_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->comment));
-		NDR_CHECK(ndr_pull_dlong(ndr, NDR_SCALARS, &r->force_logoff_time));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->min_password_length));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->password_history_length));
-		NDR_CHECK(ndr_pull_dlong(ndr, NDR_SCALARS, &r->max_password_age));
-		NDR_CHECK(ndr_pull_dlong(ndr, NDR_SCALARS, &r->min_password_age));
-		NDR_CHECK(ndr_pull_udlong(ndr, NDR_SCALARS, &r->sequence_num));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->domain_create_time));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->SecurityInformation));
-		NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_SCALARS, &r->sdbuf));
-		NDR_CHECK(ndr_pull_lsa_BinaryString(ndr, NDR_SCALARS, &r->account_lockout));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->logon_to_chgpass));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown6));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown7));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown8));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->domain_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->comment));
-		NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_BUFFERS, &r->sdbuf));
-		NDR_CHECK(ndr_pull_lsa_BinaryString(ndr, NDR_BUFFERS, &r->account_lockout));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown4));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DELTA_DOMAIN(struct ndr_print *ndr, const char *name, const struct netr_DELTA_DOMAIN *r)
-{
-	ndr_print_struct(ndr, name, "netr_DELTA_DOMAIN");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "domain_name", &r->domain_name);
-	ndr_print_lsa_String(ndr, "comment", &r->comment);
-	ndr_print_dlong(ndr, "force_logoff_time", r->force_logoff_time);
-	ndr_print_uint16(ndr, "min_password_length", r->min_password_length);
-	ndr_print_uint16(ndr, "password_history_length", r->password_history_length);
-	ndr_print_dlong(ndr, "max_password_age", r->max_password_age);
-	ndr_print_dlong(ndr, "min_password_age", r->min_password_age);
-	ndr_print_udlong(ndr, "sequence_num", r->sequence_num);
-	ndr_print_NTTIME(ndr, "domain_create_time", r->domain_create_time);
-	ndr_print_uint32(ndr, "SecurityInformation", r->SecurityInformation);
-	ndr_print_sec_desc_buf(ndr, "sdbuf", &r->sdbuf);
-	ndr_print_lsa_BinaryString(ndr, "account_lockout", &r->account_lockout);
-	ndr_print_lsa_String(ndr, "unknown2", &r->unknown2);
-	ndr_print_lsa_String(ndr, "unknown3", &r->unknown3);
-	ndr_print_lsa_String(ndr, "unknown4", &r->unknown4);
-	ndr_print_uint32(ndr, "logon_to_chgpass", r->logon_to_chgpass);
-	ndr_print_uint32(ndr, "unknown6", r->unknown6);
-	ndr_print_uint32(ndr, "unknown7", r->unknown7);
-	ndr_print_uint32(ndr, "unknown8", r->unknown8);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DELTA_GROUP(struct ndr_push *ndr, int ndr_flags, const struct netr_DELTA_GROUP *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->group_name));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->attributes));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->description));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->SecurityInformation));
-		NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_SCALARS, &r->sdbuf));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown5));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown6));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown7));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown8));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->group_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->description));
-		NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_BUFFERS, &r->sdbuf));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown1));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown4));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DELTA_GROUP(struct ndr_pull *ndr, int ndr_flags, struct netr_DELTA_GROUP *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->group_name));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->attributes));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->description));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->SecurityInformation));
-		NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_SCALARS, &r->sdbuf));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown5));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown6));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown7));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown8));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->group_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->description));
-		NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_BUFFERS, &r->sdbuf));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown1));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown4));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DELTA_GROUP(struct ndr_print *ndr, const char *name, const struct netr_DELTA_GROUP *r)
-{
-	ndr_print_struct(ndr, name, "netr_DELTA_GROUP");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "group_name", &r->group_name);
-	ndr_print_uint32(ndr, "rid", r->rid);
-	ndr_print_uint32(ndr, "attributes", r->attributes);
-	ndr_print_lsa_String(ndr, "description", &r->description);
-	ndr_print_uint32(ndr, "SecurityInformation", r->SecurityInformation);
-	ndr_print_sec_desc_buf(ndr, "sdbuf", &r->sdbuf);
-	ndr_print_lsa_String(ndr, "unknown1", &r->unknown1);
-	ndr_print_lsa_String(ndr, "unknown2", &r->unknown2);
-	ndr_print_lsa_String(ndr, "unknown3", &r->unknown3);
-	ndr_print_lsa_String(ndr, "unknown4", &r->unknown4);
-	ndr_print_uint32(ndr, "unknown5", r->unknown5);
-	ndr_print_uint32(ndr, "unknown6", r->unknown6);
-	ndr_print_uint32(ndr, "unknown7", r->unknown7);
-	ndr_print_uint32(ndr, "unknown8", r->unknown8);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DELTA_RENAME(struct ndr_push *ndr, int ndr_flags, const struct netr_DELTA_RENAME *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->OldName));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->NewName));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown5));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown6));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown7));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown8));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->OldName));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->NewName));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown1));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown4));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DELTA_RENAME(struct ndr_pull *ndr, int ndr_flags, struct netr_DELTA_RENAME *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->OldName));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->NewName));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown5));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown6));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown7));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown8));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->OldName));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->NewName));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown1));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown4));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DELTA_RENAME(struct ndr_print *ndr, const char *name, const struct netr_DELTA_RENAME *r)
-{
-	ndr_print_struct(ndr, name, "netr_DELTA_RENAME");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "OldName", &r->OldName);
-	ndr_print_lsa_String(ndr, "NewName", &r->NewName);
-	ndr_print_lsa_String(ndr, "unknown1", &r->unknown1);
-	ndr_print_lsa_String(ndr, "unknown2", &r->unknown2);
-	ndr_print_lsa_String(ndr, "unknown3", &r->unknown3);
-	ndr_print_lsa_String(ndr, "unknown4", &r->unknown4);
-	ndr_print_uint32(ndr, "unknown5", r->unknown5);
-	ndr_print_uint32(ndr, "unknown6", r->unknown6);
-	ndr_print_uint32(ndr, "unknown7", r->unknown7);
-	ndr_print_uint32(ndr, "unknown8", r->unknown8);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DELTA_GROUP_MEMBER(struct ndr_push *ndr, int ndr_flags, const struct netr_DELTA_GROUP_MEMBER *r)
-{
-	uint32_t cntr_rids_1;
-	uint32_t cntr_attribs_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->rids));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->attribs));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_rids));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown1));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown2));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown3));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown4));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->rids) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_rids));
-			for (cntr_rids_1 = 0; cntr_rids_1 < r->num_rids; cntr_rids_1++) {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rids[cntr_rids_1]));
-			}
-		}
-		if (r->attribs) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_rids));
-			for (cntr_attribs_1 = 0; cntr_attribs_1 < r->num_rids; cntr_attribs_1++) {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->attribs[cntr_attribs_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DELTA_GROUP_MEMBER(struct ndr_pull *ndr, int ndr_flags, struct netr_DELTA_GROUP_MEMBER *r)
-{
-	uint32_t _ptr_rids;
-	uint32_t cntr_rids_1;
-	TALLOC_CTX *_mem_save_rids_0;
-	TALLOC_CTX *_mem_save_rids_1;
-	uint32_t _ptr_attribs;
-	uint32_t cntr_attribs_1;
-	TALLOC_CTX *_mem_save_attribs_0;
-	TALLOC_CTX *_mem_save_attribs_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_rids));
-		if (_ptr_rids) {
-			NDR_PULL_ALLOC(ndr, r->rids);
-		} else {
-			r->rids = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_attribs));
-		if (_ptr_attribs) {
-			NDR_PULL_ALLOC(ndr, r->attribs);
-		} else {
-			r->attribs = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_rids));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown4));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->rids) {
-			_mem_save_rids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->rids, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->rids));
-			NDR_PULL_ALLOC_N(ndr, r->rids, ndr_get_array_size(ndr, &r->rids));
-			_mem_save_rids_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->rids, 0);
-			for (cntr_rids_1 = 0; cntr_rids_1 < r->num_rids; cntr_rids_1++) {
-				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rids[cntr_rids_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rids_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rids_0, 0);
-		}
-		if (r->attribs) {
-			_mem_save_attribs_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->attribs, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->attribs));
-			NDR_PULL_ALLOC_N(ndr, r->attribs, ndr_get_array_size(ndr, &r->attribs));
-			_mem_save_attribs_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->attribs, 0);
-			for (cntr_attribs_1 = 0; cntr_attribs_1 < r->num_rids; cntr_attribs_1++) {
-				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->attribs[cntr_attribs_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_attribs_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_attribs_0, 0);
-		}
-		if (r->rids) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->rids, r->num_rids));
-		}
-		if (r->attribs) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->attribs, r->num_rids));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DELTA_GROUP_MEMBER(struct ndr_print *ndr, const char *name, const struct netr_DELTA_GROUP_MEMBER *r)
-{
-	uint32_t cntr_rids_1;
-	uint32_t cntr_attribs_1;
-	ndr_print_struct(ndr, name, "netr_DELTA_GROUP_MEMBER");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "rids", r->rids);
-	ndr->depth++;
-	if (r->rids) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "rids", r->num_rids);
-		ndr->depth++;
-		for (cntr_rids_1=0;cntr_rids_1<r->num_rids;cntr_rids_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_rids_1) != -1) {
-				ndr_print_uint32(ndr, "rids", r->rids[cntr_rids_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "attribs", r->attribs);
-	ndr->depth++;
-	if (r->attribs) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "attribs", r->num_rids);
-		ndr->depth++;
-		for (cntr_attribs_1=0;cntr_attribs_1<r->num_rids;cntr_attribs_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_attribs_1) != -1) {
-				ndr_print_uint32(ndr, "attribs", r->attribs[cntr_attribs_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "num_rids", r->num_rids);
-	ndr_print_uint32(ndr, "unknown1", r->unknown1);
-	ndr_print_uint32(ndr, "unknown2", r->unknown2);
-	ndr_print_uint32(ndr, "unknown3", r->unknown3);
-	ndr_print_uint32(ndr, "unknown4", r->unknown4);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DELTA_ALIAS(struct ndr_push *ndr, int ndr_flags, const struct netr_DELTA_ALIAS *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->alias_name));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->SecurityInformation));
-		NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_SCALARS, &r->sdbuf));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->description));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown5));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown6));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown7));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown8));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->alias_name));
-		NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_BUFFERS, &r->sdbuf));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->description));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown4));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DELTA_ALIAS(struct ndr_pull *ndr, int ndr_flags, struct netr_DELTA_ALIAS *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->alias_name));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->SecurityInformation));
-		NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_SCALARS, &r->sdbuf));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->description));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown5));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown6));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown7));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown8));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->alias_name));
-		NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_BUFFERS, &r->sdbuf));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->description));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown4));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DELTA_ALIAS(struct ndr_print *ndr, const char *name, const struct netr_DELTA_ALIAS *r)
-{
-	ndr_print_struct(ndr, name, "netr_DELTA_ALIAS");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "alias_name", &r->alias_name);
-	ndr_print_uint32(ndr, "rid", r->rid);
-	ndr_print_uint32(ndr, "SecurityInformation", r->SecurityInformation);
-	ndr_print_sec_desc_buf(ndr, "sdbuf", &r->sdbuf);
-	ndr_print_lsa_String(ndr, "description", &r->description);
-	ndr_print_lsa_String(ndr, "unknown2", &r->unknown2);
-	ndr_print_lsa_String(ndr, "unknown3", &r->unknown3);
-	ndr_print_lsa_String(ndr, "unknown4", &r->unknown4);
-	ndr_print_uint32(ndr, "unknown5", r->unknown5);
-	ndr_print_uint32(ndr, "unknown6", r->unknown6);
-	ndr_print_uint32(ndr, "unknown7", r->unknown7);
-	ndr_print_uint32(ndr, "unknown8", r->unknown8);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DELTA_ALIAS_MEMBER(struct ndr_push *ndr, int ndr_flags, const struct netr_DELTA_ALIAS_MEMBER *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_SidArray(ndr, NDR_SCALARS, &r->sids));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown1));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown2));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown3));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown4));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_SidArray(ndr, NDR_BUFFERS, &r->sids));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DELTA_ALIAS_MEMBER(struct ndr_pull *ndr, int ndr_flags, struct netr_DELTA_ALIAS_MEMBER *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_SidArray(ndr, NDR_SCALARS, &r->sids));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown4));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_SidArray(ndr, NDR_BUFFERS, &r->sids));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DELTA_ALIAS_MEMBER(struct ndr_print *ndr, const char *name, const struct netr_DELTA_ALIAS_MEMBER *r)
-{
-	ndr_print_struct(ndr, name, "netr_DELTA_ALIAS_MEMBER");
-	ndr->depth++;
-	ndr_print_lsa_SidArray(ndr, "sids", &r->sids);
-	ndr_print_uint32(ndr, "unknown1", r->unknown1);
-	ndr_print_uint32(ndr, "unknown2", r->unknown2);
-	ndr_print_uint32(ndr, "unknown3", r->unknown3);
-	ndr_print_uint32(ndr, "unknown4", r->unknown4);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_QUOTA_LIMITS(struct ndr_push *ndr, int ndr_flags, const struct netr_QUOTA_LIMITS *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->pagedpoollimit));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->nonpagedpoollimit));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->minimumworkingsetsize));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maximumworkingsetsize));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->pagefilelimit));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->timelimit));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_QUOTA_LIMITS(struct ndr_pull *ndr, int ndr_flags, struct netr_QUOTA_LIMITS *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->pagedpoollimit));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->nonpagedpoollimit));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->minimumworkingsetsize));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maximumworkingsetsize));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->pagefilelimit));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->timelimit));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_QUOTA_LIMITS(struct ndr_print *ndr, const char *name, const struct netr_QUOTA_LIMITS *r)
-{
-	ndr_print_struct(ndr, name, "netr_QUOTA_LIMITS");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "pagedpoollimit", r->pagedpoollimit);
-	ndr_print_uint32(ndr, "nonpagedpoollimit", r->nonpagedpoollimit);
-	ndr_print_uint32(ndr, "minimumworkingsetsize", r->minimumworkingsetsize);
-	ndr_print_uint32(ndr, "maximumworkingsetsize", r->maximumworkingsetsize);
-	ndr_print_uint32(ndr, "pagefilelimit", r->pagefilelimit);
-	ndr_print_NTTIME(ndr, "timelimit", r->timelimit);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DELTA_POLICY(struct ndr_push *ndr, int ndr_flags, const struct netr_DELTA_POLICY *r)
-{
-	uint32_t cntr_eventauditoptions_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxlogsize));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->auditretentionperiod));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->auditingmode));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxauditeventcount));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->eventauditoptions));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->primary_domain_name));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sid));
-		NDR_CHECK(ndr_push_netr_QUOTA_LIMITS(ndr, NDR_SCALARS, &r->quota_limits));
-		NDR_CHECK(ndr_push_udlong(ndr, NDR_SCALARS, r->sequence_num));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->db_create_time));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->SecurityInformation));
-		NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_SCALARS, &r->sdbuf));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown5));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown6));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown7));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown8));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->eventauditoptions) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxauditeventcount + 1));
-			for (cntr_eventauditoptions_1 = 0; cntr_eventauditoptions_1 < r->maxauditeventcount + 1; cntr_eventauditoptions_1++) {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->eventauditoptions[cntr_eventauditoptions_1]));
-			}
-		}
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->primary_domain_name));
-		if (r->sid) {
-			NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-		}
-		NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_BUFFERS, &r->sdbuf));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown1));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown4));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DELTA_POLICY(struct ndr_pull *ndr, int ndr_flags, struct netr_DELTA_POLICY *r)
-{
-	uint32_t _ptr_eventauditoptions;
-	uint32_t cntr_eventauditoptions_1;
-	TALLOC_CTX *_mem_save_eventauditoptions_0;
-	TALLOC_CTX *_mem_save_eventauditoptions_1;
-	uint32_t _ptr_sid;
-	TALLOC_CTX *_mem_save_sid_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxlogsize));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->auditretentionperiod));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->auditingmode));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxauditeventcount));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_eventauditoptions));
-		if (_ptr_eventauditoptions) {
-			NDR_PULL_ALLOC(ndr, r->eventauditoptions);
-		} else {
-			r->eventauditoptions = NULL;
-		}
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->primary_domain_name));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sid));
-		if (_ptr_sid) {
-			NDR_PULL_ALLOC(ndr, r->sid);
-		} else {
-			r->sid = NULL;
-		}
-		NDR_CHECK(ndr_pull_netr_QUOTA_LIMITS(ndr, NDR_SCALARS, &r->quota_limits));
-		NDR_CHECK(ndr_pull_udlong(ndr, NDR_SCALARS, &r->sequence_num));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->db_create_time));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->SecurityInformation));
-		NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_SCALARS, &r->sdbuf));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown5));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown6));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown7));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown8));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->eventauditoptions) {
-			_mem_save_eventauditoptions_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->eventauditoptions, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->eventauditoptions));
-			NDR_PULL_ALLOC_N(ndr, r->eventauditoptions, ndr_get_array_size(ndr, &r->eventauditoptions));
-			_mem_save_eventauditoptions_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->eventauditoptions, 0);
-			for (cntr_eventauditoptions_1 = 0; cntr_eventauditoptions_1 < r->maxauditeventcount + 1; cntr_eventauditoptions_1++) {
-				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->eventauditoptions[cntr_eventauditoptions_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_eventauditoptions_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_eventauditoptions_0, 0);
-		}
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->primary_domain_name));
-		if (r->sid) {
-			_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sid, 0);
-			NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, 0);
-		}
-		NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_BUFFERS, &r->sdbuf));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown1));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown4));
-		if (r->eventauditoptions) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->eventauditoptions, r->maxauditeventcount + 1));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DELTA_POLICY(struct ndr_print *ndr, const char *name, const struct netr_DELTA_POLICY *r)
-{
-	uint32_t cntr_eventauditoptions_1;
-	ndr_print_struct(ndr, name, "netr_DELTA_POLICY");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "maxlogsize", r->maxlogsize);
-	ndr_print_NTTIME(ndr, "auditretentionperiod", r->auditretentionperiod);
-	ndr_print_uint8(ndr, "auditingmode", r->auditingmode);
-	ndr_print_uint32(ndr, "maxauditeventcount", r->maxauditeventcount);
-	ndr_print_ptr(ndr, "eventauditoptions", r->eventauditoptions);
-	ndr->depth++;
-	if (r->eventauditoptions) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "eventauditoptions", r->maxauditeventcount + 1);
-		ndr->depth++;
-		for (cntr_eventauditoptions_1=0;cntr_eventauditoptions_1<r->maxauditeventcount + 1;cntr_eventauditoptions_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_eventauditoptions_1) != -1) {
-				ndr_print_uint32(ndr, "eventauditoptions", r->eventauditoptions[cntr_eventauditoptions_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr_print_lsa_String(ndr, "primary_domain_name", &r->primary_domain_name);
-	ndr_print_ptr(ndr, "sid", r->sid);
-	ndr->depth++;
-	if (r->sid) {
-		ndr_print_dom_sid2(ndr, "sid", r->sid);
-	}
-	ndr->depth--;
-	ndr_print_netr_QUOTA_LIMITS(ndr, "quota_limits", &r->quota_limits);
-	ndr_print_udlong(ndr, "sequence_num", r->sequence_num);
-	ndr_print_NTTIME(ndr, "db_create_time", r->db_create_time);
-	ndr_print_uint32(ndr, "SecurityInformation", r->SecurityInformation);
-	ndr_print_sec_desc_buf(ndr, "sdbuf", &r->sdbuf);
-	ndr_print_lsa_String(ndr, "unknown1", &r->unknown1);
-	ndr_print_lsa_String(ndr, "unknown2", &r->unknown2);
-	ndr_print_lsa_String(ndr, "unknown3", &r->unknown3);
-	ndr_print_lsa_String(ndr, "unknown4", &r->unknown4);
-	ndr_print_uint32(ndr, "unknown5", r->unknown5);
-	ndr_print_uint32(ndr, "unknown6", r->unknown6);
-	ndr_print_uint32(ndr, "unknown7", r->unknown7);
-	ndr_print_uint32(ndr, "unknown8", r->unknown8);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DELTA_TRUSTED_DOMAIN(struct ndr_push *ndr, int ndr_flags, const struct netr_DELTA_TRUSTED_DOMAIN *r)
-{
-	uint32_t cntr_controller_names_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->domain_name));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_controllers));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->controller_names));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->SecurityInformation));
-		NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_SCALARS, &r->sdbuf));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->posix_offset));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown6));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown7));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown8));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->domain_name));
-		if (r->controller_names) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_controllers));
-			for (cntr_controller_names_1 = 0; cntr_controller_names_1 < r->num_controllers; cntr_controller_names_1++) {
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->controller_names[cntr_controller_names_1]));
-			}
-			for (cntr_controller_names_1 = 0; cntr_controller_names_1 < r->num_controllers; cntr_controller_names_1++) {
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->controller_names[cntr_controller_names_1]));
-			}
-		}
-		NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_BUFFERS, &r->sdbuf));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown1));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown4));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DELTA_TRUSTED_DOMAIN(struct ndr_pull *ndr, int ndr_flags, struct netr_DELTA_TRUSTED_DOMAIN *r)
-{
-	uint32_t _ptr_controller_names;
-	uint32_t cntr_controller_names_1;
-	TALLOC_CTX *_mem_save_controller_names_0;
-	TALLOC_CTX *_mem_save_controller_names_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->domain_name));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_controllers));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_controller_names));
-		if (_ptr_controller_names) {
-			NDR_PULL_ALLOC(ndr, r->controller_names);
-		} else {
-			r->controller_names = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->SecurityInformation));
-		NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_SCALARS, &r->sdbuf));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->posix_offset));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown6));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown7));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown8));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->domain_name));
-		if (r->controller_names) {
-			_mem_save_controller_names_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->controller_names, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->controller_names));
-			NDR_PULL_ALLOC_N(ndr, r->controller_names, ndr_get_array_size(ndr, &r->controller_names));
-			_mem_save_controller_names_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->controller_names, 0);
-			for (cntr_controller_names_1 = 0; cntr_controller_names_1 < r->num_controllers; cntr_controller_names_1++) {
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->controller_names[cntr_controller_names_1]));
-			}
-			for (cntr_controller_names_1 = 0; cntr_controller_names_1 < r->num_controllers; cntr_controller_names_1++) {
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->controller_names[cntr_controller_names_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_controller_names_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_controller_names_0, 0);
-		}
-		NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_BUFFERS, &r->sdbuf));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown1));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown4));
-		if (r->controller_names) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->controller_names, r->num_controllers));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DELTA_TRUSTED_DOMAIN(struct ndr_print *ndr, const char *name, const struct netr_DELTA_TRUSTED_DOMAIN *r)
-{
-	uint32_t cntr_controller_names_1;
-	ndr_print_struct(ndr, name, "netr_DELTA_TRUSTED_DOMAIN");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "domain_name", &r->domain_name);
-	ndr_print_uint32(ndr, "num_controllers", r->num_controllers);
-	ndr_print_ptr(ndr, "controller_names", r->controller_names);
-	ndr->depth++;
-	if (r->controller_names) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "controller_names", r->num_controllers);
-		ndr->depth++;
-		for (cntr_controller_names_1=0;cntr_controller_names_1<r->num_controllers;cntr_controller_names_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_controller_names_1) != -1) {
-				ndr_print_lsa_String(ndr, "controller_names", &r->controller_names[cntr_controller_names_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "SecurityInformation", r->SecurityInformation);
-	ndr_print_sec_desc_buf(ndr, "sdbuf", &r->sdbuf);
-	ndr_print_lsa_String(ndr, "unknown1", &r->unknown1);
-	ndr_print_lsa_String(ndr, "unknown2", &r->unknown2);
-	ndr_print_lsa_String(ndr, "unknown3", &r->unknown3);
-	ndr_print_lsa_String(ndr, "unknown4", &r->unknown4);
-	ndr_print_uint32(ndr, "posix_offset", r->posix_offset);
-	ndr_print_uint32(ndr, "unknown6", r->unknown6);
-	ndr_print_uint32(ndr, "unknown7", r->unknown7);
-	ndr_print_uint32(ndr, "unknown8", r->unknown8);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DELTA_DELETE_TRUST(struct ndr_push *ndr, int ndr_flags, const struct netr_DELTA_DELETE_TRUST *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 2));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->unknown));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DELTA_DELETE_TRUST(struct ndr_pull *ndr, int ndr_flags, struct netr_DELTA_DELETE_TRUST *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 2));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->unknown));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DELTA_DELETE_TRUST(struct ndr_print *ndr, const char *name, const struct netr_DELTA_DELETE_TRUST *r)
-{
-	ndr_print_struct(ndr, name, "netr_DELTA_DELETE_TRUST");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "unknown", r->unknown);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DELTA_ACCOUNT(struct ndr_push *ndr, int ndr_flags, const struct netr_DELTA_ACCOUNT *r)
-{
-	uint32_t cntr_privilege_attrib_1;
-	uint32_t cntr_privilege_name_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->privilege_entries));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->privilege_control));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->privilege_attrib));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->privilege_name));
-		NDR_CHECK(ndr_push_netr_QUOTA_LIMITS(ndr, NDR_SCALARS, &r->quotalimits));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->system_flags));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->SecurityInformation));
-		NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_SCALARS, &r->sdbuf));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown5));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown6));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown7));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown8));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->privilege_attrib) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->privilege_entries));
-			for (cntr_privilege_attrib_1 = 0; cntr_privilege_attrib_1 < r->privilege_entries; cntr_privilege_attrib_1++) {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->privilege_attrib[cntr_privilege_attrib_1]));
-			}
-		}
-		if (r->privilege_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->privilege_entries));
-			for (cntr_privilege_name_1 = 0; cntr_privilege_name_1 < r->privilege_entries; cntr_privilege_name_1++) {
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->privilege_name[cntr_privilege_name_1]));
-			}
-			for (cntr_privilege_name_1 = 0; cntr_privilege_name_1 < r->privilege_entries; cntr_privilege_name_1++) {
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->privilege_name[cntr_privilege_name_1]));
-			}
-		}
-		NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_BUFFERS, &r->sdbuf));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown1));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown4));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DELTA_ACCOUNT(struct ndr_pull *ndr, int ndr_flags, struct netr_DELTA_ACCOUNT *r)
-{
-	uint32_t _ptr_privilege_attrib;
-	uint32_t cntr_privilege_attrib_1;
-	TALLOC_CTX *_mem_save_privilege_attrib_0;
-	TALLOC_CTX *_mem_save_privilege_attrib_1;
-	uint32_t _ptr_privilege_name;
-	uint32_t cntr_privilege_name_1;
-	TALLOC_CTX *_mem_save_privilege_name_0;
-	TALLOC_CTX *_mem_save_privilege_name_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->privilege_entries));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->privilege_control));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_privilege_attrib));
-		if (_ptr_privilege_attrib) {
-			NDR_PULL_ALLOC(ndr, r->privilege_attrib);
-		} else {
-			r->privilege_attrib = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_privilege_name));
-		if (_ptr_privilege_name) {
-			NDR_PULL_ALLOC(ndr, r->privilege_name);
-		} else {
-			r->privilege_name = NULL;
-		}
-		NDR_CHECK(ndr_pull_netr_QUOTA_LIMITS(ndr, NDR_SCALARS, &r->quotalimits));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->system_flags));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->SecurityInformation));
-		NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_SCALARS, &r->sdbuf));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown5));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown6));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown7));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown8));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->privilege_attrib) {
-			_mem_save_privilege_attrib_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->privilege_attrib, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->privilege_attrib));
-			NDR_PULL_ALLOC_N(ndr, r->privilege_attrib, ndr_get_array_size(ndr, &r->privilege_attrib));
-			_mem_save_privilege_attrib_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->privilege_attrib, 0);
-			for (cntr_privilege_attrib_1 = 0; cntr_privilege_attrib_1 < r->privilege_entries; cntr_privilege_attrib_1++) {
-				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->privilege_attrib[cntr_privilege_attrib_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_privilege_attrib_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_privilege_attrib_0, 0);
-		}
-		if (r->privilege_name) {
-			_mem_save_privilege_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->privilege_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->privilege_name));
-			NDR_PULL_ALLOC_N(ndr, r->privilege_name, ndr_get_array_size(ndr, &r->privilege_name));
-			_mem_save_privilege_name_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->privilege_name, 0);
-			for (cntr_privilege_name_1 = 0; cntr_privilege_name_1 < r->privilege_entries; cntr_privilege_name_1++) {
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->privilege_name[cntr_privilege_name_1]));
-			}
-			for (cntr_privilege_name_1 = 0; cntr_privilege_name_1 < r->privilege_entries; cntr_privilege_name_1++) {
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->privilege_name[cntr_privilege_name_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_privilege_name_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_privilege_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_BUFFERS, &r->sdbuf));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown1));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown4));
-		if (r->privilege_attrib) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->privilege_attrib, r->privilege_entries));
-		}
-		if (r->privilege_name) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->privilege_name, r->privilege_entries));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DELTA_ACCOUNT(struct ndr_print *ndr, const char *name, const struct netr_DELTA_ACCOUNT *r)
-{
-	uint32_t cntr_privilege_attrib_1;
-	uint32_t cntr_privilege_name_1;
-	ndr_print_struct(ndr, name, "netr_DELTA_ACCOUNT");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "privilege_entries", r->privilege_entries);
-	ndr_print_uint32(ndr, "privilege_control", r->privilege_control);
-	ndr_print_ptr(ndr, "privilege_attrib", r->privilege_attrib);
-	ndr->depth++;
-	if (r->privilege_attrib) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "privilege_attrib", r->privilege_entries);
-		ndr->depth++;
-		for (cntr_privilege_attrib_1=0;cntr_privilege_attrib_1<r->privilege_entries;cntr_privilege_attrib_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_privilege_attrib_1) != -1) {
-				ndr_print_uint32(ndr, "privilege_attrib", r->privilege_attrib[cntr_privilege_attrib_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "privilege_name", r->privilege_name);
-	ndr->depth++;
-	if (r->privilege_name) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "privilege_name", r->privilege_entries);
-		ndr->depth++;
-		for (cntr_privilege_name_1=0;cntr_privilege_name_1<r->privilege_entries;cntr_privilege_name_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_privilege_name_1) != -1) {
-				ndr_print_lsa_String(ndr, "privilege_name", &r->privilege_name[cntr_privilege_name_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr_print_netr_QUOTA_LIMITS(ndr, "quotalimits", &r->quotalimits);
-	ndr_print_uint32(ndr, "system_flags", r->system_flags);
-	ndr_print_uint32(ndr, "SecurityInformation", r->SecurityInformation);
-	ndr_print_sec_desc_buf(ndr, "sdbuf", &r->sdbuf);
-	ndr_print_lsa_String(ndr, "unknown1", &r->unknown1);
-	ndr_print_lsa_String(ndr, "unknown2", &r->unknown2);
-	ndr_print_lsa_String(ndr, "unknown3", &r->unknown3);
-	ndr_print_lsa_String(ndr, "unknown4", &r->unknown4);
-	ndr_print_uint32(ndr, "unknown5", r->unknown5);
-	ndr_print_uint32(ndr, "unknown6", r->unknown6);
-	ndr_print_uint32(ndr, "unknown7", r->unknown7);
-	ndr_print_uint32(ndr, "unknown8", r->unknown8);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DELTA_DELETE_ACCOUNT(struct ndr_push *ndr, int ndr_flags, const struct netr_DELTA_DELETE_ACCOUNT *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 2));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->unknown));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DELTA_DELETE_ACCOUNT(struct ndr_pull *ndr, int ndr_flags, struct netr_DELTA_DELETE_ACCOUNT *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 2));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->unknown));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DELTA_DELETE_ACCOUNT(struct ndr_print *ndr, const char *name, const struct netr_DELTA_DELETE_ACCOUNT *r)
-{
-	ndr_print_struct(ndr, name, "netr_DELTA_DELETE_ACCOUNT");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "unknown", r->unknown);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DELTA_DELETE_SECRET(struct ndr_push *ndr, int ndr_flags, const struct netr_DELTA_DELETE_SECRET *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 2));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->unknown));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DELTA_DELETE_SECRET(struct ndr_pull *ndr, int ndr_flags, struct netr_DELTA_DELETE_SECRET *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 2));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->unknown));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DELTA_DELETE_SECRET(struct ndr_print *ndr, const char *name, const struct netr_DELTA_DELETE_SECRET *r)
-{
-	ndr_print_struct(ndr, name, "netr_DELTA_DELETE_SECRET");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "unknown", r->unknown);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_CIPHER_VALUE(struct ndr_push *ndr, int ndr_flags, const struct netr_CIPHER_VALUE *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->len));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxlen));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->cipher_data));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->cipher_data) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxlen));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->len));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->cipher_data, r->len));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_CIPHER_VALUE(struct ndr_pull *ndr, int ndr_flags, struct netr_CIPHER_VALUE *r)
-{
-	uint32_t _ptr_cipher_data;
-	TALLOC_CTX *_mem_save_cipher_data_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->len));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxlen));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_cipher_data));
-		if (_ptr_cipher_data) {
-			NDR_PULL_ALLOC(ndr, r->cipher_data);
-		} else {
-			r->cipher_data = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->cipher_data) {
-			_mem_save_cipher_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->cipher_data, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->cipher_data));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->cipher_data));
-			if (ndr_get_array_length(ndr, &r->cipher_data) > ndr_get_array_size(ndr, &r->cipher_data)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->cipher_data), ndr_get_array_length(ndr, &r->cipher_data));
-			}
-			NDR_PULL_ALLOC_N(ndr, r->cipher_data, ndr_get_array_size(ndr, &r->cipher_data));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->cipher_data, ndr_get_array_length(ndr, &r->cipher_data)));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_cipher_data_0, 0);
-		}
-		if (r->cipher_data) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->cipher_data, r->maxlen));
-		}
-		if (r->cipher_data) {
-			NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->cipher_data, r->len));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_CIPHER_VALUE(struct ndr_print *ndr, const char *name, const struct netr_CIPHER_VALUE *r)
-{
-	ndr_print_struct(ndr, name, "netr_CIPHER_VALUE");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "len", r->len);
-	ndr_print_uint32(ndr, "maxlen", r->maxlen);
-	ndr_print_ptr(ndr, "cipher_data", r->cipher_data);
-	ndr->depth++;
-	if (r->cipher_data) {
-		ndr_print_array_uint8(ndr, "cipher_data", r->cipher_data, r->len);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DELTA_SECRET(struct ndr_push *ndr, int ndr_flags, const struct netr_DELTA_SECRET *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_netr_CIPHER_VALUE(ndr, NDR_SCALARS, &r->current_cipher));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->current_cipher_set_time));
-		NDR_CHECK(ndr_push_netr_CIPHER_VALUE(ndr, NDR_SCALARS, &r->old_cipher));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->old_cipher_set_time));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->SecurityInformation));
-		NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_SCALARS, &r->sdbuf));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown5));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown6));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown7));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown8));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_netr_CIPHER_VALUE(ndr, NDR_BUFFERS, &r->current_cipher));
-		NDR_CHECK(ndr_push_netr_CIPHER_VALUE(ndr, NDR_BUFFERS, &r->old_cipher));
-		NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_BUFFERS, &r->sdbuf));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown1));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown4));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DELTA_SECRET(struct ndr_pull *ndr, int ndr_flags, struct netr_DELTA_SECRET *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_netr_CIPHER_VALUE(ndr, NDR_SCALARS, &r->current_cipher));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->current_cipher_set_time));
-		NDR_CHECK(ndr_pull_netr_CIPHER_VALUE(ndr, NDR_SCALARS, &r->old_cipher));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->old_cipher_set_time));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->SecurityInformation));
-		NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_SCALARS, &r->sdbuf));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown5));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown6));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown7));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown8));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_netr_CIPHER_VALUE(ndr, NDR_BUFFERS, &r->current_cipher));
-		NDR_CHECK(ndr_pull_netr_CIPHER_VALUE(ndr, NDR_BUFFERS, &r->old_cipher));
-		NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_BUFFERS, &r->sdbuf));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown1));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown4));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DELTA_SECRET(struct ndr_print *ndr, const char *name, const struct netr_DELTA_SECRET *r)
-{
-	ndr_print_struct(ndr, name, "netr_DELTA_SECRET");
-	ndr->depth++;
-	ndr_print_netr_CIPHER_VALUE(ndr, "current_cipher", &r->current_cipher);
-	ndr_print_NTTIME(ndr, "current_cipher_set_time", r->current_cipher_set_time);
-	ndr_print_netr_CIPHER_VALUE(ndr, "old_cipher", &r->old_cipher);
-	ndr_print_NTTIME(ndr, "old_cipher_set_time", r->old_cipher_set_time);
-	ndr_print_uint32(ndr, "SecurityInformation", r->SecurityInformation);
-	ndr_print_sec_desc_buf(ndr, "sdbuf", &r->sdbuf);
-	ndr_print_lsa_String(ndr, "unknown1", &r->unknown1);
-	ndr_print_lsa_String(ndr, "unknown2", &r->unknown2);
-	ndr_print_lsa_String(ndr, "unknown3", &r->unknown3);
-	ndr_print_lsa_String(ndr, "unknown4", &r->unknown4);
-	ndr_print_uint32(ndr, "unknown5", r->unknown5);
-	ndr_print_uint32(ndr, "unknown6", r->unknown6);
-	ndr_print_uint32(ndr, "unknown7", r->unknown7);
-	ndr_print_uint32(ndr, "unknown8", r->unknown8);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DeltaEnum(struct ndr_push *ndr, int ndr_flags, enum netr_DeltaEnum r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DeltaEnum(struct ndr_pull *ndr, int ndr_flags, enum netr_DeltaEnum *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DeltaEnum(struct ndr_print *ndr, const char *name, enum netr_DeltaEnum r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case NETR_DELTA_DOMAIN: val = "NETR_DELTA_DOMAIN"; break;
-		case NETR_DELTA_GROUP: val = "NETR_DELTA_GROUP"; break;
-		case NETR_DELTA_DELETE_GROUP: val = "NETR_DELTA_DELETE_GROUP"; break;
-		case NETR_DELTA_RENAME_GROUP: val = "NETR_DELTA_RENAME_GROUP"; break;
-		case NETR_DELTA_USER: val = "NETR_DELTA_USER"; break;
-		case NETR_DELTA_DELETE_USER: val = "NETR_DELTA_DELETE_USER"; break;
-		case NETR_DELTA_RENAME_USER: val = "NETR_DELTA_RENAME_USER"; break;
-		case NETR_DELTA_GROUP_MEMBER: val = "NETR_DELTA_GROUP_MEMBER"; break;
-		case NETR_DELTA_ALIAS: val = "NETR_DELTA_ALIAS"; break;
-		case NETR_DELTA_DELETE_ALIAS: val = "NETR_DELTA_DELETE_ALIAS"; break;
-		case NETR_DELTA_RENAME_ALIAS: val = "NETR_DELTA_RENAME_ALIAS"; break;
-		case NETR_DELTA_ALIAS_MEMBER: val = "NETR_DELTA_ALIAS_MEMBER"; break;
-		case NETR_DELTA_POLICY: val = "NETR_DELTA_POLICY"; break;
-		case NETR_DELTA_TRUSTED_DOMAIN: val = "NETR_DELTA_TRUSTED_DOMAIN"; break;
-		case NETR_DELTA_DELETE_TRUST: val = "NETR_DELTA_DELETE_TRUST"; break;
-		case NETR_DELTA_ACCOUNT: val = "NETR_DELTA_ACCOUNT"; break;
-		case NETR_DELTA_DELETE_ACCOUNT: val = "NETR_DELTA_DELETE_ACCOUNT"; break;
-		case NETR_DELTA_SECRET: val = "NETR_DELTA_SECRET"; break;
-		case NETR_DELTA_DELETE_SECRET: val = "NETR_DELTA_DELETE_SECRET"; break;
-		case NETR_DELTA_DELETE_GROUP2: val = "NETR_DELTA_DELETE_GROUP2"; break;
-		case NETR_DELTA_DELETE_USER2: val = "NETR_DELTA_DELETE_USER2"; break;
-		case NETR_DELTA_MODIFY_COUNT: val = "NETR_DELTA_MODIFY_COUNT"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_netr_DELTA_UNION(struct ndr_push *ndr, int ndr_flags, const union netr_DELTA_UNION *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_netr_DeltaEnum(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case NETR_DELTA_DOMAIN: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->domain));
-			break; }
-
-			case NETR_DELTA_GROUP: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->group));
-			break; }
-
-			case NETR_DELTA_DELETE_GROUP: {
-			break; }
-
-			case NETR_DELTA_RENAME_GROUP: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->rename_group));
-			break; }
-
-			case NETR_DELTA_USER: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->user));
-			break; }
-
-			case NETR_DELTA_DELETE_USER: {
-			break; }
-
-			case NETR_DELTA_RENAME_USER: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->rename_user));
-			break; }
-
-			case NETR_DELTA_GROUP_MEMBER: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->group_member));
-			break; }
-
-			case NETR_DELTA_ALIAS: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->alias));
-			break; }
-
-			case NETR_DELTA_DELETE_ALIAS: {
-			break; }
-
-			case NETR_DELTA_RENAME_ALIAS: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->rename_alias));
-			break; }
-
-			case NETR_DELTA_ALIAS_MEMBER: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->alias_member));
-			break; }
-
-			case NETR_DELTA_POLICY: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->policy));
-			break; }
-
-			case NETR_DELTA_TRUSTED_DOMAIN: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->trusted_domain));
-			break; }
-
-			case NETR_DELTA_DELETE_TRUST: {
-				NDR_CHECK(ndr_push_netr_DELTA_DELETE_TRUST(ndr, NDR_SCALARS, &r->delete_trust));
-			break; }
-
-			case NETR_DELTA_ACCOUNT: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->account));
-			break; }
-
-			case NETR_DELTA_DELETE_ACCOUNT: {
-				NDR_CHECK(ndr_push_netr_DELTA_DELETE_ACCOUNT(ndr, NDR_SCALARS, &r->delete_account));
-			break; }
-
-			case NETR_DELTA_SECRET: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->secret));
-			break; }
-
-			case NETR_DELTA_DELETE_SECRET: {
-				NDR_CHECK(ndr_push_netr_DELTA_DELETE_SECRET(ndr, NDR_SCALARS, &r->delete_secret));
-			break; }
-
-			case NETR_DELTA_DELETE_GROUP2: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->delete_group));
-			break; }
-
-			case NETR_DELTA_DELETE_USER2: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->delete_user));
-			break; }
-
-			case NETR_DELTA_MODIFY_COUNT: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->modified_count));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case NETR_DELTA_DOMAIN:
-				if (r->domain) {
-					NDR_CHECK(ndr_push_netr_DELTA_DOMAIN(ndr, NDR_SCALARS|NDR_BUFFERS, r->domain));
-				}
-			break;
-
-			case NETR_DELTA_GROUP:
-				if (r->group) {
-					NDR_CHECK(ndr_push_netr_DELTA_GROUP(ndr, NDR_SCALARS|NDR_BUFFERS, r->group));
-				}
-			break;
-
-			case NETR_DELTA_DELETE_GROUP:
-			break;
-
-			case NETR_DELTA_RENAME_GROUP:
-				if (r->rename_group) {
-					NDR_CHECK(ndr_push_netr_DELTA_RENAME(ndr, NDR_SCALARS|NDR_BUFFERS, r->rename_group));
-				}
-			break;
-
-			case NETR_DELTA_USER:
-				if (r->user) {
-					NDR_CHECK(ndr_push_netr_DELTA_USER(ndr, NDR_SCALARS|NDR_BUFFERS, r->user));
-				}
-			break;
-
-			case NETR_DELTA_DELETE_USER:
-			break;
-
-			case NETR_DELTA_RENAME_USER:
-				if (r->rename_user) {
-					NDR_CHECK(ndr_push_netr_DELTA_RENAME(ndr, NDR_SCALARS|NDR_BUFFERS, r->rename_user));
-				}
-			break;
-
-			case NETR_DELTA_GROUP_MEMBER:
-				if (r->group_member) {
-					NDR_CHECK(ndr_push_netr_DELTA_GROUP_MEMBER(ndr, NDR_SCALARS|NDR_BUFFERS, r->group_member));
-				}
-			break;
-
-			case NETR_DELTA_ALIAS:
-				if (r->alias) {
-					NDR_CHECK(ndr_push_netr_DELTA_ALIAS(ndr, NDR_SCALARS|NDR_BUFFERS, r->alias));
-				}
-			break;
-
-			case NETR_DELTA_DELETE_ALIAS:
-			break;
-
-			case NETR_DELTA_RENAME_ALIAS:
-				if (r->rename_alias) {
-					NDR_CHECK(ndr_push_netr_DELTA_RENAME(ndr, NDR_SCALARS|NDR_BUFFERS, r->rename_alias));
-				}
-			break;
-
-			case NETR_DELTA_ALIAS_MEMBER:
-				if (r->alias_member) {
-					NDR_CHECK(ndr_push_netr_DELTA_ALIAS_MEMBER(ndr, NDR_SCALARS|NDR_BUFFERS, r->alias_member));
-				}
-			break;
-
-			case NETR_DELTA_POLICY:
-				if (r->policy) {
-					NDR_CHECK(ndr_push_netr_DELTA_POLICY(ndr, NDR_SCALARS|NDR_BUFFERS, r->policy));
-				}
-			break;
-
-			case NETR_DELTA_TRUSTED_DOMAIN:
-				if (r->trusted_domain) {
-					NDR_CHECK(ndr_push_netr_DELTA_TRUSTED_DOMAIN(ndr, NDR_SCALARS|NDR_BUFFERS, r->trusted_domain));
-				}
-			break;
-
-			case NETR_DELTA_DELETE_TRUST:
-			break;
-
-			case NETR_DELTA_ACCOUNT:
-				if (r->account) {
-					NDR_CHECK(ndr_push_netr_DELTA_ACCOUNT(ndr, NDR_SCALARS|NDR_BUFFERS, r->account));
-				}
-			break;
-
-			case NETR_DELTA_DELETE_ACCOUNT:
-			break;
-
-			case NETR_DELTA_SECRET:
-				if (r->secret) {
-					NDR_CHECK(ndr_push_netr_DELTA_SECRET(ndr, NDR_SCALARS|NDR_BUFFERS, r->secret));
-				}
-			break;
-
-			case NETR_DELTA_DELETE_SECRET:
-			break;
-
-			case NETR_DELTA_DELETE_GROUP2:
-				if (r->delete_group) {
-					NDR_CHECK(ndr_push_netr_DELTA_DELETE_USER(ndr, NDR_SCALARS|NDR_BUFFERS, r->delete_group));
-				}
-			break;
-
-			case NETR_DELTA_DELETE_USER2:
-				if (r->delete_user) {
-					NDR_CHECK(ndr_push_netr_DELTA_DELETE_USER(ndr, NDR_SCALARS|NDR_BUFFERS, r->delete_user));
-				}
-			break;
-
-			case NETR_DELTA_MODIFY_COUNT:
-				if (r->modified_count) {
-					NDR_CHECK(ndr_push_udlong(ndr, NDR_SCALARS, *r->modified_count));
-				}
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DELTA_UNION(struct ndr_pull *ndr, int ndr_flags, union netr_DELTA_UNION *r)
-{
-	int level;
-	uint16_t _level;
-	TALLOC_CTX *_mem_save_domain_0;
-	TALLOC_CTX *_mem_save_group_0;
-	TALLOC_CTX *_mem_save_rename_group_0;
-	TALLOC_CTX *_mem_save_user_0;
-	TALLOC_CTX *_mem_save_rename_user_0;
-	TALLOC_CTX *_mem_save_group_member_0;
-	TALLOC_CTX *_mem_save_alias_0;
-	TALLOC_CTX *_mem_save_rename_alias_0;
-	TALLOC_CTX *_mem_save_alias_member_0;
-	TALLOC_CTX *_mem_save_policy_0;
-	TALLOC_CTX *_mem_save_trusted_domain_0;
-	TALLOC_CTX *_mem_save_account_0;
-	TALLOC_CTX *_mem_save_secret_0;
-	TALLOC_CTX *_mem_save_delete_group_0;
-	TALLOC_CTX *_mem_save_delete_user_0;
-	TALLOC_CTX *_mem_save_modified_count_0;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case NETR_DELTA_DOMAIN: {
-				uint32_t _ptr_domain;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain));
-				if (_ptr_domain) {
-					NDR_PULL_ALLOC(ndr, r->domain);
-				} else {
-					r->domain = NULL;
-				}
-			break; }
-
-			case NETR_DELTA_GROUP: {
-				uint32_t _ptr_group;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_group));
-				if (_ptr_group) {
-					NDR_PULL_ALLOC(ndr, r->group);
-				} else {
-					r->group = NULL;
-				}
-			break; }
-
-			case NETR_DELTA_DELETE_GROUP: {
-			break; }
-
-			case NETR_DELTA_RENAME_GROUP: {
-				uint32_t _ptr_rename_group;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_rename_group));
-				if (_ptr_rename_group) {
-					NDR_PULL_ALLOC(ndr, r->rename_group);
-				} else {
-					r->rename_group = NULL;
-				}
-			break; }
-
-			case NETR_DELTA_USER: {
-				uint32_t _ptr_user;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_user));
-				if (_ptr_user) {
-					NDR_PULL_ALLOC(ndr, r->user);
-				} else {
-					r->user = NULL;
-				}
-			break; }
-
-			case NETR_DELTA_DELETE_USER: {
-			break; }
-
-			case NETR_DELTA_RENAME_USER: {
-				uint32_t _ptr_rename_user;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_rename_user));
-				if (_ptr_rename_user) {
-					NDR_PULL_ALLOC(ndr, r->rename_user);
-				} else {
-					r->rename_user = NULL;
-				}
-			break; }
-
-			case NETR_DELTA_GROUP_MEMBER: {
-				uint32_t _ptr_group_member;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_group_member));
-				if (_ptr_group_member) {
-					NDR_PULL_ALLOC(ndr, r->group_member);
-				} else {
-					r->group_member = NULL;
-				}
-			break; }
-
-			case NETR_DELTA_ALIAS: {
-				uint32_t _ptr_alias;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_alias));
-				if (_ptr_alias) {
-					NDR_PULL_ALLOC(ndr, r->alias);
-				} else {
-					r->alias = NULL;
-				}
-			break; }
-
-			case NETR_DELTA_DELETE_ALIAS: {
-			break; }
-
-			case NETR_DELTA_RENAME_ALIAS: {
-				uint32_t _ptr_rename_alias;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_rename_alias));
-				if (_ptr_rename_alias) {
-					NDR_PULL_ALLOC(ndr, r->rename_alias);
-				} else {
-					r->rename_alias = NULL;
-				}
-			break; }
-
-			case NETR_DELTA_ALIAS_MEMBER: {
-				uint32_t _ptr_alias_member;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_alias_member));
-				if (_ptr_alias_member) {
-					NDR_PULL_ALLOC(ndr, r->alias_member);
-				} else {
-					r->alias_member = NULL;
-				}
-			break; }
-
-			case NETR_DELTA_POLICY: {
-				uint32_t _ptr_policy;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_policy));
-				if (_ptr_policy) {
-					NDR_PULL_ALLOC(ndr, r->policy);
-				} else {
-					r->policy = NULL;
-				}
-			break; }
-
-			case NETR_DELTA_TRUSTED_DOMAIN: {
-				uint32_t _ptr_trusted_domain;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_trusted_domain));
-				if (_ptr_trusted_domain) {
-					NDR_PULL_ALLOC(ndr, r->trusted_domain);
-				} else {
-					r->trusted_domain = NULL;
-				}
-			break; }
-
-			case NETR_DELTA_DELETE_TRUST: {
-				NDR_CHECK(ndr_pull_netr_DELTA_DELETE_TRUST(ndr, NDR_SCALARS, &r->delete_trust));
-			break; }
-
-			case NETR_DELTA_ACCOUNT: {
-				uint32_t _ptr_account;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_account));
-				if (_ptr_account) {
-					NDR_PULL_ALLOC(ndr, r->account);
-				} else {
-					r->account = NULL;
-				}
-			break; }
-
-			case NETR_DELTA_DELETE_ACCOUNT: {
-				NDR_CHECK(ndr_pull_netr_DELTA_DELETE_ACCOUNT(ndr, NDR_SCALARS, &r->delete_account));
-			break; }
-
-			case NETR_DELTA_SECRET: {
-				uint32_t _ptr_secret;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_secret));
-				if (_ptr_secret) {
-					NDR_PULL_ALLOC(ndr, r->secret);
-				} else {
-					r->secret = NULL;
-				}
-			break; }
-
-			case NETR_DELTA_DELETE_SECRET: {
-				NDR_CHECK(ndr_pull_netr_DELTA_DELETE_SECRET(ndr, NDR_SCALARS, &r->delete_secret));
-			break; }
-
-			case NETR_DELTA_DELETE_GROUP2: {
-				uint32_t _ptr_delete_group;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_delete_group));
-				if (_ptr_delete_group) {
-					NDR_PULL_ALLOC(ndr, r->delete_group);
-				} else {
-					r->delete_group = NULL;
-				}
-			break; }
-
-			case NETR_DELTA_DELETE_USER2: {
-				uint32_t _ptr_delete_user;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_delete_user));
-				if (_ptr_delete_user) {
-					NDR_PULL_ALLOC(ndr, r->delete_user);
-				} else {
-					r->delete_user = NULL;
-				}
-			break; }
-
-			case NETR_DELTA_MODIFY_COUNT: {
-				uint32_t _ptr_modified_count;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_modified_count));
-				if (_ptr_modified_count) {
-					NDR_PULL_ALLOC(ndr, r->modified_count);
-				} else {
-					r->modified_count = NULL;
-				}
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case NETR_DELTA_DOMAIN:
-				if (r->domain) {
-					_mem_save_domain_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->domain, 0);
-					NDR_CHECK(ndr_pull_netr_DELTA_DOMAIN(ndr, NDR_SCALARS|NDR_BUFFERS, r->domain));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_0, 0);
-				}
-			break;
-
-			case NETR_DELTA_GROUP:
-				if (r->group) {
-					_mem_save_group_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->group, 0);
-					NDR_CHECK(ndr_pull_netr_DELTA_GROUP(ndr, NDR_SCALARS|NDR_BUFFERS, r->group));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_group_0, 0);
-				}
-			break;
-
-			case NETR_DELTA_DELETE_GROUP:
-			break;
-
-			case NETR_DELTA_RENAME_GROUP:
-				if (r->rename_group) {
-					_mem_save_rename_group_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->rename_group, 0);
-					NDR_CHECK(ndr_pull_netr_DELTA_RENAME(ndr, NDR_SCALARS|NDR_BUFFERS, r->rename_group));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rename_group_0, 0);
-				}
-			break;
-
-			case NETR_DELTA_USER:
-				if (r->user) {
-					_mem_save_user_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->user, 0);
-					NDR_CHECK(ndr_pull_netr_DELTA_USER(ndr, NDR_SCALARS|NDR_BUFFERS, r->user));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_0, 0);
-				}
-			break;
-
-			case NETR_DELTA_DELETE_USER:
-			break;
-
-			case NETR_DELTA_RENAME_USER:
-				if (r->rename_user) {
-					_mem_save_rename_user_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->rename_user, 0);
-					NDR_CHECK(ndr_pull_netr_DELTA_RENAME(ndr, NDR_SCALARS|NDR_BUFFERS, r->rename_user));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rename_user_0, 0);
-				}
-			break;
-
-			case NETR_DELTA_GROUP_MEMBER:
-				if (r->group_member) {
-					_mem_save_group_member_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->group_member, 0);
-					NDR_CHECK(ndr_pull_netr_DELTA_GROUP_MEMBER(ndr, NDR_SCALARS|NDR_BUFFERS, r->group_member));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_group_member_0, 0);
-				}
-			break;
-
-			case NETR_DELTA_ALIAS:
-				if (r->alias) {
-					_mem_save_alias_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->alias, 0);
-					NDR_CHECK(ndr_pull_netr_DELTA_ALIAS(ndr, NDR_SCALARS|NDR_BUFFERS, r->alias));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_alias_0, 0);
-				}
-			break;
-
-			case NETR_DELTA_DELETE_ALIAS:
-			break;
-
-			case NETR_DELTA_RENAME_ALIAS:
-				if (r->rename_alias) {
-					_mem_save_rename_alias_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->rename_alias, 0);
-					NDR_CHECK(ndr_pull_netr_DELTA_RENAME(ndr, NDR_SCALARS|NDR_BUFFERS, r->rename_alias));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rename_alias_0, 0);
-				}
-			break;
-
-			case NETR_DELTA_ALIAS_MEMBER:
-				if (r->alias_member) {
-					_mem_save_alias_member_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->alias_member, 0);
-					NDR_CHECK(ndr_pull_netr_DELTA_ALIAS_MEMBER(ndr, NDR_SCALARS|NDR_BUFFERS, r->alias_member));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_alias_member_0, 0);
-				}
-			break;
-
-			case NETR_DELTA_POLICY:
-				if (r->policy) {
-					_mem_save_policy_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->policy, 0);
-					NDR_CHECK(ndr_pull_netr_DELTA_POLICY(ndr, NDR_SCALARS|NDR_BUFFERS, r->policy));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_policy_0, 0);
-				}
-			break;
-
-			case NETR_DELTA_TRUSTED_DOMAIN:
-				if (r->trusted_domain) {
-					_mem_save_trusted_domain_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->trusted_domain, 0);
-					NDR_CHECK(ndr_pull_netr_DELTA_TRUSTED_DOMAIN(ndr, NDR_SCALARS|NDR_BUFFERS, r->trusted_domain));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_trusted_domain_0, 0);
-				}
-			break;
-
-			case NETR_DELTA_DELETE_TRUST:
-			break;
-
-			case NETR_DELTA_ACCOUNT:
-				if (r->account) {
-					_mem_save_account_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->account, 0);
-					NDR_CHECK(ndr_pull_netr_DELTA_ACCOUNT(ndr, NDR_SCALARS|NDR_BUFFERS, r->account));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_account_0, 0);
-				}
-			break;
-
-			case NETR_DELTA_DELETE_ACCOUNT:
-			break;
-
-			case NETR_DELTA_SECRET:
-				if (r->secret) {
-					_mem_save_secret_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->secret, 0);
-					NDR_CHECK(ndr_pull_netr_DELTA_SECRET(ndr, NDR_SCALARS|NDR_BUFFERS, r->secret));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_secret_0, 0);
-				}
-			break;
-
-			case NETR_DELTA_DELETE_SECRET:
-			break;
-
-			case NETR_DELTA_DELETE_GROUP2:
-				if (r->delete_group) {
-					_mem_save_delete_group_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->delete_group, 0);
-					NDR_CHECK(ndr_pull_netr_DELTA_DELETE_USER(ndr, NDR_SCALARS|NDR_BUFFERS, r->delete_group));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_delete_group_0, 0);
-				}
-			break;
-
-			case NETR_DELTA_DELETE_USER2:
-				if (r->delete_user) {
-					_mem_save_delete_user_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->delete_user, 0);
-					NDR_CHECK(ndr_pull_netr_DELTA_DELETE_USER(ndr, NDR_SCALARS|NDR_BUFFERS, r->delete_user));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_delete_user_0, 0);
-				}
-			break;
-
-			case NETR_DELTA_MODIFY_COUNT:
-				if (r->modified_count) {
-					_mem_save_modified_count_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->modified_count, 0);
-					NDR_CHECK(ndr_pull_udlong(ndr, NDR_SCALARS, r->modified_count));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_modified_count_0, 0);
-				}
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DELTA_UNION(struct ndr_print *ndr, const char *name, const union netr_DELTA_UNION *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "netr_DELTA_UNION");
-	switch (level) {
-		case NETR_DELTA_DOMAIN:
-			ndr_print_ptr(ndr, "domain", r->domain);
-			ndr->depth++;
-			if (r->domain) {
-				ndr_print_netr_DELTA_DOMAIN(ndr, "domain", r->domain);
-			}
-			ndr->depth--;
-		break;
-
-		case NETR_DELTA_GROUP:
-			ndr_print_ptr(ndr, "group", r->group);
-			ndr->depth++;
-			if (r->group) {
-				ndr_print_netr_DELTA_GROUP(ndr, "group", r->group);
-			}
-			ndr->depth--;
-		break;
-
-		case NETR_DELTA_DELETE_GROUP:
-		break;
-
-		case NETR_DELTA_RENAME_GROUP:
-			ndr_print_ptr(ndr, "rename_group", r->rename_group);
-			ndr->depth++;
-			if (r->rename_group) {
-				ndr_print_netr_DELTA_RENAME(ndr, "rename_group", r->rename_group);
-			}
-			ndr->depth--;
-		break;
-
-		case NETR_DELTA_USER:
-			ndr_print_ptr(ndr, "user", r->user);
-			ndr->depth++;
-			if (r->user) {
-				ndr_print_netr_DELTA_USER(ndr, "user", r->user);
-			}
-			ndr->depth--;
-		break;
-
-		case NETR_DELTA_DELETE_USER:
-		break;
-
-		case NETR_DELTA_RENAME_USER:
-			ndr_print_ptr(ndr, "rename_user", r->rename_user);
-			ndr->depth++;
-			if (r->rename_user) {
-				ndr_print_netr_DELTA_RENAME(ndr, "rename_user", r->rename_user);
-			}
-			ndr->depth--;
-		break;
-
-		case NETR_DELTA_GROUP_MEMBER:
-			ndr_print_ptr(ndr, "group_member", r->group_member);
-			ndr->depth++;
-			if (r->group_member) {
-				ndr_print_netr_DELTA_GROUP_MEMBER(ndr, "group_member", r->group_member);
-			}
-			ndr->depth--;
-		break;
-
-		case NETR_DELTA_ALIAS:
-			ndr_print_ptr(ndr, "alias", r->alias);
-			ndr->depth++;
-			if (r->alias) {
-				ndr_print_netr_DELTA_ALIAS(ndr, "alias", r->alias);
-			}
-			ndr->depth--;
-		break;
-
-		case NETR_DELTA_DELETE_ALIAS:
-		break;
-
-		case NETR_DELTA_RENAME_ALIAS:
-			ndr_print_ptr(ndr, "rename_alias", r->rename_alias);
-			ndr->depth++;
-			if (r->rename_alias) {
-				ndr_print_netr_DELTA_RENAME(ndr, "rename_alias", r->rename_alias);
-			}
-			ndr->depth--;
-		break;
-
-		case NETR_DELTA_ALIAS_MEMBER:
-			ndr_print_ptr(ndr, "alias_member", r->alias_member);
-			ndr->depth++;
-			if (r->alias_member) {
-				ndr_print_netr_DELTA_ALIAS_MEMBER(ndr, "alias_member", r->alias_member);
-			}
-			ndr->depth--;
-		break;
-
-		case NETR_DELTA_POLICY:
-			ndr_print_ptr(ndr, "policy", r->policy);
-			ndr->depth++;
-			if (r->policy) {
-				ndr_print_netr_DELTA_POLICY(ndr, "policy", r->policy);
-			}
-			ndr->depth--;
-		break;
-
-		case NETR_DELTA_TRUSTED_DOMAIN:
-			ndr_print_ptr(ndr, "trusted_domain", r->trusted_domain);
-			ndr->depth++;
-			if (r->trusted_domain) {
-				ndr_print_netr_DELTA_TRUSTED_DOMAIN(ndr, "trusted_domain", r->trusted_domain);
-			}
-			ndr->depth--;
-		break;
-
-		case NETR_DELTA_DELETE_TRUST:
-			ndr_print_netr_DELTA_DELETE_TRUST(ndr, "delete_trust", &r->delete_trust);
-		break;
-
-		case NETR_DELTA_ACCOUNT:
-			ndr_print_ptr(ndr, "account", r->account);
-			ndr->depth++;
-			if (r->account) {
-				ndr_print_netr_DELTA_ACCOUNT(ndr, "account", r->account);
-			}
-			ndr->depth--;
-		break;
-
-		case NETR_DELTA_DELETE_ACCOUNT:
-			ndr_print_netr_DELTA_DELETE_ACCOUNT(ndr, "delete_account", &r->delete_account);
-		break;
-
-		case NETR_DELTA_SECRET:
-			ndr_print_ptr(ndr, "secret", r->secret);
-			ndr->depth++;
-			if (r->secret) {
-				ndr_print_netr_DELTA_SECRET(ndr, "secret", r->secret);
-			}
-			ndr->depth--;
-		break;
-
-		case NETR_DELTA_DELETE_SECRET:
-			ndr_print_netr_DELTA_DELETE_SECRET(ndr, "delete_secret", &r->delete_secret);
-		break;
-
-		case NETR_DELTA_DELETE_GROUP2:
-			ndr_print_ptr(ndr, "delete_group", r->delete_group);
-			ndr->depth++;
-			if (r->delete_group) {
-				ndr_print_netr_DELTA_DELETE_USER(ndr, "delete_group", r->delete_group);
-			}
-			ndr->depth--;
-		break;
-
-		case NETR_DELTA_DELETE_USER2:
-			ndr_print_ptr(ndr, "delete_user", r->delete_user);
-			ndr->depth++;
-			if (r->delete_user) {
-				ndr_print_netr_DELTA_DELETE_USER(ndr, "delete_user", r->delete_user);
-			}
-			ndr->depth--;
-		break;
-
-		case NETR_DELTA_MODIFY_COUNT:
-			ndr_print_ptr(ndr, "modified_count", r->modified_count);
-			ndr->depth++;
-			if (r->modified_count) {
-				ndr_print_udlong(ndr, "modified_count", *r->modified_count);
-			}
-			ndr->depth--;
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_netr_DELTA_ID_UNION(struct ndr_push *ndr, int ndr_flags, const union netr_DELTA_ID_UNION *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_netr_DeltaEnum(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case NETR_DELTA_DOMAIN: {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-			break; }
-
-			case NETR_DELTA_GROUP: {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-			break; }
-
-			case NETR_DELTA_DELETE_GROUP: {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-			break; }
-
-			case NETR_DELTA_RENAME_GROUP: {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-			break; }
-
-			case NETR_DELTA_USER: {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-			break; }
-
-			case NETR_DELTA_DELETE_USER: {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-			break; }
-
-			case NETR_DELTA_RENAME_USER: {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-			break; }
-
-			case NETR_DELTA_GROUP_MEMBER: {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-			break; }
-
-			case NETR_DELTA_ALIAS: {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-			break; }
-
-			case NETR_DELTA_DELETE_ALIAS: {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-			break; }
-
-			case NETR_DELTA_RENAME_ALIAS: {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-			break; }
-
-			case NETR_DELTA_ALIAS_MEMBER: {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-			break; }
-
-			case NETR_DELTA_POLICY: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->sid));
-			break; }
-
-			case NETR_DELTA_TRUSTED_DOMAIN: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->sid));
-			break; }
-
-			case NETR_DELTA_DELETE_TRUST: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->sid));
-			break; }
-
-			case NETR_DELTA_ACCOUNT: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->sid));
-			break; }
-
-			case NETR_DELTA_DELETE_ACCOUNT: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->sid));
-			break; }
-
-			case NETR_DELTA_SECRET: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->name));
-			break; }
-
-			case NETR_DELTA_DELETE_SECRET: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->name));
-			break; }
-
-			case NETR_DELTA_DELETE_GROUP2: {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-			break; }
-
-			case NETR_DELTA_DELETE_USER2: {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-			break; }
-
-			case NETR_DELTA_MODIFY_COUNT: {
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case NETR_DELTA_DOMAIN:
-			break;
-
-			case NETR_DELTA_GROUP:
-			break;
-
-			case NETR_DELTA_DELETE_GROUP:
-			break;
-
-			case NETR_DELTA_RENAME_GROUP:
-			break;
-
-			case NETR_DELTA_USER:
-			break;
-
-			case NETR_DELTA_DELETE_USER:
-			break;
-
-			case NETR_DELTA_RENAME_USER:
-			break;
-
-			case NETR_DELTA_GROUP_MEMBER:
-			break;
-
-			case NETR_DELTA_ALIAS:
-			break;
-
-			case NETR_DELTA_DELETE_ALIAS:
-			break;
-
-			case NETR_DELTA_RENAME_ALIAS:
-			break;
-
-			case NETR_DELTA_ALIAS_MEMBER:
-			break;
-
-			case NETR_DELTA_POLICY:
-				if (r->sid) {
-					NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-				}
-			break;
-
-			case NETR_DELTA_TRUSTED_DOMAIN:
-				if (r->sid) {
-					NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-				}
-			break;
-
-			case NETR_DELTA_DELETE_TRUST:
-				if (r->sid) {
-					NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-				}
-			break;
-
-			case NETR_DELTA_ACCOUNT:
-				if (r->sid) {
-					NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-				}
-			break;
-
-			case NETR_DELTA_DELETE_ACCOUNT:
-				if (r->sid) {
-					NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-				}
-			break;
-
-			case NETR_DELTA_SECRET:
-				if (r->name) {
-					NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF16)));
-					NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-					NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF16)));
-					NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->name, ndr_charset_length(r->name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-				}
-			break;
-
-			case NETR_DELTA_DELETE_SECRET:
-				if (r->name) {
-					NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF16)));
-					NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-					NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF16)));
-					NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->name, ndr_charset_length(r->name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-				}
-			break;
-
-			case NETR_DELTA_DELETE_GROUP2:
-			break;
-
-			case NETR_DELTA_DELETE_USER2:
-			break;
-
-			case NETR_DELTA_MODIFY_COUNT:
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DELTA_ID_UNION(struct ndr_pull *ndr, int ndr_flags, union netr_DELTA_ID_UNION *r)
-{
-	int level;
-	uint16_t _level;
-	TALLOC_CTX *_mem_save_sid_0;
-	TALLOC_CTX *_mem_save_name_0;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case NETR_DELTA_DOMAIN: {
-				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-			break; }
-
-			case NETR_DELTA_GROUP: {
-				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-			break; }
-
-			case NETR_DELTA_DELETE_GROUP: {
-				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-			break; }
-
-			case NETR_DELTA_RENAME_GROUP: {
-				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-			break; }
-
-			case NETR_DELTA_USER: {
-				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-			break; }
-
-			case NETR_DELTA_DELETE_USER: {
-				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-			break; }
-
-			case NETR_DELTA_RENAME_USER: {
-				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-			break; }
-
-			case NETR_DELTA_GROUP_MEMBER: {
-				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-			break; }
-
-			case NETR_DELTA_ALIAS: {
-				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-			break; }
-
-			case NETR_DELTA_DELETE_ALIAS: {
-				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-			break; }
-
-			case NETR_DELTA_RENAME_ALIAS: {
-				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-			break; }
-
-			case NETR_DELTA_ALIAS_MEMBER: {
-				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-			break; }
-
-			case NETR_DELTA_POLICY: {
-				uint32_t _ptr_sid;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sid));
-				if (_ptr_sid) {
-					NDR_PULL_ALLOC(ndr, r->sid);
-				} else {
-					r->sid = NULL;
-				}
-			break; }
-
-			case NETR_DELTA_TRUSTED_DOMAIN: {
-				uint32_t _ptr_sid;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sid));
-				if (_ptr_sid) {
-					NDR_PULL_ALLOC(ndr, r->sid);
-				} else {
-					r->sid = NULL;
-				}
-			break; }
-
-			case NETR_DELTA_DELETE_TRUST: {
-				uint32_t _ptr_sid;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sid));
-				if (_ptr_sid) {
-					NDR_PULL_ALLOC(ndr, r->sid);
-				} else {
-					r->sid = NULL;
-				}
-			break; }
-
-			case NETR_DELTA_ACCOUNT: {
-				uint32_t _ptr_sid;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sid));
-				if (_ptr_sid) {
-					NDR_PULL_ALLOC(ndr, r->sid);
-				} else {
-					r->sid = NULL;
-				}
-			break; }
-
-			case NETR_DELTA_DELETE_ACCOUNT: {
-				uint32_t _ptr_sid;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sid));
-				if (_ptr_sid) {
-					NDR_PULL_ALLOC(ndr, r->sid);
-				} else {
-					r->sid = NULL;
-				}
-			break; }
-
-			case NETR_DELTA_SECRET: {
-				uint32_t _ptr_name;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_name));
-				if (_ptr_name) {
-					NDR_PULL_ALLOC(ndr, r->name);
-				} else {
-					r->name = NULL;
-				}
-			break; }
-
-			case NETR_DELTA_DELETE_SECRET: {
-				uint32_t _ptr_name;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_name));
-				if (_ptr_name) {
-					NDR_PULL_ALLOC(ndr, r->name);
-				} else {
-					r->name = NULL;
-				}
-			break; }
-
-			case NETR_DELTA_DELETE_GROUP2: {
-				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-			break; }
-
-			case NETR_DELTA_DELETE_USER2: {
-				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-			break; }
-
-			case NETR_DELTA_MODIFY_COUNT: {
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case NETR_DELTA_DOMAIN:
-			break;
-
-			case NETR_DELTA_GROUP:
-			break;
-
-			case NETR_DELTA_DELETE_GROUP:
-			break;
-
-			case NETR_DELTA_RENAME_GROUP:
-			break;
-
-			case NETR_DELTA_USER:
-			break;
-
-			case NETR_DELTA_DELETE_USER:
-			break;
-
-			case NETR_DELTA_RENAME_USER:
-			break;
-
-			case NETR_DELTA_GROUP_MEMBER:
-			break;
-
-			case NETR_DELTA_ALIAS:
-			break;
-
-			case NETR_DELTA_DELETE_ALIAS:
-			break;
-
-			case NETR_DELTA_RENAME_ALIAS:
-			break;
-
-			case NETR_DELTA_ALIAS_MEMBER:
-			break;
-
-			case NETR_DELTA_POLICY:
-				if (r->sid) {
-					_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->sid, 0);
-					NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, 0);
-				}
-			break;
-
-			case NETR_DELTA_TRUSTED_DOMAIN:
-				if (r->sid) {
-					_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->sid, 0);
-					NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, 0);
-				}
-			break;
-
-			case NETR_DELTA_DELETE_TRUST:
-				if (r->sid) {
-					_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->sid, 0);
-					NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, 0);
-				}
-			break;
-
-			case NETR_DELTA_ACCOUNT:
-				if (r->sid) {
-					_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->sid, 0);
-					NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, 0);
-				}
-			break;
-
-			case NETR_DELTA_DELETE_ACCOUNT:
-				if (r->sid) {
-					_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->sid, 0);
-					NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, 0);
-				}
-			break;
-
-			case NETR_DELTA_SECRET:
-				if (r->name) {
-					_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->name, 0);
-					NDR_CHECK(ndr_pull_array_size(ndr, &r->name));
-					NDR_CHECK(ndr_pull_array_length(ndr, &r->name));
-					if (ndr_get_array_length(ndr, &r->name) > ndr_get_array_size(ndr, &r->name)) {
-						return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->name), ndr_get_array_length(ndr, &r->name));
-					}
-					NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t)));
-					NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->name, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t), CH_UTF16));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, 0);
-				}
-			break;
-
-			case NETR_DELTA_DELETE_SECRET:
-				if (r->name) {
-					_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->name, 0);
-					NDR_CHECK(ndr_pull_array_size(ndr, &r->name));
-					NDR_CHECK(ndr_pull_array_length(ndr, &r->name));
-					if (ndr_get_array_length(ndr, &r->name) > ndr_get_array_size(ndr, &r->name)) {
-						return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->name), ndr_get_array_length(ndr, &r->name));
-					}
-					NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t)));
-					NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->name, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t), CH_UTF16));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, 0);
-				}
-			break;
-
-			case NETR_DELTA_DELETE_GROUP2:
-			break;
-
-			case NETR_DELTA_DELETE_USER2:
-			break;
-
-			case NETR_DELTA_MODIFY_COUNT:
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DELTA_ID_UNION(struct ndr_print *ndr, const char *name, const union netr_DELTA_ID_UNION *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "netr_DELTA_ID_UNION");
-	switch (level) {
-		case NETR_DELTA_DOMAIN:
-			ndr_print_uint32(ndr, "rid", r->rid);
-		break;
-
-		case NETR_DELTA_GROUP:
-			ndr_print_uint32(ndr, "rid", r->rid);
-		break;
-
-		case NETR_DELTA_DELETE_GROUP:
-			ndr_print_uint32(ndr, "rid", r->rid);
-		break;
-
-		case NETR_DELTA_RENAME_GROUP:
-			ndr_print_uint32(ndr, "rid", r->rid);
-		break;
-
-		case NETR_DELTA_USER:
-			ndr_print_uint32(ndr, "rid", r->rid);
-		break;
-
-		case NETR_DELTA_DELETE_USER:
-			ndr_print_uint32(ndr, "rid", r->rid);
-		break;
-
-		case NETR_DELTA_RENAME_USER:
-			ndr_print_uint32(ndr, "rid", r->rid);
-		break;
-
-		case NETR_DELTA_GROUP_MEMBER:
-			ndr_print_uint32(ndr, "rid", r->rid);
-		break;
-
-		case NETR_DELTA_ALIAS:
-			ndr_print_uint32(ndr, "rid", r->rid);
-		break;
-
-		case NETR_DELTA_DELETE_ALIAS:
-			ndr_print_uint32(ndr, "rid", r->rid);
-		break;
-
-		case NETR_DELTA_RENAME_ALIAS:
-			ndr_print_uint32(ndr, "rid", r->rid);
-		break;
-
-		case NETR_DELTA_ALIAS_MEMBER:
-			ndr_print_uint32(ndr, "rid", r->rid);
-		break;
-
-		case NETR_DELTA_POLICY:
-			ndr_print_ptr(ndr, "sid", r->sid);
-			ndr->depth++;
-			if (r->sid) {
-				ndr_print_dom_sid2(ndr, "sid", r->sid);
-			}
-			ndr->depth--;
-		break;
-
-		case NETR_DELTA_TRUSTED_DOMAIN:
-			ndr_print_ptr(ndr, "sid", r->sid);
-			ndr->depth++;
-			if (r->sid) {
-				ndr_print_dom_sid2(ndr, "sid", r->sid);
-			}
-			ndr->depth--;
-		break;
-
-		case NETR_DELTA_DELETE_TRUST:
-			ndr_print_ptr(ndr, "sid", r->sid);
-			ndr->depth++;
-			if (r->sid) {
-				ndr_print_dom_sid2(ndr, "sid", r->sid);
-			}
-			ndr->depth--;
-		break;
-
-		case NETR_DELTA_ACCOUNT:
-			ndr_print_ptr(ndr, "sid", r->sid);
-			ndr->depth++;
-			if (r->sid) {
-				ndr_print_dom_sid2(ndr, "sid", r->sid);
-			}
-			ndr->depth--;
-		break;
-
-		case NETR_DELTA_DELETE_ACCOUNT:
-			ndr_print_ptr(ndr, "sid", r->sid);
-			ndr->depth++;
-			if (r->sid) {
-				ndr_print_dom_sid2(ndr, "sid", r->sid);
-			}
-			ndr->depth--;
-		break;
-
-		case NETR_DELTA_SECRET:
-			ndr_print_ptr(ndr, "name", r->name);
-			ndr->depth++;
-			if (r->name) {
-				ndr_print_string(ndr, "name", r->name);
-			}
-			ndr->depth--;
-		break;
-
-		case NETR_DELTA_DELETE_SECRET:
-			ndr_print_ptr(ndr, "name", r->name);
-			ndr->depth++;
-			if (r->name) {
-				ndr_print_string(ndr, "name", r->name);
-			}
-			ndr->depth--;
-		break;
-
-		case NETR_DELTA_DELETE_GROUP2:
-			ndr_print_uint32(ndr, "rid", r->rid);
-		break;
-
-		case NETR_DELTA_DELETE_USER2:
-			ndr_print_uint32(ndr, "rid", r->rid);
-		break;
-
-		case NETR_DELTA_MODIFY_COUNT:
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_netr_DELTA_ENUM(struct ndr_push *ndr, int ndr_flags, const struct netr_DELTA_ENUM *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_netr_DeltaEnum(ndr, NDR_SCALARS, r->delta_type));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->delta_id_union, r->delta_type));
-		NDR_CHECK(ndr_push_netr_DELTA_ID_UNION(ndr, NDR_SCALARS, &r->delta_id_union));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->delta_union, r->delta_type));
-		NDR_CHECK(ndr_push_netr_DELTA_UNION(ndr, NDR_SCALARS, &r->delta_union));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_netr_DELTA_ID_UNION(ndr, NDR_BUFFERS, &r->delta_id_union));
-		NDR_CHECK(ndr_push_netr_DELTA_UNION(ndr, NDR_BUFFERS, &r->delta_union));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DELTA_ENUM(struct ndr_pull *ndr, int ndr_flags, struct netr_DELTA_ENUM *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_netr_DeltaEnum(ndr, NDR_SCALARS, &r->delta_type));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->delta_id_union, r->delta_type));
-		NDR_CHECK(ndr_pull_netr_DELTA_ID_UNION(ndr, NDR_SCALARS, &r->delta_id_union));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->delta_union, r->delta_type));
-		NDR_CHECK(ndr_pull_netr_DELTA_UNION(ndr, NDR_SCALARS, &r->delta_union));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_netr_DELTA_ID_UNION(ndr, NDR_BUFFERS, &r->delta_id_union));
-		NDR_CHECK(ndr_pull_netr_DELTA_UNION(ndr, NDR_BUFFERS, &r->delta_union));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DELTA_ENUM(struct ndr_print *ndr, const char *name, const struct netr_DELTA_ENUM *r)
-{
-	ndr_print_struct(ndr, name, "netr_DELTA_ENUM");
-	ndr->depth++;
-	ndr_print_netr_DeltaEnum(ndr, "delta_type", r->delta_type);
-	ndr_print_set_switch_value(ndr, &r->delta_id_union, r->delta_type);
-	ndr_print_netr_DELTA_ID_UNION(ndr, "delta_id_union", &r->delta_id_union);
-	ndr_print_set_switch_value(ndr, &r->delta_union, r->delta_type);
-	ndr_print_netr_DELTA_UNION(ndr, "delta_union", &r->delta_union);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DELTA_ENUM_ARRAY(struct ndr_push *ndr, int ndr_flags, const struct netr_DELTA_ENUM_ARRAY *r)
-{
-	uint32_t cntr_delta_enum_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_deltas));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->delta_enum));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->delta_enum) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_deltas));
-			for (cntr_delta_enum_1 = 0; cntr_delta_enum_1 < r->num_deltas; cntr_delta_enum_1++) {
-				NDR_CHECK(ndr_push_netr_DELTA_ENUM(ndr, NDR_SCALARS, &r->delta_enum[cntr_delta_enum_1]));
-			}
-			for (cntr_delta_enum_1 = 0; cntr_delta_enum_1 < r->num_deltas; cntr_delta_enum_1++) {
-				NDR_CHECK(ndr_push_netr_DELTA_ENUM(ndr, NDR_BUFFERS, &r->delta_enum[cntr_delta_enum_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DELTA_ENUM_ARRAY(struct ndr_pull *ndr, int ndr_flags, struct netr_DELTA_ENUM_ARRAY *r)
-{
-	uint32_t _ptr_delta_enum;
-	uint32_t cntr_delta_enum_1;
-	TALLOC_CTX *_mem_save_delta_enum_0;
-	TALLOC_CTX *_mem_save_delta_enum_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_deltas));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_delta_enum));
-		if (_ptr_delta_enum) {
-			NDR_PULL_ALLOC(ndr, r->delta_enum);
-		} else {
-			r->delta_enum = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->delta_enum) {
-			_mem_save_delta_enum_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->delta_enum, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->delta_enum));
-			NDR_PULL_ALLOC_N(ndr, r->delta_enum, ndr_get_array_size(ndr, &r->delta_enum));
-			_mem_save_delta_enum_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->delta_enum, 0);
-			for (cntr_delta_enum_1 = 0; cntr_delta_enum_1 < r->num_deltas; cntr_delta_enum_1++) {
-				NDR_CHECK(ndr_pull_netr_DELTA_ENUM(ndr, NDR_SCALARS, &r->delta_enum[cntr_delta_enum_1]));
-			}
-			for (cntr_delta_enum_1 = 0; cntr_delta_enum_1 < r->num_deltas; cntr_delta_enum_1++) {
-				NDR_CHECK(ndr_pull_netr_DELTA_ENUM(ndr, NDR_BUFFERS, &r->delta_enum[cntr_delta_enum_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_delta_enum_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_delta_enum_0, 0);
-		}
-		if (r->delta_enum) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->delta_enum, r->num_deltas));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DELTA_ENUM_ARRAY(struct ndr_print *ndr, const char *name, const struct netr_DELTA_ENUM_ARRAY *r)
-{
-	uint32_t cntr_delta_enum_1;
-	ndr_print_struct(ndr, name, "netr_DELTA_ENUM_ARRAY");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "num_deltas", r->num_deltas);
-	ndr_print_ptr(ndr, "delta_enum", r->delta_enum);
-	ndr->depth++;
-	if (r->delta_enum) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "delta_enum", r->num_deltas);
-		ndr->depth++;
-		for (cntr_delta_enum_1=0;cntr_delta_enum_1<r->num_deltas;cntr_delta_enum_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_delta_enum_1) != -1) {
-				ndr_print_netr_DELTA_ENUM(ndr, "delta_enum", &r->delta_enum[cntr_delta_enum_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_UAS_INFO_0(struct ndr_push *ndr, int ndr_flags, const struct netr_UAS_INFO_0 *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 4));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->computer_name, 16));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->timecreated));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->serial_number));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_UAS_INFO_0(struct ndr_pull *ndr, int ndr_flags, struct netr_UAS_INFO_0 *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 4));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->computer_name, 16));
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->timecreated));
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->serial_number));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_UAS_INFO_0(struct ndr_print *ndr, const char *name, const struct netr_UAS_INFO_0 *r)
-{
-	ndr_print_struct(ndr, name, "netr_UAS_INFO_0");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "computer_name", r->computer_name, 16);
-		ndr_print_uint32(ndr, "timecreated", r->timecreated);
-		ndr_print_uint32(ndr, "serial_number", r->serial_number);
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-
-static enum ndr_err_code ndr_push_netr_AccountBuffer(struct ndr_push *ndr, int ndr_flags, const struct netr_AccountBuffer *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		{
-			uint32_t _flags_save_DATA_BLOB = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-			NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->blob));
-			ndr->flags = _flags_save_DATA_BLOB;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_AccountBuffer(struct ndr_pull *ndr, int ndr_flags, struct netr_AccountBuffer *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		{
-			uint32_t _flags_save_DATA_BLOB = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-			NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->blob));
-			ndr->flags = _flags_save_DATA_BLOB;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_AccountBuffer(struct ndr_print *ndr, const char *name, const struct netr_AccountBuffer *r)
-{
-	ndr_print_struct(ndr, name, "netr_AccountBuffer");
-	ndr->depth++;
-	ndr_print_DATA_BLOB(ndr, "blob", r->blob);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_InfoFlags(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_InfoFlags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_InfoFlags(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_CTRL_REPL_NEEDED", NETLOGON_CTRL_REPL_NEEDED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_CTRL_REPL_IN_PROGRESS", NETLOGON_CTRL_REPL_IN_PROGRESS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_CTRL_REPL_FULL_SYNC", NETLOGON_CTRL_REPL_FULL_SYNC, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_NETLOGON_INFO_1(struct ndr_push *ndr, int ndr_flags, const struct netr_NETLOGON_INFO_1 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_netr_InfoFlags(ndr, NDR_SCALARS, r->flags));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->pdc_connection_status));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_NETLOGON_INFO_1(struct ndr_pull *ndr, int ndr_flags, struct netr_NETLOGON_INFO_1 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_netr_InfoFlags(ndr, NDR_SCALARS, &r->flags));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->pdc_connection_status));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_NETLOGON_INFO_1(struct ndr_print *ndr, const char *name, const struct netr_NETLOGON_INFO_1 *r)
-{
-	ndr_print_struct(ndr, name, "netr_NETLOGON_INFO_1");
-	ndr->depth++;
-	ndr_print_netr_InfoFlags(ndr, "flags", r->flags);
-	ndr_print_uint32(ndr, "pdc_connection_status", r->pdc_connection_status);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_NETLOGON_INFO_2(struct ndr_push *ndr, int ndr_flags, const struct netr_NETLOGON_INFO_2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_netr_InfoFlags(ndr, NDR_SCALARS, r->flags));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->pdc_connection_status));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->trusted_dc_name));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->tc_connection_status));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->trusted_dc_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->trusted_dc_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->trusted_dc_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->trusted_dc_name, ndr_charset_length(r->trusted_dc_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_NETLOGON_INFO_2(struct ndr_pull *ndr, int ndr_flags, struct netr_NETLOGON_INFO_2 *r)
-{
-	uint32_t _ptr_trusted_dc_name;
-	TALLOC_CTX *_mem_save_trusted_dc_name_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_netr_InfoFlags(ndr, NDR_SCALARS, &r->flags));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->pdc_connection_status));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_trusted_dc_name));
-		if (_ptr_trusted_dc_name) {
-			NDR_PULL_ALLOC(ndr, r->trusted_dc_name);
-		} else {
-			r->trusted_dc_name = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->tc_connection_status));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->trusted_dc_name) {
-			_mem_save_trusted_dc_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->trusted_dc_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->trusted_dc_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->trusted_dc_name));
-			if (ndr_get_array_length(ndr, &r->trusted_dc_name) > ndr_get_array_size(ndr, &r->trusted_dc_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->trusted_dc_name), ndr_get_array_length(ndr, &r->trusted_dc_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->trusted_dc_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->trusted_dc_name, ndr_get_array_length(ndr, &r->trusted_dc_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_trusted_dc_name_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_NETLOGON_INFO_2(struct ndr_print *ndr, const char *name, const struct netr_NETLOGON_INFO_2 *r)
-{
-	ndr_print_struct(ndr, name, "netr_NETLOGON_INFO_2");
-	ndr->depth++;
-	ndr_print_netr_InfoFlags(ndr, "flags", r->flags);
-	ndr_print_uint32(ndr, "pdc_connection_status", r->pdc_connection_status);
-	ndr_print_ptr(ndr, "trusted_dc_name", r->trusted_dc_name);
-	ndr->depth++;
-	if (r->trusted_dc_name) {
-		ndr_print_string(ndr, "trusted_dc_name", r->trusted_dc_name);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "tc_connection_status", r->tc_connection_status);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_NETLOGON_INFO_3(struct ndr_push *ndr, int ndr_flags, const struct netr_NETLOGON_INFO_3 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_netr_InfoFlags(ndr, NDR_SCALARS, r->flags));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->logon_attempts));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown1));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown2));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown3));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown5));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_NETLOGON_INFO_3(struct ndr_pull *ndr, int ndr_flags, struct netr_NETLOGON_INFO_3 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_netr_InfoFlags(ndr, NDR_SCALARS, &r->flags));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->logon_attempts));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown5));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_NETLOGON_INFO_3(struct ndr_print *ndr, const char *name, const struct netr_NETLOGON_INFO_3 *r)
-{
-	ndr_print_struct(ndr, name, "netr_NETLOGON_INFO_3");
-	ndr->depth++;
-	ndr_print_netr_InfoFlags(ndr, "flags", r->flags);
-	ndr_print_uint32(ndr, "logon_attempts", r->logon_attempts);
-	ndr_print_uint32(ndr, "unknown1", r->unknown1);
-	ndr_print_uint32(ndr, "unknown2", r->unknown2);
-	ndr_print_uint32(ndr, "unknown3", r->unknown3);
-	ndr_print_uint32(ndr, "unknown4", r->unknown4);
-	ndr_print_uint32(ndr, "unknown5", r->unknown5);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_CONTROL_QUERY_INFORMATION(struct ndr_push *ndr, int ndr_flags, const union netr_CONTROL_QUERY_INFORMATION *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 1: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info2));
-			break; }
-
-			case 3: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info3));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 1:
-				if (r->info1) {
-					NDR_CHECK(ndr_push_netr_NETLOGON_INFO_1(ndr, NDR_SCALARS, r->info1));
-				}
-			break;
-
-			case 2:
-				if (r->info2) {
-					NDR_CHECK(ndr_push_netr_NETLOGON_INFO_2(ndr, NDR_SCALARS|NDR_BUFFERS, r->info2));
-				}
-			break;
-
-			case 3:
-				if (r->info3) {
-					NDR_CHECK(ndr_push_netr_NETLOGON_INFO_3(ndr, NDR_SCALARS, r->info3));
-				}
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_CONTROL_QUERY_INFORMATION(struct ndr_pull *ndr, int ndr_flags, union netr_CONTROL_QUERY_INFORMATION *r)
-{
-	int level;
-	uint32_t _level;
-	TALLOC_CTX *_mem_save_info1_0;
-	TALLOC_CTX *_mem_save_info2_0;
-	TALLOC_CTX *_mem_save_info3_0;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 1: {
-				uint32_t _ptr_info1;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1));
-				if (_ptr_info1) {
-					NDR_PULL_ALLOC(ndr, r->info1);
-				} else {
-					r->info1 = NULL;
-				}
-			break; }
-
-			case 2: {
-				uint32_t _ptr_info2;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info2));
-				if (_ptr_info2) {
-					NDR_PULL_ALLOC(ndr, r->info2);
-				} else {
-					r->info2 = NULL;
-				}
-			break; }
-
-			case 3: {
-				uint32_t _ptr_info3;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info3));
-				if (_ptr_info3) {
-					NDR_PULL_ALLOC(ndr, r->info3);
-				} else {
-					r->info3 = NULL;
-				}
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 1:
-				if (r->info1) {
-					_mem_save_info1_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1, 0);
-					NDR_CHECK(ndr_pull_netr_NETLOGON_INFO_1(ndr, NDR_SCALARS, r->info1));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1_0, 0);
-				}
-			break;
-
-			case 2:
-				if (r->info2) {
-					_mem_save_info2_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info2, 0);
-					NDR_CHECK(ndr_pull_netr_NETLOGON_INFO_2(ndr, NDR_SCALARS|NDR_BUFFERS, r->info2));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info2_0, 0);
-				}
-			break;
-
-			case 3:
-				if (r->info3) {
-					_mem_save_info3_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info3, 0);
-					NDR_CHECK(ndr_pull_netr_NETLOGON_INFO_3(ndr, NDR_SCALARS, r->info3));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info3_0, 0);
-				}
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_CONTROL_QUERY_INFORMATION(struct ndr_print *ndr, const char *name, const union netr_CONTROL_QUERY_INFORMATION *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "netr_CONTROL_QUERY_INFORMATION");
-	switch (level) {
-		case 1:
-			ndr_print_ptr(ndr, "info1", r->info1);
-			ndr->depth++;
-			if (r->info1) {
-				ndr_print_netr_NETLOGON_INFO_1(ndr, "info1", r->info1);
-			}
-			ndr->depth--;
-		break;
-
-		case 2:
-			ndr_print_ptr(ndr, "info2", r->info2);
-			ndr->depth++;
-			if (r->info2) {
-				ndr_print_netr_NETLOGON_INFO_2(ndr, "info2", r->info2);
-			}
-			ndr->depth--;
-		break;
-
-		case 3:
-			ndr_print_ptr(ndr, "info3", r->info3);
-			ndr->depth++;
-			if (r->info3) {
-				ndr_print_netr_NETLOGON_INFO_3(ndr, "info3", r->info3);
-			}
-			ndr->depth--;
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_netr_LogonControlCode(struct ndr_push *ndr, int ndr_flags, enum netr_LogonControlCode r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_LogonControlCode(struct ndr_pull *ndr, int ndr_flags, enum netr_LogonControlCode *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_LogonControlCode(struct ndr_print *ndr, const char *name, enum netr_LogonControlCode r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case NETLOGON_CONTROL_SYNC: val = "NETLOGON_CONTROL_SYNC"; break;
-		case NETLOGON_CONTROL_REDISCOVER: val = "NETLOGON_CONTROL_REDISCOVER"; break;
-		case NETLOGON_CONTROL_TC_QUERY: val = "NETLOGON_CONTROL_TC_QUERY"; break;
-		case NETLOGON_CONTROL_TRANSPORT_NOTIFY: val = "NETLOGON_CONTROL_TRANSPORT_NOTIFY"; break;
-		case NETLOGON_CONTROL_SET_DBFLAG: val = "NETLOGON_CONTROL_SET_DBFLAG"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_netr_CONTROL_DATA_INFORMATION(struct ndr_push *ndr, int ndr_flags, const union netr_CONTROL_DATA_INFORMATION *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case NETLOGON_CONTROL_REDISCOVER: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->domain));
-			break; }
-
-			case NETLOGON_CONTROL_TC_QUERY: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->domain));
-			break; }
-
-			case NETLOGON_CONTROL_TRANSPORT_NOTIFY: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->domain));
-			break; }
-
-			case NETLOGON_CONTROL_SET_DBFLAG: {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->debug_level));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case NETLOGON_CONTROL_REDISCOVER:
-				if (r->domain) {
-					NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain, CH_UTF16)));
-					NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-					NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain, CH_UTF16)));
-					NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->domain, ndr_charset_length(r->domain, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-				}
-			break;
-
-			case NETLOGON_CONTROL_TC_QUERY:
-				if (r->domain) {
-					NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain, CH_UTF16)));
-					NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-					NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain, CH_UTF16)));
-					NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->domain, ndr_charset_length(r->domain, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-				}
-			break;
-
-			case NETLOGON_CONTROL_TRANSPORT_NOTIFY:
-				if (r->domain) {
-					NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain, CH_UTF16)));
-					NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-					NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain, CH_UTF16)));
-					NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->domain, ndr_charset_length(r->domain, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-				}
-			break;
-
-			case NETLOGON_CONTROL_SET_DBFLAG:
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_CONTROL_DATA_INFORMATION(struct ndr_pull *ndr, int ndr_flags, union netr_CONTROL_DATA_INFORMATION *r)
-{
-	int level;
-	uint32_t _level;
-	TALLOC_CTX *_mem_save_domain_0;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case NETLOGON_CONTROL_REDISCOVER: {
-				uint32_t _ptr_domain;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain));
-				if (_ptr_domain) {
-					NDR_PULL_ALLOC(ndr, r->domain);
-				} else {
-					r->domain = NULL;
-				}
-			break; }
-
-			case NETLOGON_CONTROL_TC_QUERY: {
-				uint32_t _ptr_domain;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain));
-				if (_ptr_domain) {
-					NDR_PULL_ALLOC(ndr, r->domain);
-				} else {
-					r->domain = NULL;
-				}
-			break; }
-
-			case NETLOGON_CONTROL_TRANSPORT_NOTIFY: {
-				uint32_t _ptr_domain;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain));
-				if (_ptr_domain) {
-					NDR_PULL_ALLOC(ndr, r->domain);
-				} else {
-					r->domain = NULL;
-				}
-			break; }
-
-			case NETLOGON_CONTROL_SET_DBFLAG: {
-				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->debug_level));
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case NETLOGON_CONTROL_REDISCOVER:
-				if (r->domain) {
-					_mem_save_domain_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->domain, 0);
-					NDR_CHECK(ndr_pull_array_size(ndr, &r->domain));
-					NDR_CHECK(ndr_pull_array_length(ndr, &r->domain));
-					if (ndr_get_array_length(ndr, &r->domain) > ndr_get_array_size(ndr, &r->domain)) {
-						return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->domain), ndr_get_array_length(ndr, &r->domain));
-					}
-					NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->domain), sizeof(uint16_t)));
-					NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->domain, ndr_get_array_length(ndr, &r->domain), sizeof(uint16_t), CH_UTF16));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_0, 0);
-				}
-			break;
-
-			case NETLOGON_CONTROL_TC_QUERY:
-				if (r->domain) {
-					_mem_save_domain_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->domain, 0);
-					NDR_CHECK(ndr_pull_array_size(ndr, &r->domain));
-					NDR_CHECK(ndr_pull_array_length(ndr, &r->domain));
-					if (ndr_get_array_length(ndr, &r->domain) > ndr_get_array_size(ndr, &r->domain)) {
-						return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->domain), ndr_get_array_length(ndr, &r->domain));
-					}
-					NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->domain), sizeof(uint16_t)));
-					NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->domain, ndr_get_array_length(ndr, &r->domain), sizeof(uint16_t), CH_UTF16));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_0, 0);
-				}
-			break;
-
-			case NETLOGON_CONTROL_TRANSPORT_NOTIFY:
-				if (r->domain) {
-					_mem_save_domain_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->domain, 0);
-					NDR_CHECK(ndr_pull_array_size(ndr, &r->domain));
-					NDR_CHECK(ndr_pull_array_length(ndr, &r->domain));
-					if (ndr_get_array_length(ndr, &r->domain) > ndr_get_array_size(ndr, &r->domain)) {
-						return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->domain), ndr_get_array_length(ndr, &r->domain));
-					}
-					NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->domain), sizeof(uint16_t)));
-					NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->domain, ndr_get_array_length(ndr, &r->domain), sizeof(uint16_t), CH_UTF16));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_0, 0);
-				}
-			break;
-
-			case NETLOGON_CONTROL_SET_DBFLAG:
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_CONTROL_DATA_INFORMATION(struct ndr_print *ndr, const char *name, const union netr_CONTROL_DATA_INFORMATION *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "netr_CONTROL_DATA_INFORMATION");
-	switch (level) {
-		case NETLOGON_CONTROL_REDISCOVER:
-			ndr_print_ptr(ndr, "domain", r->domain);
-			ndr->depth++;
-			if (r->domain) {
-				ndr_print_string(ndr, "domain", r->domain);
-			}
-			ndr->depth--;
-		break;
-
-		case NETLOGON_CONTROL_TC_QUERY:
-			ndr_print_ptr(ndr, "domain", r->domain);
-			ndr->depth++;
-			if (r->domain) {
-				ndr_print_string(ndr, "domain", r->domain);
-			}
-			ndr->depth--;
-		break;
-
-		case NETLOGON_CONTROL_TRANSPORT_NOTIFY:
-			ndr_print_ptr(ndr, "domain", r->domain);
-			ndr->depth++;
-			if (r->domain) {
-				ndr_print_string(ndr, "domain", r->domain);
-			}
-			ndr->depth--;
-		break;
-
-		case NETLOGON_CONTROL_SET_DBFLAG:
-			ndr_print_uint32(ndr, "debug_level", r->debug_level);
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_netr_NegotiateFlags(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_NegotiateFlags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_NegotiateFlags(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_ACCOUNT_LOCKOUT", NETLOGON_NEG_ACCOUNT_LOCKOUT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_PERSISTENT_SAMREPL", NETLOGON_NEG_PERSISTENT_SAMREPL, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_ARCFOUR", NETLOGON_NEG_ARCFOUR, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_PROMOTION_COUNT", NETLOGON_NEG_PROMOTION_COUNT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_CHANGELOG_BDC", NETLOGON_NEG_CHANGELOG_BDC, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_FULL_SYNC_REPL", NETLOGON_NEG_FULL_SYNC_REPL, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_MULTIPLE_SIDS", NETLOGON_NEG_MULTIPLE_SIDS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_REDO", NETLOGON_NEG_REDO, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_PASSWORD_CHANGE_REFUSAL", NETLOGON_NEG_PASSWORD_CHANGE_REFUSAL, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_SEND_PASSWORD_INFO_PDC", NETLOGON_NEG_SEND_PASSWORD_INFO_PDC, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_GENERIC_PASSTHROUGH", NETLOGON_NEG_GENERIC_PASSTHROUGH, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_CONCURRENT_RPC", NETLOGON_NEG_CONCURRENT_RPC, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_AVOID_ACCOUNT_DB_REPL", NETLOGON_NEG_AVOID_ACCOUNT_DB_REPL, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_AVOID_SECURITYAUTH_DB_REPL", NETLOGON_NEG_AVOID_SECURITYAUTH_DB_REPL, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_128BIT", NETLOGON_NEG_128BIT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_TRANSITIVE_TRUSTS", NETLOGON_NEG_TRANSITIVE_TRUSTS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_DNS_DOMAIN_TRUSTS", NETLOGON_NEG_DNS_DOMAIN_TRUSTS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_PASSWORD_SET2", NETLOGON_NEG_PASSWORD_SET2, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_GETDOMAININFO", NETLOGON_NEG_GETDOMAININFO, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_CROSS_FOREST_TRUSTS", NETLOGON_NEG_CROSS_FOREST_TRUSTS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_NEUTRALIZE_NT4_EMULATION", NETLOGON_NEG_NEUTRALIZE_NT4_EMULATION, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_RODC_PASSTHROUGH", NETLOGON_NEG_RODC_PASSTHROUGH, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_AUTHENTICATED_RPC_LSASS", NETLOGON_NEG_AUTHENTICATED_RPC_LSASS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETLOGON_NEG_SCHANNEL", NETLOGON_NEG_SCHANNEL, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_Blob(struct ndr_push *ndr, int ndr_flags, const struct netr_Blob *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->length));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->data));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->data) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->length));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->data, r->length));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_Blob(struct ndr_pull *ndr, int ndr_flags, struct netr_Blob *r)
-{
-	uint32_t _ptr_data;
-	TALLOC_CTX *_mem_save_data_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->length));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_data));
-		if (_ptr_data) {
-			NDR_PULL_ALLOC(ndr, r->data);
-		} else {
-			r->data = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->data) {
-			_mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->data, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->data));
-			NDR_PULL_ALLOC_N(ndr, r->data, ndr_get_array_size(ndr, &r->data));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->data, ndr_get_array_size(ndr, &r->data)));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, 0);
-		}
-		if (r->data) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->data, r->length));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_Blob(struct ndr_print *ndr, const char *name, const struct netr_Blob *r)
-{
-	ndr_print_struct(ndr, name, "netr_Blob");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "length", r->length);
-	ndr_print_ptr(ndr, "data", r->data);
-	ndr->depth++;
-	if (r->data) {
-		ndr_print_array_uint8(ndr, "data", r->data, r->length);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DsRGetDCName_flags(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DsRGetDCName_flags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DsRGetDCName_flags(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_FORCE_REDISCOVERY", DS_FORCE_REDISCOVERY, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_DIRECTORY_SERVICE_REQUIRED", DS_DIRECTORY_SERVICE_REQUIRED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_DIRECTORY_SERVICE_PREFERRED", DS_DIRECTORY_SERVICE_PREFERRED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_GC_SERVER_REQUIRED", DS_GC_SERVER_REQUIRED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_PDC_REQUIRED", DS_PDC_REQUIRED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_BACKGROUND_ONLY", DS_BACKGROUND_ONLY, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_IP_REQUIRED", DS_IP_REQUIRED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_KDC_REQUIRED", DS_KDC_REQUIRED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_TIMESERV_REQUIRED", DS_TIMESERV_REQUIRED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_WRITABLE_REQUIRED", DS_WRITABLE_REQUIRED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_GOOD_TIMESERV_PREFERRED", DS_GOOD_TIMESERV_PREFERRED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_AVOID_SELF", DS_AVOID_SELF, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_ONLY_LDAP_NEEDED", DS_ONLY_LDAP_NEEDED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_IS_FLAT_NAME", DS_IS_FLAT_NAME, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_IS_DNS_NAME", DS_IS_DNS_NAME, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_TRY_NEXTCLOSEST_SITE", DS_TRY_NEXTCLOSEST_SITE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_DIRECTORY_SERVICE_6_REQUIRED", DS_DIRECTORY_SERVICE_6_REQUIRED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_RETURN_DNS_NAME", DS_RETURN_DNS_NAME, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_RETURN_FLAT_NAME", DS_RETURN_FLAT_NAME, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DsRGetDCNameInfo_AddressType(struct ndr_push *ndr, int ndr_flags, enum netr_DsRGetDCNameInfo_AddressType r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DsRGetDCNameInfo_AddressType(struct ndr_pull *ndr, int ndr_flags, enum netr_DsRGetDCNameInfo_AddressType *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DsRGetDCNameInfo_AddressType(struct ndr_print *ndr, const char *name, enum netr_DsRGetDCNameInfo_AddressType r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case DS_ADDRESS_TYPE_INET: val = "DS_ADDRESS_TYPE_INET"; break;
-		case DS_ADDRESS_TYPE_NETBIOS: val = "DS_ADDRESS_TYPE_NETBIOS"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_netr_DsR_DcFlags(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DsR_DcFlags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DsR_DcFlags(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_SERVER_PDC", DS_SERVER_PDC, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_SERVER_GC", DS_SERVER_GC, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_SERVER_LDAP", DS_SERVER_LDAP, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_SERVER_DS", DS_SERVER_DS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_SERVER_KDC", DS_SERVER_KDC, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_SERVER_TIMESERV", DS_SERVER_TIMESERV, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_SERVER_CLOSEST", DS_SERVER_CLOSEST, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_SERVER_WRITABLE", DS_SERVER_WRITABLE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_SERVER_GOOD_TIMESERV", DS_SERVER_GOOD_TIMESERV, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_SERVER_NDNC", DS_SERVER_NDNC, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_SERVER_SELECT_SECRET_DOMAIN_6", DS_SERVER_SELECT_SECRET_DOMAIN_6, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_SERVER_FULL_SECRET_DOMAIN_6", DS_SERVER_FULL_SECRET_DOMAIN_6, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_DNS_CONTROLLER", DS_DNS_CONTROLLER, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_DNS_DOMAIN", DS_DNS_DOMAIN, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DS_DNS_FOREST", DS_DNS_FOREST, r);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_netr_DsRGetDCNameInfo(struct ndr_push *ndr, int ndr_flags, const struct netr_DsRGetDCNameInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->dc_unc));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->dc_address));
-		NDR_CHECK(ndr_push_netr_DsRGetDCNameInfo_AddressType(ndr, NDR_SCALARS, r->dc_address_type));
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->domain_guid));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->domain_name));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->forest_name));
-		NDR_CHECK(ndr_push_netr_DsR_DcFlags(ndr, NDR_SCALARS, r->dc_flags));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->dc_site_name));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->client_site_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->dc_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->dc_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->dc_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->dc_unc, ndr_charset_length(r->dc_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->dc_address) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->dc_address, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->dc_address, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->dc_address, ndr_charset_length(r->dc_address, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_BUFFERS, &r->domain_guid));
-		if (r->domain_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->domain_name, ndr_charset_length(r->domain_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->forest_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->forest_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->forest_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->forest_name, ndr_charset_length(r->forest_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->dc_site_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->dc_site_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->dc_site_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->dc_site_name, ndr_charset_length(r->dc_site_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->client_site_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->client_site_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->client_site_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->client_site_name, ndr_charset_length(r->client_site_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_netr_DsRGetDCNameInfo(struct ndr_pull *ndr, int ndr_flags, struct netr_DsRGetDCNameInfo *r)
-{
-	uint32_t _ptr_dc_unc;
-	TALLOC_CTX *_mem_save_dc_unc_0;
-	uint32_t _ptr_dc_address;
-	TALLOC_CTX *_mem_save_dc_address_0;
-	uint32_t _ptr_domain_name;
-	TALLOC_CTX *_mem_save_domain_name_0;
-	uint32_t _ptr_forest_name;
-	TALLOC_CTX *_mem_save_forest_name_0;
-	uint32_t _ptr_dc_site_name;
-	TALLOC_CTX *_mem_save_dc_site_name_0;
-	uint32_t _ptr_client_site_name;
-	TALLOC_CTX *_mem_save_client_site_name_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dc_unc));
-		if (_ptr_dc_unc) {
-			NDR_PULL_ALLOC(ndr, r->dc_unc);
-		} else {
-			r->dc_unc = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dc_address));
-		if (_ptr_dc_address) {
-			NDR_PULL_ALLOC(ndr, r->dc_address);
-		} else {
-			r->dc_address = NULL;
-		}
-		NDR_CHECK(ndr_pull_netr_DsRGetDCNameInfo_AddressType(ndr, NDR_SCALARS, &r->dc_address_type));
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->domain_guid));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain_name));
-		if (_ptr_domain_name) {
-			NDR_PULL_ALLOC(ndr, r->domain_name);
-		} else {
-			r->domain_name = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_forest_name));
-		if (_ptr_forest_name) {
-			NDR_PULL_ALLOC(ndr, r->forest_name);
-		} else {
-			r->forest_name = NULL;
-		}
-		NDR_CHECK(ndr_pull_netr_DsR_DcFlags(ndr, NDR_SCALARS, &r->dc_flags));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dc_site_name));
-		if (_ptr_dc_site_name) {
-			NDR_PULL_ALLOC(ndr, r->dc_site_name);
-		} else {
-			r->dc_site_name = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_client_site_name));
-		if (_ptr_client_site_name) {
-			NDR_PULL_ALLOC(ndr, r->client_site_name);
-		} else {
-			r->client_site_name = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->dc_unc) {
-			_mem_save_dc_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->dc_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->dc_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->dc_unc));
-			if (ndr_get_array_length(ndr, &r->dc_unc) > ndr_get_array_size(ndr, &r->dc_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->dc_unc), ndr_get_array_length(ndr, &r->dc_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->dc_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->dc_unc, ndr_get_array_length(ndr, &r->dc_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dc_unc_0, 0);
-		}
-		if (r->dc_address) {
-			_mem_save_dc_address_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->dc_address, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->dc_address));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->dc_address));
-			if (ndr_get_array_length(ndr, &r->dc_address) > ndr_get_array_size(ndr, &r->dc_address)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->dc_address), ndr_get_array_length(ndr, &r->dc_address));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->dc_address), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->dc_address, ndr_get_array_length(ndr, &r->dc_address), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dc_address_0, 0);
-		}
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_BUFFERS, &r->domain_guid));
-		if (r->domain_name) {
-			_mem_save_domain_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->domain_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->domain_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->domain_name));
-			if (ndr_get_array_length(ndr, &r->domain_name) > ndr_get_array_size(ndr, &r->domain_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->domain_name), ndr_get_array_length(ndr, &r->domain_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->domain_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->domain_name, ndr_get_array_length(ndr, &r->domain_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_name_0, 0);
-		}
-		if (r->forest_name) {
-			_mem_save_forest_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->forest_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->forest_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->forest_name));
-			if (ndr_get_array_length(ndr, &r->forest_name) > ndr_get_array_size(ndr, &r->forest_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->forest_name), ndr_get_array_length(ndr, &r->forest_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->forest_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->forest_name, ndr_get_array_length(ndr, &r->forest_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_forest_name_0, 0);
-		}
-		if (r->dc_site_name) {
-			_mem_save_dc_site_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->dc_site_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->dc_site_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->dc_site_name));
-			if (ndr_get_array_length(ndr, &r->dc_site_name) > ndr_get_array_size(ndr, &r->dc_site_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->dc_site_name), ndr_get_array_length(ndr, &r->dc_site_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->dc_site_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->dc_site_name, ndr_get_array_length(ndr, &r->dc_site_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dc_site_name_0, 0);
-		}
-		if (r->client_site_name) {
-			_mem_save_client_site_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->client_site_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->client_site_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->client_site_name));
-			if (ndr_get_array_length(ndr, &r->client_site_name) > ndr_get_array_size(ndr, &r->client_site_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->client_site_name), ndr_get_array_length(ndr, &r->client_site_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->client_site_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->client_site_name, ndr_get_array_length(ndr, &r->client_site_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_client_site_name_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DsRGetDCNameInfo(struct ndr_print *ndr, const char *name, const struct netr_DsRGetDCNameInfo *r)
-{
-	ndr_print_struct(ndr, name, "netr_DsRGetDCNameInfo");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "dc_unc", r->dc_unc);
-	ndr->depth++;
-	if (r->dc_unc) {
-		ndr_print_string(ndr, "dc_unc", r->dc_unc);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "dc_address", r->dc_address);
-	ndr->depth++;
-	if (r->dc_address) {
-		ndr_print_string(ndr, "dc_address", r->dc_address);
-	}
-	ndr->depth--;
-	ndr_print_netr_DsRGetDCNameInfo_AddressType(ndr, "dc_address_type", r->dc_address_type);
-	ndr_print_GUID(ndr, "domain_guid", &r->domain_guid);
-	ndr_print_ptr(ndr, "domain_name", r->domain_name);
-	ndr->depth++;
-	if (r->domain_name) {
-		ndr_print_string(ndr, "domain_name", r->domain_name);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "forest_name", r->forest_name);
-	ndr->depth++;
-	if (r->forest_name) {
-		ndr_print_string(ndr, "forest_name", r->forest_name);
-	}
-	ndr->depth--;
-	ndr_print_netr_DsR_DcFlags(ndr, "dc_flags", r->dc_flags);
-	ndr_print_ptr(ndr, "dc_site_name", r->dc_site_name);
-	ndr->depth++;
-	if (r->dc_site_name) {
-		ndr_print_string(ndr, "dc_site_name", r->dc_site_name);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "client_site_name", r->client_site_name);
-	ndr->depth++;
-	if (r->client_site_name) {
-		ndr_print_string(ndr, "client_site_name", r->client_site_name);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_BinaryString(struct ndr_push *ndr, int ndr_flags, const struct netr_BinaryString *r)
-{
-	uint32_t cntr_data_1;
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 4));
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->length));
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->size));
-			NDR_CHECK(ndr_push_unique_ptr(ndr, r->data));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-			if (r->data) {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->size / 2));
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->length / 2));
-				for (cntr_data_1 = 0; cntr_data_1 < r->length / 2; cntr_data_1++) {
-					NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->data[cntr_data_1]));
-				}
-			}
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_BinaryString(struct ndr_pull *ndr, int ndr_flags, struct netr_BinaryString *r)
-{
-	uint32_t _ptr_data;
-	uint32_t cntr_data_1;
-	TALLOC_CTX *_mem_save_data_0;
-	TALLOC_CTX *_mem_save_data_1;
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 4));
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->length));
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
-			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_data));
-			if (_ptr_data) {
-				NDR_PULL_ALLOC(ndr, r->data);
-			} else {
-				r->data = NULL;
-			}
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-			if (r->data) {
-				_mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
-				NDR_PULL_SET_MEM_CTX(ndr, r->data, 0);
-				NDR_CHECK(ndr_pull_array_size(ndr, &r->data));
-				NDR_CHECK(ndr_pull_array_length(ndr, &r->data));
-				if (ndr_get_array_length(ndr, &r->data) > ndr_get_array_size(ndr, &r->data)) {
-					return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->data), ndr_get_array_length(ndr, &r->data));
-				}
-				NDR_PULL_ALLOC_N(ndr, r->data, ndr_get_array_size(ndr, &r->data));
-				_mem_save_data_1 = NDR_PULL_GET_MEM_CTX(ndr);
-				NDR_PULL_SET_MEM_CTX(ndr, r->data, 0);
-				for (cntr_data_1 = 0; cntr_data_1 < r->length / 2; cntr_data_1++) {
-					NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->data[cntr_data_1]));
-				}
-				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_1, 0);
-				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, 0);
-			}
-			if (r->data) {
-				NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->data, r->size / 2));
-			}
-			if (r->data) {
-				NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->data, r->length / 2));
-			}
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_BinaryString(struct ndr_print *ndr, const char *name, const struct netr_BinaryString *r)
-{
-	uint32_t cntr_data_1;
-	ndr_print_struct(ndr, name, "netr_BinaryString");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		ndr->depth++;
-		ndr_print_uint16(ndr, "length", r->length);
-		ndr_print_uint16(ndr, "size", r->size);
-		ndr_print_ptr(ndr, "data", r->data);
-		ndr->depth++;
-		if (r->data) {
-			ndr->print(ndr, "%s: ARRAY(%d)", "data", r->length / 2);
-			ndr->depth++;
-			for (cntr_data_1=0;cntr_data_1<r->length / 2;cntr_data_1++) {
-				char *idx_1=NULL;
-				if (asprintf(&idx_1, "[%d]", cntr_data_1) != -1) {
-					ndr_print_uint16(ndr, "data", r->data[cntr_data_1]);
-					free(idx_1);
-				}
-			}
-			ndr->depth--;
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-
-static enum ndr_err_code ndr_push_netr_DomainQuery1(struct ndr_push *ndr, int ndr_flags, const struct netr_DomainQuery1 *r)
-{
-	uint32_t cntr_unknown7_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_netr_Blob(ndr, NDR_SCALARS, &r->blob));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->workstation_domain));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->workstation_site));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->unknown1));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->unknown2));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->unknown3));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->unknown4));
-		NDR_CHECK(ndr_push_netr_BinaryString(ndr, NDR_SCALARS, &r->blob2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->product));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown5));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown6));
-		for (cntr_unknown7_0 = 0; cntr_unknown7_0 < 4; cntr_unknown7_0++) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown7[cntr_unknown7_0]));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_netr_Blob(ndr, NDR_BUFFERS, &r->blob));
-		if (r->workstation_domain) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->workstation_domain, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->workstation_domain, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->workstation_domain, ndr_charset_length(r->workstation_domain, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->workstation_site) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->workstation_site, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->workstation_site, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->workstation_site, ndr_charset_length(r->workstation_site, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->unknown1) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->unknown1, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->unknown1, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->unknown1, ndr_charset_length(r->unknown1, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->unknown2) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->unknown2, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->unknown2, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->unknown2, ndr_charset_length(r->unknown2, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->unknown3) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->unknown3, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->unknown3, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->unknown3, ndr_charset_length(r->unknown3, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->unknown4) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->unknown4, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->unknown4, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->unknown4, ndr_charset_length(r->unknown4, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_netr_BinaryString(ndr, NDR_BUFFERS, &r->blob2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->product));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown5));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown6));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DomainQuery1(struct ndr_pull *ndr, int ndr_flags, struct netr_DomainQuery1 *r)
-{
-	uint32_t _ptr_workstation_domain;
-	TALLOC_CTX *_mem_save_workstation_domain_0;
-	uint32_t _ptr_workstation_site;
-	TALLOC_CTX *_mem_save_workstation_site_0;
-	uint32_t _ptr_unknown1;
-	TALLOC_CTX *_mem_save_unknown1_0;
-	uint32_t _ptr_unknown2;
-	TALLOC_CTX *_mem_save_unknown2_0;
-	uint32_t _ptr_unknown3;
-	TALLOC_CTX *_mem_save_unknown3_0;
-	uint32_t _ptr_unknown4;
-	TALLOC_CTX *_mem_save_unknown4_0;
-	uint32_t cntr_unknown7_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_netr_Blob(ndr, NDR_SCALARS, &r->blob));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_workstation_domain));
-		if (_ptr_workstation_domain) {
-			NDR_PULL_ALLOC(ndr, r->workstation_domain);
-		} else {
-			r->workstation_domain = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_workstation_site));
-		if (_ptr_workstation_site) {
-			NDR_PULL_ALLOC(ndr, r->workstation_site);
-		} else {
-			r->workstation_site = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown1));
-		if (_ptr_unknown1) {
-			NDR_PULL_ALLOC(ndr, r->unknown1);
-		} else {
-			r->unknown1 = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown2));
-		if (_ptr_unknown2) {
-			NDR_PULL_ALLOC(ndr, r->unknown2);
-		} else {
-			r->unknown2 = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown3));
-		if (_ptr_unknown3) {
-			NDR_PULL_ALLOC(ndr, r->unknown3);
-		} else {
-			r->unknown3 = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown4));
-		if (_ptr_unknown4) {
-			NDR_PULL_ALLOC(ndr, r->unknown4);
-		} else {
-			r->unknown4 = NULL;
-		}
-		NDR_CHECK(ndr_pull_netr_BinaryString(ndr, NDR_SCALARS, &r->blob2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->product));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown5));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown6));
-		for (cntr_unknown7_0 = 0; cntr_unknown7_0 < 4; cntr_unknown7_0++) {
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown7[cntr_unknown7_0]));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_netr_Blob(ndr, NDR_BUFFERS, &r->blob));
-		if (r->workstation_domain) {
-			_mem_save_workstation_domain_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->workstation_domain, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->workstation_domain));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->workstation_domain));
-			if (ndr_get_array_length(ndr, &r->workstation_domain) > ndr_get_array_size(ndr, &r->workstation_domain)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->workstation_domain), ndr_get_array_length(ndr, &r->workstation_domain));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->workstation_domain), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->workstation_domain, ndr_get_array_length(ndr, &r->workstation_domain), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_workstation_domain_0, 0);
-		}
-		if (r->workstation_site) {
-			_mem_save_workstation_site_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->workstation_site, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->workstation_site));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->workstation_site));
-			if (ndr_get_array_length(ndr, &r->workstation_site) > ndr_get_array_size(ndr, &r->workstation_site)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->workstation_site), ndr_get_array_length(ndr, &r->workstation_site));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->workstation_site), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->workstation_site, ndr_get_array_length(ndr, &r->workstation_site), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_workstation_site_0, 0);
-		}
-		if (r->unknown1) {
-			_mem_save_unknown1_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->unknown1, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->unknown1));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->unknown1));
-			if (ndr_get_array_length(ndr, &r->unknown1) > ndr_get_array_size(ndr, &r->unknown1)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->unknown1), ndr_get_array_length(ndr, &r->unknown1));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->unknown1), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->unknown1, ndr_get_array_length(ndr, &r->unknown1), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown1_0, 0);
-		}
-		if (r->unknown2) {
-			_mem_save_unknown2_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->unknown2, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->unknown2));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->unknown2));
-			if (ndr_get_array_length(ndr, &r->unknown2) > ndr_get_array_size(ndr, &r->unknown2)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->unknown2), ndr_get_array_length(ndr, &r->unknown2));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->unknown2), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->unknown2, ndr_get_array_length(ndr, &r->unknown2), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown2_0, 0);
-		}
-		if (r->unknown3) {
-			_mem_save_unknown3_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->unknown3, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->unknown3));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->unknown3));
-			if (ndr_get_array_length(ndr, &r->unknown3) > ndr_get_array_size(ndr, &r->unknown3)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->unknown3), ndr_get_array_length(ndr, &r->unknown3));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->unknown3), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->unknown3, ndr_get_array_length(ndr, &r->unknown3), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown3_0, 0);
-		}
-		if (r->unknown4) {
-			_mem_save_unknown4_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->unknown4, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->unknown4));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->unknown4));
-			if (ndr_get_array_length(ndr, &r->unknown4) > ndr_get_array_size(ndr, &r->unknown4)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->unknown4), ndr_get_array_length(ndr, &r->unknown4));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->unknown4), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->unknown4, ndr_get_array_length(ndr, &r->unknown4), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown4_0, 0);
-		}
-		NDR_CHECK(ndr_pull_netr_BinaryString(ndr, NDR_BUFFERS, &r->blob2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->product));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown5));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown6));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DomainQuery1(struct ndr_print *ndr, const char *name, const struct netr_DomainQuery1 *r)
-{
-	uint32_t cntr_unknown7_0;
-	ndr_print_struct(ndr, name, "netr_DomainQuery1");
-	ndr->depth++;
-	ndr_print_netr_Blob(ndr, "blob", &r->blob);
-	ndr_print_ptr(ndr, "workstation_domain", r->workstation_domain);
-	ndr->depth++;
-	if (r->workstation_domain) {
-		ndr_print_string(ndr, "workstation_domain", r->workstation_domain);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "workstation_site", r->workstation_site);
-	ndr->depth++;
-	if (r->workstation_site) {
-		ndr_print_string(ndr, "workstation_site", r->workstation_site);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "unknown1", r->unknown1);
-	ndr->depth++;
-	if (r->unknown1) {
-		ndr_print_string(ndr, "unknown1", r->unknown1);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "unknown2", r->unknown2);
-	ndr->depth++;
-	if (r->unknown2) {
-		ndr_print_string(ndr, "unknown2", r->unknown2);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "unknown3", r->unknown3);
-	ndr->depth++;
-	if (r->unknown3) {
-		ndr_print_string(ndr, "unknown3", r->unknown3);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "unknown4", r->unknown4);
-	ndr->depth++;
-	if (r->unknown4) {
-		ndr_print_string(ndr, "unknown4", r->unknown4);
-	}
-	ndr->depth--;
-	ndr_print_netr_BinaryString(ndr, "blob2", &r->blob2);
-	ndr_print_lsa_String(ndr, "product", &r->product);
-	ndr_print_lsa_String(ndr, "unknown5", &r->unknown5);
-	ndr_print_lsa_String(ndr, "unknown6", &r->unknown6);
-	ndr->print(ndr, "%s: ARRAY(%d)", "unknown7", 4);
-	ndr->depth++;
-	for (cntr_unknown7_0=0;cntr_unknown7_0<4;cntr_unknown7_0++) {
-		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_unknown7_0) != -1) {
-			ndr_print_uint32(ndr, "unknown7", r->unknown7[cntr_unknown7_0]);
-			free(idx_0);
-		}
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DomainQuery(struct ndr_push *ndr, int ndr_flags, const union netr_DomainQuery *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 1: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->query1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->query1));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 1:
-				if (r->query1) {
-					NDR_CHECK(ndr_push_netr_DomainQuery1(ndr, NDR_SCALARS|NDR_BUFFERS, r->query1));
-				}
-			break;
-
-			case 2:
-				if (r->query1) {
-					NDR_CHECK(ndr_push_netr_DomainQuery1(ndr, NDR_SCALARS|NDR_BUFFERS, r->query1));
-				}
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DomainQuery(struct ndr_pull *ndr, int ndr_flags, union netr_DomainQuery *r)
-{
-	int level;
-	uint32_t _level;
-	TALLOC_CTX *_mem_save_query1_0;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 1: {
-				uint32_t _ptr_query1;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_query1));
-				if (_ptr_query1) {
-					NDR_PULL_ALLOC(ndr, r->query1);
-				} else {
-					r->query1 = NULL;
-				}
-			break; }
-
-			case 2: {
-				uint32_t _ptr_query1;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_query1));
-				if (_ptr_query1) {
-					NDR_PULL_ALLOC(ndr, r->query1);
-				} else {
-					r->query1 = NULL;
-				}
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 1:
-				if (r->query1) {
-					_mem_save_query1_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->query1, 0);
-					NDR_CHECK(ndr_pull_netr_DomainQuery1(ndr, NDR_SCALARS|NDR_BUFFERS, r->query1));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_query1_0, 0);
-				}
-			break;
-
-			case 2:
-				if (r->query1) {
-					_mem_save_query1_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->query1, 0);
-					NDR_CHECK(ndr_pull_netr_DomainQuery1(ndr, NDR_SCALARS|NDR_BUFFERS, r->query1));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_query1_0, 0);
-				}
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DomainQuery(struct ndr_print *ndr, const char *name, const union netr_DomainQuery *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "netr_DomainQuery");
-	switch (level) {
-		case 1:
-			ndr_print_ptr(ndr, "query1", r->query1);
-			ndr->depth++;
-			if (r->query1) {
-				ndr_print_netr_DomainQuery1(ndr, "query1", r->query1);
-			}
-			ndr->depth--;
-		break;
-
-		case 2:
-			ndr_print_ptr(ndr, "query1", r->query1);
-			ndr->depth++;
-			if (r->query1) {
-				ndr_print_netr_DomainQuery1(ndr, "query1", r->query1);
-			}
-			ndr->depth--;
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_netr_DomainTrustInfo(struct ndr_push *ndr, int ndr_flags, const struct netr_DomainTrustInfo *r)
-{
-	uint32_t cntr_unknown1_0;
-	uint32_t cntr_unknown_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->domainname));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->fulldomainname));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->forest));
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->guid));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sid));
-		for (cntr_unknown1_0 = 0; cntr_unknown1_0 < 4; cntr_unknown1_0++) {
-			NDR_CHECK(ndr_push_netr_BinaryString(ndr, NDR_SCALARS, &r->unknown1[cntr_unknown1_0]));
-		}
-		for (cntr_unknown_0 = 0; cntr_unknown_0 < 4; cntr_unknown_0++) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown[cntr_unknown_0]));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->domainname));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->fulldomainname));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->forest));
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_BUFFERS, &r->guid));
-		if (r->sid) {
-			NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-		}
-		for (cntr_unknown1_0 = 0; cntr_unknown1_0 < 4; cntr_unknown1_0++) {
-			NDR_CHECK(ndr_push_netr_BinaryString(ndr, NDR_BUFFERS, &r->unknown1[cntr_unknown1_0]));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DomainTrustInfo(struct ndr_pull *ndr, int ndr_flags, struct netr_DomainTrustInfo *r)
-{
-	uint32_t _ptr_sid;
-	TALLOC_CTX *_mem_save_sid_0;
-	uint32_t cntr_unknown1_0;
-	uint32_t cntr_unknown_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->domainname));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->fulldomainname));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->forest));
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->guid));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sid));
-		if (_ptr_sid) {
-			NDR_PULL_ALLOC(ndr, r->sid);
-		} else {
-			r->sid = NULL;
-		}
-		for (cntr_unknown1_0 = 0; cntr_unknown1_0 < 4; cntr_unknown1_0++) {
-			NDR_CHECK(ndr_pull_netr_BinaryString(ndr, NDR_SCALARS, &r->unknown1[cntr_unknown1_0]));
-		}
-		for (cntr_unknown_0 = 0; cntr_unknown_0 < 4; cntr_unknown_0++) {
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown[cntr_unknown_0]));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->domainname));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->fulldomainname));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->forest));
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_BUFFERS, &r->guid));
-		if (r->sid) {
-			_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sid, 0);
-			NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, 0);
-		}
-		for (cntr_unknown1_0 = 0; cntr_unknown1_0 < 4; cntr_unknown1_0++) {
-			NDR_CHECK(ndr_pull_netr_BinaryString(ndr, NDR_BUFFERS, &r->unknown1[cntr_unknown1_0]));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DomainTrustInfo(struct ndr_print *ndr, const char *name, const struct netr_DomainTrustInfo *r)
-{
-	uint32_t cntr_unknown1_0;
-	uint32_t cntr_unknown_0;
-	ndr_print_struct(ndr, name, "netr_DomainTrustInfo");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "domainname", &r->domainname);
-	ndr_print_lsa_String(ndr, "fulldomainname", &r->fulldomainname);
-	ndr_print_lsa_String(ndr, "forest", &r->forest);
-	ndr_print_GUID(ndr, "guid", &r->guid);
-	ndr_print_ptr(ndr, "sid", r->sid);
-	ndr->depth++;
-	if (r->sid) {
-		ndr_print_dom_sid2(ndr, "sid", r->sid);
-	}
-	ndr->depth--;
-	ndr->print(ndr, "%s: ARRAY(%d)", "unknown1", 4);
-	ndr->depth++;
-	for (cntr_unknown1_0=0;cntr_unknown1_0<4;cntr_unknown1_0++) {
-		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_unknown1_0) != -1) {
-			ndr_print_netr_BinaryString(ndr, "unknown1", &r->unknown1[cntr_unknown1_0]);
-			free(idx_0);
-		}
-	}
-	ndr->depth--;
-	ndr->print(ndr, "%s: ARRAY(%d)", "unknown", 4);
-	ndr->depth++;
-	for (cntr_unknown_0=0;cntr_unknown_0<4;cntr_unknown_0++) {
-		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_unknown_0) != -1) {
-			ndr_print_uint32(ndr, "unknown", r->unknown[cntr_unknown_0]);
-			free(idx_0);
-		}
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DomainInfo1(struct ndr_push *ndr, int ndr_flags, const struct netr_DomainInfo1 *r)
-{
-	uint32_t cntr_trusts_1;
-	uint32_t cntr_unknown_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_netr_DomainTrustInfo(ndr, NDR_SCALARS, &r->domaininfo));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_trusts));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->trusts));
-		for (cntr_unknown_0 = 0; cntr_unknown_0 < 14; cntr_unknown_0++) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown[cntr_unknown_0]));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_netr_DomainTrustInfo(ndr, NDR_BUFFERS, &r->domaininfo));
-		if (r->trusts) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_trusts));
-			for (cntr_trusts_1 = 0; cntr_trusts_1 < r->num_trusts; cntr_trusts_1++) {
-				NDR_CHECK(ndr_push_netr_DomainTrustInfo(ndr, NDR_SCALARS, &r->trusts[cntr_trusts_1]));
-			}
-			for (cntr_trusts_1 = 0; cntr_trusts_1 < r->num_trusts; cntr_trusts_1++) {
-				NDR_CHECK(ndr_push_netr_DomainTrustInfo(ndr, NDR_BUFFERS, &r->trusts[cntr_trusts_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DomainInfo1(struct ndr_pull *ndr, int ndr_flags, struct netr_DomainInfo1 *r)
-{
-	uint32_t _ptr_trusts;
-	uint32_t cntr_trusts_1;
-	TALLOC_CTX *_mem_save_trusts_0;
-	TALLOC_CTX *_mem_save_trusts_1;
-	uint32_t cntr_unknown_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_netr_DomainTrustInfo(ndr, NDR_SCALARS, &r->domaininfo));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_trusts));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_trusts));
-		if (_ptr_trusts) {
-			NDR_PULL_ALLOC(ndr, r->trusts);
-		} else {
-			r->trusts = NULL;
-		}
-		for (cntr_unknown_0 = 0; cntr_unknown_0 < 14; cntr_unknown_0++) {
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown[cntr_unknown_0]));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_netr_DomainTrustInfo(ndr, NDR_BUFFERS, &r->domaininfo));
-		if (r->trusts) {
-			_mem_save_trusts_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->trusts, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->trusts));
-			NDR_PULL_ALLOC_N(ndr, r->trusts, ndr_get_array_size(ndr, &r->trusts));
-			_mem_save_trusts_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->trusts, 0);
-			for (cntr_trusts_1 = 0; cntr_trusts_1 < r->num_trusts; cntr_trusts_1++) {
-				NDR_CHECK(ndr_pull_netr_DomainTrustInfo(ndr, NDR_SCALARS, &r->trusts[cntr_trusts_1]));
-			}
-			for (cntr_trusts_1 = 0; cntr_trusts_1 < r->num_trusts; cntr_trusts_1++) {
-				NDR_CHECK(ndr_pull_netr_DomainTrustInfo(ndr, NDR_BUFFERS, &r->trusts[cntr_trusts_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_trusts_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_trusts_0, 0);
-		}
-		if (r->trusts) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->trusts, r->num_trusts));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DomainInfo1(struct ndr_print *ndr, const char *name, const struct netr_DomainInfo1 *r)
-{
-	uint32_t cntr_trusts_1;
-	uint32_t cntr_unknown_0;
-	ndr_print_struct(ndr, name, "netr_DomainInfo1");
-	ndr->depth++;
-	ndr_print_netr_DomainTrustInfo(ndr, "domaininfo", &r->domaininfo);
-	ndr_print_uint32(ndr, "num_trusts", r->num_trusts);
-	ndr_print_ptr(ndr, "trusts", r->trusts);
-	ndr->depth++;
-	if (r->trusts) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "trusts", r->num_trusts);
-		ndr->depth++;
-		for (cntr_trusts_1=0;cntr_trusts_1<r->num_trusts;cntr_trusts_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_trusts_1) != -1) {
-				ndr_print_netr_DomainTrustInfo(ndr, "trusts", &r->trusts[cntr_trusts_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->print(ndr, "%s: ARRAY(%d)", "unknown", 14);
-	ndr->depth++;
-	for (cntr_unknown_0=0;cntr_unknown_0<14;cntr_unknown_0++) {
-		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_unknown_0) != -1) {
-			ndr_print_uint32(ndr, "unknown", r->unknown[cntr_unknown_0]);
-			free(idx_0);
-		}
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DomainInfo(struct ndr_push *ndr, int ndr_flags, const union netr_DomainInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 1: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 1:
-				if (r->info1) {
-					NDR_CHECK(ndr_push_netr_DomainInfo1(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1));
-				}
-			break;
-
-			case 2:
-				if (r->info1) {
-					NDR_CHECK(ndr_push_netr_DomainInfo1(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1));
-				}
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DomainInfo(struct ndr_pull *ndr, int ndr_flags, union netr_DomainInfo *r)
-{
-	int level;
-	uint32_t _level;
-	TALLOC_CTX *_mem_save_info1_0;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 1: {
-				uint32_t _ptr_info1;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1));
-				if (_ptr_info1) {
-					NDR_PULL_ALLOC(ndr, r->info1);
-				} else {
-					r->info1 = NULL;
-				}
-			break; }
-
-			case 2: {
-				uint32_t _ptr_info1;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1));
-				if (_ptr_info1) {
-					NDR_PULL_ALLOC(ndr, r->info1);
-				} else {
-					r->info1 = NULL;
-				}
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 1:
-				if (r->info1) {
-					_mem_save_info1_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1, 0);
-					NDR_CHECK(ndr_pull_netr_DomainInfo1(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1_0, 0);
-				}
-			break;
-
-			case 2:
-				if (r->info1) {
-					_mem_save_info1_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1, 0);
-					NDR_CHECK(ndr_pull_netr_DomainInfo1(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1_0, 0);
-				}
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DomainInfo(struct ndr_print *ndr, const char *name, const union netr_DomainInfo *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "netr_DomainInfo");
-	switch (level) {
-		case 1:
-			ndr_print_ptr(ndr, "info1", r->info1);
-			ndr->depth++;
-			if (r->info1) {
-				ndr_print_netr_DomainInfo1(ndr, "info1", r->info1);
-			}
-			ndr->depth--;
-		break;
-
-		case 2:
-			ndr_print_ptr(ndr, "info1", r->info1);
-			ndr->depth++;
-			if (r->info1) {
-				ndr_print_netr_DomainInfo1(ndr, "info1", r->info1);
-			}
-			ndr->depth--;
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_netr_CryptPassword(struct ndr_push *ndr, int ndr_flags, const struct netr_CryptPassword *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 4));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->data, 512));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->length));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_CryptPassword(struct ndr_pull *ndr, int ndr_flags, struct netr_CryptPassword *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 4));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->data, 512));
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->length));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_CryptPassword(struct ndr_print *ndr, const char *name, const struct netr_CryptPassword *r)
-{
-	ndr_print_struct(ndr, name, "netr_CryptPassword");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "data", r->data, 512);
-		ndr_print_uint32(ndr, "length", r->length);
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-
-static enum ndr_err_code ndr_push_netr_DsRAddressToSitenamesWCtr(struct ndr_push *ndr, int ndr_flags, const struct netr_DsRAddressToSitenamesWCtr *r)
-{
-	uint32_t cntr_sitename_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sitename));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->sitename) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_sitename_1 = 0; cntr_sitename_1 < r->count; cntr_sitename_1++) {
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->sitename[cntr_sitename_1]));
-			}
-			for (cntr_sitename_1 = 0; cntr_sitename_1 < r->count; cntr_sitename_1++) {
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->sitename[cntr_sitename_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DsRAddressToSitenamesWCtr(struct ndr_pull *ndr, int ndr_flags, struct netr_DsRAddressToSitenamesWCtr *r)
-{
-	uint32_t _ptr_sitename;
-	uint32_t cntr_sitename_1;
-	TALLOC_CTX *_mem_save_sitename_0;
-	TALLOC_CTX *_mem_save_sitename_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sitename));
-		if (_ptr_sitename) {
-			NDR_PULL_ALLOC(ndr, r->sitename);
-		} else {
-			r->sitename = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->sitename) {
-			_mem_save_sitename_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sitename, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->sitename));
-			NDR_PULL_ALLOC_N(ndr, r->sitename, ndr_get_array_size(ndr, &r->sitename));
-			_mem_save_sitename_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sitename, 0);
-			for (cntr_sitename_1 = 0; cntr_sitename_1 < r->count; cntr_sitename_1++) {
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->sitename[cntr_sitename_1]));
-			}
-			for (cntr_sitename_1 = 0; cntr_sitename_1 < r->count; cntr_sitename_1++) {
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->sitename[cntr_sitename_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sitename_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sitename_0, 0);
-		}
-		if (r->sitename) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->sitename, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DsRAddressToSitenamesWCtr(struct ndr_print *ndr, const char *name, const struct netr_DsRAddressToSitenamesWCtr *r)
-{
-	uint32_t cntr_sitename_1;
-	ndr_print_struct(ndr, name, "netr_DsRAddressToSitenamesWCtr");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "sitename", r->sitename);
-	ndr->depth++;
-	if (r->sitename) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "sitename", r->count);
-		ndr->depth++;
-		for (cntr_sitename_1=0;cntr_sitename_1<r->count;cntr_sitename_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_sitename_1) != -1) {
-				ndr_print_lsa_String(ndr, "sitename", &r->sitename[cntr_sitename_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DsRAddress(struct ndr_push *ndr, int ndr_flags, const struct netr_DsRAddress *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->buffer));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->size));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->buffer) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->size));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->buffer, r->size));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DsRAddress(struct ndr_pull *ndr, int ndr_flags, struct netr_DsRAddress *r)
-{
-	uint32_t _ptr_buffer;
-	TALLOC_CTX *_mem_save_buffer_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_buffer));
-		if (_ptr_buffer) {
-			NDR_PULL_ALLOC(ndr, r->buffer);
-		} else {
-			r->buffer = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->size));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->buffer) {
-			_mem_save_buffer_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->buffer, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->buffer));
-			NDR_PULL_ALLOC_N(ndr, r->buffer, ndr_get_array_size(ndr, &r->buffer));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->buffer, ndr_get_array_size(ndr, &r->buffer)));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_buffer_0, 0);
-		}
-		if (r->buffer) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->buffer, r->size));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DsRAddress(struct ndr_print *ndr, const char *name, const struct netr_DsRAddress *r)
-{
-	ndr_print_struct(ndr, name, "netr_DsRAddress");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "buffer", r->buffer);
-	ndr->depth++;
-	if (r->buffer) {
-		ndr_print_array_uint8(ndr, "buffer", r->buffer, r->size);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "size", r->size);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_TrustFlags(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_TrustFlags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_TrustFlags(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETR_TRUST_FLAG_IN_FOREST", NETR_TRUST_FLAG_IN_FOREST, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETR_TRUST_FLAG_OUTBOUND", NETR_TRUST_FLAG_OUTBOUND, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETR_TRUST_FLAG_TREEROOT", NETR_TRUST_FLAG_TREEROOT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETR_TRUST_FLAG_PRIMARY", NETR_TRUST_FLAG_PRIMARY, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETR_TRUST_FLAG_NATIVE", NETR_TRUST_FLAG_NATIVE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETR_TRUST_FLAG_INBOUND", NETR_TRUST_FLAG_INBOUND, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_TrustType(struct ndr_push *ndr, int ndr_flags, enum netr_TrustType r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_TrustType(struct ndr_pull *ndr, int ndr_flags, enum netr_TrustType *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_TrustType(struct ndr_print *ndr, const char *name, enum netr_TrustType r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case NETR_TRUST_TYPE_DOWNLEVEL: val = "NETR_TRUST_TYPE_DOWNLEVEL"; break;
-		case NETR_TRUST_TYPE_UPLEVEL: val = "NETR_TRUST_TYPE_UPLEVEL"; break;
-		case NETR_TRUST_TYPE_MIT: val = "NETR_TRUST_TYPE_MIT"; break;
-		case NETR_TRUST_TYPE_DCE: val = "NETR_TRUST_TYPE_DCE"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_netr_TrustAttributes(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_TrustAttributes(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_TrustAttributes(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETR_TRUST_ATTRIBUTE_NON_TRANSITIVE", NETR_TRUST_ATTRIBUTE_NON_TRANSITIVE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETR_TRUST_ATTRIBUTE_UPLEVEL_ONLY", NETR_TRUST_ATTRIBUTE_UPLEVEL_ONLY, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETR_TRUST_ATTRIBUTE_QUARANTINED_DOMAIN", NETR_TRUST_ATTRIBUTE_QUARANTINED_DOMAIN, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETR_TRUST_ATTRIBUTE_FOREST_TRANSITIVE", NETR_TRUST_ATTRIBUTE_FOREST_TRANSITIVE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETR_TRUST_ATTRIBUTE_CROSS_ORGANIZATION", NETR_TRUST_ATTRIBUTE_CROSS_ORGANIZATION, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETR_TRUST_ATTRIBUTE_WITHIN_FOREST", NETR_TRUST_ATTRIBUTE_WITHIN_FOREST, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NETR_TRUST_ATTRIBUTE_TREAT_AS_EXTERNAL", NETR_TRUST_ATTRIBUTE_TREAT_AS_EXTERNAL, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DomainTrust(struct ndr_push *ndr, int ndr_flags, const struct netr_DomainTrust *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->netbios_name));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->dns_name));
-		NDR_CHECK(ndr_push_netr_TrustFlags(ndr, NDR_SCALARS, r->trust_flags));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->parent_index));
-		NDR_CHECK(ndr_push_netr_TrustType(ndr, NDR_SCALARS, r->trust_type));
-		NDR_CHECK(ndr_push_netr_TrustAttributes(ndr, NDR_SCALARS, r->trust_attributes));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sid));
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->guid));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->netbios_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->netbios_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->netbios_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->netbios_name, ndr_charset_length(r->netbios_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->dns_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->dns_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->dns_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->dns_name, ndr_charset_length(r->dns_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->sid) {
-			NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-		}
-		NDR_CHECK(ndr_push_GUID(ndr, NDR_BUFFERS, &r->guid));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DomainTrust(struct ndr_pull *ndr, int ndr_flags, struct netr_DomainTrust *r)
-{
-	uint32_t _ptr_netbios_name;
-	TALLOC_CTX *_mem_save_netbios_name_0;
-	uint32_t _ptr_dns_name;
-	TALLOC_CTX *_mem_save_dns_name_0;
-	uint32_t _ptr_sid;
-	TALLOC_CTX *_mem_save_sid_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_netbios_name));
-		if (_ptr_netbios_name) {
-			NDR_PULL_ALLOC(ndr, r->netbios_name);
-		} else {
-			r->netbios_name = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dns_name));
-		if (_ptr_dns_name) {
-			NDR_PULL_ALLOC(ndr, r->dns_name);
-		} else {
-			r->dns_name = NULL;
-		}
-		NDR_CHECK(ndr_pull_netr_TrustFlags(ndr, NDR_SCALARS, &r->trust_flags));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->parent_index));
-		NDR_CHECK(ndr_pull_netr_TrustType(ndr, NDR_SCALARS, &r->trust_type));
-		NDR_CHECK(ndr_pull_netr_TrustAttributes(ndr, NDR_SCALARS, &r->trust_attributes));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sid));
-		if (_ptr_sid) {
-			NDR_PULL_ALLOC(ndr, r->sid);
-		} else {
-			r->sid = NULL;
-		}
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->guid));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->netbios_name) {
-			_mem_save_netbios_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->netbios_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->netbios_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->netbios_name));
-			if (ndr_get_array_length(ndr, &r->netbios_name) > ndr_get_array_size(ndr, &r->netbios_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->netbios_name), ndr_get_array_length(ndr, &r->netbios_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->netbios_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->netbios_name, ndr_get_array_length(ndr, &r->netbios_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_netbios_name_0, 0);
-		}
-		if (r->dns_name) {
-			_mem_save_dns_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->dns_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->dns_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->dns_name));
-			if (ndr_get_array_length(ndr, &r->dns_name) > ndr_get_array_size(ndr, &r->dns_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->dns_name), ndr_get_array_length(ndr, &r->dns_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->dns_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->dns_name, ndr_get_array_length(ndr, &r->dns_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dns_name_0, 0);
-		}
-		if (r->sid) {
-			_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sid, 0);
-			NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->sid));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, 0);
-		}
-		NDR_CHECK(ndr_pull_GUID(ndr, NDR_BUFFERS, &r->guid));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DomainTrust(struct ndr_print *ndr, const char *name, const struct netr_DomainTrust *r)
-{
-	ndr_print_struct(ndr, name, "netr_DomainTrust");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "netbios_name", r->netbios_name);
-	ndr->depth++;
-	if (r->netbios_name) {
-		ndr_print_string(ndr, "netbios_name", r->netbios_name);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "dns_name", r->dns_name);
-	ndr->depth++;
-	if (r->dns_name) {
-		ndr_print_string(ndr, "dns_name", r->dns_name);
-	}
-	ndr->depth--;
-	ndr_print_netr_TrustFlags(ndr, "trust_flags", r->trust_flags);
-	ndr_print_uint32(ndr, "parent_index", r->parent_index);
-	ndr_print_netr_TrustType(ndr, "trust_type", r->trust_type);
-	ndr_print_netr_TrustAttributes(ndr, "trust_attributes", r->trust_attributes);
-	ndr_print_ptr(ndr, "sid", r->sid);
-	ndr->depth++;
-	if (r->sid) {
-		ndr_print_dom_sid2(ndr, "sid", r->sid);
-	}
-	ndr->depth--;
-	ndr_print_GUID(ndr, "guid", &r->guid);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DomainTrustList(struct ndr_push *ndr, int ndr_flags, const struct netr_DomainTrustList *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_netr_DomainTrust(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_netr_DomainTrust(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DomainTrustList(struct ndr_pull *ndr, int ndr_flags, struct netr_DomainTrustList *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_netr_DomainTrust(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_netr_DomainTrust(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DomainTrustList(struct ndr_print *ndr, const char *name, const struct netr_DomainTrustList *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "netr_DomainTrustList");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_netr_DomainTrust(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DsRAddressToSitenamesExWCtr(struct ndr_push *ndr, int ndr_flags, const struct netr_DsRAddressToSitenamesExWCtr *r)
-{
-	uint32_t cntr_sitename_1;
-	uint32_t cntr_subnetname_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sitename));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->subnetname));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->sitename) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_sitename_1 = 0; cntr_sitename_1 < r->count; cntr_sitename_1++) {
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->sitename[cntr_sitename_1]));
-			}
-			for (cntr_sitename_1 = 0; cntr_sitename_1 < r->count; cntr_sitename_1++) {
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->sitename[cntr_sitename_1]));
-			}
-		}
-		if (r->subnetname) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_subnetname_1 = 0; cntr_subnetname_1 < r->count; cntr_subnetname_1++) {
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->subnetname[cntr_subnetname_1]));
-			}
-			for (cntr_subnetname_1 = 0; cntr_subnetname_1 < r->count; cntr_subnetname_1++) {
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->subnetname[cntr_subnetname_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DsRAddressToSitenamesExWCtr(struct ndr_pull *ndr, int ndr_flags, struct netr_DsRAddressToSitenamesExWCtr *r)
-{
-	uint32_t _ptr_sitename;
-	uint32_t cntr_sitename_1;
-	TALLOC_CTX *_mem_save_sitename_0;
-	TALLOC_CTX *_mem_save_sitename_1;
-	uint32_t _ptr_subnetname;
-	uint32_t cntr_subnetname_1;
-	TALLOC_CTX *_mem_save_subnetname_0;
-	TALLOC_CTX *_mem_save_subnetname_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sitename));
-		if (_ptr_sitename) {
-			NDR_PULL_ALLOC(ndr, r->sitename);
-		} else {
-			r->sitename = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_subnetname));
-		if (_ptr_subnetname) {
-			NDR_PULL_ALLOC(ndr, r->subnetname);
-		} else {
-			r->subnetname = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->sitename) {
-			_mem_save_sitename_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sitename, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->sitename));
-			NDR_PULL_ALLOC_N(ndr, r->sitename, ndr_get_array_size(ndr, &r->sitename));
-			_mem_save_sitename_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sitename, 0);
-			for (cntr_sitename_1 = 0; cntr_sitename_1 < r->count; cntr_sitename_1++) {
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->sitename[cntr_sitename_1]));
-			}
-			for (cntr_sitename_1 = 0; cntr_sitename_1 < r->count; cntr_sitename_1++) {
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->sitename[cntr_sitename_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sitename_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sitename_0, 0);
-		}
-		if (r->subnetname) {
-			_mem_save_subnetname_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->subnetname, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->subnetname));
-			NDR_PULL_ALLOC_N(ndr, r->subnetname, ndr_get_array_size(ndr, &r->subnetname));
-			_mem_save_subnetname_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->subnetname, 0);
-			for (cntr_subnetname_1 = 0; cntr_subnetname_1 < r->count; cntr_subnetname_1++) {
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->subnetname[cntr_subnetname_1]));
-			}
-			for (cntr_subnetname_1 = 0; cntr_subnetname_1 < r->count; cntr_subnetname_1++) {
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->subnetname[cntr_subnetname_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_subnetname_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_subnetname_0, 0);
-		}
-		if (r->sitename) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->sitename, r->count));
-		}
-		if (r->subnetname) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->subnetname, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DsRAddressToSitenamesExWCtr(struct ndr_print *ndr, const char *name, const struct netr_DsRAddressToSitenamesExWCtr *r)
-{
-	uint32_t cntr_sitename_1;
-	uint32_t cntr_subnetname_1;
-	ndr_print_struct(ndr, name, "netr_DsRAddressToSitenamesExWCtr");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "sitename", r->sitename);
-	ndr->depth++;
-	if (r->sitename) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "sitename", r->count);
-		ndr->depth++;
-		for (cntr_sitename_1=0;cntr_sitename_1<r->count;cntr_sitename_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_sitename_1) != -1) {
-				ndr_print_lsa_String(ndr, "sitename", &r->sitename[cntr_sitename_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "subnetname", r->subnetname);
-	ndr->depth++;
-	if (r->subnetname) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "subnetname", r->count);
-		ndr->depth++;
-		for (cntr_subnetname_1=0;cntr_subnetname_1<r->count;cntr_subnetname_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_subnetname_1) != -1) {
-				ndr_print_lsa_String(ndr, "subnetname", &r->subnetname[cntr_subnetname_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_DcSitesCtr(struct ndr_push *ndr, int ndr_flags, const struct DcSitesCtr *r)
-{
-	uint32_t cntr_sites_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_sites));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sites));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->sites) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_sites));
-			for (cntr_sites_1 = 0; cntr_sites_1 < r->num_sites; cntr_sites_1++) {
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->sites[cntr_sites_1]));
-			}
-			for (cntr_sites_1 = 0; cntr_sites_1 < r->num_sites; cntr_sites_1++) {
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->sites[cntr_sites_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_DcSitesCtr(struct ndr_pull *ndr, int ndr_flags, struct DcSitesCtr *r)
-{
-	uint32_t _ptr_sites;
-	uint32_t cntr_sites_1;
-	TALLOC_CTX *_mem_save_sites_0;
-	TALLOC_CTX *_mem_save_sites_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_sites));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sites));
-		if (_ptr_sites) {
-			NDR_PULL_ALLOC(ndr, r->sites);
-		} else {
-			r->sites = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->sites) {
-			_mem_save_sites_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sites, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->sites));
-			NDR_PULL_ALLOC_N(ndr, r->sites, ndr_get_array_size(ndr, &r->sites));
-			_mem_save_sites_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sites, 0);
-			for (cntr_sites_1 = 0; cntr_sites_1 < r->num_sites; cntr_sites_1++) {
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->sites[cntr_sites_1]));
-			}
-			for (cntr_sites_1 = 0; cntr_sites_1 < r->num_sites; cntr_sites_1++) {
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->sites[cntr_sites_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sites_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sites_0, 0);
-		}
-		if (r->sites) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->sites, r->num_sites));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_DcSitesCtr(struct ndr_print *ndr, const char *name, const struct DcSitesCtr *r)
-{
-	uint32_t cntr_sites_1;
-	ndr_print_struct(ndr, name, "DcSitesCtr");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "num_sites", r->num_sites);
-	ndr_print_ptr(ndr, "sites", r->sites);
-	ndr->depth++;
-	if (r->sites) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "sites", r->num_sites);
-		ndr->depth++;
-		for (cntr_sites_1=0;cntr_sites_1<r->num_sites;cntr_sites_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_sites_1) != -1) {
-				ndr_print_lsa_String(ndr, "sites", &r->sites[cntr_sites_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_LogonUasLogon(struct ndr_push *ndr, int flags, const struct netr_LogonUasLogon *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.account_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.account_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.account_name, ndr_charset_length(r->in.account_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.workstation, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.workstation, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.workstation, ndr_charset_length(r->in.workstation, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_UasInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_LogonUasLogon(struct ndr_pull *ndr, int flags, struct netr_LogonUasLogon *r)
-{
-	uint32_t _ptr_server_name;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.account_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.account_name));
-		if (ndr_get_array_length(ndr, &r->in.account_name) > ndr_get_array_size(ndr, &r->in.account_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.account_name), ndr_get_array_length(ndr, &r->in.account_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.account_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.account_name, ndr_get_array_length(ndr, &r->in.account_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.workstation));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.workstation));
-		if (ndr_get_array_length(ndr, &r->in.workstation) > ndr_get_array_size(ndr, &r->in.workstation)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.workstation), ndr_get_array_length(ndr, &r->in.workstation));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.workstation), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.workstation, ndr_get_array_length(ndr, &r->in.workstation), sizeof(uint16_t), CH_UTF16));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_UasInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_LogonUasLogon(struct ndr_print *ndr, const char *name, int flags, const struct netr_LogonUasLogon *r)
-{
-	ndr_print_struct(ndr, name, "netr_LogonUasLogon");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_LogonUasLogon");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "account_name", r->in.account_name);
-		ndr_print_string(ndr, "workstation", r->in.workstation);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_LogonUasLogon");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_netr_UasInfo(ndr, "info", r->out.info);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_LogonUasLogoff(struct ndr_push *ndr, int flags, const struct netr_LogonUasLogoff *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.account_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.account_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.account_name, ndr_charset_length(r->in.account_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.workstation, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.workstation, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.workstation, ndr_charset_length(r->in.workstation, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_UasLogoffInfo(ndr, NDR_SCALARS, r->out.info));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_LogonUasLogoff(struct ndr_pull *ndr, int flags, struct netr_LogonUasLogoff *r)
-{
-	uint32_t _ptr_server_name;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.account_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.account_name));
-		if (ndr_get_array_length(ndr, &r->in.account_name) > ndr_get_array_size(ndr, &r->in.account_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.account_name), ndr_get_array_length(ndr, &r->in.account_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.account_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.account_name, ndr_get_array_length(ndr, &r->in.account_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.workstation));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.workstation));
-		if (ndr_get_array_length(ndr, &r->in.workstation) > ndr_get_array_size(ndr, &r->in.workstation)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.workstation), ndr_get_array_length(ndr, &r->in.workstation));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.workstation), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.workstation, ndr_get_array_length(ndr, &r->in.workstation), sizeof(uint16_t), CH_UTF16));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_UasLogoffInfo(ndr, NDR_SCALARS, r->out.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_LogonUasLogoff(struct ndr_print *ndr, const char *name, int flags, const struct netr_LogonUasLogoff *r)
-{
-	ndr_print_struct(ndr, name, "netr_LogonUasLogoff");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_LogonUasLogoff");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "account_name", r->in.account_name);
-		ndr_print_string(ndr, "workstation", r->in.workstation);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_LogonUasLogoff");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_netr_UasLogoffInfo(ndr, "info", r->out.info);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_LogonSamLogon(struct ndr_push *ndr, int flags, const struct netr_LogonSamLogon *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.computer_name));
-		if (r->in.computer_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computer_name, ndr_charset_length(r->in.computer_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.credential));
-		if (r->in.credential) {
-			NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.return_authenticator));
-		if (r->in.return_authenticator) {
-			NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.return_authenticator));
-		}
-		NDR_CHECK(ndr_push_netr_LogonLevel(ndr, NDR_SCALARS, r->in.logon_level));
-		if (r->in.logon == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.logon, r->in.logon_level));
-		NDR_CHECK(ndr_push_netr_LogonInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.logon));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.validation_level));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.return_authenticator));
-		if (r->out.return_authenticator) {
-			NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		}
-		if (r->out.validation == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.validation, r->in.validation_level));
-		NDR_CHECK(ndr_push_netr_Validation(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.validation));
-		if (r->out.authoritative == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, *r->out.authoritative));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_LogonSamLogon(struct ndr_pull *ndr, int flags, struct netr_LogonSamLogon *r)
-{
-	uint32_t _ptr_server_name;
-	uint32_t _ptr_computer_name;
-	uint32_t _ptr_credential;
-	uint32_t _ptr_return_authenticator;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_computer_name_0;
-	TALLOC_CTX *_mem_save_credential_0;
-	TALLOC_CTX *_mem_save_return_authenticator_0;
-	TALLOC_CTX *_mem_save_logon_0;
-	TALLOC_CTX *_mem_save_validation_0;
-	TALLOC_CTX *_mem_save_authoritative_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_computer_name));
-		if (_ptr_computer_name) {
-			NDR_PULL_ALLOC(ndr, r->in.computer_name);
-		} else {
-			r->in.computer_name = NULL;
-		}
-		if (r->in.computer_name) {
-			_mem_save_computer_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.computer_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.computer_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.computer_name));
-			if (ndr_get_array_length(ndr, &r->in.computer_name) > ndr_get_array_size(ndr, &r->in.computer_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.computer_name), ndr_get_array_length(ndr, &r->in.computer_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computer_name, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_computer_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_credential));
-		if (_ptr_credential) {
-			NDR_PULL_ALLOC(ndr, r->in.credential);
-		} else {
-			r->in.credential = NULL;
-		}
-		if (r->in.credential) {
-			_mem_save_credential_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.credential, 0);
-			NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_credential_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_return_authenticator));
-		if (_ptr_return_authenticator) {
-			NDR_PULL_ALLOC(ndr, r->in.return_authenticator);
-		} else {
-			r->in.return_authenticator = NULL;
-		}
-		if (r->in.return_authenticator) {
-			_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.return_authenticator, 0);
-			NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.return_authenticator));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, 0);
-		}
-		NDR_CHECK(ndr_pull_netr_LogonLevel(ndr, NDR_SCALARS, &r->in.logon_level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.logon);
-		}
-		_mem_save_logon_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.logon, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.logon, r->in.logon_level));
-		NDR_CHECK(ndr_pull_netr_LogonInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.logon));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_logon_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.validation_level));
-		NDR_PULL_ALLOC(ndr, r->out.validation);
-		ZERO_STRUCTP(r->out.validation);
-		NDR_PULL_ALLOC(ndr, r->out.authoritative);
-		ZERO_STRUCTP(r->out.authoritative);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_return_authenticator));
-		if (_ptr_return_authenticator) {
-			NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		} else {
-			r->out.return_authenticator = NULL;
-		}
-		if (r->out.return_authenticator) {
-			_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.return_authenticator, 0);
-			NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.validation);
-		}
-		_mem_save_validation_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.validation, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.validation, r->in.validation_level));
-		NDR_CHECK(ndr_pull_netr_Validation(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.validation));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_validation_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.authoritative);
-		}
-		_mem_save_authoritative_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.authoritative, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, r->out.authoritative));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_authoritative_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_LogonSamLogon(struct ndr_print *ndr, const char *name, int flags, const struct netr_LogonSamLogon *r)
-{
-	ndr_print_struct(ndr, name, "netr_LogonSamLogon");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_LogonSamLogon");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "computer_name", r->in.computer_name);
-		ndr->depth++;
-		if (r->in.computer_name) {
-			ndr_print_string(ndr, "computer_name", r->in.computer_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "credential", r->in.credential);
-		ndr->depth++;
-		if (r->in.credential) {
-			ndr_print_netr_Authenticator(ndr, "credential", r->in.credential);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "return_authenticator", r->in.return_authenticator);
-		ndr->depth++;
-		if (r->in.return_authenticator) {
-			ndr_print_netr_Authenticator(ndr, "return_authenticator", r->in.return_authenticator);
-		}
-		ndr->depth--;
-		ndr_print_netr_LogonLevel(ndr, "logon_level", r->in.logon_level);
-		ndr_print_ptr(ndr, "logon", r->in.logon);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->in.logon, r->in.logon_level);
-		ndr_print_netr_LogonInfo(ndr, "logon", r->in.logon);
-		ndr->depth--;
-		ndr_print_uint16(ndr, "validation_level", r->in.validation_level);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_LogonSamLogon");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth++;
-		if (r->out.return_authenticator) {
-			ndr_print_netr_Authenticator(ndr, "return_authenticator", r->out.return_authenticator);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "validation", r->out.validation);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.validation, r->in.validation_level);
-		ndr_print_netr_Validation(ndr, "validation", r->out.validation);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "authoritative", r->out.authoritative);
-		ndr->depth++;
-		ndr_print_uint8(ndr, "authoritative", *r->out.authoritative);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_LogonSamLogoff(struct ndr_push *ndr, int flags, const struct netr_LogonSamLogoff *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.computer_name));
-		if (r->in.computer_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computer_name, ndr_charset_length(r->in.computer_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.credential));
-		if (r->in.credential) {
-			NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.return_authenticator));
-		if (r->in.return_authenticator) {
-			NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.return_authenticator));
-		}
-		NDR_CHECK(ndr_push_netr_LogonLevel(ndr, NDR_SCALARS, r->in.logon_level));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->in.logon, r->in.logon_level));
-		NDR_CHECK(ndr_push_netr_LogonInfo(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.logon));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.return_authenticator));
-		if (r->out.return_authenticator) {
-			NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_LogonSamLogoff(struct ndr_pull *ndr, int flags, struct netr_LogonSamLogoff *r)
-{
-	uint32_t _ptr_server_name;
-	uint32_t _ptr_computer_name;
-	uint32_t _ptr_credential;
-	uint32_t _ptr_return_authenticator;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_computer_name_0;
-	TALLOC_CTX *_mem_save_credential_0;
-	TALLOC_CTX *_mem_save_return_authenticator_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_computer_name));
-		if (_ptr_computer_name) {
-			NDR_PULL_ALLOC(ndr, r->in.computer_name);
-		} else {
-			r->in.computer_name = NULL;
-		}
-		if (r->in.computer_name) {
-			_mem_save_computer_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.computer_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.computer_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.computer_name));
-			if (ndr_get_array_length(ndr, &r->in.computer_name) > ndr_get_array_size(ndr, &r->in.computer_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.computer_name), ndr_get_array_length(ndr, &r->in.computer_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computer_name, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_computer_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_credential));
-		if (_ptr_credential) {
-			NDR_PULL_ALLOC(ndr, r->in.credential);
-		} else {
-			r->in.credential = NULL;
-		}
-		if (r->in.credential) {
-			_mem_save_credential_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.credential, 0);
-			NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_credential_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_return_authenticator));
-		if (_ptr_return_authenticator) {
-			NDR_PULL_ALLOC(ndr, r->in.return_authenticator);
-		} else {
-			r->in.return_authenticator = NULL;
-		}
-		if (r->in.return_authenticator) {
-			_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.return_authenticator, 0);
-			NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.return_authenticator));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, 0);
-		}
-		NDR_CHECK(ndr_pull_netr_LogonLevel(ndr, NDR_SCALARS, &r->in.logon_level));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->in.logon, r->in.logon_level));
-		NDR_CHECK(ndr_pull_netr_LogonInfo(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.logon));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_return_authenticator));
-		if (_ptr_return_authenticator) {
-			NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		} else {
-			r->out.return_authenticator = NULL;
-		}
-		if (r->out.return_authenticator) {
-			_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.return_authenticator, 0);
-			NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, 0);
-		}
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_LogonSamLogoff(struct ndr_print *ndr, const char *name, int flags, const struct netr_LogonSamLogoff *r)
-{
-	ndr_print_struct(ndr, name, "netr_LogonSamLogoff");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_LogonSamLogoff");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "computer_name", r->in.computer_name);
-		ndr->depth++;
-		if (r->in.computer_name) {
-			ndr_print_string(ndr, "computer_name", r->in.computer_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "credential", r->in.credential);
-		ndr->depth++;
-		if (r->in.credential) {
-			ndr_print_netr_Authenticator(ndr, "credential", r->in.credential);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "return_authenticator", r->in.return_authenticator);
-		ndr->depth++;
-		if (r->in.return_authenticator) {
-			ndr_print_netr_Authenticator(ndr, "return_authenticator", r->in.return_authenticator);
-		}
-		ndr->depth--;
-		ndr_print_netr_LogonLevel(ndr, "logon_level", r->in.logon_level);
-		ndr_print_set_switch_value(ndr, &r->in.logon, r->in.logon_level);
-		ndr_print_netr_LogonInfo(ndr, "logon", &r->in.logon);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_LogonSamLogoff");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth++;
-		if (r->out.return_authenticator) {
-			ndr_print_netr_Authenticator(ndr, "return_authenticator", r->out.return_authenticator);
-		}
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_ServerReqChallenge(struct ndr_push *ndr, int flags, const struct netr_ServerReqChallenge *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computer_name, ndr_charset_length(r->in.computer_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		if (r->in.credentials == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Credential(ndr, NDR_SCALARS, r->in.credentials));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.return_credentials == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Credential(ndr, NDR_SCALARS, r->out.return_credentials));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_ServerReqChallenge(struct ndr_pull *ndr, int flags, struct netr_ServerReqChallenge *r)
-{
-	uint32_t _ptr_server_name;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_credentials_0;
-	TALLOC_CTX *_mem_save_return_credentials_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.computer_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.computer_name));
-		if (ndr_get_array_length(ndr, &r->in.computer_name) > ndr_get_array_size(ndr, &r->in.computer_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.computer_name), ndr_get_array_length(ndr, &r->in.computer_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computer_name, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t), CH_UTF16));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.credentials);
-		}
-		_mem_save_credentials_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.credentials, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Credential(ndr, NDR_SCALARS, r->in.credentials));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_credentials_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.return_credentials);
-		ZERO_STRUCTP(r->out.return_credentials);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.return_credentials);
-		}
-		_mem_save_return_credentials_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.return_credentials, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Credential(ndr, NDR_SCALARS, r->out.return_credentials));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_credentials_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_ServerReqChallenge(struct ndr_print *ndr, const char *name, int flags, const struct netr_ServerReqChallenge *r)
-{
-	ndr_print_struct(ndr, name, "netr_ServerReqChallenge");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_ServerReqChallenge");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "computer_name", r->in.computer_name);
-		ndr_print_ptr(ndr, "credentials", r->in.credentials);
-		ndr->depth++;
-		ndr_print_netr_Credential(ndr, "credentials", r->in.credentials);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_ServerReqChallenge");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "return_credentials", r->out.return_credentials);
-		ndr->depth++;
-		ndr_print_netr_Credential(ndr, "return_credentials", r->out.return_credentials);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_ServerAuthenticate(struct ndr_push *ndr, int flags, const struct netr_ServerAuthenticate *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.account_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.account_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.account_name, ndr_charset_length(r->in.account_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_netr_SchannelType(ndr, NDR_SCALARS, r->in.secure_channel_type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computer_name, ndr_charset_length(r->in.computer_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		if (r->in.credentials == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Credential(ndr, NDR_SCALARS, r->in.credentials));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.return_credentials == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Credential(ndr, NDR_SCALARS, r->out.return_credentials));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_ServerAuthenticate(struct ndr_pull *ndr, int flags, struct netr_ServerAuthenticate *r)
-{
-	uint32_t _ptr_server_name;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_credentials_0;
-	TALLOC_CTX *_mem_save_return_credentials_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.account_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.account_name));
-		if (ndr_get_array_length(ndr, &r->in.account_name) > ndr_get_array_size(ndr, &r->in.account_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.account_name), ndr_get_array_length(ndr, &r->in.account_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.account_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.account_name, ndr_get_array_length(ndr, &r->in.account_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_netr_SchannelType(ndr, NDR_SCALARS, &r->in.secure_channel_type));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.computer_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.computer_name));
-		if (ndr_get_array_length(ndr, &r->in.computer_name) > ndr_get_array_size(ndr, &r->in.computer_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.computer_name), ndr_get_array_length(ndr, &r->in.computer_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computer_name, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t), CH_UTF16));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.credentials);
-		}
-		_mem_save_credentials_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.credentials, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Credential(ndr, NDR_SCALARS, r->in.credentials));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_credentials_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.return_credentials);
-		ZERO_STRUCTP(r->out.return_credentials);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.return_credentials);
-		}
-		_mem_save_return_credentials_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.return_credentials, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Credential(ndr, NDR_SCALARS, r->out.return_credentials));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_credentials_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_ServerAuthenticate(struct ndr_print *ndr, const char *name, int flags, const struct netr_ServerAuthenticate *r)
-{
-	ndr_print_struct(ndr, name, "netr_ServerAuthenticate");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_ServerAuthenticate");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "account_name", r->in.account_name);
-		ndr_print_netr_SchannelType(ndr, "secure_channel_type", r->in.secure_channel_type);
-		ndr_print_string(ndr, "computer_name", r->in.computer_name);
-		ndr_print_ptr(ndr, "credentials", r->in.credentials);
-		ndr->depth++;
-		ndr_print_netr_Credential(ndr, "credentials", r->in.credentials);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_ServerAuthenticate");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "return_credentials", r->out.return_credentials);
-		ndr->depth++;
-		ndr_print_netr_Credential(ndr, "return_credentials", r->out.return_credentials);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_ServerPasswordSet(struct ndr_push *ndr, int flags, const struct netr_ServerPasswordSet *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.account_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.account_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.account_name, ndr_charset_length(r->in.account_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_netr_SchannelType(ndr, NDR_SCALARS, r->in.secure_channel_type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computer_name, ndr_charset_length(r->in.computer_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		if (r->in.credential == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
-		if (r->in.new_password == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.new_password));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.return_authenticator == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_ServerPasswordSet(struct ndr_pull *ndr, int flags, struct netr_ServerPasswordSet *r)
-{
-	uint32_t _ptr_server_name;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_credential_0;
-	TALLOC_CTX *_mem_save_return_authenticator_0;
-	TALLOC_CTX *_mem_save_new_password_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.account_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.account_name));
-		if (ndr_get_array_length(ndr, &r->in.account_name) > ndr_get_array_size(ndr, &r->in.account_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.account_name), ndr_get_array_length(ndr, &r->in.account_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.account_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.account_name, ndr_get_array_length(ndr, &r->in.account_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_netr_SchannelType(ndr, NDR_SCALARS, &r->in.secure_channel_type));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.computer_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.computer_name));
-		if (ndr_get_array_length(ndr, &r->in.computer_name) > ndr_get_array_size(ndr, &r->in.computer_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.computer_name), ndr_get_array_length(ndr, &r->in.computer_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computer_name, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t), CH_UTF16));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.credential);
-		}
-		_mem_save_credential_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.credential, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_credential_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.new_password);
-		}
-		_mem_save_new_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.new_password, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.new_password));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_new_password_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		ZERO_STRUCTP(r->out.return_authenticator);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		}
-		_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.return_authenticator, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_ServerPasswordSet(struct ndr_print *ndr, const char *name, int flags, const struct netr_ServerPasswordSet *r)
-{
-	ndr_print_struct(ndr, name, "netr_ServerPasswordSet");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_ServerPasswordSet");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "account_name", r->in.account_name);
-		ndr_print_netr_SchannelType(ndr, "secure_channel_type", r->in.secure_channel_type);
-		ndr_print_string(ndr, "computer_name", r->in.computer_name);
-		ndr_print_ptr(ndr, "credential", r->in.credential);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "credential", r->in.credential);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "new_password", r->in.new_password);
-		ndr->depth++;
-		ndr_print_samr_Password(ndr, "new_password", r->in.new_password);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_ServerPasswordSet");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DatabaseDeltas(struct ndr_push *ndr, int flags, const struct netr_DatabaseDeltas *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.logon_server, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.logon_server, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.logon_server, ndr_charset_length(r->in.logon_server, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computername, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computername, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computername, ndr_charset_length(r->in.computername, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		if (r->in.credential == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
-		if (r->in.return_authenticator == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.return_authenticator));
-		NDR_CHECK(ndr_push_netr_SamDatabaseID(ndr, NDR_SCALARS, r->in.database_id));
-		if (r->in.sequence_num == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_udlong(ndr, NDR_SCALARS, *r->in.sequence_num));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.preferredmaximumlength));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.return_authenticator == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		if (r->out.sequence_num == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_udlong(ndr, NDR_SCALARS, *r->out.sequence_num));
-		if (r->out.delta_enum_array == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.delta_enum_array));
-		if (*r->out.delta_enum_array) {
-			NDR_CHECK(ndr_push_netr_DELTA_ENUM_ARRAY(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.delta_enum_array));
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DatabaseDeltas(struct ndr_pull *ndr, int flags, struct netr_DatabaseDeltas *r)
-{
-	uint32_t _ptr_delta_enum_array;
-	TALLOC_CTX *_mem_save_credential_0;
-	TALLOC_CTX *_mem_save_return_authenticator_0;
-	TALLOC_CTX *_mem_save_sequence_num_0;
-	TALLOC_CTX *_mem_save_delta_enum_array_0;
-	TALLOC_CTX *_mem_save_delta_enum_array_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.logon_server));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.logon_server));
-		if (ndr_get_array_length(ndr, &r->in.logon_server) > ndr_get_array_size(ndr, &r->in.logon_server)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.logon_server), ndr_get_array_length(ndr, &r->in.logon_server));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.logon_server), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.logon_server, ndr_get_array_length(ndr, &r->in.logon_server), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.computername));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.computername));
-		if (ndr_get_array_length(ndr, &r->in.computername) > ndr_get_array_size(ndr, &r->in.computername)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.computername), ndr_get_array_length(ndr, &r->in.computername));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computername), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computername, ndr_get_array_length(ndr, &r->in.computername), sizeof(uint16_t), CH_UTF16));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.credential);
-		}
-		_mem_save_credential_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.credential, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_credential_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.return_authenticator);
-		}
-		_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.return_authenticator, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.return_authenticator));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_SamDatabaseID(ndr, NDR_SCALARS, &r->in.database_id));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sequence_num);
-		}
-		_mem_save_sequence_num_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sequence_num, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_udlong(ndr, NDR_SCALARS, r->in.sequence_num));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sequence_num_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.preferredmaximumlength));
-		NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		*r->out.return_authenticator = *r->in.return_authenticator;
-		NDR_PULL_ALLOC(ndr, r->out.sequence_num);
-		*r->out.sequence_num = *r->in.sequence_num;
-		NDR_PULL_ALLOC(ndr, r->out.delta_enum_array);
-		ZERO_STRUCTP(r->out.delta_enum_array);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		}
-		_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.return_authenticator, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.sequence_num);
-		}
-		_mem_save_sequence_num_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.sequence_num, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_udlong(ndr, NDR_SCALARS, r->out.sequence_num));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sequence_num_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.delta_enum_array);
-		}
-		_mem_save_delta_enum_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.delta_enum_array, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_delta_enum_array));
-		if (_ptr_delta_enum_array) {
-			NDR_PULL_ALLOC(ndr, *r->out.delta_enum_array);
-		} else {
-			*r->out.delta_enum_array = NULL;
-		}
-		if (*r->out.delta_enum_array) {
-			_mem_save_delta_enum_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.delta_enum_array, 0);
-			NDR_CHECK(ndr_pull_netr_DELTA_ENUM_ARRAY(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.delta_enum_array));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_delta_enum_array_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_delta_enum_array_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DatabaseDeltas(struct ndr_print *ndr, const char *name, int flags, const struct netr_DatabaseDeltas *r)
-{
-	ndr_print_struct(ndr, name, "netr_DatabaseDeltas");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_DatabaseDeltas");
-		ndr->depth++;
-		ndr_print_string(ndr, "logon_server", r->in.logon_server);
-		ndr_print_string(ndr, "computername", r->in.computername);
-		ndr_print_ptr(ndr, "credential", r->in.credential);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "credential", r->in.credential);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "return_authenticator", r->in.return_authenticator);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "return_authenticator", r->in.return_authenticator);
-		ndr->depth--;
-		ndr_print_netr_SamDatabaseID(ndr, "database_id", r->in.database_id);
-		ndr_print_ptr(ndr, "sequence_num", r->in.sequence_num);
-		ndr->depth++;
-		ndr_print_udlong(ndr, "sequence_num", *r->in.sequence_num);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "preferredmaximumlength", r->in.preferredmaximumlength);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_DatabaseDeltas");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sequence_num", r->out.sequence_num);
-		ndr->depth++;
-		ndr_print_udlong(ndr, "sequence_num", *r->out.sequence_num);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "delta_enum_array", r->out.delta_enum_array);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "delta_enum_array", *r->out.delta_enum_array);
-		ndr->depth++;
-		if (*r->out.delta_enum_array) {
-			ndr_print_netr_DELTA_ENUM_ARRAY(ndr, "delta_enum_array", *r->out.delta_enum_array);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DatabaseSync(struct ndr_push *ndr, int flags, const struct netr_DatabaseSync *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.logon_server, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.logon_server, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.logon_server, ndr_charset_length(r->in.logon_server, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computername, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computername, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computername, ndr_charset_length(r->in.computername, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, &r->in.credential));
-		if (r->in.return_authenticator == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.return_authenticator));
-		NDR_CHECK(ndr_push_netr_SamDatabaseID(ndr, NDR_SCALARS, r->in.database_id));
-		if (r->in.sync_context == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.sync_context));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.preferredmaximumlength));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.return_authenticator == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		if (r->out.sync_context == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.sync_context));
-		if (r->out.delta_enum_array == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_DELTA_ENUM_ARRAY(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.delta_enum_array));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DatabaseSync(struct ndr_pull *ndr, int flags, struct netr_DatabaseSync *r)
-{
-	TALLOC_CTX *_mem_save_return_authenticator_0;
-	TALLOC_CTX *_mem_save_sync_context_0;
-	TALLOC_CTX *_mem_save_delta_enum_array_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.logon_server));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.logon_server));
-		if (ndr_get_array_length(ndr, &r->in.logon_server) > ndr_get_array_size(ndr, &r->in.logon_server)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.logon_server), ndr_get_array_length(ndr, &r->in.logon_server));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.logon_server), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.logon_server, ndr_get_array_length(ndr, &r->in.logon_server), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.computername));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.computername));
-		if (ndr_get_array_length(ndr, &r->in.computername) > ndr_get_array_size(ndr, &r->in.computername)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.computername), ndr_get_array_length(ndr, &r->in.computername));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computername), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computername, ndr_get_array_length(ndr, &r->in.computername), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, &r->in.credential));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.return_authenticator);
-		}
-		_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.return_authenticator, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.return_authenticator));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_SamDatabaseID(ndr, NDR_SCALARS, &r->in.database_id));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sync_context);
-		}
-		_mem_save_sync_context_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sync_context, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.sync_context));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sync_context_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.preferredmaximumlength));
-		NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		*r->out.return_authenticator = *r->in.return_authenticator;
-		NDR_PULL_ALLOC(ndr, r->out.sync_context);
-		*r->out.sync_context = *r->in.sync_context;
-		NDR_PULL_ALLOC(ndr, r->out.delta_enum_array);
-		ZERO_STRUCTP(r->out.delta_enum_array);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		}
-		_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.return_authenticator, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.sync_context);
-		}
-		_mem_save_sync_context_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.sync_context, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.sync_context));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sync_context_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.delta_enum_array);
-		}
-		_mem_save_delta_enum_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.delta_enum_array, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_DELTA_ENUM_ARRAY(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.delta_enum_array));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_delta_enum_array_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DatabaseSync(struct ndr_print *ndr, const char *name, int flags, const struct netr_DatabaseSync *r)
-{
-	ndr_print_struct(ndr, name, "netr_DatabaseSync");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_DatabaseSync");
-		ndr->depth++;
-		ndr_print_string(ndr, "logon_server", r->in.logon_server);
-		ndr_print_string(ndr, "computername", r->in.computername);
-		ndr_print_netr_Authenticator(ndr, "credential", &r->in.credential);
-		ndr_print_ptr(ndr, "return_authenticator", r->in.return_authenticator);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "return_authenticator", r->in.return_authenticator);
-		ndr->depth--;
-		ndr_print_netr_SamDatabaseID(ndr, "database_id", r->in.database_id);
-		ndr_print_ptr(ndr, "sync_context", r->in.sync_context);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "sync_context", *r->in.sync_context);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "preferredmaximumlength", r->in.preferredmaximumlength);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_DatabaseSync");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sync_context", r->out.sync_context);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "sync_context", *r->out.sync_context);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "delta_enum_array", r->out.delta_enum_array);
-		ndr->depth++;
-		ndr_print_netr_DELTA_ENUM_ARRAY(ndr, "delta_enum_array", r->out.delta_enum_array);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_AccountDeltas(struct ndr_push *ndr, int flags, const struct netr_AccountDeltas *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.logon_server));
-		if (r->in.logon_server) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.logon_server, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.logon_server, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.logon_server, ndr_charset_length(r->in.logon_server, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computername, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computername, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computername, ndr_charset_length(r->in.computername, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, &r->in.credential));
-		if (r->in.return_authenticator == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.return_authenticator));
-		NDR_CHECK(ndr_push_netr_UAS_INFO_0(ndr, NDR_SCALARS, &r->in.uas));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.count));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buffersize));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.return_authenticator == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		if (r->out.buffer == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		{
-			struct ndr_push *_ndr_buffer;
-			NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_buffer, 4, -1));
-			NDR_CHECK(ndr_push_netr_AccountBuffer(_ndr_buffer, NDR_SCALARS, r->out.buffer));
-			NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_buffer, 4, -1));
-		}
-		if (r->out.count_returned == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.count_returned));
-		if (r->out.total_entries == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.total_entries));
-		if (r->out.recordid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_UAS_INFO_0(ndr, NDR_SCALARS, r->out.recordid));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_AccountDeltas(struct ndr_pull *ndr, int flags, struct netr_AccountDeltas *r)
-{
-	uint32_t _ptr_logon_server;
-	TALLOC_CTX *_mem_save_logon_server_0;
-	TALLOC_CTX *_mem_save_return_authenticator_0;
-	TALLOC_CTX *_mem_save_buffer_0;
-	TALLOC_CTX *_mem_save_count_returned_0;
-	TALLOC_CTX *_mem_save_total_entries_0;
-	TALLOC_CTX *_mem_save_recordid_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_logon_server));
-		if (_ptr_logon_server) {
-			NDR_PULL_ALLOC(ndr, r->in.logon_server);
-		} else {
-			r->in.logon_server = NULL;
-		}
-		if (r->in.logon_server) {
-			_mem_save_logon_server_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.logon_server, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.logon_server));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.logon_server));
-			if (ndr_get_array_length(ndr, &r->in.logon_server) > ndr_get_array_size(ndr, &r->in.logon_server)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.logon_server), ndr_get_array_length(ndr, &r->in.logon_server));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.logon_server), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.logon_server, ndr_get_array_length(ndr, &r->in.logon_server), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_logon_server_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.computername));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.computername));
-		if (ndr_get_array_length(ndr, &r->in.computername) > ndr_get_array_size(ndr, &r->in.computername)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.computername), ndr_get_array_length(ndr, &r->in.computername));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computername), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computername, ndr_get_array_length(ndr, &r->in.computername), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, &r->in.credential));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.return_authenticator);
-		}
-		_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.return_authenticator, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.return_authenticator));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_UAS_INFO_0(ndr, NDR_SCALARS, &r->in.uas));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.count));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.buffersize));
-		NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		*r->out.return_authenticator = *r->in.return_authenticator;
-		NDR_PULL_ALLOC(ndr, r->out.buffer);
-		ZERO_STRUCTP(r->out.buffer);
-		NDR_PULL_ALLOC(ndr, r->out.count_returned);
-		ZERO_STRUCTP(r->out.count_returned);
-		NDR_PULL_ALLOC(ndr, r->out.total_entries);
-		ZERO_STRUCTP(r->out.total_entries);
-		NDR_PULL_ALLOC(ndr, r->out.recordid);
-		ZERO_STRUCTP(r->out.recordid);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		}
-		_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.return_authenticator, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.buffer);
-		}
-		_mem_save_buffer_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.buffer, LIBNDR_FLAG_REF_ALLOC);
-		{
-			struct ndr_pull *_ndr_buffer;
-			NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_buffer, 4, -1));
-			NDR_CHECK(ndr_pull_netr_AccountBuffer(_ndr_buffer, NDR_SCALARS, r->out.buffer));
-			NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_buffer, 4, -1));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_buffer_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.count_returned);
-		}
-		_mem_save_count_returned_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.count_returned, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.count_returned));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_count_returned_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.total_entries);
-		}
-		_mem_save_total_entries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.total_entries, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.total_entries));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_total_entries_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.recordid);
-		}
-		_mem_save_recordid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.recordid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_UAS_INFO_0(ndr, NDR_SCALARS, r->out.recordid));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_recordid_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_AccountDeltas(struct ndr_print *ndr, const char *name, int flags, const struct netr_AccountDeltas *r)
-{
-	ndr_print_struct(ndr, name, "netr_AccountDeltas");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_AccountDeltas");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "logon_server", r->in.logon_server);
-		ndr->depth++;
-		if (r->in.logon_server) {
-			ndr_print_string(ndr, "logon_server", r->in.logon_server);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "computername", r->in.computername);
-		ndr_print_netr_Authenticator(ndr, "credential", &r->in.credential);
-		ndr_print_ptr(ndr, "return_authenticator", r->in.return_authenticator);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "return_authenticator", r->in.return_authenticator);
-		ndr->depth--;
-		ndr_print_netr_UAS_INFO_0(ndr, "uas", &r->in.uas);
-		ndr_print_uint32(ndr, "count", r->in.count);
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr_print_uint32(ndr, "buffersize", r->in.buffersize);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_AccountDeltas");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "buffer", r->out.buffer);
-		ndr->depth++;
-		ndr_print_netr_AccountBuffer(ndr, "buffer", r->out.buffer);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "count_returned", r->out.count_returned);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "count_returned", *r->out.count_returned);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "total_entries", r->out.total_entries);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "total_entries", *r->out.total_entries);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "recordid", r->out.recordid);
-		ndr->depth++;
-		ndr_print_netr_UAS_INFO_0(ndr, "recordid", r->out.recordid);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_AccountSync(struct ndr_push *ndr, int flags, const struct netr_AccountSync *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.logon_server));
-		if (r->in.logon_server) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.logon_server, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.logon_server, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.logon_server, ndr_charset_length(r->in.logon_server, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computername, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computername, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computername, ndr_charset_length(r->in.computername, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, &r->in.credential));
-		if (r->in.return_authenticator == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.return_authenticator));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.reference));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buffersize));
-		if (r->in.recordid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_UAS_INFO_0(ndr, NDR_SCALARS, r->in.recordid));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.return_authenticator == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		if (r->out.buffer == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		{
-			struct ndr_push *_ndr_buffer;
-			NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_buffer, 4, -1));
-			NDR_CHECK(ndr_push_netr_AccountBuffer(_ndr_buffer, NDR_SCALARS, r->out.buffer));
-			NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_buffer, 4, -1));
-		}
-		if (r->out.count_returned == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.count_returned));
-		if (r->out.total_entries == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.total_entries));
-		if (r->out.next_reference == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.next_reference));
-		if (r->out.recordid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_UAS_INFO_0(ndr, NDR_SCALARS, r->out.recordid));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_AccountSync(struct ndr_pull *ndr, int flags, struct netr_AccountSync *r)
-{
-	uint32_t _ptr_logon_server;
-	TALLOC_CTX *_mem_save_logon_server_0;
-	TALLOC_CTX *_mem_save_return_authenticator_0;
-	TALLOC_CTX *_mem_save_buffer_0;
-	TALLOC_CTX *_mem_save_count_returned_0;
-	TALLOC_CTX *_mem_save_total_entries_0;
-	TALLOC_CTX *_mem_save_next_reference_0;
-	TALLOC_CTX *_mem_save_recordid_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_logon_server));
-		if (_ptr_logon_server) {
-			NDR_PULL_ALLOC(ndr, r->in.logon_server);
-		} else {
-			r->in.logon_server = NULL;
-		}
-		if (r->in.logon_server) {
-			_mem_save_logon_server_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.logon_server, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.logon_server));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.logon_server));
-			if (ndr_get_array_length(ndr, &r->in.logon_server) > ndr_get_array_size(ndr, &r->in.logon_server)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.logon_server), ndr_get_array_length(ndr, &r->in.logon_server));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.logon_server), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.logon_server, ndr_get_array_length(ndr, &r->in.logon_server), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_logon_server_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.computername));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.computername));
-		if (ndr_get_array_length(ndr, &r->in.computername) > ndr_get_array_size(ndr, &r->in.computername)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.computername), ndr_get_array_length(ndr, &r->in.computername));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computername), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computername, ndr_get_array_length(ndr, &r->in.computername), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, &r->in.credential));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.return_authenticator);
-		}
-		_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.return_authenticator, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.return_authenticator));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.reference));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.buffersize));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.recordid);
-		}
-		_mem_save_recordid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.recordid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_UAS_INFO_0(ndr, NDR_SCALARS, r->in.recordid));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_recordid_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		*r->out.return_authenticator = *r->in.return_authenticator;
-		NDR_PULL_ALLOC(ndr, r->out.buffer);
-		ZERO_STRUCTP(r->out.buffer);
-		NDR_PULL_ALLOC(ndr, r->out.count_returned);
-		ZERO_STRUCTP(r->out.count_returned);
-		NDR_PULL_ALLOC(ndr, r->out.total_entries);
-		ZERO_STRUCTP(r->out.total_entries);
-		NDR_PULL_ALLOC(ndr, r->out.next_reference);
-		ZERO_STRUCTP(r->out.next_reference);
-		NDR_PULL_ALLOC(ndr, r->out.recordid);
-		*r->out.recordid = *r->in.recordid;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		}
-		_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.return_authenticator, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.buffer);
-		}
-		_mem_save_buffer_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.buffer, LIBNDR_FLAG_REF_ALLOC);
-		{
-			struct ndr_pull *_ndr_buffer;
-			NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_buffer, 4, -1));
-			NDR_CHECK(ndr_pull_netr_AccountBuffer(_ndr_buffer, NDR_SCALARS, r->out.buffer));
-			NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_buffer, 4, -1));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_buffer_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.count_returned);
-		}
-		_mem_save_count_returned_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.count_returned, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.count_returned));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_count_returned_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.total_entries);
-		}
-		_mem_save_total_entries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.total_entries, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.total_entries));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_total_entries_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.next_reference);
-		}
-		_mem_save_next_reference_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.next_reference, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.next_reference));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_next_reference_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.recordid);
-		}
-		_mem_save_recordid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.recordid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_UAS_INFO_0(ndr, NDR_SCALARS, r->out.recordid));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_recordid_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_AccountSync(struct ndr_print *ndr, const char *name, int flags, const struct netr_AccountSync *r)
-{
-	ndr_print_struct(ndr, name, "netr_AccountSync");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_AccountSync");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "logon_server", r->in.logon_server);
-		ndr->depth++;
-		if (r->in.logon_server) {
-			ndr_print_string(ndr, "logon_server", r->in.logon_server);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "computername", r->in.computername);
-		ndr_print_netr_Authenticator(ndr, "credential", &r->in.credential);
-		ndr_print_ptr(ndr, "return_authenticator", r->in.return_authenticator);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "return_authenticator", r->in.return_authenticator);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "reference", r->in.reference);
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr_print_uint32(ndr, "buffersize", r->in.buffersize);
-		ndr_print_ptr(ndr, "recordid", r->in.recordid);
-		ndr->depth++;
-		ndr_print_netr_UAS_INFO_0(ndr, "recordid", r->in.recordid);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_AccountSync");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "buffer", r->out.buffer);
-		ndr->depth++;
-		ndr_print_netr_AccountBuffer(ndr, "buffer", r->out.buffer);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "count_returned", r->out.count_returned);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "count_returned", *r->out.count_returned);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "total_entries", r->out.total_entries);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "total_entries", *r->out.total_entries);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "next_reference", r->out.next_reference);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "next_reference", *r->out.next_reference);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "recordid", r->out.recordid);
-		ndr->depth++;
-		ndr_print_netr_UAS_INFO_0(ndr, "recordid", r->out.recordid);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_GetDcName(struct ndr_push *ndr, int flags, const struct netr_GetDcName *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.logon_server, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.logon_server, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.logon_server, ndr_charset_length(r->in.logon_server, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.domainname));
-		if (r->in.domainname) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domainname, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domainname, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.domainname, ndr_charset_length(r->in.domainname, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.dcname == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.dcname));
-		if (*r->out.dcname) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.dcname, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.dcname, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, *r->out.dcname, ndr_charset_length(*r->out.dcname, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_GetDcName(struct ndr_pull *ndr, int flags, struct netr_GetDcName *r)
-{
-	uint32_t _ptr_domainname;
-	uint32_t _ptr_dcname;
-	TALLOC_CTX *_mem_save_domainname_0;
-	TALLOC_CTX *_mem_save_dcname_0;
-	TALLOC_CTX *_mem_save_dcname_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.logon_server));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.logon_server));
-		if (ndr_get_array_length(ndr, &r->in.logon_server) > ndr_get_array_size(ndr, &r->in.logon_server)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.logon_server), ndr_get_array_length(ndr, &r->in.logon_server));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.logon_server), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.logon_server, ndr_get_array_length(ndr, &r->in.logon_server), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domainname));
-		if (_ptr_domainname) {
-			NDR_PULL_ALLOC(ndr, r->in.domainname);
-		} else {
-			r->in.domainname = NULL;
-		}
-		if (r->in.domainname) {
-			_mem_save_domainname_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.domainname, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.domainname));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.domainname));
-			if (ndr_get_array_length(ndr, &r->in.domainname) > ndr_get_array_size(ndr, &r->in.domainname)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.domainname), ndr_get_array_length(ndr, &r->in.domainname));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.domainname), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.domainname, ndr_get_array_length(ndr, &r->in.domainname), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domainname_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.dcname);
-		ZERO_STRUCTP(r->out.dcname);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.dcname);
-		}
-		_mem_save_dcname_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.dcname, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dcname));
-		if (_ptr_dcname) {
-			NDR_PULL_ALLOC(ndr, *r->out.dcname);
-		} else {
-			*r->out.dcname = NULL;
-		}
-		if (*r->out.dcname) {
-			_mem_save_dcname_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.dcname, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, r->out.dcname));
-			NDR_CHECK(ndr_pull_array_length(ndr, r->out.dcname));
-			if (ndr_get_array_length(ndr, r->out.dcname) > ndr_get_array_size(ndr, r->out.dcname)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, r->out.dcname), ndr_get_array_length(ndr, r->out.dcname));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, r->out.dcname), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->out.dcname, ndr_get_array_length(ndr, r->out.dcname), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dcname_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dcname_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_GetDcName(struct ndr_print *ndr, const char *name, int flags, const struct netr_GetDcName *r)
-{
-	ndr_print_struct(ndr, name, "netr_GetDcName");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_GetDcName");
-		ndr->depth++;
-		ndr_print_string(ndr, "logon_server", r->in.logon_server);
-		ndr_print_ptr(ndr, "domainname", r->in.domainname);
-		ndr->depth++;
-		if (r->in.domainname) {
-			ndr_print_string(ndr, "domainname", r->in.domainname);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_GetDcName");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "dcname", r->out.dcname);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "dcname", *r->out.dcname);
-		ndr->depth++;
-		if (*r->out.dcname) {
-			ndr_print_string(ndr, "dcname", *r->out.dcname);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_LogonControl(struct ndr_push *ndr, int flags, const struct netr_LogonControl *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.logon_server));
-		if (r->in.logon_server) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.logon_server, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.logon_server, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.logon_server, ndr_charset_length(r->in.logon_server, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_netr_LogonControlCode(ndr, NDR_SCALARS, r->in.function_code));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_push_netr_CONTROL_QUERY_INFORMATION(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_LogonControl(struct ndr_pull *ndr, int flags, struct netr_LogonControl *r)
-{
-	uint32_t _ptr_logon_server;
-	TALLOC_CTX *_mem_save_logon_server_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_logon_server));
-		if (_ptr_logon_server) {
-			NDR_PULL_ALLOC(ndr, r->in.logon_server);
-		} else {
-			r->in.logon_server = NULL;
-		}
-		if (r->in.logon_server) {
-			_mem_save_logon_server_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.logon_server, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.logon_server));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.logon_server));
-			if (ndr_get_array_length(ndr, &r->in.logon_server) > ndr_get_array_size(ndr, &r->in.logon_server)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.logon_server), ndr_get_array_length(ndr, &r->in.logon_server));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.logon_server), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.logon_server, ndr_get_array_length(ndr, &r->in.logon_server), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_logon_server_0, 0);
-		}
-		NDR_CHECK(ndr_pull_netr_LogonControlCode(ndr, NDR_SCALARS, &r->in.function_code));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_pull_netr_CONTROL_QUERY_INFORMATION(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_LogonControl(struct ndr_print *ndr, const char *name, int flags, const struct netr_LogonControl *r)
-{
-	ndr_print_struct(ndr, name, "netr_LogonControl");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_LogonControl");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "logon_server", r->in.logon_server);
-		ndr->depth++;
-		if (r->in.logon_server) {
-			ndr_print_string(ndr, "logon_server", r->in.logon_server);
-		}
-		ndr->depth--;
-		ndr_print_netr_LogonControlCode(ndr, "function_code", r->in.function_code);
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_LogonControl");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.info, r->in.level);
-		ndr_print_netr_CONTROL_QUERY_INFORMATION(ndr, "info", r->out.info);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_GetAnyDCName(struct ndr_push *ndr, int flags, const struct netr_GetAnyDCName *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.logon_server));
-		if (r->in.logon_server) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.logon_server, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.logon_server, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.logon_server, ndr_charset_length(r->in.logon_server, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.domainname));
-		if (r->in.domainname) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domainname, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domainname, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.domainname, ndr_charset_length(r->in.domainname, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.dcname == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.dcname));
-		if (*r->out.dcname) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.dcname, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.dcname, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, *r->out.dcname, ndr_charset_length(*r->out.dcname, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_GetAnyDCName(struct ndr_pull *ndr, int flags, struct netr_GetAnyDCName *r)
-{
-	uint32_t _ptr_logon_server;
-	uint32_t _ptr_domainname;
-	uint32_t _ptr_dcname;
-	TALLOC_CTX *_mem_save_logon_server_0;
-	TALLOC_CTX *_mem_save_domainname_0;
-	TALLOC_CTX *_mem_save_dcname_0;
-	TALLOC_CTX *_mem_save_dcname_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_logon_server));
-		if (_ptr_logon_server) {
-			NDR_PULL_ALLOC(ndr, r->in.logon_server);
-		} else {
-			r->in.logon_server = NULL;
-		}
-		if (r->in.logon_server) {
-			_mem_save_logon_server_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.logon_server, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.logon_server));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.logon_server));
-			if (ndr_get_array_length(ndr, &r->in.logon_server) > ndr_get_array_size(ndr, &r->in.logon_server)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.logon_server), ndr_get_array_length(ndr, &r->in.logon_server));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.logon_server), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.logon_server, ndr_get_array_length(ndr, &r->in.logon_server), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_logon_server_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domainname));
-		if (_ptr_domainname) {
-			NDR_PULL_ALLOC(ndr, r->in.domainname);
-		} else {
-			r->in.domainname = NULL;
-		}
-		if (r->in.domainname) {
-			_mem_save_domainname_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.domainname, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.domainname));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.domainname));
-			if (ndr_get_array_length(ndr, &r->in.domainname) > ndr_get_array_size(ndr, &r->in.domainname)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.domainname), ndr_get_array_length(ndr, &r->in.domainname));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.domainname), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.domainname, ndr_get_array_length(ndr, &r->in.domainname), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domainname_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.dcname);
-		ZERO_STRUCTP(r->out.dcname);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.dcname);
-		}
-		_mem_save_dcname_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.dcname, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dcname));
-		if (_ptr_dcname) {
-			NDR_PULL_ALLOC(ndr, *r->out.dcname);
-		} else {
-			*r->out.dcname = NULL;
-		}
-		if (*r->out.dcname) {
-			_mem_save_dcname_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.dcname, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, r->out.dcname));
-			NDR_CHECK(ndr_pull_array_length(ndr, r->out.dcname));
-			if (ndr_get_array_length(ndr, r->out.dcname) > ndr_get_array_size(ndr, r->out.dcname)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, r->out.dcname), ndr_get_array_length(ndr, r->out.dcname));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, r->out.dcname), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->out.dcname, ndr_get_array_length(ndr, r->out.dcname), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dcname_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dcname_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_GetAnyDCName(struct ndr_print *ndr, const char *name, int flags, const struct netr_GetAnyDCName *r)
-{
-	ndr_print_struct(ndr, name, "netr_GetAnyDCName");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_GetAnyDCName");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "logon_server", r->in.logon_server);
-		ndr->depth++;
-		if (r->in.logon_server) {
-			ndr_print_string(ndr, "logon_server", r->in.logon_server);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "domainname", r->in.domainname);
-		ndr->depth++;
-		if (r->in.domainname) {
-			ndr_print_string(ndr, "domainname", r->in.domainname);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_GetAnyDCName");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "dcname", r->out.dcname);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "dcname", *r->out.dcname);
-		ndr->depth++;
-		if (*r->out.dcname) {
-			ndr_print_string(ndr, "dcname", *r->out.dcname);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_LogonControl2(struct ndr_push *ndr, int flags, const struct netr_LogonControl2 *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.logon_server));
-		if (r->in.logon_server) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.logon_server, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.logon_server, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.logon_server, ndr_charset_length(r->in.logon_server, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_netr_LogonControlCode(ndr, NDR_SCALARS, r->in.function_code));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.data == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.data, r->in.function_code));
-		NDR_CHECK(ndr_push_netr_CONTROL_DATA_INFORMATION(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.data));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.query == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.query, r->in.level));
-		NDR_CHECK(ndr_push_netr_CONTROL_QUERY_INFORMATION(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.query));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_LogonControl2(struct ndr_pull *ndr, int flags, struct netr_LogonControl2 *r)
-{
-	uint32_t _ptr_logon_server;
-	TALLOC_CTX *_mem_save_logon_server_0;
-	TALLOC_CTX *_mem_save_data_0;
-	TALLOC_CTX *_mem_save_query_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_logon_server));
-		if (_ptr_logon_server) {
-			NDR_PULL_ALLOC(ndr, r->in.logon_server);
-		} else {
-			r->in.logon_server = NULL;
-		}
-		if (r->in.logon_server) {
-			_mem_save_logon_server_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.logon_server, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.logon_server));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.logon_server));
-			if (ndr_get_array_length(ndr, &r->in.logon_server) > ndr_get_array_size(ndr, &r->in.logon_server)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.logon_server), ndr_get_array_length(ndr, &r->in.logon_server));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.logon_server), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.logon_server, ndr_get_array_length(ndr, &r->in.logon_server), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_logon_server_0, 0);
-		}
-		NDR_CHECK(ndr_pull_netr_LogonControlCode(ndr, NDR_SCALARS, &r->in.function_code));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.data);
-		}
-		_mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.data, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.data, r->in.function_code));
-		NDR_CHECK(ndr_pull_netr_CONTROL_DATA_INFORMATION(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.data));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.query);
-		ZERO_STRUCTP(r->out.query);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.query);
-		}
-		_mem_save_query_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.query, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.query, r->in.level));
-		NDR_CHECK(ndr_pull_netr_CONTROL_QUERY_INFORMATION(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.query));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_query_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_LogonControl2(struct ndr_print *ndr, const char *name, int flags, const struct netr_LogonControl2 *r)
-{
-	ndr_print_struct(ndr, name, "netr_LogonControl2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_LogonControl2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "logon_server", r->in.logon_server);
-		ndr->depth++;
-		if (r->in.logon_server) {
-			ndr_print_string(ndr, "logon_server", r->in.logon_server);
-		}
-		ndr->depth--;
-		ndr_print_netr_LogonControlCode(ndr, "function_code", r->in.function_code);
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "data", r->in.data);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->in.data, r->in.function_code);
-		ndr_print_netr_CONTROL_DATA_INFORMATION(ndr, "data", r->in.data);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_LogonControl2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "query", r->out.query);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.query, r->in.level);
-		ndr_print_netr_CONTROL_QUERY_INFORMATION(ndr, "query", r->out.query);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_ServerAuthenticate2(struct ndr_push *ndr, int flags, const struct netr_ServerAuthenticate2 *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.account_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.account_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.account_name, ndr_charset_length(r->in.account_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_netr_SchannelType(ndr, NDR_SCALARS, r->in.secure_channel_type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computer_name, ndr_charset_length(r->in.computer_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		if (r->in.credentials == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Credential(ndr, NDR_SCALARS, r->in.credentials));
-		if (r->in.negotiate_flags == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_NegotiateFlags(ndr, NDR_SCALARS, *r->in.negotiate_flags));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.return_credentials == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Credential(ndr, NDR_SCALARS, r->out.return_credentials));
-		if (r->out.negotiate_flags == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_NegotiateFlags(ndr, NDR_SCALARS, *r->out.negotiate_flags));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_ServerAuthenticate2(struct ndr_pull *ndr, int flags, struct netr_ServerAuthenticate2 *r)
-{
-	uint32_t _ptr_server_name;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_credentials_0;
-	TALLOC_CTX *_mem_save_return_credentials_0;
-	TALLOC_CTX *_mem_save_negotiate_flags_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.account_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.account_name));
-		if (ndr_get_array_length(ndr, &r->in.account_name) > ndr_get_array_size(ndr, &r->in.account_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.account_name), ndr_get_array_length(ndr, &r->in.account_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.account_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.account_name, ndr_get_array_length(ndr, &r->in.account_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_netr_SchannelType(ndr, NDR_SCALARS, &r->in.secure_channel_type));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.computer_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.computer_name));
-		if (ndr_get_array_length(ndr, &r->in.computer_name) > ndr_get_array_size(ndr, &r->in.computer_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.computer_name), ndr_get_array_length(ndr, &r->in.computer_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computer_name, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t), CH_UTF16));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.credentials);
-		}
-		_mem_save_credentials_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.credentials, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Credential(ndr, NDR_SCALARS, r->in.credentials));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_credentials_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.negotiate_flags);
-		}
-		_mem_save_negotiate_flags_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.negotiate_flags, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_NegotiateFlags(ndr, NDR_SCALARS, r->in.negotiate_flags));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_negotiate_flags_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.return_credentials);
-		ZERO_STRUCTP(r->out.return_credentials);
-		NDR_PULL_ALLOC(ndr, r->out.negotiate_flags);
-		*r->out.negotiate_flags = *r->in.negotiate_flags;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.return_credentials);
-		}
-		_mem_save_return_credentials_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.return_credentials, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Credential(ndr, NDR_SCALARS, r->out.return_credentials));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_credentials_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.negotiate_flags);
-		}
-		_mem_save_negotiate_flags_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.negotiate_flags, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_NegotiateFlags(ndr, NDR_SCALARS, r->out.negotiate_flags));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_negotiate_flags_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_ServerAuthenticate2(struct ndr_print *ndr, const char *name, int flags, const struct netr_ServerAuthenticate2 *r)
-{
-	ndr_print_struct(ndr, name, "netr_ServerAuthenticate2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_ServerAuthenticate2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "account_name", r->in.account_name);
-		ndr_print_netr_SchannelType(ndr, "secure_channel_type", r->in.secure_channel_type);
-		ndr_print_string(ndr, "computer_name", r->in.computer_name);
-		ndr_print_ptr(ndr, "credentials", r->in.credentials);
-		ndr->depth++;
-		ndr_print_netr_Credential(ndr, "credentials", r->in.credentials);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "negotiate_flags", r->in.negotiate_flags);
-		ndr->depth++;
-		ndr_print_netr_NegotiateFlags(ndr, "negotiate_flags", *r->in.negotiate_flags);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_ServerAuthenticate2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "return_credentials", r->out.return_credentials);
-		ndr->depth++;
-		ndr_print_netr_Credential(ndr, "return_credentials", r->out.return_credentials);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "negotiate_flags", r->out.negotiate_flags);
-		ndr->depth++;
-		ndr_print_netr_NegotiateFlags(ndr, "negotiate_flags", *r->out.negotiate_flags);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DatabaseSync2(struct ndr_push *ndr, int flags, const struct netr_DatabaseSync2 *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.logon_server, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.logon_server, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.logon_server, ndr_charset_length(r->in.logon_server, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computername, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computername, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computername, ndr_charset_length(r->in.computername, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		if (r->in.credential == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
-		if (r->in.return_authenticator == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.return_authenticator));
-		NDR_CHECK(ndr_push_netr_SamDatabaseID(ndr, NDR_SCALARS, r->in.database_id));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.restart_state));
-		if (r->in.sync_context == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.sync_context));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.preferredmaximumlength));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.return_authenticator == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		if (r->out.sync_context == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.sync_context));
-		if (r->out.delta_enum_array == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.delta_enum_array));
-		if (*r->out.delta_enum_array) {
-			NDR_CHECK(ndr_push_netr_DELTA_ENUM_ARRAY(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.delta_enum_array));
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DatabaseSync2(struct ndr_pull *ndr, int flags, struct netr_DatabaseSync2 *r)
-{
-	uint32_t _ptr_delta_enum_array;
-	TALLOC_CTX *_mem_save_credential_0;
-	TALLOC_CTX *_mem_save_return_authenticator_0;
-	TALLOC_CTX *_mem_save_sync_context_0;
-	TALLOC_CTX *_mem_save_delta_enum_array_0;
-	TALLOC_CTX *_mem_save_delta_enum_array_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.logon_server));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.logon_server));
-		if (ndr_get_array_length(ndr, &r->in.logon_server) > ndr_get_array_size(ndr, &r->in.logon_server)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.logon_server), ndr_get_array_length(ndr, &r->in.logon_server));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.logon_server), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.logon_server, ndr_get_array_length(ndr, &r->in.logon_server), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.computername));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.computername));
-		if (ndr_get_array_length(ndr, &r->in.computername) > ndr_get_array_size(ndr, &r->in.computername)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.computername), ndr_get_array_length(ndr, &r->in.computername));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computername), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computername, ndr_get_array_length(ndr, &r->in.computername), sizeof(uint16_t), CH_UTF16));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.credential);
-		}
-		_mem_save_credential_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.credential, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_credential_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.return_authenticator);
-		}
-		_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.return_authenticator, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.return_authenticator));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_SamDatabaseID(ndr, NDR_SCALARS, &r->in.database_id));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.restart_state));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sync_context);
-		}
-		_mem_save_sync_context_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sync_context, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.sync_context));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sync_context_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.preferredmaximumlength));
-		NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		*r->out.return_authenticator = *r->in.return_authenticator;
-		NDR_PULL_ALLOC(ndr, r->out.sync_context);
-		*r->out.sync_context = *r->in.sync_context;
-		NDR_PULL_ALLOC(ndr, r->out.delta_enum_array);
-		ZERO_STRUCTP(r->out.delta_enum_array);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		}
-		_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.return_authenticator, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.sync_context);
-		}
-		_mem_save_sync_context_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.sync_context, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.sync_context));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sync_context_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.delta_enum_array);
-		}
-		_mem_save_delta_enum_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.delta_enum_array, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_delta_enum_array));
-		if (_ptr_delta_enum_array) {
-			NDR_PULL_ALLOC(ndr, *r->out.delta_enum_array);
-		} else {
-			*r->out.delta_enum_array = NULL;
-		}
-		if (*r->out.delta_enum_array) {
-			_mem_save_delta_enum_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.delta_enum_array, 0);
-			NDR_CHECK(ndr_pull_netr_DELTA_ENUM_ARRAY(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.delta_enum_array));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_delta_enum_array_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_delta_enum_array_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DatabaseSync2(struct ndr_print *ndr, const char *name, int flags, const struct netr_DatabaseSync2 *r)
-{
-	ndr_print_struct(ndr, name, "netr_DatabaseSync2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_DatabaseSync2");
-		ndr->depth++;
-		ndr_print_string(ndr, "logon_server", r->in.logon_server);
-		ndr_print_string(ndr, "computername", r->in.computername);
-		ndr_print_ptr(ndr, "credential", r->in.credential);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "credential", r->in.credential);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "return_authenticator", r->in.return_authenticator);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "return_authenticator", r->in.return_authenticator);
-		ndr->depth--;
-		ndr_print_netr_SamDatabaseID(ndr, "database_id", r->in.database_id);
-		ndr_print_uint16(ndr, "restart_state", r->in.restart_state);
-		ndr_print_ptr(ndr, "sync_context", r->in.sync_context);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "sync_context", *r->in.sync_context);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "preferredmaximumlength", r->in.preferredmaximumlength);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_DatabaseSync2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sync_context", r->out.sync_context);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "sync_context", *r->out.sync_context);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "delta_enum_array", r->out.delta_enum_array);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "delta_enum_array", *r->out.delta_enum_array);
-		ndr->depth++;
-		if (*r->out.delta_enum_array) {
-			ndr_print_netr_DELTA_ENUM_ARRAY(ndr, "delta_enum_array", *r->out.delta_enum_array);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DatabaseRedo(struct ndr_push *ndr, int flags, const struct netr_DatabaseRedo *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.logon_server, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.logon_server, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.logon_server, ndr_charset_length(r->in.logon_server, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computername, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computername, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computername, ndr_charset_length(r->in.computername, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, &r->in.credential));
-		if (r->in.return_authenticator == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.return_authenticator));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.change_log_entry));
-		if (r->in.change_log_entry) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.change_log_entry_size));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->in.change_log_entry, r->in.change_log_entry_size));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.change_log_entry_size));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.return_authenticator == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		if (r->out.delta_enum_array == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_DELTA_ENUM_ARRAY(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.delta_enum_array));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DatabaseRedo(struct ndr_pull *ndr, int flags, struct netr_DatabaseRedo *r)
-{
-	uint32_t _ptr_change_log_entry;
-	TALLOC_CTX *_mem_save_return_authenticator_0;
-	TALLOC_CTX *_mem_save_change_log_entry_0;
-	TALLOC_CTX *_mem_save_delta_enum_array_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.logon_server));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.logon_server));
-		if (ndr_get_array_length(ndr, &r->in.logon_server) > ndr_get_array_size(ndr, &r->in.logon_server)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.logon_server), ndr_get_array_length(ndr, &r->in.logon_server));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.logon_server), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.logon_server, ndr_get_array_length(ndr, &r->in.logon_server), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.computername));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.computername));
-		if (ndr_get_array_length(ndr, &r->in.computername) > ndr_get_array_size(ndr, &r->in.computername)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.computername), ndr_get_array_length(ndr, &r->in.computername));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computername), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computername, ndr_get_array_length(ndr, &r->in.computername), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, &r->in.credential));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.return_authenticator);
-		}
-		_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.return_authenticator, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.return_authenticator));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_change_log_entry));
-		if (_ptr_change_log_entry) {
-			NDR_PULL_ALLOC(ndr, r->in.change_log_entry);
-		} else {
-			r->in.change_log_entry = NULL;
-		}
-		if (r->in.change_log_entry) {
-			_mem_save_change_log_entry_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.change_log_entry, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.change_log_entry));
-			NDR_PULL_ALLOC_N(ndr, r->in.change_log_entry, ndr_get_array_size(ndr, &r->in.change_log_entry));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->in.change_log_entry, ndr_get_array_size(ndr, &r->in.change_log_entry)));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_change_log_entry_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.change_log_entry_size));
-		NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		*r->out.return_authenticator = *r->in.return_authenticator;
-		NDR_PULL_ALLOC(ndr, r->out.delta_enum_array);
-		ZERO_STRUCTP(r->out.delta_enum_array);
-		if (r->in.change_log_entry) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.change_log_entry, r->in.change_log_entry_size));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		}
-		_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.return_authenticator, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.delta_enum_array);
-		}
-		_mem_save_delta_enum_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.delta_enum_array, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_DELTA_ENUM_ARRAY(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.delta_enum_array));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_delta_enum_array_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DatabaseRedo(struct ndr_print *ndr, const char *name, int flags, const struct netr_DatabaseRedo *r)
-{
-	ndr_print_struct(ndr, name, "netr_DatabaseRedo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_DatabaseRedo");
-		ndr->depth++;
-		ndr_print_string(ndr, "logon_server", r->in.logon_server);
-		ndr_print_string(ndr, "computername", r->in.computername);
-		ndr_print_netr_Authenticator(ndr, "credential", &r->in.credential);
-		ndr_print_ptr(ndr, "return_authenticator", r->in.return_authenticator);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "return_authenticator", r->in.return_authenticator);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "change_log_entry", r->in.change_log_entry);
-		ndr->depth++;
-		if (r->in.change_log_entry) {
-			ndr_print_array_uint8(ndr, "change_log_entry", r->in.change_log_entry, r->in.change_log_entry_size);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "change_log_entry_size", r->in.change_log_entry_size);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_DatabaseRedo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "delta_enum_array", r->out.delta_enum_array);
-		ndr->depth++;
-		ndr_print_netr_DELTA_ENUM_ARRAY(ndr, "delta_enum_array", r->out.delta_enum_array);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_LogonControl2Ex(struct ndr_push *ndr, int flags, const struct netr_LogonControl2Ex *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.logon_server));
-		if (r->in.logon_server) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.logon_server, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.logon_server, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.logon_server, ndr_charset_length(r->in.logon_server, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.function_code));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->in.data, r->in.function_code));
-		NDR_CHECK(ndr_push_netr_CONTROL_DATA_INFORMATION(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.data));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.query == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.query, r->in.level));
-		NDR_CHECK(ndr_push_netr_CONTROL_QUERY_INFORMATION(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.query));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_LogonControl2Ex(struct ndr_pull *ndr, int flags, struct netr_LogonControl2Ex *r)
-{
-	uint32_t _ptr_logon_server;
-	TALLOC_CTX *_mem_save_logon_server_0;
-	TALLOC_CTX *_mem_save_query_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_logon_server));
-		if (_ptr_logon_server) {
-			NDR_PULL_ALLOC(ndr, r->in.logon_server);
-		} else {
-			r->in.logon_server = NULL;
-		}
-		if (r->in.logon_server) {
-			_mem_save_logon_server_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.logon_server, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.logon_server));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.logon_server));
-			if (ndr_get_array_length(ndr, &r->in.logon_server) > ndr_get_array_size(ndr, &r->in.logon_server)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.logon_server), ndr_get_array_length(ndr, &r->in.logon_server));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.logon_server), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.logon_server, ndr_get_array_length(ndr, &r->in.logon_server), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_logon_server_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.function_code));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->in.data, r->in.function_code));
-		NDR_CHECK(ndr_pull_netr_CONTROL_DATA_INFORMATION(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.data));
-		NDR_PULL_ALLOC(ndr, r->out.query);
-		ZERO_STRUCTP(r->out.query);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.query);
-		}
-		_mem_save_query_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.query, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.query, r->in.level));
-		NDR_CHECK(ndr_pull_netr_CONTROL_QUERY_INFORMATION(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.query));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_query_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_LogonControl2Ex(struct ndr_print *ndr, const char *name, int flags, const struct netr_LogonControl2Ex *r)
-{
-	ndr_print_struct(ndr, name, "netr_LogonControl2Ex");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_LogonControl2Ex");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "logon_server", r->in.logon_server);
-		ndr->depth++;
-		if (r->in.logon_server) {
-			ndr_print_string(ndr, "logon_server", r->in.logon_server);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "function_code", r->in.function_code);
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr_print_set_switch_value(ndr, &r->in.data, r->in.function_code);
-		ndr_print_netr_CONTROL_DATA_INFORMATION(ndr, "data", &r->in.data);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_LogonControl2Ex");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "query", r->out.query);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.query, r->in.level);
-		ndr_print_netr_CONTROL_QUERY_INFORMATION(ndr, "query", r->out.query);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_NetrEnumerateTrustedDomains(struct ndr_push *ndr, int flags, const struct netr_NetrEnumerateTrustedDomains *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.trusted_domains_blob == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Blob(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.trusted_domains_blob));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_NetrEnumerateTrustedDomains(struct ndr_pull *ndr, int flags, struct netr_NetrEnumerateTrustedDomains *r)
-{
-	uint32_t _ptr_server_name;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_trusted_domains_blob_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.trusted_domains_blob);
-		ZERO_STRUCTP(r->out.trusted_domains_blob);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.trusted_domains_blob);
-		}
-		_mem_save_trusted_domains_blob_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.trusted_domains_blob, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Blob(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.trusted_domains_blob));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_trusted_domains_blob_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_NetrEnumerateTrustedDomains(struct ndr_print *ndr, const char *name, int flags, const struct netr_NetrEnumerateTrustedDomains *r)
-{
-	ndr_print_struct(ndr, name, "netr_NetrEnumerateTrustedDomains");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_NetrEnumerateTrustedDomains");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_NetrEnumerateTrustedDomains");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "trusted_domains_blob", r->out.trusted_domains_blob);
-		ndr->depth++;
-		ndr_print_netr_Blob(ndr, "trusted_domains_blob", r->out.trusted_domains_blob);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DsRGetDCName(struct ndr_push *ndr, int flags, const struct netr_DsRGetDCName *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.domain_name));
-		if (r->in.domain_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.domain_name, ndr_charset_length(r->in.domain_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.domain_guid));
-		if (r->in.domain_guid) {
-			NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.domain_guid));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.site_guid));
-		if (r->in.site_guid) {
-			NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.site_guid));
-		}
-		NDR_CHECK(ndr_push_netr_DsRGetDCName_flags(ndr, NDR_SCALARS, r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.info));
-		if (*r->out.info) {
-			NDR_CHECK(ndr_push_netr_DsRGetDCNameInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DsRGetDCName(struct ndr_pull *ndr, int flags, struct netr_DsRGetDCName *r)
-{
-	uint32_t _ptr_server_unc;
-	uint32_t _ptr_domain_name;
-	uint32_t _ptr_domain_guid;
-	uint32_t _ptr_site_guid;
-	uint32_t _ptr_info;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_domain_name_0;
-	TALLOC_CTX *_mem_save_domain_guid_0;
-	TALLOC_CTX *_mem_save_site_guid_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_info_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain_name));
-		if (_ptr_domain_name) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_name);
-		} else {
-			r->in.domain_name = NULL;
-		}
-		if (r->in.domain_name) {
-			_mem_save_domain_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.domain_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.domain_name));
-			if (ndr_get_array_length(ndr, &r->in.domain_name) > ndr_get_array_size(ndr, &r->in.domain_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.domain_name), ndr_get_array_length(ndr, &r->in.domain_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.domain_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.domain_name, ndr_get_array_length(ndr, &r->in.domain_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain_guid));
-		if (_ptr_domain_guid) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_guid);
-		} else {
-			r->in.domain_guid = NULL;
-		}
-		if (r->in.domain_guid) {
-			_mem_save_domain_guid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_guid, 0);
-			NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.domain_guid));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_guid_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_site_guid));
-		if (_ptr_site_guid) {
-			NDR_PULL_ALLOC(ndr, r->in.site_guid);
-		} else {
-			r->in.site_guid = NULL;
-		}
-		if (r->in.site_guid) {
-			_mem_save_site_guid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.site_guid, 0);
-			NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.site_guid));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_site_guid_0, 0);
-		}
-		NDR_CHECK(ndr_pull_netr_DsRGetDCName_flags(ndr, NDR_SCALARS, &r->in.flags));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, *r->out.info);
-		} else {
-			*r->out.info = NULL;
-		}
-		if (*r->out.info) {
-			_mem_save_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.info, 0);
-			NDR_CHECK(ndr_pull_netr_DsRGetDCNameInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DsRGetDCName(struct ndr_print *ndr, const char *name, int flags, const struct netr_DsRGetDCName *r)
-{
-	ndr_print_struct(ndr, name, "netr_DsRGetDCName");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_DsRGetDCName");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "domain_name", r->in.domain_name);
-		ndr->depth++;
-		if (r->in.domain_name) {
-			ndr_print_string(ndr, "domain_name", r->in.domain_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "domain_guid", r->in.domain_guid);
-		ndr->depth++;
-		if (r->in.domain_guid) {
-			ndr_print_GUID(ndr, "domain_guid", r->in.domain_guid);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "site_guid", r->in.site_guid);
-		ndr->depth++;
-		if (r->in.site_guid) {
-			ndr_print_GUID(ndr, "site_guid", r->in.site_guid);
-		}
-		ndr->depth--;
-		ndr_print_netr_DsRGetDCName_flags(ndr, "flags", r->in.flags);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_DsRGetDCName");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", *r->out.info);
-		ndr->depth++;
-		if (*r->out.info) {
-			ndr_print_netr_DsRGetDCNameInfo(ndr, "info", *r->out.info);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_NETRLOGONDUMMYROUTINE1(struct ndr_push *ndr, int flags, const struct netr_NETRLOGONDUMMYROUTINE1 *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_NETRLOGONDUMMYROUTINE1(struct ndr_pull *ndr, int flags, struct netr_NETRLOGONDUMMYROUTINE1 *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_NETRLOGONDUMMYROUTINE1(struct ndr_print *ndr, const char *name, int flags, const struct netr_NETRLOGONDUMMYROUTINE1 *r)
-{
-	ndr_print_struct(ndr, name, "netr_NETRLOGONDUMMYROUTINE1");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_NETRLOGONDUMMYROUTINE1");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_NETRLOGONDUMMYROUTINE1");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_NETRLOGONSETSERVICEBITS(struct ndr_push *ndr, int flags, const struct netr_NETRLOGONSETSERVICEBITS *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_NETRLOGONSETSERVICEBITS(struct ndr_pull *ndr, int flags, struct netr_NETRLOGONSETSERVICEBITS *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_NETRLOGONSETSERVICEBITS(struct ndr_print *ndr, const char *name, int flags, const struct netr_NETRLOGONSETSERVICEBITS *r)
-{
-	ndr_print_struct(ndr, name, "netr_NETRLOGONSETSERVICEBITS");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_NETRLOGONSETSERVICEBITS");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_NETRLOGONSETSERVICEBITS");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_LogonGetTrustRid(struct ndr_push *ndr, int flags, const struct netr_LogonGetTrustRid *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.domain_name));
-		if (r->in.domain_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.domain_name, ndr_charset_length(r->in.domain_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.rid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.rid));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_LogonGetTrustRid(struct ndr_pull *ndr, int flags, struct netr_LogonGetTrustRid *r)
-{
-	uint32_t _ptr_server_name;
-	uint32_t _ptr_domain_name;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_domain_name_0;
-	TALLOC_CTX *_mem_save_rid_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain_name));
-		if (_ptr_domain_name) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_name);
-		} else {
-			r->in.domain_name = NULL;
-		}
-		if (r->in.domain_name) {
-			_mem_save_domain_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.domain_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.domain_name));
-			if (ndr_get_array_length(ndr, &r->in.domain_name) > ndr_get_array_size(ndr, &r->in.domain_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.domain_name), ndr_get_array_length(ndr, &r->in.domain_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.domain_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.domain_name, ndr_get_array_length(ndr, &r->in.domain_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_name_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.rid);
-		ZERO_STRUCTP(r->out.rid);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.rid);
-		}
-		_mem_save_rid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.rid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.rid));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rid_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_LogonGetTrustRid(struct ndr_print *ndr, const char *name, int flags, const struct netr_LogonGetTrustRid *r)
-{
-	ndr_print_struct(ndr, name, "netr_LogonGetTrustRid");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_LogonGetTrustRid");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "domain_name", r->in.domain_name);
-		ndr->depth++;
-		if (r->in.domain_name) {
-			ndr_print_string(ndr, "domain_name", r->in.domain_name);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_LogonGetTrustRid");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "rid", r->out.rid);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "rid", *r->out.rid);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_NETRLOGONCOMPUTESERVERDIGEST(struct ndr_push *ndr, int flags, const struct netr_NETRLOGONCOMPUTESERVERDIGEST *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_NETRLOGONCOMPUTESERVERDIGEST(struct ndr_pull *ndr, int flags, struct netr_NETRLOGONCOMPUTESERVERDIGEST *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_NETRLOGONCOMPUTESERVERDIGEST(struct ndr_print *ndr, const char *name, int flags, const struct netr_NETRLOGONCOMPUTESERVERDIGEST *r)
-{
-	ndr_print_struct(ndr, name, "netr_NETRLOGONCOMPUTESERVERDIGEST");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_NETRLOGONCOMPUTESERVERDIGEST");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_NETRLOGONCOMPUTESERVERDIGEST");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_NETRLOGONCOMPUTECLIENTDIGEST(struct ndr_push *ndr, int flags, const struct netr_NETRLOGONCOMPUTECLIENTDIGEST *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_NETRLOGONCOMPUTECLIENTDIGEST(struct ndr_pull *ndr, int flags, struct netr_NETRLOGONCOMPUTECLIENTDIGEST *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_NETRLOGONCOMPUTECLIENTDIGEST(struct ndr_print *ndr, const char *name, int flags, const struct netr_NETRLOGONCOMPUTECLIENTDIGEST *r)
-{
-	ndr_print_struct(ndr, name, "netr_NETRLOGONCOMPUTECLIENTDIGEST");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_NETRLOGONCOMPUTECLIENTDIGEST");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_NETRLOGONCOMPUTECLIENTDIGEST");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_ServerAuthenticate3(struct ndr_push *ndr, int flags, const struct netr_ServerAuthenticate3 *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.account_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.account_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.account_name, ndr_charset_length(r->in.account_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_netr_SchannelType(ndr, NDR_SCALARS, r->in.secure_channel_type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computer_name, ndr_charset_length(r->in.computer_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		if (r->in.credentials == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Credential(ndr, NDR_SCALARS, r->in.credentials));
-		if (r->in.negotiate_flags == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_NegotiateFlags(ndr, NDR_SCALARS, *r->in.negotiate_flags));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.credentials == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Credential(ndr, NDR_SCALARS, r->out.credentials));
-		if (r->out.negotiate_flags == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_NegotiateFlags(ndr, NDR_SCALARS, *r->out.negotiate_flags));
-		if (r->out.rid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.rid));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_ServerAuthenticate3(struct ndr_pull *ndr, int flags, struct netr_ServerAuthenticate3 *r)
-{
-	uint32_t _ptr_server_name;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_credentials_0;
-	TALLOC_CTX *_mem_save_negotiate_flags_0;
-	TALLOC_CTX *_mem_save_rid_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.account_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.account_name));
-		if (ndr_get_array_length(ndr, &r->in.account_name) > ndr_get_array_size(ndr, &r->in.account_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.account_name), ndr_get_array_length(ndr, &r->in.account_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.account_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.account_name, ndr_get_array_length(ndr, &r->in.account_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_netr_SchannelType(ndr, NDR_SCALARS, &r->in.secure_channel_type));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.computer_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.computer_name));
-		if (ndr_get_array_length(ndr, &r->in.computer_name) > ndr_get_array_size(ndr, &r->in.computer_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.computer_name), ndr_get_array_length(ndr, &r->in.computer_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computer_name, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t), CH_UTF16));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.credentials);
-		}
-		_mem_save_credentials_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.credentials, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Credential(ndr, NDR_SCALARS, r->in.credentials));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_credentials_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.negotiate_flags);
-		}
-		_mem_save_negotiate_flags_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.negotiate_flags, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_NegotiateFlags(ndr, NDR_SCALARS, r->in.negotiate_flags));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_negotiate_flags_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.credentials);
-		*r->out.credentials = *r->in.credentials;
-		NDR_PULL_ALLOC(ndr, r->out.negotiate_flags);
-		*r->out.negotiate_flags = *r->in.negotiate_flags;
-		NDR_PULL_ALLOC(ndr, r->out.rid);
-		ZERO_STRUCTP(r->out.rid);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.credentials);
-		}
-		_mem_save_credentials_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.credentials, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Credential(ndr, NDR_SCALARS, r->out.credentials));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_credentials_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.negotiate_flags);
-		}
-		_mem_save_negotiate_flags_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.negotiate_flags, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_NegotiateFlags(ndr, NDR_SCALARS, r->out.negotiate_flags));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_negotiate_flags_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.rid);
-		}
-		_mem_save_rid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.rid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.rid));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rid_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_ServerAuthenticate3(struct ndr_print *ndr, const char *name, int flags, const struct netr_ServerAuthenticate3 *r)
-{
-	ndr_print_struct(ndr, name, "netr_ServerAuthenticate3");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_ServerAuthenticate3");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "account_name", r->in.account_name);
-		ndr_print_netr_SchannelType(ndr, "secure_channel_type", r->in.secure_channel_type);
-		ndr_print_string(ndr, "computer_name", r->in.computer_name);
-		ndr_print_ptr(ndr, "credentials", r->in.credentials);
-		ndr->depth++;
-		ndr_print_netr_Credential(ndr, "credentials", r->in.credentials);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "negotiate_flags", r->in.negotiate_flags);
-		ndr->depth++;
-		ndr_print_netr_NegotiateFlags(ndr, "negotiate_flags", *r->in.negotiate_flags);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_ServerAuthenticate3");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "credentials", r->out.credentials);
-		ndr->depth++;
-		ndr_print_netr_Credential(ndr, "credentials", r->out.credentials);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "negotiate_flags", r->out.negotiate_flags);
-		ndr->depth++;
-		ndr_print_netr_NegotiateFlags(ndr, "negotiate_flags", *r->out.negotiate_flags);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "rid", r->out.rid);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "rid", *r->out.rid);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DsRGetDCNameEx(struct ndr_push *ndr, int flags, const struct netr_DsRGetDCNameEx *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.domain_name));
-		if (r->in.domain_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.domain_name, ndr_charset_length(r->in.domain_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.domain_guid));
-		if (r->in.domain_guid) {
-			NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.domain_guid));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.site_name));
-		if (r->in.site_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.site_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.site_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.site_name, ndr_charset_length(r->in.site_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_netr_DsRGetDCName_flags(ndr, NDR_SCALARS, r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.info));
-		if (*r->out.info) {
-			NDR_CHECK(ndr_push_netr_DsRGetDCNameInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DsRGetDCNameEx(struct ndr_pull *ndr, int flags, struct netr_DsRGetDCNameEx *r)
-{
-	uint32_t _ptr_server_unc;
-	uint32_t _ptr_domain_name;
-	uint32_t _ptr_domain_guid;
-	uint32_t _ptr_site_name;
-	uint32_t _ptr_info;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_domain_name_0;
-	TALLOC_CTX *_mem_save_domain_guid_0;
-	TALLOC_CTX *_mem_save_site_name_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_info_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain_name));
-		if (_ptr_domain_name) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_name);
-		} else {
-			r->in.domain_name = NULL;
-		}
-		if (r->in.domain_name) {
-			_mem_save_domain_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.domain_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.domain_name));
-			if (ndr_get_array_length(ndr, &r->in.domain_name) > ndr_get_array_size(ndr, &r->in.domain_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.domain_name), ndr_get_array_length(ndr, &r->in.domain_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.domain_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.domain_name, ndr_get_array_length(ndr, &r->in.domain_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain_guid));
-		if (_ptr_domain_guid) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_guid);
-		} else {
-			r->in.domain_guid = NULL;
-		}
-		if (r->in.domain_guid) {
-			_mem_save_domain_guid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_guid, 0);
-			NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.domain_guid));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_guid_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_site_name));
-		if (_ptr_site_name) {
-			NDR_PULL_ALLOC(ndr, r->in.site_name);
-		} else {
-			r->in.site_name = NULL;
-		}
-		if (r->in.site_name) {
-			_mem_save_site_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.site_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.site_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.site_name));
-			if (ndr_get_array_length(ndr, &r->in.site_name) > ndr_get_array_size(ndr, &r->in.site_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.site_name), ndr_get_array_length(ndr, &r->in.site_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.site_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.site_name, ndr_get_array_length(ndr, &r->in.site_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_site_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_netr_DsRGetDCName_flags(ndr, NDR_SCALARS, &r->in.flags));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, *r->out.info);
-		} else {
-			*r->out.info = NULL;
-		}
-		if (*r->out.info) {
-			_mem_save_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.info, 0);
-			NDR_CHECK(ndr_pull_netr_DsRGetDCNameInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DsRGetDCNameEx(struct ndr_print *ndr, const char *name, int flags, const struct netr_DsRGetDCNameEx *r)
-{
-	ndr_print_struct(ndr, name, "netr_DsRGetDCNameEx");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_DsRGetDCNameEx");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "domain_name", r->in.domain_name);
-		ndr->depth++;
-		if (r->in.domain_name) {
-			ndr_print_string(ndr, "domain_name", r->in.domain_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "domain_guid", r->in.domain_guid);
-		ndr->depth++;
-		if (r->in.domain_guid) {
-			ndr_print_GUID(ndr, "domain_guid", r->in.domain_guid);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "site_name", r->in.site_name);
-		ndr->depth++;
-		if (r->in.site_name) {
-			ndr_print_string(ndr, "site_name", r->in.site_name);
-		}
-		ndr->depth--;
-		ndr_print_netr_DsRGetDCName_flags(ndr, "flags", r->in.flags);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_DsRGetDCNameEx");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", *r->out.info);
-		ndr->depth++;
-		if (*r->out.info) {
-			ndr_print_netr_DsRGetDCNameInfo(ndr, "info", *r->out.info);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DsRGetSiteName(struct ndr_push *ndr, int flags, const struct netr_DsRGetSiteName *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.computer_name));
-		if (r->in.computer_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computer_name, ndr_charset_length(r->in.computer_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.site == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.site));
-		if (*r->out.site) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.site, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.site, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, *r->out.site, ndr_charset_length(*r->out.site, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DsRGetSiteName(struct ndr_pull *ndr, int flags, struct netr_DsRGetSiteName *r)
-{
-	uint32_t _ptr_computer_name;
-	uint32_t _ptr_site;
-	TALLOC_CTX *_mem_save_computer_name_0;
-	TALLOC_CTX *_mem_save_site_0;
-	TALLOC_CTX *_mem_save_site_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_computer_name));
-		if (_ptr_computer_name) {
-			NDR_PULL_ALLOC(ndr, r->in.computer_name);
-		} else {
-			r->in.computer_name = NULL;
-		}
-		if (r->in.computer_name) {
-			_mem_save_computer_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.computer_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.computer_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.computer_name));
-			if (ndr_get_array_length(ndr, &r->in.computer_name) > ndr_get_array_size(ndr, &r->in.computer_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.computer_name), ndr_get_array_length(ndr, &r->in.computer_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computer_name, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_computer_name_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.site);
-		ZERO_STRUCTP(r->out.site);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.site);
-		}
-		_mem_save_site_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.site, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_site));
-		if (_ptr_site) {
-			NDR_PULL_ALLOC(ndr, *r->out.site);
-		} else {
-			*r->out.site = NULL;
-		}
-		if (*r->out.site) {
-			_mem_save_site_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.site, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, r->out.site));
-			NDR_CHECK(ndr_pull_array_length(ndr, r->out.site));
-			if (ndr_get_array_length(ndr, r->out.site) > ndr_get_array_size(ndr, r->out.site)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, r->out.site), ndr_get_array_length(ndr, r->out.site));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, r->out.site), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->out.site, ndr_get_array_length(ndr, r->out.site), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_site_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_site_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DsRGetSiteName(struct ndr_print *ndr, const char *name, int flags, const struct netr_DsRGetSiteName *r)
-{
-	ndr_print_struct(ndr, name, "netr_DsRGetSiteName");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_DsRGetSiteName");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "computer_name", r->in.computer_name);
-		ndr->depth++;
-		if (r->in.computer_name) {
-			ndr_print_string(ndr, "computer_name", r->in.computer_name);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_DsRGetSiteName");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "site", r->out.site);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "site", *r->out.site);
-		ndr->depth++;
-		if (*r->out.site) {
-			ndr_print_string(ndr, "site", *r->out.site);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_LogonGetDomainInfo(struct ndr_push *ndr, int flags, const struct netr_LogonGetDomainInfo *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.computer_name));
-		if (r->in.computer_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computer_name, ndr_charset_length(r->in.computer_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.credential == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
-		if (r->in.return_authenticator == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.return_authenticator));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->in.query, r->in.level));
-		NDR_CHECK(ndr_push_netr_DomainQuery(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.query));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.return_authenticator == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_push_netr_DomainInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_LogonGetDomainInfo(struct ndr_pull *ndr, int flags, struct netr_LogonGetDomainInfo *r)
-{
-	uint32_t _ptr_computer_name;
-	TALLOC_CTX *_mem_save_computer_name_0;
-	TALLOC_CTX *_mem_save_credential_0;
-	TALLOC_CTX *_mem_save_return_authenticator_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-		if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_computer_name));
-		if (_ptr_computer_name) {
-			NDR_PULL_ALLOC(ndr, r->in.computer_name);
-		} else {
-			r->in.computer_name = NULL;
-		}
-		if (r->in.computer_name) {
-			_mem_save_computer_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.computer_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.computer_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.computer_name));
-			if (ndr_get_array_length(ndr, &r->in.computer_name) > ndr_get_array_size(ndr, &r->in.computer_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.computer_name), ndr_get_array_length(ndr, &r->in.computer_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computer_name, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_computer_name_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.credential);
-		}
-		_mem_save_credential_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.credential, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_credential_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.return_authenticator);
-		}
-		_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.return_authenticator, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.return_authenticator));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->in.query, r->in.level));
-		NDR_CHECK(ndr_pull_netr_DomainQuery(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.query));
-		NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		*r->out.return_authenticator = *r->in.return_authenticator;
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		}
-		_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.return_authenticator, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_pull_netr_DomainInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_LogonGetDomainInfo(struct ndr_print *ndr, const char *name, int flags, const struct netr_LogonGetDomainInfo *r)
-{
-	ndr_print_struct(ndr, name, "netr_LogonGetDomainInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_LogonGetDomainInfo");
-		ndr->depth++;
-		ndr_print_string(ndr, "server_name", r->in.server_name);
-		ndr_print_ptr(ndr, "computer_name", r->in.computer_name);
-		ndr->depth++;
-		if (r->in.computer_name) {
-			ndr_print_string(ndr, "computer_name", r->in.computer_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "credential", r->in.credential);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "credential", r->in.credential);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "return_authenticator", r->in.return_authenticator);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "return_authenticator", r->in.return_authenticator);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr_print_set_switch_value(ndr, &r->in.query, r->in.level);
-		ndr_print_netr_DomainQuery(ndr, "query", &r->in.query);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_LogonGetDomainInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.info, r->in.level);
-		ndr_print_netr_DomainInfo(ndr, "info", r->out.info);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_ServerPasswordSet2(struct ndr_push *ndr, int flags, const struct netr_ServerPasswordSet2 *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.account_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.account_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.account_name, ndr_charset_length(r->in.account_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_netr_SchannelType(ndr, NDR_SCALARS, r->in.secure_channel_type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computer_name, ndr_charset_length(r->in.computer_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, &r->in.credential));
-		NDR_CHECK(ndr_push_netr_CryptPassword(ndr, NDR_SCALARS, &r->in.new_password));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.return_authenticator == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_ServerPasswordSet2(struct ndr_pull *ndr, int flags, struct netr_ServerPasswordSet2 *r)
-{
-	uint32_t _ptr_server_name;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_return_authenticator_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.account_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.account_name));
-		if (ndr_get_array_length(ndr, &r->in.account_name) > ndr_get_array_size(ndr, &r->in.account_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.account_name), ndr_get_array_length(ndr, &r->in.account_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.account_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.account_name, ndr_get_array_length(ndr, &r->in.account_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_netr_SchannelType(ndr, NDR_SCALARS, &r->in.secure_channel_type));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.computer_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.computer_name));
-		if (ndr_get_array_length(ndr, &r->in.computer_name) > ndr_get_array_size(ndr, &r->in.computer_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.computer_name), ndr_get_array_length(ndr, &r->in.computer_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computer_name, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, &r->in.credential));
-		NDR_CHECK(ndr_pull_netr_CryptPassword(ndr, NDR_SCALARS, &r->in.new_password));
-		NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		ZERO_STRUCTP(r->out.return_authenticator);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		}
-		_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.return_authenticator, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_ServerPasswordSet2(struct ndr_print *ndr, const char *name, int flags, const struct netr_ServerPasswordSet2 *r)
-{
-	ndr_print_struct(ndr, name, "netr_ServerPasswordSet2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_ServerPasswordSet2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "account_name", r->in.account_name);
-		ndr_print_netr_SchannelType(ndr, "secure_channel_type", r->in.secure_channel_type);
-		ndr_print_string(ndr, "computer_name", r->in.computer_name);
-		ndr_print_netr_Authenticator(ndr, "credential", &r->in.credential);
-		ndr_print_netr_CryptPassword(ndr, "new_password", &r->in.new_password);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_ServerPasswordSet2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_ServerPasswordGet(struct ndr_push *ndr, int flags, const struct netr_ServerPasswordGet *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.account_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.account_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.account_name, ndr_charset_length(r->in.account_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_netr_SchannelType(ndr, NDR_SCALARS, r->in.secure_channel_type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computer_name, ndr_charset_length(r->in.computer_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		if (r->in.credential == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.return_authenticator == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		if (r->out.password == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.password));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_ServerPasswordGet(struct ndr_pull *ndr, int flags, struct netr_ServerPasswordGet *r)
-{
-	uint32_t _ptr_server_name;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_credential_0;
-	TALLOC_CTX *_mem_save_return_authenticator_0;
-	TALLOC_CTX *_mem_save_password_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.account_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.account_name));
-		if (ndr_get_array_length(ndr, &r->in.account_name) > ndr_get_array_size(ndr, &r->in.account_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.account_name), ndr_get_array_length(ndr, &r->in.account_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.account_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.account_name, ndr_get_array_length(ndr, &r->in.account_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_netr_SchannelType(ndr, NDR_SCALARS, &r->in.secure_channel_type));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.computer_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.computer_name));
-		if (ndr_get_array_length(ndr, &r->in.computer_name) > ndr_get_array_size(ndr, &r->in.computer_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.computer_name), ndr_get_array_length(ndr, &r->in.computer_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computer_name, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t), CH_UTF16));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.credential);
-		}
-		_mem_save_credential_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.credential, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_credential_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		ZERO_STRUCTP(r->out.return_authenticator);
-		NDR_PULL_ALLOC(ndr, r->out.password);
-		ZERO_STRUCTP(r->out.password);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		}
-		_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.return_authenticator, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.password);
-		}
-		_mem_save_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.password, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.password));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_password_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_ServerPasswordGet(struct ndr_print *ndr, const char *name, int flags, const struct netr_ServerPasswordGet *r)
-{
-	ndr_print_struct(ndr, name, "netr_ServerPasswordGet");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_ServerPasswordGet");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "account_name", r->in.account_name);
-		ndr_print_netr_SchannelType(ndr, "secure_channel_type", r->in.secure_channel_type);
-		ndr_print_string(ndr, "computer_name", r->in.computer_name);
-		ndr_print_ptr(ndr, "credential", r->in.credential);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "credential", r->in.credential);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_ServerPasswordGet");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "password", r->out.password);
-		ndr->depth++;
-		ndr_print_samr_Password(ndr, "password", r->out.password);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_NETRLOGONSENDTOSAM(struct ndr_push *ndr, int flags, const struct netr_NETRLOGONSENDTOSAM *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_NETRLOGONSENDTOSAM(struct ndr_pull *ndr, int flags, struct netr_NETRLOGONSENDTOSAM *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_NETRLOGONSENDTOSAM(struct ndr_print *ndr, const char *name, int flags, const struct netr_NETRLOGONSENDTOSAM *r)
-{
-	ndr_print_struct(ndr, name, "netr_NETRLOGONSENDTOSAM");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_NETRLOGONSENDTOSAM");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_NETRLOGONSENDTOSAM");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DsRAddressToSitenamesW(struct ndr_push *ndr, int flags, const struct netr_DsRAddressToSitenamesW *r)
-{
-	uint32_t cntr_addresses_1;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.count));
-		if (r->in.addresses == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.count));
-		for (cntr_addresses_1 = 0; cntr_addresses_1 < r->in.count; cntr_addresses_1++) {
-			NDR_CHECK(ndr_push_netr_DsRAddress(ndr, NDR_SCALARS, &r->in.addresses[cntr_addresses_1]));
-		}
-		for (cntr_addresses_1 = 0; cntr_addresses_1 < r->in.count; cntr_addresses_1++) {
-			NDR_CHECK(ndr_push_netr_DsRAddress(ndr, NDR_BUFFERS, &r->in.addresses[cntr_addresses_1]));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.ctr == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.ctr));
-		if (*r->out.ctr) {
-			NDR_CHECK(ndr_push_netr_DsRAddressToSitenamesWCtr(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.ctr));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DsRAddressToSitenamesW(struct ndr_pull *ndr, int flags, struct netr_DsRAddressToSitenamesW *r)
-{
-	uint32_t _ptr_server_name;
-	uint32_t cntr_addresses_1;
-	uint32_t _ptr_ctr;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_addresses_1;
-	TALLOC_CTX *_mem_save_ctr_0;
-	TALLOC_CTX *_mem_save_ctr_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.count));
-		if (r->in.count < 0 || r->in.count > 32000) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.addresses));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC_N(ndr, r->in.addresses, ndr_get_array_size(ndr, &r->in.addresses));
-		}
-		_mem_save_addresses_1 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.addresses, 0);
-		for (cntr_addresses_1 = 0; cntr_addresses_1 < r->in.count; cntr_addresses_1++) {
-			NDR_CHECK(ndr_pull_netr_DsRAddress(ndr, NDR_SCALARS, &r->in.addresses[cntr_addresses_1]));
-		}
-		for (cntr_addresses_1 = 0; cntr_addresses_1 < r->in.count; cntr_addresses_1++) {
-			NDR_CHECK(ndr_pull_netr_DsRAddress(ndr, NDR_BUFFERS, &r->in.addresses[cntr_addresses_1]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_addresses_1, 0);
-		NDR_PULL_ALLOC(ndr, r->out.ctr);
-		ZERO_STRUCTP(r->out.ctr);
-		if (r->in.addresses) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.addresses, r->in.count));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.ctr);
-		}
-		_mem_save_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.ctr, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr));
-		if (_ptr_ctr) {
-			NDR_PULL_ALLOC(ndr, *r->out.ctr);
-		} else {
-			*r->out.ctr = NULL;
-		}
-		if (*r->out.ctr) {
-			_mem_save_ctr_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.ctr, 0);
-			NDR_CHECK(ndr_pull_netr_DsRAddressToSitenamesWCtr(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.ctr));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DsRAddressToSitenamesW(struct ndr_print *ndr, const char *name, int flags, const struct netr_DsRAddressToSitenamesW *r)
-{
-	uint32_t cntr_addresses_1;
-	ndr_print_struct(ndr, name, "netr_DsRAddressToSitenamesW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_DsRAddressToSitenamesW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "count", r->in.count);
-		ndr_print_ptr(ndr, "addresses", r->in.addresses);
-		ndr->depth++;
-		ndr->print(ndr, "%s: ARRAY(%d)", "addresses", r->in.count);
-		ndr->depth++;
-		for (cntr_addresses_1=0;cntr_addresses_1<r->in.count;cntr_addresses_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_addresses_1) != -1) {
-				ndr_print_netr_DsRAddress(ndr, "addresses", &r->in.addresses[cntr_addresses_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_DsRAddressToSitenamesW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "ctr", r->out.ctr);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "ctr", *r->out.ctr);
-		ndr->depth++;
-		if (*r->out.ctr) {
-			ndr_print_netr_DsRAddressToSitenamesWCtr(ndr, "ctr", *r->out.ctr);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DsRGetDCNameEx2(struct ndr_push *ndr, int flags, const struct netr_DsRGetDCNameEx2 *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.client_account));
-		if (r->in.client_account) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.client_account, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.client_account, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.client_account, ndr_charset_length(r->in.client_account, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_samr_AcctFlags(ndr, NDR_SCALARS, r->in.mask));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.domain_name));
-		if (r->in.domain_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.domain_name, ndr_charset_length(r->in.domain_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.domain_guid));
-		if (r->in.domain_guid) {
-			NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.domain_guid));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.site_name));
-		if (r->in.site_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.site_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.site_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.site_name, ndr_charset_length(r->in.site_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_netr_DsRGetDCName_flags(ndr, NDR_SCALARS, r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.info));
-		if (*r->out.info) {
-			NDR_CHECK(ndr_push_netr_DsRGetDCNameInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DsRGetDCNameEx2(struct ndr_pull *ndr, int flags, struct netr_DsRGetDCNameEx2 *r)
-{
-	uint32_t _ptr_server_unc;
-	uint32_t _ptr_client_account;
-	uint32_t _ptr_domain_name;
-	uint32_t _ptr_domain_guid;
-	uint32_t _ptr_site_name;
-	uint32_t _ptr_info;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_client_account_0;
-	TALLOC_CTX *_mem_save_domain_name_0;
-	TALLOC_CTX *_mem_save_domain_guid_0;
-	TALLOC_CTX *_mem_save_site_name_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_info_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_client_account));
-		if (_ptr_client_account) {
-			NDR_PULL_ALLOC(ndr, r->in.client_account);
-		} else {
-			r->in.client_account = NULL;
-		}
-		if (r->in.client_account) {
-			_mem_save_client_account_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.client_account, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.client_account));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.client_account));
-			if (ndr_get_array_length(ndr, &r->in.client_account) > ndr_get_array_size(ndr, &r->in.client_account)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.client_account), ndr_get_array_length(ndr, &r->in.client_account));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.client_account), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.client_account, ndr_get_array_length(ndr, &r->in.client_account), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_client_account_0, 0);
-		}
-		NDR_CHECK(ndr_pull_samr_AcctFlags(ndr, NDR_SCALARS, &r->in.mask));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain_name));
-		if (_ptr_domain_name) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_name);
-		} else {
-			r->in.domain_name = NULL;
-		}
-		if (r->in.domain_name) {
-			_mem_save_domain_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.domain_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.domain_name));
-			if (ndr_get_array_length(ndr, &r->in.domain_name) > ndr_get_array_size(ndr, &r->in.domain_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.domain_name), ndr_get_array_length(ndr, &r->in.domain_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.domain_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.domain_name, ndr_get_array_length(ndr, &r->in.domain_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain_guid));
-		if (_ptr_domain_guid) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_guid);
-		} else {
-			r->in.domain_guid = NULL;
-		}
-		if (r->in.domain_guid) {
-			_mem_save_domain_guid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_guid, 0);
-			NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.domain_guid));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_guid_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_site_name));
-		if (_ptr_site_name) {
-			NDR_PULL_ALLOC(ndr, r->in.site_name);
-		} else {
-			r->in.site_name = NULL;
-		}
-		if (r->in.site_name) {
-			_mem_save_site_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.site_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.site_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.site_name));
-			if (ndr_get_array_length(ndr, &r->in.site_name) > ndr_get_array_size(ndr, &r->in.site_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.site_name), ndr_get_array_length(ndr, &r->in.site_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.site_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.site_name, ndr_get_array_length(ndr, &r->in.site_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_site_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_netr_DsRGetDCName_flags(ndr, NDR_SCALARS, &r->in.flags));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, *r->out.info);
-		} else {
-			*r->out.info = NULL;
-		}
-		if (*r->out.info) {
-			_mem_save_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.info, 0);
-			NDR_CHECK(ndr_pull_netr_DsRGetDCNameInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DsRGetDCNameEx2(struct ndr_print *ndr, const char *name, int flags, const struct netr_DsRGetDCNameEx2 *r)
-{
-	ndr_print_struct(ndr, name, "netr_DsRGetDCNameEx2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_DsRGetDCNameEx2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "client_account", r->in.client_account);
-		ndr->depth++;
-		if (r->in.client_account) {
-			ndr_print_string(ndr, "client_account", r->in.client_account);
-		}
-		ndr->depth--;
-		ndr_print_samr_AcctFlags(ndr, "mask", r->in.mask);
-		ndr_print_ptr(ndr, "domain_name", r->in.domain_name);
-		ndr->depth++;
-		if (r->in.domain_name) {
-			ndr_print_string(ndr, "domain_name", r->in.domain_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "domain_guid", r->in.domain_guid);
-		ndr->depth++;
-		if (r->in.domain_guid) {
-			ndr_print_GUID(ndr, "domain_guid", r->in.domain_guid);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "site_name", r->in.site_name);
-		ndr->depth++;
-		if (r->in.site_name) {
-			ndr_print_string(ndr, "site_name", r->in.site_name);
-		}
-		ndr->depth--;
-		ndr_print_netr_DsRGetDCName_flags(ndr, "flags", r->in.flags);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_DsRGetDCNameEx2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", *r->out.info);
-		ndr->depth++;
-		if (*r->out.info) {
-			ndr_print_netr_DsRGetDCNameInfo(ndr, "info", *r->out.info);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN(struct ndr_push *ndr, int flags, const struct netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN(struct ndr_pull *ndr, int flags, struct netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN(struct ndr_print *ndr, const char *name, int flags, const struct netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN *r)
-{
-	ndr_print_struct(ndr, name, "netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_NetrEnumerateTrustedDomainsEx(struct ndr_push *ndr, int flags, const struct netr_NetrEnumerateTrustedDomainsEx *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.dom_trust_list == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_DomainTrustList(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.dom_trust_list));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_NetrEnumerateTrustedDomainsEx(struct ndr_pull *ndr, int flags, struct netr_NetrEnumerateTrustedDomainsEx *r)
-{
-	uint32_t _ptr_server_name;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_dom_trust_list_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.dom_trust_list);
-		ZERO_STRUCTP(r->out.dom_trust_list);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.dom_trust_list);
-		}
-		_mem_save_dom_trust_list_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.dom_trust_list, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_DomainTrustList(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.dom_trust_list));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dom_trust_list_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_NetrEnumerateTrustedDomainsEx(struct ndr_print *ndr, const char *name, int flags, const struct netr_NetrEnumerateTrustedDomainsEx *r)
-{
-	ndr_print_struct(ndr, name, "netr_NetrEnumerateTrustedDomainsEx");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_NetrEnumerateTrustedDomainsEx");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_NetrEnumerateTrustedDomainsEx");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "dom_trust_list", r->out.dom_trust_list);
-		ndr->depth++;
-		ndr_print_netr_DomainTrustList(ndr, "dom_trust_list", r->out.dom_trust_list);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DsRAddressToSitenamesExW(struct ndr_push *ndr, int flags, const struct netr_DsRAddressToSitenamesExW *r)
-{
-	uint32_t cntr_addresses_1;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.count));
-		if (r->in.addresses == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.count));
-		for (cntr_addresses_1 = 0; cntr_addresses_1 < r->in.count; cntr_addresses_1++) {
-			NDR_CHECK(ndr_push_netr_DsRAddress(ndr, NDR_SCALARS, &r->in.addresses[cntr_addresses_1]));
-		}
-		for (cntr_addresses_1 = 0; cntr_addresses_1 < r->in.count; cntr_addresses_1++) {
-			NDR_CHECK(ndr_push_netr_DsRAddress(ndr, NDR_BUFFERS, &r->in.addresses[cntr_addresses_1]));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.ctr == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.ctr));
-		if (*r->out.ctr) {
-			NDR_CHECK(ndr_push_netr_DsRAddressToSitenamesExWCtr(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.ctr));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DsRAddressToSitenamesExW(struct ndr_pull *ndr, int flags, struct netr_DsRAddressToSitenamesExW *r)
-{
-	uint32_t _ptr_server_name;
-	uint32_t cntr_addresses_1;
-	uint32_t _ptr_ctr;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_addresses_1;
-	TALLOC_CTX *_mem_save_ctr_0;
-	TALLOC_CTX *_mem_save_ctr_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.count));
-		if (r->in.count < 0 || r->in.count > 32000) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.addresses));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC_N(ndr, r->in.addresses, ndr_get_array_size(ndr, &r->in.addresses));
-		}
-		_mem_save_addresses_1 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.addresses, 0);
-		for (cntr_addresses_1 = 0; cntr_addresses_1 < r->in.count; cntr_addresses_1++) {
-			NDR_CHECK(ndr_pull_netr_DsRAddress(ndr, NDR_SCALARS, &r->in.addresses[cntr_addresses_1]));
-		}
-		for (cntr_addresses_1 = 0; cntr_addresses_1 < r->in.count; cntr_addresses_1++) {
-			NDR_CHECK(ndr_pull_netr_DsRAddress(ndr, NDR_BUFFERS, &r->in.addresses[cntr_addresses_1]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_addresses_1, 0);
-		NDR_PULL_ALLOC(ndr, r->out.ctr);
-		ZERO_STRUCTP(r->out.ctr);
-		if (r->in.addresses) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.addresses, r->in.count));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.ctr);
-		}
-		_mem_save_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.ctr, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr));
-		if (_ptr_ctr) {
-			NDR_PULL_ALLOC(ndr, *r->out.ctr);
-		} else {
-			*r->out.ctr = NULL;
-		}
-		if (*r->out.ctr) {
-			_mem_save_ctr_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.ctr, 0);
-			NDR_CHECK(ndr_pull_netr_DsRAddressToSitenamesExWCtr(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.ctr));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DsRAddressToSitenamesExW(struct ndr_print *ndr, const char *name, int flags, const struct netr_DsRAddressToSitenamesExW *r)
-{
-	uint32_t cntr_addresses_1;
-	ndr_print_struct(ndr, name, "netr_DsRAddressToSitenamesExW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_DsRAddressToSitenamesExW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "count", r->in.count);
-		ndr_print_ptr(ndr, "addresses", r->in.addresses);
-		ndr->depth++;
-		ndr->print(ndr, "%s: ARRAY(%d)", "addresses", r->in.count);
-		ndr->depth++;
-		for (cntr_addresses_1=0;cntr_addresses_1<r->in.count;cntr_addresses_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_addresses_1) != -1) {
-				ndr_print_netr_DsRAddress(ndr, "addresses", &r->in.addresses[cntr_addresses_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_DsRAddressToSitenamesExW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "ctr", r->out.ctr);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "ctr", *r->out.ctr);
-		ndr->depth++;
-		if (*r->out.ctr) {
-			ndr_print_netr_DsRAddressToSitenamesExWCtr(ndr, "ctr", *r->out.ctr);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DsrGetDcSiteCoverageW(struct ndr_push *ndr, int flags, const struct netr_DsrGetDcSiteCoverageW *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.ctr == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_DcSitesCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.ctr));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DsrGetDcSiteCoverageW(struct ndr_pull *ndr, int flags, struct netr_DsrGetDcSiteCoverageW *r)
-{
-	uint32_t _ptr_server_name;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_ctr_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.ctr);
-		ZERO_STRUCTP(r->out.ctr);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.ctr);
-		}
-		_mem_save_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.ctr, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_DcSitesCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.ctr));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DsrGetDcSiteCoverageW(struct ndr_print *ndr, const char *name, int flags, const struct netr_DsrGetDcSiteCoverageW *r)
-{
-	ndr_print_struct(ndr, name, "netr_DsrGetDcSiteCoverageW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_DsrGetDcSiteCoverageW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_DsrGetDcSiteCoverageW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "ctr", r->out.ctr);
-		ndr->depth++;
-		ndr_print_DcSitesCtr(ndr, "ctr", r->out.ctr);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_LogonSamLogonEx(struct ndr_push *ndr, int flags, const struct netr_LogonSamLogonEx *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.computer_name));
-		if (r->in.computer_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computer_name, ndr_charset_length(r->in.computer_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_netr_LogonLevel(ndr, NDR_SCALARS, r->in.logon_level));
-		if (r->in.logon == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.logon, r->in.logon_level));
-		NDR_CHECK(ndr_push_netr_LogonInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.logon));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.validation_level));
-		if (r->in.flags == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.validation == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.validation, r->in.validation_level));
-		NDR_CHECK(ndr_push_netr_Validation(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.validation));
-		if (r->out.authoritative == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, *r->out.authoritative));
-		if (r->out.flags == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.flags));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_LogonSamLogonEx(struct ndr_pull *ndr, int flags, struct netr_LogonSamLogonEx *r)
-{
-	uint32_t _ptr_server_name;
-	uint32_t _ptr_computer_name;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_computer_name_0;
-	TALLOC_CTX *_mem_save_logon_0;
-	TALLOC_CTX *_mem_save_validation_0;
-	TALLOC_CTX *_mem_save_authoritative_0;
-	TALLOC_CTX *_mem_save_flags_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_computer_name));
-		if (_ptr_computer_name) {
-			NDR_PULL_ALLOC(ndr, r->in.computer_name);
-		} else {
-			r->in.computer_name = NULL;
-		}
-		if (r->in.computer_name) {
-			_mem_save_computer_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.computer_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.computer_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.computer_name));
-			if (ndr_get_array_length(ndr, &r->in.computer_name) > ndr_get_array_size(ndr, &r->in.computer_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.computer_name), ndr_get_array_length(ndr, &r->in.computer_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computer_name, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_computer_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_netr_LogonLevel(ndr, NDR_SCALARS, &r->in.logon_level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.logon);
-		}
-		_mem_save_logon_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.logon, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.logon, r->in.logon_level));
-		NDR_CHECK(ndr_pull_netr_LogonInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.logon));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_logon_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.validation_level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.flags);
-		}
-		_mem_save_flags_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.flags, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.flags));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_flags_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.validation);
-		ZERO_STRUCTP(r->out.validation);
-		NDR_PULL_ALLOC(ndr, r->out.authoritative);
-		ZERO_STRUCTP(r->out.authoritative);
-		NDR_PULL_ALLOC(ndr, r->out.flags);
-		*r->out.flags = *r->in.flags;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.validation);
-		}
-		_mem_save_validation_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.validation, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.validation, r->in.validation_level));
-		NDR_CHECK(ndr_pull_netr_Validation(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.validation));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_validation_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.authoritative);
-		}
-		_mem_save_authoritative_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.authoritative, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, r->out.authoritative));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_authoritative_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.flags);
-		}
-		_mem_save_flags_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.flags, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.flags));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_flags_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_LogonSamLogonEx(struct ndr_print *ndr, const char *name, int flags, const struct netr_LogonSamLogonEx *r)
-{
-	ndr_print_struct(ndr, name, "netr_LogonSamLogonEx");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_LogonSamLogonEx");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "computer_name", r->in.computer_name);
-		ndr->depth++;
-		if (r->in.computer_name) {
-			ndr_print_string(ndr, "computer_name", r->in.computer_name);
-		}
-		ndr->depth--;
-		ndr_print_netr_LogonLevel(ndr, "logon_level", r->in.logon_level);
-		ndr_print_ptr(ndr, "logon", r->in.logon);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->in.logon, r->in.logon_level);
-		ndr_print_netr_LogonInfo(ndr, "logon", r->in.logon);
-		ndr->depth--;
-		ndr_print_uint16(ndr, "validation_level", r->in.validation_level);
-		ndr_print_ptr(ndr, "flags", r->in.flags);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "flags", *r->in.flags);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_LogonSamLogonEx");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "validation", r->out.validation);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.validation, r->in.validation_level);
-		ndr_print_netr_Validation(ndr, "validation", r->out.validation);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "authoritative", r->out.authoritative);
-		ndr->depth++;
-		ndr_print_uint8(ndr, "authoritative", *r->out.authoritative);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "flags", r->out.flags);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "flags", *r->out.flags);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DsrEnumerateDomainTrusts(struct ndr_push *ndr, int flags, const struct netr_DsrEnumerateDomainTrusts *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_netr_TrustFlags(ndr, NDR_SCALARS, r->in.trust_flags));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.trusts == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_DomainTrustList(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.trusts));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DsrEnumerateDomainTrusts(struct ndr_pull *ndr, int flags, struct netr_DsrEnumerateDomainTrusts *r)
-{
-	uint32_t _ptr_server_name;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_trusts_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_netr_TrustFlags(ndr, NDR_SCALARS, &r->in.trust_flags));
-		NDR_PULL_ALLOC(ndr, r->out.trusts);
-		ZERO_STRUCTP(r->out.trusts);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.trusts);
-		}
-		_mem_save_trusts_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.trusts, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_DomainTrustList(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.trusts));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_trusts_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DsrEnumerateDomainTrusts(struct ndr_print *ndr, const char *name, int flags, const struct netr_DsrEnumerateDomainTrusts *r)
-{
-	ndr_print_struct(ndr, name, "netr_DsrEnumerateDomainTrusts");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_DsrEnumerateDomainTrusts");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_netr_TrustFlags(ndr, "trust_flags", r->in.trust_flags);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_DsrEnumerateDomainTrusts");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "trusts", r->out.trusts);
-		ndr->depth++;
-		ndr_print_netr_DomainTrustList(ndr, "trusts", r->out.trusts);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DsrDeregisterDNSHostRecords(struct ndr_push *ndr, int flags, const struct netr_DsrDeregisterDNSHostRecords *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.domain));
-		if (r->in.domain) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.domain, ndr_charset_length(r->in.domain, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.domain_guid));
-		if (r->in.domain_guid) {
-			NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.domain_guid));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.dsa_guid));
-		if (r->in.dsa_guid) {
-			NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.dsa_guid));
-		}
-		if (r->in.dns_host == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dns_host, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dns_host, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.dns_host, ndr_charset_length(r->in.dns_host, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DsrDeregisterDNSHostRecords(struct ndr_pull *ndr, int flags, struct netr_DsrDeregisterDNSHostRecords *r)
-{
-	uint32_t _ptr_server_name;
-	uint32_t _ptr_domain;
-	uint32_t _ptr_domain_guid;
-	uint32_t _ptr_dsa_guid;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_domain_0;
-	TALLOC_CTX *_mem_save_domain_guid_0;
-	TALLOC_CTX *_mem_save_dsa_guid_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain));
-		if (_ptr_domain) {
-			NDR_PULL_ALLOC(ndr, r->in.domain);
-		} else {
-			r->in.domain = NULL;
-		}
-		if (r->in.domain) {
-			_mem_save_domain_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.domain, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.domain));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.domain));
-			if (ndr_get_array_length(ndr, &r->in.domain) > ndr_get_array_size(ndr, &r->in.domain)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.domain), ndr_get_array_length(ndr, &r->in.domain));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.domain), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.domain, ndr_get_array_length(ndr, &r->in.domain), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain_guid));
-		if (_ptr_domain_guid) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_guid);
-		} else {
-			r->in.domain_guid = NULL;
-		}
-		if (r->in.domain_guid) {
-			_mem_save_domain_guid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_guid, 0);
-			NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.domain_guid));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_guid_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dsa_guid));
-		if (_ptr_dsa_guid) {
-			NDR_PULL_ALLOC(ndr, r->in.dsa_guid);
-		} else {
-			r->in.dsa_guid = NULL;
-		}
-		if (r->in.dsa_guid) {
-			_mem_save_dsa_guid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.dsa_guid, 0);
-			NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.dsa_guid));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dsa_guid_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.dns_host));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.dns_host));
-		if (ndr_get_array_length(ndr, &r->in.dns_host) > ndr_get_array_size(ndr, &r->in.dns_host)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.dns_host), ndr_get_array_length(ndr, &r->in.dns_host));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.dns_host), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.dns_host, ndr_get_array_length(ndr, &r->in.dns_host), sizeof(uint16_t), CH_UTF16));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DsrDeregisterDNSHostRecords(struct ndr_print *ndr, const char *name, int flags, const struct netr_DsrDeregisterDNSHostRecords *r)
-{
-	ndr_print_struct(ndr, name, "netr_DsrDeregisterDNSHostRecords");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_DsrDeregisterDNSHostRecords");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "domain", r->in.domain);
-		ndr->depth++;
-		if (r->in.domain) {
-			ndr_print_string(ndr, "domain", r->in.domain);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "domain_guid", r->in.domain_guid);
-		ndr->depth++;
-		if (r->in.domain_guid) {
-			ndr_print_GUID(ndr, "domain_guid", r->in.domain_guid);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "dsa_guid", r->in.dsa_guid);
-		ndr->depth++;
-		if (r->in.dsa_guid) {
-			ndr_print_GUID(ndr, "dsa_guid", r->in.dsa_guid);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "dns_host", r->in.dns_host);
-		ndr->depth++;
-		ndr_print_string(ndr, "dns_host", r->in.dns_host);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_DsrDeregisterDNSHostRecords");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_ServerTrustPasswordsGet(struct ndr_push *ndr, int flags, const struct netr_ServerTrustPasswordsGet *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.account_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.account_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.account_name, ndr_charset_length(r->in.account_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_netr_SchannelType(ndr, NDR_SCALARS, r->in.secure_channel_type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computer_name, ndr_charset_length(r->in.computer_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		if (r->in.credential == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.return_authenticator == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		if (r->out.password == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.password));
-		if (r->out.password2 == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.password2));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_ServerTrustPasswordsGet(struct ndr_pull *ndr, int flags, struct netr_ServerTrustPasswordsGet *r)
-{
-	uint32_t _ptr_server_name;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_credential_0;
-	TALLOC_CTX *_mem_save_return_authenticator_0;
-	TALLOC_CTX *_mem_save_password_0;
-	TALLOC_CTX *_mem_save_password2_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.account_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.account_name));
-		if (ndr_get_array_length(ndr, &r->in.account_name) > ndr_get_array_size(ndr, &r->in.account_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.account_name), ndr_get_array_length(ndr, &r->in.account_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.account_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.account_name, ndr_get_array_length(ndr, &r->in.account_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_netr_SchannelType(ndr, NDR_SCALARS, &r->in.secure_channel_type));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.computer_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.computer_name));
-		if (ndr_get_array_length(ndr, &r->in.computer_name) > ndr_get_array_size(ndr, &r->in.computer_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.computer_name), ndr_get_array_length(ndr, &r->in.computer_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computer_name, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t), CH_UTF16));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.credential);
-		}
-		_mem_save_credential_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.credential, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_credential_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		ZERO_STRUCTP(r->out.return_authenticator);
-		NDR_PULL_ALLOC(ndr, r->out.password);
-		ZERO_STRUCTP(r->out.password);
-		NDR_PULL_ALLOC(ndr, r->out.password2);
-		ZERO_STRUCTP(r->out.password2);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		}
-		_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.return_authenticator, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.password);
-		}
-		_mem_save_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.password, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.password));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_password_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.password2);
-		}
-		_mem_save_password2_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.password2, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.password2));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_password2_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_ServerTrustPasswordsGet(struct ndr_print *ndr, const char *name, int flags, const struct netr_ServerTrustPasswordsGet *r)
-{
-	ndr_print_struct(ndr, name, "netr_ServerTrustPasswordsGet");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_ServerTrustPasswordsGet");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "account_name", r->in.account_name);
-		ndr_print_netr_SchannelType(ndr, "secure_channel_type", r->in.secure_channel_type);
-		ndr_print_string(ndr, "computer_name", r->in.computer_name);
-		ndr_print_ptr(ndr, "credential", r->in.credential);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "credential", r->in.credential);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_ServerTrustPasswordsGet");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "password", r->out.password);
-		ndr->depth++;
-		ndr_print_samr_Password(ndr, "password", r->out.password);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "password2", r->out.password2);
-		ndr->depth++;
-		ndr_print_samr_Password(ndr, "password2", r->out.password2);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_DsRGetForestTrustInformation(struct ndr_push *ndr, int flags, const struct netr_DsRGetForestTrustInformation *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.trusted_domain_name));
-		if (r->in.trusted_domain_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.trusted_domain_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.trusted_domain_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.trusted_domain_name, ndr_charset_length(r->in.trusted_domain_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.forest_trust_info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.forest_trust_info));
-		if (*r->out.forest_trust_info) {
-			NDR_CHECK(ndr_push_lsa_ForestTrustInformation(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.forest_trust_info));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_DsRGetForestTrustInformation(struct ndr_pull *ndr, int flags, struct netr_DsRGetForestTrustInformation *r)
-{
-	uint32_t _ptr_server_name;
-	uint32_t _ptr_trusted_domain_name;
-	uint32_t _ptr_forest_trust_info;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_trusted_domain_name_0;
-	TALLOC_CTX *_mem_save_forest_trust_info_0;
-	TALLOC_CTX *_mem_save_forest_trust_info_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_trusted_domain_name));
-		if (_ptr_trusted_domain_name) {
-			NDR_PULL_ALLOC(ndr, r->in.trusted_domain_name);
-		} else {
-			r->in.trusted_domain_name = NULL;
-		}
-		if (r->in.trusted_domain_name) {
-			_mem_save_trusted_domain_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.trusted_domain_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.trusted_domain_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.trusted_domain_name));
-			if (ndr_get_array_length(ndr, &r->in.trusted_domain_name) > ndr_get_array_size(ndr, &r->in.trusted_domain_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.trusted_domain_name), ndr_get_array_length(ndr, &r->in.trusted_domain_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.trusted_domain_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.trusted_domain_name, ndr_get_array_length(ndr, &r->in.trusted_domain_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_trusted_domain_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.flags));
-		NDR_PULL_ALLOC(ndr, r->out.forest_trust_info);
-		ZERO_STRUCTP(r->out.forest_trust_info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.forest_trust_info);
-		}
-		_mem_save_forest_trust_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.forest_trust_info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_forest_trust_info));
-		if (_ptr_forest_trust_info) {
-			NDR_PULL_ALLOC(ndr, *r->out.forest_trust_info);
-		} else {
-			*r->out.forest_trust_info = NULL;
-		}
-		if (*r->out.forest_trust_info) {
-			_mem_save_forest_trust_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.forest_trust_info, 0);
-			NDR_CHECK(ndr_pull_lsa_ForestTrustInformation(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.forest_trust_info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_forest_trust_info_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_forest_trust_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_DsRGetForestTrustInformation(struct ndr_print *ndr, const char *name, int flags, const struct netr_DsRGetForestTrustInformation *r)
-{
-	ndr_print_struct(ndr, name, "netr_DsRGetForestTrustInformation");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_DsRGetForestTrustInformation");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "trusted_domain_name", r->in.trusted_domain_name);
-		ndr->depth++;
-		if (r->in.trusted_domain_name) {
-			ndr_print_string(ndr, "trusted_domain_name", r->in.trusted_domain_name);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "flags", r->in.flags);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_DsRGetForestTrustInformation");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "forest_trust_info", r->out.forest_trust_info);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "forest_trust_info", *r->out.forest_trust_info);
-		ndr->depth++;
-		if (*r->out.forest_trust_info) {
-			ndr_print_lsa_ForestTrustInformation(ndr, "forest_trust_info", *r->out.forest_trust_info);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_GetForestTrustInformation(struct ndr_push *ndr, int flags, const struct netr_GetForestTrustInformation *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.trusted_domain_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.trusted_domain_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.trusted_domain_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.trusted_domain_name, ndr_charset_length(r->in.trusted_domain_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		if (r->in.credential == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.return_authenticator == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		if (r->out.forest_trust_info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.forest_trust_info));
-		if (*r->out.forest_trust_info) {
-			NDR_CHECK(ndr_push_lsa_ForestTrustInformation(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.forest_trust_info));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_GetForestTrustInformation(struct ndr_pull *ndr, int flags, struct netr_GetForestTrustInformation *r)
-{
-	uint32_t _ptr_server_name;
-	uint32_t _ptr_forest_trust_info;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_credential_0;
-	TALLOC_CTX *_mem_save_return_authenticator_0;
-	TALLOC_CTX *_mem_save_forest_trust_info_0;
-	TALLOC_CTX *_mem_save_forest_trust_info_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.trusted_domain_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.trusted_domain_name));
-		if (ndr_get_array_length(ndr, &r->in.trusted_domain_name) > ndr_get_array_size(ndr, &r->in.trusted_domain_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.trusted_domain_name), ndr_get_array_length(ndr, &r->in.trusted_domain_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.trusted_domain_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.trusted_domain_name, ndr_get_array_length(ndr, &r->in.trusted_domain_name), sizeof(uint16_t), CH_UTF16));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.credential);
-		}
-		_mem_save_credential_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.credential, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_credential_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.flags));
-		NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		ZERO_STRUCTP(r->out.return_authenticator);
-		NDR_PULL_ALLOC(ndr, r->out.forest_trust_info);
-		ZERO_STRUCTP(r->out.forest_trust_info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		}
-		_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.return_authenticator, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.forest_trust_info);
-		}
-		_mem_save_forest_trust_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.forest_trust_info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_forest_trust_info));
-		if (_ptr_forest_trust_info) {
-			NDR_PULL_ALLOC(ndr, *r->out.forest_trust_info);
-		} else {
-			*r->out.forest_trust_info = NULL;
-		}
-		if (*r->out.forest_trust_info) {
-			_mem_save_forest_trust_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.forest_trust_info, 0);
-			NDR_CHECK(ndr_pull_lsa_ForestTrustInformation(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.forest_trust_info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_forest_trust_info_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_forest_trust_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_GetForestTrustInformation(struct ndr_print *ndr, const char *name, int flags, const struct netr_GetForestTrustInformation *r)
-{
-	ndr_print_struct(ndr, name, "netr_GetForestTrustInformation");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_GetForestTrustInformation");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "trusted_domain_name", r->in.trusted_domain_name);
-		ndr->depth++;
-		ndr_print_string(ndr, "trusted_domain_name", r->in.trusted_domain_name);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "credential", r->in.credential);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "credential", r->in.credential);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "flags", r->in.flags);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_GetForestTrustInformation");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth++;
-		ndr_print_netr_Authenticator(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "forest_trust_info", r->out.forest_trust_info);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "forest_trust_info", *r->out.forest_trust_info);
-		ndr->depth++;
-		if (*r->out.forest_trust_info) {
-			ndr_print_lsa_ForestTrustInformation(ndr, "forest_trust_info", *r->out.forest_trust_info);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_LogonSamLogonWithFlags(struct ndr_push *ndr, int flags, const struct netr_LogonSamLogonWithFlags *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.computer_name));
-		if (r->in.computer_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computer_name, ndr_charset_length(r->in.computer_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.credential));
-		if (r->in.credential) {
-			NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.return_authenticator));
-		if (r->in.return_authenticator) {
-			NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->in.return_authenticator));
-		}
-		NDR_CHECK(ndr_push_netr_LogonLevel(ndr, NDR_SCALARS, r->in.logon_level));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->in.logon, r->in.logon_level));
-		NDR_CHECK(ndr_push_netr_LogonInfo(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.logon));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.validation_level));
-		if (r->in.flags == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.return_authenticator));
-		if (r->out.return_authenticator) {
-			NDR_CHECK(ndr_push_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-		}
-		if (r->out.validation == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.validation, r->in.validation_level));
-		NDR_CHECK(ndr_push_netr_Validation(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.validation));
-		if (r->out.authoritative == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, *r->out.authoritative));
-		if (r->out.flags == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.flags));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_LogonSamLogonWithFlags(struct ndr_pull *ndr, int flags, struct netr_LogonSamLogonWithFlags *r)
-{
-	uint32_t _ptr_server_name;
-	uint32_t _ptr_computer_name;
-	uint32_t _ptr_credential;
-	uint32_t _ptr_return_authenticator;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_computer_name_0;
-	TALLOC_CTX *_mem_save_credential_0;
-	TALLOC_CTX *_mem_save_return_authenticator_0;
-	TALLOC_CTX *_mem_save_validation_0;
-	TALLOC_CTX *_mem_save_authoritative_0;
-	TALLOC_CTX *_mem_save_flags_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_computer_name));
-		if (_ptr_computer_name) {
-			NDR_PULL_ALLOC(ndr, r->in.computer_name);
-		} else {
-			r->in.computer_name = NULL;
-		}
-		if (r->in.computer_name) {
-			_mem_save_computer_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.computer_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.computer_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.computer_name));
-			if (ndr_get_array_length(ndr, &r->in.computer_name) > ndr_get_array_size(ndr, &r->in.computer_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.computer_name), ndr_get_array_length(ndr, &r->in.computer_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computer_name, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_computer_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_credential));
-		if (_ptr_credential) {
-			NDR_PULL_ALLOC(ndr, r->in.credential);
-		} else {
-			r->in.credential = NULL;
-		}
-		if (r->in.credential) {
-			_mem_save_credential_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.credential, 0);
-			NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.credential));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_credential_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_return_authenticator));
-		if (_ptr_return_authenticator) {
-			NDR_PULL_ALLOC(ndr, r->in.return_authenticator);
-		} else {
-			r->in.return_authenticator = NULL;
-		}
-		if (r->in.return_authenticator) {
-			_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.return_authenticator, 0);
-			NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->in.return_authenticator));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, 0);
-		}
-		NDR_CHECK(ndr_pull_netr_LogonLevel(ndr, NDR_SCALARS, &r->in.logon_level));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->in.logon, r->in.logon_level));
-		NDR_CHECK(ndr_pull_netr_LogonInfo(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.logon));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.validation_level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.flags);
-		}
-		_mem_save_flags_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.flags, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.flags));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_flags_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.validation);
-		ZERO_STRUCTP(r->out.validation);
-		NDR_PULL_ALLOC(ndr, r->out.authoritative);
-		ZERO_STRUCTP(r->out.authoritative);
-		NDR_PULL_ALLOC(ndr, r->out.flags);
-		*r->out.flags = *r->in.flags;
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_return_authenticator));
-		if (_ptr_return_authenticator) {
-			NDR_PULL_ALLOC(ndr, r->out.return_authenticator);
-		} else {
-			r->out.return_authenticator = NULL;
-		}
-		if (r->out.return_authenticator) {
-			_mem_save_return_authenticator_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.return_authenticator, 0);
-			NDR_CHECK(ndr_pull_netr_Authenticator(ndr, NDR_SCALARS, r->out.return_authenticator));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_return_authenticator_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.validation);
-		}
-		_mem_save_validation_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.validation, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.validation, r->in.validation_level));
-		NDR_CHECK(ndr_pull_netr_Validation(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.validation));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_validation_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.authoritative);
-		}
-		_mem_save_authoritative_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.authoritative, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, r->out.authoritative));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_authoritative_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.flags);
-		}
-		_mem_save_flags_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.flags, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.flags));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_flags_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_LogonSamLogonWithFlags(struct ndr_print *ndr, const char *name, int flags, const struct netr_LogonSamLogonWithFlags *r)
-{
-	ndr_print_struct(ndr, name, "netr_LogonSamLogonWithFlags");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_LogonSamLogonWithFlags");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "computer_name", r->in.computer_name);
-		ndr->depth++;
-		if (r->in.computer_name) {
-			ndr_print_string(ndr, "computer_name", r->in.computer_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "credential", r->in.credential);
-		ndr->depth++;
-		if (r->in.credential) {
-			ndr_print_netr_Authenticator(ndr, "credential", r->in.credential);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "return_authenticator", r->in.return_authenticator);
-		ndr->depth++;
-		if (r->in.return_authenticator) {
-			ndr_print_netr_Authenticator(ndr, "return_authenticator", r->in.return_authenticator);
-		}
-		ndr->depth--;
-		ndr_print_netr_LogonLevel(ndr, "logon_level", r->in.logon_level);
-		ndr_print_set_switch_value(ndr, &r->in.logon, r->in.logon_level);
-		ndr_print_netr_LogonInfo(ndr, "logon", &r->in.logon);
-		ndr_print_uint16(ndr, "validation_level", r->in.validation_level);
-		ndr_print_ptr(ndr, "flags", r->in.flags);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "flags", *r->in.flags);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_LogonSamLogonWithFlags");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "return_authenticator", r->out.return_authenticator);
-		ndr->depth++;
-		if (r->out.return_authenticator) {
-			ndr_print_netr_Authenticator(ndr, "return_authenticator", r->out.return_authenticator);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "validation", r->out.validation);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.validation, r->in.validation_level);
-		ndr_print_netr_Validation(ndr, "validation", r->out.validation);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "authoritative", r->out.authoritative);
-		ndr->depth++;
-		ndr_print_uint8(ndr, "authoritative", *r->out.authoritative);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "flags", r->out.flags);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "flags", *r->out.flags);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_netr_NETRSERVERGETTRUSTINFO(struct ndr_push *ndr, int flags, const struct netr_NETRSERVERGETTRUSTINFO *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_netr_NETRSERVERGETTRUSTINFO(struct ndr_pull *ndr, int flags, struct netr_NETRSERVERGETTRUSTINFO *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_netr_NETRSERVERGETTRUSTINFO(struct ndr_print *ndr, const char *name, int flags, const struct netr_NETRSERVERGETTRUSTINFO *r)
-{
-	ndr_print_struct(ndr, name, "netr_NETRSERVERGETTRUSTINFO");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "netr_NETRSERVERGETTRUSTINFO");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "netr_NETRSERVERGETTRUSTINFO");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static const struct ndr_interface_call netlogon_calls[] = {
-	{
-		"netr_LogonUasLogon",
-		sizeof(struct netr_LogonUasLogon),
-		(ndr_push_flags_fn_t) ndr_push_netr_LogonUasLogon,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_LogonUasLogon,
-		(ndr_print_function_t) ndr_print_netr_LogonUasLogon,
-		false,
-	},
-	{
-		"netr_LogonUasLogoff",
-		sizeof(struct netr_LogonUasLogoff),
-		(ndr_push_flags_fn_t) ndr_push_netr_LogonUasLogoff,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_LogonUasLogoff,
-		(ndr_print_function_t) ndr_print_netr_LogonUasLogoff,
-		false,
-	},
-	{
-		"netr_LogonSamLogon",
-		sizeof(struct netr_LogonSamLogon),
-		(ndr_push_flags_fn_t) ndr_push_netr_LogonSamLogon,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_LogonSamLogon,
-		(ndr_print_function_t) ndr_print_netr_LogonSamLogon,
-		false,
-	},
-	{
-		"netr_LogonSamLogoff",
-		sizeof(struct netr_LogonSamLogoff),
-		(ndr_push_flags_fn_t) ndr_push_netr_LogonSamLogoff,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_LogonSamLogoff,
-		(ndr_print_function_t) ndr_print_netr_LogonSamLogoff,
-		false,
-	},
-	{
-		"netr_ServerReqChallenge",
-		sizeof(struct netr_ServerReqChallenge),
-		(ndr_push_flags_fn_t) ndr_push_netr_ServerReqChallenge,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_ServerReqChallenge,
-		(ndr_print_function_t) ndr_print_netr_ServerReqChallenge,
-		false,
-	},
-	{
-		"netr_ServerAuthenticate",
-		sizeof(struct netr_ServerAuthenticate),
-		(ndr_push_flags_fn_t) ndr_push_netr_ServerAuthenticate,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_ServerAuthenticate,
-		(ndr_print_function_t) ndr_print_netr_ServerAuthenticate,
-		false,
-	},
-	{
-		"netr_ServerPasswordSet",
-		sizeof(struct netr_ServerPasswordSet),
-		(ndr_push_flags_fn_t) ndr_push_netr_ServerPasswordSet,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_ServerPasswordSet,
-		(ndr_print_function_t) ndr_print_netr_ServerPasswordSet,
-		false,
-	},
-	{
-		"netr_DatabaseDeltas",
-		sizeof(struct netr_DatabaseDeltas),
-		(ndr_push_flags_fn_t) ndr_push_netr_DatabaseDeltas,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_DatabaseDeltas,
-		(ndr_print_function_t) ndr_print_netr_DatabaseDeltas,
-		false,
-	},
-	{
-		"netr_DatabaseSync",
-		sizeof(struct netr_DatabaseSync),
-		(ndr_push_flags_fn_t) ndr_push_netr_DatabaseSync,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_DatabaseSync,
-		(ndr_print_function_t) ndr_print_netr_DatabaseSync,
-		false,
-	},
-	{
-		"netr_AccountDeltas",
-		sizeof(struct netr_AccountDeltas),
-		(ndr_push_flags_fn_t) ndr_push_netr_AccountDeltas,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_AccountDeltas,
-		(ndr_print_function_t) ndr_print_netr_AccountDeltas,
-		false,
-	},
-	{
-		"netr_AccountSync",
-		sizeof(struct netr_AccountSync),
-		(ndr_push_flags_fn_t) ndr_push_netr_AccountSync,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_AccountSync,
-		(ndr_print_function_t) ndr_print_netr_AccountSync,
-		false,
-	},
-	{
-		"netr_GetDcName",
-		sizeof(struct netr_GetDcName),
-		(ndr_push_flags_fn_t) ndr_push_netr_GetDcName,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_GetDcName,
-		(ndr_print_function_t) ndr_print_netr_GetDcName,
-		false,
-	},
-	{
-		"netr_LogonControl",
-		sizeof(struct netr_LogonControl),
-		(ndr_push_flags_fn_t) ndr_push_netr_LogonControl,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_LogonControl,
-		(ndr_print_function_t) ndr_print_netr_LogonControl,
-		false,
-	},
-	{
-		"netr_GetAnyDCName",
-		sizeof(struct netr_GetAnyDCName),
-		(ndr_push_flags_fn_t) ndr_push_netr_GetAnyDCName,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_GetAnyDCName,
-		(ndr_print_function_t) ndr_print_netr_GetAnyDCName,
-		false,
-	},
-	{
-		"netr_LogonControl2",
-		sizeof(struct netr_LogonControl2),
-		(ndr_push_flags_fn_t) ndr_push_netr_LogonControl2,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_LogonControl2,
-		(ndr_print_function_t) ndr_print_netr_LogonControl2,
-		false,
-	},
-	{
-		"netr_ServerAuthenticate2",
-		sizeof(struct netr_ServerAuthenticate2),
-		(ndr_push_flags_fn_t) ndr_push_netr_ServerAuthenticate2,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_ServerAuthenticate2,
-		(ndr_print_function_t) ndr_print_netr_ServerAuthenticate2,
-		false,
-	},
-	{
-		"netr_DatabaseSync2",
-		sizeof(struct netr_DatabaseSync2),
-		(ndr_push_flags_fn_t) ndr_push_netr_DatabaseSync2,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_DatabaseSync2,
-		(ndr_print_function_t) ndr_print_netr_DatabaseSync2,
-		false,
-	},
-	{
-		"netr_DatabaseRedo",
-		sizeof(struct netr_DatabaseRedo),
-		(ndr_push_flags_fn_t) ndr_push_netr_DatabaseRedo,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_DatabaseRedo,
-		(ndr_print_function_t) ndr_print_netr_DatabaseRedo,
-		false,
-	},
-	{
-		"netr_LogonControl2Ex",
-		sizeof(struct netr_LogonControl2Ex),
-		(ndr_push_flags_fn_t) ndr_push_netr_LogonControl2Ex,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_LogonControl2Ex,
-		(ndr_print_function_t) ndr_print_netr_LogonControl2Ex,
-		false,
-	},
-	{
-		"netr_NetrEnumerateTrustedDomains",
-		sizeof(struct netr_NetrEnumerateTrustedDomains),
-		(ndr_push_flags_fn_t) ndr_push_netr_NetrEnumerateTrustedDomains,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_NetrEnumerateTrustedDomains,
-		(ndr_print_function_t) ndr_print_netr_NetrEnumerateTrustedDomains,
-		false,
-	},
-	{
-		"netr_DsRGetDCName",
-		sizeof(struct netr_DsRGetDCName),
-		(ndr_push_flags_fn_t) ndr_push_netr_DsRGetDCName,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_DsRGetDCName,
-		(ndr_print_function_t) ndr_print_netr_DsRGetDCName,
-		false,
-	},
-	{
-		"netr_NETRLOGONDUMMYROUTINE1",
-		sizeof(struct netr_NETRLOGONDUMMYROUTINE1),
-		(ndr_push_flags_fn_t) ndr_push_netr_NETRLOGONDUMMYROUTINE1,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_NETRLOGONDUMMYROUTINE1,
-		(ndr_print_function_t) ndr_print_netr_NETRLOGONDUMMYROUTINE1,
-		false,
-	},
-	{
-		"netr_NETRLOGONSETSERVICEBITS",
-		sizeof(struct netr_NETRLOGONSETSERVICEBITS),
-		(ndr_push_flags_fn_t) ndr_push_netr_NETRLOGONSETSERVICEBITS,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_NETRLOGONSETSERVICEBITS,
-		(ndr_print_function_t) ndr_print_netr_NETRLOGONSETSERVICEBITS,
-		false,
-	},
-	{
-		"netr_LogonGetTrustRid",
-		sizeof(struct netr_LogonGetTrustRid),
-		(ndr_push_flags_fn_t) ndr_push_netr_LogonGetTrustRid,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_LogonGetTrustRid,
-		(ndr_print_function_t) ndr_print_netr_LogonGetTrustRid,
-		false,
-	},
-	{
-		"netr_NETRLOGONCOMPUTESERVERDIGEST",
-		sizeof(struct netr_NETRLOGONCOMPUTESERVERDIGEST),
-		(ndr_push_flags_fn_t) ndr_push_netr_NETRLOGONCOMPUTESERVERDIGEST,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_NETRLOGONCOMPUTESERVERDIGEST,
-		(ndr_print_function_t) ndr_print_netr_NETRLOGONCOMPUTESERVERDIGEST,
-		false,
-	},
-	{
-		"netr_NETRLOGONCOMPUTECLIENTDIGEST",
-		sizeof(struct netr_NETRLOGONCOMPUTECLIENTDIGEST),
-		(ndr_push_flags_fn_t) ndr_push_netr_NETRLOGONCOMPUTECLIENTDIGEST,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_NETRLOGONCOMPUTECLIENTDIGEST,
-		(ndr_print_function_t) ndr_print_netr_NETRLOGONCOMPUTECLIENTDIGEST,
-		false,
-	},
-	{
-		"netr_ServerAuthenticate3",
-		sizeof(struct netr_ServerAuthenticate3),
-		(ndr_push_flags_fn_t) ndr_push_netr_ServerAuthenticate3,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_ServerAuthenticate3,
-		(ndr_print_function_t) ndr_print_netr_ServerAuthenticate3,
-		false,
-	},
-	{
-		"netr_DsRGetDCNameEx",
-		sizeof(struct netr_DsRGetDCNameEx),
-		(ndr_push_flags_fn_t) ndr_push_netr_DsRGetDCNameEx,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_DsRGetDCNameEx,
-		(ndr_print_function_t) ndr_print_netr_DsRGetDCNameEx,
-		false,
-	},
-	{
-		"netr_DsRGetSiteName",
-		sizeof(struct netr_DsRGetSiteName),
-		(ndr_push_flags_fn_t) ndr_push_netr_DsRGetSiteName,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_DsRGetSiteName,
-		(ndr_print_function_t) ndr_print_netr_DsRGetSiteName,
-		false,
-	},
-	{
-		"netr_LogonGetDomainInfo",
-		sizeof(struct netr_LogonGetDomainInfo),
-		(ndr_push_flags_fn_t) ndr_push_netr_LogonGetDomainInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_LogonGetDomainInfo,
-		(ndr_print_function_t) ndr_print_netr_LogonGetDomainInfo,
-		false,
-	},
-	{
-		"netr_ServerPasswordSet2",
-		sizeof(struct netr_ServerPasswordSet2),
-		(ndr_push_flags_fn_t) ndr_push_netr_ServerPasswordSet2,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_ServerPasswordSet2,
-		(ndr_print_function_t) ndr_print_netr_ServerPasswordSet2,
-		false,
-	},
-	{
-		"netr_ServerPasswordGet",
-		sizeof(struct netr_ServerPasswordGet),
-		(ndr_push_flags_fn_t) ndr_push_netr_ServerPasswordGet,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_ServerPasswordGet,
-		(ndr_print_function_t) ndr_print_netr_ServerPasswordGet,
-		false,
-	},
-	{
-		"netr_NETRLOGONSENDTOSAM",
-		sizeof(struct netr_NETRLOGONSENDTOSAM),
-		(ndr_push_flags_fn_t) ndr_push_netr_NETRLOGONSENDTOSAM,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_NETRLOGONSENDTOSAM,
-		(ndr_print_function_t) ndr_print_netr_NETRLOGONSENDTOSAM,
-		false,
-	},
-	{
-		"netr_DsRAddressToSitenamesW",
-		sizeof(struct netr_DsRAddressToSitenamesW),
-		(ndr_push_flags_fn_t) ndr_push_netr_DsRAddressToSitenamesW,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_DsRAddressToSitenamesW,
-		(ndr_print_function_t) ndr_print_netr_DsRAddressToSitenamesW,
-		false,
-	},
-	{
-		"netr_DsRGetDCNameEx2",
-		sizeof(struct netr_DsRGetDCNameEx2),
-		(ndr_push_flags_fn_t) ndr_push_netr_DsRGetDCNameEx2,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_DsRGetDCNameEx2,
-		(ndr_print_function_t) ndr_print_netr_DsRGetDCNameEx2,
-		false,
-	},
-	{
-		"netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN",
-		sizeof(struct netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN),
-		(ndr_push_flags_fn_t) ndr_push_netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN,
-		(ndr_print_function_t) ndr_print_netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN,
-		false,
-	},
-	{
-		"netr_NetrEnumerateTrustedDomainsEx",
-		sizeof(struct netr_NetrEnumerateTrustedDomainsEx),
-		(ndr_push_flags_fn_t) ndr_push_netr_NetrEnumerateTrustedDomainsEx,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_NetrEnumerateTrustedDomainsEx,
-		(ndr_print_function_t) ndr_print_netr_NetrEnumerateTrustedDomainsEx,
-		false,
-	},
-	{
-		"netr_DsRAddressToSitenamesExW",
-		sizeof(struct netr_DsRAddressToSitenamesExW),
-		(ndr_push_flags_fn_t) ndr_push_netr_DsRAddressToSitenamesExW,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_DsRAddressToSitenamesExW,
-		(ndr_print_function_t) ndr_print_netr_DsRAddressToSitenamesExW,
-		false,
-	},
-	{
-		"netr_DsrGetDcSiteCoverageW",
-		sizeof(struct netr_DsrGetDcSiteCoverageW),
-		(ndr_push_flags_fn_t) ndr_push_netr_DsrGetDcSiteCoverageW,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_DsrGetDcSiteCoverageW,
-		(ndr_print_function_t) ndr_print_netr_DsrGetDcSiteCoverageW,
-		false,
-	},
-	{
-		"netr_LogonSamLogonEx",
-		sizeof(struct netr_LogonSamLogonEx),
-		(ndr_push_flags_fn_t) ndr_push_netr_LogonSamLogonEx,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_LogonSamLogonEx,
-		(ndr_print_function_t) ndr_print_netr_LogonSamLogonEx,
-		false,
-	},
-	{
-		"netr_DsrEnumerateDomainTrusts",
-		sizeof(struct netr_DsrEnumerateDomainTrusts),
-		(ndr_push_flags_fn_t) ndr_push_netr_DsrEnumerateDomainTrusts,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_DsrEnumerateDomainTrusts,
-		(ndr_print_function_t) ndr_print_netr_DsrEnumerateDomainTrusts,
-		false,
-	},
-	{
-		"netr_DsrDeregisterDNSHostRecords",
-		sizeof(struct netr_DsrDeregisterDNSHostRecords),
-		(ndr_push_flags_fn_t) ndr_push_netr_DsrDeregisterDNSHostRecords,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_DsrDeregisterDNSHostRecords,
-		(ndr_print_function_t) ndr_print_netr_DsrDeregisterDNSHostRecords,
-		false,
-	},
-	{
-		"netr_ServerTrustPasswordsGet",
-		sizeof(struct netr_ServerTrustPasswordsGet),
-		(ndr_push_flags_fn_t) ndr_push_netr_ServerTrustPasswordsGet,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_ServerTrustPasswordsGet,
-		(ndr_print_function_t) ndr_print_netr_ServerTrustPasswordsGet,
-		false,
-	},
-	{
-		"netr_DsRGetForestTrustInformation",
-		sizeof(struct netr_DsRGetForestTrustInformation),
-		(ndr_push_flags_fn_t) ndr_push_netr_DsRGetForestTrustInformation,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_DsRGetForestTrustInformation,
-		(ndr_print_function_t) ndr_print_netr_DsRGetForestTrustInformation,
-		false,
-	},
-	{
-		"netr_GetForestTrustInformation",
-		sizeof(struct netr_GetForestTrustInformation),
-		(ndr_push_flags_fn_t) ndr_push_netr_GetForestTrustInformation,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_GetForestTrustInformation,
-		(ndr_print_function_t) ndr_print_netr_GetForestTrustInformation,
-		false,
-	},
-	{
-		"netr_LogonSamLogonWithFlags",
-		sizeof(struct netr_LogonSamLogonWithFlags),
-		(ndr_push_flags_fn_t) ndr_push_netr_LogonSamLogonWithFlags,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_LogonSamLogonWithFlags,
-		(ndr_print_function_t) ndr_print_netr_LogonSamLogonWithFlags,
-		false,
-	},
-	{
-		"netr_NETRSERVERGETTRUSTINFO",
-		sizeof(struct netr_NETRSERVERGETTRUSTINFO),
-		(ndr_push_flags_fn_t) ndr_push_netr_NETRSERVERGETTRUSTINFO,
-		(ndr_pull_flags_fn_t) ndr_pull_netr_NETRSERVERGETTRUSTINFO,
-		(ndr_print_function_t) ndr_print_netr_NETRSERVERGETTRUSTINFO,
-		false,
-	},
-	{ NULL, 0, NULL, NULL, NULL, false }
-};
-
-static const char * const netlogon_endpoint_strings[] = {
-	"ncacn_np:[\\pipe\\netlogon]", 
-	"ncacn_ip_tcp:", 
-	"ncalrpc:", 
-};
-
-static const struct ndr_interface_string_array netlogon_endpoints = {
-	.count	= 3,
-	.names	= netlogon_endpoint_strings
-};
-
-static const char * const netlogon_authservice_strings[] = {
-	"host", 
-};
-
-static const struct ndr_interface_string_array netlogon_authservices = {
-	.count	= 1,
-	.names	= netlogon_authservice_strings
-};
-
-
-const struct ndr_interface_table ndr_table_netlogon = {
-	.name		= "netlogon",
-	.syntax_id	= {
-		{0x12345678,0x1234,0xabcd,{0xef,0x00},{0x01,0x23,0x45,0x67,0xcf,0xfb}},
-		NDR_NETLOGON_VERSION
-	},
-	.helpstring	= NDR_NETLOGON_HELPSTRING,
-	.num_calls	= 47,
-	.calls		= netlogon_calls,
-	.endpoints	= &netlogon_endpoints,
-	.authservices	= &netlogon_authservices
-};
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_netlogon.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_netlogon.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_netlogon.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,261 +0,0 @@
-/* header auto-generated by pidl */
-
-#include "librpc/ndr/libndr.h"
-#include "librpc/gen_ndr/netlogon.h"
-
-#ifndef _HEADER_NDR_netlogon
-#define _HEADER_NDR_netlogon
-
-#define NDR_NETLOGON_UUID "12345678-1234-abcd-ef00-01234567cffb"
-#define NDR_NETLOGON_VERSION 1.0
-#define NDR_NETLOGON_NAME "netlogon"
-#define NDR_NETLOGON_HELPSTRING NULL
-extern const struct ndr_interface_table ndr_table_netlogon;
-#define NDR_NETR_LOGONUASLOGON (0x00)
-
-#define NDR_NETR_LOGONUASLOGOFF (0x01)
-
-#define NDR_NETR_LOGONSAMLOGON (0x02)
-
-#define NDR_NETR_LOGONSAMLOGOFF (0x03)
-
-#define NDR_NETR_SERVERREQCHALLENGE (0x04)
-
-#define NDR_NETR_SERVERAUTHENTICATE (0x05)
-
-#define NDR_NETR_SERVERPASSWORDSET (0x06)
-
-#define NDR_NETR_DATABASEDELTAS (0x07)
-
-#define NDR_NETR_DATABASESYNC (0x08)
-
-#define NDR_NETR_ACCOUNTDELTAS (0x09)
-
-#define NDR_NETR_ACCOUNTSYNC (0x0a)
-
-#define NDR_NETR_GETDCNAME (0x0b)
-
-#define NDR_NETR_LOGONCONTROL (0x0c)
-
-#define NDR_NETR_GETANYDCNAME (0x0d)
-
-#define NDR_NETR_LOGONCONTROL2 (0x0e)
-
-#define NDR_NETR_SERVERAUTHENTICATE2 (0x0f)
-
-#define NDR_NETR_DATABASESYNC2 (0x10)
-
-#define NDR_NETR_DATABASEREDO (0x11)
-
-#define NDR_NETR_LOGONCONTROL2EX (0x12)
-
-#define NDR_NETR_NETRENUMERATETRUSTEDDOMAINS (0x13)
-
-#define NDR_NETR_DSRGETDCNAME (0x14)
-
-#define NDR_NETR_NETRLOGONDUMMYROUTINE1 (0x15)
-
-#define NDR_NETR_NETRLOGONSETSERVICEBITS (0x16)
-
-#define NDR_NETR_LOGONGETTRUSTRID (0x17)
-
-#define NDR_NETR_NETRLOGONCOMPUTESERVERDIGEST (0x18)
-
-#define NDR_NETR_NETRLOGONCOMPUTECLIENTDIGEST (0x19)
-
-#define NDR_NETR_SERVERAUTHENTICATE3 (0x1a)
-
-#define NDR_NETR_DSRGETDCNAMEEX (0x1b)
-
-#define NDR_NETR_DSRGETSITENAME (0x1c)
-
-#define NDR_NETR_LOGONGETDOMAININFO (0x1d)
-
-#define NDR_NETR_SERVERPASSWORDSET2 (0x1e)
-
-#define NDR_NETR_SERVERPASSWORDGET (0x1f)
-
-#define NDR_NETR_NETRLOGONSENDTOSAM (0x20)
-
-#define NDR_NETR_DSRADDRESSTOSITENAMESW (0x21)
-
-#define NDR_NETR_DSRGETDCNAMEEX2 (0x22)
-
-#define NDR_NETR_NETRLOGONGETTIMESERVICEPARENTDOMAIN (0x23)
-
-#define NDR_NETR_NETRENUMERATETRUSTEDDOMAINSEX (0x24)
-
-#define NDR_NETR_DSRADDRESSTOSITENAMESEXW (0x25)
-
-#define NDR_NETR_DSRGETDCSITECOVERAGEW (0x26)
-
-#define NDR_NETR_LOGONSAMLOGONEX (0x27)
-
-#define NDR_NETR_DSRENUMERATEDOMAINTRUSTS (0x28)
-
-#define NDR_NETR_DSRDEREGISTERDNSHOSTRECORDS (0x29)
-
-#define NDR_NETR_SERVERTRUSTPASSWORDSGET (0x2a)
-
-#define NDR_NETR_DSRGETFORESTTRUSTINFORMATION (0x2b)
-
-#define NDR_NETR_GETFORESTTRUSTINFORMATION (0x2c)
-
-#define NDR_NETR_LOGONSAMLOGONWITHFLAGS (0x2d)
-
-#define NDR_NETR_NETRSERVERGETTRUSTINFO (0x2e)
-
-#define NDR_NETLOGON_CALL_COUNT (47)
-void ndr_print_netr_UasInfo(struct ndr_print *ndr, const char *name, const struct netr_UasInfo *r);
-void ndr_print_netr_UasLogoffInfo(struct ndr_print *ndr, const char *name, const struct netr_UasLogoffInfo *r);
-enum ndr_err_code ndr_push_netr_AcctLockStr(struct ndr_push *ndr, int ndr_flags, const struct netr_AcctLockStr *r);
-enum ndr_err_code ndr_pull_netr_AcctLockStr(struct ndr_pull *ndr, int ndr_flags, struct netr_AcctLockStr *r);
-void ndr_print_netr_AcctLockStr(struct ndr_print *ndr, const char *name, const struct netr_AcctLockStr *r);
-enum ndr_err_code ndr_push_netr_LogonParameterControl(struct ndr_push *ndr, int ndr_flags, uint32_t r);
-enum ndr_err_code ndr_pull_netr_LogonParameterControl(struct ndr_pull *ndr, int ndr_flags, uint32_t *r);
-void ndr_print_netr_LogonParameterControl(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_netr_IdentityInfo(struct ndr_print *ndr, const char *name, const struct netr_IdentityInfo *r);
-void ndr_print_netr_PasswordInfo(struct ndr_print *ndr, const char *name, const struct netr_PasswordInfo *r);
-void ndr_print_netr_ChallengeResponse(struct ndr_print *ndr, const char *name, const struct netr_ChallengeResponse *r);
-void ndr_print_netr_NetworkInfo(struct ndr_print *ndr, const char *name, const struct netr_NetworkInfo *r);
-enum ndr_err_code ndr_push_netr_LogonInfo(struct ndr_push *ndr, int ndr_flags, const union netr_LogonInfo *r);
-enum ndr_err_code ndr_pull_netr_LogonInfo(struct ndr_pull *ndr, int ndr_flags, union netr_LogonInfo *r);
-void ndr_print_netr_LogonInfo(struct ndr_print *ndr, const char *name, const union netr_LogonInfo *r);
-enum ndr_err_code ndr_push_netr_UserSessionKey(struct ndr_push *ndr, int ndr_flags, const struct netr_UserSessionKey *r);
-enum ndr_err_code ndr_pull_netr_UserSessionKey(struct ndr_pull *ndr, int ndr_flags, struct netr_UserSessionKey *r);
-void ndr_print_netr_UserSessionKey(struct ndr_print *ndr, const char *name, const struct netr_UserSessionKey *r);
-enum ndr_err_code ndr_push_netr_LMSessionKey(struct ndr_push *ndr, int ndr_flags, const struct netr_LMSessionKey *r);
-enum ndr_err_code ndr_pull_netr_LMSessionKey(struct ndr_pull *ndr, int ndr_flags, struct netr_LMSessionKey *r);
-void ndr_print_netr_LMSessionKey(struct ndr_print *ndr, const char *name, const struct netr_LMSessionKey *r);
-enum ndr_err_code ndr_push_netr_UserFlags(struct ndr_push *ndr, int ndr_flags, uint32_t r);
-enum ndr_err_code ndr_pull_netr_UserFlags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r);
-void ndr_print_netr_UserFlags(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_netr_SamBaseInfo(struct ndr_print *ndr, const char *name, const struct netr_SamBaseInfo *r);
-void ndr_print_netr_SamInfo2(struct ndr_print *ndr, const char *name, const struct netr_SamInfo2 *r);
-void ndr_print_netr_SidAttr(struct ndr_print *ndr, const char *name, const struct netr_SidAttr *r);
-enum ndr_err_code ndr_push_netr_SamInfo3(struct ndr_push *ndr, int ndr_flags, const struct netr_SamInfo3 *r);
-enum ndr_err_code ndr_pull_netr_SamInfo3(struct ndr_pull *ndr, int ndr_flags, struct netr_SamInfo3 *r);
-void ndr_print_netr_SamInfo3(struct ndr_print *ndr, const char *name, const struct netr_SamInfo3 *r);
-void ndr_print_netr_SamInfo6(struct ndr_print *ndr, const char *name, const struct netr_SamInfo6 *r);
-void ndr_print_netr_PacInfo(struct ndr_print *ndr, const char *name, const struct netr_PacInfo *r);
-enum ndr_err_code ndr_push_netr_Validation(struct ndr_push *ndr, int ndr_flags, const union netr_Validation *r);
-enum ndr_err_code ndr_pull_netr_Validation(struct ndr_pull *ndr, int ndr_flags, union netr_Validation *r);
-void ndr_print_netr_Validation(struct ndr_print *ndr, const char *name, const union netr_Validation *r);
-enum ndr_err_code ndr_push_netr_Credential(struct ndr_push *ndr, int ndr_flags, const struct netr_Credential *r);
-enum ndr_err_code ndr_pull_netr_Credential(struct ndr_pull *ndr, int ndr_flags, struct netr_Credential *r);
-void ndr_print_netr_Credential(struct ndr_print *ndr, const char *name, const struct netr_Credential *r);
-enum ndr_err_code ndr_push_netr_Authenticator(struct ndr_push *ndr, int ndr_flags, const struct netr_Authenticator *r);
-enum ndr_err_code ndr_pull_netr_Authenticator(struct ndr_pull *ndr, int ndr_flags, struct netr_Authenticator *r);
-void ndr_print_netr_Authenticator(struct ndr_print *ndr, const char *name, const struct netr_Authenticator *r);
-void ndr_print_netr_LogonLevel(struct ndr_print *ndr, const char *name, enum netr_LogonLevel r);
-void ndr_print_netr_DELTA_DELETE_USER(struct ndr_print *ndr, const char *name, const struct netr_DELTA_DELETE_USER *r);
-void ndr_print_netr_USER_KEY16(struct ndr_print *ndr, const char *name, const struct netr_USER_KEY16 *r);
-void ndr_print_netr_PasswordHistory(struct ndr_print *ndr, const char *name, const struct netr_PasswordHistory *r);
-void ndr_print_netr_USER_KEYS2(struct ndr_print *ndr, const char *name, const struct netr_USER_KEYS2 *r);
-void ndr_print_netr_USER_KEY_UNION(struct ndr_print *ndr, const char *name, const struct netr_USER_KEY_UNION *r);
-enum ndr_err_code ndr_push_netr_USER_KEYS(struct ndr_push *ndr, int ndr_flags, const struct netr_USER_KEYS *r);
-enum ndr_err_code ndr_pull_netr_USER_KEYS(struct ndr_pull *ndr, int ndr_flags, struct netr_USER_KEYS *r);
-void ndr_print_netr_USER_KEYS(struct ndr_print *ndr, const char *name, const struct netr_USER_KEYS *r);
-void ndr_print_netr_USER_PRIVATE_INFO(struct ndr_print *ndr, const char *name, const struct netr_USER_PRIVATE_INFO *r);
-void ndr_print_netr_DELTA_USER(struct ndr_print *ndr, const char *name, const struct netr_DELTA_USER *r);
-void ndr_print_netr_DELTA_DOMAIN(struct ndr_print *ndr, const char *name, const struct netr_DELTA_DOMAIN *r);
-void ndr_print_netr_DELTA_GROUP(struct ndr_print *ndr, const char *name, const struct netr_DELTA_GROUP *r);
-void ndr_print_netr_DELTA_RENAME(struct ndr_print *ndr, const char *name, const struct netr_DELTA_RENAME *r);
-void ndr_print_netr_DELTA_GROUP_MEMBER(struct ndr_print *ndr, const char *name, const struct netr_DELTA_GROUP_MEMBER *r);
-void ndr_print_netr_DELTA_ALIAS(struct ndr_print *ndr, const char *name, const struct netr_DELTA_ALIAS *r);
-void ndr_print_netr_DELTA_ALIAS_MEMBER(struct ndr_print *ndr, const char *name, const struct netr_DELTA_ALIAS_MEMBER *r);
-void ndr_print_netr_QUOTA_LIMITS(struct ndr_print *ndr, const char *name, const struct netr_QUOTA_LIMITS *r);
-void ndr_print_netr_DELTA_POLICY(struct ndr_print *ndr, const char *name, const struct netr_DELTA_POLICY *r);
-void ndr_print_netr_DELTA_TRUSTED_DOMAIN(struct ndr_print *ndr, const char *name, const struct netr_DELTA_TRUSTED_DOMAIN *r);
-void ndr_print_netr_DELTA_DELETE_TRUST(struct ndr_print *ndr, const char *name, const struct netr_DELTA_DELETE_TRUST *r);
-void ndr_print_netr_DELTA_ACCOUNT(struct ndr_print *ndr, const char *name, const struct netr_DELTA_ACCOUNT *r);
-void ndr_print_netr_DELTA_DELETE_ACCOUNT(struct ndr_print *ndr, const char *name, const struct netr_DELTA_DELETE_ACCOUNT *r);
-void ndr_print_netr_DELTA_DELETE_SECRET(struct ndr_print *ndr, const char *name, const struct netr_DELTA_DELETE_SECRET *r);
-void ndr_print_netr_CIPHER_VALUE(struct ndr_print *ndr, const char *name, const struct netr_CIPHER_VALUE *r);
-void ndr_print_netr_DELTA_SECRET(struct ndr_print *ndr, const char *name, const struct netr_DELTA_SECRET *r);
-void ndr_print_netr_DeltaEnum(struct ndr_print *ndr, const char *name, enum netr_DeltaEnum r);
-void ndr_print_netr_DELTA_UNION(struct ndr_print *ndr, const char *name, const union netr_DELTA_UNION *r);
-void ndr_print_netr_DELTA_ID_UNION(struct ndr_print *ndr, const char *name, const union netr_DELTA_ID_UNION *r);
-void ndr_print_netr_DELTA_ENUM(struct ndr_print *ndr, const char *name, const struct netr_DELTA_ENUM *r);
-void ndr_print_netr_DELTA_ENUM_ARRAY(struct ndr_print *ndr, const char *name, const struct netr_DELTA_ENUM_ARRAY *r);
-void ndr_print_netr_UAS_INFO_0(struct ndr_print *ndr, const char *name, const struct netr_UAS_INFO_0 *r);
-void ndr_print_netr_AccountBuffer(struct ndr_print *ndr, const char *name, const struct netr_AccountBuffer *r);
-void ndr_print_netr_InfoFlags(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_netr_NETLOGON_INFO_1(struct ndr_print *ndr, const char *name, const struct netr_NETLOGON_INFO_1 *r);
-void ndr_print_netr_NETLOGON_INFO_2(struct ndr_print *ndr, const char *name, const struct netr_NETLOGON_INFO_2 *r);
-void ndr_print_netr_NETLOGON_INFO_3(struct ndr_print *ndr, const char *name, const struct netr_NETLOGON_INFO_3 *r);
-void ndr_print_netr_CONTROL_QUERY_INFORMATION(struct ndr_print *ndr, const char *name, const union netr_CONTROL_QUERY_INFORMATION *r);
-void ndr_print_netr_LogonControlCode(struct ndr_print *ndr, const char *name, enum netr_LogonControlCode r);
-void ndr_print_netr_CONTROL_DATA_INFORMATION(struct ndr_print *ndr, const char *name, const union netr_CONTROL_DATA_INFORMATION *r);
-void ndr_print_netr_NegotiateFlags(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_netr_Blob(struct ndr_print *ndr, const char *name, const struct netr_Blob *r);
-void ndr_print_netr_DsRGetDCName_flags(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_netr_DsRGetDCNameInfo_AddressType(struct ndr_print *ndr, const char *name, enum netr_DsRGetDCNameInfo_AddressType r);
-void ndr_print_netr_DsR_DcFlags(struct ndr_print *ndr, const char *name, uint32_t r);
-enum ndr_err_code ndr_push_netr_DsRGetDCNameInfo(struct ndr_push *ndr, int ndr_flags, const struct netr_DsRGetDCNameInfo *r);
-enum ndr_err_code ndr_pull_netr_DsRGetDCNameInfo(struct ndr_pull *ndr, int ndr_flags, struct netr_DsRGetDCNameInfo *r);
-void ndr_print_netr_DsRGetDCNameInfo(struct ndr_print *ndr, const char *name, const struct netr_DsRGetDCNameInfo *r);
-void ndr_print_netr_BinaryString(struct ndr_print *ndr, const char *name, const struct netr_BinaryString *r);
-void ndr_print_netr_DomainQuery1(struct ndr_print *ndr, const char *name, const struct netr_DomainQuery1 *r);
-void ndr_print_netr_DomainQuery(struct ndr_print *ndr, const char *name, const union netr_DomainQuery *r);
-void ndr_print_netr_DomainTrustInfo(struct ndr_print *ndr, const char *name, const struct netr_DomainTrustInfo *r);
-void ndr_print_netr_DomainInfo1(struct ndr_print *ndr, const char *name, const struct netr_DomainInfo1 *r);
-void ndr_print_netr_DomainInfo(struct ndr_print *ndr, const char *name, const union netr_DomainInfo *r);
-void ndr_print_netr_CryptPassword(struct ndr_print *ndr, const char *name, const struct netr_CryptPassword *r);
-void ndr_print_netr_DsRAddressToSitenamesWCtr(struct ndr_print *ndr, const char *name, const struct netr_DsRAddressToSitenamesWCtr *r);
-void ndr_print_netr_DsRAddress(struct ndr_print *ndr, const char *name, const struct netr_DsRAddress *r);
-void ndr_print_netr_TrustFlags(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_netr_TrustType(struct ndr_print *ndr, const char *name, enum netr_TrustType r);
-void ndr_print_netr_TrustAttributes(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_netr_DomainTrust(struct ndr_print *ndr, const char *name, const struct netr_DomainTrust *r);
-void ndr_print_netr_DomainTrustList(struct ndr_print *ndr, const char *name, const struct netr_DomainTrustList *r);
-void ndr_print_netr_DsRAddressToSitenamesExWCtr(struct ndr_print *ndr, const char *name, const struct netr_DsRAddressToSitenamesExWCtr *r);
-void ndr_print_DcSitesCtr(struct ndr_print *ndr, const char *name, const struct DcSitesCtr *r);
-void ndr_print_netr_LogonUasLogon(struct ndr_print *ndr, const char *name, int flags, const struct netr_LogonUasLogon *r);
-void ndr_print_netr_LogonUasLogoff(struct ndr_print *ndr, const char *name, int flags, const struct netr_LogonUasLogoff *r);
-void ndr_print_netr_LogonSamLogon(struct ndr_print *ndr, const char *name, int flags, const struct netr_LogonSamLogon *r);
-void ndr_print_netr_LogonSamLogoff(struct ndr_print *ndr, const char *name, int flags, const struct netr_LogonSamLogoff *r);
-void ndr_print_netr_ServerReqChallenge(struct ndr_print *ndr, const char *name, int flags, const struct netr_ServerReqChallenge *r);
-void ndr_print_netr_ServerAuthenticate(struct ndr_print *ndr, const char *name, int flags, const struct netr_ServerAuthenticate *r);
-void ndr_print_netr_ServerPasswordSet(struct ndr_print *ndr, const char *name, int flags, const struct netr_ServerPasswordSet *r);
-void ndr_print_netr_DatabaseDeltas(struct ndr_print *ndr, const char *name, int flags, const struct netr_DatabaseDeltas *r);
-void ndr_print_netr_DatabaseSync(struct ndr_print *ndr, const char *name, int flags, const struct netr_DatabaseSync *r);
-void ndr_print_netr_AccountDeltas(struct ndr_print *ndr, const char *name, int flags, const struct netr_AccountDeltas *r);
-void ndr_print_netr_AccountSync(struct ndr_print *ndr, const char *name, int flags, const struct netr_AccountSync *r);
-void ndr_print_netr_GetDcName(struct ndr_print *ndr, const char *name, int flags, const struct netr_GetDcName *r);
-void ndr_print_netr_LogonControl(struct ndr_print *ndr, const char *name, int flags, const struct netr_LogonControl *r);
-void ndr_print_netr_GetAnyDCName(struct ndr_print *ndr, const char *name, int flags, const struct netr_GetAnyDCName *r);
-void ndr_print_netr_LogonControl2(struct ndr_print *ndr, const char *name, int flags, const struct netr_LogonControl2 *r);
-void ndr_print_netr_ServerAuthenticate2(struct ndr_print *ndr, const char *name, int flags, const struct netr_ServerAuthenticate2 *r);
-void ndr_print_netr_DatabaseSync2(struct ndr_print *ndr, const char *name, int flags, const struct netr_DatabaseSync2 *r);
-void ndr_print_netr_DatabaseRedo(struct ndr_print *ndr, const char *name, int flags, const struct netr_DatabaseRedo *r);
-void ndr_print_netr_LogonControl2Ex(struct ndr_print *ndr, const char *name, int flags, const struct netr_LogonControl2Ex *r);
-void ndr_print_netr_NetrEnumerateTrustedDomains(struct ndr_print *ndr, const char *name, int flags, const struct netr_NetrEnumerateTrustedDomains *r);
-void ndr_print_netr_DsRGetDCName(struct ndr_print *ndr, const char *name, int flags, const struct netr_DsRGetDCName *r);
-void ndr_print_netr_NETRLOGONDUMMYROUTINE1(struct ndr_print *ndr, const char *name, int flags, const struct netr_NETRLOGONDUMMYROUTINE1 *r);
-void ndr_print_netr_NETRLOGONSETSERVICEBITS(struct ndr_print *ndr, const char *name, int flags, const struct netr_NETRLOGONSETSERVICEBITS *r);
-void ndr_print_netr_LogonGetTrustRid(struct ndr_print *ndr, const char *name, int flags, const struct netr_LogonGetTrustRid *r);
-void ndr_print_netr_NETRLOGONCOMPUTESERVERDIGEST(struct ndr_print *ndr, const char *name, int flags, const struct netr_NETRLOGONCOMPUTESERVERDIGEST *r);
-void ndr_print_netr_NETRLOGONCOMPUTECLIENTDIGEST(struct ndr_print *ndr, const char *name, int flags, const struct netr_NETRLOGONCOMPUTECLIENTDIGEST *r);
-void ndr_print_netr_ServerAuthenticate3(struct ndr_print *ndr, const char *name, int flags, const struct netr_ServerAuthenticate3 *r);
-void ndr_print_netr_DsRGetDCNameEx(struct ndr_print *ndr, const char *name, int flags, const struct netr_DsRGetDCNameEx *r);
-void ndr_print_netr_DsRGetSiteName(struct ndr_print *ndr, const char *name, int flags, const struct netr_DsRGetSiteName *r);
-void ndr_print_netr_LogonGetDomainInfo(struct ndr_print *ndr, const char *name, int flags, const struct netr_LogonGetDomainInfo *r);
-void ndr_print_netr_ServerPasswordSet2(struct ndr_print *ndr, const char *name, int flags, const struct netr_ServerPasswordSet2 *r);
-void ndr_print_netr_ServerPasswordGet(struct ndr_print *ndr, const char *name, int flags, const struct netr_ServerPasswordGet *r);
-void ndr_print_netr_NETRLOGONSENDTOSAM(struct ndr_print *ndr, const char *name, int flags, const struct netr_NETRLOGONSENDTOSAM *r);
-void ndr_print_netr_DsRAddressToSitenamesW(struct ndr_print *ndr, const char *name, int flags, const struct netr_DsRAddressToSitenamesW *r);
-void ndr_print_netr_DsRGetDCNameEx2(struct ndr_print *ndr, const char *name, int flags, const struct netr_DsRGetDCNameEx2 *r);
-void ndr_print_netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN(struct ndr_print *ndr, const char *name, int flags, const struct netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN *r);
-void ndr_print_netr_NetrEnumerateTrustedDomainsEx(struct ndr_print *ndr, const char *name, int flags, const struct netr_NetrEnumerateTrustedDomainsEx *r);
-void ndr_print_netr_DsRAddressToSitenamesExW(struct ndr_print *ndr, const char *name, int flags, const struct netr_DsRAddressToSitenamesExW *r);
-void ndr_print_netr_DsrGetDcSiteCoverageW(struct ndr_print *ndr, const char *name, int flags, const struct netr_DsrGetDcSiteCoverageW *r);
-void ndr_print_netr_LogonSamLogonEx(struct ndr_print *ndr, const char *name, int flags, const struct netr_LogonSamLogonEx *r);
-void ndr_print_netr_DsrEnumerateDomainTrusts(struct ndr_print *ndr, const char *name, int flags, const struct netr_DsrEnumerateDomainTrusts *r);
-void ndr_print_netr_DsrDeregisterDNSHostRecords(struct ndr_print *ndr, const char *name, int flags, const struct netr_DsrDeregisterDNSHostRecords *r);
-void ndr_print_netr_ServerTrustPasswordsGet(struct ndr_print *ndr, const char *name, int flags, const struct netr_ServerTrustPasswordsGet *r);
-void ndr_print_netr_DsRGetForestTrustInformation(struct ndr_print *ndr, const char *name, int flags, const struct netr_DsRGetForestTrustInformation *r);
-void ndr_print_netr_GetForestTrustInformation(struct ndr_print *ndr, const char *name, int flags, const struct netr_GetForestTrustInformation *r);
-void ndr_print_netr_LogonSamLogonWithFlags(struct ndr_print *ndr, const char *name, int flags, const struct netr_LogonSamLogonWithFlags *r);
-void ndr_print_netr_NETRSERVERGETTRUSTINFO(struct ndr_print *ndr, const char *name, int flags, const struct netr_NETRSERVERGETTRUSTINFO *r);
-#endif /* _HEADER_NDR_netlogon */

Modified: branches/samba/upstream/source/librpc/gen_ndr/ndr_notify.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_notify.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_notify.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,7 +3,7 @@
 #include "includes.h"
 #include "librpc/gen_ndr/ndr_notify.h"
 
-_PUBLIC_ enum ndr_err_code ndr_push_notify_entry(struct ndr_push *ndr, int ndr_flags, const struct notify_entry *r)
+_PUBLIC_ NTSTATUS ndr_push_notify_entry(struct ndr_push *ndr, int ndr_flags, const struct notify_entry *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 8));
@@ -22,10 +22,10 @@
 	if (ndr_flags & NDR_BUFFERS) {
 		NDR_CHECK(ndr_push_server_id(ndr, NDR_BUFFERS, &r->server));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ enum ndr_err_code ndr_pull_notify_entry(struct ndr_pull *ndr, int ndr_flags, struct notify_entry *r)
+_PUBLIC_ NTSTATUS ndr_pull_notify_entry(struct ndr_pull *ndr, int ndr_flags, struct notify_entry *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_align(ndr, 8));
@@ -44,7 +44,7 @@
 	if (ndr_flags & NDR_BUFFERS) {
 		NDR_CHECK(ndr_pull_server_id(ndr, NDR_BUFFERS, &r->server));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_notify_entry(struct ndr_print *ndr, const char *name, const struct notify_entry *r)
@@ -60,7 +60,7 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_notify_depth(struct ndr_push *ndr, int ndr_flags, const struct notify_depth *r)
+NTSTATUS ndr_push_notify_depth(struct ndr_push *ndr, int ndr_flags, const struct notify_depth *r)
 {
 	uint32_t cntr_entries_0;
 	if (ndr_flags & NDR_SCALARS) {
@@ -77,10 +77,10 @@
 			NDR_CHECK(ndr_push_notify_entry(ndr, NDR_BUFFERS, &r->entries[cntr_entries_0]));
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_notify_depth(struct ndr_pull *ndr, int ndr_flags, struct notify_depth *r)
+NTSTATUS ndr_pull_notify_depth(struct ndr_pull *ndr, int ndr_flags, struct notify_depth *r)
 {
 	uint32_t cntr_entries_0;
 	TALLOC_CTX *_mem_save_entries_0;
@@ -105,7 +105,7 @@
 		}
 		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entries_0, 0);
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_notify_depth(struct ndr_print *ndr, const char *name, const struct notify_depth *r)
@@ -120,7 +120,8 @@
 	ndr->depth++;
 	for (cntr_entries_0=0;cntr_entries_0<r->num_entries;cntr_entries_0++) {
 		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_entries_0) != -1) {
+		asprintf(&idx_0, "[%d]", cntr_entries_0);
+		if (idx_0) {
 			ndr_print_notify_entry(ndr, "entries", &r->entries[cntr_entries_0]);
 			free(idx_0);
 		}
@@ -129,7 +130,7 @@
 	ndr->depth--;
 }
 
-_PUBLIC_ enum ndr_err_code ndr_push_notify_array(struct ndr_push *ndr, int ndr_flags, const struct notify_array *r)
+_PUBLIC_ NTSTATUS ndr_push_notify_array(struct ndr_push *ndr, int ndr_flags, const struct notify_array *r)
 {
 	uint32_t cntr_depth_0;
 	if (ndr_flags & NDR_SCALARS) {
@@ -144,10 +145,10 @@
 			NDR_CHECK(ndr_push_notify_depth(ndr, NDR_BUFFERS, &r->depth[cntr_depth_0]));
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ enum ndr_err_code ndr_pull_notify_array(struct ndr_pull *ndr, int ndr_flags, struct notify_array *r)
+_PUBLIC_ NTSTATUS ndr_pull_notify_array(struct ndr_pull *ndr, int ndr_flags, struct notify_array *r)
 {
 	uint32_t cntr_depth_0;
 	TALLOC_CTX *_mem_save_depth_0;
@@ -170,7 +171,7 @@
 		}
 		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_depth_0, 0);
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_notify_array(struct ndr_print *ndr, const char *name, const struct notify_array *r)
@@ -183,7 +184,8 @@
 	ndr->depth++;
 	for (cntr_depth_0=0;cntr_depth_0<r->num_depths;cntr_depth_0++) {
 		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_depth_0) != -1) {
+		asprintf(&idx_0, "[%d]", cntr_depth_0);
+		if (idx_0) {
 			ndr_print_notify_depth(ndr, "depth", &r->depth[cntr_depth_0]);
 			free(idx_0);
 		}
@@ -192,7 +194,7 @@
 	ndr->depth--;
 }
 
-_PUBLIC_ enum ndr_err_code ndr_push_notify_event(struct ndr_push *ndr, int ndr_flags, const struct notify_event *r)
+_PUBLIC_ NTSTATUS ndr_push_notify_event(struct ndr_push *ndr, int ndr_flags, const struct notify_event *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 8));
@@ -207,10 +209,10 @@
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ enum ndr_err_code ndr_pull_notify_event(struct ndr_pull *ndr, int ndr_flags, struct notify_event *r)
+_PUBLIC_ NTSTATUS ndr_pull_notify_event(struct ndr_pull *ndr, int ndr_flags, struct notify_event *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_align(ndr, 8));
@@ -225,7 +227,7 @@
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_notify_event(struct ndr_print *ndr, const char *name, const struct notify_event *r)

Modified: branches/samba/upstream/source/librpc/gen_ndr/ndr_notify.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_notify.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_notify.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,20 +1,20 @@
 /* header auto-generated by pidl */
 
-#include "librpc/ndr/libndr.h"
 #include "librpc/gen_ndr/notify.h"
 
 #ifndef _HEADER_NDR_notify
 #define _HEADER_NDR_notify
 
-#define NDR_NOTIFY_CALL_COUNT (0)
-enum ndr_err_code ndr_push_notify_entry(struct ndr_push *ndr, int ndr_flags, const struct notify_entry *r);
-enum ndr_err_code ndr_pull_notify_entry(struct ndr_pull *ndr, int ndr_flags, struct notify_entry *r);
+#include "librpc/ndr/libndr.h"
+#define DCERPC_NOTIFY_CALL_COUNT (0)
+NTSTATUS ndr_push_notify_entry(struct ndr_push *ndr, int ndr_flags, const struct notify_entry *r);
+NTSTATUS ndr_pull_notify_entry(struct ndr_pull *ndr, int ndr_flags, struct notify_entry *r);
 void ndr_print_notify_entry(struct ndr_print *ndr, const char *name, const struct notify_entry *r);
 void ndr_print_notify_depth(struct ndr_print *ndr, const char *name, const struct notify_depth *r);
-enum ndr_err_code ndr_push_notify_array(struct ndr_push *ndr, int ndr_flags, const struct notify_array *r);
-enum ndr_err_code ndr_pull_notify_array(struct ndr_pull *ndr, int ndr_flags, struct notify_array *r);
+NTSTATUS ndr_push_notify_array(struct ndr_push *ndr, int ndr_flags, const struct notify_array *r);
+NTSTATUS ndr_pull_notify_array(struct ndr_pull *ndr, int ndr_flags, struct notify_array *r);
 void ndr_print_notify_array(struct ndr_print *ndr, const char *name, const struct notify_array *r);
-enum ndr_err_code ndr_push_notify_event(struct ndr_push *ndr, int ndr_flags, const struct notify_event *r);
-enum ndr_err_code ndr_pull_notify_event(struct ndr_pull *ndr, int ndr_flags, struct notify_event *r);
+NTSTATUS ndr_push_notify_event(struct ndr_push *ndr, int ndr_flags, const struct notify_event *r);
+NTSTATUS ndr_pull_notify_event(struct ndr_pull *ndr, int ndr_flags, struct notify_event *r);
 void ndr_print_notify_event(struct ndr_print *ndr, const char *name, const struct notify_event *r);
 #endif /* _HEADER_NDR_notify */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_ntsvcs.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_ntsvcs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_ntsvcs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,3616 +0,0 @@
-/* parser auto-generated by pidl */
-
-#include "includes.h"
-#include "librpc/gen_ndr/ndr_ntsvcs.h"
-
-static enum ndr_err_code ndr_push_PNP_HwProfInfo(struct ndr_push *ndr, int ndr_flags, const struct PNP_HwProfInfo *r)
-{
-	uint32_t cntr_unknown2_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown1));
-		for (cntr_unknown2_0 = 0; cntr_unknown2_0 < 160; cntr_unknown2_0++) {
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->unknown2[cntr_unknown2_0]));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown3));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_HwProfInfo(struct ndr_pull *ndr, int ndr_flags, struct PNP_HwProfInfo *r)
-{
-	uint32_t cntr_unknown2_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown1));
-		for (cntr_unknown2_0 = 0; cntr_unknown2_0 < 160; cntr_unknown2_0++) {
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->unknown2[cntr_unknown2_0]));
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown3));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_HwProfInfo(struct ndr_print *ndr, const char *name, const struct PNP_HwProfInfo *r)
-{
-	uint32_t cntr_unknown2_0;
-	ndr_print_struct(ndr, name, "PNP_HwProfInfo");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "unknown1", r->unknown1);
-	ndr->print(ndr, "%s: ARRAY(%d)", "unknown2", 160);
-	ndr->depth++;
-	for (cntr_unknown2_0=0;cntr_unknown2_0<160;cntr_unknown2_0++) {
-		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_unknown2_0) != -1) {
-			ndr_print_uint16(ndr, "unknown2", r->unknown2[cntr_unknown2_0]);
-			free(idx_0);
-		}
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "unknown3", r->unknown3);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_Disconnect(struct ndr_push *ndr, int flags, const struct PNP_Disconnect *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_Disconnect(struct ndr_pull *ndr, int flags, struct PNP_Disconnect *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_Disconnect(struct ndr_print *ndr, const char *name, int flags, const struct PNP_Disconnect *r)
-{
-	ndr_print_struct(ndr, name, "PNP_Disconnect");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_Disconnect");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_Disconnect");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_Connect(struct ndr_push *ndr, int flags, const struct PNP_Connect *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_Connect(struct ndr_pull *ndr, int flags, struct PNP_Connect *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_Connect(struct ndr_print *ndr, const char *name, int flags, const struct PNP_Connect *r)
-{
-	ndr_print_struct(ndr, name, "PNP_Connect");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_Connect");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_Connect");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetVersion(struct ndr_push *ndr, int flags, const struct PNP_GetVersion *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.version == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, *r->out.version));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetVersion(struct ndr_pull *ndr, int flags, struct PNP_GetVersion *r)
-{
-	TALLOC_CTX *_mem_save_version_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_PULL_ALLOC(ndr, r->out.version);
-		ZERO_STRUCTP(r->out.version);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.version);
-		}
-		_mem_save_version_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.version, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, r->out.version));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_version_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetVersion(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetVersion *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetVersion");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetVersion");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetVersion");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "version", r->out.version);
-		ndr->depth++;
-		ndr_print_uint16(ndr, "version", *r->out.version);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetGlobalState(struct ndr_push *ndr, int flags, const struct PNP_GetGlobalState *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetGlobalState(struct ndr_pull *ndr, int flags, struct PNP_GetGlobalState *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetGlobalState(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetGlobalState *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetGlobalState");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetGlobalState");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetGlobalState");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_InitDetection(struct ndr_push *ndr, int flags, const struct PNP_InitDetection *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_InitDetection(struct ndr_pull *ndr, int flags, struct PNP_InitDetection *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_InitDetection(struct ndr_print *ndr, const char *name, int flags, const struct PNP_InitDetection *r)
-{
-	ndr_print_struct(ndr, name, "PNP_InitDetection");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_InitDetection");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_InitDetection");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_ReportLogOn(struct ndr_push *ndr, int flags, const struct PNP_ReportLogOn *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_ReportLogOn(struct ndr_pull *ndr, int flags, struct PNP_ReportLogOn *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_ReportLogOn(struct ndr_print *ndr, const char *name, int flags, const struct PNP_ReportLogOn *r)
-{
-	ndr_print_struct(ndr, name, "PNP_ReportLogOn");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_ReportLogOn");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_ReportLogOn");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_ValidateDeviceInstance(struct ndr_push *ndr, int flags, const struct PNP_ValidateDeviceInstance *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.devicepath == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.devicepath, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.devicepath, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.devicepath, ndr_charset_length(r->in.devicepath, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_ValidateDeviceInstance(struct ndr_pull *ndr, int flags, struct PNP_ValidateDeviceInstance *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.devicepath));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.devicepath));
-		if (ndr_get_array_length(ndr, &r->in.devicepath) > ndr_get_array_size(ndr, &r->in.devicepath)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.devicepath), ndr_get_array_length(ndr, &r->in.devicepath));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.devicepath), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.devicepath, ndr_get_array_length(ndr, &r->in.devicepath), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_ValidateDeviceInstance(struct ndr_print *ndr, const char *name, int flags, const struct PNP_ValidateDeviceInstance *r)
-{
-	ndr_print_struct(ndr, name, "PNP_ValidateDeviceInstance");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_ValidateDeviceInstance");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "devicepath", r->in.devicepath);
-		ndr->depth++;
-		ndr_print_string(ndr, "devicepath", r->in.devicepath);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "flags", r->in.flags);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_ValidateDeviceInstance");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetRootDeviceInstance(struct ndr_push *ndr, int flags, const struct PNP_GetRootDeviceInstance *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetRootDeviceInstance(struct ndr_pull *ndr, int flags, struct PNP_GetRootDeviceInstance *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetRootDeviceInstance(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetRootDeviceInstance *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetRootDeviceInstance");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetRootDeviceInstance");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetRootDeviceInstance");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetRelatedDeviceInstance(struct ndr_push *ndr, int flags, const struct PNP_GetRelatedDeviceInstance *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetRelatedDeviceInstance(struct ndr_pull *ndr, int flags, struct PNP_GetRelatedDeviceInstance *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetRelatedDeviceInstance(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetRelatedDeviceInstance *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetRelatedDeviceInstance");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetRelatedDeviceInstance");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetRelatedDeviceInstance");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_EnumerateSubKeys(struct ndr_push *ndr, int flags, const struct PNP_EnumerateSubKeys *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_EnumerateSubKeys(struct ndr_pull *ndr, int flags, struct PNP_EnumerateSubKeys *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_EnumerateSubKeys(struct ndr_print *ndr, const char *name, int flags, const struct PNP_EnumerateSubKeys *r)
-{
-	ndr_print_struct(ndr, name, "PNP_EnumerateSubKeys");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_EnumerateSubKeys");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_EnumerateSubKeys");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetDeviceList(struct ndr_push *ndr, int flags, const struct PNP_GetDeviceList *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetDeviceList(struct ndr_pull *ndr, int flags, struct PNP_GetDeviceList *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetDeviceList(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetDeviceList *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetDeviceList");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetDeviceList");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetDeviceList");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetDeviceListSize(struct ndr_push *ndr, int flags, const struct PNP_GetDeviceListSize *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.devicename));
-		if (r->in.devicename) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.devicename, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.devicename, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.devicename, ndr_charset_length(r->in.devicename, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.size == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.size));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetDeviceListSize(struct ndr_pull *ndr, int flags, struct PNP_GetDeviceListSize *r)
-{
-	uint32_t _ptr_devicename;
-	TALLOC_CTX *_mem_save_devicename_0;
-	TALLOC_CTX *_mem_save_size_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_devicename));
-		if (_ptr_devicename) {
-			NDR_PULL_ALLOC(ndr, r->in.devicename);
-		} else {
-			r->in.devicename = NULL;
-		}
-		if (r->in.devicename) {
-			_mem_save_devicename_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.devicename, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.devicename));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.devicename));
-			if (ndr_get_array_length(ndr, &r->in.devicename) > ndr_get_array_size(ndr, &r->in.devicename)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.devicename), ndr_get_array_length(ndr, &r->in.devicename));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.devicename), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.devicename, ndr_get_array_length(ndr, &r->in.devicename), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_devicename_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.flags));
-		NDR_PULL_ALLOC(ndr, r->out.size);
-		ZERO_STRUCTP(r->out.size);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.size);
-		}
-		_mem_save_size_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.size, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.size));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_size_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetDeviceListSize(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetDeviceListSize *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetDeviceListSize");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetDeviceListSize");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "devicename", r->in.devicename);
-		ndr->depth++;
-		if (r->in.devicename) {
-			ndr_print_string(ndr, "devicename", r->in.devicename);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "flags", r->in.flags);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetDeviceListSize");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "size", r->out.size);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "size", *r->out.size);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetDepth(struct ndr_push *ndr, int flags, const struct PNP_GetDepth *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetDepth(struct ndr_pull *ndr, int flags, struct PNP_GetDepth *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetDepth(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetDepth *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetDepth");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetDepth");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetDepth");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetDeviceRegProp(struct ndr_push *ndr, int flags, const struct PNP_GetDeviceRegProp *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetDeviceRegProp(struct ndr_pull *ndr, int flags, struct PNP_GetDeviceRegProp *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetDeviceRegProp(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetDeviceRegProp *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetDeviceRegProp");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetDeviceRegProp");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetDeviceRegProp");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_SetDeviceRegProp(struct ndr_push *ndr, int flags, const struct PNP_SetDeviceRegProp *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_SetDeviceRegProp(struct ndr_pull *ndr, int flags, struct PNP_SetDeviceRegProp *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_SetDeviceRegProp(struct ndr_print *ndr, const char *name, int flags, const struct PNP_SetDeviceRegProp *r)
-{
-	ndr_print_struct(ndr, name, "PNP_SetDeviceRegProp");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_SetDeviceRegProp");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_SetDeviceRegProp");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetClassInstance(struct ndr_push *ndr, int flags, const struct PNP_GetClassInstance *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetClassInstance(struct ndr_pull *ndr, int flags, struct PNP_GetClassInstance *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetClassInstance(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetClassInstance *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetClassInstance");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetClassInstance");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetClassInstance");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_CreateKey(struct ndr_push *ndr, int flags, const struct PNP_CreateKey *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_CreateKey(struct ndr_pull *ndr, int flags, struct PNP_CreateKey *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_CreateKey(struct ndr_print *ndr, const char *name, int flags, const struct PNP_CreateKey *r)
-{
-	ndr_print_struct(ndr, name, "PNP_CreateKey");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_CreateKey");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_CreateKey");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_DeleteRegistryKey(struct ndr_push *ndr, int flags, const struct PNP_DeleteRegistryKey *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_DeleteRegistryKey(struct ndr_pull *ndr, int flags, struct PNP_DeleteRegistryKey *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_DeleteRegistryKey(struct ndr_print *ndr, const char *name, int flags, const struct PNP_DeleteRegistryKey *r)
-{
-	ndr_print_struct(ndr, name, "PNP_DeleteRegistryKey");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_DeleteRegistryKey");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_DeleteRegistryKey");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetClassCount(struct ndr_push *ndr, int flags, const struct PNP_GetClassCount *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetClassCount(struct ndr_pull *ndr, int flags, struct PNP_GetClassCount *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetClassCount(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetClassCount *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetClassCount");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetClassCount");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetClassCount");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetClassName(struct ndr_push *ndr, int flags, const struct PNP_GetClassName *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetClassName(struct ndr_pull *ndr, int flags, struct PNP_GetClassName *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetClassName(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetClassName *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetClassName");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetClassName");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetClassName");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_DeleteClassKey(struct ndr_push *ndr, int flags, const struct PNP_DeleteClassKey *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_DeleteClassKey(struct ndr_pull *ndr, int flags, struct PNP_DeleteClassKey *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_DeleteClassKey(struct ndr_print *ndr, const char *name, int flags, const struct PNP_DeleteClassKey *r)
-{
-	ndr_print_struct(ndr, name, "PNP_DeleteClassKey");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_DeleteClassKey");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_DeleteClassKey");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetInterfaceDeviceAlias(struct ndr_push *ndr, int flags, const struct PNP_GetInterfaceDeviceAlias *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetInterfaceDeviceAlias(struct ndr_pull *ndr, int flags, struct PNP_GetInterfaceDeviceAlias *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetInterfaceDeviceAlias(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetInterfaceDeviceAlias *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetInterfaceDeviceAlias");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetInterfaceDeviceAlias");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetInterfaceDeviceAlias");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetInterfaceDeviceList(struct ndr_push *ndr, int flags, const struct PNP_GetInterfaceDeviceList *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetInterfaceDeviceList(struct ndr_pull *ndr, int flags, struct PNP_GetInterfaceDeviceList *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetInterfaceDeviceList(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetInterfaceDeviceList *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetInterfaceDeviceList");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetInterfaceDeviceList");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetInterfaceDeviceList");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetInterfaceDeviceListSize(struct ndr_push *ndr, int flags, const struct PNP_GetInterfaceDeviceListSize *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetInterfaceDeviceListSize(struct ndr_pull *ndr, int flags, struct PNP_GetInterfaceDeviceListSize *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetInterfaceDeviceListSize(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetInterfaceDeviceListSize *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetInterfaceDeviceListSize");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetInterfaceDeviceListSize");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetInterfaceDeviceListSize");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_RegisterDeviceClassAssociation(struct ndr_push *ndr, int flags, const struct PNP_RegisterDeviceClassAssociation *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_RegisterDeviceClassAssociation(struct ndr_pull *ndr, int flags, struct PNP_RegisterDeviceClassAssociation *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_RegisterDeviceClassAssociation(struct ndr_print *ndr, const char *name, int flags, const struct PNP_RegisterDeviceClassAssociation *r)
-{
-	ndr_print_struct(ndr, name, "PNP_RegisterDeviceClassAssociation");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_RegisterDeviceClassAssociation");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_RegisterDeviceClassAssociation");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_UnregisterDeviceClassAssociation(struct ndr_push *ndr, int flags, const struct PNP_UnregisterDeviceClassAssociation *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_UnregisterDeviceClassAssociation(struct ndr_pull *ndr, int flags, struct PNP_UnregisterDeviceClassAssociation *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_UnregisterDeviceClassAssociation(struct ndr_print *ndr, const char *name, int flags, const struct PNP_UnregisterDeviceClassAssociation *r)
-{
-	ndr_print_struct(ndr, name, "PNP_UnregisterDeviceClassAssociation");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_UnregisterDeviceClassAssociation");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_UnregisterDeviceClassAssociation");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetClassRegProp(struct ndr_push *ndr, int flags, const struct PNP_GetClassRegProp *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetClassRegProp(struct ndr_pull *ndr, int flags, struct PNP_GetClassRegProp *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetClassRegProp(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetClassRegProp *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetClassRegProp");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetClassRegProp");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetClassRegProp");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_SetClassRegProp(struct ndr_push *ndr, int flags, const struct PNP_SetClassRegProp *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_SetClassRegProp(struct ndr_pull *ndr, int flags, struct PNP_SetClassRegProp *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_SetClassRegProp(struct ndr_print *ndr, const char *name, int flags, const struct PNP_SetClassRegProp *r)
-{
-	ndr_print_struct(ndr, name, "PNP_SetClassRegProp");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_SetClassRegProp");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_SetClassRegProp");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_CreateDevInst(struct ndr_push *ndr, int flags, const struct PNP_CreateDevInst *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_CreateDevInst(struct ndr_pull *ndr, int flags, struct PNP_CreateDevInst *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_CreateDevInst(struct ndr_print *ndr, const char *name, int flags, const struct PNP_CreateDevInst *r)
-{
-	ndr_print_struct(ndr, name, "PNP_CreateDevInst");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_CreateDevInst");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_CreateDevInst");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_DeviceInstanceAction(struct ndr_push *ndr, int flags, const struct PNP_DeviceInstanceAction *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_DeviceInstanceAction(struct ndr_pull *ndr, int flags, struct PNP_DeviceInstanceAction *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_DeviceInstanceAction(struct ndr_print *ndr, const char *name, int flags, const struct PNP_DeviceInstanceAction *r)
-{
-	ndr_print_struct(ndr, name, "PNP_DeviceInstanceAction");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_DeviceInstanceAction");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_DeviceInstanceAction");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetDeviceStatus(struct ndr_push *ndr, int flags, const struct PNP_GetDeviceStatus *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetDeviceStatus(struct ndr_pull *ndr, int flags, struct PNP_GetDeviceStatus *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetDeviceStatus(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetDeviceStatus *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetDeviceStatus");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetDeviceStatus");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetDeviceStatus");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_SetDeviceProblem(struct ndr_push *ndr, int flags, const struct PNP_SetDeviceProblem *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_SetDeviceProblem(struct ndr_pull *ndr, int flags, struct PNP_SetDeviceProblem *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_SetDeviceProblem(struct ndr_print *ndr, const char *name, int flags, const struct PNP_SetDeviceProblem *r)
-{
-	ndr_print_struct(ndr, name, "PNP_SetDeviceProblem");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_SetDeviceProblem");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_SetDeviceProblem");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_DisableDevInst(struct ndr_push *ndr, int flags, const struct PNP_DisableDevInst *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_DisableDevInst(struct ndr_pull *ndr, int flags, struct PNP_DisableDevInst *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_DisableDevInst(struct ndr_print *ndr, const char *name, int flags, const struct PNP_DisableDevInst *r)
-{
-	ndr_print_struct(ndr, name, "PNP_DisableDevInst");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_DisableDevInst");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_DisableDevInst");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_UninstallDevInst(struct ndr_push *ndr, int flags, const struct PNP_UninstallDevInst *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_UninstallDevInst(struct ndr_pull *ndr, int flags, struct PNP_UninstallDevInst *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_UninstallDevInst(struct ndr_print *ndr, const char *name, int flags, const struct PNP_UninstallDevInst *r)
-{
-	ndr_print_struct(ndr, name, "PNP_UninstallDevInst");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_UninstallDevInst");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_UninstallDevInst");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_AddID(struct ndr_push *ndr, int flags, const struct PNP_AddID *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_AddID(struct ndr_pull *ndr, int flags, struct PNP_AddID *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_AddID(struct ndr_print *ndr, const char *name, int flags, const struct PNP_AddID *r)
-{
-	ndr_print_struct(ndr, name, "PNP_AddID");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_AddID");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_AddID");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_RegisterDriver(struct ndr_push *ndr, int flags, const struct PNP_RegisterDriver *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_RegisterDriver(struct ndr_pull *ndr, int flags, struct PNP_RegisterDriver *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_RegisterDriver(struct ndr_print *ndr, const char *name, int flags, const struct PNP_RegisterDriver *r)
-{
-	ndr_print_struct(ndr, name, "PNP_RegisterDriver");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_RegisterDriver");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_RegisterDriver");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_QueryRemove(struct ndr_push *ndr, int flags, const struct PNP_QueryRemove *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_QueryRemove(struct ndr_pull *ndr, int flags, struct PNP_QueryRemove *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_QueryRemove(struct ndr_print *ndr, const char *name, int flags, const struct PNP_QueryRemove *r)
-{
-	ndr_print_struct(ndr, name, "PNP_QueryRemove");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_QueryRemove");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_QueryRemove");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_RequestDeviceEject(struct ndr_push *ndr, int flags, const struct PNP_RequestDeviceEject *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_RequestDeviceEject(struct ndr_pull *ndr, int flags, struct PNP_RequestDeviceEject *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_RequestDeviceEject(struct ndr_print *ndr, const char *name, int flags, const struct PNP_RequestDeviceEject *r)
-{
-	ndr_print_struct(ndr, name, "PNP_RequestDeviceEject");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_RequestDeviceEject");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_RequestDeviceEject");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_IsDockStationPresent(struct ndr_push *ndr, int flags, const struct PNP_IsDockStationPresent *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_IsDockStationPresent(struct ndr_pull *ndr, int flags, struct PNP_IsDockStationPresent *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_IsDockStationPresent(struct ndr_print *ndr, const char *name, int flags, const struct PNP_IsDockStationPresent *r)
-{
-	ndr_print_struct(ndr, name, "PNP_IsDockStationPresent");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_IsDockStationPresent");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_IsDockStationPresent");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_RequestEjectPC(struct ndr_push *ndr, int flags, const struct PNP_RequestEjectPC *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_RequestEjectPC(struct ndr_pull *ndr, int flags, struct PNP_RequestEjectPC *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_RequestEjectPC(struct ndr_print *ndr, const char *name, int flags, const struct PNP_RequestEjectPC *r)
-{
-	ndr_print_struct(ndr, name, "PNP_RequestEjectPC");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_RequestEjectPC");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_RequestEjectPC");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_HwProfFlags(struct ndr_push *ndr, int flags, const struct PNP_HwProfFlags *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown1));
-		if (r->in.devicepath == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.devicepath, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.devicepath, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.devicepath, ndr_charset_length(r->in.devicepath, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown2));
-		if (r->in.unknown3 == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.unknown3));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.unknown4));
-		if (r->in.unknown4) {
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, *r->in.unknown4));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.unknown5));
-		if (r->in.unknown5) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.unknown5, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.unknown5, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.unknown5, ndr_charset_length(r->in.unknown5, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown6));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown7));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.unknown3 == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.unknown3));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.unknown4));
-		if (r->out.unknown4) {
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, *r->out.unknown4));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.unknown5a));
-		if (r->out.unknown5a) {
-			NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.unknown5a));
-			if (*r->out.unknown5a) {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.unknown5a, CH_UTF16)));
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.unknown5a, CH_UTF16)));
-				NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, *r->out.unknown5a, ndr_charset_length(*r->out.unknown5a, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-			}
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_HwProfFlags(struct ndr_pull *ndr, int flags, struct PNP_HwProfFlags *r)
-{
-	uint32_t _ptr_unknown4;
-	uint32_t _ptr_unknown5;
-	uint32_t _ptr_unknown5a;
-	TALLOC_CTX *_mem_save_unknown3_0;
-	TALLOC_CTX *_mem_save_unknown4_0;
-	TALLOC_CTX *_mem_save_unknown5_0;
-	TALLOC_CTX *_mem_save_unknown5a_0;
-	TALLOC_CTX *_mem_save_unknown5a_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown1));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.devicepath));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.devicepath));
-		if (ndr_get_array_length(ndr, &r->in.devicepath) > ndr_get_array_size(ndr, &r->in.devicepath)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.devicepath), ndr_get_array_length(ndr, &r->in.devicepath));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.devicepath), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.devicepath, ndr_get_array_length(ndr, &r->in.devicepath), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown2));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.unknown3);
-		}
-		_mem_save_unknown3_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.unknown3, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.unknown3));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown3_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown4));
-		if (_ptr_unknown4) {
-			NDR_PULL_ALLOC(ndr, r->in.unknown4);
-		} else {
-			r->in.unknown4 = NULL;
-		}
-		if (r->in.unknown4) {
-			_mem_save_unknown4_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.unknown4, 0);
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, r->in.unknown4));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown4_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown5));
-		if (_ptr_unknown5) {
-			NDR_PULL_ALLOC(ndr, r->in.unknown5);
-		} else {
-			r->in.unknown5 = NULL;
-		}
-		if (r->in.unknown5) {
-			_mem_save_unknown5_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.unknown5, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.unknown5));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.unknown5));
-			if (ndr_get_array_length(ndr, &r->in.unknown5) > ndr_get_array_size(ndr, &r->in.unknown5)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.unknown5), ndr_get_array_length(ndr, &r->in.unknown5));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.unknown5), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.unknown5, ndr_get_array_length(ndr, &r->in.unknown5), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown5_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown6));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown7));
-		NDR_PULL_ALLOC(ndr, r->out.unknown3);
-		*r->out.unknown3 = *r->in.unknown3;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.unknown3);
-		}
-		_mem_save_unknown3_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.unknown3, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.unknown3));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown3_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown4));
-		if (_ptr_unknown4) {
-			NDR_PULL_ALLOC(ndr, r->out.unknown4);
-		} else {
-			r->out.unknown4 = NULL;
-		}
-		if (r->out.unknown4) {
-			_mem_save_unknown4_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.unknown4, 0);
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, r->out.unknown4));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown4_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown5a));
-		if (_ptr_unknown5a) {
-			NDR_PULL_ALLOC(ndr, r->out.unknown5a);
-		} else {
-			r->out.unknown5a = NULL;
-		}
-		if (r->out.unknown5a) {
-			_mem_save_unknown5a_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.unknown5a, 0);
-			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown5a));
-			if (_ptr_unknown5a) {
-				NDR_PULL_ALLOC(ndr, *r->out.unknown5a);
-			} else {
-				*r->out.unknown5a = NULL;
-			}
-			if (*r->out.unknown5a) {
-				_mem_save_unknown5a_1 = NDR_PULL_GET_MEM_CTX(ndr);
-				NDR_PULL_SET_MEM_CTX(ndr, *r->out.unknown5a, 0);
-				NDR_CHECK(ndr_pull_array_size(ndr, r->out.unknown5a));
-				NDR_CHECK(ndr_pull_array_length(ndr, r->out.unknown5a));
-				if (ndr_get_array_length(ndr, r->out.unknown5a) > ndr_get_array_size(ndr, r->out.unknown5a)) {
-					return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, r->out.unknown5a), ndr_get_array_length(ndr, r->out.unknown5a));
-				}
-				NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, r->out.unknown5a), sizeof(uint16_t)));
-				NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->out.unknown5a, ndr_get_array_length(ndr, r->out.unknown5a), sizeof(uint16_t), CH_UTF16));
-				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown5a_1, 0);
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown5a_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_HwProfFlags(struct ndr_print *ndr, const char *name, int flags, const struct PNP_HwProfFlags *r)
-{
-	ndr_print_struct(ndr, name, "PNP_HwProfFlags");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_HwProfFlags");
-		ndr->depth++;
-		ndr_print_uint32(ndr, "unknown1", r->in.unknown1);
-		ndr_print_ptr(ndr, "devicepath", r->in.devicepath);
-		ndr->depth++;
-		ndr_print_string(ndr, "devicepath", r->in.devicepath);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "unknown2", r->in.unknown2);
-		ndr_print_ptr(ndr, "unknown3", r->in.unknown3);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "unknown3", *r->in.unknown3);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "unknown4", r->in.unknown4);
-		ndr->depth++;
-		if (r->in.unknown4) {
-			ndr_print_uint16(ndr, "unknown4", *r->in.unknown4);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "unknown5", r->in.unknown5);
-		ndr->depth++;
-		if (r->in.unknown5) {
-			ndr_print_string(ndr, "unknown5", r->in.unknown5);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "unknown6", r->in.unknown6);
-		ndr_print_uint32(ndr, "unknown7", r->in.unknown7);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_HwProfFlags");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "unknown3", r->out.unknown3);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "unknown3", *r->out.unknown3);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "unknown4", r->out.unknown4);
-		ndr->depth++;
-		if (r->out.unknown4) {
-			ndr_print_uint16(ndr, "unknown4", *r->out.unknown4);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "unknown5a", r->out.unknown5a);
-		ndr->depth++;
-		if (r->out.unknown5a) {
-			ndr_print_ptr(ndr, "unknown5a", *r->out.unknown5a);
-			ndr->depth++;
-			if (*r->out.unknown5a) {
-				ndr_print_string(ndr, "unknown5a", *r->out.unknown5a);
-			}
-			ndr->depth--;
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetHwProfInfo(struct ndr_push *ndr, int flags, const struct PNP_GetHwProfInfo *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.idx));
-		if (r->in.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_PNP_HwProfInfo(ndr, NDR_SCALARS, r->in.info));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown1));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown2));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_PNP_HwProfInfo(ndr, NDR_SCALARS, r->out.info));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetHwProfInfo(struct ndr_pull *ndr, int flags, struct PNP_GetHwProfInfo *r)
-{
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.idx));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_PNP_HwProfInfo(ndr, NDR_SCALARS, r->in.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown1));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown2));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		*r->out.info = *r->in.info;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_PNP_HwProfInfo(ndr, NDR_SCALARS, r->out.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetHwProfInfo(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetHwProfInfo *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetHwProfInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetHwProfInfo");
-		ndr->depth++;
-		ndr_print_uint32(ndr, "idx", r->in.idx);
-		ndr_print_ptr(ndr, "info", r->in.info);
-		ndr->depth++;
-		ndr_print_PNP_HwProfInfo(ndr, "info", r->in.info);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "unknown1", r->in.unknown1);
-		ndr_print_uint32(ndr, "unknown2", r->in.unknown2);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetHwProfInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_PNP_HwProfInfo(ndr, "info", r->out.info);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_AddEmptyLogConf(struct ndr_push *ndr, int flags, const struct PNP_AddEmptyLogConf *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_AddEmptyLogConf(struct ndr_pull *ndr, int flags, struct PNP_AddEmptyLogConf *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_AddEmptyLogConf(struct ndr_print *ndr, const char *name, int flags, const struct PNP_AddEmptyLogConf *r)
-{
-	ndr_print_struct(ndr, name, "PNP_AddEmptyLogConf");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_AddEmptyLogConf");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_AddEmptyLogConf");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_FreeLogConf(struct ndr_push *ndr, int flags, const struct PNP_FreeLogConf *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_FreeLogConf(struct ndr_pull *ndr, int flags, struct PNP_FreeLogConf *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_FreeLogConf(struct ndr_print *ndr, const char *name, int flags, const struct PNP_FreeLogConf *r)
-{
-	ndr_print_struct(ndr, name, "PNP_FreeLogConf");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_FreeLogConf");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_FreeLogConf");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetFirstLogConf(struct ndr_push *ndr, int flags, const struct PNP_GetFirstLogConf *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetFirstLogConf(struct ndr_pull *ndr, int flags, struct PNP_GetFirstLogConf *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetFirstLogConf(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetFirstLogConf *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetFirstLogConf");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetFirstLogConf");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetFirstLogConf");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetNextLogConf(struct ndr_push *ndr, int flags, const struct PNP_GetNextLogConf *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetNextLogConf(struct ndr_pull *ndr, int flags, struct PNP_GetNextLogConf *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetNextLogConf(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetNextLogConf *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetNextLogConf");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetNextLogConf");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetNextLogConf");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetLogConfPriority(struct ndr_push *ndr, int flags, const struct PNP_GetLogConfPriority *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetLogConfPriority(struct ndr_pull *ndr, int flags, struct PNP_GetLogConfPriority *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetLogConfPriority(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetLogConfPriority *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetLogConfPriority");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetLogConfPriority");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetLogConfPriority");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_AddResDes(struct ndr_push *ndr, int flags, const struct PNP_AddResDes *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_AddResDes(struct ndr_pull *ndr, int flags, struct PNP_AddResDes *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_AddResDes(struct ndr_print *ndr, const char *name, int flags, const struct PNP_AddResDes *r)
-{
-	ndr_print_struct(ndr, name, "PNP_AddResDes");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_AddResDes");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_AddResDes");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_FreeResDes(struct ndr_push *ndr, int flags, const struct PNP_FreeResDes *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_FreeResDes(struct ndr_pull *ndr, int flags, struct PNP_FreeResDes *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_FreeResDes(struct ndr_print *ndr, const char *name, int flags, const struct PNP_FreeResDes *r)
-{
-	ndr_print_struct(ndr, name, "PNP_FreeResDes");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_FreeResDes");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_FreeResDes");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetNextResDes(struct ndr_push *ndr, int flags, const struct PNP_GetNextResDes *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetNextResDes(struct ndr_pull *ndr, int flags, struct PNP_GetNextResDes *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetNextResDes(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetNextResDes *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetNextResDes");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetNextResDes");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetNextResDes");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetResDesData(struct ndr_push *ndr, int flags, const struct PNP_GetResDesData *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetResDesData(struct ndr_pull *ndr, int flags, struct PNP_GetResDesData *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetResDesData(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetResDesData *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetResDesData");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetResDesData");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetResDesData");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetResDesDataSize(struct ndr_push *ndr, int flags, const struct PNP_GetResDesDataSize *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetResDesDataSize(struct ndr_pull *ndr, int flags, struct PNP_GetResDesDataSize *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetResDesDataSize(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetResDesDataSize *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetResDesDataSize");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetResDesDataSize");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetResDesDataSize");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_ModifyResDes(struct ndr_push *ndr, int flags, const struct PNP_ModifyResDes *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_ModifyResDes(struct ndr_pull *ndr, int flags, struct PNP_ModifyResDes *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_ModifyResDes(struct ndr_print *ndr, const char *name, int flags, const struct PNP_ModifyResDes *r)
-{
-	ndr_print_struct(ndr, name, "PNP_ModifyResDes");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_ModifyResDes");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_ModifyResDes");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_DetectResourceLimit(struct ndr_push *ndr, int flags, const struct PNP_DetectResourceLimit *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_DetectResourceLimit(struct ndr_pull *ndr, int flags, struct PNP_DetectResourceLimit *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_DetectResourceLimit(struct ndr_print *ndr, const char *name, int flags, const struct PNP_DetectResourceLimit *r)
-{
-	ndr_print_struct(ndr, name, "PNP_DetectResourceLimit");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_DetectResourceLimit");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_DetectResourceLimit");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_QueryResConfList(struct ndr_push *ndr, int flags, const struct PNP_QueryResConfList *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_QueryResConfList(struct ndr_pull *ndr, int flags, struct PNP_QueryResConfList *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_QueryResConfList(struct ndr_print *ndr, const char *name, int flags, const struct PNP_QueryResConfList *r)
-{
-	ndr_print_struct(ndr, name, "PNP_QueryResConfList");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_QueryResConfList");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_QueryResConfList");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_SetHwProf(struct ndr_push *ndr, int flags, const struct PNP_SetHwProf *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_SetHwProf(struct ndr_pull *ndr, int flags, struct PNP_SetHwProf *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_SetHwProf(struct ndr_print *ndr, const char *name, int flags, const struct PNP_SetHwProf *r)
-{
-	ndr_print_struct(ndr, name, "PNP_SetHwProf");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_SetHwProf");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_SetHwProf");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_QueryArbitratorFreeData(struct ndr_push *ndr, int flags, const struct PNP_QueryArbitratorFreeData *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_QueryArbitratorFreeData(struct ndr_pull *ndr, int flags, struct PNP_QueryArbitratorFreeData *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_QueryArbitratorFreeData(struct ndr_print *ndr, const char *name, int flags, const struct PNP_QueryArbitratorFreeData *r)
-{
-	ndr_print_struct(ndr, name, "PNP_QueryArbitratorFreeData");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_QueryArbitratorFreeData");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_QueryArbitratorFreeData");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_QueryArbitratorFreeSize(struct ndr_push *ndr, int flags, const struct PNP_QueryArbitratorFreeSize *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_QueryArbitratorFreeSize(struct ndr_pull *ndr, int flags, struct PNP_QueryArbitratorFreeSize *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_QueryArbitratorFreeSize(struct ndr_print *ndr, const char *name, int flags, const struct PNP_QueryArbitratorFreeSize *r)
-{
-	ndr_print_struct(ndr, name, "PNP_QueryArbitratorFreeSize");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_QueryArbitratorFreeSize");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_QueryArbitratorFreeSize");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_RunDetection(struct ndr_push *ndr, int flags, const struct PNP_RunDetection *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_RunDetection(struct ndr_pull *ndr, int flags, struct PNP_RunDetection *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_RunDetection(struct ndr_print *ndr, const char *name, int flags, const struct PNP_RunDetection *r)
-{
-	ndr_print_struct(ndr, name, "PNP_RunDetection");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_RunDetection");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_RunDetection");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_RegisterNotification(struct ndr_push *ndr, int flags, const struct PNP_RegisterNotification *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_RegisterNotification(struct ndr_pull *ndr, int flags, struct PNP_RegisterNotification *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_RegisterNotification(struct ndr_print *ndr, const char *name, int flags, const struct PNP_RegisterNotification *r)
-{
-	ndr_print_struct(ndr, name, "PNP_RegisterNotification");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_RegisterNotification");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_RegisterNotification");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_UnregisterNotification(struct ndr_push *ndr, int flags, const struct PNP_UnregisterNotification *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_UnregisterNotification(struct ndr_pull *ndr, int flags, struct PNP_UnregisterNotification *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_UnregisterNotification(struct ndr_print *ndr, const char *name, int flags, const struct PNP_UnregisterNotification *r)
-{
-	ndr_print_struct(ndr, name, "PNP_UnregisterNotification");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_UnregisterNotification");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_UnregisterNotification");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetCustomDevProp(struct ndr_push *ndr, int flags, const struct PNP_GetCustomDevProp *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetCustomDevProp(struct ndr_pull *ndr, int flags, struct PNP_GetCustomDevProp *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetCustomDevProp(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetCustomDevProp *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetCustomDevProp");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetCustomDevProp");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetCustomDevProp");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetVersionInternal(struct ndr_push *ndr, int flags, const struct PNP_GetVersionInternal *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetVersionInternal(struct ndr_pull *ndr, int flags, struct PNP_GetVersionInternal *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetVersionInternal(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetVersionInternal *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetVersionInternal");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetVersionInternal");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetVersionInternal");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetBlockedDriverInfo(struct ndr_push *ndr, int flags, const struct PNP_GetBlockedDriverInfo *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetBlockedDriverInfo(struct ndr_pull *ndr, int flags, struct PNP_GetBlockedDriverInfo *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetBlockedDriverInfo(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetBlockedDriverInfo *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetBlockedDriverInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetBlockedDriverInfo");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetBlockedDriverInfo");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_PNP_GetServerSideDeviceInstallFlags(struct ndr_push *ndr, int flags, const struct PNP_GetServerSideDeviceInstallFlags *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_PNP_GetServerSideDeviceInstallFlags(struct ndr_pull *ndr, int flags, struct PNP_GetServerSideDeviceInstallFlags *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_PNP_GetServerSideDeviceInstallFlags(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetServerSideDeviceInstallFlags *r)
-{
-	ndr_print_struct(ndr, name, "PNP_GetServerSideDeviceInstallFlags");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "PNP_GetServerSideDeviceInstallFlags");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "PNP_GetServerSideDeviceInstallFlags");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static const struct ndr_interface_call ntsvcs_calls[] = {
-	{
-		"PNP_Disconnect",
-		sizeof(struct PNP_Disconnect),
-		(ndr_push_flags_fn_t) ndr_push_PNP_Disconnect,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_Disconnect,
-		(ndr_print_function_t) ndr_print_PNP_Disconnect,
-		false,
-	},
-	{
-		"PNP_Connect",
-		sizeof(struct PNP_Connect),
-		(ndr_push_flags_fn_t) ndr_push_PNP_Connect,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_Connect,
-		(ndr_print_function_t) ndr_print_PNP_Connect,
-		false,
-	},
-	{
-		"PNP_GetVersion",
-		sizeof(struct PNP_GetVersion),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetVersion,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetVersion,
-		(ndr_print_function_t) ndr_print_PNP_GetVersion,
-		false,
-	},
-	{
-		"PNP_GetGlobalState",
-		sizeof(struct PNP_GetGlobalState),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetGlobalState,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetGlobalState,
-		(ndr_print_function_t) ndr_print_PNP_GetGlobalState,
-		false,
-	},
-	{
-		"PNP_InitDetection",
-		sizeof(struct PNP_InitDetection),
-		(ndr_push_flags_fn_t) ndr_push_PNP_InitDetection,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_InitDetection,
-		(ndr_print_function_t) ndr_print_PNP_InitDetection,
-		false,
-	},
-	{
-		"PNP_ReportLogOn",
-		sizeof(struct PNP_ReportLogOn),
-		(ndr_push_flags_fn_t) ndr_push_PNP_ReportLogOn,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_ReportLogOn,
-		(ndr_print_function_t) ndr_print_PNP_ReportLogOn,
-		false,
-	},
-	{
-		"PNP_ValidateDeviceInstance",
-		sizeof(struct PNP_ValidateDeviceInstance),
-		(ndr_push_flags_fn_t) ndr_push_PNP_ValidateDeviceInstance,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_ValidateDeviceInstance,
-		(ndr_print_function_t) ndr_print_PNP_ValidateDeviceInstance,
-		false,
-	},
-	{
-		"PNP_GetRootDeviceInstance",
-		sizeof(struct PNP_GetRootDeviceInstance),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetRootDeviceInstance,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetRootDeviceInstance,
-		(ndr_print_function_t) ndr_print_PNP_GetRootDeviceInstance,
-		false,
-	},
-	{
-		"PNP_GetRelatedDeviceInstance",
-		sizeof(struct PNP_GetRelatedDeviceInstance),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetRelatedDeviceInstance,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetRelatedDeviceInstance,
-		(ndr_print_function_t) ndr_print_PNP_GetRelatedDeviceInstance,
-		false,
-	},
-	{
-		"PNP_EnumerateSubKeys",
-		sizeof(struct PNP_EnumerateSubKeys),
-		(ndr_push_flags_fn_t) ndr_push_PNP_EnumerateSubKeys,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_EnumerateSubKeys,
-		(ndr_print_function_t) ndr_print_PNP_EnumerateSubKeys,
-		false,
-	},
-	{
-		"PNP_GetDeviceList",
-		sizeof(struct PNP_GetDeviceList),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetDeviceList,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetDeviceList,
-		(ndr_print_function_t) ndr_print_PNP_GetDeviceList,
-		false,
-	},
-	{
-		"PNP_GetDeviceListSize",
-		sizeof(struct PNP_GetDeviceListSize),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetDeviceListSize,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetDeviceListSize,
-		(ndr_print_function_t) ndr_print_PNP_GetDeviceListSize,
-		false,
-	},
-	{
-		"PNP_GetDepth",
-		sizeof(struct PNP_GetDepth),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetDepth,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetDepth,
-		(ndr_print_function_t) ndr_print_PNP_GetDepth,
-		false,
-	},
-	{
-		"PNP_GetDeviceRegProp",
-		sizeof(struct PNP_GetDeviceRegProp),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetDeviceRegProp,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetDeviceRegProp,
-		(ndr_print_function_t) ndr_print_PNP_GetDeviceRegProp,
-		false,
-	},
-	{
-		"PNP_SetDeviceRegProp",
-		sizeof(struct PNP_SetDeviceRegProp),
-		(ndr_push_flags_fn_t) ndr_push_PNP_SetDeviceRegProp,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_SetDeviceRegProp,
-		(ndr_print_function_t) ndr_print_PNP_SetDeviceRegProp,
-		false,
-	},
-	{
-		"PNP_GetClassInstance",
-		sizeof(struct PNP_GetClassInstance),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetClassInstance,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetClassInstance,
-		(ndr_print_function_t) ndr_print_PNP_GetClassInstance,
-		false,
-	},
-	{
-		"PNP_CreateKey",
-		sizeof(struct PNP_CreateKey),
-		(ndr_push_flags_fn_t) ndr_push_PNP_CreateKey,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_CreateKey,
-		(ndr_print_function_t) ndr_print_PNP_CreateKey,
-		false,
-	},
-	{
-		"PNP_DeleteRegistryKey",
-		sizeof(struct PNP_DeleteRegistryKey),
-		(ndr_push_flags_fn_t) ndr_push_PNP_DeleteRegistryKey,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_DeleteRegistryKey,
-		(ndr_print_function_t) ndr_print_PNP_DeleteRegistryKey,
-		false,
-	},
-	{
-		"PNP_GetClassCount",
-		sizeof(struct PNP_GetClassCount),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetClassCount,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetClassCount,
-		(ndr_print_function_t) ndr_print_PNP_GetClassCount,
-		false,
-	},
-	{
-		"PNP_GetClassName",
-		sizeof(struct PNP_GetClassName),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetClassName,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetClassName,
-		(ndr_print_function_t) ndr_print_PNP_GetClassName,
-		false,
-	},
-	{
-		"PNP_DeleteClassKey",
-		sizeof(struct PNP_DeleteClassKey),
-		(ndr_push_flags_fn_t) ndr_push_PNP_DeleteClassKey,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_DeleteClassKey,
-		(ndr_print_function_t) ndr_print_PNP_DeleteClassKey,
-		false,
-	},
-	{
-		"PNP_GetInterfaceDeviceAlias",
-		sizeof(struct PNP_GetInterfaceDeviceAlias),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetInterfaceDeviceAlias,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetInterfaceDeviceAlias,
-		(ndr_print_function_t) ndr_print_PNP_GetInterfaceDeviceAlias,
-		false,
-	},
-	{
-		"PNP_GetInterfaceDeviceList",
-		sizeof(struct PNP_GetInterfaceDeviceList),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetInterfaceDeviceList,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetInterfaceDeviceList,
-		(ndr_print_function_t) ndr_print_PNP_GetInterfaceDeviceList,
-		false,
-	},
-	{
-		"PNP_GetInterfaceDeviceListSize",
-		sizeof(struct PNP_GetInterfaceDeviceListSize),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetInterfaceDeviceListSize,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetInterfaceDeviceListSize,
-		(ndr_print_function_t) ndr_print_PNP_GetInterfaceDeviceListSize,
-		false,
-	},
-	{
-		"PNP_RegisterDeviceClassAssociation",
-		sizeof(struct PNP_RegisterDeviceClassAssociation),
-		(ndr_push_flags_fn_t) ndr_push_PNP_RegisterDeviceClassAssociation,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_RegisterDeviceClassAssociation,
-		(ndr_print_function_t) ndr_print_PNP_RegisterDeviceClassAssociation,
-		false,
-	},
-	{
-		"PNP_UnregisterDeviceClassAssociation",
-		sizeof(struct PNP_UnregisterDeviceClassAssociation),
-		(ndr_push_flags_fn_t) ndr_push_PNP_UnregisterDeviceClassAssociation,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_UnregisterDeviceClassAssociation,
-		(ndr_print_function_t) ndr_print_PNP_UnregisterDeviceClassAssociation,
-		false,
-	},
-	{
-		"PNP_GetClassRegProp",
-		sizeof(struct PNP_GetClassRegProp),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetClassRegProp,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetClassRegProp,
-		(ndr_print_function_t) ndr_print_PNP_GetClassRegProp,
-		false,
-	},
-	{
-		"PNP_SetClassRegProp",
-		sizeof(struct PNP_SetClassRegProp),
-		(ndr_push_flags_fn_t) ndr_push_PNP_SetClassRegProp,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_SetClassRegProp,
-		(ndr_print_function_t) ndr_print_PNP_SetClassRegProp,
-		false,
-	},
-	{
-		"PNP_CreateDevInst",
-		sizeof(struct PNP_CreateDevInst),
-		(ndr_push_flags_fn_t) ndr_push_PNP_CreateDevInst,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_CreateDevInst,
-		(ndr_print_function_t) ndr_print_PNP_CreateDevInst,
-		false,
-	},
-	{
-		"PNP_DeviceInstanceAction",
-		sizeof(struct PNP_DeviceInstanceAction),
-		(ndr_push_flags_fn_t) ndr_push_PNP_DeviceInstanceAction,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_DeviceInstanceAction,
-		(ndr_print_function_t) ndr_print_PNP_DeviceInstanceAction,
-		false,
-	},
-	{
-		"PNP_GetDeviceStatus",
-		sizeof(struct PNP_GetDeviceStatus),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetDeviceStatus,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetDeviceStatus,
-		(ndr_print_function_t) ndr_print_PNP_GetDeviceStatus,
-		false,
-	},
-	{
-		"PNP_SetDeviceProblem",
-		sizeof(struct PNP_SetDeviceProblem),
-		(ndr_push_flags_fn_t) ndr_push_PNP_SetDeviceProblem,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_SetDeviceProblem,
-		(ndr_print_function_t) ndr_print_PNP_SetDeviceProblem,
-		false,
-	},
-	{
-		"PNP_DisableDevInst",
-		sizeof(struct PNP_DisableDevInst),
-		(ndr_push_flags_fn_t) ndr_push_PNP_DisableDevInst,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_DisableDevInst,
-		(ndr_print_function_t) ndr_print_PNP_DisableDevInst,
-		false,
-	},
-	{
-		"PNP_UninstallDevInst",
-		sizeof(struct PNP_UninstallDevInst),
-		(ndr_push_flags_fn_t) ndr_push_PNP_UninstallDevInst,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_UninstallDevInst,
-		(ndr_print_function_t) ndr_print_PNP_UninstallDevInst,
-		false,
-	},
-	{
-		"PNP_AddID",
-		sizeof(struct PNP_AddID),
-		(ndr_push_flags_fn_t) ndr_push_PNP_AddID,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_AddID,
-		(ndr_print_function_t) ndr_print_PNP_AddID,
-		false,
-	},
-	{
-		"PNP_RegisterDriver",
-		sizeof(struct PNP_RegisterDriver),
-		(ndr_push_flags_fn_t) ndr_push_PNP_RegisterDriver,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_RegisterDriver,
-		(ndr_print_function_t) ndr_print_PNP_RegisterDriver,
-		false,
-	},
-	{
-		"PNP_QueryRemove",
-		sizeof(struct PNP_QueryRemove),
-		(ndr_push_flags_fn_t) ndr_push_PNP_QueryRemove,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_QueryRemove,
-		(ndr_print_function_t) ndr_print_PNP_QueryRemove,
-		false,
-	},
-	{
-		"PNP_RequestDeviceEject",
-		sizeof(struct PNP_RequestDeviceEject),
-		(ndr_push_flags_fn_t) ndr_push_PNP_RequestDeviceEject,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_RequestDeviceEject,
-		(ndr_print_function_t) ndr_print_PNP_RequestDeviceEject,
-		false,
-	},
-	{
-		"PNP_IsDockStationPresent",
-		sizeof(struct PNP_IsDockStationPresent),
-		(ndr_push_flags_fn_t) ndr_push_PNP_IsDockStationPresent,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_IsDockStationPresent,
-		(ndr_print_function_t) ndr_print_PNP_IsDockStationPresent,
-		false,
-	},
-	{
-		"PNP_RequestEjectPC",
-		sizeof(struct PNP_RequestEjectPC),
-		(ndr_push_flags_fn_t) ndr_push_PNP_RequestEjectPC,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_RequestEjectPC,
-		(ndr_print_function_t) ndr_print_PNP_RequestEjectPC,
-		false,
-	},
-	{
-		"PNP_HwProfFlags",
-		sizeof(struct PNP_HwProfFlags),
-		(ndr_push_flags_fn_t) ndr_push_PNP_HwProfFlags,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_HwProfFlags,
-		(ndr_print_function_t) ndr_print_PNP_HwProfFlags,
-		false,
-	},
-	{
-		"PNP_GetHwProfInfo",
-		sizeof(struct PNP_GetHwProfInfo),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetHwProfInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetHwProfInfo,
-		(ndr_print_function_t) ndr_print_PNP_GetHwProfInfo,
-		false,
-	},
-	{
-		"PNP_AddEmptyLogConf",
-		sizeof(struct PNP_AddEmptyLogConf),
-		(ndr_push_flags_fn_t) ndr_push_PNP_AddEmptyLogConf,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_AddEmptyLogConf,
-		(ndr_print_function_t) ndr_print_PNP_AddEmptyLogConf,
-		false,
-	},
-	{
-		"PNP_FreeLogConf",
-		sizeof(struct PNP_FreeLogConf),
-		(ndr_push_flags_fn_t) ndr_push_PNP_FreeLogConf,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_FreeLogConf,
-		(ndr_print_function_t) ndr_print_PNP_FreeLogConf,
-		false,
-	},
-	{
-		"PNP_GetFirstLogConf",
-		sizeof(struct PNP_GetFirstLogConf),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetFirstLogConf,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetFirstLogConf,
-		(ndr_print_function_t) ndr_print_PNP_GetFirstLogConf,
-		false,
-	},
-	{
-		"PNP_GetNextLogConf",
-		sizeof(struct PNP_GetNextLogConf),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetNextLogConf,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetNextLogConf,
-		(ndr_print_function_t) ndr_print_PNP_GetNextLogConf,
-		false,
-	},
-	{
-		"PNP_GetLogConfPriority",
-		sizeof(struct PNP_GetLogConfPriority),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetLogConfPriority,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetLogConfPriority,
-		(ndr_print_function_t) ndr_print_PNP_GetLogConfPriority,
-		false,
-	},
-	{
-		"PNP_AddResDes",
-		sizeof(struct PNP_AddResDes),
-		(ndr_push_flags_fn_t) ndr_push_PNP_AddResDes,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_AddResDes,
-		(ndr_print_function_t) ndr_print_PNP_AddResDes,
-		false,
-	},
-	{
-		"PNP_FreeResDes",
-		sizeof(struct PNP_FreeResDes),
-		(ndr_push_flags_fn_t) ndr_push_PNP_FreeResDes,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_FreeResDes,
-		(ndr_print_function_t) ndr_print_PNP_FreeResDes,
-		false,
-	},
-	{
-		"PNP_GetNextResDes",
-		sizeof(struct PNP_GetNextResDes),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetNextResDes,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetNextResDes,
-		(ndr_print_function_t) ndr_print_PNP_GetNextResDes,
-		false,
-	},
-	{
-		"PNP_GetResDesData",
-		sizeof(struct PNP_GetResDesData),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetResDesData,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetResDesData,
-		(ndr_print_function_t) ndr_print_PNP_GetResDesData,
-		false,
-	},
-	{
-		"PNP_GetResDesDataSize",
-		sizeof(struct PNP_GetResDesDataSize),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetResDesDataSize,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetResDesDataSize,
-		(ndr_print_function_t) ndr_print_PNP_GetResDesDataSize,
-		false,
-	},
-	{
-		"PNP_ModifyResDes",
-		sizeof(struct PNP_ModifyResDes),
-		(ndr_push_flags_fn_t) ndr_push_PNP_ModifyResDes,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_ModifyResDes,
-		(ndr_print_function_t) ndr_print_PNP_ModifyResDes,
-		false,
-	},
-	{
-		"PNP_DetectResourceLimit",
-		sizeof(struct PNP_DetectResourceLimit),
-		(ndr_push_flags_fn_t) ndr_push_PNP_DetectResourceLimit,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_DetectResourceLimit,
-		(ndr_print_function_t) ndr_print_PNP_DetectResourceLimit,
-		false,
-	},
-	{
-		"PNP_QueryResConfList",
-		sizeof(struct PNP_QueryResConfList),
-		(ndr_push_flags_fn_t) ndr_push_PNP_QueryResConfList,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_QueryResConfList,
-		(ndr_print_function_t) ndr_print_PNP_QueryResConfList,
-		false,
-	},
-	{
-		"PNP_SetHwProf",
-		sizeof(struct PNP_SetHwProf),
-		(ndr_push_flags_fn_t) ndr_push_PNP_SetHwProf,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_SetHwProf,
-		(ndr_print_function_t) ndr_print_PNP_SetHwProf,
-		false,
-	},
-	{
-		"PNP_QueryArbitratorFreeData",
-		sizeof(struct PNP_QueryArbitratorFreeData),
-		(ndr_push_flags_fn_t) ndr_push_PNP_QueryArbitratorFreeData,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_QueryArbitratorFreeData,
-		(ndr_print_function_t) ndr_print_PNP_QueryArbitratorFreeData,
-		false,
-	},
-	{
-		"PNP_QueryArbitratorFreeSize",
-		sizeof(struct PNP_QueryArbitratorFreeSize),
-		(ndr_push_flags_fn_t) ndr_push_PNP_QueryArbitratorFreeSize,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_QueryArbitratorFreeSize,
-		(ndr_print_function_t) ndr_print_PNP_QueryArbitratorFreeSize,
-		false,
-	},
-	{
-		"PNP_RunDetection",
-		sizeof(struct PNP_RunDetection),
-		(ndr_push_flags_fn_t) ndr_push_PNP_RunDetection,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_RunDetection,
-		(ndr_print_function_t) ndr_print_PNP_RunDetection,
-		false,
-	},
-	{
-		"PNP_RegisterNotification",
-		sizeof(struct PNP_RegisterNotification),
-		(ndr_push_flags_fn_t) ndr_push_PNP_RegisterNotification,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_RegisterNotification,
-		(ndr_print_function_t) ndr_print_PNP_RegisterNotification,
-		false,
-	},
-	{
-		"PNP_UnregisterNotification",
-		sizeof(struct PNP_UnregisterNotification),
-		(ndr_push_flags_fn_t) ndr_push_PNP_UnregisterNotification,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_UnregisterNotification,
-		(ndr_print_function_t) ndr_print_PNP_UnregisterNotification,
-		false,
-	},
-	{
-		"PNP_GetCustomDevProp",
-		sizeof(struct PNP_GetCustomDevProp),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetCustomDevProp,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetCustomDevProp,
-		(ndr_print_function_t) ndr_print_PNP_GetCustomDevProp,
-		false,
-	},
-	{
-		"PNP_GetVersionInternal",
-		sizeof(struct PNP_GetVersionInternal),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetVersionInternal,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetVersionInternal,
-		(ndr_print_function_t) ndr_print_PNP_GetVersionInternal,
-		false,
-	},
-	{
-		"PNP_GetBlockedDriverInfo",
-		sizeof(struct PNP_GetBlockedDriverInfo),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetBlockedDriverInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetBlockedDriverInfo,
-		(ndr_print_function_t) ndr_print_PNP_GetBlockedDriverInfo,
-		false,
-	},
-	{
-		"PNP_GetServerSideDeviceInstallFlags",
-		sizeof(struct PNP_GetServerSideDeviceInstallFlags),
-		(ndr_push_flags_fn_t) ndr_push_PNP_GetServerSideDeviceInstallFlags,
-		(ndr_pull_flags_fn_t) ndr_pull_PNP_GetServerSideDeviceInstallFlags,
-		(ndr_print_function_t) ndr_print_PNP_GetServerSideDeviceInstallFlags,
-		false,
-	},
-	{ NULL, 0, NULL, NULL, NULL, false }
-};
-
-static const char * const ntsvcs_endpoint_strings[] = {
-	"ncacn_np:[\\pipe\\ntsvcs]", 
-};
-
-static const struct ndr_interface_string_array ntsvcs_endpoints = {
-	.count	= 1,
-	.names	= ntsvcs_endpoint_strings
-};
-
-static const char * const ntsvcs_authservice_strings[] = {
-	"host", 
-};
-
-static const struct ndr_interface_string_array ntsvcs_authservices = {
-	.count	= 1,
-	.names	= ntsvcs_authservice_strings
-};
-
-
-const struct ndr_interface_table ndr_table_ntsvcs = {
-	.name		= "ntsvcs",
-	.syntax_id	= {
-		{0x8d9f4e40,0xa03d,0x11ce,{0x8f,0x69},{0x08,0x00,0x3e,0x30,0x05,0x1b}},
-		NDR_NTSVCS_VERSION
-	},
-	.helpstring	= NDR_NTSVCS_HELPSTRING,
-	.num_calls	= 65,
-	.calls		= ntsvcs_calls,
-	.endpoints	= &ntsvcs_endpoints,
-	.authservices	= &ntsvcs_authservices
-};
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_ntsvcs.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_ntsvcs.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_ntsvcs.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,211 +0,0 @@
-/* header auto-generated by pidl */
-
-#include "librpc/ndr/libndr.h"
-#include "librpc/gen_ndr/ntsvcs.h"
-
-#ifndef _HEADER_NDR_ntsvcs
-#define _HEADER_NDR_ntsvcs
-
-#define NDR_NTSVCS_UUID "8d9f4e40-a03d-11ce-8f69-08003e30051b"
-#define NDR_NTSVCS_VERSION 1.0
-#define NDR_NTSVCS_NAME "ntsvcs"
-#define NDR_NTSVCS_HELPSTRING "Plug and Play services"
-extern const struct ndr_interface_table ndr_table_ntsvcs;
-#define NDR_PNP_DISCONNECT (0x00)
-
-#define NDR_PNP_CONNECT (0x01)
-
-#define NDR_PNP_GETVERSION (0x02)
-
-#define NDR_PNP_GETGLOBALSTATE (0x03)
-
-#define NDR_PNP_INITDETECTION (0x04)
-
-#define NDR_PNP_REPORTLOGON (0x05)
-
-#define NDR_PNP_VALIDATEDEVICEINSTANCE (0x06)
-
-#define NDR_PNP_GETROOTDEVICEINSTANCE (0x07)
-
-#define NDR_PNP_GETRELATEDDEVICEINSTANCE (0x08)
-
-#define NDR_PNP_ENUMERATESUBKEYS (0x09)
-
-#define NDR_PNP_GETDEVICELIST (0x0a)
-
-#define NDR_PNP_GETDEVICELISTSIZE (0x0b)
-
-#define NDR_PNP_GETDEPTH (0x0c)
-
-#define NDR_PNP_GETDEVICEREGPROP (0x0d)
-
-#define NDR_PNP_SETDEVICEREGPROP (0x0e)
-
-#define NDR_PNP_GETCLASSINSTANCE (0x0f)
-
-#define NDR_PNP_CREATEKEY (0x10)
-
-#define NDR_PNP_DELETEREGISTRYKEY (0x11)
-
-#define NDR_PNP_GETCLASSCOUNT (0x12)
-
-#define NDR_PNP_GETCLASSNAME (0x13)
-
-#define NDR_PNP_DELETECLASSKEY (0x14)
-
-#define NDR_PNP_GETINTERFACEDEVICEALIAS (0x15)
-
-#define NDR_PNP_GETINTERFACEDEVICELIST (0x16)
-
-#define NDR_PNP_GETINTERFACEDEVICELISTSIZE (0x17)
-
-#define NDR_PNP_REGISTERDEVICECLASSASSOCIATION (0x18)
-
-#define NDR_PNP_UNREGISTERDEVICECLASSASSOCIATION (0x19)
-
-#define NDR_PNP_GETCLASSREGPROP (0x1a)
-
-#define NDR_PNP_SETCLASSREGPROP (0x1b)
-
-#define NDR_PNP_CREATEDEVINST (0x1c)
-
-#define NDR_PNP_DEVICEINSTANCEACTION (0x1d)
-
-#define NDR_PNP_GETDEVICESTATUS (0x1e)
-
-#define NDR_PNP_SETDEVICEPROBLEM (0x1f)
-
-#define NDR_PNP_DISABLEDEVINST (0x20)
-
-#define NDR_PNP_UNINSTALLDEVINST (0x21)
-
-#define NDR_PNP_ADDID (0x22)
-
-#define NDR_PNP_REGISTERDRIVER (0x23)
-
-#define NDR_PNP_QUERYREMOVE (0x24)
-
-#define NDR_PNP_REQUESTDEVICEEJECT (0x25)
-
-#define NDR_PNP_ISDOCKSTATIONPRESENT (0x26)
-
-#define NDR_PNP_REQUESTEJECTPC (0x27)
-
-#define NDR_PNP_HWPROFFLAGS (0x28)
-
-#define NDR_PNP_GETHWPROFINFO (0x29)
-
-#define NDR_PNP_ADDEMPTYLOGCONF (0x2a)
-
-#define NDR_PNP_FREELOGCONF (0x2b)
-
-#define NDR_PNP_GETFIRSTLOGCONF (0x2c)
-
-#define NDR_PNP_GETNEXTLOGCONF (0x2d)
-
-#define NDR_PNP_GETLOGCONFPRIORITY (0x2e)
-
-#define NDR_PNP_ADDRESDES (0x2f)
-
-#define NDR_PNP_FREERESDES (0x30)
-
-#define NDR_PNP_GETNEXTRESDES (0x31)
-
-#define NDR_PNP_GETRESDESDATA (0x32)
-
-#define NDR_PNP_GETRESDESDATASIZE (0x33)
-
-#define NDR_PNP_MODIFYRESDES (0x34)
-
-#define NDR_PNP_DETECTRESOURCELIMIT (0x35)
-
-#define NDR_PNP_QUERYRESCONFLIST (0x36)
-
-#define NDR_PNP_SETHWPROF (0x37)
-
-#define NDR_PNP_QUERYARBITRATORFREEDATA (0x38)
-
-#define NDR_PNP_QUERYARBITRATORFREESIZE (0x39)
-
-#define NDR_PNP_RUNDETECTION (0x3a)
-
-#define NDR_PNP_REGISTERNOTIFICATION (0x3b)
-
-#define NDR_PNP_UNREGISTERNOTIFICATION (0x3c)
-
-#define NDR_PNP_GETCUSTOMDEVPROP (0x3d)
-
-#define NDR_PNP_GETVERSIONINTERNAL (0x3e)
-
-#define NDR_PNP_GETBLOCKEDDRIVERINFO (0x3f)
-
-#define NDR_PNP_GETSERVERSIDEDEVICEINSTALLFLAGS (0x40)
-
-#define NDR_NTSVCS_CALL_COUNT (65)
-void ndr_print_PNP_HwProfInfo(struct ndr_print *ndr, const char *name, const struct PNP_HwProfInfo *r);
-void ndr_print_PNP_Disconnect(struct ndr_print *ndr, const char *name, int flags, const struct PNP_Disconnect *r);
-void ndr_print_PNP_Connect(struct ndr_print *ndr, const char *name, int flags, const struct PNP_Connect *r);
-void ndr_print_PNP_GetVersion(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetVersion *r);
-void ndr_print_PNP_GetGlobalState(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetGlobalState *r);
-void ndr_print_PNP_InitDetection(struct ndr_print *ndr, const char *name, int flags, const struct PNP_InitDetection *r);
-void ndr_print_PNP_ReportLogOn(struct ndr_print *ndr, const char *name, int flags, const struct PNP_ReportLogOn *r);
-void ndr_print_PNP_ValidateDeviceInstance(struct ndr_print *ndr, const char *name, int flags, const struct PNP_ValidateDeviceInstance *r);
-void ndr_print_PNP_GetRootDeviceInstance(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetRootDeviceInstance *r);
-void ndr_print_PNP_GetRelatedDeviceInstance(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetRelatedDeviceInstance *r);
-void ndr_print_PNP_EnumerateSubKeys(struct ndr_print *ndr, const char *name, int flags, const struct PNP_EnumerateSubKeys *r);
-void ndr_print_PNP_GetDeviceList(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetDeviceList *r);
-void ndr_print_PNP_GetDeviceListSize(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetDeviceListSize *r);
-void ndr_print_PNP_GetDepth(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetDepth *r);
-void ndr_print_PNP_GetDeviceRegProp(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetDeviceRegProp *r);
-void ndr_print_PNP_SetDeviceRegProp(struct ndr_print *ndr, const char *name, int flags, const struct PNP_SetDeviceRegProp *r);
-void ndr_print_PNP_GetClassInstance(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetClassInstance *r);
-void ndr_print_PNP_CreateKey(struct ndr_print *ndr, const char *name, int flags, const struct PNP_CreateKey *r);
-void ndr_print_PNP_DeleteRegistryKey(struct ndr_print *ndr, const char *name, int flags, const struct PNP_DeleteRegistryKey *r);
-void ndr_print_PNP_GetClassCount(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetClassCount *r);
-void ndr_print_PNP_GetClassName(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetClassName *r);
-void ndr_print_PNP_DeleteClassKey(struct ndr_print *ndr, const char *name, int flags, const struct PNP_DeleteClassKey *r);
-void ndr_print_PNP_GetInterfaceDeviceAlias(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetInterfaceDeviceAlias *r);
-void ndr_print_PNP_GetInterfaceDeviceList(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetInterfaceDeviceList *r);
-void ndr_print_PNP_GetInterfaceDeviceListSize(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetInterfaceDeviceListSize *r);
-void ndr_print_PNP_RegisterDeviceClassAssociation(struct ndr_print *ndr, const char *name, int flags, const struct PNP_RegisterDeviceClassAssociation *r);
-void ndr_print_PNP_UnregisterDeviceClassAssociation(struct ndr_print *ndr, const char *name, int flags, const struct PNP_UnregisterDeviceClassAssociation *r);
-void ndr_print_PNP_GetClassRegProp(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetClassRegProp *r);
-void ndr_print_PNP_SetClassRegProp(struct ndr_print *ndr, const char *name, int flags, const struct PNP_SetClassRegProp *r);
-void ndr_print_PNP_CreateDevInst(struct ndr_print *ndr, const char *name, int flags, const struct PNP_CreateDevInst *r);
-void ndr_print_PNP_DeviceInstanceAction(struct ndr_print *ndr, const char *name, int flags, const struct PNP_DeviceInstanceAction *r);
-void ndr_print_PNP_GetDeviceStatus(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetDeviceStatus *r);
-void ndr_print_PNP_SetDeviceProblem(struct ndr_print *ndr, const char *name, int flags, const struct PNP_SetDeviceProblem *r);
-void ndr_print_PNP_DisableDevInst(struct ndr_print *ndr, const char *name, int flags, const struct PNP_DisableDevInst *r);
-void ndr_print_PNP_UninstallDevInst(struct ndr_print *ndr, const char *name, int flags, const struct PNP_UninstallDevInst *r);
-void ndr_print_PNP_AddID(struct ndr_print *ndr, const char *name, int flags, const struct PNP_AddID *r);
-void ndr_print_PNP_RegisterDriver(struct ndr_print *ndr, const char *name, int flags, const struct PNP_RegisterDriver *r);
-void ndr_print_PNP_QueryRemove(struct ndr_print *ndr, const char *name, int flags, const struct PNP_QueryRemove *r);
-void ndr_print_PNP_RequestDeviceEject(struct ndr_print *ndr, const char *name, int flags, const struct PNP_RequestDeviceEject *r);
-void ndr_print_PNP_IsDockStationPresent(struct ndr_print *ndr, const char *name, int flags, const struct PNP_IsDockStationPresent *r);
-void ndr_print_PNP_RequestEjectPC(struct ndr_print *ndr, const char *name, int flags, const struct PNP_RequestEjectPC *r);
-void ndr_print_PNP_HwProfFlags(struct ndr_print *ndr, const char *name, int flags, const struct PNP_HwProfFlags *r);
-void ndr_print_PNP_GetHwProfInfo(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetHwProfInfo *r);
-void ndr_print_PNP_AddEmptyLogConf(struct ndr_print *ndr, const char *name, int flags, const struct PNP_AddEmptyLogConf *r);
-void ndr_print_PNP_FreeLogConf(struct ndr_print *ndr, const char *name, int flags, const struct PNP_FreeLogConf *r);
-void ndr_print_PNP_GetFirstLogConf(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetFirstLogConf *r);
-void ndr_print_PNP_GetNextLogConf(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetNextLogConf *r);
-void ndr_print_PNP_GetLogConfPriority(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetLogConfPriority *r);
-void ndr_print_PNP_AddResDes(struct ndr_print *ndr, const char *name, int flags, const struct PNP_AddResDes *r);
-void ndr_print_PNP_FreeResDes(struct ndr_print *ndr, const char *name, int flags, const struct PNP_FreeResDes *r);
-void ndr_print_PNP_GetNextResDes(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetNextResDes *r);
-void ndr_print_PNP_GetResDesData(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetResDesData *r);
-void ndr_print_PNP_GetResDesDataSize(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetResDesDataSize *r);
-void ndr_print_PNP_ModifyResDes(struct ndr_print *ndr, const char *name, int flags, const struct PNP_ModifyResDes *r);
-void ndr_print_PNP_DetectResourceLimit(struct ndr_print *ndr, const char *name, int flags, const struct PNP_DetectResourceLimit *r);
-void ndr_print_PNP_QueryResConfList(struct ndr_print *ndr, const char *name, int flags, const struct PNP_QueryResConfList *r);
-void ndr_print_PNP_SetHwProf(struct ndr_print *ndr, const char *name, int flags, const struct PNP_SetHwProf *r);
-void ndr_print_PNP_QueryArbitratorFreeData(struct ndr_print *ndr, const char *name, int flags, const struct PNP_QueryArbitratorFreeData *r);
-void ndr_print_PNP_QueryArbitratorFreeSize(struct ndr_print *ndr, const char *name, int flags, const struct PNP_QueryArbitratorFreeSize *r);
-void ndr_print_PNP_RunDetection(struct ndr_print *ndr, const char *name, int flags, const struct PNP_RunDetection *r);
-void ndr_print_PNP_RegisterNotification(struct ndr_print *ndr, const char *name, int flags, const struct PNP_RegisterNotification *r);
-void ndr_print_PNP_UnregisterNotification(struct ndr_print *ndr, const char *name, int flags, const struct PNP_UnregisterNotification *r);
-void ndr_print_PNP_GetCustomDevProp(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetCustomDevProp *r);
-void ndr_print_PNP_GetVersionInternal(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetVersionInternal *r);
-void ndr_print_PNP_GetBlockedDriverInfo(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetBlockedDriverInfo *r);
-void ndr_print_PNP_GetServerSideDeviceInstallFlags(struct ndr_print *ndr, const char *name, int flags, const struct PNP_GetServerSideDeviceInstallFlags *r);
-#endif /* _HEADER_NDR_ntsvcs */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_samr.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_samr.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_samr.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,12702 +0,0 @@
-/* parser auto-generated by pidl */
-
-#include "includes.h"
-#include "librpc/gen_ndr/ndr_samr.h"
-
-#include "librpc/gen_ndr/ndr_misc.h"
-#include "librpc/gen_ndr/ndr_lsa.h"
-#include "librpc/gen_ndr/ndr_security.h"
-_PUBLIC_ enum ndr_err_code ndr_push_samr_AcctFlags(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_samr_AcctFlags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_AcctFlags(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ACB_DISABLED", ACB_DISABLED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ACB_HOMDIRREQ", ACB_HOMDIRREQ, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ACB_PWNOTREQ", ACB_PWNOTREQ, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ACB_TEMPDUP", ACB_TEMPDUP, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ACB_NORMAL", ACB_NORMAL, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ACB_MNS", ACB_MNS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ACB_DOMTRUST", ACB_DOMTRUST, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ACB_WSTRUST", ACB_WSTRUST, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ACB_SVRTRUST", ACB_SVRTRUST, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ACB_PWNOEXP", ACB_PWNOEXP, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ACB_AUTOLOCK", ACB_AUTOLOCK, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ACB_ENC_TXT_PWD_ALLOWED", ACB_ENC_TXT_PWD_ALLOWED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ACB_SMARTCARD_REQUIRED", ACB_SMARTCARD_REQUIRED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ACB_TRUSTED_FOR_DELEGATION", ACB_TRUSTED_FOR_DELEGATION, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ACB_NOT_DELEGATED", ACB_NOT_DELEGATED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ACB_USE_DES_KEY_ONLY", ACB_USE_DES_KEY_ONLY, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ACB_DONT_REQUIRE_PREAUTH", ACB_DONT_REQUIRE_PREAUTH, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ACB_PW_EXPIRED", ACB_PW_EXPIRED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "ACB_NO_AUTH_DATA_REQD", ACB_NO_AUTH_DATA_REQD, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_ConnectAccessMask(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_ConnectAccessMask(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_ConnectAccessMask(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_ACCESS_CONNECT_TO_SERVER", SAMR_ACCESS_CONNECT_TO_SERVER, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_ACCESS_SHUTDOWN_SERVER", SAMR_ACCESS_SHUTDOWN_SERVER, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_ACCESS_INITIALIZE_SERVER", SAMR_ACCESS_INITIALIZE_SERVER, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_ACCESS_CREATE_DOMAIN", SAMR_ACCESS_CREATE_DOMAIN, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_ACCESS_ENUM_DOMAINS", SAMR_ACCESS_ENUM_DOMAINS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_ACCESS_OPEN_DOMAIN", SAMR_ACCESS_OPEN_DOMAIN, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_UserAccessMask(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserAccessMask(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserAccessMask(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_USER_ACCESS_GET_NAME_ETC", SAMR_USER_ACCESS_GET_NAME_ETC, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_USER_ACCESS_GET_LOCALE", SAMR_USER_ACCESS_GET_LOCALE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_USER_ACCESS_SET_LOC_COM", SAMR_USER_ACCESS_SET_LOC_COM, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_USER_ACCESS_GET_LOGONINFO", SAMR_USER_ACCESS_GET_LOGONINFO, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_USER_ACCESS_GET_ATTRIBUTES", SAMR_USER_ACCESS_GET_ATTRIBUTES, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_USER_ACCESS_SET_ATTRIBUTES", SAMR_USER_ACCESS_SET_ATTRIBUTES, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_USER_ACCESS_CHANGE_PASSWORD", SAMR_USER_ACCESS_CHANGE_PASSWORD, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_USER_ACCESS_SET_PASSWORD", SAMR_USER_ACCESS_SET_PASSWORD, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_USER_ACCESS_GET_GROUPS", SAMR_USER_ACCESS_GET_GROUPS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_USER_ACCESS_GET_GROUP_MEMBERSHIP", SAMR_USER_ACCESS_GET_GROUP_MEMBERSHIP, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_USER_ACCESS_CHANGE_GROUP_MEMBERSHIP", SAMR_USER_ACCESS_CHANGE_GROUP_MEMBERSHIP, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DomainAccessMask(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DomainAccessMask(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DomainAccessMask(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_DOMAIN_ACCESS_LOOKUP_INFO_1", SAMR_DOMAIN_ACCESS_LOOKUP_INFO_1, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_DOMAIN_ACCESS_SET_INFO_1", SAMR_DOMAIN_ACCESS_SET_INFO_1, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_DOMAIN_ACCESS_LOOKUP_INFO_2", SAMR_DOMAIN_ACCESS_LOOKUP_INFO_2, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_DOMAIN_ACCESS_SET_INFO_2", SAMR_DOMAIN_ACCESS_SET_INFO_2, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_DOMAIN_ACCESS_CREATE_USER", SAMR_DOMAIN_ACCESS_CREATE_USER, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_DOMAIN_ACCESS_CREATE_GROUP", SAMR_DOMAIN_ACCESS_CREATE_GROUP, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_DOMAIN_ACCESS_CREATE_ALIAS", SAMR_DOMAIN_ACCESS_CREATE_ALIAS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_DOMAIN_ACCESS_LOOKUP_ALIAS", SAMR_DOMAIN_ACCESS_LOOKUP_ALIAS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_DOMAIN_ACCESS_ENUM_ACCOUNTS", SAMR_DOMAIN_ACCESS_ENUM_ACCOUNTS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_DOMAIN_ACCESS_OPEN_ACCOUNT", SAMR_DOMAIN_ACCESS_OPEN_ACCOUNT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_DOMAIN_ACCESS_SET_INFO_3", SAMR_DOMAIN_ACCESS_SET_INFO_3, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_GroupAccessMask(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_GroupAccessMask(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_GroupAccessMask(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_GROUP_ACCESS_LOOKUP_INFO", SAMR_GROUP_ACCESS_LOOKUP_INFO, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_GROUP_ACCESS_SET_INFO", SAMR_GROUP_ACCESS_SET_INFO, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_GROUP_ACCESS_ADD_MEMBER", SAMR_GROUP_ACCESS_ADD_MEMBER, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_GROUP_ACCESS_REMOVE_MEMBER", SAMR_GROUP_ACCESS_REMOVE_MEMBER, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_GROUP_ACCESS_GET_MEMBERS", SAMR_GROUP_ACCESS_GET_MEMBERS, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_AliasAccessMask(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_AliasAccessMask(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_AliasAccessMask(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_ALIAS_ACCESS_ADD_MEMBER", SAMR_ALIAS_ACCESS_ADD_MEMBER, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_ALIAS_ACCESS_REMOVE_MEMBER", SAMR_ALIAS_ACCESS_REMOVE_MEMBER, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_ALIAS_ACCESS_GET_MEMBERS", SAMR_ALIAS_ACCESS_GET_MEMBERS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_ALIAS_ACCESS_LOOKUP_INFO", SAMR_ALIAS_ACCESS_LOOKUP_INFO, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_ALIAS_ACCESS_SET_INFO", SAMR_ALIAS_ACCESS_SET_INFO, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_SamEntry(struct ndr_push *ndr, int ndr_flags, const struct samr_SamEntry *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->idx));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_SamEntry(struct ndr_pull *ndr, int ndr_flags, struct samr_SamEntry *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->idx));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_SamEntry(struct ndr_print *ndr, const char *name, const struct samr_SamEntry *r)
-{
-	ndr_print_struct(ndr, name, "samr_SamEntry");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "idx", r->idx);
-	ndr_print_lsa_String(ndr, "name", &r->name);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_SamArray(struct ndr_push *ndr, int ndr_flags, const struct samr_SamArray *r)
-{
-	uint32_t cntr_entries_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->entries));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->entries) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_entries_1 = 0; cntr_entries_1 < r->count; cntr_entries_1++) {
-				NDR_CHECK(ndr_push_samr_SamEntry(ndr, NDR_SCALARS, &r->entries[cntr_entries_1]));
-			}
-			for (cntr_entries_1 = 0; cntr_entries_1 < r->count; cntr_entries_1++) {
-				NDR_CHECK(ndr_push_samr_SamEntry(ndr, NDR_BUFFERS, &r->entries[cntr_entries_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_SamArray(struct ndr_pull *ndr, int ndr_flags, struct samr_SamArray *r)
-{
-	uint32_t _ptr_entries;
-	uint32_t cntr_entries_1;
-	TALLOC_CTX *_mem_save_entries_0;
-	TALLOC_CTX *_mem_save_entries_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_entries));
-		if (_ptr_entries) {
-			NDR_PULL_ALLOC(ndr, r->entries);
-		} else {
-			r->entries = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->entries) {
-			_mem_save_entries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->entries, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->entries));
-			NDR_PULL_ALLOC_N(ndr, r->entries, ndr_get_array_size(ndr, &r->entries));
-			_mem_save_entries_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->entries, 0);
-			for (cntr_entries_1 = 0; cntr_entries_1 < r->count; cntr_entries_1++) {
-				NDR_CHECK(ndr_pull_samr_SamEntry(ndr, NDR_SCALARS, &r->entries[cntr_entries_1]));
-			}
-			for (cntr_entries_1 = 0; cntr_entries_1 < r->count; cntr_entries_1++) {
-				NDR_CHECK(ndr_pull_samr_SamEntry(ndr, NDR_BUFFERS, &r->entries[cntr_entries_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entries_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entries_0, 0);
-		}
-		if (r->entries) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->entries, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_SamArray(struct ndr_print *ndr, const char *name, const struct samr_SamArray *r)
-{
-	uint32_t cntr_entries_1;
-	ndr_print_struct(ndr, name, "samr_SamArray");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "entries", r->entries);
-	ndr->depth++;
-	if (r->entries) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "entries", r->count);
-		ndr->depth++;
-		for (cntr_entries_1=0;cntr_entries_1<r->count;cntr_entries_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_entries_1) != -1) {
-				ndr_print_samr_SamEntry(ndr, "entries", &r->entries[cntr_entries_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_Role(struct ndr_push *ndr, int ndr_flags, enum samr_Role r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_Role(struct ndr_pull *ndr, int ndr_flags, enum samr_Role *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_Role(struct ndr_print *ndr, const char *name, enum samr_Role r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case SAMR_ROLE_STANDALONE: val = "SAMR_ROLE_STANDALONE"; break;
-		case SAMR_ROLE_DOMAIN_MEMBER: val = "SAMR_ROLE_DOMAIN_MEMBER"; break;
-		case SAMR_ROLE_DOMAIN_BDC: val = "SAMR_ROLE_DOMAIN_BDC"; break;
-		case SAMR_ROLE_DOMAIN_PDC: val = "SAMR_ROLE_DOMAIN_PDC"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_samr_PasswordProperties(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_samr_PasswordProperties(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_PasswordProperties(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DOMAIN_PASSWORD_COMPLEX", DOMAIN_PASSWORD_COMPLEX, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DOMAIN_PASSWORD_NO_ANON_CHANGE", DOMAIN_PASSWORD_NO_ANON_CHANGE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DOMAIN_PASSWORD_NO_CLEAR_CHANGE", DOMAIN_PASSWORD_NO_CLEAR_CHANGE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DOMAIN_PASSWORD_LOCKOUT_ADMINS", DOMAIN_PASSWORD_LOCKOUT_ADMINS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DOMAIN_PASSWORD_STORE_CLEARTEXT", DOMAIN_PASSWORD_STORE_CLEARTEXT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "DOMAIN_REFUSE_PASSWORD_CHANGE", DOMAIN_REFUSE_PASSWORD_CHANGE, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DomInfo1(struct ndr_push *ndr, int ndr_flags, const struct samr_DomInfo1 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->min_password_length));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->password_history_length));
-		NDR_CHECK(ndr_push_samr_PasswordProperties(ndr, NDR_SCALARS, r->password_properties));
-		NDR_CHECK(ndr_push_dlong(ndr, NDR_SCALARS, r->max_password_age));
-		NDR_CHECK(ndr_push_dlong(ndr, NDR_SCALARS, r->min_password_age));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DomInfo1(struct ndr_pull *ndr, int ndr_flags, struct samr_DomInfo1 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->min_password_length));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->password_history_length));
-		NDR_CHECK(ndr_pull_samr_PasswordProperties(ndr, NDR_SCALARS, &r->password_properties));
-		NDR_CHECK(ndr_pull_dlong(ndr, NDR_SCALARS, &r->max_password_age));
-		NDR_CHECK(ndr_pull_dlong(ndr, NDR_SCALARS, &r->min_password_age));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DomInfo1(struct ndr_print *ndr, const char *name, const struct samr_DomInfo1 *r)
-{
-	ndr_print_struct(ndr, name, "samr_DomInfo1");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "min_password_length", r->min_password_length);
-	ndr_print_uint16(ndr, "password_history_length", r->password_history_length);
-	ndr_print_samr_PasswordProperties(ndr, "password_properties", r->password_properties);
-	ndr_print_dlong(ndr, "max_password_age", r->max_password_age);
-	ndr_print_dlong(ndr, "min_password_age", r->min_password_age);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DomInfo2(struct ndr_push *ndr, int ndr_flags, const struct samr_DomInfo2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->force_logoff_time));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->comment));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->domain_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->primary));
-		NDR_CHECK(ndr_push_udlong(ndr, NDR_SCALARS, r->sequence_num));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown2));
-		NDR_CHECK(ndr_push_samr_Role(ndr, NDR_SCALARS, r->role));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown3));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_users));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_groups));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_aliases));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->comment));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->domain_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->primary));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DomInfo2(struct ndr_pull *ndr, int ndr_flags, struct samr_DomInfo2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->force_logoff_time));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->comment));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->domain_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->primary));
-		NDR_CHECK(ndr_pull_udlong(ndr, NDR_SCALARS, &r->sequence_num));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_pull_samr_Role(ndr, NDR_SCALARS, &r->role));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_users));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_groups));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_aliases));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->comment));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->domain_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->primary));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DomInfo2(struct ndr_print *ndr, const char *name, const struct samr_DomInfo2 *r)
-{
-	ndr_print_struct(ndr, name, "samr_DomInfo2");
-	ndr->depth++;
-	ndr_print_NTTIME(ndr, "force_logoff_time", r->force_logoff_time);
-	ndr_print_lsa_String(ndr, "comment", &r->comment);
-	ndr_print_lsa_String(ndr, "domain_name", &r->domain_name);
-	ndr_print_lsa_String(ndr, "primary", &r->primary);
-	ndr_print_udlong(ndr, "sequence_num", r->sequence_num);
-	ndr_print_uint32(ndr, "unknown2", r->unknown2);
-	ndr_print_samr_Role(ndr, "role", r->role);
-	ndr_print_uint32(ndr, "unknown3", r->unknown3);
-	ndr_print_uint32(ndr, "num_users", r->num_users);
-	ndr_print_uint32(ndr, "num_groups", r->num_groups);
-	ndr_print_uint32(ndr, "num_aliases", r->num_aliases);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DomInfo3(struct ndr_push *ndr, int ndr_flags, const struct samr_DomInfo3 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->force_logoff_time));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DomInfo3(struct ndr_pull *ndr, int ndr_flags, struct samr_DomInfo3 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->force_logoff_time));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DomInfo3(struct ndr_print *ndr, const char *name, const struct samr_DomInfo3 *r)
-{
-	ndr_print_struct(ndr, name, "samr_DomInfo3");
-	ndr->depth++;
-	ndr_print_NTTIME(ndr, "force_logoff_time", r->force_logoff_time);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DomInfo4(struct ndr_push *ndr, int ndr_flags, const struct samr_DomInfo4 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->comment));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->comment));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DomInfo4(struct ndr_pull *ndr, int ndr_flags, struct samr_DomInfo4 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->comment));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->comment));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DomInfo4(struct ndr_print *ndr, const char *name, const struct samr_DomInfo4 *r)
-{
-	ndr_print_struct(ndr, name, "samr_DomInfo4");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "comment", &r->comment);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DomInfo5(struct ndr_push *ndr, int ndr_flags, const struct samr_DomInfo5 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->domain_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->domain_name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DomInfo5(struct ndr_pull *ndr, int ndr_flags, struct samr_DomInfo5 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->domain_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->domain_name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DomInfo5(struct ndr_print *ndr, const char *name, const struct samr_DomInfo5 *r)
-{
-	ndr_print_struct(ndr, name, "samr_DomInfo5");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "domain_name", &r->domain_name);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DomInfo6(struct ndr_push *ndr, int ndr_flags, const struct samr_DomInfo6 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->primary));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->primary));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DomInfo6(struct ndr_pull *ndr, int ndr_flags, struct samr_DomInfo6 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->primary));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->primary));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DomInfo6(struct ndr_print *ndr, const char *name, const struct samr_DomInfo6 *r)
-{
-	ndr_print_struct(ndr, name, "samr_DomInfo6");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "primary", &r->primary);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DomInfo7(struct ndr_push *ndr, int ndr_flags, const struct samr_DomInfo7 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_samr_Role(ndr, NDR_SCALARS, r->role));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DomInfo7(struct ndr_pull *ndr, int ndr_flags, struct samr_DomInfo7 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_samr_Role(ndr, NDR_SCALARS, &r->role));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DomInfo7(struct ndr_print *ndr, const char *name, const struct samr_DomInfo7 *r)
-{
-	ndr_print_struct(ndr, name, "samr_DomInfo7");
-	ndr->depth++;
-	ndr_print_samr_Role(ndr, "role", r->role);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DomInfo8(struct ndr_push *ndr, int ndr_flags, const struct samr_DomInfo8 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 8));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->sequence_num));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->domain_create_time));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DomInfo8(struct ndr_pull *ndr, int ndr_flags, struct samr_DomInfo8 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 8));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->sequence_num));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->domain_create_time));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DomInfo8(struct ndr_print *ndr, const char *name, const struct samr_DomInfo8 *r)
-{
-	ndr_print_struct(ndr, name, "samr_DomInfo8");
-	ndr->depth++;
-	ndr_print_hyper(ndr, "sequence_num", r->sequence_num);
-	ndr_print_NTTIME(ndr, "domain_create_time", r->domain_create_time);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DomInfo9(struct ndr_push *ndr, int ndr_flags, const struct samr_DomInfo9 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DomInfo9(struct ndr_pull *ndr, int ndr_flags, struct samr_DomInfo9 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DomInfo9(struct ndr_print *ndr, const char *name, const struct samr_DomInfo9 *r)
-{
-	ndr_print_struct(ndr, name, "samr_DomInfo9");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "unknown", r->unknown);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DomInfo11(struct ndr_push *ndr, int ndr_flags, const struct samr_DomInfo11 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 8));
-		NDR_CHECK(ndr_push_samr_DomInfo2(ndr, NDR_SCALARS, &r->info2));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->lockout_duration));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->lockout_window));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lockout_threshold));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_samr_DomInfo2(ndr, NDR_BUFFERS, &r->info2));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DomInfo11(struct ndr_pull *ndr, int ndr_flags, struct samr_DomInfo11 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 8));
-		NDR_CHECK(ndr_pull_samr_DomInfo2(ndr, NDR_SCALARS, &r->info2));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->lockout_duration));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->lockout_window));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lockout_threshold));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_samr_DomInfo2(ndr, NDR_BUFFERS, &r->info2));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DomInfo11(struct ndr_print *ndr, const char *name, const struct samr_DomInfo11 *r)
-{
-	ndr_print_struct(ndr, name, "samr_DomInfo11");
-	ndr->depth++;
-	ndr_print_samr_DomInfo2(ndr, "info2", &r->info2);
-	ndr_print_hyper(ndr, "lockout_duration", r->lockout_duration);
-	ndr_print_hyper(ndr, "lockout_window", r->lockout_window);
-	ndr_print_uint16(ndr, "lockout_threshold", r->lockout_threshold);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DomInfo12(struct ndr_push *ndr, int ndr_flags, const struct samr_DomInfo12 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 8));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->lockout_duration));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->lockout_window));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lockout_threshold));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DomInfo12(struct ndr_pull *ndr, int ndr_flags, struct samr_DomInfo12 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 8));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->lockout_duration));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->lockout_window));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lockout_threshold));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DomInfo12(struct ndr_print *ndr, const char *name, const struct samr_DomInfo12 *r)
-{
-	ndr_print_struct(ndr, name, "samr_DomInfo12");
-	ndr->depth++;
-	ndr_print_hyper(ndr, "lockout_duration", r->lockout_duration);
-	ndr_print_hyper(ndr, "lockout_window", r->lockout_window);
-	ndr_print_uint16(ndr, "lockout_threshold", r->lockout_threshold);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DomInfo13(struct ndr_push *ndr, int ndr_flags, const struct samr_DomInfo13 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 8));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->sequence_num));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->domain_create_time));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown1));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown2));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DomInfo13(struct ndr_pull *ndr, int ndr_flags, struct samr_DomInfo13 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 8));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->sequence_num));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->domain_create_time));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown2));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DomInfo13(struct ndr_print *ndr, const char *name, const struct samr_DomInfo13 *r)
-{
-	ndr_print_struct(ndr, name, "samr_DomInfo13");
-	ndr->depth++;
-	ndr_print_hyper(ndr, "sequence_num", r->sequence_num);
-	ndr_print_NTTIME(ndr, "domain_create_time", r->domain_create_time);
-	ndr_print_uint32(ndr, "unknown1", r->unknown1);
-	ndr_print_uint32(ndr, "unknown2", r->unknown2);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DomainInfo(struct ndr_push *ndr, int ndr_flags, const union samr_DomainInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 1: {
-				NDR_CHECK(ndr_push_samr_DomInfo1(ndr, NDR_SCALARS, &r->info1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_push_samr_DomInfo2(ndr, NDR_SCALARS, &r->info2));
-			break; }
-
-			case 3: {
-				NDR_CHECK(ndr_push_samr_DomInfo3(ndr, NDR_SCALARS, &r->info3));
-			break; }
-
-			case 4: {
-				NDR_CHECK(ndr_push_samr_DomInfo4(ndr, NDR_SCALARS, &r->info4));
-			break; }
-
-			case 5: {
-				NDR_CHECK(ndr_push_samr_DomInfo5(ndr, NDR_SCALARS, &r->info5));
-			break; }
-
-			case 6: {
-				NDR_CHECK(ndr_push_samr_DomInfo6(ndr, NDR_SCALARS, &r->info6));
-			break; }
-
-			case 7: {
-				NDR_CHECK(ndr_push_samr_DomInfo7(ndr, NDR_SCALARS, &r->info7));
-			break; }
-
-			case 8: {
-				NDR_CHECK(ndr_push_samr_DomInfo8(ndr, NDR_SCALARS, &r->info8));
-			break; }
-
-			case 9: {
-				NDR_CHECK(ndr_push_samr_DomInfo9(ndr, NDR_SCALARS, &r->info9));
-			break; }
-
-			case 11: {
-				NDR_CHECK(ndr_push_samr_DomInfo11(ndr, NDR_SCALARS, &r->info11));
-			break; }
-
-			case 12: {
-				NDR_CHECK(ndr_push_samr_DomInfo12(ndr, NDR_SCALARS, &r->info12));
-			break; }
-
-			case 13: {
-				NDR_CHECK(ndr_push_samr_DomInfo13(ndr, NDR_SCALARS, &r->info13));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 1:
-			break;
-
-			case 2:
-				NDR_CHECK(ndr_push_samr_DomInfo2(ndr, NDR_BUFFERS, &r->info2));
-			break;
-
-			case 3:
-			break;
-
-			case 4:
-				NDR_CHECK(ndr_push_samr_DomInfo4(ndr, NDR_BUFFERS, &r->info4));
-			break;
-
-			case 5:
-				NDR_CHECK(ndr_push_samr_DomInfo5(ndr, NDR_BUFFERS, &r->info5));
-			break;
-
-			case 6:
-				NDR_CHECK(ndr_push_samr_DomInfo6(ndr, NDR_BUFFERS, &r->info6));
-			break;
-
-			case 7:
-			break;
-
-			case 8:
-			break;
-
-			case 9:
-			break;
-
-			case 11:
-				NDR_CHECK(ndr_push_samr_DomInfo11(ndr, NDR_BUFFERS, &r->info11));
-			break;
-
-			case 12:
-			break;
-
-			case 13:
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DomainInfo(struct ndr_pull *ndr, int ndr_flags, union samr_DomainInfo *r)
-{
-	int level;
-	uint16_t _level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 1: {
-				NDR_CHECK(ndr_pull_samr_DomInfo1(ndr, NDR_SCALARS, &r->info1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_pull_samr_DomInfo2(ndr, NDR_SCALARS, &r->info2));
-			break; }
-
-			case 3: {
-				NDR_CHECK(ndr_pull_samr_DomInfo3(ndr, NDR_SCALARS, &r->info3));
-			break; }
-
-			case 4: {
-				NDR_CHECK(ndr_pull_samr_DomInfo4(ndr, NDR_SCALARS, &r->info4));
-			break; }
-
-			case 5: {
-				NDR_CHECK(ndr_pull_samr_DomInfo5(ndr, NDR_SCALARS, &r->info5));
-			break; }
-
-			case 6: {
-				NDR_CHECK(ndr_pull_samr_DomInfo6(ndr, NDR_SCALARS, &r->info6));
-			break; }
-
-			case 7: {
-				NDR_CHECK(ndr_pull_samr_DomInfo7(ndr, NDR_SCALARS, &r->info7));
-			break; }
-
-			case 8: {
-				NDR_CHECK(ndr_pull_samr_DomInfo8(ndr, NDR_SCALARS, &r->info8));
-			break; }
-
-			case 9: {
-				NDR_CHECK(ndr_pull_samr_DomInfo9(ndr, NDR_SCALARS, &r->info9));
-			break; }
-
-			case 11: {
-				NDR_CHECK(ndr_pull_samr_DomInfo11(ndr, NDR_SCALARS, &r->info11));
-			break; }
-
-			case 12: {
-				NDR_CHECK(ndr_pull_samr_DomInfo12(ndr, NDR_SCALARS, &r->info12));
-			break; }
-
-			case 13: {
-				NDR_CHECK(ndr_pull_samr_DomInfo13(ndr, NDR_SCALARS, &r->info13));
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 1:
-			break;
-
-			case 2:
-				NDR_CHECK(ndr_pull_samr_DomInfo2(ndr, NDR_BUFFERS, &r->info2));
-			break;
-
-			case 3:
-			break;
-
-			case 4:
-				NDR_CHECK(ndr_pull_samr_DomInfo4(ndr, NDR_BUFFERS, &r->info4));
-			break;
-
-			case 5:
-				NDR_CHECK(ndr_pull_samr_DomInfo5(ndr, NDR_BUFFERS, &r->info5));
-			break;
-
-			case 6:
-				NDR_CHECK(ndr_pull_samr_DomInfo6(ndr, NDR_BUFFERS, &r->info6));
-			break;
-
-			case 7:
-			break;
-
-			case 8:
-			break;
-
-			case 9:
-			break;
-
-			case 11:
-				NDR_CHECK(ndr_pull_samr_DomInfo11(ndr, NDR_BUFFERS, &r->info11));
-			break;
-
-			case 12:
-			break;
-
-			case 13:
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DomainInfo(struct ndr_print *ndr, const char *name, const union samr_DomainInfo *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "samr_DomainInfo");
-	switch (level) {
-		case 1:
-			ndr_print_samr_DomInfo1(ndr, "info1", &r->info1);
-		break;
-
-		case 2:
-			ndr_print_samr_DomInfo2(ndr, "info2", &r->info2);
-		break;
-
-		case 3:
-			ndr_print_samr_DomInfo3(ndr, "info3", &r->info3);
-		break;
-
-		case 4:
-			ndr_print_samr_DomInfo4(ndr, "info4", &r->info4);
-		break;
-
-		case 5:
-			ndr_print_samr_DomInfo5(ndr, "info5", &r->info5);
-		break;
-
-		case 6:
-			ndr_print_samr_DomInfo6(ndr, "info6", &r->info6);
-		break;
-
-		case 7:
-			ndr_print_samr_DomInfo7(ndr, "info7", &r->info7);
-		break;
-
-		case 8:
-			ndr_print_samr_DomInfo8(ndr, "info8", &r->info8);
-		break;
-
-		case 9:
-			ndr_print_samr_DomInfo9(ndr, "info9", &r->info9);
-		break;
-
-		case 11:
-			ndr_print_samr_DomInfo11(ndr, "info11", &r->info11);
-		break;
-
-		case 12:
-			ndr_print_samr_DomInfo12(ndr, "info12", &r->info12);
-		break;
-
-		case 13:
-			ndr_print_samr_DomInfo13(ndr, "info13", &r->info13);
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_samr_Ids(struct ndr_push *ndr, int ndr_flags, const struct samr_Ids *r)
-{
-	uint32_t cntr_ids_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->ids));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->ids) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_ids_1 = 0; cntr_ids_1 < r->count; cntr_ids_1++) {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->ids[cntr_ids_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_Ids(struct ndr_pull *ndr, int ndr_flags, struct samr_Ids *r)
-{
-	uint32_t _ptr_ids;
-	uint32_t cntr_ids_1;
-	TALLOC_CTX *_mem_save_ids_0;
-	TALLOC_CTX *_mem_save_ids_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		if (r->count < 0 || r->count > 1024) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ids));
-		if (_ptr_ids) {
-			NDR_PULL_ALLOC(ndr, r->ids);
-		} else {
-			r->ids = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->ids) {
-			_mem_save_ids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->ids, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->ids));
-			NDR_PULL_ALLOC_N(ndr, r->ids, ndr_get_array_size(ndr, &r->ids));
-			_mem_save_ids_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->ids, 0);
-			for (cntr_ids_1 = 0; cntr_ids_1 < r->count; cntr_ids_1++) {
-				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->ids[cntr_ids_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ids_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ids_0, 0);
-		}
-		if (r->ids) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->ids, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_Ids(struct ndr_print *ndr, const char *name, const struct samr_Ids *r)
-{
-	uint32_t cntr_ids_1;
-	ndr_print_struct(ndr, name, "samr_Ids");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "ids", r->ids);
-	ndr->depth++;
-	if (r->ids) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "ids", r->count);
-		ndr->depth++;
-		for (cntr_ids_1=0;cntr_ids_1<r->count;cntr_ids_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_ids_1) != -1) {
-				ndr_print_uint32(ndr, "ids", r->ids[cntr_ids_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_samr_GroupAttrs(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_samr_GroupAttrs(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_GroupAttrs(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SE_GROUP_MANDATORY", SE_GROUP_MANDATORY, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SE_GROUP_ENABLED_BY_DEFAULT", SE_GROUP_ENABLED_BY_DEFAULT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SE_GROUP_ENABLED", SE_GROUP_ENABLED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SE_GROUP_OWNER", SE_GROUP_OWNER, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SE_GROUP_USE_FOR_DENY_ONLY", SE_GROUP_USE_FOR_DENY_ONLY, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SE_GROUP_RESOURCE", SE_GROUP_RESOURCE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SE_GROUP_LOGON_ID", SE_GROUP_LOGON_ID, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_GroupInfoAll(struct ndr_push *ndr, int ndr_flags, const struct samr_GroupInfoAll *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->name));
-		NDR_CHECK(ndr_push_samr_GroupAttrs(ndr, NDR_SCALARS, r->attributes));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_members));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->description));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->description));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_GroupInfoAll(struct ndr_pull *ndr, int ndr_flags, struct samr_GroupInfoAll *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->name));
-		NDR_CHECK(ndr_pull_samr_GroupAttrs(ndr, NDR_SCALARS, &r->attributes));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_members));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->description));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->description));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_GroupInfoAll(struct ndr_print *ndr, const char *name, const struct samr_GroupInfoAll *r)
-{
-	ndr_print_struct(ndr, name, "samr_GroupInfoAll");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "name", &r->name);
-	ndr_print_samr_GroupAttrs(ndr, "attributes", r->attributes);
-	ndr_print_uint32(ndr, "num_members", r->num_members);
-	ndr_print_lsa_String(ndr, "description", &r->description);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_GroupInfoAttributes(struct ndr_push *ndr, int ndr_flags, const struct samr_GroupInfoAttributes *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_samr_GroupAttrs(ndr, NDR_SCALARS, r->attributes));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_GroupInfoAttributes(struct ndr_pull *ndr, int ndr_flags, struct samr_GroupInfoAttributes *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_samr_GroupAttrs(ndr, NDR_SCALARS, &r->attributes));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_GroupInfoAttributes(struct ndr_print *ndr, const char *name, const struct samr_GroupInfoAttributes *r)
-{
-	ndr_print_struct(ndr, name, "samr_GroupInfoAttributes");
-	ndr->depth++;
-	ndr_print_samr_GroupAttrs(ndr, "attributes", r->attributes);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_GroupInfoEnum(struct ndr_push *ndr, int ndr_flags, enum samr_GroupInfoEnum r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_GroupInfoEnum(struct ndr_pull *ndr, int ndr_flags, enum samr_GroupInfoEnum *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_GroupInfoEnum(struct ndr_print *ndr, const char *name, enum samr_GroupInfoEnum r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case GROUPINFOALL: val = "GROUPINFOALL"; break;
-		case GROUPINFONAME: val = "GROUPINFONAME"; break;
-		case GROUPINFOATTRIBUTES: val = "GROUPINFOATTRIBUTES"; break;
-		case GROUPINFODESCRIPTION: val = "GROUPINFODESCRIPTION"; break;
-		case GROUPINFOALL2: val = "GROUPINFOALL2"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_samr_GroupInfo(struct ndr_push *ndr, int ndr_flags, const union samr_GroupInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_samr_GroupInfoEnum(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case GROUPINFOALL: {
-				NDR_CHECK(ndr_push_samr_GroupInfoAll(ndr, NDR_SCALARS, &r->all));
-			break; }
-
-			case GROUPINFONAME: {
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->name));
-			break; }
-
-			case GROUPINFOATTRIBUTES: {
-				NDR_CHECK(ndr_push_samr_GroupInfoAttributes(ndr, NDR_SCALARS, &r->attributes));
-			break; }
-
-			case GROUPINFODESCRIPTION: {
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->description));
-			break; }
-
-			case GROUPINFOALL2: {
-				NDR_CHECK(ndr_push_samr_GroupInfoAll(ndr, NDR_SCALARS, &r->all2));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case GROUPINFOALL:
-				NDR_CHECK(ndr_push_samr_GroupInfoAll(ndr, NDR_BUFFERS, &r->all));
-			break;
-
-			case GROUPINFONAME:
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->name));
-			break;
-
-			case GROUPINFOATTRIBUTES:
-			break;
-
-			case GROUPINFODESCRIPTION:
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->description));
-			break;
-
-			case GROUPINFOALL2:
-				NDR_CHECK(ndr_push_samr_GroupInfoAll(ndr, NDR_BUFFERS, &r->all2));
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_GroupInfo(struct ndr_pull *ndr, int ndr_flags, union samr_GroupInfo *r)
-{
-	int level;
-	uint16_t _level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case GROUPINFOALL: {
-				NDR_CHECK(ndr_pull_samr_GroupInfoAll(ndr, NDR_SCALARS, &r->all));
-			break; }
-
-			case GROUPINFONAME: {
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->name));
-			break; }
-
-			case GROUPINFOATTRIBUTES: {
-				NDR_CHECK(ndr_pull_samr_GroupInfoAttributes(ndr, NDR_SCALARS, &r->attributes));
-			break; }
-
-			case GROUPINFODESCRIPTION: {
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->description));
-			break; }
-
-			case GROUPINFOALL2: {
-				NDR_CHECK(ndr_pull_samr_GroupInfoAll(ndr, NDR_SCALARS, &r->all2));
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case GROUPINFOALL:
-				NDR_CHECK(ndr_pull_samr_GroupInfoAll(ndr, NDR_BUFFERS, &r->all));
-			break;
-
-			case GROUPINFONAME:
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->name));
-			break;
-
-			case GROUPINFOATTRIBUTES:
-			break;
-
-			case GROUPINFODESCRIPTION:
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->description));
-			break;
-
-			case GROUPINFOALL2:
-				NDR_CHECK(ndr_pull_samr_GroupInfoAll(ndr, NDR_BUFFERS, &r->all2));
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_GroupInfo(struct ndr_print *ndr, const char *name, const union samr_GroupInfo *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "samr_GroupInfo");
-	switch (level) {
-		case GROUPINFOALL:
-			ndr_print_samr_GroupInfoAll(ndr, "all", &r->all);
-		break;
-
-		case GROUPINFONAME:
-			ndr_print_lsa_String(ndr, "name", &r->name);
-		break;
-
-		case GROUPINFOATTRIBUTES:
-			ndr_print_samr_GroupInfoAttributes(ndr, "attributes", &r->attributes);
-		break;
-
-		case GROUPINFODESCRIPTION:
-			ndr_print_lsa_String(ndr, "description", &r->description);
-		break;
-
-		case GROUPINFOALL2:
-			ndr_print_samr_GroupInfoAll(ndr, "all2", &r->all2);
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_samr_RidTypeArray(struct ndr_push *ndr, int ndr_flags, const struct samr_RidTypeArray *r)
-{
-	uint32_t cntr_rids_1;
-	uint32_t cntr_types_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->rids));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->types));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->rids) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_rids_1 = 0; cntr_rids_1 < r->count; cntr_rids_1++) {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rids[cntr_rids_1]));
-			}
-		}
-		if (r->types) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_types_1 = 0; cntr_types_1 < r->count; cntr_types_1++) {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->types[cntr_types_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_RidTypeArray(struct ndr_pull *ndr, int ndr_flags, struct samr_RidTypeArray *r)
-{
-	uint32_t _ptr_rids;
-	uint32_t cntr_rids_1;
-	TALLOC_CTX *_mem_save_rids_0;
-	TALLOC_CTX *_mem_save_rids_1;
-	uint32_t _ptr_types;
-	uint32_t cntr_types_1;
-	TALLOC_CTX *_mem_save_types_0;
-	TALLOC_CTX *_mem_save_types_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_rids));
-		if (_ptr_rids) {
-			NDR_PULL_ALLOC(ndr, r->rids);
-		} else {
-			r->rids = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_types));
-		if (_ptr_types) {
-			NDR_PULL_ALLOC(ndr, r->types);
-		} else {
-			r->types = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->rids) {
-			_mem_save_rids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->rids, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->rids));
-			NDR_PULL_ALLOC_N(ndr, r->rids, ndr_get_array_size(ndr, &r->rids));
-			_mem_save_rids_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->rids, 0);
-			for (cntr_rids_1 = 0; cntr_rids_1 < r->count; cntr_rids_1++) {
-				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rids[cntr_rids_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rids_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rids_0, 0);
-		}
-		if (r->types) {
-			_mem_save_types_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->types, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->types));
-			NDR_PULL_ALLOC_N(ndr, r->types, ndr_get_array_size(ndr, &r->types));
-			_mem_save_types_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->types, 0);
-			for (cntr_types_1 = 0; cntr_types_1 < r->count; cntr_types_1++) {
-				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->types[cntr_types_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_types_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_types_0, 0);
-		}
-		if (r->rids) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->rids, r->count));
-		}
-		if (r->types) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->types, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_RidTypeArray(struct ndr_print *ndr, const char *name, const struct samr_RidTypeArray *r)
-{
-	uint32_t cntr_rids_1;
-	uint32_t cntr_types_1;
-	ndr_print_struct(ndr, name, "samr_RidTypeArray");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "rids", r->rids);
-	ndr->depth++;
-	if (r->rids) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "rids", r->count);
-		ndr->depth++;
-		for (cntr_rids_1=0;cntr_rids_1<r->count;cntr_rids_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_rids_1) != -1) {
-				ndr_print_uint32(ndr, "rids", r->rids[cntr_rids_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "types", r->types);
-	ndr->depth++;
-	if (r->types) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "types", r->count);
-		ndr->depth++;
-		for (cntr_types_1=0;cntr_types_1<r->count;cntr_types_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_types_1) != -1) {
-				ndr_print_uint32(ndr, "types", r->types[cntr_types_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_AliasInfoAll(struct ndr_push *ndr, int ndr_flags, const struct samr_AliasInfoAll *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->name));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_members));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->description));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->description));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_AliasInfoAll(struct ndr_pull *ndr, int ndr_flags, struct samr_AliasInfoAll *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->name));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_members));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->description));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->description));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_AliasInfoAll(struct ndr_print *ndr, const char *name, const struct samr_AliasInfoAll *r)
-{
-	ndr_print_struct(ndr, name, "samr_AliasInfoAll");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "name", &r->name);
-	ndr_print_uint32(ndr, "num_members", r->num_members);
-	ndr_print_lsa_String(ndr, "description", &r->description);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_AliasInfoEnum(struct ndr_push *ndr, int ndr_flags, enum samr_AliasInfoEnum r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_AliasInfoEnum(struct ndr_pull *ndr, int ndr_flags, enum samr_AliasInfoEnum *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_AliasInfoEnum(struct ndr_print *ndr, const char *name, enum samr_AliasInfoEnum r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case ALIASINFOALL: val = "ALIASINFOALL"; break;
-		case ALIASINFONAME: val = "ALIASINFONAME"; break;
-		case ALIASINFODESCRIPTION: val = "ALIASINFODESCRIPTION"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_samr_AliasInfo(struct ndr_push *ndr, int ndr_flags, const union samr_AliasInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_samr_AliasInfoEnum(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case ALIASINFOALL: {
-				NDR_CHECK(ndr_push_samr_AliasInfoAll(ndr, NDR_SCALARS, &r->all));
-			break; }
-
-			case ALIASINFONAME: {
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->name));
-			break; }
-
-			case ALIASINFODESCRIPTION: {
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->description));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case ALIASINFOALL:
-				NDR_CHECK(ndr_push_samr_AliasInfoAll(ndr, NDR_BUFFERS, &r->all));
-			break;
-
-			case ALIASINFONAME:
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->name));
-			break;
-
-			case ALIASINFODESCRIPTION:
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->description));
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_AliasInfo(struct ndr_pull *ndr, int ndr_flags, union samr_AliasInfo *r)
-{
-	int level;
-	uint16_t _level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case ALIASINFOALL: {
-				NDR_CHECK(ndr_pull_samr_AliasInfoAll(ndr, NDR_SCALARS, &r->all));
-			break; }
-
-			case ALIASINFONAME: {
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->name));
-			break; }
-
-			case ALIASINFODESCRIPTION: {
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->description));
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case ALIASINFOALL:
-				NDR_CHECK(ndr_pull_samr_AliasInfoAll(ndr, NDR_BUFFERS, &r->all));
-			break;
-
-			case ALIASINFONAME:
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->name));
-			break;
-
-			case ALIASINFODESCRIPTION:
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->description));
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_AliasInfo(struct ndr_print *ndr, const char *name, const union samr_AliasInfo *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "samr_AliasInfo");
-	switch (level) {
-		case ALIASINFOALL:
-			ndr_print_samr_AliasInfoAll(ndr, "all", &r->all);
-		break;
-
-		case ALIASINFONAME:
-			ndr_print_lsa_String(ndr, "name", &r->name);
-		break;
-
-		case ALIASINFODESCRIPTION:
-			ndr_print_lsa_String(ndr, "description", &r->description);
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_samr_UserInfo1(struct ndr_push *ndr, int ndr_flags, const struct samr_UserInfo1 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->account_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->full_name));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->primary_gid));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->description));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->comment));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->account_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->full_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->description));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->comment));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserInfo1(struct ndr_pull *ndr, int ndr_flags, struct samr_UserInfo1 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->account_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->full_name));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->primary_gid));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->description));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->comment));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->account_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->full_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->description));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->comment));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserInfo1(struct ndr_print *ndr, const char *name, const struct samr_UserInfo1 *r)
-{
-	ndr_print_struct(ndr, name, "samr_UserInfo1");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "account_name", &r->account_name);
-	ndr_print_lsa_String(ndr, "full_name", &r->full_name);
-	ndr_print_uint32(ndr, "primary_gid", r->primary_gid);
-	ndr_print_lsa_String(ndr, "description", &r->description);
-	ndr_print_lsa_String(ndr, "comment", &r->comment);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_UserInfo2(struct ndr_push *ndr, int ndr_flags, const struct samr_UserInfo2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->comment));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->country_code));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->code_page));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->comment));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserInfo2(struct ndr_pull *ndr, int ndr_flags, struct samr_UserInfo2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->comment));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->country_code));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->code_page));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->comment));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserInfo2(struct ndr_print *ndr, const char *name, const struct samr_UserInfo2 *r)
-{
-	ndr_print_struct(ndr, name, "samr_UserInfo2");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "comment", &r->comment);
-	ndr_print_lsa_String(ndr, "unknown", &r->unknown);
-	ndr_print_uint16(ndr, "country_code", r->country_code);
-	ndr_print_uint16(ndr, "code_page", r->code_page);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_samr_LogonHours(struct ndr_push *ndr, int ndr_flags, const struct samr_LogonHours *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 4));
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->units_per_week));
-			NDR_CHECK(ndr_push_unique_ptr(ndr, r->bits));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-			if (r->bits) {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 1260));
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->units_per_week / 8));
-				NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->bits, r->units_per_week / 8));
-			}
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_samr_LogonHours(struct ndr_pull *ndr, int ndr_flags, struct samr_LogonHours *r)
-{
-	uint32_t _ptr_bits;
-	TALLOC_CTX *_mem_save_bits_0;
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 4));
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->units_per_week));
-			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_bits));
-			if (_ptr_bits) {
-				NDR_PULL_ALLOC(ndr, r->bits);
-			} else {
-				r->bits = NULL;
-			}
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-			if (r->bits) {
-				_mem_save_bits_0 = NDR_PULL_GET_MEM_CTX(ndr);
-				NDR_PULL_SET_MEM_CTX(ndr, r->bits, 0);
-				NDR_CHECK(ndr_pull_array_size(ndr, &r->bits));
-				NDR_CHECK(ndr_pull_array_length(ndr, &r->bits));
-				if (ndr_get_array_length(ndr, &r->bits) > ndr_get_array_size(ndr, &r->bits)) {
-					return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->bits), ndr_get_array_length(ndr, &r->bits));
-				}
-				NDR_PULL_ALLOC_N(ndr, r->bits, ndr_get_array_size(ndr, &r->bits));
-				NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->bits, ndr_get_array_length(ndr, &r->bits)));
-				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_bits_0, 0);
-			}
-			if (r->bits) {
-				NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->bits, 1260));
-			}
-			if (r->bits) {
-				NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->bits, r->units_per_week / 8));
-			}
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_LogonHours(struct ndr_print *ndr, const char *name, const struct samr_LogonHours *r)
-{
-	ndr_print_struct(ndr, name, "samr_LogonHours");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		ndr->depth++;
-		ndr_print_uint16(ndr, "units_per_week", r->units_per_week);
-		ndr_print_ptr(ndr, "bits", r->bits);
-		ndr->depth++;
-		if (r->bits) {
-			ndr_print_array_uint8(ndr, "bits", r->bits, r->units_per_week / 8);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-
-static enum ndr_err_code ndr_push_samr_UserInfo3(struct ndr_push *ndr, int ndr_flags, const struct samr_UserInfo3 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->account_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->full_name));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->primary_gid));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->home_directory));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->home_drive));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->logon_script));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->profile_path));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->workstations));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->last_logon));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->last_logoff));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->last_password_change));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->allow_password_change));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->force_password_change));
-		NDR_CHECK(ndr_push_samr_LogonHours(ndr, NDR_SCALARS, &r->logon_hours));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->bad_password_count));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->logon_count));
-		NDR_CHECK(ndr_push_samr_AcctFlags(ndr, NDR_SCALARS, r->acct_flags));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->account_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->full_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->home_directory));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->home_drive));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->logon_script));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->profile_path));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->workstations));
-		NDR_CHECK(ndr_push_samr_LogonHours(ndr, NDR_BUFFERS, &r->logon_hours));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserInfo3(struct ndr_pull *ndr, int ndr_flags, struct samr_UserInfo3 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->account_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->full_name));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->primary_gid));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->home_directory));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->home_drive));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->logon_script));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->profile_path));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->workstations));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->last_logon));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->last_logoff));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->last_password_change));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->allow_password_change));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->force_password_change));
-		NDR_CHECK(ndr_pull_samr_LogonHours(ndr, NDR_SCALARS, &r->logon_hours));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->bad_password_count));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->logon_count));
-		NDR_CHECK(ndr_pull_samr_AcctFlags(ndr, NDR_SCALARS, &r->acct_flags));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->account_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->full_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->home_directory));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->home_drive));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->logon_script));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->profile_path));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->workstations));
-		NDR_CHECK(ndr_pull_samr_LogonHours(ndr, NDR_BUFFERS, &r->logon_hours));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserInfo3(struct ndr_print *ndr, const char *name, const struct samr_UserInfo3 *r)
-{
-	ndr_print_struct(ndr, name, "samr_UserInfo3");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "account_name", &r->account_name);
-	ndr_print_lsa_String(ndr, "full_name", &r->full_name);
-	ndr_print_uint32(ndr, "rid", r->rid);
-	ndr_print_uint32(ndr, "primary_gid", r->primary_gid);
-	ndr_print_lsa_String(ndr, "home_directory", &r->home_directory);
-	ndr_print_lsa_String(ndr, "home_drive", &r->home_drive);
-	ndr_print_lsa_String(ndr, "logon_script", &r->logon_script);
-	ndr_print_lsa_String(ndr, "profile_path", &r->profile_path);
-	ndr_print_lsa_String(ndr, "workstations", &r->workstations);
-	ndr_print_NTTIME(ndr, "last_logon", r->last_logon);
-	ndr_print_NTTIME(ndr, "last_logoff", r->last_logoff);
-	ndr_print_NTTIME(ndr, "last_password_change", r->last_password_change);
-	ndr_print_NTTIME(ndr, "allow_password_change", r->allow_password_change);
-	ndr_print_NTTIME(ndr, "force_password_change", r->force_password_change);
-	ndr_print_samr_LogonHours(ndr, "logon_hours", &r->logon_hours);
-	ndr_print_uint16(ndr, "bad_password_count", r->bad_password_count);
-	ndr_print_uint16(ndr, "logon_count", r->logon_count);
-	ndr_print_samr_AcctFlags(ndr, "acct_flags", r->acct_flags);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_UserInfo4(struct ndr_push *ndr, int ndr_flags, const struct samr_UserInfo4 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_samr_LogonHours(ndr, NDR_SCALARS, &r->logon_hours));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_samr_LogonHours(ndr, NDR_BUFFERS, &r->logon_hours));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserInfo4(struct ndr_pull *ndr, int ndr_flags, struct samr_UserInfo4 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_samr_LogonHours(ndr, NDR_SCALARS, &r->logon_hours));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_samr_LogonHours(ndr, NDR_BUFFERS, &r->logon_hours));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserInfo4(struct ndr_print *ndr, const char *name, const struct samr_UserInfo4 *r)
-{
-	ndr_print_struct(ndr, name, "samr_UserInfo4");
-	ndr->depth++;
-	ndr_print_samr_LogonHours(ndr, "logon_hours", &r->logon_hours);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_UserInfo5(struct ndr_push *ndr, int ndr_flags, const struct samr_UserInfo5 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->account_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->full_name));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->primary_gid));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->home_directory));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->home_drive));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->logon_script));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->profile_path));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->description));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->workstations));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->last_logon));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->last_logoff));
-		NDR_CHECK(ndr_push_samr_LogonHours(ndr, NDR_SCALARS, &r->logon_hours));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->bad_password_count));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->logon_count));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->last_password_change));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->acct_expiry));
-		NDR_CHECK(ndr_push_samr_AcctFlags(ndr, NDR_SCALARS, r->acct_flags));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->account_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->full_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->home_directory));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->home_drive));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->logon_script));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->profile_path));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->description));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->workstations));
-		NDR_CHECK(ndr_push_samr_LogonHours(ndr, NDR_BUFFERS, &r->logon_hours));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserInfo5(struct ndr_pull *ndr, int ndr_flags, struct samr_UserInfo5 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->account_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->full_name));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->primary_gid));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->home_directory));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->home_drive));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->logon_script));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->profile_path));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->description));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->workstations));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->last_logon));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->last_logoff));
-		NDR_CHECK(ndr_pull_samr_LogonHours(ndr, NDR_SCALARS, &r->logon_hours));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->bad_password_count));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->logon_count));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->last_password_change));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->acct_expiry));
-		NDR_CHECK(ndr_pull_samr_AcctFlags(ndr, NDR_SCALARS, &r->acct_flags));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->account_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->full_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->home_directory));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->home_drive));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->logon_script));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->profile_path));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->description));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->workstations));
-		NDR_CHECK(ndr_pull_samr_LogonHours(ndr, NDR_BUFFERS, &r->logon_hours));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserInfo5(struct ndr_print *ndr, const char *name, const struct samr_UserInfo5 *r)
-{
-	ndr_print_struct(ndr, name, "samr_UserInfo5");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "account_name", &r->account_name);
-	ndr_print_lsa_String(ndr, "full_name", &r->full_name);
-	ndr_print_uint32(ndr, "rid", r->rid);
-	ndr_print_uint32(ndr, "primary_gid", r->primary_gid);
-	ndr_print_lsa_String(ndr, "home_directory", &r->home_directory);
-	ndr_print_lsa_String(ndr, "home_drive", &r->home_drive);
-	ndr_print_lsa_String(ndr, "logon_script", &r->logon_script);
-	ndr_print_lsa_String(ndr, "profile_path", &r->profile_path);
-	ndr_print_lsa_String(ndr, "description", &r->description);
-	ndr_print_lsa_String(ndr, "workstations", &r->workstations);
-	ndr_print_NTTIME(ndr, "last_logon", r->last_logon);
-	ndr_print_NTTIME(ndr, "last_logoff", r->last_logoff);
-	ndr_print_samr_LogonHours(ndr, "logon_hours", &r->logon_hours);
-	ndr_print_uint16(ndr, "bad_password_count", r->bad_password_count);
-	ndr_print_uint16(ndr, "logon_count", r->logon_count);
-	ndr_print_NTTIME(ndr, "last_password_change", r->last_password_change);
-	ndr_print_NTTIME(ndr, "acct_expiry", r->acct_expiry);
-	ndr_print_samr_AcctFlags(ndr, "acct_flags", r->acct_flags);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_UserInfo6(struct ndr_push *ndr, int ndr_flags, const struct samr_UserInfo6 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->account_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->full_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->account_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->full_name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserInfo6(struct ndr_pull *ndr, int ndr_flags, struct samr_UserInfo6 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->account_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->full_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->account_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->full_name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserInfo6(struct ndr_print *ndr, const char *name, const struct samr_UserInfo6 *r)
-{
-	ndr_print_struct(ndr, name, "samr_UserInfo6");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "account_name", &r->account_name);
-	ndr_print_lsa_String(ndr, "full_name", &r->full_name);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_UserInfo7(struct ndr_push *ndr, int ndr_flags, const struct samr_UserInfo7 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->account_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->account_name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserInfo7(struct ndr_pull *ndr, int ndr_flags, struct samr_UserInfo7 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->account_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->account_name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserInfo7(struct ndr_print *ndr, const char *name, const struct samr_UserInfo7 *r)
-{
-	ndr_print_struct(ndr, name, "samr_UserInfo7");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "account_name", &r->account_name);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_UserInfo8(struct ndr_push *ndr, int ndr_flags, const struct samr_UserInfo8 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->full_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->full_name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserInfo8(struct ndr_pull *ndr, int ndr_flags, struct samr_UserInfo8 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->full_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->full_name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserInfo8(struct ndr_print *ndr, const char *name, const struct samr_UserInfo8 *r)
-{
-	ndr_print_struct(ndr, name, "samr_UserInfo8");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "full_name", &r->full_name);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_UserInfo9(struct ndr_push *ndr, int ndr_flags, const struct samr_UserInfo9 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->primary_gid));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserInfo9(struct ndr_pull *ndr, int ndr_flags, struct samr_UserInfo9 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->primary_gid));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserInfo9(struct ndr_print *ndr, const char *name, const struct samr_UserInfo9 *r)
-{
-	ndr_print_struct(ndr, name, "samr_UserInfo9");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "primary_gid", r->primary_gid);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_UserInfo10(struct ndr_push *ndr, int ndr_flags, const struct samr_UserInfo10 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->home_directory));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->home_drive));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->home_directory));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->home_drive));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserInfo10(struct ndr_pull *ndr, int ndr_flags, struct samr_UserInfo10 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->home_directory));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->home_drive));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->home_directory));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->home_drive));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserInfo10(struct ndr_print *ndr, const char *name, const struct samr_UserInfo10 *r)
-{
-	ndr_print_struct(ndr, name, "samr_UserInfo10");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "home_directory", &r->home_directory);
-	ndr_print_lsa_String(ndr, "home_drive", &r->home_drive);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_UserInfo11(struct ndr_push *ndr, int ndr_flags, const struct samr_UserInfo11 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->logon_script));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->logon_script));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserInfo11(struct ndr_pull *ndr, int ndr_flags, struct samr_UserInfo11 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->logon_script));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->logon_script));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserInfo11(struct ndr_print *ndr, const char *name, const struct samr_UserInfo11 *r)
-{
-	ndr_print_struct(ndr, name, "samr_UserInfo11");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "logon_script", &r->logon_script);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_UserInfo12(struct ndr_push *ndr, int ndr_flags, const struct samr_UserInfo12 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->profile_path));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->profile_path));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserInfo12(struct ndr_pull *ndr, int ndr_flags, struct samr_UserInfo12 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->profile_path));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->profile_path));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserInfo12(struct ndr_print *ndr, const char *name, const struct samr_UserInfo12 *r)
-{
-	ndr_print_struct(ndr, name, "samr_UserInfo12");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "profile_path", &r->profile_path);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_UserInfo13(struct ndr_push *ndr, int ndr_flags, const struct samr_UserInfo13 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->description));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->description));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserInfo13(struct ndr_pull *ndr, int ndr_flags, struct samr_UserInfo13 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->description));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->description));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserInfo13(struct ndr_print *ndr, const char *name, const struct samr_UserInfo13 *r)
-{
-	ndr_print_struct(ndr, name, "samr_UserInfo13");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "description", &r->description);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_UserInfo14(struct ndr_push *ndr, int ndr_flags, const struct samr_UserInfo14 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->workstations));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->workstations));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserInfo14(struct ndr_pull *ndr, int ndr_flags, struct samr_UserInfo14 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->workstations));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->workstations));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserInfo14(struct ndr_print *ndr, const char *name, const struct samr_UserInfo14 *r)
-{
-	ndr_print_struct(ndr, name, "samr_UserInfo14");
-	ndr->depth++;
-	ndr_print_lsa_String(ndr, "workstations", &r->workstations);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_UserInfo16(struct ndr_push *ndr, int ndr_flags, const struct samr_UserInfo16 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_samr_AcctFlags(ndr, NDR_SCALARS, r->acct_flags));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserInfo16(struct ndr_pull *ndr, int ndr_flags, struct samr_UserInfo16 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_samr_AcctFlags(ndr, NDR_SCALARS, &r->acct_flags));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserInfo16(struct ndr_print *ndr, const char *name, const struct samr_UserInfo16 *r)
-{
-	ndr_print_struct(ndr, name, "samr_UserInfo16");
-	ndr->depth++;
-	ndr_print_samr_AcctFlags(ndr, "acct_flags", r->acct_flags);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_UserInfo17(struct ndr_push *ndr, int ndr_flags, const struct samr_UserInfo17 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->acct_expiry));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserInfo17(struct ndr_pull *ndr, int ndr_flags, struct samr_UserInfo17 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->acct_expiry));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserInfo17(struct ndr_print *ndr, const char *name, const struct samr_UserInfo17 *r)
-{
-	ndr_print_struct(ndr, name, "samr_UserInfo17");
-	ndr->depth++;
-	ndr_print_NTTIME(ndr, "acct_expiry", r->acct_expiry);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_samr_Password(struct ndr_push *ndr, int ndr_flags, const struct samr_Password *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 1));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->hash, 16));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_samr_Password(struct ndr_pull *ndr, int ndr_flags, struct samr_Password *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 1));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->hash, 16));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_Password(struct ndr_print *ndr, const char *name, const struct samr_Password *r)
-{
-	ndr_print_struct(ndr, name, "samr_Password");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "hash", r->hash, 16);
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-
-static enum ndr_err_code ndr_push_samr_UserInfo18(struct ndr_push *ndr, int ndr_flags, const struct samr_UserInfo18 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 1));
-		NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, &r->lm_pwd));
-		NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, &r->nt_pwd));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->lm_pwd_active));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->nt_pwd_active));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserInfo18(struct ndr_pull *ndr, int ndr_flags, struct samr_UserInfo18 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 1));
-		NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, &r->lm_pwd));
-		NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, &r->nt_pwd));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->lm_pwd_active));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->nt_pwd_active));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserInfo18(struct ndr_print *ndr, const char *name, const struct samr_UserInfo18 *r)
-{
-	ndr_print_struct(ndr, name, "samr_UserInfo18");
-	ndr->depth++;
-	ndr_print_samr_Password(ndr, "lm_pwd", &r->lm_pwd);
-	ndr_print_samr_Password(ndr, "nt_pwd", &r->nt_pwd);
-	ndr_print_uint8(ndr, "lm_pwd_active", r->lm_pwd_active);
-	ndr_print_uint8(ndr, "nt_pwd_active", r->nt_pwd_active);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_UserInfo20(struct ndr_push *ndr, int ndr_flags, const struct samr_UserInfo20 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_lsa_BinaryString(ndr, NDR_SCALARS, &r->parameters));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_BinaryString(ndr, NDR_BUFFERS, &r->parameters));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserInfo20(struct ndr_pull *ndr, int ndr_flags, struct samr_UserInfo20 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_lsa_BinaryString(ndr, NDR_SCALARS, &r->parameters));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_BinaryString(ndr, NDR_BUFFERS, &r->parameters));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserInfo20(struct ndr_print *ndr, const char *name, const struct samr_UserInfo20 *r)
-{
-	ndr_print_struct(ndr, name, "samr_UserInfo20");
-	ndr->depth++;
-	ndr_print_lsa_BinaryString(ndr, "parameters", &r->parameters);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_FieldsPresent(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_FieldsPresent(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_FieldsPresent(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_ACCOUNT_NAME", SAMR_FIELD_ACCOUNT_NAME, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_FULL_NAME", SAMR_FIELD_FULL_NAME, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_RID", SAMR_FIELD_RID, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_PRIMARY_GID", SAMR_FIELD_PRIMARY_GID, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_DESCRIPTION", SAMR_FIELD_DESCRIPTION, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_COMMENT", SAMR_FIELD_COMMENT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_HOME_DIRECTORY", SAMR_FIELD_HOME_DIRECTORY, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_HOME_DRIVE", SAMR_FIELD_HOME_DRIVE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_LOGON_SCRIPT", SAMR_FIELD_LOGON_SCRIPT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_PROFILE_PATH", SAMR_FIELD_PROFILE_PATH, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_WORKSTATIONS", SAMR_FIELD_WORKSTATIONS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_LAST_LOGON", SAMR_FIELD_LAST_LOGON, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_LAST_LOGOFF", SAMR_FIELD_LAST_LOGOFF, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_LOGON_HOURS", SAMR_FIELD_LOGON_HOURS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_BAD_PWD_COUNT", SAMR_FIELD_BAD_PWD_COUNT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_NUM_LOGONS", SAMR_FIELD_NUM_LOGONS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_ALLOW_PWD_CHANGE", SAMR_FIELD_ALLOW_PWD_CHANGE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_FORCE_PWD_CHANGE", SAMR_FIELD_FORCE_PWD_CHANGE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_LAST_PWD_CHANGE", SAMR_FIELD_LAST_PWD_CHANGE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_ACCT_EXPIRY", SAMR_FIELD_ACCT_EXPIRY, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_ACCT_FLAGS", SAMR_FIELD_ACCT_FLAGS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_PARAMETERS", SAMR_FIELD_PARAMETERS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_COUNTRY_CODE", SAMR_FIELD_COUNTRY_CODE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_CODE_PAGE", SAMR_FIELD_CODE_PAGE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_PASSWORD", SAMR_FIELD_PASSWORD, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_PASSWORD2", SAMR_FIELD_PASSWORD2, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_PRIVATE_DATA", SAMR_FIELD_PRIVATE_DATA, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_EXPIRED_FLAG", SAMR_FIELD_EXPIRED_FLAG, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_SEC_DESC", SAMR_FIELD_SEC_DESC, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_OWF_PWD", SAMR_FIELD_OWF_PWD, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_UserInfo21(struct ndr_push *ndr, int ndr_flags, const struct samr_UserInfo21 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->last_logon));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->last_logoff));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->last_password_change));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->acct_expiry));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->allow_password_change));
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->force_password_change));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->account_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->full_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->home_directory));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->home_drive));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->logon_script));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->profile_path));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->description));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->workstations));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->comment));
-		NDR_CHECK(ndr_push_lsa_BinaryString(ndr, NDR_SCALARS, &r->parameters));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->buf_count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->buffer));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->primary_gid));
-		NDR_CHECK(ndr_push_samr_AcctFlags(ndr, NDR_SCALARS, r->acct_flags));
-		NDR_CHECK(ndr_push_samr_FieldsPresent(ndr, NDR_SCALARS, r->fields_present));
-		NDR_CHECK(ndr_push_samr_LogonHours(ndr, NDR_SCALARS, &r->logon_hours));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->bad_password_count));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->logon_count));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->country_code));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->code_page));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->nt_password_set));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->lm_password_set));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->password_expired));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->unknown4));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->account_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->full_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->home_directory));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->home_drive));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->logon_script));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->profile_path));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->description));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->workstations));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->comment));
-		NDR_CHECK(ndr_push_lsa_BinaryString(ndr, NDR_BUFFERS, &r->parameters));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown1));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
-		if (r->buffer) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->buf_count));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->buffer, r->buf_count));
-		}
-		NDR_CHECK(ndr_push_samr_LogonHours(ndr, NDR_BUFFERS, &r->logon_hours));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserInfo21(struct ndr_pull *ndr, int ndr_flags, struct samr_UserInfo21 *r)
-{
-	uint32_t _ptr_buffer;
-	TALLOC_CTX *_mem_save_buffer_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->last_logon));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->last_logoff));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->last_password_change));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->acct_expiry));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->allow_password_change));
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->force_password_change));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->account_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->full_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->home_directory));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->home_drive));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->logon_script));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->profile_path));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->description));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->workstations));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->comment));
-		NDR_CHECK(ndr_pull_lsa_BinaryString(ndr, NDR_SCALARS, &r->parameters));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->buf_count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_buffer));
-		if (_ptr_buffer) {
-			NDR_PULL_ALLOC(ndr, r->buffer);
-		} else {
-			r->buffer = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->primary_gid));
-		NDR_CHECK(ndr_pull_samr_AcctFlags(ndr, NDR_SCALARS, &r->acct_flags));
-		NDR_CHECK(ndr_pull_samr_FieldsPresent(ndr, NDR_SCALARS, &r->fields_present));
-		NDR_CHECK(ndr_pull_samr_LogonHours(ndr, NDR_SCALARS, &r->logon_hours));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->bad_password_count));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->logon_count));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->country_code));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->code_page));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->nt_password_set));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->lm_password_set));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->password_expired));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->unknown4));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->account_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->full_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->home_directory));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->home_drive));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->logon_script));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->profile_path));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->description));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->workstations));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->comment));
-		NDR_CHECK(ndr_pull_lsa_BinaryString(ndr, NDR_BUFFERS, &r->parameters));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown1));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
-		if (r->buffer) {
-			_mem_save_buffer_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->buffer, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->buffer));
-			NDR_PULL_ALLOC_N(ndr, r->buffer, ndr_get_array_size(ndr, &r->buffer));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->buffer, ndr_get_array_size(ndr, &r->buffer)));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_buffer_0, 0);
-		}
-		NDR_CHECK(ndr_pull_samr_LogonHours(ndr, NDR_BUFFERS, &r->logon_hours));
-		if (r->buffer) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->buffer, r->buf_count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserInfo21(struct ndr_print *ndr, const char *name, const struct samr_UserInfo21 *r)
-{
-	ndr_print_struct(ndr, name, "samr_UserInfo21");
-	ndr->depth++;
-	ndr_print_NTTIME(ndr, "last_logon", r->last_logon);
-	ndr_print_NTTIME(ndr, "last_logoff", r->last_logoff);
-	ndr_print_NTTIME(ndr, "last_password_change", r->last_password_change);
-	ndr_print_NTTIME(ndr, "acct_expiry", r->acct_expiry);
-	ndr_print_NTTIME(ndr, "allow_password_change", r->allow_password_change);
-	ndr_print_NTTIME(ndr, "force_password_change", r->force_password_change);
-	ndr_print_lsa_String(ndr, "account_name", &r->account_name);
-	ndr_print_lsa_String(ndr, "full_name", &r->full_name);
-	ndr_print_lsa_String(ndr, "home_directory", &r->home_directory);
-	ndr_print_lsa_String(ndr, "home_drive", &r->home_drive);
-	ndr_print_lsa_String(ndr, "logon_script", &r->logon_script);
-	ndr_print_lsa_String(ndr, "profile_path", &r->profile_path);
-	ndr_print_lsa_String(ndr, "description", &r->description);
-	ndr_print_lsa_String(ndr, "workstations", &r->workstations);
-	ndr_print_lsa_String(ndr, "comment", &r->comment);
-	ndr_print_lsa_BinaryString(ndr, "parameters", &r->parameters);
-	ndr_print_lsa_String(ndr, "unknown1", &r->unknown1);
-	ndr_print_lsa_String(ndr, "unknown2", &r->unknown2);
-	ndr_print_lsa_String(ndr, "unknown3", &r->unknown3);
-	ndr_print_uint32(ndr, "buf_count", r->buf_count);
-	ndr_print_ptr(ndr, "buffer", r->buffer);
-	ndr->depth++;
-	if (r->buffer) {
-		ndr_print_array_uint8(ndr, "buffer", r->buffer, r->buf_count);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "rid", r->rid);
-	ndr_print_uint32(ndr, "primary_gid", r->primary_gid);
-	ndr_print_samr_AcctFlags(ndr, "acct_flags", r->acct_flags);
-	ndr_print_samr_FieldsPresent(ndr, "fields_present", r->fields_present);
-	ndr_print_samr_LogonHours(ndr, "logon_hours", &r->logon_hours);
-	ndr_print_uint16(ndr, "bad_password_count", r->bad_password_count);
-	ndr_print_uint16(ndr, "logon_count", r->logon_count);
-	ndr_print_uint16(ndr, "country_code", r->country_code);
-	ndr_print_uint16(ndr, "code_page", r->code_page);
-	ndr_print_uint8(ndr, "nt_password_set", r->nt_password_set);
-	ndr_print_uint8(ndr, "lm_password_set", r->lm_password_set);
-	ndr_print_uint8(ndr, "password_expired", r->password_expired);
-	ndr_print_uint8(ndr, "unknown4", r->unknown4);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_samr_CryptPassword(struct ndr_push *ndr, int ndr_flags, const struct samr_CryptPassword *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 1));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->data, 516));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_samr_CryptPassword(struct ndr_pull *ndr, int ndr_flags, struct samr_CryptPassword *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 1));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->data, 516));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_CryptPassword(struct ndr_print *ndr, const char *name, const struct samr_CryptPassword *r)
-{
-	ndr_print_struct(ndr, name, "samr_CryptPassword");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "data", r->data, 516);
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-
-static enum ndr_err_code ndr_push_samr_UserInfo23(struct ndr_push *ndr, int ndr_flags, const struct samr_UserInfo23 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_samr_UserInfo21(ndr, NDR_SCALARS, &r->info));
-		NDR_CHECK(ndr_push_samr_CryptPassword(ndr, NDR_SCALARS, &r->password));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_samr_UserInfo21(ndr, NDR_BUFFERS, &r->info));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserInfo23(struct ndr_pull *ndr, int ndr_flags, struct samr_UserInfo23 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_samr_UserInfo21(ndr, NDR_SCALARS, &r->info));
-		NDR_CHECK(ndr_pull_samr_CryptPassword(ndr, NDR_SCALARS, &r->password));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_samr_UserInfo21(ndr, NDR_BUFFERS, &r->info));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserInfo23(struct ndr_print *ndr, const char *name, const struct samr_UserInfo23 *r)
-{
-	ndr_print_struct(ndr, name, "samr_UserInfo23");
-	ndr->depth++;
-	ndr_print_samr_UserInfo21(ndr, "info", &r->info);
-	ndr_print_samr_CryptPassword(ndr, "password", &r->password);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_UserInfo24(struct ndr_push *ndr, int ndr_flags, const struct samr_UserInfo24 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 1));
-		NDR_CHECK(ndr_push_samr_CryptPassword(ndr, NDR_SCALARS, &r->password));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->pw_len));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserInfo24(struct ndr_pull *ndr, int ndr_flags, struct samr_UserInfo24 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 1));
-		NDR_CHECK(ndr_pull_samr_CryptPassword(ndr, NDR_SCALARS, &r->password));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->pw_len));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserInfo24(struct ndr_print *ndr, const char *name, const struct samr_UserInfo24 *r)
-{
-	ndr_print_struct(ndr, name, "samr_UserInfo24");
-	ndr->depth++;
-	ndr_print_samr_CryptPassword(ndr, "password", &r->password);
-	ndr_print_uint8(ndr, "pw_len", r->pw_len);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_CryptPasswordEx(struct ndr_push *ndr, int ndr_flags, const struct samr_CryptPasswordEx *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 1));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->data, 532));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_CryptPasswordEx(struct ndr_pull *ndr, int ndr_flags, struct samr_CryptPasswordEx *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 1));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->data, 532));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_CryptPasswordEx(struct ndr_print *ndr, const char *name, const struct samr_CryptPasswordEx *r)
-{
-	ndr_print_struct(ndr, name, "samr_CryptPasswordEx");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "data", r->data, 532);
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-
-static enum ndr_err_code ndr_push_samr_UserInfo25(struct ndr_push *ndr, int ndr_flags, const struct samr_UserInfo25 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_samr_UserInfo21(ndr, NDR_SCALARS, &r->info));
-		NDR_CHECK(ndr_push_samr_CryptPasswordEx(ndr, NDR_SCALARS, &r->password));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_samr_UserInfo21(ndr, NDR_BUFFERS, &r->info));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserInfo25(struct ndr_pull *ndr, int ndr_flags, struct samr_UserInfo25 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_samr_UserInfo21(ndr, NDR_SCALARS, &r->info));
-		NDR_CHECK(ndr_pull_samr_CryptPasswordEx(ndr, NDR_SCALARS, &r->password));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_samr_UserInfo21(ndr, NDR_BUFFERS, &r->info));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserInfo25(struct ndr_print *ndr, const char *name, const struct samr_UserInfo25 *r)
-{
-	ndr_print_struct(ndr, name, "samr_UserInfo25");
-	ndr->depth++;
-	ndr_print_samr_UserInfo21(ndr, "info", &r->info);
-	ndr_print_samr_CryptPasswordEx(ndr, "password", &r->password);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_UserInfo26(struct ndr_push *ndr, int ndr_flags, const struct samr_UserInfo26 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 1));
-		NDR_CHECK(ndr_push_samr_CryptPasswordEx(ndr, NDR_SCALARS, &r->password));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->pw_len));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserInfo26(struct ndr_pull *ndr, int ndr_flags, struct samr_UserInfo26 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 1));
-		NDR_CHECK(ndr_pull_samr_CryptPasswordEx(ndr, NDR_SCALARS, &r->password));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->pw_len));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserInfo26(struct ndr_print *ndr, const char *name, const struct samr_UserInfo26 *r)
-{
-	ndr_print_struct(ndr, name, "samr_UserInfo26");
-	ndr->depth++;
-	ndr_print_samr_CryptPasswordEx(ndr, "password", &r->password);
-	ndr_print_uint8(ndr, "pw_len", r->pw_len);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_UserInfo(struct ndr_push *ndr, int ndr_flags, const union samr_UserInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 1: {
-				NDR_CHECK(ndr_push_samr_UserInfo1(ndr, NDR_SCALARS, &r->info1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_push_samr_UserInfo2(ndr, NDR_SCALARS, &r->info2));
-			break; }
-
-			case 3: {
-				NDR_CHECK(ndr_push_samr_UserInfo3(ndr, NDR_SCALARS, &r->info3));
-			break; }
-
-			case 4: {
-				NDR_CHECK(ndr_push_samr_UserInfo4(ndr, NDR_SCALARS, &r->info4));
-			break; }
-
-			case 5: {
-				NDR_CHECK(ndr_push_samr_UserInfo5(ndr, NDR_SCALARS, &r->info5));
-			break; }
-
-			case 6: {
-				NDR_CHECK(ndr_push_samr_UserInfo6(ndr, NDR_SCALARS, &r->info6));
-			break; }
-
-			case 7: {
-				NDR_CHECK(ndr_push_samr_UserInfo7(ndr, NDR_SCALARS, &r->info7));
-			break; }
-
-			case 8: {
-				NDR_CHECK(ndr_push_samr_UserInfo8(ndr, NDR_SCALARS, &r->info8));
-			break; }
-
-			case 9: {
-				NDR_CHECK(ndr_push_samr_UserInfo9(ndr, NDR_SCALARS, &r->info9));
-			break; }
-
-			case 10: {
-				NDR_CHECK(ndr_push_samr_UserInfo10(ndr, NDR_SCALARS, &r->info10));
-			break; }
-
-			case 11: {
-				NDR_CHECK(ndr_push_samr_UserInfo11(ndr, NDR_SCALARS, &r->info11));
-			break; }
-
-			case 12: {
-				NDR_CHECK(ndr_push_samr_UserInfo12(ndr, NDR_SCALARS, &r->info12));
-			break; }
-
-			case 13: {
-				NDR_CHECK(ndr_push_samr_UserInfo13(ndr, NDR_SCALARS, &r->info13));
-			break; }
-
-			case 14: {
-				NDR_CHECK(ndr_push_samr_UserInfo14(ndr, NDR_SCALARS, &r->info14));
-			break; }
-
-			case 16: {
-				NDR_CHECK(ndr_push_samr_UserInfo16(ndr, NDR_SCALARS, &r->info16));
-			break; }
-
-			case 17: {
-				NDR_CHECK(ndr_push_samr_UserInfo17(ndr, NDR_SCALARS, &r->info17));
-			break; }
-
-			case 18: {
-				NDR_CHECK(ndr_push_samr_UserInfo18(ndr, NDR_SCALARS, &r->info18));
-			break; }
-
-			case 20: {
-				NDR_CHECK(ndr_push_samr_UserInfo20(ndr, NDR_SCALARS, &r->info20));
-			break; }
-
-			case 21: {
-				NDR_CHECK(ndr_push_samr_UserInfo21(ndr, NDR_SCALARS, &r->info21));
-			break; }
-
-			case 23: {
-				NDR_CHECK(ndr_push_samr_UserInfo23(ndr, NDR_SCALARS, &r->info23));
-			break; }
-
-			case 24: {
-				NDR_CHECK(ndr_push_samr_UserInfo24(ndr, NDR_SCALARS, &r->info24));
-			break; }
-
-			case 25: {
-				NDR_CHECK(ndr_push_samr_UserInfo25(ndr, NDR_SCALARS, &r->info25));
-			break; }
-
-			case 26: {
-				NDR_CHECK(ndr_push_samr_UserInfo26(ndr, NDR_SCALARS, &r->info26));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 1:
-				NDR_CHECK(ndr_push_samr_UserInfo1(ndr, NDR_BUFFERS, &r->info1));
-			break;
-
-			case 2:
-				NDR_CHECK(ndr_push_samr_UserInfo2(ndr, NDR_BUFFERS, &r->info2));
-			break;
-
-			case 3:
-				NDR_CHECK(ndr_push_samr_UserInfo3(ndr, NDR_BUFFERS, &r->info3));
-			break;
-
-			case 4:
-				NDR_CHECK(ndr_push_samr_UserInfo4(ndr, NDR_BUFFERS, &r->info4));
-			break;
-
-			case 5:
-				NDR_CHECK(ndr_push_samr_UserInfo5(ndr, NDR_BUFFERS, &r->info5));
-			break;
-
-			case 6:
-				NDR_CHECK(ndr_push_samr_UserInfo6(ndr, NDR_BUFFERS, &r->info6));
-			break;
-
-			case 7:
-				NDR_CHECK(ndr_push_samr_UserInfo7(ndr, NDR_BUFFERS, &r->info7));
-			break;
-
-			case 8:
-				NDR_CHECK(ndr_push_samr_UserInfo8(ndr, NDR_BUFFERS, &r->info8));
-			break;
-
-			case 9:
-			break;
-
-			case 10:
-				NDR_CHECK(ndr_push_samr_UserInfo10(ndr, NDR_BUFFERS, &r->info10));
-			break;
-
-			case 11:
-				NDR_CHECK(ndr_push_samr_UserInfo11(ndr, NDR_BUFFERS, &r->info11));
-			break;
-
-			case 12:
-				NDR_CHECK(ndr_push_samr_UserInfo12(ndr, NDR_BUFFERS, &r->info12));
-			break;
-
-			case 13:
-				NDR_CHECK(ndr_push_samr_UserInfo13(ndr, NDR_BUFFERS, &r->info13));
-			break;
-
-			case 14:
-				NDR_CHECK(ndr_push_samr_UserInfo14(ndr, NDR_BUFFERS, &r->info14));
-			break;
-
-			case 16:
-			break;
-
-			case 17:
-			break;
-
-			case 18:
-			break;
-
-			case 20:
-				NDR_CHECK(ndr_push_samr_UserInfo20(ndr, NDR_BUFFERS, &r->info20));
-			break;
-
-			case 21:
-				NDR_CHECK(ndr_push_samr_UserInfo21(ndr, NDR_BUFFERS, &r->info21));
-			break;
-
-			case 23:
-				NDR_CHECK(ndr_push_samr_UserInfo23(ndr, NDR_BUFFERS, &r->info23));
-			break;
-
-			case 24:
-			break;
-
-			case 25:
-				NDR_CHECK(ndr_push_samr_UserInfo25(ndr, NDR_BUFFERS, &r->info25));
-			break;
-
-			case 26:
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_UserInfo(struct ndr_pull *ndr, int ndr_flags, union samr_UserInfo *r)
-{
-	int level;
-	uint16_t _level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 1: {
-				NDR_CHECK(ndr_pull_samr_UserInfo1(ndr, NDR_SCALARS, &r->info1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_pull_samr_UserInfo2(ndr, NDR_SCALARS, &r->info2));
-			break; }
-
-			case 3: {
-				NDR_CHECK(ndr_pull_samr_UserInfo3(ndr, NDR_SCALARS, &r->info3));
-			break; }
-
-			case 4: {
-				NDR_CHECK(ndr_pull_samr_UserInfo4(ndr, NDR_SCALARS, &r->info4));
-			break; }
-
-			case 5: {
-				NDR_CHECK(ndr_pull_samr_UserInfo5(ndr, NDR_SCALARS, &r->info5));
-			break; }
-
-			case 6: {
-				NDR_CHECK(ndr_pull_samr_UserInfo6(ndr, NDR_SCALARS, &r->info6));
-			break; }
-
-			case 7: {
-				NDR_CHECK(ndr_pull_samr_UserInfo7(ndr, NDR_SCALARS, &r->info7));
-			break; }
-
-			case 8: {
-				NDR_CHECK(ndr_pull_samr_UserInfo8(ndr, NDR_SCALARS, &r->info8));
-			break; }
-
-			case 9: {
-				NDR_CHECK(ndr_pull_samr_UserInfo9(ndr, NDR_SCALARS, &r->info9));
-			break; }
-
-			case 10: {
-				NDR_CHECK(ndr_pull_samr_UserInfo10(ndr, NDR_SCALARS, &r->info10));
-			break; }
-
-			case 11: {
-				NDR_CHECK(ndr_pull_samr_UserInfo11(ndr, NDR_SCALARS, &r->info11));
-			break; }
-
-			case 12: {
-				NDR_CHECK(ndr_pull_samr_UserInfo12(ndr, NDR_SCALARS, &r->info12));
-			break; }
-
-			case 13: {
-				NDR_CHECK(ndr_pull_samr_UserInfo13(ndr, NDR_SCALARS, &r->info13));
-			break; }
-
-			case 14: {
-				NDR_CHECK(ndr_pull_samr_UserInfo14(ndr, NDR_SCALARS, &r->info14));
-			break; }
-
-			case 16: {
-				NDR_CHECK(ndr_pull_samr_UserInfo16(ndr, NDR_SCALARS, &r->info16));
-			break; }
-
-			case 17: {
-				NDR_CHECK(ndr_pull_samr_UserInfo17(ndr, NDR_SCALARS, &r->info17));
-			break; }
-
-			case 18: {
-				NDR_CHECK(ndr_pull_samr_UserInfo18(ndr, NDR_SCALARS, &r->info18));
-			break; }
-
-			case 20: {
-				NDR_CHECK(ndr_pull_samr_UserInfo20(ndr, NDR_SCALARS, &r->info20));
-			break; }
-
-			case 21: {
-				NDR_CHECK(ndr_pull_samr_UserInfo21(ndr, NDR_SCALARS, &r->info21));
-			break; }
-
-			case 23: {
-				NDR_CHECK(ndr_pull_samr_UserInfo23(ndr, NDR_SCALARS, &r->info23));
-			break; }
-
-			case 24: {
-				NDR_CHECK(ndr_pull_samr_UserInfo24(ndr, NDR_SCALARS, &r->info24));
-			break; }
-
-			case 25: {
-				NDR_CHECK(ndr_pull_samr_UserInfo25(ndr, NDR_SCALARS, &r->info25));
-			break; }
-
-			case 26: {
-				NDR_CHECK(ndr_pull_samr_UserInfo26(ndr, NDR_SCALARS, &r->info26));
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 1:
-				NDR_CHECK(ndr_pull_samr_UserInfo1(ndr, NDR_BUFFERS, &r->info1));
-			break;
-
-			case 2:
-				NDR_CHECK(ndr_pull_samr_UserInfo2(ndr, NDR_BUFFERS, &r->info2));
-			break;
-
-			case 3:
-				NDR_CHECK(ndr_pull_samr_UserInfo3(ndr, NDR_BUFFERS, &r->info3));
-			break;
-
-			case 4:
-				NDR_CHECK(ndr_pull_samr_UserInfo4(ndr, NDR_BUFFERS, &r->info4));
-			break;
-
-			case 5:
-				NDR_CHECK(ndr_pull_samr_UserInfo5(ndr, NDR_BUFFERS, &r->info5));
-			break;
-
-			case 6:
-				NDR_CHECK(ndr_pull_samr_UserInfo6(ndr, NDR_BUFFERS, &r->info6));
-			break;
-
-			case 7:
-				NDR_CHECK(ndr_pull_samr_UserInfo7(ndr, NDR_BUFFERS, &r->info7));
-			break;
-
-			case 8:
-				NDR_CHECK(ndr_pull_samr_UserInfo8(ndr, NDR_BUFFERS, &r->info8));
-			break;
-
-			case 9:
-			break;
-
-			case 10:
-				NDR_CHECK(ndr_pull_samr_UserInfo10(ndr, NDR_BUFFERS, &r->info10));
-			break;
-
-			case 11:
-				NDR_CHECK(ndr_pull_samr_UserInfo11(ndr, NDR_BUFFERS, &r->info11));
-			break;
-
-			case 12:
-				NDR_CHECK(ndr_pull_samr_UserInfo12(ndr, NDR_BUFFERS, &r->info12));
-			break;
-
-			case 13:
-				NDR_CHECK(ndr_pull_samr_UserInfo13(ndr, NDR_BUFFERS, &r->info13));
-			break;
-
-			case 14:
-				NDR_CHECK(ndr_pull_samr_UserInfo14(ndr, NDR_BUFFERS, &r->info14));
-			break;
-
-			case 16:
-			break;
-
-			case 17:
-			break;
-
-			case 18:
-			break;
-
-			case 20:
-				NDR_CHECK(ndr_pull_samr_UserInfo20(ndr, NDR_BUFFERS, &r->info20));
-			break;
-
-			case 21:
-				NDR_CHECK(ndr_pull_samr_UserInfo21(ndr, NDR_BUFFERS, &r->info21));
-			break;
-
-			case 23:
-				NDR_CHECK(ndr_pull_samr_UserInfo23(ndr, NDR_BUFFERS, &r->info23));
-			break;
-
-			case 24:
-			break;
-
-			case 25:
-				NDR_CHECK(ndr_pull_samr_UserInfo25(ndr, NDR_BUFFERS, &r->info25));
-			break;
-
-			case 26:
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_UserInfo(struct ndr_print *ndr, const char *name, const union samr_UserInfo *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "samr_UserInfo");
-	switch (level) {
-		case 1:
-			ndr_print_samr_UserInfo1(ndr, "info1", &r->info1);
-		break;
-
-		case 2:
-			ndr_print_samr_UserInfo2(ndr, "info2", &r->info2);
-		break;
-
-		case 3:
-			ndr_print_samr_UserInfo3(ndr, "info3", &r->info3);
-		break;
-
-		case 4:
-			ndr_print_samr_UserInfo4(ndr, "info4", &r->info4);
-		break;
-
-		case 5:
-			ndr_print_samr_UserInfo5(ndr, "info5", &r->info5);
-		break;
-
-		case 6:
-			ndr_print_samr_UserInfo6(ndr, "info6", &r->info6);
-		break;
-
-		case 7:
-			ndr_print_samr_UserInfo7(ndr, "info7", &r->info7);
-		break;
-
-		case 8:
-			ndr_print_samr_UserInfo8(ndr, "info8", &r->info8);
-		break;
-
-		case 9:
-			ndr_print_samr_UserInfo9(ndr, "info9", &r->info9);
-		break;
-
-		case 10:
-			ndr_print_samr_UserInfo10(ndr, "info10", &r->info10);
-		break;
-
-		case 11:
-			ndr_print_samr_UserInfo11(ndr, "info11", &r->info11);
-		break;
-
-		case 12:
-			ndr_print_samr_UserInfo12(ndr, "info12", &r->info12);
-		break;
-
-		case 13:
-			ndr_print_samr_UserInfo13(ndr, "info13", &r->info13);
-		break;
-
-		case 14:
-			ndr_print_samr_UserInfo14(ndr, "info14", &r->info14);
-		break;
-
-		case 16:
-			ndr_print_samr_UserInfo16(ndr, "info16", &r->info16);
-		break;
-
-		case 17:
-			ndr_print_samr_UserInfo17(ndr, "info17", &r->info17);
-		break;
-
-		case 18:
-			ndr_print_samr_UserInfo18(ndr, "info18", &r->info18);
-		break;
-
-		case 20:
-			ndr_print_samr_UserInfo20(ndr, "info20", &r->info20);
-		break;
-
-		case 21:
-			ndr_print_samr_UserInfo21(ndr, "info21", &r->info21);
-		break;
-
-		case 23:
-			ndr_print_samr_UserInfo23(ndr, "info23", &r->info23);
-		break;
-
-		case 24:
-			ndr_print_samr_UserInfo24(ndr, "info24", &r->info24);
-		break;
-
-		case 25:
-			ndr_print_samr_UserInfo25(ndr, "info25", &r->info25);
-		break;
-
-		case 26:
-			ndr_print_samr_UserInfo26(ndr, "info26", &r->info26);
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_samr_RidWithAttribute(struct ndr_push *ndr, int ndr_flags, const struct samr_RidWithAttribute *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-		NDR_CHECK(ndr_push_samr_GroupAttrs(ndr, NDR_SCALARS, r->attributes));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_samr_RidWithAttribute(struct ndr_pull *ndr, int ndr_flags, struct samr_RidWithAttribute *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-		NDR_CHECK(ndr_pull_samr_GroupAttrs(ndr, NDR_SCALARS, &r->attributes));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_RidWithAttribute(struct ndr_print *ndr, const char *name, const struct samr_RidWithAttribute *r)
-{
-	ndr_print_struct(ndr, name, "samr_RidWithAttribute");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "rid", r->rid);
-	ndr_print_samr_GroupAttrs(ndr, "attributes", r->attributes);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_samr_RidWithAttributeArray(struct ndr_push *ndr, int ndr_flags, const struct samr_RidWithAttributeArray *r)
-{
-	uint32_t cntr_rids_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->rids));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->rids) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_rids_1 = 0; cntr_rids_1 < r->count; cntr_rids_1++) {
-				NDR_CHECK(ndr_push_samr_RidWithAttribute(ndr, NDR_SCALARS, &r->rids[cntr_rids_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_samr_RidWithAttributeArray(struct ndr_pull *ndr, int ndr_flags, struct samr_RidWithAttributeArray *r)
-{
-	uint32_t _ptr_rids;
-	uint32_t cntr_rids_1;
-	TALLOC_CTX *_mem_save_rids_0;
-	TALLOC_CTX *_mem_save_rids_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_rids));
-		if (_ptr_rids) {
-			NDR_PULL_ALLOC(ndr, r->rids);
-		} else {
-			r->rids = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->rids) {
-			_mem_save_rids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->rids, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->rids));
-			NDR_PULL_ALLOC_N(ndr, r->rids, ndr_get_array_size(ndr, &r->rids));
-			_mem_save_rids_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->rids, 0);
-			for (cntr_rids_1 = 0; cntr_rids_1 < r->count; cntr_rids_1++) {
-				NDR_CHECK(ndr_pull_samr_RidWithAttribute(ndr, NDR_SCALARS, &r->rids[cntr_rids_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rids_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rids_0, 0);
-		}
-		if (r->rids) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->rids, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_RidWithAttributeArray(struct ndr_print *ndr, const char *name, const struct samr_RidWithAttributeArray *r)
-{
-	uint32_t cntr_rids_1;
-	ndr_print_struct(ndr, name, "samr_RidWithAttributeArray");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "rids", r->rids);
-	ndr->depth++;
-	if (r->rids) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "rids", r->count);
-		ndr->depth++;
-		for (cntr_rids_1=0;cntr_rids_1<r->count;cntr_rids_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_rids_1) != -1) {
-				ndr_print_samr_RidWithAttribute(ndr, "rids", &r->rids[cntr_rids_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DispEntryGeneral(struct ndr_push *ndr, int ndr_flags, const struct samr_DispEntryGeneral *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->idx));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-		NDR_CHECK(ndr_push_samr_AcctFlags(ndr, NDR_SCALARS, r->acct_flags));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->account_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->description));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->full_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->account_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->description));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->full_name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DispEntryGeneral(struct ndr_pull *ndr, int ndr_flags, struct samr_DispEntryGeneral *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->idx));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-		NDR_CHECK(ndr_pull_samr_AcctFlags(ndr, NDR_SCALARS, &r->acct_flags));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->account_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->description));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->full_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->account_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->description));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->full_name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DispEntryGeneral(struct ndr_print *ndr, const char *name, const struct samr_DispEntryGeneral *r)
-{
-	ndr_print_struct(ndr, name, "samr_DispEntryGeneral");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "idx", r->idx);
-	ndr_print_uint32(ndr, "rid", r->rid);
-	ndr_print_samr_AcctFlags(ndr, "acct_flags", r->acct_flags);
-	ndr_print_lsa_String(ndr, "account_name", &r->account_name);
-	ndr_print_lsa_String(ndr, "description", &r->description);
-	ndr_print_lsa_String(ndr, "full_name", &r->full_name);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DispInfoGeneral(struct ndr_push *ndr, int ndr_flags, const struct samr_DispInfoGeneral *r)
-{
-	uint32_t cntr_entries_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->entries));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->entries) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_entries_1 = 0; cntr_entries_1 < r->count; cntr_entries_1++) {
-				NDR_CHECK(ndr_push_samr_DispEntryGeneral(ndr, NDR_SCALARS, &r->entries[cntr_entries_1]));
-			}
-			for (cntr_entries_1 = 0; cntr_entries_1 < r->count; cntr_entries_1++) {
-				NDR_CHECK(ndr_push_samr_DispEntryGeneral(ndr, NDR_BUFFERS, &r->entries[cntr_entries_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DispInfoGeneral(struct ndr_pull *ndr, int ndr_flags, struct samr_DispInfoGeneral *r)
-{
-	uint32_t _ptr_entries;
-	uint32_t cntr_entries_1;
-	TALLOC_CTX *_mem_save_entries_0;
-	TALLOC_CTX *_mem_save_entries_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_entries));
-		if (_ptr_entries) {
-			NDR_PULL_ALLOC(ndr, r->entries);
-		} else {
-			r->entries = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->entries) {
-			_mem_save_entries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->entries, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->entries));
-			NDR_PULL_ALLOC_N(ndr, r->entries, ndr_get_array_size(ndr, &r->entries));
-			_mem_save_entries_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->entries, 0);
-			for (cntr_entries_1 = 0; cntr_entries_1 < r->count; cntr_entries_1++) {
-				NDR_CHECK(ndr_pull_samr_DispEntryGeneral(ndr, NDR_SCALARS, &r->entries[cntr_entries_1]));
-			}
-			for (cntr_entries_1 = 0; cntr_entries_1 < r->count; cntr_entries_1++) {
-				NDR_CHECK(ndr_pull_samr_DispEntryGeneral(ndr, NDR_BUFFERS, &r->entries[cntr_entries_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entries_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entries_0, 0);
-		}
-		if (r->entries) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->entries, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DispInfoGeneral(struct ndr_print *ndr, const char *name, const struct samr_DispInfoGeneral *r)
-{
-	uint32_t cntr_entries_1;
-	ndr_print_struct(ndr, name, "samr_DispInfoGeneral");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "entries", r->entries);
-	ndr->depth++;
-	if (r->entries) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "entries", r->count);
-		ndr->depth++;
-		for (cntr_entries_1=0;cntr_entries_1<r->count;cntr_entries_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_entries_1) != -1) {
-				ndr_print_samr_DispEntryGeneral(ndr, "entries", &r->entries[cntr_entries_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DispEntryFull(struct ndr_push *ndr, int ndr_flags, const struct samr_DispEntryFull *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->idx));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-		NDR_CHECK(ndr_push_samr_AcctFlags(ndr, NDR_SCALARS, r->acct_flags));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->account_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->description));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->account_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->description));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DispEntryFull(struct ndr_pull *ndr, int ndr_flags, struct samr_DispEntryFull *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->idx));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-		NDR_CHECK(ndr_pull_samr_AcctFlags(ndr, NDR_SCALARS, &r->acct_flags));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->account_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->description));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->account_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->description));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DispEntryFull(struct ndr_print *ndr, const char *name, const struct samr_DispEntryFull *r)
-{
-	ndr_print_struct(ndr, name, "samr_DispEntryFull");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "idx", r->idx);
-	ndr_print_uint32(ndr, "rid", r->rid);
-	ndr_print_samr_AcctFlags(ndr, "acct_flags", r->acct_flags);
-	ndr_print_lsa_String(ndr, "account_name", &r->account_name);
-	ndr_print_lsa_String(ndr, "description", &r->description);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DispInfoFull(struct ndr_push *ndr, int ndr_flags, const struct samr_DispInfoFull *r)
-{
-	uint32_t cntr_entries_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->entries));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->entries) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_entries_1 = 0; cntr_entries_1 < r->count; cntr_entries_1++) {
-				NDR_CHECK(ndr_push_samr_DispEntryFull(ndr, NDR_SCALARS, &r->entries[cntr_entries_1]));
-			}
-			for (cntr_entries_1 = 0; cntr_entries_1 < r->count; cntr_entries_1++) {
-				NDR_CHECK(ndr_push_samr_DispEntryFull(ndr, NDR_BUFFERS, &r->entries[cntr_entries_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DispInfoFull(struct ndr_pull *ndr, int ndr_flags, struct samr_DispInfoFull *r)
-{
-	uint32_t _ptr_entries;
-	uint32_t cntr_entries_1;
-	TALLOC_CTX *_mem_save_entries_0;
-	TALLOC_CTX *_mem_save_entries_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_entries));
-		if (_ptr_entries) {
-			NDR_PULL_ALLOC(ndr, r->entries);
-		} else {
-			r->entries = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->entries) {
-			_mem_save_entries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->entries, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->entries));
-			NDR_PULL_ALLOC_N(ndr, r->entries, ndr_get_array_size(ndr, &r->entries));
-			_mem_save_entries_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->entries, 0);
-			for (cntr_entries_1 = 0; cntr_entries_1 < r->count; cntr_entries_1++) {
-				NDR_CHECK(ndr_pull_samr_DispEntryFull(ndr, NDR_SCALARS, &r->entries[cntr_entries_1]));
-			}
-			for (cntr_entries_1 = 0; cntr_entries_1 < r->count; cntr_entries_1++) {
-				NDR_CHECK(ndr_pull_samr_DispEntryFull(ndr, NDR_BUFFERS, &r->entries[cntr_entries_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entries_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entries_0, 0);
-		}
-		if (r->entries) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->entries, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DispInfoFull(struct ndr_print *ndr, const char *name, const struct samr_DispInfoFull *r)
-{
-	uint32_t cntr_entries_1;
-	ndr_print_struct(ndr, name, "samr_DispInfoFull");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "entries", r->entries);
-	ndr->depth++;
-	if (r->entries) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "entries", r->count);
-		ndr->depth++;
-		for (cntr_entries_1=0;cntr_entries_1<r->count;cntr_entries_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_entries_1) != -1) {
-				ndr_print_samr_DispEntryFull(ndr, "entries", &r->entries[cntr_entries_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DispEntryFullGroup(struct ndr_push *ndr, int ndr_flags, const struct samr_DispEntryFullGroup *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->idx));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rid));
-		NDR_CHECK(ndr_push_samr_GroupAttrs(ndr, NDR_SCALARS, r->acct_flags));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->account_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->description));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->account_name));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->description));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DispEntryFullGroup(struct ndr_pull *ndr, int ndr_flags, struct samr_DispEntryFullGroup *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->idx));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rid));
-		NDR_CHECK(ndr_pull_samr_GroupAttrs(ndr, NDR_SCALARS, &r->acct_flags));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->account_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->description));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->account_name));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->description));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DispEntryFullGroup(struct ndr_print *ndr, const char *name, const struct samr_DispEntryFullGroup *r)
-{
-	ndr_print_struct(ndr, name, "samr_DispEntryFullGroup");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "idx", r->idx);
-	ndr_print_uint32(ndr, "rid", r->rid);
-	ndr_print_samr_GroupAttrs(ndr, "acct_flags", r->acct_flags);
-	ndr_print_lsa_String(ndr, "account_name", &r->account_name);
-	ndr_print_lsa_String(ndr, "description", &r->description);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DispInfoFullGroups(struct ndr_push *ndr, int ndr_flags, const struct samr_DispInfoFullGroups *r)
-{
-	uint32_t cntr_entries_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->entries));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->entries) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_entries_1 = 0; cntr_entries_1 < r->count; cntr_entries_1++) {
-				NDR_CHECK(ndr_push_samr_DispEntryFullGroup(ndr, NDR_SCALARS, &r->entries[cntr_entries_1]));
-			}
-			for (cntr_entries_1 = 0; cntr_entries_1 < r->count; cntr_entries_1++) {
-				NDR_CHECK(ndr_push_samr_DispEntryFullGroup(ndr, NDR_BUFFERS, &r->entries[cntr_entries_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DispInfoFullGroups(struct ndr_pull *ndr, int ndr_flags, struct samr_DispInfoFullGroups *r)
-{
-	uint32_t _ptr_entries;
-	uint32_t cntr_entries_1;
-	TALLOC_CTX *_mem_save_entries_0;
-	TALLOC_CTX *_mem_save_entries_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_entries));
-		if (_ptr_entries) {
-			NDR_PULL_ALLOC(ndr, r->entries);
-		} else {
-			r->entries = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->entries) {
-			_mem_save_entries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->entries, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->entries));
-			NDR_PULL_ALLOC_N(ndr, r->entries, ndr_get_array_size(ndr, &r->entries));
-			_mem_save_entries_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->entries, 0);
-			for (cntr_entries_1 = 0; cntr_entries_1 < r->count; cntr_entries_1++) {
-				NDR_CHECK(ndr_pull_samr_DispEntryFullGroup(ndr, NDR_SCALARS, &r->entries[cntr_entries_1]));
-			}
-			for (cntr_entries_1 = 0; cntr_entries_1 < r->count; cntr_entries_1++) {
-				NDR_CHECK(ndr_pull_samr_DispEntryFullGroup(ndr, NDR_BUFFERS, &r->entries[cntr_entries_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entries_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entries_0, 0);
-		}
-		if (r->entries) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->entries, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DispInfoFullGroups(struct ndr_print *ndr, const char *name, const struct samr_DispInfoFullGroups *r)
-{
-	uint32_t cntr_entries_1;
-	ndr_print_struct(ndr, name, "samr_DispInfoFullGroups");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "entries", r->entries);
-	ndr->depth++;
-	if (r->entries) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "entries", r->count);
-		ndr->depth++;
-		for (cntr_entries_1=0;cntr_entries_1<r->count;cntr_entries_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_entries_1) != -1) {
-				ndr_print_samr_DispEntryFullGroup(ndr, "entries", &r->entries[cntr_entries_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DispEntryAscii(struct ndr_push *ndr, int ndr_flags, const struct samr_DispEntryAscii *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->idx));
-		NDR_CHECK(ndr_push_lsa_AsciiStringLarge(ndr, NDR_SCALARS, &r->account_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_AsciiStringLarge(ndr, NDR_BUFFERS, &r->account_name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DispEntryAscii(struct ndr_pull *ndr, int ndr_flags, struct samr_DispEntryAscii *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->idx));
-		NDR_CHECK(ndr_pull_lsa_AsciiStringLarge(ndr, NDR_SCALARS, &r->account_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_AsciiStringLarge(ndr, NDR_BUFFERS, &r->account_name));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DispEntryAscii(struct ndr_print *ndr, const char *name, const struct samr_DispEntryAscii *r)
-{
-	ndr_print_struct(ndr, name, "samr_DispEntryAscii");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "idx", r->idx);
-	ndr_print_lsa_AsciiStringLarge(ndr, "account_name", &r->account_name);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DispInfoAscii(struct ndr_push *ndr, int ndr_flags, const struct samr_DispInfoAscii *r)
-{
-	uint32_t cntr_entries_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->entries));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->entries) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_entries_1 = 0; cntr_entries_1 < r->count; cntr_entries_1++) {
-				NDR_CHECK(ndr_push_samr_DispEntryAscii(ndr, NDR_SCALARS, &r->entries[cntr_entries_1]));
-			}
-			for (cntr_entries_1 = 0; cntr_entries_1 < r->count; cntr_entries_1++) {
-				NDR_CHECK(ndr_push_samr_DispEntryAscii(ndr, NDR_BUFFERS, &r->entries[cntr_entries_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DispInfoAscii(struct ndr_pull *ndr, int ndr_flags, struct samr_DispInfoAscii *r)
-{
-	uint32_t _ptr_entries;
-	uint32_t cntr_entries_1;
-	TALLOC_CTX *_mem_save_entries_0;
-	TALLOC_CTX *_mem_save_entries_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_entries));
-		if (_ptr_entries) {
-			NDR_PULL_ALLOC(ndr, r->entries);
-		} else {
-			r->entries = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->entries) {
-			_mem_save_entries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->entries, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->entries));
-			NDR_PULL_ALLOC_N(ndr, r->entries, ndr_get_array_size(ndr, &r->entries));
-			_mem_save_entries_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->entries, 0);
-			for (cntr_entries_1 = 0; cntr_entries_1 < r->count; cntr_entries_1++) {
-				NDR_CHECK(ndr_pull_samr_DispEntryAscii(ndr, NDR_SCALARS, &r->entries[cntr_entries_1]));
-			}
-			for (cntr_entries_1 = 0; cntr_entries_1 < r->count; cntr_entries_1++) {
-				NDR_CHECK(ndr_pull_samr_DispEntryAscii(ndr, NDR_BUFFERS, &r->entries[cntr_entries_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entries_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entries_0, 0);
-		}
-		if (r->entries) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->entries, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DispInfoAscii(struct ndr_print *ndr, const char *name, const struct samr_DispInfoAscii *r)
-{
-	uint32_t cntr_entries_1;
-	ndr_print_struct(ndr, name, "samr_DispInfoAscii");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "entries", r->entries);
-	ndr->depth++;
-	if (r->entries) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "entries", r->count);
-		ndr->depth++;
-		for (cntr_entries_1=0;cntr_entries_1<r->count;cntr_entries_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_entries_1) != -1) {
-				ndr_print_samr_DispEntryAscii(ndr, "entries", &r->entries[cntr_entries_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DispInfo(struct ndr_push *ndr, int ndr_flags, const union samr_DispInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 1: {
-				NDR_CHECK(ndr_push_samr_DispInfoGeneral(ndr, NDR_SCALARS, &r->info1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_push_samr_DispInfoFull(ndr, NDR_SCALARS, &r->info2));
-			break; }
-
-			case 3: {
-				NDR_CHECK(ndr_push_samr_DispInfoFullGroups(ndr, NDR_SCALARS, &r->info3));
-			break; }
-
-			case 4: {
-				NDR_CHECK(ndr_push_samr_DispInfoAscii(ndr, NDR_SCALARS, &r->info4));
-			break; }
-
-			case 5: {
-				NDR_CHECK(ndr_push_samr_DispInfoAscii(ndr, NDR_SCALARS, &r->info5));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 1:
-				NDR_CHECK(ndr_push_samr_DispInfoGeneral(ndr, NDR_BUFFERS, &r->info1));
-			break;
-
-			case 2:
-				NDR_CHECK(ndr_push_samr_DispInfoFull(ndr, NDR_BUFFERS, &r->info2));
-			break;
-
-			case 3:
-				NDR_CHECK(ndr_push_samr_DispInfoFullGroups(ndr, NDR_BUFFERS, &r->info3));
-			break;
-
-			case 4:
-				NDR_CHECK(ndr_push_samr_DispInfoAscii(ndr, NDR_BUFFERS, &r->info4));
-			break;
-
-			case 5:
-				NDR_CHECK(ndr_push_samr_DispInfoAscii(ndr, NDR_BUFFERS, &r->info5));
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DispInfo(struct ndr_pull *ndr, int ndr_flags, union samr_DispInfo *r)
-{
-	int level;
-	uint16_t _level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 1: {
-				NDR_CHECK(ndr_pull_samr_DispInfoGeneral(ndr, NDR_SCALARS, &r->info1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_pull_samr_DispInfoFull(ndr, NDR_SCALARS, &r->info2));
-			break; }
-
-			case 3: {
-				NDR_CHECK(ndr_pull_samr_DispInfoFullGroups(ndr, NDR_SCALARS, &r->info3));
-			break; }
-
-			case 4: {
-				NDR_CHECK(ndr_pull_samr_DispInfoAscii(ndr, NDR_SCALARS, &r->info4));
-			break; }
-
-			case 5: {
-				NDR_CHECK(ndr_pull_samr_DispInfoAscii(ndr, NDR_SCALARS, &r->info5));
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 1:
-				NDR_CHECK(ndr_pull_samr_DispInfoGeneral(ndr, NDR_BUFFERS, &r->info1));
-			break;
-
-			case 2:
-				NDR_CHECK(ndr_pull_samr_DispInfoFull(ndr, NDR_BUFFERS, &r->info2));
-			break;
-
-			case 3:
-				NDR_CHECK(ndr_pull_samr_DispInfoFullGroups(ndr, NDR_BUFFERS, &r->info3));
-			break;
-
-			case 4:
-				NDR_CHECK(ndr_pull_samr_DispInfoAscii(ndr, NDR_BUFFERS, &r->info4));
-			break;
-
-			case 5:
-				NDR_CHECK(ndr_pull_samr_DispInfoAscii(ndr, NDR_BUFFERS, &r->info5));
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DispInfo(struct ndr_print *ndr, const char *name, const union samr_DispInfo *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "samr_DispInfo");
-	switch (level) {
-		case 1:
-			ndr_print_samr_DispInfoGeneral(ndr, "info1", &r->info1);
-		break;
-
-		case 2:
-			ndr_print_samr_DispInfoFull(ndr, "info2", &r->info2);
-		break;
-
-		case 3:
-			ndr_print_samr_DispInfoFullGroups(ndr, "info3", &r->info3);
-		break;
-
-		case 4:
-			ndr_print_samr_DispInfoAscii(ndr, "info4", &r->info4);
-		break;
-
-		case 5:
-			ndr_print_samr_DispInfoAscii(ndr, "info5", &r->info5);
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_samr_PwInfo(struct ndr_push *ndr, int ndr_flags, const struct samr_PwInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->min_password_length));
-		NDR_CHECK(ndr_push_samr_PasswordProperties(ndr, NDR_SCALARS, r->password_properties));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_PwInfo(struct ndr_pull *ndr, int ndr_flags, struct samr_PwInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->min_password_length));
-		NDR_CHECK(ndr_pull_samr_PasswordProperties(ndr, NDR_SCALARS, &r->password_properties));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_PwInfo(struct ndr_print *ndr, const char *name, const struct samr_PwInfo *r)
-{
-	ndr_print_struct(ndr, name, "samr_PwInfo");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "min_password_length", r->min_password_length);
-	ndr_print_samr_PasswordProperties(ndr, "password_properties", r->password_properties);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_ConnectVersion(struct ndr_push *ndr, int ndr_flags, enum samr_ConnectVersion r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_ConnectVersion(struct ndr_pull *ndr, int ndr_flags, enum samr_ConnectVersion *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_ConnectVersion(struct ndr_print *ndr, const char *name, enum samr_ConnectVersion r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case SAMR_CONNECT_PRE_W2K: val = "SAMR_CONNECT_PRE_W2K"; break;
-		case SAMR_CONNECT_W2K: val = "SAMR_CONNECT_W2K"; break;
-		case SAMR_CONNECT_AFTER_W2K: val = "SAMR_CONNECT_AFTER_W2K"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_samr_ChangeReject(struct ndr_push *ndr, int ndr_flags, const struct samr_ChangeReject *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_samr_RejectReason(ndr, NDR_SCALARS, r->reason));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown1));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown2));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_ChangeReject(struct ndr_pull *ndr, int ndr_flags, struct samr_ChangeReject *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_samr_RejectReason(ndr, NDR_SCALARS, &r->reason));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown2));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_ChangeReject(struct ndr_print *ndr, const char *name, const struct samr_ChangeReject *r)
-{
-	ndr_print_struct(ndr, name, "samr_ChangeReject");
-	ndr->depth++;
-	ndr_print_samr_RejectReason(ndr, "reason", r->reason);
-	ndr_print_uint32(ndr, "unknown1", r->unknown1);
-	ndr_print_uint32(ndr, "unknown2", r->unknown2);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_ConnectInfo1(struct ndr_push *ndr, int ndr_flags, const struct samr_ConnectInfo1 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_samr_ConnectVersion(ndr, NDR_SCALARS, r->client_version));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown2));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_ConnectInfo1(struct ndr_pull *ndr, int ndr_flags, struct samr_ConnectInfo1 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_samr_ConnectVersion(ndr, NDR_SCALARS, &r->client_version));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown2));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_ConnectInfo1(struct ndr_print *ndr, const char *name, const struct samr_ConnectInfo1 *r)
-{
-	ndr_print_struct(ndr, name, "samr_ConnectInfo1");
-	ndr->depth++;
-	ndr_print_samr_ConnectVersion(ndr, "client_version", r->client_version);
-	ndr_print_uint32(ndr, "unknown2", r->unknown2);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_ConnectInfo(struct ndr_push *ndr, int ndr_flags, const union samr_ConnectInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 1: {
-				NDR_CHECK(ndr_push_samr_ConnectInfo1(ndr, NDR_SCALARS, &r->info1));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 1:
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_ConnectInfo(struct ndr_pull *ndr, int ndr_flags, union samr_ConnectInfo *r)
-{
-	int level;
-	uint32_t _level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 1: {
-				NDR_CHECK(ndr_pull_samr_ConnectInfo1(ndr, NDR_SCALARS, &r->info1));
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 1:
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_ConnectInfo(struct ndr_print *ndr, const char *name, const union samr_ConnectInfo *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "samr_ConnectInfo");
-	switch (level) {
-		case 1:
-			ndr_print_samr_ConnectInfo1(ndr, "info1", &r->info1);
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_samr_ValidateFieldsPresent(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_ValidateFieldsPresent(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_ValidateFieldsPresent(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_VALIDATE_FIELD_PASSWORD_LAST_SET", SAMR_VALIDATE_FIELD_PASSWORD_LAST_SET, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_VALIDATE_FIELD_BAD_PASSWORD_TIME", SAMR_VALIDATE_FIELD_BAD_PASSWORD_TIME, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_VALIDATE_FIELD_LOCKOUT_TIME", SAMR_VALIDATE_FIELD_LOCKOUT_TIME, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_VALIDATE_FIELD_BAD_PASSWORD_COUNT", SAMR_VALIDATE_FIELD_BAD_PASSWORD_COUNT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_VALIDATE_FIELD_PASSWORD_HISTORY_LENGTH", SAMR_VALIDATE_FIELD_PASSWORD_HISTORY_LENGTH, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_VALIDATE_FIELD_PASSWORD_HISTORY", SAMR_VALIDATE_FIELD_PASSWORD_HISTORY, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_ValidatePasswordLevel(struct ndr_push *ndr, int ndr_flags, enum samr_ValidatePasswordLevel r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_ValidatePasswordLevel(struct ndr_pull *ndr, int ndr_flags, enum samr_ValidatePasswordLevel *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_ValidatePasswordLevel(struct ndr_print *ndr, const char *name, enum samr_ValidatePasswordLevel r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case NetValidateAuthentication: val = "NetValidateAuthentication"; break;
-		case NetValidatePasswordChange: val = "NetValidatePasswordChange"; break;
-		case NetValidatePasswordReset: val = "NetValidatePasswordReset"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_samr_ValidationStatus(struct ndr_push *ndr, int ndr_flags, enum samr_ValidationStatus r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_ValidationStatus(struct ndr_pull *ndr, int ndr_flags, enum samr_ValidationStatus *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_ValidationStatus(struct ndr_print *ndr, const char *name, enum samr_ValidationStatus r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case SAMR_VALIDATION_STATUS_SUCCESS: val = "SAMR_VALIDATION_STATUS_SUCCESS"; break;
-		case SAMR_VALIDATION_STATUS_PASSWORD_MUST_CHANGE: val = "SAMR_VALIDATION_STATUS_PASSWORD_MUST_CHANGE"; break;
-		case SAMR_VALIDATION_STATUS_ACCOUNT_LOCKED_OUT: val = "SAMR_VALIDATION_STATUS_ACCOUNT_LOCKED_OUT"; break;
-		case SAMR_VALIDATION_STATUS_BAD_PASSWORD: val = "SAMR_VALIDATION_STATUS_BAD_PASSWORD"; break;
-		case SAMR_VALIDATION_STATUS_PWD_HISTORY_CONFLICT: val = "SAMR_VALIDATION_STATUS_PWD_HISTORY_CONFLICT"; break;
-		case SAMR_VALIDATION_STATUS_PWD_TOO_SHORT: val = "SAMR_VALIDATION_STATUS_PWD_TOO_SHORT"; break;
-		case SAMR_VALIDATION_STATUS_PWD_TOO_LONG: val = "SAMR_VALIDATION_STATUS_PWD_TOO_LONG"; break;
-		case SAMR_VALIDATION_STATUS_NOT_COMPLEX_ENOUGH: val = "SAMR_VALIDATION_STATUS_NOT_COMPLEX_ENOUGH"; break;
-		case SAMR_VALIDATION_STATUS_PASSWORD_TOO_RECENT: val = "SAMR_VALIDATION_STATUS_PASSWORD_TOO_RECENT"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_samr_ValidationBlob(struct ndr_push *ndr, int ndr_flags, const struct samr_ValidationBlob *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->length));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->data));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->data) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->length));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->data, r->length));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_ValidationBlob(struct ndr_pull *ndr, int ndr_flags, struct samr_ValidationBlob *r)
-{
-	uint32_t _ptr_data;
-	TALLOC_CTX *_mem_save_data_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->length));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_data));
-		if (_ptr_data) {
-			NDR_PULL_ALLOC(ndr, r->data);
-		} else {
-			r->data = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->data) {
-			_mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->data, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->data));
-			NDR_PULL_ALLOC_N(ndr, r->data, ndr_get_array_size(ndr, &r->data));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->data, ndr_get_array_size(ndr, &r->data)));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, 0);
-		}
-		if (r->data) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->data, r->length));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_ValidationBlob(struct ndr_print *ndr, const char *name, const struct samr_ValidationBlob *r)
-{
-	ndr_print_struct(ndr, name, "samr_ValidationBlob");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "length", r->length);
-	ndr_print_ptr(ndr, "data", r->data);
-	ndr->depth++;
-	if (r->data) {
-		ndr_print_array_uint8(ndr, "data", r->data, r->length);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_ValidatePasswordInfo(struct ndr_push *ndr, int ndr_flags, const struct samr_ValidatePasswordInfo *r)
-{
-	uint32_t cntr_pwd_history_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 8));
-		NDR_CHECK(ndr_push_samr_ValidateFieldsPresent(ndr, NDR_SCALARS, r->fields_present));
-		NDR_CHECK(ndr_push_NTTIME_hyper(ndr, NDR_SCALARS, r->last_password_change));
-		NDR_CHECK(ndr_push_NTTIME_hyper(ndr, NDR_SCALARS, r->bad_password_time));
-		NDR_CHECK(ndr_push_NTTIME_hyper(ndr, NDR_SCALARS, r->lockout_time));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->bad_pwd_count));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->pwd_history_len));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->pwd_history));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->pwd_history) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->pwd_history_len));
-			for (cntr_pwd_history_1 = 0; cntr_pwd_history_1 < r->pwd_history_len; cntr_pwd_history_1++) {
-				NDR_CHECK(ndr_push_samr_ValidationBlob(ndr, NDR_SCALARS, &r->pwd_history[cntr_pwd_history_1]));
-			}
-			for (cntr_pwd_history_1 = 0; cntr_pwd_history_1 < r->pwd_history_len; cntr_pwd_history_1++) {
-				NDR_CHECK(ndr_push_samr_ValidationBlob(ndr, NDR_BUFFERS, &r->pwd_history[cntr_pwd_history_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_ValidatePasswordInfo(struct ndr_pull *ndr, int ndr_flags, struct samr_ValidatePasswordInfo *r)
-{
-	uint32_t _ptr_pwd_history;
-	uint32_t cntr_pwd_history_1;
-	TALLOC_CTX *_mem_save_pwd_history_0;
-	TALLOC_CTX *_mem_save_pwd_history_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 8));
-		NDR_CHECK(ndr_pull_samr_ValidateFieldsPresent(ndr, NDR_SCALARS, &r->fields_present));
-		NDR_CHECK(ndr_pull_NTTIME_hyper(ndr, NDR_SCALARS, &r->last_password_change));
-		NDR_CHECK(ndr_pull_NTTIME_hyper(ndr, NDR_SCALARS, &r->bad_password_time));
-		NDR_CHECK(ndr_pull_NTTIME_hyper(ndr, NDR_SCALARS, &r->lockout_time));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->bad_pwd_count));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->pwd_history_len));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_pwd_history));
-		if (_ptr_pwd_history) {
-			NDR_PULL_ALLOC(ndr, r->pwd_history);
-		} else {
-			r->pwd_history = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->pwd_history) {
-			_mem_save_pwd_history_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->pwd_history, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->pwd_history));
-			NDR_PULL_ALLOC_N(ndr, r->pwd_history, ndr_get_array_size(ndr, &r->pwd_history));
-			_mem_save_pwd_history_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->pwd_history, 0);
-			for (cntr_pwd_history_1 = 0; cntr_pwd_history_1 < r->pwd_history_len; cntr_pwd_history_1++) {
-				NDR_CHECK(ndr_pull_samr_ValidationBlob(ndr, NDR_SCALARS, &r->pwd_history[cntr_pwd_history_1]));
-			}
-			for (cntr_pwd_history_1 = 0; cntr_pwd_history_1 < r->pwd_history_len; cntr_pwd_history_1++) {
-				NDR_CHECK(ndr_pull_samr_ValidationBlob(ndr, NDR_BUFFERS, &r->pwd_history[cntr_pwd_history_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_pwd_history_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_pwd_history_0, 0);
-		}
-		if (r->pwd_history) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->pwd_history, r->pwd_history_len));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_ValidatePasswordInfo(struct ndr_print *ndr, const char *name, const struct samr_ValidatePasswordInfo *r)
-{
-	uint32_t cntr_pwd_history_1;
-	ndr_print_struct(ndr, name, "samr_ValidatePasswordInfo");
-	ndr->depth++;
-	ndr_print_samr_ValidateFieldsPresent(ndr, "fields_present", r->fields_present);
-	ndr_print_NTTIME_hyper(ndr, "last_password_change", r->last_password_change);
-	ndr_print_NTTIME_hyper(ndr, "bad_password_time", r->bad_password_time);
-	ndr_print_NTTIME_hyper(ndr, "lockout_time", r->lockout_time);
-	ndr_print_uint32(ndr, "bad_pwd_count", r->bad_pwd_count);
-	ndr_print_uint32(ndr, "pwd_history_len", r->pwd_history_len);
-	ndr_print_ptr(ndr, "pwd_history", r->pwd_history);
-	ndr->depth++;
-	if (r->pwd_history) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "pwd_history", r->pwd_history_len);
-		ndr->depth++;
-		for (cntr_pwd_history_1=0;cntr_pwd_history_1<r->pwd_history_len;cntr_pwd_history_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_pwd_history_1) != -1) {
-				ndr_print_samr_ValidationBlob(ndr, "pwd_history", &r->pwd_history[cntr_pwd_history_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_ValidatePasswordRepCtr(struct ndr_push *ndr, int ndr_flags, const struct samr_ValidatePasswordRepCtr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 8));
-		NDR_CHECK(ndr_push_samr_ValidatePasswordInfo(ndr, NDR_SCALARS, &r->info));
-		NDR_CHECK(ndr_push_samr_ValidationStatus(ndr, NDR_SCALARS, r->status));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_samr_ValidatePasswordInfo(ndr, NDR_BUFFERS, &r->info));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_ValidatePasswordRepCtr(struct ndr_pull *ndr, int ndr_flags, struct samr_ValidatePasswordRepCtr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 8));
-		NDR_CHECK(ndr_pull_samr_ValidatePasswordInfo(ndr, NDR_SCALARS, &r->info));
-		NDR_CHECK(ndr_pull_samr_ValidationStatus(ndr, NDR_SCALARS, &r->status));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_samr_ValidatePasswordInfo(ndr, NDR_BUFFERS, &r->info));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_ValidatePasswordRepCtr(struct ndr_print *ndr, const char *name, const struct samr_ValidatePasswordRepCtr *r)
-{
-	ndr_print_struct(ndr, name, "samr_ValidatePasswordRepCtr");
-	ndr->depth++;
-	ndr_print_samr_ValidatePasswordInfo(ndr, "info", &r->info);
-	ndr_print_samr_ValidationStatus(ndr, "status", r->status);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_ValidatePasswordRep(struct ndr_push *ndr, int ndr_flags, const union samr_ValidatePasswordRep *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 1: {
-				NDR_CHECK(ndr_push_samr_ValidatePasswordRepCtr(ndr, NDR_SCALARS, &r->ctr1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_push_samr_ValidatePasswordRepCtr(ndr, NDR_SCALARS, &r->ctr2));
-			break; }
-
-			case 3: {
-				NDR_CHECK(ndr_push_samr_ValidatePasswordRepCtr(ndr, NDR_SCALARS, &r->ctr3));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 1:
-				NDR_CHECK(ndr_push_samr_ValidatePasswordRepCtr(ndr, NDR_BUFFERS, &r->ctr1));
-			break;
-
-			case 2:
-				NDR_CHECK(ndr_push_samr_ValidatePasswordRepCtr(ndr, NDR_BUFFERS, &r->ctr2));
-			break;
-
-			case 3:
-				NDR_CHECK(ndr_push_samr_ValidatePasswordRepCtr(ndr, NDR_BUFFERS, &r->ctr3));
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_ValidatePasswordRep(struct ndr_pull *ndr, int ndr_flags, union samr_ValidatePasswordRep *r)
-{
-	int level;
-	uint16_t _level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 1: {
-				NDR_CHECK(ndr_pull_samr_ValidatePasswordRepCtr(ndr, NDR_SCALARS, &r->ctr1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_pull_samr_ValidatePasswordRepCtr(ndr, NDR_SCALARS, &r->ctr2));
-			break; }
-
-			case 3: {
-				NDR_CHECK(ndr_pull_samr_ValidatePasswordRepCtr(ndr, NDR_SCALARS, &r->ctr3));
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 1:
-				NDR_CHECK(ndr_pull_samr_ValidatePasswordRepCtr(ndr, NDR_BUFFERS, &r->ctr1));
-			break;
-
-			case 2:
-				NDR_CHECK(ndr_pull_samr_ValidatePasswordRepCtr(ndr, NDR_BUFFERS, &r->ctr2));
-			break;
-
-			case 3:
-				NDR_CHECK(ndr_pull_samr_ValidatePasswordRepCtr(ndr, NDR_BUFFERS, &r->ctr3));
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_ValidatePasswordRep(struct ndr_print *ndr, const char *name, const union samr_ValidatePasswordRep *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "samr_ValidatePasswordRep");
-	switch (level) {
-		case 1:
-			ndr_print_samr_ValidatePasswordRepCtr(ndr, "ctr1", &r->ctr1);
-		break;
-
-		case 2:
-			ndr_print_samr_ValidatePasswordRepCtr(ndr, "ctr2", &r->ctr2);
-		break;
-
-		case 3:
-			ndr_print_samr_ValidatePasswordRepCtr(ndr, "ctr3", &r->ctr3);
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_samr_ValidatePasswordReq3(struct ndr_push *ndr, int ndr_flags, const struct samr_ValidatePasswordReq3 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 8));
-		NDR_CHECK(ndr_push_samr_ValidatePasswordInfo(ndr, NDR_SCALARS, &r->info));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->password));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->account));
-		NDR_CHECK(ndr_push_samr_ValidationBlob(ndr, NDR_SCALARS, &r->hash));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->pwd_must_change_at_next_logon));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->clear_lockout));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_samr_ValidatePasswordInfo(ndr, NDR_BUFFERS, &r->info));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->password));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->account));
-		NDR_CHECK(ndr_push_samr_ValidationBlob(ndr, NDR_BUFFERS, &r->hash));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_ValidatePasswordReq3(struct ndr_pull *ndr, int ndr_flags, struct samr_ValidatePasswordReq3 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 8));
-		NDR_CHECK(ndr_pull_samr_ValidatePasswordInfo(ndr, NDR_SCALARS, &r->info));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->password));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->account));
-		NDR_CHECK(ndr_pull_samr_ValidationBlob(ndr, NDR_SCALARS, &r->hash));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->pwd_must_change_at_next_logon));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->clear_lockout));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_samr_ValidatePasswordInfo(ndr, NDR_BUFFERS, &r->info));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->password));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->account));
-		NDR_CHECK(ndr_pull_samr_ValidationBlob(ndr, NDR_BUFFERS, &r->hash));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_ValidatePasswordReq3(struct ndr_print *ndr, const char *name, const struct samr_ValidatePasswordReq3 *r)
-{
-	ndr_print_struct(ndr, name, "samr_ValidatePasswordReq3");
-	ndr->depth++;
-	ndr_print_samr_ValidatePasswordInfo(ndr, "info", &r->info);
-	ndr_print_lsa_StringLarge(ndr, "password", &r->password);
-	ndr_print_lsa_StringLarge(ndr, "account", &r->account);
-	ndr_print_samr_ValidationBlob(ndr, "hash", &r->hash);
-	ndr_print_uint8(ndr, "pwd_must_change_at_next_logon", r->pwd_must_change_at_next_logon);
-	ndr_print_uint8(ndr, "clear_lockout", r->clear_lockout);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_ValidatePasswordReq2(struct ndr_push *ndr, int ndr_flags, const struct samr_ValidatePasswordReq2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 8));
-		NDR_CHECK(ndr_push_samr_ValidatePasswordInfo(ndr, NDR_SCALARS, &r->info));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->password));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->account));
-		NDR_CHECK(ndr_push_samr_ValidationBlob(ndr, NDR_SCALARS, &r->hash));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->password_matched));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_samr_ValidatePasswordInfo(ndr, NDR_BUFFERS, &r->info));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->password));
-		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->account));
-		NDR_CHECK(ndr_push_samr_ValidationBlob(ndr, NDR_BUFFERS, &r->hash));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_ValidatePasswordReq2(struct ndr_pull *ndr, int ndr_flags, struct samr_ValidatePasswordReq2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 8));
-		NDR_CHECK(ndr_pull_samr_ValidatePasswordInfo(ndr, NDR_SCALARS, &r->info));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->password));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->account));
-		NDR_CHECK(ndr_pull_samr_ValidationBlob(ndr, NDR_SCALARS, &r->hash));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->password_matched));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_samr_ValidatePasswordInfo(ndr, NDR_BUFFERS, &r->info));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->password));
-		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->account));
-		NDR_CHECK(ndr_pull_samr_ValidationBlob(ndr, NDR_BUFFERS, &r->hash));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_ValidatePasswordReq2(struct ndr_print *ndr, const char *name, const struct samr_ValidatePasswordReq2 *r)
-{
-	ndr_print_struct(ndr, name, "samr_ValidatePasswordReq2");
-	ndr->depth++;
-	ndr_print_samr_ValidatePasswordInfo(ndr, "info", &r->info);
-	ndr_print_lsa_StringLarge(ndr, "password", &r->password);
-	ndr_print_lsa_StringLarge(ndr, "account", &r->account);
-	ndr_print_samr_ValidationBlob(ndr, "hash", &r->hash);
-	ndr_print_uint8(ndr, "password_matched", r->password_matched);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_ValidatePasswordReq1(struct ndr_push *ndr, int ndr_flags, const struct samr_ValidatePasswordReq1 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 8));
-		NDR_CHECK(ndr_push_samr_ValidatePasswordInfo(ndr, NDR_SCALARS, &r->info));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->password_matched));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_samr_ValidatePasswordInfo(ndr, NDR_BUFFERS, &r->info));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_ValidatePasswordReq1(struct ndr_pull *ndr, int ndr_flags, struct samr_ValidatePasswordReq1 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 8));
-		NDR_CHECK(ndr_pull_samr_ValidatePasswordInfo(ndr, NDR_SCALARS, &r->info));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->password_matched));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_samr_ValidatePasswordInfo(ndr, NDR_BUFFERS, &r->info));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_ValidatePasswordReq1(struct ndr_print *ndr, const char *name, const struct samr_ValidatePasswordReq1 *r)
-{
-	ndr_print_struct(ndr, name, "samr_ValidatePasswordReq1");
-	ndr->depth++;
-	ndr_print_samr_ValidatePasswordInfo(ndr, "info", &r->info);
-	ndr_print_uint8(ndr, "password_matched", r->password_matched);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_ValidatePasswordReq(struct ndr_push *ndr, int ndr_flags, const union samr_ValidatePasswordReq *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 1: {
-				NDR_CHECK(ndr_push_samr_ValidatePasswordReq1(ndr, NDR_SCALARS, &r->req1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_push_samr_ValidatePasswordReq2(ndr, NDR_SCALARS, &r->req2));
-			break; }
-
-			case 3: {
-				NDR_CHECK(ndr_push_samr_ValidatePasswordReq3(ndr, NDR_SCALARS, &r->req3));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 1:
-				NDR_CHECK(ndr_push_samr_ValidatePasswordReq1(ndr, NDR_BUFFERS, &r->req1));
-			break;
-
-			case 2:
-				NDR_CHECK(ndr_push_samr_ValidatePasswordReq2(ndr, NDR_BUFFERS, &r->req2));
-			break;
-
-			case 3:
-				NDR_CHECK(ndr_push_samr_ValidatePasswordReq3(ndr, NDR_BUFFERS, &r->req3));
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_ValidatePasswordReq(struct ndr_pull *ndr, int ndr_flags, union samr_ValidatePasswordReq *r)
-{
-	int level;
-	uint16_t _level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 1: {
-				NDR_CHECK(ndr_pull_samr_ValidatePasswordReq1(ndr, NDR_SCALARS, &r->req1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_pull_samr_ValidatePasswordReq2(ndr, NDR_SCALARS, &r->req2));
-			break; }
-
-			case 3: {
-				NDR_CHECK(ndr_pull_samr_ValidatePasswordReq3(ndr, NDR_SCALARS, &r->req3));
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 1:
-				NDR_CHECK(ndr_pull_samr_ValidatePasswordReq1(ndr, NDR_BUFFERS, &r->req1));
-			break;
-
-			case 2:
-				NDR_CHECK(ndr_pull_samr_ValidatePasswordReq2(ndr, NDR_BUFFERS, &r->req2));
-			break;
-
-			case 3:
-				NDR_CHECK(ndr_pull_samr_ValidatePasswordReq3(ndr, NDR_BUFFERS, &r->req3));
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_ValidatePasswordReq(struct ndr_print *ndr, const char *name, const union samr_ValidatePasswordReq *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "samr_ValidatePasswordReq");
-	switch (level) {
-		case 1:
-			ndr_print_samr_ValidatePasswordReq1(ndr, "req1", &r->req1);
-		break;
-
-		case 2:
-			ndr_print_samr_ValidatePasswordReq2(ndr, "req2", &r->req2);
-		break;
-
-		case 3:
-			ndr_print_samr_ValidatePasswordReq3(ndr, "req3", &r->req3);
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_samr_Connect(struct ndr_push *ndr, int flags, const struct samr_Connect *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.system_name));
-		if (r->in.system_name) {
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, *r->in.system_name));
-		}
-		NDR_CHECK(ndr_push_samr_ConnectAccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.connect_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->out.connect_handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_Connect(struct ndr_pull *ndr, int flags, struct samr_Connect *r)
-{
-	uint32_t _ptr_system_name;
-	TALLOC_CTX *_mem_save_system_name_0;
-	TALLOC_CTX *_mem_save_connect_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_system_name));
-		if (_ptr_system_name) {
-			NDR_PULL_ALLOC(ndr, r->in.system_name);
-		} else {
-			r->in.system_name = NULL;
-		}
-		if (r->in.system_name) {
-			_mem_save_system_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.system_name, 0);
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, r->in.system_name));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_system_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_samr_ConnectAccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.connect_handle);
-		ZERO_STRUCTP(r->out.connect_handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.connect_handle);
-		}
-		_mem_save_connect_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.connect_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->out.connect_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_connect_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_Connect(struct ndr_print *ndr, const char *name, int flags, const struct samr_Connect *r)
-{
-	ndr_print_struct(ndr, name, "samr_Connect");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_Connect");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "system_name", r->in.system_name);
-		ndr->depth++;
-		if (r->in.system_name) {
-			ndr_print_uint16(ndr, "system_name", *r->in.system_name);
-		}
-		ndr->depth--;
-		ndr_print_samr_ConnectAccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_Connect");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "connect_handle", r->out.connect_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "connect_handle", r->out.connect_handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_samr_Close(struct ndr_push *ndr, int flags, const struct samr_Close *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.handle));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->out.handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_samr_Close(struct ndr_pull *ndr, int flags, struct samr_Close *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.handle);
-		*r->out.handle = *r->in.handle;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->out.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_Close(struct ndr_print *ndr, const char *name, int flags, const struct samr_Close *r)
-{
-	ndr_print_struct(ndr, name, "samr_Close");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_Close");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_Close");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->out.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->out.handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_SetSecurity(struct ndr_push *ndr, int flags, const struct samr_SetSecurity *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.handle));
-		NDR_CHECK(ndr_push_security_secinfo(ndr, NDR_SCALARS, r->in.sec_info));
-		if (r->in.sdbuf == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sdbuf));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_SetSecurity(struct ndr_pull *ndr, int flags, struct samr_SetSecurity *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_sdbuf_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_security_secinfo(ndr, NDR_SCALARS, &r->in.sec_info));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sdbuf);
-		}
-		_mem_save_sdbuf_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sdbuf, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sdbuf));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sdbuf_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_SetSecurity(struct ndr_print *ndr, const char *name, int flags, const struct samr_SetSecurity *r)
-{
-	ndr_print_struct(ndr, name, "samr_SetSecurity");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_SetSecurity");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_security_secinfo(ndr, "sec_info", r->in.sec_info);
-		ndr_print_ptr(ndr, "sdbuf", r->in.sdbuf);
-		ndr->depth++;
-		ndr_print_sec_desc_buf(ndr, "sdbuf", r->in.sdbuf);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_SetSecurity");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_QuerySecurity(struct ndr_push *ndr, int flags, const struct samr_QuerySecurity *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.handle));
-		NDR_CHECK(ndr_push_security_secinfo(ndr, NDR_SCALARS, r->in.sec_info));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.sdbuf == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.sdbuf));
-		if (*r->out.sdbuf) {
-			NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.sdbuf));
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_QuerySecurity(struct ndr_pull *ndr, int flags, struct samr_QuerySecurity *r)
-{
-	uint32_t _ptr_sdbuf;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_sdbuf_0;
-	TALLOC_CTX *_mem_save_sdbuf_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_security_secinfo(ndr, NDR_SCALARS, &r->in.sec_info));
-		NDR_PULL_ALLOC(ndr, r->out.sdbuf);
-		ZERO_STRUCTP(r->out.sdbuf);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.sdbuf);
-		}
-		_mem_save_sdbuf_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.sdbuf, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sdbuf));
-		if (_ptr_sdbuf) {
-			NDR_PULL_ALLOC(ndr, *r->out.sdbuf);
-		} else {
-			*r->out.sdbuf = NULL;
-		}
-		if (*r->out.sdbuf) {
-			_mem_save_sdbuf_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.sdbuf, 0);
-			NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.sdbuf));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sdbuf_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sdbuf_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_QuerySecurity(struct ndr_print *ndr, const char *name, int flags, const struct samr_QuerySecurity *r)
-{
-	ndr_print_struct(ndr, name, "samr_QuerySecurity");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_QuerySecurity");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_security_secinfo(ndr, "sec_info", r->in.sec_info);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_QuerySecurity");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "sdbuf", r->out.sdbuf);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "sdbuf", *r->out.sdbuf);
-		ndr->depth++;
-		if (*r->out.sdbuf) {
-			ndr_print_sec_desc_buf(ndr, "sdbuf", *r->out.sdbuf);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_Shutdown(struct ndr_push *ndr, int flags, const struct samr_Shutdown *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.connect_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.connect_handle));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_Shutdown(struct ndr_pull *ndr, int flags, struct samr_Shutdown *r)
-{
-	TALLOC_CTX *_mem_save_connect_handle_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.connect_handle);
-		}
-		_mem_save_connect_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.connect_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.connect_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_connect_handle_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_Shutdown(struct ndr_print *ndr, const char *name, int flags, const struct samr_Shutdown *r)
-{
-	ndr_print_struct(ndr, name, "samr_Shutdown");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_Shutdown");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "connect_handle", r->in.connect_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "connect_handle", r->in.connect_handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_Shutdown");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_LookupDomain(struct ndr_push *ndr, int flags, const struct samr_LookupDomain *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.connect_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.connect_handle));
-		if (r->in.domain_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.domain_name));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.sid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.sid));
-		if (*r->out.sid) {
-			NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.sid));
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_LookupDomain(struct ndr_pull *ndr, int flags, struct samr_LookupDomain *r)
-{
-	uint32_t _ptr_sid;
-	TALLOC_CTX *_mem_save_connect_handle_0;
-	TALLOC_CTX *_mem_save_domain_name_0;
-	TALLOC_CTX *_mem_save_sid_0;
-	TALLOC_CTX *_mem_save_sid_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.connect_handle);
-		}
-		_mem_save_connect_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.connect_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.connect_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_connect_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_name);
-		}
-		_mem_save_domain_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.domain_name));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_name_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.sid);
-		ZERO_STRUCTP(r->out.sid);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.sid);
-		}
-		_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.sid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sid));
-		if (_ptr_sid) {
-			NDR_PULL_ALLOC(ndr, *r->out.sid);
-		} else {
-			*r->out.sid = NULL;
-		}
-		if (*r->out.sid) {
-			_mem_save_sid_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.sid, 0);
-			NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.sid));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_LookupDomain(struct ndr_print *ndr, const char *name, int flags, const struct samr_LookupDomain *r)
-{
-	ndr_print_struct(ndr, name, "samr_LookupDomain");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_LookupDomain");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "connect_handle", r->in.connect_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "connect_handle", r->in.connect_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "domain_name", r->in.domain_name);
-		ndr->depth++;
-		ndr_print_lsa_String(ndr, "domain_name", r->in.domain_name);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_LookupDomain");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "sid", r->out.sid);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "sid", *r->out.sid);
-		ndr->depth++;
-		if (*r->out.sid) {
-			ndr_print_dom_sid2(ndr, "sid", *r->out.sid);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_EnumDomains(struct ndr_push *ndr, int flags, const struct samr_EnumDomains *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.connect_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.connect_handle));
-		if (r->in.resume_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buf_size));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.resume_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		if (r->out.sam == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.sam));
-		if (*r->out.sam) {
-			NDR_CHECK(ndr_push_samr_SamArray(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.sam));
-		}
-		if (r->out.num_entries == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.num_entries));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_EnumDomains(struct ndr_pull *ndr, int flags, struct samr_EnumDomains *r)
-{
-	uint32_t _ptr_sam;
-	TALLOC_CTX *_mem_save_connect_handle_0;
-	TALLOC_CTX *_mem_save_resume_handle_0;
-	TALLOC_CTX *_mem_save_sam_0;
-	TALLOC_CTX *_mem_save_sam_1;
-	TALLOC_CTX *_mem_save_num_entries_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.connect_handle);
-		}
-		_mem_save_connect_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.connect_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.connect_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_connect_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.resume_handle);
-		}
-		_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.buf_size));
-		NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		*r->out.resume_handle = *r->in.resume_handle;
-		NDR_PULL_ALLOC(ndr, r->out.sam);
-		ZERO_STRUCTP(r->out.sam);
-		NDR_PULL_ALLOC(ndr, r->out.num_entries);
-		ZERO_STRUCTP(r->out.num_entries);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		}
-		_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.sam);
-		}
-		_mem_save_sam_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.sam, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sam));
-		if (_ptr_sam) {
-			NDR_PULL_ALLOC(ndr, *r->out.sam);
-		} else {
-			*r->out.sam = NULL;
-		}
-		if (*r->out.sam) {
-			_mem_save_sam_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.sam, 0);
-			NDR_CHECK(ndr_pull_samr_SamArray(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.sam));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sam_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sam_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.num_entries);
-		}
-		_mem_save_num_entries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.num_entries, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.num_entries));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_num_entries_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_EnumDomains(struct ndr_print *ndr, const char *name, int flags, const struct samr_EnumDomains *r)
-{
-	ndr_print_struct(ndr, name, "samr_EnumDomains");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_EnumDomains");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "connect_handle", r->in.connect_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "connect_handle", r->in.connect_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "buf_size", r->in.buf_size);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_EnumDomains");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sam", r->out.sam);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "sam", *r->out.sam);
-		ndr->depth++;
-		if (*r->out.sam) {
-			ndr_print_samr_SamArray(ndr, "sam", *r->out.sam);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "num_entries", r->out.num_entries);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "num_entries", *r->out.num_entries);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_samr_OpenDomain(struct ndr_push *ndr, int flags, const struct samr_OpenDomain *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.connect_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.connect_handle));
-		NDR_CHECK(ndr_push_samr_DomainAccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-		if (r->in.sid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sid));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->out.domain_handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_samr_OpenDomain(struct ndr_pull *ndr, int flags, struct samr_OpenDomain *r)
-{
-	TALLOC_CTX *_mem_save_connect_handle_0;
-	TALLOC_CTX *_mem_save_sid_0;
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.connect_handle);
-		}
-		_mem_save_connect_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.connect_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.connect_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_connect_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_DomainAccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sid);
-		}
-		_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sid));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.domain_handle);
-		ZERO_STRUCTP(r->out.domain_handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->out.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_OpenDomain(struct ndr_print *ndr, const char *name, int flags, const struct samr_OpenDomain *r)
-{
-	ndr_print_struct(ndr, name, "samr_OpenDomain");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_OpenDomain");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "connect_handle", r->in.connect_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "connect_handle", r->in.connect_handle);
-		ndr->depth--;
-		ndr_print_samr_DomainAccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr_print_ptr(ndr, "sid", r->in.sid);
-		ndr->depth++;
-		ndr_print_dom_sid2(ndr, "sid", r->in.sid);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_OpenDomain");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->out.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->out.domain_handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_QueryDomainInfo(struct ndr_push *ndr, int flags, const struct samr_QueryDomainInfo *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.level));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.info));
-		if (*r->out.info) {
-			NDR_CHECK(ndr_push_set_switch_value(ndr, *r->out.info, r->in.level));
-			NDR_CHECK(ndr_push_samr_DomainInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_QueryDomainInfo(struct ndr_pull *ndr, int flags, struct samr_QueryDomainInfo *r)
-{
-	uint32_t _ptr_info;
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_info_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.level));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, *r->out.info);
-		} else {
-			*r->out.info = NULL;
-		}
-		if (*r->out.info) {
-			_mem_save_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.info, 0);
-			NDR_CHECK(ndr_pull_set_switch_value(ndr, *r->out.info, r->in.level));
-			NDR_CHECK(ndr_pull_samr_DomainInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_QueryDomainInfo(struct ndr_print *ndr, const char *name, int flags, const struct samr_QueryDomainInfo *r)
-{
-	ndr_print_struct(ndr, name, "samr_QueryDomainInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_QueryDomainInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr_print_uint16(ndr, "level", r->in.level);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_QueryDomainInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", *r->out.info);
-		ndr->depth++;
-		if (*r->out.info) {
-			ndr_print_set_switch_value(ndr, *r->out.info, r->in.level);
-			ndr_print_samr_DomainInfo(ndr, "info", *r->out.info);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_SetDomainInfo(struct ndr_push *ndr, int flags, const struct samr_SetDomainInfo *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.info, r->in.level));
-		NDR_CHECK(ndr_push_samr_DomainInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_SetDomainInfo(struct ndr_pull *ndr, int flags, struct samr_SetDomainInfo *r)
-{
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.info, r->in.level));
-		NDR_CHECK(ndr_pull_samr_DomainInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_SetDomainInfo(struct ndr_print *ndr, const char *name, int flags, const struct samr_SetDomainInfo *r)
-{
-	ndr_print_struct(ndr, name, "samr_SetDomainInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_SetDomainInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr_print_uint16(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "info", r->in.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->in.info, r->in.level);
-		ndr_print_samr_DomainInfo(ndr, "info", r->in.info);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_SetDomainInfo");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_CreateDomainGroup(struct ndr_push *ndr, int flags, const struct samr_CreateDomainGroup *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		if (r->in.name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.name));
-		NDR_CHECK(ndr_push_samr_GroupAccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.group_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->out.group_handle));
-		if (r->out.rid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.rid));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_CreateDomainGroup(struct ndr_pull *ndr, int flags, struct samr_CreateDomainGroup *r)
-{
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	TALLOC_CTX *_mem_save_name_0;
-	TALLOC_CTX *_mem_save_group_handle_0;
-	TALLOC_CTX *_mem_save_rid_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.name);
-		}
-		_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.name));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_GroupAccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.group_handle);
-		ZERO_STRUCTP(r->out.group_handle);
-		NDR_PULL_ALLOC(ndr, r->out.rid);
-		ZERO_STRUCTP(r->out.rid);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.group_handle);
-		}
-		_mem_save_group_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.group_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->out.group_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_group_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.rid);
-		}
-		_mem_save_rid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.rid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.rid));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rid_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_CreateDomainGroup(struct ndr_print *ndr, const char *name, int flags, const struct samr_CreateDomainGroup *r)
-{
-	ndr_print_struct(ndr, name, "samr_CreateDomainGroup");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_CreateDomainGroup");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "name", r->in.name);
-		ndr->depth++;
-		ndr_print_lsa_String(ndr, "name", r->in.name);
-		ndr->depth--;
-		ndr_print_samr_GroupAccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_CreateDomainGroup");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "group_handle", r->out.group_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "group_handle", r->out.group_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "rid", r->out.rid);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "rid", *r->out.rid);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_EnumDomainGroups(struct ndr_push *ndr, int flags, const struct samr_EnumDomainGroups *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		if (r->in.resume_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_size));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.resume_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		if (r->out.sam == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.sam));
-		if (*r->out.sam) {
-			NDR_CHECK(ndr_push_samr_SamArray(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.sam));
-		}
-		if (r->out.num_entries == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.num_entries));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_EnumDomainGroups(struct ndr_pull *ndr, int flags, struct samr_EnumDomainGroups *r)
-{
-	uint32_t _ptr_sam;
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	TALLOC_CTX *_mem_save_resume_handle_0;
-	TALLOC_CTX *_mem_save_sam_0;
-	TALLOC_CTX *_mem_save_sam_1;
-	TALLOC_CTX *_mem_save_num_entries_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.resume_handle);
-		}
-		_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_size));
-		NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		*r->out.resume_handle = *r->in.resume_handle;
-		NDR_PULL_ALLOC(ndr, r->out.sam);
-		ZERO_STRUCTP(r->out.sam);
-		NDR_PULL_ALLOC(ndr, r->out.num_entries);
-		ZERO_STRUCTP(r->out.num_entries);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		}
-		_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.sam);
-		}
-		_mem_save_sam_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.sam, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sam));
-		if (_ptr_sam) {
-			NDR_PULL_ALLOC(ndr, *r->out.sam);
-		} else {
-			*r->out.sam = NULL;
-		}
-		if (*r->out.sam) {
-			_mem_save_sam_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.sam, 0);
-			NDR_CHECK(ndr_pull_samr_SamArray(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.sam));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sam_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sam_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.num_entries);
-		}
-		_mem_save_num_entries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.num_entries, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.num_entries));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_num_entries_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_EnumDomainGroups(struct ndr_print *ndr, const char *name, int flags, const struct samr_EnumDomainGroups *r)
-{
-	ndr_print_struct(ndr, name, "samr_EnumDomainGroups");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_EnumDomainGroups");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "max_size", r->in.max_size);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_EnumDomainGroups");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sam", r->out.sam);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "sam", *r->out.sam);
-		ndr->depth++;
-		if (*r->out.sam) {
-			ndr_print_samr_SamArray(ndr, "sam", *r->out.sam);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "num_entries", r->out.num_entries);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "num_entries", *r->out.num_entries);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_CreateUser(struct ndr_push *ndr, int flags, const struct samr_CreateUser *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		if (r->in.account_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.account_name));
-		NDR_CHECK(ndr_push_samr_UserAccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.user_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->out.user_handle));
-		if (r->out.rid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.rid));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_CreateUser(struct ndr_pull *ndr, int flags, struct samr_CreateUser *r)
-{
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	TALLOC_CTX *_mem_save_account_name_0;
-	TALLOC_CTX *_mem_save_user_handle_0;
-	TALLOC_CTX *_mem_save_rid_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.account_name);
-		}
-		_mem_save_account_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.account_name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.account_name));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_account_name_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_UserAccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.user_handle);
-		ZERO_STRUCTP(r->out.user_handle);
-		NDR_PULL_ALLOC(ndr, r->out.rid);
-		ZERO_STRUCTP(r->out.rid);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.user_handle);
-		}
-		_mem_save_user_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.user_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->out.user_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.rid);
-		}
-		_mem_save_rid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.rid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.rid));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rid_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_CreateUser(struct ndr_print *ndr, const char *name, int flags, const struct samr_CreateUser *r)
-{
-	ndr_print_struct(ndr, name, "samr_CreateUser");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_CreateUser");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "account_name", r->in.account_name);
-		ndr->depth++;
-		ndr_print_lsa_String(ndr, "account_name", r->in.account_name);
-		ndr->depth--;
-		ndr_print_samr_UserAccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_CreateUser");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "user_handle", r->out.user_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "user_handle", r->out.user_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "rid", r->out.rid);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "rid", *r->out.rid);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_EnumDomainUsers(struct ndr_push *ndr, int flags, const struct samr_EnumDomainUsers *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		if (r->in.resume_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
-		NDR_CHECK(ndr_push_samr_AcctFlags(ndr, NDR_SCALARS, r->in.acct_flags));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_size));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.resume_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		if (r->out.sam == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.sam));
-		if (*r->out.sam) {
-			NDR_CHECK(ndr_push_samr_SamArray(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.sam));
-		}
-		if (r->out.num_entries == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.num_entries));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_EnumDomainUsers(struct ndr_pull *ndr, int flags, struct samr_EnumDomainUsers *r)
-{
-	uint32_t _ptr_sam;
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	TALLOC_CTX *_mem_save_resume_handle_0;
-	TALLOC_CTX *_mem_save_sam_0;
-	TALLOC_CTX *_mem_save_sam_1;
-	TALLOC_CTX *_mem_save_num_entries_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.resume_handle);
-		}
-		_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_AcctFlags(ndr, NDR_SCALARS, &r->in.acct_flags));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_size));
-		NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		*r->out.resume_handle = *r->in.resume_handle;
-		NDR_PULL_ALLOC(ndr, r->out.sam);
-		ZERO_STRUCTP(r->out.sam);
-		NDR_PULL_ALLOC(ndr, r->out.num_entries);
-		ZERO_STRUCTP(r->out.num_entries);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		}
-		_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.sam);
-		}
-		_mem_save_sam_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.sam, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sam));
-		if (_ptr_sam) {
-			NDR_PULL_ALLOC(ndr, *r->out.sam);
-		} else {
-			*r->out.sam = NULL;
-		}
-		if (*r->out.sam) {
-			_mem_save_sam_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.sam, 0);
-			NDR_CHECK(ndr_pull_samr_SamArray(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.sam));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sam_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sam_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.num_entries);
-		}
-		_mem_save_num_entries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.num_entries, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.num_entries));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_num_entries_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_EnumDomainUsers(struct ndr_print *ndr, const char *name, int flags, const struct samr_EnumDomainUsers *r)
-{
-	ndr_print_struct(ndr, name, "samr_EnumDomainUsers");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_EnumDomainUsers");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		ndr->depth--;
-		ndr_print_samr_AcctFlags(ndr, "acct_flags", r->in.acct_flags);
-		ndr_print_uint32(ndr, "max_size", r->in.max_size);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_EnumDomainUsers");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sam", r->out.sam);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "sam", *r->out.sam);
-		ndr->depth++;
-		if (*r->out.sam) {
-			ndr_print_samr_SamArray(ndr, "sam", *r->out.sam);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "num_entries", r->out.num_entries);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "num_entries", *r->out.num_entries);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_CreateDomAlias(struct ndr_push *ndr, int flags, const struct samr_CreateDomAlias *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		if (r->in.alias_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.alias_name));
-		NDR_CHECK(ndr_push_samr_AliasAccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.alias_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->out.alias_handle));
-		if (r->out.rid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.rid));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_CreateDomAlias(struct ndr_pull *ndr, int flags, struct samr_CreateDomAlias *r)
-{
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	TALLOC_CTX *_mem_save_alias_name_0;
-	TALLOC_CTX *_mem_save_alias_handle_0;
-	TALLOC_CTX *_mem_save_rid_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.alias_name);
-		}
-		_mem_save_alias_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.alias_name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.alias_name));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_alias_name_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_AliasAccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.alias_handle);
-		ZERO_STRUCTP(r->out.alias_handle);
-		NDR_PULL_ALLOC(ndr, r->out.rid);
-		ZERO_STRUCTP(r->out.rid);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.alias_handle);
-		}
-		_mem_save_alias_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.alias_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->out.alias_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_alias_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.rid);
-		}
-		_mem_save_rid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.rid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.rid));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rid_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_CreateDomAlias(struct ndr_print *ndr, const char *name, int flags, const struct samr_CreateDomAlias *r)
-{
-	ndr_print_struct(ndr, name, "samr_CreateDomAlias");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_CreateDomAlias");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "alias_name", r->in.alias_name);
-		ndr->depth++;
-		ndr_print_lsa_String(ndr, "alias_name", r->in.alias_name);
-		ndr->depth--;
-		ndr_print_samr_AliasAccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_CreateDomAlias");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "alias_handle", r->out.alias_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "alias_handle", r->out.alias_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "rid", r->out.rid);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "rid", *r->out.rid);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_EnumDomainAliases(struct ndr_push *ndr, int flags, const struct samr_EnumDomainAliases *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		if (r->in.resume_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_size));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.resume_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		if (r->out.sam == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.sam));
-		if (*r->out.sam) {
-			NDR_CHECK(ndr_push_samr_SamArray(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.sam));
-		}
-		if (r->out.num_entries == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.num_entries));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_EnumDomainAliases(struct ndr_pull *ndr, int flags, struct samr_EnumDomainAliases *r)
-{
-	uint32_t _ptr_sam;
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	TALLOC_CTX *_mem_save_resume_handle_0;
-	TALLOC_CTX *_mem_save_sam_0;
-	TALLOC_CTX *_mem_save_sam_1;
-	TALLOC_CTX *_mem_save_num_entries_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.resume_handle);
-		}
-		_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_size));
-		NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		*r->out.resume_handle = *r->in.resume_handle;
-		NDR_PULL_ALLOC(ndr, r->out.sam);
-		ZERO_STRUCTP(r->out.sam);
-		NDR_PULL_ALLOC(ndr, r->out.num_entries);
-		ZERO_STRUCTP(r->out.num_entries);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		}
-		_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.sam);
-		}
-		_mem_save_sam_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.sam, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sam));
-		if (_ptr_sam) {
-			NDR_PULL_ALLOC(ndr, *r->out.sam);
-		} else {
-			*r->out.sam = NULL;
-		}
-		if (*r->out.sam) {
-			_mem_save_sam_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.sam, 0);
-			NDR_CHECK(ndr_pull_samr_SamArray(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.sam));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sam_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sam_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.num_entries);
-		}
-		_mem_save_num_entries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.num_entries, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.num_entries));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_num_entries_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_EnumDomainAliases(struct ndr_print *ndr, const char *name, int flags, const struct samr_EnumDomainAliases *r)
-{
-	ndr_print_struct(ndr, name, "samr_EnumDomainAliases");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_EnumDomainAliases");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "max_size", r->in.max_size);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_EnumDomainAliases");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sam", r->out.sam);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "sam", *r->out.sam);
-		ndr->depth++;
-		if (*r->out.sam) {
-			ndr_print_samr_SamArray(ndr, "sam", *r->out.sam);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "num_entries", r->out.num_entries);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "num_entries", *r->out.num_entries);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_GetAliasMembership(struct ndr_push *ndr, int flags, const struct samr_GetAliasMembership *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		if (r->in.sids == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_SidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sids));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.rids == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_samr_Ids(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.rids));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_GetAliasMembership(struct ndr_pull *ndr, int flags, struct samr_GetAliasMembership *r)
-{
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	TALLOC_CTX *_mem_save_sids_0;
-	TALLOC_CTX *_mem_save_rids_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sids);
-		}
-		_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sids, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_SidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sids));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.rids);
-		ZERO_STRUCTP(r->out.rids);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.rids);
-		}
-		_mem_save_rids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.rids, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_Ids(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.rids));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rids_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_GetAliasMembership(struct ndr_print *ndr, const char *name, int flags, const struct samr_GetAliasMembership *r)
-{
-	ndr_print_struct(ndr, name, "samr_GetAliasMembership");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_GetAliasMembership");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sids", r->in.sids);
-		ndr->depth++;
-		ndr_print_lsa_SidArray(ndr, "sids", r->in.sids);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_GetAliasMembership");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "rids", r->out.rids);
-		ndr->depth++;
-		ndr_print_samr_Ids(ndr, "rids", r->out.rids);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_samr_LookupNames(struct ndr_push *ndr, int flags, const struct samr_LookupNames *r)
-{
-	uint32_t cntr_names_0;
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.num_names));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 1000));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.num_names));
-		for (cntr_names_0 = 0; cntr_names_0 < r->in.num_names; cntr_names_0++) {
-			NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->in.names[cntr_names_0]));
-		}
-		for (cntr_names_0 = 0; cntr_names_0 < r->in.num_names; cntr_names_0++) {
-			NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->in.names[cntr_names_0]));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.rids == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_samr_Ids(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.rids));
-		if (r->out.types == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_samr_Ids(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.types));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_samr_LookupNames(struct ndr_pull *ndr, int flags, struct samr_LookupNames *r)
-{
-	uint32_t cntr_names_0;
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	TALLOC_CTX *_mem_save_names_0;
-	TALLOC_CTX *_mem_save_rids_0;
-	TALLOC_CTX *_mem_save_types_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.num_names));
-		if (r->in.num_names < 0 || r->in.num_names > 1000) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.names));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.names));
-		if (ndr_get_array_length(ndr, &r->in.names) > ndr_get_array_size(ndr, &r->in.names)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.names), ndr_get_array_length(ndr, &r->in.names));
-		}
-		NDR_PULL_ALLOC_N(ndr, r->in.names, ndr_get_array_size(ndr, &r->in.names));
-		_mem_save_names_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.names, 0);
-		for (cntr_names_0 = 0; cntr_names_0 < r->in.num_names; cntr_names_0++) {
-			NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->in.names[cntr_names_0]));
-		}
-		for (cntr_names_0 = 0; cntr_names_0 < r->in.num_names; cntr_names_0++) {
-			NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->in.names[cntr_names_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_names_0, 0);
-		NDR_PULL_ALLOC(ndr, r->out.rids);
-		ZERO_STRUCTP(r->out.rids);
-		NDR_PULL_ALLOC(ndr, r->out.types);
-		ZERO_STRUCTP(r->out.types);
-		if (r->in.names) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.names, 1000));
-		}
-		if (r->in.names) {
-			NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->in.names, r->in.num_names));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.rids);
-		}
-		_mem_save_rids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.rids, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_Ids(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.rids));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rids_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.types);
-		}
-		_mem_save_types_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.types, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_Ids(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.types));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_types_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_LookupNames(struct ndr_print *ndr, const char *name, int flags, const struct samr_LookupNames *r)
-{
-	uint32_t cntr_names_0;
-	ndr_print_struct(ndr, name, "samr_LookupNames");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_LookupNames");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "num_names", r->in.num_names);
-		ndr->print(ndr, "%s: ARRAY(%d)", "names", r->in.num_names);
-		ndr->depth++;
-		for (cntr_names_0=0;cntr_names_0<r->in.num_names;cntr_names_0++) {
-			char *idx_0=NULL;
-			if (asprintf(&idx_0, "[%d]", cntr_names_0) != -1) {
-				ndr_print_lsa_String(ndr, "names", &r->in.names[cntr_names_0]);
-				free(idx_0);
-			}
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_LookupNames");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "rids", r->out.rids);
-		ndr->depth++;
-		ndr_print_samr_Ids(ndr, "rids", r->out.rids);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "types", r->out.types);
-		ndr->depth++;
-		ndr_print_samr_Ids(ndr, "types", r->out.types);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_LookupRids(struct ndr_push *ndr, int flags, const struct samr_LookupRids *r)
-{
-	uint32_t cntr_rids_0;
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.num_rids));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 1000));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.num_rids));
-		for (cntr_rids_0 = 0; cntr_rids_0 < r->in.num_rids; cntr_rids_0++) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.rids[cntr_rids_0]));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.names == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_Strings(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.names));
-		if (r->out.types == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_samr_Ids(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.types));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_LookupRids(struct ndr_pull *ndr, int flags, struct samr_LookupRids *r)
-{
-	uint32_t cntr_rids_0;
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	TALLOC_CTX *_mem_save_rids_0;
-	TALLOC_CTX *_mem_save_names_0;
-	TALLOC_CTX *_mem_save_types_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.num_rids));
-		if (r->in.num_rids < 0 || r->in.num_rids > 1000) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.rids));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.rids));
-		if (ndr_get_array_length(ndr, &r->in.rids) > ndr_get_array_size(ndr, &r->in.rids)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.rids), ndr_get_array_length(ndr, &r->in.rids));
-		}
-		NDR_PULL_ALLOC_N(ndr, r->in.rids, ndr_get_array_size(ndr, &r->in.rids));
-		_mem_save_rids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.rids, 0);
-		for (cntr_rids_0 = 0; cntr_rids_0 < r->in.num_rids; cntr_rids_0++) {
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.rids[cntr_rids_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rids_0, 0);
-		NDR_PULL_ALLOC(ndr, r->out.names);
-		ZERO_STRUCTP(r->out.names);
-		NDR_PULL_ALLOC(ndr, r->out.types);
-		ZERO_STRUCTP(r->out.types);
-		if (r->in.rids) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.rids, 1000));
-		}
-		if (r->in.rids) {
-			NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->in.rids, r->in.num_rids));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.names);
-		}
-		_mem_save_names_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.names, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_Strings(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.names));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_names_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.types);
-		}
-		_mem_save_types_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.types, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_Ids(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.types));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_types_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_LookupRids(struct ndr_print *ndr, const char *name, int flags, const struct samr_LookupRids *r)
-{
-	uint32_t cntr_rids_0;
-	ndr_print_struct(ndr, name, "samr_LookupRids");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_LookupRids");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "num_rids", r->in.num_rids);
-		ndr->print(ndr, "%s: ARRAY(%d)", "rids", r->in.num_rids);
-		ndr->depth++;
-		for (cntr_rids_0=0;cntr_rids_0<r->in.num_rids;cntr_rids_0++) {
-			char *idx_0=NULL;
-			if (asprintf(&idx_0, "[%d]", cntr_rids_0) != -1) {
-				ndr_print_uint32(ndr, "rids", r->in.rids[cntr_rids_0]);
-				free(idx_0);
-			}
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_LookupRids");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "names", r->out.names);
-		ndr->depth++;
-		ndr_print_lsa_Strings(ndr, "names", r->out.names);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "types", r->out.types);
-		ndr->depth++;
-		ndr_print_samr_Ids(ndr, "types", r->out.types);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_OpenGroup(struct ndr_push *ndr, int flags, const struct samr_OpenGroup *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_CHECK(ndr_push_samr_GroupAccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.rid));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.group_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->out.group_handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_OpenGroup(struct ndr_pull *ndr, int flags, struct samr_OpenGroup *r)
-{
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	TALLOC_CTX *_mem_save_group_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_GroupAccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.rid));
-		NDR_PULL_ALLOC(ndr, r->out.group_handle);
-		ZERO_STRUCTP(r->out.group_handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.group_handle);
-		}
-		_mem_save_group_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.group_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->out.group_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_group_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_OpenGroup(struct ndr_print *ndr, const char *name, int flags, const struct samr_OpenGroup *r)
-{
-	ndr_print_struct(ndr, name, "samr_OpenGroup");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_OpenGroup");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr_print_samr_GroupAccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr_print_uint32(ndr, "rid", r->in.rid);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_OpenGroup");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "group_handle", r->out.group_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "group_handle", r->out.group_handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_QueryGroupInfo(struct ndr_push *ndr, int flags, const struct samr_QueryGroupInfo *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.group_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.group_handle));
-		NDR_CHECK(ndr_push_samr_GroupInfoEnum(ndr, NDR_SCALARS, r->in.level));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.info));
-		if (*r->out.info) {
-			NDR_CHECK(ndr_push_set_switch_value(ndr, *r->out.info, r->in.level));
-			NDR_CHECK(ndr_push_samr_GroupInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_QueryGroupInfo(struct ndr_pull *ndr, int flags, struct samr_QueryGroupInfo *r)
-{
-	uint32_t _ptr_info;
-	TALLOC_CTX *_mem_save_group_handle_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_info_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.group_handle);
-		}
-		_mem_save_group_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.group_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.group_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_group_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_GroupInfoEnum(ndr, NDR_SCALARS, &r->in.level));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, *r->out.info);
-		} else {
-			*r->out.info = NULL;
-		}
-		if (*r->out.info) {
-			_mem_save_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.info, 0);
-			NDR_CHECK(ndr_pull_set_switch_value(ndr, *r->out.info, r->in.level));
-			NDR_CHECK(ndr_pull_samr_GroupInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_QueryGroupInfo(struct ndr_print *ndr, const char *name, int flags, const struct samr_QueryGroupInfo *r)
-{
-	ndr_print_struct(ndr, name, "samr_QueryGroupInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_QueryGroupInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "group_handle", r->in.group_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "group_handle", r->in.group_handle);
-		ndr->depth--;
-		ndr_print_samr_GroupInfoEnum(ndr, "level", r->in.level);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_QueryGroupInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", *r->out.info);
-		ndr->depth++;
-		if (*r->out.info) {
-			ndr_print_set_switch_value(ndr, *r->out.info, r->in.level);
-			ndr_print_samr_GroupInfo(ndr, "info", *r->out.info);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_SetGroupInfo(struct ndr_push *ndr, int flags, const struct samr_SetGroupInfo *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.group_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.group_handle));
-		NDR_CHECK(ndr_push_samr_GroupInfoEnum(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.info, r->in.level));
-		NDR_CHECK(ndr_push_samr_GroupInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_SetGroupInfo(struct ndr_pull *ndr, int flags, struct samr_SetGroupInfo *r)
-{
-	TALLOC_CTX *_mem_save_group_handle_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.group_handle);
-		}
-		_mem_save_group_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.group_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.group_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_group_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_GroupInfoEnum(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.info, r->in.level));
-		NDR_CHECK(ndr_pull_samr_GroupInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_SetGroupInfo(struct ndr_print *ndr, const char *name, int flags, const struct samr_SetGroupInfo *r)
-{
-	ndr_print_struct(ndr, name, "samr_SetGroupInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_SetGroupInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "group_handle", r->in.group_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "group_handle", r->in.group_handle);
-		ndr->depth--;
-		ndr_print_samr_GroupInfoEnum(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "info", r->in.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->in.info, r->in.level);
-		ndr_print_samr_GroupInfo(ndr, "info", r->in.info);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_SetGroupInfo");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_AddGroupMember(struct ndr_push *ndr, int flags, const struct samr_AddGroupMember *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.group_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.group_handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.rid));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_AddGroupMember(struct ndr_pull *ndr, int flags, struct samr_AddGroupMember *r)
-{
-	TALLOC_CTX *_mem_save_group_handle_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.group_handle);
-		}
-		_mem_save_group_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.group_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.group_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_group_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.rid));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_AddGroupMember(struct ndr_print *ndr, const char *name, int flags, const struct samr_AddGroupMember *r)
-{
-	ndr_print_struct(ndr, name, "samr_AddGroupMember");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_AddGroupMember");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "group_handle", r->in.group_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "group_handle", r->in.group_handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "rid", r->in.rid);
-		ndr_print_uint32(ndr, "flags", r->in.flags);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_AddGroupMember");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DeleteDomainGroup(struct ndr_push *ndr, int flags, const struct samr_DeleteDomainGroup *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.group_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.group_handle));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.group_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->out.group_handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DeleteDomainGroup(struct ndr_pull *ndr, int flags, struct samr_DeleteDomainGroup *r)
-{
-	TALLOC_CTX *_mem_save_group_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.group_handle);
-		}
-		_mem_save_group_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.group_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.group_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_group_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.group_handle);
-		*r->out.group_handle = *r->in.group_handle;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.group_handle);
-		}
-		_mem_save_group_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.group_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->out.group_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_group_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DeleteDomainGroup(struct ndr_print *ndr, const char *name, int flags, const struct samr_DeleteDomainGroup *r)
-{
-	ndr_print_struct(ndr, name, "samr_DeleteDomainGroup");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_DeleteDomainGroup");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "group_handle", r->in.group_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "group_handle", r->in.group_handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_DeleteDomainGroup");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "group_handle", r->out.group_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "group_handle", r->out.group_handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DeleteGroupMember(struct ndr_push *ndr, int flags, const struct samr_DeleteGroupMember *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.group_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.group_handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.rid));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DeleteGroupMember(struct ndr_pull *ndr, int flags, struct samr_DeleteGroupMember *r)
-{
-	TALLOC_CTX *_mem_save_group_handle_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.group_handle);
-		}
-		_mem_save_group_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.group_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.group_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_group_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.rid));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DeleteGroupMember(struct ndr_print *ndr, const char *name, int flags, const struct samr_DeleteGroupMember *r)
-{
-	ndr_print_struct(ndr, name, "samr_DeleteGroupMember");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_DeleteGroupMember");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "group_handle", r->in.group_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "group_handle", r->in.group_handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "rid", r->in.rid);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_DeleteGroupMember");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_QueryGroupMember(struct ndr_push *ndr, int flags, const struct samr_QueryGroupMember *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.group_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.group_handle));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.rids == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.rids));
-		if (*r->out.rids) {
-			NDR_CHECK(ndr_push_samr_RidTypeArray(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.rids));
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_QueryGroupMember(struct ndr_pull *ndr, int flags, struct samr_QueryGroupMember *r)
-{
-	uint32_t _ptr_rids;
-	TALLOC_CTX *_mem_save_group_handle_0;
-	TALLOC_CTX *_mem_save_rids_0;
-	TALLOC_CTX *_mem_save_rids_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.group_handle);
-		}
-		_mem_save_group_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.group_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.group_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_group_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.rids);
-		ZERO_STRUCTP(r->out.rids);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.rids);
-		}
-		_mem_save_rids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.rids, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_rids));
-		if (_ptr_rids) {
-			NDR_PULL_ALLOC(ndr, *r->out.rids);
-		} else {
-			*r->out.rids = NULL;
-		}
-		if (*r->out.rids) {
-			_mem_save_rids_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.rids, 0);
-			NDR_CHECK(ndr_pull_samr_RidTypeArray(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.rids));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rids_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rids_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_QueryGroupMember(struct ndr_print *ndr, const char *name, int flags, const struct samr_QueryGroupMember *r)
-{
-	ndr_print_struct(ndr, name, "samr_QueryGroupMember");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_QueryGroupMember");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "group_handle", r->in.group_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "group_handle", r->in.group_handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_QueryGroupMember");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "rids", r->out.rids);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "rids", *r->out.rids);
-		ndr->depth++;
-		if (*r->out.rids) {
-			ndr_print_samr_RidTypeArray(ndr, "rids", *r->out.rids);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_SetMemberAttributesOfGroup(struct ndr_push *ndr, int flags, const struct samr_SetMemberAttributesOfGroup *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.group_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.group_handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown1));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown2));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_SetMemberAttributesOfGroup(struct ndr_pull *ndr, int flags, struct samr_SetMemberAttributesOfGroup *r)
-{
-	TALLOC_CTX *_mem_save_group_handle_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.group_handle);
-		}
-		_mem_save_group_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.group_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.group_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_group_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown1));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown2));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_SetMemberAttributesOfGroup(struct ndr_print *ndr, const char *name, int flags, const struct samr_SetMemberAttributesOfGroup *r)
-{
-	ndr_print_struct(ndr, name, "samr_SetMemberAttributesOfGroup");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_SetMemberAttributesOfGroup");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "group_handle", r->in.group_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "group_handle", r->in.group_handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "unknown1", r->in.unknown1);
-		ndr_print_uint32(ndr, "unknown2", r->in.unknown2);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_SetMemberAttributesOfGroup");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_OpenAlias(struct ndr_push *ndr, int flags, const struct samr_OpenAlias *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_CHECK(ndr_push_samr_AliasAccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.rid));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.alias_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->out.alias_handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_OpenAlias(struct ndr_pull *ndr, int flags, struct samr_OpenAlias *r)
-{
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	TALLOC_CTX *_mem_save_alias_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_AliasAccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.rid));
-		NDR_PULL_ALLOC(ndr, r->out.alias_handle);
-		ZERO_STRUCTP(r->out.alias_handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.alias_handle);
-		}
-		_mem_save_alias_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.alias_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->out.alias_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_alias_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_OpenAlias(struct ndr_print *ndr, const char *name, int flags, const struct samr_OpenAlias *r)
-{
-	ndr_print_struct(ndr, name, "samr_OpenAlias");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_OpenAlias");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr_print_samr_AliasAccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr_print_uint32(ndr, "rid", r->in.rid);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_OpenAlias");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "alias_handle", r->out.alias_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "alias_handle", r->out.alias_handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_QueryAliasInfo(struct ndr_push *ndr, int flags, const struct samr_QueryAliasInfo *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.alias_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.alias_handle));
-		NDR_CHECK(ndr_push_samr_AliasInfoEnum(ndr, NDR_SCALARS, r->in.level));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.info));
-		if (*r->out.info) {
-			NDR_CHECK(ndr_push_set_switch_value(ndr, *r->out.info, r->in.level));
-			NDR_CHECK(ndr_push_samr_AliasInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_QueryAliasInfo(struct ndr_pull *ndr, int flags, struct samr_QueryAliasInfo *r)
-{
-	uint32_t _ptr_info;
-	TALLOC_CTX *_mem_save_alias_handle_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_info_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.alias_handle);
-		}
-		_mem_save_alias_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.alias_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.alias_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_alias_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_AliasInfoEnum(ndr, NDR_SCALARS, &r->in.level));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, *r->out.info);
-		} else {
-			*r->out.info = NULL;
-		}
-		if (*r->out.info) {
-			_mem_save_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.info, 0);
-			NDR_CHECK(ndr_pull_set_switch_value(ndr, *r->out.info, r->in.level));
-			NDR_CHECK(ndr_pull_samr_AliasInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_QueryAliasInfo(struct ndr_print *ndr, const char *name, int flags, const struct samr_QueryAliasInfo *r)
-{
-	ndr_print_struct(ndr, name, "samr_QueryAliasInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_QueryAliasInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "alias_handle", r->in.alias_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "alias_handle", r->in.alias_handle);
-		ndr->depth--;
-		ndr_print_samr_AliasInfoEnum(ndr, "level", r->in.level);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_QueryAliasInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", *r->out.info);
-		ndr->depth++;
-		if (*r->out.info) {
-			ndr_print_set_switch_value(ndr, *r->out.info, r->in.level);
-			ndr_print_samr_AliasInfo(ndr, "info", *r->out.info);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_SetAliasInfo(struct ndr_push *ndr, int flags, const struct samr_SetAliasInfo *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.alias_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.alias_handle));
-		NDR_CHECK(ndr_push_samr_AliasInfoEnum(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.info, r->in.level));
-		NDR_CHECK(ndr_push_samr_AliasInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_SetAliasInfo(struct ndr_pull *ndr, int flags, struct samr_SetAliasInfo *r)
-{
-	TALLOC_CTX *_mem_save_alias_handle_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.alias_handle);
-		}
-		_mem_save_alias_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.alias_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.alias_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_alias_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_AliasInfoEnum(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.info, r->in.level));
-		NDR_CHECK(ndr_pull_samr_AliasInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_SetAliasInfo(struct ndr_print *ndr, const char *name, int flags, const struct samr_SetAliasInfo *r)
-{
-	ndr_print_struct(ndr, name, "samr_SetAliasInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_SetAliasInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "alias_handle", r->in.alias_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "alias_handle", r->in.alias_handle);
-		ndr->depth--;
-		ndr_print_samr_AliasInfoEnum(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "info", r->in.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->in.info, r->in.level);
-		ndr_print_samr_AliasInfo(ndr, "info", r->in.info);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_SetAliasInfo");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DeleteDomAlias(struct ndr_push *ndr, int flags, const struct samr_DeleteDomAlias *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.alias_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.alias_handle));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.alias_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->out.alias_handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DeleteDomAlias(struct ndr_pull *ndr, int flags, struct samr_DeleteDomAlias *r)
-{
-	TALLOC_CTX *_mem_save_alias_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.alias_handle);
-		}
-		_mem_save_alias_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.alias_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.alias_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_alias_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.alias_handle);
-		*r->out.alias_handle = *r->in.alias_handle;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.alias_handle);
-		}
-		_mem_save_alias_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.alias_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->out.alias_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_alias_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DeleteDomAlias(struct ndr_print *ndr, const char *name, int flags, const struct samr_DeleteDomAlias *r)
-{
-	ndr_print_struct(ndr, name, "samr_DeleteDomAlias");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_DeleteDomAlias");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "alias_handle", r->in.alias_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "alias_handle", r->in.alias_handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_DeleteDomAlias");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "alias_handle", r->out.alias_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "alias_handle", r->out.alias_handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_AddAliasMember(struct ndr_push *ndr, int flags, const struct samr_AddAliasMember *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.alias_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.alias_handle));
-		if (r->in.sid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sid));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_AddAliasMember(struct ndr_pull *ndr, int flags, struct samr_AddAliasMember *r)
-{
-	TALLOC_CTX *_mem_save_alias_handle_0;
-	TALLOC_CTX *_mem_save_sid_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.alias_handle);
-		}
-		_mem_save_alias_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.alias_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.alias_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_alias_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sid);
-		}
-		_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sid));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_AddAliasMember(struct ndr_print *ndr, const char *name, int flags, const struct samr_AddAliasMember *r)
-{
-	ndr_print_struct(ndr, name, "samr_AddAliasMember");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_AddAliasMember");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "alias_handle", r->in.alias_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "alias_handle", r->in.alias_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sid", r->in.sid);
-		ndr->depth++;
-		ndr_print_dom_sid2(ndr, "sid", r->in.sid);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_AddAliasMember");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DeleteAliasMember(struct ndr_push *ndr, int flags, const struct samr_DeleteAliasMember *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.alias_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.alias_handle));
-		if (r->in.sid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sid));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DeleteAliasMember(struct ndr_pull *ndr, int flags, struct samr_DeleteAliasMember *r)
-{
-	TALLOC_CTX *_mem_save_alias_handle_0;
-	TALLOC_CTX *_mem_save_sid_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.alias_handle);
-		}
-		_mem_save_alias_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.alias_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.alias_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_alias_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sid);
-		}
-		_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sid));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DeleteAliasMember(struct ndr_print *ndr, const char *name, int flags, const struct samr_DeleteAliasMember *r)
-{
-	ndr_print_struct(ndr, name, "samr_DeleteAliasMember");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_DeleteAliasMember");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "alias_handle", r->in.alias_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "alias_handle", r->in.alias_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sid", r->in.sid);
-		ndr->depth++;
-		ndr_print_dom_sid2(ndr, "sid", r->in.sid);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_DeleteAliasMember");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_GetMembersInAlias(struct ndr_push *ndr, int flags, const struct samr_GetMembersInAlias *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.alias_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.alias_handle));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.sids == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_SidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sids));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_GetMembersInAlias(struct ndr_pull *ndr, int flags, struct samr_GetMembersInAlias *r)
-{
-	TALLOC_CTX *_mem_save_alias_handle_0;
-	TALLOC_CTX *_mem_save_sids_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.alias_handle);
-		}
-		_mem_save_alias_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.alias_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.alias_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_alias_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.sids);
-		ZERO_STRUCTP(r->out.sids);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.sids);
-		}
-		_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.sids, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_SidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sids));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_GetMembersInAlias(struct ndr_print *ndr, const char *name, int flags, const struct samr_GetMembersInAlias *r)
-{
-	ndr_print_struct(ndr, name, "samr_GetMembersInAlias");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_GetMembersInAlias");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "alias_handle", r->in.alias_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "alias_handle", r->in.alias_handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_GetMembersInAlias");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "sids", r->out.sids);
-		ndr->depth++;
-		ndr_print_lsa_SidArray(ndr, "sids", r->out.sids);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_samr_OpenUser(struct ndr_push *ndr, int flags, const struct samr_OpenUser *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_CHECK(ndr_push_samr_UserAccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.rid));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.user_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->out.user_handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_samr_OpenUser(struct ndr_pull *ndr, int flags, struct samr_OpenUser *r)
-{
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	TALLOC_CTX *_mem_save_user_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_UserAccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.rid));
-		NDR_PULL_ALLOC(ndr, r->out.user_handle);
-		ZERO_STRUCTP(r->out.user_handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.user_handle);
-		}
-		_mem_save_user_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.user_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->out.user_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_OpenUser(struct ndr_print *ndr, const char *name, int flags, const struct samr_OpenUser *r)
-{
-	ndr_print_struct(ndr, name, "samr_OpenUser");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_OpenUser");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr_print_samr_UserAccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr_print_uint32(ndr, "rid", r->in.rid);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_OpenUser");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "user_handle", r->out.user_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "user_handle", r->out.user_handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_DeleteUser(struct ndr_push *ndr, int flags, const struct samr_DeleteUser *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.user_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.user_handle));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.user_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->out.user_handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_DeleteUser(struct ndr_pull *ndr, int flags, struct samr_DeleteUser *r)
-{
-	TALLOC_CTX *_mem_save_user_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.user_handle);
-		}
-		_mem_save_user_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.user_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.user_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.user_handle);
-		*r->out.user_handle = *r->in.user_handle;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.user_handle);
-		}
-		_mem_save_user_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.user_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->out.user_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_DeleteUser(struct ndr_print *ndr, const char *name, int flags, const struct samr_DeleteUser *r)
-{
-	ndr_print_struct(ndr, name, "samr_DeleteUser");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_DeleteUser");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "user_handle", r->in.user_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "user_handle", r->in.user_handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_DeleteUser");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "user_handle", r->out.user_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "user_handle", r->out.user_handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_samr_QueryUserInfo(struct ndr_push *ndr, int flags, const struct samr_QueryUserInfo *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.user_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.user_handle));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.level));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.info));
-		if (*r->out.info) {
-			NDR_CHECK(ndr_push_set_switch_value(ndr, *r->out.info, r->in.level));
-			NDR_CHECK(ndr_push_samr_UserInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_samr_QueryUserInfo(struct ndr_pull *ndr, int flags, struct samr_QueryUserInfo *r)
-{
-	uint32_t _ptr_info;
-	TALLOC_CTX *_mem_save_user_handle_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_info_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.user_handle);
-		}
-		_mem_save_user_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.user_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.user_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.level));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, *r->out.info);
-		} else {
-			*r->out.info = NULL;
-		}
-		if (*r->out.info) {
-			_mem_save_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.info, 0);
-			NDR_CHECK(ndr_pull_set_switch_value(ndr, *r->out.info, r->in.level));
-			NDR_CHECK(ndr_pull_samr_UserInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_QueryUserInfo(struct ndr_print *ndr, const char *name, int flags, const struct samr_QueryUserInfo *r)
-{
-	ndr_print_struct(ndr, name, "samr_QueryUserInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_QueryUserInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "user_handle", r->in.user_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "user_handle", r->in.user_handle);
-		ndr->depth--;
-		ndr_print_uint16(ndr, "level", r->in.level);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_QueryUserInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", *r->out.info);
-		ndr->depth++;
-		if (*r->out.info) {
-			ndr_print_set_switch_value(ndr, *r->out.info, r->in.level);
-			ndr_print_samr_UserInfo(ndr, "info", *r->out.info);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_samr_SetUserInfo(struct ndr_push *ndr, int flags, const struct samr_SetUserInfo *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.user_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.user_handle));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.info, r->in.level));
-		NDR_CHECK(ndr_push_samr_UserInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_samr_SetUserInfo(struct ndr_pull *ndr, int flags, struct samr_SetUserInfo *r)
-{
-	TALLOC_CTX *_mem_save_user_handle_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.user_handle);
-		}
-		_mem_save_user_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.user_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.user_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.info, r->in.level));
-		NDR_CHECK(ndr_pull_samr_UserInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_SetUserInfo(struct ndr_print *ndr, const char *name, int flags, const struct samr_SetUserInfo *r)
-{
-	ndr_print_struct(ndr, name, "samr_SetUserInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_SetUserInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "user_handle", r->in.user_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "user_handle", r->in.user_handle);
-		ndr->depth--;
-		ndr_print_uint16(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "info", r->in.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->in.info, r->in.level);
-		ndr_print_samr_UserInfo(ndr, "info", r->in.info);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_SetUserInfo");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_ChangePasswordUser(struct ndr_push *ndr, int flags, const struct samr_ChangePasswordUser *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.user_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.user_handle));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->in.lm_present));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.old_lm_crypted));
-		if (r->in.old_lm_crypted) {
-			NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, r->in.old_lm_crypted));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.new_lm_crypted));
-		if (r->in.new_lm_crypted) {
-			NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, r->in.new_lm_crypted));
-		}
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->in.nt_present));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.old_nt_crypted));
-		if (r->in.old_nt_crypted) {
-			NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, r->in.old_nt_crypted));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.new_nt_crypted));
-		if (r->in.new_nt_crypted) {
-			NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, r->in.new_nt_crypted));
-		}
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->in.cross1_present));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.nt_cross));
-		if (r->in.nt_cross) {
-			NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, r->in.nt_cross));
-		}
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->in.cross2_present));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.lm_cross));
-		if (r->in.lm_cross) {
-			NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, r->in.lm_cross));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_ChangePasswordUser(struct ndr_pull *ndr, int flags, struct samr_ChangePasswordUser *r)
-{
-	uint32_t _ptr_old_lm_crypted;
-	uint32_t _ptr_new_lm_crypted;
-	uint32_t _ptr_old_nt_crypted;
-	uint32_t _ptr_new_nt_crypted;
-	uint32_t _ptr_nt_cross;
-	uint32_t _ptr_lm_cross;
-	TALLOC_CTX *_mem_save_user_handle_0;
-	TALLOC_CTX *_mem_save_old_lm_crypted_0;
-	TALLOC_CTX *_mem_save_new_lm_crypted_0;
-	TALLOC_CTX *_mem_save_old_nt_crypted_0;
-	TALLOC_CTX *_mem_save_new_nt_crypted_0;
-	TALLOC_CTX *_mem_save_nt_cross_0;
-	TALLOC_CTX *_mem_save_lm_cross_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.user_handle);
-		}
-		_mem_save_user_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.user_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.user_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->in.lm_present));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_old_lm_crypted));
-		if (_ptr_old_lm_crypted) {
-			NDR_PULL_ALLOC(ndr, r->in.old_lm_crypted);
-		} else {
-			r->in.old_lm_crypted = NULL;
-		}
-		if (r->in.old_lm_crypted) {
-			_mem_save_old_lm_crypted_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.old_lm_crypted, 0);
-			NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, r->in.old_lm_crypted));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_old_lm_crypted_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_new_lm_crypted));
-		if (_ptr_new_lm_crypted) {
-			NDR_PULL_ALLOC(ndr, r->in.new_lm_crypted);
-		} else {
-			r->in.new_lm_crypted = NULL;
-		}
-		if (r->in.new_lm_crypted) {
-			_mem_save_new_lm_crypted_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.new_lm_crypted, 0);
-			NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, r->in.new_lm_crypted));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_new_lm_crypted_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->in.nt_present));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_old_nt_crypted));
-		if (_ptr_old_nt_crypted) {
-			NDR_PULL_ALLOC(ndr, r->in.old_nt_crypted);
-		} else {
-			r->in.old_nt_crypted = NULL;
-		}
-		if (r->in.old_nt_crypted) {
-			_mem_save_old_nt_crypted_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.old_nt_crypted, 0);
-			NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, r->in.old_nt_crypted));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_old_nt_crypted_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_new_nt_crypted));
-		if (_ptr_new_nt_crypted) {
-			NDR_PULL_ALLOC(ndr, r->in.new_nt_crypted);
-		} else {
-			r->in.new_nt_crypted = NULL;
-		}
-		if (r->in.new_nt_crypted) {
-			_mem_save_new_nt_crypted_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.new_nt_crypted, 0);
-			NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, r->in.new_nt_crypted));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_new_nt_crypted_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->in.cross1_present));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_nt_cross));
-		if (_ptr_nt_cross) {
-			NDR_PULL_ALLOC(ndr, r->in.nt_cross);
-		} else {
-			r->in.nt_cross = NULL;
-		}
-		if (r->in.nt_cross) {
-			_mem_save_nt_cross_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.nt_cross, 0);
-			NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, r->in.nt_cross));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_nt_cross_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->in.cross2_present));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_lm_cross));
-		if (_ptr_lm_cross) {
-			NDR_PULL_ALLOC(ndr, r->in.lm_cross);
-		} else {
-			r->in.lm_cross = NULL;
-		}
-		if (r->in.lm_cross) {
-			_mem_save_lm_cross_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.lm_cross, 0);
-			NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, r->in.lm_cross));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_lm_cross_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_ChangePasswordUser(struct ndr_print *ndr, const char *name, int flags, const struct samr_ChangePasswordUser *r)
-{
-	ndr_print_struct(ndr, name, "samr_ChangePasswordUser");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_ChangePasswordUser");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "user_handle", r->in.user_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "user_handle", r->in.user_handle);
-		ndr->depth--;
-		ndr_print_uint8(ndr, "lm_present", r->in.lm_present);
-		ndr_print_ptr(ndr, "old_lm_crypted", r->in.old_lm_crypted);
-		ndr->depth++;
-		if (r->in.old_lm_crypted) {
-			ndr_print_samr_Password(ndr, "old_lm_crypted", r->in.old_lm_crypted);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "new_lm_crypted", r->in.new_lm_crypted);
-		ndr->depth++;
-		if (r->in.new_lm_crypted) {
-			ndr_print_samr_Password(ndr, "new_lm_crypted", r->in.new_lm_crypted);
-		}
-		ndr->depth--;
-		ndr_print_uint8(ndr, "nt_present", r->in.nt_present);
-		ndr_print_ptr(ndr, "old_nt_crypted", r->in.old_nt_crypted);
-		ndr->depth++;
-		if (r->in.old_nt_crypted) {
-			ndr_print_samr_Password(ndr, "old_nt_crypted", r->in.old_nt_crypted);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "new_nt_crypted", r->in.new_nt_crypted);
-		ndr->depth++;
-		if (r->in.new_nt_crypted) {
-			ndr_print_samr_Password(ndr, "new_nt_crypted", r->in.new_nt_crypted);
-		}
-		ndr->depth--;
-		ndr_print_uint8(ndr, "cross1_present", r->in.cross1_present);
-		ndr_print_ptr(ndr, "nt_cross", r->in.nt_cross);
-		ndr->depth++;
-		if (r->in.nt_cross) {
-			ndr_print_samr_Password(ndr, "nt_cross", r->in.nt_cross);
-		}
-		ndr->depth--;
-		ndr_print_uint8(ndr, "cross2_present", r->in.cross2_present);
-		ndr_print_ptr(ndr, "lm_cross", r->in.lm_cross);
-		ndr->depth++;
-		if (r->in.lm_cross) {
-			ndr_print_samr_Password(ndr, "lm_cross", r->in.lm_cross);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_ChangePasswordUser");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_GetGroupsForUser(struct ndr_push *ndr, int flags, const struct samr_GetGroupsForUser *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.user_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.user_handle));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.rids == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.rids));
-		if (*r->out.rids) {
-			NDR_CHECK(ndr_push_samr_RidWithAttributeArray(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.rids));
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_GetGroupsForUser(struct ndr_pull *ndr, int flags, struct samr_GetGroupsForUser *r)
-{
-	uint32_t _ptr_rids;
-	TALLOC_CTX *_mem_save_user_handle_0;
-	TALLOC_CTX *_mem_save_rids_0;
-	TALLOC_CTX *_mem_save_rids_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.user_handle);
-		}
-		_mem_save_user_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.user_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.user_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.rids);
-		ZERO_STRUCTP(r->out.rids);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.rids);
-		}
-		_mem_save_rids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.rids, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_rids));
-		if (_ptr_rids) {
-			NDR_PULL_ALLOC(ndr, *r->out.rids);
-		} else {
-			*r->out.rids = NULL;
-		}
-		if (*r->out.rids) {
-			_mem_save_rids_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.rids, 0);
-			NDR_CHECK(ndr_pull_samr_RidWithAttributeArray(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.rids));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rids_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rids_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_GetGroupsForUser(struct ndr_print *ndr, const char *name, int flags, const struct samr_GetGroupsForUser *r)
-{
-	ndr_print_struct(ndr, name, "samr_GetGroupsForUser");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_GetGroupsForUser");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "user_handle", r->in.user_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "user_handle", r->in.user_handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_GetGroupsForUser");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "rids", r->out.rids);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "rids", *r->out.rids);
-		ndr->depth++;
-		if (*r->out.rids) {
-			ndr_print_samr_RidWithAttributeArray(ndr, "rids", *r->out.rids);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_QueryDisplayInfo(struct ndr_push *ndr, int flags, const struct samr_QueryDisplayInfo *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.level));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.start_idx));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_entries));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buf_size));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.total_size == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.total_size));
-		if (r->out.returned_size == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.returned_size));
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_push_samr_DispInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_QueryDisplayInfo(struct ndr_pull *ndr, int flags, struct samr_QueryDisplayInfo *r)
-{
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	TALLOC_CTX *_mem_save_total_size_0;
-	TALLOC_CTX *_mem_save_returned_size_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.level));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.start_idx));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_entries));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.buf_size));
-		NDR_PULL_ALLOC(ndr, r->out.total_size);
-		ZERO_STRUCTP(r->out.total_size);
-		NDR_PULL_ALLOC(ndr, r->out.returned_size);
-		ZERO_STRUCTP(r->out.returned_size);
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.total_size);
-		}
-		_mem_save_total_size_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.total_size, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.total_size));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_total_size_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.returned_size);
-		}
-		_mem_save_returned_size_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.returned_size, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.returned_size));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_returned_size_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_pull_samr_DispInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_QueryDisplayInfo(struct ndr_print *ndr, const char *name, int flags, const struct samr_QueryDisplayInfo *r)
-{
-	ndr_print_struct(ndr, name, "samr_QueryDisplayInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_QueryDisplayInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr_print_uint16(ndr, "level", r->in.level);
-		ndr_print_uint32(ndr, "start_idx", r->in.start_idx);
-		ndr_print_uint32(ndr, "max_entries", r->in.max_entries);
-		ndr_print_uint32(ndr, "buf_size", r->in.buf_size);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_QueryDisplayInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "total_size", r->out.total_size);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "total_size", *r->out.total_size);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "returned_size", r->out.returned_size);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "returned_size", *r->out.returned_size);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.info, r->in.level);
-		ndr_print_samr_DispInfo(ndr, "info", r->out.info);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_GetDisplayEnumerationIndex(struct ndr_push *ndr, int flags, const struct samr_GetDisplayEnumerationIndex *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.name));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.idx == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.idx));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_GetDisplayEnumerationIndex(struct ndr_pull *ndr, int flags, struct samr_GetDisplayEnumerationIndex *r)
-{
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	TALLOC_CTX *_mem_save_name_0;
-	TALLOC_CTX *_mem_save_idx_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.name);
-		}
-		_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.name));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.idx);
-		ZERO_STRUCTP(r->out.idx);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.idx);
-		}
-		_mem_save_idx_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.idx, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.idx));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_idx_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_GetDisplayEnumerationIndex(struct ndr_print *ndr, const char *name, int flags, const struct samr_GetDisplayEnumerationIndex *r)
-{
-	ndr_print_struct(ndr, name, "samr_GetDisplayEnumerationIndex");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_GetDisplayEnumerationIndex");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr_print_uint16(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "name", r->in.name);
-		ndr->depth++;
-		ndr_print_lsa_String(ndr, "name", r->in.name);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_GetDisplayEnumerationIndex");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "idx", r->out.idx);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "idx", *r->out.idx);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_TestPrivateFunctionsDomain(struct ndr_push *ndr, int flags, const struct samr_TestPrivateFunctionsDomain *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_TestPrivateFunctionsDomain(struct ndr_pull *ndr, int flags, struct samr_TestPrivateFunctionsDomain *r)
-{
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_TestPrivateFunctionsDomain(struct ndr_print *ndr, const char *name, int flags, const struct samr_TestPrivateFunctionsDomain *r)
-{
-	ndr_print_struct(ndr, name, "samr_TestPrivateFunctionsDomain");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_TestPrivateFunctionsDomain");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_TestPrivateFunctionsDomain");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_TestPrivateFunctionsUser(struct ndr_push *ndr, int flags, const struct samr_TestPrivateFunctionsUser *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.user_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.user_handle));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_TestPrivateFunctionsUser(struct ndr_pull *ndr, int flags, struct samr_TestPrivateFunctionsUser *r)
-{
-	TALLOC_CTX *_mem_save_user_handle_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.user_handle);
-		}
-		_mem_save_user_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.user_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.user_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_handle_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_TestPrivateFunctionsUser(struct ndr_print *ndr, const char *name, int flags, const struct samr_TestPrivateFunctionsUser *r)
-{
-	ndr_print_struct(ndr, name, "samr_TestPrivateFunctionsUser");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_TestPrivateFunctionsUser");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "user_handle", r->in.user_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "user_handle", r->in.user_handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_TestPrivateFunctionsUser");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_samr_GetUserPwInfo(struct ndr_push *ndr, int flags, const struct samr_GetUserPwInfo *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.user_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.user_handle));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_samr_PwInfo(ndr, NDR_SCALARS, r->out.info));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_samr_GetUserPwInfo(struct ndr_pull *ndr, int flags, struct samr_GetUserPwInfo *r)
-{
-	TALLOC_CTX *_mem_save_user_handle_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.user_handle);
-		}
-		_mem_save_user_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.user_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.user_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_PwInfo(ndr, NDR_SCALARS, r->out.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_GetUserPwInfo(struct ndr_print *ndr, const char *name, int flags, const struct samr_GetUserPwInfo *r)
-{
-	ndr_print_struct(ndr, name, "samr_GetUserPwInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_GetUserPwInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "user_handle", r->in.user_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "user_handle", r->in.user_handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_GetUserPwInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_samr_PwInfo(ndr, "info", r->out.info);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_RemoveMemberFromForeignDomain(struct ndr_push *ndr, int flags, const struct samr_RemoveMemberFromForeignDomain *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		if (r->in.sid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sid));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_RemoveMemberFromForeignDomain(struct ndr_pull *ndr, int flags, struct samr_RemoveMemberFromForeignDomain *r)
-{
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	TALLOC_CTX *_mem_save_sid_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sid);
-		}
-		_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sid));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_RemoveMemberFromForeignDomain(struct ndr_print *ndr, const char *name, int flags, const struct samr_RemoveMemberFromForeignDomain *r)
-{
-	ndr_print_struct(ndr, name, "samr_RemoveMemberFromForeignDomain");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_RemoveMemberFromForeignDomain");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sid", r->in.sid);
-		ndr->depth++;
-		ndr_print_dom_sid2(ndr, "sid", r->in.sid);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_RemoveMemberFromForeignDomain");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_QueryDomainInfo2(struct ndr_push *ndr, int flags, const struct samr_QueryDomainInfo2 *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.level));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.info));
-		if (*r->out.info) {
-			NDR_CHECK(ndr_push_set_switch_value(ndr, *r->out.info, r->in.level));
-			NDR_CHECK(ndr_push_samr_DomainInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_QueryDomainInfo2(struct ndr_pull *ndr, int flags, struct samr_QueryDomainInfo2 *r)
-{
-	uint32_t _ptr_info;
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_info_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.level));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, *r->out.info);
-		} else {
-			*r->out.info = NULL;
-		}
-		if (*r->out.info) {
-			_mem_save_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.info, 0);
-			NDR_CHECK(ndr_pull_set_switch_value(ndr, *r->out.info, r->in.level));
-			NDR_CHECK(ndr_pull_samr_DomainInfo(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_QueryDomainInfo2(struct ndr_print *ndr, const char *name, int flags, const struct samr_QueryDomainInfo2 *r)
-{
-	ndr_print_struct(ndr, name, "samr_QueryDomainInfo2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_QueryDomainInfo2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr_print_uint16(ndr, "level", r->in.level);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_QueryDomainInfo2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", *r->out.info);
-		ndr->depth++;
-		if (*r->out.info) {
-			ndr_print_set_switch_value(ndr, *r->out.info, r->in.level);
-			ndr_print_samr_DomainInfo(ndr, "info", *r->out.info);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_QueryUserInfo2(struct ndr_push *ndr, int flags, const struct samr_QueryUserInfo2 *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.user_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.user_handle));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.level));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_push_samr_UserInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_QueryUserInfo2(struct ndr_pull *ndr, int flags, struct samr_QueryUserInfo2 *r)
-{
-	TALLOC_CTX *_mem_save_user_handle_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.user_handle);
-		}
-		_mem_save_user_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.user_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.user_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.level));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_pull_samr_UserInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_QueryUserInfo2(struct ndr_print *ndr, const char *name, int flags, const struct samr_QueryUserInfo2 *r)
-{
-	ndr_print_struct(ndr, name, "samr_QueryUserInfo2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_QueryUserInfo2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "user_handle", r->in.user_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "user_handle", r->in.user_handle);
-		ndr->depth--;
-		ndr_print_uint16(ndr, "level", r->in.level);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_QueryUserInfo2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.info, r->in.level);
-		ndr_print_samr_UserInfo(ndr, "info", r->out.info);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_QueryDisplayInfo2(struct ndr_push *ndr, int flags, const struct samr_QueryDisplayInfo2 *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.level));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.start_idx));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_entries));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buf_size));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.total_size == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.total_size));
-		if (r->out.returned_size == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.returned_size));
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_push_samr_DispInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_QueryDisplayInfo2(struct ndr_pull *ndr, int flags, struct samr_QueryDisplayInfo2 *r)
-{
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	TALLOC_CTX *_mem_save_total_size_0;
-	TALLOC_CTX *_mem_save_returned_size_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.level));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.start_idx));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_entries));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.buf_size));
-		NDR_PULL_ALLOC(ndr, r->out.total_size);
-		ZERO_STRUCTP(r->out.total_size);
-		NDR_PULL_ALLOC(ndr, r->out.returned_size);
-		ZERO_STRUCTP(r->out.returned_size);
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.total_size);
-		}
-		_mem_save_total_size_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.total_size, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.total_size));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_total_size_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.returned_size);
-		}
-		_mem_save_returned_size_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.returned_size, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.returned_size));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_returned_size_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_pull_samr_DispInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_QueryDisplayInfo2(struct ndr_print *ndr, const char *name, int flags, const struct samr_QueryDisplayInfo2 *r)
-{
-	ndr_print_struct(ndr, name, "samr_QueryDisplayInfo2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_QueryDisplayInfo2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr_print_uint16(ndr, "level", r->in.level);
-		ndr_print_uint32(ndr, "start_idx", r->in.start_idx);
-		ndr_print_uint32(ndr, "max_entries", r->in.max_entries);
-		ndr_print_uint32(ndr, "buf_size", r->in.buf_size);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_QueryDisplayInfo2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "total_size", r->out.total_size);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "total_size", *r->out.total_size);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "returned_size", r->out.returned_size);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "returned_size", *r->out.returned_size);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.info, r->in.level);
-		ndr_print_samr_DispInfo(ndr, "info", r->out.info);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_GetDisplayEnumerationIndex2(struct ndr_push *ndr, int flags, const struct samr_GetDisplayEnumerationIndex2 *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.name));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.idx == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.idx));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_GetDisplayEnumerationIndex2(struct ndr_pull *ndr, int flags, struct samr_GetDisplayEnumerationIndex2 *r)
-{
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	TALLOC_CTX *_mem_save_name_0;
-	TALLOC_CTX *_mem_save_idx_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.name);
-		}
-		_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.name));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.idx);
-		ZERO_STRUCTP(r->out.idx);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.idx);
-		}
-		_mem_save_idx_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.idx, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.idx));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_idx_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_GetDisplayEnumerationIndex2(struct ndr_print *ndr, const char *name, int flags, const struct samr_GetDisplayEnumerationIndex2 *r)
-{
-	ndr_print_struct(ndr, name, "samr_GetDisplayEnumerationIndex2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_GetDisplayEnumerationIndex2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr_print_uint16(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "name", r->in.name);
-		ndr->depth++;
-		ndr_print_lsa_String(ndr, "name", r->in.name);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_GetDisplayEnumerationIndex2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "idx", r->out.idx);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "idx", *r->out.idx);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_CreateUser2(struct ndr_push *ndr, int flags, const struct samr_CreateUser2 *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		if (r->in.account_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.account_name));
-		NDR_CHECK(ndr_push_samr_AcctFlags(ndr, NDR_SCALARS, r->in.acct_flags));
-		NDR_CHECK(ndr_push_samr_UserAccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.user_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->out.user_handle));
-		if (r->out.access_granted == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.access_granted));
-		if (r->out.rid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.rid));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_CreateUser2(struct ndr_pull *ndr, int flags, struct samr_CreateUser2 *r)
-{
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	TALLOC_CTX *_mem_save_account_name_0;
-	TALLOC_CTX *_mem_save_user_handle_0;
-	TALLOC_CTX *_mem_save_access_granted_0;
-	TALLOC_CTX *_mem_save_rid_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.account_name);
-		}
-		_mem_save_account_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.account_name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.account_name));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_account_name_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_AcctFlags(ndr, NDR_SCALARS, &r->in.acct_flags));
-		NDR_CHECK(ndr_pull_samr_UserAccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.user_handle);
-		ZERO_STRUCTP(r->out.user_handle);
-		NDR_PULL_ALLOC(ndr, r->out.access_granted);
-		ZERO_STRUCTP(r->out.access_granted);
-		NDR_PULL_ALLOC(ndr, r->out.rid);
-		ZERO_STRUCTP(r->out.rid);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.user_handle);
-		}
-		_mem_save_user_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.user_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->out.user_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.access_granted);
-		}
-		_mem_save_access_granted_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.access_granted, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.access_granted));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_access_granted_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.rid);
-		}
-		_mem_save_rid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.rid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.rid));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rid_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_CreateUser2(struct ndr_print *ndr, const char *name, int flags, const struct samr_CreateUser2 *r)
-{
-	ndr_print_struct(ndr, name, "samr_CreateUser2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_CreateUser2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "account_name", r->in.account_name);
-		ndr->depth++;
-		ndr_print_lsa_String(ndr, "account_name", r->in.account_name);
-		ndr->depth--;
-		ndr_print_samr_AcctFlags(ndr, "acct_flags", r->in.acct_flags);
-		ndr_print_samr_UserAccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_CreateUser2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "user_handle", r->out.user_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "user_handle", r->out.user_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "access_granted", r->out.access_granted);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "access_granted", *r->out.access_granted);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "rid", r->out.rid);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "rid", *r->out.rid);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_QueryDisplayInfo3(struct ndr_push *ndr, int flags, const struct samr_QueryDisplayInfo3 *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.level));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.start_idx));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_entries));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buf_size));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.total_size == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.total_size));
-		if (r->out.returned_size == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.returned_size));
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_push_samr_DispInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_QueryDisplayInfo3(struct ndr_pull *ndr, int flags, struct samr_QueryDisplayInfo3 *r)
-{
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	TALLOC_CTX *_mem_save_total_size_0;
-	TALLOC_CTX *_mem_save_returned_size_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.level));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.start_idx));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_entries));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.buf_size));
-		NDR_PULL_ALLOC(ndr, r->out.total_size);
-		ZERO_STRUCTP(r->out.total_size);
-		NDR_PULL_ALLOC(ndr, r->out.returned_size);
-		ZERO_STRUCTP(r->out.returned_size);
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.total_size);
-		}
-		_mem_save_total_size_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.total_size, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.total_size));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_total_size_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.returned_size);
-		}
-		_mem_save_returned_size_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.returned_size, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.returned_size));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_returned_size_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_pull_samr_DispInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_QueryDisplayInfo3(struct ndr_print *ndr, const char *name, int flags, const struct samr_QueryDisplayInfo3 *r)
-{
-	ndr_print_struct(ndr, name, "samr_QueryDisplayInfo3");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_QueryDisplayInfo3");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr_print_uint16(ndr, "level", r->in.level);
-		ndr_print_uint32(ndr, "start_idx", r->in.start_idx);
-		ndr_print_uint32(ndr, "max_entries", r->in.max_entries);
-		ndr_print_uint32(ndr, "buf_size", r->in.buf_size);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_QueryDisplayInfo3");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "total_size", r->out.total_size);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "total_size", *r->out.total_size);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "returned_size", r->out.returned_size);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "returned_size", *r->out.returned_size);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.info, r->in.level);
-		ndr_print_samr_DispInfo(ndr, "info", r->out.info);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_AddMultipleMembersToAlias(struct ndr_push *ndr, int flags, const struct samr_AddMultipleMembersToAlias *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.alias_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.alias_handle));
-		if (r->in.sids == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_SidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sids));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_AddMultipleMembersToAlias(struct ndr_pull *ndr, int flags, struct samr_AddMultipleMembersToAlias *r)
-{
-	TALLOC_CTX *_mem_save_alias_handle_0;
-	TALLOC_CTX *_mem_save_sids_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.alias_handle);
-		}
-		_mem_save_alias_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.alias_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.alias_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_alias_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sids);
-		}
-		_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sids, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_SidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sids));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_AddMultipleMembersToAlias(struct ndr_print *ndr, const char *name, int flags, const struct samr_AddMultipleMembersToAlias *r)
-{
-	ndr_print_struct(ndr, name, "samr_AddMultipleMembersToAlias");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_AddMultipleMembersToAlias");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "alias_handle", r->in.alias_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "alias_handle", r->in.alias_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sids", r->in.sids);
-		ndr->depth++;
-		ndr_print_lsa_SidArray(ndr, "sids", r->in.sids);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_AddMultipleMembersToAlias");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_RemoveMultipleMembersFromAlias(struct ndr_push *ndr, int flags, const struct samr_RemoveMultipleMembersFromAlias *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.alias_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.alias_handle));
-		if (r->in.sids == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_SidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sids));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_RemoveMultipleMembersFromAlias(struct ndr_pull *ndr, int flags, struct samr_RemoveMultipleMembersFromAlias *r)
-{
-	TALLOC_CTX *_mem_save_alias_handle_0;
-	TALLOC_CTX *_mem_save_sids_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.alias_handle);
-		}
-		_mem_save_alias_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.alias_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.alias_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_alias_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sids);
-		}
-		_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sids, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_SidArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sids));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_RemoveMultipleMembersFromAlias(struct ndr_print *ndr, const char *name, int flags, const struct samr_RemoveMultipleMembersFromAlias *r)
-{
-	ndr_print_struct(ndr, name, "samr_RemoveMultipleMembersFromAlias");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_RemoveMultipleMembersFromAlias");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "alias_handle", r->in.alias_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "alias_handle", r->in.alias_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sids", r->in.sids);
-		ndr->depth++;
-		ndr_print_lsa_SidArray(ndr, "sids", r->in.sids);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_RemoveMultipleMembersFromAlias");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_OemChangePasswordUser2(struct ndr_push *ndr, int flags, const struct samr_OemChangePasswordUser2 *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server));
-		if (r->in.server) {
-			NDR_CHECK(ndr_push_lsa_AsciiString(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.server));
-		}
-		if (r->in.account == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_AsciiString(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.account));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.password));
-		if (r->in.password) {
-			NDR_CHECK(ndr_push_samr_CryptPassword(ndr, NDR_SCALARS, r->in.password));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.hash));
-		if (r->in.hash) {
-			NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, r->in.hash));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_OemChangePasswordUser2(struct ndr_pull *ndr, int flags, struct samr_OemChangePasswordUser2 *r)
-{
-	uint32_t _ptr_server;
-	uint32_t _ptr_password;
-	uint32_t _ptr_hash;
-	TALLOC_CTX *_mem_save_server_0;
-	TALLOC_CTX *_mem_save_account_0;
-	TALLOC_CTX *_mem_save_password_0;
-	TALLOC_CTX *_mem_save_hash_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server));
-		if (_ptr_server) {
-			NDR_PULL_ALLOC(ndr, r->in.server);
-		} else {
-			r->in.server = NULL;
-		}
-		if (r->in.server) {
-			_mem_save_server_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server, 0);
-			NDR_CHECK(ndr_pull_lsa_AsciiString(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.server));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.account);
-		}
-		_mem_save_account_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.account, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_AsciiString(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.account));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_account_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_password));
-		if (_ptr_password) {
-			NDR_PULL_ALLOC(ndr, r->in.password);
-		} else {
-			r->in.password = NULL;
-		}
-		if (r->in.password) {
-			_mem_save_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.password, 0);
-			NDR_CHECK(ndr_pull_samr_CryptPassword(ndr, NDR_SCALARS, r->in.password));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_password_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_hash));
-		if (_ptr_hash) {
-			NDR_PULL_ALLOC(ndr, r->in.hash);
-		} else {
-			r->in.hash = NULL;
-		}
-		if (r->in.hash) {
-			_mem_save_hash_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.hash, 0);
-			NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, r->in.hash));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_hash_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_OemChangePasswordUser2(struct ndr_print *ndr, const char *name, int flags, const struct samr_OemChangePasswordUser2 *r)
-{
-	ndr_print_struct(ndr, name, "samr_OemChangePasswordUser2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_OemChangePasswordUser2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server", r->in.server);
-		ndr->depth++;
-		if (r->in.server) {
-			ndr_print_lsa_AsciiString(ndr, "server", r->in.server);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "account", r->in.account);
-		ndr->depth++;
-		ndr_print_lsa_AsciiString(ndr, "account", r->in.account);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "password", r->in.password);
-		ndr->depth++;
-		if (r->in.password) {
-			ndr_print_samr_CryptPassword(ndr, "password", r->in.password);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "hash", r->in.hash);
-		ndr->depth++;
-		if (r->in.hash) {
-			ndr_print_samr_Password(ndr, "hash", r->in.hash);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_OemChangePasswordUser2");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_ChangePasswordUser2(struct ndr_push *ndr, int flags, const struct samr_ChangePasswordUser2 *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server));
-		if (r->in.server) {
-			NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.server));
-		}
-		if (r->in.account == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.account));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.nt_password));
-		if (r->in.nt_password) {
-			NDR_CHECK(ndr_push_samr_CryptPassword(ndr, NDR_SCALARS, r->in.nt_password));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.nt_verifier));
-		if (r->in.nt_verifier) {
-			NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, r->in.nt_verifier));
-		}
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->in.lm_change));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.lm_password));
-		if (r->in.lm_password) {
-			NDR_CHECK(ndr_push_samr_CryptPassword(ndr, NDR_SCALARS, r->in.lm_password));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.lm_verifier));
-		if (r->in.lm_verifier) {
-			NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, r->in.lm_verifier));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_ChangePasswordUser2(struct ndr_pull *ndr, int flags, struct samr_ChangePasswordUser2 *r)
-{
-	uint32_t _ptr_server;
-	uint32_t _ptr_nt_password;
-	uint32_t _ptr_nt_verifier;
-	uint32_t _ptr_lm_password;
-	uint32_t _ptr_lm_verifier;
-	TALLOC_CTX *_mem_save_server_0;
-	TALLOC_CTX *_mem_save_account_0;
-	TALLOC_CTX *_mem_save_nt_password_0;
-	TALLOC_CTX *_mem_save_nt_verifier_0;
-	TALLOC_CTX *_mem_save_lm_password_0;
-	TALLOC_CTX *_mem_save_lm_verifier_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server));
-		if (_ptr_server) {
-			NDR_PULL_ALLOC(ndr, r->in.server);
-		} else {
-			r->in.server = NULL;
-		}
-		if (r->in.server) {
-			_mem_save_server_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server, 0);
-			NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.server));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.account);
-		}
-		_mem_save_account_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.account, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.account));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_account_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_nt_password));
-		if (_ptr_nt_password) {
-			NDR_PULL_ALLOC(ndr, r->in.nt_password);
-		} else {
-			r->in.nt_password = NULL;
-		}
-		if (r->in.nt_password) {
-			_mem_save_nt_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.nt_password, 0);
-			NDR_CHECK(ndr_pull_samr_CryptPassword(ndr, NDR_SCALARS, r->in.nt_password));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_nt_password_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_nt_verifier));
-		if (_ptr_nt_verifier) {
-			NDR_PULL_ALLOC(ndr, r->in.nt_verifier);
-		} else {
-			r->in.nt_verifier = NULL;
-		}
-		if (r->in.nt_verifier) {
-			_mem_save_nt_verifier_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.nt_verifier, 0);
-			NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, r->in.nt_verifier));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_nt_verifier_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->in.lm_change));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_lm_password));
-		if (_ptr_lm_password) {
-			NDR_PULL_ALLOC(ndr, r->in.lm_password);
-		} else {
-			r->in.lm_password = NULL;
-		}
-		if (r->in.lm_password) {
-			_mem_save_lm_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.lm_password, 0);
-			NDR_CHECK(ndr_pull_samr_CryptPassword(ndr, NDR_SCALARS, r->in.lm_password));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_lm_password_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_lm_verifier));
-		if (_ptr_lm_verifier) {
-			NDR_PULL_ALLOC(ndr, r->in.lm_verifier);
-		} else {
-			r->in.lm_verifier = NULL;
-		}
-		if (r->in.lm_verifier) {
-			_mem_save_lm_verifier_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.lm_verifier, 0);
-			NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, r->in.lm_verifier));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_lm_verifier_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_ChangePasswordUser2(struct ndr_print *ndr, const char *name, int flags, const struct samr_ChangePasswordUser2 *r)
-{
-	ndr_print_struct(ndr, name, "samr_ChangePasswordUser2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_ChangePasswordUser2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server", r->in.server);
-		ndr->depth++;
-		if (r->in.server) {
-			ndr_print_lsa_String(ndr, "server", r->in.server);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "account", r->in.account);
-		ndr->depth++;
-		ndr_print_lsa_String(ndr, "account", r->in.account);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "nt_password", r->in.nt_password);
-		ndr->depth++;
-		if (r->in.nt_password) {
-			ndr_print_samr_CryptPassword(ndr, "nt_password", r->in.nt_password);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "nt_verifier", r->in.nt_verifier);
-		ndr->depth++;
-		if (r->in.nt_verifier) {
-			ndr_print_samr_Password(ndr, "nt_verifier", r->in.nt_verifier);
-		}
-		ndr->depth--;
-		ndr_print_uint8(ndr, "lm_change", r->in.lm_change);
-		ndr_print_ptr(ndr, "lm_password", r->in.lm_password);
-		ndr->depth++;
-		if (r->in.lm_password) {
-			ndr_print_samr_CryptPassword(ndr, "lm_password", r->in.lm_password);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "lm_verifier", r->in.lm_verifier);
-		ndr->depth++;
-		if (r->in.lm_verifier) {
-			ndr_print_samr_Password(ndr, "lm_verifier", r->in.lm_verifier);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_ChangePasswordUser2");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_GetDomPwInfo(struct ndr_push *ndr, int flags, const struct samr_GetDomPwInfo *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.domain_name));
-		if (r->in.domain_name) {
-			NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.domain_name));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_samr_PwInfo(ndr, NDR_SCALARS, r->out.info));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_GetDomPwInfo(struct ndr_pull *ndr, int flags, struct samr_GetDomPwInfo *r)
-{
-	uint32_t _ptr_domain_name;
-	TALLOC_CTX *_mem_save_domain_name_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain_name));
-		if (_ptr_domain_name) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_name);
-		} else {
-			r->in.domain_name = NULL;
-		}
-		if (r->in.domain_name) {
-			_mem_save_domain_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_name, 0);
-			NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.domain_name));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_name_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_PwInfo(ndr, NDR_SCALARS, r->out.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_GetDomPwInfo(struct ndr_print *ndr, const char *name, int flags, const struct samr_GetDomPwInfo *r)
-{
-	ndr_print_struct(ndr, name, "samr_GetDomPwInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_GetDomPwInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_name", r->in.domain_name);
-		ndr->depth++;
-		if (r->in.domain_name) {
-			ndr_print_lsa_String(ndr, "domain_name", r->in.domain_name);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_GetDomPwInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_samr_PwInfo(ndr, "info", r->out.info);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_Connect2(struct ndr_push *ndr, int flags, const struct samr_Connect2 *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.system_name));
-		if (r->in.system_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.system_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.system_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.system_name, ndr_charset_length(r->in.system_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_samr_ConnectAccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.connect_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->out.connect_handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_Connect2(struct ndr_pull *ndr, int flags, struct samr_Connect2 *r)
-{
-	uint32_t _ptr_system_name;
-	TALLOC_CTX *_mem_save_system_name_0;
-	TALLOC_CTX *_mem_save_connect_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_system_name));
-		if (_ptr_system_name) {
-			NDR_PULL_ALLOC(ndr, r->in.system_name);
-		} else {
-			r->in.system_name = NULL;
-		}
-		if (r->in.system_name) {
-			_mem_save_system_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.system_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.system_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.system_name));
-			if (ndr_get_array_length(ndr, &r->in.system_name) > ndr_get_array_size(ndr, &r->in.system_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.system_name), ndr_get_array_length(ndr, &r->in.system_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.system_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.system_name, ndr_get_array_length(ndr, &r->in.system_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_system_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_samr_ConnectAccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.connect_handle);
-		ZERO_STRUCTP(r->out.connect_handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.connect_handle);
-		}
-		_mem_save_connect_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.connect_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->out.connect_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_connect_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_Connect2(struct ndr_print *ndr, const char *name, int flags, const struct samr_Connect2 *r)
-{
-	ndr_print_struct(ndr, name, "samr_Connect2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_Connect2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "system_name", r->in.system_name);
-		ndr->depth++;
-		if (r->in.system_name) {
-			ndr_print_string(ndr, "system_name", r->in.system_name);
-		}
-		ndr->depth--;
-		ndr_print_samr_ConnectAccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_Connect2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "connect_handle", r->out.connect_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "connect_handle", r->out.connect_handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_samr_SetUserInfo2(struct ndr_push *ndr, int flags, const struct samr_SetUserInfo2 *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.user_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.user_handle));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.info, r->in.level));
-		NDR_CHECK(ndr_push_samr_UserInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_samr_SetUserInfo2(struct ndr_pull *ndr, int flags, struct samr_SetUserInfo2 *r)
-{
-	TALLOC_CTX *_mem_save_user_handle_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.user_handle);
-		}
-		_mem_save_user_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.user_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.user_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.info, r->in.level));
-		NDR_CHECK(ndr_pull_samr_UserInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_SetUserInfo2(struct ndr_print *ndr, const char *name, int flags, const struct samr_SetUserInfo2 *r)
-{
-	ndr_print_struct(ndr, name, "samr_SetUserInfo2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_SetUserInfo2");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "user_handle", r->in.user_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "user_handle", r->in.user_handle);
-		ndr->depth--;
-		ndr_print_uint16(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "info", r->in.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->in.info, r->in.level);
-		ndr_print_samr_UserInfo(ndr, "info", r->in.info);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_SetUserInfo2");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_SetBootKeyInformation(struct ndr_push *ndr, int flags, const struct samr_SetBootKeyInformation *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.connect_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.connect_handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown1));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown2));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown3));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_SetBootKeyInformation(struct ndr_pull *ndr, int flags, struct samr_SetBootKeyInformation *r)
-{
-	TALLOC_CTX *_mem_save_connect_handle_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.connect_handle);
-		}
-		_mem_save_connect_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.connect_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.connect_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_connect_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown1));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown2));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown3));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_SetBootKeyInformation(struct ndr_print *ndr, const char *name, int flags, const struct samr_SetBootKeyInformation *r)
-{
-	ndr_print_struct(ndr, name, "samr_SetBootKeyInformation");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_SetBootKeyInformation");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "connect_handle", r->in.connect_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "connect_handle", r->in.connect_handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "unknown1", r->in.unknown1);
-		ndr_print_uint32(ndr, "unknown2", r->in.unknown2);
-		ndr_print_uint32(ndr, "unknown3", r->in.unknown3);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_SetBootKeyInformation");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_GetBootKeyInformation(struct ndr_push *ndr, int flags, const struct samr_GetBootKeyInformation *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.unknown == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.unknown));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_GetBootKeyInformation(struct ndr_pull *ndr, int flags, struct samr_GetBootKeyInformation *r)
-{
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	TALLOC_CTX *_mem_save_unknown_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.unknown);
-		ZERO_STRUCTP(r->out.unknown);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.unknown);
-		}
-		_mem_save_unknown_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.unknown, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.unknown));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_GetBootKeyInformation(struct ndr_print *ndr, const char *name, int flags, const struct samr_GetBootKeyInformation *r)
-{
-	ndr_print_struct(ndr, name, "samr_GetBootKeyInformation");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_GetBootKeyInformation");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_GetBootKeyInformation");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "unknown", r->out.unknown);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "unknown", *r->out.unknown);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_Connect3(struct ndr_push *ndr, int flags, const struct samr_Connect3 *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.system_name));
-		if (r->in.system_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.system_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.system_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.system_name, ndr_charset_length(r->in.system_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown));
-		NDR_CHECK(ndr_push_samr_ConnectAccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.connect_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->out.connect_handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_Connect3(struct ndr_pull *ndr, int flags, struct samr_Connect3 *r)
-{
-	uint32_t _ptr_system_name;
-	TALLOC_CTX *_mem_save_system_name_0;
-	TALLOC_CTX *_mem_save_connect_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_system_name));
-		if (_ptr_system_name) {
-			NDR_PULL_ALLOC(ndr, r->in.system_name);
-		} else {
-			r->in.system_name = NULL;
-		}
-		if (r->in.system_name) {
-			_mem_save_system_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.system_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.system_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.system_name));
-			if (ndr_get_array_length(ndr, &r->in.system_name) > ndr_get_array_size(ndr, &r->in.system_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.system_name), ndr_get_array_length(ndr, &r->in.system_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.system_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.system_name, ndr_get_array_length(ndr, &r->in.system_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_system_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown));
-		NDR_CHECK(ndr_pull_samr_ConnectAccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.connect_handle);
-		ZERO_STRUCTP(r->out.connect_handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.connect_handle);
-		}
-		_mem_save_connect_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.connect_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->out.connect_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_connect_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_Connect3(struct ndr_print *ndr, const char *name, int flags, const struct samr_Connect3 *r)
-{
-	ndr_print_struct(ndr, name, "samr_Connect3");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_Connect3");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "system_name", r->in.system_name);
-		ndr->depth++;
-		if (r->in.system_name) {
-			ndr_print_string(ndr, "system_name", r->in.system_name);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "unknown", r->in.unknown);
-		ndr_print_samr_ConnectAccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_Connect3");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "connect_handle", r->out.connect_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "connect_handle", r->out.connect_handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_Connect4(struct ndr_push *ndr, int flags, const struct samr_Connect4 *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.system_name));
-		if (r->in.system_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.system_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.system_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.system_name, ndr_charset_length(r->in.system_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_samr_ConnectVersion(ndr, NDR_SCALARS, r->in.client_version));
-		NDR_CHECK(ndr_push_samr_ConnectAccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.connect_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->out.connect_handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_Connect4(struct ndr_pull *ndr, int flags, struct samr_Connect4 *r)
-{
-	uint32_t _ptr_system_name;
-	TALLOC_CTX *_mem_save_system_name_0;
-	TALLOC_CTX *_mem_save_connect_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_system_name));
-		if (_ptr_system_name) {
-			NDR_PULL_ALLOC(ndr, r->in.system_name);
-		} else {
-			r->in.system_name = NULL;
-		}
-		if (r->in.system_name) {
-			_mem_save_system_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.system_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.system_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.system_name));
-			if (ndr_get_array_length(ndr, &r->in.system_name) > ndr_get_array_size(ndr, &r->in.system_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.system_name), ndr_get_array_length(ndr, &r->in.system_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.system_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.system_name, ndr_get_array_length(ndr, &r->in.system_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_system_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_samr_ConnectVersion(ndr, NDR_SCALARS, &r->in.client_version));
-		NDR_CHECK(ndr_pull_samr_ConnectAccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.connect_handle);
-		ZERO_STRUCTP(r->out.connect_handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.connect_handle);
-		}
-		_mem_save_connect_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.connect_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->out.connect_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_connect_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_Connect4(struct ndr_print *ndr, const char *name, int flags, const struct samr_Connect4 *r)
-{
-	ndr_print_struct(ndr, name, "samr_Connect4");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_Connect4");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "system_name", r->in.system_name);
-		ndr->depth++;
-		if (r->in.system_name) {
-			ndr_print_string(ndr, "system_name", r->in.system_name);
-		}
-		ndr->depth--;
-		ndr_print_samr_ConnectVersion(ndr, "client_version", r->in.client_version);
-		ndr_print_samr_ConnectAccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_Connect4");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "connect_handle", r->out.connect_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "connect_handle", r->out.connect_handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_ChangePasswordUser3(struct ndr_push *ndr, int flags, const struct samr_ChangePasswordUser3 *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server));
-		if (r->in.server) {
-			NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.server));
-		}
-		if (r->in.account == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.account));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.nt_password));
-		if (r->in.nt_password) {
-			NDR_CHECK(ndr_push_samr_CryptPassword(ndr, NDR_SCALARS, r->in.nt_password));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.nt_verifier));
-		if (r->in.nt_verifier) {
-			NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, r->in.nt_verifier));
-		}
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->in.lm_change));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.lm_password));
-		if (r->in.lm_password) {
-			NDR_CHECK(ndr_push_samr_CryptPassword(ndr, NDR_SCALARS, r->in.lm_password));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.lm_verifier));
-		if (r->in.lm_verifier) {
-			NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, r->in.lm_verifier));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.password3));
-		if (r->in.password3) {
-			NDR_CHECK(ndr_push_samr_CryptPassword(ndr, NDR_SCALARS, r->in.password3));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.dominfo == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.dominfo));
-		if (*r->out.dominfo) {
-			NDR_CHECK(ndr_push_samr_DomInfo1(ndr, NDR_SCALARS, *r->out.dominfo));
-		}
-		if (r->out.reject == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.reject));
-		if (*r->out.reject) {
-			NDR_CHECK(ndr_push_samr_ChangeReject(ndr, NDR_SCALARS, *r->out.reject));
-		}
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_ChangePasswordUser3(struct ndr_pull *ndr, int flags, struct samr_ChangePasswordUser3 *r)
-{
-	uint32_t _ptr_server;
-	uint32_t _ptr_nt_password;
-	uint32_t _ptr_nt_verifier;
-	uint32_t _ptr_lm_password;
-	uint32_t _ptr_lm_verifier;
-	uint32_t _ptr_password3;
-	uint32_t _ptr_dominfo;
-	uint32_t _ptr_reject;
-	TALLOC_CTX *_mem_save_server_0;
-	TALLOC_CTX *_mem_save_account_0;
-	TALLOC_CTX *_mem_save_nt_password_0;
-	TALLOC_CTX *_mem_save_nt_verifier_0;
-	TALLOC_CTX *_mem_save_lm_password_0;
-	TALLOC_CTX *_mem_save_lm_verifier_0;
-	TALLOC_CTX *_mem_save_password3_0;
-	TALLOC_CTX *_mem_save_dominfo_0;
-	TALLOC_CTX *_mem_save_dominfo_1;
-	TALLOC_CTX *_mem_save_reject_0;
-	TALLOC_CTX *_mem_save_reject_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server));
-		if (_ptr_server) {
-			NDR_PULL_ALLOC(ndr, r->in.server);
-		} else {
-			r->in.server = NULL;
-		}
-		if (r->in.server) {
-			_mem_save_server_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server, 0);
-			NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.server));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.account);
-		}
-		_mem_save_account_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.account, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.account));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_account_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_nt_password));
-		if (_ptr_nt_password) {
-			NDR_PULL_ALLOC(ndr, r->in.nt_password);
-		} else {
-			r->in.nt_password = NULL;
-		}
-		if (r->in.nt_password) {
-			_mem_save_nt_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.nt_password, 0);
-			NDR_CHECK(ndr_pull_samr_CryptPassword(ndr, NDR_SCALARS, r->in.nt_password));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_nt_password_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_nt_verifier));
-		if (_ptr_nt_verifier) {
-			NDR_PULL_ALLOC(ndr, r->in.nt_verifier);
-		} else {
-			r->in.nt_verifier = NULL;
-		}
-		if (r->in.nt_verifier) {
-			_mem_save_nt_verifier_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.nt_verifier, 0);
-			NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, r->in.nt_verifier));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_nt_verifier_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->in.lm_change));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_lm_password));
-		if (_ptr_lm_password) {
-			NDR_PULL_ALLOC(ndr, r->in.lm_password);
-		} else {
-			r->in.lm_password = NULL;
-		}
-		if (r->in.lm_password) {
-			_mem_save_lm_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.lm_password, 0);
-			NDR_CHECK(ndr_pull_samr_CryptPassword(ndr, NDR_SCALARS, r->in.lm_password));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_lm_password_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_lm_verifier));
-		if (_ptr_lm_verifier) {
-			NDR_PULL_ALLOC(ndr, r->in.lm_verifier);
-		} else {
-			r->in.lm_verifier = NULL;
-		}
-		if (r->in.lm_verifier) {
-			_mem_save_lm_verifier_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.lm_verifier, 0);
-			NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, r->in.lm_verifier));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_lm_verifier_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_password3));
-		if (_ptr_password3) {
-			NDR_PULL_ALLOC(ndr, r->in.password3);
-		} else {
-			r->in.password3 = NULL;
-		}
-		if (r->in.password3) {
-			_mem_save_password3_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.password3, 0);
-			NDR_CHECK(ndr_pull_samr_CryptPassword(ndr, NDR_SCALARS, r->in.password3));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_password3_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.dominfo);
-		ZERO_STRUCTP(r->out.dominfo);
-		NDR_PULL_ALLOC(ndr, r->out.reject);
-		ZERO_STRUCTP(r->out.reject);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.dominfo);
-		}
-		_mem_save_dominfo_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.dominfo, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dominfo));
-		if (_ptr_dominfo) {
-			NDR_PULL_ALLOC(ndr, *r->out.dominfo);
-		} else {
-			*r->out.dominfo = NULL;
-		}
-		if (*r->out.dominfo) {
-			_mem_save_dominfo_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.dominfo, 0);
-			NDR_CHECK(ndr_pull_samr_DomInfo1(ndr, NDR_SCALARS, *r->out.dominfo));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dominfo_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dominfo_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.reject);
-		}
-		_mem_save_reject_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.reject, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_reject));
-		if (_ptr_reject) {
-			NDR_PULL_ALLOC(ndr, *r->out.reject);
-		} else {
-			*r->out.reject = NULL;
-		}
-		if (*r->out.reject) {
-			_mem_save_reject_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.reject, 0);
-			NDR_CHECK(ndr_pull_samr_ChangeReject(ndr, NDR_SCALARS, *r->out.reject));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_reject_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_reject_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_ChangePasswordUser3(struct ndr_print *ndr, const char *name, int flags, const struct samr_ChangePasswordUser3 *r)
-{
-	ndr_print_struct(ndr, name, "samr_ChangePasswordUser3");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_ChangePasswordUser3");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server", r->in.server);
-		ndr->depth++;
-		if (r->in.server) {
-			ndr_print_lsa_String(ndr, "server", r->in.server);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "account", r->in.account);
-		ndr->depth++;
-		ndr_print_lsa_String(ndr, "account", r->in.account);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "nt_password", r->in.nt_password);
-		ndr->depth++;
-		if (r->in.nt_password) {
-			ndr_print_samr_CryptPassword(ndr, "nt_password", r->in.nt_password);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "nt_verifier", r->in.nt_verifier);
-		ndr->depth++;
-		if (r->in.nt_verifier) {
-			ndr_print_samr_Password(ndr, "nt_verifier", r->in.nt_verifier);
-		}
-		ndr->depth--;
-		ndr_print_uint8(ndr, "lm_change", r->in.lm_change);
-		ndr_print_ptr(ndr, "lm_password", r->in.lm_password);
-		ndr->depth++;
-		if (r->in.lm_password) {
-			ndr_print_samr_CryptPassword(ndr, "lm_password", r->in.lm_password);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "lm_verifier", r->in.lm_verifier);
-		ndr->depth++;
-		if (r->in.lm_verifier) {
-			ndr_print_samr_Password(ndr, "lm_verifier", r->in.lm_verifier);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "password3", r->in.password3);
-		ndr->depth++;
-		if (r->in.password3) {
-			ndr_print_samr_CryptPassword(ndr, "password3", r->in.password3);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_ChangePasswordUser3");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "dominfo", r->out.dominfo);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "dominfo", *r->out.dominfo);
-		ndr->depth++;
-		if (*r->out.dominfo) {
-			ndr_print_samr_DomInfo1(ndr, "dominfo", *r->out.dominfo);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "reject", r->out.reject);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "reject", *r->out.reject);
-		ndr->depth++;
-		if (*r->out.reject) {
-			ndr_print_samr_ChangeReject(ndr, "reject", *r->out.reject);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_samr_Connect5(struct ndr_push *ndr, int flags, const struct samr_Connect5 *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.system_name));
-		if (r->in.system_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.system_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.system_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.system_name, ndr_charset_length(r->in.system_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_samr_ConnectAccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level_in));
-		if (r->in.info_in == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.info_in, r->in.level_in));
-		NDR_CHECK(ndr_push_samr_ConnectInfo(ndr, NDR_SCALARS, r->in.info_in));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.level_out == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.level_out));
-		if (r->out.info_out == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.info_out, *r->out.level_out));
-		NDR_CHECK(ndr_push_samr_ConnectInfo(ndr, NDR_SCALARS, r->out.info_out));
-		if (r->out.connect_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->out.connect_handle));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_samr_Connect5(struct ndr_pull *ndr, int flags, struct samr_Connect5 *r)
-{
-	uint32_t _ptr_system_name;
-	TALLOC_CTX *_mem_save_system_name_0;
-	TALLOC_CTX *_mem_save_info_in_0;
-	TALLOC_CTX *_mem_save_level_out_0;
-	TALLOC_CTX *_mem_save_info_out_0;
-	TALLOC_CTX *_mem_save_connect_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_system_name));
-		if (_ptr_system_name) {
-			NDR_PULL_ALLOC(ndr, r->in.system_name);
-		} else {
-			r->in.system_name = NULL;
-		}
-		if (r->in.system_name) {
-			_mem_save_system_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.system_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.system_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.system_name));
-			if (ndr_get_array_length(ndr, &r->in.system_name) > ndr_get_array_size(ndr, &r->in.system_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.system_name), ndr_get_array_length(ndr, &r->in.system_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.system_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.system_name, ndr_get_array_length(ndr, &r->in.system_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_system_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_samr_ConnectAccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level_in));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info_in);
-		}
-		_mem_save_info_in_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info_in, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.info_in, r->in.level_in));
-		NDR_CHECK(ndr_pull_samr_ConnectInfo(ndr, NDR_SCALARS, r->in.info_in));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_in_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.level_out);
-		ZERO_STRUCTP(r->out.level_out);
-		NDR_PULL_ALLOC(ndr, r->out.info_out);
-		ZERO_STRUCTP(r->out.info_out);
-		NDR_PULL_ALLOC(ndr, r->out.connect_handle);
-		ZERO_STRUCTP(r->out.connect_handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.level_out);
-		}
-		_mem_save_level_out_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.level_out, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.level_out));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_level_out_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info_out);
-		}
-		_mem_save_info_out_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info_out, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.info_out, *r->out.level_out));
-		NDR_CHECK(ndr_pull_samr_ConnectInfo(ndr, NDR_SCALARS, r->out.info_out));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_out_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.connect_handle);
-		}
-		_mem_save_connect_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.connect_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->out.connect_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_connect_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_Connect5(struct ndr_print *ndr, const char *name, int flags, const struct samr_Connect5 *r)
-{
-	ndr_print_struct(ndr, name, "samr_Connect5");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_Connect5");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "system_name", r->in.system_name);
-		ndr->depth++;
-		if (r->in.system_name) {
-			ndr_print_string(ndr, "system_name", r->in.system_name);
-		}
-		ndr->depth--;
-		ndr_print_samr_ConnectAccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr_print_uint32(ndr, "level_in", r->in.level_in);
-		ndr_print_ptr(ndr, "info_in", r->in.info_in);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->in.info_in, r->in.level_in);
-		ndr_print_samr_ConnectInfo(ndr, "info_in", r->in.info_in);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_Connect5");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "level_out", r->out.level_out);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "level_out", *r->out.level_out);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "info_out", r->out.info_out);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.info_out, *r->out.level_out);
-		ndr_print_samr_ConnectInfo(ndr, "info_out", r->out.info_out);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "connect_handle", r->out.connect_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "connect_handle", r->out.connect_handle);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_RidToSid(struct ndr_push *ndr, int flags, const struct samr_RidToSid *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.domain_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.rid));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.sid == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sid));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_RidToSid(struct ndr_pull *ndr, int flags, struct samr_RidToSid *r)
-{
-	TALLOC_CTX *_mem_save_domain_handle_0;
-	TALLOC_CTX *_mem_save_sid_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.domain_handle);
-		}
-		_mem_save_domain_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.domain_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.domain_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.rid));
-		NDR_PULL_ALLOC(ndr, r->out.sid);
-		ZERO_STRUCTP(r->out.sid);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.sid);
-		}
-		_mem_save_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.sid, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sid));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sid_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_RidToSid(struct ndr_print *ndr, const char *name, int flags, const struct samr_RidToSid *r)
-{
-	ndr_print_struct(ndr, name, "samr_RidToSid");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_RidToSid");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "domain_handle", r->in.domain_handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "rid", r->in.rid);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_RidToSid");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "sid", r->out.sid);
-		ndr->depth++;
-		ndr_print_dom_sid2(ndr, "sid", r->out.sid);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_SetDsrmPassword(struct ndr_push *ndr, int flags, const struct samr_SetDsrmPassword *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.name));
-		if (r->in.name) {
-			NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.name));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.hash));
-		if (r->in.hash) {
-			NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, r->in.hash));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_SetDsrmPassword(struct ndr_pull *ndr, int flags, struct samr_SetDsrmPassword *r)
-{
-	uint32_t _ptr_name;
-	uint32_t _ptr_hash;
-	TALLOC_CTX *_mem_save_name_0;
-	TALLOC_CTX *_mem_save_hash_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_name));
-		if (_ptr_name) {
-			NDR_PULL_ALLOC(ndr, r->in.name);
-		} else {
-			r->in.name = NULL;
-		}
-		if (r->in.name) {
-			_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.name, 0);
-			NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.name));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_hash));
-		if (_ptr_hash) {
-			NDR_PULL_ALLOC(ndr, r->in.hash);
-		} else {
-			r->in.hash = NULL;
-		}
-		if (r->in.hash) {
-			_mem_save_hash_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.hash, 0);
-			NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, r->in.hash));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_hash_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_SetDsrmPassword(struct ndr_print *ndr, const char *name, int flags, const struct samr_SetDsrmPassword *r)
-{
-	ndr_print_struct(ndr, name, "samr_SetDsrmPassword");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_SetDsrmPassword");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "name", r->in.name);
-		ndr->depth++;
-		if (r->in.name) {
-			ndr_print_lsa_String(ndr, "name", r->in.name);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "unknown", r->in.unknown);
-		ndr_print_ptr(ndr, "hash", r->in.hash);
-		ndr->depth++;
-		if (r->in.hash) {
-			ndr_print_samr_Password(ndr, "hash", r->in.hash);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_SetDsrmPassword");
-		ndr->depth++;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_samr_ValidatePassword(struct ndr_push *ndr, int flags, const struct samr_ValidatePassword *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_samr_ValidatePasswordLevel(ndr, NDR_SCALARS, r->in.level));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->in.req, r->in.level));
-		NDR_CHECK(ndr_push_samr_ValidatePasswordReq(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.req));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.rep == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.rep, r->in.level));
-		NDR_CHECK(ndr_push_samr_ValidatePasswordRep(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.rep));
-		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_samr_ValidatePassword(struct ndr_pull *ndr, int flags, struct samr_ValidatePassword *r)
-{
-	TALLOC_CTX *_mem_save_rep_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_samr_ValidatePasswordLevel(ndr, NDR_SCALARS, &r->in.level));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->in.req, r->in.level));
-		NDR_CHECK(ndr_pull_samr_ValidatePasswordReq(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.req));
-		NDR_PULL_ALLOC(ndr, r->out.rep);
-		ZERO_STRUCTP(r->out.rep);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.rep);
-		}
-		_mem_save_rep_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.rep, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.rep, r->in.level));
-		NDR_CHECK(ndr_pull_samr_ValidatePasswordRep(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.rep));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_rep_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_samr_ValidatePassword(struct ndr_print *ndr, const char *name, int flags, const struct samr_ValidatePassword *r)
-{
-	ndr_print_struct(ndr, name, "samr_ValidatePassword");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "samr_ValidatePassword");
-		ndr->depth++;
-		ndr_print_samr_ValidatePasswordLevel(ndr, "level", r->in.level);
-		ndr_print_set_switch_value(ndr, &r->in.req, r->in.level);
-		ndr_print_samr_ValidatePasswordReq(ndr, "req", &r->in.req);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "samr_ValidatePassword");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "rep", r->out.rep);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.rep, r->in.level);
-		ndr_print_samr_ValidatePasswordRep(ndr, "rep", r->out.rep);
-		ndr->depth--;
-		ndr_print_NTSTATUS(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static const struct ndr_interface_call samr_calls[] = {
-	{
-		"samr_Connect",
-		sizeof(struct samr_Connect),
-		(ndr_push_flags_fn_t) ndr_push_samr_Connect,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_Connect,
-		(ndr_print_function_t) ndr_print_samr_Connect,
-		false,
-	},
-	{
-		"samr_Close",
-		sizeof(struct samr_Close),
-		(ndr_push_flags_fn_t) ndr_push_samr_Close,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_Close,
-		(ndr_print_function_t) ndr_print_samr_Close,
-		false,
-	},
-	{
-		"samr_SetSecurity",
-		sizeof(struct samr_SetSecurity),
-		(ndr_push_flags_fn_t) ndr_push_samr_SetSecurity,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_SetSecurity,
-		(ndr_print_function_t) ndr_print_samr_SetSecurity,
-		false,
-	},
-	{
-		"samr_QuerySecurity",
-		sizeof(struct samr_QuerySecurity),
-		(ndr_push_flags_fn_t) ndr_push_samr_QuerySecurity,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_QuerySecurity,
-		(ndr_print_function_t) ndr_print_samr_QuerySecurity,
-		false,
-	},
-	{
-		"samr_Shutdown",
-		sizeof(struct samr_Shutdown),
-		(ndr_push_flags_fn_t) ndr_push_samr_Shutdown,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_Shutdown,
-		(ndr_print_function_t) ndr_print_samr_Shutdown,
-		false,
-	},
-	{
-		"samr_LookupDomain",
-		sizeof(struct samr_LookupDomain),
-		(ndr_push_flags_fn_t) ndr_push_samr_LookupDomain,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_LookupDomain,
-		(ndr_print_function_t) ndr_print_samr_LookupDomain,
-		false,
-	},
-	{
-		"samr_EnumDomains",
-		sizeof(struct samr_EnumDomains),
-		(ndr_push_flags_fn_t) ndr_push_samr_EnumDomains,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_EnumDomains,
-		(ndr_print_function_t) ndr_print_samr_EnumDomains,
-		false,
-	},
-	{
-		"samr_OpenDomain",
-		sizeof(struct samr_OpenDomain),
-		(ndr_push_flags_fn_t) ndr_push_samr_OpenDomain,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_OpenDomain,
-		(ndr_print_function_t) ndr_print_samr_OpenDomain,
-		false,
-	},
-	{
-		"samr_QueryDomainInfo",
-		sizeof(struct samr_QueryDomainInfo),
-		(ndr_push_flags_fn_t) ndr_push_samr_QueryDomainInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_QueryDomainInfo,
-		(ndr_print_function_t) ndr_print_samr_QueryDomainInfo,
-		false,
-	},
-	{
-		"samr_SetDomainInfo",
-		sizeof(struct samr_SetDomainInfo),
-		(ndr_push_flags_fn_t) ndr_push_samr_SetDomainInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_SetDomainInfo,
-		(ndr_print_function_t) ndr_print_samr_SetDomainInfo,
-		false,
-	},
-	{
-		"samr_CreateDomainGroup",
-		sizeof(struct samr_CreateDomainGroup),
-		(ndr_push_flags_fn_t) ndr_push_samr_CreateDomainGroup,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_CreateDomainGroup,
-		(ndr_print_function_t) ndr_print_samr_CreateDomainGroup,
-		false,
-	},
-	{
-		"samr_EnumDomainGroups",
-		sizeof(struct samr_EnumDomainGroups),
-		(ndr_push_flags_fn_t) ndr_push_samr_EnumDomainGroups,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_EnumDomainGroups,
-		(ndr_print_function_t) ndr_print_samr_EnumDomainGroups,
-		false,
-	},
-	{
-		"samr_CreateUser",
-		sizeof(struct samr_CreateUser),
-		(ndr_push_flags_fn_t) ndr_push_samr_CreateUser,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_CreateUser,
-		(ndr_print_function_t) ndr_print_samr_CreateUser,
-		false,
-	},
-	{
-		"samr_EnumDomainUsers",
-		sizeof(struct samr_EnumDomainUsers),
-		(ndr_push_flags_fn_t) ndr_push_samr_EnumDomainUsers,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_EnumDomainUsers,
-		(ndr_print_function_t) ndr_print_samr_EnumDomainUsers,
-		false,
-	},
-	{
-		"samr_CreateDomAlias",
-		sizeof(struct samr_CreateDomAlias),
-		(ndr_push_flags_fn_t) ndr_push_samr_CreateDomAlias,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_CreateDomAlias,
-		(ndr_print_function_t) ndr_print_samr_CreateDomAlias,
-		false,
-	},
-	{
-		"samr_EnumDomainAliases",
-		sizeof(struct samr_EnumDomainAliases),
-		(ndr_push_flags_fn_t) ndr_push_samr_EnumDomainAliases,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_EnumDomainAliases,
-		(ndr_print_function_t) ndr_print_samr_EnumDomainAliases,
-		false,
-	},
-	{
-		"samr_GetAliasMembership",
-		sizeof(struct samr_GetAliasMembership),
-		(ndr_push_flags_fn_t) ndr_push_samr_GetAliasMembership,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_GetAliasMembership,
-		(ndr_print_function_t) ndr_print_samr_GetAliasMembership,
-		false,
-	},
-	{
-		"samr_LookupNames",
-		sizeof(struct samr_LookupNames),
-		(ndr_push_flags_fn_t) ndr_push_samr_LookupNames,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_LookupNames,
-		(ndr_print_function_t) ndr_print_samr_LookupNames,
-		false,
-	},
-	{
-		"samr_LookupRids",
-		sizeof(struct samr_LookupRids),
-		(ndr_push_flags_fn_t) ndr_push_samr_LookupRids,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_LookupRids,
-		(ndr_print_function_t) ndr_print_samr_LookupRids,
-		false,
-	},
-	{
-		"samr_OpenGroup",
-		sizeof(struct samr_OpenGroup),
-		(ndr_push_flags_fn_t) ndr_push_samr_OpenGroup,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_OpenGroup,
-		(ndr_print_function_t) ndr_print_samr_OpenGroup,
-		false,
-	},
-	{
-		"samr_QueryGroupInfo",
-		sizeof(struct samr_QueryGroupInfo),
-		(ndr_push_flags_fn_t) ndr_push_samr_QueryGroupInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_QueryGroupInfo,
-		(ndr_print_function_t) ndr_print_samr_QueryGroupInfo,
-		false,
-	},
-	{
-		"samr_SetGroupInfo",
-		sizeof(struct samr_SetGroupInfo),
-		(ndr_push_flags_fn_t) ndr_push_samr_SetGroupInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_SetGroupInfo,
-		(ndr_print_function_t) ndr_print_samr_SetGroupInfo,
-		false,
-	},
-	{
-		"samr_AddGroupMember",
-		sizeof(struct samr_AddGroupMember),
-		(ndr_push_flags_fn_t) ndr_push_samr_AddGroupMember,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_AddGroupMember,
-		(ndr_print_function_t) ndr_print_samr_AddGroupMember,
-		false,
-	},
-	{
-		"samr_DeleteDomainGroup",
-		sizeof(struct samr_DeleteDomainGroup),
-		(ndr_push_flags_fn_t) ndr_push_samr_DeleteDomainGroup,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_DeleteDomainGroup,
-		(ndr_print_function_t) ndr_print_samr_DeleteDomainGroup,
-		false,
-	},
-	{
-		"samr_DeleteGroupMember",
-		sizeof(struct samr_DeleteGroupMember),
-		(ndr_push_flags_fn_t) ndr_push_samr_DeleteGroupMember,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_DeleteGroupMember,
-		(ndr_print_function_t) ndr_print_samr_DeleteGroupMember,
-		false,
-	},
-	{
-		"samr_QueryGroupMember",
-		sizeof(struct samr_QueryGroupMember),
-		(ndr_push_flags_fn_t) ndr_push_samr_QueryGroupMember,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_QueryGroupMember,
-		(ndr_print_function_t) ndr_print_samr_QueryGroupMember,
-		false,
-	},
-	{
-		"samr_SetMemberAttributesOfGroup",
-		sizeof(struct samr_SetMemberAttributesOfGroup),
-		(ndr_push_flags_fn_t) ndr_push_samr_SetMemberAttributesOfGroup,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_SetMemberAttributesOfGroup,
-		(ndr_print_function_t) ndr_print_samr_SetMemberAttributesOfGroup,
-		false,
-	},
-	{
-		"samr_OpenAlias",
-		sizeof(struct samr_OpenAlias),
-		(ndr_push_flags_fn_t) ndr_push_samr_OpenAlias,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_OpenAlias,
-		(ndr_print_function_t) ndr_print_samr_OpenAlias,
-		false,
-	},
-	{
-		"samr_QueryAliasInfo",
-		sizeof(struct samr_QueryAliasInfo),
-		(ndr_push_flags_fn_t) ndr_push_samr_QueryAliasInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_QueryAliasInfo,
-		(ndr_print_function_t) ndr_print_samr_QueryAliasInfo,
-		false,
-	},
-	{
-		"samr_SetAliasInfo",
-		sizeof(struct samr_SetAliasInfo),
-		(ndr_push_flags_fn_t) ndr_push_samr_SetAliasInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_SetAliasInfo,
-		(ndr_print_function_t) ndr_print_samr_SetAliasInfo,
-		false,
-	},
-	{
-		"samr_DeleteDomAlias",
-		sizeof(struct samr_DeleteDomAlias),
-		(ndr_push_flags_fn_t) ndr_push_samr_DeleteDomAlias,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_DeleteDomAlias,
-		(ndr_print_function_t) ndr_print_samr_DeleteDomAlias,
-		false,
-	},
-	{
-		"samr_AddAliasMember",
-		sizeof(struct samr_AddAliasMember),
-		(ndr_push_flags_fn_t) ndr_push_samr_AddAliasMember,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_AddAliasMember,
-		(ndr_print_function_t) ndr_print_samr_AddAliasMember,
-		false,
-	},
-	{
-		"samr_DeleteAliasMember",
-		sizeof(struct samr_DeleteAliasMember),
-		(ndr_push_flags_fn_t) ndr_push_samr_DeleteAliasMember,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_DeleteAliasMember,
-		(ndr_print_function_t) ndr_print_samr_DeleteAliasMember,
-		false,
-	},
-	{
-		"samr_GetMembersInAlias",
-		sizeof(struct samr_GetMembersInAlias),
-		(ndr_push_flags_fn_t) ndr_push_samr_GetMembersInAlias,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_GetMembersInAlias,
-		(ndr_print_function_t) ndr_print_samr_GetMembersInAlias,
-		false,
-	},
-	{
-		"samr_OpenUser",
-		sizeof(struct samr_OpenUser),
-		(ndr_push_flags_fn_t) ndr_push_samr_OpenUser,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_OpenUser,
-		(ndr_print_function_t) ndr_print_samr_OpenUser,
-		false,
-	},
-	{
-		"samr_DeleteUser",
-		sizeof(struct samr_DeleteUser),
-		(ndr_push_flags_fn_t) ndr_push_samr_DeleteUser,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_DeleteUser,
-		(ndr_print_function_t) ndr_print_samr_DeleteUser,
-		false,
-	},
-	{
-		"samr_QueryUserInfo",
-		sizeof(struct samr_QueryUserInfo),
-		(ndr_push_flags_fn_t) ndr_push_samr_QueryUserInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_QueryUserInfo,
-		(ndr_print_function_t) ndr_print_samr_QueryUserInfo,
-		false,
-	},
-	{
-		"samr_SetUserInfo",
-		sizeof(struct samr_SetUserInfo),
-		(ndr_push_flags_fn_t) ndr_push_samr_SetUserInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_SetUserInfo,
-		(ndr_print_function_t) ndr_print_samr_SetUserInfo,
-		false,
-	},
-	{
-		"samr_ChangePasswordUser",
-		sizeof(struct samr_ChangePasswordUser),
-		(ndr_push_flags_fn_t) ndr_push_samr_ChangePasswordUser,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_ChangePasswordUser,
-		(ndr_print_function_t) ndr_print_samr_ChangePasswordUser,
-		false,
-	},
-	{
-		"samr_GetGroupsForUser",
-		sizeof(struct samr_GetGroupsForUser),
-		(ndr_push_flags_fn_t) ndr_push_samr_GetGroupsForUser,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_GetGroupsForUser,
-		(ndr_print_function_t) ndr_print_samr_GetGroupsForUser,
-		false,
-	},
-	{
-		"samr_QueryDisplayInfo",
-		sizeof(struct samr_QueryDisplayInfo),
-		(ndr_push_flags_fn_t) ndr_push_samr_QueryDisplayInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_QueryDisplayInfo,
-		(ndr_print_function_t) ndr_print_samr_QueryDisplayInfo,
-		false,
-	},
-	{
-		"samr_GetDisplayEnumerationIndex",
-		sizeof(struct samr_GetDisplayEnumerationIndex),
-		(ndr_push_flags_fn_t) ndr_push_samr_GetDisplayEnumerationIndex,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_GetDisplayEnumerationIndex,
-		(ndr_print_function_t) ndr_print_samr_GetDisplayEnumerationIndex,
-		false,
-	},
-	{
-		"samr_TestPrivateFunctionsDomain",
-		sizeof(struct samr_TestPrivateFunctionsDomain),
-		(ndr_push_flags_fn_t) ndr_push_samr_TestPrivateFunctionsDomain,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_TestPrivateFunctionsDomain,
-		(ndr_print_function_t) ndr_print_samr_TestPrivateFunctionsDomain,
-		false,
-	},
-	{
-		"samr_TestPrivateFunctionsUser",
-		sizeof(struct samr_TestPrivateFunctionsUser),
-		(ndr_push_flags_fn_t) ndr_push_samr_TestPrivateFunctionsUser,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_TestPrivateFunctionsUser,
-		(ndr_print_function_t) ndr_print_samr_TestPrivateFunctionsUser,
-		false,
-	},
-	{
-		"samr_GetUserPwInfo",
-		sizeof(struct samr_GetUserPwInfo),
-		(ndr_push_flags_fn_t) ndr_push_samr_GetUserPwInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_GetUserPwInfo,
-		(ndr_print_function_t) ndr_print_samr_GetUserPwInfo,
-		false,
-	},
-	{
-		"samr_RemoveMemberFromForeignDomain",
-		sizeof(struct samr_RemoveMemberFromForeignDomain),
-		(ndr_push_flags_fn_t) ndr_push_samr_RemoveMemberFromForeignDomain,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_RemoveMemberFromForeignDomain,
-		(ndr_print_function_t) ndr_print_samr_RemoveMemberFromForeignDomain,
-		false,
-	},
-	{
-		"samr_QueryDomainInfo2",
-		sizeof(struct samr_QueryDomainInfo2),
-		(ndr_push_flags_fn_t) ndr_push_samr_QueryDomainInfo2,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_QueryDomainInfo2,
-		(ndr_print_function_t) ndr_print_samr_QueryDomainInfo2,
-		false,
-	},
-	{
-		"samr_QueryUserInfo2",
-		sizeof(struct samr_QueryUserInfo2),
-		(ndr_push_flags_fn_t) ndr_push_samr_QueryUserInfo2,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_QueryUserInfo2,
-		(ndr_print_function_t) ndr_print_samr_QueryUserInfo2,
-		false,
-	},
-	{
-		"samr_QueryDisplayInfo2",
-		sizeof(struct samr_QueryDisplayInfo2),
-		(ndr_push_flags_fn_t) ndr_push_samr_QueryDisplayInfo2,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_QueryDisplayInfo2,
-		(ndr_print_function_t) ndr_print_samr_QueryDisplayInfo2,
-		false,
-	},
-	{
-		"samr_GetDisplayEnumerationIndex2",
-		sizeof(struct samr_GetDisplayEnumerationIndex2),
-		(ndr_push_flags_fn_t) ndr_push_samr_GetDisplayEnumerationIndex2,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_GetDisplayEnumerationIndex2,
-		(ndr_print_function_t) ndr_print_samr_GetDisplayEnumerationIndex2,
-		false,
-	},
-	{
-		"samr_CreateUser2",
-		sizeof(struct samr_CreateUser2),
-		(ndr_push_flags_fn_t) ndr_push_samr_CreateUser2,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_CreateUser2,
-		(ndr_print_function_t) ndr_print_samr_CreateUser2,
-		false,
-	},
-	{
-		"samr_QueryDisplayInfo3",
-		sizeof(struct samr_QueryDisplayInfo3),
-		(ndr_push_flags_fn_t) ndr_push_samr_QueryDisplayInfo3,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_QueryDisplayInfo3,
-		(ndr_print_function_t) ndr_print_samr_QueryDisplayInfo3,
-		false,
-	},
-	{
-		"samr_AddMultipleMembersToAlias",
-		sizeof(struct samr_AddMultipleMembersToAlias),
-		(ndr_push_flags_fn_t) ndr_push_samr_AddMultipleMembersToAlias,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_AddMultipleMembersToAlias,
-		(ndr_print_function_t) ndr_print_samr_AddMultipleMembersToAlias,
-		false,
-	},
-	{
-		"samr_RemoveMultipleMembersFromAlias",
-		sizeof(struct samr_RemoveMultipleMembersFromAlias),
-		(ndr_push_flags_fn_t) ndr_push_samr_RemoveMultipleMembersFromAlias,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_RemoveMultipleMembersFromAlias,
-		(ndr_print_function_t) ndr_print_samr_RemoveMultipleMembersFromAlias,
-		false,
-	},
-	{
-		"samr_OemChangePasswordUser2",
-		sizeof(struct samr_OemChangePasswordUser2),
-		(ndr_push_flags_fn_t) ndr_push_samr_OemChangePasswordUser2,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_OemChangePasswordUser2,
-		(ndr_print_function_t) ndr_print_samr_OemChangePasswordUser2,
-		false,
-	},
-	{
-		"samr_ChangePasswordUser2",
-		sizeof(struct samr_ChangePasswordUser2),
-		(ndr_push_flags_fn_t) ndr_push_samr_ChangePasswordUser2,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_ChangePasswordUser2,
-		(ndr_print_function_t) ndr_print_samr_ChangePasswordUser2,
-		false,
-	},
-	{
-		"samr_GetDomPwInfo",
-		sizeof(struct samr_GetDomPwInfo),
-		(ndr_push_flags_fn_t) ndr_push_samr_GetDomPwInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_GetDomPwInfo,
-		(ndr_print_function_t) ndr_print_samr_GetDomPwInfo,
-		false,
-	},
-	{
-		"samr_Connect2",
-		sizeof(struct samr_Connect2),
-		(ndr_push_flags_fn_t) ndr_push_samr_Connect2,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_Connect2,
-		(ndr_print_function_t) ndr_print_samr_Connect2,
-		false,
-	},
-	{
-		"samr_SetUserInfo2",
-		sizeof(struct samr_SetUserInfo2),
-		(ndr_push_flags_fn_t) ndr_push_samr_SetUserInfo2,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_SetUserInfo2,
-		(ndr_print_function_t) ndr_print_samr_SetUserInfo2,
-		false,
-	},
-	{
-		"samr_SetBootKeyInformation",
-		sizeof(struct samr_SetBootKeyInformation),
-		(ndr_push_flags_fn_t) ndr_push_samr_SetBootKeyInformation,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_SetBootKeyInformation,
-		(ndr_print_function_t) ndr_print_samr_SetBootKeyInformation,
-		false,
-	},
-	{
-		"samr_GetBootKeyInformation",
-		sizeof(struct samr_GetBootKeyInformation),
-		(ndr_push_flags_fn_t) ndr_push_samr_GetBootKeyInformation,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_GetBootKeyInformation,
-		(ndr_print_function_t) ndr_print_samr_GetBootKeyInformation,
-		false,
-	},
-	{
-		"samr_Connect3",
-		sizeof(struct samr_Connect3),
-		(ndr_push_flags_fn_t) ndr_push_samr_Connect3,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_Connect3,
-		(ndr_print_function_t) ndr_print_samr_Connect3,
-		false,
-	},
-	{
-		"samr_Connect4",
-		sizeof(struct samr_Connect4),
-		(ndr_push_flags_fn_t) ndr_push_samr_Connect4,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_Connect4,
-		(ndr_print_function_t) ndr_print_samr_Connect4,
-		false,
-	},
-	{
-		"samr_ChangePasswordUser3",
-		sizeof(struct samr_ChangePasswordUser3),
-		(ndr_push_flags_fn_t) ndr_push_samr_ChangePasswordUser3,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_ChangePasswordUser3,
-		(ndr_print_function_t) ndr_print_samr_ChangePasswordUser3,
-		false,
-	},
-	{
-		"samr_Connect5",
-		sizeof(struct samr_Connect5),
-		(ndr_push_flags_fn_t) ndr_push_samr_Connect5,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_Connect5,
-		(ndr_print_function_t) ndr_print_samr_Connect5,
-		false,
-	},
-	{
-		"samr_RidToSid",
-		sizeof(struct samr_RidToSid),
-		(ndr_push_flags_fn_t) ndr_push_samr_RidToSid,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_RidToSid,
-		(ndr_print_function_t) ndr_print_samr_RidToSid,
-		false,
-	},
-	{
-		"samr_SetDsrmPassword",
-		sizeof(struct samr_SetDsrmPassword),
-		(ndr_push_flags_fn_t) ndr_push_samr_SetDsrmPassword,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_SetDsrmPassword,
-		(ndr_print_function_t) ndr_print_samr_SetDsrmPassword,
-		false,
-	},
-	{
-		"samr_ValidatePassword",
-		sizeof(struct samr_ValidatePassword),
-		(ndr_push_flags_fn_t) ndr_push_samr_ValidatePassword,
-		(ndr_pull_flags_fn_t) ndr_pull_samr_ValidatePassword,
-		(ndr_print_function_t) ndr_print_samr_ValidatePassword,
-		false,
-	},
-	{ NULL, 0, NULL, NULL, NULL, false }
-};
-
-static const char * const samr_endpoint_strings[] = {
-	"ncacn_np:[\\pipe\\samr]", 
-	"ncacn_ip_tcp:", 
-	"ncalrpc:", 
-};
-
-static const struct ndr_interface_string_array samr_endpoints = {
-	.count	= 3,
-	.names	= samr_endpoint_strings
-};
-
-static const char * const samr_authservice_strings[] = {
-	"host", 
-};
-
-static const struct ndr_interface_string_array samr_authservices = {
-	.count	= 1,
-	.names	= samr_authservice_strings
-};
-
-
-const struct ndr_interface_table ndr_table_samr = {
-	.name		= "samr",
-	.syntax_id	= {
-		{0x12345778,0x1234,0xabcd,{0xef,0x00},{0x01,0x23,0x45,0x67,0x89,0xac}},
-		NDR_SAMR_VERSION
-	},
-	.helpstring	= NDR_SAMR_HELPSTRING,
-	.num_calls	= 68,
-	.calls		= samr_calls,
-	.endpoints	= &samr_endpoints,
-	.authservices	= &samr_authservices
-};
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_samr.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_samr.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_samr.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,342 +0,0 @@
-/* header auto-generated by pidl */
-
-#include "librpc/ndr/libndr.h"
-#include "librpc/gen_ndr/samr.h"
-
-#ifndef _HEADER_NDR_samr
-#define _HEADER_NDR_samr
-
-#define NDR_SAMR_UUID "12345778-1234-abcd-ef00-0123456789ac"
-#define NDR_SAMR_VERSION 1.0
-#define NDR_SAMR_NAME "samr"
-#define NDR_SAMR_HELPSTRING NULL
-extern const struct ndr_interface_table ndr_table_samr;
-#define NDR_SAMR_CONNECT (0x00)
-
-#define NDR_SAMR_CLOSE (0x01)
-
-#define NDR_SAMR_SETSECURITY (0x02)
-
-#define NDR_SAMR_QUERYSECURITY (0x03)
-
-#define NDR_SAMR_SHUTDOWN (0x04)
-
-#define NDR_SAMR_LOOKUPDOMAIN (0x05)
-
-#define NDR_SAMR_ENUMDOMAINS (0x06)
-
-#define NDR_SAMR_OPENDOMAIN (0x07)
-
-#define NDR_SAMR_QUERYDOMAININFO (0x08)
-
-#define NDR_SAMR_SETDOMAININFO (0x09)
-
-#define NDR_SAMR_CREATEDOMAINGROUP (0x0a)
-
-#define NDR_SAMR_ENUMDOMAINGROUPS (0x0b)
-
-#define NDR_SAMR_CREATEUSER (0x0c)
-
-#define NDR_SAMR_ENUMDOMAINUSERS (0x0d)
-
-#define NDR_SAMR_CREATEDOMALIAS (0x0e)
-
-#define NDR_SAMR_ENUMDOMAINALIASES (0x0f)
-
-#define NDR_SAMR_GETALIASMEMBERSHIP (0x10)
-
-#define NDR_SAMR_LOOKUPNAMES (0x11)
-
-#define NDR_SAMR_LOOKUPRIDS (0x12)
-
-#define NDR_SAMR_OPENGROUP (0x13)
-
-#define NDR_SAMR_QUERYGROUPINFO (0x14)
-
-#define NDR_SAMR_SETGROUPINFO (0x15)
-
-#define NDR_SAMR_ADDGROUPMEMBER (0x16)
-
-#define NDR_SAMR_DELETEDOMAINGROUP (0x17)
-
-#define NDR_SAMR_DELETEGROUPMEMBER (0x18)
-
-#define NDR_SAMR_QUERYGROUPMEMBER (0x19)
-
-#define NDR_SAMR_SETMEMBERATTRIBUTESOFGROUP (0x1a)
-
-#define NDR_SAMR_OPENALIAS (0x1b)
-
-#define NDR_SAMR_QUERYALIASINFO (0x1c)
-
-#define NDR_SAMR_SETALIASINFO (0x1d)
-
-#define NDR_SAMR_DELETEDOMALIAS (0x1e)
-
-#define NDR_SAMR_ADDALIASMEMBER (0x1f)
-
-#define NDR_SAMR_DELETEALIASMEMBER (0x20)
-
-#define NDR_SAMR_GETMEMBERSINALIAS (0x21)
-
-#define NDR_SAMR_OPENUSER (0x22)
-
-#define NDR_SAMR_DELETEUSER (0x23)
-
-#define NDR_SAMR_QUERYUSERINFO (0x24)
-
-#define NDR_SAMR_SETUSERINFO (0x25)
-
-#define NDR_SAMR_CHANGEPASSWORDUSER (0x26)
-
-#define NDR_SAMR_GETGROUPSFORUSER (0x27)
-
-#define NDR_SAMR_QUERYDISPLAYINFO (0x28)
-
-#define NDR_SAMR_GETDISPLAYENUMERATIONINDEX (0x29)
-
-#define NDR_SAMR_TESTPRIVATEFUNCTIONSDOMAIN (0x2a)
-
-#define NDR_SAMR_TESTPRIVATEFUNCTIONSUSER (0x2b)
-
-#define NDR_SAMR_GETUSERPWINFO (0x2c)
-
-#define NDR_SAMR_REMOVEMEMBERFROMFOREIGNDOMAIN (0x2d)
-
-#define NDR_SAMR_QUERYDOMAININFO2 (0x2e)
-
-#define NDR_SAMR_QUERYUSERINFO2 (0x2f)
-
-#define NDR_SAMR_QUERYDISPLAYINFO2 (0x30)
-
-#define NDR_SAMR_GETDISPLAYENUMERATIONINDEX2 (0x31)
-
-#define NDR_SAMR_CREATEUSER2 (0x32)
-
-#define NDR_SAMR_QUERYDISPLAYINFO3 (0x33)
-
-#define NDR_SAMR_ADDMULTIPLEMEMBERSTOALIAS (0x34)
-
-#define NDR_SAMR_REMOVEMULTIPLEMEMBERSFROMALIAS (0x35)
-
-#define NDR_SAMR_OEMCHANGEPASSWORDUSER2 (0x36)
-
-#define NDR_SAMR_CHANGEPASSWORDUSER2 (0x37)
-
-#define NDR_SAMR_GETDOMPWINFO (0x38)
-
-#define NDR_SAMR_CONNECT2 (0x39)
-
-#define NDR_SAMR_SETUSERINFO2 (0x3a)
-
-#define NDR_SAMR_SETBOOTKEYINFORMATION (0x3b)
-
-#define NDR_SAMR_GETBOOTKEYINFORMATION (0x3c)
-
-#define NDR_SAMR_CONNECT3 (0x3d)
-
-#define NDR_SAMR_CONNECT4 (0x3e)
-
-#define NDR_SAMR_CHANGEPASSWORDUSER3 (0x3f)
-
-#define NDR_SAMR_CONNECT5 (0x40)
-
-#define NDR_SAMR_RIDTOSID (0x41)
-
-#define NDR_SAMR_SETDSRMPASSWORD (0x42)
-
-#define NDR_SAMR_VALIDATEPASSWORD (0x43)
-
-#define NDR_SAMR_CALL_COUNT (68)
-enum ndr_err_code ndr_push_samr_AcctFlags(struct ndr_push *ndr, int ndr_flags, uint32_t r);
-enum ndr_err_code ndr_pull_samr_AcctFlags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r);
-void ndr_print_samr_AcctFlags(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_samr_ConnectAccessMask(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_samr_UserAccessMask(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_samr_DomainAccessMask(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_samr_GroupAccessMask(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_samr_AliasAccessMask(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_samr_SamEntry(struct ndr_print *ndr, const char *name, const struct samr_SamEntry *r);
-void ndr_print_samr_SamArray(struct ndr_print *ndr, const char *name, const struct samr_SamArray *r);
-void ndr_print_samr_Role(struct ndr_print *ndr, const char *name, enum samr_Role r);
-enum ndr_err_code ndr_push_samr_PasswordProperties(struct ndr_push *ndr, int ndr_flags, uint32_t r);
-enum ndr_err_code ndr_pull_samr_PasswordProperties(struct ndr_pull *ndr, int ndr_flags, uint32_t *r);
-void ndr_print_samr_PasswordProperties(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_samr_DomInfo1(struct ndr_print *ndr, const char *name, const struct samr_DomInfo1 *r);
-void ndr_print_samr_DomInfo2(struct ndr_print *ndr, const char *name, const struct samr_DomInfo2 *r);
-void ndr_print_samr_DomInfo3(struct ndr_print *ndr, const char *name, const struct samr_DomInfo3 *r);
-void ndr_print_samr_DomInfo4(struct ndr_print *ndr, const char *name, const struct samr_DomInfo4 *r);
-void ndr_print_samr_DomInfo5(struct ndr_print *ndr, const char *name, const struct samr_DomInfo5 *r);
-void ndr_print_samr_DomInfo6(struct ndr_print *ndr, const char *name, const struct samr_DomInfo6 *r);
-void ndr_print_samr_DomInfo7(struct ndr_print *ndr, const char *name, const struct samr_DomInfo7 *r);
-void ndr_print_samr_DomInfo8(struct ndr_print *ndr, const char *name, const struct samr_DomInfo8 *r);
-void ndr_print_samr_DomInfo9(struct ndr_print *ndr, const char *name, const struct samr_DomInfo9 *r);
-void ndr_print_samr_DomInfo11(struct ndr_print *ndr, const char *name, const struct samr_DomInfo11 *r);
-void ndr_print_samr_DomInfo12(struct ndr_print *ndr, const char *name, const struct samr_DomInfo12 *r);
-void ndr_print_samr_DomInfo13(struct ndr_print *ndr, const char *name, const struct samr_DomInfo13 *r);
-void ndr_print_samr_DomainInfo(struct ndr_print *ndr, const char *name, const union samr_DomainInfo *r);
-void ndr_print_samr_Ids(struct ndr_print *ndr, const char *name, const struct samr_Ids *r);
-enum ndr_err_code ndr_push_samr_GroupAttrs(struct ndr_push *ndr, int ndr_flags, uint32_t r);
-enum ndr_err_code ndr_pull_samr_GroupAttrs(struct ndr_pull *ndr, int ndr_flags, uint32_t *r);
-void ndr_print_samr_GroupAttrs(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_samr_GroupInfoAll(struct ndr_print *ndr, const char *name, const struct samr_GroupInfoAll *r);
-void ndr_print_samr_GroupInfoAttributes(struct ndr_print *ndr, const char *name, const struct samr_GroupInfoAttributes *r);
-void ndr_print_samr_GroupInfoEnum(struct ndr_print *ndr, const char *name, enum samr_GroupInfoEnum r);
-void ndr_print_samr_GroupInfo(struct ndr_print *ndr, const char *name, const union samr_GroupInfo *r);
-void ndr_print_samr_RidTypeArray(struct ndr_print *ndr, const char *name, const struct samr_RidTypeArray *r);
-void ndr_print_samr_AliasInfoAll(struct ndr_print *ndr, const char *name, const struct samr_AliasInfoAll *r);
-void ndr_print_samr_AliasInfoEnum(struct ndr_print *ndr, const char *name, enum samr_AliasInfoEnum r);
-void ndr_print_samr_AliasInfo(struct ndr_print *ndr, const char *name, const union samr_AliasInfo *r);
-void ndr_print_samr_UserInfo1(struct ndr_print *ndr, const char *name, const struct samr_UserInfo1 *r);
-void ndr_print_samr_UserInfo2(struct ndr_print *ndr, const char *name, const struct samr_UserInfo2 *r);
-enum ndr_err_code ndr_push_samr_LogonHours(struct ndr_push *ndr, int ndr_flags, const struct samr_LogonHours *r);
-enum ndr_err_code ndr_pull_samr_LogonHours(struct ndr_pull *ndr, int ndr_flags, struct samr_LogonHours *r);
-void ndr_print_samr_LogonHours(struct ndr_print *ndr, const char *name, const struct samr_LogonHours *r);
-void ndr_print_samr_UserInfo3(struct ndr_print *ndr, const char *name, const struct samr_UserInfo3 *r);
-void ndr_print_samr_UserInfo4(struct ndr_print *ndr, const char *name, const struct samr_UserInfo4 *r);
-void ndr_print_samr_UserInfo5(struct ndr_print *ndr, const char *name, const struct samr_UserInfo5 *r);
-void ndr_print_samr_UserInfo6(struct ndr_print *ndr, const char *name, const struct samr_UserInfo6 *r);
-void ndr_print_samr_UserInfo7(struct ndr_print *ndr, const char *name, const struct samr_UserInfo7 *r);
-void ndr_print_samr_UserInfo8(struct ndr_print *ndr, const char *name, const struct samr_UserInfo8 *r);
-void ndr_print_samr_UserInfo9(struct ndr_print *ndr, const char *name, const struct samr_UserInfo9 *r);
-void ndr_print_samr_UserInfo10(struct ndr_print *ndr, const char *name, const struct samr_UserInfo10 *r);
-void ndr_print_samr_UserInfo11(struct ndr_print *ndr, const char *name, const struct samr_UserInfo11 *r);
-void ndr_print_samr_UserInfo12(struct ndr_print *ndr, const char *name, const struct samr_UserInfo12 *r);
-void ndr_print_samr_UserInfo13(struct ndr_print *ndr, const char *name, const struct samr_UserInfo13 *r);
-void ndr_print_samr_UserInfo14(struct ndr_print *ndr, const char *name, const struct samr_UserInfo14 *r);
-void ndr_print_samr_UserInfo16(struct ndr_print *ndr, const char *name, const struct samr_UserInfo16 *r);
-void ndr_print_samr_UserInfo17(struct ndr_print *ndr, const char *name, const struct samr_UserInfo17 *r);
-enum ndr_err_code ndr_push_samr_Password(struct ndr_push *ndr, int ndr_flags, const struct samr_Password *r);
-enum ndr_err_code ndr_pull_samr_Password(struct ndr_pull *ndr, int ndr_flags, struct samr_Password *r);
-void ndr_print_samr_Password(struct ndr_print *ndr, const char *name, const struct samr_Password *r);
-void ndr_print_samr_UserInfo18(struct ndr_print *ndr, const char *name, const struct samr_UserInfo18 *r);
-void ndr_print_samr_UserInfo20(struct ndr_print *ndr, const char *name, const struct samr_UserInfo20 *r);
-void ndr_print_samr_FieldsPresent(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_samr_UserInfo21(struct ndr_print *ndr, const char *name, const struct samr_UserInfo21 *r);
-enum ndr_err_code ndr_push_samr_CryptPassword(struct ndr_push *ndr, int ndr_flags, const struct samr_CryptPassword *r);
-enum ndr_err_code ndr_pull_samr_CryptPassword(struct ndr_pull *ndr, int ndr_flags, struct samr_CryptPassword *r);
-void ndr_print_samr_CryptPassword(struct ndr_print *ndr, const char *name, const struct samr_CryptPassword *r);
-void ndr_print_samr_UserInfo23(struct ndr_print *ndr, const char *name, const struct samr_UserInfo23 *r);
-void ndr_print_samr_UserInfo24(struct ndr_print *ndr, const char *name, const struct samr_UserInfo24 *r);
-void ndr_print_samr_CryptPasswordEx(struct ndr_print *ndr, const char *name, const struct samr_CryptPasswordEx *r);
-void ndr_print_samr_UserInfo25(struct ndr_print *ndr, const char *name, const struct samr_UserInfo25 *r);
-void ndr_print_samr_UserInfo26(struct ndr_print *ndr, const char *name, const struct samr_UserInfo26 *r);
-void ndr_print_samr_UserInfo(struct ndr_print *ndr, const char *name, const union samr_UserInfo *r);
-enum ndr_err_code ndr_push_samr_RidWithAttribute(struct ndr_push *ndr, int ndr_flags, const struct samr_RidWithAttribute *r);
-enum ndr_err_code ndr_pull_samr_RidWithAttribute(struct ndr_pull *ndr, int ndr_flags, struct samr_RidWithAttribute *r);
-void ndr_print_samr_RidWithAttribute(struct ndr_print *ndr, const char *name, const struct samr_RidWithAttribute *r);
-enum ndr_err_code ndr_push_samr_RidWithAttributeArray(struct ndr_push *ndr, int ndr_flags, const struct samr_RidWithAttributeArray *r);
-enum ndr_err_code ndr_pull_samr_RidWithAttributeArray(struct ndr_pull *ndr, int ndr_flags, struct samr_RidWithAttributeArray *r);
-void ndr_print_samr_RidWithAttributeArray(struct ndr_print *ndr, const char *name, const struct samr_RidWithAttributeArray *r);
-void ndr_print_samr_DispEntryGeneral(struct ndr_print *ndr, const char *name, const struct samr_DispEntryGeneral *r);
-void ndr_print_samr_DispInfoGeneral(struct ndr_print *ndr, const char *name, const struct samr_DispInfoGeneral *r);
-void ndr_print_samr_DispEntryFull(struct ndr_print *ndr, const char *name, const struct samr_DispEntryFull *r);
-void ndr_print_samr_DispInfoFull(struct ndr_print *ndr, const char *name, const struct samr_DispInfoFull *r);
-void ndr_print_samr_DispEntryFullGroup(struct ndr_print *ndr, const char *name, const struct samr_DispEntryFullGroup *r);
-void ndr_print_samr_DispInfoFullGroups(struct ndr_print *ndr, const char *name, const struct samr_DispInfoFullGroups *r);
-void ndr_print_samr_DispEntryAscii(struct ndr_print *ndr, const char *name, const struct samr_DispEntryAscii *r);
-void ndr_print_samr_DispInfoAscii(struct ndr_print *ndr, const char *name, const struct samr_DispInfoAscii *r);
-void ndr_print_samr_DispInfo(struct ndr_print *ndr, const char *name, const union samr_DispInfo *r);
-void ndr_print_samr_PwInfo(struct ndr_print *ndr, const char *name, const struct samr_PwInfo *r);
-void ndr_print_samr_ConnectVersion(struct ndr_print *ndr, const char *name, enum samr_ConnectVersion r);
-void ndr_print_samr_ChangeReject(struct ndr_print *ndr, const char *name, const struct samr_ChangeReject *r);
-void ndr_print_samr_ConnectInfo1(struct ndr_print *ndr, const char *name, const struct samr_ConnectInfo1 *r);
-void ndr_print_samr_ConnectInfo(struct ndr_print *ndr, const char *name, const union samr_ConnectInfo *r);
-void ndr_print_samr_ValidateFieldsPresent(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_samr_ValidatePasswordLevel(struct ndr_print *ndr, const char *name, enum samr_ValidatePasswordLevel r);
-void ndr_print_samr_ValidationStatus(struct ndr_print *ndr, const char *name, enum samr_ValidationStatus r);
-void ndr_print_samr_ValidationBlob(struct ndr_print *ndr, const char *name, const struct samr_ValidationBlob *r);
-void ndr_print_samr_ValidatePasswordInfo(struct ndr_print *ndr, const char *name, const struct samr_ValidatePasswordInfo *r);
-void ndr_print_samr_ValidatePasswordRepCtr(struct ndr_print *ndr, const char *name, const struct samr_ValidatePasswordRepCtr *r);
-void ndr_print_samr_ValidatePasswordRep(struct ndr_print *ndr, const char *name, const union samr_ValidatePasswordRep *r);
-void ndr_print_samr_ValidatePasswordReq3(struct ndr_print *ndr, const char *name, const struct samr_ValidatePasswordReq3 *r);
-void ndr_print_samr_ValidatePasswordReq2(struct ndr_print *ndr, const char *name, const struct samr_ValidatePasswordReq2 *r);
-void ndr_print_samr_ValidatePasswordReq1(struct ndr_print *ndr, const char *name, const struct samr_ValidatePasswordReq1 *r);
-void ndr_print_samr_ValidatePasswordReq(struct ndr_print *ndr, const char *name, const union samr_ValidatePasswordReq *r);
-void ndr_print_samr_Connect(struct ndr_print *ndr, const char *name, int flags, const struct samr_Connect *r);
-enum ndr_err_code ndr_push_samr_Close(struct ndr_push *ndr, int flags, const struct samr_Close *r);
-enum ndr_err_code ndr_pull_samr_Close(struct ndr_pull *ndr, int flags, struct samr_Close *r);
-void ndr_print_samr_Close(struct ndr_print *ndr, const char *name, int flags, const struct samr_Close *r);
-void ndr_print_samr_SetSecurity(struct ndr_print *ndr, const char *name, int flags, const struct samr_SetSecurity *r);
-void ndr_print_samr_QuerySecurity(struct ndr_print *ndr, const char *name, int flags, const struct samr_QuerySecurity *r);
-void ndr_print_samr_Shutdown(struct ndr_print *ndr, const char *name, int flags, const struct samr_Shutdown *r);
-void ndr_print_samr_LookupDomain(struct ndr_print *ndr, const char *name, int flags, const struct samr_LookupDomain *r);
-void ndr_print_samr_EnumDomains(struct ndr_print *ndr, const char *name, int flags, const struct samr_EnumDomains *r);
-enum ndr_err_code ndr_push_samr_OpenDomain(struct ndr_push *ndr, int flags, const struct samr_OpenDomain *r);
-enum ndr_err_code ndr_pull_samr_OpenDomain(struct ndr_pull *ndr, int flags, struct samr_OpenDomain *r);
-void ndr_print_samr_OpenDomain(struct ndr_print *ndr, const char *name, int flags, const struct samr_OpenDomain *r);
-void ndr_print_samr_QueryDomainInfo(struct ndr_print *ndr, const char *name, int flags, const struct samr_QueryDomainInfo *r);
-void ndr_print_samr_SetDomainInfo(struct ndr_print *ndr, const char *name, int flags, const struct samr_SetDomainInfo *r);
-void ndr_print_samr_CreateDomainGroup(struct ndr_print *ndr, const char *name, int flags, const struct samr_CreateDomainGroup *r);
-void ndr_print_samr_EnumDomainGroups(struct ndr_print *ndr, const char *name, int flags, const struct samr_EnumDomainGroups *r);
-void ndr_print_samr_CreateUser(struct ndr_print *ndr, const char *name, int flags, const struct samr_CreateUser *r);
-void ndr_print_samr_EnumDomainUsers(struct ndr_print *ndr, const char *name, int flags, const struct samr_EnumDomainUsers *r);
-void ndr_print_samr_CreateDomAlias(struct ndr_print *ndr, const char *name, int flags, const struct samr_CreateDomAlias *r);
-void ndr_print_samr_EnumDomainAliases(struct ndr_print *ndr, const char *name, int flags, const struct samr_EnumDomainAliases *r);
-void ndr_print_samr_GetAliasMembership(struct ndr_print *ndr, const char *name, int flags, const struct samr_GetAliasMembership *r);
-enum ndr_err_code ndr_push_samr_LookupNames(struct ndr_push *ndr, int flags, const struct samr_LookupNames *r);
-enum ndr_err_code ndr_pull_samr_LookupNames(struct ndr_pull *ndr, int flags, struct samr_LookupNames *r);
-void ndr_print_samr_LookupNames(struct ndr_print *ndr, const char *name, int flags, const struct samr_LookupNames *r);
-void ndr_print_samr_LookupRids(struct ndr_print *ndr, const char *name, int flags, const struct samr_LookupRids *r);
-void ndr_print_samr_OpenGroup(struct ndr_print *ndr, const char *name, int flags, const struct samr_OpenGroup *r);
-void ndr_print_samr_QueryGroupInfo(struct ndr_print *ndr, const char *name, int flags, const struct samr_QueryGroupInfo *r);
-void ndr_print_samr_SetGroupInfo(struct ndr_print *ndr, const char *name, int flags, const struct samr_SetGroupInfo *r);
-void ndr_print_samr_AddGroupMember(struct ndr_print *ndr, const char *name, int flags, const struct samr_AddGroupMember *r);
-void ndr_print_samr_DeleteDomainGroup(struct ndr_print *ndr, const char *name, int flags, const struct samr_DeleteDomainGroup *r);
-void ndr_print_samr_DeleteGroupMember(struct ndr_print *ndr, const char *name, int flags, const struct samr_DeleteGroupMember *r);
-void ndr_print_samr_QueryGroupMember(struct ndr_print *ndr, const char *name, int flags, const struct samr_QueryGroupMember *r);
-void ndr_print_samr_SetMemberAttributesOfGroup(struct ndr_print *ndr, const char *name, int flags, const struct samr_SetMemberAttributesOfGroup *r);
-void ndr_print_samr_OpenAlias(struct ndr_print *ndr, const char *name, int flags, const struct samr_OpenAlias *r);
-void ndr_print_samr_QueryAliasInfo(struct ndr_print *ndr, const char *name, int flags, const struct samr_QueryAliasInfo *r);
-void ndr_print_samr_SetAliasInfo(struct ndr_print *ndr, const char *name, int flags, const struct samr_SetAliasInfo *r);
-void ndr_print_samr_DeleteDomAlias(struct ndr_print *ndr, const char *name, int flags, const struct samr_DeleteDomAlias *r);
-void ndr_print_samr_AddAliasMember(struct ndr_print *ndr, const char *name, int flags, const struct samr_AddAliasMember *r);
-void ndr_print_samr_DeleteAliasMember(struct ndr_print *ndr, const char *name, int flags, const struct samr_DeleteAliasMember *r);
-void ndr_print_samr_GetMembersInAlias(struct ndr_print *ndr, const char *name, int flags, const struct samr_GetMembersInAlias *r);
-enum ndr_err_code ndr_push_samr_OpenUser(struct ndr_push *ndr, int flags, const struct samr_OpenUser *r);
-enum ndr_err_code ndr_pull_samr_OpenUser(struct ndr_pull *ndr, int flags, struct samr_OpenUser *r);
-void ndr_print_samr_OpenUser(struct ndr_print *ndr, const char *name, int flags, const struct samr_OpenUser *r);
-void ndr_print_samr_DeleteUser(struct ndr_print *ndr, const char *name, int flags, const struct samr_DeleteUser *r);
-enum ndr_err_code ndr_push_samr_QueryUserInfo(struct ndr_push *ndr, int flags, const struct samr_QueryUserInfo *r);
-enum ndr_err_code ndr_pull_samr_QueryUserInfo(struct ndr_pull *ndr, int flags, struct samr_QueryUserInfo *r);
-void ndr_print_samr_QueryUserInfo(struct ndr_print *ndr, const char *name, int flags, const struct samr_QueryUserInfo *r);
-enum ndr_err_code ndr_push_samr_SetUserInfo(struct ndr_push *ndr, int flags, const struct samr_SetUserInfo *r);
-enum ndr_err_code ndr_pull_samr_SetUserInfo(struct ndr_pull *ndr, int flags, struct samr_SetUserInfo *r);
-void ndr_print_samr_SetUserInfo(struct ndr_print *ndr, const char *name, int flags, const struct samr_SetUserInfo *r);
-void ndr_print_samr_ChangePasswordUser(struct ndr_print *ndr, const char *name, int flags, const struct samr_ChangePasswordUser *r);
-void ndr_print_samr_GetGroupsForUser(struct ndr_print *ndr, const char *name, int flags, const struct samr_GetGroupsForUser *r);
-void ndr_print_samr_QueryDisplayInfo(struct ndr_print *ndr, const char *name, int flags, const struct samr_QueryDisplayInfo *r);
-void ndr_print_samr_GetDisplayEnumerationIndex(struct ndr_print *ndr, const char *name, int flags, const struct samr_GetDisplayEnumerationIndex *r);
-void ndr_print_samr_TestPrivateFunctionsDomain(struct ndr_print *ndr, const char *name, int flags, const struct samr_TestPrivateFunctionsDomain *r);
-void ndr_print_samr_TestPrivateFunctionsUser(struct ndr_print *ndr, const char *name, int flags, const struct samr_TestPrivateFunctionsUser *r);
-enum ndr_err_code ndr_push_samr_GetUserPwInfo(struct ndr_push *ndr, int flags, const struct samr_GetUserPwInfo *r);
-enum ndr_err_code ndr_pull_samr_GetUserPwInfo(struct ndr_pull *ndr, int flags, struct samr_GetUserPwInfo *r);
-void ndr_print_samr_GetUserPwInfo(struct ndr_print *ndr, const char *name, int flags, const struct samr_GetUserPwInfo *r);
-void ndr_print_samr_RemoveMemberFromForeignDomain(struct ndr_print *ndr, const char *name, int flags, const struct samr_RemoveMemberFromForeignDomain *r);
-void ndr_print_samr_QueryDomainInfo2(struct ndr_print *ndr, const char *name, int flags, const struct samr_QueryDomainInfo2 *r);
-void ndr_print_samr_QueryUserInfo2(struct ndr_print *ndr, const char *name, int flags, const struct samr_QueryUserInfo2 *r);
-void ndr_print_samr_QueryDisplayInfo2(struct ndr_print *ndr, const char *name, int flags, const struct samr_QueryDisplayInfo2 *r);
-void ndr_print_samr_GetDisplayEnumerationIndex2(struct ndr_print *ndr, const char *name, int flags, const struct samr_GetDisplayEnumerationIndex2 *r);
-void ndr_print_samr_CreateUser2(struct ndr_print *ndr, const char *name, int flags, const struct samr_CreateUser2 *r);
-void ndr_print_samr_QueryDisplayInfo3(struct ndr_print *ndr, const char *name, int flags, const struct samr_QueryDisplayInfo3 *r);
-void ndr_print_samr_AddMultipleMembersToAlias(struct ndr_print *ndr, const char *name, int flags, const struct samr_AddMultipleMembersToAlias *r);
-void ndr_print_samr_RemoveMultipleMembersFromAlias(struct ndr_print *ndr, const char *name, int flags, const struct samr_RemoveMultipleMembersFromAlias *r);
-void ndr_print_samr_OemChangePasswordUser2(struct ndr_print *ndr, const char *name, int flags, const struct samr_OemChangePasswordUser2 *r);
-void ndr_print_samr_ChangePasswordUser2(struct ndr_print *ndr, const char *name, int flags, const struct samr_ChangePasswordUser2 *r);
-void ndr_print_samr_GetDomPwInfo(struct ndr_print *ndr, const char *name, int flags, const struct samr_GetDomPwInfo *r);
-void ndr_print_samr_Connect2(struct ndr_print *ndr, const char *name, int flags, const struct samr_Connect2 *r);
-enum ndr_err_code ndr_push_samr_SetUserInfo2(struct ndr_push *ndr, int flags, const struct samr_SetUserInfo2 *r);
-enum ndr_err_code ndr_pull_samr_SetUserInfo2(struct ndr_pull *ndr, int flags, struct samr_SetUserInfo2 *r);
-void ndr_print_samr_SetUserInfo2(struct ndr_print *ndr, const char *name, int flags, const struct samr_SetUserInfo2 *r);
-void ndr_print_samr_SetBootKeyInformation(struct ndr_print *ndr, const char *name, int flags, const struct samr_SetBootKeyInformation *r);
-void ndr_print_samr_GetBootKeyInformation(struct ndr_print *ndr, const char *name, int flags, const struct samr_GetBootKeyInformation *r);
-void ndr_print_samr_Connect3(struct ndr_print *ndr, const char *name, int flags, const struct samr_Connect3 *r);
-void ndr_print_samr_Connect4(struct ndr_print *ndr, const char *name, int flags, const struct samr_Connect4 *r);
-void ndr_print_samr_ChangePasswordUser3(struct ndr_print *ndr, const char *name, int flags, const struct samr_ChangePasswordUser3 *r);
-enum ndr_err_code ndr_push_samr_Connect5(struct ndr_push *ndr, int flags, const struct samr_Connect5 *r);
-enum ndr_err_code ndr_pull_samr_Connect5(struct ndr_pull *ndr, int flags, struct samr_Connect5 *r);
-void ndr_print_samr_Connect5(struct ndr_print *ndr, const char *name, int flags, const struct samr_Connect5 *r);
-void ndr_print_samr_RidToSid(struct ndr_print *ndr, const char *name, int flags, const struct samr_RidToSid *r);
-void ndr_print_samr_SetDsrmPassword(struct ndr_print *ndr, const char *name, int flags, const struct samr_SetDsrmPassword *r);
-void ndr_print_samr_ValidatePassword(struct ndr_print *ndr, const char *name, int flags, const struct samr_ValidatePassword *r);
-#endif /* _HEADER_NDR_samr */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_security.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_security.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_security.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,1026 +0,0 @@
-/* parser auto-generated by pidl */
-
-#include "includes.h"
-#include "librpc/gen_ndr/ndr_security.h"
-
-#include "librpc/gen_ndr/ndr_misc.h"
-static enum ndr_err_code ndr_push_security_ace_flags(struct ndr_push *ndr, int ndr_flags, uint8_t r)
-{
-	NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_security_ace_flags(struct ndr_pull *ndr, int ndr_flags, uint8_t *r)
-{
-	uint8_t v;
-	NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_security_ace_flags(struct ndr_print *ndr, const char *name, uint8_t r)
-{
-	ndr_print_uint8(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SEC_ACE_FLAG_OBJECT_INHERIT", SEC_ACE_FLAG_OBJECT_INHERIT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SEC_ACE_FLAG_CONTAINER_INHERIT", SEC_ACE_FLAG_CONTAINER_INHERIT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SEC_ACE_FLAG_NO_PROPAGATE_INHERIT", SEC_ACE_FLAG_NO_PROPAGATE_INHERIT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SEC_ACE_FLAG_INHERIT_ONLY", SEC_ACE_FLAG_INHERIT_ONLY, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SEC_ACE_FLAG_INHERITED_ACE", SEC_ACE_FLAG_INHERITED_ACE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SEC_ACE_FLAG_VALID_INHERIT", SEC_ACE_FLAG_VALID_INHERIT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SEC_ACE_FLAG_SUCCESSFUL_ACCESS", SEC_ACE_FLAG_SUCCESSFUL_ACCESS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SEC_ACE_FLAG_FAILED_ACCESS", SEC_ACE_FLAG_FAILED_ACCESS, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_security_ace_type(struct ndr_push *ndr, int ndr_flags, enum security_ace_type r)
-{
-	NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_security_ace_type(struct ndr_pull *ndr, int ndr_flags, enum security_ace_type *r)
-{
-	uint8_t v;
-	NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_security_ace_type(struct ndr_print *ndr, const char *name, enum security_ace_type r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case SEC_ACE_TYPE_ACCESS_ALLOWED: val = "SEC_ACE_TYPE_ACCESS_ALLOWED"; break;
-		case SEC_ACE_TYPE_ACCESS_DENIED: val = "SEC_ACE_TYPE_ACCESS_DENIED"; break;
-		case SEC_ACE_TYPE_SYSTEM_AUDIT: val = "SEC_ACE_TYPE_SYSTEM_AUDIT"; break;
-		case SEC_ACE_TYPE_SYSTEM_ALARM: val = "SEC_ACE_TYPE_SYSTEM_ALARM"; break;
-		case SEC_ACE_TYPE_ALLOWED_COMPOUND: val = "SEC_ACE_TYPE_ALLOWED_COMPOUND"; break;
-		case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT: val = "SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT"; break;
-		case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT: val = "SEC_ACE_TYPE_ACCESS_DENIED_OBJECT"; break;
-		case SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT: val = "SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT"; break;
-		case SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT: val = "SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_security_ace_object_flags(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_security_ace_object_flags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_security_ace_object_flags(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SEC_ACE_OBJECT_TYPE_PRESENT", SEC_ACE_OBJECT_TYPE_PRESENT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT", SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_security_ace_object_type(struct ndr_push *ndr, int ndr_flags, const union security_ace_object_type *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case SEC_ACE_OBJECT_TYPE_PRESENT: {
-				NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->type));
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case SEC_ACE_OBJECT_TYPE_PRESENT:
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_security_ace_object_type(struct ndr_pull *ndr, int ndr_flags, union security_ace_object_type *r)
-{
-	int level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		switch (level) {
-			case SEC_ACE_OBJECT_TYPE_PRESENT: {
-				NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->type));
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case SEC_ACE_OBJECT_TYPE_PRESENT:
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_security_ace_object_type(struct ndr_print *ndr, const char *name, const union security_ace_object_type *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "security_ace_object_type");
-	switch (level) {
-		case SEC_ACE_OBJECT_TYPE_PRESENT:
-			ndr_print_GUID(ndr, "type", &r->type);
-		break;
-
-		default:
-		break;
-
-	}
-}
-
-static enum ndr_err_code ndr_push_security_ace_object_inherited_type(struct ndr_push *ndr, int ndr_flags, const union security_ace_object_inherited_type *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT: {
-				NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->inherited_type));
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT:
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_security_ace_object_inherited_type(struct ndr_pull *ndr, int ndr_flags, union security_ace_object_inherited_type *r)
-{
-	int level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		switch (level) {
-			case SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT: {
-				NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->inherited_type));
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT:
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_security_ace_object_inherited_type(struct ndr_print *ndr, const char *name, const union security_ace_object_inherited_type *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "security_ace_object_inherited_type");
-	switch (level) {
-		case SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT:
-			ndr_print_GUID(ndr, "inherited_type", &r->inherited_type);
-		break;
-
-		default:
-		break;
-
-	}
-}
-
-static enum ndr_err_code ndr_push_security_ace_object(struct ndr_push *ndr, int ndr_flags, const struct security_ace_object *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_security_ace_object_flags(ndr, NDR_SCALARS, r->flags));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->type, r->flags & SEC_ACE_OBJECT_TYPE_PRESENT));
-		NDR_CHECK(ndr_push_security_ace_object_type(ndr, NDR_SCALARS, &r->type));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->inherited_type, r->flags & SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT));
-		NDR_CHECK(ndr_push_security_ace_object_inherited_type(ndr, NDR_SCALARS, &r->inherited_type));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_security_ace_object_type(ndr, NDR_BUFFERS, &r->type));
-		NDR_CHECK(ndr_push_security_ace_object_inherited_type(ndr, NDR_BUFFERS, &r->inherited_type));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_security_ace_object(struct ndr_pull *ndr, int ndr_flags, struct security_ace_object *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_security_ace_object_flags(ndr, NDR_SCALARS, &r->flags));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->type, r->flags & SEC_ACE_OBJECT_TYPE_PRESENT));
-		NDR_CHECK(ndr_pull_security_ace_object_type(ndr, NDR_SCALARS, &r->type));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->inherited_type, r->flags & SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT));
-		NDR_CHECK(ndr_pull_security_ace_object_inherited_type(ndr, NDR_SCALARS, &r->inherited_type));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_security_ace_object_type(ndr, NDR_BUFFERS, &r->type));
-		NDR_CHECK(ndr_pull_security_ace_object_inherited_type(ndr, NDR_BUFFERS, &r->inherited_type));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_security_ace_object(struct ndr_print *ndr, const char *name, const struct security_ace_object *r)
-{
-	ndr_print_struct(ndr, name, "security_ace_object");
-	ndr->depth++;
-	ndr_print_security_ace_object_flags(ndr, "flags", r->flags);
-	ndr_print_set_switch_value(ndr, &r->type, r->flags & SEC_ACE_OBJECT_TYPE_PRESENT);
-	ndr_print_security_ace_object_type(ndr, "type", &r->type);
-	ndr_print_set_switch_value(ndr, &r->inherited_type, r->flags & SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT);
-	ndr_print_security_ace_object_inherited_type(ndr, "inherited_type", &r->inherited_type);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_security_ace_object_ctr(struct ndr_push *ndr, int ndr_flags, const union security_ace_object_ctr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT: {
-				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_SCALARS, &r->object));
-			break; }
-
-			case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT: {
-				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_SCALARS, &r->object));
-			break; }
-
-			case SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT: {
-				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_SCALARS, &r->object));
-			break; }
-
-			case SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT: {
-				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_SCALARS, &r->object));
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT:
-				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_BUFFERS, &r->object));
-			break;
-
-			case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT:
-				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_BUFFERS, &r->object));
-			break;
-
-			case SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT:
-				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_BUFFERS, &r->object));
-			break;
-
-			case SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT:
-				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_BUFFERS, &r->object));
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_security_ace_object_ctr(struct ndr_pull *ndr, int ndr_flags, union security_ace_object_ctr *r)
-{
-	int level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		switch (level) {
-			case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT: {
-				NDR_CHECK(ndr_pull_security_ace_object(ndr, NDR_SCALARS, &r->object));
-			break; }
-
-			case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT: {
-				NDR_CHECK(ndr_pull_security_ace_object(ndr, NDR_SCALARS, &r->object));
-			break; }
-
-			case SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT: {
-				NDR_CHECK(ndr_pull_security_ace_object(ndr, NDR_SCALARS, &r->object));
-			break; }
-
-			case SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT: {
-				NDR_CHECK(ndr_pull_security_ace_object(ndr, NDR_SCALARS, &r->object));
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT:
-				NDR_CHECK(ndr_pull_security_ace_object(ndr, NDR_BUFFERS, &r->object));
-			break;
-
-			case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT:
-				NDR_CHECK(ndr_pull_security_ace_object(ndr, NDR_BUFFERS, &r->object));
-			break;
-
-			case SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT:
-				NDR_CHECK(ndr_pull_security_ace_object(ndr, NDR_BUFFERS, &r->object));
-			break;
-
-			case SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT:
-				NDR_CHECK(ndr_pull_security_ace_object(ndr, NDR_BUFFERS, &r->object));
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_security_ace_object_ctr(struct ndr_print *ndr, const char *name, const union security_ace_object_ctr *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "security_ace_object_ctr");
-	switch (level) {
-		case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT:
-			ndr_print_security_ace_object(ndr, "object", &r->object);
-		break;
-
-		case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT:
-			ndr_print_security_ace_object(ndr, "object", &r->object);
-		break;
-
-		case SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT:
-			ndr_print_security_ace_object(ndr, "object", &r->object);
-		break;
-
-		case SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT:
-			ndr_print_security_ace_object(ndr, "object", &r->object);
-		break;
-
-		default:
-		break;
-
-	}
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_security_ace(struct ndr_push *ndr, int ndr_flags, const struct security_ace *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_security_ace_type(ndr, NDR_SCALARS, r->type));
-		NDR_CHECK(ndr_push_security_ace_flags(ndr, NDR_SCALARS, r->flags));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_size_security_ace(r, ndr->flags)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->access_mask));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->object, r->type));
-		NDR_CHECK(ndr_push_security_ace_object_ctr(ndr, NDR_SCALARS, &r->object));
-		NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS, &r->trustee));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_security_ace_object_ctr(ndr, NDR_BUFFERS, &r->object));
-		NDR_CHECK(ndr_push_dom_sid(ndr, NDR_BUFFERS, &r->trustee));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_security_ace(struct ndr_pull *ndr, int ndr_flags, struct security_ace *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_security_ace_type(ndr, NDR_SCALARS, &r->type));
-		NDR_CHECK(ndr_pull_security_ace_flags(ndr, NDR_SCALARS, &r->flags));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->access_mask));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->object, r->type));
-		NDR_CHECK(ndr_pull_security_ace_object_ctr(ndr, NDR_SCALARS, &r->object));
-		NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_SCALARS, &r->trustee));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_security_ace_object_ctr(ndr, NDR_BUFFERS, &r->object));
-		NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_BUFFERS, &r->trustee));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_security_ace(struct ndr_print *ndr, const char *name, const struct security_ace *r)
-{
-	ndr_print_struct(ndr, name, "security_ace");
-	ndr->depth++;
-	ndr_print_security_ace_type(ndr, "type", r->type);
-	ndr_print_security_ace_flags(ndr, "flags", r->flags);
-	ndr_print_uint16(ndr, "size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_security_ace(r, ndr->flags):r->size);
-	ndr_print_uint32(ndr, "access_mask", r->access_mask);
-	ndr_print_set_switch_value(ndr, &r->object, r->type);
-	ndr_print_security_ace_object_ctr(ndr, "object", &r->object);
-	ndr_print_dom_sid(ndr, "trustee", &r->trustee);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_security_acl_revision(struct ndr_push *ndr, int ndr_flags, enum security_acl_revision r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_security_acl_revision(struct ndr_pull *ndr, int ndr_flags, enum security_acl_revision *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_security_acl_revision(struct ndr_print *ndr, const char *name, enum security_acl_revision r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case SECURITY_ACL_REVISION_NT4: val = "SECURITY_ACL_REVISION_NT4"; break;
-		case SECURITY_ACL_REVISION_ADS: val = "SECURITY_ACL_REVISION_ADS"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_security_acl(struct ndr_push *ndr, int ndr_flags, const struct security_acl *r)
-{
-	uint32_t cntr_aces_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_security_acl_revision(ndr, NDR_SCALARS, r->revision));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_size_security_acl(r, ndr->flags)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_aces));
-		for (cntr_aces_0 = 0; cntr_aces_0 < r->num_aces; cntr_aces_0++) {
-			NDR_CHECK(ndr_push_security_ace(ndr, NDR_SCALARS, &r->aces[cntr_aces_0]));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		for (cntr_aces_0 = 0; cntr_aces_0 < r->num_aces; cntr_aces_0++) {
-			NDR_CHECK(ndr_push_security_ace(ndr, NDR_BUFFERS, &r->aces[cntr_aces_0]));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_security_acl(struct ndr_pull *ndr, int ndr_flags, struct security_acl *r)
-{
-	uint32_t cntr_aces_0;
-	TALLOC_CTX *_mem_save_aces_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_security_acl_revision(ndr, NDR_SCALARS, &r->revision));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_aces));
-		if (r->num_aces < 0 || r->num_aces > 1000) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_PULL_ALLOC_N(ndr, r->aces, r->num_aces);
-		_mem_save_aces_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->aces, 0);
-		for (cntr_aces_0 = 0; cntr_aces_0 < r->num_aces; cntr_aces_0++) {
-			NDR_CHECK(ndr_pull_security_ace(ndr, NDR_SCALARS, &r->aces[cntr_aces_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_aces_0, 0);
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		_mem_save_aces_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->aces, 0);
-		for (cntr_aces_0 = 0; cntr_aces_0 < r->num_aces; cntr_aces_0++) {
-			NDR_CHECK(ndr_pull_security_ace(ndr, NDR_BUFFERS, &r->aces[cntr_aces_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_aces_0, 0);
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_security_acl(struct ndr_print *ndr, const char *name, const struct security_acl *r)
-{
-	uint32_t cntr_aces_0;
-	ndr_print_struct(ndr, name, "security_acl");
-	ndr->depth++;
-	ndr_print_security_acl_revision(ndr, "revision", r->revision);
-	ndr_print_uint16(ndr, "size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_security_acl(r, ndr->flags):r->size);
-	ndr_print_uint32(ndr, "num_aces", r->num_aces);
-	ndr->print(ndr, "%s: ARRAY(%d)", "aces", r->num_aces);
-	ndr->depth++;
-	for (cntr_aces_0=0;cntr_aces_0<r->num_aces;cntr_aces_0++) {
-		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_aces_0) != -1) {
-			ndr_print_security_ace(ndr, "aces", &r->aces[cntr_aces_0]);
-			free(idx_0);
-		}
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_security_descriptor_revision(struct ndr_push *ndr, int ndr_flags, enum security_descriptor_revision r)
-{
-	NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_security_descriptor_revision(struct ndr_pull *ndr, int ndr_flags, enum security_descriptor_revision *r)
-{
-	uint8_t v;
-	NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_security_descriptor_revision(struct ndr_print *ndr, const char *name, enum security_descriptor_revision r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case SECURITY_DESCRIPTOR_REVISION_1: val = "SECURITY_DESCRIPTOR_REVISION_1"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_security_descriptor_type(struct ndr_push *ndr, int ndr_flags, uint16_t r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_security_descriptor_type(struct ndr_pull *ndr, int ndr_flags, uint16_t *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_security_descriptor_type(struct ndr_print *ndr, const char *name, uint16_t r)
-{
-	ndr_print_uint16(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_OWNER_DEFAULTED", SEC_DESC_OWNER_DEFAULTED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_GROUP_DEFAULTED", SEC_DESC_GROUP_DEFAULTED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_DACL_PRESENT", SEC_DESC_DACL_PRESENT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_DACL_DEFAULTED", SEC_DESC_DACL_DEFAULTED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_SACL_PRESENT", SEC_DESC_SACL_PRESENT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_SACL_DEFAULTED", SEC_DESC_SACL_DEFAULTED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_DACL_TRUSTED", SEC_DESC_DACL_TRUSTED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_SERVER_SECURITY", SEC_DESC_SERVER_SECURITY, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_DACL_AUTO_INHERIT_REQ", SEC_DESC_DACL_AUTO_INHERIT_REQ, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_SACL_AUTO_INHERIT_REQ", SEC_DESC_SACL_AUTO_INHERIT_REQ, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_DACL_AUTO_INHERITED", SEC_DESC_DACL_AUTO_INHERITED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_SACL_AUTO_INHERITED", SEC_DESC_SACL_AUTO_INHERITED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_DACL_PROTECTED", SEC_DESC_DACL_PROTECTED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_SACL_PROTECTED", SEC_DESC_SACL_PROTECTED, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_RM_CONTROL_VALID", SEC_DESC_RM_CONTROL_VALID, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_SELF_RELATIVE", SEC_DESC_SELF_RELATIVE, r);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_security_descriptor(struct ndr_push *ndr, int ndr_flags, const struct security_descriptor *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 4));
-			NDR_CHECK(ndr_push_security_descriptor_revision(ndr, NDR_SCALARS, r->revision));
-			NDR_CHECK(ndr_push_security_descriptor_type(ndr, NDR_SCALARS, r->type));
-			NDR_CHECK(ndr_push_relative_ptr1(ndr, r->owner_sid));
-			NDR_CHECK(ndr_push_relative_ptr1(ndr, r->group_sid));
-			NDR_CHECK(ndr_push_relative_ptr1(ndr, r->sacl));
-			NDR_CHECK(ndr_push_relative_ptr1(ndr, r->dacl));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-			if (r->owner_sid) {
-				NDR_CHECK(ndr_push_relative_ptr2(ndr, r->owner_sid));
-				NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS|NDR_BUFFERS, r->owner_sid));
-			}
-			if (r->group_sid) {
-				NDR_CHECK(ndr_push_relative_ptr2(ndr, r->group_sid));
-				NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS|NDR_BUFFERS, r->group_sid));
-			}
-			if (r->sacl) {
-				NDR_CHECK(ndr_push_relative_ptr2(ndr, r->sacl));
-				NDR_CHECK(ndr_push_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->sacl));
-			}
-			if (r->dacl) {
-				NDR_CHECK(ndr_push_relative_ptr2(ndr, r->dacl));
-				NDR_CHECK(ndr_push_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->dacl));
-			}
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_security_descriptor(struct ndr_pull *ndr, int ndr_flags, struct security_descriptor *r)
-{
-	uint32_t _ptr_owner_sid;
-	TALLOC_CTX *_mem_save_owner_sid_0;
-	uint32_t _ptr_group_sid;
-	TALLOC_CTX *_mem_save_group_sid_0;
-	uint32_t _ptr_sacl;
-	TALLOC_CTX *_mem_save_sacl_0;
-	uint32_t _ptr_dacl;
-	TALLOC_CTX *_mem_save_dacl_0;
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 4));
-			NDR_CHECK(ndr_pull_security_descriptor_revision(ndr, NDR_SCALARS, &r->revision));
-			NDR_CHECK(ndr_pull_security_descriptor_type(ndr, NDR_SCALARS, &r->type));
-			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_owner_sid));
-			if (_ptr_owner_sid) {
-				NDR_PULL_ALLOC(ndr, r->owner_sid);
-				NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->owner_sid, _ptr_owner_sid));
-			} else {
-				r->owner_sid = NULL;
-			}
-			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_group_sid));
-			if (_ptr_group_sid) {
-				NDR_PULL_ALLOC(ndr, r->group_sid);
-				NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->group_sid, _ptr_group_sid));
-			} else {
-				r->group_sid = NULL;
-			}
-			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sacl));
-			if (_ptr_sacl) {
-				NDR_PULL_ALLOC(ndr, r->sacl);
-				NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->sacl, _ptr_sacl));
-			} else {
-				r->sacl = NULL;
-			}
-			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dacl));
-			if (_ptr_dacl) {
-				NDR_PULL_ALLOC(ndr, r->dacl);
-				NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->dacl, _ptr_dacl));
-			} else {
-				r->dacl = NULL;
-			}
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-			if (r->owner_sid) {
-				uint32_t _relative_save_offset;
-				_relative_save_offset = ndr->offset;
-				NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->owner_sid));
-				_mem_save_owner_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-				NDR_PULL_SET_MEM_CTX(ndr, r->owner_sid, 0);
-				NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_SCALARS|NDR_BUFFERS, r->owner_sid));
-				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_owner_sid_0, 0);
-				ndr->offset = _relative_save_offset;
-			}
-			if (r->group_sid) {
-				uint32_t _relative_save_offset;
-				_relative_save_offset = ndr->offset;
-				NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->group_sid));
-				_mem_save_group_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-				NDR_PULL_SET_MEM_CTX(ndr, r->group_sid, 0);
-				NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_SCALARS|NDR_BUFFERS, r->group_sid));
-				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_group_sid_0, 0);
-				ndr->offset = _relative_save_offset;
-			}
-			if (r->sacl) {
-				uint32_t _relative_save_offset;
-				_relative_save_offset = ndr->offset;
-				NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->sacl));
-				_mem_save_sacl_0 = NDR_PULL_GET_MEM_CTX(ndr);
-				NDR_PULL_SET_MEM_CTX(ndr, r->sacl, 0);
-				NDR_CHECK(ndr_pull_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->sacl));
-				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sacl_0, 0);
-				ndr->offset = _relative_save_offset;
-			}
-			if (r->dacl) {
-				uint32_t _relative_save_offset;
-				_relative_save_offset = ndr->offset;
-				NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->dacl));
-				_mem_save_dacl_0 = NDR_PULL_GET_MEM_CTX(ndr);
-				NDR_PULL_SET_MEM_CTX(ndr, r->dacl, 0);
-				NDR_CHECK(ndr_pull_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->dacl));
-				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dacl_0, 0);
-				ndr->offset = _relative_save_offset;
-			}
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_security_descriptor(struct ndr_print *ndr, const char *name, const struct security_descriptor *r)
-{
-	ndr_print_struct(ndr, name, "security_descriptor");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN);
-		ndr->depth++;
-		ndr_print_security_descriptor_revision(ndr, "revision", r->revision);
-		ndr_print_security_descriptor_type(ndr, "type", r->type);
-		ndr_print_ptr(ndr, "owner_sid", r->owner_sid);
-		ndr->depth++;
-		if (r->owner_sid) {
-			ndr_print_dom_sid(ndr, "owner_sid", r->owner_sid);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "group_sid", r->group_sid);
-		ndr->depth++;
-		if (r->group_sid) {
-			ndr_print_dom_sid(ndr, "group_sid", r->group_sid);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sacl", r->sacl);
-		ndr->depth++;
-		if (r->sacl) {
-			ndr_print_security_acl(ndr, "sacl", r->sacl);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "dacl", r->dacl);
-		ndr->depth++;
-		if (r->dacl) {
-			ndr_print_security_acl(ndr, "dacl", r->dacl);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_sec_desc_buf(struct ndr_push *ndr, int ndr_flags, const struct sec_desc_buf *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_size_security_descriptor(r->sd, ndr->flags)));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sd));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->sd) {
-			{
-				struct ndr_push *_ndr_sd;
-				NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_sd, 4, -1));
-				NDR_CHECK(ndr_push_security_descriptor(_ndr_sd, NDR_SCALARS|NDR_BUFFERS, r->sd));
-				NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_sd, 4, -1));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_sec_desc_buf(struct ndr_pull *ndr, int ndr_flags, struct sec_desc_buf *r)
-{
-	uint32_t _ptr_sd;
-	TALLOC_CTX *_mem_save_sd_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sd_size));
-		if (r->sd_size < 0 || r->sd_size > 0x40000) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sd));
-		if (_ptr_sd) {
-			NDR_PULL_ALLOC(ndr, r->sd);
-		} else {
-			r->sd = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->sd) {
-			_mem_save_sd_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->sd, 0);
-			{
-				struct ndr_pull *_ndr_sd;
-				NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_sd, 4, -1));
-				NDR_CHECK(ndr_pull_security_descriptor(_ndr_sd, NDR_SCALARS|NDR_BUFFERS, r->sd));
-				NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_sd, 4, -1));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sd_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_sec_desc_buf(struct ndr_print *ndr, const char *name, const struct sec_desc_buf *r)
-{
-	ndr_print_struct(ndr, name, "sec_desc_buf");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "sd_size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_security_descriptor(r->sd, ndr->flags):r->sd_size);
-	ndr_print_ptr(ndr, "sd", r->sd);
-	ndr->depth++;
-	if (r->sd) {
-		ndr_print_security_descriptor(ndr, "sd", r->sd);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_security_token(struct ndr_push *ndr, int ndr_flags, const struct security_token *r)
-{
-	uint32_t cntr_sids_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->user_sid));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->group_sid));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_sids));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_sids));
-		for (cntr_sids_0 = 0; cntr_sids_0 < r->num_sids; cntr_sids_0++) {
-			NDR_CHECK(ndr_push_unique_ptr(ndr, r->sids[cntr_sids_0]));
-		}
-		NDR_CHECK(ndr_push_udlong(ndr, NDR_SCALARS, r->privilege_mask));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->user_sid) {
-			NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS|NDR_BUFFERS, r->user_sid));
-		}
-		if (r->group_sid) {
-			NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS|NDR_BUFFERS, r->group_sid));
-		}
-		for (cntr_sids_0 = 0; cntr_sids_0 < r->num_sids; cntr_sids_0++) {
-			if (r->sids[cntr_sids_0]) {
-				NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS|NDR_BUFFERS, r->sids[cntr_sids_0]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_security_token(struct ndr_pull *ndr, int ndr_flags, struct security_token *r)
-{
-	uint32_t _ptr_user_sid;
-	TALLOC_CTX *_mem_save_user_sid_0;
-	uint32_t _ptr_group_sid;
-	TALLOC_CTX *_mem_save_group_sid_0;
-	uint32_t _ptr_sids;
-	uint32_t cntr_sids_0;
-	TALLOC_CTX *_mem_save_sids_0;
-	TALLOC_CTX *_mem_save_sids_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_user_sid));
-		if (_ptr_user_sid) {
-			NDR_PULL_ALLOC(ndr, r->user_sid);
-		} else {
-			r->user_sid = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_group_sid));
-		if (_ptr_group_sid) {
-			NDR_PULL_ALLOC(ndr, r->group_sid);
-		} else {
-			r->group_sid = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_sids));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->sids));
-		NDR_PULL_ALLOC_N(ndr, r->sids, ndr_get_array_size(ndr, &r->sids));
-		_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->sids, 0);
-		for (cntr_sids_0 = 0; cntr_sids_0 < r->num_sids; cntr_sids_0++) {
-			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sids));
-			if (_ptr_sids) {
-				NDR_PULL_ALLOC(ndr, r->sids[cntr_sids_0]);
-			} else {
-				r->sids[cntr_sids_0] = NULL;
-			}
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, 0);
-		NDR_CHECK(ndr_pull_udlong(ndr, NDR_SCALARS, &r->privilege_mask));
-		if (r->sids) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->sids, r->num_sids));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->user_sid) {
-			_mem_save_user_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->user_sid, 0);
-			NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_SCALARS|NDR_BUFFERS, r->user_sid));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_sid_0, 0);
-		}
-		if (r->group_sid) {
-			_mem_save_group_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->group_sid, 0);
-			NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_SCALARS|NDR_BUFFERS, r->group_sid));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_group_sid_0, 0);
-		}
-		_mem_save_sids_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->sids, 0);
-		for (cntr_sids_0 = 0; cntr_sids_0 < r->num_sids; cntr_sids_0++) {
-			if (r->sids[cntr_sids_0]) {
-				_mem_save_sids_1 = NDR_PULL_GET_MEM_CTX(ndr);
-				NDR_PULL_SET_MEM_CTX(ndr, r->sids[cntr_sids_0], 0);
-				NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_SCALARS|NDR_BUFFERS, r->sids[cntr_sids_0]));
-				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_1, 0);
-			}
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sids_0, 0);
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_security_token(struct ndr_print *ndr, const char *name, const struct security_token *r)
-{
-	uint32_t cntr_sids_0;
-	ndr_print_struct(ndr, name, "security_token");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "user_sid", r->user_sid);
-	ndr->depth++;
-	if (r->user_sid) {
-		ndr_print_dom_sid(ndr, "user_sid", r->user_sid);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "group_sid", r->group_sid);
-	ndr->depth++;
-	if (r->group_sid) {
-		ndr_print_dom_sid(ndr, "group_sid", r->group_sid);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "num_sids", r->num_sids);
-	ndr->print(ndr, "%s: ARRAY(%d)", "sids", r->num_sids);
-	ndr->depth++;
-	for (cntr_sids_0=0;cntr_sids_0<r->num_sids;cntr_sids_0++) {
-		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_sids_0) != -1) {
-			ndr_print_ptr(ndr, "sids", r->sids[cntr_sids_0]);
-			ndr->depth++;
-			if (r->sids[cntr_sids_0]) {
-				ndr_print_dom_sid(ndr, "sids", r->sids[cntr_sids_0]);
-			}
-			ndr->depth--;
-			free(idx_0);
-		}
-	}
-	ndr->depth--;
-	ndr_print_udlong(ndr, "privilege_mask", r->privilege_mask);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_security_secinfo(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_security_secinfo(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_security_secinfo(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SECINFO_OWNER", SECINFO_OWNER, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SECINFO_GROUP", SECINFO_GROUP, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SECINFO_DACL", SECINFO_DACL, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SECINFO_SACL", SECINFO_SACL, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SECINFO_UNPROTECTED_SACL", SECINFO_UNPROTECTED_SACL, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SECINFO_UNPROTECTED_DACL", SECINFO_UNPROTECTED_DACL, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SECINFO_PROTECTED_SACL", SECINFO_PROTECTED_SACL, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SECINFO_PROTECTED_DACL", SECINFO_PROTECTED_DACL, r);
-	ndr->depth--;
-}
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_security.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_security.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_security.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,41 +0,0 @@
-/* header auto-generated by pidl */
-
-#include "librpc/ndr/libndr.h"
-#include "librpc/gen_ndr/security.h"
-
-#ifndef _HEADER_NDR_security
-#define _HEADER_NDR_security
-
-#define NDR_SECURITY_CALL_COUNT (0)
-void ndr_print_security_ace_flags(struct ndr_print *ndr, const char *name, uint8_t r);
-void ndr_print_security_ace_type(struct ndr_print *ndr, const char *name, enum security_ace_type r);
-void ndr_print_security_ace_object_flags(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_security_ace_object_type(struct ndr_print *ndr, const char *name, const union security_ace_object_type *r);
-void ndr_print_security_ace_object_inherited_type(struct ndr_print *ndr, const char *name, const union security_ace_object_inherited_type *r);
-void ndr_print_security_ace_object(struct ndr_print *ndr, const char *name, const struct security_ace_object *r);
-void ndr_print_security_ace_object_ctr(struct ndr_print *ndr, const char *name, const union security_ace_object_ctr *r);
-enum ndr_err_code ndr_push_security_ace(struct ndr_push *ndr, int ndr_flags, const struct security_ace *r);
-enum ndr_err_code ndr_pull_security_ace(struct ndr_pull *ndr, int ndr_flags, struct security_ace *r);
-void ndr_print_security_ace(struct ndr_print *ndr, const char *name, const struct security_ace *r);
-size_t ndr_size_security_ace(const struct security_ace *r, int flags);
-void ndr_print_security_acl_revision(struct ndr_print *ndr, const char *name, enum security_acl_revision r);
-enum ndr_err_code ndr_push_security_acl(struct ndr_push *ndr, int ndr_flags, const struct security_acl *r);
-enum ndr_err_code ndr_pull_security_acl(struct ndr_pull *ndr, int ndr_flags, struct security_acl *r);
-void ndr_print_security_acl(struct ndr_print *ndr, const char *name, const struct security_acl *r);
-size_t ndr_size_security_acl(const struct security_acl *r, int flags);
-void ndr_print_security_descriptor_revision(struct ndr_print *ndr, const char *name, enum security_descriptor_revision r);
-void ndr_print_security_descriptor_type(struct ndr_print *ndr, const char *name, uint16_t r);
-enum ndr_err_code ndr_push_security_descriptor(struct ndr_push *ndr, int ndr_flags, const struct security_descriptor *r);
-enum ndr_err_code ndr_pull_security_descriptor(struct ndr_pull *ndr, int ndr_flags, struct security_descriptor *r);
-void ndr_print_security_descriptor(struct ndr_print *ndr, const char *name, const struct security_descriptor *r);
-size_t ndr_size_security_descriptor(const struct security_descriptor *r, int flags);
-enum ndr_err_code ndr_push_sec_desc_buf(struct ndr_push *ndr, int ndr_flags, const struct sec_desc_buf *r);
-enum ndr_err_code ndr_pull_sec_desc_buf(struct ndr_pull *ndr, int ndr_flags, struct sec_desc_buf *r);
-void ndr_print_sec_desc_buf(struct ndr_print *ndr, const char *name, const struct sec_desc_buf *r);
-enum ndr_err_code ndr_push_security_token(struct ndr_push *ndr, int ndr_flags, const struct security_token *r);
-enum ndr_err_code ndr_pull_security_token(struct ndr_pull *ndr, int ndr_flags, struct security_token *r);
-void ndr_print_security_token(struct ndr_print *ndr, const char *name, const struct security_token *r);
-enum ndr_err_code ndr_push_security_secinfo(struct ndr_push *ndr, int ndr_flags, uint32_t r);
-enum ndr_err_code ndr_pull_security_secinfo(struct ndr_pull *ndr, int ndr_flags, uint32_t *r);
-void ndr_print_security_secinfo(struct ndr_print *ndr, const char *name, uint32_t r);
-#endif /* _HEADER_NDR_security */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_srvsvc.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_srvsvc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_srvsvc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,19654 +0,0 @@
-/* parser auto-generated by pidl */
-
-#include "includes.h"
-#include "librpc/gen_ndr/ndr_srvsvc.h"
-
-#include "librpc/gen_ndr/ndr_security.h"
-#include "librpc/gen_ndr/ndr_svcctl.h"
-static enum ndr_err_code ndr_push_srvsvc_NetCharDevInfo0(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetCharDevInfo0 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->device));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->device) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->device, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->device, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->device, ndr_charset_length(r->device, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetCharDevInfo0(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetCharDevInfo0 *r)
-{
-	uint32_t _ptr_device;
-	TALLOC_CTX *_mem_save_device_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_device));
-		if (_ptr_device) {
-			NDR_PULL_ALLOC(ndr, r->device);
-		} else {
-			r->device = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->device) {
-			_mem_save_device_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->device, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->device));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->device));
-			if (ndr_get_array_length(ndr, &r->device) > ndr_get_array_size(ndr, &r->device)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->device), ndr_get_array_length(ndr, &r->device));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->device), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->device, ndr_get_array_length(ndr, &r->device), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_device_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetCharDevInfo0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetCharDevInfo0 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetCharDevInfo0");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "device", r->device);
-	ndr->depth++;
-	if (r->device) {
-		ndr_print_string(ndr, "device", r->device);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetCharDevCtr0(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetCharDevCtr0 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetCharDevInfo0(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetCharDevInfo0(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetCharDevCtr0(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetCharDevCtr0 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetCharDevInfo0(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetCharDevInfo0(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetCharDevCtr0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetCharDevCtr0 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetCharDevCtr0");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetCharDevInfo0(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetCharDevInfo1(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetCharDevInfo1 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->device));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->status));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->user));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->time));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->device) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->device, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->device, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->device, ndr_charset_length(r->device, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->user) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->user, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->user, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->user, ndr_charset_length(r->user, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetCharDevInfo1(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetCharDevInfo1 *r)
-{
-	uint32_t _ptr_device;
-	TALLOC_CTX *_mem_save_device_0;
-	uint32_t _ptr_user;
-	TALLOC_CTX *_mem_save_user_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_device));
-		if (_ptr_device) {
-			NDR_PULL_ALLOC(ndr, r->device);
-		} else {
-			r->device = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->status));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_user));
-		if (_ptr_user) {
-			NDR_PULL_ALLOC(ndr, r->user);
-		} else {
-			r->user = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->time));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->device) {
-			_mem_save_device_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->device, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->device));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->device));
-			if (ndr_get_array_length(ndr, &r->device) > ndr_get_array_size(ndr, &r->device)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->device), ndr_get_array_length(ndr, &r->device));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->device), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->device, ndr_get_array_length(ndr, &r->device), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_device_0, 0);
-		}
-		if (r->user) {
-			_mem_save_user_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->user, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->user));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->user));
-			if (ndr_get_array_length(ndr, &r->user) > ndr_get_array_size(ndr, &r->user)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->user), ndr_get_array_length(ndr, &r->user));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->user), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->user, ndr_get_array_length(ndr, &r->user), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetCharDevInfo1(struct ndr_print *ndr, const char *name, const struct srvsvc_NetCharDevInfo1 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetCharDevInfo1");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "device", r->device);
-	ndr->depth++;
-	if (r->device) {
-		ndr_print_string(ndr, "device", r->device);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "status", r->status);
-	ndr_print_ptr(ndr, "user", r->user);
-	ndr->depth++;
-	if (r->user) {
-		ndr_print_string(ndr, "user", r->user);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "time", r->time);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetCharDevCtr1(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetCharDevCtr1 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetCharDevInfo1(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetCharDevInfo1(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetCharDevCtr1(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetCharDevCtr1 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetCharDevInfo1(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetCharDevInfo1(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetCharDevCtr1(struct ndr_print *ndr, const char *name, const struct srvsvc_NetCharDevCtr1 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetCharDevCtr1");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetCharDevInfo1(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetCharDevInfo(struct ndr_push *ndr, int ndr_flags, const union srvsvc_NetCharDevInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 0: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info0));
-			break; }
-
-			case 1: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1));
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 0:
-				if (r->info0) {
-					NDR_CHECK(ndr_push_srvsvc_NetCharDevInfo0(ndr, NDR_SCALARS|NDR_BUFFERS, r->info0));
-				}
-			break;
-
-			case 1:
-				if (r->info1) {
-					NDR_CHECK(ndr_push_srvsvc_NetCharDevInfo1(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1));
-				}
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetCharDevInfo(struct ndr_pull *ndr, int ndr_flags, union srvsvc_NetCharDevInfo *r)
-{
-	int level;
-	uint32_t _level;
-	TALLOC_CTX *_mem_save_info0_0;
-	TALLOC_CTX *_mem_save_info1_0;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 0: {
-				uint32_t _ptr_info0;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info0));
-				if (_ptr_info0) {
-					NDR_PULL_ALLOC(ndr, r->info0);
-				} else {
-					r->info0 = NULL;
-				}
-			break; }
-
-			case 1: {
-				uint32_t _ptr_info1;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1));
-				if (_ptr_info1) {
-					NDR_PULL_ALLOC(ndr, r->info1);
-				} else {
-					r->info1 = NULL;
-				}
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 0:
-				if (r->info0) {
-					_mem_save_info0_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info0, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetCharDevInfo0(ndr, NDR_SCALARS|NDR_BUFFERS, r->info0));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info0_0, 0);
-				}
-			break;
-
-			case 1:
-				if (r->info1) {
-					_mem_save_info1_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetCharDevInfo1(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1_0, 0);
-				}
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetCharDevInfo(struct ndr_print *ndr, const char *name, const union srvsvc_NetCharDevInfo *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "srvsvc_NetCharDevInfo");
-	switch (level) {
-		case 0:
-			ndr_print_ptr(ndr, "info0", r->info0);
-			ndr->depth++;
-			if (r->info0) {
-				ndr_print_srvsvc_NetCharDevInfo0(ndr, "info0", r->info0);
-			}
-			ndr->depth--;
-		break;
-
-		case 1:
-			ndr_print_ptr(ndr, "info1", r->info1);
-			ndr->depth++;
-			if (r->info1) {
-				ndr_print_srvsvc_NetCharDevInfo1(ndr, "info1", r->info1);
-			}
-			ndr->depth--;
-		break;
-
-		default:
-		break;
-
-	}
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetCharDevCtr(struct ndr_push *ndr, int ndr_flags, const union srvsvc_NetCharDevCtr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 0: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr0));
-			break; }
-
-			case 1: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr1));
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 0:
-				if (r->ctr0) {
-					NDR_CHECK(ndr_push_srvsvc_NetCharDevCtr0(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr0));
-				}
-			break;
-
-			case 1:
-				if (r->ctr1) {
-					NDR_CHECK(ndr_push_srvsvc_NetCharDevCtr1(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1));
-				}
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetCharDevCtr(struct ndr_pull *ndr, int ndr_flags, union srvsvc_NetCharDevCtr *r)
-{
-	int level;
-	uint32_t _level;
-	TALLOC_CTX *_mem_save_ctr0_0;
-	TALLOC_CTX *_mem_save_ctr1_0;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 0: {
-				uint32_t _ptr_ctr0;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr0));
-				if (_ptr_ctr0) {
-					NDR_PULL_ALLOC(ndr, r->ctr0);
-				} else {
-					r->ctr0 = NULL;
-				}
-			break; }
-
-			case 1: {
-				uint32_t _ptr_ctr1;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr1));
-				if (_ptr_ctr1) {
-					NDR_PULL_ALLOC(ndr, r->ctr1);
-				} else {
-					r->ctr1 = NULL;
-				}
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 0:
-				if (r->ctr0) {
-					_mem_save_ctr0_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr0, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetCharDevCtr0(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr0));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr0_0, 0);
-				}
-			break;
-
-			case 1:
-				if (r->ctr1) {
-					_mem_save_ctr1_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr1, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetCharDevCtr1(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr1_0, 0);
-				}
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetCharDevCtr(struct ndr_print *ndr, const char *name, const union srvsvc_NetCharDevCtr *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "srvsvc_NetCharDevCtr");
-	switch (level) {
-		case 0:
-			ndr_print_ptr(ndr, "ctr0", r->ctr0);
-			ndr->depth++;
-			if (r->ctr0) {
-				ndr_print_srvsvc_NetCharDevCtr0(ndr, "ctr0", r->ctr0);
-			}
-			ndr->depth--;
-		break;
-
-		case 1:
-			ndr_print_ptr(ndr, "ctr1", r->ctr1);
-			ndr->depth++;
-			if (r->ctr1) {
-				ndr_print_srvsvc_NetCharDevCtr1(ndr, "ctr1", r->ctr1);
-			}
-			ndr->depth--;
-		break;
-
-		default:
-		break;
-
-	}
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetCharDevQInfo0(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetCharDevQInfo0 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->device));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->device) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->device, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->device, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->device, ndr_charset_length(r->device, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetCharDevQInfo0(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetCharDevQInfo0 *r)
-{
-	uint32_t _ptr_device;
-	TALLOC_CTX *_mem_save_device_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_device));
-		if (_ptr_device) {
-			NDR_PULL_ALLOC(ndr, r->device);
-		} else {
-			r->device = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->device) {
-			_mem_save_device_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->device, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->device));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->device));
-			if (ndr_get_array_length(ndr, &r->device) > ndr_get_array_size(ndr, &r->device)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->device), ndr_get_array_length(ndr, &r->device));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->device), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->device, ndr_get_array_length(ndr, &r->device), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_device_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetCharDevQInfo0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetCharDevQInfo0 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetCharDevQInfo0");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "device", r->device);
-	ndr->depth++;
-	if (r->device) {
-		ndr_print_string(ndr, "device", r->device);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetCharDevQCtr0(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetCharDevQCtr0 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetCharDevQInfo0(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetCharDevQInfo0(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetCharDevQCtr0(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetCharDevQCtr0 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetCharDevQInfo0(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetCharDevQInfo0(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetCharDevQCtr0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetCharDevQCtr0 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetCharDevQCtr0");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetCharDevQInfo0(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetCharDevQInfo1(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetCharDevQInfo1 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->device));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->priority));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->devices));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->users));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_ahead));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->device) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->device, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->device, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->device, ndr_charset_length(r->device, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->devices) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->devices, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->devices, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->devices, ndr_charset_length(r->devices, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetCharDevQInfo1(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetCharDevQInfo1 *r)
-{
-	uint32_t _ptr_device;
-	TALLOC_CTX *_mem_save_device_0;
-	uint32_t _ptr_devices;
-	TALLOC_CTX *_mem_save_devices_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_device));
-		if (_ptr_device) {
-			NDR_PULL_ALLOC(ndr, r->device);
-		} else {
-			r->device = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->priority));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_devices));
-		if (_ptr_devices) {
-			NDR_PULL_ALLOC(ndr, r->devices);
-		} else {
-			r->devices = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->users));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_ahead));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->device) {
-			_mem_save_device_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->device, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->device));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->device));
-			if (ndr_get_array_length(ndr, &r->device) > ndr_get_array_size(ndr, &r->device)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->device), ndr_get_array_length(ndr, &r->device));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->device), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->device, ndr_get_array_length(ndr, &r->device), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_device_0, 0);
-		}
-		if (r->devices) {
-			_mem_save_devices_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->devices, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->devices));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->devices));
-			if (ndr_get_array_length(ndr, &r->devices) > ndr_get_array_size(ndr, &r->devices)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->devices), ndr_get_array_length(ndr, &r->devices));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->devices), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->devices, ndr_get_array_length(ndr, &r->devices), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_devices_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetCharDevQInfo1(struct ndr_print *ndr, const char *name, const struct srvsvc_NetCharDevQInfo1 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetCharDevQInfo1");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "device", r->device);
-	ndr->depth++;
-	if (r->device) {
-		ndr_print_string(ndr, "device", r->device);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "priority", r->priority);
-	ndr_print_ptr(ndr, "devices", r->devices);
-	ndr->depth++;
-	if (r->devices) {
-		ndr_print_string(ndr, "devices", r->devices);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "users", r->users);
-	ndr_print_uint32(ndr, "num_ahead", r->num_ahead);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetCharDevQCtr1(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetCharDevQCtr1 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetCharDevQInfo1(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetCharDevQInfo1(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetCharDevQCtr1(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetCharDevQCtr1 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetCharDevQInfo1(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetCharDevQInfo1(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetCharDevQCtr1(struct ndr_print *ndr, const char *name, const struct srvsvc_NetCharDevQCtr1 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetCharDevQCtr1");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetCharDevQInfo1(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetCharDevQInfo(struct ndr_push *ndr, int ndr_flags, const union srvsvc_NetCharDevQInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 0: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info0));
-			break; }
-
-			case 1: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1));
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 0:
-				if (r->info0) {
-					NDR_CHECK(ndr_push_srvsvc_NetCharDevQInfo0(ndr, NDR_SCALARS|NDR_BUFFERS, r->info0));
-				}
-			break;
-
-			case 1:
-				if (r->info1) {
-					NDR_CHECK(ndr_push_srvsvc_NetCharDevQInfo1(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1));
-				}
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetCharDevQInfo(struct ndr_pull *ndr, int ndr_flags, union srvsvc_NetCharDevQInfo *r)
-{
-	int level;
-	uint32_t _level;
-	TALLOC_CTX *_mem_save_info0_0;
-	TALLOC_CTX *_mem_save_info1_0;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 0: {
-				uint32_t _ptr_info0;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info0));
-				if (_ptr_info0) {
-					NDR_PULL_ALLOC(ndr, r->info0);
-				} else {
-					r->info0 = NULL;
-				}
-			break; }
-
-			case 1: {
-				uint32_t _ptr_info1;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1));
-				if (_ptr_info1) {
-					NDR_PULL_ALLOC(ndr, r->info1);
-				} else {
-					r->info1 = NULL;
-				}
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 0:
-				if (r->info0) {
-					_mem_save_info0_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info0, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetCharDevQInfo0(ndr, NDR_SCALARS|NDR_BUFFERS, r->info0));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info0_0, 0);
-				}
-			break;
-
-			case 1:
-				if (r->info1) {
-					_mem_save_info1_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetCharDevQInfo1(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1_0, 0);
-				}
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetCharDevQInfo(struct ndr_print *ndr, const char *name, const union srvsvc_NetCharDevQInfo *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "srvsvc_NetCharDevQInfo");
-	switch (level) {
-		case 0:
-			ndr_print_ptr(ndr, "info0", r->info0);
-			ndr->depth++;
-			if (r->info0) {
-				ndr_print_srvsvc_NetCharDevQInfo0(ndr, "info0", r->info0);
-			}
-			ndr->depth--;
-		break;
-
-		case 1:
-			ndr_print_ptr(ndr, "info1", r->info1);
-			ndr->depth++;
-			if (r->info1) {
-				ndr_print_srvsvc_NetCharDevQInfo1(ndr, "info1", r->info1);
-			}
-			ndr->depth--;
-		break;
-
-		default:
-		break;
-
-	}
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetCharDevQCtr(struct ndr_push *ndr, int ndr_flags, const union srvsvc_NetCharDevQCtr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 0: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr0));
-			break; }
-
-			case 1: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr1));
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 0:
-				if (r->ctr0) {
-					NDR_CHECK(ndr_push_srvsvc_NetCharDevQCtr0(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr0));
-				}
-			break;
-
-			case 1:
-				if (r->ctr1) {
-					NDR_CHECK(ndr_push_srvsvc_NetCharDevQCtr1(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1));
-				}
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetCharDevQCtr(struct ndr_pull *ndr, int ndr_flags, union srvsvc_NetCharDevQCtr *r)
-{
-	int level;
-	uint32_t _level;
-	TALLOC_CTX *_mem_save_ctr0_0;
-	TALLOC_CTX *_mem_save_ctr1_0;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 0: {
-				uint32_t _ptr_ctr0;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr0));
-				if (_ptr_ctr0) {
-					NDR_PULL_ALLOC(ndr, r->ctr0);
-				} else {
-					r->ctr0 = NULL;
-				}
-			break; }
-
-			case 1: {
-				uint32_t _ptr_ctr1;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr1));
-				if (_ptr_ctr1) {
-					NDR_PULL_ALLOC(ndr, r->ctr1);
-				} else {
-					r->ctr1 = NULL;
-				}
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 0:
-				if (r->ctr0) {
-					_mem_save_ctr0_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr0, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetCharDevQCtr0(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr0));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr0_0, 0);
-				}
-			break;
-
-			case 1:
-				if (r->ctr1) {
-					_mem_save_ctr1_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr1, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetCharDevQCtr1(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr1_0, 0);
-				}
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetCharDevQCtr(struct ndr_print *ndr, const char *name, const union srvsvc_NetCharDevQCtr *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "srvsvc_NetCharDevQCtr");
-	switch (level) {
-		case 0:
-			ndr_print_ptr(ndr, "ctr0", r->ctr0);
-			ndr->depth++;
-			if (r->ctr0) {
-				ndr_print_srvsvc_NetCharDevQCtr0(ndr, "ctr0", r->ctr0);
-			}
-			ndr->depth--;
-		break;
-
-		case 1:
-			ndr_print_ptr(ndr, "ctr1", r->ctr1);
-			ndr->depth++;
-			if (r->ctr1) {
-				ndr_print_srvsvc_NetCharDevQCtr1(ndr, "ctr1", r->ctr1);
-			}
-			ndr->depth--;
-		break;
-
-		default:
-		break;
-
-	}
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetConnInfo0(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetConnInfo0 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->conn_id));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetConnInfo0(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetConnInfo0 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->conn_id));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetConnInfo0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetConnInfo0 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetConnInfo0");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "conn_id", r->conn_id);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetConnCtr0(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetConnCtr0 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetConnInfo0(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetConnCtr0(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetConnCtr0 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetConnInfo0(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetConnCtr0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetConnCtr0 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetConnCtr0");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetConnInfo0(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetConnInfo1(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetConnInfo1 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->conn_id));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->conn_type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_open));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_users));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->conn_time));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->user));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->share));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->user) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->user, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->user, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->user, ndr_charset_length(r->user, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->share) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->share, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->share, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->share, ndr_charset_length(r->share, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetConnInfo1(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetConnInfo1 *r)
-{
-	uint32_t _ptr_user;
-	TALLOC_CTX *_mem_save_user_0;
-	uint32_t _ptr_share;
-	TALLOC_CTX *_mem_save_share_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->conn_id));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->conn_type));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_open));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_users));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->conn_time));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_user));
-		if (_ptr_user) {
-			NDR_PULL_ALLOC(ndr, r->user);
-		} else {
-			r->user = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_share));
-		if (_ptr_share) {
-			NDR_PULL_ALLOC(ndr, r->share);
-		} else {
-			r->share = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->user) {
-			_mem_save_user_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->user, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->user));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->user));
-			if (ndr_get_array_length(ndr, &r->user) > ndr_get_array_size(ndr, &r->user)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->user), ndr_get_array_length(ndr, &r->user));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->user), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->user, ndr_get_array_length(ndr, &r->user), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_0, 0);
-		}
-		if (r->share) {
-			_mem_save_share_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->share, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->share));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->share));
-			if (ndr_get_array_length(ndr, &r->share) > ndr_get_array_size(ndr, &r->share)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->share), ndr_get_array_length(ndr, &r->share));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->share), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->share, ndr_get_array_length(ndr, &r->share), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_share_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetConnInfo1(struct ndr_print *ndr, const char *name, const struct srvsvc_NetConnInfo1 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetConnInfo1");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "conn_id", r->conn_id);
-	ndr_print_uint32(ndr, "conn_type", r->conn_type);
-	ndr_print_uint32(ndr, "num_open", r->num_open);
-	ndr_print_uint32(ndr, "num_users", r->num_users);
-	ndr_print_uint32(ndr, "conn_time", r->conn_time);
-	ndr_print_ptr(ndr, "user", r->user);
-	ndr->depth++;
-	if (r->user) {
-		ndr_print_string(ndr, "user", r->user);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "share", r->share);
-	ndr->depth++;
-	if (r->share) {
-		ndr_print_string(ndr, "share", r->share);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetConnCtr1(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetConnCtr1 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetConnInfo1(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetConnInfo1(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetConnCtr1(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetConnCtr1 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetConnInfo1(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetConnInfo1(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetConnCtr1(struct ndr_print *ndr, const char *name, const struct srvsvc_NetConnCtr1 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetConnCtr1");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetConnInfo1(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetConnCtr(struct ndr_push *ndr, int ndr_flags, const union srvsvc_NetConnCtr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 0: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr0));
-			break; }
-
-			case 1: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr1));
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 0:
-				if (r->ctr0) {
-					NDR_CHECK(ndr_push_srvsvc_NetConnCtr0(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr0));
-				}
-			break;
-
-			case 1:
-				if (r->ctr1) {
-					NDR_CHECK(ndr_push_srvsvc_NetConnCtr1(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1));
-				}
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetConnCtr(struct ndr_pull *ndr, int ndr_flags, union srvsvc_NetConnCtr *r)
-{
-	int level;
-	uint32_t _level;
-	TALLOC_CTX *_mem_save_ctr0_0;
-	TALLOC_CTX *_mem_save_ctr1_0;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 0: {
-				uint32_t _ptr_ctr0;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr0));
-				if (_ptr_ctr0) {
-					NDR_PULL_ALLOC(ndr, r->ctr0);
-				} else {
-					r->ctr0 = NULL;
-				}
-			break; }
-
-			case 1: {
-				uint32_t _ptr_ctr1;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr1));
-				if (_ptr_ctr1) {
-					NDR_PULL_ALLOC(ndr, r->ctr1);
-				} else {
-					r->ctr1 = NULL;
-				}
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 0:
-				if (r->ctr0) {
-					_mem_save_ctr0_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr0, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetConnCtr0(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr0));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr0_0, 0);
-				}
-			break;
-
-			case 1:
-				if (r->ctr1) {
-					_mem_save_ctr1_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr1, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetConnCtr1(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr1_0, 0);
-				}
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetConnCtr(struct ndr_print *ndr, const char *name, const union srvsvc_NetConnCtr *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "srvsvc_NetConnCtr");
-	switch (level) {
-		case 0:
-			ndr_print_ptr(ndr, "ctr0", r->ctr0);
-			ndr->depth++;
-			if (r->ctr0) {
-				ndr_print_srvsvc_NetConnCtr0(ndr, "ctr0", r->ctr0);
-			}
-			ndr->depth--;
-		break;
-
-		case 1:
-			ndr_print_ptr(ndr, "ctr1", r->ctr1);
-			ndr->depth++;
-			if (r->ctr1) {
-				ndr_print_srvsvc_NetConnCtr1(ndr, "ctr1", r->ctr1);
-			}
-			ndr->depth--;
-		break;
-
-		default:
-		break;
-
-	}
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetConnInfoCtr(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetConnInfoCtr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->level));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->ctr, r->level));
-		NDR_CHECK(ndr_push_srvsvc_NetConnCtr(ndr, NDR_SCALARS, &r->ctr));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_srvsvc_NetConnCtr(ndr, NDR_BUFFERS, &r->ctr));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetConnInfoCtr(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetConnInfoCtr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->level));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->ctr, r->level));
-		NDR_CHECK(ndr_pull_srvsvc_NetConnCtr(ndr, NDR_SCALARS, &r->ctr));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_srvsvc_NetConnCtr(ndr, NDR_BUFFERS, &r->ctr));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetConnInfoCtr(struct ndr_print *ndr, const char *name, const struct srvsvc_NetConnInfoCtr *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetConnInfoCtr");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "level", r->level);
-	ndr_print_set_switch_value(ndr, &r->ctr, r->level);
-	ndr_print_srvsvc_NetConnCtr(ndr, "ctr", &r->ctr);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetFileInfo2(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetFileInfo2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->fid));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetFileInfo2(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetFileInfo2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->fid));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetFileInfo2(struct ndr_print *ndr, const char *name, const struct srvsvc_NetFileInfo2 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetFileInfo2");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "fid", r->fid);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetFileCtr2(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetFileCtr2 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetFileInfo2(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetFileCtr2(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetFileCtr2 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetFileInfo2(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetFileCtr2(struct ndr_print *ndr, const char *name, const struct srvsvc_NetFileCtr2 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetFileCtr2");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetFileInfo2(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetFileInfo3(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetFileInfo3 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->fid));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->permissions));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_locks));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->path));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->user));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->path) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->path, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->path, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->path, ndr_charset_length(r->path, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->user) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->user, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->user, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->user, ndr_charset_length(r->user, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetFileInfo3(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetFileInfo3 *r)
-{
-	uint32_t _ptr_path;
-	TALLOC_CTX *_mem_save_path_0;
-	uint32_t _ptr_user;
-	TALLOC_CTX *_mem_save_user_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->fid));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->permissions));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_locks));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_path));
-		if (_ptr_path) {
-			NDR_PULL_ALLOC(ndr, r->path);
-		} else {
-			r->path = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_user));
-		if (_ptr_user) {
-			NDR_PULL_ALLOC(ndr, r->user);
-		} else {
-			r->user = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->path) {
-			_mem_save_path_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->path, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->path));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->path));
-			if (ndr_get_array_length(ndr, &r->path) > ndr_get_array_size(ndr, &r->path)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->path), ndr_get_array_length(ndr, &r->path));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->path), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->path, ndr_get_array_length(ndr, &r->path), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_path_0, 0);
-		}
-		if (r->user) {
-			_mem_save_user_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->user, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->user));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->user));
-			if (ndr_get_array_length(ndr, &r->user) > ndr_get_array_size(ndr, &r->user)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->user), ndr_get_array_length(ndr, &r->user));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->user), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->user, ndr_get_array_length(ndr, &r->user), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetFileInfo3(struct ndr_print *ndr, const char *name, const struct srvsvc_NetFileInfo3 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetFileInfo3");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "fid", r->fid);
-	ndr_print_uint32(ndr, "permissions", r->permissions);
-	ndr_print_uint32(ndr, "num_locks", r->num_locks);
-	ndr_print_ptr(ndr, "path", r->path);
-	ndr->depth++;
-	if (r->path) {
-		ndr_print_string(ndr, "path", r->path);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "user", r->user);
-	ndr->depth++;
-	if (r->user) {
-		ndr_print_string(ndr, "user", r->user);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetFileCtr3(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetFileCtr3 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetFileInfo3(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetFileInfo3(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetFileCtr3(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetFileCtr3 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetFileInfo3(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetFileInfo3(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetFileCtr3(struct ndr_print *ndr, const char *name, const struct srvsvc_NetFileCtr3 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetFileCtr3");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetFileInfo3(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetFileInfo(struct ndr_push *ndr, int ndr_flags, const union srvsvc_NetFileInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 2: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info2));
-			break; }
-
-			case 3: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info3));
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 2:
-				if (r->info2) {
-					NDR_CHECK(ndr_push_srvsvc_NetFileInfo2(ndr, NDR_SCALARS, r->info2));
-				}
-			break;
-
-			case 3:
-				if (r->info3) {
-					NDR_CHECK(ndr_push_srvsvc_NetFileInfo3(ndr, NDR_SCALARS|NDR_BUFFERS, r->info3));
-				}
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetFileInfo(struct ndr_pull *ndr, int ndr_flags, union srvsvc_NetFileInfo *r)
-{
-	int level;
-	uint32_t _level;
-	TALLOC_CTX *_mem_save_info2_0;
-	TALLOC_CTX *_mem_save_info3_0;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 2: {
-				uint32_t _ptr_info2;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info2));
-				if (_ptr_info2) {
-					NDR_PULL_ALLOC(ndr, r->info2);
-				} else {
-					r->info2 = NULL;
-				}
-			break; }
-
-			case 3: {
-				uint32_t _ptr_info3;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info3));
-				if (_ptr_info3) {
-					NDR_PULL_ALLOC(ndr, r->info3);
-				} else {
-					r->info3 = NULL;
-				}
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 2:
-				if (r->info2) {
-					_mem_save_info2_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info2, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetFileInfo2(ndr, NDR_SCALARS, r->info2));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info2_0, 0);
-				}
-			break;
-
-			case 3:
-				if (r->info3) {
-					_mem_save_info3_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info3, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetFileInfo3(ndr, NDR_SCALARS|NDR_BUFFERS, r->info3));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info3_0, 0);
-				}
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetFileInfo(struct ndr_print *ndr, const char *name, const union srvsvc_NetFileInfo *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "srvsvc_NetFileInfo");
-	switch (level) {
-		case 2:
-			ndr_print_ptr(ndr, "info2", r->info2);
-			ndr->depth++;
-			if (r->info2) {
-				ndr_print_srvsvc_NetFileInfo2(ndr, "info2", r->info2);
-			}
-			ndr->depth--;
-		break;
-
-		case 3:
-			ndr_print_ptr(ndr, "info3", r->info3);
-			ndr->depth++;
-			if (r->info3) {
-				ndr_print_srvsvc_NetFileInfo3(ndr, "info3", r->info3);
-			}
-			ndr->depth--;
-		break;
-
-		default:
-		break;
-
-	}
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetFileCtr(struct ndr_push *ndr, int ndr_flags, const union srvsvc_NetFileCtr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 2: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr2));
-			break; }
-
-			case 3: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr3));
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 2:
-				if (r->ctr2) {
-					NDR_CHECK(ndr_push_srvsvc_NetFileCtr2(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr2));
-				}
-			break;
-
-			case 3:
-				if (r->ctr3) {
-					NDR_CHECK(ndr_push_srvsvc_NetFileCtr3(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr3));
-				}
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetFileCtr(struct ndr_pull *ndr, int ndr_flags, union srvsvc_NetFileCtr *r)
-{
-	int level;
-	uint32_t _level;
-	TALLOC_CTX *_mem_save_ctr2_0;
-	TALLOC_CTX *_mem_save_ctr3_0;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 2: {
-				uint32_t _ptr_ctr2;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr2));
-				if (_ptr_ctr2) {
-					NDR_PULL_ALLOC(ndr, r->ctr2);
-				} else {
-					r->ctr2 = NULL;
-				}
-			break; }
-
-			case 3: {
-				uint32_t _ptr_ctr3;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr3));
-				if (_ptr_ctr3) {
-					NDR_PULL_ALLOC(ndr, r->ctr3);
-				} else {
-					r->ctr3 = NULL;
-				}
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 2:
-				if (r->ctr2) {
-					_mem_save_ctr2_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr2, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetFileCtr2(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr2));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr2_0, 0);
-				}
-			break;
-
-			case 3:
-				if (r->ctr3) {
-					_mem_save_ctr3_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr3, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetFileCtr3(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr3));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr3_0, 0);
-				}
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetFileCtr(struct ndr_print *ndr, const char *name, const union srvsvc_NetFileCtr *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "srvsvc_NetFileCtr");
-	switch (level) {
-		case 2:
-			ndr_print_ptr(ndr, "ctr2", r->ctr2);
-			ndr->depth++;
-			if (r->ctr2) {
-				ndr_print_srvsvc_NetFileCtr2(ndr, "ctr2", r->ctr2);
-			}
-			ndr->depth--;
-		break;
-
-		case 3:
-			ndr_print_ptr(ndr, "ctr3", r->ctr3);
-			ndr->depth++;
-			if (r->ctr3) {
-				ndr_print_srvsvc_NetFileCtr3(ndr, "ctr3", r->ctr3);
-			}
-			ndr->depth--;
-		break;
-
-		default:
-		break;
-
-	}
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetFileInfoCtr(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetFileInfoCtr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->level));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->ctr, r->level));
-		NDR_CHECK(ndr_push_srvsvc_NetFileCtr(ndr, NDR_SCALARS, &r->ctr));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_srvsvc_NetFileCtr(ndr, NDR_BUFFERS, &r->ctr));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetFileInfoCtr(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetFileInfoCtr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->level));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->ctr, r->level));
-		NDR_CHECK(ndr_pull_srvsvc_NetFileCtr(ndr, NDR_SCALARS, &r->ctr));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_srvsvc_NetFileCtr(ndr, NDR_BUFFERS, &r->ctr));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetFileInfoCtr(struct ndr_print *ndr, const char *name, const struct srvsvc_NetFileInfoCtr *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetFileInfoCtr");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "level", r->level);
-	ndr_print_set_switch_value(ndr, &r->ctr, r->level);
-	ndr_print_srvsvc_NetFileCtr(ndr, "ctr", &r->ctr);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSessInfo0(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSessInfo0 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->client));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->client) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->client, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->client, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->client, ndr_charset_length(r->client, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSessInfo0(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSessInfo0 *r)
-{
-	uint32_t _ptr_client;
-	TALLOC_CTX *_mem_save_client_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_client));
-		if (_ptr_client) {
-			NDR_PULL_ALLOC(ndr, r->client);
-		} else {
-			r->client = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->client) {
-			_mem_save_client_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->client, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->client));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->client));
-			if (ndr_get_array_length(ndr, &r->client) > ndr_get_array_size(ndr, &r->client)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->client), ndr_get_array_length(ndr, &r->client));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->client), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->client, ndr_get_array_length(ndr, &r->client), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_client_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSessInfo0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSessInfo0 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSessInfo0");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "client", r->client);
-	ndr->depth++;
-	if (r->client) {
-		ndr_print_string(ndr, "client", r->client);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSessCtr0(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSessCtr0 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetSessInfo0(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetSessInfo0(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSessCtr0(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSessCtr0 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetSessInfo0(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetSessInfo0(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSessCtr0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSessCtr0 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetSessCtr0");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetSessInfo0(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSessInfo1(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSessInfo1 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->client));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->user));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_open));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->time));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->idle_time));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->user_flags));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->client) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->client, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->client, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->client, ndr_charset_length(r->client, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->user) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->user, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->user, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->user, ndr_charset_length(r->user, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSessInfo1(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSessInfo1 *r)
-{
-	uint32_t _ptr_client;
-	TALLOC_CTX *_mem_save_client_0;
-	uint32_t _ptr_user;
-	TALLOC_CTX *_mem_save_user_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_client));
-		if (_ptr_client) {
-			NDR_PULL_ALLOC(ndr, r->client);
-		} else {
-			r->client = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_user));
-		if (_ptr_user) {
-			NDR_PULL_ALLOC(ndr, r->user);
-		} else {
-			r->user = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_open));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->time));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->idle_time));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->user_flags));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->client) {
-			_mem_save_client_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->client, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->client));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->client));
-			if (ndr_get_array_length(ndr, &r->client) > ndr_get_array_size(ndr, &r->client)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->client), ndr_get_array_length(ndr, &r->client));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->client), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->client, ndr_get_array_length(ndr, &r->client), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_client_0, 0);
-		}
-		if (r->user) {
-			_mem_save_user_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->user, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->user));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->user));
-			if (ndr_get_array_length(ndr, &r->user) > ndr_get_array_size(ndr, &r->user)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->user), ndr_get_array_length(ndr, &r->user));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->user), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->user, ndr_get_array_length(ndr, &r->user), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSessInfo1(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSessInfo1 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSessInfo1");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "client", r->client);
-	ndr->depth++;
-	if (r->client) {
-		ndr_print_string(ndr, "client", r->client);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "user", r->user);
-	ndr->depth++;
-	if (r->user) {
-		ndr_print_string(ndr, "user", r->user);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "num_open", r->num_open);
-	ndr_print_uint32(ndr, "time", r->time);
-	ndr_print_uint32(ndr, "idle_time", r->idle_time);
-	ndr_print_uint32(ndr, "user_flags", r->user_flags);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSessCtr1(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSessCtr1 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetSessInfo1(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetSessInfo1(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSessCtr1(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSessCtr1 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetSessInfo1(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetSessInfo1(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSessCtr1(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSessCtr1 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetSessCtr1");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetSessInfo1(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSessInfo2(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSessInfo2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->client));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->user));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_open));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->time));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->idle_time));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->user_flags));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->client_type));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->client) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->client, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->client, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->client, ndr_charset_length(r->client, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->user) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->user, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->user, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->user, ndr_charset_length(r->user, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->client_type) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->client_type, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->client_type, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->client_type, ndr_charset_length(r->client_type, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSessInfo2(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSessInfo2 *r)
-{
-	uint32_t _ptr_client;
-	TALLOC_CTX *_mem_save_client_0;
-	uint32_t _ptr_user;
-	TALLOC_CTX *_mem_save_user_0;
-	uint32_t _ptr_client_type;
-	TALLOC_CTX *_mem_save_client_type_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_client));
-		if (_ptr_client) {
-			NDR_PULL_ALLOC(ndr, r->client);
-		} else {
-			r->client = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_user));
-		if (_ptr_user) {
-			NDR_PULL_ALLOC(ndr, r->user);
-		} else {
-			r->user = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_open));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->time));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->idle_time));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->user_flags));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_client_type));
-		if (_ptr_client_type) {
-			NDR_PULL_ALLOC(ndr, r->client_type);
-		} else {
-			r->client_type = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->client) {
-			_mem_save_client_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->client, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->client));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->client));
-			if (ndr_get_array_length(ndr, &r->client) > ndr_get_array_size(ndr, &r->client)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->client), ndr_get_array_length(ndr, &r->client));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->client), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->client, ndr_get_array_length(ndr, &r->client), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_client_0, 0);
-		}
-		if (r->user) {
-			_mem_save_user_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->user, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->user));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->user));
-			if (ndr_get_array_length(ndr, &r->user) > ndr_get_array_size(ndr, &r->user)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->user), ndr_get_array_length(ndr, &r->user));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->user), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->user, ndr_get_array_length(ndr, &r->user), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_0, 0);
-		}
-		if (r->client_type) {
-			_mem_save_client_type_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->client_type, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->client_type));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->client_type));
-			if (ndr_get_array_length(ndr, &r->client_type) > ndr_get_array_size(ndr, &r->client_type)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->client_type), ndr_get_array_length(ndr, &r->client_type));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->client_type), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->client_type, ndr_get_array_length(ndr, &r->client_type), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_client_type_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSessInfo2(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSessInfo2 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSessInfo2");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "client", r->client);
-	ndr->depth++;
-	if (r->client) {
-		ndr_print_string(ndr, "client", r->client);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "user", r->user);
-	ndr->depth++;
-	if (r->user) {
-		ndr_print_string(ndr, "user", r->user);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "num_open", r->num_open);
-	ndr_print_uint32(ndr, "time", r->time);
-	ndr_print_uint32(ndr, "idle_time", r->idle_time);
-	ndr_print_uint32(ndr, "user_flags", r->user_flags);
-	ndr_print_ptr(ndr, "client_type", r->client_type);
-	ndr->depth++;
-	if (r->client_type) {
-		ndr_print_string(ndr, "client_type", r->client_type);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSessCtr2(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSessCtr2 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetSessInfo2(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetSessInfo2(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSessCtr2(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSessCtr2 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetSessInfo2(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetSessInfo2(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSessCtr2(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSessCtr2 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetSessCtr2");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetSessInfo2(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSessInfo10(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSessInfo10 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->client));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->user));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->time));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->idle_time));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->client) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->client, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->client, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->client, ndr_charset_length(r->client, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->user) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->user, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->user, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->user, ndr_charset_length(r->user, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSessInfo10(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSessInfo10 *r)
-{
-	uint32_t _ptr_client;
-	TALLOC_CTX *_mem_save_client_0;
-	uint32_t _ptr_user;
-	TALLOC_CTX *_mem_save_user_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_client));
-		if (_ptr_client) {
-			NDR_PULL_ALLOC(ndr, r->client);
-		} else {
-			r->client = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_user));
-		if (_ptr_user) {
-			NDR_PULL_ALLOC(ndr, r->user);
-		} else {
-			r->user = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->time));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->idle_time));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->client) {
-			_mem_save_client_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->client, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->client));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->client));
-			if (ndr_get_array_length(ndr, &r->client) > ndr_get_array_size(ndr, &r->client)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->client), ndr_get_array_length(ndr, &r->client));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->client), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->client, ndr_get_array_length(ndr, &r->client), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_client_0, 0);
-		}
-		if (r->user) {
-			_mem_save_user_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->user, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->user));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->user));
-			if (ndr_get_array_length(ndr, &r->user) > ndr_get_array_size(ndr, &r->user)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->user), ndr_get_array_length(ndr, &r->user));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->user), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->user, ndr_get_array_length(ndr, &r->user), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSessInfo10(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSessInfo10 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSessInfo10");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "client", r->client);
-	ndr->depth++;
-	if (r->client) {
-		ndr_print_string(ndr, "client", r->client);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "user", r->user);
-	ndr->depth++;
-	if (r->user) {
-		ndr_print_string(ndr, "user", r->user);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "time", r->time);
-	ndr_print_uint32(ndr, "idle_time", r->idle_time);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSessCtr10(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSessCtr10 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetSessInfo10(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetSessInfo10(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSessCtr10(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSessCtr10 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetSessInfo10(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetSessInfo10(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSessCtr10(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSessCtr10 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetSessCtr10");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetSessInfo10(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSessInfo502(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSessInfo502 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->client));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->user));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_open));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->time));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->idle_time));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->user_flags));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->client_type));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->transport));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->client) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->client, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->client, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->client, ndr_charset_length(r->client, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->user) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->user, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->user, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->user, ndr_charset_length(r->user, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->client_type) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->client_type, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->client_type, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->client_type, ndr_charset_length(r->client_type, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->transport) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->transport, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->transport, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->transport, ndr_charset_length(r->transport, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSessInfo502(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSessInfo502 *r)
-{
-	uint32_t _ptr_client;
-	TALLOC_CTX *_mem_save_client_0;
-	uint32_t _ptr_user;
-	TALLOC_CTX *_mem_save_user_0;
-	uint32_t _ptr_client_type;
-	TALLOC_CTX *_mem_save_client_type_0;
-	uint32_t _ptr_transport;
-	TALLOC_CTX *_mem_save_transport_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_client));
-		if (_ptr_client) {
-			NDR_PULL_ALLOC(ndr, r->client);
-		} else {
-			r->client = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_user));
-		if (_ptr_user) {
-			NDR_PULL_ALLOC(ndr, r->user);
-		} else {
-			r->user = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_open));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->time));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->idle_time));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->user_flags));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_client_type));
-		if (_ptr_client_type) {
-			NDR_PULL_ALLOC(ndr, r->client_type);
-		} else {
-			r->client_type = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_transport));
-		if (_ptr_transport) {
-			NDR_PULL_ALLOC(ndr, r->transport);
-		} else {
-			r->transport = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->client) {
-			_mem_save_client_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->client, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->client));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->client));
-			if (ndr_get_array_length(ndr, &r->client) > ndr_get_array_size(ndr, &r->client)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->client), ndr_get_array_length(ndr, &r->client));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->client), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->client, ndr_get_array_length(ndr, &r->client), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_client_0, 0);
-		}
-		if (r->user) {
-			_mem_save_user_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->user, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->user));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->user));
-			if (ndr_get_array_length(ndr, &r->user) > ndr_get_array_size(ndr, &r->user)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->user), ndr_get_array_length(ndr, &r->user));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->user), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->user, ndr_get_array_length(ndr, &r->user), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_0, 0);
-		}
-		if (r->client_type) {
-			_mem_save_client_type_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->client_type, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->client_type));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->client_type));
-			if (ndr_get_array_length(ndr, &r->client_type) > ndr_get_array_size(ndr, &r->client_type)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->client_type), ndr_get_array_length(ndr, &r->client_type));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->client_type), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->client_type, ndr_get_array_length(ndr, &r->client_type), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_client_type_0, 0);
-		}
-		if (r->transport) {
-			_mem_save_transport_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->transport, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->transport));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->transport));
-			if (ndr_get_array_length(ndr, &r->transport) > ndr_get_array_size(ndr, &r->transport)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->transport), ndr_get_array_length(ndr, &r->transport));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->transport), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->transport, ndr_get_array_length(ndr, &r->transport), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_transport_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSessInfo502(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSessInfo502 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSessInfo502");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "client", r->client);
-	ndr->depth++;
-	if (r->client) {
-		ndr_print_string(ndr, "client", r->client);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "user", r->user);
-	ndr->depth++;
-	if (r->user) {
-		ndr_print_string(ndr, "user", r->user);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "num_open", r->num_open);
-	ndr_print_uint32(ndr, "time", r->time);
-	ndr_print_uint32(ndr, "idle_time", r->idle_time);
-	ndr_print_uint32(ndr, "user_flags", r->user_flags);
-	ndr_print_ptr(ndr, "client_type", r->client_type);
-	ndr->depth++;
-	if (r->client_type) {
-		ndr_print_string(ndr, "client_type", r->client_type);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "transport", r->transport);
-	ndr->depth++;
-	if (r->transport) {
-		ndr_print_string(ndr, "transport", r->transport);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSessCtr502(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSessCtr502 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetSessInfo502(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetSessInfo502(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSessCtr502(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSessCtr502 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetSessInfo502(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetSessInfo502(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSessCtr502(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSessCtr502 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetSessCtr502");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetSessInfo502(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSessCtr(struct ndr_push *ndr, int ndr_flags, const union srvsvc_NetSessCtr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 0: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr0));
-			break; }
-
-			case 1: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr2));
-			break; }
-
-			case 10: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr10));
-			break; }
-
-			case 502: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr502));
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 0:
-				if (r->ctr0) {
-					NDR_CHECK(ndr_push_srvsvc_NetSessCtr0(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr0));
-				}
-			break;
-
-			case 1:
-				if (r->ctr1) {
-					NDR_CHECK(ndr_push_srvsvc_NetSessCtr1(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1));
-				}
-			break;
-
-			case 2:
-				if (r->ctr2) {
-					NDR_CHECK(ndr_push_srvsvc_NetSessCtr2(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr2));
-				}
-			break;
-
-			case 10:
-				if (r->ctr10) {
-					NDR_CHECK(ndr_push_srvsvc_NetSessCtr10(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr10));
-				}
-			break;
-
-			case 502:
-				if (r->ctr502) {
-					NDR_CHECK(ndr_push_srvsvc_NetSessCtr502(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr502));
-				}
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSessCtr(struct ndr_pull *ndr, int ndr_flags, union srvsvc_NetSessCtr *r)
-{
-	int level;
-	uint32_t _level;
-	TALLOC_CTX *_mem_save_ctr0_0;
-	TALLOC_CTX *_mem_save_ctr1_0;
-	TALLOC_CTX *_mem_save_ctr2_0;
-	TALLOC_CTX *_mem_save_ctr10_0;
-	TALLOC_CTX *_mem_save_ctr502_0;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 0: {
-				uint32_t _ptr_ctr0;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr0));
-				if (_ptr_ctr0) {
-					NDR_PULL_ALLOC(ndr, r->ctr0);
-				} else {
-					r->ctr0 = NULL;
-				}
-			break; }
-
-			case 1: {
-				uint32_t _ptr_ctr1;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr1));
-				if (_ptr_ctr1) {
-					NDR_PULL_ALLOC(ndr, r->ctr1);
-				} else {
-					r->ctr1 = NULL;
-				}
-			break; }
-
-			case 2: {
-				uint32_t _ptr_ctr2;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr2));
-				if (_ptr_ctr2) {
-					NDR_PULL_ALLOC(ndr, r->ctr2);
-				} else {
-					r->ctr2 = NULL;
-				}
-			break; }
-
-			case 10: {
-				uint32_t _ptr_ctr10;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr10));
-				if (_ptr_ctr10) {
-					NDR_PULL_ALLOC(ndr, r->ctr10);
-				} else {
-					r->ctr10 = NULL;
-				}
-			break; }
-
-			case 502: {
-				uint32_t _ptr_ctr502;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr502));
-				if (_ptr_ctr502) {
-					NDR_PULL_ALLOC(ndr, r->ctr502);
-				} else {
-					r->ctr502 = NULL;
-				}
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 0:
-				if (r->ctr0) {
-					_mem_save_ctr0_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr0, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSessCtr0(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr0));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr0_0, 0);
-				}
-			break;
-
-			case 1:
-				if (r->ctr1) {
-					_mem_save_ctr1_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr1, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSessCtr1(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr1_0, 0);
-				}
-			break;
-
-			case 2:
-				if (r->ctr2) {
-					_mem_save_ctr2_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr2, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSessCtr2(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr2));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr2_0, 0);
-				}
-			break;
-
-			case 10:
-				if (r->ctr10) {
-					_mem_save_ctr10_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr10, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSessCtr10(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr10));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr10_0, 0);
-				}
-			break;
-
-			case 502:
-				if (r->ctr502) {
-					_mem_save_ctr502_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr502, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSessCtr502(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr502));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr502_0, 0);
-				}
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSessCtr(struct ndr_print *ndr, const char *name, const union srvsvc_NetSessCtr *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "srvsvc_NetSessCtr");
-	switch (level) {
-		case 0:
-			ndr_print_ptr(ndr, "ctr0", r->ctr0);
-			ndr->depth++;
-			if (r->ctr0) {
-				ndr_print_srvsvc_NetSessCtr0(ndr, "ctr0", r->ctr0);
-			}
-			ndr->depth--;
-		break;
-
-		case 1:
-			ndr_print_ptr(ndr, "ctr1", r->ctr1);
-			ndr->depth++;
-			if (r->ctr1) {
-				ndr_print_srvsvc_NetSessCtr1(ndr, "ctr1", r->ctr1);
-			}
-			ndr->depth--;
-		break;
-
-		case 2:
-			ndr_print_ptr(ndr, "ctr2", r->ctr2);
-			ndr->depth++;
-			if (r->ctr2) {
-				ndr_print_srvsvc_NetSessCtr2(ndr, "ctr2", r->ctr2);
-			}
-			ndr->depth--;
-		break;
-
-		case 10:
-			ndr_print_ptr(ndr, "ctr10", r->ctr10);
-			ndr->depth++;
-			if (r->ctr10) {
-				ndr_print_srvsvc_NetSessCtr10(ndr, "ctr10", r->ctr10);
-			}
-			ndr->depth--;
-		break;
-
-		case 502:
-			ndr_print_ptr(ndr, "ctr502", r->ctr502);
-			ndr->depth++;
-			if (r->ctr502) {
-				ndr_print_srvsvc_NetSessCtr502(ndr, "ctr502", r->ctr502);
-			}
-			ndr->depth--;
-		break;
-
-		default:
-		break;
-
-	}
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSessInfoCtr(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSessInfoCtr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->level));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->ctr, r->level));
-		NDR_CHECK(ndr_push_srvsvc_NetSessCtr(ndr, NDR_SCALARS, &r->ctr));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_srvsvc_NetSessCtr(ndr, NDR_BUFFERS, &r->ctr));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSessInfoCtr(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSessInfoCtr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->level));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->ctr, r->level));
-		NDR_CHECK(ndr_pull_srvsvc_NetSessCtr(ndr, NDR_SCALARS, &r->ctr));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_srvsvc_NetSessCtr(ndr, NDR_BUFFERS, &r->ctr));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSessInfoCtr(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSessInfoCtr *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSessInfoCtr");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "level", r->level);
-	ndr_print_set_switch_value(ndr, &r->ctr, r->level);
-	ndr_print_srvsvc_NetSessCtr(ndr, "ctr", &r->ctr);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_ShareType(struct ndr_push *ndr, int ndr_flags, enum srvsvc_ShareType r)
-{
-	{
-		uint32_t _flags_save_ENUM = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-		ndr->flags = _flags_save_ENUM;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_ShareType(struct ndr_pull *ndr, int ndr_flags, enum srvsvc_ShareType *r)
-{
-	uint32_t v;
-	{
-		uint32_t _flags_save_ENUM = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-		*r = v;
-		ndr->flags = _flags_save_ENUM;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_ShareType(struct ndr_print *ndr, const char *name, enum srvsvc_ShareType r)
-{
-	const char *val = NULL;
-
-	{
-		uint32_t _flags_save_ENUM = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		switch (r) {
-			case STYPE_DISKTREE: val = "STYPE_DISKTREE"; break;
-			case STYPE_DISKTREE_TEMPORARY: val = "STYPE_DISKTREE_TEMPORARY"; break;
-			case STYPE_DISKTREE_HIDDEN: val = "STYPE_DISKTREE_HIDDEN"; break;
-			case STYPE_PRINTQ: val = "STYPE_PRINTQ"; break;
-			case STYPE_PRINTQ_TEMPORARY: val = "STYPE_PRINTQ_TEMPORARY"; break;
-			case STYPE_PRINTQ_HIDDEN: val = "STYPE_PRINTQ_HIDDEN"; break;
-			case STYPE_DEVICE: val = "STYPE_DEVICE"; break;
-			case STYPE_DEVICE_TEMPORARY: val = "STYPE_DEVICE_TEMPORARY"; break;
-			case STYPE_DEVICE_HIDDEN: val = "STYPE_DEVICE_HIDDEN"; break;
-			case STYPE_IPC: val = "STYPE_IPC"; break;
-			case STYPE_IPC_TEMPORARY: val = "STYPE_IPC_TEMPORARY"; break;
-			case STYPE_IPC_HIDDEN: val = "STYPE_IPC_HIDDEN"; break;
-		}
-		ndr_print_enum(ndr, name, "ENUM", val, r);
-		ndr->flags = _flags_save_ENUM;
-	}
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareInfo0(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetShareInfo0 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->name, ndr_charset_length(r->name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareInfo0(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetShareInfo0 *r)
-{
-	uint32_t _ptr_name;
-	TALLOC_CTX *_mem_save_name_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_name));
-		if (_ptr_name) {
-			NDR_PULL_ALLOC(ndr, r->name);
-		} else {
-			r->name = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->name));
-			if (ndr_get_array_length(ndr, &r->name) > ndr_get_array_size(ndr, &r->name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->name), ndr_get_array_length(ndr, &r->name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->name, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareInfo0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareInfo0 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetShareInfo0");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "name", r->name);
-	ndr->depth++;
-	if (r->name) {
-		ndr_print_string(ndr, "name", r->name);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareCtr0(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetShareCtr0 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetShareInfo0(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetShareInfo0(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareCtr0(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetShareCtr0 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetShareInfo0(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetShareInfo0(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareCtr0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareCtr0 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetShareCtr0");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetShareInfo0(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareInfo1(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetShareInfo1 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->name));
-		NDR_CHECK(ndr_push_srvsvc_ShareType(ndr, NDR_SCALARS, r->type));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->comment));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->name, ndr_charset_length(r->name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->comment) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->comment, ndr_charset_length(r->comment, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareInfo1(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetShareInfo1 *r)
-{
-	uint32_t _ptr_name;
-	TALLOC_CTX *_mem_save_name_0;
-	uint32_t _ptr_comment;
-	TALLOC_CTX *_mem_save_comment_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_name));
-		if (_ptr_name) {
-			NDR_PULL_ALLOC(ndr, r->name);
-		} else {
-			r->name = NULL;
-		}
-		NDR_CHECK(ndr_pull_srvsvc_ShareType(ndr, NDR_SCALARS, &r->type));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_comment));
-		if (_ptr_comment) {
-			NDR_PULL_ALLOC(ndr, r->comment);
-		} else {
-			r->comment = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->name));
-			if (ndr_get_array_length(ndr, &r->name) > ndr_get_array_size(ndr, &r->name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->name), ndr_get_array_length(ndr, &r->name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->name, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, 0);
-		}
-		if (r->comment) {
-			_mem_save_comment_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->comment, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->comment));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->comment));
-			if (ndr_get_array_length(ndr, &r->comment) > ndr_get_array_size(ndr, &r->comment)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->comment), ndr_get_array_length(ndr, &r->comment));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->comment, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_comment_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareInfo1(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareInfo1 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetShareInfo1");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "name", r->name);
-	ndr->depth++;
-	if (r->name) {
-		ndr_print_string(ndr, "name", r->name);
-	}
-	ndr->depth--;
-	ndr_print_srvsvc_ShareType(ndr, "type", r->type);
-	ndr_print_ptr(ndr, "comment", r->comment);
-	ndr->depth++;
-	if (r->comment) {
-		ndr_print_string(ndr, "comment", r->comment);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareCtr1(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetShareCtr1 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetShareInfo1(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetShareInfo1(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareCtr1(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetShareCtr1 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetShareInfo1(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetShareInfo1(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareCtr1(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareCtr1 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetShareCtr1");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetShareInfo1(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareInfo2(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetShareInfo2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->name));
-		NDR_CHECK(ndr_push_srvsvc_ShareType(ndr, NDR_SCALARS, r->type));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->comment));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->permissions));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->max_users));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->current_users));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->path));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->password));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->name, ndr_charset_length(r->name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->comment) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->comment, ndr_charset_length(r->comment, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->path) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->path, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->path, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->path, ndr_charset_length(r->path, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->password) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->password, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->password, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->password, ndr_charset_length(r->password, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareInfo2(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetShareInfo2 *r)
-{
-	uint32_t _ptr_name;
-	TALLOC_CTX *_mem_save_name_0;
-	uint32_t _ptr_comment;
-	TALLOC_CTX *_mem_save_comment_0;
-	uint32_t _ptr_path;
-	TALLOC_CTX *_mem_save_path_0;
-	uint32_t _ptr_password;
-	TALLOC_CTX *_mem_save_password_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_name));
-		if (_ptr_name) {
-			NDR_PULL_ALLOC(ndr, r->name);
-		} else {
-			r->name = NULL;
-		}
-		NDR_CHECK(ndr_pull_srvsvc_ShareType(ndr, NDR_SCALARS, &r->type));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_comment));
-		if (_ptr_comment) {
-			NDR_PULL_ALLOC(ndr, r->comment);
-		} else {
-			r->comment = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->permissions));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->max_users));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->current_users));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_path));
-		if (_ptr_path) {
-			NDR_PULL_ALLOC(ndr, r->path);
-		} else {
-			r->path = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_password));
-		if (_ptr_password) {
-			NDR_PULL_ALLOC(ndr, r->password);
-		} else {
-			r->password = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->name));
-			if (ndr_get_array_length(ndr, &r->name) > ndr_get_array_size(ndr, &r->name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->name), ndr_get_array_length(ndr, &r->name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->name, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, 0);
-		}
-		if (r->comment) {
-			_mem_save_comment_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->comment, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->comment));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->comment));
-			if (ndr_get_array_length(ndr, &r->comment) > ndr_get_array_size(ndr, &r->comment)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->comment), ndr_get_array_length(ndr, &r->comment));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->comment, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_comment_0, 0);
-		}
-		if (r->path) {
-			_mem_save_path_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->path, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->path));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->path));
-			if (ndr_get_array_length(ndr, &r->path) > ndr_get_array_size(ndr, &r->path)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->path), ndr_get_array_length(ndr, &r->path));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->path), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->path, ndr_get_array_length(ndr, &r->path), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_path_0, 0);
-		}
-		if (r->password) {
-			_mem_save_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->password, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->password));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->password));
-			if (ndr_get_array_length(ndr, &r->password) > ndr_get_array_size(ndr, &r->password)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->password), ndr_get_array_length(ndr, &r->password));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->password), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->password, ndr_get_array_length(ndr, &r->password), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_password_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareInfo2(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareInfo2 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetShareInfo2");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "name", r->name);
-	ndr->depth++;
-	if (r->name) {
-		ndr_print_string(ndr, "name", r->name);
-	}
-	ndr->depth--;
-	ndr_print_srvsvc_ShareType(ndr, "type", r->type);
-	ndr_print_ptr(ndr, "comment", r->comment);
-	ndr->depth++;
-	if (r->comment) {
-		ndr_print_string(ndr, "comment", r->comment);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "permissions", r->permissions);
-	ndr_print_uint32(ndr, "max_users", r->max_users);
-	ndr_print_uint32(ndr, "current_users", r->current_users);
-	ndr_print_ptr(ndr, "path", r->path);
-	ndr->depth++;
-	if (r->path) {
-		ndr_print_string(ndr, "path", r->path);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "password", r->password);
-	ndr->depth++;
-	if (r->password) {
-		ndr_print_string(ndr, "password", r->password);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareCtr2(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetShareCtr2 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetShareInfo2(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetShareInfo2(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareCtr2(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetShareCtr2 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetShareInfo2(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetShareInfo2(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareCtr2(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareCtr2 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetShareCtr2");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetShareInfo2(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareInfo501(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetShareInfo501 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->name));
-		NDR_CHECK(ndr_push_srvsvc_ShareType(ndr, NDR_SCALARS, r->type));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->comment));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->csc_policy));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->name, ndr_charset_length(r->name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->comment) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->comment, ndr_charset_length(r->comment, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareInfo501(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetShareInfo501 *r)
-{
-	uint32_t _ptr_name;
-	TALLOC_CTX *_mem_save_name_0;
-	uint32_t _ptr_comment;
-	TALLOC_CTX *_mem_save_comment_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_name));
-		if (_ptr_name) {
-			NDR_PULL_ALLOC(ndr, r->name);
-		} else {
-			r->name = NULL;
-		}
-		NDR_CHECK(ndr_pull_srvsvc_ShareType(ndr, NDR_SCALARS, &r->type));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_comment));
-		if (_ptr_comment) {
-			NDR_PULL_ALLOC(ndr, r->comment);
-		} else {
-			r->comment = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->csc_policy));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->name));
-			if (ndr_get_array_length(ndr, &r->name) > ndr_get_array_size(ndr, &r->name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->name), ndr_get_array_length(ndr, &r->name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->name, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, 0);
-		}
-		if (r->comment) {
-			_mem_save_comment_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->comment, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->comment));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->comment));
-			if (ndr_get_array_length(ndr, &r->comment) > ndr_get_array_size(ndr, &r->comment)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->comment), ndr_get_array_length(ndr, &r->comment));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->comment, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_comment_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareInfo501(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareInfo501 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetShareInfo501");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "name", r->name);
-	ndr->depth++;
-	if (r->name) {
-		ndr_print_string(ndr, "name", r->name);
-	}
-	ndr->depth--;
-	ndr_print_srvsvc_ShareType(ndr, "type", r->type);
-	ndr_print_ptr(ndr, "comment", r->comment);
-	ndr->depth++;
-	if (r->comment) {
-		ndr_print_string(ndr, "comment", r->comment);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "csc_policy", r->csc_policy);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareCtr501(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetShareCtr501 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetShareInfo501(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetShareInfo501(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareCtr501(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetShareCtr501 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetShareInfo501(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetShareInfo501(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareCtr501(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareCtr501 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetShareCtr501");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetShareInfo501(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareInfo502(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetShareInfo502 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->name));
-		NDR_CHECK(ndr_push_srvsvc_ShareType(ndr, NDR_SCALARS, r->type));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->comment));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->permissions));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->max_users));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->current_users));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->path));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->password));
-		NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_SCALARS, &r->sd_buf));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->name, ndr_charset_length(r->name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->comment) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->comment, ndr_charset_length(r->comment, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->path) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->path, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->path, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->path, ndr_charset_length(r->path, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->password) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->password, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->password, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->password, ndr_charset_length(r->password, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_BUFFERS, &r->sd_buf));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareInfo502(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetShareInfo502 *r)
-{
-	uint32_t _ptr_name;
-	TALLOC_CTX *_mem_save_name_0;
-	uint32_t _ptr_comment;
-	TALLOC_CTX *_mem_save_comment_0;
-	uint32_t _ptr_path;
-	TALLOC_CTX *_mem_save_path_0;
-	uint32_t _ptr_password;
-	TALLOC_CTX *_mem_save_password_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_name));
-		if (_ptr_name) {
-			NDR_PULL_ALLOC(ndr, r->name);
-		} else {
-			r->name = NULL;
-		}
-		NDR_CHECK(ndr_pull_srvsvc_ShareType(ndr, NDR_SCALARS, &r->type));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_comment));
-		if (_ptr_comment) {
-			NDR_PULL_ALLOC(ndr, r->comment);
-		} else {
-			r->comment = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->permissions));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->max_users));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->current_users));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_path));
-		if (_ptr_path) {
-			NDR_PULL_ALLOC(ndr, r->path);
-		} else {
-			r->path = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_password));
-		if (_ptr_password) {
-			NDR_PULL_ALLOC(ndr, r->password);
-		} else {
-			r->password = NULL;
-		}
-		NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_SCALARS, &r->sd_buf));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->name));
-			if (ndr_get_array_length(ndr, &r->name) > ndr_get_array_size(ndr, &r->name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->name), ndr_get_array_length(ndr, &r->name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->name, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, 0);
-		}
-		if (r->comment) {
-			_mem_save_comment_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->comment, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->comment));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->comment));
-			if (ndr_get_array_length(ndr, &r->comment) > ndr_get_array_size(ndr, &r->comment)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->comment), ndr_get_array_length(ndr, &r->comment));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->comment, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_comment_0, 0);
-		}
-		if (r->path) {
-			_mem_save_path_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->path, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->path));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->path));
-			if (ndr_get_array_length(ndr, &r->path) > ndr_get_array_size(ndr, &r->path)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->path), ndr_get_array_length(ndr, &r->path));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->path), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->path, ndr_get_array_length(ndr, &r->path), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_path_0, 0);
-		}
-		if (r->password) {
-			_mem_save_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->password, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->password));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->password));
-			if (ndr_get_array_length(ndr, &r->password) > ndr_get_array_size(ndr, &r->password)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->password), ndr_get_array_length(ndr, &r->password));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->password), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->password, ndr_get_array_length(ndr, &r->password), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_password_0, 0);
-		}
-		NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_BUFFERS, &r->sd_buf));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareInfo502(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareInfo502 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetShareInfo502");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "name", r->name);
-	ndr->depth++;
-	if (r->name) {
-		ndr_print_string(ndr, "name", r->name);
-	}
-	ndr->depth--;
-	ndr_print_srvsvc_ShareType(ndr, "type", r->type);
-	ndr_print_ptr(ndr, "comment", r->comment);
-	ndr->depth++;
-	if (r->comment) {
-		ndr_print_string(ndr, "comment", r->comment);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "permissions", r->permissions);
-	ndr_print_uint32(ndr, "max_users", r->max_users);
-	ndr_print_uint32(ndr, "current_users", r->current_users);
-	ndr_print_ptr(ndr, "path", r->path);
-	ndr->depth++;
-	if (r->path) {
-		ndr_print_string(ndr, "path", r->path);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "password", r->password);
-	ndr->depth++;
-	if (r->password) {
-		ndr_print_string(ndr, "password", r->password);
-	}
-	ndr->depth--;
-	ndr_print_sec_desc_buf(ndr, "sd_buf", &r->sd_buf);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareCtr502(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetShareCtr502 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetShareInfo502(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetShareInfo502(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareCtr502(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetShareCtr502 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetShareInfo502(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetShareInfo502(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareCtr502(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareCtr502 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetShareCtr502");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetShareInfo502(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareInfo1004(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetShareInfo1004 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->comment));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->comment) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->comment, ndr_charset_length(r->comment, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareInfo1004(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetShareInfo1004 *r)
-{
-	uint32_t _ptr_comment;
-	TALLOC_CTX *_mem_save_comment_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_comment));
-		if (_ptr_comment) {
-			NDR_PULL_ALLOC(ndr, r->comment);
-		} else {
-			r->comment = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->comment) {
-			_mem_save_comment_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->comment, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->comment));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->comment));
-			if (ndr_get_array_length(ndr, &r->comment) > ndr_get_array_size(ndr, &r->comment)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->comment), ndr_get_array_length(ndr, &r->comment));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->comment, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_comment_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareInfo1004(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareInfo1004 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetShareInfo1004");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "comment", r->comment);
-	ndr->depth++;
-	if (r->comment) {
-		ndr_print_string(ndr, "comment", r->comment);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareCtr1004(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetShareCtr1004 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetShareInfo1004(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetShareInfo1004(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareCtr1004(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetShareCtr1004 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetShareInfo1004(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetShareInfo1004(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareCtr1004(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareCtr1004 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetShareCtr1004");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetShareInfo1004(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_NetShareInfo1005Flags(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_NetShareInfo1005Flags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_NetShareInfo1005Flags(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SHARE_1005_IN_DFS", SHARE_1005_IN_DFS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SHARE_1005_DFS_ROOT", SHARE_1005_DFS_ROOT, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareInfo1005(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetShareInfo1005 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_NetShareInfo1005Flags(ndr, NDR_SCALARS, r->dfs_flags));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareInfo1005(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetShareInfo1005 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_NetShareInfo1005Flags(ndr, NDR_SCALARS, &r->dfs_flags));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareInfo1005(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareInfo1005 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetShareInfo1005");
-	ndr->depth++;
-	ndr_print_NetShareInfo1005Flags(ndr, "dfs_flags", r->dfs_flags);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareCtr1005(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetShareCtr1005 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetShareInfo1005(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareCtr1005(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetShareCtr1005 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetShareInfo1005(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareCtr1005(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareCtr1005 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetShareCtr1005");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetShareInfo1005(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareInfo1006(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetShareInfo1006 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->max_users));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareInfo1006(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetShareInfo1006 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->max_users));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareInfo1006(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareInfo1006 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetShareInfo1006");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "max_users", r->max_users);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareCtr1006(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetShareCtr1006 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetShareInfo1006(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareCtr1006(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetShareCtr1006 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetShareInfo1006(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareCtr1006(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareCtr1006 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetShareCtr1006");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetShareInfo1006(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareInfo1007(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetShareInfo1007 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->flags));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->alternate_directory_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->alternate_directory_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->alternate_directory_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->alternate_directory_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->alternate_directory_name, ndr_charset_length(r->alternate_directory_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareInfo1007(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetShareInfo1007 *r)
-{
-	uint32_t _ptr_alternate_directory_name;
-	TALLOC_CTX *_mem_save_alternate_directory_name_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->flags));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_alternate_directory_name));
-		if (_ptr_alternate_directory_name) {
-			NDR_PULL_ALLOC(ndr, r->alternate_directory_name);
-		} else {
-			r->alternate_directory_name = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->alternate_directory_name) {
-			_mem_save_alternate_directory_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->alternate_directory_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->alternate_directory_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->alternate_directory_name));
-			if (ndr_get_array_length(ndr, &r->alternate_directory_name) > ndr_get_array_size(ndr, &r->alternate_directory_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->alternate_directory_name), ndr_get_array_length(ndr, &r->alternate_directory_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->alternate_directory_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->alternate_directory_name, ndr_get_array_length(ndr, &r->alternate_directory_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_alternate_directory_name_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareInfo1007(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareInfo1007 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetShareInfo1007");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "flags", r->flags);
-	ndr_print_ptr(ndr, "alternate_directory_name", r->alternate_directory_name);
-	ndr->depth++;
-	if (r->alternate_directory_name) {
-		ndr_print_string(ndr, "alternate_directory_name", r->alternate_directory_name);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareCtr1007(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetShareCtr1007 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetShareInfo1007(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetShareInfo1007(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareCtr1007(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetShareCtr1007 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetShareInfo1007(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetShareInfo1007(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareCtr1007(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareCtr1007 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetShareCtr1007");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetShareInfo1007(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareCtr1501(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetShareCtr1501 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareCtr1501(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetShareCtr1501 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareCtr1501(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareCtr1501 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetShareCtr1501");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_sec_desc_buf(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareInfo(struct ndr_push *ndr, int ndr_flags, const union srvsvc_NetShareInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 0: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info0));
-			break; }
-
-			case 1: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info2));
-			break; }
-
-			case 501: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info501));
-			break; }
-
-			case 502: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info502));
-			break; }
-
-			case 1004: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1004));
-			break; }
-
-			case 1005: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1005));
-			break; }
-
-			case 1006: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1006));
-			break; }
-
-			case 1007: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1007));
-			break; }
-
-			case 1501: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1501));
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 0:
-				if (r->info0) {
-					NDR_CHECK(ndr_push_srvsvc_NetShareInfo0(ndr, NDR_SCALARS|NDR_BUFFERS, r->info0));
-				}
-			break;
-
-			case 1:
-				if (r->info1) {
-					NDR_CHECK(ndr_push_srvsvc_NetShareInfo1(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1));
-				}
-			break;
-
-			case 2:
-				if (r->info2) {
-					NDR_CHECK(ndr_push_srvsvc_NetShareInfo2(ndr, NDR_SCALARS|NDR_BUFFERS, r->info2));
-				}
-			break;
-
-			case 501:
-				if (r->info501) {
-					NDR_CHECK(ndr_push_srvsvc_NetShareInfo501(ndr, NDR_SCALARS|NDR_BUFFERS, r->info501));
-				}
-			break;
-
-			case 502:
-				if (r->info502) {
-					NDR_CHECK(ndr_push_srvsvc_NetShareInfo502(ndr, NDR_SCALARS|NDR_BUFFERS, r->info502));
-				}
-			break;
-
-			case 1004:
-				if (r->info1004) {
-					NDR_CHECK(ndr_push_srvsvc_NetShareInfo1004(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1004));
-				}
-			break;
-
-			case 1005:
-				if (r->info1005) {
-					NDR_CHECK(ndr_push_srvsvc_NetShareInfo1005(ndr, NDR_SCALARS, r->info1005));
-				}
-			break;
-
-			case 1006:
-				if (r->info1006) {
-					NDR_CHECK(ndr_push_srvsvc_NetShareInfo1006(ndr, NDR_SCALARS, r->info1006));
-				}
-			break;
-
-			case 1007:
-				if (r->info1007) {
-					NDR_CHECK(ndr_push_srvsvc_NetShareInfo1007(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1007));
-				}
-			break;
-
-			case 1501:
-				if (r->info1501) {
-					NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1501));
-				}
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareInfo(struct ndr_pull *ndr, int ndr_flags, union srvsvc_NetShareInfo *r)
-{
-	int level;
-	uint32_t _level;
-	TALLOC_CTX *_mem_save_info0_0;
-	TALLOC_CTX *_mem_save_info1_0;
-	TALLOC_CTX *_mem_save_info2_0;
-	TALLOC_CTX *_mem_save_info501_0;
-	TALLOC_CTX *_mem_save_info502_0;
-	TALLOC_CTX *_mem_save_info1004_0;
-	TALLOC_CTX *_mem_save_info1005_0;
-	TALLOC_CTX *_mem_save_info1006_0;
-	TALLOC_CTX *_mem_save_info1007_0;
-	TALLOC_CTX *_mem_save_info1501_0;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 0: {
-				uint32_t _ptr_info0;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info0));
-				if (_ptr_info0) {
-					NDR_PULL_ALLOC(ndr, r->info0);
-				} else {
-					r->info0 = NULL;
-				}
-			break; }
-
-			case 1: {
-				uint32_t _ptr_info1;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1));
-				if (_ptr_info1) {
-					NDR_PULL_ALLOC(ndr, r->info1);
-				} else {
-					r->info1 = NULL;
-				}
-			break; }
-
-			case 2: {
-				uint32_t _ptr_info2;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info2));
-				if (_ptr_info2) {
-					NDR_PULL_ALLOC(ndr, r->info2);
-				} else {
-					r->info2 = NULL;
-				}
-			break; }
-
-			case 501: {
-				uint32_t _ptr_info501;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info501));
-				if (_ptr_info501) {
-					NDR_PULL_ALLOC(ndr, r->info501);
-				} else {
-					r->info501 = NULL;
-				}
-			break; }
-
-			case 502: {
-				uint32_t _ptr_info502;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info502));
-				if (_ptr_info502) {
-					NDR_PULL_ALLOC(ndr, r->info502);
-				} else {
-					r->info502 = NULL;
-				}
-			break; }
-
-			case 1004: {
-				uint32_t _ptr_info1004;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1004));
-				if (_ptr_info1004) {
-					NDR_PULL_ALLOC(ndr, r->info1004);
-				} else {
-					r->info1004 = NULL;
-				}
-			break; }
-
-			case 1005: {
-				uint32_t _ptr_info1005;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1005));
-				if (_ptr_info1005) {
-					NDR_PULL_ALLOC(ndr, r->info1005);
-				} else {
-					r->info1005 = NULL;
-				}
-			break; }
-
-			case 1006: {
-				uint32_t _ptr_info1006;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1006));
-				if (_ptr_info1006) {
-					NDR_PULL_ALLOC(ndr, r->info1006);
-				} else {
-					r->info1006 = NULL;
-				}
-			break; }
-
-			case 1007: {
-				uint32_t _ptr_info1007;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1007));
-				if (_ptr_info1007) {
-					NDR_PULL_ALLOC(ndr, r->info1007);
-				} else {
-					r->info1007 = NULL;
-				}
-			break; }
-
-			case 1501: {
-				uint32_t _ptr_info1501;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1501));
-				if (_ptr_info1501) {
-					NDR_PULL_ALLOC(ndr, r->info1501);
-				} else {
-					r->info1501 = NULL;
-				}
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 0:
-				if (r->info0) {
-					_mem_save_info0_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info0, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetShareInfo0(ndr, NDR_SCALARS|NDR_BUFFERS, r->info0));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info0_0, 0);
-				}
-			break;
-
-			case 1:
-				if (r->info1) {
-					_mem_save_info1_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetShareInfo1(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1_0, 0);
-				}
-			break;
-
-			case 2:
-				if (r->info2) {
-					_mem_save_info2_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info2, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetShareInfo2(ndr, NDR_SCALARS|NDR_BUFFERS, r->info2));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info2_0, 0);
-				}
-			break;
-
-			case 501:
-				if (r->info501) {
-					_mem_save_info501_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info501, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetShareInfo501(ndr, NDR_SCALARS|NDR_BUFFERS, r->info501));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info501_0, 0);
-				}
-			break;
-
-			case 502:
-				if (r->info502) {
-					_mem_save_info502_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info502, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetShareInfo502(ndr, NDR_SCALARS|NDR_BUFFERS, r->info502));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info502_0, 0);
-				}
-			break;
-
-			case 1004:
-				if (r->info1004) {
-					_mem_save_info1004_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1004, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetShareInfo1004(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1004));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1004_0, 0);
-				}
-			break;
-
-			case 1005:
-				if (r->info1005) {
-					_mem_save_info1005_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1005, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetShareInfo1005(ndr, NDR_SCALARS, r->info1005));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1005_0, 0);
-				}
-			break;
-
-			case 1006:
-				if (r->info1006) {
-					_mem_save_info1006_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1006, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetShareInfo1006(ndr, NDR_SCALARS, r->info1006));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1006_0, 0);
-				}
-			break;
-
-			case 1007:
-				if (r->info1007) {
-					_mem_save_info1007_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1007, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetShareInfo1007(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1007));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1007_0, 0);
-				}
-			break;
-
-			case 1501:
-				if (r->info1501) {
-					_mem_save_info1501_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1501, 0);
-					NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1501));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1501_0, 0);
-				}
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareInfo(struct ndr_print *ndr, const char *name, const union srvsvc_NetShareInfo *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "srvsvc_NetShareInfo");
-	switch (level) {
-		case 0:
-			ndr_print_ptr(ndr, "info0", r->info0);
-			ndr->depth++;
-			if (r->info0) {
-				ndr_print_srvsvc_NetShareInfo0(ndr, "info0", r->info0);
-			}
-			ndr->depth--;
-		break;
-
-		case 1:
-			ndr_print_ptr(ndr, "info1", r->info1);
-			ndr->depth++;
-			if (r->info1) {
-				ndr_print_srvsvc_NetShareInfo1(ndr, "info1", r->info1);
-			}
-			ndr->depth--;
-		break;
-
-		case 2:
-			ndr_print_ptr(ndr, "info2", r->info2);
-			ndr->depth++;
-			if (r->info2) {
-				ndr_print_srvsvc_NetShareInfo2(ndr, "info2", r->info2);
-			}
-			ndr->depth--;
-		break;
-
-		case 501:
-			ndr_print_ptr(ndr, "info501", r->info501);
-			ndr->depth++;
-			if (r->info501) {
-				ndr_print_srvsvc_NetShareInfo501(ndr, "info501", r->info501);
-			}
-			ndr->depth--;
-		break;
-
-		case 502:
-			ndr_print_ptr(ndr, "info502", r->info502);
-			ndr->depth++;
-			if (r->info502) {
-				ndr_print_srvsvc_NetShareInfo502(ndr, "info502", r->info502);
-			}
-			ndr->depth--;
-		break;
-
-		case 1004:
-			ndr_print_ptr(ndr, "info1004", r->info1004);
-			ndr->depth++;
-			if (r->info1004) {
-				ndr_print_srvsvc_NetShareInfo1004(ndr, "info1004", r->info1004);
-			}
-			ndr->depth--;
-		break;
-
-		case 1005:
-			ndr_print_ptr(ndr, "info1005", r->info1005);
-			ndr->depth++;
-			if (r->info1005) {
-				ndr_print_srvsvc_NetShareInfo1005(ndr, "info1005", r->info1005);
-			}
-			ndr->depth--;
-		break;
-
-		case 1006:
-			ndr_print_ptr(ndr, "info1006", r->info1006);
-			ndr->depth++;
-			if (r->info1006) {
-				ndr_print_srvsvc_NetShareInfo1006(ndr, "info1006", r->info1006);
-			}
-			ndr->depth--;
-		break;
-
-		case 1007:
-			ndr_print_ptr(ndr, "info1007", r->info1007);
-			ndr->depth++;
-			if (r->info1007) {
-				ndr_print_srvsvc_NetShareInfo1007(ndr, "info1007", r->info1007);
-			}
-			ndr->depth--;
-		break;
-
-		case 1501:
-			ndr_print_ptr(ndr, "info1501", r->info1501);
-			ndr->depth++;
-			if (r->info1501) {
-				ndr_print_sec_desc_buf(ndr, "info1501", r->info1501);
-			}
-			ndr->depth--;
-		break;
-
-		default:
-		break;
-
-	}
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareCtr(struct ndr_push *ndr, int ndr_flags, const union srvsvc_NetShareCtr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 0: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr0));
-			break; }
-
-			case 1: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr2));
-			break; }
-
-			case 501: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr501));
-			break; }
-
-			case 502: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr502));
-			break; }
-
-			case 1004: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr1004));
-			break; }
-
-			case 1005: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr1005));
-			break; }
-
-			case 1006: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr1006));
-			break; }
-
-			case 1007: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr1007));
-			break; }
-
-			case 1501: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr1501));
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 0:
-				if (r->ctr0) {
-					NDR_CHECK(ndr_push_srvsvc_NetShareCtr0(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr0));
-				}
-			break;
-
-			case 1:
-				if (r->ctr1) {
-					NDR_CHECK(ndr_push_srvsvc_NetShareCtr1(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1));
-				}
-			break;
-
-			case 2:
-				if (r->ctr2) {
-					NDR_CHECK(ndr_push_srvsvc_NetShareCtr2(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr2));
-				}
-			break;
-
-			case 501:
-				if (r->ctr501) {
-					NDR_CHECK(ndr_push_srvsvc_NetShareCtr501(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr501));
-				}
-			break;
-
-			case 502:
-				if (r->ctr502) {
-					NDR_CHECK(ndr_push_srvsvc_NetShareCtr502(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr502));
-				}
-			break;
-
-			case 1004:
-				if (r->ctr1004) {
-					NDR_CHECK(ndr_push_srvsvc_NetShareCtr1004(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1004));
-				}
-			break;
-
-			case 1005:
-				if (r->ctr1005) {
-					NDR_CHECK(ndr_push_srvsvc_NetShareCtr1005(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1005));
-				}
-			break;
-
-			case 1006:
-				if (r->ctr1006) {
-					NDR_CHECK(ndr_push_srvsvc_NetShareCtr1006(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1006));
-				}
-			break;
-
-			case 1007:
-				if (r->ctr1007) {
-					NDR_CHECK(ndr_push_srvsvc_NetShareCtr1007(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1007));
-				}
-			break;
-
-			case 1501:
-				if (r->ctr1501) {
-					NDR_CHECK(ndr_push_srvsvc_NetShareCtr1501(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1501));
-				}
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareCtr(struct ndr_pull *ndr, int ndr_flags, union srvsvc_NetShareCtr *r)
-{
-	int level;
-	uint32_t _level;
-	TALLOC_CTX *_mem_save_ctr0_0;
-	TALLOC_CTX *_mem_save_ctr1_0;
-	TALLOC_CTX *_mem_save_ctr2_0;
-	TALLOC_CTX *_mem_save_ctr501_0;
-	TALLOC_CTX *_mem_save_ctr502_0;
-	TALLOC_CTX *_mem_save_ctr1004_0;
-	TALLOC_CTX *_mem_save_ctr1005_0;
-	TALLOC_CTX *_mem_save_ctr1006_0;
-	TALLOC_CTX *_mem_save_ctr1007_0;
-	TALLOC_CTX *_mem_save_ctr1501_0;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 0: {
-				uint32_t _ptr_ctr0;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr0));
-				if (_ptr_ctr0) {
-					NDR_PULL_ALLOC(ndr, r->ctr0);
-				} else {
-					r->ctr0 = NULL;
-				}
-			break; }
-
-			case 1: {
-				uint32_t _ptr_ctr1;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr1));
-				if (_ptr_ctr1) {
-					NDR_PULL_ALLOC(ndr, r->ctr1);
-				} else {
-					r->ctr1 = NULL;
-				}
-			break; }
-
-			case 2: {
-				uint32_t _ptr_ctr2;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr2));
-				if (_ptr_ctr2) {
-					NDR_PULL_ALLOC(ndr, r->ctr2);
-				} else {
-					r->ctr2 = NULL;
-				}
-			break; }
-
-			case 501: {
-				uint32_t _ptr_ctr501;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr501));
-				if (_ptr_ctr501) {
-					NDR_PULL_ALLOC(ndr, r->ctr501);
-				} else {
-					r->ctr501 = NULL;
-				}
-			break; }
-
-			case 502: {
-				uint32_t _ptr_ctr502;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr502));
-				if (_ptr_ctr502) {
-					NDR_PULL_ALLOC(ndr, r->ctr502);
-				} else {
-					r->ctr502 = NULL;
-				}
-			break; }
-
-			case 1004: {
-				uint32_t _ptr_ctr1004;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr1004));
-				if (_ptr_ctr1004) {
-					NDR_PULL_ALLOC(ndr, r->ctr1004);
-				} else {
-					r->ctr1004 = NULL;
-				}
-			break; }
-
-			case 1005: {
-				uint32_t _ptr_ctr1005;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr1005));
-				if (_ptr_ctr1005) {
-					NDR_PULL_ALLOC(ndr, r->ctr1005);
-				} else {
-					r->ctr1005 = NULL;
-				}
-			break; }
-
-			case 1006: {
-				uint32_t _ptr_ctr1006;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr1006));
-				if (_ptr_ctr1006) {
-					NDR_PULL_ALLOC(ndr, r->ctr1006);
-				} else {
-					r->ctr1006 = NULL;
-				}
-			break; }
-
-			case 1007: {
-				uint32_t _ptr_ctr1007;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr1007));
-				if (_ptr_ctr1007) {
-					NDR_PULL_ALLOC(ndr, r->ctr1007);
-				} else {
-					r->ctr1007 = NULL;
-				}
-			break; }
-
-			case 1501: {
-				uint32_t _ptr_ctr1501;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr1501));
-				if (_ptr_ctr1501) {
-					NDR_PULL_ALLOC(ndr, r->ctr1501);
-				} else {
-					r->ctr1501 = NULL;
-				}
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 0:
-				if (r->ctr0) {
-					_mem_save_ctr0_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr0, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetShareCtr0(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr0));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr0_0, 0);
-				}
-			break;
-
-			case 1:
-				if (r->ctr1) {
-					_mem_save_ctr1_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr1, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetShareCtr1(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr1_0, 0);
-				}
-			break;
-
-			case 2:
-				if (r->ctr2) {
-					_mem_save_ctr2_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr2, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetShareCtr2(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr2));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr2_0, 0);
-				}
-			break;
-
-			case 501:
-				if (r->ctr501) {
-					_mem_save_ctr501_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr501, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetShareCtr501(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr501));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr501_0, 0);
-				}
-			break;
-
-			case 502:
-				if (r->ctr502) {
-					_mem_save_ctr502_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr502, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetShareCtr502(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr502));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr502_0, 0);
-				}
-			break;
-
-			case 1004:
-				if (r->ctr1004) {
-					_mem_save_ctr1004_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr1004, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetShareCtr1004(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1004));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr1004_0, 0);
-				}
-			break;
-
-			case 1005:
-				if (r->ctr1005) {
-					_mem_save_ctr1005_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr1005, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetShareCtr1005(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1005));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr1005_0, 0);
-				}
-			break;
-
-			case 1006:
-				if (r->ctr1006) {
-					_mem_save_ctr1006_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr1006, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetShareCtr1006(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1006));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr1006_0, 0);
-				}
-			break;
-
-			case 1007:
-				if (r->ctr1007) {
-					_mem_save_ctr1007_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr1007, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetShareCtr1007(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1007));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr1007_0, 0);
-				}
-			break;
-
-			case 1501:
-				if (r->ctr1501) {
-					_mem_save_ctr1501_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr1501, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetShareCtr1501(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1501));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr1501_0, 0);
-				}
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareCtr(struct ndr_print *ndr, const char *name, const union srvsvc_NetShareCtr *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "srvsvc_NetShareCtr");
-	switch (level) {
-		case 0:
-			ndr_print_ptr(ndr, "ctr0", r->ctr0);
-			ndr->depth++;
-			if (r->ctr0) {
-				ndr_print_srvsvc_NetShareCtr0(ndr, "ctr0", r->ctr0);
-			}
-			ndr->depth--;
-		break;
-
-		case 1:
-			ndr_print_ptr(ndr, "ctr1", r->ctr1);
-			ndr->depth++;
-			if (r->ctr1) {
-				ndr_print_srvsvc_NetShareCtr1(ndr, "ctr1", r->ctr1);
-			}
-			ndr->depth--;
-		break;
-
-		case 2:
-			ndr_print_ptr(ndr, "ctr2", r->ctr2);
-			ndr->depth++;
-			if (r->ctr2) {
-				ndr_print_srvsvc_NetShareCtr2(ndr, "ctr2", r->ctr2);
-			}
-			ndr->depth--;
-		break;
-
-		case 501:
-			ndr_print_ptr(ndr, "ctr501", r->ctr501);
-			ndr->depth++;
-			if (r->ctr501) {
-				ndr_print_srvsvc_NetShareCtr501(ndr, "ctr501", r->ctr501);
-			}
-			ndr->depth--;
-		break;
-
-		case 502:
-			ndr_print_ptr(ndr, "ctr502", r->ctr502);
-			ndr->depth++;
-			if (r->ctr502) {
-				ndr_print_srvsvc_NetShareCtr502(ndr, "ctr502", r->ctr502);
-			}
-			ndr->depth--;
-		break;
-
-		case 1004:
-			ndr_print_ptr(ndr, "ctr1004", r->ctr1004);
-			ndr->depth++;
-			if (r->ctr1004) {
-				ndr_print_srvsvc_NetShareCtr1004(ndr, "ctr1004", r->ctr1004);
-			}
-			ndr->depth--;
-		break;
-
-		case 1005:
-			ndr_print_ptr(ndr, "ctr1005", r->ctr1005);
-			ndr->depth++;
-			if (r->ctr1005) {
-				ndr_print_srvsvc_NetShareCtr1005(ndr, "ctr1005", r->ctr1005);
-			}
-			ndr->depth--;
-		break;
-
-		case 1006:
-			ndr_print_ptr(ndr, "ctr1006", r->ctr1006);
-			ndr->depth++;
-			if (r->ctr1006) {
-				ndr_print_srvsvc_NetShareCtr1006(ndr, "ctr1006", r->ctr1006);
-			}
-			ndr->depth--;
-		break;
-
-		case 1007:
-			ndr_print_ptr(ndr, "ctr1007", r->ctr1007);
-			ndr->depth++;
-			if (r->ctr1007) {
-				ndr_print_srvsvc_NetShareCtr1007(ndr, "ctr1007", r->ctr1007);
-			}
-			ndr->depth--;
-		break;
-
-		case 1501:
-			ndr_print_ptr(ndr, "ctr1501", r->ctr1501);
-			ndr->depth++;
-			if (r->ctr1501) {
-				ndr_print_srvsvc_NetShareCtr1501(ndr, "ctr1501", r->ctr1501);
-			}
-			ndr->depth--;
-		break;
-
-		default:
-		break;
-
-	}
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareInfoCtr(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetShareInfoCtr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->level));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->ctr, r->level));
-		NDR_CHECK(ndr_push_srvsvc_NetShareCtr(ndr, NDR_SCALARS, &r->ctr));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_srvsvc_NetShareCtr(ndr, NDR_BUFFERS, &r->ctr));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareInfoCtr(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetShareInfoCtr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->level));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->ctr, r->level));
-		NDR_CHECK(ndr_pull_srvsvc_NetShareCtr(ndr, NDR_SCALARS, &r->ctr));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_srvsvc_NetShareCtr(ndr, NDR_BUFFERS, &r->ctr));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareInfoCtr(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareInfoCtr *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetShareInfoCtr");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "level", r->level);
-	ndr_print_set_switch_value(ndr, &r->ctr, r->level);
-	ndr_print_srvsvc_NetShareCtr(ndr, "ctr", &r->ctr);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_srvsvc_PlatformId(struct ndr_push *ndr, int ndr_flags, enum srvsvc_PlatformId r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_srvsvc_PlatformId(struct ndr_pull *ndr, int ndr_flags, enum srvsvc_PlatformId *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_PlatformId(struct ndr_print *ndr, const char *name, enum srvsvc_PlatformId r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case PLATFORM_ID_DOS: val = "PLATFORM_ID_DOS"; break;
-		case PLATFORM_ID_OS2: val = "PLATFORM_ID_OS2"; break;
-		case PLATFORM_ID_NT: val = "PLATFORM_ID_NT"; break;
-		case PLATFORM_ID_OSF: val = "PLATFORM_ID_OSF"; break;
-		case PLATFORM_ID_VMS: val = "PLATFORM_ID_VMS"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo100(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo100 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_srvsvc_PlatformId(ndr, NDR_SCALARS, r->platform_id));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->server_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->server_name, ndr_charset_length(r->server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo100(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo100 *r)
-{
-	uint32_t _ptr_server_name;
-	TALLOC_CTX *_mem_save_server_name_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_srvsvc_PlatformId(ndr, NDR_SCALARS, &r->platform_id));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->server_name);
-		} else {
-			r->server_name = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->server_name));
-			if (ndr_get_array_length(ndr, &r->server_name) > ndr_get_array_size(ndr, &r->server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->server_name), ndr_get_array_length(ndr, &r->server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->server_name, ndr_get_array_length(ndr, &r->server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo100(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo100 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo100");
-	ndr->depth++;
-	ndr_print_srvsvc_PlatformId(ndr, "platform_id", r->platform_id);
-	ndr_print_ptr(ndr, "server_name", r->server_name);
-	ndr->depth++;
-	if (r->server_name) {
-		ndr_print_string(ndr, "server_name", r->server_name);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo101(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo101 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_srvsvc_PlatformId(ndr, NDR_SCALARS, r->platform_id));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->server_name));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->version_major));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->version_minor));
-		NDR_CHECK(ndr_push_svcctl_ServerType(ndr, NDR_SCALARS, r->server_type));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->comment));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->server_name, ndr_charset_length(r->server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->comment) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->comment, ndr_charset_length(r->comment, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo101(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo101 *r)
-{
-	uint32_t _ptr_server_name;
-	TALLOC_CTX *_mem_save_server_name_0;
-	uint32_t _ptr_comment;
-	TALLOC_CTX *_mem_save_comment_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_srvsvc_PlatformId(ndr, NDR_SCALARS, &r->platform_id));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->server_name);
-		} else {
-			r->server_name = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->version_major));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->version_minor));
-		NDR_CHECK(ndr_pull_svcctl_ServerType(ndr, NDR_SCALARS, &r->server_type));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_comment));
-		if (_ptr_comment) {
-			NDR_PULL_ALLOC(ndr, r->comment);
-		} else {
-			r->comment = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->server_name));
-			if (ndr_get_array_length(ndr, &r->server_name) > ndr_get_array_size(ndr, &r->server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->server_name), ndr_get_array_length(ndr, &r->server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->server_name, ndr_get_array_length(ndr, &r->server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		if (r->comment) {
-			_mem_save_comment_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->comment, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->comment));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->comment));
-			if (ndr_get_array_length(ndr, &r->comment) > ndr_get_array_size(ndr, &r->comment)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->comment), ndr_get_array_length(ndr, &r->comment));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->comment, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_comment_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo101(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo101 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo101");
-	ndr->depth++;
-	ndr_print_srvsvc_PlatformId(ndr, "platform_id", r->platform_id);
-	ndr_print_ptr(ndr, "server_name", r->server_name);
-	ndr->depth++;
-	if (r->server_name) {
-		ndr_print_string(ndr, "server_name", r->server_name);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "version_major", r->version_major);
-	ndr_print_uint32(ndr, "version_minor", r->version_minor);
-	ndr_print_svcctl_ServerType(ndr, "server_type", r->server_type);
-	ndr_print_ptr(ndr, "comment", r->comment);
-	ndr->depth++;
-	if (r->comment) {
-		ndr_print_string(ndr, "comment", r->comment);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo102(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo102 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_srvsvc_PlatformId(ndr, NDR_SCALARS, r->platform_id));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->server_name));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->version_major));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->version_minor));
-		NDR_CHECK(ndr_push_svcctl_ServerType(ndr, NDR_SCALARS, r->server_type));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->comment));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->users));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->disc));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->hidden));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->announce));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->anndelta));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->licenses));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->userpath));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->server_name, ndr_charset_length(r->server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->comment) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->comment, ndr_charset_length(r->comment, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->userpath) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->userpath, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->userpath, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->userpath, ndr_charset_length(r->userpath, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo102(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo102 *r)
-{
-	uint32_t _ptr_server_name;
-	TALLOC_CTX *_mem_save_server_name_0;
-	uint32_t _ptr_comment;
-	TALLOC_CTX *_mem_save_comment_0;
-	uint32_t _ptr_userpath;
-	TALLOC_CTX *_mem_save_userpath_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_srvsvc_PlatformId(ndr, NDR_SCALARS, &r->platform_id));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->server_name);
-		} else {
-			r->server_name = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->version_major));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->version_minor));
-		NDR_CHECK(ndr_pull_svcctl_ServerType(ndr, NDR_SCALARS, &r->server_type));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_comment));
-		if (_ptr_comment) {
-			NDR_PULL_ALLOC(ndr, r->comment);
-		} else {
-			r->comment = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->users));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->disc));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->hidden));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->announce));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->anndelta));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->licenses));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_userpath));
-		if (_ptr_userpath) {
-			NDR_PULL_ALLOC(ndr, r->userpath);
-		} else {
-			r->userpath = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->server_name));
-			if (ndr_get_array_length(ndr, &r->server_name) > ndr_get_array_size(ndr, &r->server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->server_name), ndr_get_array_length(ndr, &r->server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->server_name, ndr_get_array_length(ndr, &r->server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		if (r->comment) {
-			_mem_save_comment_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->comment, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->comment));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->comment));
-			if (ndr_get_array_length(ndr, &r->comment) > ndr_get_array_size(ndr, &r->comment)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->comment), ndr_get_array_length(ndr, &r->comment));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->comment, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_comment_0, 0);
-		}
-		if (r->userpath) {
-			_mem_save_userpath_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->userpath, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->userpath));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->userpath));
-			if (ndr_get_array_length(ndr, &r->userpath) > ndr_get_array_size(ndr, &r->userpath)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->userpath), ndr_get_array_length(ndr, &r->userpath));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->userpath), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->userpath, ndr_get_array_length(ndr, &r->userpath), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_userpath_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo102(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo102 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo102");
-	ndr->depth++;
-	ndr_print_srvsvc_PlatformId(ndr, "platform_id", r->platform_id);
-	ndr_print_ptr(ndr, "server_name", r->server_name);
-	ndr->depth++;
-	if (r->server_name) {
-		ndr_print_string(ndr, "server_name", r->server_name);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "version_major", r->version_major);
-	ndr_print_uint32(ndr, "version_minor", r->version_minor);
-	ndr_print_svcctl_ServerType(ndr, "server_type", r->server_type);
-	ndr_print_ptr(ndr, "comment", r->comment);
-	ndr->depth++;
-	if (r->comment) {
-		ndr_print_string(ndr, "comment", r->comment);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "users", r->users);
-	ndr_print_uint32(ndr, "disc", r->disc);
-	ndr_print_uint32(ndr, "hidden", r->hidden);
-	ndr_print_uint32(ndr, "announce", r->announce);
-	ndr_print_uint32(ndr, "anndelta", r->anndelta);
-	ndr_print_uint32(ndr, "licenses", r->licenses);
-	ndr_print_ptr(ndr, "userpath", r->userpath);
-	ndr->depth++;
-	if (r->userpath) {
-		ndr_print_string(ndr, "userpath", r->userpath);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo402(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo402 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->ulist_mtime));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->glist_mtime));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->alist_mtime));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->alerts));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->security));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->numadmin));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->lanmask));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->guestaccount));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->chdevs));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->chdevqs));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->chdevjobs));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->connections));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->shares));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->openfiles));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sessopen));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sesssvc));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sessreqs));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->opensearch));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->activelocks));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sizereqbufs));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->numbigbufs));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->numfiletasks));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->alertsched));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->erroralert));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->logonalert));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->accessalert));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->diskalert));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->netioalert));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxaudits));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->srvheuristics));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->alerts) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->alerts, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->alerts, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->alerts, ndr_charset_length(r->alerts, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->guestaccount) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->guestaccount, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->guestaccount, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->guestaccount, ndr_charset_length(r->guestaccount, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->srvheuristics) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->srvheuristics, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->srvheuristics, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->srvheuristics, ndr_charset_length(r->srvheuristics, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo402(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo402 *r)
-{
-	uint32_t _ptr_alerts;
-	TALLOC_CTX *_mem_save_alerts_0;
-	uint32_t _ptr_guestaccount;
-	TALLOC_CTX *_mem_save_guestaccount_0;
-	uint32_t _ptr_srvheuristics;
-	TALLOC_CTX *_mem_save_srvheuristics_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->ulist_mtime));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->glist_mtime));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->alist_mtime));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_alerts));
-		if (_ptr_alerts) {
-			NDR_PULL_ALLOC(ndr, r->alerts);
-		} else {
-			r->alerts = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->security));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->numadmin));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->lanmask));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_guestaccount));
-		if (_ptr_guestaccount) {
-			NDR_PULL_ALLOC(ndr, r->guestaccount);
-		} else {
-			r->guestaccount = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->chdevs));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->chdevqs));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->chdevjobs));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->connections));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->shares));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->openfiles));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sessopen));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sesssvc));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sessreqs));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->opensearch));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->activelocks));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sizereqbufs));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->numbigbufs));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->numfiletasks));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->alertsched));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->erroralert));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->logonalert));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->accessalert));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->diskalert));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->netioalert));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxaudits));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_srvheuristics));
-		if (_ptr_srvheuristics) {
-			NDR_PULL_ALLOC(ndr, r->srvheuristics);
-		} else {
-			r->srvheuristics = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->alerts) {
-			_mem_save_alerts_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->alerts, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->alerts));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->alerts));
-			if (ndr_get_array_length(ndr, &r->alerts) > ndr_get_array_size(ndr, &r->alerts)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->alerts), ndr_get_array_length(ndr, &r->alerts));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->alerts), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->alerts, ndr_get_array_length(ndr, &r->alerts), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_alerts_0, 0);
-		}
-		if (r->guestaccount) {
-			_mem_save_guestaccount_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->guestaccount, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->guestaccount));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->guestaccount));
-			if (ndr_get_array_length(ndr, &r->guestaccount) > ndr_get_array_size(ndr, &r->guestaccount)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->guestaccount), ndr_get_array_length(ndr, &r->guestaccount));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->guestaccount), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->guestaccount, ndr_get_array_length(ndr, &r->guestaccount), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_guestaccount_0, 0);
-		}
-		if (r->srvheuristics) {
-			_mem_save_srvheuristics_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->srvheuristics, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->srvheuristics));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->srvheuristics));
-			if (ndr_get_array_length(ndr, &r->srvheuristics) > ndr_get_array_size(ndr, &r->srvheuristics)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->srvheuristics), ndr_get_array_length(ndr, &r->srvheuristics));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->srvheuristics), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->srvheuristics, ndr_get_array_length(ndr, &r->srvheuristics), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_srvheuristics_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo402(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo402 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo402");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "ulist_mtime", r->ulist_mtime);
-	ndr_print_uint32(ndr, "glist_mtime", r->glist_mtime);
-	ndr_print_uint32(ndr, "alist_mtime", r->alist_mtime);
-	ndr_print_ptr(ndr, "alerts", r->alerts);
-	ndr->depth++;
-	if (r->alerts) {
-		ndr_print_string(ndr, "alerts", r->alerts);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "security", r->security);
-	ndr_print_uint32(ndr, "numadmin", r->numadmin);
-	ndr_print_uint32(ndr, "lanmask", r->lanmask);
-	ndr_print_ptr(ndr, "guestaccount", r->guestaccount);
-	ndr->depth++;
-	if (r->guestaccount) {
-		ndr_print_string(ndr, "guestaccount", r->guestaccount);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "chdevs", r->chdevs);
-	ndr_print_uint32(ndr, "chdevqs", r->chdevqs);
-	ndr_print_uint32(ndr, "chdevjobs", r->chdevjobs);
-	ndr_print_uint32(ndr, "connections", r->connections);
-	ndr_print_uint32(ndr, "shares", r->shares);
-	ndr_print_uint32(ndr, "openfiles", r->openfiles);
-	ndr_print_uint32(ndr, "sessopen", r->sessopen);
-	ndr_print_uint32(ndr, "sesssvc", r->sesssvc);
-	ndr_print_uint32(ndr, "sessreqs", r->sessreqs);
-	ndr_print_uint32(ndr, "opensearch", r->opensearch);
-	ndr_print_uint32(ndr, "activelocks", r->activelocks);
-	ndr_print_uint32(ndr, "sizereqbufs", r->sizereqbufs);
-	ndr_print_uint32(ndr, "numbigbufs", r->numbigbufs);
-	ndr_print_uint32(ndr, "numfiletasks", r->numfiletasks);
-	ndr_print_uint32(ndr, "alertsched", r->alertsched);
-	ndr_print_uint32(ndr, "erroralert", r->erroralert);
-	ndr_print_uint32(ndr, "logonalert", r->logonalert);
-	ndr_print_uint32(ndr, "accessalert", r->accessalert);
-	ndr_print_uint32(ndr, "diskalert", r->diskalert);
-	ndr_print_uint32(ndr, "netioalert", r->netioalert);
-	ndr_print_uint32(ndr, "maxaudits", r->maxaudits);
-	ndr_print_ptr(ndr, "srvheuristics", r->srvheuristics);
-	ndr->depth++;
-	if (r->srvheuristics) {
-		ndr_print_string(ndr, "srvheuristics", r->srvheuristics);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo403(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo403 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->ulist_mtime));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->glist_mtime));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->alist_mtime));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->alerts));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->security));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->numadmin));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->lanmask));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->guestaccount));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->chdevs));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->chdevqs));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->chdevjobs));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->connections));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->shares));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->openfiles));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sessopen));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sesssvc));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sessreqs));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->opensearch));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->activelocks));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sizereqbufs));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->numbigbufs));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->numfiletasks));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->alertsched));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->eroralert));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->logonalert));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->accessalert));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->diskalert));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->netioalert));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxaudits));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->srvheuristics));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->auditedevents));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->auditprofile));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->autopath));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->alerts) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->alerts, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->alerts, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->alerts, ndr_charset_length(r->alerts, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->guestaccount) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->guestaccount, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->guestaccount, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->guestaccount, ndr_charset_length(r->guestaccount, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->srvheuristics) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->srvheuristics, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->srvheuristics, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->srvheuristics, ndr_charset_length(r->srvheuristics, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->autopath) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->autopath, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->autopath, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->autopath, ndr_charset_length(r->autopath, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo403(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo403 *r)
-{
-	uint32_t _ptr_alerts;
-	TALLOC_CTX *_mem_save_alerts_0;
-	uint32_t _ptr_guestaccount;
-	TALLOC_CTX *_mem_save_guestaccount_0;
-	uint32_t _ptr_srvheuristics;
-	TALLOC_CTX *_mem_save_srvheuristics_0;
-	uint32_t _ptr_autopath;
-	TALLOC_CTX *_mem_save_autopath_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->ulist_mtime));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->glist_mtime));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->alist_mtime));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_alerts));
-		if (_ptr_alerts) {
-			NDR_PULL_ALLOC(ndr, r->alerts);
-		} else {
-			r->alerts = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->security));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->numadmin));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->lanmask));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_guestaccount));
-		if (_ptr_guestaccount) {
-			NDR_PULL_ALLOC(ndr, r->guestaccount);
-		} else {
-			r->guestaccount = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->chdevs));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->chdevqs));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->chdevjobs));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->connections));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->shares));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->openfiles));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sessopen));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sesssvc));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sessreqs));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->opensearch));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->activelocks));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sizereqbufs));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->numbigbufs));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->numfiletasks));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->alertsched));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->eroralert));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->logonalert));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->accessalert));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->diskalert));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->netioalert));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxaudits));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_srvheuristics));
-		if (_ptr_srvheuristics) {
-			NDR_PULL_ALLOC(ndr, r->srvheuristics);
-		} else {
-			r->srvheuristics = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->auditedevents));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->auditprofile));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_autopath));
-		if (_ptr_autopath) {
-			NDR_PULL_ALLOC(ndr, r->autopath);
-		} else {
-			r->autopath = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->alerts) {
-			_mem_save_alerts_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->alerts, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->alerts));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->alerts));
-			if (ndr_get_array_length(ndr, &r->alerts) > ndr_get_array_size(ndr, &r->alerts)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->alerts), ndr_get_array_length(ndr, &r->alerts));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->alerts), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->alerts, ndr_get_array_length(ndr, &r->alerts), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_alerts_0, 0);
-		}
-		if (r->guestaccount) {
-			_mem_save_guestaccount_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->guestaccount, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->guestaccount));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->guestaccount));
-			if (ndr_get_array_length(ndr, &r->guestaccount) > ndr_get_array_size(ndr, &r->guestaccount)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->guestaccount), ndr_get_array_length(ndr, &r->guestaccount));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->guestaccount), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->guestaccount, ndr_get_array_length(ndr, &r->guestaccount), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_guestaccount_0, 0);
-		}
-		if (r->srvheuristics) {
-			_mem_save_srvheuristics_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->srvheuristics, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->srvheuristics));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->srvheuristics));
-			if (ndr_get_array_length(ndr, &r->srvheuristics) > ndr_get_array_size(ndr, &r->srvheuristics)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->srvheuristics), ndr_get_array_length(ndr, &r->srvheuristics));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->srvheuristics), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->srvheuristics, ndr_get_array_length(ndr, &r->srvheuristics), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_srvheuristics_0, 0);
-		}
-		if (r->autopath) {
-			_mem_save_autopath_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->autopath, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->autopath));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->autopath));
-			if (ndr_get_array_length(ndr, &r->autopath) > ndr_get_array_size(ndr, &r->autopath)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->autopath), ndr_get_array_length(ndr, &r->autopath));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->autopath), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->autopath, ndr_get_array_length(ndr, &r->autopath), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_autopath_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo403(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo403 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo403");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "ulist_mtime", r->ulist_mtime);
-	ndr_print_uint32(ndr, "glist_mtime", r->glist_mtime);
-	ndr_print_uint32(ndr, "alist_mtime", r->alist_mtime);
-	ndr_print_ptr(ndr, "alerts", r->alerts);
-	ndr->depth++;
-	if (r->alerts) {
-		ndr_print_string(ndr, "alerts", r->alerts);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "security", r->security);
-	ndr_print_uint32(ndr, "numadmin", r->numadmin);
-	ndr_print_uint32(ndr, "lanmask", r->lanmask);
-	ndr_print_ptr(ndr, "guestaccount", r->guestaccount);
-	ndr->depth++;
-	if (r->guestaccount) {
-		ndr_print_string(ndr, "guestaccount", r->guestaccount);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "chdevs", r->chdevs);
-	ndr_print_uint32(ndr, "chdevqs", r->chdevqs);
-	ndr_print_uint32(ndr, "chdevjobs", r->chdevjobs);
-	ndr_print_uint32(ndr, "connections", r->connections);
-	ndr_print_uint32(ndr, "shares", r->shares);
-	ndr_print_uint32(ndr, "openfiles", r->openfiles);
-	ndr_print_uint32(ndr, "sessopen", r->sessopen);
-	ndr_print_uint32(ndr, "sesssvc", r->sesssvc);
-	ndr_print_uint32(ndr, "sessreqs", r->sessreqs);
-	ndr_print_uint32(ndr, "opensearch", r->opensearch);
-	ndr_print_uint32(ndr, "activelocks", r->activelocks);
-	ndr_print_uint32(ndr, "sizereqbufs", r->sizereqbufs);
-	ndr_print_uint32(ndr, "numbigbufs", r->numbigbufs);
-	ndr_print_uint32(ndr, "numfiletasks", r->numfiletasks);
-	ndr_print_uint32(ndr, "alertsched", r->alertsched);
-	ndr_print_uint32(ndr, "eroralert", r->eroralert);
-	ndr_print_uint32(ndr, "logonalert", r->logonalert);
-	ndr_print_uint32(ndr, "accessalert", r->accessalert);
-	ndr_print_uint32(ndr, "diskalert", r->diskalert);
-	ndr_print_uint32(ndr, "netioalert", r->netioalert);
-	ndr_print_uint32(ndr, "maxaudits", r->maxaudits);
-	ndr_print_ptr(ndr, "srvheuristics", r->srvheuristics);
-	ndr->depth++;
-	if (r->srvheuristics) {
-		ndr_print_string(ndr, "srvheuristics", r->srvheuristics);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "auditedevents", r->auditedevents);
-	ndr_print_uint32(ndr, "auditprofile", r->auditprofile);
-	ndr_print_ptr(ndr, "autopath", r->autopath);
-	ndr->depth++;
-	if (r->autopath) {
-		ndr_print_string(ndr, "autopath", r->autopath);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo502(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo502 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sessopen));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sesssvc));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->opensearch));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sizereqbufs));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->initworkitems));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxworkitems));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rawworkitems));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->irpstacksize));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxrawbuflen));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sessusers));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sessconns));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxpagedmemoryusage));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxnonpagedmemoryusage));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enablesoftcompat));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enableforcedlogoff));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->timesource));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->acceptdownlevelapis));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->lmannounce));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo502(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo502 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sessopen));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sesssvc));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->opensearch));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sizereqbufs));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->initworkitems));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxworkitems));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rawworkitems));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->irpstacksize));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxrawbuflen));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sessusers));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sessconns));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxpagedmemoryusage));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxnonpagedmemoryusage));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enablesoftcompat));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enableforcedlogoff));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->timesource));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->acceptdownlevelapis));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->lmannounce));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo502(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo502 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo502");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "sessopen", r->sessopen);
-	ndr_print_uint32(ndr, "sesssvc", r->sesssvc);
-	ndr_print_uint32(ndr, "opensearch", r->opensearch);
-	ndr_print_uint32(ndr, "sizereqbufs", r->sizereqbufs);
-	ndr_print_uint32(ndr, "initworkitems", r->initworkitems);
-	ndr_print_uint32(ndr, "maxworkitems", r->maxworkitems);
-	ndr_print_uint32(ndr, "rawworkitems", r->rawworkitems);
-	ndr_print_uint32(ndr, "irpstacksize", r->irpstacksize);
-	ndr_print_uint32(ndr, "maxrawbuflen", r->maxrawbuflen);
-	ndr_print_uint32(ndr, "sessusers", r->sessusers);
-	ndr_print_uint32(ndr, "sessconns", r->sessconns);
-	ndr_print_uint32(ndr, "maxpagedmemoryusage", r->maxpagedmemoryusage);
-	ndr_print_uint32(ndr, "maxnonpagedmemoryusage", r->maxnonpagedmemoryusage);
-	ndr_print_uint32(ndr, "enablesoftcompat", r->enablesoftcompat);
-	ndr_print_uint32(ndr, "enableforcedlogoff", r->enableforcedlogoff);
-	ndr_print_uint32(ndr, "timesource", r->timesource);
-	ndr_print_uint32(ndr, "acceptdownlevelapis", r->acceptdownlevelapis);
-	ndr_print_uint32(ndr, "lmannounce", r->lmannounce);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo503(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo503 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sessopen));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sesssvc));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->opensearch));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sizereqbufs));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->initworkitems));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxworkitems));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rawworkitems));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->irpstacksize));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxrawbuflen));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sessusers));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sessconns));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxpagedmemoryusage));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxnonpagedmemoryusage));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enablesoftcompat));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enableforcedlogoff));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->timesource));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->acceptdownlevelapis));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->lmannounce));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->domain));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxcopyreadlen));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxcopywritelen));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->minkeepsearch));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxkeepsearch));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->minkeepcomplsearch));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxkeepcomplsearch));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->threadcountadd));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->numlockthreads));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->scavtimeout));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->minrcvqueue));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->minfreeworkitems));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->xactmemsize));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->threadpriority));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxmpxct));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->oplockbreakwait));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->oplockbreakresponsewait));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enableoplocks));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enableoplockforceclose));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enablefcbopens));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enableraw));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enablesharednetdrives));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->minfreeconnections));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxfreeconnections));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->domain) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->domain, ndr_charset_length(r->domain, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo503(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo503 *r)
-{
-	uint32_t _ptr_domain;
-	TALLOC_CTX *_mem_save_domain_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sessopen));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sesssvc));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->opensearch));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sizereqbufs));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->initworkitems));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxworkitems));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rawworkitems));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->irpstacksize));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxrawbuflen));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sessusers));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sessconns));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxpagedmemoryusage));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxnonpagedmemoryusage));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enablesoftcompat));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enableforcedlogoff));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->timesource));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->acceptdownlevelapis));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->lmannounce));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain));
-		if (_ptr_domain) {
-			NDR_PULL_ALLOC(ndr, r->domain);
-		} else {
-			r->domain = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxcopyreadlen));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxcopywritelen));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->minkeepsearch));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxkeepsearch));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->minkeepcomplsearch));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxkeepcomplsearch));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->threadcountadd));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->numlockthreads));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->scavtimeout));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->minrcvqueue));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->minfreeworkitems));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->xactmemsize));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->threadpriority));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxmpxct));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->oplockbreakwait));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->oplockbreakresponsewait));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enableoplocks));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enableoplockforceclose));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enablefcbopens));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enableraw));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enablesharednetdrives));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->minfreeconnections));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxfreeconnections));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->domain) {
-			_mem_save_domain_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->domain, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->domain));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->domain));
-			if (ndr_get_array_length(ndr, &r->domain) > ndr_get_array_size(ndr, &r->domain)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->domain), ndr_get_array_length(ndr, &r->domain));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->domain), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->domain, ndr_get_array_length(ndr, &r->domain), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo503(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo503 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo503");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "sessopen", r->sessopen);
-	ndr_print_uint32(ndr, "sesssvc", r->sesssvc);
-	ndr_print_uint32(ndr, "opensearch", r->opensearch);
-	ndr_print_uint32(ndr, "sizereqbufs", r->sizereqbufs);
-	ndr_print_uint32(ndr, "initworkitems", r->initworkitems);
-	ndr_print_uint32(ndr, "maxworkitems", r->maxworkitems);
-	ndr_print_uint32(ndr, "rawworkitems", r->rawworkitems);
-	ndr_print_uint32(ndr, "irpstacksize", r->irpstacksize);
-	ndr_print_uint32(ndr, "maxrawbuflen", r->maxrawbuflen);
-	ndr_print_uint32(ndr, "sessusers", r->sessusers);
-	ndr_print_uint32(ndr, "sessconns", r->sessconns);
-	ndr_print_uint32(ndr, "maxpagedmemoryusage", r->maxpagedmemoryusage);
-	ndr_print_uint32(ndr, "maxnonpagedmemoryusage", r->maxnonpagedmemoryusage);
-	ndr_print_uint32(ndr, "enablesoftcompat", r->enablesoftcompat);
-	ndr_print_uint32(ndr, "enableforcedlogoff", r->enableforcedlogoff);
-	ndr_print_uint32(ndr, "timesource", r->timesource);
-	ndr_print_uint32(ndr, "acceptdownlevelapis", r->acceptdownlevelapis);
-	ndr_print_uint32(ndr, "lmannounce", r->lmannounce);
-	ndr_print_ptr(ndr, "domain", r->domain);
-	ndr->depth++;
-	if (r->domain) {
-		ndr_print_string(ndr, "domain", r->domain);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "maxcopyreadlen", r->maxcopyreadlen);
-	ndr_print_uint32(ndr, "maxcopywritelen", r->maxcopywritelen);
-	ndr_print_uint32(ndr, "minkeepsearch", r->minkeepsearch);
-	ndr_print_uint32(ndr, "maxkeepsearch", r->maxkeepsearch);
-	ndr_print_uint32(ndr, "minkeepcomplsearch", r->minkeepcomplsearch);
-	ndr_print_uint32(ndr, "maxkeepcomplsearch", r->maxkeepcomplsearch);
-	ndr_print_uint32(ndr, "threadcountadd", r->threadcountadd);
-	ndr_print_uint32(ndr, "numlockthreads", r->numlockthreads);
-	ndr_print_uint32(ndr, "scavtimeout", r->scavtimeout);
-	ndr_print_uint32(ndr, "minrcvqueue", r->minrcvqueue);
-	ndr_print_uint32(ndr, "minfreeworkitems", r->minfreeworkitems);
-	ndr_print_uint32(ndr, "xactmemsize", r->xactmemsize);
-	ndr_print_uint32(ndr, "threadpriority", r->threadpriority);
-	ndr_print_uint32(ndr, "maxmpxct", r->maxmpxct);
-	ndr_print_uint32(ndr, "oplockbreakwait", r->oplockbreakwait);
-	ndr_print_uint32(ndr, "oplockbreakresponsewait", r->oplockbreakresponsewait);
-	ndr_print_uint32(ndr, "enableoplocks", r->enableoplocks);
-	ndr_print_uint32(ndr, "enableoplockforceclose", r->enableoplockforceclose);
-	ndr_print_uint32(ndr, "enablefcbopens", r->enablefcbopens);
-	ndr_print_uint32(ndr, "enableraw", r->enableraw);
-	ndr_print_uint32(ndr, "enablesharednetdrives", r->enablesharednetdrives);
-	ndr_print_uint32(ndr, "minfreeconnections", r->minfreeconnections);
-	ndr_print_uint32(ndr, "maxfreeconnections", r->maxfreeconnections);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo599(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo599 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sessopen));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sesssvc));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->opensearch));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sizereqbufs));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->initworkitems));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxworkitems));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->rawworkitems));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->irpstacksize));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxrawbuflen));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sessusers));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sessconns));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxpagedmemoryusage));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxnonpagedmemoryusage));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enablesoftcompat));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enableforcedlogoff));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->timesource));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->acceptdownlevelapis));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->lmannounce));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->domain));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxcopyreadlen));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxcopywritelen));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->minkeepsearch));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->minkeepcomplsearch));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxkeepcomplsearch));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->threadcountadd));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->numlockthreads));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->scavtimeout));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->minrcvqueue));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->minfreeworkitems));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->xactmemsize));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->threadpriority));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxmpxct));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->oplockbreakwait));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->oplockbreakresponsewait));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enableoplocks));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enableoplockforceclose));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enablefcbopens));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enableraw));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enablesharednetdrives));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->minfreeconnections));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxfreeconnections));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->initsesstable));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->initconntable));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->initfiletable));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->initsearchtable));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->alertsched));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->errortreshold));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->networkerrortreshold));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->diskspacetreshold));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->reserved));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxlinkdelay));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->minlinkthroughput));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->linkinfovalidtime));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->scavqosinfoupdatetime));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxworkitemidletime));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->domain) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->domain, ndr_charset_length(r->domain, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo599(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo599 *r)
-{
-	uint32_t _ptr_domain;
-	TALLOC_CTX *_mem_save_domain_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sessopen));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sesssvc));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->opensearch));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sizereqbufs));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->initworkitems));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxworkitems));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->rawworkitems));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->irpstacksize));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxrawbuflen));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sessusers));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sessconns));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxpagedmemoryusage));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxnonpagedmemoryusage));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enablesoftcompat));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enableforcedlogoff));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->timesource));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->acceptdownlevelapis));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->lmannounce));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain));
-		if (_ptr_domain) {
-			NDR_PULL_ALLOC(ndr, r->domain);
-		} else {
-			r->domain = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxcopyreadlen));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxcopywritelen));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->minkeepsearch));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->minkeepcomplsearch));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxkeepcomplsearch));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->threadcountadd));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->numlockthreads));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->scavtimeout));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->minrcvqueue));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->minfreeworkitems));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->xactmemsize));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->threadpriority));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxmpxct));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->oplockbreakwait));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->oplockbreakresponsewait));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enableoplocks));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enableoplockforceclose));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enablefcbopens));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enableraw));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enablesharednetdrives));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->minfreeconnections));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxfreeconnections));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->initsesstable));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->initconntable));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->initfiletable));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->initsearchtable));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->alertsched));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->errortreshold));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->networkerrortreshold));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->diskspacetreshold));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->reserved));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxlinkdelay));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->minlinkthroughput));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->linkinfovalidtime));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->scavqosinfoupdatetime));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxworkitemidletime));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->domain) {
-			_mem_save_domain_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->domain, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->domain));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->domain));
-			if (ndr_get_array_length(ndr, &r->domain) > ndr_get_array_size(ndr, &r->domain)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->domain), ndr_get_array_length(ndr, &r->domain));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->domain), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->domain, ndr_get_array_length(ndr, &r->domain), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo599(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo599 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo599");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "sessopen", r->sessopen);
-	ndr_print_uint32(ndr, "sesssvc", r->sesssvc);
-	ndr_print_uint32(ndr, "opensearch", r->opensearch);
-	ndr_print_uint32(ndr, "sizereqbufs", r->sizereqbufs);
-	ndr_print_uint32(ndr, "initworkitems", r->initworkitems);
-	ndr_print_uint32(ndr, "maxworkitems", r->maxworkitems);
-	ndr_print_uint32(ndr, "rawworkitems", r->rawworkitems);
-	ndr_print_uint32(ndr, "irpstacksize", r->irpstacksize);
-	ndr_print_uint32(ndr, "maxrawbuflen", r->maxrawbuflen);
-	ndr_print_uint32(ndr, "sessusers", r->sessusers);
-	ndr_print_uint32(ndr, "sessconns", r->sessconns);
-	ndr_print_uint32(ndr, "maxpagedmemoryusage", r->maxpagedmemoryusage);
-	ndr_print_uint32(ndr, "maxnonpagedmemoryusage", r->maxnonpagedmemoryusage);
-	ndr_print_uint32(ndr, "enablesoftcompat", r->enablesoftcompat);
-	ndr_print_uint32(ndr, "enableforcedlogoff", r->enableforcedlogoff);
-	ndr_print_uint32(ndr, "timesource", r->timesource);
-	ndr_print_uint32(ndr, "acceptdownlevelapis", r->acceptdownlevelapis);
-	ndr_print_uint32(ndr, "lmannounce", r->lmannounce);
-	ndr_print_ptr(ndr, "domain", r->domain);
-	ndr->depth++;
-	if (r->domain) {
-		ndr_print_string(ndr, "domain", r->domain);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "maxcopyreadlen", r->maxcopyreadlen);
-	ndr_print_uint32(ndr, "maxcopywritelen", r->maxcopywritelen);
-	ndr_print_uint32(ndr, "minkeepsearch", r->minkeepsearch);
-	ndr_print_uint32(ndr, "minkeepcomplsearch", r->minkeepcomplsearch);
-	ndr_print_uint32(ndr, "maxkeepcomplsearch", r->maxkeepcomplsearch);
-	ndr_print_uint32(ndr, "threadcountadd", r->threadcountadd);
-	ndr_print_uint32(ndr, "numlockthreads", r->numlockthreads);
-	ndr_print_uint32(ndr, "scavtimeout", r->scavtimeout);
-	ndr_print_uint32(ndr, "minrcvqueue", r->minrcvqueue);
-	ndr_print_uint32(ndr, "minfreeworkitems", r->minfreeworkitems);
-	ndr_print_uint32(ndr, "xactmemsize", r->xactmemsize);
-	ndr_print_uint32(ndr, "threadpriority", r->threadpriority);
-	ndr_print_uint32(ndr, "maxmpxct", r->maxmpxct);
-	ndr_print_uint32(ndr, "oplockbreakwait", r->oplockbreakwait);
-	ndr_print_uint32(ndr, "oplockbreakresponsewait", r->oplockbreakresponsewait);
-	ndr_print_uint32(ndr, "enableoplocks", r->enableoplocks);
-	ndr_print_uint32(ndr, "enableoplockforceclose", r->enableoplockforceclose);
-	ndr_print_uint32(ndr, "enablefcbopens", r->enablefcbopens);
-	ndr_print_uint32(ndr, "enableraw", r->enableraw);
-	ndr_print_uint32(ndr, "enablesharednetdrives", r->enablesharednetdrives);
-	ndr_print_uint32(ndr, "minfreeconnections", r->minfreeconnections);
-	ndr_print_uint32(ndr, "maxfreeconnections", r->maxfreeconnections);
-	ndr_print_uint32(ndr, "initsesstable", r->initsesstable);
-	ndr_print_uint32(ndr, "initconntable", r->initconntable);
-	ndr_print_uint32(ndr, "initfiletable", r->initfiletable);
-	ndr_print_uint32(ndr, "initsearchtable", r->initsearchtable);
-	ndr_print_uint32(ndr, "alertsched", r->alertsched);
-	ndr_print_uint32(ndr, "errortreshold", r->errortreshold);
-	ndr_print_uint32(ndr, "networkerrortreshold", r->networkerrortreshold);
-	ndr_print_uint32(ndr, "diskspacetreshold", r->diskspacetreshold);
-	ndr_print_uint32(ndr, "reserved", r->reserved);
-	ndr_print_uint32(ndr, "maxlinkdelay", r->maxlinkdelay);
-	ndr_print_uint32(ndr, "minlinkthroughput", r->minlinkthroughput);
-	ndr_print_uint32(ndr, "linkinfovalidtime", r->linkinfovalidtime);
-	ndr_print_uint32(ndr, "scavqosinfoupdatetime", r->scavqosinfoupdatetime);
-	ndr_print_uint32(ndr, "maxworkitemidletime", r->maxworkitemidletime);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1005(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1005 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->comment));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->comment) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->comment, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->comment, ndr_charset_length(r->comment, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1005(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1005 *r)
-{
-	uint32_t _ptr_comment;
-	TALLOC_CTX *_mem_save_comment_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_comment));
-		if (_ptr_comment) {
-			NDR_PULL_ALLOC(ndr, r->comment);
-		} else {
-			r->comment = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->comment) {
-			_mem_save_comment_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->comment, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->comment));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->comment));
-			if (ndr_get_array_length(ndr, &r->comment) > ndr_get_array_size(ndr, &r->comment)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->comment), ndr_get_array_length(ndr, &r->comment));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->comment, ndr_get_array_length(ndr, &r->comment), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_comment_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1005(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1005 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1005");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "comment", r->comment);
-	ndr->depth++;
-	if (r->comment) {
-		ndr_print_string(ndr, "comment", r->comment);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1010(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1010 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->disc));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1010(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1010 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->disc));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1010(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1010 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1010");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "disc", r->disc);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1016(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1016 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->hidden));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1016(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1016 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->hidden));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1016(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1016 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1016");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "hidden", r->hidden);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1017(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1017 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->announce));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1017(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1017 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->announce));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1017(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1017 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1017");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "announce", r->announce);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1018(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1018 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->anndelta));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1018(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1018 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->anndelta));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1018(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1018 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1018");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "anndelta", r->anndelta);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1107(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1107 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->users));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1107(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1107 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->users));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1107(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1107 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1107");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "users", r->users);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1501(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1501 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sessopens));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1501(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1501 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sessopens));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1501(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1501 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1501");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "sessopens", r->sessopens);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1502(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1502 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sessvcs));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1502(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1502 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sessvcs));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1502(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1502 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1502");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "sessvcs", r->sessvcs);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1503(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1503 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->opensearch));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1503(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1503 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->opensearch));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1503(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1503 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1503");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "opensearch", r->opensearch);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1506(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1506 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxworkitems));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1506(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1506 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxworkitems));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1506(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1506 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1506");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "maxworkitems", r->maxworkitems);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1509(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1509 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxrawbuflen));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1509(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1509 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxrawbuflen));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1509(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1509 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1509");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "maxrawbuflen", r->maxrawbuflen);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1510(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1510 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sessusers));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1510(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1510 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sessusers));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1510(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1510 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1510");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "sessusers", r->sessusers);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1511(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1511 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sesscons));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1511(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1511 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sesscons));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1511(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1511 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1511");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "sesscons", r->sesscons);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1512(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1512 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxnonpagedmemoryusage));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1512(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1512 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxnonpagedmemoryusage));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1512(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1512 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1512");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "maxnonpagedmemoryusage", r->maxnonpagedmemoryusage);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1513(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1513 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxpagedmemoryusage));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1513(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1513 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxpagedmemoryusage));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1513(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1513 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1513");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "maxpagedmemoryusage", r->maxpagedmemoryusage);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1514(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1514 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enablesoftcompat));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1514(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1514 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enablesoftcompat));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1514(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1514 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1514");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "enablesoftcompat", r->enablesoftcompat);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1515(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1515 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enableforcedlogoff));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1515(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1515 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enableforcedlogoff));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1515(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1515 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1515");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "enableforcedlogoff", r->enableforcedlogoff);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1516(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1516 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->timesource));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1516(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1516 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->timesource));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1516(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1516 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1516");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "timesource", r->timesource);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1518(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1518 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->lmannounce));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1518(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1518 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->lmannounce));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1518(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1518 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1518");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "lmannounce", r->lmannounce);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1520(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1520 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxcopyreadlen));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1520(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1520 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxcopyreadlen));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1520(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1520 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1520");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "maxcopyreadlen", r->maxcopyreadlen);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1521(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1521 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxcopywritelen));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1521(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1521 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxcopywritelen));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1521(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1521 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1521");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "maxcopywritelen", r->maxcopywritelen);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1522(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1522 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->minkeepsearch));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1522(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1522 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->minkeepsearch));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1522(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1522 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1522");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "minkeepsearch", r->minkeepsearch);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1523(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1523 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxkeepsearch));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1523(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1523 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxkeepsearch));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1523(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1523 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1523");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "maxkeepsearch", r->maxkeepsearch);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1524(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1524 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->minkeepcomplsearch));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1524(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1524 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->minkeepcomplsearch));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1524(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1524 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1524");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "minkeepcomplsearch", r->minkeepcomplsearch);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1525(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1525 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxkeepcomplsearch));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1525(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1525 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxkeepcomplsearch));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1525(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1525 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1525");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "maxkeepcomplsearch", r->maxkeepcomplsearch);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1528(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1528 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->scavtimeout));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1528(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1528 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->scavtimeout));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1528(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1528 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1528");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "scavtimeout", r->scavtimeout);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1529(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1529 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->minrcvqueue));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1529(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1529 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->minrcvqueue));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1529(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1529 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1529");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "minrcvqueue", r->minrcvqueue);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1530(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1530 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->minfreeworkitems));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1530(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1530 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->minfreeworkitems));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1530(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1530 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1530");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "minfreeworkitems", r->minfreeworkitems);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1533(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1533 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxmpxct));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1533(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1533 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxmpxct));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1533(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1533 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1533");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "maxmpxct", r->maxmpxct);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1534(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1534 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->oplockbreakwait));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1534(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1534 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->oplockbreakwait));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1534(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1534 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1534");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "oplockbreakwait", r->oplockbreakwait);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1535(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1535 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->oplockbreakresponsewait));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1535(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1535 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->oplockbreakresponsewait));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1535(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1535 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1535");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "oplockbreakresponsewait", r->oplockbreakresponsewait);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1536(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1536 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enableoplocks));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1536(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1536 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enableoplocks));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1536(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1536 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1536");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "enableoplocks", r->enableoplocks);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1537(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1537 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enableoplockforceclose));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1537(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1537 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enableoplockforceclose));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1537(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1537 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1537");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "enableoplockforceclose", r->enableoplockforceclose);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1538(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1538 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enablefcbopens));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1538(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1538 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enablefcbopens));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1538(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1538 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1538");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "enablefcbopens", r->enablefcbopens);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1539(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1539 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enableraw));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1539(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1539 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enableraw));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1539(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1539 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1539");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "enableraw", r->enableraw);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1540(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1540 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enablesharednetdrives));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1540(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1540 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enablesharednetdrives));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1540(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1540 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1540");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "enablesharednetdrives", r->enablesharednetdrives);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1541(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1541 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->minfreeconnections));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1541(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1541 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->minfreeconnections));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1541(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1541 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1541");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "minfreeconnections", r->minfreeconnections);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1542(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1542 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxfreeconnections));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1542(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1542 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxfreeconnections));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1542(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1542 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1542");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "maxfreeconnections", r->maxfreeconnections);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1543(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1543 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->initsesstable));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1543(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1543 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->initsesstable));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1543(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1543 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1543");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "initsesstable", r->initsesstable);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1544(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1544 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->initconntable));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1544(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1544 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->initconntable));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1544(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1544 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1544");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "initconntable", r->initconntable);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1545(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1545 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->initfiletable));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1545(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1545 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->initfiletable));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1545(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1545 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1545");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "initfiletable", r->initfiletable);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1546(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1546 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->initsearchtable));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1546(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1546 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->initsearchtable));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1546(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1546 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1546");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "initsearchtable", r->initsearchtable);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1547(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1547 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->alertsched));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1547(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1547 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->alertsched));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1547(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1547 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1547");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "alertsched", r->alertsched);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1548(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1548 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->errortreshold));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1548(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1548 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->errortreshold));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1548(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1548 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1548");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "errortreshold", r->errortreshold);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1549(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1549 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->networkerrortreshold));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1549(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1549 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->networkerrortreshold));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1549(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1549 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1549");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "networkerrortreshold", r->networkerrortreshold);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1550(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1550 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->diskspacetreshold));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1550(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1550 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->diskspacetreshold));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1550(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1550 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1550");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "diskspacetreshold", r->diskspacetreshold);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1552(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1552 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxlinkdelay));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1552(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1552 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxlinkdelay));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1552(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1552 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1552");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "maxlinkdelay", r->maxlinkdelay);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1553(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1553 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->minlinkthroughput));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1553(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1553 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->minlinkthroughput));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1553(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1553 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1553");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "minlinkthroughput", r->minlinkthroughput);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1554(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1554 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->linkinfovalidtime));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1554(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1554 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->linkinfovalidtime));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1554(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1554 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1554");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "linkinfovalidtime", r->linkinfovalidtime);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1555(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1555 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->scavqosinfoupdatetime));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1555(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1555 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->scavqosinfoupdatetime));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1555(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1555 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1555");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "scavqosinfoupdatetime", r->scavqosinfoupdatetime);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo1556(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetSrvInfo1556 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->maxworkitemidletime));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo1556(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetSrvInfo1556 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->maxworkitemidletime));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo1556(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo1556 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvInfo1556");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "maxworkitemidletime", r->maxworkitemidletime);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvInfo(struct ndr_push *ndr, int ndr_flags, const union srvsvc_NetSrvInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 100: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info100));
-			break; }
-
-			case 101: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info101));
-			break; }
-
-			case 102: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info102));
-			break; }
-
-			case 402: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info402));
-			break; }
-
-			case 403: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info403));
-			break; }
-
-			case 502: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info502));
-			break; }
-
-			case 503: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info503));
-			break; }
-
-			case 599: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info599));
-			break; }
-
-			case 1005: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1005));
-			break; }
-
-			case 1010: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1010));
-			break; }
-
-			case 1016: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1016));
-			break; }
-
-			case 1017: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1017));
-			break; }
-
-			case 1018: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1018));
-			break; }
-
-			case 1107: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1107));
-			break; }
-
-			case 1501: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1501));
-			break; }
-
-			case 1502: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1502));
-			break; }
-
-			case 1503: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1503));
-			break; }
-
-			case 1506: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1506));
-			break; }
-
-			case 1509: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1509));
-			break; }
-
-			case 1510: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1510));
-			break; }
-
-			case 1511: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1511));
-			break; }
-
-			case 1512: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1512));
-			break; }
-
-			case 1513: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1513));
-			break; }
-
-			case 1514: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1514));
-			break; }
-
-			case 1515: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1515));
-			break; }
-
-			case 1516: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1516));
-			break; }
-
-			case 1518: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1518));
-			break; }
-
-			case 1520: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1520));
-			break; }
-
-			case 1521: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1521));
-			break; }
-
-			case 1522: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1522));
-			break; }
-
-			case 1523: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1523));
-			break; }
-
-			case 1524: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1524));
-			break; }
-
-			case 1525: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1525));
-			break; }
-
-			case 1528: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1528));
-			break; }
-
-			case 1529: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1529));
-			break; }
-
-			case 1530: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1530));
-			break; }
-
-			case 1533: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1533));
-			break; }
-
-			case 1534: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1534));
-			break; }
-
-			case 1535: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1535));
-			break; }
-
-			case 1536: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1536));
-			break; }
-
-			case 1537: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1537));
-			break; }
-
-			case 1538: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1538));
-			break; }
-
-			case 1539: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1539));
-			break; }
-
-			case 1540: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1540));
-			break; }
-
-			case 1541: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1541));
-			break; }
-
-			case 1542: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1542));
-			break; }
-
-			case 1543: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1543));
-			break; }
-
-			case 1544: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1544));
-			break; }
-
-			case 1545: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1545));
-			break; }
-
-			case 1546: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1546));
-			break; }
-
-			case 1547: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1547));
-			break; }
-
-			case 1548: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1548));
-			break; }
-
-			case 1549: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1549));
-			break; }
-
-			case 1550: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1550));
-			break; }
-
-			case 1552: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1552));
-			break; }
-
-			case 1553: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1553));
-			break; }
-
-			case 1554: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1554));
-			break; }
-
-			case 1555: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1555));
-			break; }
-
-			case 1556: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1556));
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 100:
-				if (r->info100) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo100(ndr, NDR_SCALARS|NDR_BUFFERS, r->info100));
-				}
-			break;
-
-			case 101:
-				if (r->info101) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo101(ndr, NDR_SCALARS|NDR_BUFFERS, r->info101));
-				}
-			break;
-
-			case 102:
-				if (r->info102) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo102(ndr, NDR_SCALARS|NDR_BUFFERS, r->info102));
-				}
-			break;
-
-			case 402:
-				if (r->info402) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo402(ndr, NDR_SCALARS|NDR_BUFFERS, r->info402));
-				}
-			break;
-
-			case 403:
-				if (r->info403) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo403(ndr, NDR_SCALARS|NDR_BUFFERS, r->info403));
-				}
-			break;
-
-			case 502:
-				if (r->info502) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo502(ndr, NDR_SCALARS, r->info502));
-				}
-			break;
-
-			case 503:
-				if (r->info503) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo503(ndr, NDR_SCALARS|NDR_BUFFERS, r->info503));
-				}
-			break;
-
-			case 599:
-				if (r->info599) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo599(ndr, NDR_SCALARS|NDR_BUFFERS, r->info599));
-				}
-			break;
-
-			case 1005:
-				if (r->info1005) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1005(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1005));
-				}
-			break;
-
-			case 1010:
-				if (r->info1010) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1010(ndr, NDR_SCALARS, r->info1010));
-				}
-			break;
-
-			case 1016:
-				if (r->info1016) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1016(ndr, NDR_SCALARS, r->info1016));
-				}
-			break;
-
-			case 1017:
-				if (r->info1017) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1017(ndr, NDR_SCALARS, r->info1017));
-				}
-			break;
-
-			case 1018:
-				if (r->info1018) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1018(ndr, NDR_SCALARS, r->info1018));
-				}
-			break;
-
-			case 1107:
-				if (r->info1107) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1107(ndr, NDR_SCALARS, r->info1107));
-				}
-			break;
-
-			case 1501:
-				if (r->info1501) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1501(ndr, NDR_SCALARS, r->info1501));
-				}
-			break;
-
-			case 1502:
-				if (r->info1502) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1502(ndr, NDR_SCALARS, r->info1502));
-				}
-			break;
-
-			case 1503:
-				if (r->info1503) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1503(ndr, NDR_SCALARS, r->info1503));
-				}
-			break;
-
-			case 1506:
-				if (r->info1506) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1506(ndr, NDR_SCALARS, r->info1506));
-				}
-			break;
-
-			case 1509:
-				if (r->info1509) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1509(ndr, NDR_SCALARS, r->info1509));
-				}
-			break;
-
-			case 1510:
-				if (r->info1510) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1510(ndr, NDR_SCALARS, r->info1510));
-				}
-			break;
-
-			case 1511:
-				if (r->info1511) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1511(ndr, NDR_SCALARS, r->info1511));
-				}
-			break;
-
-			case 1512:
-				if (r->info1512) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1512(ndr, NDR_SCALARS, r->info1512));
-				}
-			break;
-
-			case 1513:
-				if (r->info1513) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1513(ndr, NDR_SCALARS, r->info1513));
-				}
-			break;
-
-			case 1514:
-				if (r->info1514) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1514(ndr, NDR_SCALARS, r->info1514));
-				}
-			break;
-
-			case 1515:
-				if (r->info1515) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1515(ndr, NDR_SCALARS, r->info1515));
-				}
-			break;
-
-			case 1516:
-				if (r->info1516) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1516(ndr, NDR_SCALARS, r->info1516));
-				}
-			break;
-
-			case 1518:
-				if (r->info1518) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1518(ndr, NDR_SCALARS, r->info1518));
-				}
-			break;
-
-			case 1520:
-				if (r->info1520) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1520(ndr, NDR_SCALARS, r->info1520));
-				}
-			break;
-
-			case 1521:
-				if (r->info1521) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1521(ndr, NDR_SCALARS, r->info1521));
-				}
-			break;
-
-			case 1522:
-				if (r->info1522) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1522(ndr, NDR_SCALARS, r->info1522));
-				}
-			break;
-
-			case 1523:
-				if (r->info1523) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1523(ndr, NDR_SCALARS, r->info1523));
-				}
-			break;
-
-			case 1524:
-				if (r->info1524) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1524(ndr, NDR_SCALARS, r->info1524));
-				}
-			break;
-
-			case 1525:
-				if (r->info1525) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1525(ndr, NDR_SCALARS, r->info1525));
-				}
-			break;
-
-			case 1528:
-				if (r->info1528) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1528(ndr, NDR_SCALARS, r->info1528));
-				}
-			break;
-
-			case 1529:
-				if (r->info1529) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1529(ndr, NDR_SCALARS, r->info1529));
-				}
-			break;
-
-			case 1530:
-				if (r->info1530) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1530(ndr, NDR_SCALARS, r->info1530));
-				}
-			break;
-
-			case 1533:
-				if (r->info1533) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1533(ndr, NDR_SCALARS, r->info1533));
-				}
-			break;
-
-			case 1534:
-				if (r->info1534) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1534(ndr, NDR_SCALARS, r->info1534));
-				}
-			break;
-
-			case 1535:
-				if (r->info1535) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1535(ndr, NDR_SCALARS, r->info1535));
-				}
-			break;
-
-			case 1536:
-				if (r->info1536) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1536(ndr, NDR_SCALARS, r->info1536));
-				}
-			break;
-
-			case 1537:
-				if (r->info1537) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1537(ndr, NDR_SCALARS, r->info1537));
-				}
-			break;
-
-			case 1538:
-				if (r->info1538) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1538(ndr, NDR_SCALARS, r->info1538));
-				}
-			break;
-
-			case 1539:
-				if (r->info1539) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1539(ndr, NDR_SCALARS, r->info1539));
-				}
-			break;
-
-			case 1540:
-				if (r->info1540) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1540(ndr, NDR_SCALARS, r->info1540));
-				}
-			break;
-
-			case 1541:
-				if (r->info1541) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1541(ndr, NDR_SCALARS, r->info1541));
-				}
-			break;
-
-			case 1542:
-				if (r->info1542) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1542(ndr, NDR_SCALARS, r->info1542));
-				}
-			break;
-
-			case 1543:
-				if (r->info1543) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1543(ndr, NDR_SCALARS, r->info1543));
-				}
-			break;
-
-			case 1544:
-				if (r->info1544) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1544(ndr, NDR_SCALARS, r->info1544));
-				}
-			break;
-
-			case 1545:
-				if (r->info1545) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1545(ndr, NDR_SCALARS, r->info1545));
-				}
-			break;
-
-			case 1546:
-				if (r->info1546) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1546(ndr, NDR_SCALARS, r->info1546));
-				}
-			break;
-
-			case 1547:
-				if (r->info1547) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1547(ndr, NDR_SCALARS, r->info1547));
-				}
-			break;
-
-			case 1548:
-				if (r->info1548) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1548(ndr, NDR_SCALARS, r->info1548));
-				}
-			break;
-
-			case 1549:
-				if (r->info1549) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1549(ndr, NDR_SCALARS, r->info1549));
-				}
-			break;
-
-			case 1550:
-				if (r->info1550) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1550(ndr, NDR_SCALARS, r->info1550));
-				}
-			break;
-
-			case 1552:
-				if (r->info1552) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1552(ndr, NDR_SCALARS, r->info1552));
-				}
-			break;
-
-			case 1553:
-				if (r->info1553) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1553(ndr, NDR_SCALARS, r->info1553));
-				}
-			break;
-
-			case 1554:
-				if (r->info1554) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1554(ndr, NDR_SCALARS, r->info1554));
-				}
-			break;
-
-			case 1555:
-				if (r->info1555) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1555(ndr, NDR_SCALARS, r->info1555));
-				}
-			break;
-
-			case 1556:
-				if (r->info1556) {
-					NDR_CHECK(ndr_push_srvsvc_NetSrvInfo1556(ndr, NDR_SCALARS, r->info1556));
-				}
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvInfo(struct ndr_pull *ndr, int ndr_flags, union srvsvc_NetSrvInfo *r)
-{
-	int level;
-	uint32_t _level;
-	TALLOC_CTX *_mem_save_info100_0;
-	TALLOC_CTX *_mem_save_info101_0;
-	TALLOC_CTX *_mem_save_info102_0;
-	TALLOC_CTX *_mem_save_info402_0;
-	TALLOC_CTX *_mem_save_info403_0;
-	TALLOC_CTX *_mem_save_info502_0;
-	TALLOC_CTX *_mem_save_info503_0;
-	TALLOC_CTX *_mem_save_info599_0;
-	TALLOC_CTX *_mem_save_info1005_0;
-	TALLOC_CTX *_mem_save_info1010_0;
-	TALLOC_CTX *_mem_save_info1016_0;
-	TALLOC_CTX *_mem_save_info1017_0;
-	TALLOC_CTX *_mem_save_info1018_0;
-	TALLOC_CTX *_mem_save_info1107_0;
-	TALLOC_CTX *_mem_save_info1501_0;
-	TALLOC_CTX *_mem_save_info1502_0;
-	TALLOC_CTX *_mem_save_info1503_0;
-	TALLOC_CTX *_mem_save_info1506_0;
-	TALLOC_CTX *_mem_save_info1509_0;
-	TALLOC_CTX *_mem_save_info1510_0;
-	TALLOC_CTX *_mem_save_info1511_0;
-	TALLOC_CTX *_mem_save_info1512_0;
-	TALLOC_CTX *_mem_save_info1513_0;
-	TALLOC_CTX *_mem_save_info1514_0;
-	TALLOC_CTX *_mem_save_info1515_0;
-	TALLOC_CTX *_mem_save_info1516_0;
-	TALLOC_CTX *_mem_save_info1518_0;
-	TALLOC_CTX *_mem_save_info1520_0;
-	TALLOC_CTX *_mem_save_info1521_0;
-	TALLOC_CTX *_mem_save_info1522_0;
-	TALLOC_CTX *_mem_save_info1523_0;
-	TALLOC_CTX *_mem_save_info1524_0;
-	TALLOC_CTX *_mem_save_info1525_0;
-	TALLOC_CTX *_mem_save_info1528_0;
-	TALLOC_CTX *_mem_save_info1529_0;
-	TALLOC_CTX *_mem_save_info1530_0;
-	TALLOC_CTX *_mem_save_info1533_0;
-	TALLOC_CTX *_mem_save_info1534_0;
-	TALLOC_CTX *_mem_save_info1535_0;
-	TALLOC_CTX *_mem_save_info1536_0;
-	TALLOC_CTX *_mem_save_info1537_0;
-	TALLOC_CTX *_mem_save_info1538_0;
-	TALLOC_CTX *_mem_save_info1539_0;
-	TALLOC_CTX *_mem_save_info1540_0;
-	TALLOC_CTX *_mem_save_info1541_0;
-	TALLOC_CTX *_mem_save_info1542_0;
-	TALLOC_CTX *_mem_save_info1543_0;
-	TALLOC_CTX *_mem_save_info1544_0;
-	TALLOC_CTX *_mem_save_info1545_0;
-	TALLOC_CTX *_mem_save_info1546_0;
-	TALLOC_CTX *_mem_save_info1547_0;
-	TALLOC_CTX *_mem_save_info1548_0;
-	TALLOC_CTX *_mem_save_info1549_0;
-	TALLOC_CTX *_mem_save_info1550_0;
-	TALLOC_CTX *_mem_save_info1552_0;
-	TALLOC_CTX *_mem_save_info1553_0;
-	TALLOC_CTX *_mem_save_info1554_0;
-	TALLOC_CTX *_mem_save_info1555_0;
-	TALLOC_CTX *_mem_save_info1556_0;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 100: {
-				uint32_t _ptr_info100;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info100));
-				if (_ptr_info100) {
-					NDR_PULL_ALLOC(ndr, r->info100);
-				} else {
-					r->info100 = NULL;
-				}
-			break; }
-
-			case 101: {
-				uint32_t _ptr_info101;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info101));
-				if (_ptr_info101) {
-					NDR_PULL_ALLOC(ndr, r->info101);
-				} else {
-					r->info101 = NULL;
-				}
-			break; }
-
-			case 102: {
-				uint32_t _ptr_info102;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info102));
-				if (_ptr_info102) {
-					NDR_PULL_ALLOC(ndr, r->info102);
-				} else {
-					r->info102 = NULL;
-				}
-			break; }
-
-			case 402: {
-				uint32_t _ptr_info402;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info402));
-				if (_ptr_info402) {
-					NDR_PULL_ALLOC(ndr, r->info402);
-				} else {
-					r->info402 = NULL;
-				}
-			break; }
-
-			case 403: {
-				uint32_t _ptr_info403;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info403));
-				if (_ptr_info403) {
-					NDR_PULL_ALLOC(ndr, r->info403);
-				} else {
-					r->info403 = NULL;
-				}
-			break; }
-
-			case 502: {
-				uint32_t _ptr_info502;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info502));
-				if (_ptr_info502) {
-					NDR_PULL_ALLOC(ndr, r->info502);
-				} else {
-					r->info502 = NULL;
-				}
-			break; }
-
-			case 503: {
-				uint32_t _ptr_info503;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info503));
-				if (_ptr_info503) {
-					NDR_PULL_ALLOC(ndr, r->info503);
-				} else {
-					r->info503 = NULL;
-				}
-			break; }
-
-			case 599: {
-				uint32_t _ptr_info599;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info599));
-				if (_ptr_info599) {
-					NDR_PULL_ALLOC(ndr, r->info599);
-				} else {
-					r->info599 = NULL;
-				}
-			break; }
-
-			case 1005: {
-				uint32_t _ptr_info1005;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1005));
-				if (_ptr_info1005) {
-					NDR_PULL_ALLOC(ndr, r->info1005);
-				} else {
-					r->info1005 = NULL;
-				}
-			break; }
-
-			case 1010: {
-				uint32_t _ptr_info1010;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1010));
-				if (_ptr_info1010) {
-					NDR_PULL_ALLOC(ndr, r->info1010);
-				} else {
-					r->info1010 = NULL;
-				}
-			break; }
-
-			case 1016: {
-				uint32_t _ptr_info1016;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1016));
-				if (_ptr_info1016) {
-					NDR_PULL_ALLOC(ndr, r->info1016);
-				} else {
-					r->info1016 = NULL;
-				}
-			break; }
-
-			case 1017: {
-				uint32_t _ptr_info1017;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1017));
-				if (_ptr_info1017) {
-					NDR_PULL_ALLOC(ndr, r->info1017);
-				} else {
-					r->info1017 = NULL;
-				}
-			break; }
-
-			case 1018: {
-				uint32_t _ptr_info1018;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1018));
-				if (_ptr_info1018) {
-					NDR_PULL_ALLOC(ndr, r->info1018);
-				} else {
-					r->info1018 = NULL;
-				}
-			break; }
-
-			case 1107: {
-				uint32_t _ptr_info1107;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1107));
-				if (_ptr_info1107) {
-					NDR_PULL_ALLOC(ndr, r->info1107);
-				} else {
-					r->info1107 = NULL;
-				}
-			break; }
-
-			case 1501: {
-				uint32_t _ptr_info1501;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1501));
-				if (_ptr_info1501) {
-					NDR_PULL_ALLOC(ndr, r->info1501);
-				} else {
-					r->info1501 = NULL;
-				}
-			break; }
-
-			case 1502: {
-				uint32_t _ptr_info1502;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1502));
-				if (_ptr_info1502) {
-					NDR_PULL_ALLOC(ndr, r->info1502);
-				} else {
-					r->info1502 = NULL;
-				}
-			break; }
-
-			case 1503: {
-				uint32_t _ptr_info1503;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1503));
-				if (_ptr_info1503) {
-					NDR_PULL_ALLOC(ndr, r->info1503);
-				} else {
-					r->info1503 = NULL;
-				}
-			break; }
-
-			case 1506: {
-				uint32_t _ptr_info1506;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1506));
-				if (_ptr_info1506) {
-					NDR_PULL_ALLOC(ndr, r->info1506);
-				} else {
-					r->info1506 = NULL;
-				}
-			break; }
-
-			case 1509: {
-				uint32_t _ptr_info1509;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1509));
-				if (_ptr_info1509) {
-					NDR_PULL_ALLOC(ndr, r->info1509);
-				} else {
-					r->info1509 = NULL;
-				}
-			break; }
-
-			case 1510: {
-				uint32_t _ptr_info1510;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1510));
-				if (_ptr_info1510) {
-					NDR_PULL_ALLOC(ndr, r->info1510);
-				} else {
-					r->info1510 = NULL;
-				}
-			break; }
-
-			case 1511: {
-				uint32_t _ptr_info1511;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1511));
-				if (_ptr_info1511) {
-					NDR_PULL_ALLOC(ndr, r->info1511);
-				} else {
-					r->info1511 = NULL;
-				}
-			break; }
-
-			case 1512: {
-				uint32_t _ptr_info1512;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1512));
-				if (_ptr_info1512) {
-					NDR_PULL_ALLOC(ndr, r->info1512);
-				} else {
-					r->info1512 = NULL;
-				}
-			break; }
-
-			case 1513: {
-				uint32_t _ptr_info1513;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1513));
-				if (_ptr_info1513) {
-					NDR_PULL_ALLOC(ndr, r->info1513);
-				} else {
-					r->info1513 = NULL;
-				}
-			break; }
-
-			case 1514: {
-				uint32_t _ptr_info1514;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1514));
-				if (_ptr_info1514) {
-					NDR_PULL_ALLOC(ndr, r->info1514);
-				} else {
-					r->info1514 = NULL;
-				}
-			break; }
-
-			case 1515: {
-				uint32_t _ptr_info1515;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1515));
-				if (_ptr_info1515) {
-					NDR_PULL_ALLOC(ndr, r->info1515);
-				} else {
-					r->info1515 = NULL;
-				}
-			break; }
-
-			case 1516: {
-				uint32_t _ptr_info1516;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1516));
-				if (_ptr_info1516) {
-					NDR_PULL_ALLOC(ndr, r->info1516);
-				} else {
-					r->info1516 = NULL;
-				}
-			break; }
-
-			case 1518: {
-				uint32_t _ptr_info1518;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1518));
-				if (_ptr_info1518) {
-					NDR_PULL_ALLOC(ndr, r->info1518);
-				} else {
-					r->info1518 = NULL;
-				}
-			break; }
-
-			case 1520: {
-				uint32_t _ptr_info1520;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1520));
-				if (_ptr_info1520) {
-					NDR_PULL_ALLOC(ndr, r->info1520);
-				} else {
-					r->info1520 = NULL;
-				}
-			break; }
-
-			case 1521: {
-				uint32_t _ptr_info1521;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1521));
-				if (_ptr_info1521) {
-					NDR_PULL_ALLOC(ndr, r->info1521);
-				} else {
-					r->info1521 = NULL;
-				}
-			break; }
-
-			case 1522: {
-				uint32_t _ptr_info1522;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1522));
-				if (_ptr_info1522) {
-					NDR_PULL_ALLOC(ndr, r->info1522);
-				} else {
-					r->info1522 = NULL;
-				}
-			break; }
-
-			case 1523: {
-				uint32_t _ptr_info1523;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1523));
-				if (_ptr_info1523) {
-					NDR_PULL_ALLOC(ndr, r->info1523);
-				} else {
-					r->info1523 = NULL;
-				}
-			break; }
-
-			case 1524: {
-				uint32_t _ptr_info1524;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1524));
-				if (_ptr_info1524) {
-					NDR_PULL_ALLOC(ndr, r->info1524);
-				} else {
-					r->info1524 = NULL;
-				}
-			break; }
-
-			case 1525: {
-				uint32_t _ptr_info1525;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1525));
-				if (_ptr_info1525) {
-					NDR_PULL_ALLOC(ndr, r->info1525);
-				} else {
-					r->info1525 = NULL;
-				}
-			break; }
-
-			case 1528: {
-				uint32_t _ptr_info1528;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1528));
-				if (_ptr_info1528) {
-					NDR_PULL_ALLOC(ndr, r->info1528);
-				} else {
-					r->info1528 = NULL;
-				}
-			break; }
-
-			case 1529: {
-				uint32_t _ptr_info1529;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1529));
-				if (_ptr_info1529) {
-					NDR_PULL_ALLOC(ndr, r->info1529);
-				} else {
-					r->info1529 = NULL;
-				}
-			break; }
-
-			case 1530: {
-				uint32_t _ptr_info1530;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1530));
-				if (_ptr_info1530) {
-					NDR_PULL_ALLOC(ndr, r->info1530);
-				} else {
-					r->info1530 = NULL;
-				}
-			break; }
-
-			case 1533: {
-				uint32_t _ptr_info1533;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1533));
-				if (_ptr_info1533) {
-					NDR_PULL_ALLOC(ndr, r->info1533);
-				} else {
-					r->info1533 = NULL;
-				}
-			break; }
-
-			case 1534: {
-				uint32_t _ptr_info1534;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1534));
-				if (_ptr_info1534) {
-					NDR_PULL_ALLOC(ndr, r->info1534);
-				} else {
-					r->info1534 = NULL;
-				}
-			break; }
-
-			case 1535: {
-				uint32_t _ptr_info1535;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1535));
-				if (_ptr_info1535) {
-					NDR_PULL_ALLOC(ndr, r->info1535);
-				} else {
-					r->info1535 = NULL;
-				}
-			break; }
-
-			case 1536: {
-				uint32_t _ptr_info1536;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1536));
-				if (_ptr_info1536) {
-					NDR_PULL_ALLOC(ndr, r->info1536);
-				} else {
-					r->info1536 = NULL;
-				}
-			break; }
-
-			case 1537: {
-				uint32_t _ptr_info1537;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1537));
-				if (_ptr_info1537) {
-					NDR_PULL_ALLOC(ndr, r->info1537);
-				} else {
-					r->info1537 = NULL;
-				}
-			break; }
-
-			case 1538: {
-				uint32_t _ptr_info1538;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1538));
-				if (_ptr_info1538) {
-					NDR_PULL_ALLOC(ndr, r->info1538);
-				} else {
-					r->info1538 = NULL;
-				}
-			break; }
-
-			case 1539: {
-				uint32_t _ptr_info1539;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1539));
-				if (_ptr_info1539) {
-					NDR_PULL_ALLOC(ndr, r->info1539);
-				} else {
-					r->info1539 = NULL;
-				}
-			break; }
-
-			case 1540: {
-				uint32_t _ptr_info1540;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1540));
-				if (_ptr_info1540) {
-					NDR_PULL_ALLOC(ndr, r->info1540);
-				} else {
-					r->info1540 = NULL;
-				}
-			break; }
-
-			case 1541: {
-				uint32_t _ptr_info1541;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1541));
-				if (_ptr_info1541) {
-					NDR_PULL_ALLOC(ndr, r->info1541);
-				} else {
-					r->info1541 = NULL;
-				}
-			break; }
-
-			case 1542: {
-				uint32_t _ptr_info1542;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1542));
-				if (_ptr_info1542) {
-					NDR_PULL_ALLOC(ndr, r->info1542);
-				} else {
-					r->info1542 = NULL;
-				}
-			break; }
-
-			case 1543: {
-				uint32_t _ptr_info1543;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1543));
-				if (_ptr_info1543) {
-					NDR_PULL_ALLOC(ndr, r->info1543);
-				} else {
-					r->info1543 = NULL;
-				}
-			break; }
-
-			case 1544: {
-				uint32_t _ptr_info1544;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1544));
-				if (_ptr_info1544) {
-					NDR_PULL_ALLOC(ndr, r->info1544);
-				} else {
-					r->info1544 = NULL;
-				}
-			break; }
-
-			case 1545: {
-				uint32_t _ptr_info1545;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1545));
-				if (_ptr_info1545) {
-					NDR_PULL_ALLOC(ndr, r->info1545);
-				} else {
-					r->info1545 = NULL;
-				}
-			break; }
-
-			case 1546: {
-				uint32_t _ptr_info1546;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1546));
-				if (_ptr_info1546) {
-					NDR_PULL_ALLOC(ndr, r->info1546);
-				} else {
-					r->info1546 = NULL;
-				}
-			break; }
-
-			case 1547: {
-				uint32_t _ptr_info1547;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1547));
-				if (_ptr_info1547) {
-					NDR_PULL_ALLOC(ndr, r->info1547);
-				} else {
-					r->info1547 = NULL;
-				}
-			break; }
-
-			case 1548: {
-				uint32_t _ptr_info1548;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1548));
-				if (_ptr_info1548) {
-					NDR_PULL_ALLOC(ndr, r->info1548);
-				} else {
-					r->info1548 = NULL;
-				}
-			break; }
-
-			case 1549: {
-				uint32_t _ptr_info1549;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1549));
-				if (_ptr_info1549) {
-					NDR_PULL_ALLOC(ndr, r->info1549);
-				} else {
-					r->info1549 = NULL;
-				}
-			break; }
-
-			case 1550: {
-				uint32_t _ptr_info1550;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1550));
-				if (_ptr_info1550) {
-					NDR_PULL_ALLOC(ndr, r->info1550);
-				} else {
-					r->info1550 = NULL;
-				}
-			break; }
-
-			case 1552: {
-				uint32_t _ptr_info1552;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1552));
-				if (_ptr_info1552) {
-					NDR_PULL_ALLOC(ndr, r->info1552);
-				} else {
-					r->info1552 = NULL;
-				}
-			break; }
-
-			case 1553: {
-				uint32_t _ptr_info1553;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1553));
-				if (_ptr_info1553) {
-					NDR_PULL_ALLOC(ndr, r->info1553);
-				} else {
-					r->info1553 = NULL;
-				}
-			break; }
-
-			case 1554: {
-				uint32_t _ptr_info1554;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1554));
-				if (_ptr_info1554) {
-					NDR_PULL_ALLOC(ndr, r->info1554);
-				} else {
-					r->info1554 = NULL;
-				}
-			break; }
-
-			case 1555: {
-				uint32_t _ptr_info1555;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1555));
-				if (_ptr_info1555) {
-					NDR_PULL_ALLOC(ndr, r->info1555);
-				} else {
-					r->info1555 = NULL;
-				}
-			break; }
-
-			case 1556: {
-				uint32_t _ptr_info1556;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1556));
-				if (_ptr_info1556) {
-					NDR_PULL_ALLOC(ndr, r->info1556);
-				} else {
-					r->info1556 = NULL;
-				}
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 100:
-				if (r->info100) {
-					_mem_save_info100_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info100, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo100(ndr, NDR_SCALARS|NDR_BUFFERS, r->info100));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info100_0, 0);
-				}
-			break;
-
-			case 101:
-				if (r->info101) {
-					_mem_save_info101_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info101, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo101(ndr, NDR_SCALARS|NDR_BUFFERS, r->info101));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info101_0, 0);
-				}
-			break;
-
-			case 102:
-				if (r->info102) {
-					_mem_save_info102_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info102, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo102(ndr, NDR_SCALARS|NDR_BUFFERS, r->info102));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info102_0, 0);
-				}
-			break;
-
-			case 402:
-				if (r->info402) {
-					_mem_save_info402_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info402, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo402(ndr, NDR_SCALARS|NDR_BUFFERS, r->info402));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info402_0, 0);
-				}
-			break;
-
-			case 403:
-				if (r->info403) {
-					_mem_save_info403_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info403, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo403(ndr, NDR_SCALARS|NDR_BUFFERS, r->info403));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info403_0, 0);
-				}
-			break;
-
-			case 502:
-				if (r->info502) {
-					_mem_save_info502_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info502, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo502(ndr, NDR_SCALARS, r->info502));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info502_0, 0);
-				}
-			break;
-
-			case 503:
-				if (r->info503) {
-					_mem_save_info503_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info503, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo503(ndr, NDR_SCALARS|NDR_BUFFERS, r->info503));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info503_0, 0);
-				}
-			break;
-
-			case 599:
-				if (r->info599) {
-					_mem_save_info599_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info599, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo599(ndr, NDR_SCALARS|NDR_BUFFERS, r->info599));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info599_0, 0);
-				}
-			break;
-
-			case 1005:
-				if (r->info1005) {
-					_mem_save_info1005_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1005, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1005(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1005));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1005_0, 0);
-				}
-			break;
-
-			case 1010:
-				if (r->info1010) {
-					_mem_save_info1010_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1010, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1010(ndr, NDR_SCALARS, r->info1010));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1010_0, 0);
-				}
-			break;
-
-			case 1016:
-				if (r->info1016) {
-					_mem_save_info1016_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1016, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1016(ndr, NDR_SCALARS, r->info1016));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1016_0, 0);
-				}
-			break;
-
-			case 1017:
-				if (r->info1017) {
-					_mem_save_info1017_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1017, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1017(ndr, NDR_SCALARS, r->info1017));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1017_0, 0);
-				}
-			break;
-
-			case 1018:
-				if (r->info1018) {
-					_mem_save_info1018_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1018, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1018(ndr, NDR_SCALARS, r->info1018));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1018_0, 0);
-				}
-			break;
-
-			case 1107:
-				if (r->info1107) {
-					_mem_save_info1107_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1107, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1107(ndr, NDR_SCALARS, r->info1107));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1107_0, 0);
-				}
-			break;
-
-			case 1501:
-				if (r->info1501) {
-					_mem_save_info1501_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1501, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1501(ndr, NDR_SCALARS, r->info1501));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1501_0, 0);
-				}
-			break;
-
-			case 1502:
-				if (r->info1502) {
-					_mem_save_info1502_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1502, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1502(ndr, NDR_SCALARS, r->info1502));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1502_0, 0);
-				}
-			break;
-
-			case 1503:
-				if (r->info1503) {
-					_mem_save_info1503_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1503, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1503(ndr, NDR_SCALARS, r->info1503));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1503_0, 0);
-				}
-			break;
-
-			case 1506:
-				if (r->info1506) {
-					_mem_save_info1506_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1506, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1506(ndr, NDR_SCALARS, r->info1506));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1506_0, 0);
-				}
-			break;
-
-			case 1509:
-				if (r->info1509) {
-					_mem_save_info1509_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1509, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1509(ndr, NDR_SCALARS, r->info1509));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1509_0, 0);
-				}
-			break;
-
-			case 1510:
-				if (r->info1510) {
-					_mem_save_info1510_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1510, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1510(ndr, NDR_SCALARS, r->info1510));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1510_0, 0);
-				}
-			break;
-
-			case 1511:
-				if (r->info1511) {
-					_mem_save_info1511_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1511, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1511(ndr, NDR_SCALARS, r->info1511));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1511_0, 0);
-				}
-			break;
-
-			case 1512:
-				if (r->info1512) {
-					_mem_save_info1512_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1512, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1512(ndr, NDR_SCALARS, r->info1512));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1512_0, 0);
-				}
-			break;
-
-			case 1513:
-				if (r->info1513) {
-					_mem_save_info1513_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1513, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1513(ndr, NDR_SCALARS, r->info1513));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1513_0, 0);
-				}
-			break;
-
-			case 1514:
-				if (r->info1514) {
-					_mem_save_info1514_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1514, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1514(ndr, NDR_SCALARS, r->info1514));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1514_0, 0);
-				}
-			break;
-
-			case 1515:
-				if (r->info1515) {
-					_mem_save_info1515_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1515, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1515(ndr, NDR_SCALARS, r->info1515));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1515_0, 0);
-				}
-			break;
-
-			case 1516:
-				if (r->info1516) {
-					_mem_save_info1516_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1516, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1516(ndr, NDR_SCALARS, r->info1516));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1516_0, 0);
-				}
-			break;
-
-			case 1518:
-				if (r->info1518) {
-					_mem_save_info1518_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1518, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1518(ndr, NDR_SCALARS, r->info1518));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1518_0, 0);
-				}
-			break;
-
-			case 1520:
-				if (r->info1520) {
-					_mem_save_info1520_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1520, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1520(ndr, NDR_SCALARS, r->info1520));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1520_0, 0);
-				}
-			break;
-
-			case 1521:
-				if (r->info1521) {
-					_mem_save_info1521_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1521, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1521(ndr, NDR_SCALARS, r->info1521));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1521_0, 0);
-				}
-			break;
-
-			case 1522:
-				if (r->info1522) {
-					_mem_save_info1522_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1522, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1522(ndr, NDR_SCALARS, r->info1522));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1522_0, 0);
-				}
-			break;
-
-			case 1523:
-				if (r->info1523) {
-					_mem_save_info1523_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1523, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1523(ndr, NDR_SCALARS, r->info1523));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1523_0, 0);
-				}
-			break;
-
-			case 1524:
-				if (r->info1524) {
-					_mem_save_info1524_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1524, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1524(ndr, NDR_SCALARS, r->info1524));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1524_0, 0);
-				}
-			break;
-
-			case 1525:
-				if (r->info1525) {
-					_mem_save_info1525_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1525, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1525(ndr, NDR_SCALARS, r->info1525));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1525_0, 0);
-				}
-			break;
-
-			case 1528:
-				if (r->info1528) {
-					_mem_save_info1528_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1528, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1528(ndr, NDR_SCALARS, r->info1528));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1528_0, 0);
-				}
-			break;
-
-			case 1529:
-				if (r->info1529) {
-					_mem_save_info1529_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1529, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1529(ndr, NDR_SCALARS, r->info1529));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1529_0, 0);
-				}
-			break;
-
-			case 1530:
-				if (r->info1530) {
-					_mem_save_info1530_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1530, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1530(ndr, NDR_SCALARS, r->info1530));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1530_0, 0);
-				}
-			break;
-
-			case 1533:
-				if (r->info1533) {
-					_mem_save_info1533_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1533, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1533(ndr, NDR_SCALARS, r->info1533));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1533_0, 0);
-				}
-			break;
-
-			case 1534:
-				if (r->info1534) {
-					_mem_save_info1534_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1534, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1534(ndr, NDR_SCALARS, r->info1534));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1534_0, 0);
-				}
-			break;
-
-			case 1535:
-				if (r->info1535) {
-					_mem_save_info1535_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1535, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1535(ndr, NDR_SCALARS, r->info1535));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1535_0, 0);
-				}
-			break;
-
-			case 1536:
-				if (r->info1536) {
-					_mem_save_info1536_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1536, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1536(ndr, NDR_SCALARS, r->info1536));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1536_0, 0);
-				}
-			break;
-
-			case 1537:
-				if (r->info1537) {
-					_mem_save_info1537_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1537, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1537(ndr, NDR_SCALARS, r->info1537));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1537_0, 0);
-				}
-			break;
-
-			case 1538:
-				if (r->info1538) {
-					_mem_save_info1538_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1538, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1538(ndr, NDR_SCALARS, r->info1538));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1538_0, 0);
-				}
-			break;
-
-			case 1539:
-				if (r->info1539) {
-					_mem_save_info1539_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1539, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1539(ndr, NDR_SCALARS, r->info1539));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1539_0, 0);
-				}
-			break;
-
-			case 1540:
-				if (r->info1540) {
-					_mem_save_info1540_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1540, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1540(ndr, NDR_SCALARS, r->info1540));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1540_0, 0);
-				}
-			break;
-
-			case 1541:
-				if (r->info1541) {
-					_mem_save_info1541_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1541, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1541(ndr, NDR_SCALARS, r->info1541));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1541_0, 0);
-				}
-			break;
-
-			case 1542:
-				if (r->info1542) {
-					_mem_save_info1542_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1542, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1542(ndr, NDR_SCALARS, r->info1542));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1542_0, 0);
-				}
-			break;
-
-			case 1543:
-				if (r->info1543) {
-					_mem_save_info1543_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1543, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1543(ndr, NDR_SCALARS, r->info1543));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1543_0, 0);
-				}
-			break;
-
-			case 1544:
-				if (r->info1544) {
-					_mem_save_info1544_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1544, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1544(ndr, NDR_SCALARS, r->info1544));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1544_0, 0);
-				}
-			break;
-
-			case 1545:
-				if (r->info1545) {
-					_mem_save_info1545_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1545, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1545(ndr, NDR_SCALARS, r->info1545));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1545_0, 0);
-				}
-			break;
-
-			case 1546:
-				if (r->info1546) {
-					_mem_save_info1546_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1546, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1546(ndr, NDR_SCALARS, r->info1546));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1546_0, 0);
-				}
-			break;
-
-			case 1547:
-				if (r->info1547) {
-					_mem_save_info1547_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1547, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1547(ndr, NDR_SCALARS, r->info1547));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1547_0, 0);
-				}
-			break;
-
-			case 1548:
-				if (r->info1548) {
-					_mem_save_info1548_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1548, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1548(ndr, NDR_SCALARS, r->info1548));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1548_0, 0);
-				}
-			break;
-
-			case 1549:
-				if (r->info1549) {
-					_mem_save_info1549_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1549, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1549(ndr, NDR_SCALARS, r->info1549));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1549_0, 0);
-				}
-			break;
-
-			case 1550:
-				if (r->info1550) {
-					_mem_save_info1550_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1550, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1550(ndr, NDR_SCALARS, r->info1550));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1550_0, 0);
-				}
-			break;
-
-			case 1552:
-				if (r->info1552) {
-					_mem_save_info1552_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1552, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1552(ndr, NDR_SCALARS, r->info1552));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1552_0, 0);
-				}
-			break;
-
-			case 1553:
-				if (r->info1553) {
-					_mem_save_info1553_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1553, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1553(ndr, NDR_SCALARS, r->info1553));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1553_0, 0);
-				}
-			break;
-
-			case 1554:
-				if (r->info1554) {
-					_mem_save_info1554_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1554, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1554(ndr, NDR_SCALARS, r->info1554));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1554_0, 0);
-				}
-			break;
-
-			case 1555:
-				if (r->info1555) {
-					_mem_save_info1555_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1555, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1555(ndr, NDR_SCALARS, r->info1555));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1555_0, 0);
-				}
-			break;
-
-			case 1556:
-				if (r->info1556) {
-					_mem_save_info1556_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1556, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo1556(ndr, NDR_SCALARS, r->info1556));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1556_0, 0);
-				}
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvInfo(struct ndr_print *ndr, const char *name, const union srvsvc_NetSrvInfo *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "srvsvc_NetSrvInfo");
-	switch (level) {
-		case 100:
-			ndr_print_ptr(ndr, "info100", r->info100);
-			ndr->depth++;
-			if (r->info100) {
-				ndr_print_srvsvc_NetSrvInfo100(ndr, "info100", r->info100);
-			}
-			ndr->depth--;
-		break;
-
-		case 101:
-			ndr_print_ptr(ndr, "info101", r->info101);
-			ndr->depth++;
-			if (r->info101) {
-				ndr_print_srvsvc_NetSrvInfo101(ndr, "info101", r->info101);
-			}
-			ndr->depth--;
-		break;
-
-		case 102:
-			ndr_print_ptr(ndr, "info102", r->info102);
-			ndr->depth++;
-			if (r->info102) {
-				ndr_print_srvsvc_NetSrvInfo102(ndr, "info102", r->info102);
-			}
-			ndr->depth--;
-		break;
-
-		case 402:
-			ndr_print_ptr(ndr, "info402", r->info402);
-			ndr->depth++;
-			if (r->info402) {
-				ndr_print_srvsvc_NetSrvInfo402(ndr, "info402", r->info402);
-			}
-			ndr->depth--;
-		break;
-
-		case 403:
-			ndr_print_ptr(ndr, "info403", r->info403);
-			ndr->depth++;
-			if (r->info403) {
-				ndr_print_srvsvc_NetSrvInfo403(ndr, "info403", r->info403);
-			}
-			ndr->depth--;
-		break;
-
-		case 502:
-			ndr_print_ptr(ndr, "info502", r->info502);
-			ndr->depth++;
-			if (r->info502) {
-				ndr_print_srvsvc_NetSrvInfo502(ndr, "info502", r->info502);
-			}
-			ndr->depth--;
-		break;
-
-		case 503:
-			ndr_print_ptr(ndr, "info503", r->info503);
-			ndr->depth++;
-			if (r->info503) {
-				ndr_print_srvsvc_NetSrvInfo503(ndr, "info503", r->info503);
-			}
-			ndr->depth--;
-		break;
-
-		case 599:
-			ndr_print_ptr(ndr, "info599", r->info599);
-			ndr->depth++;
-			if (r->info599) {
-				ndr_print_srvsvc_NetSrvInfo599(ndr, "info599", r->info599);
-			}
-			ndr->depth--;
-		break;
-
-		case 1005:
-			ndr_print_ptr(ndr, "info1005", r->info1005);
-			ndr->depth++;
-			if (r->info1005) {
-				ndr_print_srvsvc_NetSrvInfo1005(ndr, "info1005", r->info1005);
-			}
-			ndr->depth--;
-		break;
-
-		case 1010:
-			ndr_print_ptr(ndr, "info1010", r->info1010);
-			ndr->depth++;
-			if (r->info1010) {
-				ndr_print_srvsvc_NetSrvInfo1010(ndr, "info1010", r->info1010);
-			}
-			ndr->depth--;
-		break;
-
-		case 1016:
-			ndr_print_ptr(ndr, "info1016", r->info1016);
-			ndr->depth++;
-			if (r->info1016) {
-				ndr_print_srvsvc_NetSrvInfo1016(ndr, "info1016", r->info1016);
-			}
-			ndr->depth--;
-		break;
-
-		case 1017:
-			ndr_print_ptr(ndr, "info1017", r->info1017);
-			ndr->depth++;
-			if (r->info1017) {
-				ndr_print_srvsvc_NetSrvInfo1017(ndr, "info1017", r->info1017);
-			}
-			ndr->depth--;
-		break;
-
-		case 1018:
-			ndr_print_ptr(ndr, "info1018", r->info1018);
-			ndr->depth++;
-			if (r->info1018) {
-				ndr_print_srvsvc_NetSrvInfo1018(ndr, "info1018", r->info1018);
-			}
-			ndr->depth--;
-		break;
-
-		case 1107:
-			ndr_print_ptr(ndr, "info1107", r->info1107);
-			ndr->depth++;
-			if (r->info1107) {
-				ndr_print_srvsvc_NetSrvInfo1107(ndr, "info1107", r->info1107);
-			}
-			ndr->depth--;
-		break;
-
-		case 1501:
-			ndr_print_ptr(ndr, "info1501", r->info1501);
-			ndr->depth++;
-			if (r->info1501) {
-				ndr_print_srvsvc_NetSrvInfo1501(ndr, "info1501", r->info1501);
-			}
-			ndr->depth--;
-		break;
-
-		case 1502:
-			ndr_print_ptr(ndr, "info1502", r->info1502);
-			ndr->depth++;
-			if (r->info1502) {
-				ndr_print_srvsvc_NetSrvInfo1502(ndr, "info1502", r->info1502);
-			}
-			ndr->depth--;
-		break;
-
-		case 1503:
-			ndr_print_ptr(ndr, "info1503", r->info1503);
-			ndr->depth++;
-			if (r->info1503) {
-				ndr_print_srvsvc_NetSrvInfo1503(ndr, "info1503", r->info1503);
-			}
-			ndr->depth--;
-		break;
-
-		case 1506:
-			ndr_print_ptr(ndr, "info1506", r->info1506);
-			ndr->depth++;
-			if (r->info1506) {
-				ndr_print_srvsvc_NetSrvInfo1506(ndr, "info1506", r->info1506);
-			}
-			ndr->depth--;
-		break;
-
-		case 1509:
-			ndr_print_ptr(ndr, "info1509", r->info1509);
-			ndr->depth++;
-			if (r->info1509) {
-				ndr_print_srvsvc_NetSrvInfo1509(ndr, "info1509", r->info1509);
-			}
-			ndr->depth--;
-		break;
-
-		case 1510:
-			ndr_print_ptr(ndr, "info1510", r->info1510);
-			ndr->depth++;
-			if (r->info1510) {
-				ndr_print_srvsvc_NetSrvInfo1510(ndr, "info1510", r->info1510);
-			}
-			ndr->depth--;
-		break;
-
-		case 1511:
-			ndr_print_ptr(ndr, "info1511", r->info1511);
-			ndr->depth++;
-			if (r->info1511) {
-				ndr_print_srvsvc_NetSrvInfo1511(ndr, "info1511", r->info1511);
-			}
-			ndr->depth--;
-		break;
-
-		case 1512:
-			ndr_print_ptr(ndr, "info1512", r->info1512);
-			ndr->depth++;
-			if (r->info1512) {
-				ndr_print_srvsvc_NetSrvInfo1512(ndr, "info1512", r->info1512);
-			}
-			ndr->depth--;
-		break;
-
-		case 1513:
-			ndr_print_ptr(ndr, "info1513", r->info1513);
-			ndr->depth++;
-			if (r->info1513) {
-				ndr_print_srvsvc_NetSrvInfo1513(ndr, "info1513", r->info1513);
-			}
-			ndr->depth--;
-		break;
-
-		case 1514:
-			ndr_print_ptr(ndr, "info1514", r->info1514);
-			ndr->depth++;
-			if (r->info1514) {
-				ndr_print_srvsvc_NetSrvInfo1514(ndr, "info1514", r->info1514);
-			}
-			ndr->depth--;
-		break;
-
-		case 1515:
-			ndr_print_ptr(ndr, "info1515", r->info1515);
-			ndr->depth++;
-			if (r->info1515) {
-				ndr_print_srvsvc_NetSrvInfo1515(ndr, "info1515", r->info1515);
-			}
-			ndr->depth--;
-		break;
-
-		case 1516:
-			ndr_print_ptr(ndr, "info1516", r->info1516);
-			ndr->depth++;
-			if (r->info1516) {
-				ndr_print_srvsvc_NetSrvInfo1516(ndr, "info1516", r->info1516);
-			}
-			ndr->depth--;
-		break;
-
-		case 1518:
-			ndr_print_ptr(ndr, "info1518", r->info1518);
-			ndr->depth++;
-			if (r->info1518) {
-				ndr_print_srvsvc_NetSrvInfo1518(ndr, "info1518", r->info1518);
-			}
-			ndr->depth--;
-		break;
-
-		case 1520:
-			ndr_print_ptr(ndr, "info1520", r->info1520);
-			ndr->depth++;
-			if (r->info1520) {
-				ndr_print_srvsvc_NetSrvInfo1520(ndr, "info1520", r->info1520);
-			}
-			ndr->depth--;
-		break;
-
-		case 1521:
-			ndr_print_ptr(ndr, "info1521", r->info1521);
-			ndr->depth++;
-			if (r->info1521) {
-				ndr_print_srvsvc_NetSrvInfo1521(ndr, "info1521", r->info1521);
-			}
-			ndr->depth--;
-		break;
-
-		case 1522:
-			ndr_print_ptr(ndr, "info1522", r->info1522);
-			ndr->depth++;
-			if (r->info1522) {
-				ndr_print_srvsvc_NetSrvInfo1522(ndr, "info1522", r->info1522);
-			}
-			ndr->depth--;
-		break;
-
-		case 1523:
-			ndr_print_ptr(ndr, "info1523", r->info1523);
-			ndr->depth++;
-			if (r->info1523) {
-				ndr_print_srvsvc_NetSrvInfo1523(ndr, "info1523", r->info1523);
-			}
-			ndr->depth--;
-		break;
-
-		case 1524:
-			ndr_print_ptr(ndr, "info1524", r->info1524);
-			ndr->depth++;
-			if (r->info1524) {
-				ndr_print_srvsvc_NetSrvInfo1524(ndr, "info1524", r->info1524);
-			}
-			ndr->depth--;
-		break;
-
-		case 1525:
-			ndr_print_ptr(ndr, "info1525", r->info1525);
-			ndr->depth++;
-			if (r->info1525) {
-				ndr_print_srvsvc_NetSrvInfo1525(ndr, "info1525", r->info1525);
-			}
-			ndr->depth--;
-		break;
-
-		case 1528:
-			ndr_print_ptr(ndr, "info1528", r->info1528);
-			ndr->depth++;
-			if (r->info1528) {
-				ndr_print_srvsvc_NetSrvInfo1528(ndr, "info1528", r->info1528);
-			}
-			ndr->depth--;
-		break;
-
-		case 1529:
-			ndr_print_ptr(ndr, "info1529", r->info1529);
-			ndr->depth++;
-			if (r->info1529) {
-				ndr_print_srvsvc_NetSrvInfo1529(ndr, "info1529", r->info1529);
-			}
-			ndr->depth--;
-		break;
-
-		case 1530:
-			ndr_print_ptr(ndr, "info1530", r->info1530);
-			ndr->depth++;
-			if (r->info1530) {
-				ndr_print_srvsvc_NetSrvInfo1530(ndr, "info1530", r->info1530);
-			}
-			ndr->depth--;
-		break;
-
-		case 1533:
-			ndr_print_ptr(ndr, "info1533", r->info1533);
-			ndr->depth++;
-			if (r->info1533) {
-				ndr_print_srvsvc_NetSrvInfo1533(ndr, "info1533", r->info1533);
-			}
-			ndr->depth--;
-		break;
-
-		case 1534:
-			ndr_print_ptr(ndr, "info1534", r->info1534);
-			ndr->depth++;
-			if (r->info1534) {
-				ndr_print_srvsvc_NetSrvInfo1534(ndr, "info1534", r->info1534);
-			}
-			ndr->depth--;
-		break;
-
-		case 1535:
-			ndr_print_ptr(ndr, "info1535", r->info1535);
-			ndr->depth++;
-			if (r->info1535) {
-				ndr_print_srvsvc_NetSrvInfo1535(ndr, "info1535", r->info1535);
-			}
-			ndr->depth--;
-		break;
-
-		case 1536:
-			ndr_print_ptr(ndr, "info1536", r->info1536);
-			ndr->depth++;
-			if (r->info1536) {
-				ndr_print_srvsvc_NetSrvInfo1536(ndr, "info1536", r->info1536);
-			}
-			ndr->depth--;
-		break;
-
-		case 1537:
-			ndr_print_ptr(ndr, "info1537", r->info1537);
-			ndr->depth++;
-			if (r->info1537) {
-				ndr_print_srvsvc_NetSrvInfo1537(ndr, "info1537", r->info1537);
-			}
-			ndr->depth--;
-		break;
-
-		case 1538:
-			ndr_print_ptr(ndr, "info1538", r->info1538);
-			ndr->depth++;
-			if (r->info1538) {
-				ndr_print_srvsvc_NetSrvInfo1538(ndr, "info1538", r->info1538);
-			}
-			ndr->depth--;
-		break;
-
-		case 1539:
-			ndr_print_ptr(ndr, "info1539", r->info1539);
-			ndr->depth++;
-			if (r->info1539) {
-				ndr_print_srvsvc_NetSrvInfo1539(ndr, "info1539", r->info1539);
-			}
-			ndr->depth--;
-		break;
-
-		case 1540:
-			ndr_print_ptr(ndr, "info1540", r->info1540);
-			ndr->depth++;
-			if (r->info1540) {
-				ndr_print_srvsvc_NetSrvInfo1540(ndr, "info1540", r->info1540);
-			}
-			ndr->depth--;
-		break;
-
-		case 1541:
-			ndr_print_ptr(ndr, "info1541", r->info1541);
-			ndr->depth++;
-			if (r->info1541) {
-				ndr_print_srvsvc_NetSrvInfo1541(ndr, "info1541", r->info1541);
-			}
-			ndr->depth--;
-		break;
-
-		case 1542:
-			ndr_print_ptr(ndr, "info1542", r->info1542);
-			ndr->depth++;
-			if (r->info1542) {
-				ndr_print_srvsvc_NetSrvInfo1542(ndr, "info1542", r->info1542);
-			}
-			ndr->depth--;
-		break;
-
-		case 1543:
-			ndr_print_ptr(ndr, "info1543", r->info1543);
-			ndr->depth++;
-			if (r->info1543) {
-				ndr_print_srvsvc_NetSrvInfo1543(ndr, "info1543", r->info1543);
-			}
-			ndr->depth--;
-		break;
-
-		case 1544:
-			ndr_print_ptr(ndr, "info1544", r->info1544);
-			ndr->depth++;
-			if (r->info1544) {
-				ndr_print_srvsvc_NetSrvInfo1544(ndr, "info1544", r->info1544);
-			}
-			ndr->depth--;
-		break;
-
-		case 1545:
-			ndr_print_ptr(ndr, "info1545", r->info1545);
-			ndr->depth++;
-			if (r->info1545) {
-				ndr_print_srvsvc_NetSrvInfo1545(ndr, "info1545", r->info1545);
-			}
-			ndr->depth--;
-		break;
-
-		case 1546:
-			ndr_print_ptr(ndr, "info1546", r->info1546);
-			ndr->depth++;
-			if (r->info1546) {
-				ndr_print_srvsvc_NetSrvInfo1546(ndr, "info1546", r->info1546);
-			}
-			ndr->depth--;
-		break;
-
-		case 1547:
-			ndr_print_ptr(ndr, "info1547", r->info1547);
-			ndr->depth++;
-			if (r->info1547) {
-				ndr_print_srvsvc_NetSrvInfo1547(ndr, "info1547", r->info1547);
-			}
-			ndr->depth--;
-		break;
-
-		case 1548:
-			ndr_print_ptr(ndr, "info1548", r->info1548);
-			ndr->depth++;
-			if (r->info1548) {
-				ndr_print_srvsvc_NetSrvInfo1548(ndr, "info1548", r->info1548);
-			}
-			ndr->depth--;
-		break;
-
-		case 1549:
-			ndr_print_ptr(ndr, "info1549", r->info1549);
-			ndr->depth++;
-			if (r->info1549) {
-				ndr_print_srvsvc_NetSrvInfo1549(ndr, "info1549", r->info1549);
-			}
-			ndr->depth--;
-		break;
-
-		case 1550:
-			ndr_print_ptr(ndr, "info1550", r->info1550);
-			ndr->depth++;
-			if (r->info1550) {
-				ndr_print_srvsvc_NetSrvInfo1550(ndr, "info1550", r->info1550);
-			}
-			ndr->depth--;
-		break;
-
-		case 1552:
-			ndr_print_ptr(ndr, "info1552", r->info1552);
-			ndr->depth++;
-			if (r->info1552) {
-				ndr_print_srvsvc_NetSrvInfo1552(ndr, "info1552", r->info1552);
-			}
-			ndr->depth--;
-		break;
-
-		case 1553:
-			ndr_print_ptr(ndr, "info1553", r->info1553);
-			ndr->depth++;
-			if (r->info1553) {
-				ndr_print_srvsvc_NetSrvInfo1553(ndr, "info1553", r->info1553);
-			}
-			ndr->depth--;
-		break;
-
-		case 1554:
-			ndr_print_ptr(ndr, "info1554", r->info1554);
-			ndr->depth++;
-			if (r->info1554) {
-				ndr_print_srvsvc_NetSrvInfo1554(ndr, "info1554", r->info1554);
-			}
-			ndr->depth--;
-		break;
-
-		case 1555:
-			ndr_print_ptr(ndr, "info1555", r->info1555);
-			ndr->depth++;
-			if (r->info1555) {
-				ndr_print_srvsvc_NetSrvInfo1555(ndr, "info1555", r->info1555);
-			}
-			ndr->depth--;
-		break;
-
-		case 1556:
-			ndr_print_ptr(ndr, "info1556", r->info1556);
-			ndr->depth++;
-			if (r->info1556) {
-				ndr_print_srvsvc_NetSrvInfo1556(ndr, "info1556", r->info1556);
-			}
-			ndr->depth--;
-		break;
-
-		default:
-		break;
-
-	}
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetDiskInfo0(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetDiskInfo0 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_LEN4);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->disk));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetDiskInfo0(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetDiskInfo0 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_LEN4);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->disk));
-			ndr->flags = _flags_save_string;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetDiskInfo0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetDiskInfo0 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetDiskInfo0");
-	ndr->depth++;
-	ndr_print_string(ndr, "disk", r->disk);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetDiskInfo(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetDiskInfo *r)
-{
-	uint32_t cntr_disks_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->disks));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->disks) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_disks_1 = 0; cntr_disks_1 < r->count; cntr_disks_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetDiskInfo0(ndr, NDR_SCALARS, &r->disks[cntr_disks_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetDiskInfo(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetDiskInfo *r)
-{
-	uint32_t _ptr_disks;
-	uint32_t cntr_disks_1;
-	TALLOC_CTX *_mem_save_disks_0;
-	TALLOC_CTX *_mem_save_disks_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_disks));
-		if (_ptr_disks) {
-			NDR_PULL_ALLOC(ndr, r->disks);
-		} else {
-			r->disks = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->disks) {
-			_mem_save_disks_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->disks, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->disks));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->disks));
-			if (ndr_get_array_length(ndr, &r->disks) > ndr_get_array_size(ndr, &r->disks)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->disks), ndr_get_array_length(ndr, &r->disks));
-			}
-			NDR_PULL_ALLOC_N(ndr, r->disks, ndr_get_array_size(ndr, &r->disks));
-			_mem_save_disks_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->disks, 0);
-			for (cntr_disks_1 = 0; cntr_disks_1 < r->count; cntr_disks_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetDiskInfo0(ndr, NDR_SCALARS, &r->disks[cntr_disks_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_disks_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_disks_0, 0);
-		}
-		if (r->disks) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->disks, r->count));
-		}
-		if (r->disks) {
-			NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->disks, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetDiskInfo(struct ndr_print *ndr, const char *name, const struct srvsvc_NetDiskInfo *r)
-{
-	uint32_t cntr_disks_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetDiskInfo");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "disks", r->disks);
-	ndr->depth++;
-	if (r->disks) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "disks", r->count);
-		ndr->depth++;
-		for (cntr_disks_1=0;cntr_disks_1<r->count;cntr_disks_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_disks_1) != -1) {
-				ndr_print_srvsvc_NetDiskInfo0(ndr, "disks", &r->disks[cntr_disks_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_Statistics(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_Statistics *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->start));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->fopens));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->devopens));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->jobsqueued));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sopens));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->stimeouts));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->serrorout));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->pwerrors));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->permerrors));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->syserrors));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->bytessent_low));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->bytessent_high));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->bytesrcvd_low));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->bytesrcvd_high));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->avresponse));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->reqbufneed));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->bigbufneed));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_Statistics(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_Statistics *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->start));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->fopens));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->devopens));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->jobsqueued));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sopens));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->stimeouts));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->serrorout));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->pwerrors));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->permerrors));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->syserrors));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->bytessent_low));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->bytessent_high));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->bytesrcvd_low));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->bytesrcvd_high));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->avresponse));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->reqbufneed));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->bigbufneed));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_Statistics(struct ndr_print *ndr, const char *name, const struct srvsvc_Statistics *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_Statistics");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "start", r->start);
-	ndr_print_uint32(ndr, "fopens", r->fopens);
-	ndr_print_uint32(ndr, "devopens", r->devopens);
-	ndr_print_uint32(ndr, "jobsqueued", r->jobsqueued);
-	ndr_print_uint32(ndr, "sopens", r->sopens);
-	ndr_print_uint32(ndr, "stimeouts", r->stimeouts);
-	ndr_print_uint32(ndr, "serrorout", r->serrorout);
-	ndr_print_uint32(ndr, "pwerrors", r->pwerrors);
-	ndr_print_uint32(ndr, "permerrors", r->permerrors);
-	ndr_print_uint32(ndr, "syserrors", r->syserrors);
-	ndr_print_uint32(ndr, "bytessent_low", r->bytessent_low);
-	ndr_print_uint32(ndr, "bytessent_high", r->bytessent_high);
-	ndr_print_uint32(ndr, "bytesrcvd_low", r->bytesrcvd_low);
-	ndr_print_uint32(ndr, "bytesrcvd_high", r->bytesrcvd_high);
-	ndr_print_uint32(ndr, "avresponse", r->avresponse);
-	ndr_print_uint32(ndr, "reqbufneed", r->reqbufneed);
-	ndr_print_uint32(ndr, "bigbufneed", r->bigbufneed);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetTransportInfo0(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetTransportInfo0 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->vcs));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->name));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->addr));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->addr_len));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->net_addr));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->name, ndr_charset_length(r->name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->addr) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->addr_len));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->addr, r->addr_len));
-		}
-		if (r->net_addr) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->net_addr, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->net_addr, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->net_addr, ndr_charset_length(r->net_addr, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetTransportInfo0(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetTransportInfo0 *r)
-{
-	uint32_t _ptr_name;
-	TALLOC_CTX *_mem_save_name_0;
-	uint32_t _ptr_addr;
-	TALLOC_CTX *_mem_save_addr_0;
-	uint32_t _ptr_net_addr;
-	TALLOC_CTX *_mem_save_net_addr_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->vcs));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_name));
-		if (_ptr_name) {
-			NDR_PULL_ALLOC(ndr, r->name);
-		} else {
-			r->name = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_addr));
-		if (_ptr_addr) {
-			NDR_PULL_ALLOC(ndr, r->addr);
-		} else {
-			r->addr = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->addr_len));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_net_addr));
-		if (_ptr_net_addr) {
-			NDR_PULL_ALLOC(ndr, r->net_addr);
-		} else {
-			r->net_addr = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->name));
-			if (ndr_get_array_length(ndr, &r->name) > ndr_get_array_size(ndr, &r->name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->name), ndr_get_array_length(ndr, &r->name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->name, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, 0);
-		}
-		if (r->addr) {
-			_mem_save_addr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->addr, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->addr));
-			NDR_PULL_ALLOC_N(ndr, r->addr, ndr_get_array_size(ndr, &r->addr));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->addr, ndr_get_array_size(ndr, &r->addr)));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_addr_0, 0);
-		}
-		if (r->net_addr) {
-			_mem_save_net_addr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->net_addr, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->net_addr));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->net_addr));
-			if (ndr_get_array_length(ndr, &r->net_addr) > ndr_get_array_size(ndr, &r->net_addr)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->net_addr), ndr_get_array_length(ndr, &r->net_addr));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->net_addr), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->net_addr, ndr_get_array_length(ndr, &r->net_addr), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_net_addr_0, 0);
-		}
-		if (r->addr) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->addr, r->addr_len));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetTransportInfo0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetTransportInfo0 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetTransportInfo0");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "vcs", r->vcs);
-	ndr_print_ptr(ndr, "name", r->name);
-	ndr->depth++;
-	if (r->name) {
-		ndr_print_string(ndr, "name", r->name);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "addr", r->addr);
-	ndr->depth++;
-	if (r->addr) {
-		ndr_print_array_uint8(ndr, "addr", r->addr, r->addr_len);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "addr_len", r->addr_len);
-	ndr_print_ptr(ndr, "net_addr", r->net_addr);
-	ndr->depth++;
-	if (r->net_addr) {
-		ndr_print_string(ndr, "net_addr", r->net_addr);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetTransportCtr0(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetTransportCtr0 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetTransportInfo0(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetTransportInfo0(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetTransportCtr0(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetTransportCtr0 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetTransportInfo0(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetTransportInfo0(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetTransportCtr0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetTransportCtr0 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetTransportCtr0");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetTransportInfo0(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetTransportInfo1(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetTransportInfo1 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->vcs));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->name));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->addr));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->addr_len));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->net_addr));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->domain));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->name, ndr_charset_length(r->name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->addr) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->addr_len));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->addr, r->addr_len));
-		}
-		if (r->net_addr) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->net_addr, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->net_addr, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->net_addr, ndr_charset_length(r->net_addr, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->domain) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->domain, ndr_charset_length(r->domain, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetTransportInfo1(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetTransportInfo1 *r)
-{
-	uint32_t _ptr_name;
-	TALLOC_CTX *_mem_save_name_0;
-	uint32_t _ptr_addr;
-	TALLOC_CTX *_mem_save_addr_0;
-	uint32_t _ptr_net_addr;
-	TALLOC_CTX *_mem_save_net_addr_0;
-	uint32_t _ptr_domain;
-	TALLOC_CTX *_mem_save_domain_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->vcs));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_name));
-		if (_ptr_name) {
-			NDR_PULL_ALLOC(ndr, r->name);
-		} else {
-			r->name = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_addr));
-		if (_ptr_addr) {
-			NDR_PULL_ALLOC(ndr, r->addr);
-		} else {
-			r->addr = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->addr_len));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_net_addr));
-		if (_ptr_net_addr) {
-			NDR_PULL_ALLOC(ndr, r->net_addr);
-		} else {
-			r->net_addr = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain));
-		if (_ptr_domain) {
-			NDR_PULL_ALLOC(ndr, r->domain);
-		} else {
-			r->domain = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->name));
-			if (ndr_get_array_length(ndr, &r->name) > ndr_get_array_size(ndr, &r->name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->name), ndr_get_array_length(ndr, &r->name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->name, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, 0);
-		}
-		if (r->addr) {
-			_mem_save_addr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->addr, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->addr));
-			NDR_PULL_ALLOC_N(ndr, r->addr, ndr_get_array_size(ndr, &r->addr));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->addr, ndr_get_array_size(ndr, &r->addr)));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_addr_0, 0);
-		}
-		if (r->net_addr) {
-			_mem_save_net_addr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->net_addr, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->net_addr));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->net_addr));
-			if (ndr_get_array_length(ndr, &r->net_addr) > ndr_get_array_size(ndr, &r->net_addr)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->net_addr), ndr_get_array_length(ndr, &r->net_addr));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->net_addr), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->net_addr, ndr_get_array_length(ndr, &r->net_addr), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_net_addr_0, 0);
-		}
-		if (r->domain) {
-			_mem_save_domain_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->domain, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->domain));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->domain));
-			if (ndr_get_array_length(ndr, &r->domain) > ndr_get_array_size(ndr, &r->domain)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->domain), ndr_get_array_length(ndr, &r->domain));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->domain), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->domain, ndr_get_array_length(ndr, &r->domain), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_0, 0);
-		}
-		if (r->addr) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->addr, r->addr_len));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetTransportInfo1(struct ndr_print *ndr, const char *name, const struct srvsvc_NetTransportInfo1 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetTransportInfo1");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "vcs", r->vcs);
-	ndr_print_ptr(ndr, "name", r->name);
-	ndr->depth++;
-	if (r->name) {
-		ndr_print_string(ndr, "name", r->name);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "addr", r->addr);
-	ndr->depth++;
-	if (r->addr) {
-		ndr_print_array_uint8(ndr, "addr", r->addr, r->addr_len);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "addr_len", r->addr_len);
-	ndr_print_ptr(ndr, "net_addr", r->net_addr);
-	ndr->depth++;
-	if (r->net_addr) {
-		ndr_print_string(ndr, "net_addr", r->net_addr);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "domain", r->domain);
-	ndr->depth++;
-	if (r->domain) {
-		ndr_print_string(ndr, "domain", r->domain);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetTransportCtr1(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetTransportCtr1 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetTransportInfo1(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetTransportInfo1(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetTransportCtr1(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetTransportCtr1 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetTransportInfo1(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetTransportInfo1(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetTransportCtr1(struct ndr_print *ndr, const char *name, const struct srvsvc_NetTransportCtr1 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetTransportCtr1");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetTransportInfo1(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetTransportInfo2(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetTransportInfo2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->vcs));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->name));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->addr));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->addr_len));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->net_addr));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->domain));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->name, ndr_charset_length(r->name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->addr) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->addr_len));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->addr, r->addr_len));
-		}
-		if (r->net_addr) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->net_addr, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->net_addr, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->net_addr, ndr_charset_length(r->net_addr, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->domain) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->domain, ndr_charset_length(r->domain, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetTransportInfo2(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetTransportInfo2 *r)
-{
-	uint32_t _ptr_name;
-	TALLOC_CTX *_mem_save_name_0;
-	uint32_t _ptr_addr;
-	TALLOC_CTX *_mem_save_addr_0;
-	uint32_t _ptr_net_addr;
-	TALLOC_CTX *_mem_save_net_addr_0;
-	uint32_t _ptr_domain;
-	TALLOC_CTX *_mem_save_domain_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->vcs));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_name));
-		if (_ptr_name) {
-			NDR_PULL_ALLOC(ndr, r->name);
-		} else {
-			r->name = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_addr));
-		if (_ptr_addr) {
-			NDR_PULL_ALLOC(ndr, r->addr);
-		} else {
-			r->addr = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->addr_len));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_net_addr));
-		if (_ptr_net_addr) {
-			NDR_PULL_ALLOC(ndr, r->net_addr);
-		} else {
-			r->net_addr = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain));
-		if (_ptr_domain) {
-			NDR_PULL_ALLOC(ndr, r->domain);
-		} else {
-			r->domain = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->name));
-			if (ndr_get_array_length(ndr, &r->name) > ndr_get_array_size(ndr, &r->name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->name), ndr_get_array_length(ndr, &r->name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->name, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, 0);
-		}
-		if (r->addr) {
-			_mem_save_addr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->addr, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->addr));
-			NDR_PULL_ALLOC_N(ndr, r->addr, ndr_get_array_size(ndr, &r->addr));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->addr, ndr_get_array_size(ndr, &r->addr)));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_addr_0, 0);
-		}
-		if (r->net_addr) {
-			_mem_save_net_addr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->net_addr, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->net_addr));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->net_addr));
-			if (ndr_get_array_length(ndr, &r->net_addr) > ndr_get_array_size(ndr, &r->net_addr)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->net_addr), ndr_get_array_length(ndr, &r->net_addr));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->net_addr), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->net_addr, ndr_get_array_length(ndr, &r->net_addr), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_net_addr_0, 0);
-		}
-		if (r->domain) {
-			_mem_save_domain_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->domain, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->domain));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->domain));
-			if (ndr_get_array_length(ndr, &r->domain) > ndr_get_array_size(ndr, &r->domain)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->domain), ndr_get_array_length(ndr, &r->domain));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->domain), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->domain, ndr_get_array_length(ndr, &r->domain), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_0, 0);
-		}
-		if (r->addr) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->addr, r->addr_len));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetTransportInfo2(struct ndr_print *ndr, const char *name, const struct srvsvc_NetTransportInfo2 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetTransportInfo2");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "vcs", r->vcs);
-	ndr_print_ptr(ndr, "name", r->name);
-	ndr->depth++;
-	if (r->name) {
-		ndr_print_string(ndr, "name", r->name);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "addr", r->addr);
-	ndr->depth++;
-	if (r->addr) {
-		ndr_print_array_uint8(ndr, "addr", r->addr, r->addr_len);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "addr_len", r->addr_len);
-	ndr_print_ptr(ndr, "net_addr", r->net_addr);
-	ndr->depth++;
-	if (r->net_addr) {
-		ndr_print_string(ndr, "net_addr", r->net_addr);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "domain", r->domain);
-	ndr->depth++;
-	if (r->domain) {
-		ndr_print_string(ndr, "domain", r->domain);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "unknown", r->unknown);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetTransportCtr2(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetTransportCtr2 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetTransportInfo2(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetTransportInfo2(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetTransportCtr2(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetTransportCtr2 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetTransportInfo2(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetTransportInfo2(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetTransportCtr2(struct ndr_print *ndr, const char *name, const struct srvsvc_NetTransportCtr2 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetTransportCtr2");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetTransportInfo2(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetTransportInfo3(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetTransportInfo3 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->vcs));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->name));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->addr));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->addr_len));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->net_addr));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->domain));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown1));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown2));
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->unknown3, 256));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->name, ndr_charset_length(r->name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->addr) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->addr_len));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->addr, r->addr_len));
-		}
-		if (r->net_addr) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->net_addr, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->net_addr, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->net_addr, ndr_charset_length(r->net_addr, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->domain) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->domain, ndr_charset_length(r->domain, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetTransportInfo3(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetTransportInfo3 *r)
-{
-	uint32_t _ptr_name;
-	TALLOC_CTX *_mem_save_name_0;
-	uint32_t _ptr_addr;
-	TALLOC_CTX *_mem_save_addr_0;
-	uint32_t _ptr_net_addr;
-	TALLOC_CTX *_mem_save_net_addr_0;
-	uint32_t _ptr_domain;
-	TALLOC_CTX *_mem_save_domain_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->vcs));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_name));
-		if (_ptr_name) {
-			NDR_PULL_ALLOC(ndr, r->name);
-		} else {
-			r->name = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_addr));
-		if (_ptr_addr) {
-			NDR_PULL_ALLOC(ndr, r->addr);
-		} else {
-			r->addr = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->addr_len));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_net_addr));
-		if (_ptr_net_addr) {
-			NDR_PULL_ALLOC(ndr, r->net_addr);
-		} else {
-			r->net_addr = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain));
-		if (_ptr_domain) {
-			NDR_PULL_ALLOC(ndr, r->domain);
-		} else {
-			r->domain = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->unknown3, 256));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->name));
-			if (ndr_get_array_length(ndr, &r->name) > ndr_get_array_size(ndr, &r->name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->name), ndr_get_array_length(ndr, &r->name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->name, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, 0);
-		}
-		if (r->addr) {
-			_mem_save_addr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->addr, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->addr));
-			NDR_PULL_ALLOC_N(ndr, r->addr, ndr_get_array_size(ndr, &r->addr));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->addr, ndr_get_array_size(ndr, &r->addr)));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_addr_0, 0);
-		}
-		if (r->net_addr) {
-			_mem_save_net_addr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->net_addr, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->net_addr));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->net_addr));
-			if (ndr_get_array_length(ndr, &r->net_addr) > ndr_get_array_size(ndr, &r->net_addr)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->net_addr), ndr_get_array_length(ndr, &r->net_addr));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->net_addr), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->net_addr, ndr_get_array_length(ndr, &r->net_addr), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_net_addr_0, 0);
-		}
-		if (r->domain) {
-			_mem_save_domain_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->domain, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->domain));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->domain));
-			if (ndr_get_array_length(ndr, &r->domain) > ndr_get_array_size(ndr, &r->domain)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->domain), ndr_get_array_length(ndr, &r->domain));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->domain), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->domain, ndr_get_array_length(ndr, &r->domain), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_0, 0);
-		}
-		if (r->addr) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->addr, r->addr_len));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetTransportInfo3(struct ndr_print *ndr, const char *name, const struct srvsvc_NetTransportInfo3 *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetTransportInfo3");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "vcs", r->vcs);
-	ndr_print_ptr(ndr, "name", r->name);
-	ndr->depth++;
-	if (r->name) {
-		ndr_print_string(ndr, "name", r->name);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "addr", r->addr);
-	ndr->depth++;
-	if (r->addr) {
-		ndr_print_array_uint8(ndr, "addr", r->addr, r->addr_len);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "addr_len", r->addr_len);
-	ndr_print_ptr(ndr, "net_addr", r->net_addr);
-	ndr->depth++;
-	if (r->net_addr) {
-		ndr_print_string(ndr, "net_addr", r->net_addr);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "domain", r->domain);
-	ndr->depth++;
-	if (r->domain) {
-		ndr_print_string(ndr, "domain", r->domain);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "unknown1", r->unknown1);
-	ndr_print_uint32(ndr, "unknown2", r->unknown2);
-	ndr_print_array_uint8(ndr, "unknown3", r->unknown3, 256);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetTransportCtr3(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetTransportCtr3 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetTransportInfo3(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_srvsvc_NetTransportInfo3(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetTransportCtr3(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetTransportCtr3 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetTransportInfo3(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_srvsvc_NetTransportInfo3(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetTransportCtr3(struct ndr_print *ndr, const char *name, const struct srvsvc_NetTransportCtr3 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "srvsvc_NetTransportCtr3");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_srvsvc_NetTransportInfo3(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetTransportCtr(struct ndr_push *ndr, int ndr_flags, const union srvsvc_NetTransportCtr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 0: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr0));
-			break; }
-
-			case 1: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr2));
-			break; }
-
-			case 3: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr3));
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 0:
-				if (r->ctr0) {
-					NDR_CHECK(ndr_push_srvsvc_NetTransportCtr0(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr0));
-				}
-			break;
-
-			case 1:
-				if (r->ctr1) {
-					NDR_CHECK(ndr_push_srvsvc_NetTransportCtr1(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1));
-				}
-			break;
-
-			case 2:
-				if (r->ctr2) {
-					NDR_CHECK(ndr_push_srvsvc_NetTransportCtr2(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr2));
-				}
-			break;
-
-			case 3:
-				if (r->ctr3) {
-					NDR_CHECK(ndr_push_srvsvc_NetTransportCtr3(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr3));
-				}
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetTransportCtr(struct ndr_pull *ndr, int ndr_flags, union srvsvc_NetTransportCtr *r)
-{
-	int level;
-	uint32_t _level;
-	TALLOC_CTX *_mem_save_ctr0_0;
-	TALLOC_CTX *_mem_save_ctr1_0;
-	TALLOC_CTX *_mem_save_ctr2_0;
-	TALLOC_CTX *_mem_save_ctr3_0;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 0: {
-				uint32_t _ptr_ctr0;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr0));
-				if (_ptr_ctr0) {
-					NDR_PULL_ALLOC(ndr, r->ctr0);
-				} else {
-					r->ctr0 = NULL;
-				}
-			break; }
-
-			case 1: {
-				uint32_t _ptr_ctr1;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr1));
-				if (_ptr_ctr1) {
-					NDR_PULL_ALLOC(ndr, r->ctr1);
-				} else {
-					r->ctr1 = NULL;
-				}
-			break; }
-
-			case 2: {
-				uint32_t _ptr_ctr2;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr2));
-				if (_ptr_ctr2) {
-					NDR_PULL_ALLOC(ndr, r->ctr2);
-				} else {
-					r->ctr2 = NULL;
-				}
-			break; }
-
-			case 3: {
-				uint32_t _ptr_ctr3;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr3));
-				if (_ptr_ctr3) {
-					NDR_PULL_ALLOC(ndr, r->ctr3);
-				} else {
-					r->ctr3 = NULL;
-				}
-			break; }
-
-			default: {
-			break; }
-
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 0:
-				if (r->ctr0) {
-					_mem_save_ctr0_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr0, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetTransportCtr0(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr0));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr0_0, 0);
-				}
-			break;
-
-			case 1:
-				if (r->ctr1) {
-					_mem_save_ctr1_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr1, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetTransportCtr1(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr1_0, 0);
-				}
-			break;
-
-			case 2:
-				if (r->ctr2) {
-					_mem_save_ctr2_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr2, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetTransportCtr2(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr2));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr2_0, 0);
-				}
-			break;
-
-			case 3:
-				if (r->ctr3) {
-					_mem_save_ctr3_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr3, 0);
-					NDR_CHECK(ndr_pull_srvsvc_NetTransportCtr3(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr3));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr3_0, 0);
-				}
-			break;
-
-			default:
-			break;
-
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetTransportCtr(struct ndr_print *ndr, const char *name, const union srvsvc_NetTransportCtr *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "srvsvc_NetTransportCtr");
-	switch (level) {
-		case 0:
-			ndr_print_ptr(ndr, "ctr0", r->ctr0);
-			ndr->depth++;
-			if (r->ctr0) {
-				ndr_print_srvsvc_NetTransportCtr0(ndr, "ctr0", r->ctr0);
-			}
-			ndr->depth--;
-		break;
-
-		case 1:
-			ndr_print_ptr(ndr, "ctr1", r->ctr1);
-			ndr->depth++;
-			if (r->ctr1) {
-				ndr_print_srvsvc_NetTransportCtr1(ndr, "ctr1", r->ctr1);
-			}
-			ndr->depth--;
-		break;
-
-		case 2:
-			ndr_print_ptr(ndr, "ctr2", r->ctr2);
-			ndr->depth++;
-			if (r->ctr2) {
-				ndr_print_srvsvc_NetTransportCtr2(ndr, "ctr2", r->ctr2);
-			}
-			ndr->depth--;
-		break;
-
-		case 3:
-			ndr_print_ptr(ndr, "ctr3", r->ctr3);
-			ndr->depth++;
-			if (r->ctr3) {
-				ndr_print_srvsvc_NetTransportCtr3(ndr, "ctr3", r->ctr3);
-			}
-			ndr->depth--;
-		break;
-
-		default:
-		break;
-
-	}
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetRemoteTODInfo(struct ndr_push *ndr, int ndr_flags, const struct srvsvc_NetRemoteTODInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->elapsed));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->msecs));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->hours));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->mins));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->secs));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->hunds));
-		NDR_CHECK(ndr_push_int32(ndr, NDR_SCALARS, r->timezone));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->tinterval));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->day));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->month));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->year));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->weekday));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetRemoteTODInfo(struct ndr_pull *ndr, int ndr_flags, struct srvsvc_NetRemoteTODInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->elapsed));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->msecs));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->hours));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->mins));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->secs));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->hunds));
-		NDR_CHECK(ndr_pull_int32(ndr, NDR_SCALARS, &r->timezone));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->tinterval));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->day));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->month));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->year));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->weekday));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetRemoteTODInfo(struct ndr_print *ndr, const char *name, const struct srvsvc_NetRemoteTODInfo *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetRemoteTODInfo");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "elapsed", r->elapsed);
-	ndr_print_uint32(ndr, "msecs", r->msecs);
-	ndr_print_uint32(ndr, "hours", r->hours);
-	ndr_print_uint32(ndr, "mins", r->mins);
-	ndr_print_uint32(ndr, "secs", r->secs);
-	ndr_print_uint32(ndr, "hunds", r->hunds);
-	ndr_print_int32(ndr, "timezone", r->timezone);
-	ndr_print_uint32(ndr, "tinterval", r->tinterval);
-	ndr_print_uint32(ndr, "day", r->day);
-	ndr_print_uint32(ndr, "month", r->month);
-	ndr_print_uint32(ndr, "year", r->year);
-	ndr_print_uint32(ndr, "weekday", r->weekday);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetTransportInfo(struct ndr_push *ndr, int ndr_flags, const union srvsvc_NetTransportInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 0: {
-				NDR_CHECK(ndr_push_srvsvc_NetTransportInfo0(ndr, NDR_SCALARS, &r->info0));
-			break; }
-
-			case 1: {
-				NDR_CHECK(ndr_push_srvsvc_NetTransportInfo1(ndr, NDR_SCALARS, &r->info1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_push_srvsvc_NetTransportInfo2(ndr, NDR_SCALARS, &r->info2));
-			break; }
-
-			case 3: {
-				NDR_CHECK(ndr_push_srvsvc_NetTransportInfo3(ndr, NDR_SCALARS, &r->info3));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 0:
-				NDR_CHECK(ndr_push_srvsvc_NetTransportInfo0(ndr, NDR_BUFFERS, &r->info0));
-			break;
-
-			case 1:
-				NDR_CHECK(ndr_push_srvsvc_NetTransportInfo1(ndr, NDR_BUFFERS, &r->info1));
-			break;
-
-			case 2:
-				NDR_CHECK(ndr_push_srvsvc_NetTransportInfo2(ndr, NDR_BUFFERS, &r->info2));
-			break;
-
-			case 3:
-				NDR_CHECK(ndr_push_srvsvc_NetTransportInfo3(ndr, NDR_BUFFERS, &r->info3));
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetTransportInfo(struct ndr_pull *ndr, int ndr_flags, union srvsvc_NetTransportInfo *r)
-{
-	int level;
-	uint32_t _level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 0: {
-				NDR_CHECK(ndr_pull_srvsvc_NetTransportInfo0(ndr, NDR_SCALARS, &r->info0));
-			break; }
-
-			case 1: {
-				NDR_CHECK(ndr_pull_srvsvc_NetTransportInfo1(ndr, NDR_SCALARS, &r->info1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_pull_srvsvc_NetTransportInfo2(ndr, NDR_SCALARS, &r->info2));
-			break; }
-
-			case 3: {
-				NDR_CHECK(ndr_pull_srvsvc_NetTransportInfo3(ndr, NDR_SCALARS, &r->info3));
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 0:
-				NDR_CHECK(ndr_pull_srvsvc_NetTransportInfo0(ndr, NDR_BUFFERS, &r->info0));
-			break;
-
-			case 1:
-				NDR_CHECK(ndr_pull_srvsvc_NetTransportInfo1(ndr, NDR_BUFFERS, &r->info1));
-			break;
-
-			case 2:
-				NDR_CHECK(ndr_pull_srvsvc_NetTransportInfo2(ndr, NDR_BUFFERS, &r->info2));
-			break;
-
-			case 3:
-				NDR_CHECK(ndr_pull_srvsvc_NetTransportInfo3(ndr, NDR_BUFFERS, &r->info3));
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetTransportInfo(struct ndr_print *ndr, const char *name, const union srvsvc_NetTransportInfo *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "srvsvc_NetTransportInfo");
-	switch (level) {
-		case 0:
-			ndr_print_srvsvc_NetTransportInfo0(ndr, "info0", &r->info0);
-		break;
-
-		case 1:
-			ndr_print_srvsvc_NetTransportInfo1(ndr, "info1", &r->info1);
-		break;
-
-		case 2:
-			ndr_print_srvsvc_NetTransportInfo2(ndr, "info2", &r->info2);
-		break;
-
-		case 3:
-			ndr_print_srvsvc_NetTransportInfo3(ndr, "info3", &r->info3);
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetCharDevEnum(struct ndr_push *ndr, int flags, const struct srvsvc_NetCharDevEnum *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.level == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.level));
-		if (r->in.ctr == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.ctr, *r->in.level));
-		NDR_CHECK(ndr_push_srvsvc_NetCharDevCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.ctr));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_buffer));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.resume_handle));
-		if (r->in.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.level == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.level));
-		if (r->out.ctr == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.ctr, *r->out.level));
-		NDR_CHECK(ndr_push_srvsvc_NetCharDevCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.ctr));
-		if (r->out.totalentries == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.totalentries));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.resume_handle));
-		if (r->out.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetCharDevEnum(struct ndr_pull *ndr, int flags, struct srvsvc_NetCharDevEnum *r)
-{
-	uint32_t _ptr_server_unc;
-	uint32_t _ptr_resume_handle;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_level_0;
-	TALLOC_CTX *_mem_save_ctr_0;
-	TALLOC_CTX *_mem_save_totalentries_0;
-	TALLOC_CTX *_mem_save_resume_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.level);
-		}
-		_mem_save_level_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.level, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.level));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_level_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.ctr);
-		}
-		_mem_save_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.ctr, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.ctr, *r->in.level));
-		NDR_CHECK(ndr_pull_srvsvc_NetCharDevCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.ctr));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_buffer));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->in.resume_handle);
-		} else {
-			r->in.resume_handle = NULL;
-		}
-		if (r->in.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.level);
-		*r->out.level = *r->in.level;
-		NDR_PULL_ALLOC(ndr, r->out.ctr);
-		*r->out.ctr = *r->in.ctr;
-		NDR_PULL_ALLOC(ndr, r->out.totalentries);
-		ZERO_STRUCTP(r->out.totalentries);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.level);
-		}
-		_mem_save_level_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.level, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.level));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_level_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.ctr);
-		}
-		_mem_save_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.ctr, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.ctr, *r->out.level));
-		NDR_CHECK(ndr_pull_srvsvc_NetCharDevCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.ctr));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.totalentries);
-		}
-		_mem_save_totalentries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.totalentries, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.totalentries));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_totalentries_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		} else {
-			r->out.resume_handle = NULL;
-		}
-		if (r->out.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetCharDevEnum(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetCharDevEnum *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetCharDevEnum");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetCharDevEnum");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "level", r->in.level);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "level", *r->in.level);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "ctr", r->in.ctr);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->in.ctr, *r->in.level);
-		ndr_print_srvsvc_NetCharDevCtr(ndr, "ctr", r->in.ctr);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "max_buffer", r->in.max_buffer);
-		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
-		ndr->depth++;
-		if (r->in.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetCharDevEnum");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "level", r->out.level);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "level", *r->out.level);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "ctr", r->out.ctr);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.ctr, *r->out.level);
-		ndr_print_srvsvc_NetCharDevCtr(ndr, "ctr", r->out.ctr);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "totalentries", r->out.totalentries);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "totalentries", *r->out.totalentries);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
-		ndr->depth++;
-		if (r->out.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetCharDevGetInfo(struct ndr_push *ndr, int flags, const struct srvsvc_NetCharDevGetInfo *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.device_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.device_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.device_name, ndr_charset_length(r->in.device_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_push_srvsvc_NetCharDevInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetCharDevGetInfo(struct ndr_pull *ndr, int flags, struct srvsvc_NetCharDevGetInfo *r)
-{
-	uint32_t _ptr_server_unc;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.device_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.device_name));
-		if (ndr_get_array_length(ndr, &r->in.device_name) > ndr_get_array_size(ndr, &r->in.device_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.device_name), ndr_get_array_length(ndr, &r->in.device_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.device_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.device_name, ndr_get_array_length(ndr, &r->in.device_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_pull_srvsvc_NetCharDevInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetCharDevGetInfo(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetCharDevGetInfo *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetCharDevGetInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetCharDevGetInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "device_name", r->in.device_name);
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetCharDevGetInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.info, r->in.level);
-		ndr_print_srvsvc_NetCharDevInfo(ndr, "info", r->out.info);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetCharDevControl(struct ndr_push *ndr, int flags, const struct srvsvc_NetCharDevControl *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.device_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.device_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.device_name, ndr_charset_length(r->in.device_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.opcode));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetCharDevControl(struct ndr_pull *ndr, int flags, struct srvsvc_NetCharDevControl *r)
-{
-	uint32_t _ptr_server_unc;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.device_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.device_name));
-		if (ndr_get_array_length(ndr, &r->in.device_name) > ndr_get_array_size(ndr, &r->in.device_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.device_name), ndr_get_array_length(ndr, &r->in.device_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.device_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.device_name, ndr_get_array_length(ndr, &r->in.device_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.opcode));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetCharDevControl(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetCharDevControl *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetCharDevControl");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetCharDevControl");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "device_name", r->in.device_name);
-		ndr_print_uint32(ndr, "opcode", r->in.opcode);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetCharDevControl");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetCharDevQEnum(struct ndr_push *ndr, int flags, const struct srvsvc_NetCharDevQEnum *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.user));
-		if (r->in.user) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.user, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.user, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.user, ndr_charset_length(r->in.user, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.level == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.level));
-		if (r->in.ctr == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.ctr, *r->in.level));
-		NDR_CHECK(ndr_push_srvsvc_NetCharDevQCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.ctr));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_buffer));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.resume_handle));
-		if (r->in.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.level == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.level));
-		if (r->out.ctr == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.ctr, *r->out.level));
-		NDR_CHECK(ndr_push_srvsvc_NetCharDevQCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.ctr));
-		if (r->out.totalentries == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.totalentries));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.resume_handle));
-		if (r->out.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetCharDevQEnum(struct ndr_pull *ndr, int flags, struct srvsvc_NetCharDevQEnum *r)
-{
-	uint32_t _ptr_server_unc;
-	uint32_t _ptr_user;
-	uint32_t _ptr_resume_handle;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_user_0;
-	TALLOC_CTX *_mem_save_level_0;
-	TALLOC_CTX *_mem_save_ctr_0;
-	TALLOC_CTX *_mem_save_totalentries_0;
-	TALLOC_CTX *_mem_save_resume_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_user));
-		if (_ptr_user) {
-			NDR_PULL_ALLOC(ndr, r->in.user);
-		} else {
-			r->in.user = NULL;
-		}
-		if (r->in.user) {
-			_mem_save_user_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.user, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.user));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.user));
-			if (ndr_get_array_length(ndr, &r->in.user) > ndr_get_array_size(ndr, &r->in.user)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.user), ndr_get_array_length(ndr, &r->in.user));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.user), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.user, ndr_get_array_length(ndr, &r->in.user), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.level);
-		}
-		_mem_save_level_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.level, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.level));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_level_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.ctr);
-		}
-		_mem_save_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.ctr, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.ctr, *r->in.level));
-		NDR_CHECK(ndr_pull_srvsvc_NetCharDevQCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.ctr));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_buffer));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->in.resume_handle);
-		} else {
-			r->in.resume_handle = NULL;
-		}
-		if (r->in.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.level);
-		*r->out.level = *r->in.level;
-		NDR_PULL_ALLOC(ndr, r->out.ctr);
-		*r->out.ctr = *r->in.ctr;
-		NDR_PULL_ALLOC(ndr, r->out.totalentries);
-		ZERO_STRUCTP(r->out.totalentries);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.level);
-		}
-		_mem_save_level_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.level, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.level));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_level_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.ctr);
-		}
-		_mem_save_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.ctr, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.ctr, *r->out.level));
-		NDR_CHECK(ndr_pull_srvsvc_NetCharDevQCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.ctr));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.totalentries);
-		}
-		_mem_save_totalentries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.totalentries, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.totalentries));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_totalentries_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		} else {
-			r->out.resume_handle = NULL;
-		}
-		if (r->out.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetCharDevQEnum(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetCharDevQEnum *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetCharDevQEnum");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetCharDevQEnum");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "user", r->in.user);
-		ndr->depth++;
-		if (r->in.user) {
-			ndr_print_string(ndr, "user", r->in.user);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "level", r->in.level);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "level", *r->in.level);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "ctr", r->in.ctr);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->in.ctr, *r->in.level);
-		ndr_print_srvsvc_NetCharDevQCtr(ndr, "ctr", r->in.ctr);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "max_buffer", r->in.max_buffer);
-		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
-		ndr->depth++;
-		if (r->in.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetCharDevQEnum");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "level", r->out.level);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "level", *r->out.level);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "ctr", r->out.ctr);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.ctr, *r->out.level);
-		ndr_print_srvsvc_NetCharDevQCtr(ndr, "ctr", r->out.ctr);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "totalentries", r->out.totalentries);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "totalentries", *r->out.totalentries);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
-		ndr->depth++;
-		if (r->out.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetCharDevQGetInfo(struct ndr_push *ndr, int flags, const struct srvsvc_NetCharDevQGetInfo *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.queue_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.queue_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.queue_name, ndr_charset_length(r->in.queue_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.user, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.user, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.user, ndr_charset_length(r->in.user, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_push_srvsvc_NetCharDevQInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetCharDevQGetInfo(struct ndr_pull *ndr, int flags, struct srvsvc_NetCharDevQGetInfo *r)
-{
-	uint32_t _ptr_server_unc;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.queue_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.queue_name));
-		if (ndr_get_array_length(ndr, &r->in.queue_name) > ndr_get_array_size(ndr, &r->in.queue_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.queue_name), ndr_get_array_length(ndr, &r->in.queue_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.queue_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.queue_name, ndr_get_array_length(ndr, &r->in.queue_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.user));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.user));
-		if (ndr_get_array_length(ndr, &r->in.user) > ndr_get_array_size(ndr, &r->in.user)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.user), ndr_get_array_length(ndr, &r->in.user));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.user), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.user, ndr_get_array_length(ndr, &r->in.user), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_pull_srvsvc_NetCharDevQInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetCharDevQGetInfo(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetCharDevQGetInfo *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetCharDevQGetInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetCharDevQGetInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "queue_name", r->in.queue_name);
-		ndr_print_string(ndr, "user", r->in.user);
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetCharDevQGetInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.info, r->in.level);
-		ndr_print_srvsvc_NetCharDevQInfo(ndr, "info", r->out.info);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetCharDevQSetInfo(struct ndr_push *ndr, int flags, const struct srvsvc_NetCharDevQSetInfo *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.queue_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.queue_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.queue_name, ndr_charset_length(r->in.queue_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->in.info, r->in.level));
-		NDR_CHECK(ndr_push_srvsvc_NetCharDevQInfo(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.info));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.parm_error));
-		if (r->in.parm_error) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.parm_error));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.parm_error));
-		if (r->out.parm_error) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.parm_error));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetCharDevQSetInfo(struct ndr_pull *ndr, int flags, struct srvsvc_NetCharDevQSetInfo *r)
-{
-	uint32_t _ptr_server_unc;
-	uint32_t _ptr_parm_error;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_parm_error_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.queue_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.queue_name));
-		if (ndr_get_array_length(ndr, &r->in.queue_name) > ndr_get_array_size(ndr, &r->in.queue_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.queue_name), ndr_get_array_length(ndr, &r->in.queue_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.queue_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.queue_name, ndr_get_array_length(ndr, &r->in.queue_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->in.info, r->in.level));
-		NDR_CHECK(ndr_pull_srvsvc_NetCharDevQInfo(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.info));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_parm_error));
-		if (_ptr_parm_error) {
-			NDR_PULL_ALLOC(ndr, r->in.parm_error);
-		} else {
-			r->in.parm_error = NULL;
-		}
-		if (r->in.parm_error) {
-			_mem_save_parm_error_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.parm_error, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.parm_error));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_parm_error_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_parm_error));
-		if (_ptr_parm_error) {
-			NDR_PULL_ALLOC(ndr, r->out.parm_error);
-		} else {
-			r->out.parm_error = NULL;
-		}
-		if (r->out.parm_error) {
-			_mem_save_parm_error_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.parm_error, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.parm_error));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_parm_error_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetCharDevQSetInfo(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetCharDevQSetInfo *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetCharDevQSetInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetCharDevQSetInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "queue_name", r->in.queue_name);
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr_print_set_switch_value(ndr, &r->in.info, r->in.level);
-		ndr_print_srvsvc_NetCharDevQInfo(ndr, "info", &r->in.info);
-		ndr_print_ptr(ndr, "parm_error", r->in.parm_error);
-		ndr->depth++;
-		if (r->in.parm_error) {
-			ndr_print_uint32(ndr, "parm_error", *r->in.parm_error);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetCharDevQSetInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "parm_error", r->out.parm_error);
-		ndr->depth++;
-		if (r->out.parm_error) {
-			ndr_print_uint32(ndr, "parm_error", *r->out.parm_error);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetCharDevQPurge(struct ndr_push *ndr, int flags, const struct srvsvc_NetCharDevQPurge *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.queue_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.queue_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.queue_name, ndr_charset_length(r->in.queue_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetCharDevQPurge(struct ndr_pull *ndr, int flags, struct srvsvc_NetCharDevQPurge *r)
-{
-	uint32_t _ptr_server_unc;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.queue_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.queue_name));
-		if (ndr_get_array_length(ndr, &r->in.queue_name) > ndr_get_array_size(ndr, &r->in.queue_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.queue_name), ndr_get_array_length(ndr, &r->in.queue_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.queue_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.queue_name, ndr_get_array_length(ndr, &r->in.queue_name), sizeof(uint16_t), CH_UTF16));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetCharDevQPurge(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetCharDevQPurge *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetCharDevQPurge");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetCharDevQPurge");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "queue_name", r->in.queue_name);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetCharDevQPurge");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetCharDevQPurgeSelf(struct ndr_push *ndr, int flags, const struct srvsvc_NetCharDevQPurgeSelf *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.queue_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.queue_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.queue_name, ndr_charset_length(r->in.queue_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.computer_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.computer_name, ndr_charset_length(r->in.computer_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetCharDevQPurgeSelf(struct ndr_pull *ndr, int flags, struct srvsvc_NetCharDevQPurgeSelf *r)
-{
-	uint32_t _ptr_server_unc;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.queue_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.queue_name));
-		if (ndr_get_array_length(ndr, &r->in.queue_name) > ndr_get_array_size(ndr, &r->in.queue_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.queue_name), ndr_get_array_length(ndr, &r->in.queue_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.queue_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.queue_name, ndr_get_array_length(ndr, &r->in.queue_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.computer_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.computer_name));
-		if (ndr_get_array_length(ndr, &r->in.computer_name) > ndr_get_array_size(ndr, &r->in.computer_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.computer_name), ndr_get_array_length(ndr, &r->in.computer_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.computer_name, ndr_get_array_length(ndr, &r->in.computer_name), sizeof(uint16_t), CH_UTF16));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetCharDevQPurgeSelf(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetCharDevQPurgeSelf *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetCharDevQPurgeSelf");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetCharDevQPurgeSelf");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "queue_name", r->in.queue_name);
-		ndr_print_string(ndr, "computer_name", r->in.computer_name);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetCharDevQPurgeSelf");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetConnEnum(struct ndr_push *ndr, int flags, const struct srvsvc_NetConnEnum *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.path));
-		if (r->in.path) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.path, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.path, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.path, ndr_charset_length(r->in.path, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.info_ctr == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_srvsvc_NetConnInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info_ctr));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_buffer));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.resume_handle));
-		if (r->in.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info_ctr == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_srvsvc_NetConnInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info_ctr));
-		if (r->out.totalentries == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.totalentries));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.resume_handle));
-		if (r->out.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetConnEnum(struct ndr_pull *ndr, int flags, struct srvsvc_NetConnEnum *r)
-{
-	uint32_t _ptr_server_unc;
-	uint32_t _ptr_path;
-	uint32_t _ptr_resume_handle;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_path_0;
-	TALLOC_CTX *_mem_save_info_ctr_0;
-	TALLOC_CTX *_mem_save_totalentries_0;
-	TALLOC_CTX *_mem_save_resume_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_path));
-		if (_ptr_path) {
-			NDR_PULL_ALLOC(ndr, r->in.path);
-		} else {
-			r->in.path = NULL;
-		}
-		if (r->in.path) {
-			_mem_save_path_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.path, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.path));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.path));
-			if (ndr_get_array_length(ndr, &r->in.path) > ndr_get_array_size(ndr, &r->in.path)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.path), ndr_get_array_length(ndr, &r->in.path));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.path), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.path, ndr_get_array_length(ndr, &r->in.path), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_path_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info_ctr);
-		}
-		_mem_save_info_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info_ctr, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_srvsvc_NetConnInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info_ctr));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_ctr_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_buffer));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->in.resume_handle);
-		} else {
-			r->in.resume_handle = NULL;
-		}
-		if (r->in.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.info_ctr);
-		*r->out.info_ctr = *r->in.info_ctr;
-		NDR_PULL_ALLOC(ndr, r->out.totalentries);
-		ZERO_STRUCTP(r->out.totalentries);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info_ctr);
-		}
-		_mem_save_info_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info_ctr, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_srvsvc_NetConnInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info_ctr));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_ctr_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.totalentries);
-		}
-		_mem_save_totalentries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.totalentries, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.totalentries));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_totalentries_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		} else {
-			r->out.resume_handle = NULL;
-		}
-		if (r->out.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetConnEnum(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetConnEnum *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetConnEnum");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetConnEnum");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "path", r->in.path);
-		ndr->depth++;
-		if (r->in.path) {
-			ndr_print_string(ndr, "path", r->in.path);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "info_ctr", r->in.info_ctr);
-		ndr->depth++;
-		ndr_print_srvsvc_NetConnInfoCtr(ndr, "info_ctr", r->in.info_ctr);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "max_buffer", r->in.max_buffer);
-		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
-		ndr->depth++;
-		if (r->in.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetConnEnum");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info_ctr", r->out.info_ctr);
-		ndr->depth++;
-		ndr_print_srvsvc_NetConnInfoCtr(ndr, "info_ctr", r->out.info_ctr);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "totalentries", r->out.totalentries);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "totalentries", *r->out.totalentries);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
-		ndr->depth++;
-		if (r->out.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetFileEnum(struct ndr_push *ndr, int flags, const struct srvsvc_NetFileEnum *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.path));
-		if (r->in.path) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.path, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.path, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.path, ndr_charset_length(r->in.path, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.user));
-		if (r->in.user) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.user, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.user, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.user, ndr_charset_length(r->in.user, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.info_ctr == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_srvsvc_NetFileInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info_ctr));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_buffer));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.resume_handle));
-		if (r->in.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info_ctr == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_srvsvc_NetFileInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info_ctr));
-		if (r->out.totalentries == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.totalentries));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.resume_handle));
-		if (r->out.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetFileEnum(struct ndr_pull *ndr, int flags, struct srvsvc_NetFileEnum *r)
-{
-	uint32_t _ptr_server_unc;
-	uint32_t _ptr_path;
-	uint32_t _ptr_user;
-	uint32_t _ptr_resume_handle;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_path_0;
-	TALLOC_CTX *_mem_save_user_0;
-	TALLOC_CTX *_mem_save_info_ctr_0;
-	TALLOC_CTX *_mem_save_totalentries_0;
-	TALLOC_CTX *_mem_save_resume_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_path));
-		if (_ptr_path) {
-			NDR_PULL_ALLOC(ndr, r->in.path);
-		} else {
-			r->in.path = NULL;
-		}
-		if (r->in.path) {
-			_mem_save_path_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.path, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.path));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.path));
-			if (ndr_get_array_length(ndr, &r->in.path) > ndr_get_array_size(ndr, &r->in.path)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.path), ndr_get_array_length(ndr, &r->in.path));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.path), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.path, ndr_get_array_length(ndr, &r->in.path), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_path_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_user));
-		if (_ptr_user) {
-			NDR_PULL_ALLOC(ndr, r->in.user);
-		} else {
-			r->in.user = NULL;
-		}
-		if (r->in.user) {
-			_mem_save_user_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.user, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.user));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.user));
-			if (ndr_get_array_length(ndr, &r->in.user) > ndr_get_array_size(ndr, &r->in.user)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.user), ndr_get_array_length(ndr, &r->in.user));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.user), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.user, ndr_get_array_length(ndr, &r->in.user), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info_ctr);
-		}
-		_mem_save_info_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info_ctr, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_srvsvc_NetFileInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info_ctr));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_ctr_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_buffer));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->in.resume_handle);
-		} else {
-			r->in.resume_handle = NULL;
-		}
-		if (r->in.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.info_ctr);
-		*r->out.info_ctr = *r->in.info_ctr;
-		NDR_PULL_ALLOC(ndr, r->out.totalentries);
-		ZERO_STRUCTP(r->out.totalentries);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info_ctr);
-		}
-		_mem_save_info_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info_ctr, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_srvsvc_NetFileInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info_ctr));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_ctr_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.totalentries);
-		}
-		_mem_save_totalentries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.totalentries, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.totalentries));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_totalentries_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		} else {
-			r->out.resume_handle = NULL;
-		}
-		if (r->out.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetFileEnum(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetFileEnum *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetFileEnum");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetFileEnum");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "path", r->in.path);
-		ndr->depth++;
-		if (r->in.path) {
-			ndr_print_string(ndr, "path", r->in.path);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "user", r->in.user);
-		ndr->depth++;
-		if (r->in.user) {
-			ndr_print_string(ndr, "user", r->in.user);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "info_ctr", r->in.info_ctr);
-		ndr->depth++;
-		ndr_print_srvsvc_NetFileInfoCtr(ndr, "info_ctr", r->in.info_ctr);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "max_buffer", r->in.max_buffer);
-		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
-		ndr->depth++;
-		if (r->in.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetFileEnum");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info_ctr", r->out.info_ctr);
-		ndr->depth++;
-		ndr_print_srvsvc_NetFileInfoCtr(ndr, "info_ctr", r->out.info_ctr);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "totalentries", r->out.totalentries);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "totalentries", *r->out.totalentries);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
-		ndr->depth++;
-		if (r->out.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetFileGetInfo(struct ndr_push *ndr, int flags, const struct srvsvc_NetFileGetInfo *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.fid));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_push_srvsvc_NetFileInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetFileGetInfo(struct ndr_pull *ndr, int flags, struct srvsvc_NetFileGetInfo *r)
-{
-	uint32_t _ptr_server_unc;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.fid));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_pull_srvsvc_NetFileInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetFileGetInfo(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetFileGetInfo *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetFileGetInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetFileGetInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "fid", r->in.fid);
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetFileGetInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.info, r->in.level);
-		ndr_print_srvsvc_NetFileInfo(ndr, "info", r->out.info);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetFileClose(struct ndr_push *ndr, int flags, const struct srvsvc_NetFileClose *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.fid));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetFileClose(struct ndr_pull *ndr, int flags, struct srvsvc_NetFileClose *r)
-{
-	uint32_t _ptr_server_unc;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.fid));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetFileClose(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetFileClose *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetFileClose");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetFileClose");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "fid", r->in.fid);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetFileClose");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSessEnum(struct ndr_push *ndr, int flags, const struct srvsvc_NetSessEnum *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.client));
-		if (r->in.client) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.client, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.client, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.client, ndr_charset_length(r->in.client, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.user));
-		if (r->in.user) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.user, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.user, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.user, ndr_charset_length(r->in.user, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.info_ctr == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_srvsvc_NetSessInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info_ctr));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_buffer));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.resume_handle));
-		if (r->in.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info_ctr == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_srvsvc_NetSessInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info_ctr));
-		if (r->out.totalentries == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.totalentries));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.resume_handle));
-		if (r->out.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSessEnum(struct ndr_pull *ndr, int flags, struct srvsvc_NetSessEnum *r)
-{
-	uint32_t _ptr_server_unc;
-	uint32_t _ptr_client;
-	uint32_t _ptr_user;
-	uint32_t _ptr_resume_handle;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_client_0;
-	TALLOC_CTX *_mem_save_user_0;
-	TALLOC_CTX *_mem_save_info_ctr_0;
-	TALLOC_CTX *_mem_save_totalentries_0;
-	TALLOC_CTX *_mem_save_resume_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_client));
-		if (_ptr_client) {
-			NDR_PULL_ALLOC(ndr, r->in.client);
-		} else {
-			r->in.client = NULL;
-		}
-		if (r->in.client) {
-			_mem_save_client_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.client, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.client));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.client));
-			if (ndr_get_array_length(ndr, &r->in.client) > ndr_get_array_size(ndr, &r->in.client)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.client), ndr_get_array_length(ndr, &r->in.client));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.client), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.client, ndr_get_array_length(ndr, &r->in.client), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_client_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_user));
-		if (_ptr_user) {
-			NDR_PULL_ALLOC(ndr, r->in.user);
-		} else {
-			r->in.user = NULL;
-		}
-		if (r->in.user) {
-			_mem_save_user_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.user, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.user));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.user));
-			if (ndr_get_array_length(ndr, &r->in.user) > ndr_get_array_size(ndr, &r->in.user)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.user), ndr_get_array_length(ndr, &r->in.user));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.user), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.user, ndr_get_array_length(ndr, &r->in.user), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info_ctr);
-		}
-		_mem_save_info_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info_ctr, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_srvsvc_NetSessInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info_ctr));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_ctr_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_buffer));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->in.resume_handle);
-		} else {
-			r->in.resume_handle = NULL;
-		}
-		if (r->in.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.info_ctr);
-		*r->out.info_ctr = *r->in.info_ctr;
-		NDR_PULL_ALLOC(ndr, r->out.totalentries);
-		ZERO_STRUCTP(r->out.totalentries);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info_ctr);
-		}
-		_mem_save_info_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info_ctr, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_srvsvc_NetSessInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info_ctr));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_ctr_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.totalentries);
-		}
-		_mem_save_totalentries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.totalentries, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.totalentries));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_totalentries_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		} else {
-			r->out.resume_handle = NULL;
-		}
-		if (r->out.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSessEnum(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetSessEnum *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSessEnum");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetSessEnum");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "client", r->in.client);
-		ndr->depth++;
-		if (r->in.client) {
-			ndr_print_string(ndr, "client", r->in.client);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "user", r->in.user);
-		ndr->depth++;
-		if (r->in.user) {
-			ndr_print_string(ndr, "user", r->in.user);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "info_ctr", r->in.info_ctr);
-		ndr->depth++;
-		ndr_print_srvsvc_NetSessInfoCtr(ndr, "info_ctr", r->in.info_ctr);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "max_buffer", r->in.max_buffer);
-		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
-		ndr->depth++;
-		if (r->in.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetSessEnum");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info_ctr", r->out.info_ctr);
-		ndr->depth++;
-		ndr_print_srvsvc_NetSessInfoCtr(ndr, "info_ctr", r->out.info_ctr);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "totalentries", r->out.totalentries);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "totalentries", *r->out.totalentries);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
-		ndr->depth++;
-		if (r->out.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSessDel(struct ndr_push *ndr, int flags, const struct srvsvc_NetSessDel *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.client));
-		if (r->in.client) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.client, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.client, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.client, ndr_charset_length(r->in.client, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.user));
-		if (r->in.user) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.user, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.user, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.user, ndr_charset_length(r->in.user, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSessDel(struct ndr_pull *ndr, int flags, struct srvsvc_NetSessDel *r)
-{
-	uint32_t _ptr_server_unc;
-	uint32_t _ptr_client;
-	uint32_t _ptr_user;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_client_0;
-	TALLOC_CTX *_mem_save_user_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_client));
-		if (_ptr_client) {
-			NDR_PULL_ALLOC(ndr, r->in.client);
-		} else {
-			r->in.client = NULL;
-		}
-		if (r->in.client) {
-			_mem_save_client_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.client, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.client));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.client));
-			if (ndr_get_array_length(ndr, &r->in.client) > ndr_get_array_size(ndr, &r->in.client)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.client), ndr_get_array_length(ndr, &r->in.client));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.client), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.client, ndr_get_array_length(ndr, &r->in.client), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_client_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_user));
-		if (_ptr_user) {
-			NDR_PULL_ALLOC(ndr, r->in.user);
-		} else {
-			r->in.user = NULL;
-		}
-		if (r->in.user) {
-			_mem_save_user_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.user, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.user));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.user));
-			if (ndr_get_array_length(ndr, &r->in.user) > ndr_get_array_size(ndr, &r->in.user)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.user), ndr_get_array_length(ndr, &r->in.user));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.user), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.user, ndr_get_array_length(ndr, &r->in.user), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSessDel(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetSessDel *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSessDel");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetSessDel");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "client", r->in.client);
-		ndr->depth++;
-		if (r->in.client) {
-			ndr_print_string(ndr, "client", r->in.client);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "user", r->in.user);
-		ndr->depth++;
-		if (r->in.user) {
-			ndr_print_string(ndr, "user", r->in.user);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetSessDel");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareAdd(struct ndr_push *ndr, int flags, const struct srvsvc_NetShareAdd *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.info, r->in.level));
-		NDR_CHECK(ndr_push_srvsvc_NetShareInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.parm_error));
-		if (r->in.parm_error) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.parm_error));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.parm_error));
-		if (r->out.parm_error) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.parm_error));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareAdd(struct ndr_pull *ndr, int flags, struct srvsvc_NetShareAdd *r)
-{
-	uint32_t _ptr_server_unc;
-	uint32_t _ptr_parm_error;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_parm_error_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.info, r->in.level));
-		NDR_CHECK(ndr_pull_srvsvc_NetShareInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_parm_error));
-		if (_ptr_parm_error) {
-			NDR_PULL_ALLOC(ndr, r->in.parm_error);
-		} else {
-			r->in.parm_error = NULL;
-		}
-		if (r->in.parm_error) {
-			_mem_save_parm_error_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.parm_error, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.parm_error));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_parm_error_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_parm_error));
-		if (_ptr_parm_error) {
-			NDR_PULL_ALLOC(ndr, r->out.parm_error);
-		} else {
-			r->out.parm_error = NULL;
-		}
-		if (r->out.parm_error) {
-			_mem_save_parm_error_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.parm_error, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.parm_error));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_parm_error_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareAdd(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetShareAdd *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetShareAdd");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetShareAdd");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "info", r->in.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->in.info, r->in.level);
-		ndr_print_srvsvc_NetShareInfo(ndr, "info", r->in.info);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "parm_error", r->in.parm_error);
-		ndr->depth++;
-		if (r->in.parm_error) {
-			ndr_print_uint32(ndr, "parm_error", *r->in.parm_error);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetShareAdd");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "parm_error", r->out.parm_error);
-		ndr->depth++;
-		if (r->out.parm_error) {
-			ndr_print_uint32(ndr, "parm_error", *r->out.parm_error);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareEnumAll(struct ndr_push *ndr, int flags, const struct srvsvc_NetShareEnumAll *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.info_ctr == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_srvsvc_NetShareInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info_ctr));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_buffer));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.resume_handle));
-		if (r->in.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info_ctr == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_srvsvc_NetShareInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info_ctr));
-		if (r->out.totalentries == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.totalentries));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.resume_handle));
-		if (r->out.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareEnumAll(struct ndr_pull *ndr, int flags, struct srvsvc_NetShareEnumAll *r)
-{
-	uint32_t _ptr_server_unc;
-	uint32_t _ptr_resume_handle;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_info_ctr_0;
-	TALLOC_CTX *_mem_save_totalentries_0;
-	TALLOC_CTX *_mem_save_resume_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info_ctr);
-		}
-		_mem_save_info_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info_ctr, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_srvsvc_NetShareInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info_ctr));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_ctr_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_buffer));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->in.resume_handle);
-		} else {
-			r->in.resume_handle = NULL;
-		}
-		if (r->in.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.info_ctr);
-		*r->out.info_ctr = *r->in.info_ctr;
-		NDR_PULL_ALLOC(ndr, r->out.totalentries);
-		ZERO_STRUCTP(r->out.totalentries);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info_ctr);
-		}
-		_mem_save_info_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info_ctr, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_srvsvc_NetShareInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info_ctr));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_ctr_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.totalentries);
-		}
-		_mem_save_totalentries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.totalentries, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.totalentries));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_totalentries_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		} else {
-			r->out.resume_handle = NULL;
-		}
-		if (r->out.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareEnumAll(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetShareEnumAll *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetShareEnumAll");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetShareEnumAll");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "info_ctr", r->in.info_ctr);
-		ndr->depth++;
-		ndr_print_srvsvc_NetShareInfoCtr(ndr, "info_ctr", r->in.info_ctr);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "max_buffer", r->in.max_buffer);
-		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
-		ndr->depth++;
-		if (r->in.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetShareEnumAll");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info_ctr", r->out.info_ctr);
-		ndr->depth++;
-		ndr_print_srvsvc_NetShareInfoCtr(ndr, "info_ctr", r->out.info_ctr);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "totalentries", r->out.totalentries);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "totalentries", *r->out.totalentries);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
-		ndr->depth++;
-		if (r->out.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareGetInfo(struct ndr_push *ndr, int flags, const struct srvsvc_NetShareGetInfo *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.share_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.share_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.share_name, ndr_charset_length(r->in.share_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_push_srvsvc_NetShareInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareGetInfo(struct ndr_pull *ndr, int flags, struct srvsvc_NetShareGetInfo *r)
-{
-	uint32_t _ptr_server_unc;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.share_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.share_name));
-		if (ndr_get_array_length(ndr, &r->in.share_name) > ndr_get_array_size(ndr, &r->in.share_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.share_name), ndr_get_array_length(ndr, &r->in.share_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.share_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.share_name, ndr_get_array_length(ndr, &r->in.share_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_pull_srvsvc_NetShareInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareGetInfo(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetShareGetInfo *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetShareGetInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetShareGetInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "share_name", r->in.share_name);
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetShareGetInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.info, r->in.level);
-		ndr_print_srvsvc_NetShareInfo(ndr, "info", r->out.info);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareSetInfo(struct ndr_push *ndr, int flags, const struct srvsvc_NetShareSetInfo *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.share_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.share_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.share_name, ndr_charset_length(r->in.share_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.info, r->in.level));
-		NDR_CHECK(ndr_push_srvsvc_NetShareInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.parm_error));
-		if (r->in.parm_error) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.parm_error));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.parm_error));
-		if (r->out.parm_error) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.parm_error));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareSetInfo(struct ndr_pull *ndr, int flags, struct srvsvc_NetShareSetInfo *r)
-{
-	uint32_t _ptr_server_unc;
-	uint32_t _ptr_parm_error;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_parm_error_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.share_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.share_name));
-		if (ndr_get_array_length(ndr, &r->in.share_name) > ndr_get_array_size(ndr, &r->in.share_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.share_name), ndr_get_array_length(ndr, &r->in.share_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.share_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.share_name, ndr_get_array_length(ndr, &r->in.share_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.info, r->in.level));
-		NDR_CHECK(ndr_pull_srvsvc_NetShareInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_parm_error));
-		if (_ptr_parm_error) {
-			NDR_PULL_ALLOC(ndr, r->in.parm_error);
-		} else {
-			r->in.parm_error = NULL;
-		}
-		if (r->in.parm_error) {
-			_mem_save_parm_error_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.parm_error, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.parm_error));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_parm_error_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_parm_error));
-		if (_ptr_parm_error) {
-			NDR_PULL_ALLOC(ndr, r->out.parm_error);
-		} else {
-			r->out.parm_error = NULL;
-		}
-		if (r->out.parm_error) {
-			_mem_save_parm_error_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.parm_error, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.parm_error));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_parm_error_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareSetInfo(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetShareSetInfo *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetShareSetInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetShareSetInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "share_name", r->in.share_name);
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "info", r->in.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->in.info, r->in.level);
-		ndr_print_srvsvc_NetShareInfo(ndr, "info", r->in.info);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "parm_error", r->in.parm_error);
-		ndr->depth++;
-		if (r->in.parm_error) {
-			ndr_print_uint32(ndr, "parm_error", *r->in.parm_error);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetShareSetInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "parm_error", r->out.parm_error);
-		ndr->depth++;
-		if (r->out.parm_error) {
-			ndr_print_uint32(ndr, "parm_error", *r->out.parm_error);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareDel(struct ndr_push *ndr, int flags, const struct srvsvc_NetShareDel *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.share_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.share_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.share_name, ndr_charset_length(r->in.share_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.reserved));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareDel(struct ndr_pull *ndr, int flags, struct srvsvc_NetShareDel *r)
-{
-	uint32_t _ptr_server_unc;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.share_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.share_name));
-		if (ndr_get_array_length(ndr, &r->in.share_name) > ndr_get_array_size(ndr, &r->in.share_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.share_name), ndr_get_array_length(ndr, &r->in.share_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.share_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.share_name, ndr_get_array_length(ndr, &r->in.share_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.reserved));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareDel(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetShareDel *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetShareDel");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetShareDel");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "share_name", r->in.share_name);
-		ndr_print_uint32(ndr, "reserved", r->in.reserved);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetShareDel");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareDelSticky(struct ndr_push *ndr, int flags, const struct srvsvc_NetShareDelSticky *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.share_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.share_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.share_name, ndr_charset_length(r->in.share_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.reserved));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareDelSticky(struct ndr_pull *ndr, int flags, struct srvsvc_NetShareDelSticky *r)
-{
-	uint32_t _ptr_server_unc;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.share_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.share_name));
-		if (ndr_get_array_length(ndr, &r->in.share_name) > ndr_get_array_size(ndr, &r->in.share_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.share_name), ndr_get_array_length(ndr, &r->in.share_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.share_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.share_name, ndr_get_array_length(ndr, &r->in.share_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.reserved));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareDelSticky(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetShareDelSticky *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetShareDelSticky");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetShareDelSticky");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "share_name", r->in.share_name);
-		ndr_print_uint32(ndr, "reserved", r->in.reserved);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetShareDelSticky");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareCheck(struct ndr_push *ndr, int flags, const struct srvsvc_NetShareCheck *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.device_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.device_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.device_name, ndr_charset_length(r->in.device_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.type == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_srvsvc_ShareType(ndr, NDR_SCALARS, *r->out.type));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareCheck(struct ndr_pull *ndr, int flags, struct srvsvc_NetShareCheck *r)
-{
-	uint32_t _ptr_server_unc;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_type_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.device_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.device_name));
-		if (ndr_get_array_length(ndr, &r->in.device_name) > ndr_get_array_size(ndr, &r->in.device_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.device_name), ndr_get_array_length(ndr, &r->in.device_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.device_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.device_name, ndr_get_array_length(ndr, &r->in.device_name), sizeof(uint16_t), CH_UTF16));
-		NDR_PULL_ALLOC(ndr, r->out.type);
-		ZERO_STRUCTP(r->out.type);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.type);
-		}
-		_mem_save_type_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.type, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_srvsvc_ShareType(ndr, NDR_SCALARS, r->out.type));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_type_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareCheck(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetShareCheck *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetShareCheck");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetShareCheck");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "device_name", r->in.device_name);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetShareCheck");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "type", r->out.type);
-		ndr->depth++;
-		ndr_print_srvsvc_ShareType(ndr, "type", *r->out.type);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvGetInfo(struct ndr_push *ndr, int flags, const struct srvsvc_NetSrvGetInfo *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_push_srvsvc_NetSrvInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvGetInfo(struct ndr_pull *ndr, int flags, struct srvsvc_NetSrvGetInfo *r)
-{
-	uint32_t _ptr_server_unc;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvGetInfo(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetSrvGetInfo *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvGetInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetSrvGetInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetSrvGetInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.info, r->in.level);
-		ndr_print_srvsvc_NetSrvInfo(ndr, "info", r->out.info);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSrvSetInfo(struct ndr_push *ndr, int flags, const struct srvsvc_NetSrvSetInfo *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.info, r->in.level));
-		NDR_CHECK(ndr_push_srvsvc_NetSrvInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.parm_error));
-		if (r->in.parm_error) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.parm_error));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.parm_error));
-		if (r->out.parm_error) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.parm_error));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSrvSetInfo(struct ndr_pull *ndr, int flags, struct srvsvc_NetSrvSetInfo *r)
-{
-	uint32_t _ptr_server_unc;
-	uint32_t _ptr_parm_error;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_parm_error_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.info, r->in.level));
-		NDR_CHECK(ndr_pull_srvsvc_NetSrvInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_parm_error));
-		if (_ptr_parm_error) {
-			NDR_PULL_ALLOC(ndr, r->in.parm_error);
-		} else {
-			r->in.parm_error = NULL;
-		}
-		if (r->in.parm_error) {
-			_mem_save_parm_error_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.parm_error, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.parm_error));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_parm_error_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_parm_error));
-		if (_ptr_parm_error) {
-			NDR_PULL_ALLOC(ndr, r->out.parm_error);
-		} else {
-			r->out.parm_error = NULL;
-		}
-		if (r->out.parm_error) {
-			_mem_save_parm_error_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.parm_error, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.parm_error));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_parm_error_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSrvSetInfo(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetSrvSetInfo *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSrvSetInfo");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetSrvSetInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "info", r->in.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->in.info, r->in.level);
-		ndr_print_srvsvc_NetSrvInfo(ndr, "info", r->in.info);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "parm_error", r->in.parm_error);
-		ndr->depth++;
-		if (r->in.parm_error) {
-			ndr_print_uint32(ndr, "parm_error", *r->in.parm_error);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetSrvSetInfo");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "parm_error", r->out.parm_error);
-		ndr->depth++;
-		if (r->out.parm_error) {
-			ndr_print_uint32(ndr, "parm_error", *r->out.parm_error);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetDiskEnum(struct ndr_push *ndr, int flags, const struct srvsvc_NetDiskEnum *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_srvsvc_NetDiskInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.maxlen));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.resume_handle));
-		if (r->in.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_srvsvc_NetDiskInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		if (r->out.totalentries == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.totalentries));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.resume_handle));
-		if (r->out.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetDiskEnum(struct ndr_pull *ndr, int flags, struct srvsvc_NetDiskEnum *r)
-{
-	uint32_t _ptr_server_unc;
-	uint32_t _ptr_resume_handle;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_totalentries_0;
-	TALLOC_CTX *_mem_save_resume_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_srvsvc_NetDiskInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.maxlen));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->in.resume_handle);
-		} else {
-			r->in.resume_handle = NULL;
-		}
-		if (r->in.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		*r->out.info = *r->in.info;
-		NDR_PULL_ALLOC(ndr, r->out.totalentries);
-		ZERO_STRUCTP(r->out.totalentries);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_srvsvc_NetDiskInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.totalentries);
-		}
-		_mem_save_totalentries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.totalentries, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.totalentries));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_totalentries_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		} else {
-			r->out.resume_handle = NULL;
-		}
-		if (r->out.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetDiskEnum(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetDiskEnum *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetDiskEnum");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetDiskEnum");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "info", r->in.info);
-		ndr->depth++;
-		ndr_print_srvsvc_NetDiskInfo(ndr, "info", r->in.info);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "maxlen", r->in.maxlen);
-		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
-		ndr->depth++;
-		if (r->in.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetDiskEnum");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_srvsvc_NetDiskInfo(ndr, "info", r->out.info);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "totalentries", r->out.totalentries);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "totalentries", *r->out.totalentries);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
-		ndr->depth++;
-		if (r->out.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetServerStatisticsGet(struct ndr_push *ndr, int flags, const struct srvsvc_NetServerStatisticsGet *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.service));
-		if (r->in.service) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.service, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.service, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.service, ndr_charset_length(r->in.service, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.options));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.stats == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_srvsvc_Statistics(ndr, NDR_SCALARS, r->out.stats));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetServerStatisticsGet(struct ndr_pull *ndr, int flags, struct srvsvc_NetServerStatisticsGet *r)
-{
-	uint32_t _ptr_server_unc;
-	uint32_t _ptr_service;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_service_0;
-	TALLOC_CTX *_mem_save_stats_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_service));
-		if (_ptr_service) {
-			NDR_PULL_ALLOC(ndr, r->in.service);
-		} else {
-			r->in.service = NULL;
-		}
-		if (r->in.service) {
-			_mem_save_service_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.service, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.service));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.service));
-			if (ndr_get_array_length(ndr, &r->in.service) > ndr_get_array_size(ndr, &r->in.service)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.service), ndr_get_array_length(ndr, &r->in.service));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.service), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.service, ndr_get_array_length(ndr, &r->in.service), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_service_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.options));
-		NDR_PULL_ALLOC(ndr, r->out.stats);
-		ZERO_STRUCTP(r->out.stats);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.stats);
-		}
-		_mem_save_stats_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.stats, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_srvsvc_Statistics(ndr, NDR_SCALARS, r->out.stats));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_stats_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetServerStatisticsGet(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetServerStatisticsGet *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetServerStatisticsGet");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetServerStatisticsGet");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "service", r->in.service);
-		ndr->depth++;
-		if (r->in.service) {
-			ndr_print_string(ndr, "service", r->in.service);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr_print_uint32(ndr, "options", r->in.options);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetServerStatisticsGet");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "stats", r->out.stats);
-		ndr->depth++;
-		ndr_print_srvsvc_Statistics(ndr, "stats", r->out.stats);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetTransportAdd(struct ndr_push *ndr, int flags, const struct srvsvc_NetTransportAdd *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->in.info, r->in.level));
-		NDR_CHECK(ndr_push_srvsvc_NetTransportInfo(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.info));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetTransportAdd(struct ndr_pull *ndr, int flags, struct srvsvc_NetTransportAdd *r)
-{
-	uint32_t _ptr_server_unc;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->in.info, r->in.level));
-		NDR_CHECK(ndr_pull_srvsvc_NetTransportInfo(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.info));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetTransportAdd(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetTransportAdd *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetTransportAdd");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetTransportAdd");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr_print_set_switch_value(ndr, &r->in.info, r->in.level);
-		ndr_print_srvsvc_NetTransportInfo(ndr, "info", &r->in.info);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetTransportAdd");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetTransportEnum(struct ndr_push *ndr, int flags, const struct srvsvc_NetTransportEnum *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.level == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.level));
-		if (r->in.transports == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.transports, *r->in.level));
-		NDR_CHECK(ndr_push_srvsvc_NetTransportCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.transports));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_buffer));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.resume_handle));
-		if (r->in.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.level == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.level));
-		if (r->out.transports == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.transports, *r->out.level));
-		NDR_CHECK(ndr_push_srvsvc_NetTransportCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.transports));
-		if (r->out.totalentries == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.totalentries));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.resume_handle));
-		if (r->out.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetTransportEnum(struct ndr_pull *ndr, int flags, struct srvsvc_NetTransportEnum *r)
-{
-	uint32_t _ptr_server_unc;
-	uint32_t _ptr_resume_handle;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_level_0;
-	TALLOC_CTX *_mem_save_transports_0;
-	TALLOC_CTX *_mem_save_totalentries_0;
-	TALLOC_CTX *_mem_save_resume_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.level);
-		}
-		_mem_save_level_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.level, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.level));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_level_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.transports);
-		}
-		_mem_save_transports_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.transports, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.transports, *r->in.level));
-		NDR_CHECK(ndr_pull_srvsvc_NetTransportCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.transports));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_transports_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_buffer));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->in.resume_handle);
-		} else {
-			r->in.resume_handle = NULL;
-		}
-		if (r->in.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.level);
-		*r->out.level = *r->in.level;
-		NDR_PULL_ALLOC(ndr, r->out.transports);
-		*r->out.transports = *r->in.transports;
-		NDR_PULL_ALLOC(ndr, r->out.totalentries);
-		ZERO_STRUCTP(r->out.totalentries);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.level);
-		}
-		_mem_save_level_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.level, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.level));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_level_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.transports);
-		}
-		_mem_save_transports_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.transports, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.transports, *r->out.level));
-		NDR_CHECK(ndr_pull_srvsvc_NetTransportCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.transports));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_transports_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.totalentries);
-		}
-		_mem_save_totalentries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.totalentries, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.totalentries));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_totalentries_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		} else {
-			r->out.resume_handle = NULL;
-		}
-		if (r->out.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetTransportEnum(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetTransportEnum *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetTransportEnum");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetTransportEnum");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "level", r->in.level);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "level", *r->in.level);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "transports", r->in.transports);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->in.transports, *r->in.level);
-		ndr_print_srvsvc_NetTransportCtr(ndr, "transports", r->in.transports);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "max_buffer", r->in.max_buffer);
-		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
-		ndr->depth++;
-		if (r->in.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetTransportEnum");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "level", r->out.level);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "level", *r->out.level);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "transports", r->out.transports);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.transports, *r->out.level);
-		ndr_print_srvsvc_NetTransportCtr(ndr, "transports", r->out.transports);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "totalentries", r->out.totalentries);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "totalentries", *r->out.totalentries);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
-		ndr->depth++;
-		if (r->out.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetTransportDel(struct ndr_push *ndr, int flags, const struct srvsvc_NetTransportDel *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown));
-		NDR_CHECK(ndr_push_srvsvc_NetTransportInfo0(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.transport));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetTransportDel(struct ndr_pull *ndr, int flags, struct srvsvc_NetTransportDel *r)
-{
-	uint32_t _ptr_server_unc;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown));
-		NDR_CHECK(ndr_pull_srvsvc_NetTransportInfo0(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.transport));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetTransportDel(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetTransportDel *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetTransportDel");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetTransportDel");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "unknown", r->in.unknown);
-		ndr_print_srvsvc_NetTransportInfo0(ndr, "transport", &r->in.transport);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetTransportDel");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetRemoteTOD(struct ndr_push *ndr, int flags, const struct srvsvc_NetRemoteTOD *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.info));
-		if (*r->out.info) {
-			NDR_CHECK(ndr_push_srvsvc_NetRemoteTODInfo(ndr, NDR_SCALARS, *r->out.info));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetRemoteTOD(struct ndr_pull *ndr, int flags, struct srvsvc_NetRemoteTOD *r)
-{
-	uint32_t _ptr_server_unc;
-	uint32_t _ptr_info;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_info_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, *r->out.info);
-		} else {
-			*r->out.info = NULL;
-		}
-		if (*r->out.info) {
-			_mem_save_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.info, 0);
-			NDR_CHECK(ndr_pull_srvsvc_NetRemoteTODInfo(ndr, NDR_SCALARS, *r->out.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetRemoteTOD(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetRemoteTOD *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetRemoteTOD");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetRemoteTOD");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetRemoteTOD");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", *r->out.info);
-		ndr->depth++;
-		if (*r->out.info) {
-			ndr_print_srvsvc_NetRemoteTODInfo(ndr, "info", *r->out.info);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSetServiceBits(struct ndr_push *ndr, int flags, const struct srvsvc_NetSetServiceBits *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.transport));
-		if (r->in.transport) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.transport, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.transport, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.transport, ndr_charset_length(r->in.transport, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.servicebits));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.updateimmediately));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSetServiceBits(struct ndr_pull *ndr, int flags, struct srvsvc_NetSetServiceBits *r)
-{
-	uint32_t _ptr_server_unc;
-	uint32_t _ptr_transport;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_transport_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_transport));
-		if (_ptr_transport) {
-			NDR_PULL_ALLOC(ndr, r->in.transport);
-		} else {
-			r->in.transport = NULL;
-		}
-		if (r->in.transport) {
-			_mem_save_transport_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.transport, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.transport));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.transport));
-			if (ndr_get_array_length(ndr, &r->in.transport) > ndr_get_array_size(ndr, &r->in.transport)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.transport), ndr_get_array_length(ndr, &r->in.transport));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.transport), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.transport, ndr_get_array_length(ndr, &r->in.transport), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_transport_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.servicebits));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.updateimmediately));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSetServiceBits(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetSetServiceBits *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSetServiceBits");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetSetServiceBits");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "transport", r->in.transport);
-		ndr->depth++;
-		if (r->in.transport) {
-			ndr_print_string(ndr, "transport", r->in.transport);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "servicebits", r->in.servicebits);
-		ndr_print_uint32(ndr, "updateimmediately", r->in.updateimmediately);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetSetServiceBits");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetPathType(struct ndr_push *ndr, int flags, const struct srvsvc_NetPathType *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.path, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.path, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.path, ndr_charset_length(r->in.path, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.pathflags));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.pathtype == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.pathtype));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetPathType(struct ndr_pull *ndr, int flags, struct srvsvc_NetPathType *r)
-{
-	uint32_t _ptr_server_unc;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_pathtype_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.path));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.path));
-		if (ndr_get_array_length(ndr, &r->in.path) > ndr_get_array_size(ndr, &r->in.path)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.path), ndr_get_array_length(ndr, &r->in.path));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.path), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.path, ndr_get_array_length(ndr, &r->in.path), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.pathflags));
-		NDR_PULL_ALLOC(ndr, r->out.pathtype);
-		ZERO_STRUCTP(r->out.pathtype);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.pathtype);
-		}
-		_mem_save_pathtype_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.pathtype, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.pathtype));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_pathtype_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetPathType(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetPathType *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetPathType");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetPathType");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "path", r->in.path);
-		ndr_print_uint32(ndr, "pathflags", r->in.pathflags);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetPathType");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "pathtype", r->out.pathtype);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "pathtype", *r->out.pathtype);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetPathCanonicalize(struct ndr_push *ndr, int flags, const struct srvsvc_NetPathCanonicalize *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.path, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.path, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.path, ndr_charset_length(r->in.path, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.maxbuf));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.prefix, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.prefix, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.prefix, ndr_charset_length(r->in.prefix, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		if (r->in.pathtype == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.pathtype));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.pathflags));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.maxbuf));
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->out.can_path, r->in.maxbuf));
-		if (r->out.pathtype == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.pathtype));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetPathCanonicalize(struct ndr_pull *ndr, int flags, struct srvsvc_NetPathCanonicalize *r)
-{
-	uint32_t _ptr_server_unc;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_pathtype_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.path));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.path));
-		if (ndr_get_array_length(ndr, &r->in.path) > ndr_get_array_size(ndr, &r->in.path)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.path), ndr_get_array_length(ndr, &r->in.path));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.path), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.path, ndr_get_array_length(ndr, &r->in.path), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.maxbuf));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.prefix));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.prefix));
-		if (ndr_get_array_length(ndr, &r->in.prefix) > ndr_get_array_size(ndr, &r->in.prefix)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.prefix), ndr_get_array_length(ndr, &r->in.prefix));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.prefix), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.prefix, ndr_get_array_length(ndr, &r->in.prefix), sizeof(uint16_t), CH_UTF16));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.pathtype);
-		}
-		_mem_save_pathtype_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.pathtype, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.pathtype));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_pathtype_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.pathflags));
-		NDR_PULL_ALLOC(ndr, r->out.pathtype);
-		*r->out.pathtype = *r->in.pathtype;
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->out.can_path));
-		NDR_PULL_ALLOC_N(ndr, r->out.can_path, ndr_get_array_size(ndr, &r->out.can_path));
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.can_path, ndr_get_array_size(ndr, &r->out.can_path)));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.pathtype);
-		}
-		_mem_save_pathtype_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.pathtype, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.pathtype));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_pathtype_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-		if (r->out.can_path) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->out.can_path, r->in.maxbuf));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetPathCanonicalize(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetPathCanonicalize *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetPathCanonicalize");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetPathCanonicalize");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "path", r->in.path);
-		ndr_print_uint32(ndr, "maxbuf", r->in.maxbuf);
-		ndr_print_string(ndr, "prefix", r->in.prefix);
-		ndr_print_ptr(ndr, "pathtype", r->in.pathtype);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "pathtype", *r->in.pathtype);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "pathflags", r->in.pathflags);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetPathCanonicalize");
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "can_path", r->out.can_path, r->in.maxbuf);
-		ndr_print_ptr(ndr, "pathtype", r->out.pathtype);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "pathtype", *r->out.pathtype);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetPathCompare(struct ndr_push *ndr, int flags, const struct srvsvc_NetPathCompare *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.path1, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.path1, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.path1, ndr_charset_length(r->in.path1, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.path2, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.path2, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.path2, ndr_charset_length(r->in.path2, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.pathtype));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.pathflags));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetPathCompare(struct ndr_pull *ndr, int flags, struct srvsvc_NetPathCompare *r)
-{
-	uint32_t _ptr_server_unc;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.path1));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.path1));
-		if (ndr_get_array_length(ndr, &r->in.path1) > ndr_get_array_size(ndr, &r->in.path1)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.path1), ndr_get_array_length(ndr, &r->in.path1));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.path1), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.path1, ndr_get_array_length(ndr, &r->in.path1), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.path2));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.path2));
-		if (ndr_get_array_length(ndr, &r->in.path2) > ndr_get_array_size(ndr, &r->in.path2)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.path2), ndr_get_array_length(ndr, &r->in.path2));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.path2), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.path2, ndr_get_array_length(ndr, &r->in.path2), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.pathtype));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.pathflags));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetPathCompare(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetPathCompare *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetPathCompare");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetPathCompare");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "path1", r->in.path1);
-		ndr_print_string(ndr, "path2", r->in.path2);
-		ndr_print_uint32(ndr, "pathtype", r->in.pathtype);
-		ndr_print_uint32(ndr, "pathflags", r->in.pathflags);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetPathCompare");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetNameValidate(struct ndr_push *ndr, int flags, const struct srvsvc_NetNameValidate *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.name, ndr_charset_length(r->in.name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.name_type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetNameValidate(struct ndr_pull *ndr, int flags, struct srvsvc_NetNameValidate *r)
-{
-	uint32_t _ptr_server_unc;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.name));
-		if (ndr_get_array_length(ndr, &r->in.name) > ndr_get_array_size(ndr, &r->in.name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.name), ndr_get_array_length(ndr, &r->in.name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.name, ndr_get_array_length(ndr, &r->in.name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.name_type));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetNameValidate(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetNameValidate *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetNameValidate");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetNameValidate");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "name", r->in.name);
-		ndr_print_uint32(ndr, "name_type", r->in.name_type);
-		ndr_print_uint32(ndr, "flags", r->in.flags);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetNameValidate");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NETRPRNAMECANONICALIZE(struct ndr_push *ndr, int flags, const struct srvsvc_NETRPRNAMECANONICALIZE *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NETRPRNAMECANONICALIZE(struct ndr_pull *ndr, int flags, struct srvsvc_NETRPRNAMECANONICALIZE *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NETRPRNAMECANONICALIZE(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NETRPRNAMECANONICALIZE *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NETRPRNAMECANONICALIZE");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NETRPRNAMECANONICALIZE");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NETRPRNAMECANONICALIZE");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetPRNameCompare(struct ndr_push *ndr, int flags, const struct srvsvc_NetPRNameCompare *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.name1, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.name1, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.name1, ndr_charset_length(r->in.name1, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.name2, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.name2, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.name2, ndr_charset_length(r->in.name2, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.name_type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetPRNameCompare(struct ndr_pull *ndr, int flags, struct srvsvc_NetPRNameCompare *r)
-{
-	uint32_t _ptr_server_unc;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.name1));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.name1));
-		if (ndr_get_array_length(ndr, &r->in.name1) > ndr_get_array_size(ndr, &r->in.name1)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.name1), ndr_get_array_length(ndr, &r->in.name1));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.name1), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.name1, ndr_get_array_length(ndr, &r->in.name1), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.name2));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.name2));
-		if (ndr_get_array_length(ndr, &r->in.name2) > ndr_get_array_size(ndr, &r->in.name2)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.name2), ndr_get_array_length(ndr, &r->in.name2));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.name2), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.name2, ndr_get_array_length(ndr, &r->in.name2), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.name_type));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetPRNameCompare(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetPRNameCompare *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetPRNameCompare");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetPRNameCompare");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "name1", r->in.name1);
-		ndr_print_string(ndr, "name2", r->in.name2);
-		ndr_print_uint32(ndr, "name_type", r->in.name_type);
-		ndr_print_uint32(ndr, "flags", r->in.flags);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetPRNameCompare");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareEnum(struct ndr_push *ndr, int flags, const struct srvsvc_NetShareEnum *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.info_ctr == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_srvsvc_NetShareInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info_ctr));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_buffer));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.resume_handle));
-		if (r->in.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.info_ctr == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_srvsvc_NetShareInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info_ctr));
-		if (r->out.totalentries == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.totalentries));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.resume_handle));
-		if (r->out.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareEnum(struct ndr_pull *ndr, int flags, struct srvsvc_NetShareEnum *r)
-{
-	uint32_t _ptr_server_unc;
-	uint32_t _ptr_resume_handle;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_info_ctr_0;
-	TALLOC_CTX *_mem_save_totalentries_0;
-	TALLOC_CTX *_mem_save_resume_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info_ctr);
-		}
-		_mem_save_info_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info_ctr, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_srvsvc_NetShareInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info_ctr));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_ctr_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_buffer));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->in.resume_handle);
-		} else {
-			r->in.resume_handle = NULL;
-		}
-		if (r->in.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.info_ctr);
-		*r->out.info_ctr = *r->in.info_ctr;
-		NDR_PULL_ALLOC(ndr, r->out.totalentries);
-		ZERO_STRUCTP(r->out.totalentries);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info_ctr);
-		}
-		_mem_save_info_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info_ctr, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_srvsvc_NetShareInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info_ctr));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_ctr_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.totalentries);
-		}
-		_mem_save_totalentries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.totalentries, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.totalentries));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_totalentries_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		} else {
-			r->out.resume_handle = NULL;
-		}
-		if (r->out.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareEnum(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetShareEnum *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetShareEnum");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetShareEnum");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "info_ctr", r->in.info_ctr);
-		ndr->depth++;
-		ndr_print_srvsvc_NetShareInfoCtr(ndr, "info_ctr", r->in.info_ctr);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "max_buffer", r->in.max_buffer);
-		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
-		ndr->depth++;
-		if (r->in.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetShareEnum");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info_ctr", r->out.info_ctr);
-		ndr->depth++;
-		ndr_print_srvsvc_NetShareInfoCtr(ndr, "info_ctr", r->out.info_ctr);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "totalentries", r->out.totalentries);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "totalentries", *r->out.totalentries);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
-		ndr->depth++;
-		if (r->out.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareDelStart(struct ndr_push *ndr, int flags, const struct srvsvc_NetShareDelStart *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.share, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.share, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.share, ndr_charset_length(r->in.share, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.reserved));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.hnd));
-		if (r->out.hnd) {
-			NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.hnd));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareDelStart(struct ndr_pull *ndr, int flags, struct srvsvc_NetShareDelStart *r)
-{
-	uint32_t _ptr_server_unc;
-	uint32_t _ptr_hnd;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_hnd_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.share));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.share));
-		if (ndr_get_array_length(ndr, &r->in.share) > ndr_get_array_size(ndr, &r->in.share)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.share), ndr_get_array_length(ndr, &r->in.share));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.share), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.share, ndr_get_array_length(ndr, &r->in.share), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.reserved));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_hnd));
-		if (_ptr_hnd) {
-			NDR_PULL_ALLOC(ndr, r->out.hnd);
-		} else {
-			r->out.hnd = NULL;
-		}
-		if (r->out.hnd) {
-			_mem_save_hnd_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.hnd, 0);
-			NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.hnd));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_hnd_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareDelStart(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetShareDelStart *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetShareDelStart");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetShareDelStart");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "share", r->in.share);
-		ndr_print_uint32(ndr, "reserved", r->in.reserved);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetShareDelStart");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "hnd", r->out.hnd);
-		ndr->depth++;
-		if (r->out.hnd) {
-			ndr_print_policy_handle(ndr, "hnd", r->out.hnd);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetShareDelCommit(struct ndr_push *ndr, int flags, const struct srvsvc_NetShareDelCommit *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.hnd));
-		if (r->in.hnd) {
-			NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.hnd));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.hnd));
-		if (r->out.hnd) {
-			NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.hnd));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetShareDelCommit(struct ndr_pull *ndr, int flags, struct srvsvc_NetShareDelCommit *r)
-{
-	uint32_t _ptr_hnd;
-	TALLOC_CTX *_mem_save_hnd_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_hnd));
-		if (_ptr_hnd) {
-			NDR_PULL_ALLOC(ndr, r->in.hnd);
-		} else {
-			r->in.hnd = NULL;
-		}
-		if (r->in.hnd) {
-			_mem_save_hnd_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.hnd, 0);
-			NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.hnd));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_hnd_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_hnd));
-		if (_ptr_hnd) {
-			NDR_PULL_ALLOC(ndr, r->out.hnd);
-		} else {
-			r->out.hnd = NULL;
-		}
-		if (r->out.hnd) {
-			_mem_save_hnd_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.hnd, 0);
-			NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.hnd));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_hnd_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetShareDelCommit(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetShareDelCommit *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetShareDelCommit");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetShareDelCommit");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "hnd", r->in.hnd);
-		ndr->depth++;
-		if (r->in.hnd) {
-			ndr_print_policy_handle(ndr, "hnd", r->in.hnd);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetShareDelCommit");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "hnd", r->out.hnd);
-		ndr->depth++;
-		if (r->out.hnd) {
-			ndr_print_policy_handle(ndr, "hnd", r->out.hnd);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetGetFileSecurity(struct ndr_push *ndr, int flags, const struct srvsvc_NetGetFileSecurity *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.share));
-		if (r->in.share) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.share, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.share, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.share, ndr_charset_length(r->in.share, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.file, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.file, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.file, ndr_charset_length(r->in.file, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_security_secinfo(ndr, NDR_SCALARS, r->in.securityinformation));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.sd_buf == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.sd_buf));
-		if (*r->out.sd_buf) {
-			NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.sd_buf));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetGetFileSecurity(struct ndr_pull *ndr, int flags, struct srvsvc_NetGetFileSecurity *r)
-{
-	uint32_t _ptr_server_unc;
-	uint32_t _ptr_share;
-	uint32_t _ptr_sd_buf;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_share_0;
-	TALLOC_CTX *_mem_save_sd_buf_0;
-	TALLOC_CTX *_mem_save_sd_buf_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_share));
-		if (_ptr_share) {
-			NDR_PULL_ALLOC(ndr, r->in.share);
-		} else {
-			r->in.share = NULL;
-		}
-		if (r->in.share) {
-			_mem_save_share_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.share, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.share));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.share));
-			if (ndr_get_array_length(ndr, &r->in.share) > ndr_get_array_size(ndr, &r->in.share)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.share), ndr_get_array_length(ndr, &r->in.share));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.share), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.share, ndr_get_array_length(ndr, &r->in.share), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_share_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.file));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.file));
-		if (ndr_get_array_length(ndr, &r->in.file) > ndr_get_array_size(ndr, &r->in.file)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.file), ndr_get_array_length(ndr, &r->in.file));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.file), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.file, ndr_get_array_length(ndr, &r->in.file), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_security_secinfo(ndr, NDR_SCALARS, &r->in.securityinformation));
-		NDR_PULL_ALLOC(ndr, r->out.sd_buf);
-		ZERO_STRUCTP(r->out.sd_buf);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.sd_buf);
-		}
-		_mem_save_sd_buf_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.sd_buf, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sd_buf));
-		if (_ptr_sd_buf) {
-			NDR_PULL_ALLOC(ndr, *r->out.sd_buf);
-		} else {
-			*r->out.sd_buf = NULL;
-		}
-		if (*r->out.sd_buf) {
-			_mem_save_sd_buf_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.sd_buf, 0);
-			NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.sd_buf));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sd_buf_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sd_buf_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetGetFileSecurity(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetGetFileSecurity *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetGetFileSecurity");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetGetFileSecurity");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "share", r->in.share);
-		ndr->depth++;
-		if (r->in.share) {
-			ndr_print_string(ndr, "share", r->in.share);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "file", r->in.file);
-		ndr_print_security_secinfo(ndr, "securityinformation", r->in.securityinformation);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetGetFileSecurity");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "sd_buf", r->out.sd_buf);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "sd_buf", *r->out.sd_buf);
-		ndr->depth++;
-		if (*r->out.sd_buf) {
-			ndr_print_sec_desc_buf(ndr, "sd_buf", *r->out.sd_buf);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetSetFileSecurity(struct ndr_push *ndr, int flags, const struct srvsvc_NetSetFileSecurity *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.share));
-		if (r->in.share) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.share, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.share, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.share, ndr_charset_length(r->in.share, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.file, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.file, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.file, ndr_charset_length(r->in.file, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_security_secinfo(ndr, NDR_SCALARS, r->in.securityinformation));
-		if (r->in.sd_buf == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_sec_desc_buf(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sd_buf));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetSetFileSecurity(struct ndr_pull *ndr, int flags, struct srvsvc_NetSetFileSecurity *r)
-{
-	uint32_t _ptr_server_unc;
-	uint32_t _ptr_share;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_share_0;
-	TALLOC_CTX *_mem_save_sd_buf_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_share));
-		if (_ptr_share) {
-			NDR_PULL_ALLOC(ndr, r->in.share);
-		} else {
-			r->in.share = NULL;
-		}
-		if (r->in.share) {
-			_mem_save_share_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.share, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.share));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.share));
-			if (ndr_get_array_length(ndr, &r->in.share) > ndr_get_array_size(ndr, &r->in.share)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.share), ndr_get_array_length(ndr, &r->in.share));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.share), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.share, ndr_get_array_length(ndr, &r->in.share), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_share_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.file));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.file));
-		if (ndr_get_array_length(ndr, &r->in.file) > ndr_get_array_size(ndr, &r->in.file)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.file), ndr_get_array_length(ndr, &r->in.file));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.file), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.file, ndr_get_array_length(ndr, &r->in.file), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_security_secinfo(ndr, NDR_SCALARS, &r->in.securityinformation));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sd_buf);
-		}
-		_mem_save_sd_buf_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sd_buf, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_sec_desc_buf(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sd_buf));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sd_buf_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetSetFileSecurity(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetSetFileSecurity *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetSetFileSecurity");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetSetFileSecurity");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "share", r->in.share);
-		ndr->depth++;
-		if (r->in.share) {
-			ndr_print_string(ndr, "share", r->in.share);
-		}
-		ndr->depth--;
-		ndr_print_string(ndr, "file", r->in.file);
-		ndr_print_security_secinfo(ndr, "securityinformation", r->in.securityinformation);
-		ndr_print_ptr(ndr, "sd_buf", r->in.sd_buf);
-		ndr->depth++;
-		ndr_print_sec_desc_buf(ndr, "sd_buf", r->in.sd_buf);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetSetFileSecurity");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetServerTransportAddEx(struct ndr_push *ndr, int flags, const struct srvsvc_NetServerTransportAddEx *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->in.info, r->in.level));
-		NDR_CHECK(ndr_push_srvsvc_NetTransportInfo(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.info));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetServerTransportAddEx(struct ndr_pull *ndr, int flags, struct srvsvc_NetServerTransportAddEx *r)
-{
-	uint32_t _ptr_server_unc;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->in.info, r->in.level));
-		NDR_CHECK(ndr_pull_srvsvc_NetTransportInfo(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.info));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetServerTransportAddEx(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetServerTransportAddEx *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetServerTransportAddEx");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetServerTransportAddEx");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr_print_set_switch_value(ndr, &r->in.info, r->in.level);
-		ndr_print_srvsvc_NetTransportInfo(ndr, "info", &r->in.info);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetServerTransportAddEx");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NetServerSetServiceBitsEx(struct ndr_push *ndr, int flags, const struct srvsvc_NetServerSetServiceBitsEx *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_unc));
-		if (r->in.server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_unc, ndr_charset_length(r->in.server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.emulated_server_unc));
-		if (r->in.emulated_server_unc) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.emulated_server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.emulated_server_unc, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.emulated_server_unc, ndr_charset_length(r->in.emulated_server_unc, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.transport));
-		if (r->in.transport) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.transport, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.transport, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.transport, ndr_charset_length(r->in.transport, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.servicebitsofinterest));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.servicebits));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.updateimmediately));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NetServerSetServiceBitsEx(struct ndr_pull *ndr, int flags, struct srvsvc_NetServerSetServiceBitsEx *r)
-{
-	uint32_t _ptr_server_unc;
-	uint32_t _ptr_emulated_server_unc;
-	uint32_t _ptr_transport;
-	TALLOC_CTX *_mem_save_server_unc_0;
-	TALLOC_CTX *_mem_save_emulated_server_unc_0;
-	TALLOC_CTX *_mem_save_transport_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_unc));
-		if (_ptr_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.server_unc);
-		} else {
-			r->in.server_unc = NULL;
-		}
-		if (r->in.server_unc) {
-			_mem_save_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_unc));
-			if (ndr_get_array_length(ndr, &r->in.server_unc) > ndr_get_array_size(ndr, &r->in.server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_unc), ndr_get_array_length(ndr, &r->in.server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_unc, ndr_get_array_length(ndr, &r->in.server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_emulated_server_unc));
-		if (_ptr_emulated_server_unc) {
-			NDR_PULL_ALLOC(ndr, r->in.emulated_server_unc);
-		} else {
-			r->in.emulated_server_unc = NULL;
-		}
-		if (r->in.emulated_server_unc) {
-			_mem_save_emulated_server_unc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.emulated_server_unc, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.emulated_server_unc));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.emulated_server_unc));
-			if (ndr_get_array_length(ndr, &r->in.emulated_server_unc) > ndr_get_array_size(ndr, &r->in.emulated_server_unc)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.emulated_server_unc), ndr_get_array_length(ndr, &r->in.emulated_server_unc));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.emulated_server_unc), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.emulated_server_unc, ndr_get_array_length(ndr, &r->in.emulated_server_unc), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_emulated_server_unc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_transport));
-		if (_ptr_transport) {
-			NDR_PULL_ALLOC(ndr, r->in.transport);
-		} else {
-			r->in.transport = NULL;
-		}
-		if (r->in.transport) {
-			_mem_save_transport_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.transport, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.transport));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.transport));
-			if (ndr_get_array_length(ndr, &r->in.transport) > ndr_get_array_size(ndr, &r->in.transport)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.transport), ndr_get_array_length(ndr, &r->in.transport));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.transport), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.transport, ndr_get_array_length(ndr, &r->in.transport), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_transport_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.servicebitsofinterest));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.servicebits));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.updateimmediately));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NetServerSetServiceBitsEx(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NetServerSetServiceBitsEx *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NetServerSetServiceBitsEx");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NetServerSetServiceBitsEx");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server_unc", r->in.server_unc);
-		ndr->depth++;
-		if (r->in.server_unc) {
-			ndr_print_string(ndr, "server_unc", r->in.server_unc);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "emulated_server_unc", r->in.emulated_server_unc);
-		ndr->depth++;
-		if (r->in.emulated_server_unc) {
-			ndr_print_string(ndr, "emulated_server_unc", r->in.emulated_server_unc);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "transport", r->in.transport);
-		ndr->depth++;
-		if (r->in.transport) {
-			ndr_print_string(ndr, "transport", r->in.transport);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "servicebitsofinterest", r->in.servicebitsofinterest);
-		ndr_print_uint32(ndr, "servicebits", r->in.servicebits);
-		ndr_print_uint32(ndr, "updateimmediately", r->in.updateimmediately);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NetServerSetServiceBitsEx");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NETRDFSGETVERSION(struct ndr_push *ndr, int flags, const struct srvsvc_NETRDFSGETVERSION *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NETRDFSGETVERSION(struct ndr_pull *ndr, int flags, struct srvsvc_NETRDFSGETVERSION *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NETRDFSGETVERSION(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NETRDFSGETVERSION *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NETRDFSGETVERSION");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NETRDFSGETVERSION");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NETRDFSGETVERSION");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NETRDFSCREATELOCALPARTITION(struct ndr_push *ndr, int flags, const struct srvsvc_NETRDFSCREATELOCALPARTITION *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NETRDFSCREATELOCALPARTITION(struct ndr_pull *ndr, int flags, struct srvsvc_NETRDFSCREATELOCALPARTITION *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NETRDFSCREATELOCALPARTITION(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NETRDFSCREATELOCALPARTITION *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NETRDFSCREATELOCALPARTITION");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NETRDFSCREATELOCALPARTITION");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NETRDFSCREATELOCALPARTITION");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NETRDFSDELETELOCALPARTITION(struct ndr_push *ndr, int flags, const struct srvsvc_NETRDFSDELETELOCALPARTITION *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NETRDFSDELETELOCALPARTITION(struct ndr_pull *ndr, int flags, struct srvsvc_NETRDFSDELETELOCALPARTITION *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NETRDFSDELETELOCALPARTITION(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NETRDFSDELETELOCALPARTITION *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NETRDFSDELETELOCALPARTITION");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NETRDFSDELETELOCALPARTITION");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NETRDFSDELETELOCALPARTITION");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NETRDFSSETLOCALVOLUMESTATE(struct ndr_push *ndr, int flags, const struct srvsvc_NETRDFSSETLOCALVOLUMESTATE *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NETRDFSSETLOCALVOLUMESTATE(struct ndr_pull *ndr, int flags, struct srvsvc_NETRDFSSETLOCALVOLUMESTATE *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NETRDFSSETLOCALVOLUMESTATE(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NETRDFSSETLOCALVOLUMESTATE *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NETRDFSSETLOCALVOLUMESTATE");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NETRDFSSETLOCALVOLUMESTATE");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NETRDFSSETLOCALVOLUMESTATE");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NETRDFSSETSERVERINFO(struct ndr_push *ndr, int flags, const struct srvsvc_NETRDFSSETSERVERINFO *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NETRDFSSETSERVERINFO(struct ndr_pull *ndr, int flags, struct srvsvc_NETRDFSSETSERVERINFO *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NETRDFSSETSERVERINFO(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NETRDFSSETSERVERINFO *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NETRDFSSETSERVERINFO");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NETRDFSSETSERVERINFO");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NETRDFSSETSERVERINFO");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NETRDFSCREATEEXITPOINT(struct ndr_push *ndr, int flags, const struct srvsvc_NETRDFSCREATEEXITPOINT *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NETRDFSCREATEEXITPOINT(struct ndr_pull *ndr, int flags, struct srvsvc_NETRDFSCREATEEXITPOINT *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NETRDFSCREATEEXITPOINT(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NETRDFSCREATEEXITPOINT *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NETRDFSCREATEEXITPOINT");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NETRDFSCREATEEXITPOINT");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NETRDFSCREATEEXITPOINT");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NETRDFSDELETEEXITPOINT(struct ndr_push *ndr, int flags, const struct srvsvc_NETRDFSDELETEEXITPOINT *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NETRDFSDELETEEXITPOINT(struct ndr_pull *ndr, int flags, struct srvsvc_NETRDFSDELETEEXITPOINT *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NETRDFSDELETEEXITPOINT(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NETRDFSDELETEEXITPOINT *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NETRDFSDELETEEXITPOINT");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NETRDFSDELETEEXITPOINT");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NETRDFSDELETEEXITPOINT");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NETRDFSMODIFYPREFIX(struct ndr_push *ndr, int flags, const struct srvsvc_NETRDFSMODIFYPREFIX *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NETRDFSMODIFYPREFIX(struct ndr_pull *ndr, int flags, struct srvsvc_NETRDFSMODIFYPREFIX *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NETRDFSMODIFYPREFIX(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NETRDFSMODIFYPREFIX *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NETRDFSMODIFYPREFIX");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NETRDFSMODIFYPREFIX");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NETRDFSMODIFYPREFIX");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NETRDFSFIXLOCALVOLUME(struct ndr_push *ndr, int flags, const struct srvsvc_NETRDFSFIXLOCALVOLUME *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NETRDFSFIXLOCALVOLUME(struct ndr_pull *ndr, int flags, struct srvsvc_NETRDFSFIXLOCALVOLUME *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NETRDFSFIXLOCALVOLUME(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NETRDFSFIXLOCALVOLUME *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NETRDFSFIXLOCALVOLUME");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NETRDFSFIXLOCALVOLUME");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NETRDFSFIXLOCALVOLUME");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NETRDFSMANAGERREPORTSITEINFO(struct ndr_push *ndr, int flags, const struct srvsvc_NETRDFSMANAGERREPORTSITEINFO *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NETRDFSMANAGERREPORTSITEINFO(struct ndr_pull *ndr, int flags, struct srvsvc_NETRDFSMANAGERREPORTSITEINFO *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NETRDFSMANAGERREPORTSITEINFO(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NETRDFSMANAGERREPORTSITEINFO *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NETRDFSMANAGERREPORTSITEINFO");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NETRDFSMANAGERREPORTSITEINFO");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NETRDFSMANAGERREPORTSITEINFO");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_srvsvc_NETRSERVERTRANSPORTDELEX(struct ndr_push *ndr, int flags, const struct srvsvc_NETRSERVERTRANSPORTDELEX *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_srvsvc_NETRSERVERTRANSPORTDELEX(struct ndr_pull *ndr, int flags, struct srvsvc_NETRSERVERTRANSPORTDELEX *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_srvsvc_NETRSERVERTRANSPORTDELEX(struct ndr_print *ndr, const char *name, int flags, const struct srvsvc_NETRSERVERTRANSPORTDELEX *r)
-{
-	ndr_print_struct(ndr, name, "srvsvc_NETRSERVERTRANSPORTDELEX");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "srvsvc_NETRSERVERTRANSPORTDELEX");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "srvsvc_NETRSERVERTRANSPORTDELEX");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static const struct ndr_interface_call srvsvc_calls[] = {
-	{
-		"srvsvc_NetCharDevEnum",
-		sizeof(struct srvsvc_NetCharDevEnum),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetCharDevEnum,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetCharDevEnum,
-		(ndr_print_function_t) ndr_print_srvsvc_NetCharDevEnum,
-		false,
-	},
-	{
-		"srvsvc_NetCharDevGetInfo",
-		sizeof(struct srvsvc_NetCharDevGetInfo),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetCharDevGetInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetCharDevGetInfo,
-		(ndr_print_function_t) ndr_print_srvsvc_NetCharDevGetInfo,
-		false,
-	},
-	{
-		"srvsvc_NetCharDevControl",
-		sizeof(struct srvsvc_NetCharDevControl),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetCharDevControl,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetCharDevControl,
-		(ndr_print_function_t) ndr_print_srvsvc_NetCharDevControl,
-		false,
-	},
-	{
-		"srvsvc_NetCharDevQEnum",
-		sizeof(struct srvsvc_NetCharDevQEnum),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetCharDevQEnum,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetCharDevQEnum,
-		(ndr_print_function_t) ndr_print_srvsvc_NetCharDevQEnum,
-		false,
-	},
-	{
-		"srvsvc_NetCharDevQGetInfo",
-		sizeof(struct srvsvc_NetCharDevQGetInfo),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetCharDevQGetInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetCharDevQGetInfo,
-		(ndr_print_function_t) ndr_print_srvsvc_NetCharDevQGetInfo,
-		false,
-	},
-	{
-		"srvsvc_NetCharDevQSetInfo",
-		sizeof(struct srvsvc_NetCharDevQSetInfo),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetCharDevQSetInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetCharDevQSetInfo,
-		(ndr_print_function_t) ndr_print_srvsvc_NetCharDevQSetInfo,
-		false,
-	},
-	{
-		"srvsvc_NetCharDevQPurge",
-		sizeof(struct srvsvc_NetCharDevQPurge),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetCharDevQPurge,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetCharDevQPurge,
-		(ndr_print_function_t) ndr_print_srvsvc_NetCharDevQPurge,
-		false,
-	},
-	{
-		"srvsvc_NetCharDevQPurgeSelf",
-		sizeof(struct srvsvc_NetCharDevQPurgeSelf),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetCharDevQPurgeSelf,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetCharDevQPurgeSelf,
-		(ndr_print_function_t) ndr_print_srvsvc_NetCharDevQPurgeSelf,
-		false,
-	},
-	{
-		"srvsvc_NetConnEnum",
-		sizeof(struct srvsvc_NetConnEnum),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetConnEnum,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetConnEnum,
-		(ndr_print_function_t) ndr_print_srvsvc_NetConnEnum,
-		false,
-	},
-	{
-		"srvsvc_NetFileEnum",
-		sizeof(struct srvsvc_NetFileEnum),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetFileEnum,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetFileEnum,
-		(ndr_print_function_t) ndr_print_srvsvc_NetFileEnum,
-		false,
-	},
-	{
-		"srvsvc_NetFileGetInfo",
-		sizeof(struct srvsvc_NetFileGetInfo),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetFileGetInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetFileGetInfo,
-		(ndr_print_function_t) ndr_print_srvsvc_NetFileGetInfo,
-		false,
-	},
-	{
-		"srvsvc_NetFileClose",
-		sizeof(struct srvsvc_NetFileClose),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetFileClose,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetFileClose,
-		(ndr_print_function_t) ndr_print_srvsvc_NetFileClose,
-		false,
-	},
-	{
-		"srvsvc_NetSessEnum",
-		sizeof(struct srvsvc_NetSessEnum),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetSessEnum,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetSessEnum,
-		(ndr_print_function_t) ndr_print_srvsvc_NetSessEnum,
-		false,
-	},
-	{
-		"srvsvc_NetSessDel",
-		sizeof(struct srvsvc_NetSessDel),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetSessDel,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetSessDel,
-		(ndr_print_function_t) ndr_print_srvsvc_NetSessDel,
-		false,
-	},
-	{
-		"srvsvc_NetShareAdd",
-		sizeof(struct srvsvc_NetShareAdd),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetShareAdd,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetShareAdd,
-		(ndr_print_function_t) ndr_print_srvsvc_NetShareAdd,
-		false,
-	},
-	{
-		"srvsvc_NetShareEnumAll",
-		sizeof(struct srvsvc_NetShareEnumAll),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetShareEnumAll,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetShareEnumAll,
-		(ndr_print_function_t) ndr_print_srvsvc_NetShareEnumAll,
-		false,
-	},
-	{
-		"srvsvc_NetShareGetInfo",
-		sizeof(struct srvsvc_NetShareGetInfo),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetShareGetInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetShareGetInfo,
-		(ndr_print_function_t) ndr_print_srvsvc_NetShareGetInfo,
-		false,
-	},
-	{
-		"srvsvc_NetShareSetInfo",
-		sizeof(struct srvsvc_NetShareSetInfo),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetShareSetInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetShareSetInfo,
-		(ndr_print_function_t) ndr_print_srvsvc_NetShareSetInfo,
-		false,
-	},
-	{
-		"srvsvc_NetShareDel",
-		sizeof(struct srvsvc_NetShareDel),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetShareDel,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetShareDel,
-		(ndr_print_function_t) ndr_print_srvsvc_NetShareDel,
-		false,
-	},
-	{
-		"srvsvc_NetShareDelSticky",
-		sizeof(struct srvsvc_NetShareDelSticky),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetShareDelSticky,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetShareDelSticky,
-		(ndr_print_function_t) ndr_print_srvsvc_NetShareDelSticky,
-		false,
-	},
-	{
-		"srvsvc_NetShareCheck",
-		sizeof(struct srvsvc_NetShareCheck),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetShareCheck,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetShareCheck,
-		(ndr_print_function_t) ndr_print_srvsvc_NetShareCheck,
-		false,
-	},
-	{
-		"srvsvc_NetSrvGetInfo",
-		sizeof(struct srvsvc_NetSrvGetInfo),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetSrvGetInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetSrvGetInfo,
-		(ndr_print_function_t) ndr_print_srvsvc_NetSrvGetInfo,
-		false,
-	},
-	{
-		"srvsvc_NetSrvSetInfo",
-		sizeof(struct srvsvc_NetSrvSetInfo),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetSrvSetInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetSrvSetInfo,
-		(ndr_print_function_t) ndr_print_srvsvc_NetSrvSetInfo,
-		false,
-	},
-	{
-		"srvsvc_NetDiskEnum",
-		sizeof(struct srvsvc_NetDiskEnum),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetDiskEnum,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetDiskEnum,
-		(ndr_print_function_t) ndr_print_srvsvc_NetDiskEnum,
-		false,
-	},
-	{
-		"srvsvc_NetServerStatisticsGet",
-		sizeof(struct srvsvc_NetServerStatisticsGet),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetServerStatisticsGet,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetServerStatisticsGet,
-		(ndr_print_function_t) ndr_print_srvsvc_NetServerStatisticsGet,
-		false,
-	},
-	{
-		"srvsvc_NetTransportAdd",
-		sizeof(struct srvsvc_NetTransportAdd),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetTransportAdd,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetTransportAdd,
-		(ndr_print_function_t) ndr_print_srvsvc_NetTransportAdd,
-		false,
-	},
-	{
-		"srvsvc_NetTransportEnum",
-		sizeof(struct srvsvc_NetTransportEnum),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetTransportEnum,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetTransportEnum,
-		(ndr_print_function_t) ndr_print_srvsvc_NetTransportEnum,
-		false,
-	},
-	{
-		"srvsvc_NetTransportDel",
-		sizeof(struct srvsvc_NetTransportDel),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetTransportDel,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetTransportDel,
-		(ndr_print_function_t) ndr_print_srvsvc_NetTransportDel,
-		false,
-	},
-	{
-		"srvsvc_NetRemoteTOD",
-		sizeof(struct srvsvc_NetRemoteTOD),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetRemoteTOD,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetRemoteTOD,
-		(ndr_print_function_t) ndr_print_srvsvc_NetRemoteTOD,
-		false,
-	},
-	{
-		"srvsvc_NetSetServiceBits",
-		sizeof(struct srvsvc_NetSetServiceBits),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetSetServiceBits,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetSetServiceBits,
-		(ndr_print_function_t) ndr_print_srvsvc_NetSetServiceBits,
-		false,
-	},
-	{
-		"srvsvc_NetPathType",
-		sizeof(struct srvsvc_NetPathType),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetPathType,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetPathType,
-		(ndr_print_function_t) ndr_print_srvsvc_NetPathType,
-		false,
-	},
-	{
-		"srvsvc_NetPathCanonicalize",
-		sizeof(struct srvsvc_NetPathCanonicalize),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetPathCanonicalize,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetPathCanonicalize,
-		(ndr_print_function_t) ndr_print_srvsvc_NetPathCanonicalize,
-		false,
-	},
-	{
-		"srvsvc_NetPathCompare",
-		sizeof(struct srvsvc_NetPathCompare),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetPathCompare,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetPathCompare,
-		(ndr_print_function_t) ndr_print_srvsvc_NetPathCompare,
-		false,
-	},
-	{
-		"srvsvc_NetNameValidate",
-		sizeof(struct srvsvc_NetNameValidate),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetNameValidate,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetNameValidate,
-		(ndr_print_function_t) ndr_print_srvsvc_NetNameValidate,
-		false,
-	},
-	{
-		"srvsvc_NETRPRNAMECANONICALIZE",
-		sizeof(struct srvsvc_NETRPRNAMECANONICALIZE),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NETRPRNAMECANONICALIZE,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NETRPRNAMECANONICALIZE,
-		(ndr_print_function_t) ndr_print_srvsvc_NETRPRNAMECANONICALIZE,
-		false,
-	},
-	{
-		"srvsvc_NetPRNameCompare",
-		sizeof(struct srvsvc_NetPRNameCompare),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetPRNameCompare,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetPRNameCompare,
-		(ndr_print_function_t) ndr_print_srvsvc_NetPRNameCompare,
-		false,
-	},
-	{
-		"srvsvc_NetShareEnum",
-		sizeof(struct srvsvc_NetShareEnum),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetShareEnum,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetShareEnum,
-		(ndr_print_function_t) ndr_print_srvsvc_NetShareEnum,
-		false,
-	},
-	{
-		"srvsvc_NetShareDelStart",
-		sizeof(struct srvsvc_NetShareDelStart),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetShareDelStart,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetShareDelStart,
-		(ndr_print_function_t) ndr_print_srvsvc_NetShareDelStart,
-		false,
-	},
-	{
-		"srvsvc_NetShareDelCommit",
-		sizeof(struct srvsvc_NetShareDelCommit),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetShareDelCommit,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetShareDelCommit,
-		(ndr_print_function_t) ndr_print_srvsvc_NetShareDelCommit,
-		false,
-	},
-	{
-		"srvsvc_NetGetFileSecurity",
-		sizeof(struct srvsvc_NetGetFileSecurity),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetGetFileSecurity,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetGetFileSecurity,
-		(ndr_print_function_t) ndr_print_srvsvc_NetGetFileSecurity,
-		false,
-	},
-	{
-		"srvsvc_NetSetFileSecurity",
-		sizeof(struct srvsvc_NetSetFileSecurity),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetSetFileSecurity,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetSetFileSecurity,
-		(ndr_print_function_t) ndr_print_srvsvc_NetSetFileSecurity,
-		false,
-	},
-	{
-		"srvsvc_NetServerTransportAddEx",
-		sizeof(struct srvsvc_NetServerTransportAddEx),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetServerTransportAddEx,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetServerTransportAddEx,
-		(ndr_print_function_t) ndr_print_srvsvc_NetServerTransportAddEx,
-		false,
-	},
-	{
-		"srvsvc_NetServerSetServiceBitsEx",
-		sizeof(struct srvsvc_NetServerSetServiceBitsEx),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NetServerSetServiceBitsEx,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NetServerSetServiceBitsEx,
-		(ndr_print_function_t) ndr_print_srvsvc_NetServerSetServiceBitsEx,
-		false,
-	},
-	{
-		"srvsvc_NETRDFSGETVERSION",
-		sizeof(struct srvsvc_NETRDFSGETVERSION),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NETRDFSGETVERSION,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NETRDFSGETVERSION,
-		(ndr_print_function_t) ndr_print_srvsvc_NETRDFSGETVERSION,
-		false,
-	},
-	{
-		"srvsvc_NETRDFSCREATELOCALPARTITION",
-		sizeof(struct srvsvc_NETRDFSCREATELOCALPARTITION),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NETRDFSCREATELOCALPARTITION,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NETRDFSCREATELOCALPARTITION,
-		(ndr_print_function_t) ndr_print_srvsvc_NETRDFSCREATELOCALPARTITION,
-		false,
-	},
-	{
-		"srvsvc_NETRDFSDELETELOCALPARTITION",
-		sizeof(struct srvsvc_NETRDFSDELETELOCALPARTITION),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NETRDFSDELETELOCALPARTITION,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NETRDFSDELETELOCALPARTITION,
-		(ndr_print_function_t) ndr_print_srvsvc_NETRDFSDELETELOCALPARTITION,
-		false,
-	},
-	{
-		"srvsvc_NETRDFSSETLOCALVOLUMESTATE",
-		sizeof(struct srvsvc_NETRDFSSETLOCALVOLUMESTATE),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NETRDFSSETLOCALVOLUMESTATE,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NETRDFSSETLOCALVOLUMESTATE,
-		(ndr_print_function_t) ndr_print_srvsvc_NETRDFSSETLOCALVOLUMESTATE,
-		false,
-	},
-	{
-		"srvsvc_NETRDFSSETSERVERINFO",
-		sizeof(struct srvsvc_NETRDFSSETSERVERINFO),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NETRDFSSETSERVERINFO,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NETRDFSSETSERVERINFO,
-		(ndr_print_function_t) ndr_print_srvsvc_NETRDFSSETSERVERINFO,
-		false,
-	},
-	{
-		"srvsvc_NETRDFSCREATEEXITPOINT",
-		sizeof(struct srvsvc_NETRDFSCREATEEXITPOINT),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NETRDFSCREATEEXITPOINT,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NETRDFSCREATEEXITPOINT,
-		(ndr_print_function_t) ndr_print_srvsvc_NETRDFSCREATEEXITPOINT,
-		false,
-	},
-	{
-		"srvsvc_NETRDFSDELETEEXITPOINT",
-		sizeof(struct srvsvc_NETRDFSDELETEEXITPOINT),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NETRDFSDELETEEXITPOINT,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NETRDFSDELETEEXITPOINT,
-		(ndr_print_function_t) ndr_print_srvsvc_NETRDFSDELETEEXITPOINT,
-		false,
-	},
-	{
-		"srvsvc_NETRDFSMODIFYPREFIX",
-		sizeof(struct srvsvc_NETRDFSMODIFYPREFIX),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NETRDFSMODIFYPREFIX,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NETRDFSMODIFYPREFIX,
-		(ndr_print_function_t) ndr_print_srvsvc_NETRDFSMODIFYPREFIX,
-		false,
-	},
-	{
-		"srvsvc_NETRDFSFIXLOCALVOLUME",
-		sizeof(struct srvsvc_NETRDFSFIXLOCALVOLUME),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NETRDFSFIXLOCALVOLUME,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NETRDFSFIXLOCALVOLUME,
-		(ndr_print_function_t) ndr_print_srvsvc_NETRDFSFIXLOCALVOLUME,
-		false,
-	},
-	{
-		"srvsvc_NETRDFSMANAGERREPORTSITEINFO",
-		sizeof(struct srvsvc_NETRDFSMANAGERREPORTSITEINFO),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NETRDFSMANAGERREPORTSITEINFO,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NETRDFSMANAGERREPORTSITEINFO,
-		(ndr_print_function_t) ndr_print_srvsvc_NETRDFSMANAGERREPORTSITEINFO,
-		false,
-	},
-	{
-		"srvsvc_NETRSERVERTRANSPORTDELEX",
-		sizeof(struct srvsvc_NETRSERVERTRANSPORTDELEX),
-		(ndr_push_flags_fn_t) ndr_push_srvsvc_NETRSERVERTRANSPORTDELEX,
-		(ndr_pull_flags_fn_t) ndr_pull_srvsvc_NETRSERVERTRANSPORTDELEX,
-		(ndr_print_function_t) ndr_print_srvsvc_NETRSERVERTRANSPORTDELEX,
-		false,
-	},
-	{ NULL, 0, NULL, NULL, NULL, false }
-};
-
-static const char * const srvsvc_endpoint_strings[] = {
-	"ncacn_np:[\\pipe\\srvsvc]", 
-	"ncacn_ip_tcp:", 
-	"ncalrpc:", 
-};
-
-static const struct ndr_interface_string_array srvsvc_endpoints = {
-	.count	= 3,
-	.names	= srvsvc_endpoint_strings
-};
-
-static const char * const srvsvc_authservice_strings[] = {
-	"host", 
-};
-
-static const struct ndr_interface_string_array srvsvc_authservices = {
-	.count	= 1,
-	.names	= srvsvc_authservice_strings
-};
-
-
-const struct ndr_interface_table ndr_table_srvsvc = {
-	.name		= "srvsvc",
-	.syntax_id	= {
-		{0x4b324fc8,0x1670,0x01d3,{0x12,0x78},{0x5a,0x47,0xbf,0x6e,0xe1,0x88}},
-		NDR_SRVSVC_VERSION
-	},
-	.helpstring	= NDR_SRVSVC_HELPSTRING,
-	.num_calls	= 54,
-	.calls		= srvsvc_calls,
-	.endpoints	= &srvsvc_endpoints,
-	.authservices	= &srvsvc_authservices
-};
-

Modified: branches/samba/upstream/source/librpc/gen_ndr/ndr_srvsvc.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_srvsvc.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_srvsvc.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,125 +1,126 @@
 /* header auto-generated by pidl */
 
-#include "librpc/ndr/libndr.h"
 #include "librpc/gen_ndr/srvsvc.h"
 
 #ifndef _HEADER_NDR_srvsvc
 #define _HEADER_NDR_srvsvc
 
-#define NDR_SRVSVC_UUID "4b324fc8-1670-01d3-1278-5a47bf6ee188"
-#define NDR_SRVSVC_VERSION 3.0
-#define NDR_SRVSVC_NAME "srvsvc"
-#define NDR_SRVSVC_HELPSTRING "Server Service"
-extern const struct ndr_interface_table ndr_table_srvsvc;
-#define NDR_SRVSVC_NETCHARDEVENUM (0x00)
+#include "librpc/ndr/libndr.h"
+#define DCERPC_SRVSVC_UUID "4b324fc8-1670-01d3-1278-5a47bf6ee188"
+#define DCERPC_SRVSVC_VERSION 3.0
+#define DCERPC_SRVSVC_NAME "srvsvc"
+#define DCERPC_SRVSVC_HELPSTRING "Server Service"
+extern const struct dcerpc_interface_table dcerpc_table_srvsvc;
+NTSTATUS dcerpc_server_srvsvc_init(void);
+#define DCERPC_SRVSVC_NETCHARDEVENUM (0x00)
 
-#define NDR_SRVSVC_NETCHARDEVGETINFO (0x01)
+#define DCERPC_SRVSVC_NETCHARDEVGETINFO (0x01)
 
-#define NDR_SRVSVC_NETCHARDEVCONTROL (0x02)
+#define DCERPC_SRVSVC_NETCHARDEVCONTROL (0x02)
 
-#define NDR_SRVSVC_NETCHARDEVQENUM (0x03)
+#define DCERPC_SRVSVC_NETCHARDEVQENUM (0x03)
 
-#define NDR_SRVSVC_NETCHARDEVQGETINFO (0x04)
+#define DCERPC_SRVSVC_NETCHARDEVQGETINFO (0x04)
 
-#define NDR_SRVSVC_NETCHARDEVQSETINFO (0x05)
+#define DCERPC_SRVSVC_NETCHARDEVQSETINFO (0x05)
 
-#define NDR_SRVSVC_NETCHARDEVQPURGE (0x06)
+#define DCERPC_SRVSVC_NETCHARDEVQPURGE (0x06)
 
-#define NDR_SRVSVC_NETCHARDEVQPURGESELF (0x07)
+#define DCERPC_SRVSVC_NETCHARDEVQPURGESELF (0x07)
 
-#define NDR_SRVSVC_NETCONNENUM (0x08)
+#define DCERPC_SRVSVC_NETCONNENUM (0x08)
 
-#define NDR_SRVSVC_NETFILEENUM (0x09)
+#define DCERPC_SRVSVC_NETFILEENUM (0x09)
 
-#define NDR_SRVSVC_NETFILEGETINFO (0x0a)
+#define DCERPC_SRVSVC_NETFILEGETINFO (0x0a)
 
-#define NDR_SRVSVC_NETFILECLOSE (0x0b)
+#define DCERPC_SRVSVC_NETFILECLOSE (0x0b)
 
-#define NDR_SRVSVC_NETSESSENUM (0x0c)
+#define DCERPC_SRVSVC_NETSESSENUM (0x0c)
 
-#define NDR_SRVSVC_NETSESSDEL (0x0d)
+#define DCERPC_SRVSVC_NETSESSDEL (0x0d)
 
-#define NDR_SRVSVC_NETSHAREADD (0x0e)
+#define DCERPC_SRVSVC_NETSHAREADD (0x0e)
 
-#define NDR_SRVSVC_NETSHAREENUMALL (0x0f)
+#define DCERPC_SRVSVC_NETSHAREENUMALL (0x0f)
 
-#define NDR_SRVSVC_NETSHAREGETINFO (0x10)
+#define DCERPC_SRVSVC_NETSHAREGETINFO (0x10)
 
-#define NDR_SRVSVC_NETSHARESETINFO (0x11)
+#define DCERPC_SRVSVC_NETSHARESETINFO (0x11)
 
-#define NDR_SRVSVC_NETSHAREDEL (0x12)
+#define DCERPC_SRVSVC_NETSHAREDEL (0x12)
 
-#define NDR_SRVSVC_NETSHAREDELSTICKY (0x13)
+#define DCERPC_SRVSVC_NETSHAREDELSTICKY (0x13)
 
-#define NDR_SRVSVC_NETSHARECHECK (0x14)
+#define DCERPC_SRVSVC_NETSHARECHECK (0x14)
 
-#define NDR_SRVSVC_NETSRVGETINFO (0x15)
+#define DCERPC_SRVSVC_NETSRVGETINFO (0x15)
 
-#define NDR_SRVSVC_NETSRVSETINFO (0x16)
+#define DCERPC_SRVSVC_NETSRVSETINFO (0x16)
 
-#define NDR_SRVSVC_NETDISKENUM (0x17)
+#define DCERPC_SRVSVC_NETDISKENUM (0x17)
 
-#define NDR_SRVSVC_NETSERVERSTATISTICSGET (0x18)
+#define DCERPC_SRVSVC_NETSERVERSTATISTICSGET (0x18)
 
-#define NDR_SRVSVC_NETTRANSPORTADD (0x19)
+#define DCERPC_SRVSVC_NETTRANSPORTADD (0x19)
 
-#define NDR_SRVSVC_NETTRANSPORTENUM (0x1a)
+#define DCERPC_SRVSVC_NETTRANSPORTENUM (0x1a)
 
-#define NDR_SRVSVC_NETTRANSPORTDEL (0x1b)
+#define DCERPC_SRVSVC_NETTRANSPORTDEL (0x1b)
 
-#define NDR_SRVSVC_NETREMOTETOD (0x1c)
+#define DCERPC_SRVSVC_NETREMOTETOD (0x1c)
 
-#define NDR_SRVSVC_NETSETSERVICEBITS (0x1d)
+#define DCERPC_SRVSVC_NETSETSERVICEBITS (0x1d)
 
-#define NDR_SRVSVC_NETPATHTYPE (0x1e)
+#define DCERPC_SRVSVC_NETPATHTYPE (0x1e)
 
-#define NDR_SRVSVC_NETPATHCANONICALIZE (0x1f)
+#define DCERPC_SRVSVC_NETPATHCANONICALIZE (0x1f)
 
-#define NDR_SRVSVC_NETPATHCOMPARE (0x20)
+#define DCERPC_SRVSVC_NETPATHCOMPARE (0x20)
 
-#define NDR_SRVSVC_NETNAMEVALIDATE (0x21)
+#define DCERPC_SRVSVC_NETNAMEVALIDATE (0x21)
 
-#define NDR_SRVSVC_NETRPRNAMECANONICALIZE (0x22)
+#define DCERPC_SRVSVC_NETRPRNAMECANONICALIZE (0x22)
 
-#define NDR_SRVSVC_NETPRNAMECOMPARE (0x23)
+#define DCERPC_SRVSVC_NETPRNAMECOMPARE (0x23)
 
-#define NDR_SRVSVC_NETSHAREENUM (0x24)
+#define DCERPC_SRVSVC_NETSHAREENUM (0x24)
 
-#define NDR_SRVSVC_NETSHAREDELSTART (0x25)
+#define DCERPC_SRVSVC_NETSHAREDELSTART (0x25)
 
-#define NDR_SRVSVC_NETSHAREDELCOMMIT (0x26)
+#define DCERPC_SRVSVC_NETSHAREDELCOMMIT (0x26)
 
-#define NDR_SRVSVC_NETGETFILESECURITY (0x27)
+#define DCERPC_SRVSVC_NETGETFILESECURITY (0x27)
 
-#define NDR_SRVSVC_NETSETFILESECURITY (0x28)
+#define DCERPC_SRVSVC_NETSETFILESECURITY (0x28)
 
-#define NDR_SRVSVC_NETSERVERTRANSPORTADDEX (0x29)
+#define DCERPC_SRVSVC_NETSERVERTRANSPORTADDEX (0x29)
 
-#define NDR_SRVSVC_NETSERVERSETSERVICEBITSEX (0x2a)
+#define DCERPC_SRVSVC_NETSERVERSETSERVICEBITSEX (0x2a)
 
-#define NDR_SRVSVC_NETRDFSGETVERSION (0x2b)
+#define DCERPC_SRVSVC_NETRDFSGETVERSION (0x2b)
 
-#define NDR_SRVSVC_NETRDFSCREATELOCALPARTITION (0x2c)
+#define DCERPC_SRVSVC_NETRDFSCREATELOCALPARTITION (0x2c)
 
-#define NDR_SRVSVC_NETRDFSDELETELOCALPARTITION (0x2d)
+#define DCERPC_SRVSVC_NETRDFSDELETELOCALPARTITION (0x2d)
 
-#define NDR_SRVSVC_NETRDFSSETLOCALVOLUMESTATE (0x2e)
+#define DCERPC_SRVSVC_NETRDFSSETLOCALVOLUMESTATE (0x2e)
 
-#define NDR_SRVSVC_NETRDFSSETSERVERINFO (0x2f)
+#define DCERPC_SRVSVC_NETRDFSSETSERVERINFO (0x2f)
 
-#define NDR_SRVSVC_NETRDFSCREATEEXITPOINT (0x30)
+#define DCERPC_SRVSVC_NETRDFSCREATEEXITPOINT (0x30)
 
-#define NDR_SRVSVC_NETRDFSDELETEEXITPOINT (0x31)
+#define DCERPC_SRVSVC_NETRDFSDELETEEXITPOINT (0x31)
 
-#define NDR_SRVSVC_NETRDFSMODIFYPREFIX (0x32)
+#define DCERPC_SRVSVC_NETRDFSMODIFYPREFIX (0x32)
 
-#define NDR_SRVSVC_NETRDFSFIXLOCALVOLUME (0x33)
+#define DCERPC_SRVSVC_NETRDFSFIXLOCALVOLUME (0x33)
 
-#define NDR_SRVSVC_NETRDFSMANAGERREPORTSITEINFO (0x34)
+#define DCERPC_SRVSVC_NETRDFSMANAGERREPORTSITEINFO (0x34)
 
-#define NDR_SRVSVC_NETRSERVERTRANSPORTDELEX (0x35)
+#define DCERPC_SRVSVC_NETRSERVERTRANSPORTDELEX (0x35)
 
-#define NDR_SRVSVC_CALL_COUNT (54)
+#define DCERPC_SRVSVC_CALL_COUNT (54)
 void ndr_print_srvsvc_NetCharDevInfo0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetCharDevInfo0 *r);
 void ndr_print_srvsvc_NetCharDevCtr0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetCharDevCtr0 *r);
 void ndr_print_srvsvc_NetCharDevInfo1(struct ndr_print *ndr, const char *name, const struct srvsvc_NetCharDevInfo1 *r);
@@ -137,14 +138,12 @@
 void ndr_print_srvsvc_NetConnInfo1(struct ndr_print *ndr, const char *name, const struct srvsvc_NetConnInfo1 *r);
 void ndr_print_srvsvc_NetConnCtr1(struct ndr_print *ndr, const char *name, const struct srvsvc_NetConnCtr1 *r);
 void ndr_print_srvsvc_NetConnCtr(struct ndr_print *ndr, const char *name, const union srvsvc_NetConnCtr *r);
-void ndr_print_srvsvc_NetConnInfoCtr(struct ndr_print *ndr, const char *name, const struct srvsvc_NetConnInfoCtr *r);
 void ndr_print_srvsvc_NetFileInfo2(struct ndr_print *ndr, const char *name, const struct srvsvc_NetFileInfo2 *r);
 void ndr_print_srvsvc_NetFileCtr2(struct ndr_print *ndr, const char *name, const struct srvsvc_NetFileCtr2 *r);
 void ndr_print_srvsvc_NetFileInfo3(struct ndr_print *ndr, const char *name, const struct srvsvc_NetFileInfo3 *r);
 void ndr_print_srvsvc_NetFileCtr3(struct ndr_print *ndr, const char *name, const struct srvsvc_NetFileCtr3 *r);
 void ndr_print_srvsvc_NetFileInfo(struct ndr_print *ndr, const char *name, const union srvsvc_NetFileInfo *r);
 void ndr_print_srvsvc_NetFileCtr(struct ndr_print *ndr, const char *name, const union srvsvc_NetFileCtr *r);
-void ndr_print_srvsvc_NetFileInfoCtr(struct ndr_print *ndr, const char *name, const struct srvsvc_NetFileInfoCtr *r);
 void ndr_print_srvsvc_NetSessInfo0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSessInfo0 *r);
 void ndr_print_srvsvc_NetSessCtr0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSessCtr0 *r);
 void ndr_print_srvsvc_NetSessInfo1(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSessInfo1 *r);
@@ -156,7 +155,6 @@
 void ndr_print_srvsvc_NetSessInfo502(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSessInfo502 *r);
 void ndr_print_srvsvc_NetSessCtr502(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSessCtr502 *r);
 void ndr_print_srvsvc_NetSessCtr(struct ndr_print *ndr, const char *name, const union srvsvc_NetSessCtr *r);
-void ndr_print_srvsvc_NetSessInfoCtr(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSessInfoCtr *r);
 void ndr_print_srvsvc_ShareType(struct ndr_print *ndr, const char *name, enum srvsvc_ShareType r);
 void ndr_print_srvsvc_NetShareInfo0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareInfo0 *r);
 void ndr_print_srvsvc_NetShareCtr0(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareCtr0 *r);
@@ -180,9 +178,8 @@
 void ndr_print_srvsvc_NetShareCtr1501(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareCtr1501 *r);
 void ndr_print_srvsvc_NetShareInfo(struct ndr_print *ndr, const char *name, const union srvsvc_NetShareInfo *r);
 void ndr_print_srvsvc_NetShareCtr(struct ndr_print *ndr, const char *name, const union srvsvc_NetShareCtr *r);
-void ndr_print_srvsvc_NetShareInfoCtr(struct ndr_print *ndr, const char *name, const struct srvsvc_NetShareInfoCtr *r);
-enum ndr_err_code ndr_push_srvsvc_PlatformId(struct ndr_push *ndr, int ndr_flags, enum srvsvc_PlatformId r);
-enum ndr_err_code ndr_pull_srvsvc_PlatformId(struct ndr_pull *ndr, int ndr_flags, enum srvsvc_PlatformId *r);
+NTSTATUS ndr_push_srvsvc_PlatformId(struct ndr_push *ndr, int ndr_flags, enum srvsvc_PlatformId r);
+NTSTATUS ndr_pull_srvsvc_PlatformId(struct ndr_pull *ndr, int ndr_flags, enum srvsvc_PlatformId *r);
 void ndr_print_srvsvc_PlatformId(struct ndr_print *ndr, const char *name, enum srvsvc_PlatformId r);
 void ndr_print_srvsvc_NetSrvInfo100(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo100 *r);
 void ndr_print_srvsvc_NetSrvInfo101(struct ndr_print *ndr, const char *name, const struct srvsvc_NetSrvInfo101 *r);

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_svcctl.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_svcctl.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_svcctl.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,6018 +0,0 @@
-/* parser auto-generated by pidl */
-
-#include "includes.h"
-#include "librpc/gen_ndr/ndr_svcctl.h"
-
-static enum ndr_err_code ndr_push_SERVICE_LOCK_STATUS(struct ndr_push *ndr, int ndr_flags, const struct SERVICE_LOCK_STATUS *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->is_locked));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->lock_owner));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->lock_duration));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->lock_owner) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->lock_owner, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->lock_owner, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->lock_owner, ndr_charset_length(r->lock_owner, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_SERVICE_LOCK_STATUS(struct ndr_pull *ndr, int ndr_flags, struct SERVICE_LOCK_STATUS *r)
-{
-	uint32_t _ptr_lock_owner;
-	TALLOC_CTX *_mem_save_lock_owner_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->is_locked));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_lock_owner));
-		if (_ptr_lock_owner) {
-			NDR_PULL_ALLOC(ndr, r->lock_owner);
-		} else {
-			r->lock_owner = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->lock_duration));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->lock_owner) {
-			_mem_save_lock_owner_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->lock_owner, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->lock_owner));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->lock_owner));
-			if (ndr_get_array_length(ndr, &r->lock_owner) > ndr_get_array_size(ndr, &r->lock_owner)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->lock_owner), ndr_get_array_length(ndr, &r->lock_owner));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->lock_owner), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->lock_owner, ndr_get_array_length(ndr, &r->lock_owner), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_lock_owner_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_SERVICE_LOCK_STATUS(struct ndr_print *ndr, const char *name, const struct SERVICE_LOCK_STATUS *r)
-{
-	ndr_print_struct(ndr, name, "SERVICE_LOCK_STATUS");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "is_locked", r->is_locked);
-	ndr_print_ptr(ndr, "lock_owner", r->lock_owner);
-	ndr->depth++;
-	if (r->lock_owner) {
-		ndr_print_string(ndr, "lock_owner", r->lock_owner);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "lock_duration", r->lock_duration);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_SERVICE_STATUS(struct ndr_push *ndr, int ndr_flags, const struct SERVICE_STATUS *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->state));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->controls_accepted));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->win32_exit_code));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->service_exit_code));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->check_point));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->wait_hint));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_SERVICE_STATUS(struct ndr_pull *ndr, int ndr_flags, struct SERVICE_STATUS *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->type));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->state));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->controls_accepted));
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->win32_exit_code));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->service_exit_code));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->check_point));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->wait_hint));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_SERVICE_STATUS(struct ndr_print *ndr, const char *name, const struct SERVICE_STATUS *r)
-{
-	ndr_print_struct(ndr, name, "SERVICE_STATUS");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "type", r->type);
-	ndr_print_uint32(ndr, "state", r->state);
-	ndr_print_uint32(ndr, "controls_accepted", r->controls_accepted);
-	ndr_print_WERROR(ndr, "win32_exit_code", r->win32_exit_code);
-	ndr_print_uint32(ndr, "service_exit_code", r->service_exit_code);
-	ndr_print_uint32(ndr, "check_point", r->check_point);
-	ndr_print_uint32(ndr, "wait_hint", r->wait_hint);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_ENUM_SERVICE_STATUS(struct ndr_push *ndr, int ndr_flags, const struct ENUM_SERVICE_STATUS *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_relative_ptr1(ndr, r->service_name));
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_relative_ptr1(ndr, r->display_name));
-			ndr->flags = _flags_save_string;
-		}
-		NDR_CHECK(ndr_push_SERVICE_STATUS(ndr, NDR_SCALARS, &r->status));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			if (r->service_name) {
-				NDR_CHECK(ndr_push_relative_ptr2(ndr, r->service_name));
-				NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->service_name));
-			}
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			if (r->display_name) {
-				NDR_CHECK(ndr_push_relative_ptr2(ndr, r->display_name));
-				NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->display_name));
-			}
-			ndr->flags = _flags_save_string;
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_ENUM_SERVICE_STATUS(struct ndr_pull *ndr, int ndr_flags, struct ENUM_SERVICE_STATUS *r)
-{
-	uint32_t _ptr_service_name;
-	TALLOC_CTX *_mem_save_service_name_0;
-	uint32_t _ptr_display_name;
-	TALLOC_CTX *_mem_save_display_name_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_service_name));
-			if (_ptr_service_name) {
-				NDR_PULL_ALLOC(ndr, r->service_name);
-				NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->service_name, _ptr_service_name));
-			} else {
-				r->service_name = NULL;
-			}
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_display_name));
-			if (_ptr_display_name) {
-				NDR_PULL_ALLOC(ndr, r->display_name);
-				NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->display_name, _ptr_display_name));
-			} else {
-				r->display_name = NULL;
-			}
-			ndr->flags = _flags_save_string;
-		}
-		NDR_CHECK(ndr_pull_SERVICE_STATUS(ndr, NDR_SCALARS, &r->status));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			if (r->service_name) {
-				uint32_t _relative_save_offset;
-				_relative_save_offset = ndr->offset;
-				NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->service_name));
-				_mem_save_service_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-				NDR_PULL_SET_MEM_CTX(ndr, r->service_name, 0);
-				NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->service_name));
-				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_service_name_0, 0);
-				ndr->offset = _relative_save_offset;
-			}
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM);
-			if (r->display_name) {
-				uint32_t _relative_save_offset;
-				_relative_save_offset = ndr->offset;
-				NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->display_name));
-				_mem_save_display_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-				NDR_PULL_SET_MEM_CTX(ndr, r->display_name, 0);
-				NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->display_name));
-				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_display_name_0, 0);
-				ndr->offset = _relative_save_offset;
-			}
-			ndr->flags = _flags_save_string;
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_ENUM_SERVICE_STATUS(struct ndr_print *ndr, const char *name, const struct ENUM_SERVICE_STATUS *r)
-{
-	ndr_print_struct(ndr, name, "ENUM_SERVICE_STATUS");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "service_name", r->service_name);
-	ndr->depth++;
-	if (r->service_name) {
-		ndr_print_string(ndr, "service_name", r->service_name);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "display_name", r->display_name);
-	ndr->depth++;
-	if (r->display_name) {
-		ndr_print_string(ndr, "display_name", r->display_name);
-	}
-	ndr->depth--;
-	ndr_print_SERVICE_STATUS(ndr, "status", &r->status);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_svcctl_ServerType(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_svcctl_ServerType(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_ServerType(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_WORKSTATION", SV_TYPE_WORKSTATION, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_SERVER", SV_TYPE_SERVER, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_SQLSERVER", SV_TYPE_SQLSERVER, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_DOMAIN_CTRL", SV_TYPE_DOMAIN_CTRL, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_DOMAIN_BAKCTRL", SV_TYPE_DOMAIN_BAKCTRL, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_TIME_SOURCE", SV_TYPE_TIME_SOURCE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_AFP", SV_TYPE_AFP, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_NOVELL", SV_TYPE_NOVELL, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_DOMAIN_MEMBER", SV_TYPE_DOMAIN_MEMBER, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_PRINTQ_SERVER", SV_TYPE_PRINTQ_SERVER, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_DIALIN_SERVER", SV_TYPE_DIALIN_SERVER, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_SERVER_UNIX", SV_TYPE_SERVER_UNIX, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_NT", SV_TYPE_NT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_WFW", SV_TYPE_WFW, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_SERVER_MFPN", SV_TYPE_SERVER_MFPN, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_SERVER_NT", SV_TYPE_SERVER_NT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_POTENTIAL_BROWSER", SV_TYPE_POTENTIAL_BROWSER, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_BACKUP_BROWSER", SV_TYPE_BACKUP_BROWSER, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_MASTER_BROWSER", SV_TYPE_MASTER_BROWSER, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_DOMAIN_MASTER", SV_TYPE_DOMAIN_MASTER, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_SERVER_OSF", SV_TYPE_SERVER_OSF, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_SERVER_VMS", SV_TYPE_SERVER_VMS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_WIN95_PLUS", SV_TYPE_WIN95_PLUS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_DFS_SERVER", SV_TYPE_DFS_SERVER, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_ALTERNATE_XPORT", SV_TYPE_ALTERNATE_XPORT, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_LOCAL_LIST_ONLY", SV_TYPE_LOCAL_LIST_ONLY, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SV_TYPE_DOMAIN_ENUM", SV_TYPE_DOMAIN_ENUM, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_CloseServiceHandle(struct ndr_push *ndr, int flags, const struct svcctl_CloseServiceHandle *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_CloseServiceHandle(struct ndr_pull *ndr, int flags, struct svcctl_CloseServiceHandle *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.handle);
-		*r->out.handle = *r->in.handle;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_CloseServiceHandle(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_CloseServiceHandle *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_CloseServiceHandle");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_CloseServiceHandle");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_CloseServiceHandle");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->out.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->out.handle);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_ControlService(struct ndr_push *ndr, int flags, const struct svcctl_ControlService *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.control));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.service_status == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_SERVICE_STATUS(ndr, NDR_SCALARS, r->out.service_status));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_ControlService(struct ndr_pull *ndr, int flags, struct svcctl_ControlService *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_service_status_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.control));
-		NDR_PULL_ALLOC(ndr, r->out.service_status);
-		ZERO_STRUCTP(r->out.service_status);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.service_status);
-		}
-		_mem_save_service_status_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.service_status, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_SERVICE_STATUS(ndr, NDR_SCALARS, r->out.service_status));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_service_status_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_ControlService(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_ControlService *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_ControlService");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_ControlService");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "control", r->in.control);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_ControlService");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "service_status", r->out.service_status);
-		ndr->depth++;
-		ndr_print_SERVICE_STATUS(ndr, "service_status", r->out.service_status);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_DeleteService(struct ndr_push *ndr, int flags, const struct svcctl_DeleteService *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_DeleteService(struct ndr_pull *ndr, int flags, struct svcctl_DeleteService *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_DeleteService(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_DeleteService *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_DeleteService");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_DeleteService");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_DeleteService");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_LockServiceDatabase(struct ndr_push *ndr, int flags, const struct svcctl_LockServiceDatabase *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.lock == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.lock));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_LockServiceDatabase(struct ndr_pull *ndr, int flags, struct svcctl_LockServiceDatabase *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_lock_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.lock);
-		ZERO_STRUCTP(r->out.lock);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.lock);
-		}
-		_mem_save_lock_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.lock, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.lock));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_lock_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_LockServiceDatabase(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_LockServiceDatabase *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_LockServiceDatabase");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_LockServiceDatabase");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_LockServiceDatabase");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "lock", r->out.lock);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "lock", r->out.lock);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_QueryServiceObjectSecurity(struct ndr_push *ndr, int flags, const struct svcctl_QueryServiceObjectSecurity *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.security_flags));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buffer_size));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.buffer == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buffer_size));
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->out.buffer, r->in.buffer_size));
-		if (r->out.needed == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.needed));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_QueryServiceObjectSecurity(struct ndr_pull *ndr, int flags, struct svcctl_QueryServiceObjectSecurity *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_needed_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.security_flags));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.buffer_size));
-		if (r->in.buffer_size < 0 || r->in.buffer_size > 0x40000) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_PULL_ALLOC_N(ndr, r->out.buffer, r->in.buffer_size);
-		memset(r->out.buffer, 0, (r->in.buffer_size) * sizeof(*r->out.buffer));
-		NDR_PULL_ALLOC(ndr, r->out.needed);
-		ZERO_STRUCTP(r->out.needed);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->out.buffer));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC_N(ndr, r->out.buffer, ndr_get_array_size(ndr, &r->out.buffer));
-		}
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.buffer, ndr_get_array_size(ndr, &r->out.buffer)));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.needed);
-		}
-		_mem_save_needed_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.needed, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.needed));
-		if (*r->out.needed < 0 || *r->out.needed > 0x40000) {
-			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_needed_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-		if (r->out.buffer) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->out.buffer, r->in.buffer_size));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_QueryServiceObjectSecurity(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_QueryServiceObjectSecurity *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_QueryServiceObjectSecurity");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_QueryServiceObjectSecurity");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "security_flags", r->in.security_flags);
-		ndr_print_uint32(ndr, "buffer_size", r->in.buffer_size);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_QueryServiceObjectSecurity");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "buffer", r->out.buffer);
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "buffer", r->out.buffer, r->in.buffer_size);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "needed", r->out.needed);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "needed", *r->out.needed);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_SetServiceObjectSecurity(struct ndr_push *ndr, int flags, const struct svcctl_SetServiceObjectSecurity *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.security_flags));
-		if (r->in.buffer == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buffer_size));
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->in.buffer, r->in.buffer_size));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buffer_size));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_SetServiceObjectSecurity(struct ndr_pull *ndr, int flags, struct svcctl_SetServiceObjectSecurity *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.security_flags));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.buffer));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC_N(ndr, r->in.buffer, ndr_get_array_size(ndr, &r->in.buffer));
-		}
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->in.buffer, ndr_get_array_size(ndr, &r->in.buffer)));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.buffer_size));
-		if (r->in.buffer) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.buffer, r->in.buffer_size));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_SetServiceObjectSecurity(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_SetServiceObjectSecurity *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_SetServiceObjectSecurity");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_SetServiceObjectSecurity");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "security_flags", r->in.security_flags);
-		ndr_print_ptr(ndr, "buffer", r->in.buffer);
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "buffer", r->in.buffer, r->in.buffer_size);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "buffer_size", r->in.buffer_size);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_SetServiceObjectSecurity");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_QueryServiceStatus(struct ndr_push *ndr, int flags, const struct svcctl_QueryServiceStatus *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.service_status == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_SERVICE_STATUS(ndr, NDR_SCALARS, r->out.service_status));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_QueryServiceStatus(struct ndr_pull *ndr, int flags, struct svcctl_QueryServiceStatus *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_service_status_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.service_status);
-		ZERO_STRUCTP(r->out.service_status);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.service_status);
-		}
-		_mem_save_service_status_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.service_status, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_SERVICE_STATUS(ndr, NDR_SCALARS, r->out.service_status));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_service_status_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_QueryServiceStatus(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_QueryServiceStatus *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_QueryServiceStatus");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_QueryServiceStatus");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_QueryServiceStatus");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "service_status", r->out.service_status);
-		ndr->depth++;
-		ndr_print_SERVICE_STATUS(ndr, "service_status", r->out.service_status);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_SetServiceStatus(struct ndr_push *ndr, int flags, const struct svcctl_SetServiceStatus *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_SetServiceStatus(struct ndr_pull *ndr, int flags, struct svcctl_SetServiceStatus *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_SetServiceStatus(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_SetServiceStatus *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_SetServiceStatus");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_SetServiceStatus");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_SetServiceStatus");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_UnlockServiceDatabase(struct ndr_push *ndr, int flags, const struct svcctl_UnlockServiceDatabase *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.lock == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.lock));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.lock == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.lock));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_UnlockServiceDatabase(struct ndr_pull *ndr, int flags, struct svcctl_UnlockServiceDatabase *r)
-{
-	TALLOC_CTX *_mem_save_lock_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.lock);
-		}
-		_mem_save_lock_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.lock, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.lock));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_lock_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.lock);
-		*r->out.lock = *r->in.lock;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.lock);
-		}
-		_mem_save_lock_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.lock, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.lock));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_lock_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_UnlockServiceDatabase(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_UnlockServiceDatabase *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_UnlockServiceDatabase");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_UnlockServiceDatabase");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "lock", r->in.lock);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "lock", r->in.lock);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_UnlockServiceDatabase");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "lock", r->out.lock);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "lock", r->out.lock);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_NotifyBootConfigStatus(struct ndr_push *ndr, int flags, const struct svcctl_NotifyBootConfigStatus *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_NotifyBootConfigStatus(struct ndr_pull *ndr, int flags, struct svcctl_NotifyBootConfigStatus *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_NotifyBootConfigStatus(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_NotifyBootConfigStatus *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_NotifyBootConfigStatus");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_NotifyBootConfigStatus");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_NotifyBootConfigStatus");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_SCSetServiceBitsW(struct ndr_push *ndr, int flags, const struct svcctl_SCSetServiceBitsW *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.bits));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.bitson));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.immediate));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_SCSetServiceBitsW(struct ndr_pull *ndr, int flags, struct svcctl_SCSetServiceBitsW *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.bits));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.bitson));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.immediate));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_SCSetServiceBitsW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_SCSetServiceBitsW *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_SCSetServiceBitsW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_SCSetServiceBitsW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "bits", r->in.bits);
-		ndr_print_uint32(ndr, "bitson", r->in.bitson);
-		ndr_print_uint32(ndr, "immediate", r->in.immediate);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_SCSetServiceBitsW");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_ChangeServiceConfigW(struct ndr_push *ndr, int flags, const struct svcctl_ChangeServiceConfigW *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.start));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.error));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.binary_path));
-		if (r->in.binary_path) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.binary_path, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.binary_path, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.binary_path, ndr_charset_length(r->in.binary_path, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.load_order_group));
-		if (r->in.load_order_group) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.load_order_group, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.load_order_group, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.load_order_group, ndr_charset_length(r->in.load_order_group, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.dependencies));
-		if (r->in.dependencies) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dependencies, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dependencies, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.dependencies, ndr_charset_length(r->in.dependencies, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.service_start_name));
-		if (r->in.service_start_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.service_start_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.service_start_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.service_start_name, ndr_charset_length(r->in.service_start_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.password));
-		if (r->in.password) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.password, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.password, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.password, ndr_charset_length(r->in.password, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.display_name));
-		if (r->in.display_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.display_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.display_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.display_name, ndr_charset_length(r->in.display_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.tag_id == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.tag_id));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_ChangeServiceConfigW(struct ndr_pull *ndr, int flags, struct svcctl_ChangeServiceConfigW *r)
-{
-	uint32_t _ptr_binary_path;
-	uint32_t _ptr_load_order_group;
-	uint32_t _ptr_dependencies;
-	uint32_t _ptr_service_start_name;
-	uint32_t _ptr_password;
-	uint32_t _ptr_display_name;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_binary_path_0;
-	TALLOC_CTX *_mem_save_load_order_group_0;
-	TALLOC_CTX *_mem_save_tag_id_0;
-	TALLOC_CTX *_mem_save_dependencies_0;
-	TALLOC_CTX *_mem_save_service_start_name_0;
-	TALLOC_CTX *_mem_save_password_0;
-	TALLOC_CTX *_mem_save_display_name_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.type));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.start));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.error));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_binary_path));
-		if (_ptr_binary_path) {
-			NDR_PULL_ALLOC(ndr, r->in.binary_path);
-		} else {
-			r->in.binary_path = NULL;
-		}
-		if (r->in.binary_path) {
-			_mem_save_binary_path_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.binary_path, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.binary_path));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.binary_path));
-			if (ndr_get_array_length(ndr, &r->in.binary_path) > ndr_get_array_size(ndr, &r->in.binary_path)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.binary_path), ndr_get_array_length(ndr, &r->in.binary_path));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.binary_path), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.binary_path, ndr_get_array_length(ndr, &r->in.binary_path), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_binary_path_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_load_order_group));
-		if (_ptr_load_order_group) {
-			NDR_PULL_ALLOC(ndr, r->in.load_order_group);
-		} else {
-			r->in.load_order_group = NULL;
-		}
-		if (r->in.load_order_group) {
-			_mem_save_load_order_group_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.load_order_group, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.load_order_group));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.load_order_group));
-			if (ndr_get_array_length(ndr, &r->in.load_order_group) > ndr_get_array_size(ndr, &r->in.load_order_group)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.load_order_group), ndr_get_array_length(ndr, &r->in.load_order_group));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.load_order_group), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.load_order_group, ndr_get_array_length(ndr, &r->in.load_order_group), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_load_order_group_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dependencies));
-		if (_ptr_dependencies) {
-			NDR_PULL_ALLOC(ndr, r->in.dependencies);
-		} else {
-			r->in.dependencies = NULL;
-		}
-		if (r->in.dependencies) {
-			_mem_save_dependencies_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.dependencies, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.dependencies));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.dependencies));
-			if (ndr_get_array_length(ndr, &r->in.dependencies) > ndr_get_array_size(ndr, &r->in.dependencies)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.dependencies), ndr_get_array_length(ndr, &r->in.dependencies));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.dependencies), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.dependencies, ndr_get_array_length(ndr, &r->in.dependencies), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dependencies_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_service_start_name));
-		if (_ptr_service_start_name) {
-			NDR_PULL_ALLOC(ndr, r->in.service_start_name);
-		} else {
-			r->in.service_start_name = NULL;
-		}
-		if (r->in.service_start_name) {
-			_mem_save_service_start_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.service_start_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.service_start_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.service_start_name));
-			if (ndr_get_array_length(ndr, &r->in.service_start_name) > ndr_get_array_size(ndr, &r->in.service_start_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.service_start_name), ndr_get_array_length(ndr, &r->in.service_start_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.service_start_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.service_start_name, ndr_get_array_length(ndr, &r->in.service_start_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_service_start_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_password));
-		if (_ptr_password) {
-			NDR_PULL_ALLOC(ndr, r->in.password);
-		} else {
-			r->in.password = NULL;
-		}
-		if (r->in.password) {
-			_mem_save_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.password, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.password));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.password));
-			if (ndr_get_array_length(ndr, &r->in.password) > ndr_get_array_size(ndr, &r->in.password)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.password), ndr_get_array_length(ndr, &r->in.password));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.password), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.password, ndr_get_array_length(ndr, &r->in.password), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_password_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_display_name));
-		if (_ptr_display_name) {
-			NDR_PULL_ALLOC(ndr, r->in.display_name);
-		} else {
-			r->in.display_name = NULL;
-		}
-		if (r->in.display_name) {
-			_mem_save_display_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.display_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.display_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.display_name));
-			if (ndr_get_array_length(ndr, &r->in.display_name) > ndr_get_array_size(ndr, &r->in.display_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.display_name), ndr_get_array_length(ndr, &r->in.display_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.display_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.display_name, ndr_get_array_length(ndr, &r->in.display_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_display_name_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.tag_id);
-		ZERO_STRUCTP(r->out.tag_id);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.tag_id);
-		}
-		_mem_save_tag_id_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.tag_id, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.tag_id));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_tag_id_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_ChangeServiceConfigW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_ChangeServiceConfigW *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_ChangeServiceConfigW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_ChangeServiceConfigW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "type", r->in.type);
-		ndr_print_uint32(ndr, "start", r->in.start);
-		ndr_print_uint32(ndr, "error", r->in.error);
-		ndr_print_ptr(ndr, "binary_path", r->in.binary_path);
-		ndr->depth++;
-		if (r->in.binary_path) {
-			ndr_print_string(ndr, "binary_path", r->in.binary_path);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "load_order_group", r->in.load_order_group);
-		ndr->depth++;
-		if (r->in.load_order_group) {
-			ndr_print_string(ndr, "load_order_group", r->in.load_order_group);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "dependencies", r->in.dependencies);
-		ndr->depth++;
-		if (r->in.dependencies) {
-			ndr_print_string(ndr, "dependencies", r->in.dependencies);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "service_start_name", r->in.service_start_name);
-		ndr->depth++;
-		if (r->in.service_start_name) {
-			ndr_print_string(ndr, "service_start_name", r->in.service_start_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "password", r->in.password);
-		ndr->depth++;
-		if (r->in.password) {
-			ndr_print_string(ndr, "password", r->in.password);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "display_name", r->in.display_name);
-		ndr->depth++;
-		if (r->in.display_name) {
-			ndr_print_string(ndr, "display_name", r->in.display_name);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_ChangeServiceConfigW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "tag_id", r->out.tag_id);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "tag_id", *r->out.tag_id);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_CreateServiceW(struct ndr_push *ndr, int flags, const struct svcctl_CreateServiceW *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.scmanager_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.scmanager_handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.ServiceName, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.ServiceName, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.ServiceName, ndr_charset_length(r->in.ServiceName, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.DisplayName));
-		if (r->in.DisplayName) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.DisplayName, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.DisplayName, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.DisplayName, ndr_charset_length(r->in.DisplayName, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.desired_access));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.start_type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.error_control));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.binary_path, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.binary_path, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.binary_path, ndr_charset_length(r->in.binary_path, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.LoadOrderGroupKey));
-		if (r->in.LoadOrderGroupKey) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.LoadOrderGroupKey, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.LoadOrderGroupKey, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.LoadOrderGroupKey, ndr_charset_length(r->in.LoadOrderGroupKey, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.TagId));
-		if (r->in.TagId) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.TagId));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.dependencies));
-		if (r->in.dependencies) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.dependencies_size));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->in.dependencies, r->in.dependencies_size));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.dependencies_size));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.service_start_name));
-		if (r->in.service_start_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.service_start_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.service_start_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.service_start_name, ndr_charset_length(r->in.service_start_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.password));
-		if (r->in.password) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.password_size));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->in.password, r->in.password_size));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.password_size));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.TagId));
-		if (r->out.TagId) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.TagId));
-		}
-		if (r->out.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_CreateServiceW(struct ndr_pull *ndr, int flags, struct svcctl_CreateServiceW *r)
-{
-	uint32_t _ptr_DisplayName;
-	uint32_t _ptr_LoadOrderGroupKey;
-	uint32_t _ptr_TagId;
-	uint32_t _ptr_dependencies;
-	uint32_t _ptr_service_start_name;
-	uint32_t _ptr_password;
-	TALLOC_CTX *_mem_save_scmanager_handle_0;
-	TALLOC_CTX *_mem_save_DisplayName_0;
-	TALLOC_CTX *_mem_save_LoadOrderGroupKey_0;
-	TALLOC_CTX *_mem_save_TagId_0;
-	TALLOC_CTX *_mem_save_dependencies_0;
-	TALLOC_CTX *_mem_save_service_start_name_0;
-	TALLOC_CTX *_mem_save_password_0;
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.scmanager_handle);
-		}
-		_mem_save_scmanager_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.scmanager_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.scmanager_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_scmanager_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.ServiceName));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.ServiceName));
-		if (ndr_get_array_length(ndr, &r->in.ServiceName) > ndr_get_array_size(ndr, &r->in.ServiceName)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.ServiceName), ndr_get_array_length(ndr, &r->in.ServiceName));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.ServiceName), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.ServiceName, ndr_get_array_length(ndr, &r->in.ServiceName), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_DisplayName));
-		if (_ptr_DisplayName) {
-			NDR_PULL_ALLOC(ndr, r->in.DisplayName);
-		} else {
-			r->in.DisplayName = NULL;
-		}
-		if (r->in.DisplayName) {
-			_mem_save_DisplayName_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.DisplayName, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.DisplayName));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.DisplayName));
-			if (ndr_get_array_length(ndr, &r->in.DisplayName) > ndr_get_array_size(ndr, &r->in.DisplayName)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.DisplayName), ndr_get_array_length(ndr, &r->in.DisplayName));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.DisplayName), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.DisplayName, ndr_get_array_length(ndr, &r->in.DisplayName), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_DisplayName_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.desired_access));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.type));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.start_type));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.error_control));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.binary_path));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.binary_path));
-		if (ndr_get_array_length(ndr, &r->in.binary_path) > ndr_get_array_size(ndr, &r->in.binary_path)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.binary_path), ndr_get_array_length(ndr, &r->in.binary_path));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.binary_path), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.binary_path, ndr_get_array_length(ndr, &r->in.binary_path), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_LoadOrderGroupKey));
-		if (_ptr_LoadOrderGroupKey) {
-			NDR_PULL_ALLOC(ndr, r->in.LoadOrderGroupKey);
-		} else {
-			r->in.LoadOrderGroupKey = NULL;
-		}
-		if (r->in.LoadOrderGroupKey) {
-			_mem_save_LoadOrderGroupKey_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.LoadOrderGroupKey, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.LoadOrderGroupKey));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.LoadOrderGroupKey));
-			if (ndr_get_array_length(ndr, &r->in.LoadOrderGroupKey) > ndr_get_array_size(ndr, &r->in.LoadOrderGroupKey)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.LoadOrderGroupKey), ndr_get_array_length(ndr, &r->in.LoadOrderGroupKey));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.LoadOrderGroupKey), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.LoadOrderGroupKey, ndr_get_array_length(ndr, &r->in.LoadOrderGroupKey), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_LoadOrderGroupKey_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_TagId));
-		if (_ptr_TagId) {
-			NDR_PULL_ALLOC(ndr, r->in.TagId);
-		} else {
-			r->in.TagId = NULL;
-		}
-		if (r->in.TagId) {
-			_mem_save_TagId_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.TagId, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.TagId));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_TagId_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dependencies));
-		if (_ptr_dependencies) {
-			NDR_PULL_ALLOC(ndr, r->in.dependencies);
-		} else {
-			r->in.dependencies = NULL;
-		}
-		if (r->in.dependencies) {
-			_mem_save_dependencies_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.dependencies, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.dependencies));
-			NDR_PULL_ALLOC_N(ndr, r->in.dependencies, ndr_get_array_size(ndr, &r->in.dependencies));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->in.dependencies, ndr_get_array_size(ndr, &r->in.dependencies)));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dependencies_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.dependencies_size));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_service_start_name));
-		if (_ptr_service_start_name) {
-			NDR_PULL_ALLOC(ndr, r->in.service_start_name);
-		} else {
-			r->in.service_start_name = NULL;
-		}
-		if (r->in.service_start_name) {
-			_mem_save_service_start_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.service_start_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.service_start_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.service_start_name));
-			if (ndr_get_array_length(ndr, &r->in.service_start_name) > ndr_get_array_size(ndr, &r->in.service_start_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.service_start_name), ndr_get_array_length(ndr, &r->in.service_start_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.service_start_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.service_start_name, ndr_get_array_length(ndr, &r->in.service_start_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_service_start_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_password));
-		if (_ptr_password) {
-			NDR_PULL_ALLOC(ndr, r->in.password);
-		} else {
-			r->in.password = NULL;
-		}
-		if (r->in.password) {
-			_mem_save_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.password, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.password));
-			NDR_PULL_ALLOC_N(ndr, r->in.password, ndr_get_array_size(ndr, &r->in.password));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->in.password, ndr_get_array_size(ndr, &r->in.password)));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_password_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.password_size));
-		NDR_PULL_ALLOC(ndr, r->out.handle);
-		ZERO_STRUCTP(r->out.handle);
-		if (r->in.dependencies) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.dependencies, r->in.dependencies_size));
-		}
-		if (r->in.password) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.password, r->in.password_size));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_TagId));
-		if (_ptr_TagId) {
-			NDR_PULL_ALLOC(ndr, r->out.TagId);
-		} else {
-			r->out.TagId = NULL;
-		}
-		if (r->out.TagId) {
-			_mem_save_TagId_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.TagId, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.TagId));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_TagId_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_CreateServiceW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_CreateServiceW *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_CreateServiceW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_CreateServiceW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "scmanager_handle", r->in.scmanager_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "scmanager_handle", r->in.scmanager_handle);
-		ndr->depth--;
-		ndr_print_string(ndr, "ServiceName", r->in.ServiceName);
-		ndr_print_ptr(ndr, "DisplayName", r->in.DisplayName);
-		ndr->depth++;
-		if (r->in.DisplayName) {
-			ndr_print_string(ndr, "DisplayName", r->in.DisplayName);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "desired_access", r->in.desired_access);
-		ndr_print_uint32(ndr, "type", r->in.type);
-		ndr_print_uint32(ndr, "start_type", r->in.start_type);
-		ndr_print_uint32(ndr, "error_control", r->in.error_control);
-		ndr_print_string(ndr, "binary_path", r->in.binary_path);
-		ndr_print_ptr(ndr, "LoadOrderGroupKey", r->in.LoadOrderGroupKey);
-		ndr->depth++;
-		if (r->in.LoadOrderGroupKey) {
-			ndr_print_string(ndr, "LoadOrderGroupKey", r->in.LoadOrderGroupKey);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "TagId", r->in.TagId);
-		ndr->depth++;
-		if (r->in.TagId) {
-			ndr_print_uint32(ndr, "TagId", *r->in.TagId);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "dependencies", r->in.dependencies);
-		ndr->depth++;
-		if (r->in.dependencies) {
-			ndr_print_array_uint8(ndr, "dependencies", r->in.dependencies, r->in.dependencies_size);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "dependencies_size", r->in.dependencies_size);
-		ndr_print_ptr(ndr, "service_start_name", r->in.service_start_name);
-		ndr->depth++;
-		if (r->in.service_start_name) {
-			ndr_print_string(ndr, "service_start_name", r->in.service_start_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "password", r->in.password);
-		ndr->depth++;
-		if (r->in.password) {
-			ndr_print_array_uint8(ndr, "password", r->in.password, r->in.password_size);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "password_size", r->in.password_size);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_CreateServiceW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "TagId", r->out.TagId);
-		ndr->depth++;
-		if (r->out.TagId) {
-			ndr_print_uint32(ndr, "TagId", *r->out.TagId);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "handle", r->out.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->out.handle);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_EnumDependentServicesW(struct ndr_push *ndr, int flags, const struct svcctl_EnumDependentServicesW *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.service == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.service));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.state));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buf_size));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.service_status));
-		if (r->out.service_status) {
-			NDR_CHECK(ndr_push_ENUM_SERVICE_STATUS(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.service_status));
-		}
-		if (r->out.bytes_needed == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.bytes_needed));
-		if (r->out.services_returned == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.services_returned));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_EnumDependentServicesW(struct ndr_pull *ndr, int flags, struct svcctl_EnumDependentServicesW *r)
-{
-	uint32_t _ptr_service_status;
-	TALLOC_CTX *_mem_save_service_0;
-	TALLOC_CTX *_mem_save_service_status_0;
-	TALLOC_CTX *_mem_save_bytes_needed_0;
-	TALLOC_CTX *_mem_save_services_returned_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.service);
-		}
-		_mem_save_service_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.service, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.service));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_service_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.state));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.buf_size));
-		NDR_PULL_ALLOC(ndr, r->out.bytes_needed);
-		ZERO_STRUCTP(r->out.bytes_needed);
-		NDR_PULL_ALLOC(ndr, r->out.services_returned);
-		ZERO_STRUCTP(r->out.services_returned);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_service_status));
-		if (_ptr_service_status) {
-			NDR_PULL_ALLOC(ndr, r->out.service_status);
-		} else {
-			r->out.service_status = NULL;
-		}
-		if (r->out.service_status) {
-			_mem_save_service_status_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.service_status, 0);
-			NDR_CHECK(ndr_pull_ENUM_SERVICE_STATUS(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.service_status));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_service_status_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.bytes_needed);
-		}
-		_mem_save_bytes_needed_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.bytes_needed, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.bytes_needed));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_bytes_needed_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.services_returned);
-		}
-		_mem_save_services_returned_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.services_returned, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.services_returned));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_services_returned_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_EnumDependentServicesW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_EnumDependentServicesW *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_EnumDependentServicesW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_EnumDependentServicesW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "service", r->in.service);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "service", r->in.service);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "state", r->in.state);
-		ndr_print_uint32(ndr, "buf_size", r->in.buf_size);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_EnumDependentServicesW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "service_status", r->out.service_status);
-		ndr->depth++;
-		if (r->out.service_status) {
-			ndr_print_ENUM_SERVICE_STATUS(ndr, "service_status", r->out.service_status);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "bytes_needed", r->out.bytes_needed);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "bytes_needed", *r->out.bytes_needed);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "services_returned", r->out.services_returned);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "services_returned", *r->out.services_returned);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_EnumServicesStatusW(struct ndr_push *ndr, int flags, const struct svcctl_EnumServicesStatusW *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.state));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buf_size));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.resume_handle));
-		if (r->in.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buf_size));
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->out.service, r->in.buf_size));
-		if (r->out.bytes_needed == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.bytes_needed));
-		if (r->out.services_returned == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.services_returned));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.resume_handle));
-		if (r->out.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_EnumServicesStatusW(struct ndr_pull *ndr, int flags, struct svcctl_EnumServicesStatusW *r)
-{
-	uint32_t _ptr_resume_handle;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_bytes_needed_0;
-	TALLOC_CTX *_mem_save_services_returned_0;
-	TALLOC_CTX *_mem_save_resume_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.type));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.state));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.buf_size));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->in.resume_handle);
-		} else {
-			r->in.resume_handle = NULL;
-		}
-		if (r->in.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.bytes_needed);
-		ZERO_STRUCTP(r->out.bytes_needed);
-		NDR_PULL_ALLOC(ndr, r->out.services_returned);
-		ZERO_STRUCTP(r->out.services_returned);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->out.service));
-		NDR_PULL_ALLOC_N(ndr, r->out.service, ndr_get_array_size(ndr, &r->out.service));
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.service, ndr_get_array_size(ndr, &r->out.service)));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.bytes_needed);
-		}
-		_mem_save_bytes_needed_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.bytes_needed, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.bytes_needed));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_bytes_needed_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.services_returned);
-		}
-		_mem_save_services_returned_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.services_returned, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.services_returned));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_services_returned_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		} else {
-			r->out.resume_handle = NULL;
-		}
-		if (r->out.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-		if (r->out.service) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->out.service, r->in.buf_size));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_EnumServicesStatusW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_EnumServicesStatusW *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_EnumServicesStatusW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_EnumServicesStatusW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "type", r->in.type);
-		ndr_print_uint32(ndr, "state", r->in.state);
-		ndr_print_uint32(ndr, "buf_size", r->in.buf_size);
-		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
-		ndr->depth++;
-		if (r->in.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_EnumServicesStatusW");
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "service", r->out.service, r->in.buf_size);
-		ndr_print_ptr(ndr, "bytes_needed", r->out.bytes_needed);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "bytes_needed", *r->out.bytes_needed);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "services_returned", r->out.services_returned);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "services_returned", *r->out.services_returned);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
-		ndr->depth++;
-		if (r->out.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_OpenSCManagerW(struct ndr_push *ndr, int flags, const struct svcctl_OpenSCManagerW *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.MachineName));
-		if (r->in.MachineName) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.MachineName, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.MachineName, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.MachineName, ndr_charset_length(r->in.MachineName, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.DatabaseName));
-		if (r->in.DatabaseName) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.DatabaseName, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.DatabaseName, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.DatabaseName, ndr_charset_length(r->in.DatabaseName, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_OpenSCManagerW(struct ndr_pull *ndr, int flags, struct svcctl_OpenSCManagerW *r)
-{
-	uint32_t _ptr_MachineName;
-	uint32_t _ptr_DatabaseName;
-	TALLOC_CTX *_mem_save_MachineName_0;
-	TALLOC_CTX *_mem_save_DatabaseName_0;
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_MachineName));
-		if (_ptr_MachineName) {
-			NDR_PULL_ALLOC(ndr, r->in.MachineName);
-		} else {
-			r->in.MachineName = NULL;
-		}
-		if (r->in.MachineName) {
-			_mem_save_MachineName_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.MachineName, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.MachineName));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.MachineName));
-			if (ndr_get_array_length(ndr, &r->in.MachineName) > ndr_get_array_size(ndr, &r->in.MachineName)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.MachineName), ndr_get_array_length(ndr, &r->in.MachineName));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.MachineName), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.MachineName, ndr_get_array_length(ndr, &r->in.MachineName), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_MachineName_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_DatabaseName));
-		if (_ptr_DatabaseName) {
-			NDR_PULL_ALLOC(ndr, r->in.DatabaseName);
-		} else {
-			r->in.DatabaseName = NULL;
-		}
-		if (r->in.DatabaseName) {
-			_mem_save_DatabaseName_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.DatabaseName, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.DatabaseName));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.DatabaseName));
-			if (ndr_get_array_length(ndr, &r->in.DatabaseName) > ndr_get_array_size(ndr, &r->in.DatabaseName)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.DatabaseName), ndr_get_array_length(ndr, &r->in.DatabaseName));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.DatabaseName), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.DatabaseName, ndr_get_array_length(ndr, &r->in.DatabaseName), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_DatabaseName_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.handle);
-		ZERO_STRUCTP(r->out.handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_OpenSCManagerW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_OpenSCManagerW *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_OpenSCManagerW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_OpenSCManagerW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "MachineName", r->in.MachineName);
-		ndr->depth++;
-		if (r->in.MachineName) {
-			ndr_print_string(ndr, "MachineName", r->in.MachineName);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "DatabaseName", r->in.DatabaseName);
-		ndr->depth++;
-		if (r->in.DatabaseName) {
-			ndr_print_string(ndr, "DatabaseName", r->in.DatabaseName);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_OpenSCManagerW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->out.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->out.handle);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_OpenServiceW(struct ndr_push *ndr, int flags, const struct svcctl_OpenServiceW *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.scmanager_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.scmanager_handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.ServiceName, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.ServiceName, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.ServiceName, ndr_charset_length(r->in.ServiceName, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_OpenServiceW(struct ndr_pull *ndr, int flags, struct svcctl_OpenServiceW *r)
-{
-	TALLOC_CTX *_mem_save_scmanager_handle_0;
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.scmanager_handle);
-		}
-		_mem_save_scmanager_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.scmanager_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.scmanager_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_scmanager_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.ServiceName));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.ServiceName));
-		if (ndr_get_array_length(ndr, &r->in.ServiceName) > ndr_get_array_size(ndr, &r->in.ServiceName)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.ServiceName), ndr_get_array_length(ndr, &r->in.ServiceName));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.ServiceName), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.ServiceName, ndr_get_array_length(ndr, &r->in.ServiceName), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.handle);
-		ZERO_STRUCTP(r->out.handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_OpenServiceW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_OpenServiceW *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_OpenServiceW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_OpenServiceW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "scmanager_handle", r->in.scmanager_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "scmanager_handle", r->in.scmanager_handle);
-		ndr->depth--;
-		ndr_print_string(ndr, "ServiceName", r->in.ServiceName);
-		ndr_print_uint32(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_OpenServiceW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->out.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->out.handle);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_QueryServiceConfigW(struct ndr_push *ndr, int flags, const struct svcctl_QueryServiceConfigW *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buf_size));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->out.query, r->in.buf_size));
-		if (r->out.bytes_needed == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.bytes_needed));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_QueryServiceConfigW(struct ndr_pull *ndr, int flags, struct svcctl_QueryServiceConfigW *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_bytes_needed_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.buf_size));
-		NDR_PULL_ALLOC(ndr, r->out.bytes_needed);
-		ZERO_STRUCTP(r->out.bytes_needed);
-	}
-	if (flags & NDR_OUT) {
-		NDR_PULL_ALLOC_N(ndr, r->out.query, r->in.buf_size);
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.query, r->in.buf_size));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.bytes_needed);
-		}
-		_mem_save_bytes_needed_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.bytes_needed, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.bytes_needed));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_bytes_needed_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_QueryServiceConfigW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_QueryServiceConfigW *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_QueryServiceConfigW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_QueryServiceConfigW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "buf_size", r->in.buf_size);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_QueryServiceConfigW");
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "query", r->out.query, r->in.buf_size);
-		ndr_print_ptr(ndr, "bytes_needed", r->out.bytes_needed);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "bytes_needed", *r->out.bytes_needed);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_QueryServiceLockStatusW(struct ndr_push *ndr, int flags, const struct svcctl_QueryServiceLockStatusW *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buf_size));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.lock_status == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_SERVICE_LOCK_STATUS(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.lock_status));
-		if (r->out.required_buf_size == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.required_buf_size));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_QueryServiceLockStatusW(struct ndr_pull *ndr, int flags, struct svcctl_QueryServiceLockStatusW *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_lock_status_0;
-	TALLOC_CTX *_mem_save_required_buf_size_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.buf_size));
-		NDR_PULL_ALLOC(ndr, r->out.lock_status);
-		ZERO_STRUCTP(r->out.lock_status);
-		NDR_PULL_ALLOC(ndr, r->out.required_buf_size);
-		ZERO_STRUCTP(r->out.required_buf_size);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.lock_status);
-		}
-		_mem_save_lock_status_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.lock_status, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_SERVICE_LOCK_STATUS(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.lock_status));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_lock_status_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.required_buf_size);
-		}
-		_mem_save_required_buf_size_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.required_buf_size, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.required_buf_size));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_required_buf_size_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_QueryServiceLockStatusW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_QueryServiceLockStatusW *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_QueryServiceLockStatusW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_QueryServiceLockStatusW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "buf_size", r->in.buf_size);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_QueryServiceLockStatusW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "lock_status", r->out.lock_status);
-		ndr->depth++;
-		ndr_print_SERVICE_LOCK_STATUS(ndr, "lock_status", r->out.lock_status);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "required_buf_size", r->out.required_buf_size);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "required_buf_size", *r->out.required_buf_size);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_StartServiceW(struct ndr_push *ndr, int flags, const struct svcctl_StartServiceW *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.NumArgs));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.Arguments));
-		if (r->in.Arguments) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.Arguments, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.Arguments, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.Arguments, ndr_charset_length(r->in.Arguments, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_StartServiceW(struct ndr_pull *ndr, int flags, struct svcctl_StartServiceW *r)
-{
-	uint32_t _ptr_Arguments;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_Arguments_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.NumArgs));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_Arguments));
-		if (_ptr_Arguments) {
-			NDR_PULL_ALLOC(ndr, r->in.Arguments);
-		} else {
-			r->in.Arguments = NULL;
-		}
-		if (r->in.Arguments) {
-			_mem_save_Arguments_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.Arguments, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.Arguments));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.Arguments));
-			if (ndr_get_array_length(ndr, &r->in.Arguments) > ndr_get_array_size(ndr, &r->in.Arguments)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.Arguments), ndr_get_array_length(ndr, &r->in.Arguments));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.Arguments), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.Arguments, ndr_get_array_length(ndr, &r->in.Arguments), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_Arguments_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_StartServiceW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_StartServiceW *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_StartServiceW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_StartServiceW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "NumArgs", r->in.NumArgs);
-		ndr_print_ptr(ndr, "Arguments", r->in.Arguments);
-		ndr->depth++;
-		if (r->in.Arguments) {
-			ndr_print_string(ndr, "Arguments", r->in.Arguments);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_StartServiceW");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_GetServiceDisplayNameW(struct ndr_push *ndr, int flags, const struct svcctl_GetServiceDisplayNameW *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.service_name));
-		if (r->in.service_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.service_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.service_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.service_name, ndr_charset_length(r->in.service_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.display_name_length));
-		if (r->in.display_name_length) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.display_name_length));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.display_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.display_name));
-		if (*r->out.display_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.display_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.display_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, *r->out.display_name, ndr_charset_length(*r->out.display_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.display_name_length));
-		if (r->out.display_name_length) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.display_name_length));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_GetServiceDisplayNameW(struct ndr_pull *ndr, int flags, struct svcctl_GetServiceDisplayNameW *r)
-{
-	uint32_t _ptr_service_name;
-	uint32_t _ptr_display_name;
-	uint32_t _ptr_display_name_length;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_service_name_0;
-	TALLOC_CTX *_mem_save_display_name_0;
-	TALLOC_CTX *_mem_save_display_name_1;
-	TALLOC_CTX *_mem_save_display_name_length_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_service_name));
-		if (_ptr_service_name) {
-			NDR_PULL_ALLOC(ndr, r->in.service_name);
-		} else {
-			r->in.service_name = NULL;
-		}
-		if (r->in.service_name) {
-			_mem_save_service_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.service_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.service_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.service_name));
-			if (ndr_get_array_length(ndr, &r->in.service_name) > ndr_get_array_size(ndr, &r->in.service_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.service_name), ndr_get_array_length(ndr, &r->in.service_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.service_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.service_name, ndr_get_array_length(ndr, &r->in.service_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_service_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_display_name_length));
-		if (_ptr_display_name_length) {
-			NDR_PULL_ALLOC(ndr, r->in.display_name_length);
-		} else {
-			r->in.display_name_length = NULL;
-		}
-		if (r->in.display_name_length) {
-			_mem_save_display_name_length_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.display_name_length, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.display_name_length));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_display_name_length_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.display_name);
-		ZERO_STRUCTP(r->out.display_name);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.display_name);
-		}
-		_mem_save_display_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.display_name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_display_name));
-		if (_ptr_display_name) {
-			NDR_PULL_ALLOC(ndr, *r->out.display_name);
-		} else {
-			*r->out.display_name = NULL;
-		}
-		if (*r->out.display_name) {
-			_mem_save_display_name_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.display_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, r->out.display_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, r->out.display_name));
-			if (ndr_get_array_length(ndr, r->out.display_name) > ndr_get_array_size(ndr, r->out.display_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, r->out.display_name), ndr_get_array_length(ndr, r->out.display_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, r->out.display_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->out.display_name, ndr_get_array_length(ndr, r->out.display_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_display_name_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_display_name_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_display_name_length));
-		if (_ptr_display_name_length) {
-			NDR_PULL_ALLOC(ndr, r->out.display_name_length);
-		} else {
-			r->out.display_name_length = NULL;
-		}
-		if (r->out.display_name_length) {
-			_mem_save_display_name_length_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.display_name_length, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.display_name_length));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_display_name_length_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_GetServiceDisplayNameW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_GetServiceDisplayNameW *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_GetServiceDisplayNameW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_GetServiceDisplayNameW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "service_name", r->in.service_name);
-		ndr->depth++;
-		if (r->in.service_name) {
-			ndr_print_string(ndr, "service_name", r->in.service_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "display_name_length", r->in.display_name_length);
-		ndr->depth++;
-		if (r->in.display_name_length) {
-			ndr_print_uint32(ndr, "display_name_length", *r->in.display_name_length);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_GetServiceDisplayNameW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "display_name", r->out.display_name);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "display_name", *r->out.display_name);
-		ndr->depth++;
-		if (*r->out.display_name) {
-			ndr_print_string(ndr, "display_name", *r->out.display_name);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "display_name_length", r->out.display_name_length);
-		ndr->depth++;
-		if (r->out.display_name_length) {
-			ndr_print_uint32(ndr, "display_name_length", *r->out.display_name_length);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_GetServiceKeyNameW(struct ndr_push *ndr, int flags, const struct svcctl_GetServiceKeyNameW *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.service_name));
-		if (r->in.service_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.service_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.service_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.service_name, ndr_charset_length(r->in.service_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.display_name_length));
-		if (r->in.display_name_length) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.display_name_length));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.key_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.key_name));
-		if (*r->out.key_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.key_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.key_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, *r->out.key_name, ndr_charset_length(*r->out.key_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.display_name_length));
-		if (r->out.display_name_length) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.display_name_length));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_GetServiceKeyNameW(struct ndr_pull *ndr, int flags, struct svcctl_GetServiceKeyNameW *r)
-{
-	uint32_t _ptr_service_name;
-	uint32_t _ptr_key_name;
-	uint32_t _ptr_display_name_length;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_service_name_0;
-	TALLOC_CTX *_mem_save_key_name_0;
-	TALLOC_CTX *_mem_save_key_name_1;
-	TALLOC_CTX *_mem_save_display_name_length_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_service_name));
-		if (_ptr_service_name) {
-			NDR_PULL_ALLOC(ndr, r->in.service_name);
-		} else {
-			r->in.service_name = NULL;
-		}
-		if (r->in.service_name) {
-			_mem_save_service_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.service_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.service_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.service_name));
-			if (ndr_get_array_length(ndr, &r->in.service_name) > ndr_get_array_size(ndr, &r->in.service_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.service_name), ndr_get_array_length(ndr, &r->in.service_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.service_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.service_name, ndr_get_array_length(ndr, &r->in.service_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_service_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_display_name_length));
-		if (_ptr_display_name_length) {
-			NDR_PULL_ALLOC(ndr, r->in.display_name_length);
-		} else {
-			r->in.display_name_length = NULL;
-		}
-		if (r->in.display_name_length) {
-			_mem_save_display_name_length_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.display_name_length, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.display_name_length));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_display_name_length_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.key_name);
-		ZERO_STRUCTP(r->out.key_name);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.key_name);
-		}
-		_mem_save_key_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.key_name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_key_name));
-		if (_ptr_key_name) {
-			NDR_PULL_ALLOC(ndr, *r->out.key_name);
-		} else {
-			*r->out.key_name = NULL;
-		}
-		if (*r->out.key_name) {
-			_mem_save_key_name_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.key_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, r->out.key_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, r->out.key_name));
-			if (ndr_get_array_length(ndr, r->out.key_name) > ndr_get_array_size(ndr, r->out.key_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, r->out.key_name), ndr_get_array_length(ndr, r->out.key_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, r->out.key_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->out.key_name, ndr_get_array_length(ndr, r->out.key_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_key_name_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_key_name_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_display_name_length));
-		if (_ptr_display_name_length) {
-			NDR_PULL_ALLOC(ndr, r->out.display_name_length);
-		} else {
-			r->out.display_name_length = NULL;
-		}
-		if (r->out.display_name_length) {
-			_mem_save_display_name_length_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.display_name_length, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.display_name_length));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_display_name_length_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_GetServiceKeyNameW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_GetServiceKeyNameW *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_GetServiceKeyNameW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_GetServiceKeyNameW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "service_name", r->in.service_name);
-		ndr->depth++;
-		if (r->in.service_name) {
-			ndr_print_string(ndr, "service_name", r->in.service_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "display_name_length", r->in.display_name_length);
-		ndr->depth++;
-		if (r->in.display_name_length) {
-			ndr_print_uint32(ndr, "display_name_length", *r->in.display_name_length);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_GetServiceKeyNameW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "key_name", r->out.key_name);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "key_name", *r->out.key_name);
-		ndr->depth++;
-		if (*r->out.key_name) {
-			ndr_print_string(ndr, "key_name", *r->out.key_name);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "display_name_length", r->out.display_name_length);
-		ndr->depth++;
-		if (r->out.display_name_length) {
-			ndr_print_uint32(ndr, "display_name_length", *r->out.display_name_length);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_SCSetServiceBitsA(struct ndr_push *ndr, int flags, const struct svcctl_SCSetServiceBitsA *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.bits));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.bitson));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.immediate));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_SCSetServiceBitsA(struct ndr_pull *ndr, int flags, struct svcctl_SCSetServiceBitsA *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.bits));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.bitson));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.immediate));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_SCSetServiceBitsA(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_SCSetServiceBitsA *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_SCSetServiceBitsA");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_SCSetServiceBitsA");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "bits", r->in.bits);
-		ndr_print_uint32(ndr, "bitson", r->in.bitson);
-		ndr_print_uint32(ndr, "immediate", r->in.immediate);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_SCSetServiceBitsA");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_ChangeServiceConfigA(struct ndr_push *ndr, int flags, const struct svcctl_ChangeServiceConfigA *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.start));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.error));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.binary_path));
-		if (r->in.binary_path) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.binary_path, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.binary_path, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.binary_path, ndr_charset_length(r->in.binary_path, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.load_order_group));
-		if (r->in.load_order_group) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.load_order_group, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.load_order_group, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.load_order_group, ndr_charset_length(r->in.load_order_group, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.dependencies));
-		if (r->in.dependencies) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dependencies, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dependencies, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.dependencies, ndr_charset_length(r->in.dependencies, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.service_start_name));
-		if (r->in.service_start_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.service_start_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.service_start_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.service_start_name, ndr_charset_length(r->in.service_start_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.password));
-		if (r->in.password) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.password, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.password, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.password, ndr_charset_length(r->in.password, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.display_name));
-		if (r->in.display_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.display_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.display_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.display_name, ndr_charset_length(r->in.display_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.tag_id == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.tag_id));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_ChangeServiceConfigA(struct ndr_pull *ndr, int flags, struct svcctl_ChangeServiceConfigA *r)
-{
-	uint32_t _ptr_binary_path;
-	uint32_t _ptr_load_order_group;
-	uint32_t _ptr_dependencies;
-	uint32_t _ptr_service_start_name;
-	uint32_t _ptr_password;
-	uint32_t _ptr_display_name;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_binary_path_0;
-	TALLOC_CTX *_mem_save_load_order_group_0;
-	TALLOC_CTX *_mem_save_tag_id_0;
-	TALLOC_CTX *_mem_save_dependencies_0;
-	TALLOC_CTX *_mem_save_service_start_name_0;
-	TALLOC_CTX *_mem_save_password_0;
-	TALLOC_CTX *_mem_save_display_name_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.type));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.start));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.error));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_binary_path));
-		if (_ptr_binary_path) {
-			NDR_PULL_ALLOC(ndr, r->in.binary_path);
-		} else {
-			r->in.binary_path = NULL;
-		}
-		if (r->in.binary_path) {
-			_mem_save_binary_path_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.binary_path, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.binary_path));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.binary_path));
-			if (ndr_get_array_length(ndr, &r->in.binary_path) > ndr_get_array_size(ndr, &r->in.binary_path)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.binary_path), ndr_get_array_length(ndr, &r->in.binary_path));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.binary_path), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.binary_path, ndr_get_array_length(ndr, &r->in.binary_path), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_binary_path_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_load_order_group));
-		if (_ptr_load_order_group) {
-			NDR_PULL_ALLOC(ndr, r->in.load_order_group);
-		} else {
-			r->in.load_order_group = NULL;
-		}
-		if (r->in.load_order_group) {
-			_mem_save_load_order_group_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.load_order_group, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.load_order_group));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.load_order_group));
-			if (ndr_get_array_length(ndr, &r->in.load_order_group) > ndr_get_array_size(ndr, &r->in.load_order_group)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.load_order_group), ndr_get_array_length(ndr, &r->in.load_order_group));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.load_order_group), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.load_order_group, ndr_get_array_length(ndr, &r->in.load_order_group), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_load_order_group_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dependencies));
-		if (_ptr_dependencies) {
-			NDR_PULL_ALLOC(ndr, r->in.dependencies);
-		} else {
-			r->in.dependencies = NULL;
-		}
-		if (r->in.dependencies) {
-			_mem_save_dependencies_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.dependencies, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.dependencies));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.dependencies));
-			if (ndr_get_array_length(ndr, &r->in.dependencies) > ndr_get_array_size(ndr, &r->in.dependencies)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.dependencies), ndr_get_array_length(ndr, &r->in.dependencies));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.dependencies), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.dependencies, ndr_get_array_length(ndr, &r->in.dependencies), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dependencies_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_service_start_name));
-		if (_ptr_service_start_name) {
-			NDR_PULL_ALLOC(ndr, r->in.service_start_name);
-		} else {
-			r->in.service_start_name = NULL;
-		}
-		if (r->in.service_start_name) {
-			_mem_save_service_start_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.service_start_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.service_start_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.service_start_name));
-			if (ndr_get_array_length(ndr, &r->in.service_start_name) > ndr_get_array_size(ndr, &r->in.service_start_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.service_start_name), ndr_get_array_length(ndr, &r->in.service_start_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.service_start_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.service_start_name, ndr_get_array_length(ndr, &r->in.service_start_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_service_start_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_password));
-		if (_ptr_password) {
-			NDR_PULL_ALLOC(ndr, r->in.password);
-		} else {
-			r->in.password = NULL;
-		}
-		if (r->in.password) {
-			_mem_save_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.password, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.password));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.password));
-			if (ndr_get_array_length(ndr, &r->in.password) > ndr_get_array_size(ndr, &r->in.password)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.password), ndr_get_array_length(ndr, &r->in.password));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.password), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.password, ndr_get_array_length(ndr, &r->in.password), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_password_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_display_name));
-		if (_ptr_display_name) {
-			NDR_PULL_ALLOC(ndr, r->in.display_name);
-		} else {
-			r->in.display_name = NULL;
-		}
-		if (r->in.display_name) {
-			_mem_save_display_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.display_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.display_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.display_name));
-			if (ndr_get_array_length(ndr, &r->in.display_name) > ndr_get_array_size(ndr, &r->in.display_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.display_name), ndr_get_array_length(ndr, &r->in.display_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.display_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.display_name, ndr_get_array_length(ndr, &r->in.display_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_display_name_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.tag_id);
-		ZERO_STRUCTP(r->out.tag_id);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.tag_id);
-		}
-		_mem_save_tag_id_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.tag_id, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.tag_id));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_tag_id_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_ChangeServiceConfigA(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_ChangeServiceConfigA *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_ChangeServiceConfigA");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_ChangeServiceConfigA");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "type", r->in.type);
-		ndr_print_uint32(ndr, "start", r->in.start);
-		ndr_print_uint32(ndr, "error", r->in.error);
-		ndr_print_ptr(ndr, "binary_path", r->in.binary_path);
-		ndr->depth++;
-		if (r->in.binary_path) {
-			ndr_print_string(ndr, "binary_path", r->in.binary_path);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "load_order_group", r->in.load_order_group);
-		ndr->depth++;
-		if (r->in.load_order_group) {
-			ndr_print_string(ndr, "load_order_group", r->in.load_order_group);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "dependencies", r->in.dependencies);
-		ndr->depth++;
-		if (r->in.dependencies) {
-			ndr_print_string(ndr, "dependencies", r->in.dependencies);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "service_start_name", r->in.service_start_name);
-		ndr->depth++;
-		if (r->in.service_start_name) {
-			ndr_print_string(ndr, "service_start_name", r->in.service_start_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "password", r->in.password);
-		ndr->depth++;
-		if (r->in.password) {
-			ndr_print_string(ndr, "password", r->in.password);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "display_name", r->in.display_name);
-		ndr->depth++;
-		if (r->in.display_name) {
-			ndr_print_string(ndr, "display_name", r->in.display_name);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_ChangeServiceConfigA");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "tag_id", r->out.tag_id);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "tag_id", *r->out.tag_id);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_CreateServiceA(struct ndr_push *ndr, int flags, const struct svcctl_CreateServiceA *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.ServiceName));
-		if (r->in.ServiceName) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.ServiceName, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.ServiceName, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.ServiceName, ndr_charset_length(r->in.ServiceName, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.DisplayName));
-		if (r->in.DisplayName) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.DisplayName, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.DisplayName, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.DisplayName, ndr_charset_length(r->in.DisplayName, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.desired_access));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.start_type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.error_control));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.binary_path));
-		if (r->in.binary_path) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.binary_path, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.binary_path, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.binary_path, ndr_charset_length(r->in.binary_path, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.LoadOrderGroupKey));
-		if (r->in.LoadOrderGroupKey) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.LoadOrderGroupKey, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.LoadOrderGroupKey, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.LoadOrderGroupKey, ndr_charset_length(r->in.LoadOrderGroupKey, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.dependencies));
-		if (r->in.dependencies) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dependencies, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.dependencies, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.dependencies, ndr_charset_length(r->in.dependencies, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.service_start_name));
-		if (r->in.service_start_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.service_start_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.service_start_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.service_start_name, ndr_charset_length(r->in.service_start_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.password));
-		if (r->in.password) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.password, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.password, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.password, ndr_charset_length(r->in.password, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.TagId));
-		if (r->out.TagId) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.TagId));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_CreateServiceA(struct ndr_pull *ndr, int flags, struct svcctl_CreateServiceA *r)
-{
-	uint32_t _ptr_ServiceName;
-	uint32_t _ptr_DisplayName;
-	uint32_t _ptr_binary_path;
-	uint32_t _ptr_LoadOrderGroupKey;
-	uint32_t _ptr_TagId;
-	uint32_t _ptr_dependencies;
-	uint32_t _ptr_service_start_name;
-	uint32_t _ptr_password;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_ServiceName_0;
-	TALLOC_CTX *_mem_save_DisplayName_0;
-	TALLOC_CTX *_mem_save_binary_path_0;
-	TALLOC_CTX *_mem_save_LoadOrderGroupKey_0;
-	TALLOC_CTX *_mem_save_TagId_0;
-	TALLOC_CTX *_mem_save_dependencies_0;
-	TALLOC_CTX *_mem_save_service_start_name_0;
-	TALLOC_CTX *_mem_save_password_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ServiceName));
-		if (_ptr_ServiceName) {
-			NDR_PULL_ALLOC(ndr, r->in.ServiceName);
-		} else {
-			r->in.ServiceName = NULL;
-		}
-		if (r->in.ServiceName) {
-			_mem_save_ServiceName_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.ServiceName, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.ServiceName));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.ServiceName));
-			if (ndr_get_array_length(ndr, &r->in.ServiceName) > ndr_get_array_size(ndr, &r->in.ServiceName)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.ServiceName), ndr_get_array_length(ndr, &r->in.ServiceName));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.ServiceName), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.ServiceName, ndr_get_array_length(ndr, &r->in.ServiceName), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ServiceName_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_DisplayName));
-		if (_ptr_DisplayName) {
-			NDR_PULL_ALLOC(ndr, r->in.DisplayName);
-		} else {
-			r->in.DisplayName = NULL;
-		}
-		if (r->in.DisplayName) {
-			_mem_save_DisplayName_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.DisplayName, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.DisplayName));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.DisplayName));
-			if (ndr_get_array_length(ndr, &r->in.DisplayName) > ndr_get_array_size(ndr, &r->in.DisplayName)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.DisplayName), ndr_get_array_length(ndr, &r->in.DisplayName));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.DisplayName), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.DisplayName, ndr_get_array_length(ndr, &r->in.DisplayName), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_DisplayName_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.desired_access));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.type));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.start_type));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.error_control));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_binary_path));
-		if (_ptr_binary_path) {
-			NDR_PULL_ALLOC(ndr, r->in.binary_path);
-		} else {
-			r->in.binary_path = NULL;
-		}
-		if (r->in.binary_path) {
-			_mem_save_binary_path_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.binary_path, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.binary_path));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.binary_path));
-			if (ndr_get_array_length(ndr, &r->in.binary_path) > ndr_get_array_size(ndr, &r->in.binary_path)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.binary_path), ndr_get_array_length(ndr, &r->in.binary_path));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.binary_path), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.binary_path, ndr_get_array_length(ndr, &r->in.binary_path), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_binary_path_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_LoadOrderGroupKey));
-		if (_ptr_LoadOrderGroupKey) {
-			NDR_PULL_ALLOC(ndr, r->in.LoadOrderGroupKey);
-		} else {
-			r->in.LoadOrderGroupKey = NULL;
-		}
-		if (r->in.LoadOrderGroupKey) {
-			_mem_save_LoadOrderGroupKey_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.LoadOrderGroupKey, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.LoadOrderGroupKey));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.LoadOrderGroupKey));
-			if (ndr_get_array_length(ndr, &r->in.LoadOrderGroupKey) > ndr_get_array_size(ndr, &r->in.LoadOrderGroupKey)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.LoadOrderGroupKey), ndr_get_array_length(ndr, &r->in.LoadOrderGroupKey));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.LoadOrderGroupKey), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.LoadOrderGroupKey, ndr_get_array_length(ndr, &r->in.LoadOrderGroupKey), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_LoadOrderGroupKey_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dependencies));
-		if (_ptr_dependencies) {
-			NDR_PULL_ALLOC(ndr, r->in.dependencies);
-		} else {
-			r->in.dependencies = NULL;
-		}
-		if (r->in.dependencies) {
-			_mem_save_dependencies_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.dependencies, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.dependencies));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.dependencies));
-			if (ndr_get_array_length(ndr, &r->in.dependencies) > ndr_get_array_size(ndr, &r->in.dependencies)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.dependencies), ndr_get_array_length(ndr, &r->in.dependencies));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.dependencies), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.dependencies, ndr_get_array_length(ndr, &r->in.dependencies), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dependencies_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_service_start_name));
-		if (_ptr_service_start_name) {
-			NDR_PULL_ALLOC(ndr, r->in.service_start_name);
-		} else {
-			r->in.service_start_name = NULL;
-		}
-		if (r->in.service_start_name) {
-			_mem_save_service_start_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.service_start_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.service_start_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.service_start_name));
-			if (ndr_get_array_length(ndr, &r->in.service_start_name) > ndr_get_array_size(ndr, &r->in.service_start_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.service_start_name), ndr_get_array_length(ndr, &r->in.service_start_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.service_start_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.service_start_name, ndr_get_array_length(ndr, &r->in.service_start_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_service_start_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_password));
-		if (_ptr_password) {
-			NDR_PULL_ALLOC(ndr, r->in.password);
-		} else {
-			r->in.password = NULL;
-		}
-		if (r->in.password) {
-			_mem_save_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.password, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.password));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.password));
-			if (ndr_get_array_length(ndr, &r->in.password) > ndr_get_array_size(ndr, &r->in.password)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.password), ndr_get_array_length(ndr, &r->in.password));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.password), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.password, ndr_get_array_length(ndr, &r->in.password), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_password_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_TagId));
-		if (_ptr_TagId) {
-			NDR_PULL_ALLOC(ndr, r->out.TagId);
-		} else {
-			r->out.TagId = NULL;
-		}
-		if (r->out.TagId) {
-			_mem_save_TagId_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.TagId, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.TagId));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_TagId_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_CreateServiceA(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_CreateServiceA *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_CreateServiceA");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_CreateServiceA");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "ServiceName", r->in.ServiceName);
-		ndr->depth++;
-		if (r->in.ServiceName) {
-			ndr_print_string(ndr, "ServiceName", r->in.ServiceName);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "DisplayName", r->in.DisplayName);
-		ndr->depth++;
-		if (r->in.DisplayName) {
-			ndr_print_string(ndr, "DisplayName", r->in.DisplayName);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "desired_access", r->in.desired_access);
-		ndr_print_uint32(ndr, "type", r->in.type);
-		ndr_print_uint32(ndr, "start_type", r->in.start_type);
-		ndr_print_uint32(ndr, "error_control", r->in.error_control);
-		ndr_print_ptr(ndr, "binary_path", r->in.binary_path);
-		ndr->depth++;
-		if (r->in.binary_path) {
-			ndr_print_string(ndr, "binary_path", r->in.binary_path);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "LoadOrderGroupKey", r->in.LoadOrderGroupKey);
-		ndr->depth++;
-		if (r->in.LoadOrderGroupKey) {
-			ndr_print_string(ndr, "LoadOrderGroupKey", r->in.LoadOrderGroupKey);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "dependencies", r->in.dependencies);
-		ndr->depth++;
-		if (r->in.dependencies) {
-			ndr_print_string(ndr, "dependencies", r->in.dependencies);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "service_start_name", r->in.service_start_name);
-		ndr->depth++;
-		if (r->in.service_start_name) {
-			ndr_print_string(ndr, "service_start_name", r->in.service_start_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "password", r->in.password);
-		ndr->depth++;
-		if (r->in.password) {
-			ndr_print_string(ndr, "password", r->in.password);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_CreateServiceA");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "TagId", r->out.TagId);
-		ndr->depth++;
-		if (r->out.TagId) {
-			ndr_print_uint32(ndr, "TagId", *r->out.TagId);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_EnumDependentServicesA(struct ndr_push *ndr, int flags, const struct svcctl_EnumDependentServicesA *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.service == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.service));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.state));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buf_size));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.service_status));
-		if (r->out.service_status) {
-			NDR_CHECK(ndr_push_ENUM_SERVICE_STATUS(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.service_status));
-		}
-		if (r->out.bytes_needed == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.bytes_needed));
-		if (r->out.services_returned == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.services_returned));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_EnumDependentServicesA(struct ndr_pull *ndr, int flags, struct svcctl_EnumDependentServicesA *r)
-{
-	uint32_t _ptr_service_status;
-	TALLOC_CTX *_mem_save_service_0;
-	TALLOC_CTX *_mem_save_service_status_0;
-	TALLOC_CTX *_mem_save_bytes_needed_0;
-	TALLOC_CTX *_mem_save_services_returned_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.service);
-		}
-		_mem_save_service_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.service, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.service));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_service_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.state));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.buf_size));
-		NDR_PULL_ALLOC(ndr, r->out.bytes_needed);
-		ZERO_STRUCTP(r->out.bytes_needed);
-		NDR_PULL_ALLOC(ndr, r->out.services_returned);
-		ZERO_STRUCTP(r->out.services_returned);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_service_status));
-		if (_ptr_service_status) {
-			NDR_PULL_ALLOC(ndr, r->out.service_status);
-		} else {
-			r->out.service_status = NULL;
-		}
-		if (r->out.service_status) {
-			_mem_save_service_status_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.service_status, 0);
-			NDR_CHECK(ndr_pull_ENUM_SERVICE_STATUS(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.service_status));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_service_status_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.bytes_needed);
-		}
-		_mem_save_bytes_needed_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.bytes_needed, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.bytes_needed));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_bytes_needed_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.services_returned);
-		}
-		_mem_save_services_returned_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.services_returned, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.services_returned));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_services_returned_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_EnumDependentServicesA(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_EnumDependentServicesA *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_EnumDependentServicesA");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_EnumDependentServicesA");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "service", r->in.service);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "service", r->in.service);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "state", r->in.state);
-		ndr_print_uint32(ndr, "buf_size", r->in.buf_size);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_EnumDependentServicesA");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "service_status", r->out.service_status);
-		ndr->depth++;
-		if (r->out.service_status) {
-			ndr_print_ENUM_SERVICE_STATUS(ndr, "service_status", r->out.service_status);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "bytes_needed", r->out.bytes_needed);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "bytes_needed", *r->out.bytes_needed);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "services_returned", r->out.services_returned);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "services_returned", *r->out.services_returned);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_EnumServicesStatusA(struct ndr_push *ndr, int flags, const struct svcctl_EnumServicesStatusA *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.state));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buf_size));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.resume_handle));
-		if (r->in.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buf_size));
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->out.service, r->in.buf_size));
-		if (r->out.bytes_needed == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.bytes_needed));
-		if (r->out.services_returned == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.services_returned));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.resume_handle));
-		if (r->out.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_EnumServicesStatusA(struct ndr_pull *ndr, int flags, struct svcctl_EnumServicesStatusA *r)
-{
-	uint32_t _ptr_resume_handle;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_bytes_needed_0;
-	TALLOC_CTX *_mem_save_services_returned_0;
-	TALLOC_CTX *_mem_save_resume_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.type));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.state));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.buf_size));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->in.resume_handle);
-		} else {
-			r->in.resume_handle = NULL;
-		}
-		if (r->in.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.bytes_needed);
-		ZERO_STRUCTP(r->out.bytes_needed);
-		NDR_PULL_ALLOC(ndr, r->out.services_returned);
-		ZERO_STRUCTP(r->out.services_returned);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->out.service));
-		NDR_PULL_ALLOC_N(ndr, r->out.service, ndr_get_array_size(ndr, &r->out.service));
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.service, ndr_get_array_size(ndr, &r->out.service)));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.bytes_needed);
-		}
-		_mem_save_bytes_needed_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.bytes_needed, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.bytes_needed));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_bytes_needed_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.services_returned);
-		}
-		_mem_save_services_returned_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.services_returned, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.services_returned));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_services_returned_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		} else {
-			r->out.resume_handle = NULL;
-		}
-		if (r->out.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-		if (r->out.service) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->out.service, r->in.buf_size));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_EnumServicesStatusA(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_EnumServicesStatusA *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_EnumServicesStatusA");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_EnumServicesStatusA");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "type", r->in.type);
-		ndr_print_uint32(ndr, "state", r->in.state);
-		ndr_print_uint32(ndr, "buf_size", r->in.buf_size);
-		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
-		ndr->depth++;
-		if (r->in.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_EnumServicesStatusA");
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "service", r->out.service, r->in.buf_size);
-		ndr_print_ptr(ndr, "bytes_needed", r->out.bytes_needed);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "bytes_needed", *r->out.bytes_needed);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "services_returned", r->out.services_returned);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "services_returned", *r->out.services_returned);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
-		ndr->depth++;
-		if (r->out.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_OpenSCManagerA(struct ndr_push *ndr, int flags, const struct svcctl_OpenSCManagerA *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.MachineName));
-		if (r->in.MachineName) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.MachineName, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.MachineName, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.MachineName, ndr_charset_length(r->in.MachineName, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.DatabaseName));
-		if (r->in.DatabaseName) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.DatabaseName, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.DatabaseName, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.DatabaseName, ndr_charset_length(r->in.DatabaseName, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_OpenSCManagerA(struct ndr_pull *ndr, int flags, struct svcctl_OpenSCManagerA *r)
-{
-	uint32_t _ptr_MachineName;
-	uint32_t _ptr_DatabaseName;
-	TALLOC_CTX *_mem_save_MachineName_0;
-	TALLOC_CTX *_mem_save_DatabaseName_0;
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_MachineName));
-		if (_ptr_MachineName) {
-			NDR_PULL_ALLOC(ndr, r->in.MachineName);
-		} else {
-			r->in.MachineName = NULL;
-		}
-		if (r->in.MachineName) {
-			_mem_save_MachineName_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.MachineName, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.MachineName));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.MachineName));
-			if (ndr_get_array_length(ndr, &r->in.MachineName) > ndr_get_array_size(ndr, &r->in.MachineName)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.MachineName), ndr_get_array_length(ndr, &r->in.MachineName));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.MachineName), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.MachineName, ndr_get_array_length(ndr, &r->in.MachineName), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_MachineName_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_DatabaseName));
-		if (_ptr_DatabaseName) {
-			NDR_PULL_ALLOC(ndr, r->in.DatabaseName);
-		} else {
-			r->in.DatabaseName = NULL;
-		}
-		if (r->in.DatabaseName) {
-			_mem_save_DatabaseName_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.DatabaseName, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.DatabaseName));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.DatabaseName));
-			if (ndr_get_array_length(ndr, &r->in.DatabaseName) > ndr_get_array_size(ndr, &r->in.DatabaseName)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.DatabaseName), ndr_get_array_length(ndr, &r->in.DatabaseName));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.DatabaseName), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.DatabaseName, ndr_get_array_length(ndr, &r->in.DatabaseName), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_DatabaseName_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.handle);
-		ZERO_STRUCTP(r->out.handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_OpenSCManagerA(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_OpenSCManagerA *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_OpenSCManagerA");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_OpenSCManagerA");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "MachineName", r->in.MachineName);
-		ndr->depth++;
-		if (r->in.MachineName) {
-			ndr_print_string(ndr, "MachineName", r->in.MachineName);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "DatabaseName", r->in.DatabaseName);
-		ndr->depth++;
-		if (r->in.DatabaseName) {
-			ndr_print_string(ndr, "DatabaseName", r->in.DatabaseName);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_OpenSCManagerA");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->out.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->out.handle);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_OpenServiceA(struct ndr_push *ndr, int flags, const struct svcctl_OpenServiceA *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.scmanager_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.scmanager_handle));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.ServiceName));
-		if (r->in.ServiceName) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.ServiceName, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.ServiceName, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.ServiceName, ndr_charset_length(r->in.ServiceName, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_OpenServiceA(struct ndr_pull *ndr, int flags, struct svcctl_OpenServiceA *r)
-{
-	uint32_t _ptr_ServiceName;
-	TALLOC_CTX *_mem_save_scmanager_handle_0;
-	TALLOC_CTX *_mem_save_ServiceName_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.scmanager_handle);
-		}
-		_mem_save_scmanager_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.scmanager_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.scmanager_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_scmanager_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ServiceName));
-		if (_ptr_ServiceName) {
-			NDR_PULL_ALLOC(ndr, r->in.ServiceName);
-		} else {
-			r->in.ServiceName = NULL;
-		}
-		if (r->in.ServiceName) {
-			_mem_save_ServiceName_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.ServiceName, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.ServiceName));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.ServiceName));
-			if (ndr_get_array_length(ndr, &r->in.ServiceName) > ndr_get_array_size(ndr, &r->in.ServiceName)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.ServiceName), ndr_get_array_length(ndr, &r->in.ServiceName));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.ServiceName), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.ServiceName, ndr_get_array_length(ndr, &r->in.ServiceName), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ServiceName_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_OpenServiceA(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_OpenServiceA *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_OpenServiceA");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_OpenServiceA");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "scmanager_handle", r->in.scmanager_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "scmanager_handle", r->in.scmanager_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "ServiceName", r->in.ServiceName);
-		ndr->depth++;
-		if (r->in.ServiceName) {
-			ndr_print_string(ndr, "ServiceName", r->in.ServiceName);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_OpenServiceA");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_QueryServiceConfigA(struct ndr_push *ndr, int flags, const struct svcctl_QueryServiceConfigA *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buf_size));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->out.query, r->in.buf_size));
-		if (r->out.bytes_needed == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.bytes_needed));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_QueryServiceConfigA(struct ndr_pull *ndr, int flags, struct svcctl_QueryServiceConfigA *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_bytes_needed_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.buf_size));
-		NDR_PULL_ALLOC(ndr, r->out.bytes_needed);
-		ZERO_STRUCTP(r->out.bytes_needed);
-	}
-	if (flags & NDR_OUT) {
-		NDR_PULL_ALLOC_N(ndr, r->out.query, r->in.buf_size);
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.query, r->in.buf_size));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.bytes_needed);
-		}
-		_mem_save_bytes_needed_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.bytes_needed, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.bytes_needed));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_bytes_needed_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_QueryServiceConfigA(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_QueryServiceConfigA *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_QueryServiceConfigA");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_QueryServiceConfigA");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "buf_size", r->in.buf_size);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_QueryServiceConfigA");
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "query", r->out.query, r->in.buf_size);
-		ndr_print_ptr(ndr, "bytes_needed", r->out.bytes_needed);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "bytes_needed", *r->out.bytes_needed);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_QueryServiceLockStatusA(struct ndr_push *ndr, int flags, const struct svcctl_QueryServiceLockStatusA *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buf_size));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.lock_status == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_SERVICE_LOCK_STATUS(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.lock_status));
-		if (r->out.required_buf_size == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.required_buf_size));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_QueryServiceLockStatusA(struct ndr_pull *ndr, int flags, struct svcctl_QueryServiceLockStatusA *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_lock_status_0;
-	TALLOC_CTX *_mem_save_required_buf_size_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.buf_size));
-		NDR_PULL_ALLOC(ndr, r->out.lock_status);
-		ZERO_STRUCTP(r->out.lock_status);
-		NDR_PULL_ALLOC(ndr, r->out.required_buf_size);
-		ZERO_STRUCTP(r->out.required_buf_size);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.lock_status);
-		}
-		_mem_save_lock_status_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.lock_status, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_SERVICE_LOCK_STATUS(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.lock_status));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_lock_status_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.required_buf_size);
-		}
-		_mem_save_required_buf_size_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.required_buf_size, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.required_buf_size));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_required_buf_size_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_QueryServiceLockStatusA(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_QueryServiceLockStatusA *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_QueryServiceLockStatusA");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_QueryServiceLockStatusA");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "buf_size", r->in.buf_size);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_QueryServiceLockStatusA");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "lock_status", r->out.lock_status);
-		ndr->depth++;
-		ndr_print_SERVICE_LOCK_STATUS(ndr, "lock_status", r->out.lock_status);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "required_buf_size", r->out.required_buf_size);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "required_buf_size", *r->out.required_buf_size);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_StartServiceA(struct ndr_push *ndr, int flags, const struct svcctl_StartServiceA *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.NumArgs));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.Arguments));
-		if (r->in.Arguments) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.Arguments, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.Arguments, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.Arguments, ndr_charset_length(r->in.Arguments, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_StartServiceA(struct ndr_pull *ndr, int flags, struct svcctl_StartServiceA *r)
-{
-	uint32_t _ptr_Arguments;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_Arguments_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.NumArgs));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_Arguments));
-		if (_ptr_Arguments) {
-			NDR_PULL_ALLOC(ndr, r->in.Arguments);
-		} else {
-			r->in.Arguments = NULL;
-		}
-		if (r->in.Arguments) {
-			_mem_save_Arguments_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.Arguments, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.Arguments));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.Arguments));
-			if (ndr_get_array_length(ndr, &r->in.Arguments) > ndr_get_array_size(ndr, &r->in.Arguments)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.Arguments), ndr_get_array_length(ndr, &r->in.Arguments));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.Arguments), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.Arguments, ndr_get_array_length(ndr, &r->in.Arguments), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_Arguments_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_StartServiceA(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_StartServiceA *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_StartServiceA");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_StartServiceA");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "NumArgs", r->in.NumArgs);
-		ndr_print_ptr(ndr, "Arguments", r->in.Arguments);
-		ndr->depth++;
-		if (r->in.Arguments) {
-			ndr_print_string(ndr, "Arguments", r->in.Arguments);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_StartServiceA");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_GetServiceDisplayNameA(struct ndr_push *ndr, int flags, const struct svcctl_GetServiceDisplayNameA *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.service_name));
-		if (r->in.service_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.service_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.service_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.service_name, ndr_charset_length(r->in.service_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.display_name_length));
-		if (r->in.display_name_length) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.display_name_length));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.display_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.display_name));
-		if (*r->out.display_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.display_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.display_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, *r->out.display_name, ndr_charset_length(*r->out.display_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.display_name_length));
-		if (r->out.display_name_length) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.display_name_length));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_GetServiceDisplayNameA(struct ndr_pull *ndr, int flags, struct svcctl_GetServiceDisplayNameA *r)
-{
-	uint32_t _ptr_service_name;
-	uint32_t _ptr_display_name;
-	uint32_t _ptr_display_name_length;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_service_name_0;
-	TALLOC_CTX *_mem_save_display_name_0;
-	TALLOC_CTX *_mem_save_display_name_1;
-	TALLOC_CTX *_mem_save_display_name_length_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_service_name));
-		if (_ptr_service_name) {
-			NDR_PULL_ALLOC(ndr, r->in.service_name);
-		} else {
-			r->in.service_name = NULL;
-		}
-		if (r->in.service_name) {
-			_mem_save_service_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.service_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.service_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.service_name));
-			if (ndr_get_array_length(ndr, &r->in.service_name) > ndr_get_array_size(ndr, &r->in.service_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.service_name), ndr_get_array_length(ndr, &r->in.service_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.service_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.service_name, ndr_get_array_length(ndr, &r->in.service_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_service_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_display_name_length));
-		if (_ptr_display_name_length) {
-			NDR_PULL_ALLOC(ndr, r->in.display_name_length);
-		} else {
-			r->in.display_name_length = NULL;
-		}
-		if (r->in.display_name_length) {
-			_mem_save_display_name_length_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.display_name_length, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.display_name_length));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_display_name_length_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.display_name);
-		ZERO_STRUCTP(r->out.display_name);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.display_name);
-		}
-		_mem_save_display_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.display_name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_display_name));
-		if (_ptr_display_name) {
-			NDR_PULL_ALLOC(ndr, *r->out.display_name);
-		} else {
-			*r->out.display_name = NULL;
-		}
-		if (*r->out.display_name) {
-			_mem_save_display_name_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.display_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, r->out.display_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, r->out.display_name));
-			if (ndr_get_array_length(ndr, r->out.display_name) > ndr_get_array_size(ndr, r->out.display_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, r->out.display_name), ndr_get_array_length(ndr, r->out.display_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, r->out.display_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->out.display_name, ndr_get_array_length(ndr, r->out.display_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_display_name_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_display_name_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_display_name_length));
-		if (_ptr_display_name_length) {
-			NDR_PULL_ALLOC(ndr, r->out.display_name_length);
-		} else {
-			r->out.display_name_length = NULL;
-		}
-		if (r->out.display_name_length) {
-			_mem_save_display_name_length_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.display_name_length, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.display_name_length));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_display_name_length_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_GetServiceDisplayNameA(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_GetServiceDisplayNameA *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_GetServiceDisplayNameA");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_GetServiceDisplayNameA");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "service_name", r->in.service_name);
-		ndr->depth++;
-		if (r->in.service_name) {
-			ndr_print_string(ndr, "service_name", r->in.service_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "display_name_length", r->in.display_name_length);
-		ndr->depth++;
-		if (r->in.display_name_length) {
-			ndr_print_uint32(ndr, "display_name_length", *r->in.display_name_length);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_GetServiceDisplayNameA");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "display_name", r->out.display_name);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "display_name", *r->out.display_name);
-		ndr->depth++;
-		if (*r->out.display_name) {
-			ndr_print_string(ndr, "display_name", *r->out.display_name);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "display_name_length", r->out.display_name_length);
-		ndr->depth++;
-		if (r->out.display_name_length) {
-			ndr_print_uint32(ndr, "display_name_length", *r->out.display_name_length);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_GetServiceKeyNameA(struct ndr_push *ndr, int flags, const struct svcctl_GetServiceKeyNameA *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.service_name));
-		if (r->in.service_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.service_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.service_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.service_name, ndr_charset_length(r->in.service_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.display_name_length));
-		if (r->in.display_name_length) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.display_name_length));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.key_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.key_name));
-		if (*r->out.key_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.key_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.key_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, *r->out.key_name, ndr_charset_length(*r->out.key_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.display_name_length));
-		if (r->out.display_name_length) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.display_name_length));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_GetServiceKeyNameA(struct ndr_pull *ndr, int flags, struct svcctl_GetServiceKeyNameA *r)
-{
-	uint32_t _ptr_service_name;
-	uint32_t _ptr_key_name;
-	uint32_t _ptr_display_name_length;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_service_name_0;
-	TALLOC_CTX *_mem_save_key_name_0;
-	TALLOC_CTX *_mem_save_key_name_1;
-	TALLOC_CTX *_mem_save_display_name_length_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_service_name));
-		if (_ptr_service_name) {
-			NDR_PULL_ALLOC(ndr, r->in.service_name);
-		} else {
-			r->in.service_name = NULL;
-		}
-		if (r->in.service_name) {
-			_mem_save_service_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.service_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.service_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.service_name));
-			if (ndr_get_array_length(ndr, &r->in.service_name) > ndr_get_array_size(ndr, &r->in.service_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.service_name), ndr_get_array_length(ndr, &r->in.service_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.service_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.service_name, ndr_get_array_length(ndr, &r->in.service_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_service_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_display_name_length));
-		if (_ptr_display_name_length) {
-			NDR_PULL_ALLOC(ndr, r->in.display_name_length);
-		} else {
-			r->in.display_name_length = NULL;
-		}
-		if (r->in.display_name_length) {
-			_mem_save_display_name_length_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.display_name_length, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.display_name_length));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_display_name_length_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.key_name);
-		ZERO_STRUCTP(r->out.key_name);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.key_name);
-		}
-		_mem_save_key_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.key_name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_key_name));
-		if (_ptr_key_name) {
-			NDR_PULL_ALLOC(ndr, *r->out.key_name);
-		} else {
-			*r->out.key_name = NULL;
-		}
-		if (*r->out.key_name) {
-			_mem_save_key_name_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.key_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, r->out.key_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, r->out.key_name));
-			if (ndr_get_array_length(ndr, r->out.key_name) > ndr_get_array_size(ndr, r->out.key_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, r->out.key_name), ndr_get_array_length(ndr, r->out.key_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, r->out.key_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->out.key_name, ndr_get_array_length(ndr, r->out.key_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_key_name_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_key_name_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_display_name_length));
-		if (_ptr_display_name_length) {
-			NDR_PULL_ALLOC(ndr, r->out.display_name_length);
-		} else {
-			r->out.display_name_length = NULL;
-		}
-		if (r->out.display_name_length) {
-			_mem_save_display_name_length_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.display_name_length, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.display_name_length));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_display_name_length_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_GetServiceKeyNameA(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_GetServiceKeyNameA *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_GetServiceKeyNameA");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_GetServiceKeyNameA");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "service_name", r->in.service_name);
-		ndr->depth++;
-		if (r->in.service_name) {
-			ndr_print_string(ndr, "service_name", r->in.service_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "display_name_length", r->in.display_name_length);
-		ndr->depth++;
-		if (r->in.display_name_length) {
-			ndr_print_uint32(ndr, "display_name_length", *r->in.display_name_length);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_GetServiceKeyNameA");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "key_name", r->out.key_name);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "key_name", *r->out.key_name);
-		ndr->depth++;
-		if (*r->out.key_name) {
-			ndr_print_string(ndr, "key_name", *r->out.key_name);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "display_name_length", r->out.display_name_length);
-		ndr->depth++;
-		if (r->out.display_name_length) {
-			ndr_print_uint32(ndr, "display_name_length", *r->out.display_name_length);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_GetCurrentGroupeStateW(struct ndr_push *ndr, int flags, const struct svcctl_GetCurrentGroupeStateW *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_GetCurrentGroupeStateW(struct ndr_pull *ndr, int flags, struct svcctl_GetCurrentGroupeStateW *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_GetCurrentGroupeStateW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_GetCurrentGroupeStateW *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_GetCurrentGroupeStateW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_GetCurrentGroupeStateW");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_GetCurrentGroupeStateW");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_EnumServiceGroupW(struct ndr_push *ndr, int flags, const struct svcctl_EnumServiceGroupW *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_EnumServiceGroupW(struct ndr_pull *ndr, int flags, struct svcctl_EnumServiceGroupW *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_EnumServiceGroupW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_EnumServiceGroupW *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_EnumServiceGroupW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_EnumServiceGroupW");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_EnumServiceGroupW");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_ChangeServiceConfig2A(struct ndr_push *ndr, int flags, const struct svcctl_ChangeServiceConfig2A *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.info_level));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.info));
-		if (r->in.info) {
-			NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, *r->in.info));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_ChangeServiceConfig2A(struct ndr_pull *ndr, int flags, struct svcctl_ChangeServiceConfig2A *r)
-{
-	uint32_t _ptr_info;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.info_level));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, r->in.info);
-		} else {
-			r->in.info = NULL;
-		}
-		if (r->in.info) {
-			_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.info, 0);
-			NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, r->in.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_ChangeServiceConfig2A(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_ChangeServiceConfig2A *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_ChangeServiceConfig2A");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_ChangeServiceConfig2A");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "info_level", r->in.info_level);
-		ndr_print_ptr(ndr, "info", r->in.info);
-		ndr->depth++;
-		if (r->in.info) {
-			ndr_print_uint8(ndr, "info", *r->in.info);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_ChangeServiceConfig2A");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_ChangeServiceConfig2W(struct ndr_push *ndr, int flags, const struct svcctl_ChangeServiceConfig2W *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.info_level));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.info));
-		if (r->in.info) {
-			NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, *r->in.info));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_ChangeServiceConfig2W(struct ndr_pull *ndr, int flags, struct svcctl_ChangeServiceConfig2W *r)
-{
-	uint32_t _ptr_info;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_info_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.info_level));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, r->in.info);
-		} else {
-			r->in.info = NULL;
-		}
-		if (r->in.info) {
-			_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.info, 0);
-			NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, r->in.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_ChangeServiceConfig2W(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_ChangeServiceConfig2W *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_ChangeServiceConfig2W");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_ChangeServiceConfig2W");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "info_level", r->in.info_level);
-		ndr_print_ptr(ndr, "info", r->in.info);
-		ndr->depth++;
-		if (r->in.info) {
-			ndr_print_uint8(ndr, "info", *r->in.info);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_ChangeServiceConfig2W");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_QueryServiceConfig2A(struct ndr_push *ndr, int flags, const struct svcctl_QueryServiceConfig2A *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.info_level));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buf_size));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->out.buffer, r->in.buf_size));
-		if (r->out.bytes_needed == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.bytes_needed));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_QueryServiceConfig2A(struct ndr_pull *ndr, int flags, struct svcctl_QueryServiceConfig2A *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_bytes_needed_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.info_level));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.buf_size));
-		NDR_PULL_ALLOC(ndr, r->out.bytes_needed);
-		ZERO_STRUCTP(r->out.bytes_needed);
-	}
-	if (flags & NDR_OUT) {
-		NDR_PULL_ALLOC_N(ndr, r->out.buffer, r->in.buf_size);
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.buffer, r->in.buf_size));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.bytes_needed);
-		}
-		_mem_save_bytes_needed_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.bytes_needed, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.bytes_needed));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_bytes_needed_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_QueryServiceConfig2A(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_QueryServiceConfig2A *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_QueryServiceConfig2A");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_QueryServiceConfig2A");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "info_level", r->in.info_level);
-		ndr_print_uint32(ndr, "buf_size", r->in.buf_size);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_QueryServiceConfig2A");
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "buffer", r->out.buffer, r->in.buf_size);
-		ndr_print_ptr(ndr, "bytes_needed", r->out.bytes_needed);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "bytes_needed", *r->out.bytes_needed);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_QueryServiceConfig2W(struct ndr_push *ndr, int flags, const struct svcctl_QueryServiceConfig2W *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.info_level));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buf_size));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->out.buffer, r->in.buf_size));
-		if (r->out.bytes_needed == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.bytes_needed));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_QueryServiceConfig2W(struct ndr_pull *ndr, int flags, struct svcctl_QueryServiceConfig2W *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_bytes_needed_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.info_level));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.buf_size));
-		NDR_PULL_ALLOC(ndr, r->out.bytes_needed);
-		ZERO_STRUCTP(r->out.bytes_needed);
-	}
-	if (flags & NDR_OUT) {
-		NDR_PULL_ALLOC_N(ndr, r->out.buffer, r->in.buf_size);
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.buffer, r->in.buf_size));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.bytes_needed);
-		}
-		_mem_save_bytes_needed_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.bytes_needed, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.bytes_needed));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_bytes_needed_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_QueryServiceConfig2W(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_QueryServiceConfig2W *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_QueryServiceConfig2W");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_QueryServiceConfig2W");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "info_level", r->in.info_level);
-		ndr_print_uint32(ndr, "buf_size", r->in.buf_size);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_QueryServiceConfig2W");
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "buffer", r->out.buffer, r->in.buf_size);
-		ndr_print_ptr(ndr, "bytes_needed", r->out.bytes_needed);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "bytes_needed", *r->out.bytes_needed);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_QueryServiceStatusEx(struct ndr_push *ndr, int flags, const struct svcctl_QueryServiceStatusEx *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.info_level));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buf_size));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->out.buffer, r->in.buf_size));
-		if (r->out.bytes_needed == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.bytes_needed));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_QueryServiceStatusEx(struct ndr_pull *ndr, int flags, struct svcctl_QueryServiceStatusEx *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_bytes_needed_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.info_level));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.buf_size));
-		NDR_PULL_ALLOC(ndr, r->out.bytes_needed);
-		ZERO_STRUCTP(r->out.bytes_needed);
-	}
-	if (flags & NDR_OUT) {
-		NDR_PULL_ALLOC_N(ndr, r->out.buffer, r->in.buf_size);
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.buffer, r->in.buf_size));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.bytes_needed);
-		}
-		_mem_save_bytes_needed_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.bytes_needed, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.bytes_needed));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_bytes_needed_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_QueryServiceStatusEx(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_QueryServiceStatusEx *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_QueryServiceStatusEx");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_QueryServiceStatusEx");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "info_level", r->in.info_level);
-		ndr_print_uint32(ndr, "buf_size", r->in.buf_size);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_QueryServiceStatusEx");
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "buffer", r->out.buffer, r->in.buf_size);
-		ndr_print_ptr(ndr, "bytes_needed", r->out.bytes_needed);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "bytes_needed", *r->out.bytes_needed);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_EnumServicesStatusExA(struct ndr_push *ndr, int flags, const struct EnumServicesStatusExA *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.scmanager == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.scmanager));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.info_level));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.state));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buf_size));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.resume_handle));
-		if (r->in.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->out.services, r->in.buf_size));
-		if (r->out.bytes_needed == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.bytes_needed));
-		if (r->out.service_returned == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.service_returned));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.resume_handle));
-		if (r->out.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		}
-		if (r->out.group_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.group_name));
-		if (*r->out.group_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.group_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.group_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, *r->out.group_name, ndr_charset_length(*r->out.group_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_EnumServicesStatusExA(struct ndr_pull *ndr, int flags, struct EnumServicesStatusExA *r)
-{
-	uint32_t _ptr_resume_handle;
-	uint32_t _ptr_group_name;
-	TALLOC_CTX *_mem_save_scmanager_0;
-	TALLOC_CTX *_mem_save_bytes_needed_0;
-	TALLOC_CTX *_mem_save_service_returned_0;
-	TALLOC_CTX *_mem_save_resume_handle_0;
-	TALLOC_CTX *_mem_save_group_name_0;
-	TALLOC_CTX *_mem_save_group_name_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.scmanager);
-		}
-		_mem_save_scmanager_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.scmanager, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.scmanager));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_scmanager_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.info_level));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.type));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.state));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.buf_size));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->in.resume_handle);
-		} else {
-			r->in.resume_handle = NULL;
-		}
-		if (r->in.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.bytes_needed);
-		ZERO_STRUCTP(r->out.bytes_needed);
-		NDR_PULL_ALLOC(ndr, r->out.service_returned);
-		ZERO_STRUCTP(r->out.service_returned);
-		NDR_PULL_ALLOC(ndr, r->out.group_name);
-		ZERO_STRUCTP(r->out.group_name);
-	}
-	if (flags & NDR_OUT) {
-		NDR_PULL_ALLOC_N(ndr, r->out.services, r->in.buf_size);
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.services, r->in.buf_size));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.bytes_needed);
-		}
-		_mem_save_bytes_needed_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.bytes_needed, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.bytes_needed));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_bytes_needed_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.service_returned);
-		}
-		_mem_save_service_returned_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.service_returned, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.service_returned));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_service_returned_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		} else {
-			r->out.resume_handle = NULL;
-		}
-		if (r->out.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.group_name);
-		}
-		_mem_save_group_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.group_name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_group_name));
-		if (_ptr_group_name) {
-			NDR_PULL_ALLOC(ndr, *r->out.group_name);
-		} else {
-			*r->out.group_name = NULL;
-		}
-		if (*r->out.group_name) {
-			_mem_save_group_name_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.group_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, r->out.group_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, r->out.group_name));
-			if (ndr_get_array_length(ndr, r->out.group_name) > ndr_get_array_size(ndr, r->out.group_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, r->out.group_name), ndr_get_array_length(ndr, r->out.group_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, r->out.group_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->out.group_name, ndr_get_array_length(ndr, r->out.group_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_group_name_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_group_name_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_EnumServicesStatusExA(struct ndr_print *ndr, const char *name, int flags, const struct EnumServicesStatusExA *r)
-{
-	ndr_print_struct(ndr, name, "EnumServicesStatusExA");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "EnumServicesStatusExA");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "scmanager", r->in.scmanager);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "scmanager", r->in.scmanager);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "info_level", r->in.info_level);
-		ndr_print_uint32(ndr, "type", r->in.type);
-		ndr_print_uint32(ndr, "state", r->in.state);
-		ndr_print_uint32(ndr, "buf_size", r->in.buf_size);
-		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
-		ndr->depth++;
-		if (r->in.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "EnumServicesStatusExA");
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "services", r->out.services, r->in.buf_size);
-		ndr_print_ptr(ndr, "bytes_needed", r->out.bytes_needed);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "bytes_needed", *r->out.bytes_needed);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "service_returned", r->out.service_returned);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "service_returned", *r->out.service_returned);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
-		ndr->depth++;
-		if (r->out.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "group_name", r->out.group_name);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "group_name", *r->out.group_name);
-		ndr->depth++;
-		if (*r->out.group_name) {
-			ndr_print_string(ndr, "group_name", *r->out.group_name);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_EnumServicesStatusExW(struct ndr_push *ndr, int flags, const struct EnumServicesStatusExW *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.scmanager == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.scmanager));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.info_level));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.state));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.buf_size));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.resume_handle));
-		if (r->in.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->out.services, r->in.buf_size));
-		if (r->out.bytes_needed == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.bytes_needed));
-		if (r->out.service_returned == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.service_returned));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.resume_handle));
-		if (r->out.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		}
-		if (r->out.group_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.group_name));
-		if (*r->out.group_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.group_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.group_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, *r->out.group_name, ndr_charset_length(*r->out.group_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_EnumServicesStatusExW(struct ndr_pull *ndr, int flags, struct EnumServicesStatusExW *r)
-{
-	uint32_t _ptr_resume_handle;
-	uint32_t _ptr_group_name;
-	TALLOC_CTX *_mem_save_scmanager_0;
-	TALLOC_CTX *_mem_save_bytes_needed_0;
-	TALLOC_CTX *_mem_save_service_returned_0;
-	TALLOC_CTX *_mem_save_resume_handle_0;
-	TALLOC_CTX *_mem_save_group_name_0;
-	TALLOC_CTX *_mem_save_group_name_1;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.scmanager);
-		}
-		_mem_save_scmanager_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.scmanager, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.scmanager));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_scmanager_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.info_level));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.type));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.state));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.buf_size));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->in.resume_handle);
-		} else {
-			r->in.resume_handle = NULL;
-		}
-		if (r->in.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.bytes_needed);
-		ZERO_STRUCTP(r->out.bytes_needed);
-		NDR_PULL_ALLOC(ndr, r->out.service_returned);
-		ZERO_STRUCTP(r->out.service_returned);
-		NDR_PULL_ALLOC(ndr, r->out.group_name);
-		ZERO_STRUCTP(r->out.group_name);
-	}
-	if (flags & NDR_OUT) {
-		NDR_PULL_ALLOC_N(ndr, r->out.services, r->in.buf_size);
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.services, r->in.buf_size));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.bytes_needed);
-		}
-		_mem_save_bytes_needed_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.bytes_needed, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.bytes_needed));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_bytes_needed_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.service_returned);
-		}
-		_mem_save_service_returned_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.service_returned, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.service_returned));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_service_returned_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		} else {
-			r->out.resume_handle = NULL;
-		}
-		if (r->out.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.group_name);
-		}
-		_mem_save_group_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.group_name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_group_name));
-		if (_ptr_group_name) {
-			NDR_PULL_ALLOC(ndr, *r->out.group_name);
-		} else {
-			*r->out.group_name = NULL;
-		}
-		if (*r->out.group_name) {
-			_mem_save_group_name_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.group_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, r->out.group_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, r->out.group_name));
-			if (ndr_get_array_length(ndr, r->out.group_name) > ndr_get_array_size(ndr, r->out.group_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, r->out.group_name), ndr_get_array_length(ndr, r->out.group_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, r->out.group_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->out.group_name, ndr_get_array_length(ndr, r->out.group_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_group_name_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_group_name_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_EnumServicesStatusExW(struct ndr_print *ndr, const char *name, int flags, const struct EnumServicesStatusExW *r)
-{
-	ndr_print_struct(ndr, name, "EnumServicesStatusExW");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "EnumServicesStatusExW");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "scmanager", r->in.scmanager);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "scmanager", r->in.scmanager);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "info_level", r->in.info_level);
-		ndr_print_uint32(ndr, "type", r->in.type);
-		ndr_print_uint32(ndr, "state", r->in.state);
-		ndr_print_uint32(ndr, "buf_size", r->in.buf_size);
-		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
-		ndr->depth++;
-		if (r->in.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "EnumServicesStatusExW");
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "services", r->out.services, r->in.buf_size);
-		ndr_print_ptr(ndr, "bytes_needed", r->out.bytes_needed);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "bytes_needed", *r->out.bytes_needed);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "service_returned", r->out.service_returned);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "service_returned", *r->out.service_returned);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
-		ndr->depth++;
-		if (r->out.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "group_name", r->out.group_name);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "group_name", *r->out.group_name);
-		ndr->depth++;
-		if (*r->out.group_name) {
-			ndr_print_string(ndr, "group_name", *r->out.group_name);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_svcctl_SCSendTSMessage(struct ndr_push *ndr, int flags, const struct svcctl_SCSendTSMessage *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_svcctl_SCSendTSMessage(struct ndr_pull *ndr, int flags, struct svcctl_SCSendTSMessage *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_svcctl_SCSendTSMessage(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_SCSendTSMessage *r)
-{
-	ndr_print_struct(ndr, name, "svcctl_SCSendTSMessage");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "svcctl_SCSendTSMessage");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "svcctl_SCSendTSMessage");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static const struct ndr_interface_call svcctl_calls[] = {
-	{
-		"svcctl_CloseServiceHandle",
-		sizeof(struct svcctl_CloseServiceHandle),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_CloseServiceHandle,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_CloseServiceHandle,
-		(ndr_print_function_t) ndr_print_svcctl_CloseServiceHandle,
-		false,
-	},
-	{
-		"svcctl_ControlService",
-		sizeof(struct svcctl_ControlService),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_ControlService,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_ControlService,
-		(ndr_print_function_t) ndr_print_svcctl_ControlService,
-		false,
-	},
-	{
-		"svcctl_DeleteService",
-		sizeof(struct svcctl_DeleteService),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_DeleteService,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_DeleteService,
-		(ndr_print_function_t) ndr_print_svcctl_DeleteService,
-		false,
-	},
-	{
-		"svcctl_LockServiceDatabase",
-		sizeof(struct svcctl_LockServiceDatabase),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_LockServiceDatabase,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_LockServiceDatabase,
-		(ndr_print_function_t) ndr_print_svcctl_LockServiceDatabase,
-		false,
-	},
-	{
-		"svcctl_QueryServiceObjectSecurity",
-		sizeof(struct svcctl_QueryServiceObjectSecurity),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_QueryServiceObjectSecurity,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_QueryServiceObjectSecurity,
-		(ndr_print_function_t) ndr_print_svcctl_QueryServiceObjectSecurity,
-		false,
-	},
-	{
-		"svcctl_SetServiceObjectSecurity",
-		sizeof(struct svcctl_SetServiceObjectSecurity),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_SetServiceObjectSecurity,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_SetServiceObjectSecurity,
-		(ndr_print_function_t) ndr_print_svcctl_SetServiceObjectSecurity,
-		false,
-	},
-	{
-		"svcctl_QueryServiceStatus",
-		sizeof(struct svcctl_QueryServiceStatus),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_QueryServiceStatus,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_QueryServiceStatus,
-		(ndr_print_function_t) ndr_print_svcctl_QueryServiceStatus,
-		false,
-	},
-	{
-		"svcctl_SetServiceStatus",
-		sizeof(struct svcctl_SetServiceStatus),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_SetServiceStatus,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_SetServiceStatus,
-		(ndr_print_function_t) ndr_print_svcctl_SetServiceStatus,
-		false,
-	},
-	{
-		"svcctl_UnlockServiceDatabase",
-		sizeof(struct svcctl_UnlockServiceDatabase),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_UnlockServiceDatabase,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_UnlockServiceDatabase,
-		(ndr_print_function_t) ndr_print_svcctl_UnlockServiceDatabase,
-		false,
-	},
-	{
-		"svcctl_NotifyBootConfigStatus",
-		sizeof(struct svcctl_NotifyBootConfigStatus),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_NotifyBootConfigStatus,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_NotifyBootConfigStatus,
-		(ndr_print_function_t) ndr_print_svcctl_NotifyBootConfigStatus,
-		false,
-	},
-	{
-		"svcctl_SCSetServiceBitsW",
-		sizeof(struct svcctl_SCSetServiceBitsW),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_SCSetServiceBitsW,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_SCSetServiceBitsW,
-		(ndr_print_function_t) ndr_print_svcctl_SCSetServiceBitsW,
-		false,
-	},
-	{
-		"svcctl_ChangeServiceConfigW",
-		sizeof(struct svcctl_ChangeServiceConfigW),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_ChangeServiceConfigW,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_ChangeServiceConfigW,
-		(ndr_print_function_t) ndr_print_svcctl_ChangeServiceConfigW,
-		false,
-	},
-	{
-		"svcctl_CreateServiceW",
-		sizeof(struct svcctl_CreateServiceW),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_CreateServiceW,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_CreateServiceW,
-		(ndr_print_function_t) ndr_print_svcctl_CreateServiceW,
-		false,
-	},
-	{
-		"svcctl_EnumDependentServicesW",
-		sizeof(struct svcctl_EnumDependentServicesW),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_EnumDependentServicesW,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_EnumDependentServicesW,
-		(ndr_print_function_t) ndr_print_svcctl_EnumDependentServicesW,
-		false,
-	},
-	{
-		"svcctl_EnumServicesStatusW",
-		sizeof(struct svcctl_EnumServicesStatusW),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_EnumServicesStatusW,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_EnumServicesStatusW,
-		(ndr_print_function_t) ndr_print_svcctl_EnumServicesStatusW,
-		false,
-	},
-	{
-		"svcctl_OpenSCManagerW",
-		sizeof(struct svcctl_OpenSCManagerW),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_OpenSCManagerW,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_OpenSCManagerW,
-		(ndr_print_function_t) ndr_print_svcctl_OpenSCManagerW,
-		false,
-	},
-	{
-		"svcctl_OpenServiceW",
-		sizeof(struct svcctl_OpenServiceW),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_OpenServiceW,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_OpenServiceW,
-		(ndr_print_function_t) ndr_print_svcctl_OpenServiceW,
-		false,
-	},
-	{
-		"svcctl_QueryServiceConfigW",
-		sizeof(struct svcctl_QueryServiceConfigW),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_QueryServiceConfigW,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_QueryServiceConfigW,
-		(ndr_print_function_t) ndr_print_svcctl_QueryServiceConfigW,
-		false,
-	},
-	{
-		"svcctl_QueryServiceLockStatusW",
-		sizeof(struct svcctl_QueryServiceLockStatusW),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_QueryServiceLockStatusW,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_QueryServiceLockStatusW,
-		(ndr_print_function_t) ndr_print_svcctl_QueryServiceLockStatusW,
-		false,
-	},
-	{
-		"svcctl_StartServiceW",
-		sizeof(struct svcctl_StartServiceW),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_StartServiceW,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_StartServiceW,
-		(ndr_print_function_t) ndr_print_svcctl_StartServiceW,
-		false,
-	},
-	{
-		"svcctl_GetServiceDisplayNameW",
-		sizeof(struct svcctl_GetServiceDisplayNameW),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_GetServiceDisplayNameW,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_GetServiceDisplayNameW,
-		(ndr_print_function_t) ndr_print_svcctl_GetServiceDisplayNameW,
-		false,
-	},
-	{
-		"svcctl_GetServiceKeyNameW",
-		sizeof(struct svcctl_GetServiceKeyNameW),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_GetServiceKeyNameW,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_GetServiceKeyNameW,
-		(ndr_print_function_t) ndr_print_svcctl_GetServiceKeyNameW,
-		false,
-	},
-	{
-		"svcctl_SCSetServiceBitsA",
-		sizeof(struct svcctl_SCSetServiceBitsA),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_SCSetServiceBitsA,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_SCSetServiceBitsA,
-		(ndr_print_function_t) ndr_print_svcctl_SCSetServiceBitsA,
-		false,
-	},
-	{
-		"svcctl_ChangeServiceConfigA",
-		sizeof(struct svcctl_ChangeServiceConfigA),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_ChangeServiceConfigA,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_ChangeServiceConfigA,
-		(ndr_print_function_t) ndr_print_svcctl_ChangeServiceConfigA,
-		false,
-	},
-	{
-		"svcctl_CreateServiceA",
-		sizeof(struct svcctl_CreateServiceA),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_CreateServiceA,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_CreateServiceA,
-		(ndr_print_function_t) ndr_print_svcctl_CreateServiceA,
-		false,
-	},
-	{
-		"svcctl_EnumDependentServicesA",
-		sizeof(struct svcctl_EnumDependentServicesA),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_EnumDependentServicesA,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_EnumDependentServicesA,
-		(ndr_print_function_t) ndr_print_svcctl_EnumDependentServicesA,
-		false,
-	},
-	{
-		"svcctl_EnumServicesStatusA",
-		sizeof(struct svcctl_EnumServicesStatusA),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_EnumServicesStatusA,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_EnumServicesStatusA,
-		(ndr_print_function_t) ndr_print_svcctl_EnumServicesStatusA,
-		false,
-	},
-	{
-		"svcctl_OpenSCManagerA",
-		sizeof(struct svcctl_OpenSCManagerA),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_OpenSCManagerA,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_OpenSCManagerA,
-		(ndr_print_function_t) ndr_print_svcctl_OpenSCManagerA,
-		false,
-	},
-	{
-		"svcctl_OpenServiceA",
-		sizeof(struct svcctl_OpenServiceA),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_OpenServiceA,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_OpenServiceA,
-		(ndr_print_function_t) ndr_print_svcctl_OpenServiceA,
-		false,
-	},
-	{
-		"svcctl_QueryServiceConfigA",
-		sizeof(struct svcctl_QueryServiceConfigA),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_QueryServiceConfigA,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_QueryServiceConfigA,
-		(ndr_print_function_t) ndr_print_svcctl_QueryServiceConfigA,
-		false,
-	},
-	{
-		"svcctl_QueryServiceLockStatusA",
-		sizeof(struct svcctl_QueryServiceLockStatusA),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_QueryServiceLockStatusA,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_QueryServiceLockStatusA,
-		(ndr_print_function_t) ndr_print_svcctl_QueryServiceLockStatusA,
-		false,
-	},
-	{
-		"svcctl_StartServiceA",
-		sizeof(struct svcctl_StartServiceA),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_StartServiceA,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_StartServiceA,
-		(ndr_print_function_t) ndr_print_svcctl_StartServiceA,
-		false,
-	},
-	{
-		"svcctl_GetServiceDisplayNameA",
-		sizeof(struct svcctl_GetServiceDisplayNameA),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_GetServiceDisplayNameA,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_GetServiceDisplayNameA,
-		(ndr_print_function_t) ndr_print_svcctl_GetServiceDisplayNameA,
-		false,
-	},
-	{
-		"svcctl_GetServiceKeyNameA",
-		sizeof(struct svcctl_GetServiceKeyNameA),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_GetServiceKeyNameA,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_GetServiceKeyNameA,
-		(ndr_print_function_t) ndr_print_svcctl_GetServiceKeyNameA,
-		false,
-	},
-	{
-		"svcctl_GetCurrentGroupeStateW",
-		sizeof(struct svcctl_GetCurrentGroupeStateW),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_GetCurrentGroupeStateW,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_GetCurrentGroupeStateW,
-		(ndr_print_function_t) ndr_print_svcctl_GetCurrentGroupeStateW,
-		false,
-	},
-	{
-		"svcctl_EnumServiceGroupW",
-		sizeof(struct svcctl_EnumServiceGroupW),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_EnumServiceGroupW,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_EnumServiceGroupW,
-		(ndr_print_function_t) ndr_print_svcctl_EnumServiceGroupW,
-		false,
-	},
-	{
-		"svcctl_ChangeServiceConfig2A",
-		sizeof(struct svcctl_ChangeServiceConfig2A),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_ChangeServiceConfig2A,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_ChangeServiceConfig2A,
-		(ndr_print_function_t) ndr_print_svcctl_ChangeServiceConfig2A,
-		false,
-	},
-	{
-		"svcctl_ChangeServiceConfig2W",
-		sizeof(struct svcctl_ChangeServiceConfig2W),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_ChangeServiceConfig2W,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_ChangeServiceConfig2W,
-		(ndr_print_function_t) ndr_print_svcctl_ChangeServiceConfig2W,
-		false,
-	},
-	{
-		"svcctl_QueryServiceConfig2A",
-		sizeof(struct svcctl_QueryServiceConfig2A),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_QueryServiceConfig2A,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_QueryServiceConfig2A,
-		(ndr_print_function_t) ndr_print_svcctl_QueryServiceConfig2A,
-		false,
-	},
-	{
-		"svcctl_QueryServiceConfig2W",
-		sizeof(struct svcctl_QueryServiceConfig2W),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_QueryServiceConfig2W,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_QueryServiceConfig2W,
-		(ndr_print_function_t) ndr_print_svcctl_QueryServiceConfig2W,
-		false,
-	},
-	{
-		"svcctl_QueryServiceStatusEx",
-		sizeof(struct svcctl_QueryServiceStatusEx),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_QueryServiceStatusEx,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_QueryServiceStatusEx,
-		(ndr_print_function_t) ndr_print_svcctl_QueryServiceStatusEx,
-		false,
-	},
-	{
-		"EnumServicesStatusExA",
-		sizeof(struct EnumServicesStatusExA),
-		(ndr_push_flags_fn_t) ndr_push_EnumServicesStatusExA,
-		(ndr_pull_flags_fn_t) ndr_pull_EnumServicesStatusExA,
-		(ndr_print_function_t) ndr_print_EnumServicesStatusExA,
-		false,
-	},
-	{
-		"EnumServicesStatusExW",
-		sizeof(struct EnumServicesStatusExW),
-		(ndr_push_flags_fn_t) ndr_push_EnumServicesStatusExW,
-		(ndr_pull_flags_fn_t) ndr_pull_EnumServicesStatusExW,
-		(ndr_print_function_t) ndr_print_EnumServicesStatusExW,
-		false,
-	},
-	{
-		"svcctl_SCSendTSMessage",
-		sizeof(struct svcctl_SCSendTSMessage),
-		(ndr_push_flags_fn_t) ndr_push_svcctl_SCSendTSMessage,
-		(ndr_pull_flags_fn_t) ndr_pull_svcctl_SCSendTSMessage,
-		(ndr_print_function_t) ndr_print_svcctl_SCSendTSMessage,
-		false,
-	},
-	{ NULL, 0, NULL, NULL, NULL, false }
-};
-
-static const char * const svcctl_endpoint_strings[] = {
-	"ncacn_np:[\\pipe\\svcctl]", 
-	"ncalrpc:", 
-};
-
-static const struct ndr_interface_string_array svcctl_endpoints = {
-	.count	= 2,
-	.names	= svcctl_endpoint_strings
-};
-
-static const char * const svcctl_authservice_strings[] = {
-	"host", 
-};
-
-static const struct ndr_interface_string_array svcctl_authservices = {
-	.count	= 1,
-	.names	= svcctl_authservice_strings
-};
-
-
-const struct ndr_interface_table ndr_table_svcctl = {
-	.name		= "svcctl",
-	.syntax_id	= {
-		{0x367abb81,0x9844,0x35f1,{0xad,0x32},{0x98,0xf0,0x38,0x00,0x10,0x03}},
-		NDR_SVCCTL_VERSION
-	},
-	.helpstring	= NDR_SVCCTL_HELPSTRING,
-	.num_calls	= 44,
-	.calls		= svcctl_calls,
-	.endpoints	= &svcctl_endpoints,
-	.authservices	= &svcctl_authservices
-};
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_svcctl.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_svcctl.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_svcctl.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,153 +0,0 @@
-/* header auto-generated by pidl */
-
-#include "librpc/ndr/libndr.h"
-#include "librpc/gen_ndr/svcctl.h"
-
-#ifndef _HEADER_NDR_svcctl
-#define _HEADER_NDR_svcctl
-
-#define NDR_SVCCTL_UUID "367abb81-9844-35f1-ad32-98f038001003"
-#define NDR_SVCCTL_VERSION 2.0
-#define NDR_SVCCTL_NAME "svcctl"
-#define NDR_SVCCTL_HELPSTRING "Service Control"
-extern const struct ndr_interface_table ndr_table_svcctl;
-#define NDR_SVCCTL_CLOSESERVICEHANDLE (0x00)
-
-#define NDR_SVCCTL_CONTROLSERVICE (0x01)
-
-#define NDR_SVCCTL_DELETESERVICE (0x02)
-
-#define NDR_SVCCTL_LOCKSERVICEDATABASE (0x03)
-
-#define NDR_SVCCTL_QUERYSERVICEOBJECTSECURITY (0x04)
-
-#define NDR_SVCCTL_SETSERVICEOBJECTSECURITY (0x05)
-
-#define NDR_SVCCTL_QUERYSERVICESTATUS (0x06)
-
-#define NDR_SVCCTL_SETSERVICESTATUS (0x07)
-
-#define NDR_SVCCTL_UNLOCKSERVICEDATABASE (0x08)
-
-#define NDR_SVCCTL_NOTIFYBOOTCONFIGSTATUS (0x09)
-
-#define NDR_SVCCTL_SCSETSERVICEBITSW (0x0a)
-
-#define NDR_SVCCTL_CHANGESERVICECONFIGW (0x0b)
-
-#define NDR_SVCCTL_CREATESERVICEW (0x0c)
-
-#define NDR_SVCCTL_ENUMDEPENDENTSERVICESW (0x0d)
-
-#define NDR_SVCCTL_ENUMSERVICESSTATUSW (0x0e)
-
-#define NDR_SVCCTL_OPENSCMANAGERW (0x0f)
-
-#define NDR_SVCCTL_OPENSERVICEW (0x10)
-
-#define NDR_SVCCTL_QUERYSERVICECONFIGW (0x11)
-
-#define NDR_SVCCTL_QUERYSERVICELOCKSTATUSW (0x12)
-
-#define NDR_SVCCTL_STARTSERVICEW (0x13)
-
-#define NDR_SVCCTL_GETSERVICEDISPLAYNAMEW (0x14)
-
-#define NDR_SVCCTL_GETSERVICEKEYNAMEW (0x15)
-
-#define NDR_SVCCTL_SCSETSERVICEBITSA (0x16)
-
-#define NDR_SVCCTL_CHANGESERVICECONFIGA (0x17)
-
-#define NDR_SVCCTL_CREATESERVICEA (0x18)
-
-#define NDR_SVCCTL_ENUMDEPENDENTSERVICESA (0x19)
-
-#define NDR_SVCCTL_ENUMSERVICESSTATUSA (0x1a)
-
-#define NDR_SVCCTL_OPENSCMANAGERA (0x1b)
-
-#define NDR_SVCCTL_OPENSERVICEA (0x1c)
-
-#define NDR_SVCCTL_QUERYSERVICECONFIGA (0x1d)
-
-#define NDR_SVCCTL_QUERYSERVICELOCKSTATUSA (0x1e)
-
-#define NDR_SVCCTL_STARTSERVICEA (0x1f)
-
-#define NDR_SVCCTL_GETSERVICEDISPLAYNAMEA (0x20)
-
-#define NDR_SVCCTL_GETSERVICEKEYNAMEA (0x21)
-
-#define NDR_SVCCTL_GETCURRENTGROUPESTATEW (0x22)
-
-#define NDR_SVCCTL_ENUMSERVICEGROUPW (0x23)
-
-#define NDR_SVCCTL_CHANGESERVICECONFIG2A (0x24)
-
-#define NDR_SVCCTL_CHANGESERVICECONFIG2W (0x25)
-
-#define NDR_SVCCTL_QUERYSERVICECONFIG2A (0x26)
-
-#define NDR_SVCCTL_QUERYSERVICECONFIG2W (0x27)
-
-#define NDR_SVCCTL_QUERYSERVICESTATUSEX (0x28)
-
-#define NDR_ENUMSERVICESSTATUSEXA (0x29)
-
-#define NDR_ENUMSERVICESSTATUSEXW (0x2a)
-
-#define NDR_SVCCTL_SCSENDTSMESSAGE (0x2b)
-
-#define NDR_SVCCTL_CALL_COUNT (44)
-void ndr_print_SERVICE_LOCK_STATUS(struct ndr_print *ndr, const char *name, const struct SERVICE_LOCK_STATUS *r);
-void ndr_print_SERVICE_STATUS(struct ndr_print *ndr, const char *name, const struct SERVICE_STATUS *r);
-void ndr_print_ENUM_SERVICE_STATUS(struct ndr_print *ndr, const char *name, const struct ENUM_SERVICE_STATUS *r);
-enum ndr_err_code ndr_push_svcctl_ServerType(struct ndr_push *ndr, int ndr_flags, uint32_t r);
-enum ndr_err_code ndr_pull_svcctl_ServerType(struct ndr_pull *ndr, int ndr_flags, uint32_t *r);
-void ndr_print_svcctl_ServerType(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_svcctl_CloseServiceHandle(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_CloseServiceHandle *r);
-void ndr_print_svcctl_ControlService(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_ControlService *r);
-void ndr_print_svcctl_DeleteService(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_DeleteService *r);
-void ndr_print_svcctl_LockServiceDatabase(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_LockServiceDatabase *r);
-void ndr_print_svcctl_QueryServiceObjectSecurity(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_QueryServiceObjectSecurity *r);
-void ndr_print_svcctl_SetServiceObjectSecurity(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_SetServiceObjectSecurity *r);
-void ndr_print_svcctl_QueryServiceStatus(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_QueryServiceStatus *r);
-void ndr_print_svcctl_SetServiceStatus(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_SetServiceStatus *r);
-void ndr_print_svcctl_UnlockServiceDatabase(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_UnlockServiceDatabase *r);
-void ndr_print_svcctl_NotifyBootConfigStatus(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_NotifyBootConfigStatus *r);
-void ndr_print_svcctl_SCSetServiceBitsW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_SCSetServiceBitsW *r);
-void ndr_print_svcctl_ChangeServiceConfigW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_ChangeServiceConfigW *r);
-void ndr_print_svcctl_CreateServiceW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_CreateServiceW *r);
-void ndr_print_svcctl_EnumDependentServicesW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_EnumDependentServicesW *r);
-void ndr_print_svcctl_EnumServicesStatusW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_EnumServicesStatusW *r);
-void ndr_print_svcctl_OpenSCManagerW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_OpenSCManagerW *r);
-void ndr_print_svcctl_OpenServiceW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_OpenServiceW *r);
-void ndr_print_svcctl_QueryServiceConfigW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_QueryServiceConfigW *r);
-void ndr_print_svcctl_QueryServiceLockStatusW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_QueryServiceLockStatusW *r);
-void ndr_print_svcctl_StartServiceW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_StartServiceW *r);
-void ndr_print_svcctl_GetServiceDisplayNameW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_GetServiceDisplayNameW *r);
-void ndr_print_svcctl_GetServiceKeyNameW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_GetServiceKeyNameW *r);
-void ndr_print_svcctl_SCSetServiceBitsA(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_SCSetServiceBitsA *r);
-void ndr_print_svcctl_ChangeServiceConfigA(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_ChangeServiceConfigA *r);
-void ndr_print_svcctl_CreateServiceA(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_CreateServiceA *r);
-void ndr_print_svcctl_EnumDependentServicesA(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_EnumDependentServicesA *r);
-void ndr_print_svcctl_EnumServicesStatusA(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_EnumServicesStatusA *r);
-void ndr_print_svcctl_OpenSCManagerA(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_OpenSCManagerA *r);
-void ndr_print_svcctl_OpenServiceA(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_OpenServiceA *r);
-void ndr_print_svcctl_QueryServiceConfigA(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_QueryServiceConfigA *r);
-void ndr_print_svcctl_QueryServiceLockStatusA(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_QueryServiceLockStatusA *r);
-void ndr_print_svcctl_StartServiceA(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_StartServiceA *r);
-void ndr_print_svcctl_GetServiceDisplayNameA(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_GetServiceDisplayNameA *r);
-void ndr_print_svcctl_GetServiceKeyNameA(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_GetServiceKeyNameA *r);
-void ndr_print_svcctl_GetCurrentGroupeStateW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_GetCurrentGroupeStateW *r);
-void ndr_print_svcctl_EnumServiceGroupW(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_EnumServiceGroupW *r);
-void ndr_print_svcctl_ChangeServiceConfig2A(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_ChangeServiceConfig2A *r);
-void ndr_print_svcctl_ChangeServiceConfig2W(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_ChangeServiceConfig2W *r);
-void ndr_print_svcctl_QueryServiceConfig2A(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_QueryServiceConfig2A *r);
-void ndr_print_svcctl_QueryServiceConfig2W(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_QueryServiceConfig2W *r);
-void ndr_print_svcctl_QueryServiceStatusEx(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_QueryServiceStatusEx *r);
-void ndr_print_EnumServicesStatusExA(struct ndr_print *ndr, const char *name, int flags, const struct EnumServicesStatusExA *r);
-void ndr_print_EnumServicesStatusExW(struct ndr_print *ndr, const char *name, int flags, const struct EnumServicesStatusExW *r);
-void ndr_print_svcctl_SCSendTSMessage(struct ndr_print *ndr, const char *name, int flags, const struct svcctl_SCSendTSMessage *r);
-#endif /* _HEADER_NDR_svcctl */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_winreg.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_winreg.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_winreg.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4542 +0,0 @@
-/* parser auto-generated by pidl */
-
-#include "includes.h"
-#include "librpc/gen_ndr/ndr_winreg.h"
-
-#include "librpc/gen_ndr/ndr_lsa.h"
-#include "librpc/gen_ndr/ndr_initshutdown.h"
-#include "librpc/gen_ndr/ndr_security.h"
-static enum ndr_err_code ndr_push_winreg_AccessMask(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_AccessMask(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_AccessMask(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "KEY_QUERY_VALUE", KEY_QUERY_VALUE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "KEY_SET_VALUE", KEY_SET_VALUE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "KEY_CREATE_SUB_KEY", KEY_CREATE_SUB_KEY, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "KEY_ENUMERATE_SUB_KEYS", KEY_ENUMERATE_SUB_KEYS, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "KEY_NOTIFY", KEY_NOTIFY, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "KEY_CREATE_LINK", KEY_CREATE_LINK, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "KEY_WOW64_64KEY", KEY_WOW64_64KEY, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "KEY_WOW64_32KEY", KEY_WOW64_32KEY, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_Type(struct ndr_push *ndr, int ndr_flags, enum winreg_Type r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_Type(struct ndr_pull *ndr, int ndr_flags, enum winreg_Type *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_Type(struct ndr_print *ndr, const char *name, enum winreg_Type r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case REG_NONE: val = "REG_NONE"; break;
-		case REG_SZ: val = "REG_SZ"; break;
-		case REG_EXPAND_SZ: val = "REG_EXPAND_SZ"; break;
-		case REG_BINARY: val = "REG_BINARY"; break;
-		case REG_DWORD: val = "REG_DWORD"; break;
-		case REG_DWORD_BIG_ENDIAN: val = "REG_DWORD_BIG_ENDIAN"; break;
-		case REG_LINK: val = "REG_LINK"; break;
-		case REG_MULTI_SZ: val = "REG_MULTI_SZ"; break;
-		case REG_RESOURCE_LIST: val = "REG_RESOURCE_LIST"; break;
-		case REG_FULL_RESOURCE_DESCRIPTOR: val = "REG_FULL_RESOURCE_DESCRIPTOR"; break;
-		case REG_RESOURCE_REQUIREMENTS_LIST: val = "REG_RESOURCE_REQUIREMENTS_LIST"; break;
-		case REG_QWORD: val = "REG_QWORD"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_winreg_String(struct ndr_push *ndr, int ndr_flags, const struct winreg_String *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, strlen_m_term(r->name) * 2));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, strlen_m_term(r->name) * 2));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->name, ndr_charset_length(r->name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_winreg_String(struct ndr_pull *ndr, int ndr_flags, struct winreg_String *r)
-{
-	uint32_t _ptr_name;
-	TALLOC_CTX *_mem_save_name_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->name_len));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->name_size));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_name));
-		if (_ptr_name) {
-			NDR_PULL_ALLOC(ndr, r->name);
-		} else {
-			r->name = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->name));
-			if (ndr_get_array_length(ndr, &r->name) > ndr_get_array_size(ndr, &r->name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->name), ndr_get_array_length(ndr, &r->name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->name, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_String(struct ndr_print *ndr, const char *name, const struct winreg_String *r)
-{
-	ndr_print_struct(ndr, name, "winreg_String");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "name_len", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?strlen_m_term(r->name) * 2:r->name_len);
-	ndr_print_uint16(ndr, "name_size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?strlen_m_term(r->name) * 2:r->name_size);
-	ndr_print_ptr(ndr, "name", r->name);
-	ndr->depth++;
-	if (r->name) {
-		ndr_print_string(ndr, "name", r->name);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_KeySecurityData(struct ndr_push *ndr, int ndr_flags, const struct KeySecurityData *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->data));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->size));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->len));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->data) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->size));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->len));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->data, r->len));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_KeySecurityData(struct ndr_pull *ndr, int ndr_flags, struct KeySecurityData *r)
-{
-	uint32_t _ptr_data;
-	TALLOC_CTX *_mem_save_data_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_data));
-		if (_ptr_data) {
-			NDR_PULL_ALLOC(ndr, r->data);
-		} else {
-			r->data = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->size));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->len));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->data) {
-			_mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->data, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->data));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->data));
-			if (ndr_get_array_length(ndr, &r->data) > ndr_get_array_size(ndr, &r->data)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->data), ndr_get_array_length(ndr, &r->data));
-			}
-			NDR_PULL_ALLOC_N(ndr, r->data, ndr_get_array_size(ndr, &r->data));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->data, ndr_get_array_length(ndr, &r->data)));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, 0);
-		}
-		if (r->data) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->data, r->size));
-		}
-		if (r->data) {
-			NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->data, r->len));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_KeySecurityData(struct ndr_print *ndr, const char *name, const struct KeySecurityData *r)
-{
-	ndr_print_struct(ndr, name, "KeySecurityData");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "data", r->data);
-	ndr->depth++;
-	if (r->data) {
-		ndr_print_array_uint8(ndr, "data", r->data, r->len);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "size", r->size);
-	ndr_print_uint32(ndr, "len", r->len);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_SecBuf(struct ndr_push *ndr, int ndr_flags, const struct winreg_SecBuf *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->length));
-		NDR_CHECK(ndr_push_KeySecurityData(ndr, NDR_SCALARS, &r->sd));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->inherit));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_KeySecurityData(ndr, NDR_BUFFERS, &r->sd));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_SecBuf(struct ndr_pull *ndr, int ndr_flags, struct winreg_SecBuf *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->length));
-		NDR_CHECK(ndr_pull_KeySecurityData(ndr, NDR_SCALARS, &r->sd));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->inherit));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_KeySecurityData(ndr, NDR_BUFFERS, &r->sd));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_SecBuf(struct ndr_print *ndr, const char *name, const struct winreg_SecBuf *r)
-{
-	ndr_print_struct(ndr, name, "winreg_SecBuf");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "length", r->length);
-	ndr_print_KeySecurityData(ndr, "sd", &r->sd);
-	ndr_print_uint8(ndr, "inherit", r->inherit);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_CreateAction(struct ndr_push *ndr, int ndr_flags, enum winreg_CreateAction r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_CreateAction(struct ndr_pull *ndr, int ndr_flags, enum winreg_CreateAction *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_CreateAction(struct ndr_print *ndr, const char *name, enum winreg_CreateAction r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case REG_ACTION_NONE: val = "REG_ACTION_NONE"; break;
-		case REG_CREATED_NEW_KEY: val = "REG_CREATED_NEW_KEY"; break;
-		case REG_OPENED_EXISTING_KEY: val = "REG_OPENED_EXISTING_KEY"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_winreg_StringBuf(struct ndr_push *ndr, int ndr_flags, const struct winreg_StringBuf *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, strlen_m_term_null(r->name) * 2));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->size));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->size / 2));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, strlen_m_term_null(r->name) * 2 / 2));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->name, strlen_m_term_null(r->name) * 2 / 2, sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_StringBuf(struct ndr_pull *ndr, int ndr_flags, struct winreg_StringBuf *r)
-{
-	uint32_t _ptr_name;
-	TALLOC_CTX *_mem_save_name_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->length));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_name));
-		if (_ptr_name) {
-			NDR_PULL_ALLOC(ndr, r->name);
-		} else {
-			r->name = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->name));
-			if (ndr_get_array_length(ndr, &r->name) > ndr_get_array_size(ndr, &r->name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->name), ndr_get_array_length(ndr, &r->name));
-			}
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->name, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, 0);
-		}
-		if (r->name) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->name, r->size / 2));
-		}
-		if (r->name) {
-			NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->name, r->length / 2));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_StringBuf(struct ndr_print *ndr, const char *name, const struct winreg_StringBuf *r)
-{
-	ndr_print_struct(ndr, name, "winreg_StringBuf");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "length", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?strlen_m_term_null(r->name) * 2:r->length);
-	ndr_print_uint16(ndr, "size", r->size);
-	ndr_print_ptr(ndr, "name", r->name);
-	ndr->depth++;
-	if (r->name) {
-		ndr_print_string(ndr, "name", r->name);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_ValNameBuf(struct ndr_push *ndr, int ndr_flags, const struct winreg_ValNameBuf *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, strlen_m_term(r->name) * 2));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->size));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->size / 2));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, strlen_m_term(r->name) * 2 / 2));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->name, strlen_m_term(r->name) * 2 / 2, sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_ValNameBuf(struct ndr_pull *ndr, int ndr_flags, struct winreg_ValNameBuf *r)
-{
-	uint32_t _ptr_name;
-	TALLOC_CTX *_mem_save_name_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->length));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_name));
-		if (_ptr_name) {
-			NDR_PULL_ALLOC(ndr, r->name);
-		} else {
-			r->name = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->name));
-			if (ndr_get_array_length(ndr, &r->name) > ndr_get_array_size(ndr, &r->name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->name), ndr_get_array_length(ndr, &r->name));
-			}
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->name, ndr_get_array_length(ndr, &r->name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, 0);
-		}
-		if (r->name) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->name, r->size / 2));
-		}
-		if (r->name) {
-			NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->name, r->length / 2));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_ValNameBuf(struct ndr_print *ndr, const char *name, const struct winreg_ValNameBuf *r)
-{
-	ndr_print_struct(ndr, name, "winreg_ValNameBuf");
-	ndr->depth++;
-	ndr_print_uint16(ndr, "length", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?strlen_m_term(r->name) * 2:r->length);
-	ndr_print_uint16(ndr, "size", r->size);
-	ndr_print_ptr(ndr, "name", r->name);
-	ndr->depth++;
-	if (r->name) {
-		ndr_print_string(ndr, "name", r->name);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_KeySecurityAttribute(struct ndr_push *ndr, int ndr_flags, const struct KeySecurityAttribute *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->data_size));
-		NDR_CHECK(ndr_push_KeySecurityData(ndr, NDR_SCALARS, &r->sec_data));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->inherit));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_KeySecurityData(ndr, NDR_BUFFERS, &r->sec_data));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_KeySecurityAttribute(struct ndr_pull *ndr, int ndr_flags, struct KeySecurityAttribute *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->data_size));
-		NDR_CHECK(ndr_pull_KeySecurityData(ndr, NDR_SCALARS, &r->sec_data));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->inherit));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_KeySecurityData(ndr, NDR_BUFFERS, &r->sec_data));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_KeySecurityAttribute(struct ndr_print *ndr, const char *name, const struct KeySecurityAttribute *r)
-{
-	ndr_print_struct(ndr, name, "KeySecurityAttribute");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "data_size", r->data_size);
-	ndr_print_KeySecurityData(ndr, "sec_data", &r->sec_data);
-	ndr_print_uint8(ndr, "inherit", r->inherit);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_QueryMultipleValue(struct ndr_push *ndr, int ndr_flags, const struct QueryMultipleValue *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->name));
-		NDR_CHECK(ndr_push_winreg_Type(ndr, NDR_SCALARS, r->type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->offset));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->length));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			NDR_CHECK(ndr_push_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->name));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_QueryMultipleValue(struct ndr_pull *ndr, int ndr_flags, struct QueryMultipleValue *r)
-{
-	uint32_t _ptr_name;
-	TALLOC_CTX *_mem_save_name_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_name));
-		if (_ptr_name) {
-			NDR_PULL_ALLOC(ndr, r->name);
-		} else {
-			r->name = NULL;
-		}
-		NDR_CHECK(ndr_pull_winreg_Type(ndr, NDR_SCALARS, &r->type));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->offset));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->length));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->name) {
-			_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->name, 0);
-			NDR_CHECK(ndr_pull_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->name));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_QueryMultipleValue(struct ndr_print *ndr, const char *name, const struct QueryMultipleValue *r)
-{
-	ndr_print_struct(ndr, name, "QueryMultipleValue");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "name", r->name);
-	ndr->depth++;
-	if (r->name) {
-		ndr_print_winreg_String(ndr, "name", r->name);
-	}
-	ndr->depth--;
-	ndr_print_winreg_Type(ndr, "type", r->type);
-	ndr_print_uint32(ndr, "offset", r->offset);
-	ndr_print_uint32(ndr, "length", r->length);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_OpenHKCR(struct ndr_push *ndr, int flags, const struct winreg_OpenHKCR *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.system_name));
-		if (r->in.system_name) {
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, *r->in.system_name));
-		}
-		NDR_CHECK(ndr_push_winreg_AccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_OpenHKCR(struct ndr_pull *ndr, int flags, struct winreg_OpenHKCR *r)
-{
-	uint32_t _ptr_system_name;
-	TALLOC_CTX *_mem_save_system_name_0;
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_system_name));
-		if (_ptr_system_name) {
-			NDR_PULL_ALLOC(ndr, r->in.system_name);
-		} else {
-			r->in.system_name = NULL;
-		}
-		if (r->in.system_name) {
-			_mem_save_system_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.system_name, 0);
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, r->in.system_name));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_system_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_winreg_AccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.handle);
-		ZERO_STRUCTP(r->out.handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_OpenHKCR(struct ndr_print *ndr, const char *name, int flags, const struct winreg_OpenHKCR *r)
-{
-	ndr_print_struct(ndr, name, "winreg_OpenHKCR");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_OpenHKCR");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "system_name", r->in.system_name);
-		ndr->depth++;
-		if (r->in.system_name) {
-			ndr_print_uint16(ndr, "system_name", *r->in.system_name);
-		}
-		ndr->depth--;
-		ndr_print_winreg_AccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_OpenHKCR");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->out.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->out.handle);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_OpenHKCU(struct ndr_push *ndr, int flags, const struct winreg_OpenHKCU *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.system_name));
-		if (r->in.system_name) {
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, *r->in.system_name));
-		}
-		NDR_CHECK(ndr_push_winreg_AccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_OpenHKCU(struct ndr_pull *ndr, int flags, struct winreg_OpenHKCU *r)
-{
-	uint32_t _ptr_system_name;
-	TALLOC_CTX *_mem_save_system_name_0;
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_system_name));
-		if (_ptr_system_name) {
-			NDR_PULL_ALLOC(ndr, r->in.system_name);
-		} else {
-			r->in.system_name = NULL;
-		}
-		if (r->in.system_name) {
-			_mem_save_system_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.system_name, 0);
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, r->in.system_name));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_system_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_winreg_AccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.handle);
-		ZERO_STRUCTP(r->out.handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_OpenHKCU(struct ndr_print *ndr, const char *name, int flags, const struct winreg_OpenHKCU *r)
-{
-	ndr_print_struct(ndr, name, "winreg_OpenHKCU");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_OpenHKCU");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "system_name", r->in.system_name);
-		ndr->depth++;
-		if (r->in.system_name) {
-			ndr_print_uint16(ndr, "system_name", *r->in.system_name);
-		}
-		ndr->depth--;
-		ndr_print_winreg_AccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_OpenHKCU");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->out.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->out.handle);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_OpenHKLM(struct ndr_push *ndr, int flags, const struct winreg_OpenHKLM *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.system_name));
-		if (r->in.system_name) {
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, *r->in.system_name));
-		}
-		NDR_CHECK(ndr_push_winreg_AccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_OpenHKLM(struct ndr_pull *ndr, int flags, struct winreg_OpenHKLM *r)
-{
-	uint32_t _ptr_system_name;
-	TALLOC_CTX *_mem_save_system_name_0;
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_system_name));
-		if (_ptr_system_name) {
-			NDR_PULL_ALLOC(ndr, r->in.system_name);
-		} else {
-			r->in.system_name = NULL;
-		}
-		if (r->in.system_name) {
-			_mem_save_system_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.system_name, 0);
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, r->in.system_name));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_system_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_winreg_AccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.handle);
-		ZERO_STRUCTP(r->out.handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_OpenHKLM(struct ndr_print *ndr, const char *name, int flags, const struct winreg_OpenHKLM *r)
-{
-	ndr_print_struct(ndr, name, "winreg_OpenHKLM");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_OpenHKLM");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "system_name", r->in.system_name);
-		ndr->depth++;
-		if (r->in.system_name) {
-			ndr_print_uint16(ndr, "system_name", *r->in.system_name);
-		}
-		ndr->depth--;
-		ndr_print_winreg_AccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_OpenHKLM");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->out.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->out.handle);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_OpenHKPD(struct ndr_push *ndr, int flags, const struct winreg_OpenHKPD *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.system_name));
-		if (r->in.system_name) {
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, *r->in.system_name));
-		}
-		NDR_CHECK(ndr_push_winreg_AccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_OpenHKPD(struct ndr_pull *ndr, int flags, struct winreg_OpenHKPD *r)
-{
-	uint32_t _ptr_system_name;
-	TALLOC_CTX *_mem_save_system_name_0;
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_system_name));
-		if (_ptr_system_name) {
-			NDR_PULL_ALLOC(ndr, r->in.system_name);
-		} else {
-			r->in.system_name = NULL;
-		}
-		if (r->in.system_name) {
-			_mem_save_system_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.system_name, 0);
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, r->in.system_name));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_system_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_winreg_AccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.handle);
-		ZERO_STRUCTP(r->out.handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_OpenHKPD(struct ndr_print *ndr, const char *name, int flags, const struct winreg_OpenHKPD *r)
-{
-	ndr_print_struct(ndr, name, "winreg_OpenHKPD");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_OpenHKPD");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "system_name", r->in.system_name);
-		ndr->depth++;
-		if (r->in.system_name) {
-			ndr_print_uint16(ndr, "system_name", *r->in.system_name);
-		}
-		ndr->depth--;
-		ndr_print_winreg_AccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_OpenHKPD");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->out.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->out.handle);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_OpenHKU(struct ndr_push *ndr, int flags, const struct winreg_OpenHKU *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.system_name));
-		if (r->in.system_name) {
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, *r->in.system_name));
-		}
-		NDR_CHECK(ndr_push_winreg_AccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_OpenHKU(struct ndr_pull *ndr, int flags, struct winreg_OpenHKU *r)
-{
-	uint32_t _ptr_system_name;
-	TALLOC_CTX *_mem_save_system_name_0;
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_system_name));
-		if (_ptr_system_name) {
-			NDR_PULL_ALLOC(ndr, r->in.system_name);
-		} else {
-			r->in.system_name = NULL;
-		}
-		if (r->in.system_name) {
-			_mem_save_system_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.system_name, 0);
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, r->in.system_name));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_system_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_winreg_AccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.handle);
-		ZERO_STRUCTP(r->out.handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_OpenHKU(struct ndr_print *ndr, const char *name, int flags, const struct winreg_OpenHKU *r)
-{
-	ndr_print_struct(ndr, name, "winreg_OpenHKU");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_OpenHKU");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "system_name", r->in.system_name);
-		ndr->depth++;
-		if (r->in.system_name) {
-			ndr_print_uint16(ndr, "system_name", *r->in.system_name);
-		}
-		ndr->depth--;
-		ndr_print_winreg_AccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_OpenHKU");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->out.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->out.handle);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_CloseKey(struct ndr_push *ndr, int flags, const struct winreg_CloseKey *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_CloseKey(struct ndr_pull *ndr, int flags, struct winreg_CloseKey *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.handle);
-		*r->out.handle = *r->in.handle;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_CloseKey(struct ndr_print *ndr, const char *name, int flags, const struct winreg_CloseKey *r)
-{
-	ndr_print_struct(ndr, name, "winreg_CloseKey");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_CloseKey");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_CloseKey");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->out.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->out.handle);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_CreateKey(struct ndr_push *ndr, int flags, const struct winreg_CreateKey *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.name));
-		NDR_CHECK(ndr_push_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.keyclass));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.options));
-		NDR_CHECK(ndr_push_winreg_AccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.secdesc));
-		if (r->in.secdesc) {
-			NDR_CHECK(ndr_push_winreg_SecBuf(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.secdesc));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.action_taken));
-		if (r->in.action_taken) {
-			NDR_CHECK(ndr_push_winreg_CreateAction(ndr, NDR_SCALARS, *r->in.action_taken));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.new_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.new_handle));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.action_taken));
-		if (r->out.action_taken) {
-			NDR_CHECK(ndr_push_winreg_CreateAction(ndr, NDR_SCALARS, *r->out.action_taken));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_CreateKey(struct ndr_pull *ndr, int flags, struct winreg_CreateKey *r)
-{
-	uint32_t _ptr_secdesc;
-	uint32_t _ptr_action_taken;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_secdesc_0;
-	TALLOC_CTX *_mem_save_new_handle_0;
-	TALLOC_CTX *_mem_save_action_taken_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.name));
-		NDR_CHECK(ndr_pull_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.keyclass));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.options));
-		NDR_CHECK(ndr_pull_winreg_AccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_secdesc));
-		if (_ptr_secdesc) {
-			NDR_PULL_ALLOC(ndr, r->in.secdesc);
-		} else {
-			r->in.secdesc = NULL;
-		}
-		if (r->in.secdesc) {
-			_mem_save_secdesc_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.secdesc, 0);
-			NDR_CHECK(ndr_pull_winreg_SecBuf(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.secdesc));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_secdesc_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_action_taken));
-		if (_ptr_action_taken) {
-			NDR_PULL_ALLOC(ndr, r->in.action_taken);
-		} else {
-			r->in.action_taken = NULL;
-		}
-		if (r->in.action_taken) {
-			_mem_save_action_taken_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.action_taken, 0);
-			NDR_CHECK(ndr_pull_winreg_CreateAction(ndr, NDR_SCALARS, r->in.action_taken));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_action_taken_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.new_handle);
-		ZERO_STRUCTP(r->out.new_handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.new_handle);
-		}
-		_mem_save_new_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.new_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.new_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_new_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_action_taken));
-		if (_ptr_action_taken) {
-			NDR_PULL_ALLOC(ndr, r->out.action_taken);
-		} else {
-			r->out.action_taken = NULL;
-		}
-		if (r->out.action_taken) {
-			_mem_save_action_taken_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.action_taken, 0);
-			NDR_CHECK(ndr_pull_winreg_CreateAction(ndr, NDR_SCALARS, r->out.action_taken));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_action_taken_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_CreateKey(struct ndr_print *ndr, const char *name, int flags, const struct winreg_CreateKey *r)
-{
-	ndr_print_struct(ndr, name, "winreg_CreateKey");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_CreateKey");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_winreg_String(ndr, "name", &r->in.name);
-		ndr_print_winreg_String(ndr, "keyclass", &r->in.keyclass);
-		ndr_print_uint32(ndr, "options", r->in.options);
-		ndr_print_winreg_AccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr_print_ptr(ndr, "secdesc", r->in.secdesc);
-		ndr->depth++;
-		if (r->in.secdesc) {
-			ndr_print_winreg_SecBuf(ndr, "secdesc", r->in.secdesc);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "action_taken", r->in.action_taken);
-		ndr->depth++;
-		if (r->in.action_taken) {
-			ndr_print_winreg_CreateAction(ndr, "action_taken", *r->in.action_taken);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_CreateKey");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "new_handle", r->out.new_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "new_handle", r->out.new_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "action_taken", r->out.action_taken);
-		ndr->depth++;
-		if (r->out.action_taken) {
-			ndr_print_winreg_CreateAction(ndr, "action_taken", *r->out.action_taken);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_DeleteKey(struct ndr_push *ndr, int flags, const struct winreg_DeleteKey *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.key));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_DeleteKey(struct ndr_pull *ndr, int flags, struct winreg_DeleteKey *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.key));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_DeleteKey(struct ndr_print *ndr, const char *name, int flags, const struct winreg_DeleteKey *r)
-{
-	ndr_print_struct(ndr, name, "winreg_DeleteKey");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_DeleteKey");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_winreg_String(ndr, "key", &r->in.key);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_DeleteKey");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_DeleteValue(struct ndr_push *ndr, int flags, const struct winreg_DeleteValue *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.value));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_DeleteValue(struct ndr_pull *ndr, int flags, struct winreg_DeleteValue *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.value));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_DeleteValue(struct ndr_print *ndr, const char *name, int flags, const struct winreg_DeleteValue *r)
-{
-	ndr_print_struct(ndr, name, "winreg_DeleteValue");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_DeleteValue");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_winreg_String(ndr, "value", &r->in.value);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_DeleteValue");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_EnumKey(struct ndr_push *ndr, int flags, const struct winreg_EnumKey *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.enum_index));
-		if (r->in.name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_winreg_StringBuf(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.name));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.keyclass));
-		if (r->in.keyclass) {
-			NDR_CHECK(ndr_push_winreg_StringBuf(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.keyclass));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.last_changed_time));
-		if (r->in.last_changed_time) {
-			NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, *r->in.last_changed_time));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_winreg_StringBuf(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.name));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.keyclass));
-		if (r->out.keyclass) {
-			NDR_CHECK(ndr_push_winreg_StringBuf(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.keyclass));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.last_changed_time));
-		if (r->out.last_changed_time) {
-			NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, *r->out.last_changed_time));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_EnumKey(struct ndr_pull *ndr, int flags, struct winreg_EnumKey *r)
-{
-	uint32_t _ptr_keyclass;
-	uint32_t _ptr_last_changed_time;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_name_0;
-	TALLOC_CTX *_mem_save_keyclass_0;
-	TALLOC_CTX *_mem_save_last_changed_time_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.enum_index));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.name);
-		}
-		_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_winreg_StringBuf(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.name));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_keyclass));
-		if (_ptr_keyclass) {
-			NDR_PULL_ALLOC(ndr, r->in.keyclass);
-		} else {
-			r->in.keyclass = NULL;
-		}
-		if (r->in.keyclass) {
-			_mem_save_keyclass_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.keyclass, 0);
-			NDR_CHECK(ndr_pull_winreg_StringBuf(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.keyclass));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_keyclass_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_last_changed_time));
-		if (_ptr_last_changed_time) {
-			NDR_PULL_ALLOC(ndr, r->in.last_changed_time);
-		} else {
-			r->in.last_changed_time = NULL;
-		}
-		if (r->in.last_changed_time) {
-			_mem_save_last_changed_time_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.last_changed_time, 0);
-			NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, r->in.last_changed_time));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_last_changed_time_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.name);
-		*r->out.name = *r->in.name;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.name);
-		}
-		_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_winreg_StringBuf(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.name));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_keyclass));
-		if (_ptr_keyclass) {
-			NDR_PULL_ALLOC(ndr, r->out.keyclass);
-		} else {
-			r->out.keyclass = NULL;
-		}
-		if (r->out.keyclass) {
-			_mem_save_keyclass_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.keyclass, 0);
-			NDR_CHECK(ndr_pull_winreg_StringBuf(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.keyclass));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_keyclass_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_last_changed_time));
-		if (_ptr_last_changed_time) {
-			NDR_PULL_ALLOC(ndr, r->out.last_changed_time);
-		} else {
-			r->out.last_changed_time = NULL;
-		}
-		if (r->out.last_changed_time) {
-			_mem_save_last_changed_time_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.last_changed_time, 0);
-			NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, r->out.last_changed_time));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_last_changed_time_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_EnumKey(struct ndr_print *ndr, const char *name, int flags, const struct winreg_EnumKey *r)
-{
-	ndr_print_struct(ndr, name, "winreg_EnumKey");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_EnumKey");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "enum_index", r->in.enum_index);
-		ndr_print_ptr(ndr, "name", r->in.name);
-		ndr->depth++;
-		ndr_print_winreg_StringBuf(ndr, "name", r->in.name);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "keyclass", r->in.keyclass);
-		ndr->depth++;
-		if (r->in.keyclass) {
-			ndr_print_winreg_StringBuf(ndr, "keyclass", r->in.keyclass);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "last_changed_time", r->in.last_changed_time);
-		ndr->depth++;
-		if (r->in.last_changed_time) {
-			ndr_print_NTTIME(ndr, "last_changed_time", *r->in.last_changed_time);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_EnumKey");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "name", r->out.name);
-		ndr->depth++;
-		ndr_print_winreg_StringBuf(ndr, "name", r->out.name);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "keyclass", r->out.keyclass);
-		ndr->depth++;
-		if (r->out.keyclass) {
-			ndr_print_winreg_StringBuf(ndr, "keyclass", r->out.keyclass);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "last_changed_time", r->out.last_changed_time);
-		ndr->depth++;
-		if (r->out.last_changed_time) {
-			ndr_print_NTTIME(ndr, "last_changed_time", *r->out.last_changed_time);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_EnumValue(struct ndr_push *ndr, int flags, const struct winreg_EnumValue *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.enum_index));
-		if (r->in.name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_winreg_ValNameBuf(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.name));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.type));
-		if (r->in.type) {
-			NDR_CHECK(ndr_push_winreg_Type(ndr, NDR_SCALARS, *r->in.type));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.value));
-		if (r->in.value) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.size));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.length));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->in.value, *r->in.length));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.size));
-		if (r->in.size) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.size));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.length));
-		if (r->in.length) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.length));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_winreg_ValNameBuf(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.name));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.type));
-		if (r->out.type) {
-			NDR_CHECK(ndr_push_winreg_Type(ndr, NDR_SCALARS, *r->out.type));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.value));
-		if (r->out.value) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.size));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.length));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->out.value, *r->out.length));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.size));
-		if (r->out.size) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.size));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.length));
-		if (r->out.length) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.length));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_EnumValue(struct ndr_pull *ndr, int flags, struct winreg_EnumValue *r)
-{
-	uint32_t _ptr_type;
-	uint32_t _ptr_value;
-	uint32_t _ptr_size;
-	uint32_t _ptr_length;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_name_0;
-	TALLOC_CTX *_mem_save_type_0;
-	TALLOC_CTX *_mem_save_value_0;
-	TALLOC_CTX *_mem_save_size_0;
-	TALLOC_CTX *_mem_save_length_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.enum_index));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.name);
-		}
-		_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_winreg_ValNameBuf(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.name));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_type));
-		if (_ptr_type) {
-			NDR_PULL_ALLOC(ndr, r->in.type);
-		} else {
-			r->in.type = NULL;
-		}
-		if (r->in.type) {
-			_mem_save_type_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.type, 0);
-			NDR_CHECK(ndr_pull_winreg_Type(ndr, NDR_SCALARS, r->in.type));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_type_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_value));
-		if (_ptr_value) {
-			NDR_PULL_ALLOC(ndr, r->in.value);
-		} else {
-			r->in.value = NULL;
-		}
-		if (r->in.value) {
-			_mem_save_value_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.value, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.value));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.value));
-			if (ndr_get_array_length(ndr, &r->in.value) > ndr_get_array_size(ndr, &r->in.value)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.value), ndr_get_array_length(ndr, &r->in.value));
-			}
-			NDR_PULL_ALLOC_N(ndr, r->in.value, ndr_get_array_size(ndr, &r->in.value));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->in.value, ndr_get_array_length(ndr, &r->in.value)));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_value_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_size));
-		if (_ptr_size) {
-			NDR_PULL_ALLOC(ndr, r->in.size);
-		} else {
-			r->in.size = NULL;
-		}
-		if (r->in.size) {
-			_mem_save_size_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.size, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.size));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_size_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_length));
-		if (_ptr_length) {
-			NDR_PULL_ALLOC(ndr, r->in.length);
-		} else {
-			r->in.length = NULL;
-		}
-		if (r->in.length) {
-			_mem_save_length_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.length, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.length));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_length_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.name);
-		*r->out.name = *r->in.name;
-		if (r->in.value) {
-			if (r->in.size == NULL) return ndr_pull_error(ndr, NDR_ERR_INVALID_POINTER, "NULL Pointer for size_is()");
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.value, *r->in.size));
-		}
-		if (r->in.value) {
-			if (r->in.length == NULL) return ndr_pull_error(ndr, NDR_ERR_INVALID_POINTER, "NULL Pointer for length_is()");
-			NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->in.value, *r->in.length));
-		}
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.name);
-		}
-		_mem_save_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_winreg_ValNameBuf(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.name));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_type));
-		if (_ptr_type) {
-			NDR_PULL_ALLOC(ndr, r->out.type);
-		} else {
-			r->out.type = NULL;
-		}
-		if (r->out.type) {
-			_mem_save_type_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.type, 0);
-			NDR_CHECK(ndr_pull_winreg_Type(ndr, NDR_SCALARS, r->out.type));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_type_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_value));
-		if (_ptr_value) {
-			NDR_PULL_ALLOC(ndr, r->out.value);
-		} else {
-			r->out.value = NULL;
-		}
-		if (r->out.value) {
-			_mem_save_value_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.value, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->out.value));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->out.value));
-			if (ndr_get_array_length(ndr, &r->out.value) > ndr_get_array_size(ndr, &r->out.value)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->out.value), ndr_get_array_length(ndr, &r->out.value));
-			}
-			NDR_PULL_ALLOC_N(ndr, r->out.value, ndr_get_array_size(ndr, &r->out.value));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.value, ndr_get_array_length(ndr, &r->out.value)));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_value_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_size));
-		if (_ptr_size) {
-			NDR_PULL_ALLOC(ndr, r->out.size);
-		} else {
-			r->out.size = NULL;
-		}
-		if (r->out.size) {
-			_mem_save_size_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.size, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.size));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_size_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_length));
-		if (_ptr_length) {
-			NDR_PULL_ALLOC(ndr, r->out.length);
-		} else {
-			r->out.length = NULL;
-		}
-		if (r->out.length) {
-			_mem_save_length_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.length, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.length));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_length_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-		if (r->out.value) {
-			if (r->out.size == NULL) return ndr_pull_error(ndr, NDR_ERR_INVALID_POINTER, "NULL Pointer for size_is()");
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->out.value, *r->out.size));
-		}
-		if (r->out.value) {
-			if (r->out.length == NULL) return ndr_pull_error(ndr, NDR_ERR_INVALID_POINTER, "NULL Pointer for length_is()");
-			NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->out.value, *r->out.length));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_EnumValue(struct ndr_print *ndr, const char *name, int flags, const struct winreg_EnumValue *r)
-{
-	ndr_print_struct(ndr, name, "winreg_EnumValue");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_EnumValue");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "enum_index", r->in.enum_index);
-		ndr_print_ptr(ndr, "name", r->in.name);
-		ndr->depth++;
-		ndr_print_winreg_ValNameBuf(ndr, "name", r->in.name);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "type", r->in.type);
-		ndr->depth++;
-		if (r->in.type) {
-			ndr_print_winreg_Type(ndr, "type", *r->in.type);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "value", r->in.value);
-		ndr->depth++;
-		if (r->in.value) {
-			if (r->in.length == NULL) return;
-			ndr_print_array_uint8(ndr, "value", r->in.value, *r->in.length);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "size", r->in.size);
-		ndr->depth++;
-		if (r->in.size) {
-			ndr_print_uint32(ndr, "size", *r->in.size);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "length", r->in.length);
-		ndr->depth++;
-		if (r->in.length) {
-			ndr_print_uint32(ndr, "length", *r->in.length);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_EnumValue");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "name", r->out.name);
-		ndr->depth++;
-		ndr_print_winreg_ValNameBuf(ndr, "name", r->out.name);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "type", r->out.type);
-		ndr->depth++;
-		if (r->out.type) {
-			ndr_print_winreg_Type(ndr, "type", *r->out.type);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "value", r->out.value);
-		ndr->depth++;
-		if (r->out.value) {
-			if (r->out.length == NULL) return;
-			ndr_print_array_uint8(ndr, "value", r->out.value, *r->out.length);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "size", r->out.size);
-		ndr->depth++;
-		if (r->out.size) {
-			ndr_print_uint32(ndr, "size", *r->out.size);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "length", r->out.length);
-		ndr->depth++;
-		if (r->out.length) {
-			ndr_print_uint32(ndr, "length", *r->out.length);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_FlushKey(struct ndr_push *ndr, int flags, const struct winreg_FlushKey *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_FlushKey(struct ndr_pull *ndr, int flags, struct winreg_FlushKey *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_FlushKey(struct ndr_print *ndr, const char *name, int flags, const struct winreg_FlushKey *r)
-{
-	ndr_print_struct(ndr, name, "winreg_FlushKey");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_FlushKey");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_FlushKey");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_GetKeySecurity(struct ndr_push *ndr, int flags, const struct winreg_GetKeySecurity *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_security_secinfo(ndr, NDR_SCALARS, r->in.sec_info));
-		if (r->in.sd == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_KeySecurityData(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sd));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.sd == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_KeySecurityData(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sd));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_GetKeySecurity(struct ndr_pull *ndr, int flags, struct winreg_GetKeySecurity *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_sd_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_security_secinfo(ndr, NDR_SCALARS, &r->in.sec_info));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sd);
-		}
-		_mem_save_sd_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sd, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_KeySecurityData(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sd));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sd_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.sd);
-		*r->out.sd = *r->in.sd;
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.sd);
-		}
-		_mem_save_sd_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.sd, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_KeySecurityData(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sd));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sd_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_GetKeySecurity(struct ndr_print *ndr, const char *name, int flags, const struct winreg_GetKeySecurity *r)
-{
-	ndr_print_struct(ndr, name, "winreg_GetKeySecurity");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_GetKeySecurity");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_security_secinfo(ndr, "sec_info", r->in.sec_info);
-		ndr_print_ptr(ndr, "sd", r->in.sd);
-		ndr->depth++;
-		ndr_print_KeySecurityData(ndr, "sd", r->in.sd);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_GetKeySecurity");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "sd", r->out.sd);
-		ndr->depth++;
-		ndr_print_KeySecurityData(ndr, "sd", r->out.sd);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_LoadKey(struct ndr_push *ndr, int flags, const struct winreg_LoadKey *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.keyname));
-		if (r->in.keyname) {
-			NDR_CHECK(ndr_push_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.keyname));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.filename));
-		if (r->in.filename) {
-			NDR_CHECK(ndr_push_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.filename));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_LoadKey(struct ndr_pull *ndr, int flags, struct winreg_LoadKey *r)
-{
-	uint32_t _ptr_keyname;
-	uint32_t _ptr_filename;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_keyname_0;
-	TALLOC_CTX *_mem_save_filename_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_keyname));
-		if (_ptr_keyname) {
-			NDR_PULL_ALLOC(ndr, r->in.keyname);
-		} else {
-			r->in.keyname = NULL;
-		}
-		if (r->in.keyname) {
-			_mem_save_keyname_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.keyname, 0);
-			NDR_CHECK(ndr_pull_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.keyname));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_keyname_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_filename));
-		if (_ptr_filename) {
-			NDR_PULL_ALLOC(ndr, r->in.filename);
-		} else {
-			r->in.filename = NULL;
-		}
-		if (r->in.filename) {
-			_mem_save_filename_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.filename, 0);
-			NDR_CHECK(ndr_pull_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.filename));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_filename_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_LoadKey(struct ndr_print *ndr, const char *name, int flags, const struct winreg_LoadKey *r)
-{
-	ndr_print_struct(ndr, name, "winreg_LoadKey");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_LoadKey");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "keyname", r->in.keyname);
-		ndr->depth++;
-		if (r->in.keyname) {
-			ndr_print_winreg_String(ndr, "keyname", r->in.keyname);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "filename", r->in.filename);
-		ndr->depth++;
-		if (r->in.filename) {
-			ndr_print_winreg_String(ndr, "filename", r->in.filename);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_LoadKey");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_NotifyChangeKeyValue(struct ndr_push *ndr, int flags, const struct winreg_NotifyChangeKeyValue *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->in.watch_subtree));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.notify_filter));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown));
-		NDR_CHECK(ndr_push_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.string1));
-		NDR_CHECK(ndr_push_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.string2));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown2));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_NotifyChangeKeyValue(struct ndr_pull *ndr, int flags, struct winreg_NotifyChangeKeyValue *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->in.watch_subtree));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.notify_filter));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown));
-		NDR_CHECK(ndr_pull_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.string1));
-		NDR_CHECK(ndr_pull_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.string2));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown2));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_NotifyChangeKeyValue(struct ndr_print *ndr, const char *name, int flags, const struct winreg_NotifyChangeKeyValue *r)
-{
-	ndr_print_struct(ndr, name, "winreg_NotifyChangeKeyValue");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_NotifyChangeKeyValue");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_uint8(ndr, "watch_subtree", r->in.watch_subtree);
-		ndr_print_uint32(ndr, "notify_filter", r->in.notify_filter);
-		ndr_print_uint32(ndr, "unknown", r->in.unknown);
-		ndr_print_winreg_String(ndr, "string1", &r->in.string1);
-		ndr_print_winreg_String(ndr, "string2", &r->in.string2);
-		ndr_print_uint32(ndr, "unknown2", r->in.unknown2);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_NotifyChangeKeyValue");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_OpenKey(struct ndr_push *ndr, int flags, const struct winreg_OpenKey *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.parent_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.parent_handle));
-		NDR_CHECK(ndr_push_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.keyname));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown));
-		NDR_CHECK(ndr_push_winreg_AccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_OpenKey(struct ndr_pull *ndr, int flags, struct winreg_OpenKey *r)
-{
-	TALLOC_CTX *_mem_save_parent_handle_0;
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.parent_handle);
-		}
-		_mem_save_parent_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.parent_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.parent_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_parent_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.keyname));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown));
-		NDR_CHECK(ndr_pull_winreg_AccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.handle);
-		ZERO_STRUCTP(r->out.handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_OpenKey(struct ndr_print *ndr, const char *name, int flags, const struct winreg_OpenKey *r)
-{
-	ndr_print_struct(ndr, name, "winreg_OpenKey");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_OpenKey");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "parent_handle", r->in.parent_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "parent_handle", r->in.parent_handle);
-		ndr->depth--;
-		ndr_print_winreg_String(ndr, "keyname", &r->in.keyname);
-		ndr_print_uint32(ndr, "unknown", r->in.unknown);
-		ndr_print_winreg_AccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_OpenKey");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->out.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->out.handle);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_QueryInfoKey(struct ndr_push *ndr, int flags, const struct winreg_QueryInfoKey *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.classname == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.classname));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.classname == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.classname));
-		if (r->out.num_subkeys == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.num_subkeys));
-		if (r->out.max_subkeylen == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.max_subkeylen));
-		if (r->out.max_classlen == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.max_classlen));
-		if (r->out.num_values == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.num_values));
-		if (r->out.max_valnamelen == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.max_valnamelen));
-		if (r->out.max_valbufsize == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.max_valbufsize));
-		if (r->out.secdescsize == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.secdescsize));
-		if (r->out.last_changed_time == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, *r->out.last_changed_time));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_QueryInfoKey(struct ndr_pull *ndr, int flags, struct winreg_QueryInfoKey *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_classname_0;
-	TALLOC_CTX *_mem_save_num_subkeys_0;
-	TALLOC_CTX *_mem_save_max_subkeylen_0;
-	TALLOC_CTX *_mem_save_max_classlen_0;
-	TALLOC_CTX *_mem_save_num_values_0;
-	TALLOC_CTX *_mem_save_max_valnamelen_0;
-	TALLOC_CTX *_mem_save_max_valbufsize_0;
-	TALLOC_CTX *_mem_save_secdescsize_0;
-	TALLOC_CTX *_mem_save_last_changed_time_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.classname);
-		}
-		_mem_save_classname_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.classname, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.classname));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_classname_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.classname);
-		*r->out.classname = *r->in.classname;
-		NDR_PULL_ALLOC(ndr, r->out.num_subkeys);
-		ZERO_STRUCTP(r->out.num_subkeys);
-		NDR_PULL_ALLOC(ndr, r->out.max_subkeylen);
-		ZERO_STRUCTP(r->out.max_subkeylen);
-		NDR_PULL_ALLOC(ndr, r->out.max_classlen);
-		ZERO_STRUCTP(r->out.max_classlen);
-		NDR_PULL_ALLOC(ndr, r->out.num_values);
-		ZERO_STRUCTP(r->out.num_values);
-		NDR_PULL_ALLOC(ndr, r->out.max_valnamelen);
-		ZERO_STRUCTP(r->out.max_valnamelen);
-		NDR_PULL_ALLOC(ndr, r->out.max_valbufsize);
-		ZERO_STRUCTP(r->out.max_valbufsize);
-		NDR_PULL_ALLOC(ndr, r->out.secdescsize);
-		ZERO_STRUCTP(r->out.secdescsize);
-		NDR_PULL_ALLOC(ndr, r->out.last_changed_time);
-		ZERO_STRUCTP(r->out.last_changed_time);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.classname);
-		}
-		_mem_save_classname_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.classname, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.classname));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_classname_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.num_subkeys);
-		}
-		_mem_save_num_subkeys_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.num_subkeys, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.num_subkeys));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_num_subkeys_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.max_subkeylen);
-		}
-		_mem_save_max_subkeylen_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.max_subkeylen, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.max_subkeylen));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_max_subkeylen_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.max_classlen);
-		}
-		_mem_save_max_classlen_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.max_classlen, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.max_classlen));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_max_classlen_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.num_values);
-		}
-		_mem_save_num_values_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.num_values, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.num_values));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_num_values_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.max_valnamelen);
-		}
-		_mem_save_max_valnamelen_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.max_valnamelen, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.max_valnamelen));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_max_valnamelen_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.max_valbufsize);
-		}
-		_mem_save_max_valbufsize_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.max_valbufsize, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.max_valbufsize));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_max_valbufsize_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.secdescsize);
-		}
-		_mem_save_secdescsize_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.secdescsize, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.secdescsize));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_secdescsize_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.last_changed_time);
-		}
-		_mem_save_last_changed_time_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.last_changed_time, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, r->out.last_changed_time));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_last_changed_time_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_QueryInfoKey(struct ndr_print *ndr, const char *name, int flags, const struct winreg_QueryInfoKey *r)
-{
-	ndr_print_struct(ndr, name, "winreg_QueryInfoKey");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_QueryInfoKey");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "classname", r->in.classname);
-		ndr->depth++;
-		ndr_print_winreg_String(ndr, "classname", r->in.classname);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_QueryInfoKey");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "classname", r->out.classname);
-		ndr->depth++;
-		ndr_print_winreg_String(ndr, "classname", r->out.classname);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "num_subkeys", r->out.num_subkeys);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "num_subkeys", *r->out.num_subkeys);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "max_subkeylen", r->out.max_subkeylen);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "max_subkeylen", *r->out.max_subkeylen);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "max_classlen", r->out.max_classlen);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "max_classlen", *r->out.max_classlen);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "num_values", r->out.num_values);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "num_values", *r->out.num_values);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "max_valnamelen", r->out.max_valnamelen);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "max_valnamelen", *r->out.max_valnamelen);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "max_valbufsize", r->out.max_valbufsize);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "max_valbufsize", *r->out.max_valbufsize);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "secdescsize", r->out.secdescsize);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "secdescsize", *r->out.secdescsize);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "last_changed_time", r->out.last_changed_time);
-		ndr->depth++;
-		ndr_print_NTTIME(ndr, "last_changed_time", *r->out.last_changed_time);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_QueryValue(struct ndr_push *ndr, int flags, const struct winreg_QueryValue *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.value_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.value_name));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.type));
-		if (r->in.type) {
-			NDR_CHECK(ndr_push_winreg_Type(ndr, NDR_SCALARS, *r->in.type));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.data));
-		if (r->in.data) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.data_size));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.value_length));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->in.data, *r->in.value_length));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.data_size));
-		if (r->in.data_size) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.data_size));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.value_length));
-		if (r->in.value_length) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.value_length));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.type));
-		if (r->out.type) {
-			NDR_CHECK(ndr_push_winreg_Type(ndr, NDR_SCALARS, *r->out.type));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.data));
-		if (r->out.data) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.data_size));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.value_length));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->out.data, *r->out.value_length));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.data_size));
-		if (r->out.data_size) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.data_size));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.value_length));
-		if (r->out.value_length) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.value_length));
-		}
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_QueryValue(struct ndr_pull *ndr, int flags, struct winreg_QueryValue *r)
-{
-	uint32_t _ptr_type;
-	uint32_t _ptr_data;
-	uint32_t _ptr_data_size;
-	uint32_t _ptr_value_length;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_value_name_0;
-	TALLOC_CTX *_mem_save_type_0;
-	TALLOC_CTX *_mem_save_data_0;
-	TALLOC_CTX *_mem_save_data_size_0;
-	TALLOC_CTX *_mem_save_value_length_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.value_name);
-		}
-		_mem_save_value_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.value_name, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.value_name));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_value_name_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_type));
-		if (_ptr_type) {
-			NDR_PULL_ALLOC(ndr, r->in.type);
-		} else {
-			r->in.type = NULL;
-		}
-		if (r->in.type) {
-			_mem_save_type_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.type, 0);
-			NDR_CHECK(ndr_pull_winreg_Type(ndr, NDR_SCALARS, r->in.type));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_type_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_data));
-		if (_ptr_data) {
-			NDR_PULL_ALLOC(ndr, r->in.data);
-		} else {
-			r->in.data = NULL;
-		}
-		if (r->in.data) {
-			_mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.data, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.data));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.data));
-			if (ndr_get_array_length(ndr, &r->in.data) > ndr_get_array_size(ndr, &r->in.data)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.data), ndr_get_array_length(ndr, &r->in.data));
-			}
-			NDR_PULL_ALLOC_N(ndr, r->in.data, ndr_get_array_size(ndr, &r->in.data));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->in.data, ndr_get_array_length(ndr, &r->in.data)));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_data_size));
-		if (_ptr_data_size) {
-			NDR_PULL_ALLOC(ndr, r->in.data_size);
-		} else {
-			r->in.data_size = NULL;
-		}
-		if (r->in.data_size) {
-			_mem_save_data_size_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.data_size, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.data_size));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_size_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_value_length));
-		if (_ptr_value_length) {
-			NDR_PULL_ALLOC(ndr, r->in.value_length);
-		} else {
-			r->in.value_length = NULL;
-		}
-		if (r->in.value_length) {
-			_mem_save_value_length_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.value_length, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.value_length));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_value_length_0, 0);
-		}
-		if (r->in.data) {
-			if (r->in.data_size == NULL) return ndr_pull_error(ndr, NDR_ERR_INVALID_POINTER, "NULL Pointer for size_is()");
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.data, *r->in.data_size));
-		}
-		if (r->in.data) {
-			if (r->in.value_length == NULL) return ndr_pull_error(ndr, NDR_ERR_INVALID_POINTER, "NULL Pointer for length_is()");
-			NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->in.data, *r->in.value_length));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_type));
-		if (_ptr_type) {
-			NDR_PULL_ALLOC(ndr, r->out.type);
-		} else {
-			r->out.type = NULL;
-		}
-		if (r->out.type) {
-			_mem_save_type_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.type, 0);
-			NDR_CHECK(ndr_pull_winreg_Type(ndr, NDR_SCALARS, r->out.type));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_type_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_data));
-		if (_ptr_data) {
-			NDR_PULL_ALLOC(ndr, r->out.data);
-		} else {
-			r->out.data = NULL;
-		}
-		if (r->out.data) {
-			_mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.data, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->out.data));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->out.data));
-			if (ndr_get_array_length(ndr, &r->out.data) > ndr_get_array_size(ndr, &r->out.data)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->out.data), ndr_get_array_length(ndr, &r->out.data));
-			}
-			NDR_PULL_ALLOC_N(ndr, r->out.data, ndr_get_array_size(ndr, &r->out.data));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.data, ndr_get_array_length(ndr, &r->out.data)));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_data_size));
-		if (_ptr_data_size) {
-			NDR_PULL_ALLOC(ndr, r->out.data_size);
-		} else {
-			r->out.data_size = NULL;
-		}
-		if (r->out.data_size) {
-			_mem_save_data_size_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.data_size, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.data_size));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_size_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_value_length));
-		if (_ptr_value_length) {
-			NDR_PULL_ALLOC(ndr, r->out.value_length);
-		} else {
-			r->out.value_length = NULL;
-		}
-		if (r->out.value_length) {
-			_mem_save_value_length_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.value_length, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.value_length));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_value_length_0, 0);
-		}
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-		if (r->out.data) {
-			if (r->out.data_size == NULL) return ndr_pull_error(ndr, NDR_ERR_INVALID_POINTER, "NULL Pointer for size_is()");
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->out.data, *r->out.data_size));
-		}
-		if (r->out.data) {
-			if (r->out.value_length == NULL) return ndr_pull_error(ndr, NDR_ERR_INVALID_POINTER, "NULL Pointer for length_is()");
-			NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->out.data, *r->out.value_length));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_QueryValue(struct ndr_print *ndr, const char *name, int flags, const struct winreg_QueryValue *r)
-{
-	ndr_print_struct(ndr, name, "winreg_QueryValue");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_QueryValue");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "value_name", r->in.value_name);
-		ndr->depth++;
-		ndr_print_winreg_String(ndr, "value_name", r->in.value_name);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "type", r->in.type);
-		ndr->depth++;
-		if (r->in.type) {
-			ndr_print_winreg_Type(ndr, "type", *r->in.type);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "data", r->in.data);
-		ndr->depth++;
-		if (r->in.data) {
-			if (r->in.value_length == NULL) return;
-			ndr_print_array_uint8(ndr, "data", r->in.data, *r->in.value_length);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "data_size", r->in.data_size);
-		ndr->depth++;
-		if (r->in.data_size) {
-			ndr_print_uint32(ndr, "data_size", *r->in.data_size);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "value_length", r->in.value_length);
-		ndr->depth++;
-		if (r->in.value_length) {
-			ndr_print_uint32(ndr, "value_length", *r->in.value_length);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_QueryValue");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "type", r->out.type);
-		ndr->depth++;
-		if (r->out.type) {
-			ndr_print_winreg_Type(ndr, "type", *r->out.type);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "data", r->out.data);
-		ndr->depth++;
-		if (r->out.data) {
-			if (r->out.value_length == NULL) return;
-			ndr_print_array_uint8(ndr, "data", r->out.data, *r->out.value_length);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "data_size", r->out.data_size);
-		ndr->depth++;
-		if (r->out.data_size) {
-			ndr_print_uint32(ndr, "data_size", *r->out.data_size);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "value_length", r->out.value_length);
-		ndr->depth++;
-		if (r->out.value_length) {
-			ndr_print_uint32(ndr, "value_length", *r->out.value_length);
-		}
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_ReplaceKey(struct ndr_push *ndr, int flags, const struct winreg_ReplaceKey *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_ReplaceKey(struct ndr_pull *ndr, int flags, struct winreg_ReplaceKey *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_ReplaceKey(struct ndr_print *ndr, const char *name, int flags, const struct winreg_ReplaceKey *r)
-{
-	ndr_print_struct(ndr, name, "winreg_ReplaceKey");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_ReplaceKey");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_ReplaceKey");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_RestoreKey(struct ndr_push *ndr, int flags, const struct winreg_RestoreKey *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.filename == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.filename));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_RestoreKey(struct ndr_pull *ndr, int flags, struct winreg_RestoreKey *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_filename_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.filename);
-		}
-		_mem_save_filename_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.filename, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.filename));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_filename_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.flags));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_RestoreKey(struct ndr_print *ndr, const char *name, int flags, const struct winreg_RestoreKey *r)
-{
-	ndr_print_struct(ndr, name, "winreg_RestoreKey");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_RestoreKey");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "filename", r->in.filename);
-		ndr->depth++;
-		ndr_print_winreg_String(ndr, "filename", r->in.filename);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "flags", r->in.flags);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_RestoreKey");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_SaveKey(struct ndr_push *ndr, int flags, const struct winreg_SaveKey *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		if (r->in.filename == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.filename));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.sec_attrib));
-		if (r->in.sec_attrib) {
-			NDR_CHECK(ndr_push_KeySecurityAttribute(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sec_attrib));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_SaveKey(struct ndr_pull *ndr, int flags, struct winreg_SaveKey *r)
-{
-	uint32_t _ptr_sec_attrib;
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_filename_0;
-	TALLOC_CTX *_mem_save_sec_attrib_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.filename);
-		}
-		_mem_save_filename_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.filename, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.filename));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_filename_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sec_attrib));
-		if (_ptr_sec_attrib) {
-			NDR_PULL_ALLOC(ndr, r->in.sec_attrib);
-		} else {
-			r->in.sec_attrib = NULL;
-		}
-		if (r->in.sec_attrib) {
-			_mem_save_sec_attrib_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.sec_attrib, 0);
-			NDR_CHECK(ndr_pull_KeySecurityAttribute(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sec_attrib));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sec_attrib_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_SaveKey(struct ndr_print *ndr, const char *name, int flags, const struct winreg_SaveKey *r)
-{
-	ndr_print_struct(ndr, name, "winreg_SaveKey");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_SaveKey");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "filename", r->in.filename);
-		ndr->depth++;
-		ndr_print_winreg_String(ndr, "filename", r->in.filename);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "sec_attrib", r->in.sec_attrib);
-		ndr->depth++;
-		if (r->in.sec_attrib) {
-			ndr_print_KeySecurityAttribute(ndr, "sec_attrib", r->in.sec_attrib);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_SaveKey");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_SetKeySecurity(struct ndr_push *ndr, int flags, const struct winreg_SetKeySecurity *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_winreg_AccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-		if (r->in.sd == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_KeySecurityData(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sd));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_SetKeySecurity(struct ndr_pull *ndr, int flags, struct winreg_SetKeySecurity *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_sd_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_winreg_AccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.sd);
-		}
-		_mem_save_sd_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.sd, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_KeySecurityData(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.sd));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sd_0, LIBNDR_FLAG_REF_ALLOC);
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_SetKeySecurity(struct ndr_print *ndr, const char *name, int flags, const struct winreg_SetKeySecurity *r)
-{
-	ndr_print_struct(ndr, name, "winreg_SetKeySecurity");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_SetKeySecurity");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_winreg_AccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr_print_ptr(ndr, "sd", r->in.sd);
-		ndr->depth++;
-		ndr_print_KeySecurityData(ndr, "sd", r->in.sd);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_SetKeySecurity");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_SetValue(struct ndr_push *ndr, int flags, const struct winreg_SetValue *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_CHECK(ndr_push_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.name));
-		NDR_CHECK(ndr_push_winreg_Type(ndr, NDR_SCALARS, r->in.type));
-		if (r->in.data == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.size));
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->in.data, r->in.size));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.size));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_SetValue(struct ndr_pull *ndr, int flags, struct winreg_SetValue *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_winreg_String(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.name));
-		NDR_CHECK(ndr_pull_winreg_Type(ndr, NDR_SCALARS, &r->in.type));
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.data));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC_N(ndr, r->in.data, ndr_get_array_size(ndr, &r->in.data));
-		}
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->in.data, ndr_get_array_size(ndr, &r->in.data)));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.size));
-		if (r->in.data) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.data, r->in.size));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_SetValue(struct ndr_print *ndr, const char *name, int flags, const struct winreg_SetValue *r)
-{
-	ndr_print_struct(ndr, name, "winreg_SetValue");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_SetValue");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr_print_winreg_String(ndr, "name", &r->in.name);
-		ndr_print_winreg_Type(ndr, "type", r->in.type);
-		ndr_print_ptr(ndr, "data", r->in.data);
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "data", r->in.data, r->in.size);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "size", r->in.size);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_SetValue");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_UnLoadKey(struct ndr_push *ndr, int flags, const struct winreg_UnLoadKey *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_UnLoadKey(struct ndr_pull *ndr, int flags, struct winreg_UnLoadKey *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_UnLoadKey(struct ndr_print *ndr, const char *name, int flags, const struct winreg_UnLoadKey *r)
-{
-	ndr_print_struct(ndr, name, "winreg_UnLoadKey");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_UnLoadKey");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_UnLoadKey");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_InitiateSystemShutdown(struct ndr_push *ndr, int flags, const struct winreg_InitiateSystemShutdown *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.hostname));
-		if (r->in.hostname) {
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, *r->in.hostname));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.message));
-		if (r->in.message) {
-			NDR_CHECK(ndr_push_initshutdown_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.message));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.timeout));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->in.force_apps));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->in.reboot));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_InitiateSystemShutdown(struct ndr_pull *ndr, int flags, struct winreg_InitiateSystemShutdown *r)
-{
-	uint32_t _ptr_hostname;
-	uint32_t _ptr_message;
-	TALLOC_CTX *_mem_save_hostname_0;
-	TALLOC_CTX *_mem_save_message_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_hostname));
-		if (_ptr_hostname) {
-			NDR_PULL_ALLOC(ndr, r->in.hostname);
-		} else {
-			r->in.hostname = NULL;
-		}
-		if (r->in.hostname) {
-			_mem_save_hostname_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.hostname, 0);
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, r->in.hostname));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_hostname_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_message));
-		if (_ptr_message) {
-			NDR_PULL_ALLOC(ndr, r->in.message);
-		} else {
-			r->in.message = NULL;
-		}
-		if (r->in.message) {
-			_mem_save_message_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.message, 0);
-			NDR_CHECK(ndr_pull_initshutdown_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.message));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_message_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.timeout));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->in.force_apps));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->in.reboot));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_InitiateSystemShutdown(struct ndr_print *ndr, const char *name, int flags, const struct winreg_InitiateSystemShutdown *r)
-{
-	ndr_print_struct(ndr, name, "winreg_InitiateSystemShutdown");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_InitiateSystemShutdown");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "hostname", r->in.hostname);
-		ndr->depth++;
-		if (r->in.hostname) {
-			ndr_print_uint16(ndr, "hostname", *r->in.hostname);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "message", r->in.message);
-		ndr->depth++;
-		if (r->in.message) {
-			ndr_print_initshutdown_String(ndr, "message", r->in.message);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "timeout", r->in.timeout);
-		ndr_print_uint8(ndr, "force_apps", r->in.force_apps);
-		ndr_print_uint8(ndr, "reboot", r->in.reboot);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_InitiateSystemShutdown");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_AbortSystemShutdown(struct ndr_push *ndr, int flags, const struct winreg_AbortSystemShutdown *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server));
-		if (r->in.server) {
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, *r->in.server));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_AbortSystemShutdown(struct ndr_pull *ndr, int flags, struct winreg_AbortSystemShutdown *r)
-{
-	uint32_t _ptr_server;
-	TALLOC_CTX *_mem_save_server_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server));
-		if (_ptr_server) {
-			NDR_PULL_ALLOC(ndr, r->in.server);
-		} else {
-			r->in.server = NULL;
-		}
-		if (r->in.server) {
-			_mem_save_server_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server, 0);
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, r->in.server));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_0, 0);
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_AbortSystemShutdown(struct ndr_print *ndr, const char *name, int flags, const struct winreg_AbortSystemShutdown *r)
-{
-	ndr_print_struct(ndr, name, "winreg_AbortSystemShutdown");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_AbortSystemShutdown");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "server", r->in.server);
-		ndr->depth++;
-		if (r->in.server) {
-			ndr_print_uint16(ndr, "server", *r->in.server);
-		}
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_AbortSystemShutdown");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_GetVersion(struct ndr_push *ndr, int flags, const struct winreg_GetVersion *r)
-{
-	if (flags & NDR_IN) {
-		if (r->in.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.version == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.version));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_GetVersion(struct ndr_pull *ndr, int flags, struct winreg_GetVersion *r)
-{
-	TALLOC_CTX *_mem_save_handle_0;
-	TALLOC_CTX *_mem_save_version_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.version);
-		ZERO_STRUCTP(r->out.version);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.version);
-		}
-		_mem_save_version_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.version, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.version));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_version_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_GetVersion(struct ndr_print *ndr, const char *name, int flags, const struct winreg_GetVersion *r)
-{
-	ndr_print_struct(ndr, name, "winreg_GetVersion");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_GetVersion");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->in.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->in.handle);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_GetVersion");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "version", r->out.version);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "version", *r->out.version);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_OpenHKCC(struct ndr_push *ndr, int flags, const struct winreg_OpenHKCC *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.system_name));
-		if (r->in.system_name) {
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, *r->in.system_name));
-		}
-		NDR_CHECK(ndr_push_winreg_AccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_OpenHKCC(struct ndr_pull *ndr, int flags, struct winreg_OpenHKCC *r)
-{
-	uint32_t _ptr_system_name;
-	TALLOC_CTX *_mem_save_system_name_0;
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_system_name));
-		if (_ptr_system_name) {
-			NDR_PULL_ALLOC(ndr, r->in.system_name);
-		} else {
-			r->in.system_name = NULL;
-		}
-		if (r->in.system_name) {
-			_mem_save_system_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.system_name, 0);
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, r->in.system_name));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_system_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_winreg_AccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.handle);
-		ZERO_STRUCTP(r->out.handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_OpenHKCC(struct ndr_print *ndr, const char *name, int flags, const struct winreg_OpenHKCC *r)
-{
-	ndr_print_struct(ndr, name, "winreg_OpenHKCC");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_OpenHKCC");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "system_name", r->in.system_name);
-		ndr->depth++;
-		if (r->in.system_name) {
-			ndr_print_uint16(ndr, "system_name", *r->in.system_name);
-		}
-		ndr->depth--;
-		ndr_print_winreg_AccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_OpenHKCC");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->out.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->out.handle);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_OpenHKDD(struct ndr_push *ndr, int flags, const struct winreg_OpenHKDD *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.system_name));
-		if (r->in.system_name) {
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, *r->in.system_name));
-		}
-		NDR_CHECK(ndr_push_winreg_AccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_OpenHKDD(struct ndr_pull *ndr, int flags, struct winreg_OpenHKDD *r)
-{
-	uint32_t _ptr_system_name;
-	TALLOC_CTX *_mem_save_system_name_0;
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_system_name));
-		if (_ptr_system_name) {
-			NDR_PULL_ALLOC(ndr, r->in.system_name);
-		} else {
-			r->in.system_name = NULL;
-		}
-		if (r->in.system_name) {
-			_mem_save_system_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.system_name, 0);
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, r->in.system_name));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_system_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_winreg_AccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.handle);
-		ZERO_STRUCTP(r->out.handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_OpenHKDD(struct ndr_print *ndr, const char *name, int flags, const struct winreg_OpenHKDD *r)
-{
-	ndr_print_struct(ndr, name, "winreg_OpenHKDD");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_OpenHKDD");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "system_name", r->in.system_name);
-		ndr->depth++;
-		if (r->in.system_name) {
-			ndr_print_uint16(ndr, "system_name", *r->in.system_name);
-		}
-		ndr->depth--;
-		ndr_print_winreg_AccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_OpenHKDD");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->out.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->out.handle);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_QueryMultipleValues(struct ndr_push *ndr, int flags, const struct winreg_QueryMultipleValues *r)
-{
-	uint32_t cntr_values_1;
-	if (flags & NDR_IN) {
-		if (r->in.key_handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.key_handle));
-		if (r->in.values == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.num_values));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.num_values));
-		for (cntr_values_1 = 0; cntr_values_1 < r->in.num_values; cntr_values_1++) {
-			NDR_CHECK(ndr_push_QueryMultipleValue(ndr, NDR_SCALARS, &r->in.values[cntr_values_1]));
-		}
-		for (cntr_values_1 = 0; cntr_values_1 < r->in.num_values; cntr_values_1++) {
-			NDR_CHECK(ndr_push_QueryMultipleValue(ndr, NDR_BUFFERS, &r->in.values[cntr_values_1]));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.num_values));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.buffer));
-		if (r->in.buffer) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.buffer_size));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.buffer_size));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->in.buffer, *r->in.buffer_size));
-		}
-		if (r->in.buffer_size == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.buffer_size));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.values == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.num_values));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.num_values));
-		for (cntr_values_1 = 0; cntr_values_1 < r->in.num_values; cntr_values_1++) {
-			NDR_CHECK(ndr_push_QueryMultipleValue(ndr, NDR_SCALARS, &r->out.values[cntr_values_1]));
-		}
-		for (cntr_values_1 = 0; cntr_values_1 < r->in.num_values; cntr_values_1++) {
-			NDR_CHECK(ndr_push_QueryMultipleValue(ndr, NDR_BUFFERS, &r->out.values[cntr_values_1]));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.buffer));
-		if (r->out.buffer) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.buffer_size));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.buffer_size));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->out.buffer, *r->out.buffer_size));
-		}
-		if (r->out.buffer_size == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.buffer_size));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_QueryMultipleValues(struct ndr_pull *ndr, int flags, struct winreg_QueryMultipleValues *r)
-{
-	uint32_t cntr_values_1;
-	uint32_t _ptr_buffer;
-	TALLOC_CTX *_mem_save_key_handle_0;
-	TALLOC_CTX *_mem_save_values_1;
-	TALLOC_CTX *_mem_save_buffer_0;
-	TALLOC_CTX *_mem_save_buffer_size_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.key_handle);
-		}
-		_mem_save_key_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.key_handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.key_handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_key_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.values));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.values));
-		if (ndr_get_array_length(ndr, &r->in.values) > ndr_get_array_size(ndr, &r->in.values)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.values), ndr_get_array_length(ndr, &r->in.values));
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC_N(ndr, r->in.values, ndr_get_array_size(ndr, &r->in.values));
-		}
-		memcpy(r->out.values, r->in.values, ndr_get_array_size(ndr, &r->in.values) * sizeof(*r->in.values));
-		_mem_save_values_1 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.values, 0);
-		for (cntr_values_1 = 0; cntr_values_1 < r->in.num_values; cntr_values_1++) {
-			NDR_CHECK(ndr_pull_QueryMultipleValue(ndr, NDR_SCALARS, &r->in.values[cntr_values_1]));
-		}
-		for (cntr_values_1 = 0; cntr_values_1 < r->in.num_values; cntr_values_1++) {
-			NDR_CHECK(ndr_pull_QueryMultipleValue(ndr, NDR_BUFFERS, &r->in.values[cntr_values_1]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_values_1, 0);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.num_values));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_buffer));
-		if (_ptr_buffer) {
-			NDR_PULL_ALLOC(ndr, r->in.buffer);
-		} else {
-			r->in.buffer = NULL;
-		}
-		if (r->in.buffer) {
-			_mem_save_buffer_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.buffer, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.buffer));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.buffer));
-			if (ndr_get_array_length(ndr, &r->in.buffer) > ndr_get_array_size(ndr, &r->in.buffer)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.buffer), ndr_get_array_length(ndr, &r->in.buffer));
-			}
-			NDR_PULL_ALLOC_N(ndr, r->in.buffer, ndr_get_array_size(ndr, &r->in.buffer));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->in.buffer, ndr_get_array_length(ndr, &r->in.buffer)));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_buffer_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.buffer_size);
-		}
-		_mem_save_buffer_size_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.buffer_size, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.buffer_size));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_buffer_size_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC_N(ndr, r->out.values, r->in.num_values);
-		memcpy(r->out.values, r->in.values, (r->in.num_values) * sizeof(*r->in.values));
-		NDR_PULL_ALLOC(ndr, r->out.buffer_size);
-		*r->out.buffer_size = *r->in.buffer_size;
-		if (r->in.values) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.values, r->in.num_values));
-		}
-		if (r->in.values) {
-			NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->in.values, r->in.num_values));
-		}
-		if (r->in.buffer) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.buffer, *r->in.buffer_size));
-		}
-		if (r->in.buffer) {
-			NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->in.buffer, *r->in.buffer_size));
-		}
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->out.values));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->out.values));
-		if (ndr_get_array_length(ndr, &r->out.values) > ndr_get_array_size(ndr, &r->out.values)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->out.values), ndr_get_array_length(ndr, &r->out.values));
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC_N(ndr, r->out.values, ndr_get_array_size(ndr, &r->out.values));
-		}
-		memcpy(r->out.values, r->in.values, ndr_get_array_size(ndr, &r->out.values) * sizeof(*r->in.values));
-		_mem_save_values_1 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.values, 0);
-		for (cntr_values_1 = 0; cntr_values_1 < r->in.num_values; cntr_values_1++) {
-			NDR_CHECK(ndr_pull_QueryMultipleValue(ndr, NDR_SCALARS, &r->out.values[cntr_values_1]));
-		}
-		for (cntr_values_1 = 0; cntr_values_1 < r->in.num_values; cntr_values_1++) {
-			NDR_CHECK(ndr_pull_QueryMultipleValue(ndr, NDR_BUFFERS, &r->out.values[cntr_values_1]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_values_1, 0);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_buffer));
-		if (_ptr_buffer) {
-			NDR_PULL_ALLOC(ndr, r->out.buffer);
-		} else {
-			r->out.buffer = NULL;
-		}
-		if (r->out.buffer) {
-			_mem_save_buffer_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.buffer, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->out.buffer));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->out.buffer));
-			if (ndr_get_array_length(ndr, &r->out.buffer) > ndr_get_array_size(ndr, &r->out.buffer)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->out.buffer), ndr_get_array_length(ndr, &r->out.buffer));
-			}
-			NDR_PULL_ALLOC_N(ndr, r->out.buffer, ndr_get_array_size(ndr, &r->out.buffer));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->out.buffer, ndr_get_array_length(ndr, &r->out.buffer)));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_buffer_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.buffer_size);
-		}
-		_mem_save_buffer_size_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.buffer_size, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.buffer_size));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_buffer_size_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-		if (r->out.values) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->out.values, r->in.num_values));
-		}
-		if (r->out.values) {
-			NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->out.values, r->in.num_values));
-		}
-		if (r->out.buffer) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->out.buffer, *r->out.buffer_size));
-		}
-		if (r->out.buffer) {
-			NDR_CHECK(ndr_check_array_length(ndr, (void*)&r->out.buffer, *r->out.buffer_size));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_QueryMultipleValues(struct ndr_print *ndr, const char *name, int flags, const struct winreg_QueryMultipleValues *r)
-{
-	uint32_t cntr_values_1;
-	ndr_print_struct(ndr, name, "winreg_QueryMultipleValues");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_QueryMultipleValues");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "key_handle", r->in.key_handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "key_handle", r->in.key_handle);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "values", r->in.values);
-		ndr->depth++;
-		ndr->print(ndr, "%s: ARRAY(%d)", "values", r->in.num_values);
-		ndr->depth++;
-		for (cntr_values_1=0;cntr_values_1<r->in.num_values;cntr_values_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_values_1) != -1) {
-				ndr_print_QueryMultipleValue(ndr, "values", &r->in.values[cntr_values_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_uint32(ndr, "num_values", r->in.num_values);
-		ndr_print_ptr(ndr, "buffer", r->in.buffer);
-		ndr->depth++;
-		if (r->in.buffer) {
-			ndr_print_array_uint8(ndr, "buffer", r->in.buffer, *r->in.buffer_size);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "buffer_size", r->in.buffer_size);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "buffer_size", *r->in.buffer_size);
-		ndr->depth--;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_QueryMultipleValues");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "values", r->out.values);
-		ndr->depth++;
-		ndr->print(ndr, "%s: ARRAY(%d)", "values", r->in.num_values);
-		ndr->depth++;
-		for (cntr_values_1=0;cntr_values_1<r->in.num_values;cntr_values_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_values_1) != -1) {
-				ndr_print_QueryMultipleValue(ndr, "values", &r->out.values[cntr_values_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "buffer", r->out.buffer);
-		ndr->depth++;
-		if (r->out.buffer) {
-			ndr_print_array_uint8(ndr, "buffer", r->out.buffer, *r->out.buffer_size);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "buffer_size", r->out.buffer_size);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "buffer_size", *r->out.buffer_size);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_InitiateSystemShutdownEx(struct ndr_push *ndr, int flags, const struct winreg_InitiateSystemShutdownEx *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.hostname));
-		if (r->in.hostname) {
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, *r->in.hostname));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.message));
-		if (r->in.message) {
-			NDR_CHECK(ndr_push_initshutdown_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.message));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.timeout));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->in.force_apps));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->in.reboot));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.reason));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_InitiateSystemShutdownEx(struct ndr_pull *ndr, int flags, struct winreg_InitiateSystemShutdownEx *r)
-{
-	uint32_t _ptr_hostname;
-	uint32_t _ptr_message;
-	TALLOC_CTX *_mem_save_hostname_0;
-	TALLOC_CTX *_mem_save_message_0;
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_hostname));
-		if (_ptr_hostname) {
-			NDR_PULL_ALLOC(ndr, r->in.hostname);
-		} else {
-			r->in.hostname = NULL;
-		}
-		if (r->in.hostname) {
-			_mem_save_hostname_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.hostname, 0);
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, r->in.hostname));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_hostname_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_message));
-		if (_ptr_message) {
-			NDR_PULL_ALLOC(ndr, r->in.message);
-		} else {
-			r->in.message = NULL;
-		}
-		if (r->in.message) {
-			_mem_save_message_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.message, 0);
-			NDR_CHECK(ndr_pull_initshutdown_String(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.message));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_message_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.timeout));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->in.force_apps));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->in.reboot));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.reason));
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_InitiateSystemShutdownEx(struct ndr_print *ndr, const char *name, int flags, const struct winreg_InitiateSystemShutdownEx *r)
-{
-	ndr_print_struct(ndr, name, "winreg_InitiateSystemShutdownEx");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_InitiateSystemShutdownEx");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "hostname", r->in.hostname);
-		ndr->depth++;
-		if (r->in.hostname) {
-			ndr_print_uint16(ndr, "hostname", *r->in.hostname);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "message", r->in.message);
-		ndr->depth++;
-		if (r->in.message) {
-			ndr_print_initshutdown_String(ndr, "message", r->in.message);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "timeout", r->in.timeout);
-		ndr_print_uint8(ndr, "force_apps", r->in.force_apps);
-		ndr_print_uint8(ndr, "reboot", r->in.reboot);
-		ndr_print_uint32(ndr, "reason", r->in.reason);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_InitiateSystemShutdownEx");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_SaveKeyEx(struct ndr_push *ndr, int flags, const struct winreg_SaveKeyEx *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_SaveKeyEx(struct ndr_pull *ndr, int flags, struct winreg_SaveKeyEx *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_SaveKeyEx(struct ndr_print *ndr, const char *name, int flags, const struct winreg_SaveKeyEx *r)
-{
-	ndr_print_struct(ndr, name, "winreg_SaveKeyEx");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_SaveKeyEx");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_SaveKeyEx");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_OpenHKPT(struct ndr_push *ndr, int flags, const struct winreg_OpenHKPT *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.system_name));
-		if (r->in.system_name) {
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, *r->in.system_name));
-		}
-		NDR_CHECK(ndr_push_winreg_AccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_OpenHKPT(struct ndr_pull *ndr, int flags, struct winreg_OpenHKPT *r)
-{
-	uint32_t _ptr_system_name;
-	TALLOC_CTX *_mem_save_system_name_0;
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_system_name));
-		if (_ptr_system_name) {
-			NDR_PULL_ALLOC(ndr, r->in.system_name);
-		} else {
-			r->in.system_name = NULL;
-		}
-		if (r->in.system_name) {
-			_mem_save_system_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.system_name, 0);
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, r->in.system_name));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_system_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_winreg_AccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.handle);
-		ZERO_STRUCTP(r->out.handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_OpenHKPT(struct ndr_print *ndr, const char *name, int flags, const struct winreg_OpenHKPT *r)
-{
-	ndr_print_struct(ndr, name, "winreg_OpenHKPT");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_OpenHKPT");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "system_name", r->in.system_name);
-		ndr->depth++;
-		if (r->in.system_name) {
-			ndr_print_uint16(ndr, "system_name", *r->in.system_name);
-		}
-		ndr->depth--;
-		ndr_print_winreg_AccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_OpenHKPT");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->out.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->out.handle);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_OpenHKPN(struct ndr_push *ndr, int flags, const struct winreg_OpenHKPN *r)
-{
-	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.system_name));
-		if (r->in.system_name) {
-			NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, *r->in.system_name));
-		}
-		NDR_CHECK(ndr_push_winreg_AccessMask(ndr, NDR_SCALARS, r->in.access_mask));
-	}
-	if (flags & NDR_OUT) {
-		if (r->out.handle == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_OpenHKPN(struct ndr_pull *ndr, int flags, struct winreg_OpenHKPN *r)
-{
-	uint32_t _ptr_system_name;
-	TALLOC_CTX *_mem_save_system_name_0;
-	TALLOC_CTX *_mem_save_handle_0;
-	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_system_name));
-		if (_ptr_system_name) {
-			NDR_PULL_ALLOC(ndr, r->in.system_name);
-		} else {
-			r->in.system_name = NULL;
-		}
-		if (r->in.system_name) {
-			_mem_save_system_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.system_name, 0);
-			NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, r->in.system_name));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_system_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_winreg_AccessMask(ndr, NDR_SCALARS, &r->in.access_mask));
-		NDR_PULL_ALLOC(ndr, r->out.handle);
-		ZERO_STRUCTP(r->out.handle);
-	}
-	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.handle);
-		}
-		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.handle, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.handle));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_OpenHKPN(struct ndr_print *ndr, const char *name, int flags, const struct winreg_OpenHKPN *r)
-{
-	ndr_print_struct(ndr, name, "winreg_OpenHKPN");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_OpenHKPN");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "system_name", r->in.system_name);
-		ndr->depth++;
-		if (r->in.system_name) {
-			ndr_print_uint16(ndr, "system_name", *r->in.system_name);
-		}
-		ndr->depth--;
-		ndr_print_winreg_AccessMask(ndr, "access_mask", r->in.access_mask);
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_OpenHKPN");
-		ndr->depth++;
-		ndr_print_ptr(ndr, "handle", r->out.handle);
-		ndr->depth++;
-		ndr_print_policy_handle(ndr, "handle", r->out.handle);
-		ndr->depth--;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_winreg_QueryMultipleValues2(struct ndr_push *ndr, int flags, const struct winreg_QueryMultipleValues2 *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_winreg_QueryMultipleValues2(struct ndr_pull *ndr, int flags, struct winreg_QueryMultipleValues2 *r)
-{
-	if (flags & NDR_IN) {
-	}
-	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_QueryMultipleValues2(struct ndr_print *ndr, const char *name, int flags, const struct winreg_QueryMultipleValues2 *r)
-{
-	ndr_print_struct(ndr, name, "winreg_QueryMultipleValues2");
-	ndr->depth++;
-	if (flags & NDR_SET_VALUES) {
-		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
-	}
-	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "winreg_QueryMultipleValues2");
-		ndr->depth++;
-		ndr->depth--;
-	}
-	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "winreg_QueryMultipleValues2");
-		ndr->depth++;
-		ndr_print_WERROR(ndr, "result", r->out.result);
-		ndr->depth--;
-	}
-	ndr->depth--;
-}
-
-static const struct ndr_interface_call winreg_calls[] = {
-	{
-		"winreg_OpenHKCR",
-		sizeof(struct winreg_OpenHKCR),
-		(ndr_push_flags_fn_t) ndr_push_winreg_OpenHKCR,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_OpenHKCR,
-		(ndr_print_function_t) ndr_print_winreg_OpenHKCR,
-		false,
-	},
-	{
-		"winreg_OpenHKCU",
-		sizeof(struct winreg_OpenHKCU),
-		(ndr_push_flags_fn_t) ndr_push_winreg_OpenHKCU,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_OpenHKCU,
-		(ndr_print_function_t) ndr_print_winreg_OpenHKCU,
-		false,
-	},
-	{
-		"winreg_OpenHKLM",
-		sizeof(struct winreg_OpenHKLM),
-		(ndr_push_flags_fn_t) ndr_push_winreg_OpenHKLM,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_OpenHKLM,
-		(ndr_print_function_t) ndr_print_winreg_OpenHKLM,
-		false,
-	},
-	{
-		"winreg_OpenHKPD",
-		sizeof(struct winreg_OpenHKPD),
-		(ndr_push_flags_fn_t) ndr_push_winreg_OpenHKPD,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_OpenHKPD,
-		(ndr_print_function_t) ndr_print_winreg_OpenHKPD,
-		false,
-	},
-	{
-		"winreg_OpenHKU",
-		sizeof(struct winreg_OpenHKU),
-		(ndr_push_flags_fn_t) ndr_push_winreg_OpenHKU,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_OpenHKU,
-		(ndr_print_function_t) ndr_print_winreg_OpenHKU,
-		false,
-	},
-	{
-		"winreg_CloseKey",
-		sizeof(struct winreg_CloseKey),
-		(ndr_push_flags_fn_t) ndr_push_winreg_CloseKey,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_CloseKey,
-		(ndr_print_function_t) ndr_print_winreg_CloseKey,
-		false,
-	},
-	{
-		"winreg_CreateKey",
-		sizeof(struct winreg_CreateKey),
-		(ndr_push_flags_fn_t) ndr_push_winreg_CreateKey,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_CreateKey,
-		(ndr_print_function_t) ndr_print_winreg_CreateKey,
-		false,
-	},
-	{
-		"winreg_DeleteKey",
-		sizeof(struct winreg_DeleteKey),
-		(ndr_push_flags_fn_t) ndr_push_winreg_DeleteKey,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_DeleteKey,
-		(ndr_print_function_t) ndr_print_winreg_DeleteKey,
-		false,
-	},
-	{
-		"winreg_DeleteValue",
-		sizeof(struct winreg_DeleteValue),
-		(ndr_push_flags_fn_t) ndr_push_winreg_DeleteValue,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_DeleteValue,
-		(ndr_print_function_t) ndr_print_winreg_DeleteValue,
-		false,
-	},
-	{
-		"winreg_EnumKey",
-		sizeof(struct winreg_EnumKey),
-		(ndr_push_flags_fn_t) ndr_push_winreg_EnumKey,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_EnumKey,
-		(ndr_print_function_t) ndr_print_winreg_EnumKey,
-		false,
-	},
-	{
-		"winreg_EnumValue",
-		sizeof(struct winreg_EnumValue),
-		(ndr_push_flags_fn_t) ndr_push_winreg_EnumValue,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_EnumValue,
-		(ndr_print_function_t) ndr_print_winreg_EnumValue,
-		false,
-	},
-	{
-		"winreg_FlushKey",
-		sizeof(struct winreg_FlushKey),
-		(ndr_push_flags_fn_t) ndr_push_winreg_FlushKey,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_FlushKey,
-		(ndr_print_function_t) ndr_print_winreg_FlushKey,
-		false,
-	},
-	{
-		"winreg_GetKeySecurity",
-		sizeof(struct winreg_GetKeySecurity),
-		(ndr_push_flags_fn_t) ndr_push_winreg_GetKeySecurity,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_GetKeySecurity,
-		(ndr_print_function_t) ndr_print_winreg_GetKeySecurity,
-		false,
-	},
-	{
-		"winreg_LoadKey",
-		sizeof(struct winreg_LoadKey),
-		(ndr_push_flags_fn_t) ndr_push_winreg_LoadKey,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_LoadKey,
-		(ndr_print_function_t) ndr_print_winreg_LoadKey,
-		false,
-	},
-	{
-		"winreg_NotifyChangeKeyValue",
-		sizeof(struct winreg_NotifyChangeKeyValue),
-		(ndr_push_flags_fn_t) ndr_push_winreg_NotifyChangeKeyValue,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_NotifyChangeKeyValue,
-		(ndr_print_function_t) ndr_print_winreg_NotifyChangeKeyValue,
-		false,
-	},
-	{
-		"winreg_OpenKey",
-		sizeof(struct winreg_OpenKey),
-		(ndr_push_flags_fn_t) ndr_push_winreg_OpenKey,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_OpenKey,
-		(ndr_print_function_t) ndr_print_winreg_OpenKey,
-		false,
-	},
-	{
-		"winreg_QueryInfoKey",
-		sizeof(struct winreg_QueryInfoKey),
-		(ndr_push_flags_fn_t) ndr_push_winreg_QueryInfoKey,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_QueryInfoKey,
-		(ndr_print_function_t) ndr_print_winreg_QueryInfoKey,
-		false,
-	},
-	{
-		"winreg_QueryValue",
-		sizeof(struct winreg_QueryValue),
-		(ndr_push_flags_fn_t) ndr_push_winreg_QueryValue,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_QueryValue,
-		(ndr_print_function_t) ndr_print_winreg_QueryValue,
-		false,
-	},
-	{
-		"winreg_ReplaceKey",
-		sizeof(struct winreg_ReplaceKey),
-		(ndr_push_flags_fn_t) ndr_push_winreg_ReplaceKey,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_ReplaceKey,
-		(ndr_print_function_t) ndr_print_winreg_ReplaceKey,
-		false,
-	},
-	{
-		"winreg_RestoreKey",
-		sizeof(struct winreg_RestoreKey),
-		(ndr_push_flags_fn_t) ndr_push_winreg_RestoreKey,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_RestoreKey,
-		(ndr_print_function_t) ndr_print_winreg_RestoreKey,
-		false,
-	},
-	{
-		"winreg_SaveKey",
-		sizeof(struct winreg_SaveKey),
-		(ndr_push_flags_fn_t) ndr_push_winreg_SaveKey,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_SaveKey,
-		(ndr_print_function_t) ndr_print_winreg_SaveKey,
-		false,
-	},
-	{
-		"winreg_SetKeySecurity",
-		sizeof(struct winreg_SetKeySecurity),
-		(ndr_push_flags_fn_t) ndr_push_winreg_SetKeySecurity,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_SetKeySecurity,
-		(ndr_print_function_t) ndr_print_winreg_SetKeySecurity,
-		false,
-	},
-	{
-		"winreg_SetValue",
-		sizeof(struct winreg_SetValue),
-		(ndr_push_flags_fn_t) ndr_push_winreg_SetValue,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_SetValue,
-		(ndr_print_function_t) ndr_print_winreg_SetValue,
-		false,
-	},
-	{
-		"winreg_UnLoadKey",
-		sizeof(struct winreg_UnLoadKey),
-		(ndr_push_flags_fn_t) ndr_push_winreg_UnLoadKey,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_UnLoadKey,
-		(ndr_print_function_t) ndr_print_winreg_UnLoadKey,
-		false,
-	},
-	{
-		"winreg_InitiateSystemShutdown",
-		sizeof(struct winreg_InitiateSystemShutdown),
-		(ndr_push_flags_fn_t) ndr_push_winreg_InitiateSystemShutdown,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_InitiateSystemShutdown,
-		(ndr_print_function_t) ndr_print_winreg_InitiateSystemShutdown,
-		false,
-	},
-	{
-		"winreg_AbortSystemShutdown",
-		sizeof(struct winreg_AbortSystemShutdown),
-		(ndr_push_flags_fn_t) ndr_push_winreg_AbortSystemShutdown,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_AbortSystemShutdown,
-		(ndr_print_function_t) ndr_print_winreg_AbortSystemShutdown,
-		false,
-	},
-	{
-		"winreg_GetVersion",
-		sizeof(struct winreg_GetVersion),
-		(ndr_push_flags_fn_t) ndr_push_winreg_GetVersion,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_GetVersion,
-		(ndr_print_function_t) ndr_print_winreg_GetVersion,
-		false,
-	},
-	{
-		"winreg_OpenHKCC",
-		sizeof(struct winreg_OpenHKCC),
-		(ndr_push_flags_fn_t) ndr_push_winreg_OpenHKCC,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_OpenHKCC,
-		(ndr_print_function_t) ndr_print_winreg_OpenHKCC,
-		false,
-	},
-	{
-		"winreg_OpenHKDD",
-		sizeof(struct winreg_OpenHKDD),
-		(ndr_push_flags_fn_t) ndr_push_winreg_OpenHKDD,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_OpenHKDD,
-		(ndr_print_function_t) ndr_print_winreg_OpenHKDD,
-		false,
-	},
-	{
-		"winreg_QueryMultipleValues",
-		sizeof(struct winreg_QueryMultipleValues),
-		(ndr_push_flags_fn_t) ndr_push_winreg_QueryMultipleValues,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_QueryMultipleValues,
-		(ndr_print_function_t) ndr_print_winreg_QueryMultipleValues,
-		false,
-	},
-	{
-		"winreg_InitiateSystemShutdownEx",
-		sizeof(struct winreg_InitiateSystemShutdownEx),
-		(ndr_push_flags_fn_t) ndr_push_winreg_InitiateSystemShutdownEx,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_InitiateSystemShutdownEx,
-		(ndr_print_function_t) ndr_print_winreg_InitiateSystemShutdownEx,
-		false,
-	},
-	{
-		"winreg_SaveKeyEx",
-		sizeof(struct winreg_SaveKeyEx),
-		(ndr_push_flags_fn_t) ndr_push_winreg_SaveKeyEx,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_SaveKeyEx,
-		(ndr_print_function_t) ndr_print_winreg_SaveKeyEx,
-		false,
-	},
-	{
-		"winreg_OpenHKPT",
-		sizeof(struct winreg_OpenHKPT),
-		(ndr_push_flags_fn_t) ndr_push_winreg_OpenHKPT,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_OpenHKPT,
-		(ndr_print_function_t) ndr_print_winreg_OpenHKPT,
-		false,
-	},
-	{
-		"winreg_OpenHKPN",
-		sizeof(struct winreg_OpenHKPN),
-		(ndr_push_flags_fn_t) ndr_push_winreg_OpenHKPN,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_OpenHKPN,
-		(ndr_print_function_t) ndr_print_winreg_OpenHKPN,
-		false,
-	},
-	{
-		"winreg_QueryMultipleValues2",
-		sizeof(struct winreg_QueryMultipleValues2),
-		(ndr_push_flags_fn_t) ndr_push_winreg_QueryMultipleValues2,
-		(ndr_pull_flags_fn_t) ndr_pull_winreg_QueryMultipleValues2,
-		(ndr_print_function_t) ndr_print_winreg_QueryMultipleValues2,
-		false,
-	},
-	{ NULL, 0, NULL, NULL, NULL, false }
-};
-
-static const char * const winreg_endpoint_strings[] = {
-	"ncacn_np:[\\pipe\\winreg]", 
-	"ncacn_ip_tcp:", 
-	"ncalrpc:", 
-};
-
-static const struct ndr_interface_string_array winreg_endpoints = {
-	.count	= 3,
-	.names	= winreg_endpoint_strings
-};
-
-static const char * const winreg_authservice_strings[] = {
-	"host", 
-};
-
-static const struct ndr_interface_string_array winreg_authservices = {
-	.count	= 1,
-	.names	= winreg_authservice_strings
-};
-
-
-const struct ndr_interface_table ndr_table_winreg = {
-	.name		= "winreg",
-	.syntax_id	= {
-		{0x338cd001,0x2244,0x31f1,{0xaa,0xaa},{0x90,0x00,0x38,0x00,0x10,0x03}},
-		NDR_WINREG_VERSION
-	},
-	.helpstring	= NDR_WINREG_HELPSTRING,
-	.num_calls	= 35,
-	.calls		= winreg_calls,
-	.endpoints	= &winreg_endpoints,
-	.authservices	= &winreg_authservices
-};
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_winreg.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_winreg.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_winreg.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,132 +0,0 @@
-/* header auto-generated by pidl */
-
-#include "librpc/ndr/libndr.h"
-#include "librpc/gen_ndr/winreg.h"
-
-#ifndef _HEADER_NDR_winreg
-#define _HEADER_NDR_winreg
-
-#define NDR_WINREG_UUID "338cd001-2244-31f1-aaaa-900038001003"
-#define NDR_WINREG_VERSION 1.0
-#define NDR_WINREG_NAME "winreg"
-#define NDR_WINREG_HELPSTRING "Remote Registry Service"
-extern const struct ndr_interface_table ndr_table_winreg;
-#define NDR_WINREG_OPENHKCR (0x00)
-
-#define NDR_WINREG_OPENHKCU (0x01)
-
-#define NDR_WINREG_OPENHKLM (0x02)
-
-#define NDR_WINREG_OPENHKPD (0x03)
-
-#define NDR_WINREG_OPENHKU (0x04)
-
-#define NDR_WINREG_CLOSEKEY (0x05)
-
-#define NDR_WINREG_CREATEKEY (0x06)
-
-#define NDR_WINREG_DELETEKEY (0x07)
-
-#define NDR_WINREG_DELETEVALUE (0x08)
-
-#define NDR_WINREG_ENUMKEY (0x09)
-
-#define NDR_WINREG_ENUMVALUE (0x0a)
-
-#define NDR_WINREG_FLUSHKEY (0x0b)
-
-#define NDR_WINREG_GETKEYSECURITY (0x0c)
-
-#define NDR_WINREG_LOADKEY (0x0d)
-
-#define NDR_WINREG_NOTIFYCHANGEKEYVALUE (0x0e)
-
-#define NDR_WINREG_OPENKEY (0x0f)
-
-#define NDR_WINREG_QUERYINFOKEY (0x10)
-
-#define NDR_WINREG_QUERYVALUE (0x11)
-
-#define NDR_WINREG_REPLACEKEY (0x12)
-
-#define NDR_WINREG_RESTOREKEY (0x13)
-
-#define NDR_WINREG_SAVEKEY (0x14)
-
-#define NDR_WINREG_SETKEYSECURITY (0x15)
-
-#define NDR_WINREG_SETVALUE (0x16)
-
-#define NDR_WINREG_UNLOADKEY (0x17)
-
-#define NDR_WINREG_INITIATESYSTEMSHUTDOWN (0x18)
-
-#define NDR_WINREG_ABORTSYSTEMSHUTDOWN (0x19)
-
-#define NDR_WINREG_GETVERSION (0x1a)
-
-#define NDR_WINREG_OPENHKCC (0x1b)
-
-#define NDR_WINREG_OPENHKDD (0x1c)
-
-#define NDR_WINREG_QUERYMULTIPLEVALUES (0x1d)
-
-#define NDR_WINREG_INITIATESYSTEMSHUTDOWNEX (0x1e)
-
-#define NDR_WINREG_SAVEKEYEX (0x1f)
-
-#define NDR_WINREG_OPENHKPT (0x20)
-
-#define NDR_WINREG_OPENHKPN (0x21)
-
-#define NDR_WINREG_QUERYMULTIPLEVALUES2 (0x22)
-
-#define NDR_WINREG_CALL_COUNT (35)
-void ndr_print_winreg_AccessMask(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_winreg_Type(struct ndr_print *ndr, const char *name, enum winreg_Type r);
-enum ndr_err_code ndr_push_winreg_String(struct ndr_push *ndr, int ndr_flags, const struct winreg_String *r);
-enum ndr_err_code ndr_pull_winreg_String(struct ndr_pull *ndr, int ndr_flags, struct winreg_String *r);
-void ndr_print_winreg_String(struct ndr_print *ndr, const char *name, const struct winreg_String *r);
-void ndr_print_KeySecurityData(struct ndr_print *ndr, const char *name, const struct KeySecurityData *r);
-void ndr_print_winreg_SecBuf(struct ndr_print *ndr, const char *name, const struct winreg_SecBuf *r);
-void ndr_print_winreg_CreateAction(struct ndr_print *ndr, const char *name, enum winreg_CreateAction r);
-void ndr_print_winreg_StringBuf(struct ndr_print *ndr, const char *name, const struct winreg_StringBuf *r);
-void ndr_print_winreg_ValNameBuf(struct ndr_print *ndr, const char *name, const struct winreg_ValNameBuf *r);
-void ndr_print_KeySecurityAttribute(struct ndr_print *ndr, const char *name, const struct KeySecurityAttribute *r);
-void ndr_print_QueryMultipleValue(struct ndr_print *ndr, const char *name, const struct QueryMultipleValue *r);
-void ndr_print_winreg_OpenHKCR(struct ndr_print *ndr, const char *name, int flags, const struct winreg_OpenHKCR *r);
-void ndr_print_winreg_OpenHKCU(struct ndr_print *ndr, const char *name, int flags, const struct winreg_OpenHKCU *r);
-void ndr_print_winreg_OpenHKLM(struct ndr_print *ndr, const char *name, int flags, const struct winreg_OpenHKLM *r);
-void ndr_print_winreg_OpenHKPD(struct ndr_print *ndr, const char *name, int flags, const struct winreg_OpenHKPD *r);
-void ndr_print_winreg_OpenHKU(struct ndr_print *ndr, const char *name, int flags, const struct winreg_OpenHKU *r);
-void ndr_print_winreg_CloseKey(struct ndr_print *ndr, const char *name, int flags, const struct winreg_CloseKey *r);
-void ndr_print_winreg_CreateKey(struct ndr_print *ndr, const char *name, int flags, const struct winreg_CreateKey *r);
-void ndr_print_winreg_DeleteKey(struct ndr_print *ndr, const char *name, int flags, const struct winreg_DeleteKey *r);
-void ndr_print_winreg_DeleteValue(struct ndr_print *ndr, const char *name, int flags, const struct winreg_DeleteValue *r);
-void ndr_print_winreg_EnumKey(struct ndr_print *ndr, const char *name, int flags, const struct winreg_EnumKey *r);
-void ndr_print_winreg_EnumValue(struct ndr_print *ndr, const char *name, int flags, const struct winreg_EnumValue *r);
-void ndr_print_winreg_FlushKey(struct ndr_print *ndr, const char *name, int flags, const struct winreg_FlushKey *r);
-void ndr_print_winreg_GetKeySecurity(struct ndr_print *ndr, const char *name, int flags, const struct winreg_GetKeySecurity *r);
-void ndr_print_winreg_LoadKey(struct ndr_print *ndr, const char *name, int flags, const struct winreg_LoadKey *r);
-void ndr_print_winreg_NotifyChangeKeyValue(struct ndr_print *ndr, const char *name, int flags, const struct winreg_NotifyChangeKeyValue *r);
-void ndr_print_winreg_OpenKey(struct ndr_print *ndr, const char *name, int flags, const struct winreg_OpenKey *r);
-void ndr_print_winreg_QueryInfoKey(struct ndr_print *ndr, const char *name, int flags, const struct winreg_QueryInfoKey *r);
-void ndr_print_winreg_QueryValue(struct ndr_print *ndr, const char *name, int flags, const struct winreg_QueryValue *r);
-void ndr_print_winreg_ReplaceKey(struct ndr_print *ndr, const char *name, int flags, const struct winreg_ReplaceKey *r);
-void ndr_print_winreg_RestoreKey(struct ndr_print *ndr, const char *name, int flags, const struct winreg_RestoreKey *r);
-void ndr_print_winreg_SaveKey(struct ndr_print *ndr, const char *name, int flags, const struct winreg_SaveKey *r);
-void ndr_print_winreg_SetKeySecurity(struct ndr_print *ndr, const char *name, int flags, const struct winreg_SetKeySecurity *r);
-void ndr_print_winreg_SetValue(struct ndr_print *ndr, const char *name, int flags, const struct winreg_SetValue *r);
-void ndr_print_winreg_UnLoadKey(struct ndr_print *ndr, const char *name, int flags, const struct winreg_UnLoadKey *r);
-void ndr_print_winreg_InitiateSystemShutdown(struct ndr_print *ndr, const char *name, int flags, const struct winreg_InitiateSystemShutdown *r);
-void ndr_print_winreg_AbortSystemShutdown(struct ndr_print *ndr, const char *name, int flags, const struct winreg_AbortSystemShutdown *r);
-void ndr_print_winreg_GetVersion(struct ndr_print *ndr, const char *name, int flags, const struct winreg_GetVersion *r);
-void ndr_print_winreg_OpenHKCC(struct ndr_print *ndr, const char *name, int flags, const struct winreg_OpenHKCC *r);
-void ndr_print_winreg_OpenHKDD(struct ndr_print *ndr, const char *name, int flags, const struct winreg_OpenHKDD *r);
-void ndr_print_winreg_QueryMultipleValues(struct ndr_print *ndr, const char *name, int flags, const struct winreg_QueryMultipleValues *r);
-void ndr_print_winreg_InitiateSystemShutdownEx(struct ndr_print *ndr, const char *name, int flags, const struct winreg_InitiateSystemShutdownEx *r);
-void ndr_print_winreg_SaveKeyEx(struct ndr_print *ndr, const char *name, int flags, const struct winreg_SaveKeyEx *r);
-void ndr_print_winreg_OpenHKPT(struct ndr_print *ndr, const char *name, int flags, const struct winreg_OpenHKPT *r);
-void ndr_print_winreg_OpenHKPN(struct ndr_print *ndr, const char *name, int flags, const struct winreg_OpenHKPN *r);
-void ndr_print_winreg_QueryMultipleValues2(struct ndr_print *ndr, const char *name, int flags, const struct winreg_QueryMultipleValues2 *r);
-#endif /* _HEADER_NDR_winreg */

Modified: branches/samba/upstream/source/librpc/gen_ndr/ndr_wkssvc.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_wkssvc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_wkssvc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,12 +4,11 @@
 #include "librpc/gen_ndr/ndr_wkssvc.h"
 
 #include "librpc/gen_ndr/ndr_srvsvc.h"
-#include "librpc/gen_ndr/ndr_lsa.h"
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo100(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo100 *r)
+NTSTATUS ndr_push_wkssvc_NetWkstaInfo100(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo100 *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_srvsvc_PlatformId(ndr, NDR_SCALARS, r->platform_id));
+		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->platform_id));
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->server_name));
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->domain_name));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->version_major));
@@ -29,10 +28,10 @@
 			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->domain_name, ndr_charset_length(r->domain_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo100(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo100 *r)
+NTSTATUS ndr_pull_wkssvc_NetWkstaInfo100(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo100 *r)
 {
 	uint32_t _ptr_server_name;
 	TALLOC_CTX *_mem_save_server_name_0;
@@ -40,7 +39,7 @@
 	TALLOC_CTX *_mem_save_domain_name_0;
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_srvsvc_PlatformId(ndr, NDR_SCALARS, &r->platform_id));
+		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->platform_id));
 		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
 		if (_ptr_server_name) {
 			NDR_PULL_ALLOC(ndr, r->server_name);
@@ -82,14 +81,14 @@
 			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_name_0, 0);
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo100(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo100 *r)
 {
 	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo100");
 	ndr->depth++;
-	ndr_print_srvsvc_PlatformId(ndr, "platform_id", r->platform_id);
+	ndr_print_uint16(ndr, "platform_id", r->platform_id);
 	ndr_print_ptr(ndr, "server_name", r->server_name);
 	ndr->depth++;
 	if (r->server_name) {
@@ -107,11 +106,11 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo101(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo101 *r)
+NTSTATUS ndr_push_wkssvc_NetWkstaInfo101(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo101 *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_srvsvc_PlatformId(ndr, NDR_SCALARS, r->platform_id));
+		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->platform_id));
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->server_name));
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->domain_name));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->version_major));
@@ -138,10 +137,10 @@
 			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->lan_root, ndr_charset_length(r->lan_root, CH_UTF16), sizeof(uint16_t), CH_UTF16));
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo101(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo101 *r)
+NTSTATUS ndr_pull_wkssvc_NetWkstaInfo101(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo101 *r)
 {
 	uint32_t _ptr_server_name;
 	TALLOC_CTX *_mem_save_server_name_0;
@@ -151,7 +150,7 @@
 	TALLOC_CTX *_mem_save_lan_root_0;
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_srvsvc_PlatformId(ndr, NDR_SCALARS, &r->platform_id));
+		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->platform_id));
 		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
 		if (_ptr_server_name) {
 			NDR_PULL_ALLOC(ndr, r->server_name);
@@ -211,14 +210,14 @@
 			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_lan_root_0, 0);
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo101(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo101 *r)
 {
 	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo101");
 	ndr->depth++;
-	ndr_print_srvsvc_PlatformId(ndr, "platform_id", r->platform_id);
+	ndr_print_uint16(ndr, "platform_id", r->platform_id);
 	ndr_print_ptr(ndr, "server_name", r->server_name);
 	ndr->depth++;
 	if (r->server_name) {
@@ -242,11 +241,11 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo102(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo102 *r)
+NTSTATUS ndr_push_wkssvc_NetWkstaInfo102(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo102 *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_srvsvc_PlatformId(ndr, NDR_SCALARS, r->platform_id));
+		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->platform_id));
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->server_name));
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->domain_name));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->version_major));
@@ -274,10 +273,10 @@
 			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->lan_root, ndr_charset_length(r->lan_root, CH_UTF16), sizeof(uint16_t), CH_UTF16));
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo102(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo102 *r)
+NTSTATUS ndr_pull_wkssvc_NetWkstaInfo102(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo102 *r)
 {
 	uint32_t _ptr_server_name;
 	TALLOC_CTX *_mem_save_server_name_0;
@@ -287,7 +286,7 @@
 	TALLOC_CTX *_mem_save_lan_root_0;
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_srvsvc_PlatformId(ndr, NDR_SCALARS, &r->platform_id));
+		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->platform_id));
 		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
 		if (_ptr_server_name) {
 			NDR_PULL_ALLOC(ndr, r->server_name);
@@ -348,14 +347,14 @@
 			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_lan_root_0, 0);
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo102(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo102 *r)
 {
 	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo102");
 	ndr->depth++;
-	ndr_print_srvsvc_PlatformId(ndr, "platform_id", r->platform_id);
+	ndr_print_uint16(ndr, "platform_id", r->platform_id);
 	ndr_print_ptr(ndr, "server_name", r->server_name);
 	ndr->depth++;
 	if (r->server_name) {
@@ -380,7 +379,7 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo502(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo502 *r)
+NTSTATUS ndr_push_wkssvc_NetWkstaInfo502(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo502 *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 4));
@@ -422,10 +421,10 @@
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo502(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo502 *r)
+NTSTATUS ndr_pull_wkssvc_NetWkstaInfo502(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo502 *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -467,7 +466,7 @@
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo502(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo502 *r)
@@ -512,7 +511,7 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1010(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1010 *r)
+NTSTATUS ndr_push_wkssvc_NetWkstaInfo1010(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1010 *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 4));
@@ -520,10 +519,10 @@
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1010(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1010 *r)
+NTSTATUS ndr_pull_wkssvc_NetWkstaInfo1010(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1010 *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -531,7 +530,7 @@
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1010(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1010 *r)
@@ -542,7 +541,7 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1011(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1011 *r)
+NTSTATUS ndr_push_wkssvc_NetWkstaInfo1011(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1011 *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 4));
@@ -550,10 +549,10 @@
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1011(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1011 *r)
+NTSTATUS ndr_pull_wkssvc_NetWkstaInfo1011(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1011 *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -561,7 +560,7 @@
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1011(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1011 *r)
@@ -572,7 +571,7 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1012(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1012 *r)
+NTSTATUS ndr_push_wkssvc_NetWkstaInfo1012(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1012 *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 4));
@@ -580,10 +579,10 @@
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1012(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1012 *r)
+NTSTATUS ndr_pull_wkssvc_NetWkstaInfo1012(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1012 *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -591,7 +590,7 @@
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1012(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1012 *r)
@@ -602,7 +601,7 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1013(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1013 *r)
+NTSTATUS ndr_push_wkssvc_NetWkstaInfo1013(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1013 *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 4));
@@ -610,10 +609,10 @@
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1013(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1013 *r)
+NTSTATUS ndr_pull_wkssvc_NetWkstaInfo1013(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1013 *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -621,7 +620,7 @@
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1013(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1013 *r)
@@ -632,7 +631,7 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1018(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1018 *r)
+NTSTATUS ndr_push_wkssvc_NetWkstaInfo1018(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1018 *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 4));
@@ -640,10 +639,10 @@
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1018(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1018 *r)
+NTSTATUS ndr_pull_wkssvc_NetWkstaInfo1018(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1018 *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -651,7 +650,7 @@
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1018(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1018 *r)
@@ -662,7 +661,7 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1023(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1023 *r)
+NTSTATUS ndr_push_wkssvc_NetWkstaInfo1023(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1023 *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 4));
@@ -670,10 +669,10 @@
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1023(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1023 *r)
+NTSTATUS ndr_pull_wkssvc_NetWkstaInfo1023(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1023 *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -681,7 +680,7 @@
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1023(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1023 *r)
@@ -692,7 +691,7 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1027(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1027 *r)
+NTSTATUS ndr_push_wkssvc_NetWkstaInfo1027(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1027 *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 4));
@@ -700,10 +699,10 @@
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1027(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1027 *r)
+NTSTATUS ndr_pull_wkssvc_NetWkstaInfo1027(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1027 *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -711,7 +710,7 @@
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1027(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1027 *r)
@@ -722,78 +721,18 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1028(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1028 *r)
+NTSTATUS ndr_push_wkssvc_NetWkstaInfo1033(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1033 *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->print_buf_time));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1028(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1028 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->print_buf_time));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1028(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1028 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo1028");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "print_buf_time", r->print_buf_time);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1032(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1032 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->wrk_heuristics));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1032(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1032 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->wrk_heuristics));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1032(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1032 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo1032");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "wrk_heuristics", r->wrk_heuristics);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1033(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1033 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->max_threads));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1033(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1033 *r)
+NTSTATUS ndr_pull_wkssvc_NetWkstaInfo1033(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1033 *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -801,7 +740,7 @@
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1033(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1033 *r)
@@ -812,823 +751,67 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1041(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1041 *r)
+NTSTATUS ndr_push_wkssvc_NetWkstaInfo(struct ndr_push *ndr, int ndr_flags, const union wkssvc_NetWkstaInfo *r)
 {
+	int level;
+	level = ndr_push_get_switch_value(ndr, r);
 	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->lock_quota));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1041(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1041 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->lock_quota));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1041(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1041 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo1041");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "lock_quota", r->lock_quota);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1042(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1042 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->lock_increment));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1042(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1042 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->lock_increment));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1042(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1042 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo1042");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "lock_increment", r->lock_increment);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1043(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1043 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->lock_maximum));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1043(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1043 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->lock_maximum));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1043(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1043 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo1043");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "lock_maximum", r->lock_maximum);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1044(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1044 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->pipe_increment));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1044(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1044 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->pipe_increment));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1044(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1044 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo1044");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "pipe_increment", r->pipe_increment);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1045(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1045 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->pipe_maximum));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1045(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1045 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->pipe_maximum));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1045(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1045 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo1045");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "pipe_maximum", r->pipe_maximum);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1046(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1046 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->dormant_file_limit));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1046(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1046 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->dormant_file_limit));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1046(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1046 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo1046");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "dormant_file_limit", r->dormant_file_limit);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1047(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1047 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->cache_file_timeout));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1047(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1047 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->cache_file_timeout));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1047(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1047 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo1047");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "cache_file_timeout", r->cache_file_timeout);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1048(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1048 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->use_opportunistic_locking));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1048(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1048 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->use_opportunistic_locking));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1048(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1048 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo1048");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "use_opportunistic_locking", r->use_opportunistic_locking);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1049(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1049 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->use_unlock_behind));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1049(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1049 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->use_unlock_behind));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1049(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1049 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo1049");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "use_unlock_behind", r->use_unlock_behind);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1050(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1050 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->use_close_behind));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1050(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1050 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->use_close_behind));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1050(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1050 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo1050");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "use_close_behind", r->use_close_behind);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1051(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1051 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->buf_named_pipes));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1051(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1051 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->buf_named_pipes));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1051(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1051 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo1051");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "buf_named_pipes", r->buf_named_pipes);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1052(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1052 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->use_lock_read_unlock));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1052(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1052 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->use_lock_read_unlock));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1052(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1052 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo1052");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "use_lock_read_unlock", r->use_lock_read_unlock);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1053(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1053 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->utilize_nt_caching));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1053(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1053 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->utilize_nt_caching));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1053(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1053 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo1053");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "utilize_nt_caching", r->utilize_nt_caching);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1054(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1054 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->use_raw_read));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1054(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1054 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->use_raw_read));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1054(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1054 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo1054");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "use_raw_read", r->use_raw_read);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1055(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1055 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->use_raw_write));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1055(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1055 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->use_raw_write));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1055(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1055 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo1055");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "use_raw_write", r->use_raw_write);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1056(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1056 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->use_write_raw_data));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1056(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1056 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->use_write_raw_data));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1056(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1056 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo1056");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "use_write_raw_data", r->use_write_raw_data);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1057(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1057 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->use_encryption));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1057(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1057 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->use_encryption));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1057(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1057 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo1057");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "use_encryption", r->use_encryption);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1058(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1058 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->buf_files_deny_write));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1058(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1058 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->buf_files_deny_write));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1058(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1058 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo1058");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "buf_files_deny_write", r->buf_files_deny_write);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1059(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1059 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->buf_read_only_files));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1059(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1059 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->buf_read_only_files));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1059(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1059 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo1059");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "buf_read_only_files", r->buf_read_only_files);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1060(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1060 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->force_core_create_mode));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1060(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1060 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->force_core_create_mode));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1060(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1060 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo1060");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "force_core_create_mode", r->force_core_create_mode);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1061(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1061 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->use_512_byte_max_transfer));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1061(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1061 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->use_512_byte_max_transfer));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1061(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1061 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo1061");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "use_512_byte_max_transfer", r->use_512_byte_max_transfer);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo1062(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaInfo1062 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->read_ahead_throughput));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo1062(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaInfo1062 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->read_ahead_throughput));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo1062(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1062 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaInfo1062");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "read_ahead_throughput", r->read_ahead_throughput);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaInfo(struct ndr_push *ndr, int ndr_flags, const union wkssvc_NetWkstaInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
 		switch (level) {
-			case 100: {
+			case 100:
 				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info100));
-			break; }
+			break;
 
-			case 101: {
+			case 101:
 				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info101));
-			break; }
+			break;
 
-			case 102: {
+			case 102:
 				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info102));
-			break; }
+			break;
 
-			case 502: {
+			case 502:
 				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info502));
-			break; }
+			break;
 
-			case 1010: {
+			case 1010:
 				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1010));
-			break; }
+			break;
 
-			case 1011: {
+			case 1011:
 				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1011));
-			break; }
+			break;
 
-			case 1012: {
+			case 1012:
 				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1012));
-			break; }
+			break;
 
-			case 1013: {
+			case 1013:
 				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1013));
-			break; }
+			break;
 
-			case 1018: {
+			case 1018:
 				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1018));
-			break; }
+			break;
 
-			case 1023: {
+			case 1023:
 				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1023));
-			break; }
+			break;
 
-			case 1027: {
+			case 1027:
 				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1027));
-			break; }
+			break;
 
-			case 1028: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1028));
-			break; }
-
-			case 1032: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1032));
-			break; }
-
-			case 1033: {
+			case 1033:
 				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1033));
-			break; }
+			break;
 
-			case 1041: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1041));
-			break; }
+			default:
+			break;
 
-			case 1042: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1042));
-			break; }
-
-			case 1043: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1043));
-			break; }
-
-			case 1044: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1044));
-			break; }
-
-			case 1045: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1045));
-			break; }
-
-			case 1046: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1046));
-			break; }
-
-			case 1047: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1047));
-			break; }
-
-			case 1048: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1048));
-			break; }
-
-			case 1049: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1049));
-			break; }
-
-			case 1050: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1050));
-			break; }
-
-			case 1051: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1051));
-			break; }
-
-			case 1052: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1052));
-			break; }
-
-			case 1053: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1053));
-			break; }
-
-			case 1054: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1054));
-			break; }
-
-			case 1055: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1055));
-			break; }
-
-			case 1056: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1056));
-			break; }
-
-			case 1057: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1057));
-			break; }
-
-			case 1058: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1058));
-			break; }
-
-			case 1059: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1059));
-			break; }
-
-			case 1060: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1060));
-			break; }
-
-			case 1061: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1061));
-			break; }
-
-			case 1062: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1062));
-			break; }
-
-			default: {
-			break; }
-
 		}
 	}
 	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
 		switch (level) {
 			case 100:
 				if (r->info100) {
@@ -1696,165 +879,21 @@
 				}
 			break;
 
-			case 1028:
-				if (r->info1028) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1028(ndr, NDR_SCALARS, r->info1028));
-				}
-			break;
-
-			case 1032:
-				if (r->info1032) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1032(ndr, NDR_SCALARS, r->info1032));
-				}
-			break;
-
 			case 1033:
 				if (r->info1033) {
 					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1033(ndr, NDR_SCALARS, r->info1033));
 				}
 			break;
 
-			case 1041:
-				if (r->info1041) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1041(ndr, NDR_SCALARS, r->info1041));
-				}
-			break;
-
-			case 1042:
-				if (r->info1042) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1042(ndr, NDR_SCALARS, r->info1042));
-				}
-			break;
-
-			case 1043:
-				if (r->info1043) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1043(ndr, NDR_SCALARS, r->info1043));
-				}
-			break;
-
-			case 1044:
-				if (r->info1044) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1044(ndr, NDR_SCALARS, r->info1044));
-				}
-			break;
-
-			case 1045:
-				if (r->info1045) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1045(ndr, NDR_SCALARS, r->info1045));
-				}
-			break;
-
-			case 1046:
-				if (r->info1046) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1046(ndr, NDR_SCALARS, r->info1046));
-				}
-			break;
-
-			case 1047:
-				if (r->info1047) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1047(ndr, NDR_SCALARS, r->info1047));
-				}
-			break;
-
-			case 1048:
-				if (r->info1048) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1048(ndr, NDR_SCALARS, r->info1048));
-				}
-			break;
-
-			case 1049:
-				if (r->info1049) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1049(ndr, NDR_SCALARS, r->info1049));
-				}
-			break;
-
-			case 1050:
-				if (r->info1050) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1050(ndr, NDR_SCALARS, r->info1050));
-				}
-			break;
-
-			case 1051:
-				if (r->info1051) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1051(ndr, NDR_SCALARS, r->info1051));
-				}
-			break;
-
-			case 1052:
-				if (r->info1052) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1052(ndr, NDR_SCALARS, r->info1052));
-				}
-			break;
-
-			case 1053:
-				if (r->info1053) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1053(ndr, NDR_SCALARS, r->info1053));
-				}
-			break;
-
-			case 1054:
-				if (r->info1054) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1054(ndr, NDR_SCALARS, r->info1054));
-				}
-			break;
-
-			case 1055:
-				if (r->info1055) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1055(ndr, NDR_SCALARS, r->info1055));
-				}
-			break;
-
-			case 1056:
-				if (r->info1056) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1056(ndr, NDR_SCALARS, r->info1056));
-				}
-			break;
-
-			case 1057:
-				if (r->info1057) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1057(ndr, NDR_SCALARS, r->info1057));
-				}
-			break;
-
-			case 1058:
-				if (r->info1058) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1058(ndr, NDR_SCALARS, r->info1058));
-				}
-			break;
-
-			case 1059:
-				if (r->info1059) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1059(ndr, NDR_SCALARS, r->info1059));
-				}
-			break;
-
-			case 1060:
-				if (r->info1060) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1060(ndr, NDR_SCALARS, r->info1060));
-				}
-			break;
-
-			case 1061:
-				if (r->info1061) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1061(ndr, NDR_SCALARS, r->info1061));
-				}
-			break;
-
-			case 1062:
-				if (r->info1062) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo1062(ndr, NDR_SCALARS, r->info1062));
-				}
-			break;
-
 			default:
 			break;
 
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaInfo(struct ndr_pull *ndr, int ndr_flags, union wkssvc_NetWkstaInfo *r)
+NTSTATUS ndr_pull_wkssvc_NetWkstaInfo(struct ndr_pull *ndr, int ndr_flags, union wkssvc_NetWkstaInfo *r)
 {
 	int level;
 	uint32_t _level;
@@ -1869,36 +908,12 @@
 	TALLOC_CTX *_mem_save_info1018_0;
 	TALLOC_CTX *_mem_save_info1023_0;
 	TALLOC_CTX *_mem_save_info1027_0;
-	TALLOC_CTX *_mem_save_info1028_0;
-	TALLOC_CTX *_mem_save_info1032_0;
 	TALLOC_CTX *_mem_save_info1033_0;
-	TALLOC_CTX *_mem_save_info1041_0;
-	TALLOC_CTX *_mem_save_info1042_0;
-	TALLOC_CTX *_mem_save_info1043_0;
-	TALLOC_CTX *_mem_save_info1044_0;
-	TALLOC_CTX *_mem_save_info1045_0;
-	TALLOC_CTX *_mem_save_info1046_0;
-	TALLOC_CTX *_mem_save_info1047_0;
-	TALLOC_CTX *_mem_save_info1048_0;
-	TALLOC_CTX *_mem_save_info1049_0;
-	TALLOC_CTX *_mem_save_info1050_0;
-	TALLOC_CTX *_mem_save_info1051_0;
-	TALLOC_CTX *_mem_save_info1052_0;
-	TALLOC_CTX *_mem_save_info1053_0;
-	TALLOC_CTX *_mem_save_info1054_0;
-	TALLOC_CTX *_mem_save_info1055_0;
-	TALLOC_CTX *_mem_save_info1056_0;
-	TALLOC_CTX *_mem_save_info1057_0;
-	TALLOC_CTX *_mem_save_info1058_0;
-	TALLOC_CTX *_mem_save_info1059_0;
-	TALLOC_CTX *_mem_save_info1060_0;
-	TALLOC_CTX *_mem_save_info1061_0;
-	TALLOC_CTX *_mem_save_info1062_0;
 	level = ndr_pull_get_switch_value(ndr, r);
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
 		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
+			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for wkssvc_NetWkstaInfo", _level);
 		}
 		switch (level) {
 			case 100: {
@@ -2011,26 +1026,6 @@
 				}
 			break; }
 
-			case 1028: {
-				uint32_t _ptr_info1028;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1028));
-				if (_ptr_info1028) {
-					NDR_PULL_ALLOC(ndr, r->info1028);
-				} else {
-					r->info1028 = NULL;
-				}
-			break; }
-
-			case 1032: {
-				uint32_t _ptr_info1032;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1032));
-				if (_ptr_info1032) {
-					NDR_PULL_ALLOC(ndr, r->info1032);
-				} else {
-					r->info1032 = NULL;
-				}
-			break; }
-
 			case 1033: {
 				uint32_t _ptr_info1033;
 				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1033));
@@ -2041,226 +1036,6 @@
 				}
 			break; }
 
-			case 1041: {
-				uint32_t _ptr_info1041;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1041));
-				if (_ptr_info1041) {
-					NDR_PULL_ALLOC(ndr, r->info1041);
-				} else {
-					r->info1041 = NULL;
-				}
-			break; }
-
-			case 1042: {
-				uint32_t _ptr_info1042;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1042));
-				if (_ptr_info1042) {
-					NDR_PULL_ALLOC(ndr, r->info1042);
-				} else {
-					r->info1042 = NULL;
-				}
-			break; }
-
-			case 1043: {
-				uint32_t _ptr_info1043;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1043));
-				if (_ptr_info1043) {
-					NDR_PULL_ALLOC(ndr, r->info1043);
-				} else {
-					r->info1043 = NULL;
-				}
-			break; }
-
-			case 1044: {
-				uint32_t _ptr_info1044;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1044));
-				if (_ptr_info1044) {
-					NDR_PULL_ALLOC(ndr, r->info1044);
-				} else {
-					r->info1044 = NULL;
-				}
-			break; }
-
-			case 1045: {
-				uint32_t _ptr_info1045;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1045));
-				if (_ptr_info1045) {
-					NDR_PULL_ALLOC(ndr, r->info1045);
-				} else {
-					r->info1045 = NULL;
-				}
-			break; }
-
-			case 1046: {
-				uint32_t _ptr_info1046;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1046));
-				if (_ptr_info1046) {
-					NDR_PULL_ALLOC(ndr, r->info1046);
-				} else {
-					r->info1046 = NULL;
-				}
-			break; }
-
-			case 1047: {
-				uint32_t _ptr_info1047;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1047));
-				if (_ptr_info1047) {
-					NDR_PULL_ALLOC(ndr, r->info1047);
-				} else {
-					r->info1047 = NULL;
-				}
-			break; }
-
-			case 1048: {
-				uint32_t _ptr_info1048;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1048));
-				if (_ptr_info1048) {
-					NDR_PULL_ALLOC(ndr, r->info1048);
-				} else {
-					r->info1048 = NULL;
-				}
-			break; }
-
-			case 1049: {
-				uint32_t _ptr_info1049;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1049));
-				if (_ptr_info1049) {
-					NDR_PULL_ALLOC(ndr, r->info1049);
-				} else {
-					r->info1049 = NULL;
-				}
-			break; }
-
-			case 1050: {
-				uint32_t _ptr_info1050;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1050));
-				if (_ptr_info1050) {
-					NDR_PULL_ALLOC(ndr, r->info1050);
-				} else {
-					r->info1050 = NULL;
-				}
-			break; }
-
-			case 1051: {
-				uint32_t _ptr_info1051;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1051));
-				if (_ptr_info1051) {
-					NDR_PULL_ALLOC(ndr, r->info1051);
-				} else {
-					r->info1051 = NULL;
-				}
-			break; }
-
-			case 1052: {
-				uint32_t _ptr_info1052;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1052));
-				if (_ptr_info1052) {
-					NDR_PULL_ALLOC(ndr, r->info1052);
-				} else {
-					r->info1052 = NULL;
-				}
-			break; }
-
-			case 1053: {
-				uint32_t _ptr_info1053;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1053));
-				if (_ptr_info1053) {
-					NDR_PULL_ALLOC(ndr, r->info1053);
-				} else {
-					r->info1053 = NULL;
-				}
-			break; }
-
-			case 1054: {
-				uint32_t _ptr_info1054;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1054));
-				if (_ptr_info1054) {
-					NDR_PULL_ALLOC(ndr, r->info1054);
-				} else {
-					r->info1054 = NULL;
-				}
-			break; }
-
-			case 1055: {
-				uint32_t _ptr_info1055;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1055));
-				if (_ptr_info1055) {
-					NDR_PULL_ALLOC(ndr, r->info1055);
-				} else {
-					r->info1055 = NULL;
-				}
-			break; }
-
-			case 1056: {
-				uint32_t _ptr_info1056;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1056));
-				if (_ptr_info1056) {
-					NDR_PULL_ALLOC(ndr, r->info1056);
-				} else {
-					r->info1056 = NULL;
-				}
-			break; }
-
-			case 1057: {
-				uint32_t _ptr_info1057;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1057));
-				if (_ptr_info1057) {
-					NDR_PULL_ALLOC(ndr, r->info1057);
-				} else {
-					r->info1057 = NULL;
-				}
-			break; }
-
-			case 1058: {
-				uint32_t _ptr_info1058;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1058));
-				if (_ptr_info1058) {
-					NDR_PULL_ALLOC(ndr, r->info1058);
-				} else {
-					r->info1058 = NULL;
-				}
-			break; }
-
-			case 1059: {
-				uint32_t _ptr_info1059;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1059));
-				if (_ptr_info1059) {
-					NDR_PULL_ALLOC(ndr, r->info1059);
-				} else {
-					r->info1059 = NULL;
-				}
-			break; }
-
-			case 1060: {
-				uint32_t _ptr_info1060;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1060));
-				if (_ptr_info1060) {
-					NDR_PULL_ALLOC(ndr, r->info1060);
-				} else {
-					r->info1060 = NULL;
-				}
-			break; }
-
-			case 1061: {
-				uint32_t _ptr_info1061;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1061));
-				if (_ptr_info1061) {
-					NDR_PULL_ALLOC(ndr, r->info1061);
-				} else {
-					r->info1061 = NULL;
-				}
-			break; }
-
-			case 1062: {
-				uint32_t _ptr_info1062;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1062));
-				if (_ptr_info1062) {
-					NDR_PULL_ALLOC(ndr, r->info1062);
-				} else {
-					r->info1062 = NULL;
-				}
-			break; }
-
 			default: {
 			break; }
 
@@ -2367,24 +1142,6 @@
 				}
 			break;
 
-			case 1028:
-				if (r->info1028) {
-					_mem_save_info1028_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1028, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaInfo1028(ndr, NDR_SCALARS, r->info1028));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1028_0, 0);
-				}
-			break;
-
-			case 1032:
-				if (r->info1032) {
-					_mem_save_info1032_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1032, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaInfo1032(ndr, NDR_SCALARS, r->info1032));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1032_0, 0);
-				}
-			break;
-
 			case 1033:
 				if (r->info1033) {
 					_mem_save_info1033_0 = NDR_PULL_GET_MEM_CTX(ndr);
@@ -2394,210 +1151,12 @@
 				}
 			break;
 
-			case 1041:
-				if (r->info1041) {
-					_mem_save_info1041_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1041, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaInfo1041(ndr, NDR_SCALARS, r->info1041));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1041_0, 0);
-				}
-			break;
-
-			case 1042:
-				if (r->info1042) {
-					_mem_save_info1042_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1042, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaInfo1042(ndr, NDR_SCALARS, r->info1042));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1042_0, 0);
-				}
-			break;
-
-			case 1043:
-				if (r->info1043) {
-					_mem_save_info1043_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1043, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaInfo1043(ndr, NDR_SCALARS, r->info1043));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1043_0, 0);
-				}
-			break;
-
-			case 1044:
-				if (r->info1044) {
-					_mem_save_info1044_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1044, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaInfo1044(ndr, NDR_SCALARS, r->info1044));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1044_0, 0);
-				}
-			break;
-
-			case 1045:
-				if (r->info1045) {
-					_mem_save_info1045_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1045, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaInfo1045(ndr, NDR_SCALARS, r->info1045));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1045_0, 0);
-				}
-			break;
-
-			case 1046:
-				if (r->info1046) {
-					_mem_save_info1046_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1046, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaInfo1046(ndr, NDR_SCALARS, r->info1046));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1046_0, 0);
-				}
-			break;
-
-			case 1047:
-				if (r->info1047) {
-					_mem_save_info1047_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1047, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaInfo1047(ndr, NDR_SCALARS, r->info1047));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1047_0, 0);
-				}
-			break;
-
-			case 1048:
-				if (r->info1048) {
-					_mem_save_info1048_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1048, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaInfo1048(ndr, NDR_SCALARS, r->info1048));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1048_0, 0);
-				}
-			break;
-
-			case 1049:
-				if (r->info1049) {
-					_mem_save_info1049_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1049, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaInfo1049(ndr, NDR_SCALARS, r->info1049));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1049_0, 0);
-				}
-			break;
-
-			case 1050:
-				if (r->info1050) {
-					_mem_save_info1050_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1050, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaInfo1050(ndr, NDR_SCALARS, r->info1050));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1050_0, 0);
-				}
-			break;
-
-			case 1051:
-				if (r->info1051) {
-					_mem_save_info1051_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1051, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaInfo1051(ndr, NDR_SCALARS, r->info1051));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1051_0, 0);
-				}
-			break;
-
-			case 1052:
-				if (r->info1052) {
-					_mem_save_info1052_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1052, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaInfo1052(ndr, NDR_SCALARS, r->info1052));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1052_0, 0);
-				}
-			break;
-
-			case 1053:
-				if (r->info1053) {
-					_mem_save_info1053_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1053, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaInfo1053(ndr, NDR_SCALARS, r->info1053));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1053_0, 0);
-				}
-			break;
-
-			case 1054:
-				if (r->info1054) {
-					_mem_save_info1054_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1054, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaInfo1054(ndr, NDR_SCALARS, r->info1054));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1054_0, 0);
-				}
-			break;
-
-			case 1055:
-				if (r->info1055) {
-					_mem_save_info1055_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1055, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaInfo1055(ndr, NDR_SCALARS, r->info1055));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1055_0, 0);
-				}
-			break;
-
-			case 1056:
-				if (r->info1056) {
-					_mem_save_info1056_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1056, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaInfo1056(ndr, NDR_SCALARS, r->info1056));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1056_0, 0);
-				}
-			break;
-
-			case 1057:
-				if (r->info1057) {
-					_mem_save_info1057_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1057, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaInfo1057(ndr, NDR_SCALARS, r->info1057));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1057_0, 0);
-				}
-			break;
-
-			case 1058:
-				if (r->info1058) {
-					_mem_save_info1058_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1058, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaInfo1058(ndr, NDR_SCALARS, r->info1058));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1058_0, 0);
-				}
-			break;
-
-			case 1059:
-				if (r->info1059) {
-					_mem_save_info1059_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1059, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaInfo1059(ndr, NDR_SCALARS, r->info1059));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1059_0, 0);
-				}
-			break;
-
-			case 1060:
-				if (r->info1060) {
-					_mem_save_info1060_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1060, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaInfo1060(ndr, NDR_SCALARS, r->info1060));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1060_0, 0);
-				}
-			break;
-
-			case 1061:
-				if (r->info1061) {
-					_mem_save_info1061_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1061, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaInfo1061(ndr, NDR_SCALARS, r->info1061));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1061_0, 0);
-				}
-			break;
-
-			case 1062:
-				if (r->info1062) {
-					_mem_save_info1062_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1062, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaInfo1062(ndr, NDR_SCALARS, r->info1062));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1062_0, 0);
-				}
-			break;
-
 			default:
 			break;
 
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_wkssvc_NetWkstaInfo(struct ndr_print *ndr, const char *name, const union wkssvc_NetWkstaInfo *r)
@@ -2705,24 +1264,6 @@
 			ndr->depth--;
 		break;
 
-		case 1028:
-			ndr_print_ptr(ndr, "info1028", r->info1028);
-			ndr->depth++;
-			if (r->info1028) {
-				ndr_print_wkssvc_NetWkstaInfo1028(ndr, "info1028", r->info1028);
-			}
-			ndr->depth--;
-		break;
-
-		case 1032:
-			ndr_print_ptr(ndr, "info1032", r->info1032);
-			ndr->depth++;
-			if (r->info1032) {
-				ndr_print_wkssvc_NetWkstaInfo1032(ndr, "info1032", r->info1032);
-			}
-			ndr->depth--;
-		break;
-
 		case 1033:
 			ndr_print_ptr(ndr, "info1033", r->info1033);
 			ndr->depth++;
@@ -2732,271 +1273,73 @@
 			ndr->depth--;
 		break;
 
-		case 1041:
-			ndr_print_ptr(ndr, "info1041", r->info1041);
-			ndr->depth++;
-			if (r->info1041) {
-				ndr_print_wkssvc_NetWkstaInfo1041(ndr, "info1041", r->info1041);
-			}
-			ndr->depth--;
-		break;
-
-		case 1042:
-			ndr_print_ptr(ndr, "info1042", r->info1042);
-			ndr->depth++;
-			if (r->info1042) {
-				ndr_print_wkssvc_NetWkstaInfo1042(ndr, "info1042", r->info1042);
-			}
-			ndr->depth--;
-		break;
-
-		case 1043:
-			ndr_print_ptr(ndr, "info1043", r->info1043);
-			ndr->depth++;
-			if (r->info1043) {
-				ndr_print_wkssvc_NetWkstaInfo1043(ndr, "info1043", r->info1043);
-			}
-			ndr->depth--;
-		break;
-
-		case 1044:
-			ndr_print_ptr(ndr, "info1044", r->info1044);
-			ndr->depth++;
-			if (r->info1044) {
-				ndr_print_wkssvc_NetWkstaInfo1044(ndr, "info1044", r->info1044);
-			}
-			ndr->depth--;
-		break;
-
-		case 1045:
-			ndr_print_ptr(ndr, "info1045", r->info1045);
-			ndr->depth++;
-			if (r->info1045) {
-				ndr_print_wkssvc_NetWkstaInfo1045(ndr, "info1045", r->info1045);
-			}
-			ndr->depth--;
-		break;
-
-		case 1046:
-			ndr_print_ptr(ndr, "info1046", r->info1046);
-			ndr->depth++;
-			if (r->info1046) {
-				ndr_print_wkssvc_NetWkstaInfo1046(ndr, "info1046", r->info1046);
-			}
-			ndr->depth--;
-		break;
-
-		case 1047:
-			ndr_print_ptr(ndr, "info1047", r->info1047);
-			ndr->depth++;
-			if (r->info1047) {
-				ndr_print_wkssvc_NetWkstaInfo1047(ndr, "info1047", r->info1047);
-			}
-			ndr->depth--;
-		break;
-
-		case 1048:
-			ndr_print_ptr(ndr, "info1048", r->info1048);
-			ndr->depth++;
-			if (r->info1048) {
-				ndr_print_wkssvc_NetWkstaInfo1048(ndr, "info1048", r->info1048);
-			}
-			ndr->depth--;
-		break;
-
-		case 1049:
-			ndr_print_ptr(ndr, "info1049", r->info1049);
-			ndr->depth++;
-			if (r->info1049) {
-				ndr_print_wkssvc_NetWkstaInfo1049(ndr, "info1049", r->info1049);
-			}
-			ndr->depth--;
-		break;
-
-		case 1050:
-			ndr_print_ptr(ndr, "info1050", r->info1050);
-			ndr->depth++;
-			if (r->info1050) {
-				ndr_print_wkssvc_NetWkstaInfo1050(ndr, "info1050", r->info1050);
-			}
-			ndr->depth--;
-		break;
-
-		case 1051:
-			ndr_print_ptr(ndr, "info1051", r->info1051);
-			ndr->depth++;
-			if (r->info1051) {
-				ndr_print_wkssvc_NetWkstaInfo1051(ndr, "info1051", r->info1051);
-			}
-			ndr->depth--;
-		break;
-
-		case 1052:
-			ndr_print_ptr(ndr, "info1052", r->info1052);
-			ndr->depth++;
-			if (r->info1052) {
-				ndr_print_wkssvc_NetWkstaInfo1052(ndr, "info1052", r->info1052);
-			}
-			ndr->depth--;
-		break;
-
-		case 1053:
-			ndr_print_ptr(ndr, "info1053", r->info1053);
-			ndr->depth++;
-			if (r->info1053) {
-				ndr_print_wkssvc_NetWkstaInfo1053(ndr, "info1053", r->info1053);
-			}
-			ndr->depth--;
-		break;
-
-		case 1054:
-			ndr_print_ptr(ndr, "info1054", r->info1054);
-			ndr->depth++;
-			if (r->info1054) {
-				ndr_print_wkssvc_NetWkstaInfo1054(ndr, "info1054", r->info1054);
-			}
-			ndr->depth--;
-		break;
-
-		case 1055:
-			ndr_print_ptr(ndr, "info1055", r->info1055);
-			ndr->depth++;
-			if (r->info1055) {
-				ndr_print_wkssvc_NetWkstaInfo1055(ndr, "info1055", r->info1055);
-			}
-			ndr->depth--;
-		break;
-
-		case 1056:
-			ndr_print_ptr(ndr, "info1056", r->info1056);
-			ndr->depth++;
-			if (r->info1056) {
-				ndr_print_wkssvc_NetWkstaInfo1056(ndr, "info1056", r->info1056);
-			}
-			ndr->depth--;
-		break;
-
-		case 1057:
-			ndr_print_ptr(ndr, "info1057", r->info1057);
-			ndr->depth++;
-			if (r->info1057) {
-				ndr_print_wkssvc_NetWkstaInfo1057(ndr, "info1057", r->info1057);
-			}
-			ndr->depth--;
-		break;
-
-		case 1058:
-			ndr_print_ptr(ndr, "info1058", r->info1058);
-			ndr->depth++;
-			if (r->info1058) {
-				ndr_print_wkssvc_NetWkstaInfo1058(ndr, "info1058", r->info1058);
-			}
-			ndr->depth--;
-		break;
-
-		case 1059:
-			ndr_print_ptr(ndr, "info1059", r->info1059);
-			ndr->depth++;
-			if (r->info1059) {
-				ndr_print_wkssvc_NetWkstaInfo1059(ndr, "info1059", r->info1059);
-			}
-			ndr->depth--;
-		break;
-
-		case 1060:
-			ndr_print_ptr(ndr, "info1060", r->info1060);
-			ndr->depth++;
-			if (r->info1060) {
-				ndr_print_wkssvc_NetWkstaInfo1060(ndr, "info1060", r->info1060);
-			}
-			ndr->depth--;
-		break;
-
-		case 1061:
-			ndr_print_ptr(ndr, "info1061", r->info1061);
-			ndr->depth++;
-			if (r->info1061) {
-				ndr_print_wkssvc_NetWkstaInfo1061(ndr, "info1061", r->info1061);
-			}
-			ndr->depth--;
-		break;
-
-		case 1062:
-			ndr_print_ptr(ndr, "info1062", r->info1062);
-			ndr->depth++;
-			if (r->info1062) {
-				ndr_print_wkssvc_NetWkstaInfo1062(ndr, "info1062", r->info1062);
-			}
-			ndr->depth--;
-		break;
-
 		default:
 		break;
 
 	}
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrWkstaUserInfo0(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetrWkstaUserInfo0 *r)
+NTSTATUS ndr_push_USER_INFO_0(struct ndr_push *ndr, int ndr_flags, const struct USER_INFO_0 *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->user_name));
+		NDR_CHECK(ndr_push_unique_ptr(ndr, r->user));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
-		if (r->user_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->user_name, CH_UTF16)));
+		if (r->user) {
+			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->user, CH_UTF16)));
 			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->user_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->user_name, ndr_charset_length(r->user_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
+			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->user, CH_UTF16)));
+			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->user, ndr_charset_length(r->user, CH_UTF16), sizeof(uint16_t), CH_UTF16));
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrWkstaUserInfo0(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetrWkstaUserInfo0 *r)
+NTSTATUS ndr_pull_USER_INFO_0(struct ndr_pull *ndr, int ndr_flags, struct USER_INFO_0 *r)
 {
-	uint32_t _ptr_user_name;
-	TALLOC_CTX *_mem_save_user_name_0;
+	uint32_t _ptr_user;
+	TALLOC_CTX *_mem_save_user_0;
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_user_name));
-		if (_ptr_user_name) {
-			NDR_PULL_ALLOC(ndr, r->user_name);
+		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_user));
+		if (_ptr_user) {
+			NDR_PULL_ALLOC(ndr, r->user);
 		} else {
-			r->user_name = NULL;
+			r->user = NULL;
 		}
 	}
 	if (ndr_flags & NDR_BUFFERS) {
-		if (r->user_name) {
-			_mem_save_user_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->user_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->user_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->user_name));
-			if (ndr_get_array_length(ndr, &r->user_name) > ndr_get_array_size(ndr, &r->user_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->user_name), ndr_get_array_length(ndr, &r->user_name));
+		if (r->user) {
+			_mem_save_user_0 = NDR_PULL_GET_MEM_CTX(ndr);
+			NDR_PULL_SET_MEM_CTX(ndr, r->user, 0);
+			NDR_CHECK(ndr_pull_array_size(ndr, &r->user));
+			NDR_CHECK(ndr_pull_array_length(ndr, &r->user));
+			if (ndr_get_array_length(ndr, &r->user) > ndr_get_array_size(ndr, &r->user)) {
+				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->user), ndr_get_array_length(ndr, &r->user));
 			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->user_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->user_name, ndr_get_array_length(ndr, &r->user_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_name_0, 0);
+			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->user), sizeof(uint16_t)));
+			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->user, ndr_get_array_length(ndr, &r->user), sizeof(uint16_t), CH_UTF16));
+			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_0, 0);
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrWkstaUserInfo0(struct ndr_print *ndr, const char *name, const struct wkssvc_NetrWkstaUserInfo0 *r)
+_PUBLIC_ void ndr_print_USER_INFO_0(struct ndr_print *ndr, const char *name, const struct USER_INFO_0 *r)
 {
-	ndr_print_struct(ndr, name, "wkssvc_NetrWkstaUserInfo0");
+	ndr_print_struct(ndr, name, "USER_INFO_0");
 	ndr->depth++;
-	ndr_print_ptr(ndr, "user_name", r->user_name);
+	ndr_print_ptr(ndr, "user", r->user);
 	ndr->depth++;
-	if (r->user_name) {
-		ndr_print_string(ndr, "user_name", r->user_name);
+	if (r->user) {
+		ndr_print_string(ndr, "user", r->user);
 	}
 	ndr->depth--;
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaEnumUsersCtr0(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaEnumUsersCtr0 *r)
+NTSTATUS ndr_push_USER_INFO_0_CONTAINER(struct ndr_push *ndr, int ndr_flags, const struct USER_INFO_0_CONTAINER *r)
 {
 	uint32_t cntr_user0_1;
 	if (ndr_flags & NDR_SCALARS) {
@@ -3008,17 +1351,17 @@
 		if (r->user0) {
 			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->entries_read));
 			for (cntr_user0_1 = 0; cntr_user0_1 < r->entries_read; cntr_user0_1++) {
-				NDR_CHECK(ndr_push_wkssvc_NetrWkstaUserInfo0(ndr, NDR_SCALARS, &r->user0[cntr_user0_1]));
+				NDR_CHECK(ndr_push_USER_INFO_0(ndr, NDR_SCALARS, &r->user0[cntr_user0_1]));
 			}
 			for (cntr_user0_1 = 0; cntr_user0_1 < r->entries_read; cntr_user0_1++) {
-				NDR_CHECK(ndr_push_wkssvc_NetrWkstaUserInfo0(ndr, NDR_BUFFERS, &r->user0[cntr_user0_1]));
+				NDR_CHECK(ndr_push_USER_INFO_0(ndr, NDR_BUFFERS, &r->user0[cntr_user0_1]));
 			}
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaEnumUsersCtr0(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaEnumUsersCtr0 *r)
+NTSTATUS ndr_pull_USER_INFO_0_CONTAINER(struct ndr_pull *ndr, int ndr_flags, struct USER_INFO_0_CONTAINER *r)
 {
 	uint32_t _ptr_user0;
 	uint32_t cntr_user0_1;
@@ -3043,10 +1386,10 @@
 			_mem_save_user0_1 = NDR_PULL_GET_MEM_CTX(ndr);
 			NDR_PULL_SET_MEM_CTX(ndr, r->user0, 0);
 			for (cntr_user0_1 = 0; cntr_user0_1 < r->entries_read; cntr_user0_1++) {
-				NDR_CHECK(ndr_pull_wkssvc_NetrWkstaUserInfo0(ndr, NDR_SCALARS, &r->user0[cntr_user0_1]));
+				NDR_CHECK(ndr_pull_USER_INFO_0(ndr, NDR_SCALARS, &r->user0[cntr_user0_1]));
 			}
 			for (cntr_user0_1 = 0; cntr_user0_1 < r->entries_read; cntr_user0_1++) {
-				NDR_CHECK(ndr_pull_wkssvc_NetrWkstaUserInfo0(ndr, NDR_BUFFERS, &r->user0[cntr_user0_1]));
+				NDR_CHECK(ndr_pull_USER_INFO_0(ndr, NDR_BUFFERS, &r->user0[cntr_user0_1]));
 			}
 			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user0_1, 0);
 			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user0_0, 0);
@@ -3055,13 +1398,13 @@
 			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->user0, r->entries_read));
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaEnumUsersCtr0(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaEnumUsersCtr0 *r)
+_PUBLIC_ void ndr_print_USER_INFO_0_CONTAINER(struct ndr_print *ndr, const char *name, const struct USER_INFO_0_CONTAINER *r)
 {
 	uint32_t cntr_user0_1;
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaEnumUsersCtr0");
+	ndr_print_struct(ndr, name, "USER_INFO_0_CONTAINER");
 	ndr->depth++;
 	ndr_print_uint32(ndr, "entries_read", r->entries_read);
 	ndr_print_ptr(ndr, "user0", r->user0);
@@ -3071,8 +1414,9 @@
 		ndr->depth++;
 		for (cntr_user0_1=0;cntr_user0_1<r->entries_read;cntr_user0_1++) {
 			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_user0_1) != -1) {
-				ndr_print_wkssvc_NetrWkstaUserInfo0(ndr, "user0", &r->user0[cntr_user0_1]);
+			asprintf(&idx_1, "[%d]", cntr_user0_1);
+			if (idx_1) {
+				ndr_print_USER_INFO_0(ndr, "user0", &r->user0[cntr_user0_1]);
 				free(idx_1);
 			}
 		}
@@ -3082,7 +1426,7 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrWkstaUserInfo1(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetrWkstaUserInfo1 *r)
+NTSTATUS ndr_push_USER_INFO_1(struct ndr_push *ndr, int ndr_flags, const struct USER_INFO_1 *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 4));
@@ -3117,10 +1461,10 @@
 			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->logon_server, ndr_charset_length(r->logon_server, CH_UTF16), sizeof(uint16_t), CH_UTF16));
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrWkstaUserInfo1(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetrWkstaUserInfo1 *r)
+NTSTATUS ndr_pull_USER_INFO_1(struct ndr_pull *ndr, int ndr_flags, struct USER_INFO_1 *r)
 {
 	uint32_t _ptr_user_name;
 	TALLOC_CTX *_mem_save_user_name_0;
@@ -3207,12 +1551,12 @@
 			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_logon_server_0, 0);
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrWkstaUserInfo1(struct ndr_print *ndr, const char *name, const struct wkssvc_NetrWkstaUserInfo1 *r)
+_PUBLIC_ void ndr_print_USER_INFO_1(struct ndr_print *ndr, const char *name, const struct USER_INFO_1 *r)
 {
-	ndr_print_struct(ndr, name, "wkssvc_NetrWkstaUserInfo1");
+	ndr_print_struct(ndr, name, "USER_INFO_1");
 	ndr->depth++;
 	ndr_print_ptr(ndr, "user_name", r->user_name);
 	ndr->depth++;
@@ -3241,7 +1585,7 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaEnumUsersCtr1(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaEnumUsersCtr1 *r)
+NTSTATUS ndr_push_USER_INFO_1_CONTAINER(struct ndr_push *ndr, int ndr_flags, const struct USER_INFO_1_CONTAINER *r)
 {
 	uint32_t cntr_user1_1;
 	if (ndr_flags & NDR_SCALARS) {
@@ -3253,17 +1597,17 @@
 		if (r->user1) {
 			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->entries_read));
 			for (cntr_user1_1 = 0; cntr_user1_1 < r->entries_read; cntr_user1_1++) {
-				NDR_CHECK(ndr_push_wkssvc_NetrWkstaUserInfo1(ndr, NDR_SCALARS, &r->user1[cntr_user1_1]));
+				NDR_CHECK(ndr_push_USER_INFO_1(ndr, NDR_SCALARS, &r->user1[cntr_user1_1]));
 			}
 			for (cntr_user1_1 = 0; cntr_user1_1 < r->entries_read; cntr_user1_1++) {
-				NDR_CHECK(ndr_push_wkssvc_NetrWkstaUserInfo1(ndr, NDR_BUFFERS, &r->user1[cntr_user1_1]));
+				NDR_CHECK(ndr_push_USER_INFO_1(ndr, NDR_BUFFERS, &r->user1[cntr_user1_1]));
 			}
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaEnumUsersCtr1(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaEnumUsersCtr1 *r)
+NTSTATUS ndr_pull_USER_INFO_1_CONTAINER(struct ndr_pull *ndr, int ndr_flags, struct USER_INFO_1_CONTAINER *r)
 {
 	uint32_t _ptr_user1;
 	uint32_t cntr_user1_1;
@@ -3288,10 +1632,10 @@
 			_mem_save_user1_1 = NDR_PULL_GET_MEM_CTX(ndr);
 			NDR_PULL_SET_MEM_CTX(ndr, r->user1, 0);
 			for (cntr_user1_1 = 0; cntr_user1_1 < r->entries_read; cntr_user1_1++) {
-				NDR_CHECK(ndr_pull_wkssvc_NetrWkstaUserInfo1(ndr, NDR_SCALARS, &r->user1[cntr_user1_1]));
+				NDR_CHECK(ndr_pull_USER_INFO_1(ndr, NDR_SCALARS, &r->user1[cntr_user1_1]));
 			}
 			for (cntr_user1_1 = 0; cntr_user1_1 < r->entries_read; cntr_user1_1++) {
-				NDR_CHECK(ndr_pull_wkssvc_NetrWkstaUserInfo1(ndr, NDR_BUFFERS, &r->user1[cntr_user1_1]));
+				NDR_CHECK(ndr_pull_USER_INFO_1(ndr, NDR_BUFFERS, &r->user1[cntr_user1_1]));
 			}
 			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user1_1, 0);
 			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user1_0, 0);
@@ -3300,13 +1644,13 @@
 			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->user1, r->entries_read));
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaEnumUsersCtr1(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaEnumUsersCtr1 *r)
+_PUBLIC_ void ndr_print_USER_INFO_1_CONTAINER(struct ndr_print *ndr, const char *name, const struct USER_INFO_1_CONTAINER *r)
 {
 	uint32_t cntr_user1_1;
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaEnumUsersCtr1");
+	ndr_print_struct(ndr, name, "USER_INFO_1_CONTAINER");
 	ndr->depth++;
 	ndr_print_uint32(ndr, "entries_read", r->entries_read);
 	ndr_print_ptr(ndr, "user1", r->user1);
@@ -3316,8 +1660,9 @@
 		ndr->depth++;
 		for (cntr_user1_1=0;cntr_user1_1<r->entries_read;cntr_user1_1++) {
 			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_user1_1) != -1) {
-				ndr_print_wkssvc_NetrWkstaUserInfo1(ndr, "user1", &r->user1[cntr_user1_1]);
+			asprintf(&idx_1, "[%d]", cntr_user1_1);
+			if (idx_1) {
+				ndr_print_USER_INFO_1(ndr, "user1", &r->user1[cntr_user1_1]);
 				free(idx_1);
 			}
 		}
@@ -3327,36 +1672,36 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaEnumUsersCtr(struct ndr_push *ndr, int ndr_flags, const union wkssvc_NetWkstaEnumUsersCtr *r)
+NTSTATUS ndr_push_WKS_USER_ENUM_UNION(struct ndr_push *ndr, int ndr_flags, const union WKS_USER_ENUM_UNION *r)
 {
+	int level;
+	level = ndr_push_get_switch_value(ndr, r);
 	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
 		switch (level) {
-			case 0: {
+			case 0:
 				NDR_CHECK(ndr_push_unique_ptr(ndr, r->user0));
-			break; }
+			break;
 
-			case 1: {
+			case 1:
 				NDR_CHECK(ndr_push_unique_ptr(ndr, r->user1));
-			break; }
+			break;
 
 			default:
 				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
 		}
 	}
 	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
 		switch (level) {
 			case 0:
 				if (r->user0) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaEnumUsersCtr0(ndr, NDR_SCALARS|NDR_BUFFERS, r->user0));
+					NDR_CHECK(ndr_push_USER_INFO_0_CONTAINER(ndr, NDR_SCALARS|NDR_BUFFERS, r->user0));
 				}
 			break;
 
 			case 1:
 				if (r->user1) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaEnumUsersCtr1(ndr, NDR_SCALARS|NDR_BUFFERS, r->user1));
+					NDR_CHECK(ndr_push_USER_INFO_1_CONTAINER(ndr, NDR_SCALARS|NDR_BUFFERS, r->user1));
 				}
 			break;
 
@@ -3364,10 +1709,10 @@
 				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaEnumUsersCtr(struct ndr_pull *ndr, int ndr_flags, union wkssvc_NetWkstaEnumUsersCtr *r)
+NTSTATUS ndr_pull_WKS_USER_ENUM_UNION(struct ndr_pull *ndr, int ndr_flags, union WKS_USER_ENUM_UNION *r)
 {
 	int level;
 	uint32_t _level;
@@ -3377,7 +1722,7 @@
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
 		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
+			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for WKS_USER_ENUM_UNION", _level);
 		}
 		switch (level) {
 			case 0: {
@@ -3410,7 +1755,7 @@
 				if (r->user0) {
 					_mem_save_user0_0 = NDR_PULL_GET_MEM_CTX(ndr);
 					NDR_PULL_SET_MEM_CTX(ndr, r->user0, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaEnumUsersCtr0(ndr, NDR_SCALARS|NDR_BUFFERS, r->user0));
+					NDR_CHECK(ndr_pull_USER_INFO_0_CONTAINER(ndr, NDR_SCALARS|NDR_BUFFERS, r->user0));
 					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user0_0, 0);
 				}
 			break;
@@ -3419,7 +1764,7 @@
 				if (r->user1) {
 					_mem_save_user1_0 = NDR_PULL_GET_MEM_CTX(ndr);
 					NDR_PULL_SET_MEM_CTX(ndr, r->user1, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaEnumUsersCtr1(ndr, NDR_SCALARS|NDR_BUFFERS, r->user1));
+					NDR_CHECK(ndr_pull_USER_INFO_1_CONTAINER(ndr, NDR_SCALARS|NDR_BUFFERS, r->user1));
 					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user1_0, 0);
 				}
 			break;
@@ -3428,20 +1773,20 @@
 				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaEnumUsersCtr(struct ndr_print *ndr, const char *name, const union wkssvc_NetWkstaEnumUsersCtr *r)
+_PUBLIC_ void ndr_print_WKS_USER_ENUM_UNION(struct ndr_print *ndr, const char *name, const union WKS_USER_ENUM_UNION *r)
 {
 	int level;
 	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "wkssvc_NetWkstaEnumUsersCtr");
+	ndr_print_union(ndr, name, level, "WKS_USER_ENUM_UNION");
 	switch (level) {
 		case 0:
 			ndr_print_ptr(ndr, "user0", r->user0);
 			ndr->depth++;
 			if (r->user0) {
-				ndr_print_wkssvc_NetWkstaEnumUsersCtr0(ndr, "user0", r->user0);
+				ndr_print_USER_INFO_0_CONTAINER(ndr, "user0", r->user0);
 			}
 			ndr->depth--;
 		break;
@@ -3450,7 +1795,7 @@
 			ndr_print_ptr(ndr, "user1", r->user1);
 			ndr->depth++;
 			if (r->user1) {
-				ndr_print_wkssvc_NetWkstaEnumUsersCtr1(ndr, "user1", r->user1);
+				ndr_print_USER_INFO_1_CONTAINER(ndr, "user1", r->user1);
 			}
 			ndr->depth--;
 		break;
@@ -3460,280 +1805,10 @@
 	}
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaEnumUsersInfo(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaEnumUsersInfo *r)
+NTSTATUS ndr_push_wkssvc_NetWkstaTransportInfo0(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaTransportInfo0 *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->level));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->ctr, r->level));
-		NDR_CHECK(ndr_push_wkssvc_NetWkstaEnumUsersCtr(ndr, NDR_SCALARS, &r->ctr));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_wkssvc_NetWkstaEnumUsersCtr(ndr, NDR_BUFFERS, &r->ctr));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaEnumUsersInfo(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaEnumUsersInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->level));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->ctr, r->level));
-		NDR_CHECK(ndr_pull_wkssvc_NetWkstaEnumUsersCtr(ndr, NDR_SCALARS, &r->ctr));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_wkssvc_NetWkstaEnumUsersCtr(ndr, NDR_BUFFERS, &r->ctr));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaEnumUsersInfo(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaEnumUsersInfo *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaEnumUsersInfo");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "level", r->level);
-	ndr_print_set_switch_value(ndr, &r->ctr, r->level);
-	ndr_print_wkssvc_NetWkstaEnumUsersCtr(ndr, "ctr", &r->ctr);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetrWkstaUserInfo1101(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetrWkstaUserInfo1101 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->other_domains));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->other_domains) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->other_domains, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->other_domains, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->other_domains, ndr_charset_length(r->other_domains, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetrWkstaUserInfo1101(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetrWkstaUserInfo1101 *r)
-{
-	uint32_t _ptr_other_domains;
-	TALLOC_CTX *_mem_save_other_domains_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_other_domains));
-		if (_ptr_other_domains) {
-			NDR_PULL_ALLOC(ndr, r->other_domains);
-		} else {
-			r->other_domains = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->other_domains) {
-			_mem_save_other_domains_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->other_domains, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->other_domains));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->other_domains));
-			if (ndr_get_array_length(ndr, &r->other_domains) > ndr_get_array_size(ndr, &r->other_domains)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->other_domains), ndr_get_array_length(ndr, &r->other_domains));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->other_domains), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->other_domains, ndr_get_array_length(ndr, &r->other_domains), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_other_domains_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetrWkstaUserInfo1101(struct ndr_print *ndr, const char *name, const struct wkssvc_NetrWkstaUserInfo1101 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetrWkstaUserInfo1101");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "other_domains", r->other_domains);
-	ndr->depth++;
-	if (r->other_domains) {
-		ndr_print_string(ndr, "other_domains", r->other_domains);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetrWkstaUserInfo(struct ndr_push *ndr, int ndr_flags, const union wkssvc_NetrWkstaUserInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 0: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info0));
-			break; }
-
-			case 1: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1));
-			break; }
-
-			case 1101: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1101));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 0:
-				if (r->info0) {
-					NDR_CHECK(ndr_push_wkssvc_NetrWkstaUserInfo0(ndr, NDR_SCALARS|NDR_BUFFERS, r->info0));
-				}
-			break;
-
-			case 1:
-				if (r->info1) {
-					NDR_CHECK(ndr_push_wkssvc_NetrWkstaUserInfo1(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1));
-				}
-			break;
-
-			case 1101:
-				if (r->info1101) {
-					NDR_CHECK(ndr_push_wkssvc_NetrWkstaUserInfo1101(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1101));
-				}
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetrWkstaUserInfo(struct ndr_pull *ndr, int ndr_flags, union wkssvc_NetrWkstaUserInfo *r)
-{
-	int level;
-	uint32_t _level;
-	TALLOC_CTX *_mem_save_info0_0;
-	TALLOC_CTX *_mem_save_info1_0;
-	TALLOC_CTX *_mem_save_info1101_0;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 0: {
-				uint32_t _ptr_info0;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info0));
-				if (_ptr_info0) {
-					NDR_PULL_ALLOC(ndr, r->info0);
-				} else {
-					r->info0 = NULL;
-				}
-			break; }
-
-			case 1: {
-				uint32_t _ptr_info1;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1));
-				if (_ptr_info1) {
-					NDR_PULL_ALLOC(ndr, r->info1);
-				} else {
-					r->info1 = NULL;
-				}
-			break; }
-
-			case 1101: {
-				uint32_t _ptr_info1101;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1101));
-				if (_ptr_info1101) {
-					NDR_PULL_ALLOC(ndr, r->info1101);
-				} else {
-					r->info1101 = NULL;
-				}
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 0:
-				if (r->info0) {
-					_mem_save_info0_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info0, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetrWkstaUserInfo0(ndr, NDR_SCALARS|NDR_BUFFERS, r->info0));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info0_0, 0);
-				}
-			break;
-
-			case 1:
-				if (r->info1) {
-					_mem_save_info1_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetrWkstaUserInfo1(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1_0, 0);
-				}
-			break;
-
-			case 1101:
-				if (r->info1101) {
-					_mem_save_info1101_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1101, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetrWkstaUserInfo1101(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1101));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1101_0, 0);
-				}
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetrWkstaUserInfo(struct ndr_print *ndr, const char *name, const union wkssvc_NetrWkstaUserInfo *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "wkssvc_NetrWkstaUserInfo");
-	switch (level) {
-		case 0:
-			ndr_print_ptr(ndr, "info0", r->info0);
-			ndr->depth++;
-			if (r->info0) {
-				ndr_print_wkssvc_NetrWkstaUserInfo0(ndr, "info0", r->info0);
-			}
-			ndr->depth--;
-		break;
-
-		case 1:
-			ndr_print_ptr(ndr, "info1", r->info1);
-			ndr->depth++;
-			if (r->info1) {
-				ndr_print_wkssvc_NetrWkstaUserInfo1(ndr, "info1", r->info1);
-			}
-			ndr->depth--;
-		break;
-
-		case 1101:
-			ndr_print_ptr(ndr, "info1101", r->info1101);
-			ndr->depth++;
-			if (r->info1101) {
-				ndr_print_wkssvc_NetrWkstaUserInfo1101(ndr, "info1101", r->info1101);
-			}
-			ndr->depth--;
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaTransportInfo0(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaTransportInfo0 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->quality_of_service));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->vc_count));
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->name));
@@ -3754,10 +1829,10 @@
 			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->address, ndr_charset_length(r->address, CH_UTF16), sizeof(uint16_t), CH_UTF16));
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaTransportInfo0(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaTransportInfo0 *r)
+NTSTATUS ndr_pull_wkssvc_NetWkstaTransportInfo0(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaTransportInfo0 *r)
 {
 	uint32_t _ptr_name;
 	TALLOC_CTX *_mem_save_name_0;
@@ -3807,7 +1882,7 @@
 			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_address_0, 0);
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_wkssvc_NetWkstaTransportInfo0(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaTransportInfo0 *r)
@@ -3832,7 +1907,7 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaTransportCtr0(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaTransportCtr0 *r)
+NTSTATUS ndr_push_wkssvc_NetWkstaTransportCtr0(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaTransportCtr0 *r)
 {
 	uint32_t cntr_array_1;
 	if (ndr_flags & NDR_SCALARS) {
@@ -3851,10 +1926,10 @@
 			}
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaTransportCtr0(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaTransportCtr0 *r)
+NTSTATUS ndr_pull_wkssvc_NetWkstaTransportCtr0(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaTransportCtr0 *r)
 {
 	uint32_t _ptr_array;
 	uint32_t cntr_array_1;
@@ -3891,7 +1966,7 @@
 			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_wkssvc_NetWkstaTransportCtr0(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaTransportCtr0 *r)
@@ -3907,7 +1982,8 @@
 		ndr->depth++;
 		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
 			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
+			asprintf(&idx_1, "[%d]", cntr_array_1);
+			if (idx_1) {
 				ndr_print_wkssvc_NetWkstaTransportInfo0(ndr, "array", &r->array[cntr_array_1]);
 				free(idx_1);
 			}
@@ -3918,1197 +1994,48 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaTransportCtr(struct ndr_push *ndr, int ndr_flags, const union wkssvc_NetWkstaTransportCtr *r)
+NTSTATUS ndr_push_wkssvc_NetWkstaTransportCtr(struct ndr_push *ndr, int ndr_flags, const union wkssvc_NetWkstaTransportCtr *r)
 {
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
-		switch (level) {
-			case 0: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr0));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case 0:
-				if (r->ctr0) {
-					NDR_CHECK(ndr_push_wkssvc_NetWkstaTransportCtr0(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr0));
-				}
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaTransportCtr(struct ndr_pull *ndr, int ndr_flags, union wkssvc_NetWkstaTransportCtr *r)
-{
 	int level;
-	uint32_t _level;
-	TALLOC_CTX *_mem_save_ctr0_0;
-	level = ndr_pull_get_switch_value(ndr, r);
+	level = ndr_push_get_switch_value(ndr, r);
 	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 0: {
-				uint32_t _ptr_ctr0;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr0));
-				if (_ptr_ctr0) {
-					NDR_PULL_ALLOC(ndr, r->ctr0);
-				} else {
-					r->ctr0 = NULL;
-				}
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 0:
-				if (r->ctr0) {
-					_mem_save_ctr0_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr0, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetWkstaTransportCtr0(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr0));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr0_0, 0);
-				}
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaTransportCtr(struct ndr_print *ndr, const char *name, const union wkssvc_NetWkstaTransportCtr *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "wkssvc_NetWkstaTransportCtr");
-	switch (level) {
-		case 0:
-			ndr_print_ptr(ndr, "ctr0", r->ctr0);
-			ndr->depth++;
-			if (r->ctr0) {
-				ndr_print_wkssvc_NetWkstaTransportCtr0(ndr, "ctr0", r->ctr0);
-			}
-			ndr->depth--;
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaTransportInfo(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetWkstaTransportInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->level));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->ctr, r->level));
-		NDR_CHECK(ndr_push_wkssvc_NetWkstaTransportCtr(ndr, NDR_SCALARS, &r->ctr));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_wkssvc_NetWkstaTransportCtr(ndr, NDR_BUFFERS, &r->ctr));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaTransportInfo(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetWkstaTransportInfo *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->level));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->ctr, r->level));
-		NDR_CHECK(ndr_pull_wkssvc_NetWkstaTransportCtr(ndr, NDR_SCALARS, &r->ctr));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_wkssvc_NetWkstaTransportCtr(ndr, NDR_BUFFERS, &r->ctr));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetWkstaTransportInfo(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaTransportInfo *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetWkstaTransportInfo");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "level", r->level);
-	ndr_print_set_switch_value(ndr, &r->ctr, r->level);
-	ndr_print_wkssvc_NetWkstaTransportCtr(ndr, "ctr", &r->ctr);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetrUseInfo3(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetrUseInfo3 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->unknown1));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->unknown2));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->unknown1) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->unknown1, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->unknown1, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->unknown1, ndr_charset_length(r->unknown1, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->unknown2) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->unknown2, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->unknown2, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->unknown2, ndr_charset_length(r->unknown2, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetrUseInfo3(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetrUseInfo3 *r)
-{
-	uint32_t _ptr_unknown1;
-	TALLOC_CTX *_mem_save_unknown1_0;
-	uint32_t _ptr_unknown2;
-	TALLOC_CTX *_mem_save_unknown2_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown1));
-		if (_ptr_unknown1) {
-			NDR_PULL_ALLOC(ndr, r->unknown1);
-		} else {
-			r->unknown1 = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown2));
-		if (_ptr_unknown2) {
-			NDR_PULL_ALLOC(ndr, r->unknown2);
-		} else {
-			r->unknown2 = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->unknown1) {
-			_mem_save_unknown1_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->unknown1, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->unknown1));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->unknown1));
-			if (ndr_get_array_length(ndr, &r->unknown1) > ndr_get_array_size(ndr, &r->unknown1)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->unknown1), ndr_get_array_length(ndr, &r->unknown1));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->unknown1), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->unknown1, ndr_get_array_length(ndr, &r->unknown1), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown1_0, 0);
-		}
-		if (r->unknown2) {
-			_mem_save_unknown2_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->unknown2, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->unknown2));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->unknown2));
-			if (ndr_get_array_length(ndr, &r->unknown2) > ndr_get_array_size(ndr, &r->unknown2)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->unknown2), ndr_get_array_length(ndr, &r->unknown2));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->unknown2), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->unknown2, ndr_get_array_length(ndr, &r->unknown2), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown2_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetrUseInfo3(struct ndr_print *ndr, const char *name, const struct wkssvc_NetrUseInfo3 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetrUseInfo3");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "unknown1", r->unknown1);
-	ndr->depth++;
-	if (r->unknown1) {
-		ndr_print_string(ndr, "unknown1", r->unknown1);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "unknown2", r->unknown2);
-	ndr->depth++;
-	if (r->unknown2) {
-		ndr_print_string(ndr, "unknown2", r->unknown2);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetrUseInfo2(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetrUseInfo2 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->local));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->remote));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->password));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->status));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->asg_type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->ref_count));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->use_count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->user_name));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->domain_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->local) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->local, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->local, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->local, ndr_charset_length(r->local, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->remote) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->remote, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->remote, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->remote, ndr_charset_length(r->remote, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->password) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->password, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->password, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->password, ndr_charset_length(r->password, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->user_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->user_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->user_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->user_name, ndr_charset_length(r->user_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->domain_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->domain_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->domain_name, ndr_charset_length(r->domain_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetrUseInfo2(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetrUseInfo2 *r)
-{
-	uint32_t _ptr_local;
-	TALLOC_CTX *_mem_save_local_0;
-	uint32_t _ptr_remote;
-	TALLOC_CTX *_mem_save_remote_0;
-	uint32_t _ptr_password;
-	TALLOC_CTX *_mem_save_password_0;
-	uint32_t _ptr_user_name;
-	TALLOC_CTX *_mem_save_user_name_0;
-	uint32_t _ptr_domain_name;
-	TALLOC_CTX *_mem_save_domain_name_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_local));
-		if (_ptr_local) {
-			NDR_PULL_ALLOC(ndr, r->local);
-		} else {
-			r->local = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_remote));
-		if (_ptr_remote) {
-			NDR_PULL_ALLOC(ndr, r->remote);
-		} else {
-			r->remote = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_password));
-		if (_ptr_password) {
-			NDR_PULL_ALLOC(ndr, r->password);
-		} else {
-			r->password = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->status));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->asg_type));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->ref_count));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->use_count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_user_name));
-		if (_ptr_user_name) {
-			NDR_PULL_ALLOC(ndr, r->user_name);
-		} else {
-			r->user_name = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain_name));
-		if (_ptr_domain_name) {
-			NDR_PULL_ALLOC(ndr, r->domain_name);
-		} else {
-			r->domain_name = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->local) {
-			_mem_save_local_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->local, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->local));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->local));
-			if (ndr_get_array_length(ndr, &r->local) > ndr_get_array_size(ndr, &r->local)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->local), ndr_get_array_length(ndr, &r->local));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->local), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->local, ndr_get_array_length(ndr, &r->local), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_local_0, 0);
-		}
-		if (r->remote) {
-			_mem_save_remote_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->remote, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->remote));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->remote));
-			if (ndr_get_array_length(ndr, &r->remote) > ndr_get_array_size(ndr, &r->remote)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->remote), ndr_get_array_length(ndr, &r->remote));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->remote), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->remote, ndr_get_array_length(ndr, &r->remote), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_remote_0, 0);
-		}
-		if (r->password) {
-			_mem_save_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->password, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->password));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->password));
-			if (ndr_get_array_length(ndr, &r->password) > ndr_get_array_size(ndr, &r->password)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->password), ndr_get_array_length(ndr, &r->password));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->password), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->password, ndr_get_array_length(ndr, &r->password), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_password_0, 0);
-		}
-		if (r->user_name) {
-			_mem_save_user_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->user_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->user_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->user_name));
-			if (ndr_get_array_length(ndr, &r->user_name) > ndr_get_array_size(ndr, &r->user_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->user_name), ndr_get_array_length(ndr, &r->user_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->user_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->user_name, ndr_get_array_length(ndr, &r->user_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_user_name_0, 0);
-		}
-		if (r->domain_name) {
-			_mem_save_domain_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->domain_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->domain_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->domain_name));
-			if (ndr_get_array_length(ndr, &r->domain_name) > ndr_get_array_size(ndr, &r->domain_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->domain_name), ndr_get_array_length(ndr, &r->domain_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->domain_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->domain_name, ndr_get_array_length(ndr, &r->domain_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_name_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetrUseInfo2(struct ndr_print *ndr, const char *name, const struct wkssvc_NetrUseInfo2 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetrUseInfo2");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "local", r->local);
-	ndr->depth++;
-	if (r->local) {
-		ndr_print_string(ndr, "local", r->local);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "remote", r->remote);
-	ndr->depth++;
-	if (r->remote) {
-		ndr_print_string(ndr, "remote", r->remote);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "password", r->password);
-	ndr->depth++;
-	if (r->password) {
-		ndr_print_string(ndr, "password", r->password);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "status", r->status);
-	ndr_print_uint32(ndr, "asg_type", r->asg_type);
-	ndr_print_uint32(ndr, "ref_count", r->ref_count);
-	ndr_print_uint32(ndr, "use_count", r->use_count);
-	ndr_print_ptr(ndr, "user_name", r->user_name);
-	ndr->depth++;
-	if (r->user_name) {
-		ndr_print_string(ndr, "user_name", r->user_name);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "domain_name", r->domain_name);
-	ndr->depth++;
-	if (r->domain_name) {
-		ndr_print_string(ndr, "domain_name", r->domain_name);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetrUseInfo1(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetrUseInfo1 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->local));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->remote));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->password));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->status));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->asg_type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->ref_count));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->use_count));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->local) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->local, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->local, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->local, ndr_charset_length(r->local, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->remote) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->remote, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->remote, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->remote, ndr_charset_length(r->remote, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->password) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->password, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->password, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->password, ndr_charset_length(r->password, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetrUseInfo1(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetrUseInfo1 *r)
-{
-	uint32_t _ptr_local;
-	TALLOC_CTX *_mem_save_local_0;
-	uint32_t _ptr_remote;
-	TALLOC_CTX *_mem_save_remote_0;
-	uint32_t _ptr_password;
-	TALLOC_CTX *_mem_save_password_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_local));
-		if (_ptr_local) {
-			NDR_PULL_ALLOC(ndr, r->local);
-		} else {
-			r->local = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_remote));
-		if (_ptr_remote) {
-			NDR_PULL_ALLOC(ndr, r->remote);
-		} else {
-			r->remote = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_password));
-		if (_ptr_password) {
-			NDR_PULL_ALLOC(ndr, r->password);
-		} else {
-			r->password = NULL;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->status));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->asg_type));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->ref_count));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->use_count));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->local) {
-			_mem_save_local_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->local, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->local));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->local));
-			if (ndr_get_array_length(ndr, &r->local) > ndr_get_array_size(ndr, &r->local)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->local), ndr_get_array_length(ndr, &r->local));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->local), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->local, ndr_get_array_length(ndr, &r->local), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_local_0, 0);
-		}
-		if (r->remote) {
-			_mem_save_remote_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->remote, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->remote));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->remote));
-			if (ndr_get_array_length(ndr, &r->remote) > ndr_get_array_size(ndr, &r->remote)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->remote), ndr_get_array_length(ndr, &r->remote));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->remote), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->remote, ndr_get_array_length(ndr, &r->remote), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_remote_0, 0);
-		}
-		if (r->password) {
-			_mem_save_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->password, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->password));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->password));
-			if (ndr_get_array_length(ndr, &r->password) > ndr_get_array_size(ndr, &r->password)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->password), ndr_get_array_length(ndr, &r->password));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->password), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->password, ndr_get_array_length(ndr, &r->password), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_password_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetrUseInfo1(struct ndr_print *ndr, const char *name, const struct wkssvc_NetrUseInfo1 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetrUseInfo1");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "local", r->local);
-	ndr->depth++;
-	if (r->local) {
-		ndr_print_string(ndr, "local", r->local);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "remote", r->remote);
-	ndr->depth++;
-	if (r->remote) {
-		ndr_print_string(ndr, "remote", r->remote);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "password", r->password);
-	ndr->depth++;
-	if (r->password) {
-		ndr_print_string(ndr, "password", r->password);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "status", r->status);
-	ndr_print_uint32(ndr, "asg_type", r->asg_type);
-	ndr_print_uint32(ndr, "ref_count", r->ref_count);
-	ndr_print_uint32(ndr, "use_count", r->use_count);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetrUseInfo0(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetrUseInfo0 *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->local));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->remote));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->local) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->local, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->local, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->local, ndr_charset_length(r->local, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->remote) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->remote, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->remote, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->remote, ndr_charset_length(r->remote, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetrUseInfo0(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetrUseInfo0 *r)
-{
-	uint32_t _ptr_local;
-	TALLOC_CTX *_mem_save_local_0;
-	uint32_t _ptr_remote;
-	TALLOC_CTX *_mem_save_remote_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_local));
-		if (_ptr_local) {
-			NDR_PULL_ALLOC(ndr, r->local);
-		} else {
-			r->local = NULL;
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_remote));
-		if (_ptr_remote) {
-			NDR_PULL_ALLOC(ndr, r->remote);
-		} else {
-			r->remote = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->local) {
-			_mem_save_local_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->local, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->local));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->local));
-			if (ndr_get_array_length(ndr, &r->local) > ndr_get_array_size(ndr, &r->local)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->local), ndr_get_array_length(ndr, &r->local));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->local), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->local, ndr_get_array_length(ndr, &r->local), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_local_0, 0);
-		}
-		if (r->remote) {
-			_mem_save_remote_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->remote, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->remote));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->remote));
-			if (ndr_get_array_length(ndr, &r->remote) > ndr_get_array_size(ndr, &r->remote)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->remote), ndr_get_array_length(ndr, &r->remote));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->remote), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->remote, ndr_get_array_length(ndr, &r->remote), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_remote_0, 0);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetrUseInfo0(struct ndr_print *ndr, const char *name, const struct wkssvc_NetrUseInfo0 *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetrUseInfo0");
-	ndr->depth++;
-	ndr_print_ptr(ndr, "local", r->local);
-	ndr->depth++;
-	if (r->local) {
-		ndr_print_string(ndr, "local", r->local);
-	}
-	ndr->depth--;
-	ndr_print_ptr(ndr, "remote", r->remote);
-	ndr->depth++;
-	if (r->remote) {
-		ndr_print_string(ndr, "remote", r->remote);
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetrUseGetInfoCtr(struct ndr_push *ndr, int ndr_flags, const union wkssvc_NetrUseGetInfoCtr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
 		switch (level) {
-			case 0: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info0));
-			break; }
-
-			case 1: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info2));
-			break; }
-
-			case 3: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->info3));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
 			case 0:
-				if (r->info0) {
-					NDR_CHECK(ndr_push_wkssvc_NetrUseInfo0(ndr, NDR_SCALARS|NDR_BUFFERS, r->info0));
-				}
+				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr0));
 			break;
 
-			case 1:
-				if (r->info1) {
-					NDR_CHECK(ndr_push_wkssvc_NetrUseInfo1(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1));
-				}
-			break;
-
-			case 2:
-				if (r->info2) {
-					NDR_CHECK(ndr_push_wkssvc_NetrUseInfo2(ndr, NDR_SCALARS|NDR_BUFFERS, r->info2));
-				}
-			break;
-
-			case 3:
-				if (r->info3) {
-					NDR_CHECK(ndr_push_wkssvc_NetrUseInfo3(ndr, NDR_SCALARS|NDR_BUFFERS, r->info3));
-				}
-			break;
-
 			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetrUseGetInfoCtr(struct ndr_pull *ndr, int ndr_flags, union wkssvc_NetrUseGetInfoCtr *r)
-{
-	int level;
-	uint32_t _level;
-	TALLOC_CTX *_mem_save_info0_0;
-	TALLOC_CTX *_mem_save_info1_0;
-	TALLOC_CTX *_mem_save_info2_0;
-	TALLOC_CTX *_mem_save_info3_0;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
-		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
-		}
-		switch (level) {
-			case 0: {
-				uint32_t _ptr_info0;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info0));
-				if (_ptr_info0) {
-					NDR_PULL_ALLOC(ndr, r->info0);
-				} else {
-					r->info0 = NULL;
-				}
-			break; }
-
-			case 1: {
-				uint32_t _ptr_info1;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info1));
-				if (_ptr_info1) {
-					NDR_PULL_ALLOC(ndr, r->info1);
-				} else {
-					r->info1 = NULL;
-				}
-			break; }
-
-			case 2: {
-				uint32_t _ptr_info2;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info2));
-				if (_ptr_info2) {
-					NDR_PULL_ALLOC(ndr, r->info2);
-				} else {
-					r->info2 = NULL;
-				}
-			break; }
-
-			case 3: {
-				uint32_t _ptr_info3;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info3));
-				if (_ptr_info3) {
-					NDR_PULL_ALLOC(ndr, r->info3);
-				} else {
-					r->info3 = NULL;
-				}
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		switch (level) {
-			case 0:
-				if (r->info0) {
-					_mem_save_info0_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info0, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetrUseInfo0(ndr, NDR_SCALARS|NDR_BUFFERS, r->info0));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info0_0, 0);
-				}
 			break;
 
-			case 1:
-				if (r->info1) {
-					_mem_save_info1_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info1, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetrUseInfo1(ndr, NDR_SCALARS|NDR_BUFFERS, r->info1));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info1_0, 0);
-				}
-			break;
-
-			case 2:
-				if (r->info2) {
-					_mem_save_info2_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info2, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetrUseInfo2(ndr, NDR_SCALARS|NDR_BUFFERS, r->info2));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info2_0, 0);
-				}
-			break;
-
-			case 3:
-				if (r->info3) {
-					_mem_save_info3_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->info3, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetrUseInfo3(ndr, NDR_SCALARS|NDR_BUFFERS, r->info3));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info3_0, 0);
-				}
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
 		}
 	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetrUseGetInfoCtr(struct ndr_print *ndr, const char *name, const union wkssvc_NetrUseGetInfoCtr *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "wkssvc_NetrUseGetInfoCtr");
-	switch (level) {
-		case 0:
-			ndr_print_ptr(ndr, "info0", r->info0);
-			ndr->depth++;
-			if (r->info0) {
-				ndr_print_wkssvc_NetrUseInfo0(ndr, "info0", r->info0);
-			}
-			ndr->depth--;
-		break;
-
-		case 1:
-			ndr_print_ptr(ndr, "info1", r->info1);
-			ndr->depth++;
-			if (r->info1) {
-				ndr_print_wkssvc_NetrUseInfo1(ndr, "info1", r->info1);
-			}
-			ndr->depth--;
-		break;
-
-		case 2:
-			ndr_print_ptr(ndr, "info2", r->info2);
-			ndr->depth++;
-			if (r->info2) {
-				ndr_print_wkssvc_NetrUseInfo2(ndr, "info2", r->info2);
-			}
-			ndr->depth--;
-		break;
-
-		case 3:
-			ndr_print_ptr(ndr, "info3", r->info3);
-			ndr->depth++;
-			if (r->info3) {
-				ndr_print_wkssvc_NetrUseInfo3(ndr, "info3", r->info3);
-			}
-			ndr->depth--;
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
-	}
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetrUseEnumCtr2(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetrUseEnumCtr2 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
 	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_wkssvc_NetrUseInfo2(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_wkssvc_NetrUseInfo2(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetrUseEnumCtr2(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetrUseEnumCtr2 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_wkssvc_NetrUseInfo2(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_wkssvc_NetrUseInfo2(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetrUseEnumCtr2(struct ndr_print *ndr, const char *name, const struct wkssvc_NetrUseEnumCtr2 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "wkssvc_NetrUseEnumCtr2");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_wkssvc_NetrUseInfo2(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetrUseEnumCtr1(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetrUseEnumCtr1 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_wkssvc_NetrUseInfo1(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_wkssvc_NetrUseInfo1(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetrUseEnumCtr1(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetrUseEnumCtr1 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_wkssvc_NetrUseInfo1(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_wkssvc_NetrUseInfo1(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetrUseEnumCtr1(struct ndr_print *ndr, const char *name, const struct wkssvc_NetrUseEnumCtr1 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "wkssvc_NetrUseEnumCtr1");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_wkssvc_NetrUseInfo1(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetrUseEnumCtr0(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetrUseEnumCtr0 *r)
-{
-	uint32_t cntr_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->array));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_wkssvc_NetrUseInfo0(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_push_wkssvc_NetrUseInfo0(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetrUseEnumCtr0(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetrUseEnumCtr0 *r)
-{
-	uint32_t _ptr_array;
-	uint32_t cntr_array_1;
-	TALLOC_CTX *_mem_save_array_0;
-	TALLOC_CTX *_mem_save_array_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_array));
-		if (_ptr_array) {
-			NDR_PULL_ALLOC(ndr, r->array);
-		} else {
-			r->array = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->array) {
-			_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
-			NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
-			_mem_save_array_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_wkssvc_NetrUseInfo0(ndr, NDR_SCALARS, &r->array[cntr_array_1]));
-			}
-			for (cntr_array_1 = 0; cntr_array_1 < r->count; cntr_array_1++) {
-				NDR_CHECK(ndr_pull_wkssvc_NetrUseInfo0(ndr, NDR_BUFFERS, &r->array[cntr_array_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_array_0, 0);
-		}
-		if (r->array) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->array, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetrUseEnumCtr0(struct ndr_print *ndr, const char *name, const struct wkssvc_NetrUseEnumCtr0 *r)
-{
-	uint32_t cntr_array_1;
-	ndr_print_struct(ndr, name, "wkssvc_NetrUseEnumCtr0");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "array", r->array);
-	ndr->depth++;
-	if (r->array) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "array", r->count);
-		ndr->depth++;
-		for (cntr_array_1=0;cntr_array_1<r->count;cntr_array_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_array_1) != -1) {
-				ndr_print_wkssvc_NetrUseInfo0(ndr, "array", &r->array[cntr_array_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetrUseEnumCtr(struct ndr_push *ndr, int ndr_flags, const union wkssvc_NetrUseEnumCtr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, level));
 		switch (level) {
-			case 0: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr0));
-			break; }
-
-			case 1: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr1));
-			break; }
-
-			case 2: {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, r->ctr2));
-			break; }
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
 			case 0:
 				if (r->ctr0) {
-					NDR_CHECK(ndr_push_wkssvc_NetrUseEnumCtr0(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr0));
+					NDR_CHECK(ndr_push_wkssvc_NetWkstaTransportCtr0(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr0));
 				}
 			break;
 
-			case 1:
-				if (r->ctr1) {
-					NDR_CHECK(ndr_push_wkssvc_NetrUseEnumCtr1(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1));
-				}
+			default:
 			break;
 
-			case 2:
-				if (r->ctr2) {
-					NDR_CHECK(ndr_push_wkssvc_NetrUseEnumCtr2(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr2));
-				}
-			break;
-
-			default:
-				return ndr_push_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrUseEnumCtr(struct ndr_pull *ndr, int ndr_flags, union wkssvc_NetrUseEnumCtr *r)
+NTSTATUS ndr_pull_wkssvc_NetWkstaTransportCtr(struct ndr_pull *ndr, int ndr_flags, union wkssvc_NetWkstaTransportCtr *r)
 {
 	int level;
 	uint32_t _level;
 	TALLOC_CTX *_mem_save_ctr0_0;
-	TALLOC_CTX *_mem_save_ctr1_0;
-	TALLOC_CTX *_mem_save_ctr2_0;
 	level = ndr_pull_get_switch_value(ndr, r);
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &_level));
 		if (_level != level) {
-			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for r", _level);
+			return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u for wkssvc_NetWkstaTransportCtr", _level);
 		}
 		switch (level) {
 			case 0: {
@@ -5121,28 +2048,9 @@
 				}
 			break; }
 
-			case 1: {
-				uint32_t _ptr_ctr1;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr1));
-				if (_ptr_ctr1) {
-					NDR_PULL_ALLOC(ndr, r->ctr1);
-				} else {
-					r->ctr1 = NULL;
-				}
+			default: {
 			break; }
 
-			case 2: {
-				uint32_t _ptr_ctr2;
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr2));
-				if (_ptr_ctr2) {
-					NDR_PULL_ALLOC(ndr, r->ctr2);
-				} else {
-					r->ctr2 = NULL;
-				}
-			break; }
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
 		}
 	}
 	if (ndr_flags & NDR_BUFFERS) {
@@ -5151,402 +2059,88 @@
 				if (r->ctr0) {
 					_mem_save_ctr0_0 = NDR_PULL_GET_MEM_CTX(ndr);
 					NDR_PULL_SET_MEM_CTX(ndr, r->ctr0, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetrUseEnumCtr0(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr0));
+					NDR_CHECK(ndr_pull_wkssvc_NetWkstaTransportCtr0(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr0));
 					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr0_0, 0);
 				}
 			break;
 
-			case 1:
-				if (r->ctr1) {
-					_mem_save_ctr1_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr1, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetrUseEnumCtr1(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr1));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr1_0, 0);
-				}
+			default:
 			break;
 
-			case 2:
-				if (r->ctr2) {
-					_mem_save_ctr2_0 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, r->ctr2, 0);
-					NDR_CHECK(ndr_pull_wkssvc_NetrUseEnumCtr2(ndr, NDR_SCALARS|NDR_BUFFERS, r->ctr2));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr2_0, 0);
-				}
-			break;
-
-			default:
-				return ndr_pull_error(ndr, NDR_ERR_BAD_SWITCH, "Bad switch value %u", level);
 		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrUseEnumCtr(struct ndr_print *ndr, const char *name, const union wkssvc_NetrUseEnumCtr *r)
+_PUBLIC_ void ndr_print_wkssvc_NetWkstaTransportCtr(struct ndr_print *ndr, const char *name, const union wkssvc_NetWkstaTransportCtr *r)
 {
 	int level;
 	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "wkssvc_NetrUseEnumCtr");
+	ndr_print_union(ndr, name, level, "wkssvc_NetWkstaTransportCtr");
 	switch (level) {
 		case 0:
 			ndr_print_ptr(ndr, "ctr0", r->ctr0);
 			ndr->depth++;
 			if (r->ctr0) {
-				ndr_print_wkssvc_NetrUseEnumCtr0(ndr, "ctr0", r->ctr0);
+				ndr_print_wkssvc_NetWkstaTransportCtr0(ndr, "ctr0", r->ctr0);
 			}
 			ndr->depth--;
 		break;
 
-		case 1:
-			ndr_print_ptr(ndr, "ctr1", r->ctr1);
-			ndr->depth++;
-			if (r->ctr1) {
-				ndr_print_wkssvc_NetrUseEnumCtr1(ndr, "ctr1", r->ctr1);
-			}
-			ndr->depth--;
+		default:
 		break;
 
-		case 2:
-			ndr_print_ptr(ndr, "ctr2", r->ctr2);
-			ndr->depth++;
-			if (r->ctr2) {
-				ndr_print_wkssvc_NetrUseEnumCtr2(ndr, "ctr2", r->ctr2);
-			}
-			ndr->depth--;
-		break;
-
-		default:
-			ndr_print_bad_level(ndr, name, level);
 	}
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrUseEnumInfo(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetrUseEnumInfo *r)
+NTSTATUS ndr_push_wkssvc_PasswordBuffer(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_PasswordBuffer *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->level));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->ctr, r->level));
-		NDR_CHECK(ndr_push_wkssvc_NetrUseEnumCtr(ndr, NDR_SCALARS, &r->ctr));
+		NDR_CHECK(ndr_push_align(ndr, 1));
+		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->data, 524));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_wkssvc_NetrUseEnumCtr(ndr, NDR_BUFFERS, &r->ctr));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrUseEnumInfo(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetrUseEnumInfo *r)
+NTSTATUS ndr_pull_wkssvc_PasswordBuffer(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_PasswordBuffer *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->level));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->ctr, r->level));
-		NDR_CHECK(ndr_pull_wkssvc_NetrUseEnumCtr(ndr, NDR_SCALARS, &r->ctr));
+		NDR_CHECK(ndr_pull_align(ndr, 1));
+		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->data, 524));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_wkssvc_NetrUseEnumCtr(ndr, NDR_BUFFERS, &r->ctr));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrUseEnumInfo(struct ndr_print *ndr, const char *name, const struct wkssvc_NetrUseEnumInfo *r)
+_PUBLIC_ void ndr_print_wkssvc_PasswordBuffer(struct ndr_print *ndr, const char *name, const struct wkssvc_PasswordBuffer *r)
 {
-	ndr_print_struct(ndr, name, "wkssvc_NetrUseEnumInfo");
+	ndr_print_struct(ndr, name, "wkssvc_PasswordBuffer");
 	ndr->depth++;
-	ndr_print_uint32(ndr, "level", r->level);
-	ndr_print_set_switch_value(ndr, &r->ctr, r->level);
-	ndr_print_wkssvc_NetrUseEnumCtr(ndr, "ctr", &r->ctr);
+	ndr_print_array_uint8(ndr, "data", r->data, 524);
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrWorkstationStatistics(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_NetrWorkstationStatistics *r)
+NTSTATUS ndr_push_wkssvc_joinflags(struct ndr_push *ndr, int ndr_flags, uint32_t r)
 {
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 8));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->unknown1));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->unknown2));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->unknown3));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->unknown4));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->unknown5));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->unknown6));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->unknown7));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->unknown8));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->unknown9));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->unknown10));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->unknown11));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->unknown12));
-		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->unknown13));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown14));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown15));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown17));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown18));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown19));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown20));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown21));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown22));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown23));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown24));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown25));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown26));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown27));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown28));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown29));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown30));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown31));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown32));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown33));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown34));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown35));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown36));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown37));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown38));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown39));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown40));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetrWorkstationStatistics(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_NetrWorkstationStatistics *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 8));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->unknown2));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->unknown3));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->unknown4));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->unknown5));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->unknown6));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->unknown7));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->unknown8));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->unknown9));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->unknown10));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->unknown11));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->unknown12));
-		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->unknown13));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown14));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown15));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown17));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown18));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown19));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown20));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown21));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown22));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown23));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown24));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown25));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown26));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown27));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown28));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown29));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown30));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown31));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown32));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown33));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown34));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown35));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown36));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown37));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown38));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown39));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown40));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetrWorkstationStatistics(struct ndr_print *ndr, const char *name, const struct wkssvc_NetrWorkstationStatistics *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_NetrWorkstationStatistics");
-	ndr->depth++;
-	ndr_print_hyper(ndr, "unknown1", r->unknown1);
-	ndr_print_hyper(ndr, "unknown2", r->unknown2);
-	ndr_print_hyper(ndr, "unknown3", r->unknown3);
-	ndr_print_hyper(ndr, "unknown4", r->unknown4);
-	ndr_print_hyper(ndr, "unknown5", r->unknown5);
-	ndr_print_hyper(ndr, "unknown6", r->unknown6);
-	ndr_print_hyper(ndr, "unknown7", r->unknown7);
-	ndr_print_hyper(ndr, "unknown8", r->unknown8);
-	ndr_print_hyper(ndr, "unknown9", r->unknown9);
-	ndr_print_hyper(ndr, "unknown10", r->unknown10);
-	ndr_print_hyper(ndr, "unknown11", r->unknown11);
-	ndr_print_hyper(ndr, "unknown12", r->unknown12);
-	ndr_print_hyper(ndr, "unknown13", r->unknown13);
-	ndr_print_uint32(ndr, "unknown14", r->unknown14);
-	ndr_print_uint32(ndr, "unknown15", r->unknown15);
-	ndr_print_uint32(ndr, "unknown16", r->unknown16);
-	ndr_print_uint32(ndr, "unknown17", r->unknown17);
-	ndr_print_uint32(ndr, "unknown18", r->unknown18);
-	ndr_print_uint32(ndr, "unknown19", r->unknown19);
-	ndr_print_uint32(ndr, "unknown20", r->unknown20);
-	ndr_print_uint32(ndr, "unknown21", r->unknown21);
-	ndr_print_uint32(ndr, "unknown22", r->unknown22);
-	ndr_print_uint32(ndr, "unknown23", r->unknown23);
-	ndr_print_uint32(ndr, "unknown24", r->unknown24);
-	ndr_print_uint32(ndr, "unknown25", r->unknown25);
-	ndr_print_uint32(ndr, "unknown26", r->unknown26);
-	ndr_print_uint32(ndr, "unknown27", r->unknown27);
-	ndr_print_uint32(ndr, "unknown28", r->unknown28);
-	ndr_print_uint32(ndr, "unknown29", r->unknown29);
-	ndr_print_uint32(ndr, "unknown30", r->unknown30);
-	ndr_print_uint32(ndr, "unknown31", r->unknown31);
-	ndr_print_uint32(ndr, "unknown32", r->unknown32);
-	ndr_print_uint32(ndr, "unknown33", r->unknown33);
-	ndr_print_uint32(ndr, "unknown34", r->unknown34);
-	ndr_print_uint32(ndr, "unknown35", r->unknown35);
-	ndr_print_uint32(ndr, "unknown36", r->unknown36);
-	ndr_print_uint32(ndr, "unknown37", r->unknown37);
-	ndr_print_uint32(ndr, "unknown38", r->unknown38);
-	ndr_print_uint32(ndr, "unknown39", r->unknown39);
-	ndr_print_uint32(ndr, "unknown40", r->unknown40);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_renameflags(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
 	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_renameflags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
+NTSTATUS ndr_pull_wkssvc_joinflags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
 {
 	uint32_t v;
 	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
 	*r = v;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_renameflags(struct ndr_print *ndr, const char *name, uint32_t r)
-{
-	ndr_print_uint32(ndr, name, r);
-	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "WKSSVC_JOIN_FLAGS_ACCOUNT_CREATE", WKSSVC_JOIN_FLAGS_ACCOUNT_CREATE, r);
-	ndr->depth--;
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetValidateNameType(struct ndr_push *ndr, int ndr_flags, enum wkssvc_NetValidateNameType r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetValidateNameType(struct ndr_pull *ndr, int ndr_flags, enum wkssvc_NetValidateNameType *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetValidateNameType(struct ndr_print *ndr, const char *name, enum wkssvc_NetValidateNameType r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case NetSetupUnknown: val = "NetSetupUnknown"; break;
-		case NetSetupMachine: val = "NetSetupMachine"; break;
-		case NetSetupWorkgroup: val = "NetSetupWorkgroup"; break;
-		case NetSetupDomain: val = "NetSetupDomain"; break;
-		case NetSetupNonExistentDomain: val = "NetSetupNonExistentDomain"; break;
-		case NetSetupDnsMachine: val = "NetSetupDnsMachine"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_wkssvc_NetJoinStatus(struct ndr_push *ndr, int ndr_flags, enum wkssvc_NetJoinStatus r)
-{
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_NetJoinStatus(struct ndr_pull *ndr, int ndr_flags, enum wkssvc_NetJoinStatus *r)
-{
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_NetJoinStatus(struct ndr_print *ndr, const char *name, enum wkssvc_NetJoinStatus r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case NetSetupUnknownStatus: val = "NetSetupUnknownStatus"; break;
-		case NetSetupUnjoined: val = "NetSetupUnjoined"; break;
-		case NetSetupWorkgroupName: val = "NetSetupWorkgroupName"; break;
-		case NetSetupDomainName: val = "NetSetupDomainName"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_wkssvc_PasswordBuffer(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_PasswordBuffer *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_push_align(ndr, 1));
-			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->data, 524));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_PasswordBuffer(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_PasswordBuffer *r)
-{
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		if (ndr_flags & NDR_SCALARS) {
-			NDR_CHECK(ndr_pull_align(ndr, 1));
-			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->data, 524));
-		}
-		if (ndr_flags & NDR_BUFFERS) {
-		}
-		ndr->flags = _flags_save_STRUCT;
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_PasswordBuffer(struct ndr_print *ndr, const char *name, const struct wkssvc_PasswordBuffer *r)
-{
-	ndr_print_struct(ndr, name, "wkssvc_PasswordBuffer");
-	{
-		uint32_t _flags_save_STRUCT = ndr->flags;
-		ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "data", r->data, 524);
-		ndr->depth--;
-		ndr->flags = _flags_save_STRUCT;
-	}
-}
-
-static enum ndr_err_code ndr_push_wkssvc_joinflags(struct ndr_push *ndr, int ndr_flags, uint32_t r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_joinflags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
 _PUBLIC_ void ndr_print_wkssvc_joinflags(struct ndr_print *ndr, const char *name, uint32_t r)
 {
 	ndr_print_uint32(ndr, name, r);
 	ndr->depth++;
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "WKSSVC_JOIN_FLAGS_JOIN_WITH_NEW_NAME", WKSSVC_JOIN_FLAGS_JOIN_WITH_NEW_NAME, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "WKSSVC_JOIN_FLAGS_JOIN_DC_ACCOUNT", WKSSVC_JOIN_FLAGS_JOIN_DC_ACCOUNT, r);
 	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "WKSSVC_JOIN_FLAGS_DEFER_SPN", WKSSVC_JOIN_FLAGS_DEFER_SPN, r);
 	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "WKSSVC_JOIN_FLAGS_MACHINE_PWD_PASSED", WKSSVC_JOIN_FLAGS_MACHINE_PWD_PASSED, r);
 	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "WKSSVC_JOIN_FLAGS_JOIN_UNSECURE", WKSSVC_JOIN_FLAGS_JOIN_UNSECURE, r);
@@ -5558,120 +2152,29 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_ComputerNameType(struct ndr_push *ndr, int ndr_flags, enum wkssvc_ComputerNameType r)
+NTSTATUS ndr_push_wkssvc_renameflags(struct ndr_push *ndr, int ndr_flags, uint32_t r)
 {
-	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
+	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_ComputerNameType(struct ndr_pull *ndr, int ndr_flags, enum wkssvc_ComputerNameType *r)
+NTSTATUS ndr_pull_wkssvc_renameflags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
 {
-	uint16_t v;
-	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
+	uint32_t v;
+	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
 	*r = v;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_ComputerNameType(struct ndr_print *ndr, const char *name, enum wkssvc_ComputerNameType r)
+_PUBLIC_ void ndr_print_wkssvc_renameflags(struct ndr_print *ndr, const char *name, uint32_t r)
 {
-	const char *val = NULL;
-
-	switch (r) {
-		case NetPrimaryComputerName: val = "NetPrimaryComputerName"; break;
-		case NetAlternateComputerNames: val = "NetAlternateComputerNames"; break;
-		case NetAllComputerNames: val = "NetAllComputerNames"; break;
-		case NetComputerNameTypeMax: val = "NetComputerNameTypeMax"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
-static enum ndr_err_code ndr_push_wkssvc_ComputerNamesCtr(struct ndr_push *ndr, int ndr_flags, const struct wkssvc_ComputerNamesCtr *r)
-{
-	uint32_t cntr_computer_name_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->computer_name));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->computer_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
-			for (cntr_computer_name_1 = 0; cntr_computer_name_1 < r->count; cntr_computer_name_1++) {
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->computer_name[cntr_computer_name_1]));
-			}
-			for (cntr_computer_name_1 = 0; cntr_computer_name_1 < r->count; cntr_computer_name_1++) {
-				NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->computer_name[cntr_computer_name_1]));
-			}
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_wkssvc_ComputerNamesCtr(struct ndr_pull *ndr, int ndr_flags, struct wkssvc_ComputerNamesCtr *r)
-{
-	uint32_t _ptr_computer_name;
-	uint32_t cntr_computer_name_1;
-	TALLOC_CTX *_mem_save_computer_name_0;
-	TALLOC_CTX *_mem_save_computer_name_1;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_computer_name));
-		if (_ptr_computer_name) {
-			NDR_PULL_ALLOC(ndr, r->computer_name);
-		} else {
-			r->computer_name = NULL;
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		if (r->computer_name) {
-			_mem_save_computer_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->computer_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->computer_name));
-			NDR_PULL_ALLOC_N(ndr, r->computer_name, ndr_get_array_size(ndr, &r->computer_name));
-			_mem_save_computer_name_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->computer_name, 0);
-			for (cntr_computer_name_1 = 0; cntr_computer_name_1 < r->count; cntr_computer_name_1++) {
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->computer_name[cntr_computer_name_1]));
-			}
-			for (cntr_computer_name_1 = 0; cntr_computer_name_1 < r->count; cntr_computer_name_1++) {
-				NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->computer_name[cntr_computer_name_1]));
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_computer_name_1, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_computer_name_0, 0);
-		}
-		if (r->computer_name) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->computer_name, r->count));
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_wkssvc_ComputerNamesCtr(struct ndr_print *ndr, const char *name, const struct wkssvc_ComputerNamesCtr *r)
-{
-	uint32_t cntr_computer_name_1;
-	ndr_print_struct(ndr, name, "wkssvc_ComputerNamesCtr");
+	ndr_print_uint32(ndr, name, r);
 	ndr->depth++;
-	ndr_print_uint32(ndr, "count", r->count);
-	ndr_print_ptr(ndr, "computer_name", r->computer_name);
-	ndr->depth++;
-	if (r->computer_name) {
-		ndr->print(ndr, "%s: ARRAY(%d)", "computer_name", r->count);
-		ndr->depth++;
-		for (cntr_computer_name_1=0;cntr_computer_name_1<r->count;cntr_computer_name_1++) {
-			char *idx_1=NULL;
-			if (asprintf(&idx_1, "[%d]", cntr_computer_name_1) != -1) {
-				ndr_print_lsa_String(ndr, "computer_name", &r->computer_name[cntr_computer_name_1]);
-				free(idx_1);
-			}
-		}
-		ndr->depth--;
-	}
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "WKSSVC_JOIN_FLAGS_ACCOUNT_CREATE", WKSSVC_JOIN_FLAGS_ACCOUNT_CREATE, r);
 	ndr->depth--;
-	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaGetInfo(struct ndr_push *ndr, int flags, const struct wkssvc_NetWkstaGetInfo *r)
+NTSTATUS ndr_push_wkssvc_NetWkstaGetInfo(struct ndr_push *ndr, int flags, const struct wkssvc_NetWkstaGetInfo *r)
 {
 	if (flags & NDR_IN) {
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
@@ -5684,17 +2187,15 @@
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
 	}
 	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
+		if (r->out.info == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;
 		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.info, r->in.level));
 		NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaGetInfo(struct ndr_pull *ndr, int flags, struct wkssvc_NetWkstaGetInfo *r)
+NTSTATUS ndr_pull_wkssvc_NetWkstaGetInfo(struct ndr_pull *ndr, int flags, struct wkssvc_NetWkstaGetInfo *r)
 {
 	uint32_t _ptr_server_name;
 	TALLOC_CTX *_mem_save_server_name_0;
@@ -5735,7 +2236,7 @@
 		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_wkssvc_NetWkstaGetInfo(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetWkstaGetInfo *r)
@@ -5771,7 +2272,7 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaSetInfo(struct ndr_push *ndr, int flags, const struct wkssvc_NetWkstaSetInfo *r)
+NTSTATUS ndr_push_wkssvc_NetWkstaSetInfo(struct ndr_push *ndr, int flags, const struct wkssvc_NetWkstaSetInfo *r)
 {
 	if (flags & NDR_IN) {
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
@@ -5782,27 +2283,21 @@
 			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
 		}
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
+		if (r->in.info == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;
 		NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.info, r->in.level));
 		NDR_CHECK(ndr_push_wkssvc_NetWkstaInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		if (r->in.parm_error == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
+		if (r->in.parm_error == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.parm_error));
 	}
 	if (flags & NDR_OUT) {
-		if (r->out.parm_error == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
+		if (r->out.parm_error == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.parm_error));
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaSetInfo(struct ndr_pull *ndr, int flags, struct wkssvc_NetWkstaSetInfo *r)
+NTSTATUS ndr_pull_wkssvc_NetWkstaSetInfo(struct ndr_pull *ndr, int flags, struct wkssvc_NetWkstaSetInfo *r)
 {
 	uint32_t _ptr_server_name;
 	TALLOC_CTX *_mem_save_server_name_0;
@@ -5858,7 +2353,7 @@
 		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_parm_error_0, LIBNDR_FLAG_REF_ALLOC);
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_wkssvc_NetWkstaSetInfo(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetWkstaSetInfo *r)
@@ -5902,7 +2397,7 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaEnumUsers(struct ndr_push *ndr, int flags, const struct wkssvc_NetWkstaEnumUsers *r)
+NTSTATUS ndr_push_wkssvc_NetWkstaEnumUsers(struct ndr_push *ndr, int flags, const struct wkssvc_NetWkstaEnumUsers *r)
 {
 	if (flags & NDR_IN) {
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
@@ -5912,42 +2407,41 @@
 			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
 			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
 		}
-		if (r->in.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_wkssvc_NetWkstaEnumUsersInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
+		if (r->in.users == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;
+		NDR_CHECK(ndr_push_WKS_USER_ENUM_UNION(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.users));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.prefmaxlen));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.resume_handle));
-		if (r->in.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
-		}
+		if (r->in.resumehandle == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resumehandle));
 	}
 	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+		if (r->out.users == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;
+		NDR_CHECK(ndr_push_WKS_USER_ENUM_UNION(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.users));
+		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.entriesread));
+		if (r->out.entriesread) {
+			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.entriesread));
 		}
-		NDR_CHECK(ndr_push_wkssvc_NetWkstaEnumUsersInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		if (r->out.entries_read == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.totalentries));
+		if (r->out.totalentries) {
+			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.totalentries));
 		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.entries_read));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.resume_handle));
-		if (r->out.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		}
+		if (r->out.resumehandle == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resumehandle));
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaEnumUsers(struct ndr_pull *ndr, int flags, struct wkssvc_NetWkstaEnumUsers *r)
+NTSTATUS ndr_pull_wkssvc_NetWkstaEnumUsers(struct ndr_pull *ndr, int flags, struct wkssvc_NetWkstaEnumUsers *r)
 {
 	uint32_t _ptr_server_name;
-	uint32_t _ptr_resume_handle;
+	uint32_t _ptr_entriesread;
+	uint32_t _ptr_totalentries;
 	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_entries_read_0;
-	TALLOC_CTX *_mem_save_resume_handle_0;
+	TALLOC_CTX *_mem_save_users_0;
+	TALLOC_CTX *_mem_save_entriesread_0;
+	TALLOC_CTX *_mem_save_totalentries_0;
+	TALLOC_CTX *_mem_save_resumehandle_0;
 	if (flags & NDR_IN) {
 		ZERO_STRUCT(r->out);
 
@@ -5969,61 +2463,69 @@
 			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
 			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
 		}
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
 		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info);
+			NDR_PULL_ALLOC(ndr, r->in.users);
 		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_wkssvc_NetWkstaEnumUsersInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
+		_mem_save_users_0 = NDR_PULL_GET_MEM_CTX(ndr);
+		NDR_PULL_SET_MEM_CTX(ndr, r->in.users, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_WKS_USER_ENUM_UNION(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.users));
+		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_users_0, LIBNDR_FLAG_REF_ALLOC);
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.prefmaxlen));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->in.resume_handle);
-		} else {
-			r->in.resume_handle = NULL;
+		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+			NDR_PULL_ALLOC(ndr, r->in.resumehandle);
 		}
-		if (r->in.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		*r->out.info = *r->in.info;
-		NDR_PULL_ALLOC(ndr, r->out.entries_read);
-		ZERO_STRUCTP(r->out.entries_read);
+		_mem_save_resumehandle_0 = NDR_PULL_GET_MEM_CTX(ndr);
+		NDR_PULL_SET_MEM_CTX(ndr, r->in.resumehandle, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resumehandle));
+		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resumehandle_0, LIBNDR_FLAG_REF_ALLOC);
+		NDR_PULL_ALLOC(ndr, r->out.users);
+		*r->out.users = *r->in.users;
+		NDR_PULL_ALLOC(ndr, r->out.resumehandle);
+		*r->out.resumehandle = *r->in.resumehandle;
 	}
 	if (flags & NDR_OUT) {
 		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
+			NDR_PULL_ALLOC(ndr, r->out.users);
 		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_wkssvc_NetWkstaEnumUsersInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.entries_read);
+		_mem_save_users_0 = NDR_PULL_GET_MEM_CTX(ndr);
+		NDR_PULL_SET_MEM_CTX(ndr, r->out.users, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_WKS_USER_ENUM_UNION(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.users));
+		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_users_0, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_entriesread));
+		if (_ptr_entriesread) {
+			NDR_PULL_ALLOC(ndr, r->out.entriesread);
+		} else {
+			r->out.entriesread = NULL;
 		}
-		_mem_save_entries_read_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.entries_read, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.entries_read));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entries_read_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
+		if (r->out.entriesread) {
+			_mem_save_entriesread_0 = NDR_PULL_GET_MEM_CTX(ndr);
+			NDR_PULL_SET_MEM_CTX(ndr, r->out.entriesread, 0);
+			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.entriesread));
+			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entriesread_0, 0);
+		}
+		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_totalentries));
+		if (_ptr_totalentries) {
+			NDR_PULL_ALLOC(ndr, r->out.totalentries);
 		} else {
-			r->out.resume_handle = NULL;
+			r->out.totalentries = NULL;
 		}
-		if (r->out.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
+		if (r->out.totalentries) {
+			_mem_save_totalentries_0 = NDR_PULL_GET_MEM_CTX(ndr);
+			NDR_PULL_SET_MEM_CTX(ndr, r->out.totalentries, 0);
+			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.totalentries));
+			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_totalentries_0, 0);
 		}
+		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+			NDR_PULL_ALLOC(ndr, r->out.resumehandle);
+		}
+		_mem_save_resumehandle_0 = NDR_PULL_GET_MEM_CTX(ndr);
+		NDR_PULL_SET_MEM_CTX(ndr, r->out.resumehandle, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resumehandle));
+		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resumehandle_0, LIBNDR_FLAG_REF_ALLOC);
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_wkssvc_NetWkstaEnumUsers(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetWkstaEnumUsers *r)
@@ -6042,287 +2544,130 @@
 			ndr_print_string(ndr, "server_name", r->in.server_name);
 		}
 		ndr->depth--;
-		ndr_print_ptr(ndr, "info", r->in.info);
+		ndr_print_uint32(ndr, "level", r->in.level);
+		ndr_print_ptr(ndr, "users", r->in.users);
 		ndr->depth++;
-		ndr_print_wkssvc_NetWkstaEnumUsersInfo(ndr, "info", r->in.info);
+		ndr_print_WKS_USER_ENUM_UNION(ndr, "users", r->in.users);
 		ndr->depth--;
 		ndr_print_uint32(ndr, "prefmaxlen", r->in.prefmaxlen);
-		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
+		ndr_print_ptr(ndr, "resumehandle", r->in.resumehandle);
 		ndr->depth++;
-		if (r->in.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		}
+		ndr_print_uint32(ndr, "resumehandle", *r->in.resumehandle);
 		ndr->depth--;
 		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
 		ndr_print_struct(ndr, "out", "wkssvc_NetWkstaEnumUsers");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
+		ndr_print_ptr(ndr, "users", r->out.users);
 		ndr->depth++;
-		ndr_print_wkssvc_NetWkstaEnumUsersInfo(ndr, "info", r->out.info);
+		ndr_print_WKS_USER_ENUM_UNION(ndr, "users", r->out.users);
 		ndr->depth--;
-		ndr_print_ptr(ndr, "entries_read", r->out.entries_read);
+		ndr_print_ptr(ndr, "entriesread", r->out.entriesread);
 		ndr->depth++;
-		ndr_print_uint32(ndr, "entries_read", *r->out.entries_read);
+		if (r->out.entriesread) {
+			ndr_print_uint32(ndr, "entriesread", *r->out.entriesread);
+		}
 		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
+		ndr_print_ptr(ndr, "totalentries", r->out.totalentries);
 		ndr->depth++;
-		if (r->out.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
+		if (r->out.totalentries) {
+			ndr_print_uint32(ndr, "totalentries", *r->out.totalentries);
 		}
 		ndr->depth--;
+		ndr_print_ptr(ndr, "resumehandle", r->out.resumehandle);
+		ndr->depth++;
+		ndr_print_uint32(ndr, "resumehandle", *r->out.resumehandle);
+		ndr->depth--;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
 	}
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrWkstaUserGetInfo(struct ndr_push *ndr, int flags, const struct wkssvc_NetrWkstaUserGetInfo *r)
+NTSTATUS ndr_push_WKSSVC_NETRWKSTAUSERGETINFO(struct ndr_push *ndr, int flags, const struct WKSSVC_NETRWKSTAUSERGETINFO *r)
 {
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.unknown));
-		if (r->in.unknown) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.unknown, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.unknown, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.unknown, ndr_charset_length(r->in.unknown, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
 	}
 	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_push_wkssvc_NetrWkstaUserInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrWkstaUserGetInfo(struct ndr_pull *ndr, int flags, struct wkssvc_NetrWkstaUserGetInfo *r)
+NTSTATUS ndr_pull_WKSSVC_NETRWKSTAUSERGETINFO(struct ndr_pull *ndr, int flags, struct WKSSVC_NETRWKSTAUSERGETINFO *r)
 {
-	uint32_t _ptr_unknown;
-	TALLOC_CTX *_mem_save_unknown_0;
-	TALLOC_CTX *_mem_save_info_0;
 	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown));
-		if (_ptr_unknown) {
-			NDR_PULL_ALLOC(ndr, r->in.unknown);
-		} else {
-			r->in.unknown = NULL;
-		}
-		if (r->in.unknown) {
-			_mem_save_unknown_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.unknown, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.unknown));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.unknown));
-			if (ndr_get_array_length(ndr, &r->in.unknown) > ndr_get_array_size(ndr, &r->in.unknown)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.unknown), ndr_get_array_length(ndr, &r->in.unknown));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.unknown), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.unknown, ndr_get_array_length(ndr, &r->in.unknown), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
 	}
 	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.info, r->in.level));
-		NDR_CHECK(ndr_pull_wkssvc_NetrWkstaUserInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrWkstaUserGetInfo(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrWkstaUserGetInfo *r)
+_PUBLIC_ void ndr_print_WKSSVC_NETRWKSTAUSERGETINFO(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRWKSTAUSERGETINFO *r)
 {
-	ndr_print_struct(ndr, name, "wkssvc_NetrWkstaUserGetInfo");
+	ndr_print_struct(ndr, name, "WKSSVC_NETRWKSTAUSERGETINFO");
 	ndr->depth++;
 	if (flags & NDR_SET_VALUES) {
 		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
 	}
 	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "wkssvc_NetrWkstaUserGetInfo");
+		ndr_print_struct(ndr, "in", "WKSSVC_NETRWKSTAUSERGETINFO");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "unknown", r->in.unknown);
-		ndr->depth++;
-		if (r->in.unknown) {
-			ndr_print_string(ndr, "unknown", r->in.unknown);
-		}
 		ndr->depth--;
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "wkssvc_NetrWkstaUserGetInfo");
+		ndr_print_struct(ndr, "out", "WKSSVC_NETRWKSTAUSERGETINFO");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.info, r->in.level);
-		ndr_print_wkssvc_NetrWkstaUserInfo(ndr, "info", r->out.info);
-		ndr->depth--;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
 	}
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrWkstaUserSetInfo(struct ndr_push *ndr, int flags, const struct wkssvc_NetrWkstaUserSetInfo *r)
+NTSTATUS ndr_push_WKSSVC_NETRWKSTAUSERSETINFO(struct ndr_push *ndr, int flags, const struct WKSSVC_NETRWKSTAUSERSETINFO *r)
 {
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.unknown));
-		if (r->in.unknown) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.unknown, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.unknown, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.unknown, ndr_charset_length(r->in.unknown, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.info, r->in.level));
-		NDR_CHECK(ndr_push_wkssvc_NetrWkstaUserInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.parm_err));
-		if (r->in.parm_err) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.parm_err));
-		}
 	}
 	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.parm_err));
-		if (r->out.parm_err) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.parm_err));
-		}
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrWkstaUserSetInfo(struct ndr_pull *ndr, int flags, struct wkssvc_NetrWkstaUserSetInfo *r)
+NTSTATUS ndr_pull_WKSSVC_NETRWKSTAUSERSETINFO(struct ndr_pull *ndr, int flags, struct WKSSVC_NETRWKSTAUSERSETINFO *r)
 {
-	uint32_t _ptr_unknown;
-	uint32_t _ptr_parm_err;
-	TALLOC_CTX *_mem_save_unknown_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_parm_err_0;
 	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown));
-		if (_ptr_unknown) {
-			NDR_PULL_ALLOC(ndr, r->in.unknown);
-		} else {
-			r->in.unknown = NULL;
-		}
-		if (r->in.unknown) {
-			_mem_save_unknown_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.unknown, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.unknown));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.unknown));
-			if (ndr_get_array_length(ndr, &r->in.unknown) > ndr_get_array_size(ndr, &r->in.unknown)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.unknown), ndr_get_array_length(ndr, &r->in.unknown));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.unknown), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.unknown, ndr_get_array_length(ndr, &r->in.unknown), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.info, r->in.level));
-		NDR_CHECK(ndr_pull_wkssvc_NetrWkstaUserInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_parm_err));
-		if (_ptr_parm_err) {
-			NDR_PULL_ALLOC(ndr, r->in.parm_err);
-		} else {
-			r->in.parm_err = NULL;
-		}
-		if (r->in.parm_err) {
-			_mem_save_parm_err_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.parm_err, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.parm_err));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_parm_err_0, 0);
-		}
 	}
 	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_parm_err));
-		if (_ptr_parm_err) {
-			NDR_PULL_ALLOC(ndr, r->out.parm_err);
-		} else {
-			r->out.parm_err = NULL;
-		}
-		if (r->out.parm_err) {
-			_mem_save_parm_err_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.parm_err, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.parm_err));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_parm_err_0, 0);
-		}
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrWkstaUserSetInfo(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrWkstaUserSetInfo *r)
+_PUBLIC_ void ndr_print_WKSSVC_NETRWKSTAUSERSETINFO(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRWKSTAUSERSETINFO *r)
 {
-	ndr_print_struct(ndr, name, "wkssvc_NetrWkstaUserSetInfo");
+	ndr_print_struct(ndr, name, "WKSSVC_NETRWKSTAUSERSETINFO");
 	ndr->depth++;
 	if (flags & NDR_SET_VALUES) {
 		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
 	}
 	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "wkssvc_NetrWkstaUserSetInfo");
+		ndr_print_struct(ndr, "in", "WKSSVC_NETRWKSTAUSERSETINFO");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "unknown", r->in.unknown);
-		ndr->depth++;
-		if (r->in.unknown) {
-			ndr_print_string(ndr, "unknown", r->in.unknown);
-		}
 		ndr->depth--;
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "info", r->in.info);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->in.info, r->in.level);
-		ndr_print_wkssvc_NetrWkstaUserInfo(ndr, "info", r->in.info);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "parm_err", r->in.parm_err);
-		ndr->depth++;
-		if (r->in.parm_err) {
-			ndr_print_uint32(ndr, "parm_err", *r->in.parm_err);
-		}
-		ndr->depth--;
-		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "wkssvc_NetrWkstaUserSetInfo");
+		ndr_print_struct(ndr, "out", "WKSSVC_NETRWKSTAUSERSETINFO");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "parm_err", r->out.parm_err);
-		ndr->depth++;
-		if (r->out.parm_err) {
-			ndr_print_uint32(ndr, "parm_err", *r->out.parm_err);
-		}
-		ndr->depth--;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
 	}
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetWkstaTransportEnum(struct ndr_push *ndr, int flags, const struct wkssvc_NetWkstaTransportEnum *r)
+NTSTATUS ndr_push_wkssvc_NetWkstaTransportEnum(struct ndr_push *ndr, int flags, const struct wkssvc_NetWkstaTransportEnum *r)
 {
 	if (flags & NDR_IN) {
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
@@ -6332,41 +2677,40 @@
 			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
 			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
 		}
-		if (r->in.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_wkssvc_NetWkstaTransportInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
+		if (r->in.level == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.level));
+		if (r->in.ctr == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;
+		NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.ctr, *r->in.level));
+		NDR_CHECK(ndr_push_wkssvc_NetWkstaTransportCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.ctr));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.max_buffer));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.resume_handle));
-		if (r->in.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
-		}
+		if (r->in.resume_handle == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
 	}
 	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+		if (r->out.level == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.level));
+		if (r->out.ctr == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;
+		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.ctr, *r->out.level));
+		NDR_CHECK(ndr_push_wkssvc_NetWkstaTransportCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.ctr));
+		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.totalentries));
+		if (r->out.totalentries) {
+			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.totalentries));
 		}
-		NDR_CHECK(ndr_push_wkssvc_NetWkstaTransportInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		if (r->out.total_entries == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.total_entries));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.resume_handle));
-		if (r->out.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		}
+		if (r->out.resume_handle == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetWkstaTransportEnum(struct ndr_pull *ndr, int flags, struct wkssvc_NetWkstaTransportEnum *r)
+NTSTATUS ndr_pull_wkssvc_NetWkstaTransportEnum(struct ndr_pull *ndr, int flags, struct wkssvc_NetWkstaTransportEnum *r)
 {
 	uint32_t _ptr_server_name;
-	uint32_t _ptr_resume_handle;
+	uint32_t _ptr_totalentries;
 	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_total_entries_0;
+	TALLOC_CTX *_mem_save_level_0;
+	TALLOC_CTX *_mem_save_ctr_0;
+	TALLOC_CTX *_mem_save_totalentries_0;
 	TALLOC_CTX *_mem_save_resume_handle_0;
 	if (flags & NDR_IN) {
 		ZERO_STRUCT(r->out);
@@ -6390,60 +2734,73 @@
 			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
 		}
 		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info);
+			NDR_PULL_ALLOC(ndr, r->in.level);
 		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_wkssvc_NetWkstaTransportInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
+		_mem_save_level_0 = NDR_PULL_GET_MEM_CTX(ndr);
+		NDR_PULL_SET_MEM_CTX(ndr, r->in.level, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.level));
+		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_level_0, LIBNDR_FLAG_REF_ALLOC);
+		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+			NDR_PULL_ALLOC(ndr, r->in.ctr);
+		}
+		_mem_save_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
+		NDR_PULL_SET_MEM_CTX(ndr, r->in.ctr, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.ctr, *r->in.level));
+		NDR_CHECK(ndr_pull_wkssvc_NetWkstaTransportCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.ctr));
+		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_0, LIBNDR_FLAG_REF_ALLOC);
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_buffer));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
+		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
 			NDR_PULL_ALLOC(ndr, r->in.resume_handle);
-		} else {
-			r->in.resume_handle = NULL;
 		}
-		if (r->in.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		*r->out.info = *r->in.info;
-		NDR_PULL_ALLOC(ndr, r->out.total_entries);
-		ZERO_STRUCTP(r->out.total_entries);
+		_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
+		NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
+		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, LIBNDR_FLAG_REF_ALLOC);
+		NDR_PULL_ALLOC(ndr, r->out.level);
+		*r->out.level = *r->in.level;
+		NDR_PULL_ALLOC(ndr, r->out.ctr);
+		*r->out.ctr = *r->in.ctr;
+		NDR_PULL_ALLOC(ndr, r->out.resume_handle);
+		*r->out.resume_handle = *r->in.resume_handle;
 	}
 	if (flags & NDR_OUT) {
 		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
+			NDR_PULL_ALLOC(ndr, r->out.level);
 		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_wkssvc_NetWkstaTransportInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
+		_mem_save_level_0 = NDR_PULL_GET_MEM_CTX(ndr);
+		NDR_PULL_SET_MEM_CTX(ndr, r->out.level, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.level));
+		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_level_0, LIBNDR_FLAG_REF_ALLOC);
 		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.total_entries);
+			NDR_PULL_ALLOC(ndr, r->out.ctr);
 		}
-		_mem_save_total_entries_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.total_entries, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.total_entries));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_total_entries_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
+		_mem_save_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
+		NDR_PULL_SET_MEM_CTX(ndr, r->out.ctr, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.ctr, *r->out.level));
+		NDR_CHECK(ndr_pull_wkssvc_NetWkstaTransportCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.ctr));
+		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_0, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_totalentries));
+		if (_ptr_totalentries) {
+			NDR_PULL_ALLOC(ndr, r->out.totalentries);
 		} else {
-			r->out.resume_handle = NULL;
+			r->out.totalentries = NULL;
 		}
-		if (r->out.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
+		if (r->out.totalentries) {
+			_mem_save_totalentries_0 = NDR_PULL_GET_MEM_CTX(ndr);
+			NDR_PULL_SET_MEM_CTX(ndr, r->out.totalentries, 0);
+			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.totalentries));
+			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_totalentries_0, 0);
 		}
+		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
+		}
+		_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
+		NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
+		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, LIBNDR_FLAG_REF_ALLOC);
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_wkssvc_NetWkstaTransportEnum(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetWkstaTransportEnum *r)
@@ -6462,286 +2819,125 @@
 			ndr_print_string(ndr, "server_name", r->in.server_name);
 		}
 		ndr->depth--;
-		ndr_print_ptr(ndr, "info", r->in.info);
+		ndr_print_ptr(ndr, "level", r->in.level);
 		ndr->depth++;
-		ndr_print_wkssvc_NetWkstaTransportInfo(ndr, "info", r->in.info);
+		ndr_print_uint32(ndr, "level", *r->in.level);
 		ndr->depth--;
+		ndr_print_ptr(ndr, "ctr", r->in.ctr);
+		ndr->depth++;
+		ndr_print_set_switch_value(ndr, r->in.ctr, *r->in.level);
+		ndr_print_wkssvc_NetWkstaTransportCtr(ndr, "ctr", r->in.ctr);
+		ndr->depth--;
 		ndr_print_uint32(ndr, "max_buffer", r->in.max_buffer);
 		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
 		ndr->depth++;
-		if (r->in.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		}
+		ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
 		ndr->depth--;
 		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
 		ndr_print_struct(ndr, "out", "wkssvc_NetWkstaTransportEnum");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
+		ndr_print_ptr(ndr, "level", r->out.level);
 		ndr->depth++;
-		ndr_print_wkssvc_NetWkstaTransportInfo(ndr, "info", r->out.info);
+		ndr_print_uint32(ndr, "level", *r->out.level);
 		ndr->depth--;
-		ndr_print_ptr(ndr, "total_entries", r->out.total_entries);
+		ndr_print_ptr(ndr, "ctr", r->out.ctr);
 		ndr->depth++;
-		ndr_print_uint32(ndr, "total_entries", *r->out.total_entries);
+		ndr_print_set_switch_value(ndr, r->out.ctr, *r->out.level);
+		ndr_print_wkssvc_NetWkstaTransportCtr(ndr, "ctr", r->out.ctr);
 		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
+		ndr_print_ptr(ndr, "totalentries", r->out.totalentries);
 		ndr->depth++;
-		if (r->out.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
+		if (r->out.totalentries) {
+			ndr_print_uint32(ndr, "totalentries", *r->out.totalentries);
 		}
 		ndr->depth--;
+		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
+		ndr->depth++;
+		ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
+		ndr->depth--;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
 	}
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrWkstaTransportAdd(struct ndr_push *ndr, int flags, const struct wkssvc_NetrWkstaTransportAdd *r)
+NTSTATUS ndr_push_WKSSVC_NETRWKSTATRANSPORTADD(struct ndr_push *ndr, int flags, const struct WKSSVC_NETRWKSTATRANSPORTADD *r)
 {
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.info0 == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_wkssvc_NetWkstaTransportInfo0(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info0));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.parm_err));
-		if (r->in.parm_err) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.parm_err));
-		}
 	}
 	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.parm_err));
-		if (r->out.parm_err) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.parm_err));
-		}
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrWkstaTransportAdd(struct ndr_pull *ndr, int flags, struct wkssvc_NetrWkstaTransportAdd *r)
+NTSTATUS ndr_pull_WKSSVC_NETRWKSTATRANSPORTADD(struct ndr_pull *ndr, int flags, struct WKSSVC_NETRWKSTATRANSPORTADD *r)
 {
-	uint32_t _ptr_server_name;
-	uint32_t _ptr_parm_err;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_info0_0;
-	TALLOC_CTX *_mem_save_parm_err_0;
 	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info0);
-		}
-		_mem_save_info0_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_wkssvc_NetWkstaTransportInfo0(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info0));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info0_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_parm_err));
-		if (_ptr_parm_err) {
-			NDR_PULL_ALLOC(ndr, r->in.parm_err);
-		} else {
-			r->in.parm_err = NULL;
-		}
-		if (r->in.parm_err) {
-			_mem_save_parm_err_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.parm_err, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.parm_err));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_parm_err_0, 0);
-		}
 	}
 	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_parm_err));
-		if (_ptr_parm_err) {
-			NDR_PULL_ALLOC(ndr, r->out.parm_err);
-		} else {
-			r->out.parm_err = NULL;
-		}
-		if (r->out.parm_err) {
-			_mem_save_parm_err_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.parm_err, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.parm_err));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_parm_err_0, 0);
-		}
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrWkstaTransportAdd(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrWkstaTransportAdd *r)
+_PUBLIC_ void ndr_print_WKSSVC_NETRWKSTATRANSPORTADD(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRWKSTATRANSPORTADD *r)
 {
-	ndr_print_struct(ndr, name, "wkssvc_NetrWkstaTransportAdd");
+	ndr_print_struct(ndr, name, "WKSSVC_NETRWKSTATRANSPORTADD");
 	ndr->depth++;
 	if (flags & NDR_SET_VALUES) {
 		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
 	}
 	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "wkssvc_NetrWkstaTransportAdd");
+		ndr_print_struct(ndr, "in", "WKSSVC_NETRWKSTATRANSPORTADD");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
 		ndr->depth--;
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "info0", r->in.info0);
-		ndr->depth++;
-		ndr_print_wkssvc_NetWkstaTransportInfo0(ndr, "info0", r->in.info0);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "parm_err", r->in.parm_err);
-		ndr->depth++;
-		if (r->in.parm_err) {
-			ndr_print_uint32(ndr, "parm_err", *r->in.parm_err);
-		}
-		ndr->depth--;
-		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "wkssvc_NetrWkstaTransportAdd");
+		ndr_print_struct(ndr, "out", "WKSSVC_NETRWKSTATRANSPORTADD");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "parm_err", r->out.parm_err);
-		ndr->depth++;
-		if (r->out.parm_err) {
-			ndr_print_uint32(ndr, "parm_err", *r->out.parm_err);
-		}
-		ndr->depth--;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
 	}
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrWkstaTransportDel(struct ndr_push *ndr, int flags, const struct wkssvc_NetrWkstaTransportDel *r)
+NTSTATUS ndr_push_WKSSVC_NETRWKSTATRANSPORTDEL(struct ndr_push *ndr, int flags, const struct WKSSVC_NETRWKSTATRANSPORTDEL *r)
 {
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.transport_name));
-		if (r->in.transport_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.transport_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.transport_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.transport_name, ndr_charset_length(r->in.transport_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown3));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrWkstaTransportDel(struct ndr_pull *ndr, int flags, struct wkssvc_NetrWkstaTransportDel *r)
+NTSTATUS ndr_pull_WKSSVC_NETRWKSTATRANSPORTDEL(struct ndr_pull *ndr, int flags, struct WKSSVC_NETRWKSTATRANSPORTDEL *r)
 {
-	uint32_t _ptr_server_name;
-	uint32_t _ptr_transport_name;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_transport_name_0;
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_transport_name));
-		if (_ptr_transport_name) {
-			NDR_PULL_ALLOC(ndr, r->in.transport_name);
-		} else {
-			r->in.transport_name = NULL;
-		}
-		if (r->in.transport_name) {
-			_mem_save_transport_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.transport_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.transport_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.transport_name));
-			if (ndr_get_array_length(ndr, &r->in.transport_name) > ndr_get_array_size(ndr, &r->in.transport_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.transport_name), ndr_get_array_length(ndr, &r->in.transport_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.transport_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.transport_name, ndr_get_array_length(ndr, &r->in.transport_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_transport_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown3));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrWkstaTransportDel(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrWkstaTransportDel *r)
+_PUBLIC_ void ndr_print_WKSSVC_NETRWKSTATRANSPORTDEL(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRWKSTATRANSPORTDEL *r)
 {
-	ndr_print_struct(ndr, name, "wkssvc_NetrWkstaTransportDel");
+	ndr_print_struct(ndr, name, "WKSSVC_NETRWKSTATRANSPORTDEL");
 	ndr->depth++;
 	if (flags & NDR_SET_VALUES) {
 		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
 	}
 	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "wkssvc_NetrWkstaTransportDel");
+		ndr_print_struct(ndr, "in", "WKSSVC_NETRWKSTATRANSPORTDEL");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
 		ndr->depth--;
-		ndr_print_ptr(ndr, "transport_name", r->in.transport_name);
-		ndr->depth++;
-		if (r->in.transport_name) {
-			ndr_print_string(ndr, "transport_name", r->in.transport_name);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "unknown3", r->in.unknown3);
-		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "wkssvc_NetrWkstaTransportDel");
+		ndr_print_struct(ndr, "out", "WKSSVC_NETRWKSTATRANSPORTDEL");
 		ndr->depth++;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
@@ -6749,356 +2945,122 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrUseAdd(struct ndr_push *ndr, int flags, const struct wkssvc_NetrUseAdd *r)
+NTSTATUS ndr_push_WKSSVC_NETRUSEADD(struct ndr_push *ndr, int flags, const struct WKSSVC_NETRUSEADD *r)
 {
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
-		if (r->in.ctr == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->in.ctr, r->in.level));
-		NDR_CHECK(ndr_push_wkssvc_NetrUseGetInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.ctr));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.parm_err));
-		if (r->in.parm_err) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.parm_err));
-		}
 	}
 	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.parm_err));
-		if (r->out.parm_err) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.parm_err));
-		}
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrUseAdd(struct ndr_pull *ndr, int flags, struct wkssvc_NetrUseAdd *r)
+NTSTATUS ndr_pull_WKSSVC_NETRUSEADD(struct ndr_pull *ndr, int flags, struct WKSSVC_NETRUSEADD *r)
 {
-	uint32_t _ptr_server_name;
-	uint32_t _ptr_parm_err;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_ctr_0;
-	TALLOC_CTX *_mem_save_parm_err_0;
 	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.ctr);
-		}
-		_mem_save_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.ctr, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->in.ctr, r->in.level));
-		NDR_CHECK(ndr_pull_wkssvc_NetrUseGetInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.ctr));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_parm_err));
-		if (_ptr_parm_err) {
-			NDR_PULL_ALLOC(ndr, r->in.parm_err);
-		} else {
-			r->in.parm_err = NULL;
-		}
-		if (r->in.parm_err) {
-			_mem_save_parm_err_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.parm_err, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.parm_err));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_parm_err_0, 0);
-		}
 	}
 	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_parm_err));
-		if (_ptr_parm_err) {
-			NDR_PULL_ALLOC(ndr, r->out.parm_err);
-		} else {
-			r->out.parm_err = NULL;
-		}
-		if (r->out.parm_err) {
-			_mem_save_parm_err_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.parm_err, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.parm_err));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_parm_err_0, 0);
-		}
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrUseAdd(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrUseAdd *r)
+_PUBLIC_ void ndr_print_WKSSVC_NETRUSEADD(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRUSEADD *r)
 {
-	ndr_print_struct(ndr, name, "wkssvc_NetrUseAdd");
+	ndr_print_struct(ndr, name, "WKSSVC_NETRUSEADD");
 	ndr->depth++;
 	if (flags & NDR_SET_VALUES) {
 		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
 	}
 	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "wkssvc_NetrUseAdd");
+		ndr_print_struct(ndr, "in", "WKSSVC_NETRUSEADD");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
 		ndr->depth--;
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr_print_ptr(ndr, "ctr", r->in.ctr);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->in.ctr, r->in.level);
-		ndr_print_wkssvc_NetrUseGetInfoCtr(ndr, "ctr", r->in.ctr);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "parm_err", r->in.parm_err);
-		ndr->depth++;
-		if (r->in.parm_err) {
-			ndr_print_uint32(ndr, "parm_err", *r->in.parm_err);
-		}
-		ndr->depth--;
-		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "wkssvc_NetrUseAdd");
+		ndr_print_struct(ndr, "out", "WKSSVC_NETRUSEADD");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "parm_err", r->out.parm_err);
-		ndr->depth++;
-		if (r->out.parm_err) {
-			ndr_print_uint32(ndr, "parm_err", *r->out.parm_err);
-		}
-		ndr->depth--;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
 	}
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrUseGetInfo(struct ndr_push *ndr, int flags, const struct wkssvc_NetrUseGetInfo *r)
+NTSTATUS ndr_push_WKSSVC_NETRUSEGETINFO(struct ndr_push *ndr, int flags, const struct WKSSVC_NETRUSEGETINFO *r)
 {
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.use_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.use_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.use_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.use_name, ndr_charset_length(r->in.use_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.level));
 	}
 	if (flags & NDR_OUT) {
-		if (r->out.ctr == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.ctr, r->in.level));
-		NDR_CHECK(ndr_push_wkssvc_NetrUseGetInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.ctr));
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrUseGetInfo(struct ndr_pull *ndr, int flags, struct wkssvc_NetrUseGetInfo *r)
+NTSTATUS ndr_pull_WKSSVC_NETRUSEGETINFO(struct ndr_pull *ndr, int flags, struct WKSSVC_NETRUSEGETINFO *r)
 {
-	uint32_t _ptr_server_name;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_ctr_0;
 	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.use_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.use_name));
-		if (ndr_get_array_length(ndr, &r->in.use_name) > ndr_get_array_size(ndr, &r->in.use_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.use_name), ndr_get_array_length(ndr, &r->in.use_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.use_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.use_name, ndr_get_array_length(ndr, &r->in.use_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.level));
-		NDR_PULL_ALLOC(ndr, r->out.ctr);
-		ZERO_STRUCTP(r->out.ctr);
 	}
 	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.ctr);
-		}
-		_mem_save_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.ctr, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.ctr, r->in.level));
-		NDR_CHECK(ndr_pull_wkssvc_NetrUseGetInfoCtr(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.ctr));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_0, LIBNDR_FLAG_REF_ALLOC);
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrUseGetInfo(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrUseGetInfo *r)
+_PUBLIC_ void ndr_print_WKSSVC_NETRUSEGETINFO(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRUSEGETINFO *r)
 {
-	ndr_print_struct(ndr, name, "wkssvc_NetrUseGetInfo");
+	ndr_print_struct(ndr, name, "WKSSVC_NETRUSEGETINFO");
 	ndr->depth++;
 	if (flags & NDR_SET_VALUES) {
 		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
 	}
 	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "wkssvc_NetrUseGetInfo");
+		ndr_print_struct(ndr, "in", "WKSSVC_NETRUSEGETINFO");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
 		ndr->depth--;
-		ndr_print_ptr(ndr, "use_name", r->in.use_name);
-		ndr->depth++;
-		ndr_print_string(ndr, "use_name", r->in.use_name);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "level", r->in.level);
-		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "wkssvc_NetrUseGetInfo");
+		ndr_print_struct(ndr, "out", "WKSSVC_NETRUSEGETINFO");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "ctr", r->out.ctr);
-		ndr->depth++;
-		ndr_print_set_switch_value(ndr, r->out.ctr, r->in.level);
-		ndr_print_wkssvc_NetrUseGetInfoCtr(ndr, "ctr", r->out.ctr);
-		ndr->depth--;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
 	}
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrUseDel(struct ndr_push *ndr, int flags, const struct wkssvc_NetrUseDel *r)
+NTSTATUS ndr_push_WKSSVC_NETRUSEDEL(struct ndr_push *ndr, int flags, const struct WKSSVC_NETRUSEDEL *r)
 {
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.use_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.use_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.use_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.use_name, ndr_charset_length(r->in.use_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.force_cond));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrUseDel(struct ndr_pull *ndr, int flags, struct wkssvc_NetrUseDel *r)
+NTSTATUS ndr_pull_WKSSVC_NETRUSEDEL(struct ndr_pull *ndr, int flags, struct WKSSVC_NETRUSEDEL *r)
 {
-	uint32_t _ptr_server_name;
-	TALLOC_CTX *_mem_save_server_name_0;
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.use_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.use_name));
-		if (ndr_get_array_length(ndr, &r->in.use_name) > ndr_get_array_size(ndr, &r->in.use_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.use_name), ndr_get_array_length(ndr, &r->in.use_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.use_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.use_name, ndr_get_array_length(ndr, &r->in.use_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.force_cond));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrUseDel(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrUseDel *r)
+_PUBLIC_ void ndr_print_WKSSVC_NETRUSEDEL(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRUSEDEL *r)
 {
-	ndr_print_struct(ndr, name, "wkssvc_NetrUseDel");
+	ndr_print_struct(ndr, name, "WKSSVC_NETRUSEDEL");
 	ndr->depth++;
 	if (flags & NDR_SET_VALUES) {
 		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
 	}
 	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "wkssvc_NetrUseDel");
+		ndr_print_struct(ndr, "in", "WKSSVC_NETRUSEDEL");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
 		ndr->depth--;
-		ndr_print_ptr(ndr, "use_name", r->in.use_name);
-		ndr->depth++;
-		ndr_print_string(ndr, "use_name", r->in.use_name);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "force_cond", r->in.force_cond);
-		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "wkssvc_NetrUseDel");
+		ndr_print_struct(ndr, "out", "WKSSVC_NETRUSEDEL");
 		ndr->depth++;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
@@ -7106,320 +3068,81 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrUseEnum(struct ndr_push *ndr, int flags, const struct wkssvc_NetrUseEnum *r)
+NTSTATUS ndr_push_WKSSVC_NETRUSEENUM(struct ndr_push *ndr, int flags, const struct WKSSVC_NETRUSEENUM *r)
 {
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_wkssvc_NetrUseEnumInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.prefmaxlen));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.resume_handle));
-		if (r->in.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.resume_handle));
-		}
 	}
 	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_wkssvc_NetrUseEnumInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		if (r->out.entries_read == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.entries_read));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.resume_handle));
-		if (r->out.resume_handle) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		}
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrUseEnum(struct ndr_pull *ndr, int flags, struct wkssvc_NetrUseEnum *r)
+NTSTATUS ndr_pull_WKSSVC_NETRUSEENUM(struct ndr_pull *ndr, int flags, struct WKSSVC_NETRUSEENUM *r)
 {
-	uint32_t _ptr_server_name;
-	uint32_t _ptr_resume_handle;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_entries_read_0;
-	TALLOC_CTX *_mem_save_resume_handle_0;
 	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_wkssvc_NetrUseEnumInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.prefmaxlen));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->in.resume_handle);
-		} else {
-			r->in.resume_handle = NULL;
-		}
-		if (r->in.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		*r->out.info = *r->in.info;
-		NDR_PULL_ALLOC(ndr, r->out.entries_read);
-		ZERO_STRUCTP(r->out.entries_read);
 	}
 	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_wkssvc_NetrUseEnumInfo(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.info));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.entries_read);
-		}
-		_mem_save_entries_read_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.entries_read, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.entries_read));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_entries_read_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_resume_handle));
-		if (_ptr_resume_handle) {
-			NDR_PULL_ALLOC(ndr, r->out.resume_handle);
-		} else {
-			r->out.resume_handle = NULL;
-		}
-		if (r->out.resume_handle) {
-			_mem_save_resume_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, 0);
-			NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, 0);
-		}
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrUseEnum(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrUseEnum *r)
+_PUBLIC_ void ndr_print_WKSSVC_NETRUSEENUM(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRUSEENUM *r)
 {
-	ndr_print_struct(ndr, name, "wkssvc_NetrUseEnum");
+	ndr_print_struct(ndr, name, "WKSSVC_NETRUSEENUM");
 	ndr->depth++;
 	if (flags & NDR_SET_VALUES) {
 		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
 	}
 	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "wkssvc_NetrUseEnum");
+		ndr_print_struct(ndr, "in", "WKSSVC_NETRUSEENUM");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
 		ndr->depth--;
-		ndr_print_ptr(ndr, "info", r->in.info);
-		ndr->depth++;
-		ndr_print_wkssvc_NetrUseEnumInfo(ndr, "info", r->in.info);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "prefmaxlen", r->in.prefmaxlen);
-		ndr_print_ptr(ndr, "resume_handle", r->in.resume_handle);
-		ndr->depth++;
-		if (r->in.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->in.resume_handle);
-		}
-		ndr->depth--;
-		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "wkssvc_NetrUseEnum");
+		ndr_print_struct(ndr, "out", "WKSSVC_NETRUSEENUM");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_wkssvc_NetrUseEnumInfo(ndr, "info", r->out.info);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "entries_read", r->out.entries_read);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "entries_read", *r->out.entries_read);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "resume_handle", r->out.resume_handle);
-		ndr->depth++;
-		if (r->out.resume_handle) {
-			ndr_print_uint32(ndr, "resume_handle", *r->out.resume_handle);
-		}
-		ndr->depth--;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
 	}
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrMessageBufferSend(struct ndr_push *ndr, int flags, const struct wkssvc_NetrMessageBufferSend *r)
+NTSTATUS ndr_push_WKSSVC_NETRMESSAGEBUFFERSEND(struct ndr_push *ndr, int flags, const struct WKSSVC_NETRMESSAGEBUFFERSEND *r)
 {
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.message_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.message_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.message_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.message_name, ndr_charset_length(r->in.message_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.message_sender_name));
-		if (r->in.message_sender_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.message_sender_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.message_sender_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.message_sender_name, ndr_charset_length(r->in.message_sender_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.message_buffer == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.message_size));
-		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->in.message_buffer, r->in.message_size));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.message_size));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrMessageBufferSend(struct ndr_pull *ndr, int flags, struct wkssvc_NetrMessageBufferSend *r)
+NTSTATUS ndr_pull_WKSSVC_NETRMESSAGEBUFFERSEND(struct ndr_pull *ndr, int flags, struct WKSSVC_NETRMESSAGEBUFFERSEND *r)
 {
-	uint32_t _ptr_server_name;
-	uint32_t _ptr_message_sender_name;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_message_sender_name_0;
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.message_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.message_name));
-		if (ndr_get_array_length(ndr, &r->in.message_name) > ndr_get_array_size(ndr, &r->in.message_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.message_name), ndr_get_array_length(ndr, &r->in.message_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.message_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.message_name, ndr_get_array_length(ndr, &r->in.message_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_message_sender_name));
-		if (_ptr_message_sender_name) {
-			NDR_PULL_ALLOC(ndr, r->in.message_sender_name);
-		} else {
-			r->in.message_sender_name = NULL;
-		}
-		if (r->in.message_sender_name) {
-			_mem_save_message_sender_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.message_sender_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.message_sender_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.message_sender_name));
-			if (ndr_get_array_length(ndr, &r->in.message_sender_name) > ndr_get_array_size(ndr, &r->in.message_sender_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.message_sender_name), ndr_get_array_length(ndr, &r->in.message_sender_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.message_sender_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.message_sender_name, ndr_get_array_length(ndr, &r->in.message_sender_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_message_sender_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.message_buffer));
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC_N(ndr, r->in.message_buffer, ndr_get_array_size(ndr, &r->in.message_buffer));
-		}
-		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->in.message_buffer, ndr_get_array_size(ndr, &r->in.message_buffer)));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.message_size));
-		if (r->in.message_buffer) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.message_buffer, r->in.message_size));
-		}
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrMessageBufferSend(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrMessageBufferSend *r)
+_PUBLIC_ void ndr_print_WKSSVC_NETRMESSAGEBUFFERSEND(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRMESSAGEBUFFERSEND *r)
 {
-	ndr_print_struct(ndr, name, "wkssvc_NetrMessageBufferSend");
+	ndr_print_struct(ndr, name, "WKSSVC_NETRMESSAGEBUFFERSEND");
 	ndr->depth++;
 	if (flags & NDR_SET_VALUES) {
 		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
 	}
 	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "wkssvc_NetrMessageBufferSend");
+		ndr_print_struct(ndr, "in", "WKSSVC_NETRMESSAGEBUFFERSEND");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
 		ndr->depth--;
-		ndr_print_ptr(ndr, "message_name", r->in.message_name);
-		ndr->depth++;
-		ndr_print_string(ndr, "message_name", r->in.message_name);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "message_sender_name", r->in.message_sender_name);
-		ndr->depth++;
-		if (r->in.message_sender_name) {
-			ndr_print_string(ndr, "message_sender_name", r->in.message_sender_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "message_buffer", r->in.message_buffer);
-		ndr->depth++;
-		ndr_print_array_uint8(ndr, "message_buffer", r->in.message_buffer, r->in.message_size);
-		ndr->depth--;
-		ndr_print_uint32(ndr, "message_size", r->in.message_size);
-		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "wkssvc_NetrMessageBufferSend");
+		ndr_print_struct(ndr, "out", "WKSSVC_NETRMESSAGEBUFFERSEND");
 		ndr->depth++;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
@@ -7427,212 +3150,81 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrWorkstationStatisticsGet(struct ndr_push *ndr, int flags, const struct wkssvc_NetrWorkstationStatisticsGet *r)
+NTSTATUS ndr_push_WKSSVC_NETRWORKSTATIONSTATISTICSGET(struct ndr_push *ndr, int flags, const struct WKSSVC_NETRWORKSTATIONSTATISTICSGET *r)
 {
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.unknown2));
-		if (r->in.unknown2) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.unknown2, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.unknown2, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.unknown2, ndr_charset_length(r->in.unknown2, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown3));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.unknown4));
 	}
 	if (flags & NDR_OUT) {
-		if (r->out.info == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.info));
-		if (*r->out.info) {
-			NDR_CHECK(ndr_push_wkssvc_NetrWorkstationStatistics(ndr, NDR_SCALARS, *r->out.info));
-		}
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrWorkstationStatisticsGet(struct ndr_pull *ndr, int flags, struct wkssvc_NetrWorkstationStatisticsGet *r)
+NTSTATUS ndr_pull_WKSSVC_NETRWORKSTATIONSTATISTICSGET(struct ndr_pull *ndr, int flags, struct WKSSVC_NETRWORKSTATIONSTATISTICSGET *r)
 {
-	uint32_t _ptr_server_name;
-	uint32_t _ptr_unknown2;
-	uint32_t _ptr_info;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_unknown2_0;
-	TALLOC_CTX *_mem_save_info_0;
-	TALLOC_CTX *_mem_save_info_1;
 	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown2));
-		if (_ptr_unknown2) {
-			NDR_PULL_ALLOC(ndr, r->in.unknown2);
-		} else {
-			r->in.unknown2 = NULL;
-		}
-		if (r->in.unknown2) {
-			_mem_save_unknown2_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.unknown2, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.unknown2));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.unknown2));
-			if (ndr_get_array_length(ndr, &r->in.unknown2) > ndr_get_array_size(ndr, &r->in.unknown2)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.unknown2), ndr_get_array_length(ndr, &r->in.unknown2));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.unknown2), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.unknown2, ndr_get_array_length(ndr, &r->in.unknown2), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown2_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown3));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.unknown4));
-		NDR_PULL_ALLOC(ndr, r->out.info);
-		ZERO_STRUCTP(r->out.info);
 	}
 	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.info);
-		}
-		_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.info, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-		if (_ptr_info) {
-			NDR_PULL_ALLOC(ndr, *r->out.info);
-		} else {
-			*r->out.info = NULL;
-		}
-		if (*r->out.info) {
-			_mem_save_info_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.info, 0);
-			NDR_CHECK(ndr_pull_wkssvc_NetrWorkstationStatistics(ndr, NDR_SCALARS, *r->out.info));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, LIBNDR_FLAG_REF_ALLOC);
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrWorkstationStatisticsGet(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrWorkstationStatisticsGet *r)
+_PUBLIC_ void ndr_print_WKSSVC_NETRWORKSTATIONSTATISTICSGET(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRWORKSTATIONSTATISTICSGET *r)
 {
-	ndr_print_struct(ndr, name, "wkssvc_NetrWorkstationStatisticsGet");
+	ndr_print_struct(ndr, name, "WKSSVC_NETRWORKSTATIONSTATISTICSGET");
 	ndr->depth++;
 	if (flags & NDR_SET_VALUES) {
 		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
 	}
 	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "wkssvc_NetrWorkstationStatisticsGet");
+		ndr_print_struct(ndr, "in", "WKSSVC_NETRWORKSTATIONSTATISTICSGET");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
 		ndr->depth--;
-		ndr_print_ptr(ndr, "unknown2", r->in.unknown2);
-		ndr->depth++;
-		if (r->in.unknown2) {
-			ndr_print_string(ndr, "unknown2", r->in.unknown2);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "unknown3", r->in.unknown3);
-		ndr_print_uint32(ndr, "unknown4", r->in.unknown4);
-		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "wkssvc_NetrWorkstationStatisticsGet");
+		ndr_print_struct(ndr, "out", "WKSSVC_NETRWORKSTATIONSTATISTICSGET");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "info", r->out.info);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "info", *r->out.info);
-		ndr->depth++;
-		if (*r->out.info) {
-			ndr_print_wkssvc_NetrWorkstationStatistics(ndr, "info", *r->out.info);
-		}
-		ndr->depth--;
-		ndr->depth--;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
 	}
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrLogonDomainNameAdd(struct ndr_push *ndr, int flags, const struct wkssvc_NetrLogonDomainNameAdd *r)
+NTSTATUS ndr_push_WKSSVC_NETRLOGONDOMAINNAMEADD(struct ndr_push *ndr, int flags, const struct WKSSVC_NETRLOGONDOMAINNAMEADD *r)
 {
 	if (flags & NDR_IN) {
-		if (r->in.domain_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.domain_name, ndr_charset_length(r->in.domain_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrLogonDomainNameAdd(struct ndr_pull *ndr, int flags, struct wkssvc_NetrLogonDomainNameAdd *r)
+NTSTATUS ndr_pull_WKSSVC_NETRLOGONDOMAINNAMEADD(struct ndr_pull *ndr, int flags, struct WKSSVC_NETRLOGONDOMAINNAMEADD *r)
 {
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.domain_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.domain_name));
-		if (ndr_get_array_length(ndr, &r->in.domain_name) > ndr_get_array_size(ndr, &r->in.domain_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.domain_name), ndr_get_array_length(ndr, &r->in.domain_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.domain_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.domain_name, ndr_get_array_length(ndr, &r->in.domain_name), sizeof(uint16_t), CH_UTF16));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrLogonDomainNameAdd(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrLogonDomainNameAdd *r)
+_PUBLIC_ void ndr_print_WKSSVC_NETRLOGONDOMAINNAMEADD(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRLOGONDOMAINNAMEADD *r)
 {
-	ndr_print_struct(ndr, name, "wkssvc_NetrLogonDomainNameAdd");
+	ndr_print_struct(ndr, name, "WKSSVC_NETRLOGONDOMAINNAMEADD");
 	ndr->depth++;
 	if (flags & NDR_SET_VALUES) {
 		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
 	}
 	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "wkssvc_NetrLogonDomainNameAdd");
+		ndr_print_struct(ndr, "in", "WKSSVC_NETRLOGONDOMAINNAMEADD");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_name", r->in.domain_name);
-		ndr->depth++;
-		ndr_print_string(ndr, "domain_name", r->in.domain_name);
 		ndr->depth--;
-		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "wkssvc_NetrLogonDomainNameAdd");
+		ndr_print_struct(ndr, "out", "WKSSVC_NETRLOGONDOMAINNAMEADD");
 		ndr->depth++;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
@@ -7640,58 +3232,40 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrLogonDomainNameDel(struct ndr_push *ndr, int flags, const struct wkssvc_NetrLogonDomainNameDel *r)
+NTSTATUS ndr_push_WKSSVC_NETRLOGONDOMAINNAMEDEL(struct ndr_push *ndr, int flags, const struct WKSSVC_NETRLOGONDOMAINNAMEDEL *r)
 {
 	if (flags & NDR_IN) {
-		if (r->in.domain_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.domain_name, ndr_charset_length(r->in.domain_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrLogonDomainNameDel(struct ndr_pull *ndr, int flags, struct wkssvc_NetrLogonDomainNameDel *r)
+NTSTATUS ndr_pull_WKSSVC_NETRLOGONDOMAINNAMEDEL(struct ndr_pull *ndr, int flags, struct WKSSVC_NETRLOGONDOMAINNAMEDEL *r)
 {
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.domain_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.domain_name));
-		if (ndr_get_array_length(ndr, &r->in.domain_name) > ndr_get_array_size(ndr, &r->in.domain_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.domain_name), ndr_get_array_length(ndr, &r->in.domain_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.domain_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.domain_name, ndr_get_array_length(ndr, &r->in.domain_name), sizeof(uint16_t), CH_UTF16));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrLogonDomainNameDel(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrLogonDomainNameDel *r)
+_PUBLIC_ void ndr_print_WKSSVC_NETRLOGONDOMAINNAMEDEL(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRLOGONDOMAINNAMEDEL *r)
 {
-	ndr_print_struct(ndr, name, "wkssvc_NetrLogonDomainNameDel");
+	ndr_print_struct(ndr, name, "WKSSVC_NETRLOGONDOMAINNAMEDEL");
 	ndr->depth++;
 	if (flags & NDR_SET_VALUES) {
 		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
 	}
 	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "wkssvc_NetrLogonDomainNameDel");
+		ndr_print_struct(ndr, "in", "WKSSVC_NETRLOGONDOMAINNAMEDEL");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "domain_name", r->in.domain_name);
-		ndr->depth++;
-		ndr_print_string(ndr, "domain_name", r->in.domain_name);
 		ndr->depth--;
-		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "wkssvc_NetrLogonDomainNameDel");
+		ndr_print_struct(ndr, "out", "WKSSVC_NETRLOGONDOMAINNAMEDEL");
 		ndr->depth++;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
@@ -7699,193 +3273,40 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrJoinDomain(struct ndr_push *ndr, int flags, const struct wkssvc_NetrJoinDomain *r)
+NTSTATUS ndr_push_WKSSVC_NETRJOINDOMAIN(struct ndr_push *ndr, int flags, const struct WKSSVC_NETRJOINDOMAIN *r)
 {
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.domain_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.domain_name, ndr_charset_length(r->in.domain_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.account_ou));
-		if (r->in.account_ou) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.account_ou, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.account_ou, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.account_ou, ndr_charset_length(r->in.account_ou, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.Account));
-		if (r->in.Account) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.Account, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.Account, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.Account, ndr_charset_length(r->in.Account, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.password));
-		if (r->in.password) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.password, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.password, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.password, ndr_charset_length(r->in.password, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_wkssvc_joinflags(ndr, NDR_SCALARS, r->in.join_flags));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrJoinDomain(struct ndr_pull *ndr, int flags, struct wkssvc_NetrJoinDomain *r)
+NTSTATUS ndr_pull_WKSSVC_NETRJOINDOMAIN(struct ndr_pull *ndr, int flags, struct WKSSVC_NETRJOINDOMAIN *r)
 {
-	uint32_t _ptr_server_name;
-	uint32_t _ptr_account_ou;
-	uint32_t _ptr_Account;
-	uint32_t _ptr_password;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_account_ou_0;
-	TALLOC_CTX *_mem_save_Account_0;
-	TALLOC_CTX *_mem_save_password_0;
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.domain_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.domain_name));
-		if (ndr_get_array_length(ndr, &r->in.domain_name) > ndr_get_array_size(ndr, &r->in.domain_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.domain_name), ndr_get_array_length(ndr, &r->in.domain_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.domain_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.domain_name, ndr_get_array_length(ndr, &r->in.domain_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_account_ou));
-		if (_ptr_account_ou) {
-			NDR_PULL_ALLOC(ndr, r->in.account_ou);
-		} else {
-			r->in.account_ou = NULL;
-		}
-		if (r->in.account_ou) {
-			_mem_save_account_ou_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.account_ou, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.account_ou));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.account_ou));
-			if (ndr_get_array_length(ndr, &r->in.account_ou) > ndr_get_array_size(ndr, &r->in.account_ou)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.account_ou), ndr_get_array_length(ndr, &r->in.account_ou));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.account_ou), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.account_ou, ndr_get_array_length(ndr, &r->in.account_ou), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_account_ou_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_Account));
-		if (_ptr_Account) {
-			NDR_PULL_ALLOC(ndr, r->in.Account);
-		} else {
-			r->in.Account = NULL;
-		}
-		if (r->in.Account) {
-			_mem_save_Account_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.Account, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.Account));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.Account));
-			if (ndr_get_array_length(ndr, &r->in.Account) > ndr_get_array_size(ndr, &r->in.Account)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.Account), ndr_get_array_length(ndr, &r->in.Account));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.Account), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.Account, ndr_get_array_length(ndr, &r->in.Account), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_Account_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_password));
-		if (_ptr_password) {
-			NDR_PULL_ALLOC(ndr, r->in.password);
-		} else {
-			r->in.password = NULL;
-		}
-		if (r->in.password) {
-			_mem_save_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.password, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.password));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.password));
-			if (ndr_get_array_length(ndr, &r->in.password) > ndr_get_array_size(ndr, &r->in.password)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.password), ndr_get_array_length(ndr, &r->in.password));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.password), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.password, ndr_get_array_length(ndr, &r->in.password), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_password_0, 0);
-		}
-		NDR_CHECK(ndr_pull_wkssvc_joinflags(ndr, NDR_SCALARS, &r->in.join_flags));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrJoinDomain(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrJoinDomain *r)
+_PUBLIC_ void ndr_print_WKSSVC_NETRJOINDOMAIN(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRJOINDOMAIN *r)
 {
-	ndr_print_struct(ndr, name, "wkssvc_NetrJoinDomain");
+	ndr_print_struct(ndr, name, "WKSSVC_NETRJOINDOMAIN");
 	ndr->depth++;
 	if (flags & NDR_SET_VALUES) {
 		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
 	}
 	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "wkssvc_NetrJoinDomain");
+		ndr_print_struct(ndr, "in", "WKSSVC_NETRJOINDOMAIN");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
 		ndr->depth--;
-		ndr_print_ptr(ndr, "domain_name", r->in.domain_name);
-		ndr->depth++;
-		ndr_print_string(ndr, "domain_name", r->in.domain_name);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "account_ou", r->in.account_ou);
-		ndr->depth++;
-		if (r->in.account_ou) {
-			ndr_print_string(ndr, "account_ou", r->in.account_ou);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "Account", r->in.Account);
-		ndr->depth++;
-		if (r->in.Account) {
-			ndr_print_string(ndr, "Account", r->in.Account);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "password", r->in.password);
-		ndr->depth++;
-		if (r->in.password) {
-			ndr_print_string(ndr, "password", r->in.password);
-		}
-		ndr->depth--;
-		ndr_print_wkssvc_joinflags(ndr, "join_flags", r->in.join_flags);
-		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "wkssvc_NetrJoinDomain");
+		ndr_print_struct(ndr, "out", "WKSSVC_NETRJOINDOMAIN");
 		ndr->depth++;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
@@ -7893,142 +3314,40 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrUnjoinDomain(struct ndr_push *ndr, int flags, const struct wkssvc_NetrUnjoinDomain *r)
+NTSTATUS ndr_push_WKSSVC_NETRUNJOINDOMAIN(struct ndr_push *ndr, int flags, const struct WKSSVC_NETRUNJOINDOMAIN *r)
 {
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.Account));
-		if (r->in.Account) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.Account, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.Account, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.Account, ndr_charset_length(r->in.Account, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.password));
-		if (r->in.password) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.password, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.password, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.password, ndr_charset_length(r->in.password, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_wkssvc_joinflags(ndr, NDR_SCALARS, r->in.unjoin_flags));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrUnjoinDomain(struct ndr_pull *ndr, int flags, struct wkssvc_NetrUnjoinDomain *r)
+NTSTATUS ndr_pull_WKSSVC_NETRUNJOINDOMAIN(struct ndr_pull *ndr, int flags, struct WKSSVC_NETRUNJOINDOMAIN *r)
 {
-	uint32_t _ptr_server_name;
-	uint32_t _ptr_Account;
-	uint32_t _ptr_password;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_Account_0;
-	TALLOC_CTX *_mem_save_password_0;
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_Account));
-		if (_ptr_Account) {
-			NDR_PULL_ALLOC(ndr, r->in.Account);
-		} else {
-			r->in.Account = NULL;
-		}
-		if (r->in.Account) {
-			_mem_save_Account_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.Account, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.Account));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.Account));
-			if (ndr_get_array_length(ndr, &r->in.Account) > ndr_get_array_size(ndr, &r->in.Account)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.Account), ndr_get_array_length(ndr, &r->in.Account));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.Account), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.Account, ndr_get_array_length(ndr, &r->in.Account), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_Account_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_password));
-		if (_ptr_password) {
-			NDR_PULL_ALLOC(ndr, r->in.password);
-		} else {
-			r->in.password = NULL;
-		}
-		if (r->in.password) {
-			_mem_save_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.password, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.password));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.password));
-			if (ndr_get_array_length(ndr, &r->in.password) > ndr_get_array_size(ndr, &r->in.password)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.password), ndr_get_array_length(ndr, &r->in.password));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.password), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.password, ndr_get_array_length(ndr, &r->in.password), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_password_0, 0);
-		}
-		NDR_CHECK(ndr_pull_wkssvc_joinflags(ndr, NDR_SCALARS, &r->in.unjoin_flags));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrUnjoinDomain(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrUnjoinDomain *r)
+_PUBLIC_ void ndr_print_WKSSVC_NETRUNJOINDOMAIN(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRUNJOINDOMAIN *r)
 {
-	ndr_print_struct(ndr, name, "wkssvc_NetrUnjoinDomain");
+	ndr_print_struct(ndr, name, "WKSSVC_NETRUNJOINDOMAIN");
 	ndr->depth++;
 	if (flags & NDR_SET_VALUES) {
 		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
 	}
 	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "wkssvc_NetrUnjoinDomain");
+		ndr_print_struct(ndr, "in", "WKSSVC_NETRUNJOINDOMAIN");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
 		ndr->depth--;
-		ndr_print_ptr(ndr, "Account", r->in.Account);
-		ndr->depth++;
-		if (r->in.Account) {
-			ndr_print_string(ndr, "Account", r->in.Account);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "password", r->in.password);
-		ndr->depth++;
-		if (r->in.password) {
-			ndr_print_string(ndr, "password", r->in.password);
-		}
-		ndr->depth--;
-		ndr_print_wkssvc_joinflags(ndr, "unjoin_flags", r->in.unjoin_flags);
-		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "wkssvc_NetrUnjoinDomain");
+		ndr_print_struct(ndr, "out", "WKSSVC_NETRUNJOINDOMAIN");
 		ndr->depth++;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
@@ -8036,175 +3355,40 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrRenameMachineInDomain(struct ndr_push *ndr, int flags, const struct wkssvc_NetrRenameMachineInDomain *r)
+NTSTATUS ndr_push_WKSSVC_NETRRENAMEMACHINEINDOMAIN(struct ndr_push *ndr, int flags, const struct WKSSVC_NETRRENAMEMACHINEINDOMAIN *r)
 {
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.NewMachineName));
-		if (r->in.NewMachineName) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.NewMachineName, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.NewMachineName, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.NewMachineName, ndr_charset_length(r->in.NewMachineName, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.Account));
-		if (r->in.Account) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.Account, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.Account, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.Account, ndr_charset_length(r->in.Account, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.password));
-		if (r->in.password) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.password, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.password, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.password, ndr_charset_length(r->in.password, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_wkssvc_renameflags(ndr, NDR_SCALARS, r->in.RenameOptions));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrRenameMachineInDomain(struct ndr_pull *ndr, int flags, struct wkssvc_NetrRenameMachineInDomain *r)
+NTSTATUS ndr_pull_WKSSVC_NETRRENAMEMACHINEINDOMAIN(struct ndr_pull *ndr, int flags, struct WKSSVC_NETRRENAMEMACHINEINDOMAIN *r)
 {
-	uint32_t _ptr_server_name;
-	uint32_t _ptr_NewMachineName;
-	uint32_t _ptr_Account;
-	uint32_t _ptr_password;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_NewMachineName_0;
-	TALLOC_CTX *_mem_save_Account_0;
-	TALLOC_CTX *_mem_save_password_0;
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_NewMachineName));
-		if (_ptr_NewMachineName) {
-			NDR_PULL_ALLOC(ndr, r->in.NewMachineName);
-		} else {
-			r->in.NewMachineName = NULL;
-		}
-		if (r->in.NewMachineName) {
-			_mem_save_NewMachineName_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.NewMachineName, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.NewMachineName));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.NewMachineName));
-			if (ndr_get_array_length(ndr, &r->in.NewMachineName) > ndr_get_array_size(ndr, &r->in.NewMachineName)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.NewMachineName), ndr_get_array_length(ndr, &r->in.NewMachineName));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.NewMachineName), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.NewMachineName, ndr_get_array_length(ndr, &r->in.NewMachineName), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_NewMachineName_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_Account));
-		if (_ptr_Account) {
-			NDR_PULL_ALLOC(ndr, r->in.Account);
-		} else {
-			r->in.Account = NULL;
-		}
-		if (r->in.Account) {
-			_mem_save_Account_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.Account, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.Account));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.Account));
-			if (ndr_get_array_length(ndr, &r->in.Account) > ndr_get_array_size(ndr, &r->in.Account)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.Account), ndr_get_array_length(ndr, &r->in.Account));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.Account), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.Account, ndr_get_array_length(ndr, &r->in.Account), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_Account_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_password));
-		if (_ptr_password) {
-			NDR_PULL_ALLOC(ndr, r->in.password);
-		} else {
-			r->in.password = NULL;
-		}
-		if (r->in.password) {
-			_mem_save_password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.password, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.password));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.password));
-			if (ndr_get_array_length(ndr, &r->in.password) > ndr_get_array_size(ndr, &r->in.password)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.password), ndr_get_array_length(ndr, &r->in.password));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.password), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.password, ndr_get_array_length(ndr, &r->in.password), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_password_0, 0);
-		}
-		NDR_CHECK(ndr_pull_wkssvc_renameflags(ndr, NDR_SCALARS, &r->in.RenameOptions));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrRenameMachineInDomain(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrRenameMachineInDomain *r)
+_PUBLIC_ void ndr_print_WKSSVC_NETRRENAMEMACHINEINDOMAIN(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRRENAMEMACHINEINDOMAIN *r)
 {
-	ndr_print_struct(ndr, name, "wkssvc_NetrRenameMachineInDomain");
+	ndr_print_struct(ndr, name, "WKSSVC_NETRRENAMEMACHINEINDOMAIN");
 	ndr->depth++;
 	if (flags & NDR_SET_VALUES) {
 		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
 	}
 	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "wkssvc_NetrRenameMachineInDomain");
+		ndr_print_struct(ndr, "in", "WKSSVC_NETRRENAMEMACHINEINDOMAIN");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
 		ndr->depth--;
-		ndr_print_ptr(ndr, "NewMachineName", r->in.NewMachineName);
-		ndr->depth++;
-		if (r->in.NewMachineName) {
-			ndr_print_string(ndr, "NewMachineName", r->in.NewMachineName);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "Account", r->in.Account);
-		ndr->depth++;
-		if (r->in.Account) {
-			ndr_print_string(ndr, "Account", r->in.Account);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "password", r->in.password);
-		ndr->depth++;
-		if (r->in.password) {
-			ndr_print_string(ndr, "password", r->in.password);
-		}
-		ndr->depth--;
-		ndr_print_wkssvc_renameflags(ndr, "RenameOptions", r->in.RenameOptions);
-		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "wkssvc_NetrRenameMachineInDomain");
+		ndr_print_struct(ndr, "out", "WKSSVC_NETRRENAMEMACHINEINDOMAIN");
 		ndr->depth++;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
@@ -8212,160 +3396,40 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrValidateName(struct ndr_push *ndr, int flags, const struct wkssvc_NetrValidateName *r)
+NTSTATUS ndr_push_WKSSVC_NETRVALIDATENAME(struct ndr_push *ndr, int flags, const struct WKSSVC_NETRVALIDATENAME *r)
 {
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.name, ndr_charset_length(r->in.name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.Account));
-		if (r->in.Account) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.Account, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.Account, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.Account, ndr_charset_length(r->in.Account, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.Password));
-		if (r->in.Password) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.Password, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.Password, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.Password, ndr_charset_length(r->in.Password, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_wkssvc_NetValidateNameType(ndr, NDR_SCALARS, r->in.name_type));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrValidateName(struct ndr_pull *ndr, int flags, struct wkssvc_NetrValidateName *r)
+NTSTATUS ndr_pull_WKSSVC_NETRVALIDATENAME(struct ndr_pull *ndr, int flags, struct WKSSVC_NETRVALIDATENAME *r)
 {
-	uint32_t _ptr_server_name;
-	uint32_t _ptr_Account;
-	uint32_t _ptr_Password;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_Account_0;
-	TALLOC_CTX *_mem_save_Password_0;
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.name));
-		if (ndr_get_array_length(ndr, &r->in.name) > ndr_get_array_size(ndr, &r->in.name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.name), ndr_get_array_length(ndr, &r->in.name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.name, ndr_get_array_length(ndr, &r->in.name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_Account));
-		if (_ptr_Account) {
-			NDR_PULL_ALLOC(ndr, r->in.Account);
-		} else {
-			r->in.Account = NULL;
-		}
-		if (r->in.Account) {
-			_mem_save_Account_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.Account, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.Account));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.Account));
-			if (ndr_get_array_length(ndr, &r->in.Account) > ndr_get_array_size(ndr, &r->in.Account)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.Account), ndr_get_array_length(ndr, &r->in.Account));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.Account), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.Account, ndr_get_array_length(ndr, &r->in.Account), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_Account_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_Password));
-		if (_ptr_Password) {
-			NDR_PULL_ALLOC(ndr, r->in.Password);
-		} else {
-			r->in.Password = NULL;
-		}
-		if (r->in.Password) {
-			_mem_save_Password_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.Password, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.Password));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.Password));
-			if (ndr_get_array_length(ndr, &r->in.Password) > ndr_get_array_size(ndr, &r->in.Password)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.Password), ndr_get_array_length(ndr, &r->in.Password));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.Password), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.Password, ndr_get_array_length(ndr, &r->in.Password), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_Password_0, 0);
-		}
-		NDR_CHECK(ndr_pull_wkssvc_NetValidateNameType(ndr, NDR_SCALARS, &r->in.name_type));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrValidateName(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrValidateName *r)
+_PUBLIC_ void ndr_print_WKSSVC_NETRVALIDATENAME(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRVALIDATENAME *r)
 {
-	ndr_print_struct(ndr, name, "wkssvc_NetrValidateName");
+	ndr_print_struct(ndr, name, "WKSSVC_NETRVALIDATENAME");
 	ndr->depth++;
 	if (flags & NDR_SET_VALUES) {
 		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
 	}
 	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "wkssvc_NetrValidateName");
+		ndr_print_struct(ndr, "in", "WKSSVC_NETRVALIDATENAME");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
 		ndr->depth--;
-		ndr_print_ptr(ndr, "name", r->in.name);
-		ndr->depth++;
-		ndr_print_string(ndr, "name", r->in.name);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "Account", r->in.Account);
-		ndr->depth++;
-		if (r->in.Account) {
-			ndr_print_string(ndr, "Account", r->in.Account);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "Password", r->in.Password);
-		ndr->depth++;
-		if (r->in.Password) {
-			ndr_print_string(ndr, "Password", r->in.Password);
-		}
-		ndr->depth--;
-		ndr_print_wkssvc_NetValidateNameType(ndr, "name_type", r->in.name_type);
-		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "wkssvc_NetrValidateName");
+		ndr_print_struct(ndr, "out", "WKSSVC_NETRVALIDATENAME");
 		ndr->depth++;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
@@ -8373,483 +3437,89 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrGetJoinInformation(struct ndr_push *ndr, int flags, const struct wkssvc_NetrGetJoinInformation *r)
+NTSTATUS ndr_push_WKSSVC_NETRGETJOININFORMATION(struct ndr_push *ndr, int flags, const struct WKSSVC_NETRGETJOININFORMATION *r)
 {
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.name_buffer == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->in.name_buffer));
-		if (*r->in.name_buffer) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->in.name_buffer, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->in.name_buffer, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, *r->in.name_buffer, ndr_charset_length(*r->in.name_buffer, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
 	}
 	if (flags & NDR_OUT) {
-		if (r->out.name_buffer == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.name_buffer));
-		if (*r->out.name_buffer) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.name_buffer, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(*r->out.name_buffer, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, *r->out.name_buffer, ndr_charset_length(*r->out.name_buffer, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->out.name_type == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_wkssvc_NetJoinStatus(ndr, NDR_SCALARS, *r->out.name_type));
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrGetJoinInformation(struct ndr_pull *ndr, int flags, struct wkssvc_NetrGetJoinInformation *r)
+NTSTATUS ndr_pull_WKSSVC_NETRGETJOININFORMATION(struct ndr_pull *ndr, int flags, struct WKSSVC_NETRGETJOININFORMATION *r)
 {
-	uint32_t _ptr_server_name;
-	uint32_t _ptr_name_buffer;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_name_buffer_0;
-	TALLOC_CTX *_mem_save_name_buffer_1;
-	TALLOC_CTX *_mem_save_name_type_0;
 	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.name_buffer);
-		}
-		_mem_save_name_buffer_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.name_buffer, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_name_buffer));
-		if (_ptr_name_buffer) {
-			NDR_PULL_ALLOC(ndr, *r->in.name_buffer);
-		} else {
-			*r->in.name_buffer = NULL;
-		}
-		if (*r->in.name_buffer) {
-			_mem_save_name_buffer_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->in.name_buffer, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, r->in.name_buffer));
-			NDR_CHECK(ndr_pull_array_length(ndr, r->in.name_buffer));
-			if (ndr_get_array_length(ndr, r->in.name_buffer) > ndr_get_array_size(ndr, r->in.name_buffer)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, r->in.name_buffer), ndr_get_array_length(ndr, r->in.name_buffer));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, r->in.name_buffer), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->in.name_buffer, ndr_get_array_length(ndr, r->in.name_buffer), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_buffer_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_buffer_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.name_buffer);
-		*r->out.name_buffer = *r->in.name_buffer;
-		NDR_PULL_ALLOC(ndr, r->out.name_type);
-		ZERO_STRUCTP(r->out.name_type);
 	}
 	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.name_buffer);
-		}
-		_mem_save_name_buffer_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.name_buffer, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_name_buffer));
-		if (_ptr_name_buffer) {
-			NDR_PULL_ALLOC(ndr, *r->out.name_buffer);
-		} else {
-			*r->out.name_buffer = NULL;
-		}
-		if (*r->out.name_buffer) {
-			_mem_save_name_buffer_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.name_buffer, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, r->out.name_buffer));
-			NDR_CHECK(ndr_pull_array_length(ndr, r->out.name_buffer));
-			if (ndr_get_array_length(ndr, r->out.name_buffer) > ndr_get_array_size(ndr, r->out.name_buffer)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, r->out.name_buffer), ndr_get_array_length(ndr, r->out.name_buffer));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, r->out.name_buffer), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->out.name_buffer, ndr_get_array_length(ndr, r->out.name_buffer), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_buffer_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_buffer_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.name_type);
-		}
-		_mem_save_name_type_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.name_type, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_wkssvc_NetJoinStatus(ndr, NDR_SCALARS, r->out.name_type));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_name_type_0, LIBNDR_FLAG_REF_ALLOC);
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrGetJoinInformation(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrGetJoinInformation *r)
+_PUBLIC_ void ndr_print_WKSSVC_NETRGETJOININFORMATION(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRGETJOININFORMATION *r)
 {
-	ndr_print_struct(ndr, name, "wkssvc_NetrGetJoinInformation");
+	ndr_print_struct(ndr, name, "WKSSVC_NETRGETJOININFORMATION");
 	ndr->depth++;
 	if (flags & NDR_SET_VALUES) {
 		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
 	}
 	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "wkssvc_NetrGetJoinInformation");
+		ndr_print_struct(ndr, "in", "WKSSVC_NETRGETJOININFORMATION");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
 		ndr->depth--;
-		ndr_print_ptr(ndr, "name_buffer", r->in.name_buffer);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "name_buffer", *r->in.name_buffer);
-		ndr->depth++;
-		if (*r->in.name_buffer) {
-			ndr_print_string(ndr, "name_buffer", *r->in.name_buffer);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "wkssvc_NetrGetJoinInformation");
+		ndr_print_struct(ndr, "out", "WKSSVC_NETRGETJOININFORMATION");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "name_buffer", r->out.name_buffer);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "name_buffer", *r->out.name_buffer);
-		ndr->depth++;
-		if (*r->out.name_buffer) {
-			ndr_print_string(ndr, "name_buffer", *r->out.name_buffer);
-		}
-		ndr->depth--;
-		ndr->depth--;
-		ndr_print_ptr(ndr, "name_type", r->out.name_type);
-		ndr->depth++;
-		ndr_print_wkssvc_NetJoinStatus(ndr, "name_type", *r->out.name_type);
-		ndr->depth--;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
 	}
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrGetJoinableOus(struct ndr_push *ndr, int flags, const struct wkssvc_NetrGetJoinableOus *r)
+NTSTATUS ndr_push_WKSSVC_NETRGETJOINABLEOUS(struct ndr_push *ndr, int flags, const struct WKSSVC_NETRGETJOINABLEOUS *r)
 {
-	uint32_t cntr_ous_2;
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.domain_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.domain_name, ndr_charset_length(r->in.domain_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.Account));
-		if (r->in.Account) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.Account, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.Account, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.Account, ndr_charset_length(r->in.Account, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.unknown));
-		if (r->in.unknown) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.unknown, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.unknown, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.unknown, ndr_charset_length(r->in.unknown, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.num_ous == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.num_ous));
 	}
 	if (flags & NDR_OUT) {
-		if (r->out.num_ous == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.num_ous));
-		if (r->out.ous == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.ous));
-		if (*r->out.ous) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.num_ous));
-			for (cntr_ous_2 = 0; cntr_ous_2 < *r->out.num_ous; cntr_ous_2++) {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, (*r->out.ous)[cntr_ous_2]));
-			}
-			for (cntr_ous_2 = 0; cntr_ous_2 < *r->out.num_ous; cntr_ous_2++) {
-				if ((*r->out.ous)[cntr_ous_2]) {
-					NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length((*r->out.ous)[cntr_ous_2], CH_UTF16)));
-					NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-					NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length((*r->out.ous)[cntr_ous_2], CH_UTF16)));
-					NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, (*r->out.ous)[cntr_ous_2], ndr_charset_length((*r->out.ous)[cntr_ous_2], CH_UTF16), sizeof(uint16_t), CH_UTF16));
-				}
-			}
-		}
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrGetJoinableOus(struct ndr_pull *ndr, int flags, struct wkssvc_NetrGetJoinableOus *r)
+NTSTATUS ndr_pull_WKSSVC_NETRGETJOINABLEOUS(struct ndr_pull *ndr, int flags, struct WKSSVC_NETRGETJOINABLEOUS *r)
 {
-	uint32_t _ptr_server_name;
-	uint32_t _ptr_Account;
-	uint32_t _ptr_unknown;
-	uint32_t _ptr_ous;
-	uint32_t cntr_ous_2;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_Account_0;
-	TALLOC_CTX *_mem_save_unknown_0;
-	TALLOC_CTX *_mem_save_num_ous_0;
-	TALLOC_CTX *_mem_save_ous_0;
-	TALLOC_CTX *_mem_save_ous_1;
-	TALLOC_CTX *_mem_save_ous_2;
-	TALLOC_CTX *_mem_save_ous_3;
 	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.domain_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.domain_name));
-		if (ndr_get_array_length(ndr, &r->in.domain_name) > ndr_get_array_size(ndr, &r->in.domain_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.domain_name), ndr_get_array_length(ndr, &r->in.domain_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.domain_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.domain_name, ndr_get_array_length(ndr, &r->in.domain_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_Account));
-		if (_ptr_Account) {
-			NDR_PULL_ALLOC(ndr, r->in.Account);
-		} else {
-			r->in.Account = NULL;
-		}
-		if (r->in.Account) {
-			_mem_save_Account_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.Account, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.Account));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.Account));
-			if (ndr_get_array_length(ndr, &r->in.Account) > ndr_get_array_size(ndr, &r->in.Account)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.Account), ndr_get_array_length(ndr, &r->in.Account));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.Account), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.Account, ndr_get_array_length(ndr, &r->in.Account), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_Account_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_unknown));
-		if (_ptr_unknown) {
-			NDR_PULL_ALLOC(ndr, r->in.unknown);
-		} else {
-			r->in.unknown = NULL;
-		}
-		if (r->in.unknown) {
-			_mem_save_unknown_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.unknown, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.unknown));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.unknown));
-			if (ndr_get_array_length(ndr, &r->in.unknown) > ndr_get_array_size(ndr, &r->in.unknown)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.unknown), ndr_get_array_length(ndr, &r->in.unknown));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.unknown), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.unknown, ndr_get_array_length(ndr, &r->in.unknown), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_unknown_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.num_ous);
-		}
-		_mem_save_num_ous_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.num_ous, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.num_ous));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_num_ous_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.num_ous);
-		*r->out.num_ous = *r->in.num_ous;
-		NDR_PULL_ALLOC(ndr, r->out.ous);
-		ZERO_STRUCTP(r->out.ous);
 	}
 	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.num_ous);
-		}
-		_mem_save_num_ous_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.num_ous, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.num_ous));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_num_ous_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.ous);
-		}
-		_mem_save_ous_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.ous, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ous));
-		if (_ptr_ous) {
-			NDR_PULL_ALLOC(ndr, *r->out.ous);
-		} else {
-			*r->out.ous = NULL;
-		}
-		if (*r->out.ous) {
-			_mem_save_ous_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.ous, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, r->out.ous));
-			NDR_PULL_ALLOC_N(ndr, *r->out.ous, ndr_get_array_size(ndr, r->out.ous));
-			_mem_save_ous_2 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.ous, 0);
-			for (cntr_ous_2 = 0; cntr_ous_2 < *r->out.num_ous; cntr_ous_2++) {
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ous));
-				if (_ptr_ous) {
-					NDR_PULL_ALLOC(ndr, (*r->out.ous)[cntr_ous_2]);
-				} else {
-					(*r->out.ous)[cntr_ous_2] = NULL;
-				}
-			}
-			for (cntr_ous_2 = 0; cntr_ous_2 < *r->out.num_ous; cntr_ous_2++) {
-				if ((*r->out.ous)[cntr_ous_2]) {
-					_mem_save_ous_3 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, (*r->out.ous)[cntr_ous_2], 0);
-					NDR_CHECK(ndr_pull_array_size(ndr, &(*r->out.ous)[cntr_ous_2]));
-					NDR_CHECK(ndr_pull_array_length(ndr, &(*r->out.ous)[cntr_ous_2]));
-					if (ndr_get_array_length(ndr, &(*r->out.ous)[cntr_ous_2]) > ndr_get_array_size(ndr, &(*r->out.ous)[cntr_ous_2])) {
-						return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &(*r->out.ous)[cntr_ous_2]), ndr_get_array_length(ndr, &(*r->out.ous)[cntr_ous_2]));
-					}
-					NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &(*r->out.ous)[cntr_ous_2]), sizeof(uint16_t)));
-					NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &(*r->out.ous)[cntr_ous_2], ndr_get_array_length(ndr, &(*r->out.ous)[cntr_ous_2]), sizeof(uint16_t), CH_UTF16));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ous_3, 0);
-				}
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ous_2, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ous_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ous_0, LIBNDR_FLAG_REF_ALLOC);
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-		if (*r->out.ous) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)r->out.ous, *r->out.num_ous));
-		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrGetJoinableOus(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrGetJoinableOus *r)
+_PUBLIC_ void ndr_print_WKSSVC_NETRGETJOINABLEOUS(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRGETJOINABLEOUS *r)
 {
-	uint32_t cntr_ous_2;
-	ndr_print_struct(ndr, name, "wkssvc_NetrGetJoinableOus");
+	ndr_print_struct(ndr, name, "WKSSVC_NETRGETJOINABLEOUS");
 	ndr->depth++;
 	if (flags & NDR_SET_VALUES) {
 		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
 	}
 	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "wkssvc_NetrGetJoinableOus");
+		ndr_print_struct(ndr, "in", "WKSSVC_NETRGETJOINABLEOUS");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
 		ndr->depth--;
-		ndr_print_ptr(ndr, "domain_name", r->in.domain_name);
-		ndr->depth++;
-		ndr_print_string(ndr, "domain_name", r->in.domain_name);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "Account", r->in.Account);
-		ndr->depth++;
-		if (r->in.Account) {
-			ndr_print_string(ndr, "Account", r->in.Account);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "unknown", r->in.unknown);
-		ndr->depth++;
-		if (r->in.unknown) {
-			ndr_print_string(ndr, "unknown", r->in.unknown);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "num_ous", r->in.num_ous);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "num_ous", *r->in.num_ous);
-		ndr->depth--;
-		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "wkssvc_NetrGetJoinableOus");
+		ndr_print_struct(ndr, "out", "WKSSVC_NETRGETJOINABLEOUS");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "num_ous", r->out.num_ous);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "num_ous", *r->out.num_ous);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "ous", r->out.ous);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "ous", *r->out.ous);
-		ndr->depth++;
-		if (*r->out.ous) {
-			ndr->print(ndr, "%s: ARRAY(%d)", "ous", *r->out.num_ous);
-			ndr->depth++;
-			for (cntr_ous_2=0;cntr_ous_2<*r->out.num_ous;cntr_ous_2++) {
-				char *idx_2=NULL;
-				if (asprintf(&idx_2, "[%d]", cntr_ous_2) != -1) {
-					ndr_print_ptr(ndr, "ous", (*r->out.ous)[cntr_ous_2]);
-					ndr->depth++;
-					if ((*r->out.ous)[cntr_ous_2]) {
-						ndr_print_string(ndr, "ous", (*r->out.ous)[cntr_ous_2]);
-					}
-					ndr->depth--;
-					free(idx_2);
-				}
-			}
-			ndr->depth--;
-		}
-		ndr->depth--;
-		ndr->depth--;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
 	}
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrJoinDomain2(struct ndr_push *ndr, int flags, const struct wkssvc_NetrJoinDomain2 *r)
+NTSTATUS ndr_push_wkssvc_NetrJoinDomain2(struct ndr_push *ndr, int flags, const struct wkssvc_NetrJoinDomain2 *r)
 {
 	if (flags & NDR_IN) {
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
@@ -8859,19 +3529,17 @@
 			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
 			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
 		}
-		if (r->in.domain_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
+		if (r->in.domain_name == NULL) return NT_STATUS_INVALID_PARAMETER_MIX;
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain_name, CH_UTF16)));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain_name, CH_UTF16)));
 		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.domain_name, ndr_charset_length(r->in.domain_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.account_ou));
-		if (r->in.account_ou) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.account_ou, CH_UTF16)));
+		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.account_name));
+		if (r->in.account_name) {
+			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.account_name, CH_UTF16)));
 			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.account_ou, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.account_ou, ndr_charset_length(r->in.account_ou, CH_UTF16), sizeof(uint16_t), CH_UTF16));
+			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.account_name, CH_UTF16)));
+			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.account_name, ndr_charset_length(r->in.account_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
 		}
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.admin_account));
 		if (r->in.admin_account) {
@@ -8889,17 +3557,17 @@
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrJoinDomain2(struct ndr_pull *ndr, int flags, struct wkssvc_NetrJoinDomain2 *r)
+NTSTATUS ndr_pull_wkssvc_NetrJoinDomain2(struct ndr_pull *ndr, int flags, struct wkssvc_NetrJoinDomain2 *r)
 {
 	uint32_t _ptr_server_name;
-	uint32_t _ptr_account_ou;
+	uint32_t _ptr_account_name;
 	uint32_t _ptr_admin_account;
 	uint32_t _ptr_encrypted_password;
 	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_account_ou_0;
+	TALLOC_CTX *_mem_save_account_name_0;
 	TALLOC_CTX *_mem_save_admin_account_0;
 	TALLOC_CTX *_mem_save_encrypted_password_0;
 	if (flags & NDR_IN) {
@@ -8928,23 +3596,23 @@
 		}
 		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.domain_name), sizeof(uint16_t)));
 		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.domain_name, ndr_get_array_length(ndr, &r->in.domain_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_account_ou));
-		if (_ptr_account_ou) {
-			NDR_PULL_ALLOC(ndr, r->in.account_ou);
+		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_account_name));
+		if (_ptr_account_name) {
+			NDR_PULL_ALLOC(ndr, r->in.account_name);
 		} else {
-			r->in.account_ou = NULL;
+			r->in.account_name = NULL;
 		}
-		if (r->in.account_ou) {
-			_mem_save_account_ou_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.account_ou, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.account_ou));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.account_ou));
-			if (ndr_get_array_length(ndr, &r->in.account_ou) > ndr_get_array_size(ndr, &r->in.account_ou)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.account_ou), ndr_get_array_length(ndr, &r->in.account_ou));
+		if (r->in.account_name) {
+			_mem_save_account_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
+			NDR_PULL_SET_MEM_CTX(ndr, r->in.account_name, 0);
+			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.account_name));
+			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.account_name));
+			if (ndr_get_array_length(ndr, &r->in.account_name) > ndr_get_array_size(ndr, &r->in.account_name)) {
+				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.account_name), ndr_get_array_length(ndr, &r->in.account_name));
 			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.account_ou), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.account_ou, ndr_get_array_length(ndr, &r->in.account_ou), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_account_ou_0, 0);
+			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.account_name), sizeof(uint16_t)));
+			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.account_name, ndr_get_array_length(ndr, &r->in.account_name), sizeof(uint16_t), CH_UTF16));
+			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_account_name_0, 0);
 		}
 		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_admin_account));
 		if (_ptr_admin_account) {
@@ -8981,7 +3649,7 @@
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_wkssvc_NetrJoinDomain2(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrJoinDomain2 *r)
@@ -9004,10 +3672,10 @@
 		ndr->depth++;
 		ndr_print_string(ndr, "domain_name", r->in.domain_name);
 		ndr->depth--;
-		ndr_print_ptr(ndr, "account_ou", r->in.account_ou);
+		ndr_print_ptr(ndr, "account_name", r->in.account_name);
 		ndr->depth++;
-		if (r->in.account_ou) {
-			ndr_print_string(ndr, "account_ou", r->in.account_ou);
+		if (r->in.account_name) {
+			ndr_print_string(ndr, "account_name", r->in.account_name);
 		}
 		ndr->depth--;
 		ndr_print_ptr(ndr, "admin_account", r->in.admin_account);
@@ -9034,7 +3702,7 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrUnjoinDomain2(struct ndr_push *ndr, int flags, const struct wkssvc_NetrUnjoinDomain2 *r)
+NTSTATUS ndr_push_wkssvc_NetrUnjoinDomain2(struct ndr_push *ndr, int flags, const struct wkssvc_NetrUnjoinDomain2 *r)
 {
 	if (flags & NDR_IN) {
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
@@ -9060,10 +3728,10 @@
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrUnjoinDomain2(struct ndr_pull *ndr, int flags, struct wkssvc_NetrUnjoinDomain2 *r)
+NTSTATUS ndr_pull_wkssvc_NetrUnjoinDomain2(struct ndr_pull *ndr, int flags, struct wkssvc_NetrUnjoinDomain2 *r)
 {
 	uint32_t _ptr_server_name;
 	uint32_t _ptr_account;
@@ -9125,7 +3793,7 @@
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_wkssvc_NetrUnjoinDomain2(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrUnjoinDomain2 *r)
@@ -9168,7 +3836,7 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrRenameMachineInDomain2(struct ndr_push *ndr, int flags, const struct wkssvc_NetrRenameMachineInDomain2 *r)
+NTSTATUS ndr_push_wkssvc_NetrRenameMachineInDomain2(struct ndr_push *ndr, int flags, const struct wkssvc_NetrRenameMachineInDomain2 *r)
 {
 	if (flags & NDR_IN) {
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
@@ -9201,10 +3869,10 @@
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrRenameMachineInDomain2(struct ndr_pull *ndr, int flags, struct wkssvc_NetrRenameMachineInDomain2 *r)
+NTSTATUS ndr_pull_wkssvc_NetrRenameMachineInDomain2(struct ndr_pull *ndr, int flags, struct wkssvc_NetrRenameMachineInDomain2 *r)
 {
 	uint32_t _ptr_server_name;
 	uint32_t _ptr_NewMachineName;
@@ -9286,7 +3954,7 @@
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_wkssvc_NetrRenameMachineInDomain2(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrRenameMachineInDomain2 *r)
@@ -9335,151 +4003,40 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrValidateName2(struct ndr_push *ndr, int flags, const struct wkssvc_NetrValidateName2 *r)
+NTSTATUS ndr_push_WKSSVC_NETRVALIDATENAME2(struct ndr_push *ndr, int flags, const struct WKSSVC_NETRVALIDATENAME2 *r)
 {
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.name, ndr_charset_length(r->in.name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.Account));
-		if (r->in.Account) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.Account, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.Account, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.Account, ndr_charset_length(r->in.Account, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.EncryptedPassword));
-		if (r->in.EncryptedPassword) {
-			NDR_CHECK(ndr_push_wkssvc_PasswordBuffer(ndr, NDR_SCALARS, r->in.EncryptedPassword));
-		}
-		NDR_CHECK(ndr_push_wkssvc_NetValidateNameType(ndr, NDR_SCALARS, r->in.name_type));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrValidateName2(struct ndr_pull *ndr, int flags, struct wkssvc_NetrValidateName2 *r)
+NTSTATUS ndr_pull_WKSSVC_NETRVALIDATENAME2(struct ndr_pull *ndr, int flags, struct WKSSVC_NETRVALIDATENAME2 *r)
 {
-	uint32_t _ptr_server_name;
-	uint32_t _ptr_Account;
-	uint32_t _ptr_EncryptedPassword;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_Account_0;
-	TALLOC_CTX *_mem_save_EncryptedPassword_0;
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.name));
-		if (ndr_get_array_length(ndr, &r->in.name) > ndr_get_array_size(ndr, &r->in.name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.name), ndr_get_array_length(ndr, &r->in.name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.name, ndr_get_array_length(ndr, &r->in.name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_Account));
-		if (_ptr_Account) {
-			NDR_PULL_ALLOC(ndr, r->in.Account);
-		} else {
-			r->in.Account = NULL;
-		}
-		if (r->in.Account) {
-			_mem_save_Account_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.Account, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.Account));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.Account));
-			if (ndr_get_array_length(ndr, &r->in.Account) > ndr_get_array_size(ndr, &r->in.Account)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.Account), ndr_get_array_length(ndr, &r->in.Account));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.Account), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.Account, ndr_get_array_length(ndr, &r->in.Account), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_Account_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_EncryptedPassword));
-		if (_ptr_EncryptedPassword) {
-			NDR_PULL_ALLOC(ndr, r->in.EncryptedPassword);
-		} else {
-			r->in.EncryptedPassword = NULL;
-		}
-		if (r->in.EncryptedPassword) {
-			_mem_save_EncryptedPassword_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.EncryptedPassword, 0);
-			NDR_CHECK(ndr_pull_wkssvc_PasswordBuffer(ndr, NDR_SCALARS, r->in.EncryptedPassword));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_EncryptedPassword_0, 0);
-		}
-		NDR_CHECK(ndr_pull_wkssvc_NetValidateNameType(ndr, NDR_SCALARS, &r->in.name_type));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrValidateName2(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrValidateName2 *r)
+_PUBLIC_ void ndr_print_WKSSVC_NETRVALIDATENAME2(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRVALIDATENAME2 *r)
 {
-	ndr_print_struct(ndr, name, "wkssvc_NetrValidateName2");
+	ndr_print_struct(ndr, name, "WKSSVC_NETRVALIDATENAME2");
 	ndr->depth++;
 	if (flags & NDR_SET_VALUES) {
 		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
 	}
 	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "wkssvc_NetrValidateName2");
+		ndr_print_struct(ndr, "in", "WKSSVC_NETRVALIDATENAME2");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
 		ndr->depth--;
-		ndr_print_ptr(ndr, "name", r->in.name);
-		ndr->depth++;
-		ndr_print_string(ndr, "name", r->in.name);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "Account", r->in.Account);
-		ndr->depth++;
-		if (r->in.Account) {
-			ndr_print_string(ndr, "Account", r->in.Account);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "EncryptedPassword", r->in.EncryptedPassword);
-		ndr->depth++;
-		if (r->in.EncryptedPassword) {
-			ndr_print_wkssvc_PasswordBuffer(ndr, "EncryptedPassword", r->in.EncryptedPassword);
-		}
-		ndr->depth--;
-		ndr_print_wkssvc_NetValidateNameType(ndr, "name_type", r->in.name_type);
-		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "wkssvc_NetrValidateName2");
+		ndr_print_struct(ndr, "out", "WKSSVC_NETRVALIDATENAME2");
 		ndr->depth++;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
@@ -9487,289 +4044,48 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrGetJoinableOus2(struct ndr_push *ndr, int flags, const struct wkssvc_NetrGetJoinableOus2 *r)
+NTSTATUS ndr_push_WKSSVC_NETRGETJOINABLEOUS2(struct ndr_push *ndr, int flags, const struct WKSSVC_NETRGETJOINABLEOUS2 *r)
 {
-	uint32_t cntr_ous_2;
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		if (r->in.domain_name == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.domain_name, CH_UTF16)));
-		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.domain_name, ndr_charset_length(r->in.domain_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.Account));
-		if (r->in.Account) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.Account, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.Account, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.Account, ndr_charset_length(r->in.Account, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.EncryptedPassword));
-		if (r->in.EncryptedPassword) {
-			NDR_CHECK(ndr_push_wkssvc_PasswordBuffer(ndr, NDR_SCALARS, r->in.EncryptedPassword));
-		}
-		if (r->in.num_ous == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->in.num_ous));
 	}
 	if (flags & NDR_OUT) {
-		if (r->out.num_ous == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.num_ous));
-		if (r->out.ous == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.ous));
-		if (*r->out.ous) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.num_ous));
-			for (cntr_ous_2 = 0; cntr_ous_2 < *r->out.num_ous; cntr_ous_2++) {
-				NDR_CHECK(ndr_push_unique_ptr(ndr, (*r->out.ous)[cntr_ous_2]));
-			}
-			for (cntr_ous_2 = 0; cntr_ous_2 < *r->out.num_ous; cntr_ous_2++) {
-				if ((*r->out.ous)[cntr_ous_2]) {
-					NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length((*r->out.ous)[cntr_ous_2], CH_UTF16)));
-					NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-					NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length((*r->out.ous)[cntr_ous_2], CH_UTF16)));
-					NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, (*r->out.ous)[cntr_ous_2], ndr_charset_length((*r->out.ous)[cntr_ous_2], CH_UTF16), sizeof(uint16_t), CH_UTF16));
-				}
-			}
-		}
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrGetJoinableOus2(struct ndr_pull *ndr, int flags, struct wkssvc_NetrGetJoinableOus2 *r)
+NTSTATUS ndr_pull_WKSSVC_NETRGETJOINABLEOUS2(struct ndr_pull *ndr, int flags, struct WKSSVC_NETRGETJOINABLEOUS2 *r)
 {
-	uint32_t _ptr_server_name;
-	uint32_t _ptr_Account;
-	uint32_t _ptr_EncryptedPassword;
-	uint32_t _ptr_ous;
-	uint32_t cntr_ous_2;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_Account_0;
-	TALLOC_CTX *_mem_save_EncryptedPassword_0;
-	TALLOC_CTX *_mem_save_num_ous_0;
-	TALLOC_CTX *_mem_save_ous_0;
-	TALLOC_CTX *_mem_save_ous_1;
-	TALLOC_CTX *_mem_save_ous_2;
-	TALLOC_CTX *_mem_save_ous_3;
 	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.domain_name));
-		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.domain_name));
-		if (ndr_get_array_length(ndr, &r->in.domain_name) > ndr_get_array_size(ndr, &r->in.domain_name)) {
-			return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.domain_name), ndr_get_array_length(ndr, &r->in.domain_name));
-		}
-		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.domain_name), sizeof(uint16_t)));
-		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.domain_name, ndr_get_array_length(ndr, &r->in.domain_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_Account));
-		if (_ptr_Account) {
-			NDR_PULL_ALLOC(ndr, r->in.Account);
-		} else {
-			r->in.Account = NULL;
-		}
-		if (r->in.Account) {
-			_mem_save_Account_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.Account, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.Account));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.Account));
-			if (ndr_get_array_length(ndr, &r->in.Account) > ndr_get_array_size(ndr, &r->in.Account)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.Account), ndr_get_array_length(ndr, &r->in.Account));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.Account), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.Account, ndr_get_array_length(ndr, &r->in.Account), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_Account_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_EncryptedPassword));
-		if (_ptr_EncryptedPassword) {
-			NDR_PULL_ALLOC(ndr, r->in.EncryptedPassword);
-		} else {
-			r->in.EncryptedPassword = NULL;
-		}
-		if (r->in.EncryptedPassword) {
-			_mem_save_EncryptedPassword_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.EncryptedPassword, 0);
-			NDR_CHECK(ndr_pull_wkssvc_PasswordBuffer(ndr, NDR_SCALARS, r->in.EncryptedPassword));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_EncryptedPassword_0, 0);
-		}
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->in.num_ous);
-		}
-		_mem_save_num_ous_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->in.num_ous, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->in.num_ous));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_num_ous_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_PULL_ALLOC(ndr, r->out.num_ous);
-		*r->out.num_ous = *r->in.num_ous;
-		NDR_PULL_ALLOC(ndr, r->out.ous);
-		ZERO_STRUCTP(r->out.ous);
 	}
 	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.num_ous);
-		}
-		_mem_save_num_ous_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.num_ous, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.num_ous));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_num_ous_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.ous);
-		}
-		_mem_save_ous_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.ous, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ous));
-		if (_ptr_ous) {
-			NDR_PULL_ALLOC(ndr, *r->out.ous);
-		} else {
-			*r->out.ous = NULL;
-		}
-		if (*r->out.ous) {
-			_mem_save_ous_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.ous, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, r->out.ous));
-			NDR_PULL_ALLOC_N(ndr, *r->out.ous, ndr_get_array_size(ndr, r->out.ous));
-			_mem_save_ous_2 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.ous, 0);
-			for (cntr_ous_2 = 0; cntr_ous_2 < *r->out.num_ous; cntr_ous_2++) {
-				NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ous));
-				if (_ptr_ous) {
-					NDR_PULL_ALLOC(ndr, (*r->out.ous)[cntr_ous_2]);
-				} else {
-					(*r->out.ous)[cntr_ous_2] = NULL;
-				}
-			}
-			for (cntr_ous_2 = 0; cntr_ous_2 < *r->out.num_ous; cntr_ous_2++) {
-				if ((*r->out.ous)[cntr_ous_2]) {
-					_mem_save_ous_3 = NDR_PULL_GET_MEM_CTX(ndr);
-					NDR_PULL_SET_MEM_CTX(ndr, (*r->out.ous)[cntr_ous_2], 0);
-					NDR_CHECK(ndr_pull_array_size(ndr, &(*r->out.ous)[cntr_ous_2]));
-					NDR_CHECK(ndr_pull_array_length(ndr, &(*r->out.ous)[cntr_ous_2]));
-					if (ndr_get_array_length(ndr, &(*r->out.ous)[cntr_ous_2]) > ndr_get_array_size(ndr, &(*r->out.ous)[cntr_ous_2])) {
-						return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &(*r->out.ous)[cntr_ous_2]), ndr_get_array_length(ndr, &(*r->out.ous)[cntr_ous_2]));
-					}
-					NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &(*r->out.ous)[cntr_ous_2]), sizeof(uint16_t)));
-					NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &(*r->out.ous)[cntr_ous_2], ndr_get_array_length(ndr, &(*r->out.ous)[cntr_ous_2]), sizeof(uint16_t), CH_UTF16));
-					NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ous_3, 0);
-				}
-			}
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ous_2, 0);
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ous_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ous_0, LIBNDR_FLAG_REF_ALLOC);
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
-		if (*r->out.ous) {
-			NDR_CHECK(ndr_check_array_size(ndr, (void*)r->out.ous, *r->out.num_ous));
-		}
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrGetJoinableOus2(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrGetJoinableOus2 *r)
+_PUBLIC_ void ndr_print_WKSSVC_NETRGETJOINABLEOUS2(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRGETJOINABLEOUS2 *r)
 {
-	uint32_t cntr_ous_2;
-	ndr_print_struct(ndr, name, "wkssvc_NetrGetJoinableOus2");
+	ndr_print_struct(ndr, name, "WKSSVC_NETRGETJOINABLEOUS2");
 	ndr->depth++;
 	if (flags & NDR_SET_VALUES) {
 		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
 	}
 	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "wkssvc_NetrGetJoinableOus2");
+		ndr_print_struct(ndr, "in", "WKSSVC_NETRGETJOINABLEOUS2");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
 		ndr->depth--;
-		ndr_print_ptr(ndr, "domain_name", r->in.domain_name);
-		ndr->depth++;
-		ndr_print_string(ndr, "domain_name", r->in.domain_name);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "Account", r->in.Account);
-		ndr->depth++;
-		if (r->in.Account) {
-			ndr_print_string(ndr, "Account", r->in.Account);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "EncryptedPassword", r->in.EncryptedPassword);
-		ndr->depth++;
-		if (r->in.EncryptedPassword) {
-			ndr_print_wkssvc_PasswordBuffer(ndr, "EncryptedPassword", r->in.EncryptedPassword);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "num_ous", r->in.num_ous);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "num_ous", *r->in.num_ous);
-		ndr->depth--;
-		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "wkssvc_NetrGetJoinableOus2");
+		ndr_print_struct(ndr, "out", "WKSSVC_NETRGETJOINABLEOUS2");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "num_ous", r->out.num_ous);
-		ndr->depth++;
-		ndr_print_uint32(ndr, "num_ous", *r->out.num_ous);
-		ndr->depth--;
-		ndr_print_ptr(ndr, "ous", r->out.ous);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "ous", *r->out.ous);
-		ndr->depth++;
-		if (*r->out.ous) {
-			ndr->print(ndr, "%s: ARRAY(%d)", "ous", *r->out.num_ous);
-			ndr->depth++;
-			for (cntr_ous_2=0;cntr_ous_2<*r->out.num_ous;cntr_ous_2++) {
-				char *idx_2=NULL;
-				if (asprintf(&idx_2, "[%d]", cntr_ous_2) != -1) {
-					ndr_print_ptr(ndr, "ous", (*r->out.ous)[cntr_ous_2]);
-					ndr->depth++;
-					if ((*r->out.ous)[cntr_ous_2]) {
-						ndr_print_string(ndr, "ous", (*r->out.ous)[cntr_ous_2]);
-					}
-					ndr->depth--;
-					free(idx_2);
-				}
-			}
-			ndr->depth--;
-		}
-		ndr->depth--;
-		ndr->depth--;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
 	}
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrAddAlternateComputerName(struct ndr_push *ndr, int flags, const struct wkssvc_NetrAddAlternateComputerName *r)
+NTSTATUS ndr_push_wkssvc_NetrAddAlternateComputerName(struct ndr_push *ndr, int flags, const struct wkssvc_NetrAddAlternateComputerName *r)
 {
 	if (flags & NDR_IN) {
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
@@ -9802,10 +4118,10 @@
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrAddAlternateComputerName(struct ndr_pull *ndr, int flags, struct wkssvc_NetrAddAlternateComputerName *r)
+NTSTATUS ndr_pull_wkssvc_NetrAddAlternateComputerName(struct ndr_pull *ndr, int flags, struct wkssvc_NetrAddAlternateComputerName *r)
 {
 	uint32_t _ptr_server_name;
 	uint32_t _ptr_NewAlternateMachineName;
@@ -9887,7 +4203,7 @@
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_wkssvc_NetrAddAlternateComputerName(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrAddAlternateComputerName *r)
@@ -9936,7 +4252,7 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrRemoveAlternateComputerName(struct ndr_push *ndr, int flags, const struct wkssvc_NetrRemoveAlternateComputerName *r)
+NTSTATUS ndr_push_wkssvc_NetrRemoveAlternateComputerName(struct ndr_push *ndr, int flags, const struct wkssvc_NetrRemoveAlternateComputerName *r)
 {
 	if (flags & NDR_IN) {
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
@@ -9969,10 +4285,10 @@
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrRemoveAlternateComputerName(struct ndr_pull *ndr, int flags, struct wkssvc_NetrRemoveAlternateComputerName *r)
+NTSTATUS ndr_pull_wkssvc_NetrRemoveAlternateComputerName(struct ndr_pull *ndr, int flags, struct wkssvc_NetrRemoveAlternateComputerName *r)
 {
 	uint32_t _ptr_server_name;
 	uint32_t _ptr_AlternateMachineNameToRemove;
@@ -10054,7 +4370,7 @@
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 _PUBLIC_ void ndr_print_wkssvc_NetrRemoveAlternateComputerName(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrRemoveAlternateComputerName *r)
@@ -10103,166 +4419,40 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrSetPrimaryComputername(struct ndr_push *ndr, int flags, const struct wkssvc_NetrSetPrimaryComputername *r)
+NTSTATUS ndr_push_WKSSVC_NETRSETPRIMARYCOMPUTERNAME(struct ndr_push *ndr, int flags, const struct WKSSVC_NETRSETPRIMARYCOMPUTERNAME *r)
 {
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.primary_name));
-		if (r->in.primary_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.primary_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.primary_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.primary_name, ndr_charset_length(r->in.primary_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.Account));
-		if (r->in.Account) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.Account, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.Account, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.Account, ndr_charset_length(r->in.Account, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.EncryptedPassword));
-		if (r->in.EncryptedPassword) {
-			NDR_CHECK(ndr_push_wkssvc_PasswordBuffer(ndr, NDR_SCALARS, r->in.EncryptedPassword));
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.Reserved));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrSetPrimaryComputername(struct ndr_pull *ndr, int flags, struct wkssvc_NetrSetPrimaryComputername *r)
+NTSTATUS ndr_pull_WKSSVC_NETRSETPRIMARYCOMPUTERNAME(struct ndr_pull *ndr, int flags, struct WKSSVC_NETRSETPRIMARYCOMPUTERNAME *r)
 {
-	uint32_t _ptr_server_name;
-	uint32_t _ptr_primary_name;
-	uint32_t _ptr_Account;
-	uint32_t _ptr_EncryptedPassword;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_primary_name_0;
-	TALLOC_CTX *_mem_save_Account_0;
-	TALLOC_CTX *_mem_save_EncryptedPassword_0;
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_primary_name));
-		if (_ptr_primary_name) {
-			NDR_PULL_ALLOC(ndr, r->in.primary_name);
-		} else {
-			r->in.primary_name = NULL;
-		}
-		if (r->in.primary_name) {
-			_mem_save_primary_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.primary_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.primary_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.primary_name));
-			if (ndr_get_array_length(ndr, &r->in.primary_name) > ndr_get_array_size(ndr, &r->in.primary_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.primary_name), ndr_get_array_length(ndr, &r->in.primary_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.primary_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.primary_name, ndr_get_array_length(ndr, &r->in.primary_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_primary_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_Account));
-		if (_ptr_Account) {
-			NDR_PULL_ALLOC(ndr, r->in.Account);
-		} else {
-			r->in.Account = NULL;
-		}
-		if (r->in.Account) {
-			_mem_save_Account_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.Account, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.Account));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.Account));
-			if (ndr_get_array_length(ndr, &r->in.Account) > ndr_get_array_size(ndr, &r->in.Account)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.Account), ndr_get_array_length(ndr, &r->in.Account));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.Account), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.Account, ndr_get_array_length(ndr, &r->in.Account), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_Account_0, 0);
-		}
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_EncryptedPassword));
-		if (_ptr_EncryptedPassword) {
-			NDR_PULL_ALLOC(ndr, r->in.EncryptedPassword);
-		} else {
-			r->in.EncryptedPassword = NULL;
-		}
-		if (r->in.EncryptedPassword) {
-			_mem_save_EncryptedPassword_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.EncryptedPassword, 0);
-			NDR_CHECK(ndr_pull_wkssvc_PasswordBuffer(ndr, NDR_SCALARS, r->in.EncryptedPassword));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_EncryptedPassword_0, 0);
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.Reserved));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrSetPrimaryComputername(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrSetPrimaryComputername *r)
+_PUBLIC_ void ndr_print_WKSSVC_NETRSETPRIMARYCOMPUTERNAME(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRSETPRIMARYCOMPUTERNAME *r)
 {
-	ndr_print_struct(ndr, name, "wkssvc_NetrSetPrimaryComputername");
+	ndr_print_struct(ndr, name, "WKSSVC_NETRSETPRIMARYCOMPUTERNAME");
 	ndr->depth++;
 	if (flags & NDR_SET_VALUES) {
 		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
 	}
 	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "wkssvc_NetrSetPrimaryComputername");
+		ndr_print_struct(ndr, "in", "WKSSVC_NETRSETPRIMARYCOMPUTERNAME");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
 		ndr->depth--;
-		ndr_print_ptr(ndr, "primary_name", r->in.primary_name);
-		ndr->depth++;
-		if (r->in.primary_name) {
-			ndr_print_string(ndr, "primary_name", r->in.primary_name);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "Account", r->in.Account);
-		ndr->depth++;
-		if (r->in.Account) {
-			ndr_print_string(ndr, "Account", r->in.Account);
-		}
-		ndr->depth--;
-		ndr_print_ptr(ndr, "EncryptedPassword", r->in.EncryptedPassword);
-		ndr->depth++;
-		if (r->in.EncryptedPassword) {
-			ndr_print_wkssvc_PasswordBuffer(ndr, "EncryptedPassword", r->in.EncryptedPassword);
-		}
-		ndr->depth--;
-		ndr_print_uint32(ndr, "Reserved", r->in.Reserved);
-		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "wkssvc_NetrSetPrimaryComputername");
+		ndr_print_struct(ndr, "out", "WKSSVC_NETRSETPRIMARYCOMPUTERNAME");
 		ndr->depth++;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
@@ -10270,135 +4460,55 @@
 	ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_wkssvc_NetrEnumerateComputerNames(struct ndr_push *ndr, int flags, const struct wkssvc_NetrEnumerateComputerNames *r)
+NTSTATUS ndr_push_WKSSVC_NETRENUMERATECOMPUTERNAMES(struct ndr_push *ndr, int flags, const struct WKSSVC_NETRENUMERATECOMPUTERNAMES *r)
 {
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server_name));
-		if (r->in.server_name) {
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server_name, CH_UTF16)));
-			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server_name, ndr_charset_length(r->in.server_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		}
-		NDR_CHECK(ndr_push_wkssvc_ComputerNameType(ndr, NDR_SCALARS, r->in.name_type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.Reserved));
 	}
 	if (flags & NDR_OUT) {
-		if (r->out.ctr == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
-		}
-		NDR_CHECK(ndr_push_unique_ptr(ndr, *r->out.ctr));
-		if (*r->out.ctr) {
-			NDR_CHECK(ndr_push_wkssvc_ComputerNamesCtr(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.ctr));
-		}
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-static enum ndr_err_code ndr_pull_wkssvc_NetrEnumerateComputerNames(struct ndr_pull *ndr, int flags, struct wkssvc_NetrEnumerateComputerNames *r)
+NTSTATUS ndr_pull_WKSSVC_NETRENUMERATECOMPUTERNAMES(struct ndr_pull *ndr, int flags, struct WKSSVC_NETRENUMERATECOMPUTERNAMES *r)
 {
-	uint32_t _ptr_server_name;
-	uint32_t _ptr_ctr;
-	TALLOC_CTX *_mem_save_server_name_0;
-	TALLOC_CTX *_mem_save_ctr_0;
-	TALLOC_CTX *_mem_save_ctr_1;
 	if (flags & NDR_IN) {
-		ZERO_STRUCT(r->out);
-
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server_name));
-		if (_ptr_server_name) {
-			NDR_PULL_ALLOC(ndr, r->in.server_name);
-		} else {
-			r->in.server_name = NULL;
-		}
-		if (r->in.server_name) {
-			_mem_save_server_name_0 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, r->in.server_name, 0);
-			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server_name));
-			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server_name));
-			if (ndr_get_array_length(ndr, &r->in.server_name) > ndr_get_array_size(ndr, &r->in.server_name)) {
-				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.server_name), ndr_get_array_length(ndr, &r->in.server_name));
-			}
-			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t)));
-			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server_name, ndr_get_array_length(ndr, &r->in.server_name), sizeof(uint16_t), CH_UTF16));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_name_0, 0);
-		}
-		NDR_CHECK(ndr_pull_wkssvc_ComputerNameType(ndr, NDR_SCALARS, &r->in.name_type));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.Reserved));
-		NDR_PULL_ALLOC(ndr, r->out.ctr);
-		ZERO_STRUCTP(r->out.ctr);
 	}
 	if (flags & NDR_OUT) {
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
-			NDR_PULL_ALLOC(ndr, r->out.ctr);
-		}
-		_mem_save_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.ctr, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_ctr));
-		if (_ptr_ctr) {
-			NDR_PULL_ALLOC(ndr, *r->out.ctr);
-		} else {
-			*r->out.ctr = NULL;
-		}
-		if (*r->out.ctr) {
-			_mem_save_ctr_1 = NDR_PULL_GET_MEM_CTX(ndr);
-			NDR_PULL_SET_MEM_CTX(ndr, *r->out.ctr, 0);
-			NDR_CHECK(ndr_pull_wkssvc_ComputerNamesCtr(ndr, NDR_SCALARS|NDR_BUFFERS, *r->out.ctr));
-			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_1, 0);
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_ctr_0, LIBNDR_FLAG_REF_ALLOC);
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_wkssvc_NetrEnumerateComputerNames(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrEnumerateComputerNames *r)
+_PUBLIC_ void ndr_print_WKSSVC_NETRENUMERATECOMPUTERNAMES(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRENUMERATECOMPUTERNAMES *r)
 {
-	ndr_print_struct(ndr, name, "wkssvc_NetrEnumerateComputerNames");
+	ndr_print_struct(ndr, name, "WKSSVC_NETRENUMERATECOMPUTERNAMES");
 	ndr->depth++;
 	if (flags & NDR_SET_VALUES) {
 		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
 	}
 	if (flags & NDR_IN) {
-		ndr_print_struct(ndr, "in", "wkssvc_NetrEnumerateComputerNames");
+		ndr_print_struct(ndr, "in", "WKSSVC_NETRENUMERATECOMPUTERNAMES");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "server_name", r->in.server_name);
-		ndr->depth++;
-		if (r->in.server_name) {
-			ndr_print_string(ndr, "server_name", r->in.server_name);
-		}
 		ndr->depth--;
-		ndr_print_wkssvc_ComputerNameType(ndr, "name_type", r->in.name_type);
-		ndr_print_uint32(ndr, "Reserved", r->in.Reserved);
-		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
-		ndr_print_struct(ndr, "out", "wkssvc_NetrEnumerateComputerNames");
+		ndr_print_struct(ndr, "out", "WKSSVC_NETRENUMERATECOMPUTERNAMES");
 		ndr->depth++;
-		ndr_print_ptr(ndr, "ctr", r->out.ctr);
-		ndr->depth++;
-		ndr_print_ptr(ndr, "ctr", *r->out.ctr);
-		ndr->depth++;
-		if (*r->out.ctr) {
-			ndr_print_wkssvc_ComputerNamesCtr(ndr, "ctr", *r->out.ctr);
-		}
-		ndr->depth--;
-		ndr->depth--;
 		ndr_print_WERROR(ndr, "result", r->out.result);
 		ndr->depth--;
 	}
 	ndr->depth--;
 }
 
-static const struct ndr_interface_call wkssvc_calls[] = {
+const struct dcerpc_interface_call wkssvc_calls[] = {
 	{
 		"wkssvc_NetWkstaGetInfo",
 		sizeof(struct wkssvc_NetWkstaGetInfo),
 		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetWkstaGetInfo,
 		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetWkstaGetInfo,
 		(ndr_print_function_t) ndr_print_wkssvc_NetWkstaGetInfo,
-		false,
+		False,
 	},
 	{
 		"wkssvc_NetWkstaSetInfo",
@@ -10406,7 +4516,7 @@
 		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetWkstaSetInfo,
 		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetWkstaSetInfo,
 		(ndr_print_function_t) ndr_print_wkssvc_NetWkstaSetInfo,
-		false,
+		False,
 	},
 	{
 		"wkssvc_NetWkstaEnumUsers",
@@ -10414,23 +4524,23 @@
 		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetWkstaEnumUsers,
 		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetWkstaEnumUsers,
 		(ndr_print_function_t) ndr_print_wkssvc_NetWkstaEnumUsers,
-		false,
+		False,
 	},
 	{
-		"wkssvc_NetrWkstaUserGetInfo",
-		sizeof(struct wkssvc_NetrWkstaUserGetInfo),
-		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrWkstaUserGetInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrWkstaUserGetInfo,
-		(ndr_print_function_t) ndr_print_wkssvc_NetrWkstaUserGetInfo,
-		false,
+		"WKSSVC_NETRWKSTAUSERGETINFO",
+		sizeof(struct WKSSVC_NETRWKSTAUSERGETINFO),
+		(ndr_push_flags_fn_t) ndr_push_WKSSVC_NETRWKSTAUSERGETINFO,
+		(ndr_pull_flags_fn_t) ndr_pull_WKSSVC_NETRWKSTAUSERGETINFO,
+		(ndr_print_function_t) ndr_print_WKSSVC_NETRWKSTAUSERGETINFO,
+		False,
 	},
 	{
-		"wkssvc_NetrWkstaUserSetInfo",
-		sizeof(struct wkssvc_NetrWkstaUserSetInfo),
-		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrWkstaUserSetInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrWkstaUserSetInfo,
-		(ndr_print_function_t) ndr_print_wkssvc_NetrWkstaUserSetInfo,
-		false,
+		"WKSSVC_NETRWKSTAUSERSETINFO",
+		sizeof(struct WKSSVC_NETRWKSTAUSERSETINFO),
+		(ndr_push_flags_fn_t) ndr_push_WKSSVC_NETRWKSTAUSERSETINFO,
+		(ndr_pull_flags_fn_t) ndr_pull_WKSSVC_NETRWKSTAUSERSETINFO,
+		(ndr_print_function_t) ndr_print_WKSSVC_NETRWKSTAUSERSETINFO,
+		False,
 	},
 	{
 		"wkssvc_NetWkstaTransportEnum",
@@ -10438,135 +4548,135 @@
 		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetWkstaTransportEnum,
 		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetWkstaTransportEnum,
 		(ndr_print_function_t) ndr_print_wkssvc_NetWkstaTransportEnum,
-		false,
+		False,
 	},
 	{
-		"wkssvc_NetrWkstaTransportAdd",
-		sizeof(struct wkssvc_NetrWkstaTransportAdd),
-		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrWkstaTransportAdd,
-		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrWkstaTransportAdd,
-		(ndr_print_function_t) ndr_print_wkssvc_NetrWkstaTransportAdd,
-		false,
+		"WKSSVC_NETRWKSTATRANSPORTADD",
+		sizeof(struct WKSSVC_NETRWKSTATRANSPORTADD),
+		(ndr_push_flags_fn_t) ndr_push_WKSSVC_NETRWKSTATRANSPORTADD,
+		(ndr_pull_flags_fn_t) ndr_pull_WKSSVC_NETRWKSTATRANSPORTADD,
+		(ndr_print_function_t) ndr_print_WKSSVC_NETRWKSTATRANSPORTADD,
+		False,
 	},
 	{
-		"wkssvc_NetrWkstaTransportDel",
-		sizeof(struct wkssvc_NetrWkstaTransportDel),
-		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrWkstaTransportDel,
-		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrWkstaTransportDel,
-		(ndr_print_function_t) ndr_print_wkssvc_NetrWkstaTransportDel,
-		false,
+		"WKSSVC_NETRWKSTATRANSPORTDEL",
+		sizeof(struct WKSSVC_NETRWKSTATRANSPORTDEL),
+		(ndr_push_flags_fn_t) ndr_push_WKSSVC_NETRWKSTATRANSPORTDEL,
+		(ndr_pull_flags_fn_t) ndr_pull_WKSSVC_NETRWKSTATRANSPORTDEL,
+		(ndr_print_function_t) ndr_print_WKSSVC_NETRWKSTATRANSPORTDEL,
+		False,
 	},
 	{
-		"wkssvc_NetrUseAdd",
-		sizeof(struct wkssvc_NetrUseAdd),
-		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrUseAdd,
-		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrUseAdd,
-		(ndr_print_function_t) ndr_print_wkssvc_NetrUseAdd,
-		false,
+		"WKSSVC_NETRUSEADD",
+		sizeof(struct WKSSVC_NETRUSEADD),
+		(ndr_push_flags_fn_t) ndr_push_WKSSVC_NETRUSEADD,
+		(ndr_pull_flags_fn_t) ndr_pull_WKSSVC_NETRUSEADD,
+		(ndr_print_function_t) ndr_print_WKSSVC_NETRUSEADD,
+		False,
 	},
 	{
-		"wkssvc_NetrUseGetInfo",
-		sizeof(struct wkssvc_NetrUseGetInfo),
-		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrUseGetInfo,
-		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrUseGetInfo,
-		(ndr_print_function_t) ndr_print_wkssvc_NetrUseGetInfo,
-		false,
+		"WKSSVC_NETRUSEGETINFO",
+		sizeof(struct WKSSVC_NETRUSEGETINFO),
+		(ndr_push_flags_fn_t) ndr_push_WKSSVC_NETRUSEGETINFO,
+		(ndr_pull_flags_fn_t) ndr_pull_WKSSVC_NETRUSEGETINFO,
+		(ndr_print_function_t) ndr_print_WKSSVC_NETRUSEGETINFO,
+		False,
 	},
 	{
-		"wkssvc_NetrUseDel",
-		sizeof(struct wkssvc_NetrUseDel),
-		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrUseDel,
-		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrUseDel,
-		(ndr_print_function_t) ndr_print_wkssvc_NetrUseDel,
-		false,
+		"WKSSVC_NETRUSEDEL",
+		sizeof(struct WKSSVC_NETRUSEDEL),
+		(ndr_push_flags_fn_t) ndr_push_WKSSVC_NETRUSEDEL,
+		(ndr_pull_flags_fn_t) ndr_pull_WKSSVC_NETRUSEDEL,
+		(ndr_print_function_t) ndr_print_WKSSVC_NETRUSEDEL,
+		False,
 	},
 	{
-		"wkssvc_NetrUseEnum",
-		sizeof(struct wkssvc_NetrUseEnum),
-		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrUseEnum,
-		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrUseEnum,
-		(ndr_print_function_t) ndr_print_wkssvc_NetrUseEnum,
-		false,
+		"WKSSVC_NETRUSEENUM",
+		sizeof(struct WKSSVC_NETRUSEENUM),
+		(ndr_push_flags_fn_t) ndr_push_WKSSVC_NETRUSEENUM,
+		(ndr_pull_flags_fn_t) ndr_pull_WKSSVC_NETRUSEENUM,
+		(ndr_print_function_t) ndr_print_WKSSVC_NETRUSEENUM,
+		False,
 	},
 	{
-		"wkssvc_NetrMessageBufferSend",
-		sizeof(struct wkssvc_NetrMessageBufferSend),
-		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrMessageBufferSend,
-		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrMessageBufferSend,
-		(ndr_print_function_t) ndr_print_wkssvc_NetrMessageBufferSend,
-		false,
+		"WKSSVC_NETRMESSAGEBUFFERSEND",
+		sizeof(struct WKSSVC_NETRMESSAGEBUFFERSEND),
+		(ndr_push_flags_fn_t) ndr_push_WKSSVC_NETRMESSAGEBUFFERSEND,
+		(ndr_pull_flags_fn_t) ndr_pull_WKSSVC_NETRMESSAGEBUFFERSEND,
+		(ndr_print_function_t) ndr_print_WKSSVC_NETRMESSAGEBUFFERSEND,
+		False,
 	},
 	{
-		"wkssvc_NetrWorkstationStatisticsGet",
-		sizeof(struct wkssvc_NetrWorkstationStatisticsGet),
-		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrWorkstationStatisticsGet,
-		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrWorkstationStatisticsGet,
-		(ndr_print_function_t) ndr_print_wkssvc_NetrWorkstationStatisticsGet,
-		false,
+		"WKSSVC_NETRWORKSTATIONSTATISTICSGET",
+		sizeof(struct WKSSVC_NETRWORKSTATIONSTATISTICSGET),
+		(ndr_push_flags_fn_t) ndr_push_WKSSVC_NETRWORKSTATIONSTATISTICSGET,
+		(ndr_pull_flags_fn_t) ndr_pull_WKSSVC_NETRWORKSTATIONSTATISTICSGET,
+		(ndr_print_function_t) ndr_print_WKSSVC_NETRWORKSTATIONSTATISTICSGET,
+		False,
 	},
 	{
-		"wkssvc_NetrLogonDomainNameAdd",
-		sizeof(struct wkssvc_NetrLogonDomainNameAdd),
-		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrLogonDomainNameAdd,
-		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrLogonDomainNameAdd,
-		(ndr_print_function_t) ndr_print_wkssvc_NetrLogonDomainNameAdd,
-		false,
+		"WKSSVC_NETRLOGONDOMAINNAMEADD",
+		sizeof(struct WKSSVC_NETRLOGONDOMAINNAMEADD),
+		(ndr_push_flags_fn_t) ndr_push_WKSSVC_NETRLOGONDOMAINNAMEADD,
+		(ndr_pull_flags_fn_t) ndr_pull_WKSSVC_NETRLOGONDOMAINNAMEADD,
+		(ndr_print_function_t) ndr_print_WKSSVC_NETRLOGONDOMAINNAMEADD,
+		False,
 	},
 	{
-		"wkssvc_NetrLogonDomainNameDel",
-		sizeof(struct wkssvc_NetrLogonDomainNameDel),
-		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrLogonDomainNameDel,
-		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrLogonDomainNameDel,
-		(ndr_print_function_t) ndr_print_wkssvc_NetrLogonDomainNameDel,
-		false,
+		"WKSSVC_NETRLOGONDOMAINNAMEDEL",
+		sizeof(struct WKSSVC_NETRLOGONDOMAINNAMEDEL),
+		(ndr_push_flags_fn_t) ndr_push_WKSSVC_NETRLOGONDOMAINNAMEDEL,
+		(ndr_pull_flags_fn_t) ndr_pull_WKSSVC_NETRLOGONDOMAINNAMEDEL,
+		(ndr_print_function_t) ndr_print_WKSSVC_NETRLOGONDOMAINNAMEDEL,
+		False,
 	},
 	{
-		"wkssvc_NetrJoinDomain",
-		sizeof(struct wkssvc_NetrJoinDomain),
-		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrJoinDomain,
-		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrJoinDomain,
-		(ndr_print_function_t) ndr_print_wkssvc_NetrJoinDomain,
-		false,
+		"WKSSVC_NETRJOINDOMAIN",
+		sizeof(struct WKSSVC_NETRJOINDOMAIN),
+		(ndr_push_flags_fn_t) ndr_push_WKSSVC_NETRJOINDOMAIN,
+		(ndr_pull_flags_fn_t) ndr_pull_WKSSVC_NETRJOINDOMAIN,
+		(ndr_print_function_t) ndr_print_WKSSVC_NETRJOINDOMAIN,
+		False,
 	},
 	{
-		"wkssvc_NetrUnjoinDomain",
-		sizeof(struct wkssvc_NetrUnjoinDomain),
-		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrUnjoinDomain,
-		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrUnjoinDomain,
-		(ndr_print_function_t) ndr_print_wkssvc_NetrUnjoinDomain,
-		false,
+		"WKSSVC_NETRUNJOINDOMAIN",
+		sizeof(struct WKSSVC_NETRUNJOINDOMAIN),
+		(ndr_push_flags_fn_t) ndr_push_WKSSVC_NETRUNJOINDOMAIN,
+		(ndr_pull_flags_fn_t) ndr_pull_WKSSVC_NETRUNJOINDOMAIN,
+		(ndr_print_function_t) ndr_print_WKSSVC_NETRUNJOINDOMAIN,
+		False,
 	},
 	{
-		"wkssvc_NetrRenameMachineInDomain",
-		sizeof(struct wkssvc_NetrRenameMachineInDomain),
-		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrRenameMachineInDomain,
-		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrRenameMachineInDomain,
-		(ndr_print_function_t) ndr_print_wkssvc_NetrRenameMachineInDomain,
-		false,
+		"WKSSVC_NETRRENAMEMACHINEINDOMAIN",
+		sizeof(struct WKSSVC_NETRRENAMEMACHINEINDOMAIN),
+		(ndr_push_flags_fn_t) ndr_push_WKSSVC_NETRRENAMEMACHINEINDOMAIN,
+		(ndr_pull_flags_fn_t) ndr_pull_WKSSVC_NETRRENAMEMACHINEINDOMAIN,
+		(ndr_print_function_t) ndr_print_WKSSVC_NETRRENAMEMACHINEINDOMAIN,
+		False,
 	},
 	{
-		"wkssvc_NetrValidateName",
-		sizeof(struct wkssvc_NetrValidateName),
-		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrValidateName,
-		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrValidateName,
-		(ndr_print_function_t) ndr_print_wkssvc_NetrValidateName,
-		false,
+		"WKSSVC_NETRVALIDATENAME",
+		sizeof(struct WKSSVC_NETRVALIDATENAME),
+		(ndr_push_flags_fn_t) ndr_push_WKSSVC_NETRVALIDATENAME,
+		(ndr_pull_flags_fn_t) ndr_pull_WKSSVC_NETRVALIDATENAME,
+		(ndr_print_function_t) ndr_print_WKSSVC_NETRVALIDATENAME,
+		False,
 	},
 	{
-		"wkssvc_NetrGetJoinInformation",
-		sizeof(struct wkssvc_NetrGetJoinInformation),
-		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrGetJoinInformation,
-		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrGetJoinInformation,
-		(ndr_print_function_t) ndr_print_wkssvc_NetrGetJoinInformation,
-		false,
+		"WKSSVC_NETRGETJOININFORMATION",
+		sizeof(struct WKSSVC_NETRGETJOININFORMATION),
+		(ndr_push_flags_fn_t) ndr_push_WKSSVC_NETRGETJOININFORMATION,
+		(ndr_pull_flags_fn_t) ndr_pull_WKSSVC_NETRGETJOININFORMATION,
+		(ndr_print_function_t) ndr_print_WKSSVC_NETRGETJOININFORMATION,
+		False,
 	},
 	{
-		"wkssvc_NetrGetJoinableOus",
-		sizeof(struct wkssvc_NetrGetJoinableOus),
-		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrGetJoinableOus,
-		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrGetJoinableOus,
-		(ndr_print_function_t) ndr_print_wkssvc_NetrGetJoinableOus,
-		false,
+		"WKSSVC_NETRGETJOINABLEOUS",
+		sizeof(struct WKSSVC_NETRGETJOINABLEOUS),
+		(ndr_push_flags_fn_t) ndr_push_WKSSVC_NETRGETJOINABLEOUS,
+		(ndr_pull_flags_fn_t) ndr_pull_WKSSVC_NETRGETJOINABLEOUS,
+		(ndr_print_function_t) ndr_print_WKSSVC_NETRGETJOINABLEOUS,
+		False,
 	},
 	{
 		"wkssvc_NetrJoinDomain2",
@@ -10574,7 +4684,7 @@
 		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrJoinDomain2,
 		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrJoinDomain2,
 		(ndr_print_function_t) ndr_print_wkssvc_NetrJoinDomain2,
-		false,
+		False,
 	},
 	{
 		"wkssvc_NetrUnjoinDomain2",
@@ -10582,7 +4692,7 @@
 		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrUnjoinDomain2,
 		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrUnjoinDomain2,
 		(ndr_print_function_t) ndr_print_wkssvc_NetrUnjoinDomain2,
-		false,
+		False,
 	},
 	{
 		"wkssvc_NetrRenameMachineInDomain2",
@@ -10590,23 +4700,23 @@
 		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrRenameMachineInDomain2,
 		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrRenameMachineInDomain2,
 		(ndr_print_function_t) ndr_print_wkssvc_NetrRenameMachineInDomain2,
-		false,
+		False,
 	},
 	{
-		"wkssvc_NetrValidateName2",
-		sizeof(struct wkssvc_NetrValidateName2),
-		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrValidateName2,
-		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrValidateName2,
-		(ndr_print_function_t) ndr_print_wkssvc_NetrValidateName2,
-		false,
+		"WKSSVC_NETRVALIDATENAME2",
+		sizeof(struct WKSSVC_NETRVALIDATENAME2),
+		(ndr_push_flags_fn_t) ndr_push_WKSSVC_NETRVALIDATENAME2,
+		(ndr_pull_flags_fn_t) ndr_pull_WKSSVC_NETRVALIDATENAME2,
+		(ndr_print_function_t) ndr_print_WKSSVC_NETRVALIDATENAME2,
+		False,
 	},
 	{
-		"wkssvc_NetrGetJoinableOus2",
-		sizeof(struct wkssvc_NetrGetJoinableOus2),
-		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrGetJoinableOus2,
-		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrGetJoinableOus2,
-		(ndr_print_function_t) ndr_print_wkssvc_NetrGetJoinableOus2,
-		false,
+		"WKSSVC_NETRGETJOINABLEOUS2",
+		sizeof(struct WKSSVC_NETRGETJOINABLEOUS2),
+		(ndr_push_flags_fn_t) ndr_push_WKSSVC_NETRGETJOINABLEOUS2,
+		(ndr_pull_flags_fn_t) ndr_pull_WKSSVC_NETRGETJOINABLEOUS2,
+		(ndr_print_function_t) ndr_print_WKSSVC_NETRGETJOINABLEOUS2,
+		False,
 	},
 	{
 		"wkssvc_NetrAddAlternateComputerName",
@@ -10614,7 +4724,7 @@
 		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrAddAlternateComputerName,
 		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrAddAlternateComputerName,
 		(ndr_print_function_t) ndr_print_wkssvc_NetrAddAlternateComputerName,
-		false,
+		False,
 	},
 	{
 		"wkssvc_NetrRemoveAlternateComputerName",
@@ -10622,55 +4732,53 @@
 		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrRemoveAlternateComputerName,
 		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrRemoveAlternateComputerName,
 		(ndr_print_function_t) ndr_print_wkssvc_NetrRemoveAlternateComputerName,
-		false,
+		False,
 	},
 	{
-		"wkssvc_NetrSetPrimaryComputername",
-		sizeof(struct wkssvc_NetrSetPrimaryComputername),
-		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrSetPrimaryComputername,
-		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrSetPrimaryComputername,
-		(ndr_print_function_t) ndr_print_wkssvc_NetrSetPrimaryComputername,
-		false,
+		"WKSSVC_NETRSETPRIMARYCOMPUTERNAME",
+		sizeof(struct WKSSVC_NETRSETPRIMARYCOMPUTERNAME),
+		(ndr_push_flags_fn_t) ndr_push_WKSSVC_NETRSETPRIMARYCOMPUTERNAME,
+		(ndr_pull_flags_fn_t) ndr_pull_WKSSVC_NETRSETPRIMARYCOMPUTERNAME,
+		(ndr_print_function_t) ndr_print_WKSSVC_NETRSETPRIMARYCOMPUTERNAME,
+		False,
 	},
 	{
-		"wkssvc_NetrEnumerateComputerNames",
-		sizeof(struct wkssvc_NetrEnumerateComputerNames),
-		(ndr_push_flags_fn_t) ndr_push_wkssvc_NetrEnumerateComputerNames,
-		(ndr_pull_flags_fn_t) ndr_pull_wkssvc_NetrEnumerateComputerNames,
-		(ndr_print_function_t) ndr_print_wkssvc_NetrEnumerateComputerNames,
-		false,
+		"WKSSVC_NETRENUMERATECOMPUTERNAMES",
+		sizeof(struct WKSSVC_NETRENUMERATECOMPUTERNAMES),
+		(ndr_push_flags_fn_t) ndr_push_WKSSVC_NETRENUMERATECOMPUTERNAMES,
+		(ndr_pull_flags_fn_t) ndr_pull_WKSSVC_NETRENUMERATECOMPUTERNAMES,
+		(ndr_print_function_t) ndr_print_WKSSVC_NETRENUMERATECOMPUTERNAMES,
+		False,
 	},
-	{ NULL, 0, NULL, NULL, NULL, false }
+	{ NULL, 0, NULL, NULL, NULL, False }
 };
 
-static const char * const wkssvc_endpoint_strings[] = {
+const char * const wkssvc_endpoint_strings[] = {
 	"ncacn_np:[\\pipe\\wkssvc]", 
-	"ncacn_ip_tcp:", 
-	"ncalrpc:", 
 };
 
-static const struct ndr_interface_string_array wkssvc_endpoints = {
-	.count	= 3,
+const struct dcerpc_endpoint_list wkssvc_endpoints = {
+	.count	= 1,
 	.names	= wkssvc_endpoint_strings
 };
 
-static const char * const wkssvc_authservice_strings[] = {
+const char * const wkssvc_authservice_strings[] = {
 	"host", 
 };
 
-static const struct ndr_interface_string_array wkssvc_authservices = {
+const struct dcerpc_authservice_list wkssvc_authservices = {
 	.count	= 1,
 	.names	= wkssvc_authservice_strings
 };
 
 
-const struct ndr_interface_table ndr_table_wkssvc = {
+const struct dcerpc_interface_table dcerpc_table_wkssvc = {
 	.name		= "wkssvc",
 	.syntax_id	= {
 		{0x6bffd098,0xa112,0x3610,{0x98,0x33},{0x46,0xc3,0xf8,0x7e,0x34,0x5a}},
-		NDR_WKSSVC_VERSION
+		DCERPC_WKSSVC_VERSION
 	},
-	.helpstring	= NDR_WKSSVC_HELPSTRING,
+	.helpstring	= DCERPC_WKSSVC_HELPSTRING,
 	.num_calls	= 31,
 	.calls		= wkssvc_calls,
 	.endpoints	= &wkssvc_endpoints,

Modified: branches/samba/upstream/source/librpc/gen_ndr/ndr_wkssvc.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_wkssvc.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_wkssvc.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,79 +1,80 @@
 /* header auto-generated by pidl */
 
-#include "librpc/ndr/libndr.h"
 #include "librpc/gen_ndr/wkssvc.h"
 
 #ifndef _HEADER_NDR_wkssvc
 #define _HEADER_NDR_wkssvc
 
-#define NDR_WKSSVC_UUID "6bffd098-a112-3610-9833-46c3f87e345a"
-#define NDR_WKSSVC_VERSION 1.0
-#define NDR_WKSSVC_NAME "wkssvc"
-#define NDR_WKSSVC_HELPSTRING "Workstation Service"
-extern const struct ndr_interface_table ndr_table_wkssvc;
-#define NDR_WKSSVC_NETWKSTAGETINFO (0x00)
+#include "librpc/ndr/libndr.h"
+#define DCERPC_WKSSVC_UUID "6bffd098-a112-3610-9833-46c3f87e345a"
+#define DCERPC_WKSSVC_VERSION 1.0
+#define DCERPC_WKSSVC_NAME "wkssvc"
+#define DCERPC_WKSSVC_HELPSTRING "Workstation Service"
+extern const struct dcerpc_interface_table dcerpc_table_wkssvc;
+NTSTATUS dcerpc_server_wkssvc_init(void);
+#define DCERPC_WKSSVC_NETWKSTAGETINFO (0x00)
 
-#define NDR_WKSSVC_NETWKSTASETINFO (0x01)
+#define DCERPC_WKSSVC_NETWKSTASETINFO (0x01)
 
-#define NDR_WKSSVC_NETWKSTAENUMUSERS (0x02)
+#define DCERPC_WKSSVC_NETWKSTAENUMUSERS (0x02)
 
-#define NDR_WKSSVC_NETRWKSTAUSERGETINFO (0x03)
+#define DCERPC_WKSSVC_NETRWKSTAUSERGETINFO (0x03)
 
-#define NDR_WKSSVC_NETRWKSTAUSERSETINFO (0x04)
+#define DCERPC_WKSSVC_NETRWKSTAUSERSETINFO (0x04)
 
-#define NDR_WKSSVC_NETWKSTATRANSPORTENUM (0x05)
+#define DCERPC_WKSSVC_NETWKSTATRANSPORTENUM (0x05)
 
-#define NDR_WKSSVC_NETRWKSTATRANSPORTADD (0x06)
+#define DCERPC_WKSSVC_NETRWKSTATRANSPORTADD (0x06)
 
-#define NDR_WKSSVC_NETRWKSTATRANSPORTDEL (0x07)
+#define DCERPC_WKSSVC_NETRWKSTATRANSPORTDEL (0x07)
 
-#define NDR_WKSSVC_NETRUSEADD (0x08)
+#define DCERPC_WKSSVC_NETRUSEADD (0x08)
 
-#define NDR_WKSSVC_NETRUSEGETINFO (0x09)
+#define DCERPC_WKSSVC_NETRUSEGETINFO (0x09)
 
-#define NDR_WKSSVC_NETRUSEDEL (0x0a)
+#define DCERPC_WKSSVC_NETRUSEDEL (0x0a)
 
-#define NDR_WKSSVC_NETRUSEENUM (0x0b)
+#define DCERPC_WKSSVC_NETRUSEENUM (0x0b)
 
-#define NDR_WKSSVC_NETRMESSAGEBUFFERSEND (0x0c)
+#define DCERPC_WKSSVC_NETRMESSAGEBUFFERSEND (0x0c)
 
-#define NDR_WKSSVC_NETRWORKSTATIONSTATISTICSGET (0x0d)
+#define DCERPC_WKSSVC_NETRWORKSTATIONSTATISTICSGET (0x0d)
 
-#define NDR_WKSSVC_NETRLOGONDOMAINNAMEADD (0x0e)
+#define DCERPC_WKSSVC_NETRLOGONDOMAINNAMEADD (0x0e)
 
-#define NDR_WKSSVC_NETRLOGONDOMAINNAMEDEL (0x0f)
+#define DCERPC_WKSSVC_NETRLOGONDOMAINNAMEDEL (0x0f)
 
-#define NDR_WKSSVC_NETRJOINDOMAIN (0x10)
+#define DCERPC_WKSSVC_NETRJOINDOMAIN (0x10)
 
-#define NDR_WKSSVC_NETRUNJOINDOMAIN (0x11)
+#define DCERPC_WKSSVC_NETRUNJOINDOMAIN (0x11)
 
-#define NDR_WKSSVC_NETRRENAMEMACHINEINDOMAIN (0x12)
+#define DCERPC_WKSSVC_NETRRENAMEMACHINEINDOMAIN (0x12)
 
-#define NDR_WKSSVC_NETRVALIDATENAME (0x13)
+#define DCERPC_WKSSVC_NETRVALIDATENAME (0x13)
 
-#define NDR_WKSSVC_NETRGETJOININFORMATION (0x14)
+#define DCERPC_WKSSVC_NETRGETJOININFORMATION (0x14)
 
-#define NDR_WKSSVC_NETRGETJOINABLEOUS (0x15)
+#define DCERPC_WKSSVC_NETRGETJOINABLEOUS (0x15)
 
-#define NDR_WKSSVC_NETRJOINDOMAIN2 (0x16)
+#define DCERPC_WKSSVC_NETRJOINDOMAIN2 (0x16)
 
-#define NDR_WKSSVC_NETRUNJOINDOMAIN2 (0x17)
+#define DCERPC_WKSSVC_NETRUNJOINDOMAIN2 (0x17)
 
-#define NDR_WKSSVC_NETRRENAMEMACHINEINDOMAIN2 (0x18)
+#define DCERPC_WKSSVC_NETRRENAMEMACHINEINDOMAIN2 (0x18)
 
-#define NDR_WKSSVC_NETRVALIDATENAME2 (0x19)
+#define DCERPC_WKSSVC_NETRVALIDATENAME2 (0x19)
 
-#define NDR_WKSSVC_NETRGETJOINABLEOUS2 (0x1a)
+#define DCERPC_WKSSVC_NETRGETJOINABLEOUS2 (0x1a)
 
-#define NDR_WKSSVC_NETRADDALTERNATECOMPUTERNAME (0x1b)
+#define DCERPC_WKSSVC_NETRADDALTERNATECOMPUTERNAME (0x1b)
 
-#define NDR_WKSSVC_NETRREMOVEALTERNATECOMPUTERNAME (0x1c)
+#define DCERPC_WKSSVC_NETRREMOVEALTERNATECOMPUTERNAME (0x1c)
 
-#define NDR_WKSSVC_NETRSETPRIMARYCOMPUTERNAME (0x1d)
+#define DCERPC_WKSSVC_NETRSETPRIMARYCOMPUTERNAME (0x1d)
 
-#define NDR_WKSSVC_NETRENUMERATECOMPUTERNAMES (0x1e)
+#define DCERPC_WKSSVC_NETRENUMERATECOMPUTERNAMES (0x1e)
 
-#define NDR_WKSSVC_CALL_COUNT (31)
+#define DCERPC_WKSSVC_CALL_COUNT (31)
 void ndr_print_wkssvc_NetWkstaInfo100(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo100 *r);
 void ndr_print_wkssvc_NetWkstaInfo101(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo101 *r);
 void ndr_print_wkssvc_NetWkstaInfo102(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo102 *r);
@@ -85,91 +86,48 @@
 void ndr_print_wkssvc_NetWkstaInfo1018(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1018 *r);
 void ndr_print_wkssvc_NetWkstaInfo1023(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1023 *r);
 void ndr_print_wkssvc_NetWkstaInfo1027(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1027 *r);
-void ndr_print_wkssvc_NetWkstaInfo1028(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1028 *r);
-void ndr_print_wkssvc_NetWkstaInfo1032(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1032 *r);
 void ndr_print_wkssvc_NetWkstaInfo1033(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1033 *r);
-void ndr_print_wkssvc_NetWkstaInfo1041(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1041 *r);
-void ndr_print_wkssvc_NetWkstaInfo1042(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1042 *r);
-void ndr_print_wkssvc_NetWkstaInfo1043(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1043 *r);
-void ndr_print_wkssvc_NetWkstaInfo1044(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1044 *r);
-void ndr_print_wkssvc_NetWkstaInfo1045(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1045 *r);
-void ndr_print_wkssvc_NetWkstaInfo1046(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1046 *r);
-void ndr_print_wkssvc_NetWkstaInfo1047(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1047 *r);
-void ndr_print_wkssvc_NetWkstaInfo1048(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1048 *r);
-void ndr_print_wkssvc_NetWkstaInfo1049(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1049 *r);
-void ndr_print_wkssvc_NetWkstaInfo1050(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1050 *r);
-void ndr_print_wkssvc_NetWkstaInfo1051(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1051 *r);
-void ndr_print_wkssvc_NetWkstaInfo1052(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1052 *r);
-void ndr_print_wkssvc_NetWkstaInfo1053(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1053 *r);
-void ndr_print_wkssvc_NetWkstaInfo1054(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1054 *r);
-void ndr_print_wkssvc_NetWkstaInfo1055(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1055 *r);
-void ndr_print_wkssvc_NetWkstaInfo1056(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1056 *r);
-void ndr_print_wkssvc_NetWkstaInfo1057(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1057 *r);
-void ndr_print_wkssvc_NetWkstaInfo1058(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1058 *r);
-void ndr_print_wkssvc_NetWkstaInfo1059(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1059 *r);
-void ndr_print_wkssvc_NetWkstaInfo1060(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1060 *r);
-void ndr_print_wkssvc_NetWkstaInfo1061(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1061 *r);
-void ndr_print_wkssvc_NetWkstaInfo1062(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaInfo1062 *r);
 void ndr_print_wkssvc_NetWkstaInfo(struct ndr_print *ndr, const char *name, const union wkssvc_NetWkstaInfo *r);
-void ndr_print_wkssvc_NetrWkstaUserInfo0(struct ndr_print *ndr, const char *name, const struct wkssvc_NetrWkstaUserInfo0 *r);
-void ndr_print_wkssvc_NetWkstaEnumUsersCtr0(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaEnumUsersCtr0 *r);
-void ndr_print_wkssvc_NetrWkstaUserInfo1(struct ndr_print *ndr, const char *name, const struct wkssvc_NetrWkstaUserInfo1 *r);
-void ndr_print_wkssvc_NetWkstaEnumUsersCtr1(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaEnumUsersCtr1 *r);
-void ndr_print_wkssvc_NetWkstaEnumUsersCtr(struct ndr_print *ndr, const char *name, const union wkssvc_NetWkstaEnumUsersCtr *r);
-void ndr_print_wkssvc_NetWkstaEnumUsersInfo(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaEnumUsersInfo *r);
-void ndr_print_wkssvc_NetrWkstaUserInfo1101(struct ndr_print *ndr, const char *name, const struct wkssvc_NetrWkstaUserInfo1101 *r);
-void ndr_print_wkssvc_NetrWkstaUserInfo(struct ndr_print *ndr, const char *name, const union wkssvc_NetrWkstaUserInfo *r);
+void ndr_print_USER_INFO_0(struct ndr_print *ndr, const char *name, const struct USER_INFO_0 *r);
+void ndr_print_USER_INFO_0_CONTAINER(struct ndr_print *ndr, const char *name, const struct USER_INFO_0_CONTAINER *r);
+void ndr_print_USER_INFO_1(struct ndr_print *ndr, const char *name, const struct USER_INFO_1 *r);
+void ndr_print_USER_INFO_1_CONTAINER(struct ndr_print *ndr, const char *name, const struct USER_INFO_1_CONTAINER *r);
+void ndr_print_WKS_USER_ENUM_UNION(struct ndr_print *ndr, const char *name, const union WKS_USER_ENUM_UNION *r);
 void ndr_print_wkssvc_NetWkstaTransportInfo0(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaTransportInfo0 *r);
 void ndr_print_wkssvc_NetWkstaTransportCtr0(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaTransportCtr0 *r);
 void ndr_print_wkssvc_NetWkstaTransportCtr(struct ndr_print *ndr, const char *name, const union wkssvc_NetWkstaTransportCtr *r);
-void ndr_print_wkssvc_NetWkstaTransportInfo(struct ndr_print *ndr, const char *name, const struct wkssvc_NetWkstaTransportInfo *r);
-void ndr_print_wkssvc_NetrUseInfo3(struct ndr_print *ndr, const char *name, const struct wkssvc_NetrUseInfo3 *r);
-void ndr_print_wkssvc_NetrUseInfo2(struct ndr_print *ndr, const char *name, const struct wkssvc_NetrUseInfo2 *r);
-void ndr_print_wkssvc_NetrUseInfo1(struct ndr_print *ndr, const char *name, const struct wkssvc_NetrUseInfo1 *r);
-void ndr_print_wkssvc_NetrUseInfo0(struct ndr_print *ndr, const char *name, const struct wkssvc_NetrUseInfo0 *r);
-void ndr_print_wkssvc_NetrUseGetInfoCtr(struct ndr_print *ndr, const char *name, const union wkssvc_NetrUseGetInfoCtr *r);
-void ndr_print_wkssvc_NetrUseEnumCtr2(struct ndr_print *ndr, const char *name, const struct wkssvc_NetrUseEnumCtr2 *r);
-void ndr_print_wkssvc_NetrUseEnumCtr1(struct ndr_print *ndr, const char *name, const struct wkssvc_NetrUseEnumCtr1 *r);
-void ndr_print_wkssvc_NetrUseEnumCtr0(struct ndr_print *ndr, const char *name, const struct wkssvc_NetrUseEnumCtr0 *r);
-void ndr_print_wkssvc_NetrUseEnumCtr(struct ndr_print *ndr, const char *name, const union wkssvc_NetrUseEnumCtr *r);
-void ndr_print_wkssvc_NetrUseEnumInfo(struct ndr_print *ndr, const char *name, const struct wkssvc_NetrUseEnumInfo *r);
-void ndr_print_wkssvc_NetrWorkstationStatistics(struct ndr_print *ndr, const char *name, const struct wkssvc_NetrWorkstationStatistics *r);
-void ndr_print_wkssvc_renameflags(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_wkssvc_NetValidateNameType(struct ndr_print *ndr, const char *name, enum wkssvc_NetValidateNameType r);
-void ndr_print_wkssvc_NetJoinStatus(struct ndr_print *ndr, const char *name, enum wkssvc_NetJoinStatus r);
 void ndr_print_wkssvc_PasswordBuffer(struct ndr_print *ndr, const char *name, const struct wkssvc_PasswordBuffer *r);
 void ndr_print_wkssvc_joinflags(struct ndr_print *ndr, const char *name, uint32_t r);
-void ndr_print_wkssvc_ComputerNameType(struct ndr_print *ndr, const char *name, enum wkssvc_ComputerNameType r);
-void ndr_print_wkssvc_ComputerNamesCtr(struct ndr_print *ndr, const char *name, const struct wkssvc_ComputerNamesCtr *r);
+void ndr_print_wkssvc_renameflags(struct ndr_print *ndr, const char *name, uint32_t r);
 void ndr_print_wkssvc_NetWkstaGetInfo(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetWkstaGetInfo *r);
 void ndr_print_wkssvc_NetWkstaSetInfo(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetWkstaSetInfo *r);
 void ndr_print_wkssvc_NetWkstaEnumUsers(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetWkstaEnumUsers *r);
-void ndr_print_wkssvc_NetrWkstaUserGetInfo(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrWkstaUserGetInfo *r);
-void ndr_print_wkssvc_NetrWkstaUserSetInfo(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrWkstaUserSetInfo *r);
+void ndr_print_WKSSVC_NETRWKSTAUSERGETINFO(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRWKSTAUSERGETINFO *r);
+void ndr_print_WKSSVC_NETRWKSTAUSERSETINFO(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRWKSTAUSERSETINFO *r);
 void ndr_print_wkssvc_NetWkstaTransportEnum(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetWkstaTransportEnum *r);
-void ndr_print_wkssvc_NetrWkstaTransportAdd(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrWkstaTransportAdd *r);
-void ndr_print_wkssvc_NetrWkstaTransportDel(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrWkstaTransportDel *r);
-void ndr_print_wkssvc_NetrUseAdd(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrUseAdd *r);
-void ndr_print_wkssvc_NetrUseGetInfo(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrUseGetInfo *r);
-void ndr_print_wkssvc_NetrUseDel(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrUseDel *r);
-void ndr_print_wkssvc_NetrUseEnum(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrUseEnum *r);
-void ndr_print_wkssvc_NetrMessageBufferSend(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrMessageBufferSend *r);
-void ndr_print_wkssvc_NetrWorkstationStatisticsGet(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrWorkstationStatisticsGet *r);
-void ndr_print_wkssvc_NetrLogonDomainNameAdd(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrLogonDomainNameAdd *r);
-void ndr_print_wkssvc_NetrLogonDomainNameDel(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrLogonDomainNameDel *r);
-void ndr_print_wkssvc_NetrJoinDomain(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrJoinDomain *r);
-void ndr_print_wkssvc_NetrUnjoinDomain(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrUnjoinDomain *r);
-void ndr_print_wkssvc_NetrRenameMachineInDomain(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrRenameMachineInDomain *r);
-void ndr_print_wkssvc_NetrValidateName(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrValidateName *r);
-void ndr_print_wkssvc_NetrGetJoinInformation(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrGetJoinInformation *r);
-void ndr_print_wkssvc_NetrGetJoinableOus(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrGetJoinableOus *r);
+void ndr_print_WKSSVC_NETRWKSTATRANSPORTADD(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRWKSTATRANSPORTADD *r);
+void ndr_print_WKSSVC_NETRWKSTATRANSPORTDEL(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRWKSTATRANSPORTDEL *r);
+void ndr_print_WKSSVC_NETRUSEADD(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRUSEADD *r);
+void ndr_print_WKSSVC_NETRUSEGETINFO(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRUSEGETINFO *r);
+void ndr_print_WKSSVC_NETRUSEDEL(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRUSEDEL *r);
+void ndr_print_WKSSVC_NETRUSEENUM(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRUSEENUM *r);
+void ndr_print_WKSSVC_NETRMESSAGEBUFFERSEND(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRMESSAGEBUFFERSEND *r);
+void ndr_print_WKSSVC_NETRWORKSTATIONSTATISTICSGET(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRWORKSTATIONSTATISTICSGET *r);
+void ndr_print_WKSSVC_NETRLOGONDOMAINNAMEADD(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRLOGONDOMAINNAMEADD *r);
+void ndr_print_WKSSVC_NETRLOGONDOMAINNAMEDEL(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRLOGONDOMAINNAMEDEL *r);
+void ndr_print_WKSSVC_NETRJOINDOMAIN(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRJOINDOMAIN *r);
+void ndr_print_WKSSVC_NETRUNJOINDOMAIN(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRUNJOINDOMAIN *r);
+void ndr_print_WKSSVC_NETRRENAMEMACHINEINDOMAIN(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRRENAMEMACHINEINDOMAIN *r);
+void ndr_print_WKSSVC_NETRVALIDATENAME(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRVALIDATENAME *r);
+void ndr_print_WKSSVC_NETRGETJOININFORMATION(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRGETJOININFORMATION *r);
+void ndr_print_WKSSVC_NETRGETJOINABLEOUS(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRGETJOINABLEOUS *r);
 void ndr_print_wkssvc_NetrJoinDomain2(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrJoinDomain2 *r);
 void ndr_print_wkssvc_NetrUnjoinDomain2(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrUnjoinDomain2 *r);
 void ndr_print_wkssvc_NetrRenameMachineInDomain2(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrRenameMachineInDomain2 *r);
-void ndr_print_wkssvc_NetrValidateName2(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrValidateName2 *r);
-void ndr_print_wkssvc_NetrGetJoinableOus2(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrGetJoinableOus2 *r);
+void ndr_print_WKSSVC_NETRVALIDATENAME2(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRVALIDATENAME2 *r);
+void ndr_print_WKSSVC_NETRGETJOINABLEOUS2(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRGETJOINABLEOUS2 *r);
 void ndr_print_wkssvc_NetrAddAlternateComputerName(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrAddAlternateComputerName *r);
 void ndr_print_wkssvc_NetrRemoveAlternateComputerName(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrRemoveAlternateComputerName *r);
-void ndr_print_wkssvc_NetrSetPrimaryComputername(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrSetPrimaryComputername *r);
-void ndr_print_wkssvc_NetrEnumerateComputerNames(struct ndr_print *ndr, const char *name, int flags, const struct wkssvc_NetrEnumerateComputerNames *r);
+void ndr_print_WKSSVC_NETRSETPRIMARYCOMPUTERNAME(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRSETPRIMARYCOMPUTERNAME *r);
+void ndr_print_WKSSVC_NETRENUMERATECOMPUTERNAMES(struct ndr_print *ndr, const char *name, int flags, const struct WKSSVC_NETRENUMERATECOMPUTERNAMES *r);
 #endif /* _HEADER_NDR_wkssvc */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_xattr.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_xattr.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_xattr.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,102 +0,0 @@
-/* parser auto-generated by pidl */
-
-#include "includes.h"
-#include "librpc/gen_ndr/ndr_xattr.h"
-
-_PUBLIC_ enum ndr_err_code ndr_push_tdb_xattr(struct ndr_push *ndr, int ndr_flags, const struct tdb_xattr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_UTF8|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->name));
-			ndr->flags = _flags_save_string;
-		}
-		NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->value));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_tdb_xattr(struct ndr_pull *ndr, int ndr_flags, struct tdb_xattr *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_UTF8|LIBNDR_FLAG_STR_NULLTERM);
-			NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->name));
-			ndr->flags = _flags_save_string;
-		}
-		NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->value));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_tdb_xattr(struct ndr_print *ndr, const char *name, const struct tdb_xattr *r)
-{
-	ndr_print_struct(ndr, name, "tdb_xattr");
-	ndr->depth++;
-	ndr_print_string(ndr, "name", r->name);
-	ndr_print_DATA_BLOB(ndr, "value", r->value);
-	ndr->depth--;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_push_tdb_xattrs(struct ndr_push *ndr, int ndr_flags, const struct tdb_xattrs *r)
-{
-	uint32_t cntr_xattrs_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_xattrs));
-		for (cntr_xattrs_0 = 0; cntr_xattrs_0 < r->num_xattrs; cntr_xattrs_0++) {
-			NDR_CHECK(ndr_push_tdb_xattr(ndr, NDR_SCALARS, &r->xattrs[cntr_xattrs_0]));
-		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ enum ndr_err_code ndr_pull_tdb_xattrs(struct ndr_pull *ndr, int ndr_flags, struct tdb_xattrs *r)
-{
-	uint32_t cntr_xattrs_0;
-	TALLOC_CTX *_mem_save_xattrs_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_xattrs));
-		NDR_PULL_ALLOC_N(ndr, r->xattrs, r->num_xattrs);
-		_mem_save_xattrs_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->xattrs, 0);
-		for (cntr_xattrs_0 = 0; cntr_xattrs_0 < r->num_xattrs; cntr_xattrs_0++) {
-			NDR_CHECK(ndr_pull_tdb_xattr(ndr, NDR_SCALARS, &r->xattrs[cntr_xattrs_0]));
-		}
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_xattrs_0, 0);
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_tdb_xattrs(struct ndr_print *ndr, const char *name, const struct tdb_xattrs *r)
-{
-	uint32_t cntr_xattrs_0;
-	ndr_print_struct(ndr, name, "tdb_xattrs");
-	ndr->depth++;
-	ndr_print_uint32(ndr, "num_xattrs", r->num_xattrs);
-	ndr->print(ndr, "%s: ARRAY(%d)", "xattrs", r->num_xattrs);
-	ndr->depth++;
-	for (cntr_xattrs_0=0;cntr_xattrs_0<r->num_xattrs;cntr_xattrs_0++) {
-		char *idx_0=NULL;
-		if (asprintf(&idx_0, "[%d]", cntr_xattrs_0) != -1) {
-			ndr_print_tdb_xattr(ndr, "xattrs", &r->xattrs[cntr_xattrs_0]);
-			free(idx_0);
-		}
-	}
-	ndr->depth--;
-	ndr->depth--;
-}
-

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ndr_xattr.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ndr_xattr.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ndr_xattr.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,16 +0,0 @@
-/* header auto-generated by pidl */
-
-#include "librpc/ndr/libndr.h"
-#include "librpc/gen_ndr/xattr.h"
-
-#ifndef _HEADER_NDR_xattr
-#define _HEADER_NDR_xattr
-
-#define NDR_XATTR_CALL_COUNT (0)
-enum ndr_err_code ndr_push_tdb_xattr(struct ndr_push *ndr, int ndr_flags, const struct tdb_xattr *r);
-enum ndr_err_code ndr_pull_tdb_xattr(struct ndr_pull *ndr, int ndr_flags, struct tdb_xattr *r);
-void ndr_print_tdb_xattr(struct ndr_print *ndr, const char *name, const struct tdb_xattr *r);
-enum ndr_err_code ndr_push_tdb_xattrs(struct ndr_push *ndr, int ndr_flags, const struct tdb_xattrs *r);
-enum ndr_err_code ndr_pull_tdb_xattrs(struct ndr_pull *ndr, int ndr_flags, struct tdb_xattrs *r);
-void ndr_print_tdb_xattrs(struct ndr_print *ndr, const char *name, const struct tdb_xattrs *r);
-#endif /* _HEADER_NDR_xattr */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/netlogon.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/netlogon.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/netlogon.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,1610 +0,0 @@
-/* header auto-generated by pidl */
-
-#include <stdint.h>
-
-#include "librpc/gen_ndr/lsa.h"
-#include "librpc/gen_ndr/samr.h"
-#include "librpc/gen_ndr/security.h"
-#include "librpc/gen_ndr/nbt.h"
-#ifndef _HEADER_netlogon
-#define _HEADER_netlogon
-
-#define DSGETDC_VALID_FLAGS	( (DS_FORCE_REDISCOVERY|DS_DIRECTORY_SERVICE_REQUIRED|DS_DIRECTORY_SERVICE_PREFERRED|DS_GC_SERVER_REQUIRED|DS_PDC_REQUIRED|DS_BACKGROUND_ONLY|DS_IP_REQUIRED|DS_KDC_REQUIRED|DS_TIMESERV_REQUIRED|DS_WRITABLE_REQUIRED|DS_GOOD_TIMESERV_PREFERRED|DS_AVOID_SELF|DS_ONLY_LDAP_NEEDED|DS_IS_FLAT_NAME|DS_IS_DNS_NAME|DS_RETURN_FLAT_NAME|DS_RETURN_DNS_NAME) )
-#define DS_GFTI_UPDATE_TDO	( 0x1 )
-struct netr_UasInfo {
-	const char *account_name;/* [unique,charset(UTF16)] */
-	uint32_t priv;
-	uint32_t auth_flags;
-	uint32_t logon_count;
-	uint32_t bad_pw_count;
-	time_t last_logon;
-	time_t last_logoff;
-	time_t logoff_time;
-	time_t kickoff_time;
-	uint32_t password_age;
-	time_t pw_can_change;
-	time_t pw_must_change;
-	const char *computer;/* [unique,charset(UTF16)] */
-	const char *domain;/* [unique,charset(UTF16)] */
-	const char *script_path;/* [unique,charset(UTF16)] */
-	uint32_t unknown;
-};
-
-struct netr_UasLogoffInfo {
-	uint32_t duration;
-	uint16_t logon_count;
-};
-
-struct netr_AcctLockStr {
-	int64_t lockout_duration;
-	uint64_t reset_count;
-	uint32_t bad_attempt_lockout;
-	uint32_t dummy;
-}/* [public] */;
-
-/* bitmap netr_LogonParameterControl */
-#define MSV1_0_CLEARTEXT_PASSWORD_ALLOWED ( 0x00000002 )
-#define MSV1_0_UPDATE_LOGON_STATISTICS ( 0x00000004 )
-#define MSV1_0_RETURN_USER_PARAMETERS ( 0x00000008 )
-#define MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT ( 0x00000020 )
-#define MSV1_0_RETURN_PROFILE_PATH ( 0x00000200 )
-#define MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT ( 0x00000800 )
-
-struct netr_IdentityInfo {
-	struct lsa_String domain_name;
-	uint32_t parameter_control;
-	uint32_t logon_id_low;
-	uint32_t logon_id_high;
-	struct lsa_String account_name;
-	struct lsa_String workstation;
-};
-
-struct netr_PasswordInfo {
-	struct netr_IdentityInfo identity_info;
-	struct samr_Password lmpassword;
-	struct samr_Password ntpassword;
-};
-
-struct netr_ChallengeResponse {
-	uint16_t length;
-	uint16_t size;/* [value(length)] */
-	uint8_t *data;/* [unique,length_is(length),size_is(length)] */
-}/* [flag(LIBNDR_PRINT_ARRAY_HEX)] */;
-
-struct netr_NetworkInfo {
-	struct netr_IdentityInfo identity_info;
-	uint8_t challenge[8];
-	struct netr_ChallengeResponse nt;
-	struct netr_ChallengeResponse lm;
-}/* [flag(LIBNDR_PRINT_ARRAY_HEX)] */;
-
-union netr_LogonInfo {
-	struct netr_PasswordInfo *password;/* [unique,case] */
-	struct netr_NetworkInfo *network;/* [unique,case(2)] */
-}/* [public,switch_type(uint16)] */;
-
-struct netr_UserSessionKey {
-	uint8_t key[16];
-}/* [public,flag(LIBNDR_PRINT_ARRAY_HEX)] */;
-
-struct netr_LMSessionKey {
-	uint8_t key[8];
-}/* [public,flag(LIBNDR_PRINT_ARRAY_HEX)] */;
-
-/* bitmap netr_UserFlags */
-#define NETLOGON_GUEST ( 0x00000001 )
-#define NETLOGON_NOENCRYPTION ( 0x00000002 )
-#define NETLOGON_CACHED_ACCOUNT ( 0x00000004 )
-#define NETLOGON_USED_LM_PASSWORD ( 0x00000008 )
-#define NETLOGON_EXTRA_SIDS ( 0x00000020 )
-#define NETLOGON_SUBAUTH_SESSION_KEY ( 0x00000040 )
-#define NETLOGON_SERVER_TRUST_ACCOUNT ( 0x00000080 )
-#define NETLOGON_NTLMV2_ENABLED ( 0x00000100 )
-#define NETLOGON_RESOURCE_GROUPS ( 0x00000200 )
-#define NETLOGON_PROFILE_PATH_RETURNED ( 0x00000400 )
-#define NETLOGON_GRACE_LOGON ( 0x01000000 )
-
-struct netr_SamBaseInfo {
-	NTTIME last_logon;
-	NTTIME last_logoff;
-	NTTIME acct_expiry;
-	NTTIME last_password_change;
-	NTTIME allow_password_change;
-	NTTIME force_password_change;
-	struct lsa_String account_name;
-	struct lsa_String full_name;
-	struct lsa_String logon_script;
-	struct lsa_String profile_path;
-	struct lsa_String home_directory;
-	struct lsa_String home_drive;
-	uint16_t logon_count;
-	uint16_t bad_password_count;
-	uint32_t rid;
-	uint32_t primary_gid;
-	struct samr_RidWithAttributeArray groups;
-	uint32_t user_flags;
-	struct netr_UserSessionKey key;
-	struct lsa_StringLarge logon_server;
-	struct lsa_StringLarge domain;
-	struct dom_sid2 *domain_sid;/* [unique] */
-	struct netr_LMSessionKey LMSessKey;
-	uint32_t acct_flags;
-	uint32_t unknown[7];
-};
-
-struct netr_SamInfo2 {
-	struct netr_SamBaseInfo base;
-};
-
-struct netr_SidAttr {
-	struct dom_sid2 *sid;/* [unique] */
-	uint32_t attributes;
-};
-
-struct netr_SamInfo3 {
-	struct netr_SamBaseInfo base;
-	uint32_t sidcount;
-	struct netr_SidAttr *sids;/* [unique,size_is(sidcount)] */
-}/* [public] */;
-
-struct netr_SamInfo6 {
-	struct netr_SamBaseInfo base;
-	uint32_t sidcount;
-	struct netr_SidAttr *sids;/* [unique,size_is(sidcount)] */
-	struct lsa_String forest;
-	struct lsa_String principle;
-	uint32_t unknown4[20];
-};
-
-struct netr_PacInfo {
-	uint32_t pac_size;
-	uint8_t *pac;/* [unique,size_is(pac_size)] */
-	struct lsa_String logon_domain;
-	struct lsa_String logon_server;
-	struct lsa_String principal_name;
-	uint32_t auth_size;
-	uint8_t *auth;/* [unique,size_is(auth_size)] */
-	struct netr_UserSessionKey user_session_key;
-	uint32_t expansionroom[10];
-	struct lsa_String unknown1;
-	struct lsa_String unknown2;
-	struct lsa_String unknown3;
-	struct lsa_String unknown4;
-};
-
-union netr_Validation {
-	struct netr_SamInfo2 *sam2;/* [unique,case(2)] */
-	struct netr_SamInfo3 *sam3;/* [unique,case(3)] */
-	struct netr_PacInfo *pac;/* [unique,case(4)] */
-	struct netr_SamInfo6 *sam6;/* [unique,case(6)] */
-}/* [public,switch_type(uint16)] */;
-
-struct netr_Credential {
-	uint8_t data[8];
-}/* [public,flag(LIBNDR_PRINT_ARRAY_HEX)] */;
-
-struct netr_Authenticator {
-	struct netr_Credential cred;
-	time_t timestamp;
-}/* [public] */;
-
-enum netr_LogonLevel
-#ifndef USE_UINT_ENUMS
- {
-	INTERACTIVE_LOGON_TYPE=1,
-	NET_LOGON_TYPE=2
-}
-#else
- { __donnot_use_enum_netr_LogonLevel=0x7FFFFFFF}
-#define INTERACTIVE_LOGON_TYPE ( 1 )
-#define NET_LOGON_TYPE ( 2 )
-#endif
-;
-
-enum netr_SchannelType;
-
-enum netr_SamDatabaseID;
-
-struct netr_DELTA_DELETE_USER {
-	const char *account_name;/* [unique,charset(UTF16)] */
-	struct lsa_String unknown1;
-	struct lsa_String unknown2;
-	struct lsa_String unknown3;
-	struct lsa_String unknown4;
-	uint32_t unknown5;
-	uint32_t unknown6;
-	uint32_t unknown7;
-	uint32_t unknown8;
-};
-
-struct netr_USER_KEY16 {
-	uint16_t length;
-	uint16_t size;/* [value(length)] */
-	uint32_t flags;
-	struct samr_Password pwd;
-};
-
-struct netr_PasswordHistory {
-	uint16_t nt_length;
-	uint16_t nt_size;/* [value(nt_length)] */
-	uint32_t nt_flags;
-	uint16_t lm_length;
-	uint16_t lm_size;/* [value(lm_length)] */
-	uint32_t lm_flags;
-	uint8_t *nt_history;
-	uint8_t *lm_history;
-};
-
-struct netr_USER_KEYS2 {
-	struct netr_USER_KEY16 lmpassword;
-	struct netr_USER_KEY16 ntpassword;
-	struct netr_PasswordHistory history;
-};
-
-struct netr_USER_KEY_UNION {
-	struct netr_USER_KEYS2 keys2;
-};
-
-struct netr_USER_KEYS {
-	uint32_t version;
-	struct netr_USER_KEY_UNION keys;
-}/* [public] */;
-
-struct netr_USER_PRIVATE_INFO {
-	uint8_t SensitiveDataFlag;
-	uint32_t DataLength;
-	uint8_t *SensitiveData;/* [unique,flag(LIBNDR_PRINT_ARRAY_HEX),size_is(DataLength)] */
-};
-
-struct netr_DELTA_USER {
-	struct lsa_String account_name;
-	struct lsa_String full_name;
-	uint32_t rid;
-	uint32_t primary_gid;
-	struct lsa_String home_directory;
-	struct lsa_String home_drive;
-	struct lsa_String logon_script;
-	struct lsa_String description;
-	struct lsa_String workstations;
-	NTTIME last_logon;
-	NTTIME last_logoff;
-	struct samr_LogonHours logon_hours;
-	uint16_t bad_password_count;
-	uint16_t logon_count;
-	NTTIME last_password_change;
-	NTTIME acct_expiry;
-	uint32_t acct_flags;
-	struct samr_Password lmpassword;
-	struct samr_Password ntpassword;
-	uint8_t nt_password_present;
-	uint8_t lm_password_present;
-	uint8_t password_expired;
-	struct lsa_String comment;
-	struct lsa_String parameters;
-	uint16_t country_code;
-	uint16_t code_page;
-	struct netr_USER_PRIVATE_INFO user_private_info;
-	uint32_t SecurityInformation;
-	struct sec_desc_buf sdbuf;
-	struct lsa_String profile_path;
-	struct lsa_String unknown2;
-	struct lsa_String unknown3;
-	struct lsa_String unknown4;
-	uint32_t unknown5;
-	uint32_t unknown6;
-	uint32_t unknown7;
-	uint32_t unknown8;
-};
-
-struct netr_DELTA_DOMAIN {
-	struct lsa_String domain_name;
-	struct lsa_String comment;
-	int64_t force_logoff_time;
-	uint16_t min_password_length;
-	uint16_t password_history_length;
-	int64_t max_password_age;
-	int64_t min_password_age;
-	uint64_t sequence_num;
-	NTTIME domain_create_time;
-	uint32_t SecurityInformation;
-	struct sec_desc_buf sdbuf;
-	struct lsa_BinaryString account_lockout;
-	struct lsa_String unknown2;
-	struct lsa_String unknown3;
-	struct lsa_String unknown4;
-	uint32_t logon_to_chgpass;
-	uint32_t unknown6;
-	uint32_t unknown7;
-	uint32_t unknown8;
-};
-
-struct netr_DELTA_GROUP {
-	struct lsa_String group_name;
-	uint32_t rid;
-	uint32_t attributes;
-	struct lsa_String description;
-	uint32_t SecurityInformation;
-	struct sec_desc_buf sdbuf;
-	struct lsa_String unknown1;
-	struct lsa_String unknown2;
-	struct lsa_String unknown3;
-	struct lsa_String unknown4;
-	uint32_t unknown5;
-	uint32_t unknown6;
-	uint32_t unknown7;
-	uint32_t unknown8;
-};
-
-struct netr_DELTA_RENAME {
-	struct lsa_String OldName;
-	struct lsa_String NewName;
-	struct lsa_String unknown1;
-	struct lsa_String unknown2;
-	struct lsa_String unknown3;
-	struct lsa_String unknown4;
-	uint32_t unknown5;
-	uint32_t unknown6;
-	uint32_t unknown7;
-	uint32_t unknown8;
-};
-
-struct netr_DELTA_GROUP_MEMBER {
-	uint32_t *rids;/* [unique,size_is(num_rids)] */
-	uint32_t *attribs;/* [unique,size_is(num_rids)] */
-	uint32_t num_rids;
-	uint32_t unknown1;
-	uint32_t unknown2;
-	uint32_t unknown3;
-	uint32_t unknown4;
-};
-
-struct netr_DELTA_ALIAS {
-	struct lsa_String alias_name;
-	uint32_t rid;
-	uint32_t SecurityInformation;
-	struct sec_desc_buf sdbuf;
-	struct lsa_String description;
-	struct lsa_String unknown2;
-	struct lsa_String unknown3;
-	struct lsa_String unknown4;
-	uint32_t unknown5;
-	uint32_t unknown6;
-	uint32_t unknown7;
-	uint32_t unknown8;
-};
-
-struct netr_DELTA_ALIAS_MEMBER {
-	struct lsa_SidArray sids;
-	uint32_t unknown1;
-	uint32_t unknown2;
-	uint32_t unknown3;
-	uint32_t unknown4;
-};
-
-struct netr_QUOTA_LIMITS {
-	uint32_t pagedpoollimit;
-	uint32_t nonpagedpoollimit;
-	uint32_t minimumworkingsetsize;
-	uint32_t maximumworkingsetsize;
-	uint32_t pagefilelimit;
-	NTTIME timelimit;
-};
-
-struct netr_DELTA_POLICY {
-	uint32_t maxlogsize;
-	NTTIME auditretentionperiod;
-	uint8_t auditingmode;
-	uint32_t maxauditeventcount;
-	uint32_t *eventauditoptions;/* [unique,size_is(maxauditeventcount+1)] */
-	struct lsa_String primary_domain_name;
-	struct dom_sid2 *sid;/* [unique] */
-	struct netr_QUOTA_LIMITS quota_limits;
-	uint64_t sequence_num;
-	NTTIME db_create_time;
-	uint32_t SecurityInformation;
-	struct sec_desc_buf sdbuf;
-	struct lsa_String unknown1;
-	struct lsa_String unknown2;
-	struct lsa_String unknown3;
-	struct lsa_String unknown4;
-	uint32_t unknown5;
-	uint32_t unknown6;
-	uint32_t unknown7;
-	uint32_t unknown8;
-};
-
-struct netr_DELTA_TRUSTED_DOMAIN {
-	struct lsa_String domain_name;
-	uint32_t num_controllers;
-	struct lsa_String *controller_names;/* [unique,size_is(num_controllers)] */
-	uint32_t SecurityInformation;
-	struct sec_desc_buf sdbuf;
-	struct lsa_String unknown1;
-	struct lsa_String unknown2;
-	struct lsa_String unknown3;
-	struct lsa_String unknown4;
-	uint32_t posix_offset;
-	uint32_t unknown6;
-	uint32_t unknown7;
-	uint32_t unknown8;
-};
-
-struct netr_DELTA_DELETE_TRUST {
-	uint16_t unknown;
-};
-
-struct netr_DELTA_ACCOUNT {
-	uint32_t privilege_entries;
-	uint32_t privilege_control;
-	uint32_t *privilege_attrib;/* [unique,size_is(privilege_entries)] */
-	struct lsa_String *privilege_name;/* [unique,size_is(privilege_entries)] */
-	struct netr_QUOTA_LIMITS quotalimits;
-	uint32_t system_flags;
-	uint32_t SecurityInformation;
-	struct sec_desc_buf sdbuf;
-	struct lsa_String unknown1;
-	struct lsa_String unknown2;
-	struct lsa_String unknown3;
-	struct lsa_String unknown4;
-	uint32_t unknown5;
-	uint32_t unknown6;
-	uint32_t unknown7;
-	uint32_t unknown8;
-};
-
-struct netr_DELTA_DELETE_ACCOUNT {
-	uint16_t unknown;
-};
-
-struct netr_DELTA_DELETE_SECRET {
-	uint16_t unknown;
-};
-
-struct netr_CIPHER_VALUE {
-	uint32_t len;
-	uint32_t maxlen;
-	uint8_t *cipher_data;/* [unique,length_is(len),size_is(maxlen)] */
-};
-
-struct netr_DELTA_SECRET {
-	struct netr_CIPHER_VALUE current_cipher;
-	NTTIME current_cipher_set_time;
-	struct netr_CIPHER_VALUE old_cipher;
-	NTTIME old_cipher_set_time;
-	uint32_t SecurityInformation;
-	struct sec_desc_buf sdbuf;
-	struct lsa_String unknown1;
-	struct lsa_String unknown2;
-	struct lsa_String unknown3;
-	struct lsa_String unknown4;
-	uint32_t unknown5;
-	uint32_t unknown6;
-	uint32_t unknown7;
-	uint32_t unknown8;
-};
-
-enum netr_DeltaEnum
-#ifndef USE_UINT_ENUMS
- {
-	NETR_DELTA_DOMAIN=1,
-	NETR_DELTA_GROUP=2,
-	NETR_DELTA_DELETE_GROUP=3,
-	NETR_DELTA_RENAME_GROUP=4,
-	NETR_DELTA_USER=5,
-	NETR_DELTA_DELETE_USER=6,
-	NETR_DELTA_RENAME_USER=7,
-	NETR_DELTA_GROUP_MEMBER=8,
-	NETR_DELTA_ALIAS=9,
-	NETR_DELTA_DELETE_ALIAS=10,
-	NETR_DELTA_RENAME_ALIAS=11,
-	NETR_DELTA_ALIAS_MEMBER=12,
-	NETR_DELTA_POLICY=13,
-	NETR_DELTA_TRUSTED_DOMAIN=14,
-	NETR_DELTA_DELETE_TRUST=15,
-	NETR_DELTA_ACCOUNT=16,
-	NETR_DELTA_DELETE_ACCOUNT=17,
-	NETR_DELTA_SECRET=18,
-	NETR_DELTA_DELETE_SECRET=19,
-	NETR_DELTA_DELETE_GROUP2=20,
-	NETR_DELTA_DELETE_USER2=21,
-	NETR_DELTA_MODIFY_COUNT=22
-}
-#else
- { __donnot_use_enum_netr_DeltaEnum=0x7FFFFFFF}
-#define NETR_DELTA_DOMAIN ( 1 )
-#define NETR_DELTA_GROUP ( 2 )
-#define NETR_DELTA_DELETE_GROUP ( 3 )
-#define NETR_DELTA_RENAME_GROUP ( 4 )
-#define NETR_DELTA_USER ( 5 )
-#define NETR_DELTA_DELETE_USER ( 6 )
-#define NETR_DELTA_RENAME_USER ( 7 )
-#define NETR_DELTA_GROUP_MEMBER ( 8 )
-#define NETR_DELTA_ALIAS ( 9 )
-#define NETR_DELTA_DELETE_ALIAS ( 10 )
-#define NETR_DELTA_RENAME_ALIAS ( 11 )
-#define NETR_DELTA_ALIAS_MEMBER ( 12 )
-#define NETR_DELTA_POLICY ( 13 )
-#define NETR_DELTA_TRUSTED_DOMAIN ( 14 )
-#define NETR_DELTA_DELETE_TRUST ( 15 )
-#define NETR_DELTA_ACCOUNT ( 16 )
-#define NETR_DELTA_DELETE_ACCOUNT ( 17 )
-#define NETR_DELTA_SECRET ( 18 )
-#define NETR_DELTA_DELETE_SECRET ( 19 )
-#define NETR_DELTA_DELETE_GROUP2 ( 20 )
-#define NETR_DELTA_DELETE_USER2 ( 21 )
-#define NETR_DELTA_MODIFY_COUNT ( 22 )
-#endif
-;
-
-union netr_DELTA_UNION {
-	struct netr_DELTA_DOMAIN *domain;/* [unique,case(NETR_DELTA_DOMAIN)] */
-	struct netr_DELTA_GROUP *group;/* [unique,case(NETR_DELTA_GROUP)] */
-	struct netr_DELTA_RENAME *rename_group;/* [unique,case(NETR_DELTA_RENAME_GROUP)] */
-	struct netr_DELTA_USER *user;/* [unique,case(NETR_DELTA_USER)] */
-	struct netr_DELTA_RENAME *rename_user;/* [unique,case(NETR_DELTA_RENAME_USER)] */
-	struct netr_DELTA_GROUP_MEMBER *group_member;/* [unique,case(NETR_DELTA_GROUP_MEMBER)] */
-	struct netr_DELTA_ALIAS *alias;/* [unique,case(NETR_DELTA_ALIAS)] */
-	struct netr_DELTA_RENAME *rename_alias;/* [unique,case(NETR_DELTA_RENAME_ALIAS)] */
-	struct netr_DELTA_ALIAS_MEMBER *alias_member;/* [unique,case(NETR_DELTA_ALIAS_MEMBER)] */
-	struct netr_DELTA_POLICY *policy;/* [unique,case(NETR_DELTA_POLICY)] */
-	struct netr_DELTA_TRUSTED_DOMAIN *trusted_domain;/* [unique,case(NETR_DELTA_TRUSTED_DOMAIN)] */
-	struct netr_DELTA_DELETE_TRUST delete_trust;/* [case(NETR_DELTA_DELETE_TRUST)] */
-	struct netr_DELTA_ACCOUNT *account;/* [unique,case(NETR_DELTA_ACCOUNT)] */
-	struct netr_DELTA_DELETE_ACCOUNT delete_account;/* [case(NETR_DELTA_DELETE_ACCOUNT)] */
-	struct netr_DELTA_SECRET *secret;/* [unique,case(NETR_DELTA_SECRET)] */
-	struct netr_DELTA_DELETE_SECRET delete_secret;/* [case(NETR_DELTA_DELETE_SECRET)] */
-	struct netr_DELTA_DELETE_USER *delete_group;/* [unique,case(NETR_DELTA_DELETE_GROUP2)] */
-	struct netr_DELTA_DELETE_USER *delete_user;/* [unique,case(NETR_DELTA_DELETE_USER2)] */
-	uint64_t *modified_count;/* [unique,case(NETR_DELTA_MODIFY_COUNT)] */
-}/* [switch_type(netr_DeltaEnum)] */;
-
-union netr_DELTA_ID_UNION {
-	uint32_t rid;/* [case(NETR_DELTA_DOMAIN)] */
-	struct dom_sid2 *sid;/* [unique,case(NETR_DELTA_POLICY)] */
-	const char *name;/* [unique,charset(UTF16),case(NETR_DELTA_SECRET)] */
-}/* [switch_type(netr_DeltaEnum)] */;
-
-struct netr_DELTA_ENUM {
-	enum netr_DeltaEnum delta_type;
-	union netr_DELTA_ID_UNION delta_id_union;/* [switch_is(delta_type)] */
-	union netr_DELTA_UNION delta_union;/* [switch_is(delta_type)] */
-};
-
-struct netr_DELTA_ENUM_ARRAY {
-	uint32_t num_deltas;
-	struct netr_DELTA_ENUM *delta_enum;/* [unique,size_is(num_deltas)] */
-};
-
-struct netr_UAS_INFO_0 {
-	uint8_t computer_name[16];
-	uint32_t timecreated;
-	uint32_t serial_number;
-}/* [flag(LIBNDR_PRINT_ARRAY_HEX)] */;
-
-struct netr_AccountBuffer {
-	DATA_BLOB blob;/* [flag(LIBNDR_FLAG_REMAINING)] */
-};
-
-/* bitmap netr_InfoFlags */
-#define NETLOGON_CTRL_REPL_NEEDED ( 0x0001 )
-#define NETLOGON_CTRL_REPL_IN_PROGRESS ( 0x0002 )
-#define NETLOGON_CTRL_REPL_FULL_SYNC ( 0x0004 )
-
-struct netr_NETLOGON_INFO_1 {
-	uint32_t flags;
-	uint32_t pdc_connection_status;
-};
-
-struct netr_NETLOGON_INFO_2 {
-	uint32_t flags;
-	uint32_t pdc_connection_status;
-	const char *trusted_dc_name;/* [unique,charset(UTF16)] */
-	uint32_t tc_connection_status;
-};
-
-struct netr_NETLOGON_INFO_3 {
-	uint32_t flags;
-	uint32_t logon_attempts;
-	uint32_t unknown1;
-	uint32_t unknown2;
-	uint32_t unknown3;
-	uint32_t unknown4;
-	uint32_t unknown5;
-};
-
-union netr_CONTROL_QUERY_INFORMATION {
-	struct netr_NETLOGON_INFO_1 *info1;/* [unique,case] */
-	struct netr_NETLOGON_INFO_2 *info2;/* [unique,case(2)] */
-	struct netr_NETLOGON_INFO_3 *info3;/* [unique,case(3)] */
-};
-
-enum netr_LogonControlCode
-#ifndef USE_UINT_ENUMS
- {
-	NETLOGON_CONTROL_SYNC=2,
-	NETLOGON_CONTROL_REDISCOVER=5,
-	NETLOGON_CONTROL_TC_QUERY=6,
-	NETLOGON_CONTROL_TRANSPORT_NOTIFY=7,
-	NETLOGON_CONTROL_SET_DBFLAG=65534
-}
-#else
- { __donnot_use_enum_netr_LogonControlCode=0x7FFFFFFF}
-#define NETLOGON_CONTROL_SYNC ( 2 )
-#define NETLOGON_CONTROL_REDISCOVER ( 5 )
-#define NETLOGON_CONTROL_TC_QUERY ( 6 )
-#define NETLOGON_CONTROL_TRANSPORT_NOTIFY ( 7 )
-#define NETLOGON_CONTROL_SET_DBFLAG ( 65534 )
-#endif
-;
-
-union netr_CONTROL_DATA_INFORMATION {
-	const char *domain;/* [unique,charset(UTF16),case(NETLOGON_CONTROL_REDISCOVER)] */
-	uint32_t debug_level;/* [case(NETLOGON_CONTROL_SET_DBFLAG)] */
-};
-
-/* bitmap netr_NegotiateFlags */
-#define NETLOGON_NEG_ACCOUNT_LOCKOUT ( 0x00000001 )
-#define NETLOGON_NEG_PERSISTENT_SAMREPL ( 0x00000002 )
-#define NETLOGON_NEG_ARCFOUR ( 0x00000004 )
-#define NETLOGON_NEG_PROMOTION_COUNT ( 0x00000008 )
-#define NETLOGON_NEG_CHANGELOG_BDC ( 0x00000010 )
-#define NETLOGON_NEG_FULL_SYNC_REPL ( 0x00000020 )
-#define NETLOGON_NEG_MULTIPLE_SIDS ( 0x00000040 )
-#define NETLOGON_NEG_REDO ( 0x00000080 )
-#define NETLOGON_NEG_PASSWORD_CHANGE_REFUSAL ( 0x00000100 )
-#define NETLOGON_NEG_SEND_PASSWORD_INFO_PDC ( 0x00000200 )
-#define NETLOGON_NEG_GENERIC_PASSTHROUGH ( 0x00000400 )
-#define NETLOGON_NEG_CONCURRENT_RPC ( 0x00000800 )
-#define NETLOGON_NEG_AVOID_ACCOUNT_DB_REPL ( 0x00001000 )
-#define NETLOGON_NEG_AVOID_SECURITYAUTH_DB_REPL ( 0x00002000 )
-#define NETLOGON_NEG_128BIT ( 0x00004000 )
-#define NETLOGON_NEG_TRANSITIVE_TRUSTS ( 0x00008000 )
-#define NETLOGON_NEG_DNS_DOMAIN_TRUSTS ( 0x00010000 )
-#define NETLOGON_NEG_PASSWORD_SET2 ( 0x00020000 )
-#define NETLOGON_NEG_GETDOMAININFO ( 0x00040000 )
-#define NETLOGON_NEG_CROSS_FOREST_TRUSTS ( 0x00080000 )
-#define NETLOGON_NEG_NEUTRALIZE_NT4_EMULATION ( 0x00100000 )
-#define NETLOGON_NEG_RODC_PASSTHROUGH ( 0x00200000 )
-#define NETLOGON_NEG_AUTHENTICATED_RPC_LSASS ( 0x20000000 )
-#define NETLOGON_NEG_SCHANNEL ( 0x40000000 )
-
-struct netr_Blob {
-	uint32_t length;
-	uint8_t *data;/* [unique,size_is(length)] */
-};
-
-/* bitmap netr_DsRGetDCName_flags */
-#define DS_FORCE_REDISCOVERY ( 0x00000001 )
-#define DS_DIRECTORY_SERVICE_REQUIRED ( 0x00000010 )
-#define DS_DIRECTORY_SERVICE_PREFERRED ( 0x00000020 )
-#define DS_GC_SERVER_REQUIRED ( 0x00000040 )
-#define DS_PDC_REQUIRED ( 0x00000080 )
-#define DS_BACKGROUND_ONLY ( 0x00000100 )
-#define DS_IP_REQUIRED ( 0x00000200 )
-#define DS_KDC_REQUIRED ( 0x00000400 )
-#define DS_TIMESERV_REQUIRED ( 0x00000800 )
-#define DS_WRITABLE_REQUIRED ( 0x00001000 )
-#define DS_GOOD_TIMESERV_PREFERRED ( 0x00002000 )
-#define DS_AVOID_SELF ( 0x00004000 )
-#define DS_ONLY_LDAP_NEEDED ( 0x00008000 )
-#define DS_IS_FLAT_NAME ( 0x00010000 )
-#define DS_IS_DNS_NAME ( 0x00020000 )
-#define DS_TRY_NEXTCLOSEST_SITE ( 0x00040000 )
-#define DS_DIRECTORY_SERVICE_6_REQUIRED ( 0x00080000 )
-#define DS_RETURN_DNS_NAME ( 0x40000000 )
-#define DS_RETURN_FLAT_NAME ( 0x80000000 )
-
-enum netr_DsRGetDCNameInfo_AddressType
-#ifndef USE_UINT_ENUMS
- {
-	DS_ADDRESS_TYPE_INET=1,
-	DS_ADDRESS_TYPE_NETBIOS=2
-}
-#else
- { __donnot_use_enum_netr_DsRGetDCNameInfo_AddressType=0x7FFFFFFF}
-#define DS_ADDRESS_TYPE_INET ( 1 )
-#define DS_ADDRESS_TYPE_NETBIOS ( 2 )
-#endif
-;
-
-/* bitmap netr_DsR_DcFlags */
-#define DS_SERVER_PDC ( NBT_SERVER_PDC )
-#define DS_SERVER_GC ( NBT_SERVER_GC )
-#define DS_SERVER_LDAP ( NBT_SERVER_LDAP )
-#define DS_SERVER_DS ( NBT_SERVER_DS )
-#define DS_SERVER_KDC ( NBT_SERVER_KDC )
-#define DS_SERVER_TIMESERV ( NBT_SERVER_TIMESERV )
-#define DS_SERVER_CLOSEST ( NBT_SERVER_CLOSEST )
-#define DS_SERVER_WRITABLE ( NBT_SERVER_WRITABLE )
-#define DS_SERVER_GOOD_TIMESERV ( NBT_SERVER_GOOD_TIMESERV )
-#define DS_SERVER_NDNC ( NBT_SERVER_NDNC )
-#define DS_SERVER_SELECT_SECRET_DOMAIN_6 ( NBT_SERVER_SELECT_SECRET_DOMAIN_6 )
-#define DS_SERVER_FULL_SECRET_DOMAIN_6 ( NBT_SERVER_FULL_SECRET_DOMAIN_6 )
-#define DS_DNS_CONTROLLER ( 0x20000000 )
-#define DS_DNS_DOMAIN ( 0x40000000 )
-#define DS_DNS_FOREST ( 0x80000000 )
-
-struct netr_DsRGetDCNameInfo {
-	const char *dc_unc;/* [unique,charset(UTF16)] */
-	const char *dc_address;/* [unique,charset(UTF16)] */
-	enum netr_DsRGetDCNameInfo_AddressType dc_address_type;
-	struct GUID domain_guid;
-	const char *domain_name;/* [unique,charset(UTF16)] */
-	const char *forest_name;/* [unique,charset(UTF16)] */
-	uint32_t dc_flags;
-	const char *dc_site_name;/* [unique,charset(UTF16)] */
-	const char *client_site_name;/* [unique,charset(UTF16)] */
-}/* [public] */;
-
-struct netr_BinaryString {
-	uint16_t length;
-	uint16_t size;
-	uint16_t *data;/* [unique,length_is(length/2),size_is(size/2)] */
-}/* [flag(LIBNDR_PRINT_ARRAY_HEX)] */;
-
-struct netr_DomainQuery1 {
-	struct netr_Blob blob;
-	const char *workstation_domain;/* [unique,charset(UTF16)] */
-	const char *workstation_site;/* [unique,charset(UTF16)] */
-	const char *unknown1;/* [unique,charset(UTF16)] */
-	const char *unknown2;/* [unique,charset(UTF16)] */
-	const char *unknown3;/* [unique,charset(UTF16)] */
-	const char *unknown4;/* [unique,charset(UTF16)] */
-	struct netr_BinaryString blob2;
-	struct lsa_String product;
-	struct lsa_String unknown5;
-	struct lsa_String unknown6;
-	uint32_t unknown7[4];
-};
-
-union netr_DomainQuery {
-	struct netr_DomainQuery1 *query1;/* [unique,case] */
-};
-
-struct netr_DomainTrustInfo {
-	struct lsa_String domainname;
-	struct lsa_String fulldomainname;
-	struct lsa_String forest;
-	struct GUID guid;
-	struct dom_sid2 *sid;/* [unique] */
-	struct netr_BinaryString unknown1[4];
-	uint32_t unknown[4];
-};
-
-struct netr_DomainInfo1 {
-	struct netr_DomainTrustInfo domaininfo;
-	uint32_t num_trusts;
-	struct netr_DomainTrustInfo *trusts;/* [unique,size_is(num_trusts)] */
-	uint32_t unknown[14];
-};
-
-union netr_DomainInfo {
-	struct netr_DomainInfo1 *info1;/* [unique,case] */
-};
-
-struct netr_CryptPassword {
-	uint8_t data[512];
-	uint32_t length;
-}/* [flag(LIBNDR_PRINT_ARRAY_HEX)] */;
-
-struct netr_DsRAddressToSitenamesWCtr {
-	uint32_t count;
-	struct lsa_String *sitename;/* [unique,size_is(count)] */
-};
-
-struct netr_DsRAddress {
-	uint8_t *buffer;/* [unique,size_is(size)] */
-	uint32_t size;
-};
-
-/* bitmap netr_TrustFlags */
-#define NETR_TRUST_FLAG_IN_FOREST ( 0x00000001 )
-#define NETR_TRUST_FLAG_OUTBOUND ( 0x00000002 )
-#define NETR_TRUST_FLAG_TREEROOT ( 0x00000004 )
-#define NETR_TRUST_FLAG_PRIMARY ( 0x00000008 )
-#define NETR_TRUST_FLAG_NATIVE ( 0x00000010 )
-#define NETR_TRUST_FLAG_INBOUND ( 0x00000020 )
-
-enum netr_TrustType
-#ifndef USE_UINT_ENUMS
- {
-	NETR_TRUST_TYPE_DOWNLEVEL=1,
-	NETR_TRUST_TYPE_UPLEVEL=2,
-	NETR_TRUST_TYPE_MIT=3,
-	NETR_TRUST_TYPE_DCE=4
-}
-#else
- { __donnot_use_enum_netr_TrustType=0x7FFFFFFF}
-#define NETR_TRUST_TYPE_DOWNLEVEL ( 1 )
-#define NETR_TRUST_TYPE_UPLEVEL ( 2 )
-#define NETR_TRUST_TYPE_MIT ( 3 )
-#define NETR_TRUST_TYPE_DCE ( 4 )
-#endif
-;
-
-/* bitmap netr_TrustAttributes */
-#define NETR_TRUST_ATTRIBUTE_NON_TRANSITIVE ( 0x00000001 )
-#define NETR_TRUST_ATTRIBUTE_UPLEVEL_ONLY ( 0x00000002 )
-#define NETR_TRUST_ATTRIBUTE_QUARANTINED_DOMAIN ( 0x00000004 )
-#define NETR_TRUST_ATTRIBUTE_FOREST_TRANSITIVE ( 0x00000008 )
-#define NETR_TRUST_ATTRIBUTE_CROSS_ORGANIZATION ( 0x00000010 )
-#define NETR_TRUST_ATTRIBUTE_WITHIN_FOREST ( 0x00000020 )
-#define NETR_TRUST_ATTRIBUTE_TREAT_AS_EXTERNAL ( 0x00000040 )
-
-struct netr_DomainTrust {
-	const char *netbios_name;/* [unique,charset(UTF16)] */
-	const char *dns_name;/* [unique,charset(UTF16)] */
-	uint32_t trust_flags;
-	uint32_t parent_index;
-	enum netr_TrustType trust_type;
-	uint32_t trust_attributes;
-	struct dom_sid2 *sid;/* [unique] */
-	struct GUID guid;
-};
-
-struct netr_DomainTrustList {
-	uint32_t count;
-	struct netr_DomainTrust *array;/* [unique,size_is(count)] */
-};
-
-struct netr_DsRAddressToSitenamesExWCtr {
-	uint32_t count;
-	struct lsa_String *sitename;/* [unique,size_is(count)] */
-	struct lsa_String *subnetname;/* [unique,size_is(count)] */
-};
-
-struct DcSitesCtr {
-	uint32_t num_sites;
-	struct lsa_String *sites;/* [unique,size_is(num_sites)] */
-};
-
-
-struct netr_LogonUasLogon {
-	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *account_name;/* [charset(UTF16)] */
-		const char *workstation;/* [charset(UTF16)] */
-	} in;
-
-	struct {
-		struct netr_UasInfo *info;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_LogonUasLogoff {
-	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *account_name;/* [charset(UTF16)] */
-		const char *workstation;/* [charset(UTF16)] */
-	} in;
-
-	struct {
-		struct netr_UasLogoffInfo *info;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_LogonSamLogon {
-	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *computer_name;/* [unique,charset(UTF16)] */
-		struct netr_Authenticator *credential;/* [unique] */
-		enum netr_LogonLevel logon_level;
-		union netr_LogonInfo *logon;/* [ref,switch_is(logon_level)] */
-		uint16_t validation_level;
-		struct netr_Authenticator *return_authenticator;/* [unique] */
-	} in;
-
-	struct {
-		union netr_Validation *validation;/* [ref,switch_is(validation_level)] */
-		uint8_t *authoritative;/* [ref] */
-		struct netr_Authenticator *return_authenticator;/* [unique] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct netr_LogonSamLogoff {
-	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *computer_name;/* [unique,charset(UTF16)] */
-		struct netr_Authenticator *credential;/* [unique] */
-		enum netr_LogonLevel logon_level;
-		union netr_LogonInfo logon;/* [switch_is(logon_level)] */
-		struct netr_Authenticator *return_authenticator;/* [unique] */
-	} in;
-
-	struct {
-		struct netr_Authenticator *return_authenticator;/* [unique] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct netr_ServerReqChallenge {
-	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *computer_name;/* [charset(UTF16)] */
-		struct netr_Credential *credentials;/* [ref] */
-	} in;
-
-	struct {
-		struct netr_Credential *return_credentials;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct netr_ServerAuthenticate {
-	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *account_name;/* [charset(UTF16)] */
-		enum netr_SchannelType secure_channel_type;
-		const char *computer_name;/* [charset(UTF16)] */
-		struct netr_Credential *credentials;/* [ref] */
-	} in;
-
-	struct {
-		struct netr_Credential *return_credentials;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct netr_ServerPasswordSet {
-	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *account_name;/* [charset(UTF16)] */
-		enum netr_SchannelType secure_channel_type;
-		const char *computer_name;/* [charset(UTF16)] */
-		struct netr_Authenticator *credential;/* [ref] */
-		struct samr_Password *new_password;/* [ref] */
-	} in;
-
-	struct {
-		struct netr_Authenticator *return_authenticator;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct netr_DatabaseDeltas {
-	struct {
-		const char *logon_server;/* [charset(UTF16)] */
-		const char *computername;/* [charset(UTF16)] */
-		struct netr_Authenticator *credential;/* [ref] */
-		enum netr_SamDatabaseID database_id;
-		uint32_t preferredmaximumlength;
-		struct netr_Authenticator *return_authenticator;/* [ref] */
-		uint64_t *sequence_num;/* [ref] */
-	} in;
-
-	struct {
-		struct netr_DELTA_ENUM_ARRAY **delta_enum_array;/* [ref] */
-		struct netr_Authenticator *return_authenticator;/* [ref] */
-		uint64_t *sequence_num;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct netr_DatabaseSync {
-	struct {
-		const char *logon_server;/* [charset(UTF16)] */
-		const char *computername;/* [charset(UTF16)] */
-		struct netr_Authenticator credential;
-		enum netr_SamDatabaseID database_id;
-		uint32_t preferredmaximumlength;
-		struct netr_Authenticator *return_authenticator;/* [ref] */
-		uint32_t *sync_context;/* [ref] */
-	} in;
-
-	struct {
-		struct netr_DELTA_ENUM_ARRAY *delta_enum_array;/* [ref] */
-		struct netr_Authenticator *return_authenticator;/* [ref] */
-		uint32_t *sync_context;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct netr_AccountDeltas {
-	struct {
-		const char *logon_server;/* [unique,charset(UTF16)] */
-		const char *computername;/* [charset(UTF16)] */
-		struct netr_Authenticator credential;
-		struct netr_UAS_INFO_0 uas;
-		uint32_t count;
-		uint32_t level;
-		uint32_t buffersize;
-		struct netr_Authenticator *return_authenticator;/* [ref] */
-	} in;
-
-	struct {
-		struct netr_AccountBuffer *buffer;/* [ref,subcontext(4)] */
-		uint32_t *count_returned;/* [ref] */
-		uint32_t *total_entries;/* [ref] */
-		struct netr_UAS_INFO_0 *recordid;/* [ref] */
-		struct netr_Authenticator *return_authenticator;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct netr_AccountSync {
-	struct {
-		const char *logon_server;/* [unique,charset(UTF16)] */
-		const char *computername;/* [charset(UTF16)] */
-		struct netr_Authenticator credential;
-		uint32_t reference;
-		uint32_t level;
-		uint32_t buffersize;
-		struct netr_Authenticator *return_authenticator;/* [ref] */
-		struct netr_UAS_INFO_0 *recordid;/* [ref] */
-	} in;
-
-	struct {
-		struct netr_AccountBuffer *buffer;/* [ref,subcontext(4)] */
-		uint32_t *count_returned;/* [ref] */
-		uint32_t *total_entries;/* [ref] */
-		uint32_t *next_reference;/* [ref] */
-		struct netr_Authenticator *return_authenticator;/* [ref] */
-		struct netr_UAS_INFO_0 *recordid;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct netr_GetDcName {
-	struct {
-		const char *logon_server;/* [charset(UTF16)] */
-		const char *domainname;/* [unique,charset(UTF16)] */
-	} in;
-
-	struct {
-		const char **dcname;/* [ref,charset(UTF16)] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_LogonControl {
-	struct {
-		const char *logon_server;/* [unique,charset(UTF16)] */
-		enum netr_LogonControlCode function_code;
-		uint32_t level;
-	} in;
-
-	struct {
-		union netr_CONTROL_QUERY_INFORMATION *info;/* [ref,switch_is(level)] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_GetAnyDCName {
-	struct {
-		const char *logon_server;/* [unique,charset(UTF16)] */
-		const char *domainname;/* [unique,charset(UTF16)] */
-	} in;
-
-	struct {
-		const char **dcname;/* [ref,charset(UTF16)] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_LogonControl2 {
-	struct {
-		const char *logon_server;/* [unique,charset(UTF16)] */
-		enum netr_LogonControlCode function_code;
-		uint32_t level;
-		union netr_CONTROL_DATA_INFORMATION *data;/* [ref,switch_is(function_code)] */
-	} in;
-
-	struct {
-		union netr_CONTROL_QUERY_INFORMATION *query;/* [ref,switch_is(level)] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_ServerAuthenticate2 {
-	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *account_name;/* [charset(UTF16)] */
-		enum netr_SchannelType secure_channel_type;
-		const char *computer_name;/* [charset(UTF16)] */
-		struct netr_Credential *credentials;/* [ref] */
-		uint32_t *negotiate_flags;/* [ref] */
-	} in;
-
-	struct {
-		struct netr_Credential *return_credentials;/* [ref] */
-		uint32_t *negotiate_flags;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct netr_DatabaseSync2 {
-	struct {
-		const char *logon_server;/* [charset(UTF16)] */
-		const char *computername;/* [charset(UTF16)] */
-		struct netr_Authenticator *credential;/* [ref] */
-		enum netr_SamDatabaseID database_id;
-		uint16_t restart_state;
-		uint32_t preferredmaximumlength;
-		struct netr_Authenticator *return_authenticator;/* [ref] */
-		uint32_t *sync_context;/* [ref] */
-	} in;
-
-	struct {
-		struct netr_DELTA_ENUM_ARRAY **delta_enum_array;/* [ref] */
-		struct netr_Authenticator *return_authenticator;/* [ref] */
-		uint32_t *sync_context;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct netr_DatabaseRedo {
-	struct {
-		const char *logon_server;/* [charset(UTF16)] */
-		const char *computername;/* [charset(UTF16)] */
-		struct netr_Authenticator credential;
-		uint8_t *change_log_entry;/* [unique,size_is(change_log_entry_size)] */
-		uint32_t change_log_entry_size;
-		struct netr_Authenticator *return_authenticator;/* [ref] */
-	} in;
-
-	struct {
-		struct netr_DELTA_ENUM_ARRAY *delta_enum_array;/* [ref] */
-		struct netr_Authenticator *return_authenticator;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct netr_LogonControl2Ex {
-	struct {
-		const char *logon_server;/* [unique,charset(UTF16)] */
-		uint32_t function_code;
-		uint32_t level;
-		union netr_CONTROL_DATA_INFORMATION data;/* [switch_is(function_code)] */
-	} in;
-
-	struct {
-		union netr_CONTROL_QUERY_INFORMATION *query;/* [ref,switch_is(level)] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_NetrEnumerateTrustedDomains {
-	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-	} in;
-
-	struct {
-		struct netr_Blob *trusted_domains_blob;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_DsRGetDCName {
-	struct {
-		const char *server_unc;/* [unique,charset(UTF16)] */
-		const char *domain_name;/* [unique,charset(UTF16)] */
-		struct GUID *domain_guid;/* [unique] */
-		struct GUID *site_guid;/* [unique] */
-		uint32_t flags;
-	} in;
-
-	struct {
-		struct netr_DsRGetDCNameInfo **info;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_NETRLOGONDUMMYROUTINE1 {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_NETRLOGONSETSERVICEBITS {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_LogonGetTrustRid {
-	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *domain_name;/* [unique,charset(UTF16)] */
-	} in;
-
-	struct {
-		uint32_t *rid;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_NETRLOGONCOMPUTESERVERDIGEST {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_NETRLOGONCOMPUTECLIENTDIGEST {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_ServerAuthenticate3 {
-	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *account_name;/* [charset(UTF16)] */
-		enum netr_SchannelType secure_channel_type;
-		const char *computer_name;/* [charset(UTF16)] */
-		struct netr_Credential *credentials;/* [ref] */
-		uint32_t *negotiate_flags;/* [ref] */
-	} in;
-
-	struct {
-		uint32_t *rid;/* [ref] */
-		struct netr_Credential *credentials;/* [ref] */
-		uint32_t *negotiate_flags;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct netr_DsRGetDCNameEx {
-	struct {
-		const char *server_unc;/* [unique,charset(UTF16)] */
-		const char *domain_name;/* [unique,charset(UTF16)] */
-		struct GUID *domain_guid;/* [unique] */
-		const char *site_name;/* [unique,charset(UTF16)] */
-		uint32_t flags;
-	} in;
-
-	struct {
-		struct netr_DsRGetDCNameInfo **info;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_DsRGetSiteName {
-	struct {
-		const char *computer_name;/* [unique,charset(UTF16)] */
-	} in;
-
-	struct {
-		const char **site;/* [ref,charset(UTF16)] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_LogonGetDomainInfo {
-	struct {
-		const char *server_name;/* [charset(UTF16)] */
-		const char *computer_name;/* [unique,charset(UTF16)] */
-		struct netr_Authenticator *credential;/* [ref] */
-		uint32_t level;
-		union netr_DomainQuery query;/* [switch_is(level)] */
-		struct netr_Authenticator *return_authenticator;/* [ref] */
-	} in;
-
-	struct {
-		union netr_DomainInfo *info;/* [ref,switch_is(level)] */
-		struct netr_Authenticator *return_authenticator;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct netr_ServerPasswordSet2 {
-	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *account_name;/* [charset(UTF16)] */
-		enum netr_SchannelType secure_channel_type;
-		const char *computer_name;/* [charset(UTF16)] */
-		struct netr_Authenticator credential;
-		struct netr_CryptPassword new_password;
-	} in;
-
-	struct {
-		struct netr_Authenticator *return_authenticator;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct netr_ServerPasswordGet {
-	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *account_name;/* [charset(UTF16)] */
-		enum netr_SchannelType secure_channel_type;
-		const char *computer_name;/* [charset(UTF16)] */
-		struct netr_Authenticator *credential;/* [ref] */
-	} in;
-
-	struct {
-		struct netr_Authenticator *return_authenticator;/* [ref] */
-		struct samr_Password *password;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_NETRLOGONSENDTOSAM {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_DsRAddressToSitenamesW {
-	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		uint32_t count;/* [range(0,32000)] */
-		struct netr_DsRAddress *addresses;/* [ref,size_is(count)] */
-	} in;
-
-	struct {
-		struct netr_DsRAddressToSitenamesWCtr **ctr;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_DsRGetDCNameEx2 {
-	struct {
-		const char *server_unc;/* [unique,charset(UTF16)] */
-		const char *client_account;/* [unique,charset(UTF16)] */
-		uint32_t mask;
-		const char *domain_name;/* [unique,charset(UTF16)] */
-		struct GUID *domain_guid;/* [unique] */
-		const char *site_name;/* [unique,charset(UTF16)] */
-		uint32_t flags;
-	} in;
-
-	struct {
-		struct netr_DsRGetDCNameInfo **info;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_NetrEnumerateTrustedDomainsEx {
-	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-	} in;
-
-	struct {
-		struct netr_DomainTrustList *dom_trust_list;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_DsRAddressToSitenamesExW {
-	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		uint32_t count;/* [range(0,32000)] */
-		struct netr_DsRAddress *addresses;/* [ref,size_is(count)] */
-	} in;
-
-	struct {
-		struct netr_DsRAddressToSitenamesExWCtr **ctr;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_DsrGetDcSiteCoverageW {
-	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-	} in;
-
-	struct {
-		struct DcSitesCtr *ctr;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_LogonSamLogonEx {
-	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *computer_name;/* [unique,charset(UTF16)] */
-		enum netr_LogonLevel logon_level;
-		union netr_LogonInfo *logon;/* [ref,switch_is(logon_level)] */
-		uint16_t validation_level;
-		uint32_t *flags;/* [ref] */
-	} in;
-
-	struct {
-		union netr_Validation *validation;/* [ref,switch_is(validation_level)] */
-		uint8_t *authoritative;/* [ref] */
-		uint32_t *flags;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct netr_DsrEnumerateDomainTrusts {
-	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		uint32_t trust_flags;
-	} in;
-
-	struct {
-		struct netr_DomainTrustList *trusts;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_DsrDeregisterDNSHostRecords {
-	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *domain;/* [unique,charset(UTF16)] */
-		struct GUID *domain_guid;/* [unique] */
-		struct GUID *dsa_guid;/* [unique] */
-		const char *dns_host;/* [ref,charset(UTF16)] */
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_ServerTrustPasswordsGet {
-	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *account_name;/* [charset(UTF16)] */
-		enum netr_SchannelType secure_channel_type;
-		const char *computer_name;/* [charset(UTF16)] */
-		struct netr_Authenticator *credential;/* [ref] */
-	} in;
-
-	struct {
-		struct netr_Authenticator *return_authenticator;/* [ref] */
-		struct samr_Password *password;/* [ref] */
-		struct samr_Password *password2;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct netr_DsRGetForestTrustInformation {
-	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *trusted_domain_name;/* [unique,charset(UTF16)] */
-		uint32_t flags;
-	} in;
-
-	struct {
-		struct lsa_ForestTrustInformation **forest_trust_info;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_GetForestTrustInformation {
-	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *trusted_domain_name;/* [ref,charset(UTF16)] */
-		struct netr_Authenticator *credential;/* [ref] */
-		uint32_t flags;
-	} in;
-
-	struct {
-		struct netr_Authenticator *return_authenticator;/* [ref] */
-		struct lsa_ForestTrustInformation **forest_trust_info;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct netr_LogonSamLogonWithFlags {
-	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *computer_name;/* [unique,charset(UTF16)] */
-		struct netr_Authenticator *credential;/* [unique] */
-		enum netr_LogonLevel logon_level;
-		union netr_LogonInfo logon;/* [switch_is(logon_level)] */
-		uint16_t validation_level;
-		struct netr_Authenticator *return_authenticator;/* [unique] */
-		uint32_t *flags;/* [ref] */
-	} in;
-
-	struct {
-		union netr_Validation *validation;/* [ref,switch_is(validation_level)] */
-		uint8_t *authoritative;/* [ref] */
-		struct netr_Authenticator *return_authenticator;/* [unique] */
-		uint32_t *flags;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct netr_NETRSERVERGETTRUSTINFO {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-#endif /* _HEADER_netlogon */

Modified: branches/samba/upstream/source/librpc/gen_ndr/notify.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/notify.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/notify.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,7 +1,5 @@
 /* header auto-generated by pidl */
 
-#include <stdint.h>
-
 #ifndef _HEADER_notify
 #define _HEADER_notify
 

Deleted: branches/samba/upstream/source/librpc/gen_ndr/ntsvcs.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/ntsvcs.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/ntsvcs.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,568 +0,0 @@
-/* header auto-generated by pidl */
-
-#include <stdint.h>
-
-#ifndef _HEADER_ntsvcs
-#define _HEADER_ntsvcs
-
-struct PNP_HwProfInfo {
-	uint32_t unknown1;
-	uint16_t unknown2[160];
-	uint32_t unknown3;
-};
-
-
-struct PNP_Disconnect {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_Connect {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetVersion {
-	struct {
-		uint16_t *version;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetGlobalState {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_InitDetection {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_ReportLogOn {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_ValidateDeviceInstance {
-	struct {
-		const char *devicepath;/* [ref,charset(UTF16)] */
-		uint32_t flags;
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetRootDeviceInstance {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetRelatedDeviceInstance {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_EnumerateSubKeys {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetDeviceList {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetDeviceListSize {
-	struct {
-		const char *devicename;/* [unique,charset(UTF16)] */
-		uint32_t flags;
-	} in;
-
-	struct {
-		uint32_t *size;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetDepth {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetDeviceRegProp {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_SetDeviceRegProp {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetClassInstance {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_CreateKey {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_DeleteRegistryKey {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetClassCount {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetClassName {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_DeleteClassKey {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetInterfaceDeviceAlias {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetInterfaceDeviceList {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetInterfaceDeviceListSize {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_RegisterDeviceClassAssociation {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_UnregisterDeviceClassAssociation {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetClassRegProp {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_SetClassRegProp {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_CreateDevInst {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_DeviceInstanceAction {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetDeviceStatus {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_SetDeviceProblem {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_DisableDevInst {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_UninstallDevInst {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_AddID {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_RegisterDriver {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_QueryRemove {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_RequestDeviceEject {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_IsDockStationPresent {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_RequestEjectPC {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_HwProfFlags {
-	struct {
-		uint32_t unknown1;
-		const char *devicepath;/* [ref,charset(UTF16)] */
-		uint32_t unknown2;
-		const char *unknown5;/* [unique,charset(UTF16)] */
-		uint32_t unknown6;
-		uint32_t unknown7;
-		uint32_t *unknown3;/* [ref] */
-		uint16_t *unknown4;/* [unique] */
-	} in;
-
-	struct {
-		const char **unknown5a;/* [unique,charset(UTF16)] */
-		uint32_t *unknown3;/* [ref] */
-		uint16_t *unknown4;/* [unique] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetHwProfInfo {
-	struct {
-		uint32_t idx;
-		uint32_t unknown1;
-		uint32_t unknown2;
-		struct PNP_HwProfInfo *info;/* [ref] */
-	} in;
-
-	struct {
-		struct PNP_HwProfInfo *info;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_AddEmptyLogConf {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_FreeLogConf {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetFirstLogConf {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetNextLogConf {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetLogConfPriority {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_AddResDes {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_FreeResDes {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetNextResDes {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetResDesData {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetResDesDataSize {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_ModifyResDes {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_DetectResourceLimit {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_QueryResConfList {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_SetHwProf {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_QueryArbitratorFreeData {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_QueryArbitratorFreeSize {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_RunDetection {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_RegisterNotification {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_UnregisterNotification {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetCustomDevProp {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetVersionInternal {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetBlockedDriverInfo {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct PNP_GetServerSideDeviceInstallFlags {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-#endif /* _HEADER_ntsvcs */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/samr.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/samr.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/samr.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,1759 +0,0 @@
-/* header auto-generated by pidl */
-
-#include <stdint.h>
-
-#include "librpc/gen_ndr/misc.h"
-#include "librpc/gen_ndr/lsa.h"
-#include "librpc/gen_ndr/security.h"
-#ifndef _HEADER_samr
-#define _HEADER_samr
-
-#define MAX_SAM_ENTRIES_W2K	( 0x400 )
-#define MAX_SAM_ENTRIES_W95	( 50 )
-#define SAMR_ENUM_USERS_MULTIPLIER	( 54 )
-#define PASS_MUST_CHANGE_AT_NEXT_LOGON	( 0x01 )
-#define PASS_DONT_CHANGE_AT_NEXT_LOGON	( 0x00 )
-/* bitmap samr_AcctFlags */
-#define ACB_DISABLED ( 0x00000001 )
-#define ACB_HOMDIRREQ ( 0x00000002 )
-#define ACB_PWNOTREQ ( 0x00000004 )
-#define ACB_TEMPDUP ( 0x00000008 )
-#define ACB_NORMAL ( 0x00000010 )
-#define ACB_MNS ( 0x00000020 )
-#define ACB_DOMTRUST ( 0x00000040 )
-#define ACB_WSTRUST ( 0x00000080 )
-#define ACB_SVRTRUST ( 0x00000100 )
-#define ACB_PWNOEXP ( 0x00000200 )
-#define ACB_AUTOLOCK ( 0x00000400 )
-#define ACB_ENC_TXT_PWD_ALLOWED ( 0x00000800 )
-#define ACB_SMARTCARD_REQUIRED ( 0x00001000 )
-#define ACB_TRUSTED_FOR_DELEGATION ( 0x00002000 )
-#define ACB_NOT_DELEGATED ( 0x00004000 )
-#define ACB_USE_DES_KEY_ONLY ( 0x00008000 )
-#define ACB_DONT_REQUIRE_PREAUTH ( 0x00010000 )
-#define ACB_PW_EXPIRED ( 0x00020000 )
-#define ACB_NO_AUTH_DATA_REQD ( 0x00080000 )
-
-/* bitmap samr_ConnectAccessMask */
-#define SAMR_ACCESS_CONNECT_TO_SERVER ( 0x00000001 )
-#define SAMR_ACCESS_SHUTDOWN_SERVER ( 0x00000002 )
-#define SAMR_ACCESS_INITIALIZE_SERVER ( 0x00000004 )
-#define SAMR_ACCESS_CREATE_DOMAIN ( 0x00000008 )
-#define SAMR_ACCESS_ENUM_DOMAINS ( 0x00000010 )
-#define SAMR_ACCESS_OPEN_DOMAIN ( 0x00000020 )
-
-/* bitmap samr_UserAccessMask */
-#define SAMR_USER_ACCESS_GET_NAME_ETC ( 0x00000001 )
-#define SAMR_USER_ACCESS_GET_LOCALE ( 0x00000002 )
-#define SAMR_USER_ACCESS_SET_LOC_COM ( 0x00000004 )
-#define SAMR_USER_ACCESS_GET_LOGONINFO ( 0x00000008 )
-#define SAMR_USER_ACCESS_GET_ATTRIBUTES ( 0x00000010 )
-#define SAMR_USER_ACCESS_SET_ATTRIBUTES ( 0x00000020 )
-#define SAMR_USER_ACCESS_CHANGE_PASSWORD ( 0x00000040 )
-#define SAMR_USER_ACCESS_SET_PASSWORD ( 0x00000080 )
-#define SAMR_USER_ACCESS_GET_GROUPS ( 0x00000100 )
-#define SAMR_USER_ACCESS_GET_GROUP_MEMBERSHIP ( 0x00000200 )
-#define SAMR_USER_ACCESS_CHANGE_GROUP_MEMBERSHIP ( 0x00000400 )
-
-/* bitmap samr_DomainAccessMask */
-#define SAMR_DOMAIN_ACCESS_LOOKUP_INFO_1 ( 0x00000001 )
-#define SAMR_DOMAIN_ACCESS_SET_INFO_1 ( 0x00000002 )
-#define SAMR_DOMAIN_ACCESS_LOOKUP_INFO_2 ( 0x00000004 )
-#define SAMR_DOMAIN_ACCESS_SET_INFO_2 ( 0x00000008 )
-#define SAMR_DOMAIN_ACCESS_CREATE_USER ( 0x00000010 )
-#define SAMR_DOMAIN_ACCESS_CREATE_GROUP ( 0x00000020 )
-#define SAMR_DOMAIN_ACCESS_CREATE_ALIAS ( 0x00000040 )
-#define SAMR_DOMAIN_ACCESS_LOOKUP_ALIAS ( 0x00000080 )
-#define SAMR_DOMAIN_ACCESS_ENUM_ACCOUNTS ( 0x00000100 )
-#define SAMR_DOMAIN_ACCESS_OPEN_ACCOUNT ( 0x00000200 )
-#define SAMR_DOMAIN_ACCESS_SET_INFO_3 ( 0x00000400 )
-
-/* bitmap samr_GroupAccessMask */
-#define SAMR_GROUP_ACCESS_LOOKUP_INFO ( 0x00000001 )
-#define SAMR_GROUP_ACCESS_SET_INFO ( 0x00000002 )
-#define SAMR_GROUP_ACCESS_ADD_MEMBER ( 0x00000004 )
-#define SAMR_GROUP_ACCESS_REMOVE_MEMBER ( 0x00000008 )
-#define SAMR_GROUP_ACCESS_GET_MEMBERS ( 0x00000010 )
-
-/* bitmap samr_AliasAccessMask */
-#define SAMR_ALIAS_ACCESS_ADD_MEMBER ( 0x00000001 )
-#define SAMR_ALIAS_ACCESS_REMOVE_MEMBER ( 0x00000002 )
-#define SAMR_ALIAS_ACCESS_GET_MEMBERS ( 0x00000004 )
-#define SAMR_ALIAS_ACCESS_LOOKUP_INFO ( 0x00000008 )
-#define SAMR_ALIAS_ACCESS_SET_INFO ( 0x00000010 )
-
-struct samr_SamEntry {
-	uint32_t idx;
-	struct lsa_String name;
-};
-
-struct samr_SamArray {
-	uint32_t count;
-	struct samr_SamEntry *entries;/* [unique,size_is(count)] */
-};
-
-enum samr_Role
-#ifndef USE_UINT_ENUMS
- {
-	SAMR_ROLE_STANDALONE=0,
-	SAMR_ROLE_DOMAIN_MEMBER=1,
-	SAMR_ROLE_DOMAIN_BDC=2,
-	SAMR_ROLE_DOMAIN_PDC=3
-}
-#else
- { __donnot_use_enum_samr_Role=0x7FFFFFFF}
-#define SAMR_ROLE_STANDALONE ( 0 )
-#define SAMR_ROLE_DOMAIN_MEMBER ( 1 )
-#define SAMR_ROLE_DOMAIN_BDC ( 2 )
-#define SAMR_ROLE_DOMAIN_PDC ( 3 )
-#endif
-;
-
-/* bitmap samr_PasswordProperties */
-#define DOMAIN_PASSWORD_COMPLEX ( 0x00000001 )
-#define DOMAIN_PASSWORD_NO_ANON_CHANGE ( 0x00000002 )
-#define DOMAIN_PASSWORD_NO_CLEAR_CHANGE ( 0x00000004 )
-#define DOMAIN_PASSWORD_LOCKOUT_ADMINS ( 0x00000008 )
-#define DOMAIN_PASSWORD_STORE_CLEARTEXT ( 0x00000010 )
-#define DOMAIN_REFUSE_PASSWORD_CHANGE ( 0x00000020 )
-
-struct samr_DomInfo1 {
-	uint16_t min_password_length;
-	uint16_t password_history_length;
-	uint32_t password_properties;
-	int64_t max_password_age;
-	int64_t min_password_age;
-};
-
-struct samr_DomInfo2 {
-	NTTIME force_logoff_time;
-	struct lsa_String comment;
-	struct lsa_String domain_name;
-	struct lsa_String primary;
-	uint64_t sequence_num;
-	uint32_t unknown2;
-	enum samr_Role role;
-	uint32_t unknown3;
-	uint32_t num_users;
-	uint32_t num_groups;
-	uint32_t num_aliases;
-};
-
-struct samr_DomInfo3 {
-	NTTIME force_logoff_time;
-};
-
-struct samr_DomInfo4 {
-	struct lsa_String comment;
-};
-
-struct samr_DomInfo5 {
-	struct lsa_String domain_name;
-};
-
-struct samr_DomInfo6 {
-	struct lsa_String primary;
-};
-
-struct samr_DomInfo7 {
-	enum samr_Role role;
-};
-
-struct samr_DomInfo8 {
-	uint64_t sequence_num;
-	NTTIME domain_create_time;
-};
-
-struct samr_DomInfo9 {
-	uint32_t unknown;
-};
-
-struct samr_DomInfo11 {
-	struct samr_DomInfo2 info2;
-	uint64_t lockout_duration;
-	uint64_t lockout_window;
-	uint16_t lockout_threshold;
-};
-
-struct samr_DomInfo12 {
-	uint64_t lockout_duration;
-	uint64_t lockout_window;
-	uint16_t lockout_threshold;
-};
-
-struct samr_DomInfo13 {
-	uint64_t sequence_num;
-	NTTIME domain_create_time;
-	uint32_t unknown1;
-	uint32_t unknown2;
-};
-
-union samr_DomainInfo {
-	struct samr_DomInfo1 info1;/* [case] */
-	struct samr_DomInfo2 info2;/* [case(2)] */
-	struct samr_DomInfo3 info3;/* [case(3)] */
-	struct samr_DomInfo4 info4;/* [case(4)] */
-	struct samr_DomInfo5 info5;/* [case(5)] */
-	struct samr_DomInfo6 info6;/* [case(6)] */
-	struct samr_DomInfo7 info7;/* [case(7)] */
-	struct samr_DomInfo8 info8;/* [case(8)] */
-	struct samr_DomInfo9 info9;/* [case(9)] */
-	struct samr_DomInfo11 info11;/* [case(11)] */
-	struct samr_DomInfo12 info12;/* [case(12)] */
-	struct samr_DomInfo13 info13;/* [case(13)] */
-}/* [switch_type(uint16)] */;
-
-struct samr_Ids {
-	uint32_t count;/* [range(0,1024)] */
-	uint32_t *ids;/* [unique,size_is(count)] */
-};
-
-/* bitmap samr_GroupAttrs */
-#define SE_GROUP_MANDATORY ( 0x00000001 )
-#define SE_GROUP_ENABLED_BY_DEFAULT ( 0x00000002 )
-#define SE_GROUP_ENABLED ( 0x00000004 )
-#define SE_GROUP_OWNER ( 0x00000008 )
-#define SE_GROUP_USE_FOR_DENY_ONLY ( 0x00000010 )
-#define SE_GROUP_RESOURCE ( 0x20000000 )
-#define SE_GROUP_LOGON_ID ( 0xC0000000 )
-
-struct samr_GroupInfoAll {
-	struct lsa_String name;
-	uint32_t attributes;
-	uint32_t num_members;
-	struct lsa_String description;
-};
-
-struct samr_GroupInfoAttributes {
-	uint32_t attributes;
-};
-
-struct samr_GroupInfoDescription {
-	struct lsa_String description;
-};
-
-enum samr_GroupInfoEnum
-#ifndef USE_UINT_ENUMS
- {
-	GROUPINFOALL=1,
-	GROUPINFONAME=2,
-	GROUPINFOATTRIBUTES=3,
-	GROUPINFODESCRIPTION=4,
-	GROUPINFOALL2=5
-}
-#else
- { __donnot_use_enum_samr_GroupInfoEnum=0x7FFFFFFF}
-#define GROUPINFOALL ( 1 )
-#define GROUPINFONAME ( 2 )
-#define GROUPINFOATTRIBUTES ( 3 )
-#define GROUPINFODESCRIPTION ( 4 )
-#define GROUPINFOALL2 ( 5 )
-#endif
-;
-
-union samr_GroupInfo {
-	struct samr_GroupInfoAll all;/* [case(GROUPINFOALL)] */
-	struct lsa_String name;/* [case(GROUPINFONAME)] */
-	struct samr_GroupInfoAttributes attributes;/* [case(GROUPINFOATTRIBUTES)] */
-	struct lsa_String description;/* [case(GROUPINFODESCRIPTION)] */
-	struct samr_GroupInfoAll all2;/* [case(GROUPINFOALL2)] */
-}/* [switch_type(samr_GroupInfoEnum)] */;
-
-struct samr_RidTypeArray {
-	uint32_t count;
-	uint32_t *rids;/* [unique,size_is(count)] */
-	uint32_t *types;/* [unique,size_is(count)] */
-};
-
-struct samr_AliasInfoAll {
-	struct lsa_String name;
-	uint32_t num_members;
-	struct lsa_String description;
-};
-
-enum samr_AliasInfoEnum
-#ifndef USE_UINT_ENUMS
- {
-	ALIASINFOALL=1,
-	ALIASINFONAME=2,
-	ALIASINFODESCRIPTION=3
-}
-#else
- { __donnot_use_enum_samr_AliasInfoEnum=0x7FFFFFFF}
-#define ALIASINFOALL ( 1 )
-#define ALIASINFONAME ( 2 )
-#define ALIASINFODESCRIPTION ( 3 )
-#endif
-;
-
-union samr_AliasInfo {
-	struct samr_AliasInfoAll all;/* [case(ALIASINFOALL)] */
-	struct lsa_String name;/* [case(ALIASINFONAME)] */
-	struct lsa_String description;/* [case(ALIASINFODESCRIPTION)] */
-}/* [switch_type(samr_AliasInfoEnum)] */;
-
-struct samr_UserInfo1 {
-	struct lsa_String account_name;
-	struct lsa_String full_name;
-	uint32_t primary_gid;
-	struct lsa_String description;
-	struct lsa_String comment;
-};
-
-struct samr_UserInfo2 {
-	struct lsa_String comment;
-	struct lsa_String unknown;
-	uint16_t country_code;
-	uint16_t code_page;
-};
-
-struct samr_LogonHours {
-	uint16_t units_per_week;
-	uint8_t *bits;/* [unique,length_is(units_per_week/8),size_is(1260)] */
-}/* [public,flag(LIBNDR_PRINT_ARRAY_HEX)] */;
-
-struct samr_UserInfo3 {
-	struct lsa_String account_name;
-	struct lsa_String full_name;
-	uint32_t rid;
-	uint32_t primary_gid;
-	struct lsa_String home_directory;
-	struct lsa_String home_drive;
-	struct lsa_String logon_script;
-	struct lsa_String profile_path;
-	struct lsa_String workstations;
-	NTTIME last_logon;
-	NTTIME last_logoff;
-	NTTIME last_password_change;
-	NTTIME allow_password_change;
-	NTTIME force_password_change;
-	struct samr_LogonHours logon_hours;
-	uint16_t bad_password_count;
-	uint16_t logon_count;
-	uint32_t acct_flags;
-};
-
-struct samr_UserInfo4 {
-	struct samr_LogonHours logon_hours;
-};
-
-struct samr_UserInfo5 {
-	struct lsa_String account_name;
-	struct lsa_String full_name;
-	uint32_t rid;
-	uint32_t primary_gid;
-	struct lsa_String home_directory;
-	struct lsa_String home_drive;
-	struct lsa_String logon_script;
-	struct lsa_String profile_path;
-	struct lsa_String description;
-	struct lsa_String workstations;
-	NTTIME last_logon;
-	NTTIME last_logoff;
-	struct samr_LogonHours logon_hours;
-	uint16_t bad_password_count;
-	uint16_t logon_count;
-	NTTIME last_password_change;
-	NTTIME acct_expiry;
-	uint32_t acct_flags;
-};
-
-struct samr_UserInfo6 {
-	struct lsa_String account_name;
-	struct lsa_String full_name;
-};
-
-struct samr_UserInfo7 {
-	struct lsa_String account_name;
-};
-
-struct samr_UserInfo8 {
-	struct lsa_String full_name;
-};
-
-struct samr_UserInfo9 {
-	uint32_t primary_gid;
-};
-
-struct samr_UserInfo10 {
-	struct lsa_String home_directory;
-	struct lsa_String home_drive;
-};
-
-struct samr_UserInfo11 {
-	struct lsa_String logon_script;
-};
-
-struct samr_UserInfo12 {
-	struct lsa_String profile_path;
-};
-
-struct samr_UserInfo13 {
-	struct lsa_String description;
-};
-
-struct samr_UserInfo14 {
-	struct lsa_String workstations;
-};
-
-struct samr_UserInfo16 {
-	uint32_t acct_flags;
-};
-
-struct samr_UserInfo17 {
-	NTTIME acct_expiry;
-};
-
-struct samr_Password {
-	uint8_t hash[16];
-}/* [public,flag(LIBNDR_PRINT_ARRAY_HEX)] */;
-
-struct samr_UserInfo18 {
-	struct samr_Password lm_pwd;
-	struct samr_Password nt_pwd;
-	uint8_t lm_pwd_active;
-	uint8_t nt_pwd_active;
-};
-
-struct samr_UserInfo20 {
-	struct lsa_BinaryString parameters;
-};
-
-/* bitmap samr_FieldsPresent */
-#define SAMR_FIELD_ACCOUNT_NAME ( 0x00000001 )
-#define SAMR_FIELD_FULL_NAME ( 0x00000002 )
-#define SAMR_FIELD_RID ( 0x00000004 )
-#define SAMR_FIELD_PRIMARY_GID ( 0x00000008 )
-#define SAMR_FIELD_DESCRIPTION ( 0x00000010 )
-#define SAMR_FIELD_COMMENT ( 0x00000020 )
-#define SAMR_FIELD_HOME_DIRECTORY ( 0x00000040 )
-#define SAMR_FIELD_HOME_DRIVE ( 0x00000080 )
-#define SAMR_FIELD_LOGON_SCRIPT ( 0x00000100 )
-#define SAMR_FIELD_PROFILE_PATH ( 0x00000200 )
-#define SAMR_FIELD_WORKSTATIONS ( 0x00000400 )
-#define SAMR_FIELD_LAST_LOGON ( 0x00000800 )
-#define SAMR_FIELD_LAST_LOGOFF ( 0x00001000 )
-#define SAMR_FIELD_LOGON_HOURS ( 0x00002000 )
-#define SAMR_FIELD_BAD_PWD_COUNT ( 0x00004000 )
-#define SAMR_FIELD_NUM_LOGONS ( 0x00008000 )
-#define SAMR_FIELD_ALLOW_PWD_CHANGE ( 0x00010000 )
-#define SAMR_FIELD_FORCE_PWD_CHANGE ( 0x00020000 )
-#define SAMR_FIELD_LAST_PWD_CHANGE ( 0x00040000 )
-#define SAMR_FIELD_ACCT_EXPIRY ( 0x00080000 )
-#define SAMR_FIELD_ACCT_FLAGS ( 0x00100000 )
-#define SAMR_FIELD_PARAMETERS ( 0x00200000 )
-#define SAMR_FIELD_COUNTRY_CODE ( 0x00400000 )
-#define SAMR_FIELD_CODE_PAGE ( 0x00800000 )
-#define SAMR_FIELD_PASSWORD ( 0x01000000 )
-#define SAMR_FIELD_PASSWORD2 ( 0x02000000 )
-#define SAMR_FIELD_PRIVATE_DATA ( 0x04000000 )
-#define SAMR_FIELD_EXPIRED_FLAG ( 0x08000000 )
-#define SAMR_FIELD_SEC_DESC ( 0x10000000 )
-#define SAMR_FIELD_OWF_PWD ( 0x20000000 )
-
-struct samr_UserInfo21 {
-	NTTIME last_logon;
-	NTTIME last_logoff;
-	NTTIME last_password_change;
-	NTTIME acct_expiry;
-	NTTIME allow_password_change;
-	NTTIME force_password_change;
-	struct lsa_String account_name;
-	struct lsa_String full_name;
-	struct lsa_String home_directory;
-	struct lsa_String home_drive;
-	struct lsa_String logon_script;
-	struct lsa_String profile_path;
-	struct lsa_String description;
-	struct lsa_String workstations;
-	struct lsa_String comment;
-	struct lsa_BinaryString parameters;
-	struct lsa_String unknown1;
-	struct lsa_String unknown2;
-	struct lsa_String unknown3;
-	uint32_t buf_count;
-	uint8_t *buffer;/* [unique,size_is(buf_count)] */
-	uint32_t rid;
-	uint32_t primary_gid;
-	uint32_t acct_flags;
-	uint32_t fields_present;
-	struct samr_LogonHours logon_hours;
-	uint16_t bad_password_count;
-	uint16_t logon_count;
-	uint16_t country_code;
-	uint16_t code_page;
-	uint8_t nt_password_set;
-	uint8_t lm_password_set;
-	uint8_t password_expired;
-	uint8_t unknown4;
-};
-
-struct samr_CryptPassword {
-	uint8_t data[516];
-}/* [public,flag(LIBNDR_PRINT_ARRAY_HEX)] */;
-
-struct samr_UserInfo23 {
-	struct samr_UserInfo21 info;
-	struct samr_CryptPassword password;
-};
-
-struct samr_UserInfo24 {
-	struct samr_CryptPassword password;
-	uint8_t pw_len;
-};
-
-struct samr_CryptPasswordEx {
-	uint8_t data[532];
-}/* [flag(LIBNDR_PRINT_ARRAY_HEX)] */;
-
-struct samr_UserInfo25 {
-	struct samr_UserInfo21 info;
-	struct samr_CryptPasswordEx password;
-};
-
-struct samr_UserInfo26 {
-	struct samr_CryptPasswordEx password;
-	uint8_t pw_len;
-};
-
-union samr_UserInfo {
-	struct samr_UserInfo1 info1;/* [case] */
-	struct samr_UserInfo2 info2;/* [case(2)] */
-	struct samr_UserInfo3 info3;/* [case(3)] */
-	struct samr_UserInfo4 info4;/* [case(4)] */
-	struct samr_UserInfo5 info5;/* [case(5)] */
-	struct samr_UserInfo6 info6;/* [case(6)] */
-	struct samr_UserInfo7 info7;/* [case(7)] */
-	struct samr_UserInfo8 info8;/* [case(8)] */
-	struct samr_UserInfo9 info9;/* [case(9)] */
-	struct samr_UserInfo10 info10;/* [case(10)] */
-	struct samr_UserInfo11 info11;/* [case(11)] */
-	struct samr_UserInfo12 info12;/* [case(12)] */
-	struct samr_UserInfo13 info13;/* [case(13)] */
-	struct samr_UserInfo14 info14;/* [case(14)] */
-	struct samr_UserInfo16 info16;/* [case(16)] */
-	struct samr_UserInfo17 info17;/* [case(17)] */
-	struct samr_UserInfo18 info18;/* [case(18)] */
-	struct samr_UserInfo20 info20;/* [case(20)] */
-	struct samr_UserInfo21 info21;/* [case(21)] */
-	struct samr_UserInfo23 info23;/* [case(23)] */
-	struct samr_UserInfo24 info24;/* [case(24)] */
-	struct samr_UserInfo25 info25;/* [case(25)] */
-	struct samr_UserInfo26 info26;/* [case(26)] */
-}/* [switch_type(uint16)] */;
-
-struct samr_RidWithAttribute {
-	uint32_t rid;
-	uint32_t attributes;
-}/* [public] */;
-
-struct samr_RidWithAttributeArray {
-	uint32_t count;
-	struct samr_RidWithAttribute *rids;/* [unique,size_is(count)] */
-}/* [public] */;
-
-struct samr_DispEntryGeneral {
-	uint32_t idx;
-	uint32_t rid;
-	uint32_t acct_flags;
-	struct lsa_String account_name;
-	struct lsa_String description;
-	struct lsa_String full_name;
-};
-
-struct samr_DispInfoGeneral {
-	uint32_t count;
-	struct samr_DispEntryGeneral *entries;/* [unique,size_is(count)] */
-};
-
-struct samr_DispEntryFull {
-	uint32_t idx;
-	uint32_t rid;
-	uint32_t acct_flags;
-	struct lsa_String account_name;
-	struct lsa_String description;
-};
-
-struct samr_DispInfoFull {
-	uint32_t count;
-	struct samr_DispEntryFull *entries;/* [unique,size_is(count)] */
-};
-
-struct samr_DispEntryFullGroup {
-	uint32_t idx;
-	uint32_t rid;
-	uint32_t acct_flags;
-	struct lsa_String account_name;
-	struct lsa_String description;
-};
-
-struct samr_DispInfoFullGroups {
-	uint32_t count;
-	struct samr_DispEntryFullGroup *entries;/* [unique,size_is(count)] */
-};
-
-struct samr_DispEntryAscii {
-	uint32_t idx;
-	struct lsa_AsciiStringLarge account_name;
-};
-
-struct samr_DispInfoAscii {
-	uint32_t count;
-	struct samr_DispEntryAscii *entries;/* [unique,size_is(count)] */
-};
-
-union samr_DispInfo {
-	struct samr_DispInfoGeneral info1;/* [case] */
-	struct samr_DispInfoFull info2;/* [case(2)] */
-	struct samr_DispInfoFullGroups info3;/* [case(3)] */
-	struct samr_DispInfoAscii info4;/* [case(4)] */
-	struct samr_DispInfoAscii info5;/* [case(5)] */
-}/* [switch_type(uint16)] */;
-
-struct samr_PwInfo {
-	uint16_t min_password_length;
-	uint32_t password_properties;
-};
-
-enum samr_ConnectVersion
-#ifndef USE_UINT_ENUMS
- {
-	SAMR_CONNECT_PRE_W2K=1,
-	SAMR_CONNECT_W2K=2,
-	SAMR_CONNECT_AFTER_W2K=3
-}
-#else
- { __donnot_use_enum_samr_ConnectVersion=0x7FFFFFFF}
-#define SAMR_CONNECT_PRE_W2K ( 1 )
-#define SAMR_CONNECT_W2K ( 2 )
-#define SAMR_CONNECT_AFTER_W2K ( 3 )
-#endif
-;
-
-enum samr_RejectReason;
-
-struct samr_ChangeReject {
-	enum samr_RejectReason reason;
-	uint32_t unknown1;
-	uint32_t unknown2;
-};
-
-struct samr_ConnectInfo1 {
-	enum samr_ConnectVersion client_version;
-	uint32_t unknown2;
-};
-
-union samr_ConnectInfo {
-	struct samr_ConnectInfo1 info1;/* [case] */
-};
-
-/* bitmap samr_ValidateFieldsPresent */
-#define SAMR_VALIDATE_FIELD_PASSWORD_LAST_SET ( 0x00000001 )
-#define SAMR_VALIDATE_FIELD_BAD_PASSWORD_TIME ( 0x00000002 )
-#define SAMR_VALIDATE_FIELD_LOCKOUT_TIME ( 0x00000004 )
-#define SAMR_VALIDATE_FIELD_BAD_PASSWORD_COUNT ( 0x00000008 )
-#define SAMR_VALIDATE_FIELD_PASSWORD_HISTORY_LENGTH ( 0x00000010 )
-#define SAMR_VALIDATE_FIELD_PASSWORD_HISTORY ( 0x00000020 )
-
-enum samr_ValidatePasswordLevel
-#ifndef USE_UINT_ENUMS
- {
-	NetValidateAuthentication=1,
-	NetValidatePasswordChange=2,
-	NetValidatePasswordReset=3
-}
-#else
- { __donnot_use_enum_samr_ValidatePasswordLevel=0x7FFFFFFF}
-#define NetValidateAuthentication ( 1 )
-#define NetValidatePasswordChange ( 2 )
-#define NetValidatePasswordReset ( 3 )
-#endif
-;
-
-enum samr_ValidationStatus
-#ifndef USE_UINT_ENUMS
- {
-	SAMR_VALIDATION_STATUS_SUCCESS=0,
-	SAMR_VALIDATION_STATUS_PASSWORD_MUST_CHANGE=1,
-	SAMR_VALIDATION_STATUS_ACCOUNT_LOCKED_OUT=2,
-	SAMR_VALIDATION_STATUS_BAD_PASSWORD=4,
-	SAMR_VALIDATION_STATUS_PWD_HISTORY_CONFLICT=5,
-	SAMR_VALIDATION_STATUS_PWD_TOO_SHORT=6,
-	SAMR_VALIDATION_STATUS_PWD_TOO_LONG=7,
-	SAMR_VALIDATION_STATUS_NOT_COMPLEX_ENOUGH=8,
-	SAMR_VALIDATION_STATUS_PASSWORD_TOO_RECENT=9
-}
-#else
- { __donnot_use_enum_samr_ValidationStatus=0x7FFFFFFF}
-#define SAMR_VALIDATION_STATUS_SUCCESS ( 0 )
-#define SAMR_VALIDATION_STATUS_PASSWORD_MUST_CHANGE ( 1 )
-#define SAMR_VALIDATION_STATUS_ACCOUNT_LOCKED_OUT ( 2 )
-#define SAMR_VALIDATION_STATUS_BAD_PASSWORD ( 4 )
-#define SAMR_VALIDATION_STATUS_PWD_HISTORY_CONFLICT ( 5 )
-#define SAMR_VALIDATION_STATUS_PWD_TOO_SHORT ( 6 )
-#define SAMR_VALIDATION_STATUS_PWD_TOO_LONG ( 7 )
-#define SAMR_VALIDATION_STATUS_NOT_COMPLEX_ENOUGH ( 8 )
-#define SAMR_VALIDATION_STATUS_PASSWORD_TOO_RECENT ( 9 )
-#endif
-;
-
-struct samr_ValidationBlob {
-	uint32_t length;
-	uint8_t *data;/* [unique,size_is(length)] */
-};
-
-struct samr_ValidatePasswordInfo {
-	uint32_t fields_present;
-	NTTIME last_password_change;
-	NTTIME bad_password_time;
-	NTTIME lockout_time;
-	uint32_t bad_pwd_count;
-	uint32_t pwd_history_len;
-	struct samr_ValidationBlob *pwd_history;/* [unique,size_is(pwd_history_len)] */
-};
-
-struct samr_ValidatePasswordRepCtr {
-	struct samr_ValidatePasswordInfo info;
-	enum samr_ValidationStatus status;
-};
-
-union samr_ValidatePasswordRep {
-	struct samr_ValidatePasswordRepCtr ctr1;/* [case] */
-	struct samr_ValidatePasswordRepCtr ctr2;/* [case(2)] */
-	struct samr_ValidatePasswordRepCtr ctr3;/* [case(3)] */
-}/* [switch_type(uint16)] */;
-
-struct samr_ValidatePasswordReq3 {
-	struct samr_ValidatePasswordInfo info;
-	struct lsa_StringLarge password;
-	struct lsa_StringLarge account;
-	struct samr_ValidationBlob hash;
-	uint8_t pwd_must_change_at_next_logon;
-	uint8_t clear_lockout;
-};
-
-struct samr_ValidatePasswordReq2 {
-	struct samr_ValidatePasswordInfo info;
-	struct lsa_StringLarge password;
-	struct lsa_StringLarge account;
-	struct samr_ValidationBlob hash;
-	uint8_t password_matched;
-};
-
-struct samr_ValidatePasswordReq1 {
-	struct samr_ValidatePasswordInfo info;
-	uint8_t password_matched;
-};
-
-union samr_ValidatePasswordReq {
-	struct samr_ValidatePasswordReq1 req1;/* [case] */
-	struct samr_ValidatePasswordReq2 req2;/* [case(2)] */
-	struct samr_ValidatePasswordReq3 req3;/* [case(3)] */
-}/* [switch_type(uint16)] */;
-
-
-struct samr_Connect {
-	struct {
-		uint16_t *system_name;/* [unique] */
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *connect_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_Close {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-	} in;
-
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_SetSecurity {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		uint32_t sec_info;
-		struct sec_desc_buf *sdbuf;/* [ref] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_QuerySecurity {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		uint32_t sec_info;
-	} in;
-
-	struct {
-		struct sec_desc_buf **sdbuf;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_Shutdown {
-	struct {
-		struct policy_handle *connect_handle;/* [ref] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_LookupDomain {
-	struct {
-		struct policy_handle *connect_handle;/* [ref] */
-		struct lsa_String *domain_name;/* [ref] */
-	} in;
-
-	struct {
-		struct dom_sid2 **sid;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_EnumDomains {
-	struct {
-		struct policy_handle *connect_handle;/* [ref] */
-		uint32_t buf_size;
-		uint32_t *resume_handle;/* [ref] */
-	} in;
-
-	struct {
-		struct samr_SamArray **sam;/* [ref] */
-		uint32_t *num_entries;/* [ref] */
-		uint32_t *resume_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_OpenDomain {
-	struct {
-		struct policy_handle *connect_handle;/* [ref] */
-		uint32_t access_mask;
-		struct dom_sid2 *sid;/* [ref] */
-	} in;
-
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_QueryDomainInfo {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-		uint16_t level;
-	} in;
-
-	struct {
-		union samr_DomainInfo **info;/* [ref,switch_is(level)] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_SetDomainInfo {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-		uint16_t level;
-		union samr_DomainInfo *info;/* [ref,switch_is(level)] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_CreateDomainGroup {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-		struct lsa_String *name;/* [ref] */
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *group_handle;/* [ref] */
-		uint32_t *rid;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_EnumDomainGroups {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-		uint32_t max_size;
-		uint32_t *resume_handle;/* [ref] */
-	} in;
-
-	struct {
-		struct samr_SamArray **sam;/* [ref] */
-		uint32_t *num_entries;/* [ref] */
-		uint32_t *resume_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_CreateUser {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-		struct lsa_String *account_name;/* [ref] */
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *user_handle;/* [ref] */
-		uint32_t *rid;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_EnumDomainUsers {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-		uint32_t acct_flags;
-		uint32_t max_size;
-		uint32_t *resume_handle;/* [ref] */
-	} in;
-
-	struct {
-		struct samr_SamArray **sam;/* [ref] */
-		uint32_t *num_entries;/* [ref] */
-		uint32_t *resume_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_CreateDomAlias {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-		struct lsa_String *alias_name;/* [ref] */
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *alias_handle;/* [ref] */
-		uint32_t *rid;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_EnumDomainAliases {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-		uint32_t max_size;
-		uint32_t *resume_handle;/* [ref] */
-	} in;
-
-	struct {
-		struct samr_SamArray **sam;/* [ref] */
-		uint32_t *num_entries;/* [ref] */
-		uint32_t *resume_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_GetAliasMembership {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-		struct lsa_SidArray *sids;/* [ref] */
-	} in;
-
-	struct {
-		struct samr_Ids *rids;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_LookupNames {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-		uint32_t num_names;/* [range(0,1000)] */
-		struct lsa_String *names;/* [length_is(num_names),size_is(1000)] */
-	} in;
-
-	struct {
-		struct samr_Ids *rids;/* [ref] */
-		struct samr_Ids *types;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_LookupRids {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-		uint32_t num_rids;/* [range(0,1000)] */
-		uint32_t *rids;/* [length_is(num_rids),size_is(1000)] */
-	} in;
-
-	struct {
-		struct lsa_Strings *names;/* [ref] */
-		struct samr_Ids *types;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_OpenGroup {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-		uint32_t access_mask;
-		uint32_t rid;
-	} in;
-
-	struct {
-		struct policy_handle *group_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_QueryGroupInfo {
-	struct {
-		struct policy_handle *group_handle;/* [ref] */
-		enum samr_GroupInfoEnum level;
-	} in;
-
-	struct {
-		union samr_GroupInfo **info;/* [ref,switch_is(level)] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_SetGroupInfo {
-	struct {
-		struct policy_handle *group_handle;/* [ref] */
-		enum samr_GroupInfoEnum level;
-		union samr_GroupInfo *info;/* [ref,switch_is(level)] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_AddGroupMember {
-	struct {
-		struct policy_handle *group_handle;/* [ref] */
-		uint32_t rid;
-		uint32_t flags;
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_DeleteDomainGroup {
-	struct {
-		struct policy_handle *group_handle;/* [ref] */
-	} in;
-
-	struct {
-		struct policy_handle *group_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_DeleteGroupMember {
-	struct {
-		struct policy_handle *group_handle;/* [ref] */
-		uint32_t rid;
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_QueryGroupMember {
-	struct {
-		struct policy_handle *group_handle;/* [ref] */
-	} in;
-
-	struct {
-		struct samr_RidTypeArray **rids;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_SetMemberAttributesOfGroup {
-	struct {
-		struct policy_handle *group_handle;/* [ref] */
-		uint32_t unknown1;
-		uint32_t unknown2;
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_OpenAlias {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-		uint32_t access_mask;
-		uint32_t rid;
-	} in;
-
-	struct {
-		struct policy_handle *alias_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_QueryAliasInfo {
-	struct {
-		struct policy_handle *alias_handle;/* [ref] */
-		enum samr_AliasInfoEnum level;
-	} in;
-
-	struct {
-		union samr_AliasInfo **info;/* [ref,switch_is(level)] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_SetAliasInfo {
-	struct {
-		struct policy_handle *alias_handle;/* [ref] */
-		enum samr_AliasInfoEnum level;
-		union samr_AliasInfo *info;/* [ref,switch_is(level)] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_DeleteDomAlias {
-	struct {
-		struct policy_handle *alias_handle;/* [ref] */
-	} in;
-
-	struct {
-		struct policy_handle *alias_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_AddAliasMember {
-	struct {
-		struct policy_handle *alias_handle;/* [ref] */
-		struct dom_sid2 *sid;/* [ref] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_DeleteAliasMember {
-	struct {
-		struct policy_handle *alias_handle;/* [ref] */
-		struct dom_sid2 *sid;/* [ref] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_GetMembersInAlias {
-	struct {
-		struct policy_handle *alias_handle;/* [ref] */
-	} in;
-
-	struct {
-		struct lsa_SidArray *sids;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_OpenUser {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-		uint32_t access_mask;
-		uint32_t rid;
-	} in;
-
-	struct {
-		struct policy_handle *user_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_DeleteUser {
-	struct {
-		struct policy_handle *user_handle;/* [ref] */
-	} in;
-
-	struct {
-		struct policy_handle *user_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_QueryUserInfo {
-	struct {
-		struct policy_handle *user_handle;/* [ref] */
-		uint16_t level;
-	} in;
-
-	struct {
-		union samr_UserInfo **info;/* [ref,switch_is(level)] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_SetUserInfo {
-	struct {
-		struct policy_handle *user_handle;/* [ref] */
-		uint16_t level;
-		union samr_UserInfo *info;/* [ref,switch_is(level)] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_ChangePasswordUser {
-	struct {
-		struct policy_handle *user_handle;/* [ref] */
-		uint8_t lm_present;
-		struct samr_Password *old_lm_crypted;/* [unique] */
-		struct samr_Password *new_lm_crypted;/* [unique] */
-		uint8_t nt_present;
-		struct samr_Password *old_nt_crypted;/* [unique] */
-		struct samr_Password *new_nt_crypted;/* [unique] */
-		uint8_t cross1_present;
-		struct samr_Password *nt_cross;/* [unique] */
-		uint8_t cross2_present;
-		struct samr_Password *lm_cross;/* [unique] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_GetGroupsForUser {
-	struct {
-		struct policy_handle *user_handle;/* [ref] */
-	} in;
-
-	struct {
-		struct samr_RidWithAttributeArray **rids;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_QueryDisplayInfo {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-		uint16_t level;
-		uint32_t start_idx;
-		uint32_t max_entries;
-		uint32_t buf_size;
-	} in;
-
-	struct {
-		uint32_t *total_size;/* [ref] */
-		uint32_t *returned_size;/* [ref] */
-		union samr_DispInfo *info;/* [ref,switch_is(level)] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_GetDisplayEnumerationIndex {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-		uint16_t level;
-		struct lsa_String *name;/* [ref] */
-	} in;
-
-	struct {
-		uint32_t *idx;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_TestPrivateFunctionsDomain {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_TestPrivateFunctionsUser {
-	struct {
-		struct policy_handle *user_handle;/* [ref] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_GetUserPwInfo {
-	struct {
-		struct policy_handle *user_handle;/* [ref] */
-	} in;
-
-	struct {
-		struct samr_PwInfo *info;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_RemoveMemberFromForeignDomain {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-		struct dom_sid2 *sid;/* [ref] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_QueryDomainInfo2 {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-		uint16_t level;
-	} in;
-
-	struct {
-		union samr_DomainInfo **info;/* [ref,switch_is(level)] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_QueryUserInfo2 {
-	struct {
-		struct policy_handle *user_handle;/* [ref] */
-		uint16_t level;
-	} in;
-
-	struct {
-		union samr_UserInfo *info;/* [ref,switch_is(level)] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_QueryDisplayInfo2 {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-		uint16_t level;
-		uint32_t start_idx;
-		uint32_t max_entries;
-		uint32_t buf_size;
-	} in;
-
-	struct {
-		uint32_t *total_size;/* [ref] */
-		uint32_t *returned_size;/* [ref] */
-		union samr_DispInfo *info;/* [ref,switch_is(level)] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_GetDisplayEnumerationIndex2 {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-		uint16_t level;
-		struct lsa_String *name;/* [ref] */
-	} in;
-
-	struct {
-		uint32_t *idx;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_CreateUser2 {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-		struct lsa_String *account_name;/* [ref] */
-		uint32_t acct_flags;
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *user_handle;/* [ref] */
-		uint32_t *access_granted;/* [ref] */
-		uint32_t *rid;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_QueryDisplayInfo3 {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-		uint16_t level;
-		uint32_t start_idx;
-		uint32_t max_entries;
-		uint32_t buf_size;
-	} in;
-
-	struct {
-		uint32_t *total_size;/* [ref] */
-		uint32_t *returned_size;/* [ref] */
-		union samr_DispInfo *info;/* [ref,switch_is(level)] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_AddMultipleMembersToAlias {
-	struct {
-		struct policy_handle *alias_handle;/* [ref] */
-		struct lsa_SidArray *sids;/* [ref] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_RemoveMultipleMembersFromAlias {
-	struct {
-		struct policy_handle *alias_handle;/* [ref] */
-		struct lsa_SidArray *sids;/* [ref] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_OemChangePasswordUser2 {
-	struct {
-		struct lsa_AsciiString *server;/* [unique] */
-		struct lsa_AsciiString *account;/* [ref] */
-		struct samr_CryptPassword *password;/* [unique] */
-		struct samr_Password *hash;/* [unique] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_ChangePasswordUser2 {
-	struct {
-		struct lsa_String *server;/* [unique] */
-		struct lsa_String *account;/* [ref] */
-		struct samr_CryptPassword *nt_password;/* [unique] */
-		struct samr_Password *nt_verifier;/* [unique] */
-		uint8_t lm_change;
-		struct samr_CryptPassword *lm_password;/* [unique] */
-		struct samr_Password *lm_verifier;/* [unique] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_GetDomPwInfo {
-	struct {
-		struct lsa_String *domain_name;/* [unique] */
-	} in;
-
-	struct {
-		struct samr_PwInfo *info;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_Connect2 {
-	struct {
-		const char *system_name;/* [unique,charset(UTF16)] */
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *connect_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_SetUserInfo2 {
-	struct {
-		struct policy_handle *user_handle;/* [ref] */
-		uint16_t level;
-		union samr_UserInfo *info;/* [ref,switch_is(level)] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_SetBootKeyInformation {
-	struct {
-		struct policy_handle *connect_handle;/* [ref] */
-		uint32_t unknown1;
-		uint32_t unknown2;
-		uint32_t unknown3;
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_GetBootKeyInformation {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-	} in;
-
-	struct {
-		uint32_t *unknown;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_Connect3 {
-	struct {
-		const char *system_name;/* [unique,charset(UTF16)] */
-		uint32_t unknown;
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *connect_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_Connect4 {
-	struct {
-		const char *system_name;/* [unique,charset(UTF16)] */
-		enum samr_ConnectVersion client_version;
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *connect_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_ChangePasswordUser3 {
-	struct {
-		struct lsa_String *server;/* [unique] */
-		struct lsa_String *account;/* [ref] */
-		struct samr_CryptPassword *nt_password;/* [unique] */
-		struct samr_Password *nt_verifier;/* [unique] */
-		uint8_t lm_change;
-		struct samr_CryptPassword *lm_password;/* [unique] */
-		struct samr_Password *lm_verifier;/* [unique] */
-		struct samr_CryptPassword *password3;/* [unique] */
-	} in;
-
-	struct {
-		struct samr_DomInfo1 **dominfo;/* [ref] */
-		struct samr_ChangeReject **reject;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_Connect5 {
-	struct {
-		const char *system_name;/* [unique,charset(UTF16)] */
-		uint32_t access_mask;
-		uint32_t level_in;
-		union samr_ConnectInfo *info_in;/* [ref,switch_is(level_in)] */
-	} in;
-
-	struct {
-		uint32_t *level_out;/* [ref] */
-		union samr_ConnectInfo *info_out;/* [ref,switch_is(*level_out)] */
-		struct policy_handle *connect_handle;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_RidToSid {
-	struct {
-		struct policy_handle *domain_handle;/* [ref] */
-		uint32_t rid;
-	} in;
-
-	struct {
-		struct dom_sid2 *sid;/* [ref] */
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_SetDsrmPassword {
-	struct {
-		struct lsa_String *name;/* [unique] */
-		uint32_t unknown;
-		struct samr_Password *hash;/* [unique] */
-	} in;
-
-	struct {
-		NTSTATUS result;
-	} out;
-
-};
-
-
-struct samr_ValidatePassword {
-	struct {
-		enum samr_ValidatePasswordLevel level;
-		union samr_ValidatePasswordReq req;/* [switch_is(level)] */
-	} in;
-
-	struct {
-		union samr_ValidatePasswordRep *rep;/* [ref,switch_is(level)] */
-		NTSTATUS result;
-	} out;
-
-};
-
-#endif /* _HEADER_samr */

Modified: branches/samba/upstream/source/librpc/gen_ndr/security.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/security.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/security.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,327 +1 @@
-/* header auto-generated by pidl */
-
-#include <stdint.h>
-
-#include "librpc/gen_ndr/misc.h"
-#define dom_sid2 dom_sid
-#define dom_sid28 dom_sid
-#define dom_sid0 dom_sid
-#ifndef _HEADER_security
-#define _HEADER_security
-
-#define SEC_MASK_GENERIC	( 0xF0000000 )
-#define SEC_MASK_FLAGS	( 0x0F000000 )
-#define SEC_MASK_STANDARD	( 0x00FF0000 )
-#define SEC_MASK_SPECIFIC	( 0x0000FFFF )
-#define SEC_GENERIC_ALL	( 0x10000000 )
-#define SEC_GENERIC_EXECUTE	( 0x20000000 )
-#define SEC_GENERIC_WRITE	( 0x40000000 )
-#define SEC_GENERIC_READ	( 0x80000000 )
-#define SEC_FLAG_SYSTEM_SECURITY	( 0x01000000 )
-#define SEC_FLAG_MAXIMUM_ALLOWED	( 0x02000000 )
-#define SEC_STD_DELETE	( 0x00010000 )
-#define SEC_STD_READ_CONTROL	( 0x00020000 )
-#define SEC_STD_WRITE_DAC	( 0x00040000 )
-#define SEC_STD_WRITE_OWNER	( 0x00080000 )
-#define SEC_STD_SYNCHRONIZE	( 0x00100000 )
-#define SEC_STD_REQUIRED	( 0x000F0000 )
-#define SEC_STD_ALL	( 0x001F0000 )
-#define SEC_FILE_READ_DATA	( 0x00000001 )
-#define SEC_FILE_WRITE_DATA	( 0x00000002 )
-#define SEC_FILE_APPEND_DATA	( 0x00000004 )
-#define SEC_FILE_READ_EA	( 0x00000008 )
-#define SEC_FILE_WRITE_EA	( 0x00000010 )
-#define SEC_FILE_EXECUTE	( 0x00000020 )
-#define SEC_FILE_READ_ATTRIBUTE	( 0x00000080 )
-#define SEC_FILE_WRITE_ATTRIBUTE	( 0x00000100 )
-#define SEC_FILE_ALL	( 0x000001ff )
-#define SEC_DIR_LIST	( 0x00000001 )
-#define SEC_DIR_ADD_FILE	( 0x00000002 )
-#define SEC_DIR_ADD_SUBDIR	( 0x00000004 )
-#define SEC_DIR_READ_EA	( 0x00000008 )
-#define SEC_DIR_WRITE_EA	( 0x00000010 )
-#define SEC_DIR_TRAVERSE	( 0x00000020 )
-#define SEC_DIR_DELETE_CHILD	( 0x00000040 )
-#define SEC_DIR_READ_ATTRIBUTE	( 0x00000080 )
-#define SEC_DIR_WRITE_ATTRIBUTE	( 0x00000100 )
-#define SEC_REG_QUERY_VALUE	( 0x00000001 )
-#define SEC_REG_SET_VALUE	( 0x00000002 )
-#define SEC_REG_CREATE_SUBKEY	( 0x00000004 )
-#define SEC_REG_ENUM_SUBKEYS	( 0x00000008 )
-#define SEC_REG_NOTIFY	( 0x00000010 )
-#define SEC_REG_CREATE_LINK	( 0x00000020 )
-#define SEC_ADS_CREATE_CHILD	( 0x00000001 )
-#define SEC_ADS_DELETE_CHILD	( 0x00000002 )
-#define SEC_ADS_LIST	( 0x00000004 )
-#define SEC_ADS_SELF_WRITE	( 0x00000008 )
-#define SEC_ADS_READ_PROP	( 0x00000010 )
-#define SEC_ADS_WRITE_PROP	( 0x00000020 )
-#define SEC_ADS_DELETE_TREE	( 0x00000040 )
-#define SEC_ADS_LIST_OBJECT	( 0x00000080 )
-#define SEC_ADS_CONTROL_ACCESS	( 0x00000100 )
-#define SEC_RIGHTS_FILE_READ	( SEC_STD_READ_CONTROL|SEC_STD_SYNCHRONIZE|SEC_FILE_READ_DATA|SEC_FILE_READ_ATTRIBUTE|SEC_FILE_READ_EA )
-#define SEC_RIGHTS_FILE_WRITE	( SEC_STD_READ_CONTROL|SEC_STD_SYNCHRONIZE|SEC_FILE_WRITE_DATA|SEC_FILE_WRITE_ATTRIBUTE|SEC_FILE_WRITE_EA|SEC_FILE_APPEND_DATA )
-#define SEC_RIGHTS_FILE_EXECUTE	( SEC_STD_SYNCHRONIZE|SEC_STD_READ_CONTROL|SEC_FILE_READ_ATTRIBUTE|SEC_FILE_EXECUTE )
-#define SEC_RIGHTS_FILE_ALL	( SEC_STD_ALL|SEC_FILE_ALL )
-#define SEC_RIGHTS_DIR_READ	( SEC_RIGHTS_FILE_READ )
-#define SEC_RIGHTS_DIR_WRITE	( SEC_RIGHTS_FILE_WRITE )
-#define SEC_RIGHTS_DIR_EXECUTE	( SEC_RIGHTS_FILE_EXECUTE )
-#define SEC_RIGHTS_DIR_ALL	( SEC_RIGHTS_FILE_ALL )
-#define SID_NULL	( "S-1-0-0" )
-#define NAME_WORLD	( "WORLD" )
-#define SID_WORLD_DOMAIN	( "S-1-1" )
-#define SID_WORLD	( "S-1-1-0" )
-#define SID_CREATOR_OWNER_DOMAIN	( "S-1-3" )
-#define SID_CREATOR_OWNER	( "S-1-3-0" )
-#define SID_CREATOR_GROUP	( "S-1-3-1" )
-#define NAME_NT_AUTHORITY	( "NT AUTHORITY" )
-#define SID_NT_AUTHORITY	( "S-1-5" )
-#define SID_NT_DIALUP	( "S-1-5-1" )
-#define SID_NT_NETWORK	( "S-1-5-2" )
-#define SID_NT_BATCH	( "S-1-5-3" )
-#define SID_NT_INTERACTIVE	( "S-1-5-4" )
-#define SID_NT_SERVICE	( "S-1-5-6" )
-#define SID_NT_ANONYMOUS	( "S-1-5-7" )
-#define SID_NT_PROXY	( "S-1-5-8" )
-#define SID_NT_ENTERPRISE_DCS	( "S-1-5-9" )
-#define SID_NT_SELF	( "S-1-5-10" )
-#define SID_NT_AUTHENTICATED_USERS	( "S-1-5-11" )
-#define SID_NT_RESTRICTED	( "S-1-5-12" )
-#define SID_NT_TERMINAL_SERVER_USERS	( "S-1-5-13" )
-#define SID_NT_REMOTE_INTERACTIVE	( "S-1-5-14" )
-#define SID_NT_THIS_ORGANISATION	( "S-1-5-15" )
-#define SID_NT_SYSTEM	( "S-1-5-18" )
-#define SID_NT_LOCAL_SERVICE	( "S-1-5-19" )
-#define SID_NT_NETWORK_SERVICE	( "S-1-5-20" )
-#define NAME_BUILTIN	( "BUILTIN" )
-#define SID_BUILTIN	( "S-1-5-32" )
-#define SID_BUILTIN_ADMINISTRATORS	( "S-1-5-32-544" )
-#define SID_BUILTIN_USERS	( "S-1-5-32-545" )
-#define SID_BUILTIN_GUESTS	( "S-1-5-32-546" )
-#define SID_BUILTIN_POWER_USERS	( "S-1-5-32-547" )
-#define SID_BUILTIN_ACCOUNT_OPERATORS	( "S-1-5-32-548" )
-#define SID_BUILTIN_SERVER_OPERATORS	( "S-1-5-32-549" )
-#define SID_BUILTIN_PRINT_OPERATORS	( "S-1-5-32-550" )
-#define SID_BUILTIN_BACKUP_OPERATORS	( "S-1-5-32-551" )
-#define SID_BUILTIN_REPLICATOR	( "S-1-5-32-552" )
-#define SID_BUILTIN_RAS_SERVERS	( "S-1-5-32-553" )
-#define SID_BUILTIN_PREW2K	( "S-1-5-32-554" )
-#define DOMAIN_RID_LOGON	( 9 )
-#define DOMAIN_RID_ADMINISTRATOR	( 500 )
-#define DOMAIN_RID_GUEST	( 501 )
-#define DOMAIN_RID_ADMINS	( 512 )
-#define DOMAIN_RID_USERS	( 513 )
-#define DOMAIN_RID_DOMAIN_MEMBERS	( 515 )
-#define DOMAIN_RID_DCS	( 516 )
-#define DOMAIN_RID_CERT_ADMINS	( 517 )
-#define DOMAIN_RID_SCHEMA_ADMINS	( 518 )
-#define DOMAIN_RID_ENTERPRISE_ADMINS	( 519 )
-#define NT4_ACL_REVISION	( SECURITY_ACL_REVISION_NT4 )
-#define SD_REVISION	( SECURITY_DESCRIPTOR_REVISION_1 )
-enum sec_privilege
-#ifndef USE_UINT_ENUMS
- {
-	SEC_PRIV_SECURITY=1,
-	SEC_PRIV_BACKUP=2,
-	SEC_PRIV_RESTORE=3,
-	SEC_PRIV_SYSTEMTIME=4,
-	SEC_PRIV_SHUTDOWN=5,
-	SEC_PRIV_REMOTE_SHUTDOWN=6,
-	SEC_PRIV_TAKE_OWNERSHIP=7,
-	SEC_PRIV_DEBUG=8,
-	SEC_PRIV_SYSTEM_ENVIRONMENT=9,
-	SEC_PRIV_SYSTEM_PROFILE=10,
-	SEC_PRIV_PROFILE_SINGLE_PROCESS=11,
-	SEC_PRIV_INCREASE_BASE_PRIORITY=12,
-	SEC_PRIV_LOAD_DRIVER=13,
-	SEC_PRIV_CREATE_PAGEFILE=14,
-	SEC_PRIV_INCREASE_QUOTA=15,
-	SEC_PRIV_CHANGE_NOTIFY=16,
-	SEC_PRIV_UNDOCK=17,
-	SEC_PRIV_MANAGE_VOLUME=18,
-	SEC_PRIV_IMPERSONATE=19,
-	SEC_PRIV_CREATE_GLOBAL=20,
-	SEC_PRIV_ENABLE_DELEGATION=21,
-	SEC_PRIV_INTERACTIVE_LOGON=22,
-	SEC_PRIV_NETWORK_LOGON=23,
-	SEC_PRIV_REMOTE_INTERACTIVE_LOGON=24
-}
-#else
- { __donnot_use_enum_sec_privilege=0x7FFFFFFF}
-#define SEC_PRIV_SECURITY ( 1 )
-#define SEC_PRIV_BACKUP ( 2 )
-#define SEC_PRIV_RESTORE ( 3 )
-#define SEC_PRIV_SYSTEMTIME ( 4 )
-#define SEC_PRIV_SHUTDOWN ( 5 )
-#define SEC_PRIV_REMOTE_SHUTDOWN ( 6 )
-#define SEC_PRIV_TAKE_OWNERSHIP ( 7 )
-#define SEC_PRIV_DEBUG ( 8 )
-#define SEC_PRIV_SYSTEM_ENVIRONMENT ( 9 )
-#define SEC_PRIV_SYSTEM_PROFILE ( 10 )
-#define SEC_PRIV_PROFILE_SINGLE_PROCESS ( 11 )
-#define SEC_PRIV_INCREASE_BASE_PRIORITY ( 12 )
-#define SEC_PRIV_LOAD_DRIVER ( 13 )
-#define SEC_PRIV_CREATE_PAGEFILE ( 14 )
-#define SEC_PRIV_INCREASE_QUOTA ( 15 )
-#define SEC_PRIV_CHANGE_NOTIFY ( 16 )
-#define SEC_PRIV_UNDOCK ( 17 )
-#define SEC_PRIV_MANAGE_VOLUME ( 18 )
-#define SEC_PRIV_IMPERSONATE ( 19 )
-#define SEC_PRIV_CREATE_GLOBAL ( 20 )
-#define SEC_PRIV_ENABLE_DELEGATION ( 21 )
-#define SEC_PRIV_INTERACTIVE_LOGON ( 22 )
-#define SEC_PRIV_NETWORK_LOGON ( 23 )
-#define SEC_PRIV_REMOTE_INTERACTIVE_LOGON ( 24 )
-#endif
-;
-
-/* bitmap security_ace_flags */
-#define SEC_ACE_FLAG_OBJECT_INHERIT ( 0x01 )
-#define SEC_ACE_FLAG_CONTAINER_INHERIT ( 0x02 )
-#define SEC_ACE_FLAG_NO_PROPAGATE_INHERIT ( 0x04 )
-#define SEC_ACE_FLAG_INHERIT_ONLY ( 0x08 )
-#define SEC_ACE_FLAG_INHERITED_ACE ( 0x10 )
-#define SEC_ACE_FLAG_VALID_INHERIT ( 0x0f )
-#define SEC_ACE_FLAG_SUCCESSFUL_ACCESS ( 0x40 )
-#define SEC_ACE_FLAG_FAILED_ACCESS ( 0x80 )
-
-enum security_ace_type
-#ifndef USE_UINT_ENUMS
- {
-	SEC_ACE_TYPE_ACCESS_ALLOWED=0,
-	SEC_ACE_TYPE_ACCESS_DENIED=1,
-	SEC_ACE_TYPE_SYSTEM_AUDIT=2,
-	SEC_ACE_TYPE_SYSTEM_ALARM=3,
-	SEC_ACE_TYPE_ALLOWED_COMPOUND=4,
-	SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT=5,
-	SEC_ACE_TYPE_ACCESS_DENIED_OBJECT=6,
-	SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT=7,
-	SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT=8
-}
-#else
- { __donnot_use_enum_security_ace_type=0x7FFFFFFF}
-#define SEC_ACE_TYPE_ACCESS_ALLOWED ( 0 )
-#define SEC_ACE_TYPE_ACCESS_DENIED ( 1 )
-#define SEC_ACE_TYPE_SYSTEM_AUDIT ( 2 )
-#define SEC_ACE_TYPE_SYSTEM_ALARM ( 3 )
-#define SEC_ACE_TYPE_ALLOWED_COMPOUND ( 4 )
-#define SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT ( 5 )
-#define SEC_ACE_TYPE_ACCESS_DENIED_OBJECT ( 6 )
-#define SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT ( 7 )
-#define SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT ( 8 )
-#endif
-;
-
-/* bitmap security_ace_object_flags */
-#define SEC_ACE_OBJECT_TYPE_PRESENT ( 0x00000001 )
-#define SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT ( 0x00000002 )
-
-union security_ace_object_type {
-	struct GUID type;/* [case(SEC_ACE_OBJECT_TYPE_PRESENT)] */
-}/* [nodiscriminant] */;
-
-union security_ace_object_inherited_type {
-	struct GUID inherited_type;/* [case(SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT)] */
-}/* [nodiscriminant] */;
-
-struct security_ace_object {
-	uint32_t flags;
-	union security_ace_object_type type;/* [switch_is(flags&SEC_ACE_OBJECT_TYPE_PRESENT)] */
-	union security_ace_object_inherited_type inherited_type;/* [switch_is(flags&SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT)] */
-};
-
-union security_ace_object_ctr {
-	struct security_ace_object object;/* [case(SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT)] */
-}/* [nodiscriminant] */;
-
-struct security_ace {
-	enum security_ace_type type;
-	uint8_t flags;
-	uint16_t size;/* [value(ndr_size_security_ace(r,ndr->flags))] */
-	uint32_t access_mask;
-	union security_ace_object_ctr object;/* [switch_is(type)] */
-	struct dom_sid trustee;
-}/* [gensize,public,nosize] */;
-
-enum security_acl_revision
-#ifndef USE_UINT_ENUMS
- {
-	SECURITY_ACL_REVISION_NT4=2,
-	SECURITY_ACL_REVISION_ADS=4
-}
-#else
- { __donnot_use_enum_security_acl_revision=0x7FFFFFFF}
-#define SECURITY_ACL_REVISION_NT4 ( 2 )
-#define SECURITY_ACL_REVISION_ADS ( 4 )
-#endif
-;
-
-struct security_acl {
-	enum security_acl_revision revision;
-	uint16_t size;/* [value(ndr_size_security_acl(r,ndr->flags))] */
-	uint32_t num_aces;/* [range(0,1000)] */
-	struct security_ace *aces;
-}/* [gensize,public,nosize] */;
-
-enum security_descriptor_revision
-#ifndef USE_UINT_ENUMS
- {
-	SECURITY_DESCRIPTOR_REVISION_1=1
-}
-#else
- { __donnot_use_enum_security_descriptor_revision=0x7FFFFFFF}
-#define SECURITY_DESCRIPTOR_REVISION_1 ( 1 )
-#endif
-;
-
-/* bitmap security_descriptor_type */
-#define SEC_DESC_OWNER_DEFAULTED ( 0x0001 )
-#define SEC_DESC_GROUP_DEFAULTED ( 0x0002 )
-#define SEC_DESC_DACL_PRESENT ( 0x0004 )
-#define SEC_DESC_DACL_DEFAULTED ( 0x0008 )
-#define SEC_DESC_SACL_PRESENT ( 0x0010 )
-#define SEC_DESC_SACL_DEFAULTED ( 0x0020 )
-#define SEC_DESC_DACL_TRUSTED ( 0x0040 )
-#define SEC_DESC_SERVER_SECURITY ( 0x0080 )
-#define SEC_DESC_DACL_AUTO_INHERIT_REQ ( 0x0100 )
-#define SEC_DESC_SACL_AUTO_INHERIT_REQ ( 0x0200 )
-#define SEC_DESC_DACL_AUTO_INHERITED ( 0x0400 )
-#define SEC_DESC_SACL_AUTO_INHERITED ( 0x0800 )
-#define SEC_DESC_DACL_PROTECTED ( 0x1000 )
-#define SEC_DESC_SACL_PROTECTED ( 0x2000 )
-#define SEC_DESC_RM_CONTROL_VALID ( 0x4000 )
-#define SEC_DESC_SELF_RELATIVE ( 0x8000 )
-
-struct security_descriptor {
-	enum security_descriptor_revision revision;
-	uint16_t type;
-	struct dom_sid *owner_sid;/* [relative] */
-	struct dom_sid *group_sid;/* [relative] */
-	struct security_acl *sacl;/* [relative] */
-	struct security_acl *dacl;/* [relative] */
-}/* [gensize,public,flag(LIBNDR_FLAG_LITTLE_ENDIAN),nosize] */;
-
-struct sec_desc_buf {
-	uint32_t sd_size;/* [value(ndr_size_security_descriptor(sd,ndr->flags)),range(0,0x40000)] */
-	struct security_descriptor *sd;/* [unique,subcontext(4)] */
-}/* [public] */;
-
-struct security_token {
-	struct dom_sid *user_sid;/* [unique] */
-	struct dom_sid *group_sid;/* [unique] */
-	uint32_t num_sids;
-	struct dom_sid **sids;/* [unique,size_is(num_sids)] */
-	uint64_t privilege_mask;
-}/* [public] */;
-
-/* bitmap security_secinfo */
-#define SECINFO_OWNER ( 0x00000001 )
-#define SECINFO_GROUP ( 0x00000002 )
-#define SECINFO_DACL ( 0x00000004 )
-#define SECINFO_SACL ( 0x00000008 )
-#define SECINFO_UNPROTECTED_SACL ( 0x10000000 )
-#define SECINFO_UNPROTECTED_DACL ( 0x20000000 )
-#define SECINFO_PROTECTED_SACL ( 0x40000000 )
-#define SECINFO_PROTECTED_DACL ( 0x80000000 )
-
-#endif /* _HEADER_security */
+#include "ndr/security.h"

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_dfs.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_dfs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_dfs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,1754 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * server auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/srv_dfs.h"
-
-static bool api_dfs_GetManagerVersion(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dfs_GetManagerVersion *r;
-
-	call = &ndr_table_netdfs.calls[NDR_DFS_GETMANAGERVERSION];
-
-	r = talloc(talloc_tos(), struct dfs_GetManagerVersion);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_GetManagerVersion, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.version = talloc_zero(r, enum dfs_ManagerVersion);
-	if (r->out.version == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	_dfs_GetManagerVersion(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_GetManagerVersion, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dfs_Add(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dfs_Add *r;
-
-	call = &ndr_table_netdfs.calls[NDR_DFS_ADD];
-
-	r = talloc(talloc_tos(), struct dfs_Add);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_Add, r);
-	}
-
-	r->out.result = _dfs_Add(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_Add, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dfs_Remove(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dfs_Remove *r;
-
-	call = &ndr_table_netdfs.calls[NDR_DFS_REMOVE];
-
-	r = talloc(talloc_tos(), struct dfs_Remove);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_Remove, r);
-	}
-
-	r->out.result = _dfs_Remove(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_Remove, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dfs_SetInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dfs_SetInfo *r;
-
-	call = &ndr_table_netdfs.calls[NDR_DFS_SETINFO];
-
-	r = talloc(talloc_tos(), struct dfs_SetInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_SetInfo, r);
-	}
-
-	r->out.result = _dfs_SetInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_SetInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dfs_GetInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dfs_GetInfo *r;
-
-	call = &ndr_table_netdfs.calls[NDR_DFS_GETINFO];
-
-	r = talloc(talloc_tos(), struct dfs_GetInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_GetInfo, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, union dfs_Info);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _dfs_GetInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_GetInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dfs_Enum(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dfs_Enum *r;
-
-	call = &ndr_table_netdfs.calls[NDR_DFS_ENUM];
-
-	r = talloc(talloc_tos(), struct dfs_Enum);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_Enum, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = r->in.info;
-	r->out.total = r->in.total;
-	r->out.result = _dfs_Enum(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_Enum, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dfs_Rename(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dfs_Rename *r;
-
-	call = &ndr_table_netdfs.calls[NDR_DFS_RENAME];
-
-	r = talloc(talloc_tos(), struct dfs_Rename);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_Rename, r);
-	}
-
-	r->out.result = _dfs_Rename(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_Rename, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dfs_Move(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dfs_Move *r;
-
-	call = &ndr_table_netdfs.calls[NDR_DFS_MOVE];
-
-	r = talloc(talloc_tos(), struct dfs_Move);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_Move, r);
-	}
-
-	r->out.result = _dfs_Move(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_Move, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dfs_ManagerGetConfigInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dfs_ManagerGetConfigInfo *r;
-
-	call = &ndr_table_netdfs.calls[NDR_DFS_MANAGERGETCONFIGINFO];
-
-	r = talloc(talloc_tos(), struct dfs_ManagerGetConfigInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_ManagerGetConfigInfo, r);
-	}
-
-	r->out.result = _dfs_ManagerGetConfigInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_ManagerGetConfigInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dfs_ManagerSendSiteInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dfs_ManagerSendSiteInfo *r;
-
-	call = &ndr_table_netdfs.calls[NDR_DFS_MANAGERSENDSITEINFO];
-
-	r = talloc(talloc_tos(), struct dfs_ManagerSendSiteInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_ManagerSendSiteInfo, r);
-	}
-
-	r->out.result = _dfs_ManagerSendSiteInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_ManagerSendSiteInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dfs_AddFtRoot(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dfs_AddFtRoot *r;
-
-	call = &ndr_table_netdfs.calls[NDR_DFS_ADDFTROOT];
-
-	r = talloc(talloc_tos(), struct dfs_AddFtRoot);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_AddFtRoot, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.unknown2 = r->in.unknown2;
-	r->out.result = _dfs_AddFtRoot(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_AddFtRoot, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dfs_RemoveFtRoot(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dfs_RemoveFtRoot *r;
-
-	call = &ndr_table_netdfs.calls[NDR_DFS_REMOVEFTROOT];
-
-	r = talloc(talloc_tos(), struct dfs_RemoveFtRoot);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_RemoveFtRoot, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.unknown = r->in.unknown;
-	r->out.result = _dfs_RemoveFtRoot(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_RemoveFtRoot, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dfs_AddStdRoot(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dfs_AddStdRoot *r;
-
-	call = &ndr_table_netdfs.calls[NDR_DFS_ADDSTDROOT];
-
-	r = talloc(talloc_tos(), struct dfs_AddStdRoot);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_AddStdRoot, r);
-	}
-
-	r->out.result = _dfs_AddStdRoot(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_AddStdRoot, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dfs_RemoveStdRoot(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dfs_RemoveStdRoot *r;
-
-	call = &ndr_table_netdfs.calls[NDR_DFS_REMOVESTDROOT];
-
-	r = talloc(talloc_tos(), struct dfs_RemoveStdRoot);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_RemoveStdRoot, r);
-	}
-
-	r->out.result = _dfs_RemoveStdRoot(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_RemoveStdRoot, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dfs_ManagerInitialize(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dfs_ManagerInitialize *r;
-
-	call = &ndr_table_netdfs.calls[NDR_DFS_MANAGERINITIALIZE];
-
-	r = talloc(talloc_tos(), struct dfs_ManagerInitialize);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_ManagerInitialize, r);
-	}
-
-	r->out.result = _dfs_ManagerInitialize(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_ManagerInitialize, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dfs_AddStdRootForced(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dfs_AddStdRootForced *r;
-
-	call = &ndr_table_netdfs.calls[NDR_DFS_ADDSTDROOTFORCED];
-
-	r = talloc(talloc_tos(), struct dfs_AddStdRootForced);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_AddStdRootForced, r);
-	}
-
-	r->out.result = _dfs_AddStdRootForced(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_AddStdRootForced, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dfs_GetDcAddress(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dfs_GetDcAddress *r;
-
-	call = &ndr_table_netdfs.calls[NDR_DFS_GETDCADDRESS];
-
-	r = talloc(talloc_tos(), struct dfs_GetDcAddress);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_GetDcAddress, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.server_fullname = r->in.server_fullname;
-	r->out.is_root = r->in.is_root;
-	r->out.ttl = r->in.ttl;
-	r->out.result = _dfs_GetDcAddress(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_GetDcAddress, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dfs_SetDcAddress(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dfs_SetDcAddress *r;
-
-	call = &ndr_table_netdfs.calls[NDR_DFS_SETDCADDRESS];
-
-	r = talloc(talloc_tos(), struct dfs_SetDcAddress);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_SetDcAddress, r);
-	}
-
-	r->out.result = _dfs_SetDcAddress(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_SetDcAddress, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dfs_FlushFtTable(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dfs_FlushFtTable *r;
-
-	call = &ndr_table_netdfs.calls[NDR_DFS_FLUSHFTTABLE];
-
-	r = talloc(talloc_tos(), struct dfs_FlushFtTable);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_FlushFtTable, r);
-	}
-
-	r->out.result = _dfs_FlushFtTable(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_FlushFtTable, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dfs_Add2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dfs_Add2 *r;
-
-	call = &ndr_table_netdfs.calls[NDR_DFS_ADD2];
-
-	r = talloc(talloc_tos(), struct dfs_Add2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_Add2, r);
-	}
-
-	r->out.result = _dfs_Add2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_Add2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dfs_Remove2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dfs_Remove2 *r;
-
-	call = &ndr_table_netdfs.calls[NDR_DFS_REMOVE2];
-
-	r = talloc(talloc_tos(), struct dfs_Remove2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_Remove2, r);
-	}
-
-	r->out.result = _dfs_Remove2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_Remove2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dfs_EnumEx(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dfs_EnumEx *r;
-
-	call = &ndr_table_netdfs.calls[NDR_DFS_ENUMEX];
-
-	r = talloc(talloc_tos(), struct dfs_EnumEx);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_EnumEx, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = r->in.info;
-	r->out.total = r->in.total;
-	r->out.result = _dfs_EnumEx(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_EnumEx, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dfs_SetInfo2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dfs_SetInfo2 *r;
-
-	call = &ndr_table_netdfs.calls[NDR_DFS_SETINFO2];
-
-	r = talloc(talloc_tos(), struct dfs_SetInfo2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dfs_SetInfo2, r);
-	}
-
-	r->out.result = _dfs_SetInfo2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dfs_SetInfo2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-
-/* Tables */
-static struct api_struct api_netdfs_cmds[] = 
-{
-	{"DFS_GETMANAGERVERSION", NDR_DFS_GETMANAGERVERSION, api_dfs_GetManagerVersion},
-	{"DFS_ADD", NDR_DFS_ADD, api_dfs_Add},
-	{"DFS_REMOVE", NDR_DFS_REMOVE, api_dfs_Remove},
-	{"DFS_SETINFO", NDR_DFS_SETINFO, api_dfs_SetInfo},
-	{"DFS_GETINFO", NDR_DFS_GETINFO, api_dfs_GetInfo},
-	{"DFS_ENUM", NDR_DFS_ENUM, api_dfs_Enum},
-	{"DFS_RENAME", NDR_DFS_RENAME, api_dfs_Rename},
-	{"DFS_MOVE", NDR_DFS_MOVE, api_dfs_Move},
-	{"DFS_MANAGERGETCONFIGINFO", NDR_DFS_MANAGERGETCONFIGINFO, api_dfs_ManagerGetConfigInfo},
-	{"DFS_MANAGERSENDSITEINFO", NDR_DFS_MANAGERSENDSITEINFO, api_dfs_ManagerSendSiteInfo},
-	{"DFS_ADDFTROOT", NDR_DFS_ADDFTROOT, api_dfs_AddFtRoot},
-	{"DFS_REMOVEFTROOT", NDR_DFS_REMOVEFTROOT, api_dfs_RemoveFtRoot},
-	{"DFS_ADDSTDROOT", NDR_DFS_ADDSTDROOT, api_dfs_AddStdRoot},
-	{"DFS_REMOVESTDROOT", NDR_DFS_REMOVESTDROOT, api_dfs_RemoveStdRoot},
-	{"DFS_MANAGERINITIALIZE", NDR_DFS_MANAGERINITIALIZE, api_dfs_ManagerInitialize},
-	{"DFS_ADDSTDROOTFORCED", NDR_DFS_ADDSTDROOTFORCED, api_dfs_AddStdRootForced},
-	{"DFS_GETDCADDRESS", NDR_DFS_GETDCADDRESS, api_dfs_GetDcAddress},
-	{"DFS_SETDCADDRESS", NDR_DFS_SETDCADDRESS, api_dfs_SetDcAddress},
-	{"DFS_FLUSHFTTABLE", NDR_DFS_FLUSHFTTABLE, api_dfs_FlushFtTable},
-	{"DFS_ADD2", NDR_DFS_ADD2, api_dfs_Add2},
-	{"DFS_REMOVE2", NDR_DFS_REMOVE2, api_dfs_Remove2},
-	{"DFS_ENUMEX", NDR_DFS_ENUMEX, api_dfs_EnumEx},
-	{"DFS_SETINFO2", NDR_DFS_SETINFO2, api_dfs_SetInfo2},
-};
-
-void netdfs_get_pipe_fns(struct api_struct **fns, int *n_fns)
-{
-	*fns = api_netdfs_cmds;
-	*n_fns = sizeof(api_netdfs_cmds) / sizeof(struct api_struct);
-}
-
-NTSTATUS rpc_netdfs_init(void)
-{
-	return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "netdfs", "netdfs", api_netdfs_cmds, sizeof(api_netdfs_cmds) / sizeof(struct api_struct));
-}

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_dfs.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_dfs.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_dfs.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,29 +0,0 @@
-#include "librpc/gen_ndr/ndr_dfs.h"
-#ifndef __SRV_NETDFS__
-#define __SRV_NETDFS__
-void _dfs_GetManagerVersion(pipes_struct *p, struct dfs_GetManagerVersion *r);
-WERROR _dfs_Add(pipes_struct *p, struct dfs_Add *r);
-WERROR _dfs_Remove(pipes_struct *p, struct dfs_Remove *r);
-WERROR _dfs_SetInfo(pipes_struct *p, struct dfs_SetInfo *r);
-WERROR _dfs_GetInfo(pipes_struct *p, struct dfs_GetInfo *r);
-WERROR _dfs_Enum(pipes_struct *p, struct dfs_Enum *r);
-WERROR _dfs_Rename(pipes_struct *p, struct dfs_Rename *r);
-WERROR _dfs_Move(pipes_struct *p, struct dfs_Move *r);
-WERROR _dfs_ManagerGetConfigInfo(pipes_struct *p, struct dfs_ManagerGetConfigInfo *r);
-WERROR _dfs_ManagerSendSiteInfo(pipes_struct *p, struct dfs_ManagerSendSiteInfo *r);
-WERROR _dfs_AddFtRoot(pipes_struct *p, struct dfs_AddFtRoot *r);
-WERROR _dfs_RemoveFtRoot(pipes_struct *p, struct dfs_RemoveFtRoot *r);
-WERROR _dfs_AddStdRoot(pipes_struct *p, struct dfs_AddStdRoot *r);
-WERROR _dfs_RemoveStdRoot(pipes_struct *p, struct dfs_RemoveStdRoot *r);
-WERROR _dfs_ManagerInitialize(pipes_struct *p, struct dfs_ManagerInitialize *r);
-WERROR _dfs_AddStdRootForced(pipes_struct *p, struct dfs_AddStdRootForced *r);
-WERROR _dfs_GetDcAddress(pipes_struct *p, struct dfs_GetDcAddress *r);
-WERROR _dfs_SetDcAddress(pipes_struct *p, struct dfs_SetDcAddress *r);
-WERROR _dfs_FlushFtTable(pipes_struct *p, struct dfs_FlushFtTable *r);
-WERROR _dfs_Add2(pipes_struct *p, struct dfs_Add2 *r);
-WERROR _dfs_Remove2(pipes_struct *p, struct dfs_Remove2 *r);
-WERROR _dfs_EnumEx(pipes_struct *p, struct dfs_EnumEx *r);
-WERROR _dfs_SetInfo2(pipes_struct *p, struct dfs_SetInfo2 *r);
-void netdfs_get_pipe_fns(struct api_struct **fns, int *n_fns);
-NTSTATUS rpc_netdfs_init(void);
-#endif /* __SRV_NETDFS__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_dssetup.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_dssetup.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_dssetup.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,845 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * server auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/srv_dssetup.h"
-
-static bool api_dssetup_DsRoleGetPrimaryDomainInformation(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dssetup_DsRoleGetPrimaryDomainInformation *r;
-
-	call = &ndr_table_dssetup.calls[NDR_DSSETUP_DSROLEGETPRIMARYDOMAININFORMATION];
-
-	r = talloc(talloc_tos(), struct dssetup_DsRoleGetPrimaryDomainInformation);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dssetup_DsRoleGetPrimaryDomainInformation, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, union dssetup_DsRoleInfo);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _dssetup_DsRoleGetPrimaryDomainInformation(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleGetPrimaryDomainInformation, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dssetup_DsRoleDnsNameToFlatName(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dssetup_DsRoleDnsNameToFlatName *r;
-
-	call = &ndr_table_dssetup.calls[NDR_DSSETUP_DSROLEDNSNAMETOFLATNAME];
-
-	r = talloc(talloc_tos(), struct dssetup_DsRoleDnsNameToFlatName);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dssetup_DsRoleDnsNameToFlatName, r);
-	}
-
-	r->out.result = _dssetup_DsRoleDnsNameToFlatName(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleDnsNameToFlatName, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dssetup_DsRoleDcAsDc(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dssetup_DsRoleDcAsDc *r;
-
-	call = &ndr_table_dssetup.calls[NDR_DSSETUP_DSROLEDCASDC];
-
-	r = talloc(talloc_tos(), struct dssetup_DsRoleDcAsDc);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dssetup_DsRoleDcAsDc, r);
-	}
-
-	r->out.result = _dssetup_DsRoleDcAsDc(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleDcAsDc, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dssetup_DsRoleDcAsReplica(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dssetup_DsRoleDcAsReplica *r;
-
-	call = &ndr_table_dssetup.calls[NDR_DSSETUP_DSROLEDCASREPLICA];
-
-	r = talloc(talloc_tos(), struct dssetup_DsRoleDcAsReplica);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dssetup_DsRoleDcAsReplica, r);
-	}
-
-	r->out.result = _dssetup_DsRoleDcAsReplica(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleDcAsReplica, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dssetup_DsRoleDemoteDc(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dssetup_DsRoleDemoteDc *r;
-
-	call = &ndr_table_dssetup.calls[NDR_DSSETUP_DSROLEDEMOTEDC];
-
-	r = talloc(talloc_tos(), struct dssetup_DsRoleDemoteDc);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dssetup_DsRoleDemoteDc, r);
-	}
-
-	r->out.result = _dssetup_DsRoleDemoteDc(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleDemoteDc, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dssetup_DsRoleGetDcOperationProgress(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dssetup_DsRoleGetDcOperationProgress *r;
-
-	call = &ndr_table_dssetup.calls[NDR_DSSETUP_DSROLEGETDCOPERATIONPROGRESS];
-
-	r = talloc(talloc_tos(), struct dssetup_DsRoleGetDcOperationProgress);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dssetup_DsRoleGetDcOperationProgress, r);
-	}
-
-	r->out.result = _dssetup_DsRoleGetDcOperationProgress(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleGetDcOperationProgress, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dssetup_DsRoleGetDcOperationResults(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dssetup_DsRoleGetDcOperationResults *r;
-
-	call = &ndr_table_dssetup.calls[NDR_DSSETUP_DSROLEGETDCOPERATIONRESULTS];
-
-	r = talloc(talloc_tos(), struct dssetup_DsRoleGetDcOperationResults);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dssetup_DsRoleGetDcOperationResults, r);
-	}
-
-	r->out.result = _dssetup_DsRoleGetDcOperationResults(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleGetDcOperationResults, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dssetup_DsRoleCancel(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dssetup_DsRoleCancel *r;
-
-	call = &ndr_table_dssetup.calls[NDR_DSSETUP_DSROLECANCEL];
-
-	r = talloc(talloc_tos(), struct dssetup_DsRoleCancel);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dssetup_DsRoleCancel, r);
-	}
-
-	r->out.result = _dssetup_DsRoleCancel(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleCancel, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dssetup_DsRoleServerSaveStateForUpgrade(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dssetup_DsRoleServerSaveStateForUpgrade *r;
-
-	call = &ndr_table_dssetup.calls[NDR_DSSETUP_DSROLESERVERSAVESTATEFORUPGRADE];
-
-	r = talloc(talloc_tos(), struct dssetup_DsRoleServerSaveStateForUpgrade);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dssetup_DsRoleServerSaveStateForUpgrade, r);
-	}
-
-	r->out.result = _dssetup_DsRoleServerSaveStateForUpgrade(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleServerSaveStateForUpgrade, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dssetup_DsRoleUpgradeDownlevelServer(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dssetup_DsRoleUpgradeDownlevelServer *r;
-
-	call = &ndr_table_dssetup.calls[NDR_DSSETUP_DSROLEUPGRADEDOWNLEVELSERVER];
-
-	r = talloc(talloc_tos(), struct dssetup_DsRoleUpgradeDownlevelServer);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dssetup_DsRoleUpgradeDownlevelServer, r);
-	}
-
-	r->out.result = _dssetup_DsRoleUpgradeDownlevelServer(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleUpgradeDownlevelServer, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_dssetup_DsRoleAbortDownlevelServerUpgrade(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dssetup_DsRoleAbortDownlevelServerUpgrade *r;
-
-	call = &ndr_table_dssetup.calls[NDR_DSSETUP_DSROLEABORTDOWNLEVELSERVERUPGRADE];
-
-	r = talloc(talloc_tos(), struct dssetup_DsRoleAbortDownlevelServerUpgrade);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(dssetup_DsRoleAbortDownlevelServerUpgrade, r);
-	}
-
-	r->out.result = _dssetup_DsRoleAbortDownlevelServerUpgrade(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(dssetup_DsRoleAbortDownlevelServerUpgrade, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-
-/* Tables */
-static struct api_struct api_dssetup_cmds[] = 
-{
-	{"DSSETUP_DSROLEGETPRIMARYDOMAININFORMATION", NDR_DSSETUP_DSROLEGETPRIMARYDOMAININFORMATION, api_dssetup_DsRoleGetPrimaryDomainInformation},
-	{"DSSETUP_DSROLEDNSNAMETOFLATNAME", NDR_DSSETUP_DSROLEDNSNAMETOFLATNAME, api_dssetup_DsRoleDnsNameToFlatName},
-	{"DSSETUP_DSROLEDCASDC", NDR_DSSETUP_DSROLEDCASDC, api_dssetup_DsRoleDcAsDc},
-	{"DSSETUP_DSROLEDCASREPLICA", NDR_DSSETUP_DSROLEDCASREPLICA, api_dssetup_DsRoleDcAsReplica},
-	{"DSSETUP_DSROLEDEMOTEDC", NDR_DSSETUP_DSROLEDEMOTEDC, api_dssetup_DsRoleDemoteDc},
-	{"DSSETUP_DSROLEGETDCOPERATIONPROGRESS", NDR_DSSETUP_DSROLEGETDCOPERATIONPROGRESS, api_dssetup_DsRoleGetDcOperationProgress},
-	{"DSSETUP_DSROLEGETDCOPERATIONRESULTS", NDR_DSSETUP_DSROLEGETDCOPERATIONRESULTS, api_dssetup_DsRoleGetDcOperationResults},
-	{"DSSETUP_DSROLECANCEL", NDR_DSSETUP_DSROLECANCEL, api_dssetup_DsRoleCancel},
-	{"DSSETUP_DSROLESERVERSAVESTATEFORUPGRADE", NDR_DSSETUP_DSROLESERVERSAVESTATEFORUPGRADE, api_dssetup_DsRoleServerSaveStateForUpgrade},
-	{"DSSETUP_DSROLEUPGRADEDOWNLEVELSERVER", NDR_DSSETUP_DSROLEUPGRADEDOWNLEVELSERVER, api_dssetup_DsRoleUpgradeDownlevelServer},
-	{"DSSETUP_DSROLEABORTDOWNLEVELSERVERUPGRADE", NDR_DSSETUP_DSROLEABORTDOWNLEVELSERVERUPGRADE, api_dssetup_DsRoleAbortDownlevelServerUpgrade},
-};
-
-void dssetup_get_pipe_fns(struct api_struct **fns, int *n_fns)
-{
-	*fns = api_dssetup_cmds;
-	*n_fns = sizeof(api_dssetup_cmds) / sizeof(struct api_struct);
-}
-
-NTSTATUS rpc_dssetup_init(void)
-{
-	return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "dssetup", "dssetup", api_dssetup_cmds, sizeof(api_dssetup_cmds) / sizeof(struct api_struct));
-}

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_dssetup.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_dssetup.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_dssetup.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,17 +0,0 @@
-#include "librpc/gen_ndr/ndr_dssetup.h"
-#ifndef __SRV_DSSETUP__
-#define __SRV_DSSETUP__
-WERROR _dssetup_DsRoleGetPrimaryDomainInformation(pipes_struct *p, struct dssetup_DsRoleGetPrimaryDomainInformation *r);
-WERROR _dssetup_DsRoleDnsNameToFlatName(pipes_struct *p, struct dssetup_DsRoleDnsNameToFlatName *r);
-WERROR _dssetup_DsRoleDcAsDc(pipes_struct *p, struct dssetup_DsRoleDcAsDc *r);
-WERROR _dssetup_DsRoleDcAsReplica(pipes_struct *p, struct dssetup_DsRoleDcAsReplica *r);
-WERROR _dssetup_DsRoleDemoteDc(pipes_struct *p, struct dssetup_DsRoleDemoteDc *r);
-WERROR _dssetup_DsRoleGetDcOperationProgress(pipes_struct *p, struct dssetup_DsRoleGetDcOperationProgress *r);
-WERROR _dssetup_DsRoleGetDcOperationResults(pipes_struct *p, struct dssetup_DsRoleGetDcOperationResults *r);
-WERROR _dssetup_DsRoleCancel(pipes_struct *p, struct dssetup_DsRoleCancel *r);
-WERROR _dssetup_DsRoleServerSaveStateForUpgrade(pipes_struct *p, struct dssetup_DsRoleServerSaveStateForUpgrade *r);
-WERROR _dssetup_DsRoleUpgradeDownlevelServer(pipes_struct *p, struct dssetup_DsRoleUpgradeDownlevelServer *r);
-WERROR _dssetup_DsRoleAbortDownlevelServerUpgrade(pipes_struct *p, struct dssetup_DsRoleAbortDownlevelServerUpgrade *r);
-void dssetup_get_pipe_fns(struct api_struct **fns, int *n_fns);
-NTSTATUS rpc_dssetup_init(void);
-#endif /* __SRV_DSSETUP__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_echo.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_echo.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_echo.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,805 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * server auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/srv_echo.h"
-
-static bool api_echo_AddOne(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct echo_AddOne *r;
-
-	call = &ndr_table_rpcecho.calls[NDR_ECHO_ADDONE];
-
-	r = talloc(talloc_tos(), struct echo_AddOne);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(echo_AddOne, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.out_data = talloc_zero(r, uint32_t);
-	if (r->out.out_data == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	_echo_AddOne(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(echo_AddOne, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_echo_EchoData(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct echo_EchoData *r;
-
-	call = &ndr_table_rpcecho.calls[NDR_ECHO_ECHODATA];
-
-	r = talloc(talloc_tos(), struct echo_EchoData);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(echo_EchoData, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.out_data = talloc_zero_array(r, uint8_t, r->in.len);
-	if (r->out.out_data == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	_echo_EchoData(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(echo_EchoData, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_echo_SinkData(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct echo_SinkData *r;
-
-	call = &ndr_table_rpcecho.calls[NDR_ECHO_SINKDATA];
-
-	r = talloc(talloc_tos(), struct echo_SinkData);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(echo_SinkData, r);
-	}
-
-	_echo_SinkData(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(echo_SinkData, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_echo_SourceData(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct echo_SourceData *r;
-
-	call = &ndr_table_rpcecho.calls[NDR_ECHO_SOURCEDATA];
-
-	r = talloc(talloc_tos(), struct echo_SourceData);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(echo_SourceData, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.data = talloc_zero_array(r, uint8_t, r->in.len);
-	if (r->out.data == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	_echo_SourceData(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(echo_SourceData, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_echo_TestCall(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct echo_TestCall *r;
-
-	call = &ndr_table_rpcecho.calls[NDR_ECHO_TESTCALL];
-
-	r = talloc(talloc_tos(), struct echo_TestCall);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(echo_TestCall, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.s2 = talloc_zero(r, const char *);
-	if (r->out.s2 == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	_echo_TestCall(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(echo_TestCall, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_echo_TestCall2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct echo_TestCall2 *r;
-
-	call = &ndr_table_rpcecho.calls[NDR_ECHO_TESTCALL2];
-
-	r = talloc(talloc_tos(), struct echo_TestCall2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(echo_TestCall2, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, union echo_Info);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _echo_TestCall2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(echo_TestCall2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_echo_TestSleep(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct echo_TestSleep *r;
-
-	call = &ndr_table_rpcecho.calls[NDR_ECHO_TESTSLEEP];
-
-	r = talloc(talloc_tos(), struct echo_TestSleep);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(echo_TestSleep, r);
-	}
-
-	r->out.result = _echo_TestSleep(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(echo_TestSleep, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_echo_TestEnum(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct echo_TestEnum *r;
-
-	call = &ndr_table_rpcecho.calls[NDR_ECHO_TESTENUM];
-
-	r = talloc(talloc_tos(), struct echo_TestEnum);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(echo_TestEnum, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.foo1 = r->in.foo1;
-	r->out.foo2 = r->in.foo2;
-	r->out.foo3 = r->in.foo3;
-	_echo_TestEnum(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(echo_TestEnum, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_echo_TestSurrounding(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct echo_TestSurrounding *r;
-
-	call = &ndr_table_rpcecho.calls[NDR_ECHO_TESTSURROUNDING];
-
-	r = talloc(talloc_tos(), struct echo_TestSurrounding);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(echo_TestSurrounding, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.data = r->in.data;
-	_echo_TestSurrounding(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(echo_TestSurrounding, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_echo_TestDoublePointer(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct echo_TestDoublePointer *r;
-
-	call = &ndr_table_rpcecho.calls[NDR_ECHO_TESTDOUBLEPOINTER];
-
-	r = talloc(talloc_tos(), struct echo_TestDoublePointer);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(echo_TestDoublePointer, r);
-	}
-
-	r->out.result = _echo_TestDoublePointer(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(echo_TestDoublePointer, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-
-/* Tables */
-static struct api_struct api_rpcecho_cmds[] = 
-{
-	{"ECHO_ADDONE", NDR_ECHO_ADDONE, api_echo_AddOne},
-	{"ECHO_ECHODATA", NDR_ECHO_ECHODATA, api_echo_EchoData},
-	{"ECHO_SINKDATA", NDR_ECHO_SINKDATA, api_echo_SinkData},
-	{"ECHO_SOURCEDATA", NDR_ECHO_SOURCEDATA, api_echo_SourceData},
-	{"ECHO_TESTCALL", NDR_ECHO_TESTCALL, api_echo_TestCall},
-	{"ECHO_TESTCALL2", NDR_ECHO_TESTCALL2, api_echo_TestCall2},
-	{"ECHO_TESTSLEEP", NDR_ECHO_TESTSLEEP, api_echo_TestSleep},
-	{"ECHO_TESTENUM", NDR_ECHO_TESTENUM, api_echo_TestEnum},
-	{"ECHO_TESTSURROUNDING", NDR_ECHO_TESTSURROUNDING, api_echo_TestSurrounding},
-	{"ECHO_TESTDOUBLEPOINTER", NDR_ECHO_TESTDOUBLEPOINTER, api_echo_TestDoublePointer},
-};
-
-void rpcecho_get_pipe_fns(struct api_struct **fns, int *n_fns)
-{
-	*fns = api_rpcecho_cmds;
-	*n_fns = sizeof(api_rpcecho_cmds) / sizeof(struct api_struct);
-}
-
-NTSTATUS rpc_rpcecho_init(void)
-{
-	return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "rpcecho", "rpcecho", api_rpcecho_cmds, sizeof(api_rpcecho_cmds) / sizeof(struct api_struct));
-}

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_echo.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_echo.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_echo.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,16 +0,0 @@
-#include "librpc/gen_ndr/ndr_echo.h"
-#ifndef __SRV_RPCECHO__
-#define __SRV_RPCECHO__
-void _echo_AddOne(pipes_struct *p, struct echo_AddOne *r);
-void _echo_EchoData(pipes_struct *p, struct echo_EchoData *r);
-void _echo_SinkData(pipes_struct *p, struct echo_SinkData *r);
-void _echo_SourceData(pipes_struct *p, struct echo_SourceData *r);
-void _echo_TestCall(pipes_struct *p, struct echo_TestCall *r);
-NTSTATUS _echo_TestCall2(pipes_struct *p, struct echo_TestCall2 *r);
-uint32 _echo_TestSleep(pipes_struct *p, struct echo_TestSleep *r);
-void _echo_TestEnum(pipes_struct *p, struct echo_TestEnum *r);
-void _echo_TestSurrounding(pipes_struct *p, struct echo_TestSurrounding *r);
-uint16 _echo_TestDoublePointer(pipes_struct *p, struct echo_TestDoublePointer *r);
-void rpcecho_get_pipe_fns(struct api_struct **fns, int *n_fns);
-NTSTATUS rpc_rpcecho_init(void);
-#endif /* __SRV_RPCECHO__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_epmapper.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_epmapper.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_epmapper.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,646 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * server auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/srv_epmapper.h"
-
-static bool api_epm_Insert(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct epm_Insert *r;
-
-	call = &ndr_table_epmapper.calls[NDR_EPM_INSERT];
-
-	r = talloc(talloc_tos(), struct epm_Insert);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(epm_Insert, r);
-	}
-
-	r->out.result = _epm_Insert(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(epm_Insert, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_epm_Delete(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct epm_Delete *r;
-
-	call = &ndr_table_epmapper.calls[NDR_EPM_DELETE];
-
-	r = talloc(talloc_tos(), struct epm_Delete);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(epm_Delete, r);
-	}
-
-	r->out.result = _epm_Delete(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(epm_Delete, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_epm_Lookup(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct epm_Lookup *r;
-
-	call = &ndr_table_epmapper.calls[NDR_EPM_LOOKUP];
-
-	r = talloc(talloc_tos(), struct epm_Lookup);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(epm_Lookup, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.entry_handle = r->in.entry_handle;
-	r->out.num_ents = talloc_zero(r, uint32_t);
-	if (r->out.num_ents == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.entries = talloc_zero_array(r, struct epm_entry_t, r->in.max_ents);
-	if (r->out.entries == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _epm_Lookup(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(epm_Lookup, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_epm_Map(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct epm_Map *r;
-
-	call = &ndr_table_epmapper.calls[NDR_EPM_MAP];
-
-	r = talloc(talloc_tos(), struct epm_Map);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(epm_Map, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.entry_handle = r->in.entry_handle;
-	r->out.num_towers = talloc_zero(r, uint32_t);
-	if (r->out.num_towers == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.towers = talloc_zero_array(r, struct epm_twr_p_t, r->in.max_towers);
-	if (r->out.towers == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _epm_Map(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(epm_Map, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_epm_LookupHandleFree(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct epm_LookupHandleFree *r;
-
-	call = &ndr_table_epmapper.calls[NDR_EPM_LOOKUPHANDLEFREE];
-
-	r = talloc(talloc_tos(), struct epm_LookupHandleFree);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(epm_LookupHandleFree, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.entry_handle = r->in.entry_handle;
-	r->out.result = _epm_LookupHandleFree(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(epm_LookupHandleFree, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_epm_InqObject(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct epm_InqObject *r;
-
-	call = &ndr_table_epmapper.calls[NDR_EPM_INQOBJECT];
-
-	r = talloc(talloc_tos(), struct epm_InqObject);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(epm_InqObject, r);
-	}
-
-	r->out.result = _epm_InqObject(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(epm_InqObject, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_epm_MgmtDelete(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct epm_MgmtDelete *r;
-
-	call = &ndr_table_epmapper.calls[NDR_EPM_MGMTDELETE];
-
-	r = talloc(talloc_tos(), struct epm_MgmtDelete);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(epm_MgmtDelete, r);
-	}
-
-	r->out.result = _epm_MgmtDelete(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(epm_MgmtDelete, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_epm_MapAuth(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct epm_MapAuth *r;
-
-	call = &ndr_table_epmapper.calls[NDR_EPM_MAPAUTH];
-
-	r = talloc(talloc_tos(), struct epm_MapAuth);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(epm_MapAuth, r);
-	}
-
-	r->out.result = _epm_MapAuth(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(epm_MapAuth, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-
-/* Tables */
-static struct api_struct api_epmapper_cmds[] = 
-{
-	{"EPM_INSERT", NDR_EPM_INSERT, api_epm_Insert},
-	{"EPM_DELETE", NDR_EPM_DELETE, api_epm_Delete},
-	{"EPM_LOOKUP", NDR_EPM_LOOKUP, api_epm_Lookup},
-	{"EPM_MAP", NDR_EPM_MAP, api_epm_Map},
-	{"EPM_LOOKUPHANDLEFREE", NDR_EPM_LOOKUPHANDLEFREE, api_epm_LookupHandleFree},
-	{"EPM_INQOBJECT", NDR_EPM_INQOBJECT, api_epm_InqObject},
-	{"EPM_MGMTDELETE", NDR_EPM_MGMTDELETE, api_epm_MgmtDelete},
-	{"EPM_MAPAUTH", NDR_EPM_MAPAUTH, api_epm_MapAuth},
-};
-
-void epmapper_get_pipe_fns(struct api_struct **fns, int *n_fns)
-{
-	*fns = api_epmapper_cmds;
-	*n_fns = sizeof(api_epmapper_cmds) / sizeof(struct api_struct);
-}
-
-NTSTATUS rpc_epmapper_init(void)
-{
-	return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "epmapper", "epmapper", api_epmapper_cmds, sizeof(api_epmapper_cmds) / sizeof(struct api_struct));
-}

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_epmapper.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_epmapper.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_epmapper.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,14 +0,0 @@
-#include "librpc/gen_ndr/ndr_epmapper.h"
-#ifndef __SRV_EPMAPPER__
-#define __SRV_EPMAPPER__
-uint32 _epm_Insert(pipes_struct *p, struct epm_Insert *r);
-uint32 _epm_Delete(pipes_struct *p, struct epm_Delete *r);
-uint32 _epm_Lookup(pipes_struct *p, struct epm_Lookup *r);
-uint32 _epm_Map(pipes_struct *p, struct epm_Map *r);
-uint32 _epm_LookupHandleFree(pipes_struct *p, struct epm_LookupHandleFree *r);
-uint32 _epm_InqObject(pipes_struct *p, struct epm_InqObject *r);
-uint32 _epm_MgmtDelete(pipes_struct *p, struct epm_MgmtDelete *r);
-uint32 _epm_MapAuth(pipes_struct *p, struct epm_MapAuth *r);
-void epmapper_get_pipe_fns(struct api_struct **fns, int *n_fns);
-NTSTATUS rpc_epmapper_init(void);
-#endif /* __SRV_EPMAPPER__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_eventlog.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_eventlog.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_eventlog.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,1842 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * server auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/srv_eventlog.h"
-
-static bool api_eventlog_ClearEventLogW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct eventlog_ClearEventLogW *r;
-
-	call = &ndr_table_eventlog.calls[NDR_EVENTLOG_CLEAREVENTLOGW];
-
-	r = talloc(talloc_tos(), struct eventlog_ClearEventLogW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_ClearEventLogW, r);
-	}
-
-	r->out.result = _eventlog_ClearEventLogW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_ClearEventLogW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_eventlog_BackupEventLogW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct eventlog_BackupEventLogW *r;
-
-	call = &ndr_table_eventlog.calls[NDR_EVENTLOG_BACKUPEVENTLOGW];
-
-	r = talloc(talloc_tos(), struct eventlog_BackupEventLogW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_BackupEventLogW, r);
-	}
-
-	r->out.result = _eventlog_BackupEventLogW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_BackupEventLogW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_eventlog_CloseEventLog(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct eventlog_CloseEventLog *r;
-
-	call = &ndr_table_eventlog.calls[NDR_EVENTLOG_CLOSEEVENTLOG];
-
-	r = talloc(talloc_tos(), struct eventlog_CloseEventLog);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_CloseEventLog, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.handle = r->in.handle;
-	r->out.result = _eventlog_CloseEventLog(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_CloseEventLog, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_eventlog_DeregisterEventSource(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct eventlog_DeregisterEventSource *r;
-
-	call = &ndr_table_eventlog.calls[NDR_EVENTLOG_DEREGISTEREVENTSOURCE];
-
-	r = talloc(talloc_tos(), struct eventlog_DeregisterEventSource);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_DeregisterEventSource, r);
-	}
-
-	r->out.result = _eventlog_DeregisterEventSource(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_DeregisterEventSource, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_eventlog_GetNumRecords(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct eventlog_GetNumRecords *r;
-
-	call = &ndr_table_eventlog.calls[NDR_EVENTLOG_GETNUMRECORDS];
-
-	r = talloc(talloc_tos(), struct eventlog_GetNumRecords);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_GetNumRecords, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.number = talloc_zero(r, uint32_t);
-	if (r->out.number == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _eventlog_GetNumRecords(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_GetNumRecords, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_eventlog_GetOldestRecord(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct eventlog_GetOldestRecord *r;
-
-	call = &ndr_table_eventlog.calls[NDR_EVENTLOG_GETOLDESTRECORD];
-
-	r = talloc(talloc_tos(), struct eventlog_GetOldestRecord);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_GetOldestRecord, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.oldest_entry = talloc_zero(r, uint32_t);
-	if (r->out.oldest_entry == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _eventlog_GetOldestRecord(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_GetOldestRecord, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_eventlog_ChangeNotify(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct eventlog_ChangeNotify *r;
-
-	call = &ndr_table_eventlog.calls[NDR_EVENTLOG_CHANGENOTIFY];
-
-	r = talloc(talloc_tos(), struct eventlog_ChangeNotify);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_ChangeNotify, r);
-	}
-
-	r->out.result = _eventlog_ChangeNotify(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_ChangeNotify, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_eventlog_OpenEventLogW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct eventlog_OpenEventLogW *r;
-
-	call = &ndr_table_eventlog.calls[NDR_EVENTLOG_OPENEVENTLOGW];
-
-	r = talloc(talloc_tos(), struct eventlog_OpenEventLogW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_OpenEventLogW, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.handle = talloc_zero(r, struct policy_handle);
-	if (r->out.handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _eventlog_OpenEventLogW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_OpenEventLogW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_eventlog_RegisterEventSourceW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct eventlog_RegisterEventSourceW *r;
-
-	call = &ndr_table_eventlog.calls[NDR_EVENTLOG_REGISTEREVENTSOURCEW];
-
-	r = talloc(talloc_tos(), struct eventlog_RegisterEventSourceW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_RegisterEventSourceW, r);
-	}
-
-	r->out.result = _eventlog_RegisterEventSourceW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_RegisterEventSourceW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_eventlog_OpenBackupEventLogW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct eventlog_OpenBackupEventLogW *r;
-
-	call = &ndr_table_eventlog.calls[NDR_EVENTLOG_OPENBACKUPEVENTLOGW];
-
-	r = talloc(talloc_tos(), struct eventlog_OpenBackupEventLogW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_OpenBackupEventLogW, r);
-	}
-
-	r->out.result = _eventlog_OpenBackupEventLogW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_OpenBackupEventLogW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_eventlog_ReadEventLogW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct eventlog_ReadEventLogW *r;
-
-	call = &ndr_table_eventlog.calls[NDR_EVENTLOG_READEVENTLOGW];
-
-	r = talloc(talloc_tos(), struct eventlog_ReadEventLogW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_ReadEventLogW, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.data = talloc_zero_array(r, uint8_t, r->in.number_of_bytes);
-	if (r->out.data == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.sent_size = talloc_zero(r, uint32_t);
-	if (r->out.sent_size == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.real_size = talloc_zero(r, uint32_t);
-	if (r->out.real_size == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _eventlog_ReadEventLogW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_ReadEventLogW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_eventlog_ReportEventW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct eventlog_ReportEventW *r;
-
-	call = &ndr_table_eventlog.calls[NDR_EVENTLOG_REPORTEVENTW];
-
-	r = talloc(talloc_tos(), struct eventlog_ReportEventW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_ReportEventW, r);
-	}
-
-	r->out.result = _eventlog_ReportEventW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_ReportEventW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_eventlog_ClearEventLogA(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct eventlog_ClearEventLogA *r;
-
-	call = &ndr_table_eventlog.calls[NDR_EVENTLOG_CLEAREVENTLOGA];
-
-	r = talloc(talloc_tos(), struct eventlog_ClearEventLogA);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_ClearEventLogA, r);
-	}
-
-	r->out.result = _eventlog_ClearEventLogA(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_ClearEventLogA, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_eventlog_BackupEventLogA(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct eventlog_BackupEventLogA *r;
-
-	call = &ndr_table_eventlog.calls[NDR_EVENTLOG_BACKUPEVENTLOGA];
-
-	r = talloc(talloc_tos(), struct eventlog_BackupEventLogA);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_BackupEventLogA, r);
-	}
-
-	r->out.result = _eventlog_BackupEventLogA(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_BackupEventLogA, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_eventlog_OpenEventLogA(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct eventlog_OpenEventLogA *r;
-
-	call = &ndr_table_eventlog.calls[NDR_EVENTLOG_OPENEVENTLOGA];
-
-	r = talloc(talloc_tos(), struct eventlog_OpenEventLogA);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_OpenEventLogA, r);
-	}
-
-	r->out.result = _eventlog_OpenEventLogA(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_OpenEventLogA, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_eventlog_RegisterEventSourceA(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct eventlog_RegisterEventSourceA *r;
-
-	call = &ndr_table_eventlog.calls[NDR_EVENTLOG_REGISTEREVENTSOURCEA];
-
-	r = talloc(talloc_tos(), struct eventlog_RegisterEventSourceA);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_RegisterEventSourceA, r);
-	}
-
-	r->out.result = _eventlog_RegisterEventSourceA(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_RegisterEventSourceA, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_eventlog_OpenBackupEventLogA(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct eventlog_OpenBackupEventLogA *r;
-
-	call = &ndr_table_eventlog.calls[NDR_EVENTLOG_OPENBACKUPEVENTLOGA];
-
-	r = talloc(talloc_tos(), struct eventlog_OpenBackupEventLogA);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_OpenBackupEventLogA, r);
-	}
-
-	r->out.result = _eventlog_OpenBackupEventLogA(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_OpenBackupEventLogA, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_eventlog_ReadEventLogA(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct eventlog_ReadEventLogA *r;
-
-	call = &ndr_table_eventlog.calls[NDR_EVENTLOG_READEVENTLOGA];
-
-	r = talloc(talloc_tos(), struct eventlog_ReadEventLogA);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_ReadEventLogA, r);
-	}
-
-	r->out.result = _eventlog_ReadEventLogA(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_ReadEventLogA, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_eventlog_ReportEventA(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct eventlog_ReportEventA *r;
-
-	call = &ndr_table_eventlog.calls[NDR_EVENTLOG_REPORTEVENTA];
-
-	r = talloc(talloc_tos(), struct eventlog_ReportEventA);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_ReportEventA, r);
-	}
-
-	r->out.result = _eventlog_ReportEventA(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_ReportEventA, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_eventlog_RegisterClusterSvc(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct eventlog_RegisterClusterSvc *r;
-
-	call = &ndr_table_eventlog.calls[NDR_EVENTLOG_REGISTERCLUSTERSVC];
-
-	r = talloc(talloc_tos(), struct eventlog_RegisterClusterSvc);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_RegisterClusterSvc, r);
-	}
-
-	r->out.result = _eventlog_RegisterClusterSvc(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_RegisterClusterSvc, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_eventlog_DeregisterClusterSvc(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct eventlog_DeregisterClusterSvc *r;
-
-	call = &ndr_table_eventlog.calls[NDR_EVENTLOG_DEREGISTERCLUSTERSVC];
-
-	r = talloc(talloc_tos(), struct eventlog_DeregisterClusterSvc);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_DeregisterClusterSvc, r);
-	}
-
-	r->out.result = _eventlog_DeregisterClusterSvc(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_DeregisterClusterSvc, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_eventlog_WriteClusterEvents(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct eventlog_WriteClusterEvents *r;
-
-	call = &ndr_table_eventlog.calls[NDR_EVENTLOG_WRITECLUSTEREVENTS];
-
-	r = talloc(talloc_tos(), struct eventlog_WriteClusterEvents);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_WriteClusterEvents, r);
-	}
-
-	r->out.result = _eventlog_WriteClusterEvents(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_WriteClusterEvents, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_eventlog_GetLogIntormation(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct eventlog_GetLogIntormation *r;
-
-	call = &ndr_table_eventlog.calls[NDR_EVENTLOG_GETLOGINTORMATION];
-
-	r = talloc(talloc_tos(), struct eventlog_GetLogIntormation);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_GetLogIntormation, r);
-	}
-
-	r->out.result = _eventlog_GetLogIntormation(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_GetLogIntormation, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_eventlog_FlushEventLog(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct eventlog_FlushEventLog *r;
-
-	call = &ndr_table_eventlog.calls[NDR_EVENTLOG_FLUSHEVENTLOG];
-
-	r = talloc(talloc_tos(), struct eventlog_FlushEventLog);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(eventlog_FlushEventLog, r);
-	}
-
-	r->out.result = _eventlog_FlushEventLog(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(eventlog_FlushEventLog, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-
-/* Tables */
-static struct api_struct api_eventlog_cmds[] = 
-{
-	{"EVENTLOG_CLEAREVENTLOGW", NDR_EVENTLOG_CLEAREVENTLOGW, api_eventlog_ClearEventLogW},
-	{"EVENTLOG_BACKUPEVENTLOGW", NDR_EVENTLOG_BACKUPEVENTLOGW, api_eventlog_BackupEventLogW},
-	{"EVENTLOG_CLOSEEVENTLOG", NDR_EVENTLOG_CLOSEEVENTLOG, api_eventlog_CloseEventLog},
-	{"EVENTLOG_DEREGISTEREVENTSOURCE", NDR_EVENTLOG_DEREGISTEREVENTSOURCE, api_eventlog_DeregisterEventSource},
-	{"EVENTLOG_GETNUMRECORDS", NDR_EVENTLOG_GETNUMRECORDS, api_eventlog_GetNumRecords},
-	{"EVENTLOG_GETOLDESTRECORD", NDR_EVENTLOG_GETOLDESTRECORD, api_eventlog_GetOldestRecord},
-	{"EVENTLOG_CHANGENOTIFY", NDR_EVENTLOG_CHANGENOTIFY, api_eventlog_ChangeNotify},
-	{"EVENTLOG_OPENEVENTLOGW", NDR_EVENTLOG_OPENEVENTLOGW, api_eventlog_OpenEventLogW},
-	{"EVENTLOG_REGISTEREVENTSOURCEW", NDR_EVENTLOG_REGISTEREVENTSOURCEW, api_eventlog_RegisterEventSourceW},
-	{"EVENTLOG_OPENBACKUPEVENTLOGW", NDR_EVENTLOG_OPENBACKUPEVENTLOGW, api_eventlog_OpenBackupEventLogW},
-	{"EVENTLOG_READEVENTLOGW", NDR_EVENTLOG_READEVENTLOGW, api_eventlog_ReadEventLogW},
-	{"EVENTLOG_REPORTEVENTW", NDR_EVENTLOG_REPORTEVENTW, api_eventlog_ReportEventW},
-	{"EVENTLOG_CLEAREVENTLOGA", NDR_EVENTLOG_CLEAREVENTLOGA, api_eventlog_ClearEventLogA},
-	{"EVENTLOG_BACKUPEVENTLOGA", NDR_EVENTLOG_BACKUPEVENTLOGA, api_eventlog_BackupEventLogA},
-	{"EVENTLOG_OPENEVENTLOGA", NDR_EVENTLOG_OPENEVENTLOGA, api_eventlog_OpenEventLogA},
-	{"EVENTLOG_REGISTEREVENTSOURCEA", NDR_EVENTLOG_REGISTEREVENTSOURCEA, api_eventlog_RegisterEventSourceA},
-	{"EVENTLOG_OPENBACKUPEVENTLOGA", NDR_EVENTLOG_OPENBACKUPEVENTLOGA, api_eventlog_OpenBackupEventLogA},
-	{"EVENTLOG_READEVENTLOGA", NDR_EVENTLOG_READEVENTLOGA, api_eventlog_ReadEventLogA},
-	{"EVENTLOG_REPORTEVENTA", NDR_EVENTLOG_REPORTEVENTA, api_eventlog_ReportEventA},
-	{"EVENTLOG_REGISTERCLUSTERSVC", NDR_EVENTLOG_REGISTERCLUSTERSVC, api_eventlog_RegisterClusterSvc},
-	{"EVENTLOG_DEREGISTERCLUSTERSVC", NDR_EVENTLOG_DEREGISTERCLUSTERSVC, api_eventlog_DeregisterClusterSvc},
-	{"EVENTLOG_WRITECLUSTEREVENTS", NDR_EVENTLOG_WRITECLUSTEREVENTS, api_eventlog_WriteClusterEvents},
-	{"EVENTLOG_GETLOGINTORMATION", NDR_EVENTLOG_GETLOGINTORMATION, api_eventlog_GetLogIntormation},
-	{"EVENTLOG_FLUSHEVENTLOG", NDR_EVENTLOG_FLUSHEVENTLOG, api_eventlog_FlushEventLog},
-};
-
-void eventlog_get_pipe_fns(struct api_struct **fns, int *n_fns)
-{
-	*fns = api_eventlog_cmds;
-	*n_fns = sizeof(api_eventlog_cmds) / sizeof(struct api_struct);
-}
-
-NTSTATUS rpc_eventlog_init(void)
-{
-	return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "eventlog", "eventlog", api_eventlog_cmds, sizeof(api_eventlog_cmds) / sizeof(struct api_struct));
-}

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_eventlog.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_eventlog.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_eventlog.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,30 +0,0 @@
-#include "librpc/gen_ndr/ndr_eventlog.h"
-#ifndef __SRV_EVENTLOG__
-#define __SRV_EVENTLOG__
-NTSTATUS _eventlog_ClearEventLogW(pipes_struct *p, struct eventlog_ClearEventLogW *r);
-NTSTATUS _eventlog_BackupEventLogW(pipes_struct *p, struct eventlog_BackupEventLogW *r);
-NTSTATUS _eventlog_CloseEventLog(pipes_struct *p, struct eventlog_CloseEventLog *r);
-NTSTATUS _eventlog_DeregisterEventSource(pipes_struct *p, struct eventlog_DeregisterEventSource *r);
-NTSTATUS _eventlog_GetNumRecords(pipes_struct *p, struct eventlog_GetNumRecords *r);
-NTSTATUS _eventlog_GetOldestRecord(pipes_struct *p, struct eventlog_GetOldestRecord *r);
-NTSTATUS _eventlog_ChangeNotify(pipes_struct *p, struct eventlog_ChangeNotify *r);
-NTSTATUS _eventlog_OpenEventLogW(pipes_struct *p, struct eventlog_OpenEventLogW *r);
-NTSTATUS _eventlog_RegisterEventSourceW(pipes_struct *p, struct eventlog_RegisterEventSourceW *r);
-NTSTATUS _eventlog_OpenBackupEventLogW(pipes_struct *p, struct eventlog_OpenBackupEventLogW *r);
-NTSTATUS _eventlog_ReadEventLogW(pipes_struct *p, struct eventlog_ReadEventLogW *r);
-NTSTATUS _eventlog_ReportEventW(pipes_struct *p, struct eventlog_ReportEventW *r);
-NTSTATUS _eventlog_ClearEventLogA(pipes_struct *p, struct eventlog_ClearEventLogA *r);
-NTSTATUS _eventlog_BackupEventLogA(pipes_struct *p, struct eventlog_BackupEventLogA *r);
-NTSTATUS _eventlog_OpenEventLogA(pipes_struct *p, struct eventlog_OpenEventLogA *r);
-NTSTATUS _eventlog_RegisterEventSourceA(pipes_struct *p, struct eventlog_RegisterEventSourceA *r);
-NTSTATUS _eventlog_OpenBackupEventLogA(pipes_struct *p, struct eventlog_OpenBackupEventLogA *r);
-NTSTATUS _eventlog_ReadEventLogA(pipes_struct *p, struct eventlog_ReadEventLogA *r);
-NTSTATUS _eventlog_ReportEventA(pipes_struct *p, struct eventlog_ReportEventA *r);
-NTSTATUS _eventlog_RegisterClusterSvc(pipes_struct *p, struct eventlog_RegisterClusterSvc *r);
-NTSTATUS _eventlog_DeregisterClusterSvc(pipes_struct *p, struct eventlog_DeregisterClusterSvc *r);
-NTSTATUS _eventlog_WriteClusterEvents(pipes_struct *p, struct eventlog_WriteClusterEvents *r);
-NTSTATUS _eventlog_GetLogIntormation(pipes_struct *p, struct eventlog_GetLogIntormation *r);
-NTSTATUS _eventlog_FlushEventLog(pipes_struct *p, struct eventlog_FlushEventLog *r);
-void eventlog_get_pipe_fns(struct api_struct **fns, int *n_fns);
-NTSTATUS rpc_eventlog_init(void);
-#endif /* __SRV_EVENTLOG__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_initshutdown.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_initshutdown.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_initshutdown.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,246 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * server auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/srv_initshutdown.h"
-
-static bool api_initshutdown_Init(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct initshutdown_Init *r;
-
-	call = &ndr_table_initshutdown.calls[NDR_INITSHUTDOWN_INIT];
-
-	r = talloc(talloc_tos(), struct initshutdown_Init);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(initshutdown_Init, r);
-	}
-
-	r->out.result = _initshutdown_Init(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(initshutdown_Init, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_initshutdown_Abort(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct initshutdown_Abort *r;
-
-	call = &ndr_table_initshutdown.calls[NDR_INITSHUTDOWN_ABORT];
-
-	r = talloc(talloc_tos(), struct initshutdown_Abort);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(initshutdown_Abort, r);
-	}
-
-	r->out.result = _initshutdown_Abort(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(initshutdown_Abort, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_initshutdown_InitEx(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct initshutdown_InitEx *r;
-
-	call = &ndr_table_initshutdown.calls[NDR_INITSHUTDOWN_INITEX];
-
-	r = talloc(talloc_tos(), struct initshutdown_InitEx);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(initshutdown_InitEx, r);
-	}
-
-	r->out.result = _initshutdown_InitEx(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(initshutdown_InitEx, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-
-/* Tables */
-static struct api_struct api_initshutdown_cmds[] = 
-{
-	{"INITSHUTDOWN_INIT", NDR_INITSHUTDOWN_INIT, api_initshutdown_Init},
-	{"INITSHUTDOWN_ABORT", NDR_INITSHUTDOWN_ABORT, api_initshutdown_Abort},
-	{"INITSHUTDOWN_INITEX", NDR_INITSHUTDOWN_INITEX, api_initshutdown_InitEx},
-};
-
-void initshutdown_get_pipe_fns(struct api_struct **fns, int *n_fns)
-{
-	*fns = api_initshutdown_cmds;
-	*n_fns = sizeof(api_initshutdown_cmds) / sizeof(struct api_struct);
-}
-
-NTSTATUS rpc_initshutdown_init(void)
-{
-	return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "initshutdown", "initshutdown", api_initshutdown_cmds, sizeof(api_initshutdown_cmds) / sizeof(struct api_struct));
-}

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_initshutdown.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_initshutdown.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_initshutdown.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,9 +0,0 @@
-#include "librpc/gen_ndr/ndr_initshutdown.h"
-#ifndef __SRV_INITSHUTDOWN__
-#define __SRV_INITSHUTDOWN__
-WERROR _initshutdown_Init(pipes_struct *p, struct initshutdown_Init *r);
-WERROR _initshutdown_Abort(pipes_struct *p, struct initshutdown_Abort *r);
-WERROR _initshutdown_InitEx(pipes_struct *p, struct initshutdown_InitEx *r);
-void initshutdown_get_pipe_fns(struct api_struct **fns, int *n_fns);
-NTSTATUS rpc_initshutdown_init(void);
-#endif /* __SRV_INITSHUTDOWN__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_lsa.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_lsa.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_lsa.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,6375 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * server auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/srv_lsa.h"
-
-static bool api_lsa_Close(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_Close *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_CLOSE];
-
-	r = talloc(talloc_tos(), struct lsa_Close);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_Close, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.handle = r->in.handle;
-	r->out.result = _lsa_Close(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_Close, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_Delete(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_Delete *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_DELETE];
-
-	r = talloc(talloc_tos(), struct lsa_Delete);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_Delete, r);
-	}
-
-	r->out.result = _lsa_Delete(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_Delete, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_EnumPrivs(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_EnumPrivs *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_ENUMPRIVS];
-
-	r = talloc(talloc_tos(), struct lsa_EnumPrivs);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_EnumPrivs, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.resume_handle = r->in.resume_handle;
-	r->out.privs = talloc_zero(r, struct lsa_PrivArray);
-	if (r->out.privs == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_EnumPrivs(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_EnumPrivs, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_QuerySecurity(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_QuerySecurity *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_QUERYSECURITY];
-
-	r = talloc(talloc_tos(), struct lsa_QuerySecurity);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_QuerySecurity, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.sdbuf = talloc_zero(r, struct sec_desc_buf *);
-	if (r->out.sdbuf == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_QuerySecurity(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_QuerySecurity, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_SetSecObj(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_SetSecObj *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_SETSECOBJ];
-
-	r = talloc(talloc_tos(), struct lsa_SetSecObj);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_SetSecObj, r);
-	}
-
-	r->out.result = _lsa_SetSecObj(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_SetSecObj, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_ChangePassword(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_ChangePassword *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_CHANGEPASSWORD];
-
-	r = talloc(talloc_tos(), struct lsa_ChangePassword);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_ChangePassword, r);
-	}
-
-	r->out.result = _lsa_ChangePassword(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_ChangePassword, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_OpenPolicy(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_OpenPolicy *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_OPENPOLICY];
-
-	r = talloc(talloc_tos(), struct lsa_OpenPolicy);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_OpenPolicy, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.handle = talloc_zero(r, struct policy_handle);
-	if (r->out.handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_OpenPolicy(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_OpenPolicy, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_QueryInfoPolicy(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_QueryInfoPolicy *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_QUERYINFOPOLICY];
-
-	r = talloc(talloc_tos(), struct lsa_QueryInfoPolicy);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_QueryInfoPolicy, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, union lsa_PolicyInformation *);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_QueryInfoPolicy(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_QueryInfoPolicy, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_SetInfoPolicy(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_SetInfoPolicy *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_SETINFOPOLICY];
-
-	r = talloc(talloc_tos(), struct lsa_SetInfoPolicy);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_SetInfoPolicy, r);
-	}
-
-	r->out.result = _lsa_SetInfoPolicy(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_SetInfoPolicy, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_ClearAuditLog(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_ClearAuditLog *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_CLEARAUDITLOG];
-
-	r = talloc(talloc_tos(), struct lsa_ClearAuditLog);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_ClearAuditLog, r);
-	}
-
-	r->out.result = _lsa_ClearAuditLog(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_ClearAuditLog, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_CreateAccount(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_CreateAccount *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_CREATEACCOUNT];
-
-	r = talloc(talloc_tos(), struct lsa_CreateAccount);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CreateAccount, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.acct_handle = talloc_zero(r, struct policy_handle);
-	if (r->out.acct_handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_CreateAccount(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CreateAccount, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_EnumAccounts(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_EnumAccounts *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_ENUMACCOUNTS];
-
-	r = talloc(talloc_tos(), struct lsa_EnumAccounts);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_EnumAccounts, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.resume_handle = r->in.resume_handle;
-	r->out.sids = talloc_zero(r, struct lsa_SidArray);
-	if (r->out.sids == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_EnumAccounts(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_EnumAccounts, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_CreateTrustedDomain(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_CreateTrustedDomain *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_CREATETRUSTEDDOMAIN];
-
-	r = talloc(talloc_tos(), struct lsa_CreateTrustedDomain);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CreateTrustedDomain, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.trustdom_handle = talloc_zero(r, struct policy_handle);
-	if (r->out.trustdom_handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_CreateTrustedDomain(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CreateTrustedDomain, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_EnumTrustDom(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_EnumTrustDom *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_ENUMTRUSTDOM];
-
-	r = talloc(talloc_tos(), struct lsa_EnumTrustDom);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_EnumTrustDom, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.resume_handle = r->in.resume_handle;
-	r->out.domains = talloc_zero(r, struct lsa_DomainList);
-	if (r->out.domains == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_EnumTrustDom(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_EnumTrustDom, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_LookupNames(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_LookupNames *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_LOOKUPNAMES];
-
-	r = talloc(talloc_tos(), struct lsa_LookupNames);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LookupNames, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.domains = talloc_zero(r, struct lsa_RefDomainList *);
-	if (r->out.domains == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.sids = r->in.sids;
-	r->out.count = r->in.count;
-	r->out.result = _lsa_LookupNames(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LookupNames, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_LookupSids(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_LookupSids *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_LOOKUPSIDS];
-
-	r = talloc(talloc_tos(), struct lsa_LookupSids);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LookupSids, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.domains = talloc_zero(r, struct lsa_RefDomainList *);
-	if (r->out.domains == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.names = r->in.names;
-	r->out.count = r->in.count;
-	r->out.result = _lsa_LookupSids(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LookupSids, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_CreateSecret(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_CreateSecret *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_CREATESECRET];
-
-	r = talloc(talloc_tos(), struct lsa_CreateSecret);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CreateSecret, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.sec_handle = talloc_zero(r, struct policy_handle);
-	if (r->out.sec_handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_CreateSecret(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CreateSecret, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_OpenAccount(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_OpenAccount *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_OPENACCOUNT];
-
-	r = talloc(talloc_tos(), struct lsa_OpenAccount);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_OpenAccount, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.acct_handle = talloc_zero(r, struct policy_handle);
-	if (r->out.acct_handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_OpenAccount(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_OpenAccount, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_EnumPrivsAccount(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_EnumPrivsAccount *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_ENUMPRIVSACCOUNT];
-
-	r = talloc(talloc_tos(), struct lsa_EnumPrivsAccount);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_EnumPrivsAccount, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.privs = talloc_zero(r, struct lsa_PrivilegeSet *);
-	if (r->out.privs == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_EnumPrivsAccount(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_EnumPrivsAccount, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_AddPrivilegesToAccount(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_AddPrivilegesToAccount *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_ADDPRIVILEGESTOACCOUNT];
-
-	r = talloc(talloc_tos(), struct lsa_AddPrivilegesToAccount);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_AddPrivilegesToAccount, r);
-	}
-
-	r->out.result = _lsa_AddPrivilegesToAccount(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_AddPrivilegesToAccount, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_RemovePrivilegesFromAccount(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_RemovePrivilegesFromAccount *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_REMOVEPRIVILEGESFROMACCOUNT];
-
-	r = talloc(talloc_tos(), struct lsa_RemovePrivilegesFromAccount);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_RemovePrivilegesFromAccount, r);
-	}
-
-	r->out.result = _lsa_RemovePrivilegesFromAccount(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_RemovePrivilegesFromAccount, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_GetQuotasForAccount(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_GetQuotasForAccount *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_GETQUOTASFORACCOUNT];
-
-	r = talloc(talloc_tos(), struct lsa_GetQuotasForAccount);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_GetQuotasForAccount, r);
-	}
-
-	r->out.result = _lsa_GetQuotasForAccount(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_GetQuotasForAccount, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_SetQuotasForAccount(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_SetQuotasForAccount *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_SETQUOTASFORACCOUNT];
-
-	r = talloc(talloc_tos(), struct lsa_SetQuotasForAccount);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_SetQuotasForAccount, r);
-	}
-
-	r->out.result = _lsa_SetQuotasForAccount(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_SetQuotasForAccount, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_GetSystemAccessAccount(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_GetSystemAccessAccount *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_GETSYSTEMACCESSACCOUNT];
-
-	r = talloc(talloc_tos(), struct lsa_GetSystemAccessAccount);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_GetSystemAccessAccount, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.access_mask = talloc_zero(r, uint32_t);
-	if (r->out.access_mask == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_GetSystemAccessAccount(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_GetSystemAccessAccount, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_SetSystemAccessAccount(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_SetSystemAccessAccount *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_SETSYSTEMACCESSACCOUNT];
-
-	r = talloc(talloc_tos(), struct lsa_SetSystemAccessAccount);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_SetSystemAccessAccount, r);
-	}
-
-	r->out.result = _lsa_SetSystemAccessAccount(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_SetSystemAccessAccount, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_OpenTrustedDomain(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_OpenTrustedDomain *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_OPENTRUSTEDDOMAIN];
-
-	r = talloc(talloc_tos(), struct lsa_OpenTrustedDomain);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_OpenTrustedDomain, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.trustdom_handle = talloc_zero(r, struct policy_handle);
-	if (r->out.trustdom_handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_OpenTrustedDomain(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_OpenTrustedDomain, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_QueryTrustedDomainInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_QueryTrustedDomainInfo *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_QUERYTRUSTEDDOMAININFO];
-
-	r = talloc(talloc_tos(), struct lsa_QueryTrustedDomainInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_QueryTrustedDomainInfo, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, union lsa_TrustedDomainInfo *);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_QueryTrustedDomainInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_QueryTrustedDomainInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_SetInformationTrustedDomain(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_SetInformationTrustedDomain *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_SETINFORMATIONTRUSTEDDOMAIN];
-
-	r = talloc(talloc_tos(), struct lsa_SetInformationTrustedDomain);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_SetInformationTrustedDomain, r);
-	}
-
-	r->out.result = _lsa_SetInformationTrustedDomain(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_SetInformationTrustedDomain, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_OpenSecret(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_OpenSecret *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_OPENSECRET];
-
-	r = talloc(talloc_tos(), struct lsa_OpenSecret);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_OpenSecret, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.sec_handle = talloc_zero(r, struct policy_handle);
-	if (r->out.sec_handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_OpenSecret(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_OpenSecret, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_SetSecret(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_SetSecret *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_SETSECRET];
-
-	r = talloc(talloc_tos(), struct lsa_SetSecret);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_SetSecret, r);
-	}
-
-	r->out.result = _lsa_SetSecret(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_SetSecret, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_QuerySecret(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_QuerySecret *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_QUERYSECRET];
-
-	r = talloc(talloc_tos(), struct lsa_QuerySecret);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_QuerySecret, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.new_val = r->in.new_val;
-	r->out.new_mtime = r->in.new_mtime;
-	r->out.old_val = r->in.old_val;
-	r->out.old_mtime = r->in.old_mtime;
-	r->out.result = _lsa_QuerySecret(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_QuerySecret, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_LookupPrivValue(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_LookupPrivValue *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_LOOKUPPRIVVALUE];
-
-	r = talloc(talloc_tos(), struct lsa_LookupPrivValue);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LookupPrivValue, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.luid = talloc_zero(r, struct lsa_LUID);
-	if (r->out.luid == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_LookupPrivValue(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LookupPrivValue, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_LookupPrivName(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_LookupPrivName *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_LOOKUPPRIVNAME];
-
-	r = talloc(talloc_tos(), struct lsa_LookupPrivName);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LookupPrivName, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.name = talloc_zero(r, struct lsa_StringLarge *);
-	if (r->out.name == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_LookupPrivName(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LookupPrivName, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_LookupPrivDisplayName(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_LookupPrivDisplayName *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_LOOKUPPRIVDISPLAYNAME];
-
-	r = talloc(talloc_tos(), struct lsa_LookupPrivDisplayName);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LookupPrivDisplayName, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.disp_name = talloc_zero(r, struct lsa_StringLarge *);
-	if (r->out.disp_name == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.returned_language_id = talloc_zero(r, uint16_t);
-	if (r->out.returned_language_id == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_LookupPrivDisplayName(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LookupPrivDisplayName, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_DeleteObject(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_DeleteObject *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_DELETEOBJECT];
-
-	r = talloc(talloc_tos(), struct lsa_DeleteObject);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_DeleteObject, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.handle = r->in.handle;
-	r->out.result = _lsa_DeleteObject(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_DeleteObject, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_EnumAccountsWithUserRight(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_EnumAccountsWithUserRight *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_ENUMACCOUNTSWITHUSERRIGHT];
-
-	r = talloc(talloc_tos(), struct lsa_EnumAccountsWithUserRight);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_EnumAccountsWithUserRight, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.sids = talloc_zero(r, struct lsa_SidArray);
-	if (r->out.sids == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_EnumAccountsWithUserRight(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_EnumAccountsWithUserRight, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_EnumAccountRights(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_EnumAccountRights *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_ENUMACCOUNTRIGHTS];
-
-	r = talloc(talloc_tos(), struct lsa_EnumAccountRights);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_EnumAccountRights, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.rights = talloc_zero(r, struct lsa_RightSet);
-	if (r->out.rights == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_EnumAccountRights(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_EnumAccountRights, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_AddAccountRights(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_AddAccountRights *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_ADDACCOUNTRIGHTS];
-
-	r = talloc(talloc_tos(), struct lsa_AddAccountRights);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_AddAccountRights, r);
-	}
-
-	r->out.result = _lsa_AddAccountRights(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_AddAccountRights, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_RemoveAccountRights(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_RemoveAccountRights *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_REMOVEACCOUNTRIGHTS];
-
-	r = talloc(talloc_tos(), struct lsa_RemoveAccountRights);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_RemoveAccountRights, r);
-	}
-
-	r->out.result = _lsa_RemoveAccountRights(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_RemoveAccountRights, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_QueryTrustedDomainInfoBySid(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_QueryTrustedDomainInfoBySid *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_QUERYTRUSTEDDOMAININFOBYSID];
-
-	r = talloc(talloc_tos(), struct lsa_QueryTrustedDomainInfoBySid);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_QueryTrustedDomainInfoBySid, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, union lsa_TrustedDomainInfo *);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_QueryTrustedDomainInfoBySid(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_QueryTrustedDomainInfoBySid, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_SetTrustedDomainInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_SetTrustedDomainInfo *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_SETTRUSTEDDOMAININFO];
-
-	r = talloc(talloc_tos(), struct lsa_SetTrustedDomainInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_SetTrustedDomainInfo, r);
-	}
-
-	r->out.result = _lsa_SetTrustedDomainInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_SetTrustedDomainInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_DeleteTrustedDomain(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_DeleteTrustedDomain *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_DELETETRUSTEDDOMAIN];
-
-	r = talloc(talloc_tos(), struct lsa_DeleteTrustedDomain);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_DeleteTrustedDomain, r);
-	}
-
-	r->out.result = _lsa_DeleteTrustedDomain(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_DeleteTrustedDomain, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_StorePrivateData(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_StorePrivateData *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_STOREPRIVATEDATA];
-
-	r = talloc(talloc_tos(), struct lsa_StorePrivateData);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_StorePrivateData, r);
-	}
-
-	r->out.result = _lsa_StorePrivateData(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_StorePrivateData, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_RetrievePrivateData(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_RetrievePrivateData *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_RETRIEVEPRIVATEDATA];
-
-	r = talloc(talloc_tos(), struct lsa_RetrievePrivateData);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_RetrievePrivateData, r);
-	}
-
-	r->out.result = _lsa_RetrievePrivateData(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_RetrievePrivateData, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_OpenPolicy2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_OpenPolicy2 *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_OPENPOLICY2];
-
-	r = talloc(talloc_tos(), struct lsa_OpenPolicy2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_OpenPolicy2, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.handle = talloc_zero(r, struct policy_handle);
-	if (r->out.handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_OpenPolicy2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_OpenPolicy2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_GetUserName(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_GetUserName *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_GETUSERNAME];
-
-	r = talloc(talloc_tos(), struct lsa_GetUserName);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_GetUserName, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.account_name = r->in.account_name;
-	r->out.authority_name = r->in.authority_name;
-	r->out.result = _lsa_GetUserName(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_GetUserName, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_QueryInfoPolicy2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_QueryInfoPolicy2 *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_QUERYINFOPOLICY2];
-
-	r = talloc(talloc_tos(), struct lsa_QueryInfoPolicy2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_QueryInfoPolicy2, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, union lsa_PolicyInformation *);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_QueryInfoPolicy2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_QueryInfoPolicy2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_SetInfoPolicy2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_SetInfoPolicy2 *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_SETINFOPOLICY2];
-
-	r = talloc(talloc_tos(), struct lsa_SetInfoPolicy2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_SetInfoPolicy2, r);
-	}
-
-	r->out.result = _lsa_SetInfoPolicy2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_SetInfoPolicy2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_QueryTrustedDomainInfoByName(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_QueryTrustedDomainInfoByName *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_QUERYTRUSTEDDOMAININFOBYNAME];
-
-	r = talloc(talloc_tos(), struct lsa_QueryTrustedDomainInfoByName);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_QueryTrustedDomainInfoByName, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, union lsa_TrustedDomainInfo *);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_QueryTrustedDomainInfoByName(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_QueryTrustedDomainInfoByName, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_SetTrustedDomainInfoByName(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_SetTrustedDomainInfoByName *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_SETTRUSTEDDOMAININFOBYNAME];
-
-	r = talloc(talloc_tos(), struct lsa_SetTrustedDomainInfoByName);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_SetTrustedDomainInfoByName, r);
-	}
-
-	r->out.result = _lsa_SetTrustedDomainInfoByName(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_SetTrustedDomainInfoByName, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_EnumTrustedDomainsEx(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_EnumTrustedDomainsEx *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_ENUMTRUSTEDDOMAINSEX];
-
-	r = talloc(talloc_tos(), struct lsa_EnumTrustedDomainsEx);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_EnumTrustedDomainsEx, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.resume_handle = r->in.resume_handle;
-	r->out.domains = talloc_zero(r, struct lsa_DomainListEx);
-	if (r->out.domains == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_EnumTrustedDomainsEx(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_EnumTrustedDomainsEx, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_CreateTrustedDomainEx(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_CreateTrustedDomainEx *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_CREATETRUSTEDDOMAINEX];
-
-	r = talloc(talloc_tos(), struct lsa_CreateTrustedDomainEx);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CreateTrustedDomainEx, r);
-	}
-
-	r->out.result = _lsa_CreateTrustedDomainEx(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CreateTrustedDomainEx, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_CloseTrustedDomainEx(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_CloseTrustedDomainEx *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_CLOSETRUSTEDDOMAINEX];
-
-	r = talloc(talloc_tos(), struct lsa_CloseTrustedDomainEx);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CloseTrustedDomainEx, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.handle = r->in.handle;
-	r->out.result = _lsa_CloseTrustedDomainEx(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CloseTrustedDomainEx, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_QueryDomainInformationPolicy(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_QueryDomainInformationPolicy *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_QUERYDOMAININFORMATIONPOLICY];
-
-	r = talloc(talloc_tos(), struct lsa_QueryDomainInformationPolicy);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_QueryDomainInformationPolicy, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, union lsa_DomainInformationPolicy *);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_QueryDomainInformationPolicy(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_QueryDomainInformationPolicy, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_SetDomainInformationPolicy(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_SetDomainInformationPolicy *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_SETDOMAININFORMATIONPOLICY];
-
-	r = talloc(talloc_tos(), struct lsa_SetDomainInformationPolicy);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_SetDomainInformationPolicy, r);
-	}
-
-	r->out.result = _lsa_SetDomainInformationPolicy(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_SetDomainInformationPolicy, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_OpenTrustedDomainByName(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_OpenTrustedDomainByName *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_OPENTRUSTEDDOMAINBYNAME];
-
-	r = talloc(talloc_tos(), struct lsa_OpenTrustedDomainByName);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_OpenTrustedDomainByName, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.trustdom_handle = talloc_zero(r, struct policy_handle);
-	if (r->out.trustdom_handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_OpenTrustedDomainByName(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_OpenTrustedDomainByName, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_TestCall(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_TestCall *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_TESTCALL];
-
-	r = talloc(talloc_tos(), struct lsa_TestCall);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_TestCall, r);
-	}
-
-	r->out.result = _lsa_TestCall(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_TestCall, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_LookupSids2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_LookupSids2 *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_LOOKUPSIDS2];
-
-	r = talloc(talloc_tos(), struct lsa_LookupSids2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LookupSids2, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.domains = talloc_zero(r, struct lsa_RefDomainList *);
-	if (r->out.domains == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.names = r->in.names;
-	r->out.count = r->in.count;
-	r->out.result = _lsa_LookupSids2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LookupSids2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_LookupNames2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_LookupNames2 *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_LOOKUPNAMES2];
-
-	r = talloc(talloc_tos(), struct lsa_LookupNames2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LookupNames2, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.domains = talloc_zero(r, struct lsa_RefDomainList *);
-	if (r->out.domains == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.sids = r->in.sids;
-	r->out.count = r->in.count;
-	r->out.result = _lsa_LookupNames2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LookupNames2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_CreateTrustedDomainEx2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_CreateTrustedDomainEx2 *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_CREATETRUSTEDDOMAINEX2];
-
-	r = talloc(talloc_tos(), struct lsa_CreateTrustedDomainEx2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CreateTrustedDomainEx2, r);
-	}
-
-	r->out.result = _lsa_CreateTrustedDomainEx2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CreateTrustedDomainEx2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_CREDRWRITE(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_CREDRWRITE *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_CREDRWRITE];
-
-	r = talloc(talloc_tos(), struct lsa_CREDRWRITE);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CREDRWRITE, r);
-	}
-
-	r->out.result = _lsa_CREDRWRITE(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CREDRWRITE, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_CREDRREAD(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_CREDRREAD *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_CREDRREAD];
-
-	r = talloc(talloc_tos(), struct lsa_CREDRREAD);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CREDRREAD, r);
-	}
-
-	r->out.result = _lsa_CREDRREAD(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CREDRREAD, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_CREDRENUMERATE(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_CREDRENUMERATE *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_CREDRENUMERATE];
-
-	r = talloc(talloc_tos(), struct lsa_CREDRENUMERATE);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CREDRENUMERATE, r);
-	}
-
-	r->out.result = _lsa_CREDRENUMERATE(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CREDRENUMERATE, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_CREDRWRITEDOMAINCREDENTIALS(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_CREDRWRITEDOMAINCREDENTIALS *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_CREDRWRITEDOMAINCREDENTIALS];
-
-	r = talloc(talloc_tos(), struct lsa_CREDRWRITEDOMAINCREDENTIALS);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CREDRWRITEDOMAINCREDENTIALS, r);
-	}
-
-	r->out.result = _lsa_CREDRWRITEDOMAINCREDENTIALS(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CREDRWRITEDOMAINCREDENTIALS, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_CREDRREADDOMAINCREDENTIALS(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_CREDRREADDOMAINCREDENTIALS *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_CREDRREADDOMAINCREDENTIALS];
-
-	r = talloc(talloc_tos(), struct lsa_CREDRREADDOMAINCREDENTIALS);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CREDRREADDOMAINCREDENTIALS, r);
-	}
-
-	r->out.result = _lsa_CREDRREADDOMAINCREDENTIALS(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CREDRREADDOMAINCREDENTIALS, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_CREDRDELETE(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_CREDRDELETE *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_CREDRDELETE];
-
-	r = talloc(talloc_tos(), struct lsa_CREDRDELETE);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CREDRDELETE, r);
-	}
-
-	r->out.result = _lsa_CREDRDELETE(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CREDRDELETE, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_CREDRGETTARGETINFO(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_CREDRGETTARGETINFO *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_CREDRGETTARGETINFO];
-
-	r = talloc(talloc_tos(), struct lsa_CREDRGETTARGETINFO);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CREDRGETTARGETINFO, r);
-	}
-
-	r->out.result = _lsa_CREDRGETTARGETINFO(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CREDRGETTARGETINFO, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_CREDRPROFILELOADED(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_CREDRPROFILELOADED *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_CREDRPROFILELOADED];
-
-	r = talloc(talloc_tos(), struct lsa_CREDRPROFILELOADED);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CREDRPROFILELOADED, r);
-	}
-
-	r->out.result = _lsa_CREDRPROFILELOADED(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CREDRPROFILELOADED, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_LookupNames3(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_LookupNames3 *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_LOOKUPNAMES3];
-
-	r = talloc(talloc_tos(), struct lsa_LookupNames3);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LookupNames3, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.domains = talloc_zero(r, struct lsa_RefDomainList *);
-	if (r->out.domains == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.sids = r->in.sids;
-	r->out.count = r->in.count;
-	r->out.result = _lsa_LookupNames3(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LookupNames3, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_CREDRGETSESSIONTYPES(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_CREDRGETSESSIONTYPES *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_CREDRGETSESSIONTYPES];
-
-	r = talloc(talloc_tos(), struct lsa_CREDRGETSESSIONTYPES);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CREDRGETSESSIONTYPES, r);
-	}
-
-	r->out.result = _lsa_CREDRGETSESSIONTYPES(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CREDRGETSESSIONTYPES, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_LSARREGISTERAUDITEVENT(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_LSARREGISTERAUDITEVENT *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_LSARREGISTERAUDITEVENT];
-
-	r = talloc(talloc_tos(), struct lsa_LSARREGISTERAUDITEVENT);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LSARREGISTERAUDITEVENT, r);
-	}
-
-	r->out.result = _lsa_LSARREGISTERAUDITEVENT(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LSARREGISTERAUDITEVENT, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_LSARGENAUDITEVENT(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_LSARGENAUDITEVENT *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_LSARGENAUDITEVENT];
-
-	r = talloc(talloc_tos(), struct lsa_LSARGENAUDITEVENT);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LSARGENAUDITEVENT, r);
-	}
-
-	r->out.result = _lsa_LSARGENAUDITEVENT(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LSARGENAUDITEVENT, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_LSARUNREGISTERAUDITEVENT(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_LSARUNREGISTERAUDITEVENT *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_LSARUNREGISTERAUDITEVENT];
-
-	r = talloc(talloc_tos(), struct lsa_LSARUNREGISTERAUDITEVENT);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LSARUNREGISTERAUDITEVENT, r);
-	}
-
-	r->out.result = _lsa_LSARUNREGISTERAUDITEVENT(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LSARUNREGISTERAUDITEVENT, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_lsaRQueryForestTrustInformation(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_lsaRQueryForestTrustInformation *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_LSARQUERYFORESTTRUSTINFORMATION];
-
-	r = talloc(talloc_tos(), struct lsa_lsaRQueryForestTrustInformation);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_lsaRQueryForestTrustInformation, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.forest_trust_info = talloc_zero(r, struct lsa_ForestTrustInformation *);
-	if (r->out.forest_trust_info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _lsa_lsaRQueryForestTrustInformation(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_lsaRQueryForestTrustInformation, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_LSARSETFORESTTRUSTINFORMATION(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_LSARSETFORESTTRUSTINFORMATION *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_LSARSETFORESTTRUSTINFORMATION];
-
-	r = talloc(talloc_tos(), struct lsa_LSARSETFORESTTRUSTINFORMATION);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LSARSETFORESTTRUSTINFORMATION, r);
-	}
-
-	r->out.result = _lsa_LSARSETFORESTTRUSTINFORMATION(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LSARSETFORESTTRUSTINFORMATION, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_CREDRRENAME(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_CREDRRENAME *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_CREDRRENAME];
-
-	r = talloc(talloc_tos(), struct lsa_CREDRRENAME);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_CREDRRENAME, r);
-	}
-
-	r->out.result = _lsa_CREDRRENAME(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_CREDRRENAME, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_LookupSids3(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_LookupSids3 *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_LOOKUPSIDS3];
-
-	r = talloc(talloc_tos(), struct lsa_LookupSids3);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LookupSids3, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.domains = talloc_zero(r, struct lsa_RefDomainList *);
-	if (r->out.domains == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.names = r->in.names;
-	r->out.count = r->in.count;
-	r->out.result = _lsa_LookupSids3(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LookupSids3, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_LookupNames4(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_LookupNames4 *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_LOOKUPNAMES4];
-
-	r = talloc(talloc_tos(), struct lsa_LookupNames4);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LookupNames4, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.domains = talloc_zero(r, struct lsa_RefDomainList *);
-	if (r->out.domains == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.sids = r->in.sids;
-	r->out.count = r->in.count;
-	r->out.result = _lsa_LookupNames4(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LookupNames4, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_LSAROPENPOLICYSCE(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_LSAROPENPOLICYSCE *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_LSAROPENPOLICYSCE];
-
-	r = talloc(talloc_tos(), struct lsa_LSAROPENPOLICYSCE);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LSAROPENPOLICYSCE, r);
-	}
-
-	r->out.result = _lsa_LSAROPENPOLICYSCE(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LSAROPENPOLICYSCE, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_LSARADTREGISTERSECURITYEVENTSOURCE(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_LSARADTREGISTERSECURITYEVENTSOURCE *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_LSARADTREGISTERSECURITYEVENTSOURCE];
-
-	r = talloc(talloc_tos(), struct lsa_LSARADTREGISTERSECURITYEVENTSOURCE);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LSARADTREGISTERSECURITYEVENTSOURCE, r);
-	}
-
-	r->out.result = _lsa_LSARADTREGISTERSECURITYEVENTSOURCE(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LSARADTREGISTERSECURITYEVENTSOURCE, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_LSARADTUNREGISTERSECURITYEVENTSOURCE];
-
-	r = talloc(talloc_tos(), struct lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE, r);
-	}
-
-	r->out.result = _lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_lsa_LSARADTREPORTSECURITYEVENT(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct lsa_LSARADTREPORTSECURITYEVENT *r;
-
-	call = &ndr_table_lsarpc.calls[NDR_LSA_LSARADTREPORTSECURITYEVENT];
-
-	r = talloc(talloc_tos(), struct lsa_LSARADTREPORTSECURITYEVENT);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(lsa_LSARADTREPORTSECURITYEVENT, r);
-	}
-
-	r->out.result = _lsa_LSARADTREPORTSECURITYEVENT(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(lsa_LSARADTREPORTSECURITYEVENT, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-
-/* Tables */
-static struct api_struct api_lsarpc_cmds[] = 
-{
-	{"LSA_CLOSE", NDR_LSA_CLOSE, api_lsa_Close},
-	{"LSA_DELETE", NDR_LSA_DELETE, api_lsa_Delete},
-	{"LSA_ENUMPRIVS", NDR_LSA_ENUMPRIVS, api_lsa_EnumPrivs},
-	{"LSA_QUERYSECURITY", NDR_LSA_QUERYSECURITY, api_lsa_QuerySecurity},
-	{"LSA_SETSECOBJ", NDR_LSA_SETSECOBJ, api_lsa_SetSecObj},
-	{"LSA_CHANGEPASSWORD", NDR_LSA_CHANGEPASSWORD, api_lsa_ChangePassword},
-	{"LSA_OPENPOLICY", NDR_LSA_OPENPOLICY, api_lsa_OpenPolicy},
-	{"LSA_QUERYINFOPOLICY", NDR_LSA_QUERYINFOPOLICY, api_lsa_QueryInfoPolicy},
-	{"LSA_SETINFOPOLICY", NDR_LSA_SETINFOPOLICY, api_lsa_SetInfoPolicy},
-	{"LSA_CLEARAUDITLOG", NDR_LSA_CLEARAUDITLOG, api_lsa_ClearAuditLog},
-	{"LSA_CREATEACCOUNT", NDR_LSA_CREATEACCOUNT, api_lsa_CreateAccount},
-	{"LSA_ENUMACCOUNTS", NDR_LSA_ENUMACCOUNTS, api_lsa_EnumAccounts},
-	{"LSA_CREATETRUSTEDDOMAIN", NDR_LSA_CREATETRUSTEDDOMAIN, api_lsa_CreateTrustedDomain},
-	{"LSA_ENUMTRUSTDOM", NDR_LSA_ENUMTRUSTDOM, api_lsa_EnumTrustDom},
-	{"LSA_LOOKUPNAMES", NDR_LSA_LOOKUPNAMES, api_lsa_LookupNames},
-	{"LSA_LOOKUPSIDS", NDR_LSA_LOOKUPSIDS, api_lsa_LookupSids},
-	{"LSA_CREATESECRET", NDR_LSA_CREATESECRET, api_lsa_CreateSecret},
-	{"LSA_OPENACCOUNT", NDR_LSA_OPENACCOUNT, api_lsa_OpenAccount},
-	{"LSA_ENUMPRIVSACCOUNT", NDR_LSA_ENUMPRIVSACCOUNT, api_lsa_EnumPrivsAccount},
-	{"LSA_ADDPRIVILEGESTOACCOUNT", NDR_LSA_ADDPRIVILEGESTOACCOUNT, api_lsa_AddPrivilegesToAccount},
-	{"LSA_REMOVEPRIVILEGESFROMACCOUNT", NDR_LSA_REMOVEPRIVILEGESFROMACCOUNT, api_lsa_RemovePrivilegesFromAccount},
-	{"LSA_GETQUOTASFORACCOUNT", NDR_LSA_GETQUOTASFORACCOUNT, api_lsa_GetQuotasForAccount},
-	{"LSA_SETQUOTASFORACCOUNT", NDR_LSA_SETQUOTASFORACCOUNT, api_lsa_SetQuotasForAccount},
-	{"LSA_GETSYSTEMACCESSACCOUNT", NDR_LSA_GETSYSTEMACCESSACCOUNT, api_lsa_GetSystemAccessAccount},
-	{"LSA_SETSYSTEMACCESSACCOUNT", NDR_LSA_SETSYSTEMACCESSACCOUNT, api_lsa_SetSystemAccessAccount},
-	{"LSA_OPENTRUSTEDDOMAIN", NDR_LSA_OPENTRUSTEDDOMAIN, api_lsa_OpenTrustedDomain},
-	{"LSA_QUERYTRUSTEDDOMAININFO", NDR_LSA_QUERYTRUSTEDDOMAININFO, api_lsa_QueryTrustedDomainInfo},
-	{"LSA_SETINFORMATIONTRUSTEDDOMAIN", NDR_LSA_SETINFORMATIONTRUSTEDDOMAIN, api_lsa_SetInformationTrustedDomain},
-	{"LSA_OPENSECRET", NDR_LSA_OPENSECRET, api_lsa_OpenSecret},
-	{"LSA_SETSECRET", NDR_LSA_SETSECRET, api_lsa_SetSecret},
-	{"LSA_QUERYSECRET", NDR_LSA_QUERYSECRET, api_lsa_QuerySecret},
-	{"LSA_LOOKUPPRIVVALUE", NDR_LSA_LOOKUPPRIVVALUE, api_lsa_LookupPrivValue},
-	{"LSA_LOOKUPPRIVNAME", NDR_LSA_LOOKUPPRIVNAME, api_lsa_LookupPrivName},
-	{"LSA_LOOKUPPRIVDISPLAYNAME", NDR_LSA_LOOKUPPRIVDISPLAYNAME, api_lsa_LookupPrivDisplayName},
-	{"LSA_DELETEOBJECT", NDR_LSA_DELETEOBJECT, api_lsa_DeleteObject},
-	{"LSA_ENUMACCOUNTSWITHUSERRIGHT", NDR_LSA_ENUMACCOUNTSWITHUSERRIGHT, api_lsa_EnumAccountsWithUserRight},
-	{"LSA_ENUMACCOUNTRIGHTS", NDR_LSA_ENUMACCOUNTRIGHTS, api_lsa_EnumAccountRights},
-	{"LSA_ADDACCOUNTRIGHTS", NDR_LSA_ADDACCOUNTRIGHTS, api_lsa_AddAccountRights},
-	{"LSA_REMOVEACCOUNTRIGHTS", NDR_LSA_REMOVEACCOUNTRIGHTS, api_lsa_RemoveAccountRights},
-	{"LSA_QUERYTRUSTEDDOMAININFOBYSID", NDR_LSA_QUERYTRUSTEDDOMAININFOBYSID, api_lsa_QueryTrustedDomainInfoBySid},
-	{"LSA_SETTRUSTEDDOMAININFO", NDR_LSA_SETTRUSTEDDOMAININFO, api_lsa_SetTrustedDomainInfo},
-	{"LSA_DELETETRUSTEDDOMAIN", NDR_LSA_DELETETRUSTEDDOMAIN, api_lsa_DeleteTrustedDomain},
-	{"LSA_STOREPRIVATEDATA", NDR_LSA_STOREPRIVATEDATA, api_lsa_StorePrivateData},
-	{"LSA_RETRIEVEPRIVATEDATA", NDR_LSA_RETRIEVEPRIVATEDATA, api_lsa_RetrievePrivateData},
-	{"LSA_OPENPOLICY2", NDR_LSA_OPENPOLICY2, api_lsa_OpenPolicy2},
-	{"LSA_GETUSERNAME", NDR_LSA_GETUSERNAME, api_lsa_GetUserName},
-	{"LSA_QUERYINFOPOLICY2", NDR_LSA_QUERYINFOPOLICY2, api_lsa_QueryInfoPolicy2},
-	{"LSA_SETINFOPOLICY2", NDR_LSA_SETINFOPOLICY2, api_lsa_SetInfoPolicy2},
-	{"LSA_QUERYTRUSTEDDOMAININFOBYNAME", NDR_LSA_QUERYTRUSTEDDOMAININFOBYNAME, api_lsa_QueryTrustedDomainInfoByName},
-	{"LSA_SETTRUSTEDDOMAININFOBYNAME", NDR_LSA_SETTRUSTEDDOMAININFOBYNAME, api_lsa_SetTrustedDomainInfoByName},
-	{"LSA_ENUMTRUSTEDDOMAINSEX", NDR_LSA_ENUMTRUSTEDDOMAINSEX, api_lsa_EnumTrustedDomainsEx},
-	{"LSA_CREATETRUSTEDDOMAINEX", NDR_LSA_CREATETRUSTEDDOMAINEX, api_lsa_CreateTrustedDomainEx},
-	{"LSA_CLOSETRUSTEDDOMAINEX", NDR_LSA_CLOSETRUSTEDDOMAINEX, api_lsa_CloseTrustedDomainEx},
-	{"LSA_QUERYDOMAININFORMATIONPOLICY", NDR_LSA_QUERYDOMAININFORMATIONPOLICY, api_lsa_QueryDomainInformationPolicy},
-	{"LSA_SETDOMAININFORMATIONPOLICY", NDR_LSA_SETDOMAININFORMATIONPOLICY, api_lsa_SetDomainInformationPolicy},
-	{"LSA_OPENTRUSTEDDOMAINBYNAME", NDR_LSA_OPENTRUSTEDDOMAINBYNAME, api_lsa_OpenTrustedDomainByName},
-	{"LSA_TESTCALL", NDR_LSA_TESTCALL, api_lsa_TestCall},
-	{"LSA_LOOKUPSIDS2", NDR_LSA_LOOKUPSIDS2, api_lsa_LookupSids2},
-	{"LSA_LOOKUPNAMES2", NDR_LSA_LOOKUPNAMES2, api_lsa_LookupNames2},
-	{"LSA_CREATETRUSTEDDOMAINEX2", NDR_LSA_CREATETRUSTEDDOMAINEX2, api_lsa_CreateTrustedDomainEx2},
-	{"LSA_CREDRWRITE", NDR_LSA_CREDRWRITE, api_lsa_CREDRWRITE},
-	{"LSA_CREDRREAD", NDR_LSA_CREDRREAD, api_lsa_CREDRREAD},
-	{"LSA_CREDRENUMERATE", NDR_LSA_CREDRENUMERATE, api_lsa_CREDRENUMERATE},
-	{"LSA_CREDRWRITEDOMAINCREDENTIALS", NDR_LSA_CREDRWRITEDOMAINCREDENTIALS, api_lsa_CREDRWRITEDOMAINCREDENTIALS},
-	{"LSA_CREDRREADDOMAINCREDENTIALS", NDR_LSA_CREDRREADDOMAINCREDENTIALS, api_lsa_CREDRREADDOMAINCREDENTIALS},
-	{"LSA_CREDRDELETE", NDR_LSA_CREDRDELETE, api_lsa_CREDRDELETE},
-	{"LSA_CREDRGETTARGETINFO", NDR_LSA_CREDRGETTARGETINFO, api_lsa_CREDRGETTARGETINFO},
-	{"LSA_CREDRPROFILELOADED", NDR_LSA_CREDRPROFILELOADED, api_lsa_CREDRPROFILELOADED},
-	{"LSA_LOOKUPNAMES3", NDR_LSA_LOOKUPNAMES3, api_lsa_LookupNames3},
-	{"LSA_CREDRGETSESSIONTYPES", NDR_LSA_CREDRGETSESSIONTYPES, api_lsa_CREDRGETSESSIONTYPES},
-	{"LSA_LSARREGISTERAUDITEVENT", NDR_LSA_LSARREGISTERAUDITEVENT, api_lsa_LSARREGISTERAUDITEVENT},
-	{"LSA_LSARGENAUDITEVENT", NDR_LSA_LSARGENAUDITEVENT, api_lsa_LSARGENAUDITEVENT},
-	{"LSA_LSARUNREGISTERAUDITEVENT", NDR_LSA_LSARUNREGISTERAUDITEVENT, api_lsa_LSARUNREGISTERAUDITEVENT},
-	{"LSA_LSARQUERYFORESTTRUSTINFORMATION", NDR_LSA_LSARQUERYFORESTTRUSTINFORMATION, api_lsa_lsaRQueryForestTrustInformation},
-	{"LSA_LSARSETFORESTTRUSTINFORMATION", NDR_LSA_LSARSETFORESTTRUSTINFORMATION, api_lsa_LSARSETFORESTTRUSTINFORMATION},
-	{"LSA_CREDRRENAME", NDR_LSA_CREDRRENAME, api_lsa_CREDRRENAME},
-	{"LSA_LOOKUPSIDS3", NDR_LSA_LOOKUPSIDS3, api_lsa_LookupSids3},
-	{"LSA_LOOKUPNAMES4", NDR_LSA_LOOKUPNAMES4, api_lsa_LookupNames4},
-	{"LSA_LSAROPENPOLICYSCE", NDR_LSA_LSAROPENPOLICYSCE, api_lsa_LSAROPENPOLICYSCE},
-	{"LSA_LSARADTREGISTERSECURITYEVENTSOURCE", NDR_LSA_LSARADTREGISTERSECURITYEVENTSOURCE, api_lsa_LSARADTREGISTERSECURITYEVENTSOURCE},
-	{"LSA_LSARADTUNREGISTERSECURITYEVENTSOURCE", NDR_LSA_LSARADTUNREGISTERSECURITYEVENTSOURCE, api_lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE},
-	{"LSA_LSARADTREPORTSECURITYEVENT", NDR_LSA_LSARADTREPORTSECURITYEVENT, api_lsa_LSARADTREPORTSECURITYEVENT},
-};
-
-void lsarpc_get_pipe_fns(struct api_struct **fns, int *n_fns)
-{
-	*fns = api_lsarpc_cmds;
-	*n_fns = sizeof(api_lsarpc_cmds) / sizeof(struct api_struct);
-}
-
-NTSTATUS rpc_lsarpc_init(void)
-{
-	return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "lsarpc", "lsarpc", api_lsarpc_cmds, sizeof(api_lsarpc_cmds) / sizeof(struct api_struct));
-}

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_lsa.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_lsa.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_lsa.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,88 +0,0 @@
-#include "librpc/gen_ndr/ndr_lsa.h"
-#ifndef __SRV_LSARPC__
-#define __SRV_LSARPC__
-NTSTATUS _lsa_Close(pipes_struct *p, struct lsa_Close *r);
-NTSTATUS _lsa_Delete(pipes_struct *p, struct lsa_Delete *r);
-NTSTATUS _lsa_EnumPrivs(pipes_struct *p, struct lsa_EnumPrivs *r);
-NTSTATUS _lsa_QuerySecurity(pipes_struct *p, struct lsa_QuerySecurity *r);
-NTSTATUS _lsa_SetSecObj(pipes_struct *p, struct lsa_SetSecObj *r);
-NTSTATUS _lsa_ChangePassword(pipes_struct *p, struct lsa_ChangePassword *r);
-NTSTATUS _lsa_OpenPolicy(pipes_struct *p, struct lsa_OpenPolicy *r);
-NTSTATUS _lsa_QueryInfoPolicy(pipes_struct *p, struct lsa_QueryInfoPolicy *r);
-NTSTATUS _lsa_SetInfoPolicy(pipes_struct *p, struct lsa_SetInfoPolicy *r);
-NTSTATUS _lsa_ClearAuditLog(pipes_struct *p, struct lsa_ClearAuditLog *r);
-NTSTATUS _lsa_CreateAccount(pipes_struct *p, struct lsa_CreateAccount *r);
-NTSTATUS _lsa_EnumAccounts(pipes_struct *p, struct lsa_EnumAccounts *r);
-NTSTATUS _lsa_CreateTrustedDomain(pipes_struct *p, struct lsa_CreateTrustedDomain *r);
-NTSTATUS _lsa_EnumTrustDom(pipes_struct *p, struct lsa_EnumTrustDom *r);
-NTSTATUS _lsa_LookupNames(pipes_struct *p, struct lsa_LookupNames *r);
-NTSTATUS _lsa_LookupSids(pipes_struct *p, struct lsa_LookupSids *r);
-NTSTATUS _lsa_CreateSecret(pipes_struct *p, struct lsa_CreateSecret *r);
-NTSTATUS _lsa_OpenAccount(pipes_struct *p, struct lsa_OpenAccount *r);
-NTSTATUS _lsa_EnumPrivsAccount(pipes_struct *p, struct lsa_EnumPrivsAccount *r);
-NTSTATUS _lsa_AddPrivilegesToAccount(pipes_struct *p, struct lsa_AddPrivilegesToAccount *r);
-NTSTATUS _lsa_RemovePrivilegesFromAccount(pipes_struct *p, struct lsa_RemovePrivilegesFromAccount *r);
-NTSTATUS _lsa_GetQuotasForAccount(pipes_struct *p, struct lsa_GetQuotasForAccount *r);
-NTSTATUS _lsa_SetQuotasForAccount(pipes_struct *p, struct lsa_SetQuotasForAccount *r);
-NTSTATUS _lsa_GetSystemAccessAccount(pipes_struct *p, struct lsa_GetSystemAccessAccount *r);
-NTSTATUS _lsa_SetSystemAccessAccount(pipes_struct *p, struct lsa_SetSystemAccessAccount *r);
-NTSTATUS _lsa_OpenTrustedDomain(pipes_struct *p, struct lsa_OpenTrustedDomain *r);
-NTSTATUS _lsa_QueryTrustedDomainInfo(pipes_struct *p, struct lsa_QueryTrustedDomainInfo *r);
-NTSTATUS _lsa_SetInformationTrustedDomain(pipes_struct *p, struct lsa_SetInformationTrustedDomain *r);
-NTSTATUS _lsa_OpenSecret(pipes_struct *p, struct lsa_OpenSecret *r);
-NTSTATUS _lsa_SetSecret(pipes_struct *p, struct lsa_SetSecret *r);
-NTSTATUS _lsa_QuerySecret(pipes_struct *p, struct lsa_QuerySecret *r);
-NTSTATUS _lsa_LookupPrivValue(pipes_struct *p, struct lsa_LookupPrivValue *r);
-NTSTATUS _lsa_LookupPrivName(pipes_struct *p, struct lsa_LookupPrivName *r);
-NTSTATUS _lsa_LookupPrivDisplayName(pipes_struct *p, struct lsa_LookupPrivDisplayName *r);
-NTSTATUS _lsa_DeleteObject(pipes_struct *p, struct lsa_DeleteObject *r);
-NTSTATUS _lsa_EnumAccountsWithUserRight(pipes_struct *p, struct lsa_EnumAccountsWithUserRight *r);
-NTSTATUS _lsa_EnumAccountRights(pipes_struct *p, struct lsa_EnumAccountRights *r);
-NTSTATUS _lsa_AddAccountRights(pipes_struct *p, struct lsa_AddAccountRights *r);
-NTSTATUS _lsa_RemoveAccountRights(pipes_struct *p, struct lsa_RemoveAccountRights *r);
-NTSTATUS _lsa_QueryTrustedDomainInfoBySid(pipes_struct *p, struct lsa_QueryTrustedDomainInfoBySid *r);
-NTSTATUS _lsa_SetTrustedDomainInfo(pipes_struct *p, struct lsa_SetTrustedDomainInfo *r);
-NTSTATUS _lsa_DeleteTrustedDomain(pipes_struct *p, struct lsa_DeleteTrustedDomain *r);
-NTSTATUS _lsa_StorePrivateData(pipes_struct *p, struct lsa_StorePrivateData *r);
-NTSTATUS _lsa_RetrievePrivateData(pipes_struct *p, struct lsa_RetrievePrivateData *r);
-NTSTATUS _lsa_OpenPolicy2(pipes_struct *p, struct lsa_OpenPolicy2 *r);
-NTSTATUS _lsa_GetUserName(pipes_struct *p, struct lsa_GetUserName *r);
-NTSTATUS _lsa_QueryInfoPolicy2(pipes_struct *p, struct lsa_QueryInfoPolicy2 *r);
-NTSTATUS _lsa_SetInfoPolicy2(pipes_struct *p, struct lsa_SetInfoPolicy2 *r);
-NTSTATUS _lsa_QueryTrustedDomainInfoByName(pipes_struct *p, struct lsa_QueryTrustedDomainInfoByName *r);
-NTSTATUS _lsa_SetTrustedDomainInfoByName(pipes_struct *p, struct lsa_SetTrustedDomainInfoByName *r);
-NTSTATUS _lsa_EnumTrustedDomainsEx(pipes_struct *p, struct lsa_EnumTrustedDomainsEx *r);
-NTSTATUS _lsa_CreateTrustedDomainEx(pipes_struct *p, struct lsa_CreateTrustedDomainEx *r);
-NTSTATUS _lsa_CloseTrustedDomainEx(pipes_struct *p, struct lsa_CloseTrustedDomainEx *r);
-NTSTATUS _lsa_QueryDomainInformationPolicy(pipes_struct *p, struct lsa_QueryDomainInformationPolicy *r);
-NTSTATUS _lsa_SetDomainInformationPolicy(pipes_struct *p, struct lsa_SetDomainInformationPolicy *r);
-NTSTATUS _lsa_OpenTrustedDomainByName(pipes_struct *p, struct lsa_OpenTrustedDomainByName *r);
-NTSTATUS _lsa_TestCall(pipes_struct *p, struct lsa_TestCall *r);
-NTSTATUS _lsa_LookupSids2(pipes_struct *p, struct lsa_LookupSids2 *r);
-NTSTATUS _lsa_LookupNames2(pipes_struct *p, struct lsa_LookupNames2 *r);
-NTSTATUS _lsa_CreateTrustedDomainEx2(pipes_struct *p, struct lsa_CreateTrustedDomainEx2 *r);
-NTSTATUS _lsa_CREDRWRITE(pipes_struct *p, struct lsa_CREDRWRITE *r);
-NTSTATUS _lsa_CREDRREAD(pipes_struct *p, struct lsa_CREDRREAD *r);
-NTSTATUS _lsa_CREDRENUMERATE(pipes_struct *p, struct lsa_CREDRENUMERATE *r);
-NTSTATUS _lsa_CREDRWRITEDOMAINCREDENTIALS(pipes_struct *p, struct lsa_CREDRWRITEDOMAINCREDENTIALS *r);
-NTSTATUS _lsa_CREDRREADDOMAINCREDENTIALS(pipes_struct *p, struct lsa_CREDRREADDOMAINCREDENTIALS *r);
-NTSTATUS _lsa_CREDRDELETE(pipes_struct *p, struct lsa_CREDRDELETE *r);
-NTSTATUS _lsa_CREDRGETTARGETINFO(pipes_struct *p, struct lsa_CREDRGETTARGETINFO *r);
-NTSTATUS _lsa_CREDRPROFILELOADED(pipes_struct *p, struct lsa_CREDRPROFILELOADED *r);
-NTSTATUS _lsa_LookupNames3(pipes_struct *p, struct lsa_LookupNames3 *r);
-NTSTATUS _lsa_CREDRGETSESSIONTYPES(pipes_struct *p, struct lsa_CREDRGETSESSIONTYPES *r);
-NTSTATUS _lsa_LSARREGISTERAUDITEVENT(pipes_struct *p, struct lsa_LSARREGISTERAUDITEVENT *r);
-NTSTATUS _lsa_LSARGENAUDITEVENT(pipes_struct *p, struct lsa_LSARGENAUDITEVENT *r);
-NTSTATUS _lsa_LSARUNREGISTERAUDITEVENT(pipes_struct *p, struct lsa_LSARUNREGISTERAUDITEVENT *r);
-NTSTATUS _lsa_lsaRQueryForestTrustInformation(pipes_struct *p, struct lsa_lsaRQueryForestTrustInformation *r);
-NTSTATUS _lsa_LSARSETFORESTTRUSTINFORMATION(pipes_struct *p, struct lsa_LSARSETFORESTTRUSTINFORMATION *r);
-NTSTATUS _lsa_CREDRRENAME(pipes_struct *p, struct lsa_CREDRRENAME *r);
-NTSTATUS _lsa_LookupSids3(pipes_struct *p, struct lsa_LookupSids3 *r);
-NTSTATUS _lsa_LookupNames4(pipes_struct *p, struct lsa_LookupNames4 *r);
-NTSTATUS _lsa_LSAROPENPOLICYSCE(pipes_struct *p, struct lsa_LSAROPENPOLICYSCE *r);
-NTSTATUS _lsa_LSARADTREGISTERSECURITYEVENTSOURCE(pipes_struct *p, struct lsa_LSARADTREGISTERSECURITYEVENTSOURCE *r);
-NTSTATUS _lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE(pipes_struct *p, struct lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE *r);
-NTSTATUS _lsa_LSARADTREPORTSECURITYEVENT(pipes_struct *p, struct lsa_LSARADTREPORTSECURITYEVENT *r);
-void lsarpc_get_pipe_fns(struct api_struct **fns, int *n_fns);
-NTSTATUS rpc_lsarpc_init(void);
-#endif /* __SRV_LSARPC__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_netlogon.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_netlogon.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_netlogon.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,3866 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * server auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/srv_netlogon.h"
-
-static bool api_netr_LogonUasLogon(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_LogonUasLogon *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_LOGONUASLOGON];
-
-	r = talloc(talloc_tos(), struct netr_LogonUasLogon);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_LogonUasLogon, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, struct netr_UasInfo);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_LogonUasLogon(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_LogonUasLogon, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_LogonUasLogoff(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_LogonUasLogoff *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_LOGONUASLOGOFF];
-
-	r = talloc(talloc_tos(), struct netr_LogonUasLogoff);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_LogonUasLogoff, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, struct netr_UasLogoffInfo);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_LogonUasLogoff(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_LogonUasLogoff, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_LogonSamLogon(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_LogonSamLogon *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_LOGONSAMLOGON];
-
-	r = talloc(talloc_tos(), struct netr_LogonSamLogon);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_LogonSamLogon, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.return_authenticator = r->in.return_authenticator;
-	r->out.validation = talloc_zero(r, union netr_Validation);
-	if (r->out.validation == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.authoritative = talloc_zero(r, uint8_t);
-	if (r->out.authoritative == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_LogonSamLogon(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_LogonSamLogon, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_LogonSamLogoff(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_LogonSamLogoff *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_LOGONSAMLOGOFF];
-
-	r = talloc(talloc_tos(), struct netr_LogonSamLogoff);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_LogonSamLogoff, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.return_authenticator = r->in.return_authenticator;
-	r->out.result = _netr_LogonSamLogoff(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_LogonSamLogoff, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_ServerReqChallenge(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_ServerReqChallenge *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_SERVERREQCHALLENGE];
-
-	r = talloc(talloc_tos(), struct netr_ServerReqChallenge);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_ServerReqChallenge, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.return_credentials = talloc_zero(r, struct netr_Credential);
-	if (r->out.return_credentials == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_ServerReqChallenge(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_ServerReqChallenge, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_ServerAuthenticate(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_ServerAuthenticate *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_SERVERAUTHENTICATE];
-
-	r = talloc(talloc_tos(), struct netr_ServerAuthenticate);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_ServerAuthenticate, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.return_credentials = talloc_zero(r, struct netr_Credential);
-	if (r->out.return_credentials == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_ServerAuthenticate(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_ServerAuthenticate, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_ServerPasswordSet(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_ServerPasswordSet *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_SERVERPASSWORDSET];
-
-	r = talloc(talloc_tos(), struct netr_ServerPasswordSet);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_ServerPasswordSet, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.return_authenticator = talloc_zero(r, struct netr_Authenticator);
-	if (r->out.return_authenticator == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_ServerPasswordSet(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_ServerPasswordSet, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_DatabaseDeltas(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_DatabaseDeltas *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_DATABASEDELTAS];
-
-	r = talloc(talloc_tos(), struct netr_DatabaseDeltas);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DatabaseDeltas, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.return_authenticator = r->in.return_authenticator;
-	r->out.sequence_num = r->in.sequence_num;
-	r->out.delta_enum_array = talloc_zero(r, struct netr_DELTA_ENUM_ARRAY *);
-	if (r->out.delta_enum_array == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_DatabaseDeltas(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DatabaseDeltas, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_DatabaseSync(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_DatabaseSync *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_DATABASESYNC];
-
-	r = talloc(talloc_tos(), struct netr_DatabaseSync);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DatabaseSync, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.return_authenticator = r->in.return_authenticator;
-	r->out.sync_context = r->in.sync_context;
-	r->out.delta_enum_array = talloc_zero(r, struct netr_DELTA_ENUM_ARRAY);
-	if (r->out.delta_enum_array == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_DatabaseSync(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DatabaseSync, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_AccountDeltas(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_AccountDeltas *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_ACCOUNTDELTAS];
-
-	r = talloc(talloc_tos(), struct netr_AccountDeltas);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_AccountDeltas, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.return_authenticator = r->in.return_authenticator;
-	r->out.buffer = talloc_zero(r, struct netr_AccountBuffer);
-	if (r->out.buffer == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.count_returned = talloc_zero(r, uint32_t);
-	if (r->out.count_returned == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.total_entries = talloc_zero(r, uint32_t);
-	if (r->out.total_entries == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.recordid = talloc_zero(r, struct netr_UAS_INFO_0);
-	if (r->out.recordid == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_AccountDeltas(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_AccountDeltas, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_AccountSync(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_AccountSync *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_ACCOUNTSYNC];
-
-	r = talloc(talloc_tos(), struct netr_AccountSync);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_AccountSync, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.return_authenticator = r->in.return_authenticator;
-	r->out.buffer = talloc_zero(r, struct netr_AccountBuffer);
-	if (r->out.buffer == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.count_returned = talloc_zero(r, uint32_t);
-	if (r->out.count_returned == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.total_entries = talloc_zero(r, uint32_t);
-	if (r->out.total_entries == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.next_reference = talloc_zero(r, uint32_t);
-	if (r->out.next_reference == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.recordid = r->in.recordid;
-	r->out.result = _netr_AccountSync(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_AccountSync, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_GetDcName(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_GetDcName *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_GETDCNAME];
-
-	r = talloc(talloc_tos(), struct netr_GetDcName);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_GetDcName, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.dcname = talloc_zero(r, const char *);
-	if (r->out.dcname == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_GetDcName(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_GetDcName, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_LogonControl(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_LogonControl *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_LOGONCONTROL];
-
-	r = talloc(talloc_tos(), struct netr_LogonControl);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_LogonControl, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, union netr_CONTROL_QUERY_INFORMATION);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_LogonControl(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_LogonControl, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_GetAnyDCName(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_GetAnyDCName *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_GETANYDCNAME];
-
-	r = talloc(talloc_tos(), struct netr_GetAnyDCName);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_GetAnyDCName, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.dcname = talloc_zero(r, const char *);
-	if (r->out.dcname == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_GetAnyDCName(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_GetAnyDCName, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_LogonControl2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_LogonControl2 *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_LOGONCONTROL2];
-
-	r = talloc(talloc_tos(), struct netr_LogonControl2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_LogonControl2, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.query = talloc_zero(r, union netr_CONTROL_QUERY_INFORMATION);
-	if (r->out.query == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_LogonControl2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_LogonControl2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_ServerAuthenticate2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_ServerAuthenticate2 *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_SERVERAUTHENTICATE2];
-
-	r = talloc(talloc_tos(), struct netr_ServerAuthenticate2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_ServerAuthenticate2, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.return_credentials = talloc_zero(r, struct netr_Credential);
-	if (r->out.return_credentials == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.negotiate_flags = r->in.negotiate_flags;
-	r->out.result = _netr_ServerAuthenticate2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_ServerAuthenticate2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_DatabaseSync2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_DatabaseSync2 *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_DATABASESYNC2];
-
-	r = talloc(talloc_tos(), struct netr_DatabaseSync2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DatabaseSync2, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.return_authenticator = r->in.return_authenticator;
-	r->out.sync_context = r->in.sync_context;
-	r->out.delta_enum_array = talloc_zero(r, struct netr_DELTA_ENUM_ARRAY *);
-	if (r->out.delta_enum_array == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_DatabaseSync2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DatabaseSync2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_DatabaseRedo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_DatabaseRedo *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_DATABASEREDO];
-
-	r = talloc(talloc_tos(), struct netr_DatabaseRedo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DatabaseRedo, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.return_authenticator = r->in.return_authenticator;
-	r->out.delta_enum_array = talloc_zero(r, struct netr_DELTA_ENUM_ARRAY);
-	if (r->out.delta_enum_array == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_DatabaseRedo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DatabaseRedo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_LogonControl2Ex(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_LogonControl2Ex *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_LOGONCONTROL2EX];
-
-	r = talloc(talloc_tos(), struct netr_LogonControl2Ex);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_LogonControl2Ex, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.query = talloc_zero(r, union netr_CONTROL_QUERY_INFORMATION);
-	if (r->out.query == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_LogonControl2Ex(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_LogonControl2Ex, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_NetrEnumerateTrustedDomains(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_NetrEnumerateTrustedDomains *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_NETRENUMERATETRUSTEDDOMAINS];
-
-	r = talloc(talloc_tos(), struct netr_NetrEnumerateTrustedDomains);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_NetrEnumerateTrustedDomains, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.trusted_domains_blob = talloc_zero(r, struct netr_Blob);
-	if (r->out.trusted_domains_blob == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_NetrEnumerateTrustedDomains(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_NetrEnumerateTrustedDomains, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_DsRGetDCName(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_DsRGetDCName *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_DSRGETDCNAME];
-
-	r = talloc(talloc_tos(), struct netr_DsRGetDCName);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DsRGetDCName, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, struct netr_DsRGetDCNameInfo *);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_DsRGetDCName(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DsRGetDCName, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_NETRLOGONDUMMYROUTINE1(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_NETRLOGONDUMMYROUTINE1 *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_NETRLOGONDUMMYROUTINE1];
-
-	r = talloc(talloc_tos(), struct netr_NETRLOGONDUMMYROUTINE1);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_NETRLOGONDUMMYROUTINE1, r);
-	}
-
-	r->out.result = _netr_NETRLOGONDUMMYROUTINE1(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_NETRLOGONDUMMYROUTINE1, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_NETRLOGONSETSERVICEBITS(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_NETRLOGONSETSERVICEBITS *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_NETRLOGONSETSERVICEBITS];
-
-	r = talloc(talloc_tos(), struct netr_NETRLOGONSETSERVICEBITS);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_NETRLOGONSETSERVICEBITS, r);
-	}
-
-	r->out.result = _netr_NETRLOGONSETSERVICEBITS(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_NETRLOGONSETSERVICEBITS, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_LogonGetTrustRid(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_LogonGetTrustRid *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_LOGONGETTRUSTRID];
-
-	r = talloc(talloc_tos(), struct netr_LogonGetTrustRid);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_LogonGetTrustRid, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.rid = talloc_zero(r, uint32_t);
-	if (r->out.rid == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_LogonGetTrustRid(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_LogonGetTrustRid, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_NETRLOGONCOMPUTESERVERDIGEST(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_NETRLOGONCOMPUTESERVERDIGEST *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_NETRLOGONCOMPUTESERVERDIGEST];
-
-	r = talloc(talloc_tos(), struct netr_NETRLOGONCOMPUTESERVERDIGEST);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_NETRLOGONCOMPUTESERVERDIGEST, r);
-	}
-
-	r->out.result = _netr_NETRLOGONCOMPUTESERVERDIGEST(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_NETRLOGONCOMPUTESERVERDIGEST, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_NETRLOGONCOMPUTECLIENTDIGEST(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_NETRLOGONCOMPUTECLIENTDIGEST *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_NETRLOGONCOMPUTECLIENTDIGEST];
-
-	r = talloc(talloc_tos(), struct netr_NETRLOGONCOMPUTECLIENTDIGEST);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_NETRLOGONCOMPUTECLIENTDIGEST, r);
-	}
-
-	r->out.result = _netr_NETRLOGONCOMPUTECLIENTDIGEST(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_NETRLOGONCOMPUTECLIENTDIGEST, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_ServerAuthenticate3(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_ServerAuthenticate3 *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_SERVERAUTHENTICATE3];
-
-	r = talloc(talloc_tos(), struct netr_ServerAuthenticate3);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_ServerAuthenticate3, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.credentials = r->in.credentials;
-	r->out.negotiate_flags = r->in.negotiate_flags;
-	r->out.rid = talloc_zero(r, uint32_t);
-	if (r->out.rid == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_ServerAuthenticate3(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_ServerAuthenticate3, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_DsRGetDCNameEx(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_DsRGetDCNameEx *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_DSRGETDCNAMEEX];
-
-	r = talloc(talloc_tos(), struct netr_DsRGetDCNameEx);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DsRGetDCNameEx, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, struct netr_DsRGetDCNameInfo *);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_DsRGetDCNameEx(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DsRGetDCNameEx, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_DsRGetSiteName(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_DsRGetSiteName *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_DSRGETSITENAME];
-
-	r = talloc(talloc_tos(), struct netr_DsRGetSiteName);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DsRGetSiteName, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.site = talloc_zero(r, const char *);
-	if (r->out.site == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_DsRGetSiteName(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DsRGetSiteName, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_LogonGetDomainInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_LogonGetDomainInfo *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_LOGONGETDOMAININFO];
-
-	r = talloc(talloc_tos(), struct netr_LogonGetDomainInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_LogonGetDomainInfo, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.return_authenticator = r->in.return_authenticator;
-	r->out.info = talloc_zero(r, union netr_DomainInfo);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_LogonGetDomainInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_LogonGetDomainInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_ServerPasswordSet2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_ServerPasswordSet2 *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_SERVERPASSWORDSET2];
-
-	r = talloc(talloc_tos(), struct netr_ServerPasswordSet2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_ServerPasswordSet2, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.return_authenticator = talloc_zero(r, struct netr_Authenticator);
-	if (r->out.return_authenticator == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_ServerPasswordSet2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_ServerPasswordSet2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_ServerPasswordGet(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_ServerPasswordGet *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_SERVERPASSWORDGET];
-
-	r = talloc(talloc_tos(), struct netr_ServerPasswordGet);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_ServerPasswordGet, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.return_authenticator = talloc_zero(r, struct netr_Authenticator);
-	if (r->out.return_authenticator == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.password = talloc_zero(r, struct samr_Password);
-	if (r->out.password == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_ServerPasswordGet(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_ServerPasswordGet, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_NETRLOGONSENDTOSAM(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_NETRLOGONSENDTOSAM *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_NETRLOGONSENDTOSAM];
-
-	r = talloc(talloc_tos(), struct netr_NETRLOGONSENDTOSAM);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_NETRLOGONSENDTOSAM, r);
-	}
-
-	r->out.result = _netr_NETRLOGONSENDTOSAM(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_NETRLOGONSENDTOSAM, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_DsRAddressToSitenamesW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_DsRAddressToSitenamesW *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_DSRADDRESSTOSITENAMESW];
-
-	r = talloc(talloc_tos(), struct netr_DsRAddressToSitenamesW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DsRAddressToSitenamesW, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.ctr = talloc_zero(r, struct netr_DsRAddressToSitenamesWCtr *);
-	if (r->out.ctr == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_DsRAddressToSitenamesW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DsRAddressToSitenamesW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_DsRGetDCNameEx2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_DsRGetDCNameEx2 *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_DSRGETDCNAMEEX2];
-
-	r = talloc(talloc_tos(), struct netr_DsRGetDCNameEx2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DsRGetDCNameEx2, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, struct netr_DsRGetDCNameInfo *);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_DsRGetDCNameEx2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DsRGetDCNameEx2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_NETRLOGONGETTIMESERVICEPARENTDOMAIN];
-
-	r = talloc(talloc_tos(), struct netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN, r);
-	}
-
-	r->out.result = _netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_NetrEnumerateTrustedDomainsEx(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_NetrEnumerateTrustedDomainsEx *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_NETRENUMERATETRUSTEDDOMAINSEX];
-
-	r = talloc(talloc_tos(), struct netr_NetrEnumerateTrustedDomainsEx);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_NetrEnumerateTrustedDomainsEx, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.dom_trust_list = talloc_zero(r, struct netr_DomainTrustList);
-	if (r->out.dom_trust_list == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_NetrEnumerateTrustedDomainsEx(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_NetrEnumerateTrustedDomainsEx, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_DsRAddressToSitenamesExW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_DsRAddressToSitenamesExW *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_DSRADDRESSTOSITENAMESEXW];
-
-	r = talloc(talloc_tos(), struct netr_DsRAddressToSitenamesExW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DsRAddressToSitenamesExW, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.ctr = talloc_zero(r, struct netr_DsRAddressToSitenamesExWCtr *);
-	if (r->out.ctr == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_DsRAddressToSitenamesExW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DsRAddressToSitenamesExW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_DsrGetDcSiteCoverageW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_DsrGetDcSiteCoverageW *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_DSRGETDCSITECOVERAGEW];
-
-	r = talloc(talloc_tos(), struct netr_DsrGetDcSiteCoverageW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DsrGetDcSiteCoverageW, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.ctr = talloc_zero(r, struct DcSitesCtr);
-	if (r->out.ctr == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_DsrGetDcSiteCoverageW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DsrGetDcSiteCoverageW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_LogonSamLogonEx(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_LogonSamLogonEx *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_LOGONSAMLOGONEX];
-
-	r = talloc(talloc_tos(), struct netr_LogonSamLogonEx);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_LogonSamLogonEx, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.validation = talloc_zero(r, union netr_Validation);
-	if (r->out.validation == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.authoritative = talloc_zero(r, uint8_t);
-	if (r->out.authoritative == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.flags = r->in.flags;
-	r->out.result = _netr_LogonSamLogonEx(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_LogonSamLogonEx, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_DsrEnumerateDomainTrusts(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_DsrEnumerateDomainTrusts *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_DSRENUMERATEDOMAINTRUSTS];
-
-	r = talloc(talloc_tos(), struct netr_DsrEnumerateDomainTrusts);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DsrEnumerateDomainTrusts, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.trusts = talloc_zero(r, struct netr_DomainTrustList);
-	if (r->out.trusts == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_DsrEnumerateDomainTrusts(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DsrEnumerateDomainTrusts, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_DsrDeregisterDNSHostRecords(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_DsrDeregisterDNSHostRecords *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_DSRDEREGISTERDNSHOSTRECORDS];
-
-	r = talloc(talloc_tos(), struct netr_DsrDeregisterDNSHostRecords);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DsrDeregisterDNSHostRecords, r);
-	}
-
-	r->out.result = _netr_DsrDeregisterDNSHostRecords(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DsrDeregisterDNSHostRecords, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_ServerTrustPasswordsGet(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_ServerTrustPasswordsGet *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_SERVERTRUSTPASSWORDSGET];
-
-	r = talloc(talloc_tos(), struct netr_ServerTrustPasswordsGet);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_ServerTrustPasswordsGet, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.return_authenticator = talloc_zero(r, struct netr_Authenticator);
-	if (r->out.return_authenticator == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.password = talloc_zero(r, struct samr_Password);
-	if (r->out.password == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.password2 = talloc_zero(r, struct samr_Password);
-	if (r->out.password2 == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_ServerTrustPasswordsGet(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_ServerTrustPasswordsGet, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_DsRGetForestTrustInformation(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_DsRGetForestTrustInformation *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_DSRGETFORESTTRUSTINFORMATION];
-
-	r = talloc(talloc_tos(), struct netr_DsRGetForestTrustInformation);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_DsRGetForestTrustInformation, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.forest_trust_info = talloc_zero(r, struct lsa_ForestTrustInformation *);
-	if (r->out.forest_trust_info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_DsRGetForestTrustInformation(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_DsRGetForestTrustInformation, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_GetForestTrustInformation(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_GetForestTrustInformation *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_GETFORESTTRUSTINFORMATION];
-
-	r = talloc(talloc_tos(), struct netr_GetForestTrustInformation);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_GetForestTrustInformation, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.return_authenticator = talloc_zero(r, struct netr_Authenticator);
-	if (r->out.return_authenticator == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.forest_trust_info = talloc_zero(r, struct lsa_ForestTrustInformation *);
-	if (r->out.forest_trust_info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _netr_GetForestTrustInformation(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_GetForestTrustInformation, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_LogonSamLogonWithFlags(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_LogonSamLogonWithFlags *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_LOGONSAMLOGONWITHFLAGS];
-
-	r = talloc(talloc_tos(), struct netr_LogonSamLogonWithFlags);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_LogonSamLogonWithFlags, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.return_authenticator = r->in.return_authenticator;
-	r->out.validation = talloc_zero(r, union netr_Validation);
-	if (r->out.validation == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.authoritative = talloc_zero(r, uint8_t);
-	if (r->out.authoritative == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.flags = r->in.flags;
-	r->out.result = _netr_LogonSamLogonWithFlags(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_LogonSamLogonWithFlags, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_netr_NETRSERVERGETTRUSTINFO(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netr_NETRSERVERGETTRUSTINFO *r;
-
-	call = &ndr_table_netlogon.calls[NDR_NETR_NETRSERVERGETTRUSTINFO];
-
-	r = talloc(talloc_tos(), struct netr_NETRSERVERGETTRUSTINFO);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(netr_NETRSERVERGETTRUSTINFO, r);
-	}
-
-	r->out.result = _netr_NETRSERVERGETTRUSTINFO(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(netr_NETRSERVERGETTRUSTINFO, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-
-/* Tables */
-static struct api_struct api_netlogon_cmds[] = 
-{
-	{"NETR_LOGONUASLOGON", NDR_NETR_LOGONUASLOGON, api_netr_LogonUasLogon},
-	{"NETR_LOGONUASLOGOFF", NDR_NETR_LOGONUASLOGOFF, api_netr_LogonUasLogoff},
-	{"NETR_LOGONSAMLOGON", NDR_NETR_LOGONSAMLOGON, api_netr_LogonSamLogon},
-	{"NETR_LOGONSAMLOGOFF", NDR_NETR_LOGONSAMLOGOFF, api_netr_LogonSamLogoff},
-	{"NETR_SERVERREQCHALLENGE", NDR_NETR_SERVERREQCHALLENGE, api_netr_ServerReqChallenge},
-	{"NETR_SERVERAUTHENTICATE", NDR_NETR_SERVERAUTHENTICATE, api_netr_ServerAuthenticate},
-	{"NETR_SERVERPASSWORDSET", NDR_NETR_SERVERPASSWORDSET, api_netr_ServerPasswordSet},
-	{"NETR_DATABASEDELTAS", NDR_NETR_DATABASEDELTAS, api_netr_DatabaseDeltas},
-	{"NETR_DATABASESYNC", NDR_NETR_DATABASESYNC, api_netr_DatabaseSync},
-	{"NETR_ACCOUNTDELTAS", NDR_NETR_ACCOUNTDELTAS, api_netr_AccountDeltas},
-	{"NETR_ACCOUNTSYNC", NDR_NETR_ACCOUNTSYNC, api_netr_AccountSync},
-	{"NETR_GETDCNAME", NDR_NETR_GETDCNAME, api_netr_GetDcName},
-	{"NETR_LOGONCONTROL", NDR_NETR_LOGONCONTROL, api_netr_LogonControl},
-	{"NETR_GETANYDCNAME", NDR_NETR_GETANYDCNAME, api_netr_GetAnyDCName},
-	{"NETR_LOGONCONTROL2", NDR_NETR_LOGONCONTROL2, api_netr_LogonControl2},
-	{"NETR_SERVERAUTHENTICATE2", NDR_NETR_SERVERAUTHENTICATE2, api_netr_ServerAuthenticate2},
-	{"NETR_DATABASESYNC2", NDR_NETR_DATABASESYNC2, api_netr_DatabaseSync2},
-	{"NETR_DATABASEREDO", NDR_NETR_DATABASEREDO, api_netr_DatabaseRedo},
-	{"NETR_LOGONCONTROL2EX", NDR_NETR_LOGONCONTROL2EX, api_netr_LogonControl2Ex},
-	{"NETR_NETRENUMERATETRUSTEDDOMAINS", NDR_NETR_NETRENUMERATETRUSTEDDOMAINS, api_netr_NetrEnumerateTrustedDomains},
-	{"NETR_DSRGETDCNAME", NDR_NETR_DSRGETDCNAME, api_netr_DsRGetDCName},
-	{"NETR_NETRLOGONDUMMYROUTINE1", NDR_NETR_NETRLOGONDUMMYROUTINE1, api_netr_NETRLOGONDUMMYROUTINE1},
-	{"NETR_NETRLOGONSETSERVICEBITS", NDR_NETR_NETRLOGONSETSERVICEBITS, api_netr_NETRLOGONSETSERVICEBITS},
-	{"NETR_LOGONGETTRUSTRID", NDR_NETR_LOGONGETTRUSTRID, api_netr_LogonGetTrustRid},
-	{"NETR_NETRLOGONCOMPUTESERVERDIGEST", NDR_NETR_NETRLOGONCOMPUTESERVERDIGEST, api_netr_NETRLOGONCOMPUTESERVERDIGEST},
-	{"NETR_NETRLOGONCOMPUTECLIENTDIGEST", NDR_NETR_NETRLOGONCOMPUTECLIENTDIGEST, api_netr_NETRLOGONCOMPUTECLIENTDIGEST},
-	{"NETR_SERVERAUTHENTICATE3", NDR_NETR_SERVERAUTHENTICATE3, api_netr_ServerAuthenticate3},
-	{"NETR_DSRGETDCNAMEEX", NDR_NETR_DSRGETDCNAMEEX, api_netr_DsRGetDCNameEx},
-	{"NETR_DSRGETSITENAME", NDR_NETR_DSRGETSITENAME, api_netr_DsRGetSiteName},
-	{"NETR_LOGONGETDOMAININFO", NDR_NETR_LOGONGETDOMAININFO, api_netr_LogonGetDomainInfo},
-	{"NETR_SERVERPASSWORDSET2", NDR_NETR_SERVERPASSWORDSET2, api_netr_ServerPasswordSet2},
-	{"NETR_SERVERPASSWORDGET", NDR_NETR_SERVERPASSWORDGET, api_netr_ServerPasswordGet},
-	{"NETR_NETRLOGONSENDTOSAM", NDR_NETR_NETRLOGONSENDTOSAM, api_netr_NETRLOGONSENDTOSAM},
-	{"NETR_DSRADDRESSTOSITENAMESW", NDR_NETR_DSRADDRESSTOSITENAMESW, api_netr_DsRAddressToSitenamesW},
-	{"NETR_DSRGETDCNAMEEX2", NDR_NETR_DSRGETDCNAMEEX2, api_netr_DsRGetDCNameEx2},
-	{"NETR_NETRLOGONGETTIMESERVICEPARENTDOMAIN", NDR_NETR_NETRLOGONGETTIMESERVICEPARENTDOMAIN, api_netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN},
-	{"NETR_NETRENUMERATETRUSTEDDOMAINSEX", NDR_NETR_NETRENUMERATETRUSTEDDOMAINSEX, api_netr_NetrEnumerateTrustedDomainsEx},
-	{"NETR_DSRADDRESSTOSITENAMESEXW", NDR_NETR_DSRADDRESSTOSITENAMESEXW, api_netr_DsRAddressToSitenamesExW},
-	{"NETR_DSRGETDCSITECOVERAGEW", NDR_NETR_DSRGETDCSITECOVERAGEW, api_netr_DsrGetDcSiteCoverageW},
-	{"NETR_LOGONSAMLOGONEX", NDR_NETR_LOGONSAMLOGONEX, api_netr_LogonSamLogonEx},
-	{"NETR_DSRENUMERATEDOMAINTRUSTS", NDR_NETR_DSRENUMERATEDOMAINTRUSTS, api_netr_DsrEnumerateDomainTrusts},
-	{"NETR_DSRDEREGISTERDNSHOSTRECORDS", NDR_NETR_DSRDEREGISTERDNSHOSTRECORDS, api_netr_DsrDeregisterDNSHostRecords},
-	{"NETR_SERVERTRUSTPASSWORDSGET", NDR_NETR_SERVERTRUSTPASSWORDSGET, api_netr_ServerTrustPasswordsGet},
-	{"NETR_DSRGETFORESTTRUSTINFORMATION", NDR_NETR_DSRGETFORESTTRUSTINFORMATION, api_netr_DsRGetForestTrustInformation},
-	{"NETR_GETFORESTTRUSTINFORMATION", NDR_NETR_GETFORESTTRUSTINFORMATION, api_netr_GetForestTrustInformation},
-	{"NETR_LOGONSAMLOGONWITHFLAGS", NDR_NETR_LOGONSAMLOGONWITHFLAGS, api_netr_LogonSamLogonWithFlags},
-	{"NETR_NETRSERVERGETTRUSTINFO", NDR_NETR_NETRSERVERGETTRUSTINFO, api_netr_NETRSERVERGETTRUSTINFO},
-};
-
-void netlogon_get_pipe_fns(struct api_struct **fns, int *n_fns)
-{
-	*fns = api_netlogon_cmds;
-	*n_fns = sizeof(api_netlogon_cmds) / sizeof(struct api_struct);
-}
-
-NTSTATUS rpc_netlogon_init(void)
-{
-	return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "netlogon", "netlogon", api_netlogon_cmds, sizeof(api_netlogon_cmds) / sizeof(struct api_struct));
-}

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_netlogon.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_netlogon.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_netlogon.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,53 +0,0 @@
-#include "librpc/gen_ndr/ndr_netlogon.h"
-#ifndef __SRV_NETLOGON__
-#define __SRV_NETLOGON__
-WERROR _netr_LogonUasLogon(pipes_struct *p, struct netr_LogonUasLogon *r);
-WERROR _netr_LogonUasLogoff(pipes_struct *p, struct netr_LogonUasLogoff *r);
-NTSTATUS _netr_LogonSamLogon(pipes_struct *p, struct netr_LogonSamLogon *r);
-NTSTATUS _netr_LogonSamLogoff(pipes_struct *p, struct netr_LogonSamLogoff *r);
-NTSTATUS _netr_ServerReqChallenge(pipes_struct *p, struct netr_ServerReqChallenge *r);
-NTSTATUS _netr_ServerAuthenticate(pipes_struct *p, struct netr_ServerAuthenticate *r);
-NTSTATUS _netr_ServerPasswordSet(pipes_struct *p, struct netr_ServerPasswordSet *r);
-NTSTATUS _netr_DatabaseDeltas(pipes_struct *p, struct netr_DatabaseDeltas *r);
-NTSTATUS _netr_DatabaseSync(pipes_struct *p, struct netr_DatabaseSync *r);
-NTSTATUS _netr_AccountDeltas(pipes_struct *p, struct netr_AccountDeltas *r);
-NTSTATUS _netr_AccountSync(pipes_struct *p, struct netr_AccountSync *r);
-WERROR _netr_GetDcName(pipes_struct *p, struct netr_GetDcName *r);
-WERROR _netr_LogonControl(pipes_struct *p, struct netr_LogonControl *r);
-WERROR _netr_GetAnyDCName(pipes_struct *p, struct netr_GetAnyDCName *r);
-WERROR _netr_LogonControl2(pipes_struct *p, struct netr_LogonControl2 *r);
-NTSTATUS _netr_ServerAuthenticate2(pipes_struct *p, struct netr_ServerAuthenticate2 *r);
-NTSTATUS _netr_DatabaseSync2(pipes_struct *p, struct netr_DatabaseSync2 *r);
-NTSTATUS _netr_DatabaseRedo(pipes_struct *p, struct netr_DatabaseRedo *r);
-WERROR _netr_LogonControl2Ex(pipes_struct *p, struct netr_LogonControl2Ex *r);
-WERROR _netr_NetrEnumerateTrustedDomains(pipes_struct *p, struct netr_NetrEnumerateTrustedDomains *r);
-WERROR _netr_DsRGetDCName(pipes_struct *p, struct netr_DsRGetDCName *r);
-WERROR _netr_NETRLOGONDUMMYROUTINE1(pipes_struct *p, struct netr_NETRLOGONDUMMYROUTINE1 *r);
-WERROR _netr_NETRLOGONSETSERVICEBITS(pipes_struct *p, struct netr_NETRLOGONSETSERVICEBITS *r);
-WERROR _netr_LogonGetTrustRid(pipes_struct *p, struct netr_LogonGetTrustRid *r);
-WERROR _netr_NETRLOGONCOMPUTESERVERDIGEST(pipes_struct *p, struct netr_NETRLOGONCOMPUTESERVERDIGEST *r);
-WERROR _netr_NETRLOGONCOMPUTECLIENTDIGEST(pipes_struct *p, struct netr_NETRLOGONCOMPUTECLIENTDIGEST *r);
-NTSTATUS _netr_ServerAuthenticate3(pipes_struct *p, struct netr_ServerAuthenticate3 *r);
-WERROR _netr_DsRGetDCNameEx(pipes_struct *p, struct netr_DsRGetDCNameEx *r);
-WERROR _netr_DsRGetSiteName(pipes_struct *p, struct netr_DsRGetSiteName *r);
-NTSTATUS _netr_LogonGetDomainInfo(pipes_struct *p, struct netr_LogonGetDomainInfo *r);
-NTSTATUS _netr_ServerPasswordSet2(pipes_struct *p, struct netr_ServerPasswordSet2 *r);
-WERROR _netr_ServerPasswordGet(pipes_struct *p, struct netr_ServerPasswordGet *r);
-WERROR _netr_NETRLOGONSENDTOSAM(pipes_struct *p, struct netr_NETRLOGONSENDTOSAM *r);
-WERROR _netr_DsRAddressToSitenamesW(pipes_struct *p, struct netr_DsRAddressToSitenamesW *r);
-WERROR _netr_DsRGetDCNameEx2(pipes_struct *p, struct netr_DsRGetDCNameEx2 *r);
-WERROR _netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN(pipes_struct *p, struct netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN *r);
-WERROR _netr_NetrEnumerateTrustedDomainsEx(pipes_struct *p, struct netr_NetrEnumerateTrustedDomainsEx *r);
-WERROR _netr_DsRAddressToSitenamesExW(pipes_struct *p, struct netr_DsRAddressToSitenamesExW *r);
-WERROR _netr_DsrGetDcSiteCoverageW(pipes_struct *p, struct netr_DsrGetDcSiteCoverageW *r);
-NTSTATUS _netr_LogonSamLogonEx(pipes_struct *p, struct netr_LogonSamLogonEx *r);
-WERROR _netr_DsrEnumerateDomainTrusts(pipes_struct *p, struct netr_DsrEnumerateDomainTrusts *r);
-WERROR _netr_DsrDeregisterDNSHostRecords(pipes_struct *p, struct netr_DsrDeregisterDNSHostRecords *r);
-NTSTATUS _netr_ServerTrustPasswordsGet(pipes_struct *p, struct netr_ServerTrustPasswordsGet *r);
-WERROR _netr_DsRGetForestTrustInformation(pipes_struct *p, struct netr_DsRGetForestTrustInformation *r);
-WERROR _netr_GetForestTrustInformation(pipes_struct *p, struct netr_GetForestTrustInformation *r);
-NTSTATUS _netr_LogonSamLogonWithFlags(pipes_struct *p, struct netr_LogonSamLogonWithFlags *r);
-WERROR _netr_NETRSERVERGETTRUSTINFO(pipes_struct *p, struct netr_NETRSERVERGETTRUSTINFO *r);
-void netlogon_get_pipe_fns(struct api_struct **fns, int *n_fns);
-NTSTATUS rpc_netlogon_init(void);
-#endif /* __SRV_NETLOGON__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_ntsvcs.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_ntsvcs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_ntsvcs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4859 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * server auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/srv_ntsvcs.h"
-
-static bool api_PNP_Disconnect(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_Disconnect *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_DISCONNECT];
-
-	r = talloc(talloc_tos(), struct PNP_Disconnect);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_Disconnect, r);
-	}
-
-	r->out.result = _PNP_Disconnect(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_Disconnect, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_Connect(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_Connect *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_CONNECT];
-
-	r = talloc(talloc_tos(), struct PNP_Connect);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_Connect, r);
-	}
-
-	r->out.result = _PNP_Connect(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_Connect, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetVersion(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetVersion *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETVERSION];
-
-	r = talloc(talloc_tos(), struct PNP_GetVersion);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetVersion, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.version = talloc_zero(r, uint16_t);
-	if (r->out.version == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _PNP_GetVersion(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetVersion, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetGlobalState(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetGlobalState *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETGLOBALSTATE];
-
-	r = talloc(talloc_tos(), struct PNP_GetGlobalState);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetGlobalState, r);
-	}
-
-	r->out.result = _PNP_GetGlobalState(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetGlobalState, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_InitDetection(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_InitDetection *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_INITDETECTION];
-
-	r = talloc(talloc_tos(), struct PNP_InitDetection);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_InitDetection, r);
-	}
-
-	r->out.result = _PNP_InitDetection(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_InitDetection, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_ReportLogOn(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_ReportLogOn *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_REPORTLOGON];
-
-	r = talloc(talloc_tos(), struct PNP_ReportLogOn);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_ReportLogOn, r);
-	}
-
-	r->out.result = _PNP_ReportLogOn(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_ReportLogOn, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_ValidateDeviceInstance(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_ValidateDeviceInstance *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_VALIDATEDEVICEINSTANCE];
-
-	r = talloc(talloc_tos(), struct PNP_ValidateDeviceInstance);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_ValidateDeviceInstance, r);
-	}
-
-	r->out.result = _PNP_ValidateDeviceInstance(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_ValidateDeviceInstance, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetRootDeviceInstance(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetRootDeviceInstance *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETROOTDEVICEINSTANCE];
-
-	r = talloc(talloc_tos(), struct PNP_GetRootDeviceInstance);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetRootDeviceInstance, r);
-	}
-
-	r->out.result = _PNP_GetRootDeviceInstance(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetRootDeviceInstance, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetRelatedDeviceInstance(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetRelatedDeviceInstance *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETRELATEDDEVICEINSTANCE];
-
-	r = talloc(talloc_tos(), struct PNP_GetRelatedDeviceInstance);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetRelatedDeviceInstance, r);
-	}
-
-	r->out.result = _PNP_GetRelatedDeviceInstance(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetRelatedDeviceInstance, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_EnumerateSubKeys(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_EnumerateSubKeys *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_ENUMERATESUBKEYS];
-
-	r = talloc(talloc_tos(), struct PNP_EnumerateSubKeys);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_EnumerateSubKeys, r);
-	}
-
-	r->out.result = _PNP_EnumerateSubKeys(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_EnumerateSubKeys, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetDeviceList(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetDeviceList *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETDEVICELIST];
-
-	r = talloc(talloc_tos(), struct PNP_GetDeviceList);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetDeviceList, r);
-	}
-
-	r->out.result = _PNP_GetDeviceList(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetDeviceList, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetDeviceListSize(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetDeviceListSize *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETDEVICELISTSIZE];
-
-	r = talloc(talloc_tos(), struct PNP_GetDeviceListSize);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetDeviceListSize, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.size = talloc_zero(r, uint32_t);
-	if (r->out.size == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _PNP_GetDeviceListSize(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetDeviceListSize, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetDepth(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetDepth *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETDEPTH];
-
-	r = talloc(talloc_tos(), struct PNP_GetDepth);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetDepth, r);
-	}
-
-	r->out.result = _PNP_GetDepth(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetDepth, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetDeviceRegProp(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetDeviceRegProp *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETDEVICEREGPROP];
-
-	r = talloc(talloc_tos(), struct PNP_GetDeviceRegProp);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetDeviceRegProp, r);
-	}
-
-	r->out.result = _PNP_GetDeviceRegProp(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetDeviceRegProp, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_SetDeviceRegProp(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_SetDeviceRegProp *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_SETDEVICEREGPROP];
-
-	r = talloc(talloc_tos(), struct PNP_SetDeviceRegProp);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_SetDeviceRegProp, r);
-	}
-
-	r->out.result = _PNP_SetDeviceRegProp(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_SetDeviceRegProp, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetClassInstance(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetClassInstance *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETCLASSINSTANCE];
-
-	r = talloc(talloc_tos(), struct PNP_GetClassInstance);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetClassInstance, r);
-	}
-
-	r->out.result = _PNP_GetClassInstance(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetClassInstance, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_CreateKey(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_CreateKey *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_CREATEKEY];
-
-	r = talloc(talloc_tos(), struct PNP_CreateKey);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_CreateKey, r);
-	}
-
-	r->out.result = _PNP_CreateKey(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_CreateKey, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_DeleteRegistryKey(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_DeleteRegistryKey *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_DELETEREGISTRYKEY];
-
-	r = talloc(talloc_tos(), struct PNP_DeleteRegistryKey);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_DeleteRegistryKey, r);
-	}
-
-	r->out.result = _PNP_DeleteRegistryKey(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_DeleteRegistryKey, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetClassCount(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetClassCount *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETCLASSCOUNT];
-
-	r = talloc(talloc_tos(), struct PNP_GetClassCount);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetClassCount, r);
-	}
-
-	r->out.result = _PNP_GetClassCount(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetClassCount, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetClassName(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetClassName *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETCLASSNAME];
-
-	r = talloc(talloc_tos(), struct PNP_GetClassName);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetClassName, r);
-	}
-
-	r->out.result = _PNP_GetClassName(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetClassName, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_DeleteClassKey(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_DeleteClassKey *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_DELETECLASSKEY];
-
-	r = talloc(talloc_tos(), struct PNP_DeleteClassKey);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_DeleteClassKey, r);
-	}
-
-	r->out.result = _PNP_DeleteClassKey(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_DeleteClassKey, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetInterfaceDeviceAlias(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetInterfaceDeviceAlias *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETINTERFACEDEVICEALIAS];
-
-	r = talloc(talloc_tos(), struct PNP_GetInterfaceDeviceAlias);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetInterfaceDeviceAlias, r);
-	}
-
-	r->out.result = _PNP_GetInterfaceDeviceAlias(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetInterfaceDeviceAlias, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetInterfaceDeviceList(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetInterfaceDeviceList *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETINTERFACEDEVICELIST];
-
-	r = talloc(talloc_tos(), struct PNP_GetInterfaceDeviceList);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetInterfaceDeviceList, r);
-	}
-
-	r->out.result = _PNP_GetInterfaceDeviceList(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetInterfaceDeviceList, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetInterfaceDeviceListSize(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetInterfaceDeviceListSize *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETINTERFACEDEVICELISTSIZE];
-
-	r = talloc(talloc_tos(), struct PNP_GetInterfaceDeviceListSize);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetInterfaceDeviceListSize, r);
-	}
-
-	r->out.result = _PNP_GetInterfaceDeviceListSize(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetInterfaceDeviceListSize, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_RegisterDeviceClassAssociation(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_RegisterDeviceClassAssociation *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_REGISTERDEVICECLASSASSOCIATION];
-
-	r = talloc(talloc_tos(), struct PNP_RegisterDeviceClassAssociation);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_RegisterDeviceClassAssociation, r);
-	}
-
-	r->out.result = _PNP_RegisterDeviceClassAssociation(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_RegisterDeviceClassAssociation, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_UnregisterDeviceClassAssociation(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_UnregisterDeviceClassAssociation *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_UNREGISTERDEVICECLASSASSOCIATION];
-
-	r = talloc(talloc_tos(), struct PNP_UnregisterDeviceClassAssociation);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_UnregisterDeviceClassAssociation, r);
-	}
-
-	r->out.result = _PNP_UnregisterDeviceClassAssociation(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_UnregisterDeviceClassAssociation, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetClassRegProp(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetClassRegProp *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETCLASSREGPROP];
-
-	r = talloc(talloc_tos(), struct PNP_GetClassRegProp);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetClassRegProp, r);
-	}
-
-	r->out.result = _PNP_GetClassRegProp(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetClassRegProp, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_SetClassRegProp(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_SetClassRegProp *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_SETCLASSREGPROP];
-
-	r = talloc(talloc_tos(), struct PNP_SetClassRegProp);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_SetClassRegProp, r);
-	}
-
-	r->out.result = _PNP_SetClassRegProp(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_SetClassRegProp, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_CreateDevInst(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_CreateDevInst *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_CREATEDEVINST];
-
-	r = talloc(talloc_tos(), struct PNP_CreateDevInst);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_CreateDevInst, r);
-	}
-
-	r->out.result = _PNP_CreateDevInst(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_CreateDevInst, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_DeviceInstanceAction(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_DeviceInstanceAction *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_DEVICEINSTANCEACTION];
-
-	r = talloc(talloc_tos(), struct PNP_DeviceInstanceAction);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_DeviceInstanceAction, r);
-	}
-
-	r->out.result = _PNP_DeviceInstanceAction(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_DeviceInstanceAction, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetDeviceStatus(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetDeviceStatus *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETDEVICESTATUS];
-
-	r = talloc(talloc_tos(), struct PNP_GetDeviceStatus);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetDeviceStatus, r);
-	}
-
-	r->out.result = _PNP_GetDeviceStatus(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetDeviceStatus, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_SetDeviceProblem(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_SetDeviceProblem *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_SETDEVICEPROBLEM];
-
-	r = talloc(talloc_tos(), struct PNP_SetDeviceProblem);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_SetDeviceProblem, r);
-	}
-
-	r->out.result = _PNP_SetDeviceProblem(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_SetDeviceProblem, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_DisableDevInst(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_DisableDevInst *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_DISABLEDEVINST];
-
-	r = talloc(talloc_tos(), struct PNP_DisableDevInst);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_DisableDevInst, r);
-	}
-
-	r->out.result = _PNP_DisableDevInst(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_DisableDevInst, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_UninstallDevInst(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_UninstallDevInst *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_UNINSTALLDEVINST];
-
-	r = talloc(talloc_tos(), struct PNP_UninstallDevInst);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_UninstallDevInst, r);
-	}
-
-	r->out.result = _PNP_UninstallDevInst(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_UninstallDevInst, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_AddID(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_AddID *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_ADDID];
-
-	r = talloc(talloc_tos(), struct PNP_AddID);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_AddID, r);
-	}
-
-	r->out.result = _PNP_AddID(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_AddID, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_RegisterDriver(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_RegisterDriver *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_REGISTERDRIVER];
-
-	r = talloc(talloc_tos(), struct PNP_RegisterDriver);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_RegisterDriver, r);
-	}
-
-	r->out.result = _PNP_RegisterDriver(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_RegisterDriver, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_QueryRemove(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_QueryRemove *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_QUERYREMOVE];
-
-	r = talloc(talloc_tos(), struct PNP_QueryRemove);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_QueryRemove, r);
-	}
-
-	r->out.result = _PNP_QueryRemove(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_QueryRemove, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_RequestDeviceEject(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_RequestDeviceEject *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_REQUESTDEVICEEJECT];
-
-	r = talloc(talloc_tos(), struct PNP_RequestDeviceEject);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_RequestDeviceEject, r);
-	}
-
-	r->out.result = _PNP_RequestDeviceEject(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_RequestDeviceEject, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_IsDockStationPresent(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_IsDockStationPresent *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_ISDOCKSTATIONPRESENT];
-
-	r = talloc(talloc_tos(), struct PNP_IsDockStationPresent);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_IsDockStationPresent, r);
-	}
-
-	r->out.result = _PNP_IsDockStationPresent(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_IsDockStationPresent, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_RequestEjectPC(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_RequestEjectPC *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_REQUESTEJECTPC];
-
-	r = talloc(talloc_tos(), struct PNP_RequestEjectPC);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_RequestEjectPC, r);
-	}
-
-	r->out.result = _PNP_RequestEjectPC(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_RequestEjectPC, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_HwProfFlags(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_HwProfFlags *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_HWPROFFLAGS];
-
-	r = talloc(talloc_tos(), struct PNP_HwProfFlags);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_HwProfFlags, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.unknown3 = r->in.unknown3;
-	r->out.unknown4 = r->in.unknown4;
-	r->out.unknown5a = talloc_zero(r, const char *);
-	if (r->out.unknown5a == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _PNP_HwProfFlags(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_HwProfFlags, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetHwProfInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetHwProfInfo *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETHWPROFINFO];
-
-	r = talloc(talloc_tos(), struct PNP_GetHwProfInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetHwProfInfo, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = r->in.info;
-	r->out.result = _PNP_GetHwProfInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetHwProfInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_AddEmptyLogConf(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_AddEmptyLogConf *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_ADDEMPTYLOGCONF];
-
-	r = talloc(talloc_tos(), struct PNP_AddEmptyLogConf);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_AddEmptyLogConf, r);
-	}
-
-	r->out.result = _PNP_AddEmptyLogConf(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_AddEmptyLogConf, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_FreeLogConf(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_FreeLogConf *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_FREELOGCONF];
-
-	r = talloc(talloc_tos(), struct PNP_FreeLogConf);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_FreeLogConf, r);
-	}
-
-	r->out.result = _PNP_FreeLogConf(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_FreeLogConf, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetFirstLogConf(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetFirstLogConf *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETFIRSTLOGCONF];
-
-	r = talloc(talloc_tos(), struct PNP_GetFirstLogConf);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetFirstLogConf, r);
-	}
-
-	r->out.result = _PNP_GetFirstLogConf(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetFirstLogConf, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetNextLogConf(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetNextLogConf *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETNEXTLOGCONF];
-
-	r = talloc(talloc_tos(), struct PNP_GetNextLogConf);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetNextLogConf, r);
-	}
-
-	r->out.result = _PNP_GetNextLogConf(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetNextLogConf, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetLogConfPriority(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetLogConfPriority *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETLOGCONFPRIORITY];
-
-	r = talloc(talloc_tos(), struct PNP_GetLogConfPriority);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetLogConfPriority, r);
-	}
-
-	r->out.result = _PNP_GetLogConfPriority(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetLogConfPriority, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_AddResDes(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_AddResDes *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_ADDRESDES];
-
-	r = talloc(talloc_tos(), struct PNP_AddResDes);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_AddResDes, r);
-	}
-
-	r->out.result = _PNP_AddResDes(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_AddResDes, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_FreeResDes(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_FreeResDes *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_FREERESDES];
-
-	r = talloc(talloc_tos(), struct PNP_FreeResDes);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_FreeResDes, r);
-	}
-
-	r->out.result = _PNP_FreeResDes(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_FreeResDes, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetNextResDes(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetNextResDes *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETNEXTRESDES];
-
-	r = talloc(talloc_tos(), struct PNP_GetNextResDes);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetNextResDes, r);
-	}
-
-	r->out.result = _PNP_GetNextResDes(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetNextResDes, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetResDesData(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetResDesData *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETRESDESDATA];
-
-	r = talloc(talloc_tos(), struct PNP_GetResDesData);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetResDesData, r);
-	}
-
-	r->out.result = _PNP_GetResDesData(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetResDesData, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetResDesDataSize(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetResDesDataSize *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETRESDESDATASIZE];
-
-	r = talloc(talloc_tos(), struct PNP_GetResDesDataSize);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetResDesDataSize, r);
-	}
-
-	r->out.result = _PNP_GetResDesDataSize(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetResDesDataSize, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_ModifyResDes(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_ModifyResDes *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_MODIFYRESDES];
-
-	r = talloc(talloc_tos(), struct PNP_ModifyResDes);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_ModifyResDes, r);
-	}
-
-	r->out.result = _PNP_ModifyResDes(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_ModifyResDes, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_DetectResourceLimit(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_DetectResourceLimit *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_DETECTRESOURCELIMIT];
-
-	r = talloc(talloc_tos(), struct PNP_DetectResourceLimit);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_DetectResourceLimit, r);
-	}
-
-	r->out.result = _PNP_DetectResourceLimit(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_DetectResourceLimit, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_QueryResConfList(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_QueryResConfList *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_QUERYRESCONFLIST];
-
-	r = talloc(talloc_tos(), struct PNP_QueryResConfList);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_QueryResConfList, r);
-	}
-
-	r->out.result = _PNP_QueryResConfList(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_QueryResConfList, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_SetHwProf(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_SetHwProf *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_SETHWPROF];
-
-	r = talloc(talloc_tos(), struct PNP_SetHwProf);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_SetHwProf, r);
-	}
-
-	r->out.result = _PNP_SetHwProf(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_SetHwProf, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_QueryArbitratorFreeData(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_QueryArbitratorFreeData *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_QUERYARBITRATORFREEDATA];
-
-	r = talloc(talloc_tos(), struct PNP_QueryArbitratorFreeData);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_QueryArbitratorFreeData, r);
-	}
-
-	r->out.result = _PNP_QueryArbitratorFreeData(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_QueryArbitratorFreeData, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_QueryArbitratorFreeSize(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_QueryArbitratorFreeSize *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_QUERYARBITRATORFREESIZE];
-
-	r = talloc(talloc_tos(), struct PNP_QueryArbitratorFreeSize);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_QueryArbitratorFreeSize, r);
-	}
-
-	r->out.result = _PNP_QueryArbitratorFreeSize(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_QueryArbitratorFreeSize, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_RunDetection(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_RunDetection *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_RUNDETECTION];
-
-	r = talloc(talloc_tos(), struct PNP_RunDetection);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_RunDetection, r);
-	}
-
-	r->out.result = _PNP_RunDetection(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_RunDetection, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_RegisterNotification(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_RegisterNotification *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_REGISTERNOTIFICATION];
-
-	r = talloc(talloc_tos(), struct PNP_RegisterNotification);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_RegisterNotification, r);
-	}
-
-	r->out.result = _PNP_RegisterNotification(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_RegisterNotification, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_UnregisterNotification(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_UnregisterNotification *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_UNREGISTERNOTIFICATION];
-
-	r = talloc(talloc_tos(), struct PNP_UnregisterNotification);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_UnregisterNotification, r);
-	}
-
-	r->out.result = _PNP_UnregisterNotification(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_UnregisterNotification, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetCustomDevProp(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetCustomDevProp *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETCUSTOMDEVPROP];
-
-	r = talloc(talloc_tos(), struct PNP_GetCustomDevProp);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetCustomDevProp, r);
-	}
-
-	r->out.result = _PNP_GetCustomDevProp(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetCustomDevProp, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetVersionInternal(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetVersionInternal *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETVERSIONINTERNAL];
-
-	r = talloc(talloc_tos(), struct PNP_GetVersionInternal);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetVersionInternal, r);
-	}
-
-	r->out.result = _PNP_GetVersionInternal(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetVersionInternal, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetBlockedDriverInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetBlockedDriverInfo *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETBLOCKEDDRIVERINFO];
-
-	r = talloc(talloc_tos(), struct PNP_GetBlockedDriverInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetBlockedDriverInfo, r);
-	}
-
-	r->out.result = _PNP_GetBlockedDriverInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetBlockedDriverInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_PNP_GetServerSideDeviceInstallFlags(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct PNP_GetServerSideDeviceInstallFlags *r;
-
-	call = &ndr_table_ntsvcs.calls[NDR_PNP_GETSERVERSIDEDEVICEINSTALLFLAGS];
-
-	r = talloc(talloc_tos(), struct PNP_GetServerSideDeviceInstallFlags);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(PNP_GetServerSideDeviceInstallFlags, r);
-	}
-
-	r->out.result = _PNP_GetServerSideDeviceInstallFlags(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(PNP_GetServerSideDeviceInstallFlags, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-
-/* Tables */
-static struct api_struct api_ntsvcs_cmds[] = 
-{
-	{"PNP_DISCONNECT", NDR_PNP_DISCONNECT, api_PNP_Disconnect},
-	{"PNP_CONNECT", NDR_PNP_CONNECT, api_PNP_Connect},
-	{"PNP_GETVERSION", NDR_PNP_GETVERSION, api_PNP_GetVersion},
-	{"PNP_GETGLOBALSTATE", NDR_PNP_GETGLOBALSTATE, api_PNP_GetGlobalState},
-	{"PNP_INITDETECTION", NDR_PNP_INITDETECTION, api_PNP_InitDetection},
-	{"PNP_REPORTLOGON", NDR_PNP_REPORTLOGON, api_PNP_ReportLogOn},
-	{"PNP_VALIDATEDEVICEINSTANCE", NDR_PNP_VALIDATEDEVICEINSTANCE, api_PNP_ValidateDeviceInstance},
-	{"PNP_GETROOTDEVICEINSTANCE", NDR_PNP_GETROOTDEVICEINSTANCE, api_PNP_GetRootDeviceInstance},
-	{"PNP_GETRELATEDDEVICEINSTANCE", NDR_PNP_GETRELATEDDEVICEINSTANCE, api_PNP_GetRelatedDeviceInstance},
-	{"PNP_ENUMERATESUBKEYS", NDR_PNP_ENUMERATESUBKEYS, api_PNP_EnumerateSubKeys},
-	{"PNP_GETDEVICELIST", NDR_PNP_GETDEVICELIST, api_PNP_GetDeviceList},
-	{"PNP_GETDEVICELISTSIZE", NDR_PNP_GETDEVICELISTSIZE, api_PNP_GetDeviceListSize},
-	{"PNP_GETDEPTH", NDR_PNP_GETDEPTH, api_PNP_GetDepth},
-	{"PNP_GETDEVICEREGPROP", NDR_PNP_GETDEVICEREGPROP, api_PNP_GetDeviceRegProp},
-	{"PNP_SETDEVICEREGPROP", NDR_PNP_SETDEVICEREGPROP, api_PNP_SetDeviceRegProp},
-	{"PNP_GETCLASSINSTANCE", NDR_PNP_GETCLASSINSTANCE, api_PNP_GetClassInstance},
-	{"PNP_CREATEKEY", NDR_PNP_CREATEKEY, api_PNP_CreateKey},
-	{"PNP_DELETEREGISTRYKEY", NDR_PNP_DELETEREGISTRYKEY, api_PNP_DeleteRegistryKey},
-	{"PNP_GETCLASSCOUNT", NDR_PNP_GETCLASSCOUNT, api_PNP_GetClassCount},
-	{"PNP_GETCLASSNAME", NDR_PNP_GETCLASSNAME, api_PNP_GetClassName},
-	{"PNP_DELETECLASSKEY", NDR_PNP_DELETECLASSKEY, api_PNP_DeleteClassKey},
-	{"PNP_GETINTERFACEDEVICEALIAS", NDR_PNP_GETINTERFACEDEVICEALIAS, api_PNP_GetInterfaceDeviceAlias},
-	{"PNP_GETINTERFACEDEVICELIST", NDR_PNP_GETINTERFACEDEVICELIST, api_PNP_GetInterfaceDeviceList},
-	{"PNP_GETINTERFACEDEVICELISTSIZE", NDR_PNP_GETINTERFACEDEVICELISTSIZE, api_PNP_GetInterfaceDeviceListSize},
-	{"PNP_REGISTERDEVICECLASSASSOCIATION", NDR_PNP_REGISTERDEVICECLASSASSOCIATION, api_PNP_RegisterDeviceClassAssociation},
-	{"PNP_UNREGISTERDEVICECLASSASSOCIATION", NDR_PNP_UNREGISTERDEVICECLASSASSOCIATION, api_PNP_UnregisterDeviceClassAssociation},
-	{"PNP_GETCLASSREGPROP", NDR_PNP_GETCLASSREGPROP, api_PNP_GetClassRegProp},
-	{"PNP_SETCLASSREGPROP", NDR_PNP_SETCLASSREGPROP, api_PNP_SetClassRegProp},
-	{"PNP_CREATEDEVINST", NDR_PNP_CREATEDEVINST, api_PNP_CreateDevInst},
-	{"PNP_DEVICEINSTANCEACTION", NDR_PNP_DEVICEINSTANCEACTION, api_PNP_DeviceInstanceAction},
-	{"PNP_GETDEVICESTATUS", NDR_PNP_GETDEVICESTATUS, api_PNP_GetDeviceStatus},
-	{"PNP_SETDEVICEPROBLEM", NDR_PNP_SETDEVICEPROBLEM, api_PNP_SetDeviceProblem},
-	{"PNP_DISABLEDEVINST", NDR_PNP_DISABLEDEVINST, api_PNP_DisableDevInst},
-	{"PNP_UNINSTALLDEVINST", NDR_PNP_UNINSTALLDEVINST, api_PNP_UninstallDevInst},
-	{"PNP_ADDID", NDR_PNP_ADDID, api_PNP_AddID},
-	{"PNP_REGISTERDRIVER", NDR_PNP_REGISTERDRIVER, api_PNP_RegisterDriver},
-	{"PNP_QUERYREMOVE", NDR_PNP_QUERYREMOVE, api_PNP_QueryRemove},
-	{"PNP_REQUESTDEVICEEJECT", NDR_PNP_REQUESTDEVICEEJECT, api_PNP_RequestDeviceEject},
-	{"PNP_ISDOCKSTATIONPRESENT", NDR_PNP_ISDOCKSTATIONPRESENT, api_PNP_IsDockStationPresent},
-	{"PNP_REQUESTEJECTPC", NDR_PNP_REQUESTEJECTPC, api_PNP_RequestEjectPC},
-	{"PNP_HWPROFFLAGS", NDR_PNP_HWPROFFLAGS, api_PNP_HwProfFlags},
-	{"PNP_GETHWPROFINFO", NDR_PNP_GETHWPROFINFO, api_PNP_GetHwProfInfo},
-	{"PNP_ADDEMPTYLOGCONF", NDR_PNP_ADDEMPTYLOGCONF, api_PNP_AddEmptyLogConf},
-	{"PNP_FREELOGCONF", NDR_PNP_FREELOGCONF, api_PNP_FreeLogConf},
-	{"PNP_GETFIRSTLOGCONF", NDR_PNP_GETFIRSTLOGCONF, api_PNP_GetFirstLogConf},
-	{"PNP_GETNEXTLOGCONF", NDR_PNP_GETNEXTLOGCONF, api_PNP_GetNextLogConf},
-	{"PNP_GETLOGCONFPRIORITY", NDR_PNP_GETLOGCONFPRIORITY, api_PNP_GetLogConfPriority},
-	{"PNP_ADDRESDES", NDR_PNP_ADDRESDES, api_PNP_AddResDes},
-	{"PNP_FREERESDES", NDR_PNP_FREERESDES, api_PNP_FreeResDes},
-	{"PNP_GETNEXTRESDES", NDR_PNP_GETNEXTRESDES, api_PNP_GetNextResDes},
-	{"PNP_GETRESDESDATA", NDR_PNP_GETRESDESDATA, api_PNP_GetResDesData},
-	{"PNP_GETRESDESDATASIZE", NDR_PNP_GETRESDESDATASIZE, api_PNP_GetResDesDataSize},
-	{"PNP_MODIFYRESDES", NDR_PNP_MODIFYRESDES, api_PNP_ModifyResDes},
-	{"PNP_DETECTRESOURCELIMIT", NDR_PNP_DETECTRESOURCELIMIT, api_PNP_DetectResourceLimit},
-	{"PNP_QUERYRESCONFLIST", NDR_PNP_QUERYRESCONFLIST, api_PNP_QueryResConfList},
-	{"PNP_SETHWPROF", NDR_PNP_SETHWPROF, api_PNP_SetHwProf},
-	{"PNP_QUERYARBITRATORFREEDATA", NDR_PNP_QUERYARBITRATORFREEDATA, api_PNP_QueryArbitratorFreeData},
-	{"PNP_QUERYARBITRATORFREESIZE", NDR_PNP_QUERYARBITRATORFREESIZE, api_PNP_QueryArbitratorFreeSize},
-	{"PNP_RUNDETECTION", NDR_PNP_RUNDETECTION, api_PNP_RunDetection},
-	{"PNP_REGISTERNOTIFICATION", NDR_PNP_REGISTERNOTIFICATION, api_PNP_RegisterNotification},
-	{"PNP_UNREGISTERNOTIFICATION", NDR_PNP_UNREGISTERNOTIFICATION, api_PNP_UnregisterNotification},
-	{"PNP_GETCUSTOMDEVPROP", NDR_PNP_GETCUSTOMDEVPROP, api_PNP_GetCustomDevProp},
-	{"PNP_GETVERSIONINTERNAL", NDR_PNP_GETVERSIONINTERNAL, api_PNP_GetVersionInternal},
-	{"PNP_GETBLOCKEDDRIVERINFO", NDR_PNP_GETBLOCKEDDRIVERINFO, api_PNP_GetBlockedDriverInfo},
-	{"PNP_GETSERVERSIDEDEVICEINSTALLFLAGS", NDR_PNP_GETSERVERSIDEDEVICEINSTALLFLAGS, api_PNP_GetServerSideDeviceInstallFlags},
-};
-
-void ntsvcs_get_pipe_fns(struct api_struct **fns, int *n_fns)
-{
-	*fns = api_ntsvcs_cmds;
-	*n_fns = sizeof(api_ntsvcs_cmds) / sizeof(struct api_struct);
-}
-
-NTSTATUS rpc_ntsvcs_init(void)
-{
-	return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "ntsvcs", "ntsvcs", api_ntsvcs_cmds, sizeof(api_ntsvcs_cmds) / sizeof(struct api_struct));
-}

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_ntsvcs.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_ntsvcs.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_ntsvcs.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,71 +0,0 @@
-#include "librpc/gen_ndr/ndr_ntsvcs.h"
-#ifndef __SRV_NTSVCS__
-#define __SRV_NTSVCS__
-WERROR _PNP_Disconnect(pipes_struct *p, struct PNP_Disconnect *r);
-WERROR _PNP_Connect(pipes_struct *p, struct PNP_Connect *r);
-WERROR _PNP_GetVersion(pipes_struct *p, struct PNP_GetVersion *r);
-WERROR _PNP_GetGlobalState(pipes_struct *p, struct PNP_GetGlobalState *r);
-WERROR _PNP_InitDetection(pipes_struct *p, struct PNP_InitDetection *r);
-WERROR _PNP_ReportLogOn(pipes_struct *p, struct PNP_ReportLogOn *r);
-WERROR _PNP_ValidateDeviceInstance(pipes_struct *p, struct PNP_ValidateDeviceInstance *r);
-WERROR _PNP_GetRootDeviceInstance(pipes_struct *p, struct PNP_GetRootDeviceInstance *r);
-WERROR _PNP_GetRelatedDeviceInstance(pipes_struct *p, struct PNP_GetRelatedDeviceInstance *r);
-WERROR _PNP_EnumerateSubKeys(pipes_struct *p, struct PNP_EnumerateSubKeys *r);
-WERROR _PNP_GetDeviceList(pipes_struct *p, struct PNP_GetDeviceList *r);
-WERROR _PNP_GetDeviceListSize(pipes_struct *p, struct PNP_GetDeviceListSize *r);
-WERROR _PNP_GetDepth(pipes_struct *p, struct PNP_GetDepth *r);
-WERROR _PNP_GetDeviceRegProp(pipes_struct *p, struct PNP_GetDeviceRegProp *r);
-WERROR _PNP_SetDeviceRegProp(pipes_struct *p, struct PNP_SetDeviceRegProp *r);
-WERROR _PNP_GetClassInstance(pipes_struct *p, struct PNP_GetClassInstance *r);
-WERROR _PNP_CreateKey(pipes_struct *p, struct PNP_CreateKey *r);
-WERROR _PNP_DeleteRegistryKey(pipes_struct *p, struct PNP_DeleteRegistryKey *r);
-WERROR _PNP_GetClassCount(pipes_struct *p, struct PNP_GetClassCount *r);
-WERROR _PNP_GetClassName(pipes_struct *p, struct PNP_GetClassName *r);
-WERROR _PNP_DeleteClassKey(pipes_struct *p, struct PNP_DeleteClassKey *r);
-WERROR _PNP_GetInterfaceDeviceAlias(pipes_struct *p, struct PNP_GetInterfaceDeviceAlias *r);
-WERROR _PNP_GetInterfaceDeviceList(pipes_struct *p, struct PNP_GetInterfaceDeviceList *r);
-WERROR _PNP_GetInterfaceDeviceListSize(pipes_struct *p, struct PNP_GetInterfaceDeviceListSize *r);
-WERROR _PNP_RegisterDeviceClassAssociation(pipes_struct *p, struct PNP_RegisterDeviceClassAssociation *r);
-WERROR _PNP_UnregisterDeviceClassAssociation(pipes_struct *p, struct PNP_UnregisterDeviceClassAssociation *r);
-WERROR _PNP_GetClassRegProp(pipes_struct *p, struct PNP_GetClassRegProp *r);
-WERROR _PNP_SetClassRegProp(pipes_struct *p, struct PNP_SetClassRegProp *r);
-WERROR _PNP_CreateDevInst(pipes_struct *p, struct PNP_CreateDevInst *r);
-WERROR _PNP_DeviceInstanceAction(pipes_struct *p, struct PNP_DeviceInstanceAction *r);
-WERROR _PNP_GetDeviceStatus(pipes_struct *p, struct PNP_GetDeviceStatus *r);
-WERROR _PNP_SetDeviceProblem(pipes_struct *p, struct PNP_SetDeviceProblem *r);
-WERROR _PNP_DisableDevInst(pipes_struct *p, struct PNP_DisableDevInst *r);
-WERROR _PNP_UninstallDevInst(pipes_struct *p, struct PNP_UninstallDevInst *r);
-WERROR _PNP_AddID(pipes_struct *p, struct PNP_AddID *r);
-WERROR _PNP_RegisterDriver(pipes_struct *p, struct PNP_RegisterDriver *r);
-WERROR _PNP_QueryRemove(pipes_struct *p, struct PNP_QueryRemove *r);
-WERROR _PNP_RequestDeviceEject(pipes_struct *p, struct PNP_RequestDeviceEject *r);
-WERROR _PNP_IsDockStationPresent(pipes_struct *p, struct PNP_IsDockStationPresent *r);
-WERROR _PNP_RequestEjectPC(pipes_struct *p, struct PNP_RequestEjectPC *r);
-WERROR _PNP_HwProfFlags(pipes_struct *p, struct PNP_HwProfFlags *r);
-WERROR _PNP_GetHwProfInfo(pipes_struct *p, struct PNP_GetHwProfInfo *r);
-WERROR _PNP_AddEmptyLogConf(pipes_struct *p, struct PNP_AddEmptyLogConf *r);
-WERROR _PNP_FreeLogConf(pipes_struct *p, struct PNP_FreeLogConf *r);
-WERROR _PNP_GetFirstLogConf(pipes_struct *p, struct PNP_GetFirstLogConf *r);
-WERROR _PNP_GetNextLogConf(pipes_struct *p, struct PNP_GetNextLogConf *r);
-WERROR _PNP_GetLogConfPriority(pipes_struct *p, struct PNP_GetLogConfPriority *r);
-WERROR _PNP_AddResDes(pipes_struct *p, struct PNP_AddResDes *r);
-WERROR _PNP_FreeResDes(pipes_struct *p, struct PNP_FreeResDes *r);
-WERROR _PNP_GetNextResDes(pipes_struct *p, struct PNP_GetNextResDes *r);
-WERROR _PNP_GetResDesData(pipes_struct *p, struct PNP_GetResDesData *r);
-WERROR _PNP_GetResDesDataSize(pipes_struct *p, struct PNP_GetResDesDataSize *r);
-WERROR _PNP_ModifyResDes(pipes_struct *p, struct PNP_ModifyResDes *r);
-WERROR _PNP_DetectResourceLimit(pipes_struct *p, struct PNP_DetectResourceLimit *r);
-WERROR _PNP_QueryResConfList(pipes_struct *p, struct PNP_QueryResConfList *r);
-WERROR _PNP_SetHwProf(pipes_struct *p, struct PNP_SetHwProf *r);
-WERROR _PNP_QueryArbitratorFreeData(pipes_struct *p, struct PNP_QueryArbitratorFreeData *r);
-WERROR _PNP_QueryArbitratorFreeSize(pipes_struct *p, struct PNP_QueryArbitratorFreeSize *r);
-WERROR _PNP_RunDetection(pipes_struct *p, struct PNP_RunDetection *r);
-WERROR _PNP_RegisterNotification(pipes_struct *p, struct PNP_RegisterNotification *r);
-WERROR _PNP_UnregisterNotification(pipes_struct *p, struct PNP_UnregisterNotification *r);
-WERROR _PNP_GetCustomDevProp(pipes_struct *p, struct PNP_GetCustomDevProp *r);
-WERROR _PNP_GetVersionInternal(pipes_struct *p, struct PNP_GetVersionInternal *r);
-WERROR _PNP_GetBlockedDriverInfo(pipes_struct *p, struct PNP_GetBlockedDriverInfo *r);
-WERROR _PNP_GetServerSideDeviceInstallFlags(pipes_struct *p, struct PNP_GetServerSideDeviceInstallFlags *r);
-void ntsvcs_get_pipe_fns(struct api_struct **fns, int *n_fns);
-NTSTATUS rpc_ntsvcs_init(void);
-#endif /* __SRV_NTSVCS__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_samr.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_samr.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_samr.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,5482 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * server auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/srv_samr.h"
-
-static bool api_samr_Connect(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_Connect *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_CONNECT];
-
-	r = talloc(talloc_tos(), struct samr_Connect);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_Connect, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.connect_handle = talloc_zero(r, struct policy_handle);
-	if (r->out.connect_handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_Connect(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_Connect, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_Close(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_Close *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_CLOSE];
-
-	r = talloc(talloc_tos(), struct samr_Close);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_Close, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.handle = r->in.handle;
-	r->out.result = _samr_Close(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_Close, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_SetSecurity(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_SetSecurity *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_SETSECURITY];
-
-	r = talloc(talloc_tos(), struct samr_SetSecurity);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_SetSecurity, r);
-	}
-
-	r->out.result = _samr_SetSecurity(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_SetSecurity, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_QuerySecurity(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_QuerySecurity *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_QUERYSECURITY];
-
-	r = talloc(talloc_tos(), struct samr_QuerySecurity);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_QuerySecurity, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.sdbuf = talloc_zero(r, struct sec_desc_buf *);
-	if (r->out.sdbuf == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_QuerySecurity(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_QuerySecurity, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_Shutdown(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_Shutdown *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_SHUTDOWN];
-
-	r = talloc(talloc_tos(), struct samr_Shutdown);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_Shutdown, r);
-	}
-
-	r->out.result = _samr_Shutdown(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_Shutdown, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_LookupDomain(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_LookupDomain *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_LOOKUPDOMAIN];
-
-	r = talloc(talloc_tos(), struct samr_LookupDomain);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_LookupDomain, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.sid = talloc_zero(r, struct dom_sid2 *);
-	if (r->out.sid == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_LookupDomain(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_LookupDomain, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_EnumDomains(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_EnumDomains *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_ENUMDOMAINS];
-
-	r = talloc(talloc_tos(), struct samr_EnumDomains);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_EnumDomains, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.resume_handle = r->in.resume_handle;
-	r->out.sam = talloc_zero(r, struct samr_SamArray *);
-	if (r->out.sam == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.num_entries = talloc_zero(r, uint32_t);
-	if (r->out.num_entries == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_EnumDomains(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_EnumDomains, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_OpenDomain(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_OpenDomain *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_OPENDOMAIN];
-
-	r = talloc(talloc_tos(), struct samr_OpenDomain);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_OpenDomain, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.domain_handle = talloc_zero(r, struct policy_handle);
-	if (r->out.domain_handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_OpenDomain(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_OpenDomain, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_QueryDomainInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_QueryDomainInfo *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_QUERYDOMAININFO];
-
-	r = talloc(talloc_tos(), struct samr_QueryDomainInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_QueryDomainInfo, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, union samr_DomainInfo *);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_QueryDomainInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_QueryDomainInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_SetDomainInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_SetDomainInfo *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_SETDOMAININFO];
-
-	r = talloc(talloc_tos(), struct samr_SetDomainInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_SetDomainInfo, r);
-	}
-
-	r->out.result = _samr_SetDomainInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_SetDomainInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_CreateDomainGroup(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_CreateDomainGroup *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_CREATEDOMAINGROUP];
-
-	r = talloc(talloc_tos(), struct samr_CreateDomainGroup);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_CreateDomainGroup, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.group_handle = talloc_zero(r, struct policy_handle);
-	if (r->out.group_handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.rid = talloc_zero(r, uint32_t);
-	if (r->out.rid == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_CreateDomainGroup(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_CreateDomainGroup, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_EnumDomainGroups(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_EnumDomainGroups *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_ENUMDOMAINGROUPS];
-
-	r = talloc(talloc_tos(), struct samr_EnumDomainGroups);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_EnumDomainGroups, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.resume_handle = r->in.resume_handle;
-	r->out.sam = talloc_zero(r, struct samr_SamArray *);
-	if (r->out.sam == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.num_entries = talloc_zero(r, uint32_t);
-	if (r->out.num_entries == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_EnumDomainGroups(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_EnumDomainGroups, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_CreateUser(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_CreateUser *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_CREATEUSER];
-
-	r = talloc(talloc_tos(), struct samr_CreateUser);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_CreateUser, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.user_handle = talloc_zero(r, struct policy_handle);
-	if (r->out.user_handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.rid = talloc_zero(r, uint32_t);
-	if (r->out.rid == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_CreateUser(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_CreateUser, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_EnumDomainUsers(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_EnumDomainUsers *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_ENUMDOMAINUSERS];
-
-	r = talloc(talloc_tos(), struct samr_EnumDomainUsers);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_EnumDomainUsers, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.resume_handle = r->in.resume_handle;
-	r->out.sam = talloc_zero(r, struct samr_SamArray *);
-	if (r->out.sam == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.num_entries = talloc_zero(r, uint32_t);
-	if (r->out.num_entries == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_EnumDomainUsers(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_EnumDomainUsers, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_CreateDomAlias(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_CreateDomAlias *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_CREATEDOMALIAS];
-
-	r = talloc(talloc_tos(), struct samr_CreateDomAlias);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_CreateDomAlias, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.alias_handle = talloc_zero(r, struct policy_handle);
-	if (r->out.alias_handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.rid = talloc_zero(r, uint32_t);
-	if (r->out.rid == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_CreateDomAlias(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_CreateDomAlias, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_EnumDomainAliases(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_EnumDomainAliases *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_ENUMDOMAINALIASES];
-
-	r = talloc(talloc_tos(), struct samr_EnumDomainAliases);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_EnumDomainAliases, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.resume_handle = r->in.resume_handle;
-	r->out.sam = talloc_zero(r, struct samr_SamArray *);
-	if (r->out.sam == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.num_entries = talloc_zero(r, uint32_t);
-	if (r->out.num_entries == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_EnumDomainAliases(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_EnumDomainAliases, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_GetAliasMembership(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_GetAliasMembership *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_GETALIASMEMBERSHIP];
-
-	r = talloc(talloc_tos(), struct samr_GetAliasMembership);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_GetAliasMembership, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.rids = talloc_zero(r, struct samr_Ids);
-	if (r->out.rids == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_GetAliasMembership(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_GetAliasMembership, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_LookupNames(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_LookupNames *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_LOOKUPNAMES];
-
-	r = talloc(talloc_tos(), struct samr_LookupNames);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_LookupNames, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.rids = talloc_zero(r, struct samr_Ids);
-	if (r->out.rids == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.types = talloc_zero(r, struct samr_Ids);
-	if (r->out.types == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_LookupNames(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_LookupNames, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_LookupRids(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_LookupRids *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_LOOKUPRIDS];
-
-	r = talloc(talloc_tos(), struct samr_LookupRids);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_LookupRids, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.names = talloc_zero(r, struct lsa_Strings);
-	if (r->out.names == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.types = talloc_zero(r, struct samr_Ids);
-	if (r->out.types == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_LookupRids(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_LookupRids, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_OpenGroup(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_OpenGroup *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_OPENGROUP];
-
-	r = talloc(talloc_tos(), struct samr_OpenGroup);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_OpenGroup, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.group_handle = talloc_zero(r, struct policy_handle);
-	if (r->out.group_handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_OpenGroup(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_OpenGroup, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_QueryGroupInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_QueryGroupInfo *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_QUERYGROUPINFO];
-
-	r = talloc(talloc_tos(), struct samr_QueryGroupInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_QueryGroupInfo, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, union samr_GroupInfo *);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_QueryGroupInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_QueryGroupInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_SetGroupInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_SetGroupInfo *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_SETGROUPINFO];
-
-	r = talloc(talloc_tos(), struct samr_SetGroupInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_SetGroupInfo, r);
-	}
-
-	r->out.result = _samr_SetGroupInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_SetGroupInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_AddGroupMember(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_AddGroupMember *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_ADDGROUPMEMBER];
-
-	r = talloc(talloc_tos(), struct samr_AddGroupMember);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_AddGroupMember, r);
-	}
-
-	r->out.result = _samr_AddGroupMember(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_AddGroupMember, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_DeleteDomainGroup(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_DeleteDomainGroup *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_DELETEDOMAINGROUP];
-
-	r = talloc(talloc_tos(), struct samr_DeleteDomainGroup);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_DeleteDomainGroup, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.group_handle = r->in.group_handle;
-	r->out.result = _samr_DeleteDomainGroup(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_DeleteDomainGroup, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_DeleteGroupMember(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_DeleteGroupMember *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_DELETEGROUPMEMBER];
-
-	r = talloc(talloc_tos(), struct samr_DeleteGroupMember);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_DeleteGroupMember, r);
-	}
-
-	r->out.result = _samr_DeleteGroupMember(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_DeleteGroupMember, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_QueryGroupMember(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_QueryGroupMember *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_QUERYGROUPMEMBER];
-
-	r = talloc(talloc_tos(), struct samr_QueryGroupMember);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_QueryGroupMember, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.rids = talloc_zero(r, struct samr_RidTypeArray *);
-	if (r->out.rids == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_QueryGroupMember(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_QueryGroupMember, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_SetMemberAttributesOfGroup(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_SetMemberAttributesOfGroup *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_SETMEMBERATTRIBUTESOFGROUP];
-
-	r = talloc(talloc_tos(), struct samr_SetMemberAttributesOfGroup);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_SetMemberAttributesOfGroup, r);
-	}
-
-	r->out.result = _samr_SetMemberAttributesOfGroup(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_SetMemberAttributesOfGroup, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_OpenAlias(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_OpenAlias *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_OPENALIAS];
-
-	r = talloc(talloc_tos(), struct samr_OpenAlias);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_OpenAlias, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.alias_handle = talloc_zero(r, struct policy_handle);
-	if (r->out.alias_handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_OpenAlias(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_OpenAlias, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_QueryAliasInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_QueryAliasInfo *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_QUERYALIASINFO];
-
-	r = talloc(talloc_tos(), struct samr_QueryAliasInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_QueryAliasInfo, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, union samr_AliasInfo *);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_QueryAliasInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_QueryAliasInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_SetAliasInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_SetAliasInfo *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_SETALIASINFO];
-
-	r = talloc(talloc_tos(), struct samr_SetAliasInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_SetAliasInfo, r);
-	}
-
-	r->out.result = _samr_SetAliasInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_SetAliasInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_DeleteDomAlias(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_DeleteDomAlias *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_DELETEDOMALIAS];
-
-	r = talloc(talloc_tos(), struct samr_DeleteDomAlias);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_DeleteDomAlias, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.alias_handle = r->in.alias_handle;
-	r->out.result = _samr_DeleteDomAlias(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_DeleteDomAlias, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_AddAliasMember(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_AddAliasMember *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_ADDALIASMEMBER];
-
-	r = talloc(talloc_tos(), struct samr_AddAliasMember);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_AddAliasMember, r);
-	}
-
-	r->out.result = _samr_AddAliasMember(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_AddAliasMember, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_DeleteAliasMember(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_DeleteAliasMember *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_DELETEALIASMEMBER];
-
-	r = talloc(talloc_tos(), struct samr_DeleteAliasMember);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_DeleteAliasMember, r);
-	}
-
-	r->out.result = _samr_DeleteAliasMember(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_DeleteAliasMember, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_GetMembersInAlias(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_GetMembersInAlias *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_GETMEMBERSINALIAS];
-
-	r = talloc(talloc_tos(), struct samr_GetMembersInAlias);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_GetMembersInAlias, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.sids = talloc_zero(r, struct lsa_SidArray);
-	if (r->out.sids == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_GetMembersInAlias(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_GetMembersInAlias, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_OpenUser(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_OpenUser *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_OPENUSER];
-
-	r = talloc(talloc_tos(), struct samr_OpenUser);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_OpenUser, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.user_handle = talloc_zero(r, struct policy_handle);
-	if (r->out.user_handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_OpenUser(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_OpenUser, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_DeleteUser(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_DeleteUser *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_DELETEUSER];
-
-	r = talloc(talloc_tos(), struct samr_DeleteUser);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_DeleteUser, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.user_handle = r->in.user_handle;
-	r->out.result = _samr_DeleteUser(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_DeleteUser, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_QueryUserInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_QueryUserInfo *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_QUERYUSERINFO];
-
-	r = talloc(talloc_tos(), struct samr_QueryUserInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_QueryUserInfo, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, union samr_UserInfo *);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_QueryUserInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_QueryUserInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_SetUserInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_SetUserInfo *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_SETUSERINFO];
-
-	r = talloc(talloc_tos(), struct samr_SetUserInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_SetUserInfo, r);
-	}
-
-	r->out.result = _samr_SetUserInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_SetUserInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_ChangePasswordUser(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_ChangePasswordUser *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_CHANGEPASSWORDUSER];
-
-	r = talloc(talloc_tos(), struct samr_ChangePasswordUser);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_ChangePasswordUser, r);
-	}
-
-	r->out.result = _samr_ChangePasswordUser(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_ChangePasswordUser, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_GetGroupsForUser(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_GetGroupsForUser *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_GETGROUPSFORUSER];
-
-	r = talloc(talloc_tos(), struct samr_GetGroupsForUser);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_GetGroupsForUser, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.rids = talloc_zero(r, struct samr_RidWithAttributeArray *);
-	if (r->out.rids == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_GetGroupsForUser(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_GetGroupsForUser, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_QueryDisplayInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_QueryDisplayInfo *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_QUERYDISPLAYINFO];
-
-	r = talloc(talloc_tos(), struct samr_QueryDisplayInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_QueryDisplayInfo, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.total_size = talloc_zero(r, uint32_t);
-	if (r->out.total_size == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.returned_size = talloc_zero(r, uint32_t);
-	if (r->out.returned_size == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.info = talloc_zero(r, union samr_DispInfo);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_QueryDisplayInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_QueryDisplayInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_GetDisplayEnumerationIndex(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_GetDisplayEnumerationIndex *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_GETDISPLAYENUMERATIONINDEX];
-
-	r = talloc(talloc_tos(), struct samr_GetDisplayEnumerationIndex);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_GetDisplayEnumerationIndex, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.idx = talloc_zero(r, uint32_t);
-	if (r->out.idx == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_GetDisplayEnumerationIndex(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_GetDisplayEnumerationIndex, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_TestPrivateFunctionsDomain(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_TestPrivateFunctionsDomain *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_TESTPRIVATEFUNCTIONSDOMAIN];
-
-	r = talloc(talloc_tos(), struct samr_TestPrivateFunctionsDomain);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_TestPrivateFunctionsDomain, r);
-	}
-
-	r->out.result = _samr_TestPrivateFunctionsDomain(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_TestPrivateFunctionsDomain, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_TestPrivateFunctionsUser(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_TestPrivateFunctionsUser *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_TESTPRIVATEFUNCTIONSUSER];
-
-	r = talloc(talloc_tos(), struct samr_TestPrivateFunctionsUser);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_TestPrivateFunctionsUser, r);
-	}
-
-	r->out.result = _samr_TestPrivateFunctionsUser(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_TestPrivateFunctionsUser, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_GetUserPwInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_GetUserPwInfo *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_GETUSERPWINFO];
-
-	r = talloc(talloc_tos(), struct samr_GetUserPwInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_GetUserPwInfo, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, struct samr_PwInfo);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_GetUserPwInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_GetUserPwInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_RemoveMemberFromForeignDomain(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_RemoveMemberFromForeignDomain *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_REMOVEMEMBERFROMFOREIGNDOMAIN];
-
-	r = talloc(talloc_tos(), struct samr_RemoveMemberFromForeignDomain);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_RemoveMemberFromForeignDomain, r);
-	}
-
-	r->out.result = _samr_RemoveMemberFromForeignDomain(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_RemoveMemberFromForeignDomain, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_QueryDomainInfo2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_QueryDomainInfo2 *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_QUERYDOMAININFO2];
-
-	r = talloc(talloc_tos(), struct samr_QueryDomainInfo2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_QueryDomainInfo2, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, union samr_DomainInfo *);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_QueryDomainInfo2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_QueryDomainInfo2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_QueryUserInfo2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_QueryUserInfo2 *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_QUERYUSERINFO2];
-
-	r = talloc(talloc_tos(), struct samr_QueryUserInfo2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_QueryUserInfo2, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, union samr_UserInfo);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_QueryUserInfo2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_QueryUserInfo2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_QueryDisplayInfo2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_QueryDisplayInfo2 *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_QUERYDISPLAYINFO2];
-
-	r = talloc(talloc_tos(), struct samr_QueryDisplayInfo2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_QueryDisplayInfo2, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.total_size = talloc_zero(r, uint32_t);
-	if (r->out.total_size == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.returned_size = talloc_zero(r, uint32_t);
-	if (r->out.returned_size == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.info = talloc_zero(r, union samr_DispInfo);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_QueryDisplayInfo2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_QueryDisplayInfo2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_GetDisplayEnumerationIndex2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_GetDisplayEnumerationIndex2 *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_GETDISPLAYENUMERATIONINDEX2];
-
-	r = talloc(talloc_tos(), struct samr_GetDisplayEnumerationIndex2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_GetDisplayEnumerationIndex2, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.idx = talloc_zero(r, uint32_t);
-	if (r->out.idx == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_GetDisplayEnumerationIndex2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_GetDisplayEnumerationIndex2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_CreateUser2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_CreateUser2 *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_CREATEUSER2];
-
-	r = talloc(talloc_tos(), struct samr_CreateUser2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_CreateUser2, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.user_handle = talloc_zero(r, struct policy_handle);
-	if (r->out.user_handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.access_granted = talloc_zero(r, uint32_t);
-	if (r->out.access_granted == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.rid = talloc_zero(r, uint32_t);
-	if (r->out.rid == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_CreateUser2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_CreateUser2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_QueryDisplayInfo3(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_QueryDisplayInfo3 *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_QUERYDISPLAYINFO3];
-
-	r = talloc(talloc_tos(), struct samr_QueryDisplayInfo3);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_QueryDisplayInfo3, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.total_size = talloc_zero(r, uint32_t);
-	if (r->out.total_size == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.returned_size = talloc_zero(r, uint32_t);
-	if (r->out.returned_size == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.info = talloc_zero(r, union samr_DispInfo);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_QueryDisplayInfo3(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_QueryDisplayInfo3, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_AddMultipleMembersToAlias(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_AddMultipleMembersToAlias *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_ADDMULTIPLEMEMBERSTOALIAS];
-
-	r = talloc(talloc_tos(), struct samr_AddMultipleMembersToAlias);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_AddMultipleMembersToAlias, r);
-	}
-
-	r->out.result = _samr_AddMultipleMembersToAlias(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_AddMultipleMembersToAlias, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_RemoveMultipleMembersFromAlias(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_RemoveMultipleMembersFromAlias *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_REMOVEMULTIPLEMEMBERSFROMALIAS];
-
-	r = talloc(talloc_tos(), struct samr_RemoveMultipleMembersFromAlias);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_RemoveMultipleMembersFromAlias, r);
-	}
-
-	r->out.result = _samr_RemoveMultipleMembersFromAlias(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_RemoveMultipleMembersFromAlias, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_OemChangePasswordUser2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_OemChangePasswordUser2 *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_OEMCHANGEPASSWORDUSER2];
-
-	r = talloc(talloc_tos(), struct samr_OemChangePasswordUser2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_OemChangePasswordUser2, r);
-	}
-
-	r->out.result = _samr_OemChangePasswordUser2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_OemChangePasswordUser2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_ChangePasswordUser2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_ChangePasswordUser2 *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_CHANGEPASSWORDUSER2];
-
-	r = talloc(talloc_tos(), struct samr_ChangePasswordUser2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_ChangePasswordUser2, r);
-	}
-
-	r->out.result = _samr_ChangePasswordUser2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_ChangePasswordUser2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_GetDomPwInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_GetDomPwInfo *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_GETDOMPWINFO];
-
-	r = talloc(talloc_tos(), struct samr_GetDomPwInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_GetDomPwInfo, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, struct samr_PwInfo);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_GetDomPwInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_GetDomPwInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_Connect2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_Connect2 *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_CONNECT2];
-
-	r = talloc(talloc_tos(), struct samr_Connect2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_Connect2, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.connect_handle = talloc_zero(r, struct policy_handle);
-	if (r->out.connect_handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_Connect2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_Connect2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_SetUserInfo2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_SetUserInfo2 *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_SETUSERINFO2];
-
-	r = talloc(talloc_tos(), struct samr_SetUserInfo2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_SetUserInfo2, r);
-	}
-
-	r->out.result = _samr_SetUserInfo2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_SetUserInfo2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_SetBootKeyInformation(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_SetBootKeyInformation *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_SETBOOTKEYINFORMATION];
-
-	r = talloc(talloc_tos(), struct samr_SetBootKeyInformation);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_SetBootKeyInformation, r);
-	}
-
-	r->out.result = _samr_SetBootKeyInformation(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_SetBootKeyInformation, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_GetBootKeyInformation(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_GetBootKeyInformation *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_GETBOOTKEYINFORMATION];
-
-	r = talloc(talloc_tos(), struct samr_GetBootKeyInformation);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_GetBootKeyInformation, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.unknown = talloc_zero(r, uint32_t);
-	if (r->out.unknown == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_GetBootKeyInformation(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_GetBootKeyInformation, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_Connect3(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_Connect3 *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_CONNECT3];
-
-	r = talloc(talloc_tos(), struct samr_Connect3);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_Connect3, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.connect_handle = talloc_zero(r, struct policy_handle);
-	if (r->out.connect_handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_Connect3(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_Connect3, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_Connect4(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_Connect4 *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_CONNECT4];
-
-	r = talloc(talloc_tos(), struct samr_Connect4);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_Connect4, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.connect_handle = talloc_zero(r, struct policy_handle);
-	if (r->out.connect_handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_Connect4(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_Connect4, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_ChangePasswordUser3(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_ChangePasswordUser3 *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_CHANGEPASSWORDUSER3];
-
-	r = talloc(talloc_tos(), struct samr_ChangePasswordUser3);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_ChangePasswordUser3, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.dominfo = talloc_zero(r, struct samr_DomInfo1 *);
-	if (r->out.dominfo == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.reject = talloc_zero(r, struct samr_ChangeReject *);
-	if (r->out.reject == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_ChangePasswordUser3(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_ChangePasswordUser3, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_Connect5(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_Connect5 *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_CONNECT5];
-
-	r = talloc(talloc_tos(), struct samr_Connect5);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_Connect5, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.level_out = talloc_zero(r, uint32_t);
-	if (r->out.level_out == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.info_out = talloc_zero(r, union samr_ConnectInfo);
-	if (r->out.info_out == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.connect_handle = talloc_zero(r, struct policy_handle);
-	if (r->out.connect_handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_Connect5(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_Connect5, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_RidToSid(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_RidToSid *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_RIDTOSID];
-
-	r = talloc(talloc_tos(), struct samr_RidToSid);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_RidToSid, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.sid = talloc_zero(r, struct dom_sid2);
-	if (r->out.sid == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_RidToSid(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_RidToSid, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_SetDsrmPassword(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_SetDsrmPassword *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_SETDSRMPASSWORD];
-
-	r = talloc(talloc_tos(), struct samr_SetDsrmPassword);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_SetDsrmPassword, r);
-	}
-
-	r->out.result = _samr_SetDsrmPassword(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_SetDsrmPassword, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_samr_ValidatePassword(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct samr_ValidatePassword *r;
-
-	call = &ndr_table_samr.calls[NDR_SAMR_VALIDATEPASSWORD];
-
-	r = talloc(talloc_tos(), struct samr_ValidatePassword);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(samr_ValidatePassword, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.rep = talloc_zero(r, union samr_ValidatePasswordRep);
-	if (r->out.rep == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _samr_ValidatePassword(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(samr_ValidatePassword, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-
-/* Tables */
-static struct api_struct api_samr_cmds[] = 
-{
-	{"SAMR_CONNECT", NDR_SAMR_CONNECT, api_samr_Connect},
-	{"SAMR_CLOSE", NDR_SAMR_CLOSE, api_samr_Close},
-	{"SAMR_SETSECURITY", NDR_SAMR_SETSECURITY, api_samr_SetSecurity},
-	{"SAMR_QUERYSECURITY", NDR_SAMR_QUERYSECURITY, api_samr_QuerySecurity},
-	{"SAMR_SHUTDOWN", NDR_SAMR_SHUTDOWN, api_samr_Shutdown},
-	{"SAMR_LOOKUPDOMAIN", NDR_SAMR_LOOKUPDOMAIN, api_samr_LookupDomain},
-	{"SAMR_ENUMDOMAINS", NDR_SAMR_ENUMDOMAINS, api_samr_EnumDomains},
-	{"SAMR_OPENDOMAIN", NDR_SAMR_OPENDOMAIN, api_samr_OpenDomain},
-	{"SAMR_QUERYDOMAININFO", NDR_SAMR_QUERYDOMAININFO, api_samr_QueryDomainInfo},
-	{"SAMR_SETDOMAININFO", NDR_SAMR_SETDOMAININFO, api_samr_SetDomainInfo},
-	{"SAMR_CREATEDOMAINGROUP", NDR_SAMR_CREATEDOMAINGROUP, api_samr_CreateDomainGroup},
-	{"SAMR_ENUMDOMAINGROUPS", NDR_SAMR_ENUMDOMAINGROUPS, api_samr_EnumDomainGroups},
-	{"SAMR_CREATEUSER", NDR_SAMR_CREATEUSER, api_samr_CreateUser},
-	{"SAMR_ENUMDOMAINUSERS", NDR_SAMR_ENUMDOMAINUSERS, api_samr_EnumDomainUsers},
-	{"SAMR_CREATEDOMALIAS", NDR_SAMR_CREATEDOMALIAS, api_samr_CreateDomAlias},
-	{"SAMR_ENUMDOMAINALIASES", NDR_SAMR_ENUMDOMAINALIASES, api_samr_EnumDomainAliases},
-	{"SAMR_GETALIASMEMBERSHIP", NDR_SAMR_GETALIASMEMBERSHIP, api_samr_GetAliasMembership},
-	{"SAMR_LOOKUPNAMES", NDR_SAMR_LOOKUPNAMES, api_samr_LookupNames},
-	{"SAMR_LOOKUPRIDS", NDR_SAMR_LOOKUPRIDS, api_samr_LookupRids},
-	{"SAMR_OPENGROUP", NDR_SAMR_OPENGROUP, api_samr_OpenGroup},
-	{"SAMR_QUERYGROUPINFO", NDR_SAMR_QUERYGROUPINFO, api_samr_QueryGroupInfo},
-	{"SAMR_SETGROUPINFO", NDR_SAMR_SETGROUPINFO, api_samr_SetGroupInfo},
-	{"SAMR_ADDGROUPMEMBER", NDR_SAMR_ADDGROUPMEMBER, api_samr_AddGroupMember},
-	{"SAMR_DELETEDOMAINGROUP", NDR_SAMR_DELETEDOMAINGROUP, api_samr_DeleteDomainGroup},
-	{"SAMR_DELETEGROUPMEMBER", NDR_SAMR_DELETEGROUPMEMBER, api_samr_DeleteGroupMember},
-	{"SAMR_QUERYGROUPMEMBER", NDR_SAMR_QUERYGROUPMEMBER, api_samr_QueryGroupMember},
-	{"SAMR_SETMEMBERATTRIBUTESOFGROUP", NDR_SAMR_SETMEMBERATTRIBUTESOFGROUP, api_samr_SetMemberAttributesOfGroup},
-	{"SAMR_OPENALIAS", NDR_SAMR_OPENALIAS, api_samr_OpenAlias},
-	{"SAMR_QUERYALIASINFO", NDR_SAMR_QUERYALIASINFO, api_samr_QueryAliasInfo},
-	{"SAMR_SETALIASINFO", NDR_SAMR_SETALIASINFO, api_samr_SetAliasInfo},
-	{"SAMR_DELETEDOMALIAS", NDR_SAMR_DELETEDOMALIAS, api_samr_DeleteDomAlias},
-	{"SAMR_ADDALIASMEMBER", NDR_SAMR_ADDALIASMEMBER, api_samr_AddAliasMember},
-	{"SAMR_DELETEALIASMEMBER", NDR_SAMR_DELETEALIASMEMBER, api_samr_DeleteAliasMember},
-	{"SAMR_GETMEMBERSINALIAS", NDR_SAMR_GETMEMBERSINALIAS, api_samr_GetMembersInAlias},
-	{"SAMR_OPENUSER", NDR_SAMR_OPENUSER, api_samr_OpenUser},
-	{"SAMR_DELETEUSER", NDR_SAMR_DELETEUSER, api_samr_DeleteUser},
-	{"SAMR_QUERYUSERINFO", NDR_SAMR_QUERYUSERINFO, api_samr_QueryUserInfo},
-	{"SAMR_SETUSERINFO", NDR_SAMR_SETUSERINFO, api_samr_SetUserInfo},
-	{"SAMR_CHANGEPASSWORDUSER", NDR_SAMR_CHANGEPASSWORDUSER, api_samr_ChangePasswordUser},
-	{"SAMR_GETGROUPSFORUSER", NDR_SAMR_GETGROUPSFORUSER, api_samr_GetGroupsForUser},
-	{"SAMR_QUERYDISPLAYINFO", NDR_SAMR_QUERYDISPLAYINFO, api_samr_QueryDisplayInfo},
-	{"SAMR_GETDISPLAYENUMERATIONINDEX", NDR_SAMR_GETDISPLAYENUMERATIONINDEX, api_samr_GetDisplayEnumerationIndex},
-	{"SAMR_TESTPRIVATEFUNCTIONSDOMAIN", NDR_SAMR_TESTPRIVATEFUNCTIONSDOMAIN, api_samr_TestPrivateFunctionsDomain},
-	{"SAMR_TESTPRIVATEFUNCTIONSUSER", NDR_SAMR_TESTPRIVATEFUNCTIONSUSER, api_samr_TestPrivateFunctionsUser},
-	{"SAMR_GETUSERPWINFO", NDR_SAMR_GETUSERPWINFO, api_samr_GetUserPwInfo},
-	{"SAMR_REMOVEMEMBERFROMFOREIGNDOMAIN", NDR_SAMR_REMOVEMEMBERFROMFOREIGNDOMAIN, api_samr_RemoveMemberFromForeignDomain},
-	{"SAMR_QUERYDOMAININFO2", NDR_SAMR_QUERYDOMAININFO2, api_samr_QueryDomainInfo2},
-	{"SAMR_QUERYUSERINFO2", NDR_SAMR_QUERYUSERINFO2, api_samr_QueryUserInfo2},
-	{"SAMR_QUERYDISPLAYINFO2", NDR_SAMR_QUERYDISPLAYINFO2, api_samr_QueryDisplayInfo2},
-	{"SAMR_GETDISPLAYENUMERATIONINDEX2", NDR_SAMR_GETDISPLAYENUMERATIONINDEX2, api_samr_GetDisplayEnumerationIndex2},
-	{"SAMR_CREATEUSER2", NDR_SAMR_CREATEUSER2, api_samr_CreateUser2},
-	{"SAMR_QUERYDISPLAYINFO3", NDR_SAMR_QUERYDISPLAYINFO3, api_samr_QueryDisplayInfo3},
-	{"SAMR_ADDMULTIPLEMEMBERSTOALIAS", NDR_SAMR_ADDMULTIPLEMEMBERSTOALIAS, api_samr_AddMultipleMembersToAlias},
-	{"SAMR_REMOVEMULTIPLEMEMBERSFROMALIAS", NDR_SAMR_REMOVEMULTIPLEMEMBERSFROMALIAS, api_samr_RemoveMultipleMembersFromAlias},
-	{"SAMR_OEMCHANGEPASSWORDUSER2", NDR_SAMR_OEMCHANGEPASSWORDUSER2, api_samr_OemChangePasswordUser2},
-	{"SAMR_CHANGEPASSWORDUSER2", NDR_SAMR_CHANGEPASSWORDUSER2, api_samr_ChangePasswordUser2},
-	{"SAMR_GETDOMPWINFO", NDR_SAMR_GETDOMPWINFO, api_samr_GetDomPwInfo},
-	{"SAMR_CONNECT2", NDR_SAMR_CONNECT2, api_samr_Connect2},
-	{"SAMR_SETUSERINFO2", NDR_SAMR_SETUSERINFO2, api_samr_SetUserInfo2},
-	{"SAMR_SETBOOTKEYINFORMATION", NDR_SAMR_SETBOOTKEYINFORMATION, api_samr_SetBootKeyInformation},
-	{"SAMR_GETBOOTKEYINFORMATION", NDR_SAMR_GETBOOTKEYINFORMATION, api_samr_GetBootKeyInformation},
-	{"SAMR_CONNECT3", NDR_SAMR_CONNECT3, api_samr_Connect3},
-	{"SAMR_CONNECT4", NDR_SAMR_CONNECT4, api_samr_Connect4},
-	{"SAMR_CHANGEPASSWORDUSER3", NDR_SAMR_CHANGEPASSWORDUSER3, api_samr_ChangePasswordUser3},
-	{"SAMR_CONNECT5", NDR_SAMR_CONNECT5, api_samr_Connect5},
-	{"SAMR_RIDTOSID", NDR_SAMR_RIDTOSID, api_samr_RidToSid},
-	{"SAMR_SETDSRMPASSWORD", NDR_SAMR_SETDSRMPASSWORD, api_samr_SetDsrmPassword},
-	{"SAMR_VALIDATEPASSWORD", NDR_SAMR_VALIDATEPASSWORD, api_samr_ValidatePassword},
-};
-
-void samr_get_pipe_fns(struct api_struct **fns, int *n_fns)
-{
-	*fns = api_samr_cmds;
-	*n_fns = sizeof(api_samr_cmds) / sizeof(struct api_struct);
-}
-
-NTSTATUS rpc_samr_init(void)
-{
-	return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "samr", "samr", api_samr_cmds, sizeof(api_samr_cmds) / sizeof(struct api_struct));
-}

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_samr.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_samr.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_samr.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,74 +0,0 @@
-#include "librpc/gen_ndr/ndr_samr.h"
-#ifndef __SRV_SAMR__
-#define __SRV_SAMR__
-NTSTATUS _samr_Connect(pipes_struct *p, struct samr_Connect *r);
-NTSTATUS _samr_Close(pipes_struct *p, struct samr_Close *r);
-NTSTATUS _samr_SetSecurity(pipes_struct *p, struct samr_SetSecurity *r);
-NTSTATUS _samr_QuerySecurity(pipes_struct *p, struct samr_QuerySecurity *r);
-NTSTATUS _samr_Shutdown(pipes_struct *p, struct samr_Shutdown *r);
-NTSTATUS _samr_LookupDomain(pipes_struct *p, struct samr_LookupDomain *r);
-NTSTATUS _samr_EnumDomains(pipes_struct *p, struct samr_EnumDomains *r);
-NTSTATUS _samr_OpenDomain(pipes_struct *p, struct samr_OpenDomain *r);
-NTSTATUS _samr_QueryDomainInfo(pipes_struct *p, struct samr_QueryDomainInfo *r);
-NTSTATUS _samr_SetDomainInfo(pipes_struct *p, struct samr_SetDomainInfo *r);
-NTSTATUS _samr_CreateDomainGroup(pipes_struct *p, struct samr_CreateDomainGroup *r);
-NTSTATUS _samr_EnumDomainGroups(pipes_struct *p, struct samr_EnumDomainGroups *r);
-NTSTATUS _samr_CreateUser(pipes_struct *p, struct samr_CreateUser *r);
-NTSTATUS _samr_EnumDomainUsers(pipes_struct *p, struct samr_EnumDomainUsers *r);
-NTSTATUS _samr_CreateDomAlias(pipes_struct *p, struct samr_CreateDomAlias *r);
-NTSTATUS _samr_EnumDomainAliases(pipes_struct *p, struct samr_EnumDomainAliases *r);
-NTSTATUS _samr_GetAliasMembership(pipes_struct *p, struct samr_GetAliasMembership *r);
-NTSTATUS _samr_LookupNames(pipes_struct *p, struct samr_LookupNames *r);
-NTSTATUS _samr_LookupRids(pipes_struct *p, struct samr_LookupRids *r);
-NTSTATUS _samr_OpenGroup(pipes_struct *p, struct samr_OpenGroup *r);
-NTSTATUS _samr_QueryGroupInfo(pipes_struct *p, struct samr_QueryGroupInfo *r);
-NTSTATUS _samr_SetGroupInfo(pipes_struct *p, struct samr_SetGroupInfo *r);
-NTSTATUS _samr_AddGroupMember(pipes_struct *p, struct samr_AddGroupMember *r);
-NTSTATUS _samr_DeleteDomainGroup(pipes_struct *p, struct samr_DeleteDomainGroup *r);
-NTSTATUS _samr_DeleteGroupMember(pipes_struct *p, struct samr_DeleteGroupMember *r);
-NTSTATUS _samr_QueryGroupMember(pipes_struct *p, struct samr_QueryGroupMember *r);
-NTSTATUS _samr_SetMemberAttributesOfGroup(pipes_struct *p, struct samr_SetMemberAttributesOfGroup *r);
-NTSTATUS _samr_OpenAlias(pipes_struct *p, struct samr_OpenAlias *r);
-NTSTATUS _samr_QueryAliasInfo(pipes_struct *p, struct samr_QueryAliasInfo *r);
-NTSTATUS _samr_SetAliasInfo(pipes_struct *p, struct samr_SetAliasInfo *r);
-NTSTATUS _samr_DeleteDomAlias(pipes_struct *p, struct samr_DeleteDomAlias *r);
-NTSTATUS _samr_AddAliasMember(pipes_struct *p, struct samr_AddAliasMember *r);
-NTSTATUS _samr_DeleteAliasMember(pipes_struct *p, struct samr_DeleteAliasMember *r);
-NTSTATUS _samr_GetMembersInAlias(pipes_struct *p, struct samr_GetMembersInAlias *r);
-NTSTATUS _samr_OpenUser(pipes_struct *p, struct samr_OpenUser *r);
-NTSTATUS _samr_DeleteUser(pipes_struct *p, struct samr_DeleteUser *r);
-NTSTATUS _samr_QueryUserInfo(pipes_struct *p, struct samr_QueryUserInfo *r);
-NTSTATUS _samr_SetUserInfo(pipes_struct *p, struct samr_SetUserInfo *r);
-NTSTATUS _samr_ChangePasswordUser(pipes_struct *p, struct samr_ChangePasswordUser *r);
-NTSTATUS _samr_GetGroupsForUser(pipes_struct *p, struct samr_GetGroupsForUser *r);
-NTSTATUS _samr_QueryDisplayInfo(pipes_struct *p, struct samr_QueryDisplayInfo *r);
-NTSTATUS _samr_GetDisplayEnumerationIndex(pipes_struct *p, struct samr_GetDisplayEnumerationIndex *r);
-NTSTATUS _samr_TestPrivateFunctionsDomain(pipes_struct *p, struct samr_TestPrivateFunctionsDomain *r);
-NTSTATUS _samr_TestPrivateFunctionsUser(pipes_struct *p, struct samr_TestPrivateFunctionsUser *r);
-NTSTATUS _samr_GetUserPwInfo(pipes_struct *p, struct samr_GetUserPwInfo *r);
-NTSTATUS _samr_RemoveMemberFromForeignDomain(pipes_struct *p, struct samr_RemoveMemberFromForeignDomain *r);
-NTSTATUS _samr_QueryDomainInfo2(pipes_struct *p, struct samr_QueryDomainInfo2 *r);
-NTSTATUS _samr_QueryUserInfo2(pipes_struct *p, struct samr_QueryUserInfo2 *r);
-NTSTATUS _samr_QueryDisplayInfo2(pipes_struct *p, struct samr_QueryDisplayInfo2 *r);
-NTSTATUS _samr_GetDisplayEnumerationIndex2(pipes_struct *p, struct samr_GetDisplayEnumerationIndex2 *r);
-NTSTATUS _samr_CreateUser2(pipes_struct *p, struct samr_CreateUser2 *r);
-NTSTATUS _samr_QueryDisplayInfo3(pipes_struct *p, struct samr_QueryDisplayInfo3 *r);
-NTSTATUS _samr_AddMultipleMembersToAlias(pipes_struct *p, struct samr_AddMultipleMembersToAlias *r);
-NTSTATUS _samr_RemoveMultipleMembersFromAlias(pipes_struct *p, struct samr_RemoveMultipleMembersFromAlias *r);
-NTSTATUS _samr_OemChangePasswordUser2(pipes_struct *p, struct samr_OemChangePasswordUser2 *r);
-NTSTATUS _samr_ChangePasswordUser2(pipes_struct *p, struct samr_ChangePasswordUser2 *r);
-NTSTATUS _samr_GetDomPwInfo(pipes_struct *p, struct samr_GetDomPwInfo *r);
-NTSTATUS _samr_Connect2(pipes_struct *p, struct samr_Connect2 *r);
-NTSTATUS _samr_SetUserInfo2(pipes_struct *p, struct samr_SetUserInfo2 *r);
-NTSTATUS _samr_SetBootKeyInformation(pipes_struct *p, struct samr_SetBootKeyInformation *r);
-NTSTATUS _samr_GetBootKeyInformation(pipes_struct *p, struct samr_GetBootKeyInformation *r);
-NTSTATUS _samr_Connect3(pipes_struct *p, struct samr_Connect3 *r);
-NTSTATUS _samr_Connect4(pipes_struct *p, struct samr_Connect4 *r);
-NTSTATUS _samr_ChangePasswordUser3(pipes_struct *p, struct samr_ChangePasswordUser3 *r);
-NTSTATUS _samr_Connect5(pipes_struct *p, struct samr_Connect5 *r);
-NTSTATUS _samr_RidToSid(pipes_struct *p, struct samr_RidToSid *r);
-NTSTATUS _samr_SetDsrmPassword(pipes_struct *p, struct samr_SetDsrmPassword *r);
-NTSTATUS _samr_ValidatePassword(pipes_struct *p, struct samr_ValidatePassword *r);
-void samr_get_pipe_fns(struct api_struct **fns, int *n_fns);
-NTSTATUS rpc_samr_init(void);
-#endif /* __SRV_SAMR__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_srvsvc.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_srvsvc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_srvsvc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4199 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * server auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/srv_srvsvc.h"
-
-static bool api_srvsvc_NetCharDevEnum(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetCharDevEnum *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETCHARDEVENUM];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetCharDevEnum);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetCharDevEnum, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.level = r->in.level;
-	r->out.ctr = r->in.ctr;
-	r->out.totalentries = talloc_zero(r, uint32_t);
-	if (r->out.totalentries == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.resume_handle = r->in.resume_handle;
-	r->out.result = _srvsvc_NetCharDevEnum(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetCharDevEnum, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetCharDevGetInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetCharDevGetInfo *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETCHARDEVGETINFO];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetCharDevGetInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetCharDevGetInfo, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, union srvsvc_NetCharDevInfo);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _srvsvc_NetCharDevGetInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetCharDevGetInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetCharDevControl(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetCharDevControl *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETCHARDEVCONTROL];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetCharDevControl);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetCharDevControl, r);
-	}
-
-	r->out.result = _srvsvc_NetCharDevControl(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetCharDevControl, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetCharDevQEnum(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetCharDevQEnum *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETCHARDEVQENUM];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetCharDevQEnum);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetCharDevQEnum, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.level = r->in.level;
-	r->out.ctr = r->in.ctr;
-	r->out.totalentries = talloc_zero(r, uint32_t);
-	if (r->out.totalentries == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.resume_handle = r->in.resume_handle;
-	r->out.result = _srvsvc_NetCharDevQEnum(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetCharDevQEnum, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetCharDevQGetInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetCharDevQGetInfo *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETCHARDEVQGETINFO];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetCharDevQGetInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetCharDevQGetInfo, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, union srvsvc_NetCharDevQInfo);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _srvsvc_NetCharDevQGetInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetCharDevQGetInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetCharDevQSetInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetCharDevQSetInfo *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETCHARDEVQSETINFO];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetCharDevQSetInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetCharDevQSetInfo, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.parm_error = r->in.parm_error;
-	r->out.result = _srvsvc_NetCharDevQSetInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetCharDevQSetInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetCharDevQPurge(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetCharDevQPurge *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETCHARDEVQPURGE];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetCharDevQPurge);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetCharDevQPurge, r);
-	}
-
-	r->out.result = _srvsvc_NetCharDevQPurge(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetCharDevQPurge, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetCharDevQPurgeSelf(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetCharDevQPurgeSelf *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETCHARDEVQPURGESELF];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetCharDevQPurgeSelf);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetCharDevQPurgeSelf, r);
-	}
-
-	r->out.result = _srvsvc_NetCharDevQPurgeSelf(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetCharDevQPurgeSelf, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetConnEnum(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetConnEnum *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETCONNENUM];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetConnEnum);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetConnEnum, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info_ctr = r->in.info_ctr;
-	r->out.totalentries = talloc_zero(r, uint32_t);
-	if (r->out.totalentries == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.resume_handle = r->in.resume_handle;
-	r->out.result = _srvsvc_NetConnEnum(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetConnEnum, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetFileEnum(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetFileEnum *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETFILEENUM];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetFileEnum);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetFileEnum, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info_ctr = r->in.info_ctr;
-	r->out.totalentries = talloc_zero(r, uint32_t);
-	if (r->out.totalentries == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.resume_handle = r->in.resume_handle;
-	r->out.result = _srvsvc_NetFileEnum(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetFileEnum, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetFileGetInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetFileGetInfo *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETFILEGETINFO];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetFileGetInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetFileGetInfo, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, union srvsvc_NetFileInfo);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _srvsvc_NetFileGetInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetFileGetInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetFileClose(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetFileClose *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETFILECLOSE];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetFileClose);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetFileClose, r);
-	}
-
-	r->out.result = _srvsvc_NetFileClose(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetFileClose, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetSessEnum(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetSessEnum *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETSESSENUM];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetSessEnum);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetSessEnum, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info_ctr = r->in.info_ctr;
-	r->out.totalentries = talloc_zero(r, uint32_t);
-	if (r->out.totalentries == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.resume_handle = r->in.resume_handle;
-	r->out.result = _srvsvc_NetSessEnum(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetSessEnum, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetSessDel(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetSessDel *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETSESSDEL];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetSessDel);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetSessDel, r);
-	}
-
-	r->out.result = _srvsvc_NetSessDel(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetSessDel, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetShareAdd(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetShareAdd *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETSHAREADD];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetShareAdd);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetShareAdd, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.parm_error = r->in.parm_error;
-	r->out.result = _srvsvc_NetShareAdd(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetShareAdd, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetShareEnumAll(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetShareEnumAll *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETSHAREENUMALL];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetShareEnumAll);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetShareEnumAll, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info_ctr = r->in.info_ctr;
-	r->out.totalentries = talloc_zero(r, uint32_t);
-	if (r->out.totalentries == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.resume_handle = r->in.resume_handle;
-	r->out.result = _srvsvc_NetShareEnumAll(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetShareEnumAll, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetShareGetInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetShareGetInfo *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETSHAREGETINFO];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetShareGetInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetShareGetInfo, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, union srvsvc_NetShareInfo);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _srvsvc_NetShareGetInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetShareGetInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetShareSetInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetShareSetInfo *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETSHARESETINFO];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetShareSetInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetShareSetInfo, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.parm_error = r->in.parm_error;
-	r->out.result = _srvsvc_NetShareSetInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetShareSetInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetShareDel(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetShareDel *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETSHAREDEL];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetShareDel);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetShareDel, r);
-	}
-
-	r->out.result = _srvsvc_NetShareDel(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetShareDel, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetShareDelSticky(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetShareDelSticky *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETSHAREDELSTICKY];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetShareDelSticky);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetShareDelSticky, r);
-	}
-
-	r->out.result = _srvsvc_NetShareDelSticky(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetShareDelSticky, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetShareCheck(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetShareCheck *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETSHARECHECK];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetShareCheck);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetShareCheck, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.type = talloc_zero(r, enum srvsvc_ShareType);
-	if (r->out.type == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _srvsvc_NetShareCheck(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetShareCheck, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetSrvGetInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetSrvGetInfo *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETSRVGETINFO];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetSrvGetInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetSrvGetInfo, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, union srvsvc_NetSrvInfo);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _srvsvc_NetSrvGetInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetSrvGetInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetSrvSetInfo(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetSrvSetInfo *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETSRVSETINFO];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetSrvSetInfo);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetSrvSetInfo, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.parm_error = r->in.parm_error;
-	r->out.result = _srvsvc_NetSrvSetInfo(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetSrvSetInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetDiskEnum(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetDiskEnum *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETDISKENUM];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetDiskEnum);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetDiskEnum, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = r->in.info;
-	r->out.totalentries = talloc_zero(r, uint32_t);
-	if (r->out.totalentries == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.resume_handle = r->in.resume_handle;
-	r->out.result = _srvsvc_NetDiskEnum(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetDiskEnum, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetServerStatisticsGet(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetServerStatisticsGet *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETSERVERSTATISTICSGET];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetServerStatisticsGet);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetServerStatisticsGet, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.stats = talloc_zero(r, struct srvsvc_Statistics);
-	if (r->out.stats == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _srvsvc_NetServerStatisticsGet(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetServerStatisticsGet, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetTransportAdd(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetTransportAdd *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETTRANSPORTADD];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetTransportAdd);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetTransportAdd, r);
-	}
-
-	r->out.result = _srvsvc_NetTransportAdd(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetTransportAdd, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetTransportEnum(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetTransportEnum *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETTRANSPORTENUM];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetTransportEnum);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetTransportEnum, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.level = r->in.level;
-	r->out.transports = r->in.transports;
-	r->out.totalentries = talloc_zero(r, uint32_t);
-	if (r->out.totalentries == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.resume_handle = r->in.resume_handle;
-	r->out.result = _srvsvc_NetTransportEnum(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetTransportEnum, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetTransportDel(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetTransportDel *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETTRANSPORTDEL];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetTransportDel);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetTransportDel, r);
-	}
-
-	r->out.result = _srvsvc_NetTransportDel(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetTransportDel, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetRemoteTOD(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetRemoteTOD *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETREMOTETOD];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetRemoteTOD);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetRemoteTOD, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, struct srvsvc_NetRemoteTODInfo *);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _srvsvc_NetRemoteTOD(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetRemoteTOD, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetSetServiceBits(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetSetServiceBits *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETSETSERVICEBITS];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetSetServiceBits);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetSetServiceBits, r);
-	}
-
-	r->out.result = _srvsvc_NetSetServiceBits(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetSetServiceBits, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetPathType(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetPathType *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETPATHTYPE];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetPathType);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetPathType, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.pathtype = talloc_zero(r, uint32_t);
-	if (r->out.pathtype == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _srvsvc_NetPathType(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetPathType, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetPathCanonicalize(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetPathCanonicalize *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETPATHCANONICALIZE];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetPathCanonicalize);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetPathCanonicalize, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.can_path = talloc_zero_array(r, uint8_t, r->in.maxbuf);
-	if (r->out.can_path == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.pathtype = r->in.pathtype;
-	r->out.result = _srvsvc_NetPathCanonicalize(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetPathCanonicalize, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetPathCompare(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetPathCompare *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETPATHCOMPARE];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetPathCompare);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetPathCompare, r);
-	}
-
-	r->out.result = _srvsvc_NetPathCompare(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetPathCompare, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetNameValidate(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetNameValidate *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETNAMEVALIDATE];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetNameValidate);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetNameValidate, r);
-	}
-
-	r->out.result = _srvsvc_NetNameValidate(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetNameValidate, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NETRPRNAMECANONICALIZE(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NETRPRNAMECANONICALIZE *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETRPRNAMECANONICALIZE];
-
-	r = talloc(talloc_tos(), struct srvsvc_NETRPRNAMECANONICALIZE);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NETRPRNAMECANONICALIZE, r);
-	}
-
-	r->out.result = _srvsvc_NETRPRNAMECANONICALIZE(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NETRPRNAMECANONICALIZE, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetPRNameCompare(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetPRNameCompare *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETPRNAMECOMPARE];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetPRNameCompare);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetPRNameCompare, r);
-	}
-
-	r->out.result = _srvsvc_NetPRNameCompare(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetPRNameCompare, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetShareEnum(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetShareEnum *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETSHAREENUM];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetShareEnum);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetShareEnum, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info_ctr = r->in.info_ctr;
-	r->out.totalentries = talloc_zero(r, uint32_t);
-	if (r->out.totalentries == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.resume_handle = r->in.resume_handle;
-	r->out.result = _srvsvc_NetShareEnum(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetShareEnum, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetShareDelStart(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetShareDelStart *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETSHAREDELSTART];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetShareDelStart);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetShareDelStart, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.hnd = talloc_zero(r, struct policy_handle);
-	if (r->out.hnd == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _srvsvc_NetShareDelStart(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetShareDelStart, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetShareDelCommit(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetShareDelCommit *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETSHAREDELCOMMIT];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetShareDelCommit);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetShareDelCommit, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.hnd = r->in.hnd;
-	r->out.result = _srvsvc_NetShareDelCommit(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetShareDelCommit, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetGetFileSecurity(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetGetFileSecurity *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETGETFILESECURITY];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetGetFileSecurity);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetGetFileSecurity, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.sd_buf = talloc_zero(r, struct sec_desc_buf *);
-	if (r->out.sd_buf == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _srvsvc_NetGetFileSecurity(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetGetFileSecurity, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetSetFileSecurity(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetSetFileSecurity *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETSETFILESECURITY];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetSetFileSecurity);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetSetFileSecurity, r);
-	}
-
-	r->out.result = _srvsvc_NetSetFileSecurity(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetSetFileSecurity, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetServerTransportAddEx(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetServerTransportAddEx *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETSERVERTRANSPORTADDEX];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetServerTransportAddEx);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetServerTransportAddEx, r);
-	}
-
-	r->out.result = _srvsvc_NetServerTransportAddEx(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetServerTransportAddEx, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NetServerSetServiceBitsEx(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NetServerSetServiceBitsEx *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETSERVERSETSERVICEBITSEX];
-
-	r = talloc(talloc_tos(), struct srvsvc_NetServerSetServiceBitsEx);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NetServerSetServiceBitsEx, r);
-	}
-
-	r->out.result = _srvsvc_NetServerSetServiceBitsEx(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NetServerSetServiceBitsEx, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NETRDFSGETVERSION(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NETRDFSGETVERSION *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETRDFSGETVERSION];
-
-	r = talloc(talloc_tos(), struct srvsvc_NETRDFSGETVERSION);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NETRDFSGETVERSION, r);
-	}
-
-	r->out.result = _srvsvc_NETRDFSGETVERSION(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NETRDFSGETVERSION, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NETRDFSCREATELOCALPARTITION(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NETRDFSCREATELOCALPARTITION *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETRDFSCREATELOCALPARTITION];
-
-	r = talloc(talloc_tos(), struct srvsvc_NETRDFSCREATELOCALPARTITION);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NETRDFSCREATELOCALPARTITION, r);
-	}
-
-	r->out.result = _srvsvc_NETRDFSCREATELOCALPARTITION(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NETRDFSCREATELOCALPARTITION, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NETRDFSDELETELOCALPARTITION(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NETRDFSDELETELOCALPARTITION *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETRDFSDELETELOCALPARTITION];
-
-	r = talloc(talloc_tos(), struct srvsvc_NETRDFSDELETELOCALPARTITION);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NETRDFSDELETELOCALPARTITION, r);
-	}
-
-	r->out.result = _srvsvc_NETRDFSDELETELOCALPARTITION(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NETRDFSDELETELOCALPARTITION, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NETRDFSSETLOCALVOLUMESTATE(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NETRDFSSETLOCALVOLUMESTATE *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETRDFSSETLOCALVOLUMESTATE];
-
-	r = talloc(talloc_tos(), struct srvsvc_NETRDFSSETLOCALVOLUMESTATE);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NETRDFSSETLOCALVOLUMESTATE, r);
-	}
-
-	r->out.result = _srvsvc_NETRDFSSETLOCALVOLUMESTATE(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NETRDFSSETLOCALVOLUMESTATE, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NETRDFSSETSERVERINFO(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NETRDFSSETSERVERINFO *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETRDFSSETSERVERINFO];
-
-	r = talloc(talloc_tos(), struct srvsvc_NETRDFSSETSERVERINFO);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NETRDFSSETSERVERINFO, r);
-	}
-
-	r->out.result = _srvsvc_NETRDFSSETSERVERINFO(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NETRDFSSETSERVERINFO, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NETRDFSCREATEEXITPOINT(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NETRDFSCREATEEXITPOINT *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETRDFSCREATEEXITPOINT];
-
-	r = talloc(talloc_tos(), struct srvsvc_NETRDFSCREATEEXITPOINT);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NETRDFSCREATEEXITPOINT, r);
-	}
-
-	r->out.result = _srvsvc_NETRDFSCREATEEXITPOINT(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NETRDFSCREATEEXITPOINT, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NETRDFSDELETEEXITPOINT(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NETRDFSDELETEEXITPOINT *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETRDFSDELETEEXITPOINT];
-
-	r = talloc(talloc_tos(), struct srvsvc_NETRDFSDELETEEXITPOINT);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NETRDFSDELETEEXITPOINT, r);
-	}
-
-	r->out.result = _srvsvc_NETRDFSDELETEEXITPOINT(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NETRDFSDELETEEXITPOINT, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NETRDFSMODIFYPREFIX(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NETRDFSMODIFYPREFIX *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETRDFSMODIFYPREFIX];
-
-	r = talloc(talloc_tos(), struct srvsvc_NETRDFSMODIFYPREFIX);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NETRDFSMODIFYPREFIX, r);
-	}
-
-	r->out.result = _srvsvc_NETRDFSMODIFYPREFIX(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NETRDFSMODIFYPREFIX, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NETRDFSFIXLOCALVOLUME(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NETRDFSFIXLOCALVOLUME *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETRDFSFIXLOCALVOLUME];
-
-	r = talloc(talloc_tos(), struct srvsvc_NETRDFSFIXLOCALVOLUME);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NETRDFSFIXLOCALVOLUME, r);
-	}
-
-	r->out.result = _srvsvc_NETRDFSFIXLOCALVOLUME(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NETRDFSFIXLOCALVOLUME, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NETRDFSMANAGERREPORTSITEINFO(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NETRDFSMANAGERREPORTSITEINFO *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETRDFSMANAGERREPORTSITEINFO];
-
-	r = talloc(talloc_tos(), struct srvsvc_NETRDFSMANAGERREPORTSITEINFO);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NETRDFSMANAGERREPORTSITEINFO, r);
-	}
-
-	r->out.result = _srvsvc_NETRDFSMANAGERREPORTSITEINFO(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NETRDFSMANAGERREPORTSITEINFO, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_srvsvc_NETRSERVERTRANSPORTDELEX(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct srvsvc_NETRSERVERTRANSPORTDELEX *r;
-
-	call = &ndr_table_srvsvc.calls[NDR_SRVSVC_NETRSERVERTRANSPORTDELEX];
-
-	r = talloc(talloc_tos(), struct srvsvc_NETRSERVERTRANSPORTDELEX);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(srvsvc_NETRSERVERTRANSPORTDELEX, r);
-	}
-
-	r->out.result = _srvsvc_NETRSERVERTRANSPORTDELEX(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(srvsvc_NETRSERVERTRANSPORTDELEX, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-
-/* Tables */
-static struct api_struct api_srvsvc_cmds[] = 
-{
-	{"SRVSVC_NETCHARDEVENUM", NDR_SRVSVC_NETCHARDEVENUM, api_srvsvc_NetCharDevEnum},
-	{"SRVSVC_NETCHARDEVGETINFO", NDR_SRVSVC_NETCHARDEVGETINFO, api_srvsvc_NetCharDevGetInfo},
-	{"SRVSVC_NETCHARDEVCONTROL", NDR_SRVSVC_NETCHARDEVCONTROL, api_srvsvc_NetCharDevControl},
-	{"SRVSVC_NETCHARDEVQENUM", NDR_SRVSVC_NETCHARDEVQENUM, api_srvsvc_NetCharDevQEnum},
-	{"SRVSVC_NETCHARDEVQGETINFO", NDR_SRVSVC_NETCHARDEVQGETINFO, api_srvsvc_NetCharDevQGetInfo},
-	{"SRVSVC_NETCHARDEVQSETINFO", NDR_SRVSVC_NETCHARDEVQSETINFO, api_srvsvc_NetCharDevQSetInfo},
-	{"SRVSVC_NETCHARDEVQPURGE", NDR_SRVSVC_NETCHARDEVQPURGE, api_srvsvc_NetCharDevQPurge},
-	{"SRVSVC_NETCHARDEVQPURGESELF", NDR_SRVSVC_NETCHARDEVQPURGESELF, api_srvsvc_NetCharDevQPurgeSelf},
-	{"SRVSVC_NETCONNENUM", NDR_SRVSVC_NETCONNENUM, api_srvsvc_NetConnEnum},
-	{"SRVSVC_NETFILEENUM", NDR_SRVSVC_NETFILEENUM, api_srvsvc_NetFileEnum},
-	{"SRVSVC_NETFILEGETINFO", NDR_SRVSVC_NETFILEGETINFO, api_srvsvc_NetFileGetInfo},
-	{"SRVSVC_NETFILECLOSE", NDR_SRVSVC_NETFILECLOSE, api_srvsvc_NetFileClose},
-	{"SRVSVC_NETSESSENUM", NDR_SRVSVC_NETSESSENUM, api_srvsvc_NetSessEnum},
-	{"SRVSVC_NETSESSDEL", NDR_SRVSVC_NETSESSDEL, api_srvsvc_NetSessDel},
-	{"SRVSVC_NETSHAREADD", NDR_SRVSVC_NETSHAREADD, api_srvsvc_NetShareAdd},
-	{"SRVSVC_NETSHAREENUMALL", NDR_SRVSVC_NETSHAREENUMALL, api_srvsvc_NetShareEnumAll},
-	{"SRVSVC_NETSHAREGETINFO", NDR_SRVSVC_NETSHAREGETINFO, api_srvsvc_NetShareGetInfo},
-	{"SRVSVC_NETSHARESETINFO", NDR_SRVSVC_NETSHARESETINFO, api_srvsvc_NetShareSetInfo},
-	{"SRVSVC_NETSHAREDEL", NDR_SRVSVC_NETSHAREDEL, api_srvsvc_NetShareDel},
-	{"SRVSVC_NETSHAREDELSTICKY", NDR_SRVSVC_NETSHAREDELSTICKY, api_srvsvc_NetShareDelSticky},
-	{"SRVSVC_NETSHARECHECK", NDR_SRVSVC_NETSHARECHECK, api_srvsvc_NetShareCheck},
-	{"SRVSVC_NETSRVGETINFO", NDR_SRVSVC_NETSRVGETINFO, api_srvsvc_NetSrvGetInfo},
-	{"SRVSVC_NETSRVSETINFO", NDR_SRVSVC_NETSRVSETINFO, api_srvsvc_NetSrvSetInfo},
-	{"SRVSVC_NETDISKENUM", NDR_SRVSVC_NETDISKENUM, api_srvsvc_NetDiskEnum},
-	{"SRVSVC_NETSERVERSTATISTICSGET", NDR_SRVSVC_NETSERVERSTATISTICSGET, api_srvsvc_NetServerStatisticsGet},
-	{"SRVSVC_NETTRANSPORTADD", NDR_SRVSVC_NETTRANSPORTADD, api_srvsvc_NetTransportAdd},
-	{"SRVSVC_NETTRANSPORTENUM", NDR_SRVSVC_NETTRANSPORTENUM, api_srvsvc_NetTransportEnum},
-	{"SRVSVC_NETTRANSPORTDEL", NDR_SRVSVC_NETTRANSPORTDEL, api_srvsvc_NetTransportDel},
-	{"SRVSVC_NETREMOTETOD", NDR_SRVSVC_NETREMOTETOD, api_srvsvc_NetRemoteTOD},
-	{"SRVSVC_NETSETSERVICEBITS", NDR_SRVSVC_NETSETSERVICEBITS, api_srvsvc_NetSetServiceBits},
-	{"SRVSVC_NETPATHTYPE", NDR_SRVSVC_NETPATHTYPE, api_srvsvc_NetPathType},
-	{"SRVSVC_NETPATHCANONICALIZE", NDR_SRVSVC_NETPATHCANONICALIZE, api_srvsvc_NetPathCanonicalize},
-	{"SRVSVC_NETPATHCOMPARE", NDR_SRVSVC_NETPATHCOMPARE, api_srvsvc_NetPathCompare},
-	{"SRVSVC_NETNAMEVALIDATE", NDR_SRVSVC_NETNAMEVALIDATE, api_srvsvc_NetNameValidate},
-	{"SRVSVC_NETRPRNAMECANONICALIZE", NDR_SRVSVC_NETRPRNAMECANONICALIZE, api_srvsvc_NETRPRNAMECANONICALIZE},
-	{"SRVSVC_NETPRNAMECOMPARE", NDR_SRVSVC_NETPRNAMECOMPARE, api_srvsvc_NetPRNameCompare},
-	{"SRVSVC_NETSHAREENUM", NDR_SRVSVC_NETSHAREENUM, api_srvsvc_NetShareEnum},
-	{"SRVSVC_NETSHAREDELSTART", NDR_SRVSVC_NETSHAREDELSTART, api_srvsvc_NetShareDelStart},
-	{"SRVSVC_NETSHAREDELCOMMIT", NDR_SRVSVC_NETSHAREDELCOMMIT, api_srvsvc_NetShareDelCommit},
-	{"SRVSVC_NETGETFILESECURITY", NDR_SRVSVC_NETGETFILESECURITY, api_srvsvc_NetGetFileSecurity},
-	{"SRVSVC_NETSETFILESECURITY", NDR_SRVSVC_NETSETFILESECURITY, api_srvsvc_NetSetFileSecurity},
-	{"SRVSVC_NETSERVERTRANSPORTADDEX", NDR_SRVSVC_NETSERVERTRANSPORTADDEX, api_srvsvc_NetServerTransportAddEx},
-	{"SRVSVC_NETSERVERSETSERVICEBITSEX", NDR_SRVSVC_NETSERVERSETSERVICEBITSEX, api_srvsvc_NetServerSetServiceBitsEx},
-	{"SRVSVC_NETRDFSGETVERSION", NDR_SRVSVC_NETRDFSGETVERSION, api_srvsvc_NETRDFSGETVERSION},
-	{"SRVSVC_NETRDFSCREATELOCALPARTITION", NDR_SRVSVC_NETRDFSCREATELOCALPARTITION, api_srvsvc_NETRDFSCREATELOCALPARTITION},
-	{"SRVSVC_NETRDFSDELETELOCALPARTITION", NDR_SRVSVC_NETRDFSDELETELOCALPARTITION, api_srvsvc_NETRDFSDELETELOCALPARTITION},
-	{"SRVSVC_NETRDFSSETLOCALVOLUMESTATE", NDR_SRVSVC_NETRDFSSETLOCALVOLUMESTATE, api_srvsvc_NETRDFSSETLOCALVOLUMESTATE},
-	{"SRVSVC_NETRDFSSETSERVERINFO", NDR_SRVSVC_NETRDFSSETSERVERINFO, api_srvsvc_NETRDFSSETSERVERINFO},
-	{"SRVSVC_NETRDFSCREATEEXITPOINT", NDR_SRVSVC_NETRDFSCREATEEXITPOINT, api_srvsvc_NETRDFSCREATEEXITPOINT},
-	{"SRVSVC_NETRDFSDELETEEXITPOINT", NDR_SRVSVC_NETRDFSDELETEEXITPOINT, api_srvsvc_NETRDFSDELETEEXITPOINT},
-	{"SRVSVC_NETRDFSMODIFYPREFIX", NDR_SRVSVC_NETRDFSMODIFYPREFIX, api_srvsvc_NETRDFSMODIFYPREFIX},
-	{"SRVSVC_NETRDFSFIXLOCALVOLUME", NDR_SRVSVC_NETRDFSFIXLOCALVOLUME, api_srvsvc_NETRDFSFIXLOCALVOLUME},
-	{"SRVSVC_NETRDFSMANAGERREPORTSITEINFO", NDR_SRVSVC_NETRDFSMANAGERREPORTSITEINFO, api_srvsvc_NETRDFSMANAGERREPORTSITEINFO},
-	{"SRVSVC_NETRSERVERTRANSPORTDELEX", NDR_SRVSVC_NETRSERVERTRANSPORTDELEX, api_srvsvc_NETRSERVERTRANSPORTDELEX},
-};
-
-void srvsvc_get_pipe_fns(struct api_struct **fns, int *n_fns)
-{
-	*fns = api_srvsvc_cmds;
-	*n_fns = sizeof(api_srvsvc_cmds) / sizeof(struct api_struct);
-}
-
-NTSTATUS rpc_srvsvc_init(void)
-{
-	return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "srvsvc", "srvsvc", api_srvsvc_cmds, sizeof(api_srvsvc_cmds) / sizeof(struct api_struct));
-}

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_srvsvc.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_srvsvc.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_srvsvc.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,60 +0,0 @@
-#include "librpc/gen_ndr/ndr_srvsvc.h"
-#ifndef __SRV_SRVSVC__
-#define __SRV_SRVSVC__
-WERROR _srvsvc_NetCharDevEnum(pipes_struct *p, struct srvsvc_NetCharDevEnum *r);
-WERROR _srvsvc_NetCharDevGetInfo(pipes_struct *p, struct srvsvc_NetCharDevGetInfo *r);
-WERROR _srvsvc_NetCharDevControl(pipes_struct *p, struct srvsvc_NetCharDevControl *r);
-WERROR _srvsvc_NetCharDevQEnum(pipes_struct *p, struct srvsvc_NetCharDevQEnum *r);
-WERROR _srvsvc_NetCharDevQGetInfo(pipes_struct *p, struct srvsvc_NetCharDevQGetInfo *r);
-WERROR _srvsvc_NetCharDevQSetInfo(pipes_struct *p, struct srvsvc_NetCharDevQSetInfo *r);
-WERROR _srvsvc_NetCharDevQPurge(pipes_struct *p, struct srvsvc_NetCharDevQPurge *r);
-WERROR _srvsvc_NetCharDevQPurgeSelf(pipes_struct *p, struct srvsvc_NetCharDevQPurgeSelf *r);
-WERROR _srvsvc_NetConnEnum(pipes_struct *p, struct srvsvc_NetConnEnum *r);
-WERROR _srvsvc_NetFileEnum(pipes_struct *p, struct srvsvc_NetFileEnum *r);
-WERROR _srvsvc_NetFileGetInfo(pipes_struct *p, struct srvsvc_NetFileGetInfo *r);
-WERROR _srvsvc_NetFileClose(pipes_struct *p, struct srvsvc_NetFileClose *r);
-WERROR _srvsvc_NetSessEnum(pipes_struct *p, struct srvsvc_NetSessEnum *r);
-WERROR _srvsvc_NetSessDel(pipes_struct *p, struct srvsvc_NetSessDel *r);
-WERROR _srvsvc_NetShareAdd(pipes_struct *p, struct srvsvc_NetShareAdd *r);
-WERROR _srvsvc_NetShareEnumAll(pipes_struct *p, struct srvsvc_NetShareEnumAll *r);
-WERROR _srvsvc_NetShareGetInfo(pipes_struct *p, struct srvsvc_NetShareGetInfo *r);
-WERROR _srvsvc_NetShareSetInfo(pipes_struct *p, struct srvsvc_NetShareSetInfo *r);
-WERROR _srvsvc_NetShareDel(pipes_struct *p, struct srvsvc_NetShareDel *r);
-WERROR _srvsvc_NetShareDelSticky(pipes_struct *p, struct srvsvc_NetShareDelSticky *r);
-WERROR _srvsvc_NetShareCheck(pipes_struct *p, struct srvsvc_NetShareCheck *r);
-WERROR _srvsvc_NetSrvGetInfo(pipes_struct *p, struct srvsvc_NetSrvGetInfo *r);
-WERROR _srvsvc_NetSrvSetInfo(pipes_struct *p, struct srvsvc_NetSrvSetInfo *r);
-WERROR _srvsvc_NetDiskEnum(pipes_struct *p, struct srvsvc_NetDiskEnum *r);
-WERROR _srvsvc_NetServerStatisticsGet(pipes_struct *p, struct srvsvc_NetServerStatisticsGet *r);
-WERROR _srvsvc_NetTransportAdd(pipes_struct *p, struct srvsvc_NetTransportAdd *r);
-WERROR _srvsvc_NetTransportEnum(pipes_struct *p, struct srvsvc_NetTransportEnum *r);
-WERROR _srvsvc_NetTransportDel(pipes_struct *p, struct srvsvc_NetTransportDel *r);
-WERROR _srvsvc_NetRemoteTOD(pipes_struct *p, struct srvsvc_NetRemoteTOD *r);
-WERROR _srvsvc_NetSetServiceBits(pipes_struct *p, struct srvsvc_NetSetServiceBits *r);
-WERROR _srvsvc_NetPathType(pipes_struct *p, struct srvsvc_NetPathType *r);
-WERROR _srvsvc_NetPathCanonicalize(pipes_struct *p, struct srvsvc_NetPathCanonicalize *r);
-WERROR _srvsvc_NetPathCompare(pipes_struct *p, struct srvsvc_NetPathCompare *r);
-WERROR _srvsvc_NetNameValidate(pipes_struct *p, struct srvsvc_NetNameValidate *r);
-WERROR _srvsvc_NETRPRNAMECANONICALIZE(pipes_struct *p, struct srvsvc_NETRPRNAMECANONICALIZE *r);
-WERROR _srvsvc_NetPRNameCompare(pipes_struct *p, struct srvsvc_NetPRNameCompare *r);
-WERROR _srvsvc_NetShareEnum(pipes_struct *p, struct srvsvc_NetShareEnum *r);
-WERROR _srvsvc_NetShareDelStart(pipes_struct *p, struct srvsvc_NetShareDelStart *r);
-WERROR _srvsvc_NetShareDelCommit(pipes_struct *p, struct srvsvc_NetShareDelCommit *r);
-WERROR _srvsvc_NetGetFileSecurity(pipes_struct *p, struct srvsvc_NetGetFileSecurity *r);
-WERROR _srvsvc_NetSetFileSecurity(pipes_struct *p, struct srvsvc_NetSetFileSecurity *r);
-WERROR _srvsvc_NetServerTransportAddEx(pipes_struct *p, struct srvsvc_NetServerTransportAddEx *r);
-WERROR _srvsvc_NetServerSetServiceBitsEx(pipes_struct *p, struct srvsvc_NetServerSetServiceBitsEx *r);
-WERROR _srvsvc_NETRDFSGETVERSION(pipes_struct *p, struct srvsvc_NETRDFSGETVERSION *r);
-WERROR _srvsvc_NETRDFSCREATELOCALPARTITION(pipes_struct *p, struct srvsvc_NETRDFSCREATELOCALPARTITION *r);
-WERROR _srvsvc_NETRDFSDELETELOCALPARTITION(pipes_struct *p, struct srvsvc_NETRDFSDELETELOCALPARTITION *r);
-WERROR _srvsvc_NETRDFSSETLOCALVOLUMESTATE(pipes_struct *p, struct srvsvc_NETRDFSSETLOCALVOLUMESTATE *r);
-WERROR _srvsvc_NETRDFSSETSERVERINFO(pipes_struct *p, struct srvsvc_NETRDFSSETSERVERINFO *r);
-WERROR _srvsvc_NETRDFSCREATEEXITPOINT(pipes_struct *p, struct srvsvc_NETRDFSCREATEEXITPOINT *r);
-WERROR _srvsvc_NETRDFSDELETEEXITPOINT(pipes_struct *p, struct srvsvc_NETRDFSDELETEEXITPOINT *r);
-WERROR _srvsvc_NETRDFSMODIFYPREFIX(pipes_struct *p, struct srvsvc_NETRDFSMODIFYPREFIX *r);
-WERROR _srvsvc_NETRDFSFIXLOCALVOLUME(pipes_struct *p, struct srvsvc_NETRDFSFIXLOCALVOLUME *r);
-WERROR _srvsvc_NETRDFSMANAGERREPORTSITEINFO(pipes_struct *p, struct srvsvc_NETRDFSMANAGERREPORTSITEINFO *r);
-WERROR _srvsvc_NETRSERVERTRANSPORTDELEX(pipes_struct *p, struct srvsvc_NETRSERVERTRANSPORTDELEX *r);
-void srvsvc_get_pipe_fns(struct api_struct **fns, int *n_fns);
-NTSTATUS rpc_srvsvc_init(void);
-#endif /* __SRV_SRVSVC__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_svcctl.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_svcctl.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_svcctl.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,3621 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * server auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/srv_svcctl.h"
-
-static bool api_svcctl_CloseServiceHandle(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_CloseServiceHandle *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_CLOSESERVICEHANDLE];
-
-	r = talloc(talloc_tos(), struct svcctl_CloseServiceHandle);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_CloseServiceHandle, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.handle = r->in.handle;
-	r->out.result = _svcctl_CloseServiceHandle(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_CloseServiceHandle, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_ControlService(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_ControlService *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_CONTROLSERVICE];
-
-	r = talloc(talloc_tos(), struct svcctl_ControlService);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_ControlService, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.service_status = talloc_zero(r, struct SERVICE_STATUS);
-	if (r->out.service_status == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _svcctl_ControlService(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_ControlService, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_DeleteService(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_DeleteService *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_DELETESERVICE];
-
-	r = talloc(talloc_tos(), struct svcctl_DeleteService);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_DeleteService, r);
-	}
-
-	r->out.result = _svcctl_DeleteService(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_DeleteService, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_LockServiceDatabase(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_LockServiceDatabase *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_LOCKSERVICEDATABASE];
-
-	r = talloc(talloc_tos(), struct svcctl_LockServiceDatabase);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_LockServiceDatabase, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.lock = talloc_zero(r, struct policy_handle);
-	if (r->out.lock == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _svcctl_LockServiceDatabase(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_LockServiceDatabase, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_QueryServiceObjectSecurity(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_QueryServiceObjectSecurity *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_QUERYSERVICEOBJECTSECURITY];
-
-	r = talloc(talloc_tos(), struct svcctl_QueryServiceObjectSecurity);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_QueryServiceObjectSecurity, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.buffer = talloc_zero_array(r, uint8_t, r->in.buffer_size);
-	if (r->out.buffer == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.needed = talloc_zero(r, uint32_t);
-	if (r->out.needed == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _svcctl_QueryServiceObjectSecurity(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_QueryServiceObjectSecurity, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_SetServiceObjectSecurity(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_SetServiceObjectSecurity *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_SETSERVICEOBJECTSECURITY];
-
-	r = talloc(talloc_tos(), struct svcctl_SetServiceObjectSecurity);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_SetServiceObjectSecurity, r);
-	}
-
-	r->out.result = _svcctl_SetServiceObjectSecurity(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_SetServiceObjectSecurity, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_QueryServiceStatus(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_QueryServiceStatus *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_QUERYSERVICESTATUS];
-
-	r = talloc(talloc_tos(), struct svcctl_QueryServiceStatus);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_QueryServiceStatus, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.service_status = talloc_zero(r, struct SERVICE_STATUS);
-	if (r->out.service_status == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _svcctl_QueryServiceStatus(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_QueryServiceStatus, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_SetServiceStatus(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_SetServiceStatus *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_SETSERVICESTATUS];
-
-	r = talloc(talloc_tos(), struct svcctl_SetServiceStatus);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_SetServiceStatus, r);
-	}
-
-	r->out.result = _svcctl_SetServiceStatus(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_SetServiceStatus, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_UnlockServiceDatabase(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_UnlockServiceDatabase *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_UNLOCKSERVICEDATABASE];
-
-	r = talloc(talloc_tos(), struct svcctl_UnlockServiceDatabase);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_UnlockServiceDatabase, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.lock = r->in.lock;
-	r->out.result = _svcctl_UnlockServiceDatabase(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_UnlockServiceDatabase, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_NotifyBootConfigStatus(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_NotifyBootConfigStatus *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_NOTIFYBOOTCONFIGSTATUS];
-
-	r = talloc(talloc_tos(), struct svcctl_NotifyBootConfigStatus);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_NotifyBootConfigStatus, r);
-	}
-
-	r->out.result = _svcctl_NotifyBootConfigStatus(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_NotifyBootConfigStatus, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_SCSetServiceBitsW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_SCSetServiceBitsW *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_SCSETSERVICEBITSW];
-
-	r = talloc(talloc_tos(), struct svcctl_SCSetServiceBitsW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_SCSetServiceBitsW, r);
-	}
-
-	r->out.result = _svcctl_SCSetServiceBitsW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_SCSetServiceBitsW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_ChangeServiceConfigW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_ChangeServiceConfigW *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_CHANGESERVICECONFIGW];
-
-	r = talloc(talloc_tos(), struct svcctl_ChangeServiceConfigW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_ChangeServiceConfigW, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.tag_id = talloc_zero(r, uint32_t);
-	if (r->out.tag_id == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _svcctl_ChangeServiceConfigW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_ChangeServiceConfigW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_CreateServiceW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_CreateServiceW *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_CREATESERVICEW];
-
-	r = talloc(talloc_tos(), struct svcctl_CreateServiceW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_CreateServiceW, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.TagId = r->in.TagId;
-	r->out.handle = talloc_zero(r, struct policy_handle);
-	if (r->out.handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _svcctl_CreateServiceW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_CreateServiceW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_EnumDependentServicesW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_EnumDependentServicesW *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_ENUMDEPENDENTSERVICESW];
-
-	r = talloc(talloc_tos(), struct svcctl_EnumDependentServicesW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_EnumDependentServicesW, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.service_status = talloc_zero(r, struct ENUM_SERVICE_STATUS);
-	if (r->out.service_status == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.bytes_needed = talloc_zero(r, uint32_t);
-	if (r->out.bytes_needed == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.services_returned = talloc_zero(r, uint32_t);
-	if (r->out.services_returned == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _svcctl_EnumDependentServicesW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_EnumDependentServicesW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_EnumServicesStatusW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_EnumServicesStatusW *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_ENUMSERVICESSTATUSW];
-
-	r = talloc(talloc_tos(), struct svcctl_EnumServicesStatusW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_EnumServicesStatusW, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.service = talloc_zero_array(r, uint8_t, r->in.buf_size);
-	if (r->out.service == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.bytes_needed = talloc_zero(r, uint32_t);
-	if (r->out.bytes_needed == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.services_returned = talloc_zero(r, uint32_t);
-	if (r->out.services_returned == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.resume_handle = r->in.resume_handle;
-	r->out.result = _svcctl_EnumServicesStatusW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_EnumServicesStatusW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_OpenSCManagerW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_OpenSCManagerW *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_OPENSCMANAGERW];
-
-	r = talloc(talloc_tos(), struct svcctl_OpenSCManagerW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_OpenSCManagerW, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.handle = talloc_zero(r, struct policy_handle);
-	if (r->out.handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _svcctl_OpenSCManagerW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_OpenSCManagerW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_OpenServiceW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_OpenServiceW *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_OPENSERVICEW];
-
-	r = talloc(talloc_tos(), struct svcctl_OpenServiceW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_OpenServiceW, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.handle = talloc_zero(r, struct policy_handle);
-	if (r->out.handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _svcctl_OpenServiceW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_OpenServiceW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_QueryServiceConfigW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_QueryServiceConfigW *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_QUERYSERVICECONFIGW];
-
-	r = talloc(talloc_tos(), struct svcctl_QueryServiceConfigW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_QueryServiceConfigW, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.query = talloc_zero_array(r, uint8_t, r->in.buf_size);
-	if (r->out.query == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.bytes_needed = talloc_zero(r, uint32_t);
-	if (r->out.bytes_needed == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _svcctl_QueryServiceConfigW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_QueryServiceConfigW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_QueryServiceLockStatusW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_QueryServiceLockStatusW *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_QUERYSERVICELOCKSTATUSW];
-
-	r = talloc(talloc_tos(), struct svcctl_QueryServiceLockStatusW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_QueryServiceLockStatusW, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.lock_status = talloc_zero(r, struct SERVICE_LOCK_STATUS);
-	if (r->out.lock_status == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.required_buf_size = talloc_zero(r, uint32_t);
-	if (r->out.required_buf_size == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _svcctl_QueryServiceLockStatusW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_QueryServiceLockStatusW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_StartServiceW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_StartServiceW *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_STARTSERVICEW];
-
-	r = talloc(talloc_tos(), struct svcctl_StartServiceW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_StartServiceW, r);
-	}
-
-	r->out.result = _svcctl_StartServiceW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_StartServiceW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_GetServiceDisplayNameW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_GetServiceDisplayNameW *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_GETSERVICEDISPLAYNAMEW];
-
-	r = talloc(talloc_tos(), struct svcctl_GetServiceDisplayNameW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_GetServiceDisplayNameW, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.display_name = talloc_zero(r, const char *);
-	if (r->out.display_name == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.display_name_length = r->in.display_name_length;
-	r->out.result = _svcctl_GetServiceDisplayNameW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_GetServiceDisplayNameW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_GetServiceKeyNameW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_GetServiceKeyNameW *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_GETSERVICEKEYNAMEW];
-
-	r = talloc(talloc_tos(), struct svcctl_GetServiceKeyNameW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_GetServiceKeyNameW, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.key_name = talloc_zero(r, const char *);
-	if (r->out.key_name == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.display_name_length = r->in.display_name_length;
-	r->out.result = _svcctl_GetServiceKeyNameW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_GetServiceKeyNameW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_SCSetServiceBitsA(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_SCSetServiceBitsA *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_SCSETSERVICEBITSA];
-
-	r = talloc(talloc_tos(), struct svcctl_SCSetServiceBitsA);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_SCSetServiceBitsA, r);
-	}
-
-	r->out.result = _svcctl_SCSetServiceBitsA(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_SCSetServiceBitsA, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_ChangeServiceConfigA(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_ChangeServiceConfigA *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_CHANGESERVICECONFIGA];
-
-	r = talloc(talloc_tos(), struct svcctl_ChangeServiceConfigA);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_ChangeServiceConfigA, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.tag_id = talloc_zero(r, uint32_t);
-	if (r->out.tag_id == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _svcctl_ChangeServiceConfigA(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_ChangeServiceConfigA, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_CreateServiceA(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_CreateServiceA *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_CREATESERVICEA];
-
-	r = talloc(talloc_tos(), struct svcctl_CreateServiceA);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_CreateServiceA, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.TagId = talloc_zero(r, uint32_t);
-	if (r->out.TagId == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _svcctl_CreateServiceA(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_CreateServiceA, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_EnumDependentServicesA(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_EnumDependentServicesA *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_ENUMDEPENDENTSERVICESA];
-
-	r = talloc(talloc_tos(), struct svcctl_EnumDependentServicesA);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_EnumDependentServicesA, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.service_status = talloc_zero(r, struct ENUM_SERVICE_STATUS);
-	if (r->out.service_status == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.bytes_needed = talloc_zero(r, uint32_t);
-	if (r->out.bytes_needed == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.services_returned = talloc_zero(r, uint32_t);
-	if (r->out.services_returned == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _svcctl_EnumDependentServicesA(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_EnumDependentServicesA, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_EnumServicesStatusA(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_EnumServicesStatusA *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_ENUMSERVICESSTATUSA];
-
-	r = talloc(talloc_tos(), struct svcctl_EnumServicesStatusA);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_EnumServicesStatusA, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.service = talloc_zero_array(r, uint8_t, r->in.buf_size);
-	if (r->out.service == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.bytes_needed = talloc_zero(r, uint32_t);
-	if (r->out.bytes_needed == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.services_returned = talloc_zero(r, uint32_t);
-	if (r->out.services_returned == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.resume_handle = r->in.resume_handle;
-	r->out.result = _svcctl_EnumServicesStatusA(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_EnumServicesStatusA, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_OpenSCManagerA(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_OpenSCManagerA *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_OPENSCMANAGERA];
-
-	r = talloc(talloc_tos(), struct svcctl_OpenSCManagerA);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_OpenSCManagerA, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.handle = talloc_zero(r, struct policy_handle);
-	if (r->out.handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _svcctl_OpenSCManagerA(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_OpenSCManagerA, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_OpenServiceA(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_OpenServiceA *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_OPENSERVICEA];
-
-	r = talloc(talloc_tos(), struct svcctl_OpenServiceA);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_OpenServiceA, r);
-	}
-
-	r->out.result = _svcctl_OpenServiceA(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_OpenServiceA, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_QueryServiceConfigA(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_QueryServiceConfigA *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_QUERYSERVICECONFIGA];
-
-	r = talloc(talloc_tos(), struct svcctl_QueryServiceConfigA);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_QueryServiceConfigA, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.query = talloc_zero_array(r, uint8_t, r->in.buf_size);
-	if (r->out.query == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.bytes_needed = talloc_zero(r, uint32_t);
-	if (r->out.bytes_needed == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _svcctl_QueryServiceConfigA(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_QueryServiceConfigA, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_QueryServiceLockStatusA(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_QueryServiceLockStatusA *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_QUERYSERVICELOCKSTATUSA];
-
-	r = talloc(talloc_tos(), struct svcctl_QueryServiceLockStatusA);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_QueryServiceLockStatusA, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.lock_status = talloc_zero(r, struct SERVICE_LOCK_STATUS);
-	if (r->out.lock_status == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.required_buf_size = talloc_zero(r, uint32_t);
-	if (r->out.required_buf_size == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _svcctl_QueryServiceLockStatusA(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_QueryServiceLockStatusA, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_StartServiceA(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_StartServiceA *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_STARTSERVICEA];
-
-	r = talloc(talloc_tos(), struct svcctl_StartServiceA);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_StartServiceA, r);
-	}
-
-	r->out.result = _svcctl_StartServiceA(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_StartServiceA, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_GetServiceDisplayNameA(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_GetServiceDisplayNameA *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_GETSERVICEDISPLAYNAMEA];
-
-	r = talloc(talloc_tos(), struct svcctl_GetServiceDisplayNameA);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_GetServiceDisplayNameA, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.display_name = talloc_zero(r, const char *);
-	if (r->out.display_name == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.display_name_length = r->in.display_name_length;
-	r->out.result = _svcctl_GetServiceDisplayNameA(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_GetServiceDisplayNameA, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_GetServiceKeyNameA(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_GetServiceKeyNameA *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_GETSERVICEKEYNAMEA];
-
-	r = talloc(talloc_tos(), struct svcctl_GetServiceKeyNameA);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_GetServiceKeyNameA, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.key_name = talloc_zero(r, const char *);
-	if (r->out.key_name == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.display_name_length = r->in.display_name_length;
-	r->out.result = _svcctl_GetServiceKeyNameA(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_GetServiceKeyNameA, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_GetCurrentGroupeStateW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_GetCurrentGroupeStateW *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_GETCURRENTGROUPESTATEW];
-
-	r = talloc(talloc_tos(), struct svcctl_GetCurrentGroupeStateW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_GetCurrentGroupeStateW, r);
-	}
-
-	r->out.result = _svcctl_GetCurrentGroupeStateW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_GetCurrentGroupeStateW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_EnumServiceGroupW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_EnumServiceGroupW *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_ENUMSERVICEGROUPW];
-
-	r = talloc(talloc_tos(), struct svcctl_EnumServiceGroupW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_EnumServiceGroupW, r);
-	}
-
-	r->out.result = _svcctl_EnumServiceGroupW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_EnumServiceGroupW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_ChangeServiceConfig2A(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_ChangeServiceConfig2A *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_CHANGESERVICECONFIG2A];
-
-	r = talloc(talloc_tos(), struct svcctl_ChangeServiceConfig2A);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_ChangeServiceConfig2A, r);
-	}
-
-	r->out.result = _svcctl_ChangeServiceConfig2A(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_ChangeServiceConfig2A, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_ChangeServiceConfig2W(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_ChangeServiceConfig2W *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_CHANGESERVICECONFIG2W];
-
-	r = talloc(talloc_tos(), struct svcctl_ChangeServiceConfig2W);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_ChangeServiceConfig2W, r);
-	}
-
-	r->out.result = _svcctl_ChangeServiceConfig2W(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_ChangeServiceConfig2W, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_QueryServiceConfig2A(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_QueryServiceConfig2A *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_QUERYSERVICECONFIG2A];
-
-	r = talloc(talloc_tos(), struct svcctl_QueryServiceConfig2A);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_QueryServiceConfig2A, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.buffer = talloc_zero_array(r, uint8_t, r->in.buf_size);
-	if (r->out.buffer == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.bytes_needed = talloc_zero(r, uint32_t);
-	if (r->out.bytes_needed == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _svcctl_QueryServiceConfig2A(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_QueryServiceConfig2A, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_QueryServiceConfig2W(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_QueryServiceConfig2W *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_QUERYSERVICECONFIG2W];
-
-	r = talloc(talloc_tos(), struct svcctl_QueryServiceConfig2W);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_QueryServiceConfig2W, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.buffer = talloc_zero_array(r, uint8_t, r->in.buf_size);
-	if (r->out.buffer == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.bytes_needed = talloc_zero(r, uint32_t);
-	if (r->out.bytes_needed == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _svcctl_QueryServiceConfig2W(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_QueryServiceConfig2W, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_QueryServiceStatusEx(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_QueryServiceStatusEx *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_QUERYSERVICESTATUSEX];
-
-	r = talloc(talloc_tos(), struct svcctl_QueryServiceStatusEx);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_QueryServiceStatusEx, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.buffer = talloc_zero_array(r, uint8_t, r->in.buf_size);
-	if (r->out.buffer == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.bytes_needed = talloc_zero(r, uint32_t);
-	if (r->out.bytes_needed == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _svcctl_QueryServiceStatusEx(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_QueryServiceStatusEx, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_EnumServicesStatusExA(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct EnumServicesStatusExA *r;
-
-	call = &ndr_table_svcctl.calls[NDR_ENUMSERVICESSTATUSEXA];
-
-	r = talloc(talloc_tos(), struct EnumServicesStatusExA);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(EnumServicesStatusExA, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.services = talloc_zero_array(r, uint8_t, r->in.buf_size);
-	if (r->out.services == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.bytes_needed = talloc_zero(r, uint32_t);
-	if (r->out.bytes_needed == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.service_returned = talloc_zero(r, uint32_t);
-	if (r->out.service_returned == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.resume_handle = r->in.resume_handle;
-	r->out.group_name = talloc_zero(r, const char *);
-	if (r->out.group_name == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _EnumServicesStatusExA(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(EnumServicesStatusExA, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_EnumServicesStatusExW(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct EnumServicesStatusExW *r;
-
-	call = &ndr_table_svcctl.calls[NDR_ENUMSERVICESSTATUSEXW];
-
-	r = talloc(talloc_tos(), struct EnumServicesStatusExW);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(EnumServicesStatusExW, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.services = talloc_zero_array(r, uint8_t, r->in.buf_size);
-	if (r->out.services == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.bytes_needed = talloc_zero(r, uint32_t);
-	if (r->out.bytes_needed == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.service_returned = talloc_zero(r, uint32_t);
-	if (r->out.service_returned == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.resume_handle = r->in.resume_handle;
-	r->out.group_name = talloc_zero(r, const char *);
-	if (r->out.group_name == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _EnumServicesStatusExW(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(EnumServicesStatusExW, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_svcctl_SCSendTSMessage(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct svcctl_SCSendTSMessage *r;
-
-	call = &ndr_table_svcctl.calls[NDR_SVCCTL_SCSENDTSMESSAGE];
-
-	r = talloc(talloc_tos(), struct svcctl_SCSendTSMessage);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(svcctl_SCSendTSMessage, r);
-	}
-
-	r->out.result = _svcctl_SCSendTSMessage(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(svcctl_SCSendTSMessage, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-
-/* Tables */
-static struct api_struct api_svcctl_cmds[] = 
-{
-	{"SVCCTL_CLOSESERVICEHANDLE", NDR_SVCCTL_CLOSESERVICEHANDLE, api_svcctl_CloseServiceHandle},
-	{"SVCCTL_CONTROLSERVICE", NDR_SVCCTL_CONTROLSERVICE, api_svcctl_ControlService},
-	{"SVCCTL_DELETESERVICE", NDR_SVCCTL_DELETESERVICE, api_svcctl_DeleteService},
-	{"SVCCTL_LOCKSERVICEDATABASE", NDR_SVCCTL_LOCKSERVICEDATABASE, api_svcctl_LockServiceDatabase},
-	{"SVCCTL_QUERYSERVICEOBJECTSECURITY", NDR_SVCCTL_QUERYSERVICEOBJECTSECURITY, api_svcctl_QueryServiceObjectSecurity},
-	{"SVCCTL_SETSERVICEOBJECTSECURITY", NDR_SVCCTL_SETSERVICEOBJECTSECURITY, api_svcctl_SetServiceObjectSecurity},
-	{"SVCCTL_QUERYSERVICESTATUS", NDR_SVCCTL_QUERYSERVICESTATUS, api_svcctl_QueryServiceStatus},
-	{"SVCCTL_SETSERVICESTATUS", NDR_SVCCTL_SETSERVICESTATUS, api_svcctl_SetServiceStatus},
-	{"SVCCTL_UNLOCKSERVICEDATABASE", NDR_SVCCTL_UNLOCKSERVICEDATABASE, api_svcctl_UnlockServiceDatabase},
-	{"SVCCTL_NOTIFYBOOTCONFIGSTATUS", NDR_SVCCTL_NOTIFYBOOTCONFIGSTATUS, api_svcctl_NotifyBootConfigStatus},
-	{"SVCCTL_SCSETSERVICEBITSW", NDR_SVCCTL_SCSETSERVICEBITSW, api_svcctl_SCSetServiceBitsW},
-	{"SVCCTL_CHANGESERVICECONFIGW", NDR_SVCCTL_CHANGESERVICECONFIGW, api_svcctl_ChangeServiceConfigW},
-	{"SVCCTL_CREATESERVICEW", NDR_SVCCTL_CREATESERVICEW, api_svcctl_CreateServiceW},
-	{"SVCCTL_ENUMDEPENDENTSERVICESW", NDR_SVCCTL_ENUMDEPENDENTSERVICESW, api_svcctl_EnumDependentServicesW},
-	{"SVCCTL_ENUMSERVICESSTATUSW", NDR_SVCCTL_ENUMSERVICESSTATUSW, api_svcctl_EnumServicesStatusW},
-	{"SVCCTL_OPENSCMANAGERW", NDR_SVCCTL_OPENSCMANAGERW, api_svcctl_OpenSCManagerW},
-	{"SVCCTL_OPENSERVICEW", NDR_SVCCTL_OPENSERVICEW, api_svcctl_OpenServiceW},
-	{"SVCCTL_QUERYSERVICECONFIGW", NDR_SVCCTL_QUERYSERVICECONFIGW, api_svcctl_QueryServiceConfigW},
-	{"SVCCTL_QUERYSERVICELOCKSTATUSW", NDR_SVCCTL_QUERYSERVICELOCKSTATUSW, api_svcctl_QueryServiceLockStatusW},
-	{"SVCCTL_STARTSERVICEW", NDR_SVCCTL_STARTSERVICEW, api_svcctl_StartServiceW},
-	{"SVCCTL_GETSERVICEDISPLAYNAMEW", NDR_SVCCTL_GETSERVICEDISPLAYNAMEW, api_svcctl_GetServiceDisplayNameW},
-	{"SVCCTL_GETSERVICEKEYNAMEW", NDR_SVCCTL_GETSERVICEKEYNAMEW, api_svcctl_GetServiceKeyNameW},
-	{"SVCCTL_SCSETSERVICEBITSA", NDR_SVCCTL_SCSETSERVICEBITSA, api_svcctl_SCSetServiceBitsA},
-	{"SVCCTL_CHANGESERVICECONFIGA", NDR_SVCCTL_CHANGESERVICECONFIGA, api_svcctl_ChangeServiceConfigA},
-	{"SVCCTL_CREATESERVICEA", NDR_SVCCTL_CREATESERVICEA, api_svcctl_CreateServiceA},
-	{"SVCCTL_ENUMDEPENDENTSERVICESA", NDR_SVCCTL_ENUMDEPENDENTSERVICESA, api_svcctl_EnumDependentServicesA},
-	{"SVCCTL_ENUMSERVICESSTATUSA", NDR_SVCCTL_ENUMSERVICESSTATUSA, api_svcctl_EnumServicesStatusA},
-	{"SVCCTL_OPENSCMANAGERA", NDR_SVCCTL_OPENSCMANAGERA, api_svcctl_OpenSCManagerA},
-	{"SVCCTL_OPENSERVICEA", NDR_SVCCTL_OPENSERVICEA, api_svcctl_OpenServiceA},
-	{"SVCCTL_QUERYSERVICECONFIGA", NDR_SVCCTL_QUERYSERVICECONFIGA, api_svcctl_QueryServiceConfigA},
-	{"SVCCTL_QUERYSERVICELOCKSTATUSA", NDR_SVCCTL_QUERYSERVICELOCKSTATUSA, api_svcctl_QueryServiceLockStatusA},
-	{"SVCCTL_STARTSERVICEA", NDR_SVCCTL_STARTSERVICEA, api_svcctl_StartServiceA},
-	{"SVCCTL_GETSERVICEDISPLAYNAMEA", NDR_SVCCTL_GETSERVICEDISPLAYNAMEA, api_svcctl_GetServiceDisplayNameA},
-	{"SVCCTL_GETSERVICEKEYNAMEA", NDR_SVCCTL_GETSERVICEKEYNAMEA, api_svcctl_GetServiceKeyNameA},
-	{"SVCCTL_GETCURRENTGROUPESTATEW", NDR_SVCCTL_GETCURRENTGROUPESTATEW, api_svcctl_GetCurrentGroupeStateW},
-	{"SVCCTL_ENUMSERVICEGROUPW", NDR_SVCCTL_ENUMSERVICEGROUPW, api_svcctl_EnumServiceGroupW},
-	{"SVCCTL_CHANGESERVICECONFIG2A", NDR_SVCCTL_CHANGESERVICECONFIG2A, api_svcctl_ChangeServiceConfig2A},
-	{"SVCCTL_CHANGESERVICECONFIG2W", NDR_SVCCTL_CHANGESERVICECONFIG2W, api_svcctl_ChangeServiceConfig2W},
-	{"SVCCTL_QUERYSERVICECONFIG2A", NDR_SVCCTL_QUERYSERVICECONFIG2A, api_svcctl_QueryServiceConfig2A},
-	{"SVCCTL_QUERYSERVICECONFIG2W", NDR_SVCCTL_QUERYSERVICECONFIG2W, api_svcctl_QueryServiceConfig2W},
-	{"SVCCTL_QUERYSERVICESTATUSEX", NDR_SVCCTL_QUERYSERVICESTATUSEX, api_svcctl_QueryServiceStatusEx},
-	{"ENUMSERVICESSTATUSEXA", NDR_ENUMSERVICESSTATUSEXA, api_EnumServicesStatusExA},
-	{"ENUMSERVICESSTATUSEXW", NDR_ENUMSERVICESSTATUSEXW, api_EnumServicesStatusExW},
-	{"SVCCTL_SCSENDTSMESSAGE", NDR_SVCCTL_SCSENDTSMESSAGE, api_svcctl_SCSendTSMessage},
-};
-
-void svcctl_get_pipe_fns(struct api_struct **fns, int *n_fns)
-{
-	*fns = api_svcctl_cmds;
-	*n_fns = sizeof(api_svcctl_cmds) / sizeof(struct api_struct);
-}
-
-NTSTATUS rpc_svcctl_init(void)
-{
-	return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "svcctl", "svcctl", api_svcctl_cmds, sizeof(api_svcctl_cmds) / sizeof(struct api_struct));
-}

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_svcctl.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_svcctl.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_svcctl.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,50 +0,0 @@
-#include "librpc/gen_ndr/ndr_svcctl.h"
-#ifndef __SRV_SVCCTL__
-#define __SRV_SVCCTL__
-WERROR _svcctl_CloseServiceHandle(pipes_struct *p, struct svcctl_CloseServiceHandle *r);
-WERROR _svcctl_ControlService(pipes_struct *p, struct svcctl_ControlService *r);
-WERROR _svcctl_DeleteService(pipes_struct *p, struct svcctl_DeleteService *r);
-WERROR _svcctl_LockServiceDatabase(pipes_struct *p, struct svcctl_LockServiceDatabase *r);
-WERROR _svcctl_QueryServiceObjectSecurity(pipes_struct *p, struct svcctl_QueryServiceObjectSecurity *r);
-WERROR _svcctl_SetServiceObjectSecurity(pipes_struct *p, struct svcctl_SetServiceObjectSecurity *r);
-WERROR _svcctl_QueryServiceStatus(pipes_struct *p, struct svcctl_QueryServiceStatus *r);
-WERROR _svcctl_SetServiceStatus(pipes_struct *p, struct svcctl_SetServiceStatus *r);
-WERROR _svcctl_UnlockServiceDatabase(pipes_struct *p, struct svcctl_UnlockServiceDatabase *r);
-WERROR _svcctl_NotifyBootConfigStatus(pipes_struct *p, struct svcctl_NotifyBootConfigStatus *r);
-WERROR _svcctl_SCSetServiceBitsW(pipes_struct *p, struct svcctl_SCSetServiceBitsW *r);
-WERROR _svcctl_ChangeServiceConfigW(pipes_struct *p, struct svcctl_ChangeServiceConfigW *r);
-WERROR _svcctl_CreateServiceW(pipes_struct *p, struct svcctl_CreateServiceW *r);
-WERROR _svcctl_EnumDependentServicesW(pipes_struct *p, struct svcctl_EnumDependentServicesW *r);
-WERROR _svcctl_EnumServicesStatusW(pipes_struct *p, struct svcctl_EnumServicesStatusW *r);
-WERROR _svcctl_OpenSCManagerW(pipes_struct *p, struct svcctl_OpenSCManagerW *r);
-WERROR _svcctl_OpenServiceW(pipes_struct *p, struct svcctl_OpenServiceW *r);
-WERROR _svcctl_QueryServiceConfigW(pipes_struct *p, struct svcctl_QueryServiceConfigW *r);
-WERROR _svcctl_QueryServiceLockStatusW(pipes_struct *p, struct svcctl_QueryServiceLockStatusW *r);
-WERROR _svcctl_StartServiceW(pipes_struct *p, struct svcctl_StartServiceW *r);
-WERROR _svcctl_GetServiceDisplayNameW(pipes_struct *p, struct svcctl_GetServiceDisplayNameW *r);
-WERROR _svcctl_GetServiceKeyNameW(pipes_struct *p, struct svcctl_GetServiceKeyNameW *r);
-WERROR _svcctl_SCSetServiceBitsA(pipes_struct *p, struct svcctl_SCSetServiceBitsA *r);
-WERROR _svcctl_ChangeServiceConfigA(pipes_struct *p, struct svcctl_ChangeServiceConfigA *r);
-WERROR _svcctl_CreateServiceA(pipes_struct *p, struct svcctl_CreateServiceA *r);
-WERROR _svcctl_EnumDependentServicesA(pipes_struct *p, struct svcctl_EnumDependentServicesA *r);
-WERROR _svcctl_EnumServicesStatusA(pipes_struct *p, struct svcctl_EnumServicesStatusA *r);
-WERROR _svcctl_OpenSCManagerA(pipes_struct *p, struct svcctl_OpenSCManagerA *r);
-WERROR _svcctl_OpenServiceA(pipes_struct *p, struct svcctl_OpenServiceA *r);
-WERROR _svcctl_QueryServiceConfigA(pipes_struct *p, struct svcctl_QueryServiceConfigA *r);
-WERROR _svcctl_QueryServiceLockStatusA(pipes_struct *p, struct svcctl_QueryServiceLockStatusA *r);
-WERROR _svcctl_StartServiceA(pipes_struct *p, struct svcctl_StartServiceA *r);
-WERROR _svcctl_GetServiceDisplayNameA(pipes_struct *p, struct svcctl_GetServiceDisplayNameA *r);
-WERROR _svcctl_GetServiceKeyNameA(pipes_struct *p, struct svcctl_GetServiceKeyNameA *r);
-WERROR _svcctl_GetCurrentGroupeStateW(pipes_struct *p, struct svcctl_GetCurrentGroupeStateW *r);
-WERROR _svcctl_EnumServiceGroupW(pipes_struct *p, struct svcctl_EnumServiceGroupW *r);
-WERROR _svcctl_ChangeServiceConfig2A(pipes_struct *p, struct svcctl_ChangeServiceConfig2A *r);
-WERROR _svcctl_ChangeServiceConfig2W(pipes_struct *p, struct svcctl_ChangeServiceConfig2W *r);
-WERROR _svcctl_QueryServiceConfig2A(pipes_struct *p, struct svcctl_QueryServiceConfig2A *r);
-WERROR _svcctl_QueryServiceConfig2W(pipes_struct *p, struct svcctl_QueryServiceConfig2W *r);
-WERROR _svcctl_QueryServiceStatusEx(pipes_struct *p, struct svcctl_QueryServiceStatusEx *r);
-WERROR _EnumServicesStatusExA(pipes_struct *p, struct EnumServicesStatusExA *r);
-WERROR _EnumServicesStatusExW(pipes_struct *p, struct EnumServicesStatusExW *r);
-WERROR _svcctl_SCSendTSMessage(pipes_struct *p, struct svcctl_SCSendTSMessage *r);
-void svcctl_get_pipe_fns(struct api_struct **fns, int *n_fns);
-NTSTATUS rpc_svcctl_init(void);
-#endif /* __SRV_SVCCTL__ */

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_winreg.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_winreg.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_winreg.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,2772 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * server auto-generated by pidl. DO NOT MODIFY!
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/srv_winreg.h"
-
-static bool api_winreg_OpenHKCR(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_OpenHKCR *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_OPENHKCR];
-
-	r = talloc(talloc_tos(), struct winreg_OpenHKCR);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_OpenHKCR, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.handle = talloc_zero(r, struct policy_handle);
-	if (r->out.handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _winreg_OpenHKCR(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_OpenHKCR, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_OpenHKCU(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_OpenHKCU *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_OPENHKCU];
-
-	r = talloc(talloc_tos(), struct winreg_OpenHKCU);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_OpenHKCU, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.handle = talloc_zero(r, struct policy_handle);
-	if (r->out.handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _winreg_OpenHKCU(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_OpenHKCU, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_OpenHKLM(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_OpenHKLM *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_OPENHKLM];
-
-	r = talloc(talloc_tos(), struct winreg_OpenHKLM);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_OpenHKLM, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.handle = talloc_zero(r, struct policy_handle);
-	if (r->out.handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _winreg_OpenHKLM(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_OpenHKLM, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_OpenHKPD(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_OpenHKPD *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_OPENHKPD];
-
-	r = talloc(talloc_tos(), struct winreg_OpenHKPD);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_OpenHKPD, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.handle = talloc_zero(r, struct policy_handle);
-	if (r->out.handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _winreg_OpenHKPD(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_OpenHKPD, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_OpenHKU(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_OpenHKU *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_OPENHKU];
-
-	r = talloc(talloc_tos(), struct winreg_OpenHKU);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_OpenHKU, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.handle = talloc_zero(r, struct policy_handle);
-	if (r->out.handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _winreg_OpenHKU(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_OpenHKU, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_CloseKey(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_CloseKey *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_CLOSEKEY];
-
-	r = talloc(talloc_tos(), struct winreg_CloseKey);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_CloseKey, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.handle = r->in.handle;
-	r->out.result = _winreg_CloseKey(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_CloseKey, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_CreateKey(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_CreateKey *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_CREATEKEY];
-
-	r = talloc(talloc_tos(), struct winreg_CreateKey);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_CreateKey, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.new_handle = talloc_zero(r, struct policy_handle);
-	if (r->out.new_handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.action_taken = r->in.action_taken;
-	r->out.result = _winreg_CreateKey(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_CreateKey, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_DeleteKey(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_DeleteKey *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_DELETEKEY];
-
-	r = talloc(talloc_tos(), struct winreg_DeleteKey);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_DeleteKey, r);
-	}
-
-	r->out.result = _winreg_DeleteKey(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_DeleteKey, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_DeleteValue(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_DeleteValue *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_DELETEVALUE];
-
-	r = talloc(talloc_tos(), struct winreg_DeleteValue);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_DeleteValue, r);
-	}
-
-	r->out.result = _winreg_DeleteValue(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_DeleteValue, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_EnumKey(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_EnumKey *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_ENUMKEY];
-
-	r = talloc(talloc_tos(), struct winreg_EnumKey);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_EnumKey, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.name = r->in.name;
-	r->out.keyclass = r->in.keyclass;
-	r->out.last_changed_time = r->in.last_changed_time;
-	r->out.result = _winreg_EnumKey(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_EnumKey, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_EnumValue(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_EnumValue *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_ENUMVALUE];
-
-	r = talloc(talloc_tos(), struct winreg_EnumValue);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_EnumValue, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.name = r->in.name;
-	r->out.type = r->in.type;
-	r->out.value = r->in.value;
-	r->out.size = r->in.size;
-	r->out.length = r->in.length;
-	r->out.result = _winreg_EnumValue(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_EnumValue, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_FlushKey(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_FlushKey *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_FLUSHKEY];
-
-	r = talloc(talloc_tos(), struct winreg_FlushKey);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_FlushKey, r);
-	}
-
-	r->out.result = _winreg_FlushKey(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_FlushKey, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_GetKeySecurity(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_GetKeySecurity *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_GETKEYSECURITY];
-
-	r = talloc(talloc_tos(), struct winreg_GetKeySecurity);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_GetKeySecurity, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.sd = r->in.sd;
-	r->out.result = _winreg_GetKeySecurity(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_GetKeySecurity, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_LoadKey(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_LoadKey *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_LOADKEY];
-
-	r = talloc(talloc_tos(), struct winreg_LoadKey);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_LoadKey, r);
-	}
-
-	r->out.result = _winreg_LoadKey(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_LoadKey, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_NotifyChangeKeyValue(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_NotifyChangeKeyValue *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_NOTIFYCHANGEKEYVALUE];
-
-	r = talloc(talloc_tos(), struct winreg_NotifyChangeKeyValue);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_NotifyChangeKeyValue, r);
-	}
-
-	r->out.result = _winreg_NotifyChangeKeyValue(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_NotifyChangeKeyValue, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_OpenKey(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_OpenKey *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_OPENKEY];
-
-	r = talloc(talloc_tos(), struct winreg_OpenKey);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_OpenKey, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.handle = talloc_zero(r, struct policy_handle);
-	if (r->out.handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _winreg_OpenKey(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_OpenKey, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_QueryInfoKey(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_QueryInfoKey *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_QUERYINFOKEY];
-
-	r = talloc(talloc_tos(), struct winreg_QueryInfoKey);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_QueryInfoKey, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.classname = r->in.classname;
-	r->out.num_subkeys = talloc_zero(r, uint32_t);
-	if (r->out.num_subkeys == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.max_subkeylen = talloc_zero(r, uint32_t);
-	if (r->out.max_subkeylen == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.max_classlen = talloc_zero(r, uint32_t);
-	if (r->out.max_classlen == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.num_values = talloc_zero(r, uint32_t);
-	if (r->out.num_values == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.max_valnamelen = talloc_zero(r, uint32_t);
-	if (r->out.max_valnamelen == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.max_valbufsize = talloc_zero(r, uint32_t);
-	if (r->out.max_valbufsize == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.secdescsize = talloc_zero(r, uint32_t);
-	if (r->out.secdescsize == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.last_changed_time = talloc_zero(r, NTTIME);
-	if (r->out.last_changed_time == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _winreg_QueryInfoKey(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_QueryInfoKey, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_QueryValue(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_QueryValue *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_QUERYVALUE];
-
-	r = talloc(talloc_tos(), struct winreg_QueryValue);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_QueryValue, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.type = r->in.type;
-	r->out.data = r->in.data;
-	r->out.data_size = r->in.data_size;
-	r->out.value_length = r->in.value_length;
-	r->out.result = _winreg_QueryValue(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_QueryValue, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_ReplaceKey(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_ReplaceKey *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_REPLACEKEY];
-
-	r = talloc(talloc_tos(), struct winreg_ReplaceKey);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_ReplaceKey, r);
-	}
-
-	r->out.result = _winreg_ReplaceKey(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_ReplaceKey, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_RestoreKey(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_RestoreKey *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_RESTOREKEY];
-
-	r = talloc(talloc_tos(), struct winreg_RestoreKey);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_RestoreKey, r);
-	}
-
-	r->out.result = _winreg_RestoreKey(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_RestoreKey, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_SaveKey(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_SaveKey *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_SAVEKEY];
-
-	r = talloc(talloc_tos(), struct winreg_SaveKey);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_SaveKey, r);
-	}
-
-	r->out.result = _winreg_SaveKey(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_SaveKey, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_SetKeySecurity(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_SetKeySecurity *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_SETKEYSECURITY];
-
-	r = talloc(talloc_tos(), struct winreg_SetKeySecurity);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_SetKeySecurity, r);
-	}
-
-	r->out.result = _winreg_SetKeySecurity(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_SetKeySecurity, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_SetValue(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_SetValue *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_SETVALUE];
-
-	r = talloc(talloc_tos(), struct winreg_SetValue);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_SetValue, r);
-	}
-
-	r->out.result = _winreg_SetValue(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_SetValue, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_UnLoadKey(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_UnLoadKey *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_UNLOADKEY];
-
-	r = talloc(talloc_tos(), struct winreg_UnLoadKey);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_UnLoadKey, r);
-	}
-
-	r->out.result = _winreg_UnLoadKey(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_UnLoadKey, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_InitiateSystemShutdown(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_InitiateSystemShutdown *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_INITIATESYSTEMSHUTDOWN];
-
-	r = talloc(talloc_tos(), struct winreg_InitiateSystemShutdown);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_InitiateSystemShutdown, r);
-	}
-
-	r->out.result = _winreg_InitiateSystemShutdown(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_InitiateSystemShutdown, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_AbortSystemShutdown(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_AbortSystemShutdown *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_ABORTSYSTEMSHUTDOWN];
-
-	r = talloc(talloc_tos(), struct winreg_AbortSystemShutdown);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_AbortSystemShutdown, r);
-	}
-
-	r->out.result = _winreg_AbortSystemShutdown(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_AbortSystemShutdown, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_GetVersion(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_GetVersion *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_GETVERSION];
-
-	r = talloc(talloc_tos(), struct winreg_GetVersion);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_GetVersion, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.version = talloc_zero(r, uint32_t);
-	if (r->out.version == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _winreg_GetVersion(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_GetVersion, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_OpenHKCC(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_OpenHKCC *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_OPENHKCC];
-
-	r = talloc(talloc_tos(), struct winreg_OpenHKCC);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_OpenHKCC, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.handle = talloc_zero(r, struct policy_handle);
-	if (r->out.handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _winreg_OpenHKCC(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_OpenHKCC, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_OpenHKDD(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_OpenHKDD *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_OPENHKDD];
-
-	r = talloc(talloc_tos(), struct winreg_OpenHKDD);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_OpenHKDD, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.handle = talloc_zero(r, struct policy_handle);
-	if (r->out.handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _winreg_OpenHKDD(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_OpenHKDD, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_QueryMultipleValues(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_QueryMultipleValues *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_QUERYMULTIPLEVALUES];
-
-	r = talloc(talloc_tos(), struct winreg_QueryMultipleValues);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_QueryMultipleValues, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.values = r->in.values;
-	r->out.buffer = r->in.buffer;
-	r->out.buffer_size = r->in.buffer_size;
-	r->out.result = _winreg_QueryMultipleValues(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_QueryMultipleValues, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_InitiateSystemShutdownEx(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_InitiateSystemShutdownEx *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_INITIATESYSTEMSHUTDOWNEX];
-
-	r = talloc(talloc_tos(), struct winreg_InitiateSystemShutdownEx);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_InitiateSystemShutdownEx, r);
-	}
-
-	r->out.result = _winreg_InitiateSystemShutdownEx(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_InitiateSystemShutdownEx, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_SaveKeyEx(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_SaveKeyEx *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_SAVEKEYEX];
-
-	r = talloc(talloc_tos(), struct winreg_SaveKeyEx);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_SaveKeyEx, r);
-	}
-
-	r->out.result = _winreg_SaveKeyEx(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_SaveKeyEx, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_OpenHKPT(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_OpenHKPT *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_OPENHKPT];
-
-	r = talloc(talloc_tos(), struct winreg_OpenHKPT);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_OpenHKPT, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.handle = talloc_zero(r, struct policy_handle);
-	if (r->out.handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _winreg_OpenHKPT(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_OpenHKPT, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_OpenHKPN(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_OpenHKPN *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_OPENHKPN];
-
-	r = talloc(talloc_tos(), struct winreg_OpenHKPN);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_OpenHKPN, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.handle = talloc_zero(r, struct policy_handle);
-	if (r->out.handle == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _winreg_OpenHKPN(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_OpenHKPN, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-static bool api_winreg_QueryMultipleValues2(pipes_struct *p)
-{
-	const struct ndr_interface_call *call;
-	struct ndr_pull *pull;
-	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct winreg_QueryMultipleValues2 *r;
-
-	call = &ndr_table_winreg.calls[NDR_WINREG_QUERYMULTIPLEVALUES2];
-
-	r = talloc(talloc_tos(), struct winreg_QueryMultipleValues2);
-	if (r == NULL) {
-		return false;
-	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
-	if (pull == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(winreg_QueryMultipleValues2, r);
-	}
-
-	r->out.result = _winreg_QueryMultipleValues2(p, r);
-
-	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(winreg_QueryMultipleValues2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
-	if (push == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
-	}
-
-	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
-	}
-
-	talloc_free(r);
-
-	return true;
-}
-
-
-/* Tables */
-static struct api_struct api_winreg_cmds[] = 
-{
-	{"WINREG_OPENHKCR", NDR_WINREG_OPENHKCR, api_winreg_OpenHKCR},
-	{"WINREG_OPENHKCU", NDR_WINREG_OPENHKCU, api_winreg_OpenHKCU},
-	{"WINREG_OPENHKLM", NDR_WINREG_OPENHKLM, api_winreg_OpenHKLM},
-	{"WINREG_OPENHKPD", NDR_WINREG_OPENHKPD, api_winreg_OpenHKPD},
-	{"WINREG_OPENHKU", NDR_WINREG_OPENHKU, api_winreg_OpenHKU},
-	{"WINREG_CLOSEKEY", NDR_WINREG_CLOSEKEY, api_winreg_CloseKey},
-	{"WINREG_CREATEKEY", NDR_WINREG_CREATEKEY, api_winreg_CreateKey},
-	{"WINREG_DELETEKEY", NDR_WINREG_DELETEKEY, api_winreg_DeleteKey},
-	{"WINREG_DELETEVALUE", NDR_WINREG_DELETEVALUE, api_winreg_DeleteValue},
-	{"WINREG_ENUMKEY", NDR_WINREG_ENUMKEY, api_winreg_EnumKey},
-	{"WINREG_ENUMVALUE", NDR_WINREG_ENUMVALUE, api_winreg_EnumValue},
-	{"WINREG_FLUSHKEY", NDR_WINREG_FLUSHKEY, api_winreg_FlushKey},
-	{"WINREG_GETKEYSECURITY", NDR_WINREG_GETKEYSECURITY, api_winreg_GetKeySecurity},
-	{"WINREG_LOADKEY", NDR_WINREG_LOADKEY, api_winreg_LoadKey},
-	{"WINREG_NOTIFYCHANGEKEYVALUE", NDR_WINREG_NOTIFYCHANGEKEYVALUE, api_winreg_NotifyChangeKeyValue},
-	{"WINREG_OPENKEY", NDR_WINREG_OPENKEY, api_winreg_OpenKey},
-	{"WINREG_QUERYINFOKEY", NDR_WINREG_QUERYINFOKEY, api_winreg_QueryInfoKey},
-	{"WINREG_QUERYVALUE", NDR_WINREG_QUERYVALUE, api_winreg_QueryValue},
-	{"WINREG_REPLACEKEY", NDR_WINREG_REPLACEKEY, api_winreg_ReplaceKey},
-	{"WINREG_RESTOREKEY", NDR_WINREG_RESTOREKEY, api_winreg_RestoreKey},
-	{"WINREG_SAVEKEY", NDR_WINREG_SAVEKEY, api_winreg_SaveKey},
-	{"WINREG_SETKEYSECURITY", NDR_WINREG_SETKEYSECURITY, api_winreg_SetKeySecurity},
-	{"WINREG_SETVALUE", NDR_WINREG_SETVALUE, api_winreg_SetValue},
-	{"WINREG_UNLOADKEY", NDR_WINREG_UNLOADKEY, api_winreg_UnLoadKey},
-	{"WINREG_INITIATESYSTEMSHUTDOWN", NDR_WINREG_INITIATESYSTEMSHUTDOWN, api_winreg_InitiateSystemShutdown},
-	{"WINREG_ABORTSYSTEMSHUTDOWN", NDR_WINREG_ABORTSYSTEMSHUTDOWN, api_winreg_AbortSystemShutdown},
-	{"WINREG_GETVERSION", NDR_WINREG_GETVERSION, api_winreg_GetVersion},
-	{"WINREG_OPENHKCC", NDR_WINREG_OPENHKCC, api_winreg_OpenHKCC},
-	{"WINREG_OPENHKDD", NDR_WINREG_OPENHKDD, api_winreg_OpenHKDD},
-	{"WINREG_QUERYMULTIPLEVALUES", NDR_WINREG_QUERYMULTIPLEVALUES, api_winreg_QueryMultipleValues},
-	{"WINREG_INITIATESYSTEMSHUTDOWNEX", NDR_WINREG_INITIATESYSTEMSHUTDOWNEX, api_winreg_InitiateSystemShutdownEx},
-	{"WINREG_SAVEKEYEX", NDR_WINREG_SAVEKEYEX, api_winreg_SaveKeyEx},
-	{"WINREG_OPENHKPT", NDR_WINREG_OPENHKPT, api_winreg_OpenHKPT},
-	{"WINREG_OPENHKPN", NDR_WINREG_OPENHKPN, api_winreg_OpenHKPN},
-	{"WINREG_QUERYMULTIPLEVALUES2", NDR_WINREG_QUERYMULTIPLEVALUES2, api_winreg_QueryMultipleValues2},
-};
-
-void winreg_get_pipe_fns(struct api_struct **fns, int *n_fns)
-{
-	*fns = api_winreg_cmds;
-	*n_fns = sizeof(api_winreg_cmds) / sizeof(struct api_struct);
-}
-
-NTSTATUS rpc_winreg_init(void)
-{
-	return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "winreg", "winreg", api_winreg_cmds, sizeof(api_winreg_cmds) / sizeof(struct api_struct));
-}

Deleted: branches/samba/upstream/source/librpc/gen_ndr/srv_winreg.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_winreg.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_winreg.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,41 +0,0 @@
-#include "librpc/gen_ndr/ndr_winreg.h"
-#ifndef __SRV_WINREG__
-#define __SRV_WINREG__
-WERROR _winreg_OpenHKCR(pipes_struct *p, struct winreg_OpenHKCR *r);
-WERROR _winreg_OpenHKCU(pipes_struct *p, struct winreg_OpenHKCU *r);
-WERROR _winreg_OpenHKLM(pipes_struct *p, struct winreg_OpenHKLM *r);
-WERROR _winreg_OpenHKPD(pipes_struct *p, struct winreg_OpenHKPD *r);
-WERROR _winreg_OpenHKU(pipes_struct *p, struct winreg_OpenHKU *r);
-WERROR _winreg_CloseKey(pipes_struct *p, struct winreg_CloseKey *r);
-WERROR _winreg_CreateKey(pipes_struct *p, struct winreg_CreateKey *r);
-WERROR _winreg_DeleteKey(pipes_struct *p, struct winreg_DeleteKey *r);
-WERROR _winreg_DeleteValue(pipes_struct *p, struct winreg_DeleteValue *r);
-WERROR _winreg_EnumKey(pipes_struct *p, struct winreg_EnumKey *r);
-WERROR _winreg_EnumValue(pipes_struct *p, struct winreg_EnumValue *r);
-WERROR _winreg_FlushKey(pipes_struct *p, struct winreg_FlushKey *r);
-WERROR _winreg_GetKeySecurity(pipes_struct *p, struct winreg_GetKeySecurity *r);
-WERROR _winreg_LoadKey(pipes_struct *p, struct winreg_LoadKey *r);
-WERROR _winreg_NotifyChangeKeyValue(pipes_struct *p, struct winreg_NotifyChangeKeyValue *r);
-WERROR _winreg_OpenKey(pipes_struct *p, struct winreg_OpenKey *r);
-WERROR _winreg_QueryInfoKey(pipes_struct *p, struct winreg_QueryInfoKey *r);
-WERROR _winreg_QueryValue(pipes_struct *p, struct winreg_QueryValue *r);
-WERROR _winreg_ReplaceKey(pipes_struct *p, struct winreg_ReplaceKey *r);
-WERROR _winreg_RestoreKey(pipes_struct *p, struct winreg_RestoreKey *r);
-WERROR _winreg_SaveKey(pipes_struct *p, struct winreg_SaveKey *r);
-WERROR _winreg_SetKeySecurity(pipes_struct *p, struct winreg_SetKeySecurity *r);
-WERROR _winreg_SetValue(pipes_struct *p, struct winreg_SetValue *r);
-WERROR _winreg_UnLoadKey(pipes_struct *p, struct winreg_UnLoadKey *r);
-WERROR _winreg_InitiateSystemShutdown(pipes_struct *p, struct winreg_InitiateSystemShutdown *r);
-WERROR _winreg_AbortSystemShutdown(pipes_struct *p, struct winreg_AbortSystemShutdown *r);
-WERROR _winreg_GetVersion(pipes_struct *p, struct winreg_GetVersion *r);
-WERROR _winreg_OpenHKCC(pipes_struct *p, struct winreg_OpenHKCC *r);
-WERROR _winreg_OpenHKDD(pipes_struct *p, struct winreg_OpenHKDD *r);
-WERROR _winreg_QueryMultipleValues(pipes_struct *p, struct winreg_QueryMultipleValues *r);
-WERROR _winreg_InitiateSystemShutdownEx(pipes_struct *p, struct winreg_InitiateSystemShutdownEx *r);
-WERROR _winreg_SaveKeyEx(pipes_struct *p, struct winreg_SaveKeyEx *r);
-WERROR _winreg_OpenHKPT(pipes_struct *p, struct winreg_OpenHKPT *r);
-WERROR _winreg_OpenHKPN(pipes_struct *p, struct winreg_OpenHKPN *r);
-WERROR _winreg_QueryMultipleValues2(pipes_struct *p, struct winreg_QueryMultipleValues2 *r);
-void winreg_get_pipe_fns(struct api_struct **fns, int *n_fns);
-NTSTATUS rpc_winreg_init(void);
-#endif /* __SRV_WINREG__ */

Modified: branches/samba/upstream/source/librpc/gen_ndr/srv_wkssvc.c
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_wkssvc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_wkssvc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,2398 +6,2059 @@
 #include "includes.h"
 #include "librpc/gen_ndr/srv_wkssvc.h"
 
-static bool api_wkssvc_NetWkstaGetInfo(pipes_struct *p)
+static BOOL api_wkssvc_NetWkstaGetInfo(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetWkstaGetInfo *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETWKSTAGETINFO];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetWkstaGetInfo);
-	if (r == NULL) {
-		return false;
+	struct wkssvc_NetWkstaGetInfo r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_wkssvc_NetWkstaGetInfo");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_wkssvc_NetWkstaGetInfo(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetWkstaGetInfo, r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(wkssvc_NetWkstaGetInfo, &r);
+	
+	ZERO_STRUCT(r.out);
+	r.out.info = talloc_zero(mem_ctx, union wkssvc_NetWkstaInfo);
+	if (r.out.info == NULL) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, union wkssvc_NetWkstaInfo);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _wkssvc_NetWkstaGetInfo(p, r);
-
+	
+	r.out.result = _wkssvc_NetWkstaGetInfo(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetWkstaGetInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(wkssvc_NetWkstaGetInfo, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_wkssvc_NetWkstaGetInfo(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetWkstaSetInfo(pipes_struct *p)
+static BOOL api_wkssvc_NetWkstaSetInfo(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetWkstaSetInfo *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETWKSTASETINFO];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetWkstaSetInfo);
-	if (r == NULL) {
-		return false;
+	struct wkssvc_NetWkstaSetInfo r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_wkssvc_NetWkstaSetInfo");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_wkssvc_NetWkstaSetInfo(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetWkstaSetInfo, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.parm_error = r->in.parm_error;
-	r->out.result = _wkssvc_NetWkstaSetInfo(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(wkssvc_NetWkstaSetInfo, &r);
+	
+	ZERO_STRUCT(r.out);
+	r.out.parm_error = r.in.parm_error;
+	r.out.result = _wkssvc_NetWkstaSetInfo(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetWkstaSetInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(wkssvc_NetWkstaSetInfo, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_wkssvc_NetWkstaSetInfo(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetWkstaEnumUsers(pipes_struct *p)
+static BOOL api_wkssvc_NetWkstaEnumUsers(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetWkstaEnumUsers *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETWKSTAENUMUSERS];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetWkstaEnumUsers);
-	if (r == NULL) {
-		return false;
+	struct wkssvc_NetWkstaEnumUsers r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_wkssvc_NetWkstaEnumUsers");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_wkssvc_NetWkstaEnumUsers(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetWkstaEnumUsers, r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(wkssvc_NetWkstaEnumUsers, &r);
+	
+	ZERO_STRUCT(r.out);
+	r.out.users = r.in.users;
+	r.out.entriesread = talloc_zero(mem_ctx, uint32_t);
+	if (r.out.entriesread == NULL) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = r->in.info;
-	r->out.entries_read = talloc_zero(r, uint32_t);
-	if (r->out.entries_read == NULL) {
-		talloc_free(r);
-		return false;
+	
+	r.out.totalentries = talloc_zero(mem_ctx, uint32_t);
+	if (r.out.totalentries == NULL) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	r->out.resume_handle = r->in.resume_handle;
-	r->out.result = _wkssvc_NetWkstaEnumUsers(p, r);
-
+	
+	r.out.resumehandle = r.in.resumehandle;
+	r.out.result = _wkssvc_NetWkstaEnumUsers(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetWkstaEnumUsers, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(wkssvc_NetWkstaEnumUsers, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_wkssvc_NetWkstaEnumUsers(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrWkstaUserGetInfo(pipes_struct *p)
+static BOOL api_WKSSVC_NETRWKSTAUSERGETINFO(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrWkstaUserGetInfo *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRWKSTAUSERGETINFO];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrWkstaUserGetInfo);
-	if (r == NULL) {
-		return false;
+	struct WKSSVC_NETRWKSTAUSERGETINFO r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_WKSSVC_NETRWKSTAUSERGETINFO");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_WKSSVC_NETRWKSTAUSERGETINFO(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrWkstaUserGetInfo, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, union wkssvc_NetrWkstaUserInfo);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _wkssvc_NetrWkstaUserGetInfo(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRWKSTAUSERGETINFO, &r);
+	
+	r.out.result = _WKSSVC_NETRWKSTAUSERGETINFO(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrWkstaUserGetInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRWKSTAUSERGETINFO, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_WKSSVC_NETRWKSTAUSERGETINFO(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrWkstaUserSetInfo(pipes_struct *p)
+static BOOL api_WKSSVC_NETRWKSTAUSERSETINFO(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrWkstaUserSetInfo *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRWKSTAUSERSETINFO];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrWkstaUserSetInfo);
-	if (r == NULL) {
-		return false;
+	struct WKSSVC_NETRWKSTAUSERSETINFO r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_WKSSVC_NETRWKSTAUSERSETINFO");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_WKSSVC_NETRWKSTAUSERSETINFO(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrWkstaUserSetInfo, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.parm_err = r->in.parm_err;
-	r->out.result = _wkssvc_NetrWkstaUserSetInfo(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRWKSTAUSERSETINFO, &r);
+	
+	r.out.result = _WKSSVC_NETRWKSTAUSERSETINFO(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrWkstaUserSetInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRWKSTAUSERSETINFO, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_WKSSVC_NETRWKSTAUSERSETINFO(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetWkstaTransportEnum(pipes_struct *p)
+static BOOL api_wkssvc_NetWkstaTransportEnum(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetWkstaTransportEnum *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETWKSTATRANSPORTENUM];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetWkstaTransportEnum);
-	if (r == NULL) {
-		return false;
+	struct wkssvc_NetWkstaTransportEnum r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_wkssvc_NetWkstaTransportEnum");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_wkssvc_NetWkstaTransportEnum(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetWkstaTransportEnum, r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(wkssvc_NetWkstaTransportEnum, &r);
+	
+	ZERO_STRUCT(r.out);
+	r.out.level = r.in.level;
+	r.out.ctr = r.in.ctr;
+	r.out.totalentries = talloc_zero(mem_ctx, uint32_t);
+	if (r.out.totalentries == NULL) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = r->in.info;
-	r->out.total_entries = talloc_zero(r, uint32_t);
-	if (r->out.total_entries == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.resume_handle = r->in.resume_handle;
-	r->out.result = _wkssvc_NetWkstaTransportEnum(p, r);
-
+	
+	r.out.resume_handle = r.in.resume_handle;
+	r.out.result = _wkssvc_NetWkstaTransportEnum(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetWkstaTransportEnum, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(wkssvc_NetWkstaTransportEnum, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_wkssvc_NetWkstaTransportEnum(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrWkstaTransportAdd(pipes_struct *p)
+static BOOL api_WKSSVC_NETRWKSTATRANSPORTADD(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrWkstaTransportAdd *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRWKSTATRANSPORTADD];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrWkstaTransportAdd);
-	if (r == NULL) {
-		return false;
+	struct WKSSVC_NETRWKSTATRANSPORTADD r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_WKSSVC_NETRWKSTATRANSPORTADD");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_WKSSVC_NETRWKSTATRANSPORTADD(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrWkstaTransportAdd, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.parm_err = r->in.parm_err;
-	r->out.result = _wkssvc_NetrWkstaTransportAdd(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRWKSTATRANSPORTADD, &r);
+	
+	r.out.result = _WKSSVC_NETRWKSTATRANSPORTADD(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrWkstaTransportAdd, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRWKSTATRANSPORTADD, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_WKSSVC_NETRWKSTATRANSPORTADD(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrWkstaTransportDel(pipes_struct *p)
+static BOOL api_WKSSVC_NETRWKSTATRANSPORTDEL(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrWkstaTransportDel *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRWKSTATRANSPORTDEL];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrWkstaTransportDel);
-	if (r == NULL) {
-		return false;
+	struct WKSSVC_NETRWKSTATRANSPORTDEL r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_WKSSVC_NETRWKSTATRANSPORTDEL");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_WKSSVC_NETRWKSTATRANSPORTDEL(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrWkstaTransportDel, r);
-	}
-
-	r->out.result = _wkssvc_NetrWkstaTransportDel(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRWKSTATRANSPORTDEL, &r);
+	
+	r.out.result = _WKSSVC_NETRWKSTATRANSPORTDEL(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrWkstaTransportDel, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRWKSTATRANSPORTDEL, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_WKSSVC_NETRWKSTATRANSPORTDEL(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrUseAdd(pipes_struct *p)
+static BOOL api_WKSSVC_NETRUSEADD(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrUseAdd *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRUSEADD];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrUseAdd);
-	if (r == NULL) {
-		return false;
+	struct WKSSVC_NETRUSEADD r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_WKSSVC_NETRUSEADD");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_WKSSVC_NETRUSEADD(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrUseAdd, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.parm_err = r->in.parm_err;
-	r->out.result = _wkssvc_NetrUseAdd(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRUSEADD, &r);
+	
+	r.out.result = _WKSSVC_NETRUSEADD(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrUseAdd, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRUSEADD, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_WKSSVC_NETRUSEADD(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrUseGetInfo(pipes_struct *p)
+static BOOL api_WKSSVC_NETRUSEGETINFO(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrUseGetInfo *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRUSEGETINFO];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrUseGetInfo);
-	if (r == NULL) {
-		return false;
+	struct WKSSVC_NETRUSEGETINFO r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_WKSSVC_NETRUSEGETINFO");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_WKSSVC_NETRUSEGETINFO(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrUseGetInfo, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.ctr = talloc_zero(r, union wkssvc_NetrUseGetInfoCtr);
-	if (r->out.ctr == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _wkssvc_NetrUseGetInfo(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRUSEGETINFO, &r);
+	
+	r.out.result = _WKSSVC_NETRUSEGETINFO(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrUseGetInfo, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRUSEGETINFO, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_WKSSVC_NETRUSEGETINFO(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrUseDel(pipes_struct *p)
+static BOOL api_WKSSVC_NETRUSEDEL(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrUseDel *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRUSEDEL];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrUseDel);
-	if (r == NULL) {
-		return false;
+	struct WKSSVC_NETRUSEDEL r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_WKSSVC_NETRUSEDEL");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_WKSSVC_NETRUSEDEL(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrUseDel, r);
-	}
-
-	r->out.result = _wkssvc_NetrUseDel(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRUSEDEL, &r);
+	
+	r.out.result = _WKSSVC_NETRUSEDEL(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrUseDel, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRUSEDEL, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_WKSSVC_NETRUSEDEL(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrUseEnum(pipes_struct *p)
+static BOOL api_WKSSVC_NETRUSEENUM(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrUseEnum *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRUSEENUM];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrUseEnum);
-	if (r == NULL) {
-		return false;
+	struct WKSSVC_NETRUSEENUM r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_WKSSVC_NETRUSEENUM");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_WKSSVC_NETRUSEENUM(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrUseEnum, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = r->in.info;
-	r->out.entries_read = talloc_zero(r, uint32_t);
-	if (r->out.entries_read == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.resume_handle = r->in.resume_handle;
-	r->out.result = _wkssvc_NetrUseEnum(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRUSEENUM, &r);
+	
+	r.out.result = _WKSSVC_NETRUSEENUM(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrUseEnum, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRUSEENUM, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_WKSSVC_NETRUSEENUM(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrMessageBufferSend(pipes_struct *p)
+static BOOL api_WKSSVC_NETRMESSAGEBUFFERSEND(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrMessageBufferSend *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRMESSAGEBUFFERSEND];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrMessageBufferSend);
-	if (r == NULL) {
-		return false;
+	struct WKSSVC_NETRMESSAGEBUFFERSEND r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_WKSSVC_NETRMESSAGEBUFFERSEND");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_WKSSVC_NETRMESSAGEBUFFERSEND(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrMessageBufferSend, r);
-	}
-
-	r->out.result = _wkssvc_NetrMessageBufferSend(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRMESSAGEBUFFERSEND, &r);
+	
+	r.out.result = _WKSSVC_NETRMESSAGEBUFFERSEND(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrMessageBufferSend, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRMESSAGEBUFFERSEND, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_WKSSVC_NETRMESSAGEBUFFERSEND(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrWorkstationStatisticsGet(pipes_struct *p)
+static BOOL api_WKSSVC_NETRWORKSTATIONSTATISTICSGET(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrWorkstationStatisticsGet *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRWORKSTATIONSTATISTICSGET];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrWorkstationStatisticsGet);
-	if (r == NULL) {
-		return false;
+	struct WKSSVC_NETRWORKSTATIONSTATISTICSGET r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_WKSSVC_NETRWORKSTATIONSTATISTICSGET");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_WKSSVC_NETRWORKSTATIONSTATISTICSGET(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrWorkstationStatisticsGet, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.info = talloc_zero(r, struct wkssvc_NetrWorkstationStatistics *);
-	if (r->out.info == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _wkssvc_NetrWorkstationStatisticsGet(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRWORKSTATIONSTATISTICSGET, &r);
+	
+	r.out.result = _WKSSVC_NETRWORKSTATIONSTATISTICSGET(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrWorkstationStatisticsGet, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRWORKSTATIONSTATISTICSGET, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_WKSSVC_NETRWORKSTATIONSTATISTICSGET(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrLogonDomainNameAdd(pipes_struct *p)
+static BOOL api_WKSSVC_NETRLOGONDOMAINNAMEADD(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrLogonDomainNameAdd *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRLOGONDOMAINNAMEADD];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrLogonDomainNameAdd);
-	if (r == NULL) {
-		return false;
+	struct WKSSVC_NETRLOGONDOMAINNAMEADD r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_WKSSVC_NETRLOGONDOMAINNAMEADD");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_WKSSVC_NETRLOGONDOMAINNAMEADD(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrLogonDomainNameAdd, r);
-	}
-
-	r->out.result = _wkssvc_NetrLogonDomainNameAdd(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRLOGONDOMAINNAMEADD, &r);
+	
+	r.out.result = _WKSSVC_NETRLOGONDOMAINNAMEADD(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrLogonDomainNameAdd, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRLOGONDOMAINNAMEADD, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_WKSSVC_NETRLOGONDOMAINNAMEADD(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrLogonDomainNameDel(pipes_struct *p)
+static BOOL api_WKSSVC_NETRLOGONDOMAINNAMEDEL(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrLogonDomainNameDel *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRLOGONDOMAINNAMEDEL];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrLogonDomainNameDel);
-	if (r == NULL) {
-		return false;
+	struct WKSSVC_NETRLOGONDOMAINNAMEDEL r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_WKSSVC_NETRLOGONDOMAINNAMEDEL");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_WKSSVC_NETRLOGONDOMAINNAMEDEL(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrLogonDomainNameDel, r);
-	}
-
-	r->out.result = _wkssvc_NetrLogonDomainNameDel(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRLOGONDOMAINNAMEDEL, &r);
+	
+	r.out.result = _WKSSVC_NETRLOGONDOMAINNAMEDEL(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrLogonDomainNameDel, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRLOGONDOMAINNAMEDEL, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_WKSSVC_NETRLOGONDOMAINNAMEDEL(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrJoinDomain(pipes_struct *p)
+static BOOL api_WKSSVC_NETRJOINDOMAIN(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrJoinDomain *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRJOINDOMAIN];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrJoinDomain);
-	if (r == NULL) {
-		return false;
+	struct WKSSVC_NETRJOINDOMAIN r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_WKSSVC_NETRJOINDOMAIN");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_WKSSVC_NETRJOINDOMAIN(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrJoinDomain, r);
-	}
-
-	r->out.result = _wkssvc_NetrJoinDomain(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRJOINDOMAIN, &r);
+	
+	r.out.result = _WKSSVC_NETRJOINDOMAIN(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrJoinDomain, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRJOINDOMAIN, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_WKSSVC_NETRJOINDOMAIN(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrUnjoinDomain(pipes_struct *p)
+static BOOL api_WKSSVC_NETRUNJOINDOMAIN(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrUnjoinDomain *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRUNJOINDOMAIN];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrUnjoinDomain);
-	if (r == NULL) {
-		return false;
+	struct WKSSVC_NETRUNJOINDOMAIN r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_WKSSVC_NETRUNJOINDOMAIN");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_WKSSVC_NETRUNJOINDOMAIN(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrUnjoinDomain, r);
-	}
-
-	r->out.result = _wkssvc_NetrUnjoinDomain(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRUNJOINDOMAIN, &r);
+	
+	r.out.result = _WKSSVC_NETRUNJOINDOMAIN(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrUnjoinDomain, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRUNJOINDOMAIN, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_WKSSVC_NETRUNJOINDOMAIN(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrRenameMachineInDomain(pipes_struct *p)
+static BOOL api_WKSSVC_NETRRENAMEMACHINEINDOMAIN(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrRenameMachineInDomain *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRRENAMEMACHINEINDOMAIN];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrRenameMachineInDomain);
-	if (r == NULL) {
-		return false;
+	struct WKSSVC_NETRRENAMEMACHINEINDOMAIN r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_WKSSVC_NETRRENAMEMACHINEINDOMAIN");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_WKSSVC_NETRRENAMEMACHINEINDOMAIN(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrRenameMachineInDomain, r);
-	}
-
-	r->out.result = _wkssvc_NetrRenameMachineInDomain(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRRENAMEMACHINEINDOMAIN, &r);
+	
+	r.out.result = _WKSSVC_NETRRENAMEMACHINEINDOMAIN(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrRenameMachineInDomain, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRRENAMEMACHINEINDOMAIN, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_WKSSVC_NETRRENAMEMACHINEINDOMAIN(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrValidateName(pipes_struct *p)
+static BOOL api_WKSSVC_NETRVALIDATENAME(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrValidateName *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRVALIDATENAME];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrValidateName);
-	if (r == NULL) {
-		return false;
+	struct WKSSVC_NETRVALIDATENAME r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_WKSSVC_NETRVALIDATENAME");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_WKSSVC_NETRVALIDATENAME(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrValidateName, r);
-	}
-
-	r->out.result = _wkssvc_NetrValidateName(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRVALIDATENAME, &r);
+	
+	r.out.result = _WKSSVC_NETRVALIDATENAME(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrValidateName, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRVALIDATENAME, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_WKSSVC_NETRVALIDATENAME(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrGetJoinInformation(pipes_struct *p)
+static BOOL api_WKSSVC_NETRGETJOININFORMATION(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrGetJoinInformation *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRGETJOININFORMATION];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrGetJoinInformation);
-	if (r == NULL) {
-		return false;
+	struct WKSSVC_NETRGETJOININFORMATION r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_WKSSVC_NETRGETJOININFORMATION");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_WKSSVC_NETRGETJOININFORMATION(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrGetJoinInformation, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.name_buffer = r->in.name_buffer;
-	r->out.name_type = talloc_zero(r, enum wkssvc_NetJoinStatus);
-	if (r->out.name_type == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _wkssvc_NetrGetJoinInformation(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRGETJOININFORMATION, &r);
+	
+	r.out.result = _WKSSVC_NETRGETJOININFORMATION(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrGetJoinInformation, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRGETJOININFORMATION, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_WKSSVC_NETRGETJOININFORMATION(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrGetJoinableOus(pipes_struct *p)
+static BOOL api_WKSSVC_NETRGETJOINABLEOUS(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrGetJoinableOus *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRGETJOINABLEOUS];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrGetJoinableOus);
-	if (r == NULL) {
-		return false;
+	struct WKSSVC_NETRGETJOINABLEOUS r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_WKSSVC_NETRGETJOINABLEOUS");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_WKSSVC_NETRGETJOINABLEOUS(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrGetJoinableOus, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.num_ous = r->in.num_ous;
-	r->out.ous = talloc_zero(r, const char **);
-	if (r->out.ous == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _wkssvc_NetrGetJoinableOus(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRGETJOINABLEOUS, &r);
+	
+	r.out.result = _WKSSVC_NETRGETJOINABLEOUS(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrGetJoinableOus, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRGETJOINABLEOUS, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_WKSSVC_NETRGETJOINABLEOUS(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrJoinDomain2(pipes_struct *p)
+static BOOL api_wkssvc_NetrJoinDomain2(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrJoinDomain2 *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRJOINDOMAIN2];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrJoinDomain2);
-	if (r == NULL) {
-		return false;
+	struct wkssvc_NetrJoinDomain2 r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_wkssvc_NetrJoinDomain2");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_wkssvc_NetrJoinDomain2(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrJoinDomain2, r);
-	}
-
-	r->out.result = _wkssvc_NetrJoinDomain2(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(wkssvc_NetrJoinDomain2, &r);
+	
+	r.out.result = _wkssvc_NetrJoinDomain2(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrJoinDomain2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(wkssvc_NetrJoinDomain2, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_wkssvc_NetrJoinDomain2(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrUnjoinDomain2(pipes_struct *p)
+static BOOL api_wkssvc_NetrUnjoinDomain2(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrUnjoinDomain2 *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRUNJOINDOMAIN2];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrUnjoinDomain2);
-	if (r == NULL) {
-		return false;
+	struct wkssvc_NetrUnjoinDomain2 r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_wkssvc_NetrUnjoinDomain2");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_wkssvc_NetrUnjoinDomain2(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrUnjoinDomain2, r);
-	}
-
-	r->out.result = _wkssvc_NetrUnjoinDomain2(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(wkssvc_NetrUnjoinDomain2, &r);
+	
+	r.out.result = _wkssvc_NetrUnjoinDomain2(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrUnjoinDomain2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(wkssvc_NetrUnjoinDomain2, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_wkssvc_NetrUnjoinDomain2(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrRenameMachineInDomain2(pipes_struct *p)
+static BOOL api_wkssvc_NetrRenameMachineInDomain2(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrRenameMachineInDomain2 *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRRENAMEMACHINEINDOMAIN2];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrRenameMachineInDomain2);
-	if (r == NULL) {
-		return false;
+	struct wkssvc_NetrRenameMachineInDomain2 r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_wkssvc_NetrRenameMachineInDomain2");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_wkssvc_NetrRenameMachineInDomain2(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrRenameMachineInDomain2, r);
-	}
-
-	r->out.result = _wkssvc_NetrRenameMachineInDomain2(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(wkssvc_NetrRenameMachineInDomain2, &r);
+	
+	r.out.result = _wkssvc_NetrRenameMachineInDomain2(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrRenameMachineInDomain2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(wkssvc_NetrRenameMachineInDomain2, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_wkssvc_NetrRenameMachineInDomain2(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrValidateName2(pipes_struct *p)
+static BOOL api_WKSSVC_NETRVALIDATENAME2(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrValidateName2 *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRVALIDATENAME2];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrValidateName2);
-	if (r == NULL) {
-		return false;
+	struct WKSSVC_NETRVALIDATENAME2 r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_WKSSVC_NETRVALIDATENAME2");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_WKSSVC_NETRVALIDATENAME2(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrValidateName2, r);
-	}
-
-	r->out.result = _wkssvc_NetrValidateName2(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRVALIDATENAME2, &r);
+	
+	r.out.result = _WKSSVC_NETRVALIDATENAME2(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrValidateName2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRVALIDATENAME2, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_WKSSVC_NETRVALIDATENAME2(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrGetJoinableOus2(pipes_struct *p)
+static BOOL api_WKSSVC_NETRGETJOINABLEOUS2(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrGetJoinableOus2 *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRGETJOINABLEOUS2];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrGetJoinableOus2);
-	if (r == NULL) {
-		return false;
+	struct WKSSVC_NETRGETJOINABLEOUS2 r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_WKSSVC_NETRGETJOINABLEOUS2");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_WKSSVC_NETRGETJOINABLEOUS2(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrGetJoinableOus2, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.num_ous = r->in.num_ous;
-	r->out.ous = talloc_zero(r, const char **);
-	if (r->out.ous == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _wkssvc_NetrGetJoinableOus2(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRGETJOINABLEOUS2, &r);
+	
+	r.out.result = _WKSSVC_NETRGETJOINABLEOUS2(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrGetJoinableOus2, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRGETJOINABLEOUS2, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_WKSSVC_NETRGETJOINABLEOUS2(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrAddAlternateComputerName(pipes_struct *p)
+static BOOL api_wkssvc_NetrAddAlternateComputerName(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrAddAlternateComputerName *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRADDALTERNATECOMPUTERNAME];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrAddAlternateComputerName);
-	if (r == NULL) {
-		return false;
+	struct wkssvc_NetrAddAlternateComputerName r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_wkssvc_NetrAddAlternateComputerName");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_wkssvc_NetrAddAlternateComputerName(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrAddAlternateComputerName, r);
-	}
-
-	r->out.result = _wkssvc_NetrAddAlternateComputerName(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(wkssvc_NetrAddAlternateComputerName, &r);
+	
+	r.out.result = _wkssvc_NetrAddAlternateComputerName(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrAddAlternateComputerName, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(wkssvc_NetrAddAlternateComputerName, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_wkssvc_NetrAddAlternateComputerName(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrRemoveAlternateComputerName(pipes_struct *p)
+static BOOL api_wkssvc_NetrRemoveAlternateComputerName(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrRemoveAlternateComputerName *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRREMOVEALTERNATECOMPUTERNAME];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrRemoveAlternateComputerName);
-	if (r == NULL) {
-		return false;
+	struct wkssvc_NetrRemoveAlternateComputerName r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_wkssvc_NetrRemoveAlternateComputerName");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_wkssvc_NetrRemoveAlternateComputerName(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrRemoveAlternateComputerName, r);
-	}
-
-	r->out.result = _wkssvc_NetrRemoveAlternateComputerName(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(wkssvc_NetrRemoveAlternateComputerName, &r);
+	
+	r.out.result = _wkssvc_NetrRemoveAlternateComputerName(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrRemoveAlternateComputerName, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(wkssvc_NetrRemoveAlternateComputerName, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_wkssvc_NetrRemoveAlternateComputerName(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrSetPrimaryComputername(pipes_struct *p)
+static BOOL api_WKSSVC_NETRSETPRIMARYCOMPUTERNAME(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrSetPrimaryComputername *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRSETPRIMARYCOMPUTERNAME];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrSetPrimaryComputername);
-	if (r == NULL) {
-		return false;
+	struct WKSSVC_NETRSETPRIMARYCOMPUTERNAME r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_WKSSVC_NETRSETPRIMARYCOMPUTERNAME");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_WKSSVC_NETRSETPRIMARYCOMPUTERNAME(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrSetPrimaryComputername, r);
-	}
-
-	r->out.result = _wkssvc_NetrSetPrimaryComputername(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRSETPRIMARYCOMPUTERNAME, &r);
+	
+	r.out.result = _WKSSVC_NETRSETPRIMARYCOMPUTERNAME(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrSetPrimaryComputername, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRSETPRIMARYCOMPUTERNAME, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_WKSSVC_NETRSETPRIMARYCOMPUTERNAME(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
-static bool api_wkssvc_NetrEnumerateComputerNames(pipes_struct *p)
+static BOOL api_WKSSVC_NETRENUMERATECOMPUTERNAMES(pipes_struct *p)
 {
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	struct ndr_push *push;
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	DATA_BLOB blob;
-	struct wkssvc_NetrEnumerateComputerNames *r;
-
-	call = &ndr_table_wkssvc.calls[NDR_WKSSVC_NETRENUMERATECOMPUTERNAMES];
-
-	r = talloc(talloc_tos(), struct wkssvc_NetrEnumerateComputerNames);
-	if (r == NULL) {
-		return false;
+	struct WKSSVC_NETRENUMERATECOMPUTERNAMES r;
+	TALLOC_CTX *mem_ctx = talloc_init("api_WKSSVC_NETRENUMERATECOMPUTERNAMES");
+	
+	if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (!prs_data_blob(&p->in_data.data, &blob, r)) {
-		talloc_free(r);
-		return false;
-	}
-
-	pull = ndr_pull_init_blob(&blob, r);
+	
+	pull = ndr_pull_init_blob(&blob, mem_ctx);
 	if (pull == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	status = ndr_pull_WKSSVC_NETRENUMERATECOMPUTERNAMES(pull, NDR_IN, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_IN_DEBUG(wkssvc_NetrEnumerateComputerNames, r);
-	}
-
-	ZERO_STRUCT(r->out);
-	r->out.ctr = talloc_zero(r, struct wkssvc_ComputerNamesCtr *);
-	if (r->out.ctr == NULL) {
-		talloc_free(r);
-		return false;
-	}
-
-	r->out.result = _wkssvc_NetrEnumerateComputerNames(p, r);
-
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_IN_DEBUG(WKSSVC_NETRENUMERATECOMPUTERNAMES, &r);
+	
+	r.out.result = _WKSSVC_NETRENUMERATECOMPUTERNAMES(p, &r);
+	
 	if (p->rng_fault_state) {
-		talloc_free(r);
-		/* Return true here, srv_pipe_hnd.c will take care */
-		return true;
+		talloc_free(mem_ctx);
+		/* Return True here, srv_pipe_hnd.c will take care */
+		return True;
 	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_OUT_DEBUG(wkssvc_NetrEnumerateComputerNames, r);
-	}
-
-	push = ndr_push_init_ctx(r);
+	
+	if (DEBUGLEVEL >= 10)
+		NDR_PRINT_OUT_DEBUG(WKSSVC_NETRENUMERATECOMPUTERNAMES, &r);
+	
+	push = ndr_push_init_ctx(mem_ctx);
 	if (push == NULL) {
-		talloc_free(r);
-		return false;
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	ndr_err = call->ndr_push(push, NDR_OUT, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		talloc_free(r);
-		return false;
+	
+	status = ndr_push_WKSSVC_NETRENUMERATECOMPUTERNAMES(push, NDR_OUT, &r);
+	if (NT_STATUS_IS_ERR(status)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
+	
 	blob = ndr_push_blob(push);
-	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32_t)blob.length)) {
-		talloc_free(r);
-		return false;
+	if (!prs_copy_data_in(&p->out_data.rdata, (const char *)blob.data, (uint32)blob.length)) {
+		talloc_free(mem_ctx);
+		return False;
 	}
-
-	talloc_free(r);
-
-	return true;
+	
+	talloc_free(mem_ctx);
+	
+	return True;
 }
 
 
 /* Tables */
 static struct api_struct api_wkssvc_cmds[] = 
 {
-	{"WKSSVC_NETWKSTAGETINFO", NDR_WKSSVC_NETWKSTAGETINFO, api_wkssvc_NetWkstaGetInfo},
-	{"WKSSVC_NETWKSTASETINFO", NDR_WKSSVC_NETWKSTASETINFO, api_wkssvc_NetWkstaSetInfo},
-	{"WKSSVC_NETWKSTAENUMUSERS", NDR_WKSSVC_NETWKSTAENUMUSERS, api_wkssvc_NetWkstaEnumUsers},
-	{"WKSSVC_NETRWKSTAUSERGETINFO", NDR_WKSSVC_NETRWKSTAUSERGETINFO, api_wkssvc_NetrWkstaUserGetInfo},
-	{"WKSSVC_NETRWKSTAUSERSETINFO", NDR_WKSSVC_NETRWKSTAUSERSETINFO, api_wkssvc_NetrWkstaUserSetInfo},
-	{"WKSSVC_NETWKSTATRANSPORTENUM", NDR_WKSSVC_NETWKSTATRANSPORTENUM, api_wkssvc_NetWkstaTransportEnum},
-	{"WKSSVC_NETRWKSTATRANSPORTADD", NDR_WKSSVC_NETRWKSTATRANSPORTADD, api_wkssvc_NetrWkstaTransportAdd},
-	{"WKSSVC_NETRWKSTATRANSPORTDEL", NDR_WKSSVC_NETRWKSTATRANSPORTDEL, api_wkssvc_NetrWkstaTransportDel},
-	{"WKSSVC_NETRUSEADD", NDR_WKSSVC_NETRUSEADD, api_wkssvc_NetrUseAdd},
-	{"WKSSVC_NETRUSEGETINFO", NDR_WKSSVC_NETRUSEGETINFO, api_wkssvc_NetrUseGetInfo},
-	{"WKSSVC_NETRUSEDEL", NDR_WKSSVC_NETRUSEDEL, api_wkssvc_NetrUseDel},
-	{"WKSSVC_NETRUSEENUM", NDR_WKSSVC_NETRUSEENUM, api_wkssvc_NetrUseEnum},
-	{"WKSSVC_NETRMESSAGEBUFFERSEND", NDR_WKSSVC_NETRMESSAGEBUFFERSEND, api_wkssvc_NetrMessageBufferSend},
-	{"WKSSVC_NETRWORKSTATIONSTATISTICSGET", NDR_WKSSVC_NETRWORKSTATIONSTATISTICSGET, api_wkssvc_NetrWorkstationStatisticsGet},
-	{"WKSSVC_NETRLOGONDOMAINNAMEADD", NDR_WKSSVC_NETRLOGONDOMAINNAMEADD, api_wkssvc_NetrLogonDomainNameAdd},
-	{"WKSSVC_NETRLOGONDOMAINNAMEDEL", NDR_WKSSVC_NETRLOGONDOMAINNAMEDEL, api_wkssvc_NetrLogonDomainNameDel},
-	{"WKSSVC_NETRJOINDOMAIN", NDR_WKSSVC_NETRJOINDOMAIN, api_wkssvc_NetrJoinDomain},
-	{"WKSSVC_NETRUNJOINDOMAIN", NDR_WKSSVC_NETRUNJOINDOMAIN, api_wkssvc_NetrUnjoinDomain},
-	{"WKSSVC_NETRRENAMEMACHINEINDOMAIN", NDR_WKSSVC_NETRRENAMEMACHINEINDOMAIN, api_wkssvc_NetrRenameMachineInDomain},
-	{"WKSSVC_NETRVALIDATENAME", NDR_WKSSVC_NETRVALIDATENAME, api_wkssvc_NetrValidateName},
-	{"WKSSVC_NETRGETJOININFORMATION", NDR_WKSSVC_NETRGETJOININFORMATION, api_wkssvc_NetrGetJoinInformation},
-	{"WKSSVC_NETRGETJOINABLEOUS", NDR_WKSSVC_NETRGETJOINABLEOUS, api_wkssvc_NetrGetJoinableOus},
-	{"WKSSVC_NETRJOINDOMAIN2", NDR_WKSSVC_NETRJOINDOMAIN2, api_wkssvc_NetrJoinDomain2},
-	{"WKSSVC_NETRUNJOINDOMAIN2", NDR_WKSSVC_NETRUNJOINDOMAIN2, api_wkssvc_NetrUnjoinDomain2},
-	{"WKSSVC_NETRRENAMEMACHINEINDOMAIN2", NDR_WKSSVC_NETRRENAMEMACHINEINDOMAIN2, api_wkssvc_NetrRenameMachineInDomain2},
-	{"WKSSVC_NETRVALIDATENAME2", NDR_WKSSVC_NETRVALIDATENAME2, api_wkssvc_NetrValidateName2},
-	{"WKSSVC_NETRGETJOINABLEOUS2", NDR_WKSSVC_NETRGETJOINABLEOUS2, api_wkssvc_NetrGetJoinableOus2},
-	{"WKSSVC_NETRADDALTERNATECOMPUTERNAME", NDR_WKSSVC_NETRADDALTERNATECOMPUTERNAME, api_wkssvc_NetrAddAlternateComputerName},
-	{"WKSSVC_NETRREMOVEALTERNATECOMPUTERNAME", NDR_WKSSVC_NETRREMOVEALTERNATECOMPUTERNAME, api_wkssvc_NetrRemoveAlternateComputerName},
-	{"WKSSVC_NETRSETPRIMARYCOMPUTERNAME", NDR_WKSSVC_NETRSETPRIMARYCOMPUTERNAME, api_wkssvc_NetrSetPrimaryComputername},
-	{"WKSSVC_NETRENUMERATECOMPUTERNAMES", NDR_WKSSVC_NETRENUMERATECOMPUTERNAMES, api_wkssvc_NetrEnumerateComputerNames},
+	{"WKSSVC_NETWKSTAGETINFO", DCERPC_WKSSVC_NETWKSTAGETINFO, api_wkssvc_NetWkstaGetInfo},
+	{"WKSSVC_NETWKSTASETINFO", DCERPC_WKSSVC_NETWKSTASETINFO, api_wkssvc_NetWkstaSetInfo},
+	{"WKSSVC_NETWKSTAENUMUSERS", DCERPC_WKSSVC_NETWKSTAENUMUSERS, api_wkssvc_NetWkstaEnumUsers},
+	{"WKSSVC_NETRWKSTAUSERGETINFO", DCERPC_WKSSVC_NETRWKSTAUSERGETINFO, api_WKSSVC_NETRWKSTAUSERGETINFO},
+	{"WKSSVC_NETRWKSTAUSERSETINFO", DCERPC_WKSSVC_NETRWKSTAUSERSETINFO, api_WKSSVC_NETRWKSTAUSERSETINFO},
+	{"WKSSVC_NETWKSTATRANSPORTENUM", DCERPC_WKSSVC_NETWKSTATRANSPORTENUM, api_wkssvc_NetWkstaTransportEnum},
+	{"WKSSVC_NETRWKSTATRANSPORTADD", DCERPC_WKSSVC_NETRWKSTATRANSPORTADD, api_WKSSVC_NETRWKSTATRANSPORTADD},
+	{"WKSSVC_NETRWKSTATRANSPORTDEL", DCERPC_WKSSVC_NETRWKSTATRANSPORTDEL, api_WKSSVC_NETRWKSTATRANSPORTDEL},
+	{"WKSSVC_NETRUSEADD", DCERPC_WKSSVC_NETRUSEADD, api_WKSSVC_NETRUSEADD},
+	{"WKSSVC_NETRUSEGETINFO", DCERPC_WKSSVC_NETRUSEGETINFO, api_WKSSVC_NETRUSEGETINFO},
+	{"WKSSVC_NETRUSEDEL", DCERPC_WKSSVC_NETRUSEDEL, api_WKSSVC_NETRUSEDEL},
+	{"WKSSVC_NETRUSEENUM", DCERPC_WKSSVC_NETRUSEENUM, api_WKSSVC_NETRUSEENUM},
+	{"WKSSVC_NETRMESSAGEBUFFERSEND", DCERPC_WKSSVC_NETRMESSAGEBUFFERSEND, api_WKSSVC_NETRMESSAGEBUFFERSEND},
+	{"WKSSVC_NETRWORKSTATIONSTATISTICSGET", DCERPC_WKSSVC_NETRWORKSTATIONSTATISTICSGET, api_WKSSVC_NETRWORKSTATIONSTATISTICSGET},
+	{"WKSSVC_NETRLOGONDOMAINNAMEADD", DCERPC_WKSSVC_NETRLOGONDOMAINNAMEADD, api_WKSSVC_NETRLOGONDOMAINNAMEADD},
+	{"WKSSVC_NETRLOGONDOMAINNAMEDEL", DCERPC_WKSSVC_NETRLOGONDOMAINNAMEDEL, api_WKSSVC_NETRLOGONDOMAINNAMEDEL},
+	{"WKSSVC_NETRJOINDOMAIN", DCERPC_WKSSVC_NETRJOINDOMAIN, api_WKSSVC_NETRJOINDOMAIN},
+	{"WKSSVC_NETRUNJOINDOMAIN", DCERPC_WKSSVC_NETRUNJOINDOMAIN, api_WKSSVC_NETRUNJOINDOMAIN},
+	{"WKSSVC_NETRRENAMEMACHINEINDOMAIN", DCERPC_WKSSVC_NETRRENAMEMACHINEINDOMAIN, api_WKSSVC_NETRRENAMEMACHINEINDOMAIN},
+	{"WKSSVC_NETRVALIDATENAME", DCERPC_WKSSVC_NETRVALIDATENAME, api_WKSSVC_NETRVALIDATENAME},
+	{"WKSSVC_NETRGETJOININFORMATION", DCERPC_WKSSVC_NETRGETJOININFORMATION, api_WKSSVC_NETRGETJOININFORMATION},
+	{"WKSSVC_NETRGETJOINABLEOUS", DCERPC_WKSSVC_NETRGETJOINABLEOUS, api_WKSSVC_NETRGETJOINABLEOUS},
+	{"WKSSVC_NETRJOINDOMAIN2", DCERPC_WKSSVC_NETRJOINDOMAIN2, api_wkssvc_NetrJoinDomain2},
+	{"WKSSVC_NETRUNJOINDOMAIN2", DCERPC_WKSSVC_NETRUNJOINDOMAIN2, api_wkssvc_NetrUnjoinDomain2},
+	{"WKSSVC_NETRRENAMEMACHINEINDOMAIN2", DCERPC_WKSSVC_NETRRENAMEMACHINEINDOMAIN2, api_wkssvc_NetrRenameMachineInDomain2},
+	{"WKSSVC_NETRVALIDATENAME2", DCERPC_WKSSVC_NETRVALIDATENAME2, api_WKSSVC_NETRVALIDATENAME2},
+	{"WKSSVC_NETRGETJOINABLEOUS2", DCERPC_WKSSVC_NETRGETJOINABLEOUS2, api_WKSSVC_NETRGETJOINABLEOUS2},
+	{"WKSSVC_NETRADDALTERNATECOMPUTERNAME", DCERPC_WKSSVC_NETRADDALTERNATECOMPUTERNAME, api_wkssvc_NetrAddAlternateComputerName},
+	{"WKSSVC_NETRREMOVEALTERNATECOMPUTERNAME", DCERPC_WKSSVC_NETRREMOVEALTERNATECOMPUTERNAME, api_wkssvc_NetrRemoveAlternateComputerName},
+	{"WKSSVC_NETRSETPRIMARYCOMPUTERNAME", DCERPC_WKSSVC_NETRSETPRIMARYCOMPUTERNAME, api_WKSSVC_NETRSETPRIMARYCOMPUTERNAME},
+	{"WKSSVC_NETRENUMERATECOMPUTERNAMES", DCERPC_WKSSVC_NETRENUMERATECOMPUTERNAMES, api_WKSSVC_NETRENUMERATECOMPUTERNAMES},
 };
 
 void wkssvc_get_pipe_fns(struct api_struct **fns, int *n_fns)

Modified: branches/samba/upstream/source/librpc/gen_ndr/srv_wkssvc.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srv_wkssvc.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srv_wkssvc.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,34 +4,34 @@
 WERROR _wkssvc_NetWkstaGetInfo(pipes_struct *p, struct wkssvc_NetWkstaGetInfo *r);
 WERROR _wkssvc_NetWkstaSetInfo(pipes_struct *p, struct wkssvc_NetWkstaSetInfo *r);
 WERROR _wkssvc_NetWkstaEnumUsers(pipes_struct *p, struct wkssvc_NetWkstaEnumUsers *r);
-WERROR _wkssvc_NetrWkstaUserGetInfo(pipes_struct *p, struct wkssvc_NetrWkstaUserGetInfo *r);
-WERROR _wkssvc_NetrWkstaUserSetInfo(pipes_struct *p, struct wkssvc_NetrWkstaUserSetInfo *r);
+WERROR _WKSSVC_NETRWKSTAUSERGETINFO(pipes_struct *p, struct WKSSVC_NETRWKSTAUSERGETINFO *r);
+WERROR _WKSSVC_NETRWKSTAUSERSETINFO(pipes_struct *p, struct WKSSVC_NETRWKSTAUSERSETINFO *r);
 WERROR _wkssvc_NetWkstaTransportEnum(pipes_struct *p, struct wkssvc_NetWkstaTransportEnum *r);
-WERROR _wkssvc_NetrWkstaTransportAdd(pipes_struct *p, struct wkssvc_NetrWkstaTransportAdd *r);
-WERROR _wkssvc_NetrWkstaTransportDel(pipes_struct *p, struct wkssvc_NetrWkstaTransportDel *r);
-WERROR _wkssvc_NetrUseAdd(pipes_struct *p, struct wkssvc_NetrUseAdd *r);
-WERROR _wkssvc_NetrUseGetInfo(pipes_struct *p, struct wkssvc_NetrUseGetInfo *r);
-WERROR _wkssvc_NetrUseDel(pipes_struct *p, struct wkssvc_NetrUseDel *r);
-WERROR _wkssvc_NetrUseEnum(pipes_struct *p, struct wkssvc_NetrUseEnum *r);
-WERROR _wkssvc_NetrMessageBufferSend(pipes_struct *p, struct wkssvc_NetrMessageBufferSend *r);
-WERROR _wkssvc_NetrWorkstationStatisticsGet(pipes_struct *p, struct wkssvc_NetrWorkstationStatisticsGet *r);
-WERROR _wkssvc_NetrLogonDomainNameAdd(pipes_struct *p, struct wkssvc_NetrLogonDomainNameAdd *r);
-WERROR _wkssvc_NetrLogonDomainNameDel(pipes_struct *p, struct wkssvc_NetrLogonDomainNameDel *r);
-WERROR _wkssvc_NetrJoinDomain(pipes_struct *p, struct wkssvc_NetrJoinDomain *r);
-WERROR _wkssvc_NetrUnjoinDomain(pipes_struct *p, struct wkssvc_NetrUnjoinDomain *r);
-WERROR _wkssvc_NetrRenameMachineInDomain(pipes_struct *p, struct wkssvc_NetrRenameMachineInDomain *r);
-WERROR _wkssvc_NetrValidateName(pipes_struct *p, struct wkssvc_NetrValidateName *r);
-WERROR _wkssvc_NetrGetJoinInformation(pipes_struct *p, struct wkssvc_NetrGetJoinInformation *r);
-WERROR _wkssvc_NetrGetJoinableOus(pipes_struct *p, struct wkssvc_NetrGetJoinableOus *r);
+WERROR _WKSSVC_NETRWKSTATRANSPORTADD(pipes_struct *p, struct WKSSVC_NETRWKSTATRANSPORTADD *r);
+WERROR _WKSSVC_NETRWKSTATRANSPORTDEL(pipes_struct *p, struct WKSSVC_NETRWKSTATRANSPORTDEL *r);
+WERROR _WKSSVC_NETRUSEADD(pipes_struct *p, struct WKSSVC_NETRUSEADD *r);
+WERROR _WKSSVC_NETRUSEGETINFO(pipes_struct *p, struct WKSSVC_NETRUSEGETINFO *r);
+WERROR _WKSSVC_NETRUSEDEL(pipes_struct *p, struct WKSSVC_NETRUSEDEL *r);
+WERROR _WKSSVC_NETRUSEENUM(pipes_struct *p, struct WKSSVC_NETRUSEENUM *r);
+WERROR _WKSSVC_NETRMESSAGEBUFFERSEND(pipes_struct *p, struct WKSSVC_NETRMESSAGEBUFFERSEND *r);
+WERROR _WKSSVC_NETRWORKSTATIONSTATISTICSGET(pipes_struct *p, struct WKSSVC_NETRWORKSTATIONSTATISTICSGET *r);
+WERROR _WKSSVC_NETRLOGONDOMAINNAMEADD(pipes_struct *p, struct WKSSVC_NETRLOGONDOMAINNAMEADD *r);
+WERROR _WKSSVC_NETRLOGONDOMAINNAMEDEL(pipes_struct *p, struct WKSSVC_NETRLOGONDOMAINNAMEDEL *r);
+WERROR _WKSSVC_NETRJOINDOMAIN(pipes_struct *p, struct WKSSVC_NETRJOINDOMAIN *r);
+WERROR _WKSSVC_NETRUNJOINDOMAIN(pipes_struct *p, struct WKSSVC_NETRUNJOINDOMAIN *r);
+WERROR _WKSSVC_NETRRENAMEMACHINEINDOMAIN(pipes_struct *p, struct WKSSVC_NETRRENAMEMACHINEINDOMAIN *r);
+WERROR _WKSSVC_NETRVALIDATENAME(pipes_struct *p, struct WKSSVC_NETRVALIDATENAME *r);
+WERROR _WKSSVC_NETRGETJOININFORMATION(pipes_struct *p, struct WKSSVC_NETRGETJOININFORMATION *r);
+WERROR _WKSSVC_NETRGETJOINABLEOUS(pipes_struct *p, struct WKSSVC_NETRGETJOINABLEOUS *r);
 WERROR _wkssvc_NetrJoinDomain2(pipes_struct *p, struct wkssvc_NetrJoinDomain2 *r);
 WERROR _wkssvc_NetrUnjoinDomain2(pipes_struct *p, struct wkssvc_NetrUnjoinDomain2 *r);
 WERROR _wkssvc_NetrRenameMachineInDomain2(pipes_struct *p, struct wkssvc_NetrRenameMachineInDomain2 *r);
-WERROR _wkssvc_NetrValidateName2(pipes_struct *p, struct wkssvc_NetrValidateName2 *r);
-WERROR _wkssvc_NetrGetJoinableOus2(pipes_struct *p, struct wkssvc_NetrGetJoinableOus2 *r);
+WERROR _WKSSVC_NETRVALIDATENAME2(pipes_struct *p, struct WKSSVC_NETRVALIDATENAME2 *r);
+WERROR _WKSSVC_NETRGETJOINABLEOUS2(pipes_struct *p, struct WKSSVC_NETRGETJOINABLEOUS2 *r);
 WERROR _wkssvc_NetrAddAlternateComputerName(pipes_struct *p, struct wkssvc_NetrAddAlternateComputerName *r);
 WERROR _wkssvc_NetrRemoveAlternateComputerName(pipes_struct *p, struct wkssvc_NetrRemoveAlternateComputerName *r);
-WERROR _wkssvc_NetrSetPrimaryComputername(pipes_struct *p, struct wkssvc_NetrSetPrimaryComputername *r);
-WERROR _wkssvc_NetrEnumerateComputerNames(pipes_struct *p, struct wkssvc_NetrEnumerateComputerNames *r);
+WERROR _WKSSVC_NETRSETPRIMARYCOMPUTERNAME(pipes_struct *p, struct WKSSVC_NETRSETPRIMARYCOMPUTERNAME *r);
+WERROR _WKSSVC_NETRENUMERATECOMPUTERNAMES(pipes_struct *p, struct WKSSVC_NETRENUMERATECOMPUTERNAMES *r);
 void wkssvc_get_pipe_fns(struct api_struct **fns, int *n_fns);
 NTSTATUS rpc_wkssvc_init(void);
 #endif /* __SRV_WKSSVC__ */

Modified: branches/samba/upstream/source/librpc/gen_ndr/srvsvc.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/srvsvc.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/srvsvc.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,7 +1,5 @@
 /* header auto-generated by pidl */
 
-#include <stdint.h>
-
 #include "librpc/gen_ndr/security.h"
 #include "librpc/gen_ndr/svcctl.h"
 #ifndef _HEADER_srvsvc
@@ -103,11 +101,6 @@
 	struct srvsvc_NetConnCtr1 *ctr1;/* [unique,case] */
 };
 
-struct srvsvc_NetConnInfoCtr {
-	uint32_t level;
-	union srvsvc_NetConnCtr ctr;/* [switch_is(level)] */
-};
-
 struct srvsvc_NetFileInfo2 {
 	uint32_t fid;
 };
@@ -140,11 +133,6 @@
 	struct srvsvc_NetFileCtr3 *ctr3;/* [unique,case(3)] */
 };
 
-struct srvsvc_NetFileInfoCtr {
-	uint32_t level;
-	union srvsvc_NetFileCtr ctr;/* [switch_is(level)] */
-};
-
 struct srvsvc_NetSessInfo0 {
 	const char *client;/* [unique,charset(UTF16)] */
 };
@@ -219,14 +207,7 @@
 	struct srvsvc_NetSessCtr502 *ctr502;/* [unique,case(502)] */
 };
 
-struct srvsvc_NetSessInfoCtr {
-	uint32_t level;
-	union srvsvc_NetSessCtr ctr;/* [switch_is(level)] */
-};
-
-enum srvsvc_ShareType
-#ifndef USE_UINT_ENUMS
- {
+enum srvsvc_ShareType {
 	STYPE_DISKTREE=0,
 	STYPE_DISKTREE_TEMPORARY=STYPE_DISKTREE|STYPE_TEMPORARY,
 	STYPE_DISKTREE_HIDDEN=STYPE_DISKTREE|STYPE_HIDDEN,
@@ -239,23 +220,7 @@
 	STYPE_IPC=3,
 	STYPE_IPC_TEMPORARY=STYPE_IPC|STYPE_TEMPORARY,
 	STYPE_IPC_HIDDEN=STYPE_IPC|STYPE_HIDDEN
-}
-#else
- { __donnot_use_enum_srvsvc_ShareType=0x7FFFFFFF}
-#define STYPE_DISKTREE ( 0 )
-#define STYPE_DISKTREE_TEMPORARY ( STYPE_DISKTREE|STYPE_TEMPORARY )
-#define STYPE_DISKTREE_HIDDEN ( STYPE_DISKTREE|STYPE_HIDDEN )
-#define STYPE_PRINTQ ( 1 )
-#define STYPE_PRINTQ_TEMPORARY ( STYPE_PRINTQ|STYPE_TEMPORARY )
-#define STYPE_PRINTQ_HIDDEN ( STYPE_PRINTQ|STYPE_HIDDEN )
-#define STYPE_DEVICE ( 2 )
-#define STYPE_DEVICE_TEMPORARY ( STYPE_DEVICE|STYPE_TEMPORARY )
-#define STYPE_DEVICE_HIDDEN ( STYPE_DEVICE|STYPE_HIDDEN )
-#define STYPE_IPC ( 3 )
-#define STYPE_IPC_TEMPORARY ( STYPE_IPC|STYPE_TEMPORARY )
-#define STYPE_IPC_HIDDEN ( STYPE_IPC|STYPE_HIDDEN )
-#endif
-;
+};
 
 struct srvsvc_NetShareInfo0 {
 	const char *name;/* [unique,charset(UTF16)] */
@@ -310,11 +275,12 @@
 	enum srvsvc_ShareType type;
 	const char *comment;/* [unique,charset(UTF16)] */
 	uint32_t permissions;
-	uint32_t max_users;
+	int32_t max_users;
 	uint32_t current_users;
 	const char *path;/* [unique,charset(UTF16)] */
 	const char *password;/* [unique,charset(UTF16)] */
-	struct sec_desc_buf sd_buf;
+	uint32_t unknown;
+	struct security_descriptor *sd;/* [unique,subcontext(4)] */
 };
 
 struct srvsvc_NetShareCtr502 {
@@ -345,7 +311,7 @@
 };
 
 struct srvsvc_NetShareInfo1006 {
-	uint32_t max_users;
+	int32_t max_users;
 };
 
 struct srvsvc_NetShareCtr1006 {
@@ -394,29 +360,13 @@
 	struct srvsvc_NetShareCtr1501 *ctr1501;/* [unique,case(1501)] */
 };
 
-struct srvsvc_NetShareInfoCtr {
-	uint32_t level;
-	union srvsvc_NetShareCtr ctr;/* [switch_is(level)] */
-};
-
-enum srvsvc_PlatformId
-#ifndef USE_UINT_ENUMS
- {
+enum srvsvc_PlatformId {
 	PLATFORM_ID_DOS=300,
 	PLATFORM_ID_OS2=400,
 	PLATFORM_ID_NT=500,
 	PLATFORM_ID_OSF=600,
 	PLATFORM_ID_VMS=700
-}
-#else
- { __donnot_use_enum_srvsvc_PlatformId=0x7FFFFFFF}
-#define PLATFORM_ID_DOS ( 300 )
-#define PLATFORM_ID_OS2 ( 400 )
-#define PLATFORM_ID_NT ( 500 )
-#define PLATFORM_ID_OSF ( 600 )
-#define PLATFORM_ID_VMS ( 700 )
-#endif
-;
+};
 
 struct srvsvc_NetSrvInfo100 {
 	enum srvsvc_PlatformId platform_id;
@@ -1028,16 +978,16 @@
 struct srvsvc_NetCharDevEnum {
 	struct {
 		const char *server_unc;/* [unique,charset(UTF16)] */
-		uint32_t max_buffer;
 		uint32_t *level;/* [ref] */
 		union srvsvc_NetCharDevCtr *ctr;/* [ref,switch_is(*level)] */
+		uint32_t max_buffer;
 		uint32_t *resume_handle;/* [unique] */
 	} in;
 
 	struct {
-		uint32_t *totalentries;/* [ref] */
 		uint32_t *level;/* [ref] */
 		union srvsvc_NetCharDevCtr *ctr;/* [ref,switch_is(*level)] */
+		uint32_t *totalentries;/* [ref] */
 		uint32_t *resume_handle;/* [unique] */
 		WERROR result;
 	} out;
@@ -1078,16 +1028,16 @@
 	struct {
 		const char *server_unc;/* [unique,charset(UTF16)] */
 		const char *user;/* [unique,charset(UTF16)] */
-		uint32_t max_buffer;
 		uint32_t *level;/* [ref] */
 		union srvsvc_NetCharDevQCtr *ctr;/* [ref,switch_is(*level)] */
+		uint32_t max_buffer;
 		uint32_t *resume_handle;/* [unique] */
 	} in;
 
 	struct {
-		uint32_t *totalentries;/* [ref] */
 		uint32_t *level;/* [ref] */
 		union srvsvc_NetCharDevQCtr *ctr;/* [ref,switch_is(*level)] */
+		uint32_t *totalentries;/* [ref] */
 		uint32_t *resume_handle;/* [unique] */
 		WERROR result;
 	} out;
@@ -1159,14 +1109,16 @@
 	struct {
 		const char *server_unc;/* [unique,charset(UTF16)] */
 		const char *path;/* [unique,charset(UTF16)] */
+		uint32_t *level;/* [ref] */
+		union srvsvc_NetConnCtr *ctr;/* [ref,switch_is(*level)] */
 		uint32_t max_buffer;
-		struct srvsvc_NetConnInfoCtr *info_ctr;/* [ref] */
 		uint32_t *resume_handle;/* [unique] */
 	} in;
 
 	struct {
+		uint32_t *level;/* [ref] */
+		union srvsvc_NetConnCtr *ctr;/* [ref,switch_is(*level)] */
 		uint32_t *totalentries;/* [ref] */
-		struct srvsvc_NetConnInfoCtr *info_ctr;/* [ref] */
 		uint32_t *resume_handle;/* [unique] */
 		WERROR result;
 	} out;
@@ -1179,14 +1131,16 @@
 		const char *server_unc;/* [unique,charset(UTF16)] */
 		const char *path;/* [unique,charset(UTF16)] */
 		const char *user;/* [unique,charset(UTF16)] */
+		uint32_t *level;/* [ref] */
+		union srvsvc_NetFileCtr *ctr;/* [ref,switch_is(*level)] */
 		uint32_t max_buffer;
-		struct srvsvc_NetFileInfoCtr *info_ctr;/* [ref] */
 		uint32_t *resume_handle;/* [unique] */
 	} in;
 
 	struct {
+		uint32_t *level;/* [ref] */
+		union srvsvc_NetFileCtr *ctr;/* [ref,switch_is(*level)] */
 		uint32_t *totalentries;/* [ref] */
-		struct srvsvc_NetFileInfoCtr *info_ctr;/* [ref] */
 		uint32_t *resume_handle;/* [unique] */
 		WERROR result;
 	} out;
@@ -1227,14 +1181,16 @@
 		const char *server_unc;/* [unique,charset(UTF16)] */
 		const char *client;/* [unique,charset(UTF16)] */
 		const char *user;/* [unique,charset(UTF16)] */
+		uint32_t *level;/* [ref] */
+		union srvsvc_NetSessCtr *ctr;/* [ref,switch_is(*level)] */
 		uint32_t max_buffer;
-		struct srvsvc_NetSessInfoCtr *info_ctr;/* [ref] */
 		uint32_t *resume_handle;/* [unique] */
 	} in;
 
 	struct {
+		uint32_t *level;/* [ref] */
+		union srvsvc_NetSessCtr *ctr;/* [ref,switch_is(*level)] */
 		uint32_t *totalentries;/* [ref] */
-		struct srvsvc_NetSessInfoCtr *info_ctr;/* [ref] */
 		uint32_t *resume_handle;/* [unique] */
 		WERROR result;
 	} out;
@@ -1260,7 +1216,7 @@
 	struct {
 		const char *server_unc;/* [unique,charset(UTF16)] */
 		uint32_t level;
-		union srvsvc_NetShareInfo *info;/* [ref,switch_is(level)] */
+		union srvsvc_NetShareInfo info;/* [switch_is(level)] */
 		uint32_t *parm_error;/* [unique] */
 	} in;
 
@@ -1275,14 +1231,16 @@
 struct srvsvc_NetShareEnumAll {
 	struct {
 		const char *server_unc;/* [unique,charset(UTF16)] */
+		uint32_t *level;/* [ref] */
+		union srvsvc_NetShareCtr *ctr;/* [ref,switch_is(*level)] */
 		uint32_t max_buffer;
-		struct srvsvc_NetShareInfoCtr *info_ctr;/* [ref] */
 		uint32_t *resume_handle;/* [unique] */
 	} in;
 
 	struct {
+		uint32_t *level;/* [ref] */
+		union srvsvc_NetShareCtr *ctr;/* [ref,switch_is(*level)] */
 		uint32_t *totalentries;/* [ref] */
-		struct srvsvc_NetShareInfoCtr *info_ctr;/* [ref] */
 		uint32_t *resume_handle;/* [unique] */
 		WERROR result;
 	} out;
@@ -1310,7 +1268,7 @@
 		const char *server_unc;/* [unique,charset(UTF16)] */
 		const char *share_name;/* [charset(UTF16)] */
 		uint32_t level;
-		union srvsvc_NetShareInfo *info;/* [ref,switch_is(level)] */
+		union srvsvc_NetShareInfo info;/* [switch_is(level)] */
 		uint32_t *parm_error;/* [unique] */
 	} in;
 
@@ -1382,7 +1340,7 @@
 	struct {
 		const char *server_unc;/* [unique,charset(UTF16)] */
 		uint32_t level;
-		union srvsvc_NetSrvInfo *info;/* [ref,switch_is(level)] */
+		union srvsvc_NetSrvInfo info;/* [switch_is(level)] */
 		uint32_t *parm_error;/* [unique] */
 	} in;
 
@@ -1398,14 +1356,14 @@
 	struct {
 		const char *server_unc;/* [unique,charset(UTF16)] */
 		uint32_t level;
-		uint32_t maxlen;
 		struct srvsvc_NetDiskInfo *info;/* [ref] */
+		uint32_t maxlen;
 		uint32_t *resume_handle;/* [unique] */
 	} in;
 
 	struct {
-		uint32_t *totalentries;/* [ref] */
 		struct srvsvc_NetDiskInfo *info;/* [ref] */
+		uint32_t *totalentries;/* [ref] */
 		uint32_t *resume_handle;/* [unique] */
 		WERROR result;
 	} out;
@@ -1446,16 +1404,16 @@
 struct srvsvc_NetTransportEnum {
 	struct {
 		const char *server_unc;/* [unique,charset(UTF16)] */
-		uint32_t max_buffer;
 		uint32_t *level;/* [ref] */
 		union srvsvc_NetTransportCtr *transports;/* [ref,switch_is(*level)] */
+		uint32_t max_buffer;
 		uint32_t *resume_handle;/* [unique] */
 	} in;
 
 	struct {
-		uint32_t *totalentries;/* [ref] */
 		uint32_t *level;/* [ref] */
 		union srvsvc_NetTransportCtr *transports;/* [ref,switch_is(*level)] */
+		uint32_t *totalentries;/* [ref] */
 		uint32_t *resume_handle;/* [unique] */
 		WERROR result;
 	} out;
@@ -1483,7 +1441,7 @@
 	} in;
 
 	struct {
-		struct srvsvc_NetRemoteTODInfo **info;/* [ref] */
+		struct srvsvc_NetRemoteTODInfo *info;/* [unique] */
 		WERROR result;
 	} out;
 
@@ -1526,8 +1484,8 @@
 		const char *path;/* [charset(UTF16)] */
 		uint32_t maxbuf;
 		const char *prefix;/* [charset(UTF16)] */
-		uint32_t pathflags;
 		uint32_t *pathtype;/* [ref] */
+		uint32_t pathflags;
 	} in;
 
 	struct {
@@ -1597,14 +1555,16 @@
 struct srvsvc_NetShareEnum {
 	struct {
 		const char *server_unc;/* [unique,charset(UTF16)] */
+		uint32_t *level;/* [ref] */
+		union srvsvc_NetShareCtr *ctr;/* [ref,switch_is(*level)] */
 		uint32_t max_buffer;
-		struct srvsvc_NetShareInfoCtr *info_ctr;/* [ref] */
 		uint32_t *resume_handle;/* [unique] */
 	} in;
 
 	struct {
+		uint32_t *level;/* [ref] */
+		union srvsvc_NetShareCtr *ctr;/* [ref,switch_is(*level)] */
 		uint32_t *totalentries;/* [ref] */
-		struct srvsvc_NetShareInfoCtr *info_ctr;/* [ref] */
 		uint32_t *resume_handle;/* [unique] */
 		WERROR result;
 	} out;
@@ -1649,7 +1609,7 @@
 	} in;
 
 	struct {
-		struct sec_desc_buf **sd_buf;/* [ref] */
+		struct sec_desc_buf *sd_buf;/* [unique] */
 		WERROR result;
 	} out;
 
@@ -1662,7 +1622,7 @@
 		const char *share;/* [unique,charset(UTF16)] */
 		const char *file;/* [charset(UTF16)] */
 		uint32_t securityinformation;
-		struct sec_desc_buf *sd_buf;/* [ref] */
+		struct sec_desc_buf sd_buf;
 	} in;
 
 	struct {

Modified: branches/samba/upstream/source/librpc/gen_ndr/svcctl.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/svcctl.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/svcctl.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,7 +1,5 @@
 /* header auto-generated by pidl */
 
-#include <stdint.h>
-
 #ifndef _HEADER_svcctl
 #define _HEADER_svcctl
 
@@ -27,7 +25,7 @@
 	uint32_t type;
 	uint32_t state;
 	uint32_t controls_accepted;
-	WERROR win32_exit_code;
+	uint32_t win32_exit_code;
 	uint32_t service_exit_code;
 	uint32_t check_point;
 	uint32_t wait_hint;
@@ -68,16 +66,9 @@
 #define SV_TYPE_LOCAL_LIST_ONLY ( 0x40000000 )
 #define SV_TYPE_DOMAIN_ENUM ( 0x80000000 )
 
-enum SERVICE_CONTROL
-#ifndef USE_UINT_ENUMS
- {
+enum SERVICE_CONTROL {
 	FIXME=1
-}
-#else
- { __donnot_use_enum_SERVICE_CONTROL=0x7FFFFFFF}
-#define FIXME ( 1 )
-#endif
-;
+};
 
 
 struct svcctl_CloseServiceHandle {
@@ -100,7 +91,7 @@
 	} in;
 
 	struct {
-		struct SERVICE_STATUS *service_status;/* [ref] */
+		struct SERVICE_STATUS *status;/* [ref] */
 		WERROR result;
 	} out;
 
@@ -134,14 +125,6 @@
 
 struct svcctl_QueryServiceObjectSecurity {
 	struct {
-		struct policy_handle *handle;/* [ref] */
-		uint32_t security_flags;
-		uint32_t buffer_size;/* [range(0,0x40000)] */
-	} in;
-
-	struct {
-		uint8_t *buffer;/* [ref,size_is(buffer_size)] */
-		uint32_t *needed;/* [ref,range(0,0x40000)] */
 		WERROR result;
 	} out;
 
@@ -150,13 +133,6 @@
 
 struct svcctl_SetServiceObjectSecurity {
 	struct {
-		struct policy_handle *handle;/* [ref] */
-		uint32_t security_flags;
-		uint8_t *buffer;/* [ref,size_is(buffer_size)] */
-		uint32_t buffer_size;
-	} in;
-
-	struct {
 		WERROR result;
 	} out;
 
@@ -169,7 +145,7 @@
 	} in;
 
 	struct {
-		struct SERVICE_STATUS *service_status;/* [ref] */
+		struct SERVICE_STATUS *status;/* [ref] */
 		WERROR result;
 	} out;
 
@@ -253,17 +229,17 @@
 		uint32_t error_control;
 		const char *binary_path;/* [charset(UTF16)] */
 		const char *LoadOrderGroupKey;/* [unique,charset(UTF16)] */
+		uint32_t *TagId;/* [unique] */
 		uint8_t *dependencies;/* [unique,size_is(dependencies_size)] */
 		uint32_t dependencies_size;
 		const char *service_start_name;/* [unique,charset(UTF16)] */
 		uint8_t *password;/* [unique,size_is(password_size)] */
 		uint32_t password_size;
-		uint32_t *TagId;/* [unique] */
 	} in;
 
 	struct {
-		struct policy_handle *handle;/* [ref] */
 		uint32_t *TagId;/* [unique] */
+		struct policy_handle *handle;/* [ref] */
 		WERROR result;
 	} out;
 
@@ -278,7 +254,7 @@
 	} in;
 
 	struct {
-		struct ENUM_SERVICE_STATUS *service_status;/* [unique] */
+		struct ENUM_SERVICE_STATUS *status;/* [unique] */
 		uint32_t *bytes_needed;/* [ref] */
 		uint32_t *services_returned;/* [ref] */
 		WERROR result;
@@ -359,7 +335,7 @@
 	} in;
 
 	struct {
-		struct SERVICE_LOCK_STATUS *lock_status;/* [ref] */
+		struct SERVICE_LOCK_STATUS *status;/* [ref] */
 		uint32_t *required_buf_size;/* [ref] */
 		WERROR result;
 	} out;
@@ -371,7 +347,7 @@
 	struct {
 		struct policy_handle *handle;/* [ref] */
 		uint32_t NumArgs;
-		const char *Arguments;/* [unique,charset(UTF16)] */
+		const char *Arguments;/* [unique,charset(UTF16),length_is(NumArgs)] */
 	} in;
 
 	struct {
@@ -482,7 +458,7 @@
 	} in;
 
 	struct {
-		struct ENUM_SERVICE_STATUS *service_status;/* [unique] */
+		struct ENUM_SERVICE_STATUS *status;/* [unique] */
 		uint32_t *bytes_needed;/* [ref] */
 		uint32_t *services_returned;/* [ref] */
 		WERROR result;
@@ -562,7 +538,7 @@
 	} in;
 
 	struct {
-		struct SERVICE_LOCK_STATUS *lock_status;/* [ref] */
+		struct SERVICE_LOCK_STATUS *status;/* [ref] */
 		uint32_t *required_buf_size;/* [ref] */
 		WERROR result;
 	} out;
@@ -574,7 +550,7 @@
 	struct {
 		struct policy_handle *handle;/* [ref] */
 		uint32_t NumArgs;
-		const char *Arguments;/* [unique,charset(UTF16)] */
+		const char *Arguments;/* [unique,charset(UTF16),length_is(NumArgs)] */
 	} in;
 
 	struct {
@@ -722,8 +698,8 @@
 		uint8_t *services;
 		uint32_t *bytes_needed;/* [ref] */
 		uint32_t *service_returned;/* [ref] */
-		const char **group_name;/* [ref,charset(UTF16)] */
 		uint32_t *resume_handle;/* [unique] */
+		const char **group_name;/* [ref,charset(UTF16)] */
 		WERROR result;
 	} out;
 
@@ -744,8 +720,8 @@
 		uint8_t *services;
 		uint32_t *bytes_needed;/* [ref] */
 		uint32_t *service_returned;/* [ref] */
-		const char **group_name;/* [ref,charset(UTF16)] */
 		uint32_t *resume_handle;/* [unique] */
+		const char **group_name;/* [ref,charset(UTF16)] */
 		WERROR result;
 	} out;
 

Deleted: branches/samba/upstream/source/librpc/gen_ndr/winreg.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/winreg.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/winreg.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,624 +0,0 @@
-/* header auto-generated by pidl */
-
-#include <stdint.h>
-
-#include "librpc/gen_ndr/lsa.h"
-#include "librpc/gen_ndr/initshutdown.h"
-#include "librpc/gen_ndr/security.h"
-#ifndef _HEADER_winreg
-#define _HEADER_winreg
-
-/* bitmap winreg_AccessMask */
-#define KEY_QUERY_VALUE ( 0x00001 )
-#define KEY_SET_VALUE ( 0x00002 )
-#define KEY_CREATE_SUB_KEY ( 0x00004 )
-#define KEY_ENUMERATE_SUB_KEYS ( 0x00008 )
-#define KEY_NOTIFY ( 0x00010 )
-#define KEY_CREATE_LINK ( 0x00020 )
-#define KEY_WOW64_64KEY ( 0x00100 )
-#define KEY_WOW64_32KEY ( 0x00200 )
-
-enum winreg_Type
-#ifndef USE_UINT_ENUMS
- {
-	REG_NONE=0,
-	REG_SZ=1,
-	REG_EXPAND_SZ=2,
-	REG_BINARY=3,
-	REG_DWORD=4,
-	REG_DWORD_BIG_ENDIAN=5,
-	REG_LINK=6,
-	REG_MULTI_SZ=7,
-	REG_RESOURCE_LIST=8,
-	REG_FULL_RESOURCE_DESCRIPTOR=9,
-	REG_RESOURCE_REQUIREMENTS_LIST=10,
-	REG_QWORD=11
-}
-#else
- { __donnot_use_enum_winreg_Type=0x7FFFFFFF}
-#define REG_NONE ( 0 )
-#define REG_SZ ( 1 )
-#define REG_EXPAND_SZ ( 2 )
-#define REG_BINARY ( 3 )
-#define REG_DWORD ( 4 )
-#define REG_DWORD_BIG_ENDIAN ( 5 )
-#define REG_LINK ( 6 )
-#define REG_MULTI_SZ ( 7 )
-#define REG_RESOURCE_LIST ( 8 )
-#define REG_FULL_RESOURCE_DESCRIPTOR ( 9 )
-#define REG_RESOURCE_REQUIREMENTS_LIST ( 10 )
-#define REG_QWORD ( 11 )
-#endif
-;
-
-struct winreg_String {
-	uint16_t name_len;/* [value(strlen_m_term(name)*2)] */
-	uint16_t name_size;/* [value(strlen_m_term(name)*2)] */
-	const char *name;/* [unique,charset(UTF16)] */
-}/* [public,noejs] */;
-
-struct KeySecurityData {
-	uint8_t *data;/* [unique,length_is(len),size_is(size)] */
-	uint32_t size;
-	uint32_t len;
-};
-
-struct winreg_SecBuf {
-	uint32_t length;
-	struct KeySecurityData sd;
-	uint8_t inherit;
-};
-
-enum winreg_CreateAction
-#ifndef USE_UINT_ENUMS
- {
-	REG_ACTION_NONE=0,
-	REG_CREATED_NEW_KEY=1,
-	REG_OPENED_EXISTING_KEY=2
-}
-#else
- { __donnot_use_enum_winreg_CreateAction=0x7FFFFFFF}
-#define REG_ACTION_NONE ( 0 )
-#define REG_CREATED_NEW_KEY ( 1 )
-#define REG_OPENED_EXISTING_KEY ( 2 )
-#endif
-;
-
-struct winreg_StringBuf {
-	uint16_t length;/* [value(strlen_m_term_null(name)*2)] */
-	uint16_t size;
-	const char *name;/* [unique,length_is(length/2),charset(UTF16),size_is(size/2)] */
-};
-
-struct winreg_ValNameBuf {
-	uint16_t length;/* [value(strlen_m_term(name)*2)] */
-	uint16_t size;
-	const char *name;/* [unique,length_is(length/2),charset(UTF16),size_is(size/2)] */
-};
-
-struct KeySecurityAttribute {
-	uint32_t data_size;
-	struct KeySecurityData sec_data;
-	uint8_t inherit;
-};
-
-struct QueryMultipleValue {
-	struct winreg_String *name;/* [unique] */
-	enum winreg_Type type;
-	uint32_t offset;
-	uint32_t length;
-};
-
-
-struct winreg_OpenHKCR {
-	struct {
-		uint16_t *system_name;/* [unique] */
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_OpenHKCU {
-	struct {
-		uint16_t *system_name;/* [unique] */
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_OpenHKLM {
-	struct {
-		uint16_t *system_name;/* [unique] */
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_OpenHKPD {
-	struct {
-		uint16_t *system_name;/* [unique] */
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_OpenHKU {
-	struct {
-		uint16_t *system_name;/* [unique] */
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_CloseKey {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-	} in;
-
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_CreateKey {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct winreg_String name;
-		struct winreg_String keyclass;
-		uint32_t options;
-		uint32_t access_mask;
-		struct winreg_SecBuf *secdesc;/* [unique] */
-		enum winreg_CreateAction *action_taken;/* [unique] */
-	} in;
-
-	struct {
-		struct policy_handle *new_handle;/* [ref] */
-		enum winreg_CreateAction *action_taken;/* [unique] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_DeleteKey {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct winreg_String key;
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_DeleteValue {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct winreg_String value;
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_EnumKey {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		uint32_t enum_index;
-		struct winreg_StringBuf *name;/* [ref] */
-		struct winreg_StringBuf *keyclass;/* [unique] */
-		NTTIME *last_changed_time;/* [unique] */
-	} in;
-
-	struct {
-		struct winreg_StringBuf *name;/* [ref] */
-		struct winreg_StringBuf *keyclass;/* [unique] */
-		NTTIME *last_changed_time;/* [unique] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_EnumValue {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		uint32_t enum_index;
-		struct winreg_ValNameBuf *name;/* [ref] */
-		enum winreg_Type *type;/* [unique] */
-		uint8_t *value;/* [unique,length_is(*length),size_is(*size)] */
-		uint32_t *size;/* [unique] */
-		uint32_t *length;/* [unique] */
-	} in;
-
-	struct {
-		struct winreg_ValNameBuf *name;/* [ref] */
-		enum winreg_Type *type;/* [unique] */
-		uint8_t *value;/* [unique,length_is(*length),size_is(*size)] */
-		uint32_t *size;/* [unique] */
-		uint32_t *length;/* [unique] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_FlushKey {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_GetKeySecurity {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		uint32_t sec_info;
-		struct KeySecurityData *sd;/* [ref] */
-	} in;
-
-	struct {
-		struct KeySecurityData *sd;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_LoadKey {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct winreg_String *keyname;/* [unique] */
-		struct winreg_String *filename;/* [unique] */
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_NotifyChangeKeyValue {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		uint8_t watch_subtree;
-		uint32_t notify_filter;
-		uint32_t unknown;
-		struct winreg_String string1;
-		struct winreg_String string2;
-		uint32_t unknown2;
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_OpenKey {
-	struct {
-		struct policy_handle *parent_handle;/* [ref] */
-		struct winreg_String keyname;
-		uint32_t unknown;
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_QueryInfoKey {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct winreg_String *classname;/* [ref] */
-	} in;
-
-	struct {
-		uint32_t *num_subkeys;/* [ref] */
-		uint32_t *max_subkeylen;/* [ref] */
-		uint32_t *max_classlen;/* [ref] */
-		uint32_t *num_values;/* [ref] */
-		uint32_t *max_valnamelen;/* [ref] */
-		uint32_t *max_valbufsize;/* [ref] */
-		uint32_t *secdescsize;/* [ref] */
-		NTTIME *last_changed_time;/* [ref] */
-		struct winreg_String *classname;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_QueryValue {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct winreg_String *value_name;/* [ref] */
-		enum winreg_Type *type;/* [unique] */
-		uint8_t *data;/* [unique,length_is(*value_length),size_is(*data_size)] */
-		uint32_t *data_size;/* [unique] */
-		uint32_t *value_length;/* [unique] */
-	} in;
-
-	struct {
-		enum winreg_Type *type;/* [unique] */
-		uint8_t *data;/* [unique,length_is(*value_length),size_is(*data_size)] */
-		uint32_t *data_size;/* [unique] */
-		uint32_t *value_length;/* [unique] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_ReplaceKey {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_RestoreKey {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct winreg_String *filename;/* [ref] */
-		uint32_t flags;
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_SaveKey {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct winreg_String *filename;/* [ref] */
-		struct KeySecurityAttribute *sec_attrib;/* [unique] */
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_SetKeySecurity {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		uint32_t access_mask;
-		struct KeySecurityData *sd;/* [ref] */
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_SetValue {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		struct winreg_String name;
-		enum winreg_Type type;
-		uint8_t *data;/* [ref,size_is(size)] */
-		uint32_t size;
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_UnLoadKey {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_InitiateSystemShutdown {
-	struct {
-		uint16_t *hostname;/* [unique] */
-		struct initshutdown_String *message;/* [unique] */
-		uint32_t timeout;
-		uint8_t force_apps;
-		uint8_t reboot;
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_AbortSystemShutdown {
-	struct {
-		uint16_t *server;/* [unique] */
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_GetVersion {
-	struct {
-		struct policy_handle *handle;/* [ref] */
-	} in;
-
-	struct {
-		uint32_t *version;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_OpenHKCC {
-	struct {
-		uint16_t *system_name;/* [unique] */
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_OpenHKDD {
-	struct {
-		uint16_t *system_name;/* [unique] */
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_QueryMultipleValues {
-	struct {
-		struct policy_handle *key_handle;/* [ref] */
-		uint32_t num_values;
-		struct QueryMultipleValue *values;/* [ref,length_is(num_values),size_is(num_values)] */
-		uint8_t *buffer;/* [unique,length_is(*buffer_size),size_is(*buffer_size)] */
-		uint32_t *buffer_size;/* [ref] */
-	} in;
-
-	struct {
-		struct QueryMultipleValue *values;/* [ref,length_is(num_values),size_is(num_values)] */
-		uint8_t *buffer;/* [unique,length_is(*buffer_size),size_is(*buffer_size)] */
-		uint32_t *buffer_size;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_InitiateSystemShutdownEx {
-	struct {
-		uint16_t *hostname;/* [unique] */
-		struct initshutdown_String *message;/* [unique] */
-		uint32_t timeout;
-		uint8_t force_apps;
-		uint8_t reboot;
-		uint32_t reason;
-	} in;
-
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_SaveKeyEx {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_OpenHKPT {
-	struct {
-		uint16_t *system_name;/* [unique] */
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_OpenHKPN {
-	struct {
-		uint16_t *system_name;/* [unique] */
-		uint32_t access_mask;
-	} in;
-
-	struct {
-		struct policy_handle *handle;/* [ref] */
-		WERROR result;
-	} out;
-
-};
-
-
-struct winreg_QueryMultipleValues2 {
-	struct {
-		WERROR result;
-	} out;
-
-};
-
-#endif /* _HEADER_winreg */

Modified: branches/samba/upstream/source/librpc/gen_ndr/wkssvc.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/wkssvc.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/wkssvc.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,16 +1,11 @@
 /* header auto-generated by pidl */
 
-#include <stdint.h>
-
 #include "librpc/gen_ndr/srvsvc.h"
-#include "librpc/gen_ndr/lsa.h"
 #ifndef _HEADER_wkssvc
 #define _HEADER_wkssvc
 
-enum srvsvc_PlatformId;
-
 struct wkssvc_NetWkstaInfo100 {
-	enum srvsvc_PlatformId platform_id;
+	uint16_t platform_id;
 	const char *server_name;/* [unique,charset(UTF16)] */
 	const char *domain_name;/* [unique,charset(UTF16)] */
 	uint32_t version_major;
@@ -18,7 +13,7 @@
 };
 
 struct wkssvc_NetWkstaInfo101 {
-	enum srvsvc_PlatformId platform_id;
+	uint16_t platform_id;
 	const char *server_name;/* [unique,charset(UTF16)] */
 	const char *domain_name;/* [unique,charset(UTF16)] */
 	uint32_t version_major;
@@ -27,7 +22,7 @@
 };
 
 struct wkssvc_NetWkstaInfo102 {
-	enum srvsvc_PlatformId platform_id;
+	uint16_t platform_id;
 	const char *server_name;/* [unique,charset(UTF16)] */
 	const char *domain_name;/* [unique,charset(UTF16)] */
 	uint32_t version_major;
@@ -102,106 +97,10 @@
 	uint32_t errorlog_sz;
 };
 
-struct wkssvc_NetWkstaInfo1028 {
-	uint32_t print_buf_time;
-};
-
-struct wkssvc_NetWkstaInfo1032 {
-	uint32_t wrk_heuristics;
-};
-
 struct wkssvc_NetWkstaInfo1033 {
 	uint32_t max_threads;
 };
 
-struct wkssvc_NetWkstaInfo1041 {
-	uint32_t lock_quota;
-};
-
-struct wkssvc_NetWkstaInfo1042 {
-	uint32_t lock_increment;
-};
-
-struct wkssvc_NetWkstaInfo1043 {
-	uint32_t lock_maximum;
-};
-
-struct wkssvc_NetWkstaInfo1044 {
-	uint32_t pipe_increment;
-};
-
-struct wkssvc_NetWkstaInfo1045 {
-	uint32_t pipe_maximum;
-};
-
-struct wkssvc_NetWkstaInfo1046 {
-	uint32_t dormant_file_limit;
-};
-
-struct wkssvc_NetWkstaInfo1047 {
-	uint32_t cache_file_timeout;
-};
-
-struct wkssvc_NetWkstaInfo1048 {
-	uint32_t use_opportunistic_locking;
-};
-
-struct wkssvc_NetWkstaInfo1049 {
-	uint32_t use_unlock_behind;
-};
-
-struct wkssvc_NetWkstaInfo1050 {
-	uint32_t use_close_behind;
-};
-
-struct wkssvc_NetWkstaInfo1051 {
-	uint32_t buf_named_pipes;
-};
-
-struct wkssvc_NetWkstaInfo1052 {
-	uint32_t use_lock_read_unlock;
-};
-
-struct wkssvc_NetWkstaInfo1053 {
-	uint32_t utilize_nt_caching;
-};
-
-struct wkssvc_NetWkstaInfo1054 {
-	uint32_t use_raw_read;
-};
-
-struct wkssvc_NetWkstaInfo1055 {
-	uint32_t use_raw_write;
-};
-
-struct wkssvc_NetWkstaInfo1056 {
-	uint32_t use_write_raw_data;
-};
-
-struct wkssvc_NetWkstaInfo1057 {
-	uint32_t use_encryption;
-};
-
-struct wkssvc_NetWkstaInfo1058 {
-	uint32_t buf_files_deny_write;
-};
-
-struct wkssvc_NetWkstaInfo1059 {
-	uint32_t buf_read_only_files;
-};
-
-struct wkssvc_NetWkstaInfo1060 {
-	uint32_t force_core_create_mode;
-};
-
-struct wkssvc_NetWkstaInfo1061 {
-	uint32_t use_512_byte_max_transfer;
-};
-
-struct wkssvc_NetWkstaInfo1062 {
-	uint32_t read_ahead_throughput;
-};
-
 union wkssvc_NetWkstaInfo {
 	struct wkssvc_NetWkstaInfo100 *info100;/* [unique,case(100)] */
 	struct wkssvc_NetWkstaInfo101 *info101;/* [unique,case(101)] */
@@ -214,74 +113,35 @@
 	struct wkssvc_NetWkstaInfo1018 *info1018;/* [unique,case(1018)] */
 	struct wkssvc_NetWkstaInfo1023 *info1023;/* [unique,case(1023)] */
 	struct wkssvc_NetWkstaInfo1027 *info1027;/* [unique,case(1027)] */
-	struct wkssvc_NetWkstaInfo1028 *info1028;/* [unique,case(1028)] */
-	struct wkssvc_NetWkstaInfo1032 *info1032;/* [unique,case(1032)] */
 	struct wkssvc_NetWkstaInfo1033 *info1033;/* [unique,case(1033)] */
-	struct wkssvc_NetWkstaInfo1041 *info1041;/* [unique,case(1041)] */
-	struct wkssvc_NetWkstaInfo1042 *info1042;/* [unique,case(1042)] */
-	struct wkssvc_NetWkstaInfo1043 *info1043;/* [unique,case(1043)] */
-	struct wkssvc_NetWkstaInfo1044 *info1044;/* [unique,case(1044)] */
-	struct wkssvc_NetWkstaInfo1045 *info1045;/* [unique,case(1045)] */
-	struct wkssvc_NetWkstaInfo1046 *info1046;/* [unique,case(1046)] */
-	struct wkssvc_NetWkstaInfo1047 *info1047;/* [unique,case(1047)] */
-	struct wkssvc_NetWkstaInfo1048 *info1048;/* [unique,case(1048)] */
-	struct wkssvc_NetWkstaInfo1049 *info1049;/* [unique,case(1049)] */
-	struct wkssvc_NetWkstaInfo1050 *info1050;/* [unique,case(1050)] */
-	struct wkssvc_NetWkstaInfo1051 *info1051;/* [unique,case(1051)] */
-	struct wkssvc_NetWkstaInfo1052 *info1052;/* [unique,case(1052)] */
-	struct wkssvc_NetWkstaInfo1053 *info1053;/* [unique,case(1053)] */
-	struct wkssvc_NetWkstaInfo1054 *info1054;/* [unique,case(1054)] */
-	struct wkssvc_NetWkstaInfo1055 *info1055;/* [unique,case(1055)] */
-	struct wkssvc_NetWkstaInfo1056 *info1056;/* [unique,case(1056)] */
-	struct wkssvc_NetWkstaInfo1057 *info1057;/* [unique,case(1057)] */
-	struct wkssvc_NetWkstaInfo1058 *info1058;/* [unique,case(1058)] */
-	struct wkssvc_NetWkstaInfo1059 *info1059;/* [unique,case(1059)] */
-	struct wkssvc_NetWkstaInfo1060 *info1060;/* [unique,case(1060)] */
-	struct wkssvc_NetWkstaInfo1061 *info1061;/* [unique,case(1061)] */
-	struct wkssvc_NetWkstaInfo1062 *info1062;/* [unique,case(1062)] */
 };
 
-struct wkssvc_NetrWkstaUserInfo0 {
-	const char *user_name;/* [unique,charset(UTF16)] */
+struct USER_INFO_0 {
+	const char *user;/* [unique,charset(UTF16)] */
 };
 
-struct wkssvc_NetWkstaEnumUsersCtr0 {
+struct USER_INFO_0_CONTAINER {
 	uint32_t entries_read;
-	struct wkssvc_NetrWkstaUserInfo0 *user0;/* [unique,size_is(entries_read)] */
+	struct USER_INFO_0 *user0;/* [unique,size_is(entries_read)] */
 };
 
-struct wkssvc_NetrWkstaUserInfo1 {
+struct USER_INFO_1 {
 	const char *user_name;/* [unique,charset(UTF16)] */
 	const char *logon_domain;/* [unique,charset(UTF16)] */
 	const char *other_domains;/* [unique,charset(UTF16)] */
 	const char *logon_server;/* [unique,charset(UTF16)] */
 };
 
-struct wkssvc_NetWkstaEnumUsersCtr1 {
+struct USER_INFO_1_CONTAINER {
 	uint32_t entries_read;
-	struct wkssvc_NetrWkstaUserInfo1 *user1;/* [unique,size_is(entries_read)] */
+	struct USER_INFO_1 *user1;/* [unique,size_is(entries_read)] */
 };
 
-union wkssvc_NetWkstaEnumUsersCtr {
-	struct wkssvc_NetWkstaEnumUsersCtr0 *user0;/* [unique,case(0)] */
-	struct wkssvc_NetWkstaEnumUsersCtr1 *user1;/* [unique,case] */
+union WKS_USER_ENUM_UNION {
+	struct USER_INFO_0_CONTAINER *user0;/* [unique,case(0)] */
+	struct USER_INFO_1_CONTAINER *user1;/* [unique,case] */
 }/* [switch_type(uint32)] */;
 
-struct wkssvc_NetWkstaEnumUsersInfo {
-	uint32_t level;
-	union wkssvc_NetWkstaEnumUsersCtr ctr;/* [switch_is(level)] */
-};
-
-struct wkssvc_NetrWkstaUserInfo1101 {
-	const char *other_domains;/* [unique,charset(UTF16)] */
-};
-
-union wkssvc_NetrWkstaUserInfo {
-	struct wkssvc_NetrWkstaUserInfo0 *info0;/* [unique,case(0)] */
-	struct wkssvc_NetrWkstaUserInfo1 *info1;/* [unique,case] */
-	struct wkssvc_NetrWkstaUserInfo1101 *info1101;/* [unique,case(1101)] */
-}/* [switch_type(uint32)] */;
-
 struct wkssvc_NetWkstaTransportInfo0 {
 	uint32_t quality_of_service;
 	uint32_t vc_count;
@@ -299,167 +159,11 @@
 	struct wkssvc_NetWkstaTransportCtr0 *ctr0;/* [unique,case(0)] */
 };
 
-struct wkssvc_NetWkstaTransportInfo {
-	uint32_t level;
-	union wkssvc_NetWkstaTransportCtr ctr;/* [switch_is(level)] */
-};
-
-struct wkssvc_NetrUseInfo3 {
-	const char *unknown1;/* [unique,charset(UTF16)] */
-	const char *unknown2;/* [unique,charset(UTF16)] */
-};
-
-struct wkssvc_NetrUseInfo2 {
-	const char *local;/* [unique,charset(UTF16)] */
-	const char *remote;/* [unique,charset(UTF16)] */
-	const char *password;/* [unique,charset(UTF16)] */
-	uint32_t status;
-	uint32_t asg_type;
-	uint32_t ref_count;
-	uint32_t use_count;
-	const char *user_name;/* [unique,charset(UTF16)] */
-	const char *domain_name;/* [unique,charset(UTF16)] */
-};
-
-struct wkssvc_NetrUseInfo1 {
-	const char *local;/* [unique,charset(UTF16)] */
-	const char *remote;/* [unique,charset(UTF16)] */
-	const char *password;/* [unique,charset(UTF16)] */
-	uint32_t status;
-	uint32_t asg_type;
-	uint32_t ref_count;
-	uint32_t use_count;
-};
-
-struct wkssvc_NetrUseInfo0 {
-	const char *local;/* [unique,charset(UTF16)] */
-	const char *remote;/* [unique,charset(UTF16)] */
-};
-
-union wkssvc_NetrUseGetInfoCtr {
-	struct wkssvc_NetrUseInfo0 *info0;/* [unique,case(0)] */
-	struct wkssvc_NetrUseInfo1 *info1;/* [unique,case] */
-	struct wkssvc_NetrUseInfo2 *info2;/* [unique,case(2)] */
-	struct wkssvc_NetrUseInfo3 *info3;/* [unique,case(3)] */
-}/* [switch_type(uint32)] */;
-
-struct wkssvc_NetrUseEnumCtr2 {
-	uint32_t count;
-	struct wkssvc_NetrUseInfo2 *array;/* [unique,size_is(count)] */
-};
-
-struct wkssvc_NetrUseEnumCtr1 {
-	uint32_t count;
-	struct wkssvc_NetrUseInfo1 *array;/* [unique,size_is(count)] */
-};
-
-struct wkssvc_NetrUseEnumCtr0 {
-	uint32_t count;
-	struct wkssvc_NetrUseInfo0 *array;/* [unique,size_is(count)] */
-};
-
-union wkssvc_NetrUseEnumCtr {
-	struct wkssvc_NetrUseEnumCtr0 *ctr0;/* [unique,case(0)] */
-	struct wkssvc_NetrUseEnumCtr1 *ctr1;/* [unique,case] */
-	struct wkssvc_NetrUseEnumCtr2 *ctr2;/* [unique,case(2)] */
-}/* [switch_type(uint32)] */;
-
-struct wkssvc_NetrUseEnumInfo {
-	uint32_t level;
-	union wkssvc_NetrUseEnumCtr ctr;/* [switch_is(level)] */
-};
-
-struct wkssvc_NetrWorkstationStatistics {
-	uint64_t unknown1;
-	uint64_t unknown2;
-	uint64_t unknown3;
-	uint64_t unknown4;
-	uint64_t unknown5;
-	uint64_t unknown6;
-	uint64_t unknown7;
-	uint64_t unknown8;
-	uint64_t unknown9;
-	uint64_t unknown10;
-	uint64_t unknown11;
-	uint64_t unknown12;
-	uint64_t unknown13;
-	uint32_t unknown14;
-	uint32_t unknown15;
-	uint32_t unknown16;
-	uint32_t unknown17;
-	uint32_t unknown18;
-	uint32_t unknown19;
-	uint32_t unknown20;
-	uint32_t unknown21;
-	uint32_t unknown22;
-	uint32_t unknown23;
-	uint32_t unknown24;
-	uint32_t unknown25;
-	uint32_t unknown26;
-	uint32_t unknown27;
-	uint32_t unknown28;
-	uint32_t unknown29;
-	uint32_t unknown30;
-	uint32_t unknown31;
-	uint32_t unknown32;
-	uint32_t unknown33;
-	uint32_t unknown34;
-	uint32_t unknown35;
-	uint32_t unknown36;
-	uint32_t unknown37;
-	uint32_t unknown38;
-	uint32_t unknown39;
-	uint32_t unknown40;
-};
-
-/* bitmap wkssvc_renameflags */
-#define WKSSVC_JOIN_FLAGS_ACCOUNT_CREATE ( 0x00000002 )
-
-enum wkssvc_NetValidateNameType
-#ifndef USE_UINT_ENUMS
- {
-	NetSetupUnknown=0,
-	NetSetupMachine=1,
-	NetSetupWorkgroup=2,
-	NetSetupDomain=3,
-	NetSetupNonExistentDomain=4,
-	NetSetupDnsMachine=5
-}
-#else
- { __donnot_use_enum_wkssvc_NetValidateNameType=0x7FFFFFFF}
-#define NetSetupUnknown ( 0 )
-#define NetSetupMachine ( 1 )
-#define NetSetupWorkgroup ( 2 )
-#define NetSetupDomain ( 3 )
-#define NetSetupNonExistentDomain ( 4 )
-#define NetSetupDnsMachine ( 5 )
-#endif
-;
-
-enum wkssvc_NetJoinStatus
-#ifndef USE_UINT_ENUMS
- {
-	NetSetupUnknownStatus=0,
-	NetSetupUnjoined=1,
-	NetSetupWorkgroupName=2,
-	NetSetupDomainName=3
-}
-#else
- { __donnot_use_enum_wkssvc_NetJoinStatus=0x7FFFFFFF}
-#define NetSetupUnknownStatus ( 0 )
-#define NetSetupUnjoined ( 1 )
-#define NetSetupWorkgroupName ( 2 )
-#define NetSetupDomainName ( 3 )
-#endif
-;
-
 struct wkssvc_PasswordBuffer {
 	uint8_t data[524];
-}/* [flag(LIBNDR_PRINT_ARRAY_HEX)] */;
+};
 
 /* bitmap wkssvc_joinflags */
-#define WKSSVC_JOIN_FLAGS_JOIN_WITH_NEW_NAME ( 0x00000400 )
-#define WKSSVC_JOIN_FLAGS_JOIN_DC_ACCOUNT ( 0x00000200 )
 #define WKSSVC_JOIN_FLAGS_DEFER_SPN ( 0x00000100 )
 #define WKSSVC_JOIN_FLAGS_MACHINE_PWD_PASSED ( 0x00000080 )
 #define WKSSVC_JOIN_FLAGS_JOIN_UNSECURE ( 0x00000040 )
@@ -469,29 +173,10 @@
 #define WKSSVC_JOIN_FLAGS_ACCOUNT_CREATE ( 0x00000002 )
 #define WKSSVC_JOIN_FLAGS_JOIN_TYPE ( 0x00000001 )
 
-enum wkssvc_ComputerNameType
-#ifndef USE_UINT_ENUMS
- {
-	NetPrimaryComputerName=0,
-	NetAlternateComputerNames=1,
-	NetAllComputerNames=2,
-	NetComputerNameTypeMax=3
-}
-#else
- { __donnot_use_enum_wkssvc_ComputerNameType=0x7FFFFFFF}
-#define NetPrimaryComputerName ( 0 )
-#define NetAlternateComputerNames ( 1 )
-#define NetAllComputerNames ( 2 )
-#define NetComputerNameTypeMax ( 3 )
-#endif
-;
+/* bitmap wkssvc_renameflags */
+#define WKSSVC_JOIN_FLAGS_ACCOUNT_CREATE ( 0x00000002 )
 
-struct wkssvc_ComputerNamesCtr {
-	uint32_t count;
-	struct lsa_String *computer_name;/* [unique,size_is(count)] */
-};
 
-
 struct wkssvc_NetWkstaGetInfo {
 	struct {
 		const char *server_name;/* [unique,charset(UTF16)] */
@@ -525,45 +210,33 @@
 struct wkssvc_NetWkstaEnumUsers {
 	struct {
 		const char *server_name;/* [unique,charset(UTF16)] */
+		uint32_t level;
+		union WKS_USER_ENUM_UNION *users;/* [ref] */
 		uint32_t prefmaxlen;
-		struct wkssvc_NetWkstaEnumUsersInfo *info;/* [ref] */
-		uint32_t *resume_handle;/* [unique] */
+		uint32_t *resumehandle;/* [ref] */
 	} in;
 
 	struct {
-		uint32_t *entries_read;/* [ref] */
-		struct wkssvc_NetWkstaEnumUsersInfo *info;/* [ref] */
-		uint32_t *resume_handle;/* [unique] */
+		union WKS_USER_ENUM_UNION *users;/* [ref] */
+		uint32_t *entriesread;/* [unique] */
+		uint32_t *totalentries;/* [unique] */
+		uint32_t *resumehandle;/* [ref] */
 		WERROR result;
 	} out;
 
 };
 
 
-struct wkssvc_NetrWkstaUserGetInfo {
+struct WKSSVC_NETRWKSTAUSERGETINFO {
 	struct {
-		const char *unknown;/* [unique,charset(UTF16)] */
-		uint32_t level;
-	} in;
-
-	struct {
-		union wkssvc_NetrWkstaUserInfo *info;/* [ref,switch_is(level)] */
 		WERROR result;
 	} out;
 
 };
 
 
-struct wkssvc_NetrWkstaUserSetInfo {
+struct WKSSVC_NETRWKSTAUSERSETINFO {
 	struct {
-		const char *unknown;/* [unique,charset(UTF16)] */
-		uint32_t level;
-		union wkssvc_NetrWkstaUserInfo *info;/* [ref,switch_is(level)] */
-		uint32_t *parm_err;/* [unique] */
-	} in;
-
-	struct {
-		uint32_t *parm_err;/* [unique] */
 		WERROR result;
 	} out;
 
@@ -573,261 +246,145 @@
 struct wkssvc_NetWkstaTransportEnum {
 	struct {
 		const char *server_name;/* [unique,charset(UTF16)] */
+		uint32_t *level;/* [ref] */
+		union wkssvc_NetWkstaTransportCtr *ctr;/* [ref,switch_is(*level)] */
 		uint32_t max_buffer;
-		struct wkssvc_NetWkstaTransportInfo *info;/* [ref] */
-		uint32_t *resume_handle;/* [unique] */
+		uint32_t *resume_handle;/* [ref] */
 	} in;
 
 	struct {
-		uint32_t *total_entries;/* [ref] */
-		struct wkssvc_NetWkstaTransportInfo *info;/* [ref] */
-		uint32_t *resume_handle;/* [unique] */
+		uint32_t *level;/* [ref] */
+		union wkssvc_NetWkstaTransportCtr *ctr;/* [ref,switch_is(*level)] */
+		uint32_t *totalentries;/* [unique] */
+		uint32_t *resume_handle;/* [ref] */
 		WERROR result;
 	} out;
 
 };
 
 
-struct wkssvc_NetrWkstaTransportAdd {
+struct WKSSVC_NETRWKSTATRANSPORTADD {
 	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		uint32_t level;
-		struct wkssvc_NetWkstaTransportInfo0 *info0;/* [ref] */
-		uint32_t *parm_err;/* [unique] */
-	} in;
-
-	struct {
-		uint32_t *parm_err;/* [unique] */
 		WERROR result;
 	} out;
 
 };
 
 
-struct wkssvc_NetrWkstaTransportDel {
+struct WKSSVC_NETRWKSTATRANSPORTDEL {
 	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *transport_name;/* [unique,charset(UTF16)] */
-		uint32_t unknown3;
-	} in;
-
-	struct {
 		WERROR result;
 	} out;
 
 };
 
 
-struct wkssvc_NetrUseAdd {
+struct WKSSVC_NETRUSEADD {
 	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		uint32_t level;
-		union wkssvc_NetrUseGetInfoCtr *ctr;/* [ref,switch_is(level)] */
-		uint32_t *parm_err;/* [unique] */
-	} in;
-
-	struct {
-		uint32_t *parm_err;/* [unique] */
 		WERROR result;
 	} out;
 
 };
 
 
-struct wkssvc_NetrUseGetInfo {
+struct WKSSVC_NETRUSEGETINFO {
 	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *use_name;/* [ref,charset(UTF16)] */
-		uint32_t level;
-	} in;
-
-	struct {
-		union wkssvc_NetrUseGetInfoCtr *ctr;/* [ref,switch_is(level)] */
 		WERROR result;
 	} out;
 
 };
 
 
-struct wkssvc_NetrUseDel {
+struct WKSSVC_NETRUSEDEL {
 	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *use_name;/* [ref,charset(UTF16)] */
-		uint32_t force_cond;
-	} in;
-
-	struct {
 		WERROR result;
 	} out;
 
 };
 
 
-struct wkssvc_NetrUseEnum {
+struct WKSSVC_NETRUSEENUM {
 	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		uint32_t prefmaxlen;
-		struct wkssvc_NetrUseEnumInfo *info;/* [ref] */
-		uint32_t *resume_handle;/* [unique] */
-	} in;
-
-	struct {
-		uint32_t *entries_read;/* [ref] */
-		struct wkssvc_NetrUseEnumInfo *info;/* [ref] */
-		uint32_t *resume_handle;/* [unique] */
 		WERROR result;
 	} out;
 
 };
 
 
-struct wkssvc_NetrMessageBufferSend {
+struct WKSSVC_NETRMESSAGEBUFFERSEND {
 	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *message_name;/* [ref,charset(UTF16)] */
-		const char *message_sender_name;/* [unique,charset(UTF16)] */
-		uint8_t *message_buffer;/* [ref,size_is(message_size)] */
-		uint32_t message_size;
-	} in;
-
-	struct {
 		WERROR result;
 	} out;
 
 };
 
 
-struct wkssvc_NetrWorkstationStatisticsGet {
+struct WKSSVC_NETRWORKSTATIONSTATISTICSGET {
 	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *unknown2;/* [unique,charset(UTF16)] */
-		uint32_t unknown3;
-		uint32_t unknown4;
-	} in;
-
-	struct {
-		struct wkssvc_NetrWorkstationStatistics **info;/* [ref] */
 		WERROR result;
 	} out;
 
 };
 
 
-struct wkssvc_NetrLogonDomainNameAdd {
+struct WKSSVC_NETRLOGONDOMAINNAMEADD {
 	struct {
-		const char *domain_name;/* [ref,charset(UTF16)] */
-	} in;
-
-	struct {
 		WERROR result;
 	} out;
 
 };
 
 
-struct wkssvc_NetrLogonDomainNameDel {
+struct WKSSVC_NETRLOGONDOMAINNAMEDEL {
 	struct {
-		const char *domain_name;/* [ref,charset(UTF16)] */
-	} in;
-
-	struct {
 		WERROR result;
 	} out;
 
 };
 
 
-struct wkssvc_NetrJoinDomain {
+struct WKSSVC_NETRJOINDOMAIN {
 	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *domain_name;/* [ref,charset(UTF16)] */
-		const char *account_ou;/* [unique,charset(UTF16)] */
-		const char *Account;/* [unique,charset(UTF16)] */
-		const char *password;/* [unique,charset(UTF16)] */
-		uint32_t join_flags;
-	} in;
-
-	struct {
 		WERROR result;
 	} out;
 
 };
 
 
-struct wkssvc_NetrUnjoinDomain {
+struct WKSSVC_NETRUNJOINDOMAIN {
 	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *Account;/* [unique,charset(UTF16)] */
-		const char *password;/* [unique,charset(UTF16)] */
-		uint32_t unjoin_flags;
-	} in;
-
-	struct {
 		WERROR result;
 	} out;
 
 };
 
 
-struct wkssvc_NetrRenameMachineInDomain {
+struct WKSSVC_NETRRENAMEMACHINEINDOMAIN {
 	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *NewMachineName;/* [unique,charset(UTF16)] */
-		const char *Account;/* [unique,charset(UTF16)] */
-		const char *password;/* [unique,charset(UTF16)] */
-		uint32_t RenameOptions;
-	} in;
-
-	struct {
 		WERROR result;
 	} out;
 
 };
 
 
-struct wkssvc_NetrValidateName {
+struct WKSSVC_NETRVALIDATENAME {
 	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *name;/* [ref,charset(UTF16)] */
-		const char *Account;/* [unique,charset(UTF16)] */
-		const char *Password;/* [unique,charset(UTF16)] */
-		enum wkssvc_NetValidateNameType name_type;
-	} in;
-
-	struct {
 		WERROR result;
 	} out;
 
 };
 
 
-struct wkssvc_NetrGetJoinInformation {
+struct WKSSVC_NETRGETJOININFORMATION {
 	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char **name_buffer;/* [ref,charset(UTF16)] */
-	} in;
-
-	struct {
-		enum wkssvc_NetJoinStatus *name_type;/* [ref] */
-		const char **name_buffer;/* [ref,charset(UTF16)] */
 		WERROR result;
 	} out;
 
 };
 
 
-struct wkssvc_NetrGetJoinableOus {
+struct WKSSVC_NETRGETJOINABLEOUS {
 	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *domain_name;/* [ref,charset(UTF16)] */
-		const char *Account;/* [unique,charset(UTF16)] */
-		const char *unknown;/* [unique,charset(UTF16)] */
-		uint32_t *num_ous;/* [ref] */
-	} in;
-
-	struct {
-		const char ***ous;/* [ref,charset(UTF16),size_is(,*num_ous)] */
-		uint32_t *num_ous;/* [ref] */
 		WERROR result;
 	} out;
 
@@ -838,7 +395,7 @@
 	struct {
 		const char *server_name;/* [unique,charset(UTF16)] */
 		const char *domain_name;/* [ref,charset(UTF16)] */
-		const char *account_ou;/* [unique,charset(UTF16)] */
+		const char *account_name;/* [unique,charset(UTF16)] */
 		const char *admin_account;/* [unique,charset(UTF16)] */
 		struct wkssvc_PasswordBuffer *encrypted_password;/* [unique] */
 		uint32_t join_flags;
@@ -882,34 +439,16 @@
 };
 
 
-struct wkssvc_NetrValidateName2 {
+struct WKSSVC_NETRVALIDATENAME2 {
 	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *name;/* [ref,charset(UTF16)] */
-		const char *Account;/* [unique,charset(UTF16)] */
-		struct wkssvc_PasswordBuffer *EncryptedPassword;/* [unique] */
-		enum wkssvc_NetValidateNameType name_type;
-	} in;
-
-	struct {
 		WERROR result;
 	} out;
 
 };
 
 
-struct wkssvc_NetrGetJoinableOus2 {
+struct WKSSVC_NETRGETJOINABLEOUS2 {
 	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *domain_name;/* [ref,charset(UTF16)] */
-		const char *Account;/* [unique,charset(UTF16)] */
-		struct wkssvc_PasswordBuffer *EncryptedPassword;/* [unique] */
-		uint32_t *num_ous;/* [ref] */
-	} in;
-
-	struct {
-		const char ***ous;/* [ref,charset(UTF16),size_is(,*num_ous)] */
-		uint32_t *num_ous;/* [ref] */
 		WERROR result;
 	} out;
 
@@ -948,31 +487,16 @@
 };
 
 
-struct wkssvc_NetrSetPrimaryComputername {
+struct WKSSVC_NETRSETPRIMARYCOMPUTERNAME {
 	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		const char *primary_name;/* [unique,charset(UTF16)] */
-		const char *Account;/* [unique,charset(UTF16)] */
-		struct wkssvc_PasswordBuffer *EncryptedPassword;/* [unique] */
-		uint32_t Reserved;
-	} in;
-
-	struct {
 		WERROR result;
 	} out;
 
 };
 
 
-struct wkssvc_NetrEnumerateComputerNames {
+struct WKSSVC_NETRENUMERATECOMPUTERNAMES {
 	struct {
-		const char *server_name;/* [unique,charset(UTF16)] */
-		enum wkssvc_ComputerNameType name_type;
-		uint32_t Reserved;
-	} in;
-
-	struct {
-		struct wkssvc_ComputerNamesCtr **ctr;/* [ref] */
 		WERROR result;
 	} out;
 

Deleted: branches/samba/upstream/source/librpc/gen_ndr/xattr.h
===================================================================
--- branches/samba/upstream/source/librpc/gen_ndr/xattr.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/gen_ndr/xattr.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,18 +0,0 @@
-/* header auto-generated by pidl */
-
-#include <stdint.h>
-
-#ifndef _HEADER_xattr
-#define _HEADER_xattr
-
-struct tdb_xattr {
-	const char * name;/* [flag(LIBNDR_FLAG_STR_UTF8|LIBNDR_FLAG_STR_NULLTERM)] */
-	DATA_BLOB value;
-}/* [public] */;
-
-struct tdb_xattrs {
-	uint32_t num_xattrs;
-	struct tdb_xattr *xattrs;
-}/* [public] */;
-
-#endif /* _HEADER_xattr */

Modified: branches/samba/upstream/source/librpc/ndr/libndr.h
===================================================================
--- branches/samba/upstream/source/librpc/ndr/libndr.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/ndr/libndr.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef __LIBNDR_H__
@@ -22,9 +23,14 @@
 
 #define _PRINTF_ATTRIBUTE(a,b) 
 
-#include "librpc/gen_ndr/misc.h"
-#include "librpc/gen_ndr/security.h"
+#include "librpc/ndr/misc.h"
+#include "librpc/ndr/security.h"
 
+struct dcerpc_syntax_id {
+	struct GUID uuid;
+	uint32_t if_version;
+}/* [public] */;
+
 /*
   this provides definitions for the libcli/rpc/ MSRPC library
 */
@@ -87,7 +93,6 @@
 	struct ndr_token_list *switch_list;
 	struct ndr_token_list *relative_list;
 	struct ndr_token_list *nbt_string_list;
-	struct ndr_token_list *full_ptr_list;
 
 	/* this is used to ensure we generate unique reference IDs */
 	uint32_t ptr_count;
@@ -104,7 +109,7 @@
 	uint32_t flags; /* LIBNDR_FLAG_* */
 	uint32_t depth;
 	struct ndr_token_list *switch_list;
-	void (*print)(struct ndr_print *, const char *, ...) PRINTF_ATTRIBUTE(2,3);
+	void (*print)(struct ndr_print *, const char *, ...);
 	void *private_data;
 };
 
@@ -149,7 +154,7 @@
 /* set to avoid recursion in ndr_size_*() calculation */
 #define LIBNDR_FLAG_NO_NDR_SIZE		(1<<31)
 
-/* useful macro for debugging with DEBUG */
+/* useful macro for debugging */
 #define NDR_PRINT_DEBUG(type, p) ndr_print_debug((ndr_print_fn_t)ndr_print_ ##type, #p, p)
 #define NDR_PRINT_UNION_DEBUG(type, level, p) ndr_print_union_debug((ndr_print_fn_t)ndr_print_ ##type, #p, level, p)
 #define NDR_PRINT_FUNCTION_DEBUG(type, flags, p) ndr_print_function_debug((ndr_print_function_t)ndr_print_ ##type, #type, flags, p)
@@ -157,18 +162,9 @@
 #define NDR_PRINT_OUT_DEBUG(type, p) NDR_PRINT_FUNCTION_DEBUG(type, NDR_OUT, p)
 #define NDR_PRINT_IN_DEBUG(type, p) NDR_PRINT_FUNCTION_DEBUG(type, NDR_IN | NDR_SET_VALUES, p)
 
-/* useful macro for debugging in strings */
-#define NDR_PRINT_STRUCT_STRING(ctx, type, p) ndr_print_struct_string(ctx, (ndr_print_fn_t)ndr_print_ ##type, #p, p)
-#define NDR_PRINT_UNION_STRING(ctx, type, level, p) ndr_print_union_string(ctx, (ndr_print_fn_t)ndr_print_ ##type, #p, level, p)
-#define NDR_PRINT_FUNCTION_STRING(ctx, type, flags, p) ndr_print_function_string(ctx, (ndr_print_function_t)ndr_print_ ##type, #type, flags, p)
-#define NDR_PRINT_BOTH_STRING(ctx, type, p) NDR_PRINT_FUNCTION_STRING(ctx, type, NDR_BOTH, p)
-#define NDR_PRINT_OUT_STRING(ctx, type, p) NDR_PRINT_FUNCTION_STRING(ctx, type, NDR_OUT, p)
-#define NDR_PRINT_IN_STRING(ctx, type, p) NDR_PRINT_FUNCTION_STRING(ctx, type, NDR_IN | NDR_SET_VALUES, p)
-
 #define NDR_BE(ndr) (((ndr)->flags & (LIBNDR_FLAG_BIGENDIAN|LIBNDR_FLAG_LITTLE_ENDIAN)) == LIBNDR_FLAG_BIGENDIAN)
 
 enum ndr_err_code {
-	NDR_ERR_SUCCESS = 0,
 	NDR_ERR_ARRAY_SIZE,
 	NDR_ERR_BAD_SWITCH,
 	NDR_ERR_OFFSET,
@@ -183,19 +179,9 @@
 	NDR_ERR_ALLOC,
 	NDR_ERR_RANGE,
 	NDR_ERR_TOKEN,
-	NDR_ERR_IPV4ADDRESS,
-	NDR_ERR_INVALID_POINTER,
-	NDR_ERR_UNREAD_BYTES
+	NDR_ERR_IPV4ADDRESS
 };
 
-#define NDR_ERR_CODE_IS_SUCCESS(x) (x == NDR_ERR_SUCCESS)
-
-#define NDR_ERR_HAVE_NO_MEMORY(x) do { \
-	if (NULL == (x)) { \
-		return NDR_ERR_ALLOC; \
-	} \
-} while (0)
-
 enum ndr_compression_alg {
 	NDR_COMPRESSION_MSZIP	= 2,
 	NDR_COMPRESSION_XPRESS	= 3
@@ -248,13 +234,11 @@
 
 /* these are used to make the error checking on each element in libndr
    less tedious, hopefully making the code more readable */
-#define NDR_CHECK(call) do { \
-	enum ndr_err_code _status; \
-	_status = call; \
-	if (!NDR_ERR_CODE_IS_SUCCESS(_status)) { \
-		return _status; \
-	} \
-} while (0)
+#define NDR_CHECK(call) do { NTSTATUS _status; \
+                             _status = call; \
+                             if (!NT_STATUS_IS_OK(_status)) \
+                                return _status; \
+                        } while (0)
 
 #define NDR_PULL_GET_MEM_CTX(ndr) (ndr->current_mem_ctx)
 
@@ -263,7 +247,7 @@
 		if (!(mem_ctx)) {\
 			return ndr_pull_error(ndr, NDR_ERR_ALLOC, "NDR_PULL_SET_MEM_CTX(NULL): %s\n", __location__); \
 		}\
-		ndr->current_mem_ctx = discard_const(mem_ctx);\
+		ndr->current_mem_ctx = CONST_DISCARD(TALLOC_CTX *, mem_ctx);\
 	}\
 } while(0)
 
@@ -290,7 +274,7 @@
 
 
 #define NDR_PUSH_ALLOC_SIZE(ndr, s, size) do { \
-       (s) = talloc_array(ndr, uint8_t, size); \
+       (s) = talloc_array(ndr, uint8, size); \
        if (!(s)) return ndr_push_error(ndr, NDR_ERR_ALLOC, "push alloc %u failed: %s\n", (unsigned)size, __location__); \
 } while (0)
 
@@ -300,52 +284,14 @@
 } while (0)
 
 /* these are used when generic fn pointers are needed for ndr push/pull fns */
-typedef enum ndr_err_code (*ndr_push_flags_fn_t)(struct ndr_push *, int ndr_flags, const void *);
-typedef enum ndr_err_code (*ndr_pull_flags_fn_t)(struct ndr_pull *, int ndr_flags, void *);
+typedef NTSTATUS (*ndr_push_flags_fn_t)(struct ndr_push *, int ndr_flags, const void *);
+typedef NTSTATUS (*ndr_pull_flags_fn_t)(struct ndr_pull *, int ndr_flags, void *);
 typedef void (*ndr_print_fn_t)(struct ndr_print *, const char *, const void *);
 typedef void (*ndr_print_function_t)(struct ndr_print *, const char *, int, const void *);
 
-extern const struct ndr_syntax_id ndr_transfer_syntax;
-extern const struct ndr_syntax_id ndr64_transfer_syntax;
+extern const struct dcerpc_syntax_id ndr_transfer_syntax;
+extern const struct dcerpc_syntax_id ndr64_transfer_syntax;
 
-struct ndr_interface_call {
-	const char *name;
-	size_t struct_size;
-	ndr_push_flags_fn_t ndr_push;
-	ndr_pull_flags_fn_t ndr_pull;
-	ndr_print_function_t ndr_print;
-	bool async;
-};
+#include "dcerpc.h"
 
-struct ndr_interface_string_array {
-	uint32_t count;
-	const char * const *names;
-};
-
-struct ndr_interface_table {
-	const char *name;
-	struct ndr_syntax_id syntax_id;
-	const char *helpstring;
-	uint32_t num_calls;
-	const struct ndr_interface_call *calls;
-	const struct ndr_interface_string_array *endpoints;
-	const struct ndr_interface_string_array *authservices;
-};
-
-struct ndr_interface_list {
-	struct ndr_interface_list *prev, *next;
-	const struct ndr_interface_table *table;
-};
-
-#define NDR_SCALAR_PROTO(name, type) \
-enum ndr_err_code ndr_push_ ## name(struct ndr_push *ndr, int ndr_flags, type v); \
-enum ndr_err_code ndr_pull_ ## name(struct ndr_pull *ndr, int ndr_flags, type *v); \
-void ndr_print_ ## name(struct ndr_print *ndr, const char *var_name, type v);
-
-#define NDR_BUFFER_PROTO(name, type) \
-enum ndr_err_code ndr_push_ ## name(struct ndr_push *ndr, int ndr_flags, const type *v); \
-enum ndr_err_code ndr_pull_ ## name(struct ndr_pull *ndr, int ndr_flags, type *v); \
-void ndr_print_ ## name(struct ndr_print *ndr, const char *var_name, const type *v);
-
-
 #endif /* __LIBNDR_H__ */

Copied: branches/samba/upstream/source/librpc/ndr/misc.h (from rev 1928, branches/samba/upstream/source/librpc/ndr/misc.h)
===================================================================
--- branches/samba/upstream/source/librpc/ndr/misc.h	                        (rev 0)
+++ branches/samba/upstream/source/librpc/ndr/misc.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,37 @@
+/* header auto-generated by pidl */
+
+#ifndef _HEADER_misc
+#define _HEADER_misc
+
+struct GUID {
+	uint32_t time_low;
+	uint16_t time_mid;
+	uint16_t time_hi_and_version;
+	uint8_t clock_seq[2];
+	uint8_t node[6];
+}/* [noprint,gensize,public,noejs] */;
+
+struct policy_handle {
+	uint32_t handle_type;
+	struct GUID uuid;
+}/* [public] */;
+
+enum netr_SchannelType {
+	SEC_CHAN_WKSTA=2,
+	SEC_CHAN_DOMAIN=4,
+	SEC_CHAN_BDC=6
+};
+
+enum netr_SamDatabaseID {
+	SAM_DATABASE_DOMAIN=0,
+	SAM_DATABASE_BUILTIN=1,
+	SAM_DATABASE_PRIVS=2
+};
+
+enum samr_RejectReason {
+	SAMR_REJECT_OTHER=0,
+	SAMR_REJECT_TOO_SHORT=1,
+	SAMR_REJECT_COMPLEXITY=2
+};
+
+#endif /* _HEADER_misc */

Modified: branches/samba/upstream/source/librpc/ndr/ndr.c
===================================================================
--- branches/samba/upstream/source/librpc/ndr/ndr.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/ndr/ndr.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /*
@@ -31,12 +32,12 @@
 #define NDR_BASE_MARSHALL_SIZE 1024
 
 /* this guid indicates NDR encoding in a protocol tower */
-const struct ndr_syntax_id ndr_transfer_syntax = {
+const struct dcerpc_syntax_id ndr_transfer_syntax = {
   { 0x8a885d04, 0x1ceb, 0x11c9, {0x9f, 0xe8}, {0x08,0x00,0x2b,0x10,0x48,0x60} },
   2
 };
 
-const struct ndr_syntax_id ndr64_transfer_syntax = {
+const struct dcerpc_syntax_id ndr64_transfer_syntax = {
   { 0x71710533, 0xbeba, 0x4937, {0x83, 0x19}, {0xb5,0xdb,0xef,0x9c,0xcc,0x36} },
   1
 };
@@ -44,7 +45,7 @@
 /*
   work out the number of bytes needed to align on a n byte boundary
 */
-_PUBLIC_ size_t ndr_align_size(uint32_t offset, size_t n)
+size_t ndr_align_size(uint32_t offset, size_t n)
 {
 	if ((offset & (n-1)) == 0) return 0;
 	return n - (offset & (n-1));
@@ -53,7 +54,7 @@
 /*
   initialise a ndr parse structure from a data blob
 */
-_PUBLIC_ struct ndr_pull *ndr_pull_init_blob(const DATA_BLOB *blob, TALLOC_CTX *mem_ctx)
+struct ndr_pull *ndr_pull_init_blob(const DATA_BLOB *blob, TALLOC_CTX *mem_ctx)
 {
 	struct ndr_pull *ndr;
 
@@ -70,7 +71,7 @@
 /*
   advance by 'size' bytes
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_advance(struct ndr_pull *ndr, uint32_t size)
+NTSTATUS ndr_pull_advance(struct ndr_pull *ndr, uint32_t size)
 {
 	ndr->offset += size;
 	if (ndr->offset > ndr->data_size) {
@@ -78,13 +79,13 @@
 				      "ndr_pull_advance by %u failed",
 				      size);
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   set the parse offset to 'ofs'
 */
-static enum ndr_err_code ndr_pull_set_offset(struct ndr_pull *ndr, uint32_t ofs)
+static NTSTATUS ndr_pull_set_offset(struct ndr_pull *ndr, uint32_t ofs)
 {
 	ndr->offset = ofs;
 	if (ndr->offset > ndr->data_size) {
@@ -92,18 +93,18 @@
 				      "ndr_pull_set_offset %u failed",
 				      ofs);
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /* save the offset/size of the current ndr state */
-_PUBLIC_ void ndr_pull_save(struct ndr_pull *ndr, struct ndr_pull_save *save)
+void ndr_pull_save(struct ndr_pull *ndr, struct ndr_pull_save *save)
 {
 	save->offset = ndr->offset;
 	save->data_size = ndr->data_size;
 }
 
 /* restore the size/offset of a ndr structure */
-_PUBLIC_ void ndr_pull_restore(struct ndr_pull *ndr, struct ndr_pull_save *save)
+void ndr_pull_restore(struct ndr_pull *ndr, struct ndr_pull_save *save)
 {
 	ndr->offset = save->offset;
 	ndr->data_size = save->data_size;
@@ -111,7 +112,7 @@
 
 
 /* create a ndr_push structure, ready for some marshalling */
-_PUBLIC_ struct ndr_push *ndr_push_init_ctx(TALLOC_CTX *mem_ctx)
+struct ndr_push *ndr_push_init_ctx(TALLOC_CTX *mem_ctx)
 {
 	struct ndr_push *ndr;
 
@@ -130,11 +131,27 @@
 	return ndr;
 }
 
+
+/* create a ndr_push structure, ready for some marshalling */
+struct ndr_push *ndr_push_init(void)
+{
+	return ndr_push_init_ctx(NULL);
+}
+
+/* free a ndr_push structure */
+void ndr_push_free(struct ndr_push *ndr)
+{
+	talloc_free(ndr);
+}
+
+
 /* return a DATA_BLOB structure for the current ndr_push marshalled data */
-_PUBLIC_ DATA_BLOB ndr_push_blob(struct ndr_push *ndr)
+DATA_BLOB ndr_push_blob(struct ndr_push *ndr)
 {
 	DATA_BLOB blob;
-	blob = data_blob_const(ndr->data, ndr->offset);
+	blob.data = ndr->data;
+	blob.length = ndr->offset;
+	blob.free = NULL;
 	if (ndr->alloc_size > ndr->offset) {
 		ndr->data[ndr->offset] = 0;
 	}
@@ -145,18 +162,18 @@
 /*
   expand the available space in the buffer to ndr->offset + extra_size
 */
-_PUBLIC_ enum ndr_err_code ndr_push_expand(struct ndr_push *ndr, uint32_t extra_size)
+NTSTATUS ndr_push_expand(struct ndr_push *ndr, uint32_t extra_size)
 {
 	uint32_t size = extra_size + ndr->offset;
 
 	if (size < ndr->offset) {
 		/* extra_size overflowed the offset */
 		return ndr_push_error(ndr, NDR_ERR_BUFSIZE, "Overflow in push_expand to %u",
-				      size);
+					size);
 	}
 
 	if (ndr->alloc_size > size) {
-		return NDR_ERR_SUCCESS;
+		return NT_STATUS_OK;
 	}
 
 	ndr->alloc_size += NDR_BASE_MARSHALL_SIZE;
@@ -169,53 +186,49 @@
 				      ndr->alloc_size);
 	}
 
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_debug_helper(struct ndr_print *ndr, const char *format, ...) _PRINTF_ATTRIBUTE(2,3)
+void ndr_print_debug_helper(struct ndr_print *ndr, const char *format, ...) _PRINTF_ATTRIBUTE(2,3)
 {
 	va_list ap;
 	char *s = NULL;
-	int i, ret;
+	int i;
 
 	va_start(ap, format);
-	ret = vasprintf(&s, format, ap);
+	vasprintf(&s, format, ap);
 	va_end(ap);
 
-	if (ret == -1) {
-		return;
-	}
-
 	for (i=0;i<ndr->depth;i++) {
-		DEBUGADD(0,("    "));
+		DEBUG(0,("    "));
 	}
 
-	DEBUGADD(0,("%s\n", s));
+	DEBUG(0,("%s\n", s));
 	free(s);
 }
 
-_PUBLIC_ void ndr_print_string_helper(struct ndr_print *ndr, const char *format, ...) _PRINTF_ATTRIBUTE(2,3)
+static void ndr_print_string_helper(struct ndr_print *ndr, const char *format, ...) _PRINTF_ATTRIBUTE(2,3)
 {
 	va_list ap;
 	int i;
 
 	for (i=0;i<ndr->depth;i++) {
-		ndr->private_data = talloc_asprintf_append_buffer(
-					(char *)ndr->private_data, "    ");
+		ndr->private_data = talloc_asprintf_append(
+			(char *)ndr->private_data, "    ");
 	}
 
 	va_start(ap, format);
-	ndr->private_data = talloc_vasprintf_append_buffer((char *)ndr->private_data, 
-						    format, ap);
+	ndr->private_data = talloc_vasprintf_append(
+		(char *)ndr->private_data, format, ap);
 	va_end(ap);
-	ndr->private_data = talloc_asprintf_append_buffer((char *)ndr->private_data, 
-						   "\n");
+	ndr->private_data = talloc_asprintf_append(
+		(char *)ndr->private_data, "\n");
 }
 
 /*
   a useful helper function for printing idl structures via DEBUG()
 */
-_PUBLIC_ void ndr_print_debug(ndr_print_fn_t fn, const char *name, void *ptr)
+void ndr_print_debug(ndr_print_fn_t fn, const char *name, void *ptr)
 {
 	struct ndr_print *ndr;
 
@@ -231,7 +244,7 @@
 /*
   a useful helper function for printing idl unions via DEBUG()
 */
-_PUBLIC_ void ndr_print_union_debug(ndr_print_fn_t fn, const char *name, uint32_t level, void *ptr)
+void ndr_print_union_debug(ndr_print_fn_t fn, const char *name, uint32_t level, void *ptr)
 {
 	struct ndr_print *ndr;
 
@@ -248,7 +261,7 @@
 /*
   a useful helper function for printing idl function calls via DEBUG()
 */
-_PUBLIC_ void ndr_print_function_debug(ndr_print_function_t fn, const char *name, int flags, void *ptr)
+void ndr_print_function_debug(ndr_print_function_t fn, const char *name, int flags, void *ptr)
 {
 	struct ndr_print *ndr;
 
@@ -261,59 +274,11 @@
 	talloc_free(ndr);
 }
 
-/*
-  a useful helper function for printing idl structures to a string
-*/
-_PUBLIC_ char *ndr_print_struct_string(TALLOC_CTX *mem_ctx, ndr_print_fn_t fn, const char *name, void *ptr)
-{
-	struct ndr_print *ndr;
-	char *ret = NULL;
 
-	ndr = talloc_zero(mem_ctx, struct ndr_print);
-	if (!ndr) return NULL;
-	ndr->private_data = talloc_strdup(ndr, "");
-	if (!ndr->private_data) {
-		goto failed;
-	}
-	ndr->print = ndr_print_string_helper;
-	ndr->depth = 1;
-	ndr->flags = 0;
-	fn(ndr, name, ptr);
-	ret = talloc_steal(mem_ctx, (char *)ndr->private_data);
-failed:
-	talloc_free(ndr);
-	return ret;
-}
-
 /*
-  a useful helper function for printing idl unions to a string
-*/
-_PUBLIC_ char *ndr_print_union_string(TALLOC_CTX *mem_ctx, ndr_print_fn_t fn, const char *name, uint32_t level, void *ptr)
-{
-	struct ndr_print *ndr;
-	char *ret = NULL;
-
-	ndr = talloc_zero(mem_ctx, struct ndr_print);
-	if (!ndr) return NULL;
-	ndr->private_data = talloc_strdup(ndr, "");
-	if (!ndr->private_data) {
-		goto failed;
-	}
-	ndr->print = ndr_print_string_helper;
-	ndr->depth = 1;
-	ndr->flags = 0;
-	ndr_print_set_switch_value(ndr, ptr, level);
-	fn(ndr, name, ptr);
-	ret = talloc_steal(mem_ctx, (char *)ndr->private_data);
-failed:
-	talloc_free(ndr);
-	return ret;
-}
-
-/*
   a useful helper function for printing idl function calls to a string
 */
-_PUBLIC_ char *ndr_print_function_string(TALLOC_CTX *mem_ctx,
+char *ndr_print_function_string(TALLOC_CTX *mem_ctx,
 				ndr_print_function_t fn, const char *name, 
 				int flags, void *ptr)
 {
@@ -322,21 +287,20 @@
 
 	ndr = talloc_zero(mem_ctx, struct ndr_print);
 	if (!ndr) return NULL;
-	ndr->private_data = talloc_strdup(ndr, "");
-	if (!ndr->private_data) {
-		goto failed;
+	if (!(ndr->private_data = talloc_strdup(mem_ctx, ""))) {
+		TALLOC_FREE(ndr);
+		return NULL;
 	}
 	ndr->print = ndr_print_string_helper;
 	ndr->depth = 1;
 	ndr->flags = 0;
 	fn(ndr, name, flags, ptr);
-	ret = talloc_steal(mem_ctx, (char *)ndr->private_data);
-failed:
+	ret = (char *)ndr->private_data;
 	talloc_free(ndr);
 	return ret;
 }
 
-_PUBLIC_ void ndr_set_flags(uint32_t *pflags, uint32_t new_flags)
+void ndr_set_flags(uint32_t *pflags, uint32_t new_flags)
 {
 	/* the big/little endian flags are inter-dependent */
 	if (new_flags & LIBNDR_FLAG_LITTLE_ENDIAN) {
@@ -354,11 +318,9 @@
 	(*pflags) |= new_flags;
 }
 
-NTSTATUS ndr_map_error2ntstatus(enum ndr_err_code ndr_err)
+static NTSTATUS ndr_map_error(enum ndr_err_code ndr_err)
 {
 	switch (ndr_err) {
-	case NDR_ERR_SUCCESS:
-		return NT_STATUS_OK;
 	case NDR_ERR_BUFSIZE:
 		return NT_STATUS_BUFFER_TOO_SMALL;
 	case NDR_ERR_TOKEN:
@@ -367,10 +329,6 @@
 		return NT_STATUS_NO_MEMORY;
 	case NDR_ERR_ARRAY_SIZE:
 		return NT_STATUS_ARRAY_BOUNDS_EXCEEDED;
-	case NDR_ERR_INVALID_POINTER:
-		return NT_STATUS_INVALID_PARAMETER_MIX;
-	case NDR_ERR_UNREAD_BYTES:
-		return NT_STATUS_PORT_MESSAGE_TOO_LONG;
 	default:
 		break;
 	}
@@ -380,128 +338,52 @@
 }
 
 /*
- * Convert an ndr error to string
- */
-
-const char *ndr_errstr(enum ndr_err_code err)
-{
-	switch (err) {
-	case NDR_ERR_SUCCESS:
-		return "NDR_ERR_SUCCESS";
-		break;
-	case NDR_ERR_ARRAY_SIZE:
-		return "NDR_ERR_ARRAY_SIZE";
-		break;
-	case NDR_ERR_BAD_SWITCH:
-		return "NDR_ERR_BAD_SWITCH";
-		break;
-	case NDR_ERR_OFFSET:
-		return "NDR_ERR_OFFSET";
-		break;
-	case NDR_ERR_RELATIVE:
-		return "NDR_ERR_RELATIVE";
-		break;
-	case NDR_ERR_CHARCNV:
-		return "NDR_ERR_CHARCNV";
-		break;
-	case NDR_ERR_LENGTH:
-		return "NDR_ERR_LENGTH";
-		break;
-	case NDR_ERR_SUBCONTEXT:
-		return "NDR_ERR_SUBCONTEXT";
-		break;
-	case NDR_ERR_COMPRESSION:
-		return "NDR_ERR_COMPRESSION";
-		break;
-	case NDR_ERR_STRING:
-		return "NDR_ERR_STRING";
-		break;
-	case NDR_ERR_VALIDATE:
-		return "NDR_ERR_VALIDATE";
-		break;
-	case NDR_ERR_BUFSIZE:
-		return "NDR_ERR_BUFSIZE";
-		break;
-	case NDR_ERR_ALLOC:
-		return "NDR_ERR_ALLOC";
-		break;
-	case NDR_ERR_RANGE:
-		return "NDR_ERR_RANGE";
-		break;
-	case NDR_ERR_TOKEN:
-		return "NDR_ERR_TOKEN";
-		break;
-	case NDR_ERR_IPV4ADDRESS:
-		return "NDR_ERR_IPV4ADDRESS";
-		break;
-	case NDR_ERR_INVALID_POINTER:
-		return "NDR_ERR_INVALID_POINTER";
-		break;
-	case NDR_ERR_UNREAD_BYTES:
-		return "NDR_ERR_UNREAD_BYTES";
-		break;
-	}
-
-	return talloc_asprintf(talloc_tos(), "Unknown NDR error: %d", err);
-}
-
-/*
   return and possibly log an NDR error
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_error(struct ndr_pull *ndr,
+NTSTATUS ndr_pull_error(struct ndr_pull *ndr,
 				 enum ndr_err_code ndr_err,
 				 const char *format, ...) _PRINTF_ATTRIBUTE(3,4)
 {
 	char *s=NULL;
 	va_list ap;
-	int ret;
 
 	va_start(ap, format);
-	ret = vasprintf(&s, format, ap);
+	vasprintf(&s, format, ap);
 	va_end(ap);
 
-	if (ret == -1) {
-		return NDR_ERR_ALLOC;
-	}
+	DEBUG(3,("ndr_pull_error(%u): %s\n", ndr_err, s));
 
-	DEBUG(1,("ndr_pull_error(%u): %s\n", ndr_err, s));
-
 	free(s);
 
-	return ndr_err;
+	return ndr_map_error(ndr_err);
 }
 
 /*
   return and possibly log an NDR error
 */
-_PUBLIC_ enum ndr_err_code ndr_push_error(struct ndr_push *ndr,
+NTSTATUS ndr_push_error(struct ndr_push *ndr,
 				 enum ndr_err_code ndr_err,
 				 const char *format, ...)  _PRINTF_ATTRIBUTE(3,4)
 {
 	char *s=NULL;
 	va_list ap;
-	int ret;
 
 	va_start(ap, format);
-	ret = vasprintf(&s, format, ap);
+	vasprintf(&s, format, ap);
 	va_end(ap);
 
-	if (ret == -1) {
-		return NDR_ERR_ALLOC;
-	}
+	DEBUG(3,("ndr_push_error(%u): %s\n", ndr_err, s));
 
-	DEBUG(1,("ndr_push_error(%u): %s\n", ndr_err, s));
-
 	free(s);
 
-	return ndr_err;
+	return ndr_map_error(ndr_err);
 }
 
 /*
   handle subcontext buffers, which in midl land are user-marshalled, but
   we use magic in pidl to make them easier to cope with
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_subcontext_start(struct ndr_pull *ndr,
+NTSTATUS ndr_pull_subcontext_start(struct ndr_pull *ndr, 
 				   struct ndr_pull **_subndr,
 				   size_t header_size,
 				   ssize_t size_is)
@@ -548,7 +430,7 @@
 	NDR_PULL_NEED_BYTES(ndr, r_content_size);
 
 	subndr = talloc_zero(ndr, struct ndr_pull);
-	NDR_ERR_HAVE_NO_MEMORY(subndr);
+	NT_STATUS_HAVE_NO_MEMORY(subndr);
 	subndr->flags		= ndr->flags;
 	subndr->current_mem_ctx	= ndr->current_mem_ctx;
 
@@ -557,10 +439,10 @@
 	subndr->data_size = r_content_size;
 
 	*_subndr = subndr;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ enum ndr_err_code ndr_pull_subcontext_end(struct ndr_pull *ndr,
+NTSTATUS ndr_pull_subcontext_end(struct ndr_pull *ndr, 
 				 struct ndr_pull *subndr,
 				 size_t header_size,
 				 ssize_t size_is)
@@ -574,10 +456,10 @@
 		advance = subndr->offset;
 	}
 	NDR_CHECK(ndr_pull_advance(ndr, advance));
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ enum ndr_err_code ndr_push_subcontext_start(struct ndr_push *ndr,
+NTSTATUS ndr_push_subcontext_start(struct ndr_push *ndr,
 				   struct ndr_push **_subndr,
 				   size_t header_size,
 				   ssize_t size_is)
@@ -585,17 +467,17 @@
 	struct ndr_push *subndr;
 
 	subndr = ndr_push_init_ctx(ndr);
-	NDR_ERR_HAVE_NO_MEMORY(subndr);
+	NT_STATUS_HAVE_NO_MEMORY(subndr);
 	subndr->flags	= ndr->flags;
 
 	*_subndr = subndr;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   push a subcontext header 
 */
-_PUBLIC_ enum ndr_err_code ndr_push_subcontext_end(struct ndr_push *ndr,
+NTSTATUS ndr_push_subcontext_end(struct ndr_push *ndr,
 				 struct ndr_push *subndr,
 				 size_t header_size,
 				 ssize_t size_is)
@@ -628,75 +510,73 @@
 	}
 
 	NDR_CHECK(ndr_push_bytes(ndr, subndr->data, subndr->offset));
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   store a token in the ndr context, for later retrieval
 */
-_PUBLIC_ enum ndr_err_code ndr_token_store(TALLOC_CTX *mem_ctx,
+NTSTATUS ndr_token_store(TALLOC_CTX *mem_ctx, 
 			 struct ndr_token_list **list, 
 			 const void *key, 
 			 uint32_t value)
 {
 	struct ndr_token_list *tok;
 	tok = talloc(mem_ctx, struct ndr_token_list);
-	NDR_ERR_HAVE_NO_MEMORY(tok);
+	if (tok == NULL) {
+		return NT_STATUS_NO_MEMORY;
+	}
 	tok->key = key;
 	tok->value = value;
 	DLIST_ADD((*list), tok);
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   retrieve a token from a ndr context, using cmp_fn to match the tokens
 */
-_PUBLIC_ enum ndr_err_code ndr_token_retrieve_cmp_fn(struct ndr_token_list **list, const void *key, uint32_t *v,
-				   comparison_fn_t _cmp_fn, bool _remove_tok)
+NTSTATUS ndr_token_retrieve_cmp_fn(struct ndr_token_list **list, const void *key, uint32_t *v,
+				   comparison_fn_t _cmp_fn, BOOL _remove_tok)
 {
 	struct ndr_token_list *tok;
 	for (tok=*list;tok;tok=tok->next) {
 		if (_cmp_fn && _cmp_fn(tok->key,key)==0) goto found;
 		else if (!_cmp_fn && tok->key == key) goto found;
 	}
-	return NDR_ERR_TOKEN;
+	return ndr_map_error(NDR_ERR_TOKEN);
 found:
 	*v = tok->value;
 	if (_remove_tok) {
 		DLIST_REMOVE((*list), tok);
 		talloc_free(tok);
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;		
 }
 
 /*
   retrieve a token from a ndr context
 */
-_PUBLIC_ enum ndr_err_code ndr_token_retrieve(struct ndr_token_list **list, const void *key, uint32_t *v)
+NTSTATUS ndr_token_retrieve(struct ndr_token_list **list, const void *key, uint32_t *v)
 {
-	return ndr_token_retrieve_cmp_fn(list, key, v, NULL, true);
+	return ndr_token_retrieve_cmp_fn(list, key, v, NULL, True);
 }
 
 /*
   peek at but don't removed a token from a ndr context
 */
-_PUBLIC_ uint32_t ndr_token_peek(struct ndr_token_list **list, const void *key)
+uint32_t ndr_token_peek(struct ndr_token_list **list, const void *key)
 {
-	enum ndr_err_code status;
+	NTSTATUS status;
 	uint32_t v;
-
-	status = ndr_token_retrieve_cmp_fn(list, key, &v, NULL, false);
-	if (!NDR_ERR_CODE_IS_SUCCESS(status)) {
-		return 0;
-	}
-
-	return v;
+	status = ndr_token_retrieve_cmp_fn(list, key, &v, NULL, False);
+	if (NT_STATUS_IS_OK(status)) return v;
+	return 0;
 }
 
 /*
   pull an array size field and add it to the array_size_list token list
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_array_size(struct ndr_pull *ndr, const void *p)
+NTSTATUS ndr_pull_array_size(struct ndr_pull *ndr, const void *p)
 {
 	uint32_t size;
 	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &size));
@@ -706,7 +586,7 @@
 /*
   get the stored array size field
 */
-_PUBLIC_ uint32_t ndr_get_array_size(struct ndr_pull *ndr, const void *p)
+uint32_t ndr_get_array_size(struct ndr_pull *ndr, const void *p)
 {
 	return ndr_token_peek(&ndr->array_size_list, p);
 }
@@ -714,7 +594,7 @@
 /*
   check the stored array size field
 */
-_PUBLIC_ enum ndr_err_code ndr_check_array_size(struct ndr_pull *ndr, void *p, uint32_t size)
+NTSTATUS ndr_check_array_size(struct ndr_pull *ndr, void *p, uint32_t size)
 {
 	uint32_t stored;
 	stored = ndr_token_peek(&ndr->array_size_list, p);
@@ -723,13 +603,13 @@
 				      "Bad array size - got %u expected %u\n",
 				      stored, size);
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   pull an array length field and add it to the array_length_list token list
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_array_length(struct ndr_pull *ndr, const void *p)
+NTSTATUS ndr_pull_array_length(struct ndr_pull *ndr, const void *p)
 {
 	uint32_t length, offset;
 	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &offset));
@@ -744,7 +624,7 @@
 /*
   get the stored array length field
 */
-_PUBLIC_ uint32_t ndr_get_array_length(struct ndr_pull *ndr, const void *p)
+uint32_t ndr_get_array_length(struct ndr_pull *ndr, const void *p)
 {
 	return ndr_token_peek(&ndr->array_length_list, p);
 }
@@ -752,7 +632,7 @@
 /*
   check the stored array length field
 */
-_PUBLIC_ enum ndr_err_code ndr_check_array_length(struct ndr_pull *ndr, void *p, uint32_t length)
+NTSTATUS ndr_check_array_length(struct ndr_pull *ndr, void *p, uint32_t length)
 {
 	uint32_t stored;
 	stored = ndr_token_peek(&ndr->array_length_list, p);
@@ -761,23 +641,23 @@
 				      "Bad array length - got %u expected %u\n",
 				      stored, length);
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   store a switch value
  */
-_PUBLIC_ enum ndr_err_code ndr_push_set_switch_value(struct ndr_push *ndr, const void *p, uint32_t val)
+NTSTATUS ndr_push_set_switch_value(struct ndr_push *ndr, const void *p, uint32_t val)
 {
 	return ndr_token_store(ndr, &ndr->switch_list, p, val);
 }
 
-_PUBLIC_ enum ndr_err_code ndr_pull_set_switch_value(struct ndr_pull *ndr, const void *p, uint32_t val)
+NTSTATUS ndr_pull_set_switch_value(struct ndr_pull *ndr, const void *p, uint32_t val)
 {
 	return ndr_token_store(ndr, &ndr->switch_list, p, val);
 }
 
-_PUBLIC_ enum ndr_err_code ndr_print_set_switch_value(struct ndr_print *ndr, const void *p, uint32_t val)
+NTSTATUS ndr_print_set_switch_value(struct ndr_print *ndr, const void *p, uint32_t val)
 {
 	return ndr_token_store(ndr, &ndr->switch_list, p, val);
 }
@@ -785,17 +665,17 @@
 /*
   retrieve a switch value
  */
-_PUBLIC_ uint32_t ndr_push_get_switch_value(struct ndr_push *ndr, const void *p)
+uint32_t ndr_push_get_switch_value(struct ndr_push *ndr, const void *p)
 {
 	return ndr_token_peek(&ndr->switch_list, p);
 }
 
-_PUBLIC_ uint32_t ndr_pull_get_switch_value(struct ndr_pull *ndr, const void *p)
+uint32_t ndr_pull_get_switch_value(struct ndr_pull *ndr, const void *p)
 {
 	return ndr_token_peek(&ndr->switch_list, p);
 }
 
-_PUBLIC_ uint32_t ndr_print_get_switch_value(struct ndr_print *ndr, const void *p)
+uint32_t ndr_print_get_switch_value(struct ndr_print *ndr, const void *p)
 {
 	return ndr_token_peek(&ndr->switch_list, p);
 }
@@ -803,114 +683,112 @@
 /*
   pull a struct from a blob using NDR
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_struct_blob(const DATA_BLOB *blob, TALLOC_CTX *mem_ctx, void *p,
+NTSTATUS ndr_pull_struct_blob(const DATA_BLOB *blob, TALLOC_CTX *mem_ctx, void *p,
 			      ndr_pull_flags_fn_t fn)
 {
 	struct ndr_pull *ndr;
 	ndr = ndr_pull_init_blob(blob, mem_ctx);
-	NDR_ERR_HAVE_NO_MEMORY(ndr);
-	NDR_CHECK(fn(ndr, NDR_SCALARS|NDR_BUFFERS, p));
-	return NDR_ERR_SUCCESS;
+	if (!ndr) {
+		return NT_STATUS_NO_MEMORY;
+	}
+	return fn(ndr, NDR_SCALARS|NDR_BUFFERS, p);
 }
 
 /*
   pull a struct from a blob using NDR - failing if all bytes are not consumed
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_struct_blob_all(const DATA_BLOB *blob, TALLOC_CTX *mem_ctx, void *p,
+NTSTATUS ndr_pull_struct_blob_all(const DATA_BLOB *blob, TALLOC_CTX *mem_ctx, void *p,
 				  ndr_pull_flags_fn_t fn)
 {
 	struct ndr_pull *ndr;
+	NTSTATUS status;
+
 	ndr = ndr_pull_init_blob(blob, mem_ctx);
-	NDR_ERR_HAVE_NO_MEMORY(ndr);
-	NDR_CHECK(fn(ndr, NDR_SCALARS|NDR_BUFFERS, p));
-	if (ndr->offset < ndr->data_size) {
-		return ndr_pull_error(ndr, NDR_ERR_UNREAD_BYTES,
-				      "not all bytes consumed ofs[%u] size[%u]",
-				      ndr->offset, ndr->data_size);
+	if (!ndr) {
+		return NT_STATUS_NO_MEMORY;
 	}
-	return NDR_ERR_SUCCESS;
+	status = fn(ndr, NDR_SCALARS|NDR_BUFFERS, p);
+	if (!NT_STATUS_IS_OK(status)) return status;
+	if (ndr->offset != ndr->data_size) {
+		return NT_STATUS_BUFFER_TOO_SMALL;
+	}
+	return status;
 }
 
 /*
   pull a union from a blob using NDR, given the union discriminator
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_union_blob(const DATA_BLOB *blob, TALLOC_CTX *mem_ctx, void *p,
+NTSTATUS ndr_pull_union_blob(const DATA_BLOB *blob, TALLOC_CTX *mem_ctx, void *p,
 			     uint32_t level, ndr_pull_flags_fn_t fn)
 {
 	struct ndr_pull *ndr;
-	ndr = ndr_pull_init_blob(blob, mem_ctx);
-	NDR_ERR_HAVE_NO_MEMORY(ndr);
-	NDR_CHECK(ndr_pull_set_switch_value(ndr, p, level));
-	NDR_CHECK(fn(ndr, NDR_SCALARS|NDR_BUFFERS, p));
-	return NDR_ERR_SUCCESS;
-}
+	NTSTATUS status;
 
-/*
-  pull a union from a blob using NDR, given the union discriminator,
-  failing if all bytes are not consumed
-*/
-_PUBLIC_ enum ndr_err_code ndr_pull_union_blob_all(const DATA_BLOB *blob, TALLOC_CTX *mem_ctx, void *p,
-			     uint32_t level, ndr_pull_flags_fn_t fn)
-{
-	struct ndr_pull *ndr;
 	ndr = ndr_pull_init_blob(blob, mem_ctx);
-	NDR_ERR_HAVE_NO_MEMORY(ndr);
-	NDR_CHECK(ndr_pull_set_switch_value(ndr, p, level));
-	NDR_CHECK(fn(ndr, NDR_SCALARS|NDR_BUFFERS, p));
-	if (ndr->offset < ndr->data_size) {
-		return ndr_pull_error(ndr, NDR_ERR_UNREAD_BYTES,
-				      "not all bytes consumed ofs[%u] size[%u]",
-				      ndr->offset, ndr->data_size);
+	if (!ndr) {
+		return NT_STATUS_NO_MEMORY;
 	}
-	return NDR_ERR_SUCCESS;
+	ndr_pull_set_switch_value(ndr, p, level);
+	status = fn(ndr, NDR_SCALARS|NDR_BUFFERS, p);
+	if (!NT_STATUS_IS_OK(status)) return status;
+	if (ndr->offset != ndr->data_size) {
+		return NT_STATUS_BUFFER_TOO_SMALL;
+	}
+	return status;
 }
 
 /*
   push a struct to a blob using NDR
 */
-_PUBLIC_ enum ndr_err_code ndr_push_struct_blob(DATA_BLOB *blob, TALLOC_CTX *mem_ctx, const void *p,
+NTSTATUS ndr_push_struct_blob(DATA_BLOB *blob, TALLOC_CTX *mem_ctx, const void *p,
 			      ndr_push_flags_fn_t fn)
 {
+	NTSTATUS status;
 	struct ndr_push *ndr;
 	ndr = ndr_push_init_ctx(mem_ctx);
-	NDR_ERR_HAVE_NO_MEMORY(ndr);
+	if (!ndr) {
+		return NT_STATUS_NO_MEMORY;
+	}
+	status = fn(ndr, NDR_SCALARS|NDR_BUFFERS, p);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
+	}
 
-	NDR_CHECK(fn(ndr, NDR_SCALARS|NDR_BUFFERS, p));
-
 	*blob = ndr_push_blob(ndr);
-	talloc_steal(mem_ctx, blob->data);
-	talloc_free(ndr);
 
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   push a union to a blob using NDR
 */
-_PUBLIC_ enum ndr_err_code ndr_push_union_blob(DATA_BLOB *blob, TALLOC_CTX *mem_ctx, void *p,
+NTSTATUS ndr_push_union_blob(DATA_BLOB *blob, TALLOC_CTX *mem_ctx, void *p,
 			     uint32_t level, ndr_push_flags_fn_t fn)
 {
+	NTSTATUS status;
 	struct ndr_push *ndr;
 	ndr = ndr_push_init_ctx(mem_ctx);
-	NDR_ERR_HAVE_NO_MEMORY(ndr);
+	if (!ndr) {
+		return NT_STATUS_NO_MEMORY;
+	}
+	ndr_push_set_switch_value(ndr, p, level);
+	status = fn(ndr, NDR_SCALARS|NDR_BUFFERS, p);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
+	}
 
-	NDR_CHECK(ndr_push_set_switch_value(ndr, p, level));
-	NDR_CHECK(fn(ndr, NDR_SCALARS|NDR_BUFFERS, p));
-
 	*blob = ndr_push_blob(ndr);
-	talloc_steal(mem_ctx, blob->data);
-	talloc_free(ndr);
 
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   generic ndr_size_*() handler for structures
 */
-_PUBLIC_ size_t ndr_size_struct(const void *p, int flags, ndr_push_flags_fn_t push)
+size_t ndr_size_struct(const void *p, int flags, ndr_push_flags_fn_t push)
 {
 	struct ndr_push *ndr;
-	enum ndr_err_code status;
+	NTSTATUS status;
 	size_t ret;
 
 	/* avoid recursion */
@@ -919,9 +797,8 @@
 	ndr = ndr_push_init_ctx(NULL);
 	if (!ndr) return 0;
 	ndr->flags |= flags | LIBNDR_FLAG_NO_NDR_SIZE;
-	status = push(ndr, NDR_SCALARS|NDR_BUFFERS, discard_const(p));
-	if (!NDR_ERR_CODE_IS_SUCCESS(status)) {
-		talloc_free(ndr);
+	status = push(ndr, NDR_SCALARS|NDR_BUFFERS, p);
+	if (!NT_STATUS_IS_OK(status)) {
 		return 0;
 	}
 	ret = ndr->offset;
@@ -932,10 +809,10 @@
 /*
   generic ndr_size_*() handler for unions
 */
-_PUBLIC_ size_t ndr_size_union(const void *p, int flags, uint32_t level, ndr_push_flags_fn_t push)
+size_t ndr_size_union(const void *p, int flags, uint32_t level, ndr_push_flags_fn_t push)
 {
 	struct ndr_push *ndr;
-	enum ndr_err_code status;
+	NTSTATUS status;
 	size_t ret;
 
 	/* avoid recursion */
@@ -944,15 +821,9 @@
 	ndr = ndr_push_init_ctx(NULL);
 	if (!ndr) return 0;
 	ndr->flags |= flags | LIBNDR_FLAG_NO_NDR_SIZE;
-
-	status = ndr_push_set_switch_value(ndr, p, level);
-	if (!NDR_ERR_CODE_IS_SUCCESS(status)) {
-		talloc_free(ndr);
-		return 0;
-	}
+	ndr_push_set_switch_value(ndr, p, level);
 	status = push(ndr, NDR_SCALARS|NDR_BUFFERS, p);
-	if (!NDR_ERR_CODE_IS_SUCCESS(status)) {
-		talloc_free(ndr);
+	if (!NT_STATUS_IS_OK(status)) {
 		return 0;
 	}
 	ret = ndr->offset;
@@ -963,7 +834,7 @@
 /*
   get the current base for relative pointers for the push
 */
-_PUBLIC_ uint32_t ndr_push_get_relative_base_offset(struct ndr_push *ndr)
+uint32_t ndr_push_get_relative_base_offset(struct ndr_push *ndr)
 {
 	return ndr->relative_base_offset;
 }
@@ -971,7 +842,7 @@
 /*
   restore the old base for relative pointers for the push
 */
-_PUBLIC_ void ndr_push_restore_relative_base_offset(struct ndr_push *ndr, uint32_t offset)
+void ndr_push_restore_relative_base_offset(struct ndr_push *ndr, uint32_t offset)
 {
 	ndr->relative_base_offset = offset;
 }
@@ -980,7 +851,7 @@
   setup the current base for relative pointers for the push
   called in the NDR_SCALAR stage
 */
-_PUBLIC_ enum ndr_err_code ndr_push_setup_relative_base_offset1(struct ndr_push *ndr, const void *p, uint32_t offset)
+NTSTATUS ndr_push_setup_relative_base_offset1(struct ndr_push *ndr, const void *p, uint32_t offset)
 {
 	ndr->relative_base_offset = offset;
 	return ndr_token_store(ndr, &ndr->relative_base_list, p, offset);
@@ -990,7 +861,7 @@
   setup the current base for relative pointers for the push
   called in the NDR_BUFFERS stage
 */
-_PUBLIC_ enum ndr_err_code ndr_push_setup_relative_base_offset2(struct ndr_push *ndr, const void *p)
+NTSTATUS ndr_push_setup_relative_base_offset2(struct ndr_push *ndr, const void *p)
 {
 	return ndr_token_retrieve(&ndr->relative_base_list, p, &ndr->relative_base_offset);
 }
@@ -999,11 +870,11 @@
   push a relative object - stage1
   this is called during SCALARS processing
 */
-_PUBLIC_ enum ndr_err_code ndr_push_relative_ptr1(struct ndr_push *ndr, const void *p)
+NTSTATUS ndr_push_relative_ptr1(struct ndr_push *ndr, const void *p)
 {
 	if (p == NULL) {
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-		return NDR_ERR_SUCCESS;
+		return NT_STATUS_OK;
 	}
 	NDR_CHECK(ndr_push_align(ndr, 4));
 	NDR_CHECK(ndr_token_store(ndr, &ndr->relative_list, p, ndr->offset));
@@ -1014,12 +885,12 @@
   push a relative object - stage2
   this is called during buffers processing
 */
-_PUBLIC_ enum ndr_err_code ndr_push_relative_ptr2(struct ndr_push *ndr, const void *p)
+NTSTATUS ndr_push_relative_ptr2(struct ndr_push *ndr, const void *p)
 {
 	struct ndr_push_save save;
 	uint32_t ptr_offset = 0xFFFFFFFF;
 	if (p == NULL) {
-		return NDR_ERR_SUCCESS;
+		return NT_STATUS_OK;
 	}
 	ndr_push_save(ndr, &save);
 	NDR_CHECK(ndr_token_retrieve(&ndr->relative_list, p, &ptr_offset));
@@ -1036,13 +907,13 @@
 	}	
 	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, save.offset - ndr->relative_base_offset));
 	ndr_push_restore(ndr, &save);
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   get the current base for relative pointers for the pull
 */
-_PUBLIC_ uint32_t ndr_pull_get_relative_base_offset(struct ndr_pull *ndr)
+uint32_t ndr_pull_get_relative_base_offset(struct ndr_pull *ndr)
 {
 	return ndr->relative_base_offset;
 }
@@ -1050,7 +921,7 @@
 /*
   restore the old base for relative pointers for the pull
 */
-_PUBLIC_ void ndr_pull_restore_relative_base_offset(struct ndr_pull *ndr, uint32_t offset)
+void ndr_pull_restore_relative_base_offset(struct ndr_pull *ndr, uint32_t offset)
 {
 	ndr->relative_base_offset = offset;
 }
@@ -1059,7 +930,7 @@
   setup the current base for relative pointers for the pull
   called in the NDR_SCALAR stage
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_setup_relative_base_offset1(struct ndr_pull *ndr, const void *p, uint32_t offset)
+NTSTATUS ndr_pull_setup_relative_base_offset1(struct ndr_pull *ndr, const void *p, uint32_t offset)
 {
 	ndr->relative_base_offset = offset;
 	return ndr_token_store(ndr, &ndr->relative_base_list, p, offset);
@@ -1069,7 +940,7 @@
   setup the current base for relative pointers for the pull
   called in the NDR_BUFFERS stage
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_setup_relative_base_offset2(struct ndr_pull *ndr, const void *p)
+NTSTATUS ndr_pull_setup_relative_base_offset2(struct ndr_pull *ndr, const void *p)
 {
 	return ndr_token_retrieve(&ndr->relative_base_list, p, &ndr->relative_base_offset);
 }
@@ -1078,7 +949,7 @@
   pull a relative object - stage1
   called during SCALARS processing
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_relative_ptr1(struct ndr_pull *ndr, const void *p, uint32_t rel_offset)
+NTSTATUS ndr_pull_relative_ptr1(struct ndr_pull *ndr, const void *p, uint32_t rel_offset)
 {
 	rel_offset += ndr->relative_base_offset;
 	if (rel_offset > ndr->data_size) {
@@ -1093,7 +964,7 @@
   pull a relative object - stage2
   called during BUFFERS processing
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_relative_ptr2(struct ndr_pull *ndr, const void *p)
+NTSTATUS ndr_pull_relative_ptr2(struct ndr_pull *ndr, const void *p)
 {
 	uint32_t rel_offset;
 	NDR_CHECK(ndr_token_retrieve(&ndr->relative_list, p, &rel_offset));

Modified: branches/samba/upstream/source/librpc/ndr/ndr_basic.c
===================================================================
--- branches/samba/upstream/source/librpc/ndr/ndr_basic.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/ndr/ndr_basic.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,12 +16,11 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
-#include "system/network.h"
-#include "librpc/ndr/libndr.h"
 
 #define NDR_SVAL(ndr, ofs) (NDR_BE(ndr)?RSVAL(ndr->data,ofs):SVAL(ndr->data,ofs))
 #define NDR_IVAL(ndr, ofs) (NDR_BE(ndr)?RIVAL(ndr->data,ofs):IVAL(ndr->data,ofs))
@@ -36,7 +35,7 @@
   these could also indicate that real structure elements have been
   mistaken for padding in the IDL
 */
-_PUBLIC_ void ndr_check_padding(struct ndr_pull *ndr, size_t n)
+void ndr_check_padding(struct ndr_pull *ndr, size_t n)
 {
 	size_t ofs2 = (ndr->offset + (n-1)) & ~(n-1);
 	int i;
@@ -58,126 +57,127 @@
 /*
   parse a int8_t
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_int8(struct ndr_pull *ndr, int ndr_flags, int8_t *v)
+NTSTATUS ndr_pull_int8(struct ndr_pull *ndr, int ndr_flags, int8_t *v)
 {
 	NDR_PULL_NEED_BYTES(ndr, 1);
 	*v = (int8_t)CVAL(ndr->data, ndr->offset);
 	ndr->offset += 1;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   parse a uint8_t
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_uint8(struct ndr_pull *ndr, int ndr_flags, uint8_t *v)
+NTSTATUS ndr_pull_uint8(struct ndr_pull *ndr, int ndr_flags, uint8_t *v)
 {
 	NDR_PULL_NEED_BYTES(ndr, 1);
 	*v = CVAL(ndr->data, ndr->offset);
 	ndr->offset += 1;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   parse a int16_t
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_int16(struct ndr_pull *ndr, int ndr_flags, int16_t *v)
+NTSTATUS ndr_pull_int16(struct ndr_pull *ndr, int ndr_flags, int16_t *v)
 {
 	NDR_PULL_ALIGN(ndr, 2);
 	NDR_PULL_NEED_BYTES(ndr, 2);
 	*v = (uint16_t)NDR_SVAL(ndr, ndr->offset);
 	ndr->offset += 2;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   parse a uint16_t
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_uint16(struct ndr_pull *ndr, int ndr_flags, uint16_t *v)
+NTSTATUS ndr_pull_uint16(struct ndr_pull *ndr, int ndr_flags, uint16_t *v)
 {
 	NDR_PULL_ALIGN(ndr, 2);
 	NDR_PULL_NEED_BYTES(ndr, 2);
 	*v = NDR_SVAL(ndr, ndr->offset);
 	ndr->offset += 2;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   parse a int32_t
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_int32(struct ndr_pull *ndr, int ndr_flags, int32_t *v)
+NTSTATUS ndr_pull_int32(struct ndr_pull *ndr, int ndr_flags, int32_t *v)
 {
 	NDR_PULL_ALIGN(ndr, 4);
 	NDR_PULL_NEED_BYTES(ndr, 4);
 	*v = NDR_IVALS(ndr, ndr->offset);
 	ndr->offset += 4;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   parse a uint32_t
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_uint32(struct ndr_pull *ndr, int ndr_flags, uint32_t *v)
+NTSTATUS ndr_pull_uint32(struct ndr_pull *ndr, int ndr_flags, uint32_t *v)
 {
 	NDR_PULL_ALIGN(ndr, 4);
 	NDR_PULL_NEED_BYTES(ndr, 4);
 	*v = NDR_IVAL(ndr, ndr->offset);
 	ndr->offset += 4;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   parse a pointer referent identifier
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_generic_ptr(struct ndr_pull *ndr, uint32_t *v)
+NTSTATUS ndr_pull_generic_ptr(struct ndr_pull *ndr, uint32_t *v)
 {
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, v));
-	if (*v != 0) {
+	NTSTATUS status;
+	status = ndr_pull_uint32(ndr, NDR_SCALARS, v);
+	if (NT_STATUS_IS_OK(status) && *v != 0) {
 		ndr->ptr_count++;
 	}
-	return NDR_ERR_SUCCESS;
+	return status;
 }
 
 /*
   parse a ref pointer referent identifier
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_ref_ptr(struct ndr_pull *ndr, uint32_t *v)
+NTSTATUS ndr_pull_ref_ptr(struct ndr_pull *ndr, uint32_t *v)
 {
 	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, v));
 	/* ref pointers always point to data */
 	*v = 1;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   parse a udlong
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_udlong(struct ndr_pull *ndr, int ndr_flags, uint64_t *v)
+NTSTATUS ndr_pull_udlong(struct ndr_pull *ndr, int ndr_flags, uint64_t *v)
 {
 	NDR_PULL_ALIGN(ndr, 4);
 	NDR_PULL_NEED_BYTES(ndr, 8);
 	*v = NDR_IVAL(ndr, ndr->offset);
 	*v |= (uint64_t)(NDR_IVAL(ndr, ndr->offset+4)) << 32;
 	ndr->offset += 8;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   parse a udlongr
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_udlongr(struct ndr_pull *ndr, int ndr_flags, uint64_t *v)
+NTSTATUS ndr_pull_udlongr(struct ndr_pull *ndr, int ndr_flags, uint64_t *v)
 {
 	NDR_PULL_ALIGN(ndr, 4);
 	NDR_PULL_NEED_BYTES(ndr, 8);
 	*v = ((uint64_t)NDR_IVAL(ndr, ndr->offset)) << 32;
 	*v |= NDR_IVAL(ndr, ndr->offset+4);
 	ndr->offset += 8;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   parse a dlong
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_dlong(struct ndr_pull *ndr, int ndr_flags, int64_t *v)
+NTSTATUS ndr_pull_dlong(struct ndr_pull *ndr, int ndr_flags, int64_t *v)
 {
 	return ndr_pull_udlong(ndr, ndr_flags, (uint64_t *)v);
 }
@@ -185,7 +185,7 @@
 /*
   parse a hyper
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_hyper(struct ndr_pull *ndr, int ndr_flags, uint64_t *v)
+NTSTATUS ndr_pull_hyper(struct ndr_pull *ndr, int ndr_flags, uint64_t *v)
 {
 	NDR_PULL_ALIGN(ndr, 8);
 	return ndr_pull_udlong(ndr, ndr_flags, v);
@@ -194,37 +194,37 @@
 /*
   parse a pointer
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_pointer(struct ndr_pull *ndr, int ndr_flags, void* *v)
+NTSTATUS ndr_pull_pointer(struct ndr_pull *ndr, int ndr_flags, void* *v)
 {
-	uintptr_t h;
+	intptr_t h;
 	NDR_PULL_ALIGN(ndr, sizeof(h));
 	NDR_PULL_NEED_BYTES(ndr, sizeof(h));
 	memcpy(&h, ndr->data+ndr->offset, sizeof(h));
 	ndr->offset += sizeof(h);
 	*v = (void *)h;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;	
 }
 
 /*
   pull a NTSTATUS
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_NTSTATUS(struct ndr_pull *ndr, int ndr_flags, NTSTATUS *status)
+NTSTATUS ndr_pull_NTSTATUS(struct ndr_pull *ndr, int ndr_flags, NTSTATUS *status)
 {
 	uint32_t v;
 	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
 	*status = NT_STATUS(v);
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   push a NTSTATUS
 */
-_PUBLIC_ enum ndr_err_code ndr_push_NTSTATUS(struct ndr_push *ndr, int ndr_flags, NTSTATUS status)
+NTSTATUS ndr_push_NTSTATUS(struct ndr_push *ndr, int ndr_flags, NTSTATUS status)
 {
 	return ndr_push_uint32(ndr, ndr_flags, NT_STATUS_V(status));
 }
 
-_PUBLIC_ void ndr_print_NTSTATUS(struct ndr_print *ndr, const char *name, NTSTATUS r)
+void ndr_print_NTSTATUS(struct ndr_print *ndr, const char *name, NTSTATUS r)
 {
 	ndr->print(ndr, "%-25s: %s", name, nt_errstr(r));
 }
@@ -232,45 +232,45 @@
 /*
   pull a WERROR
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_WERROR(struct ndr_pull *ndr, int ndr_flags, WERROR *status)
+NTSTATUS ndr_pull_WERROR(struct ndr_pull *ndr, int ndr_flags, WERROR *status)
 {
 	uint32_t v;
 	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
 	*status = W_ERROR(v);
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   push a WERROR
 */
-_PUBLIC_ enum ndr_err_code ndr_push_WERROR(struct ndr_push *ndr, int ndr_flags, WERROR status)
+NTSTATUS ndr_push_WERROR(struct ndr_push *ndr, int ndr_flags, WERROR status)
 {
 	return ndr_push_uint32(ndr, NDR_SCALARS, W_ERROR_V(status));
 }
 
-_PUBLIC_ void ndr_print_WERROR(struct ndr_print *ndr, const char *name, WERROR r)
+void ndr_print_WERROR(struct ndr_print *ndr, const char *name, WERROR r)
 {
-	ndr->print(ndr, "%-25s: %s", name, win_errstr(r));
+	ndr->print(ndr, "%-25s: %s", name, dos_errstr(r));
 }
 
 /*
   parse a set of bytes
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_bytes(struct ndr_pull *ndr, uint8_t *data, uint32_t n)
+NTSTATUS ndr_pull_bytes(struct ndr_pull *ndr, uint8_t *data, uint32_t n)
 {
 	NDR_PULL_NEED_BYTES(ndr, n);
 	memcpy(data, ndr->data + ndr->offset, n);
 	ndr->offset += n;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   pull an array of uint8
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_array_uint8(struct ndr_pull *ndr, int ndr_flags, uint8_t *data, uint32_t n)
+NTSTATUS ndr_pull_array_uint8(struct ndr_pull *ndr, int ndr_flags, uint8_t *data, uint32_t n)
 {
 	if (!(ndr_flags & NDR_SCALARS)) {
-		return NDR_ERR_SUCCESS;
+		return NT_STATUS_OK;
 	}
 	return ndr_pull_bytes(ndr, data, n);
 }
@@ -278,103 +278,103 @@
 /*
   push a int8_t
 */
-_PUBLIC_ enum ndr_err_code ndr_push_int8(struct ndr_push *ndr, int ndr_flags, int8_t v)
+NTSTATUS ndr_push_int8(struct ndr_push *ndr, int ndr_flags, int8_t v)
 {
 	NDR_PUSH_NEED_BYTES(ndr, 1);
 	SCVAL(ndr->data, ndr->offset, (uint8_t)v);
 	ndr->offset += 1;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   push a uint8_t
 */
-_PUBLIC_ enum ndr_err_code ndr_push_uint8(struct ndr_push *ndr, int ndr_flags, uint8_t v)
+NTSTATUS ndr_push_uint8(struct ndr_push *ndr, int ndr_flags, uint8_t v)
 {
 	NDR_PUSH_NEED_BYTES(ndr, 1);
 	SCVAL(ndr->data, ndr->offset, v);
 	ndr->offset += 1;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   push a int16_t
 */
-_PUBLIC_ enum ndr_err_code ndr_push_int16(struct ndr_push *ndr, int ndr_flags, int16_t v)
+NTSTATUS ndr_push_int16(struct ndr_push *ndr, int ndr_flags, int16_t v)
 {
 	NDR_PUSH_ALIGN(ndr, 2);
 	NDR_PUSH_NEED_BYTES(ndr, 2);
 	NDR_SSVAL(ndr, ndr->offset, (uint16_t)v);
 	ndr->offset += 2;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   push a uint16_t
 */
-_PUBLIC_ enum ndr_err_code ndr_push_uint16(struct ndr_push *ndr, int ndr_flags, uint16_t v)
+NTSTATUS ndr_push_uint16(struct ndr_push *ndr, int ndr_flags, uint16_t v)
 {
 	NDR_PUSH_ALIGN(ndr, 2);
 	NDR_PUSH_NEED_BYTES(ndr, 2);
 	NDR_SSVAL(ndr, ndr->offset, v);
 	ndr->offset += 2;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   push a int32_t
 */
-_PUBLIC_ enum ndr_err_code ndr_push_int32(struct ndr_push *ndr, int ndr_flags, int32_t v)
+NTSTATUS ndr_push_int32(struct ndr_push *ndr, int ndr_flags, int32_t v)
 {
 	NDR_PUSH_ALIGN(ndr, 4);
 	NDR_PUSH_NEED_BYTES(ndr, 4);
 	NDR_SIVALS(ndr, ndr->offset, v);
 	ndr->offset += 4;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   push a uint32_t
 */
-_PUBLIC_ enum ndr_err_code ndr_push_uint32(struct ndr_push *ndr, int ndr_flags, uint32_t v)
+NTSTATUS ndr_push_uint32(struct ndr_push *ndr, int ndr_flags, uint32_t v)
 {
 	NDR_PUSH_ALIGN(ndr, 4);
 	NDR_PUSH_NEED_BYTES(ndr, 4);
 	NDR_SIVAL(ndr, ndr->offset, v);
 	ndr->offset += 4;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   push a udlong
 */
-_PUBLIC_ enum ndr_err_code ndr_push_udlong(struct ndr_push *ndr, int ndr_flags, uint64_t v)
+NTSTATUS ndr_push_udlong(struct ndr_push *ndr, int ndr_flags, uint64_t v)
 {
 	NDR_PUSH_ALIGN(ndr, 4);
 	NDR_PUSH_NEED_BYTES(ndr, 8);
 	NDR_SIVAL(ndr, ndr->offset, (v & 0xFFFFFFFF));
 	NDR_SIVAL(ndr, ndr->offset+4, (v>>32));
 	ndr->offset += 8;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   push a udlongr
 */
-_PUBLIC_ enum ndr_err_code ndr_push_udlongr(struct ndr_push *ndr, int ndr_flags, uint64_t v)
+NTSTATUS ndr_push_udlongr(struct ndr_push *ndr, int ndr_flags, uint64_t v)
 {
 	NDR_PUSH_ALIGN(ndr, 4);
 	NDR_PUSH_NEED_BYTES(ndr, 8);
 	NDR_SIVAL(ndr, ndr->offset, (v>>32));
 	NDR_SIVAL(ndr, ndr->offset+4, (v & 0xFFFFFFFF));
 	ndr->offset += 8;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   push a dlong
 */
-_PUBLIC_ enum ndr_err_code ndr_push_dlong(struct ndr_push *ndr, int ndr_flags, int64_t v)
+NTSTATUS ndr_push_dlong(struct ndr_push *ndr, int ndr_flags, int64_t v)
 {
 	return ndr_push_udlong(ndr, NDR_SCALARS, (uint64_t)v);
 }
@@ -382,7 +382,7 @@
 /*
   push a hyper
 */
-_PUBLIC_ enum ndr_err_code ndr_push_hyper(struct ndr_push *ndr, int ndr_flags, uint64_t v)
+NTSTATUS ndr_push_hyper(struct ndr_push *ndr, int ndr_flags, uint64_t v)
 {
 	NDR_PUSH_ALIGN(ndr, 8);
 	return ndr_push_udlong(ndr, NDR_SCALARS, v);
@@ -391,57 +391,57 @@
 /*
   push a pointer
 */
-_PUBLIC_ enum ndr_err_code ndr_push_pointer(struct ndr_push *ndr, int ndr_flags, void* v)
+NTSTATUS ndr_push_pointer(struct ndr_push *ndr, int ndr_flags, void* v)
 {
-	uintptr_t h = (intptr_t)v;
+	intptr_t h = (intptr_t)v;
 	NDR_PUSH_ALIGN(ndr, sizeof(h));
 	NDR_PUSH_NEED_BYTES(ndr, sizeof(h));
 	memcpy(ndr->data+ndr->offset, &h, sizeof(h));
 	ndr->offset += sizeof(h);
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;	
 }
 
-_PUBLIC_ enum ndr_err_code ndr_push_align(struct ndr_push *ndr, size_t size)
+NTSTATUS ndr_push_align(struct ndr_push *ndr, size_t size)
 {
 	NDR_PUSH_ALIGN(ndr, size);
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ enum ndr_err_code ndr_pull_align(struct ndr_pull *ndr, size_t size)
+NTSTATUS ndr_pull_align(struct ndr_pull *ndr, size_t size)
 {
 	NDR_PULL_ALIGN(ndr, size);
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   push some bytes
 */
-_PUBLIC_ enum ndr_err_code ndr_push_bytes(struct ndr_push *ndr, const uint8_t *data, uint32_t n)
+NTSTATUS ndr_push_bytes(struct ndr_push *ndr, const uint8_t *data, uint32_t n)
 {
 	NDR_PUSH_NEED_BYTES(ndr, n);
 	memcpy(ndr->data + ndr->offset, data, n);
 	ndr->offset += n;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   push some zero bytes
 */
-_PUBLIC_ enum ndr_err_code ndr_push_zero(struct ndr_push *ndr, uint32_t n)
+NTSTATUS ndr_push_zero(struct ndr_push *ndr, uint32_t n)
 {
 	NDR_PUSH_NEED_BYTES(ndr, n);
 	memset(ndr->data + ndr->offset, 0, n);
 	ndr->offset += n;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   push an array of uint8
 */
-_PUBLIC_ enum ndr_err_code ndr_push_array_uint8(struct ndr_push *ndr, int ndr_flags, const uint8_t *data, uint32_t n)
+NTSTATUS ndr_push_array_uint8(struct ndr_push *ndr, int ndr_flags, const uint8_t *data, uint32_t n)
 {
 	if (!(ndr_flags & NDR_SCALARS)) {
-		return NDR_ERR_SUCCESS;
+		return NT_STATUS_OK;
 	}
 	return ndr_push_bytes(ndr, data, n);
 }
@@ -449,7 +449,7 @@
 /*
   save the current position
  */
-_PUBLIC_ void ndr_push_save(struct ndr_push *ndr, struct ndr_push_save *save)
+void ndr_push_save(struct ndr_push *ndr, struct ndr_push_save *save)
 {
 	save->offset = ndr->offset;
 }
@@ -457,7 +457,7 @@
 /*
   restore the position
  */
-_PUBLIC_ void ndr_push_restore(struct ndr_push *ndr, struct ndr_push_save *save)
+void ndr_push_restore(struct ndr_push *ndr, struct ndr_push_save *save)
 {
 	ndr->offset = save->offset;
 }
@@ -465,7 +465,7 @@
 /*
   push a unique non-zero value if a pointer is non-NULL, otherwise 0
 */
-_PUBLIC_ enum ndr_err_code ndr_push_unique_ptr(struct ndr_push *ndr, const void *p)
+NTSTATUS ndr_push_unique_ptr(struct ndr_push *ndr, const void *p)
 {
 	uint32_t ptr = 0;
 	if (p) {
@@ -479,17 +479,12 @@
 /*
   push a 'simple' full non-zero value if a pointer is non-NULL, otherwise 0
 */
-_PUBLIC_ enum ndr_err_code ndr_push_full_ptr(struct ndr_push *ndr, const void *p)
+NTSTATUS ndr_push_sptr_ptr(struct ndr_push *ndr, const void *p)
 {
 	uint32_t ptr = 0;
 	if (p) {
-		/* Check if the pointer already exists and has an id */
-		ptr = ndr_token_peek(&ndr->full_ptr_list, p);
-		if (ptr == 0) {
-			ndr->ptr_count++;
-			ptr = ndr->ptr_count;
-			ndr_token_store(ndr, &ndr->full_ptr_list, p, ptr);
-		}
+		ndr->ptr_count++;
+		ptr = ndr->ptr_count;
 	}
 	return ndr_push_uint32(ndr, NDR_SCALARS, ptr);
 }
@@ -497,72 +492,71 @@
 /*
   push always a 0, if a pointer is NULL it's a fatal error
 */
-_PUBLIC_ enum ndr_err_code ndr_push_ref_ptr(struct ndr_push *ndr)
+NTSTATUS ndr_push_ref_ptr(struct ndr_push *ndr)
 {
 	return ndr_push_uint32(ndr, NDR_SCALARS, 0xAEF1AEF1);
 }
 
-
 /*
   push a NTTIME
 */
-_PUBLIC_ enum ndr_err_code ndr_push_NTTIME(struct ndr_push *ndr, int ndr_flags, NTTIME t)
+NTSTATUS ndr_push_NTTIME(struct ndr_push *ndr, int ndr_flags, NTTIME t)
 {
 	NDR_CHECK(ndr_push_udlong(ndr, ndr_flags, t));
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   pull a NTTIME
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_NTTIME(struct ndr_pull *ndr, int ndr_flags, NTTIME *t)
+NTSTATUS ndr_pull_NTTIME(struct ndr_pull *ndr, int ndr_flags, NTTIME *t)
 {
 	NDR_CHECK(ndr_pull_udlong(ndr, ndr_flags, t));
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   push a NTTIME
 */
-_PUBLIC_ enum ndr_err_code ndr_push_NTTIME_1sec(struct ndr_push *ndr, int ndr_flags, NTTIME t)
+NTSTATUS ndr_push_NTTIME_1sec(struct ndr_push *ndr, int ndr_flags, NTTIME t)
 {
 	t /= 10000000;
 	NDR_CHECK(ndr_push_hyper(ndr, ndr_flags, t));
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   pull a NTTIME_1sec
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_NTTIME_1sec(struct ndr_pull *ndr, int ndr_flags, NTTIME *t)
+NTSTATUS ndr_pull_NTTIME_1sec(struct ndr_pull *ndr, int ndr_flags, NTTIME *t)
 {
 	NDR_CHECK(ndr_pull_hyper(ndr, ndr_flags, t));
 	(*t) *= 10000000;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   pull a NTTIME_hyper
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_NTTIME_hyper(struct ndr_pull *ndr, int ndr_flags, NTTIME *t)
+NTSTATUS ndr_pull_NTTIME_hyper(struct ndr_pull *ndr, int ndr_flags, NTTIME *t)
 {
 	NDR_CHECK(ndr_pull_hyper(ndr, ndr_flags, t));
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   push a NTTIME_hyper
 */
-_PUBLIC_ enum ndr_err_code ndr_push_NTTIME_hyper(struct ndr_push *ndr, int ndr_flags, NTTIME t)
+NTSTATUS ndr_push_NTTIME_hyper(struct ndr_push *ndr, int ndr_flags, NTTIME t)
 {
 	NDR_CHECK(ndr_push_hyper(ndr, ndr_flags, t));
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   push a time_t
 */
-_PUBLIC_ enum ndr_err_code ndr_push_time_t(struct ndr_push *ndr, int ndr_flags, time_t t)
+NTSTATUS ndr_push_time_t(struct ndr_push *ndr, int ndr_flags, time_t t)
 {
 	return ndr_push_uint32(ndr, ndr_flags, t);
 }
@@ -570,60 +564,21 @@
 /*
   pull a time_t
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_time_t(struct ndr_pull *ndr, int ndr_flags, time_t *t)
+NTSTATUS ndr_pull_time_t(struct ndr_pull *ndr, int ndr_flags, time_t *t)
 {
 	uint32_t tt;
 	NDR_CHECK(ndr_pull_uint32(ndr, ndr_flags, &tt));
 	*t = tt;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 
-/*
-  pull a ipv4address
-*/
-_PUBLIC_ enum ndr_err_code ndr_pull_ipv4address(struct ndr_pull *ndr, int ndr_flags, const char **address)
+void ndr_print_struct(struct ndr_print *ndr, const char *name, const char *type)
 {
-	struct in_addr in;
-	NDR_CHECK(ndr_pull_uint32(ndr, ndr_flags, &in.s_addr));
-	in.s_addr = htonl(in.s_addr);
-	*address = talloc_strdup(ndr->current_mem_ctx, inet_ntoa(in));
-	NDR_ERR_HAVE_NO_MEMORY(*address);
-	return NDR_ERR_SUCCESS;
-}
-
-/*
-  push a ipv4address
-*/
-_PUBLIC_ enum ndr_err_code ndr_push_ipv4address(struct ndr_push *ndr, int ndr_flags, const char *address)
-{
-	uint32_t addr;
-	if (!is_ipaddress(address)) {
-		return ndr_push_error(ndr, NDR_ERR_IPV4ADDRESS,
-				      "Invalid IPv4 address: '%s'", 
-				      address);
-	}
-	addr = inet_addr(address);
-	NDR_CHECK(ndr_push_uint32(ndr, ndr_flags, htonl(addr)));
-	return NDR_ERR_SUCCESS;
-}
-
-/*
-  print a ipv4address
-*/
-_PUBLIC_ void ndr_print_ipv4address(struct ndr_print *ndr, const char *name, 
-			   const char *address)
-{
-	ndr->print(ndr, "%-25s: %s", name, address);
-}
-
-
-_PUBLIC_ void ndr_print_struct(struct ndr_print *ndr, const char *name, const char *type)
-{
 	ndr->print(ndr, "%s: struct %s", name, type);
 }
 
-_PUBLIC_ void ndr_print_enum(struct ndr_print *ndr, const char *name, const char *type, 
+void ndr_print_enum(struct ndr_print *ndr, const char *name, const char *type, 
 		    const char *val, uint32_t value)
 {
 	if (ndr->flags & LIBNDR_PRINT_ARRAY_HEX) {
@@ -633,7 +588,7 @@
 	}
 }
 
-_PUBLIC_ void ndr_print_bitmap_flag(struct ndr_print *ndr, size_t size, const char *flag_name, uint32_t flag, uint32_t value)
+void ndr_print_bitmap_flag(struct ndr_print *ndr, size_t size, const char *flag_name, uint32_t flag, uint32_t value)
 {
 	/* this is an attempt to support multi-bit bitmap masks */
 	value &= flag;
@@ -649,62 +604,62 @@
 	}
 }
 
-_PUBLIC_ void ndr_print_int8(struct ndr_print *ndr, const char *name, int8_t v)
+void ndr_print_int8(struct ndr_print *ndr, const char *name, int8_t v)
 {
 	ndr->print(ndr, "%-25s: %d", name, v);
 }
 
-_PUBLIC_ void ndr_print_uint8(struct ndr_print *ndr, const char *name, uint8_t v)
+void ndr_print_uint8(struct ndr_print *ndr, const char *name, uint8_t v)
 {
 	ndr->print(ndr, "%-25s: 0x%02x (%u)", name, v, v);
 }
 
-_PUBLIC_ void ndr_print_int16(struct ndr_print *ndr, const char *name, int16_t v)
+void ndr_print_int16(struct ndr_print *ndr, const char *name, int16_t v)
 {
 	ndr->print(ndr, "%-25s: %d", name, v);
 }
 
-_PUBLIC_ void ndr_print_uint16(struct ndr_print *ndr, const char *name, uint16_t v)
+void ndr_print_uint16(struct ndr_print *ndr, const char *name, uint16_t v)
 {
 	ndr->print(ndr, "%-25s: 0x%04x (%u)", name, v, v);
 }
 
-_PUBLIC_ void ndr_print_int32(struct ndr_print *ndr, const char *name, int32_t v)
+void ndr_print_int32(struct ndr_print *ndr, const char *name, int32_t v)
 {
 	ndr->print(ndr, "%-25s: %d", name, v);
 }
 
-_PUBLIC_ void ndr_print_uint32(struct ndr_print *ndr, const char *name, uint32_t v)
+void ndr_print_uint32(struct ndr_print *ndr, const char *name, uint32_t v)
 {
 	ndr->print(ndr, "%-25s: 0x%08x (%u)", name, v, v);
 }
 
-_PUBLIC_ void ndr_print_udlong(struct ndr_print *ndr, const char *name, uint64_t v)
+void ndr_print_udlong(struct ndr_print *ndr, const char *name, uint64_t v)
 {
-	ndr->print(ndr, "%-25s: 0x%016llx (%llu)", name, (unsigned long long)v, (unsigned long long)v);
+	ndr->print(ndr, "%-25s: 0x%016llx (%llu)", name, v, v);
 }
 
-_PUBLIC_ void ndr_print_udlongr(struct ndr_print *ndr, const char *name, uint64_t v)
+void ndr_print_udlongr(struct ndr_print *ndr, const char *name, uint64_t v)
 {
 	ndr_print_udlong(ndr, name, v);
 }
 
-_PUBLIC_ void ndr_print_dlong(struct ndr_print *ndr, const char *name, int64_t v)
+void ndr_print_dlong(struct ndr_print *ndr, const char *name, int64_t v)
 {
-	ndr->print(ndr, "%-25s: 0x%016llx (%lld)", name, (unsigned long long)v, (long long)v);
+	ndr->print(ndr, "%-25s: 0x%016llx (%lld)", name, v, v);
 }
 
-_PUBLIC_ void ndr_print_hyper(struct ndr_print *ndr, const char *name, uint64_t v)
+void ndr_print_hyper(struct ndr_print *ndr, const char *name, uint64_t v)
 {
 	ndr_print_dlong(ndr, name, v);
 }
 
-_PUBLIC_ void ndr_print_pointer(struct ndr_print *ndr, const char *name, void *v)
+void ndr_print_pointer(struct ndr_print *ndr, const char *name, void *v)
 {
 	ndr->print(ndr, "%-25s: %p", name, v);
 }
 
-_PUBLIC_ void ndr_print_ptr(struct ndr_print *ndr, const char *name, const void *p)
+void ndr_print_ptr(struct ndr_print *ndr, const char *name, const void *p)
 {
 	if (p) {
 		ndr->print(ndr, "%-25s: *", name);
@@ -713,12 +668,12 @@
 	}
 }
 
-_PUBLIC_ void ndr_print_NTTIME(struct ndr_print *ndr, const char *name, NTTIME t)
+void ndr_print_NTTIME(struct ndr_print *ndr, const char *name, NTTIME t)
 {
 	ndr->print(ndr, "%-25s: %s", name, nt_time_string(ndr, t));
 }
 
-_PUBLIC_ void ndr_print_NTTIME_1sec(struct ndr_print *ndr, const char *name, NTTIME t)
+void ndr_print_NTTIME_1sec(struct ndr_print *ndr, const char *name, NTTIME t)
 {
 	/* this is a standard NTTIME here
 	 * as it's already converted in the pull/push code
@@ -726,12 +681,12 @@
 	ndr_print_NTTIME(ndr, name, t);
 }
 
-_PUBLIC_ void ndr_print_NTTIME_hyper(struct ndr_print *ndr, const char *name, NTTIME t)
+void ndr_print_NTTIME_hyper(struct ndr_print *ndr, const char *name, NTTIME t)
 {
 	ndr_print_NTTIME(ndr, name, t);
 }
 
-_PUBLIC_ void ndr_print_time_t(struct ndr_print *ndr, const char *name, time_t t)
+void ndr_print_time_t(struct ndr_print *ndr, const char *name, time_t t)
 {
 	if (t == (time_t)-1 || t == 0) {
 		ndr->print(ndr, "%-25s: (time_t)%d", name, (int)t);
@@ -740,7 +695,7 @@
 	}
 }
 
-_PUBLIC_ void ndr_print_union(struct ndr_print *ndr, const char *name, int level, const char *type)
+void ndr_print_union(struct ndr_print *ndr, const char *name, int level, const char *type)
 {
 	if (ndr->flags & LIBNDR_PRINT_ARRAY_HEX) {
 		ndr->print(ndr, "%-25s: union %s(case 0x%X)", name, type, level);
@@ -749,12 +704,12 @@
 	}
 }
 
-_PUBLIC_ void ndr_print_bad_level(struct ndr_print *ndr, const char *name, uint16_t level)
+void ndr_print_bad_level(struct ndr_print *ndr, const char *name, uint16_t level)
 {
 	ndr->print(ndr, "UNKNOWN LEVEL %u", level);
 }
 
-_PUBLIC_ void ndr_print_array_uint8(struct ndr_print *ndr, const char *name, 
+void ndr_print_array_uint8(struct ndr_print *ndr, const char *name, 
 			   const uint8_t *data, uint32_t count)
 {
 	int i;
@@ -773,7 +728,8 @@
 	ndr->depth++;
 	for (i=0;i<count;i++) {
 		char *idx=NULL;
-		if (asprintf(&idx, "[%d]", i) != -1) {
+		asprintf(&idx, "[%d]", i);
+		if (idx) {
 			ndr_print_uint8(ndr, idx, data[i]);
 			free(idx);
 		}
@@ -781,11 +737,11 @@
 	ndr->depth--;	
 }
 
-_PUBLIC_ void ndr_print_DATA_BLOB(struct ndr_print *ndr, const char *name, DATA_BLOB r)
+void ndr_print_DATA_BLOB(struct ndr_print *ndr, const char *name, DATA_BLOB r)
 {
-	ndr->print(ndr, "%-25s: DATA_BLOB length=%u", name, (unsigned)r.length);
+	ndr->print(ndr, "%-25s: DATA_BLOB length=%u", name, r.length);
 	if (r.length) {
-		dump_data(10, r.data, r.length);
+		dump_data(10, (const char *)r.data, r.length);
 	}
 }
 
@@ -793,7 +749,7 @@
 /*
   push a DATA_BLOB onto the wire. 
 */
-_PUBLIC_ enum ndr_err_code ndr_push_DATA_BLOB(struct ndr_push *ndr, int ndr_flags, DATA_BLOB blob)
+NTSTATUS ndr_push_DATA_BLOB(struct ndr_push *ndr, int ndr_flags, DATA_BLOB blob)
 {
 	if (ndr->flags & LIBNDR_ALIGN_FLAGS) {
 		if (ndr->flags & LIBNDR_FLAG_ALIGN2) {
@@ -809,13 +765,13 @@
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, blob.length));
 	}
 	NDR_CHECK(ndr_push_bytes(ndr, blob.data, blob.length));
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   pull a DATA_BLOB from the wire. 
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_DATA_BLOB(struct ndr_pull *ndr, int ndr_flags, DATA_BLOB *blob)
+NTSTATUS ndr_pull_DATA_BLOB(struct ndr_pull *ndr, int ndr_flags, DATA_BLOB *blob)
 {
 	uint32_t length = 0;
 
@@ -838,22 +794,10 @@
 	NDR_PULL_NEED_BYTES(ndr, length);
 	*blob = data_blob_talloc(ndr->current_mem_ctx, ndr->data+ndr->offset, length);
 	ndr->offset += length;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ uint32_t ndr_size_DATA_BLOB(int ret, const DATA_BLOB *data, int flags)
+uint32_t ndr_size_DATA_BLOB(int ret, const DATA_BLOB *data, int flags)
 {
-	if (!data) return ret;
 	return ret + data->length;
 }
-
-_PUBLIC_ void ndr_print_bool(struct ndr_print *ndr, const char *name, const bool b)
-{
-	ndr->print(ndr, "%-25s: %s", name, b?"true":"false");
-}
-
-_PUBLIC_ void ndr_print_sockaddr_storage(struct ndr_print *ndr, const char *name, const struct sockaddr_storage *ss)
-{
-	char addr[INET6_ADDRSTRLEN];
-	ndr->print(ndr, "%-25s: %s", name, print_sockaddr(addr, sizeof(addr), ss));
-}

Deleted: branches/samba/upstream/source/librpc/ndr/ndr_krb5pac.c
===================================================================
--- branches/samba/upstream/source/librpc/ndr/ndr_krb5pac.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/ndr/ndr_krb5pac.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,141 +0,0 @@
-/*
-   Unix SMB/CIFS implementation.
-
-   routines for marshalling/unmarshalling spoolss subcontext buffer structures
-
-   Copyright (C) Stefan Metzmacher 2005
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-
-#include "includes.h"
-
-#include "librpc/gen_ndr/ndr_krb5pac.h"
-
-static size_t _ndr_size_PAC_INFO(const union PAC_INFO *r, uint32_t level, int flags)
-{
-	size_t s = ndr_size_PAC_INFO(r, level, flags);
-	switch (level) {
-		case PAC_TYPE_LOGON_INFO:
-			return NDR_ROUND(s,8);
-		default:
-			return s;
-	}
-}
-
-static size_t _subcontext_size_PAC_INFO(const union PAC_INFO *r, uint32_t level, int flags)
-{
-	size_t s = ndr_size_PAC_INFO(r, level, flags);
-	return NDR_ROUND(s,8);
-}
-
-enum ndr_err_code ndr_push_PAC_BUFFER(struct ndr_push *ndr, int ndr_flags, const struct PAC_BUFFER *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_push_align(ndr, 4));
-		NDR_CHECK(ndr_push_PAC_TYPE(ndr, NDR_SCALARS, r->type));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, _ndr_size_PAC_INFO(r->info,r->type,0)));
-		{
-			uint32_t _flags_save_PAC_INFO = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN8);
-			NDR_CHECK(ndr_push_relative_ptr1(ndr, r->info));
-			ndr->flags = _flags_save_PAC_INFO;
-		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		{
-			uint32_t _flags_save_PAC_INFO = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN8);
-			if (r->info) {
-				NDR_CHECK(ndr_push_relative_ptr2(ndr, r->info));
-				{
-					struct ndr_push *_ndr_info;
-					NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_info, 0, _subcontext_size_PAC_INFO(r->info,r->type,0)));
-					NDR_CHECK(ndr_push_set_switch_value(_ndr_info, r->info, r->type));
-					NDR_CHECK(ndr_push_PAC_INFO(_ndr_info, NDR_SCALARS|NDR_BUFFERS, r->info));
-					NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_info, 0, _subcontext_size_PAC_INFO(r->info,r->type,0)));
-				}
-			}
-			ndr->flags = _flags_save_PAC_INFO;
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-enum ndr_err_code ndr_pull_PAC_BUFFER(struct ndr_pull *ndr, int ndr_flags, struct PAC_BUFFER *r)
-{
-	uint32_t _ptr_info;
-	TALLOC_CTX *_mem_save_info_0;
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_PAC_TYPE(ndr, NDR_SCALARS, &r->type));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->_ndr_size));
-		{
-			uint32_t _flags_save_PAC_INFO = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN8);
-			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
-			if (_ptr_info) {
-				NDR_PULL_ALLOC(ndr, r->info);
-				NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->info, _ptr_info));
-			} else {
-				r->info = NULL;
-			}
-			ndr->flags = _flags_save_PAC_INFO;
-		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->_pad));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		{
-			uint32_t _flags_save_PAC_INFO = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN8);
-			if (r->info) {
-				uint32_t _relative_save_offset;
-				_relative_save_offset = ndr->offset;
-				NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->info));
-				_mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
-				NDR_PULL_SET_MEM_CTX(ndr, r->info, 0);
-				{
-					struct ndr_pull *_ndr_info;
-					NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_info, 0, r->_ndr_size));
-					NDR_CHECK(ndr_pull_set_switch_value(_ndr_info, r->info, r->type));
-					NDR_CHECK(ndr_pull_PAC_INFO(_ndr_info, NDR_SCALARS|NDR_BUFFERS, r->info));
-					NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_info, 0, r->_ndr_size));
-				}
-				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
-				ndr->offset = _relative_save_offset;
-			}
-			ndr->flags = _flags_save_PAC_INFO;
-		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-void ndr_print_PAC_BUFFER(struct ndr_print *ndr, const char *name, const struct PAC_BUFFER *r)
-{
-	ndr_print_struct(ndr, name, "PAC_BUFFER");
-	ndr->depth++;
-	ndr_print_PAC_TYPE(ndr, "type", r->type);
-	ndr_print_uint32(ndr, "_ndr_size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?_ndr_size_PAC_INFO(r->info,r->type,0):r->_ndr_size);
-	ndr_print_ptr(ndr, "info", r->info);
-	ndr->depth++;
-	if (r->info) {
-		ndr_print_set_switch_value(ndr, r->info, r->type);
-		ndr_print_PAC_INFO(ndr, "info", r->info);
-	}
-	ndr->depth--;
-	ndr_print_uint32(ndr, "_pad", r->_pad);
-	ndr->depth--;
-}

Modified: branches/samba/upstream/source/librpc/ndr/ndr_misc.c
===================================================================
--- branches/samba/upstream/source/librpc/ndr/ndr_misc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/ndr/ndr_misc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,7 +10,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -19,16 +19,122 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
+NTSTATUS ndr_push_GUID(struct ndr_push *ndr, int ndr_flags, const struct GUID *r)
+{
+	if (ndr_flags & NDR_SCALARS) {
+		NDR_CHECK(ndr_push_align(ndr, 4));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->time_low));
+		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->time_mid));
+		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->time_hi_and_version));
+		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->clock_seq, 2));
+		NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->node, 6));
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+	}
+	return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_GUID(struct ndr_pull *ndr, int ndr_flags, struct GUID *r)
+{
+	if (ndr_flags & NDR_SCALARS) {
+		NDR_CHECK(ndr_pull_align(ndr, 4));
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->time_low));
+		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->time_mid));
+		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->time_hi_and_version));
+		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->clock_seq, 2));
+		NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->node, 6));
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+	}
+	return NT_STATUS_OK;
+}
+
+size_t ndr_size_GUID(const struct GUID *r, int flags)
+{
+	return ndr_size_struct(r, flags, (ndr_push_flags_fn_t)ndr_push_GUID);
+}
+
 /**
+  build a GUID from a string
+*/
+NTSTATUS GUID_from_string(const char *s, struct GUID *guid)
+{
+	NTSTATUS status = NT_STATUS_INVALID_PARAMETER;
+	uint32_t time_low;
+	uint32_t time_mid, time_hi_and_version;
+	uint32_t clock_seq[2];
+	uint32_t node[6];
+	int i;
+
+	if (s == NULL) {
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	if (11 == sscanf(s, "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
+			 &time_low, &time_mid, &time_hi_and_version, 
+			 &clock_seq[0], &clock_seq[1],
+			 &node[0], &node[1], &node[2], &node[3], &node[4], &node[5])) {
+	        status = NT_STATUS_OK;
+	} else if (11 == sscanf(s, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
+				&time_low, &time_mid, &time_hi_and_version, 
+				&clock_seq[0], &clock_seq[1],
+				&node[0], &node[1], &node[2], &node[3], &node[4], &node[5])) {
+		status = NT_STATUS_OK;
+	}
+
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
+	}
+
+	guid->time_low = time_low;
+	guid->time_mid = time_mid;
+	guid->time_hi_and_version = time_hi_and_version;
+	guid->clock_seq[0] = clock_seq[0];
+	guid->clock_seq[1] = clock_seq[1];
+	for (i=0;i<6;i++) {
+		guid->node[i] = node[i];
+	}
+
+	return NT_STATUS_OK;
+}
+
+/**
+ * generate a random GUID
+ */
+struct GUID GUID_random(void)
+{
+	struct GUID guid;
+
+	generate_random_buffer((uint8_t *)&guid, sizeof(guid));
+	guid.clock_seq[0] = (guid.clock_seq[0] & 0x3F) | 0x80;
+	guid.time_hi_and_version = (guid.time_hi_and_version & 0x0FFF) | 0x4000;
+
+	return guid;
+}
+
+/**
+ * generate an empty GUID 
+ */
+struct GUID GUID_zero(void)
+{
+	struct GUID guid;
+
+	ZERO_STRUCT(guid);
+
+	return guid;
+}
+
+/**
  * see if a range of memory is all zero. A NULL pointer is considered
  * to be all zero 
  */
-bool all_zero(const uint8_t *ptr, size_t size)
+BOOL all_zero(const uint8_t *ptr, size_t size)
 {
 	int i;
 	if (!ptr) return True;
@@ -38,50 +144,129 @@
 	return True;
 }
 
+
+BOOL GUID_all_zero(const struct GUID *u)
+{
+	if (u->time_low != 0 ||
+	    u->time_mid != 0 ||
+	    u->time_hi_and_version != 0 ||
+	    u->clock_seq[0] != 0 ||
+	    u->clock_seq[1] != 0 ||
+	    !all_zero(u->node, 6)) {
+		return False;
+	}
+	return True;
+}
+
+BOOL GUID_equal(const struct GUID *u1, const struct GUID *u2)
+{
+	if (u1->time_low != u2->time_low ||
+	    u1->time_mid != u2->time_mid ||
+	    u1->time_hi_and_version != u2->time_hi_and_version ||
+	    u1->clock_seq[0] != u2->clock_seq[0] ||
+	    u1->clock_seq[1] != u2->clock_seq[1] ||
+	    memcmp(u1->node, u2->node, 6) != 0) {
+		return False;
+	}
+	return True;
+}
+
+/**
+  its useful to be able to display these in debugging messages
+*/
+char *GUID_string(TALLOC_CTX *mem_ctx, const struct GUID *guid)
+{
+	return talloc_asprintf(mem_ctx, 
+			       "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
+			       guid->time_low, guid->time_mid,
+			       guid->time_hi_and_version,
+			       guid->clock_seq[0],
+			       guid->clock_seq[1],
+			       guid->node[0], guid->node[1],
+			       guid->node[2], guid->node[3],
+			       guid->node[4], guid->node[5]);
+}
+
+char *GUID_string2(TALLOC_CTX *mem_ctx, const struct GUID *guid)
+{
+	char *ret, *s = GUID_string(mem_ctx, guid);
+	ret = talloc_asprintf(mem_ctx, "{%s}", s);
+	talloc_free(s);
+	return ret;
+}
+
 void ndr_print_GUID(struct ndr_print *ndr, const char *name, const struct GUID *guid)
 {
 	ndr->print(ndr, "%-25s: %s", name, GUID_string(ndr, guid));
 }
 
-enum ndr_err_code ndr_push_server_id(struct ndr_push *ndr, int ndr_flags, const struct server_id *r)
+BOOL policy_handle_empty(struct policy_handle *h) 
 {
+	return (h->handle_type == 0 && GUID_all_zero(&h->uuid));
+}
+
+NTSTATUS ndr_push_policy_handle(struct ndr_push *ndr, int ndr_flags, const struct policy_handle *r)
+{
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 4));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->handle_type));
+		NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->uuid));
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+	}
+	return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_policy_handle(struct ndr_pull *ndr, int ndr_flags, struct policy_handle *r)
+{
+	if (ndr_flags & NDR_SCALARS) {
+		NDR_CHECK(ndr_pull_align(ndr, 4));
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->handle_type));
+		NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->uuid));
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+	}
+	return NT_STATUS_OK;
+}
+
+void ndr_print_policy_handle(struct ndr_print *ndr, const char *name, const struct policy_handle *r)
+{
+	ndr_print_struct(ndr, name, "policy_handle");
+	ndr->depth++;
+	ndr_print_uint32(ndr, "handle_type", r->handle_type);
+	ndr_print_GUID(ndr, "uuid", &r->uuid);
+	ndr->depth--;
+}
+
+NTSTATUS ndr_push_server_id(struct ndr_push *ndr, int ndr_flags, const struct server_id *r)
+{
+	if (ndr_flags & NDR_SCALARS) {
+		NDR_CHECK(ndr_push_align(ndr, 4));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS,
-					  (uint32_t)r->pid));
-#ifdef CLUSTER_SUPPORT
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS,
-					  (uint32_t)r->vnn));
-#endif
+					  (uint32_t)r->id.pid));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-enum ndr_err_code ndr_pull_server_id(struct ndr_pull *ndr, int ndr_flags, struct server_id *r)
+NTSTATUS ndr_pull_server_id(struct ndr_pull *ndr, int ndr_flags, struct server_id *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		uint32_t pid;
 		NDR_CHECK(ndr_pull_align(ndr, 4));
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &pid));
-#ifdef CLUSTER_SUPPORT
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->vnn));
-#endif
-		r->pid = (pid_t)pid;
+		r->id.pid = (pid_t)pid;
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 void ndr_print_server_id(struct ndr_print *ndr, const char *name, const struct server_id *r)
 {
 	ndr_print_struct(ndr, name, "server_id");
 	ndr->depth++;
-	ndr_print_uint32(ndr, "id", (uint32_t)r->pid);
-#ifdef CLUSTER_SUPPORT
-	ndr_print_uint32(ndr, "vnn", (uint32_t)r->vnn);
-#endif
+	ndr_print_uint32(ndr, "id", (uint32_t)r->id.pid);
 	ndr->depth--;
 }

Modified: branches/samba/upstream/source/librpc/ndr/ndr_sec.h
===================================================================
--- branches/samba/upstream/source/librpc/ndr/ndr_sec.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/ndr/ndr_sec.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -24,10 +24,10 @@
 
 /* The following definitions come from librpc/ndr/ndr_sec.c  */
 
-enum ndr_err_code ndr_pull_dom_sid2(struct ndr_pull *ndr, int ndr_flags, struct dom_sid *sid);
-enum ndr_err_code ndr_push_dom_sid2(struct ndr_push *ndr, int ndr_flags, const struct dom_sid *sid);
-enum ndr_err_code ndr_pull_dom_sid28(struct ndr_pull *ndr, int ndr_flags, struct dom_sid *sid);
-enum ndr_err_code ndr_push_dom_sid28(struct ndr_push *ndr, int ndr_flags, const struct dom_sid *sid);
+NTSTATUS ndr_pull_dom_sid2(struct ndr_pull *ndr, int ndr_flags, struct dom_sid *sid);
+NTSTATUS ndr_push_dom_sid2(struct ndr_push *ndr, int ndr_flags, const struct dom_sid *sid);
+NTSTATUS ndr_pull_dom_sid28(struct ndr_pull *ndr, int ndr_flags, struct dom_sid *sid);
+NTSTATUS ndr_push_dom_sid28(struct ndr_push *ndr, int ndr_flags, const struct dom_sid *sid);
 #undef _PRINTF_ATTRIBUTE
 #define _PRINTF_ATTRIBUTE(a1, a2)
 

Modified: branches/samba/upstream/source/librpc/ndr/ndr_sec_helper.c
===================================================================
--- branches/samba/upstream/source/librpc/ndr/ndr_sec_helper.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/ndr/ndr_sec_helper.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 
@@ -31,26 +32,6 @@
 	return 8 + 4*sid->num_auths;
 }
 
-size_t ndr_size_dom_sid28(const struct dom_sid *sid, int flags)
-{
-	struct dom_sid zero_sid;
-
-	if (!sid) return 0;
-
-	ZERO_STRUCT(zero_sid);
-
-	if (memcmp(&zero_sid, sid, sizeof(zero_sid)) == 0) {
-		return 0;
-	}
-
-	return 8 + 4*sid->num_auths;
-}
-
-size_t ndr_size_dom_sid0(const struct dom_sid *sid, int flags)
-{
-	return ndr_size_dom_sid28(sid, flags);
-}
-
 /*
   return the wire size of a security_ace
 */
@@ -110,8 +91,813 @@
 	ndr_print_dom_sid(ndr, name, sid);
 }
 
-void ndr_print_dom_sid0(struct ndr_print *ndr, const char *name, const struct dom_sid *sid)
+static NTSTATUS ndr_push_security_ace_flags(struct ndr_push *ndr, int ndr_flags, uint8_t r)
 {
-	ndr_print_dom_sid(ndr, name, sid);
+	NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r));
+	return NT_STATUS_OK;
 }
 
+static NTSTATUS ndr_pull_security_ace_flags(struct ndr_pull *ndr, int ndr_flags, uint8_t *r)
+{
+	uint8_t v;
+	NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &v));
+	*r = v;
+	return NT_STATUS_OK;
+}
+
+void ndr_print_security_ace_flags(struct ndr_print *ndr, const char *name, uint8_t r)
+{
+	ndr_print_uint8(ndr, name, r);
+	ndr->depth++;
+	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SEC_ACE_FLAG_OBJECT_INHERIT", SEC_ACE_FLAG_OBJECT_INHERIT, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SEC_ACE_FLAG_CONTAINER_INHERIT", SEC_ACE_FLAG_CONTAINER_INHERIT, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SEC_ACE_FLAG_NO_PROPAGATE_INHERIT", SEC_ACE_FLAG_NO_PROPAGATE_INHERIT, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SEC_ACE_FLAG_INHERIT_ONLY", SEC_ACE_FLAG_INHERIT_ONLY, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SEC_ACE_FLAG_INHERITED_ACE", SEC_ACE_FLAG_INHERITED_ACE, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SEC_ACE_FLAG_VALID_INHERIT", SEC_ACE_FLAG_VALID_INHERIT, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SEC_ACE_FLAG_SUCCESSFUL_ACCESS", SEC_ACE_FLAG_SUCCESSFUL_ACCESS, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint8_t), "SEC_ACE_FLAG_FAILED_ACCESS", SEC_ACE_FLAG_FAILED_ACCESS, r);
+	ndr->depth--;
+}
+
+static NTSTATUS ndr_push_security_ace_type(struct ndr_push *ndr, int ndr_flags, enum security_ace_type r)
+{
+	NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r));
+	return NT_STATUS_OK;
+}
+
+static NTSTATUS ndr_pull_security_ace_type(struct ndr_pull *ndr, int ndr_flags, enum security_ace_type *r)
+{
+	uint8_t v;
+	NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &v));
+	*r = (enum security_ace_type)v;
+	return NT_STATUS_OK;
+}
+
+void ndr_print_security_ace_type(struct ndr_print *ndr, const char *name, enum security_ace_type r)
+{
+	const char *val = NULL;
+
+	switch (r) {
+		case SEC_ACE_TYPE_ACCESS_ALLOWED: val = "SEC_ACE_TYPE_ACCESS_ALLOWED"; break;
+		case SEC_ACE_TYPE_ACCESS_DENIED: val = "SEC_ACE_TYPE_ACCESS_DENIED"; break;
+		case SEC_ACE_TYPE_SYSTEM_AUDIT: val = "SEC_ACE_TYPE_SYSTEM_AUDIT"; break;
+		case SEC_ACE_TYPE_SYSTEM_ALARM: val = "SEC_ACE_TYPE_SYSTEM_ALARM"; break;
+		case SEC_ACE_TYPE_ALLOWED_COMPOUND: val = "SEC_ACE_TYPE_ALLOWED_COMPOUND"; break;
+		case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT: val = "SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT"; break;
+		case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT: val = "SEC_ACE_TYPE_ACCESS_DENIED_OBJECT"; break;
+		case SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT: val = "SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT"; break;
+		case SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT: val = "SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT"; break;
+	}
+	ndr_print_enum(ndr, name, "ENUM", val, r);
+}
+
+static NTSTATUS ndr_push_security_ace_object_flags(struct ndr_push *ndr, int ndr_flags, uint32_t r)
+{
+	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
+	return NT_STATUS_OK;
+}
+
+static NTSTATUS ndr_pull_security_ace_object_flags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
+{
+	uint32_t v;
+	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
+	*r = v;
+	return NT_STATUS_OK;
+}
+
+void ndr_print_security_ace_object_flags(struct ndr_print *ndr, const char *name, uint32_t r)
+{
+	ndr_print_uint32(ndr, name, r);
+	ndr->depth++;
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SEC_ACE_OBJECT_TYPE_PRESENT", SEC_ACE_OBJECT_TYPE_PRESENT, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT", SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT, r);
+	ndr->depth--;
+}
+
+static NTSTATUS ndr_push_security_ace_object_type(struct ndr_push *ndr, int ndr_flags, const union security_ace_object_type *r)
+{
+	int level;
+	level = ndr_push_get_switch_value(ndr, r);
+	if (ndr_flags & NDR_SCALARS) {
+		switch (level) {
+			case SEC_ACE_OBJECT_TYPE_PRESENT:
+				NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->type));
+			break;
+
+			default:
+			break;
+
+		}
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+		switch (level) {
+			case SEC_ACE_OBJECT_TYPE_PRESENT:
+			break;
+
+			default:
+			break;
+
+		}
+	}
+	return NT_STATUS_OK;
+}
+
+static NTSTATUS ndr_pull_security_ace_object_type(struct ndr_pull *ndr, int ndr_flags, union security_ace_object_type *r)
+{
+	int level;
+	level = ndr_pull_get_switch_value(ndr, r);
+	if (ndr_flags & NDR_SCALARS) {
+		switch (level) {
+			case SEC_ACE_OBJECT_TYPE_PRESENT: {
+				NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->type));
+			break; }
+
+			default: {
+			break; }
+
+		}
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+		switch (level) {
+			case SEC_ACE_OBJECT_TYPE_PRESENT:
+			break;
+
+			default:
+			break;
+
+		}
+	}
+	return NT_STATUS_OK;
+}
+
+void ndr_print_security_ace_object_type(struct ndr_print *ndr, const char *name, const union security_ace_object_type *r)
+{
+	int level;
+	level = ndr_print_get_switch_value(ndr, r);
+	ndr_print_union(ndr, name, level, "security_ace_object_type");
+	switch (level) {
+		case SEC_ACE_OBJECT_TYPE_PRESENT:
+			ndr_print_GUID(ndr, "type", &r->type);
+		break;
+
+		default:
+		break;
+
+	}
+}
+
+static NTSTATUS ndr_push_security_ace_object_inherited_type(struct ndr_push *ndr, int ndr_flags, const union security_ace_object_inherited_type *r)
+{
+	int level;
+	level = ndr_push_get_switch_value(ndr, r);
+	if (ndr_flags & NDR_SCALARS) {
+		switch (level) {
+			case SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT:
+				NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->inherited_type));
+			break;
+
+			default:
+			break;
+
+		}
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+		switch (level) {
+			case SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT:
+			break;
+
+			default:
+			break;
+
+		}
+	}
+	return NT_STATUS_OK;
+}
+
+static NTSTATUS ndr_pull_security_ace_object_inherited_type(struct ndr_pull *ndr, int ndr_flags, union security_ace_object_inherited_type *r)
+{
+	int level;
+	level = ndr_pull_get_switch_value(ndr, r);
+	if (ndr_flags & NDR_SCALARS) {
+		switch (level) {
+			case SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT: {
+				NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->inherited_type));
+			break; }
+
+			default: {
+			break; }
+
+		}
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+		switch (level) {
+			case SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT:
+			break;
+
+			default:
+			break;
+
+		}
+	}
+	return NT_STATUS_OK;
+}
+
+void ndr_print_security_ace_object_inherited_type(struct ndr_print *ndr, const char *name, const union security_ace_object_inherited_type *r)
+{
+	int level;
+	level = ndr_print_get_switch_value(ndr, r);
+	ndr_print_union(ndr, name, level, "security_ace_object_inherited_type");
+	switch (level) {
+		case SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT:
+			ndr_print_GUID(ndr, "inherited_type", &r->inherited_type);
+		break;
+
+		default:
+		break;
+
+	}
+}
+
+static NTSTATUS ndr_push_security_ace_object(struct ndr_push *ndr, int ndr_flags, const struct security_ace_object *r)
+{
+	if (ndr_flags & NDR_SCALARS) {
+		NDR_CHECK(ndr_push_align(ndr, 4));
+		NDR_CHECK(ndr_push_security_ace_object_flags(ndr, NDR_SCALARS, r->flags));
+		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->type, r->flags&SEC_ACE_OBJECT_TYPE_PRESENT));
+		NDR_CHECK(ndr_push_security_ace_object_type(ndr, NDR_SCALARS, &r->type));
+		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->inherited_type, r->flags&SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT));
+		NDR_CHECK(ndr_push_security_ace_object_inherited_type(ndr, NDR_SCALARS, &r->inherited_type));
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+		NDR_CHECK(ndr_push_security_ace_object_type(ndr, NDR_BUFFERS, &r->type));
+		NDR_CHECK(ndr_push_security_ace_object_inherited_type(ndr, NDR_BUFFERS, &r->inherited_type));
+	}
+	return NT_STATUS_OK;
+}
+
+static NTSTATUS ndr_pull_security_ace_object(struct ndr_pull *ndr, int ndr_flags, struct security_ace_object *r)
+{
+	if (ndr_flags & NDR_SCALARS) {
+		NDR_CHECK(ndr_pull_align(ndr, 4));
+		NDR_CHECK(ndr_pull_security_ace_object_flags(ndr, NDR_SCALARS, &r->flags));
+		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->type, r->flags&SEC_ACE_OBJECT_TYPE_PRESENT));
+		NDR_CHECK(ndr_pull_security_ace_object_type(ndr, NDR_SCALARS, &r->type));
+		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->inherited_type, r->flags&SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT));
+		NDR_CHECK(ndr_pull_security_ace_object_inherited_type(ndr, NDR_SCALARS, &r->inherited_type));
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+		NDR_CHECK(ndr_pull_security_ace_object_type(ndr, NDR_BUFFERS, &r->type));
+		NDR_CHECK(ndr_pull_security_ace_object_inherited_type(ndr, NDR_BUFFERS, &r->inherited_type));
+	}
+	return NT_STATUS_OK;
+}
+
+void ndr_print_security_ace_object(struct ndr_print *ndr, const char *name, const struct security_ace_object *r)
+{
+	ndr_print_struct(ndr, name, "security_ace_object");
+	ndr->depth++;
+	ndr_print_security_ace_object_flags(ndr, "flags", r->flags);
+	ndr_print_set_switch_value(ndr, &r->type, r->flags&SEC_ACE_OBJECT_TYPE_PRESENT);
+	ndr_print_security_ace_object_type(ndr, "type", &r->type);
+	ndr_print_set_switch_value(ndr, &r->inherited_type, r->flags&SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT);
+	ndr_print_security_ace_object_inherited_type(ndr, "inherited_type", &r->inherited_type);
+	ndr->depth--;
+}
+
+static NTSTATUS ndr_push_security_ace_object_ctr(struct ndr_push *ndr, int ndr_flags, const union security_ace_object_ctr *r)
+{
+	int level;
+	level = ndr_push_get_switch_value(ndr, r);
+	if (ndr_flags & NDR_SCALARS) {
+		switch (level) {
+			case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT:
+				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_SCALARS, &r->object));
+			break;
+
+			case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT:
+				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_SCALARS, &r->object));
+			break;
+
+			case SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT:
+				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_SCALARS, &r->object));
+			break;
+
+			case SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT:
+				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_SCALARS, &r->object));
+			break;
+
+			default:
+			break;
+
+		}
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+		switch (level) {
+			case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT:
+				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_BUFFERS, &r->object));
+			break;
+
+			case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT:
+				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_BUFFERS, &r->object));
+			break;
+
+			case SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT:
+				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_BUFFERS, &r->object));
+			break;
+
+			case SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT:
+				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_BUFFERS, &r->object));
+			break;
+
+			default:
+			break;
+
+		}
+	}
+	return NT_STATUS_OK;
+}
+
+static NTSTATUS ndr_pull_security_ace_object_ctr(struct ndr_pull *ndr, int ndr_flags, union security_ace_object_ctr *r)
+{
+	int level;
+	level = ndr_pull_get_switch_value(ndr, r);
+	if (ndr_flags & NDR_SCALARS) {
+		switch (level) {
+			case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT: {
+				NDR_CHECK(ndr_pull_security_ace_object(ndr, NDR_SCALARS, &r->object));
+			break; }
+
+			case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT: {
+				NDR_CHECK(ndr_pull_security_ace_object(ndr, NDR_SCALARS, &r->object));
+			break; }
+
+			case SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT: {
+				NDR_CHECK(ndr_pull_security_ace_object(ndr, NDR_SCALARS, &r->object));
+			break; }
+
+			case SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT: {
+				NDR_CHECK(ndr_pull_security_ace_object(ndr, NDR_SCALARS, &r->object));
+			break; }
+
+			default: {
+			break; }
+
+		}
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+		switch (level) {
+			case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT:
+				NDR_CHECK(ndr_pull_security_ace_object(ndr, NDR_BUFFERS, &r->object));
+			break;
+
+			case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT:
+				NDR_CHECK(ndr_pull_security_ace_object(ndr, NDR_BUFFERS, &r->object));
+			break;
+
+			case SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT:
+				NDR_CHECK(ndr_pull_security_ace_object(ndr, NDR_BUFFERS, &r->object));
+			break;
+
+			case SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT:
+				NDR_CHECK(ndr_pull_security_ace_object(ndr, NDR_BUFFERS, &r->object));
+			break;
+
+			default:
+			break;
+
+		}
+	}
+	return NT_STATUS_OK;
+}
+
+void ndr_print_security_ace_object_ctr(struct ndr_print *ndr, const char *name, const union security_ace_object_ctr *r)
+{
+	int level;
+	level = ndr_print_get_switch_value(ndr, r);
+	ndr_print_union(ndr, name, level, "security_ace_object_ctr");
+	switch (level) {
+		case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT:
+			ndr_print_security_ace_object(ndr, "object", &r->object);
+		break;
+
+		case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT:
+			ndr_print_security_ace_object(ndr, "object", &r->object);
+		break;
+
+		case SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT:
+			ndr_print_security_ace_object(ndr, "object", &r->object);
+		break;
+
+		case SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT:
+			ndr_print_security_ace_object(ndr, "object", &r->object);
+		break;
+
+		default:
+		break;
+
+	}
+}
+
+NTSTATUS ndr_push_security_ace(struct ndr_push *ndr, int ndr_flags, const struct security_ace *r)
+{
+	if (ndr_flags & NDR_SCALARS) {
+		NDR_CHECK(ndr_push_align(ndr, 4));
+		NDR_CHECK(ndr_push_security_ace_type(ndr, NDR_SCALARS, r->type));
+		NDR_CHECK(ndr_push_security_ace_flags(ndr, NDR_SCALARS, r->flags));
+		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_size_security_ace(r,ndr->flags)));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->access_mask));
+		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->object, r->type));
+		NDR_CHECK(ndr_push_security_ace_object_ctr(ndr, NDR_SCALARS, &r->object));
+		NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS, &r->trustee));
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+		NDR_CHECK(ndr_push_security_ace_object_ctr(ndr, NDR_BUFFERS, &r->object));
+	}
+	return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_security_ace(struct ndr_pull *ndr, int ndr_flags, struct security_ace *r)
+{
+	if (ndr_flags & NDR_SCALARS) {
+		NDR_CHECK(ndr_pull_align(ndr, 4));
+		NDR_CHECK(ndr_pull_security_ace_type(ndr, NDR_SCALARS, &r->type));
+		NDR_CHECK(ndr_pull_security_ace_flags(ndr, NDR_SCALARS, &r->flags));
+		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->access_mask));
+		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->object, r->type));
+		NDR_CHECK(ndr_pull_security_ace_object_ctr(ndr, NDR_SCALARS, &r->object));
+		NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_SCALARS, &r->trustee));
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+		NDR_CHECK(ndr_pull_security_ace_object_ctr(ndr, NDR_BUFFERS, &r->object));
+	}
+	return NT_STATUS_OK;
+}
+
+void ndr_print_security_ace(struct ndr_print *ndr, const char *name, const struct security_ace *r)
+{
+	ndr_print_struct(ndr, name, "security_ace");
+	ndr->depth++;
+	ndr_print_security_ace_type(ndr, "type", r->type);
+	ndr_print_security_ace_flags(ndr, "flags", r->flags);
+	ndr_print_uint16(ndr, "size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_security_ace(r,ndr->flags):r->size);
+	ndr_print_uint32(ndr, "access_mask", r->access_mask);
+	ndr_print_set_switch_value(ndr, &r->object, r->type);
+	ndr_print_security_ace_object_ctr(ndr, "object", &r->object);
+	ndr_print_dom_sid(ndr, "trustee", &r->trustee);
+	ndr->depth--;
+}
+
+static NTSTATUS ndr_push_security_acl_revision(struct ndr_push *ndr, int ndr_flags, enum security_acl_revision r)
+{
+	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
+	return NT_STATUS_OK;
+}
+
+static NTSTATUS ndr_pull_security_acl_revision(struct ndr_pull *ndr, int ndr_flags, enum security_acl_revision *r)
+{
+	uint16_t v;
+	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
+	*r = (enum security_acl_revision)v;
+	return NT_STATUS_OK;
+}
+
+void ndr_print_security_acl_revision(struct ndr_print *ndr, const char *name, enum security_acl_revision r)
+{
+	const char *val = NULL;
+
+	switch (r) {
+		case SECURITY_ACL_REVISION_NT4: val = "SECURITY_ACL_REVISION_NT4"; break;
+		case SECURITY_ACL_REVISION_ADS: val = "SECURITY_ACL_REVISION_ADS"; break;
+	}
+	ndr_print_enum(ndr, name, "ENUM", val, r);
+}
+
+NTSTATUS ndr_push_security_acl(struct ndr_push *ndr, int ndr_flags, const struct security_acl *r)
+{
+	uint32_t cntr_aces_0;
+	if (ndr_flags & NDR_SCALARS) {
+		NDR_CHECK(ndr_push_align(ndr, 4));
+		NDR_CHECK(ndr_push_security_acl_revision(ndr, NDR_SCALARS, r->revision));
+		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_size_security_acl(r,ndr->flags)));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_aces));
+		for (cntr_aces_0 = 0; cntr_aces_0 < r->num_aces; cntr_aces_0++) {
+			NDR_CHECK(ndr_push_security_ace(ndr, NDR_SCALARS, &r->aces[cntr_aces_0]));
+		}
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+		for (cntr_aces_0 = 0; cntr_aces_0 < r->num_aces; cntr_aces_0++) {
+			NDR_CHECK(ndr_push_security_ace(ndr, NDR_BUFFERS, &r->aces[cntr_aces_0]));
+		}
+	}
+	return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_security_acl(struct ndr_pull *ndr, int ndr_flags, struct security_acl *r)
+{
+	uint32_t cntr_aces_0;
+	TALLOC_CTX *_mem_save_aces_0;
+	if (ndr_flags & NDR_SCALARS) {
+		NDR_CHECK(ndr_pull_align(ndr, 4));
+		NDR_CHECK(ndr_pull_security_acl_revision(ndr, NDR_SCALARS, &r->revision));
+		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_aces));
+		if (r->num_aces > 1000) { /* num_aces is unsigned */
+			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
+		}
+		NDR_PULL_ALLOC_N(ndr, r->aces, r->num_aces);
+		_mem_save_aces_0 = NDR_PULL_GET_MEM_CTX(ndr);
+		NDR_PULL_SET_MEM_CTX(ndr, r->aces, 0);
+		for (cntr_aces_0 = 0; cntr_aces_0 < r->num_aces; cntr_aces_0++) {
+			NDR_CHECK(ndr_pull_security_ace(ndr, NDR_SCALARS, &r->aces[cntr_aces_0]));
+		}
+		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_aces_0, 0);
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+		_mem_save_aces_0 = NDR_PULL_GET_MEM_CTX(ndr);
+		NDR_PULL_SET_MEM_CTX(ndr, r->aces, 0);
+		for (cntr_aces_0 = 0; cntr_aces_0 < r->num_aces; cntr_aces_0++) {
+			NDR_CHECK(ndr_pull_security_ace(ndr, NDR_BUFFERS, &r->aces[cntr_aces_0]));
+		}
+		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_aces_0, 0);
+	}
+	return NT_STATUS_OK;
+}
+
+void ndr_print_security_acl(struct ndr_print *ndr, const char *name, const struct security_acl *r)
+{
+	uint32_t cntr_aces_0;
+	ndr_print_struct(ndr, name, "security_acl");
+	ndr->depth++;
+	ndr_print_security_acl_revision(ndr, "revision", r->revision);
+	ndr_print_uint16(ndr, "size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_security_acl(r,ndr->flags):r->size);
+	ndr_print_uint32(ndr, "num_aces", r->num_aces);
+	ndr->print(ndr, "%s: ARRAY(%d)", "aces", r->num_aces);
+	ndr->depth++;
+	for (cntr_aces_0=0;cntr_aces_0<r->num_aces;cntr_aces_0++) {
+		char *idx_0=NULL;
+		asprintf(&idx_0, "[%d]", cntr_aces_0);
+		if (idx_0) {
+			ndr_print_security_ace(ndr, "aces", &r->aces[cntr_aces_0]);
+			free(idx_0);
+		}
+	}
+	ndr->depth--;
+	ndr->depth--;
+}
+
+static NTSTATUS ndr_push_security_descriptor_revision(struct ndr_push *ndr, int ndr_flags, enum security_descriptor_revision r)
+{
+	NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r));
+	return NT_STATUS_OK;
+}
+
+static NTSTATUS ndr_pull_security_descriptor_revision(struct ndr_pull *ndr, int ndr_flags, enum security_descriptor_revision *r)
+{
+	uint8_t v;
+	NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &v));
+	*r = (enum security_descriptor_revision)v;
+	return NT_STATUS_OK;
+}
+
+void ndr_print_security_descriptor_revision(struct ndr_print *ndr, const char *name, enum security_descriptor_revision r)
+{
+	const char *val = NULL;
+
+	switch (r) {
+		case SECURITY_DESCRIPTOR_REVISION_1: val = "SECURITY_DESCRIPTOR_REVISION_1"; break;
+	}
+	ndr_print_enum(ndr, name, "ENUM", val, r);
+}
+
+static NTSTATUS ndr_push_security_descriptor_type(struct ndr_push *ndr, int ndr_flags, uint16_t r)
+{
+	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
+	return NT_STATUS_OK;
+}
+
+static NTSTATUS ndr_pull_security_descriptor_type(struct ndr_pull *ndr, int ndr_flags, uint16_t *r)
+{
+	uint16_t v;
+	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
+	*r = v;
+	return NT_STATUS_OK;
+}
+
+void ndr_print_security_descriptor_type(struct ndr_print *ndr, const char *name, uint16_t r)
+{
+	ndr_print_uint16(ndr, name, r);
+	ndr->depth++;
+	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_OWNER_DEFAULTED", SEC_DESC_OWNER_DEFAULTED, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_GROUP_DEFAULTED", SEC_DESC_GROUP_DEFAULTED, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_DACL_PRESENT", SEC_DESC_DACL_PRESENT, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_DACL_DEFAULTED", SEC_DESC_DACL_DEFAULTED, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_SACL_PRESENT", SEC_DESC_SACL_PRESENT, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_SACL_DEFAULTED", SEC_DESC_SACL_DEFAULTED, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_DACL_TRUSTED", SEC_DESC_DACL_TRUSTED, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_SERVER_SECURITY", SEC_DESC_SERVER_SECURITY, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_DACL_AUTO_INHERIT_REQ", SEC_DESC_DACL_AUTO_INHERIT_REQ, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_SACL_AUTO_INHERIT_REQ", SEC_DESC_SACL_AUTO_INHERIT_REQ, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_DACL_AUTO_INHERITED", SEC_DESC_DACL_AUTO_INHERITED, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_SACL_AUTO_INHERITED", SEC_DESC_SACL_AUTO_INHERITED, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_DACL_PROTECTED", SEC_DESC_DACL_PROTECTED, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_SACL_PROTECTED", SEC_DESC_SACL_PROTECTED, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_RM_CONTROL_VALID", SEC_DESC_RM_CONTROL_VALID, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint16_t), "SEC_DESC_SELF_RELATIVE", SEC_DESC_SELF_RELATIVE, r);
+	ndr->depth--;
+}
+
+NTSTATUS ndr_push_security_descriptor(struct ndr_push *ndr, int ndr_flags, const struct security_descriptor *r)
+{
+	{
+		uint32_t _flags_save_STRUCT = ndr->flags;
+		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN);
+		if (ndr_flags & NDR_SCALARS) {
+			NDR_CHECK(ndr_push_align(ndr, 4));
+			NDR_CHECK(ndr_push_security_descriptor_revision(ndr, NDR_SCALARS, r->revision));
+			NDR_CHECK(ndr_push_security_descriptor_type(ndr, NDR_SCALARS, r->type));
+			NDR_CHECK(ndr_push_relative_ptr1(ndr, r->owner_sid));
+			NDR_CHECK(ndr_push_relative_ptr1(ndr, r->group_sid));
+			NDR_CHECK(ndr_push_relative_ptr1(ndr, r->sacl));
+			NDR_CHECK(ndr_push_relative_ptr1(ndr, r->dacl));
+		}
+		if (ndr_flags & NDR_BUFFERS) {
+			if (r->owner_sid) {
+				NDR_CHECK(ndr_push_relative_ptr2(ndr, r->owner_sid));
+				NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS, r->owner_sid));
+			}
+			if (r->group_sid) {
+				NDR_CHECK(ndr_push_relative_ptr2(ndr, r->group_sid));
+				NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS, r->group_sid));
+			}
+			if (r->sacl) {
+				NDR_CHECK(ndr_push_relative_ptr2(ndr, r->sacl));
+				NDR_CHECK(ndr_push_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->sacl));
+			}
+			if (r->dacl) {
+				NDR_CHECK(ndr_push_relative_ptr2(ndr, r->dacl));
+				NDR_CHECK(ndr_push_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->dacl));
+			}
+		}
+		ndr->flags = _flags_save_STRUCT;
+	}
+	return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_security_descriptor(struct ndr_pull *ndr, int ndr_flags, struct security_descriptor *r)
+{
+	uint32_t _ptr_owner_sid;
+	TALLOC_CTX *_mem_save_owner_sid_0;
+	uint32_t _ptr_group_sid;
+	TALLOC_CTX *_mem_save_group_sid_0;
+	uint32_t _ptr_sacl;
+	TALLOC_CTX *_mem_save_sacl_0;
+	uint32_t _ptr_dacl;
+	TALLOC_CTX *_mem_save_dacl_0;
+	{
+		uint32_t _flags_save_STRUCT = ndr->flags;
+		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN);
+		if (ndr_flags & NDR_SCALARS) {
+			NDR_CHECK(ndr_pull_align(ndr, 4));
+			NDR_CHECK(ndr_pull_security_descriptor_revision(ndr, NDR_SCALARS, &r->revision));
+			NDR_CHECK(ndr_pull_security_descriptor_type(ndr, NDR_SCALARS, &r->type));
+			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_owner_sid));
+			if (_ptr_owner_sid) {
+				NDR_PULL_ALLOC(ndr, r->owner_sid);
+				NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->owner_sid, _ptr_owner_sid));
+			} else {
+				r->owner_sid = NULL;
+			}
+			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_group_sid));
+			if (_ptr_group_sid) {
+				NDR_PULL_ALLOC(ndr, r->group_sid);
+				NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->group_sid, _ptr_group_sid));
+			} else {
+				r->group_sid = NULL;
+			}
+			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sacl));
+			if (_ptr_sacl) {
+				NDR_PULL_ALLOC(ndr, r->sacl);
+				NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->sacl, _ptr_sacl));
+			} else {
+				r->sacl = NULL;
+			}
+			NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dacl));
+			if (_ptr_dacl) {
+				NDR_PULL_ALLOC(ndr, r->dacl);
+				NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->dacl, _ptr_dacl));
+			} else {
+				r->dacl = NULL;
+			}
+		}
+		if (ndr_flags & NDR_BUFFERS) {
+			if (r->owner_sid) {
+				struct ndr_pull_save _relative_save;
+				ndr_pull_save(ndr, &_relative_save);
+				NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->owner_sid));
+				_mem_save_owner_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
+				NDR_PULL_SET_MEM_CTX(ndr, r->owner_sid, 0);
+				NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_SCALARS, r->owner_sid));
+				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_owner_sid_0, 0);
+				ndr_pull_restore(ndr, &_relative_save);
+			}
+			if (r->group_sid) {
+				struct ndr_pull_save _relative_save;
+				ndr_pull_save(ndr, &_relative_save);
+				NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->group_sid));
+				_mem_save_group_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
+				NDR_PULL_SET_MEM_CTX(ndr, r->group_sid, 0);
+				NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_SCALARS, r->group_sid));
+				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_group_sid_0, 0);
+				ndr_pull_restore(ndr, &_relative_save);
+			}
+			if (r->sacl) {
+				struct ndr_pull_save _relative_save;
+				ndr_pull_save(ndr, &_relative_save);
+				NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->sacl));
+				_mem_save_sacl_0 = NDR_PULL_GET_MEM_CTX(ndr);
+				NDR_PULL_SET_MEM_CTX(ndr, r->sacl, 0);
+				NDR_CHECK(ndr_pull_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->sacl));
+				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sacl_0, 0);
+				ndr_pull_restore(ndr, &_relative_save);
+			}
+			if (r->dacl) {
+				struct ndr_pull_save _relative_save;
+				ndr_pull_save(ndr, &_relative_save);
+				NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->dacl));
+				_mem_save_dacl_0 = NDR_PULL_GET_MEM_CTX(ndr);
+				NDR_PULL_SET_MEM_CTX(ndr, r->dacl, 0);
+				NDR_CHECK(ndr_pull_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->dacl));
+				NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dacl_0, 0);
+				ndr_pull_restore(ndr, &_relative_save);
+			}
+		}
+		ndr->flags = _flags_save_STRUCT;
+	}
+	return NT_STATUS_OK;
+}
+
+void ndr_print_security_descriptor(struct ndr_print *ndr, const char *name, const struct security_descriptor *r)
+{
+	ndr_print_struct(ndr, name, "security_descriptor");
+	{
+		uint32_t _flags_save_STRUCT = ndr->flags;
+		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN);
+		ndr->depth++;
+		ndr_print_security_descriptor_revision(ndr, "revision", r->revision);
+		ndr_print_security_descriptor_type(ndr, "type", r->type);
+		ndr_print_ptr(ndr, "owner_sid", r->owner_sid);
+		ndr->depth++;
+		if (r->owner_sid) {
+			ndr_print_dom_sid(ndr, "owner_sid", r->owner_sid);
+		}
+		ndr->depth--;
+		ndr_print_ptr(ndr, "group_sid", r->group_sid);
+		ndr->depth++;
+		if (r->group_sid) {
+			ndr_print_dom_sid(ndr, "group_sid", r->group_sid);
+		}
+		ndr->depth--;
+		ndr_print_ptr(ndr, "sacl", r->sacl);
+		ndr->depth++;
+		if (r->sacl) {
+			ndr_print_security_acl(ndr, "sacl", r->sacl);
+		}
+		ndr->depth--;
+		ndr_print_ptr(ndr, "dacl", r->dacl);
+		ndr->depth++;
+		if (r->dacl) {
+			ndr_print_security_acl(ndr, "dacl", r->dacl);
+		}
+		ndr->depth--;
+		ndr->depth--;
+		ndr->flags = _flags_save_STRUCT;
+	}
+}
+
+NTSTATUS ndr_push_security_secinfo(struct ndr_push *ndr, int ndr_flags, uint32_t r)
+{
+	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
+	return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_pull_security_secinfo(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
+{
+	uint32_t v;
+	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
+	*r = v;
+	return NT_STATUS_OK;
+}
+
+void ndr_print_security_secinfo(struct ndr_print *ndr, const char *name, uint32_t r)
+{
+	ndr_print_uint32(ndr, name, r);
+	ndr->depth++;
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SECINFO_OWNER", SECINFO_OWNER, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SECINFO_GROUP", SECINFO_GROUP, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SECINFO_DACL", SECINFO_DACL, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SECINFO_SACL", SECINFO_SACL, r);
+	ndr->depth--;
+}
+

Modified: branches/samba/upstream/source/librpc/ndr/ndr_string.c
===================================================================
--- branches/samba/upstream/source/librpc/ndr/ndr_string.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/ndr/ndr_string.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,28 +16,28 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
-#include "librpc/ndr/libndr.h"
 
 /**
   pull a general string from the wire
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_string(struct ndr_pull *ndr, int ndr_flags, const char **s)
+NTSTATUS ndr_pull_string(struct ndr_pull *ndr, int ndr_flags, const char **s)
 {
 	char *as=NULL;
 	uint32_t len1, ofs, len2;
 	uint16_t len3;
 	int ret;
-	int chset = CH_UTF16;
+	charset_t chset = CH_UTF16LE;
 	unsigned byte_mul = 2;
 	unsigned flags = ndr->flags;
 	unsigned c_len_term = 0;
 
 	if (!(ndr_flags & NDR_SCALARS)) {
-		return NDR_ERR_SUCCESS;
+		return NT_STATUS_OK;
 	}
 
 	if (NDR_BE(ndr)) {
@@ -85,8 +85,7 @@
 						    chset, CH_UNIX, 
 						    ndr->data+ndr->offset, 
 						    (len2 + c_len_term)*byte_mul,
-						    (void **)(void *)&as,
-						    false);
+						    &as, True);
 			if (ret == -1) {
 				return ndr_pull_error(ndr, NDR_ERR_CHARCNV, 
 						      "Bad character conversion");
@@ -123,8 +122,7 @@
 						    chset, CH_UNIX, 
 						    ndr->data+ndr->offset, 
 						    (len1 + c_len_term)*byte_mul,
-						    (void **)(void *)&as,
-						    false);
+						    &as, False);
 			if (ret == -1) {
 				return ndr_pull_error(ndr, NDR_ERR_CHARCNV, 
 						      "Bad character conversion");
@@ -162,8 +160,7 @@
 						    chset, CH_UNIX, 
 						    ndr->data+ndr->offset, 
 						    (len1 + c_len_term)*byte_mul,
-						    (void **)(void *)&as,
-						    false);
+						    &as, False);
 			if (ret == -1) {
 				return ndr_pull_error(ndr, NDR_ERR_CHARCNV, 
 						      "Bad character conversion");
@@ -197,8 +194,7 @@
 						    chset, CH_UNIX, 
 						    ndr->data+ndr->offset, 
 						    (len3 + c_len_term)*byte_mul,
-						    (void **)(void *)&as,
-						    false);
+						    &as, False);
 			if (ret == -1) {
 				return ndr_pull_error(ndr, NDR_ERR_CHARCNV, 
 						      "Bad character conversion");
@@ -229,9 +225,7 @@
 			ret = convert_string_talloc(ndr->current_mem_ctx,
 						    chset, CH_UNIX, 
 						    ndr->data+ndr->offset, 
-						    len3,
-						    (void **)(void *)&as,
-						    false);
+						    len3, &as, False);
 			if (ret == -1) {
 				return ndr_pull_error(ndr, NDR_ERR_CHARCNV, 
 						      "Bad character conversion");
@@ -250,9 +244,7 @@
 		ret = convert_string_talloc(ndr->current_mem_ctx,
 					    chset, CH_UNIX, 
 					    ndr->data+ndr->offset, 
-					    len1,
-					    (void **)(void *)&as,
-					    false);
+					    len1, &as, False);
 		if (ret == -1) {
 			return ndr_pull_error(ndr, NDR_ERR_CHARCNV, 
 					      "Bad character conversion");
@@ -268,9 +260,7 @@
 		ret = convert_string_talloc(ndr->current_mem_ctx,
 					    chset, CH_UNIX, 
 					    ndr->data+ndr->offset, 
-					    len1*byte_mul,
-					    (void **)(void *)&as,
-					    false);
+					    len1*byte_mul, &as, False);
 		if (ret == -1) {
 			return ndr_pull_error(ndr, NDR_ERR_CHARCNV, 
 					      "Bad character conversion");
@@ -279,56 +269,28 @@
 		*s = as;
 		break;
 
-	case LIBNDR_FLAG_STR_NOTERM:
-		if (!(ndr->flags & LIBNDR_FLAG_REMAINING)) {
-			return ndr_pull_error(ndr, NDR_ERR_STRING, "Bad string flags 0x%x (missing NDR_REMAINING)\n",
-					      ndr->flags & LIBNDR_STRING_FLAGS);
-		}
-
-		len1 = ndr->data_size - ndr->offset;
-
-		NDR_PULL_NEED_BYTES(ndr, len1);
-		if (len1 == 0) {
-			as = talloc_strdup(ndr->current_mem_ctx, "");
-		} else {
-			ret = convert_string_talloc(ndr->current_mem_ctx,
-						    chset, CH_UNIX, 
-						    ndr->data+ndr->offset, 
-						    len1,
-						    (void **)(void *)&as,
-						    false);
-			if (ret == -1) {
-				return ndr_pull_error(ndr, NDR_ERR_CHARCNV, 
-						      "Bad character conversion");
-			}
-		}
-		NDR_CHECK(ndr_pull_advance(ndr, len1));
-
-		*s = as;
-		break;
-
 	default:
 		return ndr_pull_error(ndr, NDR_ERR_STRING, "Bad string flags 0x%x\n",
 				      ndr->flags & LIBNDR_STRING_FLAGS);
 	}
 
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 
 /**
   push a general string onto the wire
 */
-_PUBLIC_ enum ndr_err_code ndr_push_string(struct ndr_push *ndr, int ndr_flags, const char *s)
+NTSTATUS ndr_push_string(struct ndr_push *ndr, int ndr_flags, const char *s)
 {
 	ssize_t s_len, c_len, d_len;
-	int chset = CH_UTF16;
+	charset_t chset = CH_UTF16LE;
 	unsigned flags = ndr->flags;
 	unsigned byte_mul = 2;
 	uint8_t *dest = NULL;
 
 	if (!(ndr_flags & NDR_SCALARS)) {
-		return NDR_ERR_SUCCESS;
+		return NT_STATUS_OK;
 	}
 
 	if (NDR_BE(ndr)) {
@@ -357,8 +319,8 @@
 	       LIBNDR_FLAG_STR_FIXLEN32))) {
 		s_len++;
 	}
-	d_len = convert_string_talloc(ndr, CH_UNIX, chset, s, s_len,
-				      (void **)(void *)&dest, false);
+	d_len = convert_string_talloc(ndr, CH_UNIX, chset, s, s_len, &dest,
+				      False);
 	if (d_len == -1) {
 		return ndr_push_error(ndr, NDR_ERR_CHARCNV, 
 				      "Bad character conversion");
@@ -418,24 +380,19 @@
 	}
 
 	default:
-		if (ndr->flags & LIBNDR_FLAG_REMAINING) {
-			NDR_CHECK(ndr_push_bytes(ndr, dest, d_len));
-			break;		
-		}
-
 		return ndr_push_error(ndr, NDR_ERR_STRING, "Bad string flags 0x%x\n",
 				      ndr->flags & LIBNDR_STRING_FLAGS);
 	}
 
 	talloc_free(dest);
 
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /**
   push a general string onto the wire
 */
-_PUBLIC_ size_t ndr_string_array_size(struct ndr_push *ndr, const char *s)
+size_t ndr_string_array_size(struct ndr_push *ndr, const char *s)
 {
 	size_t c_len;
 	unsigned flags = ndr->flags;
@@ -449,7 +406,7 @@
 		return 15;
 	}
 	
-	c_len = s?strlen_m(s):0;
+	c_len = s?strlen(s):0;
 
 	if (flags & (LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_UTF8)) {
 		byte_mul = 1;
@@ -468,7 +425,7 @@
 	return c_len;
 }
 
-_PUBLIC_ void ndr_print_string(struct ndr_print *ndr, const char *name, const char *s)
+void ndr_print_string(struct ndr_print *ndr, const char *name, const char *s)
 {
 	if (s) {
 		ndr->print(ndr, "%-25s: '%s'", name, s);
@@ -477,7 +434,7 @@
 	}
 }
 
-_PUBLIC_ uint32_t ndr_size_string(int ret, const char * const* string, int flags) 
+uint32_t ndr_size_string(int ret, const char * const* string, int flags) 
 {
 	/* FIXME: Is this correct for all strings ? */
 	if(!(*string)) return ret;
@@ -487,142 +444,60 @@
 /**
   pull a general string array from the wire
 */
-_PUBLIC_ enum ndr_err_code ndr_pull_string_array(struct ndr_pull *ndr, int ndr_flags, const char ***_a)
+NTSTATUS ndr_pull_string_array(struct ndr_pull *ndr, int ndr_flags, const char ***_a)
 {
 	const char **a = *_a;
 	uint32_t count;
-	unsigned flags = ndr->flags;
-	unsigned saved_flags = ndr->flags;
 
 	if (!(ndr_flags & NDR_SCALARS)) {
-		return NDR_ERR_SUCCESS;
+		return NT_STATUS_OK;
 	}
 
-	switch (flags & LIBNDR_STRING_FLAGS) {
-	case LIBNDR_FLAG_STR_NULLTERM:
-		/* 
-		 * here the strings are null terminated
-		 * but also the array is null terminated
-		 */
-		for (count = 0;; count++) {
-			TALLOC_CTX *tmp_ctx;
-			const char *s = NULL;
-			a = talloc_realloc(ndr->current_mem_ctx, a, const char *, count + 2);
-			NDR_ERR_HAVE_NO_MEMORY(a);
-			a[count]   = NULL;
-			a[count+1]   = NULL;
+	for (count = 0;; count++) {
+		TALLOC_CTX *tmp_ctx;
+		const char *s = NULL;
+		a = talloc_realloc(ndr->current_mem_ctx, a, const char *, count + 2);
+		NT_STATUS_HAVE_NO_MEMORY(a);
+		a[count]   = NULL;
+		a[count+1]   = NULL;
 
-			tmp_ctx = ndr->current_mem_ctx;
-			ndr->current_mem_ctx = a;
-			NDR_CHECK(ndr_pull_string(ndr, ndr_flags, &s));
-			ndr->current_mem_ctx = tmp_ctx;
-			if (strcmp("", s)==0) {
-				a[count] = NULL;
-				break;
-			} else {
-				a[count] = s;
-			}
-		}
-
-		*_a =a;
-		break;
-
-	case LIBNDR_FLAG_STR_NOTERM:
-		if (!(ndr->flags & LIBNDR_FLAG_REMAINING)) {
-			return ndr_pull_error(ndr, NDR_ERR_STRING, "Bad string flags 0x%x (missing NDR_REMAINING)\n",
-					      ndr->flags & LIBNDR_STRING_FLAGS);
-		}
-		/*
-		 * here the strings are not null terminated
-		 * but serarated by a null terminator
-		 *
-		 * which means the same as:
-		 * very string is null terminated exept the last
-		 * string is terminated by the end of the buffer
-		 *
-		 * as LIBNDR_FLAG_STR_NULLTERM also end at the end
-		 * of the buffer, we can pull each string with this flag
-		 */
-		ndr->flags &= ~(LIBNDR_FLAG_STR_NOTERM|LIBNDR_FLAG_REMAINING);
-		ndr->flags |= LIBNDR_FLAG_STR_NULLTERM;
-
-		for (count = 0; ((ndr->data_size - ndr->offset) > 0); count++) {
-			TALLOC_CTX *tmp_ctx;
-			const char *s = NULL;
-			a = talloc_realloc(ndr->current_mem_ctx, a, const char *, count + 2);
-			NDR_ERR_HAVE_NO_MEMORY(a);
-			a[count]   = NULL;
-			a[count+1]   = NULL;
-
-			tmp_ctx = ndr->current_mem_ctx;
-			ndr->current_mem_ctx = a;
-			NDR_CHECK(ndr_pull_string(ndr, ndr_flags, &s));
-			ndr->current_mem_ctx = tmp_ctx;
+		tmp_ctx = ndr->current_mem_ctx;
+		ndr->current_mem_ctx = a;
+		NDR_CHECK(ndr_pull_string(ndr, ndr_flags, &s));
+		ndr->current_mem_ctx = tmp_ctx;
+		if (strcmp("", s)==0) {
+			a[count] = NULL;
+			break;
+		} else {
 			a[count] = s;
 		}
-
-		*_a =a;
-		break;
-
-	default:
-		return ndr_pull_error(ndr, NDR_ERR_STRING, "Bad string flags 0x%x\n",
-				      ndr->flags & LIBNDR_STRING_FLAGS);
 	}
 
-	ndr->flags = saved_flags;
-	return NDR_ERR_SUCCESS;
+	*_a =a;
+	return NT_STATUS_OK;
 }
 
 /**
   push a general string array onto the wire
 */
-_PUBLIC_ enum ndr_err_code ndr_push_string_array(struct ndr_push *ndr, int ndr_flags, const char **a)
+NTSTATUS ndr_push_string_array(struct ndr_push *ndr, int ndr_flags, const char **a)
 {
 	uint32_t count;
-	unsigned flags = ndr->flags;
-	unsigned saved_flags = ndr->flags;
 
 	if (!(ndr_flags & NDR_SCALARS)) {
-		return NDR_ERR_SUCCESS;
+		return NT_STATUS_OK;
 	}
 
-	switch (flags & LIBNDR_STRING_FLAGS) {
-	case LIBNDR_FLAG_STR_NULLTERM:
-		for (count = 0; a && a[count]; count++) {
-			NDR_CHECK(ndr_push_string(ndr, ndr_flags, a[count]));
-		}
+	for (count = 0; a && a[count]; count++) {
+		NDR_CHECK(ndr_push_string(ndr, ndr_flags, a[count]));
+	}
 
-		NDR_CHECK(ndr_push_string(ndr, ndr_flags, ""));
-		break;
+	NDR_CHECK(ndr_push_string(ndr, ndr_flags, ""));
 
-	case LIBNDR_FLAG_STR_NOTERM:
-		if (!(ndr->flags & LIBNDR_FLAG_REMAINING)) {
-			return ndr_push_error(ndr, NDR_ERR_STRING, "Bad string flags 0x%x (missing NDR_REMAINING)\n",
-					      ndr->flags & LIBNDR_STRING_FLAGS);
-		}
-
-		for (count = 0; a && a[count]; count++) {
-			if (count > 0) {
-				ndr->flags &= ~(LIBNDR_FLAG_STR_NOTERM|LIBNDR_FLAG_REMAINING);
-				ndr->flags |= LIBNDR_FLAG_STR_NULLTERM;
-				NDR_CHECK(ndr_push_string(ndr, ndr_flags, ""));
-				ndr->flags = saved_flags;
-			}
-			NDR_CHECK(ndr_push_string(ndr, ndr_flags, a[count]));
-		}
-
-		break;
-
-	default:
-		return ndr_push_error(ndr, NDR_ERR_STRING, "Bad string flags 0x%x\n",
-				      ndr->flags & LIBNDR_STRING_FLAGS);
-	}
-	
-	ndr->flags = saved_flags;
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ void ndr_print_string_array(struct ndr_print *ndr, const char *name, const char **a)
+void ndr_print_string_array(struct ndr_print *ndr, const char *name, const char **a)
 {
 	uint32_t count;
 	uint32_t i;
@@ -633,7 +508,8 @@
 	ndr->depth++;
 	for (i=0;i<count;i++) {
 		char *idx=NULL;
-		if (asprintf(&idx, "[%d]", i) != -1) {
+		asprintf(&idx, "[%d]", i);
+		if (idx) {
 			ndr_print_string(ndr, idx, a[i]);
 			free(idx);
 		}
@@ -644,7 +520,7 @@
 /**
  * Return number of elements in a string including the last (zeroed) element 
  */
-_PUBLIC_ uint32_t ndr_string_length(const void *_var, uint32_t element_size)
+uint32_t ndr_string_length(const void *_var, uint32_t element_size)
 {
 	uint32_t i;
 	uint8_t zero[4] = {0,0,0,0};
@@ -655,7 +531,7 @@
 	return i+1;
 }
 
-_PUBLIC_ enum ndr_err_code ndr_check_string_terminator(struct ndr_pull *ndr, uint32_t count, uint32_t element_size)
+NTSTATUS ndr_check_string_terminator(struct ndr_pull *ndr, uint32_t count, uint32_t element_size)
 {
 	uint32_t i;
 	struct ndr_pull_save save_offset;
@@ -674,15 +550,15 @@
 
 	ndr_pull_restore(ndr, &save_offset);
 
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ enum ndr_err_code ndr_pull_charset(struct ndr_pull *ndr, int ndr_flags, const char **var, uint32_t length, uint8_t byte_mul, charset_t chset)
+NTSTATUS ndr_pull_charset(struct ndr_pull *ndr, int ndr_flags, const char **var, uint32_t length, uint8_t byte_mul, charset_t chset)
 {
 	int ret;
 	if (length == 0) {
 		*var = talloc_strdup(ndr->current_mem_ctx, "");
-		return NDR_ERR_SUCCESS;
+		return NT_STATUS_OK;
 	}
 
 	if (NDR_BE(ndr) && chset == CH_UTF16) {
@@ -695,17 +571,18 @@
 				    chset, CH_UNIX, 
 				    ndr->data+ndr->offset, 
 				    length*byte_mul,
-				    discard_const_p(void *, var), false);
+				    var, False);
 	if (ret == -1) {
 		return ndr_pull_error(ndr, NDR_ERR_CHARCNV, 
 				      "Bad character conversion");
 	}
 	NDR_CHECK(ndr_pull_advance(ndr, length*byte_mul));
 
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-_PUBLIC_ enum ndr_err_code ndr_push_charset(struct ndr_push *ndr, int ndr_flags, const char *var, uint32_t length, uint8_t byte_mul, charset_t chset)
+NTSTATUS ndr_push_charset(struct ndr_push *ndr, int ndr_flags, const char *var,
+			  uint32_t length, uint8_t byte_mul, charset_t chset)
 {
 	ssize_t ret, required;
 
@@ -718,7 +595,7 @@
 	NDR_PUSH_NEED_BYTES(ndr, required);
 	ret = convert_string(CH_UNIX, chset, 
 			     var, strlen(var),
-			     ndr->data+ndr->offset, required, false);
+			     ndr->data+ndr->offset, required, False);
 	if (ret == -1) {
 		return ndr_push_error(ndr, NDR_ERR_CHARCNV, 
 				      "Bad character conversion");
@@ -731,11 +608,11 @@
 
 	ndr->offset += required;
 
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /* Return number of elements in a string in the specified charset */
-_PUBLIC_ uint32_t ndr_charset_length(const void *var, charset_t chset)
+uint32_t ndr_charset_length(const void *var, int chset)
 {
 	/* FIXME: Treat special chars special here, taking chset into account */
 	/* Also include 0 byte */

Copied: branches/samba/upstream/source/librpc/ndr/security.h (from rev 1928, branches/samba/upstream/source/librpc/ndr/security.h)
===================================================================
--- branches/samba/upstream/source/librpc/ndr/security.h	                        (rev 0)
+++ branches/samba/upstream/source/librpc/ndr/security.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,253 @@
+/* header auto-generated by pidl */
+
+#ifndef _HEADER_security
+#define _HEADER_security
+
+#define SEC_MASK_GENERIC	( 0xF0000000 )
+#define SEC_MASK_FLAGS	( 0x0F000000 )
+#define SEC_MASK_STANDARD	( 0x00FF0000 )
+#define SEC_MASK_SPECIFIC	( 0x0000FFFF )
+#define SEC_GENERIC_ALL	( 0x10000000 )
+#define SEC_GENERIC_EXECUTE	( 0x20000000 )
+#define SEC_GENERIC_WRITE	( 0x40000000 )
+#define SEC_GENERIC_READ	( 0x80000000 )
+#define SEC_FLAG_SYSTEM_SECURITY	( 0x01000000 )
+#define SEC_FLAG_MAXIMUM_ALLOWED	( 0x02000000 )
+#define SEC_STD_DELETE	( 0x00010000 )
+#define SEC_STD_READ_CONTROL	( 0x00020000 )
+#define SEC_STD_WRITE_DAC	( 0x00040000 )
+#define SEC_STD_WRITE_OWNER	( 0x00080000 )
+#define SEC_STD_SYNCHRONIZE	( 0x00100000 )
+#define SEC_STD_REQUIRED	( 0x000F0000 )
+#define SEC_STD_ALL	( 0x001F0000 )
+#define SEC_FILE_READ_DATA	( 0x00000001 )
+#define SEC_FILE_WRITE_DATA	( 0x00000002 )
+#define SEC_FILE_APPEND_DATA	( 0x00000004 )
+#define SEC_FILE_READ_EA	( 0x00000008 )
+#define SEC_FILE_WRITE_EA	( 0x00000010 )
+#define SEC_FILE_EXECUTE	( 0x00000020 )
+#define SEC_FILE_READ_ATTRIBUTE	( 0x00000080 )
+#define SEC_FILE_WRITE_ATTRIBUTE	( 0x00000100 )
+#define SEC_FILE_ALL	( 0x000001ff )
+#define SEC_DIR_LIST	( 0x00000001 )
+#define SEC_DIR_ADD_FILE	( 0x00000002 )
+#define SEC_DIR_ADD_SUBDIR	( 0x00000004 )
+#define SEC_DIR_READ_EA	( 0x00000008 )
+#define SEC_DIR_WRITE_EA	( 0x00000010 )
+#define SEC_DIR_TRAVERSE	( 0x00000020 )
+#define SEC_DIR_DELETE_CHILD	( 0x00000040 )
+#define SEC_DIR_READ_ATTRIBUTE	( 0x00000080 )
+#define SEC_DIR_WRITE_ATTRIBUTE	( 0x00000100 )
+#define SEC_REG_QUERY_VALUE	( 0x00000001 )
+#define SEC_REG_SET_VALUE	( 0x00000002 )
+#define SEC_REG_CREATE_SUBKEY	( 0x00000004 )
+#define SEC_REG_ENUM_SUBKEYS	( 0x00000008 )
+#define SEC_REG_NOTIFY	( 0x00000010 )
+#define SEC_REG_CREATE_LINK	( 0x00000020 )
+#define SEC_ADS_CREATE_CHILD	( 0x00000001 )
+#define SEC_ADS_DELETE_CHILD	( 0x00000002 )
+#define SEC_ADS_LIST	( 0x00000004 )
+#define SEC_ADS_SELF_WRITE	( 0x00000008 )
+#define SEC_ADS_READ_PROP	( 0x00000010 )
+#define SEC_ADS_WRITE_PROP	( 0x00000020 )
+#define SEC_ADS_DELETE_TREE	( 0x00000040 )
+#define SEC_ADS_LIST_OBJECT	( 0x00000080 )
+#define SEC_ADS_CONTROL_ACCESS	( 0x00000100 )
+#define SEC_RIGHTS_FILE_READ	( SEC_STD_READ_CONTROL|SEC_STD_SYNCHRONIZE|SEC_FILE_READ_DATA|SEC_FILE_READ_ATTRIBUTE|SEC_FILE_READ_EA )
+#define SEC_RIGHTS_FILE_WRITE	( SEC_STD_READ_CONTROL|SEC_STD_SYNCHRONIZE|SEC_FILE_WRITE_DATA|SEC_FILE_WRITE_ATTRIBUTE|SEC_FILE_WRITE_EA|SEC_FILE_APPEND_DATA )
+#define SEC_RIGHTS_FILE_EXECUTE	( SEC_STD_SYNCHRONIZE|SEC_STD_READ_CONTROL|SEC_FILE_READ_ATTRIBUTE|SEC_FILE_EXECUTE )
+#define SEC_RIGHTS_FILE_ALL	( SEC_STD_ALL|SEC_FILE_ALL )
+#define SEC_RIGHTS_DIR_READ	( SEC_RIGHTS_FILE_READ )
+#define SEC_RIGHTS_DIR_WRITE	( SEC_RIGHTS_FILE_WRITE )
+#define SEC_RIGHTS_DIR_EXECUTE	( SEC_RIGHTS_FILE_EXECUTE )
+#define SEC_RIGHTS_DIR_ALL	( SEC_RIGHTS_FILE_ALL )
+#define SID_NULL	( "S-1-0-0" )
+#define SID_WORLD_DOMAIN	( "S-1-1" )
+#define SID_WORLD	( "S-1-1-0" )
+#define SID_CREATOR_OWNER_DOMAIN	( "S-1-3" )
+#define SID_CREATOR_OWNER	( "S-1-3-0" )
+#define SID_CREATOR_GROUP	( "S-1-3-1" )
+#define SID_NT_AUTHORITY	( "S-1-5" )
+#define SID_NT_DIALUP	( "S-1-5-1" )
+#define SID_NT_NETWORK	( "S-1-5-2" )
+#define SID_NT_BATCH	( "S-1-5-3" )
+#define SID_NT_INTERACTIVE	( "S-1-5-4" )
+#define SID_NT_SERVICE	( "S-1-5-6" )
+#define SID_NT_ANONYMOUS	( "S-1-5-7" )
+#define SID_NT_PROXY	( "S-1-5-8" )
+#define SID_NT_ENTERPRISE_DCS	( "S-1-5-9" )
+#define SID_NT_SELF	( "S-1-5-10" )
+#define SID_NT_AUTHENTICATED_USERS	( "S-1-5-11" )
+#define SID_NT_RESTRICTED	( "S-1-5-12" )
+#define SID_NT_TERMINAL_SERVER_USERS	( "S-1-5-13" )
+#define SID_NT_REMOTE_INTERACTIVE	( "S-1-5-14" )
+#define SID_NT_THIS_ORGANISATION	( "S-1-5-15" )
+#define SID_NT_SYSTEM	( "S-1-5-18" )
+#define SID_NT_LOCAL_SERVICE	( "S-1-5-19" )
+#define SID_NT_NETWORK_SERVICE	( "S-1-5-20" )
+#define SID_BUILTIN	( "S-1-5-32" )
+#define SID_BUILTIN_ADMINISTRATORS	( "S-1-5-32-544" )
+#define SID_BUILTIN_USERS	( "S-1-5-32-545" )
+#define SID_BUILTIN_GUESTS	( "S-1-5-32-546" )
+#define SID_BUILTIN_POWER_USERS	( "S-1-5-32-547" )
+#define SID_BUILTIN_ACCOUNT_OPERATORS	( "S-1-5-32-548" )
+#define SID_BUILTIN_SERVER_OPERATORS	( "S-1-5-32-549" )
+#define SID_BUILTIN_PRINT_OPERATORS	( "S-1-5-32-550" )
+#define SID_BUILTIN_BACKUP_OPERATORS	( "S-1-5-32-551" )
+#define SID_BUILTIN_REPLICATOR	( "S-1-5-32-552" )
+#define SID_BUILTIN_RAS_SERVERS	( "S-1-5-32-553" )
+#define SID_BUILTIN_PREW2K	( "S-1-5-32-554" )
+#define DOMAIN_RID_LOGON	( 9 )
+#define DOMAIN_RID_ADMINISTRATOR	( 500 )
+#define DOMAIN_RID_GUEST	( 501 )
+#define DOMAIN_RID_ADMINS	( 512 )
+#define DOMAIN_RID_USERS	( 513 )
+#define DOMAIN_RID_DCS	( 516 )
+#define DOMAIN_RID_CERT_ADMINS	( 517 )
+#define DOMAIN_RID_SCHEMA_ADMINS	( 518 )
+#define DOMAIN_RID_ENTERPRISE_ADMINS	( 519 )
+#define NT4_ACL_REVISION	( SECURITY_ACL_REVISION_NT4 )
+#define SD_REVISION	( SECURITY_DESCRIPTOR_REVISION_1 )
+enum sec_privilege {
+	SEC_PRIV_SECURITY=1,
+	SEC_PRIV_BACKUP=2,
+	SEC_PRIV_RESTORE=3,
+	SEC_PRIV_SYSTEMTIME=4,
+	SEC_PRIV_SHUTDOWN=5,
+	SEC_PRIV_REMOTE_SHUTDOWN=6,
+	SEC_PRIV_TAKE_OWNERSHIP=7,
+	SEC_PRIV_DEBUG=8,
+	SEC_PRIV_SYSTEM_ENVIRONMENT=9,
+	SEC_PRIV_SYSTEM_PROFILE=10,
+	SEC_PRIV_PROFILE_SINGLE_PROCESS=11,
+	SEC_PRIV_INCREASE_BASE_PRIORITY=12,
+	SEC_PRIV_LOAD_DRIVER=13,
+	SEC_PRIV_CREATE_PAGEFILE=14,
+	SEC_PRIV_INCREASE_QUOTA=15,
+	SEC_PRIV_CHANGE_NOTIFY=16,
+	SEC_PRIV_UNDOCK=17,
+	SEC_PRIV_MANAGE_VOLUME=18,
+	SEC_PRIV_IMPERSONATE=19,
+	SEC_PRIV_CREATE_GLOBAL=20,
+	SEC_PRIV_ENABLE_DELEGATION=21,
+	SEC_PRIV_INTERACTIVE_LOGON=22,
+	SEC_PRIV_NETWORK_LOGON=23,
+	SEC_PRIV_REMOTE_INTERACTIVE_LOGON=24
+};
+
+/* bitmap security_ace_flags */
+#define SEC_ACE_FLAG_OBJECT_INHERIT ( 0x01 )
+#define SEC_ACE_FLAG_CONTAINER_INHERIT ( 0x02 )
+#define SEC_ACE_FLAG_NO_PROPAGATE_INHERIT ( 0x04 )
+#define SEC_ACE_FLAG_INHERIT_ONLY ( 0x08 )
+#define SEC_ACE_FLAG_INHERITED_ACE ( 0x10 )
+#define SEC_ACE_FLAG_VALID_INHERIT ( 0x0f )
+#define SEC_ACE_FLAG_SUCCESSFUL_ACCESS ( 0x40 )
+#define SEC_ACE_FLAG_FAILED_ACCESS ( 0x80 )
+
+enum security_ace_type {
+	SEC_ACE_TYPE_ACCESS_ALLOWED=0,
+	SEC_ACE_TYPE_ACCESS_DENIED=1,
+	SEC_ACE_TYPE_SYSTEM_AUDIT=2,
+	SEC_ACE_TYPE_SYSTEM_ALARM=3,
+	SEC_ACE_TYPE_ALLOWED_COMPOUND=4,
+	SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT=5,
+	SEC_ACE_TYPE_ACCESS_DENIED_OBJECT=6,
+	SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT=7,
+	SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT=8
+};
+
+/* bitmap security_ace_object_flags */
+#define SEC_ACE_OBJECT_TYPE_PRESENT ( 0x00000001 )
+#define SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT ( 0x00000002 )
+
+union security_ace_object_type {
+	struct GUID type;/* [case(SEC_ACE_OBJECT_TYPE_PRESENT)] */
+}/* [nodiscriminant] */;
+
+union security_ace_object_inherited_type {
+	struct GUID inherited_type;/* [case(SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT)] */
+}/* [nodiscriminant] */;
+
+struct security_ace_object {
+	uint32_t flags;
+	union security_ace_object_type type;/* [switch_is(flags&SEC_ACE_OBJECT_TYPE_PRESENT)] */
+	union security_ace_object_inherited_type inherited_type;/* [switch_is(flags&SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT)] */
+};
+
+union security_ace_object_ctr {
+	struct security_ace_object object;/* [case(SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT)] */
+}/* [nodiscriminant] */;
+
+struct security_ace {
+	enum security_ace_type type;
+	uint8_t flags;
+	uint16_t size;/* [value(ndr_size_security_ace(r,ndr->flags))] */
+	uint32_t access_mask;
+	union security_ace_object_ctr object;/* [switch_is(type)] */
+	struct dom_sid trustee;
+}/* [gensize,public,nosize] */;
+
+enum security_acl_revision {
+	SECURITY_ACL_REVISION_NT4=2,
+	SECURITY_ACL_REVISION_ADS=4
+};
+
+struct security_acl {
+	enum security_acl_revision revision;
+	uint16_t size;/* [value(ndr_size_security_acl(r,ndr->flags))] */
+	uint32_t num_aces;/* [range(0 1000)] */
+	struct security_ace *aces;
+}/* [gensize,public,nosize] */;
+
+enum security_descriptor_revision {
+	SECURITY_DESCRIPTOR_REVISION_1=1
+};
+
+/* bitmap security_descriptor_type */
+#define SEC_DESC_OWNER_DEFAULTED ( 0x0001 )
+#define SEC_DESC_GROUP_DEFAULTED ( 0x0002 )
+#define SEC_DESC_DACL_PRESENT ( 0x0004 )
+#define SEC_DESC_DACL_DEFAULTED ( 0x0008 )
+#define SEC_DESC_SACL_PRESENT ( 0x0010 )
+#define SEC_DESC_SACL_DEFAULTED ( 0x0020 )
+#define SEC_DESC_DACL_TRUSTED ( 0x0040 )
+#define SEC_DESC_SERVER_SECURITY ( 0x0080 )
+#define SEC_DESC_DACL_AUTO_INHERIT_REQ ( 0x0100 )
+#define SEC_DESC_SACL_AUTO_INHERIT_REQ ( 0x0200 )
+#define SEC_DESC_DACL_AUTO_INHERITED ( 0x0400 )
+#define SEC_DESC_SACL_AUTO_INHERITED ( 0x0800 )
+#define SEC_DESC_DACL_PROTECTED ( 0x1000 )
+#define SEC_DESC_SACL_PROTECTED ( 0x2000 )
+#define SEC_DESC_RM_CONTROL_VALID ( 0x4000 )
+#define SEC_DESC_SELF_RELATIVE ( 0x8000 )
+
+struct security_descriptor {
+	enum security_descriptor_revision revision;
+	uint16_t type;
+	struct dom_sid *owner_sid;/* [relative] */
+	struct dom_sid *group_sid;/* [relative] */
+	struct security_acl *sacl;/* [relative] */
+	struct security_acl *dacl;/* [relative] */
+}/* [gensize,public,flag(LIBNDR_FLAG_LITTLE_ENDIAN),nosize] */;
+
+struct sec_desc_buf {
+	uint32_t sd_size;/* [value(ndr_size_security_descriptor(sd,ndr->flags)),range(0 0x40000)] */
+	struct security_descriptor *sd;/* [unique,subcontext(4)] */
+}/* [public] */;
+
+struct security_token {
+	struct dom_sid *user_sid;/* [unique] */
+	struct dom_sid *group_sid;/* [unique] */
+	uint32_t num_sids;
+	struct dom_sid **sids;/* [unique,size_is(num_sids)] */
+	uint64_t privilege_mask;
+}/* [public] */;
+
+/* bitmap security_secinfo */
+#define SECINFO_OWNER ( 0x00000001 )
+#define SECINFO_GROUP ( 0x00000002 )
+#define SECINFO_DACL ( 0x00000004 )
+#define SECINFO_SACL ( 0x00000008 )
+
+#endif /* _HEADER_security */

Modified: branches/samba/upstream/source/librpc/ndr/sid.c
===================================================================
--- branches/samba/upstream/source/librpc/ndr/sid.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/ndr/sid.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,12 +16,13 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
-enum ndr_err_code ndr_push_dom_sid(struct ndr_push *ndr, int ndr_flags, const struct dom_sid *r)
+NTSTATUS ndr_push_dom_sid(struct ndr_push *ndr, int ndr_flags, const struct dom_sid *r)
 {
 	uint32_t cntr_sub_auths_0;
 	if (ndr_flags & NDR_SCALARS) {
@@ -35,10 +36,10 @@
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-enum ndr_err_code ndr_pull_dom_sid(struct ndr_pull *ndr, int ndr_flags, struct dom_sid *r)
+NTSTATUS ndr_pull_dom_sid(struct ndr_pull *ndr, int ndr_flags, struct dom_sid *r)
 {
 	uint32_t cntr_sub_auths_0;
 	if (ndr_flags & NDR_SCALARS) {
@@ -55,7 +56,7 @@
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
@@ -75,11 +76,6 @@
 	ret = (char *)talloc_size(mem_ctx, maxlen);
 	if (!ret) return talloc_strdup(mem_ctx, "(SID ERR)");
 
-	/*
-	 * BIG NOTE: this function only does SIDS where the identauth is not
-	 * >= ^32 in a range of 2^48.
-	 */
-
 	ia = (sid->id_auth[5]) +
 		(sid->id_auth[4] << 8 ) +
 		(sid->id_auth[3] << 16) +
@@ -98,11 +94,11 @@
 /*
   parse a dom_sid2 - this is a dom_sid but with an extra copy of the num_auths field
 */
-enum ndr_err_code ndr_pull_dom_sid2(struct ndr_pull *ndr, int ndr_flags, struct dom_sid *sid)
+NTSTATUS ndr_pull_dom_sid2(struct ndr_pull *ndr, int ndr_flags, struct dom_sid *sid)
 {
 	uint32_t num_auths;
 	if (!(ndr_flags & NDR_SCALARS)) {
-		return NDR_ERR_SUCCESS;
+		return NT_STATUS_OK;
 	}
 	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &num_auths));
 	NDR_CHECK(ndr_pull_dom_sid(ndr, ndr_flags, sid));
@@ -111,16 +107,16 @@
 				      "Bad array size %u should exceed %u", 
 				      num_auths, sid->num_auths);
 	}
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   parse a dom_sid2 - this is a dom_sid but with an extra copy of the num_auths field
 */
-enum ndr_err_code ndr_push_dom_sid2(struct ndr_push *ndr, int ndr_flags, const struct dom_sid *sid)
+NTSTATUS ndr_push_dom_sid2(struct ndr_push *ndr, int ndr_flags, const struct dom_sid *sid)
 {
 	if (!(ndr_flags & NDR_SCALARS)) {
-		return NDR_ERR_SUCCESS;
+		return NT_STATUS_OK;
 	}
 	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, sid->num_auths));
 	return ndr_push_dom_sid(ndr, ndr_flags, sid);
@@ -129,17 +125,17 @@
 /*
   parse a dom_sid28 - this is a dom_sid in a fixed 28 byte buffer, so we need to ensure there are only upto 5 sub_auth
 */
-enum ndr_err_code ndr_pull_dom_sid28(struct ndr_pull *ndr, int ndr_flags, struct dom_sid *sid)
+NTSTATUS ndr_pull_dom_sid28(struct ndr_pull *ndr, int ndr_flags, struct dom_sid *sid)
 {
-	enum ndr_err_code status;
+	NTSTATUS status;
 	struct ndr_pull *subndr;
 
 	if (!(ndr_flags & NDR_SCALARS)) {
-		return NDR_ERR_SUCCESS;
+		return NT_STATUS_OK;
 	}
 
 	subndr = talloc_zero(ndr, struct ndr_pull);
-	NDR_ERR_HAVE_NO_MEMORY(subndr);
+	NT_STATUS_HAVE_NO_MEMORY(subndr);
 	subndr->flags		= ndr->flags;
 	subndr->current_mem_ctx	= ndr->current_mem_ctx;
 
@@ -150,24 +146,24 @@
 	NDR_CHECK(ndr_pull_advance(ndr, 28));
 
 	status = ndr_pull_dom_sid(subndr, ndr_flags, sid);
-	if (!NDR_ERR_CODE_IS_SUCCESS(status)) {
+	if (!NT_STATUS_IS_OK(status)) {
 		/* handle a w2k bug which send random data in the buffer */
 		ZERO_STRUCTP(sid);
 	}
 
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
 /*
   push a dom_sid28 - this is a dom_sid in a 28 byte fixed buffer
 */
-enum ndr_err_code ndr_push_dom_sid28(struct ndr_push *ndr, int ndr_flags, const struct dom_sid *sid)
+NTSTATUS ndr_push_dom_sid28(struct ndr_push *ndr, int ndr_flags, const struct dom_sid *sid)
 {
 	uint32_t old_offset;
 	uint32_t padding;
 
 	if (!(ndr_flags & NDR_SCALARS)) {
-		return NDR_ERR_SUCCESS;
+		return NT_STATUS_OK;
 	}
 
 	if (sid->num_auths > 5) {
@@ -185,46 +181,72 @@
 		NDR_CHECK(ndr_push_zero(ndr, padding));
 	}
 
-	return NDR_ERR_SUCCESS;
+	return NT_STATUS_OK;
 }
 
-/*
-  parse a dom_sid0 - this is a dom_sid in a variable byte buffer, which is maybe empty
-*/
-enum ndr_err_code ndr_pull_dom_sid0(struct ndr_pull *ndr, int ndr_flags, struct dom_sid *sid)
+NTSTATUS ndr_push_sec_desc_buf(struct ndr_push *ndr, int ndr_flags, const struct sec_desc_buf *r)
 {
-	if (!(ndr_flags & NDR_SCALARS)) {
-		return NDR_ERR_SUCCESS;
+	if (ndr_flags & NDR_SCALARS) {
+		NDR_CHECK(ndr_push_align(ndr, 4));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_size_security_descriptor(r->sd,ndr->flags)));
+		NDR_CHECK(ndr_push_unique_ptr(ndr, r->sd));
 	}
-
-	if (ndr->data_size == ndr->offset) {
-		ZERO_STRUCTP(sid);
-		return NDR_ERR_SUCCESS;
+	if (ndr_flags & NDR_BUFFERS) {
+		if (r->sd) {
+			{
+				struct ndr_push *_ndr_sd;
+				NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_sd, 4, -1));
+				NDR_CHECK(ndr_push_security_descriptor(_ndr_sd, NDR_SCALARS|NDR_BUFFERS, r->sd));
+				NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_sd, 4, -1));
+			}
+		}
 	}
-
-	return ndr_pull_dom_sid(ndr, ndr_flags, sid);
+	return NT_STATUS_OK;
 }
 
-/*
-  push a dom_sid0 - this is a dom_sid in a variable byte buffer, which is maybe empty
-*/
-enum ndr_err_code ndr_push_dom_sid0(struct ndr_push *ndr, int ndr_flags, const struct dom_sid *sid)
+NTSTATUS ndr_pull_sec_desc_buf(struct ndr_pull *ndr, int ndr_flags, struct sec_desc_buf *r)
 {
-	struct dom_sid zero_sid;
-
-	if (!(ndr_flags & NDR_SCALARS)) {
-		return NDR_ERR_SUCCESS;
+	uint32_t _ptr_sd;
+	TALLOC_CTX *_mem_save_sd_0;
+	if (ndr_flags & NDR_SCALARS) {
+		NDR_CHECK(ndr_pull_align(ndr, 4));
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->sd_size));
+		if (r->sd_size > 0x40000) { /* sd_size is unsigned */
+			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
+		}
+		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sd));
+		if (_ptr_sd) {
+			NDR_PULL_ALLOC(ndr, r->sd);
+		} else {
+			r->sd = NULL;
+		}
 	}
-
-	if (!sid) {
-		return NDR_ERR_SUCCESS;
+	if (ndr_flags & NDR_BUFFERS) {
+		if (r->sd) {
+			_mem_save_sd_0 = NDR_PULL_GET_MEM_CTX(ndr);
+			NDR_PULL_SET_MEM_CTX(ndr, r->sd, 0);
+			{
+				struct ndr_pull *_ndr_sd;
+				NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_sd, 4, -1));
+				NDR_CHECK(ndr_pull_security_descriptor(_ndr_sd, NDR_SCALARS|NDR_BUFFERS, r->sd));
+				NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_sd, 4, -1));
+			}
+			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sd_0, 0);
+		}
 	}
+	return NT_STATUS_OK;
+}
 
-	ZERO_STRUCT(zero_sid);
-
-	if (memcmp(&zero_sid, sid, sizeof(zero_sid)) == 0) {
-		return NDR_ERR_SUCCESS;
+void ndr_print_sec_desc_buf(struct ndr_print *ndr, const char *name, const struct sec_desc_buf *r)
+{
+	ndr_print_struct(ndr, name, "sec_desc_buf");
+	ndr->depth++;
+	ndr_print_uint32(ndr, "sd_size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_security_descriptor(r->sd,ndr->flags):r->sd_size);
+	ndr_print_ptr(ndr, "sd", r->sd);
+	ndr->depth++;
+	if (r->sd) {
+		ndr_print_security_descriptor(ndr, "sd", r->sd);
 	}
-
-	return ndr_push_dom_sid(ndr, ndr_flags, sid);
+	ndr->depth--;
+	ndr->depth--;
 }

Deleted: branches/samba/upstream/source/librpc/ndr/uuid.c
===================================================================
--- branches/samba/upstream/source/librpc/ndr/uuid.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/ndr/uuid.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,227 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-
-   UUID/GUID functions
-
-   Copyright (C) Theodore Ts'o               1996, 1997,
-   Copyright (C) Jim McDonough                     2002.
-   Copyright (C) Andrew Tridgell                   2003.
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-#include "librpc/ndr/libndr.h"
-
-/**
-  build a GUID from a string
-*/
-_PUBLIC_ NTSTATUS GUID_from_string(const char *s, struct GUID *guid)
-{
-	NTSTATUS status = NT_STATUS_INVALID_PARAMETER;
-	uint32_t time_low;
-	uint32_t time_mid, time_hi_and_version;
-	uint32_t clock_seq[2];
-	uint32_t node[6];
-	int i;
-
-	if (s == NULL) {
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	if (11 == sscanf(s, "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
-			 &time_low, &time_mid, &time_hi_and_version, 
-			 &clock_seq[0], &clock_seq[1],
-			 &node[0], &node[1], &node[2], &node[3], &node[4], &node[5])) {
-	        status = NT_STATUS_OK;
-	} else if (11 == sscanf(s, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
-				&time_low, &time_mid, &time_hi_and_version, 
-				&clock_seq[0], &clock_seq[1],
-				&node[0], &node[1], &node[2], &node[3], &node[4], &node[5])) {
-		status = NT_STATUS_OK;
-	}
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	guid->time_low = time_low;
-	guid->time_mid = time_mid;
-	guid->time_hi_and_version = time_hi_and_version;
-	guid->clock_seq[0] = clock_seq[0];
-	guid->clock_seq[1] = clock_seq[1];
-	for (i=0;i<6;i++) {
-		guid->node[i] = node[i];
-	}
-
-	return NT_STATUS_OK;
-}
-
-/**
-  build a GUID from a string
-*/
-_PUBLIC_ NTSTATUS NS_GUID_from_string(const char *s, struct GUID *guid)
-{
-	NTSTATUS status = NT_STATUS_INVALID_PARAMETER;
-	uint32_t time_low;
-	uint32_t time_mid, time_hi_and_version;
-	uint32_t clock_seq[2];
-	uint32_t node[6];
-	int i;
-
-	if (s == NULL) {
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	if (11 == sscanf(s, "%08x-%04x%04x-%02x%02x%02x%02x-%02x%02x%02x%02x",
-			 &time_low, &time_mid, &time_hi_and_version, 
-			 &clock_seq[0], &clock_seq[1],
-			 &node[0], &node[1], &node[2], &node[3], &node[4], &node[5])) {
-	        status = NT_STATUS_OK;
-	}
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	guid->time_low = time_low;
-	guid->time_mid = time_mid;
-	guid->time_hi_and_version = time_hi_and_version;
-	guid->clock_seq[0] = clock_seq[0];
-	guid->clock_seq[1] = clock_seq[1];
-	for (i=0;i<6;i++) {
-		guid->node[i] = node[i];
-	}
-
-	return NT_STATUS_OK;
-}
-
-/**
- * generate a random GUID
- */
-struct GUID GUID_random(void)
-{
-	struct GUID guid;
-
-	generate_random_buffer((uint8_t *)&guid, sizeof(guid));
-	guid.clock_seq[0] = (guid.clock_seq[0] & 0x3F) | 0x80;
-	guid.time_hi_and_version = (guid.time_hi_and_version & 0x0FFF) | 0x4000;
-
-	return guid;
-}
-
-/**
- * generate an empty GUID 
- */
-_PUBLIC_ struct GUID GUID_zero(void)
-{
-	struct GUID guid;
-
-	ZERO_STRUCT(guid);
-
-	return guid;
-}
-
-_PUBLIC_ bool GUID_all_zero(const struct GUID *u)
-{
-	if (u->time_low != 0 ||
-	    u->time_mid != 0 ||
-	    u->time_hi_and_version != 0 ||
-	    u->clock_seq[0] != 0 ||
-	    u->clock_seq[1] != 0 ||
-	    !all_zero(u->node, 6)) {
-		return false;
-	}
-	return true;
-}
-
-_PUBLIC_ bool GUID_equal(const struct GUID *u1, const struct GUID *u2)
-{
-	if (u1->time_low != u2->time_low ||
-	    u1->time_mid != u2->time_mid ||
-	    u1->time_hi_and_version != u2->time_hi_and_version ||
-	    u1->clock_seq[0] != u2->clock_seq[0] ||
-	    u1->clock_seq[1] != u2->clock_seq[1] ||
-	    memcmp(u1->node, u2->node, 6) != 0) {
-		return false;
-	}
-	return true;
-}
-
-_PUBLIC_ int GUID_compare(const struct GUID *u1, const struct GUID *u2)
-{
-	if (u1->time_low != u2->time_low) {
-		return u1->time_low - u2->time_low;
-	}
-
-	if (u1->time_mid != u2->time_mid) {
-		return u1->time_mid - u2->time_mid;
-	}
-
-	if (u1->time_hi_and_version != u2->time_hi_and_version) {
-		return u1->time_hi_and_version - u2->time_hi_and_version;
-	}
-
-	if (u1->clock_seq[0] != u2->clock_seq[0]) {
-		return u1->clock_seq[0] - u2->clock_seq[0];
-	}
-
-	if (u1->clock_seq[1] != u2->clock_seq[1]) {
-		return u1->clock_seq[1] - u2->clock_seq[1];
-	}
-
-	return memcmp(u1->node, u2->node, 6);
-}
-
-/**
-  its useful to be able to display these in debugging messages
-*/
-_PUBLIC_ char *GUID_string(TALLOC_CTX *mem_ctx, const struct GUID *guid)
-{
-	return talloc_asprintf(mem_ctx, 
-			       "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
-			       guid->time_low, guid->time_mid,
-			       guid->time_hi_and_version,
-			       guid->clock_seq[0],
-			       guid->clock_seq[1],
-			       guid->node[0], guid->node[1],
-			       guid->node[2], guid->node[3],
-			       guid->node[4], guid->node[5]);
-}
-
-_PUBLIC_ char *GUID_string2(TALLOC_CTX *mem_ctx, const struct GUID *guid)
-{
-	char *ret, *s = GUID_string(mem_ctx, guid);
-	ret = talloc_asprintf(mem_ctx, "{%s}", s);
-	talloc_free(s);
-	return ret;
-}
-
-_PUBLIC_ char *NS_GUID_string(TALLOC_CTX *mem_ctx, const struct GUID *guid)
-{
-	return talloc_asprintf(mem_ctx, 
-			       "%08x-%04x%04x-%02x%02x%02x%02x-%02x%02x%02x%02x",
-			       guid->time_low, guid->time_mid,
-			       guid->time_hi_and_version,
-			       guid->clock_seq[0],
-			       guid->clock_seq[1],
-			       guid->node[0], guid->node[1],
-			       guid->node[2], guid->node[3],
-			       guid->node[4], guid->node[5]);
-}
-
-_PUBLIC_ bool policy_handle_empty(struct policy_handle *h) 
-{
-	return (h->handle_type == 0 && GUID_all_zero(&h->uuid));
-}

Deleted: branches/samba/upstream/source/librpc/tables.pl
===================================================================
--- branches/samba/upstream/source/librpc/tables.pl	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/librpc/tables.pl	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,89 +0,0 @@
-#!/usr/bin/perl -w
-
-###################################################
-# package to produce a table of all idl parsers
-# Copyright tridge at samba.org 2003
-# Copyright jelmer at samba.org 2005
-# released under the GNU GPL
-
-use strict;
-
-use Getopt::Long;
-use File::Basename;
-
-my $opt_output = 'librpc/gen_ndr/tables.c';
-my $opt_help  = 0;
-
-
-#########################################
-# display help text
-sub ShowHelp()
-{
-    print "
-           perl DCE/RPC interface table generator
-           Copyright (C) tridge\@samba.org
-
-           Usage: tables.pl [options] <idlfile>
-
-           \n";
-    exit(0);
-}
-
-# main program
-GetOptions (
-	    'help|h|?' => \$opt_help, 
-	    'output=s' => \$opt_output,
-	    );
-
-if ($opt_help) {
-    ShowHelp();
-    exit(0);
-}
-
-my $init_fns = "";
-
-###################################
-# extract table entries from 1 file
-sub process_file($)
-{
-	my $filename = shift;
-	open(FILE, $filename) || die "unable to open $filename\n";
-	my $found = 0;
-
-	while (my $line = <FILE>) {
-		if ($line =~ /extern const struct ndr_interface_table (\w+);/) {
-			$found = 1;
-			$init_fns.="\tstatus = librpc_register_interface(&$1);\n";
-			$init_fns.="\tif (NT_STATUS_IS_ERR(status)) return status;\n\n";
-		}
-	}
-
-	if ($found) {
-		print "#include \"$filename\"\n";
-	}
-
-	close(FILE);
-}
-
-print <<EOF;
-
-/* Automatically generated by tables.pl. DO NOT EDIT */
-
-#include "includes.h"
-#include "librpc/rpc/dcerpc.h"
-#include "librpc/rpc/dcerpc_table.h"
-EOF
-
-process_file($_) foreach (@ARGV);
-
-print <<EOF;
-
-NTSTATUS dcerpc_register_builtin_interfaces(void)
-{
-	NTSTATUS status;
-
-$init_fns
-	
-	return NT_STATUS_OK;
-}
-EOF

Modified: branches/samba/upstream/source/libsmb/asn1.c
===================================================================
--- branches/samba/upstream/source/libsmb/asn1.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/asn1.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -34,39 +35,39 @@
 }
 
 /* write to the ASN1 buffer, advancing the buffer pointer */
-bool asn1_write(ASN1_DATA *data, const void *p, int len)
+BOOL asn1_write(ASN1_DATA *data, const void *p, int len)
 {
-	if (data->has_error) return false;
+	if (data->has_error) return False;
 	if (data->length < data->ofs+len) {
 		data->data = SMB_REALLOC_ARRAY(data->data, unsigned char,
 					       data->ofs+len);
 		if (!data->data) {
-			data->has_error = true;
-			return false;
+			data->has_error = True;
+			return False;
 		}
 		data->length = data->ofs+len;
 	}
 	memcpy(data->data + data->ofs, p, len);
 	data->ofs += len;
-	return true;
+	return True;
 }
 
 /* useful fn for writing a uint8 */
-bool asn1_write_uint8(ASN1_DATA *data, uint8 v)
+BOOL asn1_write_uint8(ASN1_DATA *data, uint8 v)
 {
 	return asn1_write(data, &v, 1);
 }
 
 /* push a tag onto the asn1 data buffer. Used for nested structures */
-bool asn1_push_tag(ASN1_DATA *data, uint8 tag)
+BOOL asn1_push_tag(ASN1_DATA *data, uint8 tag)
 {
 	struct nesting *nesting;
 
 	asn1_write_uint8(data, tag);
 	nesting = SMB_MALLOC_P(struct nesting);
 	if (!nesting) {
-		data->has_error = true;
-		return false;
+		data->has_error = True;
+		return False;
 	}
 
 	nesting->start = data->ofs;
@@ -76,20 +77,20 @@
 }
 
 /* pop a tag */
-bool asn1_pop_tag(ASN1_DATA *data)
+BOOL asn1_pop_tag(ASN1_DATA *data)
 {
 	struct nesting *nesting;
 	size_t len;
 
 	if (data->has_error) {
-		return false;
+		return False;
 	}
 
 	nesting = data->nesting;
 
 	if (!nesting) {
-		data->has_error = true;
-		return false;
+		data->has_error = True;
+		return False;
 	}
 	len = data->ofs - (nesting->start+1);
 	/* yes, this is ugly. We don't know in advance how many bytes the length
@@ -97,23 +98,23 @@
 	   need to correct our mistake */
 	if (len > 0xFFFF) {
 		data->data[nesting->start] = 0x83;
-		if (!asn1_write_uint8(data, 0)) return false;
-		if (!asn1_write_uint8(data, 0)) return false;
-		if (!asn1_write_uint8(data, 0)) return false;
+		if (!asn1_write_uint8(data, 0)) return False;
+		if (!asn1_write_uint8(data, 0)) return False;
+		if (!asn1_write_uint8(data, 0)) return False;
 		memmove(data->data+nesting->start+4, data->data+nesting->start+1, len);
 		data->data[nesting->start+1] = (len>>16) & 0xFF;
 		data->data[nesting->start+2] = (len>>8) & 0xFF;
 		data->data[nesting->start+3] = len&0xff;
 	} else if (len > 255) {
 		data->data[nesting->start] = 0x82;
-		if (!asn1_write_uint8(data, 0)) return false;
-		if (!asn1_write_uint8(data, 0)) return false;
+		if (!asn1_write_uint8(data, 0)) return False;
+		if (!asn1_write_uint8(data, 0)) return False;
 		memmove(data->data+nesting->start+3, data->data+nesting->start+1, len);
 		data->data[nesting->start+1] = len>>8;
 		data->data[nesting->start+2] = len&0xff;
 	} else if (len > 127) {
 		data->data[nesting->start] = 0x81;
-		if (!asn1_write_uint8(data, 0)) return false;
+		if (!asn1_write_uint8(data, 0)) return False;
 		memmove(data->data+nesting->start+2, data->data+nesting->start+1, len);
 		data->data[nesting->start+1] = len;
 	} else {
@@ -122,14 +123,14 @@
 
 	data->nesting = nesting->next;
 	free(nesting);
-	return true;
+	return True;
 }
 
 
 /* write an integer */
-bool asn1_write_Integer(ASN1_DATA *data, int i)
+BOOL asn1_write_Integer(ASN1_DATA *data, int i)
 {
-	if (!asn1_push_tag(data, ASN1_INTEGER)) return false;
+	if (!asn1_push_tag(data, ASN1_INTEGER)) return False;
 	do {
 		asn1_write_uint8(data, i);
 		i = i >> 8;
@@ -138,20 +139,20 @@
 }
 
 /* write an object ID to a ASN1 buffer */
-bool asn1_write_OID(ASN1_DATA *data, const char *OID)
+BOOL asn1_write_OID(ASN1_DATA *data, const char *OID)
 {
 	unsigned v, v2;
 	const char *p = (const char *)OID;
 	char *newp;
 
 	if (!asn1_push_tag(data, ASN1_OID))
-		return false;
+		return False;
 	v = strtol(p, &newp, 10);
 	p = newp;
 	v2 = strtol(p, &newp, 10);
 	p = newp;
 	if (!asn1_write_uint8(data, 40*v + v2))
-		return false;
+		return False;
 
 	while (*p) {
 		v = strtol(p, &newp, 10);
@@ -161,13 +162,13 @@
 		if (v >= (1<<14)) asn1_write_uint8(data, 0x80 | ((v>>14)&0xff));
 		if (v >= (1<<7)) asn1_write_uint8(data, 0x80 | ((v>>7)&0xff));
 		if (!asn1_write_uint8(data, v&0x7f))
-			return false;
+			return False;
 	}
 	return asn1_pop_tag(data);
 }
 
 /* write an octet string */
-bool asn1_write_OctetString(ASN1_DATA *data, const void *p, size_t length)
+BOOL asn1_write_OctetString(ASN1_DATA *data, const void *p, size_t length)
 {
 	asn1_push_tag(data, ASN1_OCTET_STRING);
 	asn1_write(data, p, length);
@@ -176,7 +177,7 @@
 }
 
 /* write a general string */
-bool asn1_write_GeneralString(ASN1_DATA *data, const char *s)
+BOOL asn1_write_GeneralString(ASN1_DATA *data, const char *s)
 {
 	asn1_push_tag(data, ASN1_GENERAL_STRING);
 	asn1_write(data, s, strlen(s));
@@ -185,7 +186,7 @@
 }
 
 /* write a BOOLEAN */
-bool asn1_write_BOOLEAN(ASN1_DATA *data, bool v)
+BOOL asn1_write_BOOLEAN(ASN1_DATA *data, BOOL v)
 {
 	asn1_write_uint8(data, ASN1_BOOLEAN);
 	asn1_write_uint8(data, v);
@@ -194,7 +195,7 @@
 
 /* write a BOOLEAN - hmm, I suspect this one is the correct one, and the 
    above boolean is bogus. Need to check */
-bool asn1_write_BOOLEAN2(ASN1_DATA *data, bool v)
+BOOL asn1_write_BOOLEAN2(ASN1_DATA *data, BOOL v)
 {
 	asn1_push_tag(data, ASN1_BOOLEAN);
 	asn1_write_uint8(data, v);
@@ -203,111 +204,98 @@
 }
 
 /* check a BOOLEAN */
-bool asn1_check_BOOLEAN(ASN1_DATA *data, bool v)
+BOOL asn1_check_BOOLEAN(ASN1_DATA *data, BOOL v)
 {
 	uint8 b = 0;
 
 	asn1_read_uint8(data, &b);
 	if (b != ASN1_BOOLEAN) {
-		data->has_error = true;
-		return false;
+		data->has_error = True;
+		return False;
 	}
 	asn1_read_uint8(data, &b);
 	if (b != v) {
-		data->has_error = true;
-		return false;
+		data->has_error = True;
+		return False;
 	}
 	return !data->has_error;
 }
 
 
 /* load a ASN1_DATA structure with a lump of data, ready to be parsed */
-bool asn1_load(ASN1_DATA *data, DATA_BLOB blob)
+BOOL asn1_load(ASN1_DATA *data, DATA_BLOB blob)
 {
 	ZERO_STRUCTP(data);
 	data->data = (unsigned char *)memdup(blob.data, blob.length);
 	if (!data->data) {
-		data->has_error = true;
-		return false;
+		data->has_error = True;
+		return False;
 	}
 	data->length = blob.length;
-	return true;
+	return True;
 }
 
 /* read from a ASN1 buffer, advancing the buffer pointer */
-bool asn1_read(ASN1_DATA *data, void *p, int len)
+BOOL asn1_read(ASN1_DATA *data, void *p, int len)
 {
 	if (data->has_error)
-		return false;
+		return False;
 
 	if (len < 0 || data->ofs + len < data->ofs || data->ofs + len < len) {
-		data->has_error = true;
-		return false;
+		data->has_error = True;
+		return False;
 	}
 
 	if (data->ofs + len > data->length) {
-		data->has_error = true;
-		return false;
+		data->has_error = True;
+		return False;
 	}
 	memcpy(p, data->data + data->ofs, len);
 	data->ofs += len;
-	return true;
+	return True;
 }
 
 /* read a uint8 from a ASN1 buffer */
-bool asn1_read_uint8(ASN1_DATA *data, uint8 *v)
+BOOL asn1_read_uint8(ASN1_DATA *data, uint8 *v)
 {
 	return asn1_read(data, v, 1);
 }
 
-/*
- * Check thta the value of the ASN1 buffer at the current offset equals tag.
- */
-bool asn1_check_tag(ASN1_DATA *data, uint8 tag)
-{
-	if (data->has_error || data->ofs >= data->length || data->ofs < 0) {
-		data->has_error = true;
-		return false;
-	}
-
-	return (tag == data->data[data->ofs]);
-}
-
 /* start reading a nested asn1 structure */
-bool asn1_start_tag(ASN1_DATA *data, uint8 tag)
+BOOL asn1_start_tag(ASN1_DATA *data, uint8 tag)
 {
 	uint8 b;
 	struct nesting *nesting;
 	
 	if (!asn1_read_uint8(data, &b))
-		return false;
+		return False;
 
 	if (b != tag) {
-		data->has_error = true;
-		return false;
+		data->has_error = True;
+		return False;
 	}
 	nesting = SMB_MALLOC_P(struct nesting);
 	if (!nesting) {
-		data->has_error = true;
-		return false;
+		data->has_error = True;
+		return False;
 	}
 
 	if (!asn1_read_uint8(data, &b)) {
 		SAFE_FREE(nesting);
-		return false;
+		return False;
 	}
 
 	if (b & 0x80) {
 		int n = b & 0x7f;
 		if (!asn1_read_uint8(data, &b)) {
 			SAFE_FREE(nesting);
-			return false;
+			return False;
 		}
 		nesting->taglen = b;
 		while (n > 1) {
 			if (!asn1_read_uint8(data, &b)) {
 				SAFE_FREE(nesting);
-				return false;
+				return False;
 			}
 			nesting->taglen = (nesting->taglen << 8) | b;
 			n--;
@@ -323,26 +311,26 @@
 
 
 /* stop reading a tag */
-bool asn1_end_tag(ASN1_DATA *data)
+BOOL asn1_end_tag(ASN1_DATA *data)
 {
 	struct nesting *nesting;
 
 	/* make sure we read it all */
 	if (asn1_tag_remaining(data) != 0) {
-		data->has_error = true;
-		return false;
+		data->has_error = True;
+		return False;
 	}
 
 	nesting = data->nesting;
 
 	if (!nesting) {
-		data->has_error = true;
-		return false;
+		data->has_error = True;
+		return False;
 	}
 
 	data->nesting = nesting->next;
 	free(nesting);
-	return true;
+	return True;
 }
 
 /* work out how many bytes are left in this nested tag */
@@ -352,39 +340,31 @@
 		return 0;
 
 	if (!data->nesting) {
-		data->has_error = true;
+		data->has_error = True;
 		return -1;
 	}
 	return data->nesting->taglen - (data->ofs - data->nesting->start);
 }
 
 /* read an object ID from a ASN1 buffer */
-bool asn1_read_OID(ASN1_DATA *data, char **OID)
+BOOL asn1_read_OID(ASN1_DATA *data, char **OID)
 {
-	uint8 b = 0;
-	char *oid_str = NULL;
+	uint8 b;
+	pstring oid_str;
+	fstring el;
 
 	*OID = NULL;
 
 	if (!asn1_start_tag(data, ASN1_OID)) {
-		return false;
+		return False;
 	}
 	asn1_read_uint8(data, &b);
 
-	oid_str = talloc_asprintf(NULL,
-			"%u",
-			b/40);
-	if (!oid_str) {
-		data->has_error = true;
-		goto out;
-	}
-	oid_str = talloc_asprintf_append(oid_str,
-			" %u",
-			b%40);
-	if (!oid_str) {
-		data->has_error = true;
-		goto out;
-	}
+	oid_str[0] = 0;
+	fstr_sprintf(el, "%u",  b/40);
+	pstrcat(oid_str, el);
+	fstr_sprintf(el, " %u",  b%40);
+	pstrcat(oid_str, el);
 
 	while (asn1_tag_remaining(data) > 0) {
 		unsigned v = 0;
@@ -392,48 +372,38 @@
 			asn1_read_uint8(data, &b);
 			v = (v<<7) | (b&0x7f);
 		} while (!data->has_error && b & 0x80);
-		oid_str = talloc_asprintf_append(oid_str,
-					" %u",
-					v);
-		if (!oid_str) {
-			data->has_error = true;
-			goto out;
-		}
+		fstr_sprintf(el, " %u",  v);
+		pstrcat(oid_str, el);
 	}
 
-  out:
-
 	asn1_end_tag(data);
 
 	if (!data->has_error) {
 	  	*OID = SMB_STRDUP(oid_str);
 	}
 
-	TALLOC_FREE(oid_str);
-
 	return !data->has_error;
 }
 
 /* check that the next object ID is correct */
-bool asn1_check_OID(ASN1_DATA *data, const char *OID)
+BOOL asn1_check_OID(ASN1_DATA *data, const char *OID)
 {
 	char *id;
 
 	if (!asn1_read_OID(data, &id)) {
-		return false;
+		return False;
 	}
 
 	if (strcmp(id, OID) != 0) {
-		data->has_error = true;
-		free(id);
-		return false;
+		data->has_error = True;
+		return False;
 	}
 	free(id);
-	return true;
+	return True;
 }
 
 /* read a GeneralString from a ASN1 buffer */
-bool asn1_read_GeneralString(ASN1_DATA *data, char **s)
+BOOL asn1_read_GeneralString(ASN1_DATA *data, char **s)
 {
 	int len;
 	char *str;
@@ -441,17 +411,17 @@
 	*s = NULL;
 
 	if (!asn1_start_tag(data, ASN1_GENERAL_STRING)) {
-		return false;
+		return False;
 	}
 	len = asn1_tag_remaining(data);
 	if (len < 0) {
-		data->has_error = true;
-		return false;
+		data->has_error = True;
+		return False;
 	}
 	str = SMB_MALLOC_ARRAY(char, len+1);
 	if (!str) {
-		data->has_error = true;
-		return false;
+		data->has_error = True;
+		return False;
 	}
 	asn1_read(data, str, len);
 	str[len] = 0;
@@ -464,15 +434,15 @@
 }
 
 /* read a octet string blob */
-bool asn1_read_OctetString(ASN1_DATA *data, DATA_BLOB *blob)
+BOOL asn1_read_OctetString(ASN1_DATA *data, DATA_BLOB *blob)
 {
 	int len;
 	ZERO_STRUCTP(blob);
-	if (!asn1_start_tag(data, ASN1_OCTET_STRING)) return false;
+	if (!asn1_start_tag(data, ASN1_OCTET_STRING)) return False;
 	len = asn1_tag_remaining(data);
 	if (len < 0) {
-		data->has_error = true;
-		return false;
+		data->has_error = True;
+		return False;
 	}
 	*blob = data_blob(NULL, len);
 	asn1_read(data, blob->data, len);
@@ -481,12 +451,12 @@
 }
 
 /* read an interger */
-bool asn1_read_Integer(ASN1_DATA *data, int *i)
+BOOL asn1_read_Integer(ASN1_DATA *data, int *i)
 {
 	uint8 b;
 	*i = 0;
 	
-	if (!asn1_start_tag(data, ASN1_INTEGER)) return false;
+	if (!asn1_start_tag(data, ASN1_INTEGER)) return False;
 	while (asn1_tag_remaining(data)>0) {
 		asn1_read_uint8(data, &b);
 		*i = (*i << 8) + b;
@@ -496,23 +466,23 @@
 }
 
 /* check a enumarted value is correct */
-bool asn1_check_enumerated(ASN1_DATA *data, int v)
+BOOL asn1_check_enumerated(ASN1_DATA *data, int v)
 {
 	uint8 b;
-	if (!asn1_start_tag(data, ASN1_ENUMERATED)) return false;
+	if (!asn1_start_tag(data, ASN1_ENUMERATED)) return False;
 	asn1_read_uint8(data, &b);
 	asn1_end_tag(data);
 
 	if (v != b)
-		data->has_error = false;
+		data->has_error = False;
 
 	return !data->has_error;
 }
 
 /* write an enumarted value to the stream */
-bool asn1_write_enumerated(ASN1_DATA *data, uint8 v)
+BOOL asn1_write_enumerated(ASN1_DATA *data, uint8 v)
 {
-	if (!asn1_push_tag(data, ASN1_ENUMERATED)) return false;
+	if (!asn1_push_tag(data, ASN1_ENUMERATED)) return False;
 	asn1_write_uint8(data, v);
 	asn1_pop_tag(data);
 	return !data->has_error;

Deleted: branches/samba/upstream/source/libsmb/async_smb.c
===================================================================
--- branches/samba/upstream/source/libsmb/async_smb.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/async_smb.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,484 +0,0 @@
-/*
-   Unix SMB/CIFS implementation.
-   Infrastructure for async SMB client requests
-   Copyright (C) Volker Lendecke 2008
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-
-/*
- * Fetch an error out of a NBT packet
- */
-
-NTSTATUS cli_pull_error(char *buf)
-{
-	uint32_t flags2 = SVAL(buf, smb_flg2);
-
-	if (flags2 & FLAGS2_32_BIT_ERROR_CODES) {
-		return NT_STATUS(IVAL(buf, smb_rcls));
-	}
-
-	return NT_STATUS_DOS(CVAL(buf, smb_rcls), SVAL(buf,smb_err));
-}
-
-/*
- * Compatibility helper for the sync APIs: Fake NTSTATUS in cli->inbuf
- */
-
-void cli_set_error(struct cli_state *cli, NTSTATUS status)
-{
-	uint32_t flags2 = SVAL(cli->inbuf, smb_flg2);
-
-	if (NT_STATUS_IS_DOS(status)) {
-		SSVAL(cli->inbuf, smb_flg2,
-		      flags2 & ~FLAGS2_32_BIT_ERROR_CODES);
-		SCVAL(cli->inbuf, smb_rcls, NT_STATUS_DOS_CLASS(status));
-		SSVAL(cli->inbuf, smb_err, NT_STATUS_DOS_CODE(status));
-		return;
-	}
-
-	SSVAL(cli->inbuf, smb_flg2, flags2 | FLAGS2_32_BIT_ERROR_CODES);
-	SIVAL(cli->inbuf, smb_rcls, NT_STATUS_V(status));
-	return;
-}
-
-/*
- * Allocate a new mid
- */
-
-static uint16_t cli_new_mid(struct cli_state *cli)
-{
-	uint16_t result;
-	struct cli_request *req;
-
-	while (true) {
-		result = cli->mid++;
-		if (result == 0) {
-			continue;
-		}
-
-		for (req = cli->outstanding_requests; req; req = req->next) {
-			if (result == req->mid) {
-				break;
-			}
-		}
-
-		if (req == NULL) {
-			return result;
-		}
-	}
-}
-
-static char *cli_request_print(TALLOC_CTX *mem_ctx, struct async_req *req)
-{
-	char *result = async_req_print(mem_ctx, req);
-	struct cli_request *cli_req = cli_request_get(req);
-
-	if (result == NULL) {
-		return NULL;
-	}
-
-	return talloc_asprintf_append_buffer(
-		result, "mid=%d\n", cli_req->mid);
-}
-
-static int cli_request_destructor(struct cli_request *req)
-{
-	if (req->enc_state != NULL) {
-		common_free_enc_buffer(req->enc_state, req->outbuf);
-	}
-	DLIST_REMOVE(req->cli->outstanding_requests, req);
-	return 0;
-}
-
-/*
- * Create a fresh async smb request
- */
-
-struct async_req *cli_request_new(TALLOC_CTX *mem_ctx,
-				  struct event_context *ev,
-				  struct cli_state *cli,
-				  uint8_t num_words, size_t num_bytes,
-				  struct cli_request **preq)
-{
-	struct async_req *result;
-	struct cli_request *cli_req;
-	size_t bufsize = smb_size + num_words * 2 + num_bytes;
-
-	result = async_req_new(mem_ctx, ev);
-	if (result == NULL) {
-		return NULL;
-	}
-
-	cli_req = (struct cli_request *)talloc_size(
-		result, sizeof(*cli_req) + bufsize);
-	if (cli_req == NULL) {
-		TALLOC_FREE(result);
-		return NULL;
-	}
-	talloc_set_name_const(cli_req, "struct cli_request");
-	result->private_data = cli_req;
-	result->print = cli_request_print;
-
-	cli_req->async = result;
-	cli_req->cli = cli;
-	cli_req->outbuf = ((char *)cli_req + sizeof(*cli_req));
-	cli_req->sent = 0;
-	cli_req->mid = cli_new_mid(cli);
-	cli_req->inbuf = NULL;
-	cli_req->enc_state = NULL;
-
-	SCVAL(cli_req->outbuf, smb_wct, num_words);
-	SSVAL(cli_req->outbuf, smb_vwv + num_words * 2, num_bytes);
-
-	DLIST_ADD_END(cli->outstanding_requests, cli_req,
-		      struct cli_request *);
-	talloc_set_destructor(cli_req, cli_request_destructor);
-
-	DEBUG(10, ("cli_request_new: mid=%d\n", cli_req->mid));
-
-	*preq = cli_req;
-	return result;
-}
-
-/*
- * Convenience function to get the SMB part out of an async_req
- */
-
-struct cli_request *cli_request_get(struct async_req *req)
-{
-	if (req == NULL) {
-		return NULL;
-	}
-	return talloc_get_type_abort(req->private_data, struct cli_request);
-}
-
-/*
- * A PDU has arrived on cli->evt_inbuf
- */
-
-static void handle_incoming_pdu(struct cli_state *cli)
-{
-	struct cli_request *req;
-	uint16_t mid;
-	size_t raw_pdu_len, buf_len, pdu_len, rest_len;
-	char *pdu;
-	NTSTATUS status;
-
-	/*
-	 * The encrypted PDU len might differ from the unencrypted one
-	 */
-	raw_pdu_len = smb_len(cli->evt_inbuf) + 4;
-	buf_len = talloc_get_size(cli->evt_inbuf);
-	rest_len = buf_len - raw_pdu_len;
-
-	if (buf_len == raw_pdu_len) {
-		/*
-		 * Optimal case: Exactly one PDU was in the socket buffer
-		 */
-		pdu = cli->evt_inbuf;
-		cli->evt_inbuf = NULL;
-	}
-	else {
-		DEBUG(11, ("buf_len = %d, raw_pdu_len = %d, splitting "
-			   "buffer\n", (int)buf_len, (int)raw_pdu_len));
-
-		if (raw_pdu_len < rest_len) {
-			/*
-			 * The PDU is shorter, talloc_memdup that one.
-			 */
-			pdu = (char *)talloc_memdup(
-				cli, cli->evt_inbuf, raw_pdu_len);
-
-			memmove(cli->evt_inbuf,	cli->evt_inbuf + raw_pdu_len,
-				buf_len - raw_pdu_len);
-
-			cli->evt_inbuf = TALLOC_REALLOC_ARRAY(
-				NULL, cli->evt_inbuf, char, rest_len);
-
-			if (pdu == NULL) {
-				status = NT_STATUS_NO_MEMORY;
-				goto invalidate_requests;
-			}
-		}
-		else {
-			/*
-			 * The PDU is larger than the rest, talloc_memdup the
-			 * rest
-			 */
-			pdu = cli->evt_inbuf;
-
-			cli->evt_inbuf = (char *)talloc_memdup(
-				cli, pdu + raw_pdu_len,	rest_len);
-
-			if (cli->evt_inbuf == NULL) {
-				status = NT_STATUS_NO_MEMORY;
-				goto invalidate_requests;
-			}
-		}
-
-	}
-
-	/*
-	 * TODO: Handle oplock break requests
-	 */
-
-	if (cli_encryption_on(cli) && CVAL(pdu, 0) == 0) {
-		uint16_t enc_ctx_num;
-
-		status = get_enc_ctx_num((uint8_t *)pdu, &enc_ctx_num);
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(10, ("get_enc_ctx_num returned %s\n",
-				   nt_errstr(status)));
-			goto invalidate_requests;
-		}
-
-		if (enc_ctx_num != cli->trans_enc_state->enc_ctx_num) {
-			DEBUG(10, ("wrong enc_ctx %d, expected %d\n",
-				   enc_ctx_num,
-				   cli->trans_enc_state->enc_ctx_num));
-			status = NT_STATUS_INVALID_HANDLE;
-			goto invalidate_requests;
-		}
-
-		status = common_decrypt_buffer(cli->trans_enc_state,
-					       pdu);
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(10, ("common_decrypt_buffer returned %s\n",
-				   nt_errstr(status)));
-			goto invalidate_requests;
-		}
-	}
-
-	if (!cli_check_sign_mac(cli, pdu)) {
-		DEBUG(10, ("cli_check_sign_mac failed\n"));
-		status = NT_STATUS_ACCESS_DENIED;
-		goto invalidate_requests;
-	}
-
-	mid = SVAL(pdu, smb_mid);
-
-	DEBUG(10, ("handle_incoming_pdu: got mid %d\n", mid));
-
-	for (req = cli->outstanding_requests; req; req = req->next) {
-		if (req->mid == mid) {
-			break;
-		}
-	}
-
-	pdu_len = smb_len(pdu) + 4;
-
-	if (req == NULL) {
-		DEBUG(3, ("Request for mid %d not found, dumping PDU\n", mid));
-
-		TALLOC_FREE(pdu);
-		return;
-	}
-
-	req->inbuf = talloc_move(req, &pdu);
-
-	async_req_done(req->async);
-	return;
-
- invalidate_requests:
-
-	DEBUG(10, ("handle_incoming_pdu: Aborting with %s\n",
-		   nt_errstr(status)));
-
-	for (req = cli->outstanding_requests; req; req = req->next) {
-		async_req_error(req->async, status);
-	}
-	return;
-}
-
-/*
- * fd event callback. This is the basic connection to the socket
- */
-
-static void cli_state_handler(struct event_context *event_ctx,
-			      struct fd_event *event, uint16 flags, void *p)
-{
-	struct cli_state *cli = (struct cli_state *)p;
-	struct cli_request *req;
-
-	DEBUG(11, ("cli_state_handler called with flags %d\n", flags));
-
-	if (flags & EVENT_FD_READ) {
-		int res, available;
-		size_t old_size, new_size;
-		char *tmp;
-
-		res = ioctl(cli->fd, FIONREAD, &available);
-		if (res == -1) {
-			DEBUG(10, ("ioctl(FIONREAD) failed: %s\n",
-				   strerror(errno)));
-			goto sock_error;
-		}
-
-		if (available == 0) {
-			/* EOF */
-			goto sock_error;
-		}
-
-		old_size = talloc_get_size(cli->evt_inbuf);
-		new_size = old_size + available;
-
-		if (new_size < old_size) {
-			/* wrap */
-			goto sock_error;
-		}
-
-		tmp = TALLOC_REALLOC_ARRAY(cli, cli->evt_inbuf, char,
-					   new_size);
-		if (tmp == NULL) {
-			/* nomem */
-			goto sock_error;
-		}
-		cli->evt_inbuf = tmp;
-
-		res = recv(cli->fd, cli->evt_inbuf + old_size, available, 0);
-		if (res == -1) {
-			DEBUG(10, ("recv failed: %s\n", strerror(errno)));
-			goto sock_error;
-		}
-
-		DEBUG(11, ("cli_state_handler: received %d bytes, "
-			   "smb_len(evt_inbuf) = %d\n", (int)res,
-			   smb_len(cli->evt_inbuf)));
-
-		/* recv *might* have returned less than announced */
-		new_size = old_size + res;
-
-		/* shrink, so I don't expect errors here */
-		cli->evt_inbuf = TALLOC_REALLOC_ARRAY(cli, cli->evt_inbuf,
-						      char, new_size);
-
-		while ((cli->evt_inbuf != NULL)
-		       && ((smb_len(cli->evt_inbuf) + 4) <= new_size)) {
-			/*
-			 * we've got a complete NBT level PDU in evt_inbuf
-			 */
-			handle_incoming_pdu(cli);
-			new_size = talloc_get_size(cli->evt_inbuf);
-		}
-	}
-
-	if (flags & EVENT_FD_WRITE) {
-		size_t to_send;
-		ssize_t sent;
-
-		for (req = cli->outstanding_requests; req; req = req->next) {
-			to_send = smb_len(req->outbuf)+4;
-			if (to_send > req->sent) {
-				break;
-			}
-		}
-
-		if (req == NULL) {
-			event_fd_set_not_writeable(event);
-			return;
-		}
-
-		sent = send(cli->fd, req->outbuf + req->sent,
-			    to_send - req->sent, 0);
-
-		if (sent < 0) {
-			goto sock_error;
-		}
-
-		req->sent += sent;
-
-		if (req->sent == to_send) {
-			return;
-		}
-	}
-	return;
-
- sock_error:
-	for (req = cli->outstanding_requests; req; req = req->next) {
-		req->async->state = ASYNC_REQ_ERROR;
-		req->async->status = map_nt_error_from_unix(errno);
-	}
-	TALLOC_FREE(cli->fd_event);
-	close(cli->fd);
-	cli->fd = -1;
-}
-
-/*
- * Holder for a talloc_destructor, we need to zero out the pointers in cli
- * when deleting
- */
-struct cli_tmp_event {
-	struct cli_state *cli;
-};
-
-static int cli_tmp_event_destructor(struct cli_tmp_event *e)
-{
-	TALLOC_FREE(e->cli->fd_event);
-	TALLOC_FREE(e->cli->event_ctx);
-	return 0;
-}
-
-/*
- * Create a temporary event context for use in the sync helper functions
- */
-
-struct cli_tmp_event *cli_tmp_event_ctx(TALLOC_CTX *mem_ctx,
-					struct cli_state *cli)
-{
-	struct cli_tmp_event *state;
-
-	if (cli->event_ctx != NULL) {
-		return NULL;
-	}
-
-	state = talloc(mem_ctx, struct cli_tmp_event);
-	if (state == NULL) {
-		return NULL;
-	}
-	state->cli = cli;
-	talloc_set_destructor(state, cli_tmp_event_destructor);
-
-	cli->event_ctx = event_context_init(state);
-	if (cli->event_ctx == NULL) {
-		TALLOC_FREE(state);
-		return NULL;
-	}
-
-	cli->fd_event = event_add_fd(cli->event_ctx, state, cli->fd,
-				     EVENT_FD_READ, cli_state_handler, cli);
-	if (cli->fd_event == NULL) {
-		TALLOC_FREE(state);
-		return NULL;
-	}
-	return state;
-}
-
-/*
- * Attach an event context permanently to a cli_struct
- */
-
-NTSTATUS cli_add_event_ctx(struct cli_state *cli,
-			   struct event_context *event_ctx)
-{
-	cli->event_ctx = event_ctx;
-	cli->fd_event = event_add_fd(event_ctx, cli, cli->fd, EVENT_FD_READ,
-				     cli_state_handler, cli);
-	if (cli->fd_event == NULL) {
-		return NT_STATUS_NO_MEMORY;
-	}
-	return NT_STATUS_OK;
-}

Modified: branches/samba/upstream/source/libsmb/cliconnect.c
===================================================================
--- branches/samba/upstream/source/libsmb/cliconnect.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/cliconnect.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,11 +15,14 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
+extern pstring user_socket_options;
+
 static const struct {
 	int prot;
 	const char *name;
@@ -60,8 +63,8 @@
 					  const char *pass, size_t passlen,
 					  const char *workgroup)
 {
-	DATA_BLOB session_key = data_blob_null;
-	DATA_BLOB lm_response = data_blob_null;
+	DATA_BLOB session_key = data_blob(NULL, 0);
+	DATA_BLOB lm_response = data_blob(NULL, 0);
 	fstring pword;
 	char *p;
 
@@ -98,7 +101,7 @@
 
 	/* send a session setup command */
 	memset(cli->outbuf,'\0',smb_size);
-	cli_set_message(cli->outbuf,10, 0, True);
+	set_message(cli->outbuf,10, 0, True);
 	SCVAL(cli->outbuf,smb_com,SMBsesssetupX);
 	cli_setup_packet(cli);
 	
@@ -168,7 +171,7 @@
 	uint32 capabilities = cli_session_setup_capabilities(cli);
 
 	memset(cli->outbuf, '\0', smb_size);
-	cli_set_message(cli->outbuf,13,0,True);
+	set_message(cli->outbuf,13,0,True);
 	SCVAL(cli->outbuf,smb_com,SMBsesssetupX);
 	cli_setup_packet(cli);
 			
@@ -228,7 +231,7 @@
 	fstr_sprintf( lanman, "Samba %s", SAMBA_VERSION_STRING);
 
 	memset(cli->outbuf, '\0', smb_size);
-	cli_set_message(cli->outbuf,13,0,True);
+	set_message(cli->outbuf,13,0,True);
 	SCVAL(cli->outbuf,smb_com,SMBsesssetupX);
 	cli_setup_packet(cli);
 			
@@ -246,8 +249,7 @@
 	if ( (capabilities & CAP_UNICODE) == 0 ) {
 		p += clistr_push(cli, p, pass, -1, STR_TERMINATE); /* password */
 		SSVAL(cli->outbuf,smb_vwv7,PTR_DIFF(p, smb_buf(cli->outbuf)));
-	}
-	else {
+	} else {
 		/* For ucs2 passwords clistr_push calls ucs2_align, which causes
 		 * the space taken by the unicode password to be one byte too
 		 * long (as we're on an odd byte boundary here). Reduce the
@@ -305,9 +307,9 @@
 				      const char *workgroup)
 {
 	uint32 capabilities = cli_session_setup_capabilities(cli);
-	DATA_BLOB lm_response = data_blob_null;
-	DATA_BLOB nt_response = data_blob_null;
-	DATA_BLOB session_key = data_blob_null;
+	DATA_BLOB lm_response = data_blob(NULL, 0);
+	DATA_BLOB nt_response = data_blob(NULL, 0);
+	DATA_BLOB session_key = data_blob(NULL, 0);
 	NTSTATUS result;
 	char *p;
 
@@ -340,7 +342,7 @@
 			E_md4hash(pass, nt_hash);
 
 #ifdef LANMAN_ONLY
-			nt_response = data_blob_null;
+			nt_response = data_blob(NULL, 0);
 #else
 			nt_response = data_blob(NULL, 24);
 			SMBNTencrypt(pass,cli->secblob.data,nt_response.data);
@@ -384,7 +386,7 @@
 	/* send a session setup command */
 	memset(cli->outbuf,'\0',smb_size);
 
-	cli_set_message(cli->outbuf,13,0,True);
+	set_message(cli->outbuf,13,0,True);
 	SCVAL(cli->outbuf,smb_com,SMBsesssetupX);
 	cli_setup_packet(cli);
 			
@@ -454,7 +456,7 @@
  Send a extended security session setup blob
 ****************************************************************************/
 
-static bool cli_session_setup_blob_send(struct cli_state *cli, DATA_BLOB blob)
+static BOOL cli_session_setup_blob_send(struct cli_state *cli, DATA_BLOB blob)
 {
 	uint32 capabilities = cli_session_setup_capabilities(cli);
 	char *p;
@@ -464,7 +466,7 @@
 	/* send a session setup command */
 	memset(cli->outbuf,'\0',smb_size);
 
-	cli_set_message(cli->outbuf,12,0,True);
+	set_message(cli->outbuf,12,0,True);
 	SCVAL(cli->outbuf,smb_com,SMBsesssetupX);
 
 	cli_setup_packet(cli);
@@ -491,7 +493,7 @@
 
 static DATA_BLOB cli_session_setup_blob_receive(struct cli_state *cli)
 {
-	DATA_BLOB blob2 = data_blob_null;
+	DATA_BLOB blob2 = data_blob(NULL, 0);
 	char *p;
 	size_t len;
 
@@ -536,13 +538,13 @@
 
 #define BASE_SESSSETUP_BLOB_PACKET_SIZE (35 + 24 + 22)
 
-static bool cli_session_setup_blob(struct cli_state *cli, DATA_BLOB blob, DATA_BLOB session_key_krb5)
+static BOOL cli_session_setup_blob(struct cli_state *cli, DATA_BLOB blob, DATA_BLOB session_key_krb5)
 {
 	int32 remaining = blob.length;
 	int32 cur = 0;
-	DATA_BLOB send_blob = data_blob_null;
+	DATA_BLOB send_blob = data_blob(NULL, 0);
 	int32 max_blob_size = 0;
-	DATA_BLOB receive_blob = data_blob_null;
+	DATA_BLOB receive_blob = data_blob(NULL, 0);
 
 	if (cli->max_xmit < BASE_SESSSETUP_BLOB_PACKET_SIZE + 1) {
 		DEBUG(0,("cli_session_setup_blob: cli->max_xmit too small "
@@ -560,7 +562,7 @@
 			send_blob.length = max_blob_size;
 			remaining -= max_blob_size;
 		} else {
-			DATA_BLOB null_blob = data_blob_null;
+			DATA_BLOB null_blob = data_blob(NULL, 0);
 
 			send_blob.length = remaining; 
                         remaining = 0;
@@ -588,8 +590,8 @@
 		if (cli_is_error(cli) &&
 				!NT_STATUS_EQUAL( cli_get_nt_error(cli), 
 					NT_STATUS_MORE_PROCESSING_REQUIRED)) {
-			DEBUG(0, ("cli_session_setup_blob: receive failed "
-				  "(%s)\n", nt_errstr(cli_get_nt_error(cli))));
+			DEBUG(0, ("cli_session_setup_blob: recieve failed (%s)\n",
+				nt_errstr(cli_get_nt_error(cli)) ));
 			cli->vuid = 0;
 			return False;
 		}
@@ -663,9 +665,9 @@
 	NTSTATUS nt_status;
 	int turn = 1;
 	DATA_BLOB msg1;
-	DATA_BLOB blob = data_blob_null;
-	DATA_BLOB blob_in = data_blob_null;
-	DATA_BLOB blob_out = data_blob_null;
+	DATA_BLOB blob = data_blob(NULL, 0);
+	DATA_BLOB blob_in = data_blob(NULL, 0);
+	DATA_BLOB blob_out = data_blob(NULL, 0);
 
 	cli_temp_set_signing(cli);
 
@@ -706,7 +708,7 @@
 				
 				nt_status = cli_nt_error(cli);
 				if (cli_is_error(cli) && NT_STATUS_IS_OK(nt_status)) {
-					if (cli->smb_rw_error == SMB_READ_BAD_SIG) {
+					if (cli->smb_rw_error == READ_BAD_SIG) {
 						nt_status = NT_STATUS_ACCESS_DENIED;
 					} else {
 						nt_status = NT_STATUS_UNSUCCESSFUL;
@@ -722,7 +724,7 @@
 			}
 		} else if ((turn == 1) && 
 			   NT_STATUS_EQUAL(nt_status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
-			DATA_BLOB tmp_blob = data_blob_null;
+			DATA_BLOB tmp_blob = data_blob(NULL, 0);
 			/* the server might give us back two challenges */
 			if (!spnego_parse_challenge(blob, &blob_in, 
 						    &tmp_blob)) {
@@ -731,7 +733,7 @@
 			}
 			data_blob_free(&tmp_blob);
 		} else {
-			if (!spnego_parse_auth_response(blob, nt_status, OID_NTLMSSP, 
+			if (!spnego_parse_auth_response(blob, nt_status, 
 							&blob_in)) {
 				DEBUG(3,("Failed to parse auth response\n"));
 				if (NT_STATUS_IS_OK(nt_status) 
@@ -750,8 +752,8 @@
 
 		DATA_BLOB key = data_blob(ntlmssp_state->session_key.data,
 					  ntlmssp_state->session_key.length);
-		DATA_BLOB null_blob = data_blob_null;
-		bool res;
+		DATA_BLOB null_blob = data_blob(NULL, 0);
+		BOOL res;
 
 		fstrcpy(cli->server_domain, ntlmssp_state->server_domain);
 		cli_set_session_key(cli, ntlmssp_state->session_key);
@@ -764,9 +766,9 @@
 			
 			/* 'resign' the last message, so we get the right sequence numbers
 			   for checking the first reply from the server */
-			cli_calculate_sign_mac(cli, cli->outbuf);
+			cli_calculate_sign_mac(cli);
 			
-			if (!cli_check_sign_mac(cli, cli->inbuf)) {
+			if (!cli_check_sign_mac(cli)) {
 				nt_status = NT_STATUS_ACCESS_DENIED;
 			}
 		}
@@ -785,22 +787,16 @@
 
 /****************************************************************************
  Do a spnego encrypted session setup.
-
- user_domain: The shortname of the domain the user/machine is a member of.
- dest_realm: The realm we're connecting to, if NULL we use our default realm.
 ****************************************************************************/
 
 ADS_STATUS cli_session_setup_spnego(struct cli_state *cli, const char *user, 
-			      const char *pass, const char *user_domain,
-			      const char * dest_realm)
+			      const char *pass, const char *domain)
 {
-	char *principal = NULL;
+	char *principal;
 	char *OIDs[ASN1_MAX_OIDS];
 	int i;
-	bool got_kerberos_mechanism = False;
+	BOOL got_kerberos_mechanism = False;
 	DATA_BLOB blob;
-	const char *p = NULL;
-	char *account = NULL;
 
 	DEBUG(3,("Doing spnego session setup (blob length=%lu)\n", (unsigned long)cli->secblob.length));
 
@@ -817,10 +813,8 @@
 	/* there is 16 bytes of GUID before the real spnego packet starts */
 	blob = data_blob(cli->secblob.data+16, cli->secblob.length-16);
 
-	/* The server sent us the first part of the SPNEGO exchange in the
-	 * negprot reply. It is WRONG to depend on the principal sent in the
-	 * negprot reply, but right now we do it. If we don't receive one,
-	 * we try to best guess, then fall back to NTLM.  */
+	/* the server sent us the first part of the SPNEGO exchange in the negprot 
+	   reply */
 	if (!spnego_parse_negTokenInit(blob, OIDs, &principal)) {
 		data_blob_free(&blob);
 		return ADS_ERROR_NT(NT_STATUS_INVALID_PARAMETER);
@@ -839,6 +833,18 @@
 
 	DEBUG(3,("got principal=%s\n", principal ? principal : "<null>"));
 
+	if (got_kerberos_mechanism && (principal == NULL)) {
+		/*
+		 * It is WRONG to depend on the principal sent in the negprot
+		 * reply, but right now we do it. So for safety (don't
+		 * segfault later) disable Kerberos when no principal was
+		 * sent. -- VL
+		 */
+		DEBUG(1, ("Kerberos mech was offered, but no principal was "
+			  "sent, disabling Kerberos\n"));
+		cli->use_kerberos = False;
+	}
+
 	fstrcpy(cli->user_name, user);
 
 #ifdef HAVE_KRB5
@@ -869,7 +875,6 @@
 		if (strequal(principal, ADS_IGNORE_PRINCIPAL)) {
 			SAFE_FREE(principal);
 		}
-
 		if (principal == NULL &&
 			!is_ipaddress(cli->desthost) &&
 			!strequal(star_smbserver_name,
@@ -891,12 +896,7 @@
 				return ADS_ERROR_NT(NT_STATUS_NO_MEMORY);
 			}
 
-			if (dest_realm) {
-				realm = SMB_STRDUP(dest_realm);
-				strupper_m(realm);
-			} else {
-				realm = kerberos_get_default_realm_from_ccache();
-			}
+			realm = kerberos_get_default_realm_from_ccache();
 			if (realm && *realm) {
 				if (asprintf(&principal, "%s$@%s",
 						machine, realm) < 0) {
@@ -913,8 +913,7 @@
 		}
 
 		if (principal) {
-			rc = cli_session_setup_kerberos(cli, principal,
-				dest_realm);
+			rc = cli_session_setup_kerberos(cli, principal, domain);
 			if (ADS_ERR_OK(rc) || !cli->fallback_after_kerberos) {
 				SAFE_FREE(principal);
 				return rc;
@@ -927,19 +926,7 @@
 
 ntlmssp:
 
-	account = talloc_strdup(talloc_tos(), user);
-	if (!account) {
-		return ADS_ERROR_NT(NT_STATUS_NO_MEMORY);
-	}
-
-	/* when falling back to ntlmssp while authenticating with a machine
-	 * account strip off the realm - gd */
-
-	if ((p = strchr_m(user, '@')) != NULL) {
-		account[PTR_DIFF(p,user)] = '\0';
-	}
-
-	return ADS_ERROR_NT(cli_session_setup_ntlmssp(cli, account, pass, user_domain));
+	return ADS_ERROR_NT(cli_session_setup_ntlmssp(cli, user, pass, domain));
 }
 
 /****************************************************************************
@@ -948,8 +935,8 @@
  password is in plaintext, the same should be done.
 ****************************************************************************/
 
-NTSTATUS cli_session_setup(struct cli_state *cli,
-			   const char *user,
+NTSTATUS cli_session_setup(struct cli_state *cli, 
+			   const char *user, 
 			   const char *pass, int passlen,
 			   const char *ntpass, int ntpasslen,
 			   const char *workgroup)
@@ -957,17 +944,8 @@
 	char *p;
 	fstring user2;
 
-	if (user) {
-		fstrcpy(user2, user);
-	} else {
-		user2[0] ='\0';
-	}
-
-	if (!workgroup) {
-		workgroup = "";
-	}
-
 	/* allow for workgroups as part of the username */
+	fstrcpy(user2, user);
 	if ((p=strchr_m(user2,'\\')) || (p=strchr_m(user2,'/')) ||
 	    (p=strchr_m(user2,*lp_winbind_separator()))) {
 		*p = 0;
@@ -994,8 +972,8 @@
 
 		if ((cli->sec_mode & NEGOTIATE_SECURITY_CHALLENGE_RESPONSE) == 0 &&
 		    !lp_client_plaintext_auth() && (*pass)) {
-			DEBUG(1, ("Server requested plaintext password but "
-				  "'client plaintext auth' is disabled\n"));
+			DEBUG(1, ("Server requested plaintext password but 'client use plaintext auth'"
+				  " is disabled\n"));
 			return NT_STATUS_ACCESS_DENIED;
 		}
 
@@ -1021,8 +999,8 @@
 
 	if ((cli->sec_mode & NEGOTIATE_SECURITY_CHALLENGE_RESPONSE) == 0) {
 		if (!lp_client_plaintext_auth() && (*pass)) {
-			DEBUG(1, ("Server requested plaintext password but "
-				  "'client plaintext auth' is disabled\n"));
+			DEBUG(1, ("Server requested plaintext password but 'client use plaintext auth'"
+				  " is disabled\n"));
 			return NT_STATUS_ACCESS_DENIED;
 		}
 		return cli_session_setup_plaintext(cli, user, pass, workgroup);
@@ -1031,8 +1009,7 @@
 	/* if the server supports extended security then use SPNEGO */
 
 	if (cli->capabilities & CAP_EXTENDED_SECURITY) {
-		ADS_STATUS status = cli_session_setup_spnego(cli, user, pass,
-							     workgroup, NULL);
+		ADS_STATUS status = cli_session_setup_spnego(cli, user, pass, workgroup);
 		if (!ADS_ERR_OK(status)) {
 			DEBUG(3, ("SPNEGO login failed: %s\n", ads_errstr(status)));
 			return ads_ntstatus(status);
@@ -1061,10 +1038,10 @@
  Send a uloggoff.
 *****************************************************************************/
 
-bool cli_ulogoff(struct cli_state *cli)
+BOOL cli_ulogoff(struct cli_state *cli)
 {
 	memset(cli->outbuf,'\0',smb_size);
-	cli_set_message(cli->outbuf,2,0,True);
+	set_message(cli->outbuf,2,0,True);
 	SCVAL(cli->outbuf,smb_com,SMBulogoffX);
 	cli_setup_packet(cli);
 	SSVAL(cli->outbuf,smb_vwv0,0xFF);
@@ -1086,7 +1063,7 @@
  Send a tconX.
 ****************************************************************************/
 
-bool cli_send_tconX(struct cli_state *cli, 
+BOOL cli_send_tconX(struct cli_state *cli, 
 		    const char *share, const char *dev, const char *pass, int passlen)
 {
 	fstring fullshare, pword;
@@ -1108,9 +1085,8 @@
 	if ((cli->sec_mode & NEGOTIATE_SECURITY_CHALLENGE_RESPONSE) &&
 	    *pass && passlen != 24) {
 		if (!lp_client_lanman_auth()) {
-			DEBUG(1, ("Server requested LANMAN password "
-				  "(share-level security) but "
-				  "'client lanman auth' is disabled\n"));
+			DEBUG(1, ("Server requested LANMAN password (share-level security) but 'client use lanman auth'"
+				  " is disabled\n"));
 			return False;
 		}
 
@@ -1122,9 +1098,8 @@
 	} else {
 		if((cli->sec_mode & (NEGOTIATE_SECURITY_USER_LEVEL|NEGOTIATE_SECURITY_CHALLENGE_RESPONSE)) == 0) {
 			if (!lp_client_plaintext_auth() && (*pass)) {
-				DEBUG(1, ("Server requested plaintext "
-					  "password but 'client plaintext "
-					  "auth' is disabled\n"));
+				DEBUG(1, ("Server requested plaintext password but 'client use plaintext auth'"
+					  " is disabled\n"));
 				return False;
 			}
 
@@ -1143,7 +1118,7 @@
 	slprintf(fullshare, sizeof(fullshare)-1,
 		 "\\\\%s\\%s", cli->desthost, share);
 
-	cli_set_message(cli->outbuf,4, 0, True);
+	set_message(cli->outbuf,4, 0, True);
 	SCVAL(cli->outbuf,smb_com,SMBtconX);
 	cli_setup_packet(cli);
 
@@ -1191,10 +1166,10 @@
  Send a tree disconnect.
 ****************************************************************************/
 
-bool cli_tdis(struct cli_state *cli)
+BOOL cli_tdis(struct cli_state *cli)
 {
 	memset(cli->outbuf,'\0',smb_size);
-	cli_set_message(cli->outbuf,0,0,True);
+	set_message(cli->outbuf,0,0,True);
 	SCVAL(cli->outbuf,smb_com,SMBtdis);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
 	cli_setup_packet(cli);
@@ -1226,7 +1201,7 @@
 	memset(cli->outbuf,'\0',smb_size);
 
 	/* setup the protocol strings */
-	cli_set_message(cli->outbuf,0,0,True);
+	set_message(cli->outbuf,0,0,True);
 
 	p = smb_buf(cli->outbuf);
 	for (numprots=0;
@@ -1249,7 +1224,7 @@
  Send a negprot command.
 ****************************************************************************/
 
-bool cli_negprot(struct cli_state *cli)
+BOOL cli_negprot(struct cli_state *cli)
 {
 	char *p;
 	int numprots;
@@ -1266,7 +1241,7 @@
 	     numprots++)
 		plength += strlen(prots[numprots].name)+2;
     
-	cli_set_message(cli->outbuf,0,plength,True);
+	set_message(cli->outbuf,0,plength,True);
 
 	p = smb_buf(cli->outbuf);
 	for (numprots=0;
@@ -1353,9 +1328,9 @@
 		if (cli->capabilities & (CAP_LARGE_READX|CAP_LARGE_WRITEX)) {
 			SAFE_FREE(cli->outbuf);
 			SAFE_FREE(cli->inbuf);
-			cli->outbuf = (char *)SMB_MALLOC(CLI_SAMBA_MAX_LARGE_READX_SIZE+LARGE_WRITEX_HDR_SIZE+SAFETY_MARGIN);
-			cli->inbuf = (char *)SMB_MALLOC(CLI_SAMBA_MAX_LARGE_READX_SIZE+LARGE_WRITEX_HDR_SIZE+SAFETY_MARGIN);
-			cli->bufsize = CLI_SAMBA_MAX_LARGE_READX_SIZE + LARGE_WRITEX_HDR_SIZE;
+			cli->outbuf = (char *)SMB_MALLOC(CLI_SAMBA_MAX_LARGE_READX_SIZE+SAFETY_MARGIN);
+			cli->inbuf = (char *)SMB_MALLOC(CLI_SAMBA_MAX_LARGE_READX_SIZE+SAFETY_MARGIN);
+			cli->bufsize = CLI_SAMBA_MAX_LARGE_READX_SIZE;
 		}
 
 	} else if (cli->protocol >= PROTOCOL_LANMAN1) {
@@ -1391,7 +1366,7 @@
  Send a session request. See rfc1002.txt 4.3 and 4.3.2.
 ****************************************************************************/
 
-bool cli_session_request(struct cli_state *cli,
+BOOL cli_session_request(struct cli_state *cli,
 			 struct nmb_name *calling, struct nmb_name *called)
 {
 	char *p;
@@ -1444,28 +1419,22 @@
 		int16 port;
 		};
 		*/
-		uint16_t port = (CVAL(cli->inbuf,8)<<8)+CVAL(cli->inbuf,9);
-		struct in_addr dest_ip;
-
+		int port = (CVAL(cli->inbuf,8)<<8)+CVAL(cli->inbuf,9);
 		/* SESSION RETARGET */
-		putip((char *)&dest_ip,cli->inbuf+4);
-		in_addr_to_sockaddr_storage(&cli->dest_ss, dest_ip);
+		putip((char *)&cli->dest_ip,cli->inbuf+4);
 
-		cli->fd = open_socket_out(SOCK_STREAM,
-				&cli->dest_ss,
-				port,
-				LONG_CONNECT_TIMEOUT);
+		cli->fd = open_socket_out(SOCK_STREAM, &cli->dest_ip, port, LONG_CONNECT_TIMEOUT);
 		if (cli->fd == -1)
 			return False;
 
 		DEBUG(3,("Retargeted\n"));
 
-		set_socket_options(cli->fd, lp_socket_options());
+		set_socket_options(cli->fd,user_socket_options);
 
 		/* Try again */
 		{
 			static int depth;
-			bool ret;
+			BOOL ret;
 			if (depth > 4) {
 				DEBUG(0,("Retarget recursion - failing\n"));
 				return False;
@@ -1489,94 +1458,54 @@
  Open the client sockets.
 ****************************************************************************/
 
-NTSTATUS cli_connect(struct cli_state *cli,
-		const char *host,
-		struct sockaddr_storage *dest_ss)
-
+NTSTATUS cli_connect(struct cli_state *cli, const char *host, struct in_addr *ip)
 {
 	int name_type = 0x20;
-	TALLOC_CTX *frame = talloc_stackframe();
-	unsigned int num_addrs = 0;
-	unsigned int i = 0;
-	struct sockaddr_storage *ss_arr = NULL;
-	char *p = NULL;
+	char *p;
 
 	/* reasonable default hostname */
-	if (!host) {
-		host = star_smbserver_name;
-	}
+	if (!host) host = star_smbserver_name;
 
 	fstrcpy(cli->desthost, host);
-	fstr_sprintf(cli->srv_name_slash, "\\\\%s", cli->desthost);
-	strupper_m(cli->srv_name_slash);
 
 	/* allow hostnames of the form NAME#xx and do a netbios lookup */
 	if ((p = strchr(cli->desthost, '#'))) {
-		name_type = strtol(p+1, NULL, 16);
+		name_type = strtol(p+1, NULL, 16);		
 		*p = 0;
 	}
-
-	if (!dest_ss || is_zero_addr(dest_ss)) {
-		NTSTATUS status =resolve_name_list(frame,
-					cli->desthost,
-					name_type,
-					&ss_arr,
-					&num_addrs);
-		if (!NT_STATUS_IS_OK(status)) {
-			TALLOC_FREE(frame);
+	
+	if (!ip || is_zero_ip(*ip)) {
+                if (!resolve_name(cli->desthost, &cli->dest_ip, name_type)) {
 			return NT_STATUS_BAD_NETWORK_NAME;
                 }
+		if (ip) *ip = cli->dest_ip;
 	} else {
-		num_addrs = 1;
-		ss_arr = TALLOC_P(frame, struct sockaddr_storage);
-		if (!ss_arr) {
-			TALLOC_FREE(frame);
-			return NT_STATUS_NO_MEMORY;
-		}
-		*ss_arr = *dest_ss;
+		cli->dest_ip = *ip;
 	}
 
-	for (i = 0; i < num_addrs; i++) {
-		cli->dest_ss = ss_arr[i];
-		if (getenv("LIBSMB_PROG")) {
-			cli->fd = sock_exec(getenv("LIBSMB_PROG"));
-		} else {
-			/* try 445 first, then 139 */
-			uint16_t port = cli->port?cli->port:445;
-			cli->fd = open_socket_out(SOCK_STREAM, &cli->dest_ss,
+	if (getenv("LIBSMB_PROG")) {
+		cli->fd = sock_exec(getenv("LIBSMB_PROG"));
+	} else {
+		/* try 445 first, then 139 */
+		int port = cli->port?cli->port:445;
+		cli->fd = open_socket_out(SOCK_STREAM, &cli->dest_ip, 
+					  port, cli->timeout);
+		if (cli->fd == -1 && cli->port == 0) {
+			port = 139;
+			cli->fd = open_socket_out(SOCK_STREAM, &cli->dest_ip, 
 						  port, cli->timeout);
-			if (cli->fd == -1 && cli->port == 0) {
-				port = 139;
-				cli->fd = open_socket_out(SOCK_STREAM, &cli->dest_ss,
-							  port, cli->timeout);
-			}
-			if (cli->fd != -1) {
-				cli->port = port;
-			}
 		}
-		if (cli->fd == -1) {
-			char addr[INET6_ADDRSTRLEN];
-			print_sockaddr(addr, sizeof(addr), &ss_arr[i]);
-			DEBUG(2,("Error connecting to %s (%s)\n",
-				 dest_ss?addr:host,strerror(errno)));
-		} else {
-			/* Exit from loop on first connection. */
-			break;
-		}
+		if (cli->fd != -1)
+			cli->port = port;
 	}
-
 	if (cli->fd == -1) {
-		TALLOC_FREE(frame);
+		DEBUG(1,("Error connecting to %s (%s)\n",
+			 ip?inet_ntoa(*ip):host,strerror(errno)));
 		return map_nt_error_from_unix(errno);
 	}
 
-	if (dest_ss) {
-		*dest_ss = cli->dest_ss;
-	}
+	set_socket_options(cli->fd,user_socket_options);
 
-	set_socket_options(cli->fd, lp_socket_options());
-
-	TALLOC_FREE(frame);
 	return NT_STATUS_OK;
 }
 
@@ -1584,23 +1513,23 @@
    establishes a connection to after the negprot. 
    @param output_cli A fully initialised cli structure, non-null only on success
    @param dest_host The netbios name of the remote host
-   @param dest_ss (optional) The the destination IP, NULL for name based lookup
+   @param dest_ip (optional) The the destination IP, NULL for name based lookup
    @param port (optional) The destination port (0 for default)
-   @param retry bool. Did this connection fail with a retryable error ?
+   @param retry BOOL. Did this connection fail with a retryable error ?
 
 */
 NTSTATUS cli_start_connection(struct cli_state **output_cli, 
 			      const char *my_name, 
 			      const char *dest_host, 
-			      struct sockaddr_storage *dest_ss, int port,
+			      struct in_addr *dest_ip, int port,
 			      int signing_state, int flags,
-			      bool *retry) 
+			      BOOL *retry) 
 {
 	NTSTATUS nt_status;
 	struct nmb_name calling;
 	struct nmb_name called;
 	struct cli_state *cli;
-	struct sockaddr_storage ss;
+	struct in_addr ip;
 
 	if (retry)
 		*retry = False;
@@ -1622,22 +1551,19 @@
 
 	cli_set_timeout(cli, 10000); /* 10 seconds. */
 
-	if (dest_ss) {
-		ss = *dest_ss;
-	} else {
-		zero_addr(&ss);
-	}
+	if (dest_ip)
+		ip = *dest_ip;
+	else
+		ZERO_STRUCT(ip);
 
 again:
 
 	DEBUG(3,("Connecting to host=%s\n", dest_host));
-
-	nt_status = cli_connect(cli, dest_host, &ss);
+	
+	nt_status = cli_connect(cli, dest_host, &ip);
 	if (!NT_STATUS_IS_OK(nt_status)) {
-		char addr[INET6_ADDRSTRLEN];
-		print_sockaddr(addr, sizeof(addr), &ss);
 		DEBUG(1,("cli_start_connection: failed to connect to %s (%s). Error %s\n",
-			 nmb_namestr(&called), addr, nt_errstr(nt_status) ));
+			 nmb_namestr(&called), inet_ntoa(ip), nt_errstr(nt_status) ));
 		cli_shutdown(cli);
 		return nt_status;
 	}
@@ -1647,7 +1573,7 @@
 
 	if (!cli_session_request(cli, &calling, &called)) {
 		char *p;
-		DEBUG(1,("session request to %s failed (%s)\n",
+		DEBUG(1,("session request to %s failed (%s)\n", 
 			 called.name, cli_errstr(cli)));
 		if ((p=strchr(called.name, '.')) && !is_ipaddress(called.name)) {
 			*p = 0;
@@ -1667,11 +1593,6 @@
 	else if (flags & CLI_FULL_CONNECTION_USE_KERBEROS)
 		cli->use_kerberos = True;
 
-	if ((flags & CLI_FULL_CONNECTION_FALLBACK_AFTER_KERBEROS) &&
-	     cli->use_kerberos) {
-		cli->fallback_after_kerberos = true;
-	}
-
 	if (!cli_negprot(cli)) {
 		DEBUG(1,("failed negprot\n"));
 		nt_status = cli_nt_error(cli);
@@ -1698,18 +1619,18 @@
    @param user Username, unix string
    @param domain User's domain
    @param password User's password, unencrypted unix string.
-   @param retry bool. Did this connection fail with a retryable error ?
+   @param retry BOOL. Did this connection fail with a retryable error ?
 */
 
 NTSTATUS cli_full_connection(struct cli_state **output_cli, 
 			     const char *my_name, 
 			     const char *dest_host, 
-			     struct sockaddr_storage *dest_ss, int port,
+			     struct in_addr *dest_ip, int port,
 			     const char *service, const char *service_type,
 			     const char *user, const char *domain, 
 			     const char *password, int flags,
 			     int signing_state,
-			     bool *retry) 
+			     BOOL *retry) 
 {
 	NTSTATUS nt_status;
 	struct cli_state *cli = NULL;
@@ -1721,10 +1642,9 @@
 		password = "";
 	}
 
-	nt_status = cli_start_connection(&cli, my_name, dest_host,
-					 dest_ss, port, signing_state,
-					 flags, retry);
-
+	nt_status = cli_start_connection(&cli, my_name, dest_host, 
+					 dest_ip, port, signing_state, flags, retry);
+	
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		return nt_status;
 	}
@@ -1748,7 +1668,7 @@
 			return nt_status;
 		}
 	}
-
+	
 	if (service) {
 		if (!cli_send_tconX(cli, service, service_type, password, pw_len)) {
 			nt_status = cli_nt_error(cli);
@@ -1771,8 +1691,8 @@
  Attempt a NetBIOS session request, falling back to *SMBSERVER if needed.
 ****************************************************************************/
 
-bool attempt_netbios_session_request(struct cli_state **ppcli, const char *srchost, const char *desthost,
-                                     struct sockaddr_storage *pdest_ss)
+BOOL attempt_netbios_session_request(struct cli_state **ppcli, const char *srchost, const char *desthost,
+                                     struct in_addr *pdest_ip)
 {
 	struct nmb_name calling, called;
 
@@ -1820,7 +1740,7 @@
 			return False;
 		}
 
-		status = cli_connect(*ppcli, desthost, pdest_ss);
+		status = cli_connect(*ppcli, desthost, pdest_ip);
 		if (!NT_STATUS_IS_OK(status) ||
 				!cli_session_request(*ppcli, &calling, &smbservername)) {
 			DEBUG(0,("attempt_netbios_session_request: %s rejected the session for \
@@ -1832,6 +1752,10 @@
 	return True;
 }
 
+
+
+
+
 /****************************************************************************
  Send an old style tcon.
 ****************************************************************************/
@@ -1842,15 +1766,15 @@
 	char *p;
 
 	if (!lp_client_plaintext_auth() && (*pass)) {
-		DEBUG(1, ("Server requested plaintext password but 'client "
-			  "plaintext auth' is disabled\n"));
+		DEBUG(1, ("Server requested plaintext password but 'client use plaintext auth'"
+			  " is disabled\n"));
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
 	memset(cli->outbuf,'\0',smb_size);
 	memset(cli->inbuf,'\0',smb_size);
 
-	cli_set_message(cli->outbuf, 0, 0, True);
+	set_message(cli->outbuf, 0, 0, True);
 	SCVAL(cli->outbuf,smb_com,SMBtcon);
 	cli_setup_packet(cli);
 
@@ -1878,33 +1802,27 @@
 
 /* Return a cli_state pointing at the IPC$ share for the given server */
 
-struct cli_state *get_ipc_connect(char *server,
-				struct sockaddr_storage *server_ss,
-				const struct user_auth_info *user_info)
+struct cli_state *get_ipc_connect(char *server, struct in_addr *server_ip,
+                                         struct user_auth_info *user_info)
 {
         struct cli_state *cli;
+        pstring myname;
 	NTSTATUS nt_status;
-	uint32_t flags = CLI_FULL_CONNECTION_ANONYMOUS_FALLBACK;
 
-	if (user_info->use_kerberos) {
-		flags |= CLI_FULL_CONNECTION_USE_KERBEROS;
-	}
+        get_myname(myname);
+	
+	nt_status = cli_full_connection(&cli, myname, server, server_ip, 0, "IPC$", "IPC", 
+					user_info->username, lp_workgroup(), user_info->password, 
+					CLI_FULL_CONNECTION_ANONYMOUS_FALLBACK, Undefined, NULL);
 
-	nt_status = cli_full_connection(&cli, NULL, server, server_ss, 0, "IPC$", "IPC", 
-					user_info->username ? user_info->username : "",
-					lp_workgroup(),
-					user_info->password ? user_info->password : "",
-					flags,
-					Undefined, NULL);
-
 	if (NT_STATUS_IS_OK(nt_status)) {
 		return cli;
 	} else if (is_ipaddress(server)) {
 	    /* windows 9* needs a correct NMB name for connections */
 	    fstring remote_name;
 
-	    if (name_status_find("*", 0, 0, server_ss, remote_name)) {
-		cli = get_ipc_connect(remote_name, server_ss, user_info);
+	    if (name_status_find("*", 0, 0, *server_ip, remote_name)) {
+		cli = get_ipc_connect(remote_name, server_ip, user_info);
 		if (cli)
 		    return cli;
 	    }
@@ -1924,21 +1842,14 @@
  * entire network browse list)
  */
 
-struct cli_state *get_ipc_connect_master_ip(TALLOC_CTX *ctx,
-				struct ip_service *mb_ip,
-				const struct user_auth_info *user_info,
-				char **pp_workgroup_out)
+struct cli_state *get_ipc_connect_master_ip(struct ip_service * mb_ip, pstring workgroup, struct user_auth_info *user_info)
 {
-	char addr[INET6_ADDRSTRLEN];
-        fstring name;
+        static fstring name;
 	struct cli_state *cli;
-	struct sockaddr_storage server_ss;
+	struct in_addr server_ip; 
 
-	*pp_workgroup_out = NULL;
-
-	print_sockaddr(addr, sizeof(addr), &mb_ip->ss);
         DEBUG(99, ("Looking up name of master browser %s\n",
-                   addr));
+                   inet_ntoa(mb_ip->ip)));
 
         /*
          * Do a name status query to find out the name of the master browser.
@@ -1951,27 +1862,28 @@
          * the original wildcard query as the first choice and fall back to
          * MSBROWSE if the wildcard query fails.
          */
-        if (!name_status_find("*", 0, 0x1d, &mb_ip->ss, name) &&
-            !name_status_find(MSBROWSE, 1, 0x1d, &mb_ip->ss, name)) {
+        if (!name_status_find("*", 0, 0x1d, mb_ip->ip, name) &&
+            !name_status_find(MSBROWSE, 1, 0x1d, mb_ip->ip, name)) {
 
                 DEBUG(99, ("Could not retrieve name status for %s\n",
-                           addr));
+                           inet_ntoa(mb_ip->ip)));
                 return NULL;
         }
 
-        if (!find_master_ip(name, &server_ss)) {
+        if (!find_master_ip(name, &server_ip)) {
                 DEBUG(99, ("Could not find master ip for %s\n", name));
                 return NULL;
         }
 
-	*pp_workgroup_out = talloc_strdup(ctx, name);
+                pstrcpy(workgroup, name);
 
-	DEBUG(4, ("found master browser %s, %s\n", name, addr));
+                DEBUG(4, ("found master browser %s, %s\n", 
+                  name, inet_ntoa(mb_ip->ip)));
 
-	print_sockaddr(addr, sizeof(addr), &server_ss);
-	cli = get_ipc_connect(addr, &server_ss, user_info);
+		cli = get_ipc_connect(inet_ntoa(server_ip), &server_ip, user_info);
 
-	return cli;
+		return cli;
+    
 }
 
 /*
@@ -1979,35 +1891,27 @@
  * connect to it.
  */
 
-struct cli_state *get_ipc_connect_master_ip_bcast(TALLOC_CTX *ctx,
-					const struct user_auth_info *user_info,
-					char **pp_workgroup_out)
+struct cli_state *get_ipc_connect_master_ip_bcast(pstring workgroup, struct user_auth_info *user_info)
 {
 	struct ip_service *ip_list;
 	struct cli_state *cli;
 	int i, count;
 
-	*pp_workgroup_out = NULL;
-
         DEBUG(99, ("Do broadcast lookup for workgroups on local network\n"));
 
-        /* Go looking for workgroups by broadcasting on the local network */
+        /* Go looking for workgroups by broadcasting on the local network */ 
 
-        if (!NT_STATUS_IS_OK(name_resolve_bcast(MSBROWSE, 1, &ip_list,
-						&count))) {
+        if (!name_resolve_bcast(MSBROWSE, 1, &ip_list, &count)) {
                 DEBUG(99, ("No master browsers responded\n"));
                 return False;
         }
 
 	for (i = 0; i < count; i++) {
-		char addr[INET6_ADDRSTRLEN];
-		print_sockaddr(addr, sizeof(addr), &ip_list[i].ss);
-		DEBUG(99, ("Found master browser %s\n", addr));
+            DEBUG(99, ("Found master browser %s\n", inet_ntoa(ip_list[i].ip)));
 
-		cli = get_ipc_connect_master_ip(ctx, &ip_list[i],
-				user_info, pp_workgroup_out);
-		if (cli)
-			return(cli);
+            cli = get_ipc_connect_master_ip(&ip_list[i], workgroup, user_info);
+            if (cli)
+                    return(cli);
 	}
 
 	return NULL;

Modified: branches/samba/upstream/source/libsmb/clidfs.c
===================================================================
--- branches/samba/upstream/source/libsmb/clidfs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/clidfs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,22 +1,23 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    client connect/disconnect routines
    Copyright (C) Andrew Tridgell                  1994-1998
    Copyright (C) Gerald (Jerry) Carter            2004
    Copyright (C) Jeremy Allison                   2007
-
+      
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -35,150 +36,83 @@
 struct client_connection {
 	struct client_connection *prev, *next;
 	struct cli_state *cli;
-	char *mount;
+	pstring mount;
 };
 
 /* global state....globals reek! */
+
+static pstring username;
+static pstring password;
+static BOOL use_kerberos;
+static BOOL got_pass;
+static int signing_state;
 int max_protocol = PROTOCOL_NT1;
 
-static struct cm_cred_struct {
-	char *username;
-	char *password;
-	bool got_pass;
-	bool use_kerberos;
-	bool fallback_after_kerberos;
-	int signing_state;
-} cm_creds;
-
-static void cm_set_password(const char *newpass);
-
 static int port;
 static int name_type = 0x20;
-static bool have_ip;
-static struct sockaddr_storage dest_ss;
+static BOOL have_ip;
+static struct in_addr dest_ip;
 
 static struct client_connection *connections;
 
-static bool cli_check_msdfs_proxy(TALLOC_CTX *ctx,
-				struct cli_state *cli,
-				const char *sharename,
-				char **pp_newserver,
-				char **pp_newshare,
-				bool force_encrypt,
-				const char *username,
-				const char *password,
-				const char *domain);
-
 /********************************************************************
- Ensure a connection is encrypted.
-********************************************************************/
-
-NTSTATUS cli_cm_force_encryption(struct cli_state *c,
-			const char *username,
-			const char *password,
-			const char *domain,
-			const char *sharename)
-{
-	NTSTATUS status = cli_force_encryption(c,
-					username,
-					password,
-					domain);
-
-	if (NT_STATUS_EQUAL(status,NT_STATUS_NOT_SUPPORTED)) {
-		d_printf("Encryption required and "
-			"server that doesn't support "
-			"UNIX extensions - failing connect\n");
-	} else if (NT_STATUS_EQUAL(status,NT_STATUS_UNKNOWN_REVISION)) {
-		d_printf("Encryption required and "
-			"can't get UNIX CIFS extensions "
-			"version from server.\n");
-	} else if (NT_STATUS_EQUAL(status,NT_STATUS_UNSUPPORTED_COMPRESSION)) {
-		d_printf("Encryption required and "
-			"share %s doesn't support "
-			"encryption.\n", sharename);
-	} else if (!NT_STATUS_IS_OK(status)) {
-		d_printf("Encryption required and "
-			"setup failed with error %s.\n",
-			nt_errstr(status));
-	}
-
-	return status;
-}
-	
-/********************************************************************
  Return a connection to a server.
 ********************************************************************/
 
-static struct cli_state *do_connect(TALLOC_CTX *ctx,
-					const char *server,
-					const char *share,
-					bool show_sessetup,
-					bool force_encrypt)
+static struct cli_state *do_connect( const char *server, const char *share,
+                                     BOOL show_sessetup )
 {
 	struct cli_state *c = NULL;
 	struct nmb_name called, calling;
 	const char *server_n;
-	struct sockaddr_storage ss;
-	char *servicename;
+	struct in_addr ip;
+	pstring servicename;
 	char *sharename;
-	char *newserver, *newshare;
-	const char *username;
-	const char *password;
+	fstring newserver, newshare;
 	NTSTATUS status;
-
+	
 	/* make a copy so we don't modify the global string 'service' */
-	servicename = talloc_strdup(ctx,share);
-	if (!servicename) {
-		return NULL;
-	}
+	pstrcpy(servicename, share);
 	sharename = servicename;
 	if (*sharename == '\\') {
 		server = sharename+2;
 		sharename = strchr_m(server,'\\');
-		if (!sharename) {
-			return NULL;
-		}
+		if (!sharename) return NULL;
 		*sharename = 0;
 		sharename++;
 	}
 
 	server_n = server;
+	
+	zero_ip(&ip);
 
-	zero_addr(&ss);
-
 	make_nmb_name(&calling, global_myname(), 0x0);
 	make_nmb_name(&called , server, name_type);
 
  again:
-	zero_addr(&ss);
-	if (have_ip)
-		ss = dest_ss;
+	zero_ip(&ip);
+	if (have_ip) 
+		ip = dest_ip;
 
 	/* have to open a new connection */
 	if (!(c=cli_initialise()) || (cli_set_port(c, port) != port)) {
 		d_printf("Connection to %s failed\n", server_n);
-		if (c) {
-			cli_shutdown(c);
-		}
 		return NULL;
 	}
-	status = cli_connect(c, server_n, &ss);
+	status = cli_connect(c, server_n, &ip);
 	if (!NT_STATUS_IS_OK(status)) {
-		d_printf("Connection to %s failed (Error %s)\n",
-				server_n,
-				nt_errstr(status));
-		cli_shutdown(c);
+		d_printf("Connection to %s failed (Error %s)\n", server_n, nt_errstr(status));
 		return NULL;
 	}
 
 	c->protocol = max_protocol;
-	c->use_kerberos = cm_creds.use_kerberos;
-	c->fallback_after_kerberos = cm_creds.fallback_after_kerberos;
-	cli_setup_signing_state(c, cm_creds.signing_state);
+	c->use_kerberos = use_kerberos;
+	cli_setup_signing_state(c, signing_state);
+		
 
 	if (!cli_session_request(c, &calling, &called)) {
 		char *p;
-		d_printf("session request to %s failed (%s)\n",
+		d_printf("session request to %s failed (%s)\n", 
 			 called.name, cli_errstr(c));
 		cli_shutdown(c);
 		c = NULL;
@@ -201,34 +135,24 @@
 		return NULL;
 	}
 
-	if (!cm_creds.got_pass && !cm_creds.use_kerberos) {
-		char *label = NULL;
-		char *pass;
-		label = talloc_asprintf(ctx, "Enter %s's password: ",
-			cm_creds.username);
-		pass = getpass(label);
+	if (!got_pass) {
+		char *pass = getpass("Password: ");
 		if (pass) {
-			cm_set_password(pass);
+			pstrcpy(password, pass);
+			got_pass = 1;
 		}
-		TALLOC_FREE(label);
 	}
 
-	username = cm_creds.username ? cm_creds.username : "";
-	password = cm_creds.password ? cm_creds.password : "";
-
-	if (!NT_STATUS_IS_OK(cli_session_setup(c, username,
+	if (!NT_STATUS_IS_OK(cli_session_setup(c, username, 
 					       password, strlen(password),
 					       password, strlen(password),
 					       lp_workgroup()))) {
-		/* If a password was not supplied then
-		 * try again with a null username. */
-		if (password[0] || !username[0] || cm_creds.use_kerberos ||
-		    !NT_STATUS_IS_OK(cli_session_setup(c, "",
-				    		"", 0,
-						"", 0,
-					       lp_workgroup()))) {
+		/* if a password was not supplied then try again with a null username */
+		if (password[0] || !username[0] || use_kerberos ||
+		    !NT_STATUS_IS_OK(cli_session_setup(c, "", "", 0, "", 0,
+						       lp_workgroup()))) { 
 			d_printf("session setup failed: %s\n", cli_errstr(c));
-			if (NT_STATUS_V(cli_nt_error(c)) ==
+			if (NT_STATUS_V(cli_nt_error(c)) == 
 			    NT_STATUS_V(NT_STATUS_MORE_PROCESSING_REQUIRED))
 				d_printf("did you forget to run kinit?\n");
 			cli_shutdown(c);
@@ -241,98 +165,71 @@
 		if (*c->server_domain) {
 			DEBUG(0,("Domain=[%s] OS=[%s] Server=[%s]\n",
 				c->server_domain,c->server_os,c->server_type));
-		} else if (*c->server_os || *c->server_type) {
+		} else if (*c->server_os || *c->server_type){
 			DEBUG(0,("OS=[%s] Server=[%s]\n",
 				 c->server_os,c->server_type));
-		}
+		}		
 	}
 	DEBUG(4,(" session setup ok\n"));
 
 	/* here's the fun part....to support 'msdfs proxy' shares
-	   (on Samba or windows) we have to issues a TRANS_GET_DFS_REFERRAL
+	   (on Samba or windows) we have to issues a TRANS_GET_DFS_REFERRAL 
 	   here before trying to connect to the original share.
 	   check_dfs_proxy() will fail if it is a normal share. */
 
-	if ((c->capabilities & CAP_DFS) &&
-			cli_check_msdfs_proxy(ctx, c, sharename,
-				&newserver, &newshare,
-				force_encrypt,
-				username,
-				password,
-				lp_workgroup())) {
+	if ( (c->capabilities & CAP_DFS) && cli_check_msdfs_proxy( c, sharename, newserver, newshare ) ) {
 		cli_shutdown(c);
-		return do_connect(ctx, newserver,
-				newshare, false, force_encrypt);
+		return do_connect( newserver, newshare, False );
 	}
 
 	/* must be a normal share */
 
-	if (!cli_send_tconX(c, sharename, "?????",
-				password, strlen(password)+1)) {
+	if (!cli_send_tconX(c, sharename, "?????", password, strlen(password)+1)) {
 		d_printf("tree connect failed: %s\n", cli_errstr(c));
 		cli_shutdown(c);
 		return NULL;
 	}
 
-	if (force_encrypt) {
-		status = cli_cm_force_encryption(c,
-					username,
-					password,
-					lp_workgroup(),
-					sharename);
-		if (!NT_STATUS_IS_OK(status)) {
-			cli_shutdown(c);
-			return NULL;
-		}
-	}
-
 	DEBUG(4,(" tconx ok\n"));
+
 	return c;
 }
 
 /****************************************************************************
 ****************************************************************************/
 
-static void cli_cm_set_mntpoint(struct cli_state *c, const char *mnt)
+static void cli_cm_set_mntpoint( struct cli_state *c, const char *mnt )
 {
 	struct client_connection *p;
 	int i;
 
-	for (p=connections,i=0; p; p=p->next,i++) {
-		if (strequal(p->cli->desthost, c->desthost) &&
-				strequal(p->cli->share, c->share)) {
+	for ( p=connections,i=0; p; p=p->next,i++ ) {
+		if ( strequal(p->cli->desthost, c->desthost) && strequal(p->cli->share, c->share) )
 			break;
-		}
 	}
-
-	if (p) {
-		char *name = clean_name(NULL, p->mount);
-		if (!name) {
-			return;
-		}
-		p->mount = talloc_strdup(p, name);
-		TALLOC_FREE(name);
+	
+	if ( p ) {
+		pstrcpy( p->mount, mnt );
+		clean_name(p->mount);
 	}
 }
 
 /****************************************************************************
 ****************************************************************************/
 
-const char *cli_cm_get_mntpoint(struct cli_state *c)
+const char *cli_cm_get_mntpoint( struct cli_state *c )
 {
 	struct client_connection *p;
 	int i;
 
-	for (p=connections,i=0; p; p=p->next,i++) {
-		if (strequal(p->cli->desthost, c->desthost) &&
-				strequal(p->cli->share, c->share)) {
+	for ( p=connections,i=0; p; p=p->next,i++ ) {
+		if ( strequal(p->cli->desthost, c->desthost) && strequal(p->cli->share, c->share) )
 			break;
-		}
 	}
-
-	if (p) {
+	
+	if ( p )
 		return p->mount;
-	}
+		
 	return NULL;
 }
 
@@ -340,84 +237,62 @@
  Add a new connection to the list
 ********************************************************************/
 
-static struct cli_state *cli_cm_connect(TALLOC_CTX *ctx,
-					struct cli_state *referring_cli,
-	 				const char *server,
+static struct cli_state *cli_cm_connect( const char *server,
 					const char *share,
-					bool show_hdr,
-					bool force_encrypt)
+					BOOL show_hdr)
 {
 	struct client_connection *node;
+	
+	node = SMB_XMALLOC_P( struct client_connection );
+	
+	node->cli = do_connect( server, share, show_hdr );
 
-	/* NB This must be the null context here... JRA. */
-	node = TALLOC_ZERO_ARRAY(NULL, struct client_connection, 1);
-	if (!node) {
-		return NULL;
-	}
-
-	node->cli = do_connect(ctx, server, share, show_hdr, force_encrypt);
-
 	if ( !node->cli ) {
-		TALLOC_FREE( node );
+		SAFE_FREE( node );
 		return NULL;
 	}
 
 	DLIST_ADD( connections, node );
 
-	cli_cm_set_mntpoint(node->cli, "");
+	cli_cm_set_mntpoint( node->cli, "" );
 
-	if (referring_cli && referring_cli->posix_capabilities) {
-		uint16 major, minor;
-		uint32 caplow, caphigh;
-		if (cli_unix_extensions_version(node->cli, &major,
-					&minor, &caplow, &caphigh)) {
-			cli_set_unix_extensions_capabilities(node->cli,
-					major, minor,
-					caplow, caphigh);
-		}
-	}
-
 	return node->cli;
+
 }
 
 /********************************************************************
  Return a connection to a server.
 ********************************************************************/
 
-static struct cli_state *cli_cm_find(const char *server, const char *share)
+static struct cli_state *cli_cm_find( const char *server, const char *share )
 {
 	struct client_connection *p;
 
-	for (p=connections; p; p=p->next) {
-		if ( strequal(server, p->cli->desthost) &&
-				strequal(share,p->cli->share)) {
+	for ( p=connections; p; p=p->next ) {
+		if ( strequal(server, p->cli->desthost) && strequal(share,p->cli->share) )
 			return p->cli;
-		}
 	}
 
 	return NULL;
 }
 
 /****************************************************************************
- Open a client connection to a \\server\share.  Set's the current *cli
+ open a client connection to a \\server\share.  Set's the current *cli 
  global variable as a side-effect (but only if the connection is successful).
 ****************************************************************************/
 
-struct cli_state *cli_cm_open(TALLOC_CTX *ctx,
-				struct cli_state *referring_cli,
-				const char *server,
+struct cli_state *cli_cm_open(const char *server,
 				const char *share,
-				bool show_hdr,
-				bool force_encrypt)
+				BOOL show_hdr)
 {
 	struct cli_state *c;
-
+	
 	/* try to reuse an existing connection */
 
-	c = cli_cm_find(server, share);
-	if (!c) {
-		c = cli_cm_connect(ctx, referring_cli,
-				server, share, show_hdr, force_encrypt);
+	c = cli_cm_find( server, share );
+	
+	if ( !c ) {
+		c = cli_cm_connect(server, share, show_hdr);
 	}
 
 	return c;
@@ -426,16 +301,17 @@
 /****************************************************************************
 ****************************************************************************/
 
-void cli_cm_shutdown(void)
+void cli_cm_shutdown( void )
 {
+
 	struct client_connection *p, *x;
 
-	for (p=connections; p;) {
-		cli_shutdown(p->cli);
+	for ( p=connections; p; ) {
+		cli_shutdown( p->cli );
 		x = p;
 		p = p->next;
 
-		TALLOC_FREE(x);
+		SAFE_FREE( x );
 	}
 
 	connections = NULL;
@@ -451,7 +327,7 @@
 	int i;
 
 	for ( p=connections,i=0; p; p=p->next,i++ ) {
-		d_printf("%d:\tserver=%s, share=%s\n",
+		d_printf("%d:\tserver=%s, share=%s\n", 
 			i, p->cli->desthost, p->cli->share );
 	}
 }
@@ -459,44 +335,31 @@
 /****************************************************************************
 ****************************************************************************/
 
-static void cm_set_password(const char *newpass)
+void cli_cm_set_credentials( struct user_auth_info *user )
 {
-	SAFE_FREE(cm_creds.password);
-	cm_creds.password = SMB_STRDUP(newpass);
-	if (cm_creds.password) {
-		cm_creds.got_pass = true;
+	pstrcpy( username, user->username );
+	
+	if ( user->got_pass ) {
+		pstrcpy( password, user->password );
+		got_pass = True;
 	}
+	
+	use_kerberos = user->use_kerberos;	
+	signing_state = user->signing_state;
 }
 
 /****************************************************************************
 ****************************************************************************/
 
-void cli_cm_set_credentials(void)
+void cli_cm_set_port( int port_number )
 {
-	SAFE_FREE(cm_creds.username);
-	cm_creds.username = SMB_STRDUP(get_cmdline_auth_info_username());
-
-	if (get_cmdline_auth_info_got_pass()) {
-		cm_set_password(get_cmdline_auth_info_password());
-	}
-
-	cm_creds.use_kerberos = get_cmdline_auth_info_use_kerberos();
-	cm_creds.fallback_after_kerberos = false;
-	cm_creds.signing_state = get_cmdline_auth_info_signing_state();
-}
-
-/****************************************************************************
-****************************************************************************/
-
-void cli_cm_set_port(int port_number)
-{
 	port = port_number;
 }
 
 /****************************************************************************
 ****************************************************************************/
 
-void cli_cm_set_dest_name_type(int type)
+void cli_cm_set_dest_name_type( int type )
 {
 	name_type = type;
 }
@@ -504,79 +367,23 @@
 /****************************************************************************
 ****************************************************************************/
 
-void cli_cm_set_signing_state(int state)
+void cli_cm_set_dest_ip(struct in_addr ip )
 {
-	cm_creds.signing_state = state;
+	dest_ip = ip;
+	have_ip = True;
 }
 
-/****************************************************************************
-****************************************************************************/
-
-void cli_cm_set_username(const char *username)
-{
-	SAFE_FREE(cm_creds.username);
-	cm_creds.username = SMB_STRDUP(username);
-}
-
-/****************************************************************************
-****************************************************************************/
-
-void cli_cm_set_password(const char *newpass)
-{
-	SAFE_FREE(cm_creds.password);
-	cm_creds.password = SMB_STRDUP(newpass);
-	if (cm_creds.password) {
-		cm_creds.got_pass = true;
-	}
-}
-
-/****************************************************************************
-****************************************************************************/
-
-void cli_cm_set_use_kerberos(void)
-{
-	cm_creds.use_kerberos = true;
-}
-
-/****************************************************************************
-****************************************************************************/
-
-void cli_cm_set_fallback_after_kerberos(void)
-{
-	cm_creds.fallback_after_kerberos = true;
-}
-
-/****************************************************************************
-****************************************************************************/
-
-void cli_cm_set_dest_ss(struct sockaddr_storage *pss)
-{
-	dest_ss = *pss;
-	have_ip = true;
-}
-
 /**********************************************************************
  split a dfs path into the server, share name, and extrapath components
 **********************************************************************/
 
-static void split_dfs_path(TALLOC_CTX *ctx,
-				const char *nodepath,
-				char **pp_server,
-				char **pp_share,
-				char **pp_extrapath)
+static void split_dfs_path( const char *nodepath, fstring server, fstring share, pstring extrapath )
 {
 	char *p, *q;
-	char *path;
+	pstring path;
 
-	*pp_server = NULL;
-	*pp_share = NULL;
-	*pp_extrapath = NULL;
+	pstrcpy( path, nodepath );
 
-	path = talloc_strdup(ctx, nodepath);
-	if (!path) {
-		return;
-	}
-
 	if ( path[0] != '\\' ) {
 		return;
 	}
@@ -594,36 +401,32 @@
 	if (q != NULL) {
 		*q = '\0';
 		q++;
-		*pp_extrapath = talloc_strdup(ctx, q);
+		pstrcpy( extrapath, q );
 	} else {
-		*pp_extrapath = talloc_strdup(ctx, "");
+		pstrcpy( extrapath, '\0' );
 	}
-
-	*pp_share = talloc_strdup(ctx, p);
-	*pp_server = talloc_strdup(ctx, &path[1]);
+	
+	fstrcpy( share, p );
+	fstrcpy( server, &path[1] );
 }
 
 /****************************************************************************
  Return the original path truncated at the directory component before
- the first wildcard character. Trust the caller to provide a NULL
+ the first wildcard character. Trust the caller to provide a NULL 
  terminated string
 ****************************************************************************/
 
-static char *clean_path(TALLOC_CTX *ctx, const char *path)
+static void clean_path(const char *path, pstring path_out)
 {
 	size_t len;
 	char *p1, *p2, *p;
-	char *path_out;
-
+		
 	/* No absolute paths. */
 	while (IS_DIRECTORY_SEP(*path)) {
 		path++;
 	}
 
-	path_out = talloc_strdup(ctx, path);
-	if (!path_out) {
-		return NULL;
-	}
+	pstrcpy(path_out, path);
 
 	p1 = strchr_m(path_out, '*');
 	p2 = strchr_m(path_out, '?');
@@ -653,53 +456,48 @@
 	if ( (len > 0) && IS_DIRECTORY_SEP(path_out[len-1])) {
 		path_out[len-1] = '\0';
 	}
-
-	return path_out;
 }
 
 /****************************************************************************
 ****************************************************************************/
 
-static char *cli_dfs_make_full_path(TALLOC_CTX *ctx,
-					struct cli_state *cli,
-					const char *dir)
+static void cli_dfs_make_full_path( struct cli_state *cli,
+					const char *dir,
+					pstring path_out)
 {
 	/* Ensure the extrapath doesn't start with a separator. */
 	while (IS_DIRECTORY_SEP(*dir)) {
 		dir++;
 	}
 
-	return talloc_asprintf(ctx, "\\%s\\%s\\%s",
-			cli->desthost, cli->share, dir);
+	pstr_sprintf( path_out, "\\%s\\%s\\%s", cli->desthost, cli->share, dir);
 }
 
 /********************************************************************
  check for dfs referral
 ********************************************************************/
 
-static bool cli_dfs_check_error( struct cli_state *cli, NTSTATUS status )
+static BOOL cli_dfs_check_error( struct cli_state *cli, NTSTATUS status )
 {
 	uint32 flgs2 = SVAL(cli->inbuf,smb_flg2);
 
 	/* only deal with DS when we negotiated NT_STATUS codes and UNICODE */
 
-	if (!((flgs2&FLAGS2_32_BIT_ERROR_CODES) &&
-				(flgs2&FLAGS2_UNICODE_STRINGS)))
-		return false;
+	if ( !( (flgs2&FLAGS2_32_BIT_ERROR_CODES) && (flgs2&FLAGS2_UNICODE_STRINGS) ) )
+		return False;
 
-	if (NT_STATUS_EQUAL(status, NT_STATUS(IVAL(cli->inbuf,smb_rcls))))
-		return true;
+	if ( NT_STATUS_EQUAL( status, NT_STATUS(IVAL(cli->inbuf,smb_rcls)) ) )
+		return True;
 
-	return false;
+	return False;
 }
 
 /********************************************************************
- Get the dfs referral link.
+ get the dfs referral link
 ********************************************************************/
 
-bool cli_dfs_get_referral(TALLOC_CTX *ctx,
-			struct cli_state *cli,
-			const char *path,
+BOOL cli_dfs_get_referral( struct cli_state *cli,
+			const char *path, 
 			CLIENT_DFS_REFERRAL**refs,
 			size_t *num_refs,
 			uint16 *consumed)
@@ -707,419 +505,303 @@
 	unsigned int data_len = 0;
 	unsigned int param_len = 0;
 	uint16 setup = TRANSACT2_GET_DFS_REFERRAL;
-	char *param;
+	char param[sizeof(pstring)+2];
+	pstring data;
 	char *rparam=NULL, *rdata=NULL;
 	char *p;
-	char *endp;
 	size_t pathlen = 2*(strlen(path)+1);
 	uint16 num_referrals;
 	CLIENT_DFS_REFERRAL *referrals = NULL;
-	bool ret = false;
-
-	*num_refs = 0;
-	*refs = NULL;
-
-	param = SMB_MALLOC_ARRAY(char, 2+pathlen+2);
-	if (!param) {
-		return false;
-	}
+	
+	memset(param, 0, sizeof(param));
 	SSVAL(param, 0, 0x03);	/* max referral level */
 	p = &param[2];
 
-	p += clistr_push(cli, p, path, pathlen, STR_TERMINATE);
+	p += clistr_push(cli, p, path, MIN(pathlen, sizeof(param)-2), STR_TERMINATE);
 	param_len = PTR_DIFF(p, param);
 
 	if (!cli_send_trans(cli, SMBtrans2,
-			NULL,                        /* name */
-			-1, 0,                          /* fid, flags */
-			&setup, 1, 0,                   /* setup, length, max */
-			param, param_len, 2,            /* param, length, max */
-			NULL, 0, cli->max_xmit /* data, length, max */
-			)) {
-		SAFE_FREE(param);
-		return false;
+		NULL,                        /* name */
+		-1, 0,                          /* fid, flags */
+		&setup, 1, 0,                   /* setup, length, max */
+		param, param_len, 2,            /* param, length, max */
+		(char *)&data,  data_len, cli->max_xmit /* data, length, max */
+		)) {
+			return False;
 	}
 
-	SAFE_FREE(param);
-
 	if (!cli_receive_trans(cli, SMBtrans2,
 		&rparam, &param_len,
 		&rdata, &data_len)) {
-			return false;
+			return False;
 	}
-
-	if (data_len < 4) {
-		goto out;
-	}
-
-	endp = rdata + data_len;
-
-	*consumed     = SVAL(rdata, 0);
-	num_referrals = SVAL(rdata, 2);
-
-	if (num_referrals != 0) {
+	
+	*consumed     = SVAL( rdata, 0 );
+	num_referrals = SVAL( rdata, 2 );
+	
+	if ( num_referrals != 0 ) {
 		uint16 ref_version;
 		uint16 ref_size;
 		int i;
 		uint16 node_offset;
 
-		referrals = TALLOC_ARRAY(ctx, CLIENT_DFS_REFERRAL,
-				num_referrals);
+		referrals = SMB_XMALLOC_ARRAY( CLIENT_DFS_REFERRAL, num_referrals );
 
-		if (!referrals) {
-			goto out;
-		}
 		/* start at the referrals array */
-
+	
 		p = rdata+8;
-		for (i=0; i<num_referrals && p < endp; i++) {
-			if (p + 18 > endp) {
-				goto out;
-			}
-			ref_version = SVAL(p, 0);
-			ref_size    = SVAL(p, 2);
-			node_offset = SVAL(p, 16);
-
-			if (ref_version != 3) {
+		for ( i=0; i<num_referrals; i++ ) {
+			ref_version = SVAL( p, 0 );
+			ref_size    = SVAL( p, 2 );
+			node_offset = SVAL( p, 16 );
+			
+			if ( ref_version != 3 ) {
 				p += ref_size;
 				continue;
 			}
+			
+			referrals[i].proximity = SVAL( p, 8 );
+			referrals[i].ttl       = SVAL( p, 10 );
 
-			referrals[i].proximity = SVAL(p, 8);
-			referrals[i].ttl       = SVAL(p, 10);
+			clistr_pull( cli, referrals[i].dfspath, p+node_offset, 
+				sizeof(referrals[i].dfspath), -1, STR_TERMINATE|STR_UNICODE );
 
-			if (p + node_offset > endp) {
-				goto out;
-			}
-			clistr_pull_talloc(ctx, cli, &referrals[i].dfspath,
-				p+node_offset, -1,
-				STR_TERMINATE|STR_UNICODE );
-
-			if (!referrals[i].dfspath) {
-				goto out;
-			}
 			p += ref_size;
 		}
-		if (i < num_referrals) {
-			goto out;
-		}
 	}
-
-	ret = true;
-
+	
 	*num_refs = num_referrals;
 	*refs = referrals;
 
-  out:
-
 	SAFE_FREE(rdata);
 	SAFE_FREE(rparam);
-	return ret;
+
+	return True;
 }
 
+
 /********************************************************************
 ********************************************************************/
 
-bool cli_resolve_path(TALLOC_CTX *ctx,
-			const char *mountpt,
+BOOL cli_resolve_path( const char *mountpt,
 			struct cli_state *rootcli,
 			const char *path,
 			struct cli_state **targetcli,
-			char **pp_targetpath)
+			pstring targetpath)
 {
 	CLIENT_DFS_REFERRAL *refs = NULL;
-	size_t num_refs = 0;
+	size_t num_refs;
 	uint16 consumed;
-	struct cli_state *cli_ipc = NULL;
-	char *dfs_path = NULL;
-	char *cleanpath = NULL;
-	char *extrapath = NULL;
+	struct cli_state *cli_ipc;
+	pstring dfs_path, cleanpath, extrapath;
 	int pathlen;
-	char *server = NULL;
-	char *share = NULL;
-	struct cli_state *newcli = NULL;
-	char *newpath = NULL;
-	char *newmount = NULL;
-	char *ppath = NULL;
+	fstring server, share;
+	struct cli_state *newcli;
+	pstring newpath;
+	pstring newmount;
+	char *ppath, *temppath = NULL;
+	
 	SMB_STRUCT_STAT sbuf;
 	uint32 attributes;
-
+	
 	if ( !rootcli || !path || !targetcli ) {
-		return false;
+		return False;
 	}
-
+		
 	/* Don't do anything if this is not a DFS root. */
 
 	if ( !rootcli->dfsroot) {
 		*targetcli = rootcli;
-		*pp_targetpath = talloc_strdup(ctx, path);
-		if (!*pp_targetpath) {
-			return false;
-		}
-		return true;
+		pstrcpy( targetpath, path );
+		return True;
 	}
 
 	*targetcli = NULL;
 
 	/* Send a trans2_query_path_info to check for a referral. */
 
-	cleanpath = clean_path(ctx, path);
-	if (!cleanpath) {
-		return false;
-	}
+	clean_path(path, cleanpath);
+	cli_dfs_make_full_path(rootcli, cleanpath, dfs_path );
 
-	dfs_path = cli_dfs_make_full_path(ctx, rootcli, cleanpath);
-	if (!dfs_path) {
-		return false;
-	}
-
-	if (cli_qpathinfo_basic( rootcli, dfs_path, &sbuf, &attributes)) {
+	if (cli_qpathinfo_basic( rootcli, dfs_path, &sbuf, &attributes ) ) {
 		/* This is an ordinary path, just return it. */
 		*targetcli = rootcli;
-		*pp_targetpath = talloc_strdup(ctx, path);
-		if (!*pp_targetpath) {
-			return false;
-		}
+		pstrcpy( targetpath, path );
 		goto done;
 	}
 
 	/* Special case where client asked for a path that does not exist */
 
-	if (cli_dfs_check_error(rootcli, NT_STATUS_OBJECT_NAME_NOT_FOUND)) {
+	if ( cli_dfs_check_error(rootcli, NT_STATUS_OBJECT_NAME_NOT_FOUND) ) {
 		*targetcli = rootcli;
-		*pp_targetpath = talloc_strdup(ctx, path);
-		if (!*pp_targetpath) {
-			return false;
-		}
+		pstrcpy( targetpath, path );
 		goto done;
 	}
 
 	/* We got an error, check for DFS referral. */
 
-	if (!cli_dfs_check_error(rootcli, NT_STATUS_PATH_NOT_COVERED)) {
-		return false;
+	if ( !cli_dfs_check_error(rootcli, NT_STATUS_PATH_NOT_COVERED))  {
+		return False;
 	}
 
 	/* Check for the referral. */
 
-	if (!(cli_ipc = cli_cm_open(ctx, rootcli,
-					rootcli->desthost,
-					"IPC$", false,
-					(rootcli->trans_enc_state != NULL)))) {
-		return false;
+	if ( !(cli_ipc = cli_cm_open( rootcli->desthost, "IPC$", False )) ) {
+		return False;
 	}
-
-	if (!cli_dfs_get_referral(ctx, cli_ipc, dfs_path, &refs,
-			&num_refs, &consumed) || !num_refs) {
-		return false;
+	
+	if ( !cli_dfs_get_referral(cli_ipc, dfs_path, &refs, &num_refs, &consumed) 
+			|| !num_refs ) {
+		return False;
 	}
-
+	
 	/* Just store the first referral for now. */
 
-	if (!refs[0].dfspath) {
-		return false;
-	}
-	split_dfs_path(ctx, refs[0].dfspath, &server, &share, &extrapath );
+	split_dfs_path( refs[0].dfspath, server, share, extrapath );
+	SAFE_FREE(refs);
 
-	if (!server || !share) {
-		return false;
-	}
-
 	/* Make sure to recreate the original string including any wildcards. */
-
-	dfs_path = cli_dfs_make_full_path(ctx, rootcli, path);
-	if (!dfs_path) {
-		return false;
-	}
-	pathlen = strlen(dfs_path)*2;
-	consumed = MIN(pathlen, consumed);
-	*pp_targetpath = talloc_strdup(ctx, &dfs_path[consumed/2]);
-	if (!*pp_targetpath) {
-		return false;
-	}
+	
+	cli_dfs_make_full_path( rootcli, path, dfs_path);
+	pathlen = strlen( dfs_path )*2;
+	consumed = MIN(pathlen, consumed );
+	pstrcpy( targetpath, &dfs_path[consumed/2] );
 	dfs_path[consumed/2] = '\0';
 
 	/*
- 	 * *pp_targetpath is now the unconsumed part of the path.
- 	 * dfs_path is now the consumed part of the path
-	 * (in \server\share\path format).
+ 	 * targetpath is now the unconsumed part of the path.
+ 	 * dfs_path is now the consumed part of the path (in \server\share\path format).
  	 */
 
 	/* Open the connection to the target server & share */
-	if ((*targetcli = cli_cm_open(ctx, rootcli,
-					server,
-					share,
-					false,
-					(rootcli->trans_enc_state != NULL))) == NULL) {
+	
+	if ( (*targetcli = cli_cm_open(server, share, False)) == NULL ) {
 		d_printf("Unable to follow dfs referral [\\%s\\%s]\n",
 			server, share );
-		return false;
+		return False;
 	}
-
-	if (extrapath && strlen(extrapath) > 0) {
-		*pp_targetpath = talloc_asprintf(ctx,
-						"%s%s",
-						extrapath,
-						*pp_targetpath);
-		if (!*pp_targetpath) {
-			return false;
-		}
+	
+	if (strlen(extrapath) > 0) {
+		string_append(&temppath, extrapath);
+		string_append(&temppath, targetpath);
+		pstrcpy( targetpath, temppath );
 	}
-
+	
 	/* parse out the consumed mount path */
 	/* trim off the \server\share\ */
 
 	ppath = dfs_path;
 
 	if (*ppath != '\\') {
-		d_printf("cli_resolve_path: "
-			"dfs_path (%s) not in correct format.\n",
+		d_printf("cli_resolve_path: dfs_path (%s) not in correct format.\n",
 			dfs_path );
-		return false;
+		return False;
 	}
 
 	ppath++; /* Now pointing at start of server name. */
-
+	
 	if ((ppath = strchr_m( dfs_path, '\\' )) == NULL) {
-		return false;
+		return False;
 	}
 
 	ppath++; /* Now pointing at start of share name. */
 
 	if ((ppath = strchr_m( ppath+1, '\\' )) == NULL) {
-		return false;
+		return False;
 	}
 
 	ppath++; /* Now pointing at path component. */
 
-	newmount = talloc_asprintf(ctx, "%s\\%s", mountpt, ppath );
-	if (!newmount) {
-		return false;
-	}
+	pstr_sprintf( newmount, "%s\\%s", mountpt, ppath );
 
-	cli_cm_set_mntpoint(*targetcli, newmount);
+	cli_cm_set_mntpoint( *targetcli, newmount );
 
-	/* Check for another dfs referral, note that we are not
+	/* Check for another dfs referral, note that we are not 
 	   checking for loops here. */
 
-	if (!strequal(*pp_targetpath, "\\") && !strequal(*pp_targetpath, "/")) {
-		if (cli_resolve_path(ctx,
-					newmount,
-					*targetcli,
-					*pp_targetpath,
-					&newcli,
-					&newpath)) {
+	if ( !strequal( targetpath, "\\" ) &&  !strequal( targetpath, "/")) {
+		if ( cli_resolve_path( newmount, *targetcli, targetpath, &newcli, newpath ) ) {
 			/*
 			 * When cli_resolve_path returns true here it's always
  			 * returning the complete path in newpath, so we're done
  			 * here.
  			 */
 			*targetcli = newcli;
-			*pp_targetpath = newpath;
-			return true;
+			pstrcpy( targetpath, newpath );
+			return True;
 		}
 	}
 
   done:
 
-	/* If returning true ensure we return a dfs root full path. */
-	if ((*targetcli)->dfsroot) {
-		dfs_path = talloc_strdup(ctx, *pp_targetpath);
-		if (!dfs_path) {
-			return false;
-		}
-		*pp_targetpath = cli_dfs_make_full_path(ctx, *targetcli, dfs_path);
+	/* If returning True ensure we return a dfs root full path. */
+	if ( (*targetcli)->dfsroot ) {
+		pstrcpy(dfs_path, targetpath );
+		cli_dfs_make_full_path( *targetcli, dfs_path, targetpath); 
 	}
 
-	return true;
+	return True;
 }
 
 /********************************************************************
 ********************************************************************/
 
-static bool cli_check_msdfs_proxy(TALLOC_CTX *ctx,
-				struct cli_state *cli,
-				const char *sharename,
-				char **pp_newserver,
-				char **pp_newshare,
-				bool force_encrypt,
-				const char *username,
-				const char *password,
-				const char *domain)
+BOOL cli_check_msdfs_proxy( struct cli_state *cli, const char *sharename,
+                            fstring newserver, fstring newshare )
 {
 	CLIENT_DFS_REFERRAL *refs = NULL;
-	size_t num_refs = 0;
+	size_t num_refs;
 	uint16 consumed;
-	char *fullpath = NULL;
-	bool res;
+	pstring fullpath;
+	BOOL res;
 	uint16 cnum;
-	char *newextrapath = NULL;
+	pstring newextrapath;
+	
+	if ( !cli || !sharename )
+		return False;
 
-	if (!cli || !sharename) {
-		return false;
-	}
-
 	cnum = cli->cnum;
 
 	/* special case.  never check for a referral on the IPC$ share */
 
-	if (strequal(sharename, "IPC$")) {
-		return false;
+	if ( strequal( sharename, "IPC$" ) ) {
+		return False;
 	}
-
+		
 	/* send a trans2_query_path_info to check for a referral */
+	
+	pstr_sprintf( fullpath, "\\%s\\%s", cli->desthost, sharename );
 
-	fullpath = talloc_asprintf(ctx, "\\%s\\%s", cli->desthost, sharename );
-	if (!fullpath) {
-		return false;
-	}
-
 	/* check for the referral */
 
 	if (!cli_send_tconX(cli, "IPC$", "IPC", NULL, 0)) {
-		return false;
+		return False;
 	}
 
-	if (force_encrypt) {
-		NTSTATUS status = cli_cm_force_encryption(cli,
-					username,
-					password,
-					lp_workgroup(),
-					"IPC$");
-		if (!NT_STATUS_IS_OK(status)) {
-			return false;
-		}
-	}
+	res = cli_dfs_get_referral(cli, fullpath, &refs, &num_refs, &consumed);
 
-	res = cli_dfs_get_referral(ctx, cli, fullpath, &refs, &num_refs, &consumed);
-
 	if (!cli_tdis(cli)) {
-		return false;
+		SAFE_FREE( refs );
+		return False;
 	}
 
 	cli->cnum = cnum;
 
-	if (!res || !num_refs) {
-		return false;
+	if (!res || !num_refs ) {
+		SAFE_FREE( refs );
+		return False;
 	}
+	
+	split_dfs_path( refs[0].dfspath, newserver, newshare, newextrapath );
 
-	if (!refs[0].dfspath) {
-		return false;
-	}
-
-	split_dfs_path(ctx, refs[0].dfspath, pp_newserver,
-			pp_newshare, &newextrapath );
-
-	if ((*pp_newserver == NULL) || (*pp_newshare == NULL)) {
-		return false;
-	}
-
 	/* check that this is not a self-referral */
 
-	if (strequal(cli->desthost, *pp_newserver) &&
-			strequal(sharename, *pp_newshare)) {
-		return false;
+	if ( strequal( cli->desthost, newserver ) && strequal( sharename, newshare ) ) {
+		SAFE_FREE( refs );
+		return False;
 	}
-
-	return true;
+	
+	SAFE_FREE( refs );
+	
+	return True;
 }

Modified: branches/samba/upstream/source/libsmb/clidgram.c
===================================================================
--- branches/samba/upstream/source/libsmb/clidgram.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/clidgram.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -25,30 +26,26 @@
  * cli_send_mailslot, send a mailslot for client code ...
  */
 
-bool cli_send_mailslot(struct messaging_context *msg_ctx,
-		       bool unique, const char *mailslot,
+BOOL cli_send_mailslot(BOOL unique, const char *mailslot,
 		       uint16 priority,
 		       char *buf, int len,
-		       const char *srcname, int src_type,
+		       const char *srcname, int src_type, 
 		       const char *dstname, int dest_type,
-		       const struct sockaddr_storage *dest_ss)
+		       struct in_addr dest_ip)
 {
 	struct packet_struct p;
 	struct dgram_packet *dgram = &p.packet.dgram;
 	char *ptr, *p2;
 	char tmp[4];
 	pid_t nmbd_pid;
-	char addr[INET6_ADDRSTRLEN];
 
 	if ((nmbd_pid = pidfile_pid("nmbd")) == 0) {
 		DEBUG(3, ("No nmbd found\n"));
 		return False;
 	}
 
-	if (dest_ss->ss_family != AF_INET) {
-		DEBUG(3, ("cli_send_mailslot: can't send to IPv6 address.\n"));
-		return false;
-	}
+	if (!message_init())
+		return False;
 
 	memset((char *)&p, '\0', sizeof(p));
 
@@ -57,7 +54,7 @@
 	 */
 
 	/* DIRECT GROUP or UNIQUE datagram. */
-	dgram->header.msg_type = unique ? 0x10 : 0x11;
+	dgram->header.msg_type = unique ? 0x10 : 0x11; 
 	dgram->header.flags.node_type = M_NODE;
 	dgram->header.flags.first = True;
 	dgram->header.flags.more = False;
@@ -66,7 +63,7 @@
 	/* source ip is filled by nmbd */
 	dgram->header.dgm_length = 0; /* Let build_dgram() handle this. */
 	dgram->header.packet_offset = 0;
-
+  
 	make_nmb_name(&dgram->source_name,srcname,src_type);
 	make_nmb_name(&dgram->dest_name,dstname,dest_type);
 
@@ -81,7 +78,7 @@
 		return False;
 	}
 
-	cli_set_message(ptr,17,strlen(mailslot) + 1 + len,True);
+	set_message(ptr,17,strlen(mailslot) + 1 + len,True);
 	memcpy(ptr,tmp,4);
 
 	SCVAL(ptr,smb_com,SMBtrans);
@@ -105,253 +102,104 @@
 	dgram->datasize = PTR_DIFF(p2,ptr+4); /* +4 for tcp length. */
 
 	p.packet_type = DGRAM_PACKET;
-	p.ip = ((const struct sockaddr_in *)dest_ss)->sin_addr;
+	p.ip = dest_ip;
 	p.timestamp = time(NULL);
 
 	DEBUG(4,("send_mailslot: Sending to mailslot %s from %s ",
 		 mailslot, nmb_namestr(&dgram->source_name)));
-	print_sockaddr(addr, sizeof(addr), dest_ss);
+	DEBUGADD(4,("to %s IP %s\n", nmb_namestr(&dgram->dest_name),
+		    inet_ntoa(dest_ip)));
 
-	DEBUGADD(4,("to %s IP %s\n", nmb_namestr(&dgram->dest_name), addr));
-
-	return NT_STATUS_IS_OK(messaging_send_buf(msg_ctx,
-						  pid_to_procid(nmbd_pid),
-						  MSG_SEND_PACKET,
-						  (uint8 *)&p, sizeof(p)));
+	return NT_STATUS_IS_OK(message_send_pid(pid_to_procid(nmbd_pid),
+						MSG_SEND_PACKET, &p, sizeof(p),
+						False));
 }
 
-static const char *mailslot_name(TALLOC_CTX *mem_ctx, struct in_addr dc_ip)
+/*
+ * cli_get_response: Get a response ...
+ */
+BOOL cli_get_response(const char *mailslot, char *buf, int bufsiz)
 {
-	return talloc_asprintf(mem_ctx, "%s%X",
-			       NBT_MAILSLOT_GETDC, dc_ip.s_addr);
-}
+	struct packet_struct *p;
 
-bool send_getdc_request(TALLOC_CTX *mem_ctx,
-			struct messaging_context *msg_ctx,
-			struct sockaddr_storage *dc_ss,
-			const char *domain_name,
-			const DOM_SID *sid,
-			uint32_t nt_version)
-{
-	struct in_addr dc_ip;
-	const char *my_acct_name = NULL;
-	const char *my_mailslot = NULL;
-	struct nbt_ntlogon_packet packet;
-	struct nbt_ntlogon_sam_logon *s;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct dom_sid my_sid;
+	p = receive_unexpected(DGRAM_PACKET, 0, mailslot);
 
-	ZERO_STRUCT(packet);
-	ZERO_STRUCT(my_sid);
+	if (p == NULL)
+		return False;
 
-	if (dc_ss->ss_family != AF_INET) {
-		return false;
-	}
+	memcpy(buf, &p->packet.dgram.data[92],
+	       MIN(bufsiz, p->packet.dgram.datasize-92));
 
-	if (sid) {
-		my_sid = *sid;
-	}
+	return True;
+}
 
-	dc_ip = ((struct sockaddr_in *)dc_ss)->sin_addr;
-	my_mailslot = mailslot_name(mem_ctx, dc_ip);
-	if (!my_mailslot) {
-		return false;
-	}
+/*
+ * cli_get_backup_list: Send a get backup list request ...
+ */
 
-	my_acct_name = talloc_asprintf(mem_ctx, "%s$", global_myname());
-	if (!my_acct_name) {
-		return false;
-	}
+static char cli_backup_list[1024];
 
-	packet.command	= NTLOGON_SAM_LOGON;
-	s		= &packet.req.logon;
-
-	s->request_count	= 0;
-	s->computer_name	= global_myname();
-	s->user_name		= my_acct_name;
-	s->mailslot_name	= my_mailslot;
-	s->acct_control		= ACB_WSTRUST;
-	s->sid			= my_sid;
-	s->nt_version		= nt_version;
-	s->lmnt_token		= 0xffff;
-	s->lm20_token		= 0xffff;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_DEBUG(nbt_ntlogon_packet, &packet);
-	}
-
-	ndr_err = ndr_push_struct_blob(&blob, mem_ctx, &packet,
-		       (ndr_push_flags_fn_t)ndr_push_nbt_ntlogon_packet);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		return false;
-	}
-
-	return cli_send_mailslot(msg_ctx,
-				 false, NBT_MAILSLOT_NTLOGON, 0,
-				 (char *)blob.data, blob.length,
-				 global_myname(), 0, domain_name, 0x1c,
-				 dc_ss);
-}
-
-bool receive_getdc_response(TALLOC_CTX *mem_ctx,
-			    struct sockaddr_storage *dc_ss,
-			    const char *domain_name,
-			    uint32_t *nt_version,
-			    const char **dc_name,
-			    union nbt_cldap_netlogon **reply)
+int cli_get_backup_list(const char *myname, const char *send_to_name)
 {
-	struct packet_struct *packet;
-	const char *my_mailslot = NULL;
-	struct in_addr dc_ip;
-	DATA_BLOB blob;
-	union nbt_cldap_netlogon r;
-	union dgram_message_body p;
-	enum ndr_err_code ndr_err;
+	pstring outbuf;
+	char *p;
+	struct in_addr sendto_ip;
 
-	const char *returned_dc = NULL;
-	const char *returned_domain = NULL;
+	if (!resolve_name(send_to_name, &sendto_ip, 0x1d)) {
 
-	if (dc_ss->ss_family != AF_INET) {
-		return false;
-	}
+		DEBUG(0, ("Could not resolve name: %s<1D>\n", send_to_name));
+		return False;
 
-	dc_ip = ((struct sockaddr_in *)dc_ss)->sin_addr;
-
-	my_mailslot = mailslot_name(mem_ctx, dc_ip);
-	if (!my_mailslot) {
-		return false;
 	}
 
-	packet = receive_unexpected(DGRAM_PACKET, 0, my_mailslot);
+	memset(cli_backup_list, '\0', sizeof(cli_backup_list));
+	memset(outbuf, '\0', sizeof(outbuf));
 
-	if (packet == NULL) {
-		DEBUG(5, ("Did not receive packet for %s\n", my_mailslot));
-		return False;
-	}
+	p = outbuf;
 
-	DEBUG(5, ("Received packet for %s\n", my_mailslot));
+	SCVAL(p, 0, ANN_GetBackupListReq);
+	p++;
 
-	blob = data_blob_const(packet->packet.dgram.data,
-			       packet->packet.dgram.datasize);
+	SCVAL(p, 0, 1); /* Count pointer ... */
+	p++;
 
-	if (blob.length < 4) {
-		DEBUG(0,("invalid length: %d\n", (int)blob.length));
-		return false;
-	}
+	SIVAL(p, 0, 1); /* The sender's token ... */
+	p += 4;
 
-	if (RIVAL(blob.data,0) != DGRAM_SMB) {
-		DEBUG(0,("invalid packet\n"));
-		return false;
-	}
+	cli_send_mailslot(True, "\\MAILSLOT\\BROWSE", 1, outbuf, 
+			  PTR_DIFF(p, outbuf), myname, 0, send_to_name, 
+			  0x1d, sendto_ip);
 
-	blob.data += 4;
-	blob.length -= 4;
+	/* We should check the error and return if we got one */
 
-	ndr_err = ndr_pull_union_blob_all(&blob, mem_ctx, &p, DGRAM_SMB,
-		       (ndr_pull_flags_fn_t)ndr_pull_dgram_smb_packet);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		DEBUG(0,("failed to parse packet\n"));
-		return false;
-	}
+	/* Now, get the response ... */
 
-	if (p.smb.smb_command != SMB_TRANSACTION) {
-		DEBUG(0,("invalid smb_command: %d\n", p.smb.smb_command));
-		return false;
-	}
+	cli_get_response("\\MAILSLOT\\BROWSE",
+			 cli_backup_list, sizeof(cli_backup_list));
 
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_DEBUG(dgram_smb_packet, &p);
-	}
+	return True;
 
-	blob = p.smb.body.trans.data;
+}
 
-	if (!pull_mailslot_cldap_reply(mem_ctx, &blob,
-				       &r, nt_version))
-	{
-		return false;
-	}
+/*
+ * cli_get_backup_server: Get the backup list and retrieve a server from it
+ */
 
-	switch (*nt_version) {
-		case 1:
-		case 16:
-		case 17:
+int cli_get_backup_server(char *my_name, char *target, char *servername, int namesize)
+{
 
-			returned_domain = r.logon1.domain_name;
-			returned_dc = r.logon1.pdc_name;
-			break;
-		case 2:
-		case 3:
-		case 18:
-		case 19:
-			returned_domain = r.logon3.domain_name;
-			returned_dc = r.logon3.pdc_name;
-			break;
-		case 4:
-		case 5:
-		case 6:
-		case 7:
-			returned_domain = r.logon5.domain;
-			returned_dc = r.logon5.pdc_name;
-			break;
-		case 8:
-		case 9:
-		case 10:
-		case 11:
-		case 12:
-		case 13:
-		case 14:
-		case 15:
-			returned_domain = r.logon13.domain;
-			returned_dc = r.logon13.pdc_name;
-			break;
-		case 20:
-		case 21:
-		case 22:
-		case 23:
-		case 24:
-		case 25:
-		case 26:
-		case 27:
-		case 28:
-			returned_domain = r.logon15.domain;
-			returned_dc = r.logon15.pdc_name;
-			break;
-		case 29:
-		case 30:
-		case 31:
-			returned_domain = r.logon29.domain;
-			returned_dc = r.logon29.pdc_name;
-			break;
-		default:
-			return false;
-	}
+  /* Get the backup list first. We could pull this from the cache later */
 
-	if (!strequal(returned_domain, domain_name)) {
-		DEBUG(3, ("GetDC: Expected domain %s, got %s\n",
-			  domain_name, returned_domain));
-		return false;
-	}
+  cli_get_backup_list(my_name, target);  /* FIXME: Check the response */
 
-	*dc_name = talloc_strdup(mem_ctx, returned_dc);
-	if (!*dc_name) {
-		return false;
-	}
+  if (!cli_backup_list[0]) { /* Empty list ... try again */
 
-	if (**dc_name == '\\')	*dc_name += 1;
-	if (**dc_name == '\\')	*dc_name += 1;
+    cli_get_backup_list(my_name, target);
 
-	if (reply) {
-		*reply = (union nbt_cldap_netlogon *)talloc_memdup(
-			mem_ctx, &r, sizeof(union nbt_cldap_netlogon));
-		if (!*reply) {
-			return false;
-		}
-	}
+  }
 
-	DEBUG(10, ("GetDC gave name %s for domain %s\n",
-		   *dc_name, returned_domain));
+  strncpy(servername, cli_backup_list, MIN(16, namesize));
 
-	return True;
-}
+  return True;
 
+}

Modified: branches/samba/upstream/source/libsmb/clientgen.c
===================================================================
--- branches/samba/upstream/source/libsmb/clientgen.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/clientgen.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -2,11 +2,10 @@
    Unix SMB/CIFS implementation.
    SMB client generic functions
    Copyright (C) Andrew Tridgell 1994-1998
-   Copyright (C) Jeremy Allison 2007.
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,26 +14,14 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
-/*******************************************************************
- Setup the word count and byte count for a client smb message.
-********************************************************************/
+extern int smb_read_error;
 
-int cli_set_message(char *buf,int num_words,int num_bytes,bool zero)
-{
-	if (zero && (num_words || num_bytes)) {
-		memset(buf + smb_size,'\0',num_words*2 + num_bytes);
-	}
-	SCVAL(buf,smb_wct,num_words);
-	SSVAL(buf,smb_vwv + num_words*SIZEOFWORD,num_bytes);
-	smb_setlen(buf,smb_size + num_words*2 + num_bytes - 4);
-	return (smb_size + num_words*2 + num_bytes);
-}
-
 /****************************************************************************
  Change the timeout (in milliseconds).
 ****************************************************************************/
@@ -66,77 +53,43 @@
  should never go into a blocking read.
 ****************************************************************************/
 
-static ssize_t client_receive_smb(struct cli_state *cli, size_t maxlen)
+static BOOL client_receive_smb(int fd,char *buffer, size_t bufsize, unsigned int timeout)
 {
-	size_t len;
+	BOOL ret;
 
 	for(;;) {
-		NTSTATUS status;
+		ret = receive_smb_raw(fd, buffer, bufsize, timeout);
 
-		set_smb_read_error(&cli->smb_rw_error, SMB_READ_OK);
-
-		status = receive_smb_raw(cli->fd, cli->inbuf, cli->bufsize,
-					cli->timeout, maxlen, &len);
-		if (!NT_STATUS_IS_OK(status)) {
+		if (!ret) {
 			DEBUG(10,("client_receive_smb failed\n"));
-			show_msg(cli->inbuf);
-
-			if (NT_STATUS_EQUAL(status, NT_STATUS_END_OF_FILE)) {
-				set_smb_read_error(&cli->smb_rw_error,
-						   SMB_READ_EOF);
-				return -1;
-			}
-
-			if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT)) {
-				set_smb_read_error(&cli->smb_rw_error,
-						   SMB_READ_TIMEOUT);
-				return -1;
-			}
-
-			set_smb_read_error(&cli->smb_rw_error, SMB_READ_ERROR);
-			return -1;
+			show_msg(buffer);
+			return ret;
 		}
 
-		if (len < 0) {
-			return len;
-		}
-
 		/* Ignore session keepalive packets. */
-		if(CVAL(cli->inbuf,0) != SMBkeepalive) {
+		if(CVAL(buffer,0) != SMBkeepalive)
 			break;
-		}
 	}
-
-	if (cli_encryption_on(cli)) {
-		NTSTATUS status = cli_decrypt_message(cli);
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(0, ("SMB decryption failed on incoming packet! Error %s\n",
-				nt_errstr(status)));
-			cli->smb_rw_error = SMB_READ_BAD_DECRYPT;
-			return -1;
-		}
-	}
-
-	show_msg(cli->inbuf);
-	return len;
+	show_msg(buffer);
+	return ret;
 }
 
 /****************************************************************************
  Recv an smb.
 ****************************************************************************/
 
-bool cli_receive_smb(struct cli_state *cli)
+BOOL cli_receive_smb(struct cli_state *cli)
 {
-	ssize_t len;
+	BOOL ret;
 
 	/* fd == -1 causes segfaults -- Tom (tom at ninja.nl) */
 	if (cli->fd == -1)
-		return false; 
+		return False; 
 
  again:
-	len = client_receive_smb(cli, 0);
+	ret = client_receive_smb(cli->fd,cli->inbuf, cli->bufsize, cli->timeout);
 	
-	if (len > 0) {
+	if (ret) {
 		/* it might be an oplock break request */
 		if (!(CVAL(cli->inbuf, smb_flg) & FLAG_REPLY) &&
 		    CVAL(cli->inbuf,smb_com) == SMBlockingX &&
@@ -145,9 +98,7 @@
 			if (cli->oplock_handler) {
 				int fnum = SVAL(cli->inbuf,smb_vwv2);
 				unsigned char level = CVAL(cli->inbuf,smb_vwv3+1);
-				if (!cli->oplock_handler(cli, fnum, level)) {
-					return false;
-				}
+				if (!cli->oplock_handler(cli, fnum, level)) return False;
 			}
 			/* try to prevent loops */
 			SCVAL(cli->inbuf,smb_com,0xFF);
@@ -156,14 +107,15 @@
 	}
 
 	/* If the server is not responding, note that now */
-	if (len < 0) {
+	if (!ret) {
                 DEBUG(0, ("Receiving SMB: Server stopped responding\n"));
+		cli->smb_rw_error = smb_read_error;
 		close(cli->fd);
 		cli->fd = -1;
-		return false;
+		return ret;
 	}
 
-	if (!cli_check_sign_mac(cli, cli->inbuf)) {
+	if (!cli_check_sign_mac(cli)) {
 		/*
 		 * If we get a signature failure in sessionsetup, then
 		 * the server sometimes just reflects the sent signature
@@ -180,62 +132,31 @@
 			 * Reflected signature on login error. 
 			 * Set bad sig but don't close fd.
 			 */
-			cli->smb_rw_error = SMB_READ_BAD_SIG;
-			return true;
+			cli->smb_rw_error = READ_BAD_SIG;
+			return True;
 		}
 
 		DEBUG(0, ("SMB Signature verification failed on incoming packet!\n"));
-		cli->smb_rw_error = SMB_READ_BAD_SIG;
+		cli->smb_rw_error = READ_BAD_SIG;
 		close(cli->fd);
 		cli->fd = -1;
-		return false;
+		return False;
 	};
-	return true;
+	return True;
 }
 
-/****************************************************************************
- Read the data portion of a readX smb.
- The timeout is in milliseconds
-****************************************************************************/
-
-ssize_t cli_receive_smb_data(struct cli_state *cli, char *buffer, size_t len)
-{
-	NTSTATUS status;
-
-	set_smb_read_error(&cli->smb_rw_error, SMB_READ_OK);
-
-	status = read_socket_with_timeout(
-		cli->fd, buffer, len, len, cli->timeout, NULL);
-	if (NT_STATUS_IS_OK(status)) {
-		return len;
-	}
-
-	if (NT_STATUS_EQUAL(status, NT_STATUS_END_OF_FILE)) {
-		set_smb_read_error(&cli->smb_rw_error, SMB_READ_EOF);
-		return -1;
-	}
-
-	if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT)) {
-		set_smb_read_error(&cli->smb_rw_error, SMB_READ_TIMEOUT);
-		return -1;
-	}
-
-	set_smb_read_error(&cli->smb_rw_error, SMB_READ_ERROR);
-	return -1;
-}
-
 static ssize_t write_socket(int fd, const char *buf, size_t len)
 {
         ssize_t ret=0;
-
+                                                                                                                                            
         DEBUG(6,("write_socket(%d,%d)\n",fd,(int)len));
         ret = write_data(fd,buf,len);
-
+                                                                                                                                            
         DEBUG(6,("write_socket(%d,%d) wrote %d\n",fd,(int)len,(int)ret));
         if(ret <= 0)
                 DEBUG(0,("write_socket: Error writing %d bytes to socket %d: ERRNO = %s\n",
                         (int)len, fd, strerror(errno) ));
-
+                                                                                                                                            
         return(ret);
 }
 
@@ -243,162 +164,70 @@
  Send an smb to a fd.
 ****************************************************************************/
 
-bool cli_send_smb(struct cli_state *cli)
+BOOL cli_send_smb(struct cli_state *cli)
 {
 	size_t len;
 	size_t nwritten=0;
 	ssize_t ret;
-	char *buf_out = cli->outbuf;
-	bool enc_on = cli_encryption_on(cli);
 
 	/* fd == -1 causes segfaults -- Tom (tom at ninja.nl) */
 	if (cli->fd == -1)
-		return false;
+		return False;
 
-	cli_calculate_sign_mac(cli, cli->outbuf);
+	cli_calculate_sign_mac(cli);
 
-	if (enc_on) {
-		NTSTATUS status = cli_encrypt_message(cli, cli->outbuf,
-						      &buf_out);
-		if (!NT_STATUS_IS_OK(status)) {
-			close(cli->fd);
-			cli->fd = -1;
-			cli->smb_rw_error = SMB_WRITE_ERROR;
-			DEBUG(0,("Error in encrypting client message. Error %s\n",
-				nt_errstr(status) ));
-			return false;
-		}
-	}
+	len = smb_len(cli->outbuf) + 4;
 
-	len = smb_len(buf_out) + 4;
-
 	while (nwritten < len) {
-		ret = write_socket(cli->fd,buf_out+nwritten,len - nwritten);
-		if (ret <= 0) {
-			if (enc_on) {
-				cli_free_enc_buffer(cli, buf_out);
-			}
-			close(cli->fd);
-			cli->fd = -1;
-			cli->smb_rw_error = SMB_WRITE_ERROR;
-			DEBUG(0,("Error writing %d bytes to client. %d (%s)\n",
-				(int)len,(int)ret, strerror(errno) ));
-			return false;
-		}
-		nwritten += ret;
-	}
-
-	if (enc_on) {
-		cli_free_enc_buffer(cli, buf_out);
-	}
-
-	/* Increment the mid so we can tell between responses. */
-	cli->mid++;
-	if (!cli->mid)
-		cli->mid++;
-	return true;
-}
-
-/****************************************************************************
- Send a "direct" writeX smb to a fd.
-****************************************************************************/
-
-bool cli_send_smb_direct_writeX(struct cli_state *cli,
-				const char *p,
-				size_t extradata)
-{
-	/* First length to send is the offset to the data. */
-	size_t len = SVAL(cli->outbuf,smb_vwv11) + 4;
-	size_t nwritten=0;
-	ssize_t ret;
-
-	/* fd == -1 causes segfaults -- Tom (tom at ninja.nl) */
-	if (cli->fd == -1) {
-		return false;
-	}
-
-	if (client_is_signing_on(cli)) {
-		DEBUG(0,("cli_send_smb_large: cannot send signed packet.\n"));
-		return false;
-	}
-
-	while (nwritten < len) {
 		ret = write_socket(cli->fd,cli->outbuf+nwritten,len - nwritten);
 		if (ret <= 0) {
 			close(cli->fd);
 			cli->fd = -1;
-			cli->smb_rw_error = SMB_WRITE_ERROR;
+			cli->smb_rw_error = WRITE_ERROR;
 			DEBUG(0,("Error writing %d bytes to client. %d (%s)\n",
 				(int)len,(int)ret, strerror(errno) ));
-			return false;
+			return False;
 		}
 		nwritten += ret;
 	}
-
-	/* Now write the extra data. */
-	nwritten=0;
-	while (nwritten < extradata) {
-		ret = write_socket(cli->fd,p+nwritten,extradata - nwritten);
-		if (ret <= 0) {
-			close(cli->fd);
-			cli->fd = -1;
-			cli->smb_rw_error = SMB_WRITE_ERROR;
-			DEBUG(0,("Error writing %d extradata "
-				"bytes to client. %d (%s)\n",
-				(int)extradata,(int)ret, strerror(errno) ));
-			return false;
-		}
-		nwritten += ret;
-	}
-
 	/* Increment the mid so we can tell between responses. */
 	cli->mid++;
 	if (!cli->mid)
 		cli->mid++;
-	return true;
+	return True;
 }
 
 /****************************************************************************
  Setup basics in a outgoing packet.
 ****************************************************************************/
 
-void cli_setup_packet_buf(struct cli_state *cli, char *buf)
+void cli_setup_packet(struct cli_state *cli)
 {
-	uint16 flags2;
 	cli->rap_error = 0;
-	SIVAL(buf,smb_rcls,0);
-	SSVAL(buf,smb_pid,cli->pid);
-	memset(buf+smb_pidhigh, 0, 12);
-	SSVAL(buf,smb_uid,cli->vuid);
-	SSVAL(buf,smb_mid,cli->mid);
-
-	if (cli->protocol <= PROTOCOL_CORE) {
-		return;
+	SSVAL(cli->outbuf,smb_pid,cli->pid);
+	SSVAL(cli->outbuf,smb_uid,cli->vuid);
+	SSVAL(cli->outbuf,smb_mid,cli->mid);
+	if (cli->protocol > PROTOCOL_CORE) {
+		uint16 flags2;
+		if (cli->case_sensitive) {
+			SCVAL(cli->outbuf,smb_flg,0x0);
+		} else {
+			/* Default setting, case insensitive. */
+			SCVAL(cli->outbuf,smb_flg,0x8);
+		}
+		flags2 = FLAGS2_LONG_PATH_COMPONENTS;
+		if (cli->capabilities & CAP_UNICODE)
+			flags2 |= FLAGS2_UNICODE_STRINGS;
+		if ((cli->capabilities & CAP_DFS) && cli->dfsroot)
+			flags2 |= FLAGS2_DFS_PATHNAMES;
+		if (cli->capabilities & CAP_STATUS32)
+			flags2 |= FLAGS2_32_BIT_ERROR_CODES;
+		if (cli->use_spnego)
+			flags2 |= FLAGS2_EXTENDED_SECURITY;
+		SSVAL(cli->outbuf,smb_flg2, flags2);
 	}
-
-	if (cli->case_sensitive) {
-		SCVAL(buf,smb_flg,0x0);
-	} else {
-		/* Default setting, case insensitive. */
-		SCVAL(buf,smb_flg,0x8);
-	}
-	flags2 = FLAGS2_LONG_PATH_COMPONENTS;
-	if (cli->capabilities & CAP_UNICODE)
-		flags2 |= FLAGS2_UNICODE_STRINGS;
-	if ((cli->capabilities & CAP_DFS) && cli->dfsroot)
-		flags2 |= FLAGS2_DFS_PATHNAMES;
-	if (cli->capabilities & CAP_STATUS32)
-		flags2 |= FLAGS2_32_BIT_ERROR_CODES;
-	if (cli->use_spnego)
-		flags2 |= FLAGS2_EXTENDED_SECURITY;
-	SSVAL(buf,smb_flg2, flags2);
 }
 
-void cli_setup_packet(struct cli_state *cli)
-{
-	cli_setup_packet_buf(cli, cli->outbuf);
-}
-
 /****************************************************************************
  Setup the bcc length of the packet from a pointer to the end of the data.
 ****************************************************************************/
@@ -418,7 +247,7 @@
 	fstrcpy(cli->user_name, username);
 	pwd_set_cleartext(&cli->pwd, password);
 	if (!*username) {
-		cli->pwd.null_pwd = true;
+		cli->pwd.null_pwd = True;
 	}
 
         DEBUG(10,("cli_init_creds: user %s domain %s\n", cli->user_name, cli->domain));
@@ -433,16 +262,16 @@
 	if (signing_state == Undefined)
 		return;
 
-	if (signing_state == false) {
-		cli->sign_info.allow_smb_signing = false;
-		cli->sign_info.mandatory_signing = false;
+	if (signing_state == False) {
+		cli->sign_info.allow_smb_signing = False;
+		cli->sign_info.mandatory_signing = False;
 		return;
 	}
 
-	cli->sign_info.allow_smb_signing = true;
+	cli->sign_info.allow_smb_signing = True;
 
 	if (signing_state == Required) 
-		cli->sign_info.mandatory_signing = true;
+		cli->sign_info.mandatory_signing = True;
 }
 
 /****************************************************************************
@@ -459,7 +288,7 @@
 		return NULL;
 	}
 
-	cli = talloc(NULL, struct cli_state);
+	cli = SMB_MALLOC_P(struct cli_state);
 	if (!cli) {
 		return NULL;
 	}
@@ -479,8 +308,8 @@
 	cli->outbuf = (char *)SMB_MALLOC(cli->bufsize+SAFETY_MARGIN);
 	cli->inbuf = (char *)SMB_MALLOC(cli->bufsize+SAFETY_MARGIN);
 	cli->oplock_handler = cli_oplock_ack;
-	cli->case_sensitive = false;
-	cli->smb_rw_error = SMB_READ_OK;
+	cli->case_sensitive = False;
+	cli->smb_rw_error = 0;
 
 	cli->use_spnego = lp_client_use_spnego();
 
@@ -490,17 +319,20 @@
 	   client routines using DOS errors instead of STATUS32
 	   ones.  This intended only as a temporary hack. */	
 	if (getenv("CLI_FORCE_DOSERR"))
-		cli->force_dos_errors = true;
+		cli->force_dos_errors = True;
 
 	if (lp_client_signing()) 
-		cli->sign_info.allow_smb_signing = true;
+		cli->sign_info.allow_smb_signing = True;
 
 	if (lp_client_signing() == Required) 
-		cli->sign_info.mandatory_signing = true;
+		cli->sign_info.mandatory_signing = True;
                                    
 	if (!cli->outbuf || !cli->inbuf)
                 goto error;
 
+	if ((cli->mem_ctx = talloc_init("cli based talloc")) == NULL)
+                goto error;
+
 	memset(cli->outbuf, 0, cli->bufsize);
 	memset(cli->inbuf, 0, cli->bufsize);
 
@@ -531,15 +363,15 @@
 /****************************************************************************
  External interface.
  Close an open named pipe over SMB. Free any authentication data.
- Returns false if the cli_close call failed.
+ Returns False if the cli_close call failed.
  ****************************************************************************/
 
-bool cli_rpc_pipe_close(struct rpc_pipe_client *cli)
+BOOL cli_rpc_pipe_close(struct rpc_pipe_client *cli)
 {
-	bool ret;
+	BOOL ret;
 
 	if (!cli) {
-		return false;
+		return False;
 	}
 
 	ret = cli_close(cli->cli, cli->fnum);
@@ -596,11 +428,11 @@
 	 * later.  This tree disconnect forces the peer to clean up, since the
 	 * connection will be going away.
 	 *
-	 * Also, do not do tree disconnect when cli->smb_rw_error is SMB_DO_NOT_DO_TDIS
+	 * Also, do not do tree disconnect when cli->smb_rw_error is DO_NOT_DO_TDIS
 	 * the only user for this so far is smbmount which passes opened connection
 	 * down to kernel's smbfs module.
 	 */
-	if ( (cli->cnum != (uint16)-1) && (cli->smb_rw_error != SMB_DO_NOT_DO_TDIS ) ) {
+	if ( (cli->cnum != (uint16)-1) && (cli->smb_rw_error != DO_NOT_DO_TDIS ) ) {
 		cli_tdis(cli);
 	}
         
@@ -611,13 +443,18 @@
 	data_blob_free(&cli->secblob);
 	data_blob_free(&cli->user_session_key);
 
+	if (cli->mem_ctx) {
+		talloc_destroy(cli->mem_ctx);
+		cli->mem_ctx = NULL;
+	}
+
 	if (cli->fd != -1) {
 		close(cli->fd);
 	}
 	cli->fd = -1;
-	cli->smb_rw_error = SMB_READ_OK;
+	cli->smb_rw_error = 0;
 
-	TALLOC_FREE(cli);
+	SAFE_FREE(cli);
 }
 
 /****************************************************************************
@@ -644,9 +481,9 @@
  Set the case sensitivity flag on the packets. Returns old state.
 ****************************************************************************/
 
-bool cli_set_case_sensitive(struct cli_state *cli, bool case_sensitive)
+BOOL cli_set_case_sensitive(struct cli_state *cli, BOOL case_sensitive)
 {
-	bool ret = cli->case_sensitive;
+	BOOL ret = cli->case_sensitive;
 	cli->case_sensitive = case_sensitive;
 	return ret;
 }
@@ -655,38 +492,36 @@
 Send a keepalive packet to the server
 ****************************************************************************/
 
-bool cli_send_keepalive(struct cli_state *cli)
+BOOL cli_send_keepalive(struct cli_state *cli)
 {
         if (cli->fd == -1) {
                 DEBUG(3, ("cli_send_keepalive: fd == -1\n"));
-                return false;
+                return False;
         }
         if (!send_keepalive(cli->fd)) {
                 close(cli->fd);
                 cli->fd = -1;
                 DEBUG(0,("Error sending keepalive packet to client.\n"));
-                return false;
+                return False;
         }
-        return true;
+        return True;
 }
 
 /****************************************************************************
  Send/receive a SMBecho command: ping the server
 ****************************************************************************/
 
-bool cli_echo(struct cli_state *cli, uint16 num_echos,
-	      unsigned char *data, size_t length)
+BOOL cli_echo(struct cli_state *cli, unsigned char *data, size_t length)
 {
 	char *p;
-	int i;
 
 	SMB_ASSERT(length < 1024);
 
 	memset(cli->outbuf,'\0',smb_size);
-	cli_set_message(cli->outbuf,1,length,true);
+	set_message(cli->outbuf,1,length,True);
 	SCVAL(cli->outbuf,smb_com,SMBecho);
 	SSVAL(cli->outbuf,smb_tid,65535);
-	SSVAL(cli->outbuf,smb_vwv0,num_echos);
+	SSVAL(cli->outbuf,smb_vwv0,1);
 	cli_setup_packet(cli);
 	p = smb_buf(cli->outbuf);
 	memcpy(p, data, length);
@@ -695,16 +530,12 @@
 	cli_setup_bcc(cli, p);
 
 	cli_send_smb(cli);
-
-	for (i=0; i<num_echos; i++) {
-		if (!cli_receive_smb(cli)) {
-			return false;
-		}
-
-		if (cli_is_error(cli)) {
-			return false;
-		}
+	if (!cli_receive_smb(cli)) {
+		return False;
 	}
 
-	return true;
+	if (cli_is_error(cli)) {
+		return False;
+	}
+	return True;
 }

Modified: branches/samba/upstream/source/libsmb/clierror.c
===================================================================
--- branches/samba/upstream/source/libsmb/clierror.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/clierror.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -72,20 +73,18 @@
 static NTSTATUS cli_smb_rw_error_to_ntstatus(struct cli_state *cli)
 {
 	switch(cli->smb_rw_error) {
-		case SMB_READ_TIMEOUT:
+		case READ_TIMEOUT:
 			return NT_STATUS_IO_TIMEOUT;
-		case SMB_READ_EOF:
+		case READ_EOF:
 			return NT_STATUS_END_OF_FILE;
 		/* What we shoud really do for read/write errors is convert from errno. */
 		/* FIXME. JRA. */
-		case SMB_READ_ERROR:
+		case READ_ERROR:
 			return NT_STATUS_INVALID_NETWORK_RESPONSE;
-		case SMB_WRITE_ERROR:
+		case WRITE_ERROR:
 			return NT_STATUS_UNEXPECTED_NETWORK_ERROR;
-	        case SMB_READ_BAD_SIG:
+	        case READ_BAD_SIG:
 			return NT_STATUS_INVALID_PARAMETER;
-		case SMB_NO_MEMORY:
-			return NT_STATUS_NO_MEMORY;
 	        default:
 			break;
 	}
@@ -100,51 +99,46 @@
 
 const char *cli_errstr(struct cli_state *cli)
 {   
-	fstring cli_error_message;
+	static fstring cli_error_message;
 	uint32 flgs2 = SVAL(cli->inbuf,smb_flg2), errnum;
 	uint8 errclass;
 	int i;
-	char *result;
 
 	if (!cli->initialised) {
 		fstrcpy(cli_error_message, "[Programmer's error] cli_errstr called on unitialized cli_stat struct!\n");
-		goto done;
+		return cli_error_message;
 	}
 
 	/* Was it server socket error ? */
 	if (cli->fd == -1 && cli->smb_rw_error) {
 		switch(cli->smb_rw_error) {
-			case SMB_READ_TIMEOUT:
+			case READ_TIMEOUT:
 				slprintf(cli_error_message, sizeof(cli_error_message) - 1,
 					"Call timed out: server did not respond after %d milliseconds",
 					cli->timeout);
 				break;
-			case SMB_READ_EOF:
+			case READ_EOF:
 				slprintf(cli_error_message, sizeof(cli_error_message) - 1,
 					"Call returned zero bytes (EOF)" );
 				break;
-			case SMB_READ_ERROR:
+			case READ_ERROR:
 				slprintf(cli_error_message, sizeof(cli_error_message) - 1,
 					"Read error: %s", strerror(errno) );
 				break;
-			case SMB_WRITE_ERROR:
+			case WRITE_ERROR:
 				slprintf(cli_error_message, sizeof(cli_error_message) - 1,
 					"Write error: %s", strerror(errno) );
 				break;
-		        case SMB_READ_BAD_SIG:
+		        case READ_BAD_SIG:
 				slprintf(cli_error_message, sizeof(cli_error_message) - 1,
 					"Server packet had invalid SMB signature!");
 				break;
-		        case SMB_NO_MEMORY:
-				slprintf(cli_error_message, sizeof(cli_error_message) - 1,
-					"Out of memory");
-				break;
 		        default:
 				slprintf(cli_error_message, sizeof(cli_error_message) - 1,
 					"Unknown error code %d\n", cli->smb_rw_error );
 				break;
 		}
-		goto done;
+		return cli_error_message;
 	}
 
 	/* Case #1: RAP error */
@@ -158,7 +152,7 @@
 		slprintf(cli_error_message, sizeof(cli_error_message) - 1, "RAP code %d",
 			cli->rap_error);
 
-		goto done;
+		return cli_error_message;
 	}
 
 	/* Case #2: 32-bit NT errors */
@@ -173,11 +167,6 @@
 	/* Case #3: SMB error */
 
 	return cli_smb_errstr(cli);
-
- done:
-	result = talloc_strdup(talloc_tos(), cli_error_message);
-	SMB_ASSERT(result);
-	return result;
 }
 
 
@@ -245,7 +234,6 @@
         {NT_STATUS_INVALID_HANDLE, EBADF},
         {NT_STATUS_ACCESS_DENIED, EACCES},
         {NT_STATUS_OBJECT_NAME_NOT_FOUND, ENOENT},
-        {NT_STATUS_OBJECT_PATH_NOT_FOUND, ENOENT},
         {NT_STATUS_SHARING_VIOLATION, EBUSY},
         {NT_STATUS_OBJECT_PATH_INVALID, ENOTDIR},
         {NT_STATUS_OBJECT_NAME_COLLISION, EEXIST},
@@ -343,9 +331,7 @@
 #ifdef ECOMM
 	{NT_STATUS_NET_WRITE_FAULT, ECOMM},
 #endif
-#ifdef EXDEV
-	{NT_STATUS_NOT_SAME_DEVICE, EXDEV},
-#endif
+
 	{NT_STATUS(0), 0}
 };
 
@@ -399,7 +385,7 @@
          * byte isn't 0xc0, it doesn't match cli_is_nt_error() above.
          */
         status = cli_nt_error(cli);
-        if (NT_STATUS_V(status) == NT_STATUS_V(NT_STATUS_INACCESSIBLE_SYSTEM_SHORTCUT)) {
+        if (NT_STATUS_V(status) == NT_STATUS_V(STATUS_INACCESSIBLE_SYSTEM_SHORTCUT)) {
             return EACCES;
         }
 
@@ -409,7 +395,7 @@
 
 /* Return true if the last packet was in error */
 
-bool cli_is_error(struct cli_state *cli)
+BOOL cli_is_error(struct cli_state *cli)
 {
 	uint32 flgs2 = SVAL(cli->inbuf,smb_flg2), rcls = 0;
 
@@ -432,7 +418,7 @@
 
 /* Return true if the last error was an NT error */
 
-bool cli_is_nt_error(struct cli_state *cli)
+BOOL cli_is_nt_error(struct cli_state *cli)
 {
 	uint32 flgs2 = SVAL(cli->inbuf,smb_flg2);
 
@@ -446,7 +432,7 @@
 
 /* Return true if the last error was a DOS error */
 
-bool cli_is_dos_error(struct cli_state *cli)
+BOOL cli_is_dos_error(struct cli_state *cli)
 {
 	uint32 flgs2 = SVAL(cli->inbuf,smb_flg2);
 

Modified: branches/samba/upstream/source/libsmb/clifile.c
===================================================================
--- branches/samba/upstream/source/libsmb/clifile.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/clifile.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -25,69 +26,49 @@
  Creates new name (sym)linked to oldname.
 ****************************************************************************/
 
-static bool cli_link_internal(struct cli_state *cli, const char *oldname, const char *newname, bool hard_link)
+static BOOL cli_link_internal(struct cli_state *cli, const char *oldname, const char *newname, BOOL hard_link)
 {
 	unsigned int data_len = 0;
 	unsigned int param_len = 0;
 	uint16 setup = TRANSACT2_SETPATHINFO;
-	char *param;
-	char *data;
+	char param[sizeof(pstring)+6];
+	pstring data;
 	char *rparam=NULL, *rdata=NULL;
 	char *p;
 	size_t oldlen = 2*(strlen(oldname)+1);
 	size_t newlen = 2*(strlen(newname)+1);
 
-	param = SMB_MALLOC_ARRAY(char, 6+newlen+2);
-
-	if (!param) {
-		return false;
-	}
-
-	data = SMB_MALLOC_ARRAY(char, oldlen+2);
-
-	if (!data) {
-		SAFE_FREE(param);
-		return false;
-	}
-
+	memset(param, 0, sizeof(param));
 	SSVAL(param,0,hard_link ? SMB_SET_FILE_UNIX_HLINK : SMB_SET_FILE_UNIX_LINK);
-	SIVAL(param,2,0);
 	p = &param[6];
 
-	p += clistr_push(cli, p, newname, newlen, STR_TERMINATE);
+	p += clistr_push(cli, p, newname, MIN(newlen, sizeof(param)-6), STR_TERMINATE);
 	param_len = PTR_DIFF(p, param);
 
 	p = data;
-	p += clistr_push(cli, p, oldname, oldlen, STR_TERMINATE);
+	p += clistr_push(cli, p, oldname, MIN(oldlen,sizeof(data)), STR_TERMINATE);
 	data_len = PTR_DIFF(p, data);
 
 	if (!cli_send_trans(cli, SMBtrans2,
-			NULL,                        /* name */
-			-1, 0,                          /* fid, flags */
-			&setup, 1, 0,                   /* setup, length, max */
-			param, param_len, 2,            /* param, length, max */
-			(char *)&data,  data_len, cli->max_xmit /* data, length, max */
-			)) {
-		SAFE_FREE(data);
-		SAFE_FREE(param);
-		return false;
+		NULL,                        /* name */
+		-1, 0,                          /* fid, flags */
+		&setup, 1, 0,                   /* setup, length, max */
+		param, param_len, 2,            /* param, length, max */
+		(char *)&data,  data_len, cli->max_xmit /* data, length, max */
+		)) {
+			return False;
 	}
 
-	SAFE_FREE(data);
-	SAFE_FREE(param);
-
 	if (!cli_receive_trans(cli, SMBtrans2,
-			&rparam, &param_len,
-			&rdata, &data_len)) {
-			return false;
+		&rparam, &param_len,
+		&rdata, &data_len)) {
+			return False;
 	}
 
-	SAFE_FREE(data);
-	SAFE_FREE(param);
 	SAFE_FREE(rdata);
 	SAFE_FREE(rparam);
 
-	return true;
+	return True;
 }
 
 /****************************************************************************
@@ -151,7 +132,7 @@
 /****************************************************************************
  Return the file type from the wire filetype for UNIX extensions.
 ****************************************************************************/
-
+                                                                                                                
 static mode_t unix_filetype_from_wire(uint32 wire_type)
 {
 	switch (wire_type) {
@@ -188,26 +169,20 @@
  Do a POSIX getfacl (UNIX extensions).
 ****************************************************************************/
 
-bool cli_unix_getfacl(struct cli_state *cli, const char *name, size_t *prb_size, char **retbuf)
+BOOL cli_unix_getfacl(struct cli_state *cli, const char *name, size_t *prb_size, char **retbuf)
 {
 	unsigned int param_len = 0;
 	unsigned int data_len = 0;
 	uint16 setup = TRANSACT2_QPATHINFO;
-	char *param;
-	size_t nlen = 2*(strlen(name)+1);
+	char param[sizeof(pstring)+6];
 	char *rparam=NULL, *rdata=NULL;
 	char *p;
 
-	param = SMB_MALLOC_ARRAY(char, 6+nlen+2);
-	if (!param) {
-		return false;
-	}
-
 	p = param;
-	memset(p, '\0', 6);
+	memset(p, 0, 6);
 	SSVAL(p, 0, SMB_QUERY_POSIX_ACL);
 	p += 6;
-	p += clistr_push(cli, p, name, nlen, STR_TERMINATE);
+	p += clistr_push(cli, p, name, sizeof(pstring)-6, STR_TERMINATE);
 	param_len = PTR_DIFF(p, param);
 
 	if (!cli_send_trans(cli, SMBtrans2,
@@ -217,81 +192,70 @@
 		param, param_len, 2,         /* param, length, max */
 		NULL,  0, cli->max_xmit      /* data, length, max */
 		)) {
-		SAFE_FREE(param);
-		return false;
+			return False;
 	}
 
-	SAFE_FREE(param);
-
 	if (!cli_receive_trans(cli, SMBtrans2,
-			&rparam, &param_len,
-			&rdata, &data_len)) {
-		return false;
+		&rparam, &param_len,
+		&rdata, &data_len)) {
+			return False;
 	}
 
 	if (data_len < 6) {
 		SAFE_FREE(rdata);
 		SAFE_FREE(rparam);
-		return false;
+		return False;
 	}
 
 	SAFE_FREE(rparam);
 	*retbuf = rdata;
 	*prb_size = (size_t)data_len;
 
-	return true;
+	return True;
 }
 
 /****************************************************************************
  Stat a file (UNIX extensions).
 ****************************************************************************/
 
-bool cli_unix_stat(struct cli_state *cli, const char *name, SMB_STRUCT_STAT *sbuf)
+BOOL cli_unix_stat(struct cli_state *cli, const char *name, SMB_STRUCT_STAT *sbuf)
 {
 	unsigned int param_len = 0;
 	unsigned int data_len = 0;
 	uint16 setup = TRANSACT2_QPATHINFO;
-	char *param;
-	size_t nlen = 2*(strlen(name)+1);
+	char param[sizeof(pstring)+6];
 	char *rparam=NULL, *rdata=NULL;
 	char *p;
 
 	ZERO_STRUCTP(sbuf);
 
-	param = SMB_MALLOC_ARRAY(char, 6+nlen+2);
-	if (!param) {
-		return false;
-	}
 	p = param;
-	memset(p, '\0', 6);
+	memset(p, 0, 6);
 	SSVAL(p, 0, SMB_QUERY_FILE_UNIX_BASIC);
 	p += 6;
-	p += clistr_push(cli, p, name, nlen, STR_TERMINATE);
+	p += clistr_push(cli, p, name, sizeof(pstring)-6, STR_TERMINATE);
 	param_len = PTR_DIFF(p, param);
 
 	if (!cli_send_trans(cli, SMBtrans2,
-			NULL,                        /* name */
-			-1, 0,                       /* fid, flags */
-			&setup, 1, 0,                /* setup, length, max */
-			param, param_len, 2,         /* param, length, max */
-			NULL,  0, cli->max_xmit      /* data, length, max */
-			)) {
-		SAFE_FREE(param);
-		return false;
+		NULL,                        /* name */
+		-1, 0,                       /* fid, flags */
+		&setup, 1, 0,                /* setup, length, max */
+		param, param_len, 2,         /* param, length, max */
+		NULL,  0, cli->max_xmit      /* data, length, max */
+		)) {
+			return False;
 	}
 
-	SAFE_FREE(param);
-
 	if (!cli_receive_trans(cli, SMBtrans2,
-			&rparam, &param_len,
-			&rdata, &data_len)) {
-		return false;
+		&rparam, &param_len,
+		&rdata, &data_len)) {
+			return False;
 	}
 
 	if (data_len < 96) {
 		SAFE_FREE(rdata);
 		SAFE_FREE(rparam);
-		return false;
+		return False;
 	}
 
 	sbuf->st_size = IVAL2_TO_SMB_BIG_UINT(rdata,0);     /* total size, in bytes */
@@ -323,14 +287,14 @@
 	SAFE_FREE(rdata);
 	SAFE_FREE(rparam);
 
-	return true;
+	return True;
 }
 
 /****************************************************************************
  Symlink a file (UNIX extensions).
 ****************************************************************************/
 
-bool cli_unix_symlink(struct cli_state *cli, const char *oldname, const char *newname)
+BOOL cli_unix_symlink(struct cli_state *cli, const char *oldname, const char *newname)
 {
 	return cli_link_internal(cli, oldname, newname, False);
 }
@@ -339,7 +303,7 @@
  Hard a file (UNIX extensions).
 ****************************************************************************/
 
-bool cli_unix_hardlink(struct cli_state *cli, const char *oldname, const char *newname)
+BOOL cli_unix_hardlink(struct cli_state *cli, const char *oldname, const char *newname)
 {
 	return cli_link_internal(cli, oldname, newname, True);
 }
@@ -348,28 +312,22 @@
  Chmod or chown a file internal (UNIX extensions).
 ****************************************************************************/
 
-static bool cli_unix_chmod_chown_internal(struct cli_state *cli, const char *fname, uint32 mode, uint32 uid, uint32 gid)
+static BOOL cli_unix_chmod_chown_internal(struct cli_state *cli, const char *fname, uint32 mode, uint32 uid, uint32 gid)
 {
 	unsigned int data_len = 0;
 	unsigned int param_len = 0;
 	uint16 setup = TRANSACT2_SETPATHINFO;
-	size_t nlen = 2*(strlen(fname)+1);
-	char *param;
+	char param[sizeof(pstring)+6];
 	char data[100];
 	char *rparam=NULL, *rdata=NULL;
 	char *p;
 
-	param = SMB_MALLOC_ARRAY(char, 6+nlen+2);
-	if (!param) {
-		return false;
-	}
-	memset(param, '\0', 6);
+	memset(param, 0, sizeof(param));
 	memset(data, 0, sizeof(data));
-
 	SSVAL(param,0,SMB_SET_FILE_UNIX_BASIC);
 	p = &param[6];
 
-	p += clistr_push(cli, p, fname, nlen, STR_TERMINATE);
+	p += clistr_push(cli, p, fname, -1, STR_TERMINATE);
 	param_len = PTR_DIFF(p, param);
 
 	memset(data, 0xff, 40); /* Set all sizes/times to no change. */
@@ -381,37 +339,34 @@
 	data_len = 100;
 
 	if (!cli_send_trans(cli, SMBtrans2,
-			NULL,                        /* name */
-			-1, 0,                          /* fid, flags */
-			&setup, 1, 0,                   /* setup, length, max */
-			param, param_len, 2,            /* param, length, max */
-			(char *)&data,  data_len, cli->max_xmit /* data, length, max */
-			)) {
-		SAFE_FREE(param);
-		return False;
+		NULL,                        /* name */
+		-1, 0,                          /* fid, flags */
+		&setup, 1, 0,                   /* setup, length, max */
+		param, param_len, 2,            /* param, length, max */
+		(char *)&data,  data_len, cli->max_xmit /* data, length, max */
+		)) {
+			return False;
 	}
 
-	SAFE_FREE(param);
-
 	if (!cli_receive_trans(cli, SMBtrans2,
-			&rparam, &param_len,
-			&rdata, &data_len)) {
-		return false;
+		&rparam, &param_len,
+		&rdata, &data_len)) {
+			return False;
 	}
 
 	SAFE_FREE(rdata);
 	SAFE_FREE(rparam);
 
-	return true;
+	return True;
 }
 
 /****************************************************************************
  chmod a file (UNIX extensions).
 ****************************************************************************/
 
-bool cli_unix_chmod(struct cli_state *cli, const char *fname, mode_t mode)
+BOOL cli_unix_chmod(struct cli_state *cli, const char *fname, mode_t mode)
 {
-	return cli_unix_chmod_chown_internal(cli, fname,
+	return cli_unix_chmod_chown_internal(cli, fname, 
 		unix_perms_to_wire(mode), SMB_UID_NO_CHANGE, SMB_GID_NO_CHANGE);
 }
 
@@ -419,24 +374,23 @@
  chown a file (UNIX extensions).
 ****************************************************************************/
 
-bool cli_unix_chown(struct cli_state *cli, const char *fname, uid_t uid, gid_t gid)
+BOOL cli_unix_chown(struct cli_state *cli, const char *fname, uid_t uid, gid_t gid)
 {
-	return cli_unix_chmod_chown_internal(cli, fname,
-			SMB_MODE_NO_CHANGE, (uint32)uid, (uint32)gid);
+	return cli_unix_chmod_chown_internal(cli, fname, SMB_MODE_NO_CHANGE, (uint32)uid, (uint32)gid);
 }
 
 /****************************************************************************
  Rename a file.
 ****************************************************************************/
 
-bool cli_rename(struct cli_state *cli, const char *fname_src, const char *fname_dst)
+BOOL cli_rename(struct cli_state *cli, const char *fname_src, const char *fname_dst)
 {
 	char *p;
 
 	memset(cli->outbuf,'\0',smb_size);
 	memset(cli->inbuf,'\0',smb_size);
 
-	cli_set_message(cli->outbuf,1, 0, true);
+	set_message(cli->outbuf,1, 0, True);
 
 	SCVAL(cli->outbuf,smb_com,SMBmv);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -446,38 +400,34 @@
 
 	p = smb_buf(cli->outbuf);
 	*p++ = 4;
-	p += clistr_push(cli, p, fname_src,
-			cli->bufsize - PTR_DIFF(p,cli->outbuf), STR_TERMINATE);
+	p += clistr_push(cli, p, fname_src, -1, STR_TERMINATE);
 	*p++ = 4;
-	p += clistr_push(cli, p, fname_dst,
-			cli->bufsize - PTR_DIFF(p,cli->outbuf), STR_TERMINATE);
+	p += clistr_push(cli, p, fname_dst, -1, STR_TERMINATE);
 
 	cli_setup_bcc(cli, p);
 
 	cli_send_smb(cli);
-	if (!cli_receive_smb(cli)) {
-		return false;
-	}
+	if (!cli_receive_smb(cli))
+		return False;
 
-	if (cli_is_error(cli)) {
-		return false;
-	}
+	if (cli_is_error(cli))
+		return False;
 
-	return true;
+	return True;
 }
 
 /****************************************************************************
  NT Rename a file.
 ****************************************************************************/
 
-bool cli_ntrename(struct cli_state *cli, const char *fname_src, const char *fname_dst)
+BOOL cli_ntrename(struct cli_state *cli, const char *fname_src, const char *fname_dst)
 {
 	char *p;
 
 	memset(cli->outbuf,'\0',smb_size);
 	memset(cli->inbuf,'\0',smb_size);
 
-	cli_set_message(cli->outbuf, 4, 0, true);
+	set_message(cli->outbuf, 4, 0, True);
 
 	SCVAL(cli->outbuf,smb_com,SMBntrename);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -488,38 +438,34 @@
 
 	p = smb_buf(cli->outbuf);
 	*p++ = 4;
-	p += clistr_push(cli, p, fname_src,
-			cli->bufsize - PTR_DIFF(p,cli->outbuf), STR_TERMINATE);
+	p += clistr_push(cli, p, fname_src, -1, STR_TERMINATE);
 	*p++ = 4;
-	p += clistr_push(cli, p, fname_dst,
-			cli->bufsize - PTR_DIFF(p,cli->outbuf), STR_TERMINATE);
+	p += clistr_push(cli, p, fname_dst, -1, STR_TERMINATE);
 
 	cli_setup_bcc(cli, p);
 
 	cli_send_smb(cli);
-	if (!cli_receive_smb(cli)) {
-		return false;
-	}
+	if (!cli_receive_smb(cli))
+		return False;
 
-	if (cli_is_error(cli)) {
-		return false;
-	}
+	if (cli_is_error(cli))
+		return False;
 
-	return true;
+	return True;
 }
 
 /****************************************************************************
  NT hardlink a file.
 ****************************************************************************/
 
-bool cli_nt_hardlink(struct cli_state *cli, const char *fname_src, const char *fname_dst)
+BOOL cli_nt_hardlink(struct cli_state *cli, const char *fname_src, const char *fname_dst)
 {
 	char *p;
 
 	memset(cli->outbuf,'\0',smb_size);
 	memset(cli->inbuf,'\0',smb_size);
 
-	cli_set_message(cli->outbuf, 4, 0, true);
+	set_message(cli->outbuf, 4, 0, True);
 
 	SCVAL(cli->outbuf,smb_com,SMBntrename);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -530,68 +476,63 @@
 
 	p = smb_buf(cli->outbuf);
 	*p++ = 4;
-	p += clistr_push(cli, p, fname_src,
-			cli->bufsize - PTR_DIFF(p,cli->outbuf), STR_TERMINATE);
+	p += clistr_push(cli, p, fname_src, -1, STR_TERMINATE);
 	*p++ = 4;
-	p += clistr_push(cli, p, fname_dst,
-			cli->bufsize - PTR_DIFF(p,cli->outbuf), STR_TERMINATE);
+	p += clistr_push(cli, p, fname_dst, -1, STR_TERMINATE);
 
 	cli_setup_bcc(cli, p);
 
 	cli_send_smb(cli);
-	if (!cli_receive_smb(cli)) {
-		return false;
-	}
+	if (!cli_receive_smb(cli))
+		return False;
 
-	if (cli_is_error(cli)) {
-		return false;
-	}
+	if (cli_is_error(cli))
+		return False;
 
-	return true;
+	return True;
 }
 
 /****************************************************************************
  Delete a file.
 ****************************************************************************/
 
-bool cli_unlink_full(struct cli_state *cli, const char *fname, uint16 attrs)
+BOOL cli_unlink_full(struct cli_state *cli, const char *fname, uint16 attrs)
 {
 	char *p;
 
 	memset(cli->outbuf,'\0',smb_size);
 	memset(cli->inbuf,'\0',smb_size);
 
-	cli_set_message(cli->outbuf,1, 0, true);
+	set_message(cli->outbuf,1, 0,True);
 
 	SCVAL(cli->outbuf,smb_com,SMBunlink);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
 	cli_setup_packet(cli);
 
 	SSVAL(cli->outbuf,smb_vwv0, attrs);
-
+  
 	p = smb_buf(cli->outbuf);
-	*p++ = 4;
-	p += clistr_push(cli, p, fname,
-			cli->bufsize - PTR_DIFF(p,cli->outbuf), STR_TERMINATE);
+	*p++ = 4;      
+	p += clistr_push(cli, p, fname, -1, STR_TERMINATE);
 
 	cli_setup_bcc(cli, p);
 	cli_send_smb(cli);
 	if (!cli_receive_smb(cli)) {
-		return false;
+		return False;
 	}
 
 	if (cli_is_error(cli)) {
-		return false;
+		return False;
 	}
 
-	return true;
+	return True;
 }
 
 /****************************************************************************
  Delete a file.
 ****************************************************************************/
 
-bool cli_unlink(struct cli_state *cli, const char *fname)
+BOOL cli_unlink(struct cli_state *cli, const char *fname)
 {
 	return cli_unlink_full(cli, fname, aSYSTEM | aHIDDEN);
 }
@@ -600,23 +541,22 @@
  Create a directory.
 ****************************************************************************/
 
-bool cli_mkdir(struct cli_state *cli, const char *dname)
+BOOL cli_mkdir(struct cli_state *cli, const char *dname)
 {
 	char *p;
 
 	memset(cli->outbuf,'\0',smb_size);
 	memset(cli->inbuf,'\0',smb_size);
 
-	cli_set_message(cli->outbuf,0, 0, true);
+	set_message(cli->outbuf,0, 0,True);
 
 	SCVAL(cli->outbuf,smb_com,SMBmkdir);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
 	cli_setup_packet(cli);
 
 	p = smb_buf(cli->outbuf);
-	*p++ = 4;
-	p += clistr_push(cli, p, dname,
-			cli->bufsize - PTR_DIFF(p,cli->outbuf), STR_TERMINATE);
+	*p++ = 4;      
+	p += clistr_push(cli, p, dname, -1, STR_TERMINATE);
 
 	cli_setup_bcc(cli, p);
 
@@ -636,48 +576,47 @@
  Remove a directory.
 ****************************************************************************/
 
-bool cli_rmdir(struct cli_state *cli, const char *dname)
+BOOL cli_rmdir(struct cli_state *cli, const char *dname)
 {
 	char *p;
 
 	memset(cli->outbuf,'\0',smb_size);
 	memset(cli->inbuf,'\0',smb_size);
 
-	cli_set_message(cli->outbuf,0, 0, true);
+	set_message(cli->outbuf,0, 0, True);
 
 	SCVAL(cli->outbuf,smb_com,SMBrmdir);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
 	cli_setup_packet(cli);
 
 	p = smb_buf(cli->outbuf);
-	*p++ = 4;
-	p += clistr_push(cli, p, dname,
-			cli->bufsize - PTR_DIFF(p,cli->outbuf), STR_TERMINATE);
+	*p++ = 4;      
+	p += clistr_push(cli, p, dname, -1, STR_TERMINATE);
 
 	cli_setup_bcc(cli, p);
 
 	cli_send_smb(cli);
 	if (!cli_receive_smb(cli)) {
-		return false;
+		return False;
 	}
 
 	if (cli_is_error(cli)) {
-		return false;
+		return False;
 	}
 
-	return true;
+	return True;
 }
 
 /****************************************************************************
  Set or clear the delete on close flag.
 ****************************************************************************/
 
-int cli_nt_delete_on_close(struct cli_state *cli, int fnum, bool flag)
+int cli_nt_delete_on_close(struct cli_state *cli, int fnum, BOOL flag)
 {
 	unsigned int data_len = 1;
 	unsigned int param_len = 6;
 	uint16 setup = TRANSACT2_SETFILEINFO;
-	char param[6];
+	pstring param;
 	unsigned char data;
 	char *rparam=NULL, *rdata=NULL;
 
@@ -688,25 +627,25 @@
 	data = flag ? 1 : 0;
 
 	if (!cli_send_trans(cli, SMBtrans2,
-			NULL,                        /* name */
-			-1, 0,                          /* fid, flags */
-			&setup, 1, 0,                   /* setup, length, max */
-			param, param_len, 2,            /* param, length, max */
-			(char *)&data,  data_len, cli->max_xmit /* data, length, max */
-			)) {
-		return false;
+						NULL,                        /* name */
+						-1, 0,                          /* fid, flags */
+						&setup, 1, 0,                   /* setup, length, max */
+						param, param_len, 2,            /* param, length, max */
+						(char *)&data,  data_len, cli->max_xmit /* data, length, max */
+						)) {
+		return False;
 	}
 
 	if (!cli_receive_trans(cli, SMBtrans2,
-			&rparam, &param_len,
-			&rdata, &data_len)) {
-		return false;
+						&rparam, &param_len,
+						&rdata, &data_len)) {
+		return False;
 	}
 
 	SAFE_FREE(rdata);
 	SAFE_FREE(rparam);
 
-	return true;
+	return True;
 }
 
 /****************************************************************************
@@ -714,7 +653,7 @@
  Used in smbtorture.
 ****************************************************************************/
 
-int cli_nt_create_full(struct cli_state *cli, const char *fname,
+int cli_nt_create_full(struct cli_state *cli, const char *fname, 
 		 uint32 CreatFlags, uint32 DesiredAccess,
 		 uint32 FileAttributes, uint32 ShareAccess,
 		 uint32 CreateDisposition, uint32 CreateOptions,
@@ -726,7 +665,7 @@
 	memset(cli->outbuf,'\0',smb_size);
 	memset(cli->inbuf,'\0',smb_size);
 
-	cli_set_message(cli->outbuf,24,0, true);
+	set_message(cli->outbuf,24,0,True);
 
 	SCVAL(cli->outbuf,smb_com,SMBntcreateX);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -735,7 +674,7 @@
 	SSVAL(cli->outbuf,smb_vwv0,0xFF);
 	if (cli->use_oplocks)
 		CreatFlags |= (REQUEST_OPLOCK|REQUEST_BATCH_OPLOCK);
-
+	
 	SIVAL(cli->outbuf,smb_ntcreate_Flags, CreatFlags);
 	SIVAL(cli->outbuf,smb_ntcreate_RootDirectoryFid, 0x0);
 	SIVAL(cli->outbuf,smb_ntcreate_DesiredAccess, DesiredAccess);
@@ -749,13 +688,11 @@
 	p = smb_buf(cli->outbuf);
 	/* this alignment and termination is critical for netapp filers. Don't change */
 	p += clistr_align_out(cli, p, 0);
-	len = clistr_push(cli, p, fname,
-			cli->bufsize - PTR_DIFF(p,cli->outbuf), 0);
+	len = clistr_push(cli, p, fname, -1, 0);
 	p += len;
 	SSVAL(cli->outbuf,smb_ntcreate_NameLength, len);
 	/* sigh. this copes with broken netapp filer behaviour */
-	p += clistr_push(cli, p, "",
-			cli->bufsize - PTR_DIFF(p,cli->outbuf), STR_TERMINATE);
+	p += clistr_push(cli, p, "", -1, STR_TERMINATE);
 
 	cli_setup_bcc(cli, p);
 
@@ -807,7 +744,7 @@
 		accessmode |= 2;
 	} else if ((flags & O_ACCMODE) == O_WRONLY) {
 		accessmode |= 1;
-	}
+	} 
 
 #if defined(O_SYNC)
 	if ((flags & O_SYNC) == O_SYNC) {
@@ -822,7 +759,7 @@
 	memset(cli->outbuf,'\0',smb_size);
 	memset(cli->inbuf,'\0',smb_size);
 
-	cli_set_message(cli->outbuf,15,0, true);
+	set_message(cli->outbuf,15,0,True);
 
 	SCVAL(cli->outbuf,smb_com,SMBopenX);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -842,10 +779,9 @@
 			FLAG_REQUEST_OPLOCK|FLAG_REQUEST_BATCH_OPLOCK);
 		SSVAL(cli->outbuf,smb_vwv2,SVAL(cli->outbuf,smb_vwv2) | 6);
 	}
-
+  
 	p = smb_buf(cli->outbuf);
-	p += clistr_push(cli, p, fname,
-			cli->bufsize - PTR_DIFF(p,cli->outbuf), STR_TERMINATE);
+	p += clistr_push(cli, p, fname, -1, STR_TERMINATE);
 
 	cli_setup_bcc(cli, p);
 
@@ -865,12 +801,12 @@
  Close a file.
 ****************************************************************************/
 
-bool cli_close(struct cli_state *cli, int fnum)
+BOOL cli_close(struct cli_state *cli, int fnum)
 {
 	memset(cli->outbuf,'\0',smb_size);
 	memset(cli->inbuf,'\0',smb_size);
 
-	cli_set_message(cli->outbuf,3,0,True);
+	set_message(cli->outbuf,3,0,True);
 
 	SCVAL(cli->outbuf,smb_com,SMBclose);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -889,62 +825,12 @@
 
 
 /****************************************************************************
- Truncate a file to a specified size
-****************************************************************************/
-
-bool cli_ftruncate(struct cli_state *cli, int fnum, uint64_t size)
-{
-	unsigned int param_len = 6;
-	unsigned int data_len = 8;
-	uint16 setup = TRANSACT2_SETFILEINFO;
-	char param[6];
-	unsigned char data[8];
-	char *rparam=NULL, *rdata=NULL;
-	int saved_timeout = cli->timeout;
-
-	SSVAL(param,0,fnum);
-	SSVAL(param,2,SMB_SET_FILE_END_OF_FILE_INFO);
-	SSVAL(param,4,0);
-
-        SBVAL(data, 0, size);
-
-	if (!cli_send_trans(cli, SMBtrans2,
-                            NULL,                    /* name */
-                            -1, 0,                   /* fid, flags */
-                            &setup, 1, 0,            /* setup, length, max */
-                            param, param_len, 2,     /* param, length, max */
-                            (char *)&data,  data_len,/* data, length, ... */
-                            cli->max_xmit)) {        /* ... max */
-		cli->timeout = saved_timeout;
-		return False;
-	}
-
-	if (!cli_receive_trans(cli, SMBtrans2,
-				&rparam, &param_len,
-				&rdata, &data_len)) {
-		cli->timeout = saved_timeout;
-		SAFE_FREE(rdata);
-		SAFE_FREE(rparam);
-		return False;
-	}
-
-	cli->timeout = saved_timeout;
-
-	SAFE_FREE(rdata);
-	SAFE_FREE(rparam);
-
-	return True;
-}
-
-
-/****************************************************************************
- send a lock with a specified locktype
+ send a lock with a specified locktype 
  this is used for testing LOCKING_ANDX_CANCEL_LOCK
 ****************************************************************************/
 
-NTSTATUS cli_locktype(struct cli_state *cli, int fnum,
-		      uint32 offset, uint32 len,
-		      int timeout, unsigned char locktype)
+NTSTATUS cli_locktype(struct cli_state *cli, int fnum, 
+		      uint32 offset, uint32 len, int timeout, unsigned char locktype)
 {
 	char *p;
 	int saved_timeout = cli->timeout;
@@ -952,7 +838,7 @@
 	memset(cli->outbuf,'\0',smb_size);
 	memset(cli->inbuf,'\0', smb_size);
 
-	cli_set_message(cli->outbuf,8,0,True);
+	set_message(cli->outbuf,8,0,True);
 
 	SCVAL(cli->outbuf,smb_com,SMBlockingX);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -995,7 +881,7 @@
  note that timeout is in units of 2 milliseconds
 ****************************************************************************/
 
-bool cli_lock(struct cli_state *cli, int fnum,
+BOOL cli_lock(struct cli_state *cli, int fnum, 
 	      uint32 offset, uint32 len, int timeout, enum brl_type lock_type)
 {
 	char *p;
@@ -1004,7 +890,7 @@
 	memset(cli->outbuf,'\0',smb_size);
 	memset(cli->inbuf,'\0', smb_size);
 
-	cli_set_message(cli->outbuf,8,0,True);
+	set_message(cli->outbuf,8,0,True);
 
 	SCVAL(cli->outbuf,smb_com,SMBlockingX);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -1050,14 +936,14 @@
  Unlock a file.
 ****************************************************************************/
 
-bool cli_unlock(struct cli_state *cli, int fnum, uint32 offset, uint32 len)
+BOOL cli_unlock(struct cli_state *cli, int fnum, uint32 offset, uint32 len)
 {
 	char *p;
 
 	memset(cli->outbuf,'\0',smb_size);
 	memset(cli->inbuf,'\0',smb_size);
 
-	cli_set_message(cli->outbuf,8,0,True);
+	set_message(cli->outbuf,8,0,True);
 
 	SCVAL(cli->outbuf,smb_com,SMBlockingX);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -1092,7 +978,7 @@
  Lock a file with 64 bit offsets.
 ****************************************************************************/
 
-bool cli_lock64(struct cli_state *cli, int fnum,
+BOOL cli_lock64(struct cli_state *cli, int fnum, 
 		SMB_BIG_UINT offset, SMB_BIG_UINT len, int timeout, enum brl_type lock_type)
 {
 	char *p;
@@ -1109,7 +995,7 @@
 	memset(cli->outbuf,'\0',smb_size);
 	memset(cli->inbuf,'\0', smb_size);
 
-	cli_set_message(cli->outbuf,8,0,True);
+	set_message(cli->outbuf,8,0,True);
 
 	SCVAL(cli->outbuf,smb_com,SMBlockingX);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -1153,7 +1039,7 @@
  Unlock a file with 64 bit offsets.
 ****************************************************************************/
 
-bool cli_unlock64(struct cli_state *cli, int fnum, SMB_BIG_UINT offset, SMB_BIG_UINT len)
+BOOL cli_unlock64(struct cli_state *cli, int fnum, SMB_BIG_UINT offset, SMB_BIG_UINT len)
 {
 	char *p;
 
@@ -1164,7 +1050,7 @@
 	memset(cli->outbuf,'\0',smb_size);
 	memset(cli->inbuf,'\0',smb_size);
 
-	cli_set_message(cli->outbuf,8,0,True);
+	set_message(cli->outbuf,8,0,True);
 
 	SCVAL(cli->outbuf,smb_com,SMBlockingX);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -1199,8 +1085,8 @@
  Get/unlock a POSIX lock on a file - internal function.
 ****************************************************************************/
 
-static bool cli_posix_lock_internal(struct cli_state *cli, int fnum,
-		SMB_BIG_UINT offset, SMB_BIG_UINT len, bool wait_lock, enum brl_type lock_type)
+static BOOL cli_posix_lock_internal(struct cli_state *cli, int fnum, 
+		SMB_BIG_UINT offset, SMB_BIG_UINT len, BOOL wait_lock, enum brl_type lock_type)
 {
 	unsigned int param_len = 4;
 	unsigned int data_len = POSIX_LOCK_DATA_SIZE;
@@ -1239,12 +1125,12 @@
 	SOFF_T(data, POSIX_LOCK_LEN_OFFSET, len);
 
 	if (!cli_send_trans(cli, SMBtrans2,
-			NULL,                        /* name */
-			-1, 0,                          /* fid, flags */
-			&setup, 1, 0,                   /* setup, length, max */
-			param, param_len, 2,            /* param, length, max */
-			(char *)&data,  data_len, cli->max_xmit /* data, length, max */
-			)) {
+				NULL,                        /* name */
+				-1, 0,                          /* fid, flags */
+				&setup, 1, 0,                   /* setup, length, max */
+				param, param_len, 2,            /* param, length, max */
+				(char *)&data,  data_len, cli->max_xmit /* data, length, max */
+				)) {
 		cli->timeout = saved_timeout;
 		return False;
 	}
@@ -1270,9 +1156,9 @@
  POSIX Lock a file.
 ****************************************************************************/
 
-bool cli_posix_lock(struct cli_state *cli, int fnum,
+BOOL cli_posix_lock(struct cli_state *cli, int fnum,
 			SMB_BIG_UINT offset, SMB_BIG_UINT len,
-			bool wait_lock, enum brl_type lock_type)
+			BOOL wait_lock, enum brl_type lock_type)
 {
 	if (lock_type != READ_LOCK && lock_type != WRITE_LOCK) {
 		return False;
@@ -1284,7 +1170,7 @@
  POSIX Unlock a file.
 ****************************************************************************/
 
-bool cli_posix_unlock(struct cli_state *cli, int fnum, SMB_BIG_UINT offset, SMB_BIG_UINT len)
+BOOL cli_posix_unlock(struct cli_state *cli, int fnum, SMB_BIG_UINT offset, SMB_BIG_UINT len)
 {
 	return cli_posix_lock_internal(cli, fnum, offset, len, False, UNLOCK_LOCK);
 }
@@ -1293,7 +1179,7 @@
  POSIX Get any lock covering a file.
 ****************************************************************************/
 
-bool cli_posix_getlock(struct cli_state *cli, int fnum, SMB_BIG_UINT *poffset, SMB_BIG_UINT *plen)
+BOOL cli_posix_getlock(struct cli_state *cli, int fnum, SMB_BIG_UINT *poffset, SMB_BIG_UINT *plen)
 {
 	return True;
 }
@@ -1302,8 +1188,8 @@
  Do a SMBgetattrE call.
 ****************************************************************************/
 
-bool cli_getattrE(struct cli_state *cli, int fd,
-		  uint16 *attr, SMB_OFF_T *size,
+BOOL cli_getattrE(struct cli_state *cli, int fd, 
+		  uint16 *attr, SMB_OFF_T *size, 
 		  time_t *change_time,
                   time_t *access_time,
                   time_t *write_time)
@@ -1311,7 +1197,7 @@
 	memset(cli->outbuf,'\0',smb_size);
 	memset(cli->inbuf,'\0',smb_size);
 
-	cli_set_message(cli->outbuf,1,0,True);
+	set_message(cli->outbuf,1,0,True);
 
 	SCVAL(cli->outbuf,smb_com,SMBgetattrE);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -1323,7 +1209,7 @@
 	if (!cli_receive_smb(cli)) {
 		return False;
 	}
-
+	
 	if (cli_is_error(cli)) {
 		return False;
 	}
@@ -1355,7 +1241,7 @@
  Do a SMBgetatr call
 ****************************************************************************/
 
-bool cli_getatr(struct cli_state *cli, const char *fname,
+BOOL cli_getatr(struct cli_state *cli, const char *fname, 
 		uint16 *attr, SMB_OFF_T *size, time_t *write_time)
 {
 	char *p;
@@ -1363,7 +1249,7 @@
 	memset(cli->outbuf,'\0',smb_size);
 	memset(cli->inbuf,'\0',smb_size);
 
-	cli_set_message(cli->outbuf,0,0,True);
+	set_message(cli->outbuf,0,0,True);
 
 	SCVAL(cli->outbuf,smb_com,SMBgetatr);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -1371,8 +1257,7 @@
 
 	p = smb_buf(cli->outbuf);
 	*p++ = 4;
-	p += clistr_push(cli, p, fname,
-			cli->bufsize - PTR_DIFF(p,cli->outbuf), STR_TERMINATE);
+	p += clistr_push(cli, p, fname, -1, STR_TERMINATE);
 
 	cli_setup_bcc(cli, p);
 
@@ -1380,7 +1265,7 @@
 	if (!cli_receive_smb(cli)) {
 		return False;
 	}
-
+	
 	if (cli_is_error(cli)) {
 		return False;
 	}
@@ -1397,6 +1282,7 @@
 		*attr = SVAL(cli->inbuf,smb_vwv0);
 	}
 
+
 	return True;
 }
 
@@ -1404,7 +1290,7 @@
  Do a SMBsetattrE call.
 ****************************************************************************/
 
-bool cli_setattrE(struct cli_state *cli, int fd,
+BOOL cli_setattrE(struct cli_state *cli, int fd,
 		  time_t change_time,
                   time_t access_time,
                   time_t write_time)
@@ -1415,7 +1301,7 @@
 	memset(cli->outbuf,'\0',smb_size);
 	memset(cli->inbuf,'\0',smb_size);
 
-	cli_set_message(cli->outbuf,7,0,True);
+	set_message(cli->outbuf,7,0,True);
 
 	SCVAL(cli->outbuf,smb_com,SMBsetattrE);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -1435,7 +1321,7 @@
 	if (!cli_receive_smb(cli)) {
 		return False;
 	}
-
+	
 	if (cli_is_error(cli)) {
 		return False;
 	}
@@ -1447,14 +1333,14 @@
  Do a SMBsetatr call.
 ****************************************************************************/
 
-bool cli_setatr(struct cli_state *cli, const char *fname, uint16 attr, time_t t)
+BOOL cli_setatr(struct cli_state *cli, const char *fname, uint16 attr, time_t t)
 {
 	char *p;
 
 	memset(cli->outbuf,'\0',smb_size);
 	memset(cli->inbuf,'\0',smb_size);
 
-	cli_set_message(cli->outbuf,8,0,True);
+	set_message(cli->outbuf,8,0,True);
 
 	SCVAL(cli->outbuf,smb_com,SMBsetatr);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -1465,8 +1351,7 @@
 
 	p = smb_buf(cli->outbuf);
 	*p++ = 4;
-	p += clistr_push(cli, p, fname,
-			cli->bufsize - PTR_DIFF(p,cli->outbuf), STR_TERMINATE);
+	p += clistr_push(cli, p, fname, -1, STR_TERMINATE);
 	*p++ = 4;
 
 	cli_setup_bcc(cli, p);
@@ -1475,7 +1360,7 @@
 	if (!cli_receive_smb(cli)) {
 		return False;
 	}
-
+	
 	if (cli_is_error(cli)) {
 		return False;
 	}
@@ -1486,47 +1371,32 @@
 /****************************************************************************
  Check for existance of a dir.
 ****************************************************************************/
-
-bool cli_chkpath(struct cli_state *cli, const char *path)
+BOOL cli_chkpath(struct cli_state *cli, const char *path)
 {
-	char *path2 = NULL;
+	pstring path2;
 	char *p;
-	TALLOC_CTX *frame = talloc_stackframe();
-
-	path2 = talloc_strdup(frame, path);
-	if (!path2) {
-		TALLOC_FREE(frame);
-		return false;
-	}
+	
+	pstrcpy(path2,path);
 	trim_char(path2,'\0','\\');
-	if (!*path2) {
-		path2 = talloc_strdup(frame, "\\");
-		if (!path2) {
-			TALLOC_FREE(frame);
-			return false;
-		}
-	}
-
+	if (!*path2)
+		*path2 = '\\';
+	
 	memset(cli->outbuf,'\0',smb_size);
-	cli_set_message(cli->outbuf,0,0,True);
+	set_message(cli->outbuf,0,0,True);
 	SCVAL(cli->outbuf,smb_com,SMBcheckpath);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
 	cli_setup_packet(cli);
 	p = smb_buf(cli->outbuf);
 	*p++ = 4;
-	p += clistr_push(cli, p, path2,
-			cli->bufsize - PTR_DIFF(p,cli->outbuf), STR_TERMINATE);
+	p += clistr_push(cli, p, path2, -1, STR_TERMINATE);
 
 	cli_setup_bcc(cli, p);
 
 	cli_send_smb(cli);
 	if (!cli_receive_smb(cli)) {
-		TALLOC_FREE(frame);
 		return False;
 	}
 
-	TALLOC_FREE(frame);
-
 	if (cli_is_error(cli)) return False;
 
 	return True;
@@ -1536,10 +1406,10 @@
  Query disk space.
 ****************************************************************************/
 
-bool cli_dskattr(struct cli_state *cli, int *bsize, int *total, int *avail)
+BOOL cli_dskattr(struct cli_state *cli, int *bsize, int *total, int *avail)
 {
 	memset(cli->outbuf,'\0',smb_size);
-	cli_set_message(cli->outbuf,0,0,True);
+	set_message(cli->outbuf,0,0,True);
 	SCVAL(cli->outbuf,smb_com,SMBdskattr);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
 	cli_setup_packet(cli);
@@ -1552,7 +1422,7 @@
 	*bsize = SVAL(cli->inbuf,smb_vwv1)*SVAL(cli->inbuf,smb_vwv2);
 	*total = SVAL(cli->inbuf,smb_vwv0);
 	*avail = SVAL(cli->inbuf,smb_vwv3);
-
+	
 	return True;
 }
 
@@ -1568,7 +1438,7 @@
 	memset(cli->outbuf,'\0',smb_size);
 	memset(cli->inbuf,'\0',smb_size);
 
-	cli_set_message(cli->outbuf,3,0,True);
+	set_message(cli->outbuf,3,0,True);
 
 	SCVAL(cli->outbuf,smb_com,SMBctemp);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -1579,8 +1449,7 @@
 
 	p = smb_buf(cli->outbuf);
 	*p++ = 4;
-	p += clistr_push(cli, p, path,
-			cli->bufsize - PTR_DIFF(p,cli->outbuf), STR_TERMINATE);
+	p += clistr_push(cli, p, path, -1, STR_TERMINATE);
 
 	cli_setup_bcc(cli, p);
 
@@ -1598,22 +1467,20 @@
 	p = smb_buf(cli->inbuf);
 	p += 4;
 	len = smb_buflen(cli->inbuf) - 4;
-	if (len <= 0 || len > PATH_MAX) return -1;
+	if (len <= 0) return -1;
 
 	if (tmp_path) {
-		char *path2 = SMB_MALLOC_ARRAY(char, len+1);
-		if (!path2) {
-			return -1;
-		}
-		clistr_pull(cli, path2, p,
-			    len+1, len, STR_ASCII);
-		*tmp_path = path2;
+		pstring path2;
+		clistr_pull(cli, path2, p, 
+			    sizeof(path2), len, STR_ASCII);
+		*tmp_path = SMB_STRDUP(path2);
 	}
 
 	return SVAL(cli->inbuf,smb_vwv0);
 }
 
-/*
+
+/* 
    send a raw ioctl - used by the torture code
 */
 NTSTATUS cli_raw_ioctl(struct cli_state *cli, int fnum, uint32 code, DATA_BLOB *blob)
@@ -1621,7 +1488,7 @@
 	memset(cli->outbuf,'\0',smb_size);
 	memset(cli->inbuf,'\0',smb_size);
 
-	cli_set_message(cli->outbuf, 3, 0, True);
+	set_message(cli->outbuf, 3, 0, True);
 	SCVAL(cli->outbuf,smb_com,SMBioctl);
 	cli_setup_packet(cli);
 
@@ -1638,7 +1505,7 @@
 		return cli_nt_error(cli);
 	}
 
-	*blob = data_blob_null;
+	*blob = data_blob(NULL, 0);
 
 	return NT_STATUS_OK;
 }
@@ -1647,9 +1514,9 @@
  Set an extended attribute utility fn.
 *********************************************************/
 
-static bool cli_set_ea(struct cli_state *cli, uint16 setup, char *param, unsigned int param_len,
+static BOOL cli_set_ea(struct cli_state *cli, uint16 setup, char *param, unsigned int param_len,
 			const char *ea_name, const char *ea_val, size_t ea_len)
-{
+{	
 	unsigned int data_len = 0;
 	char *data = NULL;
 	char *rparam=NULL, *rdata=NULL;
@@ -1681,21 +1548,19 @@
 	}
 
 	if (!cli_send_trans(cli, SMBtrans2,
-			NULL,                        /* name */
-			-1, 0,                          /* fid, flags */
-			&setup, 1, 0,                   /* setup, length, max */
-			param, param_len, 2,            /* param, length, max */
-			data,  data_len, cli->max_xmit /* data, length, max */
-			)) {
-		SAFE_FREE(data);
-		return False;
+		NULL,                        /* name */
+		-1, 0,                          /* fid, flags */
+		&setup, 1, 0,                   /* setup, length, max */
+		param, param_len, 2,            /* param, length, max */
+		data,  data_len, cli->max_xmit /* data, length, max */
+		)) {
+			return False;
 	}
 
 	if (!cli_receive_trans(cli, SMBtrans2,
-			&rparam, &param_len,
-			&rdata, &data_len)) {
-			SAFE_FREE(data);
-		return false;
+		&rparam, &param_len,
+		&rdata, &data_len)) {
+			return False;
 	}
 
 	SAFE_FREE(data);
@@ -1709,36 +1574,29 @@
  Set an extended attribute on a pathname.
 *********************************************************/
 
-bool cli_set_ea_path(struct cli_state *cli, const char *path, const char *ea_name, const char *ea_val, size_t ea_len)
+BOOL cli_set_ea_path(struct cli_state *cli, const char *path, const char *ea_name, const char *ea_val, size_t ea_len)
 {
 	uint16 setup = TRANSACT2_SETPATHINFO;
 	unsigned int param_len = 0;
-	char *param;
+	char param[sizeof(pstring)+6];
 	size_t srclen = 2*(strlen(path)+1);
 	char *p;
-	bool ret;
 
-	param = SMB_MALLOC_ARRAY(char, 6+srclen+2);
-	if (!param) {
-		return false;
-	}
-	memset(param, '\0', 6);
+	memset(param, 0, sizeof(param));
 	SSVAL(param,0,SMB_INFO_SET_EA);
 	p = &param[6];
 
-	p += clistr_push(cli, p, path, srclen, STR_TERMINATE);
+	p += clistr_push(cli, p, path, MIN(srclen, sizeof(param)-6), STR_TERMINATE);
 	param_len = PTR_DIFF(p, param);
 
-	ret = cli_set_ea(cli, setup, param, param_len, ea_name, ea_val, ea_len);
-	SAFE_FREE(param);
-	return ret;
+	return cli_set_ea(cli, setup, param, param_len, ea_name, ea_val, ea_len);
 }
 
 /*********************************************************
  Set an extended attribute on an fnum.
 *********************************************************/
 
-bool cli_set_ea_fnum(struct cli_state *cli, int fnum, const char *ea_name, const char *ea_val, size_t ea_len)
+BOOL cli_set_ea_fnum(struct cli_state *cli, int fnum, const char *ea_name, const char *ea_val, size_t ea_len)
 {
 	char param[6];
 	uint16 setup = TRANSACT2_SETFILEINFO;
@@ -1754,7 +1612,7 @@
  Get an extended attribute list tility fn.
 *********************************************************/
 
-static bool cli_get_ea_list(struct cli_state *cli,
+static BOOL cli_get_ea_list(struct cli_state *cli,
 		uint16 setup, char *param, unsigned int param_len,
 		TALLOC_CTX *ctx,
 		size_t *pnum_eas,
@@ -1766,7 +1624,7 @@
 	char *p;
 	size_t ea_size;
 	size_t num_eas;
-	bool ret = False;
+	BOOL ret = False;
 	struct ea_struct *ea_list;
 
 	*pnum_eas = 0;
@@ -1879,39 +1737,31 @@
  Get an extended attribute list from a pathname.
 *********************************************************/
 
-bool cli_get_ea_list_path(struct cli_state *cli, const char *path,
+BOOL cli_get_ea_list_path(struct cli_state *cli, const char *path,
 		TALLOC_CTX *ctx,
 		size_t *pnum_eas,
 		struct ea_struct **pea_list)
 {
 	uint16 setup = TRANSACT2_QPATHINFO;
 	unsigned int param_len = 0;
-	char *param;
+	char param[sizeof(pstring)+6];
 	char *p;
-	size_t srclen = 2*(strlen(path)+1);
-	bool ret;
 
-	param = SMB_MALLOC_ARRAY(char, 6+srclen+2);
-	if (!param) {
-		return false;
-	}
 	p = param;
 	memset(p, 0, 6);
 	SSVAL(p, 0, SMB_INFO_QUERY_ALL_EAS);
 	p += 6;
-	p += clistr_push(cli, p, path, srclen, STR_TERMINATE);
+	p += clistr_push(cli, p, path, sizeof(pstring)-6, STR_TERMINATE);
 	param_len = PTR_DIFF(p, param);
 
-	ret = cli_get_ea_list(cli, setup, param, param_len, ctx, pnum_eas, pea_list);
-	SAFE_FREE(param);
-	return ret;
+	return cli_get_ea_list(cli, setup, param, param_len, ctx, pnum_eas, pea_list);
 }
 
 /*********************************************************
  Get an extended attribute list from an fnum.
 *********************************************************/
 
-bool cli_get_ea_list_fnum(struct cli_state *cli, int fnum,
+BOOL cli_get_ea_list_fnum(struct cli_state *cli, int fnum,
 		TALLOC_CTX *ctx,
 		size_t *pnum_eas,
 		struct ea_struct **pea_list)
@@ -1983,28 +1833,23 @@
  Open a file - POSIX semantics. Returns fnum. Doesn't request oplock.
 ****************************************************************************/
 
-static int cli_posix_open_internal(struct cli_state *cli, const char *fname, int flags, mode_t mode, bool is_dir)
+static int cli_posix_open_internal(struct cli_state *cli, const char *fname, int flags, mode_t mode, BOOL is_dir)
 {
 	unsigned int data_len = 0;
 	unsigned int param_len = 0;
 	uint16 setup = TRANSACT2_SETPATHINFO;
-	char *param;
+	char param[sizeof(pstring)+6];
 	char data[18];
 	char *rparam=NULL, *rdata=NULL;
 	char *p;
 	int fnum = -1;
 	uint32 wire_flags = open_flags_to_wire(flags);
-	size_t srclen = 2*(strlen(fname)+1);
 
-	param = SMB_MALLOC_ARRAY(char, 6+srclen+2);
-	if (!param) {
-		return false;
-	}
-	memset(param, '\0', 6);
+	memset(param, 0, sizeof(param));
 	SSVAL(param,0, SMB_POSIX_PATH_OPEN);
 	p = &param[6];
 
-	p += clistr_push(cli, p, fname, srclen, STR_TERMINATE);
+	p += clistr_push(cli, p, fname, sizeof(param)-6, STR_TERMINATE);
 	param_len = PTR_DIFF(p, param);
 
 	if (is_dir) {
@@ -2022,18 +1867,15 @@
 	data_len = 18;
 
 	if (!cli_send_trans(cli, SMBtrans2,
-			NULL,                        /* name */
-			-1, 0,                          /* fid, flags */
-			&setup, 1, 0,                   /* setup, length, max */
-			param, param_len, 2,            /* param, length, max */
-			(char *)&data,  data_len, cli->max_xmit /* data, length, max */
-			)) {
-		SAFE_FREE(param);
-		return -1;
+		NULL,                        /* name */
+		-1, 0,                          /* fid, flags */
+		&setup, 1, 0,                   /* setup, length, max */
+		param, param_len, 2,            /* param, length, max */
+		(char *)&data,  data_len, cli->max_xmit /* data, length, max */
+		)) {
+			return -1;
 	}
 
-	SAFE_FREE(param);
-
 	if (!cli_receive_trans(cli, SMBtrans2,
 		&rparam, &param_len,
 		&rdata, &data_len)) {
@@ -2070,26 +1912,21 @@
  unlink or rmdir - POSIX semantics.
 ****************************************************************************/
 
-static bool cli_posix_unlink_internal(struct cli_state *cli, const char *fname, bool is_dir)
+static BOOL cli_posix_unlink_internal(struct cli_state *cli, const char *fname, BOOL is_dir)
 {
 	unsigned int data_len = 0;
 	unsigned int param_len = 0;
 	uint16 setup = TRANSACT2_SETPATHINFO;
-	char *param;
+	char param[sizeof(pstring)+6];
 	char data[2];
 	char *rparam=NULL, *rdata=NULL;
 	char *p;
-	size_t srclen = 2*(strlen(fname)+1);
 
-	param = SMB_MALLOC_ARRAY(char, 6+srclen+2);
-	if (!param) {
-		return false;
-	}
-	memset(param, '\0', 6);
+	memset(param, 0, sizeof(param));
 	SSVAL(param,0, SMB_POSIX_PATH_UNLINK);
 	p = &param[6];
 
-	p += clistr_push(cli, p, fname, srclen, STR_TERMINATE);
+	p += clistr_push(cli, p, fname, sizeof(param)-6, STR_TERMINATE);
 	param_len = PTR_DIFF(p, param);
 
 	SSVAL(data, 0, is_dir ? SMB_POSIX_UNLINK_DIRECTORY_TARGET :
@@ -2097,18 +1934,15 @@
 	data_len = 2;
 
 	if (!cli_send_trans(cli, SMBtrans2,
-			NULL,                        /* name */
-			-1, 0,                          /* fid, flags */
-			&setup, 1, 0,                   /* setup, length, max */
-			param, param_len, 2,            /* param, length, max */
-			(char *)&data,  data_len, cli->max_xmit /* data, length, max */
-			)) {
-		SAFE_FREE(param);
-		return False;
+		NULL,                        /* name */
+		-1, 0,                          /* fid, flags */
+		&setup, 1, 0,                   /* setup, length, max */
+		param, param_len, 2,            /* param, length, max */
+		(char *)&data,  data_len, cli->max_xmit /* data, length, max */
+		)) {
+			return False;
 	}
 
-	SAFE_FREE(param);
-
 	if (!cli_receive_trans(cli, SMBtrans2,
 		&rparam, &param_len,
 		&rdata, &data_len)) {
@@ -2125,7 +1959,7 @@
  unlink - POSIX semantics.
 ****************************************************************************/
 
-bool cli_posix_unlink(struct cli_state *cli, const char *fname)
+BOOL cli_posix_unlink(struct cli_state *cli, const char *fname)
 {
 	return cli_posix_unlink_internal(cli, fname, False);
 }

Modified: branches/samba/upstream/source/libsmb/clifsinfo.c
===================================================================
--- branches/samba/upstream/source/libsmb/clifsinfo.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/clifsinfo.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -2,11 +2,10 @@
    Unix SMB/CIFS implementation.
    FS info functions
    Copyright (C) Stefan (metze) Metzmacher	2003
-   Copyright (C) Jeremy Allison 2007
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -23,29 +23,29 @@
 /****************************************************************************
  Get UNIX extensions version info.
 ****************************************************************************/
-
-bool cli_unix_extensions_version(struct cli_state *cli, uint16 *pmajor, uint16 *pminor,
+                                                                                                                   
+BOOL cli_unix_extensions_version(struct cli_state *cli, uint16 *pmajor, uint16 *pminor,
                                         uint32 *pcaplow, uint32 *pcaphigh)
 {
-	bool ret = False;
+	BOOL ret = False;
 	uint16 setup;
 	char param[2];
 	char *rparam=NULL, *rdata=NULL;
 	unsigned int rparam_count=0, rdata_count=0;
 
 	setup = TRANSACT2_QFSINFO;
-
+	
 	SSVAL(param,0,SMB_QUERY_CIFS_UNIX_INFO);
 
-	if (!cli_send_trans(cli, SMBtrans2,
-		    NULL,
+	if (!cli_send_trans(cli, SMBtrans2, 
+		    NULL, 
 		    0, 0,
 		    &setup, 1, 0,
 		    param, 2, 0,
 		    NULL, 0, 560)) {
 		goto cleanup;
 	}
-
+	
 	if (!cli_receive_trans(cli, SMBtrans2,
                               &rparam, &rparam_count,
                               &rdata, &rdata_count)) {
@@ -65,10 +65,10 @@
 
 	*pmajor = SVAL(rdata,0);
 	*pminor = SVAL(rdata,2);
-	cli->posix_capabilities = *pcaplow = IVAL(rdata,4);
+	*pcaplow = IVAL(rdata,4);
 	*pcaphigh = IVAL(rdata,8);
 
-	/* todo: but not yet needed
+	/* todo: but not yet needed 
 	 *       return the other stuff
 	 */
 
@@ -76,17 +76,17 @@
 	SAFE_FREE(rparam);
 	SAFE_FREE(rdata);
 
-	return ret;
+	return ret;	
 }
 
 /****************************************************************************
  Set UNIX extensions capabilities.
 ****************************************************************************/
-
-bool cli_set_unix_extensions_capabilities(struct cli_state *cli, uint16 major, uint16 minor,
+                                                                                                                   
+BOOL cli_set_unix_extensions_capabilities(struct cli_state *cli, uint16 major, uint16 minor,
                                         uint32 caplow, uint32 caphigh)
 {
-	bool ret = False;
+	BOOL ret = False;
 	uint16 setup;
 	char param[4];
 	char data[12];
@@ -94,7 +94,7 @@
 	unsigned int rparam_count=0, rdata_count=0;
 
 	setup = TRANSACT2_SETFSINFO;
-
+	
 	SSVAL(param,0,0);
 	SSVAL(param,2,SMB_SET_CIFS_UNIX_INFO);
 
@@ -103,15 +103,15 @@
 	SIVAL(data,4,caplow);
 	SIVAL(data,8,caphigh);
 
-	if (!cli_send_trans(cli, SMBtrans2,
-		    NULL,
+	if (!cli_send_trans(cli, SMBtrans2, 
+		    NULL, 
 		    0, 0,
 		    &setup, 1, 0,
 		    param, 4, 0,
 		    data, 12, 560)) {
 		goto cleanup;
 	}
-
+	
 	if (!cli_receive_trans(cli, SMBtrans2,
                               &rparam, &rparam_count,
                               &rdata, &rdata_count)) {
@@ -129,12 +129,12 @@
 	SAFE_FREE(rparam);
 	SAFE_FREE(rdata);
 
-	return ret;
+	return ret;	
 }
 
-bool cli_get_fs_attr_info(struct cli_state *cli, uint32 *fs_attr)
+BOOL cli_get_fs_attr_info(struct cli_state *cli, uint32 *fs_attr)
 {
-	bool ret = False;
+	BOOL ret = False;
 	uint16 setup;
 	char param[2];
 	char *rparam=NULL, *rdata=NULL;
@@ -144,18 +144,18 @@
 		smb_panic("cli_get_fs_attr_info() called with NULL Pionter!");
 
 	setup = TRANSACT2_QFSINFO;
-
+	
 	SSVAL(param,0,SMB_QUERY_FS_ATTRIBUTE_INFO);
 
-	if (!cli_send_trans(cli, SMBtrans2,
-		    NULL,
+	if (!cli_send_trans(cli, SMBtrans2, 
+		    NULL, 
 		    0, 0,
 		    &setup, 1, 0,
 		    param, 2, 0,
 		    NULL, 0, 560)) {
 		goto cleanup;
 	}
-
+	
 	if (!cli_receive_trans(cli, SMBtrans2,
                               &rparam, &rparam_count,
                               &rdata, &rdata_count)) {
@@ -175,7 +175,7 @@
 
 	*fs_attr = IVAL(rdata,0);
 
-	/* todo: but not yet needed
+	/* todo: but not yet needed 
 	 *       return the other stuff
 	 */
 
@@ -183,12 +183,12 @@
 	SAFE_FREE(rparam);
 	SAFE_FREE(rdata);
 
-	return ret;
+	return ret;	
 }
 
-bool cli_get_fs_volume_info_old(struct cli_state *cli, fstring volume_name, uint32 *pserial_number)
+BOOL cli_get_fs_volume_info_old(struct cli_state *cli, fstring volume_name, uint32 *pserial_number)
 {
-	bool ret = False;
+	BOOL ret = False;
 	uint16 setup;
 	char param[2];
 	char *rparam=NULL, *rdata=NULL;
@@ -196,18 +196,18 @@
 	unsigned char nlen;
 
 	setup = TRANSACT2_QFSINFO;
-
+	
 	SSVAL(param,0,SMB_INFO_VOLUME);
 
-	if (!cli_send_trans(cli, SMBtrans2,
-		    NULL,
+	if (!cli_send_trans(cli, SMBtrans2, 
+		    NULL, 
 		    0, 0,
 		    &setup, 1, 0,
 		    param, 2, 0,
 		    NULL, 0, 560)) {
 		goto cleanup;
 	}
-
+	
 	if (!cli_receive_trans(cli, SMBtrans2,
                               &rparam, &rparam_count,
                               &rdata, &rdata_count)) {
@@ -231,7 +231,7 @@
 	nlen = CVAL(rdata,l2_vol_cch);
 	clistr_pull(cli, volume_name, rdata + l2_vol_szVolLabel, sizeof(fstring), nlen, STR_NOALIGN);
 
-	/* todo: but not yet needed
+	/* todo: but not yet needed 
 	 *       return the other stuff
 	 */
 
@@ -239,12 +239,12 @@
 	SAFE_FREE(rparam);
 	SAFE_FREE(rdata);
 
-	return ret;
+	return ret;	
 }
 
-bool cli_get_fs_volume_info(struct cli_state *cli, fstring volume_name, uint32 *pserial_number, time_t *pdate)
+BOOL cli_get_fs_volume_info(struct cli_state *cli, fstring volume_name, uint32 *pserial_number, time_t *pdate)
 {
-	bool ret = False;
+	BOOL ret = False;
 	uint16 setup;
 	char param[2];
 	char *rparam=NULL, *rdata=NULL;
@@ -252,18 +252,18 @@
 	unsigned int nlen;
 
 	setup = TRANSACT2_QFSINFO;
-
+	
 	SSVAL(param,0,SMB_QUERY_FS_VOLUME_INFO);
 
-	if (!cli_send_trans(cli, SMBtrans2,
-		    NULL,
+	if (!cli_send_trans(cli, SMBtrans2, 
+		    NULL, 
 		    0, 0,
 		    &setup, 1, 0,
 		    param, 2, 0,
 		    NULL, 0, 560)) {
 		goto cleanup;
 	}
-
+	
 	if (!cli_receive_trans(cli, SMBtrans2,
                               &rparam, &rparam_count,
                               &rdata, &rdata_count)) {
@@ -292,7 +292,7 @@
 	nlen = IVAL(rdata,12);
 	clistr_pull(cli, volume_name, rdata + 18, sizeof(fstring), nlen, STR_UNICODE);
 
-	/* todo: but not yet needed
+	/* todo: but not yet needed 
 	 *       return the other stuff
 	 */
 
@@ -300,365 +300,5 @@
 	SAFE_FREE(rparam);
 	SAFE_FREE(rdata);
 
-	return ret;
+	return ret;	
 }
-
-/******************************************************************************
- Send/receive the request encryption blob.
-******************************************************************************/
-
-static NTSTATUS enc_blob_send_receive(struct cli_state *cli, DATA_BLOB *in, DATA_BLOB *out, DATA_BLOB *param_out)
-{
-	uint16 setup;
-	char param[4];
-	char *rparam=NULL, *rdata=NULL;
-	unsigned int rparam_count=0, rdata_count=0;
-	NTSTATUS status = NT_STATUS_OK;
-
-	setup = TRANSACT2_SETFSINFO;
-
-	SSVAL(param,0,0);
-	SSVAL(param,2,SMB_REQUEST_TRANSPORT_ENCRYPTION);
-
-	if (!cli_send_trans(cli, SMBtrans2,
-				NULL,
-				0, 0,
-				&setup, 1, 0,
-				param, 4, 0,
-				(char *)in->data, in->length, CLI_BUFFER_SIZE)) {
-		status = cli_nt_error(cli);
-		goto out;
-	}
-
-	if (!cli_receive_trans(cli, SMBtrans2,
-				&rparam, &rparam_count,
-				&rdata, &rdata_count)) {
-		status = cli_nt_error(cli);
-		goto out;
-	}
-
-	if (cli_is_error(cli)) {
-		status = cli_nt_error(cli);
-		if (!NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
-			goto out;
-		}
-	}
-
-	*out = data_blob(rdata, rdata_count);
-	*param_out = data_blob(rparam, rparam_count);
-
-  out:
-
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-	return status;
-}
-
-/******************************************************************************
- Make a client state struct.
-******************************************************************************/
-
-static struct smb_trans_enc_state *make_cli_enc_state(enum smb_trans_enc_type smb_enc_type)
-{
-	struct smb_trans_enc_state *es = NULL;
-	es = SMB_MALLOC_P(struct smb_trans_enc_state);
-	if (!es) {
-		return NULL;
-	}
-	ZERO_STRUCTP(es);
-	es->smb_enc_type = smb_enc_type;
-
-#if defined(HAVE_GSSAPI) && defined(HAVE_KRB5)
-	if (smb_enc_type == SMB_TRANS_ENC_GSS) {
-		es->s.gss_state = SMB_MALLOC_P(struct smb_tran_enc_state_gss);
-		if (!es->s.gss_state) {
-			SAFE_FREE(es);
-			return NULL;
-		}
-		ZERO_STRUCTP(es->s.gss_state);
-	}
-#endif
-	return es;
-}
-
-/******************************************************************************
- Start a raw ntlmssp encryption.
-******************************************************************************/
-
-NTSTATUS cli_raw_ntlm_smb_encryption_start(struct cli_state *cli, 
-				const char *user,
-				const char *pass,
-				const char *domain)
-{
-	DATA_BLOB blob_in = data_blob_null;
-	DATA_BLOB blob_out = data_blob_null;
-	DATA_BLOB param_out = data_blob_null;
-	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
-	struct smb_trans_enc_state *es = make_cli_enc_state(SMB_TRANS_ENC_NTLM);
-
-	if (!es) {
-		return NT_STATUS_NO_MEMORY;
-	}
-	status = ntlmssp_client_start(&es->s.ntlmssp_state);
-	if (!NT_STATUS_IS_OK(status)) {
-		goto fail;
-	}
-
-	ntlmssp_want_feature(es->s.ntlmssp_state, NTLMSSP_FEATURE_SESSION_KEY);
-	es->s.ntlmssp_state->neg_flags |= (NTLMSSP_NEGOTIATE_SIGN|NTLMSSP_NEGOTIATE_SEAL);
-
-	if (!NT_STATUS_IS_OK(status = ntlmssp_set_username(es->s.ntlmssp_state, user))) {
-		goto fail;
-	}
-	if (!NT_STATUS_IS_OK(status = ntlmssp_set_domain(es->s.ntlmssp_state, domain))) {
-		goto fail;
-	}
-	if (!NT_STATUS_IS_OK(status = ntlmssp_set_password(es->s.ntlmssp_state, pass))) {
-		goto fail;
-	}
-
-	do {
-		status = ntlmssp_update(es->s.ntlmssp_state, blob_in, &blob_out);
-		data_blob_free(&blob_in);
-		data_blob_free(&param_out);
-		if (NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED) || NT_STATUS_IS_OK(status)) {
-			NTSTATUS trans_status = enc_blob_send_receive(cli,
-									&blob_out,
-									&blob_in,
-									&param_out);
-			if (!NT_STATUS_EQUAL(trans_status,
-					NT_STATUS_MORE_PROCESSING_REQUIRED) &&
-					!NT_STATUS_IS_OK(trans_status)) {
-				status = trans_status;
-			} else {
-				if (param_out.length == 2) {
-					es->enc_ctx_num = SVAL(param_out.data, 0);
-				}
-			}
-		}
-		data_blob_free(&blob_out);
-	} while (NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED));
-
-	data_blob_free(&blob_in);
-
-	if (NT_STATUS_IS_OK(status)) {
-		/* Replace the old state, if any. */
-		if (cli->trans_enc_state) {
-			common_free_encryption_state(&cli->trans_enc_state);
-		}
-		cli->trans_enc_state = es;
-		cli->trans_enc_state->enc_on = True;
-		es = NULL;
-	}
-
-  fail:
-
-	common_free_encryption_state(&es);
-	return status;
-}
-
-#if defined(HAVE_GSSAPI) && defined(HAVE_KRB5)
-
-#ifndef SMB_GSS_REQUIRED_FLAGS
-#define SMB_GSS_REQUIRED_FLAGS (GSS_C_CONF_FLAG|GSS_C_INTEG_FLAG|GSS_C_MUTUAL_FLAG|GSS_C_REPLAY_FLAG|GSS_C_SEQUENCE_FLAG)
-#endif
-
-/******************************************************************************
- Get client gss blob to send to a server.
-******************************************************************************/
-
-static NTSTATUS make_cli_gss_blob(struct smb_trans_enc_state *es,
-				const char *service,
-				const char *host,
-				NTSTATUS status_in,
-				DATA_BLOB spnego_blob_in,
-				DATA_BLOB *p_blob_out)
-{
-	const char *krb_mechs[] = {OID_KERBEROS5, NULL};
-	OM_uint32 ret;
-	OM_uint32 min;
-	gss_name_t srv_name;
-	gss_buffer_desc input_name;
-	gss_buffer_desc *p_tok_in;
-	gss_buffer_desc tok_out, tok_in;
-	DATA_BLOB blob_out = data_blob_null;
-	DATA_BLOB blob_in = data_blob_null;
-	char *host_princ_s = NULL;
-	OM_uint32 ret_flags = 0;
-	NTSTATUS status = NT_STATUS_OK;
-
-	gss_OID_desc nt_hostbased_service =
-	{10, CONST_DISCARD(char *,"\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x04")};
-
-	memset(&tok_out, '\0', sizeof(tok_out));
-
-	/* Get a ticket for the service at host */
-	if (asprintf(&host_princ_s, "%s@%s", service, host) == -1) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	input_name.value = host_princ_s;
-	input_name.length = strlen(host_princ_s) + 1;
-
-	ret = gss_import_name(&min,
-				&input_name,
-				&nt_hostbased_service,
-				&srv_name);
-
-	if (ret != GSS_S_COMPLETE) {
-		SAFE_FREE(host_princ_s);
-		return map_nt_error_from_gss(ret, min);
-	}
-
-	if (spnego_blob_in.length == 0) {
-		p_tok_in = GSS_C_NO_BUFFER;
-	} else {
-		/* Remove the SPNEGO wrapper */
-		if (!spnego_parse_auth_response(spnego_blob_in, status_in, OID_KERBEROS5, &blob_in)) {
-			status = NT_STATUS_UNSUCCESSFUL;
-			goto fail;
-		}
-		tok_in.value = blob_in.data;
-		tok_in.length = blob_in.length;
-		p_tok_in = &tok_in;
-	}
-
-	ret = gss_init_sec_context(&min,
-				GSS_C_NO_CREDENTIAL, /* Use our default cred. */
-				&es->s.gss_state->gss_ctx,
-				srv_name,
-				GSS_C_NO_OID, /* default OID. */
-				GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG | GSS_C_SEQUENCE_FLAG,
-				GSS_C_INDEFINITE,	/* requested ticket lifetime. */
-				NULL,   /* no channel bindings */
-				p_tok_in,
-				NULL,   /* ignore mech type */
-				&tok_out,
-				&ret_flags,
-				NULL);  /* ignore time_rec */
-
-	status = map_nt_error_from_gss(ret, min);
-	if (!NT_STATUS_IS_OK(status) && !NT_STATUS_EQUAL(status,NT_STATUS_MORE_PROCESSING_REQUIRED)) {
-		ADS_STATUS adss = ADS_ERROR_GSS(ret, min);
-		DEBUG(10,("make_cli_gss_blob: gss_init_sec_context failed with %s\n",
-			ads_errstr(adss)));
-		goto fail;
-	}
-
-	if ((ret_flags & SMB_GSS_REQUIRED_FLAGS) != SMB_GSS_REQUIRED_FLAGS) {
-		status = NT_STATUS_ACCESS_DENIED;
-	}
-
-	blob_out = data_blob(tok_out.value, tok_out.length);
-
-	/* Wrap in an SPNEGO wrapper */
-	*p_blob_out = gen_negTokenTarg(krb_mechs, blob_out);
-
-  fail:
-
-	data_blob_free(&blob_out);
-	data_blob_free(&blob_in);
-	SAFE_FREE(host_princ_s);
-	gss_release_name(&min, &srv_name);
-	if (tok_out.value) {
-		gss_release_buffer(&min, &tok_out);
-	}
-	return status;
-}
-
-/******************************************************************************
- Start a SPNEGO gssapi encryption context.
-******************************************************************************/
-
-NTSTATUS cli_gss_smb_encryption_start(struct cli_state *cli)
-{
-	DATA_BLOB blob_recv = data_blob_null;
-	DATA_BLOB blob_send = data_blob_null;
-	DATA_BLOB param_out = data_blob_null;
-	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
-	fstring fqdn;
-	const char *servicename;
-	struct smb_trans_enc_state *es = make_cli_enc_state(SMB_TRANS_ENC_GSS);
-
-	if (!es) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	name_to_fqdn(fqdn, cli->desthost);
-	strlower_m(fqdn);
-
-	servicename = "cifs";
-	status = make_cli_gss_blob(es, servicename, fqdn, NT_STATUS_OK, blob_recv, &blob_send);
-	if (!NT_STATUS_EQUAL(status,NT_STATUS_MORE_PROCESSING_REQUIRED)) {
-		servicename = "host";
-		status = make_cli_gss_blob(es, servicename, fqdn, NT_STATUS_OK, blob_recv, &blob_send);
-		if (!NT_STATUS_EQUAL(status,NT_STATUS_MORE_PROCESSING_REQUIRED)) {
-			goto fail;
-		}
-	}
-
-	do {
-		data_blob_free(&blob_recv);
-		status = enc_blob_send_receive(cli, &blob_send, &blob_recv, &param_out);
-		if (param_out.length == 2) {
-			es->enc_ctx_num = SVAL(param_out.data, 0);
-		}
-		data_blob_free(&blob_send);
-		status = make_cli_gss_blob(es, servicename, fqdn, status, blob_recv, &blob_send);
-	} while (NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED));
-	data_blob_free(&blob_recv);
-
-	if (NT_STATUS_IS_OK(status)) {
-		/* Replace the old state, if any. */
-		if (cli->trans_enc_state) {
-			common_free_encryption_state(&cli->trans_enc_state);
-		}
-		cli->trans_enc_state = es;
-		cli->trans_enc_state->enc_on = True;
-		es = NULL;
-	}
-
-  fail:
-
-	common_free_encryption_state(&es);
-	return status;
-}
-#else
-NTSTATUS cli_gss_smb_encryption_start(struct cli_state *cli)
-{
-	return NT_STATUS_NOT_SUPPORTED;
-}
-#endif
-
-/********************************************************************
- Ensure a connection is encrypted.
-********************************************************************/
-
-NTSTATUS cli_force_encryption(struct cli_state *c,
-			const char *username,
-			const char *password,
-			const char *domain)
-{
-	uint16 major, minor;
-	uint32 caplow, caphigh;
-
-	if (!SERVER_HAS_UNIX_CIFS(c)) {
-		return NT_STATUS_NOT_SUPPORTED;
-	}
-
-	if (!cli_unix_extensions_version(c, &major, &minor, &caplow, &caphigh)) {
-		return NT_STATUS_UNKNOWN_REVISION;
-	}
-
-	if (!(caplow & CIFS_UNIX_TRANSPORT_ENCRYPTION_CAP)) {
-		return NT_STATUS_UNSUPPORTED_COMPRESSION;
-	}
-
-	if (c->use_kerberos) {
-		return cli_gss_smb_encryption_start(c);
-	}
-	return cli_raw_ntlm_smb_encryption_start(c,
-					username,
-					password,
-					domain);
-}

Modified: branches/samba/upstream/source/libsmb/clikrb5.c
===================================================================
--- branches/samba/upstream/source/libsmb/clikrb5.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/clikrb5.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,11 +4,11 @@
    Copyright (C) Andrew Tridgell 2001
    Copyright (C) Luke Howard 2002-2003
    Copyright (C) Andrew Bartlett <abartlet at samba.org> 2005
-   Copyright (C) Guenther Deschner 2005-2007
+   Copyright (C) Guenther Deschner 2005
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #define KRB5_PRIVATE    1       /* this file uses PRIVATE interfaces! */
@@ -27,11 +28,11 @@
 
 #ifdef HAVE_KRB5
 
-#ifdef HAVE_KRB5_KEYBLOCK_KEYVALUE /* Heimdal */
-#define KRB5_KEY_TYPE(k)	((k)->keytype) 
+#ifdef HAVE_KRB5_KEYBLOCK_KEYVALUE
+#define KRB5_KEY_TYPE(k)	((k)->keytype)
 #define KRB5_KEY_LENGTH(k)	((k)->keyvalue.length)
 #define KRB5_KEY_DATA(k)	((k)->keyvalue.data)
-#else /* MIT */
+#else
 #define	KRB5_KEY_TYPE(k)	((k)->enctype)
 #define KRB5_KEY_LENGTH(k)	((k)->length)
 #define KRB5_KEY_DATA(k)	((k)->contents)
@@ -162,45 +163,19 @@
 
 #if defined(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS)
 /* HEIMDAL */
- bool setup_kaddr( krb5_address *pkaddr, struct sockaddr_storage *paddr)
+ void setup_kaddr( krb5_address *pkaddr, struct sockaddr *paddr)
 {
-	memset(pkaddr, '\0', sizeof(krb5_address));
-#if defined(HAVE_IPV6) && defined(KRB5_ADDRESS_INET6)
-	if (paddr->ss_family == AF_INET6) {
-		pkaddr->addr_type = KRB5_ADDRESS_INET6;
-		pkaddr->address.length = sizeof(((struct sockaddr_in6 *)paddr)->sin6_addr);
-		pkaddr->address.data = (char *)&(((struct sockaddr_in6 *)paddr)->sin6_addr);
-		return true;
-	}
-#endif
-	if (paddr->ss_family == AF_INET) {
-		pkaddr->addr_type = KRB5_ADDRESS_INET;
-		pkaddr->address.length = sizeof(((struct sockaddr_in *)paddr)->sin_addr);
-		pkaddr->address.data = (char *)&(((struct sockaddr_in *)paddr)->sin_addr);
-		return true;
-	}
-	return false;
+	pkaddr->addr_type = KRB5_ADDRESS_INET;
+	pkaddr->address.length = sizeof(((struct sockaddr_in *)paddr)->sin_addr);
+	pkaddr->address.data = (char *)&(((struct sockaddr_in *)paddr)->sin_addr);
 }
 #elif defined(HAVE_ADDRTYPE_IN_KRB5_ADDRESS)
 /* MIT */
- bool setup_kaddr( krb5_address *pkaddr, struct sockaddr_storage *paddr)
+ void setup_kaddr( krb5_address *pkaddr, struct sockaddr *paddr)
 {
-	memset(pkaddr, '\0', sizeof(krb5_address));
-#if defined(HAVE_IPV6) && defined(ADDRTYPE_INET6)
-	if (paddr->ss_family == AF_INET6) {
-		pkaddr->addrtype = ADDRTYPE_INET6;
-		pkaddr->length = sizeof(((struct sockaddr_in6 *)paddr)->sin6_addr);
-		pkaddr->contents = (krb5_octet *)&(((struct sockaddr_in6 *)paddr)->sin6_addr);
-		return true;
-	}
-#endif
-	if (paddr->ss_family == AF_INET) {
-		pkaddr->addrtype = ADDRTYPE_INET;
-		pkaddr->length = sizeof(((struct sockaddr_in *)paddr)->sin_addr);
-		pkaddr->contents = (krb5_octet *)&(((struct sockaddr_in *)paddr)->sin_addr);
-		return true;
-	}
-	return false;
+	pkaddr->addrtype = ADDRTYPE_INET;
+	pkaddr->length = sizeof(((struct sockaddr_in *)paddr)->sin_addr);
+	pkaddr->contents = (krb5_octet *)&(((struct sockaddr_in *)paddr)->sin_addr);
 }
 #else
 #error UNKNOWN_ADDRTYPE
@@ -297,47 +272,8 @@
 }
 #endif
 
-bool unwrap_edata_ntstatus(TALLOC_CTX *mem_ctx, 
-			   DATA_BLOB *edata, 
-			   DATA_BLOB *edata_out)
+BOOL unwrap_pac(TALLOC_CTX *mem_ctx, DATA_BLOB *auth_data, DATA_BLOB *unwrapped_pac_data)
 {
-	DATA_BLOB edata_contents;
-	ASN1_DATA data;
-	int edata_type;
-
-	if (!edata->length) {
-		return False;
-	}
-
-	asn1_load(&data, *edata);
-	asn1_start_tag(&data, ASN1_SEQUENCE(0));
-	asn1_start_tag(&data, ASN1_CONTEXT(1));
-	asn1_read_Integer(&data, &edata_type);
-
-	if (edata_type != KRB5_PADATA_PW_SALT) {
-		DEBUG(0,("edata is not of required type %d but of type %d\n", 
-			KRB5_PADATA_PW_SALT, edata_type));
-		asn1_free(&data);
-		return False;
-	}
-	
-	asn1_start_tag(&data, ASN1_CONTEXT(2));
-	asn1_read_OctetString(&data, &edata_contents);
-	asn1_end_tag(&data);
-	asn1_end_tag(&data);
-	asn1_end_tag(&data);
-	asn1_free(&data);
-
-	*edata_out = data_blob_talloc(mem_ctx, edata_contents.data, edata_contents.length);
-
-	data_blob_free(&edata_contents);
-
-	return True;
-}
-
-
-bool unwrap_pac(TALLOC_CTX *mem_ctx, DATA_BLOB *auth_data, DATA_BLOB *unwrapped_pac_data)
-{
 	DATA_BLOB pac_contents;
 	ASN1_DATA data;
 	int data_type;
@@ -373,10 +309,10 @@
 	return True;
 }
 
- bool get_auth_data_from_tkt(TALLOC_CTX *mem_ctx, DATA_BLOB *auth_data, krb5_ticket *tkt)
+ BOOL get_auth_data_from_tkt(TALLOC_CTX *mem_ctx, DATA_BLOB *auth_data, krb5_ticket *tkt)
 {
 	DATA_BLOB auth_data_wrapped;
-	bool got_auth_data_pac = False;
+	BOOL got_auth_data_pac = False;
 	int i;
 	
 #if defined(HAVE_KRB5_TKT_ENC_PART2)
@@ -399,7 +335,7 @@
 			/* check if it is a PAC */
 			got_auth_data_pac = unwrap_pac(mem_ctx, &auth_data_wrapped, auth_data);
 			data_blob_free(&auth_data_wrapped);
-
+			
 			if (got_auth_data_pac) {
 				return true;
 			}
@@ -566,7 +502,7 @@
 #endif
 }
 
- bool kerberos_compatible_enctypes(krb5_context context,
+ BOOL kerberos_compatible_enctypes(krb5_context context,
 				  krb5_enctype enctype1,
 				  krb5_enctype enctype2)
 {
@@ -580,7 +516,7 @@
 #endif
 }
 
-static bool ads_cleanup_expired_creds(krb5_context context, 
+static BOOL ads_cleanup_expired_creds(krb5_context context, 
 				      krb5_ccache  ccache,
 				      krb5_creds  *credsp)
 {
@@ -633,7 +569,7 @@
 	krb5_creds 		* credsp;
 	krb5_creds 		  creds;
 	krb5_data in_data;
-	bool creds_ready = False;
+	BOOL creds_ready = False;
 	int i = 0, maxtries = 3;
 	
 	retval = smb_krb5_parse_name(context, principal, &server);
@@ -785,11 +721,11 @@
 	return retval;
 }
 
- bool get_krb5_smb_session_key(krb5_context context, krb5_auth_context auth_context, DATA_BLOB *session_key, bool remote)
+ BOOL get_krb5_smb_session_key(krb5_context context, krb5_auth_context auth_context, DATA_BLOB *session_key, BOOL remote)
  {
 	krb5_keyblock *skey;
 	krb5_error_code err;
-	bool ret = False;
+	BOOL ret = False;
 
 	if (remote)
 		err = krb5_auth_con_getremotesubkey(context, auth_context, &skey);
@@ -835,22 +771,22 @@
 #endif
 }
 
- void smb_krb5_checksum_from_pac_sig(krb5_checksum *cksum,
-				     struct PAC_SIGNATURE_DATA *sig)
+ void smb_krb5_checksum_from_pac_sig(krb5_checksum *cksum, 
+				    PAC_SIGNATURE_DATA *sig)
 {
 #ifdef HAVE_CHECKSUM_IN_KRB5_CHECKSUM
 	cksum->cksumtype	= (krb5_cksumtype)sig->type;
-	cksum->checksum.length	= sig->signature.length;
-	cksum->checksum.data	= sig->signature.data;
+	cksum->checksum.length	= sig->signature.buf_len;
+	cksum->checksum.data	= sig->signature.buffer;
 #else
 	cksum->checksum_type	= (krb5_cksumtype)sig->type;
-	cksum->length		= sig->signature.length;
-	cksum->contents		= sig->signature.data;
+	cksum->length		= sig->signature.buf_len;
+	cksum->contents		= sig->signature.buffer;
 #endif
 }
 
  krb5_error_code smb_krb5_verify_checksum(krb5_context context,
-					  const krb5_keyblock *keyblock,
+					 krb5_keyblock *keyblock,
 					 krb5_keyusage usage,
 					 krb5_checksum *cksum,
 					 uint8 *data,
@@ -976,9 +912,9 @@
 	   may be in the middle of a keytab enumeration when this is
 	   called. JRA. */
 
-	ret = smb_krb5_open_keytab(context, NULL, False, &keytab);
+	ret = krb5_kt_default(context, &keytab);
 	if (ret) {
-		DEBUG(1,("get_key_from_keytab: smb_krb5_open_keytab failed (%s)\n", error_message(ret)));
+		DEBUG(0,("get_key_from_keytab: failed to open keytab: %s\n", error_message(ret)));
 		return ret;
 	}
 
@@ -1121,7 +1057,7 @@
 	return smb_krb5_parse_name(context, name, principal);
 }
 
- bool smb_krb5_principal_compare_any_realm(krb5_context context, 
+ BOOL smb_krb5_principal_compare_any_realm(krb5_context context, 
 					  krb5_const_principal princ1, 
 					  krb5_const_principal princ2)
 {
@@ -1165,11 +1101,7 @@
 	krb5_context context = NULL;
 	krb5_ccache ccache = NULL;
 	krb5_principal client = NULL;
-	krb5_creds creds, creds_in, *creds_out = NULL;
 
-	ZERO_STRUCT(creds);
-	ZERO_STRUCT(creds_in);
-
 	initialize_krb5_error_table();
 	ret = krb5_init_context(&context);
 	if (ret) {
@@ -1180,11 +1112,6 @@
 		ccache_string = krb5_cc_default_name(context);
 	}
 
-	if (!ccache_string) {
-		ret = EINVAL;
-		goto done;
-	}
-
 	DEBUG(10,("smb_krb5_renew_ticket: using %s as ccache\n", ccache_string));
 
 	/* FIXME: we should not fall back to defaults */
@@ -1193,34 +1120,61 @@
 		goto done;
 	}
 
-	if (client_string) {
-		ret = smb_krb5_parse_name(context, client_string, &client);
-		if (ret) {
-			goto done;
+#ifdef HAVE_KRB5_GET_RENEWED_CREDS	/* MIT */
+	{
+		krb5_creds creds;
+	
+		if (client_string) {
+			ret = smb_krb5_parse_name(context, client_string, &client);
+			if (ret) {
+				goto done;
+			}
+		} else {
+			ret = krb5_cc_get_principal(context, ccache, &client);
+			if (ret) {
+				goto done;
+			}
 		}
-	} else {
-		ret = krb5_cc_get_principal(context, ccache, &client);
+	
+		ret = krb5_get_renewed_creds(context, &creds, client, ccache, CONST_DISCARD(char *, service_string));
 		if (ret) {
+			DEBUG(10,("smb_krb5_renew_ticket: krb5_get_kdc_cred failed: %s\n", error_message(ret)));
 			goto done;
 		}
-	}
 
-#ifdef HAVE_KRB5_GET_RENEWED_CREDS	/* MIT */
-	{
-		ret = krb5_get_renewed_creds(context, &creds, client, ccache, CONST_DISCARD(char *, service_string));
+		/* hm, doesn't that create a new one if the old one wasn't there? - Guenther */
+		ret = krb5_cc_initialize(context, ccache, client);
 		if (ret) {
-			DEBUG(10,("smb_krb5_renew_ticket: krb5_get_kdc_cred failed: %s\n", error_message(ret)));
 			goto done;
 		}
+	
+		ret = krb5_cc_store_cred(context, ccache, &creds);
+
+		if (expire_time) {
+			*expire_time = (time_t) creds.times.endtime;
+		}
+
+		krb5_free_cred_contents(context, &creds);
 	}
 #elif defined(HAVE_KRB5_GET_KDC_CRED)	/* Heimdal */
 	{
 		krb5_kdc_flags flags;
-		krb5_realm *client_realm = NULL;
+		krb5_creds creds_in;
+		krb5_realm *client_realm;
+		krb5_creds *creds;
 
-		ret = krb5_copy_principal(context, client, &creds_in.client);
-		if (ret) {
-			goto done;
+		memset(&creds_in, 0, sizeof(creds_in));
+
+		if (client_string) {
+			ret = smb_krb5_parse_name(context, client_string, &creds_in.client);
+			if (ret) {
+				goto done;
+			}
+		} else {
+			ret = krb5_cc_get_principal(context, ccache, &creds_in.client);
+			if (ret) {
+				goto done;
+			}
 		}
 
 		if (service_string) {
@@ -1244,50 +1198,45 @@
 		flags.i = 0;
 		flags.b.renewable = flags.b.renew = True;
 
-		ret = krb5_get_kdc_cred(context, ccache, flags, NULL, NULL, &creds_in, &creds_out);
+		ret = krb5_get_kdc_cred(context, ccache, flags, NULL, NULL, &creds_in, &creds);
 		if (ret) {
 			DEBUG(10,("smb_krb5_renew_ticket: krb5_get_kdc_cred failed: %s\n", error_message(ret)));
 			goto done;
 		}
+		
+		/* hm, doesn't that create a new one if the old one wasn't there? - Guenther */
+		ret = krb5_cc_initialize(context, ccache, creds_in.client);
+		if (ret) {
+			goto done;
+		}
+	
+		ret = krb5_cc_store_cred(context, ccache, creds);
 
-		creds = *creds_out;
+		if (expire_time) {
+			*expire_time = (time_t) creds->times.endtime;
+		}
+						
+		krb5_free_cred_contents(context, &creds_in);
+		krb5_free_creds(context, creds);
 	}
 #else
-#error NO_SUITABLE_KRB5_TICKET_RENEW_FUNCTION_AVAILABLE
+#error No suitable krb5 ticket renew function available
 #endif
 
-	/* hm, doesn't that create a new one if the old one wasn't there? - Guenther */
-	ret = krb5_cc_initialize(context, ccache, client);
-	if (ret) {
-		goto done;
-	}
-	
-	ret = krb5_cc_store_cred(context, ccache, &creds);
 
-	if (expire_time) {
-		*expire_time = (time_t) creds.times.endtime;
-	}
-
 done:
-	krb5_free_cred_contents(context, &creds_in);
-
-	if (creds_out) {
-		krb5_free_creds(context, creds_out);
-	} else {
-		krb5_free_cred_contents(context, &creds);
-	}
-
 	if (client) {
 		krb5_free_principal(context, client);
 	}
-	if (ccache) {
-		krb5_cc_close(context, ccache);
-	}
 	if (context) {
 		krb5_free_context(context);
 	}
+	if (ccache) {
+		krb5_cc_close(context, ccache);
+	}
 
 	return ret;
+    
 }
 
  krb5_error_code smb_krb5_free_addresses(krb5_context context, smb_krb5_addresses *addr)
@@ -1409,7 +1358,7 @@
 					krb5_data *packet)
 {
 	krb5_error_code ret;
-	bool got_error_code = False;
+	BOOL got_error_code = False;
 
 	DEBUG(10,("handle_krberror_packet: got error packet\n"));
 	
@@ -1466,7 +1415,7 @@
 
 	*opt = NULL;
 
-	if ((my_opt = SMB_MALLOC_P(krb5_get_init_creds_opt)) == NULL) {
+	if ((my_opt = SMB_MALLOC(sizeof(krb5_get_init_creds_opt))) == NULL) {
 		return ENOMEM;
 	}
 
@@ -1483,12 +1432,12 @@
 #ifdef HAVE_KRB5_GET_INIT_CREDS_OPT_FREE
 
 #ifdef KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT
-	/* Modern MIT or Heimdal version */
+	/* Modern MIT version */
 	krb5_get_init_creds_opt_free(context, opt);
 #else
 	/* Heimdal version */
 	krb5_get_init_creds_opt_free(opt);
-#endif /* KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT */
+#endif
 
 #else /* HAVE_KRB5_GET_INIT_CREDS_OPT_FREE */
 	/* Historical MIT version */
@@ -1497,41 +1446,6 @@
 #endif /* HAVE_KRB5_GET_INIT_CREDS_OPT_FREE */
 }
 
- krb5_enctype smb_get_enctype_from_kt_entry(const krb5_keytab_entry *kt_entry)
-{
-#ifdef HAVE_KRB5_KEYTAB_ENTRY_KEY		/* MIT */
-	return kt_entry->key.enctype;
-#elif defined(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK)	/* Heimdal */
-	return kt_entry->keyblock.keytype;
-#else
-#error UNKNOWN_KRB5_KEYTAB_ENTRY_KEYBLOCK_FORMAT
-#endif
-}
-
-
-/* caller needs to free etype_s */
- krb5_error_code smb_krb5_enctype_to_string(krb5_context context, 
- 					    krb5_enctype enctype, 
-					    char **etype_s)
-{
-#ifdef HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG
-	return krb5_enctype_to_string(context, enctype, etype_s); /* Heimdal */
-#elif defined(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG)
-	char buf[256];
-	krb5_error_code ret = krb5_enctype_to_string(enctype, buf, 256); /* MIT */
-	if (ret) {
-		return ret;
-	}
-	*etype_s = SMB_STRDUP(buf);
-	if (!*etype_s) {
-		return ENOMEM;
-	}
-	return ret;
-#else
-#error UNKNOWN_KRB5_ENCTYPE_TO_STRING_FUNCTION
-#endif
-}
-
  krb5_error_code smb_krb5_mk_error(krb5_context context,
 				krb5_error_code error_code,
 				const krb5_principal server,
@@ -1569,141 +1483,6 @@
 #endif
 }
 
-/**********************************************************************
- * Open a krb5 keytab with flags, handles readonly or readwrite access and
- * allows to process non-default keytab names.
- * @param context krb5_context 
- * @param keytab_name_req string
- * @param write_access bool if writable keytab is required
- * @param krb5_keytab pointer to krb5_keytab (close with krb5_kt_close())
- * @return krb5_error_code
-**********************************************************************/
-
-/* This MAX_NAME_LEN is a constant defined in krb5.h */
-#ifndef MAX_KEYTAB_NAME_LEN
-#define MAX_KEYTAB_NAME_LEN 1100
-#endif
-
- krb5_error_code smb_krb5_open_keytab(krb5_context context,
-				      const char *keytab_name_req,
-				      bool write_access,
-				      krb5_keytab *keytab)
-{
-	krb5_error_code ret = 0;
-	TALLOC_CTX *mem_ctx;
-	char keytab_string[MAX_KEYTAB_NAME_LEN];
-	char *kt_str = NULL;
-	bool found_valid_name = False;
-	const char *pragma = "FILE";
-	const char *tmp = NULL;
-
-	if (!write_access && !keytab_name_req) {
-		/* caller just wants to read the default keytab readonly, so be it */
-		return krb5_kt_default(context, keytab);
-	}
-
-	mem_ctx = talloc_init("smb_krb5_open_keytab");
-	if (!mem_ctx) {
-		return ENOMEM;
-	}
-
-#ifdef HAVE_WRFILE_KEYTAB 
-	if (write_access) {
-		pragma = "WRFILE";
-	}
-#endif
-
-	if (keytab_name_req) {
-
-		if (strlen(keytab_name_req) > MAX_KEYTAB_NAME_LEN) {
-			ret = KRB5_CONFIG_NOTENUFSPACE;
-			goto out;
-		}
-
-		if ((strncmp(keytab_name_req, "WRFILE:/", 8) == 0) || 
-		    (strncmp(keytab_name_req, "FILE:/", 6) == 0)) {
-		    	tmp = keytab_name_req;
-			goto resolve;
-		}
-
-		if (keytab_name_req[0] != '/') {
-			ret = KRB5_KT_BADNAME;
-			goto out;
-		}
-
-		tmp = talloc_asprintf(mem_ctx, "%s:%s", pragma, keytab_name_req);
-		if (!tmp) {
-			ret = ENOMEM;
-			goto out;
-		}
-
-		goto resolve;
-	}
-
-	/* we need to handle more complex keytab_strings, like:
-	 * "ANY:FILE:/etc/krb5.keytab,krb4:/etc/srvtab" */
-
-	ret = krb5_kt_default_name(context, &keytab_string[0], MAX_KEYTAB_NAME_LEN - 2);
-	if (ret) {
-		goto out;
-	}
-
-	DEBUG(10,("smb_krb5_open_keytab: krb5_kt_default_name returned %s\n", keytab_string));
-
-	tmp = talloc_strdup(mem_ctx, keytab_string);
-	if (!tmp) {
-		ret = ENOMEM;
-		goto out;
-	}
-
-	if (strncmp(tmp, "ANY:", 4) == 0) {
-		tmp += 4;
-	}
-
-	memset(&keytab_string, '\0', sizeof(keytab_string));
-
-	while (next_token_talloc(mem_ctx, &tmp, &kt_str, ",")) {
-		if (strncmp(kt_str, "WRFILE:", 7) == 0) {
-			found_valid_name = True;
-			tmp = kt_str;
-			tmp += 7;
-		}
-
-		if (strncmp(kt_str, "FILE:", 5) == 0) {
-			found_valid_name = True;
-			tmp = kt_str;
-			tmp += 5;
-		}
-
-		if (found_valid_name) {
-			if (tmp[0] != '/') {
-				ret = KRB5_KT_BADNAME;
-				goto out;
-			}
-
-			tmp = talloc_asprintf(mem_ctx, "%s:%s", pragma, tmp);
-			if (!tmp) {
-				ret = ENOMEM;
-				goto out;
-			}
-			break;
-		}
-	}
-
-	if (!found_valid_name) {
-		ret = KRB5_KT_UNKNOWN_TYPE;
-		goto out;
-	}
-
- resolve:
- 	DEBUG(10,("smb_krb5_open_keytab: resolving: %s\n", tmp));
-	ret = krb5_kt_resolve(context, tmp, keytab);
-
- out:
- 	TALLOC_FREE(mem_ctx);
- 	return ret;
-}
-
 #else /* HAVE_KRB5 */
  /* this saves a few linking headaches */
  int cli_krb5_get_ticket(const char *principal, time_t time_offset, 

Modified: branches/samba/upstream/source/libsmb/clilist.c
===================================================================
--- branches/samba/upstream/source/libsmb/clilist.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/clilist.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,40 +1,27 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    client directory list routines
    Copyright (C) Andrew Tridgell 1994-1998
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
-/****************************************************************************
- Calculate a safe next_entry_offset.
-****************************************************************************/
+extern file_info def_finfo;
 
-static size_t calc_next_entry_offset(const char *base, const char *pdata_end)
-{
-	size_t next_entry_offset = (size_t)IVAL(base,0);
-
-	if (next_entry_offset == 0 ||
-			base + next_entry_offset < base ||
-			base + next_entry_offset > pdata_end) {
-		next_entry_offset = pdata_end - base;
-	}
-	return next_entry_offset;
-}
-
 /****************************************************************************
  Interpret a long filename structure - this is mostly guesses at the moment.
  The length of the structure is returned
@@ -42,34 +29,27 @@
  by NT and 2 is used by OS/2
 ****************************************************************************/
 
-static size_t interpret_long_filename(TALLOC_CTX *ctx,
-					struct cli_state *cli,
-					int level,
-					const char *p,
-					const char *pdata_end,
-					file_info *finfo,
-					uint32 *p_resume_key,
-					DATA_BLOB *p_last_name_raw)
+static size_t interpret_long_filename(struct cli_state *cli, int level,char *p,file_info *finfo,
+					uint32 *p_resume_key, DATA_BLOB *p_last_name_raw, uint32 *p_last_name_raw_len)
 {
+	file_info finfo2;
 	int len;
-	size_t ret;
-	const char *base = p;
+	char *base = p;
 
-	data_blob_free(p_last_name_raw);
+	if (!finfo) {
+		finfo = &finfo2;
+	}
 
 	if (p_resume_key) {
 		*p_resume_key = 0;
 	}
-	ZERO_STRUCTP(finfo);
+	memcpy(finfo,&def_finfo,sizeof(*finfo));
 	finfo->cli = cli;
 
 	switch (level) {
 		case 1: /* OS/2 understands this */
 			/* these dates are converted to GMT by
                            make_unix_date */
-			if (pdata_end - base < 27) {
-				return pdata_end - base;
-			}
 			finfo->ctime_ts = convert_time_t_to_timespec(cli_make_unix_date2(cli, p+4));
 			finfo->atime_ts = convert_time_t_to_timespec(cli_make_unix_date2(cli, p+8));
 			finfo->mtime_ts = convert_time_t_to_timespec(cli_make_unix_date2(cli, p+12));
@@ -78,42 +58,19 @@
 			len = CVAL(p, 26);
 			p += 27;
 			p += clistr_align_in(cli, p, 0);
-
-			/* We can safely use +1 here (which is required by OS/2)
-			 * instead of +2 as the STR_TERMINATE flag below is
-			 * actually used as the length calculation.
-			 * The len+2 is merely an upper bound.
-			 * Due to the explicit 2 byte null termination
-			 * in cli_receive_trans/cli_receive_nt_trans
-			 * we know this is safe. JRA + kukks
-			 */
-
-			if (p + len + 1 > pdata_end) {
-				return pdata_end - base;
-			}
-
 			/* the len+2 below looks strange but it is
 			   important to cope with the differences
 			   between win2000 and win9x for this call
 			   (tridge) */
-			ret = clistr_pull_talloc(ctx,
-						cli,
-						&finfo->name,
-						p,
-						len+2,
-						STR_TERMINATE);
-			if (ret == (size_t)-1) {
-				return pdata_end - base;
-			}
-			p += ret;
+			p += clistr_pull(cli, finfo->name, p,
+					 sizeof(finfo->name),
+					 len+2, 
+					 STR_TERMINATE);
 			return PTR_DIFF(p, base);
 
 		case 2: /* this is what OS/2 uses mostly */
 			/* these dates are converted to GMT by
                            make_unix_date */
-			if (pdata_end - base < 31) {
-				return pdata_end - base;
-			}
 			finfo->ctime_ts = convert_time_t_to_timespec(cli_make_unix_date2(cli, p+4));
 			finfo->atime_ts = convert_time_t_to_timespec(cli_make_unix_date2(cli, p+8));
 			finfo->mtime_ts = convert_time_t_to_timespec(cli_make_unix_date2(cli, p+12));
@@ -122,36 +79,22 @@
 			len = CVAL(p, 30);
 			p += 31;
 			/* check for unisys! */
-			if (p + len + 1 > pdata_end) {
-				return pdata_end - base;
-			}
-			ret = clistr_pull_talloc(ctx,
-						cli,
-						&finfo->name,
-						p,
-					 	len,
-						STR_NOALIGN);
-			if (ret == (size_t)-1) {
-				return pdata_end - base;
-			}
-			p += ret;
+			p += clistr_pull(cli, finfo->name, p,
+					 sizeof(finfo->name),
+					 len, 
+					 STR_NOALIGN);
 			return PTR_DIFF(p, base) + 1;
-
+			
 		case 260: /* NT uses this, but also accepts 2 */
 		{
 			size_t namelen, slen;
-
-			if (pdata_end - base < 94) {
-				return pdata_end - base;
-			}
-
 			p += 4; /* next entry offset */
 
 			if (p_resume_key) {
 				*p_resume_key = IVAL(p,0);
 			}
 			p += 4; /* fileindex */
-
+				
 			/* Offset zero is "create time", not "change time". */
 			p += 8;
 			finfo->atime_ts = interpret_long_date(p);
@@ -169,11 +112,7 @@
 			p += 4;
 			p += 4; /* EA size */
 			slen = SVAL(p, 0);
-			if (slen > 24) {
-				/* Bad short name length. */
-				return pdata_end - base;
-			}
-			p += 2;
+			p += 2; 
 			{
 				/* stupid NT bugs. grr */
 				int flags = 0;
@@ -182,43 +121,39 @@
 					    sizeof(finfo->short_name),
 					    slen, flags);
 			}
-			p += 24; /* short name? */
-			if (p + namelen < p || p + namelen > pdata_end) {
-				return pdata_end - base;
-			}
-			ret = clistr_pull_talloc(ctx,
-						cli,
-						&finfo->name,
-						p,
-				    		namelen,
-						0);
-			if (ret == (size_t)-1) {
-				return pdata_end - base;
-			}
+			p += 24; /* short name? */	  
+			clistr_pull(cli, finfo->name, p,
+				    sizeof(finfo->name),
+				    namelen, 0);
 
 			/* To be robust in the face of unicode conversion failures
 			   we need to copy the raw bytes of the last name seen here.
 			   Namelen doesn't include the terminating unicode null, so
 			   copy it here. */
 
-			if (p_last_name_raw) {
-				*p_last_name_raw = data_blob(NULL, namelen+2);
-				memcpy(p_last_name_raw->data, p, namelen);
-				SSVAL(p_last_name_raw->data, namelen, 0);
+			if (p_last_name_raw && p_last_name_raw_len) {
+				if (namelen + 2 > p_last_name_raw->length) {
+					memset(p_last_name_raw->data, '\0', sizeof(p_last_name_raw->length));
+					*p_last_name_raw_len = 0;
+				} else {
+					memcpy(p_last_name_raw->data, p, namelen);
+					SSVAL(p_last_name_raw->data, namelen, 0);
+					*p_last_name_raw_len = namelen + 2;
+				}
 			}
-			return calc_next_entry_offset(base, pdata_end);
+			return (size_t)IVAL(base, 0);
 		}
 	}
-
+	
 	DEBUG(1,("Unknown long filename format %d\n",level));
-	return calc_next_entry_offset(base, pdata_end);
+	return (size_t)IVAL(base,0);
 }
 
 /****************************************************************************
  Do a directory listing, calling fn on each file found.
 ****************************************************************************/
 
-int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute,
+int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute, 
 		 void (*fn)(const char *, file_info *, const char *, void *), void *state)
 {
 #if 1
@@ -227,65 +162,54 @@
 	int max_matches = 512;
 #endif
 	int info_level;
-	char *p, *p2, *rdata_end;
-	char *mask = NULL;
+	char *p, *p2;
+	pstring mask;
 	file_info finfo;
 	int i;
 	char *dirlist = NULL;
 	int dirlist_len = 0;
 	int total_received = -1;
-	bool First = True;
+	BOOL First = True;
 	int ff_searchcount=0;
 	int ff_eos=0;
 	int ff_dir_handle=0;
 	int loop_count = 0;
 	char *rparam=NULL, *rdata=NULL;
-	unsigned int param_len, data_len;
+	unsigned int param_len, data_len;	
 	uint16 setup;
-	char *param;
+	pstring param;
 	const char *mnt;
 	uint32 resume_key = 0;
-	TALLOC_CTX *frame = talloc_stackframe();
-	DATA_BLOB last_name_raw = data_blob(NULL, 0);
+	uint32 last_name_raw_len = 0;
+	DATA_BLOB last_name_raw = data_blob(NULL, 2*sizeof(pstring));
 
 	/* NT uses 260, OS/2 uses 2. Both accept 1. */
 	info_level = (cli->capabilities&CAP_NT_SMBS)?260:1;
-
-	mask = SMB_STRDUP(Mask);
-	if (!mask) {
-		TALLOC_FREE(frame);
-		return -1;
-	}
-
+	
+	pstrcpy(mask,Mask);
+	
 	while (ff_eos == 0) {
-		size_t nlen = 2*(strlen(mask)+1);
-
 		loop_count++;
 		if (loop_count > 200) {
 			DEBUG(0,("Error: Looping in FIND_NEXT??\n"));
 			break;
 		}
 
-		param = SMB_MALLOC_ARRAY(char, 12+nlen+last_name_raw.length+2);
-		if (!param) {
-			break;
-		}
-
 		if (First) {
 			setup = TRANSACT2_FINDFIRST;
 			SSVAL(param,0,attribute); /* attribute */
 			SSVAL(param,2,max_matches); /* max count */
 			SSVAL(param,4,(FLAG_TRANS2_FIND_REQUIRE_RESUME|FLAG_TRANS2_FIND_CLOSE_IF_END));	/* resume required + close on end */
-			SSVAL(param,6,info_level);
+			SSVAL(param,6,info_level); 
 			SIVAL(param,8,0);
 			p = param+12;
-			p += clistr_push(cli, param+12, mask,
-					 nlen, STR_TERMINATE);
+			p += clistr_push(cli, param+12, mask, sizeof(param)-12, 
+					 STR_TERMINATE);
 		} else {
 			setup = TRANSACT2_FINDNEXT;
 			SSVAL(param,0,ff_dir_handle);
 			SSVAL(param,2,max_matches); /* max count */
-			SSVAL(param,4,info_level);
+			SSVAL(param,4,info_level); 
 			/* For W2K servers serving out FAT filesystems we *must* set the
 			   resume key. If it's not FAT then it's returned as zero. */
 			SIVAL(param,6,resume_key); /* ff_resume_key */
@@ -293,23 +217,22 @@
 			   can miss filenames. Use last filename continue instead. JRA */
 			SSVAL(param,10,(FLAG_TRANS2_FIND_REQUIRE_RESUME|FLAG_TRANS2_FIND_CLOSE_IF_END));	/* resume required + close on end */
 			p = param+12;
-			if (last_name_raw.length) {
-				memcpy(p, last_name_raw.data, last_name_raw.length);
-				p += last_name_raw.length;
+			if (last_name_raw_len && (last_name_raw_len < (sizeof(param)-12))) {
+				memcpy(p, last_name_raw.data, last_name_raw_len);
+				p += last_name_raw_len;
 			} else {
-				p += clistr_push(cli, param+12, mask,
-						nlen, STR_TERMINATE);
+				p += clistr_push(cli, param+12, mask, sizeof(param)-12, STR_TERMINATE);
 			}
 		}
 
 		param_len = PTR_DIFF(p, param);
 
-		if (!cli_send_trans(cli, SMBtrans2,
+		if (!cli_send_trans(cli, SMBtrans2, 
 				    NULL,                   /* Name */
 				    -1, 0,                  /* fid, flags */
 				    &setup, 1, 0,           /* setup, length, max */
 				    param, param_len, 10,   /* param, length, max */
-				    NULL, 0,
+				    NULL, 0, 
 #if 0
 				    /* w2k value. */
 				    MIN(16384,cli->max_xmit) /* data, length, max. */
@@ -317,14 +240,10 @@
 				    cli->max_xmit	    /* data, length, max. */
 #endif
 				    )) {
-			SAFE_FREE(param);
-			TALLOC_FREE(frame);
 			break;
 		}
 
-		SAFE_FREE(param);
-
-		if (!cli_receive_trans(cli, SMBtrans2,
+		if (!cli_receive_trans(cli, SMBtrans2, 
 				       &rparam, &param_len,
 				       &rdata, &data_len) &&
                     cli_is_dos_error(cli)) {
@@ -385,29 +304,16 @@
 
 		/* point to the data bytes */
 		p = rdata;
-		rdata_end = rdata + data_len;
 
 		/* we might need the lastname for continuations */
-		for (p2=p,i=0;i<ff_searchcount && p2 < rdata_end;i++) {
+		for (p2=p,i=0;i<ff_searchcount;i++) {
 			if ((info_level == 260) && (i == ff_searchcount-1)) {
 				/* Last entry - fixup the last offset length. */
 				SIVAL(p2,0,PTR_DIFF((rdata + data_len),p2));
 			}
-			p2 += interpret_long_filename(frame,
-							cli,
-							info_level,
-							p2,
-							rdata_end,
-							&finfo,
-							&resume_key,
-							&last_name_raw);
+			p2 += interpret_long_filename(cli,info_level,p2,&finfo,
+							&resume_key,&last_name_raw,&last_name_raw_len);
 
-			if (!finfo.name) {
-				DEBUG(0,("cli_list_new: Error: unable to parse name from info level %d\n",
-					info_level));
-				ff_eos = 1;
-				break;
-			}
 			if (!First && *mask && strcsequal(finfo.name, mask)) {
 				DEBUG(0,("Error: Looping in FIND_NEXT as name %s has already been seen?\n",
 					finfo.name));
@@ -416,17 +322,11 @@
 			}
 		}
 
-		SAFE_FREE(mask);
 		if (ff_searchcount > 0) {
-			mask = SMB_STRDUP(finfo.name);
+			pstrcpy(mask, finfo.name);
 		} else {
-			mask = SMB_STRDUP("");
+			pstrcpy(mask,"");
 		}
-		if (!mask) {
-			SAFE_FREE(rdata);
-			SAFE_FREE(rparam);
-			break;
-		}
 
 		/* grab the data for later use */
 		/* and add them to the dirlist pool */
@@ -463,30 +363,16 @@
                 total_received = -1;
         } else {
                 /* no connection problem.  let user function add each entry */
-		rdata_end = dirlist + dirlist_len;
                 for (p=dirlist,i=0;i<total_received;i++) {
-                        p += interpret_long_filename(frame,
-							cli,
-							info_level,
-							p,
-							rdata_end,
-							&finfo,
-							NULL,
-							NULL);
-			if (!finfo.name) {
-				DEBUG(0,("cli_list_new: unable to parse name from info level %d\n",
-					info_level));
-				break;
-			}
-                        fn(mnt,&finfo, Mask, state);
+                        p += interpret_long_filename(cli, info_level, p,
+                                                     &finfo,NULL,NULL,NULL);
+                        fn( mnt,&finfo, Mask, state );
                 }
         }
 
 	/* free up the dirlist buffer and last name raw blob */
 	SAFE_FREE(dirlist);
 	data_blob_free(&last_name_raw);
-	SAFE_FREE(mask);
-	TALLOC_FREE(frame);
 	return(total_received);
 }
 
@@ -495,74 +381,58 @@
  The length of the structure is returned.
 ****************************************************************************/
 
-static bool interpret_short_filename(TALLOC_CTX *ctx,
-				struct cli_state *cli,
-				char *p,
-				file_info *finfo)
+static int interpret_short_filename(struct cli_state *cli, char *p,file_info *finfo)
 {
-	size_t ret;
-	ZERO_STRUCTP(finfo);
 
+	*finfo = def_finfo;
+
 	finfo->cli = cli;
 	finfo->mode = CVAL(p,21);
-
+	
 	/* this date is converted to GMT by make_unix_date */
 	finfo->ctime_ts.tv_sec = cli_make_unix_date(cli, p+22);
 	finfo->ctime_ts.tv_nsec = 0;
 	finfo->mtime_ts.tv_sec = finfo->atime_ts.tv_sec = finfo->ctime_ts.tv_sec;
 	finfo->mtime_ts.tv_nsec = finfo->atime_ts.tv_nsec = 0;
 	finfo->size = IVAL(p,26);
-	ret = clistr_pull_talloc(ctx,
-			cli,
-			&finfo->name,
-			p+30,
-			12,
-			STR_ASCII);
-	if (ret == (size_t)-1) {
-		return false;
+	clistr_pull(cli, finfo->name, p+30, sizeof(finfo->name), 12, STR_ASCII);
+	if (strcmp(finfo->name, "..") && strcmp(finfo->name, ".")) {
+		strncpy(finfo->short_name,finfo->name, sizeof(finfo->short_name)-1);
+		finfo->short_name[sizeof(finfo->short_name)-1] = '\0';
 	}
 
-	if (finfo->name) {
-		strlcpy(finfo->short_name,
-			finfo->name,
-			sizeof(finfo->short_name));
-	}
-	return true;
 	return(DIR_STRUCT_SIZE);
 }
 
+
 /****************************************************************************
  Do a directory listing, calling fn on each file found.
  this uses the old SMBsearch interface. It is needed for testing Samba,
  but should otherwise not be used.
 ****************************************************************************/
 
-int cli_list_old(struct cli_state *cli,const char *Mask,uint16 attribute,
+int cli_list_old(struct cli_state *cli,const char *Mask,uint16 attribute, 
 		 void (*fn)(const char *, file_info *, const char *, void *), void *state)
 {
 	char *p;
 	int received = 0;
-	bool first = True;
+	BOOL first = True;
 	char status[21];
 	int num_asked = (cli->max_xmit - 100)/DIR_STRUCT_SIZE;
 	int num_received = 0;
 	int i;
 	char *dirlist = NULL;
-	char *mask = NULL;
-	TALLOC_CTX *frame = NULL;
-
+	pstring mask;
+	
 	ZERO_ARRAY(status);
 
-	mask = SMB_STRDUP(Mask);
-	if (!mask) {
-		return -1;
-	}
-
+	pstrcpy(mask,Mask);
+  
 	while (1) {
 		memset(cli->outbuf,'\0',smb_size);
 		memset(cli->inbuf,'\0',smb_size);
 
-		cli_set_message(cli->outbuf,2,0,True);
+		set_message(cli->outbuf,2,0,True);
 
 		SCVAL(cli->outbuf,smb_com,SMBsearch);
 
@@ -571,13 +441,11 @@
 
 		SSVAL(cli->outbuf,smb_vwv0,num_asked);
 		SSVAL(cli->outbuf,smb_vwv1,attribute);
-
+  
 		p = smb_buf(cli->outbuf);
 		*p++ = 4;
-
-		p += clistr_push(cli, p, first?mask:"",
-				cli->bufsize - PTR_DIFF(p,cli->outbuf),
-				STR_TERMINATE);
+      
+		p += clistr_push(cli, p, first?mask:"", -1, STR_TERMINATE);
 		*p++ = 5;
 		if (first) {
 			SSVAL(p,0,0);
@@ -596,19 +464,12 @@
 		received = SVAL(cli->inbuf,smb_vwv0);
 		if (received <= 0) break;
 
-		/* Ensure we received enough data. */
-		if ((cli->inbuf+4+smb_len(cli->inbuf) - (smb_buf(cli->inbuf)+3)) <
-				received*DIR_STRUCT_SIZE) {
-			break;
-		}
-
 		first = False;
 
 		dirlist = (char *)SMB_REALLOC(
 			dirlist,(num_received + received)*DIR_STRUCT_SIZE);
 		if (!dirlist) {
 			DEBUG(0,("cli_list_old: failed to expand dirlist"));
-			SAFE_FREE(mask);
 			return 0;
 		}
 
@@ -616,11 +477,11 @@
 
 		memcpy(dirlist+num_received*DIR_STRUCT_SIZE,
 		       p,received*DIR_STRUCT_SIZE);
-
+		
 		memcpy(status,p + ((received-1)*DIR_STRUCT_SIZE),21);
-
+		
 		num_received += received;
-
+		
 		if (cli_is_error(cli)) break;
 	}
 
@@ -628,7 +489,7 @@
 		memset(cli->outbuf,'\0',smb_size);
 		memset(cli->inbuf,'\0',smb_size);
 
-		cli_set_message(cli->outbuf,2,0,True);
+		set_message(cli->outbuf,2,0,True);
 		SCVAL(cli->outbuf,smb_com,SMBfclose);
 		SSVAL(cli->outbuf,smb_tid,cli->cnum);
 		cli_setup_packet(cli);
@@ -645,7 +506,7 @@
 		p += 2;
 		memcpy(p,status,21);
 		p += 21;
-
+		
 		cli_setup_bcc(cli, p);
 		cli_send_smb(cli);
 		if (!cli_receive_smb(cli)) {
@@ -653,18 +514,12 @@
 		}
 	}
 
-	frame = talloc_stackframe();
 	for (p=dirlist,i=0;i<num_received;i++) {
 		file_info finfo;
-		if (!interpret_short_filename(frame, cli, p, &finfo)) {
-			break;
-		}
-		p += DIR_STRUCT_SIZE;
+		p += interpret_short_filename(cli, p,&finfo);
 		fn("\\", &finfo, Mask, state);
 	}
-	TALLOC_FREE(frame);
 
-	SAFE_FREE(mask);
 	SAFE_FREE(dirlist);
 	return(num_received);
 }
@@ -674,7 +529,7 @@
  This auto-switches between old and new style.
 ****************************************************************************/
 
-int cli_list(struct cli_state *cli,const char *Mask,uint16 attribute,
+int cli_list(struct cli_state *cli,const char *Mask,uint16 attribute, 
 	     void (*fn)(const char *, file_info *, const char *, void *), void *state)
 {
 	if (cli->protocol <= PROTOCOL_LANMAN1)

Modified: branches/samba/upstream/source/libsmb/climessage.c
===================================================================
--- branches/samba/upstream/source/libsmb/climessage.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/climessage.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,45 +14,45 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
+
 /****************************************************************************
- Start a message sequence.
+start a message sequence
 ****************************************************************************/
-
-int cli_message_start_build(struct cli_state *cli, const char *host, const char *username)
+int cli_message_start_build(struct cli_state *cli, char *host, char *username)
 {
 	char *p;
 
 	/* construct a SMBsendstrt command */
 	memset(cli->outbuf,'\0',smb_size);
-	cli_set_message(cli->outbuf,0,0,True);
+	set_message(cli->outbuf,0,0,True);
 	SCVAL(cli->outbuf,smb_com,SMBsendstrt);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
 	cli_setup_packet(cli);
-
+	
 	p = smb_buf(cli->outbuf);
 	*p++ = 4;
-	p += clistr_push(cli, p, username,
-			cli->bufsize - PTR_DIFF(p,cli->outbuf), STR_ASCII|STR_TERMINATE);
+	p += clistr_push(cli, p, username, -1, STR_ASCII|STR_TERMINATE);
 	*p++ = 4;
-	p += clistr_push(cli, p, host,
-			cli->bufsize - PTR_DIFF(p,cli->outbuf), STR_ASCII|STR_TERMINATE);
-
+	p += clistr_push(cli, p, host, -1, STR_ASCII|STR_TERMINATE);
+	
 	cli_setup_bcc(cli, p);
 
 	return(PTR_DIFF(p, cli->outbuf));
 }
 
-bool cli_message_start(struct cli_state *cli, const char *host, const char *username,
+BOOL cli_message_start(struct cli_state *cli, char *host, char *username,
 			      int *grp)
 {
 	cli_message_start_build(cli, host, username);
-	cli_send_smb(cli);
-
+	
+	cli_send_smb(cli);	
+	
 	if (!cli_receive_smb(cli)) {
 		return False;
 	}
@@ -64,41 +64,34 @@
 	return True;
 }
 
+
 /****************************************************************************
- Send a message
+send a message 
 ****************************************************************************/
-
-int cli_message_text_build(struct cli_state *cli, const char *msg, int len, int grp)
+int cli_message_text_build(struct cli_state *cli, char *msg, int len, int grp)
 {
 	char *msgdos;
-	size_t lendos;
+	int lendos;
 	char *p;
 
 	memset(cli->outbuf,'\0',smb_size);
-	cli_set_message(cli->outbuf,1,0,True);
+	set_message(cli->outbuf,1,0,True);
 	SCVAL(cli->outbuf,smb_com,SMBsendtxt);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
 	cli_setup_packet(cli);
 
 	SSVAL(cli->outbuf,smb_vwv0,grp);
-
+	
 	p = smb_buf(cli->outbuf);
 	*p++ = 1;
 
-	if (!convert_string_allocate(NULL, CH_UNIX, CH_DOS, msg, len,
-		(void **)(void *)&msgdos, &lendos, True) || !msgdos) {
+	if ((lendos = (int)convert_string_allocate(NULL,CH_UNIX, CH_DOS, msg,len, (void **)(void *)&msgdos, True)) < 0 || !msgdos) {
 		DEBUG(3,("Conversion failed, sending message in UNIX charset\n"));
 		SSVAL(p, 0, len); p += 2;
-		if (len > cli->bufsize - PTR_DIFF(p,cli->outbuf)) {
-			return -1;
-		}
 		memcpy(p, msg, len);
 		p += len;
 	} else {
 		SSVAL(p, 0, lendos); p += 2;
-		if (lendos > cli->bufsize - PTR_DIFF(p,cli->outbuf)) {
-			return -1;
-		}
 		memcpy(p, msgdos, lendos);
 		p += lendos;
 		SAFE_FREE(msgdos);
@@ -109,7 +102,7 @@
 	return(PTR_DIFF(p, cli->outbuf));
 }
 
-bool cli_message_text(struct cli_state *cli, const char *msg, int len, int grp)
+BOOL cli_message_text(struct cli_state *cli, char *msg, int len, int grp)
 {
 	cli_message_text_build(cli, msg, len, grp);
 
@@ -122,18 +115,17 @@
 	if (cli_is_error(cli)) return False;
 
 	return True;
-}
+}      
 
 /****************************************************************************
- End a message.
+end a message 
 ****************************************************************************/
-
 int cli_message_end_build(struct cli_state *cli, int grp)
 {
 	char *p;
 
 	memset(cli->outbuf,'\0',smb_size);
-	cli_set_message(cli->outbuf,1,0,True);
+	set_message(cli->outbuf,1,0,True);
 	SCVAL(cli->outbuf,smb_com,SMBsendend);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
 
@@ -146,7 +138,7 @@
 	return(PTR_DIFF(p, cli->outbuf));
 }
 
-bool cli_message_end(struct cli_state *cli, int grp)
+BOOL cli_message_end(struct cli_state *cli, int grp)
 {
 	cli_message_end_build(cli, grp);
 
@@ -159,4 +151,4 @@
 	if (cli_is_error(cli)) return False;
 
 	return True;
-}
+}      

Modified: branches/samba/upstream/source/libsmb/clioplock.c
===================================================================
--- branches/samba/upstream/source/libsmb/clioplock.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/clioplock.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -22,17 +23,16 @@
 /****************************************************************************
 send an ack for an oplock break request
 ****************************************************************************/
-
-bool cli_oplock_ack(struct cli_state *cli, int fnum, unsigned char level)
+BOOL cli_oplock_ack(struct cli_state *cli, int fnum, unsigned char level)
 {
 	char *oldbuf = cli->outbuf;
-	char buf[smb_size+16];
-	bool ret;
+	pstring buf;
+	BOOL ret;
 
 	cli->outbuf = buf;
 
         memset(buf,'\0',smb_size);
-        cli_set_message(buf,8,0,True);
+        set_message(buf,8,0,True);
 
         SCVAL(buf,smb_com,SMBlockingX);
 	SSVAL(buf,smb_tid, cli->cnum);
@@ -48,7 +48,7 @@
 	SSVAL(buf,smb_vwv6,0); /* unlockcount */
 	SSVAL(buf,smb_vwv7,0); /* lockcount */
 
-        ret = cli_send_smb(cli);
+        ret = cli_send_smb(cli);	
 
 	cli->outbuf = oldbuf;
 
@@ -60,7 +60,7 @@
 set the oplock handler for a connection
 ****************************************************************************/
 void cli_oplock_handler(struct cli_state *cli, 
-			bool (*handler)(struct cli_state *, int, unsigned char))
+			BOOL (*handler)(struct cli_state *, int, unsigned char))
 {
 	cli->oplock_handler = handler;
 }

Modified: branches/samba/upstream/source/libsmb/cliprint.c
===================================================================
--- branches/samba/upstream/source/libsmb/cliprint.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/cliprint.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,34 +1,34 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    client print routines
    Copyright (C) Andrew Tridgell 1994-1998
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
 /*****************************************************************************
  Convert a character pointer in a cli_call_api() response to a form we can use.
- This function contains code to prevent core dumps if the server returns
+ This function contains code to prevent core dumps if the server returns 
  invalid data.
 *****************************************************************************/
-static const char *fix_char_ptr(unsigned int datap, unsigned int converter,
+static const char *fix_char_ptr(unsigned int datap, unsigned int converter, 
 			  char *rdata, int rdrcnt)
 {
-	if (datap == 0)	{
-		/* turn NULL pointers into zero length strings */
+	if (datap == 0)	{	/* turn NULL pointers into zero length strings */
 		return "";
 	} else {
 		unsigned int offset = datap - converter;
@@ -43,41 +43,41 @@
 	}
 }
 
+
 /****************************************************************************
 call fn() on each entry in a print queue
 ****************************************************************************/
-
-int cli_print_queue(struct cli_state *cli,
+int cli_print_queue(struct cli_state *cli, 
 		    void (*fn)(struct print_job_info *))
 {
 	char *rparam = NULL;
 	char *rdata = NULL;
 	char *p;
 	unsigned int rdrcnt, rprcnt;
-	char param[1024];
+	pstring param;
 	int result_code=0;
 	int i = -1;
-
+	
 	memset(param,'\0',sizeof(param));
 
 	p = param;
 	SSVAL(p,0,76);         /* API function number 76 (DosPrintJobEnum) */
 	p += 2;
-	safe_strcpy_base(p,"zWrLeh", param, sizeof(param));   /* parameter description? */
+	pstrcpy_base(p,"zWrLeh", param);   /* parameter description? */
 	p = skip_string(param,sizeof(param),p);
-	safe_strcpy_base(p,"WWzWWDDzz", param, sizeof(param));  /* returned data format */
+	pstrcpy_base(p,"WWzWWDDzz", param);  /* returned data format */
 	p = skip_string(param,sizeof(param),p);
-	safe_strcpy_base(p,cli->share, param, sizeof(param));    /* name of queue */
+	pstrcpy_base(p,cli->share, param);    /* name of queue */
 	p = skip_string(param,sizeof(param),p);
 	SSVAL(p,0,2);   /* API function level 2, PRJINFO_2 data structure */
 	SSVAL(p,2,1000); /* size of bytes of returned data buffer */
 	p += 4;
-	safe_strcpy_base(p,"", param,sizeof(param));   /* subformat */
+	pstrcpy_base(p,"", param);   /* subformat */
 	p = skip_string(param,sizeof(param),p);
 
 	DEBUG(4,("doing cli_print_queue for %s\n", cli->share));
 
-	if (cli_api(cli,
+	if (cli_api(cli, 
 		    param, PTR_DIFF(p,param), 1024,  /* Param, length, maxlen */
 		    NULL, 0, CLI_BUFFER_SIZE,            /* data, length, maxlen */
 		    &rparam, &rprcnt,                /* return params, length */
@@ -88,21 +88,21 @@
 
 		if (result_code == 0) {
 			struct print_job_info job;
+			
+			p = rdata; 
 
-			p = rdata;
-
 			for (i = 0; i < SVAL(rparam,4); ++i) {
 				job.id = SVAL(p,0);
 				job.priority = SVAL(p,2);
 				fstrcpy(job.user,
-					fix_char_ptr(SVAL(p,4), converter,
+					fix_char_ptr(SVAL(p,4), converter, 
 						     rdata, rdrcnt));
 				job.t = cli_make_unix_date3(cli, p + 12);
 				job.size = IVAL(p,16);
-				fstrcpy(job.name,fix_char_ptr(SVAL(p,24),
-							      converter,
+				fstrcpy(job.name,fix_char_ptr(SVAL(p,24), 
+							      converter, 
 							      rdata, rdrcnt));
-				fn(&job);
+				fn(&job);				
 				p += 28;
 			}
 		}
@@ -118,7 +118,6 @@
 /****************************************************************************
   cancel a print job
   ****************************************************************************/
-
 int cli_printjob_del(struct cli_state *cli, int job)
 {
 	char *rparam = NULL;
@@ -126,21 +125,21 @@
 	char *p;
 	unsigned int rdrcnt,rprcnt;
 	int ret = -1;
-	char param[1024];
+	pstring param;
 
 	memset(param,'\0',sizeof(param));
 
 	p = param;
 	SSVAL(p,0,81);		/* DosPrintJobDel() */
 	p += 2;
-	safe_strcpy_base(p,"W", param,sizeof(param));
+	pstrcpy_base(p,"W", param);
 	p = skip_string(param,sizeof(param),p);
-	safe_strcpy_base(p,"", param,sizeof(param));
+	pstrcpy_base(p,"", param);
 	p = skip_string(param,sizeof(param),p);
-	SSVAL(p,0,job);
+	SSVAL(p,0,job);     
 	p += 2;
-
-	if (cli_api(cli,
+	
+	if (cli_api(cli, 
 		    param, PTR_DIFF(p,param), 1024,  /* Param, length, maxlen */
 		    NULL, 0, CLI_BUFFER_SIZE,            /* data, length, maxlen */
 		    &rparam, &rprcnt,                /* return params, length */
@@ -180,7 +179,7 @@
 		accessmode |= 2;
 	} else if ((flags & O_ACCMODE) == O_WRONLY) {
 		accessmode |= 1;
-	}
+	} 
 
 #if defined(O_SYNC)
 	if ((flags & O_SYNC) == O_SYNC) {
@@ -195,7 +194,7 @@
 	memset(cli->outbuf,'\0',smb_size);
 	memset(cli->inbuf,'\0',smb_size);
 
-	cli_set_message(cli->outbuf,15,0,True);
+	set_message(cli->outbuf,15,0,True);
 
 	SCVAL(cli->outbuf,smb_com,SMBsplopen);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -215,7 +214,7 @@
 			FLAG_REQUEST_OPLOCK|FLAG_REQUEST_BATCH_OPLOCK);
 		SSVAL(cli->outbuf,smb_vwv2,SVAL(cli->outbuf,smb_vwv2) | 6);
 	}
-
+  
 	p = smb_buf(cli->outbuf);
 	p += clistr_push(cli, p, fname, -1, STR_TERMINATE);
 
@@ -237,12 +236,12 @@
  Close a file.
 ****************************************************************************/
 
-bool cli_spl_close(struct cli_state *cli, int fnum)
+BOOL cli_spl_close(struct cli_state *cli, int fnum)
 {
 	memset(cli->outbuf,'\0',smb_size);
 	memset(cli->inbuf,'\0',smb_size);
 
-	cli_set_message(cli->outbuf,3,0,True);
+	set_message(cli->outbuf,3,0,True);
 
 	SCVAL(cli->outbuf,smb_com,SMBsplclose);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -258,3 +257,5 @@
 
 	return !cli_is_error(cli);
 }
+
+

Modified: branches/samba/upstream/source/libsmb/cliquota.c
===================================================================
--- branches/samba/upstream/source/libsmb/cliquota.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/cliquota.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,12 +14,13 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
-bool cli_get_quota_handle(struct cli_state *cli, int *quota_fnum)
+BOOL cli_get_quota_handle(struct cli_state *cli, int *quota_fnum)
 {
 	*quota_fnum = cli_nt_create_full(cli, FAKE_FILE_NAME_QUOTA_WIN32,
 		 0x00000016, DESIRED_ACCESS_PIPE,
@@ -46,16 +47,15 @@
 	return;	
 }
 
-static bool parse_user_quota_record(const char *rdata, unsigned int rdata_count, unsigned int *offset, SMB_NTQUOTA_STRUCT *pqt)
+static BOOL parse_user_quota_record(const char *rdata, unsigned int rdata_count, unsigned int *offset, SMB_NTQUOTA_STRUCT *pqt)
 {
 	int sid_len;
 	SMB_NTQUOTA_STRUCT qt;
 
 	ZERO_STRUCT(qt);
 
-	if (!rdata||!offset||!pqt) {
-		smb_panic("parse_quota_record: called with NULL POINTER!");
-	}
+	if (!rdata||!offset||!pqt)
+		smb_panic("parse_quota_record: called with NULL POINTER!\n");
 
 	if (rdata_count < 40) {
 		return False;
@@ -126,9 +126,9 @@
 	return True;
 }
 
-bool cli_get_user_quota(struct cli_state *cli, int quota_fnum, SMB_NTQUOTA_STRUCT *pqt)
+BOOL cli_get_user_quota(struct cli_state *cli, int quota_fnum, SMB_NTQUOTA_STRUCT *pqt)
 {
-	bool ret = False;
+	BOOL ret = False;
 	uint16 setup;
 	char params[16];
 	unsigned int data_len;
@@ -138,9 +138,8 @@
 	unsigned int sid_len;
 	unsigned int offset;
 
-	if (!cli||!pqt) {
+	if (!cli||!pqt)
 		smb_panic("cli_get_user_quota() called with NULL Pointer!");
-	}
 
 	setup = NT_TRANSACT_GET_USER_QUOTA;
 
@@ -150,7 +149,7 @@
 	SIVAL(params, 8,0x00000000);
 	SIVAL(params,12,0x00000024);
 	
-	sid_len = ndr_size_dom_sid(&pqt->sid, 0);
+	sid_len = sid_size(&pqt->sid);
 	data_len = sid_len+8;
 	SIVAL(data, 0, 0x00000000);
 	SIVAL(data, 4, sid_len);
@@ -194,9 +193,9 @@
 	return ret;
 }
 
-bool cli_set_user_quota(struct cli_state *cli, int quota_fnum, SMB_NTQUOTA_STRUCT *pqt)
+BOOL cli_set_user_quota(struct cli_state *cli, int quota_fnum, SMB_NTQUOTA_STRUCT *pqt)
 {
-	bool ret = False;
+	BOOL ret = False;
 	uint16 setup;
 	char params[2];
 	char data[112];
@@ -205,15 +204,14 @@
 	unsigned int sid_len;	
 	memset(data,'\0',112);
 	
-	if (!cli||!pqt) {
+	if (!cli||!pqt)
 		smb_panic("cli_set_user_quota() called with NULL Pointer!");
-	}
 
 	setup = NT_TRANSACT_SET_USER_QUOTA;
 
 	SSVAL(params,0,quota_fnum);
 
-	sid_len = ndr_size_dom_sid(&pqt->sid, 0);
+	sid_len = sid_size(&pqt->sid);
 	SIVAL(data,0,0);
 	SIVAL(data,4,sid_len);
 	SBIG_UINT(data, 8,(SMB_BIG_UINT)0);
@@ -253,9 +251,9 @@
 	return ret;
 }
 
-bool cli_list_user_quota(struct cli_state *cli, int quota_fnum, SMB_NTQUOTA_LIST **pqt_list)
+BOOL cli_list_user_quota(struct cli_state *cli, int quota_fnum, SMB_NTQUOTA_LIST **pqt_list)
 {
-	bool ret = False;
+	BOOL ret = False;
 	uint16 setup;
 	char params[16];
 	char *rparam=NULL, *rdata=NULL;
@@ -267,9 +265,8 @@
 	SMB_NTQUOTA_STRUCT qt;
 	SMB_NTQUOTA_LIST *tmp_list_ent;
 
-	if (!cli||!pqt_list) {
+	if (!cli||!pqt_list)
 		smb_panic("cli_list_user_quota() called with NULL Pointer!");
-	}
 
 	setup = NT_TRANSACT_GET_USER_QUOTA;
 
@@ -412,9 +409,9 @@
 	return ret;
 }
 
-bool cli_get_fs_quota_info(struct cli_state *cli, int quota_fnum, SMB_NTQUOTA_STRUCT *pqt)
+BOOL cli_get_fs_quota_info(struct cli_state *cli, int quota_fnum, SMB_NTQUOTA_STRUCT *pqt)
 {
-	bool ret = False;
+	BOOL ret = False;
 	uint16 setup;
 	char param[2];
 	char *rparam=NULL, *rdata=NULL;
@@ -422,9 +419,8 @@
 	SMB_NTQUOTA_STRUCT qt;
 	ZERO_STRUCT(qt);
 
-	if (!cli||!pqt) {
+	if (!cli||!pqt)
 		smb_panic("cli_get_fs_quota_info() called with NULL Pointer!");
-	}
 
 	setup = TRANSACT2_QFSINFO;
 	
@@ -499,9 +495,9 @@
 	return ret;	
 }
 
-bool cli_set_fs_quota_info(struct cli_state *cli, int quota_fnum, SMB_NTQUOTA_STRUCT *pqt)
+BOOL cli_set_fs_quota_info(struct cli_state *cli, int quota_fnum, SMB_NTQUOTA_STRUCT *pqt)
 {
-	bool ret = False;
+	BOOL ret = False;
 	uint16 setup;
 	char param[4];
 	char data[48];
@@ -511,9 +507,8 @@
 	ZERO_STRUCT(qt);
 	memset(data,'\0',48);
 
-	if (!cli||!pqt) {
+	if (!cli||!pqt)
 		smb_panic("cli_set_fs_quota_info() called with NULL Pointer!");
-	}
 
 	setup = TRANSACT2_SETFSINFO;
 
@@ -562,29 +557,28 @@
 	return ret;	
 }
 
-static const char *quota_str_static(SMB_BIG_UINT val, bool special, bool _numeric)
+static char *quota_str_static(SMB_BIG_UINT val, BOOL special, BOOL _numeric)
 {
-	const char *result;
+	static fstring buffer;
+	
+	memset(buffer,'\0',sizeof(buffer));
 
 	if (!_numeric&&special&&(val == SMB_NTQUOTAS_NO_LIMIT)) {
-		return "NO LIMIT";
+		fstr_sprintf(buffer,"NO LIMIT");
+		return buffer;
 	}
 #if defined(HAVE_LONGLONG)
-	result = talloc_asprintf(talloc_tos(), "%llu", val);
+	fstr_sprintf(buffer,"%llu",val);
 #else
-	result = talloc_asprintf(talloc_tos(), "%lu", val);
-#endif
-	SMB_ASSERT(result != NULL);
-	return result;
+	fstr_sprintf(buffer,"%lu",val);
+#endif	
+	return buffer;
 }
 
-void dump_ntquota(SMB_NTQUOTA_STRUCT *qt, bool _verbose, bool _numeric, void (*_sidtostring)(fstring str, DOM_SID *sid, bool _numeric))
+void dump_ntquota(SMB_NTQUOTA_STRUCT *qt, BOOL _verbose, BOOL _numeric, void (*_sidtostring)(fstring str, DOM_SID *sid, BOOL _numeric))
 {
-	TALLOC_CTX *frame = talloc_stackframe();
-
-	if (!qt) {
+	if (!qt)
 		smb_panic("dump_ntquota() called with NULL pointer");
-	}
 
 	switch (qt->qtype) {
 		case SMB_USER_FS_QUOTA_TYPE:
@@ -608,7 +602,7 @@
 				if (_sidtostring) {
 					_sidtostring(username_str,&qt->sid,_numeric);
 				} else {
-					sid_to_fstring(username_str, &qt->sid);
+					fstrcpy(username_str,sid_string_static(&qt->sid));
 				}
 
 				if (_verbose) {	
@@ -626,12 +620,11 @@
 			break;
 		default:
 			d_printf("dump_ntquota() invalid qtype(%d)\n",qt->qtype);
+			return;
 	}
-	TALLOC_FREE(frame);
-	return;
 }
 
-void dump_ntquota_list(SMB_NTQUOTA_LIST **qtl, bool _verbose, bool _numeric, void (*_sidtostring)(fstring str, DOM_SID *sid, bool _numeric))
+void dump_ntquota_list(SMB_NTQUOTA_LIST **qtl, BOOL _verbose, BOOL _numeric, void (*_sidtostring)(fstring str, DOM_SID *sid, BOOL _numeric))
 {
 	SMB_NTQUOTA_LIST *cur;
 

Modified: branches/samba/upstream/source/libsmb/clirap.c
===================================================================
--- branches/samba/upstream/source/libsmb/clirap.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/clirap.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,22 +1,22 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    client RAP calls
    Copyright (C) Andrew Tridgell         1994-1998
    Copyright (C) Gerald (Jerry) Carter   2004
-   Copyright (C) James Peach		 2007
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -25,21 +25,21 @@
  Call a remote api on an arbitrary pipe.  takes param, data and setup buffers.
 ****************************************************************************/
 
-bool cli_api_pipe(struct cli_state *cli, const char *pipe_name,
+BOOL cli_api_pipe(struct cli_state *cli, const char *pipe_name, 
                   uint16 *setup, uint32 setup_count, uint32 max_setup_count,
                   char *params, uint32 param_count, uint32 max_param_count,
                   char *data, uint32 data_count, uint32 max_data_count,
                   char **rparam, uint32 *rparam_count,
                   char **rdata, uint32 *rdata_count)
 {
-	cli_send_trans(cli, SMBtrans,
-                 pipe_name,
+	cli_send_trans(cli, SMBtrans, 
+                 pipe_name, 
                  0,0,                         /* fid, flags */
                  setup, setup_count, max_setup_count,
                  params, param_count, max_param_count,
                  data, data_count, max_data_count);
 
-	return (cli_receive_trans(cli, SMBtrans,
+	return (cli_receive_trans(cli, SMBtrans, 
                             rparam, (unsigned int *)rparam_count,
                             rdata, (unsigned int *)rdata_count));
 }
@@ -48,7 +48,7 @@
  Call a remote api
 ****************************************************************************/
 
-bool cli_api(struct cli_state *cli,
+BOOL cli_api(struct cli_state *cli,
 	     char *param, int prcnt, int mprcnt,
 	     char *data, int drcnt, int mdrcnt,
 	     char **rparam, unsigned int *rprcnt,
@@ -59,7 +59,7 @@
                  0,0,                     /* fid, flags */
                  NULL,0,0,                /* Setup, length, max */
                  param, prcnt, mprcnt,    /* Params, length, max */
-                 data, drcnt, mdrcnt      /* Data, length, max */
+                 data, drcnt, mdrcnt      /* Data, length, max */ 
                 );
 
 	return (cli_receive_trans(cli,SMBtrans,
@@ -71,41 +71,41 @@
  Perform a NetWkstaUserLogon.
 ****************************************************************************/
 
-bool cli_NetWkstaUserLogon(struct cli_state *cli,char *user, char *workstation)
+BOOL cli_NetWkstaUserLogon(struct cli_state *cli,char *user, char *workstation)
 {
 	char *rparam = NULL;
 	char *rdata = NULL;
 	char *p;
 	unsigned int rdrcnt,rprcnt;
-	char param[1024];
+	pstring param;
 
 	memset(param, 0, sizeof(param));
-
+	
 	/* send a SMBtrans command with api NetWkstaUserLogon */
 	p = param;
 	SSVAL(p,0,132); /* api number */
 	p += 2;
-	strlcpy(p,"OOWb54WrLh",sizeof(param)-PTR_DIFF(p,param));
+	pstrcpy_base(p,"OOWb54WrLh",param);
 	p = skip_string(param,sizeof(param),p);
-	strlcpy(p,"WB21BWDWWDDDDDDDzzzD",sizeof(param)-PTR_DIFF(p,param));
+	pstrcpy_base(p,"WB21BWDWWDDDDDDDzzzD",param);
 	p = skip_string(param,sizeof(param),p);
 	SSVAL(p,0,1);
 	p += 2;
-	strlcpy(p,user,sizeof(param)-PTR_DIFF(p,param));
+	pstrcpy_base(p,user,param);
 	strupper_m(p);
 	p += 21;
 	p++;
 	p += 15;
-	p++;
-	strlcpy(p, workstation,sizeof(param)-PTR_DIFF(p,param));
+	p++; 
+	pstrcpy_base(p, workstation, param);
 	strupper_m(p);
 	p += 16;
 	SSVAL(p, 0, CLI_BUFFER_SIZE);
 	p += 2;
 	SSVAL(p, 0, CLI_BUFFER_SIZE);
 	p += 2;
-
-	if (cli_api(cli,
+	
+	if (cli_api(cli, 
                     param, PTR_DIFF(p,param),1024,  /* param, length, max */
                     NULL, 0, CLI_BUFFER_SIZE,           /* data, length, max */
                     &rparam, &rprcnt,               /* return params, return size */
@@ -113,7 +113,7 @@
                    )) {
 		cli->rap_error = rparam? SVAL(rparam,0) : -1;
 		p = rdata;
-
+		
 		if (cli->rap_error == 0) {
 			DEBUG(4,("NetWkstaUserLogon success\n"));
 			cli->privileges = SVAL(p, 24);
@@ -123,7 +123,7 @@
 			DEBUG(1,("NetwkstaUserLogon gave error %d\n", cli->rap_error));
 		}
 	}
-
+	
 	SAFE_FREE(rparam);
 	SAFE_FREE(rdata);
 	return (cli->rap_error == 0);
@@ -139,16 +139,16 @@
 	char *rdata = NULL;
 	char *p;
 	unsigned int rdrcnt,rprcnt;
-	char param[1024];
+	pstring param;
 	int count = -1;
 
 	/* now send a SMBtrans command with api RNetShareEnum */
 	p = param;
 	SSVAL(p,0,0); /* api number */
 	p += 2;
-	strlcpy(p,"WrLeh",sizeof(param)-PTR_DIFF(p,param));
+	pstrcpy_base(p,"WrLeh",param);
 	p = skip_string(param,sizeof(param),p);
-	strlcpy(p,"B13BWz",sizeof(param)-PTR_DIFF(p,param));
+	pstrcpy_base(p,"B13BWz",param);
 	p = skip_string(param,sizeof(param),p);
 	SSVAL(p,0,1);
 	/*
@@ -157,78 +157,44 @@
 	 */
 	SSVAL(p,2,0xFFE0);
 	p += 4;
-
-	if (cli_api(cli,
+	
+	if (cli_api(cli, 
 		    param, PTR_DIFF(p,param), 1024,  /* Param, length, maxlen */
 		    NULL, 0, 0xFFE0,            /* data, length, maxlen - Win2k needs a small buffer here too ! */
 		    &rparam, &rprcnt,                /* return params, length */
 		    &rdata, &rdrcnt))                /* return data, length */
 		{
 			int res = rparam? SVAL(rparam,0) : -1;
-
+			
 			if (res == 0 || res == ERRmoredata) {
 				int converter=SVAL(rparam,2);
 				int i;
-				char *rdata_end = rdata + rdrcnt;
-
+				
 				count=SVAL(rparam,4);
 				p = rdata;
-
+				
 				for (i=0;i<count;i++,p+=20) {
-					char *sname;
-					int type;
-					int comment_offset;
-					const char *cmnt;
-					const char *p1;
-					char *s1, *s2;
-					size_t len;
-					TALLOC_CTX *frame = talloc_stackframe();
+					char *sname = p;
+					int type = SVAL(p,14);
+					int comment_offset = IVAL(p,16) & 0xFFFF;
+					const char *cmnt = comment_offset?(rdata+comment_offset-converter):"";
+					pstring s1, s2;
 
-					if (p + 20 > rdata_end) {
-						TALLOC_FREE(frame);
-						break;
-					}
+					pull_ascii_pstring(s1, sname);
+					pull_ascii_pstring(s2, cmnt);
 
-					sname = p;
-					type = SVAL(p,14);
-					comment_offset = (IVAL(p,16) & 0xFFFF) - converter;
-					if (comment_offset < 0 ||
-							comment_offset > (int)rdrcnt) {
-						TALLOC_FREE(frame);
-						break;
-					}
-					cmnt = comment_offset?(rdata+comment_offset):"";
-
-					/* Work out the comment length. */
-					for (p1 = cmnt, len = 0; *p1 &&
-							p1 < rdata_end; len++)
-						p1++;
-					if (!*p1) {
-						len++;
-					}
-					pull_string_talloc(frame,rdata,0,
-						&s1,sname,14,STR_ASCII);
-					pull_string_talloc(frame,rdata,0,
-						&s2,cmnt,len,STR_ASCII);
-					if (!s1 || !s2) {
-						TALLOC_FREE(frame);
-						continue;
-					}
-
 					fn(s1, type, s2, state);
-
-					TALLOC_FREE(frame);
 				}
 			} else {
 				DEBUG(4,("NetShareEnum res=%d\n", res));
-			}
+			}      
 		} else {
 			DEBUG(4,("NetShareEnum failed\n"));
 		}
-
+  
 	SAFE_FREE(rparam);
 	SAFE_FREE(rdata);
-
+	
 	return count;
 }
 
@@ -240,217 +206,101 @@
  the comment and a state pointer.
 ****************************************************************************/
 
-bool cli_NetServerEnum(struct cli_state *cli, char *workgroup, uint32 stype,
+BOOL cli_NetServerEnum(struct cli_state *cli, char *workgroup, uint32 stype,
 		       void (*fn)(const char *, uint32, const char *, void *),
 		       void *state)
 {
 	char *rparam = NULL;
 	char *rdata = NULL;
-	char *rdata_end = NULL;
 	unsigned int rdrcnt,rprcnt;
 	char *p;
-	char param[1024];
+	pstring param;
 	int uLevel = 1;
+	int count = -1;
 	size_t len;
-	uint32 func = RAP_NetServerEnum2;
-	char *last_entry = NULL;
-	int total_cnt = 0;
-	int return_cnt = 0;
-	int res;
 
 	errno = 0; /* reset */
 
-	/*
-	 * This may take more than one transaction, so we should loop until
-	 * we no longer get a more data to process or we have all of the
-	 * items.
-	 */
-	do {
-		/* send a SMBtrans command with api NetServerEnum */
-	        p = param;
-		SIVAL(p,0,func); /* api number */
-	        p += 2;
-	        /* Next time through we need to use the continue api */
-	        func = RAP_NetServerEnum3;
+	/* send a SMBtrans command with api NetServerEnum */
+	p = param;
+	SSVAL(p,0,0x68); /* api number */
+	p += 2;
+	pstrcpy_base(p,"WrLehDz", param);
+	p = skip_string(param,sizeof(param),p);
+  
+	pstrcpy_base(p,"B16BBDz", param);
 
-		if (last_entry) {
-			strlcpy(p,"WrLehDOz", sizeof(param)-PTR_DIFF(p,param));
-		} else {
-			strlcpy(p,"WrLehDz", sizeof(param)-PTR_DIFF(p,param));
-		}
+	p = skip_string(param,sizeof(param),p);
+	SSVAL(p,0,uLevel);
+	SSVAL(p,2,CLI_BUFFER_SIZE);
+	p += 4;
+	SIVAL(p,0,stype);
+	p += 4;
 
-		p = skip_string(param, sizeof(param), p);
-		strlcpy(p,"B16BBDz", sizeof(param)-PTR_DIFF(p,param));
-
-		p = skip_string(param, sizeof(param), p);
-		SSVAL(p,0,uLevel);
-		SSVAL(p,2,CLI_BUFFER_SIZE);
-		p += 4;
-		SIVAL(p,0,stype);
-		p += 4;
-
-		/* If we have more data, tell the server where
-		 * to continue from.
-		 */
-		len = push_ascii(p,
-				last_entry ? last_entry : workgroup,
-				sizeof(param) - PTR_DIFF(p,param) - 1,
-				STR_TERMINATE|STR_UPPER);
-
-		if (len == (size_t)-1) {
-			SAFE_FREE(last_entry);
-			return false;
-		}
-		p += len;
-
-		if (!cli_api(cli,
-			param, PTR_DIFF(p,param), 8, /* params, length, max */
-			NULL, 0, CLI_BUFFER_SIZE, /* data, length, max */
-		            &rparam, &rprcnt, /* return params, return size */
-		            &rdata, &rdrcnt)) { /* return data, return size */
-
-			/* break out of the loop on error */
-		        res = -1;
-		        break;
-		}
-
-		rdata_end = rdata + rdrcnt;
-		res = rparam ? SVAL(rparam,0) : -1;
-
+	len = push_ascii(p, workgroup, sizeof(pstring)-PTR_DIFF(p,param)-1, STR_TERMINATE|STR_UPPER);
+	if (len == (size_t)-1) {
+		return false;
+	}
+	p += len;
+	
+	if (cli_api(cli, 
+                    param, PTR_DIFF(p,param), 8,        /* params, length, max */
+                    NULL, 0, CLI_BUFFER_SIZE,               /* data, length, max */
+                    &rparam, &rprcnt,                   /* return params, return size */
+                    &rdata, &rdrcnt                     /* return data, return size */
+                   )) {
+		int res = rparam? SVAL(rparam,0) : -1;
+			
 		if (res == 0 || res == ERRmoredata ||
                     (res != -1 && cli_errno(cli) == 0)) {
-			char *sname = NULL;
-			int i, count;
+			int i;
 			int converter=SVAL(rparam,2);
 
-			/* Get the number of items returned in this buffer */
-			count = SVAL(rparam, 4);
-
-			/* The next field contains the number of items left,
-			 * including those returned in this buffer. So the
-			 * first time through this should contain all of the
-			 * entries.
-			 */
-			if (total_cnt == 0) {
-			        total_cnt = SVAL(rparam, 6);
-			}
-
-			/* Keep track of how many we have read */
-			return_cnt += count;
+			count=SVAL(rparam,4);
 			p = rdata;
+					
+			for (i = 0;i < count;i++, p += 26) {
+				char *sname = p;
+				int comment_offset = (IVAL(p,22) & 0xFFFF)-converter;
+				const char *cmnt = comment_offset?(rdata+comment_offset):"";
+				pstring s1, s2;
 
-			/* The last name in the previous NetServerEnum reply is
-			 * sent back to server in the NetServerEnum3 request
-			 * (last_entry). The next reply should repeat this entry
-			 * as the first element. We have no proof that this is
-			 * always true, but from traces that seems to be the
-			 * behavior from Window Servers. So first lets do a lot
-			 * of checking, just being paranoid. If the string
-			 * matches then we already saw this entry so skip it.
-			 *
-			 * NOTE: sv1_name field must be null terminated and has
-			 * a max size of 16 (NetBIOS Name).
-			 */
-			if (last_entry && count && p &&
-				(strncmp(last_entry, p, 16) == 0)) {
-			    count -= 1; /* Skip this entry */
-			    return_cnt = -1; /* Not part of total, so don't count. */
-			    p = rdata + 26; /* Skip the whole record */
-			}
+				if (comment_offset < 0 || comment_offset > (int)rdrcnt) continue;
 
-			for (i = 0; i < count; i++, p += 26) {
-				int comment_offset;
-				const char *cmnt;
-				const char *p1;
-				char *s1, *s2;
-				TALLOC_CTX *frame = talloc_stackframe();
-
-				if (p + 26 > rdata_end) {
-					TALLOC_FREE(frame);
-					break;
-				}
-
-				sname = p;
-				comment_offset = (IVAL(p,22) & 0xFFFF)-converter;
-				cmnt = comment_offset?(rdata+comment_offset):"";
-
-				if (comment_offset < 0 || comment_offset > (int)rdrcnt) {
-					TALLOC_FREE(frame);
-					continue;
-				}
-
-				/* Work out the comment length. */
-				for (p1 = cmnt, len = 0; *p1 &&
-						p1 < rdata_end; len++)
-					p1++;
-				if (!*p1) {
-					len++;
-				}
-
 				stype = IVAL(p,18) & ~SV_TYPE_LOCAL_LIST_ONLY;
 
-				pull_string_talloc(frame,rdata,0,
-					&s1,sname,16,STR_ASCII);
-				pull_string_talloc(frame,rdata,0,
-					&s2,cmnt,len,STR_ASCII);
-
-				if (!s1 || !s2) {
-					TALLOC_FREE(frame);
-					continue;
-				}
-
+				pull_ascii_pstring(s1, sname);
+				pull_ascii_pstring(s2, cmnt);
 				fn(s1, stype, s2, state);
-				TALLOC_FREE(frame);
 			}
-
-			/* We are done with the old last entry, so now we can free it */
-			if (last_entry) {
-			        SAFE_FREE(last_entry); /* This will set it to null */
-			}
-
-			/* We always make a copy of  the last entry if we have one */
-			if (sname) {
-			        last_entry = smb_xstrdup(sname);
-			}
-
-			/* If we have more data, but no last entry then error out */
-			if (!last_entry && (res == ERRmoredata)) {
-			        errno = EINVAL;
-			        res = 0;
-			}
-
 		}
-
-		SAFE_FREE(rparam);
-		SAFE_FREE(rdata);
-	} while ((res == ERRmoredata) && (total_cnt > return_cnt));
-
+	}
+  
 	SAFE_FREE(rparam);
 	SAFE_FREE(rdata);
-	SAFE_FREE(last_entry);
 
-	if (res == -1) {
-		errno = cli_errno(cli);
+	if (count < 0) {
+	    errno = cli_errno(cli);
 	} else {
-		if (!return_cnt) {
-			/* this is a very special case, when the domain master for the
-			   work group isn't part of the work group itself, there is something
-			   wild going on */
-			errno = ENOENT;
-		}
+	    if (!count) {
+		/* this is a very special case, when the domain master for the 
+		   work group isn't part of the work group itself, there is something
+		   wild going on */
+		errno = ENOENT;
 	    }
-
-	return(return_cnt > 0);
+	}
+			
+	return(count > 0);
 }
 
 /****************************************************************************
  Send a SamOEMChangePassword command.
 ****************************************************************************/
 
-bool cli_oem_change_password(struct cli_state *cli, const char *user, const char *new_password,
+BOOL cli_oem_change_password(struct cli_state *cli, const char *user, const char *new_password,
                              const char *old_password)
 {
-	char param[1024];
+	pstring param;
 	unsigned char data[532];
 	char *p = param;
 	unsigned char old_pw_hash[16];
@@ -468,11 +318,11 @@
 
 	SSVAL(p,0,214); /* SamOEMChangePassword command. */
 	p += 2;
-	strlcpy(p, "zsT", sizeof(param)-PTR_DIFF(p,param));
+	pstrcpy_base(p, "zsT", param);
 	p = skip_string(param,sizeof(param),p);
-	strlcpy(p, "B516B16", sizeof(param)-PTR_DIFF(p,param));
+	pstrcpy_base(p, "B516B16", param);
 	p = skip_string(param,sizeof(param),p);
-	strlcpy(p,user, sizeof(param)-PTR_DIFF(p,param));
+	pstrcpy_base(p,user, param);
 	p = skip_string(param,sizeof(param),p);
 	SSVAL(p,0,532);
 	p += 2;
@@ -486,14 +336,14 @@
 	E_deshash(old_password, old_pw_hash);
 
 	encode_pw_buffer(data, new_password, STR_ASCII);
-
+  
 #ifdef DEBUG_PASSWORD
 	DEBUG(100,("make_oem_passwd_hash\n"));
-	dump_data(100, data, 516);
+	dump_data(100, (char *)data, 516);
 #endif
 	SamOEMhash( (unsigned char *)data, (unsigned char *)old_pw_hash, 516);
 
-	/*
+	/* 
 	 * Now place the old password hash in the data.
 	 */
 	E_deshash(new_password, new_pw_hash);
@@ -501,7 +351,7 @@
 	E_old_pw_hash( new_pw_hash, old_pw_hash, (uchar *)&data[516]);
 
 	data_len = 532;
-
+    
 	if (cli_send_trans(cli,SMBtrans,
                     PIPE_LANMAN,                          /* name */
                     0,0,                                  /* fid, flags */
@@ -521,11 +371,11 @@
 			user ));
 		return False;
 	}
-
+  
 	if (rparam) {
 		cli->rap_error = SVAL(rparam,0);
 	}
-
+  
 	SAFE_FREE(rparam);
 	SAFE_FREE(rdata);
 
@@ -536,46 +386,40 @@
  Send a qpathinfo call.
 ****************************************************************************/
 
-bool cli_qpathinfo(struct cli_state *cli,
-			const char *fname,
-			time_t *change_time,
-			time_t *access_time,
-			time_t *write_time,
-			SMB_OFF_T *size,
-			uint16 *mode)
+BOOL cli_qpathinfo(struct cli_state *cli, const char *fname, 
+		   time_t *change_time,
+                   time_t *access_time,
+                   time_t *write_time, 
+		   SMB_OFF_T *size, uint16 *mode)
 {
 	unsigned int data_len = 0;
 	unsigned int param_len = 0;
 	unsigned int rparam_len, rdata_len;
 	uint16 setup = TRANSACT2_QPATHINFO;
-	char *param;
+	pstring param;
 	char *rparam=NULL, *rdata=NULL;
 	int count=8;
-	bool ret;
-	time_t (*date_fn)(struct cli_state *, const void *);
+	BOOL ret;
+	time_t (*date_fn)(struct cli_state *, void *);
 	char *p;
-	size_t nlen = 2*(strlen(fname)+1);
 
-	param = SMB_MALLOC_ARRAY(char, 6+nlen+2);
-	if (!param) {
-		return false;
-	}
 	p = param;
-	memset(p, '\0', 6);
+	memset(p, 0, 6);
 	SSVAL(p, 0, SMB_INFO_STANDARD);
 	p += 6;
-	p += clistr_push(cli, p, fname, nlen, STR_TERMINATE);
+	p += clistr_push(cli, p, fname, sizeof(pstring)-6, STR_TERMINATE);
+
 	param_len = PTR_DIFF(p, param);
 
 	do {
-		ret = (cli_send_trans(cli, SMBtrans2,
+		ret = (cli_send_trans(cli, SMBtrans2, 
 				      NULL,           /* Name */
 				      -1, 0,          /* fid, flags */
 				      &setup, 1, 0,   /* setup, length, max */
 				      param, param_len, 10, /* param, length, max */
 				      NULL, data_len, cli->max_xmit /* data, length, max */
 				      ) &&
-		       cli_receive_trans(cli, SMBtrans2,
+		       cli_receive_trans(cli, SMBtrans2, 
 					 &rparam, &rparam_len,
 					 &rdata, &rdata_len));
 		if (!cli_is_dos_error(cli)) break;
@@ -590,7 +434,6 @@
 		}
 	} while (count-- && ret==False);
 
-	SAFE_FREE(param);
 	if (!ret || !rdata || rdata_len < 22) {
 		return False;
 	}
@@ -626,7 +469,7 @@
  Send a setpathinfo call.
 ****************************************************************************/
 
-bool cli_setpathinfo(struct cli_state *cli, const char *fname,
+BOOL cli_setpathinfo(struct cli_state *cli, const char *fname, 
                      time_t create_time,
                      time_t access_time,
                      time_t write_time,
@@ -637,19 +480,14 @@
 	unsigned int param_len = 0;
 	unsigned int rparam_len, rdata_len;
 	uint16 setup = TRANSACT2_SETPATHINFO;
-	char *param;
-	char data[40];
+	pstring param;
+        pstring data;
 	char *rparam=NULL, *rdata=NULL;
 	int count=8;
-	bool ret;
+	BOOL ret;
 	char *p;
-	size_t nlen = 2*(strlen(fname)+1);
 
-	param = SMB_MALLOC_ARRAY(char, 6+nlen+2);
-	if (!param) {
-		return false;
-	}
-	memset(param, '\0', 6);
+	memset(param, 0, sizeof(param));
 	memset(data, 0, sizeof(data));
 
         p = param;
@@ -661,7 +499,7 @@
 	p += 6;
 
         /* Add the file name */
-	p += clistr_push(cli, p, fname, nlen, STR_TERMINATE);
+	p += clistr_push(cli, p, fname, sizeof(pstring)-6, STR_TERMINATE);
 
 	param_len = PTR_DIFF(p, param);
 
@@ -670,15 +508,16 @@
         /*
          * Add the create, last access, modification, and status change times
          */
+        
         put_long_date(p, create_time);
         p += 8;
 
         put_long_date(p, access_time);
         p += 8;
-
+        
         put_long_date(p, write_time);
         p += 8;
-
+        
         put_long_date(p, change_time);
         p += 8;
 
@@ -693,14 +532,14 @@
         data_len = PTR_DIFF(p, data);
 
 	do {
-		ret = (cli_send_trans(cli, SMBtrans2,
+		ret = (cli_send_trans(cli, SMBtrans2, 
 				      NULL,           /* Name */
 				      -1, 0,          /* fid, flags */
 				      &setup, 1, 0,   /* setup, length, max */
 				      param, param_len, 10, /* param, length, max */
 				      data, data_len, cli->max_xmit /* data, length, max */
 				      ) &&
-		       cli_receive_trans(cli, SMBtrans2,
+		       cli_receive_trans(cli, SMBtrans2, 
 					 &rparam, &rparam_len,
 					 &rdata, &rdata_len));
 		if (!cli_is_dos_error(cli)) break;
@@ -715,7 +554,6 @@
 		}
 	} while (count-- && ret==False);
 
-	SAFE_FREE(param);
 	if (!ret) {
 		return False;
 	}
@@ -729,10 +567,10 @@
  Send a qpathinfo call with the SMB_QUERY_FILE_ALL_INFO info level.
 ****************************************************************************/
 
-bool cli_qpathinfo2(struct cli_state *cli, const char *fname,
+BOOL cli_qpathinfo2(struct cli_state *cli, const char *fname, 
 		    struct timespec *create_time,
                     struct timespec *access_time,
-                    struct timespec *write_time,
+                    struct timespec *write_time, 
 		    struct timespec *change_time,
                     SMB_OFF_T *size, uint16 *mode,
 		    SMB_INO_T *ino)
@@ -740,35 +578,28 @@
 	unsigned int data_len = 0;
 	unsigned int param_len = 0;
 	uint16 setup = TRANSACT2_QPATHINFO;
-	char *param;
+	pstring param;
 	char *rparam=NULL, *rdata=NULL;
 	char *p;
-	size_t nlen = 2*(strlen(fname)+1);
 
-	param = SMB_MALLOC_ARRAY(char, 6+nlen+2);
-	if (!param) {
-		return false;
-	}
 	p = param;
-	memset(param, '\0', 6);
+	memset(p, 0, 6);
 	SSVAL(p, 0, SMB_QUERY_FILE_ALL_INFO);
 	p += 6;
-	p += clistr_push(cli, p, fname, nlen, STR_TERMINATE);
+	p += clistr_push(cli, p, fname, sizeof(pstring)-6, STR_TERMINATE);
 
 	param_len = PTR_DIFF(p, param);
 
-	if (!cli_send_trans(cli, SMBtrans2,
+	if (!cli_send_trans(cli, SMBtrans2, 
                             NULL,                         /* name */
                             -1, 0,                        /* fid, flags */
                             &setup, 1, 0,                 /* setup, length, max */
                             param, param_len, 10,         /* param, length, max */
                             NULL, data_len, cli->max_xmit /* data, length, max */
                            )) {
-		SAFE_FREE(param);
 		return False;
 	}
 
-	SAFE_FREE(param);
 	if (!cli_receive_trans(cli, SMBtrans2,
                                &rparam, &param_len,
                                &rdata, &data_len)) {
@@ -778,7 +609,7 @@
 	if (!rdata || data_len < 22) {
 		return False;
 	}
-
+        
 	if (create_time) {
                 *create_time = interpret_long_date(rdata+0);
 	}
@@ -807,153 +638,24 @@
 }
 
 /****************************************************************************
- Get the stream info
-****************************************************************************/
-
-bool cli_qpathinfo_streams(struct cli_state *cli, const char *fname,
-			   TALLOC_CTX *mem_ctx,
-			   unsigned int *pnum_streams,
-			   struct stream_struct **pstreams)
-{
-	unsigned int data_len = 0;
-	unsigned int param_len = 0;
-	uint16 setup = TRANSACT2_QPATHINFO;
-	char *param;
-	char *rparam=NULL, *rdata=NULL;
-	char *p;
-	unsigned int num_streams;
-	struct stream_struct *streams;
-	unsigned int ofs;
-	size_t namelen = 2*(strlen(fname)+1);
-
-	param = SMB_MALLOC_ARRAY(char, 6+namelen+2);
-	if (param == NULL) {
-		return false;
-	}
-	p = param;
-	memset(p, 0, 6);
-	SSVAL(p, 0, SMB_FILE_STREAM_INFORMATION);
-	p += 6;
-	p += clistr_push(cli, p, fname, namelen, STR_TERMINATE);
-
-	param_len = PTR_DIFF(p, param);
-
-	if (!cli_send_trans(cli, SMBtrans2,
-                            NULL,                     /* name */
-                            -1, 0,                    /* fid, flags */
-                            &setup, 1, 0,             /* setup, len, max */
-                            param, param_len, 10,     /* param, len, max */
-                            NULL, data_len, cli->max_xmit /* data, len, max */
-                           )) {
-		return false;
-	}
-
-	if (!cli_receive_trans(cli, SMBtrans2,
-                               &rparam, &param_len,
-                               &rdata, &data_len)) {
-		return false;
-	}
-
-	if (!rdata) {
-		SAFE_FREE(rparam);
-		return false;
-	}
-
-	num_streams = 0;
-	streams = NULL;
-	ofs = 0;
-
-	while ((data_len > ofs) && (data_len - ofs >= 24)) {
-		uint32_t nlen, len;
-		ssize_t size;
-		void *vstr;
-		struct stream_struct *tmp;
-		uint8_t *tmp_buf;
-
-		tmp = TALLOC_REALLOC_ARRAY(mem_ctx, streams,
-					   struct stream_struct,
-					   num_streams+1);
-
-		if (tmp == NULL) {
-			goto fail;
-		}
-		streams = tmp;
-
-		nlen                      = IVAL(rdata, ofs + 0x04);
-
-		streams[num_streams].size = IVAL_TO_SMB_OFF_T(
-			rdata, ofs + 0x08);
-		streams[num_streams].alloc_size = IVAL_TO_SMB_OFF_T(
-			rdata, ofs + 0x10);
-
-		if (nlen > data_len - (ofs + 24)) {
-			goto fail;
-		}
-
-		/*
-		 * We need to null-terminate src, how do I do this with
-		 * convert_string_talloc??
-		 */
-
-		tmp_buf = TALLOC_ARRAY(streams, uint8_t, nlen+2);
-		if (tmp_buf == NULL) {
-			goto fail;
-		}
-
-		memcpy(tmp_buf, rdata+ofs+24, nlen);
-		tmp_buf[nlen] = 0;
-		tmp_buf[nlen+1] = 0;
-
-		size = convert_string_talloc(streams, CH_UTF16, CH_UNIX,
-					     tmp_buf, nlen+2, &vstr,
-					     false);
-		TALLOC_FREE(tmp_buf);
-
-		if (size == -1) {
-			goto fail;
-		}
-		streams[num_streams].name = (char *)vstr;
-		num_streams++;
-
-		len = IVAL(rdata, ofs);
-		if (len > data_len - ofs) {
-			goto fail;
-		}
-		if (len == 0) break;
-		ofs += len;
-	}
-
-	SAFE_FREE(rdata);
-	SAFE_FREE(rparam);
-
-	*pnum_streams = num_streams;
-	*pstreams = streams;
-	return true;
-
- fail:
-	TALLOC_FREE(streams);
-	SAFE_FREE(rdata);
-	SAFE_FREE(rparam);
-	return false;
-}
-
-/****************************************************************************
  Send a qfileinfo QUERY_FILE_NAME_INFO call.
 ****************************************************************************/
 
-bool cli_qfilename(struct cli_state *cli, int fnum, char *name, size_t namelen)
+BOOL cli_qfilename(struct cli_state *cli, int fnum, 
+		   pstring name)
 {
 	unsigned int data_len = 0;
 	unsigned int param_len = 0;
 	uint16 setup = TRANSACT2_QFILEINFO;
-	char param[4];
+	pstring param;
 	char *rparam=NULL, *rdata=NULL;
 
 	param_len = 4;
+	memset(param, 0, param_len);
 	SSVAL(param, 0, fnum);
 	SSVAL(param, 2, SMB_QUERY_FILE_NAME_INFO);
 
-	if (!cli_send_trans(cli, SMBtrans2,
+	if (!cli_send_trans(cli, SMBtrans2, 
                             NULL,                         /* name */
                             -1, 0,                        /* fid, flags */
                             &setup, 1, 0,                 /* setup, length, max */
@@ -973,7 +675,7 @@
 		return False;
 	}
 
-	clistr_pull(cli, name, rdata+4, namelen, IVAL(rdata, 0), STR_UNICODE);
+	clistr_pull(cli, name, rdata+4, sizeof(pstring), IVAL(rdata, 0), STR_UNICODE);
 
 	return True;
 }
@@ -982,18 +684,18 @@
  Send a qfileinfo call.
 ****************************************************************************/
 
-bool cli_qfileinfo(struct cli_state *cli, int fnum,
+BOOL cli_qfileinfo(struct cli_state *cli, int fnum, 
 		   uint16 *mode, SMB_OFF_T *size,
 		   struct timespec *create_time,
                    struct timespec *access_time,
-                   struct timespec *write_time,
+                   struct timespec *write_time, 
 		   struct timespec *change_time,
                    SMB_INO_T *ino)
 {
 	unsigned int data_len = 0;
 	unsigned int param_len = 0;
 	uint16 setup = TRANSACT2_QFILEINFO;
-	char param[4];
+	pstring param;
 	char *rparam=NULL, *rdata=NULL;
 
 	/* if its a win95 server then fail this - win95 totally screws it
@@ -1002,10 +704,11 @@
 
 	param_len = 4;
 
+	memset(param, 0, param_len);
 	SSVAL(param, 0, fnum);
 	SSVAL(param, 2, SMB_QUERY_FILE_ALL_INFO);
 
-	if (!cli_send_trans(cli, SMBtrans2,
+	if (!cli_send_trans(cli, SMBtrans2, 
                             NULL,                         /* name */
                             -1, 0,                        /* fid, flags */
                             &setup, 1, 0,                 /* setup, length, max */
@@ -1056,59 +759,42 @@
  Send a qpathinfo BASIC_INFO call.
 ****************************************************************************/
 
-bool cli_qpathinfo_basic( struct cli_state *cli, const char *name,
+BOOL cli_qpathinfo_basic( struct cli_state *cli, const char *name, 
                           SMB_STRUCT_STAT *sbuf, uint32 *attributes )
 {
 	unsigned int param_len = 0;
 	unsigned int data_len = 0;
 	uint16 setup = TRANSACT2_QPATHINFO;
-	char *param;
+	char param[sizeof(pstring)+6];
 	char *rparam=NULL, *rdata=NULL;
 	char *p;
-	char *path;
+	pstring path;
 	int len;
-	size_t nlen;
-	TALLOC_CTX *frame = talloc_stackframe();
-
-	path = talloc_strdup(frame, name);
-	if (!path) {
-		TALLOC_FREE(frame);
-		return false;
-	}
+	
+	pstrcpy( path, name );
 	/* cleanup */
-
-	len = strlen(path);
-	if ( path[len-1] == '\\' || path[len-1] == '/') {
+	
+	len = strlen( path );
+	if ( path[len-1] == '\\' || path[len-1] == '/')
 		path[len-1] = '\0';
-	}
-	nlen = 2*(strlen(path)+1);
 
-	param = TALLOC_ARRAY(frame,char,6+nlen+2);
-	if (!param) {
-		return false;
-	}
 	p = param;
-	memset(param, '\0', 6);
-
+	memset(p, 0, 6);
 	SSVAL(p, 0, SMB_QUERY_FILE_BASIC_INFO);
 	p += 6;
-	p += clistr_push(cli, p, path, nlen, STR_TERMINATE);
+	p += clistr_push(cli, p, path, sizeof(pstring)-6, STR_TERMINATE);
 	param_len = PTR_DIFF(p, param);
 
-
 	if (!cli_send_trans(cli, SMBtrans2,
-			NULL,                        /* name */
-			-1, 0,                       /* fid, flags */
-			&setup, 1, 0,                /* setup, length, max */
-			param, param_len, 2,         /* param, length, max */
-			NULL,  0, cli->max_xmit      /* data, length, max */
-			)) {
-		TALLOC_FREE(frame);
-		return False;
+		NULL,                        /* name */
+		-1, 0,                       /* fid, flags */
+		&setup, 1, 0,                /* setup, length, max */
+		param, param_len, 2,         /* param, length, max */
+		NULL,  0, cli->max_xmit      /* data, length, max */
+		)) {
+			return False;
 	}
 
-	TALLOC_FREE(frame);
-
 	if (!cli_receive_trans(cli, SMBtrans2,
 		&rparam, &param_len,
 		&rdata, &data_len)) {
@@ -1124,12 +810,12 @@
 	set_atimespec(sbuf, interpret_long_date( rdata+8 )); /* Access time. */
 	set_mtimespec(sbuf, interpret_long_date( rdata+16 )); /* Write time. */
 	set_ctimespec(sbuf, interpret_long_date( rdata+24 )); /* Change time. */
-
+	
 	*attributes = IVAL( rdata, 32 );
-
+	
 	SAFE_FREE(rparam);
 	SAFE_FREE(rdata);
-
+	
 	return True;
 }
 
@@ -1137,12 +823,12 @@
  Send a qfileinfo call.
 ****************************************************************************/
 
-bool cli_qfileinfo_test(struct cli_state *cli, int fnum, int level, char **poutdata, uint32 *poutlen)
+BOOL cli_qfileinfo_test(struct cli_state *cli, int fnum, int level, char **poutdata, uint32 *poutlen)
 {
 	unsigned int data_len = 0;
 	unsigned int param_len = 0;
 	uint16 setup = TRANSACT2_QFILEINFO;
-	char param[4];
+	pstring param;
 	char *rparam=NULL, *rdata=NULL;
 
 	*poutdata = NULL;
@@ -1155,10 +841,11 @@
 
 	param_len = 4;
 
+	memset(param, 0, param_len);
 	SSVAL(param, 0, fnum);
 	SSVAL(param, 2, level);
 
-	if (!cli_send_trans(cli, SMBtrans2,
+	if (!cli_send_trans(cli, SMBtrans2, 
                             NULL,                           /* name */
                             -1, 0,                          /* fid, flags */
                             &setup, 1, 0,                   /* setup, length, max */
@@ -1197,34 +884,30 @@
 	unsigned int data_len = 0;
 	unsigned int param_len = 0;
 	uint16 setup = TRANSACT2_QPATHINFO;
-	char *param;
+	pstring param;
 	char *rparam=NULL, *rdata=NULL;
 	int count=8;
 	char *p;
-	bool ret;
+	BOOL ret;
 	unsigned int len;
-	size_t nlen = 2*(strlen(fname)+1);
 
-	param = SMB_MALLOC_ARRAY(char, 6+nlen+2);
-	if (!param) {
-		return NT_STATUS_NO_MEMORY;
-	}
 	p = param;
-	memset(param, '\0', 6);
+	memset(p, 0, 6);
 	SSVAL(p, 0, SMB_QUERY_FILE_ALT_NAME_INFO);
 	p += 6;
-	p += clistr_push(cli, p, fname, nlen, STR_TERMINATE);
+	p += clistr_push(cli, p, fname, sizeof(pstring)-6, STR_TERMINATE);
+
 	param_len = PTR_DIFF(p, param);
 
 	do {
-		ret = (cli_send_trans(cli, SMBtrans2,
+		ret = (cli_send_trans(cli, SMBtrans2, 
 				      NULL,           /* Name */
 				      -1, 0,          /* fid, flags */
 				      &setup, 1, 0,   /* setup, length, max */
 				      param, param_len, 10, /* param, length, max */
 				      NULL, data_len, cli->max_xmit /* data, length, max */
 				      ) &&
-		       cli_receive_trans(cli, SMBtrans2,
+		       cli_receive_trans(cli, SMBtrans2, 
 					 &rparam, &param_len,
 					 &rdata, &data_len));
 		if (!ret && cli_is_dos_error(cli)) {
@@ -1238,8 +921,6 @@
 		}
 	} while (count-- && ret==False);
 
-	SAFE_FREE(param);
-
 	if (!ret || !rdata || data_len < 4) {
 		return NT_STATUS_UNSUCCESSFUL;
 	}

Modified: branches/samba/upstream/source/libsmb/clirap2.c
===================================================================
--- branches/samba/upstream/source/libsmb/clirap2.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/clirap2.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,22 +1,23 @@
-/*
-   Samba Unix/Linux SMB client library
+/* 
+   Samba Unix/Linux SMB client library 
    More client RAP (SMB Remote Procedure Calls) functions
    Copyright (C) 2001 Steve French (sfrench at us.ibm.com)
    Copyright (C) 2001 Jim McDonough (jmcd at us.ibm.com)
-   Copyright (C) 2007 Jeremy Allison. jra at samba.org
-
+                    
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /*****************************************************/
@@ -30,8 +31,8 @@
 /*   supports all RAP command codes since some       */
 /*   are quite obsolete and a few are specific       */
 /*   to a particular network operating system        */
-/*                                                   */
-/*   Although it has largely been replaced           */
+/*                                                   */ 
+/*   Although it has largely been replaced           */ 
 /*   for complex remote admistration and management  */
 /*   (of servers) by the relatively newer            */
 /*   DCE/RPC based remote API (which better handles  */
@@ -73,1380 +74,1140 @@
 /* WPrintJobEnum (API num 76, level 2)               */
 /* WPrintJobDel  (API num 81)                        */
 /*                                                   */
-/*****************************************************/
+/*****************************************************/ 
 
-#include "includes.h"
+#include "includes.h" 
 
 #define WORDSIZE 2
 #define DWORDSIZE 4
 
 #define PUTBYTE(p,b) do {SCVAL(p,0,b); p++;} while(0)
-
-#define GETBYTE(p,b,endp) \
-	do {\
-		if (p+1 < endp) {\
-			b = CVAL(p,0);\
-		}\
-		p++;\
-	} while(0)
-
+#define GETBYTE(p,b) do {b = CVAL(p,0); p++;} while(0)
 #define PUTWORD(p,w) do {SSVAL(p,0,w); p += WORDSIZE;} while(0)
-
-#define GETWORD(p,w,endp) \
-	do {\
-		if (p+WORDSIZE < endp) {\
-			w = SVAL(p,0);\
-		}\
-		p += WORDSIZE;\
-	} while(0)
-
+#define GETWORD(p,w) do {w = SVAL(p,0); p += WORDSIZE;} while(0)
 #define PUTDWORD(p,d) do {SIVAL(p,0,d); p += DWORDSIZE;} while(0)
-
-#define GETDWORD(p,d,endp) \
-	do {\
-		if (p+DWORDSIZE < endp) {\
-			d = IVAL(p,0);\
-		}\
-		p += DWORDSIZE;\
-	} while(0)
-
-#define GETRES(p,endp) ((p && p+2 < endp) ? SVAL(p,0) : -1)
-
+#define GETDWORD(p,d) do {d = IVAL(p,0); p += DWORDSIZE;} while(0)
+#define GETRES(p) p ? SVAL(p,0) : -1
 /* put string s at p with max len n and increment p past string */
-#define PUTSTRING(p,s,n) \
-	do {\
-		push_ascii(p,s?s:"",n?n:256,STR_TERMINATE);\
-		p = push_skip_string(p);\
-	} while(0)
-
+#define PUTSTRING(p,s,n) do {\
+  push_ascii(p,s?s:"",n?n:256,STR_TERMINATE);\
+  p = push_skip_string(p);\
+  } while(0)
 /* put string s and p, using fixed len l, and increment p by l */
-#define PUTSTRINGF(p,s,l) \
-	do {\
-		push_ascii(p,s?s:"",l,STR_TERMINATE);\
-		p += l;\
-	} while (0)
-
+#define PUTSTRINGF(p,s,l) do {\
+  push_ascii(p,s?s:"",l,STR_TERMINATE);\
+  p += l;\
+  } while (0)
 /* put string pointer at p, supplying offset o from rdata r, store   */
 /* dword offset at p, increment p by 4 and o by length of s.  This   */
 /* means on the first call, you must calc the offset yourself!       */
+#define PUTSTRINGP(p,s,r,o) do {\
+  if (s) {\
+    push_ascii(r+o,s,strlen(s)+1,STR_TERMINATE);\
+    PUTDWORD(p,o);\
+    o += strlen(s) + 1;\
+  } else PUTDWORD(p,0);\
+  }while(0);
+/* get asciiz string s from p, increment p past string */
+#define GETSTRING(p,s) do {\
+  pull_ascii_pstring(s,p);\
+  p = push_skip_string(p);\
+  } while(0)
+/* get fixed length l string s from p, increment p by l */
+#define GETSTRINGF(p,s,l) do {\
+  pull_ascii_pstring(s,p);\
+  p += l;\
+  } while(0)
+/* get string s from offset (obtained at p) from rdata r - converter c */
+#define GETSTRINGP(p,s,r,c) do {\
+  uint32 off;\
+  GETDWORD(p,off);\
+  off &= 0x0000FFFF; /* mask the obsolete segment number from the offset */ \
+  pull_ascii_pstring(s, off?(r+off-c):"");\
+  } while(0)
 
-#define PUTSTRINGP(p,s,r,o) \
-	do {\
-		if (s) {\
-			push_ascii(r+o,s,strlen(s)+1,STR_TERMINATE);\
-			PUTDWORD(p,o);\
-			o += strlen(s) + 1;\
-		} else {\
-			PUTDWORD(p,0);\
-		}\
-	}while(0);
-
-/* get asciiz string dest from src, return increment past string */
-
-static size_t rap_getstring(TALLOC_CTX *ctx, char *src, char **dest, const char *endp)
-{
-	char *p1;
-	size_t len;
-
-	*dest = NULL;
-	for (p1 = src, len = 0; *p1 && p1 < endp; len++)
-		p1++;
-	if (!*p1) {
-		len++;
-	}
-	pull_string_talloc(ctx,src,0,dest,src,len,STR_ASCII);
-	return len;
-}
-
-/* get fixed length l string dest from src, return increment for src */
-
-static size_t rap_getstringf(char *src, char *dest, size_t l, size_t dlen, char *endp)
-{
-	char *p1;
-	size_t len;
-
-	if (dlen) {
-		dest[0] = '\0';
-	}
-	for (p1 = src, len = 0; *p1 && p1 < endp; len++) {
-		p1++;
-	}
-	if (!*p1) {
-		len++;
-	}
-	if (len > l) {
-		len = l;
-	}
-	if (len) {
-	 	pull_ascii(dest,src,len,len,STR_ASCII);
-	}
-	return l;
-}
-
-/* get string dest from offset (obtained at p) from rdata r - converter c */
-static size_t rap_getstringp(TALLOC_CTX *ctx, char *p, char **dest, char *r, uint16_t c, char *endp)
-{
-	uint32_t off = 0;
-	const char *src;
-	size_t len=0;
-
-	*dest = NULL;
-	if (p+4 < endp) {
-		GETDWORD(p,off,endp);
-		off &= 0x0000FFFF; /* mask the obsolete segment number from the offset */
-		off -= c;
-	}
-	if (r+off > endp || r+off < r) {
-		src="";
-		len=1;
-	} else {
-		const char *p1;
-		src=r+off;
-		for (p1 = src, len = 0; *p1 && p1 < endp; len++) {
-			p1++;
-		}
-		if (!*p1) {
-			len++;
-		}
-	}
-	pull_string_talloc(ctx,src,0,dest,src,len,STR_ASCII);
-	return len;
-}
-
 static char *make_header(char *param, uint16 apinum, const char *reqfmt, const char *datafmt)
 {
-	PUTWORD(param,apinum);
-	if (reqfmt)
-		PUTSTRING(param,reqfmt,0);
-	else
-		*param++ = (char) 0;
+  PUTWORD(param,apinum);
+  if (reqfmt) 
+    PUTSTRING(param,reqfmt,0);
+  else 
+    *param++ = (char) 0;
 
-	if (datafmt)
-		PUTSTRING(param,datafmt,0);
-	else
-		*param++ = (char) 0;
+  if (datafmt)
+    PUTSTRING(param,datafmt,0);
+  else
+    *param++ = (char) 0;
 
-	return param;
+  return param;
 }
+    
 
 /****************************************************************************
  call a NetGroupDelete - delete user group from remote server
 ****************************************************************************/
-
-int cli_NetGroupDelete(struct cli_state *cli, const char *group_name)
+int cli_NetGroupDelete(struct cli_state *cli, const char *group_name )
 {
-	char *rparam = NULL;
-	char *rdata = NULL;
-	char *p;
-	unsigned int rdrcnt,rprcnt;
-	int res = -1;
-	char param[WORDSIZE                    /* api number    */
+  char *rparam = NULL;
+  char *rdata = NULL;
+  char *p;
+  unsigned int rdrcnt,rprcnt;
+  int res;
+  char param[WORDSIZE                    /* api number    */
 	    +sizeof(RAP_NetGroupDel_REQ) /* parm string   */
 	    +1                           /* no ret string */
 	    +RAP_GROUPNAME_LEN           /* group to del  */
 	    +WORDSIZE];                  /* reserved word */
 
-	/* now send a SMBtrans command with api GroupDel */
-	p = make_header(param, RAP_WGroupDel, RAP_NetGroupDel_REQ, NULL);
-	PUTSTRING(p, group_name, RAP_GROUPNAME_LEN);
-	PUTWORD(p,0);  /* reserved word MBZ on input */
-
-	if (cli_api(cli,
+  /* now send a SMBtrans command with api GroupDel */
+  p = make_header(param, RAP_WGroupDel, RAP_NetGroupDel_REQ, NULL);  
+  PUTSTRING(p, group_name, RAP_GROUPNAME_LEN);
+  PUTWORD(p,0);  /* reserved word MBZ on input */
+        	 
+  if (cli_api(cli, 
 	      param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */
 	      NULL, 0, 200,       /* data, length, maxlen */
 	      &rparam, &rprcnt,   /* return params, length */
 	      &rdata, &rdrcnt))   /* return data, length */
-	{
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam,endp);
-
-		if (res == 0) {
-			/* nothing to do */
-		} else if ((res == 5) || (res == 65)) {
-			DEBUG(1, ("Access Denied\n"));
-		} else if (res == 2220) {
-			DEBUG (1, ("Group does not exist\n"));
-		} else {
-			DEBUG(4,("NetGroupDelete res=%d\n", res));
-		}
-	} else {
-		res = -1;
-		DEBUG(4,("NetGroupDelete failed\n"));
-	}
-
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-
-	return res;
+    {
+      res = GETRES(rparam);
+			
+      if (res == 0) {
+	/* nothing to do */		
+      }
+      else if ((res == 5) || (res == 65)) {
+          DEBUG(1, ("Access Denied\n"));
+      }
+      else if (res == 2220) {
+         DEBUG (1, ("Group does not exist\n"));
+      }
+      else {
+	DEBUG(4,("NetGroupDelete res=%d\n", res));
+      }      
+    } else {
+      res = -1;
+      DEBUG(4,("NetGroupDelete failed\n"));
+    }
+  
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
+  
+  return res;
 }
 
 /****************************************************************************
  call a NetGroupAdd - add user group to remote server
 ****************************************************************************/
-
-int cli_NetGroupAdd(struct cli_state *cli, RAP_GROUP_INFO_1 *grinfo)
+int cli_NetGroupAdd(struct cli_state *cli, RAP_GROUP_INFO_1 * grinfo )
 {
-	char *rparam = NULL;
-	char *rdata = NULL;
-	char *p;
-	unsigned int rdrcnt,rprcnt;
-	int res = -1;
-	char param[WORDSIZE                    /* api number    */
+  char *rparam = NULL;
+  char *rdata = NULL;
+  char *p;
+  unsigned int rdrcnt,rprcnt;
+  int res;
+  char param[WORDSIZE                    /* api number    */
 	    +sizeof(RAP_NetGroupAdd_REQ) /* req string    */
 	    +sizeof(RAP_GROUP_INFO_L1)   /* return string */
 	    +WORDSIZE                    /* info level    */
 	    +WORDSIZE];                  /* reserved word */
 
-	/* offset into data of free format strings.  Will be updated */
-	/* by PUTSTRINGP macro and end up with total data length.    */
-	int soffset = RAP_GROUPNAME_LEN + 1 + DWORDSIZE;
-	char *data;
-	size_t data_size;
+  /* offset into data of free format strings.  Will be updated */
+  /* by PUTSTRINGP macro and end up with total data length.    */
+  int soffset = RAP_GROUPNAME_LEN + 1 + DWORDSIZE; 
+  char *data;
+  size_t data_size;
 
-	/* Allocate data. */
-	data_size = MAX(soffset + strlen(grinfo->comment) + 1, 1024);
+  /* Allocate data. */
+  data_size = MAX(soffset + strlen(grinfo->comment) + 1, 1024);
 
-	data = SMB_MALLOC_ARRAY(char, data_size);
-	if (!data) {
-		DEBUG (1, ("Malloc fail\n"));
-		return -1;
-	}
+  data = SMB_MALLOC_ARRAY(char, data_size);
+  if (!data) {
+    DEBUG (1, ("Malloc fail\n"));
+    return -1;
+  }
 
-	/* now send a SMBtrans command with api WGroupAdd */
-
-	p = make_header(param, RAP_WGroupAdd,
-			RAP_NetGroupAdd_REQ, RAP_GROUP_INFO_L1);
-	PUTWORD(p, 1); /* info level */
-	PUTWORD(p, 0); /* reserved word 0 */
-
-	p = data;
-	PUTSTRINGF(p, grinfo->group_name, RAP_GROUPNAME_LEN);
-	PUTBYTE(p, 0); /* pad byte 0 */
-	PUTSTRINGP(p, grinfo->comment, data, soffset);
-
-	if (cli_api(cli,
+  /* now send a SMBtrans command with api WGroupAdd */
+  
+  p = make_header(param, RAP_WGroupAdd,
+		  RAP_NetGroupAdd_REQ, RAP_GROUP_INFO_L1); 
+  PUTWORD(p, 1); /* info level */
+  PUTWORD(p, 0); /* reserved word 0 */
+  
+  p = data;
+  PUTSTRINGF(p, grinfo->group_name, RAP_GROUPNAME_LEN);
+  PUTBYTE(p, 0); /* pad byte 0 */
+  PUTSTRINGP(p, grinfo->comment, data, soffset);
+  
+  if (cli_api(cli, 
 	      param, sizeof(param), 1024, /* Param, length, maxlen */
 	      data, soffset, sizeof(data), /* data, length, maxlen */
 	      &rparam, &rprcnt,   /* return params, length */
 	      &rdata, &rdrcnt))   /* return data, length */
-	{
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam, endp);
+    {
+      res = GETRES(rparam);
+      
+      if (res == 0) {
+	/* nothing to do */		
+      } else if ((res == 5) || (res == 65)) {
+        DEBUG(1, ("Access Denied\n"));
+      }
+      else if (res == 2223) {
+        DEBUG (1, ("Group already exists\n"));
+      }
+      else {
+    	DEBUG(4,("NetGroupAdd res=%d\n", res));
+      }
+    } else {
+      res = -1;
+      DEBUG(4,("NetGroupAdd failed\n"));
+    }
+  
+  SAFE_FREE(data);
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
 
-		if (res == 0) {
-			/* nothing to do */
-		} else if ((res == 5) || (res == 65)) {
-			DEBUG(1, ("Access Denied\n"));
-		} else if (res == 2223) {
-			DEBUG (1, ("Group already exists\n"));
-		} else {
-			DEBUG(4,("NetGroupAdd res=%d\n", res));
-		}
-	} else {
-		res = -1;
-		DEBUG(4,("NetGroupAdd failed\n"));
-	}
-
-	SAFE_FREE(data);
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-
-	return res;
+  return res;
 }
 
 /****************************************************************************
- Call a NetGroupEnum - try and list user groups on a different host.
+call a NetGroupEnum - try and list user groups on a different host
 ****************************************************************************/
-
 int cli_RNetGroupEnum(struct cli_state *cli, void (*fn)(const char *, const char *, void *), void *state)
 {
-	char param[WORDSIZE                     /* api number    */
+  char param[WORDSIZE                     /* api number    */
 	    +sizeof(RAP_NetGroupEnum_REQ) /* parm string   */
 	    +sizeof(RAP_GROUP_INFO_L1)    /* return string */
 	    +WORDSIZE                     /* info level    */
 	    +WORDSIZE];                   /* buffer size   */
-	char *p;
-	char *rparam = NULL;
-	char *rdata = NULL;
-	unsigned int rprcnt, rdrcnt;
-	int res = -1;
-
-	memset(param, '\0', sizeof(param));
-	p = make_header(param, RAP_WGroupEnum,
+  char *p;
+  char *rparam = NULL;
+  char *rdata = NULL; 
+  unsigned int rprcnt, rdrcnt;
+  int res = -1;
+  
+  
+  memset(param, '\0', sizeof(param));
+  p = make_header(param, RAP_WGroupEnum,
 		  RAP_NetGroupEnum_REQ, RAP_GROUP_INFO_L1);
-	PUTWORD(p,1); /* Info level 1 */  /* add level 0 */
-	PUTWORD(p,0xFFE0); /* Return buffer size */
+  PUTWORD(p,1); /* Info level 1 */  /* add level 0 */
+  PUTWORD(p,0xFFE0); /* Return buffer size */
 
-	if (cli_api(cli,
+  if (cli_api(cli,
 	      param, PTR_DIFF(p,param),8,
 	      NULL, 0, 0xFFE0 /* data area size */,
 	      &rparam, &rprcnt,
 	      &rdata, &rdrcnt)) {
-		char *endp = rparam + rdrcnt;
+    res = GETRES(rparam);
+    cli->rap_error = res;
+    if(cli->rap_error == 234) 
+        DEBUG(1,("Not all group names were returned (such as those longer than 21 characters)\n"));
+    else if (cli->rap_error != 0) {
+      DEBUG(1,("NetGroupEnum gave error %d\n", cli->rap_error));
+    }
+  }
 
-		res = GETRES(rparam, endp);
-		cli->rap_error = res;
-		if(cli->rap_error == 234) {
-			DEBUG(1,("Not all group names were returned (such as those longer than 21 characters)\n"));
-		} else if (cli->rap_error != 0) {
-			DEBUG(1,("NetGroupEnum gave error %d\n", cli->rap_error));
-		}
-	}
+  if (rdata) {
+    if (res == 0 || res == ERRmoredata) {
+      int i, converter, count;
 
-	if (!rdata) {
-		DEBUG(4,("NetGroupEnum no data returned\n"));
-		goto out;
-	}
+      p = rparam + WORDSIZE; /* skip result */
+      GETWORD(p, converter);
+      GETWORD(p, count);
 
-	if (res == 0 || res == ERRmoredata) {
-		char *endp = rparam + rprcnt;
-		int i, converter = 0, count = 0;
-		TALLOC_CTX *frame = talloc_stackframe();
+      for (i=0,p=rdata;i<count;i++) {
+	    pstring comment;
+	    char groupname[RAP_GROUPNAME_LEN];
 
-		p = rparam + WORDSIZE; /* skip result */
-		GETWORD(p, converter, endp);
-		GETWORD(p, count, endp);
+	    GETSTRINGF(p, groupname, RAP_GROUPNAME_LEN);
+	    p++; /* pad byte */
+	    GETSTRINGP(p, comment, rdata, converter);
 
-		endp = rdata + rdrcnt;
-		for (i=0,p=rdata; i<count && p < endp;i++) {
-			char *comment = NULL;
-			char groupname[RAP_GROUPNAME_LEN];
+	    fn(groupname, comment, cli);
+      }	
+    } else {
+      DEBUG(4,("NetGroupEnum res=%d\n", res));
+    }
+  } else {
+    DEBUG(4,("NetGroupEnum no data returned\n"));
+  }
+    
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
 
-			p += rap_getstringf(p,
-					groupname,
-					RAP_GROUPNAME_LEN,
-					RAP_GROUPNAME_LEN,
-					endp);
-			p++; /* pad byte */
-			p += rap_getstringp(frame,
-					p,
-					&comment,
-					rdata,
-					converter,
-					endp);
-
-			if (!comment || !groupname[0]) {
-				break;
-			}
-
-			fn(groupname, comment, cli);
-		}
-		TALLOC_FREE(frame);
-	} else {
-		DEBUG(4,("NetGroupEnum res=%d\n", res));
-	}
-
-  out:
-
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-
-	return res;
+  return res;
 }
 
 int cli_RNetGroupEnum0(struct cli_state *cli,
 		       void (*fn)(const char *, void *),
 		       void *state)
 {
-	char param[WORDSIZE                     /* api number    */
-		+sizeof(RAP_NetGroupEnum_REQ) /* parm string   */
-		+sizeof(RAP_GROUP_INFO_L0)    /* return string */
-		+WORDSIZE                     /* info level    */
-		+WORDSIZE];                   /* buffer size   */
-	char *p;
-	char *rparam = NULL;
-	char *rdata = NULL;
-	unsigned int rprcnt, rdrcnt;
-	int res = -1;
-
-	memset(param, '\0', sizeof(param));
-	p = make_header(param, RAP_WGroupEnum,
-		RAP_NetGroupEnum_REQ, RAP_GROUP_INFO_L0);
-	PUTWORD(p,0); /* Info level 0 */ /* Hmmm. I *very* much suspect this
+  char param[WORDSIZE                     /* api number    */
+	    +sizeof(RAP_NetGroupEnum_REQ) /* parm string   */
+	    +sizeof(RAP_GROUP_INFO_L0)    /* return string */
+	    +WORDSIZE                     /* info level    */
+	    +WORDSIZE];                   /* buffer size   */
+  char *p;
+  char *rparam = NULL;
+  char *rdata = NULL; 
+  unsigned int rprcnt, rdrcnt;
+  int res = -1;
+  
+  
+  memset(param, '\0', sizeof(param));
+  p = make_header(param, RAP_WGroupEnum,
+		  RAP_NetGroupEnum_REQ, RAP_GROUP_INFO_L0);
+  PUTWORD(p,0); /* Info level 0 */ /* Hmmm. I *very* much suspect this
 				      is the resume count, at least
 				      that's what smbd believes... */
-	PUTWORD(p,0xFFE0); /* Return buffer size */
+  PUTWORD(p,0xFFE0); /* Return buffer size */
 
-	if (cli_api(cli,
-			param, PTR_DIFF(p,param),8,
-			NULL, 0, 0xFFE0 /* data area size */,
-			&rparam, &rprcnt,
-			&rdata, &rdrcnt)) {
-		char *endp = rparam+rprcnt;
-		res = GETRES(rparam,endp);
-		cli->rap_error = res;
-		if(cli->rap_error == 234) {
-			DEBUG(1,("Not all group names were returned (such as those longer than 21 characters)\n"));
-		} else if (cli->rap_error != 0) {
-			DEBUG(1,("NetGroupEnum gave error %d\n", cli->rap_error));
-		}
-	}
+  if (cli_api(cli,
+	      param, PTR_DIFF(p,param),8,
+	      NULL, 0, 0xFFE0 /* data area size */,
+	      &rparam, &rprcnt,
+	      &rdata, &rdrcnt)) {
+    res = GETRES(rparam);
+    cli->rap_error = res;
+    if(cli->rap_error == 234) 
+        DEBUG(1,("Not all group names were returned (such as those longer than 21 characters)\n"));
+    else if (cli->rap_error != 0) {
+      DEBUG(1,("NetGroupEnum gave error %d\n", cli->rap_error));
+    }
+  }
 
-	if (!rdata) {
-		DEBUG(4,("NetGroupEnum no data returned\n"));
-		goto out;
-	}
+  if (rdata) {
+    if (res == 0 || res == ERRmoredata) {
+      int i, count;
 
-	if (res == 0 || res == ERRmoredata) {
-		char *endp = rparam + rprcnt;
-		int i, count = 0;
+      p = rparam + WORDSIZE + WORDSIZE; /* skip result and converter */
+      GETWORD(p, count);
 
-		p = rparam + WORDSIZE + WORDSIZE; /* skip result and converter */
-		GETWORD(p, count, endp);
+      for (i=0,p=rdata;i<count;i++) {
+	    char groupname[RAP_GROUPNAME_LEN];
+	    GETSTRINGF(p, groupname, RAP_GROUPNAME_LEN);
+	    fn(groupname, cli);
+      }	
+    } else {
+      DEBUG(4,("NetGroupEnum res=%d\n", res));
+    }
+  } else {
+    DEBUG(4,("NetGroupEnum no data returned\n"));
+  }
+    
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
 
-		endp = rdata + rdrcnt;
-		for (i=0,p=rdata; i<count && p < endp;i++) {
-			char groupname[RAP_GROUPNAME_LEN];
-
-			p += rap_getstringf(p,
-					groupname,
-					RAP_GROUPNAME_LEN,
-					RAP_GROUPNAME_LEN,
-					endp);
-			if (groupname[0]) {
-				fn(groupname, cli);
-			}
-		}
-	} else {
-		DEBUG(4,("NetGroupEnum res=%d\n", res));
-	}
-
-  out:
-
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-
-	return res;
+  return res;
 }
 
 int cli_NetGroupDelUser(struct cli_state * cli, const char *group_name, const char *user_name)
 {
-	char *rparam = NULL;
-	char *rdata = NULL;
-	char *p;
-	unsigned int rdrcnt,rprcnt;
-	int res = -1;
-	char param[WORDSIZE                        /* api number    */
-		+sizeof(RAP_NetGroupDelUser_REQ) /* parm string   */
-		+1                               /* no ret string */
-		+RAP_GROUPNAME_LEN               /* group name    */
-		+RAP_USERNAME_LEN];              /* user to del   */
+  char *rparam = NULL;
+  char *rdata = NULL;
+  char *p;
+  unsigned int rdrcnt,rprcnt;
+  int res;
+  char param[WORDSIZE                        /* api number    */
+	    +sizeof(RAP_NetGroupDelUser_REQ) /* parm string   */
+	    +1                               /* no ret string */
+	    +RAP_GROUPNAME_LEN               /* group name    */
+	    +RAP_USERNAME_LEN];              /* user to del   */
 
-	/* now send a SMBtrans command with api GroupMemberAdd */
-	p = make_header(param, RAP_WGroupDelUser, RAP_NetGroupDelUser_REQ, NULL);
-	PUTSTRING(p,group_name,RAP_GROUPNAME_LEN);
-	PUTSTRING(p,user_name,RAP_USERNAME_LEN);
+  /* now send a SMBtrans command with api GroupMemberAdd */
+  p = make_header(param, RAP_WGroupDelUser, RAP_NetGroupDelUser_REQ, NULL);
+  PUTSTRING(p,group_name,RAP_GROUPNAME_LEN);
+  PUTSTRING(p,user_name,RAP_USERNAME_LEN);
 
-	if (cli_api(cli,
-			param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */
-			NULL, 0, 200,       /* data, length, maxlen */
-			&rparam, &rprcnt,   /* return params, length */
-			&rdata, &rdrcnt))   /* return data, length */
-	{
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam,endp);
-
-		switch(res) {
-		case 0:
-			break;
-		case 5:
-		case 65:
-			DEBUG(1, ("Access Denied\n"));
-			break;
-		case 50:
-			DEBUG(1, ("Not supported by server\n"));
-			break;
-		case 2220:
-			DEBUG(1, ("Group does not exist\n"));
-			break;
-		case 2221:
-			DEBUG(1, ("User does not exist\n"));
-			break;
-		case 2237:
-			DEBUG(1, ("User is not in group\n"));
-			break;
-		default:
-			DEBUG(4,("NetGroupDelUser res=%d\n", res));
-		}
-	} else {
-		res = -1;
-		DEBUG(4,("NetGroupDelUser failed\n"));
-	}
-
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-
-	return res;
+  if (cli_api(cli, 
+	      param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */
+	      NULL, 0, 200,       /* data, length, maxlen */
+	      &rparam, &rprcnt,   /* return params, length */
+	      &rdata, &rdrcnt))   /* return data, length */
+    {
+      res = GETRES(rparam);
+      
+      switch(res) {
+        case 0:
+	  break;
+        case 5:
+        case 65:
+	  DEBUG(1, ("Access Denied\n"));
+	  break;
+        case 50:
+	  DEBUG(1, ("Not supported by server\n"));
+	  break;
+        case 2220:
+	  DEBUG(1, ("Group does not exist\n"));
+	  break;
+        case 2221:
+	  DEBUG(1, ("User does not exist\n"));
+	  break;
+        case 2237:
+	  DEBUG(1, ("User is not in group\n"));
+	  break;
+        default:
+	  DEBUG(4,("NetGroupDelUser res=%d\n", res));
+      }
+    } else {
+      res = -1;
+      DEBUG(4,("NetGroupDelUser failed\n"));
+    }
+  
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
+	
+  return res; 
 }
 
 int cli_NetGroupAddUser(struct cli_state * cli, const char *group_name, const char *user_name)
 {
-	char *rparam = NULL;
-	char *rdata = NULL;
-	char *p;
-	unsigned int rdrcnt,rprcnt;
-	int res = -1;
-	char param[WORDSIZE                        /* api number    */
-		+sizeof(RAP_NetGroupAddUser_REQ) /* parm string   */
-		+1                               /* no ret string */
-		+RAP_GROUPNAME_LEN               /* group name    */
-		+RAP_USERNAME_LEN];              /* user to add   */
+  char *rparam = NULL;
+  char *rdata = NULL;
+  char *p;
+  unsigned int rdrcnt,rprcnt;
+  int res;
+  char param[WORDSIZE                        /* api number    */
+	    +sizeof(RAP_NetGroupAddUser_REQ) /* parm string   */
+	    +1                               /* no ret string */
+	    +RAP_GROUPNAME_LEN               /* group name    */
+	    +RAP_USERNAME_LEN];              /* user to add   */
 
-	/* now send a SMBtrans command with api GroupMemberAdd */
-	p = make_header(param, RAP_WGroupAddUser, RAP_NetGroupAddUser_REQ, NULL);
-	PUTSTRING(p,group_name,RAP_GROUPNAME_LEN);
-	PUTSTRING(p,user_name,RAP_USERNAME_LEN);
+  /* now send a SMBtrans command with api GroupMemberAdd */
+  p = make_header(param, RAP_WGroupAddUser, RAP_NetGroupAddUser_REQ, NULL);
+  PUTSTRING(p,group_name,RAP_GROUPNAME_LEN);
+  PUTSTRING(p,user_name,RAP_USERNAME_LEN);
 
-	if (cli_api(cli,
-			param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */
-			NULL, 0, 200,       /* data, length, maxlen */
-			&rparam, &rprcnt,   /* return params, length */
-			&rdata, &rdrcnt))   /* return data, length */
-	{
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam,endp);
-
-		switch(res) {
-		case 0:
-			break;
-		case 5:
-		case 65:
-			DEBUG(1, ("Access Denied\n"));
-			break;
-		case 50:
-			DEBUG(1, ("Not supported by server\n"));
-			break;
-		case 2220:
-			DEBUG(1, ("Group does not exist\n"));
-			break;
-		case 2221:
-			DEBUG(1, ("User does not exist\n"));
-			break;
-		default:
-			DEBUG(4,("NetGroupAddUser res=%d\n", res));
-		}
-	} else {
-		res = -1;
-		DEBUG(4,("NetGroupAddUser failed\n"));
-	}
-
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-
-	return res;
+  if (cli_api(cli, 
+	      param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */
+	      NULL, 0, 200,       /* data, length, maxlen */
+	      &rparam, &rprcnt,   /* return params, length */
+	      &rdata, &rdrcnt))   /* return data, length */
+    {
+      res = GETRES(rparam);
+      
+      switch(res) {
+        case 0:
+	  break;
+        case 5:
+        case 65:
+	  DEBUG(1, ("Access Denied\n"));
+	  break;
+        case 50:
+	  DEBUG(1, ("Not supported by server\n"));
+	  break;
+        case 2220:
+	  DEBUG(1, ("Group does not exist\n"));
+	  break;
+        case 2221:
+	  DEBUG(1, ("User does not exist\n"));
+	  break;
+        default:
+	  DEBUG(4,("NetGroupAddUser res=%d\n", res));
+      }
+    } else {
+      res = -1;
+      DEBUG(4,("NetGroupAddUser failed\n"));
+    }
+  
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
+	
+  return res;
 }
 
 
 int cli_NetGroupGetUsers(struct cli_state * cli, const char *group_name, void (*fn)(const char *, void *), void *state )
 {
-	char *rparam = NULL;
-	char *rdata = NULL;
-	char *p;
-	unsigned int rdrcnt,rprcnt;
-	int res = -1;
-	char param[WORDSIZE                        /* api number    */
-		+sizeof(RAP_NetGroupGetUsers_REQ)/* parm string   */
-		+sizeof(RAP_GROUP_USERS_INFO_0)  /* return string */
-		+RAP_GROUPNAME_LEN               /* group name    */
-		+WORDSIZE                        /* info level    */
-		+WORDSIZE];                      /* buffer size   */
+  char *rparam = NULL;
+  char *rdata = NULL;
+  char *p;
+  unsigned int rdrcnt,rprcnt;
+  int res = -1;
+  char param[WORDSIZE                        /* api number    */
+	    +sizeof(RAP_NetGroupGetUsers_REQ)/* parm string   */
+	    +sizeof(RAP_GROUP_USERS_INFO_0)  /* return string */
+	    +RAP_GROUPNAME_LEN               /* group name    */
+	    +WORDSIZE                        /* info level    */
+	    +WORDSIZE];                      /* buffer size   */
 
-	/* now send a SMBtrans command with api GroupGetUsers */
-	p = make_header(param, RAP_WGroupGetUsers,
-		RAP_NetGroupGetUsers_REQ, RAP_GROUP_USERS_INFO_0);
-	PUTSTRING(p,group_name,RAP_GROUPNAME_LEN-1);
-	PUTWORD(p,0); /* info level 0 */
-	PUTWORD(p,0xFFE0); /* return buffer size */
+  /* now send a SMBtrans command with api GroupGetUsers */
+  p = make_header(param, RAP_WGroupGetUsers,
+		  RAP_NetGroupGetUsers_REQ, RAP_GROUP_USERS_INFO_0);
+  PUTSTRING(p,group_name,RAP_GROUPNAME_LEN-1);
+  PUTWORD(p,0); /* info level 0 */
+  PUTWORD(p,0xFFE0); /* return buffer size */
 
-	if (cli_api(cli,
-			param, PTR_DIFF(p,param),PTR_DIFF(p,param),
-			NULL, 0, CLI_BUFFER_SIZE,
-			&rparam, &rprcnt,
-			&rdata, &rdrcnt)) {
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam,endp);
-		cli->rap_error = res;
-		if (res != 0) {
-			DEBUG(1,("NetGroupGetUsers gave error %d\n", res));
-		}
-	}
+  if (cli_api(cli,
+	      param, PTR_DIFF(p,param),PTR_DIFF(p,param),
+	      NULL, 0, CLI_BUFFER_SIZE,
+	      &rparam, &rprcnt,
+	      &rdata, &rdrcnt)) {
+    res = GETRES(rparam);
+    cli->rap_error = res;
+    if (res != 0) {
+      DEBUG(1,("NetGroupGetUsers gave error %d\n", res));
+    }
+  }
+  if (rdata) {
+    if (res == 0 || res == ERRmoredata) {
+      int i, count;
+      fstring username;
+      p = rparam + WORDSIZE + WORDSIZE;
+      GETWORD(p, count);
 
-	if (!rdata) {
-		DEBUG(4,("NetGroupGetUsers no data returned\n"));
-		goto out;
-	}
-
-	if (res == 0 || res == ERRmoredata) {
-		char *endp = rparam + rprcnt;
-		int i, count = 0;
-		char username[RAP_USERNAME_LEN];
-
-		p = rparam + WORDSIZE + WORDSIZE;
-		GETWORD(p, count, endp);
-
-		endp = rdata + rdrcnt;
-		for (i=0,p=rdata; i<count && p < endp; i++) {
-			p += rap_getstringf(p,
-					username,
-					RAP_USERNAME_LEN,
-					RAP_USERNAME_LEN,
-					endp);
-			if (username[0]) {
-				fn(username, state);
-			}
-		}
-	} else {
-		DEBUG(4,("NetGroupGetUsers res=%d\n", res));
-	}
-
-  out:
-
-	SAFE_FREE(rdata);
-	SAFE_FREE(rparam);
-	return res;
+      for (i=0,p=rdata; i<count; i++) {
+	GETSTRINGF(p, username, RAP_USERNAME_LEN);
+	fn(username, state);
+      }
+    } else {
+      DEBUG(4,("NetGroupGetUsers res=%d\n", res));
+    }
+  } else {
+    DEBUG(4,("NetGroupGetUsers no data returned\n"));
+  }
+  SAFE_FREE(rdata);
+  SAFE_FREE(rparam);
+  return res;
 }
 
 int cli_NetUserGetGroups(struct cli_state * cli, const char *user_name, void (*fn)(const char *, void *), void *state )
 {
-	char *rparam = NULL;
-	char *rdata = NULL;
-	char *p;
-	unsigned int rdrcnt,rprcnt;
-	int res = -1;
-	char param[WORDSIZE                        /* api number    */
-		+sizeof(RAP_NetUserGetGroups_REQ)/* parm string   */
-		+sizeof(RAP_GROUP_USERS_INFO_0)  /* return string */
-		+RAP_USERNAME_LEN               /* user name    */
-		+WORDSIZE                        /* info level    */
-		+WORDSIZE];                      /* buffer size   */
+  char *rparam = NULL;
+  char *rdata = NULL;
+  char *p;
+  unsigned int rdrcnt,rprcnt;
+  int res = -1;
+  char param[WORDSIZE                        /* api number    */
+	    +sizeof(RAP_NetUserGetGroups_REQ)/* parm string   */
+	    +sizeof(RAP_GROUP_USERS_INFO_0)  /* return string */
+	    +RAP_USERNAME_LEN               /* user name    */
+	    +WORDSIZE                        /* info level    */
+	    +WORDSIZE];                      /* buffer size   */
 
-	/* now send a SMBtrans command with api GroupGetUsers */
-	p = make_header(param, RAP_WUserGetGroups,
-		RAP_NetUserGetGroups_REQ, RAP_GROUP_USERS_INFO_0);
-	PUTSTRING(p,user_name,RAP_USERNAME_LEN-1);
-	PUTWORD(p,0); /* info level 0 */
-	PUTWORD(p,0xFFE0); /* return buffer size */
+  /* now send a SMBtrans command with api GroupGetUsers */
+  p = make_header(param, RAP_WUserGetGroups,
+		  RAP_NetUserGetGroups_REQ, RAP_GROUP_USERS_INFO_0);
+  PUTSTRING(p,user_name,RAP_USERNAME_LEN-1);
+  PUTWORD(p,0); /* info level 0 */
+  PUTWORD(p,0xFFE0); /* return buffer size */
 
-	if (cli_api(cli,
-			param, PTR_DIFF(p,param),PTR_DIFF(p,param),
-			NULL, 0, CLI_BUFFER_SIZE,
-			&rparam, &rprcnt,
-			&rdata, &rdrcnt)) {
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam,endp);
-		cli->rap_error = res;
-		if (res != 0) {
-			DEBUG(1,("NetUserGetGroups gave error %d\n", res));
-		}
-	}
+  if (cli_api(cli,
+	      param, PTR_DIFF(p,param),PTR_DIFF(p,param),
+	      NULL, 0, CLI_BUFFER_SIZE,
+	      &rparam, &rprcnt,
+	      &rdata, &rdrcnt)) {
+    res = GETRES(rparam);
+    cli->rap_error = res;
+    if (res != 0) {
+      DEBUG(1,("NetUserGetGroups gave error %d\n", res));
+    }
+  }
+  if (rdata) {
+    if (res == 0 || res == ERRmoredata) {
+      int i, count;
+      fstring groupname;
+      p = rparam + WORDSIZE + WORDSIZE;
+      GETWORD(p, count);
 
-	if (!rdata) {
-		DEBUG(4,("NetUserGetGroups no data returned\n"));
-		goto out;
-	}
-
-	if (res == 0 || res == ERRmoredata) {
-		char *endp = rparam + rprcnt;
-		int i, count = 0;
-		char groupname[RAP_GROUPNAME_LEN];
-
-		p = rparam + WORDSIZE + WORDSIZE;
-		GETWORD(p, count, endp);
-
-		endp = rdata + rdrcnt;
-		for (i=0,p=rdata; i<count && p < endp; i++) {
-			p += rap_getstringf(p,
-					groupname,
-					RAP_GROUPNAME_LEN,
-					RAP_GROUPNAME_LEN,
-					endp);
-			if (groupname[0]) {
-				fn(groupname, state);
-			}
-		}
-	} else {
-		DEBUG(4,("NetUserGetGroups res=%d\n", res));
-	}
-
-  out:
-
-	SAFE_FREE(rdata);
-	SAFE_FREE(rparam);
-	return res;
+      for (i=0,p=rdata; i<count; i++) {
+    	GETSTRINGF(p, groupname, RAP_USERNAME_LEN);
+	    fn(groupname, state);
+      }
+    } else {
+      DEBUG(4,("NetUserGetGroups res=%d\n", res));
+    }
+  } else {
+    DEBUG(4,("NetUserGetGroups no data returned\n"));
+  }
+  SAFE_FREE(rdata);
+  SAFE_FREE(rparam);
+  return res;
 }
 
+
 /****************************************************************************
- Call a NetUserDelete - delete user from remote server.
+ call a NetUserDelete - delete user from remote server
 ****************************************************************************/
-
 int cli_NetUserDelete(struct cli_state *cli, const char * user_name )
 {
-	char *rparam = NULL;
-	char *rdata = NULL;
-	char *p;
-	unsigned int rdrcnt,rprcnt;
-	int res = -1;
-	char param[WORDSIZE                    /* api number    */
-		+sizeof(RAP_NetGroupDel_REQ) /* parm string   */
-		+1                           /* no ret string */
-		+RAP_USERNAME_LEN            /* user to del   */
-		+WORDSIZE];                  /* reserved word */
+  char *rparam = NULL;
+  char *rdata = NULL;
+  char *p;
+  unsigned int rdrcnt,rprcnt;
+  int res;
+  char param[WORDSIZE                    /* api number    */
+	    +sizeof(RAP_NetGroupDel_REQ) /* parm string   */
+	    +1                           /* no ret string */
+	    +RAP_USERNAME_LEN            /* user to del   */
+	    +WORDSIZE];                  /* reserved word */
 
-	/* now send a SMBtrans command with api UserDel */
-	p = make_header(param, RAP_WUserDel, RAP_NetGroupDel_REQ, NULL);
-	PUTSTRING(p, user_name, RAP_USERNAME_LEN);
-	PUTWORD(p,0);  /* reserved word MBZ on input */
-
-	if (cli_api(cli,
-			param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */
-			NULL, 0, 200,       /* data, length, maxlen */
-			&rparam, &rprcnt,   /* return params, length */
-			&rdata, &rdrcnt))   /* return data, length */
-	{
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam,endp);
-
-		if (res == 0) {
-			/* nothing to do */
-		} else if ((res == 5) || (res == 65)) {
-			DEBUG(1, ("Access Denied\n"));
-		} else if (res == 2221) {
-			DEBUG (1, ("User does not exist\n"));
-		} else {
-			DEBUG(4,("NetUserDelete res=%d\n", res));
-		}
-	} else {
-		res = -1;
-		DEBUG(4,("NetUserDelete failed\n"));
-	}
-
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-
-	return res;
+  /* now send a SMBtrans command with api UserDel */
+  p = make_header(param, RAP_WUserDel, RAP_NetGroupDel_REQ, NULL);  
+  PUTSTRING(p, user_name, RAP_USERNAME_LEN);
+  PUTWORD(p,0);  /* reserved word MBZ on input */
+        	 
+  if (cli_api(cli, 
+	      param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */
+	      NULL, 0, 200,       /* data, length, maxlen */
+	      &rparam, &rprcnt,   /* return params, length */
+	      &rdata, &rdrcnt))   /* return data, length */
+    {
+      res = GETRES(rparam);
+      
+      if (res == 0) {
+	/* nothing to do */		
+      }
+      else if ((res == 5) || (res == 65)) {
+         DEBUG(1, ("Access Denied\n"));
+      }
+      else if (res == 2221) {
+         DEBUG (1, ("User does not exist\n"));
+      }
+      else {
+          DEBUG(4,("NetUserDelete res=%d\n", res));
+      }      
+    } else {
+      res = -1;
+      DEBUG(4,("NetUserDelete failed\n"));
+    }
+  
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
+	
+  return res;
 }
 
 /****************************************************************************
- Call a NetUserAdd - add user to remote server.
+ call a NetUserAdd - add user to remote server
 ****************************************************************************/
-
 int cli_NetUserAdd(struct cli_state *cli, RAP_USER_INFO_1 * userinfo )
 {
-	char *rparam = NULL;
-	char *rdata = NULL;
-	char *p;
-	unsigned int rdrcnt,rprcnt;
-	int res = -1;
-	char param[WORDSIZE                    /* api number    */
-		+sizeof(RAP_NetUserAdd2_REQ) /* req string    */
-		+sizeof(RAP_USER_INFO_L1)    /* data string   */
-		+WORDSIZE                    /* info level    */
-		+WORDSIZE                    /* buffer length */
-		+WORDSIZE];                  /* reserved      */
+   
 
-	char data[1024];
-		/* offset into data of free format strings.  Will be updated */
-		/* by PUTSTRINGP macro and end up with total data length.    */
-	int soffset=RAP_USERNAME_LEN+1 /* user name + pad */
-		+ RAP_UPASSWD_LEN            /* password        */
-		+ DWORDSIZE                  /* password age    */
-		+ WORDSIZE                   /* privilege       */
-		+ DWORDSIZE                  /* home dir ptr    */
-		+ DWORDSIZE                  /* comment ptr     */
-		+ WORDSIZE                   /* flags           */
-		+ DWORDSIZE;                 /* login script ptr*/
 
-	/* now send a SMBtrans command with api NetUserAdd */
-	p = make_header(param, RAP_WUserAdd2,
-		RAP_NetUserAdd2_REQ, RAP_USER_INFO_L1);
+  char *rparam = NULL;
+  char *rdata = NULL;
+  char *p;                                          
+  unsigned int rdrcnt,rprcnt;
+  int res;
+  char param[WORDSIZE                    /* api number    */
+	    +sizeof(RAP_NetUserAdd2_REQ) /* req string    */
+	    +sizeof(RAP_USER_INFO_L1)    /* data string   */
+	    +WORDSIZE                    /* info level    */
+	    +WORDSIZE                    /* buffer length */
+	    +WORDSIZE];                  /* reserved      */
+ 
+  char data[1024];
+  /* offset into data of free format strings.  Will be updated */
+  /* by PUTSTRINGP macro and end up with total data length.    */
+  int soffset=RAP_USERNAME_LEN+1 /* user name + pad */
+    + RAP_UPASSWD_LEN            /* password        */
+    + DWORDSIZE                  /* password age    */
+    + WORDSIZE                   /* privilege       */
+    + DWORDSIZE                  /* home dir ptr    */
+    + DWORDSIZE                  /* comment ptr     */
+    + WORDSIZE                   /* flags           */
+    + DWORDSIZE;                 /* login script ptr*/
 
-	PUTWORD(p, 1); /* info level */
-	PUTWORD(p, 0); /* pwencrypt */
-	if(userinfo->passwrd)
-		PUTWORD(p,MIN(strlen(userinfo->passwrd), RAP_UPASSWD_LEN));
-	else
-		PUTWORD(p, 0); /* password length */
+  /* now send a SMBtrans command with api NetUserAdd */
+  p = make_header(param, RAP_WUserAdd2,
+		  RAP_NetUserAdd2_REQ, RAP_USER_INFO_L1);
+  PUTWORD(p, 1); /* info level */
 
-	p = data;
-	memset(data, '\0', soffset);
+  PUTWORD(p, 0); /* pwencrypt */
+  if(userinfo->passwrd)
+    PUTWORD(p,MIN(strlen(userinfo->passwrd), RAP_UPASSWD_LEN));
+  else
+    PUTWORD(p, 0); /* password length */
 
-	PUTSTRINGF(p, userinfo->user_name, RAP_USERNAME_LEN);
-	PUTBYTE(p, 0); /* pad byte 0 */
-	PUTSTRINGF(p, userinfo->passwrd, RAP_UPASSWD_LEN);
-	PUTDWORD(p, 0); /* pw age - n.a. on user add */
-	PUTWORD(p, userinfo->priv);
-	PUTSTRINGP(p, userinfo->home_dir, data, soffset);
-	PUTSTRINGP(p, userinfo->comment, data, soffset);
-	PUTWORD(p, userinfo->userflags);
-	PUTSTRINGP(p, userinfo->logon_script, data, soffset);
+  p = data;
+  memset(data, '\0', soffset);
 
-	if (cli_api(cli,
-		      param, sizeof(param), 1024, /* Param, length, maxlen */
-		      data, soffset, sizeof(data), /* data, length, maxlen */
-		      &rparam, &rprcnt,   /* return params, length */
-		      &rdata, &rdrcnt))   /* return data, length */
-	{
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam, endp);
+  PUTSTRINGF(p, userinfo->user_name, RAP_USERNAME_LEN);
+  PUTBYTE(p, 0); /* pad byte 0 */
+  PUTSTRINGF(p, userinfo->passwrd, RAP_UPASSWD_LEN);
+  PUTDWORD(p, 0); /* pw age - n.a. on user add */
+  PUTWORD(p, userinfo->priv);
+  PUTSTRINGP(p, userinfo->home_dir, data, soffset);
+  PUTSTRINGP(p, userinfo->comment, data, soffset);
+  PUTWORD(p, userinfo->userflags);
+  PUTSTRINGP(p, userinfo->logon_script, data, soffset);
 
-		if (res == 0) {
-			/* nothing to do */
-		} else if ((res == 5) || (res == 65)) {
-			DEBUG(1, ("Access Denied\n"));
-		} else if (res == 2224) {
-			DEBUG (1, ("User already exists\n"));
-		} else {
-			DEBUG(4,("NetUserAdd res=%d\n", res));
-		}
-	} else {
-		res = -1;
-		DEBUG(4,("NetUserAdd failed\n"));
-	}
+  if (cli_api(cli, 
+	      param, sizeof(param), 1024, /* Param, length, maxlen */
+	      data, soffset, sizeof(data), /* data, length, maxlen */
+	      &rparam, &rprcnt,   /* return params, length */
+	      &rdata, &rdrcnt))   /* return data, length */
+    {
+      res = GETRES(rparam);
+      
+      if (res == 0) {
+	/* nothing to do */		
+      }       
+      else if ((res == 5) || (res == 65)) {
+        DEBUG(1, ("Access Denied\n"));
+      }
+      else if (res == 2224) {
+        DEBUG (1, ("User already exists\n"));
+      }
+      else {
+	    DEBUG(4,("NetUserAdd res=%d\n", res));
+      }
+    } else {
+      res = -1;
+      DEBUG(4,("NetUserAdd failed\n"));
+    }
+  
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
 
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-
-	return res;
+  return res;
 }
 
 /****************************************************************************
 call a NetUserEnum - try and list users on a different host
 ****************************************************************************/
-
 int cli_RNetUserEnum(struct cli_state *cli, void (*fn)(const char *, const char *, const char *, const char *, void *), void *state)
 {
-	char param[WORDSIZE                 /* api number    */
-		+sizeof(RAP_NetUserEnum_REQ) /* parm string   */
-		+sizeof(RAP_USER_INFO_L1)    /* return string */
-		+WORDSIZE                 /* info level    */
-		+WORDSIZE];               /* buffer size   */
-	char *p;
-	char *rparam = NULL;
-	char *rdata = NULL;
-	unsigned int rprcnt, rdrcnt;
-	int res = -1;
+  char param[WORDSIZE                 /* api number    */
+	    +sizeof(RAP_NetUserEnum_REQ) /* parm string   */
+	    +sizeof(RAP_USER_INFO_L1)    /* return string */
+	    +WORDSIZE                 /* info level    */
+	    +WORDSIZE];               /* buffer size   */
+  char *p;
+  char *rparam = NULL;
+  char *rdata = NULL; 
+  unsigned int rprcnt, rdrcnt;
+  int res = -1;
+  
 
-	memset(param, '\0', sizeof(param));
-	p = make_header(param, RAP_WUserEnum,
-		RAP_NetUserEnum_REQ, RAP_USER_INFO_L1);
-	PUTWORD(p,1); /* Info level 1 */
-	PUTWORD(p,0xFF00); /* Return buffer size */
+  memset(param, '\0', sizeof(param));
+  p = make_header(param, RAP_WUserEnum,
+		  RAP_NetUserEnum_REQ, RAP_USER_INFO_L1);
+  PUTWORD(p,1); /* Info level 1 */
+  PUTWORD(p,0xFF00); /* Return buffer size */
 
-	/* BB Fix handling of large numbers of users to be returned */
-	if (cli_api(cli,
-			param, PTR_DIFF(p,param),8,
-			NULL, 0, CLI_BUFFER_SIZE,
-			&rparam, &rprcnt,
-			&rdata, &rdrcnt)) {
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam,endp);
-		cli->rap_error = res;
-		if (cli->rap_error != 0) {
-			DEBUG(1,("NetUserEnum gave error %d\n", cli->rap_error));
-		}
-	}
+/* BB Fix handling of large numbers of users to be returned */
+  if (cli_api(cli,
+	      param, PTR_DIFF(p,param),8,
+	      NULL, 0, CLI_BUFFER_SIZE,
+	      &rparam, &rprcnt,
+	      &rdata, &rdrcnt)) {
+    res = GETRES(rparam);
+    cli->rap_error = res;
+    if (cli->rap_error != 0) {
+      DEBUG(1,("NetUserEnum gave error %d\n", cli->rap_error));
+    }
+  }
+  if (rdata) {
+    if (res == 0 || res == ERRmoredata) {
+      int i, converter, count;
+      char username[RAP_USERNAME_LEN];
+      char userpw[RAP_UPASSWD_LEN];
+      pstring comment, homedir, logonscript;
 
-	if (!rdata) {
-		DEBUG(4,("NetUserEnum no data returned\n"));
-		goto out;
-	}
+      p = rparam + WORDSIZE; /* skip result */
+      GETWORD(p, converter);
+      GETWORD(p, count);
 
-	if (res == 0 || res == ERRmoredata) {
-		int i, converter = 0, count = 0;
-		char username[RAP_USERNAME_LEN];
-		char userpw[RAP_UPASSWD_LEN];
-		char *endp = rparam + rprcnt;
-		char *comment, *homedir, *logonscript;
-		TALLOC_CTX *frame = talloc_stackframe();
+      for (i=0,p=rdata;i<count;i++) {
+        GETSTRINGF(p, username, RAP_USERNAME_LEN);
+        p++; /* pad byte */
+        GETSTRINGF(p, userpw, RAP_UPASSWD_LEN);
+        p += DWORDSIZE; /* skip password age */
+        p += WORDSIZE;  /* skip priv: 0=guest, 1=user, 2=admin */
+        GETSTRINGP(p, homedir, rdata, converter);
+        GETSTRINGP(p, comment, rdata, converter);
+        p += WORDSIZE;  /* skip flags */
+        GETSTRINGP(p, logonscript, rdata, converter);
 
-		p = rparam + WORDSIZE; /* skip result */
-		GETWORD(p, converter, endp);
-		GETWORD(p, count, endp);
+        fn(username, comment, homedir, logonscript, cli);
+      }
+    } else {
+      DEBUG(4,("NetUserEnum res=%d\n", res));
+    }
+  } else {
+    DEBUG(4,("NetUserEnum no data returned\n"));
+  }
+    
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
 
-		endp = rdata + rdrcnt;
-		for (i=0,p=rdata;i<count && p < endp;i++) {
-			p += rap_getstringf(p,
-					username,
-					RAP_USERNAME_LEN,
-					RAP_USERNAME_LEN,
-					endp);
-			p++; /* pad byte */
-			p += rap_getstringf(p,
-					userpw,
-					RAP_UPASSWD_LEN,
-					RAP_UPASSWD_LEN,
-					endp);
-			p += DWORDSIZE; /* skip password age */
-			p += WORDSIZE;  /* skip priv: 0=guest, 1=user, 2=admin */
-			p += rap_getstringp(frame,
-					p,
-					&homedir,
-					rdata,
-					converter,
-					endp);
-			p += rap_getstringp(frame,
-					p,
-					&comment,
-					rdata,
-					converter,
-					endp);
-			p += WORDSIZE;  /* skip flags */
-			p += rap_getstringp(frame,
-					p,
-					&logonscript,
-					rdata,
-					converter,
-					endp);
-			if (username[0] && comment &&
-					homedir && logonscript) {
-				fn(username,
-					comment,
-					homedir,
-					logonscript,
-					cli);
-			}
-		}
-		TALLOC_FREE(frame);
-	} else {
-		DEBUG(4,("NetUserEnum res=%d\n", res));
-	}
-
-  out:
-
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-
-	return res;
+  return res;
 }
 
 int cli_RNetUserEnum0(struct cli_state *cli,
 		      void (*fn)(const char *, void *),
 		      void *state)
 {
-	char param[WORDSIZE                 /* api number    */
-		+sizeof(RAP_NetUserEnum_REQ) /* parm string   */
-		+sizeof(RAP_USER_INFO_L0)    /* return string */
-		+WORDSIZE                 /* info level    */
-		+WORDSIZE];               /* buffer size   */
-	char *p;
-	char *rparam = NULL;
-	char *rdata = NULL;
-	unsigned int rprcnt, rdrcnt;
-	int res = -1;
+  char param[WORDSIZE                 /* api number    */
+	    +sizeof(RAP_NetUserEnum_REQ) /* parm string   */
+	    +sizeof(RAP_USER_INFO_L0)    /* return string */
+	    +WORDSIZE                 /* info level    */
+	    +WORDSIZE];               /* buffer size   */
+  char *p;
+  char *rparam = NULL;
+  char *rdata = NULL; 
+  unsigned int rprcnt, rdrcnt;
+  int res = -1;
+  
 
-	memset(param, '\0', sizeof(param));
-	p = make_header(param, RAP_WUserEnum,
-		RAP_NetUserEnum_REQ, RAP_USER_INFO_L0);
-	PUTWORD(p,0); /* Info level 1 */
-	PUTWORD(p,0xFF00); /* Return buffer size */
+  memset(param, '\0', sizeof(param));
+  p = make_header(param, RAP_WUserEnum,
+		  RAP_NetUserEnum_REQ, RAP_USER_INFO_L0);
+  PUTWORD(p,0); /* Info level 1 */
+  PUTWORD(p,0xFF00); /* Return buffer size */
 
-	/* BB Fix handling of large numbers of users to be returned */
-	if (cli_api(cli,
-			param, PTR_DIFF(p,param),8,
-			NULL, 0, CLI_BUFFER_SIZE,
-			&rparam, &rprcnt,
-			&rdata, &rdrcnt)) {
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam,endp);
-		cli->rap_error = res;
-		if (cli->rap_error != 0) {
-			DEBUG(1,("NetUserEnum gave error %d\n", cli->rap_error));
-		}
-	}
+/* BB Fix handling of large numbers of users to be returned */
+  if (cli_api(cli,
+	      param, PTR_DIFF(p,param),8,
+	      NULL, 0, CLI_BUFFER_SIZE,
+	      &rparam, &rprcnt,
+	      &rdata, &rdrcnt)) {
+    res = GETRES(rparam);
+    cli->rap_error = res;
+    if (cli->rap_error != 0) {
+      DEBUG(1,("NetUserEnum gave error %d\n", cli->rap_error));
+    }
+  }
+  if (rdata) {
+    if (res == 0 || res == ERRmoredata) {
+      int i, count;
+      char username[RAP_USERNAME_LEN];
 
-	if (!rdata) {
-		DEBUG(4,("NetUserEnum no data returned\n"));
-		goto out;
-	}
+      p = rparam + WORDSIZE + WORDSIZE; /* skip result and converter */
+      GETWORD(p, count);
 
-	if (res == 0 || res == ERRmoredata) {
-		int i, count = 0;
-		char *endp = rparam + rprcnt;
-		char username[RAP_USERNAME_LEN];
+      for (i=0,p=rdata;i<count;i++) {
+        GETSTRINGF(p, username, RAP_USERNAME_LEN);
+        fn(username, cli);
+      }
+    } else {
+      DEBUG(4,("NetUserEnum res=%d\n", res));
+    }
+  } else {
+    DEBUG(4,("NetUserEnum no data returned\n"));
+  }
+    
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
 
-		p = rparam + WORDSIZE + WORDSIZE; /* skip result and converter */
-		GETWORD(p, count, endp);
-
-		endp = rdata + rdrcnt;
-		for (i=0,p=rdata;i<count && p < endp;i++) {
-			p += rap_getstringf(p,
-					username,
-					RAP_USERNAME_LEN,
-					RAP_USERNAME_LEN,
-					endp);
-			if (username[0]) {
-				fn(username, cli);
-			}
-		}
-	} else {
-		DEBUG(4,("NetUserEnum res=%d\n", res));
-	}
-
-  out:
-
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-
-	return res;
+  return res;
 }
 
 /****************************************************************************
- Call a NetFileClose2 - close open file on another session to server.
+ call a NetFileClose2 - close open file on another session to server
 ****************************************************************************/
-
 int cli_NetFileClose(struct cli_state *cli, uint32 file_id )
 {
-	char *rparam = NULL;
-	char *rdata = NULL;
-	char *p;
-	unsigned int rdrcnt,rprcnt;
-	char param[WORDSIZE                    /* api number    */
-		+sizeof(RAP_WFileClose2_REQ) /* req string    */
-		+1                           /* no ret string */
-		+DWORDSIZE];                 /* file ID          */
-	int res = -1;
+  char *rparam = NULL;
+  char *rdata = NULL;
+  char *p;
+  unsigned int rdrcnt,rprcnt;
+  char param[WORDSIZE                    /* api number    */
+	    +sizeof(RAP_WFileClose2_REQ) /* req string    */
+	    +1                           /* no ret string */
+	    +DWORDSIZE];                 /* file ID          */
+  int res = -1;
 
-	/* now send a SMBtrans command with api RNetShareEnum */
-	p = make_header(param, RAP_WFileClose2, RAP_WFileClose2_REQ, NULL);
-	PUTDWORD(p, file_id);
-
-	if (cli_api(cli,
-			param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */
-			NULL, 0, 200,       /* data, length, maxlen */
-			&rparam, &rprcnt,   /* return params, length */
-			&rdata, &rdrcnt))   /* return data, length */
-	{
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam, endp);
-
-		if (res == 0) {
-			/* nothing to do */
-		} else if (res == 2314){
-			DEBUG(1, ("NetFileClose2 - attempt to close non-existant file open instance\n"));
-		} else {
-			DEBUG(4,("NetFileClose2 res=%d\n", res));
-		}
-	} else {
-		res = -1;
-		DEBUG(4,("NetFileClose2 failed\n"));
-	}
-
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-
-	return res;
+  /* now send a SMBtrans command with api RNetShareEnum */
+  p = make_header(param, RAP_WFileClose2, RAP_WFileClose2_REQ, NULL);
+  PUTDWORD(p, file_id);  
+        	 
+  if (cli_api(cli, 
+	      param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */
+	      NULL, 0, 200,       /* data, length, maxlen */
+	      &rparam, &rprcnt,   /* return params, length */
+	      &rdata, &rdrcnt))   /* return data, length */
+    {
+      res = GETRES(rparam);
+      
+      if (res == 0) {
+	/* nothing to do */		
+      } else if (res == 2314){
+         DEBUG(1, ("NetFileClose2 - attempt to close non-existant file open instance\n"));
+      } else {
+	DEBUG(4,("NetFileClose2 res=%d\n", res));
+      }      
+    } else {
+      res = -1;
+      DEBUG(4,("NetFileClose2 failed\n"));
+    }
+  
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
+  
+  return res;
 }
 
 /****************************************************************************
- Call a NetFileGetInfo - get information about server file opened from other
- workstation.
+call a NetFileGetInfo - get information about server file opened from other
+     workstation
 ****************************************************************************/
-
 int cli_NetFileGetInfo(struct cli_state *cli, uint32 file_id, void (*fn)(const char *, const char *, uint16, uint16, uint32))
 {
-	char *rparam = NULL;
-	char *rdata = NULL;
-	char *p;
-	unsigned int rdrcnt,rprcnt;
-	int res = -1;
-	char param[WORDSIZE                      /* api number      */
-		+sizeof(RAP_WFileGetInfo2_REQ) /* req string      */
-		+sizeof(RAP_FILE_INFO_L3)      /* return string   */
-		+DWORDSIZE                     /* file ID          */
-		+WORDSIZE                      /* info level      */
-		+WORDSIZE];                    /* buffer size     */
+  char *rparam = NULL;
+  char *rdata = NULL;
+  char *p;
+  unsigned int rdrcnt,rprcnt;
+  int res;
+  char param[WORDSIZE                      /* api number      */
+	    +sizeof(RAP_WFileGetInfo2_REQ) /* req string      */
+	    +sizeof(RAP_FILE_INFO_L3)      /* return string   */
+	    +DWORDSIZE                     /* file ID          */
+	    +WORDSIZE                      /* info level      */
+	    +WORDSIZE];                    /* buffer size     */
 
-	/* now send a SMBtrans command with api RNetShareEnum */
-	p = make_header(param, RAP_WFileGetInfo2,
-		RAP_WFileGetInfo2_REQ, RAP_FILE_INFO_L3);
-	PUTDWORD(p, file_id);
-	PUTWORD(p, 3);  /* info level */
-	PUTWORD(p, 0x1000);   /* buffer size */
-	if (cli_api(cli,
-			param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */
-			NULL, 0, 0x1000,  /* data, length, maxlen */
-			&rparam, &rprcnt,               /* return params, length */
-			&rdata, &rdrcnt))               /* return data, length */
-	{
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam,endp);
-		if (res == 0 || res == ERRmoredata) {
-			TALLOC_CTX *frame = talloc_stackframe();
-			int converter = 0,id = 0, perms = 0, locks = 0;
-			char *fpath, *fuser;
+  /* now send a SMBtrans command with api RNetShareEnum */
+  p = make_header(param, RAP_WFileGetInfo2,
+		  RAP_WFileGetInfo2_REQ, RAP_FILE_INFO_L3); 
+  PUTDWORD(p, file_id);
+  PUTWORD(p, 3);  /* info level */
+  PUTWORD(p, 0x1000);   /* buffer size */ 
+  if (cli_api(cli, 
+	      param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */
+	      NULL, 0, 0x1000,  /* data, length, maxlen */
+	      &rparam, &rprcnt,               /* return params, length */
+	      &rdata, &rdrcnt))               /* return data, length */
+    {
+      res = GETRES(rparam);
+      if (res == 0 || res == ERRmoredata) {
+	int converter,id, perms, locks;
+	pstring fpath, fuser;
+	  
+	p = rparam + WORDSIZE; /* skip result */
+	GETWORD(p, converter);
 
-			p = rparam + WORDSIZE; /* skip result */
-			GETWORD(p, converter, endp);
-
-			p = rdata;
-			endp = rdata + rdrcnt;
-
-			GETDWORD(p, id, endp);
-			GETWORD(p, perms, endp);
-			GETWORD(p, locks, endp);
-
-			p += rap_getstringp(frame,
-					p,
-					&fpath,
-					rdata,
-					converter,
-					endp);
-			p += rap_getstringp(frame,
-					p,
-					&fuser,
-					rdata,
-					converter,
-					endp);
-
-			if (fpath && fuser) {
-				fn(fpath, fuser, perms, locks, id);
-			}
-
-			TALLOC_FREE(frame);
-		} else {
-			DEBUG(4,("NetFileGetInfo2 res=%d\n", res));
-		}
-	} else {
-		res = -1;
-		DEBUG(4,("NetFileGetInfo2 failed\n"));
-	}
-
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-
-	return res;
+	p = rdata;
+	GETDWORD(p, id);
+	GETWORD(p, perms);
+	GETWORD(p, locks);
+	GETSTRINGP(p, fpath, rdata, converter);
+	GETSTRINGP(p, fuser, rdata, converter);
+	
+	fn(fpath, fuser, perms, locks, id);
+      } else {
+	DEBUG(4,("NetFileGetInfo2 res=%d\n", res));
+      }      
+    } else {
+      res = -1;
+      DEBUG(4,("NetFileGetInfo2 failed\n"));
+    }
+  
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
+  
+  return res;
 }
 
 /****************************************************************************
 * Call a NetFileEnum2 - list open files on an SMB server
-*
-* PURPOSE:  Remotes a NetFileEnum API call to the current server or target
+* 
+* PURPOSE:  Remotes a NetFileEnum API call to the current server or target 
 *           server listing the files open via the network (and their
 *           corresponding open instance ids)
-*
+*          
 * Dependencies: none
 *
-* Parameters:
+* Parameters: 
 *             cli    - pointer to cli_state structure
 *             user   - if present, return only files opened by this remote user
-*             base_path - if present, return only files opened below this
+*             base_path - if present, return only files opened below this 
 *                         base path
 *             fn     - display function to invoke for each entry in the result
+*                        
 *
-*
 * Returns:
 *             True      - success
 *             False     - failure
 *
 ****************************************************************************/
-
-int cli_NetFileEnum(struct cli_state *cli, const char * user,
-		    const char * base_path,
-		    void (*fn)(const char *, const char *, uint16, uint16,
-			       uint32))
+int cli_NetFileEnum(struct cli_state *cli, char * user, char * base_path, void (*fn)(const char *, const char *, uint16, uint16, uint32))
 {
-	char *rparam = NULL;
-	char *rdata = NULL;
-	char *p;
-	unsigned int rdrcnt,rprcnt;
-	char param[WORDSIZE                   /* api number      */
-		+sizeof(RAP_WFileEnum2_REQ) /* req string      */
-		+sizeof(RAP_FILE_INFO_L3)   /* return string   */
-		+1024                        /* base path (opt) */
-		+RAP_USERNAME_LEN           /* user name (opt) */
-		+WORDSIZE                   /* info level      */
-		+WORDSIZE                   /* buffer size     */
-		+DWORDSIZE                  /* resume key ?    */
-		+DWORDSIZE];                /* resume key ?    */
-	int count = -1;
-	int res = -1;
+  char *rparam = NULL;
+  char *rdata = NULL;
+  char *p;
+  unsigned int rdrcnt,rprcnt;
+  char param[WORDSIZE                   /* api number      */
+	    +sizeof(RAP_WFileEnum2_REQ) /* req string      */
+	    +sizeof(RAP_FILE_INFO_L3)   /* return string   */
+	    +256                        /* base path (opt) */
+	    +RAP_USERNAME_LEN           /* user name (opt) */
+	    +WORDSIZE                   /* info level      */
+	    +WORDSIZE                   /* buffer size     */
+	    +DWORDSIZE                  /* resume key ?    */
+	    +DWORDSIZE];                /* resume key ?    */
+  int count = -1;
 
-	/* now send a SMBtrans command with api RNetShareEnum */
-	p = make_header(param, RAP_WFileEnum2,
-		RAP_WFileEnum2_REQ, RAP_FILE_INFO_L3);
+  /* now send a SMBtrans command with api RNetShareEnum */
+  p = make_header(param, RAP_WFileEnum2,
+		  RAP_WFileEnum2_REQ, RAP_FILE_INFO_L3); 
 
-	PUTSTRING(p, base_path, 1024);
-	PUTSTRING(p, user, RAP_USERNAME_LEN);
-	PUTWORD(p, 3); /* info level */
-	PUTWORD(p, 0xFF00);  /* buffer size */
-	PUTDWORD(p, 0);  /* zero out the resume key */
-	PUTDWORD(p, 0);  /* or is this one the resume key? */
+  PUTSTRING(p, base_path, 256);
+  PUTSTRING(p, user, RAP_USERNAME_LEN);
+  PUTWORD(p, 3); /* info level */
+  PUTWORD(p, 0xFF00);  /* buffer size */ 
+  PUTDWORD(p, 0);  /* zero out the resume key */
+  PUTDWORD(p, 0);  /* or is this one the resume key? */
+        	 
+  if (cli_api(cli, 
+	      param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */
+	      NULL, 0, 0xFF00,  /* data, length, maxlen */
+	      &rparam, &rprcnt,               /* return params, length */
+	      &rdata, &rdrcnt))               /* return data, length */
+    {
+      int res = GETRES(rparam);
+      
+      if (res == 0 || res == ERRmoredata) {
+	int converter, i;
 
-	if (cli_api(cli,
-			param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */
-			NULL, 0, 0xFF00,  /* data, length, maxlen */
-			&rparam, &rprcnt,               /* return params, length */
-			&rdata, &rdrcnt))               /* return data, length */
-	{
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam, endp);
+	p = rparam + WORDSIZE; /* skip result */
+	GETWORD(p, converter);
+	GETWORD(p, count);
+	
+	p = rdata;
+	for (i=0; i<count; i++) {
+	  int id, perms, locks;
+	  pstring fpath, fuser;
+	  
+	  GETDWORD(p, id);
+	  GETWORD(p, perms);
+	  GETWORD(p, locks);
+	  GETSTRINGP(p, fpath, rdata, converter);
+	  GETSTRINGP(p, fuser, rdata, converter);
 
-		if (res == 0 || res == ERRmoredata) {
-			TALLOC_CTX *frame = talloc_stackframe();
-			int converter = 0, i;
-
-			p = rparam + WORDSIZE; /* skip result */
-			GETWORD(p, converter, endp);
-			GETWORD(p, count, endp);
-
-			p = rdata;
-			endp = rdata + rdrcnt;
-			for (i=0; i<count && p < endp; i++) {
-				int id = 0, perms = 0, locks = 0;
-				char *fpath, *fuser;
-
-				GETDWORD(p, id, endp);
-				GETWORD(p, perms, endp);
-				GETWORD(p, locks, endp);
-				p += rap_getstringp(frame,
-					p,
-					&fpath,
-					rdata,
-					converter,
-					endp);
-				p += rap_getstringp(frame,
-					p,
-					&fuser,
-					rdata,
-					converter,
-					endp);
-
-				if (fpath && fuser) {
-					fn(fpath, fuser, perms, locks, id);
-				}
-			}  /* BB fix ERRmoredata case to send resume request */
-			TALLOC_FREE(frame);
-		} else {
-			DEBUG(4,("NetFileEnum2 res=%d\n", res));
-		}
-	} else {
-		DEBUG(4,("NetFileEnum2 failed\n"));
-	}
-
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-
-	return count;
+	  fn(fpath, fuser, perms, locks, id);
+	}  /* BB fix ERRmoredata case to send resume request */
+      } else {
+	DEBUG(4,("NetFileEnum2 res=%d\n", res));
+      }      
+    } else {
+      DEBUG(4,("NetFileEnum2 failed\n"));
+    }
+  
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
+  
+  return count;
 }
 
 /****************************************************************************
- Call a NetShareAdd - share/export directory on remote server.
+ call a NetShareAdd - share/export directory on remote server
 ****************************************************************************/
-
 int cli_NetShareAdd(struct cli_state *cli, RAP_SHARE_INFO_2 * sinfo )
 {
-	char *rparam = NULL;
-	char *rdata = NULL;
-	char *p;
-	unsigned int rdrcnt,rprcnt;
-	int res = -1;
-	char param[WORDSIZE                  /* api number    */
-		+sizeof(RAP_WShareAdd_REQ) /* req string    */
-		+sizeof(RAP_SHARE_INFO_L2) /* return string */
-		+WORDSIZE                  /* info level    */
-		+WORDSIZE];                /* reserved word */
-	char data[1024];
-	/* offset to free format string section following fixed length data.  */
-	/* will be updated by PUTSTRINGP macro and will end up with total len */
-	int soffset = RAP_SHARENAME_LEN + 1 /* share name + pad   */
-		+ WORDSIZE                        /* share type    */
-		+ DWORDSIZE                       /* comment pointer */
-		+ WORDSIZE                        /* permissions */
-		+ WORDSIZE                        /* max users */
-		+ WORDSIZE                        /* active users */
-		+ DWORDSIZE                       /* share path */
-		+ RAP_SPASSWD_LEN + 1;            /* share password + pad */
+  char *rparam = NULL;
+  char *rdata = NULL;
+  char *p;
+  unsigned int rdrcnt,rprcnt;
+  int res;
+  char param[WORDSIZE                  /* api number    */
+	    +sizeof(RAP_WShareAdd_REQ) /* req string    */
+	    +sizeof(RAP_SHARE_INFO_L2) /* return string */
+	    +WORDSIZE                  /* info level    */
+	    +WORDSIZE];                /* reserved word */
+  char data[1024];
+  /* offset to free format string section following fixed length data.  */
+  /* will be updated by PUTSTRINGP macro and will end up with total len */
+  int soffset = RAP_SHARENAME_LEN + 1 /* share name + pad   */
+    + WORDSIZE                        /* share type    */
+    + DWORDSIZE                       /* comment pointer */
+    + WORDSIZE                        /* permissions */
+    + WORDSIZE                        /* max users */
+    + WORDSIZE                        /* active users */
+    + DWORDSIZE                       /* share path */
+    + RAP_SPASSWD_LEN + 1;            /* share password + pad */
 
-	memset(param,'\0',sizeof(param));
-	/* now send a SMBtrans command with api RNetShareAdd */
-	p = make_header(param, RAP_WshareAdd,
-		RAP_WShareAdd_REQ, RAP_SHARE_INFO_L2);
-	PUTWORD(p, 2); /* info level */
-	PUTWORD(p, 0); /* reserved word 0 */
+  memset(param,'\0',sizeof(param));
+  /* now send a SMBtrans command with api RNetShareAdd */
+  p = make_header(param, RAP_WshareAdd,
+		  RAP_WShareAdd_REQ, RAP_SHARE_INFO_L2); 
+  PUTWORD(p, 2); /* info level */
+  PUTWORD(p, 0); /* reserved word 0 */
 
-	p = data;
-	PUTSTRINGF(p, sinfo->share_name, RAP_SHARENAME_LEN);
-	PUTBYTE(p, 0); /* pad byte 0 */
+  p = data;
+  PUTSTRINGF(p, sinfo->share_name, RAP_SHARENAME_LEN);
+  PUTBYTE(p, 0); /* pad byte 0 */
 
-	PUTWORD(p, sinfo->share_type);
-	PUTSTRINGP(p, sinfo->comment, data, soffset);
-	PUTWORD(p, sinfo->perms);
-	PUTWORD(p, sinfo->maximum_users);
-	PUTWORD(p, sinfo->active_users);
-	PUTSTRINGP(p, sinfo->path, data, soffset);
-	PUTSTRINGF(p, sinfo->password, RAP_SPASSWD_LEN);
-	SCVAL(p,-1,0x0A); /* required 0x0A at end of password */
-
-	if (cli_api(cli,
-			param, sizeof(param), 1024, /* Param, length, maxlen */
-			data, soffset, sizeof(data), /* data, length, maxlen */
-			&rparam, &rprcnt,   /* return params, length */
-			&rdata, &rdrcnt))   /* return data, length */
-	{
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam, endp);
-
-		if (res == 0) {
-			/* nothing to do */
-		} else {
-			DEBUG(4,("NetShareAdd res=%d\n", res));
-		}
-	} else {
-		DEBUG(4,("NetShareAdd failed\n"));
-	}
-
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-
-	return res;
+  PUTWORD(p, sinfo->share_type);
+  PUTSTRINGP(p, sinfo->comment, data, soffset);
+  PUTWORD(p, sinfo->perms);
+  PUTWORD(p, sinfo->maximum_users);
+  PUTWORD(p, sinfo->active_users);
+  PUTSTRINGP(p, sinfo->path, data, soffset);
+  PUTSTRINGF(p, sinfo->password, RAP_SPASSWD_LEN);
+  SCVAL(p,-1,0x0A); /* required 0x0A at end of password */
+  
+  if (cli_api(cli, 
+	      param, sizeof(param), 1024, /* Param, length, maxlen */
+	      data, soffset, sizeof(data), /* data, length, maxlen */
+	      &rparam, &rprcnt,   /* return params, length */
+	      &rdata, &rdrcnt))   /* return data, length */
+    {
+      res = rparam? SVAL(rparam,0) : -1;
+			
+      if (res == 0) {
+	/* nothing to do */		
+      }
+      else {
+	DEBUG(4,("NetShareAdd res=%d\n", res));
+      }      
+    } else {
+      res = -1;
+      DEBUG(4,("NetShareAdd failed\n"));
+    }
+  
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
+  
+  return res;
 }
-
 /****************************************************************************
- Call a NetShareDelete - unshare exported directory on remote server.
+ call a NetShareDelete - unshare exported directory on remote server
 ****************************************************************************/
-
 int cli_NetShareDelete(struct cli_state *cli, const char * share_name )
 {
-	char *rparam = NULL;
-	char *rdata = NULL;
-	char *p;
-	unsigned int rdrcnt,rprcnt;
-	int res = -1;
-	char param[WORDSIZE                  /* api number    */
-		+sizeof(RAP_WShareDel_REQ) /* req string    */
-		+1                         /* no ret string */
-		+RAP_SHARENAME_LEN         /* share to del  */
-		+WORDSIZE];                /* reserved word */
+  char *rparam = NULL;
+  char *rdata = NULL;
+  char *p;
+  unsigned int rdrcnt,rprcnt;
+  int res;
+  char param[WORDSIZE                  /* api number    */
+	    +sizeof(RAP_WShareDel_REQ) /* req string    */
+	    +1                         /* no ret string */
+	    +RAP_SHARENAME_LEN         /* share to del  */
+	    +WORDSIZE];                /* reserved word */
+	    
 
-	/* now send a SMBtrans command with api RNetShareDelete */
-	p = make_header(param, RAP_WshareDel, RAP_WShareDel_REQ, NULL);
-	PUTSTRING(p,share_name,RAP_SHARENAME_LEN);
-	PUTWORD(p,0);  /* reserved word MBZ on input */
-
-	if (cli_api(cli,
-			param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */
-			NULL, 0, 200,       /* data, length, maxlen */
-			&rparam, &rprcnt,   /* return params, length */
-			&rdata, &rdrcnt))   /* return data, length */
-	{
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam, endp);
-
-		if (res == 0) {
-			/* nothing to do */
-		} else {
-			DEBUG(4,("NetShareDelete res=%d\n", res));
-		}
-	} else {
-		DEBUG(4,("NetShareDelete failed\n"));
-	}
-
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-
-	return res;
+  /* now send a SMBtrans command with api RNetShareDelete */
+  p = make_header(param, RAP_WshareDel, RAP_WShareDel_REQ, NULL);
+  PUTSTRING(p,share_name,RAP_SHARENAME_LEN);
+  PUTWORD(p,0);  /* reserved word MBZ on input */
+        	 
+  if (cli_api(cli, 
+	      param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */
+	      NULL, 0, 200,       /* data, length, maxlen */
+	      &rparam, &rprcnt,   /* return params, length */
+	      &rdata, &rdrcnt))   /* return data, length */
+    {
+      res = GETRES(rparam);
+			
+      if (res == 0) {
+	/* nothing to do */		
+      }
+      else {
+	DEBUG(4,("NetShareDelete res=%d\n", res));
+      }      
+    } else {
+      res = -1;
+      DEBUG(4,("NetShareDelete failed\n"));
+    }
+  
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
+	
+  return res;
 }
-
 /*************************************************************************
 *
 * Function Name:  cli_get_pdc_name
@@ -1457,7 +1218,7 @@
 *
 * Dependencies: none
 *
-* Parameters:
+* Parameters: 
 *             cli       - pointer to cli_state structure
 *             workgroup - pointer to string containing name of domain
 *             pdc_name  - pointer to string that will contain PDC name
@@ -1468,78 +1229,64 @@
 *             False     - failure
 *
 ************************************************************************/
-
-bool cli_get_pdc_name(struct cli_state *cli, const char *workgroup, char **pdc_name)
+BOOL cli_get_pdc_name(struct cli_state *cli, char *workgroup, char *pdc_name)
 {
-	char *rparam = NULL;
-	char *rdata = NULL;
-	unsigned int rdrcnt,rprcnt;
-	char *p;
-	char param[WORDSIZE                       /* api number    */
-		+sizeof(RAP_NetServerEnum2_REQ) /* req string    */
-		+sizeof(RAP_SERVER_INFO_L1)     /* return string */
-		+WORDSIZE                       /* info level    */
-		+WORDSIZE                       /* buffer size   */
-		+DWORDSIZE                      /* server type   */
-		+RAP_MACHNAME_LEN];             /* workgroup     */
-	int count = -1;
-	int res = -1;
+  char *rparam = NULL;
+  char *rdata = NULL;
+  unsigned int rdrcnt,rprcnt;
+  char *p;
+  char param[WORDSIZE                       /* api number    */
+	    +sizeof(RAP_NetServerEnum2_REQ) /* req string    */
+	    +sizeof(RAP_SERVER_INFO_L1)     /* return string */
+	    +WORDSIZE                       /* info level    */
+	    +WORDSIZE                       /* buffer size   */
+	    +DWORDSIZE                      /* server type   */
+	    +RAP_MACHNAME_LEN];             /* workgroup     */
+  int count = -1;
+  
+  *pdc_name = '\0';
 
-	*pdc_name = NULL;
-
-	/* send a SMBtrans command with api NetServerEnum */
-	p = make_header(param, RAP_NetServerEnum2,
-		RAP_NetServerEnum2_REQ, RAP_SERVER_INFO_L1);
-	PUTWORD(p, 1); /* info level */
-	PUTWORD(p, CLI_BUFFER_SIZE);
-	PUTDWORD(p, SV_TYPE_DOMAIN_CTRL);
-	PUTSTRING(p, workgroup, RAP_MACHNAME_LEN);
-
-	if (cli_api(cli,
-			param, PTR_DIFF(p,param), 8,        /* params, length, max */
-			NULL, 0, CLI_BUFFER_SIZE,               /* data, length, max */
-			&rparam, &rprcnt,                   /* return params, return size */
-			&rdata, &rdrcnt                     /* return data, return size */
-			)) {
-
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam, endp);
-		cli->rap_error = res;
-
-		/*
-		 * We only really care to copy a name if the
-		 * API succeeded and we got back a name.
-		 */
-		if (cli->rap_error == 0) {
-			p = rparam + WORDSIZE + WORDSIZE; /* skip result and converter */
-			GETWORD(p, count, endp);
-			p = rdata;
-			endp = rdata + rdrcnt;
-
-			if (count > 0) {
-				TALLOC_CTX *frame = talloc_stackframe();
-				char *dcname;
-				p += rap_getstring(frame,
-					p,
-					&dcname,
-					endp);
-				if (dcname) {
-					*pdc_name = SMB_STRDUP(dcname);
-				}
-				TALLOC_FREE(frame);
-			}
-		} else {
-			DEBUG(4,("cli_get_pdc_name: machine %s failed the NetServerEnum call. "
-				"Error was : %s.\n", cli->desthost, cli_errstr(cli) ));
-		}
-	}
-
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-
-	return(count > 0);
+  /* send a SMBtrans command with api NetServerEnum */
+  p = make_header(param, RAP_NetServerEnum2,
+		  RAP_NetServerEnum2_REQ, RAP_SERVER_INFO_L1);
+  PUTWORD(p, 1); /* info level */
+  PUTWORD(p, CLI_BUFFER_SIZE);
+  PUTDWORD(p, SV_TYPE_DOMAIN_CTRL);
+  PUTSTRING(p, workgroup, RAP_MACHNAME_LEN);
+	
+  if (cli_api(cli, 
+	      param, PTR_DIFF(p,param), 8,        /* params, length, max */
+	      NULL, 0, CLI_BUFFER_SIZE,               /* data, length, max */
+	      &rparam, &rprcnt,                   /* return params, return size */
+	      &rdata, &rdrcnt                     /* return data, return size */
+	      )) {
+    cli->rap_error = GETRES(rparam);
+			
+        /*
+         * We only really care to copy a name if the
+         * API succeeded and we got back a name.
+         */
+    if (cli->rap_error == 0) {
+      p = rparam + WORDSIZE + WORDSIZE; /* skip result and converter */
+      GETWORD(p, count);
+      p = rdata;
+      
+      if (count > 0)
+	GETSTRING(p, pdc_name);
+    }
+    else {
+	DEBUG(4,("cli_get_pdc_name: machine %s failed the NetServerEnum call. "
+		 "Error was : %s.\n", cli->desthost, cli_errstr(cli) ));
+    }
+  }
+  
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
+  
+  return(count > 0);
 }
 
+
 /*************************************************************************
 *
 * Function Name:  cli_get_server_domain
@@ -1552,7 +1299,7 @@
 *
 * Dependencies: none
 *
-* Parameters:
+* Parameters: 
 *             cli       - pointer to cli_state structure
 *
 * Returns:
@@ -1562,63 +1309,50 @@
 * Origins:  samba 2.0.6 source/libsmb/clientgen.c cli_NetServerEnum()
 *
 ************************************************************************/
-
-bool cli_get_server_domain(struct cli_state *cli)
+BOOL cli_get_server_domain(struct cli_state *cli)
 {
-	char *rparam = NULL;
-	char *rdata = NULL;
-	unsigned int rdrcnt,rprcnt;
-	char *p;
-	char param[WORDSIZE                      /* api number    */
-			+sizeof(RAP_WWkstaGetInfo_REQ) /* req string    */
-			+sizeof(RAP_WKSTA_INFO_L10)    /* return string */
-			+WORDSIZE                      /* info level    */
-			+WORDSIZE];                    /* buffer size   */
-	int res = -1;
+  char *rparam = NULL;
+  char *rdata = NULL;
+  unsigned int rdrcnt,rprcnt;
+  char *p;
+  char param[WORDSIZE                      /* api number    */
+	    +sizeof(RAP_WWkstaGetInfo_REQ) /* req string    */
+	    +sizeof(RAP_WKSTA_INFO_L10)    /* return string */
+	    +WORDSIZE                      /* info level    */
+	    +WORDSIZE];                    /* buffer size   */
+  int res = -1;
+  
+  /* send a SMBtrans command with api NetWkstaGetInfo */
+  p = make_header(param, RAP_WWkstaGetInfo,
+		  RAP_WWkstaGetInfo_REQ, RAP_WKSTA_INFO_L10);
+  PUTWORD(p, 10); /* info level */
+  PUTWORD(p, CLI_BUFFER_SIZE);
+	
+  if (cli_api(cli, param, PTR_DIFF(p,param), 8, /* params, length, max */
+	      NULL, 0, CLI_BUFFER_SIZE,         /* data, length, max */
+	      &rparam, &rprcnt,         /* return params, return size */
+	      &rdata, &rdrcnt)) {       /* return data, return size */
+    res = GETRES(rparam);
+    p = rdata;		
+    
+    if (res == 0) {
+      int converter;
 
-	/* send a SMBtrans command with api NetWkstaGetInfo */
-	p = make_header(param, RAP_WWkstaGetInfo,
-		RAP_WWkstaGetInfo_REQ, RAP_WKSTA_INFO_L10);
-	PUTWORD(p, 10); /* info level */
-	PUTWORD(p, CLI_BUFFER_SIZE);
-
-	if (cli_api(cli, param, PTR_DIFF(p,param), 8, /* params, length, max */
-			NULL, 0, CLI_BUFFER_SIZE,         /* data, length, max */
-			&rparam, &rprcnt,         /* return params, return size */
-			&rdata, &rdrcnt)) {       /* return data, return size */
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam, endp);
-
-		if (res == 0) {
-			TALLOC_CTX *frame = talloc_stackframe();
-			char *server_domain;
-			int converter = 0;
-
-			p = rparam + WORDSIZE;
-			GETWORD(p, converter, endp);
-
-			p = rdata + DWORDSIZE + DWORDSIZE; /* skip computer & user names */
-			endp = rdata + rdrcnt;
-			p += rap_getstringp(frame,
-				p,
-				&server_domain,
-				rdata,
-				converter,
-				endp);
-
-			if (server_domain) {
-				fstrcpy(cli->server_domain, server_domain);
-			}
-			TALLOC_FREE(frame);
-		}
-	}
-
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-
-	return(res == 0);
+      p = rparam + WORDSIZE;
+      GETWORD(p, converter);
+      
+      p = rdata + DWORDSIZE + DWORDSIZE; /* skip computer & user names */
+      GETSTRINGP(p, cli->server_domain, rdata, converter);
+    }
+  }
+  
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
+  
+  return(res == 0);
 }
 
+
 /*************************************************************************
 *
 * Function Name:  cli_get_server_type
@@ -1629,7 +1363,7 @@
 *
 * Dependencies: none
 *
-* Parameters:
+* Parameters: 
 *             cli       - pointer to cli_state structure
 *             pstype    - pointer to uint32 to contain returned server type
 *
@@ -1640,51 +1374,47 @@
 * Origins:  samba 2.0.6 source/libsmb/clientgen.c cli_NetServerEnum()
 *
 ************************************************************************/
-
-bool cli_get_server_type(struct cli_state *cli, uint32 *pstype)
+BOOL cli_get_server_type(struct cli_state *cli, uint32 *pstype)
 {
-	char *rparam = NULL;
-	char *rdata = NULL;
-	unsigned int rdrcnt,rprcnt;
-	char *p;
-	char param[WORDSIZE                       /* api number    */
-		+sizeof(RAP_WserverGetInfo_REQ) /* req string    */
-		+sizeof(RAP_SERVER_INFO_L1)     /* return string */
-		+WORDSIZE                       /* info level    */
-		+WORDSIZE];                     /* buffer size   */
-	int res = -1;
-
-	/* send a SMBtrans command with api NetServerGetInfo */
-	p = make_header(param, RAP_WserverGetInfo,
-		RAP_WserverGetInfo_REQ, RAP_SERVER_INFO_L1);
-	PUTWORD(p, 1); /* info level */
-	PUTWORD(p, CLI_BUFFER_SIZE);
-
-	if (cli_api(cli,
-			param, PTR_DIFF(p,param), 8, /* params, length, max */
-			NULL, 0, CLI_BUFFER_SIZE, /* data, length, max */
-			&rparam, &rprcnt,         /* return params, return size */
-			&rdata, &rdrcnt           /* return data, return size */
-			)) {
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam,endp);
-
-		if (res == 0 || res == ERRmoredata) {
-			p = rdata;
-			endp = rparam + rprcnt;
-			p += 18;
-			GETDWORD(p,*pstype,endp);
-			*pstype &= ~SV_TYPE_LOCAL_LIST_ONLY;
-		}
-	}
-
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-
-	return(res == 0 || res == ERRmoredata);
+  char *rparam = NULL;
+  char *rdata = NULL;
+  unsigned int rdrcnt,rprcnt;
+  char *p;
+  char param[WORDSIZE                       /* api number    */
+	    +sizeof(RAP_WserverGetInfo_REQ) /* req string    */
+	    +sizeof(RAP_SERVER_INFO_L1)     /* return string */
+	    +WORDSIZE                       /* info level    */
+            +WORDSIZE];                     /* buffer size   */
+  int res = -1;
+  
+  /* send a SMBtrans command with api NetServerGetInfo */
+  p = make_header(param, RAP_WserverGetInfo,
+		  RAP_WserverGetInfo_REQ, RAP_SERVER_INFO_L1);
+  PUTWORD(p, 1); /* info level */
+  PUTWORD(p, CLI_BUFFER_SIZE);
+	
+  if (cli_api(cli, 
+	      param, PTR_DIFF(p,param), 8, /* params, length, max */
+	      NULL, 0, CLI_BUFFER_SIZE, /* data, length, max */
+	      &rparam, &rprcnt,         /* return params, return size */
+	      &rdata, &rdrcnt           /* return data, return size */
+	      )) {
+    
+    res = GETRES(rparam);
+    
+    if (res == 0 || res == ERRmoredata) {
+      p = rdata;					
+      *pstype = IVAL(p,18) & ~SV_TYPE_LOCAL_LIST_ONLY;
+    }
+  }
+  
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
+  
+  return(res == 0 || res == ERRmoredata);
 }
 
-bool cli_get_server_name(TALLOC_CTX *mem_ctx, struct cli_state *cli,
+BOOL cli_get_server_name(TALLOC_CTX *mem_ctx, struct cli_state *cli,
 			 char **servername)
 {
 	char *rparam = NULL;
@@ -1696,17 +1426,16 @@
 		   +sizeof(RAP_SERVER_INFO_L1)     /* return string */
 		   +WORDSIZE                       /* info level    */
 		   +WORDSIZE];                     /* buffer size   */
-	bool res = false;
-	char *endp;
+	BOOL res = False;
 	fstring tmp;
-
+  
 	/* send a SMBtrans command with api NetServerGetInfo */
 	p = make_header(param, RAP_WserverGetInfo,
 			RAP_WserverGetInfo_REQ, RAP_SERVER_INFO_L1);
 	PUTWORD(p, 1); /* info level */
 	PUTWORD(p, CLI_BUFFER_SIZE);
-
-	if (!cli_api(cli,
+	
+	if (!cli_api(cli, 
 		     param, PTR_DIFF(p,param), 8, /* params, length, max */
 		     NULL, 0, CLI_BUFFER_SIZE, /* data, length, max */
 		     &rparam, &rprcnt,         /* return params, return size */
@@ -1714,9 +1443,8 @@
 		    )) {
 		goto failed;
 	}
-
-	endp = rparam + rprcnt;
-	if (GETRES(rparam, endp) != 0) {
+    
+	if (GETRES(rparam) != 0) {
 		goto failed;
 	}
 
@@ -1735,7 +1463,7 @@
 		goto failed;
 	}
 
-	res = true;
+	res = True;
 
  failed:
 	SAFE_FREE(rparam);
@@ -1754,12 +1482,12 @@
 *           then we conclude the server type checks out. This routine
 *           is useful to retrieve list of server's of a certain
 *           type when all you have is a null session connection and
-*           can't remote API calls such as NetWkstaGetInfo or
+*           can't remote API calls such as NetWkstaGetInfo or 
 *           NetServerGetInfo.
 *
 * Dependencies: none
 *
-* Parameters:
+* Parameters: 
 *             cli       - pointer to cli_state structure
 *             workgroup - pointer to string containing domain
 *             stype     - server type
@@ -1769,904 +1497,655 @@
 *             False     - failure
 *
 ************************************************************************/
-
-bool cli_ns_check_server_type(struct cli_state *cli, char *workgroup, uint32 stype)
+BOOL cli_ns_check_server_type(struct cli_state *cli, char *workgroup, uint32 stype)
 {
-	char *rparam = NULL;
-	char *rdata = NULL;
-	unsigned int rdrcnt,rprcnt;
-	char *p;
-	char param[WORDSIZE                       /* api number    */
-		+sizeof(RAP_NetServerEnum2_REQ) /* req string    */
-		+sizeof(RAP_SERVER_INFO_L0)     /* return string */
-		+WORDSIZE                       /* info level    */
-		+WORDSIZE                       /* buffer size   */
-		+DWORDSIZE                      /* server type   */
-		+RAP_MACHNAME_LEN];             /* workgroup     */
-	bool found_server = false;
-	int res = -1;
+  char *rparam = NULL;
+  char *rdata = NULL;
+  unsigned int rdrcnt,rprcnt;
+  char *p;
+  char param[WORDSIZE                       /* api number    */
+	    +sizeof(RAP_NetServerEnum2_REQ) /* req string    */
+	    +sizeof(RAP_SERVER_INFO_L0)     /* return string */
+	    +WORDSIZE                       /* info level    */
+	    +WORDSIZE                       /* buffer size   */
+	    +DWORDSIZE                      /* server type   */
+	    +RAP_MACHNAME_LEN];             /* workgroup     */
+  BOOL found_server = False;
+  int res = -1;
+  
+  /* send a SMBtrans command with api NetServerEnum */
+  p = make_header(param, RAP_NetServerEnum2,
+		  RAP_NetServerEnum2_REQ, RAP_SERVER_INFO_L0);
+  PUTWORD(p, 0); /* info level 0 */
+  PUTWORD(p, CLI_BUFFER_SIZE);
+  PUTDWORD(p, stype);
+  PUTSTRING(p, workgroup, RAP_MACHNAME_LEN);
+	
+  if (cli_api(cli, 
+	      param, PTR_DIFF(p,param), 8, /* params, length, max */
+	      NULL, 0, CLI_BUFFER_SIZE,  /* data, length, max */
+	      &rparam, &rprcnt,          /* return params, return size */
+	      &rdata, &rdrcnt            /* return data, return size */
+	      )) {
+	
+    res = GETRES(rparam);
+    cli->rap_error = res;
 
-	/* send a SMBtrans command with api NetServerEnum */
-	p = make_header(param, RAP_NetServerEnum2,
-			RAP_NetServerEnum2_REQ, RAP_SERVER_INFO_L0);
-	PUTWORD(p, 0); /* info level 0 */
-	PUTWORD(p, CLI_BUFFER_SIZE);
-	PUTDWORD(p, stype);
-	PUTSTRING(p, workgroup, RAP_MACHNAME_LEN);
+    if (res == 0 || res == ERRmoredata) {
+      int i, count;
 
-	if (cli_api(cli,
-			param, PTR_DIFF(p,param), 8, /* params, length, max */
-			NULL, 0, CLI_BUFFER_SIZE,  /* data, length, max */
-			&rparam, &rprcnt,          /* return params, return size */
-			&rdata, &rdrcnt            /* return data, return size */
-			)) {
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam,endp);
-		cli->rap_error = res;
+      p = rparam + WORDSIZE + WORDSIZE;
+      GETWORD(p, count);
 
-		if (res == 0 || res == ERRmoredata) {
-			int i, count = 0;
+      p = rdata;
+      for (i = 0;i < count;i++, p += 16) {
+	char ret_server[RAP_MACHNAME_LEN];
 
-			p = rparam + WORDSIZE + WORDSIZE;
-			GETWORD(p, count,endp);
-
-			p = rdata;
-			endp = rdata + rdrcnt;
-			for (i = 0;i < count && p < endp;i++, p += 16) {
-				char ret_server[RAP_MACHNAME_LEN];
-
-				p += rap_getstringf(p,
-						ret_server,
-						RAP_MACHNAME_LEN,
-						RAP_MACHNAME_LEN,
-						endp);
-				if (strequal(ret_server, cli->desthost)) {
-					found_server = true;
-					break;
-				}
-			}
-		} else {
-			DEBUG(4,("cli_ns_check_server_type: machine %s failed the NetServerEnum call. "
-				"Error was : %s.\n", cli->desthost, cli_errstr(cli) ));
-		}
+	GETSTRINGF(p, ret_server, RAP_MACHNAME_LEN);
+	if (strequal(ret_server, cli->desthost)) {
+	  found_server = True;
+	  break;
 	}
+      }
+    }
+    else {
+      DEBUG(4,("cli_ns_check_server_type: machine %s failed the NetServerEnum call. "
+	       "Error was : %s.\n", cli->desthost, cli_errstr(cli) ));
+    }
+  }
+  
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
+	
+  return found_server;
+ }
 
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
 
-	return found_server;
-}
-
 /****************************************************************************
- Perform a NetWkstaUserLogoff.
+ perform a NetWkstaUserLogoff
 ****************************************************************************/
-
-bool cli_NetWkstaUserLogoff(struct cli_state *cli, const char *user, const char *workstation)
+BOOL cli_NetWkstaUserLogoff(struct cli_state *cli,char *user, char *workstation)
 {
-	char *rparam = NULL;
-	char *rdata = NULL;
-	char *p;
-	unsigned int rdrcnt,rprcnt;
-	char param[WORDSIZE                           /* api number    */
-			+sizeof(RAP_NetWkstaUserLogoff_REQ) /* req string    */
-			+sizeof(RAP_USER_LOGOFF_INFO_L1)    /* return string */
-			+RAP_USERNAME_LEN+1                 /* user name+pad */
-			+RAP_MACHNAME_LEN                   /* wksta name    */
-			+WORDSIZE                           /* buffer size   */
-			+WORDSIZE];                         /* buffer size?  */
-	char upperbuf[MAX(RAP_USERNAME_LEN,RAP_MACHNAME_LEN)];
-	int res = -1;
+  char *rparam = NULL;
+  char *rdata = NULL;
+  char *p;
+  unsigned int rdrcnt,rprcnt;
+  char param[WORDSIZE                           /* api number    */
+	    +sizeof(RAP_NetWkstaUserLogoff_REQ) /* req string    */
+	    +sizeof(RAP_USER_LOGOFF_INFO_L1)    /* return string */
+	    +RAP_USERNAME_LEN+1                 /* user name+pad */
+	    +RAP_MACHNAME_LEN                   /* wksta name    */
+	    +WORDSIZE                           /* buffer size   */
+	    +WORDSIZE];                         /* buffer size?  */
+  fstring upperbuf;
+  
+  memset(param, 0, sizeof(param));
 
-	memset(param, 0, sizeof(param));
-
-	/* send a SMBtrans command with api NetWkstaUserLogoff */
-	p = make_header(param, RAP_WWkstaUserLogoff,
-		RAP_NetWkstaUserLogoff_REQ, RAP_USER_LOGOFF_INFO_L1);
-	PUTDWORD(p, 0); /* Null pointer */
-	PUTDWORD(p, 0); /* Null pointer */
-	strlcpy(upperbuf, user, sizeof(upperbuf));
-	strupper_m(upperbuf);
-	PUTSTRINGF(p, upperbuf, RAP_USERNAME_LEN);
-	p++; /* strange format, but ok */
-	strlcpy(upperbuf, workstation, sizeof(upperbuf));
-	strupper_m(upperbuf);
-	PUTSTRINGF(p, upperbuf, RAP_MACHNAME_LEN);
-	PUTWORD(p, CLI_BUFFER_SIZE);
-	PUTWORD(p, CLI_BUFFER_SIZE);
-
-	if (cli_api(cli,
-			param, PTR_DIFF(p,param),1024,  /* param, length, max */
-			NULL, 0, CLI_BUFFER_SIZE,       /* data, length, max */
-			&rparam, &rprcnt,               /* return params, return size */
-			&rdata, &rdrcnt                 /* return data, return size */
-			)) {
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam,endp);
-		cli->rap_error = res;
-
-		if (cli->rap_error != 0) {
-			DEBUG(4,("NetwkstaUserLogoff gave error %d\n", cli->rap_error));
-		}
-	}
-
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-	return (cli->rap_error == 0);
+  /* send a SMBtrans command with api NetWkstaUserLogoff */
+  p = make_header(param, RAP_WWkstaUserLogoff,
+		  RAP_NetWkstaUserLogoff_REQ, RAP_USER_LOGOFF_INFO_L1);
+  PUTDWORD(p, 0); /* Null pointer */
+  PUTDWORD(p, 0); /* Null pointer */
+  fstrcpy(upperbuf, user);
+  strupper_m(upperbuf);
+  PUTSTRINGF(p, upperbuf, RAP_USERNAME_LEN);
+  p++; /* strange format, but ok */
+  fstrcpy(upperbuf, workstation);
+  strupper_m(upperbuf);
+  PUTSTRINGF(p, upperbuf, RAP_MACHNAME_LEN);
+  PUTWORD(p, CLI_BUFFER_SIZE);
+  PUTWORD(p, CLI_BUFFER_SIZE);
+  
+  if (cli_api(cli,
+	      param, PTR_DIFF(p,param),1024,  /* param, length, max */
+	      NULL, 0, CLI_BUFFER_SIZE,       /* data, length, max */
+	      &rparam, &rprcnt,               /* return params, return size */
+	      &rdata, &rdrcnt                 /* return data, return size */
+	      )) {
+    cli->rap_error = GETRES(rparam);
+    
+    if (cli->rap_error != 0) {
+      DEBUG(4,("NetwkstaUserLogoff gave error %d\n", cli->rap_error));
+    }
+  }
+  
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
+  return (cli->rap_error == 0);
 }
-
+ 
 int cli_NetPrintQEnum(struct cli_state *cli,
 		void (*qfn)(const char*,uint16,uint16,uint16,const char*,const char*,const char*,const char*,const char*,uint16,uint16),
 		void (*jfn)(uint16,const char*,const char*,const char*,const char*,uint16,uint16,const char*,uint,uint,const char*))
 {
-	char param[WORDSIZE                         /* api number    */
-		+sizeof(RAP_NetPrintQEnum_REQ)    /* req string    */
-		+sizeof(RAP_PRINTQ_INFO_L2)       /* return string */
-		+WORDSIZE                         /* info level    */
-		+WORDSIZE                         /* buffer size   */
-		+sizeof(RAP_SMB_PRINT_JOB_L1)];   /* more ret data */
-	char *p;
-	char *rparam = NULL;
-	char *rdata = NULL;
-	unsigned int rprcnt, rdrcnt;
-	int res = -1;
+  char param[WORDSIZE                         /* api number    */
+	    +sizeof(RAP_NetPrintQEnum_REQ)    /* req string    */
+	    +sizeof(RAP_PRINTQ_INFO_L2)       /* return string */
+	    +WORDSIZE                         /* info level    */
+	    +WORDSIZE                         /* buffer size   */
+	    +sizeof(RAP_SMB_PRINT_JOB_L1)];   /* more ret data */
+  char *p;
+  char *rparam = NULL;
+  char *rdata = NULL; 
+  unsigned int rprcnt, rdrcnt;
+  int res = -1;
+  
 
-	memset(param, '\0',sizeof(param));
-	p = make_header(param, RAP_WPrintQEnum,
-		RAP_NetPrintQEnum_REQ, RAP_PRINTQ_INFO_L2);
-	PUTWORD(p,2); /* Info level 2 */
-	PUTWORD(p,0xFFE0); /* Return buffer size */
-	PUTSTRING(p, RAP_SMB_PRINT_JOB_L1, 0);
+  memset(param, '\0',sizeof(param));
+  p = make_header(param, RAP_WPrintQEnum, 
+		  RAP_NetPrintQEnum_REQ, RAP_PRINTQ_INFO_L2);
+  PUTWORD(p,2); /* Info level 2 */
+  PUTWORD(p,0xFFE0); /* Return buffer size */
+  PUTSTRING(p, RAP_SMB_PRINT_JOB_L1, 0);
 
-	if (cli_api(cli,
-			param, PTR_DIFF(p,param),1024,
-			NULL, 0, CLI_BUFFER_SIZE,
-			&rparam, &rprcnt,
-			&rdata, &rdrcnt)) {
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam, endp);
-		cli->rap_error = res;
-		if (res != 0) {
-			DEBUG(1,("NetPrintQEnum gave error %d\n", res));
-		}
-	}
+  if (cli_api(cli,
+	      param, PTR_DIFF(p,param),1024,
+	      NULL, 0, CLI_BUFFER_SIZE,
+	      &rparam, &rprcnt,
+	      &rdata, &rdrcnt)) {
+    res = GETRES(rparam);
+    cli->rap_error = res;
+    if (res != 0) {
+      DEBUG(1,("NetPrintQEnum gave error %d\n", res));
+    }
+  }
 
-	if (!rdata) {
-		DEBUG(4,("NetPrintQEnum no data returned\n"));
-		goto out;
-	}
+  if (rdata) {
+    if (res == 0 || res == ERRmoredata) {
+      int i, converter, count;
 
-	if (res == 0 || res == ERRmoredata) {
-		TALLOC_CTX *frame = talloc_stackframe();
-		char *endp = rparam + rprcnt;
-		int i, converter = 0, count = 0;
+      p = rparam + WORDSIZE;
+      GETWORD(p, converter);
+      GETWORD(p, count);
 
-		p = rparam + WORDSIZE;
-		GETWORD(p, converter, endp);
-		GETWORD(p, count, endp);
+      p = rdata;
+      for (i=0;i<count;i++) {
+	pstring qname, sep_file, print_proc, dest, parms, comment;
+	uint16 jobcount, priority, start_time, until_time, status;
 
-		p = rdata;
-		endp = rdata + rdrcnt;
-		for (i=0;i<count && p < endp;i++) {
-			char qname[RAP_SHARENAME_LEN];
-			char *sep_file, *print_proc, *dest, *parms, *comment;
-			uint16_t jobcount = 0, priority = 0;
-			uint16_t start_time = 0, until_time = 0, status = 0;
+	GETSTRINGF(p, qname, RAP_SHARENAME_LEN);
+	p++; /* pad */
+	GETWORD(p, priority);
+	GETWORD(p, start_time);
+	GETWORD(p, until_time);
+	GETSTRINGP(p, sep_file, rdata, converter);
+	GETSTRINGP(p, print_proc, rdata, converter);
+	GETSTRINGP(p, dest, rdata, converter);
+	GETSTRINGP(p, parms, rdata, converter);
+	GETSTRINGP(p, parms, comment, converter);
+	GETWORD(p, status);
+	GETWORD(p, jobcount);
 
-			p += rap_getstringf(p,
-					qname,
-					RAP_SHARENAME_LEN,
-					RAP_SHARENAME_LEN,
-					endp);
-			p++; /* pad */
-			GETWORD(p, priority, endp);
-			GETWORD(p, start_time, endp);
-			GETWORD(p, until_time, endp);
-			p += rap_getstringp(frame,
-					p,
-					&sep_file,
-					rdata,
-					converter,
-					endp);
-			p += rap_getstringp(frame,
-					p,
-					&print_proc,
-					rdata,
-					converter,
-					endp);
-			p += rap_getstringp(frame,
-					p,
-					&dest,
-					rdata,
-					converter,
-					endp);
-			p += rap_getstringp(frame,
-					p,
-					&parms,
-					rdata,
-					converter,
-					endp);
-			p += rap_getstringp(frame,
-					p,
-					&comment,
-					rdata,
-					converter,
-					endp);
-			GETWORD(p, status, endp);
-			GETWORD(p, jobcount, endp);
+	qfn(qname, priority, start_time, until_time, sep_file, print_proc,
+	    dest, parms, comment, status, jobcount);
 
-			if (sep_file && print_proc && dest && parms &&
-					comment) {
-				qfn(qname, priority, start_time, until_time, sep_file, print_proc,
-					dest, parms, comment, status, jobcount);
-			}
-
-			if (jobcount) {
-				int j;
-				for (j=0;j<jobcount;j++) {
-					uint16 jid = 0, pos = 0, fsstatus = 0;
-					char ownername[RAP_USERNAME_LEN];
-					char notifyname[RAP_MACHNAME_LEN];
-					char datatype[RAP_DATATYPE_LEN];
-					char *jparms, *jstatus, *jcomment;
-					unsigned int submitted = 0, jsize = 0;
-
-					GETWORD(p, jid, endp);
-					p += rap_getstringf(p,
-							ownername,
-							RAP_USERNAME_LEN,
-							RAP_USERNAME_LEN,
-							endp);
-					p++; /* pad byte */
-					p += rap_getstringf(p,
-							notifyname,
-							RAP_MACHNAME_LEN,
-							RAP_MACHNAME_LEN,
-							endp);
-					p += rap_getstringf(p,
-							datatype,
-							RAP_DATATYPE_LEN,
-							RAP_DATATYPE_LEN,
-							endp);
-					p += rap_getstringp(frame,
-							p,
-							&jparms,
-							rdata,
-							converter,
-							endp);
-					GETWORD(p, pos, endp);
-					GETWORD(p, fsstatus, endp);
-					p += rap_getstringp(frame,
-							p,
-							&jstatus,
-							rdata,
-							converter,
-							endp);
-					GETDWORD(p, submitted, endp);
-					GETDWORD(p, jsize, endp);
-					p += rap_getstringp(frame,
-							p,
-							&jcomment,
-							rdata,
-							converter,
-							endp);
-
-					if (jparms && jstatus && jcomment) {
-						jfn(jid, ownername, notifyname, datatype, jparms, pos, fsstatus,
-							jstatus, submitted, jsize, jcomment);
-					}
-				}
-			}
-		}
-		TALLOC_FREE(frame);
-	} else {
-		DEBUG(4,("NetPrintQEnum res=%d\n", res));
+	if (jobcount) {
+	  int j;
+	  for (j=0;j<jobcount;j++) {
+	    uint16 jid, pos, fsstatus;
+	    pstring ownername, notifyname, datatype, jparms, jstatus, jcomment;
+	    unsigned int submitted, jsize;
+	    
+	    GETWORD(p, jid);
+	    GETSTRINGF(p, ownername, RAP_USERNAME_LEN);
+	    p++; /* pad byte */
+	    GETSTRINGF(p, notifyname, RAP_MACHNAME_LEN);
+	    GETSTRINGF(p, datatype, RAP_DATATYPE_LEN);
+	    GETSTRINGP(p, jparms, rdata, converter);
+	    GETWORD(p, pos);
+	    GETWORD(p, fsstatus);
+	    GETSTRINGP(p, jstatus, rdata, converter);
+	    GETDWORD(p, submitted);
+	    GETDWORD(p, jsize);
+	    GETSTRINGP(p, jcomment, rdata, converter);
+	  
+	    jfn(jid, ownername, notifyname, datatype, jparms, pos, fsstatus,
+		jstatus, submitted, jsize, jcomment);
+	  }
 	}
+      }
+    } else {
+      DEBUG(4,("NetPrintQEnum res=%d\n", res));
+    }
+  } else {
+    DEBUG(4,("NetPrintQEnum no data returned\n"));
+  }
+    
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
 
-  out:
-
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-
-	return res;
+  return res;  
 }
 
 int cli_NetPrintQGetInfo(struct cli_state *cli, const char *printer,
 	void (*qfn)(const char*,uint16,uint16,uint16,const char*,const char*,const char*,const char*,const char*,uint16,uint16),
 	void (*jfn)(uint16,const char*,const char*,const char*,const char*,uint16,uint16,const char*,uint,uint,const char*))
 {
-	char param[WORDSIZE                         /* api number    */
-		+sizeof(RAP_NetPrintQGetInfo_REQ) /* req string    */
-		+sizeof(RAP_PRINTQ_INFO_L2)       /* return string */
-		+RAP_SHARENAME_LEN                /* printer name  */
-		+WORDSIZE                         /* info level    */
-		+WORDSIZE                         /* buffer size   */
-		+sizeof(RAP_SMB_PRINT_JOB_L1)];   /* more ret data */
-	char *p;
-	char *rparam = NULL;
-	char *rdata = NULL;
-	unsigned int rprcnt, rdrcnt;
-	int res = -1;
+  char param[WORDSIZE                         /* api number    */
+	    +sizeof(RAP_NetPrintQGetInfo_REQ) /* req string    */
+	    +sizeof(RAP_PRINTQ_INFO_L2)       /* return string */ 
+	    +RAP_SHARENAME_LEN                /* printer name  */
+	    +WORDSIZE                         /* info level    */
+	    +WORDSIZE                         /* buffer size   */
+	    +sizeof(RAP_SMB_PRINT_JOB_L1)];   /* more ret data */
+  char *p;
+  char *rparam = NULL;
+  char *rdata = NULL; 
+  unsigned int rprcnt, rdrcnt;
+  int res = -1;
+  
 
-	memset(param, '\0',sizeof(param));
-	p = make_header(param, RAP_WPrintQGetInfo,
-		RAP_NetPrintQGetInfo_REQ, RAP_PRINTQ_INFO_L2);
-	PUTSTRING(p, printer, RAP_SHARENAME_LEN-1);
-	PUTWORD(p, 2);     /* Info level 2 */
-	PUTWORD(p,0xFFE0); /* Return buffer size */
-	PUTSTRING(p, RAP_SMB_PRINT_JOB_L1, 0);
+  memset(param, '\0',sizeof(param));
+  p = make_header(param, RAP_WPrintQGetInfo,
+		  RAP_NetPrintQGetInfo_REQ, RAP_PRINTQ_INFO_L2);
+  PUTSTRING(p, printer, RAP_SHARENAME_LEN-1);
+  PUTWORD(p, 2);     /* Info level 2 */
+  PUTWORD(p,0xFFE0); /* Return buffer size */
+  PUTSTRING(p, RAP_SMB_PRINT_JOB_L1, 0);
 
-	if (cli_api(cli,
-			param, PTR_DIFF(p,param),1024,
-			NULL, 0, CLI_BUFFER_SIZE,
-			&rparam, &rprcnt,
-			&rdata, &rdrcnt)) {
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam, endp);
-		cli->rap_error = res;
-		if (res != 0) {
-			DEBUG(1,("NetPrintQGetInfo gave error %d\n", res));
-		}
-	}
+  if (cli_api(cli,
+	      param, PTR_DIFF(p,param),1024,
+	      NULL, 0, CLI_BUFFER_SIZE,
+	      &rparam, &rprcnt,
+	      &rdata, &rdrcnt)) {
+    res = GETRES(rparam);
+    cli->rap_error = res;
+    if (res != 0) {
+      DEBUG(1,("NetPrintQGetInfo gave error %d\n", res));
+    }
+  }
 
-	if (!rdata) {
-		DEBUG(4,("NetPrintQGetInfo no data returned\n"));
-		goto out;
-	}
+  if (rdata) {
+    if (res == 0 || res == ERRmoredata) {
+      int rsize, converter;
+      pstring qname, sep_file, print_proc, dest, parms, comment;
+      uint16 jobcount, priority, start_time, until_time, status;
+      
+      p = rparam + WORDSIZE;
+      GETWORD(p, converter);
+      GETWORD(p, rsize);
 
-	if (res == 0 || res == ERRmoredata) {
-		TALLOC_CTX *frame = talloc_stackframe();
-		char *endp = rparam + rprcnt;
-		int rsize = 0, converter = 0;
-		char qname[RAP_SHARENAME_LEN];
-		char *sep_file, *print_proc, *dest, *parms, *comment;
-		uint16_t jobcount = 0, priority = 0;
-		uint16_t start_time = 0, until_time = 0, status = 0;
+      p = rdata;
+      GETSTRINGF(p, qname, RAP_SHARENAME_LEN);
+      p++; /* pad */
+      GETWORD(p, priority);
+      GETWORD(p, start_time);
+      GETWORD(p, until_time);
+      GETSTRINGP(p, sep_file, rdata, converter);
+      GETSTRINGP(p, print_proc, rdata, converter);
+      GETSTRINGP(p, dest, rdata, converter);
+      GETSTRINGP(p, parms, rdata, converter);
+      GETSTRINGP(p, comment, rdata, converter);
+      GETWORD(p, status);
+      GETWORD(p, jobcount);
+      qfn(qname, priority, start_time, until_time, sep_file, print_proc,
+	  dest, parms, comment, status, jobcount);
+      if (jobcount) {
+	int j;
+	for (j=0;(j<jobcount)&&(PTR_DIFF(p,rdata)< rsize);j++) {
+	  uint16 jid, pos, fsstatus;
+	  pstring ownername, notifyname, datatype, jparms, jstatus, jcomment;
+	  unsigned int submitted, jsize;
 
-		p = rparam + WORDSIZE;
-		GETWORD(p, converter, endp);
-		GETWORD(p, rsize, endp);
-
-		p = rdata;
-		endp = rdata + rdrcnt;
-		p += rap_getstringf(p,
-				qname,
-				RAP_SHARENAME_LEN,
-				RAP_SHARENAME_LEN,
-				endp);
-		p++; /* pad */
-		GETWORD(p, priority, endp);
-		GETWORD(p, start_time, endp);
-		GETWORD(p, until_time, endp);
-		p += rap_getstringp(frame,
-				p,
-				&sep_file,
-				rdata,
-				converter,
-				endp);
-		p += rap_getstringp(frame,
-				p,
-				&print_proc,
-				rdata,
-				converter,
-				endp);
-		p += rap_getstringp(frame,
-				p,
-				&dest,
-				rdata,
-				converter,
-				endp);
-		p += rap_getstringp(frame,
-				p,
-				&parms,
-				rdata,
-				converter,
-				endp);
-		p += rap_getstringp(frame,
-				p,
-				&comment,
-				rdata,
-				converter,
-				endp);
-		GETWORD(p, status, endp);
-		GETWORD(p, jobcount, endp);
-
-		if (sep_file && print_proc && dest &&
-				parms && comment) {
-			qfn(qname, priority, start_time, until_time, sep_file, print_proc,
-				dest, parms, comment, status, jobcount);
-		}
-		if (jobcount) {
-			int j;
-			for (j=0;(j<jobcount)&&(PTR_DIFF(p,rdata)< rsize)&&
-					p<endp;j++) {
-				uint16_t jid = 0, pos = 0, fsstatus = 0;
-				char ownername[RAP_USERNAME_LEN];
-				char notifyname[RAP_MACHNAME_LEN];
-				char datatype[RAP_DATATYPE_LEN];
-				char *jparms, *jstatus, *jcomment;
-				unsigned int submitted = 0, jsize = 0;
-
-				GETWORD(p, jid, endp);
-				p += rap_getstringf(p,
-						ownername,
-						RAP_USERNAME_LEN,
-						RAP_USERNAME_LEN,
-						endp);
-				p++; /* pad byte */
-				p += rap_getstringf(p,
-						notifyname,
-						RAP_MACHNAME_LEN,
-						RAP_MACHNAME_LEN,
-						endp);
-				p += rap_getstringf(p,
-						datatype,
-						RAP_DATATYPE_LEN,
-						RAP_DATATYPE_LEN,
-						endp);
-				p += rap_getstringp(frame,
-						p,
-						&jparms,
-						rdata,
-						converter,
-						endp);
-				GETWORD(p, pos,endp);
-				GETWORD(p, fsstatus,endp);
-				p += rap_getstringp(frame,
-						p,
-						&jstatus,
-						rdata,
-						converter,
-						endp);
-				GETDWORD(p, submitted,endp);
-				GETDWORD(p, jsize,endp);
-				p += rap_getstringp(frame,
-						p,
-						&jcomment,
-						rdata,
-						converter,
-						endp);
-
-				if (jparms && jstatus && jcomment) {
-					jfn(jid, ownername, notifyname, datatype, jparms, pos, fsstatus,
-						jstatus, submitted, jsize, jcomment);
-				}
-			}
-		}
-		TALLOC_FREE(frame);
-	} else {
-		DEBUG(4,("NetPrintQGetInfo res=%d\n", res));
+	  GETWORD(p, jid);
+	  GETSTRINGF(p, ownername, RAP_USERNAME_LEN);
+	  p++; /* pad byte */
+	  GETSTRINGF(p, notifyname, RAP_MACHNAME_LEN);
+	  GETSTRINGF(p, datatype, RAP_DATATYPE_LEN);
+	  GETSTRINGP(p, jparms, rdata, converter);
+	  GETWORD(p, pos);
+	  GETWORD(p, fsstatus);
+	  GETSTRINGP(p, jstatus, rdata, converter);
+	  GETDWORD(p, submitted);
+	  GETDWORD(p, jsize);
+	  GETSTRINGP(p, jcomment, rdata, converter);
+	  
+	  jfn(jid, ownername, notifyname, datatype, jparms, pos, fsstatus,
+	      jstatus, submitted, jsize, jcomment);
 	}
+      }
+    } else {
+      DEBUG(4,("NetPrintQGetInfo res=%d\n", res));
+    }
+  } else {
+    DEBUG(4,("NetPrintQGetInfo no data returned\n"));
+  }
+    
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
 
-  out:
-
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-
-	return res;
+  return res;  
 }
 
 /****************************************************************************
- Call a NetServiceEnum - list running services on a different host.
+call a NetServiceEnum - list running services on a different host
 ****************************************************************************/
-
 int cli_RNetServiceEnum(struct cli_state *cli, void (*fn)(const char *, const char *, void *), void *state)
 {
-	char param[WORDSIZE                     /* api number    */
-		+sizeof(RAP_NetServiceEnum_REQ) /* parm string   */
-		+sizeof(RAP_SERVICE_INFO_L2)    /* return string */
-		+WORDSIZE                     /* info level    */
-		+WORDSIZE];                   /* buffer size   */
-	char *p;
-	char *rparam = NULL;
-	char *rdata = NULL;
-	unsigned int rprcnt, rdrcnt;
-	int res = -1;
+  char param[WORDSIZE                     /* api number    */
+	    +sizeof(RAP_NetServiceEnum_REQ) /* parm string   */
+	    +sizeof(RAP_SERVICE_INFO_L2)    /* return string */
+	    +WORDSIZE                     /* info level    */
+	    +WORDSIZE];                   /* buffer size   */
+  char *p;
+  char *rparam = NULL;
+  char *rdata = NULL; 
+  unsigned int rprcnt, rdrcnt;
+  int res = -1;
+  
+  
+  memset(param, '\0', sizeof(param));
+  p = make_header(param, RAP_WServiceEnum,
+		  RAP_NetServiceEnum_REQ, RAP_SERVICE_INFO_L2);
+  PUTWORD(p,2); /* Info level 2 */  
+  PUTWORD(p,0xFFE0); /* Return buffer size */
 
-	memset(param, '\0', sizeof(param));
-	p = make_header(param, RAP_WServiceEnum,
-		RAP_NetServiceEnum_REQ, RAP_SERVICE_INFO_L2);
-	PUTWORD(p,2); /* Info level 2 */
-	PUTWORD(p,0xFFE0); /* Return buffer size */
+  if (cli_api(cli,
+	      param, PTR_DIFF(p,param),8,
+	      NULL, 0, 0xFFE0 /* data area size */,
+	      &rparam, &rprcnt,
+	      &rdata, &rdrcnt)) {
+    res = GETRES(rparam);
+    cli->rap_error = res;
+    if(cli->rap_error == 234) 
+        DEBUG(1,("Not all service names were returned (such as those longer than 15 characters)\n"));
+    else if (cli->rap_error != 0) {
+      DEBUG(1,("NetServiceEnum gave error %d\n", cli->rap_error));
+    }
+  }
 
-	if (cli_api(cli,
-			param, PTR_DIFF(p,param),8,
-			NULL, 0, 0xFFE0 /* data area size */,
-			&rparam, &rprcnt,
-			&rdata, &rdrcnt)) {
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam, endp);
-		cli->rap_error = res;
-		if(cli->rap_error == 234) {
-			DEBUG(1,("Not all service names were returned (such as those longer than 15 characters)\n"));
-		} else if (cli->rap_error != 0) {
-			DEBUG(1,("NetServiceEnum gave error %d\n", cli->rap_error));
-		}
-	}
+  if (rdata) {
+    if (res == 0 || res == ERRmoredata) {
+      int i, count;
 
-	if (!rdata) {
-		DEBUG(4,("NetServiceEnum no data returned\n"));
-		goto out;
-	}
+      p = rparam + WORDSIZE + WORDSIZE; /* skip result and converter */
+      GETWORD(p, count);
 
-	if (res == 0 || res == ERRmoredata) {
-		char *endp = rparam + rprcnt;
-		int i, count = 0;
+      for (i=0,p=rdata;i<count;i++) {
+	    pstring comment;
+	    char servicename[RAP_SRVCNAME_LEN];
 
-		p = rparam + WORDSIZE + WORDSIZE; /* skip result and converter */
-		GETWORD(p, count,endp);
+	    GETSTRINGF(p, servicename, RAP_SRVCNAME_LEN);
+	    p+=8; /* pass status words */
+	    GETSTRINGF(p, comment, RAP_SRVCCMNT_LEN);
 
-		endp = rdata + rdrcnt;
-		for (i=0,p=rdata;i<count && p < endp;i++) {
-			char comment[RAP_SRVCCMNT_LEN];
-			char servicename[RAP_SRVCNAME_LEN];
+	    fn(servicename, comment, cli);  /* BB add status too */
+      }	
+    } else {
+      DEBUG(4,("NetServiceEnum res=%d\n", res));
+    }
+  } else {
+    DEBUG(4,("NetServiceEnum no data returned\n"));
+  }
+    
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
 
-			p += rap_getstringf(p,
-					servicename,
-					RAP_SRVCNAME_LEN,
-					RAP_SRVCNAME_LEN,
-					endp);
-			p+=8; /* pass status words */
-			p += rap_getstringf(p,
-					comment,
-					RAP_SRVCCMNT_LEN,
-					RAP_SRVCCMNT_LEN,
-					endp);
-
-			if (servicename[0]) {
-				fn(servicename, comment, cli);  /* BB add status too */
-			}
-		}
-	} else {
-		DEBUG(4,("NetServiceEnum res=%d\n", res));
-	}
-
-  out:
-
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-
-	return res;
+  return res;
 }
 
+
 /****************************************************************************
- Call a NetSessionEnum - list workstations with sessions to an SMB server.
+call a NetSessionEnum - list workstations with sessions to an SMB server
 ****************************************************************************/
-
 int cli_NetSessionEnum(struct cli_state *cli, void (*fn)(char *, char *, uint16, uint16, uint16, uint, uint, uint, char *))
 {
-	char param[WORDSIZE                       /* api number    */
-		+sizeof(RAP_NetSessionEnum_REQ) /* parm string   */
-		+sizeof(RAP_SESSION_INFO_L2)    /* return string */
-		+WORDSIZE                       /* info level    */
-		+WORDSIZE];                     /* buffer size   */
-	char *p;
-	char *rparam = NULL;
-	char *rdata = NULL;
-	unsigned int rprcnt, rdrcnt;
-	int res = -1;
+  char param[WORDSIZE                       /* api number    */
+	    +sizeof(RAP_NetSessionEnum_REQ) /* parm string   */
+	    +sizeof(RAP_SESSION_INFO_L2)    /* return string */
+	    +WORDSIZE                       /* info level    */
+	    +WORDSIZE];                     /* buffer size   */
+  char *p;
+  char *rparam = NULL;
+  char *rdata = NULL; 
+  unsigned int rprcnt, rdrcnt;
+  int res = -1;
+  
+  memset(param, '\0', sizeof(param));
+  p = make_header(param, RAP_WsessionEnum, 
+		  RAP_NetSessionEnum_REQ, RAP_SESSION_INFO_L2);
+  PUTWORD(p,2);    /* Info level 2 */
+  PUTWORD(p,0xFF); /* Return buffer size */
 
-	memset(param, '\0', sizeof(param));
-	p = make_header(param, RAP_WsessionEnum,
-			RAP_NetSessionEnum_REQ, RAP_SESSION_INFO_L2);
-	PUTWORD(p,2);    /* Info level 2 */
-	PUTWORD(p,0xFF); /* Return buffer size */
+  if (cli_api(cli,
+	      param, PTR_DIFF(p,param),8,
+	      NULL, 0, CLI_BUFFER_SIZE,
+	      &rparam, &rprcnt,
+	      &rdata, &rdrcnt)) {
+    res = GETRES(rparam);
+    cli->rap_error = res;
+    if (res != 0) {
+      DEBUG(1,("NetSessionEnum gave error %d\n", res));
+    }
+  }
 
-	if (cli_api(cli,
-			param, PTR_DIFF(p,param),8,
-			NULL, 0, CLI_BUFFER_SIZE,
-			&rparam, &rprcnt,
-			&rdata, &rdrcnt)) {
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam, endp);
-		cli->rap_error = res;
-		if (res != 0) {
-			DEBUG(1,("NetSessionEnum gave error %d\n", res));
-		}
-	}
+  if (rdata) {
+    if (res == 0 || res == ERRmoredata) {
+      int i, converter, count;
+      
+      p = rparam + WORDSIZE;
+      GETWORD(p, converter);
+      GETWORD(p, count);
 
-	if (!rdata) {
-		DEBUG(4,("NetSesssionEnum no data returned\n"));
-		goto out;
-	}
+      for (i=0,p=rdata;i<count;i++) {
+	pstring wsname, username, clitype_name;
+	uint16  num_conns, num_opens, num_users;
+	unsigned int    sess_time, idle_time, user_flags;
 
-	if (res == 0 || res == ERRmoredata) {
-		TALLOC_CTX *frame = talloc_stackframe();
-		char *endp = rparam + rprcnt;
-		int i, converter = 0, count = 0;
+	GETSTRINGP(p, wsname, rdata, converter);
+	GETSTRINGP(p, username, rdata, converter);
+	GETWORD(p, num_conns);
+	GETWORD(p, num_opens);
+	GETWORD(p, num_users);
+	GETDWORD(p, sess_time);
+	GETDWORD(p, idle_time);
+	GETDWORD(p, user_flags);
+	GETSTRINGP(p, clitype_name, rdata, converter);
 
-		p = rparam + WORDSIZE;
-		GETWORD(p, converter, endp);
-		GETWORD(p, count, endp);
+	fn(wsname, username, num_conns, num_opens, num_users, sess_time,
+	   idle_time, user_flags, clitype_name);
+      }
+	
+    } else {
+      DEBUG(4,("NetSessionEnum res=%d\n", res));
+    }
+  } else {
+    DEBUG(4,("NetSesssionEnum no data returned\n"));
+  }
+    
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
 
-		endp = rdata + rdrcnt;
-		for (i=0,p=rdata;i<count && p < endp;i++) {
-			char *wsname, *username, *clitype_name;
-			uint16_t num_conns = 0, num_opens = 0, num_users = 0;
-			unsigned int sess_time = 0, idle_time = 0, user_flags = 0;
-
-			p += rap_getstringp(frame,
-					p,
-					&wsname,
-					rdata,
-					converter,
-					endp);
-			p += rap_getstringp(frame,
-					p,
-					&username,
-					rdata,
-					converter,
-					endp);
-			GETWORD(p, num_conns, endp);
-			GETWORD(p, num_opens, endp);
-			GETWORD(p, num_users, endp);
-			GETDWORD(p, sess_time, endp);
-			GETDWORD(p, idle_time, endp);
-			GETDWORD(p, user_flags, endp);
-			p += rap_getstringp(frame,
-					p,
-					&clitype_name,
-					rdata,
-					converter,
-					endp);
-
-			if (wsname && username && clitype_name) {
-				fn(wsname, username, num_conns, num_opens, num_users, sess_time,
-					idle_time, user_flags, clitype_name);
-			}
-		}
-		TALLOC_FREE(frame);
-	} else {
-		DEBUG(4,("NetSessionEnum res=%d\n", res));
-	}
-
-  out:
-
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-
-	return res;
+  return res;
 }
 
 /****************************************************************************
  Call a NetSessionGetInfo - get information about other session to an SMB server.
 ****************************************************************************/
 
-int cli_NetSessionGetInfo(struct cli_state *cli, const char *workstation,
-		void (*fn)(const char *, const char *, uint16, uint16, uint16, uint, uint, uint, const char *))
+int cli_NetSessionGetInfo(struct cli_state *cli, const char *workstation, void (*fn)(const char *, const char *, uint16, uint16, uint16, uint, uint, uint, const char *))
 {
-	char param[WORDSIZE                          /* api number    */
-		+sizeof(RAP_NetSessionGetInfo_REQ) /* req string    */
-		+sizeof(RAP_SESSION_INFO_L2)       /* return string */
-		+RAP_MACHNAME_LEN                  /* wksta name    */
-		+WORDSIZE                          /* info level    */
-		+WORDSIZE];                        /* buffer size   */
-	char *p;
-	char *rparam = NULL;
-	char *rdata = NULL;
-	unsigned int rprcnt, rdrcnt;
-	char *endp;
-	int res = -1;
+  char param[WORDSIZE                          /* api number    */
+	    +sizeof(RAP_NetSessionGetInfo_REQ) /* req string    */
+	    +sizeof(RAP_SESSION_INFO_L2)       /* return string */ 
+	    +RAP_MACHNAME_LEN                  /* wksta name    */
+	    +WORDSIZE                          /* info level    */
+	    +WORDSIZE];                        /* buffer size   */
+  char *p;
+  char *rparam = NULL;
+  char *rdata = NULL; 
+  unsigned int rprcnt, rdrcnt;
+  int res = -1;
+  
 
-	memset(param, '\0', sizeof(param));
-	p = make_header(param, RAP_WsessionGetInfo,
-			RAP_NetSessionGetInfo_REQ, RAP_SESSION_INFO_L2);
-	PUTSTRING(p, workstation, RAP_MACHNAME_LEN-1);
-	PUTWORD(p,2); /* Info level 2 */
-	PUTWORD(p,0xFF); /* Return buffer size */
+  memset(param, '\0', sizeof(param));
+  p = make_header(param, RAP_WsessionGetInfo, 
+		  RAP_NetSessionGetInfo_REQ, RAP_SESSION_INFO_L2);
+  PUTSTRING(p, workstation, RAP_MACHNAME_LEN-1);
+  PUTWORD(p,2); /* Info level 2 */
+  PUTWORD(p,0xFF); /* Return buffer size */
 
-	if (cli_api(cli,
-			param, PTR_DIFF(p,param),PTR_DIFF(p,param),
-			NULL, 0, CLI_BUFFER_SIZE,
-			&rparam, &rprcnt,
-			&rdata, &rdrcnt)) {
-		endp = rparam + rprcnt;
-		res = GETRES(rparam, endp);
-		cli->rap_error = res;
-		if (cli->rap_error != 0) {
-			DEBUG(1,("NetSessionGetInfo gave error %d\n", cli->rap_error));
-		}
-	}
+  if (cli_api(cli,
+	      param, PTR_DIFF(p,param),PTR_DIFF(p,param),
+	      NULL, 0, CLI_BUFFER_SIZE,
+	      &rparam, &rprcnt,
+	      &rdata, &rdrcnt)) {
+    cli->rap_error = SVAL(rparam,0);
+    if (cli->rap_error != 0) {
+      DEBUG(1,("NetSessionGetInfo gave error %d\n", cli->rap_error));
+    }
+  }
 
-	if (!rdata) {
-		DEBUG(4,("NetSessionGetInfo no data returned\n"));
-		goto out;
-	}
+  if (rdata) {
+    res = GETRES(rparam);
+    
+    if (res == 0 || res == ERRmoredata) {
+      int converter;
+      pstring wsname, username, clitype_name;
+      uint16  num_conns, num_opens, num_users;
+      unsigned int    sess_time, idle_time, user_flags;
 
-	endp = rparam + rprcnt;
-	res = GETRES(rparam, endp);
+      p = rparam + WORDSIZE;
+      GETWORD(p, converter);
+      p += WORDSIZE;            /* skip rsize */
 
-	if (res == 0 || res == ERRmoredata) {
-		TALLOC_CTX *frame = talloc_stackframe();
-		int converter = 0;
-		char *wsname, *username, *clitype_name;
-		uint16_t num_conns = 0, num_opens = 0, num_users = 0;
-		unsigned int sess_time = 0, idle_time = 0, user_flags = 0;
+      p = rdata;
+      GETSTRINGP(p, wsname, rdata, converter);
+      GETSTRINGP(p, username, rdata, converter);
+      GETWORD(p, num_conns);
+      GETWORD(p, num_opens);
+      GETWORD(p, num_users);
+      GETDWORD(p, sess_time);
+      GETDWORD(p, idle_time);
+      GETDWORD(p, user_flags);
+      GETSTRINGP(p, clitype_name, rdata, converter);
+      
+      fn(wsname, username, num_conns, num_opens, num_users, sess_time,
+	 idle_time, user_flags, clitype_name);
+    } else {
+      DEBUG(4,("NetSessionGetInfo res=%d\n", res));
+    }
+  } else {
+    DEBUG(4,("NetSessionGetInfo no data returned\n"));
+  }
+    
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
 
-		p = rparam + WORDSIZE;
-		GETWORD(p, converter,endp);
-		p += WORDSIZE;            /* skip rsize */
-
-		p = rdata;
-		endp = rdata + rdrcnt;
-		p += rap_getstringp(frame,
-				p,
-				&wsname,
-				rdata,
-				converter,
-				endp);
-		p += rap_getstringp(frame,
-				p,
-				&username,
-				rdata,
-				converter,
-				endp);
-		GETWORD(p, num_conns, endp);
-		GETWORD(p, num_opens, endp);
-		GETWORD(p, num_users, endp);
-		GETDWORD(p, sess_time, endp);
-		GETDWORD(p, idle_time, endp);
-		GETDWORD(p, user_flags, endp);
-		p += rap_getstringp(frame,
-				p,
-				&clitype_name,
-				rdata,
-				converter,
-				endp);
-
-		if (wsname && username && clitype_name) {
-			fn(wsname, username, num_conns, num_opens, num_users, sess_time,
-				idle_time, user_flags, clitype_name);
-		}
-		TALLOC_FREE(frame);
-	} else {
-		DEBUG(4,("NetSessionGetInfo res=%d\n", res));
-	}
-
-  out:
-
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-
-	return res;
+  return res;  
 }
 
 /****************************************************************************
- Call a NetSessionDel - close a session to an SMB server.
+call a NetSessionDel - close a session to an SMB server
 ****************************************************************************/
-
 int cli_NetSessionDel(struct cli_state *cli, const char *workstation)
 {
-	char param[WORDSIZE                      /* api number       */
-		+sizeof(RAP_NetSessionDel_REQ) /* req string       */
-		+1                             /* no return string */
-		+RAP_MACHNAME_LEN              /* workstation name */
-		+WORDSIZE];                    /* reserved (0)     */
-	char *p;
-	char *rparam = NULL;
-	char *rdata = NULL;
-	unsigned int rprcnt, rdrcnt;
-	int res = -1;
+  char param[WORDSIZE                      /* api number       */
+	    +sizeof(RAP_NetSessionDel_REQ) /* req string       */
+	    +1                             /* no return string */
+	    +RAP_MACHNAME_LEN              /* workstation name */
+	    +WORDSIZE];                    /* reserved (0)     */
+  char *p;
+  char *rparam = NULL;
+  char *rdata = NULL;
+  unsigned int rprcnt, rdrcnt;
+  int res;
 
-	memset(param, '\0', sizeof(param));
-	p = make_header(param, RAP_WsessionDel, RAP_NetSessionDel_REQ, NULL);
-	PUTSTRING(p, workstation, RAP_MACHNAME_LEN-1);
-	PUTWORD(p,0); /* reserved word of 0 */
+  memset(param, '\0', sizeof(param));
+  p = make_header(param, RAP_WsessionDel, RAP_NetSessionDel_REQ, NULL);
+  PUTSTRING(p, workstation, RAP_MACHNAME_LEN-1);
+  PUTWORD(p,0); /* reserved word of 0 */
+  if (cli_api(cli, 
+	      param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */
+	      NULL, 0, 200,       /* data, length, maxlen */
+	      &rparam, &rprcnt,   /* return params, length */
+	      &rdata, &rdrcnt))   /* return data, length */
+    {
+      res = GETRES(rparam);
+      cli->rap_error = res;
+      
+      if (res == 0) {
+	/* nothing to do */		
+      }
+      else {
+	DEBUG(4,("NetFileClose2 res=%d\n", res));
+      }      
+    } else {
+      res = -1;
+      DEBUG(4,("NetFileClose2 failed\n"));
+    }
+  
+  SAFE_FREE(rparam);
+  SAFE_FREE(rdata);
 
-	if (cli_api(cli,
-			param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */
-			NULL, 0, 200,       /* data, length, maxlen */
-			&rparam, &rprcnt,   /* return params, length */
-			&rdata, &rdrcnt))   /* return data, length */
-	{
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam, endp);
-		cli->rap_error = res;
-
-		if (res == 0) {
-			/* nothing to do */
-		} else {
-			DEBUG(4,("NetFileClose2 res=%d\n", res));
-		}
-	} else {
-		res = -1;
-		DEBUG(4,("NetFileClose2 failed\n"));
-	}
-
-	SAFE_FREE(rparam);
-	SAFE_FREE(rdata);
-
-	return res;
+  return res;
 }
+  
 
-int cli_NetConnectionEnum(struct cli_state *cli, const char *qualifier,
-			void (*fn)(uint16_t conid, uint16_t contype,
-				uint16_t numopens, uint16_t numusers,
-				uint32_t contime, const char *username,
-				const char *netname))
+int cli_NetConnectionEnum(struct cli_state *cli, const char *qualifier, void (*fn)(uint16 conid, uint16 contype, uint16 numopens, uint16 numusers, uint32 contime, const char *username, const char *netname))
 {
-	char param[WORDSIZE                          /* api number    */
-		+sizeof(RAP_NetConnectionEnum_REQ) /* req string    */
-		+sizeof(RAP_CONNECTION_INFO_L1)    /* return string */
-		+RAP_MACHNAME_LEN                  /* wksta name    */
-		+WORDSIZE                          /* info level    */
-		+WORDSIZE];                        /* buffer size   */
-	char *p;
-	char *rparam = NULL;
-	char *rdata = NULL;
-	unsigned int rprcnt, rdrcnt;
-	int res = -1;
+  char param[WORDSIZE                          /* api number    */
+	    +sizeof(RAP_NetConnectionEnum_REQ) /* req string    */
+	    +sizeof(RAP_CONNECTION_INFO_L1)    /* return string */ 
+	    +RAP_MACHNAME_LEN                  /* wksta name    */
+	    +WORDSIZE                          /* info level    */
+	    +WORDSIZE];                        /* buffer size   */
+  char *p;
+  char *rparam = NULL;
+  char *rdata = NULL; 
+  unsigned int rprcnt, rdrcnt;
+  int res = -1;
 
-	memset(param, '\0', sizeof(param));
-	p = make_header(param, RAP_WconnectionEnum,
-		RAP_NetConnectionEnum_REQ, RAP_CONNECTION_INFO_L1);
-	PUTSTRING(p, qualifier, RAP_MACHNAME_LEN-1);/* Workstation name */
-	PUTWORD(p,1);            /* Info level 1 */
-	PUTWORD(p,0xFFE0);       /* Return buffer size */
+  memset(param, '\0', sizeof(param));
+  p = make_header(param, RAP_WconnectionEnum,
+		  RAP_NetConnectionEnum_REQ, RAP_CONNECTION_INFO_L1);
+  PUTSTRING(p, qualifier, RAP_MACHNAME_LEN-1);/* Workstation name */
+  PUTWORD(p,1);            /* Info level 1 */
+  PUTWORD(p,0xFFE0);       /* Return buffer size */
 
-	if (cli_api(cli,
-			param, PTR_DIFF(p,param),PTR_DIFF(p,param),
-			NULL, 0, CLI_BUFFER_SIZE,
-			&rparam, &rprcnt,
-			&rdata, &rdrcnt)) {
-		char *endp = rparam + rprcnt;
-		res = GETRES(rparam, endp);
-		cli->rap_error = res;
-		if (res != 0) {
-			DEBUG(1,("NetConnectionEnum gave error %d\n", res));
-		}
-	}
+  if (cli_api(cli,
+	      param, PTR_DIFF(p,param),PTR_DIFF(p,param),
+	      NULL, 0, CLI_BUFFER_SIZE,
+	      &rparam, &rprcnt,
+	      &rdata, &rdrcnt)) {
+    res = GETRES(rparam);
+    cli->rap_error = res;
+    if (res != 0) {
+      DEBUG(1,("NetConnectionEnum gave error %d\n", res));
+    }
+  }
+  if (rdata) {
+    if (res == 0 || res == ERRmoredata) {
+      int i, converter, count;
 
-	if (!rdata) {
-		DEBUG(4,("NetConnectionEnum no data returned\n"));
-		goto out;
-	}
+      p = rparam + WORDSIZE;
+      GETWORD(p, converter);
+      GETWORD(p, count);
 
-	if (res == 0 || res == ERRmoredata) {
-		TALLOC_CTX *frame = talloc_stackframe();
-		char *endp = rparam + rprcnt;
-		int i, converter = 0, count = 0;
+      for (i=0,p=rdata;i<count;i++) {
+	pstring netname, username;
+	uint16  conn_id, conn_type, num_opens, num_users;
+	unsigned int    conn_time;
 
-		p = rparam + WORDSIZE;
-		GETWORD(p, converter, endp);
-		GETWORD(p, count, endp);
+	GETWORD(p,conn_id);
+	GETWORD(p,conn_type);
+	GETWORD(p,num_opens);
+	GETWORD(p,num_users);
+	GETDWORD(p,conn_time);
+	GETSTRINGP(p, username, rdata, converter);
+	GETSTRINGP(p, netname, rdata, converter);
 
-		endp = rdata + rdrcnt;
-		for (i=0,p=rdata;i<count && p < endp;i++) {
-			char *netname, *username;
-			uint16_t conn_id = 0, conn_type = 0, num_opens = 0, num_users = 0;
-			unsigned int conn_time = 0;
-
-			GETWORD(p,conn_id, endp);
-			GETWORD(p,conn_type, endp);
-			GETWORD(p,num_opens, endp);
-			GETWORD(p,num_users, endp);
-			GETDWORD(p,conn_time, endp);
-			p += rap_getstringp(frame,
-					p,
-					&username,
-					rdata,
-					converter,
-					endp);
-			p += rap_getstringp(frame,
-					p,
-					&netname,
-					rdata,
-					converter,
-					endp);
-
-			if (username && netname) {
-				fn(conn_id, conn_type, num_opens, num_users, conn_time,
-					username, netname);
-			}
-		}
-		TALLOC_FREE(frame);
-	} else {
-		DEBUG(4,("NetConnectionEnum res=%d\n", res));
-	}
-
-  out:
-
-	SAFE_FREE(rdata);
-	SAFE_FREE(rparam);
-	return res;
+	fn(conn_id, conn_type, num_opens, num_users, conn_time,
+	   username, netname);
+      }
+	
+    } else {
+      DEBUG(4,("NetConnectionEnum res=%d\n", res));
+    }
+  } else {
+    DEBUG(4,("NetConnectionEnum no data returned\n"));
+  }
+  SAFE_FREE(rdata);
+  SAFE_FREE(rparam);
+  return res;
 }

Modified: branches/samba/upstream/source/libsmb/clireadwrite.c
===================================================================
--- branches/samba/upstream/source/libsmb/clireadwrite.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/clireadwrite.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,495 +1,270 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    client file read/write routines
    Copyright (C) Andrew Tridgell 1994-1998
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
 /****************************************************************************
-  Calculate the recommended read buffer size
+Issue a single SMBread and don't wait for a reply.
 ****************************************************************************/
-static size_t cli_read_max_bufsize(struct cli_state *cli)
-{
-	if (!client_is_signing_on(cli) && !cli_encryption_on(cli)
-	    && (cli->posix_capabilities & CIFS_UNIX_LARGE_READ_CAP)) {
-		return CLI_SAMBA_MAX_POSIX_LARGE_READX_SIZE;
-	}
-	if (cli->capabilities & CAP_LARGE_READX) {
-		return cli->is_samba
-			? CLI_SAMBA_MAX_LARGE_READX_SIZE
-			: CLI_WINDOWS_MAX_LARGE_READX_SIZE;
-	}
-	return (cli->max_xmit - (smb_size+32)) & ~1023;
-}
 
-/*
- * Send a read&x request
- */
-
-struct async_req *cli_read_andx_send(TALLOC_CTX *mem_ctx,
-				     struct cli_state *cli, int fnum,
-				     off_t offset, size_t size)
+static BOOL cli_issue_read(struct cli_state *cli, int fnum, off_t offset, 
+			   size_t size, int i)
 {
-	struct async_req *result;
-	struct cli_request *req;
-	bool bigoffset = False;
-	char *enc_buf;
+	BOOL bigoffset = False;
 
-	if (size > cli_read_max_bufsize(cli)) {
-		DEBUG(0, ("cli_read_andx_send got size=%d, can only handle "
-			  "size=%d\n", (int)size,
-			  (int)cli_read_max_bufsize(cli)));
-		return NULL;
-	}
+	memset(cli->outbuf,'\0',smb_size);
+	memset(cli->inbuf,'\0',smb_size);
 
-	result = cli_request_new(mem_ctx, cli->event_ctx, cli, 12, 0, &req);
-	if (result == NULL) {
-		DEBUG(0, ("cli_request_new failed\n"));
-		return NULL;
-	}
-
-	req = cli_request_get(result);
-
-	req->data.read.ofs = offset;
-	req->data.read.size = size;
-	req->data.read.received = 0;
-	req->data.read.rcvbuf = NULL;
-
-	if ((SMB_BIG_UINT)offset >> 32)
+	if ((SMB_BIG_UINT)offset >> 32) 
 		bigoffset = True;
 
-	cli_set_message(req->outbuf, bigoffset ? 12 : 10, 0, False);
+	set_message(cli->outbuf,bigoffset ? 12 : 10,0,True);
+		
+	SCVAL(cli->outbuf,smb_com,SMBreadX);
+	SSVAL(cli->outbuf,smb_tid,cli->cnum);
+	cli_setup_packet(cli);
 
-	SCVAL(req->outbuf,smb_com,SMBreadX);
-	SSVAL(req->outbuf,smb_tid,cli->cnum);
-	cli_setup_packet_buf(cli, req->outbuf);
+	SCVAL(cli->outbuf,smb_vwv0,0xFF);
+	SSVAL(cli->outbuf,smb_vwv2,fnum);
+	SIVAL(cli->outbuf,smb_vwv3,offset);
+	SSVAL(cli->outbuf,smb_vwv5,size);
+	SSVAL(cli->outbuf,smb_vwv6,size);
+	SSVAL(cli->outbuf,smb_vwv7,((size >> 16) & 1));
+	SSVAL(cli->outbuf,smb_mid,cli->mid + i);
 
-	SCVAL(req->outbuf,smb_vwv0,0xFF);
-	SCVAL(req->outbuf,smb_vwv0+1,0);
-	SSVAL(req->outbuf,smb_vwv1,0);
-	SSVAL(req->outbuf,smb_vwv2,fnum);
-	SIVAL(req->outbuf,smb_vwv3,offset);
-	SSVAL(req->outbuf,smb_vwv5,size);
-	SSVAL(req->outbuf,smb_vwv6,size);
-	SSVAL(req->outbuf,smb_vwv7,(size >> 16));
-	SSVAL(req->outbuf,smb_vwv8,0);
-	SSVAL(req->outbuf,smb_vwv9,0);
-	SSVAL(req->outbuf,smb_mid,req->mid);
-
 	if (bigoffset) {
-		SIVAL(req->outbuf, smb_vwv10,
-		      (((SMB_BIG_UINT)offset)>>32) & 0xffffffff);
+		SIVAL(cli->outbuf,smb_vwv10,(((SMB_BIG_UINT)offset)>>32) & 0xffffffff);
 	}
 
-	cli_calculate_sign_mac(cli, req->outbuf);
-
-	event_fd_set_writeable(cli->fd_event);
-
-	if (cli_encryption_on(cli)) {
-		NTSTATUS status;
-		status = cli_encrypt_message(cli, req->outbuf, &enc_buf);
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(0, ("Error in encrypting client message. "
-				  "Error %s\n",	nt_errstr(status)));
-			TALLOC_FREE(req);
-			return NULL;
-		}
-		req->outbuf = enc_buf;
-		req->enc_state = cli->trans_enc_state;
-	}
-
-	return result;
+	return cli_send_smb(cli);
 }
 
-/*
- * Pull the data out of a finished async read_and_x request. rcvbuf is
- * talloced from the request, so better make sure that you copy it away before
- * you talloc_free(req). "rcvbuf" is NOT a talloc_ctx of its own, so do not
- * talloc_move it!
- */
+/****************************************************************************
+  Read size bytes at offset offset using SMBreadX.
+****************************************************************************/
 
-NTSTATUS cli_read_andx_recv(struct async_req *req, ssize_t *received,
-			    uint8_t **rcvbuf)
+ssize_t cli_read(struct cli_state *cli, int fnum, char *buf, off_t offset, size_t size)
 {
-	struct cli_request *cli_req = cli_request_get(req);
-	NTSTATUS status;
-	size_t size;
+	char *p;
+	int size2;
+	int readsize;
+	ssize_t total = 0;
 
-	SMB_ASSERT(req->state >= ASYNC_REQ_DONE);
-	if (req->state == ASYNC_REQ_ERROR) {
-		return req->status;
-	}
+	if (size == 0) 
+		return 0;
 
-	status = cli_pull_error(cli_req->inbuf);
+	/*
+	 * Set readsize to the maximum size we can handle in one readX,
+	 * rounded down to a multiple of 1024.
+	 */
 
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
+	if (cli->capabilities & CAP_LARGE_READX) {
+		if (cli->is_samba) {
+			readsize = CLI_SAMBA_MAX_LARGE_READX_SIZE;
+		} else {
+			readsize = CLI_WINDOWS_MAX_LARGE_READX_SIZE;
+		}
+	} else {
+		readsize = (cli->max_xmit - (smb_size+32)) & ~1023;
 	}
 
-	/* size is the number of bytes the server returned.
-	 * Might be zero. */
-	size = SVAL(cli_req->inbuf, smb_vwv5);
-	size |= (((unsigned int)(SVAL(cli_req->inbuf, smb_vwv7))) << 16);
+	while (total < size) {
+		readsize = MIN(readsize, size-total);
 
-	if (size > cli_req->data.read.size) {
-		DEBUG(5,("server returned more than we wanted!\n"));
-		return NT_STATUS_UNEXPECTED_IO_ERROR;
-	}
+		/* Issue a read and receive a reply */
 
-	*rcvbuf = (uint8_t *)
-		(smb_base(cli_req->inbuf) + SVAL(cli_req->inbuf, smb_vwv6));
-	*received = size;
-	return NT_STATUS_OK;
-}
+		if (!cli_issue_read(cli, fnum, offset, readsize, 0))
+			return -1;
 
-/*
- * Parallel read support.
- *
- * cli_pull sends as many read&x requests as the server would allow via
- * max_mux at a time. When replies flow back in, the data is written into
- * the callback function "sink" in the right order.
- */
+		if (!cli_receive_smb(cli))
+			return -1;
 
-struct cli_pull_state {
-	struct async_req *req;
+		/* Check for error.  Make sure to check for DOS and NT
+                   errors. */
 
-	struct cli_state *cli;
-	uint16_t fnum;
-	off_t start_offset;
-	SMB_OFF_T size;
+                if (cli_is_error(cli)) {
+			BOOL recoverable_error = False;
+                        NTSTATUS status = NT_STATUS_OK;
+                        uint8 eclass = 0;
+			uint32 ecode = 0;
 
-	NTSTATUS (*sink)(char *buf, size_t n, void *priv);
-	void *priv;
+                        if (cli_is_nt_error(cli))
+                                status = cli_nt_error(cli);
+                        else
+                                cli_dos_error(cli, &eclass, &ecode);
 
-	size_t chunk_size;
+			/*
+			 * ERRDOS ERRmoredata or STATUS_MORE_ENRTIES is a
+			 * recoverable error, plus we have valid data in the
+			 * packet so don't error out here.
+			 */
 
-	/*
-	 * Outstanding requests
-	 */
-	int num_reqs;
-	struct async_req **reqs;
+                        if ((eclass == ERRDOS && ecode == ERRmoredata) ||
+                            NT_STATUS_V(status) == NT_STATUS_V(STATUS_MORE_ENTRIES))
+				recoverable_error = True;
 
-	/*
-	 * For how many bytes did we send requests already?
-	 */
-	SMB_OFF_T requested;
+			if (!recoverable_error)
+                                return -1;
+		}
 
-	/*
-	 * Next request index to push into "sink". This walks around the "req"
-	 * array, taking care that the requests are pushed to "sink" in the
-	 * right order. If necessary (i.e. replies don't come in in the right
-	 * order), replies are held back in "reqs".
-	 */
-	int top_req;
+		size2 = SVAL(cli->inbuf, smb_vwv5);
+		size2 |= (((unsigned int)(SVAL(cli->inbuf, smb_vwv7) & 1)) << 16);
 
-	/*
-	 * How many bytes did we push into "sink"?
-	 */
+		if (size2 > readsize) {
+			DEBUG(5,("server returned more than we wanted!\n"));
+			return -1;
+		} else if (size2 < 0) {
+			DEBUG(5,("read return < 0!\n"));
+			return -1;
+		}
 
-	SMB_OFF_T pushed;
-};
+		/* Copy data into buffer */
 
-static char *cli_pull_print(TALLOC_CTX *mem_ctx, struct async_req *req)
-{
-	struct cli_pull_state *state = talloc_get_type_abort(
-		req->private_data, struct cli_pull_state);
-	char *result;
+		p = smb_base(cli->inbuf) + SVAL(cli->inbuf,smb_vwv6);
+		memcpy(buf + total, p, size2);
 
-	result = async_req_print(mem_ctx, req);
-	if (result == NULL) {
-		return NULL;
-	}
+		total += size2;
+		offset += size2;
 
-	return talloc_asprintf_append_buffer(
-		result, "num_reqs=%d, top_req=%d",
-		state->num_reqs, state->top_req);
-}
+		/*
+		 * If the server returned less than we asked for we're at EOF.
+		 */
 
-static void cli_pull_read_done(struct async_req *read_req);
-
-/*
- * Prepare an async pull request
- */
-
-struct async_req *cli_pull_send(TALLOC_CTX *mem_ctx, struct cli_state *cli,
-				uint16_t fnum, off_t start_offset,
-				SMB_OFF_T size, size_t window_size,
-				NTSTATUS (*sink)(char *buf, size_t n,
-						 void *priv),
-				void *priv)
-{
-	struct async_req *result;
-	struct cli_pull_state *state;
-	int i;
-
-	result = async_req_new(mem_ctx, cli->event_ctx);
-	if (result == NULL) {
-		goto failed;
+		if (size2 < readsize)
+			break;
 	}
-	state = talloc(result, struct cli_pull_state);
-	if (state == NULL) {
-		goto failed;
-	}
-	result->private_data = state;
-	result->print = cli_pull_print;
-	state->req = result;
 
-	state->cli = cli;
-	state->fnum = fnum;
-	state->start_offset = start_offset;
-	state->size = size;
-	state->sink = sink;
-	state->priv = priv;
+	return total;
+}
 
-	state->pushed = 0;
-	state->top_req = 0;
+#if 0  /* relies on client_receive_smb(), now a static in libsmb/clientgen.c */
 
-	if (size == 0) {
-		if (!async_post_status(result, NT_STATUS_OK)) {
-			goto failed;
-		}
-		return result;
-	}
+/* This call is INCOMPATIBLE with SMB signing.  If you remove the #if 0
+   you must fix ensure you don't attempt to sign the packets - data
+   *will* be currupted */
 
-	state->chunk_size = cli_read_max_bufsize(cli);
+/****************************************************************************
+Issue a single SMBreadraw and don't wait for a reply.
+****************************************************************************/
 
-	state->num_reqs = MAX(window_size/state->chunk_size, 1);
-	state->num_reqs = MIN(state->num_reqs, cli->max_mux);
+static BOOL cli_issue_readraw(struct cli_state *cli, int fnum, off_t offset, 
+			   size_t size, int i)
+{
 
-	state->reqs = TALLOC_ZERO_ARRAY(state, struct async_req *,
-					state->num_reqs);
-	if (state->reqs == NULL) {
-		goto failed;
+	if (!cli->sign_info.use_smb_signing) {
+		DEBUG(0, ("Cannot use readraw and SMB Signing\n"));
+		return False;
 	}
+	
+	memset(cli->outbuf,'\0',smb_size);
+	memset(cli->inbuf,'\0',smb_size);
 
-	state->requested = 0;
+	set_message(cli->outbuf,10,0,True);
+		
+	SCVAL(cli->outbuf,smb_com,SMBreadbraw);
+	SSVAL(cli->outbuf,smb_tid,cli->cnum);
+	cli_setup_packet(cli);
 
-	for (i=0; i<state->num_reqs; i++) {
-		SMB_OFF_T size_left;
-		size_t request_thistime;
+	SSVAL(cli->outbuf,smb_vwv0,fnum);
+	SIVAL(cli->outbuf,smb_vwv1,offset);
+	SSVAL(cli->outbuf,smb_vwv2,size);
+	SSVAL(cli->outbuf,smb_vwv3,size);
+	SSVAL(cli->outbuf,smb_mid,cli->mid + i);
 
-		if (state->requested >= size) {
-			state->num_reqs = i;
-			break;
-		}
-
-		size_left = size - state->requested;
-		request_thistime = MIN(size_left, state->chunk_size);
-
-		state->reqs[i] = cli_read_andx_send(
-			state->reqs, cli, fnum,
-			state->start_offset + state->requested,
-			request_thistime);
-
-		if (state->reqs[i] == NULL) {
-			goto failed;
-		}
-
-		state->reqs[i]->async.fn = cli_pull_read_done;
-		state->reqs[i]->async.priv = result;
-
-		state->requested += request_thistime;
-	}
-	return result;
-
-failed:
-	TALLOC_FREE(result);
-	return NULL;
+	return cli_send_smb(cli);
 }
 
-/*
- * Handle incoming read replies, push the data into sink and send out new
- * requests if necessary.
- */
+/****************************************************************************
+ Tester for the readraw call.
+****************************************************************************/
 
-static void cli_pull_read_done(struct async_req *read_req)
+ssize_t cli_readraw(struct cli_state *cli, int fnum, char *buf, off_t offset, size_t size)
 {
-	struct async_req *pull_req = talloc_get_type_abort(
-		read_req->async.priv, struct async_req);
-	struct cli_pull_state *state = talloc_get_type_abort(
-		pull_req->private_data, struct cli_pull_state);
-	struct cli_request *read_state = cli_request_get(read_req);
-	NTSTATUS status;
+	char *p;
+	int size2;
+	size_t readsize;
+	ssize_t total = 0;
 
-	status = cli_read_andx_recv(read_req, &read_state->data.read.received,
-				    &read_state->data.read.rcvbuf);
-	if (!NT_STATUS_IS_OK(status)) {
-		async_req_error(state->req, status);
-		return;
-	}
+	if (size == 0) 
+		return 0;
 
 	/*
-	 * This loop is the one to take care of out-of-order replies. All
-	 * pending requests are in state->reqs, state->reqs[top_req] is the
-	 * one that is to be pushed next. If however a request later than
-	 * top_req is replied to, then we can't push yet. If top_req is
-	 * replied to at a later point then, we need to push all the finished
-	 * requests.
+	 * Set readsize to the maximum size we can handle in one readraw.
 	 */
 
-	while (state->reqs[state->top_req] != NULL) {
-		struct cli_request *top_read;
+	readsize = 0xFFFF;
 
-		DEBUG(11, ("cli_pull_read_done: top_req = %d\n",
-			   state->top_req));
+	while (total < size) {
+		readsize = MIN(readsize, size-total);
 
-		if (state->reqs[state->top_req]->state < ASYNC_REQ_DONE) {
-			DEBUG(11, ("cli_pull_read_done: top request not yet "
-				   "done\n"));
-			return;
-		}
+		/* Issue a read and receive a reply */
 
-		top_read = cli_request_get(state->reqs[state->top_req]);
+		if (!cli_issue_readraw(cli, fnum, offset, readsize, 0))
+			return -1;
 
-		DEBUG(10, ("cli_pull_read_done: Pushing %d bytes, %d already "
-			   "pushed\n", (int)top_read->data.read.received,
-			   (int)state->pushed));
+		if (!client_receive_smb(cli->fd, cli->inbuf, cli->timeout))
+			return -1;
 
-		status = state->sink((char *)top_read->data.read.rcvbuf,
-				     top_read->data.read.received,
-				     state->priv);
-		if (!NT_STATUS_IS_OK(status)) {
-			async_req_error(state->req, status);
-			return;
+		size2 = smb_len(cli->inbuf);
+
+		if (size2 > readsize) {
+			DEBUG(5,("server returned more than we wanted!\n"));
+			return -1;
+		} else if (size2 < 0) {
+			DEBUG(5,("read return < 0!\n"));
+			return -1;
 		}
-		state->pushed += top_read->data.read.received;
 
-		TALLOC_FREE(state->reqs[state->top_req]);
+		/* Copy data into buffer */
 
-		if (state->requested < state->size) {
-			struct async_req *new_req;
-			SMB_OFF_T size_left;
-			size_t request_thistime;
-
-			size_left = state->size - state->requested;
-			request_thistime = MIN(size_left, state->chunk_size);
-
-			DEBUG(10, ("cli_pull_read_done: Requesting %d bytes "
-				   "at %d, position %d\n",
-				   (int)request_thistime,
-				   (int)(state->start_offset
-					 + state->requested),
-				   state->top_req));
-
-			new_req = cli_read_andx_send(
-				state->reqs, state->cli, state->fnum,
-				state->start_offset + state->requested,
-				request_thistime);
-
-			if (async_req_nomem(new_req, state->req)) {
-				return;
-			}
-
-			new_req->async.fn = cli_pull_read_done;
-			new_req->async.priv = pull_req;
-
-			state->reqs[state->top_req] = new_req;
-			state->requested += request_thistime;
+		if (size2) {
+			p = cli->inbuf + 4;
+			memcpy(buf + total, p, size2);
 		}
 
-		state->top_req = (state->top_req+1) % state->num_reqs;
-	}
+		total += size2;
+		offset += size2;
 
-	async_req_done(pull_req);
-}
+		/*
+		 * If the server returned less than we asked for we're at EOF.
+		 */
 
-NTSTATUS cli_pull_recv(struct async_req *req, SMB_OFF_T *received)
-{
-	struct cli_pull_state *state = talloc_get_type_abort(
-		req->private_data, struct cli_pull_state);
-
-	SMB_ASSERT(req->state >= ASYNC_REQ_DONE);
-	if (req->state == ASYNC_REQ_ERROR) {
-		return req->status;
+		if (size2 < readsize)
+			break;
 	}
-	*received = state->pushed;
-	return NT_STATUS_OK;
-}
 
-NTSTATUS cli_pull(struct cli_state *cli, uint16_t fnum,
-		  off_t start_offset, SMB_OFF_T size, size_t window_size,
-		  NTSTATUS (*sink)(char *buf, size_t n, void *priv),
-		  void *priv, SMB_OFF_T *received)
-{
-	TALLOC_CTX *frame = talloc_stackframe();
-	struct async_req *req;
-	NTSTATUS result = NT_STATUS_NO_MEMORY;
-
-	if (cli_tmp_event_ctx(frame, cli) == NULL) {
-		goto nomem;
-	}
-
-	req = cli_pull_send(frame, cli, fnum, start_offset, size, window_size,
-			    sink, priv);
-	if (req == NULL) {
-		goto nomem;
-	}
-
-	while (req->state < ASYNC_REQ_DONE) {
-		event_loop_once(cli->event_ctx);
-	}
-
-	result = cli_pull_recv(req, received);
- nomem:
-	TALLOC_FREE(frame);
-	return result;
+	return total;
 }
-
-static NTSTATUS cli_read_sink(char *buf, size_t n, void *priv)
-{
-	char **pbuf = (char **)priv;
-	memcpy(*pbuf, buf, n);
-	*pbuf += n;
-	return NT_STATUS_OK;
-}
-
-ssize_t cli_read(struct cli_state *cli, int fnum, char *buf,
-		 off_t offset, size_t size)
-{
-	NTSTATUS status;
-	SMB_OFF_T ret;
-
-	status = cli_pull(cli, fnum, offset, size, size,
-			  cli_read_sink, &buf, &ret);
-	if (!NT_STATUS_IS_OK(status)) {
-		cli_set_error(cli, status);
-		return -1;
-	}
-	return ret;
-}
-
+#endif
 /****************************************************************************
- Issue a single SMBwrite and don't wait for a reply.
+issue a single SMBwrite and don't wait for a reply
 ****************************************************************************/
 
-static bool cli_issue_write(struct cli_state *cli,
-				int fnum,
-				off_t offset,
-				uint16 mode,
-				const char *buf,
-				size_t size,
-				int i)
+static BOOL cli_issue_write(struct cli_state *cli, int fnum, off_t offset, 
+			    uint16 mode, const char *buf,
+			    size_t size, int i)
 {
 	char *p;
-	bool large_writex = false;
-	/* We can only do direct writes if not signing and not encrypting. */
-	bool direct_writes = !client_is_signing_on(cli) && !cli_encryption_on(cli);
+	BOOL large_writex = False;
 
-	if (!direct_writes && size + 1 > cli->bufsize) {
+	if (size > cli->bufsize) {
 		cli->outbuf = (char *)SMB_REALLOC(cli->outbuf, size + 1024);
 		if (!cli->outbuf) {
 			return False;
@@ -505,20 +280,19 @@
 	memset(cli->outbuf,'\0',smb_size);
 	memset(cli->inbuf,'\0',smb_size);
 
-	if (cli->capabilities & CAP_LARGE_FILES) {
+	if (((SMB_BIG_UINT)offset >> 32) || (size > 0xFFFF)) {
 		large_writex = True;
 	}
 
-	if (large_writex) {
-		cli_set_message(cli->outbuf,14,0,True);
-	} else {
-		cli_set_message(cli->outbuf,12,0,True);
-	}
-
+	if (large_writex)
+		set_message(cli->outbuf,14,0,True);
+	else
+		set_message(cli->outbuf,12,0,True);
+	
 	SCVAL(cli->outbuf,smb_com,SMBwriteX);
 	SSVAL(cli->outbuf,smb_tid,cli->cnum);
 	cli_setup_packet(cli);
-
+	
 	SCVAL(cli->outbuf,smb_vwv0,0xFF);
 	SSVAL(cli->outbuf,smb_vwv2,fnum);
 
@@ -533,39 +307,23 @@
 	 * locally. However, this check might already have been
 	 * done by our callers.
 	 */
-	SSVAL(cli->outbuf,smb_vwv9,(size>>16));
+	SSVAL(cli->outbuf,smb_vwv9,((size>>16)&1));
 	SSVAL(cli->outbuf,smb_vwv10,size);
-	/* +1 is pad byte. */
 	SSVAL(cli->outbuf,smb_vwv11,
-	      smb_buf(cli->outbuf) - smb_base(cli->outbuf) + 1);
+	      smb_buf(cli->outbuf) - smb_base(cli->outbuf));
 
 	if (large_writex) {
 		SIVAL(cli->outbuf,smb_vwv12,(((SMB_BIG_UINT)offset)>>32) & 0xffffffff);
 	}
+	
+	p = smb_base(cli->outbuf) + SVAL(cli->outbuf,smb_vwv11);
+	memcpy(p, buf, size);
+	cli_setup_bcc(cli, p+size);
 
-	p = smb_base(cli->outbuf) + SVAL(cli->outbuf,smb_vwv11) -1;
-	*p++ = '\0'; /* pad byte. */
-	if (!direct_writes) {
-		memcpy(p, buf, size);
-	}
-	if (size > 0x1FFFF) {
-		/* This is a POSIX 14 word large write. */
-		set_message_bcc(cli->outbuf, 0); /* Set bcc to zero. */
-		_smb_setlen_large(cli->outbuf,smb_size + 28 + 1 /* pad */ + size - 4);
-	} else {
-		cli_setup_bcc(cli, p+size);
-	}
-
 	SSVAL(cli->outbuf,smb_mid,cli->mid + i);
-
+	
 	show_msg(cli->outbuf);
-	if (direct_writes) {
-		/* For direct writes we now need to write the data
-		 * directly out of buf. */
-		return cli_send_smb_direct_writeX(cli, buf, size);
-	} else {
-		return cli_send_smb(cli);
-	}
+	return cli_send_smb(cli);
 }
 
 /****************************************************************************
@@ -584,8 +342,8 @@
 	unsigned int issued = 0;
 	unsigned int received = 0;
 	int mpx = 1;
-	size_t writesize;
-	int blocks;
+	int block = cli->max_xmit - (smb_size+32);
+	int blocks = (size + (block-1)) / block;
 
 	if(cli->max_mux > 1) {
 		mpx = cli->max_mux-1;
@@ -593,40 +351,14 @@
 		mpx = 1;
 	}
 
-	/* Default (small) writesize. */
-	writesize = (cli->max_xmit - (smb_size+32)) & ~1023;
-
-        if (write_mode == 0 &&
-			!client_is_signing_on(cli) &&
-			!cli_encryption_on(cli) &&
-			(cli->posix_capabilities & CIFS_UNIX_LARGE_WRITE_CAP) &&
-			(cli->capabilities & CAP_LARGE_FILES)) {
-		/* Only do massive writes if we can do them direct
-		 * with no signing or encrypting - not on a pipe. */
-		writesize = CLI_SAMBA_MAX_POSIX_LARGE_WRITEX_SIZE;
-	} else if ((cli->capabilities & CAP_LARGE_WRITEX) &&
-			(strcmp(cli->dev, "LPT1:") != 0)) {
-
-		/* Printer devices are restricted to max_xmit
-		 * writesize in Vista and XPSP3. */
-
-		if (cli->is_samba) {
-			writesize = CLI_SAMBA_MAX_LARGE_WRITEX_SIZE;
-		} else if (!client_is_signing_on(cli)) {
-			/* Windows restricts signed writes to max_xmit.
-			 * Found by Volker. */
-			writesize = CLI_WINDOWS_MAX_LARGE_WRITEX_SIZE;
-		}
-	}
-
-	blocks = (size + (writesize-1)) / writesize;
-
 	while (received < blocks) {
+		ssize_t size1 = 0;
 
 		while ((issued - received < mpx) && (issued < blocks)) {
-			ssize_t bsent = issued * writesize;
-			ssize_t size1 = MIN(writesize, size - bsent);
+			ssize_t bsent = issued * block;
 
+			size1 = MIN(block, size - bsent);
+
 			if (!cli_issue_write(cli, fnum, offset + bsent,
 			                write_mode,
 			                buf + bsent,
@@ -635,9 +367,8 @@
 			issued++;
 		}
 
-		if (!cli_receive_smb(cli)) {
+		if (!cli_receive_smb(cli))
 			return bwritten;
-		}
 
 		received++;
 
@@ -645,15 +376,14 @@
 			break;
 
 		bwritten += SVAL(cli->inbuf, smb_vwv2);
-		if (writesize > 0xFFFF) {
+		if (size1 > 0xFFFF) {
 			bwritten += (((int)(SVAL(cli->inbuf, smb_vwv4)))<<16);
 		}
 	}
 
-	while (received < issued && cli_receive_smb(cli)) {
+	while (received < issued && cli_receive_smb(cli))
 		received++;
-	}
-
+	
 	return bwritten;
 }
 
@@ -669,34 +399,34 @@
 
 	do {
 		size_t size = MIN(size1, cli->max_xmit - 48);
-
+		
 		memset(cli->outbuf,'\0',smb_size);
 		memset(cli->inbuf,'\0',smb_size);
 
-		cli_set_message(cli->outbuf,5, 0,True);
+		set_message(cli->outbuf,5, 0,True);
 
 		SCVAL(cli->outbuf,smb_com,SMBwrite);
 		SSVAL(cli->outbuf,smb_tid,cli->cnum);
 		cli_setup_packet(cli);
-
+		
 		SSVAL(cli->outbuf,smb_vwv0,fnum);
 		SSVAL(cli->outbuf,smb_vwv1,size);
 		SIVAL(cli->outbuf,smb_vwv2,offset);
 		SSVAL(cli->outbuf,smb_vwv4,0);
-
+		
 		p = smb_buf(cli->outbuf);
 		*p++ = 1;
 		SSVAL(p, 0, size); p += 2;
 		memcpy(p, buf + total, size); p += size;
 
 		cli_setup_bcc(cli, p);
-
+		
 		if (!cli_send_smb(cli))
 			return -1;
 
 		if (!cli_receive_smb(cli))
 			return -1;
-
+		
 		if (cli_is_error(cli))
 			return -1;
 

Modified: branches/samba/upstream/source/libsmb/clisecdesc.c
===================================================================
--- branches/samba/upstream/source/libsmb/clisecdesc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/clisecdesc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -28,8 +29,9 @@
 	char param[8];
 	char *rparam=NULL, *rdata=NULL;
 	unsigned int rparam_count=0, rdata_count=0;
+	prs_struct pd;
+	BOOL pd_initialized = False;
 	SEC_DESC *psd = NULL;
-	NTSTATUS status;
 
 	SIVAL(param, 0, fnum);
 	SIVAL(param, 4, 0x7);
@@ -55,12 +57,15 @@
 	if (cli_is_error(cli))
 		goto cleanup;
 
-	status = unmarshall_sec_desc(mem_ctx, (uint8 *)rdata, rdata_count,
-				     &psd);
+	if (!prs_init(&pd, rdata_count, mem_ctx, UNMARSHALL)) {
+		goto cleanup;
+	}
+	pd_initialized = True;
+	prs_copy_data_in(&pd, rdata, rdata_count);
+	prs_set_offset(&pd,0);
 
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10, ("unmarshall_sec_desc failed: %s\n",
-			   nt_errstr(status)));
+	if (!sec_io_desc("sd data", &psd, &pd, 1)) {
+		DEBUG(1,("Failed to parse secdesc\n"));
 		goto cleanup;
 	}
 
@@ -69,38 +74,44 @@
 	SAFE_FREE(rparam);
 	SAFE_FREE(rdata);
 
+	if (pd_initialized)
+		prs_mem_free(&pd);
 	return psd;
 }
 
 /****************************************************************************
   set the security descriptor for a open file
  ****************************************************************************/
-bool cli_set_secdesc(struct cli_state *cli, int fnum, SEC_DESC *sd)
+BOOL cli_set_secdesc(struct cli_state *cli, int fnum, SEC_DESC *sd)
 {
 	char param[8];
 	char *rparam=NULL, *rdata=NULL;
 	unsigned int rparam_count=0, rdata_count=0;
 	uint32 sec_info = 0;
-	TALLOC_CTX *frame = talloc_stackframe();
-	bool ret = False;
-	uint8 *data;
-	size_t len;
-	NTSTATUS status;
+	TALLOC_CTX *mem_ctx;
+	prs_struct pd;
+	BOOL ret = False;
 
-	status = marshall_sec_desc(talloc_tos(), sd, &data, &len);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10, ("marshall_sec_desc failed: %s\n",
-			   nt_errstr(status)));
+	if ((mem_ctx = talloc_init("cli_set_secdesc")) == NULL) {
+		DEBUG(0,("talloc_init failed.\n"));
 		goto cleanup;
 	}
 
+	prs_init(&pd, 0, mem_ctx, MARSHALL);
+	prs_give_memory(&pd, NULL, 0, True);
+
+	if (!sec_io_desc("sd data", &sd, &pd, 1)) {
+		DEBUG(1,("Failed to marshall secdesc\n"));
+		goto cleanup;
+	}
+
 	SIVAL(param, 0, fnum);
 
-	if (sd->dacl)
+	if (sd->off_dacl)
 		sec_info |= DACL_SECURITY_INFORMATION;
-	if (sd->owner_sid)
+	if (sd->off_owner_sid)
 		sec_info |= OWNER_SECURITY_INFORMATION;
-	if (sd->group_sid)
+	if (sd->off_grp_sid)
 		sec_info |= GROUP_SECURITY_INFORMATION;
 	SSVAL(param, 4, sec_info);
 
@@ -109,7 +120,7 @@
 			       0, 
 			       NULL, 0, 0,
 			       param, 8, 0,
-			       (char *)data, len, 0)) {
+			       prs_data_p(&pd), prs_offset(&pd), 0)) {
 		DEBUG(1,("Failed to send NT_TRANSACT_SET_SECURITY_DESC\n"));
 		goto cleanup;
 	}
@@ -129,7 +140,8 @@
 	SAFE_FREE(rparam);
 	SAFE_FREE(rdata);
 
-	TALLOC_FREE(frame);
+	talloc_destroy(mem_ctx);
 
+	prs_mem_free(&pd);
 	return ret;
 }

Modified: branches/samba/upstream/source/libsmb/clispnego.c
===================================================================
--- branches/samba/upstream/source/libsmb/clispnego.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/clispnego.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -122,12 +123,12 @@
   parse a negTokenInit packet giving a GUID, a list of supported
   OIDs (the mechanisms) and a principal name string 
 */
-bool spnego_parse_negTokenInit(DATA_BLOB blob,
+BOOL spnego_parse_negTokenInit(DATA_BLOB blob,
 			       char *OIDs[ASN1_MAX_OIDS], 
 			       char **principal)
 {
 	int i;
-	bool ret;
+	BOOL ret;
 	ASN1_DATA data;
 
 	asn1_load(&data, blob);
@@ -224,7 +225,7 @@
 /*
   parse a negTokenTarg packet giving a list of OIDs and a security blob
 */
-bool parse_negTokenTarg(DATA_BLOB blob, char *OIDs[ASN1_MAX_OIDS], DATA_BLOB *secblob)
+BOOL parse_negTokenTarg(DATA_BLOB blob, char *OIDs[ASN1_MAX_OIDS], DATA_BLOB *secblob)
 {
 	int i;
 	ASN1_DATA data;
@@ -246,18 +247,6 @@
 	asn1_end_tag(&data);
 	asn1_end_tag(&data);
 
-	/* Skip any optional req_flags that are sent per RFC 4178 */
-	if (asn1_check_tag(&data, ASN1_CONTEXT(1))) {
-		uint8 flags;
-
-		asn1_start_tag(&data, ASN1_CONTEXT(1));
-		asn1_start_tag(&data, ASN1_BITFIELD);
-		while (asn1_tag_remaining(&data) > 0)
-			asn1_read_uint8(&data, &flags);
-		asn1_end_tag(&data);
-		asn1_end_tag(&data);
-	}
-
 	asn1_start_tag(&data, ASN1_CONTEXT(2));
 	asn1_read_OctetString(&data,secblob);
 	asn1_end_tag(&data);
@@ -313,9 +302,9 @@
 /*
   parse a krb5 GSS-API wrapper packet giving a ticket
 */
-bool spnego_parse_krb5_wrap(DATA_BLOB blob, DATA_BLOB *ticket, uint8 tok_id[2])
+BOOL spnego_parse_krb5_wrap(DATA_BLOB blob, DATA_BLOB *ticket, uint8 tok_id[2])
 {
-	bool ret;
+	BOOL ret;
 	ASN1_DATA data;
 	int data_remaining;
 
@@ -359,7 +348,7 @@
 {
 	int retval;
 	DATA_BLOB tkt, tkt_wrapped;
-	const char *krb_mechs[] = {OID_KERBEROS5_OLD, OID_KERBEROS5, OID_NTLMSSP, NULL};
+	const char *krb_mechs[] = {OID_KERBEROS5_OLD, OID_NTLMSSP, NULL};
 
 	/* get a kerberos ticket for the service and extract the session key */
 	retval = cli_krb5_get_ticket(principal, time_offset,
@@ -385,10 +374,10 @@
 /*
   parse a spnego NTLMSSP challenge packet giving two security blobs
 */
-bool spnego_parse_challenge(const DATA_BLOB blob,
+BOOL spnego_parse_challenge(const DATA_BLOB blob,
 			    DATA_BLOB *chal1, DATA_BLOB *chal2)
 {
-	bool ret;
+	BOOL ret;
 	ASN1_DATA data;
 
 	ZERO_STRUCTP(chal1);
@@ -460,7 +449,7 @@
 /*
  parse a SPNEGO auth packet. This contains the encrypted passwords
 */
-bool spnego_parse_auth(DATA_BLOB blob, DATA_BLOB *auth)
+BOOL spnego_parse_auth(DATA_BLOB blob, DATA_BLOB *auth)
 {
 	ASN1_DATA data;
 
@@ -510,13 +499,11 @@
 	asn1_write_enumerated(&data, negResult);
 	asn1_pop_tag(&data);
 
-	if (mechOID) {
+	if (reply->data != NULL) {
 		asn1_push_tag(&data,ASN1_CONTEXT(1));
 		asn1_write_OID(&data, mechOID);
 		asn1_pop_tag(&data);
-	}
-
-	if (reply && reply->data != NULL) {
+		
 		asn1_push_tag(&data,ASN1_CONTEXT(2));
 		asn1_write_OctetString(&data, reply->data, reply->length);
 		asn1_pop_tag(&data);
@@ -531,10 +518,9 @@
 }
 
 /*
- parse a SPNEGO auth packet. This contains the encrypted passwords
+ parse a SPNEGO NTLMSSP auth packet. This contains the encrypted passwords
 */
-bool spnego_parse_auth_response(DATA_BLOB blob, NTSTATUS nt_status,
-				const char *mechOID,
+BOOL spnego_parse_auth_response(DATA_BLOB blob, NTSTATUS nt_status, 
 				DATA_BLOB *auth)
 {
 	ASN1_DATA data;
@@ -555,34 +541,14 @@
 	asn1_check_enumerated(&data, negResult);
 	asn1_end_tag(&data);
 
-	*auth = data_blob_null;
-
-	if (asn1_tag_remaining(&data)) {
+	if (negResult == SPNEGO_NEG_RESULT_INCOMPLETE) {
 		asn1_start_tag(&data,ASN1_CONTEXT(1));
-		asn1_check_OID(&data, mechOID);
+		asn1_check_OID(&data, OID_NTLMSSP);
 		asn1_end_tag(&data);
-
-		if (asn1_tag_remaining(&data)) {
-			asn1_start_tag(&data,ASN1_CONTEXT(2));
-			asn1_read_OctetString(&data, auth);
-			asn1_end_tag(&data);
-		}
-	} else if (negResult == SPNEGO_NEG_RESULT_INCOMPLETE) {
-		data.has_error = 1;
-	}
-
-	/* Binding against Win2K DC returns a duplicate of the responseToken in
-	 * the optional mechListMIC field. This is a bug in Win2K. We ignore
-	 * this field if it exists. Win2K8 may return a proper mechListMIC at
-	 * which point we need to implement the integrity checking. */
-	if (asn1_tag_remaining(&data)) {
-		DATA_BLOB mechList = data_blob_null;
-		asn1_start_tag(&data, ASN1_CONTEXT(3));
-		asn1_read_OctetString(&data, &mechList);
+		
+		asn1_start_tag(&data,ASN1_CONTEXT(2));
+		asn1_read_OctetString(&data, auth);
 		asn1_end_tag(&data);
-		data_blob_free(&mechList);
-		DEBUG(5,("spnego_parse_auth_response received mechListMIC, "
-		    "ignoring.\n"));
 	}
 
 	asn1_end_tag(&data);

Modified: branches/samba/upstream/source/libsmb/clistr.c
===================================================================
--- branches/samba/upstream/source/libsmb/clistr.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/clistr.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,73 +15,37 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
-size_t clistr_push_fn(const char *function,
-			unsigned int line,
-			struct cli_state *cli,
-			void *dest,
-			const char *src,
-			int dest_len,
-			int flags)
+size_t clistr_push_fn(const char *function, unsigned int line, 
+		   struct cli_state *cli, void *dest, 
+		   const char *src, int dest_len, int flags)
 {
 	size_t buf_used = PTR_DIFF(dest, cli->outbuf);
 	if (dest_len == -1) {
 		if (((ptrdiff_t)dest < (ptrdiff_t)cli->outbuf) || (buf_used > cli->bufsize)) {
 			DEBUG(0, ("Pushing string of 'unlimited' length into non-SMB buffer!\n"));
-			return push_string_fn(function, line,
-					      cli->outbuf,
-					      SVAL(cli->outbuf, smb_flg2),
-					      dest, src, -1, flags);
+			return push_string_fn(function, line, cli->outbuf, dest, src, -1, flags);
 		}
-		return push_string_fn(function, line, cli->outbuf,
-				      SVAL(cli->outbuf, smb_flg2),
-				      dest, src, cli->bufsize - buf_used,
-				      flags);
+		return push_string_fn(function, line, cli->outbuf, dest, src, cli->bufsize - buf_used, flags);
 	}
-
+	
 	/* 'normal' push into size-specified buffer */
-	return push_string_fn(function, line, cli->outbuf,
-			      SVAL(cli->outbuf, smb_flg2),
-			      dest, src, dest_len, flags);
+	return push_string_fn(function, line, cli->outbuf, dest, src, dest_len, flags);
 }
 
-size_t clistr_pull_fn(const char *function,
-			unsigned int line,
-			struct cli_state *cli,
-			char *dest,
-			const void *src,
-			int dest_len,
-			int src_len,
-			int flags)
+size_t clistr_pull_fn(const char *function, unsigned int line, 
+		   struct cli_state *cli, char *dest, const void *src, 
+		   int dest_len, int src_len, 
+		   int flags)
 {
-	return pull_string_fn(function, line, cli->inbuf,
-			      SVAL(cli->inbuf, smb_flg2), dest, src, dest_len,
-			      src_len, flags);
+	return pull_string_fn(function, line, cli->inbuf, dest, src, dest_len, src_len, flags);
 }
 
-size_t clistr_pull_talloc_fn(const char *function,
-				unsigned int line,
-				TALLOC_CTX *ctx,
-				struct cli_state *cli,
-				char **pp_dest,
-				const void *src,
-				int src_len,
-				int flags)
-{
-	return pull_string_talloc_fn(function,
-					line,
-					ctx,
-					cli->inbuf,
-					SVAL(cli->inbuf, smb_flg2),
-					pp_dest,
-					src,
-					src_len,
-					flags);
-}
 
 size_t clistr_align_out(struct cli_state *cli, const void *p, int flags)
 {

Modified: branches/samba/upstream/source/libsmb/clitrans.c
===================================================================
--- branches/samba/upstream/source/libsmb/clitrans.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/clitrans.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,20 +1,21 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    client transaction calls
    Copyright (C) Andrew Tridgell 1994-1998
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -24,8 +25,8 @@
  Send a SMB trans or trans2 request.
 ****************************************************************************/
 
-bool cli_send_trans(struct cli_state *cli, int trans,
-		    const char *pipe_name,
+BOOL cli_send_trans(struct cli_state *cli, int trans, 
+		    const char *pipe_name, 
 		    int fid, int flags,
 		    uint16 *setup, unsigned int lsetup, unsigned int msetup,
 		    const char *param, unsigned int lparam, unsigned int mparam,
@@ -43,7 +44,7 @@
 	this_ldata = MIN(ldata,cli->max_xmit - (500+lsetup*2+this_lparam));
 
 	memset(cli->outbuf,'\0',smb_size);
-	cli_set_message(cli->outbuf,14+lsetup,0,True);
+	set_message(cli->outbuf,14+lsetup,0,True);
 	SCVAL(cli->outbuf,smb_com,trans);
 	SSVAL(cli->outbuf,smb_tid, cli->cnum);
 	cli_setup_packet(cli);
@@ -107,7 +108,7 @@
 
 		tot_data = this_ldata;
 		tot_param = this_lparam;
-
+		
 		while (tot_data < ldata || tot_param < lparam)  {
 			this_lparam = MIN(lparam-tot_param,cli->max_xmit - 500); /* hack */
 			this_ldata = MIN(ldata-tot_data,cli->max_xmit - (500+this_lparam));
@@ -115,12 +116,12 @@
 			client_set_trans_sign_state_off(cli, mid);
 			client_set_trans_sign_state_on(cli, mid);
 
-			cli_set_message(cli->outbuf,trans==SMBtrans?8:9,0,True);
+			set_message(cli->outbuf,trans==SMBtrans?8:9,0,True);
 			SCVAL(cli->outbuf,smb_com,(trans==SMBtrans ? SMBtranss : SMBtranss2));
-
+			
 			outparam = smb_buf(cli->outbuf);
 			outdata = outparam+this_lparam;
-
+			
 			/* secondary request */
 			SSVAL(cli->outbuf,smb_tpscnt,lparam);	/* tpscnt */
 			SSVAL(cli->outbuf,smb_tdscnt,ldata);	/* tdscnt */
@@ -137,7 +138,7 @@
 			if (this_ldata)			/* data[] */
 				memcpy(outdata,data+tot_data,this_ldata);
 			cli_setup_bcc(cli, outdata+this_ldata);
-
+			
 			/*
 			 * Save the mid we're using. We need this for finding
 			 * signing replies.
@@ -152,7 +153,7 @@
 
 			/* Ensure we use the same mid for the secondaries. */
 			cli->mid = mid;
-
+			
 			tot_data += this_ldata;
 			tot_param += this_lparam;
 		}
@@ -165,7 +166,7 @@
  Receive a SMB trans or trans2 response allocating the necessary memory.
 ****************************************************************************/
 
-bool cli_receive_trans(struct cli_state *cli,int trans,
+BOOL cli_receive_trans(struct cli_state *cli,int trans,
                               char **param, unsigned int *param_len,
                               char **data, unsigned int *data_len)
 {
@@ -173,7 +174,7 @@
 	unsigned int total_param=0;
 	unsigned int this_data,this_param;
 	NTSTATUS status;
-	bool ret = False;
+	BOOL ret = False;
 
 	*data_len = *param_len = 0;
 
@@ -182,11 +183,11 @@
 	}
 
 	show_msg(cli->inbuf);
-
+	
 	/* sanity check */
 	if (CVAL(cli->inbuf,smb_com) != trans) {
 		DEBUG(0,("Expected %s response, got command 0x%02x\n",
-			 trans==SMBtrans?"SMBtrans":"SMBtrans2",
+			 trans==SMBtrans?"SMBtrans":"SMBtrans2", 
 			 CVAL(cli->inbuf,smb_com)));
 		return False;
 	}
@@ -196,22 +197,13 @@
 	 * to a trans call. This is not an error and should not
 	 * be treated as such. Note that STATUS_NO_MORE_FILES is
 	 * returned when a trans2 findfirst/next finishes.
-	 * When setting up an encrypted transport we can also
-	 * see NT_STATUS_MORE_PROCESSING_REQUIRED here.
-         *
-         * Vista returns NT_STATUS_INACCESSIBLE_SYSTEM_SHORTCUT if the folder
-         * "<share>/Users/All Users" is enumerated.  This is a special pseudo
-         * folder, and the response does not have parameters (nor a parameter
-         * length).
 	 */
 	status = cli_nt_error(cli);
-
-	if (!NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
-		if (NT_STATUS_IS_ERR(status) ||
-                    NT_STATUS_EQUAL(status,STATUS_NO_MORE_FILES) ||
-                    NT_STATUS_EQUAL(status,NT_STATUS_INACCESSIBLE_SYSTEM_SHORTCUT)) {
-			goto out;
-		}
+	
+	if (NT_STATUS_IS_ERR(status) ||
+            NT_STATUS_EQUAL(status,STATUS_NO_MORE_FILES) ||
+            NT_STATUS_EQUAL(status,STATUS_INACCESSIBLE_SYSTEM_SHORTCUT)) {
+		goto out;
 	}
 
 	/* parse out the lengths */
@@ -220,9 +212,7 @@
 
 	/* allocate it */
 	if (total_data!=0) {
-		/* We know adding 2 is safe as total_data is an
-		 * SVAL <= 0xFFFF. */
-		*data = (char *)SMB_REALLOC(*data,total_data+2);
+		*data = (char *)SMB_REALLOC(*data,total_data);
 		if (!(*data)) {
 			DEBUG(0,("cli_receive_trans: failed to enlarge data buffer\n"));
 			goto out;
@@ -230,9 +220,7 @@
 	}
 
 	if (total_param!=0) {
-		/* We know adding 2 is safe as total_param is an
-		 * SVAL <= 0xFFFF. */
-		*param = (char *)SMB_REALLOC(*param,total_param+2);
+		*param = (char *)SMB_REALLOC(*param,total_param);
 		if (!(*param)) {
 			DEBUG(0,("cli_receive_trans: failed to enlarge param buffer\n"));
 			goto out;
@@ -306,13 +294,13 @@
 			ret = True;
 			break;
 		}
-
+		
 		if (!cli_receive_smb(cli)) {
 			goto out;
 		}
 
 		show_msg(cli->inbuf);
-
+		
 		/* sanity check */
 		if (CVAL(cli->inbuf,smb_com) != trans) {
 			DEBUG(0,("Expected %s response, got command 0x%02x\n",
@@ -320,10 +308,8 @@
 				 CVAL(cli->inbuf,smb_com)));
 			goto out;
 		}
-		if (!NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
-			if (NT_STATUS_IS_ERR(cli_nt_error(cli))) {
-				goto out;
-			}
+		if (NT_STATUS_IS_ERR(cli_nt_error(cli))) {
+			goto out;
 		}
 
 		/* parse out the total lengths again - they can shrink! */
@@ -331,7 +317,7 @@
 			total_data = SVAL(cli->inbuf,smb_tdrcnt);
 		if (SVAL(cli->inbuf,smb_tprcnt) < total_param)
 			total_param = SVAL(cli->inbuf,smb_tprcnt);
-
+		
 		if (total_data <= *data_len && total_param <= *param_len) {
 			ret = True;
 			break;
@@ -340,19 +326,6 @@
 
   out:
 
-	if (ret) {
-		/* Ensure the last 2 bytes of param and data are 2 null
-		 * bytes. These are malloc'ed, but not included in any
-		 * length counts. This allows cli_XX string reading functions
-		 * to safely null terminate. */
-		if (total_data) {
-			SSVAL(*data,total_data,0);
-		}
-		if (total_param) {
-			SSVAL(*param,total_param,0);
-		}
-	}
-
 	client_set_trans_sign_state_off(cli, SVAL(cli->inbuf,smb_mid));
 	return ret;
 }
@@ -361,8 +334,8 @@
  Send a SMB nttrans request.
 ****************************************************************************/
 
-bool cli_send_nt_trans(struct cli_state *cli,
-		       int function,
+BOOL cli_send_nt_trans(struct cli_state *cli, 
+		       int function, 
 		       int flags,
 		       uint16 *setup, unsigned int lsetup, unsigned int msetup,
 		       char *param, unsigned int lparam, unsigned int mparam,
@@ -378,7 +351,7 @@
 	this_ldata = MIN(ldata,cli->max_xmit - (500+lsetup*2+this_lparam));
 
 	memset(cli->outbuf,'\0',smb_size);
-	cli_set_message(cli->outbuf,19+lsetup,0,True);
+	set_message(cli->outbuf,19+lsetup,0,True);
 	SCVAL(cli->outbuf,smb_com,SMBnttrans);
 	SSVAL(cli->outbuf,smb_tid, cli->cnum);
 	cli_setup_packet(cli);
@@ -408,7 +381,7 @@
 	SIVAL(cli->outbuf,smb_nt_Function, function);
 	for (i=0;i<lsetup;i++)		/* setup[] */
 		SSVAL(cli->outbuf,smb_nt_SetupStart+i*2,setup[i]);
-
+	
 	if (this_lparam)			/* param[] */
 		memcpy(outparam,param,this_lparam);
 	if (this_ldata)			/* data[] */
@@ -419,7 +392,7 @@
 	show_msg(cli->outbuf);
 	if (!cli_send_smb(cli)) {
 		return False;
-	}
+	}	
 
 	/* Note we're in a trans state. Save the sequence
 	 * numbers for replies. */
@@ -434,18 +407,18 @@
 
 		tot_data = this_ldata;
 		tot_param = this_lparam;
-
+		
 		while (tot_data < ldata || tot_param < lparam)  {
 			this_lparam = MIN(lparam-tot_param,cli->max_xmit - 500); /* hack */
 			this_ldata = MIN(ldata-tot_data,cli->max_xmit - (500+this_lparam));
 
-			cli_set_message(cli->outbuf,18,0,True);
+			set_message(cli->outbuf,18,0,True);
 			SCVAL(cli->outbuf,smb_com,SMBnttranss);
 
 			/* XXX - these should probably be aligned */
 			outparam = smb_buf(cli->outbuf);
 			outdata = outparam+this_lparam;
-
+			
 			/* secondary request */
 			SIVAL(cli->outbuf,smb_nts_TotalParameterCount,lparam);
 			SIVAL(cli->outbuf,smb_nts_TotalDataCount,ldata);
@@ -460,7 +433,7 @@
 			if (this_ldata)			/* data[] */
 				memcpy(outdata,data+tot_data,this_ldata);
 			cli_setup_bcc(cli, outdata+this_ldata);
-
+			
 			/*
 			 * Save the mid we're using. We need this for finding
 			 * signing replies.
@@ -473,10 +446,10 @@
 				client_set_trans_sign_state_off(cli, mid);
 				return False;
 			}
-
+			
 			/* Ensure we use the same mid for the secondaries. */
 			cli->mid = mid;
-
+			
 			tot_data += this_ldata;
 			tot_param += this_lparam;
 		}
@@ -489,7 +462,7 @@
  Receive a SMB nttrans response allocating the necessary memory.
 ****************************************************************************/
 
-bool cli_receive_nt_trans(struct cli_state *cli,
+BOOL cli_receive_nt_trans(struct cli_state *cli,
 			  char **param, unsigned int *param_len,
 			  char **data, unsigned int *data_len)
 {
@@ -498,7 +471,7 @@
 	unsigned int this_data,this_param;
 	uint8 eclass;
 	uint32 ecode;
-	bool ret = False;
+	BOOL ret = False;
 
 	*data_len = *param_len = 0;
 
@@ -507,7 +480,7 @@
 	}
 
 	show_msg(cli->inbuf);
-
+	
 	/* sanity check */
 	if (CVAL(cli->inbuf,smb_com) != SMBnttrans) {
 		DEBUG(0,("Expected SMBnttrans response, got command 0x%02x\n",
@@ -538,25 +511,12 @@
 	}
 
 	/* parse out the lengths */
-	total_data = IVAL(cli->inbuf,smb_ntr_TotalDataCount);
-	total_param = IVAL(cli->inbuf,smb_ntr_TotalParameterCount);
-	/* Only allow 16 megs. */
-	if (total_param > 16*1024*1024) {
-		DEBUG(0,("cli_receive_nt_trans: param buffer too large %d\n",
-					total_param));
-		goto out;
-	}
-	if (total_data > 16*1024*1024) {
-		DEBUG(0,("cli_receive_nt_trans: data buffer too large %d\n",
-					total_data));
-		goto out;
-	}
+	total_data = SVAL(cli->inbuf,smb_ntr_TotalDataCount);
+	total_param = SVAL(cli->inbuf,smb_ntr_TotalParameterCount);
 
 	/* allocate it */
 	if (total_data) {
-		/* We know adding 2 is safe as total_data is less
-		 * than 16mb (above). */
-		*data = (char *)SMB_REALLOC(*data,total_data+2);
+		*data = (char *)SMB_REALLOC(*data,total_data);
 		if (!(*data)) {
 			DEBUG(0,("cli_receive_nt_trans: failed to enlarge data buffer to %d\n",total_data));
 			goto out;
@@ -564,9 +524,7 @@
 	}
 
 	if (total_param) {
-		/* We know adding 2 is safe as total_param is less
-		 * than 16mb (above). */
-		*param = (char *)SMB_REALLOC(*param,total_param+2);
+		*param = (char *)SMB_REALLOC(*param,total_param);
 		if (!(*param)) {
 			DEBUG(0,("cli_receive_nt_trans: failed to enlarge param buffer to %d\n", total_param));
 			goto out;
@@ -642,13 +600,13 @@
 			ret = True;
 			break;
 		}
-
+		
 		if (!cli_receive_smb(cli)) {
 			goto out;
 		}
 
 		show_msg(cli->inbuf);
-
+		
 		/* sanity check */
 		if (CVAL(cli->inbuf,smb_com) != SMBnttrans) {
 			DEBUG(0,("Expected SMBnttrans response, got command 0x%02x\n",
@@ -672,11 +630,11 @@
 		}
 
 		/* parse out the total lengths again - they can shrink! */
-		if (IVAL(cli->inbuf,smb_ntr_TotalDataCount) < total_data)
-			total_data = IVAL(cli->inbuf,smb_ntr_TotalDataCount);
-		if (IVAL(cli->inbuf,smb_ntr_TotalParameterCount) < total_param)
-			total_param = IVAL(cli->inbuf,smb_ntr_TotalParameterCount);
-
+		if (SVAL(cli->inbuf,smb_ntr_TotalDataCount) < total_data)
+			total_data = SVAL(cli->inbuf,smb_ntr_TotalDataCount);
+		if (SVAL(cli->inbuf,smb_ntr_TotalParameterCount) < total_param)
+			total_param = SVAL(cli->inbuf,smb_ntr_TotalParameterCount);
+		
 		if (total_data <= *data_len && total_param <= *param_len) {
 			ret = True;
 			break;
@@ -685,19 +643,6 @@
 
   out:
 
-	if (ret) {
-		/* Ensure the last 2 bytes of param and data are 2 null
-		 * bytes. These are malloc'ed, but not included in any
-		 * length counts. This allows cli_XX string reading functions
-		 * to safely null terminate. */
-		if (total_data) {
-			SSVAL(*data,total_data,0);
-		}
-		if (total_param) {
-			SSVAL(*param,total_param,0);
-		}
-	}
-
 	client_set_trans_sign_state_off(cli, SVAL(cli->inbuf,smb_mid));
 	return ret;
 }

Modified: branches/samba/upstream/source/libsmb/conncache.c
===================================================================
--- branches/samba/upstream/source/libsmb/conncache.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/conncache.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 

Modified: branches/samba/upstream/source/libsmb/credentials.c
===================================================================
--- branches/samba/upstream/source/libsmb/credentials.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/credentials.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -26,13 +27,11 @@
 
 char *credstr(const unsigned char *cred)
 {
-	char *result;
-	result = talloc_asprintf(talloc_tos(),
-				 "%02X%02X%02X%02X%02X%02X%02X%02X",
-				 cred[0], cred[1], cred[2], cred[3],
-				 cred[4], cred[5], cred[6], cred[7]);
-	SMB_ASSERT(result != NULL);
-	return result;
+	static fstring buf;
+	slprintf(buf, sizeof(buf) - 1, "%02X%02X%02X%02X%02X%02X%02X%02X",
+		cred[0], cred[1], cred[2], cred[3], 
+		cred[4], cred[5], cred[6], cred[7]);
+	return buf;
 }
 
 /****************************************************************************
@@ -42,9 +41,9 @@
 ****************************************************************************/
 
 static void creds_init_128(struct dcinfo *dc,
-			   const struct netr_Credential *clnt_chal_in,
-			   const struct netr_Credential *srv_chal_in,
-			   const unsigned char mach_pw[16])
+				const DOM_CHAL *clnt_chal_in,
+				const DOM_CHAL *srv_chal_in,
+				const unsigned char mach_pw[16])
 {
 	unsigned char zero[4], tmp[16];
 	HMACMD5Context ctx;
@@ -94,9 +93,9 @@
 ****************************************************************************/
 
 static void creds_init_64(struct dcinfo *dc,
-			  const struct netr_Credential *clnt_chal_in,
-			  const struct netr_Credential *srv_chal_in,
-			  const unsigned char mach_pw[16])
+			const DOM_CHAL *clnt_chal_in,
+			const DOM_CHAL *srv_chal_in,
+			const unsigned char mach_pw[16])
 {
 	uint32 sum[2];
 	unsigned char sum2[8];
@@ -177,10 +176,10 @@
 
 void creds_server_init(uint32 neg_flags,
 			struct dcinfo *dc,
-			struct netr_Credential *clnt_chal,
-			struct netr_Credential *srv_chal,
+			DOM_CHAL *clnt_chal,
+			DOM_CHAL *srv_chal,
 			const unsigned char mach_pw[16],
-			struct netr_Credential *init_chal_out)
+			DOM_CHAL *init_chal_out)
 {
 	DEBUG(10,("creds_server_init: neg_flags : %x\n", (unsigned int)neg_flags));
 	DEBUG(10,("creds_server_init: client chal : %s\n", credstr(clnt_chal->data) ));
@@ -213,28 +212,25 @@
  Check a credential sent by the client.
 ****************************************************************************/
 
-bool netlogon_creds_server_check(const struct dcinfo *dc,
-				 const struct netr_Credential *rcv_cli_chal_in)
+BOOL creds_server_check(const struct dcinfo *dc, const DOM_CHAL *rcv_cli_chal_in)
 {
 	if (memcmp(dc->clnt_chal.data, rcv_cli_chal_in->data, 8)) {
-		DEBUG(5,("netlogon_creds_server_check: challenge : %s\n",
-			credstr(rcv_cli_chal_in->data)));
+		DEBUG(5,("creds_server_check: challenge : %s\n", credstr(rcv_cli_chal_in->data)));
 		DEBUG(5,("calculated: %s\n", credstr(dc->clnt_chal.data)));
-		DEBUG(2,("netlogon_creds_server_check: credentials check failed.\n"));
-		return false;
+		DEBUG(2,("creds_server_check: credentials check failed.\n"));
+		return False;
 	}
-
-	DEBUG(10,("netlogon_creds_server_check: credentials check OK.\n"));
-
-	return true;
+	DEBUG(10,("creds_server_check: credentials check OK.\n"));
+	return True;
 }
+
 /****************************************************************************
  Replace current seed chal. Internal function - due to split server step below.
 ****************************************************************************/
 
 static void creds_reseed(struct dcinfo *dc)
 {
-	struct netr_Credential time_chal;
+	DOM_CHAL time_chal;
 
 	SIVAL(time_chal.data, 0, IVAL(dc->seed_chal.data, 0) + dc->sequence + 1);
 	SIVAL(time_chal.data, 4, IVAL(dc->seed_chal.data, 4));
@@ -248,34 +244,32 @@
  Step the server credential chain one forward. 
 ****************************************************************************/
 
-bool netlogon_creds_server_step(struct dcinfo *dc,
-				const struct netr_Authenticator *received_cred,
-				struct netr_Authenticator *cred_out)
+BOOL creds_server_step(struct dcinfo *dc, const DOM_CRED *received_cred, DOM_CRED *cred_out)
 {
-	bool ret;
+	BOOL ret;
 	struct dcinfo tmp_dc = *dc;
 
 	/* Do all operations on a temporary copy of the dc,
 	   which we throw away if the checks fail. */
 
-	tmp_dc.sequence = received_cred->timestamp;
+	tmp_dc.sequence = received_cred->timestamp.time;
 
 	creds_step(&tmp_dc);
 
 	/* Create the outgoing credentials */
-	cred_out->timestamp = tmp_dc.sequence + 1;
-	memcpy(&cred_out->cred, &tmp_dc.srv_chal, sizeof(cred_out->cred));
+	cred_out->timestamp.time = tmp_dc.sequence + 1;
+	cred_out->challenge = tmp_dc.srv_chal;
 
 	creds_reseed(&tmp_dc);
 
-	ret = netlogon_creds_server_check(&tmp_dc, &received_cred->cred);
+	ret = creds_server_check(&tmp_dc, &received_cred->challenge);
 	if (!ret) {
-		return false;
+		return False;
 	}
 
 	/* creds step succeeded - replace the current creds. */
 	*dc = tmp_dc;
-	return true;
+	return True;
 }
 
 /****************************************************************************
@@ -284,10 +278,10 @@
 
 void creds_client_init(uint32 neg_flags,
 			struct dcinfo *dc,
-			struct netr_Credential *clnt_chal,
-			struct netr_Credential *srv_chal,
+			DOM_CHAL *clnt_chal,
+			DOM_CHAL *srv_chal,
 			const unsigned char mach_pw[16],
-			struct netr_Credential *init_chal_out)
+			DOM_CHAL *init_chal_out)
 {
 	dc->sequence = time(NULL);
 
@@ -322,25 +316,18 @@
  Check a credential returned by the server.
 ****************************************************************************/
 
-bool netlogon_creds_client_check(const struct dcinfo *dc,
-				 const struct netr_Credential *rcv_srv_chal_in)
+BOOL creds_client_check(const struct dcinfo *dc, const DOM_CHAL *rcv_srv_chal_in)
 {
-	if (memcmp(dc->srv_chal.data, rcv_srv_chal_in->data,
-		   sizeof(dc->srv_chal.data))) {
-
-		DEBUG(0,("netlogon_creds_client_check: credentials check failed.\n"));
-		DEBUGADD(5,("netlogon_creds_client_check: challenge : %s\n",
-			credstr(rcv_srv_chal_in->data)));
-		DEBUGADD(5,("calculated: %s\n", credstr(dc->srv_chal.data)));
-		return false;
+	if (memcmp(dc->srv_chal.data, rcv_srv_chal_in->data, 8)) {
+		DEBUG(5,("creds_client_check: challenge : %s\n", credstr(rcv_srv_chal_in->data)));
+		DEBUG(5,("calculated: %s\n", credstr(dc->srv_chal.data)));
+		DEBUG(0,("creds_client_check: credentials check failed.\n"));
+		return False;
 	}
-
-	DEBUG(10,("netlogon_creds_client_check: credentials check OK.\n"));
-
-	return true;
+	DEBUG(10,("creds_client_check: credentials check OK.\n"));
+	return True;
 }
 
-
 /****************************************************************************
   Step the client credentials to the next element in the chain, updating the
   current client and server credentials and the seed
@@ -348,14 +335,12 @@
   the server
 ****************************************************************************/
 
-void netlogon_creds_client_step(struct dcinfo *dc,
-				struct netr_Authenticator *next_cred_out)
+void creds_client_step(struct dcinfo *dc, DOM_CRED *next_cred_out)
 {
-	dc->sequence += 2;
+        dc->sequence += 2;
 	creds_step(dc);
 	creds_reseed(dc);
 
-	memcpy(&next_cred_out->cred.data, &dc->clnt_chal.data,
-		sizeof(next_cred_out->cred.data));
-	next_cred_out->timestamp = dc->sequence;
+	next_cred_out->challenge = dc->clnt_chal;
+	next_cred_out->timestamp.time = dc->sequence;
 }

Modified: branches/samba/upstream/source/libsmb/dcerpc_err.c
===================================================================
--- branches/samba/upstream/source/libsmb/dcerpc_err.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/dcerpc_err.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -38,9 +39,11 @@
 
 const char *dcerpc_errstr(uint32 fault_code)
 {
-	char *result;
+	static pstring msg;
 	int idx = 0;
 
+	slprintf(msg, sizeof(msg), "DCERPC fault 0x%08x", fault_code);
+
 	while (dcerpc_faults[idx].errstr != NULL) {
 		if (dcerpc_faults[idx].faultcode == fault_code) {
 			return dcerpc_faults[idx].errstr;
@@ -48,8 +51,5 @@
 		idx++;
 	}
 
-	result = talloc_asprintf(talloc_tos(), "DCERPC fault 0x%08x",
-				 fault_code);
-	SMB_ASSERT(result != NULL);
-	return result;
+	return msg;
 }

Modified: branches/samba/upstream/source/libsmb/doserr.c
===================================================================
--- branches/samba/upstream/source/libsmb/doserr.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/doserr.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,36 +1,33 @@
-/*
+/* 
  *  Unix SMB/CIFS implementation.
  *  DOS error routines
  *  Copyright (C) Tim Potter 2002.
- *
+ *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
- *
+ *  
  *  This program is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
- *
+ *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 /* DOS error codes.  please read doserr.h */
 
 #include "includes.h"
 
-typedef const struct {
+typedef const struct
+{
 	const char *dos_errstr;
 	WERROR werror;
 } werror_code_struct;
 
-typedef const struct {
-	WERROR werror;
-	const char *friendly_errstr;
-} werror_str_struct;
-
 werror_code_struct dos_errs[] =
 {
 	{ "WERR_OK", WERR_OK },
@@ -63,11 +60,7 @@
 	{ "WERR_JOB_NOT_FOUND", WERR_JOB_NOT_FOUND },
 	{ "WERR_DEST_NOT_FOUND", WERR_DEST_NOT_FOUND },
 	{ "WERR_NOT_LOCAL_DOMAIN", WERR_NOT_LOCAL_DOMAIN },
-	{ "WERR_USER_EXISTS", WERR_USER_EXISTS },
 	{ "WERR_NO_LOGON_SERVERS", WERR_NO_LOGON_SERVERS },
-	{ "WERR_NO_SUCH_LOGON_SESSION", WERR_NO_SUCH_LOGON_SESSION },
-	{ "WERR_USER_ALREADY_EXISTS", WERR_USER_ALREADY_EXISTS },
-	{ "WERR_NO_SUCH_USER", WERR_NO_SUCH_USER },
 	{ "WERR_PRINTER_DRIVER_IN_USE", WERR_PRINTER_DRIVER_IN_USE },
 	{ "WERR_STATUS_MORE_ENTRIES  ", WERR_STATUS_MORE_ENTRIES },
 	{ "WERR_DFS_NO_SUCH_VOL", WERR_DFS_NO_SUCH_VOL },
@@ -75,110 +68,42 @@
 	{ "WERR_DFS_NO_SUCH_SERVER", WERR_DFS_NO_SUCH_SERVER },
 	{ "WERR_DFS_INTERNAL_ERROR", WERR_DFS_INTERNAL_ERROR },
 	{ "WERR_DFS_CANT_CREATE_JUNCT", WERR_DFS_CANT_CREATE_JUNCT },
-	{ "WERR_INVALID_COMPUTER_NAME", WERR_INVALID_COMPUTER_NAME },
-	{ "WERR_INVALID_DOMAINNAME", WERR_INVALID_DOMAINNAME },
 	{ "WERR_MACHINE_LOCKED", WERR_MACHINE_LOCKED },
-	{ "WERR_DC_NOT_FOUND", WERR_DC_NOT_FOUND },
-	{ "WERR_SETUP_NOT_JOINED", WERR_SETUP_NOT_JOINED },
-	{ "WERR_SETUP_ALREADY_JOINED", WERR_SETUP_ALREADY_JOINED },
-	{ "WERR_SETUP_DOMAIN_CONTROLLER", WERR_SETUP_DOMAIN_CONTROLLER },
-	{ "WERR_DEFAULT_JOIN_REQUIRED", WERR_DEFAULT_JOIN_REQUIRED },
-	{ "WERR_DEVICE_NOT_AVAILABLE", WERR_DEVICE_NOT_AVAILABLE },
+	{ "WERR_DOMAIN_CONTROLLER_NOT_FOUND", WERR_DOMAIN_CONTROLLER_NOT_FOUND },
 	{ "WERR_LOGON_FAILURE", WERR_LOGON_FAILURE },
-	{ "WERR_PASSWORD_RESTRICTION", WERR_PASSWORD_RESTRICTION },
 	{ "WERR_NO_SUCH_DOMAIN", WERR_NO_SUCH_DOMAIN },
-	{ "WERR_NONE_MAPPED", WERR_NONE_MAPPED },
 	{ "WERR_INVALID_SECURITY_DESCRIPTOR", WERR_INVALID_SECURITY_DESCRIPTOR },
-	{ "WERR_INVALID_DOMAIN_STATE", WERR_INVALID_DOMAIN_STATE },
-	{ "WERR_INVALID_DOMAIN_ROLE", WERR_INVALID_DOMAIN_ROLE },
-	{ "WERR_TIME_SKEW", WERR_TIME_SKEW },
 	{ "WERR_INVALID_OWNER", WERR_INVALID_OWNER },
 	{ "WERR_SERVER_UNAVAILABLE", WERR_SERVER_UNAVAILABLE },
 	{ "WERR_IO_PENDING", WERR_IO_PENDING },
 	{ "WERR_INVALID_SERVICE_CONTROL", WERR_INVALID_SERVICE_CONTROL },
-	{ "WERR_SERVICE_ALREADY_RUNNING", WERR_SERVICE_ALREADY_RUNNING },
 	{ "WERR_NET_NAME_NOT_FOUND", WERR_NET_NAME_NOT_FOUND },
 	{ "WERR_REG_CORRUPT", WERR_REG_CORRUPT },
 	{ "WERR_REG_IO_FAILURE", WERR_REG_IO_FAILURE },
 	{ "WERR_REG_FILE_INVALID", WERR_REG_FILE_INVALID },
-	{ "WERR_NO_SUCH_SERVICE", WERR_NO_SUCH_SERVICE },
 	{ "WERR_SERVICE_DISABLED", WERR_SERVICE_DISABLED },
-	{ "WERR_SERVICE_NEVER_STARTED", WERR_SERVICE_NEVER_STARTED },
 	{ "WERR_CAN_NOT_COMPLETE", WERR_CAN_NOT_COMPLETE},
 	{ "WERR_INVALID_FLAGS", WERR_INVALID_FLAGS},
-	{ "WERR_PASSWORD_MUST_CHANGE", WERR_PASSWORD_MUST_CHANGE },
-	{ "WERR_DOMAIN_CONTROLLER_NOT_FOUND", WERR_DOMAIN_CONTROLLER_NOT_FOUND },
-	{ "WERR_ACCOUNT_LOCKED_OUT", WERR_ACCOUNT_LOCKED_OUT },
 	{ NULL, W_ERROR(0) }
 };
 
-werror_str_struct dos_err_strs[] = {
-	{ WERR_OK, "Success" },
-	{ WERR_ACCESS_DENIED, "Access is denied" },
-	{ WERR_INVALID_PARAM, "Invalid parameter" },
-	{ WERR_NOT_SUPPORTED, "Not supported" },
-	{ WERR_BAD_PASSWORD, "A bad password was supplied" },
-	{ WERR_NOMEM, "Out of memory" },
-	{ WERR_NO_LOGON_SERVERS, "No logon servers found" },
-	{ WERR_NO_SUCH_LOGON_SESSION, "No such logon session" },
-	{ WERR_DOMAIN_CONTROLLER_NOT_FOUND, "A domain controller could not be found" },
-	{ WERR_DC_NOT_FOUND, "A domain controller could not be found" },
-	{ WERR_SETUP_NOT_JOINED, "Join failed" },
-	{ WERR_SETUP_ALREADY_JOINED, "Machine is already joined" },
-	{ WERR_SETUP_DOMAIN_CONTROLLER, "Machine is a Domain Controller" },
-	{ WERR_LOGON_FAILURE, "Invalid logon credentials" },
-	{ WERR_USER_EXISTS, "User account already exists" },
-	{ WERR_PASSWORD_MUST_CHANGE, "The password must be changed" },
-	{ WERR_ACCOUNT_LOCKED_OUT, "Account locked out" },
-	{ WERR_TIME_SKEW, "Time difference between client and server" },
-	{ WERR_USER_ALREADY_EXISTS, "User already exists" },
-	{ WERR_PASSWORD_RESTRICTION, "Password does not meet restrictions" },
-	{ WERR_NONE_MAPPED, "Could not map names to SIDs" },
-	{ WERR_NO_SUCH_USER, "No such User" },
-};
-
 /*****************************************************************************
  Returns a DOS error message.  not amazingly helpful, but better than a number.
  *****************************************************************************/
 
 const char *dos_errstr(WERROR werror)
 {
-	char *result;
+        static pstring msg;
         int idx = 0;
 
+	slprintf(msg, sizeof(msg), "DOS code 0x%08x", W_ERROR_V(werror));
+
 	while (dos_errs[idx].dos_errstr != NULL) {
-		if (W_ERROR_V(dos_errs[idx].werror) ==
+		if (W_ERROR_V(dos_errs[idx].werror) == 
                     W_ERROR_V(werror))
                         return dos_errs[idx].dos_errstr;
 		idx++;
 	}
 
-	result = talloc_asprintf(talloc_tos(), "DOS code 0x%08x",
-				 W_ERROR_V(werror));
-	SMB_ASSERT(result != NULL);
-        return result;
+        return msg;
 }
-
-/*****************************************************************************
- Get friendly error string for WERRORs
- *****************************************************************************/
-
-const char *get_friendly_werror_msg(WERROR werror)
-{
-	int i = 0;
-
-	for (i = 0; i < ARRAY_SIZE(dos_err_strs); i++) {
-		if (W_ERROR_V(dos_err_strs[i].werror) ==
-                    W_ERROR_V(werror)) {
-			return dos_err_strs[i].friendly_errstr;
-		}
-	}
-
-	return dos_errstr(werror);
-}
-
-/* compat function for samba4 */
-const char *win_errstr(WERROR werror)
-{
-	return dos_errstr(werror);
-}

Deleted: branches/samba/upstream/source/libsmb/dsgetdcname.c
===================================================================
--- branches/samba/upstream/source/libsmb/dsgetdcname.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/dsgetdcname.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,1448 +0,0 @@
-/*
-   Unix SMB/CIFS implementation.
-
-   dsgetdcname
-
-   Copyright (C) Gerald Carter 2006
-   Copyright (C) Guenther Deschner 2007-2008
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-
-#define DSGETDCNAME_FMT	"DSGETDCNAME/DOMAIN/%s"
-/* 15 minutes */
-#define DSGETDCNAME_CACHE_TTL	60*15
-
-struct ip_service_name {
-	struct sockaddr_storage ss;
-	unsigned port;
-	const char *hostname;
-};
-
-static NTSTATUS make_dc_info_from_cldap_reply(TALLOC_CTX *mem_ctx,
-					      uint32_t flags,
-					      struct sockaddr_storage *ss,
-					      uint32_t nt_version,
-					      union nbt_cldap_netlogon *r,
-					      struct netr_DsRGetDCNameInfo **info);
-
-/****************************************************************
-****************************************************************/
-
-void debug_dsdcinfo_flags(int lvl, uint32_t flags)
-{
-	DEBUG(lvl,("debug_dsdcinfo_flags: 0x%08x\n\t", flags));
-
-	if (flags & DS_FORCE_REDISCOVERY)
-		DEBUGADD(lvl,("DS_FORCE_REDISCOVERY "));
-	if (flags & 0x000000002)
-		DEBUGADD(lvl,("0x00000002 "));
-	if (flags & 0x000000004)
-		DEBUGADD(lvl,("0x00000004 "));
-	if (flags & 0x000000008)
-		DEBUGADD(lvl,("0x00000008 "));
-	if (flags & DS_DIRECTORY_SERVICE_REQUIRED)
-		DEBUGADD(lvl,("DS_DIRECTORY_SERVICE_REQUIRED "));
-	if (flags & DS_DIRECTORY_SERVICE_PREFERRED)
-		DEBUGADD(lvl,("DS_DIRECTORY_SERVICE_PREFERRED "));
-	if (flags & DS_GC_SERVER_REQUIRED)
-		DEBUGADD(lvl,("DS_GC_SERVER_REQUIRED "));
-	if (flags & DS_PDC_REQUIRED)
-		DEBUGADD(lvl,("DS_PDC_REQUIRED "));
-	if (flags & DS_BACKGROUND_ONLY)
-		DEBUGADD(lvl,("DS_BACKGROUND_ONLY "));
-	if (flags & DS_IP_REQUIRED)
-		DEBUGADD(lvl,("DS_IP_REQUIRED "));
-	if (flags & DS_KDC_REQUIRED)
-		DEBUGADD(lvl,("DS_KDC_REQUIRED "));
-	if (flags & DS_TIMESERV_REQUIRED)
-		DEBUGADD(lvl,("DS_TIMESERV_REQUIRED "));
-	if (flags & DS_WRITABLE_REQUIRED)
-		DEBUGADD(lvl,("DS_WRITABLE_REQUIRED "));
-	if (flags & DS_GOOD_TIMESERV_PREFERRED)
-		DEBUGADD(lvl,("DS_GOOD_TIMESERV_PREFERRED "));
-	if (flags & DS_AVOID_SELF)
-		DEBUGADD(lvl,("DS_AVOID_SELF "));
-	if (flags & DS_ONLY_LDAP_NEEDED)
-		DEBUGADD(lvl,("DS_ONLY_LDAP_NEEDED "));
-	if (flags & DS_IS_FLAT_NAME)
-		DEBUGADD(lvl,("DS_IS_FLAT_NAME "));
-	if (flags & DS_IS_DNS_NAME)
-		DEBUGADD(lvl,("DS_IS_DNS_NAME "));
-	if (flags & 0x00040000)
-		DEBUGADD(lvl,("0x00040000 "));
-	if (flags & 0x00080000)
-		DEBUGADD(lvl,("0x00080000 "));
-	if (flags & 0x00100000)
-		DEBUGADD(lvl,("0x00100000 "));
-	if (flags & 0x00200000)
-		DEBUGADD(lvl,("0x00200000 "));
-	if (flags & 0x00400000)
-		DEBUGADD(lvl,("0x00400000 "));
-	if (flags & 0x00800000)
-		DEBUGADD(lvl,("0x00800000 "));
-	if (flags & 0x01000000)
-		DEBUGADD(lvl,("0x01000000 "));
-	if (flags & 0x02000000)
-		DEBUGADD(lvl,("0x02000000 "));
-	if (flags & 0x04000000)
-		DEBUGADD(lvl,("0x04000000 "));
-	if (flags & 0x08000000)
-		DEBUGADD(lvl,("0x08000000 "));
-	if (flags & 0x10000000)
-		DEBUGADD(lvl,("0x10000000 "));
-	if (flags & 0x20000000)
-		DEBUGADD(lvl,("0x20000000 "));
-	if (flags & DS_RETURN_DNS_NAME)
-		DEBUGADD(lvl,("DS_RETURN_DNS_NAME "));
-	if (flags & DS_RETURN_FLAT_NAME)
-		DEBUGADD(lvl,("DS_RETURN_FLAT_NAME "));
-	if (flags)
-		DEBUGADD(lvl,("\n"));
-}
-
-/****************************************************************
-****************************************************************/
-
-static char *dsgetdcname_cache_key(TALLOC_CTX *mem_ctx, const char *domain)
-{
-	if (!mem_ctx || !domain) {
-		return NULL;
-	}
-
-	return talloc_asprintf_strupper_m(mem_ctx, DSGETDCNAME_FMT, domain);
-}
-
-/****************************************************************
-****************************************************************/
-
-static NTSTATUS dsgetdcname_cache_delete(TALLOC_CTX *mem_ctx,
-					const char *domain_name)
-{
-	char *key;
-
-	if (!gencache_init()) {
-		return NT_STATUS_INTERNAL_DB_ERROR;
-	}
-
-	key = dsgetdcname_cache_key(mem_ctx, domain_name);
-	if (!key) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	if (!gencache_del(key)) {
-		return NT_STATUS_UNSUCCESSFUL;
-	}
-
-	return NT_STATUS_OK;
-}
-
-/****************************************************************
-****************************************************************/
-
-static NTSTATUS dsgetdcname_cache_store(TALLOC_CTX *mem_ctx,
-					const char *domain_name,
-					const DATA_BLOB *blob)
-{
-	time_t expire_time;
-	char *key;
-	bool ret = false;
-
-	if (!gencache_init()) {
-		return NT_STATUS_INTERNAL_DB_ERROR;
-	}
-
-	key = dsgetdcname_cache_key(mem_ctx, domain_name);
-	if (!key) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	expire_time = time(NULL) + DSGETDCNAME_CACHE_TTL;
-
-	if (gencache_lock_entry(key) != 0) {
-		return NT_STATUS_LOCK_NOT_GRANTED;
-	}
-
-	ret = gencache_set_data_blob(key, blob, expire_time);
-
-	gencache_unlock_entry(key);
-
-	return ret ? NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
-}
-
-/****************************************************************
-****************************************************************/
-
-#define SET_STRING(x) \
-	talloc_strdup(mem_ctx, x); \
-	NT_STATUS_HAVE_NO_MEMORY(x);
-
-static NTSTATUS map_logon29_from_cldap_reply(TALLOC_CTX *mem_ctx,
-					     uint32_t flags,
-					     struct sockaddr_storage *ss,
-					     uint32_t nt_version,
-					     union nbt_cldap_netlogon *r,
-					     struct nbt_cldap_netlogon_29 *p)
-{
-	char addr[INET6_ADDRSTRLEN];
-
-	ZERO_STRUCTP(p);
-
-	print_sockaddr(addr, sizeof(addr), ss);
-
-	/* FIXME */
-	p->dc_sock_addr_size = 0x10; /* the w32 winsock addr size */
-	p->dc_sock_addr.family = 2; /* AF_INET */
-	p->dc_sock_addr.pdc_ip = talloc_strdup(mem_ctx, addr);
-
-	switch (nt_version & 0x0000001f) {
-		case 0:
-			return NT_STATUS_INVALID_PARAMETER;
-		case 1:
-		case 16:
-		case 17:
-			p->pdc_name	= SET_STRING(r->logon1.pdc_name);
-			p->domain	= SET_STRING(r->logon1.domain_name);
-
-			if (flags & DS_PDC_REQUIRED) {
-				p->server_type = NBT_SERVER_WRITABLE |
-						 NBT_SERVER_PDC;
-			}
-			break;
-		case 2:
-		case 3:
-		case 18:
-		case 19:
-			p->pdc_name	= SET_STRING(r->logon3.pdc_name);
-			p->domain	= SET_STRING(r->logon3.domain_name);
-			p->pdc_dns_name	= SET_STRING(r->logon3.pdc_dns_name);
-			p->dns_domain	= SET_STRING(r->logon3.dns_domain);
-			p->server_type	= r->logon3.server_type;
-			p->forest	= SET_STRING(r->logon3.forest);
-			p->domain_uuid	= r->logon3.domain_uuid;
-
-			break;
-		case 4:
-		case 5:
-		case 6:
-		case 7:
-			p->pdc_name	= SET_STRING(r->logon5.pdc_name);
-			p->domain	= SET_STRING(r->logon5.domain);
-			p->pdc_dns_name	= SET_STRING(r->logon5.pdc_dns_name);
-			p->dns_domain	= SET_STRING(r->logon5.dns_domain);
-			p->server_type	= r->logon5.server_type;
-			p->forest	= SET_STRING(r->logon5.forest);
-			p->domain_uuid	= r->logon5.domain_uuid;
-			p->server_site	= SET_STRING(r->logon5.server_site);
-			p->client_site	= SET_STRING(r->logon5.client_site);
-
-			break;
-		case 8:
-		case 9:
-		case 10:
-		case 11:
-		case 12:
-		case 13:
-		case 14:
-		case 15:
-			p->pdc_name	= SET_STRING(r->logon13.pdc_name);
-			p->domain	= SET_STRING(r->logon13.domain);
-			p->pdc_dns_name	= SET_STRING(r->logon13.pdc_dns_name);
-			p->dns_domain	= SET_STRING(r->logon13.dns_domain);
-			p->server_type	= r->logon13.server_type;
-			p->forest	= SET_STRING(r->logon13.forest);
-			p->domain_uuid	= r->logon13.domain_uuid;
-			p->server_site	= SET_STRING(r->logon13.server_site);
-			p->client_site	= SET_STRING(r->logon13.client_site);
-
-			break;
-		case 20:
-		case 21:
-		case 22:
-		case 23:
-		case 24:
-		case 25:
-		case 26:
-		case 27:
-		case 28:
-			p->pdc_name	= SET_STRING(r->logon15.pdc_name);
-			p->domain	= SET_STRING(r->logon15.domain);
-			p->pdc_dns_name	= SET_STRING(r->logon15.pdc_dns_name);
-			p->dns_domain	= SET_STRING(r->logon15.dns_domain);
-			p->server_type	= r->logon15.server_type;
-			p->forest	= SET_STRING(r->logon15.forest);
-			p->domain_uuid	= r->logon15.domain_uuid;
-			p->server_site	= SET_STRING(r->logon15.server_site);
-			p->client_site	= SET_STRING(r->logon15.client_site);
-
-			break;
-		case 29:
-		case 30:
-		case 31:
-			p->pdc_name	= SET_STRING(r->logon29.pdc_name);
-			p->domain	= SET_STRING(r->logon29.domain);
-			p->pdc_dns_name	= SET_STRING(r->logon29.pdc_dns_name);
-			p->dns_domain	= SET_STRING(r->logon29.dns_domain);
-			p->server_type	= r->logon29.server_type;
-			p->forest	= SET_STRING(r->logon29.forest);
-			p->domain_uuid	= r->logon29.domain_uuid;
-			p->server_site	= SET_STRING(r->logon29.server_site);
-			p->client_site	= SET_STRING(r->logon29.client_site);
-			p->next_closest_site = SET_STRING(r->logon29.next_closest_site);
-
-			break;
-		default:
-			return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	return NT_STATUS_OK;
-}
-
-/****************************************************************
-****************************************************************/
-
-static NTSTATUS store_cldap_reply(TALLOC_CTX *mem_ctx,
-				  uint32_t flags,
-				  struct sockaddr_storage *ss,
-				  uint32_t nt_version,
-				  union nbt_cldap_netlogon *r)
-{
-	DATA_BLOB blob;
-	enum ndr_err_code ndr_err;
-	NTSTATUS status;
-	struct nbt_cldap_netlogon_29 logon29;
-
-	status = map_logon29_from_cldap_reply(mem_ctx, flags, ss,
-					      nt_version, r, &logon29);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	ndr_err = ndr_push_struct_blob(&blob, mem_ctx, &logon29,
-		       (ndr_push_flags_fn_t)ndr_push_nbt_cldap_netlogon_29);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		return ndr_map_error2ntstatus(ndr_err);
-	}
-
-	if (logon29.domain) {
-		status = dsgetdcname_cache_store(mem_ctx, logon29.domain, &blob);
-		if (!NT_STATUS_IS_OK(status)) {
-			goto done;
-		}
-		if (logon29.client_site) {
-			sitename_store(logon29.domain, logon29.client_site);
-		}
-	}
-	if (logon29.dns_domain) {
-		status = dsgetdcname_cache_store(mem_ctx, logon29.dns_domain, &blob);
-		if (!NT_STATUS_IS_OK(status)) {
-			goto done;
-		}
-		if (logon29.client_site) {
-			sitename_store(logon29.dns_domain, logon29.client_site);
-		}
-	}
-
- done:
-	data_blob_free(&blob);
-
-	return status;
-}
-
-/****************************************************************
-****************************************************************/
-
-static NTSTATUS dsgetdcname_cache_refresh(TALLOC_CTX *mem_ctx,
-					  struct messaging_context *msg_ctx,
-					  const char *domain_name,
-					  struct GUID *domain_guid,
-					  uint32_t flags,
-					  const char *site_name,
-					  struct netr_DsRGetDCNameInfo *info)
-{
-	struct netr_DsRGetDCNameInfo *dc_info;
-
-	return dsgetdcname(mem_ctx,
-			   msg_ctx,
-			   domain_name,
-			   domain_guid,
-			   site_name,
-			   flags | DS_FORCE_REDISCOVERY,
-			   &dc_info);
-}
-
-/****************************************************************
-****************************************************************/
-
-static uint32_t get_cldap_reply_server_flags(union nbt_cldap_netlogon *r,
-					     uint32_t nt_version)
-{
-	switch (nt_version & 0x0000001f) {
-		case 0:
-		case 1:
-		case 16:
-		case 17:
-			return 0;
-		case 2:
-		case 3:
-		case 18:
-		case 19:
-			return r->logon3.server_type;
-		case 4:
-		case 5:
-		case 6:
-		case 7:
-			return r->logon5.server_type;
-		case 8:
-		case 9:
-		case 10:
-		case 11:
-		case 12:
-		case 13:
-		case 14:
-		case 15:
-			return r->logon13.server_type;
-		case 20:
-		case 21:
-		case 22:
-		case 23:
-		case 24:
-		case 25:
-		case 26:
-		case 27:
-		case 28:
-			return r->logon15.server_type;
-		case 29:
-		case 30:
-		case 31:
-			return r->logon29.server_type;
-		default:
-			return 0;
-	}
-}
-
-/****************************************************************
-****************************************************************/
-
-#define RETURN_ON_FALSE(x) if (!x) return false;
-
-static bool check_cldap_reply_required_flags(uint32_t ret_flags,
-					     uint32_t req_flags)
-{
-	if (ret_flags == 0) {
-		return true;
-	}
-
-	if (req_flags & DS_PDC_REQUIRED)
-		RETURN_ON_FALSE(ret_flags & NBT_SERVER_PDC);
-
-	if (req_flags & DS_GC_SERVER_REQUIRED)
-		RETURN_ON_FALSE(ret_flags & NBT_SERVER_GC);
-
-	if (req_flags & DS_ONLY_LDAP_NEEDED)
-		RETURN_ON_FALSE(ret_flags & NBT_SERVER_LDAP);
-
-	if ((req_flags & DS_DIRECTORY_SERVICE_REQUIRED) ||
-	    (req_flags & DS_DIRECTORY_SERVICE_PREFERRED))
-		RETURN_ON_FALSE(ret_flags & NBT_SERVER_DS);
-
-	if (req_flags & DS_KDC_REQUIRED)
-		RETURN_ON_FALSE(ret_flags & NBT_SERVER_KDC);
-
-	if (req_flags & DS_TIMESERV_REQUIRED)
-		RETURN_ON_FALSE(ret_flags & NBT_SERVER_TIMESERV);
-
-	if (req_flags & DS_WRITABLE_REQUIRED)
-		RETURN_ON_FALSE(ret_flags & NBT_SERVER_WRITABLE);
-
-	return true;
-}
-
-/****************************************************************
-****************************************************************/
-
-static NTSTATUS dsgetdcname_cache_fetch(TALLOC_CTX *mem_ctx,
-					const char *domain_name,
-					struct GUID *domain_guid,
-					uint32_t flags,
-					const char *site_name,
-					struct netr_DsRGetDCNameInfo **info_p,
-					bool *expired)
-{
-	char *key;
-	DATA_BLOB blob;
-	enum ndr_err_code ndr_err;
-	struct netr_DsRGetDCNameInfo *info;
-	union nbt_cldap_netlogon p;
-	struct nbt_cldap_netlogon_29 r;
-	NTSTATUS status;
-
-	if (!gencache_init()) {
-		return NT_STATUS_INTERNAL_DB_ERROR;
-	}
-
-	key = dsgetdcname_cache_key(mem_ctx, domain_name);
-	if (!key) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	if (!gencache_get_data_blob(key, &blob, expired)) {
-		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
-	}
-
-	info = TALLOC_ZERO_P(mem_ctx, struct netr_DsRGetDCNameInfo);
-	if (!info) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	ndr_err = ndr_pull_struct_blob(&blob, mem_ctx, &r,
-		      (ndr_pull_flags_fn_t)ndr_pull_nbt_cldap_netlogon_29);
-
-	data_blob_free(&blob);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		dsgetdcname_cache_delete(mem_ctx, domain_name);
-		return ndr_map_error2ntstatus(ndr_err);
-	}
-
-	p.logon29 = r;
-
-	status = make_dc_info_from_cldap_reply(mem_ctx, flags, NULL,
-					       29,
-					       &p, &info);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_DEBUG(netr_DsRGetDCNameInfo, info);
-	}
-
-	/* check flags */
-	if (!check_cldap_reply_required_flags(info->dc_flags, flags)) {
-		DEBUG(10,("invalid flags\n"));
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	if ((flags & DS_IP_REQUIRED) &&
-	    (info->dc_address_type != DS_ADDRESS_TYPE_INET)) {
-	    	return NT_STATUS_INVALID_PARAMETER_MIX;
-	}
-
-	*info_p = info;
-
-	return NT_STATUS_OK;
-}
-
-/****************************************************************
-****************************************************************/
-
-static NTSTATUS dsgetdcname_cached(TALLOC_CTX *mem_ctx,
-				   struct messaging_context *msg_ctx,
-				   const char *domain_name,
-				   struct GUID *domain_guid,
-				   uint32_t flags,
-				   const char *site_name,
-				   struct netr_DsRGetDCNameInfo **info)
-{
-	NTSTATUS status;
-	bool expired = false;
-
-	status = dsgetdcname_cache_fetch(mem_ctx, domain_name, domain_guid,
-					 flags, site_name, info, &expired);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10,("dsgetdcname_cached: cache fetch failed with: %s\n",
-			nt_errstr(status)));
-		return NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND;
-	}
-
-	if (flags & DS_BACKGROUND_ONLY) {
-		return status;
-	}
-
-	if (expired) {
-		status = dsgetdcname_cache_refresh(mem_ctx, msg_ctx,
-						   domain_name,
-						   domain_guid, flags,
-						   site_name, *info);
-		if (!NT_STATUS_IS_OK(status)) {
-			return status;
-		}
-	}
-
-	return status;
-}
-
-/****************************************************************
-****************************************************************/
-
-static bool check_allowed_required_flags(uint32_t flags,
-					 const char *site_name)
-{
-	uint32_t return_type = flags & (DS_RETURN_FLAT_NAME|DS_RETURN_DNS_NAME);
-	uint32_t offered_type = flags & (DS_IS_FLAT_NAME|DS_IS_DNS_NAME);
-	uint32_t query_type = flags & (DS_BACKGROUND_ONLY|DS_FORCE_REDISCOVERY);
-
-	/* FIXME: check for DSGETDC_VALID_FLAGS and check for excluse bits
-	 * (DS_PDC_REQUIRED, DS_KDC_REQUIRED, DS_GC_SERVER_REQUIRED) */
-
-	debug_dsdcinfo_flags(10, flags);
-
-	if ((flags & DS_TRY_NEXTCLOSEST_SITE) && site_name) {
-		return false;
-	}
-
-	if (return_type == (DS_RETURN_FLAT_NAME|DS_RETURN_DNS_NAME)) {
-		return false;
-	}
-
-	if (offered_type == (DS_IS_DNS_NAME|DS_IS_FLAT_NAME)) {
-		return false;
-	}
-
-	if (query_type == (DS_BACKGROUND_ONLY|DS_FORCE_REDISCOVERY)) {
-		return false;
-	}
-
-#if 0
-	if ((flags & DS_RETURN_DNS_NAME) && (!(flags & DS_IP_REQUIRED))) {
-		printf("gd: here5 \n");
-		return false;
-	}
-#endif
-	return true;
-}
-
-/****************************************************************
-****************************************************************/
-
-static NTSTATUS discover_dc_netbios(TALLOC_CTX *mem_ctx,
-				    const char *domain_name,
-				    uint32_t flags,
-				    struct ip_service_name **returned_dclist,
-				    int *returned_count)
-{
-	NTSTATUS status;
-	enum nbt_name_type name_type = NBT_NAME_LOGON;
-	struct ip_service *iplist;
-	int i;
-	struct ip_service_name *dclist = NULL;
-	int count;
-
-	*returned_dclist = NULL;
-	*returned_count = 0;
-
-	if (lp_disable_netbios()) {
-		return NT_STATUS_NOT_SUPPORTED;
-	}
-
-	if (flags & DS_PDC_REQUIRED) {
-		name_type = NBT_NAME_PDC;
-	}
-
-	status = internal_resolve_name(domain_name, name_type, NULL,
-				       &iplist, &count,
-				       "lmhosts wins bcast");
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10,("discover_dc_netbios: failed to find DC\n"));
-		return status;
-	}
-
-	dclist = TALLOC_ZERO_ARRAY(mem_ctx, struct ip_service_name, count);
-	if (!dclist) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	for (i=0; i<count; i++) {
-
-		char addr[INET6_ADDRSTRLEN];
-		struct ip_service_name *r = &dclist[i];
-
-		print_sockaddr(addr, sizeof(addr),
-			       &iplist[i].ss);
-
-		r->ss	= iplist[i].ss;
-		r->port = iplist[i].port;
-		r->hostname = talloc_strdup(mem_ctx, addr);
-		if (!r->hostname) {
-			return NT_STATUS_NO_MEMORY;
-		}
-
-	}
-
-	*returned_dclist = dclist;
-	*returned_count = count;
-
-	return NT_STATUS_OK;
-}
-
-/****************************************************************
-****************************************************************/
-
-static NTSTATUS discover_dc_dns(TALLOC_CTX *mem_ctx,
-				const char *domain_name,
-				struct GUID *domain_guid,
-				uint32_t flags,
-				const char *site_name,
-				struct ip_service_name **returned_dclist,
-				int *return_count)
-{
-	int i, j;
-	NTSTATUS status;
-	struct dns_rr_srv *dcs = NULL;
-	int numdcs = 0;
-	int numaddrs = 0;
-	struct ip_service_name *dclist = NULL;
-	int count = 0;
-
-	if (flags & DS_PDC_REQUIRED) {
-		status = ads_dns_query_pdc(mem_ctx, domain_name,
-					   &dcs, &numdcs);
-	} else if (flags & DS_GC_SERVER_REQUIRED) {
-		status = ads_dns_query_gcs(mem_ctx, domain_name, site_name,
-					   &dcs, &numdcs);
-	} else if (flags & DS_KDC_REQUIRED) {
-		status = ads_dns_query_kdcs(mem_ctx, domain_name, site_name,
-					    &dcs, &numdcs);
-	} else if (flags & DS_DIRECTORY_SERVICE_REQUIRED) {
-		status = ads_dns_query_dcs(mem_ctx, domain_name, site_name,
-					   &dcs, &numdcs);
-	} else if (domain_guid) {
-		status = ads_dns_query_dcs_guid(mem_ctx, domain_name,
-						domain_guid, &dcs, &numdcs);
-	} else {
-		status = ads_dns_query_dcs(mem_ctx, domain_name, site_name,
-					   &dcs, &numdcs);
-	}
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (numdcs == 0) {
-		return NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND;
-	}
-
-	for (i=0;i<numdcs;i++) {
-		numaddrs += MAX(dcs[i].num_ips,1);
-	}
-
-	dclist = TALLOC_ZERO_ARRAY(mem_ctx,
-				   struct ip_service_name,
-				   numaddrs);
-	if (!dclist) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	/* now unroll the list of IP addresses */
-
-	*return_count = 0;
-	i = 0;
-	j = 0;
-
-	while ((i < numdcs) && (count < numaddrs)) {
-
-		struct ip_service_name *r = &dclist[count];
-
-		r->port = dcs[count].port;
-		r->hostname = dcs[count].hostname;
-
-		/* If we don't have an IP list for a name, lookup it up */
-
-		if (!dcs[i].ss_s) {
-			interpret_string_addr(&r->ss, dcs[i].hostname, 0);
-			i++;
-			j = 0;
-		} else {
-			/* use the IP addresses from the SRV sresponse */
-
-			if (j >= dcs[i].num_ips) {
-				i++;
-				j = 0;
-				continue;
-			}
-
-			r->ss = dcs[i].ss_s[j];
-			j++;
-		}
-
-		/* make sure it is a valid IP.  I considered checking the
-		 * negative connection cache, but this is the wrong place for
-		 * it.  Maybe only as a hac.  After think about it, if all of
-		 * the IP addresses retuend from DNS are dead, what hope does a
-		 * netbios name lookup have?  The standard reason for falling
-		 * back to netbios lookups is that our DNS server doesn't know
-		 * anything about the DC's   -- jerry */
-
-		if (!is_zero_addr(&r->ss)) {
-			count++;
-			continue;
-		}
-	}
-
-	*returned_dclist = dclist;
-	*return_count = count;
-
-	if (count > 0) {
-		return NT_STATUS_OK;
-	}
-
-	return NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND;
-}
-
-/****************************************************************
-****************************************************************/
-
-static NTSTATUS make_domain_controller_info(TALLOC_CTX *mem_ctx,
-					    const char *dc_unc,
-					    const char *dc_address,
-					    uint32_t dc_address_type,
-					    const struct GUID *domain_guid,
-					    const char *domain_name,
-					    const char *forest_name,
-					    uint32_t flags,
-					    const char *dc_site_name,
-					    const char *client_site_name,
-					    struct netr_DsRGetDCNameInfo **info_out)
-{
-	struct netr_DsRGetDCNameInfo *info;
-
-	info = TALLOC_ZERO_P(mem_ctx, struct netr_DsRGetDCNameInfo);
-	NT_STATUS_HAVE_NO_MEMORY(info);
-
-	if (dc_unc) {
-		info->dc_unc = talloc_strdup(mem_ctx, dc_unc);
-		NT_STATUS_HAVE_NO_MEMORY(info->dc_unc);
-	}
-
-	if (dc_address) {
-		if (!(dc_address[0] == '\\' && dc_address[1] == '\\')) {
-			info->dc_address = talloc_asprintf(mem_ctx, "\\\\%s",
-							   dc_address);
-		} else {
-			info->dc_address = talloc_strdup(mem_ctx, dc_address);
-		}
-		NT_STATUS_HAVE_NO_MEMORY(info->dc_address);
-	}
-
-	info->dc_address_type = dc_address_type;
-
-	if (domain_guid) {
-		info->domain_guid = *domain_guid;
-	}
-
-	if (domain_name) {
-		info->domain_name = talloc_strdup(mem_ctx, domain_name);
-		NT_STATUS_HAVE_NO_MEMORY(info->domain_name);
-	}
-
-	if (forest_name && *forest_name) {
-		info->forest_name = talloc_strdup(mem_ctx, forest_name);
-		NT_STATUS_HAVE_NO_MEMORY(info->forest_name);
-		flags |= DS_DNS_FOREST;
-	}
-
-	info->dc_flags = flags;
-
-	if (dc_site_name) {
-		info->dc_site_name = talloc_strdup(mem_ctx, dc_site_name);
-		NT_STATUS_HAVE_NO_MEMORY(info->dc_site_name);
-	}
-
-	if (client_site_name) {
-		info->client_site_name = talloc_strdup(mem_ctx,
-						       client_site_name);
-		NT_STATUS_HAVE_NO_MEMORY(info->client_site_name);
-	}
-
-	*info_out = info;
-
-	return NT_STATUS_OK;
-}
-
-/****************************************************************
-****************************************************************/
-
-static void map_dc_and_domain_names(uint32_t flags,
-				    const char *dc_name,
-				    const char *domain_name,
-				    const char *dns_dc_name,
-				    const char *dns_domain_name,
-				    uint32_t *dc_flags,
-				    const char **hostname_p,
-				    const char **domain_p)
-{
-	switch (flags & 0xf0000000) {
-		case DS_RETURN_FLAT_NAME:
-			if (dc_name && domain_name &&
-			    *dc_name && *domain_name) {
-				*hostname_p = dc_name;
-				*domain_p = domain_name;
-				break;
-			}
-		case DS_RETURN_DNS_NAME:
-		default:
-			if (dns_dc_name && dns_domain_name &&
-			    *dns_dc_name && *dns_domain_name) {
-				*hostname_p = dns_dc_name;
-				*domain_p = dns_domain_name;
-				*dc_flags |= DS_DNS_DOMAIN | DS_DNS_CONTROLLER;
-				break;
-			}
-			if (dc_name && domain_name &&
-			    *dc_name && *domain_name) {
-				*hostname_p = dc_name;
-				*domain_p = domain_name;
-				break;
-			}
-	}
-}
-
-/****************************************************************
-****************************************************************/
-
-static NTSTATUS make_dc_info_from_cldap_reply(TALLOC_CTX *mem_ctx,
-					      uint32_t flags,
-					      struct sockaddr_storage *ss,
-					      uint32_t nt_version,
-					      union nbt_cldap_netlogon *r,
-					      struct netr_DsRGetDCNameInfo **info)
-{
-	const char *dc_hostname, *dc_domain_name;
-	const char *dc_address = NULL;
-	const char *dc_forest = NULL;
-	uint32_t dc_address_type = 0;
-	uint32_t dc_flags = 0;
-	struct GUID *dc_domain_guid = NULL;
-	const char *dc_server_site = NULL;
-	const char *dc_client_site = NULL;
-
-	char addr[INET6_ADDRSTRLEN];
-
-	if (ss) {
-		print_sockaddr(addr, sizeof(addr), ss);
-		dc_address = addr;
-		dc_address_type = DS_ADDRESS_TYPE_INET;
-	}
-
-	switch (nt_version & 0x0000001f) {
-		case 0:
-		case 1:
-		case 16:
-		case 17:
-			if (!ss) {
-				dc_address	= r->logon1.pdc_name;
-				dc_address_type	= DS_ADDRESS_TYPE_NETBIOS;
-			}
-
-			map_dc_and_domain_names(flags,
-						r->logon1.pdc_name,
-						r->logon1.domain_name,
-						NULL,
-						NULL,
-						&dc_flags,
-						&dc_hostname,
-						&dc_domain_name);
-
-			if (flags & DS_PDC_REQUIRED) {
-				dc_flags = NBT_SERVER_WRITABLE | NBT_SERVER_PDC;
-			}
-			break;
-		case 2:
-		case 3:
-		case 18:
-		case 19:
-			if (!ss) {
-				dc_address	= r->logon3.pdc_ip;
-				dc_address_type	= DS_ADDRESS_TYPE_INET;
-			}
-
-			map_dc_and_domain_names(flags,
-						r->logon3.pdc_name,
-						r->logon3.domain_name,
-						r->logon3.pdc_dns_name,
-						r->logon3.dns_domain,
-						&dc_flags,
-						&dc_hostname,
-						&dc_domain_name);
-
-			dc_flags	|= r->logon3.server_type;
-			dc_forest	= r->logon3.forest;
-			dc_domain_guid	= &r->logon3.domain_uuid;
-
-			break;
-		case 4:
-		case 5:
-		case 6:
-		case 7:
-			if (!ss) {
-				dc_address	= r->logon5.pdc_name;
-				dc_address_type	= DS_ADDRESS_TYPE_NETBIOS;
-			}
-
-			map_dc_and_domain_names(flags,
-						r->logon5.pdc_name,
-						r->logon5.domain,
-						r->logon5.pdc_dns_name,
-						r->logon5.dns_domain,
-						&dc_flags,
-						&dc_hostname,
-						&dc_domain_name);
-
-			dc_flags	|= r->logon5.server_type;
-			dc_forest	= r->logon5.forest;
-			dc_domain_guid	= &r->logon5.domain_uuid;
-			dc_server_site	= r->logon5.server_site;
-			dc_client_site	= r->logon5.client_site;
-
-			break;
-		case 8:
-		case 9:
-		case 10:
-		case 11:
-		case 12:
-		case 13:
-		case 14:
-		case 15:
-			if (!ss) {
-				dc_address	= r->logon13.dc_sock_addr.pdc_ip;
-				dc_address_type	= DS_ADDRESS_TYPE_INET;
-			}
-
-			map_dc_and_domain_names(flags,
-						r->logon13.pdc_name,
-						r->logon13.domain,
-						r->logon13.pdc_dns_name,
-						r->logon13.dns_domain,
-						&dc_flags,
-						&dc_hostname,
-						&dc_domain_name);
-
-			dc_flags	|= r->logon13.server_type;
-			dc_forest	= r->logon13.forest;
-			dc_domain_guid	= &r->logon13.domain_uuid;
-			dc_server_site	= r->logon13.server_site;
-			dc_client_site	= r->logon13.client_site;
-
-			break;
-		case 20:
-		case 21:
-		case 22:
-		case 23:
-		case 24:
-		case 25:
-		case 26:
-		case 27:
-		case 28:
-			if (!ss) {
-				dc_address	= r->logon15.pdc_name;
-				dc_address_type	= DS_ADDRESS_TYPE_NETBIOS;
-			}
-
-			map_dc_and_domain_names(flags,
-						r->logon15.pdc_name,
-						r->logon15.domain,
-						r->logon15.pdc_dns_name,
-						r->logon15.dns_domain,
-						&dc_flags,
-						&dc_hostname,
-						&dc_domain_name);
-
-			dc_flags	|= r->logon15.server_type;
-			dc_forest	= r->logon15.forest;
-			dc_domain_guid	= &r->logon15.domain_uuid;
-			dc_server_site	= r->logon15.server_site;
-			dc_client_site	= r->logon15.client_site;
-
-			break;
-		case 29:
-		case 30:
-		case 31:
-			if (!ss) {
-				dc_address	= r->logon29.dc_sock_addr.pdc_ip;
-				dc_address_type	= DS_ADDRESS_TYPE_INET;
-			}
-
-			map_dc_and_domain_names(flags,
-						r->logon29.pdc_name,
-						r->logon29.domain,
-						r->logon29.pdc_dns_name,
-						r->logon29.dns_domain,
-						&dc_flags,
-						&dc_hostname,
-						&dc_domain_name);
-
-			dc_flags	|= r->logon29.server_type;
-			dc_forest	= r->logon29.forest;
-			dc_domain_guid	= &r->logon29.domain_uuid;
-			dc_server_site	= r->logon29.server_site;
-			dc_client_site	= r->logon29.client_site;
-
-			break;
-		default:
-			return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	return make_domain_controller_info(mem_ctx,
-					   dc_hostname,
-					   dc_address,
-					   dc_address_type,
-					   dc_domain_guid,
-					   dc_domain_name,
-					   dc_forest,
-					   dc_flags,
-					   dc_server_site,
-					   dc_client_site,
-					   info);
-}
-
-/****************************************************************
-****************************************************************/
-
-static uint32_t map_ds_flags_to_nt_version(uint32_t flags)
-{
-	uint32_t nt_version = 0;
-
-	if (flags & DS_PDC_REQUIRED) {
-		nt_version |= NETLOGON_VERSION_PDC;
-	}
-
-	if (flags & DS_GC_SERVER_REQUIRED) {
-		nt_version |= NETLOGON_VERSION_GC;
-	}
-
-	if (flags & DS_TRY_NEXTCLOSEST_SITE) {
-		nt_version |= NETLOGON_VERSION_WITH_CLOSEST_SITE;
-	}
-
-	if (flags & DS_IP_REQUIRED) {
-		nt_version |= NETLOGON_VERSION_IP;
-	}
-
-	return nt_version;
-}
-
-/****************************************************************
-****************************************************************/
-
-static NTSTATUS process_dc_dns(TALLOC_CTX *mem_ctx,
-			       const char *domain_name,
-			       uint32_t flags,
-			       struct ip_service_name *dclist,
-			       int num_dcs,
-			       struct netr_DsRGetDCNameInfo **info)
-{
-	int i = 0;
-	bool valid_dc = false;
-	union nbt_cldap_netlogon *r = NULL;
-	uint32_t nt_version = NETLOGON_VERSION_5 |
-			      NETLOGON_VERSION_5EX;
-	uint32_t ret_flags = 0;
-	NTSTATUS status;
-
-	nt_version |= map_ds_flags_to_nt_version(flags);
-
-	for (i=0; i<num_dcs; i++) {
-
-		DEBUG(10,("LDAP ping to %s\n", dclist[i].hostname));
-
-		if (ads_cldap_netlogon(mem_ctx, dclist[i].hostname,
-					domain_name,
-					&nt_version,
-					&r))
-		{
-			ret_flags = get_cldap_reply_server_flags(r, nt_version);
-
-			if (check_cldap_reply_required_flags(ret_flags, flags)) {
-				valid_dc = true;
-				break;
-			}
-		}
-
-		continue;
-	}
-
-	if (!valid_dc) {
-		return NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND;
-	}
-
-	status = make_dc_info_from_cldap_reply(mem_ctx, flags, &dclist[i].ss,
-					       nt_version, r, info);
-	if (NT_STATUS_IS_OK(status)) {
-		return store_cldap_reply(mem_ctx, flags, &dclist[i].ss,
-					 nt_version, r);
-	}
-
-	return status;
-}
-
-/****************************************************************
-****************************************************************/
-
-static struct event_context *ev_context(void)
-{
-	static struct event_context *ctx;
-
-	if (!ctx && !(ctx = event_context_init(NULL))) {
-		smb_panic("Could not init event context");
-	}
-	return ctx;
-}
-
-/****************************************************************
-****************************************************************/
-
-static struct messaging_context *msg_context(TALLOC_CTX *mem_ctx)
-{
-	static struct messaging_context *ctx;
-
-	if (!ctx && !(ctx = messaging_init(mem_ctx, server_id_self(),
-					   ev_context()))) {
-		smb_panic("Could not init messaging context");
-	}
-	return ctx;
-}
-
-/****************************************************************
-****************************************************************/
-
-static NTSTATUS process_dc_netbios(TALLOC_CTX *mem_ctx,
-				   struct messaging_context *msg_ctx,
-				   const char *domain_name,
-				   uint32_t flags,
-				   struct ip_service_name *dclist,
-				   int num_dcs,
-				   struct netr_DsRGetDCNameInfo **info)
-{
-	struct sockaddr_storage ss;
-	struct ip_service ip_list;
-	enum nbt_name_type name_type = NBT_NAME_LOGON;
-	NTSTATUS status;
-	int i;
-	const char *dc_name = NULL;
-	fstring tmp_dc_name;
-	union nbt_cldap_netlogon *r = NULL;
-	bool store_cache = false;
-	uint32_t nt_version = NETLOGON_VERSION_1 |
-			      NETLOGON_VERSION_5 |
-			      NETLOGON_VERSION_5EX_WITH_IP;
-
-	if (!msg_ctx) {
-		msg_ctx = msg_context(mem_ctx);
-	}
-
-	if (flags & DS_PDC_REQUIRED) {
-		name_type = NBT_NAME_PDC;
-	}
-
-	nt_version |= map_ds_flags_to_nt_version(flags);
-
-	DEBUG(10,("process_dc_netbios\n"));
-
-	for (i=0; i<num_dcs; i++) {
-
-		ip_list.ss = dclist[i].ss;
-		ip_list.port = 0;
-
-		if (!interpret_string_addr(&ss, dclist[i].hostname, AI_NUMERICHOST)) {
-			return NT_STATUS_UNSUCCESSFUL;
-		}
-
-		if (send_getdc_request(mem_ctx, msg_ctx,
-				       &dclist[i].ss, domain_name,
-				       NULL, nt_version))
-		{
-			int k;
-			smb_msleep(300);
-			for (k=0; k<5; k++) {
-				if (receive_getdc_response(mem_ctx,
-							   &dclist[i].ss,
-							   domain_name,
-							   &nt_version,
-							   &dc_name,
-							   &r)) {
-					store_cache = true;
-					namecache_store(dc_name, NBT_NAME_SERVER, 1, &ip_list);
-					goto make_reply;
-				}
-				smb_msleep(1500);
-			}
-		}
-
-		if (name_status_find(domain_name,
-				     name_type,
-				     NBT_NAME_SERVER,
-				     &dclist[i].ss,
-				     tmp_dc_name))
-		{
-			struct nbt_cldap_netlogon_1 logon1;
-
-			r = TALLOC_ZERO_P(mem_ctx, union nbt_cldap_netlogon);
-			NT_STATUS_HAVE_NO_MEMORY(r);
-
-			ZERO_STRUCT(logon1);
-
-			nt_version = NETLOGON_VERSION_1;
-
-			logon1.nt_version = nt_version;
-			logon1.pdc_name = tmp_dc_name;
-			logon1.domain_name = talloc_strdup_upper(mem_ctx, domain_name);
-			NT_STATUS_HAVE_NO_MEMORY(logon1.domain_name);
-
-			r->logon1 = logon1;
-
-			namecache_store(tmp_dc_name, NBT_NAME_SERVER, 1, &ip_list);
-
-			goto make_reply;
-		}
-	}
-
-	return NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND;
-
- make_reply:
-
-	status = make_dc_info_from_cldap_reply(mem_ctx, flags, &dclist[i].ss,
-					       nt_version, r, info);
-	if (NT_STATUS_IS_OK(status) && store_cache) {
-		return store_cldap_reply(mem_ctx, flags, &dclist[i].ss,
-					 nt_version, r);
-	}
-
-	return status;
-}
-
-/****************************************************************
-****************************************************************/
-
-static NTSTATUS dsgetdcname_rediscover(TALLOC_CTX *mem_ctx,
-				       struct messaging_context *msg_ctx,
-				       const char *domain_name,
-				       struct GUID *domain_guid,
-				       uint32_t flags,
-				       const char *site_name,
-				       struct netr_DsRGetDCNameInfo **info)
-{
-	NTSTATUS status = NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND;
-	struct ip_service_name *dclist = NULL;
-	int num_dcs;
-
-	DEBUG(10,("dsgetdcname_rediscover\n"));
-
-	if (flags & DS_IS_FLAT_NAME) {
-
-		status = discover_dc_netbios(mem_ctx, domain_name, flags,
-					     &dclist, &num_dcs);
-		NT_STATUS_NOT_OK_RETURN(status);
-
-		return process_dc_netbios(mem_ctx, msg_ctx, domain_name, flags,
-					  dclist, num_dcs, info);
-	}
-
-	if (flags & DS_IS_DNS_NAME) {
-
-		status = discover_dc_dns(mem_ctx, domain_name, domain_guid,
-					 flags, site_name, &dclist, &num_dcs);
-		NT_STATUS_NOT_OK_RETURN(status);
-
-		return process_dc_dns(mem_ctx, domain_name, flags,
-				      dclist, num_dcs, info);
-	}
-
-	status = discover_dc_dns(mem_ctx, domain_name, domain_guid, flags,
-				 site_name, &dclist, &num_dcs);
-
-	if (NT_STATUS_IS_OK(status) && num_dcs != 0) {
-
-		status = process_dc_dns(mem_ctx, domain_name, flags, dclist,
-					num_dcs, info);
-		if (NT_STATUS_IS_OK(status)) {
-			return status;
-		}
-	}
-
-	status = discover_dc_netbios(mem_ctx, domain_name, flags, &dclist,
-				     &num_dcs);
-	NT_STATUS_NOT_OK_RETURN(status);
-
-	return process_dc_netbios(mem_ctx, msg_ctx, domain_name, flags, dclist,
-				  num_dcs, info);
-}
-
-/********************************************************************
- dsgetdcname.
-
- This will be the only public function here.
-********************************************************************/
-
-NTSTATUS dsgetdcname(TALLOC_CTX *mem_ctx,
-		     struct messaging_context *msg_ctx,
-		     const char *domain_name,
-		     struct GUID *domain_guid,
-		     const char *site_name,
-		     uint32_t flags,
-		     struct netr_DsRGetDCNameInfo **info)
-{
-	NTSTATUS status = NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND;
-	struct netr_DsRGetDCNameInfo *myinfo = NULL;
-	char *query_site = NULL;
-
-	DEBUG(10,("dsgetdcname: domain_name: %s, "
-		  "domain_guid: %s, site_name: %s, flags: 0x%08x\n",
-		  domain_name,
-		  domain_guid ? GUID_string(mem_ctx, domain_guid) : "(null)",
-		  site_name, flags));
-
-	*info = NULL;
-
-	if (!check_allowed_required_flags(flags, site_name)) {
-		DEBUG(0,("invalid flags specified\n"));
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	if (!site_name) {
-		query_site = sitename_fetch(domain_name);
-	} else {
-		query_site = SMB_STRDUP(site_name);
-	}
-
-	if (flags & DS_FORCE_REDISCOVERY) {
-		goto rediscover;
-	}
-
-	status = dsgetdcname_cached(mem_ctx, msg_ctx, domain_name, domain_guid,
-				    flags, query_site, &myinfo);
-	if (NT_STATUS_IS_OK(status)) {
-		*info = myinfo;
-		goto done;
-	}
-
-	if (flags & DS_BACKGROUND_ONLY) {
-		goto done;
-	}
-
- rediscover:
-	status = dsgetdcname_rediscover(mem_ctx, msg_ctx, domain_name,
-					domain_guid, flags, query_site,
-					&myinfo);
-
- 	if (NT_STATUS_IS_OK(status)) {
-		*info = myinfo;
-	}
-
- done:
-	SAFE_FREE(query_site);
-
-	return status;
-}

Modified: branches/samba/upstream/source/libsmb/errormap.c
===================================================================
--- branches/samba/upstream/source/libsmb/errormap.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/errormap.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -1503,107 +1504,96 @@
 	return W_ERROR(NT_STATUS_V(error) & 0xffff);
 }
 
-#if defined(HAVE_GSSAPI)
-/*******************************************************************************
- Map between gssapi errors and NT status. I made these up :-(. JRA.
-*******************************************************************************/
+/* Mapping between Unix, DOS and NT error numbers */
 
-static const struct {
-		unsigned long gss_err;
-		NTSTATUS ntstatus;
-} gss_to_ntstatus_errormap[] = {
-#if defined(GSS_S_CALL_INACCESSIBLE_READ)
-		{GSS_S_CALL_INACCESSIBLE_READ, NT_STATUS_INVALID_PARAMETER},
+const struct unix_error_map unix_dos_nt_errmap[] = {
+	{ EPERM, ERRDOS, ERRnoaccess, NT_STATUS_ACCESS_DENIED },
+	{ EACCES, ERRDOS, ERRnoaccess, NT_STATUS_ACCESS_DENIED },
+	{ ENOENT, ERRDOS, ERRbadfile, NT_STATUS_OBJECT_NAME_NOT_FOUND },
+	{ ENOTDIR, ERRDOS, ERRbadpath,  NT_STATUS_NOT_A_DIRECTORY },
+	{ EIO, ERRHRD, ERRgeneral, NT_STATUS_IO_DEVICE_ERROR },
+	{ EBADF, ERRSRV, ERRsrverror, NT_STATUS_INVALID_HANDLE },
+	{ EINVAL, ERRSRV, ERRsrverror, NT_STATUS_INVALID_HANDLE },
+	{ EEXIST, ERRDOS, ERRfilexists, NT_STATUS_OBJECT_NAME_COLLISION},
+	{ ENFILE, ERRDOS, ERRnofids, NT_STATUS_TOO_MANY_OPENED_FILES },
+	{ EMFILE, ERRDOS, ERRnofids, NT_STATUS_TOO_MANY_OPENED_FILES },
+	{ ENOSPC, ERRHRD, ERRdiskfull, NT_STATUS_DISK_FULL },
+	{ ENOMEM, ERRDOS, ERRnomem, NT_STATUS_NO_MEMORY },
+	{ EISDIR, ERRDOS, ERRnoaccess, NT_STATUS_FILE_IS_A_DIRECTORY},
+	{ EMLINK, ERRDOS, ERRgeneral, NT_STATUS_TOO_MANY_LINKS },
+#ifdef ELOOP
+	{ ELOOP, ERRDOS, ERRbadpath, NT_STATUS_OBJECT_PATH_NOT_FOUND },
 #endif
-#if defined(GSS_S_CALL_INACCESSIBLE_WRITE)
-		{GSS_S_CALL_INACCESSIBLE_WRITE, NT_STATUS_INVALID_PARAMETER},
+#ifdef EDQUOT
+	{ EDQUOT, ERRHRD, ERRdiskfull, NT_STATUS_DISK_FULL }, /* Windows apps need this, not NT_STATUS_QUOTA_EXCEEDED */
 #endif
-#if defined(GSS_S_CALL_BAD_STRUCTURE)
-		{GSS_S_CALL_BAD_STRUCTURE, NT_STATUS_INVALID_PARAMETER},
+#ifdef ENOTEMPTY
+	{ ENOTEMPTY, ERRDOS, ERRnoaccess, NT_STATUS_DIRECTORY_NOT_EMPTY },
 #endif
-#if defined(GSS_S_BAD_MECH)
-		{GSS_S_BAD_MECH, NT_STATUS_INVALID_PARAMETER},
+#ifdef EXDEV
+	{ EXDEV, ERRDOS, ERRdiffdevice, NT_STATUS_NOT_SAME_DEVICE },
 #endif
-#if defined(GSS_S_BAD_NAME)
-		{GSS_S_BAD_NAME, NT_STATUS_INVALID_ACCOUNT_NAME},
+#ifdef EROFS
+	{ EROFS, ERRHRD, ERRnowrite, NT_STATUS_ACCESS_DENIED },
 #endif
-#if defined(GSS_S_BAD_NAMETYPE)
-		{GSS_S_BAD_NAMETYPE, NT_STATUS_INVALID_PARAMETER},
+#ifdef ENAMETOOLONG
+	{ ENAMETOOLONG, ERRDOS, 206, NT_STATUS_OBJECT_NAME_INVALID },
 #endif
-#if defined(GSS_S_BAD_BINDINGS)
-		{GSS_S_BAD_BINDINGS, NT_STATUS_INVALID_PARAMETER},
+#ifdef EFBIG
+	{ EFBIG, ERRHRD, ERRdiskfull, NT_STATUS_DISK_FULL },
 #endif
-#if defined(GSS_S_BAD_STATUS)
-		{GSS_S_BAD_STATUS, NT_STATUS_UNSUCCESSFUL},
+#ifdef ENOBUFS
+	{ ENOBUFS, ERRDOS, ERRnomem, NT_STATUS_INSUFFICIENT_RESOURCES },
 #endif
-#if defined(GSS_S_BAD_SIG)
-		{GSS_S_BAD_SIG, NT_STATUS_ACCESS_DENIED},
+	{ EAGAIN, ERRDOS, 111, NT_STATUS_NETWORK_BUSY },
+#ifdef EADDRINUSE
+	{ EADDRINUSE, ERRDOS, 52, NT_STATUS_ADDRESS_ALREADY_ASSOCIATED},
 #endif
-#if defined(GSS_S_NO_CRED)
-		{GSS_S_NO_CRED, NT_STATUS_ACCESS_DENIED},
+#ifdef ENETUNREACH
+	{ ENETUNREACH, ERRHRD, ERRgeneral, NT_STATUS_NETWORK_UNREACHABLE},
 #endif
-#if defined(GSS_S_NO_CONTEXT)
-		{GSS_S_NO_CONTEXT, NT_STATUS_ACCESS_DENIED},
+#ifdef EHOSTUNREACH
+	{ EHOSTUNREACH, ERRHRD, ERRgeneral, NT_STATUS_HOST_UNREACHABLE},
 #endif
-#if defined(GSS_S_DEFECTIVE_TOKEN)
-		{GSS_S_DEFECTIVE_TOKEN, NT_STATUS_ACCESS_DENIED},
+#ifdef ECONNREFUSED
+	{ ECONNREFUSED, ERRHRD, ERRgeneral, NT_STATUS_CONNECTION_REFUSED},
 #endif
-#if defined(GSS_S_DEFECTIVE_CREDENTIAL)
-		{GSS_S_DEFECTIVE_CREDENTIAL, NT_STATUS_ACCESS_DENIED},
+#ifdef ETIMEDOUT
+	{ ETIMEDOUT, ERRHRD, 121, NT_STATUS_IO_TIMEOUT},
 #endif
-#if defined(GSS_S_CREDENTIALS_EXPIRED)
-		{GSS_S_CREDENTIALS_EXPIRED, NT_STATUS_PASSWORD_EXPIRED},
+#ifdef ECONNABORTED
+	{ ECONNABORTED, ERRHRD, ERRgeneral, NT_STATUS_CONNECTION_ABORTED},
 #endif
-#if defined(GSS_S_CONTEXT_EXPIRED)
-		{GSS_S_CONTEXT_EXPIRED, NT_STATUS_PASSWORD_EXPIRED},
+#ifdef ENODEV
+	{ ENODEV, ERRDOS, 55, NT_STATUS_DEVICE_DOES_NOT_EXIST},
 #endif
-#if defined(GSS_S_BAD_QOP)
-		{GSS_S_BAD_QOP, NT_STATUS_ACCESS_DENIED},
+#ifdef EPIPE
+	{EPIPE, ERRDOS, 109, NT_STATUS_PIPE_BROKEN},
 #endif
-#if defined(GSS_S_UNAUTHORIZED)
-		{GSS_S_UNAUTHORIZED, NT_STATUS_ACCESS_DENIED},
+#ifdef EWOULDBLOCK
+	{ EWOULDBLOCK, ERRDOS, 111, NT_STATUS_NETWORK_BUSY },
 #endif
-#if defined(GSS_S_UNAVAILABLE)
-		{GSS_S_UNAVAILABLE, NT_STATUS_UNSUCCESSFUL},
-#endif
-#if defined(GSS_S_DUPLICATE_ELEMENT)
-		{GSS_S_DUPLICATE_ELEMENT, NT_STATUS_INVALID_PARAMETER},
-#endif
-#if defined(GSS_S_NAME_NOT_MN)
-		{GSS_S_NAME_NOT_MN, NT_STATUS_INVALID_PARAMETER},
-#endif
-		{ 0, NT_STATUS_OK }
+	{ 0, 0, 0, NT_STATUS_OK }
 };
 
 /*********************************************************************
- Map an NT error code from a gssapi error code.
+ Map an NT error code from a Unix error code.
 *********************************************************************/
 
-NTSTATUS map_nt_error_from_gss(uint32 gss_maj, uint32 minor)
+NTSTATUS map_nt_error_from_unix(int unix_error)
 {
 	int i = 0;
 
-	if (gss_maj == GSS_S_COMPLETE) {
+	if (unix_error == 0)
 		return NT_STATUS_OK;
-	}
 
-	if (gss_maj == GSS_S_CONTINUE_NEEDED) {
-		return NT_STATUS_MORE_PROCESSING_REQUIRED;
-	}
-
-	if (gss_maj == GSS_S_FAILURE) {
-		return map_nt_error_from_unix((int)minor);
-	}
-	
 	/* Look through list */
-	while(gss_to_ntstatus_errormap[i].gss_err != 0) {
-		if (gss_to_ntstatus_errormap[i].gss_err == gss_maj) {
-			return gss_to_ntstatus_errormap[i].ntstatus;
-		}
+	while(unix_dos_nt_errmap[i].unix_error != 0) {
+		if (unix_dos_nt_errmap[i].unix_error == unix_error)
+			return unix_dos_nt_errmap[i].nt_error;
 		i++;
 	}
 
 	/* Default return */
 	return NT_STATUS_ACCESS_DENIED;
 }
-#endif

Modified: branches/samba/upstream/source/libsmb/libsmb_cache.c
===================================================================
--- branches/samba/upstream/source/libsmb/libsmb_cache.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/libsmb_cache.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,3 +1,4 @@
+
 /* 
    Unix SMB/CIFS implementation.
    SMB client library implementation (server cache)
@@ -8,7 +9,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,13 +18,17 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
-#include "libsmbclient.h"
-#include "libsmb_internal.h"
 
+#include "include/libsmbclient.h"
+#include "../include/libsmb_internal.h"
+
+int smbc_default_cache_functions(SMBCCTX * context);
+
 /*
  * Structure we use if internal caching mechanism is used 
  * nothing fancy here.
@@ -34,70 +39,66 @@
 	char *workgroup;
 	char *username;
 	SMBCSRV *server;
-        
+	
 	struct smbc_server_cache *next, *prev;
 };
+	
 
 
-
 /*
  * Add a new connection to the server cache.
  * This function is only used if the external cache is not enabled 
  */
-int
-SMBC_add_cached_server(SMBCCTX * context,
-                       SMBCSRV * newsrv,
-                       const char * server,
-                       const char * share, 
-                       const char * workgroup,
-                       const char * username)
+static int smbc_add_cached_server(SMBCCTX * context, SMBCSRV * newsrv,
+				  const char * server, const char * share, 
+				  const char * workgroup, const char * username)
 {
 	struct smbc_server_cache * srvcache = NULL;
-        
+
 	if (!(srvcache = SMB_MALLOC_P(struct smbc_server_cache))) {
 		errno = ENOMEM;
 		DEBUG(3, ("Not enough space for server cache allocation\n"));
 		return 1;
 	}
-        
+       
 	ZERO_STRUCTP(srvcache);
-        
+
 	srvcache->server = newsrv;
-        
+
 	srvcache->server_name = SMB_STRDUP(server);
 	if (!srvcache->server_name) {
 		errno = ENOMEM;
 		goto failed;
 	}
-        
+
 	srvcache->share_name = SMB_STRDUP(share);
 	if (!srvcache->share_name) {
 		errno = ENOMEM;
 		goto failed;
 	}
-        
+
 	srvcache->workgroup = SMB_STRDUP(workgroup);
 	if (!srvcache->workgroup) {
 		errno = ENOMEM;
 		goto failed;
 	}
-        
+
 	srvcache->username = SMB_STRDUP(username);
 	if (!srvcache->username) {
 		errno = ENOMEM;
 		goto failed;
 	}
-        
-	DLIST_ADD(context->internal->server_cache, srvcache);
+
+	DLIST_ADD((context->server_cache), srvcache);
 	return 0;
-        
-failed:
+
+ failed:
 	SAFE_FREE(srvcache->server_name);
 	SAFE_FREE(srvcache->share_name);
 	SAFE_FREE(srvcache->workgroup);
 	SAFE_FREE(srvcache->username);
 	SAFE_FREE(srvcache);
-        
+	
 	return 1;
 }
 
@@ -108,27 +109,23 @@
  * returns server handle on success, NULL on error (not found)
  * This function is only used if the external cache is not enabled 
  */
-SMBCSRV *
-SMBC_get_cached_server(SMBCCTX * context,
-                       const char * server, 
-                       const char * share,
-                       const char * workgroup,
-                       const char * user)
+static SMBCSRV * smbc_get_cached_server(SMBCCTX * context, const char * server, 
+				  const char * share, const char * workgroup, const char * user)
 {
 	struct smbc_server_cache * srv = NULL;
-        
+	
 	/* Search the cache lines */
-	for (srv = context->internal->server_cache; srv; srv = srv->next) {
-                
+	for (srv=((struct smbc_server_cache *)context->server_cache);srv;srv=srv->next) {
+
 		if (strcmp(server,srv->server_name)  == 0 &&
 		    strcmp(workgroup,srv->workgroup) == 0 &&
 		    strcmp(user, srv->username)  == 0) {
-                        
+
                         /* If the share name matches, we're cool */
                         if (strcmp(share, srv->share_name) == 0) {
                                 return srv->server;
                         }
-                        
+
                         /*
                          * We only return an empty share name or the attribute
                          * server on an exact match (which would have been
@@ -136,7 +133,7 @@
                          */
                         if (*share == '\0' || strcmp(share, "*IPC$") == 0)
                                 continue;
-                        
+
                         /*
                          * Never return an empty share name or the attribute
                          * server if it wasn't what was requested.
@@ -144,13 +141,13 @@
                         if (*srv->share_name == '\0' ||
                             strcmp(srv->share_name, "*IPC$") == 0)
                                 continue;
-                        
+
                         /*
                          * If we're only allowing one share per server, then
                          * a connection to the server (other than the
                          * attribute server connection) is cool.
                          */
-                        if (smbc_getOptionOneSharePerServer(context)) {
+                        if (context->options.one_share_per_server) {
                                 /*
                                  * The currently connected share name
                                  * doesn't match the requested share, so
@@ -160,10 +157,10 @@
                                         /* Sigh. Couldn't disconnect. */
                                         cli_shutdown(srv->server->cli);
 					srv->server->cli = NULL;
-                                        smbc_getFunctionRemoveCachedServer(context)(context, srv->server);
+                                        context->callbacks.remove_cached_srv_fn(context, srv->server);
                                         continue;
                                 }
-                                
+
                                 /*
                                  * Save the new share name.  We've
                                  * disconnected from the old share, and are
@@ -175,16 +172,16 @@
                                         /* Out of memory. */
                                         cli_shutdown(srv->server->cli);
 					srv->server->cli = NULL;
-                                        smbc_getFunctionRemoveCachedServer(context)(context, srv->server);
+                                        context->callbacks.remove_cached_srv_fn(context, srv->server);
                                         continue;
                                 }
-                                
-                                
+
+
                                 return srv->server;
                         }
                 }
 	}
-        
+
 	return NULL;
 }
 
@@ -194,17 +191,15 @@
  * returns 0 on success
  * This function is only used if the external cache is not enabled 
  */
-int
-SMBC_remove_cached_server(SMBCCTX * context,
-                          SMBCSRV * server)
+static int smbc_remove_cached_server(SMBCCTX * context, SMBCSRV * server)
 {
 	struct smbc_server_cache * srv = NULL;
-        
-	for (srv = context->internal->server_cache; srv; srv = srv->next) {
+	
+	for (srv=((struct smbc_server_cache *)context->server_cache);srv;srv=srv->next) {
 		if (server == srv->server) { 
-                        
+
 			/* remove this sucker */
-			DLIST_REMOVE(context->internal->server_cache, srv);
+			DLIST_REMOVE(context->server_cache, srv);
 			SAFE_FREE(srv->server_name);
 			SAFE_FREE(srv->share_name);
 			SAFE_FREE(srv->workgroup);
@@ -222,23 +217,40 @@
  * Try to remove all the servers in cache
  * returns 1 on failure and 0 if all servers could be removed.
  */
-int
-SMBC_purge_cached_servers(SMBCCTX * context)
+static int smbc_purge_cached(SMBCCTX * context)
 {
 	struct smbc_server_cache * srv;
 	struct smbc_server_cache * next;
 	int could_not_purge_all = 0;
-        
-	for (srv = context->internal->server_cache,
-                     next = (srv ? srv->next :NULL);
+
+	for (srv = ((struct smbc_server_cache *) context->server_cache),
+                 next = (srv ? srv->next :NULL);
              srv;
-             srv = next,
-                     next = (srv ? srv->next : NULL)) {
-                
-		if (SMBC_remove_unused_server(context, srv->server)) {
+             srv = next, next = (srv ? srv->next : NULL)) {
+
+		if (smbc_remove_unused_server(context, srv->server)) {
 			/* could not be removed */
 			could_not_purge_all = 1;
 		}
 	}
 	return could_not_purge_all;
 }
+
+
+
+/*
+ * This functions initializes all server-cache related functions 
+ * to the default (internal) system.
+ *
+ * We use this to make the rest of the cache system static.
+ */
+
+int smbc_default_cache_functions(SMBCCTX * context)
+{
+	context->callbacks.add_cached_srv_fn    = smbc_add_cached_server;
+	context->callbacks.get_cached_srv_fn    = smbc_get_cached_server;
+	context->callbacks.remove_cached_srv_fn = smbc_remove_cached_server;
+	context->callbacks.purge_cached_fn      = smbc_purge_cached;
+
+	return 0;
+}

Modified: branches/samba/upstream/source/libsmb/libsmb_compat.c
===================================================================
--- branches/samba/upstream/source/libsmb/libsmb_compat.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/libsmb_compat.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,11 +5,11 @@
    Copyright (C) Richard Sharpe 2000
    Copyright (C) John Terpstra 2000
    Copyright (C) Tom Jansen (Ninja ISD) 2002 
-   Copyright (C) Derrell Lipman 2003, 2008
+   Copyright (C) Derrell Lipman 2003
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -18,13 +18,15 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 
 #include "includes.h"
-#include "libsmb_internal.h"
 
+#include "include/libsmb_internal.h"
+
 struct smbc_compat_fdlist {
 	SMBCFILE * file;
 	int fd;
@@ -38,8 +40,7 @@
 static struct smbc_compat_fdlist * smbc_compat_fd_avail = NULL;
 
 /* Find an fd and return the SMBCFILE * or NULL on failure */
-static SMBCFILE *
-find_fd(int fd)
+static SMBCFILE * find_fd(int fd)
 {
 	struct smbc_compat_fdlist * f = smbc_compat_fd_in_use;
 	while (f) {
@@ -51,15 +52,14 @@
 }
 
 /* Add an fd, returns 0 on success, -1 on error with errno set */
-static int
-add_fd(SMBCFILE * file)
+static int add_fd(SMBCFILE * file)
 {
         struct smbc_compat_fdlist * f = smbc_compat_fd_avail;
-        
+
 	if (f) {
                 /* We found one that's available */
                 DLIST_REMOVE(smbc_compat_fd_avail, f);
-                
+
 	} else {
                 /*
                  * None were available, so allocate one.  Keep the number of
@@ -72,36 +72,35 @@
                         errno = EMFILE;
                         return -1;
                 }
-                
+
                 f = SMB_MALLOC_P(struct smbc_compat_fdlist);
                 if (!f) {
                         errno = ENOMEM;
                         return -1;
                 }
-                
+	
                 f->fd = SMBC_BASE_FD + smbc_compat_nextfd++;
         }
-        
+
 	f->file = file;
 	DLIST_ADD(smbc_compat_fd_in_use, f);
-        
+
 	return f->fd;
 }
 
 
 
 /* Delete an fd, returns 0 on success */
-static int
-del_fd(int fd)
+static int del_fd(int fd)
 {
 	struct smbc_compat_fdlist * f = smbc_compat_fd_in_use;
-        
+
 	while (f) {
 		if (f->fd == fd) 
 			break;
 		f = f->next;
 	}
-        
+
 	if (f) {
 		/* found */
 		DLIST_REMOVE(smbc_compat_fd_in_use, f);
@@ -111,43 +110,40 @@
 	}
 	return 1;
 }
+ 
 
 
-
-int
-smbc_init(smbc_get_auth_data_fn fn,
-          int debug)
+int smbc_init(smbc_get_auth_data_fn fn, int debug)
 {
 	if (!smbc_compat_initialized) {
 		statcont = smbc_new_context();
 		if (!statcont) 
 			return -1;
-                
-                smbc_setDebug(statcont, debug);
-                smbc_setFunctionAuthData(statcont, fn);
-                
+
+		statcont->debug = debug;
+		statcont->callbacks.auth_fn = fn;
+		
 		if (!smbc_init_context(statcont)) {
 			smbc_free_context(statcont, False);
 			return -1;
 		}
-                
+
 		smbc_compat_initialized = 1;
-                
+
 		return 0;
 	}
 	return 0;
 }
 
 
-SMBCCTX *
-smbc_set_context(SMBCCTX * context)
+SMBCCTX *smbc_set_context(SMBCCTX * context)
 {
         SMBCCTX *old_context = statcont;
-        
+
         if (context) {
                 /* Save provided context.  It must have been initialized! */
                 statcont = context;
-                
+
                 /* You'd better know what you're doing.  We won't help you. */
 		smbc_compat_initialized = 1;
         }
@@ -156,387 +152,301 @@
 }
 
 
-int
-smbc_open(const char *furl,
-          int flags,
-          mode_t mode)
+int smbc_open(const char *furl, int flags, mode_t mode)
 {
 	SMBCFILE * file;
 	int fd;
-        
-        file = smbc_getFunctionOpen(statcont)(statcont, furl, flags, mode);
+
+	file = (statcont->open)(statcont, furl, flags, mode);
 	if (!file)
 		return -1;
-        
+
 	fd = add_fd(file);
 	if (fd == -1) 
-                smbc_getFunctionClose(statcont)(statcont, file);
+                (statcont->close_fn)(statcont, file);
 	return fd;
 }
 
 
-int
-smbc_creat(const char *furl,
-           mode_t mode)
+int smbc_creat(const char *furl, mode_t mode)
 {
 	SMBCFILE * file;
 	int fd;
-        
-        file = smbc_getFunctionCreat(statcont)(statcont, furl, mode);
+
+	file = (statcont->creat)(statcont, furl, mode);
 	if (!file)
 		return -1;
-        
+
 	fd = add_fd(file);
 	if (fd == -1) {
 		/* Hmm... should we delete the file too ? I guess we could try */
-                smbc_getFunctionClose(statcont)(statcont, file);
-                smbc_getFunctionUnlink(statcont)(statcont, furl);
+		(statcont->close_fn)(statcont, file);
+		(statcont->unlink)(statcont, furl);
 	}
 	return fd;
 }
 
 
-ssize_t
-smbc_read(int fd,
-          void *buf,
-          size_t bufsize)
+ssize_t smbc_read(int fd, void *buf, size_t bufsize)
 {
 	SMBCFILE * file = find_fd(fd);
-        return smbc_getFunctionRead(statcont)(statcont, file, buf, bufsize);
+	return (statcont->read)(statcont, file, buf, bufsize);
 }
 
-ssize_t
-smbc_write(int fd,
-           void *buf,
-           size_t bufsize)
+ssize_t smbc_write(int fd, void *buf, size_t bufsize)
 {
 	SMBCFILE * file = find_fd(fd);
-        return smbc_getFunctionWrite(statcont)(statcont, file, buf, bufsize);
+	return (statcont->write)(statcont, file, buf, bufsize);
 }
 
-off_t
-smbc_lseek(int fd,
-           off_t offset,
-           int whence)
+off_t smbc_lseek(int fd, off_t offset, int whence)
 {
 	SMBCFILE * file = find_fd(fd);
-        return smbc_getFunctionLseek(statcont)(statcont, file, offset, whence);
+	return (statcont->lseek)(statcont, file, offset, whence);
 }
 
-int
-smbc_close(int fd)
+int smbc_close(int fd)
 {
 	SMBCFILE * file = find_fd(fd);
 	del_fd(fd);
-        return smbc_getFunctionClose(statcont)(statcont, file);
+	return (statcont->close_fn)(statcont, file);
 }
 
-int
-smbc_unlink(const char *fname)
+int smbc_unlink(const char *fname)
 {
-        return smbc_getFunctionUnlink(statcont)(statcont, fname);
+        return (statcont->unlink)(statcont, fname);
 }
 
-int
-smbc_rename(const char *ourl,
-            const char *nurl)
+int smbc_rename(const char *ourl, const char *nurl)
 {
-        return smbc_getFunctionRename(statcont)(statcont, ourl,
-                                                statcont, nurl);
+	return (statcont->rename)(statcont, ourl, statcont, nurl);
 }
 
-int
-smbc_opendir(const char *durl)
+int smbc_opendir(const char *durl)
 {
 	SMBCFILE * file;
 	int fd;
-        
-        file = smbc_getFunctionOpendir(statcont)(statcont, durl);
+
+	file = (statcont->opendir)(statcont, durl);
 	if (!file)
 		return -1;
-        
+
 	fd = add_fd(file);
 	if (fd == -1) 
-                smbc_getFunctionClosedir(statcont)(statcont, file);
-        
+		(statcont->closedir)(statcont, file);
+
 	return fd;
 }
 
-int
-smbc_closedir(int dh) 
+int smbc_closedir(int dh) 
 {
 	SMBCFILE * file = find_fd(dh);
 	del_fd(dh);
-        return smbc_getFunctionClosedir(statcont)(statcont, file);
+	return (statcont->closedir)(statcont, file);
 }
 
-int
-smbc_getdents(unsigned int dh,
-              struct smbc_dirent *dirp,
-              int count)
+int smbc_getdents(unsigned int dh, struct smbc_dirent *dirp, int count)
 {
 	SMBCFILE * file = find_fd(dh);
-        return smbc_getFunctionGetdents(statcont)(statcont, file, dirp, count);
+	return (statcont->getdents)(statcont, file,dirp, count);
 }
 
-struct smbc_dirent *
-smbc_readdir(unsigned int dh)
+struct smbc_dirent* smbc_readdir(unsigned int dh)
 {
 	SMBCFILE * file = find_fd(dh);
-        return smbc_getFunctionReaddir(statcont)(statcont, file);
+	return (statcont->readdir)(statcont, file);
 }
 
-off_t
-smbc_telldir(int dh)
+off_t smbc_telldir(int dh)
 {
 	SMBCFILE * file = find_fd(dh);
-        return smbc_getFunctionTelldir(statcont)(statcont, file);
+	return (statcont->telldir)(statcont, file);
 }
 
-int
-smbc_lseekdir(int fd,
-              off_t offset)
+int smbc_lseekdir(int fd, off_t offset)
 {
 	SMBCFILE * file = find_fd(fd);
-        return smbc_getFunctionLseekdir(statcont)(statcont, file, offset);
+	return (statcont->lseekdir)(statcont, file, offset);
 }
 
-int
-smbc_mkdir(const char *durl,
-           mode_t mode)
+int smbc_mkdir(const char *durl, mode_t mode)
 {
-        return smbc_getFunctionMkdir(statcont)(statcont, durl, mode);
+	return (statcont->mkdir)(statcont, durl, mode);
 }
 
-int
-smbc_rmdir(const char *durl)
+int smbc_rmdir(const char *durl)
 {
-        return smbc_getFunctionRmdir(statcont)(statcont, durl);
+	return (statcont->rmdir)(statcont, durl);
 }
 
-int
-smbc_stat(const char *url,
-          struct stat *st)
+int smbc_stat(const char *url, struct stat *st)
 {
-        return smbc_getFunctionStat(statcont)(statcont, url, st);
+	return (statcont->stat)(statcont, url, st);
 }
 
-int
-smbc_fstat(int fd,
-           struct stat *st)
+int smbc_fstat(int fd, struct stat *st)
 {
 	SMBCFILE * file = find_fd(fd);
-        return smbc_getFunctionFstat(statcont)(statcont, file, st);
+	return (statcont->fstat)(statcont, file, st);
 }
 
-int
-smbc_ftruncate(int fd,
-               off_t size)
+int smbc_chmod(const char *url, mode_t mode)
 {
-	SMBCFILE * file = find_fd(fd);
-        return smbc_getFunctionFtruncate(statcont)(statcont, file, size);
+	return (statcont->chmod)(statcont, url, mode);
 }
 
-int
-smbc_chmod(const char *url,
-           mode_t mode)
+int smbc_utimes(const char *fname, struct timeval *tbuf)
 {
-        return smbc_getFunctionChmod(statcont)(statcont, url, mode);
+        return (statcont->utimes)(statcont, fname, tbuf);
 }
 
-int
-smbc_utimes(const char *fname,
-            struct timeval *tbuf)
-{
-        return smbc_getFunctionUtimes(statcont)(statcont, fname, tbuf);
-}
-
 #ifdef HAVE_UTIME_H
-int
-smbc_utime(const char *fname,
-           struct utimbuf *utbuf)
+int smbc_utime(const char *fname, struct utimbuf *utbuf)
 {
         struct timeval tv[2];
-        
+
         if (utbuf == NULL)
-                return smbc_getFunctionUtimes(statcont)(statcont, fname, NULL);
-        
+                return (statcont->utimes)(statcont, fname, NULL);
+
         tv[0].tv_sec = utbuf->actime;
         tv[1].tv_sec = utbuf->modtime;
         tv[0].tv_usec = tv[1].tv_usec = 0;
-        
-        return smbc_getFunctionUtimes(statcont)(statcont, fname, tv);
+
+        return (statcont->utimes)(statcont, fname, tv);
 }
 #endif
 
-int
-smbc_setxattr(const char *fname,
-              const char *name,
-              const void *value,
-              size_t size,
-              int flags)
+int smbc_setxattr(const char *fname,
+                  const char *name,
+                  const void *value,
+                  size_t size,
+                  int flags)
 {
-        return smbc_getFunctionSetxattr(statcont)(statcont,
-                                                  fname, name,
-                                                  value, size, flags);
+        return (statcont->setxattr)(statcont, fname, name, value, size, flags);
 }
 
-int
-smbc_lsetxattr(const char *fname,
-               const char *name,
-               const void *value,
-               size_t size,
-               int flags)
+int smbc_lsetxattr(const char *fname,
+                   const char *name,
+                   const void *value,
+                   size_t size,
+                   int flags)
 {
-        return smbc_getFunctionSetxattr(statcont)(statcont,
-                                                  fname, name,
-                                                  value, size, flags);
+        return (statcont->setxattr)(statcont, fname, name, value, size, flags);
 }
 
-int
-smbc_fsetxattr(int fd,
-               const char *name,
-               const void *value,
-               size_t size,
-               int flags)
+int smbc_fsetxattr(int fd,
+                   const char *name,
+                   const void *value,
+                   size_t size,
+                   int flags)
 {
 	SMBCFILE * file = find_fd(fd);
 	if (file == NULL) {
 		errno = EBADF;
 		return -1;
 	}
-        return smbc_getFunctionSetxattr(statcont)(statcont,
-                                                  file->fname, name,
-                                                  value, size, flags);
+        return (statcont->setxattr)(statcont, file->fname,
+                                    name, value, size, flags);
 }
 
-int
-smbc_getxattr(const char *fname,
-              const char *name,
-              const void *value,
-              size_t size)
+int smbc_getxattr(const char *fname,
+                  const char *name,
+                  const void *value,
+                  size_t size)
 {
-        return smbc_getFunctionGetxattr(statcont)(statcont,
-                                                  fname, name,
-                                                  value, size);
+        return (statcont->getxattr)(statcont, fname, name, value, size);
 }
 
-int
-smbc_lgetxattr(const char *fname,
-               const char *name,
-               const void *value,
-               size_t size)
+int smbc_lgetxattr(const char *fname,
+                   const char *name,
+                   const void *value,
+                   size_t size)
 {
-        return smbc_getFunctionGetxattr(statcont)(statcont,
-                                                  fname, name,
-                                                  value, size);
+        return (statcont->getxattr)(statcont, fname, name, value, size);
 }
 
-int
-smbc_fgetxattr(int fd,
-               const char *name,
-               const void *value,
-               size_t size)
+int smbc_fgetxattr(int fd,
+                   const char *name,
+                   const void *value,
+                   size_t size)
 {
 	SMBCFILE * file = find_fd(fd);
 	if (file == NULL) {
 		errno = EBADF;
 		return -1;
 	}
-        return smbc_getFunctionGetxattr(statcont)(statcont,
-                                                  file->fname, name,
-                                                  value, size);
+        return (statcont->getxattr)(statcont, file->fname, name, value, size);
 }
 
-int
-smbc_removexattr(const char *fname,
-                 const char *name)
+int smbc_removexattr(const char *fname,
+                     const char *name)
 {
-        return smbc_getFunctionRemovexattr(statcont)(statcont, fname, name);
+        return (statcont->removexattr)(statcont, fname, name);
 }
 
-int
-smbc_lremovexattr(const char *fname,
-                  const char *name)
+int smbc_lremovexattr(const char *fname,
+                      const char *name)
 {
-        return smbc_getFunctionRemovexattr(statcont)(statcont, fname, name);
+        return (statcont->removexattr)(statcont, fname, name);
 }
 
-int
-smbc_fremovexattr(int fd,
-                  const char *name)
+int smbc_fremovexattr(int fd,
+                      const char *name)
 {
 	SMBCFILE * file = find_fd(fd);
 	if (file == NULL) {
 		errno = EBADF;
 		return -1;
 	}
-        return smbc_getFunctionRemovexattr(statcont)(statcont,
-                                                     file->fname, name);
+        return (statcont->removexattr)(statcont, file->fname, name);
 }
 
-int
-smbc_listxattr(const char *fname,
-               char *list,
-               size_t size)
+int smbc_listxattr(const char *fname,
+                   char *list,
+                   size_t size)
 {
-        return smbc_getFunctionListxattr(statcont)(statcont,
-                                                   fname, list, size);
+        return (statcont->listxattr)(statcont, fname, list, size);
 }
 
-int
-smbc_llistxattr(const char *fname,
-                char *list,
-                size_t size)
+int smbc_llistxattr(const char *fname,
+                    char *list,
+                    size_t size)
 {
-        return smbc_getFunctionListxattr(statcont)(statcont,
-                                                   fname, list, size);
+        return (statcont->listxattr)(statcont, fname, list, size);
 }
 
-int
-smbc_flistxattr(int fd,
-                char *list,
-                size_t size)
+int smbc_flistxattr(int fd,
+                    char *list,
+                    size_t size)
 {
 	SMBCFILE * file = find_fd(fd);
 	if (file == NULL) {
 		errno = EBADF;
 		return -1;
 	}
-        return smbc_getFunctionListxattr(statcont)(statcont,
-                                                   file->fname, list, size);
+        return (statcont->listxattr)(statcont, file->fname, list, size);
 }
 
-int
-smbc_print_file(const char *fname,
-                const char *printq)
+int smbc_print_file(const char *fname, const char *printq)
 {
-        return smbc_getFunctionPrintFile(statcont)(statcont, fname,
-                                                   statcont, printq);
+	return (statcont->print_file)(statcont, fname, statcont, printq);
 }
 
-int
-smbc_open_print_job(const char *fname)
+int smbc_open_print_job(const char *fname)
 {
-        SMBCFILE * file;
-        
-        file = smbc_getFunctionOpenPrintJob(statcont)(statcont, fname);
+	SMBCFILE * file = (statcont->open_print_job)(statcont, fname);
 	if (!file) return -1;
 	return file->cli_fd;
 }
 
-int
-smbc_list_print_jobs(const char *purl,
-                     smbc_list_print_job_fn fn)
+int smbc_list_print_jobs(const char *purl, smbc_list_print_job_fn fn)
 {
-        return smbc_getFunctionListPrintJobs(statcont)(statcont, purl, fn);
+	return (statcont->list_print_jobs)(statcont, purl, fn);
 }
 
-int
-smbc_unlink_print_job(const char *purl,
-                      int id)
+int smbc_unlink_print_job(const char *purl, int id)
 {
-        return smbc_getFunctionUnlinkPrintJob(statcont)(statcont, purl, id);
+	return (statcont->unlink_print_job)(statcont, purl, id);
 }
 
 

Deleted: branches/samba/upstream/source/libsmb/libsmb_context.c
===================================================================
--- branches/samba/upstream/source/libsmb/libsmb_context.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/libsmb_context.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,612 +0,0 @@
-/* 
-   Unix SMB/Netbios implementation.
-   SMB client library implementation
-   Copyright (C) Andrew Tridgell 1998
-   Copyright (C) Richard Sharpe 2000, 2002
-   Copyright (C) John Terpstra 2000
-   Copyright (C) Tom Jansen (Ninja ISD) 2002 
-   Copyright (C) Derrell Lipman 2003-2008
-   Copyright (C) Jeremy Allison 2007, 2008
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-#include "libsmbclient.h"
-#include "libsmb_internal.h"
-
-
-/*
- * Is the logging working / configfile read ? 
- */
-static int SMBC_initialized = 0;
-
-
-
-/*
- * Get a new empty handle to fill in with your own info
- */
-SMBCCTX *
-smbc_new_context(void)
-{
-        SMBCCTX *context;
-        
-        /*
-         * All newly added context fields should be placed in
-         * SMBC_internal_data, not directly in SMBCCTX.
-         */
-        context = SMB_MALLOC_P(SMBCCTX);
-        if (!context) {
-                errno = ENOMEM;
-                return NULL;
-        }
-        
-        ZERO_STRUCTP(context);
-        
-        context->internal = SMB_MALLOC_P(struct SMBC_internal_data);
-        if (!context->internal) {
-                SAFE_FREE(context);
-                errno = ENOMEM;
-                return NULL;
-        }
-        
-        /* Initialize the context and establish reasonable defaults */
-        ZERO_STRUCTP(context->internal);
-        
-        smbc_setDebug(context, 0);
-        smbc_setTimeout(context, 20000);
-        
-        smbc_setOptionFullTimeNames(context, False);
-        smbc_setOptionOpenShareMode(context, SMBC_SHAREMODE_DENY_NONE);
-        smbc_setOptionSmbEncryptionLevel(context, SMBC_ENCRYPTLEVEL_NONE);
-        smbc_setOptionBrowseMaxLmbCount(context, 3);    /* # LMBs to query */
-        smbc_setOptionUrlEncodeReaddirEntries(context, False);
-        smbc_setOptionOneSharePerServer(context, False);
-        
-        smbc_setFunctionAuthData(context, SMBC_get_auth_data);
-        smbc_setFunctionCheckServer(context, SMBC_check_server);
-        smbc_setFunctionRemoveUnusedServer(context, SMBC_remove_unused_server);
-        
-        smbc_setOptionUserData(context, NULL);
-        smbc_setFunctionAddCachedServer(context, SMBC_add_cached_server);
-        smbc_setFunctionGetCachedServer(context, SMBC_get_cached_server);
-        smbc_setFunctionRemoveCachedServer(context, SMBC_remove_cached_server);
-        smbc_setFunctionPurgeCachedServers(context, SMBC_purge_cached_servers);
-        
-        smbc_setFunctionOpen(context, SMBC_open_ctx);
-        smbc_setFunctionCreat(context, SMBC_creat_ctx);
-        smbc_setFunctionRead(context, SMBC_read_ctx);
-        smbc_setFunctionWrite(context, SMBC_write_ctx);
-        smbc_setFunctionClose(context, SMBC_close_ctx);
-        smbc_setFunctionUnlink(context, SMBC_unlink_ctx);
-        smbc_setFunctionRename(context, SMBC_rename_ctx);
-        smbc_setFunctionLseek(context, SMBC_lseek_ctx);
-        smbc_setFunctionFtruncate(context, SMBC_ftruncate_ctx);
-        smbc_setFunctionStat(context, SMBC_stat_ctx);
-        smbc_setFunctionFstat(context, SMBC_fstat_ctx);
-        smbc_setFunctionOpendir(context, SMBC_opendir_ctx);
-        smbc_setFunctionClosedir(context, SMBC_closedir_ctx);
-        smbc_setFunctionReaddir(context, SMBC_readdir_ctx);
-        smbc_setFunctionGetdents(context, SMBC_getdents_ctx);
-        smbc_setFunctionMkdir(context, SMBC_mkdir_ctx);
-        smbc_setFunctionRmdir(context, SMBC_rmdir_ctx);
-        smbc_setFunctionTelldir(context, SMBC_telldir_ctx);
-        smbc_setFunctionLseekdir(context, SMBC_lseekdir_ctx);
-        smbc_setFunctionFstatdir(context, SMBC_fstatdir_ctx);
-        smbc_setFunctionChmod(context, SMBC_chmod_ctx);
-        smbc_setFunctionUtimes(context, SMBC_utimes_ctx);
-        smbc_setFunctionSetxattr(context, SMBC_setxattr_ctx);
-        smbc_setFunctionGetxattr(context, SMBC_getxattr_ctx);
-        smbc_setFunctionRemovexattr(context, SMBC_removexattr_ctx);
-        smbc_setFunctionListxattr(context, SMBC_listxattr_ctx);
-        
-        smbc_setFunctionOpenPrintJob(context, SMBC_open_print_job_ctx);
-        smbc_setFunctionPrintFile(context, SMBC_print_file_ctx);
-        smbc_setFunctionListPrintJobs(context, SMBC_list_print_jobs_ctx);
-        smbc_setFunctionUnlinkPrintJob(context, SMBC_unlink_print_job_ctx);
-        
-        return context;
-}
-
-/*
- * Free a context
- *
- * Returns 0 on success. Otherwise returns 1, the SMBCCTX is _not_ freed
- * and thus you'll be leaking memory if not handled properly.
- *
- */
-int
-smbc_free_context(SMBCCTX *context,
-                  int shutdown_ctx)
-{
-        if (!context) {
-                errno = EBADF;
-                return 1;
-        }
-        
-        if (shutdown_ctx) {
-                SMBCFILE * f;
-                DEBUG(1,("Performing aggressive shutdown.\n"));
-                
-                f = context->internal->files;
-                while (f) {
-                        smbc_getFunctionClose(context)(context, f);
-                        f = f->next;
-                }
-                context->internal->files = NULL;
-                
-                /* First try to remove the servers the nice way. */
-                if (smbc_getFunctionPurgeCachedServers(context)(context)) {
-                        SMBCSRV * s;
-                        SMBCSRV * next;
-                        DEBUG(1, ("Could not purge all servers, "
-                                  "Nice way shutdown failed.\n"));
-                        s = context->internal->servers;
-                        while (s) {
-                                DEBUG(1, ("Forced shutdown: %p (fd=%d)\n",
-                                          s, s->cli->fd));
-                                cli_shutdown(s->cli);
-                                smbc_getFunctionRemoveCachedServer(context)(context,
-                                                                         s);
-                                next = s->next;
-                                DLIST_REMOVE(context->internal->servers, s);
-                                SAFE_FREE(s);
-                                s = next;
-                        }
-                        context->internal->servers = NULL;
-                }
-        }
-        else {
-                /* This is the polite way */
-                if (smbc_getFunctionPurgeCachedServers(context)(context)) {
-                        DEBUG(1, ("Could not purge all servers, "
-                                  "free_context failed.\n"));
-                        errno = EBUSY;
-                        return 1;
-                }
-                if (context->internal->servers) {
-                        DEBUG(1, ("Active servers in context, "
-                                  "free_context failed.\n"));
-                        errno = EBUSY;
-                        return 1;
-                }
-                if (context->internal->files) {
-                        DEBUG(1, ("Active files in context, "
-                                  "free_context failed.\n"));
-                        errno = EBUSY;
-                        return 1;
-                }
-        }
-        
-        /* Things we have to clean up */
-        free(smbc_getWorkgroup(context));
-        smbc_setWorkgroup(context, NULL);
-
-        free(smbc_getNetbiosName(context));
-        smbc_setNetbiosName(context, NULL);
-
-        free(smbc_getUser(context));
-        smbc_setUser(context, NULL);
-        
-        DEBUG(3, ("Context %p successfully freed\n", context));
-        SAFE_FREE(context);
-        return 0;
-}
-
-
-/**
- * Deprecated interface.  Do not use.  Instead, use the various
- * smbc_setOption*() functions or smbc_setFunctionAuthDataWithContext().
- */
-void
-smbc_option_set(SMBCCTX *context,
-                char *option_name,
-                ... /* option_value */)
-{
-        va_list ap;
-        union {
-                int i;
-                bool b;
-                smbc_get_auth_data_with_context_fn auth_fn;
-                void *v;
-                const char *s;
-        } option_value;
-        
-        va_start(ap, option_name);
-        
-        if (strcmp(option_name, "debug_to_stderr") == 0) {
-                option_value.b = (bool) va_arg(ap, int);
-                smbc_setOptionDebugToStderr(context, option_value.b);
-                
-        } else if (strcmp(option_name, "full_time_names") == 0) {
-                option_value.b = (bool) va_arg(ap, int);
-                smbc_setOptionFullTimeNames(context, option_value.b);
-                
-        } else if (strcmp(option_name, "open_share_mode") == 0) {
-                option_value.i = va_arg(ap, int);
-                smbc_setOptionOpenShareMode(context, option_value.i);
-                
-        } else if (strcmp(option_name, "auth_function") == 0) {
-                option_value.auth_fn =
-                        va_arg(ap, smbc_get_auth_data_with_context_fn);
-                smbc_setFunctionAuthDataWithContext(context, option_value.auth_fn);
-                
-        } else if (strcmp(option_name, "user_data") == 0) {
-                option_value.v = va_arg(ap, void *);
-                smbc_setOptionUserData(context, option_value.v);
-                
-        } else if (strcmp(option_name, "smb_encrypt_level") == 0) {
-                option_value.s = va_arg(ap, const char *);
-                if (strcmp(option_value.s, "none") == 0) {
-                        smbc_setOptionSmbEncryptionLevel(context,
-                                                         SMBC_ENCRYPTLEVEL_NONE);
-                } else if (strcmp(option_value.s, "request") == 0) {
-                        smbc_setOptionSmbEncryptionLevel(context,
-                                                         SMBC_ENCRYPTLEVEL_REQUEST);
-                } else if (strcmp(option_value.s, "require") == 0) {
-                        smbc_setOptionSmbEncryptionLevel(context,
-                                                         SMBC_ENCRYPTLEVEL_REQUIRE);
-                }
-                
-        } else if (strcmp(option_name, "browse_max_lmb_count") == 0) {
-                option_value.i = va_arg(ap, int);
-                smbc_setOptionBrowseMaxLmbCount(context, option_value.i);
-                
-        } else if (strcmp(option_name, "urlencode_readdir_entries") == 0) {
-                option_value.b = (bool) va_arg(ap, int);
-                smbc_setOptionUrlEncodeReaddirEntries(context, option_value.b);
-                
-        } else if (strcmp(option_name, "one_share_per_server") == 0) {
-                option_value.b = (bool) va_arg(ap, int);
-                smbc_setOptionOneSharePerServer(context, option_value.b);
-                
-        } else if (strcmp(option_name, "use_kerberos") == 0) {
-                option_value.b = (bool) va_arg(ap, int);
-                smbc_setOptionUseKerberos(context, option_value.b);
-                
-        } else if (strcmp(option_name, "fallback_after_kerberos") == 0) {
-                option_value.b = (bool) va_arg(ap, int);
-                smbc_setOptionFallbackAfterKerberos(context, option_value.b);
-                
-        } else if (strcmp(option_name, "no_auto_anonymous_login") == 0) {
-                option_value.b = (bool) va_arg(ap, int);
-                smbc_setOptionNoAutoAnonymousLogin(context, option_value.b);
-        }
-        
-        va_end(ap);
-}
-
-
-/*
- * Deprecated interface.  Do not use.  Instead, use the various
- * smbc_getOption*() functions.
- */
-void *
-smbc_option_get(SMBCCTX *context,
-                char *option_name)
-{
-        if (strcmp(option_name, "debug_stderr") == 0) {
-#if defined(__intptr_t_defined) || defined(HAVE_INTPTR_T)
-                return (void *) (intptr_t) smbc_getOptionDebugToStderr(context);
-#else
-                return (void *) smbc_getOptionDebugToStderr(context);
-#endif
-                
-        } else if (strcmp(option_name, "full_time_names") == 0) {
-#if defined(__intptr_t_defined) || defined(HAVE_INTPTR_T)
-                return (void *) (intptr_t) smbc_getOptionFullTimeNames(context);
-#else
-                return (void *) smbc_getOptionFullTimeNames(context);
-#endif
-                
-        } else if (strcmp(option_name, "open_share_mode") == 0) {
-#if defined(__intptr_t_defined) || defined(HAVE_INTPTR_T)
-                return (void *) (intptr_t) smbc_getOptionOpenShareMode(context);
-#else
-                return (void *) smbc_getOptionOpenShareMode(context);
-#endif
-                
-        } else if (strcmp(option_name, "auth_function") == 0) {
-                return (void *) smbc_getFunctionAuthDataWithContext(context);
-                
-        } else if (strcmp(option_name, "user_data") == 0) {
-                return smbc_getOptionUserData(context);
-                
-        } else if (strcmp(option_name, "smb_encrypt_level") == 0) {
-                switch(smbc_getOptionSmbEncryptionLevel(context))
-                {
-                case 0:
-                        return (void *) "none";
-                case 1:
-                        return (void *) "request";
-                case 2:
-                        return (void *) "require";
-                }
-                
-        } else if (strcmp(option_name, "smb_encrypt_on") == 0) {
-                SMBCSRV *s;
-                unsigned int num_servers = 0;
-                
-                for (s = context->internal->servers; s; s = s->next) {
-                        num_servers++;
-                        if (s->cli->trans_enc_state == NULL) {
-                                return (void *)false;
-                        }
-                }
-#if defined(__intptr_t_defined) || defined(HAVE_INTPTR_T)
-                return (void *) (intptr_t) (bool) (num_servers > 0);
-#else
-                return (void *) (bool) (num_servers > 0);
-#endif
-                
-        } else if (strcmp(option_name, "browse_max_lmb_count") == 0) {
-#if defined(__intptr_t_defined) || defined(HAVE_INTPTR_T)
-                return (void *) (intptr_t) smbc_getOptionBrowseMaxLmbCount(context);
-#else
-                return (void *) smbc_getOptionBrowseMaxLmbCount(context);
-#endif
-                
-        } else if (strcmp(option_name, "urlencode_readdir_entries") == 0) {
-#if defined(__intptr_t_defined) || defined(HAVE_INTPTR_T)
-                return (void *)(intptr_t) smbc_getOptionUrlEncodeReaddirEntries(context);
-#else
-                return (void *) (bool) smbc_getOptionUrlEncodeReaddirEntries(context);
-#endif
-                
-        } else if (strcmp(option_name, "one_share_per_server") == 0) {
-#if defined(__intptr_t_defined) || defined(HAVE_INTPTR_T)
-                return (void *) (intptr_t) smbc_getOptionOneSharePerServer(context);
-#else
-                return (void *) (bool) smbc_getOptionOneSharePerServer(context);
-#endif
-                
-        } else if (strcmp(option_name, "use_kerberos") == 0) {
-#if defined(__intptr_t_defined) || defined(HAVE_INTPTR_T)
-                return (void *) (intptr_t) smbc_getOptionUseKerberos(context);
-#else
-                return (void *) (bool) smbc_getOptionUseKerberos(context);
-#endif
-                
-        } else if (strcmp(option_name, "fallback_after_kerberos") == 0) {
-#if defined(__intptr_t_defined) || defined(HAVE_INTPTR_T)
-                return (void *)(intptr_t) smbc_getOptionFallbackAfterKerberos(context);
-#else
-                return (void *) (bool) smbc_getOptionFallbackAfterKerberos(context);
-#endif
-                
-        } else if (strcmp(option_name, "no_auto_anonymous_login") == 0) {
-#if defined(__intptr_t_defined) || defined(HAVE_INTPTR_T)
-                return (void *) (intptr_t) smbc_getOptionNoAutoAnonymousLogin(context);
-#else
-                return (void *) (bool) smbc_getOptionNoAutoAnonymousLogin(context);
-#endif
-        }
-        
-        return NULL;
-}
-
-
-/*
- * Initialize the library, etc.
- *
- * We accept a struct containing handle information.
- * valid values for info->debug from 0 to 100,
- * and insist that info->fn must be non-null.
- */
-SMBCCTX *
-smbc_init_context(SMBCCTX *context)
-{
-        int pid;
-        char *user = NULL;
-        char *home = NULL;
-        
-        if (!context) {
-                errno = EBADF;
-                return NULL;
-        }
-        
-        /* Do not initialise the same client twice */
-        if (context->internal->initialized) {
-                return NULL;
-        }
-        
-        if ((!smbc_getFunctionAuthData(context) &&
-             !smbc_getFunctionAuthDataWithContext(context)) ||
-            smbc_getDebug(context) < 0 ||
-            smbc_getDebug(context) > 100) {
-                
-                errno = EINVAL;
-                return NULL;
-                
-        }
-        
-        if (!SMBC_initialized) {
-                /*
-                 * Do some library-wide intializations the first time we get
-                 * called
-                 */
-                bool conf_loaded = False;
-                TALLOC_CTX *frame = talloc_stackframe();
-                
-                load_case_tables();
-                
-                setup_logging("libsmbclient", True);
-                if (context->internal->debug_stderr) {
-                        dbf = x_stderr;
-                        x_setbuf(x_stderr, NULL);
-                }
-                
-                /* Here we would open the smb.conf file if needed ... */
-                
-                lp_set_in_client(True);
-                
-                home = getenv("HOME");
-                if (home) {
-                        char *conf = NULL;
-                        if (asprintf(&conf, "%s/.smb/smb.conf", home) > 0) {
-                                if (lp_load(conf, True, False, False, True)) {
-                                        conf_loaded = True;
-                                } else {
-                                        DEBUG(5, ("Could not load config file: %s\n",
-                                                  conf));
-                                }
-                                SAFE_FREE(conf);
-                        }
-                }
-                
-                if (!conf_loaded) {
-                        /*
-                         * Well, if that failed, try the get_dyn_CONFIGFILE
-                         * Which points to the standard locn, and if that
-                         * fails, silently ignore it and use the internal
-                         * defaults ...
-                         */
-                        
-                        if (!lp_load(get_dyn_CONFIGFILE(), True, False, False, False)) {
-                                DEBUG(5, ("Could not load config file: %s\n",
-                                          get_dyn_CONFIGFILE()));
-                        } else if (home) {
-                                char *conf;
-                                /*
-                                 * We loaded the global config file.  Now lets
-                                 * load user-specific modifications to the
-                                 * global config.
-                                 */
-                                if (asprintf(&conf,
-                                             "%s/.smb/smb.conf.append",
-                                             home) > 0) {
-                                        if (!lp_load(conf, True, False, False, False)) {
-                                                DEBUG(10,
-                                                      ("Could not append config file: "
-                                                       "%s\n",
-                                                       conf));
-                                        }
-                                        SAFE_FREE(conf);
-                                }
-                        }
-                }
-                
-                load_interfaces();  /* Load the list of interfaces ... */
-                
-                reopen_logs();  /* Get logging working ... */
-                
-                /*
-                 * Block SIGPIPE (from lib/util_sock.c: write())
-                 * It is not needed and should not stop execution
-                 */
-                BlockSignals(True, SIGPIPE);
-                
-                /* Done with one-time initialisation */
-                SMBC_initialized = 1;
-                
-                TALLOC_FREE(frame);
-        }
-        
-        if (!smbc_getUser(context)) {
-                /*
-                 * FIXME: Is this the best way to get the user info?
-                 */
-                user = getenv("USER");
-                /* walk around as "guest" if no username can be found */
-                if (!user) {
-                        user = SMB_STRDUP("guest");
-                } else {
-                        user = SMB_STRDUP(user);
-                }
-
-                if (!user) {
-                        errno = ENOMEM;
-                        return NULL;
-                }
-
-                smbc_setUser(context, user);
-        }
-        
-        if (!smbc_getNetbiosName(context)) {
-                /*
-                 * We try to get our netbios name from the config. If that
-                 * fails we fall back on constructing our netbios name from
-                 * our hostname etc
-                 */
-                char *netbios_name;
-                if (global_myname()) {
-                        netbios_name = SMB_STRDUP(global_myname());
-                } else {
-                        /*
-                         * Hmmm, I want to get hostname as well, but I am too
-                         * lazy for the moment
-                         */
-                        pid = sys_getpid();
-                        netbios_name = (char *)SMB_MALLOC(17);
-                        if (!netbios_name) {
-                                errno = ENOMEM;
-                                return NULL;
-                        }
-                        slprintf(netbios_name, 16,
-                                 "smbc%s%d", smbc_getUser(context), pid);
-                }
-
-                if (!netbios_name) {
-                        errno = ENOMEM;
-                        return NULL;
-                }
-                
-                smbc_setNetbiosName(context, netbios_name);
-        }
-        
-        DEBUG(1, ("Using netbios name %s.\n", smbc_getNetbiosName(context)));
-        
-        if (!smbc_getWorkgroup(context)) {
-                char *workgroup;
-
-                if (lp_workgroup()) {
-                        workgroup = SMB_STRDUP(lp_workgroup());
-                }
-                else {
-                        /* TODO: Think about a decent default workgroup */
-                        workgroup = SMB_STRDUP("samba");
-                }
-
-                if (!workgroup) {
-                        errno = ENOMEM;
-                        return NULL;
-                }
-
-                smbc_setWorkgroup(context, workgroup);
-        }
-        
-        DEBUG(1, ("Using workgroup %s.\n", smbc_getWorkgroup(context)));
-        
-        /* shortest timeout is 1 second */
-        if (smbc_getTimeout(context) > 0 && smbc_getTimeout(context) < 1000)
-                smbc_setTimeout(context, 1000);
-        
-        /*
-         * FIXME: Should we check the function pointers here?
-         */
-        
-        context->internal->initialized = True;
-        
-        return context;
-}
-
-
-/* Return the verion of samba, and thus libsmbclient */
-const char *
-smbc_version(void)
-{
-        return samba_version_string();
-}
-
-

Deleted: branches/samba/upstream/source/libsmb/libsmb_dir.c
===================================================================
--- branches/samba/upstream/source/libsmb/libsmb_dir.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/libsmb_dir.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,1948 +0,0 @@
-/*
-   Unix SMB/Netbios implementation.
-   SMB client library implementation
-   Copyright (C) Andrew Tridgell 1998
-   Copyright (C) Richard Sharpe 2000, 2002
-   Copyright (C) John Terpstra 2000
-   Copyright (C) Tom Jansen (Ninja ISD) 2002
-   Copyright (C) Derrell Lipman 2003-2008
-   Copyright (C) Jeremy Allison 2007, 2008
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-#include "libsmbclient.h"
-#include "libsmb_internal.h"
-
-
-/*
- * Routine to open a directory
- * We accept the URL syntax explained in SMBC_parse_path(), above.
- */
-
-static void
-remove_dir(SMBCFILE *dir)
-{
-	struct smbc_dir_list *d,*f;
-
-	d = dir->dir_list;
-	while (d) {
-
-		f = d; d = d->next;
-
-		SAFE_FREE(f->dirent);
-		SAFE_FREE(f);
-
-	}
-
-	dir->dir_list = dir->dir_end = dir->dir_next = NULL;
-
-}
-
-static int
-add_dirent(SMBCFILE *dir,
-           const char *name,
-           const char *comment,
-           uint32 type)
-{
-	struct smbc_dirent *dirent;
-	int size;
-        int name_length = (name == NULL ? 0 : strlen(name));
-        int comment_len = (comment == NULL ? 0 : strlen(comment));
-
-	/*
-	 * Allocate space for the dirent, which must be increased by the
-	 * size of the name and the comment and 1 each for the null terminator.
-	 */
-
-	size = sizeof(struct smbc_dirent) + name_length + comment_len + 2;
-
-	dirent = (struct smbc_dirent *)SMB_MALLOC(size);
-
-	if (!dirent) {
-
-		dir->dir_error = ENOMEM;
-		return -1;
-
-	}
-
-	ZERO_STRUCTP(dirent);
-
-	if (dir->dir_list == NULL) {
-
-		dir->dir_list = SMB_MALLOC_P(struct smbc_dir_list);
-		if (!dir->dir_list) {
-
-			SAFE_FREE(dirent);
-			dir->dir_error = ENOMEM;
-			return -1;
-
-		}
-		ZERO_STRUCTP(dir->dir_list);
-
-		dir->dir_end = dir->dir_next = dir->dir_list;
-	}
-	else {
-
-		dir->dir_end->next = SMB_MALLOC_P(struct smbc_dir_list);
-
-		if (!dir->dir_end->next) {
-
-			SAFE_FREE(dirent);
-			dir->dir_error = ENOMEM;
-			return -1;
-
-		}
-		ZERO_STRUCTP(dir->dir_end->next);
-
-		dir->dir_end = dir->dir_end->next;
-	}
-
-	dir->dir_end->next = NULL;
-	dir->dir_end->dirent = dirent;
-
-	dirent->smbc_type = type;
-	dirent->namelen = name_length;
-	dirent->commentlen = comment_len;
-	dirent->dirlen = size;
-
-        /*
-         * dirent->namelen + 1 includes the null (no null termination needed)
-         * Ditto for dirent->commentlen.
-         * The space for the two null bytes was allocated.
-         */
-	strncpy(dirent->name, (name?name:""), dirent->namelen + 1);
-	dirent->comment = (char *)(&dirent->name + dirent->namelen + 1);
-	strncpy(dirent->comment, (comment?comment:""), dirent->commentlen + 1);
-
-	return 0;
-
-}
-
-static void
-list_unique_wg_fn(const char *name,
-                  uint32 type,
-                  const char *comment,
-                  void *state)
-{
-	SMBCFILE *dir = (SMBCFILE *)state;
-        struct smbc_dir_list *dir_list;
-        struct smbc_dirent *dirent;
-	int dirent_type;
-        int do_remove = 0;
-
-	dirent_type = dir->dir_type;
-
-	if (add_dirent(dir, name, comment, dirent_type) < 0) {
-
-		/* An error occurred, what do we do? */
-		/* FIXME: Add some code here */
-	}
-
-        /* Point to the one just added */
-        dirent = dir->dir_end->dirent;
-
-        /* See if this was a duplicate */
-        for (dir_list = dir->dir_list;
-             dir_list != dir->dir_end;
-             dir_list = dir_list->next) {
-                if (! do_remove &&
-                    strcmp(dir_list->dirent->name, dirent->name) == 0) {
-                        /* Duplicate.  End end of list need to be removed. */
-                        do_remove = 1;
-                }
-
-                if (do_remove && dir_list->next == dir->dir_end) {
-                        /* Found the end of the list.  Remove it. */
-                        dir->dir_end = dir_list;
-                        free(dir_list->next);
-                        free(dirent);
-                        dir_list->next = NULL;
-                        break;
-                }
-        }
-}
-
-static void
-list_fn(const char *name,
-        uint32 type,
-        const char *comment,
-        void *state)
-{
-	SMBCFILE *dir = (SMBCFILE *)state;
-	int dirent_type;
-
-	/*
-         * We need to process the type a little ...
-         *
-         * Disk share     = 0x00000000
-         * Print share    = 0x00000001
-         * Comms share    = 0x00000002 (obsolete?)
-         * IPC$ share     = 0x00000003
-         *
-         * administrative shares:
-         * ADMIN$, IPC$, C$, D$, E$ ...  are type |= 0x80000000
-         */
-
-	if (dir->dir_type == SMBC_FILE_SHARE) {
-		switch (type) {
-                case 0 | 0x80000000:
-		case 0:
-			dirent_type = SMBC_FILE_SHARE;
-			break;
-
-		case 1:
-			dirent_type = SMBC_PRINTER_SHARE;
-			break;
-
-		case 2:
-			dirent_type = SMBC_COMMS_SHARE;
-			break;
-
-                case 3 | 0x80000000:
-		case 3:
-			dirent_type = SMBC_IPC_SHARE;
-			break;
-
-		default:
-			dirent_type = SMBC_FILE_SHARE; /* FIXME, error? */
-			break;
-		}
-	}
-	else {
-                dirent_type = dir->dir_type;
-        }
-
-	if (add_dirent(dir, name, comment, dirent_type) < 0) {
-
-		/* An error occurred, what do we do? */
-		/* FIXME: Add some code here */
-
-	}
-}
-
-static void
-dir_list_fn(const char *mnt,
-            file_info *finfo,
-            const char *mask,
-            void *state)
-{
-
-	if (add_dirent((SMBCFILE *)state, finfo->name, "",
-		       (finfo->mode&aDIR?SMBC_DIR:SMBC_FILE)) < 0) {
-
-		/* Handle an error ... */
-
-		/* FIXME: Add some code ... */
-
-	}
-
-}
-
-static int
-net_share_enum_rpc(struct cli_state *cli,
-                   void (*fn)(const char *name,
-                              uint32 type,
-                              const char *comment,
-                              void *state),
-                   void *state)
-{
-        int i;
-	WERROR result;
-	uint32 preferred_len = 0xffffffff;
-        uint32 type;
-	struct srvsvc_NetShareInfoCtr info_ctr;
-	struct srvsvc_NetShareCtr1 ctr1;
-	fstring name = "";
-        fstring comment = "";
-	struct rpc_pipe_client *pipe_hnd;
-        NTSTATUS nt_status;
-	uint32_t resume_handle = 0;
-	uint32_t total_entries = 0;
-
-        /* Open the server service pipe */
-        pipe_hnd = cli_rpc_pipe_open_noauth(cli, PI_SRVSVC, &nt_status);
-        if (!pipe_hnd) {
-                DEBUG(1, ("net_share_enum_rpc pipe open fail!\n"));
-                return -1;
-        }
-
-	ZERO_STRUCT(info_ctr);
-	ZERO_STRUCT(ctr1);
-
-	info_ctr.level = 1;
-	info_ctr.ctr.ctr1 = &ctr1;
-
-        /* Issue the NetShareEnum RPC call and retrieve the response */
-	nt_status = rpccli_srvsvc_NetShareEnumAll(pipe_hnd, talloc_tos(),
-						  pipe_hnd->cli->desthost,
-						  &info_ctr,
-						  preferred_len,
-						  &total_entries,
-						  &resume_handle,
-						  &result);
-
-        /* Was it successful? */
-	if (!NT_STATUS_IS_OK(nt_status) || !W_ERROR_IS_OK(result) ||
-	    total_entries == 0) {
-                /*  Nope.  Go clean up. */
-		goto done;
-        }
-
-        /* For each returned entry... */
-        for (i = 0; i < total_entries; i++) {
-
-                /* pull out the share name */
-		fstrcpy(name, info_ctr.ctr.ctr1->array[i].name);
-
-                /* pull out the share's comment */
-		fstrcpy(comment, info_ctr.ctr.ctr1->array[i].comment);
-
-                /* Get the type value */
-                type = info_ctr.ctr.ctr1->array[i].type;
-
-                /* Add this share to the list */
-                (*fn)(name, type, comment, state);
-        }
-
-done:
-        /* Close the server service pipe */
-        cli_rpc_pipe_close(pipe_hnd);
-
-        /* Tell 'em if it worked */
-        return W_ERROR_IS_OK(result) ? 0 : -1;
-}
-
-
-/*
- * Verify that the options specified in a URL are valid
- */
-int
-SMBC_check_options(char *server,
-                   char *share,
-                   char *path,
-                   char *options)
-{
-        DEBUG(4, ("SMBC_check_options(): server='%s' share='%s' "
-                  "path='%s' options='%s'\n",
-                  server, share, path, options));
-
-        /* No options at all is always ok */
-        if (! *options) return 0;
-
-        /* Currently, we don't support any options. */
-        return -1;
-}
-
-
-SMBCFILE *
-SMBC_opendir_ctx(SMBCCTX *context,
-                 const char *fname)
-{
-        int saved_errno;
-	char *server = NULL;
-        char *share = NULL;
-        char *user = NULL;
-        char *password = NULL;
-        char *options = NULL;
-	char *workgroup = NULL;
-	char *path = NULL;
-        uint16 mode;
-        char *p = NULL;
-	SMBCSRV *srv  = NULL;
-	SMBCFILE *dir = NULL;
-	struct sockaddr_storage rem_ss;
-	TALLOC_CTX *frame = talloc_stackframe();
-
-	if (!context || !context->internal->initialized) {
-	        DEBUG(4, ("no valid context\n"));
-		errno = EINVAL + 8192;
-		TALLOC_FREE(frame);
-		return NULL;
-
-	}
-
-	if (!fname) {
-		DEBUG(4, ("no valid fname\n"));
-		errno = EINVAL + 8193;
-		TALLOC_FREE(frame);
-		return NULL;
-	}
-
-	if (SMBC_parse_path(frame,
-                            context,
-                            fname,
-                            &workgroup,
-                            &server,
-                            &share,
-                            &path,
-                            &user,
-                            &password,
-                            &options)) {
-	        DEBUG(4, ("no valid path\n"));
-		errno = EINVAL + 8194;
-		TALLOC_FREE(frame);
-		return NULL;
-	}
-
-	DEBUG(4, ("parsed path: fname='%s' server='%s' share='%s' "
-                  "path='%s' options='%s'\n",
-                  fname, server, share, path, options));
-
-        /* Ensure the options are valid */
-        if (SMBC_check_options(server, share, path, options)) {
-                DEBUG(4, ("unacceptable options (%s)\n", options));
-                errno = EINVAL + 8195;
-		TALLOC_FREE(frame);
-                return NULL;
-        }
-
-	if (!user || user[0] == (char)0) {
-		user = talloc_strdup(frame, smbc_getUser(context));
-		if (!user) {
-			errno = ENOMEM;
-			TALLOC_FREE(frame);
-			return NULL;
-		}
-	}
-
-	dir = SMB_MALLOC_P(SMBCFILE);
-
-	if (!dir) {
-		errno = ENOMEM;
-		TALLOC_FREE(frame);
-		return NULL;
-	}
-
-	ZERO_STRUCTP(dir);
-
-	dir->cli_fd   = 0;
-	dir->fname    = SMB_STRDUP(fname);
-	dir->srv      = NULL;
-	dir->offset   = 0;
-	dir->file     = False;
-	dir->dir_list = dir->dir_next = dir->dir_end = NULL;
-
-	if (server[0] == (char)0) {
-
-                int i;
-                int count;
-                int max_lmb_count;
-                struct ip_service *ip_list;
-                struct ip_service server_addr;
-                struct user_auth_info u_info;
-
-		if (share[0] != (char)0 || path[0] != (char)0) {
-
-			errno = EINVAL + 8196;
-			if (dir) {
-				SAFE_FREE(dir->fname);
-				SAFE_FREE(dir);
-			}
-			TALLOC_FREE(frame);
-			return NULL;
-		}
-
-                /* Determine how many local master browsers to query */
-                max_lmb_count = (smbc_getOptionBrowseMaxLmbCount(context) == 0
-                                 ? INT_MAX
-                                 : smbc_getOptionBrowseMaxLmbCount(context));
-
-		memset(&u_info, '\0', sizeof(u_info));
-		u_info.username = talloc_strdup(frame,user);
-		u_info.password = talloc_strdup(frame,password);
-		if (!u_info.username || !u_info.password) {
-			if (dir) {
-				SAFE_FREE(dir->fname);
-				SAFE_FREE(dir);
-			}
-			TALLOC_FREE(frame);
-			return NULL;
-		}
-
-		/*
-                 * We have server and share and path empty but options
-                 * requesting that we scan all master browsers for their list
-                 * of workgroups/domains.  This implies that we must first try
-                 * broadcast queries to find all master browsers, and if that
-                 * doesn't work, then try our other methods which return only
-                 * a single master browser.
-                 */
-
-                ip_list = NULL;
-                if (!NT_STATUS_IS_OK(name_resolve_bcast(MSBROWSE, 1, &ip_list,
-                                                        &count)))
-		{
-
-                        SAFE_FREE(ip_list);
-
-                        if (!find_master_ip(workgroup, &server_addr.ss)) {
-
-				if (dir) {
-					SAFE_FREE(dir->fname);
-					SAFE_FREE(dir);
-				}
-                                errno = ENOENT;
-				TALLOC_FREE(frame);
-                                return NULL;
-                        }
-
-			ip_list = (struct ip_service *)memdup(
-				&server_addr, sizeof(server_addr));
-			if (ip_list == NULL) {
-				errno = ENOMEM;
-				TALLOC_FREE(frame);
-				return NULL;
-			}
-                        count = 1;
-                }
-
-                for (i = 0; i < count && i < max_lmb_count; i++) {
-			char addr[INET6_ADDRSTRLEN];
-			char *wg_ptr = NULL;
-                	struct cli_state *cli = NULL;
-
-			print_sockaddr(addr, sizeof(addr), &ip_list[i].ss);
-                        DEBUG(99, ("Found master browser %d of %d: %s\n",
-                                   i+1, MAX(count, max_lmb_count),
-                                   addr));
-
-                        cli = get_ipc_connect_master_ip(talloc_tos(),
-							&ip_list[i],
-                                                        &u_info,
-							&wg_ptr);
-			/* cli == NULL is the master browser refused to talk or
-			   could not be found */
-			if (!cli) {
-				continue;
-			}
-
-			workgroup = talloc_strdup(frame, wg_ptr);
-			server = talloc_strdup(frame, cli->desthost);
-
-                        cli_shutdown(cli);
-
-			if (!workgroup || !server) {
-				errno = ENOMEM;
-				TALLOC_FREE(frame);
-				return NULL;
-			}
-
-                        DEBUG(4, ("using workgroup %s %s\n",
-                                  workgroup, server));
-
-                        /*
-                         * For each returned master browser IP address, get a
-                         * connection to IPC$ on the server if we do not
-                         * already have one, and determine the
-                         * workgroups/domains that it knows about.
-                         */
-
-                        srv = SMBC_server(frame, context, True, server, "IPC$",
-                                          &workgroup, &user, &password);
-                        if (!srv) {
-                                continue;
-                        }
-
-                        dir->srv = srv;
-                        dir->dir_type = SMBC_WORKGROUP;
-
-                        /* Now, list the stuff ... */
-
-                        if (!cli_NetServerEnum(srv->cli,
-                                               workgroup,
-                                               SV_TYPE_DOMAIN_ENUM,
-                                               list_unique_wg_fn,
-                                               (void *)dir)) {
-                                continue;
-                        }
-                }
-
-                SAFE_FREE(ip_list);
-        } else {
-                /*
-                 * Server not an empty string ... Check the rest and see what
-                 * gives
-                 */
-		if (*share == '\0') {
-			if (*path != '\0') {
-
-                                /* Should not have empty share with path */
-				errno = EINVAL + 8197;
-				if (dir) {
-					SAFE_FREE(dir->fname);
-					SAFE_FREE(dir);
-				}
-				TALLOC_FREE(frame);
-				return NULL;
-
-			}
-
-			/*
-                         * We don't know if <server> is really a server name
-                         * or is a workgroup/domain name.  If we already have
-                         * a server structure for it, we'll use it.
-                         * Otherwise, check to see if <server><1D>,
-                         * <server><1B>, or <server><20> translates.  We check
-                         * to see if <server> is an IP address first.
-                         */
-
-                        /*
-                         * See if we have an existing server.  Do not
-                         * establish a connection if one does not already
-                         * exist.
-                         */
-                        srv = SMBC_server(frame, context, False,
-                                          server, "IPC$",
-                                          &workgroup, &user, &password);
-
-                        /*
-                         * If no existing server and not an IP addr, look for
-                         * LMB or DMB
-                         */
-			if (!srv &&
-                            !is_ipaddress(server) &&
-			    (resolve_name(server, &rem_ss, 0x1d) ||   /* LMB */
-                             resolve_name(server, &rem_ss, 0x1b) )) { /* DMB */
-
-				fstring buserver;
-
-				dir->dir_type = SMBC_SERVER;
-
-				/*
-				 * Get the backup list ...
-				 */
-				if (!name_status_find(server, 0, 0,
-                                                      &rem_ss, buserver)) {
-
-                                        DEBUG(0,("Could not get name of "
-                                                 "local/domain master browser "
-                                                 "for server %s\n", server));
-					if (dir) {
-						SAFE_FREE(dir->fname);
-						SAFE_FREE(dir);
-					}
-					errno = EPERM;
-					TALLOC_FREE(frame);
-					return NULL;
-
-				}
-
-				/*
-                                 * Get a connection to IPC$ on the server if
-                                 * we do not already have one
-                                 */
-				srv = SMBC_server(frame, context, True,
-                                                  buserver, "IPC$",
-                                                  &workgroup,
-                                                  &user, &password);
-				if (!srv) {
-				        DEBUG(0, ("got no contact to IPC$\n"));
-					if (dir) {
-						SAFE_FREE(dir->fname);
-						SAFE_FREE(dir);
-					}
-					TALLOC_FREE(frame);
-					return NULL;
-
-				}
-
-				dir->srv = srv;
-
-				/* Now, list the servers ... */
-				if (!cli_NetServerEnum(srv->cli, server,
-                                                       0x0000FFFE, list_fn,
-						       (void *)dir)) {
-
-					if (dir) {
-						SAFE_FREE(dir->fname);
-						SAFE_FREE(dir);
-					}
-					TALLOC_FREE(frame);
-					return NULL;
-				}
-			} else if (srv ||
-                                   (resolve_name(server, &rem_ss, 0x20))) {
-
-                                /*
-                                 * If we hadn't found the server, get one now
-                                 */
-                                if (!srv) {
-                                        srv = SMBC_server(frame, context, True,
-                                                          server, "IPC$",
-                                                          &workgroup,
-                                                          &user, &password);
-                                }
-
-                                if (!srv) {
-                                        if (dir) {
-                                                SAFE_FREE(dir->fname);
-                                                SAFE_FREE(dir);
-                                        }
-					TALLOC_FREE(frame);
-                                        return NULL;
-
-                                }
-
-                                dir->dir_type = SMBC_FILE_SHARE;
-                                dir->srv = srv;
-
-                                /* List the shares ... */
-
-                                if (net_share_enum_rpc(
-                                            srv->cli,
-                                            list_fn,
-                                            (void *) dir) < 0 &&
-                                    cli_RNetShareEnum(
-                                            srv->cli,
-                                            list_fn,
-                                            (void *)dir) < 0) {
-
-                                        errno = cli_errno(srv->cli);
-                                        if (dir) {
-                                                SAFE_FREE(dir->fname);
-                                                SAFE_FREE(dir);
-                                        }
-					TALLOC_FREE(frame);
-                                        return NULL;
-
-                                }
-                        } else {
-                                /* Neither the workgroup nor server exists */
-                                errno = ECONNREFUSED;
-                                if (dir) {
-                                        SAFE_FREE(dir->fname);
-                                        SAFE_FREE(dir);
-                                }
-				TALLOC_FREE(frame);
-                                return NULL;
-			}
-
-		}
-		else {
-                        /*
-                         * The server and share are specified ... work from
-                         * there ...
-                         */
-			char *targetpath;
-			struct cli_state *targetcli;
-
-			/* We connect to the server and list the directory */
-			dir->dir_type = SMBC_FILE_SHARE;
-
-			srv = SMBC_server(frame, context, True, server, share,
-                                          &workgroup, &user, &password);
-
-			if (!srv) {
-				if (dir) {
-					SAFE_FREE(dir->fname);
-					SAFE_FREE(dir);
-				}
-				TALLOC_FREE(frame);
-				return NULL;
-			}
-
-			dir->srv = srv;
-
-			/* Now, list the files ... */
-
-                        p = path + strlen(path);
-			path = talloc_asprintf_append(path, "\\*");
-			if (!path) {
-				if (dir) {
-					SAFE_FREE(dir->fname);
-					SAFE_FREE(dir);
-				}
-				TALLOC_FREE(frame);
-				return NULL;
-			}
-
-			if (!cli_resolve_path(frame, "", srv->cli, path,
-                                              &targetcli, &targetpath)) {
-				d_printf("Could not resolve %s\n", path);
-				if (dir) {
-					SAFE_FREE(dir->fname);
-					SAFE_FREE(dir);
-				}
-				TALLOC_FREE(frame);
-				return NULL;
-			}
-
-			if (cli_list(targetcli, targetpath,
-                                     aDIR | aSYSTEM | aHIDDEN,
-                                     dir_list_fn, (void *)dir) < 0) {
-
-				if (dir) {
-					SAFE_FREE(dir->fname);
-					SAFE_FREE(dir);
-				}
-				saved_errno = SMBC_errno(context, targetcli);
-
-                                if (saved_errno == EINVAL) {
-                                        /*
-                                         * See if they asked to opendir
-                                         * something other than a directory.
-                                         * If so, the converted error value we
-                                         * got would have been EINVAL rather
-                                         * than ENOTDIR.
-                                         */
-                                        *p = '\0'; /* restore original path */
-
-                                        if (SMBC_getatr(context, srv, path,
-                                                        &mode, NULL,
-                                                        NULL, NULL, NULL, NULL,
-                                                        NULL) &&
-                                            ! IS_DOS_DIR(mode)) {
-
-                                                /* It is.  Correct the error value */
-                                                saved_errno = ENOTDIR;
-                                        }
-                                }
-
-                                /*
-                                 * If there was an error and the server is no
-                                 * good any more...
-                                 */
-                                if (cli_is_error(targetcli) &&
-                                    smbc_getFunctionCheckServer(context)(context, srv)) {
-
-                                        /* ... then remove it. */
-                                        if (smbc_getFunctionRemoveUnusedServer(context)(context,
-                                                                                        srv)) {
-                                                /*
-                                                 * We could not remove the
-                                                 * server completely, remove
-                                                 * it from the cache so we
-                                                 * will not get it again. It
-                                                 * will be removed when the
-                                                 * last file/dir is closed.
-                                                 */
-                                                smbc_getFunctionRemoveCachedServer(context)(context, srv);
-                                        }
-                                }
-
-                                errno = saved_errno;
-				TALLOC_FREE(frame);
-				return NULL;
-			}
-		}
-
-	}
-
-	DLIST_ADD(context->internal->files, dir);
-	TALLOC_FREE(frame);
-	return dir;
-
-}
-
-/*
- * Routine to close a directory
- */
-
-int
-SMBC_closedir_ctx(SMBCCTX *context,
-                  SMBCFILE *dir)
-{
-	TALLOC_CTX *frame = talloc_stackframe();
-
-	if (!context || !context->internal->initialized) {
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-	}
-
-	if (!dir || !SMBC_dlist_contains(context->internal->files, dir)) {
-		errno = EBADF;
-		TALLOC_FREE(frame);
-		return -1;
-	}
-
-	remove_dir(dir); /* Clean it up */
-
-	DLIST_REMOVE(context->internal->files, dir);
-
-	if (dir) {
-
-		SAFE_FREE(dir->fname);
-		SAFE_FREE(dir);    /* Free the space too */
-	}
-
-	TALLOC_FREE(frame);
-	return 0;
-
-}
-
-static void
-smbc_readdir_internal(SMBCCTX * context,
-                      struct smbc_dirent *dest,
-                      struct smbc_dirent *src,
-                      int max_namebuf_len)
-{
-        if (smbc_getOptionUrlEncodeReaddirEntries(context)) {
-
-                /* url-encode the name.  get back remaining buffer space */
-                max_namebuf_len =
-                        SMBC_urlencode(dest->name, src->name, max_namebuf_len);
-
-                /* We now know the name length */
-                dest->namelen = strlen(dest->name);
-
-                /* Save the pointer to the beginning of the comment */
-                dest->comment = dest->name + dest->namelen + 1;
-
-                /* Copy the comment */
-                strncpy(dest->comment, src->comment, max_namebuf_len - 1);
-                dest->comment[max_namebuf_len - 1] = '\0';
-
-                /* Save other fields */
-                dest->smbc_type = src->smbc_type;
-                dest->commentlen = strlen(dest->comment);
-                dest->dirlen = ((dest->comment + dest->commentlen + 1) -
-                                (char *) dest);
-        } else {
-
-                /* No encoding.  Just copy the entry as is. */
-                memcpy(dest, src, src->dirlen);
-                dest->comment = (char *)(&dest->name + src->namelen + 1);
-        }
-
-}
-
-/*
- * Routine to get a directory entry
- */
-
-struct smbc_dirent *
-SMBC_readdir_ctx(SMBCCTX *context,
-                 SMBCFILE *dir)
-{
-        int maxlen;
-	struct smbc_dirent *dirp, *dirent;
-	TALLOC_CTX *frame = talloc_stackframe();
-
-	/* Check that all is ok first ... */
-
-	if (!context || !context->internal->initialized) {
-
-		errno = EINVAL;
-                DEBUG(0, ("Invalid context in SMBC_readdir_ctx()\n"));
-		TALLOC_FREE(frame);
-		return NULL;
-
-	}
-
-	if (!dir || !SMBC_dlist_contains(context->internal->files, dir)) {
-
-		errno = EBADF;
-                DEBUG(0, ("Invalid dir in SMBC_readdir_ctx()\n"));
-		TALLOC_FREE(frame);
-		return NULL;
-
-	}
-
-	if (dir->file != False) { /* FIXME, should be dir, perhaps */
-
-		errno = ENOTDIR;
-                DEBUG(0, ("Found file vs directory in SMBC_readdir_ctx()\n"));
-		TALLOC_FREE(frame);
-		return NULL;
-
-	}
-
-	if (!dir->dir_next) {
-		TALLOC_FREE(frame);
-		return NULL;
-        }
-
-        dirent = dir->dir_next->dirent;
-        if (!dirent) {
-
-                errno = ENOENT;
-		TALLOC_FREE(frame);
-                return NULL;
-
-        }
-
-        dirp = (struct smbc_dirent *)context->internal->dirent;
-        maxlen = (sizeof(context->internal->dirent) -
-                  sizeof(struct smbc_dirent));
-
-        smbc_readdir_internal(context, dirp, dirent, maxlen);
-
-        dir->dir_next = dir->dir_next->next;
-
-	TALLOC_FREE(frame);
-        return dirp;
-}
-
-/*
- * Routine to get directory entries
- */
-
-int
-SMBC_getdents_ctx(SMBCCTX *context,
-                  SMBCFILE *dir,
-                  struct smbc_dirent *dirp,
-                  int count)
-{
-	int rem = count;
-        int reqd;
-        int maxlen;
-	char *ndir = (char *)dirp;
-	struct smbc_dir_list *dirlist;
-	TALLOC_CTX *frame = talloc_stackframe();
-
-	/* Check that all is ok first ... */
-
-	if (!context || !context->internal->initialized) {
-
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-
-	}
-
-	if (!dir || !SMBC_dlist_contains(context->internal->files, dir)) {
-
-		errno = EBADF;
-		TALLOC_FREE(frame);
-		return -1;
-
-	}
-
-	if (dir->file != False) { /* FIXME, should be dir, perhaps */
-
-		errno = ENOTDIR;
-		TALLOC_FREE(frame);
-		return -1;
-
-	}
-
-	/*
-	 * Now, retrieve the number of entries that will fit in what was passed
-	 * We have to figure out if the info is in the list, or we need to
-	 * send a request to the server to get the info.
-	 */
-
-	while ((dirlist = dir->dir_next)) {
-		struct smbc_dirent *dirent;
-
-		if (!dirlist->dirent) {
-
-			errno = ENOENT;  /* Bad error */
-			TALLOC_FREE(frame);
-			return -1;
-
-		}
-
-                /* Do urlencoding of next entry, if so selected */
-                dirent = (struct smbc_dirent *)context->internal->dirent;
-                maxlen = (sizeof(context->internal->dirent) -
-                          sizeof(struct smbc_dirent));
-                smbc_readdir_internal(context, dirent,
-                                      dirlist->dirent, maxlen);
-
-                reqd = dirent->dirlen;
-
-		if (rem < reqd) {
-
-			if (rem < count) { /* We managed to copy something */
-
-				errno = 0;
-				TALLOC_FREE(frame);
-				return count - rem;
-
-			}
-			else { /* Nothing copied ... */
-
-				errno = EINVAL;  /* Not enough space ... */
-				TALLOC_FREE(frame);
-				return -1;
-
-			}
-
-		}
-
-		memcpy(ndir, dirent, reqd); /* Copy the data in ... */
-
-		((struct smbc_dirent *)ndir)->comment =
-			(char *)(&((struct smbc_dirent *)ndir)->name +
-                                 dirent->namelen +
-                                 1);
-
-		ndir += reqd;
-
-		rem -= reqd;
-
-		dir->dir_next = dirlist = dirlist -> next;
-	}
-
-	TALLOC_FREE(frame);
-
-	if (rem == count)
-		return 0;
-	else
-		return count - rem;
-
-}
-
-/*
- * Routine to create a directory ...
- */
-
-int
-SMBC_mkdir_ctx(SMBCCTX *context,
-               const char *fname,
-               mode_t mode)
-{
-	SMBCSRV *srv = NULL;
-	char *server = NULL;
-        char *share = NULL;
-        char *user = NULL;
-        char *password = NULL;
-        char *workgroup = NULL;
-	char *path = NULL;
-	char *targetpath = NULL;
-	struct cli_state *targetcli = NULL;
-	TALLOC_CTX *frame = talloc_stackframe();
-
-	if (!context || !context->internal->initialized) {
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-	}
-
-	if (!fname) {
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-	}
-
-	DEBUG(4, ("smbc_mkdir(%s)\n", fname));
-
-	if (SMBC_parse_path(frame,
-                            context,
-                            fname,
-                            &workgroup,
-                            &server,
-                            &share,
-                            &path,
-                            &user,
-                            &password,
-                            NULL)) {
-                errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-        }
-
-	if (!user || user[0] == (char)0) {
-		user = talloc_strdup(frame, smbc_getUser(context));
-		if (!user) {
-                	errno = ENOMEM;
-			TALLOC_FREE(frame);
-			return -1;
-		}
-	}
-
-	srv = SMBC_server(frame, context, True,
-                          server, share, &workgroup, &user, &password);
-
-	if (!srv) {
-
-		TALLOC_FREE(frame);
-		return -1;  /* errno set by SMBC_server */
-
-	}
-
-	/*d_printf(">>>mkdir: resolving %s\n", path);*/
-	if (!cli_resolve_path(frame, "", srv->cli, path,
-                              &targetcli, &targetpath)) {
-		d_printf("Could not resolve %s\n", path);
-		TALLOC_FREE(frame);
-		return -1;
-	}
-	/*d_printf(">>>mkdir: resolved path as %s\n", targetpath);*/
-
-	if (!cli_mkdir(targetcli, targetpath)) {
-
-		errno = SMBC_errno(context, targetcli);
-		TALLOC_FREE(frame);
-		return -1;
-
-	}
-
-	TALLOC_FREE(frame);
-	return 0;
-
-}
-
-/*
- * Our list function simply checks to see if a directory is not empty
- */
-
-static int smbc_rmdir_dirempty = True;
-
-static void
-rmdir_list_fn(const char *mnt,
-              file_info *finfo,
-              const char *mask,
-              void *state)
-{
-	if (strncmp(finfo->name, ".", 1) != 0 &&
-            strncmp(finfo->name, "..", 2) != 0) {
-		smbc_rmdir_dirempty = False;
-        }
-}
-
-/*
- * Routine to remove a directory
- */
-
-int
-SMBC_rmdir_ctx(SMBCCTX *context,
-               const char *fname)
-{
-	SMBCSRV *srv = NULL;
-	char *server = NULL;
-        char *share = NULL;
-        char *user = NULL;
-        char *password = NULL;
-        char *workgroup = NULL;
-	char *path = NULL;
-        char *targetpath = NULL;
-	struct cli_state *targetcli = NULL;
-	TALLOC_CTX *frame = talloc_stackframe();
-
-	if (!context || !context->internal->initialized) {
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-	}
-
-	if (!fname) {
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-	}
-
-	DEBUG(4, ("smbc_rmdir(%s)\n", fname));
-
-	if (SMBC_parse_path(frame,
-                            context,
-                            fname,
-                            &workgroup,
-                            &server,
-                            &share,
-                            &path,
-                            &user,
-                            &password,
-                            NULL)) {
-                errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-        }
-
-	if (!user || user[0] == (char)0) {
-		user = talloc_strdup(frame, smbc_getUser(context));
-		if (!user) {
-                	errno = ENOMEM;
-			TALLOC_FREE(frame);
-			return -1;
-		}
-	}
-
-	srv = SMBC_server(frame, context, True,
-                          server, share, &workgroup, &user, &password);
-
-	if (!srv) {
-
-		TALLOC_FREE(frame);
-		return -1;  /* errno set by SMBC_server */
-
-	}
-
-	/*d_printf(">>>rmdir: resolving %s\n", path);*/
-	if (!cli_resolve_path(frame, "", srv->cli, path,
-                              &targetcli, &targetpath)) {
-		d_printf("Could not resolve %s\n", path);
-		TALLOC_FREE(frame);
-		return -1;
-	}
-	/*d_printf(">>>rmdir: resolved path as %s\n", targetpath);*/
-
-
-	if (!cli_rmdir(targetcli, targetpath)) {
-
-		errno = SMBC_errno(context, targetcli);
-
-		if (errno == EACCES) {  /* Check if the dir empty or not */
-
-                        /* Local storage to avoid buffer overflows */
-			char *lpath;
-
-			smbc_rmdir_dirempty = True;  /* Make this so ... */
-
-			lpath = talloc_asprintf(frame, "%s\\*",
-						targetpath);
-			if (!lpath) {
-				errno = ENOMEM;
-				TALLOC_FREE(frame);
-				return -1;
-			}
-
-			if (cli_list(targetcli, lpath,
-                                     aDIR | aSYSTEM | aHIDDEN,
-                                     rmdir_list_fn, NULL) < 0) {
-
-				/* Fix errno to ignore latest error ... */
-				DEBUG(5, ("smbc_rmdir: "
-                                          "cli_list returned an error: %d\n",
-					  SMBC_errno(context, targetcli)));
-				errno = EACCES;
-
-			}
-
-			if (smbc_rmdir_dirempty)
-				errno = EACCES;
-			else
-				errno = ENOTEMPTY;
-
-		}
-
-		TALLOC_FREE(frame);
-		return -1;
-
-	}
-
-	TALLOC_FREE(frame);
-	return 0;
-
-}
-
-/*
- * Routine to return the current directory position
- */
-
-off_t
-SMBC_telldir_ctx(SMBCCTX *context,
-                 SMBCFILE *dir)
-{
-	TALLOC_CTX *frame = talloc_stackframe();
-
-	if (!context || !context->internal->initialized) {
-
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-
-	}
-
-	if (!dir || !SMBC_dlist_contains(context->internal->files, dir)) {
-
-		errno = EBADF;
-		TALLOC_FREE(frame);
-		return -1;
-
-	}
-
-	if (dir->file != False) { /* FIXME, should be dir, perhaps */
-
-		errno = ENOTDIR;
-		TALLOC_FREE(frame);
-		return -1;
-
-	}
-
-        /* See if we're already at the end. */
-        if (dir->dir_next == NULL) {
-                /* We are. */
-		TALLOC_FREE(frame);
-                return -1;
-        }
-
-	/*
-	 * We return the pointer here as the offset
-	 */
-	TALLOC_FREE(frame);
-        return (off_t)(long)dir->dir_next->dirent;
-}
-
-/*
- * A routine to run down the list and see if the entry is OK
- */
-
-static struct smbc_dir_list *
-check_dir_ent(struct smbc_dir_list *list,
-              struct smbc_dirent *dirent)
-{
-
-	/* Run down the list looking for what we want */
-
-	if (dirent) {
-
-		struct smbc_dir_list *tmp = list;
-
-		while (tmp) {
-
-			if (tmp->dirent == dirent)
-				return tmp;
-
-			tmp = tmp->next;
-
-		}
-
-	}
-
-	return NULL;  /* Not found, or an error */
-
-}
-
-
-/*
- * Routine to seek on a directory
- */
-
-int
-SMBC_lseekdir_ctx(SMBCCTX *context,
-                  SMBCFILE *dir,
-                  off_t offset)
-{
-	long int l_offset = offset;  /* Handle problems of size */
-	struct smbc_dirent *dirent = (struct smbc_dirent *)l_offset;
-	struct smbc_dir_list *list_ent = (struct smbc_dir_list *)NULL;
-	TALLOC_CTX *frame = talloc_stackframe();
-
-	if (!context || !context->internal->initialized) {
-
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-
-	}
-
-	if (dir->file != False) { /* FIXME, should be dir, perhaps */
-
-		errno = ENOTDIR;
-		TALLOC_FREE(frame);
-		return -1;
-
-	}
-
-	/* Now, check what we were passed and see if it is OK ... */
-
-	if (dirent == NULL) {  /* Seek to the begining of the list */
-
-		dir->dir_next = dir->dir_list;
-		TALLOC_FREE(frame);
-		return 0;
-
-	}
-
-        if (offset == -1) {     /* Seek to the end of the list */
-                dir->dir_next = NULL;
-		TALLOC_FREE(frame);
-                return 0;
-        }
-
-	/* Now, run down the list and make sure that the entry is OK       */
-	/* This may need to be changed if we change the format of the list */
-
-	if ((list_ent = check_dir_ent(dir->dir_list, dirent)) == NULL) {
-		errno = EINVAL;   /* Bad entry */
-		TALLOC_FREE(frame);
-		return -1;
-	}
-
-	dir->dir_next = list_ent;
-
-	TALLOC_FREE(frame);
-	return 0;
-}
-
-/*
- * Routine to fstat a dir
- */
-
-int
-SMBC_fstatdir_ctx(SMBCCTX *context,
-                  SMBCFILE *dir,
-                  struct stat *st)
-{
-
-	if (!context || !context->internal->initialized) {
-
-		errno = EINVAL;
-		return -1;
-	}
-
-	/* No code yet ... */
-	return 0;
-}
-
-int
-SMBC_chmod_ctx(SMBCCTX *context,
-               const char *fname,
-               mode_t newmode)
-{
-        SMBCSRV *srv = NULL;
-	char *server = NULL;
-        char *share = NULL;
-        char *user = NULL;
-        char *password = NULL;
-        char *workgroup = NULL;
-	char *path = NULL;
-	uint16 mode;
-	TALLOC_CTX *frame = talloc_stackframe();
-
-	if (!context || !context->internal->initialized) {
-
-		errno = EINVAL;  /* Best I can think of ... */
-		TALLOC_FREE(frame);
-		return -1;
-	}
-
-	if (!fname) {
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-	}
-
-	DEBUG(4, ("smbc_chmod(%s, 0%3o)\n", fname, newmode));
-
-	if (SMBC_parse_path(frame,
-                            context,
-                            fname,
-                            &workgroup,
-                            &server,
-                            &share,
-                            &path,
-                            &user,
-                            &password,
-                            NULL)) {
-                errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-        }
-
-	if (!user || user[0] == (char)0) {
-		user = talloc_strdup(frame, smbc_getUser(context));
-		if (!user) {
-                	errno = ENOMEM;
-			TALLOC_FREE(frame);
-			return -1;
-		}
-	}
-
-	srv = SMBC_server(frame, context, True,
-                          server, share, &workgroup, &user, &password);
-
-	if (!srv) {
-		TALLOC_FREE(frame);
-		return -1;  /* errno set by SMBC_server */
-	}
-
-	mode = 0;
-
-	if (!(newmode & (S_IWUSR | S_IWGRP | S_IWOTH))) mode |= aRONLY;
-	if ((newmode & S_IXUSR) && lp_map_archive(-1)) mode |= aARCH;
-	if ((newmode & S_IXGRP) && lp_map_system(-1)) mode |= aSYSTEM;
-	if ((newmode & S_IXOTH) && lp_map_hidden(-1)) mode |= aHIDDEN;
-
-	if (!cli_setatr(srv->cli, path, mode, 0)) {
-		errno = SMBC_errno(context, srv->cli);
-		TALLOC_FREE(frame);
-		return -1;
-	}
-
-	TALLOC_FREE(frame);
-        return 0;
-}
-
-int
-SMBC_utimes_ctx(SMBCCTX *context,
-                const char *fname,
-                struct timeval *tbuf)
-{
-        SMBCSRV *srv = NULL;
-	char *server = NULL;
-	char *share = NULL;
-	char *user = NULL;
-	char *password = NULL;
-	char *workgroup = NULL;
-	char *path = NULL;
-        time_t access_time;
-        time_t write_time;
-	TALLOC_CTX *frame = talloc_stackframe();
-
-	if (!context || !context->internal->initialized) {
-
-		errno = EINVAL;  /* Best I can think of ... */
-		TALLOC_FREE(frame);
-		return -1;
-	}
-
-	if (!fname) {
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-	}
-
-        if (tbuf == NULL) {
-                access_time = write_time = time(NULL);
-        } else {
-                access_time = tbuf[0].tv_sec;
-                write_time = tbuf[1].tv_sec;
-        }
-
-        if (DEBUGLVL(4)) {
-                char *p;
-                char atimebuf[32];
-                char mtimebuf[32];
-
-                strncpy(atimebuf, ctime(&access_time), sizeof(atimebuf) - 1);
-                atimebuf[sizeof(atimebuf) - 1] = '\0';
-                if ((p = strchr(atimebuf, '\n')) != NULL) {
-                        *p = '\0';
-                }
-
-                strncpy(mtimebuf, ctime(&write_time), sizeof(mtimebuf) - 1);
-                mtimebuf[sizeof(mtimebuf) - 1] = '\0';
-                if ((p = strchr(mtimebuf, '\n')) != NULL) {
-                        *p = '\0';
-                }
-
-                dbgtext("smbc_utimes(%s, atime = %s mtime = %s)\n",
-                        fname, atimebuf, mtimebuf);
-        }
-
-	if (SMBC_parse_path(frame,
-                            context,
-                            fname,
-                            &workgroup,
-                            &server,
-                            &share,
-                            &path,
-                            &user,
-                            &password,
-                            NULL)) {
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-        }
-
-	if (!user || user[0] == (char)0) {
-		user = talloc_strdup(frame, smbc_getUser(context));
-		if (!user) {
-			errno = ENOMEM;
-			TALLOC_FREE(frame);
-			return -1;
-		}
-	}
-
-	srv = SMBC_server(frame, context, True,
-                          server, share, &workgroup, &user, &password);
-
-	if (!srv) {
-		TALLOC_FREE(frame);
-		return -1;      /* errno set by SMBC_server */
-	}
-
-        if (!SMBC_setatr(context, srv, path,
-                         0, access_time, write_time, 0, 0)) {
-		TALLOC_FREE(frame);
-                return -1;      /* errno set by SMBC_setatr */
-        }
-
-	TALLOC_FREE(frame);
-        return 0;
-}
-
-/*
- * Routine to unlink() a file
- */
-
-int
-SMBC_unlink_ctx(SMBCCTX *context,
-                const char *fname)
-{
-	char *server = NULL;
-        char *share = NULL;
-        char *user = NULL;
-        char *password = NULL;
-        char *workgroup = NULL;
-	char *path = NULL;
-	char *targetpath = NULL;
-	struct cli_state *targetcli = NULL;
-	SMBCSRV *srv = NULL;
-	TALLOC_CTX *frame = talloc_stackframe();
-
-	if (!context || !context->internal->initialized) {
-
-		errno = EINVAL;  /* Best I can think of ... */
-		TALLOC_FREE(frame);
-		return -1;
-
-	}
-
-	if (!fname) {
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-
-	}
-
-	if (SMBC_parse_path(frame,
-                            context,
-                            fname,
-                            &workgroup,
-                            &server,
-                            &share,
-                            &path,
-                            &user,
-                            &password,
-                            NULL)) {
-                errno = EINVAL;
-		TALLOC_FREE(frame);
-                return -1;
-        }
-
-	if (!user || user[0] == (char)0) {
-		user = talloc_strdup(frame, smbc_getUser(context));
-		if (!user) {
-			errno = ENOMEM;
-			TALLOC_FREE(frame);
-			return -1;
-		}
-	}
-
-	srv = SMBC_server(frame, context, True,
-                          server, share, &workgroup, &user, &password);
-
-	if (!srv) {
-		TALLOC_FREE(frame);
-		return -1;  /* SMBC_server sets errno */
-
-	}
-
-	/*d_printf(">>>unlink: resolving %s\n", path);*/
-	if (!cli_resolve_path(frame, "", srv->cli, path,
-                              &targetcli, &targetpath)) {
-		d_printf("Could not resolve %s\n", path);
-		TALLOC_FREE(frame);
-		return -1;
-	}
-	/*d_printf(">>>unlink: resolved path as %s\n", targetpath);*/
-
-	if (!cli_unlink(targetcli, targetpath)) {
-
-		errno = SMBC_errno(context, targetcli);
-
-		if (errno == EACCES) { /* Check if the file is a directory */
-
-			int saverr = errno;
-			SMB_OFF_T size = 0;
-			uint16 mode = 0;
-			struct timespec write_time_ts;
-                        struct timespec access_time_ts;
-                        struct timespec change_time_ts;
-			SMB_INO_T ino = 0;
-
-			if (!SMBC_getatr(context, srv, path, &mode, &size,
-					 NULL,
-                                         &access_time_ts,
-                                         &write_time_ts,
-                                         &change_time_ts,
-                                         &ino)) {
-
-				/* Hmmm, bad error ... What? */
-
-				errno = SMBC_errno(context, targetcli);
-				TALLOC_FREE(frame);
-				return -1;
-
-			}
-			else {
-
-				if (IS_DOS_DIR(mode))
-					errno = EISDIR;
-				else
-					errno = saverr;  /* Restore this */
-
-			}
-		}
-
-		TALLOC_FREE(frame);
-		return -1;
-
-	}
-
-	TALLOC_FREE(frame);
-	return 0;  /* Success ... */
-
-}
-
-/*
- * Routine to rename() a file
- */
-
-int
-SMBC_rename_ctx(SMBCCTX *ocontext,
-                const char *oname,
-                SMBCCTX *ncontext,
-                const char *nname)
-{
-	char *server1 = NULL;
-        char *share1 = NULL;
-        char *server2 = NULL;
-        char *share2 = NULL;
-        char *user1 = NULL;
-        char *user2 = NULL;
-        char *password1 = NULL;
-        char *password2 = NULL;
-        char *workgroup = NULL;
-	char *path1 = NULL;
-        char *path2 = NULL;
-        char *targetpath1 = NULL;
-        char *targetpath2 = NULL;
-	struct cli_state *targetcli1 = NULL;
-        struct cli_state *targetcli2 = NULL;
-	SMBCSRV *srv = NULL;
-	TALLOC_CTX *frame = talloc_stackframe();
-
-	if (!ocontext || !ncontext ||
-	    !ocontext->internal->initialized ||
-	    !ncontext->internal->initialized) {
-
-		errno = EINVAL;  /* Best I can think of ... */
-		TALLOC_FREE(frame);
-		return -1;
-	}
-
-	if (!oname || !nname) {
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-	}
-
-	DEBUG(4, ("smbc_rename(%s,%s)\n", oname, nname));
-
-	if (SMBC_parse_path(frame,
-                            ocontext,
-                            oname,
-                            &workgroup,
-                            &server1,
-                            &share1,
-                            &path1,
-                            &user1,
-                            &password1,
-                            NULL)) {
-                errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-	}
-
-	if (!user1 || user1[0] == (char)0) {
-		user1 = talloc_strdup(frame, smbc_getUser(ocontext));
-		if (!user1) {
-                	errno = ENOMEM;
-			TALLOC_FREE(frame);
-			return -1;
-		}
-	}
-
-	if (SMBC_parse_path(frame,
-                            ncontext,
-                            nname,
-                            NULL,
-                            &server2,
-                            &share2,
-                            &path2,
-                            &user2,
-                            &password2,
-                            NULL)) {
-                errno = EINVAL;
-		TALLOC_FREE(frame);
-                return -1;
-	}
-
-	if (!user2 || user2[0] == (char)0) {
-		user2 = talloc_strdup(frame, smbc_getUser(ncontext));
-		if (!user2) {
-                	errno = ENOMEM;
-			TALLOC_FREE(frame);
-			return -1;
-		}
-	}
-
-	if (strcmp(server1, server2) || strcmp(share1, share2) ||
-	    strcmp(user1, user2)) {
-		/* Can't rename across file systems, or users?? */
-		errno = EXDEV;
-		TALLOC_FREE(frame);
-		return -1;
-	}
-
-	srv = SMBC_server(frame, ocontext, True,
-                          server1, share1, &workgroup, &user1, &password1);
-	if (!srv) {
-		TALLOC_FREE(frame);
-		return -1;
-
-	}
-
-	/*d_printf(">>>rename: resolving %s\n", path1);*/
-	if (!cli_resolve_path(frame, "", srv->cli, path1,
-                              &targetcli1, &targetpath1)) {
-		d_printf("Could not resolve %s\n", path1);
-		TALLOC_FREE(frame);
-		return -1;
-	}
-	/*d_printf(">>>rename: resolved path as %s\n", targetpath1);*/
-	/*d_printf(">>>rename: resolving %s\n", path2);*/
-	if (!cli_resolve_path(frame, "", srv->cli, path2,
-                              &targetcli2, &targetpath2)) {
-		d_printf("Could not resolve %s\n", path2);
-		TALLOC_FREE(frame);
-		return -1;
-	}
-	/*d_printf(">>>rename: resolved path as %s\n", targetpath2);*/
-
-	if (strcmp(targetcli1->desthost, targetcli2->desthost) ||
-            strcmp(targetcli1->share, targetcli2->share))
-	{
-		/* can't rename across file systems */
-		errno = EXDEV;
-		TALLOC_FREE(frame);
-		return -1;
-	}
-
-	if (!cli_rename(targetcli1, targetpath1, targetpath2)) {
-		int eno = SMBC_errno(ocontext, targetcli1);
-
-		if (eno != EEXIST ||
-		    !cli_unlink(targetcli1, targetpath2) ||
-		    !cli_rename(targetcli1, targetpath1, targetpath2)) {
-
-			errno = eno;
-			TALLOC_FREE(frame);
-			return -1;
-
-		}
-	}
-
-	TALLOC_FREE(frame);
-	return 0; /* Success */
-}
-

Deleted: branches/samba/upstream/source/libsmb/libsmb_file.c
===================================================================
--- branches/samba/upstream/source/libsmb/libsmb_file.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/libsmb_file.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,864 +0,0 @@
-/* 
-   Unix SMB/Netbios implementation.
-   SMB client library implementation
-   Copyright (C) Andrew Tridgell 1998
-   Copyright (C) Richard Sharpe 2000, 2002
-   Copyright (C) John Terpstra 2000
-   Copyright (C) Tom Jansen (Ninja ISD) 2002 
-   Copyright (C) Derrell Lipman 2003-2008
-   Copyright (C) Jeremy Allison 2007, 2008
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-#include "libsmbclient.h"
-#include "libsmb_internal.h"
-
-
-/*
- * Routine to open() a file ...
- */
-
-SMBCFILE *
-SMBC_open_ctx(SMBCCTX *context,
-              const char *fname,
-              int flags,
-              mode_t mode)
-{
-	char *server = NULL;
-        char *share = NULL;
-        char *user = NULL;
-        char *password = NULL;
-        char *workgroup = NULL;
-	char *path = NULL;
-	char *targetpath = NULL;
-	struct cli_state *targetcli = NULL;
-	SMBCSRV *srv   = NULL;
-	SMBCFILE *file = NULL;
-	int fd;
-	TALLOC_CTX *frame = talloc_stackframe();
-        
-	if (!context || !context->internal->initialized) {
-                
-		errno = EINVAL;  /* Best I can think of ... */
-		TALLOC_FREE(frame);
-		return NULL;
-                
-	}
-        
-	if (!fname) {
-                
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return NULL;
-                
-	}
-        
-	if (SMBC_parse_path(frame,
-                            context,
-                            fname,
-                            &workgroup,
-                            &server,
-                            &share,
-                            &path,
-                            &user,
-                            &password,
-                            NULL)) {
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return NULL;
-        }
-        
-	if (!user || user[0] == (char)0) {
-		user = talloc_strdup(frame, smbc_getUser(context));
-		if (!user) {
-                	errno = ENOMEM;
-			TALLOC_FREE(frame);
-			return NULL;
-		}
-	}
-        
-	srv = SMBC_server(frame, context, True,
-                          server, share, &workgroup, &user, &password);
-        
-	if (!srv) {
-		if (errno == EPERM) errno = EACCES;
-		TALLOC_FREE(frame);
-		return NULL;  /* SMBC_server sets errno */
-	}
-        
-	/* Hmmm, the test for a directory is suspect here ... FIXME */
-        
-	if (strlen(path) > 0 && path[strlen(path) - 1] == '\\') {
-		fd = -1;
-	} else {
-		file = SMB_MALLOC_P(SMBCFILE);
-                
-		if (!file) {
-			errno = ENOMEM;
-			TALLOC_FREE(frame);
-			return NULL;
-		}
-                
-		ZERO_STRUCTP(file);
-                
-		/*d_printf(">>>open: resolving %s\n", path);*/
-		if (!cli_resolve_path(frame, "", srv->cli, path,
-                                      &targetcli, &targetpath)) {
-			d_printf("Could not resolve %s\n", path);
-			SAFE_FREE(file);
-			TALLOC_FREE(frame);
-			return NULL;
-		}
-		/*d_printf(">>>open: resolved %s as %s\n", path, targetpath);*/
-                
-		if ((fd = cli_open(targetcli, targetpath, flags,
-                                   context->internal->share_mode)) < 0) {
-                        
-			/* Handle the error ... */
-                        
-			SAFE_FREE(file);
-			errno = SMBC_errno(context, targetcli);
-			TALLOC_FREE(frame);
-			return NULL;
-                        
-		}
-                
-		/* Fill in file struct */
-                
-		file->cli_fd  = fd;
-		file->fname   = SMB_STRDUP(fname);
-		file->srv     = srv;
-		file->offset  = 0;
-		file->file    = True;
-                
-		DLIST_ADD(context->internal->files, file);
-                
-                /*
-                 * If the file was opened in O_APPEND mode, all write
-                 * operations should be appended to the file.  To do that,
-                 * though, using this protocol, would require a getattrE()
-                 * call for each and every write, to determine where the end
-                 * of the file is. (There does not appear to be an append flag
-                 * in the protocol.)  Rather than add all of that overhead of
-                 * retrieving the current end-of-file offset prior to each
-                 * write operation, we'll assume that most append operations
-                 * will continuously write, so we'll just set the offset to
-                 * the end of the file now and hope that's adequate.
-                 *
-                 * Note to self: If this proves inadequate, and O_APPEND
-                 * should, in some cases, be forced for each write, add a
-                 * field in the context options structure, for
-                 * "strict_append_mode" which would select between the current
-                 * behavior (if FALSE) or issuing a getattrE() prior to each
-                 * write and forcing the write to the end of the file (if
-                 * TRUE).  Adding that capability will likely require adding
-                 * an "append" flag into the _SMBCFILE structure to track
-                 * whether a file was opened in O_APPEND mode.  -- djl
-                 */
-                if (flags & O_APPEND) {
-                        if (SMBC_lseek_ctx(context, file, 0, SEEK_END) < 0) {
-                                (void) SMBC_close_ctx(context, file);
-                                errno = ENXIO;
-				TALLOC_FREE(frame);
-                                return NULL;
-                        }
-                }
-                
-		TALLOC_FREE(frame);
-		return file;
-                
-	}
-        
-	/* Check if opendir needed ... */
-        
-	if (fd == -1) {
-		int eno = 0;
-                
-		eno = SMBC_errno(context, srv->cli);
-		file = smbc_getFunctionOpendir(context)(context, fname);
-		if (!file) errno = eno;
-		TALLOC_FREE(frame);
-		return file;
-                
-	}
-        
-	errno = EINVAL; /* FIXME, correct errno ? */
-	TALLOC_FREE(frame);
-	return NULL;
-        
-}
-
-/*
- * Routine to create a file 
- */
-
-SMBCFILE *
-SMBC_creat_ctx(SMBCCTX *context,
-               const char *path,
-               mode_t mode)
-{
-        
-	if (!context || !context->internal->initialized) {
-                
-		errno = EINVAL;
-		return NULL;
-                
-	}
-        
-	return SMBC_open_ctx(context, path,
-                             O_WRONLY | O_CREAT | O_TRUNC, mode);
-}
-
-/*
- * Routine to read() a file ...
- */
-
-ssize_t
-SMBC_read_ctx(SMBCCTX *context,
-              SMBCFILE *file,
-              void *buf,
-              size_t count)
-{
-	int ret;
-	char *server = NULL, *share = NULL, *user = NULL, *password = NULL;
-	char *path = NULL;
-	char *targetpath = NULL;
-	struct cli_state *targetcli = NULL;
-	TALLOC_CTX *frame = talloc_stackframe();
-        
-        /*
-         * offset:
-         *
-         * Compiler bug (possibly) -- gcc (GCC) 3.3.5 (Debian 1:3.3.5-2) --
-         * appears to pass file->offset (which is type off_t) differently than
-         * a local variable of type off_t.  Using local variable "offset" in
-         * the call to cli_read() instead of file->offset fixes a problem
-         * retrieving data at an offset greater than 4GB.
-         */
-        off_t offset;
-        
-	if (!context || !context->internal->initialized) {
-                
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-                
-	}
-        
-	DEBUG(4, ("smbc_read(%p, %d)\n", file, (int)count));
-        
-	if (!file || !SMBC_dlist_contains(context->internal->files, file)) {
-		errno = EBADF;
-		TALLOC_FREE(frame);
-		return -1;
-                
-	}
-        
-	offset = file->offset;
-        
-	/* Check that the buffer exists ... */
-        
-	if (buf == NULL) {
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-                
-	}
-        
-	/*d_printf(">>>read: parsing %s\n", file->fname);*/
-	if (SMBC_parse_path(frame,
-                            context,
-                            file->fname,
-                            NULL,
-                            &server,
-                            &share,
-                            &path,
-                            &user,
-                            &password,
-                            NULL)) {
-                errno = EINVAL;
-		TALLOC_FREE(frame);
-                return -1;
-        }
-        
-	/*d_printf(">>>read: resolving %s\n", path);*/
-	if (!cli_resolve_path(frame, "", file->srv->cli, path,
-                              &targetcli, &targetpath)) {
-		d_printf("Could not resolve %s\n", path);
-		TALLOC_FREE(frame);
-		return -1;
-	}
-	/*d_printf(">>>fstat: resolved path as %s\n", targetpath);*/
-        
-	ret = cli_read(targetcli, file->cli_fd, (char *)buf, offset, count);
-        
-	if (ret < 0) {
-                
-		errno = SMBC_errno(context, targetcli);
-		TALLOC_FREE(frame);
-		return -1;
-                
-	}
-        
-	file->offset += ret;
-        
-	DEBUG(4, ("  --> %d\n", ret));
-        
-	TALLOC_FREE(frame);
-	return ret;  /* Success, ret bytes of data ... */
-        
-}
-
-/*
- * Routine to write() a file ...
- */
-
-ssize_t
-SMBC_write_ctx(SMBCCTX *context,
-               SMBCFILE *file,
-               void *buf,
-               size_t count)
-{
-	int ret;
-        off_t offset;
-	char *server = NULL, *share = NULL, *user = NULL, *password = NULL;
-	char *path = NULL;
-	char *targetpath = NULL;
-	struct cli_state *targetcli = NULL;
-	TALLOC_CTX *frame = talloc_stackframe();
-        
-	/* First check all pointers before dereferencing them */
-        
-	if (!context || !context->internal->initialized) {
-                
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-                
-	}
-        
-	if (!file || !SMBC_dlist_contains(context->internal->files, file)) {
-		errno = EBADF;
-		TALLOC_FREE(frame);
-		return -1;
-	}
-        
-	/* Check that the buffer exists ... */
-        
-	if (buf == NULL) {
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-                
-	}
-        
-        offset = file->offset; /* See "offset" comment in SMBC_read_ctx() */
-        
-	/*d_printf(">>>write: parsing %s\n", file->fname);*/
-	if (SMBC_parse_path(frame,
-                            context,
-                            file->fname,
-                            NULL,
-                            &server,
-                            &share,
-                            &path,
-                            &user,
-                            &password,
-                            NULL)) {
-                errno = EINVAL;
-		TALLOC_FREE(frame);
-                return -1;
-        }
-        
-	/*d_printf(">>>write: resolving %s\n", path);*/
-	if (!cli_resolve_path(frame, "", file->srv->cli, path,
-                              &targetcli, &targetpath)) {
-		d_printf("Could not resolve %s\n", path);
-		TALLOC_FREE(frame);
-		return -1;
-	}
-	/*d_printf(">>>write: resolved path as %s\n", targetpath);*/
-        
-	ret = cli_write(targetcli, file->cli_fd,
-                        0, (char *)buf, offset, count);
-        
-	if (ret <= 0) {
-		errno = SMBC_errno(context, targetcli);
-		TALLOC_FREE(frame);
-		return -1;
-                
-	}
-        
-	file->offset += ret;
-        
-	TALLOC_FREE(frame);
-	return ret;  /* Success, 0 bytes of data ... */
-}
-
-/*
- * Routine to close() a file ...
- */
-
-int
-SMBC_close_ctx(SMBCCTX *context,
-               SMBCFILE *file)
-{
-        SMBCSRV *srv;
-	char *server = NULL, *share = NULL, *user = NULL, *password = NULL;
-	char *path = NULL;
-	char *targetpath = NULL;
-	struct cli_state *targetcli = NULL;
-	TALLOC_CTX *frame = talloc_stackframe();
-        
-	if (!context || !context->internal->initialized) {
-                
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-	}
-        
-	if (!file || !SMBC_dlist_contains(context->internal->files, file)) {
-		errno = EBADF;
-		TALLOC_FREE(frame);
-		return -1;
-	}
-        
-	/* IS a dir ... */
-	if (!file->file) {
-		TALLOC_FREE(frame);
-		return smbc_getFunctionClosedir(context)(context, file);
-	}
-        
-	/*d_printf(">>>close: parsing %s\n", file->fname);*/
-	if (SMBC_parse_path(frame,
-                            context,
-                            file->fname,
-                            NULL,
-                            &server,
-                            &share,
-                            &path,
-                            &user,
-                            &password,
-                            NULL)) {
-                errno = EINVAL;
-		TALLOC_FREE(frame);
-                return -1;
-        }
-        
-	/*d_printf(">>>close: resolving %s\n", path);*/
-	if (!cli_resolve_path(frame, "", file->srv->cli, path,
-                              &targetcli, &targetpath)) {
-		d_printf("Could not resolve %s\n", path);
-		TALLOC_FREE(frame);
-		return -1;
-	}
-	/*d_printf(">>>close: resolved path as %s\n", targetpath);*/
-        
-	if (!cli_close(targetcli, file->cli_fd)) {
-                
-		DEBUG(3, ("cli_close failed on %s. purging server.\n", 
-			  file->fname));
-		/* Deallocate slot and remove the server 
-		 * from the server cache if unused */
-		errno = SMBC_errno(context, targetcli);
-		srv = file->srv;
-		DLIST_REMOVE(context->internal->files, file);
-		SAFE_FREE(file->fname);
-		SAFE_FREE(file);
-		smbc_getFunctionRemoveUnusedServer(context)(context, srv);
-		TALLOC_FREE(frame);
-		return -1;
-                
-	}
-        
-	DLIST_REMOVE(context->internal->files, file);
-	SAFE_FREE(file->fname);
-	SAFE_FREE(file);
-	TALLOC_FREE(frame);
-        
-	return 0;
-}
-
-/*
- * Get info from an SMB server on a file. Use a qpathinfo call first
- * and if that fails, use getatr, as Win95 sometimes refuses qpathinfo
- */
-bool
-SMBC_getatr(SMBCCTX * context,
-            SMBCSRV *srv,
-            char *path,
-            uint16 *mode,
-            SMB_OFF_T *size,
-            struct timespec *create_time_ts,
-            struct timespec *access_time_ts,
-            struct timespec *write_time_ts,
-            struct timespec *change_time_ts,
-            SMB_INO_T *ino)
-{
-	char *fixedpath = NULL;
-	char *targetpath = NULL;
-	struct cli_state *targetcli = NULL;
-	time_t write_time;
-	TALLOC_CTX *frame = talloc_stackframe();
-        
-	if (!context || !context->internal->initialized) {
-                
-		errno = EINVAL;
-		TALLOC_FREE(frame);
- 		return -1;
- 	}
-        
-	/* path fixup for . and .. */
-	if (strequal(path, ".") || strequal(path, "..")) {
-		fixedpath = talloc_strdup(frame, "\\");
-		if (!fixedpath) {
-			errno = ENOMEM;
-			TALLOC_FREE(frame);
-			return -1;
-		}
-	} else {
-		fixedpath = talloc_strdup(frame, path);
-		if (!fixedpath) {
-			errno = ENOMEM;
-			TALLOC_FREE(frame);
-			return -1;
-		}
-		trim_string(fixedpath, NULL, "\\..");
-		trim_string(fixedpath, NULL, "\\.");
-	}
-	DEBUG(4,("SMBC_getatr: sending qpathinfo\n"));
-        
-	if (!cli_resolve_path(frame, "", srv->cli, fixedpath,
-                              &targetcli, &targetpath)) {
-		d_printf("Couldn't resolve %s\n", path);
-		TALLOC_FREE(frame);
-		return False;
-	}
-        
-	if (!srv->no_pathinfo2 &&
-            cli_qpathinfo2(targetcli, targetpath,
-                           create_time_ts,
-                           access_time_ts,
-                           write_time_ts,
-                           change_time_ts,
-                           size, mode, ino)) {
-		TALLOC_FREE(frame);
-		return True;
-        }
-        
-	/* if this is NT then don't bother with the getatr */
-	if (targetcli->capabilities & CAP_NT_SMBS) {
-                errno = EPERM;
-		TALLOC_FREE(frame);
-                return False;
-        }
-        
-	if (cli_getatr(targetcli, targetpath, mode, size, &write_time)) {
-                
-                struct timespec w_time_ts;
-                
-                w_time_ts = convert_time_t_to_timespec(write_time);
-                
-                if (write_time_ts != NULL) {
-			*write_time_ts = w_time_ts;
-                }
-                
-                if (create_time_ts != NULL) {
-                        *create_time_ts = w_time_ts;
-                }
-                
-                if (access_time_ts != NULL) {
-                        *access_time_ts = w_time_ts;
-                }
-                
-                if (change_time_ts != NULL) {
-                        *change_time_ts = w_time_ts;
-                }
-                
-		srv->no_pathinfo2 = True;
-		TALLOC_FREE(frame);
-		return True;
-	}
-        
-        errno = EPERM;
-	TALLOC_FREE(frame);
-	return False;
-        
-}
-
-/*
- * Set file info on an SMB server.  Use setpathinfo call first.  If that
- * fails, use setattrE..
- *
- * Access and modification time parameters are always used and must be
- * provided.  Create time, if zero, will be determined from the actual create
- * time of the file.  If non-zero, the create time will be set as well.
- *
- * "mode" (attributes) parameter may be set to -1 if it is not to be set.
- */
-bool
-SMBC_setatr(SMBCCTX * context, SMBCSRV *srv, char *path, 
-            time_t create_time,
-            time_t access_time,
-            time_t write_time,
-            time_t change_time,
-            uint16 mode)
-{
-        int fd;
-        int ret;
-	TALLOC_CTX *frame = talloc_stackframe();
-        
-        /*
-         * First, try setpathinfo (if qpathinfo succeeded), for it is the
-         * modern function for "new code" to be using, and it works given a
-         * filename rather than requiring that the file be opened to have its
-         * attributes manipulated.
-         */
-        if (srv->no_pathinfo ||
-            ! cli_setpathinfo(srv->cli, path,
-                              create_time,
-                              access_time,
-                              write_time,
-                              change_time,
-                              mode)) {
-                
-                /*
-                 * setpathinfo is not supported; go to plan B. 
-                 *
-                 * cli_setatr() does not work on win98, and it also doesn't
-                 * support setting the access time (only the modification
-                 * time), so in all cases, we open the specified file and use
-                 * cli_setattrE() which should work on all OS versions, and
-                 * supports both times.
-                 */
-                
-                /* Don't try {q,set}pathinfo() again, with this server */
-                srv->no_pathinfo = True;
-                
-                /* Open the file */
-                if ((fd = cli_open(srv->cli, path, O_RDWR, DENY_NONE)) < 0) {
-                        
-                        errno = SMBC_errno(context, srv->cli);
-			TALLOC_FREE(frame);
-                        return -1;
-                }
-                
-                /* Set the new attributes */
-                ret = cli_setattrE(srv->cli, fd,
-                                   change_time,
-                                   access_time,
-                                   write_time);
-                
-                /* Close the file */
-                cli_close(srv->cli, fd);
-                
-                /*
-                 * Unfortunately, setattrE() doesn't have a provision for
-                 * setting the access mode (attributes).  We'll have to try
-                 * cli_setatr() for that, and with only this parameter, it
-                 * seems to work on win98.
-                 */
-                if (ret && mode != (uint16) -1) {
-                        ret = cli_setatr(srv->cli, path, mode, 0);
-                }
-                
-                if (! ret) {
-                        errno = SMBC_errno(context, srv->cli);
-			TALLOC_FREE(frame);
-                        return False;
-                }
-        }
-        
-	TALLOC_FREE(frame);
-        return True;
-}
-
-/*
- * A routine to lseek() a file
- */
-
-off_t
-SMBC_lseek_ctx(SMBCCTX *context,
-               SMBCFILE *file,
-               off_t offset,
-               int whence)
-{
-	SMB_OFF_T size;
-	char *server = NULL, *share = NULL, *user = NULL, *password = NULL;
-	char *path = NULL;
-	char *targetpath = NULL;
-	struct cli_state *targetcli = NULL;
-	TALLOC_CTX *frame = talloc_stackframe();
-        
-	if (!context || !context->internal->initialized) {
-                
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-	}
-        
-	if (!file || !SMBC_dlist_contains(context->internal->files, file)) {
-                
-		errno = EBADF;
-		TALLOC_FREE(frame);
-		return -1;
-                
-	}
-        
-	if (!file->file) {
-                
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;      /* Can't lseek a dir ... */
-                
-	}
-        
-	switch (whence) {
-	case SEEK_SET:
-		file->offset = offset;
-		break;
-                
-	case SEEK_CUR:
-		file->offset += offset;
-		break;
-                
-	case SEEK_END:
-		/*d_printf(">>>lseek: parsing %s\n", file->fname);*/
-		if (SMBC_parse_path(frame,
-                                    context,
-                                    file->fname,
-                                    NULL,
-                                    &server,
-                                    &share,
-                                    &path,
-                                    &user,
-                                    &password,
-                                    NULL)) {
-			errno = EINVAL;
-			TALLOC_FREE(frame);
-			return -1;
-		}
-                
-		/*d_printf(">>>lseek: resolving %s\n", path);*/
-		if (!cli_resolve_path(frame, "", file->srv->cli, path,
-                                      &targetcli, &targetpath)) {
-			d_printf("Could not resolve %s\n", path);
-			TALLOC_FREE(frame);
-			return -1;
-		}
-		/*d_printf(">>>lseek: resolved path as %s\n", targetpath);*/
-                
-		if (!cli_qfileinfo(targetcli, file->cli_fd, NULL,
-                                   &size, NULL, NULL, NULL, NULL, NULL))
-		{
-                        SMB_OFF_T b_size = size;
-			if (!cli_getattrE(targetcli, file->cli_fd,
-                                          NULL, &b_size, NULL, NULL, NULL))
-                        {
-                                errno = EINVAL;
-                                TALLOC_FREE(frame);
-                                return -1;
-                        } else
-                                size = b_size;
-		}
-		file->offset = size + offset;
-		break;
-                
-	default:
-		errno = EINVAL;
-		break;
-                
-	}
-        
-	TALLOC_FREE(frame);
-	return file->offset;
-        
-}
-
-
-/*
- * Routine to truncate a file given by its file descriptor, to a specified size
- */
-
-int
-SMBC_ftruncate_ctx(SMBCCTX *context,
-                   SMBCFILE *file,
-                   off_t length)
-{
-	SMB_OFF_T size = length;
-	char *server = NULL;
-	char *share = NULL;
-	char *user = NULL;
-	char *password = NULL;
-	char *path = NULL;
-        char *targetpath = NULL;
-	struct cli_state *targetcli = NULL;
-	TALLOC_CTX *frame = talloc_stackframe();
-        
-	if (!context || !context->internal->initialized) {
-                
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-	}
-        
-	if (!file || !SMBC_dlist_contains(context->internal->files, file)) {
-		errno = EBADF;
-		TALLOC_FREE(frame);
-		return -1;
-	}
-        
-	if (!file->file) {
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-	}
-        
-	/*d_printf(">>>fstat: parsing %s\n", file->fname);*/
-	if (SMBC_parse_path(frame,
-                            context,
-                            file->fname,
-                            NULL,
-                            &server,
-                            &share,
-                            &path,
-                            &user,
-                            &password,
-                            NULL)) {
-                errno = EINVAL;
-		TALLOC_FREE(frame);
-                return -1;
-        }
-        
-	/*d_printf(">>>fstat: resolving %s\n", path);*/
-	if (!cli_resolve_path(frame, "", file->srv->cli, path,
-                              &targetcli, &targetpath)) {
-		d_printf("Could not resolve %s\n", path);
-		TALLOC_FREE(frame);
-		return -1;
-	}
-	/*d_printf(">>>fstat: resolved path as %s\n", targetpath);*/
-        
-        if (!cli_ftruncate(targetcli, file->cli_fd, size)) {
-                errno = EINVAL;
-                TALLOC_FREE(frame);
-                return -1;
-        }
-        
-	TALLOC_FREE(frame);
-	return 0;
-        
-}

Deleted: branches/samba/upstream/source/libsmb/libsmb_misc.c
===================================================================
--- branches/samba/upstream/source/libsmb/libsmb_misc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/libsmb_misc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,73 +0,0 @@
-/* 
-   Unix SMB/Netbios implementation.
-   SMB client library implementation
-   Copyright (C) Andrew Tridgell 1998
-   Copyright (C) Richard Sharpe 2000, 2002
-   Copyright (C) John Terpstra 2000
-   Copyright (C) Tom Jansen (Ninja ISD) 2002 
-   Copyright (C) Derrell Lipman 2003-2008
-   Copyright (C) Jeremy Allison 2007, 2008
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-#include "libsmbclient.h"
-#include "libsmb_internal.h"
-
-
-/* 
- * check if an element is part of the list. 
- */
-int
-SMBC_dlist_contains(SMBCFILE * list, SMBCFILE *p)
-{
-	if (!p || !list) return False;
-	do {
-		if (p == list) return True;
-		list = list->next;
-	} while (list);
-	return False;
-}
-
-
-/*
- * Convert an SMB error into a UNIX error ...
- */
-int
-SMBC_errno(SMBCCTX *context,
-           struct cli_state *c)
-{
-	int ret = cli_errno(c);
-        
-        if (cli_is_dos_error(c)) {
-                uint8 eclass;
-                uint32 ecode;
-                
-                cli_dos_error(c, &eclass, &ecode);
-                
-                DEBUG(3,("smbc_error %d %d (0x%x) -> %d\n", 
-                         (int)eclass, (int)ecode, (int)ecode, ret));
-        } else {
-                NTSTATUS status;
-                
-                status = cli_nt_error(c);
-                
-                DEBUG(3,("smbc errno %s -> %d\n",
-                         nt_errstr(status), ret));
-        }
-        
-	return ret;
-}
-

Deleted: branches/samba/upstream/source/libsmb/libsmb_path.c
===================================================================
--- branches/samba/upstream/source/libsmb/libsmb_path.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/libsmb_path.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,400 +0,0 @@
-/* 
-   Unix SMB/Netbios implementation.
-   SMB client library implementation
-   Copyright (C) Andrew Tridgell 1998
-   Copyright (C) Richard Sharpe 2000, 2002
-   Copyright (C) John Terpstra 2000
-   Copyright (C) Tom Jansen (Ninja ISD) 2002 
-   Copyright (C) Derrell Lipman 2003-2008
-   Copyright (C) Jeremy Allison 2007, 2008
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-#include "libsmbclient.h"
-#include "libsmb_internal.h"
-
-
-/* Used by urldecode_talloc() */
-static int 
-hex2int( unsigned int _char )
-{
-        if ( _char >= 'A' && _char <='F')
-                return _char - 'A' + 10;
-        if ( _char >= 'a' && _char <='f')
-                return _char - 'a' + 10;
-        if ( _char >= '0' && _char <='9')
-                return _char - '0';
-        return -1;
-}
-
-/*
- * SMBC_urldecode()
- * and urldecode_talloc() (internal fn.)
- *
- * Convert strings of %xx to their single character equivalent.  Each 'x' must
- * be a valid hexadecimal digit, or that % sequence is left undecoded.
- *
- * dest may, but need not be, the same pointer as src.
- *
- * Returns the number of % sequences which could not be converted due to lack
- * of two following hexadecimal digits.
- */
-static int
-urldecode_talloc(TALLOC_CTX *ctx, char **pp_dest, const char *src)
-{
-	int old_length = strlen(src);
-	int i = 0;
-	int err_count = 0;
-	size_t newlen = 1;
-	char *p, *dest;
-        
-	if (old_length == 0) {
-		return 0;
-	}
-        
-	*pp_dest = NULL;
-	for (i = 0; i < old_length; ) {
-		unsigned char character = src[i++];
-                
-		if (character == '%') {
-			int a = i+1 < old_length ? hex2int(src[i]) : -1;
-			int b = i+1 < old_length ? hex2int(src[i+1]) : -1;
-                        
-			/* Replace valid sequence */
-			if (a != -1 && b != -1) {
-				/* Replace valid %xx sequence with %dd */
-				character = (a * 16) + b;
-				if (character == '\0') {
-					break; /* Stop at %00 */
-				}
-				i += 2;
-			} else {
-				err_count++;
-			}
-		}
-		newlen++;
-	}
-        
-	dest = TALLOC_ARRAY(ctx, char, newlen);
-	if (!dest) {
-		return err_count;
-	}
-        
-	err_count = 0;
-	for (p = dest, i = 0; i < old_length; ) {
-                unsigned char character = src[i++];
-                
-                if (character == '%') {
-                        int a = i+1 < old_length ? hex2int(src[i]) : -1;
-                        int b = i+1 < old_length ? hex2int(src[i+1]) : -1;
-                        
-                        /* Replace valid sequence */
-                        if (a != -1 && b != -1) {
-                                /* Replace valid %xx sequence with %dd */
-                                character = (a * 16) + b;
-                                if (character == '\0') {
-                                        break; /* Stop at %00 */
-                                }
-                                i += 2;
-                        } else {
-                                err_count++;
-                        }
-                }
-                *p++ = character;
-        }
-        
-        *p = '\0';
-	*pp_dest = dest;
-        return err_count;
-}
-
-int
-SMBC_urldecode(char *dest,
-               char *src,
-               size_t max_dest_len)
-{
-	TALLOC_CTX *frame = talloc_stackframe();
-	char *pdest;
-	int ret = urldecode_talloc(frame, &pdest, src);
-        
-	if (pdest) {
-		strlcpy(dest, pdest, max_dest_len);
-	}
-	TALLOC_FREE(frame);
-	return ret;
-}
-
-/*
- * SMBC_urlencode()
- *
- * Convert any characters not specifically allowed in a URL into their %xx
- * equivalent.
- *
- * Returns the remaining buffer length.
- */
-int
-SMBC_urlencode(char *dest,
-               char *src,
-               int max_dest_len)
-{
-        char hex[] = "0123456789ABCDEF";
-        
-        for (; *src != '\0' && max_dest_len >= 3; src++) {
-                
-                if ((*src < '0' &&
-                     *src != '-' &&
-                     *src != '.') ||
-                    (*src > '9' &&
-                     *src < 'A') ||
-                    (*src > 'Z' &&
-                     *src < 'a' &&
-                     *src != '_') ||
-                    (*src > 'z')) {
-                        *dest++ = '%';
-                        *dest++ = hex[(*src >> 4) & 0x0f];
-                        *dest++ = hex[*src & 0x0f];
-                        max_dest_len -= 3;
-                } else {
-                        *dest++ = *src;
-                        max_dest_len--;
-                }
-        }
-        
-        *dest++ = '\0';
-        max_dest_len--;
-        
-        return max_dest_len;
-}
-
-/*
- * Function to parse a path and turn it into components
- *
- * The general format of an SMB URI is explain in Christopher Hertel's CIFS
- * book, at http://ubiqx.org/cifs/Appendix-D.html.  We accept a subset of the
- * general format ("smb:" only; we do not look for "cifs:").
- *
- *
- * We accept:
- *  smb://[[[domain;]user[:password]@]server[/share[/path[/file]]]][?options]
- *
- * Meaning of URLs:
- *
- * smb://           Show all workgroups.
- *
- *                  The method of locating the list of workgroups varies
- *                  depending upon the setting of the context variable
- *                  context->options.browse_max_lmb_count.  This value
- *                  determines the maximum number of local master browsers to
- *                  query for the list of workgroups.  In order to ensure that
- *                  a complete list of workgroups is obtained, all master
- *                  browsers must be queried, but if there are many
- *                  workgroups, the time spent querying can begin to add up.
- *                  For small networks (not many workgroups), it is suggested
- *                  that this variable be set to 0, indicating query all local
- *                  master browsers.  When the network has many workgroups, a
- *                  reasonable setting for this variable might be around 3.
- *
- * smb://name/      if name<1D> or name<1B> exists, list servers in
- *                  workgroup, else, if name<20> exists, list all shares
- *                  for server ...
- *
- * If "options" are provided, this function returns the entire option list as a
- * string, for later parsing by the caller.  Note that currently, no options
- * are supported.
- */
-
-static const char *smbc_prefix = "smb:";
-
-int
-SMBC_parse_path(TALLOC_CTX *ctx,
-		SMBCCTX *context,
-                const char *fname,
-                char **pp_workgroup,
-                char **pp_server,
-                char **pp_share,
-                char **pp_path,
-		char **pp_user,
-                char **pp_password,
-                char **pp_options)
-{
-	char *s;
-	const char *p;
-	char *q, *r;
-	int len;
-        
-	/* Ensure these returns are at least valid pointers. */
-	*pp_server = talloc_strdup(ctx, "");
-	*pp_share = talloc_strdup(ctx, "");
-	*pp_path = talloc_strdup(ctx, "");
-	*pp_user = talloc_strdup(ctx, "");
-	*pp_password = talloc_strdup(ctx, "");
-        
-	if (!*pp_server || !*pp_share || !*pp_path ||
-            !*pp_user || !*pp_password) {
-		return -1;
-	}
-        
-        /*
-         * Assume we wont find an authentication domain to parse, so default
-         * to the workgroup in the provided context.
-         */
-	if (pp_workgroup != NULL) {
-		*pp_workgroup =
-                        talloc_strdup(ctx, smbc_getWorkgroup(context));
-	}
-        
-	if (pp_options) {
-		*pp_options = talloc_strdup(ctx, "");
-	}
-	s = talloc_strdup(ctx, fname);
-        
-	/* see if it has the right prefix */
-	len = strlen(smbc_prefix);
-	if (strncmp(s,smbc_prefix,len) || (s[len] != '/' && s[len] != 0)) {
-                return -1; /* What about no smb: ? */
-        }
-        
-	p = s + len;
-        
-	/* Watch the test below, we are testing to see if we should exit */
-        
-	if (strncmp(p, "//", 2) && strncmp(p, "\\\\", 2)) {
-                DEBUG(1, ("Invalid path (does not begin with smb://"));
-		return -1;
-	}
-        
-	p += 2;  /* Skip the double slash */
-        
-        /* See if any options were specified */
-        if ((q = strrchr(p, '?')) != NULL ) {
-                /* There are options.  Null terminate here and point to them */
-                *q++ = '\0';
-                
-                DEBUG(4, ("Found options '%s'", q));
-                
-		/* Copy the options */
-		if (*pp_options != NULL) {
-			TALLOC_FREE(*pp_options);
-			*pp_options = talloc_strdup(ctx, q);
-		}
-	}
-        
-	if (*p == '\0') {
-		goto decoding;
-	}
-        
-	if (*p == '/') {
-		int wl = strlen(smbc_getWorkgroup(context));
-                
-		if (wl > 16) {
-			wl = 16;
-		}
-                
-		*pp_server = talloc_strdup(ctx, smbc_getWorkgroup(context));
-		if (!*pp_server) {
-			return -1;
-		}
-               	*pp_server[wl] = '\0';
-		return 0;
-	}
-        
-	/*
-	 * ok, its for us. Now parse out the server, share etc.
-	 *
-	 * However, we want to parse out [[domain;]user[:password]@] if it
-	 * exists ...
-	 */
-        
-	/* check that '@' occurs before '/', if '/' exists at all */
-	q = strchr_m(p, '@');
-	r = strchr_m(p, '/');
-	if (q && (!r || q < r)) {
-		char *userinfo = NULL;
-		const char *u;
-                
-		next_token_no_ltrim_talloc(ctx, &p, &userinfo, "@");
-		if (!userinfo) {
-			return -1;
-		}
-		u = userinfo;
-                
-		if (strchr_m(u, ';')) {
-			char *workgroup;
-			next_token_no_ltrim_talloc(ctx, &u, &workgroup, ";");
-			if (!workgroup) {
-				return -1;
-			}
-			if (pp_workgroup) {
-				*pp_workgroup = workgroup;
-			}
-		}
-                
-		if (strchr_m(u, ':')) {
-			next_token_no_ltrim_talloc(ctx, &u, pp_user, ":");
-			if (!*pp_user) {
-				return -1;
-			}
-			*pp_password = talloc_strdup(ctx, u);
-			if (!*pp_password) {
-				return -1;
-			}
-		} else {
-			*pp_user = talloc_strdup(ctx, u);
-			if (!*pp_user) {
-				return -1;
-			}
-		}
-	}
-        
-	if (!next_token_talloc(ctx, &p, pp_server, "/")) {
-		return -1;
-	}
-        
-	if (*p == (char)0) {
-		goto decoding;  /* That's it ... */
-	}
-        
-	if (!next_token_talloc(ctx, &p, pp_share, "/")) {
-		return -1;
-	}
-        
-        /*
-         * Prepend a leading slash if there's a file path, as required by
-         * NetApp filers.
-         */
-        if (*p != '\0') {
-		*pp_path = talloc_asprintf(ctx,
-                                           "\\%s",
-                                           p);
-        } else {
-		*pp_path = talloc_strdup(ctx, "");
-	}
-	if (!*pp_path) {
-		return -1;
-	}
-	string_replace(*pp_path, '/', '\\');
-        
-decoding:
-        
-	(void) urldecode_talloc(ctx, pp_path, *pp_path);
-	(void) urldecode_talloc(ctx, pp_server, *pp_server);
-	(void) urldecode_talloc(ctx, pp_share, *pp_share);
-	(void) urldecode_talloc(ctx, pp_user, *pp_user);
-	(void) urldecode_talloc(ctx, pp_password, *pp_password);
-        
-	return 0;
-}
-

Deleted: branches/samba/upstream/source/libsmb/libsmb_printjob.c
===================================================================
--- branches/samba/upstream/source/libsmb/libsmb_printjob.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/libsmb_printjob.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,336 +0,0 @@
-/* 
-   Unix SMB/Netbios implementation.
-   SMB client library implementation
-   Copyright (C) Andrew Tridgell 1998
-   Copyright (C) Richard Sharpe 2000, 2002
-   Copyright (C) John Terpstra 2000
-   Copyright (C) Tom Jansen (Ninja ISD) 2002 
-   Copyright (C) Derrell Lipman 2003-2008
-   Copyright (C) Jeremy Allison 2007, 2008
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-#include "libsmbclient.h"
-#include "libsmb_internal.h"
-
-
-/*
- * Open a print file to be written to by other calls
- */
-
-SMBCFILE *
-SMBC_open_print_job_ctx(SMBCCTX *context,
-                        const char *fname)
-{
-	char *server = NULL;
-	char *share = NULL;
-	char *user = NULL;
-	char *password = NULL;
-	char *path = NULL;
-	TALLOC_CTX *frame = talloc_stackframe();
-        
-	if (!context || !context->internal->initialized) {
-                
-                errno = EINVAL;
-		TALLOC_FREE(frame);
-                return NULL;
-        }
-        
-        if (!fname) {
-                errno = EINVAL;
-		TALLOC_FREE(frame);
-                return NULL;
-        }
-        
-        DEBUG(4, ("SMBC_open_print_job_ctx(%s)\n", fname));
-        
-        if (SMBC_parse_path(frame,
-                            context,
-                            fname,
-                            NULL,
-                            &server,
-                            &share,
-                            &path,
-                            &user,
-                            &password,
-                            NULL)) {
-                errno = EINVAL;
-		TALLOC_FREE(frame);
-                return NULL;
-        }
-        
-        /* What if the path is empty, or the file exists? */
-        
-	TALLOC_FREE(frame);
-        return smbc_getFunctionOpen(context)(context, fname, O_WRONLY, 666);
-}
-
-/*
- * Routine to print a file on a remote server ...
- *
- * We open the file, which we assume to be on a remote server, and then
- * copy it to a print file on the share specified by printq.
- */
-
-int
-SMBC_print_file_ctx(SMBCCTX *c_file,
-                    const char *fname,
-                    SMBCCTX *c_print,
-                    const char *printq)
-{
-        SMBCFILE *fid1;
-        SMBCFILE *fid2;
-        int bytes;
-        int saverr;
-        int tot_bytes = 0;
-        char buf[4096];
-	TALLOC_CTX *frame = talloc_stackframe();
-        
-        if (!c_file || !c_file->internal->initialized ||
-            !c_print || !c_print->internal->initialized) {
-                
-                errno = EINVAL;
-		TALLOC_FREE(frame);
-                return -1;
-                
-        }
-        
-        if (!fname && !printq) {
-                
-                errno = EINVAL;
-		TALLOC_FREE(frame);
-                return -1;
-                
-        }
-        
-        /* Try to open the file for reading ... */
-        
-        if ((long)(fid1 = smbc_getFunctionOpen(c_file)(c_file, fname,
-                                                       O_RDONLY, 0666)) < 0) {
-                DEBUG(3, ("Error, fname=%s, errno=%i\n", fname, errno));
-		TALLOC_FREE(frame);
-                return -1;  /* smbc_open sets errno */
-        }
-        
-        /* Now, try to open the printer file for writing */
-        
-        if ((long)(fid2 = smbc_getFunctionOpenPrintJob(c_print)(c_print,
-                                                                printq)) < 0) {
-                
-                saverr = errno;  /* Save errno */
-                smbc_getFunctionClose(c_file)(c_file, fid1);
-                errno = saverr;
-		TALLOC_FREE(frame);
-                return -1;
-                
-        }
-        
-        while ((bytes = smbc_getFunctionRead(c_file)(c_file, fid1,
-                                                     buf, sizeof(buf))) > 0) {
-                
-                tot_bytes += bytes;
-                
-                if ((smbc_getFunctionWrite(c_print)(c_print, fid2,
-                                                    buf, bytes)) < 0) {
-                        
-                        saverr = errno;
-                        smbc_getFunctionClose(c_file)(c_file, fid1);
-                        smbc_getFunctionClose(c_print)(c_print, fid2);
-                        errno = saverr;
-                        
-                }
-                
-        }
-        
-        saverr = errno;
-        
-        smbc_getFunctionClose(c_file)(c_file, fid1);
-        smbc_getFunctionClose(c_print)(c_print, fid2);
-        
-        if (bytes < 0) {
-                
-                errno = saverr;
-		TALLOC_FREE(frame);
-                return -1;
-                
-        }
-        
-	TALLOC_FREE(frame);
-        return tot_bytes;
-        
-}
-
-/*
- * Routine to list print jobs on a printer share ...
- */
-
-int
-SMBC_list_print_jobs_ctx(SMBCCTX *context,
-                         const char *fname,
-                         smbc_list_print_job_fn fn)
-{
-	SMBCSRV *srv = NULL;
-	char *server = NULL;
-	char *share = NULL;
-	char *user = NULL;
-	char *password = NULL;
-	char *workgroup = NULL;
-	char *path = NULL;
-	TALLOC_CTX *frame = talloc_stackframe();
-        
-	if (!context || !context->internal->initialized) {
-                
-                errno = EINVAL;
-		TALLOC_FREE(frame);
-                return -1;
-        }
-        
-        if (!fname) {
-                errno = EINVAL;
-		TALLOC_FREE(frame);
-                return -1;
-        }
-        
-        DEBUG(4, ("smbc_list_print_jobs(%s)\n", fname));
-        
-        if (SMBC_parse_path(frame,
-                            context,
-                            fname,
-                            &workgroup,
-                            &server,
-                            &share,
-                            &path,
-                            &user,
-                            &password,
-                            NULL)) {
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-        }
-        
-        if (!user || user[0] == (char)0) {
-		user = talloc_strdup(frame, smbc_getUser(context));
-		if (!user) {
-			errno = ENOMEM;
-			TALLOC_FREE(frame);
-			return -1;
-		}
-	}
-        
-        srv = SMBC_server(frame, context, True,
-                          server, share, &workgroup, &user, &password);
-        
-        if (!srv) {
-		TALLOC_FREE(frame);
-                return -1;  /* errno set by SMBC_server */
-        }
-        
-        if (cli_print_queue(srv->cli,
-                            (void (*)(struct print_job_info *))fn) < 0) {
-                errno = SMBC_errno(context, srv->cli);
-		TALLOC_FREE(frame);
-                return -1;
-        }
-        
-	TALLOC_FREE(frame);
-        return 0;
-        
-}
-
-/*
- * Delete a print job from a remote printer share
- */
-
-int
-SMBC_unlink_print_job_ctx(SMBCCTX *context,
-                          const char *fname,
-                          int id)
-{
-	SMBCSRV *srv = NULL;
-	char *server = NULL;
-	char *share = NULL;
-	char *user = NULL;
-	char *password = NULL;
-	char *workgroup = NULL;
-	char *path = NULL;
-        int err;
-	TALLOC_CTX *frame = talloc_stackframe();
-        
-	if (!context || !context->internal->initialized) {
-                
-                errno = EINVAL;
-		TALLOC_FREE(frame);
-                return -1;
-        }
-        
-        if (!fname) {
-                errno = EINVAL;
-		TALLOC_FREE(frame);
-                return -1;
-        }
-        
-        DEBUG(4, ("smbc_unlink_print_job(%s)\n", fname));
-        
-        if (SMBC_parse_path(frame,
-                            context,
-                            fname,
-                            &workgroup,
-                            &server,
-                            &share,
-                            &path,
-                            &user,
-                            &password,
-                            NULL)) {
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-        }
-        
-        if (!user || user[0] == (char)0) {
-		user = talloc_strdup(frame, smbc_getUser(context));
-		if (!user) {
-			errno = ENOMEM;
-			TALLOC_FREE(frame);
-			return -1;
-		}
-	}
-        
-        srv = SMBC_server(frame, context, True,
-                          server, share, &workgroup, &user, &password);
-        
-        if (!srv) {
-                
-		TALLOC_FREE(frame);
-                return -1;  /* errno set by SMBC_server */
-                
-        }
-        
-        if ((err = cli_printjob_del(srv->cli, id)) != 0) {
-                
-                if (err < 0)
-                        errno = SMBC_errno(context, srv->cli);
-                else if (err == ERRnosuchprintjob)
-                        errno = EINVAL;
-		TALLOC_FREE(frame);
-                return -1;
-                
-        }
-        
-	TALLOC_FREE(frame);
-        return 0;
-        
-}
-

Deleted: branches/samba/upstream/source/libsmb/libsmb_server.c
===================================================================
--- branches/samba/upstream/source/libsmb/libsmb_server.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/libsmb_server.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,700 +0,0 @@
-/* 
-   Unix SMB/Netbios implementation.
-   SMB client library implementation
-   Copyright (C) Andrew Tridgell 1998
-   Copyright (C) Richard Sharpe 2000, 2002
-   Copyright (C) John Terpstra 2000
-   Copyright (C) Tom Jansen (Ninja ISD) 2002 
-   Copyright (C) Derrell Lipman 2003-2008
-   Copyright (C) Jeremy Allison 2007, 2008
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-#include "libsmbclient.h"
-#include "libsmb_internal.h"
-
-
-/* 
- * Check a server for being alive and well.
- * returns 0 if the server is in shape. Returns 1 on error 
- * 
- * Also useable outside libsmbclient to enable external cache
- * to do some checks too.
- */
-int
-SMBC_check_server(SMBCCTX * context,
-                  SMBCSRV * server) 
-{
-        socklen_t size;
-        struct sockaddr addr;
-        
-        size = sizeof(addr);
-        return (getpeername(server->cli->fd, &addr, &size) == -1);
-}
-
-/* 
- * Remove a server from the cached server list it's unused.
- * On success, 0 is returned. 1 is returned if the server could not be removed.
- * 
- * Also useable outside libsmbclient
- */
-int
-SMBC_remove_unused_server(SMBCCTX * context,
-                          SMBCSRV * srv)
-{
-	SMBCFILE * file;
-        
-	/* are we being fooled ? */
-	if (!context || !context->internal->initialized || !srv) {
-                return 1;
-        }
-        
-	/* Check all open files/directories for a relation with this server */
-	for (file = context->internal->files; file; file = file->next) {
-		if (file->srv == srv) {
-			/* Still used */
-			DEBUG(3, ("smbc_remove_usused_server: "
-                                  "%p still used by %p.\n",
-				  srv, file));
-			return 1;
-		}
-	}
-        
-	DLIST_REMOVE(context->internal->servers, srv);
-        
-	cli_shutdown(srv->cli);
-	srv->cli = NULL;
-        
-	DEBUG(3, ("smbc_remove_usused_server: %p removed.\n", srv));
-        
-	smbc_getFunctionRemoveCachedServer(context)(context, srv);
-        
-        SAFE_FREE(srv);
-	return 0;
-}
-
-/****************************************************************
- * Call the auth_fn with fixed size (fstring) buffers.
- ***************************************************************/
-void
-SMBC_call_auth_fn(TALLOC_CTX *ctx,
-                  SMBCCTX *context,
-                  const char *server,
-                  const char *share,
-                  char **pp_workgroup,
-                  char **pp_username,
-                  char **pp_password)
-{
-	fstring workgroup;
-	fstring username;
-	fstring password;
-        smbc_get_auth_data_with_context_fn auth_with_context_fn;
-        
-	strlcpy(workgroup, *pp_workgroup, sizeof(workgroup));
-	strlcpy(username, *pp_username, sizeof(username));
-	strlcpy(password, *pp_password, sizeof(password));
-        
-        /* See if there's an authentication with context function provided */
-        auth_with_context_fn = smbc_getFunctionAuthDataWithContext(context);
-        if (auth_with_context_fn)
-        {
-            (* auth_with_context_fn)(context,
-                                     server, share,
-                                     workgroup, sizeof(workgroup),
-                                     username, sizeof(username),
-                                     password, sizeof(password));
-        }
-        else
-        {
-            smbc_getFunctionAuthData(context)(server, share,
-                                              workgroup, sizeof(workgroup),
-                                              username, sizeof(username),
-                                              password, sizeof(password));
-        }
-        
-	TALLOC_FREE(*pp_workgroup);
-	TALLOC_FREE(*pp_username);
-	TALLOC_FREE(*pp_password);
-        
-	*pp_workgroup = talloc_strdup(ctx, workgroup);
-	*pp_username = talloc_strdup(ctx, username);
-	*pp_password = talloc_strdup(ctx, password);
-}
-
-
-void
-SMBC_get_auth_data(const char *server, const char *share,
-                   char *workgroup_buf, int workgroup_buf_len,
-                   char *username_buf, int username_buf_len,
-                   char *password_buf, int password_buf_len)
-{
-        /* Default function just uses provided data.  Nothing to do. */
-}
-
-
-
-SMBCSRV *
-SMBC_find_server(TALLOC_CTX *ctx,
-                 SMBCCTX *context,
-                 const char *server,
-                 const char *share,
-                 char **pp_workgroup,
-                 char **pp_username,
-                 char **pp_password)
-{
-        SMBCSRV *srv;
-        int auth_called = 0;
-        
-        if (!pp_workgroup || !pp_username || !pp_password) {
-                return NULL;
-        }
-                
-check_server_cache:
-        
-	srv = smbc_getFunctionGetCachedServer(context)(context,
-                                                       server, share,
-                                                       *pp_workgroup,
-                                                       *pp_username);
-        
-	if (!auth_called && !srv && (!*pp_username || !(*pp_username)[0] ||
-                                     !*pp_password || !(*pp_password)[0])) {
-		SMBC_call_auth_fn(ctx, context, server, share,
-                                  pp_workgroup, pp_username, pp_password);
-                
-		/*
-                 * However, smbc_auth_fn may have picked up info relating to
-                 * an existing connection, so try for an existing connection
-                 * again ...
-                 */
-		auth_called = 1;
-		goto check_server_cache;
-                
-	}
-        
-	if (srv) {
-		if (smbc_getFunctionCheckServer(context)(context, srv)) {
-			/*
-                         * This server is no good anymore
-                         * Try to remove it and check for more possible
-                         * servers in the cache
-                         */
-			if (smbc_getFunctionRemoveUnusedServer(context)(context,
-                                                                        srv)) { 
-                                /*
-                                 * We could not remove the server completely,
-                                 * remove it from the cache so we will not get
-                                 * it again. It will be removed when the last
-                                 * file/dir is closed.
-                                 */
-				smbc_getFunctionRemoveCachedServer(context)(context,
-                                                                            srv);
-			}
-                        
-			/*
-                         * Maybe there are more cached connections to this
-                         * server
-                         */
-			goto check_server_cache;
-		}
-                
-		return srv;
- 	}
-        
-        return NULL;
-}
-
-/*
- * Connect to a server, possibly on an existing connection
- *
- * Here, what we want to do is: If the server and username
- * match an existing connection, reuse that, otherwise, establish a
- * new connection.
- *
- * If we have to create a new connection, call the auth_fn to get the
- * info we need, unless the username and password were passed in.
- */
-
-SMBCSRV *
-SMBC_server(TALLOC_CTX *ctx,
-            SMBCCTX *context,
-            bool connect_if_not_found,
-            const char *server,
-            const char *share,
-            char **pp_workgroup,
-            char **pp_username,
-            char **pp_password)
-{
-	SMBCSRV *srv=NULL;
-	struct cli_state *c;
-	struct nmb_name called, calling;
-	const char *server_n = server;
-	struct sockaddr_storage ss;
-	int tried_reverse = 0;
-        int port_try_first;
-        int port_try_next;
-        const char *username_used;
- 	NTSTATUS status;
-        
-	zero_addr(&ss);
-	ZERO_STRUCT(c);
-        
-	if (server[0] == 0) {
-		errno = EPERM;
-		return NULL;
-	}
-        
-        /* Look for a cached connection */
-        srv = SMBC_find_server(ctx, context, server, share,
-                               pp_workgroup, pp_username, pp_password);
-        
-        /*
-         * If we found a connection and we're only allowed one share per
-         * server...
-         */
-        if (srv &&
-            *share != '\0' &&
-            smbc_getOptionOneSharePerServer(context)) {
-                
-                /*
-                 * ... then if there's no current connection to the share,
-                 * connect to it.  SMBC_find_server(), or rather the function
-                 * pointed to by context->get_cached_srv_fn which
-                 * was called by SMBC_find_server(), will have issued a tree
-                 * disconnect if the requested share is not the same as the
-                 * one that was already connected.
-                 */
-                if (srv->cli->cnum == (uint16) -1) {
-                        /* Ensure we have accurate auth info */
-			SMBC_call_auth_fn(ctx, context, server, share,
-                                          pp_workgroup,
-                                          pp_username,
-                                          pp_password);
-                        
-			if (!*pp_workgroup || !*pp_username || !*pp_password) {
-				errno = ENOMEM;
-				cli_shutdown(srv->cli);
-				srv->cli = NULL;
-				smbc_getFunctionRemoveCachedServer(context)(context,
-                                                                            srv);
-				return NULL;
-			}
-                        
-			/*
-			 * We don't need to renegotiate encryption
-			 * here as the encryption context is not per
-			 * tid.
-			 */
-                        
-			if (!cli_send_tconX(srv->cli, share, "?????",
-                                            *pp_password,
-                                            strlen(*pp_password)+1)) {
-                                
-                                errno = SMBC_errno(context, srv->cli);
-                                cli_shutdown(srv->cli);
-				srv->cli = NULL;
-                                smbc_getFunctionRemoveCachedServer(context)(context,
-                                                                            srv);
-                                srv = NULL;
-                        }
-                        
-                        /*
-                         * Regenerate the dev value since it's based on both
-                         * server and share
-                         */
-                        if (srv) {
-                                srv->dev = (dev_t)(str_checksum(server) ^
-                                                   str_checksum(share));
-                        }
-                }
-        }
-        
-        /* If we have a connection... */
-        if (srv) {
-                
-                /* ... then we're done here.  Give 'em what they came for. */
-                return srv;
-        }
-        
-        /* If we're not asked to connect when a connection doesn't exist... */
-        if (! connect_if_not_found) {
-                /* ... then we're done here. */
-                return NULL;
-        }
-        
-	if (!*pp_workgroup || !*pp_username || !*pp_password) {
-		errno = ENOMEM;
-		return NULL;
-	}
-        
-	make_nmb_name(&calling, smbc_getNetbiosName(context), 0x0);
-	make_nmb_name(&called , server, 0x20);
-        
-	DEBUG(4,("SMBC_server: server_n=[%s] server=[%s]\n", server_n, server));
-        
-	DEBUG(4,(" -> server_n=[%s] server=[%s]\n", server_n, server));
-        
-again:
-        
-	zero_addr(&ss);
-        
-	/* have to open a new connection */
-	if ((c = cli_initialise()) == NULL) {
-		errno = ENOMEM;
-		return NULL;
-	}
-        
-        if (smbc_getOptionUseKerberos(context)) {
-		c->use_kerberos = True;
-	}
-
-        if (smbc_getOptionFallbackAfterKerberos(context)) {
-		c->fallback_after_kerberos = True;
-	}
-        
-	c->timeout = smbc_getTimeout(context);
-        
-        /*
-         * Force use of port 139 for first try if share is $IPC, empty, or
-         * null, so browse lists can work
-         */
-        if (share == NULL || *share == '\0' || strcmp(share, "IPC$") == 0) {
-                port_try_first = 139;
-                port_try_next = 445;
-        } else {
-                port_try_first = 445;
-                port_try_next = 139;
-        }
-        
-        c->port = port_try_first;
-        
-	status = cli_connect(c, server_n, &ss);
-	if (!NT_STATUS_IS_OK(status)) {
-                
-                /* First connection attempt failed.  Try alternate port. */
-                c->port = port_try_next;
-                
-                status = cli_connect(c, server_n, &ss);
-		if (!NT_STATUS_IS_OK(status)) {
-			cli_shutdown(c);
-			errno = ETIMEDOUT;
-			return NULL;
-		}
-	}
-        
-	if (!cli_session_request(c, &calling, &called)) {
-		cli_shutdown(c);
-		if (strcmp(called.name, "*SMBSERVER")) {
-			make_nmb_name(&called , "*SMBSERVER", 0x20);
-			goto again;
-		} else {  /* Try one more time, but ensure we don't loop */
-                        
-			/* Only try this if server is an IP address ... */
-                        
-			if (is_ipaddress(server) && !tried_reverse) {
-				fstring remote_name;
-				struct sockaddr_storage rem_ss;
-                                
-				if (!interpret_string_addr(&rem_ss, server,
-                                                           NI_NUMERICHOST)) {
-					DEBUG(4, ("Could not convert IP address "
-                                                  "%s to struct sockaddr_storage\n",
-                                                  server));
-					errno = ETIMEDOUT;
-					return NULL;
-				}
-                                
-				tried_reverse++; /* Yuck */
-                                
-				if (name_status_find("*", 0, 0,
-                                                     &rem_ss, remote_name)) {
-					make_nmb_name(&called,
-                                                      remote_name,
-                                                      0x20);
-					goto again;
-				}
-			}
-		}
-		errno = ETIMEDOUT;
-		return NULL;
-	}
-        
-	DEBUG(4,(" session request ok\n"));
-        
-	if (!cli_negprot(c)) {
-		cli_shutdown(c);
-		errno = ETIMEDOUT;
-		return NULL;
-	}
-        
-        username_used = *pp_username;
-        
-	if (!NT_STATUS_IS_OK(cli_session_setup(c, username_used,
-					       *pp_password,
-                                               strlen(*pp_password),
-					       *pp_password,
-                                               strlen(*pp_password),
-					       *pp_workgroup))) {
-                
-                /* Failed.  Try an anonymous login, if allowed by flags. */
-                username_used = "";
-                
-                if (smbc_getOptionNoAutoAnonymousLogin(context) ||
-                    !NT_STATUS_IS_OK(cli_session_setup(c, username_used,
-                                                       *pp_password, 1,
-                                                       *pp_password, 0,
-                                                       *pp_workgroup))) {
-                        
-                        cli_shutdown(c);
-                        errno = EPERM;
-                        return NULL;
-                }
-	}
-        
-	DEBUG(4,(" session setup ok\n"));
-        
-	if (!cli_send_tconX(c, share, "?????",
-			    *pp_password, strlen(*pp_password)+1)) {
-		errno = SMBC_errno(context, c);
-		cli_shutdown(c);
-		return NULL;
-	}
-        
-	DEBUG(4,(" tconx ok\n"));
-        
-	if (context->internal->smb_encryption_level) {
-		/* Attempt UNIX smb encryption. */
-		if (!NT_STATUS_IS_OK(cli_force_encryption(c,
-                                                          username_used,
-                                                          *pp_password,
-                                                          *pp_workgroup))) {
-                        
-			/*
-			 * context->smb_encryption_level == 1
-			 * means don't fail if encryption can't be negotiated,
-			 * == 2 means fail if encryption can't be negotiated.
-			 */
-                        
-			DEBUG(4,(" SMB encrypt failed\n"));
-                        
-			if (context->internal->smb_encryption_level == 2) {
-	                        cli_shutdown(c);
-				errno = EPERM;
-				return NULL;
-			}
-		}
-		DEBUG(4,(" SMB encrypt ok\n"));
-	}
-        
-	/*
-	 * Ok, we have got a nice connection
-	 * Let's allocate a server structure.
-	 */
-        
-	srv = SMB_MALLOC_P(SMBCSRV);
-	if (!srv) {
-		errno = ENOMEM;
-		goto failed;
-	}
-        
-	ZERO_STRUCTP(srv);
-	srv->cli = c;
-	srv->dev = (dev_t)(str_checksum(server) ^ str_checksum(share));
-        srv->no_pathinfo = False;
-        srv->no_pathinfo2 = False;
-        srv->no_nt_session = False;
-        
-	/* now add it to the cache (internal or external)  */
-	/* Let the cache function set errno if it wants to */
-	errno = 0;
-	if (smbc_getFunctionAddCachedServer(context)(context, srv,
-                                                     server, share,
-                                                     *pp_workgroup,
-                                                     *pp_username)) {
-		int saved_errno = errno;
-		DEBUG(3, (" Failed to add server to cache\n"));
-		errno = saved_errno;
-		if (errno == 0) {
-			errno = ENOMEM;
-		}
-		goto failed;
-	}
-        
-	DEBUG(2, ("Server connect ok: //%s/%s: %p\n",
-		  server, share, srv));
-        
-	DLIST_ADD(context->internal->servers, srv);
-	return srv;
-        
-failed:
-	cli_shutdown(c);
-	if (!srv) {
-		return NULL;
-	}
-        
-	SAFE_FREE(srv);
-	return NULL;
-}
-
-/*
- * Connect to a server for getting/setting attributes, possibly on an existing
- * connection.  This works similarly to SMBC_server().
- */
-SMBCSRV *
-SMBC_attr_server(TALLOC_CTX *ctx,
-                 SMBCCTX *context,
-                 const char *server,
-                 const char *share,
-                 char **pp_workgroup,
-                 char **pp_username,
-                 char **pp_password)
-{
-        int flags;
-        struct sockaddr_storage ss;
-	struct cli_state *ipc_cli;
-	struct rpc_pipe_client *pipe_hnd;
-        NTSTATUS nt_status;
-	SMBCSRV *ipc_srv=NULL;
-        
-        /*
-         * See if we've already created this special connection.  Reference
-         * our "special" share name '*IPC$', which is an impossible real share
-         * name due to the leading asterisk.
-         */
-        ipc_srv = SMBC_find_server(ctx, context, server, "*IPC$",
-                                   pp_workgroup, pp_username, pp_password);
-        if (!ipc_srv) {
-                
-                /* We didn't find a cached connection.  Get the password */
-		if (!*pp_password || (*pp_password)[0] == '\0') {
-                        /* ... then retrieve it now. */
-			SMBC_call_auth_fn(ctx, context, server, share,
-                                          pp_workgroup,
-                                          pp_username,
-                                          pp_password);
-			if (!*pp_workgroup || !*pp_username || !*pp_password) {
-				errno = ENOMEM;
-				return NULL;
-			}
-                }
-                
-                flags = 0;
-                if (smbc_getOptionUseKerberos(context)) {
-                        flags |= CLI_FULL_CONNECTION_USE_KERBEROS;
-                }
-                
-                zero_addr(&ss);
-                nt_status = cli_full_connection(&ipc_cli,
-						global_myname(), server,
-						&ss, 0, "IPC$", "?????",
-						*pp_username,
-						*pp_workgroup,
-						*pp_password,
-						flags,
-						Undefined, NULL);
-                if (! NT_STATUS_IS_OK(nt_status)) {
-                        DEBUG(1,("cli_full_connection failed! (%s)\n",
-                                 nt_errstr(nt_status)));
-                        errno = ENOTSUP;
-                        return NULL;
-                }
-                
-		if (context->internal->smb_encryption_level) {
-			/* Attempt UNIX smb encryption. */
-			if (!NT_STATUS_IS_OK(cli_force_encryption(ipc_cli,
-                                                                  *pp_username,
-                                                                  *pp_password,
-                                                                  *pp_workgroup))) {
-                                
-				/*
-				 * context->smb_encryption_level ==
-				 * 1 means don't fail if encryption can't be
-				 * negotiated, == 2 means fail if encryption
-				 * can't be negotiated.
-				 */
-                                
-				DEBUG(4,(" SMB encrypt failed on IPC$\n"));
-                                
-				if (context->internal->smb_encryption_level == 2) {
-		                        cli_shutdown(ipc_cli);
-					errno = EPERM;
-					return NULL;
-				}
-			}
-			DEBUG(4,(" SMB encrypt ok on IPC$\n"));
-		}
-                
-                ipc_srv = SMB_MALLOC_P(SMBCSRV);
-                if (!ipc_srv) {
-                        errno = ENOMEM;
-                        cli_shutdown(ipc_cli);
-                        return NULL;
-                }
-                
-                ZERO_STRUCTP(ipc_srv);
-                ipc_srv->cli = ipc_cli;
-                
-                pipe_hnd = cli_rpc_pipe_open_noauth(ipc_srv->cli,
-                                                    PI_LSARPC,
-                                                    &nt_status);
-                if (!pipe_hnd) {
-                        DEBUG(1, ("cli_nt_session_open fail!\n"));
-                        errno = ENOTSUP;
-                        cli_shutdown(ipc_srv->cli);
-                        free(ipc_srv);
-                        return NULL;
-                }
-                
-                /*
-                 * Some systems don't support
-                 * SEC_RIGHTS_MAXIMUM_ALLOWED, but NT sends 0x2000000
-                 * so we might as well do it too.
-                 */
-                
-                nt_status = rpccli_lsa_open_policy(
-                        pipe_hnd,
-                        talloc_tos(),
-                        True,
-                        GENERIC_EXECUTE_ACCESS,
-                        &ipc_srv->pol);
-                
-                if (!NT_STATUS_IS_OK(nt_status)) {
-                        errno = SMBC_errno(context, ipc_srv->cli);
-                        cli_shutdown(ipc_srv->cli);
-                        return NULL;
-                }
-                
-                /* now add it to the cache (internal or external) */
-                
-                errno = 0;      /* let cache function set errno if it likes */
-                if (smbc_getFunctionAddCachedServer(context)(context, ipc_srv,
-                                                             server,
-                                                             "*IPC$",
-                                                             *pp_workgroup,
-                                                             *pp_username)) {
-                        DEBUG(3, (" Failed to add server to cache\n"));
-                        if (errno == 0) {
-                                errno = ENOMEM;
-                        }
-                        cli_shutdown(ipc_srv->cli);
-                        free(ipc_srv);
-                        return NULL;
-                }
-                
-                DLIST_ADD(context->internal->servers, ipc_srv);
-        }
-        
-        return ipc_srv;
-}

Deleted: branches/samba/upstream/source/libsmb/libsmb_setget.c
===================================================================
--- branches/samba/upstream/source/libsmb/libsmb_setget.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/libsmb_setget.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,905 +0,0 @@
-/* 
-   Unix SMB/Netbios implementation.
-   SMB client library implementation
-   Copyright (C) Andrew Tridgell 1998
-   Copyright (C) Richard Sharpe 2000, 2002
-   Copyright (C) John Terpstra 2000
-   Copyright (C) Tom Jansen (Ninja ISD) 2002 
-   Copyright (C) Derrell Lipman 2003-2008
-   Copyright (C) Jeremy Allison 2007, 2008
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-#define __LIBSMBCLIENT_INTERNAL__
-#include "libsmbclient.h"
-#include "libsmb_internal.h"
-
-
-/** Get the netbios name used for making connections */
-char *
-smbc_getNetbiosName(SMBCCTX *c)
-{
-        return c->netbios_name;
-}
-
-/** Set the netbios name used for making connections */
-void
-smbc_setNetbiosName(SMBCCTX *c, char * netbios_name)
-{
-        c->netbios_name = netbios_name;
-}
-
-/** Get the workgroup used for making connections */
-char *
-smbc_getWorkgroup(SMBCCTX *c)
-{
-        return c->workgroup;
-}
-
-/** Set the workgroup used for making connections */
-void
-smbc_setWorkgroup(SMBCCTX *c, char * workgroup)
-{
-        c->workgroup = workgroup;
-}
-
-/** Get the username used for making connections */
-char *
-smbc_getUser(SMBCCTX *c)
-{
-        return c->user;
-}
-
-/** Set the username used for making connections */
-void
-smbc_setUser(SMBCCTX *c, char * user)
-{
-        c->user = user;
-}
-
-/** Get the debug level */
-int
-smbc_getDebug(SMBCCTX *c)
-{
-        return c->debug;
-}
-
-/** Set the debug level */
-void
-smbc_setDebug(SMBCCTX *c, int debug)
-{
-        c->debug = debug;
-        DEBUGLEVEL = debug;
-}
-
-/**
- * Get the timeout used for waiting on connections and response data
- * (in milliseconds)
- */
-int
-smbc_getTimeout(SMBCCTX *c)
-{
-        return c->timeout;
-}
-
-/**
- * Set the timeout used for waiting on connections and response data
- * (in milliseconds)
- */
-void
-smbc_setTimeout(SMBCCTX *c, int timeout)
-{
-        c->timeout = timeout;
-}
-
-/** Get whether to log to standard error instead of standard output */
-smbc_bool
-smbc_getOptionDebugToStderr(SMBCCTX *c)
-{
-        return c->internal->debug_stderr;
-}
-
-/** Set whether to log to standard error instead of standard output */
-void
-smbc_setOptionDebugToStderr(SMBCCTX *c, smbc_bool b)
-{
-        c->internal->debug_stderr = b;
-}
-
-/**
- * Get whether to use new-style time attribute names, e.g. WRITE_TIME rather
- * than the old-style names such as M_TIME.  This allows also setting/getting
- * CREATE_TIME which was previously unimplemented.  (Note that the old C_TIME
- * was supposed to be CHANGE_TIME but was confused and sometimes referred to
- * CREATE_TIME.)
- */
-smbc_bool
-smbc_getOptionFullTimeNames(SMBCCTX *c)
-{
-        return c->internal->full_time_names;
-}
-
-/**
- * Set whether to use new-style time attribute names, e.g. WRITE_TIME rather
- * than the old-style names such as M_TIME.  This allows also setting/getting
- * CREATE_TIME which was previously unimplemented.  (Note that the old C_TIME
- * was supposed to be CHANGE_TIME but was confused and sometimes referred to
- * CREATE_TIME.)
- */
-void
-smbc_setOptionFullTimeNames(SMBCCTX *c, smbc_bool b)
-{
-        c->internal->full_time_names = b;
-}
-
-/**
- * Get the share mode to use for files opened with SMBC_open_ctx().  The
- * default is SMBC_SHAREMODE_DENY_NONE.
- */
-smbc_share_mode
-smbc_getOptionOpenShareMode(SMBCCTX *c)
-{
-        return c->internal->share_mode;
-}
-
-/**
- * Set the share mode to use for files opened with SMBC_open_ctx().  The
- * default is SMBC_SHAREMODE_DENY_NONE.
- */
-void
-smbc_setOptionOpenShareMode(SMBCCTX *c, smbc_share_mode share_mode)
-{
-        c->internal->share_mode = share_mode;
-}
-
-/** Retrieve a previously set user data handle */
-void *
-smbc_getOptionUserData(SMBCCTX *c)
-{
-        return c->internal->user_data;
-}
-
-/** Save a user data handle */
-void
-smbc_setOptionUserData(SMBCCTX *c, void *user_data)
-{
-        c->internal->user_data = user_data;
-}
-
-/** Get the encoded value for encryption level. */
-smbc_smb_encrypt_level
-smbc_getOptionSmbEncryptionLevel(SMBCCTX *c)
-{
-        return c->internal->smb_encryption_level;
-}
-
-/** Set the encoded value for encryption level. */
-void
-smbc_setOptionSmbEncryptionLevel(SMBCCTX *c, smbc_smb_encrypt_level level)
-{
-        c->internal->smb_encryption_level = level;
-}
-
-/**
- * Get from how many local master browsers should the list of workgroups be
- * retrieved.  It can take up to 12 minutes or longer after a server becomes a
- * local master browser, for it to have the entire browse list (the list of
- * workgroups/domains) from an entire network.  Since a client never knows
- * which local master browser will be found first, the one which is found
- * first and used to retrieve a browse list may have an incomplete or empty
- * browse list.  By requesting the browse list from multiple local master
- * browsers, a more complete list can be generated.  For small networks (few
- * workgroups), it is recommended that this value be set to 0, causing the
- * browse lists from all found local master browsers to be retrieved and
- * merged.  For networks with many workgroups, a suitable value for this
- * variable is probably somewhere around 3. (Default: 3).
- */
-int
-smbc_getOptionBrowseMaxLmbCount(SMBCCTX *c)
-{
-        return c->options.browse_max_lmb_count;
-}
-
-/**
- * Set from how many local master browsers should the list of workgroups be
- * retrieved.  It can take up to 12 minutes or longer after a server becomes a
- * local master browser, for it to have the entire browse list (the list of
- * workgroups/domains) from an entire network.  Since a client never knows
- * which local master browser will be found first, the one which is found
- * first and used to retrieve a browse list may have an incomplete or empty
- * browse list.  By requesting the browse list from multiple local master
- * browsers, a more complete list can be generated.  For small networks (few
- * workgroups), it is recommended that this value be set to 0, causing the
- * browse lists from all found local master browsers to be retrieved and
- * merged.  For networks with many workgroups, a suitable value for this
- * variable is probably somewhere around 3. (Default: 3).
- */
-void
-smbc_setOptionBrowseMaxLmbCount(SMBCCTX *c, int count)
-{
-        c->options.browse_max_lmb_count = count;
-}
-
-/**
- * Get whether to url-encode readdir entries.
- *
- * There is a difference in the desired return strings from
- * smbc_readdir() depending upon whether the filenames are to
- * be displayed to the user, or whether they are to be
- * appended to the path name passed to smbc_opendir() to call
- * a further smbc_ function (e.g. open the file with
- * smbc_open()).  In the former case, the filename should be
- * in "human readable" form.  In the latter case, the smbc_
- * functions expect a URL which must be url-encoded.  Those
- * functions decode the URL.  If, for example, smbc_readdir()
- * returned a file name of "abc%20def.txt", passing a path
- * with this file name attached to smbc_open() would cause
- * smbc_open to attempt to open the file "abc def.txt" since
- * the %20 is decoded into a space.
- *
- * Set this option to True if the names returned by
- * smbc_readdir() should be url-encoded such that they can be
- * passed back to another smbc_ call.  Set it to False if the
- * names returned by smbc_readdir() are to be presented to the
- * user.
- *
- * For backwards compatibility, this option defaults to False.
- */
-smbc_bool
-smbc_getOptionUrlEncodeReaddirEntries(SMBCCTX *c)
-{
-        return c->options.urlencode_readdir_entries;
-}
-
-/**
- * Set whether to url-encode readdir entries.
- *
- * There is a difference in the desired return strings from
- * smbc_readdir() depending upon whether the filenames are to
- * be displayed to the user, or whether they are to be
- * appended to the path name passed to smbc_opendir() to call
- * a further smbc_ function (e.g. open the file with
- * smbc_open()).  In the former case, the filename should be
- * in "human readable" form.  In the latter case, the smbc_
- * functions expect a URL which must be url-encoded.  Those
- * functions decode the URL.  If, for example, smbc_readdir()
- * returned a file name of "abc%20def.txt", passing a path
- * with this file name attached to smbc_open() would cause
- * smbc_open to attempt to open the file "abc def.txt" since
- * the %20 is decoded into a space.
- *
- * Set this option to True if the names returned by
- * smbc_readdir() should be url-encoded such that they can be
- * passed back to another smbc_ call.  Set it to False if the
- * names returned by smbc_readdir() are to be presented to the
- * user.
- *
- * For backwards compatibility, this option defaults to False.
- */
-void
-smbc_setOptionUrlEncodeReaddirEntries(SMBCCTX *c, smbc_bool b)
-{
-        c->options.urlencode_readdir_entries = b;
-}
-
-/**
- * Get whether to use the same connection for all shares on a server.
- *
- * Some Windows versions appear to have a limit to the number
- * of concurrent SESSIONs and/or TREE CONNECTions.  In
- * one-shot programs (i.e. the program runs and then quickly
- * ends, thereby shutting down all connections), it is
- * probably reasonable to establish a new connection for each
- * share.  In long-running applications, the limitation can be
- * avoided by using only a single connection to each server,
- * and issuing a new TREE CONNECT when the share is accessed.
- */
-smbc_bool
-smbc_getOptionOneSharePerServer(SMBCCTX *c)
-{
-        return c->options.one_share_per_server;
-}
-
-/**
- * Set whether to use the same connection for all shares on a server.
- *
- * Some Windows versions appear to have a limit to the number
- * of concurrent SESSIONs and/or TREE CONNECTions.  In
- * one-shot programs (i.e. the program runs and then quickly
- * ends, thereby shutting down all connections), it is
- * probably reasonable to establish a new connection for each
- * share.  In long-running applications, the limitation can be
- * avoided by using only a single connection to each server,
- * and issuing a new TREE CONNECT when the share is accessed.
- */
-void
-smbc_setOptionOneSharePerServer(SMBCCTX *c, smbc_bool b)
-{
-        c->options.one_share_per_server = b;
-}
-
-/** Get whether to enable use of kerberos */
-smbc_bool
-smbc_getOptionUseKerberos(SMBCCTX *c)
-{
-        return c->flags & SMB_CTX_FLAG_USE_KERBEROS ? True : False;
-}
-
-/** Set whether to enable use of kerberos */
-void
-smbc_setOptionUseKerberos(SMBCCTX *c, smbc_bool b)
-{
-        if (b) {
-                c->flags |= SMB_CTX_FLAG_USE_KERBEROS;
-        } else {
-                c->flags &= ~SMB_CTX_FLAG_USE_KERBEROS;
-        }
-}
-
-/** Get whether to fallback after kerberos */
-smbc_bool
-smbc_getOptionFallbackAfterKerberos(SMBCCTX *c)
-{
-        return c->flags & SMB_CTX_FLAG_FALLBACK_AFTER_KERBEROS ? True : False;
-}
-
-/** Set whether to fallback after kerberos */
-void
-smbc_setOptionFallbackAfterKerberos(SMBCCTX *c, smbc_bool b)
-{
-        if (b) {
-                c->flags |= SMB_CTX_FLAG_FALLBACK_AFTER_KERBEROS;
-        } else {
-                c->flags &= ~SMB_CTX_FLAG_FALLBACK_AFTER_KERBEROS;
-        }
-}
-
-/** Get whether to automatically select anonymous login */
-smbc_bool
-smbc_getOptionNoAutoAnonymousLogin(SMBCCTX *c)
-{
-        return c->flags & SMBCCTX_FLAG_NO_AUTO_ANONYMOUS_LOGON ? True : False;
-}
-
-/** Set whether to automatically select anonymous login */
-void
-smbc_setOptionNoAutoAnonymousLogin(SMBCCTX *c, smbc_bool b)
-{
-        if (b) {
-                c->flags |= SMBCCTX_FLAG_NO_AUTO_ANONYMOUS_LOGON;
-        } else {
-                c->flags &= ~SMBCCTX_FLAG_NO_AUTO_ANONYMOUS_LOGON;
-        }
-}
-
-/** Get the function for obtaining authentication data */
-smbc_get_auth_data_fn
-smbc_getFunctionAuthData(SMBCCTX *c)
-{
-        return c->callbacks.auth_fn;
-}
-
-/** Set the function for obtaining authentication data */
-void
-smbc_setFunctionAuthData(SMBCCTX *c, smbc_get_auth_data_fn fn)
-{
-        c->internal->auth_fn_with_context = NULL;
-        c->callbacks.auth_fn = fn;
-}
-
-/** Get the new-style authentication function which includes the context. */
-smbc_get_auth_data_with_context_fn
-smbc_getFunctionAuthDataWithContext(SMBCCTX *c)
-{
-        return c->internal->auth_fn_with_context;
-}
-
-/** Set the new-style authentication function which includes the context. */
-void
-smbc_setFunctionAuthDataWithContext(SMBCCTX *c,
-                                    smbc_get_auth_data_with_context_fn fn)
-{
-        c->callbacks.auth_fn = NULL;
-        c->internal->auth_fn_with_context = fn;
-}
-
-/** Get the function for checking if a server is still good */
-smbc_check_server_fn
-smbc_getFunctionCheckServer(SMBCCTX *c)
-{
-        return c->callbacks.check_server_fn;
-}
-
-/** Set the function for checking if a server is still good */
-void
-smbc_setFunctionCheckServer(SMBCCTX *c, smbc_check_server_fn fn)
-{
-        c->callbacks.check_server_fn = fn;
-}
-
-/** Get the function for removing a server if unused */
-smbc_remove_unused_server_fn
-smbc_getFunctionRemoveUnusedServer(SMBCCTX *c)
-{
-        return c->callbacks.remove_unused_server_fn;
-}
-
-/** Set the function for removing a server if unused */
-void
-smbc_setFunctionRemoveUnusedServer(SMBCCTX *c,
-                                   smbc_remove_unused_server_fn fn)
-{
-        c->callbacks.remove_unused_server_fn = fn;
-}
-
-/** Get the function for adding a cached server */
-smbc_add_cached_srv_fn
-smbc_getFunctionAddCachedServer(SMBCCTX *c)
-{
-        return c->callbacks.add_cached_srv_fn;
-}
-
-/** Set the function for adding a cached server */
-void
-smbc_setFunctionAddCachedServer(SMBCCTX *c, smbc_add_cached_srv_fn fn)
-{
-        c->callbacks.add_cached_srv_fn = fn;
-}
-
-/** Get the function for server cache lookup */
-smbc_get_cached_srv_fn
-smbc_getFunctionGetCachedServer(SMBCCTX *c)
-{
-        return c->callbacks.get_cached_srv_fn;
-}
-
-/** Set the function for server cache lookup */
-void
-smbc_setFunctionGetCachedServer(SMBCCTX *c, smbc_get_cached_srv_fn fn)
-{
-        c->callbacks.get_cached_srv_fn = fn;
-}
-
-/** Get the function for server cache removal */
-smbc_remove_cached_srv_fn
-smbc_getFunctionRemoveCachedServer(SMBCCTX *c)
-{
-        return c->callbacks.remove_cached_srv_fn;
-}
-
-/** Set the function for server cache removal */
-void
-smbc_setFunctionRemoveCachedServer(SMBCCTX *c,
-                                   smbc_remove_cached_srv_fn fn)
-{
-        c->callbacks.remove_cached_srv_fn = fn;
-}
-
-/**
- * Get the function for server cache purging.  This function tries to
- * remove all cached servers (e.g. on disconnect)
- */
-smbc_purge_cached_fn
-smbc_getFunctionPurgeCachedServers(SMBCCTX *c)
-{
-        return c->callbacks.purge_cached_fn;
-}
-
-/** Set the function to store private data of the server cache */
-void smbc_setServerCacheData(SMBCCTX *c, struct smbc_server_cache * cache)
-{
-        c->internal->server_cache = cache;
-}
-
-/** Get the function to store private data of the server cache */
-struct smbc_server_cache * smbc_getServerCacheData(SMBCCTX *c)
-{
-        return c->internal->server_cache;
-}
-
-
-/**
- * Set the function for server cache purging.  This function tries to
- * remove all cached servers (e.g. on disconnect)
- */
-void
-smbc_setFunctionPurgeCachedServers(SMBCCTX *c, smbc_purge_cached_fn fn)
-{
-        c->callbacks.purge_cached_fn = fn;
-}
-
-/**
- * Callable functions for files.
- */
-
-smbc_open_fn
-smbc_getFunctionOpen(SMBCCTX *c)
-{
-        return c->open;
-}
-
-void
-smbc_setFunctionOpen(SMBCCTX *c, smbc_open_fn fn)
-{
-        c->open = fn;
-}
-
-smbc_creat_fn
-smbc_getFunctionCreat(SMBCCTX *c)
-{
-        return c->creat;
-}
-
-void
-smbc_setFunctionCreat(SMBCCTX *c, smbc_creat_fn fn)
-{
-        c->creat = fn;
-}
-
-smbc_read_fn
-smbc_getFunctionRead(SMBCCTX *c)
-{
-        return c->read;
-}
-
-void
-smbc_setFunctionRead(SMBCCTX *c, smbc_read_fn fn)
-{
-        c->read = fn;
-}
-
-smbc_write_fn
-smbc_getFunctionWrite(SMBCCTX *c)
-{
-        return c->write;
-}
-
-void
-smbc_setFunctionWrite(SMBCCTX *c, smbc_write_fn fn)
-{
-        c->write = fn;
-}
-
-smbc_unlink_fn
-smbc_getFunctionUnlink(SMBCCTX *c)
-{
-        return c->unlink;
-}
-
-void
-smbc_setFunctionUnlink(SMBCCTX *c, smbc_unlink_fn fn)
-{
-        c->unlink = fn;
-}
-
-smbc_rename_fn
-smbc_getFunctionRename(SMBCCTX *c)
-{
-        return c->rename;
-}
-
-void
-smbc_setFunctionRename(SMBCCTX *c, smbc_rename_fn fn)
-{
-        c->rename = fn;
-}
-
-smbc_lseek_fn
-smbc_getFunctionLseek(SMBCCTX *c)
-{
-        return c->lseek;
-}
-
-void
-smbc_setFunctionLseek(SMBCCTX *c, smbc_lseek_fn fn)
-{
-        c->lseek = fn;
-}
-
-smbc_stat_fn
-smbc_getFunctionStat(SMBCCTX *c)
-{
-        return c->stat;
-}
-
-void
-smbc_setFunctionStat(SMBCCTX *c, smbc_stat_fn fn)
-{
-        c->stat = fn;
-}
-
-smbc_fstat_fn
-smbc_getFunctionFstat(SMBCCTX *c)
-{
-        return c->fstat;
-}
-
-void
-smbc_setFunctionFstat(SMBCCTX *c, smbc_fstat_fn fn)
-{
-        c->fstat = fn;
-}
-
-smbc_ftruncate_fn
-smbc_getFunctionFtruncate(SMBCCTX *c)
-{
-        return c->internal->posix_emu.ftruncate_fn;
-}
-
-void
-smbc_setFunctionFtruncate(SMBCCTX *c, smbc_ftruncate_fn fn)
-{
-        c->internal->posix_emu.ftruncate_fn = fn;
-}
-
-smbc_close_fn
-smbc_getFunctionClose(SMBCCTX *c)
-{
-        return c->close_fn;
-}
-
-void
-smbc_setFunctionClose(SMBCCTX *c, smbc_close_fn fn)
-{
-        c->close_fn = fn;
-}
-
-
-/**
- * Callable functions for directories.
- */
-
-smbc_opendir_fn
-smbc_getFunctionOpendir(SMBCCTX *c)
-{
-        return c->opendir;
-}
-
-void
-smbc_setFunctionOpendir(SMBCCTX *c, smbc_opendir_fn fn)
-{
-        c->opendir = fn;
-}
-
-smbc_closedir_fn
-smbc_getFunctionClosedir(SMBCCTX *c)
-{
-        return c->closedir;
-}
-
-void
-smbc_setFunctionClosedir(SMBCCTX *c, smbc_closedir_fn fn)
-{
-        c->closedir = fn;
-}
-
-smbc_readdir_fn
-smbc_getFunctionReaddir(SMBCCTX *c)
-{
-        return c->readdir;
-}
-
-void
-smbc_setFunctionReaddir(SMBCCTX *c, smbc_readdir_fn fn)
-{
-        c->readdir = fn;
-}
-
-smbc_getdents_fn
-smbc_getFunctionGetdents(SMBCCTX *c)
-{
-        return c->getdents;
-}
-
-void
-smbc_setFunctionGetdents(SMBCCTX *c, smbc_getdents_fn fn)
-{
-        c->getdents = fn;
-}
-
-smbc_mkdir_fn
-smbc_getFunctionMkdir(SMBCCTX *c)
-{
-        return c->mkdir;
-}
-
-void
-smbc_setFunctionMkdir(SMBCCTX *c, smbc_mkdir_fn fn)
-{
-        c->mkdir = fn;
-}
-
-smbc_rmdir_fn
-smbc_getFunctionRmdir(SMBCCTX *c)
-{
-        return c->rmdir;
-}
-
-void
-smbc_setFunctionRmdir(SMBCCTX *c, smbc_rmdir_fn fn)
-{
-        c->rmdir = fn;
-}
-
-smbc_telldir_fn
-smbc_getFunctionTelldir(SMBCCTX *c)
-{
-        return c->telldir;
-}
-
-void
-smbc_setFunctionTelldir(SMBCCTX *c, smbc_telldir_fn fn)
-{
-        c->telldir = fn;
-}
-
-smbc_lseekdir_fn
-smbc_getFunctionLseekdir(SMBCCTX *c)
-{
-        return c->lseekdir;
-}
-
-void
-smbc_setFunctionLseekdir(SMBCCTX *c, smbc_lseekdir_fn fn)
-{
-        c->lseekdir = fn;
-}
-
-smbc_fstatdir_fn
-smbc_getFunctionFstatdir(SMBCCTX *c)
-{
-        return c->fstatdir;
-}
-
-void
-smbc_setFunctionFstatdir(SMBCCTX *c, smbc_fstatdir_fn fn)
-{
-        c->fstatdir = fn;
-}
-
-
-/**
- * Callable functions applicable to both files and directories.
- */
-
-smbc_chmod_fn
-smbc_getFunctionChmod(SMBCCTX *c)
-{
-        return c->chmod;
-}
-
-void
-smbc_setFunctionChmod(SMBCCTX *c, smbc_chmod_fn fn)
-{
-        c->chmod = fn;
-}
-
-smbc_utimes_fn
-smbc_getFunctionUtimes(SMBCCTX *c)
-{
-        return c->utimes;
-}
-
-void
-smbc_setFunctionUtimes(SMBCCTX *c, smbc_utimes_fn fn)
-{
-        c->utimes = fn;
-}
-
-smbc_setxattr_fn
-smbc_getFunctionSetxattr(SMBCCTX *c)
-{
-        return c->setxattr;
-}
-
-void
-smbc_setFunctionSetxattr(SMBCCTX *c, smbc_setxattr_fn fn)
-{
-        c->setxattr = fn;
-}
-
-smbc_getxattr_fn
-smbc_getFunctionGetxattr(SMBCCTX *c)
-{
-        return c->getxattr;
-}
-
-void
-smbc_setFunctionGetxattr(SMBCCTX *c, smbc_getxattr_fn fn)
-{
-        c->getxattr = fn;
-}
-
-smbc_removexattr_fn
-smbc_getFunctionRemovexattr(SMBCCTX *c)
-{
-        return c->removexattr;
-}
-
-void
-smbc_setFunctionRemovexattr(SMBCCTX *c, smbc_removexattr_fn fn)
-{
-        c->removexattr = fn;
-}
-
-smbc_listxattr_fn
-smbc_getFunctionListxattr(SMBCCTX *c)
-{
-        return c->listxattr;
-}
-
-void
-smbc_setFunctionListxattr(SMBCCTX *c, smbc_listxattr_fn fn)
-{
-        c->listxattr = fn;
-}
-
-
-/**
- * Callable functions related to printing
- */
-
-smbc_print_file_fn
-smbc_getFunctionPrintFile(SMBCCTX *c)
-{
-        return c->print_file;
-}
-
-void
-smbc_setFunctionPrintFile(SMBCCTX *c, smbc_print_file_fn fn)
-{
-        c->print_file = fn;
-}
-
-smbc_open_print_job_fn
-smbc_getFunctionOpenPrintJob(SMBCCTX *c)
-{
-        return c->open_print_job;
-}
-
-void
-smbc_setFunctionOpenPrintJob(SMBCCTX *c,
-                             smbc_open_print_job_fn fn)
-{
-        c->open_print_job = fn;
-}
-
-smbc_list_print_jobs_fn
-smbc_getFunctionListPrintJobs(SMBCCTX *c)
-{
-        return c->list_print_jobs;
-}
-
-void
-smbc_setFunctionListPrintJobs(SMBCCTX *c,
-                              smbc_list_print_jobs_fn fn)
-{
-        c->list_print_jobs = fn;
-}
-
-smbc_unlink_print_job_fn
-smbc_getFunctionUnlinkPrintJob(SMBCCTX *c)
-{
-        return c->unlink_print_job;
-}
-
-void
-smbc_setFunctionUnlinkPrintJob(SMBCCTX *c,
-                               smbc_unlink_print_job_fn fn)
-{
-        c->unlink_print_job = fn;
-}
-

Deleted: branches/samba/upstream/source/libsmb/libsmb_stat.c
===================================================================
--- branches/samba/upstream/source/libsmb/libsmb_stat.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/libsmb_stat.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,302 +0,0 @@
-/* 
-   Unix SMB/Netbios implementation.
-   SMB client library implementation
-   Copyright (C) Andrew Tridgell 1998
-   Copyright (C) Richard Sharpe 2000, 2002
-   Copyright (C) John Terpstra 2000
-   Copyright (C) Tom Jansen (Ninja ISD) 2002 
-   Copyright (C) Derrell Lipman 2003-2008
-   Copyright (C) Jeremy Allison 2007, 2008
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-#include "libsmbclient.h"
-#include "libsmb_internal.h"
-
-
-/* 
- * Generate an inode number from file name for those things that need it
- */
-
-static ino_t
-generate_inode(SMBCCTX *context,
-               const char *name)
-{
-	if (!context || !context->internal->initialized) {
-                
-		errno = EINVAL;
-		return -1;
-                
-	}
-        
-	if (!*name) return 2; /* FIXME, why 2 ??? */
-	return (ino_t)str_checksum(name);
-        
-}
-
-/*
- * Routine to put basic stat info into a stat structure ... Used by stat and
- * fstat below.
- */
-
-static int
-setup_stat(SMBCCTX *context,
-           struct stat *st,
-           char *fname,
-           SMB_OFF_T size,
-           int mode)
-{
-	TALLOC_CTX *frame = talloc_stackframe();
-        
-	st->st_mode = 0;
-        
-	if (IS_DOS_DIR(mode)) {
-		st->st_mode = SMBC_DIR_MODE;
-	} else {
-		st->st_mode = SMBC_FILE_MODE;
-	}
-        
-	if (IS_DOS_ARCHIVE(mode)) st->st_mode |= S_IXUSR;
-	if (IS_DOS_SYSTEM(mode)) st->st_mode |= S_IXGRP;
-	if (IS_DOS_HIDDEN(mode)) st->st_mode |= S_IXOTH;
-	if (!IS_DOS_READONLY(mode)) st->st_mode |= S_IWUSR;
-        
-	st->st_size = size;
-#ifdef HAVE_STAT_ST_BLKSIZE
-	st->st_blksize = 512;
-#endif
-#ifdef HAVE_STAT_ST_BLOCKS
-	st->st_blocks = (size+511)/512;
-#endif
-#ifdef HAVE_STRUCT_STAT_ST_RDEV
-	st->st_rdev = 0;
-#endif
-	st->st_uid = getuid();
-	st->st_gid = getgid();
-        
-	if (IS_DOS_DIR(mode)) {
-		st->st_nlink = 2;
-	} else {
-		st->st_nlink = 1;
-	}
-        
-	if (st->st_ino == 0) {
-		st->st_ino = generate_inode(context, fname);
-	}
-        
-	TALLOC_FREE(frame);
-	return True;  /* FIXME: Is this needed ? */
-        
-}
-
-/*
- * Routine to stat a file given a name
- */
-
-int
-SMBC_stat_ctx(SMBCCTX *context,
-              const char *fname,
-              struct stat *st)
-{
-	SMBCSRV *srv = NULL;
-	char *server = NULL;
-	char *share = NULL;
-	char *user = NULL;
-	char *password = NULL;
-	char *workgroup = NULL;
-	char *path = NULL;
-	struct timespec write_time_ts;
-        struct timespec access_time_ts;
-        struct timespec change_time_ts;
-	SMB_OFF_T size = 0;
-	uint16 mode = 0;
-	SMB_INO_T ino = 0;
-	TALLOC_CTX *frame = talloc_stackframe();
-        
-	if (!context || !context->internal->initialized) {
-                
-		errno = EINVAL;  /* Best I can think of ... */
-		TALLOC_FREE(frame);
-		return -1;
-	}
-        
-	if (!fname) {
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-	}
-        
-	DEBUG(4, ("smbc_stat(%s)\n", fname));
-        
-	if (SMBC_parse_path(frame,
-                            context,
-                            fname,
-                            &workgroup,
-                            &server,
-                            &share,
-                            &path,
-                            &user,
-                            &password,
-                            NULL)) {
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-                return -1;
-        }
-        
-	if (!user || user[0] == (char)0) {
-		user = talloc_strdup(frame, smbc_getUser(context));
-		if (!user) {
-			errno = ENOMEM;
-			TALLOC_FREE(frame);
-			return -1;
-		}
-	}
-        
-	srv = SMBC_server(frame, context, True,
-                          server, share, &workgroup, &user, &password);
-        
-	if (!srv) {
-		TALLOC_FREE(frame);
-		return -1;  /* errno set by SMBC_server */
-	}
-        
-	if (!SMBC_getatr(context, srv, path, &mode, &size,
-			 NULL,
-                         &access_time_ts,
-                         &write_time_ts,
-                         &change_time_ts,
-                         &ino)) {
-		errno = SMBC_errno(context, srv->cli);
-		TALLOC_FREE(frame);
-		return -1;
-	}
-        
-	st->st_ino = ino;
-        
-	setup_stat(context, st, (char *) fname, size, mode);
-        
-	set_atimespec(st, access_time_ts);
-	set_ctimespec(st, change_time_ts);
-	set_mtimespec(st, write_time_ts);
-	st->st_dev   = srv->dev;
-        
-	TALLOC_FREE(frame);
-	return 0;
-        
-}
-
-/*
- * Routine to stat a file given an fd
- */
-
-int
-SMBC_fstat_ctx(SMBCCTX *context,
-               SMBCFILE *file,
-               struct stat *st)
-{
-	struct timespec change_time_ts;
-        struct timespec access_time_ts;
-        struct timespec write_time_ts;
-	SMB_OFF_T size;
-	uint16 mode;
-	char *server = NULL;
-	char *share = NULL;
-	char *user = NULL;
-	char *password = NULL;
-	char *path = NULL;
-        char *targetpath = NULL;
-	struct cli_state *targetcli = NULL;
-	SMB_INO_T ino = 0;
-	TALLOC_CTX *frame = talloc_stackframe();
-        
-	if (!context || !context->internal->initialized) {
-                
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-	}
-        
-	if (!file || !SMBC_dlist_contains(context->internal->files, file)) {
-		errno = EBADF;
-		TALLOC_FREE(frame);
-		return -1;
-	}
-        
-	if (!file->file) {
-		TALLOC_FREE(frame);
-		return smbc_getFunctionFstatdir(context)(context, file, st);
-	}
-        
-	/*d_printf(">>>fstat: parsing %s\n", file->fname);*/
-	if (SMBC_parse_path(frame,
-                            context,
-                            file->fname,
-                            NULL,
-                            &server,
-                            &share,
-                            &path,
-                            &user,
-                            &password,
-                            NULL)) {
-                errno = EINVAL;
-		TALLOC_FREE(frame);
-                return -1;
-        }
-        
-	/*d_printf(">>>fstat: resolving %s\n", path);*/
-	if (!cli_resolve_path(frame, "", file->srv->cli, path,
-                              &targetcli, &targetpath)) {
-		d_printf("Could not resolve %s\n", path);
-		TALLOC_FREE(frame);
-		return -1;
-	}
-	/*d_printf(">>>fstat: resolved path as %s\n", targetpath);*/
-        
-	if (!cli_qfileinfo(targetcli, file->cli_fd, &mode, &size,
-                           NULL,
-                           &access_time_ts,
-                           &write_time_ts,
-                           &change_time_ts,
-                           &ino)) {
-                
-		time_t change_time, access_time, write_time;
-                
-		if (!cli_getattrE(targetcli, file->cli_fd, &mode, &size,
-                                  &change_time, &access_time, &write_time)) {
-                        
-			errno = EINVAL;
-			TALLOC_FREE(frame);
-			return -1;
-		}
-                
-		change_time_ts = convert_time_t_to_timespec(change_time);
-		access_time_ts = convert_time_t_to_timespec(access_time);
-		write_time_ts = convert_time_t_to_timespec(write_time);
-	}
-        
-	st->st_ino = ino;
-        
-	setup_stat(context, st, file->fname, size, mode);
-        
-	set_atimespec(st, access_time_ts);
-	set_ctimespec(st, change_time_ts);
-	set_mtimespec(st, write_time_ts);
-	st->st_dev = file->srv->dev;
-        
-	TALLOC_FREE(frame);
-	return 0;
-        
-}

Deleted: branches/samba/upstream/source/libsmb/libsmb_xattr.c
===================================================================
--- branches/samba/upstream/source/libsmb/libsmb_xattr.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/libsmb_xattr.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,2301 +0,0 @@
-/* 
-   Unix SMB/Netbios implementation.
-   SMB client library implementation
-   Copyright (C) Andrew Tridgell 1998
-   Copyright (C) Richard Sharpe 2000, 2002
-   Copyright (C) John Terpstra 2000
-   Copyright (C) Tom Jansen (Ninja ISD) 2002 
-   Copyright (C) Derrell Lipman 2003-2008
-   Copyright (C) Jeremy Allison 2007, 2008
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-#include "libsmbclient.h"
-#include "libsmb_internal.h"
-
-
-/*
- * Find an lsa pipe handle associated with a cli struct.
- */
-static struct rpc_pipe_client *
-find_lsa_pipe_hnd(struct cli_state *ipc_cli)
-{
-	struct rpc_pipe_client *pipe_hnd;
-        
-	for (pipe_hnd = ipc_cli->pipe_list;
-             pipe_hnd;
-             pipe_hnd = pipe_hnd->next) {
-                
-		if (pipe_hnd->pipe_idx == PI_LSARPC) {
-			return pipe_hnd;
-		}
-	}
-        
-	return NULL;
-}
-
-/*
- * Sort ACEs according to the documentation at
- * http://support.microsoft.com/kb/269175, at least as far as it defines the
- * order.
- */
-
-static int
-ace_compare(SEC_ACE *ace1,
-            SEC_ACE *ace2)
-{
-        bool b1;
-        bool b2;
-        
-        /* If the ACEs are equal, we have nothing more to do. */
-        if (sec_ace_equal(ace1, ace2)) {
-		return 0;
-        }
-        
-        /* Inherited follow non-inherited */
-        b1 = ((ace1->flags & SEC_ACE_FLAG_INHERITED_ACE) != 0);
-        b2 = ((ace2->flags & SEC_ACE_FLAG_INHERITED_ACE) != 0);
-        if (b1 != b2) {
-                return (b1 ? 1 : -1);
-        }
-        
-        /*
-         * What shall we do with AUDITs and ALARMs?  It's undefined.  We'll
-         * sort them after DENY and ALLOW.
-         */
-        b1 = (ace1->type != SEC_ACE_TYPE_ACCESS_ALLOWED &&
-              ace1->type != SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT &&
-              ace1->type != SEC_ACE_TYPE_ACCESS_DENIED &&
-              ace1->type != SEC_ACE_TYPE_ACCESS_DENIED_OBJECT);
-        b2 = (ace2->type != SEC_ACE_TYPE_ACCESS_ALLOWED &&
-              ace2->type != SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT &&
-              ace2->type != SEC_ACE_TYPE_ACCESS_DENIED &&
-              ace2->type != SEC_ACE_TYPE_ACCESS_DENIED_OBJECT);
-        if (b1 != b2) {
-                return (b1 ? 1 : -1);
-        }
-        
-        /* Allowed ACEs follow denied ACEs */
-        b1 = (ace1->type == SEC_ACE_TYPE_ACCESS_ALLOWED ||
-              ace1->type == SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT);
-        b2 = (ace2->type == SEC_ACE_TYPE_ACCESS_ALLOWED ||
-              ace2->type == SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT);
-        if (b1 != b2) {
-                return (b1 ? 1 : -1);
-        }
-        
-        /*
-         * ACEs applying to an entity's object follow those applying to the
-         * entity itself
-         */
-        b1 = (ace1->type == SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT ||
-              ace1->type == SEC_ACE_TYPE_ACCESS_DENIED_OBJECT);
-        b2 = (ace2->type == SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT ||
-              ace2->type == SEC_ACE_TYPE_ACCESS_DENIED_OBJECT);
-        if (b1 != b2) {
-                return (b1 ? 1 : -1);
-        }
-        
-        /*
-         * If we get this far, the ACEs are similar as far as the
-         * characteristics we typically care about (those defined by the
-         * referenced MS document).  We'll now sort by characteristics that
-         * just seems reasonable.
-         */
-        
-	if (ace1->type != ace2->type) {
-		return ace2->type - ace1->type;
-        }
-        
-	if (sid_compare(&ace1->trustee, &ace2->trustee)) {
-		return sid_compare(&ace1->trustee, &ace2->trustee);
-        }
-        
-	if (ace1->flags != ace2->flags) {
-		return ace1->flags - ace2->flags;
-        }
-        
-	if (ace1->access_mask != ace2->access_mask) {
-		return ace1->access_mask - ace2->access_mask;
-        }
-        
-	if (ace1->size != ace2->size) {
-		return ace1->size - ace2->size;
-        }
-        
-	return memcmp(ace1, ace2, sizeof(SEC_ACE));
-}
-
-
-static void
-sort_acl(SEC_ACL *the_acl)
-{
-	uint32 i;
-	if (!the_acl) return;
-        
-	qsort(the_acl->aces, the_acl->num_aces, sizeof(the_acl->aces[0]),
-              QSORT_CAST ace_compare);
-        
-	for (i=1;i<the_acl->num_aces;) {
-		if (sec_ace_equal(&the_acl->aces[i-1], &the_acl->aces[i])) {
-			int j;
-			for (j=i; j<the_acl->num_aces-1; j++) {
-				the_acl->aces[j] = the_acl->aces[j+1];
-			}
-			the_acl->num_aces--;
-		} else {
-			i++;
-		}
-	}
-}
-
-/* convert a SID to a string, either numeric or username/group */
-static void
-convert_sid_to_string(struct cli_state *ipc_cli,
-                      POLICY_HND *pol,
-                      fstring str,
-                      bool numeric,
-                      DOM_SID *sid)
-{
-	char **domains = NULL;
-	char **names = NULL;
-	enum lsa_SidType *types = NULL;
-	struct rpc_pipe_client *pipe_hnd = find_lsa_pipe_hnd(ipc_cli);
-	TALLOC_CTX *ctx;
-        
-	sid_to_fstring(str, sid);
-        
-	if (numeric) {
-		return;     /* no lookup desired */
-	}
-        
-	if (!pipe_hnd) {
-		return;
-	}
-        
-	/* Ask LSA to convert the sid to a name */
-        
-	ctx = talloc_stackframe();
-        
-	if (!NT_STATUS_IS_OK(rpccli_lsa_lookup_sids(pipe_hnd, ctx,
-                                                    pol, 1, sid, &domains,
-                                                    &names, &types)) ||
-	    !domains || !domains[0] || !names || !names[0]) {
-		TALLOC_FREE(ctx);
-		return;
-	}
-        
-	TALLOC_FREE(ctx);
-	/* Converted OK */
-        
-	slprintf(str, sizeof(fstring) - 1, "%s%s%s",
-		 domains[0], lp_winbind_separator(),
-		 names[0]);
-}
-
-/* convert a string to a SID, either numeric or username/group */
-static bool
-convert_string_to_sid(struct cli_state *ipc_cli,
-                      POLICY_HND *pol,
-                      bool numeric,
-                      DOM_SID *sid,
-                      const char *str)
-{
-	enum lsa_SidType *types = NULL;
-	DOM_SID *sids = NULL;
-	bool result = True;
-	TALLOC_CTX *ctx = NULL;
-	struct rpc_pipe_client *pipe_hnd = find_lsa_pipe_hnd(ipc_cli);
-        
-	if (!pipe_hnd) {
-		return False;
-	}
-        
-        if (numeric) {
-                if (strncmp(str, "S-", 2) == 0) {
-                        return string_to_sid(sid, str);
-                }
-                
-                result = False;
-                goto done;
-        }
-        
-	ctx = talloc_stackframe();
-	if (!NT_STATUS_IS_OK(rpccli_lsa_lookup_names(pipe_hnd, ctx,
-                                                     pol, 1, &str,
-                                                     NULL, 1, &sids,
-                                                     &types))) {
-		result = False;
-		goto done;
-	}
-        
-	sid_copy(sid, &sids[0]);
-done:
-        
-	TALLOC_FREE(ctx);
-	return result;
-}
-
-
-/* parse an ACE in the same format as print_ace() */
-static bool
-parse_ace(struct cli_state *ipc_cli,
-          POLICY_HND *pol,
-          SEC_ACE *ace,
-          bool numeric,
-          char *str)
-{
-	char *p;
-	const char *cp;
-	char *tok;
-	unsigned int atype;
-        unsigned int aflags;
-        unsigned int amask;
-	DOM_SID sid;
-	SEC_ACCESS mask;
-	const struct perm_value *v;
-        struct perm_value {
-                const char *perm;
-                uint32 mask;
-        };
-	TALLOC_CTX *frame = talloc_stackframe();
-        
-        /* These values discovered by inspection */
-        static const struct perm_value special_values[] = {
-                { "R", 0x00120089 },
-                { "W", 0x00120116 },
-                { "X", 0x001200a0 },
-                { "D", 0x00010000 },
-                { "P", 0x00040000 },
-                { "O", 0x00080000 },
-                { NULL, 0 },
-        };
-        
-        static const struct perm_value standard_values[] = {
-                { "READ",   0x001200a9 },
-                { "CHANGE", 0x001301bf },
-                { "FULL",   0x001f01ff },
-                { NULL, 0 },
-        };
-        
-        
-	ZERO_STRUCTP(ace);
-	p = strchr_m(str,':');
-	if (!p) {
-		TALLOC_FREE(frame);
-		return False;
-	}
-	*p = '\0';
-	p++;
-	/* Try to parse numeric form */
-        
-	if (sscanf(p, "%i/%i/%i", &atype, &aflags, &amask) == 3 &&
-	    convert_string_to_sid(ipc_cli, pol, numeric, &sid, str)) {
-		goto done;
-	}
-        
-	/* Try to parse text form */
-        
-	if (!convert_string_to_sid(ipc_cli, pol, numeric, &sid, str)) {
-		TALLOC_FREE(frame);
-		return false;
-	}
-        
-	cp = p;
-	if (!next_token_talloc(frame, &cp, &tok, "/")) {
-		TALLOC_FREE(frame);
-		return false;
-	}
-        
-	if (StrnCaseCmp(tok, "ALLOWED", strlen("ALLOWED")) == 0) {
-		atype = SEC_ACE_TYPE_ACCESS_ALLOWED;
-	} else if (StrnCaseCmp(tok, "DENIED", strlen("DENIED")) == 0) {
-		atype = SEC_ACE_TYPE_ACCESS_DENIED;
-	} else {
-		TALLOC_FREE(frame);
-		return false;
-	}
-        
-	/* Only numeric form accepted for flags at present */
-        
-	if (!(next_token_talloc(frame, &cp, &tok, "/") &&
-	      sscanf(tok, "%i", &aflags))) {
-		TALLOC_FREE(frame);
-		return false;
-	}
-        
-	if (!next_token_talloc(frame, &cp, &tok, "/")) {
-		TALLOC_FREE(frame);
-		return false;
-	}
-        
-	if (strncmp(tok, "0x", 2) == 0) {
-		if (sscanf(tok, "%i", &amask) != 1) {
-			TALLOC_FREE(frame);
-			return false;
-		}
-		goto done;
-	}
-        
-	for (v = standard_values; v->perm; v++) {
-		if (strcmp(tok, v->perm) == 0) {
-			amask = v->mask;
-			goto done;
-		}
-	}
-        
-	p = tok;
-        
-	while(*p) {
-		bool found = False;
-                
-		for (v = special_values; v->perm; v++) {
-			if (v->perm[0] == *p) {
-				amask |= v->mask;
-				found = True;
-			}
-		}
-                
-		if (!found) {
-			TALLOC_FREE(frame);
-		 	return false;
-		}
-		p++;
-	}
-        
-	if (*p) {
-		TALLOC_FREE(frame);
-		return false;
-	}
-        
-done:
-	mask = amask;
-	init_sec_ace(ace, &sid, atype, mask, aflags);
-	TALLOC_FREE(frame);
-	return true;
-}
-
-/* add an ACE to a list of ACEs in a SEC_ACL */
-static bool
-add_ace(SEC_ACL **the_acl,
-        SEC_ACE *ace,
-        TALLOC_CTX *ctx)
-{
-	SEC_ACL *newacl;
-	SEC_ACE *aces;
-        
-	if (! *the_acl) {
-		(*the_acl) = make_sec_acl(ctx, 3, 1, ace);
-		return True;
-	}
-        
-	if ((aces = SMB_CALLOC_ARRAY(SEC_ACE,
-                                     1+(*the_acl)->num_aces)) == NULL) {
-		return False;
-	}
-	memcpy(aces, (*the_acl)->aces, (*the_acl)->num_aces * sizeof(SEC_ACE));
-	memcpy(aces+(*the_acl)->num_aces, ace, sizeof(SEC_ACE));
-	newacl = make_sec_acl(ctx, (*the_acl)->revision,
-                              1+(*the_acl)->num_aces, aces);
-	SAFE_FREE(aces);
-	(*the_acl) = newacl;
-	return True;
-}
-
-
-/* parse a ascii version of a security descriptor */
-static SEC_DESC *
-sec_desc_parse(TALLOC_CTX *ctx,
-               struct cli_state *ipc_cli,
-               POLICY_HND *pol,
-               bool numeric,
-               char *str)
-{
-	const char *p = str;
-	char *tok;
-	SEC_DESC *ret = NULL;
-	size_t sd_size;
-	DOM_SID *group_sid=NULL;
-        DOM_SID *owner_sid=NULL;
-	SEC_ACL *dacl=NULL;
-	int revision=1;
-        
-	while (next_token_talloc(ctx, &p, &tok, "\t,\r\n")) {
-                
-		if (StrnCaseCmp(tok,"REVISION:", 9) == 0) {
-			revision = strtol(tok+9, NULL, 16);
-			continue;
-		}
-                
-		if (StrnCaseCmp(tok,"OWNER:", 6) == 0) {
-			if (owner_sid) {
-				DEBUG(5,("OWNER specified more than once!\n"));
-				goto done;
-			}
-			owner_sid = SMB_CALLOC_ARRAY(DOM_SID, 1);
-			if (!owner_sid ||
-			    !convert_string_to_sid(ipc_cli, pol,
-                                                   numeric,
-                                                   owner_sid, tok+6)) {
-				DEBUG(5, ("Failed to parse owner sid\n"));
-				goto done;
-			}
-			continue;
-		}
-                
-		if (StrnCaseCmp(tok,"OWNER+:", 7) == 0) {
-			if (owner_sid) {
-				DEBUG(5,("OWNER specified more than once!\n"));
-				goto done;
-			}
-			owner_sid = SMB_CALLOC_ARRAY(DOM_SID, 1);
-			if (!owner_sid ||
-			    !convert_string_to_sid(ipc_cli, pol,
-                                                   False,
-                                                   owner_sid, tok+7)) {
-				DEBUG(5, ("Failed to parse owner sid\n"));
-				goto done;
-			}
-			continue;
-		}
-                
-		if (StrnCaseCmp(tok,"GROUP:", 6) == 0) {
-			if (group_sid) {
-				DEBUG(5,("GROUP specified more than once!\n"));
-				goto done;
-			}
-			group_sid = SMB_CALLOC_ARRAY(DOM_SID, 1);
-			if (!group_sid ||
-			    !convert_string_to_sid(ipc_cli, pol,
-                                                   numeric,
-                                                   group_sid, tok+6)) {
-				DEBUG(5, ("Failed to parse group sid\n"));
-				goto done;
-			}
-			continue;
-		}
-                
-		if (StrnCaseCmp(tok,"GROUP+:", 7) == 0) {
-			if (group_sid) {
-				DEBUG(5,("GROUP specified more than once!\n"));
-				goto done;
-			}
-			group_sid = SMB_CALLOC_ARRAY(DOM_SID, 1);
-			if (!group_sid ||
-			    !convert_string_to_sid(ipc_cli, pol,
-                                                   False,
-                                                   group_sid, tok+6)) {
-				DEBUG(5, ("Failed to parse group sid\n"));
-				goto done;
-			}
-			continue;
-		}
-                
-		if (StrnCaseCmp(tok,"ACL:", 4) == 0) {
-			SEC_ACE ace;
-			if (!parse_ace(ipc_cli, pol, &ace, numeric, tok+4)) {
-				DEBUG(5, ("Failed to parse ACL %s\n", tok));
-				goto done;
-			}
-			if(!add_ace(&dacl, &ace, ctx)) {
-				DEBUG(5, ("Failed to add ACL %s\n", tok));
-				goto done;
-			}
-			continue;
-		}
-                
-		if (StrnCaseCmp(tok,"ACL+:", 5) == 0) {
-			SEC_ACE ace;
-			if (!parse_ace(ipc_cli, pol, &ace, False, tok+5)) {
-				DEBUG(5, ("Failed to parse ACL %s\n", tok));
-				goto done;
-			}
-			if(!add_ace(&dacl, &ace, ctx)) {
-				DEBUG(5, ("Failed to add ACL %s\n", tok));
-				goto done;
-			}
-			continue;
-		}
-                
-		DEBUG(5, ("Failed to parse security descriptor\n"));
-		goto done;
-	}
-        
-	ret = make_sec_desc(ctx, revision, SEC_DESC_SELF_RELATIVE, 
-			    owner_sid, group_sid, NULL, dacl, &sd_size);
-        
-done:
-	SAFE_FREE(group_sid);
-	SAFE_FREE(owner_sid);
-        
-	return ret;
-}
-
-
-/* Obtain the current dos attributes */
-static DOS_ATTR_DESC *
-dos_attr_query(SMBCCTX *context,
-               TALLOC_CTX *ctx,
-               const char *filename,
-               SMBCSRV *srv)
-{
-        struct timespec create_time_ts;
-        struct timespec write_time_ts;
-        struct timespec access_time_ts;
-        struct timespec change_time_ts;
-        SMB_OFF_T size = 0;
-        uint16 mode = 0;
-	SMB_INO_T inode = 0;
-        DOS_ATTR_DESC *ret;
-        
-        ret = TALLOC_P(ctx, DOS_ATTR_DESC);
-        if (!ret) {
-                errno = ENOMEM;
-                return NULL;
-        }
-        
-        /* Obtain the DOS attributes */
-        if (!SMBC_getatr(context, srv, CONST_DISCARD(char *, filename),
-                         &mode, &size,
-                         &create_time_ts,
-                         &access_time_ts,
-                         &write_time_ts,
-                         &change_time_ts,
-                         &inode)) {
-                errno = SMBC_errno(context, srv->cli);
-                DEBUG(5, ("dos_attr_query Failed to query old attributes\n"));
-                return NULL;
-        }
-        
-        ret->mode = mode;
-        ret->size = size;
-        ret->create_time = convert_timespec_to_time_t(create_time_ts);
-        ret->access_time = convert_timespec_to_time_t(access_time_ts);
-        ret->write_time = convert_timespec_to_time_t(write_time_ts);
-        ret->change_time = convert_timespec_to_time_t(change_time_ts);
-        ret->inode = inode;
-        
-        return ret;
-}
-
-
-/* parse a ascii version of a security descriptor */
-static void
-dos_attr_parse(SMBCCTX *context,
-               DOS_ATTR_DESC *dad,
-               SMBCSRV *srv,
-               char *str)
-{
-        int n;
-        const char *p = str;
-	char *tok = NULL;
-	TALLOC_CTX *frame = NULL;
-        struct {
-                const char * create_time_attr;
-                const char * access_time_attr;
-                const char * write_time_attr;
-                const char * change_time_attr;
-        } attr_strings;
-        
-        /* Determine whether to use old-style or new-style attribute names */
-        if (context->internal->full_time_names) {
-                /* new-style names */
-                attr_strings.create_time_attr = "CREATE_TIME";
-                attr_strings.access_time_attr = "ACCESS_TIME";
-                attr_strings.write_time_attr = "WRITE_TIME";
-                attr_strings.change_time_attr = "CHANGE_TIME";
-        } else {
-                /* old-style names */
-                attr_strings.create_time_attr = NULL;
-                attr_strings.access_time_attr = "A_TIME";
-                attr_strings.write_time_attr = "M_TIME";
-                attr_strings.change_time_attr = "C_TIME";
-        }
-        
-        /* if this is to set the entire ACL... */
-        if (*str == '*') {
-                /* ... then increment past the first colon if there is one */
-                if ((p = strchr(str, ':')) != NULL) {
-                        ++p;
-                } else {
-                        p = str;
-                }
-        }
-        
-	frame = talloc_stackframe();
-	while (next_token_talloc(frame, &p, &tok, "\t,\r\n")) {
-		if (StrnCaseCmp(tok, "MODE:", 5) == 0) {
-                        long request = strtol(tok+5, NULL, 16);
-                        if (request == 0) {
-                                dad->mode = (request |
-                                             (IS_DOS_DIR(dad->mode)
-                                              ? FILE_ATTRIBUTE_DIRECTORY
-                                              : FILE_ATTRIBUTE_NORMAL));
-                        } else {
-                                dad->mode = request;
-                        }
-			continue;
-		}
-                
-		if (StrnCaseCmp(tok, "SIZE:", 5) == 0) {
-                        dad->size = (SMB_OFF_T)atof(tok+5);
-			continue;
-		}
-                
-                n = strlen(attr_strings.access_time_attr);
-                if (StrnCaseCmp(tok, attr_strings.access_time_attr, n) == 0) {
-                        dad->access_time = (time_t)strtol(tok+n+1, NULL, 10);
-			continue;
-		}
-                
-                n = strlen(attr_strings.change_time_attr);
-                if (StrnCaseCmp(tok, attr_strings.change_time_attr, n) == 0) {
-                        dad->change_time = (time_t)strtol(tok+n+1, NULL, 10);
-			continue;
-		}
-                
-                n = strlen(attr_strings.write_time_attr);
-                if (StrnCaseCmp(tok, attr_strings.write_time_attr, n) == 0) {
-                        dad->write_time = (time_t)strtol(tok+n+1, NULL, 10);
-			continue;
-		}
-                
-		if (attr_strings.create_time_attr != NULL) {
-			n = strlen(attr_strings.create_time_attr);
-			if (StrnCaseCmp(tok, attr_strings.create_time_attr,
-					n) == 0) {
-				dad->create_time = (time_t)strtol(tok+n+1,
-								  NULL, 10);
-				continue;
-			}
-		}
-                
-		if (StrnCaseCmp(tok, "INODE:", 6) == 0) {
-                        dad->inode = (SMB_INO_T)atof(tok+6);
-			continue;
-		}
-	}
-	TALLOC_FREE(frame);
-}
-
-/*****************************************************
- Retrieve the acls for a file.
-*******************************************************/
-
-static int
-cacl_get(SMBCCTX *context,
-         TALLOC_CTX *ctx,
-         SMBCSRV *srv,
-         struct cli_state *ipc_cli,
-         POLICY_HND *pol,
-         char *filename,
-         char *attr_name,
-         char *buf,
-         int bufsize)
-{
-	uint32 i;
-        int n = 0;
-        int n_used;
-        bool all;
-        bool all_nt;
-        bool all_nt_acls;
-        bool all_dos;
-        bool some_nt;
-        bool some_dos;
-        bool exclude_nt_revision = False;
-        bool exclude_nt_owner = False;
-        bool exclude_nt_group = False;
-        bool exclude_nt_acl = False;
-        bool exclude_dos_mode = False;
-        bool exclude_dos_size = False;
-        bool exclude_dos_create_time = False;
-        bool exclude_dos_access_time = False;
-        bool exclude_dos_write_time = False;
-        bool exclude_dos_change_time = False;
-        bool exclude_dos_inode = False;
-        bool numeric = True;
-        bool determine_size = (bufsize == 0);
-	int fnum = -1;
-	SEC_DESC *sd;
-	fstring sidstr;
-        fstring name_sandbox;
-        char *name;
-        char *pExclude;
-        char *p;
-        struct timespec create_time_ts;
-	struct timespec write_time_ts;
-        struct timespec access_time_ts;
-        struct timespec change_time_ts;
-	time_t create_time = (time_t)0;
-	time_t write_time = (time_t)0;
-        time_t access_time = (time_t)0;
-        time_t change_time = (time_t)0;
-	SMB_OFF_T size = 0;
-	uint16 mode = 0;
-	SMB_INO_T ino = 0;
-        struct cli_state *cli = srv->cli;
-        struct {
-                const char * create_time_attr;
-                const char * access_time_attr;
-                const char * write_time_attr;
-                const char * change_time_attr;
-        } attr_strings;
-        struct {
-                const char * create_time_attr;
-                const char * access_time_attr;
-                const char * write_time_attr;
-                const char * change_time_attr;
-        } excl_attr_strings;
-        
-        /* Determine whether to use old-style or new-style attribute names */
-        if (context->internal->full_time_names) {
-                /* new-style names */
-                attr_strings.create_time_attr = "CREATE_TIME";
-                attr_strings.access_time_attr = "ACCESS_TIME";
-                attr_strings.write_time_attr = "WRITE_TIME";
-                attr_strings.change_time_attr = "CHANGE_TIME";
-                
-                excl_attr_strings.create_time_attr = "CREATE_TIME";
-                excl_attr_strings.access_time_attr = "ACCESS_TIME";
-                excl_attr_strings.write_time_attr = "WRITE_TIME";
-                excl_attr_strings.change_time_attr = "CHANGE_TIME";
-        } else {
-                /* old-style names */
-                attr_strings.create_time_attr = NULL;
-                attr_strings.access_time_attr = "A_TIME";
-                attr_strings.write_time_attr = "M_TIME";
-                attr_strings.change_time_attr = "C_TIME";
-                
-                excl_attr_strings.create_time_attr = NULL;
-                excl_attr_strings.access_time_attr = "dos_attr.A_TIME";
-                excl_attr_strings.write_time_attr = "dos_attr.M_TIME";
-                excl_attr_strings.change_time_attr = "dos_attr.C_TIME";
-        }
-        
-        /* Copy name so we can strip off exclusions (if any are specified) */
-        strncpy(name_sandbox, attr_name, sizeof(name_sandbox) - 1);
-        
-        /* Ensure name is null terminated */
-        name_sandbox[sizeof(name_sandbox) - 1] = '\0';
-        
-        /* Play in the sandbox */
-        name = name_sandbox;
-        
-        /* If there are any exclusions, point to them and mask them from name */
-        if ((pExclude = strchr(name, '!')) != NULL)
-        {
-                *pExclude++ = '\0';
-        }
-        
-        all = (StrnCaseCmp(name, "system.*", 8) == 0);
-        all_nt = (StrnCaseCmp(name, "system.nt_sec_desc.*", 20) == 0);
-        all_nt_acls = (StrnCaseCmp(name, "system.nt_sec_desc.acl.*", 24) == 0);
-        all_dos = (StrnCaseCmp(name, "system.dos_attr.*", 17) == 0);
-        some_nt = (StrnCaseCmp(name, "system.nt_sec_desc.", 19) == 0);
-        some_dos = (StrnCaseCmp(name, "system.dos_attr.", 16) == 0);
-        numeric = (* (name + strlen(name) - 1) != '+');
-        
-        /* Look for exclusions from "all" requests */
-        if (all || all_nt || all_dos) {
-                
-                /* Exclusions are delimited by '!' */
-                for (;
-                     pExclude != NULL;
-                     pExclude = (p == NULL ? NULL : p + 1)) {
-                        
-                        /* Find end of this exclusion name */
-                        if ((p = strchr(pExclude, '!')) != NULL)
-                        {
-                                *p = '\0';
-                        }
-                        
-                        /* Which exclusion name is this? */
-                        if (StrCaseCmp(pExclude,
-                                       "nt_sec_desc.revision") == 0) {
-                                exclude_nt_revision = True;
-                        }
-                        else if (StrCaseCmp(pExclude,
-                                            "nt_sec_desc.owner") == 0) {
-                                exclude_nt_owner = True;
-                        }
-                        else if (StrCaseCmp(pExclude,
-                                            "nt_sec_desc.group") == 0) {
-                                exclude_nt_group = True;
-                        }
-                        else if (StrCaseCmp(pExclude,
-                                            "nt_sec_desc.acl") == 0) {
-                                exclude_nt_acl = True;
-                        }
-                        else if (StrCaseCmp(pExclude,
-                                            "dos_attr.mode") == 0) {
-                                exclude_dos_mode = True;
-                        }
-                        else if (StrCaseCmp(pExclude,
-                                            "dos_attr.size") == 0) {
-                                exclude_dos_size = True;
-                        }
-                        else if (excl_attr_strings.create_time_attr != NULL &&
-                                 StrCaseCmp(pExclude,
-                                            excl_attr_strings.change_time_attr) == 0) {
-                                exclude_dos_create_time = True;
-                        }
-                        else if (StrCaseCmp(pExclude,
-                                            excl_attr_strings.access_time_attr) == 0) {
-                                exclude_dos_access_time = True;
-                        }
-                        else if (StrCaseCmp(pExclude,
-                                            excl_attr_strings.write_time_attr) == 0) {
-                                exclude_dos_write_time = True;
-                        }
-                        else if (StrCaseCmp(pExclude,
-                                            excl_attr_strings.change_time_attr) == 0) {
-                                exclude_dos_change_time = True;
-                        }
-                        else if (StrCaseCmp(pExclude, "dos_attr.inode") == 0) {
-                                exclude_dos_inode = True;
-                        }
-                        else {
-                                DEBUG(5, ("cacl_get received unknown exclusion: %s\n",
-                                          pExclude));
-                                errno = ENOATTR;
-                                return -1;
-                        }
-                }
-        }
-        
-        n_used = 0;
-        
-        /*
-         * If we are (possibly) talking to an NT or new system and some NT
-         * attributes have been requested...
-         */
-        if (ipc_cli && (all || some_nt || all_nt_acls)) {
-                /* Point to the portion after "system.nt_sec_desc." */
-                name += 19;     /* if (all) this will be invalid but unused */
-                
-                /* ... then obtain any NT attributes which were requested */
-                fnum = cli_nt_create(cli, filename, CREATE_ACCESS_READ);
-                
-                if (fnum == -1) {
-                        DEBUG(5, ("cacl_get failed to open %s: %s\n",
-                                  filename, cli_errstr(cli)));
-                        errno = 0;
-                        return -1;
-                }
-                
-                sd = cli_query_secdesc(cli, fnum, ctx);
-                
-                if (!sd) {
-                        DEBUG(5,
-                              ("cacl_get Failed to query old descriptor\n"));
-                        errno = 0;
-                        return -1;
-                }
-                
-                cli_close(cli, fnum);
-                
-                if (! exclude_nt_revision) {
-                        if (all || all_nt) {
-                                if (determine_size) {
-                                        p = talloc_asprintf(ctx,
-                                                            "REVISION:%d",
-                                                            sd->revision);
-                                        if (!p) {
-                                                errno = ENOMEM;
-                                                return -1;
-                                        }
-                                        n = strlen(p);
-                                } else {
-                                        n = snprintf(buf, bufsize,
-                                                     "REVISION:%d",
-                                                     sd->revision);
-                                }
-                        } else if (StrCaseCmp(name, "revision") == 0) {
-                                if (determine_size) {
-                                        p = talloc_asprintf(ctx, "%d",
-                                                            sd->revision);
-                                        if (!p) {
-                                                errno = ENOMEM;
-                                                return -1;
-                                        }
-                                        n = strlen(p);
-                                } else {
-                                        n = snprintf(buf, bufsize, "%d",
-                                                     sd->revision);
-                                }
-                        }
-                        
-                        if (!determine_size && n > bufsize) {
-                                errno = ERANGE;
-                                return -1;
-                        }
-                        buf += n;
-                        n_used += n;
-                        bufsize -= n;
-                        n = 0;
-                }
-                
-                if (! exclude_nt_owner) {
-                        /* Get owner and group sid */
-                        if (sd->owner_sid) {
-                                convert_sid_to_string(ipc_cli, pol,
-                                                      sidstr,
-                                                      numeric,
-                                                      sd->owner_sid);
-                        } else {
-                                fstrcpy(sidstr, "");
-                        }
-                        
-                        if (all || all_nt) {
-                                if (determine_size) {
-                                        p = talloc_asprintf(ctx, ",OWNER:%s",
-                                                            sidstr);
-                                        if (!p) {
-                                                errno = ENOMEM;
-                                                return -1;
-                                        }
-                                        n = strlen(p);
-                                } else if (sidstr[0] != '\0') {
-                                        n = snprintf(buf, bufsize,
-                                                     ",OWNER:%s", sidstr);
-                                }
-                        } else if (StrnCaseCmp(name, "owner", 5) == 0) {
-                                if (determine_size) {
-                                        p = talloc_asprintf(ctx, "%s", sidstr);
-                                        if (!p) {
-                                                errno = ENOMEM;
-                                                return -1;
-                                        }
-                                        n = strlen(p);
-                                } else {
-                                        n = snprintf(buf, bufsize, "%s",
-                                                     sidstr);
-                                }
-                        }
-                        
-                        if (!determine_size && n > bufsize) {
-                                errno = ERANGE;
-                                return -1;
-                        }
-                        buf += n;
-                        n_used += n;
-                        bufsize -= n;
-                        n = 0;
-                }
-                
-                if (! exclude_nt_group) {
-                        if (sd->group_sid) {
-                                convert_sid_to_string(ipc_cli, pol,
-                                                      sidstr, numeric,
-                                                      sd->group_sid);
-                        } else {
-                                fstrcpy(sidstr, "");
-                        }
-                        
-                        if (all || all_nt) {
-                                if (determine_size) {
-                                        p = talloc_asprintf(ctx, ",GROUP:%s",
-                                                            sidstr);
-                                        if (!p) {
-                                                errno = ENOMEM;
-                                                return -1;
-                                        }
-                                        n = strlen(p);
-                                } else if (sidstr[0] != '\0') {
-                                        n = snprintf(buf, bufsize,
-                                                     ",GROUP:%s", sidstr);
-                                }
-                        } else if (StrnCaseCmp(name, "group", 5) == 0) {
-                                if (determine_size) {
-                                        p = talloc_asprintf(ctx, "%s", sidstr);
-                                        if (!p) {
-                                                errno = ENOMEM;
-                                                return -1;
-                                        }
-                                        n = strlen(p);
-                                } else {
-                                        n = snprintf(buf, bufsize,
-                                                     "%s", sidstr);
-                                }
-                        }
-                        
-                        if (!determine_size && n > bufsize) {
-                                errno = ERANGE;
-                                return -1;
-                        }
-                        buf += n;
-                        n_used += n;
-                        bufsize -= n;
-                        n = 0;
-                }
-                
-                if (! exclude_nt_acl) {
-                        /* Add aces to value buffer  */
-                        for (i = 0; sd->dacl && i < sd->dacl->num_aces; i++) {
-                                
-                                SEC_ACE *ace = &sd->dacl->aces[i];
-                                convert_sid_to_string(ipc_cli, pol,
-                                                      sidstr, numeric,
-                                                      &ace->trustee);
-                                
-                                if (all || all_nt) {
-                                        if (determine_size) {
-                                                p = talloc_asprintf(
-                                                        ctx, 
-                                                        ",ACL:"
-                                                        "%s:%d/%d/0x%08x", 
-                                                        sidstr,
-                                                        ace->type,
-                                                        ace->flags,
-                                                        ace->access_mask);
-                                                if (!p) {
-                                                        errno = ENOMEM;
-                                                        return -1;
-                                                }
-                                                n = strlen(p);
-                                        } else {
-                                                n = snprintf(
-                                                        buf, bufsize,
-                                                        ",ACL:%s:%d/%d/0x%08x", 
-                                                        sidstr,
-                                                        ace->type,
-                                                        ace->flags,
-                                                        ace->access_mask);
-                                        }
-                                } else if ((StrnCaseCmp(name, "acl", 3) == 0 &&
-                                            StrCaseCmp(name+3, sidstr) == 0) ||
-                                           (StrnCaseCmp(name, "acl+", 4) == 0 &&
-                                            StrCaseCmp(name+4, sidstr) == 0)) {
-                                        if (determine_size) {
-                                                p = talloc_asprintf(
-                                                        ctx, 
-                                                        "%d/%d/0x%08x", 
-                                                        ace->type,
-                                                        ace->flags,
-                                                        ace->access_mask);
-                                                if (!p) {
-                                                        errno = ENOMEM;
-                                                        return -1;
-                                                }
-                                                n = strlen(p);
-                                        } else {
-                                                n = snprintf(buf, bufsize,
-                                                             "%d/%d/0x%08x", 
-                                                             ace->type,
-                                                             ace->flags,
-                                                             ace->access_mask);
-                                        }
-                                } else if (all_nt_acls) {
-                                        if (determine_size) {
-                                                p = talloc_asprintf(
-                                                        ctx, 
-                                                        "%s%s:%d/%d/0x%08x",
-                                                        i ? "," : "",
-                                                        sidstr,
-                                                        ace->type,
-                                                        ace->flags,
-                                                        ace->access_mask);
-                                                if (!p) {
-                                                        errno = ENOMEM;
-                                                        return -1;
-                                                }
-                                                n = strlen(p);
-                                        } else {
-                                                n = snprintf(buf, bufsize,
-                                                             "%s%s:%d/%d/0x%08x",
-                                                             i ? "," : "",
-                                                             sidstr,
-                                                             ace->type,
-                                                             ace->flags,
-                                                             ace->access_mask);
-                                        }
-                                }
-                                if (!determine_size && n > bufsize) {
-                                        errno = ERANGE;
-                                        return -1;
-                                }
-                                buf += n;
-                                n_used += n;
-                                bufsize -= n;
-                                n = 0;
-                        }
-                }
-                
-                /* Restore name pointer to its original value */
-                name -= 19;
-        }
-        
-        if (all || some_dos) {
-                /* Point to the portion after "system.dos_attr." */
-                name += 16;     /* if (all) this will be invalid but unused */
-                
-                /* Obtain the DOS attributes */
-                if (!SMBC_getatr(context, srv, filename, &mode, &size, 
-                                 &create_time_ts,
-                                 &access_time_ts,
-                                 &write_time_ts,
-                                 &change_time_ts,
-                                 &ino)) {
-                        
-                        errno = SMBC_errno(context, srv->cli);
-                        return -1;
-                        
-                }
-                
-                create_time = convert_timespec_to_time_t(create_time_ts);
-                access_time = convert_timespec_to_time_t(access_time_ts);
-                write_time = convert_timespec_to_time_t(write_time_ts);
-                change_time = convert_timespec_to_time_t(change_time_ts);
-                
-                if (! exclude_dos_mode) {
-                        if (all || all_dos) {
-                                if (determine_size) {
-                                        p = talloc_asprintf(ctx,
-                                                            "%sMODE:0x%x",
-                                                            (ipc_cli &&
-                                                             (all || some_nt)
-                                                             ? ","
-                                                             : ""),
-                                                            mode);
-                                        if (!p) {
-                                                errno = ENOMEM;
-                                                return -1;
-                                        }
-                                        n = strlen(p);
-                                } else {
-                                        n = snprintf(buf, bufsize,
-                                                     "%sMODE:0x%x",
-                                                     (ipc_cli &&
-                                                      (all || some_nt)
-                                                      ? ","
-                                                      : ""),
-                                                     mode);
-                                }
-                        } else if (StrCaseCmp(name, "mode") == 0) {
-                                if (determine_size) {
-                                        p = talloc_asprintf(ctx, "0x%x", mode);
-                                        if (!p) {
-                                                errno = ENOMEM;
-                                                return -1;
-                                        }
-                                        n = strlen(p);
-                                } else {
-                                        n = snprintf(buf, bufsize,
-                                                     "0x%x", mode);
-                                }
-                        }
-                        
-                        if (!determine_size && n > bufsize) {
-                                errno = ERANGE;
-                                return -1;
-                        }
-                        buf += n;
-                        n_used += n;
-                        bufsize -= n;
-                        n = 0;
-                }
-                
-                if (! exclude_dos_size) {
-                        if (all || all_dos) {
-                                if (determine_size) {
-                                        p = talloc_asprintf(
-                                                ctx,
-                                                ",SIZE:%.0f",
-                                                (double)size);
-                                        if (!p) {
-                                                errno = ENOMEM;
-                                                return -1;
-                                        }
-                                        n = strlen(p);
-                                } else {
-                                        n = snprintf(buf, bufsize,
-                                                     ",SIZE:%.0f",
-                                                     (double)size);
-                                }
-                        } else if (StrCaseCmp(name, "size") == 0) {
-                                if (determine_size) {
-                                        p = talloc_asprintf(
-                                                ctx,
-                                                "%.0f",
-                                                (double)size);
-                                        if (!p) {
-                                                errno = ENOMEM;
-                                                return -1;
-                                        }
-                                        n = strlen(p);
-                                } else {
-                                        n = snprintf(buf, bufsize,
-                                                     "%.0f",
-                                                     (double)size);
-                                }
-                        }
-                        
-                        if (!determine_size && n > bufsize) {
-                                errno = ERANGE;
-                                return -1;
-                        }
-                        buf += n;
-                        n_used += n;
-                        bufsize -= n;
-                        n = 0;
-                }
-                
-                if (! exclude_dos_create_time &&
-                    attr_strings.create_time_attr != NULL) {
-                        if (all || all_dos) {
-                                if (determine_size) {
-                                        p = talloc_asprintf(ctx,
-                                                            ",%s:%lu",
-                                                            attr_strings.create_time_attr,
-                                                            create_time);
-                                        if (!p) {
-                                                errno = ENOMEM;
-                                                return -1;
-                                        }
-                                        n = strlen(p);
-                                } else {
-                                        n = snprintf(buf, bufsize,
-                                                     ",%s:%lu",
-                                                     attr_strings.create_time_attr,
-                                                     create_time);
-                                }
-                        } else if (StrCaseCmp(name, attr_strings.create_time_attr) == 0) {
-                                if (determine_size) {
-                                        p = talloc_asprintf(ctx, "%lu", create_time);
-                                        if (!p) {
-                                                errno = ENOMEM;
-                                                return -1;
-                                        }
-                                        n = strlen(p);
-                                } else {
-                                        n = snprintf(buf, bufsize,
-                                                     "%lu", create_time);
-                                }
-                        }
-                        
-                        if (!determine_size && n > bufsize) {
-                                errno = ERANGE;
-                                return -1;
-                        }
-                        buf += n;
-                        n_used += n;
-                        bufsize -= n;
-                        n = 0;
-                }
-                
-                if (! exclude_dos_access_time) {
-                        if (all || all_dos) {
-                                if (determine_size) {
-                                        p = talloc_asprintf(ctx,
-                                                            ",%s:%lu",
-                                                            attr_strings.access_time_attr,
-                                                            access_time);
-                                        if (!p) {
-                                                errno = ENOMEM;
-                                                return -1;
-                                        }
-                                        n = strlen(p);
-                                } else {
-                                        n = snprintf(buf, bufsize,
-                                                     ",%s:%lu",
-                                                     attr_strings.access_time_attr,
-                                                     access_time);
-                                }
-                        } else if (StrCaseCmp(name, attr_strings.access_time_attr) == 0) {
-                                if (determine_size) {
-                                        p = talloc_asprintf(ctx, "%lu", access_time);
-                                        if (!p) {
-                                                errno = ENOMEM;
-                                                return -1;
-                                        }
-                                        n = strlen(p);
-                                } else {
-                                        n = snprintf(buf, bufsize,
-                                                     "%lu", access_time);
-                                }
-                        }
-                        
-                        if (!determine_size && n > bufsize) {
-                                errno = ERANGE;
-                                return -1;
-                        }
-                        buf += n;
-                        n_used += n;
-                        bufsize -= n;
-                        n = 0;
-                }
-                
-                if (! exclude_dos_write_time) {
-                        if (all || all_dos) {
-                                if (determine_size) {
-                                        p = talloc_asprintf(ctx,
-                                                            ",%s:%lu",
-                                                            attr_strings.write_time_attr,
-                                                            write_time);
-                                        if (!p) {
-                                                errno = ENOMEM;
-                                                return -1;
-                                        }
-                                        n = strlen(p);
-                                } else {
-                                        n = snprintf(buf, bufsize,
-                                                     ",%s:%lu",
-                                                     attr_strings.write_time_attr,
-                                                     write_time);
-                                }
-                        } else if (StrCaseCmp(name, attr_strings.write_time_attr) == 0) {
-                                if (determine_size) {
-                                        p = talloc_asprintf(ctx, "%lu", write_time);
-                                        if (!p) {
-                                                errno = ENOMEM;
-                                                return -1;
-                                        }
-                                        n = strlen(p);
-                                } else {
-                                        n = snprintf(buf, bufsize,
-                                                     "%lu", write_time);
-                                }
-                        }
-                        
-                        if (!determine_size && n > bufsize) {
-                                errno = ERANGE;
-                                return -1;
-                        }
-                        buf += n;
-                        n_used += n;
-                        bufsize -= n;
-                        n = 0;
-                }
-                
-                if (! exclude_dos_change_time) {
-                        if (all || all_dos) {
-                                if (determine_size) {
-                                        p = talloc_asprintf(ctx,
-                                                            ",%s:%lu",
-                                                            attr_strings.change_time_attr,
-                                                            change_time);
-                                        if (!p) {
-                                                errno = ENOMEM;
-                                                return -1;
-                                        }
-                                        n = strlen(p);
-                                } else {
-                                        n = snprintf(buf, bufsize,
-                                                     ",%s:%lu",
-                                                     attr_strings.change_time_attr,
-                                                     change_time);
-                                }
-                        } else if (StrCaseCmp(name, attr_strings.change_time_attr) == 0) {
-                                if (determine_size) {
-                                        p = talloc_asprintf(ctx, "%lu", change_time);
-                                        if (!p) {
-                                                errno = ENOMEM;
-                                                return -1;
-                                        }
-                                        n = strlen(p);
-                                } else {
-                                        n = snprintf(buf, bufsize,
-                                                     "%lu", change_time);
-                                }
-                        }
-                        
-                        if (!determine_size && n > bufsize) {
-                                errno = ERANGE;
-                                return -1;
-                        }
-                        buf += n;
-                        n_used += n;
-                        bufsize -= n;
-                        n = 0;
-                }
-                
-                if (! exclude_dos_inode) {
-                        if (all || all_dos) {
-                                if (determine_size) {
-                                        p = talloc_asprintf(
-                                                ctx,
-                                                ",INODE:%.0f",
-                                                (double)ino);
-                                        if (!p) {
-                                                errno = ENOMEM;
-                                                return -1;
-                                        }
-                                        n = strlen(p);
-                                } else {
-                                        n = snprintf(buf, bufsize,
-                                                     ",INODE:%.0f",
-                                                     (double) ino);
-                                }
-                        } else if (StrCaseCmp(name, "inode") == 0) {
-                                if (determine_size) {
-                                        p = talloc_asprintf(
-                                                ctx,
-                                                "%.0f",
-                                                (double) ino);
-                                        if (!p) {
-                                                errno = ENOMEM;
-                                                return -1;
-                                        }
-                                        n = strlen(p);
-                                } else {
-                                        n = snprintf(buf, bufsize,
-                                                     "%.0f",
-                                                     (double) ino);
-                                }
-                        }
-                        
-                        if (!determine_size && n > bufsize) {
-                                errno = ERANGE;
-                                return -1;
-                        }
-                        buf += n;
-                        n_used += n;
-                        bufsize -= n;
-                        n = 0;
-                }
-                
-                /* Restore name pointer to its original value */
-                name -= 16;
-        }
-        
-        if (n_used == 0) {
-                errno = ENOATTR;
-                return -1;
-        }
-        
-	return n_used;
-}
-
-/*****************************************************
-set the ACLs on a file given an ascii description
-*******************************************************/
-static int
-cacl_set(TALLOC_CTX *ctx,
-         struct cli_state *cli,
-         struct cli_state *ipc_cli,
-         POLICY_HND *pol,
-         const char *filename,
-         const char *the_acl,
-         int mode,
-         int flags)
-{
-	int fnum;
-        int err = 0;
-	SEC_DESC *sd = NULL, *old;
-        SEC_ACL *dacl = NULL;
-	DOM_SID *owner_sid = NULL;
-	DOM_SID *group_sid = NULL;
-	uint32 i, j;
-	size_t sd_size;
-	int ret = 0;
-        char *p;
-        bool numeric = True;
-        
-        /* the_acl will be null for REMOVE_ALL operations */
-        if (the_acl) {
-                numeric = ((p = strchr(the_acl, ':')) != NULL &&
-                           p > the_acl &&
-                           p[-1] != '+');
-                
-                /* if this is to set the entire ACL... */
-                if (*the_acl == '*') {
-                        /* ... then increment past the first colon */
-                        the_acl = p + 1;
-                }
-                
-                sd = sec_desc_parse(ctx, ipc_cli, pol, numeric,
-                                    CONST_DISCARD(char *, the_acl));
-                
-                if (!sd) {
-			errno = EINVAL;
-			return -1;
-                }
-        }
-        
-	/* SMBC_XATTR_MODE_REMOVE_ALL is the only caller
-	   that doesn't deref sd */
-        
-	if (!sd && (mode != SMBC_XATTR_MODE_REMOVE_ALL)) {
-		errno = EINVAL;
-		return -1;
-	}
-        
-	/* The desired access below is the only one I could find that works
-	   with NT4, W2KP and Samba */
-        
-	fnum = cli_nt_create(cli, filename, CREATE_ACCESS_READ);
-        
-	if (fnum == -1) {
-                DEBUG(5, ("cacl_set failed to open %s: %s\n",
-                          filename, cli_errstr(cli)));
-                errno = 0;
-		return -1;
-	}
-        
-	old = cli_query_secdesc(cli, fnum, ctx);
-        
-	if (!old) {
-                DEBUG(5, ("cacl_set Failed to query old descriptor\n"));
-                errno = 0;
-		return -1;
-	}
-        
-	cli_close(cli, fnum);
-        
-	switch (mode) {
-	case SMBC_XATTR_MODE_REMOVE_ALL:
-                old->dacl->num_aces = 0;
-                dacl = old->dacl;
-                break;
-                
-        case SMBC_XATTR_MODE_REMOVE:
-		for (i=0;sd->dacl && i<sd->dacl->num_aces;i++) {
-			bool found = False;
-                        
-			for (j=0;old->dacl && j<old->dacl->num_aces;j++) {
-                                if (sec_ace_equal(&sd->dacl->aces[i],
-                                                  &old->dacl->aces[j])) {
-					uint32 k;
-					for (k=j; k<old->dacl->num_aces-1;k++) {
-						old->dacl->aces[k] =
-                                                        old->dacl->aces[k+1];
-					}
-					old->dacl->num_aces--;
-					found = True;
-                                        dacl = old->dacl;
-					break;
-				}
-			}
-                        
-			if (!found) {
-                                err = ENOATTR;
-                                ret = -1;
-                                goto failed;
-			}
-		}
-		break;
-                
-	case SMBC_XATTR_MODE_ADD:
-		for (i=0;sd->dacl && i<sd->dacl->num_aces;i++) {
-			bool found = False;
-                        
-			for (j=0;old->dacl && j<old->dacl->num_aces;j++) {
-				if (sid_equal(&sd->dacl->aces[i].trustee,
-					      &old->dacl->aces[j].trustee)) {
-                                        if (!(flags & SMBC_XATTR_FLAG_CREATE)) {
-                                                err = EEXIST;
-                                                ret = -1;
-                                                goto failed;
-                                        }
-                                        old->dacl->aces[j] = sd->dacl->aces[i];
-                                        ret = -1;
-					found = True;
-				}
-			}
-                        
-			if (!found && (flags & SMBC_XATTR_FLAG_REPLACE)) {
-                                err = ENOATTR;
-                                ret = -1;
-                                goto failed;
-			}
-                        
-                        for (i=0;sd->dacl && i<sd->dacl->num_aces;i++) {
-                                add_ace(&old->dacl, &sd->dacl->aces[i], ctx);
-                        }
-		}
-                dacl = old->dacl;
-		break;
-                
-	case SMBC_XATTR_MODE_SET:
- 		old = sd;
-                owner_sid = old->owner_sid;
-                group_sid = old->group_sid;
-                dacl = old->dacl;
-		break;
-                
-        case SMBC_XATTR_MODE_CHOWN:
-                owner_sid = sd->owner_sid;
-                break;
-                
-        case SMBC_XATTR_MODE_CHGRP:
-                group_sid = sd->group_sid;
-                break;
-	}
-        
-	/* Denied ACE entries must come before allowed ones */
-	sort_acl(old->dacl);
-        
-	/* Create new security descriptor and set it */
-	sd = make_sec_desc(ctx, old->revision, SEC_DESC_SELF_RELATIVE,
-			   owner_sid, group_sid, NULL, dacl, &sd_size);
-        
-	fnum = cli_nt_create(cli, filename,
-                             WRITE_DAC_ACCESS | WRITE_OWNER_ACCESS);
-        
-	if (fnum == -1) {
-		DEBUG(5, ("cacl_set failed to open %s: %s\n",
-                          filename, cli_errstr(cli)));
-                errno = 0;
-		return -1;
-	}
-        
-	if (!cli_set_secdesc(cli, fnum, sd)) {
-		DEBUG(5, ("ERROR: secdesc set failed: %s\n", cli_errstr(cli)));
-		ret = -1;
-	}
-        
-	/* Clean up */
-        
-failed:
-	cli_close(cli, fnum);
-        
-        if (err != 0) {
-                errno = err;
-        }
-        
-	return ret;
-}
-
-
-int
-SMBC_setxattr_ctx(SMBCCTX *context,
-                  const char *fname,
-                  const char *name,
-                  const void *value,
-                  size_t size,
-                  int flags)
-{
-        int ret;
-        int ret2;
-        SMBCSRV *srv = NULL;
-        SMBCSRV *ipc_srv = NULL;
-	char *server = NULL;
-	char *share = NULL;
-	char *user = NULL;
-	char *password = NULL;
-	char *workgroup = NULL;
-	char *path = NULL;
-        DOS_ATTR_DESC *dad = NULL;
-        struct {
-                const char * create_time_attr;
-                const char * access_time_attr;
-                const char * write_time_attr;
-                const char * change_time_attr;
-        } attr_strings;
-        TALLOC_CTX *frame = talloc_stackframe();
-        
-	if (!context || !context->internal->initialized) {
-                
-		errno = EINVAL;  /* Best I can think of ... */
-		TALLOC_FREE(frame);
-		return -1;
-	}
-        
-	if (!fname) {
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-	}
-        
-	DEBUG(4, ("smbc_setxattr(%s, %s, %.*s)\n",
-                  fname, name, (int) size, (const char*)value));
-        
-	if (SMBC_parse_path(frame,
-                            context,
-                            fname,
-                            &workgroup,
-                            &server,
-                            &share,
-                            &path,
-                            &user,
-                            &password,
-                            NULL)) {
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-        }
-        
-	if (!user || user[0] == (char)0) {
-		user = talloc_strdup(frame, smbc_getUser(context));
-		if (!user) {
-			errno = ENOMEM;
-			TALLOC_FREE(frame);
-			return -1;
-		}
-	}
-        
-	srv = SMBC_server(frame, context, True,
-                          server, share, &workgroup, &user, &password);
-	if (!srv) {
-		TALLOC_FREE(frame);
-		return -1;  /* errno set by SMBC_server */
-	}
-        
-        if (! srv->no_nt_session) {
-                ipc_srv = SMBC_attr_server(frame, context, server, share,
-                                           &workgroup, &user, &password);
-                if (! ipc_srv) {
-                        srv->no_nt_session = True;
-                }
-        } else {
-                ipc_srv = NULL;
-        }
-        
-        /*
-         * Are they asking to set the entire set of known attributes?
-         */
-        if (StrCaseCmp(name, "system.*") == 0 ||
-            StrCaseCmp(name, "system.*+") == 0) {
-                /* Yup. */
-                char *namevalue =
-                        talloc_asprintf(talloc_tos(), "%s:%s",
-                                        name+7, (const char *) value);
-                if (! namevalue) {
-                        errno = ENOMEM;
-                        ret = -1;
-			TALLOC_FREE(frame);
-                        return -1;
-                }
-                
-                if (ipc_srv) {
-                        ret = cacl_set(talloc_tos(), srv->cli,
-                                       ipc_srv->cli, &ipc_srv->pol, path,
-                                       namevalue,
-                                       (*namevalue == '*'
-                                        ? SMBC_XATTR_MODE_SET
-                                        : SMBC_XATTR_MODE_ADD),
-                                       flags);
-                } else {
-                        ret = 0;
-                }
-                
-                /* get a DOS Attribute Descriptor with current attributes */
-                dad = dos_attr_query(context, talloc_tos(), path, srv);
-                if (dad) {
-                        /* Overwrite old with new, using what was provided */
-                        dos_attr_parse(context, dad, srv, namevalue);
-                        
-                        /* Set the new DOS attributes */
-                        if (! SMBC_setatr(context, srv, path,
-                                          dad->create_time,
-                                          dad->access_time,
-                                          dad->write_time,
-                                          dad->change_time,
-                                          dad->mode)) {
-                                
-                                /* cause failure if NT failed too */
-                                dad = NULL; 
-                        }
-                }
-                
-                /* we only fail if both NT and DOS sets failed */
-                if (ret < 0 && ! dad) {
-                        ret = -1; /* in case dad was null */
-                }
-                else {
-                        ret = 0;
-                }
-                
-		TALLOC_FREE(frame);
-                return ret;
-        }
-        
-        /*
-         * Are they asking to set an access control element or to set
-         * the entire access control list?
-         */
-        if (StrCaseCmp(name, "system.nt_sec_desc.*") == 0 ||
-            StrCaseCmp(name, "system.nt_sec_desc.*+") == 0 ||
-            StrCaseCmp(name, "system.nt_sec_desc.revision") == 0 ||
-            StrnCaseCmp(name, "system.nt_sec_desc.acl", 22) == 0 ||
-            StrnCaseCmp(name, "system.nt_sec_desc.acl+", 23) == 0) {
-                
-                /* Yup. */
-                char *namevalue =
-                        talloc_asprintf(talloc_tos(), "%s:%s",
-                                        name+19, (const char *) value);
-                
-                if (! ipc_srv) {
-                        ret = -1; /* errno set by SMBC_server() */
-                }
-                else if (! namevalue) {
-                        errno = ENOMEM;
-                        ret = -1;
-                } else {
-                        ret = cacl_set(talloc_tos(), srv->cli,
-                                       ipc_srv->cli, &ipc_srv->pol, path,
-                                       namevalue,
-                                       (*namevalue == '*'
-                                        ? SMBC_XATTR_MODE_SET
-                                        : SMBC_XATTR_MODE_ADD),
-                                       flags);
-                }
-		TALLOC_FREE(frame);
-                return ret;
-        }
-        
-        /*
-         * Are they asking to set the owner?
-         */
-        if (StrCaseCmp(name, "system.nt_sec_desc.owner") == 0 ||
-            StrCaseCmp(name, "system.nt_sec_desc.owner+") == 0) {
-                
-                /* Yup. */
-                char *namevalue =
-                        talloc_asprintf(talloc_tos(), "%s:%s",
-                                        name+19, (const char *) value);
-                
-                if (! ipc_srv) {
-                        ret = -1; /* errno set by SMBC_server() */
-                }
-                else if (! namevalue) {
-                        errno = ENOMEM;
-                        ret = -1;
-                } else {
-                        ret = cacl_set(talloc_tos(), srv->cli,
-                                       ipc_srv->cli, &ipc_srv->pol, path,
-                                       namevalue, SMBC_XATTR_MODE_CHOWN, 0);
-                }
-		TALLOC_FREE(frame);
-                return ret;
-        }
-        
-        /*
-         * Are they asking to set the group?
-         */
-        if (StrCaseCmp(name, "system.nt_sec_desc.group") == 0 ||
-            StrCaseCmp(name, "system.nt_sec_desc.group+") == 0) {
-                
-                /* Yup. */
-                char *namevalue =
-                        talloc_asprintf(talloc_tos(), "%s:%s",
-                                        name+19, (const char *) value);
-                
-                if (! ipc_srv) {
-                        /* errno set by SMBC_server() */
-                        ret = -1;
-                }
-                else if (! namevalue) {
-                        errno = ENOMEM;
-                        ret = -1;
-                } else {
-                        ret = cacl_set(talloc_tos(), srv->cli,
-                                       ipc_srv->cli, &ipc_srv->pol, path,
-                                       namevalue, SMBC_XATTR_MODE_CHGRP, 0);
-                }
-		TALLOC_FREE(frame);
-                return ret;
-        }
-        
-        /* Determine whether to use old-style or new-style attribute names */
-        if (context->internal->full_time_names) {
-                /* new-style names */
-                attr_strings.create_time_attr = "system.dos_attr.CREATE_TIME";
-                attr_strings.access_time_attr = "system.dos_attr.ACCESS_TIME";
-                attr_strings.write_time_attr = "system.dos_attr.WRITE_TIME";
-                attr_strings.change_time_attr = "system.dos_attr.CHANGE_TIME";
-        } else {
-                /* old-style names */
-                attr_strings.create_time_attr = NULL;
-                attr_strings.access_time_attr = "system.dos_attr.A_TIME";
-                attr_strings.write_time_attr = "system.dos_attr.M_TIME";
-                attr_strings.change_time_attr = "system.dos_attr.C_TIME";
-        }
-        
-        /*
-         * Are they asking to set a DOS attribute?
-         */
-        if (StrCaseCmp(name, "system.dos_attr.*") == 0 ||
-            StrCaseCmp(name, "system.dos_attr.mode") == 0 ||
-            (attr_strings.create_time_attr != NULL &&
-             StrCaseCmp(name, attr_strings.create_time_attr) == 0) ||
-            StrCaseCmp(name, attr_strings.access_time_attr) == 0 ||
-            StrCaseCmp(name, attr_strings.write_time_attr) == 0 ||
-            StrCaseCmp(name, attr_strings.change_time_attr) == 0) {
-                
-                /* get a DOS Attribute Descriptor with current attributes */
-                dad = dos_attr_query(context, talloc_tos(), path, srv);
-                if (dad) {
-                        char *namevalue =
-                                talloc_asprintf(talloc_tos(), "%s:%s",
-                                                name+16, (const char *) value);
-                        if (! namevalue) {
-                                errno = ENOMEM;
-                                ret = -1;
-                        } else {
-                                /* Overwrite old with provided new params */
-                                dos_attr_parse(context, dad, srv, namevalue);
-                                
-                                /* Set the new DOS attributes */
-                                ret2 = SMBC_setatr(context, srv, path,
-                                                   dad->create_time,
-                                                   dad->access_time,
-                                                   dad->write_time,
-                                                   dad->change_time,
-                                                   dad->mode);
-                                
-                                /* ret2 has True (success) / False (failure) */
-                                if (ret2) {
-                                        ret = 0;
-                                } else {
-                                        ret = -1;
-                                }
-                        }
-                } else {
-                        ret = -1;
-                }
-                
-		TALLOC_FREE(frame);
-                return ret;
-        }
-        
-        /* Unsupported attribute name */
-        errno = EINVAL;
-	TALLOC_FREE(frame);
-        return -1;
-}
-
-int
-SMBC_getxattr_ctx(SMBCCTX *context,
-                  const char *fname,
-                  const char *name,
-                  const void *value,
-                  size_t size)
-{
-        int ret;
-        SMBCSRV *srv = NULL;
-        SMBCSRV *ipc_srv = NULL;
-	char *server = NULL;
-	char *share = NULL;
-	char *user = NULL;
-	char *password = NULL;
-	char *workgroup = NULL;
-	char *path = NULL;
-        struct {
-                const char * create_time_attr;
-                const char * access_time_attr;
-                const char * write_time_attr;
-                const char * change_time_attr;
-        } attr_strings;
-	TALLOC_CTX *frame = talloc_stackframe();
-        
-	if (!context || !context->internal->initialized) {
-                
-                errno = EINVAL;  /* Best I can think of ... */
-		TALLOC_FREE(frame);
-                return -1;
-        }
-        
-        if (!fname) {
-                errno = EINVAL;
-		TALLOC_FREE(frame);
-                return -1;
-        }
-        
-        DEBUG(4, ("smbc_getxattr(%s, %s)\n", fname, name));
-        
-        if (SMBC_parse_path(frame,
-                            context,
-                            fname,
-                            &workgroup,
-                            &server,
-                            &share,
-                            &path,
-                            &user,
-                            &password,
-                            NULL)) {
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-        }
-        
-        if (!user || user[0] == (char)0) {
-		user = talloc_strdup(frame, smbc_getUser(context));
-		if (!user) {
-			errno = ENOMEM;
-			TALLOC_FREE(frame);
-			return -1;
-		}
-	}
-        
-        srv = SMBC_server(frame, context, True,
-                          server, share, &workgroup, &user, &password);
-        if (!srv) {
-		TALLOC_FREE(frame);
-                return -1;  /* errno set by SMBC_server */
-        }
-        
-        if (! srv->no_nt_session) {
-                ipc_srv = SMBC_attr_server(frame, context, server, share,
-                                           &workgroup, &user, &password);
-                if (! ipc_srv) {
-                        srv->no_nt_session = True;
-                }
-        } else {
-                ipc_srv = NULL;
-        }
-        
-        /* Determine whether to use old-style or new-style attribute names */
-        if (context->internal->full_time_names) {
-                /* new-style names */
-                attr_strings.create_time_attr = "system.dos_attr.CREATE_TIME";
-                attr_strings.access_time_attr = "system.dos_attr.ACCESS_TIME";
-                attr_strings.write_time_attr = "system.dos_attr.WRITE_TIME";
-                attr_strings.change_time_attr = "system.dos_attr.CHANGE_TIME";
-        } else {
-                /* old-style names */
-                attr_strings.create_time_attr = NULL;
-                attr_strings.access_time_attr = "system.dos_attr.A_TIME";
-                attr_strings.write_time_attr = "system.dos_attr.M_TIME";
-                attr_strings.change_time_attr = "system.dos_attr.C_TIME";
-        }
-        
-        /* Are they requesting a supported attribute? */
-        if (StrCaseCmp(name, "system.*") == 0 ||
-            StrnCaseCmp(name, "system.*!", 9) == 0 ||
-            StrCaseCmp(name, "system.*+") == 0 ||
-            StrnCaseCmp(name, "system.*+!", 10) == 0 ||
-            StrCaseCmp(name, "system.nt_sec_desc.*") == 0 ||
-            StrnCaseCmp(name, "system.nt_sec_desc.*!", 21) == 0 ||
-            StrCaseCmp(name, "system.nt_sec_desc.*+") == 0 ||
-            StrnCaseCmp(name, "system.nt_sec_desc.*+!", 22) == 0 ||
-            StrCaseCmp(name, "system.nt_sec_desc.revision") == 0 ||
-            StrCaseCmp(name, "system.nt_sec_desc.owner") == 0 ||
-            StrCaseCmp(name, "system.nt_sec_desc.owner+") == 0 ||
-            StrCaseCmp(name, "system.nt_sec_desc.group") == 0 ||
-            StrCaseCmp(name, "system.nt_sec_desc.group+") == 0 ||
-            StrnCaseCmp(name, "system.nt_sec_desc.acl", 22) == 0 ||
-            StrnCaseCmp(name, "system.nt_sec_desc.acl+", 23) == 0 ||
-            StrCaseCmp(name, "system.dos_attr.*") == 0 ||
-            StrnCaseCmp(name, "system.dos_attr.*!", 18) == 0 ||
-            StrCaseCmp(name, "system.dos_attr.mode") == 0 ||
-            StrCaseCmp(name, "system.dos_attr.size") == 0 ||
-            (attr_strings.create_time_attr != NULL &&
-             StrCaseCmp(name, attr_strings.create_time_attr) == 0) ||
-            StrCaseCmp(name, attr_strings.access_time_attr) == 0 ||
-            StrCaseCmp(name, attr_strings.write_time_attr) == 0 ||
-            StrCaseCmp(name, attr_strings.change_time_attr) == 0 ||
-            StrCaseCmp(name, "system.dos_attr.inode") == 0) {
-                
-                /* Yup. */
-                ret = cacl_get(context, talloc_tos(), srv,
-                               ipc_srv == NULL ? NULL : ipc_srv->cli, 
-                               &ipc_srv->pol, path,
-                               CONST_DISCARD(char *, name),
-                               CONST_DISCARD(char *, value), size);
-                if (ret < 0 && errno == 0) {
-                        errno = SMBC_errno(context, srv->cli);
-                }
-		TALLOC_FREE(frame);
-                return ret;
-        }
-        
-        /* Unsupported attribute name */
-        errno = EINVAL;
-	TALLOC_FREE(frame);
-        return -1;
-}
-
-
-int
-SMBC_removexattr_ctx(SMBCCTX *context,
-                     const char *fname,
-                     const char *name)
-{
-        int ret;
-        SMBCSRV *srv = NULL;
-        SMBCSRV *ipc_srv = NULL;
-	char *server = NULL;
-	char *share = NULL;
-	char *user = NULL;
-	char *password = NULL;
-	char *workgroup = NULL;
-	char *path = NULL;
-	TALLOC_CTX *frame = talloc_stackframe();
-        
-	if (!context || !context->internal->initialized) {
-                
-                errno = EINVAL;  /* Best I can think of ... */
-		TALLOC_FREE(frame);
-                return -1;
-        }
-        
-        if (!fname) {
-                errno = EINVAL;
-		TALLOC_FREE(frame);
-                return -1;
-        }
-        
-        DEBUG(4, ("smbc_removexattr(%s, %s)\n", fname, name));
-        
-	if (SMBC_parse_path(frame,
-                            context,
-                            fname,
-                            &workgroup,
-                            &server,
-                            &share,
-                            &path,
-                            &user,
-                            &password,
-                            NULL)) {
-		errno = EINVAL;
-		TALLOC_FREE(frame);
-		return -1;
-        }
-        
-        if (!user || user[0] == (char)0) {
-		user = talloc_strdup(frame, smbc_getUser(context));
-		if (!user) {
-			errno = ENOMEM;
-			TALLOC_FREE(frame);
-			return -1;
-		}
-	}
-        
-        srv = SMBC_server(frame, context, True,
-                          server, share, &workgroup, &user, &password);
-        if (!srv) {
-		TALLOC_FREE(frame);
-                return -1;  /* errno set by SMBC_server */
-        }
-        
-        if (! srv->no_nt_session) {
-                ipc_srv = SMBC_attr_server(frame, context, server, share,
-                                           &workgroup, &user, &password);
-                if (! ipc_srv) {
-                        srv->no_nt_session = True;
-                }
-        } else {
-                ipc_srv = NULL;
-        }
-        
-        if (! ipc_srv) {
-		TALLOC_FREE(frame);
-                return -1; /* errno set by SMBC_attr_server */
-        }
-        
-        /* Are they asking to set the entire ACL? */
-        if (StrCaseCmp(name, "system.nt_sec_desc.*") == 0 ||
-            StrCaseCmp(name, "system.nt_sec_desc.*+") == 0) {
-                
-                /* Yup. */
-                ret = cacl_set(talloc_tos(), srv->cli,
-                               ipc_srv->cli, &ipc_srv->pol, path,
-                               NULL, SMBC_XATTR_MODE_REMOVE_ALL, 0);
-		TALLOC_FREE(frame);
-                return ret;
-        }
-        
-        /*
-         * Are they asking to remove one or more spceific security descriptor
-         * attributes?
-         */
-        if (StrCaseCmp(name, "system.nt_sec_desc.revision") == 0 ||
-            StrCaseCmp(name, "system.nt_sec_desc.owner") == 0 ||
-            StrCaseCmp(name, "system.nt_sec_desc.owner+") == 0 ||
-            StrCaseCmp(name, "system.nt_sec_desc.group") == 0 ||
-            StrCaseCmp(name, "system.nt_sec_desc.group+") == 0 ||
-            StrnCaseCmp(name, "system.nt_sec_desc.acl", 22) == 0 ||
-            StrnCaseCmp(name, "system.nt_sec_desc.acl+", 23) == 0) {
-                
-                /* Yup. */
-                ret = cacl_set(talloc_tos(), srv->cli,
-                               ipc_srv->cli, &ipc_srv->pol, path,
-                               name + 19, SMBC_XATTR_MODE_REMOVE, 0);
-		TALLOC_FREE(frame);
-                return ret;
-        }
-        
-        /* Unsupported attribute name */
-        errno = EINVAL;
-	TALLOC_FREE(frame);
-        return -1;
-}
-
-int
-SMBC_listxattr_ctx(SMBCCTX *context,
-                   const char *fname,
-                   char *list,
-                   size_t size)
-{
-        /*
-         * This isn't quite what listxattr() is supposed to do.  This returns
-         * the complete set of attribute names, always, rather than only those
-         * attribute names which actually exist for a file.  Hmmm...
-         */
-        size_t retsize;
-        const char supported_old[] =
-                "system.*\0"
-                "system.*+\0"
-                "system.nt_sec_desc.revision\0"
-                "system.nt_sec_desc.owner\0"
-                "system.nt_sec_desc.owner+\0"
-                "system.nt_sec_desc.group\0"
-                "system.nt_sec_desc.group+\0"
-                "system.nt_sec_desc.acl.*\0"
-                "system.nt_sec_desc.acl\0"
-                "system.nt_sec_desc.acl+\0"
-                "system.nt_sec_desc.*\0"
-                "system.nt_sec_desc.*+\0"
-                "system.dos_attr.*\0"
-                "system.dos_attr.mode\0"
-                "system.dos_attr.c_time\0"
-                "system.dos_attr.a_time\0"
-                "system.dos_attr.m_time\0"
-                ;
-        const char supported_new[] =
-                "system.*\0"
-                "system.*+\0"
-                "system.nt_sec_desc.revision\0"
-                "system.nt_sec_desc.owner\0"
-                "system.nt_sec_desc.owner+\0"
-                "system.nt_sec_desc.group\0"
-                "system.nt_sec_desc.group+\0"
-                "system.nt_sec_desc.acl.*\0"
-                "system.nt_sec_desc.acl\0"
-                "system.nt_sec_desc.acl+\0"
-                "system.nt_sec_desc.*\0"
-                "system.nt_sec_desc.*+\0"
-                "system.dos_attr.*\0"
-                "system.dos_attr.mode\0"
-                "system.dos_attr.create_time\0"
-                "system.dos_attr.access_time\0"
-                "system.dos_attr.write_time\0"
-                "system.dos_attr.change_time\0"
-                ;
-        const char * supported;
-        
-        if (context->internal->full_time_names) {
-                supported = supported_new;
-                retsize = sizeof(supported_new);
-        } else {
-                supported = supported_old;
-                retsize = sizeof(supported_old);
-        }
-        
-        if (size == 0) {
-                return retsize;
-        }
-        
-        if (retsize > size) {
-                errno = ERANGE;
-                return -1;
-        }
-        
-        /* this can't be strcpy() because there are embedded null characters */
-        memcpy(list, supported, retsize);
-        return retsize;
-}

Copied: branches/samba/upstream/source/libsmb/libsmbclient.c (from rev 1928, branches/samba/upstream/source/libsmb/libsmbclient.c)
===================================================================
--- branches/samba/upstream/source/libsmb/libsmbclient.c	                        (rev 0)
+++ branches/samba/upstream/source/libsmb/libsmbclient.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,6674 @@
+/* 
+   Unix SMB/Netbios implementation.
+   SMB client library implementation
+   Copyright (C) Andrew Tridgell 1998
+   Copyright (C) Richard Sharpe 2000, 2002
+   Copyright (C) John Terpstra 2000
+   Copyright (C) Tom Jansen (Ninja ISD) 2002 
+   Copyright (C) Derrell Lipman 2003, 2004
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+
+#include "include/libsmb_internal.h"
+
+struct smbc_dirent *smbc_readdir_ctx(SMBCCTX *context, SMBCFILE *dir);
+struct smbc_dir_list *smbc_check_dir_ent(struct smbc_dir_list *list, 
+					 struct smbc_dirent *dirent);
+
+/*
+ * DOS Attribute values (used internally)
+ */
+typedef struct DOS_ATTR_DESC {
+	int mode;
+	SMB_OFF_T size;
+	time_t create_time;
+	time_t access_time;
+	time_t write_time;
+	time_t change_time;
+	SMB_INO_T inode;
+} DOS_ATTR_DESC;
+
+
+/*
+ * Internal flags for extended attributes
+ */
+
+/* internal mode values */
+#define SMBC_XATTR_MODE_ADD          1
+#define SMBC_XATTR_MODE_REMOVE       2
+#define SMBC_XATTR_MODE_REMOVE_ALL   3
+#define SMBC_XATTR_MODE_SET          4
+#define SMBC_XATTR_MODE_CHOWN        5
+#define SMBC_XATTR_MODE_CHGRP        6
+
+#define CREATE_ACCESS_READ      READ_CONTROL_ACCESS
+
+/*We should test for this in configure ... */
+#ifndef ENOTSUP
+#define ENOTSUP EOPNOTSUPP
+#endif
+
+/*
+ * Functions exported by libsmb_cache.c that we need here
+ */
+int smbc_default_cache_functions(SMBCCTX *context);
+
+/* 
+ * check if an element is part of the list. 
+ * FIXME: Does not belong here !  
+ * Can anyone put this in a macro in dlinklist.h ?
+ * -- Tom
+ */
+static int DLIST_CONTAINS(SMBCFILE * list, SMBCFILE *p) {
+	if (!p || !list) return False;
+	do {
+		if (p == list) return True;
+		list = list->next;
+	} while (list);
+	return False;
+}
+
+/*
+ * Find an lsa pipe handle associated with a cli struct.
+ */
+static struct rpc_pipe_client *
+find_lsa_pipe_hnd(struct cli_state *ipc_cli)
+{
+	struct rpc_pipe_client *pipe_hnd;
+
+	for (pipe_hnd = ipc_cli->pipe_list;
+             pipe_hnd;
+             pipe_hnd = pipe_hnd->next) {
+            
+		if (pipe_hnd->pipe_idx == PI_LSARPC) {
+			return pipe_hnd;
+		}
+	}
+
+	return NULL;
+}
+
+static int
+smbc_close_ctx(SMBCCTX *context,
+               SMBCFILE *file);
+static off_t
+smbc_lseek_ctx(SMBCCTX *context,
+               SMBCFILE *file,
+               off_t offset,
+               int whence);
+
+extern BOOL in_client;
+
+/*
+ * Is the logging working / configfile read ? 
+ */
+static int smbc_initialized = 0;
+
+static int 
+hex2int( unsigned int _char )
+{
+    if ( _char >= 'A' && _char <='F')
+	return _char - 'A' + 10;
+    if ( _char >= 'a' && _char <='f')
+	return _char - 'a' + 10;
+    if ( _char >= '0' && _char <='9')
+	return _char - '0';
+    return -1;
+}
+
+/*
+ * smbc_urldecode()
+ *
+ * Convert strings of %xx to their single character equivalent.  Each 'x' must
+ * be a valid hexadecimal digit, or that % sequence is left undecoded.
+ *
+ * dest may, but need not be, the same pointer as src.
+ *
+ * Returns the number of % sequences which could not be converted due to lack
+ * of two following hexadecimal digits.
+ */
+int
+smbc_urldecode(char *dest, char * src, size_t max_dest_len)
+{
+        int old_length = strlen(src);
+        int i = 0;
+        int err_count = 0;
+        pstring temp;
+        char * p;
+
+        if ( old_length == 0 ) {
+                return 0;
+        }
+
+        p = temp;
+        while ( i < old_length ) {
+                unsigned char character = src[ i++ ];
+
+                if (character == '%') {
+                        int a = i+1 < old_length ? hex2int( src[i] ) : -1;
+                        int b = i+1 < old_length ? hex2int( src[i+1] ) : -1;
+
+                        /* Replace valid sequence */
+                        if (a != -1 && b != -1) {
+
+                                /* Replace valid %xx sequence with %dd */
+                                character = (a * 16) + b;
+
+                                if (character == '\0') {
+                                        break; /* Stop at %00 */
+                                }
+
+                                i += 2;
+                        } else {
+
+                                err_count++;
+                        }
+                }
+
+                *p++ = character;
+        }
+
+        *p = '\0';
+
+        strncpy(dest, temp, max_dest_len - 1);
+        dest[max_dest_len - 1] = '\0';
+
+        return err_count;
+}
+
+/*
+ * smbc_urlencode()
+ *
+ * Convert any characters not specifically allowed in a URL into their %xx
+ * equivalent.
+ *
+ * Returns the remaining buffer length.
+ */
+int
+smbc_urlencode(char * dest, char * src, int max_dest_len)
+{
+        char hex[] = "0123456789ABCDEF";
+
+        for (; *src != '\0' && max_dest_len >= 3; src++) {
+
+                if ((*src < '0' &&
+                     *src != '-' &&
+                     *src != '.') ||
+                    (*src > '9' &&
+                     *src < 'A') ||
+                    (*src > 'Z' &&
+                     *src < 'a' &&
+                     *src != '_') ||
+                    (*src > 'z')) {
+                        *dest++ = '%';
+                        *dest++ = hex[(*src >> 4) & 0x0f];
+                        *dest++ = hex[*src & 0x0f];
+                        max_dest_len -= 3;
+                } else {
+                        *dest++ = *src;
+                        max_dest_len--;
+                }
+        }
+
+        *dest++ = '\0';
+        max_dest_len--;
+        
+        return max_dest_len;
+}
+
+/*
+ * Function to parse a path and turn it into components
+ *
+ * The general format of an SMB URI is explain in Christopher Hertel's CIFS
+ * book, at http://ubiqx.org/cifs/Appendix-D.html.  We accept a subset of the
+ * general format ("smb:" only; we do not look for "cifs:").
+ *
+ *
+ * We accept:
+ *  smb://[[[domain;]user[:password]@]server[/share[/path[/file]]]][?options]
+ *
+ * Meaning of URLs:
+ *
+ * smb://           Show all workgroups.
+ *
+ *                  The method of locating the list of workgroups varies
+ *                  depending upon the setting of the context variable
+ *                  context->options.browse_max_lmb_count.  This value
+ *                  determine the maximum number of local master browsers to
+ *                  query for the list of workgroups.  In order to ensure that
+ *                  a complete list of workgroups is obtained, all master
+ *                  browsers must be queried, but if there are many
+ *                  workgroups, the time spent querying can begin to add up.
+ *                  For small networks (not many workgroups), it is suggested
+ *                  that this variable be set to 0, indicating query all local
+ *                  master browsers.  When the network has many workgroups, a
+ *                  reasonable setting for this variable might be around 3.
+ *
+ * smb://name/      if name<1D> or name<1B> exists, list servers in
+ *                  workgroup, else, if name<20> exists, list all shares
+ *                  for server ...
+ *
+ * If "options" are provided, this function returns the entire option list as a
+ * string, for later parsing by the caller.  Note that currently, no options
+ * are supported.
+ */
+
+static const char *smbc_prefix = "smb:";
+
+static int
+smbc_parse_path(SMBCCTX *context,
+                const char *fname,
+                char *workgroup, int workgroup_len,
+                char *server, int server_len,
+                char *share, int share_len,
+                char *path, int path_len,
+		char *user, int user_len,
+                char *password, int password_len,
+                char *options, int options_len)
+{
+	static pstring s;
+	pstring userinfo;
+	const char *p;
+	char *q, *r;
+	int len;
+
+	server[0] = share[0] = path[0] = user[0] = password[0] = (char)0;
+
+        /*
+         * Assume we wont find an authentication domain to parse, so default
+         * to the workgroup in the provided context.
+         */
+        if (workgroup != NULL) {
+                strncpy(workgroup, context->workgroup, workgroup_len - 1);
+                workgroup[workgroup_len - 1] = '\0';
+        }
+
+        if (options != NULL && options_len > 0) {
+                options[0] = (char)0;
+        }
+	pstrcpy(s, fname);
+
+	/* see if it has the right prefix */
+	len = strlen(smbc_prefix);
+	if (strncmp(s,smbc_prefix,len) || (s[len] != '/' && s[len] != 0)) {
+                return -1; /* What about no smb: ? */
+        }
+
+	p = s + len;
+
+	/* Watch the test below, we are testing to see if we should exit */
+
+	if (strncmp(p, "//", 2) && strncmp(p, "\\\\", 2)) {
+
+                DEBUG(1, ("Invalid path (does not begin with smb://"));
+		return -1;
+
+	}
+
+	p += 2;  /* Skip the double slash */
+
+        /* See if any options were specified */
+        if ((q = strrchr(p, '?')) != NULL ) {
+                /* There are options.  Null terminate here and point to them */
+                *q++ = '\0';
+                
+                DEBUG(4, ("Found options '%s'", q));
+
+                /* Copy the options */
+                if (options != NULL && options_len > 0) {
+                        safe_strcpy(options, q, options_len - 1);
+                }
+        }
+
+	if (*p == (char)0)
+	    goto decoding;
+
+	if (*p == '/') {
+		int wl = strlen(context->workgroup);
+
+		if (wl > 16) {
+			wl = 16;
+		}
+
+		strncpy(server, context->workgroup, wl);
+                server[wl] = '\0';
+		return 0;
+	}
+
+	/*
+	 * ok, its for us. Now parse out the server, share etc. 
+	 *
+	 * However, we want to parse out [[domain;]user[:password]@] if it
+	 * exists ...
+	 */
+
+	/* check that '@' occurs before '/', if '/' exists at all */
+	q = strchr_m(p, '@');
+	r = strchr_m(p, '/');
+	if (q && (!r || q < r)) {
+		pstring username, passwd, domain;
+		const char *u = userinfo;
+
+		next_token_no_ltrim(&p, userinfo, "@", sizeof(fstring));
+
+		username[0] = passwd[0] = domain[0] = 0;
+
+		if (strchr_m(u, ';')) {
+      
+			next_token_no_ltrim(&u, domain, ";", sizeof(fstring));
+
+		}
+
+		if (strchr_m(u, ':')) {
+
+			next_token_no_ltrim(&u, username, ":", sizeof(fstring));
+
+			pstrcpy(passwd, u);
+
+		}
+		else {
+
+			pstrcpy(username, u);
+
+		}
+
+                if (domain[0] && workgroup) {
+                        strncpy(workgroup, domain, workgroup_len - 1);
+                        workgroup[workgroup_len - 1] = '\0';
+                }
+
+		if (username[0]) {
+			strncpy(user, username, user_len - 1);
+                        user[user_len - 1] = '\0';
+                }
+
+		if (passwd[0]) {
+			strncpy(password, passwd, password_len - 1);
+                        password[password_len - 1] = '\0';
+                }
+
+	}
+
+	if (!next_token(&p, server, "/", sizeof(fstring))) {
+
+		return -1;
+
+	}
+
+	if (*p == (char)0) goto decoding;  /* That's it ... */
+  
+	if (!next_token(&p, share, "/", sizeof(fstring))) {
+
+		return -1;
+
+	}
+
+        /*
+         * Prepend a leading slash if there's a file path, as required by
+         * NetApp filers.
+         */
+        *path = '\0';
+        if (*p != '\0') {
+                *path = '/';
+                safe_strcpy(path + 1, p, path_len - 2);
+        }
+
+	all_string_sub(path, "/", "\\", 0);
+
+ decoding:
+	(void) smbc_urldecode(path, path, path_len);
+	(void) smbc_urldecode(server, server, server_len);
+	(void) smbc_urldecode(share, share, share_len);
+	(void) smbc_urldecode(user, user, user_len);
+	(void) smbc_urldecode(password, password, password_len);
+
+	return 0;
+}
+
+/*
+ * Verify that the options specified in a URL are valid
+ */
+static int
+smbc_check_options(char *server,
+                   char *share,
+                   char *path,
+                   char *options)
+{
+        DEBUG(4, ("smbc_check_options(): server='%s' share='%s' "
+                  "path='%s' options='%s'\n",
+                  server, share, path, options));
+
+        /* No options at all is always ok */
+        if (! *options) return 0;
+
+        /* Currently, we don't support any options. */
+        return -1;
+}
+
+/*
+ * Convert an SMB error into a UNIX error ...
+ */
+static int
+smbc_errno(SMBCCTX *context,
+           struct cli_state *c)
+{
+	int ret = cli_errno(c);
+	
+        if (cli_is_dos_error(c)) {
+                uint8 eclass;
+                uint32 ecode;
+
+                cli_dos_error(c, &eclass, &ecode);
+                
+                DEBUG(3,("smbc_error %d %d (0x%x) -> %d\n", 
+                         (int)eclass, (int)ecode, (int)ecode, ret));
+        } else {
+                NTSTATUS status;
+
+                status = cli_nt_error(c);
+
+                DEBUG(3,("smbc errno %s -> %d\n",
+                         nt_errstr(status), ret));
+        }
+
+	return ret;
+}
+
+/* 
+ * Check a server for being alive and well.
+ * returns 0 if the server is in shape. Returns 1 on error 
+ * 
+ * Also useable outside libsmbclient to enable external cache
+ * to do some checks too.
+ */
+static int
+smbc_check_server(SMBCCTX * context,
+                  SMBCSRV * server) 
+{
+        socklen_t size;
+        struct sockaddr addr;
+
+        size = sizeof(addr);
+        return (getpeername(server->cli->fd, &addr, &size) == -1);
+}
+
+/* 
+ * Remove a server from the cached server list it's unused.
+ * On success, 0 is returned. 1 is returned if the server could not be removed.
+ * 
+ * Also useable outside libsmbclient
+ */
+int
+smbc_remove_unused_server(SMBCCTX * context,
+                          SMBCSRV * srv)
+{
+	SMBCFILE * file;
+
+	/* are we being fooled ? */
+	if (!context || !context->internal ||
+	    !context->internal->_initialized || !srv) return 1;
+
+	
+	/* Check all open files/directories for a relation with this server */
+	for (file = context->internal->_files; file; file=file->next) {
+		if (file->srv == srv) {
+			/* Still used */
+			DEBUG(3, ("smbc_remove_usused_server: "
+                                  "%p still used by %p.\n", 
+				  srv, file));
+			return 1;
+		}
+	}
+
+	DLIST_REMOVE(context->internal->_servers, srv);
+
+	cli_shutdown(srv->cli);
+	srv->cli = NULL;
+
+	DEBUG(3, ("smbc_remove_usused_server: %p removed.\n", srv));
+
+	(context->callbacks.remove_cached_srv_fn)(context, srv);
+
+        SAFE_FREE(srv);
+	
+	return 0;
+}
+
+static SMBCSRV *
+find_server(SMBCCTX *context,
+            const char *server,
+            const char *share,
+            fstring workgroup,
+            fstring username,
+            fstring password)
+{
+        SMBCSRV *srv;
+        int auth_called = 0;
+        
+ check_server_cache:
+
+	srv = (context->callbacks.get_cached_srv_fn)(context, server, share, 
+                                                     workgroup, username);
+
+	if (!auth_called && !srv && (!username[0] || !password[0])) {
+                if (context->internal->_auth_fn_with_context != NULL) {
+                        (context->internal->_auth_fn_with_context)(
+                                context,
+                                server, share,
+                                workgroup, sizeof(fstring),
+                                username, sizeof(fstring),
+                                password, sizeof(fstring));
+                } else {
+                        (context->callbacks.auth_fn)(
+                                server, share,
+                                workgroup, sizeof(fstring),
+                                username, sizeof(fstring),
+                                password, sizeof(fstring));
+                }
+
+		/*
+                 * However, smbc_auth_fn may have picked up info relating to
+                 * an existing connection, so try for an existing connection
+                 * again ...
+                 */
+		auth_called = 1;
+		goto check_server_cache;
+		
+	}
+	
+	if (srv) {
+		if ((context->callbacks.check_server_fn)(context, srv)) {
+			/*
+                         * This server is no good anymore 
+                         * Try to remove it and check for more possible
+                         * servers in the cache
+                         */
+			if ((context->callbacks.remove_unused_server_fn)(context,
+                                                                         srv)) { 
+                                /*
+                                 * We could not remove the server completely,
+                                 * remove it from the cache so we will not get
+                                 * it again. It will be removed when the last
+                                 * file/dir is closed.
+                                 */
+				(context->callbacks.remove_cached_srv_fn)(context,
+                                                                          srv);
+			}
+			
+			/*
+                         * Maybe there are more cached connections to this
+                         * server
+                         */
+			goto check_server_cache; 
+		}
+
+		return srv;
+ 	}
+
+        return NULL;
+}
+
+/*
+ * Connect to a server, possibly on an existing connection
+ *
+ * Here, what we want to do is: If the server and username
+ * match an existing connection, reuse that, otherwise, establish a 
+ * new connection.
+ *
+ * If we have to create a new connection, call the auth_fn to get the
+ * info we need, unless the username and password were passed in.
+ */
+
+static SMBCSRV *
+smbc_server(SMBCCTX *context,
+            BOOL connect_if_not_found,
+            const char *server,
+            const char *share, 
+            fstring workgroup,
+            fstring username, 
+            fstring password)
+{
+	SMBCSRV *srv=NULL;
+	struct cli_state *c;
+	struct nmb_name called, calling;
+	const char *server_n = server;
+	pstring ipenv;
+	struct in_addr ip;
+	int tried_reverse = 0;
+        int port_try_first;
+        int port_try_next;
+        const char *username_used;
+ 	NTSTATUS status;
+
+	zero_ip(&ip);
+	ZERO_STRUCT(c);
+
+	if (server[0] == 0) {
+		errno = EPERM;
+		return NULL;
+	}
+
+        /* Look for a cached connection */
+        srv = find_server(context, server, share,
+                          workgroup, username, password);
+        
+        /*
+         * If we found a connection and we're only allowed one share per
+         * server...
+         */
+        if (srv && *share != '\0' && context->options.one_share_per_server) {
+
+                /*
+                 * ... then if there's no current connection to the share,
+                 * connect to it.  find_server(), or rather the function
+                 * pointed to by context->callbacks.get_cached_srv_fn which
+                 * was called by find_server(), will have issued a tree
+                 * disconnect if the requested share is not the same as the
+                 * one that was already connected.
+                 */
+                if (srv->cli->cnum == (uint16) -1) {
+                        /* Ensure we have accurate auth info */
+                        if (context->internal->_auth_fn_with_context != NULL) {
+                                (context->internal->_auth_fn_with_context)(
+                                        context,
+                                        server, share,
+                                        workgroup, sizeof(fstring),
+                                        username, sizeof(fstring),
+                                        password, sizeof(fstring));
+                        } else {
+                                (context->callbacks.auth_fn)(
+                                        server, share,
+                                        workgroup, sizeof(fstring),
+                                        username, sizeof(fstring),
+                                        password, sizeof(fstring));
+                        }
+
+                        if (! cli_send_tconX(srv->cli, share, "?????",
+                                             password, strlen(password)+1)) {
+                        
+                                errno = smbc_errno(context, srv->cli);
+                                cli_shutdown(srv->cli);
+				srv->cli = NULL;
+                                (context->callbacks.remove_cached_srv_fn)(context,
+                                                                          srv);
+                                srv = NULL;
+                        }
+
+                        /*
+                         * Regenerate the dev value since it's based on both
+                         * server and share
+                         */
+                        if (srv) {
+                                srv->dev = (dev_t)(str_checksum(server) ^
+                                                   str_checksum(share));
+                        }
+                }
+        }
+        
+        /* If we have a connection... */
+        if (srv) {
+
+                /* ... then we're done here.  Give 'em what they came for. */
+                return srv;
+        }
+
+        /* If we're not asked to connect when a connection doesn't exist... */
+        if (! connect_if_not_found) {
+                /* ... then we're done here. */
+                return NULL;
+        }
+
+	make_nmb_name(&calling, context->netbios_name, 0x0);
+	make_nmb_name(&called , server, 0x20);
+
+	DEBUG(4,("smbc_server: server_n=[%s] server=[%s]\n", server_n, server));
+  
+	DEBUG(4,(" -> server_n=[%s] server=[%s]\n", server_n, server));
+
+ again:
+	slprintf(ipenv,sizeof(ipenv)-1,"HOST_%s", server_n);
+
+	zero_ip(&ip);
+
+	/* have to open a new connection */
+	if ((c = cli_initialise()) == NULL) {
+		errno = ENOMEM;
+		return NULL;
+	}
+
+	if (context->flags & SMB_CTX_FLAG_USE_KERBEROS) {
+		c->use_kerberos = True;
+	}
+	if (context->flags & SMB_CTX_FLAG_FALLBACK_AFTER_KERBEROS) {
+		c->fallback_after_kerberos = True;
+	}
+
+	c->timeout = context->timeout;
+
+        /*
+         * Force use of port 139 for first try if share is $IPC, empty, or
+         * null, so browse lists can work
+         */
+        if (share == NULL || *share == '\0' || strcmp(share, "IPC$") == 0) {
+                port_try_first = 139;
+                port_try_next = 445;
+        } else {
+                port_try_first = 445;
+                port_try_next = 139;
+        }
+
+        c->port = port_try_first;
+
+	status = cli_connect(c, server_n, &ip);
+	if (!NT_STATUS_IS_OK(status)) {
+
+                /* First connection attempt failed.  Try alternate port. */
+                c->port = port_try_next;
+
+                status = cli_connect(c, server_n, &ip);
+		if (!NT_STATUS_IS_OK(status)) {
+			cli_shutdown(c);
+			errno = ETIMEDOUT;
+			return NULL;
+		}
+	}
+
+	if (!cli_session_request(c, &calling, &called)) {
+		cli_shutdown(c);
+		if (strcmp(called.name, "*SMBSERVER")) {
+			make_nmb_name(&called , "*SMBSERVER", 0x20);
+			goto again;
+		} else {  /* Try one more time, but ensure we don't loop */
+
+			/* Only try this if server is an IP address ... */
+
+			if (is_ipaddress(server) && !tried_reverse) {
+				fstring remote_name;
+				struct in_addr rem_ip;
+
+				if ((rem_ip.s_addr=inet_addr(server)) == INADDR_NONE) {
+					DEBUG(4, ("Could not convert IP address "
+						"%s to struct in_addr\n", server));
+					errno = ETIMEDOUT;
+					return NULL;
+				}
+
+				tried_reverse++; /* Yuck */
+
+				if (name_status_find("*", 0, 0, rem_ip, remote_name)) {
+					make_nmb_name(&called, remote_name, 0x20);
+					goto again;
+				}
+			}
+		}
+		errno = ETIMEDOUT;
+		return NULL;
+	}
+  
+	DEBUG(4,(" session request ok\n"));
+  
+	if (!cli_negprot(c)) {
+		cli_shutdown(c);
+		errno = ETIMEDOUT;
+		return NULL;
+	}
+
+        username_used = username;
+
+	if (!NT_STATUS_IS_OK(cli_session_setup(c, username_used, 
+					       password, strlen(password),
+					       password, strlen(password),
+					       workgroup))) {
+                
+                /* Failed.  Try an anonymous login, if allowed by flags. */
+                username_used = "";
+
+                if ((context->flags & SMBCCTX_FLAG_NO_AUTO_ANONYMOUS_LOGON) ||
+                     !NT_STATUS_IS_OK(cli_session_setup(c, username_used,
+							password, 1,
+							password, 0,
+							workgroup))) {
+
+                        cli_shutdown(c);
+                        errno = EPERM;
+                        return NULL;
+                }
+	}
+
+	DEBUG(4,(" session setup ok\n"));
+
+	if (!cli_send_tconX(c, share, "?????",
+			    password, strlen(password)+1)) {
+		errno = smbc_errno(context, c);
+		cli_shutdown(c);
+		return NULL;
+	}
+  
+	DEBUG(4,(" tconx ok\n"));
+  
+	/*
+	 * Ok, we have got a nice connection
+	 * Let's allocate a server structure.
+	 */
+
+	srv = SMB_MALLOC_P(SMBCSRV);
+	if (!srv) {
+		errno = ENOMEM;
+		goto failed;
+	}
+
+	ZERO_STRUCTP(srv);
+	srv->cli = c;
+	srv->dev = (dev_t)(str_checksum(server) ^ str_checksum(share));
+        srv->no_pathinfo = False;
+        srv->no_pathinfo2 = False;
+        srv->no_nt_session = False;
+
+	/* now add it to the cache (internal or external)  */
+	/* Let the cache function set errno if it wants to */
+	errno = 0;
+	if ((context->callbacks.add_cached_srv_fn)(context, srv,
+                                                   server, share,
+                                                   workgroup, username)) {
+		int saved_errno = errno;
+		DEBUG(3, (" Failed to add server to cache\n"));
+		errno = saved_errno;
+		if (errno == 0) {
+			errno = ENOMEM;
+		}
+		goto failed;
+	}
+	
+	DEBUG(2, ("Server connect ok: //%s/%s: %p\n", 
+		  server, share, srv));
+
+	DLIST_ADD(context->internal->_servers, srv);
+	return srv;
+
+ failed:
+	cli_shutdown(c);
+	if (!srv) {
+		return NULL;
+	}
+  
+	SAFE_FREE(srv);
+	return NULL;
+}
+
+/*
+ * Connect to a server for getting/setting attributes, possibly on an existing
+ * connection.  This works similarly to smbc_server().
+ */
+static SMBCSRV *
+smbc_attr_server(SMBCCTX *context,
+                 const char *server,
+                 const char *share, 
+                 fstring workgroup,
+                 fstring username,
+                 fstring password,
+                 POLICY_HND *pol)
+{
+        int flags;
+        struct in_addr ip;
+	struct cli_state *ipc_cli;
+	struct rpc_pipe_client *pipe_hnd;
+        NTSTATUS nt_status;
+	SMBCSRV *ipc_srv=NULL;
+
+        /*
+         * See if we've already created this special connection.  Reference
+         * our "special" share name '*IPC$', which is an impossible real share
+         * name due to the leading asterisk.
+         */
+        ipc_srv = find_server(context, server, "*IPC$",
+                              workgroup, username, password);
+        if (!ipc_srv) {
+
+                /* We didn't find a cached connection.  Get the password */
+                if (*password == '\0') {
+                        /* ... then retrieve it now. */
+                        if (context->internal->_auth_fn_with_context != NULL) {
+                                (context->internal->_auth_fn_with_context)(
+                                        context,
+                                        server, share,
+                                        workgroup, sizeof(fstring),
+                                        username, sizeof(fstring),
+                                        password, sizeof(fstring));
+                        } else {
+                                (context->callbacks.auth_fn)(
+                                        server, share,
+                                        workgroup, sizeof(fstring),
+                                        username, sizeof(fstring),
+                                        password, sizeof(fstring));
+                        }
+                }
+        
+                flags = 0;
+                if (context->flags & SMB_CTX_FLAG_USE_KERBEROS) {
+                        flags |= CLI_FULL_CONNECTION_USE_KERBEROS;
+                }
+
+                zero_ip(&ip);
+                nt_status = cli_full_connection(&ipc_cli,
+                                                global_myname(), server, 
+                                                &ip, 0, "IPC$", "?????",  
+                                                username, workgroup,
+                                                password, flags,
+                                                Undefined, NULL);
+                if (! NT_STATUS_IS_OK(nt_status)) {
+                        DEBUG(1,("cli_full_connection failed! (%s)\n",
+                                 nt_errstr(nt_status)));
+                        errno = ENOTSUP;
+                        return NULL;
+                }
+
+                ipc_srv = SMB_MALLOC_P(SMBCSRV);
+                if (!ipc_srv) {
+                        errno = ENOMEM;
+                        cli_shutdown(ipc_cli);
+                        return NULL;
+                }
+
+                ZERO_STRUCTP(ipc_srv);
+                ipc_srv->cli = ipc_cli;
+
+                if (pol) {
+                        pipe_hnd = cli_rpc_pipe_open_noauth(ipc_srv->cli,
+                                                            PI_LSARPC,
+                                                            &nt_status);
+                        if (!pipe_hnd) {
+                                DEBUG(1, ("cli_nt_session_open fail!\n"));
+                                errno = ENOTSUP;
+                                cli_shutdown(ipc_srv->cli);
+                                free(ipc_srv);
+                                return NULL;
+                        }
+
+                        /*
+                         * Some systems don't support
+                         * SEC_RIGHTS_MAXIMUM_ALLOWED, but NT sends 0x2000000
+                         * so we might as well do it too.
+                         */
+        
+                        nt_status = rpccli_lsa_open_policy(
+                                pipe_hnd,
+                                ipc_srv->cli->mem_ctx,
+                                True, 
+                                GENERIC_EXECUTE_ACCESS,
+                                pol);
+        
+                        if (!NT_STATUS_IS_OK(nt_status)) {
+                                errno = smbc_errno(context, ipc_srv->cli);
+                                cli_shutdown(ipc_srv->cli);
+                                return NULL;
+                        }
+                }
+
+                /* now add it to the cache (internal or external) */
+
+                errno = 0;      /* let cache function set errno if it likes */
+                if ((context->callbacks.add_cached_srv_fn)(context, ipc_srv,
+                                                           server,
+                                                           "*IPC$",
+                                                           workgroup,
+                                                           username)) {
+                        DEBUG(3, (" Failed to add server to cache\n"));
+                        if (errno == 0) {
+                                errno = ENOMEM;
+                        }
+                        cli_shutdown(ipc_srv->cli);
+                        free(ipc_srv);
+                        return NULL;
+                }
+
+                DLIST_ADD(context->internal->_servers, ipc_srv);
+        }
+
+        return ipc_srv;
+}
+
+/*
+ * Routine to open() a file ...
+ */
+
+static SMBCFILE *
+smbc_open_ctx(SMBCCTX *context,
+              const char *fname,
+              int flags,
+              mode_t mode)
+{
+	fstring server, share, user, password, workgroup;
+	pstring path;
+        pstring targetpath;
+	struct cli_state *targetcli;
+	SMBCSRV *srv   = NULL;
+	SMBCFILE *file = NULL;
+	int fd;
+
+	if (!context || !context->internal ||
+	    !context->internal->_initialized) {
+
+		errno = EINVAL;  /* Best I can think of ... */
+		return NULL;
+
+	}
+
+	if (!fname) {
+
+		errno = EINVAL;
+		return NULL;
+
+	}
+
+	if (smbc_parse_path(context, fname,
+                            workgroup, sizeof(workgroup),
+                            server, sizeof(server),
+                            share, sizeof(share),
+                            path, sizeof(path),
+                            user, sizeof(user),
+                            password, sizeof(password),
+                            NULL, 0)) {
+                errno = EINVAL;
+                return NULL;
+        }
+
+	if (user[0] == (char)0) fstrcpy(user, context->user);
+
+	srv = smbc_server(context, True,
+                          server, share, workgroup, user, password);
+
+	if (!srv) {
+
+		if (errno == EPERM) errno = EACCES;
+		return NULL;  /* smbc_server sets errno */
+    
+	}
+
+	/* Hmmm, the test for a directory is suspect here ... FIXME */
+
+	if (strlen(path) > 0 && path[strlen(path) - 1] == '\\') {
+    
+		fd = -1;
+
+	}
+	else {
+	  
+		file = SMB_MALLOC_P(SMBCFILE);
+
+		if (!file) {
+
+			errno = ENOMEM;
+			return NULL;
+
+		}
+
+		ZERO_STRUCTP(file);
+
+		/*d_printf(">>>open: resolving %s\n", path);*/
+		if (!cli_resolve_path( "", srv->cli, path, &targetcli, targetpath))
+		{
+			d_printf("Could not resolve %s\n", path);
+			SAFE_FREE(file);
+			return NULL;
+		}
+		/*d_printf(">>>open: resolved %s as %s\n", path, targetpath);*/
+		
+		if ((fd = cli_open(targetcli, targetpath, flags,
+                                   context->internal->_share_mode)) < 0) {
+
+			/* Handle the error ... */
+
+			SAFE_FREE(file);
+			errno = smbc_errno(context, targetcli);
+			return NULL;
+
+		}
+
+		/* Fill in file struct */
+
+		file->cli_fd  = fd;
+		file->fname   = SMB_STRDUP(fname);
+		file->srv     = srv;
+		file->offset  = 0;
+		file->file    = True;
+
+		DLIST_ADD(context->internal->_files, file);
+
+                /*
+                 * If the file was opened in O_APPEND mode, all write
+                 * operations should be appended to the file.  To do that,
+                 * though, using this protocol, would require a getattrE()
+                 * call for each and every write, to determine where the end
+                 * of the file is. (There does not appear to be an append flag
+                 * in the protocol.)  Rather than add all of that overhead of
+                 * retrieving the current end-of-file offset prior to each
+                 * write operation, we'll assume that most append operations
+                 * will continuously write, so we'll just set the offset to
+                 * the end of the file now and hope that's adequate.
+                 *
+                 * Note to self: If this proves inadequate, and O_APPEND
+                 * should, in some cases, be forced for each write, add a
+                 * field in the context options structure, for
+                 * "strict_append_mode" which would select between the current
+                 * behavior (if FALSE) or issuing a getattrE() prior to each
+                 * write and forcing the write to the end of the file (if
+                 * TRUE).  Adding that capability will likely require adding
+                 * an "append" flag into the _SMBCFILE structure to track
+                 * whether a file was opened in O_APPEND mode.  -- djl
+                 */
+                if (flags & O_APPEND) {
+                        if (smbc_lseek_ctx(context, file, 0, SEEK_END) < 0) {
+                                (void) smbc_close_ctx(context, file);
+                                errno = ENXIO;
+                                return NULL;
+                        }
+                }
+
+		return file;
+
+	}
+
+	/* Check if opendir needed ... */
+
+	if (fd == -1) {
+		int eno = 0;
+
+		eno = smbc_errno(context, srv->cli);
+		file = (context->opendir)(context, fname);
+		if (!file) errno = eno;
+		return file;
+
+	}
+
+	errno = EINVAL; /* FIXME, correct errno ? */
+	return NULL;
+
+}
+
+/*
+ * Routine to create a file 
+ */
+
+static int creat_bits = O_WRONLY | O_CREAT | O_TRUNC; /* FIXME: Do we need this */
+
+static SMBCFILE *
+smbc_creat_ctx(SMBCCTX *context,
+               const char *path,
+               mode_t mode)
+{
+
+	if (!context || !context->internal ||
+	    !context->internal->_initialized) {
+
+		errno = EINVAL;
+		return NULL;
+
+	}
+
+	return smbc_open_ctx(context, path, creat_bits, mode);
+}
+
+/*
+ * Routine to read() a file ...
+ */
+
+static ssize_t
+smbc_read_ctx(SMBCCTX *context,
+              SMBCFILE *file,
+              void *buf,
+              size_t count)
+{
+	int ret;
+	fstring server, share, user, password;
+	pstring path, targetpath;
+	struct cli_state *targetcli;
+
+        /*
+         * offset:
+         *
+         * Compiler bug (possibly) -- gcc (GCC) 3.3.5 (Debian 1:3.3.5-2) --
+         * appears to pass file->offset (which is type off_t) differently than
+         * a local variable of type off_t.  Using local variable "offset" in
+         * the call to cli_read() instead of file->offset fixes a problem
+         * retrieving data at an offset greater than 4GB.
+         */
+        off_t offset;
+
+	if (!context || !context->internal ||
+	    !context->internal->_initialized) {
+
+		errno = EINVAL;
+		return -1;
+
+	}
+
+	DEBUG(4, ("smbc_read(%p, %d)\n", file, (int)count));
+
+	if (!file || !DLIST_CONTAINS(context->internal->_files, file)) {
+
+		errno = EBADF;
+		return -1;
+
+	}
+
+	offset = file->offset;
+
+	/* Check that the buffer exists ... */
+
+	if (buf == NULL) {
+
+		errno = EINVAL;
+		return -1;
+
+	}
+
+	/*d_printf(">>>read: parsing %s\n", file->fname);*/
+	if (smbc_parse_path(context, file->fname,
+                            NULL, 0,
+                            server, sizeof(server),
+                            share, sizeof(share),
+                            path, sizeof(path),
+                            user, sizeof(user),
+                            password, sizeof(password),
+                            NULL, 0)) {
+                errno = EINVAL;
+                return -1;
+        }
+	
+	/*d_printf(">>>read: resolving %s\n", path);*/
+	if (!cli_resolve_path("", file->srv->cli, path,
+                              &targetcli, targetpath))
+	{
+		d_printf("Could not resolve %s\n", path);
+		return -1;
+	}
+	/*d_printf(">>>fstat: resolved path as %s\n", targetpath);*/
+	
+	ret = cli_read(targetcli, file->cli_fd, (char *)buf, offset, count);
+
+	if (ret < 0) {
+
+		errno = smbc_errno(context, targetcli);
+		return -1;
+
+	}
+
+	file->offset += ret;
+
+	DEBUG(4, ("  --> %d\n", ret));
+
+	return ret;  /* Success, ret bytes of data ... */
+
+}
+
+/*
+ * Routine to write() a file ...
+ */
+
+static ssize_t
+smbc_write_ctx(SMBCCTX *context,
+               SMBCFILE *file,
+               void *buf,
+               size_t count)
+{
+	int ret;
+        off_t offset;
+	fstring server, share, user, password;
+	pstring path, targetpath;
+	struct cli_state *targetcli;
+
+	/* First check all pointers before dereferencing them */
+	
+	if (!context || !context->internal ||
+	    !context->internal->_initialized) {
+
+		errno = EINVAL;
+		return -1;
+
+	}
+
+	if (!file || !DLIST_CONTAINS(context->internal->_files, file)) {
+
+		errno = EBADF;
+		return -1;
+    
+	}
+
+	/* Check that the buffer exists ... */
+
+	if (buf == NULL) {
+
+		errno = EINVAL;
+		return -1;
+
+	}
+
+        offset = file->offset; /* See "offset" comment in smbc_read_ctx() */
+
+	/*d_printf(">>>write: parsing %s\n", file->fname);*/
+	if (smbc_parse_path(context, file->fname,
+                            NULL, 0,
+                            server, sizeof(server),
+                            share, sizeof(share),
+                            path, sizeof(path),
+                            user, sizeof(user),
+                            password, sizeof(password),
+                            NULL, 0)) {
+                errno = EINVAL;
+                return -1;
+        }
+	
+	/*d_printf(">>>write: resolving %s\n", path);*/
+	if (!cli_resolve_path("", file->srv->cli, path,
+                              &targetcli, targetpath))
+	{
+		d_printf("Could not resolve %s\n", path);
+		return -1;
+	}
+	/*d_printf(">>>write: resolved path as %s\n", targetpath);*/
+
+
+	ret = cli_write(targetcli, file->cli_fd, 0, (char *)buf, offset, count);
+
+	if (ret <= 0) {
+
+		errno = smbc_errno(context, targetcli);
+		return -1;
+
+	}
+
+	file->offset += ret;
+
+	return ret;  /* Success, 0 bytes of data ... */
+}
+ 
+/*
+ * Routine to close() a file ...
+ */
+
+static int
+smbc_close_ctx(SMBCCTX *context,
+               SMBCFILE *file)
+{
+        SMBCSRV *srv; 
+	fstring server, share, user, password;
+	pstring path, targetpath;
+	struct cli_state *targetcli;
+
+	if (!context || !context->internal ||
+	    !context->internal->_initialized) {
+
+		errno = EINVAL;
+		return -1;
+
+	}
+
+	if (!file || !DLIST_CONTAINS(context->internal->_files, file)) {
+   
+		errno = EBADF;
+		return -1;
+
+	}
+
+	/* IS a dir ... */
+	if (!file->file) {
+		
+		return (context->closedir)(context, file);
+
+	}
+
+	/*d_printf(">>>close: parsing %s\n", file->fname);*/
+	if (smbc_parse_path(context, file->fname,
+                            NULL, 0,
+                            server, sizeof(server),
+                            share, sizeof(share),
+                            path, sizeof(path),
+                            user, sizeof(user),
+                            password, sizeof(password),
+                            NULL, 0)) {
+                errno = EINVAL;
+                return -1;
+        }
+	
+	/*d_printf(">>>close: resolving %s\n", path);*/
+	if (!cli_resolve_path("", file->srv->cli, path,
+                              &targetcli, targetpath))
+	{
+		d_printf("Could not resolve %s\n", path);
+		return -1;
+	}
+	/*d_printf(">>>close: resolved path as %s\n", targetpath);*/
+
+	if (!cli_close(targetcli, file->cli_fd)) {
+
+		DEBUG(3, ("cli_close failed on %s. purging server.\n", 
+			  file->fname));
+		/* Deallocate slot and remove the server 
+		 * from the server cache if unused */
+		errno = smbc_errno(context, targetcli);
+		srv = file->srv;
+		DLIST_REMOVE(context->internal->_files, file);
+		SAFE_FREE(file->fname);
+		SAFE_FREE(file);
+		(context->callbacks.remove_unused_server_fn)(context, srv);
+
+		return -1;
+
+	}
+
+	DLIST_REMOVE(context->internal->_files, file);
+	SAFE_FREE(file->fname);
+	SAFE_FREE(file);
+
+	return 0;
+}
+
+/*
+ * Get info from an SMB server on a file. Use a qpathinfo call first
+ * and if that fails, use getatr, as Win95 sometimes refuses qpathinfo
+ */
+static BOOL
+smbc_getatr(SMBCCTX * context,
+            SMBCSRV *srv,
+            char *path, 
+            uint16 *mode,
+            SMB_OFF_T *size, 
+            struct timespec *create_time_ts,
+            struct timespec *access_time_ts,
+            struct timespec *write_time_ts,
+            struct timespec *change_time_ts,
+            SMB_INO_T *ino)
+{
+	pstring fixedpath;
+	pstring targetpath;
+	struct cli_state *targetcli;
+	time_t write_time;
+
+	if (!context || !context->internal ||
+	    !context->internal->_initialized) {
+ 
+		errno = EINVAL;
+ 		return -1;
+ 
+ 	}
+
+	/* path fixup for . and .. */
+	if (strequal(path, ".") || strequal(path, ".."))
+		pstrcpy(fixedpath, "\\");
+	else
+	{
+		pstrcpy(fixedpath, path);
+		trim_string(fixedpath, NULL, "\\..");
+		trim_string(fixedpath, NULL, "\\.");
+	}
+	DEBUG(4,("smbc_getatr: sending qpathinfo\n"));
+  
+	if (!cli_resolve_path( "", srv->cli, fixedpath, &targetcli, targetpath))
+	{
+		d_printf("Couldn't resolve %s\n", path);
+		return False;
+	}
+	
+	if (!srv->no_pathinfo2 &&
+            cli_qpathinfo2(targetcli, targetpath,
+                           create_time_ts,
+                           access_time_ts,
+                           write_time_ts,
+                           change_time_ts,
+                           size, mode, ino)) {
+            return True;
+        }
+
+	/* if this is NT then don't bother with the getatr */
+	if (targetcli->capabilities & CAP_NT_SMBS) {
+                errno = EPERM;
+                return False;
+        }
+
+	if (cli_getatr(targetcli, targetpath, mode, size, &write_time)) {
+
+                struct timespec w_time_ts;
+
+                w_time_ts = convert_time_t_to_timespec(write_time);
+
+                if (write_time_ts != NULL) {
+			*write_time_ts = w_time_ts;
+                }
+
+                if (create_time_ts != NULL) {
+                        *create_time_ts = w_time_ts;
+                }
+                
+                if (access_time_ts != NULL) {
+                        *access_time_ts = w_time_ts;
+                }
+                
+                if (change_time_ts != NULL) {
+                        *change_time_ts = w_time_ts;
+                }
+
+		srv->no_pathinfo2 = True;
+		return True;
+	}
+
+        errno = EPERM;
+	return False;
+
+}
+
+/*
+ * Set file info on an SMB server.  Use setpathinfo call first.  If that
+ * fails, use setattrE..
+ *
+ * Access and modification time parameters are always used and must be
+ * provided.  Create time, if zero, will be determined from the actual create
+ * time of the file.  If non-zero, the create time will be set as well.
+ *
+ * "mode" (attributes) parameter may be set to -1 if it is not to be set.
+ */
+static BOOL
+smbc_setatr(SMBCCTX * context, SMBCSRV *srv, char *path, 
+            time_t create_time,
+            time_t access_time,
+            time_t write_time,
+            time_t change_time,
+            uint16 mode)
+{
+        int fd;
+        int ret;
+
+        /*
+         * First, try setpathinfo (if qpathinfo succeeded), for it is the
+         * modern function for "new code" to be using, and it works given a
+         * filename rather than requiring that the file be opened to have its
+         * attributes manipulated.
+         */
+        if (srv->no_pathinfo ||
+            ! cli_setpathinfo(srv->cli, path,
+                              create_time,
+                              access_time,
+                              write_time,
+                              change_time,
+                              mode)) {
+
+                /*
+                 * setpathinfo is not supported; go to plan B. 
+                 *
+                 * cli_setatr() does not work on win98, and it also doesn't
+                 * support setting the access time (only the modification
+                 * time), so in all cases, we open the specified file and use
+                 * cli_setattrE() which should work on all OS versions, and
+                 * supports both times.
+                 */
+
+                /* Don't try {q,set}pathinfo() again, with this server */
+                srv->no_pathinfo = True;
+
+                /* Open the file */
+                if ((fd = cli_open(srv->cli, path, O_RDWR, DENY_NONE)) < 0) {
+
+                        errno = smbc_errno(context, srv->cli);
+                        return -1;
+                }
+
+                /* Set the new attributes */
+                ret = cli_setattrE(srv->cli, fd,
+                                   change_time,
+                                   access_time,
+                                   write_time);
+
+                /* Close the file */
+                cli_close(srv->cli, fd);
+
+                /*
+                 * Unfortunately, setattrE() doesn't have a provision for
+                 * setting the access mode (attributes).  We'll have to try
+                 * cli_setatr() for that, and with only this parameter, it
+                 * seems to work on win98.
+                 */
+                if (ret && mode != (uint16) -1) {
+                        ret = cli_setatr(srv->cli, path, mode, 0);
+                }
+
+                if (! ret) {
+                        errno = smbc_errno(context, srv->cli);
+                        return False;
+                }
+        }
+
+        return True;
+}
+
+ /*
+  * Routine to unlink() a file
+  */
+
+static int
+smbc_unlink_ctx(SMBCCTX *context,
+                const char *fname)
+{
+	fstring server, share, user, password, workgroup;
+	pstring path, targetpath;
+	struct cli_state *targetcli;
+	SMBCSRV *srv = NULL;
+
+	if (!context || !context->internal ||
+	    !context->internal->_initialized) {
+
+		errno = EINVAL;  /* Best I can think of ... */
+		return -1;
+
+	}
+
+	if (!fname) {
+
+		errno = EINVAL;
+		return -1;
+
+	}
+
+	if (smbc_parse_path(context, fname,
+                            workgroup, sizeof(workgroup),
+                            server, sizeof(server),
+                            share, sizeof(share),
+                            path, sizeof(path),
+                            user, sizeof(user),
+                            password, sizeof(password),
+                            NULL, 0)) {
+                errno = EINVAL;
+                return -1;
+        }
+
+	if (user[0] == (char)0) fstrcpy(user, context->user);
+
+	srv = smbc_server(context, True,
+                          server, share, workgroup, user, password);
+
+	if (!srv) {
+
+		return -1;  /* smbc_server sets errno */
+
+	}
+
+	/*d_printf(">>>unlink: resolving %s\n", path);*/
+	if (!cli_resolve_path( "", srv->cli, path, &targetcli, targetpath))
+	{
+		d_printf("Could not resolve %s\n", path);
+		return -1;
+	}
+	/*d_printf(">>>unlink: resolved path as %s\n", targetpath);*/
+
+	if (!cli_unlink(targetcli, targetpath)) {
+
+		errno = smbc_errno(context, targetcli);
+
+		if (errno == EACCES) { /* Check if the file is a directory */
+
+			int saverr = errno;
+			SMB_OFF_T size = 0;
+			uint16 mode = 0;
+			struct timespec write_time_ts;
+                        struct timespec access_time_ts;
+                        struct timespec change_time_ts;
+			SMB_INO_T ino = 0;
+
+			if (!smbc_getatr(context, srv, path, &mode, &size,
+					 NULL,
+                                         &access_time_ts,
+                                         &write_time_ts,
+                                         &change_time_ts,
+                                         &ino)) {
+
+				/* Hmmm, bad error ... What? */
+
+				errno = smbc_errno(context, targetcli);
+				return -1;
+
+			}
+			else {
+
+				if (IS_DOS_DIR(mode))
+					errno = EISDIR;
+				else
+					errno = saverr;  /* Restore this */
+
+			}
+		}
+
+		return -1;
+
+	}
+
+	return 0;  /* Success ... */
+
+}
+
+/*
+ * Routine to rename() a file
+ */
+
+static int
+smbc_rename_ctx(SMBCCTX *ocontext,
+                const char *oname, 
+                SMBCCTX *ncontext,
+                const char *nname)
+{
+	fstring server1;
+        fstring share1;
+        fstring server2;
+        fstring share2;
+        fstring user1;
+        fstring user2;
+        fstring password1;
+        fstring password2;
+        fstring workgroup;
+	pstring path1;
+        pstring path2;
+        pstring targetpath1;
+        pstring targetpath2;
+	struct cli_state *targetcli1;
+        struct cli_state *targetcli2;
+	SMBCSRV *srv = NULL;
+
+	if (!ocontext || !ncontext || 
+	    !ocontext->internal || !ncontext->internal ||
+	    !ocontext->internal->_initialized || 
+	    !ncontext->internal->_initialized) {
+
+		errno = EINVAL;  /* Best I can think of ... */
+		return -1;
+
+	}
+	
+	if (!oname || !nname) {
+
+		errno = EINVAL;
+		return -1;
+
+	}
+	
+	DEBUG(4, ("smbc_rename(%s,%s)\n", oname, nname));
+
+	smbc_parse_path(ocontext, oname,
+                        workgroup, sizeof(workgroup),
+                        server1, sizeof(server1),
+                        share1, sizeof(share1),
+                        path1, sizeof(path1),
+                        user1, sizeof(user1),
+                        password1, sizeof(password1),
+                        NULL, 0);
+
+	if (user1[0] == (char)0) fstrcpy(user1, ocontext->user);
+
+	smbc_parse_path(ncontext, nname,
+                        NULL, 0,
+                        server2, sizeof(server2),
+                        share2, sizeof(share2),
+                        path2, sizeof(path2),
+                        user2, sizeof(user2),
+                        password2, sizeof(password2),
+                        NULL, 0);
+
+	if (user2[0] == (char)0) fstrcpy(user2, ncontext->user);
+
+	if (strcmp(server1, server2) || strcmp(share1, share2) ||
+	    strcmp(user1, user2)) {
+
+		/* Can't rename across file systems, or users?? */
+
+		errno = EXDEV;
+		return -1;
+
+	}
+
+	srv = smbc_server(ocontext, True,
+                          server1, share1, workgroup, user1, password1);
+	if (!srv) {
+
+		return -1;
+
+	}
+
+	/*d_printf(">>>rename: resolving %s\n", path1);*/
+	if (!cli_resolve_path( "", srv->cli, path1, &targetcli1, targetpath1))
+	{
+		d_printf("Could not resolve %s\n", path1);
+		return -1;
+	}
+	/*d_printf(">>>rename: resolved path as %s\n", targetpath1);*/
+	/*d_printf(">>>rename: resolving %s\n", path2);*/
+	if (!cli_resolve_path( "", srv->cli, path2, &targetcli2, targetpath2))
+	{
+		d_printf("Could not resolve %s\n", path2);
+		return -1;
+	}
+	/*d_printf(">>>rename: resolved path as %s\n", targetpath2);*/
+	
+	if (strcmp(targetcli1->desthost, targetcli2->desthost) ||
+            strcmp(targetcli1->share, targetcli2->share))
+	{
+		/* can't rename across file systems */
+		
+		errno = EXDEV;
+		return -1;
+	}
+
+	if (!cli_rename(targetcli1, targetpath1, targetpath2)) {
+		int eno = smbc_errno(ocontext, targetcli1);
+
+		if (eno != EEXIST ||
+		    !cli_unlink(targetcli1, targetpath2) ||
+		    !cli_rename(targetcli1, targetpath1, targetpath2)) {
+
+			errno = eno;
+			return -1;
+
+		}
+	}
+
+	return 0; /* Success */
+
+}
+
+/*
+ * A routine to lseek() a file
+ */
+
+static off_t
+smbc_lseek_ctx(SMBCCTX *context,
+               SMBCFILE *file,
+               off_t offset,
+               int whence)
+{
+	SMB_OFF_T size;
+	fstring server, share, user, password;
+	pstring path, targetpath;
+	struct cli_state *targetcli;
+
+	if (!context || !context->internal ||
+	    !context->internal->_initialized) {
+
+		errno = EINVAL;
+		return -1;
+		
+	}
+
+	if (!file || !DLIST_CONTAINS(context->internal->_files, file)) {
+
+		errno = EBADF;
+		return -1;
+
+	}
+
+	if (!file->file) {
+
+		errno = EINVAL;
+		return -1;      /* Can't lseek a dir ... */
+
+	}
+
+	switch (whence) {
+	case SEEK_SET:
+		file->offset = offset;
+		break;
+
+	case SEEK_CUR:
+		file->offset += offset;
+		break;
+
+	case SEEK_END:
+		/*d_printf(">>>lseek: parsing %s\n", file->fname);*/
+		if (smbc_parse_path(context, file->fname,
+                                    NULL, 0,
+                                    server, sizeof(server),
+                                    share, sizeof(share),
+                                    path, sizeof(path),
+                                    user, sizeof(user),
+                                    password, sizeof(password),
+                                    NULL, 0)) {
+                        
+					errno = EINVAL;
+					return -1;
+			}
+		
+		/*d_printf(">>>lseek: resolving %s\n", path);*/
+		if (!cli_resolve_path("", file->srv->cli, path,
+                                      &targetcli, targetpath))
+		{
+			d_printf("Could not resolve %s\n", path);
+			return -1;
+		}
+		/*d_printf(">>>lseek: resolved path as %s\n", targetpath);*/
+		
+		if (!cli_qfileinfo(targetcli, file->cli_fd, NULL,
+                                   &size, NULL, NULL, NULL, NULL, NULL)) 
+		{
+		    SMB_OFF_T b_size = size;
+			if (!cli_getattrE(targetcli, file->cli_fd,
+                                          NULL, &b_size, NULL, NULL, NULL)) 
+		    {
+			errno = EINVAL;
+			return -1;
+		    } else
+			size = b_size;
+		}
+		file->offset = size + offset;
+		break;
+
+	default:
+		errno = EINVAL;
+		break;
+
+	}
+
+	return file->offset;
+
+}
+
+/* 
+ * Generate an inode number from file name for those things that need it
+ */
+
+static ino_t
+smbc_inode(SMBCCTX *context,
+           const char *name)
+{
+
+	if (!context || !context->internal ||
+	    !context->internal->_initialized) {
+
+		errno = EINVAL;
+		return -1;
+
+	}
+
+	if (!*name) return 2; /* FIXME, why 2 ??? */
+	return (ino_t)str_checksum(name);
+
+}
+
+/*
+ * Routine to put basic stat info into a stat structure ... Used by stat and
+ * fstat below.
+ */
+
+static int
+smbc_setup_stat(SMBCCTX *context,
+                struct stat *st,
+                char *fname,
+                SMB_OFF_T size,
+                int mode)
+{
+	
+	st->st_mode = 0;
+
+	if (IS_DOS_DIR(mode)) {
+		st->st_mode = SMBC_DIR_MODE;
+	} else {
+		st->st_mode = SMBC_FILE_MODE;
+	}
+
+	if (IS_DOS_ARCHIVE(mode)) st->st_mode |= S_IXUSR;
+	if (IS_DOS_SYSTEM(mode)) st->st_mode |= S_IXGRP;
+	if (IS_DOS_HIDDEN(mode)) st->st_mode |= S_IXOTH;
+	if (!IS_DOS_READONLY(mode)) st->st_mode |= S_IWUSR;
+
+	st->st_size = size;
+#ifdef HAVE_STAT_ST_BLKSIZE
+	st->st_blksize = 512;
+#endif
+#ifdef HAVE_STAT_ST_BLOCKS
+	st->st_blocks = (size+511)/512;
+#endif
+	st->st_uid = getuid();
+	st->st_gid = getgid();
+
+	if (IS_DOS_DIR(mode)) {
+		st->st_nlink = 2;
+	} else {
+		st->st_nlink = 1;
+	}
+
+	if (st->st_ino == 0) {
+		st->st_ino = smbc_inode(context, fname);
+	}
+	
+	return True;  /* FIXME: Is this needed ? */
+
+}
+
+/*
+ * Routine to stat a file given a name
+ */
+
+static int
+smbc_stat_ctx(SMBCCTX *context,
+              const char *fname,
+              struct stat *st)
+{
+	SMBCSRV *srv;
+	fstring server;
+        fstring share;
+        fstring user;
+        fstring password;
+        fstring workgroup;
+	pstring path;
+	struct timespec write_time_ts;
+        struct timespec access_time_ts;
+        struct timespec change_time_ts;
+	SMB_OFF_T size = 0;
+	uint16 mode = 0;
+	SMB_INO_T ino = 0;
+
+	if (!context || !context->internal ||
+	    !context->internal->_initialized) {
+
+		errno = EINVAL;  /* Best I can think of ... */
+		return -1;
+    
+	}
+
+	if (!fname) {
+
+		errno = EINVAL;
+		return -1;
+
+	}
+  
+	DEBUG(4, ("smbc_stat(%s)\n", fname));
+
+	if (smbc_parse_path(context, fname,
+                            workgroup, sizeof(workgroup),
+                            server, sizeof(server),
+                            share, sizeof(share),
+                            path, sizeof(path),
+                            user, sizeof(user),
+                            password, sizeof(password),
+                            NULL, 0)) {
+                errno = EINVAL;
+                return -1;
+        }
+
+	if (user[0] == (char)0) fstrcpy(user, context->user);
+
+	srv = smbc_server(context, True,
+                          server, share, workgroup, user, password);
+
+	if (!srv) {
+		return -1;  /* errno set by smbc_server */
+	}
+
+	if (!smbc_getatr(context, srv, path, &mode, &size, 
+			 NULL,
+                         &access_time_ts,
+                         &write_time_ts,
+                         &change_time_ts,
+                         &ino)) {
+
+		errno = smbc_errno(context, srv->cli);
+		return -1;
+		
+	}
+
+	st->st_ino = ino;
+
+	smbc_setup_stat(context, st, path, size, mode);
+
+	set_atimespec(st, access_time_ts);
+	set_ctimespec(st, change_time_ts);
+	set_mtimespec(st, write_time_ts);
+	st->st_dev   = srv->dev;
+
+	return 0;
+
+}
+
+/*
+ * Routine to stat a file given an fd
+ */
+
+static int
+smbc_fstat_ctx(SMBCCTX *context,
+               SMBCFILE *file,
+               struct stat *st)
+{
+	struct timespec change_time_ts;
+        struct timespec access_time_ts;
+        struct timespec write_time_ts;
+	SMB_OFF_T size;
+	uint16 mode;
+	fstring server;
+        fstring share;
+        fstring user;
+        fstring password;
+	pstring path;
+        pstring targetpath;
+	struct cli_state *targetcli;
+	SMB_INO_T ino = 0;
+
+	if (!context || !context->internal ||
+	    !context->internal->_initialized) {
+
+		errno = EINVAL;
+		return -1;
+
+	}
+
+	if (!file || !DLIST_CONTAINS(context->internal->_files, file)) {
+
+		errno = EBADF;
+		return -1;
+
+	}
+
+	if (!file->file) {
+
+		return (context->fstatdir)(context, file, st);
+
+	}
+
+	/*d_printf(">>>fstat: parsing %s\n", file->fname);*/
+	if (smbc_parse_path(context, file->fname,
+                            NULL, 0,
+                            server, sizeof(server),
+                            share, sizeof(share),
+                            path, sizeof(path),
+                            user, sizeof(user),
+                            password, sizeof(password),
+                            NULL, 0)) {
+                errno = EINVAL;
+                return -1;
+        }
+	
+	/*d_printf(">>>fstat: resolving %s\n", path);*/
+	if (!cli_resolve_path("", file->srv->cli, path,
+                              &targetcli, targetpath))
+	{
+		d_printf("Could not resolve %s\n", path);
+		return -1;
+	}
+	/*d_printf(">>>fstat: resolved path as %s\n", targetpath);*/
+
+	if (!cli_qfileinfo(targetcli, file->cli_fd, &mode, &size,
+                           NULL,
+                           &access_time_ts,
+                           &write_time_ts,
+                           &change_time_ts,
+                           &ino)) {
+
+		time_t change_time, access_time, write_time;
+
+		if (!cli_getattrE(targetcli, file->cli_fd, &mode, &size,
+				&change_time, &access_time, &write_time)) {
+
+			errno = EINVAL;
+			return -1;
+		}
+
+		change_time_ts = convert_time_t_to_timespec(change_time);
+		access_time_ts = convert_time_t_to_timespec(access_time);
+		write_time_ts = convert_time_t_to_timespec(write_time);
+	}
+
+	st->st_ino = ino;
+
+	smbc_setup_stat(context, st, file->fname, size, mode);
+
+	set_atimespec(st, access_time_ts);
+	set_ctimespec(st, change_time_ts);
+	set_mtimespec(st, write_time_ts);
+	st->st_dev = file->srv->dev;
+
+	return 0;
+
+}
+
+/*
+ * Routine to open a directory
+ * We accept the URL syntax explained in smbc_parse_path(), above.
+ */
+
+static void
+smbc_remove_dir(SMBCFILE *dir)
+{
+	struct smbc_dir_list *d,*f;
+
+	d = dir->dir_list;
+	while (d) {
+
+		f = d; d = d->next;
+
+		SAFE_FREE(f->dirent);
+		SAFE_FREE(f);
+
+	}
+
+	dir->dir_list = dir->dir_end = dir->dir_next = NULL;
+
+}
+
+static int
+add_dirent(SMBCFILE *dir,
+           const char *name,
+           const char *comment,
+           uint32 type)
+{
+	struct smbc_dirent *dirent;
+	int size;
+        int name_length = (name == NULL ? 0 : strlen(name));
+        int comment_len = (comment == NULL ? 0 : strlen(comment));
+
+	/*
+	 * Allocate space for the dirent, which must be increased by the 
+	 * size of the name and the comment and 1 each for the null terminator.
+	 */
+
+	size = sizeof(struct smbc_dirent) + name_length + comment_len + 2;
+    
+	dirent = (struct smbc_dirent *)SMB_MALLOC(size);
+
+	if (!dirent) {
+
+		dir->dir_error = ENOMEM;
+		return -1;
+
+	}
+
+	ZERO_STRUCTP(dirent);
+
+	if (dir->dir_list == NULL) {
+
+		dir->dir_list = SMB_MALLOC_P(struct smbc_dir_list);
+		if (!dir->dir_list) {
+
+			SAFE_FREE(dirent);
+			dir->dir_error = ENOMEM;
+			return -1;
+
+		}
+		ZERO_STRUCTP(dir->dir_list);
+
+		dir->dir_end = dir->dir_next = dir->dir_list;
+	}
+	else {
+
+		dir->dir_end->next = SMB_MALLOC_P(struct smbc_dir_list);
+		
+		if (!dir->dir_end->next) {
+			
+			SAFE_FREE(dirent);
+			dir->dir_error = ENOMEM;
+			return -1;
+
+		}
+		ZERO_STRUCTP(dir->dir_end->next);
+
+		dir->dir_end = dir->dir_end->next;
+	}
+
+	dir->dir_end->next = NULL;
+	dir->dir_end->dirent = dirent;
+	
+	dirent->smbc_type = type;
+	dirent->namelen = name_length;
+	dirent->commentlen = comment_len;
+	dirent->dirlen = size;
+  
+        /*
+         * dirent->namelen + 1 includes the null (no null termination needed)
+         * Ditto for dirent->commentlen.
+         * The space for the two null bytes was allocated.
+         */
+	strncpy(dirent->name, (name?name:""), dirent->namelen + 1);
+	dirent->comment = (char *)(&dirent->name + dirent->namelen + 1);
+	strncpy(dirent->comment, (comment?comment:""), dirent->commentlen + 1);
+	
+	return 0;
+
+}
+
+static void
+list_unique_wg_fn(const char *name,
+                  uint32 type,
+                  const char *comment,
+                  void *state)
+{
+	SMBCFILE *dir = (SMBCFILE *)state;
+        struct smbc_dir_list *dir_list;
+        struct smbc_dirent *dirent;
+	int dirent_type;
+        int do_remove = 0;
+
+	dirent_type = dir->dir_type;
+
+	if (add_dirent(dir, name, comment, dirent_type) < 0) {
+
+		/* An error occurred, what do we do? */
+		/* FIXME: Add some code here */
+	}
+
+        /* Point to the one just added */
+        dirent = dir->dir_end->dirent;
+
+        /* See if this was a duplicate */
+        for (dir_list = dir->dir_list;
+             dir_list != dir->dir_end;
+             dir_list = dir_list->next) {
+                if (! do_remove &&
+                    strcmp(dir_list->dirent->name, dirent->name) == 0) {
+                        /* Duplicate.  End end of list need to be removed. */
+                        do_remove = 1;
+                }
+
+                if (do_remove && dir_list->next == dir->dir_end) {
+                        /* Found the end of the list.  Remove it. */
+                        dir->dir_end = dir_list;
+                        free(dir_list->next);
+                        free(dirent);
+                        dir_list->next = NULL;
+                        break;
+                }
+        }
+}
+
+static void
+list_fn(const char *name,
+        uint32 type,
+        const char *comment,
+        void *state)
+{
+	SMBCFILE *dir = (SMBCFILE *)state;
+	int dirent_type;
+
+	/*
+         * We need to process the type a little ...
+         *
+         * Disk share     = 0x00000000
+         * Print share    = 0x00000001
+         * Comms share    = 0x00000002 (obsolete?)
+         * IPC$ share     = 0x00000003 
+         *
+         * administrative shares:
+         * ADMIN$, IPC$, C$, D$, E$ ...  are type |= 0x80000000
+         */
+        
+	if (dir->dir_type == SMBC_FILE_SHARE) {
+		
+		switch (type) {
+                case 0 | 0x80000000:
+		case 0:
+			dirent_type = SMBC_FILE_SHARE;
+			break;
+
+		case 1:
+			dirent_type = SMBC_PRINTER_SHARE;
+			break;
+
+		case 2:
+			dirent_type = SMBC_COMMS_SHARE;
+			break;
+
+                case 3 | 0x80000000:
+		case 3:
+			dirent_type = SMBC_IPC_SHARE;
+			break;
+
+		default:
+			dirent_type = SMBC_FILE_SHARE; /* FIXME, error? */
+			break;
+		}
+	}
+	else {
+                dirent_type = dir->dir_type;
+        }
+
+	if (add_dirent(dir, name, comment, dirent_type) < 0) {
+
+		/* An error occurred, what do we do? */
+		/* FIXME: Add some code here */
+
+	}
+}
+
+static void
+dir_list_fn(const char *mnt,
+            file_info *finfo,
+            const char *mask,
+            void *state)
+{
+
+	if (add_dirent((SMBCFILE *)state, finfo->name, "", 
+		       (finfo->mode&aDIR?SMBC_DIR:SMBC_FILE)) < 0) {
+
+		/* Handle an error ... */
+
+		/* FIXME: Add some code ... */
+
+	} 
+
+}
+
+static int
+net_share_enum_rpc(struct cli_state *cli,
+                   void (*fn)(const char *name,
+                              uint32 type,
+                              const char *comment,
+                              void *state),
+                   void *state)
+{
+        int i;
+	WERROR result;
+	ENUM_HND enum_hnd;
+        uint32 info_level = 1;
+	uint32 preferred_len = 0xffffffff;
+        uint32 type;
+	SRV_SHARE_INFO_CTR ctr;
+	fstring name = "";
+        fstring comment = "";
+        void *mem_ctx;
+	struct rpc_pipe_client *pipe_hnd;
+        NTSTATUS nt_status;
+
+        /* Open the server service pipe */
+        pipe_hnd = cli_rpc_pipe_open_noauth(cli, PI_SRVSVC, &nt_status);
+        if (!pipe_hnd) {
+                DEBUG(1, ("net_share_enum_rpc pipe open fail!\n"));
+                return -1;
+        }
+
+        /* Allocate a context for parsing and for the entries in "ctr" */
+        mem_ctx = talloc_init("libsmbclient: net_share_enum_rpc");
+        if (mem_ctx == NULL) {
+                DEBUG(0, ("out of memory for net_share_enum_rpc!\n"));
+                cli_rpc_pipe_close(pipe_hnd);
+                return -1; 
+        }
+
+        /* Issue the NetShareEnum RPC call and retrieve the response */
+	init_enum_hnd(&enum_hnd, 0);
+	result = rpccli_srvsvc_net_share_enum(pipe_hnd,
+                                              mem_ctx,
+                                              info_level,
+                                              &ctr,
+                                              preferred_len,
+                                              &enum_hnd);
+
+        /* Was it successful? */
+	if (!W_ERROR_IS_OK(result) || ctr.num_entries == 0) {
+                /*  Nope.  Go clean up. */
+		goto done;
+        }
+
+        /* For each returned entry... */
+        for (i = 0; i < ctr.num_entries; i++) {
+
+                /* pull out the share name */
+                rpcstr_pull_unistr2_fstring(
+                        name, &ctr.share.info1[i].info_1_str.uni_netname);
+
+                /* pull out the share's comment */
+                rpcstr_pull_unistr2_fstring(
+                        comment, &ctr.share.info1[i].info_1_str.uni_remark);
+
+                /* Get the type value */
+                type = ctr.share.info1[i].info_1.type;
+
+                /* Add this share to the list */
+                (*fn)(name, type, comment, state);
+        }
+
+done:
+        /* Close the server service pipe */
+        cli_rpc_pipe_close(pipe_hnd);
+
+        /* Free all memory which was allocated for this request */
+        TALLOC_FREE(mem_ctx);
+
+        /* Tell 'em if it worked */
+        return W_ERROR_IS_OK(result) ? 0 : -1;
+}
+
+
+
+static SMBCFILE *
+smbc_opendir_ctx(SMBCCTX *context,
+                 const char *fname)
+{
+        int saved_errno;
+	fstring server, share, user, password, options;
+	pstring workgroup;
+	pstring path;
+        uint16 mode;
+        char *p;
+	SMBCSRV *srv  = NULL;
+	SMBCFILE *dir = NULL;
+        struct _smbc_callbacks *cb;
+	struct in_addr rem_ip;
+
+	if (!context || !context->internal ||
+	    !context->internal->_initialized) {
+	        DEBUG(4, ("no valid context\n"));
+		errno = EINVAL + 8192;
+		return NULL;
+
+	}
+
+	if (!fname) {
+		DEBUG(4, ("no valid fname\n"));
+		errno = EINVAL + 8193;
+		return NULL;
+	}
+
+	if (smbc_parse_path(context, fname,
+                            workgroup, sizeof(workgroup),
+                            server, sizeof(server),
+                            share, sizeof(share),
+                            path, sizeof(path),
+                            user, sizeof(user),
+                            password, sizeof(password),
+                            options, sizeof(options))) {
+	        DEBUG(4, ("no valid path\n"));
+		errno = EINVAL + 8194;
+		return NULL;
+	}
+
+	DEBUG(4, ("parsed path: fname='%s' server='%s' share='%s' "
+                  "path='%s' options='%s'\n",
+                  fname, server, share, path, options));
+
+        /* Ensure the options are valid */
+        if (smbc_check_options(server, share, path, options)) {
+                DEBUG(4, ("unacceptable options (%s)\n", options));
+                errno = EINVAL + 8195;
+                return NULL;
+        }
+
+	if (user[0] == (char)0) fstrcpy(user, context->user);
+
+	dir = SMB_MALLOC_P(SMBCFILE);
+
+	if (!dir) {
+
+		errno = ENOMEM;
+		return NULL;
+
+	}
+
+	ZERO_STRUCTP(dir);
+
+	dir->cli_fd   = 0;
+	dir->fname    = SMB_STRDUP(fname);
+	dir->srv      = NULL;
+	dir->offset   = 0;
+	dir->file     = False;
+	dir->dir_list = dir->dir_next = dir->dir_end = NULL;
+
+	if (server[0] == (char)0) {
+
+                int i;
+                int count;
+                int max_lmb_count;
+                struct ip_service *ip_list;
+                struct ip_service server_addr;
+                struct user_auth_info u_info;
+                struct cli_state *cli;
+
+		if (share[0] != (char)0 || path[0] != (char)0) {
+
+			errno = EINVAL + 8196;
+			if (dir) {
+				SAFE_FREE(dir->fname);
+				SAFE_FREE(dir);
+			}
+			return NULL;
+		}
+
+                /* Determine how many local master browsers to query */
+                max_lmb_count = (context->options.browse_max_lmb_count == 0
+                                 ? INT_MAX
+                                 : context->options.browse_max_lmb_count);
+
+                pstrcpy(u_info.username, user);
+                pstrcpy(u_info.password, password);
+
+		/*
+                 * We have server and share and path empty but options
+                 * requesting that we scan all master browsers for their list
+                 * of workgroups/domains.  This implies that we must first try
+                 * broadcast queries to find all master browsers, and if that
+                 * doesn't work, then try our other methods which return only
+                 * a single master browser.
+                 */
+
+                ip_list = NULL;
+                if (!name_resolve_bcast(MSBROWSE, 1, &ip_list, &count)) {
+
+                        SAFE_FREE(ip_list);
+
+                        if (!find_master_ip(workgroup, &server_addr.ip)) {
+
+				if (dir) {
+					SAFE_FREE(dir->fname);
+					SAFE_FREE(dir);
+				}
+                                errno = ENOENT;
+                                return NULL;
+                        }
+
+                        ip_list = &server_addr;
+                        count = 1;
+                }
+
+                for (i = 0; i < count && i < max_lmb_count; i++) {
+                        DEBUG(99, ("Found master browser %d of %d: %s\n",
+                                   i+1, MAX(count, max_lmb_count),
+                                   inet_ntoa(ip_list[i].ip)));
+                        
+                        cli = get_ipc_connect_master_ip(&ip_list[i],
+                                                        workgroup, &u_info);
+			/* cli == NULL is the master browser refused to talk or 
+			   could not be found */
+			if ( !cli )
+				continue;
+
+                        fstrcpy(server, cli->desthost);
+                        cli_shutdown(cli);
+
+                        DEBUG(4, ("using workgroup %s %s\n",
+                                  workgroup, server));
+
+                        /*
+                         * For each returned master browser IP address, get a
+                         * connection to IPC$ on the server if we do not
+                         * already have one, and determine the
+                         * workgroups/domains that it knows about.
+                         */
+                
+                        srv = smbc_server(context, True, server, "IPC$",
+                                          workgroup, user, password);
+                        if (!srv) {
+                                continue;
+                        }
+                
+                        dir->srv = srv;
+                        dir->dir_type = SMBC_WORKGROUP;
+
+                        /* Now, list the stuff ... */
+                        
+                        if (!cli_NetServerEnum(srv->cli,
+                                               workgroup,
+                                               SV_TYPE_DOMAIN_ENUM,
+                                               list_unique_wg_fn,
+                                               (void *)dir)) {
+                                continue;
+                        }
+                }
+
+                SAFE_FREE(ip_list);
+        } else { 
+                /*
+                 * Server not an empty string ... Check the rest and see what
+                 * gives
+                 */
+		if (*share == '\0') {
+			if (*path != '\0') {
+
+                                /* Should not have empty share with path */
+				errno = EINVAL + 8197;
+				if (dir) {
+					SAFE_FREE(dir->fname);
+					SAFE_FREE(dir);
+				}
+				return NULL;
+	
+			}
+
+			/*
+                         * We don't know if <server> is really a server name
+                         * or is a workgroup/domain name.  If we already have
+                         * a server structure for it, we'll use it.
+                         * Otherwise, check to see if <server><1D>,
+                         * <server><1B>, or <server><20> translates.  We check
+                         * to see if <server> is an IP address first.
+                         */
+
+                        /*
+                         * See if we have an existing server.  Do not
+                         * establish a connection if one does not already
+                         * exist.
+                         */
+                        srv = smbc_server(context, False, server, "IPC$",
+                                          workgroup, user, password);
+
+                        /*
+                         * If no existing server and not an IP addr, look for
+                         * LMB or DMB
+                         */
+			if (!srv &&
+                            !is_ipaddress(server) &&
+			    (resolve_name(server, &rem_ip, 0x1d) ||   /* LMB */
+                             resolve_name(server, &rem_ip, 0x1b) )) { /* DMB */
+
+				fstring buserver;
+
+				dir->dir_type = SMBC_SERVER;
+
+				/*
+				 * Get the backup list ...
+				 */
+				if (!name_status_find(server, 0, 0,
+                                                      rem_ip, buserver)) {
+
+                                        DEBUG(0, ("Could not get name of "
+                                                  "local/domain master browser "
+                                                  "for server %s\n", server));
+					if (dir) {
+						SAFE_FREE(dir->fname);
+						SAFE_FREE(dir);
+					}
+					errno = EPERM;
+					return NULL;
+
+				}
+
+				/*
+                                 * Get a connection to IPC$ on the server if
+                                 * we do not already have one
+                                 */
+				srv = smbc_server(context, True,
+                                                  buserver, "IPC$",
+                                                  workgroup, user, password);
+				if (!srv) {
+				        DEBUG(0, ("got no contact to IPC$\n"));
+					if (dir) {
+						SAFE_FREE(dir->fname);
+						SAFE_FREE(dir);
+					}
+					return NULL;
+
+				}
+
+				dir->srv = srv;
+
+				/* Now, list the servers ... */
+				if (!cli_NetServerEnum(srv->cli, server,
+                                                       0x0000FFFE, list_fn,
+						       (void *)dir)) {
+
+					if (dir) {
+						SAFE_FREE(dir->fname);
+						SAFE_FREE(dir);
+					}
+					return NULL;
+				}
+			} else if (srv ||
+                                   (resolve_name(server, &rem_ip, 0x20))) {
+                                
+                                /* If we hadn't found the server, get one now */
+                                if (!srv) {
+                                        srv = smbc_server(context, True,
+                                                          server, "IPC$",
+                                                          workgroup,
+                                                          user, password);
+                                }
+
+                                if (!srv) {
+                                        if (dir) {
+                                                SAFE_FREE(dir->fname);
+                                                SAFE_FREE(dir);
+                                        }
+                                        return NULL;
+
+                                }
+
+                                dir->dir_type = SMBC_FILE_SHARE;
+                                dir->srv = srv;
+
+                                /* List the shares ... */
+
+                                if (net_share_enum_rpc(
+                                            srv->cli,
+                                            list_fn,
+                                            (void *) dir) < 0 &&
+                                    cli_RNetShareEnum(
+                                            srv->cli,
+                                            list_fn, 
+                                            (void *)dir) < 0) {
+                                                
+                                        errno = cli_errno(srv->cli);
+                                        if (dir) {
+                                                SAFE_FREE(dir->fname);
+                                                SAFE_FREE(dir);
+                                        }
+                                        return NULL;
+
+                                }
+                        } else {
+                                /* Neither the workgroup nor server exists */
+                                errno = ECONNREFUSED;   
+                                if (dir) {
+                                        SAFE_FREE(dir->fname);
+                                        SAFE_FREE(dir);
+                                }
+                                return NULL;
+			}
+
+		}
+		else {
+                        /*
+                         * The server and share are specified ... work from
+                         * there ...
+                         */
+			pstring targetpath;
+			struct cli_state *targetcli;
+
+			/* We connect to the server and list the directory */
+			dir->dir_type = SMBC_FILE_SHARE;
+
+			srv = smbc_server(context, True, server, share,
+                                          workgroup, user, password);
+
+			if (!srv) {
+
+				if (dir) {
+					SAFE_FREE(dir->fname);
+					SAFE_FREE(dir);
+				}
+				return NULL;
+
+			}
+
+			dir->srv = srv;
+
+			/* Now, list the files ... */
+
+                        p = path + strlen(path);
+			pstrcat(path, "\\*");
+
+			if (!cli_resolve_path("", srv->cli, path,
+                                              &targetcli, targetpath))
+			{
+				d_printf("Could not resolve %s\n", path);
+				if (dir) {
+					SAFE_FREE(dir->fname);
+					SAFE_FREE(dir);
+				}
+				return NULL;
+			}
+			
+			if (cli_list(targetcli, targetpath,
+                                     aDIR | aSYSTEM | aHIDDEN,
+                                     dir_list_fn, (void *)dir) < 0) {
+
+				if (dir) {
+					SAFE_FREE(dir->fname);
+					SAFE_FREE(dir);
+				}
+				saved_errno = smbc_errno(context, targetcli);
+
+                                if (saved_errno == EINVAL) {
+                                    /*
+                                     * See if they asked to opendir something
+                                     * other than a directory.  If so, the
+                                     * converted error value we got would have
+                                     * been EINVAL rather than ENOTDIR.
+                                     */
+                                    *p = '\0'; /* restore original path */
+
+                                    if (smbc_getatr(context, srv, path,
+                                                    &mode, NULL,
+                                                    NULL, NULL, NULL, NULL,
+                                                    NULL) &&
+                                        ! IS_DOS_DIR(mode)) {
+
+                                        /* It is.  Correct the error value */
+                                        saved_errno = ENOTDIR;
+                                    }
+                                }
+
+                                /*
+                                 * If there was an error and the server is no
+                                 * good any more...
+                                 */
+                                cb = &context->callbacks;
+                                if (cli_is_error(targetcli) &&
+                                    (cb->check_server_fn)(context, srv)) {
+
+                                        /* ... then remove it. */
+                                        if ((cb->remove_unused_server_fn)(context,
+                                                                          srv)) { 
+                                                /*
+                                                 * We could not remove the
+                                                 * server completely, remove
+                                                 * it from the cache so we
+                                                 * will not get it again. It
+                                                 * will be removed when the
+                                                 * last file/dir is closed.
+                                                 */
+                                                (cb->remove_cached_srv_fn)(context,
+                                                                           srv);
+                                        }
+                                }
+
+                                errno = saved_errno;
+				return NULL;
+			}
+		}
+
+	}
+
+	DLIST_ADD(context->internal->_files, dir);
+	return dir;
+
+}
+
+/*
+ * Routine to close a directory
+ */
+
+static int
+smbc_closedir_ctx(SMBCCTX *context,
+                  SMBCFILE *dir)
+{
+
+        if (!context || !context->internal ||
+	    !context->internal->_initialized) {
+
+		errno = EINVAL;
+		return -1;
+
+	}
+
+	if (!dir || !DLIST_CONTAINS(context->internal->_files, dir)) {
+
+		errno = EBADF;
+		return -1;
+    
+	}
+
+	smbc_remove_dir(dir); /* Clean it up */
+
+	DLIST_REMOVE(context->internal->_files, dir);
+
+	if (dir) {
+
+		SAFE_FREE(dir->fname);
+		SAFE_FREE(dir);    /* Free the space too */
+	}
+
+	return 0;
+
+}
+
+static void
+smbc_readdir_internal(SMBCCTX * context,
+                      struct smbc_dirent *dest,
+                      struct smbc_dirent *src,
+                      int max_namebuf_len)
+{
+        if (context->options.urlencode_readdir_entries) {
+
+                /* url-encode the name.  get back remaining buffer space */
+                max_namebuf_len =
+                        smbc_urlencode(dest->name, src->name, max_namebuf_len);
+
+                /* We now know the name length */
+                dest->namelen = strlen(dest->name);
+
+                /* Save the pointer to the beginning of the comment */
+                dest->comment = dest->name + dest->namelen + 1;
+
+                /* Copy the comment */
+                strncpy(dest->comment, src->comment, max_namebuf_len - 1);
+                dest->comment[max_namebuf_len - 1] = '\0';
+
+                /* Save other fields */
+                dest->smbc_type = src->smbc_type;
+                dest->commentlen = strlen(dest->comment);
+                dest->dirlen = ((dest->comment + dest->commentlen + 1) -
+                                (char *) dest);
+        } else {
+
+                /* No encoding.  Just copy the entry as is. */
+                memcpy(dest, src, src->dirlen);
+                dest->comment = (char *)(&dest->name + src->namelen + 1);
+        }
+        
+}
+
+/*
+ * Routine to get a directory entry
+ */
+
+struct smbc_dirent *
+smbc_readdir_ctx(SMBCCTX *context,
+                 SMBCFILE *dir)
+{
+        int maxlen;
+	struct smbc_dirent *dirp, *dirent;
+
+	/* Check that all is ok first ... */
+
+	if (!context || !context->internal ||
+	    !context->internal->_initialized) {
+
+		errno = EINVAL;
+                DEBUG(0, ("Invalid context in smbc_readdir_ctx()\n"));
+		return NULL;
+
+	}
+
+	if (!dir || !DLIST_CONTAINS(context->internal->_files, dir)) {
+
+		errno = EBADF;
+                DEBUG(0, ("Invalid dir in smbc_readdir_ctx()\n"));
+		return NULL;
+
+	}
+
+	if (dir->file != False) { /* FIXME, should be dir, perhaps */
+
+		errno = ENOTDIR;
+                DEBUG(0, ("Found file vs directory in smbc_readdir_ctx()\n"));
+		return NULL;
+
+	}
+
+	if (!dir->dir_next) {
+		return NULL;
+        }
+
+        dirent = dir->dir_next->dirent;
+        if (!dirent) {
+
+                errno = ENOENT;
+                return NULL;
+
+        }
+
+        dirp = (struct smbc_dirent *)context->internal->_dirent;
+        maxlen = (sizeof(context->internal->_dirent) -
+                  sizeof(struct smbc_dirent));
+
+        smbc_readdir_internal(context, dirp, dirent, maxlen);
+
+        dir->dir_next = dir->dir_next->next;
+
+        return dirp;
+}
+
+/*
+ * Routine to get directory entries
+ */
+
+static int
+smbc_getdents_ctx(SMBCCTX *context,
+                  SMBCFILE *dir,
+                  struct smbc_dirent *dirp,
+                  int count)
+{
+	int rem = count;
+        int reqd;
+        int maxlen;
+	char *ndir = (char *)dirp;
+	struct smbc_dir_list *dirlist;
+
+	/* Check that all is ok first ... */
+
+	if (!context || !context->internal ||
+	    !context->internal->_initialized) {
+
+		errno = EINVAL;
+		return -1;
+
+	}
+
+	if (!dir || !DLIST_CONTAINS(context->internal->_files, dir)) {
+
+		errno = EBADF;
+		return -1;
+    
+	}
+
+	if (dir->file != False) { /* FIXME, should be dir, perhaps */
+
+		errno = ENOTDIR;
+		return -1;
+
+	}
+
+	/* 
+	 * Now, retrieve the number of entries that will fit in what was passed
+	 * We have to figure out if the info is in the list, or we need to 
+	 * send a request to the server to get the info.
+	 */
+
+	while ((dirlist = dir->dir_next)) {
+		struct smbc_dirent *dirent;
+
+		if (!dirlist->dirent) {
+
+			errno = ENOENT;  /* Bad error */
+			return -1;
+
+		}
+
+                /* Do urlencoding of next entry, if so selected */
+                dirent = (struct smbc_dirent *)context->internal->_dirent;
+                maxlen = (sizeof(context->internal->_dirent) -
+                          sizeof(struct smbc_dirent));
+                smbc_readdir_internal(context, dirent, dirlist->dirent, maxlen);
+
+                reqd = dirent->dirlen;
+
+		if (rem < reqd) {
+
+			if (rem < count) { /* We managed to copy something */
+
+				errno = 0;
+				return count - rem;
+
+			}
+			else { /* Nothing copied ... */
+
+				errno = EINVAL;  /* Not enough space ... */
+				return -1;
+
+			}
+
+		}
+
+		memcpy(ndir, dirent, reqd); /* Copy the data in ... */
+    
+		((struct smbc_dirent *)ndir)->comment = 
+			(char *)(&((struct smbc_dirent *)ndir)->name +
+                                 dirent->namelen +
+                                 1);
+
+		ndir += reqd;
+
+		rem -= reqd;
+
+		dir->dir_next = dirlist = dirlist -> next;
+	}
+
+	if (rem == count)
+		return 0;
+	else 
+		return count - rem;
+
+}
+
+/*
+ * Routine to create a directory ...
+ */
+
+static int
+smbc_mkdir_ctx(SMBCCTX *context,
+               const char *fname,
+               mode_t mode)
+{
+	SMBCSRV *srv;
+	fstring server;
+        fstring share;
+        fstring user;
+        fstring password;
+        fstring workgroup;
+	pstring path, targetpath;
+	struct cli_state *targetcli;
+
+	if (!context || !context->internal || 
+	    !context->internal->_initialized) {
+
+		errno = EINVAL;
+		return -1;
+
+	}
+
+	if (!fname) {
+
+		errno = EINVAL;
+		return -1;
+
+	}
+  
+	DEBUG(4, ("smbc_mkdir(%s)\n", fname));
+
+	if (smbc_parse_path(context, fname,
+                            workgroup, sizeof(workgroup),
+                            server, sizeof(server),
+                            share, sizeof(share),
+                            path, sizeof(path),
+                            user, sizeof(user),
+                            password, sizeof(password),
+                            NULL, 0)) {
+                errno = EINVAL;
+                return -1;
+        }
+
+	if (user[0] == (char)0) fstrcpy(user, context->user);
+
+	srv = smbc_server(context, True,
+                          server, share, workgroup, user, password);
+
+	if (!srv) {
+
+		return -1;  /* errno set by smbc_server */
+
+	}
+
+	/*d_printf(">>>mkdir: resolving %s\n", path);*/
+	if (!cli_resolve_path( "", srv->cli, path, &targetcli, targetpath))
+	{
+		d_printf("Could not resolve %s\n", path);
+		return -1;
+	}
+	/*d_printf(">>>mkdir: resolved path as %s\n", targetpath);*/
+
+	if (!cli_mkdir(targetcli, targetpath)) {
+
+		errno = smbc_errno(context, targetcli);
+		return -1;
+
+	} 
+
+	return 0;
+
+}
+
+/*
+ * Our list function simply checks to see if a directory is not empty
+ */
+
+static int smbc_rmdir_dirempty = True;
+
+static void
+rmdir_list_fn(const char *mnt,
+              file_info *finfo,
+              const char *mask,
+              void *state)
+{
+	if (strncmp(finfo->name, ".", 1) != 0 &&
+            strncmp(finfo->name, "..", 2) != 0) {
+                
+		smbc_rmdir_dirempty = False;
+        }
+}
+
+/*
+ * Routine to remove a directory
+ */
+
+static int
+smbc_rmdir_ctx(SMBCCTX *context,
+               const char *fname)
+{
+	SMBCSRV *srv;
+	fstring server;
+        fstring share;
+        fstring user;
+        fstring password;
+        fstring workgroup;
+	pstring path;
+        pstring targetpath;
+	struct cli_state *targetcli;
+
+	if (!context || !context->internal || 
+	    !context->internal->_initialized) {
+
+		errno = EINVAL;
+		return -1;
+
+	}
+
+	if (!fname) {
+
+		errno = EINVAL;
+		return -1;
+
+	}
+  
+	DEBUG(4, ("smbc_rmdir(%s)\n", fname));
+
+	if (smbc_parse_path(context, fname,
+                            workgroup, sizeof(workgroup),
+                            server, sizeof(server),
+                            share, sizeof(share),
+                            path, sizeof(path),
+                            user, sizeof(user),
+                            password, sizeof(password),
+                            NULL, 0))
+        {
+                errno = EINVAL;
+                return -1;
+        }
+
+	if (user[0] == (char)0) fstrcpy(user, context->user);
+
+	srv = smbc_server(context, True,
+                          server, share, workgroup, user, password);
+
+	if (!srv) {
+
+		return -1;  /* errno set by smbc_server */
+
+	}
+
+	/*d_printf(">>>rmdir: resolving %s\n", path);*/
+	if (!cli_resolve_path( "", srv->cli, path, &targetcli, targetpath))
+	{
+		d_printf("Could not resolve %s\n", path);
+		return -1;
+	}
+	/*d_printf(">>>rmdir: resolved path as %s\n", targetpath);*/
+
+
+	if (!cli_rmdir(targetcli, targetpath)) {
+
+		errno = smbc_errno(context, targetcli);
+
+		if (errno == EACCES) {  /* Check if the dir empty or not */
+
+                        /* Local storage to avoid buffer overflows */
+			pstring lpath; 
+
+			smbc_rmdir_dirempty = True;  /* Make this so ... */
+
+			pstrcpy(lpath, targetpath);
+			pstrcat(lpath, "\\*");
+
+			if (cli_list(targetcli, lpath,
+                                     aDIR | aSYSTEM | aHIDDEN,
+                                     rmdir_list_fn, NULL) < 0) {
+
+				/* Fix errno to ignore latest error ... */
+				DEBUG(5, ("smbc_rmdir: "
+                                          "cli_list returned an error: %d\n", 
+					  smbc_errno(context, targetcli)));
+				errno = EACCES;
+
+			}
+
+			if (smbc_rmdir_dirempty)
+				errno = EACCES;
+			else
+				errno = ENOTEMPTY;
+
+		}
+
+		return -1;
+
+	} 
+
+	return 0;
+
+}
+
+/*
+ * Routine to return the current directory position
+ */
+
+static off_t
+smbc_telldir_ctx(SMBCCTX *context,
+                 SMBCFILE *dir)
+{
+	if (!context || !context->internal ||
+	    !context->internal->_initialized) {
+
+		errno = EINVAL;
+		return -1;
+
+	}
+
+	if (!dir || !DLIST_CONTAINS(context->internal->_files, dir)) {
+
+		errno = EBADF;
+		return -1;
+
+	}
+
+	if (dir->file != False) { /* FIXME, should be dir, perhaps */
+
+		errno = ENOTDIR;
+		return -1;
+
+	}
+
+        /* See if we're already at the end. */
+        if (dir->dir_next == NULL) {
+                /* We are. */
+                return -1;
+        }
+
+	/*
+	 * We return the pointer here as the offset
+	 */
+        return (off_t)(long)dir->dir_next->dirent;
+}
+
+/*
+ * A routine to run down the list and see if the entry is OK
+ */
+
+struct smbc_dir_list *
+smbc_check_dir_ent(struct smbc_dir_list *list, 
+                   struct smbc_dirent *dirent)
+{
+
+	/* Run down the list looking for what we want */
+
+	if (dirent) {
+
+		struct smbc_dir_list *tmp = list;
+
+		while (tmp) {
+
+			if (tmp->dirent == dirent)
+				return tmp;
+
+			tmp = tmp->next;
+
+		}
+
+	}
+
+	return NULL;  /* Not found, or an error */
+
+}
+
+
+/*
+ * Routine to seek on a directory
+ */
+
+static int
+smbc_lseekdir_ctx(SMBCCTX *context,
+                  SMBCFILE *dir,
+                  off_t offset)
+{
+	long int l_offset = offset;  /* Handle problems of size */
+	struct smbc_dirent *dirent = (struct smbc_dirent *)l_offset;
+	struct smbc_dir_list *list_ent = (struct smbc_dir_list *)NULL;
+
+	if (!context || !context->internal ||
+	    !context->internal->_initialized) {
+
+		errno = EINVAL;
+		return -1;
+
+	}
+
+	if (dir->file != False) { /* FIXME, should be dir, perhaps */
+
+		errno = ENOTDIR;
+		return -1;
+
+	}
+
+	/* Now, check what we were passed and see if it is OK ... */
+
+	if (dirent == NULL) {  /* Seek to the begining of the list */
+
+		dir->dir_next = dir->dir_list;
+		return 0;
+
+	}
+
+        if (offset == -1) {     /* Seek to the end of the list */
+                dir->dir_next = NULL;
+                return 0;
+        }
+
+	/* Now, run down the list and make sure that the entry is OK       */
+	/* This may need to be changed if we change the format of the list */
+
+	if ((list_ent = smbc_check_dir_ent(dir->dir_list, dirent)) == NULL) {
+
+		errno = EINVAL;   /* Bad entry */
+		return -1;
+
+	}
+
+	dir->dir_next = list_ent;
+
+	return 0; 
+
+}
+
+/*
+ * Routine to fstat a dir
+ */
+
+static int
+smbc_fstatdir_ctx(SMBCCTX *context,
+                  SMBCFILE *dir,
+                  struct stat *st)
+{
+
+	if (!context || !context->internal || 
+	    !context->internal->_initialized) {
+
+		errno = EINVAL;
+		return -1;
+
+	}
+
+	/* No code yet ... */
+
+	return 0;
+
+}
+
+static int
+smbc_chmod_ctx(SMBCCTX *context,
+               const char *fname,
+               mode_t newmode)
+{
+        SMBCSRV *srv;
+	fstring server;
+        fstring share;
+        fstring user;
+        fstring password;
+        fstring workgroup;
+	pstring path;
+	uint16 mode;
+
+	if (!context || !context->internal ||
+	    !context->internal->_initialized) {
+
+		errno = EINVAL;  /* Best I can think of ... */
+		return -1;
+    
+	}
+
+	if (!fname) {
+
+		errno = EINVAL;
+		return -1;
+
+	}
+  
+	DEBUG(4, ("smbc_chmod(%s, 0%3o)\n", fname, newmode));
+
+	if (smbc_parse_path(context, fname,
+                            workgroup, sizeof(workgroup),
+                            server, sizeof(server),
+                            share, sizeof(share),
+                            path, sizeof(path),
+                            user, sizeof(user),
+                            password, sizeof(password),
+                            NULL, 0)) {
+                errno = EINVAL;
+                return -1;
+        }
+
+	if (user[0] == (char)0) fstrcpy(user, context->user);
+
+	srv = smbc_server(context, True,
+                          server, share, workgroup, user, password);
+
+	if (!srv) {
+		return -1;  /* errno set by smbc_server */
+	}
+
+	mode = 0;
+
+	if (!(newmode & (S_IWUSR | S_IWGRP | S_IWOTH))) mode |= aRONLY;
+	if ((newmode & S_IXUSR) && lp_map_archive(-1)) mode |= aARCH;
+	if ((newmode & S_IXGRP) && lp_map_system(-1)) mode |= aSYSTEM;
+	if ((newmode & S_IXOTH) && lp_map_hidden(-1)) mode |= aHIDDEN;
+
+	if (!cli_setatr(srv->cli, path, mode, 0)) {
+		errno = smbc_errno(context, srv->cli);
+		return -1;
+	}
+	
+        return 0;
+}
+
+static int
+smbc_utimes_ctx(SMBCCTX *context,
+                const char *fname,
+                struct timeval *tbuf)
+{
+        SMBCSRV *srv;
+	fstring server;
+        fstring share;
+        fstring user;
+        fstring password;
+        fstring workgroup;
+	pstring path;
+        time_t access_time;
+        time_t write_time;
+
+	if (!context || !context->internal ||
+	    !context->internal->_initialized) {
+
+		errno = EINVAL;  /* Best I can think of ... */
+		return -1;
+    
+	}
+
+	if (!fname) {
+
+		errno = EINVAL;
+		return -1;
+
+	}
+  
+        if (tbuf == NULL) {
+                access_time = write_time = time(NULL);
+        } else {
+                access_time = tbuf[0].tv_sec;
+                write_time = tbuf[1].tv_sec;
+        }
+
+        if (DEBUGLVL(4)) 
+        {
+                char *p;
+                char atimebuf[32];
+                char mtimebuf[32];
+
+                strncpy(atimebuf, ctime(&access_time), sizeof(atimebuf) - 1);
+                atimebuf[sizeof(atimebuf) - 1] = '\0';
+                if ((p = strchr(atimebuf, '\n')) != NULL) {
+                        *p = '\0';
+                }
+
+                strncpy(mtimebuf, ctime(&write_time), sizeof(mtimebuf) - 1);
+                mtimebuf[sizeof(mtimebuf) - 1] = '\0';
+                if ((p = strchr(mtimebuf, '\n')) != NULL) {
+                        *p = '\0';
+                }
+
+                dbgtext("smbc_utimes(%s, atime = %s mtime = %s)\n",
+                        fname, atimebuf, mtimebuf);
+        }
+
+	if (smbc_parse_path(context, fname,
+                            workgroup, sizeof(workgroup),
+                            server, sizeof(server),
+                            share, sizeof(share),
+                            path, sizeof(path),
+                            user, sizeof(user),
+                            password, sizeof(password),
+                            NULL, 0)) {
+                errno = EINVAL;
+                return -1;
+        }
+
+	if (user[0] == (char)0) fstrcpy(user, context->user);
+
+	srv = smbc_server(context, True,
+                          server, share, workgroup, user, password);
+
+	if (!srv) {
+		return -1;      /* errno set by smbc_server */
+	}
+
+        if (!smbc_setatr(context, srv, path,
+                         0, access_time, write_time, 0, 0)) {
+                return -1;      /* errno set by smbc_setatr */
+        }
+
+        return 0;
+}
+
+
+/*
+ * Sort ACEs according to the documentation at
+ * http://support.microsoft.com/kb/269175, at least as far as it defines the
+ * order.
+ */
+
+static int
+ace_compare(SEC_ACE *ace1,
+            SEC_ACE *ace2)
+{
+        BOOL b1;
+        BOOL b2;
+
+        /* If the ACEs are equal, we have nothing more to do. */
+        if (sec_ace_equal(ace1, ace2)) {
+		return 0;
+        }
+
+        /* Inherited follow non-inherited */
+        b1 = ((ace1->flags & SEC_ACE_FLAG_INHERITED_ACE) != 0);
+        b2 = ((ace2->flags & SEC_ACE_FLAG_INHERITED_ACE) != 0);
+        if (b1 != b2) {
+                return (b1 ? 1 : -1);
+        }
+
+        /*
+         * What shall we do with AUDITs and ALARMs?  It's undefined.  We'll
+         * sort them after DENY and ALLOW.
+         */
+        b1 = (ace1->type != SEC_ACE_TYPE_ACCESS_ALLOWED &&
+              ace1->type != SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT &&
+              ace1->type != SEC_ACE_TYPE_ACCESS_DENIED &&
+              ace1->type != SEC_ACE_TYPE_ACCESS_DENIED_OBJECT);
+        b2 = (ace2->type != SEC_ACE_TYPE_ACCESS_ALLOWED &&
+              ace2->type != SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT &&
+              ace2->type != SEC_ACE_TYPE_ACCESS_DENIED &&
+              ace2->type != SEC_ACE_TYPE_ACCESS_DENIED_OBJECT);
+        if (b1 != b2) {
+                return (b1 ? 1 : -1);
+        }
+
+        /* Allowed ACEs follow denied ACEs */
+        b1 = (ace1->type == SEC_ACE_TYPE_ACCESS_ALLOWED ||
+              ace1->type == SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT);
+        b2 = (ace2->type == SEC_ACE_TYPE_ACCESS_ALLOWED ||
+              ace2->type == SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT);
+        if (b1 != b2) {
+                return (b1 ? 1 : -1);
+        }
+
+        /*
+         * ACEs applying to an entity's object follow those applying to the
+         * entity itself
+         */
+        b1 = (ace1->type == SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT ||
+              ace1->type == SEC_ACE_TYPE_ACCESS_DENIED_OBJECT);
+        b2 = (ace2->type == SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT ||
+              ace2->type == SEC_ACE_TYPE_ACCESS_DENIED_OBJECT);
+        if (b1 != b2) {
+                return (b1 ? 1 : -1);
+        }
+
+        /*
+         * If we get this far, the ACEs are similar as far as the
+         * characteristics we typically care about (those defined by the
+         * referenced MS document).  We'll now sort by characteristics that
+         * just seems reasonable.
+         */
+        
+	if (ace1->type != ace2->type) {
+		return ace2->type - ace1->type;
+        }
+
+	if (sid_compare(&ace1->trustee, &ace2->trustee)) {
+		return sid_compare(&ace1->trustee, &ace2->trustee);
+        }
+
+	if (ace1->flags != ace2->flags) {
+		return ace1->flags - ace2->flags;
+        }
+
+	if (ace1->access_mask != ace2->access_mask) {
+		return ace1->access_mask - ace2->access_mask;
+        }
+
+	if (ace1->size != ace2->size) {
+		return ace1->size - ace2->size;
+        }
+
+	return memcmp(ace1, ace2, sizeof(SEC_ACE));
+}
+
+
+static void
+sort_acl(SEC_ACL *the_acl)
+{
+	uint32 i;
+	if (!the_acl) return;
+
+	qsort(the_acl->aces, the_acl->num_aces, sizeof(the_acl->aces[0]),
+              QSORT_CAST ace_compare);
+
+	for (i=1;i<the_acl->num_aces;) {
+		if (sec_ace_equal(&the_acl->aces[i-1], &the_acl->aces[i])) {
+			int j;
+			for (j=i; j<the_acl->num_aces-1; j++) {
+				the_acl->aces[j] = the_acl->aces[j+1];
+			}
+			the_acl->num_aces--;
+		} else {
+			i++;
+		}
+	}
+}
+
+/* convert a SID to a string, either numeric or username/group */
+static void
+convert_sid_to_string(struct cli_state *ipc_cli,
+                      POLICY_HND *pol,
+                      fstring str,
+                      BOOL numeric,
+                      DOM_SID *sid)
+{
+	char **domains = NULL;
+	char **names = NULL;
+	enum lsa_SidType *types = NULL;
+	struct rpc_pipe_client *pipe_hnd = find_lsa_pipe_hnd(ipc_cli);
+	sid_to_string(str, sid);
+
+	if (numeric) {
+		return;     /* no lookup desired */
+	}
+       
+	if (!pipe_hnd) {
+		return;
+	}
+ 
+	/* Ask LSA to convert the sid to a name */
+
+	if (!NT_STATUS_IS_OK(rpccli_lsa_lookup_sids(pipe_hnd, ipc_cli->mem_ctx,  
+						 pol, 1, sid, &domains, 
+						 &names, &types)) ||
+	    !domains || !domains[0] || !names || !names[0]) {
+		return;
+	}
+
+	/* Converted OK */
+
+	slprintf(str, sizeof(fstring) - 1, "%s%s%s",
+		 domains[0], lp_winbind_separator(),
+		 names[0]);
+}
+
+/* convert a string to a SID, either numeric or username/group */
+static BOOL
+convert_string_to_sid(struct cli_state *ipc_cli,
+                      POLICY_HND *pol,
+                      BOOL numeric,
+                      DOM_SID *sid,
+                      const char *str)
+{
+	enum lsa_SidType *types = NULL;
+	DOM_SID *sids = NULL;
+	BOOL result = True;
+	struct rpc_pipe_client *pipe_hnd = find_lsa_pipe_hnd(ipc_cli);
+
+	if (!pipe_hnd) {
+		return False;
+	}
+
+        if (numeric) {
+                if (strncmp(str, "S-", 2) == 0) {
+                        return string_to_sid(sid, str);
+                }
+
+                result = False;
+                goto done;
+        }
+
+	if (!NT_STATUS_IS_OK(rpccli_lsa_lookup_names(pipe_hnd, ipc_cli->mem_ctx, 
+						  pol, 1, &str, NULL, &sids, 
+						  &types))) {
+		result = False;
+		goto done;
+	}
+
+	sid_copy(sid, &sids[0]);
+ done:
+
+	return result;
+}
+
+
+/* parse an ACE in the same format as print_ace() */
+static BOOL
+parse_ace(struct cli_state *ipc_cli,
+          POLICY_HND *pol,
+          SEC_ACE *ace,
+          BOOL numeric,
+          char *str)
+{
+	char *p;
+	const char *cp;
+	fstring tok;
+	unsigned int atype;
+        unsigned int aflags;
+        unsigned int amask;
+	DOM_SID sid;
+	SEC_ACCESS mask;
+	const struct perm_value *v;
+        struct perm_value {
+                const char *perm;
+                uint32 mask;
+        };
+
+        /* These values discovered by inspection */
+        static const struct perm_value special_values[] = {
+                { "R", 0x00120089 },
+                { "W", 0x00120116 },
+                { "X", 0x001200a0 },
+                { "D", 0x00010000 },
+                { "P", 0x00040000 },
+                { "O", 0x00080000 },
+                { NULL, 0 },
+        };
+
+        static const struct perm_value standard_values[] = {
+                { "READ",   0x001200a9 },
+                { "CHANGE", 0x001301bf },
+                { "FULL",   0x001f01ff },
+                { NULL, 0 },
+        };
+
+
+	ZERO_STRUCTP(ace);
+	p = strchr_m(str,':');
+	if (!p) return False;
+	*p = '\0';
+	p++;
+	/* Try to parse numeric form */
+
+	if (sscanf(p, "%i/%i/%i", &atype, &aflags, &amask) == 3 &&
+	    convert_string_to_sid(ipc_cli, pol, numeric, &sid, str)) {
+		goto done;
+	}
+
+	/* Try to parse text form */
+
+	if (!convert_string_to_sid(ipc_cli, pol, numeric, &sid, str)) {
+		return False;
+	}
+
+	cp = p;
+	if (!next_token(&cp, tok, "/", sizeof(fstring))) {
+		return False;
+	}
+
+	if (StrnCaseCmp(tok, "ALLOWED", strlen("ALLOWED")) == 0) {
+		atype = SEC_ACE_TYPE_ACCESS_ALLOWED;
+	} else if (StrnCaseCmp(tok, "DENIED", strlen("DENIED")) == 0) {
+		atype = SEC_ACE_TYPE_ACCESS_DENIED;
+	} else {
+		return False;
+	}
+
+	/* Only numeric form accepted for flags at present */
+
+	if (!(next_token(&cp, tok, "/", sizeof(fstring)) &&
+	      sscanf(tok, "%i", &aflags))) {
+		return False;
+	}
+
+	if (!next_token(&cp, tok, "/", sizeof(fstring))) {
+		return False;
+	}
+
+	if (strncmp(tok, "0x", 2) == 0) {
+		if (sscanf(tok, "%i", &amask) != 1) {
+			return False;
+		}
+		goto done;
+	}
+
+	for (v = standard_values; v->perm; v++) {
+		if (strcmp(tok, v->perm) == 0) {
+			amask = v->mask;
+			goto done;
+		}
+	}
+
+	p = tok;
+
+	while(*p) {
+		BOOL found = False;
+
+		for (v = special_values; v->perm; v++) {
+			if (v->perm[0] == *p) {
+				amask |= v->mask;
+				found = True;
+			}
+		}
+
+		if (!found) return False;
+		p++;
+	}
+
+	if (*p) {
+		return False;
+	}
+
+ done:
+	mask = amask;
+	init_sec_ace(ace, &sid, atype, mask, aflags);
+	return True;
+}
+
+/* add an ACE to a list of ACEs in a SEC_ACL */
+static BOOL
+add_ace(SEC_ACL **the_acl,
+        SEC_ACE *ace,
+        TALLOC_CTX *ctx)
+{
+	SEC_ACL *newacl;
+	SEC_ACE *aces;
+
+	if (! *the_acl) {
+		(*the_acl) = make_sec_acl(ctx, 3, 1, ace);
+		return True;
+	}
+
+	if ((aces = SMB_CALLOC_ARRAY(SEC_ACE, 1+(*the_acl)->num_aces)) == NULL) {
+		return False;
+	}
+	memcpy(aces, (*the_acl)->aces, (*the_acl)->num_aces * sizeof(SEC_ACE));
+	memcpy(aces+(*the_acl)->num_aces, ace, sizeof(SEC_ACE));
+	newacl = make_sec_acl(ctx, (*the_acl)->revision,
+                              1+(*the_acl)->num_aces, aces);
+	SAFE_FREE(aces);
+	(*the_acl) = newacl;
+	return True;
+}
+
+
+/* parse a ascii version of a security descriptor */
+static SEC_DESC *
+sec_desc_parse(TALLOC_CTX *ctx,
+               struct cli_state *ipc_cli,
+               POLICY_HND *pol,
+               BOOL numeric,
+               char *str)
+{
+	const char *p = str;
+	fstring tok;
+	SEC_DESC *ret = NULL;
+	size_t sd_size;
+	DOM_SID *group_sid=NULL;
+        DOM_SID *owner_sid=NULL;
+	SEC_ACL *dacl=NULL;
+	int revision=1;
+
+	while (next_token(&p, tok, "\t,\r\n", sizeof(tok))) {
+
+		if (StrnCaseCmp(tok,"REVISION:", 9) == 0) {
+			revision = strtol(tok+9, NULL, 16);
+			continue;
+		}
+
+		if (StrnCaseCmp(tok,"OWNER:", 6) == 0) {
+			if (owner_sid) {
+				DEBUG(5, ("OWNER specified more than once!\n"));
+				goto done;
+			}
+			owner_sid = SMB_CALLOC_ARRAY(DOM_SID, 1);
+			if (!owner_sid ||
+			    !convert_string_to_sid(ipc_cli, pol,
+                                                   numeric,
+                                                   owner_sid, tok+6)) {
+				DEBUG(5, ("Failed to parse owner sid\n"));
+				goto done;
+			}
+			continue;
+		}
+
+		if (StrnCaseCmp(tok,"OWNER+:", 7) == 0) {
+			if (owner_sid) {
+				DEBUG(5, ("OWNER specified more than once!\n"));
+				goto done;
+			}
+			owner_sid = SMB_CALLOC_ARRAY(DOM_SID, 1);
+			if (!owner_sid ||
+			    !convert_string_to_sid(ipc_cli, pol,
+                                                   False,
+                                                   owner_sid, tok+7)) {
+				DEBUG(5, ("Failed to parse owner sid\n"));
+				goto done;
+			}
+			continue;
+		}
+
+		if (StrnCaseCmp(tok,"GROUP:", 6) == 0) {
+			if (group_sid) {
+				DEBUG(5, ("GROUP specified more than once!\n"));
+				goto done;
+			}
+			group_sid = SMB_CALLOC_ARRAY(DOM_SID, 1);
+			if (!group_sid ||
+			    !convert_string_to_sid(ipc_cli, pol,
+                                                   numeric,
+                                                   group_sid, tok+6)) {
+				DEBUG(5, ("Failed to parse group sid\n"));
+				goto done;
+			}
+			continue;
+		}
+
+		if (StrnCaseCmp(tok,"GROUP+:", 7) == 0) {
+			if (group_sid) {
+				DEBUG(5, ("GROUP specified more than once!\n"));
+				goto done;
+			}
+			group_sid = SMB_CALLOC_ARRAY(DOM_SID, 1);
+			if (!group_sid ||
+			    !convert_string_to_sid(ipc_cli, pol,
+                                                   False,
+                                                   group_sid, tok+6)) {
+				DEBUG(5, ("Failed to parse group sid\n"));
+				goto done;
+			}
+			continue;
+		}
+
+		if (StrnCaseCmp(tok,"ACL:", 4) == 0) {
+			SEC_ACE ace;
+			if (!parse_ace(ipc_cli, pol, &ace, numeric, tok+4)) {
+				DEBUG(5, ("Failed to parse ACL %s\n", tok));
+				goto done;
+			}
+			if(!add_ace(&dacl, &ace, ctx)) {
+				DEBUG(5, ("Failed to add ACL %s\n", tok));
+				goto done;
+			}
+			continue;
+		}
+
+		if (StrnCaseCmp(tok,"ACL+:", 5) == 0) {
+			SEC_ACE ace;
+			if (!parse_ace(ipc_cli, pol, &ace, False, tok+5)) {
+				DEBUG(5, ("Failed to parse ACL %s\n", tok));
+				goto done;
+			}
+			if(!add_ace(&dacl, &ace, ctx)) {
+				DEBUG(5, ("Failed to add ACL %s\n", tok));
+				goto done;
+			}
+			continue;
+		}
+
+		DEBUG(5, ("Failed to parse security descriptor\n"));
+		goto done;
+	}
+
+	ret = make_sec_desc(ctx, revision, SEC_DESC_SELF_RELATIVE, 
+			    owner_sid, group_sid, NULL, dacl, &sd_size);
+
+  done:
+	SAFE_FREE(group_sid);
+	SAFE_FREE(owner_sid);
+
+	return ret;
+}
+
+
+/* Obtain the current dos attributes */
+static DOS_ATTR_DESC *
+dos_attr_query(SMBCCTX *context,
+               TALLOC_CTX *ctx,
+               const char *filename,
+               SMBCSRV *srv)
+{
+        struct timespec create_time_ts;
+        struct timespec write_time_ts;
+        struct timespec access_time_ts;
+        struct timespec change_time_ts;
+        SMB_OFF_T size = 0;
+        uint16 mode = 0;
+	SMB_INO_T inode = 0;
+        DOS_ATTR_DESC *ret;
+    
+        ret = TALLOC_P(ctx, DOS_ATTR_DESC);
+        if (!ret) {
+                errno = ENOMEM;
+                return NULL;
+        }
+
+        /* Obtain the DOS attributes */
+        if (!smbc_getatr(context, srv, CONST_DISCARD(char *, filename),
+                         &mode, &size, 
+                         &create_time_ts,
+                         &access_time_ts,
+                         &write_time_ts,
+                         &change_time_ts, 
+                         &inode)) {
+        
+                errno = smbc_errno(context, srv->cli);
+                DEBUG(5, ("dos_attr_query Failed to query old attributes\n"));
+                return NULL;
+        
+        }
+                
+        ret->mode = mode;
+        ret->size = size;
+        ret->create_time = convert_timespec_to_time_t(create_time_ts);
+        ret->access_time = convert_timespec_to_time_t(access_time_ts);
+        ret->write_time = convert_timespec_to_time_t(write_time_ts);
+        ret->change_time = convert_timespec_to_time_t(change_time_ts);
+        ret->inode = inode;
+
+        return ret;
+}
+
+
+/* parse a ascii version of a security descriptor */
+static void
+dos_attr_parse(SMBCCTX *context,
+               DOS_ATTR_DESC *dad,
+               SMBCSRV *srv,
+               char *str)
+{
+        int n;
+        const char *p = str;
+	fstring tok;
+        struct {
+                const char * create_time_attr;
+                const char * access_time_attr;
+                const char * write_time_attr;
+                const char * change_time_attr;
+        } attr_strings;
+
+        /* Determine whether to use old-style or new-style attribute names */
+        if (context->internal->_full_time_names) {
+                /* new-style names */
+                attr_strings.create_time_attr = "CREATE_TIME";
+                attr_strings.access_time_attr = "ACCESS_TIME";
+                attr_strings.write_time_attr = "WRITE_TIME";
+                attr_strings.change_time_attr = "CHANGE_TIME";
+        } else {
+                /* old-style names */
+                attr_strings.create_time_attr = NULL;
+                attr_strings.access_time_attr = "A_TIME";
+                attr_strings.write_time_attr = "M_TIME";
+                attr_strings.change_time_attr = "C_TIME";
+        }
+
+        /* if this is to set the entire ACL... */
+        if (*str == '*') {
+                /* ... then increment past the first colon if there is one */
+                if ((p = strchr(str, ':')) != NULL) {
+                        ++p;
+                } else {
+                        p = str;
+                }
+        }
+
+	while (next_token(&p, tok, "\t,\r\n", sizeof(tok))) {
+
+		if (StrnCaseCmp(tok, "MODE:", 5) == 0) {
+			dad->mode = strtol(tok+5, NULL, 16);
+			continue;
+		}
+
+		if (StrnCaseCmp(tok, "SIZE:", 5) == 0) {
+                        dad->size = (SMB_OFF_T)atof(tok+5);
+			continue;
+		}
+
+                n = strlen(attr_strings.access_time_attr);
+                if (StrnCaseCmp(tok, attr_strings.access_time_attr, n) == 0) {
+                        dad->access_time = (time_t)strtol(tok+n+1, NULL, 10);
+			continue;
+		}
+
+                n = strlen(attr_strings.change_time_attr);
+                if (StrnCaseCmp(tok, attr_strings.change_time_attr, n) == 0) {
+                        dad->change_time = (time_t)strtol(tok+n+1, NULL, 10);
+			continue;
+		}
+
+                n = strlen(attr_strings.write_time_attr);
+                if (StrnCaseCmp(tok, attr_strings.write_time_attr, n) == 0) {
+                        dad->write_time = (time_t)strtol(tok+n+1, NULL, 10);
+			continue;
+		}
+
+		if (attr_strings.create_time_attr != NULL) {
+			n = strlen(attr_strings.create_time_attr);
+			if (StrnCaseCmp(tok, attr_strings.create_time_attr,
+					n) == 0) {
+				dad->create_time = (time_t)strtol(tok+n+1,
+								  NULL, 10);
+				continue;
+			}
+		}
+
+		if (StrnCaseCmp(tok, "INODE:", 6) == 0) {
+                        dad->inode = (SMB_INO_T)atof(tok+6);
+			continue;
+		}
+	}
+}
+
+/***************************************************** 
+ Retrieve the acls for a file.
+*******************************************************/
+
+static int
+cacl_get(SMBCCTX *context,
+         TALLOC_CTX *ctx,
+         SMBCSRV *srv,
+         struct cli_state *ipc_cli,
+         POLICY_HND *pol,
+         char *filename,
+         char *attr_name,
+         char *buf,
+         int bufsize)
+{
+	uint32 i;
+        int n = 0;
+        int n_used;
+        BOOL all;
+        BOOL all_nt;
+        BOOL all_nt_acls;
+        BOOL all_dos;
+        BOOL some_nt;
+        BOOL some_dos;
+        BOOL exclude_nt_revision = False;
+        BOOL exclude_nt_owner = False;
+        BOOL exclude_nt_group = False;
+        BOOL exclude_nt_acl = False;
+        BOOL exclude_dos_mode = False;
+        BOOL exclude_dos_size = False;
+        BOOL exclude_dos_create_time = False;
+        BOOL exclude_dos_access_time = False;
+        BOOL exclude_dos_write_time = False;
+        BOOL exclude_dos_change_time = False;
+        BOOL exclude_dos_inode = False;
+        BOOL numeric = True;
+        BOOL determine_size = (bufsize == 0);
+	int fnum = -1;
+	SEC_DESC *sd;
+	fstring sidstr;
+        fstring name_sandbox;
+        char *name;
+        char *pExclude;
+        char *p;
+        struct timespec create_time_ts;
+	struct timespec write_time_ts;
+        struct timespec access_time_ts;
+        struct timespec change_time_ts;
+	time_t create_time = (time_t)0;
+	time_t write_time = (time_t)0;
+        time_t access_time = (time_t)0;
+        time_t change_time = (time_t)0;
+	SMB_OFF_T size = 0;
+	uint16 mode = 0;
+	SMB_INO_T ino = 0;
+        struct cli_state *cli = srv->cli;
+        struct {
+                const char * create_time_attr;
+                const char * access_time_attr;
+                const char * write_time_attr;
+                const char * change_time_attr;
+        } attr_strings;
+        struct {
+                const char * create_time_attr;
+                const char * access_time_attr;
+                const char * write_time_attr;
+                const char * change_time_attr;
+        } excl_attr_strings;
+
+        /* Determine whether to use old-style or new-style attribute names */
+        if (context->internal->_full_time_names) {
+                /* new-style names */
+                attr_strings.create_time_attr = "CREATE_TIME";
+                attr_strings.access_time_attr = "ACCESS_TIME";
+                attr_strings.write_time_attr = "WRITE_TIME";
+                attr_strings.change_time_attr = "CHANGE_TIME";
+
+                excl_attr_strings.create_time_attr = "CREATE_TIME";
+                excl_attr_strings.access_time_attr = "ACCESS_TIME";
+                excl_attr_strings.write_time_attr = "WRITE_TIME";
+                excl_attr_strings.change_time_attr = "CHANGE_TIME";
+        } else {
+                /* old-style names */
+                attr_strings.create_time_attr = NULL;
+                attr_strings.access_time_attr = "A_TIME";
+                attr_strings.write_time_attr = "M_TIME";
+                attr_strings.change_time_attr = "C_TIME";
+
+                excl_attr_strings.create_time_attr = NULL;
+                excl_attr_strings.access_time_attr = "dos_attr.A_TIME";
+                excl_attr_strings.write_time_attr = "dos_attr.M_TIME";
+                excl_attr_strings.change_time_attr = "dos_attr.C_TIME";
+        }
+
+        /* Copy name so we can strip off exclusions (if any are specified) */
+        strncpy(name_sandbox, attr_name, sizeof(name_sandbox) - 1);
+
+        /* Ensure name is null terminated */
+        name_sandbox[sizeof(name_sandbox) - 1] = '\0';
+
+        /* Play in the sandbox */
+        name = name_sandbox;
+
+        /* If there are any exclusions, point to them and mask them from name */
+        if ((pExclude = strchr(name, '!')) != NULL)
+        {
+                *pExclude++ = '\0';
+        }
+
+        all = (StrnCaseCmp(name, "system.*", 8) == 0);
+        all_nt = (StrnCaseCmp(name, "system.nt_sec_desc.*", 20) == 0);
+        all_nt_acls = (StrnCaseCmp(name, "system.nt_sec_desc.acl.*", 24) == 0);
+        all_dos = (StrnCaseCmp(name, "system.dos_attr.*", 17) == 0);
+        some_nt = (StrnCaseCmp(name, "system.nt_sec_desc.", 19) == 0);
+        some_dos = (StrnCaseCmp(name, "system.dos_attr.", 16) == 0);
+        numeric = (* (name + strlen(name) - 1) != '+');
+
+        /* Look for exclusions from "all" requests */
+        if (all || all_nt || all_dos) {
+
+                /* Exclusions are delimited by '!' */
+                for (;
+                     pExclude != NULL;
+                     pExclude = (p == NULL ? NULL : p + 1)) {
+
+                /* Find end of this exclusion name */
+                if ((p = strchr(pExclude, '!')) != NULL)
+                {
+                    *p = '\0';
+                }
+
+                /* Which exclusion name is this? */
+                if (StrCaseCmp(pExclude, "nt_sec_desc.revision") == 0) {
+                    exclude_nt_revision = True;
+                }
+                else if (StrCaseCmp(pExclude, "nt_sec_desc.owner") == 0) {
+                    exclude_nt_owner = True;
+                }
+                else if (StrCaseCmp(pExclude, "nt_sec_desc.group") == 0) {
+                    exclude_nt_group = True;
+                }
+                else if (StrCaseCmp(pExclude, "nt_sec_desc.acl") == 0) {
+                    exclude_nt_acl = True;
+                }
+                else if (StrCaseCmp(pExclude, "dos_attr.mode") == 0) {
+                    exclude_dos_mode = True;
+                }
+                else if (StrCaseCmp(pExclude, "dos_attr.size") == 0) {
+                    exclude_dos_size = True;
+                }
+                else if (excl_attr_strings.create_time_attr != NULL &&
+                         StrCaseCmp(pExclude,
+                                    excl_attr_strings.change_time_attr) == 0) {
+                    exclude_dos_create_time = True;
+                }
+                else if (StrCaseCmp(pExclude,
+                                    excl_attr_strings.access_time_attr) == 0) {
+                    exclude_dos_access_time = True;
+                }
+                else if (StrCaseCmp(pExclude,
+                                    excl_attr_strings.write_time_attr) == 0) {
+                    exclude_dos_write_time = True;
+                }
+                else if (StrCaseCmp(pExclude,
+                                    excl_attr_strings.change_time_attr) == 0) {
+                    exclude_dos_change_time = True;
+                }
+                else if (StrCaseCmp(pExclude, "dos_attr.inode") == 0) {
+                    exclude_dos_inode = True;
+                }
+                else {
+                    DEBUG(5, ("cacl_get received unknown exclusion: %s\n",
+                              pExclude));
+                    errno = ENOATTR;
+                    return -1;
+                }
+            }
+        }
+
+        n_used = 0;
+
+        /*
+         * If we are (possibly) talking to an NT or new system and some NT
+         * attributes have been requested...
+         */
+        if (ipc_cli && (all || some_nt || all_nt_acls)) {
+                /* Point to the portion after "system.nt_sec_desc." */
+                name += 19;     /* if (all) this will be invalid but unused */
+
+                /* ... then obtain any NT attributes which were requested */
+                fnum = cli_nt_create(cli, filename, CREATE_ACCESS_READ);
+
+                if (fnum == -1) {
+                        DEBUG(5, ("cacl_get failed to open %s: %s\n",
+                                  filename, cli_errstr(cli)));
+                        errno = 0;
+                        return -1;
+                }
+
+                sd = cli_query_secdesc(cli, fnum, ctx);
+
+                if (!sd) {
+                        DEBUG(5,
+                              ("cacl_get Failed to query old descriptor\n"));
+                        errno = 0;
+                        return -1;
+                }
+
+                cli_close(cli, fnum);
+
+                if (! exclude_nt_revision) {
+                        if (all || all_nt) {
+                                if (determine_size) {
+                                        p = talloc_asprintf(ctx,
+                                                            "REVISION:%d",
+                                                            sd->revision);
+                                        if (!p) {
+                                                errno = ENOMEM;
+                                                return -1;
+                                        }
+                                        n = strlen(p);
+                                } else {
+                                        n = snprintf(buf, bufsize,
+                                                     "REVISION:%d",
+                                                     sd->revision);
+                                }
+                        } else if (StrCaseCmp(name, "revision") == 0) {
+                                if (determine_size) {
+                                        p = talloc_asprintf(ctx, "%d",
+                                                            sd->revision);
+                                        if (!p) {
+                                                errno = ENOMEM;
+                                                return -1;
+                                        }
+                                        n = strlen(p);
+                                } else {
+                                        n = snprintf(buf, bufsize, "%d",
+                                                     sd->revision);
+                                }
+                        }
+        
+                        if (!determine_size && n > bufsize) {
+                                errno = ERANGE;
+                                return -1;
+                        }
+                        buf += n;
+                        n_used += n;
+                        bufsize -= n;
+                        n = 0;
+                }
+
+                if (! exclude_nt_owner) {
+                        /* Get owner and group sid */
+                        if (sd->owner_sid) {
+                                convert_sid_to_string(ipc_cli, pol,
+                                                      sidstr,
+                                                      numeric,
+                                                      sd->owner_sid);
+                        } else {
+                                fstrcpy(sidstr, "");
+                        }
+
+                        if (all || all_nt) {
+                                if (determine_size) {
+                                        p = talloc_asprintf(ctx, ",OWNER:%s",
+                                                            sidstr);
+                                        if (!p) {
+                                                errno = ENOMEM;
+                                                return -1;
+                                        }
+                                        n = strlen(p);
+                                } else if (sidstr[0] != '\0') {
+                                        n = snprintf(buf, bufsize,
+                                                     ",OWNER:%s", sidstr);
+                                }
+                        } else if (StrnCaseCmp(name, "owner", 5) == 0) {
+                                if (determine_size) {
+                                        p = talloc_asprintf(ctx, "%s", sidstr);
+                                        if (!p) {
+                                                errno = ENOMEM;
+                                                return -1;
+                                        }
+                                        n = strlen(p);
+                                } else {
+                                        n = snprintf(buf, bufsize, "%s",
+                                                     sidstr);
+                                }
+                        }
+
+                        if (!determine_size && n > bufsize) {
+                                errno = ERANGE;
+                                return -1;
+                        }
+                        buf += n;
+                        n_used += n;
+                        bufsize -= n;
+                        n = 0;
+                }
+
+                if (! exclude_nt_group) {
+                        if (sd->group_sid) {
+                                convert_sid_to_string(ipc_cli, pol,
+                                                      sidstr, numeric,
+                                                      sd->group_sid);
+                        } else {
+                                fstrcpy(sidstr, "");
+                        }
+
+                        if (all || all_nt) {
+                                if (determine_size) {
+                                        p = talloc_asprintf(ctx, ",GROUP:%s",
+                                                            sidstr);
+                                        if (!p) {
+                                                errno = ENOMEM;
+                                                return -1;
+                                        }
+                                        n = strlen(p);
+                                } else if (sidstr[0] != '\0') {
+                                        n = snprintf(buf, bufsize,
+                                                     ",GROUP:%s", sidstr);
+                                }
+                        } else if (StrnCaseCmp(name, "group", 5) == 0) {
+                                if (determine_size) {
+                                        p = talloc_asprintf(ctx, "%s", sidstr);
+                                        if (!p) {
+                                                errno = ENOMEM;
+                                                return -1;
+                                        }
+                                        n = strlen(p);
+                                } else {
+                                        n = snprintf(buf, bufsize,
+                                                     "%s", sidstr);
+                                }
+                        }
+
+                        if (!determine_size && n > bufsize) {
+                                errno = ERANGE;
+                                return -1;
+                        }
+                        buf += n;
+                        n_used += n;
+                        bufsize -= n;
+                        n = 0;
+                }
+
+                if (! exclude_nt_acl) {
+                        /* Add aces to value buffer  */
+                        for (i = 0; sd->dacl && i < sd->dacl->num_aces; i++) {
+
+                                SEC_ACE *ace = &sd->dacl->aces[i];
+                                convert_sid_to_string(ipc_cli, pol,
+                                                      sidstr, numeric,
+                                                      &ace->trustee);
+
+                                if (all || all_nt) {
+                                        if (determine_size) {
+                                                p = talloc_asprintf(
+                                                        ctx, 
+                                                        ",ACL:"
+                                                        "%s:%d/%d/0x%08x", 
+                                                        sidstr,
+                                                        ace->type,
+                                                        ace->flags,
+                                                        ace->access_mask);
+                                                if (!p) {
+                                                        errno = ENOMEM;
+                                                        return -1;
+                                                }
+                                                n = strlen(p);
+                                        } else {
+                                                n = snprintf(
+                                                        buf, bufsize,
+                                                        ",ACL:%s:%d/%d/0x%08x", 
+                                                        sidstr,
+                                                        ace->type,
+                                                        ace->flags,
+                                                        ace->access_mask);
+                                        }
+                                } else if ((StrnCaseCmp(name, "acl", 3) == 0 &&
+                                            StrCaseCmp(name+3, sidstr) == 0) ||
+                                           (StrnCaseCmp(name, "acl+", 4) == 0 &&
+                                            StrCaseCmp(name+4, sidstr) == 0)) {
+                                        if (determine_size) {
+                                                p = talloc_asprintf(
+                                                        ctx, 
+                                                        "%d/%d/0x%08x", 
+                                                        ace->type,
+                                                        ace->flags,
+                                                        ace->access_mask);
+                                                if (!p) {
+                                                        errno = ENOMEM;
+                                                        return -1;
+                                                }
+                                                n = strlen(p);
+                                        } else {
+                                                n = snprintf(buf, bufsize,
+                                                             "%d/%d/0x%08x", 
+                                                             ace->type,
+                                                             ace->flags,
+                                                             ace->access_mask);
+                                        }
+                                } else if (all_nt_acls) {
+                                        if (determine_size) {
+                                                p = talloc_asprintf(
+                                                        ctx, 
+                                                        "%s%s:%d/%d/0x%08x",
+                                                        i ? "," : "",
+                                                        sidstr,
+                                                        ace->type,
+                                                        ace->flags,
+                                                        ace->access_mask);
+                                                if (!p) {
+                                                        errno = ENOMEM;
+                                                        return -1;
+                                                }
+                                                n = strlen(p);
+                                        } else {
+                                                n = snprintf(buf, bufsize,
+                                                             "%s%s:%d/%d/0x%08x",
+                                                             i ? "," : "",
+                                                             sidstr,
+                                                             ace->type,
+                                                             ace->flags,
+                                                             ace->access_mask);
+                                        }
+                                }
+                                if (!determine_size && n > bufsize) {
+                                        errno = ERANGE;
+                                        return -1;
+                                }
+                                buf += n;
+                                n_used += n;
+                                bufsize -= n;
+                                n = 0;
+                        }
+                }
+
+                /* Restore name pointer to its original value */
+                name -= 19;
+        }
+
+        if (all || some_dos) {
+                /* Point to the portion after "system.dos_attr." */
+                name += 16;     /* if (all) this will be invalid but unused */
+
+                /* Obtain the DOS attributes */
+                if (!smbc_getatr(context, srv, filename, &mode, &size, 
+                                 &create_time_ts,
+                                 &access_time_ts,
+                                 &write_time_ts,
+                                 &change_time_ts,
+                                 &ino)) {
+                        
+                        errno = smbc_errno(context, srv->cli);
+                        return -1;
+                        
+                }
+
+                create_time = convert_timespec_to_time_t(create_time_ts);
+                access_time = convert_timespec_to_time_t(access_time_ts);
+                write_time = convert_timespec_to_time_t(write_time_ts);
+                change_time = convert_timespec_to_time_t(change_time_ts);
+
+                if (! exclude_dos_mode) {
+                        if (all || all_dos) {
+                                if (determine_size) {
+                                        p = talloc_asprintf(ctx,
+                                                            "%sMODE:0x%x",
+                                                            (ipc_cli &&
+                                                             (all || some_nt)
+                                                             ? ","
+                                                             : ""),
+                                                            mode);
+                                        if (!p) {
+                                                errno = ENOMEM;
+                                                return -1;
+                                        }
+                                        n = strlen(p);
+                                } else {
+                                        n = snprintf(buf, bufsize,
+                                                     "%sMODE:0x%x",
+                                                     (ipc_cli &&
+                                                      (all || some_nt)
+                                                      ? ","
+                                                      : ""),
+                                                     mode);
+                                }
+                        } else if (StrCaseCmp(name, "mode") == 0) {
+                                if (determine_size) {
+                                        p = talloc_asprintf(ctx, "0x%x", mode);
+                                        if (!p) {
+                                                errno = ENOMEM;
+                                                return -1;
+                                        }
+                                        n = strlen(p);
+                                } else {
+                                        n = snprintf(buf, bufsize,
+                                                     "0x%x", mode);
+                                }
+                        }
+        
+                        if (!determine_size && n > bufsize) {
+                                errno = ERANGE;
+                                return -1;
+                        }
+                        buf += n;
+                        n_used += n;
+                        bufsize -= n;
+                        n = 0;
+                }
+
+                if (! exclude_dos_size) {
+                        if (all || all_dos) {
+                                if (determine_size) {
+                                        p = talloc_asprintf(
+                                                ctx,
+                                                ",SIZE:%.0f",
+                                                (double)size);
+                                        if (!p) {
+                                                errno = ENOMEM;
+                                                return -1;
+                                        }
+                                        n = strlen(p);
+                                } else {
+                                        n = snprintf(buf, bufsize,
+                                                     ",SIZE:%.0f",
+                                                     (double)size);
+                                }
+                        } else if (StrCaseCmp(name, "size") == 0) {
+                                if (determine_size) {
+                                        p = talloc_asprintf(
+                                                ctx,
+                                                "%.0f",
+                                                (double)size);
+                                        if (!p) {
+                                                errno = ENOMEM;
+                                                return -1;
+                                        }
+                                        n = strlen(p);
+                                } else {
+                                        n = snprintf(buf, bufsize,
+                                                     "%.0f",
+                                                     (double)size);
+                                }
+                        }
+        
+                        if (!determine_size && n > bufsize) {
+                                errno = ERANGE;
+                                return -1;
+                        }
+                        buf += n;
+                        n_used += n;
+                        bufsize -= n;
+                        n = 0;
+                }
+
+                if (! exclude_dos_create_time &&
+                    attr_strings.create_time_attr != NULL) {
+                        if (all || all_dos) {
+                                if (determine_size) {
+                                        p = talloc_asprintf(ctx,
+                                                            ",%s:%lu",
+                                                            attr_strings.create_time_attr,
+                                                            create_time);
+                                        if (!p) {
+                                                errno = ENOMEM;
+                                                return -1;
+                                        }
+                                        n = strlen(p);
+                                } else {
+                                        n = snprintf(buf, bufsize,
+                                                     ",%s:%lu",
+                                                     attr_strings.create_time_attr,
+                                                     create_time);
+                                }
+                        } else if (StrCaseCmp(name, attr_strings.create_time_attr) == 0) {
+                                if (determine_size) {
+                                        p = talloc_asprintf(ctx, "%lu", create_time);
+                                        if (!p) {
+                                                errno = ENOMEM;
+                                                return -1;
+                                        }
+                                        n = strlen(p);
+                                } else {
+                                        n = snprintf(buf, bufsize,
+                                                     "%lu", create_time);
+                                }
+                        }
+        
+                        if (!determine_size && n > bufsize) {
+                                errno = ERANGE;
+                                return -1;
+                        }
+                        buf += n;
+                        n_used += n;
+                        bufsize -= n;
+                        n = 0;
+                }
+
+                if (! exclude_dos_access_time) {
+                        if (all || all_dos) {
+                                if (determine_size) {
+                                        p = talloc_asprintf(ctx,
+                                                            ",%s:%lu",
+                                                            attr_strings.access_time_attr,
+                                                            access_time);
+                                        if (!p) {
+                                                errno = ENOMEM;
+                                                return -1;
+                                        }
+                                        n = strlen(p);
+                                } else {
+                                        n = snprintf(buf, bufsize,
+                                                     ",%s:%lu",
+                                                     attr_strings.access_time_attr,
+                                                     access_time);
+                                }
+                        } else if (StrCaseCmp(name, attr_strings.access_time_attr) == 0) {
+                                if (determine_size) {
+                                        p = talloc_asprintf(ctx, "%lu", access_time);
+                                        if (!p) {
+                                                errno = ENOMEM;
+                                                return -1;
+                                        }
+                                        n = strlen(p);
+                                } else {
+                                        n = snprintf(buf, bufsize,
+                                                     "%lu", access_time);
+                                }
+                        }
+        
+                        if (!determine_size && n > bufsize) {
+                                errno = ERANGE;
+                                return -1;
+                        }
+                        buf += n;
+                        n_used += n;
+                        bufsize -= n;
+                        n = 0;
+                }
+
+                if (! exclude_dos_write_time) {
+                        if (all || all_dos) {
+                                if (determine_size) {
+                                        p = talloc_asprintf(ctx,
+                                                            ",%s:%lu",
+                                                            attr_strings.write_time_attr,
+                                                            write_time);
+                                        if (!p) {
+                                                errno = ENOMEM;
+                                                return -1;
+                                        }
+                                        n = strlen(p);
+                                } else {
+                                        n = snprintf(buf, bufsize,
+                                                     ",%s:%lu",
+                                                     attr_strings.write_time_attr,
+                                                     write_time);
+                                }
+                        } else if (StrCaseCmp(name, attr_strings.write_time_attr) == 0) {
+                                if (determine_size) {
+                                        p = talloc_asprintf(ctx, "%lu", write_time);
+                                        if (!p) {
+                                                errno = ENOMEM;
+                                                return -1;
+                                        }
+                                        n = strlen(p);
+                                } else {
+                                        n = snprintf(buf, bufsize,
+                                                     "%lu", write_time);
+                                }
+                        }
+        
+                        if (!determine_size && n > bufsize) {
+                                errno = ERANGE;
+                                return -1;
+                        }
+                        buf += n;
+                        n_used += n;
+                        bufsize -= n;
+                        n = 0;
+                }
+
+                if (! exclude_dos_change_time) {
+                        if (all || all_dos) {
+                                if (determine_size) {
+                                        p = talloc_asprintf(ctx,
+                                                            ",%s:%lu",
+                                                            attr_strings.change_time_attr,
+                                                            change_time);
+                                        if (!p) {
+                                                errno = ENOMEM;
+                                                return -1;
+                                        }
+                                        n = strlen(p);
+                                } else {
+                                        n = snprintf(buf, bufsize,
+                                                     ",%s:%lu",
+                                                     attr_strings.change_time_attr,
+                                                     change_time);
+                                }
+                        } else if (StrCaseCmp(name, attr_strings.change_time_attr) == 0) {
+                                if (determine_size) {
+                                        p = talloc_asprintf(ctx, "%lu", change_time);
+                                        if (!p) {
+                                                errno = ENOMEM;
+                                                return -1;
+                                        }
+                                        n = strlen(p);
+                                } else {
+                                        n = snprintf(buf, bufsize,
+                                                     "%lu", change_time);
+                                }
+                        }
+        
+                        if (!determine_size && n > bufsize) {
+                                errno = ERANGE;
+                                return -1;
+                        }
+                        buf += n;
+                        n_used += n;
+                        bufsize -= n;
+                        n = 0;
+                }
+
+                if (! exclude_dos_inode) {
+                        if (all || all_dos) {
+                                if (determine_size) {
+                                        p = talloc_asprintf(
+                                                ctx,
+                                                ",INODE:%.0f",
+                                                (double)ino);
+                                        if (!p) {
+                                                errno = ENOMEM;
+                                                return -1;
+                                        }
+                                        n = strlen(p);
+                                } else {
+                                        n = snprintf(buf, bufsize,
+                                                     ",INODE:%.0f",
+                                                     (double) ino);
+                                }
+                        } else if (StrCaseCmp(name, "inode") == 0) {
+                                if (determine_size) {
+                                        p = talloc_asprintf(
+                                                ctx,
+                                                "%.0f",
+                                                (double) ino);
+                                        if (!p) {
+                                                errno = ENOMEM;
+                                                return -1;
+                                        }
+                                        n = strlen(p);
+                                } else {
+                                        n = snprintf(buf, bufsize,
+                                                     "%.0f",
+                                                     (double) ino);
+                                }
+                        }
+        
+                        if (!determine_size && n > bufsize) {
+                                errno = ERANGE;
+                                return -1;
+                        }
+                        buf += n;
+                        n_used += n;
+                        bufsize -= n;
+                        n = 0;
+                }
+
+                /* Restore name pointer to its original value */
+                name -= 16;
+        }
+
+        if (n_used == 0) {
+                errno = ENOATTR;
+                return -1;
+        }
+
+	return n_used;
+}
+
+
+/***************************************************** 
+set the ACLs on a file given an ascii description
+*******************************************************/
+static int
+cacl_set(TALLOC_CTX *ctx,
+         struct cli_state *cli,
+         struct cli_state *ipc_cli,
+         POLICY_HND *pol,
+         const char *filename,
+         const char *the_acl,
+         int mode,
+         int flags)
+{
+	int fnum;
+        int err = 0;
+	SEC_DESC *sd = NULL, *old;
+        SEC_ACL *dacl = NULL;
+	DOM_SID *owner_sid = NULL; 
+	DOM_SID *group_sid = NULL;
+	uint32 i, j;
+	size_t sd_size;
+	int ret = 0;
+        char *p;
+        BOOL numeric = True;
+
+        /* the_acl will be null for REMOVE_ALL operations */
+        if (the_acl) {
+                numeric = ((p = strchr(the_acl, ':')) != NULL &&
+                           p > the_acl &&
+                           p[-1] != '+');
+
+                /* if this is to set the entire ACL... */
+                if (*the_acl == '*') {
+                        /* ... then increment past the first colon */
+                        the_acl = p + 1;
+                }
+
+                sd = sec_desc_parse(ctx, ipc_cli, pol, numeric,
+                                    CONST_DISCARD(char *, the_acl));
+
+                if (!sd) {
+			errno = EINVAL;
+			return -1;
+                }
+        }
+
+	/* SMBC_XATTR_MODE_REMOVE_ALL is the only caller
+	   that doesn't deref sd */
+
+	if (!sd && (mode != SMBC_XATTR_MODE_REMOVE_ALL)) {
+		errno = EINVAL;
+		return -1;
+	}
+
+	/* The desired access below is the only one I could find that works
+	   with NT4, W2KP and Samba */
+
+	fnum = cli_nt_create(cli, filename, CREATE_ACCESS_READ);
+
+	if (fnum == -1) {
+                DEBUG(5, ("cacl_set failed to open %s: %s\n",
+                          filename, cli_errstr(cli)));
+                errno = 0;
+		return -1;
+	}
+
+	old = cli_query_secdesc(cli, fnum, ctx);
+
+	if (!old) {
+                DEBUG(5, ("cacl_set Failed to query old descriptor\n"));
+                errno = 0;
+		return -1;
+	}
+
+	cli_close(cli, fnum);
+
+	switch (mode) {
+	case SMBC_XATTR_MODE_REMOVE_ALL:
+                old->dacl->num_aces = 0;
+                dacl = old->dacl;
+                break;
+
+        case SMBC_XATTR_MODE_REMOVE:
+		for (i=0;sd->dacl && i<sd->dacl->num_aces;i++) {
+			BOOL found = False;
+
+			for (j=0;old->dacl && j<old->dacl->num_aces;j++) {
+                                if (sec_ace_equal(&sd->dacl->aces[i],
+                                                  &old->dacl->aces[j])) {
+					uint32 k;
+					for (k=j; k<old->dacl->num_aces-1;k++) {
+						old->dacl->aces[k] =
+                                                        old->dacl->aces[k+1];
+					}
+					old->dacl->num_aces--;
+					found = True;
+                                        dacl = old->dacl;
+					break;
+				}
+			}
+
+			if (!found) {
+                                err = ENOATTR;
+                                ret = -1;
+                                goto failed;
+			}
+		}
+		break;
+
+	case SMBC_XATTR_MODE_ADD:
+		for (i=0;sd->dacl && i<sd->dacl->num_aces;i++) {
+			BOOL found = False;
+
+			for (j=0;old->dacl && j<old->dacl->num_aces;j++) {
+				if (sid_equal(&sd->dacl->aces[i].trustee,
+					      &old->dacl->aces[j].trustee)) {
+                                        if (!(flags & SMBC_XATTR_FLAG_CREATE)) {
+                                                err = EEXIST;
+                                                ret = -1;
+                                                goto failed;
+                                        }
+                                        old->dacl->aces[j] = sd->dacl->aces[i];
+                                        ret = -1;
+					found = True;
+				}
+			}
+
+			if (!found && (flags & SMBC_XATTR_FLAG_REPLACE)) {
+                                err = ENOATTR;
+                                ret = -1;
+                                goto failed;
+			}
+                        
+                        for (i=0;sd->dacl && i<sd->dacl->num_aces;i++) {
+                                add_ace(&old->dacl, &sd->dacl->aces[i], ctx);
+                        }
+		}
+                dacl = old->dacl;
+		break;
+
+	case SMBC_XATTR_MODE_SET:
+ 		old = sd;
+                owner_sid = old->owner_sid;
+                group_sid = old->group_sid;
+                dacl = old->dacl;
+		break;
+
+        case SMBC_XATTR_MODE_CHOWN:
+                owner_sid = sd->owner_sid;
+                break;
+
+        case SMBC_XATTR_MODE_CHGRP:
+                group_sid = sd->group_sid;
+                break;
+	}
+
+	/* Denied ACE entries must come before allowed ones */
+	sort_acl(old->dacl);
+
+	/* Create new security descriptor and set it */
+	sd = make_sec_desc(ctx, old->revision, SEC_DESC_SELF_RELATIVE, 
+			   owner_sid, group_sid, NULL, dacl, &sd_size);
+
+	fnum = cli_nt_create(cli, filename,
+                             WRITE_DAC_ACCESS | WRITE_OWNER_ACCESS);
+
+	if (fnum == -1) {
+		DEBUG(5, ("cacl_set failed to open %s: %s\n",
+                          filename, cli_errstr(cli)));
+                errno = 0;
+		return -1;
+	}
+
+	if (!cli_set_secdesc(cli, fnum, sd)) {
+		DEBUG(5, ("ERROR: secdesc set failed: %s\n", cli_errstr(cli)));
+		ret = -1;
+	}
+
+	/* Clean up */
+
+ failed:
+	cli_close(cli, fnum);
+
+        if (err != 0) {
+                errno = err;
+        }
+        
+	return ret;
+}
+
+
+static int
+smbc_setxattr_ctx(SMBCCTX *context,
+                  const char *fname,
+                  const char *name,
+                  const void *value,
+                  size_t size,
+                  int flags)
+{
+        int ret;
+        int ret2;
+        SMBCSRV *srv;
+        SMBCSRV *ipc_srv;
+	fstring server;
+        fstring share;
+        fstring user;
+        fstring password;
+        fstring workgroup;
+	pstring path;
+        TALLOC_CTX *ctx;
+        POLICY_HND pol;
+        DOS_ATTR_DESC *dad;
+        struct {
+                const char * create_time_attr;
+                const char * access_time_attr;
+                const char * write_time_attr;
+                const char * change_time_attr;
+        } attr_strings;
+
+	if (!context || !context->internal ||
+	    !context->internal->_initialized) {
+
+		errno = EINVAL;  /* Best I can think of ... */
+		return -1;
+    
+	}
+
+	if (!fname) {
+
+		errno = EINVAL;
+		return -1;
+
+	}
+  
+	DEBUG(4, ("smbc_setxattr(%s, %s, %.*s)\n",
+                  fname, name, (int) size, (const char*)value));
+
+	if (smbc_parse_path(context, fname,
+                            workgroup, sizeof(workgroup),
+                            server, sizeof(server),
+                            share, sizeof(share),
+                            path, sizeof(path),
+                            user, sizeof(user),
+                            password, sizeof(password),
+                            NULL, 0)) {
+                errno = EINVAL;
+                return -1;
+        }
+
+	if (user[0] == (char)0) fstrcpy(user, context->user);
+
+	srv = smbc_server(context, True,
+                          server, share, workgroup, user, password);
+	if (!srv) {
+		return -1;  /* errno set by smbc_server */
+	}
+
+        if (! srv->no_nt_session) {
+                ipc_srv = smbc_attr_server(context, server, share,
+                                           workgroup, user, password,
+                                           &pol);
+                if (! ipc_srv) {
+                        srv->no_nt_session = True;
+                }
+        } else {
+                ipc_srv = NULL;
+        }
+        
+        ctx = talloc_init("smbc_setxattr");
+        if (!ctx) {
+                errno = ENOMEM;
+                return -1;
+        }
+
+        /*
+         * Are they asking to set the entire set of known attributes?
+         */
+        if (StrCaseCmp(name, "system.*") == 0 ||
+            StrCaseCmp(name, "system.*+") == 0) {
+                /* Yup. */
+                char *namevalue =
+                        talloc_asprintf(ctx, "%s:%s",
+                                        name+7, (const char *) value);
+                if (! namevalue) {
+                        errno = ENOMEM;
+                        ret = -1;
+                        return -1;
+                }
+
+                if (ipc_srv) {
+                        ret = cacl_set(ctx, srv->cli,
+                                       ipc_srv->cli, &pol, path,
+                                       namevalue,
+                                       (*namevalue == '*'
+                                        ? SMBC_XATTR_MODE_SET
+                                        : SMBC_XATTR_MODE_ADD),
+                                       flags);
+                } else {
+                        ret = 0;
+                }
+
+                /* get a DOS Attribute Descriptor with current attributes */
+                dad = dos_attr_query(context, ctx, path, srv);
+                if (dad) {
+                        /* Overwrite old with new, using what was provided */
+                        dos_attr_parse(context, dad, srv, namevalue);
+
+                        /* Set the new DOS attributes */
+                        if (! smbc_setatr(context, srv, path,
+                                          dad->create_time,
+                                          dad->access_time,
+                                          dad->write_time,
+                                          dad->change_time,
+                                          dad->mode)) {
+
+                                /* cause failure if NT failed too */
+                                dad = NULL; 
+                        }
+                }
+
+                /* we only fail if both NT and DOS sets failed */
+                if (ret < 0 && ! dad) {
+                        ret = -1; /* in case dad was null */
+                }
+                else {
+                        ret = 0;
+                }
+
+                talloc_destroy(ctx);
+                return ret;
+        }
+
+        /*
+         * Are they asking to set an access control element or to set
+         * the entire access control list?
+         */
+        if (StrCaseCmp(name, "system.nt_sec_desc.*") == 0 ||
+            StrCaseCmp(name, "system.nt_sec_desc.*+") == 0 ||
+            StrCaseCmp(name, "system.nt_sec_desc.revision") == 0 ||
+            StrnCaseCmp(name, "system.nt_sec_desc.acl", 22) == 0 ||
+            StrnCaseCmp(name, "system.nt_sec_desc.acl+", 23) == 0) {
+
+                /* Yup. */
+                char *namevalue =
+                        talloc_asprintf(ctx, "%s:%s",
+                                        name+19, (const char *) value);
+
+                if (! ipc_srv) {
+                        ret = -1; /* errno set by smbc_server() */
+                }
+                else if (! namevalue) {
+                        errno = ENOMEM;
+                        ret = -1;
+                } else {
+                        ret = cacl_set(ctx, srv->cli,
+                                       ipc_srv->cli, &pol, path,
+                                       namevalue,
+                                       (*namevalue == '*'
+                                        ? SMBC_XATTR_MODE_SET
+                                        : SMBC_XATTR_MODE_ADD),
+                                       flags);
+                }
+                talloc_destroy(ctx);
+                return ret;
+        }
+
+        /*
+         * Are they asking to set the owner?
+         */
+        if (StrCaseCmp(name, "system.nt_sec_desc.owner") == 0 ||
+            StrCaseCmp(name, "system.nt_sec_desc.owner+") == 0) {
+
+                /* Yup. */
+                char *namevalue =
+                        talloc_asprintf(ctx, "%s:%s",
+                                        name+19, (const char *) value);
+
+                if (! ipc_srv) {
+                        
+                        ret = -1; /* errno set by smbc_server() */
+                }
+                else if (! namevalue) {
+                        errno = ENOMEM;
+                        ret = -1;
+                } else {
+                        ret = cacl_set(ctx, srv->cli,
+                                       ipc_srv->cli, &pol, path,
+                                       namevalue, SMBC_XATTR_MODE_CHOWN, 0);
+                }
+                talloc_destroy(ctx);
+                return ret;
+        }
+
+        /*
+         * Are they asking to set the group?
+         */
+        if (StrCaseCmp(name, "system.nt_sec_desc.group") == 0 ||
+            StrCaseCmp(name, "system.nt_sec_desc.group+") == 0) {
+
+                /* Yup. */
+                char *namevalue =
+                        talloc_asprintf(ctx, "%s:%s",
+                                        name+19, (const char *) value);
+
+                if (! ipc_srv) {
+                        /* errno set by smbc_server() */
+                        ret = -1;
+                }
+                else if (! namevalue) {
+                        errno = ENOMEM;
+                        ret = -1;
+                } else {
+                        ret = cacl_set(ctx, srv->cli,
+                                       ipc_srv->cli, &pol, path,
+                                       namevalue, SMBC_XATTR_MODE_CHOWN, 0);
+                }
+                talloc_destroy(ctx);
+                return ret;
+        }
+
+        /* Determine whether to use old-style or new-style attribute names */
+        if (context->internal->_full_time_names) {
+                /* new-style names */
+                attr_strings.create_time_attr = "system.dos_attr.CREATE_TIME";
+                attr_strings.access_time_attr = "system.dos_attr.ACCESS_TIME";
+                attr_strings.write_time_attr = "system.dos_attr.WRITE_TIME";
+                attr_strings.change_time_attr = "system.dos_attr.CHANGE_TIME";
+        } else {
+                /* old-style names */
+                attr_strings.create_time_attr = NULL;
+                attr_strings.access_time_attr = "system.dos_attr.A_TIME";
+                attr_strings.write_time_attr = "system.dos_attr.M_TIME";
+                attr_strings.change_time_attr = "system.dos_attr.C_TIME";
+        }
+
+        /*
+         * Are they asking to set a DOS attribute?
+         */
+        if (StrCaseCmp(name, "system.dos_attr.*") == 0 ||
+            StrCaseCmp(name, "system.dos_attr.mode") == 0 ||
+            (attr_strings.create_time_attr != NULL &&
+             StrCaseCmp(name, attr_strings.create_time_attr) == 0) ||
+            StrCaseCmp(name, attr_strings.access_time_attr) == 0 ||
+            StrCaseCmp(name, attr_strings.write_time_attr) == 0 ||
+            StrCaseCmp(name, attr_strings.change_time_attr) == 0) {
+
+                /* get a DOS Attribute Descriptor with current attributes */
+                dad = dos_attr_query(context, ctx, path, srv);
+                if (dad) {
+                        char *namevalue =
+                                talloc_asprintf(ctx, "%s:%s",
+                                                name+16, (const char *) value);
+                        if (! namevalue) {
+                                errno = ENOMEM;
+                                ret = -1;
+                        } else {
+                                /* Overwrite old with provided new params */
+                                dos_attr_parse(context, dad, srv, namevalue);
+
+                                /* Set the new DOS attributes */
+                                ret2 = smbc_setatr(context, srv, path,
+                                                   dad->create_time,
+                                                   dad->access_time,
+                                                   dad->write_time,
+                                                   dad->change_time,
+                                                   dad->mode);
+
+                                /* ret2 has True (success) / False (failure) */
+                                if (ret2) {
+                                        ret = 0;
+                                } else {
+                                        ret = -1;
+                                }
+                        }
+                } else {
+                        ret = -1;
+                }
+
+                talloc_destroy(ctx);
+                return ret;
+        }
+
+        /* Unsupported attribute name */
+        talloc_destroy(ctx);
+        errno = EINVAL;
+        return -1;
+}
+
+static int
+smbc_getxattr_ctx(SMBCCTX *context,
+                  const char *fname,
+                  const char *name,
+                  const void *value,
+                  size_t size)
+{
+        int ret;
+        SMBCSRV *srv;
+        SMBCSRV *ipc_srv;
+        fstring server;
+        fstring share;
+        fstring user;
+        fstring password;
+        fstring workgroup;
+        pstring path;
+        TALLOC_CTX *ctx;
+        POLICY_HND pol;
+        struct {
+                const char * create_time_attr;
+                const char * access_time_attr;
+                const char * write_time_attr;
+                const char * change_time_attr;
+        } attr_strings;
+
+
+        if (!context || !context->internal ||
+            !context->internal->_initialized) {
+
+                errno = EINVAL;  /* Best I can think of ... */
+                return -1;
+    
+        }
+
+        if (!fname) {
+
+                errno = EINVAL;
+                return -1;
+
+        }
+  
+        DEBUG(4, ("smbc_getxattr(%s, %s)\n", fname, name));
+
+        if (smbc_parse_path(context, fname,
+                            workgroup, sizeof(workgroup),
+                            server, sizeof(server),
+                            share, sizeof(share),
+                            path, sizeof(path),
+                            user, sizeof(user),
+                            password, sizeof(password),
+                            NULL, 0)) {
+                errno = EINVAL;
+                return -1;
+        }
+
+        if (user[0] == (char)0) fstrcpy(user, context->user);
+
+        srv = smbc_server(context, True,
+                          server, share, workgroup, user, password);
+        if (!srv) {
+                return -1;  /* errno set by smbc_server */
+        }
+
+        if (! srv->no_nt_session) {
+                ipc_srv = smbc_attr_server(context, server, share,
+                                           workgroup, user, password,
+                                           &pol);
+                if (! ipc_srv) {
+                        srv->no_nt_session = True;
+                }
+        } else {
+                ipc_srv = NULL;
+        }
+        
+        ctx = talloc_init("smbc:getxattr");
+        if (!ctx) {
+                errno = ENOMEM;
+                return -1;
+        }
+
+        /* Determine whether to use old-style or new-style attribute names */
+        if (context->internal->_full_time_names) {
+                /* new-style names */
+                attr_strings.create_time_attr = "system.dos_attr.CREATE_TIME";
+                attr_strings.access_time_attr = "system.dos_attr.ACCESS_TIME";
+                attr_strings.write_time_attr = "system.dos_attr.WRITE_TIME";
+                attr_strings.change_time_attr = "system.dos_attr.CHANGE_TIME";
+        } else {
+                /* old-style names */
+                attr_strings.create_time_attr = NULL;
+                attr_strings.access_time_attr = "system.dos_attr.A_TIME";
+                attr_strings.write_time_attr = "system.dos_attr.M_TIME";
+                attr_strings.change_time_attr = "system.dos_attr.C_TIME";
+        }
+
+        /* Are they requesting a supported attribute? */
+        if (StrCaseCmp(name, "system.*") == 0 ||
+            StrnCaseCmp(name, "system.*!", 9) == 0 ||
+            StrCaseCmp(name, "system.*+") == 0 ||
+            StrnCaseCmp(name, "system.*+!", 10) == 0 ||
+            StrCaseCmp(name, "system.nt_sec_desc.*") == 0 ||
+            StrnCaseCmp(name, "system.nt_sec_desc.*!", 21) == 0 ||
+            StrCaseCmp(name, "system.nt_sec_desc.*+") == 0 ||
+            StrnCaseCmp(name, "system.nt_sec_desc.*+!", 22) == 0 ||
+            StrCaseCmp(name, "system.nt_sec_desc.revision") == 0 ||
+            StrCaseCmp(name, "system.nt_sec_desc.owner") == 0 ||
+            StrCaseCmp(name, "system.nt_sec_desc.owner+") == 0 ||
+            StrCaseCmp(name, "system.nt_sec_desc.group") == 0 ||
+            StrCaseCmp(name, "system.nt_sec_desc.group+") == 0 ||
+            StrnCaseCmp(name, "system.nt_sec_desc.acl", 22) == 0 ||
+            StrnCaseCmp(name, "system.nt_sec_desc.acl+", 23) == 0 ||
+            StrCaseCmp(name, "system.dos_attr.*") == 0 ||
+            StrnCaseCmp(name, "system.dos_attr.*!", 18) == 0 ||
+            StrCaseCmp(name, "system.dos_attr.mode") == 0 ||
+            StrCaseCmp(name, "system.dos_attr.size") == 0 ||
+            (attr_strings.create_time_attr != NULL &&
+             StrCaseCmp(name, attr_strings.create_time_attr) == 0) ||
+            StrCaseCmp(name, attr_strings.access_time_attr) == 0 ||
+            StrCaseCmp(name, attr_strings.write_time_attr) == 0 ||
+            StrCaseCmp(name, attr_strings.change_time_attr) == 0 ||
+            StrCaseCmp(name, "system.dos_attr.inode") == 0) {
+
+                /* Yup. */
+                ret = cacl_get(context, ctx, srv,
+                               ipc_srv == NULL ? NULL : ipc_srv->cli, 
+                               &pol, path,
+                               CONST_DISCARD(char *, name),
+                               CONST_DISCARD(char *, value), size);
+                if (ret < 0 && errno == 0) {
+                        errno = smbc_errno(context, srv->cli);
+                }
+                talloc_destroy(ctx);
+                return ret;
+        }
+
+        /* Unsupported attribute name */
+        talloc_destroy(ctx);
+        errno = EINVAL;
+        return -1;
+}
+
+
+static int
+smbc_removexattr_ctx(SMBCCTX *context,
+                     const char *fname,
+                     const char *name)
+{
+        int ret;
+        SMBCSRV *srv;
+        SMBCSRV *ipc_srv;
+        fstring server;
+        fstring share;
+        fstring user;
+        fstring password;
+        fstring workgroup;
+        pstring path;
+        TALLOC_CTX *ctx;
+        POLICY_HND pol;
+
+        if (!context || !context->internal ||
+            !context->internal->_initialized) {
+
+                errno = EINVAL;  /* Best I can think of ... */
+                return -1;
+    
+        }
+
+        if (!fname) {
+
+                errno = EINVAL;
+                return -1;
+
+        }
+  
+        DEBUG(4, ("smbc_removexattr(%s, %s)\n", fname, name));
+
+        if (smbc_parse_path(context, fname,
+                            workgroup, sizeof(workgroup),
+                            server, sizeof(server),
+                            share, sizeof(share),
+                            path, sizeof(path),
+                            user, sizeof(user),
+                            password, sizeof(password),
+                            NULL, 0)) {
+                errno = EINVAL;
+                return -1;
+        }
+
+        if (user[0] == (char)0) fstrcpy(user, context->user);
+
+        srv = smbc_server(context, True,
+                          server, share, workgroup, user, password);
+        if (!srv) {
+                return -1;  /* errno set by smbc_server */
+        }
+
+        if (! srv->no_nt_session) {
+                ipc_srv = smbc_attr_server(context, server, share,
+                                           workgroup, user, password,
+                                           &pol);
+                if (! ipc_srv) {
+                        srv->no_nt_session = True;
+                }
+        } else {
+                ipc_srv = NULL;
+        }
+        
+        if (! ipc_srv) {
+                return -1; /* errno set by smbc_attr_server */
+        }
+
+        ctx = talloc_init("smbc_removexattr");
+        if (!ctx) {
+                errno = ENOMEM;
+                return -1;
+        }
+
+        /* Are they asking to set the entire ACL? */
+        if (StrCaseCmp(name, "system.nt_sec_desc.*") == 0 ||
+            StrCaseCmp(name, "system.nt_sec_desc.*+") == 0) {
+
+                /* Yup. */
+                ret = cacl_set(ctx, srv->cli,
+                               ipc_srv->cli, &pol, path,
+                               NULL, SMBC_XATTR_MODE_REMOVE_ALL, 0);
+                talloc_destroy(ctx);
+                return ret;
+        }
+
+        /*
+         * Are they asking to remove one or more spceific security descriptor
+         * attributes?
+         */
+        if (StrCaseCmp(name, "system.nt_sec_desc.revision") == 0 ||
+            StrCaseCmp(name, "system.nt_sec_desc.owner") == 0 ||
+            StrCaseCmp(name, "system.nt_sec_desc.owner+") == 0 ||
+            StrCaseCmp(name, "system.nt_sec_desc.group") == 0 ||
+            StrCaseCmp(name, "system.nt_sec_desc.group+") == 0 ||
+            StrnCaseCmp(name, "system.nt_sec_desc.acl", 22) == 0 ||
+            StrnCaseCmp(name, "system.nt_sec_desc.acl+", 23) == 0) {
+
+                /* Yup. */
+                ret = cacl_set(ctx, srv->cli,
+                               ipc_srv->cli, &pol, path,
+                               name + 19, SMBC_XATTR_MODE_REMOVE, 0);
+                talloc_destroy(ctx);
+                return ret;
+        }
+
+        /* Unsupported attribute name */
+        talloc_destroy(ctx);
+        errno = EINVAL;
+        return -1;
+}
+
+static int
+smbc_listxattr_ctx(SMBCCTX *context,
+                   const char *fname,
+                   char *list,
+                   size_t size)
+{
+        /*
+         * This isn't quite what listxattr() is supposed to do.  This returns
+         * the complete set of attribute names, always, rather than only those
+         * attribute names which actually exist for a file.  Hmmm...
+         */
+        const char supported_old[] =
+                "system.*\0"
+                "system.*+\0"
+                "system.nt_sec_desc.revision\0"
+                "system.nt_sec_desc.owner\0"
+                "system.nt_sec_desc.owner+\0"
+                "system.nt_sec_desc.group\0"
+                "system.nt_sec_desc.group+\0"
+                "system.nt_sec_desc.acl.*\0"
+                "system.nt_sec_desc.acl\0"
+                "system.nt_sec_desc.acl+\0"
+                "system.nt_sec_desc.*\0"
+                "system.nt_sec_desc.*+\0"
+                "system.dos_attr.*\0"
+                "system.dos_attr.mode\0"
+                "system.dos_attr.c_time\0"
+                "system.dos_attr.a_time\0"
+                "system.dos_attr.m_time\0"
+                ;
+        const char supported_new[] =
+                "system.*\0"
+                "system.*+\0"
+                "system.nt_sec_desc.revision\0"
+                "system.nt_sec_desc.owner\0"
+                "system.nt_sec_desc.owner+\0"
+                "system.nt_sec_desc.group\0"
+                "system.nt_sec_desc.group+\0"
+                "system.nt_sec_desc.acl.*\0"
+                "system.nt_sec_desc.acl\0"
+                "system.nt_sec_desc.acl+\0"
+                "system.nt_sec_desc.*\0"
+                "system.nt_sec_desc.*+\0"
+                "system.dos_attr.*\0"
+                "system.dos_attr.mode\0"
+                "system.dos_attr.create_time\0"
+                "system.dos_attr.access_time\0"
+                "system.dos_attr.write_time\0"
+                "system.dos_attr.change_time\0"
+                ;
+        const char * supported;
+
+        if (context->internal->_full_time_names) {
+                supported = supported_new;
+        } else {
+                supported = supported_old;
+        }
+
+        if (size == 0) {
+                return sizeof(supported);
+        }
+
+        if (sizeof(supported) > size) {
+                errno = ERANGE;
+                return -1;
+        }
+
+        /* this can't be strcpy() because there are embedded null characters */
+        memcpy(list, supported, sizeof(supported));
+        return sizeof(supported);
+}
+
+
+/*
+ * Open a print file to be written to by other calls
+ */
+
+static SMBCFILE *
+smbc_open_print_job_ctx(SMBCCTX *context,
+                        const char *fname)
+{
+        fstring server;
+        fstring share;
+        fstring user;
+        fstring password;
+        pstring path;
+        
+        if (!context || !context->internal ||
+            !context->internal->_initialized) {
+
+                errno = EINVAL;
+                return NULL;
+    
+        }
+
+        if (!fname) {
+
+                errno = EINVAL;
+                return NULL;
+
+        }
+  
+        DEBUG(4, ("smbc_open_print_job_ctx(%s)\n", fname));
+
+        if (smbc_parse_path(context, fname,
+                            NULL, 0,
+                            server, sizeof(server),
+                            share, sizeof(share),
+                            path, sizeof(path),
+                            user, sizeof(user),
+                            password, sizeof(password),
+                            NULL, 0)) {
+                errno = EINVAL;
+                return NULL;
+        }
+
+        /* What if the path is empty, or the file exists? */
+
+        return (context->open)(context, fname, O_WRONLY, 666);
+
+}
+
+/*
+ * Routine to print a file on a remote server ...
+ *
+ * We open the file, which we assume to be on a remote server, and then
+ * copy it to a print file on the share specified by printq.
+ */
+
+static int
+smbc_print_file_ctx(SMBCCTX *c_file,
+                    const char *fname,
+                    SMBCCTX *c_print,
+                    const char *printq)
+{
+        SMBCFILE *fid1;
+        SMBCFILE *fid2;
+        int bytes;
+        int saverr;
+        int tot_bytes = 0;
+        char buf[4096];
+
+        if (!c_file || !c_file->internal->_initialized || !c_print ||
+            !c_print->internal->_initialized) {
+
+                errno = EINVAL;
+                return -1;
+
+        }
+
+        if (!fname && !printq) {
+
+                errno = EINVAL;
+                return -1;
+
+        }
+
+        /* Try to open the file for reading ... */
+
+        if ((long)(fid1 = (c_file->open)(c_file, fname, O_RDONLY, 0666)) < 0) {
+                
+                DEBUG(3, ("Error, fname=%s, errno=%i\n", fname, errno));
+                return -1;  /* smbc_open sets errno */
+                
+        }
+
+        /* Now, try to open the printer file for writing */
+
+        if ((long)(fid2 = (c_print->open_print_job)(c_print, printq)) < 0) {
+
+                saverr = errno;  /* Save errno */
+                (c_file->close_fn)(c_file, fid1);
+                errno = saverr;
+                return -1;
+
+        }
+
+        while ((bytes = (c_file->read)(c_file, fid1, buf, sizeof(buf))) > 0) {
+
+                tot_bytes += bytes;
+
+                if (((c_print->write)(c_print, fid2, buf, bytes)) < 0) {
+
+                        saverr = errno;
+                        (c_file->close_fn)(c_file, fid1);
+                        (c_print->close_fn)(c_print, fid2);
+                        errno = saverr;
+
+                }
+
+        }
+
+        saverr = errno;
+
+        (c_file->close_fn)(c_file, fid1);  /* We have to close these anyway */
+        (c_print->close_fn)(c_print, fid2);
+
+        if (bytes < 0) {
+
+                errno = saverr;
+                return -1;
+
+        }
+
+        return tot_bytes;
+
+}
+
+/*
+ * Routine to list print jobs on a printer share ...
+ */
+
+static int
+smbc_list_print_jobs_ctx(SMBCCTX *context,
+                         const char *fname,
+                         smbc_list_print_job_fn fn)
+{
+        SMBCSRV *srv;
+        fstring server;
+        fstring share;
+        fstring user;
+        fstring password;
+        fstring workgroup;
+        pstring path;
+
+        if (!context || !context->internal ||
+            !context->internal->_initialized) {
+
+                errno = EINVAL;
+                return -1;
+
+        }
+
+        if (!fname) {
+                
+                errno = EINVAL;
+                return -1;
+
+        }
+  
+        DEBUG(4, ("smbc_list_print_jobs(%s)\n", fname));
+
+        if (smbc_parse_path(context, fname,
+                            workgroup, sizeof(workgroup),
+                            server, sizeof(server),
+                            share, sizeof(share),
+                            path, sizeof(path),
+                            user, sizeof(user),
+                            password, sizeof(password),
+                            NULL, 0)) {
+                errno = EINVAL;
+                return -1;
+        }
+
+        if (user[0] == (char)0) fstrcpy(user, context->user);
+        
+        srv = smbc_server(context, True,
+                          server, share, workgroup, user, password);
+
+        if (!srv) {
+
+                return -1;  /* errno set by smbc_server */
+
+        }
+
+        if (cli_print_queue(srv->cli,
+                            (void (*)(struct print_job_info *))fn) < 0) {
+
+                errno = smbc_errno(context, srv->cli);
+                return -1;
+
+        }
+        
+        return 0;
+
+}
+
+/*
+ * Delete a print job from a remote printer share
+ */
+
+static int
+smbc_unlink_print_job_ctx(SMBCCTX *context,
+                          const char *fname,
+                          int id)
+{
+        SMBCSRV *srv;
+        fstring server;
+        fstring share;
+        fstring user;
+        fstring password;
+        fstring workgroup;
+        pstring path;
+        int err;
+
+        if (!context || !context->internal ||
+            !context->internal->_initialized) {
+
+                errno = EINVAL;
+                return -1;
+
+        }
+
+        if (!fname) {
+
+                errno = EINVAL;
+                return -1;
+
+        }
+  
+        DEBUG(4, ("smbc_unlink_print_job(%s)\n", fname));
+
+        if (smbc_parse_path(context, fname,
+                            workgroup, sizeof(workgroup),
+                            server, sizeof(server),
+                            share, sizeof(share),
+                            path, sizeof(path),
+                            user, sizeof(user),
+                            password, sizeof(password),
+                            NULL, 0)) {
+                errno = EINVAL;
+                return -1;
+        }
+
+        if (user[0] == (char)0) fstrcpy(user, context->user);
+
+        srv = smbc_server(context, True,
+                          server, share, workgroup, user, password);
+
+        if (!srv) {
+
+                return -1;  /* errno set by smbc_server */
+
+        }
+
+        if ((err = cli_printjob_del(srv->cli, id)) != 0) {
+
+                if (err < 0)
+                        errno = smbc_errno(context, srv->cli);
+                else if (err == ERRnosuchprintjob)
+                        errno = EINVAL;
+                return -1;
+
+        }
+
+        return 0;
+
+}
+
+/*
+ * Get a new empty handle to fill in with your own info 
+ */
+SMBCCTX *
+smbc_new_context(void)
+{
+        SMBCCTX *context;
+
+        context = SMB_MALLOC_P(SMBCCTX);
+        if (!context) {
+                errno = ENOMEM;
+                return NULL;
+        }
+
+        ZERO_STRUCTP(context);
+
+        context->internal = SMB_MALLOC_P(struct smbc_internal_data);
+        if (!context->internal) {
+		SAFE_FREE(context);
+                errno = ENOMEM;
+                return NULL;
+        }
+
+        ZERO_STRUCTP(context->internal);
+
+        
+        /* ADD REASONABLE DEFAULTS */
+        context->debug            = 0;
+        context->timeout          = 20000; /* 20 seconds */
+
+	context->options.browse_max_lmb_count      = 3;    /* # LMBs to query */
+	context->options.urlencode_readdir_entries = False;/* backward compat */
+	context->options.one_share_per_server      = False;/* backward compat */
+        context->internal->_share_mode             = SMBC_SHAREMODE_DENY_NONE;
+                                /* backward compat */
+
+        context->open                              = smbc_open_ctx;
+        context->creat                             = smbc_creat_ctx;
+        context->read                              = smbc_read_ctx;
+        context->write                             = smbc_write_ctx;
+        context->close_fn                          = smbc_close_ctx;
+        context->unlink                            = smbc_unlink_ctx;
+        context->rename                            = smbc_rename_ctx;
+        context->lseek                             = smbc_lseek_ctx;
+        context->stat                              = smbc_stat_ctx;
+        context->fstat                             = smbc_fstat_ctx;
+        context->opendir                           = smbc_opendir_ctx;
+        context->closedir                          = smbc_closedir_ctx;
+        context->readdir                           = smbc_readdir_ctx;
+        context->getdents                          = smbc_getdents_ctx;
+        context->mkdir                             = smbc_mkdir_ctx;
+        context->rmdir                             = smbc_rmdir_ctx;
+        context->telldir                           = smbc_telldir_ctx;
+        context->lseekdir                          = smbc_lseekdir_ctx;
+        context->fstatdir                          = smbc_fstatdir_ctx;
+        context->chmod                             = smbc_chmod_ctx;
+        context->utimes                            = smbc_utimes_ctx;
+        context->setxattr                          = smbc_setxattr_ctx;
+        context->getxattr                          = smbc_getxattr_ctx;
+        context->removexattr                       = smbc_removexattr_ctx;
+        context->listxattr                         = smbc_listxattr_ctx;
+        context->open_print_job                    = smbc_open_print_job_ctx;
+        context->print_file                        = smbc_print_file_ctx;
+        context->list_print_jobs                   = smbc_list_print_jobs_ctx;
+        context->unlink_print_job                  = smbc_unlink_print_job_ctx;
+
+        context->callbacks.check_server_fn         = smbc_check_server;
+        context->callbacks.remove_unused_server_fn = smbc_remove_unused_server;
+
+        smbc_default_cache_functions(context);
+
+        return context;
+}
+
+/* 
+ * Free a context
+ *
+ * Returns 0 on success. Otherwise returns 1, the SMBCCTX is _not_ freed 
+ * and thus you'll be leaking memory if not handled properly.
+ *
+ */
+int
+smbc_free_context(SMBCCTX *context,
+                  int shutdown_ctx)
+{
+        if (!context) {
+                errno = EBADF;
+                return 1;
+        }
+        
+        if (shutdown_ctx) {
+                SMBCFILE * f;
+                DEBUG(1,("Performing aggressive shutdown.\n"));
+                
+                f = context->internal->_files;
+                while (f) {
+                        (context->close_fn)(context, f);
+                        f = f->next;
+                }
+                context->internal->_files = NULL;
+
+                /* First try to remove the servers the nice way. */
+                if (context->callbacks.purge_cached_fn(context)) {
+                        SMBCSRV * s;
+                        SMBCSRV * next;
+                        DEBUG(1, ("Could not purge all servers, "
+                                  "Nice way shutdown failed.\n"));
+                        s = context->internal->_servers;
+                        while (s) {
+                                DEBUG(1, ("Forced shutdown: %p (fd=%d)\n",
+                                          s, s->cli->fd));
+                                cli_shutdown(s->cli);
+                                (context->callbacks.remove_cached_srv_fn)(context,
+                                                                          s);
+                                next = s->next;
+                                DLIST_REMOVE(context->internal->_servers, s);
+                                SAFE_FREE(s);
+                                s = next;
+                        }
+                        context->internal->_servers = NULL;
+                }
+        }
+        else {
+                /* This is the polite way */    
+                if ((context->callbacks.purge_cached_fn)(context)) {
+                        DEBUG(1, ("Could not purge all servers, "
+                                  "free_context failed.\n"));
+                        errno = EBUSY;
+                        return 1;
+                }
+                if (context->internal->_servers) {
+                        DEBUG(1, ("Active servers in context, "
+                                  "free_context failed.\n"));
+                        errno = EBUSY;
+                        return 1;
+                }
+                if (context->internal->_files) {
+                        DEBUG(1, ("Active files in context, "
+                                  "free_context failed.\n"));
+                        errno = EBUSY;
+                        return 1;
+                }               
+        }
+
+        /* Things we have to clean up */
+        SAFE_FREE(context->workgroup);
+        SAFE_FREE(context->netbios_name);
+        SAFE_FREE(context->user);
+        
+        DEBUG(3, ("Context %p successfully freed\n", context));
+        SAFE_FREE(context->internal);
+        SAFE_FREE(context);
+        return 0;
+}
+
+
+/*
+ * Each time the context structure is changed, we have binary backward
+ * compatibility issues.  Instead of modifying the public portions of the
+ * context structure to add new options, instead, we put them in the internal
+ * portion of the context structure and provide a set function for these new
+ * options.
+ */
+void
+smbc_option_set(SMBCCTX *context,
+                char *option_name,
+                ... /* option_value */)
+{
+        va_list ap;
+        union {
+                int i;
+                BOOL b;
+                smbc_get_auth_data_with_context_fn auth_fn;
+                void *v;
+        } option_value;
+
+        va_start(ap, option_name);
+
+        if (strcmp(option_name, "debug_to_stderr") == 0) {
+                /*
+                 * Log to standard error instead of standard output.
+                 */
+                option_value.b = (BOOL) va_arg(ap, int);
+                context->internal->_debug_stderr = option_value.b;
+
+        } else if (strcmp(option_name, "full_time_names") == 0) {
+                /*
+                 * Use new-style time attribute names, e.g. WRITE_TIME rather
+                 * than the old-style names such as M_TIME.  This allows also
+                 * setting/getting CREATE_TIME which was previously
+                 * unimplemented.  (Note that the old C_TIME was supposed to
+                 * be CHANGE_TIME but was confused and sometimes referred to
+                 * CREATE_TIME.)
+                 */
+                option_value.b = (BOOL) va_arg(ap, int);
+                context->internal->_full_time_names = option_value.b;
+
+        } else if (strcmp(option_name, "open_share_mode") == 0) {
+                /*
+                 * The share mode to use for files opened with
+                 * smbc_open_ctx().  The default is SMBC_SHAREMODE_DENY_NONE.
+                 */
+                option_value.i = va_arg(ap, int);
+                context->internal->_share_mode =
+                        (smbc_share_mode) option_value.i;
+
+        } else if (strcmp(option_name, "auth_function") == 0) {
+                /*
+                 * Use the new-style authentication function which includes
+                 * the context.
+                 */
+                option_value.auth_fn =
+                        va_arg(ap, smbc_get_auth_data_with_context_fn);
+                context->internal->_auth_fn_with_context =
+                        option_value.auth_fn;
+        } else if (strcmp(option_name, "user_data") == 0) {
+                /*
+                 * Save a user data handle which may be retrieved by the user
+                 * with smbc_option_get()
+                 */
+                option_value.v = va_arg(ap, void *);
+                context->internal->_user_data = option_value.v;
+        }
+
+        va_end(ap);
+}
+
+
+/*
+ * Retrieve the current value of an option
+ */
+void *
+smbc_option_get(SMBCCTX *context,
+                char *option_name)
+{
+        if (strcmp(option_name, "debug_stderr") == 0) {
+                /*
+                 * Log to standard error instead of standard output.
+                 */
+#if defined(__intptr_t_defined) || defined(HAVE_INTPTR_T)
+		return (void *) (intptr_t) context->internal->_debug_stderr;
+#else
+		return (void *) context->internal->_debug_stderr;
+#endif
+        } else if (strcmp(option_name, "full_time_names") == 0) {
+                /*
+                 * Use new-style time attribute names, e.g. WRITE_TIME rather
+                 * than the old-style names such as M_TIME.  This allows also
+                 * setting/getting CREATE_TIME which was previously
+                 * unimplemented.  (Note that the old C_TIME was supposed to
+                 * be CHANGE_TIME but was confused and sometimes referred to
+                 * CREATE_TIME.)
+                 */
+#if defined(__intptr_t_defined) || defined(HAVE_INTPTR_T)
+		return (void *) (intptr_t) context->internal->_full_time_names;
+#else
+		return (void *) context->internal->_full_time_names;
+#endif
+
+        } else if (strcmp(option_name, "auth_function") == 0) {
+                /*
+                 * Use the new-style authentication function which includes
+                 * the context.
+                 */
+                return (void *) context->internal->_auth_fn_with_context;
+        } else if (strcmp(option_name, "user_data") == 0) {
+                /*
+                 * Save a user data handle which may be retrieved by the user
+                 * with smbc_option_get()
+                 */
+                return context->internal->_user_data;
+        }
+
+        return NULL;
+}
+
+
+/*
+ * Initialise the library etc 
+ *
+ * We accept a struct containing handle information.
+ * valid values for info->debug from 0 to 100,
+ * and insist that info->fn must be non-null.
+ */
+SMBCCTX *
+smbc_init_context(SMBCCTX *context)
+{
+        pstring conf;
+        int pid;
+        char *user = NULL;
+        char *home = NULL;
+
+        if (!context || !context->internal) {
+                errno = EBADF;
+                return NULL;
+        }
+
+        /* Do not initialise the same client twice */
+        if (context->internal->_initialized) { 
+                return 0;
+        }
+
+        if ((!context->callbacks.auth_fn &&
+             !context->internal->_auth_fn_with_context) ||
+            context->debug < 0 ||
+            context->debug > 100) {
+
+                errno = EINVAL;
+                return NULL;
+
+        }
+
+        if (!smbc_initialized) {
+                /*
+                 * Do some library-wide intializations the first time we get
+                 * called
+                 */
+		BOOL conf_loaded = False;
+
+                /* Set this to what the user wants */
+                DEBUGLEVEL = context->debug;
+                
+                load_case_tables();
+
+                setup_logging("libsmbclient", True);
+                if (context->internal->_debug_stderr) {
+                        dbf = x_stderr;
+                        x_setbuf(x_stderr, NULL);
+                }
+
+                /* Here we would open the smb.conf file if needed ... */
+                
+                in_client = True; /* FIXME, make a param */
+
+                home = getenv("HOME");
+		if (home) {
+			slprintf(conf, sizeof(conf), "%s/.smb/smb.conf", home);
+			if (lp_load(conf, True, False, False, True)) {
+				conf_loaded = True;
+			} else {
+                                DEBUG(5, ("Could not load config file: %s\n",
+                                          conf));
+			}
+               	}
+ 
+		if (!conf_loaded) {
+                        /*
+                         * Well, if that failed, try the dyn_CONFIGFILE
+                         * Which points to the standard locn, and if that
+                         * fails, silently ignore it and use the internal
+                         * defaults ...
+                         */
+
+                        if (!lp_load(dyn_CONFIGFILE, True, False, False, False)) {
+                                DEBUG(5, ("Could not load config file: %s\n",
+                                          dyn_CONFIGFILE));
+                        } else if (home) {
+                                /*
+                                 * We loaded the global config file.  Now lets
+                                 * load user-specific modifications to the
+                                 * global config.
+                                 */
+                                slprintf(conf, sizeof(conf),
+                                         "%s/.smb/smb.conf.append", home);
+                                if (!lp_load(conf, True, False, False, False)) {
+                                        DEBUG(10,
+                                              ("Could not append config file: "
+                                               "%s\n",
+                                               conf));
+                                }
+                        }
+                }
+
+                load_interfaces();  /* Load the list of interfaces ... */
+                
+                reopen_logs();  /* Get logging working ... */
+        
+                /* 
+                 * Block SIGPIPE (from lib/util_sock.c: write())  
+                 * It is not needed and should not stop execution 
+                 */
+                BlockSignals(True, SIGPIPE);
+                
+                /* Done with one-time initialisation */
+                smbc_initialized = 1; 
+
+        }
+        
+        if (!context->user) {
+                /*
+                 * FIXME: Is this the best way to get the user info? 
+                 */
+                user = getenv("USER");
+                /* walk around as "guest" if no username can be found */
+                if (!user) context->user = SMB_STRDUP("guest");
+                else context->user = SMB_STRDUP(user);
+        }
+
+        if (!context->netbios_name) {
+                /*
+                 * We try to get our netbios name from the config. If that
+                 * fails we fall back on constructing our netbios name from
+                 * our hostname etc
+                 */
+                if (global_myname()) {
+                        context->netbios_name = SMB_STRDUP(global_myname());
+                }
+                else {
+                        /*
+                         * Hmmm, I want to get hostname as well, but I am too
+                         * lazy for the moment
+                         */
+                        pid = sys_getpid();
+                        context->netbios_name = (char *)SMB_MALLOC(17);
+                        if (!context->netbios_name) {
+                                errno = ENOMEM;
+                                return NULL;
+                        }
+                        slprintf(context->netbios_name, 16,
+                                 "smbc%s%d", context->user, pid);
+                }
+        }
+
+        DEBUG(1, ("Using netbios name %s.\n", context->netbios_name));
+
+        if (!context->workgroup) {
+                if (lp_workgroup()) {
+                        context->workgroup = SMB_STRDUP(lp_workgroup());
+                }
+                else {
+                        /* TODO: Think about a decent default workgroup */
+                        context->workgroup = SMB_STRDUP("samba");
+                }
+        }
+
+        DEBUG(1, ("Using workgroup %s.\n", context->workgroup));
+                                        
+        /* shortest timeout is 1 second */
+        if (context->timeout > 0 && context->timeout < 1000) 
+                context->timeout = 1000;
+
+        /*
+         * FIXME: Should we check the function pointers here? 
+         */
+
+        context->internal->_initialized = True;
+        
+        return context;
+}
+
+
+/* Return the verion of samba, and thus libsmbclient */
+const char *
+smbc_version(void)
+{
+        return samba_version_string();
+}

Modified: branches/samba/upstream/source/libsmb/namecache.c
===================================================================
--- branches/samba/upstream/source/libsmb/namecache.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/namecache.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,44 +1,45 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
 
    NetBIOS name cache module on top of gencache mechanism.
-
+   
    Copyright (C) Tim Potter         2002
    Copyright (C) Rafal Szczesniak   2002
-   Copyright (C) Jeremy Allison     2007
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
 #define NBTKEY_FMT  "NBT/%s#%02X"
 
+
 /**
  * Initialise namecache system. Function calls gencache
  * initialisation function to perform necessary actions
- *
+ * 
  * @return true upon successful initialisation of the cache or
  *         false on failure
  **/
 
-bool namecache_enable(void)
+BOOL namecache_enable(void)
 {
 	/*
 	 * Check if name caching disabled by setting the name cache
 	 * timeout to zero.
-	 */
+	 */ 
 
 	if (lp_name_cache_timeout() == 0) {
 		DEBUG(5, ("namecache_enable: disabling netbios name cache\n"));
@@ -48,19 +49,18 @@
 	/* Init namecache by calling gencache initialisation */
 
 	if (!gencache_init()) {
-		DEBUG(2, ("namecache_enable: "
-			"Couldn't initialise namecache on top of gencache.\n"));
+		DEBUG(2, ("namecache_enable: Couldn't initialise namecache on top of gencache.\n"));
 		return False;
 	}
 
-	/* I leave it for now, though I don't think we really
-	 * need this (mimir, 27.09.2002) */
+	/* I leave it for now, though I don't think we really need this (mimir, 27.09.2002) */
 	DEBUG(5, ("namecache_enable: enabling netbios namecache, timeout %d "
 		  "seconds\n", lp_name_cache_timeout()));
 
 	return True;
 }
 
+
 /**
  * Shutdown namecache. Routine calls gencache close function
  * to safely close gencache file.
@@ -68,20 +68,19 @@
  * @return true upon successful shutdown of the cache or
  *         false on failure
  **/
-
-bool namecache_shutdown(void)
+ 
+BOOL namecache_shutdown(void)
 {
 	if (!gencache_shutdown()) {
-		DEBUG(2, ("namecache_shutdown: "
-			"Couldn't close namecache on top of gencache.\n"));
+		DEBUG(2, ("namecache_shutdown: Couldn't close namecache on top of gencache.\n"));
 		return False;
 	}
-
-	DEBUG(5, ("namecache_shutdown: "
-		"netbios namecache closed successfully.\n"));
+	
+	DEBUG(5, ("namecache_shutdown: netbios namecache closed successfully.\n"));
 	return True;
 }
 
+
 /**
  * Generates a key for netbios name lookups on basis of
  * netbios name and type.
@@ -94,15 +93,15 @@
  *         type number
  */
 
-static char* namecache_key(const char *name,
-				int name_type)
+static char* namecache_key(const char *name, int name_type)
 {
 	char *keystr;
-	asprintf_strupper_m(&keystr, NBTKEY_FMT, name, name_type);
+	asprintf(&keystr, NBTKEY_FMT, strupper_static(name), name_type);
 
 	return keystr;
 }
 
+
 /**
  * Store a name(s) in the name cache
  *
@@ -113,49 +112,35 @@
  *        ip addresses being stored
  **/
 
-bool namecache_store(const char *name,
-			int name_type,
-			int num_names,
-			struct ip_service *ip_list)
+BOOL namecache_store(const char *name, int name_type,
+                     int num_names, struct ip_service *ip_list)
 {
 	time_t expiry;
 	char *key, *value_string;
 	int i;
-	bool ret;
+	BOOL ret;
 
 	/*
 	 * we use gecache call to avoid annoying debug messages about
 	 * initialised namecache again and again...
 	 */
-	if (!gencache_init()) {
-		return False;
-	}
+	if (!gencache_init()) return False;
 
 	if (name_type > 255) {
 		return False; /* Don't store non-real name types. */
 	}
 
 	if ( DEBUGLEVEL >= 5 ) {
-		TALLOC_CTX *ctx = talloc_stackframe();
-		char *addr = NULL;
-
 		DEBUG(5, ("namecache_store: storing %d address%s for %s#%02x: ",
 			num_names, num_names == 1 ? "": "es", name, name_type));
 
-		for (i = 0; i < num_names; i++) {
-			addr = print_canonical_sockaddr(ctx,
-							&ip_list[i].ss);
-			if (!addr) {
-				continue;
-			}
-			DEBUGADD(5, ("%s%s", addr,
-				(i == (num_names - 1) ? "" : ",")));
-
-		}
+		for (i = 0; i < num_names; i++) 
+			DEBUGADD(5, ("%s:%d%s", inet_ntoa(ip_list[i].ip), 
+				ip_list[i].port, (i == (num_names - 1) ? "" : ",")));
+			
 		DEBUGADD(5, ("\n"));
-		TALLOC_FREE(ctx);
 	}
-
+	
 	key = namecache_key(name, name_type);
 	if (!key) {
 		return False;
@@ -171,9 +156,9 @@
 	if (!ipstr_list_make(&value_string, ip_list, num_names)) {
 		SAFE_FREE(key);
 		SAFE_FREE(value_string);
-		return false;
+		return False;
 	}
-
+	
 	/* set the entry */
 	ret = gencache_set(key, value_string, expiry);
 	SAFE_FREE(key);
@@ -181,6 +166,7 @@
 	return ret;
 }
 
+
 /**
  * Look up a name in the cache.
  *
@@ -194,22 +180,17 @@
  *         false if name isn't found in the cache or has expired
  **/
 
-bool namecache_fetch(const char *name,
-			int name_type,
-			struct ip_service **ip_list,
-			int *num_names)
+BOOL namecache_fetch(const char *name, int name_type, struct ip_service **ip_list,
+                     int *num_names)
 {
 	char *key, *value;
 	time_t timeout;
 
 	/* exit now if null pointers were passed as they're required further */
-	if (!ip_list || !num_names) {
-		return False;
-	}
+	if (!ip_list || !num_names) return False;
 
-	if (!gencache_init()) {
+	if (!gencache_init())
 		return False;
-	}
 
 	if (name_type > 255) {
 		return False; /* Don't fetch non-real name types. */
@@ -217,7 +198,7 @@
 
 	*num_names = 0;
 
-	/*
+	/* 
 	 * Use gencache interface - lookup the key
 	 */
 	key = namecache_key(name, name_type);
@@ -232,16 +213,16 @@
 	} else {
 		DEBUG(5, ("name %s#%02X found.\n", name, name_type));
 	}
-
+	
 	/*
 	 * Split up the stored value into the list of IP adresses
 	 */
 	*num_names = ipstr_list_parse(value, ip_list);
-
+	
 	SAFE_FREE(key);
 	SAFE_FREE(value);
-
-	return *num_names > 0; /* true only if some ip has been fetched */
+			 
+	return *num_names > 0;		/* true only if some ip has been fetched */
 }
 
 /**
@@ -249,9 +230,9 @@
  *
  **/
 
-bool namecache_delete(const char *name, int name_type)
+BOOL namecache_delete(const char *name, int name_type)
 {
-	bool ret;
+	BOOL ret;
 	char *key;
 
 	if (!gencache_init())
@@ -276,30 +257,27 @@
  *
  **/
 
-static void flush_netbios_name(const char *key,
-			const char *value,
-			time_t timeout,
-			void *dptr)
+static void flush_netbios_name(const char* key, const char *value, time_t timeout, void* dptr)
 {
 	gencache_del(key);
 	DEBUG(5, ("Deleting entry %s\n", key));
 }
 
+
 /**
  * Flush all names from the name cache.
  * It's done by gencache_iterate()
  *
- * @return true upon successful deletion or
- *         false in case of an error
+ * @return True upon successful deletion or
+ *         False in case of an error
  **/
 
 void namecache_flush(void)
 {
-	if (!gencache_init()) {
+	if (!gencache_init())
 		return;
-	}
 
-	/*
+	/* 
 	 * iterate through each NBT cache's entry and flush it
 	 * by flush_netbios_name function
 	 */
@@ -309,49 +287,40 @@
 
 /* Construct a name status record key. */
 
-static char *namecache_status_record_key(const char *name,
-				int name_type1,
-				int name_type2,
-				const struct sockaddr_storage *keyip)
+static char *namecache_status_record_key(const char *name, int name_type1,
+				int name_type2, struct in_addr keyip)
 {
-	char addr[INET6_ADDRSTRLEN];
 	char *keystr;
 
-	print_sockaddr(addr, sizeof(addr), keyip);
-	asprintf_strupper_m(&keystr, "NBT/%s#%02X.%02X.%s", name,
-			    name_type1, name_type2, addr);
+	asprintf(&keystr, "NBT/%s#%02X.%02X.%s",
+			strupper_static(name), name_type1, name_type2, inet_ntoa(keyip));
 	return keystr;
 }
 
 /* Store a name status record. */
 
-bool namecache_status_store(const char *keyname, int keyname_type,
-		int name_type, const struct sockaddr_storage *keyip,
+BOOL namecache_status_store(const char *keyname, int keyname_type,
+		int name_type, struct in_addr keyip,
 		const char *srvname)
 {
 	char *key;
 	time_t expiry;
-	bool ret;
+	BOOL ret;
 
-	if (!gencache_init()) {
+	if (!gencache_init())
 		return False;
-	}
 
-	key = namecache_status_record_key(keyname, keyname_type,
-			name_type, keyip);
+	key = namecache_status_record_key(keyname, keyname_type, name_type, keyip);
 	if (!key)
 		return False;
 
 	expiry = time(NULL) + lp_name_cache_timeout();
 	ret = gencache_set(key, srvname, expiry);
 
-	if (ret) {
-		DEBUG(5, ("namecache_status_store: entry %s -> %s\n",
-					key, srvname ));
-	} else {
-		DEBUG(5, ("namecache_status_store: entry %s store failed.\n",
-					key ));
-	}
+	if (ret)
+		DEBUG(5, ("namecache_status_store: entry %s -> %s\n", key, srvname ));
+	else
+		DEBUG(5, ("namecache_status_store: entry %s store failed.\n", key ));
 
 	SAFE_FREE(key);
 	return ret;
@@ -359,11 +328,8 @@
 
 /* Fetch a name status record. */
 
-bool namecache_status_fetch(const char *keyname,
-				int keyname_type,
-				int name_type,
-				const struct sockaddr_storage *keyip,
-				char *srvname_out)
+BOOL namecache_status_fetch(const char *keyname, int keyname_type,
+			int name_type, struct in_addr keyip, char *srvname_out)
 {
 	char *key = NULL;
 	char *value = NULL;
@@ -372,19 +338,16 @@
 	if (!gencache_init())
 		return False;
 
-	key = namecache_status_record_key(keyname, keyname_type,
-			name_type, keyip);
+	key = namecache_status_record_key(keyname, keyname_type, name_type, keyip);
 	if (!key)
 		return False;
 
 	if (!gencache_get(key, &value, &timeout)) {
-		DEBUG(5, ("namecache_status_fetch: no entry for %s found.\n",
-					key));
+		DEBUG(5, ("namecache_status_fetch: no entry for %s found.\n", key));
 		SAFE_FREE(key);
 		return False;
 	} else {
-		DEBUG(5, ("namecache_status_fetch: key %s -> %s\n",
-					key, value ));
+		DEBUG(5, ("namecache_status_fetch: key %s -> %s\n", key, value ));
 	}
 
 	strlcpy(srvname_out, value, 16);

Modified: branches/samba/upstream/source/libsmb/namequery.c
===================================================================
--- branches/samba/upstream/source/libsmb/namequery.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/namequery.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,35 +1,35 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    name query routines
    Copyright (C) Andrew Tridgell 1994-1998
-   Copyright (C) Jeremy Allison 2007.
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.   
 */
 
 #include "includes.h"
 
 /* nmbd.c sets this to True. */
-bool global_in_nmbd = False;
+BOOL global_in_nmbd = False;
 
 /****************************
  * SERVER AFFINITY ROUTINES *
  ****************************/
-
- /* Server affinity is the concept of preferring the last domain
+ 
+ /* Server affinity is the concept of preferring the last domain 
     controller with whom you had a successful conversation */
-
+ 
 /****************************************************************************
 ****************************************************************************/
 #define SAFKEY_FMT	"SAF/DOMAIN/%s"
@@ -38,67 +38,66 @@
 static char *saf_key(const char *domain)
 {
 	char *keystr;
+	
+	asprintf( &keystr, SAFKEY_FMT, strupper_static(domain) );
 
-	asprintf_strupper_m(&keystr, SAFKEY_FMT, domain);
-
 	return keystr;
 }
 
 /****************************************************************************
 ****************************************************************************/
 
-bool saf_store( const char *domain, const char *servername )
+BOOL saf_store( const char *domain, const char *servername )
 {
 	char *key;
 	time_t expire;
-	bool ret = False;
-
+	BOOL ret = False;
+	
 	if ( !domain || !servername ) {
-		DEBUG(2,("saf_store: "
-			"Refusing to store empty domain or servername!\n"));
+		DEBUG(2,("saf_store: Refusing to store empty domain or servername!\n"));
 		return False;
 	}
 
 	if ( (strlen(domain) == 0) || (strlen(servername) == 0) ) {
-		DEBUG(0,("saf_store: "
-			"refusing to store 0 length domain or servername!\n"));
+		DEBUG(0,("saf_store: refusing to store 0 length domain or servername!\n"));
 		return False;
 	}
-
-	if ( !gencache_init() )
+	
+	if ( !gencache_init() ) 
 		return False;
-
+	
 	key = saf_key( domain );
 	expire = time( NULL ) + SAF_TTL;
-
+	
+	
 	DEBUG(10,("saf_store: domain = [%s], server = [%s], expire = [%u]\n",
 		domain, servername, (unsigned int)expire ));
-
+		
 	ret = gencache_set( key, servername, expire );
-
+	
 	SAFE_FREE( key );
-
+	
 	return ret;
 }
 
-bool saf_delete( const char *domain )
+BOOL saf_delete( const char *domain )
 {
 	char *key;
-	bool ret = False;
-
+	BOOL ret = False;
+	
 	if ( !domain ) {
-		DEBUG(2,("saf_delete: Refusing to delete empty domain\n"));
+		DEBUG(2,("saf_delete: Refusing to delete empty domain\n"));		
 		return False;
 	}
-
-	if ( !gencache_init() )
+	
+	if ( !gencache_init() ) 
 		return False;
-
+	
 	key = saf_key(domain);
 	ret = gencache_del(key);
-
+	
 	if (ret) {
-		DEBUG(10,("saf_delete: domain = [%s]\n", domain ));
+		DEBUG(10,("saf_delete: domain = [%s]\n", domain ));		
 	}
 
 	SAFE_FREE( key );
@@ -113,31 +112,30 @@
 {
 	char *server = NULL;
 	time_t timeout;
-	bool ret = False;
+	BOOL ret = False;
 	char *key = NULL;
 
 	if ( !domain || strlen(domain) == 0) {
 		DEBUG(2,("saf_fetch: Empty domain name!\n"));
 		return NULL;
 	}
-
-	if ( !gencache_init() )
+	
+	if ( !gencache_init() ) 
 		return False;
-
+	
 	key = saf_key( domain );
-
+	
 	ret = gencache_get( key, &server, &timeout );
-
+	
 	SAFE_FREE( key );
-
+	
 	if ( !ret ) {
-		DEBUG(5,("saf_fetch: failed to find server for \"%s\" domain\n",
-					domain ));
+		DEBUG(5,("saf_fetch: failed to find server for \"%s\" domain\n", domain ));
 	} else {
-		DEBUG(5,("saf_fetch: Returning \"%s\" for \"%s\" domain\n",
+		DEBUG(5,("saf_fetch: Returning \"%s\" for \"%s\" domain\n", 
 			server, domain ));
 	}
-
+		
 	return server;
 }
 
@@ -147,20 +145,22 @@
 
 static int generate_trn_id(void)
 {
-	uint16 id;
+	static int trn_id;
 
-	generate_random_buffer((uint8 *)&id, sizeof(id));
+	if (trn_id == 0) {
+		sys_srandom(sys_getpid());
+	}
 
-	return id % (unsigned)0x7FFF;
+	trn_id = sys_random();
+
+	return trn_id % (unsigned)0x7FFF;
 }
 
 /****************************************************************************
  Parse a node status response into an array of structures.
 ****************************************************************************/
 
-static NODE_STATUS_STRUCT *parse_node_status(char *p,
-				int *num_names,
-				struct node_status_extra *extra)
+static NODE_STATUS_STRUCT *parse_node_status(char *p, int *num_names, struct node_status_extra *extra)
 {
 	NODE_STATUS_STRUCT *ret;
 	int i;
@@ -181,7 +181,7 @@
 		ret[i].type = CVAL(p,15);
 		ret[i].flags = p[16];
 		p += 18;
-		DEBUG(10, ("%s#%02x: flags = 0x%02x\n", ret[i].name,
+		DEBUG(10, ("%s#%02x: flags = 0x%02x\n", ret[i].name, 
 			   ret[i].type, ret[i].flags));
 	}
 	/*
@@ -199,13 +199,11 @@
  structures holding the returned names or NULL if the query failed.
 **************************************************************************/
 
-NODE_STATUS_STRUCT *node_status_query(int fd,
-					struct nmb_name *name,
-					const struct sockaddr_storage *to_ss,
-					int *num_names,
-					struct node_status_extra *extra)
+NODE_STATUS_STRUCT *node_status_query(int fd,struct nmb_name *name,
+				      struct in_addr to_ip, int *num_names,
+				      struct node_status_extra *extra)
 {
-	bool found=False;
+	BOOL found=False;
 	int retries = 2;
 	int retry_time = 2000;
 	struct timeval tval;
@@ -216,18 +214,14 @@
 
 	ZERO_STRUCT(p);
 
-	if (to_ss->ss_family != AF_INET) {
-		/* Can't do node status to IPv6 */
-		return NULL;
-	}
 	nmb->header.name_trn_id = generate_trn_id();
 	nmb->header.opcode = 0;
-	nmb->header.response = false;
-	nmb->header.nm_flags.bcast = false;
-	nmb->header.nm_flags.recursion_available = false;
-	nmb->header.nm_flags.recursion_desired = false;
-	nmb->header.nm_flags.trunc = false;
-	nmb->header.nm_flags.authoritative = false;
+	nmb->header.response = False;
+	nmb->header.nm_flags.bcast = False;
+	nmb->header.nm_flags.recursion_available = False;
+	nmb->header.nm_flags.recursion_desired = False;
+	nmb->header.nm_flags.trunc = False;
+	nmb->header.nm_flags.authoritative = False;
 	nmb->header.rcode = 0;
 	nmb->header.qdcount = 1;
 	nmb->header.ancount = 0;
@@ -237,15 +231,15 @@
 	nmb->question.question_type = 0x21;
 	nmb->question.question_class = 0x1;
 
-	p.ip = ((const struct sockaddr_in *)to_ss)->sin_addr;
+	p.ip = to_ip;
 	p.port = NMB_PORT;
 	p.fd = fd;
 	p.timestamp = time(NULL);
 	p.packet_type = NMB_PACKET;
-
+	
 	GetTimeOfDay(&tval);
-
-	if (!send_packet(&p))
+  
+	if (!send_packet(&p)) 
 		return NULL;
 
 	retries--;
@@ -262,10 +256,10 @@
 			retries--;
 		}
 
-		if ((p2=receive_nmb_packet(fd,90,nmb->header.name_trn_id))) {
+		if ((p2=receive_nmb_packet(fd,90,nmb->header.name_trn_id))) {     
 			struct nmb_packet *nmb2 = &p2->packet.nmb;
 			debug_nmb_packet(p2);
-
+			
 			if (nmb2->header.opcode != 0 ||
 			    nmb2->header.nm_flags.bcast ||
 			    nmb2->header.rcode ||
@@ -278,13 +272,12 @@
 				continue;
 			}
 
-			ret = parse_node_status(&nmb2->answers->rdata[0],
-					num_names, extra);
+			ret = parse_node_status(&nmb2->answers->rdata[0], num_names, extra);
 			free_packet(p2);
 			return ret;
 		}
 	}
-
+	
 	return NULL;
 }
 
@@ -293,54 +286,34 @@
  a servers name given its IP. Return the matched name in *name.
 **************************************************************************/
 
-bool name_status_find(const char *q_name,
-			int q_type,
-			int type,
-			const struct sockaddr_storage *to_ss,
-			fstring name)
+BOOL name_status_find(const char *q_name, int q_type, int type, struct in_addr to_ip, fstring name)
 {
-	char addr[INET6_ADDRSTRLEN];
-	struct sockaddr_storage ss;
 	NODE_STATUS_STRUCT *status = NULL;
 	struct nmb_name nname;
 	int count, i;
 	int sock;
-	bool result = false;
+	BOOL result = False;
 
 	if (lp_disable_netbios()) {
-		DEBUG(5,("name_status_find(%s#%02x): netbios is disabled\n",
-					q_name, q_type));
+		DEBUG(5,("name_status_find(%s#%02x): netbios is disabled\n", q_name, q_type));
 		return False;
 	}
 
-	print_sockaddr(addr, sizeof(addr), to_ss);
+	DEBUG(10, ("name_status_find: looking up %s#%02x at %s\n", q_name, 
+		   q_type, inet_ntoa(to_ip)));
 
-	DEBUG(10, ("name_status_find: looking up %s#%02x at %s\n", q_name,
-		   q_type, addr));
-
 	/* Check the cache first. */
 
-	if (namecache_status_fetch(q_name, q_type, type, to_ss, name)) {
+	if (namecache_status_fetch(q_name, q_type, type, to_ip, name))
 		return True;
-	}
 
-	if (to_ss->ss_family != AF_INET) {
-		/* Can't do node status to IPv6 */
-		return false;
-	}
-
-	if (!interpret_string_addr(&ss, lp_socket_address(),
-				AI_NUMERICHOST|AI_PASSIVE)) {
-		zero_addr(&ss);
-	}
-
-	sock = open_socket_in(SOCK_DGRAM, 0, 3, &ss, True);
+	sock = open_socket_in(SOCK_DGRAM, 0, 3, interpret_addr(lp_socket_address()), True);
 	if (sock == -1)
 		goto done;
 
 	/* W2K PDC's seem not to respond to '*'#0. JRA */
 	make_nmb_name(&nname, q_name, q_type);
-	status = node_status_query(sock, &nname, to_ss, &count, NULL);
+	status = node_status_query(sock, &nname, to_ip, &count, NULL);
 	close(sock);
 	if (!status)
 		goto done;
@@ -355,107 +328,55 @@
 	pull_ascii_nstring(name, sizeof(fstring), status[i].name);
 
 	/* Store the result in the cache. */
-	/* but don't store an entry for 0x1c names here.  Here we have
+	/* but don't store an entry for 0x1c names here.  Here we have 
 	   a single host and DOMAIN<0x1c> names should be a list of hosts */
+	   
+	if ( q_type != 0x1c )
+		namecache_status_store(q_name, q_type, type, to_ip, name);
 
-	if ( q_type != 0x1c ) {
-		namecache_status_store(q_name, q_type, type, to_ss, name);
-	}
+	result = True;
 
-	result = true;
-
  done:
 	SAFE_FREE(status);
 
 	DEBUG(10, ("name_status_find: name %sfound", result ? "" : "not "));
 
 	if (result)
-		DEBUGADD(10, (", name %s ip address is %s", name, addr));
+		DEBUGADD(10, (", name %s ip address is %s", name, inet_ntoa(to_ip)));
 
-	DEBUG(10, ("\n"));
+	DEBUG(10, ("\n"));	
 
 	return result;
 }
 
 /*
-  comparison function used by sort_addr_list
+  comparison function used by sort_ip_list
 */
 
-static int addr_compare(const struct sockaddr_storage *ss1,
-		const struct sockaddr_storage *ss2)
+static int ip_compare(struct in_addr *ip1, struct in_addr *ip2)
 {
 	int max_bits1=0, max_bits2=0;
 	int num_interfaces = iface_count();
 	int i;
 
-	/* Sort IPv6 addresses first. */
-	if (ss1->ss_family != ss2->ss_family) {
-		if (ss2->ss_family == AF_INET) {
-			return -1;
-		} else {
-			return 1;
-		}
-	}
-
-	/* Here we know both addresses are of the same
-	 * family. */
-
 	for (i=0;i<num_interfaces;i++) {
-		const struct sockaddr_storage *pss = iface_n_bcast(i);
-		unsigned char *p_ss1 = NULL;
-		unsigned char *p_ss2 = NULL;
-		unsigned char *p_if = NULL;
-		size_t len = 0;
+		struct in_addr ip;
 		int bits1, bits2;
-
-		if (pss->ss_family != ss1->ss_family) {
-			/* Ignore interfaces of the wrong type. */
-			continue;
-		}
-		if (pss->ss_family == AF_INET) {
-			p_if = (unsigned char *)
-				&((const struct sockaddr_in *)pss)->sin_addr;
-			p_ss1 = (unsigned char *)
-				&((const struct sockaddr_in *)ss1)->sin_addr;
-			p_ss2 = (unsigned char *)
-				&((const struct sockaddr_in *)ss2)->sin_addr;
-			len = 4;
-		}
-#if defined(HAVE_IPV6)
-		if (pss->ss_family == AF_INET6) {
-			p_if = (unsigned char *)
-				&((const struct sockaddr_in6 *)pss)->sin6_addr;
-			p_ss1 = (unsigned char *)
-				&((const struct sockaddr_in6 *)ss1)->sin6_addr;
-			p_ss2 = (unsigned char *)
-				&((const struct sockaddr_in6 *)ss2)->sin6_addr;
-			len = 16;
-		}
-#endif
-		if (!p_ss1 || !p_ss2 || !p_if || len == 0) {
-			continue;
-		}
-		bits1 = matching_len_bits(p_ss1, p_if, len);
-		bits2 = matching_len_bits(p_ss2, p_if, len);
+		ip = *iface_n_bcast(i);
+		bits1 = matching_quad_bits((uchar *)&ip1->s_addr, (uchar *)&ip.s_addr);
+		bits2 = matching_quad_bits((uchar *)&ip2->s_addr, (uchar *)&ip.s_addr);
 		max_bits1 = MAX(bits1, max_bits1);
 		max_bits2 = MAX(bits2, max_bits2);
+	}	
+	
+	/* bias towards directly reachable IPs */
+	if (iface_local(*ip1)) {
+		max_bits1 += 32;
 	}
-
-	/* Bias towards directly reachable IPs */
-	if (iface_local(ss1)) {
-		if (ss1->ss_family == AF_INET) {
-			max_bits1 += 32;
-		} else {
-			max_bits1 += 128;
-		}
+	if (iface_local(*ip2)) {
+		max_bits2 += 32;
 	}
-	if (iface_local(ss2)) {
-		if (ss2->ss_family == AF_INET) {
-			max_bits2 += 32;
-		} else {
-			max_bits2 += 128;
-		}
-	}
+
 	return max_bits2 - max_bits1;
 }
 
@@ -463,84 +384,73 @@
  compare 2 ldap IPs by nearness to our interfaces - used in qsort
 *******************************************************************/
 
-int ip_service_compare(struct ip_service *ss1, struct ip_service *ss2)
+int ip_service_compare(struct ip_service *ip1, struct ip_service *ip2)
 {
 	int result;
-
-	if ((result = addr_compare(&ss1->ss, &ss2->ss)) != 0) {
+	
+	if ( (result = ip_compare(&ip1->ip, &ip2->ip)) != 0 )
 		return result;
-	}
-
-	if (ss1->port > ss2->port) {
+		
+	if ( ip1->port > ip2->port )
 		return 1;
-	}
-
-	if (ss1->port < ss2->port) {
+	
+	if ( ip1->port < ip2->port )
 		return -1;
-	}
-
+		
 	return 0;
 }
 
 /*
-  sort an IP list so that names that are close to one of our interfaces
-  are at the top. This prevents the problem where a WINS server returns an IP
-  that is not reachable from our subnet as the first match
+  sort an IP list so that names that are close to one of our interfaces 
+  are at the top. This prevents the problem where a WINS server returns an IP that
+  is not reachable from our subnet as the first match
 */
 
-static void sort_addr_list(struct sockaddr_storage *sslist, int count)
+static void sort_ip_list(struct in_addr *iplist, int count)
 {
 	if (count <= 1) {
 		return;
 	}
 
-	qsort(sslist, count, sizeof(struct sockaddr_storage),
-			QSORT_CAST addr_compare);
+	qsort(iplist, count, sizeof(struct in_addr), QSORT_CAST ip_compare);	
 }
 
-static void sort_service_list(struct ip_service *servlist, int count)
+static void sort_ip_list2(struct ip_service *iplist, int count)
 {
 	if (count <= 1) {
 		return;
 	}
 
-	qsort(servlist, count, sizeof(struct ip_service),
-			QSORT_CAST ip_service_compare);
+	qsort(iplist, count, sizeof(struct ip_service), QSORT_CAST ip_service_compare);	
 }
 
 /**********************************************************************
- Remove any duplicate address/port pairs in the list
+ Remove any duplicate address/port pairs in the list 
  *********************************************************************/
 
-static int remove_duplicate_addrs2(struct ip_service *iplist, int count )
+static int remove_duplicate_addrs2( struct ip_service *iplist, int count )
 {
 	int i, j;
-
-	DEBUG(10,("remove_duplicate_addrs2: "
-			"looking for duplicate address/port pairs\n"));
-
+	
+	DEBUG(10,("remove_duplicate_addrs2: looking for duplicate address/port pairs\n"));
+	
 	/* one loop to remove duplicates */
 	for ( i=0; i<count; i++ ) {
-		if ( is_zero_addr(&iplist[i].ss)) {
+		if ( is_zero_ip(iplist[i].ip) )
 			continue;
-		}
-
+					
 		for ( j=i+1; j<count; j++ ) {
-			if (addr_equal(&iplist[i].ss, &iplist[j].ss) &&
-					iplist[i].port == iplist[j].port) {
-				zero_addr(&iplist[j].ss);
-			}
+			if ( ip_service_equal(iplist[i], iplist[j]) )
+				zero_ip(&iplist[j].ip);
 		}
 	}
-
+			
 	/* one loop to clean up any holes we left */
 	/* first ip should never be a zero_ip() */
 	for (i = 0; i<count; ) {
-		if (is_zero_addr(&iplist[i].ss) ) {
-			if (i != count-1) {
-				memmove(&iplist[i], &iplist[i+1],
-					(count - i - 1)*sizeof(iplist[i]));
-			}
+		if ( is_zero_ip(iplist[i].ip) ) {
+			if (i != count-1 )
+				memmove(&iplist[i], &iplist[i+1], (count - i - 1)*sizeof(iplist[i]));
 			count--;
 			continue;
 		}
@@ -557,78 +467,68 @@
  *timed_out is set if we failed by timing out
 ****************************************************************************/
 
-struct sockaddr_storage *name_query(int fd,
-			const char *name,
-			int name_type,
-			bool bcast,
-			bool recurse,
-			const struct sockaddr_storage *to_ss,
-			int *count,
-			int *flags,
-			bool *timed_out)
+struct in_addr *name_query(int fd,const char *name,int name_type, 
+			   BOOL bcast,BOOL recurse,
+			   struct in_addr to_ip, int *count, int *flags,
+			   BOOL *timed_out)
 {
-	bool found=false;
+	BOOL found=False;
 	int i, retries = 3;
 	int retry_time = bcast?250:2000;
 	struct timeval tval;
 	struct packet_struct p;
 	struct packet_struct *p2;
 	struct nmb_packet *nmb = &p.packet.nmb;
-	struct sockaddr_storage *ss_list = NULL;
+	struct in_addr *ip_list = NULL;
 
 	if (lp_disable_netbios()) {
-		DEBUG(5,("name_query(%s#%02x): netbios is disabled\n",
-					name, name_type));
+		DEBUG(5,("name_query(%s#%02x): netbios is disabled\n", name, name_type));
 		return NULL;
 	}
 
-	if (to_ss->ss_family != AF_INET) {
-		return NULL;
-	}
-
 	if (timed_out) {
-		*timed_out = false;
+		*timed_out = False;
 	}
-
+	
 	memset((char *)&p,'\0',sizeof(p));
 	(*count) = 0;
 	(*flags) = 0;
-
+	
 	nmb->header.name_trn_id = generate_trn_id();
 	nmb->header.opcode = 0;
-	nmb->header.response = false;
+	nmb->header.response = False;
 	nmb->header.nm_flags.bcast = bcast;
-	nmb->header.nm_flags.recursion_available = false;
+	nmb->header.nm_flags.recursion_available = False;
 	nmb->header.nm_flags.recursion_desired = recurse;
-	nmb->header.nm_flags.trunc = false;
-	nmb->header.nm_flags.authoritative = false;
+	nmb->header.nm_flags.trunc = False;
+	nmb->header.nm_flags.authoritative = False;
 	nmb->header.rcode = 0;
 	nmb->header.qdcount = 1;
 	nmb->header.ancount = 0;
 	nmb->header.nscount = 0;
 	nmb->header.arcount = 0;
-
+	
 	make_nmb_name(&nmb->question.question_name,name,name_type);
-
+	
 	nmb->question.question_type = 0x20;
 	nmb->question.question_class = 0x1;
-
-	p.ip = ((struct sockaddr_in *)to_ss)->sin_addr;
+	
+	p.ip = to_ip;
 	p.port = NMB_PORT;
 	p.fd = fd;
 	p.timestamp = time(NULL);
 	p.packet_type = NMB_PACKET;
-
+	
 	GetTimeOfDay(&tval);
-
-	if (!send_packet(&p))
+	
+	if (!send_packet(&p)) 
 		return NULL;
-
+	
 	retries--;
-
+	
 	while (1) {
 		struct timeval tval2;
-
+		
 		GetTimeOfDay(&tval2);
 		if (TvalDiff(&tval,&tval2) > retry_time) {
 			if (!retries)
@@ -638,60 +538,52 @@
 			GetTimeOfDay(&tval);
 			retries--;
 		}
-
-		if ((p2=receive_nmb_packet(fd,90,nmb->header.name_trn_id))) {
+		
+		if ((p2=receive_nmb_packet(fd,90,nmb->header.name_trn_id))) {     
 			struct nmb_packet *nmb2 = &p2->packet.nmb;
 			debug_nmb_packet(p2);
-
+			
 			/* If we get a Negative Name Query Response from a WINS
 			 * server, we should report it and give up.
 			 */
-			if( 0 == nmb2->header.opcode	/* A query response   */
+			if( 0 == nmb2->header.opcode		/* A query response   */
 			    && !(bcast)			/* from a WINS server */
-			    && nmb2->header.rcode	/* Error returned     */
+			    && nmb2->header.rcode		/* Error returned     */
 				) {
-
+				
 				if( DEBUGLVL( 3 ) ) {
 					/* Only executed if DEBUGLEVEL >= 3 */
-					dbgtext( "Negative name query "
-						"response, rcode 0x%02x: ",
-						nmb2->header.rcode );
+					dbgtext( "Negative name query response, rcode 0x%02x: ", nmb2->header.rcode );
 					switch( nmb2->header.rcode ) {
 					case 0x01:
-						dbgtext( "Request "
-						"was invalidly formatted.\n" );
+						dbgtext( "Request was invalidly formatted.\n" );
 						break;
 					case 0x02:
-						dbgtext( "Problem with NBNS, "
-						"cannot process name.\n");
+						dbgtext( "Problem with NBNS, cannot process name.\n");
 						break;
 					case 0x03:
-						dbgtext( "The name requested "
-						"does not exist.\n" );
+						dbgtext( "The name requested does not exist.\n" );
 						break;
 					case 0x04:
-						dbgtext( "Unsupported request "
-						"error.\n" );
+						dbgtext( "Unsupported request error.\n" );
 						break;
 					case 0x05:
-						dbgtext( "Query refused "
-						"error.\n" );
+						dbgtext( "Query refused error.\n" );
 						break;
 					default:
-						dbgtext( "Unrecognized error "
-						"code.\n" );
+						dbgtext( "Unrecognized error code.\n" );
 						break;
 					}
 				}
 				free_packet(p2);
 				return( NULL );
 			}
-
+			
 			if (nmb2->header.opcode != 0 ||
 			    nmb2->header.nm_flags.bcast ||
 			    nmb2->header.rcode ||
 			    !nmb2->header.ancount) {
-				/*
+				/* 
 				 * XXXX what do we do with this? Could be a
 				 * redirect, but we'll discard it for the
 				 * moment.
@@ -699,33 +591,25 @@
 				free_packet(p2);
 				continue;
 			}
-
-			ss_list = SMB_REALLOC_ARRAY(ss_list,
-						struct sockaddr_storage,
-						(*count) +
-						nmb2->answers->rdlength/6);
-
-			if (!ss_list) {
+			
+			ip_list = SMB_REALLOC_ARRAY( ip_list, struct in_addr,
+						(*count) + nmb2->answers->rdlength/6 );
+			
+			if (!ip_list) {
 				DEBUG(0,("name_query: Realloc failed.\n"));
 				free_packet(p2);
-				return NULL;
+				return( NULL );
 			}
-
-			DEBUG(2,("Got a positive name query response "
-					"from %s ( ",
-					inet_ntoa(p2->ip)));
-
+			
+			DEBUG(2,("Got a positive name query response from %s ( ", inet_ntoa(p2->ip)));
 			for (i=0;i<nmb2->answers->rdlength/6;i++) {
-				struct in_addr ip;
-				putip((char *)&ip,&nmb2->answers->rdata[2+i*6]);
-				in_addr_to_sockaddr_storage(&ss_list[(*count)],
-						ip);
-				DEBUGADD(2,("%s ",inet_ntoa(ip)));
+				putip((char *)&ip_list[(*count)],&nmb2->answers->rdata[2+i*6]);
+				DEBUGADD(2,("%s ",inet_ntoa(ip_list[(*count)])));
 				(*count)++;
 			}
 			DEBUGADD(2,(")\n"));
-
-			found=true;
+			
+			found=True;
 			retries=0;
 			/* We add the flags back ... */
 			if (nmb2->header.response)
@@ -752,28 +636,27 @@
 	}
 
 	/* only set timed_out if we didn't fund what we where looking for*/
-
+	
 	if ( !found && timed_out ) {
-		*timed_out = true;
+		*timed_out = True;
 	}
 
 	/* sort the ip list so we choose close servers first if possible */
-	sort_addr_list(ss_list, *count);
+	sort_ip_list(ip_list, *count);
 
-	return ss_list;
+	return ip_list;
 }
 
 /********************************************************
  Start parsing the lmhosts file.
 *********************************************************/
 
-XFILE *startlmhosts(const char *fname)
+XFILE *startlmhosts(char *fname)
 {
 	XFILE *fp = x_fopen(fname,O_RDONLY, 0);
 	if (!fp) {
-		DEBUG(4,("startlmhosts: Can't open lmhosts file %s. "
-			"Error was %s\n",
-			fname, strerror(errno)));
+		DEBUG(4,("startlmhosts: Can't open lmhosts file %s. Error was %s\n",
+			 fname, strerror(errno)));
 		return NULL;
 	}
 	return fp;
@@ -783,25 +666,19 @@
  Parse the next line in the lmhosts file.
 *********************************************************/
 
-bool getlmhostsent(TALLOC_CTX *ctx, XFILE *fp, char **pp_name, int *name_type,
-		struct sockaddr_storage *pss)
+BOOL getlmhostsent( XFILE *fp, pstring name, int *name_type, struct in_addr *ipaddr)
 {
-	char line[1024];
+	pstring line;
 
-	*pp_name = NULL;
-
 	while(!x_feof(fp) && !x_ferror(fp)) {
-		char *ip = NULL;
-		char *flags = NULL;
-		char *extra = NULL;
-		char *name = NULL;
+		pstring ip,flags,extra;
 		const char *ptr;
-		char *ptr1 = NULL;
+		char *ptr1;
 		int count = 0;
 
 		*name_type = -1;
 
-		if (!fgets_slash(line,sizeof(line),fp)) {
+		if (!fgets_slash(line,sizeof(pstring),fp)) {
 			continue;
 		}
 
@@ -809,77 +686,62 @@
 			continue;
 		}
 
+		pstrcpy(ip,"");
+		pstrcpy(name,"");
+		pstrcpy(flags,"");
+
 		ptr = line;
 
-		if (next_token_talloc(ctx, &ptr, &ip, NULL))
+		if (next_token(&ptr,ip   ,NULL,sizeof(ip)))
 			++count;
-		if (next_token_talloc(ctx, &ptr, &name, NULL))
+		if (next_token(&ptr,name ,NULL, sizeof(pstring)))
 			++count;
-		if (next_token_talloc(ctx, &ptr, &flags, NULL))
+		if (next_token(&ptr,flags,NULL, sizeof(flags)))
 			++count;
-		if (next_token_talloc(ctx, &ptr, &extra, NULL))
+		if (next_token(&ptr,extra,NULL, sizeof(extra)))
 			++count;
 
 		if (count <= 0)
 			continue;
 
 		if (count > 0 && count < 2) {
-			DEBUG(0,("getlmhostsent: Ill formed hosts line [%s]\n",
-						line));
+			DEBUG(0,("getlmhostsent: Ill formed hosts line [%s]\n",line));
 			continue;
 		}
 
 		if (count >= 4) {
-			DEBUG(0,("getlmhostsent: too many columns "
-				"in lmhosts file (obsolete syntax)\n"));
+			DEBUG(0,("getlmhostsent: too many columns in lmhosts file (obsolete syntax)\n"));
 			continue;
 		}
 
-		if (!flags) {
-			flags = talloc_strdup(ctx, "");
-			if (!flags) {
-				continue;
-			}
-		}
+		DEBUG(4, ("getlmhostsent: lmhost entry: %s %s %s\n", ip, name, flags));
 
-		DEBUG(4, ("getlmhostsent: lmhost entry: %s %s %s\n",
-					ip, name, flags));
-
 		if (strchr_m(flags,'G') || strchr_m(flags,'S')) {
-			DEBUG(0,("getlmhostsent: group flag "
-				"in lmhosts ignored (obsolete)\n"));
+			DEBUG(0,("getlmhostsent: group flag in lmhosts ignored (obsolete)\n"));
 			continue;
 		}
 
-		if (!interpret_string_addr(pss, ip, AI_NUMERICHOST)) {
-			DEBUG(0,("getlmhostsent: invalid address "
-				"%s.\n", ip));
-		}
+		*ipaddr = *interpret_addr2(ip);
 
-		/* Extra feature. If the name ends in '#XX',
-		 * where XX is a hex number, then only add that name type. */
+		/* Extra feature. If the name ends in '#XX', where XX is a hex number,
+			then only add that name type. */
 		if((ptr1 = strchr_m(name, '#')) != NULL) {
 			char *endptr;
       			ptr1++;
 
 			*name_type = (int)strtol(ptr1, &endptr, 16);
 			if(!*ptr1 || (endptr == ptr1)) {
-				DEBUG(0,("getlmhostsent: invalid name "
-					"%s containing '#'.\n", name));
+				DEBUG(0,("getlmhostsent: invalid name %s containing '#'.\n", name));
 				continue;
 			}
 
 			*(--ptr1) = '\0'; /* Truncate at the '#' */
 		}
 
-		*pp_name = talloc_strdup(ctx, name);
-		if (!*pp_name) {
-			return false;
-		}
-		return true;
+		return True;
 	}
 
-	return false;
+	return False;
 }
 
 /********************************************************
@@ -892,75 +754,60 @@
 }
 
 /********************************************************
- convert an array if struct sockaddr_storage to struct ip_service
- return false on failure.  Port is set to PORT_NONE;
+ convert an array if struct in_addrs to struct ip_service
+ return False on failure.  Port is set to PORT_NONE;
 *********************************************************/
 
-static bool convert_ss2service(struct ip_service **return_iplist,
-		const struct sockaddr_storage *ss_list,
-		int count)
+static BOOL convert_ip2service( struct ip_service **return_iplist, struct in_addr *ip_list, int count )
 {
 	int i;
 
-	if ( count==0 || !ss_list )
+	if ( count==0 || !ip_list )
 		return False;
-
+		
 	/* copy the ip address; port will be PORT_NONE */
-	if ((*return_iplist = SMB_MALLOC_ARRAY(struct ip_service, count)) ==
-			NULL) {
-		DEBUG(0,("convert_ip2service: malloc failed "
-			"for %d enetries!\n", count ));
+	if ( (*return_iplist = SMB_MALLOC_ARRAY(struct ip_service, count)) == NULL ) {
+		DEBUG(0,("convert_ip2service: malloc failed for %d enetries!\n", count ));
 		return False;
 	}
-
+	
 	for ( i=0; i<count; i++ ) {
-		(*return_iplist)[i].ss   = ss_list[i];
+		(*return_iplist)[i].ip   = ip_list[i];
 		(*return_iplist)[i].port = PORT_NONE;
 	}
 
-	return true;
-}
-
+	return True;
+}	
 /********************************************************
  Resolve via "bcast" method.
 *********************************************************/
 
-NTSTATUS name_resolve_bcast(const char *name,
-			int name_type,
-			struct ip_service **return_iplist,
-			int *return_count)
+BOOL name_resolve_bcast(const char *name, int name_type,
+			struct ip_service **return_iplist, int *return_count)
 {
 	int sock, i;
 	int num_interfaces = iface_count();
-	struct sockaddr_storage *ss_list;
-	struct sockaddr_storage ss;
-	NTSTATUS status;
+	struct in_addr *ip_list;
+	BOOL ret;
 
 	if (lp_disable_netbios()) {
-		DEBUG(5,("name_resolve_bcast(%s#%02x): netbios is disabled\n",
-					name, name_type));
-		return NT_STATUS_INVALID_PARAMETER;
+		DEBUG(5,("name_resolve_bcast(%s#%02x): netbios is disabled\n", name, name_type));
+		return False;
 	}
 
 	*return_iplist = NULL;
 	*return_count = 0;
-
+	
 	/*
 	 * "bcast" means do a broadcast lookup on all the local interfaces.
 	 */
 
-	DEBUG(3,("name_resolve_bcast: Attempting broadcast lookup "
-		"for name %s<0x%x>\n", name, name_type));
+	DEBUG(3,("name_resolve_bcast: Attempting broadcast lookup for name %s<0x%x>\n", name, name_type));
 
-	if (!interpret_string_addr(&ss, lp_socket_address(),
-				AI_NUMERICHOST|AI_PASSIVE)) {
-		zero_addr(&ss);
-	}
+	sock = open_socket_in( SOCK_DGRAM, 0, 3,
+			       interpret_addr(lp_socket_address()), True );
 
-	sock = open_socket_in( SOCK_DGRAM, 0, 3, &ss, true );
-	if (sock == -1) {
-		return NT_STATUS_UNSUCCESSFUL;
-	}
+	if (sock == -1) return False;
 
 	set_socket_options(sock,"SO_BROADCAST");
 	/*
@@ -968,67 +815,56 @@
 	 * the first successful match.
 	 */
 	for( i = num_interfaces-1; i >= 0; i--) {
-		const struct sockaddr_storage *pss = iface_n_bcast(i);
+		struct in_addr sendto_ip;
 		int flags;
-
 		/* Done this way to fix compiler error on IRIX 5.x */
-		if (!pss) {
-			continue;
-		}
-		ss_list = name_query(sock, name, name_type, true,
-				    true, pss, return_count, &flags, NULL);
-		if (ss_list) {
+		sendto_ip = *iface_n_bcast(i);
+		ip_list = name_query(sock, name, name_type, True, 
+				    True, sendto_ip, return_count, &flags, NULL);
+		if( ip_list ) 
 			goto success;
-		}
 	}
-
+	
 	/* failed - no response */
-
+	
 	close(sock);
-	return NT_STATUS_UNSUCCESSFUL;
-
+	return False;
+	
 success:
-
-	status = NT_STATUS_OK;
-	if (!convert_ss2service(return_iplist, ss_list, *return_count) )
-		status = NT_STATUS_INVALID_PARAMETER;
-
-	SAFE_FREE(ss_list);
+	ret = True;
+	if ( !convert_ip2service(return_iplist, ip_list, *return_count) )
+		ret = False;
+	
+	SAFE_FREE( ip_list );
 	close(sock);
-	return status;
+	return ret;
 }
 
 /********************************************************
  Resolve via "wins" method.
 *********************************************************/
 
-NTSTATUS resolve_wins(const char *name,
-		int name_type,
-		struct ip_service **return_iplist,
-		int *return_count)
+BOOL resolve_wins(const char *name, int name_type,
+		  struct ip_service **return_iplist, int *return_count)
 {
 	int sock, t, i;
 	char **wins_tags;
-	struct sockaddr_storage src_ss, *ss_list = NULL;
-	struct in_addr src_ip;
-	NTSTATUS status;
+	struct in_addr src_ip, *ip_list = NULL;
+	BOOL ret;
 
 	if (lp_disable_netbios()) {
-		DEBUG(5,("resolve_wins(%s#%02x): netbios is disabled\n",
-					name, name_type));
-		return NT_STATUS_INVALID_PARAMETER;
+		DEBUG(5,("resolve_wins(%s#%02x): netbios is disabled\n", name, name_type));
+		return False;
 	}
 
 	*return_iplist = NULL;
 	*return_count = 0;
+	
+	DEBUG(3,("resolve_wins: Attempting wins lookup for name %s<0x%x>\n", name, name_type));
 
-	DEBUG(3,("resolve_wins: Attempting wins lookup for name %s<0x%x>\n",
-				name, name_type));
-
 	if (wins_srv_count() < 1) {
-		DEBUG(3,("resolve_wins: WINS server resolution selected "
-			"and no WINS servers listed.\n"));
-		return NT_STATUS_INVALID_PARAMETER;
+		DEBUG(3,("resolve_wins: WINS server resolution selected and no WINS servers listed.\n"));
+		return False;
 	}
 
 	/* we try a lookup on each of the WINS tags in turn */
@@ -1036,40 +872,24 @@
 
 	if (!wins_tags) {
 		/* huh? no tags?? give up in disgust */
-		return NT_STATUS_INVALID_PARAMETER;
+		return False;
 	}
 
 	/* the address we will be sending from */
-	if (!interpret_string_addr(&src_ss, lp_socket_address(),
-				AI_NUMERICHOST|AI_PASSIVE)) {
-		zero_addr(&src_ss);
-	}
+	src_ip = *interpret_addr2(lp_socket_address());
 
-	if (src_ss.ss_family != AF_INET) {
-		char addr[INET6_ADDRSTRLEN];
-		print_sockaddr(addr, sizeof(addr), &src_ss);
-		DEBUG(3,("resolve_wins: cannot receive WINS replies "
-			"on IPv6 address %s\n",
-			addr));
-		wins_srv_tags_free(wins_tags);
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	src_ip = ((struct sockaddr_in *)&src_ss)->sin_addr;
-
 	/* in the worst case we will try every wins server with every
 	   tag! */
 	for (t=0; wins_tags && wins_tags[t]; t++) {
 		int srv_count = wins_srv_count_tag(wins_tags[t]);
 		for (i=0; i<srv_count; i++) {
-			struct sockaddr_storage wins_ss;
 			struct in_addr wins_ip;
 			int flags;
-			bool timed_out;
+			BOOL timed_out;
 
 			wins_ip = wins_srv_ip_tag(wins_tags[t], src_ip);
 
-			if (global_in_nmbd && ismyip_v4(wins_ip)) {
+			if (global_in_nmbd && ismyip(wins_ip)) {
 				/* yikes! we'll loop forever */
 				continue;
 			}
@@ -1079,137 +899,110 @@
 				continue;
 			}
 
-			DEBUG(3,("resolve_wins: using WINS server %s "
-				"and tag '%s'\n",
-				inet_ntoa(wins_ip), wins_tags[t]));
+			DEBUG(3,("resolve_wins: using WINS server %s and tag '%s'\n", inet_ntoa(wins_ip), wins_tags[t]));
 
-			sock = open_socket_in(SOCK_DGRAM, 0, 3, &src_ss, true);
+			sock = open_socket_in(SOCK_DGRAM, 0, 3, src_ip.s_addr, True);
 			if (sock == -1) {
 				continue;
 			}
 
-			in_addr_to_sockaddr_storage(&wins_ss, wins_ip);
-			ss_list = name_query(sock,
-						name,
-						name_type,
-						false,
-						true,
-						&wins_ss,
-						return_count,
-						&flags,
-						&timed_out);
-
+			ip_list = name_query(sock,name,name_type, False, 
+						    True, wins_ip, return_count, &flags, 
+						    &timed_out);
+						    
 			/* exit loop if we got a list of addresses */
-
-			if (ss_list)
+			
+			if ( ip_list ) 
 				goto success;
-
+				
 			close(sock);
 
 			if (timed_out) {
-				/* Timed out wating for WINS server to respond.
-				 * Mark it dead. */
+				/* Timed out wating for WINS server to respond.  Mark it dead. */
 				wins_srv_died(wins_ip, src_ip);
 			} else {
 				/* The name definately isn't in this
-				   group of WINS servers.
-				   goto the next group  */
+				   group of WINS servers. goto the next group  */
 				break;
 			}
 		}
 	}
 
 	wins_srv_tags_free(wins_tags);
-	return NT_STATUS_NO_LOGON_SERVERS;
+	return False;
 
 success:
-
-	status = NT_STATUS_OK;
-	if (!convert_ss2service(return_iplist, ss_list, *return_count))
-		status = NT_STATUS_INVALID_PARAMETER;
-
-	SAFE_FREE(ss_list);
+	ret = True;
+	if ( !convert_ip2service( return_iplist, ip_list, *return_count ) )
+		ret = False;
+	
+	SAFE_FREE( ip_list );
 	wins_srv_tags_free(wins_tags);
 	close(sock);
-
-	return status;
+	
+	return ret;
 }
 
 /********************************************************
  Resolve via "lmhosts" method.
 *********************************************************/
 
-static NTSTATUS resolve_lmhosts(const char *name, int name_type,
-				struct ip_service **return_iplist,
-				int *return_count)
+static BOOL resolve_lmhosts(const char *name, int name_type,
+                         struct ip_service **return_iplist, int *return_count)
 {
 	/*
 	 * "lmhosts" means parse the local lmhosts file.
 	 */
-
+	
 	XFILE *fp;
-	char *lmhost_name = NULL;
+	pstring lmhost_name;
 	int name_type2;
-	struct sockaddr_storage return_ss;
-	NTSTATUS status = NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND;
-	TALLOC_CTX *ctx = NULL;
+	struct in_addr return_ip;
+	BOOL result = False;
 
 	*return_iplist = NULL;
 	*return_count = 0;
 
-	DEBUG(3,("resolve_lmhosts: "
-		"Attempting lmhosts lookup for name %s<0x%x>\n",
-		name, name_type));
+	DEBUG(3,("resolve_lmhosts: Attempting lmhosts lookup for name %s<0x%x>\n", name, name_type));
 
-	fp = startlmhosts(get_dyn_LMHOSTSFILE());
+	fp = startlmhosts(dyn_LMHOSTSFILE);
 
 	if ( fp == NULL )
-		return NT_STATUS_NO_SUCH_FILE;
+		return False;
 
-	ctx = talloc_init("resolve_lmhosts");
-	if (!ctx) {
-		endlmhosts(fp);
-		return NT_STATUS_NO_MEMORY;
-	}
+	while (getlmhostsent(fp, lmhost_name, &name_type2, &return_ip)) 
+	{
 
-	while (getlmhostsent(ctx, fp, &lmhost_name, &name_type2, &return_ss)) {
-
-		if (!strequal(name, lmhost_name)) {
-			TALLOC_FREE(lmhost_name);
+		if (!strequal(name, lmhost_name))
 			continue;
-		}
 
-		if ((name_type2 != -1) && (name_type != name_type2)) {
-			TALLOC_FREE(lmhost_name);
+		if ((name_type2 != -1) && (name_type != name_type2))
 			continue;
-		}
 
-		*return_iplist = SMB_REALLOC_ARRAY((*return_iplist),
-					struct ip_service,
+		*return_iplist = SMB_REALLOC_ARRAY((*return_iplist), struct ip_service,
 					(*return_count)+1);
 
 		if ((*return_iplist) == NULL) {
-			TALLOC_FREE(ctx);
 			endlmhosts(fp);
 			DEBUG(3,("resolve_lmhosts: malloc fail !\n"));
-			return NT_STATUS_NO_MEMORY;
+			return False;
 		}
 
-		(*return_iplist)[*return_count].ss = return_ss;
+		(*return_iplist)[*return_count].ip   = return_ip;
 		(*return_iplist)[*return_count].port = PORT_NONE;
 		*return_count += 1;
 
 		/* we found something */
-		status = NT_STATUS_OK;
+		result = True;
 
 		/* Multiple names only for DC lookup */
 		if (name_type != 0x1c)
 			break;
 	}
 
-	TALLOC_FREE(ctx);
 	endlmhosts(fp);
-	return status;
+
+	return result;
 }
 
 
@@ -1217,94 +1010,47 @@
  Resolve via "hosts" method.
 *********************************************************/
 
-static NTSTATUS resolve_hosts(const char *name, int name_type,
-			      struct ip_service **return_iplist,
-			      int *return_count)
+static BOOL resolve_hosts(const char *name, int name_type,
+                         struct ip_service **return_iplist, int *return_count)
 {
 	/*
 	 * "host" means do a localhost, or dns lookup.
 	 */
-	struct addrinfo hints;
-	struct addrinfo *ailist = NULL;
-	struct addrinfo *res = NULL;
-	int ret = -1;
-	int i = 0;
-
+	struct hostent *hp;
+	
 	if ( name_type != 0x20 && name_type != 0x0) {
-		DEBUG(5, ("resolve_hosts: not appropriate "
-			"for name type <0x%x>\n",
-			name_type));
-		return NT_STATUS_INVALID_PARAMETER;
+		DEBUG(5, ("resolve_hosts: not appropriate for name type <0x%x>\n", name_type));
+		return False;
 	}
 
 	*return_iplist = NULL;
 	*return_count = 0;
 
-	DEBUG(3,("resolve_hosts: Attempting host lookup for name %s<0x%x>\n",
-				name, name_type));
-
-	ZERO_STRUCT(hints);
-	/* By default make sure it supports TCP. */
-	hints.ai_socktype = SOCK_STREAM;
-	hints.ai_flags = AI_ADDRCONFIG;
-
-#if !defined(HAVE_IPV6)
-	/* Unless we have IPv6, we really only want IPv4 addresses back. */
-	hints.ai_family = AF_INET;
-#endif
-
-	ret = getaddrinfo(name,
-			NULL,
-			&hints,
-			&ailist);
-	if (ret) {
-		DEBUG(3,("resolve_hosts: getaddrinfo failed for name %s [%s]\n",
-			name,
-			gai_strerror(ret) ));
-	}
-
-	for (res = ailist; res; res = res->ai_next) {
-		struct sockaddr_storage ss;
-
-		if (!res->ai_addr || res->ai_addrlen == 0) {
-			continue;
-		}
-
-		ZERO_STRUCT(ss);
-		memcpy(&ss, res->ai_addr, res->ai_addrlen);
-
-		*return_count += 1;
-
-		*return_iplist = SMB_REALLOC_ARRAY(*return_iplist,
-						struct ip_service,
-						*return_count);
-		if (!*return_iplist) {
+	DEBUG(3,("resolve_hosts: Attempting host lookup for name %s<0x%x>\n", name, name_type));
+	
+	if (((hp = sys_gethostbyname(name)) != NULL) && (hp->h_addr != NULL)) {
+		struct in_addr return_ip;
+		putip((char *)&return_ip,(char *)hp->h_addr);
+		*return_iplist = SMB_MALLOC_P(struct ip_service);
+		if(*return_iplist == NULL) {
 			DEBUG(3,("resolve_hosts: malloc fail !\n"));
-			freeaddrinfo(ailist);
-			return NT_STATUS_NO_MEMORY;
+			return False;
 		}
-		(*return_iplist)[i].ss = ss;
-		(*return_iplist)[i].port = PORT_NONE;
-		i++;
+		(*return_iplist)->ip   = return_ip;
+		(*return_iplist)->port = PORT_NONE;
+		*return_count = 1;
+		return True;
 	}
-	if (ailist) {
-		freeaddrinfo(ailist);
-	}
-	if (*return_count) {
-		return NT_STATUS_OK;
-	}
-	return NT_STATUS_UNSUCCESSFUL;
+	return False;
 }
 
 /********************************************************
  Resolve via "ADS" method.
 *********************************************************/
 
-static NTSTATUS resolve_ads(const char *name,
-			    int name_type,
-			    const char *sitename,
-			    struct ip_service **return_iplist,
-			    int *return_count)
+static BOOL resolve_ads(const char *name, int name_type,
+			const char *sitename,
+                         struct ip_service **return_iplist, int *return_count)
 {
 	int 			i, j;
 	NTSTATUS  		status;
@@ -1313,59 +1059,37 @@
 	int			numdcs = 0;
 	int			numaddrs = 0;
 
-	if ((name_type != 0x1c) && (name_type != KDC_NAME_TYPE) &&
-	    (name_type != 0x1b)) {
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
+	if ((name_type != 0x1c) && (name_type != KDC_NAME_TYPE))
+		return False;
+		
+	DEBUG(5,("resolve_ads: Attempting to resolve DC's for %s using DNS\n",
+		name));
+			
 	if ( (ctx = talloc_init("resolve_ads")) == NULL ) {
 		DEBUG(0,("resolve_ads: talloc_init() failed!\n"));
-		return NT_STATUS_NO_MEMORY;
+		return False;
 	}
 
-	/* The DNS code needs fixing to find IPv6 addresses... JRA. */
-
-	switch (name_type) {
-		case 0x1b:
-			DEBUG(5,("resolve_ads: Attempting to resolve "
-				 "PDC for %s using DNS\n", name));
-			status = ads_dns_query_pdc(ctx, name, &dcs, &numdcs);
-			break;
-
-		case 0x1c:
-			DEBUG(5,("resolve_ads: Attempting to resolve "
-				 "DCs for %s using DNS\n", name));
-			status = ads_dns_query_dcs(ctx, name, sitename, &dcs,
-						   &numdcs);
-			break;
-		case KDC_NAME_TYPE:
-			DEBUG(5,("resolve_ads: Attempting to resolve "
-				 "KDCs for %s using DNS\n", name));
-			status = ads_dns_query_kdcs(ctx, name, sitename, &dcs,
-						    &numdcs);
-			break;
-		default:
-			status = NT_STATUS_INVALID_PARAMETER;
-			break;
+	if (name_type == KDC_NAME_TYPE) {
+		status = ads_dns_query_kdcs(ctx, name, sitename, &dcs, &numdcs);
+	} else {
+		status = ads_dns_query_dcs(ctx, name, sitename, &dcs, &numdcs);
 	}
-
 	if ( !NT_STATUS_IS_OK( status ) ) {
 		talloc_destroy(ctx);
-		return status;
+		return False;
 	}
 
 	for (i=0;i<numdcs;i++) {
 		numaddrs += MAX(dcs[i].num_ips,1);
 	}
-
-	if ((*return_iplist = SMB_MALLOC_ARRAY(struct ip_service, numaddrs)) ==
-			NULL ) {
-		DEBUG(0,("resolve_ads: malloc failed for %d entries\n",
-					numaddrs ));
+		
+	if ( (*return_iplist = SMB_MALLOC_ARRAY(struct ip_service, numaddrs)) == NULL ) {
+		DEBUG(0,("resolve_ads: malloc failed for %d entries\n", numaddrs ));
 		talloc_destroy(ctx);
-		return NT_STATUS_NO_MEMORY;
+		return False;
 	}
-
+	
 	/* now unroll the list of IP addresses */
 
 	*return_count = 0;
@@ -1375,41 +1099,39 @@
 		struct ip_service *r = &(*return_iplist)[*return_count];
 
 		r->port = dcs[i].port;
-
+		
 		/* If we don't have an IP list for a name, lookup it up */
-
-		if (!dcs[i].ss_s) {
-			interpret_string_addr(&r->ss, dcs[i].hostname, 0);
+		
+		if ( !dcs[i].ips ) {
+			r->ip = *interpret_addr2(dcs[i].hostname);
 			i++;
 			j = 0;
 		} else {
 			/* use the IP addresses from the SRV sresponse */
-
+			
 			if ( j >= dcs[i].num_ips ) {
 				i++;
 				j = 0;
 				continue;
 			}
-
-			r->ss = dcs[i].ss_s[j];
+			
+			r->ip = dcs[i].ips[j];
 			j++;
 		}
-
-		/* make sure it is a valid IP.  I considered checking the
-		 * negative connection cache, but this is the wrong place
-		 * for it. Maybe only as a hack. After think about it, if
-		 * all of the IP addresses returned from DNS are dead, what
-		 * hope does a netbios name lookup have ? The standard reason
-		 * for falling back to netbios lookups is that our DNS server
-		 * doesn't know anything about the DC's   -- jerry */
-
-		if (!is_zero_addr(&r->ss)) {
+			
+		/* make sure it is a valid IP.  I considered checking the negative
+		   connection cache, but this is the wrong place for it.  Maybe only
+		   as a hac.  After think about it, if all of the IP addresses retuend
+		   from DNS are dead, what hope does a netbios name lookup have?
+		   The standard reason for falling back to netbios lookups is that 
+		   our DNS server doesn't know anything about the DC's   -- jerry */	
+			   
+		if ( ! is_zero_ip(r->ip) )
 			(*return_count)++;
-		}
 	}
-
+		
 	talloc_destroy(ctx);
-	return NT_STATUS_OK;
+	return True;
 }
 
 /*******************************************************************
@@ -1417,24 +1139,25 @@
  Use this function if the string is either an IP address, DNS
  or host name or NetBIOS name. This uses the name switch in the
  smb.conf to determine the order of name resolution.
-
+ 
  Added support for ip addr/port to support ADS ldap servers.
- the only place we currently care about the port is in the
+ the only place we currently care about the port is in the 
  resolve_hosts() when looking up DC's via SRV RR entries in DNS
 **********************************************************************/
 
-NTSTATUS internal_resolve_name(const char *name,
-			        int name_type,
-				const char *sitename,
-				struct ip_service **return_iplist,
-				int *return_count,
-				const char *resolve_order)
+BOOL internal_resolve_name(const char *name, int name_type,
+			   const char *sitename,
+			   struct ip_service **return_iplist, 
+			   int *return_count, const char *resolve_order)
 {
-	char *tok;
+	pstring name_resolve_list;
+	fstring tok;
 	const char *ptr;
-	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
+	BOOL allones = (strcmp(name,"255.255.255.255") == 0);
+	BOOL allzeros = (strcmp(name,"0.0.0.0") == 0);
+	BOOL is_address = is_ipaddress(name);
+	BOOL result = False;
 	int i;
-	TALLOC_CTX *frame = NULL;
 
 	*return_iplist = NULL;
 	*return_count = 0;
@@ -1442,118 +1165,107 @@
 	DEBUG(10, ("internal_resolve_name: looking up %s#%x (sitename %s)\n",
 			name, name_type, sitename ? sitename : NULL));
 
-	if (is_ipaddress(name)) {
-		if ((*return_iplist = SMB_MALLOC_P(struct ip_service)) ==
-				NULL) {
+	if (allzeros || allones || is_address) {
+  
+		if ( (*return_iplist = SMB_MALLOC_P(struct ip_service)) == NULL ) {
 			DEBUG(0,("internal_resolve_name: malloc fail !\n"));
-			return NT_STATUS_NO_MEMORY;
+			return False;
 		}
-
-		/* ignore the port here */
-		(*return_iplist)->port = PORT_NONE;
-
-		/* if it's in the form of an IP address then get the lib to interpret it */
-		if (!interpret_string_addr(&(*return_iplist)->ss,
-					name, AI_NUMERICHOST)) {
-			DEBUG(1,("internal_resolve_name: interpret_string_addr "
-				"failed on %s\n",
-				name));
-			SAFE_FREE(*return_iplist);
-			return NT_STATUS_INVALID_PARAMETER;
+	
+		if(is_address) { 
+			/* ignore the port here */
+			(*return_iplist)->port = PORT_NONE;
+		
+			/* if it's in the form of an IP address then get the lib to interpret it */
+			if (((*return_iplist)->ip.s_addr = inet_addr(name)) == 0xFFFFFFFF ){
+				DEBUG(1,("internal_resolve_name: inet_addr failed on %s\n", name));
+				SAFE_FREE(*return_iplist);
+				return False;
+			}
+		} else {
+			(*return_iplist)->ip.s_addr = allones ? 0xFFFFFFFF : 0;
 		}
 		*return_count = 1;
-		return NT_STATUS_OK;
+		return True;
 	}
-
+  
 	/* Check name cache */
 
 	if (namecache_fetch(name, name_type, return_iplist, return_count)) {
 		/* This could be a negative response */
-		if (*return_count > 0) {
-			return NT_STATUS_OK;
-		} else {
-			return NT_STATUS_UNSUCCESSFUL;
-		}
+		return (*return_count > 0);
 	}
 
 	/* set the name resolution order */
 
-	if (strcmp( resolve_order, "NULL") == 0) {
+	if ( strcmp( resolve_order, "NULL") == 0 ) {
 		DEBUG(8,("internal_resolve_name: all lookups disabled\n"));
-		return NT_STATUS_INVALID_PARAMETER;
+		return False;
 	}
+  
+	if ( !resolve_order ) {
+		pstrcpy(name_resolve_list, lp_name_resolve_order());
+	} else {
+		pstrcpy(name_resolve_list, resolve_order);
+	}
 
-	if (!resolve_order[0]) {
+	if ( !name_resolve_list[0] ) {
 		ptr = "host";
 	} else {
-		ptr = resolve_order;
+		ptr = name_resolve_list;
 	}
 
 	/* iterate through the name resolution backends */
-
-	frame = talloc_stackframe();
-	while (next_token_talloc(frame, &ptr, &tok, LIST_SEP)) {
+  
+	while (next_token(&ptr, tok, LIST_SEP, sizeof(tok))) {
 		if((strequal(tok, "host") || strequal(tok, "hosts"))) {
-			status = resolve_hosts(name, name_type, return_iplist,
-					       return_count);
-			if (NT_STATUS_IS_OK(status)) {
+			if (resolve_hosts(name, name_type, return_iplist, return_count)) {
+				result = True;
 				goto done;
 			}
 		} else if(strequal( tok, "kdc")) {
-			/* deal with KDC_NAME_TYPE names here.
-			 * This will result in a SRV record lookup */
-			status = resolve_ads(name, KDC_NAME_TYPE, sitename,
-					     return_iplist, return_count);
-			if (NT_STATUS_IS_OK(status)) {
-				/* Ensure we don't namecache
-				 * this with the KDC port. */
+			/* deal with KDC_NAME_TYPE names here.  This will result in a
+				SRV record lookup */
+			if (resolve_ads(name, KDC_NAME_TYPE, sitename, return_iplist, return_count)) {
+				result = True;
+				/* Ensure we don't namecache this with the KDC port. */
 				name_type = KDC_NAME_TYPE;
 				goto done;
 			}
 		} else if(strequal( tok, "ads")) {
-			/* deal with 0x1c and 0x1b names here.
-			 * This will result in a SRV record lookup */
-			status = resolve_ads(name, name_type, sitename,
-					     return_iplist, return_count);
-			if (NT_STATUS_IS_OK(status)) {
+			/* deal with 0x1c names here.  This will result in a
+				SRV record lookup */
+			if (resolve_ads(name, name_type, sitename, return_iplist, return_count)) {
+				result = True;
 				goto done;
 			}
 		} else if(strequal( tok, "lmhosts")) {
-			status = resolve_lmhosts(name, name_type,
-						 return_iplist, return_count);
-			if (NT_STATUS_IS_OK(status)) {
+			if (resolve_lmhosts(name, name_type, return_iplist, return_count)) {
+				result = True;
 				goto done;
 			}
 		} else if(strequal( tok, "wins")) {
 			/* don't resolve 1D via WINS */
-			if (name_type != 0x1D) {
-				status = resolve_wins(name, name_type,
-						      return_iplist,
-						      return_count);
-				if (NT_STATUS_IS_OK(status)) {
-					goto done;
-				}
+			if (name_type != 0x1D && resolve_wins(name, name_type, return_iplist, return_count)) {
+				result = True;
+				goto done;
 			}
 		} else if(strequal( tok, "bcast")) {
-			status = name_resolve_bcast(name, name_type,
-						    return_iplist,
-						    return_count);
-			if (NT_STATUS_IS_OK(status)) {
+			if (name_resolve_bcast(name, name_type, return_iplist, return_count)) {
+				result = True;
 				goto done;
 			}
 		} else {
-			DEBUG(0,("resolve_name: unknown name switch type %s\n",
-				tok));
+			DEBUG(0,("resolve_name: unknown name switch type %s\n", tok));
 		}
 	}
 
 	/* All of the resolve_* functions above have returned false. */
 
-	TALLOC_FREE(frame);
 	SAFE_FREE(*return_iplist);
 	*return_count = 0;
 
-	return NT_STATUS_UNSUCCESSFUL;
+	return False;
 
   done:
 
@@ -1563,45 +1275,30 @@
 	the iplist when the PDC is down will cause two sets of timeouts. */
 
 	if ( *return_count ) {
-		*return_count = remove_duplicate_addrs2(*return_iplist,
-					*return_count );
+		*return_count = remove_duplicate_addrs2( *return_iplist, *return_count );
 	}
-
+ 
 	/* Save in name cache */
 	if ( DEBUGLEVEL >= 100 ) {
-		for (i = 0; i < *return_count && DEBUGLEVEL == 100; i++) {
-			char addr[INET6_ADDRSTRLEN];
-			print_sockaddr(addr, sizeof(addr),
-					&(*return_iplist)[i].ss);
-			DEBUG(100, ("Storing name %s of type %d (%s:%d)\n",
-					name,
-					name_type,
-					addr,
-					(*return_iplist)[i].port));
-		}
+		for (i = 0; i < *return_count && DEBUGLEVEL == 100; i++)
+			DEBUG(100, ("Storing name %s of type %d (%s:%d)\n", name,
+				name_type, inet_ntoa((*return_iplist)[i].ip), (*return_iplist)[i].port));
 	}
-
+   
 	namecache_store(name, name_type, *return_count, *return_iplist);
 
 	/* Display some debugging info */
 
 	if ( DEBUGLEVEL >= 10 ) {
-		DEBUG(10, ("internal_resolve_name: returning %d addresses: ",
-					*return_count));
+		DEBUG(10, ("internal_resolve_name: returning %d addresses: ", *return_count));
 
 		for (i = 0; i < *return_count; i++) {
-			char addr[INET6_ADDRSTRLEN];
-			print_sockaddr(addr, sizeof(addr),
-					&(*return_iplist)[i].ss);
-			DEBUGADD(10, ("%s:%d ",
-					addr,
-					(*return_iplist)[i].port));
+			DEBUGADD(10, ("%s:%d ", inet_ntoa((*return_iplist)[i].ip), (*return_iplist)[i].port));
 		}
 		DEBUG(10, ("\n"));
 	}
-
-	TALLOC_FREE(frame);
-	return status;
+  
+	return result;
 }
 
 /********************************************************
@@ -1611,156 +1308,68 @@
  smb.conf to determine the order of name resolution.
 *********************************************************/
 
-bool resolve_name(const char *name,
-		struct sockaddr_storage *return_ss,
-		int name_type)
+BOOL resolve_name(const char *name, struct in_addr *return_ip, int name_type)
 {
-	struct ip_service *ss_list = NULL;
-	char *sitename = NULL;
+	struct ip_service *ip_list = NULL;
+	char *sitename = sitename_fetch(lp_realm()); /* wild guess */
 	int count = 0;
 
 	if (is_ipaddress(name)) {
-		return interpret_string_addr(return_ss, name, AI_NUMERICHOST);
+		*return_ip = *interpret_addr2(name);
+		SAFE_FREE(sitename);
+		return True;
 	}
 
-	sitename = sitename_fetch(lp_realm()); /* wild guess */
-
-	if (NT_STATUS_IS_OK(internal_resolve_name(name, name_type, sitename,
-						  &ss_list, &count,
-						  lp_name_resolve_order()))) {
+	if (internal_resolve_name(name, name_type, sitename, &ip_list, &count, lp_name_resolve_order())) {
 		int i;
-
+		
 		/* only return valid addresses for TCP connections */
 		for (i=0; i<count; i++) {
-			if (!is_zero_addr(&ss_list[i].ss) &&
-					!is_broadcast_addr(&ss_list[i].ss)) {
-				*return_ss = ss_list[i].ss;
-				SAFE_FREE(ss_list);
+			char *ip_str = inet_ntoa(ip_list[i].ip);
+			if (ip_str &&
+			    strcmp(ip_str, "255.255.255.255") != 0 &&
+			    strcmp(ip_str, "0.0.0.0") != 0) 
+			{
+				*return_ip = ip_list[i].ip;
+				SAFE_FREE(ip_list);
 				SAFE_FREE(sitename);
 				return True;
 			}
 		}
 	}
-
-	SAFE_FREE(ss_list);
+	
+	SAFE_FREE(ip_list);
 	SAFE_FREE(sitename);
 	return False;
 }
 
 /********************************************************
- Internal interface to resolve a name into a list of IP addresses.
- Use this function if the string is either an IP address, DNS
- or host name or NetBIOS name. This uses the name switch in the
- smb.conf to determine the order of name resolution.
-*********************************************************/
-
-NTSTATUS resolve_name_list(TALLOC_CTX *ctx,
-		const char *name,
-		int name_type,
-		struct sockaddr_storage **return_ss_arr,
-		unsigned int *p_num_entries)
-{
-	struct ip_service *ss_list = NULL;
-	char *sitename = NULL;
-	int count = 0;
-	int i;
-	unsigned int num_entries;
-	NTSTATUS status;
-
-	*p_num_entries = 0;
-	*return_ss_arr = NULL;
-
-	if (is_ipaddress(name)) {
-		*return_ss_arr = TALLOC_P(ctx, struct sockaddr_storage);
-		if (!*return_ss_arr) {
-			return NT_STATUS_NO_MEMORY;
-		}
-		if (!interpret_string_addr(*return_ss_arr, name, AI_NUMERICHOST)) {
-			TALLOC_FREE(*return_ss_arr);
-			return NT_STATUS_BAD_NETWORK_NAME;
-		}
-		*p_num_entries = 1;
-		return NT_STATUS_OK;
-	}
-
-	sitename = sitename_fetch(lp_realm()); /* wild guess */
-
-	status = internal_resolve_name(name, name_type, sitename,
-						  &ss_list, &count,
-						  lp_name_resolve_order());
-	SAFE_FREE(sitename);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	/* only return valid addresses for TCP connections */
-	for (i=0, num_entries = 0; i<count; i++) {
-		if (!is_zero_addr(&ss_list[i].ss) &&
-				!is_broadcast_addr(&ss_list[i].ss)) {
-			num_entries++;
-		}
-	}
-	if (num_entries == 0) {
-		SAFE_FREE(ss_list);
-		return NT_STATUS_BAD_NETWORK_NAME;
-	}
-
-	*return_ss_arr = TALLOC_ARRAY(ctx,
-				struct sockaddr_storage,
-				num_entries);
-	if (!(*return_ss_arr)) {
-		SAFE_FREE(ss_list);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	for (i=0, num_entries = 0; i<count; i++) {
-		if (!is_zero_addr(&ss_list[i].ss) &&
-				!is_broadcast_addr(&ss_list[i].ss)) {
-			(*return_ss_arr)[num_entries++] = ss_list[i].ss;
-		}
-	}
-
-	status = NT_STATUS_OK;
-	*p_num_entries = num_entries;
-
-	SAFE_FREE(ss_list);
-	return NT_STATUS_OK;
-}
-
-/********************************************************
  Find the IP address of the master browser or DMB for a workgroup.
 *********************************************************/
 
-bool find_master_ip(const char *group, struct sockaddr_storage *master_ss)
+BOOL find_master_ip(const char *group, struct in_addr *master_ip)
 {
 	struct ip_service *ip_list = NULL;
 	int count = 0;
-	NTSTATUS status;
 
 	if (lp_disable_netbios()) {
 		DEBUG(5,("find_master_ip(%s): netbios is disabled\n", group));
-		return false;
+		return False;
 	}
 
-	status = internal_resolve_name(group, 0x1D, NULL, &ip_list, &count,
-				       lp_name_resolve_order());
-	if (NT_STATUS_IS_OK(status)) {
-		*master_ss = ip_list[0].ss;
+	if (internal_resolve_name(group, 0x1D, NULL, &ip_list, &count, lp_name_resolve_order())) {
+		*master_ip = ip_list[0].ip;
 		SAFE_FREE(ip_list);
-		return true;
+		return True;
 	}
-
-	status = internal_resolve_name(group, 0x1B, NULL, &ip_list, &count,
-				       lp_name_resolve_order());
-	if (NT_STATUS_IS_OK(status)) {
-		*master_ss = ip_list[0].ss;
+	if(internal_resolve_name(group, 0x1B, NULL, &ip_list, &count, lp_name_resolve_order())) {
+		*master_ip = ip_list[0].ip;
 		SAFE_FREE(ip_list);
-		return true;
+		return True;
 	}
 
 	SAFE_FREE(ip_list);
-	return false;
+	return False;
 }
 
 /********************************************************
@@ -1768,39 +1377,30 @@
  for a domain.
 *********************************************************/
 
-bool get_pdc_ip(const char *domain, struct sockaddr_storage *pss)
+BOOL get_pdc_ip(const char *domain, struct in_addr *ip)
 {
 	struct ip_service *ip_list = NULL;
 	int count = 0;
-	NTSTATUS status = NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND;
 
 	/* Look up #1B name */
 
-	if (lp_security() == SEC_ADS) {
-		status = internal_resolve_name(domain, 0x1b, NULL, &ip_list,
-					       &count, "ads");
+	if (!internal_resolve_name(domain, 0x1b, NULL, &ip_list, &count, lp_name_resolve_order())) {
+		return False;
 	}
 
-	if (!NT_STATUS_IS_OK(status) || count == 0) {
-		status = internal_resolve_name(domain, 0x1b, NULL, &ip_list,
-					       &count,
-					       lp_name_resolve_order());
-		if (!NT_STATUS_IS_OK(status)) {
-			return false;
-		}
-	}
-
 	/* if we get more than 1 IP back we have to assume it is a
 	   multi-homed PDC and not a mess up */
 
 	if ( count > 1 ) {
-		DEBUG(6,("get_pdc_ip: PDC has %d IP addresses!\n", count));
-		sort_service_list(ip_list, count);
+		DEBUG(6,("get_pdc_ip: PDC has %d IP addresses!\n", count));		
+		sort_ip_list2( ip_list, count );
 	}
 
-	*pss = ip_list[0].ss;
+	*ip = ip_list[0].ip;
+	
 	SAFE_FREE(ip_list);
-	return true;
+
+	return True;
 }
 
 /* Private enum type for lookups. */
@@ -1812,33 +1412,23 @@
  a domain.
 *********************************************************/
 
-static NTSTATUS get_dc_list(const char *domain,
-			const char *sitename,
-			struct ip_service **ip_list,
-			int *count,
-			enum dc_lookup_type lookup_type,
-			bool *ordered)
+static NTSTATUS get_dc_list(const char *domain, const char *sitename, struct ip_service **ip_list, 
+                            int *count, enum dc_lookup_type lookup_type, int *ordered)
 {
-	char *resolve_order = NULL;
-	char *saf_servername = NULL;
-	char *pserver = NULL;
+	fstring resolve_order;
+	char *saf_servername;
+	pstring pserver;
 	const char *p;
-	char *port_str = NULL;
+	char *port_str;
 	int port;
-	char *name;
+	fstring name;
 	int num_addresses = 0;
 	int  local_count, i, j;
 	struct ip_service *return_iplist = NULL;
 	struct ip_service *auto_ip_list = NULL;
-	bool done_auto_lookup = false;
+	BOOL done_auto_lookup = False;
 	int auto_count = 0;
-	NTSTATUS status;
-	TALLOC_CTX *ctx = talloc_init("get_dc_list");
 
-	if (!ctx) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
 	*ordered = False;
 
 	/* if we are restricted to solely using DNS for looking
@@ -1847,84 +1437,72 @@
 	   are disabled and ads_only is True, then set the string to
 	   NULL. */
 
-	resolve_order = talloc_strdup(ctx, lp_name_resolve_order());
-	if (!resolve_order) {
-		status = NT_STATUS_NO_MEMORY;
-		goto out;
-	}
-	strlower_m(resolve_order);
-	if (lookup_type == DC_ADS_ONLY)  {
-		if (strstr( resolve_order, "host")) {
-			resolve_order = talloc_strdup(ctx, "ads");
+	fstrcpy( resolve_order, lp_name_resolve_order() );
+	strlower_m( resolve_order );
+	if ( lookup_type == DC_ADS_ONLY)  {
+		if ( strstr( resolve_order, "host" ) ) {
+			fstrcpy( resolve_order, "ads" );
 
 			/* DNS SRV lookups used by the ads resolver
 			   are already sorted by priority and weight */
-			*ordered = true;
+			*ordered = True;
 		} else {
-                        resolve_order = talloc_strdup(ctx, "NULL");
+                        fstrcpy( resolve_order, "NULL" );
 		}
 	} else if (lookup_type == DC_KDC_ONLY) {
 		/* DNS SRV lookups used by the ads/kdc resolver
 		   are already sorted by priority and weight */
-		*ordered = true;
-		resolve_order = talloc_strdup(ctx, "kdc");
+		*ordered = True;
+		fstrcpy( resolve_order, "kdc" );
 	}
-	if (!resolve_order) {
-		status = NT_STATUS_NO_MEMORY;
-		goto out;
-	}
 
-	/* fetch the server we have affinity for.  Add the
+	/* fetch the server we have affinity for.  Add the 
 	   'password server' list to a search for our domain controllers */
-
+	
 	saf_servername = saf_fetch( domain);
-
-	if (strequal(domain, lp_workgroup()) || strequal(domain, lp_realm())) {
-		pserver = talloc_asprintf(NULL, "%s, %s",
+	
+	if ( strequal(domain, lp_workgroup()) || strequal(domain, lp_realm()) ) {
+		pstr_sprintf( pserver, "%s, %s", 
 			saf_servername ? saf_servername : "",
-			lp_passwordserver());
+			lp_passwordserver() );
 	} else {
-		pserver = talloc_asprintf(NULL, "%s, *",
-			saf_servername ? saf_servername : "");
+		pstr_sprintf( pserver, "%s, *", 
+			saf_servername ? saf_servername : "" );
 	}
 
-	SAFE_FREE(saf_servername);
-	if (!pserver) {
-		status = NT_STATUS_NO_MEMORY;
-		goto out;
-	}
+	SAFE_FREE( saf_servername );
 
 	/* if we are starting from scratch, just lookup DOMAIN<0x1c> */
 
-	if (!*pserver ) {
+	if ( !*pserver ) {
 		DEBUG(10,("get_dc_list: no preferred domain controllers.\n"));
-		status = internal_resolve_name(domain, 0x1C, sitename, ip_list,
-					     count, resolve_order);
-		goto out;
+		/* TODO: change return type of internal_resolve_name to
+		 * NTSTATUS */
+		if (internal_resolve_name(domain, 0x1C, sitename, ip_list, count,
+					  resolve_order)) {
+			return NT_STATUS_OK;
+		} else {
+			return NT_STATUS_NO_LOGON_SERVERS;
+		}
 	}
 
 	DEBUG(3,("get_dc_list: preferred server list: \"%s\"\n", pserver ));
-
+	
 	/*
 	 * if '*' appears in the "password server" list then add
 	 * an auto lookup to the list of manually configured
-	 * DC's.  If any DC is listed by name, then the list should be
-	 * considered to be ordered
+	 * DC's.  If any DC is listed by name, then the list should be 
+	 * considered to be ordered 
 	 */
 
 	p = pserver;
-	while (next_token_talloc(ctx, &p, &name, LIST_SEP)) {
+	while (next_token(&p,name,LIST_SEP,sizeof(name))) {
 		if (strequal(name, "*")) {
-			status = internal_resolve_name(domain, 0x1C, sitename,
-						       &auto_ip_list,
-						       &auto_count,
-						       resolve_order);
-			if (NT_STATUS_IS_OK(status)) {
+			if (internal_resolve_name(domain, 0x1C, sitename, &auto_ip_list,
+						  &auto_count, resolve_order))
 				num_addresses += auto_count;
-			}
-			done_auto_lookup = true;
-			DEBUG(8,("Adding %d DC's from auto lookup\n",
-						auto_count));
+			done_auto_lookup = True;
+			DEBUG(8,("Adding %d DC's from auto lookup\n", auto_count));
 		} else  {
 			num_addresses++;
 		}
@@ -1932,169 +1510,135 @@
 
 	/* if we have no addresses and haven't done the auto lookup, then
 	   just return the list of DC's.  Or maybe we just failed. */
-
-	if ((num_addresses == 0)) {
-		if (done_auto_lookup) {
-			DEBUG(4,("get_dc_list: no servers found\n"));
-			status = NT_STATUS_NO_LOGON_SERVERS;
-			goto out;
+		   
+	if ( (num_addresses == 0) ) {
+		if ( done_auto_lookup ) {
+			DEBUG(4,("get_dc_list: no servers found\n")); 
+			SAFE_FREE(auto_ip_list);
+			return NT_STATUS_NO_LOGON_SERVERS;
 		}
-		status = internal_resolve_name(domain, 0x1C, sitename, ip_list,
-					     count, resolve_order);
-		goto out;
+		if (internal_resolve_name(domain, 0x1C, sitename, ip_list, count,
+					  resolve_order)) {
+			return NT_STATUS_OK;
+		} else {
+			return NT_STATUS_NO_LOGON_SERVERS;
+		}
 	}
 
-	if ((return_iplist = SMB_MALLOC_ARRAY(struct ip_service,
-					num_addresses)) == NULL) {
+	if ( (return_iplist = SMB_MALLOC_ARRAY(struct ip_service, num_addresses)) == NULL ) {
 		DEBUG(3,("get_dc_list: malloc fail !\n"));
-		status = NT_STATUS_NO_MEMORY;
-		goto out;
+		SAFE_FREE(auto_ip_list);
+		return NT_STATUS_NO_MEMORY;
 	}
 
 	p = pserver;
 	local_count = 0;
 
 	/* fill in the return list now with real IP's */
-
-	while ((local_count<num_addresses) &&
-			next_token_talloc(ctx, &p, &name, LIST_SEP)) {
-		struct sockaddr_storage name_ss;
-
+				
+	while ( (local_count<num_addresses) && next_token(&p,name,LIST_SEP,sizeof(name)) ) {
+		struct in_addr name_ip;
+			
 		/* copy any addersses from the auto lookup */
-
-		if (strequal(name, "*")) {
-			for (j=0; j<auto_count; j++) {
-				char addr[INET6_ADDRSTRLEN];
-				print_sockaddr(addr,
-						sizeof(addr),
-						&auto_ip_list[j].ss);
-				/* Check for and don't copy any
-				 * known bad DC IP's. */
-				if(!NT_STATUS_IS_OK(check_negative_conn_cache(
-						domain,
-						addr))) {
-					DEBUG(5,("get_dc_list: "
-						"negative entry %s removed "
-						"from DC list\n",
-						addr));
+			
+		if ( strequal(name, "*") ) {
+			for ( j=0; j<auto_count; j++ ) {
+				/* Check for and don't copy any known bad DC IP's. */
+				if(!NT_STATUS_IS_OK(check_negative_conn_cache(domain, 
+						inet_ntoa(auto_ip_list[j].ip)))) {
+					DEBUG(5,("get_dc_list: negative entry %s removed from DC list\n",
+						inet_ntoa(auto_ip_list[j].ip) ));
 					continue;
 				}
-				return_iplist[local_count].ss =
-					auto_ip_list[j].ss;
-				return_iplist[local_count].port =
-					auto_ip_list[j].port;
+				return_iplist[local_count].ip   = auto_ip_list[j].ip;
+				return_iplist[local_count].port = auto_ip_list[j].port;
 				local_count++;
 			}
 			continue;
 		}
-
-		/* added support for address:port syntax for ads
-		 * (not that I think anyone will ever run the LDAP
-		 * server in an AD domain on something other than
-		 * port 389 */
-
+			
+			
+		/* added support for address:port syntax for ads (not that I think 
+		   anyone will ever run the LDAP server in an AD domain on something 
+		   other than port 389 */
+			
 		port = (lp_security() == SEC_ADS) ? LDAP_PORT : PORT_NONE;
-		if ((port_str=strchr(name, ':')) != NULL) {
+		if ( (port_str=strchr(name, ':')) != NULL ) {
 			*port_str = '\0';
 			port_str++;
-			port = atoi(port_str);
+			port = atoi( port_str );
 		}
 
-		/* explicit lookup; resolve_name() will
-		 * handle names & IP addresses */
-		if (resolve_name( name, &name_ss, 0x20 )) {
-			char addr[INET6_ADDRSTRLEN];
-			print_sockaddr(addr,
-					sizeof(addr),
-					&name_ss);
+		/* explicit lookup; resolve_name() will handle names & IP addresses */
+		if ( resolve_name( name, &name_ip, 0x20 ) ) {
 
 			/* Check for and don't copy any known bad DC IP's. */
-			if( !NT_STATUS_IS_OK(check_negative_conn_cache(domain,
-							addr)) ) {
-				DEBUG(5,("get_dc_list: negative entry %s "
-					"removed from DC list\n",
-					name ));
+			if( !NT_STATUS_IS_OK(check_negative_conn_cache(domain, inet_ntoa(name_ip))) ) {
+				DEBUG(5,("get_dc_list: negative entry %s removed from DC list\n",name ));
 				continue;
 			}
 
-			return_iplist[local_count].ss = name_ss;
+			return_iplist[local_count].ip 	= name_ip;
 			return_iplist[local_count].port = port;
 			local_count++;
-			*ordered = true;
+			*ordered = True;
 		}
 	}
+				
+	SAFE_FREE(auto_ip_list);
 
-	/* need to remove duplicates in the list if we have any
+	/* need to remove duplicates in the list if we have any 
 	   explicit password servers */
-
-	if (local_count) {
-		local_count = remove_duplicate_addrs2(return_iplist,
-				local_count );
+	   
+	if ( local_count ) {
+		local_count = remove_duplicate_addrs2( return_iplist, local_count );
 	}
-
+		
 	if ( DEBUGLEVEL >= 4 ) {
-		DEBUG(4,("get_dc_list: returning %d ip addresses "
-				"in an %sordered list\n",
-				local_count,
-				*ordered ? "":"un"));
+		DEBUG(4,("get_dc_list: returning %d ip addresses in an %sordered list\n", local_count, 
+			*ordered ? "":"un"));
 		DEBUG(4,("get_dc_list: "));
-		for ( i=0; i<local_count; i++ ) {
-			char addr[INET6_ADDRSTRLEN];
-			print_sockaddr(addr,
-					sizeof(addr),
-					&return_iplist[i].ss);
-			DEBUGADD(4,("%s:%d ", addr, return_iplist[i].port ));
-		}
+		for ( i=0; i<local_count; i++ )
+			DEBUGADD(4,("%s:%d ", inet_ntoa(return_iplist[i].ip), return_iplist[i].port ));
 		DEBUGADD(4,("\n"));
 	}
-
+			
 	*ip_list = return_iplist;
 	*count = local_count;
 
-	status = ( *count != 0 ? NT_STATUS_OK : NT_STATUS_NO_LOGON_SERVERS );
-
-  out:
-
-	SAFE_FREE(auto_ip_list);
-	TALLOC_FREE(ctx);
-	return status;
+	return ( *count != 0 ? NT_STATUS_OK : NT_STATUS_NO_LOGON_SERVERS );
 }
 
 /*********************************************************************
  Small wrapper function to get the DC list and sort it if neccessary.
 *********************************************************************/
 
-NTSTATUS get_sorted_dc_list( const char *domain,
-			const char *sitename,
-			struct ip_service **ip_list,
-			int *count,
-			bool ads_only )
+NTSTATUS get_sorted_dc_list( const char *domain, const char *sitename, struct ip_service **ip_list, int *count, BOOL ads_only )
 {
-	bool ordered;
+	BOOL ordered;
 	NTSTATUS status;
 	enum dc_lookup_type lookup_type = DC_NORMAL_LOOKUP;
 
-	DEBUG(8,("get_sorted_dc_list: attempting lookup "
-		"for name %s (sitename %s) using [%s]\n",
+	DEBUG(8,("get_sorted_dc_list: attempting lookup for name %s (sitename %s) "
+		"using [%s]\n",
 		domain,
 		sitename ? sitename : "NULL",
 		(ads_only ? "ads" : lp_name_resolve_order())));
-
+	
 	if (ads_only) {
 		lookup_type = DC_ADS_ONLY;
 	}
 
-	status = get_dc_list(domain, sitename, ip_list,
-			count, lookup_type, &ordered);
+	status = get_dc_list(domain, sitename, ip_list, count, lookup_type, &ordered);
 	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+		return status; 
 	}
-
+		
 	/* only sort if we don't already have an ordered list */
-	if (!ordered) {
-		sort_service_list(*ip_list, *count);
+	if ( !ordered ) {
+		sort_ip_list2( *ip_list, *count );
 	}
-
+		
 	return NT_STATUS_OK;
 }
 
@@ -2102,27 +1646,23 @@
  Get the KDC list - re-use all the logic in get_dc_list.
 *********************************************************************/
 
-NTSTATUS get_kdc_list( const char *realm,
-			const char *sitename,
-			struct ip_service **ip_list,
-			int *count)
+NTSTATUS get_kdc_list( const char *realm, const char *sitename, struct ip_service **ip_list, int *count)
 {
-	bool ordered;
+	BOOL ordered;
 	NTSTATUS status;
 
 	*count = 0;
 	*ip_list = NULL;
 
-	status = get_dc_list(realm, sitename, ip_list,
-			count, DC_KDC_ONLY, &ordered);
+	status = get_dc_list(realm, sitename, ip_list, count, DC_KDC_ONLY, &ordered);
 
 	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+		return status; 
 	}
 
 	/* only sort if we don't already have an ordered list */
 	if ( !ordered ) {
-		sort_service_list(*ip_list, *count);
+		sort_ip_list2( *ip_list, *count );
 	}
 
 	return NT_STATUS_OK;

Modified: branches/samba/upstream/source/libsmb/namequery_dc.c
===================================================================
--- branches/samba/upstream/source/libsmb/namequery_dc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/namequery_dc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 
@@ -29,7 +30,7 @@
 **********************************************************************/
 
 #ifdef HAVE_KRB5
-static bool is_our_primary_domain(const char *domain)
+static BOOL is_our_primary_domain(const char *domain)
 {
 	int role = lp_server_role();
 
@@ -46,15 +47,14 @@
  Find the name and IP address for a server in the realm/domain
  *************************************************************************/
  
-static bool ads_dc_name(const char *domain,
+static BOOL ads_dc_name(const char *domain,
 			const char *realm,
-			struct sockaddr_storage *dc_ss,
+			struct in_addr *dc_ip,
 			fstring srv_name)
 {
 	ADS_STRUCT *ads;
 	char *sitename;
 	int i;
-	char addr[INET6_ADDRSTRLEN];
 
 	if (!realm && strequal(domain, lp_workgroup())) {
 		realm = lp_realm();
@@ -99,7 +99,7 @@
 		}
 
 #ifdef HAVE_KRB5
-		if (is_our_primary_domain(domain) && (ads->config.flags & NBT_SERVER_KDC)) {
+		if (is_our_primary_domain(domain) && (ads->config.flags & ADS_KDC)) {
 			if (ads_closest_dc(ads)) {
 				/* We're going to use this KDC for this realm/domain.
 				   If we are using sites, then force the krb5 libs
@@ -108,12 +108,13 @@
 				create_local_private_krb5_conf_for_domain(realm,
 									domain,
 									sitename,
-									&ads->ldap.ss);
+									ads->ldap_ip);
 			} else {
+				/* use an off site KDC */
 				create_local_private_krb5_conf_for_domain(realm,
 									domain,
 									NULL,
-									&ads->ldap.ss);
+									ads->ldap_ip);
 			}
 		}
 #endif
@@ -131,37 +132,31 @@
 
 	fstrcpy(srv_name, ads->config.ldap_server_name);
 	strupper_m(srv_name);
-#ifdef HAVE_ADS
-	*dc_ss = ads->ldap.ss;
-#else
-	zero_addr(dc_ss);
-#endif
+	*dc_ip = ads->ldap_ip;
 	ads_destroy(&ads);
-
-	print_sockaddr(addr, sizeof(addr), dc_ss);
+	
 	DEBUG(4,("ads_dc_name: using server='%s' IP=%s\n",
-		 srv_name, addr));
-
+		 srv_name, inet_ntoa(*dc_ip)));
+	
 	return True;
 }
 
 /****************************************************************************
- Utility function to return the name of a DC. The name is guaranteed to be
- valid since we have already done a name_status_find on it
+ Utility function to return the name of a DC. The name is guaranteed to be 
+ valid since we have already done a name_status_find on it 
  ***************************************************************************/
 
-static bool rpc_dc_name(const char *domain,
-			fstring srv_name,
-			struct sockaddr_storage *ss_out)
+static BOOL rpc_dc_name(const char *domain, fstring srv_name, struct in_addr *ip_out)
 {
 	struct ip_service *ip_list = NULL;
-	struct sockaddr_storage dc_ss;
+	struct in_addr dc_ip, exclude_ip;
 	int count, i;
 	NTSTATUS result;
-	char addr[INET6_ADDRSTRLEN];
+	
+	zero_ip(&exclude_ip);
 
 	/* get a list of all domain controllers */
-
+	
 	if (!NT_STATUS_IS_OK(get_sorted_dc_list(domain, NULL, &ip_list, &count,
 						False))) {
 		DEBUG(3, ("Could not look up dc's for domain %s\n", domain));
@@ -171,34 +166,35 @@
 	/* Remove the entry we've already failed with (should be the PDC). */
 
 	for (i = 0; i < count; i++) {
-		if (is_zero_addr(&ip_list[i].ss))
+		if (is_zero_ip(ip_list[i].ip))
 			continue;
 
-		if (name_status_find(domain, 0x1c, 0x20, &ip_list[i].ss, srv_name)) {
+		if (name_status_find(domain, 0x1c, 0x20, ip_list[i].ip, srv_name)) {
 			result = check_negative_conn_cache( domain, srv_name );
 			if ( NT_STATUS_IS_OK(result) ) {
-				dc_ss = ip_list[i].ss;
+				dc_ip = ip_list[i].ip;
 				goto done;
 			}
 		}
 	}
+	
 
 	SAFE_FREE(ip_list);
 
 	/* No-one to talk to )-: */
 	return False;		/* Boo-hoo */
-
+	
  done:
 	/* We have the netbios name and IP address of a domain controller.
 	   Ideally we should sent a SAMLOGON request to determine whether
 	   the DC is alive and kicking.  If we can catch a dead DC before
 	   performing a cli_connect() we can avoid a 30-second timeout. */
 
-	print_sockaddr(addr, sizeof(addr), &dc_ss);
 	DEBUG(3, ("rpc_dc_name: Returning DC %s (%s) for domain %s\n", srv_name,
-		  addr, domain));
+		  inet_ntoa(dc_ip), domain));
 
-	*ss_out = dc_ss;
+	*ip_out = dc_ip;
+
 	SAFE_FREE(ip_list);
 
 	return True;
@@ -208,40 +204,37 @@
  wrapper around ads and rpc methods of finds DC's
 **********************************************************************/
 
-bool get_dc_name(const char *domain,
-		const char *realm,
-		fstring srv_name,
-		struct sockaddr_storage *ss_out)
+BOOL get_dc_name(const char *domain, const char *realm, fstring srv_name, struct in_addr *ip_out)
 {
-	struct sockaddr_storage dc_ss;
-	bool ret;
-	bool our_domain = False;
+	struct in_addr dc_ip;
+	BOOL ret;
+	BOOL our_domain = False;
 
-	zero_addr(&dc_ss);
+	zero_ip(&dc_ip);
 
 	ret = False;
-
+	
 	if ( strequal(lp_workgroup(), domain) || strequal(lp_realm(), realm) )
 		our_domain = True;
-
-	/* always try to obey what the admin specified in smb.conf
+	
+	/* always try to obey what the admin specified in smb.conf 
 	   (for the local domain) */
-
+	
 	if ( (our_domain && lp_security()==SEC_ADS) || realm ) {
-		ret = ads_dc_name(domain, realm, &dc_ss, srv_name);
+		ret = ads_dc_name(domain, realm, &dc_ip, srv_name);
 	}
 
 	if (!domain) {
 		/* if we have only the realm we can't do anything else */
 		return False;
 	}
-
+	
 	if (!ret) {
 		/* fall back on rpc methods if the ADS methods fail */
-		ret = rpc_dc_name(domain, srv_name, &dc_ss);
+		ret = rpc_dc_name(domain, srv_name, &dc_ip);
 	}
+		
+	*ip_out = dc_ip;
 
-	*ss_out = dc_ss;
-
 	return ret;
 }

Modified: branches/samba/upstream/source/libsmb/nmblib.c
===================================================================
--- branches/samba/upstream/source/libsmb/nmblib.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/nmblib.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,26 +1,29 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    NBT netbios library routines
    Copyright (C) Andrew Tridgell 1994-1998
-   Copyright (C) Jeremy Allison 2007
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   
 */
 
 #include "includes.h"
 
+extern struct in_addr lastip;
+extern int lastport;
+
 int num_good_sends = 0;
 int num_good_receives = 0;
 
@@ -80,12 +83,12 @@
 			unsigned char x = res->rdata[i+j];
 			if (x < 32 || x > 127)
 				x = '.';
-
+	  
 			if (i+j >= res->rdlength)
 				break;
 			DEBUGADD(4, ("%c", x));
 		}
-
+      
 		DEBUGADD(4, ("   hex "));
 
 		for (j = 0; j < MAX_NETBIOSNAME_LEN; j++) {
@@ -93,7 +96,7 @@
 				break;
 			DEBUGADD(4, ("%02X", (unsigned char)res->rdata[i+j]));
 		}
-
+      
 		DEBUGADD(4, ("\n"));
 	}
 }
@@ -107,22 +110,19 @@
 	struct nmb_packet *nmb = &p->packet.nmb;
 
 	if( DEBUGLVL( 4 ) ) {
-		dbgtext( "nmb packet from %s(%d) header: id=%d "
-				"opcode=%s(%d) response=%s\n",
+		dbgtext( "nmb packet from %s(%d) header: id=%d opcode=%s(%d) response=%s\n",
 			inet_ntoa(p->ip), p->port,
 			nmb->header.name_trn_id,
 			lookup_opcode_name(nmb->header.opcode),
 			nmb->header.opcode,
 			BOOLSTR(nmb->header.response) );
-		dbgtext( "    header: flags: bcast=%s rec_avail=%s "
-				"rec_des=%s trunc=%s auth=%s\n",
+		dbgtext( "    header: flags: bcast=%s rec_avail=%s rec_des=%s trunc=%s auth=%s\n",
 			BOOLSTR(nmb->header.nm_flags.bcast),
 			BOOLSTR(nmb->header.nm_flags.recursion_available),
 			BOOLSTR(nmb->header.nm_flags.recursion_desired),
 			BOOLSTR(nmb->header.nm_flags.trunc),
 			BOOLSTR(nmb->header.nm_flags.authoritative) );
-		dbgtext( "    header: rcode=%d qdcount=%d ancount=%d "
-				"nscount=%d arcount=%d\n",
+		dbgtext( "    header: rcode=%d qdcount=%d ancount=%d nscount=%d arcount=%d\n",
 			nmb->header.rcode,
 			nmb->header.qdcount,
 			nmb->header.ancount,
@@ -152,22 +152,21 @@
  Handle "compressed" name pointers.
 ******************************************************************/
 
-static bool handle_name_ptrs(unsigned char *ubuf,int *offset,int length,
-			     bool *got_pointer,int *ret)
+static BOOL handle_name_ptrs(unsigned char *ubuf,int *offset,int length,
+			     BOOL *got_pointer,int *ret)
 {
 	int loop_count=0;
-
+  
 	while ((ubuf[*offset] & 0xC0) == 0xC0) {
 		if (!*got_pointer)
 			(*ret) += 2;
 		(*got_pointer)=True;
 		(*offset) = ((ubuf[*offset] & ~0xC0)<<8) | ubuf[(*offset)+1];
-		if (loop_count++ == 10 ||
-				(*offset) < 0 || (*offset)>(length-2)) {
-			return False;
+		if (loop_count++ == 10 || (*offset) < 0 || (*offset)>(length-2)) {
+			return(False);
 		}
 	}
-	return True;
+	return(True);
 }
 
 /*******************************************************************
@@ -180,17 +179,17 @@
 	int m,n=0;
 	unsigned char *ubuf = (unsigned char *)inbuf;
 	int ret = 0;
-	bool got_pointer=False;
+	BOOL got_pointer=False;
 	int loop_count=0;
 	int offset = ofs;
 
 	if (length - offset < 2)
-		return(0);
+		return(0);  
 
 	/* handle initial name pointers */
 	if (!handle_name_ptrs(ubuf,&offset,length,&got_pointer,&ret))
 		return(0);
-
+  
 	m = ubuf[offset];
 
 	if (!m)
@@ -216,15 +215,14 @@
 	name->name[n] = 0;
 
 	if (n==MAX_NETBIOSNAME_LEN) {
-		/* parse out the name type, its always
-		 * in the 16th byte of the name */
+		/* parse out the name type, its always in the 16th byte of the name */
 		name->name_type = ((unsigned char)name->name[15]) & 0xff;
-
+  
 		/* remove trailing spaces */
 		name->name[15] = 0;
 		n = 14;
 		while (n && name->name[n]==' ')
-			name->name[n--] = 0;
+			name->name[n--] = 0;  
 	}
 
 	/* now the domain parts (if any) */
@@ -256,7 +254,7 @@
 		if (loop_count++ == 10)
 			return 0;
 	}
-	name->scope[n++] = 0;
+	name->scope[n++] = 0;  
 
 	return(ret);
 }
@@ -271,8 +269,7 @@
 {
 	size_t len = strlen(name);
 
-	memcpy(dest, name, (len < MAX_NETBIOSNAME_LEN) ?
-			len : MAX_NETBIOSNAME_LEN - 1);
+	memcpy(dest, name, (len < MAX_NETBIOSNAME_LEN) ? len : MAX_NETBIOSNAME_LEN - 1);
 	if (len < MAX_NETBIOSNAME_LEN - 1) {
 		memset(dest + len, pad, MAX_NETBIOSNAME_LEN - 1 - len);
 	}
@@ -286,8 +283,6 @@
  Compressed names are really weird. The "compression" doubles the
  size. The idea is that it also means that compressed names conform
  to the doman name system. See RFC1002.
-
- If buf == NULL this is a length calculation.
 ******************************************************************/
 
 static int put_nmb_name(char *buf,int offset,struct nmb_name *name)
@@ -303,42 +298,33 @@
 		put_name(buf1, name->name, ' ', name->name_type);
 	}
 
-	if (buf) {
-		buf[offset] = 0x20;
-	}
+	buf[offset] = 0x20;
 
 	ret = 34;
 
 	for (m=0;m<MAX_NETBIOSNAME_LEN;m++) {
-		if (buf) {
-			buf[offset+1+2*m] = 'A' + ((buf1[m]>>4)&0xF);
-			buf[offset+2+2*m] = 'A' + (buf1[m]&0xF);
-		}
+		buf[offset+1+2*m] = 'A' + ((buf1[m]>>4)&0xF);
+		buf[offset+2+2*m] = 'A' + (buf1[m]&0xF);
 	}
 	offset += 33;
 
-	if (buf) {
-		buf[offset] = 0;
-	}
+	buf[offset] = 0;
 
 	if (name->scope[0]) {
 		/* XXXX this scope handling needs testing */
 		ret += strlen(name->scope) + 1;
-		if (buf) {
-			safe_strcpy(&buf[offset+1],name->scope,
-					sizeof(name->scope));
-
+		safe_strcpy(&buf[offset+1],name->scope,sizeof(name->scope));  
+  
+		p = &buf[offset+1];
+		while ((p = strchr_m(p,'.'))) {
+			buf[offset] = PTR_DIFF(p,&buf[offset+1]);
+			offset += (buf[offset] + 1);
 			p = &buf[offset+1];
-			while ((p = strchr_m(p,'.'))) {
-				buf[offset] = PTR_DIFF(p,&buf[offset+1]);
-				offset += (buf[offset] + 1);
-				p = &buf[offset+1];
-			}
-			buf[offset] = strlen(&buf[offset+1]);
 		}
+		buf[offset] = strlen(&buf[offset+1]);
 	}
 
-	return ret;
+	return(ret);
 }
 
 /*******************************************************************
@@ -347,26 +333,26 @@
 
 char *nmb_namestr(const struct nmb_name *n)
 {
+	static int i=0;
+	static fstring ret[4];
 	fstring name;
-	char *result;
+	char *p = ret[i];
 
 	pull_ascii_fstring(name, n->name);
 	if (!n->scope[0])
-		result = talloc_asprintf(talloc_tos(), "%s<%02x>", name,
-					 n->name_type);
+		slprintf(p,sizeof(fstring)-1, "%s<%02x>",name,n->name_type);
 	else
-		result = talloc_asprintf(talloc_tos(), "%s<%02x>.%s", name,
-					 n->name_type, n->scope);
+		slprintf(p,sizeof(fstring)-1, "%s<%02x>.%s",name,n->name_type,n->scope);
 
-	SMB_ASSERT(result != NULL);
-	return result;
+	i = (i+1)%4;
+	return(p);
 }
 
 /*******************************************************************
  Allocate and parse some resource records.
 ******************************************************************/
 
-static bool parse_alloc_res_rec(char *inbuf,int *offset,int length,
+static BOOL parse_alloc_res_rec(char *inbuf,int *offset,int length,
 				struct res_rec **recs, int count)
 {
 	int i;
@@ -378,8 +364,7 @@
 	memset((char *)*recs,'\0',sizeof(**recs)*count);
 
 	for (i=0;i<count;i++) {
-		int l = parse_nmb_name(inbuf,*offset,length,
-				&(*recs)[i].rr_name);
+		int l = parse_nmb_name(inbuf,*offset,length,&(*recs)[i].rr_name);
 		(*offset) += l;
 		if (!l || (*offset)+10 > length) {
 			SAFE_FREE(*recs);
@@ -390,20 +375,19 @@
 		(*recs)[i].ttl = RIVAL(inbuf,(*offset)+4);
 		(*recs)[i].rdlength = RSVAL(inbuf,(*offset)+8);
 		(*offset) += 10;
-		if ((*recs)[i].rdlength>sizeof((*recs)[i].rdata) ||
+		if ((*recs)[i].rdlength>sizeof((*recs)[i].rdata) || 
 				(*offset)+(*recs)[i].rdlength > length) {
 			SAFE_FREE(*recs);
 			return(False);
 		}
 		memcpy((*recs)[i].rdata,inbuf+(*offset),(*recs)[i].rdlength);
-		(*offset) += (*recs)[i].rdlength;
+		(*offset) += (*recs)[i].rdlength;    
 	}
 	return(True);
 }
 
 /*******************************************************************
  Put a resource record into a packet.
- If buf == NULL this is a length calculation.
 ******************************************************************/
 
 static int put_res_rec(char *buf,int offset,struct res_rec *recs,int count)
@@ -415,58 +399,48 @@
 		int l = put_nmb_name(buf,offset,&recs[i].rr_name);
 		offset += l;
 		ret += l;
-		if (buf) {
-			RSSVAL(buf,offset,recs[i].rr_type);
-			RSSVAL(buf,offset+2,recs[i].rr_class);
-			RSIVAL(buf,offset+4,recs[i].ttl);
-			RSSVAL(buf,offset+8,recs[i].rdlength);
-			memcpy(buf+offset+10,recs[i].rdata,recs[i].rdlength);
-		}
+		RSSVAL(buf,offset,recs[i].rr_type);
+		RSSVAL(buf,offset+2,recs[i].rr_class);
+		RSIVAL(buf,offset+4,recs[i].ttl);
+		RSSVAL(buf,offset+8,recs[i].rdlength);
+		memcpy(buf+offset+10,recs[i].rdata,recs[i].rdlength);
 		offset += 10+recs[i].rdlength;
 		ret += 10+recs[i].rdlength;
 	}
 
-	return ret;
+	return(ret);
 }
 
 /*******************************************************************
  Put a compressed name pointer record into a packet.
- If buf == NULL this is a length calculation.
 ******************************************************************/
 
-static int put_compressed_name_ptr(unsigned char *buf,
-				int offset,
-				struct res_rec *rec,
-				int ptr_offset)
-{
+static int put_compressed_name_ptr(unsigned char *buf,int offset,struct res_rec *rec,int ptr_offset)
+{  
 	int ret=0;
-	if (buf) {
-		buf[offset] = (0xC0 | ((ptr_offset >> 8) & 0xFF));
-		buf[offset+1] = (ptr_offset & 0xFF);
-	}
+	buf[offset] = (0xC0 | ((ptr_offset >> 8) & 0xFF));
+	buf[offset+1] = (ptr_offset & 0xFF);
 	offset += 2;
 	ret += 2;
-	if (buf) {
-		RSSVAL(buf,offset,rec->rr_type);
-		RSSVAL(buf,offset+2,rec->rr_class);
-		RSIVAL(buf,offset+4,rec->ttl);
-		RSSVAL(buf,offset+8,rec->rdlength);
-		memcpy(buf+offset+10,rec->rdata,rec->rdlength);
-	}
+	RSSVAL(buf,offset,rec->rr_type);
+	RSSVAL(buf,offset+2,rec->rr_class);
+	RSIVAL(buf,offset+4,rec->ttl);
+	RSSVAL(buf,offset+8,rec->rdlength);
+	memcpy(buf+offset+10,rec->rdata,rec->rdlength);
 	offset += 10+rec->rdlength;
 	ret += 10+rec->rdlength;
-
-	return ret;
+    
+	return(ret);
 }
 
 /*******************************************************************
- Parse a dgram packet. Return False if the packet can't be parsed
+ Parse a dgram packet. Return False if the packet can't be parsed 
  or is invalid for some reason, True otherwise.
 
  This is documented in section 4.4.1 of RFC1002.
 ******************************************************************/
 
-static bool parse_dgram(char *inbuf,int length,struct dgram_packet *dgram)
+static BOOL parse_dgram(char *inbuf,int length,struct dgram_packet *dgram)
 {
 	int offset;
 	int flags;
@@ -493,22 +467,19 @@
 
 	if (dgram->header.msg_type == 0x10 ||
 			dgram->header.msg_type == 0x11 ||
-			dgram->header.msg_type == 0x12) {
-		offset += parse_nmb_name(inbuf,offset,length,
-				&dgram->source_name);
-		offset += parse_nmb_name(inbuf,offset,length,
-				&dgram->dest_name);
+			dgram->header.msg_type == 0x12) {      
+		offset += parse_nmb_name(inbuf,offset,length,&dgram->source_name);
+		offset += parse_nmb_name(inbuf,offset,length,&dgram->dest_name);
 	}
 
-	if (offset >= length || (length-offset > sizeof(dgram->data)))
+	if (offset >= length || (length-offset > sizeof(dgram->data))) 
 		return(False);
 
 	dgram->datasize = length-offset;
 	memcpy(dgram->data,inbuf+offset,dgram->datasize);
 
 	/* Paranioa. Ensure the last 2 bytes in the dgram buffer are
-	   zero. This should be true anyway, just enforce it for
-	   paranioa sake. JRA. */
+	   zero. This should be true anyway, just enforce it for paranioa sake. JRA. */
 	SMB_ASSERT(dgram->datasize <= (sizeof(dgram->data)-2));
 	memset(&dgram->data[sizeof(dgram->data)-2], '\0', 2);
 
@@ -516,11 +487,11 @@
 }
 
 /*******************************************************************
- Parse a nmb packet. Return False if the packet can't be parsed
+ Parse a nmb packet. Return False if the packet can't be parsed 
  or is invalid for some reason, True otherwise.
 ******************************************************************/
 
-static bool parse_nmb(char *inbuf,int length,struct nmb_packet *nmb)
+static BOOL parse_nmb(char *inbuf,int length,struct nmb_packet *nmb)
 {
 	int nm_flags,offset;
 
@@ -541,16 +512,15 @@
 	nmb->header.nm_flags.recursion_available = (nm_flags&8)?True:False;
 	nmb->header.nm_flags.recursion_desired = (nm_flags&0x10)?True:False;
 	nmb->header.nm_flags.trunc = (nm_flags&0x20)?True:False;
-	nmb->header.nm_flags.authoritative = (nm_flags&0x40)?True:False;
+	nmb->header.nm_flags.authoritative = (nm_flags&0x40)?True:False;  
 	nmb->header.rcode = CVAL(inbuf,3) & 0xF;
 	nmb->header.qdcount = RSVAL(inbuf,4);
 	nmb->header.ancount = RSVAL(inbuf,6);
 	nmb->header.nscount = RSVAL(inbuf,8);
 	nmb->header.arcount = RSVAL(inbuf,10);
-
+  
 	if (nmb->header.qdcount) {
-		offset = parse_nmb_name(inbuf,12,length,
-				&nmb->question.question_name);
+		offset = parse_nmb_name(inbuf,12,length,&nmb->question.question_name);
 		if (!offset)
 			return(False);
 
@@ -565,19 +535,16 @@
 	}
 
 	/* and any resource records */
-	if (nmb->header.ancount &&
-			!parse_alloc_res_rec(inbuf,&offset,length,&nmb->answers,
+	if (nmb->header.ancount && !parse_alloc_res_rec(inbuf,&offset,length,&nmb->answers,
 					nmb->header.ancount))
 		return(False);
 
-	if (nmb->header.nscount &&
-			!parse_alloc_res_rec(inbuf,&offset,length,&nmb->nsrecs,
+	if (nmb->header.nscount && !parse_alloc_res_rec(inbuf,&offset,length,&nmb->nsrecs,
 					nmb->header.nscount))
 		return(False);
-
-	if (nmb->header.arcount &&
-			!parse_alloc_res_rec(inbuf,&offset,length,
-				&nmb->additional, nmb->header.arcount))
+  
+	if (nmb->header.arcount && !parse_alloc_res_rec(inbuf,&offset,length,&nmb->additional,
+					nmb->header.arcount))
 		return(False);
 
 	return(True);
@@ -588,7 +555,7 @@
 ******************************************************************/
 
 static struct packet_struct *copy_nmb_packet(struct packet_struct *packet)
-{
+{  
 	struct nmb_packet *nmb;
 	struct nmb_packet *copy_nmb;
 	struct packet_struct *pkt_copy;
@@ -616,24 +583,21 @@
 	/* Now copy any resource records. */
 
 	if (nmb->answers) {
-		if((copy_nmb->answers = SMB_MALLOC_ARRAY(
-				struct res_rec,nmb->header.ancount)) == NULL)
+		if((copy_nmb->answers = SMB_MALLOC_ARRAY(struct res_rec,nmb->header.ancount)) == NULL)
 			goto free_and_exit;
-		memcpy((char *)copy_nmb->answers, (char *)nmb->answers,
+		memcpy((char *)copy_nmb->answers, (char *)nmb->answers, 
 				nmb->header.ancount * sizeof(struct res_rec));
 	}
 	if (nmb->nsrecs) {
-		if((copy_nmb->nsrecs = SMB_MALLOC_ARRAY(
-				struct res_rec, nmb->header.nscount)) == NULL)
+		if((copy_nmb->nsrecs = SMB_MALLOC_ARRAY(struct res_rec, nmb->header.nscount)) == NULL)
 			goto free_and_exit;
-		memcpy((char *)copy_nmb->nsrecs, (char *)nmb->nsrecs,
+		memcpy((char *)copy_nmb->nsrecs, (char *)nmb->nsrecs, 
 				nmb->header.nscount * sizeof(struct res_rec));
 	}
 	if (nmb->additional) {
-		if((copy_nmb->additional = SMB_MALLOC_ARRAY(
-				struct res_rec, nmb->header.arcount)) == NULL)
+		if((copy_nmb->additional = SMB_MALLOC_ARRAY(struct res_rec, nmb->header.arcount)) == NULL)
 			goto free_and_exit;
-		memcpy((char *)copy_nmb->additional, (char *)nmb->additional,
+		memcpy((char *)copy_nmb->additional, (char *)nmb->additional, 
 				nmb->header.arcount * sizeof(struct res_rec));
 	}
 
@@ -655,7 +619,7 @@
 ******************************************************************/
 
 static struct packet_struct *copy_dgram_packet(struct packet_struct *packet)
-{
+{ 
 	struct packet_struct *pkt_copy;
 
 	if(( pkt_copy = SMB_MALLOC_P(struct packet_struct)) == NULL) {
@@ -680,20 +644,20 @@
 ******************************************************************/
 
 struct packet_struct *copy_packet(struct packet_struct *packet)
-{
+{  
 	if(packet->packet_type == NMB_PACKET)
 		return copy_nmb_packet(packet);
 	else if (packet->packet_type == DGRAM_PACKET)
 		return copy_dgram_packet(packet);
 	return NULL;
 }
-
+ 
 /*******************************************************************
  Free up any resources associated with an nmb packet.
 ******************************************************************/
 
 static void free_nmb_packet(struct nmb_packet *nmb)
-{
+{  
 	SAFE_FREE(nmb->answers);
 	SAFE_FREE(nmb->nsrecs);
 	SAFE_FREE(nmb->additional);
@@ -704,7 +668,7 @@
 ******************************************************************/
 
 static void free_dgram_packet(struct dgram_packet *nmb)
-{
+{  
 	/* We have nothing to do for a dgram packet. */
 }
 
@@ -713,8 +677,8 @@
 ******************************************************************/
 
 void free_packet(struct packet_struct *packet)
-{
-	if (packet->locked)
+{  
+	if (packet->locked) 
 		return;
 	if (packet->packet_type == NMB_PACKET)
 		free_nmb_packet(&packet->packet.nmb);
@@ -729,12 +693,10 @@
 ******************************************************************/
 
 struct packet_struct *parse_packet(char *buf,int length,
-				   enum packet_type packet_type,
-				   struct in_addr ip,
-				   int port)
+				   enum packet_type packet_type)
 {
 	struct packet_struct *p;
-	bool ok=False;
+	BOOL ok=False;
 
 	p = SMB_MALLOC_P(struct packet_struct);
 	if (!p)
@@ -744,8 +706,8 @@
 
 	p->next = NULL;
 	p->prev = NULL;
-	p->ip = ip;
-	p->port = port;
+	p->ip = lastip;
+	p->port = lastport;
 	p->locked = False;
 	p->timestamp = time(NULL);
 	p->packet_type = packet_type;
@@ -754,7 +716,7 @@
 	case NMB_PACKET:
 		ok = parse_nmb(buf,length,&p->packet.nmb);
 		break;
-
+		
 	case DGRAM_PACKET:
 		ok = parse_dgram(buf,length,&p->packet.dgram);
 		break;
@@ -776,41 +738,34 @@
 struct packet_struct *read_packet(int fd,enum packet_type packet_type)
 {
 	struct packet_struct *packet;
-	struct sockaddr_storage sa;
-	struct sockaddr_in *si = (struct sockaddr_in *)&sa;
 	char buf[MAX_DGRAM_SIZE];
 	int length;
-
-	length = read_udp_v4_socket(fd,buf,sizeof(buf),&sa);
-	if (length < MIN_DGRAM_SIZE || sa.ss_family != AF_INET) {
-		return NULL;
-	}
-
-	packet = parse_packet(buf,
-			length,
-			packet_type,
-			si->sin_addr,
-			ntohs(si->sin_port));
+	
+	length = read_udp_socket(fd,buf,sizeof(buf));
+	if (length < MIN_DGRAM_SIZE)
+		return(NULL);
+	
+	packet = parse_packet(buf, length, packet_type);
 	if (!packet)
 		return NULL;
 
 	packet->fd = fd;
-
+	
 	num_good_receives++;
-
+	
 	DEBUG(5,("Received a packet of len %d from (%s) port %d\n",
 		 length, inet_ntoa(packet->ip), packet->port ) );
-
+	
 	return(packet);
 }
-
+					 
 /*******************************************************************
  Send a udp packet on a already open socket.
 ******************************************************************/
 
-static bool send_udp(int fd,char *buf,int len,struct in_addr ip,int port)
+static BOOL send_udp(int fd,char *buf,int len,struct in_addr ip,int port)
 {
-	bool ret = False;
+	BOOL ret = False;
 	int i;
 	struct sockaddr_in sock_out;
 
@@ -819,17 +774,16 @@
 	putip((char *)&sock_out.sin_addr,(char *)&ip);
 	sock_out.sin_port = htons( port );
 	sock_out.sin_family = AF_INET;
-
+  
 	DEBUG( 5, ( "Sending a packet of len %d to (%s) on port %d\n",
 			len, inet_ntoa(ip), port ) );
 
 	/*
 	 * Patch to fix asynch error notifications from Linux kernel.
 	 */
-
+	
 	for (i = 0; i < 5; i++) {
-		ret = (sendto(fd,buf,len,0,(struct sockaddr *)&sock_out,
-					sizeof(sock_out)) >= 0);
+		ret = (sendto(fd,buf,len,0,(struct sockaddr *)&sock_out, sizeof(sock_out)) >= 0);
 		if (ret || errno != ECONNREFUSED)
 			break;
 	}
@@ -846,40 +800,48 @@
 
 /*******************************************************************
  Build a dgram packet ready for sending.
- If buf == NULL this is a length calculation.
+
+ XXXX This currently doesn't handle packets too big for one
+ datagram. It should split them and use the packet_offset, more and
+ first flags to handle the fragmentation. Yuck.
+
+   [...but it isn't clear that we would ever need to send a
+   a fragmented NBT Datagram.  The IP layer does its own
+   fragmentation to ensure that messages can fit into the path
+   MTU.  It *is* important to be able to receive and rebuild
+   fragmented NBT datagrams, just in case someone out there
+   really has implemented this 'feature'.  crh -)------ ]
+
 ******************************************************************/
 
-static int build_dgram(char *buf, size_t len, struct dgram_packet *dgram)
+static int build_dgram(char *buf,struct packet_struct *p)
 {
+	struct dgram_packet *dgram = &p->packet.dgram;
 	unsigned char *ubuf = (unsigned char *)buf;
 	int offset=0;
 
 	/* put in the header */
-	if (buf) {
-		ubuf[0] = dgram->header.msg_type;
-		ubuf[1] = (((int)dgram->header.flags.node_type)<<2);
-		if (dgram->header.flags.more)
-			ubuf[1] |= 1;
-		if (dgram->header.flags.first)
-			ubuf[1] |= 2;
-		RSSVAL(ubuf,2,dgram->header.dgm_id);
-		putip(ubuf+4,(char *)&dgram->header.source_ip);
-		RSSVAL(ubuf,8,dgram->header.source_port);
-		RSSVAL(ubuf,12,dgram->header.packet_offset);
-	}
+	ubuf[0] = dgram->header.msg_type;
+	ubuf[1] = (((int)dgram->header.flags.node_type)<<2);
+	if (dgram->header.flags.more)
+		ubuf[1] |= 1;
+	if (dgram->header.flags.first)
+		ubuf[1] |= 2;
+	RSSVAL(ubuf,2,dgram->header.dgm_id);
+	putip(ubuf+4,(char *)&dgram->header.source_ip);
+	RSSVAL(ubuf,8,dgram->header.source_port);
+	RSSVAL(ubuf,12,dgram->header.packet_offset);
 
 	offset = 14;
 
 	if (dgram->header.msg_type == 0x10 ||
 			dgram->header.msg_type == 0x11 ||
-			dgram->header.msg_type == 0x12) {
+			dgram->header.msg_type == 0x12) {      
 		offset += put_nmb_name((char *)ubuf,offset,&dgram->source_name);
 		offset += put_nmb_name((char *)ubuf,offset,&dgram->dest_name);
 	}
 
-	if (buf) {
-		memcpy(ubuf+offset,dgram->data,dgram->datasize);
-	}
+	memcpy(ubuf+offset,dgram->data,dgram->datasize);
 	offset += dgram->datasize;
 
 	/* automatically set the dgm_length
@@ -887,11 +849,9 @@
 	 *       include the fourteen-byte header. crh
 	 */
 	dgram->header.dgm_length = (offset - 14);
-	if (buf) {
-		RSSVAL(ubuf,10,dgram->header.dgm_length);
-	}
+	RSSVAL(ubuf,10,dgram->header.dgm_length); 
 
-	return offset;
+	return(offset);
 }
 
 /*******************************************************************
@@ -913,7 +873,7 @@
   Compare two nmb names
 ******************************************************************/
 
-bool nmb_name_equal(struct nmb_name *n1, struct nmb_name *n2)
+BOOL nmb_name_equal(struct nmb_name *n1, struct nmb_name *n2)
 {
 	return ((n1->name_type == n2->name_type) &&
 		strequal(n1->name ,n2->name ) &&
@@ -922,89 +882,59 @@
 
 /*******************************************************************
  Build a nmb packet ready for sending.
- If buf == NULL this is a length calculation.
+
+ XXXX this currently relies on not being passed something that expands
+ to a packet too big for the buffer. Eventually this should be
+ changed to set the trunc bit so the receiver can request the rest
+ via tcp (when that becomes supported)
 ******************************************************************/
 
-static int build_nmb(char *buf, size_t len, struct nmb_packet *nmb)
+static int build_nmb(char *buf,struct packet_struct *p)
 {
+	struct nmb_packet *nmb = &p->packet.nmb;
 	unsigned char *ubuf = (unsigned char *)buf;
 	int offset=0;
 
-	if (len && len < 12) {
-		return 0;
-	}
-
 	/* put in the header */
-	if (buf) {
-		RSSVAL(ubuf,offset,nmb->header.name_trn_id);
-		ubuf[offset+2] = (nmb->header.opcode & 0xF) << 3;
-		if (nmb->header.response)
-			ubuf[offset+2] |= (1<<7);
-		if (nmb->header.nm_flags.authoritative &&
-				nmb->header.response)
-			ubuf[offset+2] |= 0x4;
-		if (nmb->header.nm_flags.trunc)
-			ubuf[offset+2] |= 0x2;
-		if (nmb->header.nm_flags.recursion_desired)
-			ubuf[offset+2] |= 0x1;
-		if (nmb->header.nm_flags.recursion_available &&
-				nmb->header.response)
-			ubuf[offset+3] |= 0x80;
-		if (nmb->header.nm_flags.bcast)
-			ubuf[offset+3] |= 0x10;
-		ubuf[offset+3] |= (nmb->header.rcode & 0xF);
+	RSSVAL(ubuf,offset,nmb->header.name_trn_id);
+	ubuf[offset+2] = (nmb->header.opcode & 0xF) << 3;
+	if (nmb->header.response)
+		ubuf[offset+2] |= (1<<7);
+	if (nmb->header.nm_flags.authoritative && 
+			nmb->header.response)
+		ubuf[offset+2] |= 0x4;
+	if (nmb->header.nm_flags.trunc)
+		ubuf[offset+2] |= 0x2;
+	if (nmb->header.nm_flags.recursion_desired)
+		ubuf[offset+2] |= 0x1;
+	if (nmb->header.nm_flags.recursion_available &&
+			nmb->header.response)
+		ubuf[offset+3] |= 0x80;
+	if (nmb->header.nm_flags.bcast)
+		ubuf[offset+3] |= 0x10;
+	ubuf[offset+3] |= (nmb->header.rcode & 0xF);
 
-		RSSVAL(ubuf,offset+4,nmb->header.qdcount);
-		RSSVAL(ubuf,offset+6,nmb->header.ancount);
-		RSSVAL(ubuf,offset+8,nmb->header.nscount);
-		RSSVAL(ubuf,offset+10,nmb->header.arcount);
-	}
-
+	RSSVAL(ubuf,offset+4,nmb->header.qdcount);
+	RSSVAL(ubuf,offset+6,nmb->header.ancount);
+	RSSVAL(ubuf,offset+8,nmb->header.nscount);
+	RSSVAL(ubuf,offset+10,nmb->header.arcount);
+  
 	offset += 12;
 	if (nmb->header.qdcount) {
 		/* XXXX this doesn't handle a qdcount of > 1 */
-		if (len) {
-			/* Length check. */
-			int extra = put_nmb_name(NULL,offset,
-					&nmb->question.question_name);
-			if (offset + extra > len) {
-				return 0;
-			}
-		}
-		offset += put_nmb_name((char *)ubuf,offset,
-				&nmb->question.question_name);
-		if (buf) {
-			RSSVAL(ubuf,offset,nmb->question.question_type);
-			RSSVAL(ubuf,offset+2,nmb->question.question_class);
-		}
+		offset += put_nmb_name((char *)ubuf,offset,&nmb->question.question_name);
+		RSSVAL(ubuf,offset,nmb->question.question_type);
+		RSSVAL(ubuf,offset+2,nmb->question.question_class);
 		offset += 4;
 	}
 
-	if (nmb->header.ancount) {
-		if (len) {
-			/* Length check. */
-			int extra = put_res_rec(NULL,offset,nmb->answers,
-					nmb->header.ancount);
-			if (offset + extra > len) {
-				return 0;
-			}
-		}
+	if (nmb->header.ancount)
 		offset += put_res_rec((char *)ubuf,offset,nmb->answers,
 				nmb->header.ancount);
-	}
 
-	if (nmb->header.nscount) {
-		if (len) {
-			/* Length check. */
-			int extra = put_res_rec(NULL,offset,nmb->nsrecs,
-				nmb->header.nscount);
-			if (offset + extra > len) {
-				return 0;
-			}
-		}
+	if (nmb->header.nscount)
 		offset += put_res_rec((char *)ubuf,offset,nmb->nsrecs,
 				nmb->header.nscount);
-	}
 
 	/*
 	 * The spec says we must put compressed name pointers
@@ -1014,53 +944,37 @@
 	 */
 
 	if((nmb->header.response == False) &&
-		((nmb->header.opcode == NMB_NAME_REG_OPCODE) ||
-		(nmb->header.opcode == NMB_NAME_RELEASE_OPCODE) ||
-		(nmb->header.opcode == NMB_NAME_REFRESH_OPCODE_8) ||
-		(nmb->header.opcode == NMB_NAME_REFRESH_OPCODE_9) ||
-		(nmb->header.opcode == NMB_NAME_MULTIHOMED_REG_OPCODE)) &&
-		(nmb->header.arcount == 1)) {
+			((nmb->header.opcode == NMB_NAME_REG_OPCODE) ||
+			(nmb->header.opcode == NMB_NAME_RELEASE_OPCODE) ||
+			(nmb->header.opcode == NMB_NAME_REFRESH_OPCODE_8) ||
+			(nmb->header.opcode == NMB_NAME_REFRESH_OPCODE_9) ||
+			(nmb->header.opcode == NMB_NAME_MULTIHOMED_REG_OPCODE)) &&
+			(nmb->header.arcount == 1)) {
 
-		if (len) {
-			/* Length check. */
-			int extra = put_compressed_name_ptr(NULL,offset,
-					nmb->additional,12);
-			if (offset + extra > len) {
-				return 0;
-			}
-		}
-		offset += put_compressed_name_ptr(ubuf,offset,
-				nmb->additional,12);
+		offset += put_compressed_name_ptr(ubuf,offset,nmb->additional,12);
+
 	} else if (nmb->header.arcount) {
-		if (len) {
-			/* Length check. */
-			int extra = put_res_rec(NULL,offset,nmb->additional,
-				nmb->header.arcount);
-			if (offset + extra > len) {
-				return 0;
-			}
-		}
 		offset += put_res_rec((char *)ubuf,offset,nmb->additional,
-			nmb->header.arcount);
+			nmb->header.arcount);  
 	}
-	return offset;
+	return(offset);
 }
 
 /*******************************************************************
  Linearise a packet.
 ******************************************************************/
 
-int build_packet(char *buf, size_t buflen, struct packet_struct *p)
+int build_packet(char *buf, struct packet_struct *p)
 {
 	int len = 0;
 
 	switch (p->packet_type) {
 	case NMB_PACKET:
-		len = build_nmb(buf,buflen,&p->packet.nmb);
+		len = build_nmb(buf,p);
 		break;
 
 	case DGRAM_PACKET:
-		len = build_dgram(buf,buflen,&p->packet.dgram);
+		len = build_dgram(buf,p);
 		break;
 	}
 
@@ -1071,14 +985,14 @@
  Send a packet_struct.
 ******************************************************************/
 
-bool send_packet(struct packet_struct *p)
+BOOL send_packet(struct packet_struct *p)
 {
 	char buf[1024];
 	int len=0;
 
 	memset(buf,'\0',sizeof(buf));
 
-	len = build_packet(buf, sizeof(buf), p);
+	len = build_packet(buf, p);
 
 	if (!len)
 		return(False);
@@ -1104,17 +1018,16 @@
 
 	if ((ret = sys_select_intr(fd+1,&fds,NULL,NULL,&timeout)) == -1) {
 		/* errno should be EBADF or EINVAL. */
-		DEBUG(0,("select returned -1, errno = %s (%d)\n",
-					strerror(errno), errno));
+		DEBUG(0,("select returned -1, errno = %s (%d)\n", strerror(errno), errno));
 		return NULL;
 	}
 
 	if (ret == 0) /* timeout */
 		return NULL;
 
-	if (FD_ISSET(fd,&fds))
+	if (FD_ISSET(fd,&fds)) 
 		return(read_packet(fd,type));
-
+	
 	return(NULL);
 }
 
@@ -1147,8 +1060,7 @@
  The timeout is in milliseconds.
 ***************************************************************************/
 
-struct packet_struct *receive_dgram_packet(int fd, int t,
-		const char *mailslot_name)
+struct packet_struct *receive_dgram_packet(int fd, int t, const char *mailslot_name)
 {
 	struct packet_struct *p;
 
@@ -1168,7 +1080,7 @@
  See if a datagram has the right mailslot name.
 ***************************************************************************/
 
-bool match_mailslot_name(struct packet_struct *p, const char *mailslot_name)
+BOOL match_mailslot_name(struct packet_struct *p, const char *mailslot_name)
 {
 	struct dgram_packet *dgram = &p->packet.dgram;
 	char *buf;
@@ -1186,28 +1098,27 @@
 }
 
 /****************************************************************************
- Return the number of bits that match between two len character buffers
+ Return the number of bits that match between two 4 character buffers
 ***************************************************************************/
 
-int matching_len_bits(unsigned char *p1, unsigned char *p2, size_t len)
+int matching_quad_bits(unsigned char *p1, unsigned char *p2)
 {
-	size_t i, j;
-	int ret = 0;
-	for (i=0; i<len; i++) {
+	int i, j, ret = 0;
+	for (i=0; i<4; i++) {
 		if (p1[i] != p2[i])
 			break;
 		ret += 8;
 	}
 
-	if (i==len)
+	if (i==4)
 		return ret;
 
 	for (j=0; j<8; j++) {
 		if ((p1[i] & (1<<(7-j))) != (p2[i] & (1<<(7-j))))
 			break;
 		ret++;
-	}
-
+	}	
+	
 	return ret;
 }
 
@@ -1219,8 +1130,7 @@
 
 static int name_query_comp(unsigned char *p1, unsigned char *p2)
 {
-	return matching_len_bits(p2+2, sort_ip, 4) -
-		matching_len_bits(p1+2, sort_ip, 4);
+	return matching_quad_bits(p2+2, sort_ip) - matching_quad_bits(p1+2, sort_ip);
 }
 
 /****************************************************************************
@@ -1238,6 +1148,40 @@
 	qsort(data, n, 6, QSORT_CAST name_query_comp);
 }
 
+/*******************************************************************
+ Convert, possibly using a stupid microsoft-ism which has destroyed
+ the transport independence of netbios (for CIFS vendors that usually
+ use the Win95-type methods, not for NT to NT communication, which uses
+ DCE/RPC and therefore full-length unicode strings...) a dns name into
+ a netbios name.
+
+ The netbios name (NOT necessarily null-terminated) is truncated to 15
+ characters.
+
+ ******************************************************************/
+
+char *dns_to_netbios_name(const char *dns_name)
+{
+	static nstring netbios_name;
+	int i;
+	StrnCpy(netbios_name, dns_name, MAX_NETBIOSNAME_LEN-1);
+	netbios_name[15] = 0;
+	
+	/* ok.  this is because of a stupid microsoft-ism.  if the called host
+	   name contains a '.', microsoft clients expect you to truncate the
+	   netbios name up to and including the '.'  this even applies, by
+	   mistake, to workgroup (domain) names, which is _really_ daft.
+	 */
+	for (i = 0; i < 15; i++) {
+		if (netbios_name[i] == '.') {
+			netbios_name[i] = 0;
+			break;
+		}
+	}
+
+	return netbios_name;
+}
+
 /****************************************************************************
  Interpret the weird netbios "name" into a unix fstring. Return the name type.
 ****************************************************************************/
@@ -1359,7 +1303,7 @@
 	} else {
 		return(buf+ofs);
 	}
-}
+}  
 
 /****************************************************************************
  Extract a netbios name from a buf (into a unix string) return name type.
@@ -1375,7 +1319,7 @@
 		return(0);
 	return(name_interpret(p,name));
 }
-
+  
 /****************************************************************************
  Return the total storage length of a mangled name.
 ****************************************************************************/

Modified: branches/samba/upstream/source/libsmb/nterr.c
===================================================================
--- branches/samba/upstream/source/libsmb/nterr.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/nterr.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 /* NT error codes.  please read nterr.h */
@@ -539,7 +540,6 @@
 	{ "STATUS_MORE_ENTRIES", STATUS_MORE_ENTRIES },
 	{ "STATUS_SOME_UNMAPPED", STATUS_SOME_UNMAPPED },
 	{ "STATUS_NO_MORE_FILES", STATUS_NO_MORE_FILES },
-	{ "NT_STATUS_RPC_CANNOT_SUPPORT", NT_STATUS_RPC_CANNOT_SUPPORT },
 	{ NULL, NT_STATUS(0) }
 };
 
@@ -649,8 +649,8 @@
 
 const char *nt_errstr(NTSTATUS nt_code)
 {
+        static pstring msg;
         int idx = 0;
-	char *result;
 
 #ifdef HAVE_LDAP
         if (NT_STATUS_TYPE(nt_code) == NT_STATUS_TYPE_LDAP) {
@@ -658,6 +658,8 @@
 	}
 #endif
 
+	slprintf(msg, sizeof(msg), "NT code 0x%08x", NT_STATUS_V(nt_code));
+
 	while (nt_errs[idx].nt_errstr != NULL) {
 		if (NT_STATUS_EQUAL(nt_errs[idx].nt_errcode, nt_code)) {
                         return nt_errs[idx].nt_errstr;
@@ -665,10 +667,7 @@
 		idx++;
 	}
 
-	result = talloc_asprintf(talloc_tos(), "NT code 0x%08x",
-				 NT_STATUS_V(nt_code));
-	SMB_ASSERT(result != NULL);
-	return result;
+        return msg;
 }
 
 /************************************************************************
@@ -697,7 +696,7 @@
 
 const char *get_nt_error_c_code(NTSTATUS nt_code)
 {
-	char *result;
+        static pstring out;
         int idx = 0;
 
 	while (nt_errs[idx].nt_errstr != NULL) {
@@ -708,10 +707,9 @@
 		idx++;
 	}
 
-	result = talloc_asprintf(talloc_tos(), "NT_STATUS(0x%08x)",
-				 NT_STATUS_V(nt_code));
-	SMB_ASSERT(result);
-	return result;
+	slprintf(out, sizeof(out), "NT_STATUS(0x%08x)", NT_STATUS_V(nt_code));
+
+        return out;
 }
 
 /*****************************************************************************

Modified: branches/samba/upstream/source/libsmb/ntlm_check.c
===================================================================
--- branches/samba/upstream/source/libsmb/ntlm_check.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/ntlm_check.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -29,7 +30,7 @@
  Core of smb password checking routine.
 ****************************************************************************/
 
-static bool smb_pwd_check_ntlmv1(const DATA_BLOB *nt_response,
+static BOOL smb_pwd_check_ntlmv1(const DATA_BLOB *nt_response,
 				 const uchar *part_passwd,
 				 const DATA_BLOB *sec_blob,
 				 DATA_BLOB *user_sess_key)
@@ -64,13 +65,13 @@
 	
 #ifdef DEBUG_PASSWORD
 	DEBUG(100,("Part password (P16) was |\n"));
-	dump_data(100, part_passwd, 16);
+	dump_data(100, (const char *)part_passwd, 16);
 	DEBUGADD(100,("Password from client was |\n"));
-	dump_data(100, nt_response->data, nt_response->length);
+	dump_data(100, (const char *)nt_response->data, nt_response->length);
 	DEBUGADD(100,("Given challenge was |\n"));
-	dump_data(100, sec_blob->data, sec_blob->length);
+	dump_data(100, (const char *)sec_blob->data, sec_blob->length);
 	DEBUGADD(100,("Value from encryption was |\n"));
-	dump_data(100, p24, 24);
+	dump_data(100, (const char *)p24, 24);
 #endif
 	return (memcmp(p24, nt_response->data, 24) == 0);
 }
@@ -80,11 +81,11 @@
  Note:  The same code works with both NTLMv2 and LMv2.
 ****************************************************************************/
 
-static bool smb_pwd_check_ntlmv2(const DATA_BLOB *ntv2_response,
+static BOOL smb_pwd_check_ntlmv2(const DATA_BLOB *ntv2_response,
 				 const uchar *part_passwd,
 				 const DATA_BLOB *sec_blob,
 				 const char *user, const char *domain,
-				 bool upper_case_domain, /* should the domain be transformed into upper case? */
+				 BOOL upper_case_domain, /* should the domain be transformed into upper case? */
 				 DATA_BLOB *user_sess_key)
 {
 	/* Finish the encryption of part_passwd. */
@@ -92,7 +93,7 @@
 	uchar value_from_encryption[16];
 	uchar client_response[16];
 	DATA_BLOB client_key_data;
-	bool res;
+	BOOL res;
 
 	if (part_passwd == NULL) {
 		DEBUG(10,("No password set - DISALLOWING access\n"));
@@ -135,15 +136,15 @@
 
 #if DEBUG_PASSWORD
 	DEBUG(100,("Part password (P16) was |\n"));
-	dump_data(100, part_passwd, 16);
+	dump_data(100, (const char *)part_passwd, 16);
 	DEBUGADD(100,("Password from client was |\n"));
-	dump_data(100, ntv2_response->data, ntv2_response->length);
+	dump_data(100, (const char *)ntv2_response->data, ntv2_response->length);
 	DEBUGADD(100,("Variable data from client was |\n"));
-	dump_data(100, client_key_data.data, client_key_data.length);
+	dump_data(100, (const char *)client_key_data.data, client_key_data.length);
 	DEBUGADD(100,("Given challenge was |\n"));
-	dump_data(100, sec_blob->data, sec_blob->length);
+	dump_data(100, (const char *)sec_blob->data, sec_blob->length);
 	DEBUGADD(100,("Value from encryption was |\n"));
-	dump_data(100, value_from_encryption, 16);
+	dump_data(100, (const char *)value_from_encryption, 16);
 #endif
 	data_blob_clear_free(&client_key_data);
 	res = (memcmp(value_from_encryption, client_response, 16) == 0);
@@ -182,10 +183,7 @@
 			     DATA_BLOB *user_sess_key, 
 			     DATA_BLOB *lm_sess_key)
 {
-	unsigned char zeros[8];
-
-	ZERO_STRUCT(zeros);
-
+	static const unsigned char zeros[8] = { 0, };
 	if (nt_pw == NULL) {
 		DEBUG(3,("ntlm_password_check: NO NT password stored for user %s.\n", 
 			 username));

Modified: branches/samba/upstream/source/libsmb/ntlmssp.c
===================================================================
--- branches/samba/upstream/source/libsmb/ntlmssp.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/ntlmssp.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -121,7 +122,7 @@
  *
  */
    
-static bool may_set_challenge(const struct ntlmssp_state *ntlmssp_state)
+static BOOL may_set_challenge(const struct ntlmssp_state *ntlmssp_state)
 {
 	return True;
 }
@@ -298,13 +299,13 @@
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-	*out = data_blob_null;
+	*out = data_blob(NULL, 0);
 
 	if (!in.length && ntlmssp_state->stored_response.length) {
 		input = ntlmssp_state->stored_response;
 		
 		/* we only want to read the stored response once - overwrite it */
-		ntlmssp_state->stored_response = data_blob_null;
+		ntlmssp_state->stored_response = data_blob(NULL, 0);
 	} else {
 		input = in;
 	}
@@ -324,7 +325,7 @@
 				 "NTLMSSP",
 				 &ntlmssp_command)) {
 			DEBUG(1, ("Failed to parse NTLMSSP packet, could not extract NTLMSSP command\n"));
-			dump_data(2, input.data, input.length);
+			dump_data(2, (const char *)input.data, input.length);
 			return NT_STATUS_INVALID_PARAMETER;
 		}
 	}
@@ -400,7 +401,7 @@
 }
 
 static void ntlmssp_handle_neg_flags(struct ntlmssp_state *ntlmssp_state,
-				      uint32 neg_flags, bool allow_lm) {
+				      uint32 neg_flags, BOOL allow_lm) {
 	if (neg_flags & NTLMSSP_NEGOTIATE_UNICODE) {
 		ntlmssp_state->neg_flags |= NTLMSSP_NEGOTIATE_UNICODE;
 		ntlmssp_state->neg_flags &= ~NTLMSSP_NEGOTIATE_OEM;
@@ -501,19 +502,18 @@
 
 /**
  * Next state function for the Negotiate packet
- *
+ * 
  * @param ntlmssp_state NTLMSSP State
  * @param request The request, as a DATA_BLOB
  * @param request The reply, as an allocated DATA_BLOB, caller to free.
- * @return Errors or MORE_PROCESSING_REQUIRED if a reply is sent.
+ * @return Errors or MORE_PROCESSING_REQUIRED if a reply is sent. 
  */
 
 static NTSTATUS ntlmssp_server_negotiate(struct ntlmssp_state *ntlmssp_state,
 					 const DATA_BLOB request, DATA_BLOB *reply) 
 {
 	DATA_BLOB struct_blob;
-	const char *dnsname;
-	char *dnsdomname = NULL;
+	fstring dnsname, dnsdomname;
 	uint32 neg_flags = 0;
 	uint32 ntlmssp_command, chal_flags;
 	const uint8 *cryptkey;
@@ -531,12 +531,12 @@
 							&neg_flags)) {
 			DEBUG(1, ("ntlmssp_server_negotiate: failed to parse NTLMSSP Negotiate of length %u\n",
 				(unsigned int)request.length));
-			dump_data(2, request.data, request.length);
+			dump_data(2, (const char *)request.data, request.length);
 			return NT_STATUS_INVALID_PARAMETER;
 		}
 		debug_ntlmssp_flags(neg_flags);
 	}
-
+	
 	ntlmssp_handle_neg_flags(ntlmssp_state, neg_flags, lp_lanman_auth());
 
 	/* Ask our caller what challenge they would like in the packet */
@@ -549,37 +549,31 @@
 
 	/* The flags we send back are not just the negotiated flags,
 	 * they are also 'what is in this packet'.  Therfore, we
-	 * operate on 'chal_flags' from here on
+	 * operate on 'chal_flags' from here on 
 	 */
 
 	chal_flags = ntlmssp_state->neg_flags;
 
 	/* get the right name to fill in as 'target' */
-	target_name = ntlmssp_target_name(ntlmssp_state,
-					  neg_flags, &chal_flags);
-	if (target_name == NULL)
+	target_name = ntlmssp_target_name(ntlmssp_state, 
+					  neg_flags, &chal_flags); 
+	if (target_name == NULL) 
 		return NT_STATUS_INVALID_PARAMETER;
 
 	ntlmssp_state->chal = data_blob_talloc(ntlmssp_state->mem_ctx, cryptkey, 8);
 	ntlmssp_state->internal_chal = data_blob_talloc(ntlmssp_state->mem_ctx, cryptkey, 8);
+	
 
 	/* This should be a 'netbios domain -> DNS domain' mapping */
-	dnsdomname = get_mydnsdomname(ntlmssp_state->mem_ctx);
-	if (!dnsdomname) {
-		dnsdomname = talloc_strdup(ntlmssp_state->mem_ctx, "");
-	}
-	if (!dnsdomname) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	dnsdomname[0] = '\0';
+	get_mydnsdomname(dnsdomname);
 	strlower_m(dnsdomname);
-
-	dnsname = get_mydnsfullname();
-	if (!dnsname) {
-		dnsname = "";
-	}
-
+	
+	dnsname[0] = '\0';
+	get_mydnsfullname(dnsname);
+	
 	/* This creates the 'blob' of names that appears at the end of the packet */
-	if (chal_flags & NTLMSSP_CHAL_TARGET_INFO)
+	if (chal_flags & NTLMSSP_CHAL_TARGET_INFO) 
 	{
 		msrpc_gen(&struct_blob, "aaaaa",
 			  NTLMSSP_NAME_TYPE_DOMAIN, target_name,
@@ -588,7 +582,7 @@
 			  NTLMSSP_NAME_TYPE_SERVER_DNS, dnsname,
 			  0, "");
 	} else {
-		struct_blob = data_blob_null;
+		struct_blob = data_blob(NULL, 0);
 	}
 
 	{
@@ -599,9 +593,9 @@
 		} else {
 			gen_string = "CdAdbddB";
 		}
-
+		
 		msrpc_gen(reply, gen_string,
-			  "NTLMSSP",
+			  "NTLMSSP", 
 			  NTLMSSP_CHALLENGE,
 			  target_name,
 			  chal_flags,
@@ -609,7 +603,7 @@
 			  0, 0,
 			  struct_blob.data, struct_blob.length);
 	}
-
+		
 	data_blob_free(&struct_blob);
 
 	ntlmssp_state->expected_state = NTLMSSP_AUTH;
@@ -619,7 +613,7 @@
 
 /**
  * Next state function for the Authenticate packet
- *
+ * 
  * @param ntlmssp_state NTLMSSP State
  * @param request The request, as a DATA_BLOB
  * @param request The reply, as an allocated DATA_BLOB, caller to free.
@@ -629,15 +623,15 @@
 static NTSTATUS ntlmssp_server_auth(struct ntlmssp_state *ntlmssp_state,
 				    const DATA_BLOB request, DATA_BLOB *reply) 
 {
-	DATA_BLOB encrypted_session_key = data_blob_null;
-	DATA_BLOB user_session_key = data_blob_null;
-	DATA_BLOB lm_session_key = data_blob_null;
-	DATA_BLOB session_key = data_blob_null;
+	DATA_BLOB encrypted_session_key = data_blob(NULL, 0);
+	DATA_BLOB user_session_key = data_blob(NULL, 0);
+	DATA_BLOB lm_session_key = data_blob(NULL, 0);
+	DATA_BLOB session_key = data_blob(NULL, 0);
 	uint32 ntlmssp_command, auth_flags;
 	NTSTATUS nt_status = NT_STATUS_OK;
 
 	/* used by NTLM2 */
-	bool doing_ntlm2 = False;
+	BOOL doing_ntlm2 = False;
 
 	uchar session_nonce[16];
 	uchar session_nonce_hash[16];
@@ -648,7 +642,7 @@
 	char *workstation = NULL;
 
 	/* parse the NTLMSSP packet */
-	*reply = data_blob_null;
+	*reply = data_blob(NULL, 0);
 
 #if 0
 	file_save("ntlmssp_auth.dat", request.data, request.length);
@@ -701,7 +695,7 @@
 				 &user, 
 				 &workstation)) {
 			DEBUG(1, ("ntlmssp_server_auth: failed to parse NTLMSSP (tried both formats):\n"));
-			dump_data(2, request.data, request.length);
+			dump_data(2, (const char *)request.data, request.length);
 			SAFE_FREE(domain);
 			SAFE_FREE(user);
 			SAFE_FREE(workstation);
@@ -813,7 +807,7 @@
 			
 		} else {
 			DEBUG(10,("ntlmssp_server_auth: Failed to create NTLM2 session key.\n"));
-			session_key = data_blob_null;
+			session_key = data_blob(NULL, 0);
 		}
 	} else if (ntlmssp_state->neg_flags & NTLMSSP_NEGOTIATE_LM_KEY) {
 		if (lm_session_key.data && lm_session_key.length >= 8) {
@@ -826,8 +820,7 @@
 							  session_key.data);
 				DEBUG(10,("ntlmssp_server_auth: Created NTLM session key.\n"));
 			} else {
-				uint8 zeros[24];
-				ZERO_STRUCT(zeros);
+				static const uint8 zeros[24] = { 0, };
 				session_key = data_blob_talloc(
 					ntlmssp_state->mem_ctx, NULL, 16);
 				if (session_key.data == NULL) {
@@ -841,7 +834,7 @@
 				     session_key.length);
 		} else {
 			DEBUG(10,("ntlmssp_server_auth: Failed to create NTLM session key.\n"));
-			session_key = data_blob_null;
+			session_key = data_blob(NULL, 0);
 		}
 	} else if (user_session_key.data) {
 		session_key = user_session_key;
@@ -853,7 +846,7 @@
 		dump_data_pw("unmodified session key:\n", session_key.data, session_key.length);
 	} else {
 		DEBUG(10,("ntlmssp_server_auth: Failed to create unmodified session key.\n"));
-		session_key = data_blob_null;
+		session_key = data_blob(NULL, 0);
 	}
 
 	/* With KEY_EXCH, the client supplies the proposed session key, 
@@ -884,7 +877,7 @@
 	}
 
 	if (!NT_STATUS_IS_OK(nt_status)) {
-		ntlmssp_state->session_key = data_blob_null;
+		ntlmssp_state->session_key = data_blob(NULL, 0);
 	} else if (ntlmssp_state->session_key.length) {
 		nt_status = ntlmssp_sign_init(ntlmssp_state);
 	}
@@ -999,14 +992,14 @@
 	uint32 chal_flags, ntlmssp_command, unkn1, unkn2;
 	DATA_BLOB server_domain_blob;
 	DATA_BLOB challenge_blob;
-	DATA_BLOB struct_blob = data_blob_null;
+	DATA_BLOB struct_blob = data_blob(NULL, 0);
 	char *server_domain;
 	const char *chal_parse_string;
 	const char *auth_gen_string;
-	DATA_BLOB lm_response = data_blob_null;
-	DATA_BLOB nt_response = data_blob_null;
-	DATA_BLOB session_key = data_blob_null;
-	DATA_BLOB encrypted_session_key = data_blob_null;
+	DATA_BLOB lm_response = data_blob(NULL, 0);
+	DATA_BLOB nt_response = data_blob(NULL, 0);
+	DATA_BLOB session_key = data_blob(NULL, 0);
+	DATA_BLOB encrypted_session_key = data_blob(NULL, 0);
 	NTSTATUS nt_status = NT_STATUS_OK;
 
 	if (!msrpc_parse(&reply, "CdBd",
@@ -1015,7 +1008,7 @@
 			 &server_domain_blob,
 			 &chal_flags)) {
 		DEBUG(1, ("Failed to parse the NTLMSSP Challenge: (#1)\n"));
-		dump_data(2, reply.data, reply.length);
+		dump_data(2, (const char *)reply.data, reply.length);
 
 		return NT_STATUS_INVALID_PARAMETER;
 	}
@@ -1056,7 +1049,7 @@
 			 &unkn1, &unkn2,
 			 &struct_blob)) {
 		DEBUG(1, ("Failed to parse the NTLMSSP Challenge: (#2)\n"));
-		dump_data(2, reply.data, reply.length);
+		dump_data(2, (const char *)reply.data, reply.length);
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
@@ -1070,11 +1063,9 @@
 	}
 
 	if (!ntlmssp_state->nt_hash || !ntlmssp_state->lm_hash) {
-		uchar zeros[16];
+		static const uchar zeros[16] = { 0, };
 		/* do nothing - blobs are zero length */
 
-		ZERO_STRUCT(zeros);
-
 		/* session key is all zeros */
 		session_key = data_blob_talloc(ntlmssp_state->mem_ctx, zeros, 16);
 		
@@ -1120,7 +1111,7 @@
 
 		DEBUG(5, ("NTLMSSP challenge set by NTLM2\n"));
 		DEBUG(5, ("challenge is: \n"));
-		dump_data(5, session_nonce_hash, 8);
+		dump_data(5, (const char *)session_nonce_hash, 8);
 		
 		nt_response = data_blob_talloc(ntlmssp_state->mem_ctx, NULL, 24);
 		SMBNTencrypt_hash(ntlmssp_state->nt_hash,

Modified: branches/samba/upstream/source/libsmb/ntlmssp_parse.c
===================================================================
--- branches/samba/upstream/source/libsmb/ntlmssp_parse.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/ntlmssp_parse.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,22 +1,23 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    simple kerberos5/SPNEGO routines
    Copyright (C) Andrew Tridgell 2001
    Copyright (C) Jim McDonough <jmcd at us.ibm.com> 2002
    Copyright (C) Andrew Bartlett 2002-2003
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -39,7 +40,7 @@
   d = word (4 bytes)
   C = constant ascii string
  */
-bool msrpc_gen(DATA_BLOB *blob,
+BOOL msrpc_gen(DATA_BLOB *blob,
 	       const char *format, ...)
 {
 	int i, n;
@@ -89,9 +90,7 @@
 	}
 	va_end(ap);
 
-	/* allocate the space, then scan the format
-	 * again to fill in the values */
-
+	/* allocate the space, then scan the format again to fill in the values */
 	*blob = data_blob(NULL, head_size + data_size);
 
 	head_ofs = 0;
@@ -106,8 +105,7 @@
 			SSVAL(blob->data, head_ofs, n*2); head_ofs += 2;
 			SSVAL(blob->data, head_ofs, n*2); head_ofs += 2;
 			SIVAL(blob->data, head_ofs, data_ofs); head_ofs += 4;
-			push_string(NULL, blob->data+data_ofs,
-					s, n*2, STR_UNICODE|STR_NOALIGN);
+			push_string(NULL, blob->data+data_ofs, s, n*2, STR_UNICODE|STR_NOALIGN);
 			data_ofs += n*2;
 			break;
 		case 'A':
@@ -116,8 +114,7 @@
 			SSVAL(blob->data, head_ofs, n); head_ofs += 2;
 			SSVAL(blob->data, head_ofs, n); head_ofs += 2;
 			SIVAL(blob->data, head_ofs, data_ofs); head_ofs += 4;
-			push_string(NULL, blob->data+data_ofs,
-					s, n, STR_ASCII|STR_NOALIGN);
+			push_string(NULL, blob->data+data_ofs, s, n, STR_ASCII|STR_NOALIGN);
 			data_ofs += n;
 			break;
 		case 'a':
@@ -163,14 +160,13 @@
 	}
 	va_end(ap);
 
-	return true;
+	return True;
 }
 
 
 /* a helpful macro to avoid running over the end of our blob */
 #define NEED_DATA(amount) \
 if ((head_ofs + amount) > blob->length) { \
-        va_end(ap); \
         return False; \
 }
 
@@ -187,7 +183,7 @@
   C = constant ascii string
  */
 
-bool msrpc_parse(const DATA_BLOB *blob,
+BOOL msrpc_parse(const DATA_BLOB *blob,
 		 const char *format, ...)
 {
 	int i;
@@ -198,6 +194,7 @@
 	uint16 len1, len2;
 	uint32 ptr;
 	uint32 *v;
+	pstring p;
 
 	va_start(ap, format);
 	for (i=0; format[i]; i++) {
@@ -212,41 +209,22 @@
 			if (len1 == 0 && len2 == 0) {
 				*ps = smb_xstrdup("");
 			} else {
-				/* make sure its in the right format
-				 * be strict */
-				if ((len1 != len2) || (ptr + len1 < ptr) ||
-						(ptr + len1 < len1) ||
-						(ptr + len1 > blob->length)) {
-					va_end(ap);
-					return false;
+				/* make sure its in the right format - be strict */
+				if ((len1 != len2) || (ptr + len1 < ptr) || (ptr + len1 < len1) || (ptr + len1 > blob->length)) {
+					return False;
 				}
 				if (len1 & 1) {
 					/* if odd length and unicode */
-					va_end(ap);
-					return false;
+					return False;
 				}
-				if (blob->data + ptr <
-						(uint8 *)(unsigned long)ptr ||
-				    blob->data + ptr < blob->data) {
-					va_end(ap);
-					return false;
-				}
+				if (blob->data + ptr < (uint8 *)(unsigned long)ptr || blob->data + ptr < blob->data)
+					return False;
 
 				if (0 < len1) {
-					char *p = NULL;
-					pull_string_talloc(talloc_tos(),
-						NULL,
-						0,
-						&p,
-						blob->data + ptr,
-						len1,
-						STR_UNICODE|STR_NOALIGN);
-					if (p) {
-						(*ps) = smb_xstrdup(p);
-						TALLOC_FREE(p);
-					} else {
-						(*ps) = smb_xstrdup("");
-					}
+					pull_string(NULL, p, blob->data + ptr, sizeof(p), 
+						    len1, 
+						    STR_UNICODE|STR_NOALIGN);
+					(*ps) = smb_xstrdup(p);
 				} else {
 					(*ps) = smb_xstrdup("");
 				}
@@ -263,35 +241,18 @@
 			if (len1 == 0 && len2 == 0) {
 				*ps = smb_xstrdup("");
 			} else {
-				if ((len1 != len2) || (ptr + len1 < ptr) ||
-						(ptr + len1 < len1) ||
-						(ptr + len1 > blob->length)) {
-					va_end(ap);
-					return false;
+				if ((len1 != len2) || (ptr + len1 < ptr) || (ptr + len1 < len1) || (ptr + len1 > blob->length)) {
+					return False;
 				}
 
-				if (blob->data + ptr <
-						(uint8 *)(unsigned long)ptr ||
-				    blob->data + ptr < blob->data) {
-					va_end(ap);
-					return false;
-				}
+				if (blob->data + ptr < (uint8 *)(unsigned long)ptr || blob->data + ptr < blob->data)
+					return False;	
 
 				if (0 < len1) {
-					char *p = NULL;
-					pull_string_talloc(talloc_tos(),
-						NULL,
-						0,
-						&p,
-						blob->data + ptr,
-						len1,
-						STR_ASCII|STR_NOALIGN);
-					if (p) {
-						(*ps) = smb_xstrdup(p);
-						TALLOC_FREE(p);
-					} else {
-						(*ps) = smb_xstrdup("");
-					}
+					pull_string(NULL, p, blob->data + ptr, sizeof(p), 
+						    len1, 
+						    STR_ASCII|STR_NOALIGN);
+					(*ps) = smb_xstrdup(p);
 				} else {
 					(*ps) = smb_xstrdup("");
 				}
@@ -305,24 +266,16 @@
 
 			b = (DATA_BLOB *)va_arg(ap, void *);
 			if (len1 == 0 && len2 == 0) {
-				*b = data_blob_null;
+				*b = data_blob(NULL, 0);
 			} else {
-				/* make sure its in the right format
-				 * be strict */
-				if ((len1 != len2) || (ptr + len1 < ptr) ||
-						(ptr + len1 < len1) ||
-						(ptr + len1 > blob->length)) {
-					va_end(ap);
-					return false;
+				/* make sure its in the right format - be strict */
+				if ((len1 != len2) || (ptr + len1 < ptr) || (ptr + len1 < len1) || (ptr + len1 > blob->length)) {
+					return False;
 				}
 
-				if (blob->data + ptr <
-						(uint8 *)(unsigned long)ptr ||
-				    blob->data + ptr < blob->data) {
-					va_end(ap);
-					return false;
-				}
-
+				if (blob->data + ptr < (uint8 *)(unsigned long)ptr || blob->data + ptr < blob->data)
+					return False;	
+			
 				*b = data_blob(blob->data + ptr, len1);
 			}
 			break;
@@ -331,12 +284,9 @@
 			len1 = va_arg(ap, unsigned);
 			/* make sure its in the right format - be strict */
 			NEED_DATA(len1);
-			if (blob->data + head_ofs < (uint8 *)head_ofs ||
-					blob->data + head_ofs < blob->data) {
-				va_end(ap);
-				return false;
-			}
-
+			if (blob->data + head_ofs < (uint8 *)head_ofs || blob->data + head_ofs < blob->data)
+				return False;	
+			
 			*b = data_blob(blob->data + head_ofs, len1);
 			head_ofs += len1;
 			break;
@@ -348,32 +298,14 @@
 		case 'C':
 			s = va_arg(ap, char *);
 
-			if (blob->data + head_ofs < (uint8 *)head_ofs ||
-			    blob->data + head_ofs < blob->data) {
-				va_end(ap);
-				return false;
-			}
-
-			{
-				char *p = NULL;
-				size_t ret = pull_string_talloc(talloc_tos(),
-						NULL,
-						0,
-						&p,
-						blob->data+head_ofs,
-						blob->length - head_ofs,
+			if (blob->data + head_ofs < (uint8 *)head_ofs || blob->data + head_ofs < blob->data)
+				return False;	
+	
+			head_ofs += pull_string(NULL, p, blob->data+head_ofs, sizeof(p), 
+						blob->length - head_ofs, 
 						STR_ASCII|STR_TERMINATE);
-				if (ret == (size_t)-1 || p == NULL) {
-					va_end(ap);
-					return false;
-				}
-				head_ofs += ret;
-				if (strcmp(s, p) != 0) {
-					TALLOC_FREE(p);
-					va_end(ap);
-					return false;
-				}
-				TALLOC_FREE(p);
+			if (strcmp(s, p) != 0) {
+				return False;
 			}
 			break;
 		}

Modified: branches/samba/upstream/source/libsmb/ntlmssp_sign.c
===================================================================
--- branches/samba/upstream/source/libsmb/ntlmssp_sign.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/ntlmssp_sign.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software Foundation,
+ *  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
 #include "includes.h"
@@ -56,7 +57,7 @@
 						const uchar *whole_pdu, size_t pdu_length,
 						enum ntlmssp_direction direction,
 						DATA_BLOB *sig,
-						bool encrypt_sig)
+						BOOL encrypt_sig)
 {
 	if (ntlmssp_state->neg_flags & NTLMSSP_NEGOTIATE_NTLM2) {
 		HMACMD5Context ctx;
@@ -195,10 +196,10 @@
 		if (local_sig.length != sig->length ||
 				memcmp(local_sig.data, sig->data, sig->length) != 0) {
 			DEBUG(5, ("BAD SIG NTLM2: wanted signature of\n"));
-			dump_data(5, local_sig.data, local_sig.length);
+			dump_data(5, (const char *)local_sig.data, local_sig.length);
 
 			DEBUG(5, ("BAD SIG: got signature of\n"));
-			dump_data(5, sig->data, sig->length);
+			dump_data(5, (const char *)sig->data, sig->length);
 
 			DEBUG(0, ("NTLMSSP NTLM2 packet check failed due to invalid signature!\n"));
 			data_blob_free(&local_sig);
@@ -208,10 +209,10 @@
 		if (local_sig.length != sig->length ||
 				memcmp(local_sig.data + 8, sig->data + 8, sig->length - 8) != 0) {
 			DEBUG(5, ("BAD SIG NTLM1: wanted signature of\n"));
-			dump_data(5, local_sig.data, local_sig.length);
+			dump_data(5, (const char *)local_sig.data, local_sig.length);
 
 			DEBUG(5, ("BAD SIG: got signature of\n"));
-			dump_data(5, sig->data, sig->length);
+			dump_data(5, (const char *)sig->data, sig->length);
 
 			DEBUG(0, ("NTLMSSP NTLM1 packet check failed due to invalid signature!\n"));
 			data_blob_free(&local_sig);

Modified: branches/samba/upstream/source/libsmb/passchange.c
===================================================================
--- branches/samba/upstream/source/libsmb/passchange.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/passchange.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -24,22 +25,22 @@
 *************************************************************/
 
 NTSTATUS remote_password_change(const char *remote_machine, const char *user_name, 
-				const char *old_passwd, const char *new_passwd,
-				char **err_str)
+			    const char *old_passwd, const char *new_passwd,
+			    char *err_str, size_t err_str_len)
 {
 	struct nmb_name calling, called;
 	struct cli_state *cli;
 	struct rpc_pipe_client *pipe_hnd;
-	struct sockaddr_storage ss;
+	struct in_addr ip;
 
 	NTSTATUS result;
-	bool pass_must_change = False;
+	BOOL pass_must_change = False;
 
-	*err_str = NULL;
+	*err_str = '\0';
 
-	if(!resolve_name( remote_machine, &ss, 0x20)) {
-		asprintf(err_str, "Unable to find an IP address for machine "
-			 "%s.\n", remote_machine);
+	if(!resolve_name( remote_machine, &ip, 0x20)) {
+		slprintf(err_str, err_str_len-1, "Unable to find an IP address for machine %s.\n",
+			remote_machine );
 		return NT_STATUS_UNSUCCESSFUL;
 	}
  
@@ -48,11 +49,10 @@
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	result = cli_connect(cli, remote_machine, &ss);
+	result = cli_connect(cli, remote_machine, &ip);
 	if (!NT_STATUS_IS_OK(result)) {
-		asprintf(err_str, "Unable to connect to SMB server on "
-			 "machine %s. Error was : %s.\n",
-			 remote_machine, nt_errstr(result));
+		slprintf(err_str, err_str_len-1, "Unable to connect to SMB server on machine %s. Error was : %s.\n",
+			remote_machine, nt_errstr(result) );
 		cli_shutdown(cli);
 		return result;
 	}
@@ -61,9 +61,8 @@
 	make_nmb_name(&called , remote_machine, 0x20);
 	
 	if (!cli_session_request(cli, &calling, &called)) {
-		asprintf(err_str, "machine %s rejected the session setup. "
-			 "Error was : %s.\n",
-			 remote_machine, cli_errstr(cli) );
+		slprintf(err_str, err_str_len-1, "machine %s rejected the session setup. Error was : %s.\n",
+			remote_machine, cli_errstr(cli) );
 		result = cli_nt_error(cli);
 		cli_shutdown(cli);
 		return result;
@@ -72,9 +71,8 @@
 	cli->protocol = PROTOCOL_NT1;
 
 	if (!cli_negprot(cli)) {
-		asprintf(err_str, "machine %s rejected the negotiate "
-			 "protocol. Error was : %s.\n",        
-			 remote_machine, cli_errstr(cli) );
+		slprintf(err_str, err_str_len-1, "machine %s rejected the negotiate protocol. Error was : %s.\n",        
+			remote_machine, cli_errstr(cli) );
 		result = cli_nt_error(cli);
 		cli_shutdown(cli);
 		return result;
@@ -95,8 +93,9 @@
 
 		if (!NT_STATUS_EQUAL(result, NT_STATUS_PASSWORD_MUST_CHANGE) &&
 		    !NT_STATUS_EQUAL(result, NT_STATUS_PASSWORD_EXPIRED)) {
-			asprintf(err_str, "Could not connect to machine %s: "
-				 "%s\n", remote_machine, cli_errstr(cli));
+			slprintf(err_str, err_str_len-1, "Could not "
+				 "connect to machine %s: %s\n",
+				 remote_machine, cli_errstr(cli));
 			cli_shutdown(cli);
 			return result;
 		}
@@ -112,8 +111,7 @@
 		result = cli_session_setup(cli, "", "", 0, "", 0, "");
 
 		if (!NT_STATUS_IS_OK(result)) {
-			asprintf(err_str, "machine %s rejected the session "
-				 "setup. Error was : %s.\n",        
+			slprintf(err_str, err_str_len-1, "machine %s rejected the session setup. Error was : %s.\n",        
 				 remote_machine, cli_errstr(cli) );
 			cli_shutdown(cli);
 			return result;
@@ -125,9 +123,8 @@
 	}
 
 	if (!cli_send_tconX(cli, "IPC$", "IPC", "", 1)) {
-		asprintf(err_str, "machine %s rejected the tconX on the IPC$ "
-			 "share. Error was : %s.\n",
-			 remote_machine, cli_errstr(cli) );
+		slprintf(err_str, err_str_len-1, "machine %s rejected the tconX on the IPC$ share. Error was : %s.\n",
+			remote_machine, cli_errstr(cli) );
 		result = cli_nt_error(cli);
 		cli_shutdown(cli);
 		return result;
@@ -159,25 +156,24 @@
 		if (lp_client_lanman_auth()) {
 			/* Use the old RAP method. */
 			if (!cli_oem_change_password(cli, user_name, new_passwd, old_passwd)) {
-				asprintf(err_str, "machine %s rejected the "
-					 "password change: Error was : %s.\n",
+				slprintf(err_str, err_str_len-1, "machine %s rejected the password change: Error was : %s.\n",
 					 remote_machine, cli_errstr(cli) );
 				result = cli_nt_error(cli);
 				cli_shutdown(cli);
 				return result;
 			}
 		} else {
-			asprintf(err_str, "SAMR connection to machine %s "
-				 "failed. Error was %s, but LANMAN password "
-				 "changed are disabled\n",
-				 nt_errstr(result), remote_machine);
+			slprintf(err_str, err_str_len-1,
+				"SAMR connection to machine %s failed. Error was %s, "
+				"but LANMAN password changed are disabled\n",
+				nt_errstr(result), remote_machine);
 			result = cli_nt_error(cli);
 			cli_shutdown(cli);
 			return result;
 		}
 	}
 
-	if (NT_STATUS_IS_OK(result = rpccli_samr_chgpasswd_user(pipe_hnd, pipe_hnd->mem_ctx, user_name, 
+	if (NT_STATUS_IS_OK(result = rpccli_samr_chgpasswd_user(pipe_hnd, cli->mem_ctx, user_name, 
 							     new_passwd, old_passwd))) {
 		/* Great - it all worked! */
 		cli_shutdown(cli);
@@ -187,8 +183,7 @@
 		     || NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL))) {
 		/* it failed, but for reasons such as wrong password, too short etc ... */
 		
-		asprintf(err_str, "machine %s rejected the password change: "
-			 "Error was : %s.\n",
+		slprintf(err_str, err_str_len-1, "machine %s rejected the password change: Error was : %s.\n",
 			 remote_machine, get_friendly_nt_error_msg(result));
 		cli_shutdown(cli);
 		return result;
@@ -207,7 +202,7 @@
 
 	if ( pipe_hnd &&
 		(NT_STATUS_IS_OK(result = rpccli_samr_chgpasswd_user(pipe_hnd,
-						pipe_hnd->mem_ctx,
+						cli->mem_ctx,
 						user_name, 
 						new_passwd,
 						old_passwd)))) {
@@ -219,10 +214,9 @@
 		      || NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL))) {
 			/* it failed, but again it was due to things like new password too short */
 
-			asprintf(err_str, "machine %s rejected the "
-				 "(anonymous) password change: Error was : "
-				 "%s.\n", remote_machine,
-				 get_friendly_nt_error_msg(result));
+			slprintf(err_str, err_str_len-1, 
+				 "machine %s rejected the (anonymous) password change: Error was : %s.\n",
+				 remote_machine, get_friendly_nt_error_msg(result));
 			cli_shutdown(cli);
 			return result;
 		}
@@ -238,16 +232,16 @@
 				cli_shutdown(cli);
 				return NT_STATUS_OK;
 			}
-			asprintf(err_str, "machine %s rejected the password "
-				 "change: Error was : %s.\n",
+			slprintf(err_str, err_str_len-1, 
+				 "machine %s rejected the password change: Error was : %s.\n",
 				 remote_machine, cli_errstr(cli) );
 			result = cli_nt_error(cli);
 			cli_shutdown(cli);
 			return result;
 		} else {
-			asprintf(err_str, "SAMR connection to machine %s "
-				 "failed. Error was %s, but LANMAN password "
-				 "changed are disabled\n",
+			slprintf(err_str, err_str_len-1,
+				"SAMR connection to machine %s failed. Error was %s, "
+				"but LANMAN password changed are disabled\n",
 				nt_errstr(result), remote_machine);
 			cli_shutdown(cli);
 			return NT_STATUS_UNSUCCESSFUL;

Modified: branches/samba/upstream/source/libsmb/pwd_cache.c
===================================================================
--- branches/samba/upstream/source/libsmb/pwd_cache.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/pwd_cache.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/source/libsmb/samlogon_cache.c
===================================================================
--- branches/samba/upstream/source/libsmb/samlogon_cache.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/samlogon_cache.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,24 +1,24 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    Net_sam_logon info3 helpers
    Copyright (C) Alexander Bokovoy              2002.
    Copyright (C) Andrew Bartlett                2002.
    Copyright (C) Gerald Carter			2003.
    Copyright (C) Tim Potter			2003.
-   Copyright (C) Guenther Deschner		2008.
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -30,12 +30,12 @@
 /***********************************************************************
  open the tdb
  ***********************************************************************/
-
-bool netsamlogon_cache_init(void)
+ 
+BOOL netsamlogon_cache_init(void)
 {
 	if (!netsamlogon_tdb) {
 		netsamlogon_tdb = tdb_open_log(lock_path(NETSAMLOGON_TDB), 0,
-					       TDB_DEFAULT, O_RDWR | O_CREAT, 0600);
+						   TDB_DEFAULT, O_RDWR | O_CREAT, 0600);
 	}
 
 	return (netsamlogon_tdb != NULL);
@@ -46,45 +46,43 @@
  Shutdown samlogon_cache database
 ***********************************************************************/
 
-bool netsamlogon_cache_shutdown(void)
+BOOL netsamlogon_cache_shutdown(void)
 {
-	if (netsamlogon_tdb) {
+	if(netsamlogon_tdb)
 		return (tdb_close(netsamlogon_tdb) == 0);
-	}
-
-	return true;
+		
+	return True;
 }
 
 /***********************************************************************
  Clear cache getpwnam and getgroups entries from the winbindd cache
 ***********************************************************************/
-
-void netsamlogon_clear_cached_user(TDB_CONTEXT *tdb, struct netr_SamInfo3 *info3)
+void netsamlogon_clear_cached_user(TDB_CONTEXT *tdb, NET_USER_INFO_3 *user)
 {
-	bool got_tdb = false;
+	BOOL got_tdb = False;
 	DOM_SID sid;
 	fstring key_str, sid_string;
 
 	/* We may need to call this function from smbd which will not have
-	   winbindd_cache.tdb open.  Open the tdb if a NULL is passed. */
+           winbindd_cache.tdb open.  Open the tdb if a NULL is passed. */
 
 	if (!tdb) {
-		tdb = tdb_open_log(lock_path("winbindd_cache.tdb"),
+		tdb = tdb_open_log(lock_path("winbindd_cache.tdb"), 
 				   WINBINDD_CACHE_TDB_DEFAULT_HASH_SIZE,
 				   TDB_DEFAULT, O_RDWR, 0600);
 		if (!tdb) {
 			DEBUG(5, ("netsamlogon_clear_cached_user: failed to open cache\n"));
 			return;
 		}
-		got_tdb = true;
+		got_tdb = True;
 	}
 
-	sid_copy(&sid, info3->base.domain_sid);
-	sid_append_rid(&sid, info3->base.rid);
+	sid_copy(&sid, &user->dom_sid.sid);
+	sid_append_rid(&sid, user->user_rid);
 
 	/* Clear U/SID cache entry */
 
-	fstr_sprintf(key_str, "U/%s", sid_to_fstring(sid_string, &sid));
+	fstr_sprintf(key_str, "U/%s", sid_to_string(sid_string, &sid));
 
 	DEBUG(10, ("netsamlogon_clear_cached_user: clearing %s\n", key_str));
 
@@ -92,183 +90,165 @@
 
 	/* Clear UG/SID cache entry */
 
-	fstr_sprintf(key_str, "UG/%s", sid_to_fstring(sid_string, &sid));
+	fstr_sprintf(key_str, "UG/%s", sid_to_string(sid_string, &sid));
 
 	DEBUG(10, ("netsamlogon_clear_cached_user: clearing %s\n", key_str));
 
 	tdb_delete(tdb, string_tdb_data(key_str));
 
-	if (got_tdb) {
+	if (got_tdb)
 		tdb_close(tdb);
-	}
 }
 
 /***********************************************************************
- Store a netr_SamInfo3 structure in a tdb for later user
+ Store a NET_USER_INFO_3 structure in a tdb for later user 
  username should be in UTF-8 format
 ***********************************************************************/
 
-bool netsamlogon_cache_store(const char *username, struct netr_SamInfo3 *info3)
+BOOL netsamlogon_cache_store( const char *username, NET_USER_INFO_3 *user )
 {
-	TDB_DATA data;
-	fstring keystr, tmp;
-	bool result = false;
-	DOM_SID	user_sid;
-	time_t t = time(NULL);
-	TALLOC_CTX *mem_ctx;
-	DATA_BLOB blob;
-	enum ndr_err_code ndr_err;
-	struct netsamlogoncache_entry r;
+	TDB_DATA 	data;
+        fstring 	keystr;
+	prs_struct 	ps;
+	BOOL 		result = False;
+	DOM_SID		user_sid;
+	time_t		t = time(NULL);
+	TALLOC_CTX 	*mem_ctx;
+	
 
-	if (!info3) {
-		return false;
-	}
-
 	if (!netsamlogon_cache_init()) {
-		DEBUG(0,("netsamlogon_cache_store: cannot open %s for write!\n",
-			NETSAMLOGON_TDB));
-		return false;
+		DEBUG(0,("netsamlogon_cache_store: cannot open %s for write!\n", NETSAMLOGON_TDB));
+		return False;
 	}
 
-	sid_copy(&user_sid, info3->base.domain_sid);
-	sid_append_rid(&user_sid, info3->base.rid);
+	sid_copy( &user_sid, &user->dom_sid.sid );
+	sid_append_rid( &user_sid, user->user_rid );
 
 	/* Prepare key as DOMAIN-SID/USER-RID string */
-	slprintf(keystr, sizeof(keystr), "%s", sid_to_fstring(tmp, &user_sid));
+	slprintf(keystr, sizeof(keystr), "%s", sid_string_static(&user_sid));
 
 	DEBUG(10,("netsamlogon_cache_store: SID [%s]\n", keystr));
-
-	/* Prepare data */
-
-	if (!(mem_ctx = TALLOC_P( NULL, int))) {
-		DEBUG(0,("netsamlogon_cache_store: talloc() failed!\n"));
-		return false;
-	}
-
+	
 	/* only Samba fills in the username, not sure why NT doesn't */
 	/* so we fill it in since winbindd_getpwnam() makes use of it */
-
-	if (!info3->base.account_name.string) {
-		info3->base.account_name.string = talloc_strdup(info3, username);
+	
+	if ( !user->uni_user_name.buffer ) {
+		init_unistr2( &user->uni_user_name, username, UNI_STR_TERMINATE );
+		init_uni_hdr( &user->hdr_user_name, &user->uni_user_name );
 	}
-
-	r.timestamp = t;
-	r.info3 = *info3;
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_DEBUG(netsamlogoncache_entry, &r);
+		
+	/* Prepare data */
+	
+	if ( !(mem_ctx = TALLOC_P( NULL, int )) ) {
+		DEBUG(0,("netsamlogon_cache_store: talloc() failed!\n"));
+		return False;
 	}
 
-	ndr_err = ndr_push_struct_blob(&blob, mem_ctx, &r,
-				       (ndr_push_flags_fn_t)ndr_push_netsamlogoncache_entry);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		DEBUG(0,("netsamlogon_cache_store: failed to push entry to cache\n"));
-		TALLOC_FREE(mem_ctx);
-		return false;
+	prs_init( &ps, RPC_MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
+	
+	{
+		uint32 ts = (uint32)t;
+		if ( !prs_uint32( "timestamp", &ps, 0, &ts ) )
+			return False;
 	}
+	
+	if ( net_io_user_info3("", user, &ps, 0, 3, 0) ) 
+	{
+		data.dsize = prs_offset( &ps );
+		data.dptr = prs_data_p( &ps );
 
-	data.dsize = blob.length;
-	data.dptr = blob.data;
-
-	if (tdb_store_bystring(netsamlogon_tdb, keystr, data, TDB_REPLACE) != -1) {
-		result = true;
+		if (tdb_store_bystring(netsamlogon_tdb, keystr, data, TDB_REPLACE) != -1)
+			result = True;
+		
+		prs_mem_free( &ps );
 	}
 
-	TALLOC_FREE(mem_ctx);
-
+	TALLOC_FREE( mem_ctx );
+		
 	return result;
 }
 
 /***********************************************************************
- Retrieves a netr_SamInfo3 structure from a tdb.  Caller must
+ Retrieves a NET_USER_INFO_3 structure from a tdb.  Caller must 
  free the user_info struct (malloc()'d memory)
 ***********************************************************************/
 
-struct netr_SamInfo3 *netsamlogon_cache_get(TALLOC_CTX *mem_ctx, const DOM_SID *user_sid)
+NET_USER_INFO_3* netsamlogon_cache_get( TALLOC_CTX *mem_ctx, const DOM_SID *user_sid)
 {
-	struct netr_SamInfo3 *info3 = NULL;
-	TDB_DATA data;
-	fstring keystr, tmp;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-	struct netsamlogoncache_entry r;
-
+	NET_USER_INFO_3	*user = NULL;
+	TDB_DATA 	data, key;
+	prs_struct	ps;
+        fstring 	keystr;
+	uint32		t;
+	
 	if (!netsamlogon_cache_init()) {
-		DEBUG(0,("netsamlogon_cache_get: cannot open %s for write!\n",
-			NETSAMLOGON_TDB));
-		return false;
+		DEBUG(0,("netsamlogon_cache_get: cannot open %s for write!\n", NETSAMLOGON_TDB));
+		return False;
 	}
 
 	/* Prepare key as DOMAIN-SID/USER-RID string */
-	slprintf(keystr, sizeof(keystr), "%s", sid_to_fstring(tmp, user_sid));
+	slprintf(keystr, sizeof(keystr), "%s", sid_string_static(user_sid));
 	DEBUG(10,("netsamlogon_cache_get: SID [%s]\n", keystr));
-	data = tdb_fetch_bystring( netsamlogon_tdb, keystr );
+	key.dptr = keystr;
+	key.dsize = strlen(keystr)+1;
+	data = tdb_fetch( netsamlogon_tdb, key );
+	
+	if ( data.dptr ) {
 
-	if (!data.dptr) {
-		return NULL;
-	}
+		user = TALLOC_ZERO_P(mem_ctx, NET_USER_INFO_3);
+		if (user == NULL) {
+			return NULL;
+		}
 
-	info3 = TALLOC_ZERO_P(mem_ctx, struct netr_SamInfo3);
-	if (!info3) {
-		goto done;
-	}
+		prs_init( &ps, 0, mem_ctx, UNMARSHALL );
+		prs_give_memory( &ps, data.dptr, data.dsize, True );
+		
+		if ( !prs_uint32( "timestamp", &ps, 0, &t ) ) {
+			prs_mem_free( &ps );
+			TALLOC_FREE(user);
+			return False;
+		}
+		
+		if ( !net_io_user_info3("", user, &ps, 0, 3, 0) ) {
+			TALLOC_FREE( user );
+		}
+			
+		prs_mem_free( &ps );
 
-	blob = data_blob_const(data.dptr, data.dsize);
-
-	ndr_err = ndr_pull_struct_blob(&blob, mem_ctx, &r,
-				      (ndr_pull_flags_fn_t)ndr_pull_netsamlogoncache_entry);
-
-	if (DEBUGLEVEL >= 10) {
-		NDR_PRINT_DEBUG(netsamlogoncache_entry, &r);
-	}
-
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		DEBUG(0,("netsamlogon_cache_get: failed to pull entry from cache\n"));
-		tdb_delete(netsamlogon_tdb, data);
-		TALLOC_FREE(info3);
-		goto done;
-	}
-
-	info3 = (struct netr_SamInfo3 *)talloc_memdup(mem_ctx, &r.info3,
-						      sizeof(r.info3));
-
- done:
-	SAFE_FREE(data.dptr);
-
-	return info3;
-
-#if 0	/* The netsamlogon cache needs to hang around.  Something about
+#if 0	/* The netsamlogon cache needs to hang around.  Something about 
 	   this feels wrong, but it is the only way we can get all of the
 	   groups.  The old universal groups cache didn't expire either.
 	   --jerry */
 	{
 		time_t		now = time(NULL);
 		uint32		time_diff;
-
+	   
 		/* is the entry expired? */
 		time_diff = now - t;
-
+		
 		if ( (time_diff < 0 ) || (time_diff > lp_winbind_cache_time()) ) {
 			DEBUG(10,("netsamlogon_cache_get: cache entry expired \n"));
 			tdb_delete( netsamlogon_tdb, key );
 			TALLOC_FREE( user );
 		}
-	}
 #endif
+	}
+	
+	return user;
 }
 
-bool netsamlogon_cache_have(const DOM_SID *user_sid)
+BOOL netsamlogon_cache_have(const DOM_SID *user_sid)
 {
 	TALLOC_CTX *mem_ctx = talloc_init("netsamlogon_cache_have");
-	struct netr_SamInfo3 *info3 = NULL;
-	bool result;
+	NET_USER_INFO_3 *user = NULL;
+	BOOL result;
 
 	if (!mem_ctx)
 		return False;
 
-	info3 = netsamlogon_cache_get(mem_ctx, user_sid);
+	user = netsamlogon_cache_get(mem_ctx, user_sid);
 
-	result = (info3 != NULL);
+	result = (user != NULL);
 
 	talloc_destroy(mem_ctx);
 

Deleted: branches/samba/upstream/source/libsmb/smb_seal.c
===================================================================
--- branches/samba/upstream/source/libsmb/smb_seal.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/smb_seal.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,497 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   SMB Transport encryption (sealing) code.
-   Copyright (C) Jeremy Allison 2007.
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-
-/******************************************************************************
- Pull out the encryption context for this packet. 0 means global context.
-******************************************************************************/
-
-NTSTATUS get_enc_ctx_num(const uint8_t *buf, uint16 *p_enc_ctx_num)
-{
-	if (smb_len(buf) < 8) {
-		return NT_STATUS_INVALID_BUFFER_SIZE;
-	}
-
-	if (buf[4] == 0xFF) {
-		if (buf[5] == 'S' && buf [6] == 'M' && buf[7] == 'B') {
-			/* Not an encrypted buffer. */
-			return NT_STATUS_NOT_FOUND;
-		}
-		if (buf[5] == 'E') {
-			*p_enc_ctx_num = SVAL(buf,6);
-			return NT_STATUS_OK;
-		}
-	}
-	return NT_STATUS_INVALID_NETWORK_RESPONSE;
-}
-
-/******************************************************************************
- Generic code for client and server.
- Is encryption turned on ?
-******************************************************************************/
-
-bool common_encryption_on(struct smb_trans_enc_state *es)
-{
-	return ((es != NULL) && es->enc_on);
-}
-
-/******************************************************************************
- Generic code for client and server.
- NTLM decrypt an incoming buffer.
- Abartlett tells me that SSPI puts the signature first before the encrypted
- output, so cope with the same for compatibility.
-******************************************************************************/
-
-NTSTATUS common_ntlm_decrypt_buffer(NTLMSSP_STATE *ntlmssp_state, char *buf)
-{
-	NTSTATUS status;
-	size_t buf_len = smb_len(buf) + 4; /* Don't forget the 4 length bytes. */
-	size_t data_len;
-	char *inbuf;
-	DATA_BLOB sig;
-
-	if (buf_len < 8 + NTLMSSP_SIG_SIZE) {
-		return NT_STATUS_BUFFER_TOO_SMALL;
-	}
-
-	inbuf = (char *)smb_xmemdup(buf, buf_len);
-
-	/* Adjust for the signature. */
-	data_len = buf_len - 8 - NTLMSSP_SIG_SIZE;
-
-	/* Point at the signature. */
-	sig = data_blob_const(inbuf+8, NTLMSSP_SIG_SIZE);
-
-	status = ntlmssp_unseal_packet(ntlmssp_state,
-		(unsigned char *)inbuf + 8 + NTLMSSP_SIG_SIZE, /* 4 byte len + 0xFF 'E' <enc> <ctx> */
-		data_len,
-		(unsigned char *)inbuf + 8 + NTLMSSP_SIG_SIZE,
-		data_len,
-		&sig);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		SAFE_FREE(inbuf);
-		return status;
-	}
-
-	memcpy(buf + 8, inbuf + 8 + NTLMSSP_SIG_SIZE, data_len);
-
-	/* Reset the length and overwrite the header. */
-	smb_setlen(buf,data_len + 4);
-
-	SAFE_FREE(inbuf);
-	return NT_STATUS_OK;
-}
-
-/******************************************************************************
- Generic code for client and server.
- NTLM encrypt an outgoing buffer. Return the encrypted pointer in ppbuf_out.
- Abartlett tells me that SSPI puts the signature first before the encrypted
- output, so do the same for compatibility.
-******************************************************************************/
-
-NTSTATUS common_ntlm_encrypt_buffer(NTLMSSP_STATE *ntlmssp_state,
-				uint16 enc_ctx_num,
-				char *buf,
-				char **ppbuf_out)
-{
-	NTSTATUS status;
-	char *buf_out;
-	size_t data_len = smb_len(buf) - 4; /* Ignore the 0xFF SMB bytes. */
-	DATA_BLOB sig;
-
-	*ppbuf_out = NULL;
-
-	if (data_len == 0) {
-		return NT_STATUS_BUFFER_TOO_SMALL;
-	}
-
-	/* 
-	 * We know smb_len can't return a value > 128k, so no int overflow
-	 * check needed.
-	 */
-
-	buf_out = SMB_XMALLOC_ARRAY(char, 8 + NTLMSSP_SIG_SIZE + data_len);
-
-	/* Copy the data from the original buffer. */
-
-	memcpy(buf_out + 8 + NTLMSSP_SIG_SIZE, buf + 8, data_len);
-
-	smb_set_enclen(buf_out, smb_len(buf) + NTLMSSP_SIG_SIZE, enc_ctx_num);
-
-	sig = data_blob(NULL, NTLMSSP_SIG_SIZE);
-
-	status = ntlmssp_seal_packet(ntlmssp_state,
-		(unsigned char *)buf_out + 8 + NTLMSSP_SIG_SIZE, /* 4 byte len + 0xFF 'S' <enc> <ctx> */
-		data_len,
-		(unsigned char *)buf_out + 8 + NTLMSSP_SIG_SIZE,
-		data_len,
-		&sig);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		data_blob_free(&sig);
-		SAFE_FREE(buf_out);
-		return status;
-	}
-
-	/* First 16 data bytes are signature for SSPI compatibility. */
-	memcpy(buf_out + 8, sig.data, NTLMSSP_SIG_SIZE);
-	*ppbuf_out = buf_out;
-	return NT_STATUS_OK;
-}
-
-/******************************************************************************
- Generic code for client and server.
- gss-api decrypt an incoming buffer. We insist that the size of the
- unwrapped buffer must be smaller or identical to the incoming buffer.
-******************************************************************************/
-
-#if defined(HAVE_GSSAPI) && defined(HAVE_KRB5)
-static NTSTATUS common_gss_decrypt_buffer(struct smb_tran_enc_state_gss *gss_state, char *buf)
-{
-	gss_ctx_id_t gss_ctx = gss_state->gss_ctx;
-	OM_uint32 ret = 0;
-	OM_uint32 minor = 0;
-	int flags_got = 0;
-	gss_buffer_desc in_buf, out_buf;
-	size_t buf_len = smb_len(buf) + 4; /* Don't forget the 4 length bytes. */
-
-	if (buf_len < 8) {
-		return NT_STATUS_BUFFER_TOO_SMALL;
-	}
-
-	in_buf.value = buf + 8;
-	in_buf.length = buf_len - 8;
-
-	ret = gss_unwrap(&minor,
-			gss_ctx,
-			&in_buf,
-			&out_buf,
-			&flags_got,		/* did we get sign+seal ? */
-			(gss_qop_t *) NULL);	
-
-	if (ret != GSS_S_COMPLETE) {
-		ADS_STATUS adss = ADS_ERROR_GSS(ret, minor);
-		DEBUG(0,("common_gss_encrypt_buffer: gss_unwrap failed. Error %s\n",
-			ads_errstr(adss) ));
-		return map_nt_error_from_gss(ret, minor);
-	}
-
-	if (out_buf.length > in_buf.length) {
-		DEBUG(0,("common_gss_encrypt_buffer: gss_unwrap size (%u) too large (%u) !\n",
-			(unsigned int)out_buf.length,
-			(unsigned int)in_buf.length ));
-		gss_release_buffer(&minor, &out_buf);
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	memcpy(buf + 8, out_buf.value, out_buf.length);
-	/* Reset the length and overwrite the header. */
-	smb_setlen(buf, out_buf.length + 4);
-
-	gss_release_buffer(&minor, &out_buf);
-	return NT_STATUS_OK;
-}
-
-/******************************************************************************
- Generic code for client and server.
- gss-api encrypt an outgoing buffer. Return the alloced encrypted pointer in buf_out.
-******************************************************************************/
-
-static NTSTATUS common_gss_encrypt_buffer(struct smb_tran_enc_state_gss *gss_state,
-					uint16 enc_ctx_num,
-		 			char *buf,
-					char **ppbuf_out)
-{
-	gss_ctx_id_t gss_ctx = gss_state->gss_ctx;
-	OM_uint32 ret = 0;
-	OM_uint32 minor = 0;
-	int flags_got = 0;
-	gss_buffer_desc in_buf, out_buf;
-	size_t buf_len = smb_len(buf) + 4; /* Don't forget the 4 length bytes. */
-
-	*ppbuf_out = NULL;
-
-	if (buf_len < 8) {
-		return NT_STATUS_BUFFER_TOO_SMALL;
-	}
-
-	in_buf.value = buf + 8;
-	in_buf.length = buf_len - 8;
-
-	ret = gss_wrap(&minor,
-			gss_ctx,
-			true,			/* we want sign+seal. */
-			GSS_C_QOP_DEFAULT,
-			&in_buf,
-			&flags_got,		/* did we get sign+seal ? */
-			&out_buf);
-
-	if (ret != GSS_S_COMPLETE) {
-		ADS_STATUS adss = ADS_ERROR_GSS(ret, minor);
-		DEBUG(0,("common_gss_encrypt_buffer: gss_wrap failed. Error %s\n",
-			ads_errstr(adss) ));
-		return map_nt_error_from_gss(ret, minor);
-	}
-
-	if (!flags_got) {
-		/* Sign+seal not supported. */
-		gss_release_buffer(&minor, &out_buf);
-		return NT_STATUS_NOT_SUPPORTED;
-	}
-
-	/* Ya see - this is why I *hate* gss-api. I don't 
-	 * want to have to malloc another buffer of the
-	 * same size + 8 bytes just to get a continuous
-	 * header + buffer, but gss won't let me pass in
-	 * a pre-allocated buffer. Bastards (and you know
-	 * who you are....). I might fix this by
-	 * going to "encrypt_and_send" passing in a file
-	 * descriptor and doing scatter-gather write with
-	 * TCP cork on Linux. But I shouldn't have to
-	 * bother :-*(. JRA.
-	 */
-
-	*ppbuf_out = (char *)SMB_MALLOC(out_buf.length + 8); /* We know this can't wrap. */
-	if (!*ppbuf_out) {
-		gss_release_buffer(&minor, &out_buf);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	memcpy(*ppbuf_out+8, out_buf.value, out_buf.length);
-	smb_set_enclen(*ppbuf_out, out_buf.length + 4, enc_ctx_num);
-
-	gss_release_buffer(&minor, &out_buf);
-	return NT_STATUS_OK;
-}
-#endif
-
-/******************************************************************************
- Generic code for client and server.
- Encrypt an outgoing buffer. Return the alloced encrypted pointer in buf_out.
-******************************************************************************/
-
-NTSTATUS common_encrypt_buffer(struct smb_trans_enc_state *es, char *buffer, char **buf_out)
-{
-	if (!common_encryption_on(es)) {
-		/* Not encrypting. */
-		*buf_out = buffer;
-		return NT_STATUS_OK;
-	}
-
-	switch (es->smb_enc_type) {
-		case SMB_TRANS_ENC_NTLM:
-			return common_ntlm_encrypt_buffer(es->s.ntlmssp_state, es->enc_ctx_num, buffer, buf_out);
-#if defined(HAVE_GSSAPI) && defined(HAVE_KRB5)
-		case SMB_TRANS_ENC_GSS:
-			return common_gss_encrypt_buffer(es->s.gss_state, es->enc_ctx_num, buffer, buf_out);
-#endif
-		default:
-			return NT_STATUS_NOT_SUPPORTED;
-	}
-}
-
-/******************************************************************************
- Generic code for client and server.
- Decrypt an incoming SMB buffer. Replaces the data within it.
- New data must be less than or equal to the current length.
-******************************************************************************/
-
-NTSTATUS common_decrypt_buffer(struct smb_trans_enc_state *es, char *buf)
-{
-	if (!common_encryption_on(es)) {
-		/* Not decrypting. */
-		return NT_STATUS_OK;
-	}
-
-	switch (es->smb_enc_type) {
-		case SMB_TRANS_ENC_NTLM:
-			return common_ntlm_decrypt_buffer(es->s.ntlmssp_state, buf);
-#if defined(HAVE_GSSAPI) && defined(HAVE_KRB5)
-		case SMB_TRANS_ENC_GSS:
-			return common_gss_decrypt_buffer(es->s.gss_state, buf);
-#endif
-		default:
-			return NT_STATUS_NOT_SUPPORTED;
-	}
-}
-
-#if defined(HAVE_GSSAPI) && defined(HAVE_KRB5)
-/******************************************************************************
- Shutdown a gss encryption state.
-******************************************************************************/
-
-static void common_free_gss_state(struct smb_tran_enc_state_gss **pp_gss_state)
-{
-	OM_uint32 minor = 0;
-	struct smb_tran_enc_state_gss *gss_state = *pp_gss_state;
-
-	if (gss_state->creds != GSS_C_NO_CREDENTIAL) {
-		gss_release_cred(&minor, &gss_state->creds);
-	}
-	if (gss_state->gss_ctx != GSS_C_NO_CONTEXT) {
-		gss_delete_sec_context(&minor, &gss_state->gss_ctx, NULL);
-	}
-	SAFE_FREE(*pp_gss_state);
-}
-#endif
-
-/******************************************************************************
- Shutdown an encryption state.
-******************************************************************************/
-
-void common_free_encryption_state(struct smb_trans_enc_state **pp_es)
-{
-	struct smb_trans_enc_state *es = *pp_es;
-
-	if (es == NULL) {
-		return;
-	}
-
-	if (es->smb_enc_type == SMB_TRANS_ENC_NTLM) {
-		if (es->s.ntlmssp_state) {
-			ntlmssp_end(&es->s.ntlmssp_state);
-		}
-	}
-#if defined(HAVE_GSSAPI) && defined(HAVE_KRB5)
-	if (es->smb_enc_type == SMB_TRANS_ENC_GSS) {
-		/* Free the gss context handle. */
-		if (es->s.gss_state) {
-			common_free_gss_state(&es->s.gss_state);
-		}
-	}
-#endif
-	SAFE_FREE(es);
-	*pp_es = NULL;
-}
-
-/******************************************************************************
- Free an encryption-allocated buffer.
-******************************************************************************/
-
-void common_free_enc_buffer(struct smb_trans_enc_state *es, char *buf)
-{
-	if (!common_encryption_on(es)) {
-		return;
-	}
-
-	if (es->smb_enc_type == SMB_TRANS_ENC_NTLM) {
-		SAFE_FREE(buf);
-		return;
-	}
-
-#if defined(HAVE_GSSAPI) && defined(HAVE_KRB5)
-	if (es->smb_enc_type == SMB_TRANS_ENC_GSS) {
-		OM_uint32 min;
-		gss_buffer_desc rel_buf;
-		rel_buf.value = buf;
-		rel_buf.length = smb_len(buf) + 4;
-		gss_release_buffer(&min, &rel_buf);
-	}
-#endif
-}
-
-/******************************************************************************
- Client side encryption.
-******************************************************************************/
-
-/******************************************************************************
- Is client encryption on ?
-******************************************************************************/
-
-bool cli_encryption_on(struct cli_state *cli)
-{
-	/* If we supported multiple encrytion contexts
-	 * here we'd look up based on tid.
-	 */
-	return common_encryption_on(cli->trans_enc_state);
-}
-
-/******************************************************************************
- Shutdown a client encryption state.
-******************************************************************************/
-
-void cli_free_encryption_context(struct cli_state *cli)
-{
-	common_free_encryption_state(&cli->trans_enc_state);
-}
-
-/******************************************************************************
- Free an encryption-allocated buffer.
-******************************************************************************/
-
-void cli_free_enc_buffer(struct cli_state *cli, char *buf)
-{
-	/* We know this is an smb buffer, and we
-	 * didn't malloc, only copy, for a keepalive,
-	 * so ignore non-session messages. */
-
-	if(CVAL(buf,0)) {
-		return;
-	}
-
-	/* If we supported multiple encrytion contexts
-	 * here we'd look up based on tid.
-	 */
-	common_free_enc_buffer(cli->trans_enc_state, buf);
-}
-
-/******************************************************************************
- Decrypt an incoming buffer.
-******************************************************************************/
-
-NTSTATUS cli_decrypt_message(struct cli_state *cli)
-{
-	NTSTATUS status;
-	uint16 enc_ctx_num;
-
-	/* Ignore non-session messages. */
-	if(CVAL(cli->inbuf,0)) {
-		return NT_STATUS_OK;
-	}
-
-	status = get_enc_ctx_num((const uint8_t *)cli->inbuf, &enc_ctx_num);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (enc_ctx_num != cli->trans_enc_state->enc_ctx_num) {
-		return NT_STATUS_INVALID_HANDLE;
-	}
-
-	return common_decrypt_buffer(cli->trans_enc_state, cli->inbuf);
-}
-
-/******************************************************************************
- Encrypt an outgoing buffer. Return the encrypted pointer in buf_out.
-******************************************************************************/
-
-NTSTATUS cli_encrypt_message(struct cli_state *cli, char *buf, char **buf_out)
-{
-	/* Ignore non-session messages. */
-	if (CVAL(buf,0)) {
-		return NT_STATUS_OK;
-	}
-
-	/* If we supported multiple encrytion contexts
-	 * here we'd look up based on tid.
-	 */
-	return common_encrypt_buffer(cli->trans_enc_state, buf, buf_out);
-}

Modified: branches/samba/upstream/source/libsmb/smb_share_modes.c
===================================================================
--- branches/samba/upstream/source/libsmb/smb_share_modes.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/smb_share_modes.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -13,7 +13,7 @@
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
                                                                                                                                   
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -21,7 +21,8 @@
    Lesser General Public License for more details.
                                                                                                                                   
    You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
+   License along with this library; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
 #include "includes.h"
@@ -41,12 +42,12 @@
 				uint64_t ino, const struct smb_share_mode_entry *new_entry,
 				const char *sharepath, const char *filename);
 
-static bool sharemodes_procid_equal(const struct server_id *p1, const struct server_id *p2)
+static BOOL sharemodes_procid_equal(const struct process_id *p1, const struct process_id *p2)
 {
 	return (p1->pid == p2->pid);
 }
 
-static pid_t sharemodes_procid_to_pid(const struct server_id *proc)
+static pid_t sharemodes_procid_to_pid(const struct process_id *proc)
 {
 	return proc->pid;
 }
@@ -100,7 +101,7 @@
 	memset(&lk, '\0', sizeof(struct locking_key));
 	lk.dev = (SMB_DEV_T)dev;
 	lk.inode = (SMB_INO_T)ino;
-	ld.dptr = (uint8 *)&lk;
+	ld.dptr = (char *)&lk;
 	ld.dsize = sizeof(lk);
 	return ld;
 }
@@ -136,8 +137,8 @@
 		e_entry->open_time.tv_usec == entry->time.tv_usec &&
 		e_entry->share_access == (uint32_t)entry->share_access &&
 		e_entry->access_mask == (uint32_t)entry->access_mask &&
-		e_entry->dev == entry->id.devid && 
-		e_entry->ino == entry->id.inode);
+		e_entry->dev == (uint64_t)entry->dev && 
+		e_entry->ino == (uint64_t)entry->inode);
 }
 
 /*
@@ -155,8 +156,8 @@
 	out->time.tv_usec = in->open_time.tv_usec;
 	out->share_access = in->share_access;
 	out->access_mask = in->access_mask;
-	out->id.devid = in->dev;
-	out->id.inode = in->ino;
+	out->dev = (SMB_DEV_T)in->dev;
+	out->inode = (SMB_INO_T)in->ino;
 	out->uid = (uint32)geteuid();
 	out->flags = 0;
 }
@@ -210,7 +211,7 @@
 	for (i = 0; i < num_share_modes; i++) {
 		struct share_mode_entry *share = &shares[i];
 		struct smb_share_mode_entry *sme = &list[list_num];
-		struct server_id pid = share->pid;
+		struct process_id pid = share->pid;
 
 		/* Check this process really exists. */
 		if (kill(sharemodes_procid_to_pid(&pid), 0) == -1 && (errno == ESRCH)) {
@@ -223,8 +224,8 @@
 		}
 
 		/* Copy into the external list. */
-		sme->dev = share->id.devid;
-		sme->ino = share->id.inode;
+		sme->dev = (uint64_t)share->dev;
+		sme->ino = (uint64_t)share->inode;
 		sme->share_access = (uint32_t)share->share_access;
 		sme->access_mask = (uint32_t)share->access_mask;
 		sme->open_time.tv_sec = share->time.tv_sec;
@@ -262,13 +263,13 @@
 	int orig_num_share_modes = 0;
 	struct locking_data *ld = NULL; /* internal samba db state. */
 	struct share_mode_entry *shares = NULL;
-	uint8 *new_data_p = NULL;
+	char *new_data_p = NULL;
 	size_t new_data_size = 0;
 
 	db_data = tdb_fetch(db_ctx->smb_tdb, locking_key);
 	if (!db_data.dptr) {
 		/* We must create the entry. */
-		db_data.dptr = (uint8 *)malloc(
+		db_data.dptr = (char *)malloc(
 			sizeof(struct locking_data) +
 			sizeof(struct share_mode_entry) +
 			strlen(sharepath) + 1 +
@@ -304,7 +305,7 @@
 	}
 
 	/* Entry exists, we must add a new entry. */
-	new_data_p = (uint8 *)malloc(
+	new_data_p = (char *)malloc(
 		db_data.dsize + sizeof(struct share_mode_entry));
 	if (!new_data_p) {
 		free(db_data.dptr);
@@ -375,10 +376,10 @@
 	int orig_num_share_modes = 0;
 	struct locking_data *ld = NULL; /* internal samba db state. */
 	struct share_mode_entry *shares = NULL;
-	uint8 *new_data_p = NULL;
+	char *new_data_p = NULL;
 	size_t remaining_size = 0;
 	size_t i, num_share_modes;
-	const uint8 *remaining_ptr = NULL;
+	const char *remaining_ptr = NULL;
 
 	db_data = tdb_fetch(db_ctx->smb_tdb, locking_key);
 	if (!db_data.dptr) {
@@ -402,7 +403,7 @@
 	}
 
 	/* More than one - allocate a new record minus the one we'll delete. */
-	new_data_p = (uint8 *)malloc(
+	new_data_p = (char *)malloc(
 		db_data.dsize - sizeof(struct share_mode_entry));
 	if (!new_data_p) {
 		free(db_data.dptr);
@@ -415,7 +416,7 @@
 	num_share_modes = 0;
 	for (i = 0; i < orig_num_share_modes; i++) {
 		struct share_mode_entry *share = &shares[i];
-		struct server_id pid = share->pid;
+		struct process_id pid = share->pid;
 
 		/* Check this process really exists. */
 		if (kill(sharemodes_procid_to_pid(&pid), 0) == -1 && (errno == ESRCH)) {
@@ -491,7 +492,7 @@
 
 	for (i = 0; i < num_share_modes; i++) {
 		struct share_mode_entry *share = &shares[i];
-		struct server_id pid = share->pid;
+		struct process_id pid = share->pid;
 
 		/* Check this process really exists. */
 		if (kill(sharemodes_procid_to_pid(&pid), 0) == -1 && (errno == ESRCH)) {

Modified: branches/samba/upstream/source/libsmb/smb_signing.c
===================================================================
--- branches/samba/upstream/source/libsmb/smb_signing.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/smb_signing.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -25,7 +26,7 @@
 	struct outstanding_packet_lookup *prev, *next;
 	uint16 mid;
 	uint32 reply_seq_num;
-	bool can_delete; /* Set to False in trans state. */
+	BOOL can_delete; /* Set to False in trans state. */
 };
 
 struct smb_basic_signing_context {
@@ -34,7 +35,7 @@
 	struct outstanding_packet_lookup *outstanding_packet_list;
 };
 
-static bool store_sequence_for_reply(struct outstanding_packet_lookup **list, 
+static BOOL store_sequence_for_reply(struct outstanding_packet_lookup **list, 
 				     uint16 mid, uint32 reply_seq_num)
 {
 	struct outstanding_packet_lookup *t;
@@ -68,7 +69,7 @@
 	return True;
 }
 
-static bool get_sequence_for_reply(struct outstanding_packet_lookup **list,
+static BOOL get_sequence_for_reply(struct outstanding_packet_lookup **list,
 				   uint16 mid, uint32 *reply_seq_num)
 {
 	struct outstanding_packet_lookup *t;
@@ -88,7 +89,7 @@
 	return False;
 }
 
-static bool set_sequence_can_delete_flag(struct outstanding_packet_lookup **list, uint16 mid, bool can_delete_entry)
+static BOOL set_sequence_can_delete_flag(struct outstanding_packet_lookup **list, uint16 mid, BOOL can_delete_entry)
 {
 	struct outstanding_packet_lookup *t;
 
@@ -105,7 +106,7 @@
  SMB signing - Common code before we set a new signing implementation
 ************************************************************/
 
-static bool cli_set_smb_signing_common(struct cli_state *cli) 
+static BOOL cli_set_smb_signing_common(struct cli_state *cli) 
 {
 	if (!cli->sign_info.allow_smb_signing) {
 		return False;
@@ -134,7 +135,7 @@
  SMB signing - Common code for 'real' implementations
 ************************************************************/
 
-static bool set_smb_signing_real_common(struct smb_sign_info *si)
+static BOOL set_smb_signing_real_common(struct smb_sign_info *si)
 {
 	if (si->mandatory_signing) {
 		DEBUG(5, ("Mandatory SMB signing enabled!\n"));
@@ -170,9 +171,7 @@
  SMB signing - NULL implementation - check a MAC sent by server.
 ************************************************************/
 
-static bool null_check_incoming_message(const char *inbuf,
-					struct smb_sign_info *si,
-					bool must_be_ok)
+static BOOL null_check_incoming_message(char *inbuf, struct smb_sign_info *si, BOOL must_be_ok)
 {
 	return True;
 }
@@ -193,7 +192,7 @@
        shut down a real signing mechanism
 */
 
-static bool null_set_signing(struct smb_sign_info *si)
+static BOOL null_set_signing(struct smb_sign_info *si)
 {
 	si->signing_context = NULL;
 	
@@ -219,8 +218,7 @@
 }
 
 
-static bool signing_good(const char *inbuf, struct smb_sign_info *si,
-			 bool good, uint32 seq, bool must_be_ok)
+static BOOL signing_good(char *inbuf, struct smb_sign_info *si, BOOL good, uint32 seq, BOOL must_be_ok) 
 {
 	if (good) {
 
@@ -349,7 +347,7 @@
 				data->send_seq_num, calc_md5_mac);
 
 	DEBUG(10, ("client_sign_outgoing_message: sent SMB signature of\n"));
-	dump_data(10, calc_md5_mac, 8);
+	dump_data(10, (const char *)calc_md5_mac, 8);
 
 	memcpy(&outbuf[smb_ss_field], calc_md5_mac, 8);
 
@@ -378,11 +376,9 @@
  SMB signing - Client implementation - check a MAC sent by server.
 ************************************************************/
 
-static bool client_check_incoming_message(const char *inbuf,
-					  struct smb_sign_info *si,
-					  bool must_be_ok)
+static BOOL client_check_incoming_message(char *inbuf, struct smb_sign_info *si, BOOL must_be_ok)
 {
-	bool good;
+	BOOL good;
 	uint32 reply_seq_number;
 	unsigned char calc_md5_mac[16];
 	unsigned char *server_sent_mac;
@@ -412,10 +408,10 @@
 	
 	if (!good) {
 		DEBUG(5, ("client_check_incoming_message: BAD SIG: wanted SMB signature of\n"));
-		dump_data(5, calc_md5_mac, 8);
+		dump_data(5, (const char *)calc_md5_mac, 8);
 		
 		DEBUG(5, ("client_check_incoming_message: BAD SIG: got SMB signature of\n"));
-		dump_data(5, server_sent_mac, 8);
+		dump_data(5, (const char *)server_sent_mac, 8);
 #if 1 /* JRATEST */
 		{
 			int i;
@@ -432,7 +428,7 @@
 
 	} else {
 		DEBUG(10, ("client_check_incoming_message: seq %u: got good SMB signature of\n", (unsigned int)reply_seq_number));
-		dump_data(10, server_sent_mac, 8);
+		dump_data(10, (const char *)server_sent_mac, 8);
 	}
 	return signing_good(inbuf, si, good, reply_seq_number, must_be_ok);
 }
@@ -465,7 +461,7 @@
  SMB signing - Simple implementation - setup the MAC key.
 ************************************************************/
 
-bool cli_simple_set_signing(struct cli_state *cli,
+BOOL cli_simple_set_signing(struct cli_state *cli,
 			    const DATA_BLOB user_session_key,
 			    const DATA_BLOB response)
 {
@@ -492,12 +488,12 @@
 	memcpy(&data->mac_key.data[0], user_session_key.data, user_session_key.length);
 
 	DEBUG(10, ("cli_simple_set_signing: user_session_key\n"));
-	dump_data(10, user_session_key.data, user_session_key.length);
+	dump_data(10, (const char *)user_session_key.data, user_session_key.length);
 
 	if (response.length) {
 		memcpy(&data->mac_key.data[user_session_key.length],response.data, response.length);
 		DEBUG(10, ("cli_simple_set_signing: response_data\n"));
-		dump_data(10, response.data, response.length);
+		dump_data(10, (const char *)response.data, response.length);
 	} else {
 		DEBUG(10, ("cli_simple_set_signing: NULL response_data\n"));
 	}
@@ -536,8 +532,7 @@
  SMB signing - TEMP implementation - check a MAC sent by server.
 ************************************************************/
 
-static bool temp_check_incoming_message(const char *inbuf,
-					struct smb_sign_info *si, bool foo)
+static BOOL temp_check_incoming_message(char *inbuf, struct smb_sign_info *si, BOOL foo)
 {
 	return True;
 }
@@ -555,7 +550,7 @@
  SMB signing - NULL implementation - setup the MAC key.
 ************************************************************/
 
-bool cli_null_set_signing(struct cli_state *cli)
+BOOL cli_null_set_signing(struct cli_state *cli)
 {
 	return null_set_signing(&cli->sign_info);
 }
@@ -564,7 +559,7 @@
  SMB signing - temp implementation - setup the MAC key.
 ************************************************************/
 
-bool cli_temp_set_signing(struct cli_state *cli)
+BOOL cli_temp_set_signing(struct cli_state *cli)
 {
 	if (!cli_set_smb_signing_common(cli)) {
 		return False;
@@ -588,9 +583,9 @@
  * Sign a packet with the current mechanism
  */
  
-void cli_calculate_sign_mac(struct cli_state *cli, char *buf)
+void cli_calculate_sign_mac(struct cli_state *cli)
 {
-	cli->sign_info.sign_outgoing_message(buf, &cli->sign_info);
+	cli->sign_info.sign_outgoing_message(cli->outbuf, &cli->sign_info);
 }
 
 /**
@@ -599,9 +594,9 @@
  *         which had a bad checksum, True otherwise.
  */
  
-bool cli_check_sign_mac(struct cli_state *cli, char *buf)
+BOOL cli_check_sign_mac(struct cli_state *cli) 
 {
-	if (!cli->sign_info.check_incoming_message(buf, &cli->sign_info, True)) {
+	if (!cli->sign_info.check_incoming_message(cli->inbuf, &cli->sign_info, True)) {
 		free_signing_context(&cli->sign_info);	
 		return False;
 	}
@@ -612,7 +607,7 @@
  Enter trans/trans2/nttrans state.
 ************************************************************/
 
-bool client_set_trans_sign_state_on(struct cli_state *cli, uint16 mid)
+BOOL client_set_trans_sign_state_on(struct cli_state *cli, uint16 mid)
 {
 	struct smb_sign_info *si = &cli->sign_info;
 	struct smb_basic_signing_context *data = (struct smb_basic_signing_context *)si->signing_context;
@@ -636,7 +631,7 @@
  Leave trans/trans2/nttrans state.
 ************************************************************/
 
-bool client_set_trans_sign_state_off(struct cli_state *cli, uint16 mid)
+BOOL client_set_trans_sign_state_off(struct cli_state *cli, uint16 mid)
 {
 	uint32 reply_seq_num;
 	struct smb_sign_info *si = &cli->sign_info;
@@ -663,16 +658,6 @@
 }
 
 /***********************************************************
- Is client signing on ?
-************************************************************/
-
-bool client_is_signing_on(struct cli_state *cli)
-{
-	struct smb_sign_info *si = &cli->sign_info;
-	return si->doing_signing;
-}
-
-/***********************************************************
  SMB signing - Server implementation - send the MAC.
 ************************************************************/
 
@@ -706,7 +691,7 @@
 	simple_packet_signature(data, (const unsigned char *)outbuf, send_seq_number, calc_md5_mac);
 
 	DEBUG(10, ("srv_sign_outgoing_message: seq %u: sent SMB signature of\n", (unsigned int)send_seq_number));
-	dump_data(10, calc_md5_mac, 8);
+	dump_data(10, (const char *)calc_md5_mac, 8);
 
 	memcpy(&outbuf[smb_ss_field], calc_md5_mac, 8);
 
@@ -718,11 +703,9 @@
  SMB signing - Server implementation - check a MAC sent by server.
 ************************************************************/
 
-static bool srv_check_incoming_message(const char *inbuf,
-				       struct smb_sign_info *si,
-				       bool must_be_ok)
+static BOOL srv_check_incoming_message(char *inbuf, struct smb_sign_info *si, BOOL must_be_ok)
 {
-	bool good;
+	BOOL good;
 	struct smb_basic_signing_context *data =
 		(struct smb_basic_signing_context *)si->signing_context;
 	uint32 reply_seq_number = data->send_seq_num;
@@ -752,11 +735,11 @@
 		if (saved_seq) {
 			DEBUG(0, ("srv_check_incoming_message: BAD SIG: seq %u wanted SMB signature of\n",
 					(unsigned int)saved_seq));
-			dump_data(5, calc_md5_mac, 8);
+			dump_data(5, (const char *)calc_md5_mac, 8);
 
 			DEBUG(0, ("srv_check_incoming_message: BAD SIG: seq %u got SMB signature of\n",
 						(unsigned int)reply_seq_number));
-			dump_data(5, server_sent_mac, 8);
+			dump_data(5, (const char *)server_sent_mac, 8);
 		}
 		
 #if 1 /* JRATEST */
@@ -776,7 +759,7 @@
 
 	} else {
 		DEBUG(10, ("srv_check_incoming_message: seq %u: (current is %u) got good SMB signature of\n", (unsigned int)reply_seq_number, (unsigned int)data->send_seq_num));
-		dump_data(10, server_sent_mac, 8);
+		dump_data(10, (const char *)server_sent_mac, 8);
 	}
 
 	return (signing_good(inbuf, si, good, saved_seq, must_be_ok));
@@ -801,9 +784,9 @@
  Turn signing off or on for oplock break code.
 ************************************************************/
 
-bool srv_oplock_set_signing(bool onoff)
+BOOL srv_oplock_set_signing(BOOL onoff)
 {
-	bool ret = srv_sign_info.doing_signing;
+	BOOL ret = srv_sign_info.doing_signing;
 	srv_sign_info.doing_signing = onoff;
 	return ret;
 }
@@ -812,12 +795,11 @@
  Called to validate an incoming packet from the client.
 ************************************************************/
 
-bool srv_check_sign_mac(const char *inbuf, bool must_be_ok)
+BOOL srv_check_sign_mac(char *inbuf, BOOL must_be_ok)
 {
-	/* Check if it's a non-session message. */
-	if(CVAL(inbuf,0)) {
+	/* Check if it's a session keepalive. */
+	if(CVAL(inbuf,0) == SMBkeepalive)
 		return True;
-	}
 
 	return srv_sign_info.check_incoming_message(inbuf, &srv_sign_info, must_be_ok);
 }
@@ -828,10 +810,10 @@
 
 void srv_calculate_sign_mac(char *outbuf)
 {
-	/* Check if it's a non-session message. */
-	if(CVAL(outbuf,0)) {
+	/* Check if it's a session keepalive. */
+	/* JRA Paranioa test - do we ever generate these in the server ? */
+	if(CVAL(outbuf,0) == SMBkeepalive)
 		return;
-	}
 
 	srv_sign_info.sign_outgoing_message(outbuf, &srv_sign_info);
 }
@@ -908,7 +890,7 @@
  reads/writes if it is.
 ************************************************************/
 
-bool srv_is_signing_active(void)
+BOOL srv_is_signing_active(void)
 {
 	return srv_sign_info.doing_signing;
 }
@@ -919,7 +901,7 @@
  in the negprot.  
 ************************************************************/
 
-bool srv_is_signing_negotiated(void)
+BOOL srv_is_signing_negotiated(void)
 {
 	return srv_sign_info.negotiated_smb_signing;
 }
@@ -928,7 +910,7 @@
  Returns whether signing is actually happening
 ************************************************************/
 
-bool srv_signing_started(void)
+BOOL srv_signing_started(void)
 {
 	struct smb_basic_signing_context *data;
 

Modified: branches/samba/upstream/source/libsmb/smbdes.c
===================================================================
--- branches/samba/upstream/source/libsmb/smbdes.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/smbdes.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/source/libsmb/smbencrypt.c
===================================================================
--- branches/samba/upstream/source/libsmb/smbencrypt.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/smbencrypt.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -35,9 +36,9 @@
 
 #ifdef DEBUG_PASSWORD
 	DEBUG(100,("SMBencrypt_hash: lm#, challenge, response\n"));
-	dump_data(100, p21, 16);
-	dump_data(100, c8, 8);
-	dump_data(100, p24, 24);
+	dump_data(100, (const char *)p21, 16);
+	dump_data(100, (const char *)c8, 8);
+	dump_data(100, (const char *)p24, 24);
 #endif
 }
 
@@ -49,9 +50,9 @@
    Returns False if password must have been truncated to create LM hash
 */
 
-bool SMBencrypt(const char *passwd, const uchar *c8, uchar p24[24])
+BOOL SMBencrypt(const char *passwd, const uchar *c8, uchar p24[24])
 {
-	bool ret;
+	BOOL ret;
 	uchar lm_hash[16];
 
 	ret = E_deshash(passwd, lm_hash); 
@@ -107,9 +108,9 @@
  * @note p16 is filled in regardless
  */
  
-bool E_deshash(const char *passwd, uchar p16[16])
+BOOL E_deshash(const char *passwd, uchar p16[16])
 {
-	bool ret = True;
+	BOOL ret = True;
 	fstring dospwd; 
 	ZERO_STRUCT(dospwd);
 	
@@ -145,23 +146,23 @@
 
 #ifdef DEBUG_PASSWORD
 	DEBUG(100,("nt_lm_owf_gen: pwd, nt#\n"));
-	dump_data(120, (uint8 *)pwd, strlen(pwd));
-	dump_data(100, nt_p16, 16);
+	dump_data(120, pwd, strlen(pwd));
+	dump_data(100, (char *)nt_p16, 16);
 #endif
 
 	E_deshash(pwd, (uchar *)p16);
 
 #ifdef DEBUG_PASSWORD
 	DEBUG(100,("nt_lm_owf_gen: pwd, lm#\n"));
-	dump_data(120, (uint8 *)pwd, strlen(pwd));
-	dump_data(100, p16, 16);
+	dump_data(120, pwd, strlen(pwd));
+	dump_data(100, (char *)p16, 16);
 #endif
 }
 
 /* Does both the NTLMv2 owfs of a user's password */
-bool ntv2_owf_gen(const uchar owf[16],
+BOOL ntv2_owf_gen(const uchar owf[16],
 		  const char *user_in, const char *domain_in,
-		  bool upper_case_domain, /* Transform the domain into UPPER case */
+		  BOOL upper_case_domain, /* Transform the domain into UPPER case */
 		  uchar kr_buf[16])
 {
 	smb_ucs2_t *user;
@@ -181,7 +182,6 @@
 	domain_byte_len = push_ucs2_allocate(&domain, domain_in);
 	if (domain_byte_len == (size_t)-1) {
 		DEBUG(0, ("push_uss2_allocate() for domain returned -1 (probably malloc() failure)\n"));
-		SAFE_FREE(user);
 		return False;
 	}
 
@@ -204,10 +204,10 @@
 
 #ifdef DEBUG_PASSWORD
 	DEBUG(100, ("ntv2_owf_gen: user, domain, owfkey, kr\n"));
-	dump_data(100, (uint8 *)user, user_byte_len);
-	dump_data(100, (uint8 *)domain, domain_byte_len);
-	dump_data(100, (uint8 *)owf, 16);
-	dump_data(100, (uint8 *)kr_buf, 16);
+	dump_data(100, (const char *)user, user_byte_len);
+	dump_data(100, (const char *)domain, domain_byte_len);
+	dump_data(100, (const char *)owf, 16);
+	dump_data(100, (const char *)kr_buf, 16);
 #endif
 
 	SAFE_FREE(user);
@@ -238,9 +238,9 @@
 	E_P24(p21, ntlmchalresp, p24);
 #ifdef DEBUG_PASSWORD
 	DEBUG(100,("NTLMSSPOWFencrypt: p21, c8, p24\n"));
-	dump_data(100, p21, 21);
-	dump_data(100, ntlmchalresp, 8);
-	dump_data(100, p24, 24);
+	dump_data(100, (char *)p21, 21);
+	dump_data(100, (const char *)ntlmchalresp, 8);
+	dump_data(100, (char *)p24, 24);
 #endif
 }
 
@@ -257,9 +257,9 @@
 
 #ifdef DEBUG_PASSWORD
 	DEBUG(100,("SMBNTencrypt: nt#, challenge, response\n"));
-	dump_data(100, p21, 16);
-	dump_data(100, c8, 8);
-	dump_data(100, p24, 24);
+	dump_data(100, (char *)p21, 16);
+	dump_data(100, (char *)c8, 8);
+	dump_data(100, (char *)p24, 24);
 #endif
 }
 
@@ -287,9 +287,9 @@
 
 #ifdef DEBUG_PASSWORD
 	DEBUG(100, ("SMBOWFencrypt_ntv2: srv_chal, cli_chal, resp_buf\n"));
-	dump_data(100, srv_chal->data, srv_chal->length);
-	dump_data(100, cli_chal->data, cli_chal->length);
-	dump_data(100, resp_buf, 16);
+	dump_data(100, (const char *)srv_chal->data, srv_chal->length);
+	dump_data(100, (const char *)cli_chal->data, cli_chal->length);
+	dump_data(100, (const char *)resp_buf, 16);
 #endif
 }
 
@@ -306,7 +306,7 @@
 
 #ifdef DEBUG_PASSWORD
 	DEBUG(100, ("SMBsesskeygen_ntv2:\n"));
-	dump_data(100, sess_key, 16);
+	dump_data(100, (const char *)sess_key, 16);
 #endif
 }
 
@@ -320,7 +320,7 @@
 
 #ifdef DEBUG_PASSWORD
 	DEBUG(100, ("SMBsesskeygen_ntv1:\n"));
-	dump_data(100, sess_key, 16);
+	dump_data(100, (const char *)sess_key, 16);
 #endif
 }
 
@@ -340,14 +340,14 @@
 
 #ifdef DEBUG_PASSWORD
 	DEBUG(100, ("SMBsesskeygen_lmv1_jerry:\n"));
-	dump_data(100, sess_key, 16);
+	dump_data(100, (const char *)sess_key, 16);
 #endif
 }
 
 DATA_BLOB NTLMv2_generate_names_blob(const char *hostname, 
 				     const char *domain)
 {
-	DATA_BLOB names_blob = data_blob_null;
+	DATA_BLOB names_blob = data_blob(NULL, 0);
 	
 	msrpc_gen(&names_blob, "aaa", 
 		  NTLMSSP_NAME_TYPE_DOMAIN, domain,
@@ -359,7 +359,7 @@
 static DATA_BLOB NTLMv2_generate_client_data(const DATA_BLOB *names_blob) 
 {
 	uchar client_chal[8];
-	DATA_BLOB response = data_blob_null;
+	DATA_BLOB response = data_blob(NULL, 0);
 	char long_date[8];
 
 	generate_random_buffer(client_chal, sizeof(client_chal));
@@ -432,7 +432,7 @@
 	return final_response;
 }
 
-bool SMBNTLMv2encrypt_hash(const char *user, const char *domain, const uchar nt_hash[16], 
+BOOL SMBNTLMv2encrypt_hash(const char *user, const char *domain, const uchar nt_hash[16], 
 		      const DATA_BLOB *server_chal, 
 		      const DATA_BLOB *names_blob,
 		      DATA_BLOB *lm_response, DATA_BLOB *nt_response, 
@@ -471,7 +471,7 @@
 
 /* Plaintext version of the above. */
 
-bool SMBNTLMv2encrypt(const char *user, const char *domain, const char *password, 
+BOOL SMBNTLMv2encrypt(const char *user, const char *domain, const char *password, 
 		      const DATA_BLOB *server_chal, 
 		      const DATA_BLOB *names_blob,
 		      DATA_BLOB *lm_response, DATA_BLOB *nt_response, 
@@ -491,7 +491,7 @@
  encode a password buffer with a unicode password.  The buffer
  is filled with random data to make it harder to attack.
 ************************************************************/
-bool encode_pw_buffer(uint8 buffer[516], const char *password, int string_flags)
+BOOL encode_pw_buffer(uint8 buffer[516], const char *password, int string_flags)
 {
 	uchar new_pw[512];
 	size_t new_pw_len;
@@ -523,17 +523,12 @@
  returned password including termination.
 ************************************************************/
 
-bool decode_pw_buffer(TALLOC_CTX *ctx,
-			uint8 in_buffer[516],
-			char **pp_new_pwrd,
-			uint32 *new_pw_len,
-			int string_flags)
+BOOL decode_pw_buffer(uint8 in_buffer[516], char *new_pwrd,
+		      int new_pwrd_size, uint32 *new_pw_len,
+		      int string_flags)
 {
 	int byte_len=0;
 
-	*pp_new_pwrd = NULL;
-	*new_pw_len = 0;
-
 	/* the incoming buffer can be any alignment. */
 	string_flags |= STR_NOALIGN;
 
@@ -549,38 +544,28 @@
 	byte_len = IVAL(in_buffer, 512);
 
 #ifdef DEBUG_PASSWORD
-	dump_data(100, in_buffer, 516);
+	dump_data(100, (const char *)in_buffer, 516);
 #endif
 
 	/* Password cannot be longer than the size of the password buffer */
 	if ( (byte_len < 0) || (byte_len > 512)) {
 		DEBUG(0, ("decode_pw_buffer: incorrect password length (%d).\n", byte_len));
 		DEBUG(0, ("decode_pw_buffer: check that 'encrypt passwords = yes'\n"));
-		return false;
+		return False;
 	}
 
-	/* decode into the return buffer. */
-	*new_pw_len = pull_string_talloc(ctx,
-				NULL,
-				0,
-				pp_new_pwrd,
-				&in_buffer[512 - byte_len],
-				byte_len,
-				string_flags);
+	/* decode into the return buffer.  Buffer length supplied */
+ 	*new_pw_len = pull_string(NULL, new_pwrd, &in_buffer[512 - byte_len], new_pwrd_size, 
+				  byte_len, string_flags);
 
-	if (!*pp_new_pwrd || *new_pw_len == 0) {
-		DEBUG(0, ("decode_pw_buffer: pull_string_talloc failed\n"));
-		return false;
-	}
-
 #ifdef DEBUG_PASSWORD
 	DEBUG(100,("decode_pw_buffer: new_pwrd: "));
-	dump_data(100, (uint8 *)*pp_new_pwrd, *new_pw_len);
+	dump_data(100, (const char *)new_pwrd, *new_pw_len);
 	DEBUG(100,("multibyte len:%d\n", *new_pw_len));
 	DEBUG(100,("original char len:%d\n", byte_len/2));
 #endif
-
-	return true;
+	
+	return True;
 }
 
 /***********************************************************
@@ -695,94 +680,3 @@
 
 }
 
-/* encode a wkssvc_PasswordBuffer:
- *
- * similar to samr_CryptPasswordEx. Different: 8byte confounder (instead of
- * 16byte), confounder in front of the 516 byte buffer (instead of after that
- * buffer), calling MD5Update() first with session_key and then with confounder
- * (vice versa in samr) - Guenther */
-
-void encode_wkssvc_join_password_buffer(TALLOC_CTX *mem_ctx,
-					const char *pwd,
-					DATA_BLOB *session_key,
-					struct wkssvc_PasswordBuffer **pwd_buf)
-{
-	uint8_t buffer[516];
-	struct MD5Context ctx;
-	struct wkssvc_PasswordBuffer *my_pwd_buf = NULL;
-	DATA_BLOB confounded_session_key;
-	int confounder_len = 8;
-	uint8_t confounder[8];
-
-	my_pwd_buf = talloc_zero(mem_ctx, struct wkssvc_PasswordBuffer);
-	if (!my_pwd_buf) {
-		return;
-	}
-
-	confounded_session_key = data_blob_talloc(mem_ctx, NULL, 16);
-
-	encode_pw_buffer(buffer, pwd, STR_UNICODE);
-
-	generate_random_buffer((uint8_t *)confounder, confounder_len);
-
-	MD5Init(&ctx);
-	MD5Update(&ctx, session_key->data, session_key->length);
-	MD5Update(&ctx, confounder, confounder_len);
-	MD5Final(confounded_session_key.data, &ctx);
-
-	SamOEMhashBlob(buffer, 516, &confounded_session_key);
-
-	memcpy(&my_pwd_buf->data[0], confounder, confounder_len);
-	memcpy(&my_pwd_buf->data[8], buffer, 516);
-
-	data_blob_free(&confounded_session_key);
-
-	*pwd_buf = my_pwd_buf;
-}
-
-WERROR decode_wkssvc_join_password_buffer(TALLOC_CTX *mem_ctx,
-					  struct wkssvc_PasswordBuffer *pwd_buf,
-					  DATA_BLOB *session_key,
-					  char **pwd)
-{
-	uint8_t buffer[516];
-	struct MD5Context ctx;
-	uint32_t pwd_len;
-
-	DATA_BLOB confounded_session_key;
-
-	int confounder_len = 8;
-	uint8_t confounder[8];
-
-	*pwd = NULL;
-
-	if (!pwd_buf) {
-		return WERR_BAD_PASSWORD;
-	}
-
-	if (session_key->length != 16) {
-		DEBUG(10,("invalid session key\n"));
-		return WERR_BAD_PASSWORD;
-	}
-
-	confounded_session_key = data_blob_talloc(mem_ctx, NULL, 16);
-
-	memcpy(&confounder, &pwd_buf->data[0], confounder_len);
-	memcpy(&buffer, &pwd_buf->data[8], 516);
-
-	MD5Init(&ctx);
-	MD5Update(&ctx, session_key->data, session_key->length);
-	MD5Update(&ctx, confounder, confounder_len);
-	MD5Final(confounded_session_key.data, &ctx);
-
-	SamOEMhashBlob(buffer, 516, &confounded_session_key);
-
-	if (!decode_pw_buffer(mem_ctx, buffer, pwd, &pwd_len, STR_UNICODE)) {
-		data_blob_free(&confounded_session_key);
-		return WERR_BAD_PASSWORD;
-	}
-
-	data_blob_free(&confounded_session_key);
-
-	return WERR_OK;
-}

Modified: branches/samba/upstream/source/libsmb/smberr.c
===================================================================
--- branches/samba/upstream/source/libsmb/smberr.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/smberr.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -160,7 +161,7 @@
 ****************************************************************************/
 const char *smb_dos_err_name(uint8 e_class, uint16 num)
 {
-	char *result;
+	static pstring ret;
 	int i,j;
 	
 	for (i=0;err_classes[i].e_class;i++)
@@ -172,15 +173,12 @@
 						return err[j].name;
 					}
 			}
-			result = talloc_asprintf(talloc_tos(), "%d", num);
-			SMB_ASSERT(result != NULL);
-			return result;
+			slprintf(ret, sizeof(ret) - 1, "%d",num);
+			return ret;
 		}
 	
-	result = talloc_asprintf(talloc_tos(), "Error: Unknown error class "
-				 "(%d,%d)", e_class,num);
-	SMB_ASSERT(result != NULL);
-	return result;
+	slprintf(ret, sizeof(ret) - 1, "Error: Unknown error class (%d,%d)",e_class,num);
+	return(ret);
 }
 
 /* Return a string for a DOS error */
@@ -199,19 +197,17 @@
 ****************************************************************************/
 const char *smb_dos_err_class(uint8 e_class)
 {
-	char *result;
+	static pstring ret;
 	int i;
-
+	
 	for (i=0;err_classes[i].e_class;i++) {
 		if (err_classes[i].code == e_class) {
 			return err_classes[i].e_class;
 		}
 	}
-
-	result = talloc_asprintf(talloc_tos(), "Error: Unknown class (%d)",
-				 e_class);
-	SMB_ASSERT(result != NULL);
-	return result;
+		
+	slprintf(ret, sizeof(ret) - 1, "Error: Unknown class (%d)",e_class);
+	return(ret);
 }
 
 /****************************************************************************
@@ -219,11 +215,11 @@
 ****************************************************************************/
 char *smb_dos_errstr(char *inbuf)
 {
-	char *result;
+	static pstring ret;
 	int e_class = CVAL(inbuf,smb_rcls);
 	int num = SVAL(inbuf,smb_err);
 	int i,j;
-
+	
 	for (i=0;err_classes[i].e_class;i++)
 		if (err_classes[i].code == e_class) {
 			if (err_classes[i].err_msgs) {
@@ -231,29 +227,22 @@
 				for (j=0;err[j].name;j++)
 					if (num == err[j].code) {
 						if (DEBUGLEVEL > 0)
-							result = talloc_asprintf(
-								talloc_tos(), "%s - %s (%s)",
-								err_classes[i].e_class,
-								err[j].name,err[j].message);
+							slprintf(ret, sizeof(ret) - 1, "%s - %s (%s)",
+								 err_classes[i].e_class,
+								 err[j].name,err[j].message);
 						else
-							result = talloc_asprintf(
-								talloc_tos(), "%s - %s",
-								err_classes[i].e_class,
-								err[j].name);
-						goto done;
+							slprintf(ret, sizeof(ret) - 1, "%s - %s",
+								 err_classes[i].e_class,err[j].name);
+						return ret;
 					}
 			}
-
-			result = talloc_asprintf(talloc_tos(), "%s - %d",
-						 err_classes[i].e_class, num);
-			goto done;
+			
+			slprintf(ret, sizeof(ret) - 1, "%s - %d",err_classes[i].e_class,num);
+			return ret;
 		}
-
-	result = talloc_asprintf(talloc_tos(), "Error: Unknown error (%d,%d)",
-				 e_class, num);
- done:
-	SMB_ASSERT(result != NULL);
-	return result;
+	
+	slprintf(ret, sizeof(ret) - 1, "Error: Unknown error (%d,%d)",e_class,num);
+	return(ret);
 }
 
 /*****************************************************************************

Modified: branches/samba/upstream/source/libsmb/spnego.c
===================================================================
--- branches/samba/upstream/source/libsmb/spnego.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/spnego.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
 
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -25,7 +26,7 @@
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_AUTH
 
-static bool read_negTokenInit(ASN1_DATA *asn1, negTokenInit_t *token)
+static BOOL read_negTokenInit(ASN1_DATA *asn1, negTokenInit_t *token)
 {
 	ZERO_STRUCTP(token);
 
@@ -106,7 +107,7 @@
 	return !asn1->has_error;
 }
 
-static bool write_negTokenInit(ASN1_DATA *asn1, negTokenInit_t *token)
+static BOOL write_negTokenInit(ASN1_DATA *asn1, negTokenInit_t *token)
 {
 	asn1_push_tag(asn1, ASN1_CONTEXT(0));
 	asn1_push_tag(asn1, ASN1_SEQUENCE(0));
@@ -169,7 +170,7 @@
 	return !asn1->has_error;
 }
 
-static bool read_negTokenTarg(ASN1_DATA *asn1, negTokenTarg_t *token)
+static BOOL read_negTokenTarg(ASN1_DATA *asn1, negTokenTarg_t *token)
 {
 	ZERO_STRUCTP(token);
 
@@ -212,7 +213,7 @@
 	return !asn1->has_error;
 }
 
-static bool write_negTokenTarg(ASN1_DATA *asn1, negTokenTarg_t *token)
+static BOOL write_negTokenTarg(ASN1_DATA *asn1, negTokenTarg_t *token)
 {
 	asn1_push_tag(asn1, ASN1_CONTEXT(1));
 	asn1_push_tag(asn1, ASN1_SEQUENCE(0));
@@ -311,9 +312,9 @@
 	return ret;
 }
 
-bool free_spnego_data(SPNEGO_DATA *spnego)
+BOOL free_spnego_data(SPNEGO_DATA *spnego)
 {
-	bool ret = True;
+	BOOL ret = True;
 
 	if (!spnego) goto out;
 

Modified: branches/samba/upstream/source/libsmb/trustdom_cache.c
===================================================================
--- branches/samba/upstream/source/libsmb/trustdom_cache.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/trustdom_cache.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -47,7 +48,7 @@
  *         false if cache init failed
  **/
  
-bool trustdom_cache_enable(void)
+BOOL trustdom_cache_enable(void)
 {
 	/* Init trustdom cache by calling gencache initialisation */
 	if (!gencache_init()) {
@@ -67,7 +68,7 @@
  *         false if it failed
  **/
  
-bool trustdom_cache_shutdown(void)
+BOOL trustdom_cache_shutdown(void)
 {
 	/* Close trustdom cache by calling gencache shutdown */
 	if (!gencache_shutdown()) {
@@ -90,7 +91,7 @@
 static char* trustdom_cache_key(const char* name)
 {
 	char* keystr = NULL;
-	asprintf_strupper_m(&keystr, TDOMKEY_FMT, name);
+	asprintf(&keystr, TDOMKEY_FMT, strupper_static(name));
 	
 	return keystr;
 }
@@ -98,7 +99,7 @@
 
 /**
  * Store trusted domain in gencache as the domain name (key)
- * and trusted domain's SID (value)
+ * and ip address of domain controller (value)
  *
  * @param name trusted domain name
  * @param alt_name alternative trusted domain name (used in ADS domains)
@@ -108,12 +109,12 @@
  *         false if store attempt failed
  **/
  
-bool trustdom_cache_store(char* name, char* alt_name, const DOM_SID *sid,
+BOOL trustdom_cache_store(char* name, char* alt_name, const DOM_SID *sid,
                           time_t timeout)
 {
 	char *key, *alt_key;
 	fstring sid_string;
-	bool ret;
+	BOOL ret;
 
 	/*
 	 * we use gecache call to avoid annoying debug messages
@@ -123,13 +124,13 @@
 		return False;
 
 	DEBUG(5, ("trustdom_store: storing SID %s of domain %s\n",
-	          sid_string_dbg(sid), name));
+	          sid_string_static(sid), name));
 
 	key = trustdom_cache_key(name);
 	alt_key = alt_name ? trustdom_cache_key(alt_name) : NULL;
 
 	/* Generate string representation domain SID */
-	sid_to_fstring(sid_string, sid);
+	sid_to_string(sid_string, sid);
 
 	/*
 	 * try to put the names in the cache
@@ -151,7 +152,7 @@
 
 
 /**
- * Fetch trusted domain's SID from the gencache.
+ * Fetch trusted domain's dc from the gencache.
  * This routine can also be used to check whether given
  * domain is currently trusted one.
  *
@@ -161,7 +162,7 @@
  *         false if has expired/doesn't exist
  **/
  
-bool trustdom_cache_fetch(const char* name, DOM_SID* sid)
+BOOL trustdom_cache_fetch(const char* name, DOM_SID* sid)
 {
 	char *key = NULL, *value = NULL;
 	time_t timeout;
@@ -188,7 +189,7 @@
 		DEBUG(5, ("trusted domain %s found (%s)\n", name, value));
 	}
 
-	/* convert sid string representation into DOM_SID structure */
+	/* convert ip string representation into in_addr structure */
 	if(! string_to_sid(sid, value)) {
 		sid = NULL;
 		SAFE_FREE(value);
@@ -230,7 +231,7 @@
  store the timestamp from the last update 
 *******************************************************************/
 
-bool trustdom_cache_store_timestamp( uint32 t, time_t timeout )
+BOOL trustdom_cache_store_timestamp( uint32 t, time_t timeout )
 {
 	fstring value;
 

Modified: branches/samba/upstream/source/libsmb/trusts_util.c
===================================================================
--- branches/samba/upstream/source/libsmb/trusts_util.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/trusts_util.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -58,33 +59,8 @@
 		}
 	}
 
-	{
-		struct netr_Authenticator clnt_creds, srv_cred;
-		struct samr_Password new_password;
+	result = rpccli_net_srv_pwset(cli, mem_ctx, global_myname(), new_trust_passwd_hash);
 
-		netlogon_creds_client_step(cli->dc, &clnt_creds);
-
-		cred_hash3(new_password.hash,
-			   new_trust_passwd_hash,
-			   cli->dc->sess_key, 1);
-
-		result = rpccli_netr_ServerPasswordSet(cli, mem_ctx,
-						       cli->dc->remote_machine,
-						       cli->dc->mach_acct,
-						       sec_channel_type,
-						       global_myname(),
-						       &clnt_creds,
-						       &srv_cred,
-						       &new_password);
-
-		/* Always check returned credentials. */
-		if (!netlogon_creds_client_check(cli->dc, &srv_cred.cred)) {
-			DEBUG(0,("rpccli_netr_ServerPasswordSet: "
-				"credentials chain check failed\n"));
-			return NT_STATUS_ACCESS_DENIED;
-		}
-	}
-
 	if (!NT_STATUS_IS_OK(result)) {
 		DEBUG(0,("just_change_the_password: unable to change password (%s)!\n",
 			 nt_errstr(result)));
@@ -123,7 +99,7 @@
 	
 	if (NT_STATUS_IS_OK(nt_status)) {
 		DEBUG(3,("%s : trust_pw_change_and_store_it: Changed password.\n", 
-			 current_timestring(debug_ctx(), False)));
+			 current_timestring(False)));
 		/*
 		 * Return the result of trying to write the new password
 		 * back into the trust account file.
@@ -165,20 +141,18 @@
  Enumerate the list of trusted domains from a DC
 *********************************************************************/
 
-bool enumerate_domain_trusts( TALLOC_CTX *mem_ctx, const char *domain,
+BOOL enumerate_domain_trusts( TALLOC_CTX *mem_ctx, const char *domain,
                                      char ***domain_names, uint32 *num_domains,
 				     DOM_SID **sids )
 {
 	POLICY_HND 	pol;
 	NTSTATUS 	result = NT_STATUS_UNSUCCESSFUL;
 	fstring 	dc_name;
-	struct sockaddr_storage	dc_ss;
+	struct in_addr 	dc_ip;
 	uint32 		enum_ctx = 0;
 	struct cli_state *cli = NULL;
 	struct rpc_pipe_client *lsa_pipe;
-	bool 		retry;
-	struct lsa_DomainList dom_list;
-	int i;
+	BOOL 		retry;
 
 	*domain_names = NULL;
 	*num_domains = 0;
@@ -186,7 +160,7 @@
 
 	/* lookup a DC first */
 
-	if ( !get_dc_name(domain, NULL, dc_name, &dc_ss) ) {
+	if ( !get_dc_name(domain, NULL, dc_name, &dc_ip) ) {
 		DEBUG(3,("enumerate_domain_trusts: can't locate a DC for domain %s\n",
 			domain));
 		return False;
@@ -194,7 +168,7 @@
 
 	/* setup the anonymous connection */
 
-	result = cli_full_connection( &cli, global_myname(), dc_name, &dc_ss, 0, "IPC$", "IPC",
+	result = cli_full_connection( &cli, global_myname(), dc_name, &dc_ip, 0, "IPC$", "IPC",
 		"", "", "", 0, Undefined, &retry);
 	if ( !NT_STATUS_IS_OK(result) )
 		goto done;
@@ -209,39 +183,17 @@
 	/* get a handle */
 
 	result = rpccli_lsa_open_policy(lsa_pipe, mem_ctx, True,
-		LSA_POLICY_VIEW_LOCAL_INFORMATION, &pol);
+		POLICY_VIEW_LOCAL_INFORMATION, &pol);
 	if ( !NT_STATUS_IS_OK(result) )
 		goto done;
 
 	/* Lookup list of trusted domains */
 
-	result = rpccli_lsa_EnumTrustDom(lsa_pipe, mem_ctx,
-					 &pol,
-					 &enum_ctx,
-					 &dom_list,
-					 (uint32_t)-1);
+	result = rpccli_lsa_enum_trust_dom(lsa_pipe, mem_ctx, &pol, &enum_ctx,
+		num_domains, domain_names, sids);
 	if ( !NT_STATUS_IS_OK(result) )
 		goto done;
 
-	*num_domains = dom_list.count;
-
-	*domain_names = TALLOC_ZERO_ARRAY(mem_ctx, char *, *num_domains);
-	if (!*domain_names) {
-		result = NT_STATUS_NO_MEMORY;
-		goto done;
-	}
-
-	*sids = TALLOC_ZERO_ARRAY(mem_ctx, DOM_SID, *num_domains);
-	if (!*sids) {
-		result = NT_STATUS_NO_MEMORY;
-		goto done;
-	}
-
-	for (i=0; i< *num_domains; i++) {
-		(*domain_names)[i] = CONST_DISCARD(char *, dom_list.domains[i].name.string);
-		(*sids)[i] = *dom_list.domains[i].sid;
-	}
-
 done:
 	/* cleanup */
 	if (cli) {

Modified: branches/samba/upstream/source/libsmb/unexpected.c
===================================================================
--- branches/samba/upstream/source/libsmb/unexpected.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/libsmb/unexpected.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,40 +1,42 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    handle unexpected packets
    Copyright (C) Andrew Tridgell 2000
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   
 */
 
 #include "includes.h"
 
 static TDB_CONTEXT *tdbd = NULL;
 
-/* the key type used in the unexpected packet database */
+/* the key type used in the unexpeceted packet database */
 struct unexpected_key {
 	enum packet_type packet_type;
 	time_t timestamp;
 	int count;
 };
 
+
+
 /****************************************************************************
- All unexpected packets are passed in here, to be stored in a unexpected
+ all unexpected packets are passed in here, to be stored in a unexpected
  packet database. This allows nmblookup and other tools to receive packets
- erroneously sent to the wrong port by broken MS systems.
-**************************************************************************/
-
+ erroneoously sent to the wrong port by broken MS systems
+  **************************************************************************/
 void unexpected_packet(struct packet_struct *p)
 {
 	static int count;
@@ -42,10 +44,9 @@
 	struct unexpected_key key;
 	char buf[1024];
 	int len=0;
-	uint32_t enc_ip;
 
 	if (!tdbd) {
-		tdbd = tdb_open_log(lock_path("unexpected.tdb"), 0,
+		tdbd = tdb_open_log(lock_path("unexpected.tdb"), 0, 
 			       TDB_CLEAR_IF_FIRST|TDB_DEFAULT,
 			       O_RDWR | O_CREAT, 0644);
 		if (!tdbd) {
@@ -55,23 +56,18 @@
 	}
 
 	memset(buf,'\0',sizeof(buf));
+	
+	len = build_packet(buf, p);
 
-	/* Encode the ip addr and port. */
-	enc_ip = ntohl(p->ip.s_addr);
-	SIVAL(buf,0,enc_ip);
-	SSVAL(buf,4,p->port);
-
-	len = build_packet(&buf[6], sizeof(buf)-6, p) + 6;
-
 	ZERO_STRUCT(key);	/* needed for potential alignment */
 
 	key.packet_type = p->packet_type;
 	key.timestamp = p->timestamp;
 	key.count = count++;
 
-	kbuf.dptr = (uint8_t *)&key;
+	kbuf.dptr = (char *)&key;
 	kbuf.dsize = sizeof(key);
-	dbuf.dptr = (uint8_t *)buf;
+	dbuf.dptr = buf;
 	dbuf.dsize = len;
 
 	tdb_store(tdbd, kbuf, dbuf, TDB_REPLACE);
@@ -81,9 +77,8 @@
 static time_t lastt;
 
 /****************************************************************************
- Delete the record if it is too old.
-**************************************************************************/
-
+delete the record if it is too old
+  **************************************************************************/
 static int traverse_fn(TDB_CONTEXT *ttdb, TDB_DATA kbuf, TDB_DATA dbuf, void *state)
 {
 	struct unexpected_key key;
@@ -103,9 +98,8 @@
 
 
 /****************************************************************************
- Delete all old unexpected packets.
-**************************************************************************/
-
+delete all old unexpected packets
+  **************************************************************************/
 void clear_unexpected(time_t t)
 {
 	if (!tdbd) return;
@@ -118,26 +112,18 @@
 	tdb_traverse(tdbd, traverse_fn, NULL);
 }
 
-struct receive_unexpected_state {
-	struct packet_struct *matched_packet;
-	int match_id;
-	enum packet_type match_type;
-	const char *match_name;
-};
 
-/****************************************************************************
- tdb traversal fn to find a matching 137 packet.
-**************************************************************************/
+static struct packet_struct *matched_packet;
+static int match_id;
+static enum packet_type match_type;
+static const char *match_name;
 
-static int traverse_match(TDB_CONTEXT *ttdb, TDB_DATA kbuf, TDB_DATA dbuf,
-			  void *private_data)
+/****************************************************************************
+tdb traversal fn to find a matching 137 packet
+  **************************************************************************/
+static int traverse_match(TDB_CONTEXT *ttdb, TDB_DATA kbuf, TDB_DATA dbuf, void *state)
 {
-	struct receive_unexpected_state *state =
-		(struct receive_unexpected_state *)private_data;
 	struct unexpected_key key;
-	struct in_addr ip;
-	uint32_t enc_ip;
-	int port;
 	struct packet_struct *p;
 
 	if (kbuf.dsize != sizeof(key)) {
@@ -146,28 +132,15 @@
 
 	memcpy(&key, kbuf.dptr, sizeof(key));
 
-	if (key.packet_type != state->match_type) return 0;
+	if (key.packet_type != match_type) return 0;
 
-	if (dbuf.dsize < 6) {
-		return 0;
-	}
+	p = parse_packet(dbuf.dptr, dbuf.dsize, match_type);
 
-	/* Decode the ip addr and port. */
-	enc_ip = IVAL(dbuf.dptr,0);
-	ip.s_addr = htonl(enc_ip);
-	port = SVAL(dbuf.dptr,4);
-
-	p = parse_packet((char *)&dbuf.dptr[6],
-			dbuf.dsize-6,
-			state->match_type,
-			ip,
-			port);
-
-	if ((state->match_type == NMB_PACKET &&
-	     p->packet.nmb.header.name_trn_id == state->match_id) ||
-	    (state->match_type == DGRAM_PACKET &&
-	     match_mailslot_name(p, state->match_name))) {
-		state->matched_packet = p;
+	if ((match_type == NMB_PACKET && 
+	     p->packet.nmb.header.name_trn_id == match_id) ||
+	    (match_type == DGRAM_PACKET && 
+	     match_mailslot_name(p, match_name))) {
+		matched_packet = p;
 		return -1;
 	}
 
@@ -176,27 +149,26 @@
 	return 0;
 }
 
-/****************************************************************************
- Check for a particular packet in the unexpected packet queue.
-**************************************************************************/
 
-struct packet_struct *receive_unexpected(enum packet_type packet_type, int id,
+/****************************************************************************
+check for a particular packet in the unexpected packet queue
+  **************************************************************************/
+struct packet_struct *receive_unexpected(enum packet_type packet_type, int id, 
 					 const char *mailslot_name)
 {
 	TDB_CONTEXT *tdb2;
-	struct receive_unexpected_state state;
 
 	tdb2 = tdb_open_log(lock_path("unexpected.tdb"), 0, 0, O_RDONLY, 0);
 	if (!tdb2) return NULL;
 
-	state.matched_packet = NULL;
-	state.match_id = id;
-	state.match_type = packet_type;
-	state.match_name = mailslot_name;
+	matched_packet = NULL;
+	match_id = id;
+	match_type = packet_type;
+	match_name = mailslot_name;
 
-	tdb_traverse(tdb2, traverse_match, &state);
+	tdb_traverse(tdb2, traverse_match, NULL);
 
 	tdb_close(tdb2);
 
-	return state.matched_packet;
+	return matched_packet;
 }

Modified: branches/samba/upstream/source/locking/brlock.c
===================================================================
--- branches/samba/upstream/source/locking/brlock.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/locking/brlock.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /* This module implements a tdb based byte range locking service,
@@ -33,7 +34,7 @@
 
 /* The open brlock.tdb database. */
 
-static struct db_context *brlock_db;
+static TDB_CONTEXT *tdb;
 
 /****************************************************************************
  Debug info at level 10 for lock struct.
@@ -59,7 +60,7 @@
  See if two locking contexts are equal.
 ****************************************************************************/
 
-bool brl_same_context(const struct lock_context *ctx1, 
+BOOL brl_same_context(const struct lock_context *ctx1, 
 			     const struct lock_context *ctx2)
 {
 	return (procid_equal(&ctx1->pid, &ctx2->pid) &&
@@ -71,7 +72,7 @@
  See if lck1 and lck2 overlap.
 ****************************************************************************/
 
-static bool brl_overlap(const struct lock_struct *lck1,
+static BOOL brl_overlap(const struct lock_struct *lck1,
                         const struct lock_struct *lck2)
 {
 	/* this extra check is not redundent - it copes with locks
@@ -93,7 +94,7 @@
  See if lock2 can be added when lock1 is in place.
 ****************************************************************************/
 
-static bool brl_conflict(const struct lock_struct *lck1, 
+static BOOL brl_conflict(const struct lock_struct *lck1, 
 			 const struct lock_struct *lck2)
 {
 	/* Ignore PENDING locks. */
@@ -119,7 +120,7 @@
  know already match.
 ****************************************************************************/
 
-static bool brl_conflict_posix(const struct lock_struct *lck1, 
+static BOOL brl_conflict_posix(const struct lock_struct *lck1, 
 			 	const struct lock_struct *lck2)
 {
 #if defined(DEVELOPER)
@@ -147,7 +148,7 @@
 } 
 
 #if ZERO_ZERO
-static bool brl_conflict1(const struct lock_struct *lck1, 
+static BOOL brl_conflict1(const struct lock_struct *lck1, 
 			 const struct lock_struct *lck2)
 {
 	if (IS_PENDING_LOCK(lck1->lock_type) || IS_PENDING_LOCK(lck2->lock_type))
@@ -181,7 +182,7 @@
  This is never used in the POSIX lock case.
 ****************************************************************************/
 
-static bool brl_conflict_other(const struct lock_struct *lck1, const struct lock_struct *lck2)
+static BOOL brl_conflict_other(const struct lock_struct *lck1, const struct lock_struct *lck2)
 {
 	if (IS_PENDING_LOCK(lck1->lock_type) || IS_PENDING_LOCK(lck2->lock_type))
 		return False;
@@ -213,7 +214,7 @@
  Check if an unlock overlaps a pending lock.
 ****************************************************************************/
 
-static bool brl_pending_overlap(const struct lock_struct *lock, const struct lock_struct *pend_lock)
+static BOOL brl_pending_overlap(const struct lock_struct *lock, const struct lock_struct *pend_lock)
 {
 	if ((lock->start <= pend_lock->start) && (lock->start + lock->size > pend_lock->start))
 		return True;
@@ -228,7 +229,7 @@
  app depends on this ?
 ****************************************************************************/
 
-static NTSTATUS brl_lock_failed(files_struct *fsp, const struct lock_struct *lock, bool blocking_lock)
+static NTSTATUS brl_lock_failed(files_struct *fsp, const struct lock_struct *lock, BOOL blocking_lock)
 {
 	if (lock->start >= 0xEF000000 && (lock->start >> 63) == 0) {
 		/* amazing the little things you learn with a test
@@ -258,29 +259,35 @@
  Open up the brlock.tdb database.
 ****************************************************************************/
 
-void brl_init(bool read_only)
+void brl_init(int read_only)
 {
-	if (brlock_db) {
+	if (tdb) {
 		return;
 	}
-	brlock_db = db_open(NULL, lock_path("brlock.tdb"),
-			    lp_open_files_db_hash_size(),
-			    TDB_DEFAULT|TDB_VOLATILE|TDB_CLEAR_IF_FIRST,
-			    read_only?O_RDONLY:(O_RDWR|O_CREAT), 0644 );
-	if (!brlock_db) {
+	tdb = tdb_open_log(lock_path("brlock.tdb"),
+			lp_open_files_db_hash_size(),
+			TDB_DEFAULT|(read_only?0x0:TDB_CLEAR_IF_FIRST),
+			read_only?O_RDONLY:(O_RDWR|O_CREAT), 0644 );
+	if (!tdb) {
 		DEBUG(0,("Failed to open byte range locking database %s\n",
 			lock_path("brlock.tdb")));
 		return;
 	}
+
+	/* Activate the per-hashchain freelist */
+	tdb_set_max_dead(tdb, 5);
 }
 
 /****************************************************************************
  Close down the brlock.tdb database.
 ****************************************************************************/
 
-void brl_shutdown(void)
+void brl_shutdown(int read_only)
 {
-	TALLOC_FREE(brlock_db);
+	if (!tdb) {
+		return;
+	}
+	tdb_close(tdb);
 }
 
 #if ZERO_ZERO
@@ -306,11 +313,11 @@
 ****************************************************************************/
 
 static NTSTATUS brl_lock_windows(struct byte_range_lock *br_lck,
-			struct lock_struct *plock, bool blocking_lock)
+			struct lock_struct *plock, BOOL blocking_lock)
 {
 	unsigned int i;
 	files_struct *fsp = br_lck->fsp;
-	struct lock_struct *locks = br_lck->lock_data;
+	struct lock_struct *locks = (struct lock_struct *)br_lck->lock_data;
 
 	for (i=0; i < br_lck->num_locks; i++) {
 		/* Do any Windows or POSIX locks conflict ? */
@@ -361,7 +368,7 @@
 
 	memcpy(&locks[br_lck->num_locks], plock, sizeof(struct lock_struct));
 	br_lck->num_locks += 1;
-	br_lck->lock_data = locks;
+	br_lck->lock_data = (void *)locks;
 	br_lck->modified = True;
 
 	return NT_STATUS_OK;
@@ -374,9 +381,9 @@
 static unsigned int brlock_posix_split_merge(struct lock_struct *lck_arr,		/* Output array. */
 						const struct lock_struct *ex,		/* existing lock. */
 						const struct lock_struct *plock,	/* proposed lock. */
-						bool *lock_was_added)
+						BOOL *lock_was_added)
 {
-	bool lock_types_differ = (ex->lock_type != plock->lock_type);
+	BOOL lock_types_differ = (ex->lock_type != plock->lock_type);
 
 	/* We can't merge non-conflicting locks on different context - ignore fnum. */
 
@@ -571,9 +578,9 @@
 	}
 
 	/* Never get here. */
-	smb_panic("brlock_posix_split_merge");
+	smb_panic("brlock_posix_split_merge\n");
 	/* Notreached. */
-
+	abort();
 	/* Keep some compilers happy. */
 	return 0;
 }
@@ -583,15 +590,14 @@
  We must cope with range splits and merges.
 ****************************************************************************/
 
-static NTSTATUS brl_lock_posix(struct messaging_context *msg_ctx,
-			       struct byte_range_lock *br_lck,
-			       struct lock_struct *plock)
+static NTSTATUS brl_lock_posix(struct byte_range_lock *br_lck,
+			struct lock_struct *plock)
 {
 	unsigned int i, count;
-	struct lock_struct *locks = br_lck->lock_data;
+	struct lock_struct *locks = (struct lock_struct *)br_lck->lock_data;
 	struct lock_struct *tp;
-	bool lock_was_added = False;
-	bool signal_pending_read = False;
+	BOOL lock_was_added = False;
+	BOOL signal_pending_read = False;
 
 	/* No zero-zero locks for POSIX. */
 	if (plock->start == 0 && plock->size == 0) {
@@ -694,7 +700,7 @@
 	}
 	br_lck->num_locks = count;
 	SAFE_FREE(br_lck->lock_data);
-	br_lck->lock_data = tp;
+	br_lck->lock_data = (void *)tp;
 	locks = tp;
 	br_lck->modified = True;
 
@@ -716,8 +722,9 @@
 				DEBUG(10,("brl_lock_posix: sending unlock message to pid %s\n",
 					procid_str_static(&pend_lock->context.pid )));
 
-				messaging_send(msg_ctx, pend_lock->context.pid,
-					       MSG_SMB_UNLOCK, &data_blob_null);
+				message_send_pid(pend_lock->context.pid,
+						MSG_SMB_UNLOCK,
+						NULL, 0, True);
 			}
 		}
 	}
@@ -729,15 +736,14 @@
  Lock a range of bytes.
 ****************************************************************************/
 
-NTSTATUS brl_lock(struct messaging_context *msg_ctx,
-		struct byte_range_lock *br_lck,
+NTSTATUS brl_lock(struct byte_range_lock *br_lck,
 		uint32 smbpid,
-		struct server_id pid,
+		struct process_id pid,
 		br_off start,
 		br_off size, 
 		enum brl_type lock_type,
 		enum brl_flavour lock_flav,
-		bool blocking_lock,
+		BOOL blocking_lock,
 		uint32 *psmbpid)
 {
 	NTSTATUS ret;
@@ -749,11 +755,6 @@
 	}
 #endif
 
-#ifdef DEVELOPER
-	/* Quieten valgrind on test. */
-	memset(&lock, '\0', sizeof(lock));
-#endif
-
 	lock.context.smbpid = smbpid;
 	lock.context.pid = pid;
 	lock.context.tid = br_lck->fsp->conn->cnum;
@@ -766,7 +767,7 @@
 	if (lock_flav == WINDOWS_LOCK) {
 		ret = brl_lock_windows(br_lck, &lock, blocking_lock);
 	} else {
-		ret = brl_lock_posix(msg_ctx, br_lck, &lock);
+		ret = brl_lock_posix(br_lck, &lock);
 	}
 
 #if ZERO_ZERO
@@ -785,12 +786,10 @@
  Unlock a range of bytes - Windows semantics.
 ****************************************************************************/
 
-static bool brl_unlock_windows(struct messaging_context *msg_ctx,
-			       struct byte_range_lock *br_lck,
-			       const struct lock_struct *plock)
+static BOOL brl_unlock_windows(struct byte_range_lock *br_lck, const struct lock_struct *plock)
 {
 	unsigned int i, j;
-	struct lock_struct *locks = br_lck->lock_data;
+	struct lock_struct *locks = (struct lock_struct *)br_lck->lock_data;
 	enum brl_type deleted_lock_type = READ_LOCK; /* shut the compiler up.... */
 
 #if ZERO_ZERO
@@ -876,8 +875,9 @@
 			DEBUG(10,("brl_unlock: sending unlock message to pid %s\n",
 				procid_str_static(&pend_lock->context.pid )));
 
-			messaging_send(msg_ctx, pend_lock->context.pid,
-				       MSG_SMB_UNLOCK, &data_blob_null);
+			message_send_pid(pend_lock->context.pid,
+					MSG_SMB_UNLOCK,
+					NULL, 0, True);
 		}
 	}
 
@@ -888,14 +888,12 @@
  Unlock a range of bytes - POSIX semantics.
 ****************************************************************************/
 
-static bool brl_unlock_posix(struct messaging_context *msg_ctx,
-			     struct byte_range_lock *br_lck,
-			     const struct lock_struct *plock)
+static BOOL brl_unlock_posix(struct byte_range_lock *br_lck, const struct lock_struct *plock)
 {
 	unsigned int i, j, count;
 	struct lock_struct *tp;
-	struct lock_struct *locks = br_lck->lock_data;
-	bool overlap_found = False;
+	struct lock_struct *locks = (struct lock_struct *)br_lck->lock_data;
+	BOOL overlap_found = False;
 
 	/* No zero-zero locks for POSIX. */
 	if (plock->start == 0 && plock->size == 0) {
@@ -923,7 +921,7 @@
 	for (i = 0; i < br_lck->num_locks; i++) {
 		struct lock_struct *lock = &locks[i];
 		struct lock_struct tmp_lock[3];
-		bool lock_was_added = False;
+		BOOL lock_was_added = False;
 		unsigned int tmp_count;
 
 		/* Only remove our own locks - ignore fnum. */
@@ -1027,7 +1025,7 @@
 	br_lck->num_locks = count;
 	SAFE_FREE(br_lck->lock_data);
 	locks = tp;
-	br_lck->lock_data = tp;
+	br_lck->lock_data = (void *)tp;
 	br_lck->modified = True;
 
 	/* Send unlock messages to any pending waiters that overlap. */
@@ -1045,8 +1043,9 @@
 			DEBUG(10,("brl_unlock: sending unlock message to pid %s\n",
 				procid_str_static(&pend_lock->context.pid )));
 
-			messaging_send(msg_ctx, pend_lock->context.pid,
-				       MSG_SMB_UNLOCK, &data_blob_null);
+			message_send_pid(pend_lock->context.pid,
+					MSG_SMB_UNLOCK,
+					NULL, 0, True);
 		}
 	}
 
@@ -1057,10 +1056,9 @@
  Unlock a range of bytes.
 ****************************************************************************/
 
-bool brl_unlock(struct messaging_context *msg_ctx,
-		struct byte_range_lock *br_lck,
+BOOL brl_unlock(struct byte_range_lock *br_lck,
 		uint32 smbpid,
-		struct server_id pid,
+		struct process_id pid,
 		br_off start,
 		br_off size,
 		enum brl_flavour lock_flav)
@@ -1077,9 +1075,9 @@
 	lock.lock_flav = lock_flav;
 
 	if (lock_flav == WINDOWS_LOCK) {
-		return brl_unlock_windows(msg_ctx, br_lck, &lock);
+		return brl_unlock_windows(br_lck, &lock);
 	} else {
-		return brl_unlock_posix(msg_ctx, br_lck, &lock);
+		return brl_unlock_posix(br_lck, &lock);
 	}
 }
 
@@ -1088,18 +1086,18 @@
  Returns True if the region required is currently unlocked, False if locked.
 ****************************************************************************/
 
-bool brl_locktest(struct byte_range_lock *br_lck,
+BOOL brl_locktest(struct byte_range_lock *br_lck,
 		uint32 smbpid,
-		struct server_id pid,
+		struct process_id pid,
 		br_off start,
 		br_off size, 
 		enum brl_type lock_type,
 		enum brl_flavour lock_flav)
 {
-	bool ret = True;
+	BOOL ret = True;
 	unsigned int i;
 	struct lock_struct lock;
-	const struct lock_struct *locks = br_lck->lock_data;
+	const struct lock_struct *locks = (struct lock_struct *)br_lck->lock_data;
 	files_struct *fsp = br_lck->fsp;
 
 	lock.context.smbpid = smbpid;
@@ -1148,7 +1146,7 @@
 
 NTSTATUS brl_lockquery(struct byte_range_lock *br_lck,
 		uint32 *psmbpid,
-		struct server_id pid,
+		struct process_id pid,
 		br_off *pstart,
 		br_off *psize, 
 		enum brl_type *plock_type,
@@ -1156,7 +1154,7 @@
 {
 	unsigned int i;
 	struct lock_struct lock;
-	const struct lock_struct *locks = br_lck->lock_data;
+	const struct lock_struct *locks = (struct lock_struct *)br_lck->lock_data;
 	files_struct *fsp = br_lck->fsp;
 
 	lock.context.smbpid = *psmbpid;
@@ -1171,7 +1169,7 @@
 	/* Make sure existing locks don't conflict */
 	for (i=0; i < br_lck->num_locks; i++) {
 		const struct lock_struct *exlock = &locks[i];
-		bool conflict = False;
+		BOOL conflict = False;
 
 		if (exlock->lock_flav == WINDOWS_LOCK) {
 			conflict = brl_conflict(exlock, &lock);
@@ -1194,7 +1192,7 @@
 	 */
 
 	if(lp_posix_locking(fsp->conn->params)) {
-		bool ret = is_posix_locked(fsp, pstart, psize, plock_type, POSIX_LOCK);
+		BOOL ret = is_posix_locked(fsp, pstart, psize, plock_type, POSIX_LOCK);
 
 		DEBUG(10,("brl_lockquery: posix start=%.0f len=%.0f %s for fnum %d file %s\n",
 			(double)*pstart, (double)*psize, ret ? "locked" : "unlocked",
@@ -1214,15 +1212,15 @@
  Remove a particular pending lock.
 ****************************************************************************/
 
-bool brl_lock_cancel(struct byte_range_lock *br_lck,
+BOOL brl_lock_cancel(struct byte_range_lock *br_lck,
 		uint32 smbpid,
-		struct server_id pid,
+		struct process_id pid,
 		br_off start,
 		br_off size,
 		enum brl_flavour lock_flav)
 {
 	unsigned int i;
-	struct lock_struct *locks = br_lck->lock_data;
+	struct lock_struct *locks = (struct lock_struct *)br_lck->lock_data;
 	struct lock_context context;
 
 	context.smbpid = smbpid;
@@ -1265,17 +1263,16 @@
  fd and so we should not immediately close the fd.
 ****************************************************************************/
 
-void brl_close_fnum(struct messaging_context *msg_ctx,
-		    struct byte_range_lock *br_lck)
+void brl_close_fnum(struct byte_range_lock *br_lck)
 {
 	files_struct *fsp = br_lck->fsp;
 	uint16 tid = fsp->conn->cnum;
 	int fnum = fsp->fnum;
 	unsigned int i, j, dcount=0;
 	int num_deleted_windows_locks = 0;
-	struct lock_struct *locks = br_lck->lock_data;
-	struct server_id pid = procid_self();
-	bool unlock_individually = False;
+	struct lock_struct *locks = (struct lock_struct *)br_lck->lock_data;
+	struct process_id pid = procid_self();
+	BOOL unlock_individually = False;
 
 	if(lp_posix_locking(fsp->conn->params)) {
 
@@ -1308,7 +1305,7 @@
 			if (br_lck->num_locks) {
 				locks_copy = (struct lock_struct *)TALLOC_MEMDUP(br_lck, locks, br_lck->num_locks * sizeof(struct lock_struct));
 				if (!locks_copy) {
-					smb_panic("brl_close_fnum: talloc failed");
+					smb_panic("brl_close_fnum: talloc fail.\n");
 	 			}
 			} else {	
 				locks_copy = NULL;
@@ -1321,8 +1318,7 @@
 
 				if (lock->context.tid == tid && procid_equal(&lock->context.pid, &pid) &&
 						(lock->fnum == fnum)) {
-					brl_unlock(msg_ctx,
-						br_lck,
+					brl_unlock(br_lck,
 						lock->context.smbpid,
 						pid,
 						lock->start,
@@ -1340,7 +1336,7 @@
 
 	for (i=0; i < br_lck->num_locks; i++) {
 		struct lock_struct *lock = &locks[i];
-		bool del_this_lock = False;
+		BOOL del_this_lock = False;
 
 		if (lock->context.tid == tid && procid_equal(&lock->context.pid, &pid)) {
 			if ((lock->lock_flav == WINDOWS_LOCK) && (lock->fnum == fnum)) {
@@ -1371,8 +1367,9 @@
 
 				/* We could send specific lock info here... */
 				if (brl_pending_overlap(lock, pend_lock)) {
-					messaging_send(msg_ctx, pend_lock->context.pid,
-						       MSG_SMB_UNLOCK, &data_blob_null);
+					message_send_pid(pend_lock->context.pid,
+							MSG_SMB_UNLOCK,
+							NULL, 0, True);
 				}
 			}
 
@@ -1398,7 +1395,7 @@
  Ensure this set of lock entries is valid.
 ****************************************************************************/
 
-static bool validate_lock_entries(unsigned int *pnum_entries, struct lock_struct **pplocks)
+static BOOL validate_lock_entries(unsigned int *pnum_entries, struct lock_struct **pplocks)
 {
 	unsigned int i;
 	unsigned int num_valid_entries = 0;
@@ -1446,40 +1443,31 @@
 	return True;
 }
 
-struct brl_forall_cb {
-	void (*fn)(struct file_id id, struct server_id pid,
-		   enum brl_type lock_type,
-		   enum brl_flavour lock_flav,
-		   br_off start, br_off size,
-		   void *private_data);
-	void *private_data;
-};
-
 /****************************************************************************
  Traverse the whole database with this function, calling traverse_callback
  on each lock.
 ****************************************************************************/
 
-static int traverse_fn(struct db_record *rec, void *state)
+static int traverse_fn(TDB_CONTEXT *ttdb, TDB_DATA kbuf, TDB_DATA dbuf, void *state)
 {
-	struct brl_forall_cb *cb = (struct brl_forall_cb *)state;
 	struct lock_struct *locks;
-	struct file_id *key;
+	struct lock_key *key;
 	unsigned int i;
 	unsigned int num_locks = 0;
 	unsigned int orig_num_locks = 0;
 
+	BRLOCK_FN(traverse_callback) = (BRLOCK_FN_CAST())state;
+
 	/* In a traverse function we must make a copy of
 	   dbuf before modifying it. */
 
-	locks = (struct lock_struct *)memdup(rec->value.dptr,
-					     rec->value.dsize);
+	locks = (struct lock_struct *)memdup(dbuf.dptr, dbuf.dsize);
 	if (!locks) {
 		return -1; /* Terminate traversal. */
 	}
 
-	key = (struct file_id *)rec->key.dptr;
-	orig_num_locks = num_locks = rec->value.dsize/sizeof(*locks);
+	key = (struct lock_key *)kbuf.dptr;
+	orig_num_locks = num_locks = dbuf.dsize/sizeof(*locks);
 
 	/* Ensure the lock db is clean of entries from invalid processes. */
 
@@ -1489,26 +1477,24 @@
 	}
 
 	if (orig_num_locks != num_locks) {
-		if (num_locks) {
-			TDB_DATA data;
-			data.dptr = (uint8_t *)locks;
-			data.dsize = num_locks*sizeof(struct lock_struct);
-			rec->store(rec, data, TDB_REPLACE);
+		dbuf.dptr = (char *)locks;
+		dbuf.dsize = num_locks * sizeof(*locks);
+
+		if (dbuf.dsize) {
+			tdb_store(ttdb, kbuf, dbuf, TDB_REPLACE);
 		} else {
-			rec->delete_rec(rec);
+			tdb_delete(ttdb, kbuf);
 		}
 	}
 
-	if (cb->fn) {
-		for ( i=0; i<num_locks; i++) {
-			cb->fn(*key,
-				locks[i].context.pid,
-				locks[i].lock_type,
-				locks[i].lock_flav,
-				locks[i].start,
-				locks[i].size,
-				cb->private_data);
-		}
+	for ( i=0; i<num_locks; i++) {
+		traverse_callback(key->device,
+				  key->inode,
+				  locks[i].context.pid,
+				  locks[i].lock_type,
+				  locks[i].lock_flav,
+				  locks[i].start,
+				  locks[i].size);
 	}
 
 	SAFE_FREE(locks);
@@ -1519,21 +1505,12 @@
  Call the specified function on each lock in the database.
 ********************************************************************/
 
-int brl_forall(void (*fn)(struct file_id id, struct server_id pid,
-			  enum brl_type lock_type,
-			  enum brl_flavour lock_flav,
-			  br_off start, br_off size,
-			  void *private_data),
-	       void *private_data)
+int brl_forall(BRLOCK_FN(fn))
 {
-	struct brl_forall_cb cb;
-
-	if (!brlock_db) {
+	if (!tdb) {
 		return 0;
 	}
-	cb.fn = fn;
-	cb.private_data = private_data;
-	return brlock_db->traverse(brlock_db, traverse_fn, &cb);
+	return tdb_traverse(tdb, traverse_fn, (void *)fn);
 }
 
 /*******************************************************************
@@ -1544,6 +1521,11 @@
 
 static int byte_range_lock_destructor(struct byte_range_lock *br_lck)
 {
+	TDB_DATA key;
+
+	key.dptr = (char *)&br_lck->key;
+	key.dsize = sizeof(struct lock_key);
+
 	if (br_lck->read_only) {
 		SMB_ASSERT(!br_lck->modified);
 	}
@@ -1554,31 +1536,25 @@
 
 	if (br_lck->num_locks == 0) {
 		/* No locks - delete this entry. */
-		NTSTATUS status = br_lck->record->delete_rec(br_lck->record);
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(0, ("delete_rec returned %s\n",
-				  nt_errstr(status)));
-			smb_panic("Could not delete byte range lock entry");
+		if (tdb_delete(tdb, key) == -1) {
+			smb_panic("Could not delete byte range lock entry\n");
 		}
 	} else {
 		TDB_DATA data;
-		NTSTATUS status;
-
-		data.dptr = (uint8 *)br_lck->lock_data;
+		data.dptr = (char *)br_lck->lock_data;
 		data.dsize = br_lck->num_locks * sizeof(struct lock_struct);
 
-		status = br_lck->record->store(br_lck->record, data,
-					       TDB_REPLACE);
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(0, ("store returned %s\n", nt_errstr(status)));
-			smb_panic("Could not store byte range mode entry");
+		if (tdb_store(tdb, key, data, TDB_REPLACE) == -1) {
+			smb_panic("Could not store byte range mode entry\n");
 		}
 	}
 
  done:
 
+	if (!br_lck->read_only) {
+		tdb_chainunlock(tdb, key);
+	}
 	SAFE_FREE(br_lck->lock_data);
-	TALLOC_FREE(br_lck->record);
 	return 0;
 }
 
@@ -1589,9 +1565,10 @@
 ********************************************************************/
 
 static struct byte_range_lock *brl_get_locks_internal(TALLOC_CTX *mem_ctx,
-					files_struct *fsp, bool read_only)
+					files_struct *fsp, BOOL read_only)
 {
-	TDB_DATA key, data;
+	TDB_DATA key;
+	TDB_DATA data;
 	struct byte_range_lock *br_lck = TALLOC_P(mem_ctx, struct byte_range_lock);
 
 	if (br_lck == NULL) {
@@ -1601,11 +1578,12 @@
 	br_lck->fsp = fsp;
 	br_lck->num_locks = 0;
 	br_lck->modified = False;
-	memset(&br_lck->key, '\0', sizeof(struct file_id));
-	br_lck->key = fsp->file_id;
+	memset(&br_lck->key, '\0', sizeof(struct lock_key));
+	br_lck->key.device = fsp->dev;
+	br_lck->key.inode = fsp->inode;
 
-	key.dptr = (uint8 *)&br_lck->key;
-	key.dsize = sizeof(struct file_id);
+	key.dptr = (char *)&br_lck->key;
+	key.dsize = sizeof(struct lock_key);
 
 	if (!fsp->lockdb_clean) {
 		/* We must be read/write to clean
@@ -1614,44 +1592,22 @@
 	}
 
 	if (read_only) {
-		if (brlock_db->fetch(brlock_db, br_lck, key, &data) == -1) {
-			DEBUG(3, ("Could not fetch byte range lock record\n"));
-			TALLOC_FREE(br_lck);
-			return NULL;
-		}
-		br_lck->record = NULL;
-	}
-	else {
-		br_lck->record = brlock_db->fetch_locked(brlock_db, br_lck, key);
-
-		if (br_lck->record == NULL) {
+		br_lck->read_only = True;
+	} else {
+		if (tdb_chainlock(tdb, key) != 0) {
 			DEBUG(3, ("Could not lock byte range lock entry\n"));
 			TALLOC_FREE(br_lck);
 			return NULL;
 		}
-
-		data = br_lck->record->value;
+		br_lck->read_only = False;
 	}
 
-	br_lck->read_only = read_only;
-	br_lck->lock_data = NULL;
-
 	talloc_set_destructor(br_lck, byte_range_lock_destructor);
 
+	data = tdb_fetch(tdb, key);
+	br_lck->lock_data = (void *)data.dptr;
 	br_lck->num_locks = data.dsize / sizeof(struct lock_struct);
 
-	if (br_lck->num_locks != 0) {
-		br_lck->lock_data = SMB_MALLOC_ARRAY(struct lock_struct,
-						     br_lck->num_locks);
-		if (br_lck->lock_data == NULL) {
-			DEBUG(0, ("malloc failed\n"));
-			TALLOC_FREE(br_lck);
-			return NULL;
-		}
-
-		memcpy(br_lck->lock_data, data.dptr, data.dsize);
-	}
-	
 	if (!fsp->lockdb_clean) {
 		int orig_num_locks = br_lck->num_locks;
 
@@ -1659,28 +1615,37 @@
 		/* Go through and ensure all entries exist - remove any that don't. */
 		/* Makes the lockdb self cleaning at low cost. */
 
-		if (!validate_lock_entries(&br_lck->num_locks,
-					   &br_lck->lock_data)) {
+		struct lock_struct *locks =
+			(struct lock_struct *)br_lck->lock_data;
+
+		if (!validate_lock_entries(&br_lck->num_locks, &locks)) {
 			SAFE_FREE(br_lck->lock_data);
 			TALLOC_FREE(br_lck);
 			return NULL;
 		}
 
-		/* Ensure invalid locks are cleaned up in the destructor. */
+                /* Ensure invalid locks are cleaned up in the destructor. */
 		if (orig_num_locks != br_lck->num_locks) {
 			br_lck->modified = True;
 		}
 
+		/*
+		 * validate_lock_entries might have changed locks. We can't
+		 * use a direct pointer here because otherwise gcc warnes
+		 * about strict aliasing rules being violated.
+		 */
+		br_lck->lock_data = locks;
+
 		/* Mark the lockdb as "clean" as seen from this open file. */
 		fsp->lockdb_clean = True;
 	}
 
 	if (DEBUGLEVEL >= 10) {
 		unsigned int i;
-		struct lock_struct *locks = br_lck->lock_data;
-		DEBUG(10,("brl_get_locks_internal: %u current locks on file_id %s\n",
+		struct lock_struct *locks = (struct lock_struct *)br_lck->lock_data;
+		DEBUG(10,("brl_get_locks_internal: %u current locks on dev=%.0f, inode=%.0f\n",
 			br_lck->num_locks,
-			  file_id_string_tos(&fsp->file_id)));
+			(double)fsp->dev, (double)fsp->inode ));
 		for( i = 0; i < br_lck->num_locks; i++) {
 			print_lock_struct(i, &locks[i]);
 		}
@@ -1699,109 +1664,3 @@
 {
 	return brl_get_locks_internal(mem_ctx, fsp, True);
 }
-
-struct brl_revalidate_state {
-	ssize_t array_size;
-	uint32 num_pids;
-	struct server_id *pids;
-};
-
-/*
- * Collect PIDs of all processes with pending entries
- */
-
-static void brl_revalidate_collect(struct file_id id, struct server_id pid,
-				   enum brl_type lock_type,
-				   enum brl_flavour lock_flav,
-				   br_off start, br_off size,
-				   void *private_data)
-{
-	struct brl_revalidate_state *state =
-		(struct brl_revalidate_state *)private_data;
-
-	if (!IS_PENDING_LOCK(lock_type)) {
-		return;
-	}
-
-	add_to_large_array(state, sizeof(pid), (void *)&pid,
-			   &state->pids, &state->num_pids,
-			   &state->array_size);
-}
-
-/*
- * qsort callback to sort the processes
- */
-
-static int compare_procids(const void *p1, const void *p2)
-{
-	const struct server_id *i1 = (struct server_id *)p1;
-	const struct server_id *i2 = (struct server_id *)p2;
-
-	if (i1->pid < i2->pid) return -1;
-	if (i2->pid > i2->pid) return 1;
-	return 0;
-}
-
-/*
- * Send a MSG_SMB_UNLOCK message to all processes with pending byte range
- * locks so that they retry. Mainly used in the cluster code after a node has
- * died.
- *
- * Done in two steps to avoid double-sends: First we collect all entries in an
- * array, then qsort that array and only send to non-dupes.
- */
-
-static void brl_revalidate(struct messaging_context *msg_ctx,
-			   void *private_data,
-			   uint32_t msg_type,
-			   struct server_id server_id,
-			   DATA_BLOB *data)
-{
-	struct brl_revalidate_state *state;
-	uint32 i;
-	struct server_id last_pid;
-
-	if (!(state = TALLOC_ZERO_P(NULL, struct brl_revalidate_state))) {
-		DEBUG(0, ("talloc failed\n"));
-		return;
-	}
-
-	brl_forall(brl_revalidate_collect, state);
-
-	if (state->array_size == -1) {
-		DEBUG(0, ("talloc failed\n"));
-		goto done;
-	}
-
-	if (state->num_pids == 0) {
-		goto done;
-	}
-
-	qsort(state->pids, state->num_pids, sizeof(state->pids[0]),
-	      compare_procids);
-
-	ZERO_STRUCT(last_pid);
-
-	for (i=0; i<state->num_pids; i++) {
-		if (procid_equal(&last_pid, &state->pids[i])) {
-			/*
-			 * We've seen that one already
-			 */
-			continue;
-		}
-
-		messaging_send(msg_ctx, state->pids[i], MSG_SMB_UNLOCK,
-			       &data_blob_null);
-		last_pid = state->pids[i];
-	}
-
- done:
-	TALLOC_FREE(state);
-	return;
-}
-
-void brl_register_msgs(struct messaging_context *msg_ctx)
-{
-	messaging_register(msg_ctx, NULL, MSG_SMB_BRL_VALIDATE,
-			   brl_revalidate);
-}

Modified: branches/samba/upstream/source/locking/locking.c
===================================================================
--- branches/samba/upstream/source/locking/locking.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/locking/locking.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
    Revision History:
 
@@ -43,7 +44,7 @@
 #define NO_LOCKING_COUNT (-1)
 
 /* the locking database handle */
-static struct db_context *lock_db;
+static TDB_CONTEXT *tdb;
 
 /****************************************************************************
  Debugging aids :-).
@@ -75,7 +76,7 @@
  Called in the read/write codepath.
 ****************************************************************************/
 
-bool is_locked(files_struct *fsp,
+BOOL is_locked(files_struct *fsp,
 		uint32 smbpid,
 		SMB_BIG_UINT count,
 		SMB_BIG_UINT offset, 
@@ -83,7 +84,7 @@
 {
 	int strict_locking = lp_strict_locking(fsp->conn->params);
 	enum brl_flavour lock_flav = lp_posix_cifsu_locktype(fsp);
-	bool ret = True;
+	BOOL ret = True;
 	
 	if (count == 0) {
 		return False;
@@ -102,7 +103,7 @@
 			DEBUG(10,("is_locked: optimisation - level II oplock on file %s\n", fsp->fsp_name ));
 			ret = False;
 		} else {
-			struct byte_range_lock *br_lck = brl_get_locks_readonly(talloc_tos(), fsp);
+			struct byte_range_lock *br_lck = brl_get_locks_readonly(NULL, fsp);
 			if (!br_lck) {
 				return False;
 			}
@@ -116,7 +117,7 @@
 			TALLOC_FREE(br_lck);
 		}
 	} else {
-		struct byte_range_lock *br_lck = brl_get_locks_readonly(talloc_tos(), fsp);
+		struct byte_range_lock *br_lck = brl_get_locks_readonly(NULL, fsp);
 		if (!br_lck) {
 			return False;
 		}
@@ -160,7 +161,7 @@
 		return NT_STATUS_OK;
 	}
 
-	br_lck = brl_get_locks_readonly(talloc_tos(), fsp);
+	br_lck = brl_get_locks_readonly(NULL, fsp);
 	if (!br_lck) {
 		return NT_STATUS_NO_MEMORY;
 	}
@@ -181,14 +182,13 @@
  Utility function called by locking requests.
 ****************************************************************************/
 
-struct byte_range_lock *do_lock(struct messaging_context *msg_ctx,
-			files_struct *fsp,
+struct byte_range_lock *do_lock(files_struct *fsp,
 			uint32 lock_pid,
 			SMB_BIG_UINT count,
 			SMB_BIG_UINT offset,
 			enum brl_type lock_type,
 			enum brl_flavour lock_flav,
-			bool blocking_lock,
+			BOOL blocking_lock,
 			NTSTATUS *perr,
 			uint32 *plock_pid)
 {
@@ -210,14 +210,13 @@
 		lock_flav_name(lock_flav), lock_type_name(lock_type),
 		(double)offset, (double)count, fsp->fnum, fsp->fsp_name ));
 
-	br_lck = brl_get_locks(talloc_tos(), fsp);
+	br_lck = brl_get_locks(NULL, fsp);
 	if (!br_lck) {
 		*perr = NT_STATUS_NO_MEMORY;
 		return NULL;
 	}
 
-	*perr = brl_lock(msg_ctx,
-			br_lck,
+	*perr = brl_lock(br_lck,
 			lock_pid,
 			procid_self(),
 			offset,
@@ -248,14 +247,13 @@
  Utility function called by unlocking requests.
 ****************************************************************************/
 
-NTSTATUS do_unlock(struct messaging_context *msg_ctx,
-			files_struct *fsp,
+NTSTATUS do_unlock(files_struct *fsp,
 			uint32 lock_pid,
 			SMB_BIG_UINT count,
 			SMB_BIG_UINT offset,
 			enum brl_flavour lock_flav)
 {
-	bool ok = False;
+	BOOL ok = False;
 	struct byte_range_lock *br_lck = NULL;
 	
 	if (!fsp->can_lock) {
@@ -269,13 +267,12 @@
 	DEBUG(10,("do_unlock: unlock start=%.0f len=%.0f requested for fnum %d file %s\n",
 		  (double)offset, (double)count, fsp->fnum, fsp->fsp_name ));
 
-	br_lck = brl_get_locks(talloc_tos(), fsp);
+	br_lck = brl_get_locks(NULL, fsp);
 	if (!br_lck) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	ok = brl_unlock(msg_ctx,
-			br_lck,
+	ok = brl_unlock(br_lck,
 			lock_pid,
 			procid_self(),
 			offset,
@@ -308,7 +305,7 @@
 			SMB_BIG_UINT offset,
 			enum brl_flavour lock_flav)
 {
-	bool ok = False;
+	BOOL ok = False;
 	struct byte_range_lock *br_lck = NULL;
 	
 	if (!fsp->can_lock) {
@@ -323,7 +320,7 @@
 	DEBUG(10,("do_lock_cancel: cancel start=%.0f len=%.0f requested for fnum %d file %s\n",
 		  (double)offset, (double)count, fsp->fnum, fsp->fsp_name ));
 
-	br_lck = brl_get_locks(talloc_tos(), fsp);
+	br_lck = brl_get_locks(NULL, fsp);
 	if (!br_lck) {
 		return NT_STATUS_NO_MEMORY;
 	}
@@ -355,8 +352,7 @@
  Remove any locks on this fd. Called from file_close().
 ****************************************************************************/
 
-void locking_close_file(struct messaging_context *msg_ctx,
-			files_struct *fsp)
+void locking_close_file(files_struct *fsp)
 {
 	struct byte_range_lock *br_lck;
 
@@ -372,11 +368,11 @@
 		return;
 	}
 
-	br_lck = brl_get_locks(talloc_tos(),fsp);
+	br_lck = brl_get_locks(NULL,fsp);
 
 	if (br_lck) {
 		cancel_pending_lock_requests_by_fid(fsp, br_lck);
-		brl_close_fnum(msg_ctx, br_lck);
+		brl_close_fnum(br_lck);
 		TALLOC_FREE(br_lck);
 	}
 }
@@ -385,77 +381,102 @@
  Initialise the locking functions.
 ****************************************************************************/
 
-static bool locking_init_internal(bool read_only)
+static int open_read_only;
+
+BOOL locking_init(int read_only)
 {
 	brl_init(read_only);
 
-	if (lock_db)
+	if (tdb)
 		return True;
 
-	lock_db = db_open(NULL, lock_path("locking.tdb"),
-			  lp_open_files_db_hash_size(),
-			  TDB_DEFAULT|TDB_VOLATILE|TDB_CLEAR_IF_FIRST,
-			  read_only?O_RDONLY:O_RDWR|O_CREAT, 0644);
+	tdb = tdb_open_log(lock_path("locking.tdb"), 
+			lp_open_files_db_hash_size(),
+			TDB_DEFAULT|(read_only?0x0:TDB_CLEAR_IF_FIRST), 
+			read_only?O_RDONLY:O_RDWR|O_CREAT,
+			0644);
 
-	if (!lock_db) {
+	if (!tdb) {
 		DEBUG(0,("ERROR: Failed to initialise locking database\n"));
 		return False;
 	}
 
+	/* Activate the per-hashchain freelist */
+	tdb_set_max_dead(tdb, 5);
+
 	if (!posix_locking_init(read_only))
 		return False;
 
+	open_read_only = read_only;
+
 	return True;
 }
 
-bool locking_init(void)
-{
-	return locking_init_internal(false);
-}
+/*******************************************************************
+ Deinitialize the share_mode management.
+******************************************************************/
 
-bool locking_init_readonly(void)
+BOOL locking_end(void)
 {
-	return locking_init_internal(true);
+	BOOL ret = True;
+
+	brl_shutdown(open_read_only);
+	if (tdb) {
+		if (tdb_close(tdb) != 0)
+			ret = False;
+	}
+
+	return ret;
 }
 
 /*******************************************************************
- Deinitialize the share_mode management.
+ Form a static locking key for a dev/inode pair.
 ******************************************************************/
 
-bool locking_end(void)
-{
-	brl_shutdown();
-	TALLOC_FREE(lock_db);
-	return true;
-}
+/* key and data records in the tdb locking database */
+struct locking_key {
+	SMB_DEV_T dev;
+	SMB_INO_T ino;
+};
 
 /*******************************************************************
  Form a static locking key for a dev/inode pair.
 ******************************************************************/
 
-static TDB_DATA locking_key(const struct file_id *id, struct file_id *tmp)
+static TDB_DATA locking_key(SMB_DEV_T dev, SMB_INO_T inode)
 {
-	*tmp = *id;
-	return make_tdb_data((const uint8_t *)tmp, sizeof(*tmp));
+	static struct locking_key key;
+	TDB_DATA kbuf;
+
+	memset(&key, '\0', sizeof(key));
+	key.dev = dev;
+	key.ino = inode;
+	kbuf.dptr = (char *)&key;
+	kbuf.dsize = sizeof(key);
+	return kbuf;
 }
 
 /*******************************************************************
  Print out a share mode.
 ********************************************************************/
 
-char *share_mode_str(TALLOC_CTX *ctx, int num, const struct share_mode_entry *e)
+char *share_mode_str(int num, struct share_mode_entry *e)
 {
-	return talloc_asprintf(ctx, "share_mode_entry[%d]: %s "
+	static pstring share_str;
+
+	slprintf(share_str, sizeof(share_str)-1, "share_mode_entry[%d]: %s "
 		 "pid = %s, share_access = 0x%x, private_options = 0x%x, "
-		 "access_mask = 0x%x, mid = 0x%x, type= 0x%x, gen_id = %lu, "
-		 "uid = %u, flags = %u, file_id %s",
+		 "access_mask = 0x%x, mid = 0x%x, type= 0x%x, file_id = %lu, "
+		 "uid = %u, flags = %u, dev = 0x%x, inode = %.0f",
 		 num,
 		 e->op_type == UNUSED_SHARE_MODE_ENTRY ? "UNUSED" : "",
 		 procid_str_static(&e->pid),
 		 e->share_access, e->private_options,
 		 e->access_mask, e->op_mid, e->op_type, e->share_file_id,
 		 (unsigned int)e->uid, (unsigned int)e->flags,
-		 file_id_string_tos(&e->id));
+		 (unsigned int)e->dev, (double)e->inode );
+
+	return share_str;
 }
 
 /*******************************************************************
@@ -471,19 +492,10 @@
 
 	for (i = 0; i < num_share_modes; i++) {
 		struct share_mode_entry entry;
-		char *str;
 
-		/*
-		 * We need to memcpy the entry here due to alignment
-		 * restrictions that are not met when directly accessing
-		 * shares[i]
-		 */
-
 		memcpy(&entry, &shares[i], sizeof(struct share_mode_entry));
-		str = share_mode_str(talloc_tos(), i, &entry);
-
-		DEBUG(10,("print_share_mode_table: %s\n", str ? str : ""));
-		TALLOC_FREE(str);
+		DEBUG(10,("print_share_mode_table: %s\n",
+			  share_mode_str(i, &entry)));
 	}
 }
 
@@ -491,37 +503,29 @@
  Get all share mode entries for a dev/inode pair.
 ********************************************************************/
 
-static bool parse_share_modes(TDB_DATA dbuf, struct share_mode_lock *lck)
+static BOOL parse_share_modes(TDB_DATA dbuf, struct share_mode_lock *lck)
 {
 	struct locking_data *data;
 	int i;
 
 	if (dbuf.dsize < sizeof(struct locking_data)) {
-		smb_panic("parse_share_modes: buffer too short");
+		smb_panic("PANIC: parse_share_modes: buffer too short.\n");
 	}
 
 	data = (struct locking_data *)dbuf.dptr;
 
 	lck->delete_on_close = data->u.s.delete_on_close;
-	lck->old_write_time = data->u.s.old_write_time;
-	lck->changed_write_time = data->u.s.changed_write_time;
 	lck->num_share_modes = data->u.s.num_share_mode_entries;
 
-	DEBUG(10, ("parse_share_modes: delete_on_close: %d, owrt: %s, "
-		   "cwrt: %s, tok: %u, num_share_modes: %d\n",
-		   lck->delete_on_close,
-		   timestring(debug_ctx(),
-			      convert_timespec_to_time_t(lck->old_write_time)),
-		   timestring(debug_ctx(),
-			      convert_timespec_to_time_t(
-				      lck->changed_write_time)),
-		   (unsigned int)data->u.s.delete_token_size,
-		   lck->num_share_modes));
+	DEBUG(10, ("parse_share_modes: delete_on_close: %d, "
+		   "num_share_modes: %d\n",
+		lck->delete_on_close,
+		lck->num_share_modes));
 
 	if ((lck->num_share_modes < 0) || (lck->num_share_modes > 1000000)) {
 		DEBUG(0, ("invalid number of share modes: %d\n",
 			  lck->num_share_modes));
-		smb_panic("parse_share_modes: invalid number of share modes");
+		smb_panic("PANIC: invalid number of share modes");
 	}
 
 	lck->share_modes = NULL;
@@ -531,7 +535,7 @@
 		if (dbuf.dsize < (sizeof(struct locking_data) +
 				  (lck->num_share_modes *
 				   sizeof(struct share_mode_entry)))) {
-			smb_panic("parse_share_modes: buffer too short");
+			smb_panic("PANIC: parse_share_modes: buffer too short.\n");
 		}
 				  
 		lck->share_modes = (struct share_mode_entry *)
@@ -540,13 +544,13 @@
 				      sizeof(struct share_mode_entry));
 
 		if (lck->share_modes == NULL) {
-			smb_panic("parse_share_modes: talloc failed");
+			smb_panic("talloc failed\n");
 		}
 	}
 
 	/* Get any delete token. */
 	if (data->u.s.delete_token_size) {
-		uint8 *p = dbuf.dptr + sizeof(*data) +
+		char *p = dbuf.dptr + sizeof(*data) +
 				(lck->num_share_modes *
 				sizeof(struct share_mode_entry));
 
@@ -554,12 +558,12 @@
 				((data->u.s.delete_token_size - sizeof(uid_t)) % sizeof(gid_t)) != 0) {
 			DEBUG(0, ("parse_share_modes: invalid token size %d\n",
 				data->u.s.delete_token_size));
-			smb_panic("parse_share_modes: invalid token size");
+			smb_panic("parse_share_modes: invalid token size\n");
 		}
 
 		lck->delete_token = TALLOC_P(lck, UNIX_USER_TOKEN);
 		if (!lck->delete_token) {
-			smb_panic("parse_share_modes: talloc failed");
+			smb_panic("talloc failed\n");
 		}
 
 		/* Copy out the uid and gid. */
@@ -578,7 +582,7 @@
 			lck->delete_token->groups = TALLOC_ARRAY(lck->delete_token, gid_t,
 							lck->delete_token->ngroups);
 			if (!lck->delete_token) {
-				smb_panic("parse_share_modes: talloc failed");
+				smb_panic("talloc failed\n");
 			}
 
 			for (i = 0; i < lck->delete_token->ngroups; i++) {
@@ -592,14 +596,22 @@
 	}
 
 	/* Save off the associated service path and filename. */
-	lck->servicepath = (const char *)dbuf.dptr + sizeof(*data) +
-		(lck->num_share_modes *	sizeof(struct share_mode_entry)) +
-		data->u.s.delete_token_size;
+	lck->servicepath = talloc_strdup(lck, dbuf.dptr + sizeof(*data) +
+					(lck->num_share_modes *
+					sizeof(struct share_mode_entry)) +
+					data->u.s.delete_token_size );
+	if (lck->servicepath == NULL) {
+		smb_panic("talloc_strdup failed\n");
+	}
 
-	lck->filename = (const char *)dbuf.dptr + sizeof(*data) +
-		(lck->num_share_modes *	sizeof(struct share_mode_entry)) +
-		data->u.s.delete_token_size +
-		strlen(lck->servicepath) + 1;
+	lck->filename = talloc_strdup(lck, dbuf.dptr + sizeof(*data) +
+					(lck->num_share_modes *
+					sizeof(struct share_mode_entry)) +
+					data->u.s.delete_token_size +
+					strlen(lck->servicepath) + 1 );
+	if (lck->filename == NULL) {
+		smb_panic("talloc_strdup failed\n");
+	}
 
 	/*
 	 * Ensure that each entry has a real process attached.
@@ -607,19 +619,14 @@
 
 	for (i = 0; i < lck->num_share_modes; i++) {
 		struct share_mode_entry *entry_p = &lck->share_modes[i];
-		char *str = NULL;
-		if (DEBUGLEVEL >= 10) {
-			str = share_mode_str(NULL, i, entry_p);
-		}
 		DEBUG(10,("parse_share_modes: %s\n",
-			str ? str : ""));
+			  share_mode_str(i, entry_p) ));
 		if (!process_exists(entry_p->pid)) {
 			DEBUG(10,("parse_share_modes: deleted %s\n",
-				str ? str : ""));
+				  share_mode_str(i, entry_p) ));
 			entry_p->op_type = UNUSED_SHARE_MODE_ENTRY;
 			lck->modified = True;
 		}
-		TALLOC_FREE(str);
 	}
 
 	return True;
@@ -657,30 +664,21 @@
 		delete_token_size +
 		sp_len + 1 +
 		strlen(lck->filename) + 1;
-	result.dptr = TALLOC_ARRAY(lck, uint8, result.dsize);
+	result.dptr = TALLOC_ARRAY(lck, char, result.dsize);
 
 	if (result.dptr == NULL) {
-		smb_panic("talloc failed");
+		smb_panic("talloc failed\n");
 	}
 
 	data = (struct locking_data *)result.dptr;
 	ZERO_STRUCTP(data);
 	data->u.s.num_share_mode_entries = lck->num_share_modes;
 	data->u.s.delete_on_close = lck->delete_on_close;
-	data->u.s.old_write_time = lck->old_write_time;
-	data->u.s.changed_write_time = lck->changed_write_time;
 	data->u.s.delete_token_size = delete_token_size;
-
-	DEBUG(10,("unparse_share_modes: del: %d, owrt: %s cwrt: %s, tok: %u, "
-		  "num: %d\n", data->u.s.delete_on_close,
-		  timestring(debug_ctx(),
-			     convert_timespec_to_time_t(lck->old_write_time)),
-		  timestring(debug_ctx(),
-			     convert_timespec_to_time_t(
-				     lck->changed_write_time)),
-		  (unsigned int)data->u.s.delete_token_size,
-		  data->u.s.num_share_mode_entries));
-
+	DEBUG(10, ("unparse_share_modes: del: %d, tok = %u, num: %d\n",
+		data->u.s.delete_on_close,
+		(unsigned int)data->u.s.delete_token_size,
+		data->u.s.num_share_mode_entries));
 	memcpy(result.dptr + sizeof(*data), lck->share_modes,
 	       sizeof(struct share_mode_entry)*lck->num_share_modes);
 	offset = sizeof(*data) +
@@ -688,7 +686,7 @@
 
 	/* Store any delete on close token. */
 	if (lck->delete_token) {
-		uint8 *p = result.dptr + offset;
+		char *p = result.dptr + offset;
 
 		memcpy(p, &lck->delete_token->uid, sizeof(uid_t));
 		p += sizeof(uid_t);
@@ -703,10 +701,10 @@
 		offset = p - result.dptr;
 	}
 
-	safe_strcpy((char *)result.dptr + offset, lck->servicepath,
+	safe_strcpy(result.dptr + offset, lck->servicepath,
 		    result.dsize - offset - 1);
 	offset += sp_len + 1;
-	safe_strcpy((char *)result.dptr + offset, lck->filename,
+	safe_strcpy(result.dptr + offset, lck->filename,
 		    result.dsize - offset - 1);
 
 	if (DEBUGLEVEL >= 10) {
@@ -718,11 +716,11 @@
 
 static int share_mode_lock_destructor(struct share_mode_lock *lck)
 {
-	NTSTATUS status;
+	TDB_DATA key = locking_key(lck->dev, lck->ino);
 	TDB_DATA data;
 
 	if (!lck->modified) {
-		return 0;
+		goto done;
 	}
 
 	data = unparse_share_modes(lck);
@@ -730,137 +728,94 @@
 	if (data.dptr == NULL) {
 		if (!lck->fresh) {
 			/* There has been an entry before, delete it */
-
-			status = lck->record->delete_rec(lck->record);
-			if (!NT_STATUS_IS_OK(status)) {
-				DEBUG(0, ("delete_rec returned %s\n",
-					  nt_errstr(status)));
-				smb_panic("could not delete share entry");
+			if (tdb_delete(tdb, key) == -1) {
+				smb_panic("Could not delete share entry\n");
 			}
 		}
 		goto done;
 	}
 
-	status = lck->record->store(lck->record, data, TDB_REPLACE);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0, ("store returned %s\n", nt_errstr(status)));
-		smb_panic("could not store share mode entry");
+	if (tdb_store(tdb, key, data, TDB_REPLACE) == -1) {
+		smb_panic("Could not store share mode entry\n");
 	}
 
  done:
+	tdb_chainunlock(tdb, key);
 
 	return 0;
 }
 
-static bool fill_share_mode_lock(struct share_mode_lock *lck,
-				 struct file_id id,
-				 const char *servicepath,
-				 const char *fname,
-				 TDB_DATA share_mode_data,
-				 const struct timespec *old_write_time)
+struct share_mode_lock *get_share_mode_lock(TALLOC_CTX *mem_ctx,
+						SMB_DEV_T dev, SMB_INO_T ino,
+						const char *servicepath,
+						const char *fname)
 {
+	struct share_mode_lock *lck;
+	TDB_DATA key = locking_key(dev, ino);
+	TDB_DATA data;
+
+	lck = TALLOC_P(mem_ctx, struct share_mode_lock);
+	if (lck == NULL) {
+		DEBUG(0, ("talloc failed\n"));
+		return NULL;
+	}
+
 	/* Ensure we set every field here as the destructor must be
 	   valid even if parse_share_modes fails. */
 
 	lck->servicepath = NULL;
 	lck->filename = NULL;
-	lck->id = id;
+	lck->dev = dev;
+	lck->ino = ino;
 	lck->num_share_modes = 0;
 	lck->share_modes = NULL;
 	lck->delete_token = NULL;
 	lck->delete_on_close = False;
-	ZERO_STRUCT(lck->old_write_time);
-	ZERO_STRUCT(lck->changed_write_time);
 	lck->fresh = False;
 	lck->modified = False;
 
-	lck->fresh = (share_mode_data.dptr == NULL);
+	if (tdb_chainlock(tdb, key) != 0) {
+		DEBUG(3, ("Could not lock share entry\n"));
+		TALLOC_FREE(lck);
+		return NULL;
+	}
 
+	/* We must set the destructor immediately after the chainlock
+	   ensure the lock is cleaned up on any of the error return
+	   paths below. */
+
+	talloc_set_destructor(lck, share_mode_lock_destructor);
+
+	data = tdb_fetch(tdb, key);
+	lck->fresh = (data.dptr == NULL);
+
 	if (lck->fresh) {
-		if (fname == NULL || servicepath == NULL
-		    || old_write_time == NULL) {
-			return False;
+
+		if (fname == NULL || servicepath == NULL) {
+			TALLOC_FREE(lck);
+			return NULL;
 		}
 		lck->filename = talloc_strdup(lck, fname);
 		lck->servicepath = talloc_strdup(lck, servicepath);
 		if (lck->filename == NULL || lck->servicepath == NULL) {
 			DEBUG(0, ("talloc failed\n"));
-			return False;
+			TALLOC_FREE(lck);
+			return NULL;
 		}
-		lck->old_write_time = *old_write_time;
 	} else {
-		if (!parse_share_modes(share_mode_data, lck)) {
+		if (!parse_share_modes(data, lck)) {
 			DEBUG(0, ("Could not parse share modes\n"));
-			return False;
+			TALLOC_FREE(lck);
+			SAFE_FREE(data.dptr);
+			return NULL;
 		}
 	}
 
-	return True;
-}
+	SAFE_FREE(data.dptr);
 
-struct share_mode_lock *get_share_mode_lock(TALLOC_CTX *mem_ctx,
-					    const struct file_id id,
-					    const char *servicepath,
-					    const char *fname,
-					    const struct timespec *old_write_time)
-{
-	struct share_mode_lock *lck;
-	struct file_id tmp;
-	TDB_DATA key = locking_key(&id, &tmp);
-
-	if (!(lck = TALLOC_P(mem_ctx, struct share_mode_lock))) {
-		DEBUG(0, ("talloc failed\n"));
-		return NULL;
-	}
-
-	if (!(lck->record = lock_db->fetch_locked(lock_db, lck, key))) {
-		DEBUG(3, ("Could not lock share entry\n"));
-		TALLOC_FREE(lck);
-		return NULL;
-	}
-
-	if (!fill_share_mode_lock(lck, id, servicepath, fname,
-				  lck->record->value, old_write_time)) {
-		DEBUG(3, ("fill_share_mode_lock failed\n"));
-		TALLOC_FREE(lck);
-		return NULL;
-	}
-
-	talloc_set_destructor(lck, share_mode_lock_destructor);
-
 	return lck;
 }
 
-struct share_mode_lock *fetch_share_mode_unlocked(TALLOC_CTX *mem_ctx,
-						  const struct file_id id,
-						  const char *servicepath,
-						  const char *fname)
-{
-	struct share_mode_lock *lck;
-	struct file_id tmp;
-	TDB_DATA key = locking_key(&id, &tmp);
-	TDB_DATA data;
-
-	if (!(lck = TALLOC_P(mem_ctx, struct share_mode_lock))) {
-		DEBUG(0, ("talloc failed\n"));
-		return NULL;
-	}
-
-	if (lock_db->fetch(lock_db, lck, key, &data) == -1) {
-		DEBUG(3, ("Could not fetch share entry\n"));
-		TALLOC_FREE(lck);
-		return NULL;
-	}
-
-	if (!fill_share_mode_lock(lck, id, servicepath, fname, data, NULL)) {
-		DEBUG(3, ("fill_share_mode_lock failed\n"));
-		TALLOC_FREE(lck);
-		return NULL;
-	}
-
-	return lck;
-}
-
 /*******************************************************************
  Sets the service name and filename for rename.
  At this point we emit "file renamed" messages to all
@@ -868,8 +823,7 @@
  Based on an initial code idea from SATOH Fumiyasu <fumiya at samba.gr.jp>
 ********************************************************************/
 
-bool rename_share_filename(struct messaging_context *msg_ctx,
-			struct share_mode_lock *lck,
+BOOL rename_share_filename(struct share_mode_lock *lck,
 			const char *servicepath,
 			const char *newname)
 {
@@ -879,6 +833,10 @@
 	char *frm = NULL;
 	int i;
 
+	if (!lck) {
+		return False;
+	}
+
 	DEBUG(10, ("rename_share_filename: servicepath %s newname %s\n",
 		servicepath, newname));
 
@@ -909,7 +867,8 @@
 		return False;
 	}
 
-	push_file_id_16(frm, &lck->id);
+	SDEV_T_VAL(frm,0,lck->dev);
+	SINO_T_VAL(frm,8,lck->ino);
 
 	DEBUG(10,("rename_share_filename: msg_len = %u\n", (unsigned int)msg_len ));
 
@@ -928,55 +887,45 @@
 		}
 
 		DEBUG(10,("rename_share_filename: sending rename message to pid %s "
-			  "file_id %s sharepath %s newname %s\n",
-			  procid_str_static(&se->pid),
-			  file_id_string_tos(&lck->id),
-			  lck->servicepath, lck->filename ));
+			"dev %x, inode  %.0f sharepath %s newname %s\n",
+			procid_str_static(&se->pid),
+			(unsigned int)lck->dev, (double)lck->ino,
+			lck->servicepath, lck->filename ));
 
-		messaging_send_buf(msg_ctx, se->pid, MSG_SMB_FILE_RENAME,
-				   (uint8 *)frm, msg_len);
+		message_send_pid(se->pid, MSG_SMB_FILE_RENAME,
+				frm, msg_len, True);
 	}
 
 	return True;
 }
 
-void get_file_infos(struct file_id id,
-		    bool *delete_on_close,
-		    struct timespec *write_time)
+static int pull_delete_on_close_flag(TDB_DATA key, TDB_DATA dbuf,
+				     void *private_data)
 {
-	struct share_mode_lock *lck;
+	BOOL *result = (BOOL *)private_data;
+	struct locking_data *data;
 
-	if (delete_on_close) {
-		*delete_on_close = false;
+	if (dbuf.dsize < sizeof(struct locking_data)) {
+		smb_panic("PANIC: parse_share_modes: buffer too short.\n");
 	}
 
-	if (write_time) {
-		ZERO_STRUCTP(write_time);
-	}
+	data = (struct locking_data *)dbuf.dptr;
 
-	if (!(lck = fetch_share_mode_unlocked(talloc_tos(), id, NULL, NULL))) {
-		return;
-	}
+	*result = data->u.s.delete_on_close;
+	return 0;
+}
 
-	if (delete_on_close) {
-		*delete_on_close = lck->delete_on_close;
-	}
+BOOL get_delete_on_close_flag(SMB_DEV_T dev, SMB_INO_T inode)
+{
+	TDB_DATA key = locking_key(dev, inode);
+	BOOL result = False;
 
-	if (write_time) {
-		struct timespec wt;
-
-		wt = lck->changed_write_time;
-		if (null_timespec(wt)) {
-			wt = lck->old_write_time;
-		}
-
-		*write_time = wt;
-	}
-
-	TALLOC_FREE(lck);
+	tdb_parse_record(tdb, key, pull_delete_on_close_flag,
+			 (void *)&result);
+	return result;
 }
 
-bool is_valid_share_mode_entry(const struct share_mode_entry *e)
+BOOL is_valid_share_mode_entry(const struct share_mode_entry *e)
 {
 	int num_props = 0;
 
@@ -996,12 +945,12 @@
 	return (num_props != 0);
 }
 
-bool is_deferred_open_entry(const struct share_mode_entry *e)
+BOOL is_deferred_open_entry(const struct share_mode_entry *e)
 {
 	return (e->op_type == DEFERRED_OPEN_ENTRY);
 }
 
-bool is_unused_share_mode_entry(const struct share_mode_entry *e)
+BOOL is_unused_share_mode_entry(const struct share_mode_entry *e)
 {
 	return (e->op_type == UNUSED_SHARE_MODE_ENTRY);
 }
@@ -1023,15 +972,16 @@
 	e->op_type = op_type;
 	e->time.tv_sec = fsp->open_time.tv_sec;
 	e->time.tv_usec = fsp->open_time.tv_usec;
-	e->id = fsp->file_id;
-	e->share_file_id = fsp->fh->gen_id;
+	e->dev = fsp->dev;
+	e->inode = fsp->inode;
+	e->share_file_id = fsp->fh->file_id;
 	e->uid = (uint32)uid;
 	e->flags = fsp->posix_open ? SHARE_MODE_FLAG_POSIX_OPEN : 0;
 }
 
 static void fill_deferred_open_entry(struct share_mode_entry *e,
 				     const struct timeval request_time,
-				     struct file_id id, uint16 mid)
+				     SMB_DEV_T dev, SMB_INO_T ino, uint16 mid)
 {
 	ZERO_STRUCTP(e);
 	e->pid = procid_self();
@@ -1039,7 +989,8 @@
 	e->op_type = DEFERRED_OPEN_ENTRY;
 	e->time.tv_sec = request_time.tv_sec;
 	e->time.tv_usec = request_time.tv_usec;
-	e->id = id;
+	e->dev = dev;
+	e->inode = ino;
 	e->uid = (uint32)-1;
 	e->flags = 0;
 }
@@ -1066,7 +1017,7 @@
 }
 
 void set_share_mode(struct share_mode_lock *lck, files_struct *fsp,
-			uid_t uid, uint16 mid, uint16 op_type, bool initial_delete_on_close_allowed)
+			uid_t uid, uint16 mid, uint16 op_type, BOOL initial_delete_on_close_allowed)
 {
 	struct share_mode_entry entry;
 	fill_share_mode_entry(&entry, fsp, uid, mid, op_type);
@@ -1078,10 +1029,10 @@
 
 void add_deferred_open(struct share_mode_lock *lck, uint16 mid,
 		       struct timeval request_time,
-		       struct file_id id)
+		       SMB_DEV_T dev, SMB_INO_T ino)
 {
 	struct share_mode_entry entry;
-	fill_deferred_open_entry(&entry, request_time, id, mid);
+	fill_deferred_open_entry(&entry, request_time, dev, ino, mid);
 	add_share_mode_entry(lck, &entry);
 }
 
@@ -1091,7 +1042,7 @@
  not automatically a logic error if they are identical. JRA.)
 ********************************************************************/
 
-static bool share_modes_identical(struct share_mode_entry *e1,
+static BOOL share_modes_identical(struct share_mode_entry *e1,
 				  struct share_mode_entry *e2)
 {
 	/* We used to check for e1->share_access == e2->share_access here
@@ -1100,16 +1051,18 @@
 	   fsp->share_access field. */
 
 	return (procid_equal(&e1->pid, &e2->pid) &&
-		file_id_equal(&e1->id, &e2->id) &&
+		e1->dev == e2->dev &&
+		e1->inode == e2->inode &&
 		e1->share_file_id == e2->share_file_id );
 }
 
-static bool deferred_open_identical(struct share_mode_entry *e1,
+static BOOL deferred_open_identical(struct share_mode_entry *e1,
 				    struct share_mode_entry *e2)
 {
 	return (procid_equal(&e1->pid, &e2->pid) &&
 		(e1->op_mid == e2->op_mid) &&
-		file_id_equal(&e1->id, &e2->id));
+		(e1->dev == e2->dev) &&
+		(e1->inode == e2->inode));
 }
 
 static struct share_mode_entry *find_share_mode_entry(struct share_mode_lock *lck,
@@ -1138,7 +1091,7 @@
  entries left.
 ********************************************************************/
 
-bool del_share_mode(struct share_mode_lock *lck, files_struct *fsp)
+BOOL del_share_mode(struct share_mode_lock *lck, files_struct *fsp)
 {
 	struct share_mode_entry entry, *e;
 
@@ -1160,7 +1113,7 @@
 	struct share_mode_entry entry, *e;
 
 	fill_deferred_open_entry(&entry, timeval_zero(),
-				 lck->id, mid);
+				 lck->dev, lck->ino, mid);
 
 	e = find_share_mode_entry(lck, &entry);
 	if (e == NULL) {
@@ -1175,7 +1128,7 @@
  Remove an oplock mid and mode entry from a share mode.
 ********************************************************************/
 
-bool remove_share_oplock(struct share_mode_lock *lck, files_struct *fsp)
+BOOL remove_share_oplock(struct share_mode_lock *lck, files_struct *fsp)
 {
 	struct share_mode_entry entry, *e;
 
@@ -1197,7 +1150,7 @@
  Downgrade a oplock type from exclusive to level II.
 ********************************************************************/
 
-bool downgrade_share_oplock(struct share_mode_lock *lck, files_struct *fsp)
+BOOL downgrade_share_oplock(struct share_mode_lock *lck, files_struct *fsp)
 {
 	struct share_mode_entry entry, *e;
 
@@ -1220,7 +1173,7 @@
  open_file_ntcreate. JRA.
 ****************************************************************************/
 
-NTSTATUS can_set_delete_on_close(files_struct *fsp, bool delete_on_close,
+NTSTATUS can_set_delete_on_close(files_struct *fsp, BOOL delete_on_close,
 				 uint32 dosmode)
 {
 	if (!delete_on_close) {
@@ -1274,7 +1227,7 @@
  Do we have an open file handle that created this entry ?
 ****************************************************************************/
 
-bool can_set_initial_delete_on_close(const struct share_mode_lock *lck)
+BOOL can_set_initial_delete_on_close(const struct share_mode_lock *lck)
 {
 	int i;
 
@@ -1324,7 +1277,11 @@
 
 void set_delete_on_close_token(struct share_mode_lock *lck, UNIX_USER_TOKEN *tok)
 {
-	TALLOC_FREE(lck->delete_token); /* Also deletes groups... */
+	/* Ensure there's no token. */
+	if (lck->delete_token) {
+		TALLOC_FREE(lck->delete_token); /* Also deletes groups... */
+		lck->delete_token = NULL;
+	}
 
 	/* Copy the new token (can be NULL). */
 	lck->delete_token = copy_unix_token(lck, tok);
@@ -1342,7 +1299,7 @@
  lck entry. This function is used when the lock is already granted.
 ****************************************************************************/
 
-void set_delete_on_close_lck(struct share_mode_lock *lck, bool delete_on_close, UNIX_USER_TOKEN *tok)
+void set_delete_on_close_lck(struct share_mode_lock *lck, BOOL delete_on_close, UNIX_USER_TOKEN *tok)
 {
 	if (lck->delete_on_close != delete_on_close) {
 		set_delete_on_close_token(lck, tok);
@@ -1354,7 +1311,7 @@
 	}
 }
 
-bool set_delete_on_close(files_struct *fsp, bool delete_on_close, UNIX_USER_TOKEN *tok)
+BOOL set_delete_on_close(files_struct *fsp, BOOL delete_on_close, UNIX_USER_TOKEN *tok)
 {
 	struct share_mode_lock *lck;
 	
@@ -1367,8 +1324,7 @@
 		return True;
 	}
 
-	lck = get_share_mode_lock(talloc_tos(), fsp->file_id, NULL, NULL,
-				  NULL);
+	lck = get_share_mode_lock(NULL, fsp->dev, fsp->inode, NULL, NULL);
 	if (lck == NULL) {
 		return False;
 	}
@@ -1387,7 +1343,7 @@
  Sets the allow initial delete on close flag for this share mode.
 ****************************************************************************/
 
-bool set_allow_initial_delete_on_close(struct share_mode_lock *lck, files_struct *fsp, bool delete_on_close)
+BOOL set_allow_initial_delete_on_close(struct share_mode_lock *lck, files_struct *fsp, BOOL delete_on_close)
 {
 	struct share_mode_entry entry, *e;
 
@@ -1408,30 +1364,6 @@
 	return True;
 }
 
-bool set_write_time(struct file_id fileid, struct timespec write_time,
-		    bool overwrite)
-{
-	struct share_mode_lock *lck;
-
-	DEBUG(5,("set_write_time: %s overwrite=%d id=%s\n",
-		 timestring(debug_ctx(),
-			    convert_timespec_to_time_t(write_time)),
-		 overwrite, file_id_string_tos(&fileid)));
-
-	lck = get_share_mode_lock(NULL, fileid, NULL, NULL, NULL);
-	if (lck == NULL) {
-		return False;
-	}
-
-	if (overwrite || null_timespec(lck->changed_write_time)) {
-		lck->modified = True;
-		lck->changed_write_time = write_time;
-	}
-
-	TALLOC_FREE(lck);
-	return True;
-}
-
 struct forall_state {
 	void (*fn)(const struct share_mode_entry *entry,
 		   const char *sharepath,
@@ -1440,7 +1372,8 @@
 	void *private_data;
 };
 
-static int traverse_fn(struct db_record *rec, void *_state)
+static int traverse_fn(TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf, 
+                       void *_state)
 {
 	struct forall_state *state = (struct forall_state *)_state;
 	struct locking_data *data;
@@ -1450,15 +1383,15 @@
 	int i;
 
 	/* Ensure this is a locking_key record. */
-	if (rec->key.dsize != sizeof(struct file_id))
+	if (kbuf.dsize != sizeof(struct locking_key))
 		return 0;
 
-	data = (struct locking_data *)rec->value.dptr;
-	shares = (struct share_mode_entry *)(rec->value.dptr + sizeof(*data));
-	sharepath = (const char *)rec->value.dptr + sizeof(*data) +
+	data = (struct locking_data *)dbuf.dptr;
+	shares = (struct share_mode_entry *)(dbuf.dptr + sizeof(*data));
+	sharepath = dbuf.dptr + sizeof(*data) +
 		data->u.s.num_share_mode_entries*sizeof(*shares) +
 		data->u.s.delete_token_size;
-	fname = (const char *)rec->value.dptr + sizeof(*data) +
+	fname = dbuf.dptr + sizeof(*data) +
 		data->u.s.num_share_mode_entries*sizeof(*shares) +
 		data->u.s.delete_token_size +
 		strlen(sharepath) + 1;
@@ -1481,11 +1414,11 @@
 {
 	struct forall_state state;
 
-	if (lock_db == NULL)
+	if (tdb == NULL)
 		return 0;
 
 	state.fn = fn;
 	state.private_data = private_data;
 
-	return lock_db->traverse_read(lock_db, traverse_fn, (void *)&state);
+	return tdb_traverse(tdb, traverse_fn, (void *)&state);
 }

Modified: branches/samba/upstream/source/locking/posix.c
===================================================================
--- branches/samba/upstream/source/locking/posix.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/locking/posix.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
    Revision History:
 
@@ -30,7 +31,7 @@
  * The pending close database handle.
  */
 
-static struct db_context *posix_pending_close_db;
+static TDB_CONTEXT *posix_pending_close_tdb;
 
 /****************************************************************************
  First - the functions that deal with the underlying system locks - these
@@ -78,7 +79,7 @@
  False if not.
 ****************************************************************************/
 
-static bool posix_lock_in_range(SMB_OFF_T *offset_out, SMB_OFF_T *count_out,
+static BOOL posix_lock_in_range(SMB_OFF_T *offset_out, SMB_OFF_T *count_out,
 				SMB_BIG_UINT u_offset, SMB_BIG_UINT u_count)
 {
 	SMB_OFF_T offset = (SMB_OFF_T)u_offset;
@@ -182,20 +183,20 @@
  broken NFS implementations.
 ****************************************************************************/
 
-static bool posix_fcntl_lock(files_struct *fsp, int op, SMB_OFF_T offset, SMB_OFF_T count, int type)
+static BOOL posix_fcntl_lock(files_struct *fsp, int op, SMB_OFF_T offset, SMB_OFF_T count, int type)
 {
-	bool ret;
+	BOOL ret;
 
 	DEBUG(8,("posix_fcntl_lock %d %d %.0f %.0f %d\n",fsp->fh->fd,op,(double)offset,(double)count,type));
 
-	ret = SMB_VFS_LOCK(fsp, op, offset, count, type);
+	ret = SMB_VFS_LOCK(fsp,fsp->fh->fd,op,offset,count,type);
 
 	if (!ret && ((errno == EFBIG) || (errno == ENOLCK) || (errno ==  EINVAL))) {
 
 		DEBUG(0,("posix_fcntl_lock: WARNING: lock request at offset %.0f, length %.0f returned\n",
 					(double)offset,(double)count));
-		DEBUGADD(0,("an %s error. This can happen when using 64 bit lock offsets\n", strerror(errno)));
-		DEBUGADD(0,("on 32 bit NFS mounted file systems.\n"));
+		DEBUG(0,("an %s error. This can happen when using 64 bit lock offsets\n", strerror(errno)));
+		DEBUG(0,("on 32 bit NFS mounted file systems.\n"));
 
 		/*
 		 * If the offset is > 0x7FFFFFFF then this will cause problems on
@@ -212,7 +213,7 @@
 			DEBUG(0,("Count greater than 31 bits - retrying with 31 bit truncated length.\n"));
 			errno = 0;
 			count &= 0x7fffffff;
-			ret = SMB_VFS_LOCK(fsp, op, offset, count, type);
+			ret = SMB_VFS_LOCK(fsp,fsp->fh->fd,op,offset,count,type);
 		}
 	}
 
@@ -225,22 +226,22 @@
  broken NFS implementations.
 ****************************************************************************/
 
-static bool posix_fcntl_getlock(files_struct *fsp, SMB_OFF_T *poffset, SMB_OFF_T *pcount, int *ptype)
+static BOOL posix_fcntl_getlock(files_struct *fsp, SMB_OFF_T *poffset, SMB_OFF_T *pcount, int *ptype)
 {
 	pid_t pid;
-	bool ret;
+	BOOL ret;
 
 	DEBUG(8,("posix_fcntl_getlock %d %.0f %.0f %d\n",
 		fsp->fh->fd,(double)*poffset,(double)*pcount,*ptype));
 
-	ret = SMB_VFS_GETLOCK(fsp, poffset, pcount, ptype, &pid);
+	ret = SMB_VFS_GETLOCK(fsp,fsp->fh->fd,poffset,pcount,ptype,&pid);
 
 	if (!ret && ((errno == EFBIG) || (errno == ENOLCK) || (errno ==  EINVAL))) {
 
 		DEBUG(0,("posix_fcntl_getlock: WARNING: lock request at offset %.0f, length %.0f returned\n",
 					(double)*poffset,(double)*pcount));
-		DEBUGADD(0,("an %s error. This can happen when using 64 bit lock offsets\n", strerror(errno)));
-		DEBUGADD(0,("on 32 bit NFS mounted file systems.\n"));
+		DEBUG(0,("an %s error. This can happen when using 64 bit lock offsets\n", strerror(errno)));
+		DEBUG(0,("on 32 bit NFS mounted file systems.\n"));
 
 		/*
 		 * If the offset is > 0x7FFFFFFF then this will cause problems on
@@ -257,7 +258,7 @@
 			DEBUG(0,("Count greater than 31 bits - retrying with 31 bit truncated length.\n"));
 			errno = 0;
 			*pcount &= 0x7fffffff;
-			ret = SMB_VFS_GETLOCK(fsp,poffset,pcount,ptype,&pid);
+			ret = SMB_VFS_GETLOCK(fsp,fsp->fh->fd,poffset,pcount,ptype,&pid);
 		}
 	}
 
@@ -270,7 +271,7 @@
  region is locked, False otherwise.
 ****************************************************************************/
 
-bool is_posix_locked(files_struct *fsp,
+BOOL is_posix_locked(files_struct *fsp,
 			SMB_BIG_UINT *pu_offset,
 			SMB_BIG_UINT *pu_count,
 			enum brl_type *plock_type,
@@ -317,21 +318,49 @@
 /* The key used in the in-memory POSIX databases. */
 
 struct lock_ref_count_key {
-	struct file_id id;
+	SMB_DEV_T device;
+	SMB_INO_T inode;
 	char r;
 }; 
 
+struct fd_key {
+	SMB_DEV_T device;
+	SMB_INO_T inode;
+}; 
+
 /*******************************************************************
+ Form a static locking key for a dev/inode pair for the fd array.
+******************************************************************/
+
+static TDB_DATA fd_array_key(SMB_DEV_T dev, SMB_INO_T inode)
+{
+	static struct fd_key key;
+	TDB_DATA kbuf;
+
+	memset(&key, '\0', sizeof(key));
+	key.device = dev;
+	key.inode = inode;
+	kbuf.dptr = (char *)&key;
+	kbuf.dsize = sizeof(key);
+	return kbuf;
+}
+
+/*******************************************************************
  Form a static locking key for a dev/inode pair for the lock ref count
 ******************************************************************/
 
-static TDB_DATA locking_ref_count_key_fsp(files_struct *fsp,
-					  struct lock_ref_count_key *tmp)
+static TDB_DATA locking_ref_count_key(SMB_DEV_T dev, SMB_INO_T inode)
 {
-	ZERO_STRUCTP(tmp);
-	tmp->id = fsp->file_id;
-	tmp->r = 'r';
-	return make_tdb_data((uint8_t *)tmp, sizeof(*tmp));
+	static struct lock_ref_count_key key;
+	TDB_DATA kbuf;
+
+	memset(&key, '\0', sizeof(key));
+	key.device = dev;
+	key.inode = inode;
+	key.r = 'r';
+	kbuf.dptr = (char *)&key;
+	kbuf.dsize = sizeof(key);
+	return kbuf;
 }
 
 /*******************************************************************
@@ -340,40 +369,50 @@
 
 static TDB_DATA fd_array_key_fsp(files_struct *fsp)
 {
-	return make_tdb_data((uint8 *)&fsp->file_id, sizeof(fsp->file_id));
+	return fd_array_key(fsp->dev, fsp->inode);
 }
 
 /*******************************************************************
+ Convenience function to get a lock ref count key from an fsp.
+******************************************************************/
+
+static TDB_DATA locking_ref_count_key_fsp(files_struct *fsp)
+{
+	return locking_ref_count_key(fsp->dev, fsp->inode);
+}
+
+/*******************************************************************
  Create the in-memory POSIX lock databases.
 ********************************************************************/
 
-bool posix_locking_init(bool read_only)
+BOOL posix_locking_init(int read_only)
 {
-	if (posix_pending_close_db != NULL) {
-		return true;
+	if (posix_pending_close_tdb) {
+		return True;
 	}
-
-	posix_pending_close_db = db_open_rbt(NULL);
-
-	if (posix_pending_close_db == NULL) {
+	
+	if (!posix_pending_close_tdb) {
+		posix_pending_close_tdb = tdb_open_log(NULL, 0, TDB_INTERNAL,
+						   read_only?O_RDONLY:(O_RDWR|O_CREAT), 0644);
+	}
+	if (!posix_pending_close_tdb) {
 		DEBUG(0,("Failed to open POSIX pending close database.\n"));
-		return false;
+		return False;
 	}
 
-	return true;
+	return True;
 }
 
 /*******************************************************************
  Delete the in-memory POSIX lock databases.
 ********************************************************************/
 
-bool posix_locking_end(void)
+BOOL posix_locking_end(void)
 {
-	/*
-	 * Shouldn't we close all fd's here?
-	 */
-	TALLOC_FREE(posix_pending_close_db);
-	return true;
+	if (posix_pending_close_tdb && tdb_close(posix_pending_close_tdb) != 0) {
+		return False;
+	}
+	return True;
 }
 
 /****************************************************************************
@@ -397,34 +436,59 @@
 
 static void increment_windows_lock_ref_count(files_struct *fsp)
 {
-	struct lock_ref_count_key tmp;
-	struct db_record *rec;
-	int lock_ref_count = 0;
-	NTSTATUS status;
+	TDB_DATA kbuf = locking_ref_count_key_fsp(fsp);
+	TDB_DATA dbuf;
+	int lock_ref_count;
 
-	rec = posix_pending_close_db->fetch_locked(
-		posix_pending_close_db, talloc_tos(),
-		locking_ref_count_key_fsp(fsp, &tmp));
+	dbuf = tdb_fetch(posix_pending_close_tdb, kbuf);
+	if (dbuf.dptr == NULL) {
+		dbuf.dptr = (char *)SMB_MALLOC_P(int);
+		if (!dbuf.dptr) {
+			smb_panic("increment_windows_lock_ref_count: malloc fail.\n");
+		}
+		memset(dbuf.dptr, '\0', sizeof(int));
+		dbuf.dsize = sizeof(int);
+	}
 
-	SMB_ASSERT(rec != NULL);
+	memcpy(&lock_ref_count, dbuf.dptr, sizeof(int));
+	lock_ref_count++;
+	memcpy(dbuf.dptr, &lock_ref_count, sizeof(int));
+	
+	if (tdb_store(posix_pending_close_tdb, kbuf, dbuf, TDB_REPLACE) == -1) {
+		smb_panic("increment_windows_lock_ref_count: tdb_store_fail.\n");
+	}
+	SAFE_FREE(dbuf.dptr);
 
-	if (rec->value.dptr != NULL) {
-		SMB_ASSERT(rec->value.dsize == sizeof(lock_ref_count));
-		memcpy(&lock_ref_count, rec->value.dptr,
-		       sizeof(lock_ref_count));
+	DEBUG(10,("increment_windows_lock_ref_count for file now %s = %d\n",
+		fsp->fsp_name, lock_ref_count ));
+}
+
+static void decrement_windows_lock_ref_count(files_struct *fsp)
+{
+	TDB_DATA kbuf = locking_ref_count_key_fsp(fsp);
+	TDB_DATA dbuf;
+	int lock_ref_count;
+
+	dbuf = tdb_fetch(posix_pending_close_tdb, kbuf);
+	if (!dbuf.dptr) {
+		smb_panic("decrement_windows_lock_ref_count: logic error.\n");
 	}
 
-	lock_ref_count++;
+	memcpy(&lock_ref_count, dbuf.dptr, sizeof(int));
+	lock_ref_count--;
+	memcpy(dbuf.dptr, &lock_ref_count, sizeof(int));
 
-	status = rec->store(rec, make_tdb_data((uint8 *)&lock_ref_count,
-					       sizeof(lock_ref_count)), 0);
+	if (lock_ref_count < 0) {
+		smb_panic("decrement_windows_lock_ref_count: lock_count logic error.\n");
+	}
 
-	SMB_ASSERT(NT_STATUS_IS_OK(status));
+	if (tdb_store(posix_pending_close_tdb, kbuf, dbuf, TDB_REPLACE) == -1) {
+		smb_panic("decrement_windows_lock_ref_count: tdb_store_fail.\n");
+	}
+	SAFE_FREE(dbuf.dptr);
 
-	TALLOC_FREE(rec);
-
-	DEBUG(10,("increment_windows_lock_ref_count for file now %s = %d\n",
-		  fsp->fsp_name, lock_ref_count ));
+	DEBUG(10,("decrement_windows_lock_ref_count for file now %s = %d\n",
+		fsp->fsp_name, lock_ref_count ));
 }
 
 /****************************************************************************
@@ -433,67 +497,52 @@
 
 void reduce_windows_lock_ref_count(files_struct *fsp, unsigned int dcount)
 {
-	struct lock_ref_count_key tmp;
-	struct db_record *rec;
-	int lock_ref_count = 0;
-	NTSTATUS status;
+	TDB_DATA kbuf = locking_ref_count_key_fsp(fsp);
+	TDB_DATA dbuf;
+	int lock_ref_count;
 
-	rec = posix_pending_close_db->fetch_locked(
-		posix_pending_close_db, talloc_tos(),
-		locking_ref_count_key_fsp(fsp, &tmp));
+	dbuf = tdb_fetch(posix_pending_close_tdb, kbuf);
+	if (!dbuf.dptr) {
+		return;
+	}
 
-	SMB_ASSERT((rec != NULL)
-		   && (rec->value.dptr != NULL)
-		   && (rec->value.dsize == sizeof(lock_ref_count)));
-
-	memcpy(&lock_ref_count, rec->value.dptr, sizeof(lock_ref_count));
-
-	SMB_ASSERT(lock_ref_count > 0);
-
+	memcpy(&lock_ref_count, dbuf.dptr, sizeof(int));
 	lock_ref_count -= dcount;
 
-	status = rec->store(rec, make_tdb_data((uint8 *)&lock_ref_count,
-					       sizeof(lock_ref_count)), 0);
+	if (lock_ref_count < 0) {
+		smb_panic("reduce_windows_lock_ref_count: lock_count logic error.\n");
+	}
+	memcpy(dbuf.dptr, &lock_ref_count, sizeof(int));
+	
+	if (tdb_store(posix_pending_close_tdb, kbuf, dbuf, TDB_REPLACE) == -1) {
+		smb_panic("reduce_windows_lock_ref_count: tdb_store_fail.\n");
+	}
+	SAFE_FREE(dbuf.dptr);
 
-	SMB_ASSERT(NT_STATUS_IS_OK(status));
-
-	TALLOC_FREE(rec);
-
 	DEBUG(10,("reduce_windows_lock_ref_count for file now %s = %d\n",
-		  fsp->fsp_name, lock_ref_count ));
+		fsp->fsp_name, lock_ref_count ));
 }
 
-static void decrement_windows_lock_ref_count(files_struct *fsp)
-{
-	reduce_windows_lock_ref_count(fsp, 1);
-}
-
 /****************************************************************************
  Fetch the lock ref count.
 ****************************************************************************/
 
 static int get_windows_lock_ref_count(files_struct *fsp)
 {
-	struct lock_ref_count_key tmp;
+	TDB_DATA kbuf = locking_ref_count_key_fsp(fsp);
 	TDB_DATA dbuf;
-	int res;
-	int lock_ref_count = 0;
+	int lock_ref_count;
 
-	res = posix_pending_close_db->fetch(
-		posix_pending_close_db, talloc_tos(),
-		locking_ref_count_key_fsp(fsp, &tmp), &dbuf);
-
-	SMB_ASSERT(res == 0);
-
-	if (dbuf.dsize != 0) {
-		SMB_ASSERT(dbuf.dsize == sizeof(lock_ref_count));
-		memcpy(&lock_ref_count, dbuf.dptr, sizeof(lock_ref_count));
-		TALLOC_FREE(dbuf.dptr);
+	dbuf = tdb_fetch(posix_pending_close_tdb, kbuf);
+	if (!dbuf.dptr) {
+		lock_ref_count = 0;
+	} else {
+		memcpy(&lock_ref_count, dbuf.dptr, sizeof(int));
 	}
+	SAFE_FREE(dbuf.dptr);
 
 	DEBUG(10,("get_windows_lock_count for file %s = %d\n",
-		  fsp->fsp_name, lock_ref_count ));
-
+		fsp->fsp_name, lock_ref_count ));
 	return lock_ref_count;
 }
 
@@ -503,22 +552,11 @@
 
 static void delete_windows_lock_ref_count(files_struct *fsp)
 {
-	struct lock_ref_count_key tmp;
-	struct db_record *rec;
+	TDB_DATA kbuf = locking_ref_count_key_fsp(fsp);
 
-	rec = posix_pending_close_db->fetch_locked(
-		posix_pending_close_db, talloc_tos(),
-		locking_ref_count_key_fsp(fsp, &tmp));
-
-	SMB_ASSERT(rec != NULL);
-
 	/* Not a bug if it doesn't exist - no locks were ever granted. */
-
-	rec->delete_rec(rec);
-	TALLOC_FREE(rec);
-
-	DEBUG(10,("delete_windows_lock_ref_count for file %s\n",
-		  fsp->fsp_name));
+	tdb_delete(posix_pending_close_tdb, kbuf);
+	DEBUG(10,("delete_windows_lock_ref_count for file %s\n", fsp->fsp_name));
 }
 
 /****************************************************************************
@@ -527,35 +565,30 @@
 
 static void add_fd_to_close_entry(files_struct *fsp)
 {
-	struct db_record *rec;
-	uint8_t *new_data;
-	NTSTATUS status;
+	TDB_DATA kbuf = fd_array_key_fsp(fsp);
+	TDB_DATA dbuf;
 
-	rec = posix_pending_close_db->fetch_locked(
-		posix_pending_close_db, talloc_tos(),
-		fd_array_key_fsp(fsp));
+	dbuf.dptr = NULL;
+	dbuf.dsize = 0;
 
-	SMB_ASSERT(rec != NULL);
+	dbuf = tdb_fetch(posix_pending_close_tdb, kbuf);
 
-	new_data = TALLOC_ARRAY(
-		rec, uint8_t, rec->value.dsize + sizeof(fsp->fh->fd));
+	dbuf.dptr = (char *)SMB_REALLOC(dbuf.dptr, dbuf.dsize + sizeof(int));
+	if (!dbuf.dptr) {
+		smb_panic("add_fd_to_close_entry: Realloc fail !\n");
+	}
 
-	SMB_ASSERT(new_data != NULL);
+	memcpy(dbuf.dptr + dbuf.dsize, &fsp->fh->fd, sizeof(int));
+	dbuf.dsize += sizeof(int);
 
-	memcpy(new_data, rec->value.dptr, rec->value.dsize);
-	memcpy(new_data + rec->value.dsize,
-	       &fsp->fh->fd, sizeof(fsp->fh->fd));
+	if (tdb_store(posix_pending_close_tdb, kbuf, dbuf, TDB_REPLACE) == -1) {
+		smb_panic("add_fd_to_close_entry: tdb_store_fail.\n");
+	}
 
-	status = rec->store(
-		rec, make_tdb_data(new_data,
-				   rec->value.dsize + sizeof(fsp->fh->fd)), 0);
+	DEBUG(10,("add_fd_to_close_entry: added fd %d file %s\n",
+		fsp->fh->fd, fsp->fsp_name ));
 
-	SMB_ASSERT(NT_STATUS_IS_OK(status));
-
-	TALLOC_FREE(rec);
-
-	DEBUG(10,("add_fd_to_close_entry: added fd %d file %s\n",
-		  fsp->fh->fd, fsp->fsp_name ));
+	SAFE_FREE(dbuf.dptr);
 }
 
 /****************************************************************************
@@ -564,41 +597,37 @@
 
 static void delete_close_entries(files_struct *fsp)
 {
-	struct db_record *rec;
+	TDB_DATA kbuf = fd_array_key_fsp(fsp);
 
-	rec = posix_pending_close_db->fetch_locked(
-		posix_pending_close_db, talloc_tos(),
-		fd_array_key_fsp(fsp));
-
-	SMB_ASSERT(rec != NULL);
-	rec->delete_rec(rec);
-	TALLOC_FREE(rec);
+	if (tdb_delete(posix_pending_close_tdb, kbuf) == -1) {
+		smb_panic("delete_close_entries: tdb_delete fail !\n");
+	}
 }
 
 /****************************************************************************
- Get the array of POSIX pending close records for an open fsp. Returns number
- of entries.
+ Get the array of POSIX pending close records for an open fsp. Caller must
+ free. Returns number of entries.
 ****************************************************************************/
 
-static size_t get_posix_pending_close_entries(TALLOC_CTX *mem_ctx,
-					      files_struct *fsp, int **entries)
+static size_t get_posix_pending_close_entries(files_struct *fsp, int **entries)
 {
+	TDB_DATA kbuf = fd_array_key_fsp(fsp);
 	TDB_DATA dbuf;
-	int res;
+	size_t count = 0;
 
-	res = posix_pending_close_db->fetch(
-		posix_pending_close_db, mem_ctx, fd_array_key_fsp(fsp),
-		&dbuf);
+	*entries = NULL;
+	dbuf.dptr = NULL;
 
-	SMB_ASSERT(res == 0);
+	dbuf = tdb_fetch(posix_pending_close_tdb, kbuf);
 
-	if (dbuf.dsize == 0) {
-		*entries = NULL;
+	if (!dbuf.dptr) {
 		return 0;
 	}
 
 	*entries = (int *)dbuf.dptr;
-	return (size_t)(dbuf.dsize / sizeof(int));
+	count = (size_t)(dbuf.dsize / sizeof(int));
+
+	return count;
 }
 
 /****************************************************************************
@@ -607,34 +636,37 @@
  to delete all locks on this fsp before this function is called.
 ****************************************************************************/
 
-int fd_close_posix(struct files_struct *fsp)
+NTSTATUS fd_close_posix(struct connection_struct *conn, files_struct *fsp)
 {
 	int saved_errno = 0;
 	int ret;
 	int *fd_array = NULL;
 	size_t count, i;
 
-	if (!lp_locking(fsp->conn->params) ||
-	    !lp_posix_locking(fsp->conn->params))
-	{
+	if (!lp_locking(fsp->conn->params) || !lp_posix_locking(conn->params)) {
 		/*
 		 * No locking or POSIX to worry about or we want POSIX semantics
 		 * which will lose all locks on all fd's open on this dev/inode,
 		 * just close.
 		 */
-		return close(fsp->fh->fd);
+		ret = SMB_VFS_CLOSE(fsp,fsp->fh->fd);
+		fsp->fh->fd = -1;
+		if (ret == -1) {
+			return map_nt_error_from_unix(errno);
+		}
+		return NT_STATUS_OK;
 	}
 
 	if (get_windows_lock_ref_count(fsp)) {
 
 		/*
-		 * There are outstanding locks on this dev/inode pair on
-		 * other fds. Add our fd to the pending close tdb and set
-		 * fsp->fh->fd to -1.
+		 * There are outstanding locks on this dev/inode pair on other fds.
+		 * Add our fd to the pending close tdb and set fsp->fh->fd to -1.
 		 */
 
 		add_fd_to_close_entry(fsp);
-		return 0;
+		fsp->fh->fd = -1;
+		return NT_STATUS_OK;
 	}
 
 	/*
@@ -642,14 +674,13 @@
 	 * from the tdb and close them all.
 	 */
 
-	count = get_posix_pending_close_entries(talloc_tos(), fsp, &fd_array);
+	count = get_posix_pending_close_entries(fsp, &fd_array);
 
 	if (count) {
-		DEBUG(10,("fd_close_posix: doing close on %u fd's.\n",
-			  (unsigned int)count));
+		DEBUG(10,("fd_close_posix: doing close on %u fd's.\n", (unsigned int)count ));
 
 		for(i = 0; i < count; i++) {
-			if (close(fd_array[i]) == -1) {
+			if (SMB_VFS_CLOSE(fsp,fd_array[i]) == -1) {
 				saved_errno = errno;
 			}
 		}
@@ -662,7 +693,7 @@
 		delete_close_entries(fsp);
 	}
 
-	TALLOC_FREE(fd_array);
+	SAFE_FREE(fd_array);
 
 	/* Don't need a lock ref count on this dev/ino anymore. */
 	delete_windows_lock_ref_count(fsp);
@@ -671,14 +702,20 @@
 	 * Finally close the fd associated with this fsp.
 	 */
 
-	ret = close(fsp->fh->fd);
+	ret = SMB_VFS_CLOSE(fsp,fsp->fh->fd);
 
 	if (ret == 0 && saved_errno != 0) {
 		errno = saved_errno;
 		ret = -1;
+	} 
+
+	fsp->fh->fd = -1;
+
+	if (ret == -1) {
+		return map_nt_error_from_unix(errno);
 	}
 
-	return ret;
+	return NT_STATUS_OK;
 }
 
 /****************************************************************************
@@ -907,14 +944,11 @@
 				 * This logic case should never happen. Ensure this is the
 				 * case by forcing an abort.... Remove in production.
 				 */
-				char *msg = NULL;
+				pstring msg;
 
-				/* Don't check if alloc succeeds here - we're
-				 * forcing a core dump anyway. */
+				slprintf(msg, sizeof(msg)-1, "logic flaw in cases: l_curr: start = %.0f, size = %.0f : \
+lock: start = %.0f, size = %.0f\n", (double)l_curr->start, (double)l_curr->size, (double)lock->start, (double)lock->size );
 
-				asprintf(&msg, "logic flaw in cases: l_curr: start = %.0f, size = %.0f : \
-lock: start = %.0f, size = %.0f", (double)l_curr->start, (double)l_curr->size, (double)lock->start, (double)lock->size );
-
 				smb_panic(msg);
 			}
 		} /* end for ( l_curr = lhead; l_curr;) */
@@ -928,7 +962,7 @@
  lock could be granted, False if not.
 ****************************************************************************/
 
-bool set_posix_lock_windows_flavour(files_struct *fsp,
+BOOL set_posix_lock_windows_flavour(files_struct *fsp,
 			SMB_BIG_UINT u_offset,
 			SMB_BIG_UINT u_count,
 			enum brl_type lock_type,
@@ -940,7 +974,7 @@
 	SMB_OFF_T offset;
 	SMB_OFF_T count;
 	int posix_lock_type = map_posix_lock_type(fsp,lock_type);
-	bool ret = True;
+	BOOL ret = True;
 	size_t lock_count;
 	TALLOC_CTX *l_ctx = NULL;
 	struct lock_list *llist = NULL;
@@ -1065,7 +1099,7 @@
  lock could be released, False if not.
 ****************************************************************************/
 
-bool release_posix_lock_windows_flavour(files_struct *fsp,
+BOOL release_posix_lock_windows_flavour(files_struct *fsp,
 				SMB_BIG_UINT u_offset,
 				SMB_BIG_UINT u_count,
 				enum brl_type deleted_lock_type,
@@ -1075,7 +1109,7 @@
 {
 	SMB_OFF_T offset;
 	SMB_OFF_T count;
-	bool ret = True;
+	BOOL ret = True;
 	TALLOC_CTX *ul_ctx = NULL;
 	struct lock_list *ulist = NULL;
 	struct lock_list *ul = NULL;
@@ -1188,7 +1222,7 @@
  upper layer would have refused it.
 ****************************************************************************/
 
-bool set_posix_lock_posix_flavour(files_struct *fsp,
+BOOL set_posix_lock_posix_flavour(files_struct *fsp,
 			SMB_BIG_UINT u_offset,
 			SMB_BIG_UINT u_count,
 			enum brl_type lock_type,
@@ -1228,14 +1262,14 @@
  have a different lock context.
 ****************************************************************************/
 
-bool release_posix_lock_posix_flavour(files_struct *fsp,
+BOOL release_posix_lock_posix_flavour(files_struct *fsp,
 				SMB_BIG_UINT u_offset,
 				SMB_BIG_UINT u_count,
 				const struct lock_context *lock_ctx,
 				const struct lock_struct *plocks,
 				int num_locks)
 {
-	bool ret = True;
+	BOOL ret = True;
 	SMB_OFF_T offset;
 	SMB_OFF_T count;
 	TALLOC_CTX *ul_ctx = NULL;

Modified: branches/samba/upstream/source/modules/CP437.c
===================================================================
--- branches/samba/upstream/source/modules/CP437.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/CP437.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *  
  * This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
  * GNU General Public License for more details.
  *  
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"

Modified: branches/samba/upstream/source/modules/CP850.c
===================================================================
--- branches/samba/upstream/source/modules/CP850.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/CP850.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *  
  * This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
  * GNU General Public License for more details.
  *  
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"

Modified: branches/samba/upstream/source/modules/charset_macosxfs.c
===================================================================
--- branches/samba/upstream/source/modules/charset_macosxfs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/charset_macosxfs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /*
@@ -40,8 +41,8 @@
  * See if autoconf has found us the internal headers in some form.
  */
 #if HAVE_COREFOUNDATION_CFSTRINGENCODINGCONVERTER_H
-#	include <CoreFoundation/CFStringEncodingConverter.h>
-#	include <CoreFoundation/CFUnicodePrecomposition.h>
+#	include <Corefoundation/CFStringEncodingConverter.h>
+#	include <Corefoundation/CFUnicodePrecomposition.h>
 #	define USE_INTERNAL_API 1
 #elif HAVE_CFSTRINGENCODINGCONVERTER_H
 #	include <CFStringEncodingConverter.h>

Modified: branches/samba/upstream/source/modules/developer.c
===================================================================
--- branches/samba/upstream/source/modules/developer.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/developer.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/source/modules/getdate.c
===================================================================
--- branches/samba/upstream/source/modules/getdate.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/getdate.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -14,7 +14,9 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
 
 /* As a special exception, when this file is copied by Bison into a
    Bison output file, you may use that output file without restriction.
@@ -106,7 +108,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 /* Originally written by Steven M. Bellovin <smb at research.att.com> while
    at the University of North Carolina at Chapel Hill.  Later tweaked by

Modified: branches/samba/upstream/source/modules/getdate.h
===================================================================
--- branches/samba/upstream/source/modules/getdate.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/getdate.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -11,7 +11,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #if HAVE_CONFIG_H
 # include <config.h>

Modified: branches/samba/upstream/source/modules/getdate.y
===================================================================
--- branches/samba/upstream/source/modules/getdate.y	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/getdate.y	2008-06-15 01:55:18 UTC (rev 1953)
@@ -13,7 +13,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 /* Originally written by Steven M. Bellovin <smb at research.att.com> while
    at the University of North Carolina at Chapel Hill.  Later tweaked by

Modified: branches/samba/upstream/source/modules/gpfs.c
===================================================================
--- branches/samba/upstream/source/modules/gpfs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/gpfs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -22,11 +23,8 @@
 #ifdef HAVE_GPFS
 
 #include "gpfs_gpl.h"
-#include "vfs_gpfs.h"
 
 static void *libgpfs_handle = NULL;
-static bool gpfs_share_modes;
-static bool gpfs_leases;
 
 static int (*gpfs_set_share_fn)(int fd, unsigned int allow, unsigned int deny);
 static int (*gpfs_set_lease_fn)(int fd, unsigned int leaseType);
@@ -34,17 +32,13 @@
 static int (*gpfs_putacl_fn)(char *pathname, int flags, void *acl);
 
 
-bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
+BOOL set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
 			uint32 share_access)
 {
 	unsigned int allow = GPFS_SHARE_NONE;
 	unsigned int deny = GPFS_DENY_NONE;
 	int result;
 
-	if (!gpfs_share_modes) {
-		return True;
-	}
-	
 	if (gpfs_set_share_fn == NULL) {
 		return False;
 	}
@@ -90,10 +84,6 @@
 {
 	int gpfs_type = GPFS_LEASE_NONE;
 
-	if (!gpfs_leases) {
-		return True;
-	}
-
 	if (gpfs_set_lease_fn == NULL) {
 		errno = EINVAL;
 		return -1;
@@ -105,13 +95,6 @@
 	if (leasetype == F_WRLCK) {
 		gpfs_type = GPFS_LEASE_WRITE;
 	}
-	
-	/* we unconditionally set CAP_LEASE, rather than looking for
-	   -1/EACCES as there is a bug in some versions of
-	   libgpfs_gpl.so which results in a leaked fd on /dev/ss0
-	   each time we try this with the wrong capabilities set
-	*/
-	linux_set_lease_capability();
 	return gpfs_set_lease_fn(fd, gpfs_type);
 }
 
@@ -155,7 +138,15 @@
 	if (gpfs_set_share_fn == NULL) {
 		DEBUG(3, ("libgpfs_gpl.so does not contain the symbol "
 			  "'gpfs_set_share'\n"));
-		goto failed;
+		sys_dlclose(libgpfs_handle);
+
+		/* leave libgpfs_handle != NULL around, no point
+		   in trying twice */
+		gpfs_set_share_fn = NULL;
+		gpfs_set_lease_fn = NULL;
+		gpfs_getacl_fn = NULL;
+		gpfs_putacl_fn = NULL;
+		return;
 	}
 
 	gpfs_set_lease_fn = sys_dlsym(libgpfs_handle, "gpfs_set_lease");
@@ -164,36 +155,45 @@
 			  "'gpfs_set_lease'\n"));
 		sys_dlclose(libgpfs_handle);
 
-		goto failed;
+		/* leave libgpfs_handle != NULL around, no point
+		   in trying twice */
+		gpfs_set_share_fn = NULL;
+		gpfs_set_lease_fn = NULL;
+		gpfs_getacl_fn = NULL;
+		gpfs_putacl_fn = NULL;
+		return;
 	}
 
 	gpfs_getacl_fn = sys_dlsym(libgpfs_handle, "gpfs_getacl");
 	if (gpfs_getacl_fn == NULL) {
 		DEBUG(3, ("libgpfs_gpl.so does not contain the symbol "
 			  "'gpfs_getacl'\n"));
-		goto failed;
+		sys_dlclose(libgpfs_handle);
+
+		/* leave libgpfs_handle != NULL around, no point
+		   in trying twice */
+		gpfs_set_share_fn = NULL;
+		gpfs_set_lease_fn = NULL;
+		gpfs_getacl_fn = NULL;
+		gpfs_putacl_fn = NULL;
+		return;
 	}
 
 	gpfs_putacl_fn = sys_dlsym(libgpfs_handle, "gpfs_putacl");
 	if (gpfs_putacl_fn == NULL) {
 		DEBUG(3, ("libgpfs_gpl.so does not contain the symbol "
 			  "'gpfs_putacl'\n"));
-		goto failed;
+		sys_dlclose(libgpfs_handle);
+
+		/* leave libgpfs_handle != NULL around, no point
+		   in trying twice */
+		gpfs_set_share_fn = NULL;
+		gpfs_set_lease_fn = NULL;
+		gpfs_getacl_fn = NULL;
+		gpfs_putacl_fn = NULL;
+		return;
 	}
 
-	gpfs_share_modes = lp_parm_bool(-1, "gpfs", "sharemodes", True);
-	gpfs_leases      = lp_parm_bool(-1, "gpfs", "leases", True);
-
-	return;
-
-failed:
-	sys_dlclose(libgpfs_handle);
-	/* leave libgpfs_handle != NULL around, no point
-	   in trying twice */
-	gpfs_set_share_fn = NULL;
-	gpfs_set_lease_fn = NULL;
-	gpfs_getacl_fn = NULL;
-	gpfs_putacl_fn = NULL;
 }
 
 #else
@@ -208,7 +208,7 @@
 	return -1;
 }
 
-bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
+BOOL set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
 			uint32 share_access)
 {
 	DEBUG(0, ("VFS module - smbgpfs.so loaded, without gpfs support compiled\n"));

Modified: branches/samba/upstream/source/modules/nfs4_acls.c
===================================================================
--- branches/samba/upstream/source/modules/nfs4_acls.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/nfs4_acls.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
@@ -14,15 +14,13 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
 #include "nfs4_acls.h"
 
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_ACLS
-
 #define SMBACL4_PARAM_TYPE_NAME "nfs4"
 
 #define SMB_ACE4_INT_MAGIC 0x76F8A967
@@ -44,7 +42,7 @@
 
 extern struct current_user current_user;
 extern int try_chown(connection_struct *conn, const char *fname, uid_t uid, gid_t gid);
-extern NTSTATUS unpack_nt_owners(int snum, uid_t *puser, gid_t *pgrp,
+extern BOOL unpack_nt_owners(int snum, uid_t *puser, gid_t *pgrp,
 	uint32 security_info_sent, SEC_DESC *psd);
 
 static SMB_ACL4_INT_T *get_validated_aclint(SMB4ACL_T *acl)
@@ -85,14 +83,15 @@
 
 SMB4ACL_T *smb_create_smb4acl(void)
 {
-	TALLOC_CTX *mem_ctx = talloc_tos();
-	SMB_ACL4_INT_T	*acl = (SMB_ACL4_INT_T *)TALLOC_ZERO_SIZE(mem_ctx, sizeof(SMB_ACL4_INT_T));
+	TALLOC_CTX *mem_ctx = main_loop_talloc_get();
+	SMB_ACL4_INT_T	*acl = (SMB_ACL4_INT_T *)TALLOC_SIZE(mem_ctx, sizeof(SMB_ACL4_INT_T));
 	if (acl==NULL)
 	{
 		DEBUG(0, ("TALLOC_SIZE failed\n"));
 		errno = ENOMEM;
 		return NULL;
 	}
+	memset(acl, 0, sizeof(SMB_ACL4_INT_T));
 	acl->magic = SMB_ACL4_INT_MAGIC;
 	/* acl->first, last = NULL not needed */
 	return (SMB4ACL_T *)acl;
@@ -101,16 +100,17 @@
 SMB4ACE_T *smb_add_ace4(SMB4ACL_T *acl, SMB_ACE4PROP_T *prop)
 {
 	SMB_ACL4_INT_T *aclint = get_validated_aclint(acl);
-	TALLOC_CTX *mem_ctx = talloc_tos();
+	TALLOC_CTX *mem_ctx = main_loop_talloc_get();
 	SMB_ACE4_INT_T *ace;
 
-	ace = (SMB_ACE4_INT_T *)TALLOC_ZERO_SIZE(mem_ctx, sizeof(SMB_ACE4_INT_T));
+	ace = (SMB_ACE4_INT_T *)TALLOC_SIZE(mem_ctx, sizeof(SMB_ACE4_INT_T));
 	if (ace==NULL)
 	{
 		DEBUG(0, ("TALLOC_SIZE failed\n"));
 		errno = ENOMEM;
 		return NULL;
 	}
+	memset(ace, 0, sizeof(SMB_ACE4_INT_T));
 	ace->magic = SMB_ACE4_INT_MAGIC;
 	/* ace->next = NULL not needed */
 	memcpy(&ace->prop, prop, sizeof(SMB_ACE4PROP_T));
@@ -164,41 +164,30 @@
 	return aclint->naces;
 }
 
-static int smbacl4_GetFileOwner(struct connection_struct *conn,
-				const char *filename,
-				SMB_STRUCT_STAT *psbuf)
+static int smbacl4_GetFileOwner(files_struct *fsp, SMB_STRUCT_STAT *psbuf)
 {
 	memset(psbuf, 0, sizeof(SMB_STRUCT_STAT));
-
-	/* Get the stat struct for the owner info. */
-	if (SMB_VFS_STAT(conn, filename, psbuf) != 0)
-	{
-		DEBUG(8, ("SMB_VFS_STAT failed with error %s\n",
-			strerror(errno)));
-		return -1;
-	}
-
-	return 0;
-}
-
-static int smbacl4_fGetFileOwner(files_struct *fsp, SMB_STRUCT_STAT *psbuf)
-{
-	memset(psbuf, 0, sizeof(SMB_STRUCT_STAT));
-
 	if (fsp->is_directory || fsp->fh->fd == -1) {
-		return smbacl4_GetFileOwner(fsp->conn, fsp->fsp_name, psbuf);
+		/* Get the stat struct for the owner info. */
+		if (SMB_VFS_STAT(fsp->conn,fsp->fsp_name, psbuf) != 0)
+		{
+			DEBUG(8, ("SMB_VFS_STAT failed with error %s\n",
+				strerror(errno)));
+			return -1;
+		}
+	} else {
+		if (SMB_VFS_FSTAT(fsp,fsp->fh->fd, psbuf) != 0)
+		{
+			DEBUG(8, ("SMB_VFS_FSTAT failed with error %s\n",
+				strerror(errno)));
+			return -1;
+		}
 	}
-	if (SMB_VFS_FSTAT(fsp, psbuf) != 0)
-	{
-		DEBUG(8, ("SMB_VFS_FSTAT failed with error %s\n",
-			strerror(errno)));
-		return -1;
-	}
 
 	return 0;
 }
 
-static bool smbacl4_nfs42win(TALLOC_CTX *mem_ctx, SMB4ACL_T *acl, /* in */
+static BOOL smbacl4_nfs42win(SMB4ACL_T *acl, /* in */
 	DOM_SID *psid_owner, /* in */
 	DOM_SID *psid_group, /* in */
 	SEC_ACE **ppnt_ace_list, /* out */
@@ -209,18 +198,25 @@
 	SMB_ACE4_INT_T *aceint;
 	SEC_ACE *nt_ace_list = NULL;
 	int good_aces = 0;
+	TALLOC_CTX *mem_ctx = main_loop_talloc_get();
 
 	DEBUG(10, ("smbacl_nfs42win entered"));
 
 	aclint = get_validated_aclint(acl);
-	/* We do not check for naces being 0 or acl being NULL here because it is done upstream */
-	/* in smb_get_nt_acl_nfs4(). */
-	nt_ace_list = (SEC_ACE *)TALLOC_ZERO_SIZE(mem_ctx, aclint->naces * sizeof(SEC_ACE));
-	if (nt_ace_list==NULL)
-	{
-		DEBUG(10, ("talloc error"));
-		errno = ENOMEM;
+	if (aclint==NULL)
 		return False;
+
+	if (aclint->naces) {
+		nt_ace_list = (SEC_ACE *)TALLOC_SIZE(mem_ctx, aclint->naces * sizeof(SEC_ACE));
+		if (nt_ace_list==NULL)
+		{
+			DEBUG(10, ("talloc error"));
+			errno = ENOMEM;
+			return False;
+		}
+		memset(nt_ace_list, 0, aclint->naces * sizeof(SEC_ACE));
+	} else {
+		nt_ace_list = NULL;
 	}
 
 	for (aceint=aclint->first; aceint!=NULL; aceint=(SMB_ACE4_INT_T *)aceint->next) {
@@ -257,7 +253,7 @@
 			}
 		}
 		DEBUG(10, ("mapped %d to %s\n", ace->who.id,
-			   sid_string_dbg(&sid)));
+			sid_string_static(&sid)));
 
 		init_sec_access(&mask, ace->aceMask);
 		init_sec_ace(&nt_ace_list[good_aces++], &sid,
@@ -271,91 +267,70 @@
 	return True;
 }
 
-static NTSTATUS smb_get_nt_acl_nfs4_common(const SMB_STRUCT_STAT *sbuf,
+size_t smb_get_nt_acl_nfs4(files_struct *fsp,
 	uint32 security_info,
 	SEC_DESC **ppdesc, SMB4ACL_T *acl)
 {
 	int	good_aces = 0;
+	SMB_STRUCT_STAT sbuf;
 	DOM_SID sid_owner, sid_group;
 	size_t sd_size = 0;
 	SEC_ACE *nt_ace_list = NULL;
 	SEC_ACL *psa = NULL;
-	TALLOC_CTX *mem_ctx = talloc_tos();
+	TALLOC_CTX *mem_ctx = main_loop_talloc_get();
 
+	DEBUG(10, ("smb_get_nt_acl_nfs4 invoked for %s\n", fsp->fsp_name));
+
 	if (acl==NULL || smb_get_naces(acl)==0)
-		return NT_STATUS_ACCESS_DENIED; /* special because we
-						 * shouldn't alloc 0 for
-						 * win */
+		return 0; /* special because we shouldn't alloc 0 for win */
 
-	uid_to_sid(&sid_owner, sbuf->st_uid);
-	gid_to_sid(&sid_group, sbuf->st_gid);
+	if (smbacl4_GetFileOwner(fsp, &sbuf))
+		return 0;
 
-	if (smbacl4_nfs42win(mem_ctx, acl, &sid_owner, &sid_group, &nt_ace_list, &good_aces)==False) {
+	uid_to_sid(&sid_owner, sbuf.st_uid);
+	gid_to_sid(&sid_group, sbuf.st_gid);
+
+	if (smbacl4_nfs42win(acl,
+		&sid_owner,
+		&sid_group,
+		&nt_ace_list,
+		&good_aces
+		)==False) {
 		DEBUG(8,("smbacl4_nfs42win failed\n"));
-		return map_nt_error_from_unix(errno);
+		return 0;
 	}
 
-	psa = make_sec_acl(mem_ctx, NT4_ACL_REVISION, good_aces, nt_ace_list);
+	psa = make_sec_acl(mem_ctx, NT4_ACL_REVISION,
+		good_aces, nt_ace_list);
 	if (psa == NULL) {
 		DEBUG(2,("make_sec_acl failed\n"));
-		return NT_STATUS_NO_MEMORY;
+		return 0;
 	}
 
 	DEBUG(10,("after make sec_acl\n"));
-	*ppdesc = make_sec_desc(mem_ctx, SEC_DESC_REVISION, SEC_DESC_SELF_RELATIVE,
-	                        (security_info & OWNER_SECURITY_INFORMATION) ? &sid_owner : NULL,
-	                        (security_info & GROUP_SECURITY_INFORMATION) ? &sid_group : NULL,
-	                        NULL, psa, &sd_size);
+	*ppdesc = make_sec_desc(mem_ctx, SEC_DESC_REVISION,
+		SEC_DESC_SELF_RELATIVE,
+		(security_info & OWNER_SECURITY_INFORMATION)
+		? &sid_owner : NULL,
+		(security_info & GROUP_SECURITY_INFORMATION)
+		? &sid_group : NULL,
+		NULL, psa, &sd_size);
 	if (*ppdesc==NULL) {
 		DEBUG(2,("make_sec_desc failed\n"));
-		return NT_STATUS_NO_MEMORY;
+		return 0;
 	}
 
-	DEBUG(10, ("smb_get_nt_acl_nfs4_common successfully exited with sd_size %d\n",
-		   ndr_size_security_descriptor(*ppdesc, 0)));
-
-	return NT_STATUS_OK;
+	DEBUG(10, ("smb_get_nt_acl_nfs4 successfully exited with sd_size %d\n", sd_size));
+	return sd_size;
 }
 
-NTSTATUS smb_fget_nt_acl_nfs4(files_struct *fsp,
-			       uint32 security_info,
-			       SEC_DESC **ppdesc, SMB4ACL_T *acl)
-{
-	SMB_STRUCT_STAT sbuf;
-
-	DEBUG(10, ("smb_fget_nt_acl_nfs4 invoked for %s\n", fsp->fsp_name));
-
-	if (smbacl4_fGetFileOwner(fsp, &sbuf)) {
-		return map_nt_error_from_unix(errno);
-	}
-
-	return smb_get_nt_acl_nfs4_common(&sbuf, security_info, ppdesc, acl);
-}
-
-NTSTATUS smb_get_nt_acl_nfs4(struct connection_struct *conn,
-			      const char *name,
-			      uint32 security_info,
-			      SEC_DESC **ppdesc, SMB4ACL_T *acl)
-{
-	SMB_STRUCT_STAT sbuf;
-
-	DEBUG(10, ("smb_get_nt_acl_nfs4 invoked for %s\n", name));
-
-	if (smbacl4_GetFileOwner(conn, name, &sbuf)) {
-		return map_nt_error_from_unix(errno);
-	}
-
-	return smb_get_nt_acl_nfs4_common(&sbuf, security_info, ppdesc, acl);
-}
-
 enum smbacl4_mode_enum {e_simple=0, e_special=1};
 enum smbacl4_acedup_enum {e_dontcare=0, e_reject=1, e_ignore=2, e_merge=3};
 
 typedef struct _smbacl4_vfs_params {
 	enum smbacl4_mode_enum mode;
-	bool do_chown;
+	BOOL do_chown;
 	enum smbacl4_acedup_enum acedup;
-	struct db_context *sid_mapping_table;
 } smbacl4_vfs_params;
 
 /*
@@ -455,65 +430,8 @@
 	return NULL;
 }
 
-static bool nfs4_map_sid(smbacl4_vfs_params *params, const DOM_SID *src,
-			 DOM_SID *dst)
-{
-	static struct db_context *mapping_db = NULL;
-	TDB_DATA data;
-	
-	if (mapping_db == NULL) {
-		const char *dbname = lp_parm_const_string(
-			-1, SMBACL4_PARAM_TYPE_NAME, "sidmap", NULL);
-		
-		if (dbname == NULL) {
-			DEBUG(10, ("%s:sidmap not defined\n",
-				   SMBACL4_PARAM_TYPE_NAME));
-			return False;
-		}
-		
-		become_root();
-		mapping_db = db_open(NULL, dbname, 0, TDB_DEFAULT,
-				     O_RDONLY, 0600);
-		unbecome_root();
-		
-		if (mapping_db == NULL) {
-			DEBUG(1, ("could not open sidmap: %s\n",
-				  strerror(errno)));
-			return False;
-		}
-	}
-	
-	if (mapping_db->fetch(mapping_db, NULL,
-			      string_term_tdb_data(sid_string_tos(src)),
-			      &data) == -1) {
-		DEBUG(10, ("could not find mapping for SID %s\n",
-			   sid_string_dbg(src)));
-		return False;
-	}
-	
-	if ((data.dptr == NULL) || (data.dsize <= 0)
-	    || (data.dptr[data.dsize-1] != '\0')) {
-		DEBUG(5, ("invalid mapping for SID %s\n",
-			  sid_string_dbg(src)));
-		TALLOC_FREE(data.dptr);
-		return False;
-	}
-	
-	if (!string_to_sid(dst, (char *)data.dptr)) {
-		DEBUG(1, ("invalid mapping %s for SID %s\n",
-			  (char *)data.dptr, sid_string_dbg(src)));
-		TALLOC_FREE(data.dptr);
-		return False;
-	}
-
-	TALLOC_FREE(data.dptr);
-	
-	return True;
-}
-
-static bool smbacl4_fill_ace4(
+static int smbacl4_fill_ace4(
 	TALLOC_CTX *mem_ctx,
-	const char *filename,
 	smbacl4_vfs_params *params,
 	uid_t ownerUID,
 	gid_t ownerGID,
@@ -521,10 +439,16 @@
 	SMB_ACE4PROP_T *ace_v4 /* output */
 )
 {
-	DEBUG(10, ("got ace for %s\n", sid_string_dbg(&ace_nt->trustee)));
+	const char *dom, *name;
+	enum lsa_SidType type;
+	uid_t uid;
+	gid_t gid;
 
+	DEBUG(10, ("got ace for %s\n",
+		sid_string_static(&ace_nt->trustee)));
+
 	memset(ace_v4, 0, sizeof(SMB_ACE4PROP_T));
-	ace_v4->aceType = ace_nt->type; /* only ACCESS|DENY supported right now */
+	ace_v4->aceType = ace_nt->type; /* only ACCES|DENY supported right now */
 	ace_v4->aceFlags = ace_nt->flags & SEC_ACE_FLAG_VALID_INHERIT;
 	ace_v4->aceMask = ace_nt->access_mask &
 		(STD_RIGHT_ALL_ACCESS | SA_RIGHT_FILE_ALL_ACCESS);
@@ -541,46 +465,18 @@
 		ace_v4->who.special_id = SMB_ACE4_WHO_EVERYONE;
 		ace_v4->flags |= SMB_ACE4_ID_SPECIAL;
 	} else {
-		const char *dom, *name;
-		enum lsa_SidType type;
-		uid_t uid;
-		gid_t gid;
-		DOM_SID sid;
-		
-		sid_copy(&sid, &ace_nt->trustee);
-		
-		if (!lookup_sid(mem_ctx, &sid, &dom, &name, &type)) {
-			
-			DOM_SID mapped;
-			
-			if (!nfs4_map_sid(params, &sid, &mapped)) {
-				DEBUG(1, ("nfs4_acls.c: file [%s]: SID %s "
-					  "unknown\n", filename, sid_string_dbg(&sid)));
-				errno = EINVAL;
-				return False;
-			}
-			
-			DEBUG(2, ("nfs4_acls.c: file [%s]: mapped SID %s "
-				  "to %s\n", filename, sid_string_dbg(&sid), sid_string_dbg(&mapped)));
-			
-			if (!lookup_sid(mem_ctx, &mapped, &dom,
-					&name, &type)) {
-				DEBUG(1, ("nfs4_acls.c: file [%s]: SID %s "
-					  "mapped from %s is unknown\n",
-					  filename, sid_string_dbg(&mapped), sid_string_dbg(&sid)));
-				errno = EINVAL;
-				return False;
-			}
-			
-			sid_copy(&sid, &mapped);
+		if (!lookup_sid(mem_ctx, &ace_nt->trustee, &dom, &name, &type)) {
+			DEBUG(8, ("Could not find %s' type\n",
+				sid_string_static(&ace_nt->trustee)));
+			errno = EINVAL;
+			return -1;
 		}
-		
+
 		if (type == SID_NAME_USER) {
-			if (!sid_to_uid(&sid, &uid)) {
-				DEBUG(1, ("nfs4_acls.c: file [%s]: could not "
-					  "convert %s to uid\n", filename,
-					  sid_string_dbg(&sid)));
-				return False;
+			if (!sid_to_uid(&ace_nt->trustee, &uid)) {
+				DEBUG(2, ("Could not convert %s to uid\n",
+					sid_string_static(&ace_nt->trustee)));
+				return -1;
 			}
 
 			if (params->mode==e_special && uid==ownerUID) {
@@ -590,13 +486,11 @@
 				ace_v4->who.uid = uid;
 			}
 		} else { /* else group? - TODO check it... */
-			if (!sid_to_gid(&sid, &gid)) {
-				DEBUG(1, ("nfs4_acls.c: file [%s]: could not "
-					  "convert %s to gid\n", filename,
-					  sid_string_dbg(&sid)));
-				return False;
+			if (!sid_to_gid(&ace_nt->trustee, &gid)) {
+				DEBUG(2, ("Could not convert %s to gid\n",
+					sid_string_static(&ace_nt->trustee)));
+				return -1;
 			}
-				
 			ace_v4->aceFlags |= SMB_ACE4_IDENTIFIER_GROUP;
 
 			if (params->mode==e_special && gid==ownerGID) {
@@ -608,14 +502,14 @@
 		}
 	}
 
-	return True; /* OK */
+	return 0; /* OK */
 }
 
 static int smbacl4_MergeIgnoreReject(
 	enum smbacl4_acedup_enum acedup,
 	SMB4ACL_T *acl, /* may modify it */
 	SMB_ACE4PROP_T *ace, /* the "new" ACE */
-	bool	*paddNewACE,
+	BOOL	*paddNewACE,
 	int	i
 )
 {
@@ -646,7 +540,6 @@
 }
 
 static SMB4ACL_T *smbacl4_win2nfs4(
-	const char *filename,
 	SEC_ACL *dacl,
 	smbacl4_vfs_params *pparams,
 	uid_t ownerUID,
@@ -655,7 +548,7 @@
 {
 	SMB4ACL_T *acl;
 	uint32	i;
-	TALLOC_CTX *mem_ctx = talloc_tos();
+	TALLOC_CTX *mem_ctx = main_loop_talloc_get();
 
 	DEBUG(10, ("smbacl4_win2nfs4 invoked\n"));
 
@@ -665,16 +558,11 @@
 
 	for(i=0; i<dacl->num_aces; i++) {
 		SMB_ACE4PROP_T	ace_v4;
-		bool	addNewACE = True;
+		BOOL	addNewACE = True;
 
-		if (!smbacl4_fill_ace4(mem_ctx, filename, pparams,
-				       ownerUID, ownerGID,
-				       dacl->aces + i, &ace_v4)) {
-			DEBUG(3, ("Could not fill ace for file %s, SID %s\n",
-				  filename,
-				  sid_string_dbg(&((dacl->aces+i)->trustee))));
-			continue;
-		}
+		if (smbacl4_fill_ace4(mem_ctx, pparams, ownerUID, ownerGID,
+			dacl->aces + i, &ace_v4))
+			return NULL;
 
 		if (pparams->acedup!=e_dontcare) {
 			if (smbacl4_MergeIgnoreReject(pparams->acedup, acl,
@@ -689,17 +577,17 @@
 	return acl;
 }
 
-NTSTATUS smb_set_nt_acl_nfs4(files_struct *fsp,
+BOOL smb_set_nt_acl_nfs4(files_struct *fsp,
 	uint32 security_info_sent,
 	SEC_DESC *psd,
 	set_nfs4acl_native_fn_t set_nfs4_native)
 {
 	smbacl4_vfs_params params;
 	SMB4ACL_T *acl = NULL;
-	bool	result;
+	BOOL	result;
 
 	SMB_STRUCT_STAT sbuf;
-	bool need_chown = False;
+	BOOL need_chown = False;
 	uid_t newUID = (uid_t)-1;
 	gid_t newGID = (gid_t)-1;
 
@@ -710,40 +598,38 @@
 	{
 		DEBUG(9, ("security_info_sent (0x%x) ignored\n",
 			security_info_sent));
-		return NT_STATUS_OK; /* won't show error - later to be refined... */
+		return True; /* won't show error - later to be refined... */
 	}
 
 	/* Special behaviours */
 	if (smbacl4_get_vfs_params(SMBACL4_PARAM_TYPE_NAME, fsp, &params))
-		return NT_STATUS_NO_MEMORY;
+		return False;
 
-	if (smbacl4_fGetFileOwner(fsp, &sbuf))
-		return map_nt_error_from_unix(errno);
+	if (smbacl4_GetFileOwner(fsp, &sbuf))
+		return False;
 
 	if (params.do_chown) {
 		/* chown logic is a copy/paste from posix_acl.c:set_nt_acl */
-		NTSTATUS status = unpack_nt_owners(SNUM(fsp->conn), &newUID, &newGID, security_info_sent, psd);
-		if (!NT_STATUS_IS_OK(status)) {
+		if (!unpack_nt_owners(SNUM(fsp->conn), &newUID, &newGID, security_info_sent, psd))
+		{
 			DEBUG(8, ("unpack_nt_owners failed"));
-			return status;
+			return False;
 		}
 		if (((newUID != (uid_t)-1) && (sbuf.st_uid != newUID)) ||
-		    ((newGID != (gid_t)-1) && (sbuf.st_gid != newGID))) {
+			((newGID != (gid_t)-1) && (sbuf.st_gid != newGID))) {
 			need_chown = True;
 		}
 		if (need_chown) {
 			if ((newUID == (uid_t)-1 || newUID == current_user.ut.uid)) {
 				if(try_chown(fsp->conn, fsp->fsp_name, newUID, newGID)) {
 					DEBUG(3,("chown %s, %u, %u failed. Error = %s.\n",
-						 fsp->fsp_name, (unsigned int)newUID, (unsigned int)newGID, 
-						 strerror(errno)));
-					return map_nt_error_from_unix(errno);
+						fsp->fsp_name, (unsigned int)newUID, (unsigned int)newGID, strerror(errno) ));
+					return False;
 				}
-
 				DEBUG(10,("chown %s, %u, %u succeeded.\n",
-					  fsp->fsp_name, (unsigned int)newUID, (unsigned int)newGID));
-				if (smbacl4_GetFileOwner(fsp->conn, fsp->fsp_name, &sbuf))
-					return map_nt_error_from_unix(errno);
+					fsp->fsp_name, (unsigned int)newUID, (unsigned int)newGID));
+				if (smbacl4_GetFileOwner(fsp, &sbuf))
+					return False;
 				need_chown = False;
 			} else { /* chown is needed, but _after_ changing acl */
 				sbuf.st_uid = newUID; /* OWNER@ in case of e_special */
@@ -754,9 +640,9 @@
 
 	if ((security_info_sent & DACL_SECURITY_INFORMATION)!=0 && psd->dacl!=NULL)
 	{
-		acl = smbacl4_win2nfs4(fsp->fsp_name, psd->dacl, &params, sbuf.st_uid, sbuf.st_gid);
+		acl = smbacl4_win2nfs4(psd->dacl, &params, sbuf.st_uid, sbuf.st_gid);
 		if (!acl)
-			return map_nt_error_from_unix(errno);
+			return False;
 
 		smbacl4_dump_nfs4acl(10, acl);
 
@@ -764,7 +650,7 @@
 		if (result!=True)
 		{
 			DEBUG(10, ("set_nfs4_native failed with %s\n", strerror(errno)));
-			return map_nt_error_from_unix(errno);
+			return False;
 		}
 	} else
 		DEBUG(10, ("no dacl found; security_info_sent = 0x%x\n", security_info_sent));
@@ -772,17 +658,17 @@
 	/* Any chown pending? */
 	if (need_chown) {
 		DEBUG(3,("chown#2 %s. uid = %u, gid = %u.\n",
-			 fsp->fsp_name, (unsigned int)newUID, (unsigned int)newGID));
+			fsp->fsp_name, (unsigned int)newUID, (unsigned int)newGID));
 		if (try_chown(fsp->conn, fsp->fsp_name, newUID, newGID)) {
 			DEBUG(2,("chown#2 %s, %u, %u failed. Error = %s.\n",
-				 fsp->fsp_name, (unsigned int)newUID, (unsigned int)newGID,
-				 strerror(errno)));
-			return map_nt_error_from_unix(errno);
+				fsp->fsp_name, (unsigned int)newUID, (unsigned int)newGID,
+				strerror(errno)));
+			return False;
 		}
 		DEBUG(10,("chown#2 %s, %u, %u succeeded.\n",
-			  fsp->fsp_name, (unsigned int)newUID, (unsigned int)newGID));
+			fsp->fsp_name, (unsigned int)newUID, (unsigned int)newGID));
 	}
 
 	DEBUG(10, ("smb_set_nt_acl_nfs4 succeeded\n"));
-	return NT_STATUS_OK;
+	return True;
 }

Modified: branches/samba/upstream/source/modules/nfs4_acls.h
===================================================================
--- branches/samba/upstream/source/modules/nfs4_acls.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/nfs4_acls.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #ifndef __NFS4_ACLS_H__
@@ -129,20 +130,15 @@
 
 uint32 smb_get_naces(SMB4ACL_T *acl);
 
-NTSTATUS smb_fget_nt_acl_nfs4(files_struct *fsp,
+size_t smb_get_nt_acl_nfs4(files_struct *fsp,
 	uint32 security_info,
 	SEC_DESC **ppdesc, SMB4ACL_T *acl);
 
-NTSTATUS smb_get_nt_acl_nfs4(connection_struct *conn,
-	const char *name,
-	uint32 security_info,
-	SEC_DESC **ppdesc, SMB4ACL_T *acl);
-
 /* Callback function needed to set the native acl
  * when applicable */
-typedef bool (*set_nfs4acl_native_fn_t)(files_struct *, SMB4ACL_T *);
+typedef BOOL (*set_nfs4acl_native_fn_t)(files_struct *, SMB4ACL_T *);
 
-NTSTATUS smb_set_nt_acl_nfs4(files_struct *fsp,
+BOOL smb_set_nt_acl_nfs4(files_struct *fsp,
 	uint32 security_info_sent,
 	SEC_DESC *psd,
 	set_nfs4acl_native_fn_t set_nfs4_native);

Modified: branches/samba/upstream/source/modules/vfs_afsacl.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_afsacl.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_afsacl.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *  
  * This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  * GNU General Public License for more details.
  *  
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -39,12 +40,12 @@
 static char space_replacement = '%';
 
 /* Do we expect SIDs as pts names? */
-static bool sidpts;
+static BOOL sidpts;
 
 extern int afs_syscall(int, char *, int, char *, int);
 
 struct afs_ace {
-	bool positive;
+	BOOL positive;
 	char *name;
 	DOM_SID sid;
 	enum lsa_SidType type;
@@ -65,7 +66,7 @@
 };
 
 
-static bool init_afs_acl(struct afs_acl *acl)
+static BOOL init_afs_acl(struct afs_acl *acl)
 {
 	ZERO_STRUCT(*acl);
 	acl->ctx = talloc_init("afs_acl");
@@ -105,7 +106,7 @@
 }
 	
 static struct afs_ace *new_afs_ace(TALLOC_CTX *mem_ctx,
-				   bool positive,
+				   BOOL positive,
 				   const char *name, uint32 rights)
 {
 	DOM_SID sid;
@@ -141,7 +142,7 @@
 		if (string_to_sid(&sid, name)) {
 			const char *user, *domain;
 			/* We have to find the type, look up the SID */
-			lookup_sid(talloc_tos(), &sid,
+			lookup_sid(tmp_talloc_ctx(), &sid,
 				   &domain, &user, &type);
 		}
 
@@ -155,7 +156,7 @@
 			*p = '\\';
 		}
 
-		if (!lookup_name(talloc_tos(), name, LOOKUP_NAME_ALL,
+		if (!lookup_name(tmp_talloc_ctx(), name, LOOKUP_NAME_ALL,
 				 &domain, &uname, &sid, &type)) {
 			DEBUG(10, ("Could not find AFS user %s\n", name));
 
@@ -188,7 +189,7 @@
 }
 
 static void add_afs_ace(struct afs_acl *acl,
-			bool positive,
+			BOOL positive,
 			const char *name, uint32 rights)
 {
 	struct afs_ace *ace;
@@ -227,7 +228,7 @@
  * Second field: Rights
  */
 
-static bool parse_afs_acl(struct afs_acl *acl, const char *acl_str)
+static BOOL parse_afs_acl(struct afs_acl *acl, const char *acl_str)
 {
 	int nplus, nminus;
 	int aces;
@@ -290,7 +291,7 @@
 	return True;
 }
 
-static bool unparse_afs_acl(struct afs_acl *acl, char *acl_str)
+static BOOL unparse_afs_acl(struct afs_acl *acl, char *acl_str)
 {
 	/* TODO: String length checks!!!! */
 
@@ -414,7 +415,7 @@
 	return;
 }
 
-static bool same_principal(struct afs_ace *x, struct afs_ace *y)
+static BOOL same_principal(struct afs_ace *x, struct afs_ace *y)
 {
 	return ( (x->positive == y->positive) &&
 		 (sid_compare(&x->sid, &y->sid) == 0) );
@@ -430,7 +431,7 @@
 
 	for (ace = dir_acl->acelist; ace != NULL; ace = ace->next) {
 		struct afs_ace *file_ace;
-		bool found = False;
+		BOOL found = False;
 
 		for (file_ace = file_acl->acelist;
 		     file_ace != NULL;
@@ -450,7 +451,7 @@
 
 	for (ace = file_acl->acelist; ace != NULL; ace = ace->next) {
 		struct afs_ace *dir_ace;
-		bool already_seen = False;
+		BOOL already_seen = False;
 
 		for (dir_ace = dir_acl->acelist;
 		     dir_ace != NULL;
@@ -531,7 +532,7 @@
 static uint32 nt_to_afs_dir_rights(const char *filename, const SEC_ACE *ace)
 {
 	uint32 result = 0;
-	uint32 rights = ace->access_mask;
+	uint32 rights = ace->info.mask;
 	uint8 flags = ace->flags;
 
 	struct static_dir_ace_mapping *m;
@@ -539,12 +540,12 @@
 	for (m = &ace_mappings[0]; m->afs_rights != 9999; m++) {
 		if ( (ace->type == m->type) &&
 		     (ace->flags == m->flags) &&
-		     (ace->access_mask == m->mask) )
+		     (ace->info.mask == m->mask) )
 			return m->afs_rights;
 	}
 
 	DEBUG(1, ("AFSACL FALLBACK: 0x%X 0x%X 0x%X %s %X\n",
-		  ace->type, ace->flags, ace->access_mask, filename, rights));
+		  ace->type, ace->flags, ace->info.mask, filename, rights));
 
 	if (rights & (GENERIC_ALL_ACCESS|WRITE_DAC_ACCESS)) {
 		result |= PRSFS_READ | PRSFS_WRITE | PRSFS_INSERT |
@@ -572,7 +573,7 @@
 static uint32 nt_to_afs_file_rights(const char *filename, const SEC_ACE *ace)
 {
 	uint32 result = 0;
-	uint32 rights = ace->access_mask;
+	uint32 rights = ace->info.mask;
 
 	if (rights & (GENERIC_READ_ACCESS|FILE_READ_DATA)) {
 		result |= PRSFS_READ;
@@ -585,24 +586,36 @@
 	return result;
 }
 
-static size_t afs_to_nt_acl_common(struct afs_acl *afs_acl,
-				   SMB_STRUCT_STAT *psbuf,
-				   uint32 security_info,
-				   struct security_descriptor **ppdesc)
+static size_t afs_to_nt_acl(struct afs_acl *afs_acl, 
+			    struct files_struct *fsp,
+			    uint32 security_info,
+			    struct security_descriptor **ppdesc)
 {
 	SEC_ACE *nt_ace_list;
 	DOM_SID owner_sid, group_sid;
 	SEC_ACCESS mask;
+	SMB_STRUCT_STAT sbuf;
 	SEC_ACL *psa = NULL;
 	int good_aces;
 	size_t sd_size;
-	TALLOC_CTX *mem_ctx = talloc_tos();
+	TALLOC_CTX *mem_ctx = main_loop_talloc_get();
 
 	struct afs_ace *afs_ace;
 
-	uid_to_sid(&owner_sid, psbuf->st_uid);
-	gid_to_sid(&group_sid, psbuf->st_gid);
+	if (fsp->is_directory || fsp->fh->fd == -1) {
+		/* Get the stat struct for the owner info. */
+		if(SMB_VFS_STAT(fsp->conn,fsp->fsp_name, &sbuf) != 0) {
+			return 0;
+		}
+	} else {
+		if(SMB_VFS_FSTAT(fsp,fsp->fh->fd,&sbuf) != 0) {
+			return 0;
+		}
+	}
 
+	uid_to_sid(&owner_sid, sbuf.st_uid);
+	gid_to_sid(&group_sid, sbuf.st_gid);
+
 	if (afs_acl->num_aces) {
 		nt_ace_list = TALLOC_ARRAY(mem_ctx, SEC_ACE, afs_acl->num_aces);
 
@@ -627,7 +640,7 @@
 			continue;
 		}
 
-		if (S_ISDIR(psbuf->st_mode))
+		if (fsp->is_directory)
 			afs_to_nt_dir_rights(afs_ace->rights, &nt_rights,
 					     &flag);
 		else
@@ -644,6 +657,7 @@
 	if (psa == NULL)
 		return 0;
 
+	
 	*ppdesc = make_sec_desc(mem_ctx, SEC_DESC_REVISION,
 				SEC_DESC_SELF_RELATIVE,
 				(security_info & OWNER_SECURITY_INFORMATION)
@@ -655,44 +669,8 @@
 	return sd_size;
 }
 
-static size_t afs_to_nt_acl(struct afs_acl *afs_acl,
-			    struct connection_struct *conn,
-			    const char *name,
-			    uint32 security_info,
-			    struct security_descriptor **ppdesc)
+static BOOL mappable_sid(const DOM_SID *sid)
 {
-	SMB_STRUCT_STAT sbuf;
-
-	/* Get the stat struct for the owner info. */
-	if(SMB_VFS_STAT(conn, name, &sbuf) != 0) {
-		return 0;
-	}
-
-	return afs_to_nt_acl_common(afs_acl, &sbuf, security_info, ppdesc);
-}
-
-static size_t afs_fto_nt_acl(struct afs_acl *afs_acl,
-			     struct files_struct *fsp,
-			     uint32 security_info,
-			     struct security_descriptor **ppdesc)
-{
-	SMB_STRUCT_STAT sbuf;
-
-	if (fsp->is_directory || fsp->fh->fd == -1) {
-		/* Get the stat struct for the owner info. */
-		return afs_to_nt_acl(afs_acl, fsp->conn, fsp->fsp_name,
-				     security_info, ppdesc);
-	}
-
-	if(SMB_VFS_FSTAT(fsp, &sbuf) != 0) {
-		return 0;
-	}
-
-	return afs_to_nt_acl_common(afs_acl, &sbuf, security_info, ppdesc);
-}
-
-static bool mappable_sid(const DOM_SID *sid)
-{
 	DOM_SID domain_sid;
 	
 	if (sid_compare(sid, &global_sid_Builtin_Administrators) == 0)
@@ -715,7 +693,7 @@
 	return False;
 }
 
-static bool nt_to_afs_acl(const char *filename,
+static BOOL nt_to_afs_acl(const char *filename,
 			  uint32 security_info_sent,
 			  struct security_descriptor *psd,
 			  uint32 (*nt_to_afs_rights)(const char *filename,
@@ -737,7 +715,7 @@
 	dacl = psd->dacl;
 
 	for (i = 0; i < dacl->num_aces; i++) {
-		SEC_ACE *ace = &(dacl->aces[i]);
+		SEC_ACE *ace = &(dacl->ace[i]);
 		const char *dom_name, *name;
 		enum lsa_SidType name_type;
 		char *p;
@@ -749,7 +727,7 @@
 
 		if (!mappable_sid(&ace->trustee)) {
 			DEBUG(10, ("Ignoring unmappable SID %s\n",
-				   sid_string_dbg(&ace->trustee)));
+				   sid_string_static(&ace->trustee)));
 			continue;
 		}
 
@@ -776,11 +754,10 @@
 
 		} else {
 
-			if (!lookup_sid(talloc_tos(), &ace->trustee,
+			if (!lookup_sid(tmp_talloc_ctx(), &ace->trustee,
 					&dom_name, &name, &name_type)) {
 				DEBUG(1, ("AFSACL: Could not lookup SID %s on file %s\n",
-					  sid_string_dbg(&ace->trustee),
-					  filename));
+					  sid_string_static(&ace->trustee), filename));
 				continue;
 			}
 
@@ -788,7 +765,7 @@
 			     (name_type == SID_NAME_DOM_GRP) ||
 			     (name_type == SID_NAME_ALIAS) ) {
 				char *tmp;
-				tmp = talloc_asprintf(talloc_tos(), "%s%s%s",
+				tmp = talloc_asprintf(tmp_talloc_ctx(), "%s%s%s",
 						       dom_name, lp_winbind_separator(),
 						       name);
 				if (tmp == NULL) {
@@ -801,8 +778,8 @@
 			if (sidpts) {
 				/* Expect all users/groups in pts as SIDs */
 				name = talloc_strdup(
-					talloc_tos(),
-					sid_string_tos(&ace->trustee));
+					tmp_talloc_ctx(),
+					sid_string_static(&ace->trustee));
 				if (name == NULL) {
 					return False;
 				}
@@ -819,7 +796,7 @@
 	return True;
 }
 
-static bool afs_get_afs_acl(char *filename, struct afs_acl *acl)
+static BOOL afs_get_afs_acl(char *filename, struct afs_acl *acl)
 {
 	struct afs_iob iob;
 
@@ -853,6 +830,27 @@
 	return True;
 }
 
+static size_t afs_get_nt_acl(struct files_struct *fsp, uint32 security_info,
+			     struct security_descriptor **ppdesc)
+{
+	struct afs_acl acl;
+	size_t sd_size;
+
+	DEBUG(5, ("afs_get_nt_acl: %s\n", fsp->fsp_name));
+
+	sidpts = lp_parm_bool(SNUM(fsp->conn), "afsacl", "sidpts", False);
+
+	if (!afs_get_afs_acl(fsp->fsp_name, &acl)) {
+		return 0;
+	}
+
+	sd_size = afs_to_nt_acl(&acl, fsp, security_info, ppdesc);
+
+	free_afs_acl(&acl);
+
+	return sd_size;
+}
+
 /* For setting an AFS ACL we have to take care of the ACEs we could
  * not properly map to SIDs. Merge all of them into the new ACL. */
 
@@ -885,7 +883,7 @@
 	}
 }
 
-static NTSTATUS afs_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
+static BOOL afs_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
 			   uint32 security_info_sent,
 			   struct security_descriptor *psd)
 {
@@ -894,7 +892,7 @@
 	char acl_string[2049];
 	struct afs_iob iob;
 	int ret = -1;
-	char *name = NULL;
+	pstring name;
 	const char *fileacls;
 
 	fileacls = lp_parm_const_string(SNUM(handle->conn), "afsacl", "fileacls",
@@ -907,10 +905,7 @@
 	ZERO_STRUCT(dir_acl);
 	ZERO_STRUCT(file_acl);
 
-	name = talloc_strdup(talloc_tos(), fsp->fsp_name);
-	if (!name) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	pstrcpy(name, fsp->fsp_name);
 
 	if (!fsp->is_directory) {
 		/* We need to get the name of the directory containing the
@@ -919,10 +914,7 @@
 		if (p != NULL) {
 			*p = '\0';
 		} else {
-			name = talloc_strdup(talloc_tos(), ".");
-			if (!name) {
-				return NT_STATUS_NO_MEMORY;
-			}
+			pstrcpy(name, ".");
 		}
 	}
 
@@ -988,64 +980,33 @@
 	free_afs_acl(&old_afs_acl);
 	free_afs_acl(&new_afs_acl);
 
-	return (ret == 0) ? NT_STATUS_OK : NT_STATUS_ACCESS_DENIED;
+	return (ret == 0);
 }
 
-static NTSTATUS afsacl_fget_nt_acl(struct vfs_handle_struct *handle,
-				   struct files_struct *fsp,
-				   uint32 security_info,
-				   struct security_descriptor **ppdesc)
+static size_t afsacl_fget_nt_acl(struct vfs_handle_struct *handle,
+				 struct files_struct *fsp,
+				 int fd,  uint32 security_info,
+				 struct security_descriptor **ppdesc)
 {
-	struct afs_acl acl;
-	size_t sd_size;
-
-	DEBUG(5, ("afsacl_fget_nt_acl: %s\n", fsp->fsp_name));
-
-	sidpts = lp_parm_bool(SNUM(fsp->conn), "afsacl", "sidpts", False);
-
-	if (!afs_get_afs_acl(fsp->fsp_name, &acl)) {
-		return NT_STATUS_ACCESS_DENIED;
-	}
-
-	sd_size = afs_fto_nt_acl(&acl, fsp, security_info, ppdesc);
-
-	free_afs_acl(&acl);
-
-	return (sd_size != 0) ? NT_STATUS_OK : NT_STATUS_ACCESS_DENIED;
+	return afs_get_nt_acl(fsp, security_info, ppdesc);
 }
-
-static NTSTATUS afsacl_get_nt_acl(struct vfs_handle_struct *handle,
-				  const char *name,  uint32 security_info,
-				  struct security_descriptor **ppdesc)
+static size_t afsacl_get_nt_acl(struct vfs_handle_struct *handle,
+				struct files_struct *fsp,
+				const char *name,  uint32 security_info,
+				struct security_descriptor **ppdesc)
 {
-	struct afs_acl acl;
-	size_t sd_size;
-
-	DEBUG(5, ("afsacl_get_nt_acl: %s\n", name));
-
-	sidpts = lp_parm_bool(SNUM(handle->conn), "afsacl", "sidpts", False);
-
-	if (!afs_get_afs_acl(name, &acl)) {
-		return NT_STATUS_ACCESS_DENIED;
-	}
-
-	sd_size = afs_to_nt_acl(&acl, handle->conn, name, security_info,
-				ppdesc);
-
-	free_afs_acl(&acl);
-
-	return (sd_size != 0) ? NT_STATUS_OK : NT_STATUS_ACCESS_DENIED;
+	return afs_get_nt_acl(fsp, security_info, ppdesc);
 }
 
-NTSTATUS afsacl_fset_nt_acl(vfs_handle_struct *handle,
+BOOL afsacl_fset_nt_acl(vfs_handle_struct *handle,
 			 files_struct *fsp,
-			 uint32 security_info_sent,
+			 int fd, uint32 security_info_sent,
 			 SEC_DESC *psd)
 {
 	return afs_set_nt_acl(handle, fsp, security_info_sent, psd);
 }
 
-NTSTATUS afsacl_set_nt_acl(vfs_handle_struct *handle,
+BOOL afsacl_set_nt_acl(vfs_handle_struct *handle,
 		       files_struct *fsp,
 		       const char *name, uint32 security_info_sent,
 		       SEC_DESC *psd)
@@ -1057,7 +1018,7 @@
 			  const char *service, 
 			  const char *user)
 {
-			const char *spc;
+	const char *spc;
 
 	spc = lp_parm_const_string(SNUM(handle->conn), "afsacl", "space", "%");
 

Deleted: branches/samba/upstream/source/modules/vfs_aio_fork.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_aio_fork.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_aio_fork.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,730 +0,0 @@
-/*
- * Simulate the Posix AIO using mmap/fork
- *
- * Copyright (C) Volker Lendecke 2008
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "includes.h"
-
-struct mmap_area {
-	size_t size;
-	volatile void *ptr;
-};
-
-static int mmap_area_destructor(struct mmap_area *area)
-{
-	munmap((void *)area->ptr, area->size);
-	return 0;
-}
-
-static struct mmap_area *mmap_area_init(TALLOC_CTX *mem_ctx, size_t size)
-{
-	struct mmap_area *result;
-	int fd;
-
-	result = talloc(mem_ctx, struct mmap_area);
-	if (result == NULL) {
-		DEBUG(0, ("talloc failed\n"));
-		goto fail;
-	}
-
-	fd = open("/dev/zero", O_RDWR);
-	if (fd == -1) {
-		DEBUG(3, ("open(\"/dev/zero\") failed: %s\n",
-			  strerror(errno)));
-		goto fail;
-	}
-
-	result->ptr = mmap(NULL, size, PROT_READ|PROT_WRITE,
-			   MAP_SHARED|MAP_FILE, fd, 0);
-	if (result->ptr == MAP_FAILED) {
-		DEBUG(1, ("mmap failed: %s\n", strerror(errno)));
-		goto fail;
-	}
-
-	close(fd);
-
-	result->size = size;
-	talloc_set_destructor(result, mmap_area_destructor);
-
-	return result;
-
-fail:
-	TALLOC_FREE(result);
-	return NULL;
-}
-
-struct rw_cmd {
-	size_t n;
-	SMB_OFF_T offset;
-	bool read_cmd;
-};
-
-struct rw_ret {
-	ssize_t size;
-	int ret_errno;
-};
-
-struct aio_child_list;
-
-struct aio_child {
-	struct aio_child *prev, *next;
-	struct aio_child_list *list;
-	SMB_STRUCT_AIOCB *aiocb;
-	pid_t pid;
-	int sockfd;
-	struct fd_event *sock_event;
-	struct rw_ret retval;
-	struct mmap_area *map;	/* ==NULL means write request */
-	bool dont_delete;	/* Marked as in use since last cleanup */
-	bool cancelled;
-	bool read_cmd;
-};
-
-struct aio_child_list {
-	struct aio_child *children;
-	struct timed_event *cleanup_event;
-};
-
-static void free_aio_children(void **p)
-{
-	TALLOC_FREE(*p);
-}
-
-static ssize_t read_fd(int fd, void *ptr, size_t nbytes, int *recvfd)
-{
-	struct msghdr msg;
-	struct iovec iov[1];
-	ssize_t n;
-#ifndef HAVE_MSGHDR_MSG_CONTROL
-	int newfd;
-#endif
-
-#ifdef	HAVE_MSGHDR_MSG_CONTROL
-	union {
-	  struct cmsghdr	cm;
-	  char				control[CMSG_SPACE(sizeof(int))];
-	} control_un;
-	struct cmsghdr	*cmptr;
-
-	msg.msg_control = control_un.control;
-	msg.msg_controllen = sizeof(control_un.control);
-#else
-#if HAVE_MSGHDR_MSG_ACCTRIGHTS
-	msg.msg_accrights = (caddr_t) &newfd;
-	msg.msg_accrightslen = sizeof(int);
-#else
-#error Can not pass file descriptors
-#endif
-#endif
-
-	msg.msg_name = NULL;
-	msg.msg_namelen = 0;
-
-	iov[0].iov_base = ptr;
-	iov[0].iov_len = nbytes;
-	msg.msg_iov = iov;
-	msg.msg_iovlen = 1;
-
-	if ( (n = recvmsg(fd, &msg, 0)) <= 0) {
-		return(n);
-	}
-
-#ifdef	HAVE_MSGHDR_MSG_CONTROL
-	if ((cmptr = CMSG_FIRSTHDR(&msg)) != NULL
-	    && cmptr->cmsg_len == CMSG_LEN(sizeof(int))) {
-		if (cmptr->cmsg_level != SOL_SOCKET) {
-			DEBUG(10, ("control level != SOL_SOCKET"));
-			errno = EINVAL;
-			return -1;
-		}
-		if (cmptr->cmsg_type != SCM_RIGHTS) {
-			DEBUG(10, ("control type != SCM_RIGHTS"));
-			errno = EINVAL;
-			return -1;
-		}
-		*recvfd = *((int *) CMSG_DATA(cmptr));
-	} else {
-		*recvfd = -1;		/* descriptor was not passed */
-	}
-#else
-	if (msg.msg_accrightslen == sizeof(int)) {
-		*recvfd = newfd;
-	}
-	else {
-		*recvfd = -1;		/* descriptor was not passed */
-	}
-#endif
-
-	return(n);
-}
-
-static ssize_t write_fd(int fd, void *ptr, size_t nbytes, int sendfd)
-{
-	struct msghdr	msg;
-	struct iovec	iov[1];
-
-#ifdef	HAVE_MSGHDR_MSG_CONTROL
-	union {
-		struct cmsghdr	cm;
-		char control[CMSG_SPACE(sizeof(int))];
-	} control_un;
-	struct cmsghdr	*cmptr;
-
-	ZERO_STRUCT(msg);
-	ZERO_STRUCT(control_un);
-
-	msg.msg_control = control_un.control;
-	msg.msg_controllen = sizeof(control_un.control);
-
-	cmptr = CMSG_FIRSTHDR(&msg);
-	cmptr->cmsg_len = CMSG_LEN(sizeof(int));
-	cmptr->cmsg_level = SOL_SOCKET;
-	cmptr->cmsg_type = SCM_RIGHTS;
-	*((int *) CMSG_DATA(cmptr)) = sendfd;
-#else
-	ZERO_STRUCT(msg);
-	msg.msg_accrights = (caddr_t) &sendfd;
-	msg.msg_accrightslen = sizeof(int);
-#endif
-
-	msg.msg_name = NULL;
-	msg.msg_namelen = 0;
-
-	ZERO_STRUCT(iov);
-	iov[0].iov_base = ptr;
-	iov[0].iov_len = nbytes;
-	msg.msg_iov = iov;
-	msg.msg_iovlen = 1;
-
-	return (sendmsg(fd, &msg, 0));
-}
-
-static void aio_child_cleanup(struct event_context *event_ctx,
-			      struct timed_event *te,
-			      const struct timeval *now,
-			      void *private_data)
-{
-	struct aio_child_list *list = talloc_get_type_abort(
-		private_data, struct aio_child_list);
-	struct aio_child *child, *next;
-
-	TALLOC_FREE(list->cleanup_event);
-
-	for (child = list->children; child != NULL; child = next) {
-		next = child->next;
-
-		if (child->aiocb != NULL) {
-			DEBUG(10, ("child %d currently active\n",
-				   (int)child->pid));
-			continue;
-		}
-
-		if (child->dont_delete) {
-			DEBUG(10, ("Child %d was active since last cleanup\n",
-				   (int)child->pid));
-			child->dont_delete = false;
-			continue;
-		}
-
-		DEBUG(10, ("Child %d idle for more than 30 seconds, "
-			   "deleting\n", (int)child->pid));
-
-		TALLOC_FREE(child);
-	}
-
-	if (list->children != NULL) {
-		/*
-		 * Re-schedule the next cleanup round
-		 */
-		list->cleanup_event = event_add_timed(smbd_event_context(), list,
-						      timeval_add(now, 30, 0),
-						      "aio_child_cleanup",
-						      aio_child_cleanup, list);
-
-	}
-}
-
-static struct aio_child_list *init_aio_children(struct vfs_handle_struct *handle)
-{
-	struct aio_child_list *data = NULL;
-
-	if (SMB_VFS_HANDLE_TEST_DATA(handle)) {
-		SMB_VFS_HANDLE_GET_DATA(handle, data, struct aio_child_list,
-					return NULL);
-	}
-
-	if (data == NULL) {
-		data = TALLOC_ZERO_P(NULL, struct aio_child_list);
-		if (data == NULL) {
-			return NULL;
-		}
-	}
-
-	/*
-	 * Regardless of whether the child_list had been around or not, make
-	 * sure that we have a cleanup timed event. This timed event will
-	 * delete itself when it finds that no children are around anymore.
-	 */
-
-	if (data->cleanup_event == NULL) {
-		data->cleanup_event = event_add_timed(smbd_event_context(), data,
-						      timeval_current_ofs(30, 0),
-						      "aio_child_cleanup",
-						      aio_child_cleanup, data);
-		if (data->cleanup_event == NULL) {
-			TALLOC_FREE(data);
-			return NULL;
-		}
-	}
-
-	if (!SMB_VFS_HANDLE_TEST_DATA(handle)) {
-		SMB_VFS_HANDLE_SET_DATA(handle, data, free_aio_children,
-					struct aio_child_list, return False);
-	}
-
-	return data;
-}
-
-static void aio_child_loop(int sockfd, struct mmap_area *map)
-{
-	while (true) {
-		int fd = -1;
-		ssize_t ret;
-		struct rw_cmd cmd_struct;
-		struct rw_ret ret_struct;
-
-		ret = read_fd(sockfd, &cmd_struct, sizeof(cmd_struct), &fd);
-		if (ret != sizeof(cmd_struct)) {
-			DEBUG(10, ("read_fd returned %d: %s\n", (int)ret,
-				   strerror(errno)));
-			exit(1);
-		}
-
-		DEBUG(10, ("aio_child_loop: %s %d bytes at %d from fd %d\n",
-			   cmd_struct.read_cmd ? "read" : "write",
-			   (int)cmd_struct.n, (int)cmd_struct.offset, fd));
-
-#ifdef ENABLE_BUILD_FARM_HACKS
-		{
-			/*
-			 * In the build farm, we want erratic behaviour for
-			 * async I/O times
-			 */
-			uint8_t randval;
-			unsigned msecs;
-			/*
-			 * use generate_random_buffer, we just forked from a
-			 * common parent state
-			 */
-			generate_random_buffer(&randval, sizeof(randval));
-			msecs = randval + 20;
-			DEBUG(10, ("delaying for %u msecs\n", msecs));
-			smb_msleep(msecs);
-		}
-#endif
-
-
-		ZERO_STRUCT(ret_struct);
-
-		if (cmd_struct.read_cmd) {
-			ret_struct.size = sys_pread(
-				fd, (void *)map->ptr, cmd_struct.n,
-				cmd_struct.offset);
-		}
-		else {
-			ret_struct.size = sys_pwrite(
-				fd, (void *)map->ptr, cmd_struct.n,
-				cmd_struct.offset);
-		}
-
-		DEBUG(10, ("aio_child_loop: syscall returned %d\n",
-			   (int)ret_struct.size));
-
-		if (ret_struct.size == -1) {
-			ret_struct.ret_errno = errno;
-		}
-
-		ret = write_data(sockfd, (char *)&ret_struct,
-				 sizeof(ret_struct));
-		if (ret != sizeof(ret_struct)) {
-			DEBUG(10, ("could not write ret_struct: %s\n",
-				   strerror(errno)));
-			exit(2);
-		}
-
-		close(fd);
-	}
-}
-
-static void handle_aio_completion(struct event_context *event_ctx,
-				  struct fd_event *event, uint16 flags,
-				  void *p)
-{
-	struct aio_child *child = (struct aio_child *)p;
-	uint16 mid;
-
-	DEBUG(10, ("handle_aio_completion called with flags=%d\n", flags));
-
-	if ((flags & EVENT_FD_READ) == 0) {
-		return;
-	}
-
-	if (!NT_STATUS_IS_OK(read_data(child->sockfd,
-				       (char *)&child->retval,
-				       sizeof(child->retval)))) {
-		DEBUG(0, ("aio child %d died\n", (int)child->pid));
-		child->retval.size = -1;
-		child->retval.ret_errno = EIO;
-	}
-
-	if (child->cancelled) {
-		child->aiocb = NULL;
-		child->cancelled = false;
-		return;
-	}
-
-	if (child->read_cmd && (child->retval.size > 0)) {
-		SMB_ASSERT(child->retval.size <= child->aiocb->aio_nbytes);
-		memcpy((void *)child->aiocb->aio_buf, (void *)child->map->ptr,
-		       child->retval.size);
-	}
-
-	mid = child->aiocb->aio_sigevent.sigev_value.sival_int;
-
-	DEBUG(10, ("mid %d finished\n", (int)mid));
-
-	aio_request_done(mid);
-	process_aio_queue();
-}
-
-static int aio_child_destructor(struct aio_child *child)
-{
-	SMB_ASSERT((child->aiocb == NULL) || child->cancelled);
-	close(child->sockfd);
-	DLIST_REMOVE(child->list->children, child);
-	return 0;
-}
-
-static NTSTATUS create_aio_child(struct aio_child_list *children,
-				 size_t map_size,
-				 struct aio_child **presult)
-{
-	struct aio_child *result;
-	int fdpair[2];
-	NTSTATUS status;
-
-	fdpair[0] = fdpair[1] = -1;
-
-	result = TALLOC_ZERO_P(children, struct aio_child);
-	NT_STATUS_HAVE_NO_MEMORY(result);
-
-	if (socketpair(AF_UNIX, SOCK_STREAM, 0, fdpair) == -1) {
-		status = map_nt_error_from_unix(errno);
-		DEBUG(10, ("socketpair() failed: %s\n", strerror(errno)));
-		TALLOC_FREE(result);
-		goto fail;
-	}
-
-	DEBUG(10, ("fdpair = %d/%d\n", fdpair[0], fdpair[1]));
-
-	result->map = mmap_area_init(result, map_size);
-	if (result->map == NULL) {
-		status = map_nt_error_from_unix(errno);
-		DEBUG(0, ("Could not create mmap area\n"));
-		goto fail;
-	}
-
-	result->pid = sys_fork();
-	if (result->pid == -1) {
-		status = map_nt_error_from_unix(errno);
-		DEBUG(0, ("fork failed: %s\n", strerror(errno)));
-		goto fail;
-	}
-
-	if (result->pid == 0) {
-		close(fdpair[0]);
-		result->sockfd = fdpair[1];
-		aio_child_loop(result->sockfd, result->map);
-	}
-
-	DEBUG(10, ("Child %d created\n", result->pid));
-
-	result->sockfd = fdpair[0];
-	close(fdpair[1]);
-
-	result->sock_event = event_add_fd(smbd_event_context(), result,
-					  result->sockfd, EVENT_FD_READ,
-					  handle_aio_completion,
-					  result);
-	if (result->sock_event == NULL) {
-		status = NT_STATUS_NO_MEMORY;
-		DEBUG(0, ("event_add_fd failed\n"));
-		goto fail;
-	}
-
-	result->list = children;
-	DLIST_ADD(children->children, result);
-
-	talloc_set_destructor(result, aio_child_destructor);
-
-	*presult = result;
-
-	return NT_STATUS_OK;
-
- fail:
-	if (fdpair[0] != -1) close(fdpair[0]);
-	if (fdpair[1] != -1) close(fdpair[1]);
-	TALLOC_FREE(result);
-
-	return status;
-}
-
-static NTSTATUS get_idle_child(struct vfs_handle_struct *handle,
-			       struct aio_child **pchild)
-{
-	struct aio_child_list *children;
-	struct aio_child *child;
-	NTSTATUS status;
-
-	children = init_aio_children(handle);
-	if (children == NULL) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	for (child = children->children; child != NULL; child = child->next) {
-		if (child->aiocb == NULL) {
-			/* idle */
-			break;
-		}
-	}
-
-	if (child == NULL) {
-		DEBUG(10, ("no idle child found, creating new one\n"));
-
-		status = create_aio_child(children, 128*1024, &child);
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(10, ("create_aio_child failed: %s\n",
-				   nt_errstr(status)));
-			return status;
-		}
-	}
-
-	child->dont_delete = true;
-
-	*pchild = child;
-	return NT_STATUS_OK;
-}
-
-static int aio_fork_read(struct vfs_handle_struct *handle,
-			 struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb)
-{
-	struct aio_child *child;
-	struct rw_cmd cmd;
-	ssize_t ret;
-	NTSTATUS status;
-
-	if (aiocb->aio_nbytes > 128*1024) {
-		/* TODO: support variable buffers */
-		errno = EINVAL;
-		return -1;
-	}
-
-	status = get_idle_child(handle, &child);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10, ("Could not get an idle child\n"));
-		return -1;
-	}
-
-	child->read_cmd = true;
-	child->aiocb = aiocb;
-	child->retval.ret_errno = EINPROGRESS;
-
-	ZERO_STRUCT(cmd);
-	cmd.n = aiocb->aio_nbytes;
-	cmd.offset = aiocb->aio_offset;
-	cmd.read_cmd = child->read_cmd;
-
-	DEBUG(10, ("sending fd %d to child %d\n", fsp->fh->fd,
-		   (int)child->pid));
-
-	ret = write_fd(child->sockfd, &cmd, sizeof(cmd), fsp->fh->fd);
-	if (ret == -1) {
-		DEBUG(10, ("write_fd failed: %s\n", strerror(errno)));
-		return -1;
-	}
-
-	return 0;
-}
-
-static int aio_fork_write(struct vfs_handle_struct *handle,
-			  struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb)
-{
-	struct aio_child *child;
-	struct rw_cmd cmd;
-	ssize_t ret;
-	NTSTATUS status;
-
-	if (aiocb->aio_nbytes > 128*1024) {
-		/* TODO: support variable buffers */
-		errno = EINVAL;
-		return -1;
-	}
-
-	status = get_idle_child(handle, &child);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10, ("Could not get an idle child\n"));
-		return -1;
-	}
-
-	child->read_cmd = false;
-	child->aiocb = aiocb;
-	child->retval.ret_errno = EINPROGRESS;
-
-	memcpy((void *)child->map->ptr, (void *)aiocb->aio_buf,
-	       aiocb->aio_nbytes);
-
-	ZERO_STRUCT(cmd);
-	cmd.n = aiocb->aio_nbytes;
-	cmd.offset = aiocb->aio_offset;
-	cmd.read_cmd = child->read_cmd;
-
-	DEBUG(10, ("sending fd %d to child %d\n", fsp->fh->fd,
-		   (int)child->pid));
-
-	ret = write_fd(child->sockfd, &cmd, sizeof(cmd), fsp->fh->fd);
-	if (ret == -1) {
-		DEBUG(10, ("write_fd failed: %s\n", strerror(errno)));
-		return -1;
-	}
-
-	return 0;
-}
-
-static struct aio_child *aio_fork_find_child(struct vfs_handle_struct *handle,
-					     SMB_STRUCT_AIOCB *aiocb)
-{
-	struct aio_child_list *children;
-	struct aio_child *child;
-
-	children = init_aio_children(handle);
-	if (children == NULL) {
-		return NULL;
-	}
-
-	for (child = children->children; child != NULL; child = child->next) {
-		if (child->aiocb == aiocb) {
-			return child;
-		}
-	}
-
-	return NULL;
-}
-
-static ssize_t aio_fork_return_fn(struct vfs_handle_struct *handle,
-				  struct files_struct *fsp,
-				  SMB_STRUCT_AIOCB *aiocb)
-{
-	struct aio_child *child = aio_fork_find_child(handle, aiocb);
-
-	if (child == NULL) {
-		errno = EINVAL;
-		DEBUG(0, ("returning EINVAL\n"));
-		return -1;
-	}
-
-	child->aiocb = NULL;
-
-	if (child->retval.size == -1) {
-		errno = child->retval.ret_errno;
-	}
-
-	return child->retval.size;
-}
-
-static int aio_fork_cancel(struct vfs_handle_struct *handle,
-			   struct files_struct *fsp,
-			   SMB_STRUCT_AIOCB *aiocb)
-{
-	struct aio_child_list *children;
-	struct aio_child *child;
-
-	children = init_aio_children(handle);
-	if (children == NULL) {
-		errno = EINVAL;
-		return -1;
-	}
-
-	for (child = children->children; child != NULL; child = child->next) {
-		if (child->aiocb == NULL) {
-			continue;
-		}
-		if (child->aiocb->aio_fildes != fsp->fh->fd) {
-			continue;
-		}
-		if ((aiocb != NULL) && (child->aiocb != aiocb)) {
-			continue;
-		}
-
-		/*
-		 * We let the child do its job, but we discard the result when
-		 * it's finished.
-		 */
-
-		child->cancelled = true;
-	}
-
-	return AIO_CANCELED;
-}
-
-static int aio_fork_error_fn(struct vfs_handle_struct *handle,
-			     struct files_struct *fsp,
-			     SMB_STRUCT_AIOCB *aiocb)
-{
-	struct aio_child *child = aio_fork_find_child(handle, aiocb);
-
-	if (child == NULL) {
-		errno = EINVAL;
-		return -1;
-	}
-
-	return child->retval.ret_errno;
-}
-
-/* VFS operations structure */
-
-static vfs_op_tuple aio_fork_ops[] = {
-	{SMB_VFS_OP(aio_fork_read),	SMB_VFS_OP_AIO_READ,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(aio_fork_write),	SMB_VFS_OP_AIO_WRITE,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(aio_fork_return_fn), SMB_VFS_OP_AIO_RETURN,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(aio_fork_cancel),	SMB_VFS_OP_AIO_CANCEL,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(aio_fork_error_fn),	SMB_VFS_OP_AIO_ERROR,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(NULL),		SMB_VFS_OP_NOOP,
-	 SMB_VFS_LAYER_NOOP}
-};
-
-NTSTATUS vfs_aio_fork_init(void);
-NTSTATUS vfs_aio_fork_init(void)
-{
-	return smb_register_vfs(SMB_VFS_INTERFACE_VERSION,
-				"aio_fork", aio_fork_ops);
-}

Modified: branches/samba/upstream/source/modules/vfs_aixacl.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_aixacl.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_aixacl.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -80,7 +81,8 @@
 }
 
 SMB_ACL_T aixacl_sys_acl_get_fd(vfs_handle_struct *handle,
-				files_struct *fsp)
+				  files_struct *fsp,
+				  int fd)
 {
 
 	struct acl *file_acl = (struct acl *)NULL;
@@ -92,7 +94,7 @@
 	/* Get the acl using fstatacl */
    
 	DEBUG(10,("Entering AIX sys_acl_get_fd\n"));
-	DEBUG(10,("fd is %d\n",fsp->fh->fd));
+	DEBUG(10,("fd is %d\n",fd));
 	file_acl = (struct acl *)SMB_MALLOC(BUFSIZ);
 
 	if(file_acl == NULL) {
@@ -103,7 +105,7 @@
 
 	memset(file_acl,0,BUFSIZ);
 
-	rc = fstatacl(fsp->fh->fd,0,file_acl,BUFSIZ);
+	rc = fstatacl(fd,0,file_acl,BUFSIZ);
 	if( (rc == -1) && (errno == ENOSPC)) {
 		struct acl *new_acl = SMB_MALLOC(file_acl->acl_len + sizeof(struct acl));
 		if( new_acl == NULL) {
@@ -112,7 +114,7 @@
 			return NULL;
 		}
 		file_acl = new_acl;
-		rc = fstatacl(fsp->fh->fd,0,file_acl,file_acl->acl_len + sizeof(struct acl));
+		rc = fstatacl(fd,0,file_acl,file_acl->acl_len + sizeof(struct acl));
 		if( rc == -1) {
 			DEBUG(0,("fstatacl returned %d with errno %d\n",rc,errno));
 			SAFE_FREE(file_acl);
@@ -136,7 +138,7 @@
 			      SMB_ACL_T theacl)
 {
 	struct acl *file_acl = NULL;
-	unsigned int rc;
+	uint rc;
 	
 	file_acl = aixacl_smb_to_aixacl(type, theacl);
 	if (!file_acl)
@@ -153,16 +155,16 @@
 
 int aixacl_sys_acl_set_fd(vfs_handle_struct *handle,
 			    files_struct *fsp,
-			    SMB_ACL_T theacl)
+			    int fd, SMB_ACL_T theacl)
 {
 	struct acl *file_acl = NULL;
-	unsigned int rc;
+	uint rc;
 
 	file_acl = aixacl_smb_to_aixacl(SMB_ACL_TYPE_ACCESS, theacl);
 	if (!file_acl)
 		return -1;
 
-	rc = fchacl(fsp->fh->fd,file_acl,file_acl->acl_len);
+	rc = fchacl(fd,file_acl,file_acl->acl_len);
 	DEBUG(10,("errno is %d\n",errno));
 	DEBUG(10,("return code is %d\n",rc));
 	SAFE_FREE(file_acl);

Modified: branches/samba/upstream/source/modules/vfs_aixacl2.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_aixacl2.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_aixacl2.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -27,7 +28,7 @@
 
 extern struct current_user current_user;
 extern int try_chown(connection_struct *conn, const char *fname, uid_t uid, gid_t gid);
-extern bool unpack_nt_owners(int snum, uid_t *puser, gid_t *pgrp,
+extern BOOL unpack_nt_owners(int snum, uid_t *puser, gid_t *pgrp,
 	uint32 security_info_sent, SEC_DESC *psd);
 
 extern SMB_ACL_T aixacl_to_smbacl( struct acl *file_acl);
@@ -66,7 +67,7 @@
 	uint64_t ctl_flag=0;
 	TALLOC_CTX	*mem_ctx;
 
-	mem_ctx = talloc_tos();
+	mem_ctx = main_loop_talloc_get();
 	acl = (AIXJFS2_ACL_T *)TALLOC_SIZE(mem_ctx, len);
 	if (acl == NULL) {
 		errno = ENOMEM;
@@ -98,8 +99,8 @@
 	return acl;
 }
 
-static bool aixjfs2_get_nfs4_acl(const char *name,
-	SMB4ACL_T **ppacl, bool *pretryPosix)
+static BOOL aixjfs2_get_nfs4_acl(files_struct *fsp,
+	SMB4ACL_T **ppacl, BOOL *pretryPosix)
 {
 	int32_t i;
 	
@@ -108,15 +109,15 @@
 	nfs4_ace_int_t *jfs2_ace = NULL;
 	acl_type_t type;
 
-	DEBUG(10,("jfs2 get_nt_acl invoked for %s\n", name));
+	DEBUG(10,("jfs2 get_nt_acl invoked for %s\n", fsp->fsp_name));
 
 	memset(&type, 0, sizeof(acl_type_t));
 	type.u64 = ACL_NFS4;
 
-	pacl = aixjfs2_getacl_alloc(name, &type);
+	pacl = aixjfs2_getacl_alloc(fsp->fsp_name, &type);
         if (pacl == NULL) {
 		DEBUG(9, ("aixjfs2_getacl_alloc failed for %s with %s\n",
-				name, strerror(errno)));
+				fsp->fsp_name, strerror(errno)));
 		if (errno==ENOSYS)
 			*pretryPosix = True;
 		return False;
@@ -158,48 +159,38 @@
 	return True;
 }
 
-static NTSTATUS aixjfs2_fget_nt_acl(vfs_handle_struct *handle,
-	files_struct *fsp, uint32 security_info,
-	SEC_DESC **ppdesc)
+static size_t aixjfs2_get_nt_acl_common(files_struct *fsp,
+	uint32 security_info, SEC_DESC **ppdesc)
 {
 	SMB4ACL_T *pacl = NULL;
-	bool	result;
-	bool	retryPosix = False;
+	BOOL	result;
+	BOOL	retryPosix = False;
 
 	*ppdesc = NULL;
-	result = aixjfs2_get_nfs4_acl(fsp->fsp_name, &pacl, &retryPosix);
+	result = aixjfs2_get_nfs4_acl(fsp, &pacl, &retryPosix);
 	if (retryPosix)
 	{
 		DEBUG(10, ("retrying with posix acl...\n"));
-		return posix_fget_nt_acl(fsp, security_info, ppdesc);
+		return get_nt_acl(fsp, security_info, ppdesc);
 	}
 	if (result==False)
-		return NT_STATUS_ACCESS_DENIED;
+		return 0;
 
-	return smb_fget_nt_acl_nfs4(fsp, security_info, ppdesc, pacl);
+	return smb_get_nt_acl_nfs4(fsp, security_info, ppdesc, pacl);
 }
 
-static NTSTATUS aixjfs2_get_nt_acl(vfs_handle_struct *handle,
+size_t aixjfs2_fget_nt_acl(vfs_handle_struct *handle,
+	files_struct *fsp, int fd, uint32 security_info,
+	SEC_DESC **ppdesc)
+{
+	return aixjfs2_get_nt_acl_common(fsp, security_info, ppdesc);
+}
+
+size_t aixjfs2_get_nt_acl(vfs_handle_struct *handle,
 	files_struct *fsp, const char *name,
 	uint32 security_info, SEC_DESC **ppdesc)
 {
-	SMB4ACL_T *pacl = NULL;
-	bool	result;
-	bool	retryPosix = False;
-
-	*ppdesc = NULL;
-	result = aixjfs2_get_nfs4_acl(name, &pacl, &retryPosix);
-	if (retryPosix)
-	{
-		DEBUG(10, ("retrying with posix acl...\n"));
-		return posix_get_nt_acl(handle->conn, name security_info,
-					ppdesc);
-	}
-	if (result==False)
-		return NT_STATUS_ACCESS_DENIED;
-
-	return smb_get_nt_acl_nfs4(handle->conn, name, security_info, ppdesc,
-				   pacl);
+	return aixjfs2_get_nt_acl_common(fsp, security_info, ppdesc);
 }
 
 static SMB_ACL_T aixjfs2_get_posix_acl(const char *path, acl_type_t type)
@@ -258,7 +249,8 @@
 }
 
 SMB_ACL_T aixjfs2_sys_acl_get_fd(vfs_handle_struct *handle,
-                                  files_struct *fsp)
+                                  files_struct *fsp,
+                                  int fd)
 {
         acl_type_t aixjfs2_type;
         aixjfs2_type.u64 = ACL_AIXC;
@@ -299,7 +291,7 @@
 	return 1; /* haven't found that ACL type. */
 }
 
-static bool aixjfs2_process_smbacl(files_struct *fsp, SMB4ACL_T *smbacl)
+static BOOL aixjfs2_process_smbacl(files_struct *fsp, SMB4ACL_T *smbacl)
 {
 	SMB4ACE_T	*smbace;
 	TALLOC_CTX	*mem_ctx;
@@ -312,7 +304,7 @@
 	DEBUG(10, ("jfs2_process_smbacl invoked on %s\n", fsp->fsp_name));
 
 	/* no need to be freed which is alloced with mem_ctx */
-	mem_ctx = talloc_tos();
+	mem_ctx = main_loop_talloc_get();
 
 	entryLen = sizeof(nfs4_ace_int_t);
 	if (entryLen & 0x03)
@@ -374,10 +366,10 @@
 	return True;
 }
 
-static NTSTATUS aixjfs2_set_nt_acl_common(files_struct *fsp, uint32 security_info_sent, SEC_DESC *psd)
+static BOOL aixjfs2_set_nt_acl_common(files_struct *fsp, uint32 security_info_sent, SEC_DESC *psd)
 {
 	acl_type_t	acl_type_info;
-	NTSTATUS	result = NT_STATUS_ACCESS_DENIED;
+	BOOL	result = False;
 	int	rc;
 
 	rc = aixjfs2_query_acl_support(
@@ -393,17 +385,17 @@
 	} else if (rc==1) { /* assume POSIX ACL - by default... */
 		result = set_nt_acl(fsp, security_info_sent, psd);
 	} else
-		result = map_nt_error_from_unix(errno); /* query failed */
+		result = False; /* query failed */
 	
 	return result;
 }
 
-NTSTATUS aixjfs2_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp, uint32 security_info_sent, SEC_DESC *psd)
+BOOL aixjfs2_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp, int fd, uint32 security_info_sent, SEC_DESC *psd)
 {
 	return aixjfs2_set_nt_acl_common(fsp, security_info_sent, psd);
 }
 
-NTSTATUS aixjfs2_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp, const char *name, uint32 security_info_sent, SEC_DESC *psd)
+BOOL aixjfs2_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp, const char *name, uint32 security_info_sent, SEC_DESC *psd)
 {
 	return aixjfs2_set_nt_acl_common(fsp, security_info_sent, psd);
 }
@@ -448,7 +440,7 @@
 
 int aixjfs2_sys_acl_set_fd(vfs_handle_struct *handle,
 			    files_struct *fsp,
-			    SMB_ACL_T theacl)
+			    int fd, SMB_ACL_T theacl)
 {
 	struct acl	*acl_aixc;
 	acl_type_t	acl_type_info;
@@ -467,7 +459,7 @@
 		return -1;
 
 	rc = aclx_fput(
-		fsp->fh->fd,
+		fd,
 		SET_ACL, /* set only the ACL, not mode bits */
 		acl_type_info,
 		acl_aixc,

Modified: branches/samba/upstream/source/modules/vfs_aixacl_util.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_aixacl_util.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_aixacl_util.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -209,9 +210,9 @@
 	struct acl *file_acl_temp = NULL;
 	struct acl_entry *acl_entry = NULL;
 	struct ace_id *ace_id = NULL;
-	unsigned int id_type;
-	unsigned int user_id;
-	unsigned int acl_length;
+	uint id_type;
+	uint user_id;
+	uint acl_length;
 	int	i;
  
 	DEBUG(10,("Entering aixacl_smb_to_aixacl\n"));

Modified: branches/samba/upstream/source/modules/vfs_audit.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_audit.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_audit.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *  
  * This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
  * GNU General Public License for more details.
  *  
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 
@@ -34,13 +35,13 @@
 static int audit_mkdir(vfs_handle_struct *handle, const char *path, mode_t mode);
 static int audit_rmdir(vfs_handle_struct *handle, const char *path);
 static int audit_open(vfs_handle_struct *handle, const char *fname, files_struct *fsp, int flags, mode_t mode);
-static int audit_close(vfs_handle_struct *handle, files_struct *fsp);
+static int audit_close(vfs_handle_struct *handle, files_struct *fsp, int fd);
 static int audit_rename(vfs_handle_struct *handle, const char *oldname, const char *newname);
 static int audit_unlink(vfs_handle_struct *handle, const char *path);
 static int audit_chmod(vfs_handle_struct *handle, const char *path, mode_t mode);
 static int audit_chmod_acl(vfs_handle_struct *handle, const char *name, mode_t mode);
-static int audit_fchmod(vfs_handle_struct *handle, files_struct *fsp, mode_t mode);
-static int audit_fchmod_acl(vfs_handle_struct *handle, files_struct *fsp, mode_t mode);
+static int audit_fchmod(vfs_handle_struct *handle, files_struct *fsp, int fd, mode_t mode);
+static int audit_fchmod_acl(vfs_handle_struct *handle, files_struct *fsp, int fd, mode_t mode);
 
 /* VFS operations */
 
@@ -111,11 +112,7 @@
 
 	int priority;
 
-	priority = lp_parm_enum(SNUM(handle->conn), "audit", "priority",
-				enum_log_priorities, LOG_NOTICE);
-	if (priority == -1) {
-		priority = LOG_WARNING;
-	}
+	priority = lp_parm_enum(SNUM(handle->conn), "audit", "priority", enum_log_priorities, LOG_NOTICE);
 
 	return priority;
 }
@@ -202,14 +199,14 @@
 	return result;
 }
 
-static int audit_close(vfs_handle_struct *handle, files_struct *fsp)
+static int audit_close(vfs_handle_struct *handle, files_struct *fsp, int fd)
 {
 	int result;
 
-	result = SMB_VFS_NEXT_CLOSE(handle, fsp);
+	result = SMB_VFS_NEXT_CLOSE(handle, fsp, fd);
 
 	syslog(audit_syslog_priority(handle), "close fd %d %s%s\n",
-	       fsp->fh->fd,
+	       fd,
 	       (result < 0) ? "failed: " : "",
 	       (result < 0) ? strerror(errno) : "");
 
@@ -272,11 +269,11 @@
 	return result;
 }
 
-static int audit_fchmod(vfs_handle_struct *handle, files_struct *fsp, mode_t mode)
+static int audit_fchmod(vfs_handle_struct *handle, files_struct *fsp, int fd, mode_t mode)
 {
 	int result;
 
-	result = SMB_VFS_NEXT_FCHMOD(handle, fsp, mode);
+	result = SMB_VFS_NEXT_FCHMOD(handle, fsp, fd, mode);
 
 	syslog(audit_syslog_priority(handle), "fchmod %s mode 0x%x %s%s\n",
 	       fsp->fsp_name, mode,
@@ -286,11 +283,11 @@
 	return result;
 }
 
-static int audit_fchmod_acl(vfs_handle_struct *handle, files_struct *fsp, mode_t mode)
+static int audit_fchmod_acl(vfs_handle_struct *handle, files_struct *fsp, int fd, mode_t mode)
 {
 	int result;
 
-	result = SMB_VFS_NEXT_FCHMOD_ACL(handle, fsp, mode);
+	result = SMB_VFS_NEXT_FCHMOD_ACL(handle, fsp, fd, mode);
 
 	syslog(audit_syslog_priority(handle), "fchmod_acl %s mode 0x%x %s%s\n",
 	       fsp->fsp_name, mode,

Modified: branches/samba/upstream/source/modules/vfs_cacheprime.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_cacheprime.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_cacheprime.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,7 +3,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
@@ -12,7 +12,8 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -45,16 +46,17 @@
  * per-fsp data to make sure we only ever do this once. If pread is being
  * emulated by seek/read/seek, when this will suck quite a lot.
  */
-static bool prime_cache(
+static BOOL prime_cache(
             struct vfs_handle_struct *  handle,
 			files_struct *		        fsp,
+			int			                fd,
 			SMB_OFF_T		            offset,
 			size_t			            count)
 {
         SMB_OFF_T * last;
         ssize_t nread;
 
-        last = (SMB_OFF_T *)VFS_ADD_FSP_EXTENSION(handle, fsp, SMB_OFF_T);
+        last = VFS_ADD_FSP_EXTENSION(handle, fsp, SMB_OFF_T);
         if (!last) {
                 return False;
         }
@@ -74,7 +76,7 @@
             MODULE, (long long)g_readsz, (long long)*last,
             fsp->fsp_name));
 
-        nread = sys_pread(fsp->fh->fd, g_readbuf, g_readsz, *last);
+        nread = sys_pread(fd, g_readbuf, g_readsz, *last);
         if (nread < 0) {
             *last = -1;
             return False;
@@ -124,48 +126,51 @@
 static ssize_t cprime_sendfile(
                 struct vfs_handle_struct *  handle,
                 int                         tofd,
-                files_struct *              fromfsp,
+                files_struct *              fsp,
+                int                         fromfd,
                 const DATA_BLOB *           header,
                 SMB_OFF_T                   offset,
                 size_t                      count)
 {
         if (g_readbuf && offset == 0) {
-                prime_cache(handle, fromfsp, offset, count);
+                prime_cache(handle, fsp, fromfd, offset, count);
         }
 
-        return SMB_VFS_NEXT_SENDFILE(handle, tofd, fromfsp,
+        return SMB_VFS_NEXT_SENDFILE(handle, tofd, fsp, fromfd,
                                      header, offset, count);
 }
 
 static ssize_t cprime_read(
                 vfs_handle_struct * handle,
                 files_struct *      fsp,
+                int                 fd,
                 void *              data,
                 size_t              count)
 {
         SMB_OFF_T offset;
 
-        offset = SMB_VFS_LSEEK(fsp, 0, SEEK_CUR);
+        offset = SMB_VFS_LSEEK(fsp, fd, 0, SEEK_CUR);
         if (offset >= 0 && g_readbuf)  {
-                prime_cache(handle, fsp, offset, count);
-                SMB_VFS_LSEEK(fsp, offset, SEEK_SET);
+                prime_cache(handle, fsp, fd, offset, count);
+                SMB_VFS_LSEEK(fsp, fd, offset, SEEK_SET);
         }
 
-        return SMB_VFS_NEXT_READ(handle, fsp, data, count);
+        return SMB_VFS_NEXT_READ(handle, fsp, fd, data, count);
 }
 
 static ssize_t cprime_pread(
                 vfs_handle_struct * handle,
                 files_struct *      fsp,
+                int                 fd,
                 void *              data,
 		        size_t              count,
                 SMB_OFF_T           offset)
 {
         if (g_readbuf) {
-                prime_cache(handle, fsp, offset, count);
+                prime_cache(handle, fsp, fd, offset, count);
         }
 
-        return SMB_VFS_NEXT_PREAD(handle, fsp, data, count, offset);
+        return SMB_VFS_NEXT_PREAD(handle, fsp, fd, data, count, offset);
 }
 
 static vfs_op_tuple cprime_ops [] =

Modified: branches/samba/upstream/source/modules/vfs_cap.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_cap.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_cap.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,469 +1,305 @@
-/*
+/* 
  * CAP VFS module for Samba 3.x Version 0.3
  *
  * Copyright (C) Tim Potter, 1999-2000
  * Copyright (C) Alexander Bokovoy, 2002-2003
  * Copyright (C) Stefan (metze) Metzmacher, 2003
  * Copyright (C) TAKAHASHI Motonobu (monyo), 2003
- * Copyright (C) Jeremy Allison, 2007
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
- *
+ *  
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
- *
+ *  
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 
 #include "includes.h"
 
 /* cap functions */
-static char *capencode(TALLOC_CTX *ctx, const char *from);
-static char *capdecode(TALLOC_CTX *ctx, const char *from);
+static char *capencode(char *to, const char *from);
+static char *capdecode(char *to, const char *from);
 
 static SMB_BIG_UINT cap_disk_free(vfs_handle_struct *handle, const char *path,
-	bool small_query, SMB_BIG_UINT *bsize,
+	BOOL small_query, SMB_BIG_UINT *bsize,
 	SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize)
 {
-	char *cappath = capencode(talloc_tos(), path);
-
-	if (!cappath) {
-		errno = ENOMEM;
-		return (SMB_BIG_UINT)-1;
-	}
+        pstring cappath;
+        capencode(cappath, path);
 	return SMB_VFS_NEXT_DISK_FREE(handle, cappath, small_query, bsize,
-					dfree, dsize);
+					 dfree, dsize);
 }
 
 static SMB_STRUCT_DIR *cap_opendir(vfs_handle_struct *handle, const char *fname, const char *mask, uint32 attr)
 {
-	char *capname = capencode(talloc_tos(), fname);
-
-	if (!capname) {
-		errno = ENOMEM;
-		return NULL;
-	}
+        pstring capname;
+        capencode(capname, fname);
 	return SMB_VFS_NEXT_OPENDIR(handle, capname, mask, attr);
 }
 
 static SMB_STRUCT_DIRENT *cap_readdir(vfs_handle_struct *handle, SMB_STRUCT_DIR *dirp)
 {
-	SMB_STRUCT_DIRENT *result;
-	SMB_STRUCT_DIRENT *newdirent;
-	char *newname;
-	size_t newnamelen;
+        SMB_STRUCT_DIRENT *result;
 	DEBUG(3,("cap: cap_readdir\n"));
-
 	result = SMB_VFS_NEXT_READDIR(handle, dirp);
-	if (!result) {
-		return NULL;
-	}
-
-	newname = capdecode(talloc_tos(), result->d_name);
-	if (!newname) {
-		return NULL;
-	}
-	DEBUG(3,("cap: cap_readdir: %s\n", newname));
-	newnamelen = strlen(newname)+1;
-	newdirent = (SMB_STRUCT_DIRENT *)TALLOC_ARRAY(talloc_tos(),
-			char,
-			sizeof(SMB_STRUCT_DIRENT)+
-				newnamelen);
-	if (!newdirent) {
-		return NULL;
-	}
-	memcpy(newdirent, result, sizeof(SMB_STRUCT_DIRENT));
-	memcpy(&newdirent->d_name, newname, newnamelen);
-	return newdirent;
+	if (result) {
+	  DEBUG(3,("cap: cap_readdir: %s\n", result->d_name));
+	  capdecode(result->d_name, result->d_name);
+        }
+        return result;
 }
 
 static int cap_mkdir(vfs_handle_struct *handle, const char *path, mode_t mode)
 {
-	char *cappath = capencode(talloc_tos(), path);
-
-	if (!cappath) {
-		errno = ENOMEM;
-		return -1;
-	}
+	pstring cappath;
+	capencode(cappath, path);
 	return SMB_VFS_NEXT_MKDIR(handle, cappath, mode);
 }
 
 static int cap_rmdir(vfs_handle_struct *handle, const char *path)
 {
-	char *cappath = capencode(talloc_tos(), path);
-
-	if (!cappath) {
-		errno = ENOMEM;
-		return -1;
-	}
+        pstring cappath;
+        capencode(cappath, path);
 	return SMB_VFS_NEXT_RMDIR(handle, cappath);
 }
 
 static int cap_open(vfs_handle_struct *handle, const char *fname, files_struct *fsp, int flags, mode_t mode)
 {
-	char *cappath = capencode(talloc_tos(), fname);
-
-	if (!cappath) {
-		errno = ENOMEM;
-		return -1;
-	}
+        pstring capname;
 	DEBUG(3,("cap: cap_open for %s\n", fname));
-	return SMB_VFS_NEXT_OPEN(handle, cappath, fsp, flags, mode);
+	capencode(capname, fname);
+	return SMB_VFS_NEXT_OPEN(handle, capname, fsp, flags, mode);
 }
 
 static int cap_rename(vfs_handle_struct *handle, const char *oldname, const char *newname)
 {
-	char *capold = capencode(talloc_tos(), oldname);
-	char *capnew = capencode(talloc_tos(), newname);
+	pstring capold, capnew;
+	capencode(capold, oldname);
+	capencode(capnew, newname);
 
-	if (!capold || !capnew) {
-		errno = ENOMEM;
-		return -1;
-	}
 	return SMB_VFS_NEXT_RENAME(handle, capold, capnew);
 }
 
-static int cap_stat(vfs_handle_struct *handle, const char *path, SMB_STRUCT_STAT *sbuf)
+static int cap_stat(vfs_handle_struct *handle, const char *fname, SMB_STRUCT_STAT *sbuf)
 {
-	char *cappath = capencode(talloc_tos(), path);
-
-	if (!cappath) {
-		errno = ENOMEM;
-		return -1;
-	}
-	return SMB_VFS_NEXT_STAT(handle, cappath, sbuf);
+        pstring capname;
+	capencode(capname, fname);
+	return SMB_VFS_NEXT_STAT(handle, capname, sbuf);
 }
 
 static int cap_lstat(vfs_handle_struct *handle, const char *path, SMB_STRUCT_STAT *sbuf)
 {
-	char *cappath = capencode(talloc_tos(), path);
-
-	if (!cappath) {
-		errno = ENOMEM;
-		return -1;
-	}
+	pstring cappath;
+	capencode(cappath, path);
 	return SMB_VFS_NEXT_LSTAT(handle, cappath, sbuf);
 }
 
 static int cap_unlink(vfs_handle_struct *handle, const char *path)
 {
-	char *cappath = capencode(talloc_tos(), path);
-
-	if (!cappath) {
-		errno = ENOMEM;
-		return -1;
-	}
+	pstring cappath;
+	capencode(cappath, path);
 	return SMB_VFS_NEXT_UNLINK(handle, cappath);
 }
 
 static int cap_chmod(vfs_handle_struct *handle, const char *path, mode_t mode)
 {
-	char *cappath = capencode(talloc_tos(), path);
-
-	if (!cappath) {
-		errno = ENOMEM;
-		return -1;
-	}
+        pstring cappath;
+	capencode(cappath, path);
 	return SMB_VFS_NEXT_CHMOD(handle, cappath, mode);
 }
 
 static int cap_chown(vfs_handle_struct *handle, const char *path, uid_t uid, gid_t gid)
 {
-	char *cappath = capencode(talloc_tos(), path);
-
-	if (!cappath) {
-		errno = ENOMEM;
-		return -1;
-	}
+        pstring cappath;
+	capencode(cappath, path);
 	return SMB_VFS_NEXT_CHOWN(handle, cappath, uid, gid);
 }
 
-static int cap_lchown(vfs_handle_struct *handle, const char *path, uid_t uid, gid_t gid)
-{
-	char *cappath = capencode(talloc_tos(), path);
-
-	if (!cappath) {
-		errno = ENOMEM;
-		return -1;
-	}
-	return SMB_VFS_NEXT_LCHOWN(handle, cappath, uid, gid);
-}
-
 static int cap_chdir(vfs_handle_struct *handle, const char *path)
 {
-	char *cappath = capencode(talloc_tos(), path);
-
-	if (!cappath) {
-		errno = ENOMEM;
-		return -1;
-	}
+        pstring cappath;
 	DEBUG(3,("cap: cap_chdir for %s\n", path));
+	capencode(cappath, path);
 	return SMB_VFS_NEXT_CHDIR(handle, cappath);
 }
 
 static int cap_ntimes(vfs_handle_struct *handle, const char *path, const struct timespec ts[2])
 {
-	char *cappath = capencode(talloc_tos(), path);
-
-	if (!cappath) {
-		errno = ENOMEM;
-		return -1;
-	}
+        pstring cappath;
+	capencode(cappath, path);
 	return SMB_VFS_NEXT_NTIMES(handle, cappath, ts);
 }
 
 
-static bool cap_symlink(vfs_handle_struct *handle, const char *oldpath, const char *newpath)
+static BOOL cap_symlink(vfs_handle_struct *handle, const char *oldpath, const char *newpath)
 {
-	char *capold = capencode(talloc_tos(), oldpath);
-	char *capnew = capencode(talloc_tos(), newpath);
-
-	if (!capold || !capnew) {
-		errno = ENOMEM;
-		return -1;
-	}
-	return SMB_VFS_NEXT_SYMLINK(handle, capold, capnew);
+        pstring capoldpath, capnewpath;
+        capencode(capoldpath, oldpath);
+        capencode(capnewpath, newpath);
+	return SMB_VFS_NEXT_SYMLINK(handle, capoldpath, capnewpath);
 }
 
-static bool cap_readlink(vfs_handle_struct *handle, const char *path, char *buf, size_t bufsiz)
+static BOOL cap_readlink(vfs_handle_struct *handle, const char *path, char *buf, size_t bufsiz)
 {
-	char *cappath = capencode(talloc_tos(), path);
-
-	if (!cappath) {
-		errno = ENOMEM;
-		return -1;
-	}
+        pstring cappath;
+	capencode(cappath, path);
 	return SMB_VFS_NEXT_READLINK(handle, cappath, buf, bufsiz);
 }
 
 static int cap_link(vfs_handle_struct *handle, const char *oldpath, const char *newpath)
 {
-	char *capold = capencode(talloc_tos(), oldpath);
-	char *capnew = capencode(talloc_tos(), newpath);
-
-	if (!capold || !capnew) {
-		errno = ENOMEM;
-		return -1;
-	}
-	return SMB_VFS_NEXT_LINK(handle, capold, capnew);
+        pstring capoldpath, capnewpath;
+        capencode(capoldpath, oldpath);
+        capencode(capnewpath, newpath);
+	return SMB_VFS_NEXT_LINK(handle, capoldpath, capnewpath);
 }
 
 static int cap_mknod(vfs_handle_struct *handle, const char *path, mode_t mode, SMB_DEV_T dev)
 {
-	char *cappath = capencode(talloc_tos(), path);
-
-	if (!cappath) {
-		errno = ENOMEM;
-		return -1;
-	}
+        pstring cappath;
+	capencode(cappath, path);
 	return SMB_VFS_NEXT_MKNOD(handle, cappath, mode, dev);
 }
 
 static char *cap_realpath(vfs_handle_struct *handle, const char *path, char *resolved_path)
 {
         /* monyo need capencode'ed and capdecode'ed? */
-	char *cappath = capencode(talloc_tos(), path);
-
-	if (!cappath) {
-		errno = ENOMEM;
-		return NULL;
-	}
+        pstring cappath;
+	capencode(cappath, path);
 	return SMB_VFS_NEXT_REALPATH(handle, path, resolved_path);
 }
 
-static NTSTATUS cap_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp, const char *path, uint32 security_info_sent, struct security_descriptor *psd)
+static BOOL cap_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp, const char *name, uint32 security_info_sent, struct security_descriptor_info *psd)
 {
-	char *cappath = capencode(talloc_tos(), path);
-
-	if (!cappath) {
-		errno = ENOMEM;
-		return NT_STATUS_NO_MEMORY;
-	}
-	return SMB_VFS_NEXT_SET_NT_ACL(handle, fsp, cappath, security_info_sent, psd);
+        pstring capname;
+	capencode(capname, name);
+	return SMB_VFS_NEXT_SET_NT_ACL(handle, fsp, capname, security_info_sent, psd);
 }
 
-static int cap_chmod_acl(vfs_handle_struct *handle, const char *path, mode_t mode)
+static int cap_chmod_acl(vfs_handle_struct *handle, const char *name, mode_t mode)
 {
-	char *cappath = capencode(talloc_tos(), path);
+        pstring capname;
+	capencode(capname, name);
 
 	/* If the underlying VFS doesn't have ACL support... */
 	if (!handle->vfs_next.ops.chmod_acl) {
 		errno = ENOSYS;
 		return -1;
 	}
-	if (!cappath) {
-		errno = ENOMEM;
-		return -1;
-	}
-	return SMB_VFS_NEXT_CHMOD_ACL(handle, cappath, mode);
+	return SMB_VFS_NEXT_CHMOD_ACL(handle, capname, mode);
 }
 
-static SMB_ACL_T cap_sys_acl_get_file(vfs_handle_struct *handle, const char *path, SMB_ACL_TYPE_T type)
+static SMB_ACL_T cap_sys_acl_get_file(vfs_handle_struct *handle, const char *path_p, SMB_ACL_TYPE_T type)
 {
-	char *cappath = capencode(talloc_tos(), path);
-
-	if (!cappath) {
-		errno = ENOMEM;
-		return (SMB_ACL_T)NULL;
-	}
-	return SMB_VFS_NEXT_SYS_ACL_GET_FILE(handle, cappath, type);
+        pstring cappath_p;
+	capencode(cappath_p, path_p);
+	return SMB_VFS_NEXT_SYS_ACL_GET_FILE(handle, cappath_p, type);
 }
 
-static int cap_sys_acl_set_file(vfs_handle_struct *handle, const char *path, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl)
+static int cap_sys_acl_set_file(vfs_handle_struct *handle, const char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl)
 {
-	char *cappath = capencode(talloc_tos(), path);
-
-	if (!cappath) {
-		errno = ENOMEM;
-		return -1;
-	}
-	return SMB_VFS_NEXT_SYS_ACL_SET_FILE(handle, cappath, acltype, theacl);
+        pstring capname;
+	capencode(capname, name);
+	return SMB_VFS_NEXT_SYS_ACL_SET_FILE(handle, capname, acltype, theacl);
 }
 
 static int cap_sys_acl_delete_def_file(vfs_handle_struct *handle, const char *path)
 {
-	char *cappath = capencode(talloc_tos(), path);
-
-	if (!cappath) {
-		errno = ENOMEM;
-		return -1;
-	}
+        pstring cappath;
+	capencode(cappath, path);
 	return SMB_VFS_NEXT_SYS_ACL_DELETE_DEF_FILE(handle, cappath);
 }
 
 static ssize_t cap_getxattr(vfs_handle_struct *handle, const char *path, const char *name, void *value, size_t size)
 {
-	char *cappath = capencode(talloc_tos(), path);
-	char *capname = capencode(talloc_tos(), name);
-
-	if (!cappath || !capname) {
-		errno = ENOMEM;
-		return -1;
-	}
+        pstring cappath, capname;
+	capencode(cappath, path);
+	capencode(capname, name);
         return SMB_VFS_NEXT_GETXATTR(handle, cappath, capname, value, size);
 }
 
 static ssize_t cap_lgetxattr(vfs_handle_struct *handle, const char *path, const char *name, void *value, size_t
 size)
 {
-	char *cappath = capencode(talloc_tos(), path);
-	char *capname = capencode(talloc_tos(), name);
-
-	if (!cappath || !capname) {
-		errno = ENOMEM;
-		return -1;
-	}
+        pstring cappath, capname;
+	capencode(cappath, path);
+	capencode(capname, name);
         return SMB_VFS_NEXT_LGETXATTR(handle, cappath, capname, value, size);
 }
 
-static ssize_t cap_fgetxattr(vfs_handle_struct *handle, struct files_struct *fsp, const char *path, void *value, size_t size)
+static ssize_t cap_fgetxattr(vfs_handle_struct *handle, struct files_struct *fsp,int fd, const char *name, void *value, size_t size)
 {
-	char *cappath = capencode(talloc_tos(), path);
-
-	if (!cappath) {
-		errno = ENOMEM;
-		return -1;
-	}
-        return SMB_VFS_NEXT_FGETXATTR(handle, fsp, cappath, value, size);
+        pstring capname;
+	capencode(capname, name);
+        return SMB_VFS_NEXT_FGETXATTR(handle, fsp, fd, capname, value, size);
 }
 
 static ssize_t cap_listxattr(vfs_handle_struct *handle, const char *path, char *list, size_t size)
 {
-	char *cappath = capencode(talloc_tos(), path);
-
-	if (!cappath) {
-		errno = ENOMEM;
-		return -1;
-	}
+        pstring cappath;
+	capencode(cappath, path);
         return SMB_VFS_NEXT_LISTXATTR(handle, cappath, list, size);
 }
 
 static ssize_t cap_llistxattr(vfs_handle_struct *handle, const char *path, char *list, size_t size)
 {
-	char *cappath = capencode(talloc_tos(), path);
-
-	if (!cappath) {
-		errno = ENOMEM;
-		return -1;
-	}
+        pstring cappath;
+	capencode(cappath, path);
         return SMB_VFS_NEXT_LLISTXATTR(handle, cappath, list, size);
 }
 
 static int cap_removexattr(vfs_handle_struct *handle, const char *path, const char *name)
 {
-	char *cappath = capencode(talloc_tos(), path);
-	char *capname = capencode(talloc_tos(), name);
-
-	if (!cappath || !capname) {
-		errno = ENOMEM;
-		return -1;
-	}
+        pstring cappath, capname;
+	capencode(cappath, path);
+	capencode(capname, name);
         return SMB_VFS_NEXT_REMOVEXATTR(handle, cappath, capname);
 }
 
 static int cap_lremovexattr(vfs_handle_struct *handle, const char *path, const char *name)
 {
-	char *cappath = capencode(talloc_tos(), path);
-	char *capname = capencode(talloc_tos(), name);
-
-	if (!cappath || !capname) {
-		errno = ENOMEM;
-		return -1;
-	}
+        pstring cappath, capname;
+	capencode(cappath, path);
+	capencode(capname, name);
         return SMB_VFS_NEXT_LREMOVEXATTR(handle, cappath, capname);
 }
 
-static int cap_fremovexattr(vfs_handle_struct *handle, struct files_struct *fsp, const char *path)
+static int cap_fremovexattr(vfs_handle_struct *handle, struct files_struct *fsp,int fd, const char *name)
 {
-	char *cappath = capencode(talloc_tos(), path);
-
-	if (!cappath) {
-		errno = ENOMEM;
-		return -1;
-	}
-        return SMB_VFS_NEXT_FREMOVEXATTR(handle, fsp, cappath);
+        pstring capname;
+	capencode(capname, name);
+        return SMB_VFS_NEXT_FREMOVEXATTR(handle, fsp, fd, capname);
 }
 
 static int cap_setxattr(vfs_handle_struct *handle, const char *path, const char *name, const void *value, size_t size, int flags)
 {
-	char *cappath = capencode(talloc_tos(), path);
-	char *capname = capencode(talloc_tos(), name);
-
-	if (!cappath || !capname) {
-		errno = ENOMEM;
-		return -1;
-	}
+        pstring cappath, capname;
+	capencode(cappath, path);
+	capencode(capname, name);
         return SMB_VFS_NEXT_SETXATTR(handle, cappath, capname, value, size, flags);
 }
 
 static int cap_lsetxattr(vfs_handle_struct *handle, const char *path, const char *name, const void *value, size_t size, int flags)
 {
-	char *cappath = capencode(talloc_tos(), path);
-	char *capname = capencode(talloc_tos(), name);
-
-	if (!cappath || !capname) {
-		errno = ENOMEM;
-		return -1;
-	}
+        pstring cappath, capname;
+	capencode(cappath, path);
+	capencode(capname, name);
         return SMB_VFS_NEXT_LSETXATTR(handle, cappath, capname, value, size, flags);
 }
 
-static int cap_fsetxattr(vfs_handle_struct *handle, struct files_struct *fsp, const char *path, const void *value, size_t size, int flags)
+static int cap_fsetxattr(vfs_handle_struct *handle, struct files_struct *fsp,int fd, const char *name, const void *value, size_t size, int flags)
 {
-	char *cappath = capencode(talloc_tos(), path);
-
-	if (!cappath) {
-		errno = ENOMEM;
-		return -1;
-	}
-        return SMB_VFS_NEXT_FSETXATTR(handle, fsp, cappath, value, size, flags);
+        pstring capname;
+	capencode(capname, name);
+        return SMB_VFS_NEXT_FSETXATTR(handle, fsp, fd, capname, value, size, flags);
 }
 
 /* VFS operations structure */
@@ -473,7 +309,7 @@
 	/* Disk operations */
 
 	{SMB_VFS_OP(cap_disk_free),			SMB_VFS_OP_DISK_FREE,		SMB_VFS_LAYER_TRANSPARENT},
-
+	
 	/* Directory operations */
 
 	{SMB_VFS_OP(cap_opendir),			SMB_VFS_OP_OPENDIR,		SMB_VFS_LAYER_TRANSPARENT},
@@ -490,7 +326,6 @@
 	{SMB_VFS_OP(cap_unlink),			SMB_VFS_OP_UNLINK,		SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(cap_chmod),			SMB_VFS_OP_CHMOD,		SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(cap_chown),			SMB_VFS_OP_CHOWN,		SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(cap_lchown),		SMB_VFS_OP_LCHOWN,		SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(cap_chdir),			SMB_VFS_OP_CHDIR,		SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(cap_ntimes),			SMB_VFS_OP_NTIMES,		SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(cap_symlink),			SMB_VFS_OP_SYMLINK,		SMB_VFS_LAYER_TRANSPARENT},
@@ -510,7 +345,7 @@
 	{SMB_VFS_OP(cap_sys_acl_get_file),		SMB_VFS_OP_SYS_ACL_GET_FILE,		SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(cap_sys_acl_set_file),		SMB_VFS_OP_SYS_ACL_SET_FILE,		SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(cap_sys_acl_delete_def_file),	SMB_VFS_OP_SYS_ACL_DELETE_DEF_FILE,	SMB_VFS_LAYER_TRANSPARENT},
-
+	
 	/* EA operations. */
 	{SMB_VFS_OP(cap_getxattr),			SMB_VFS_OP_GETXATTR,			SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(cap_lgetxattr),			SMB_VFS_OP_LGETXATTR,			SMB_VFS_LAYER_TRANSPARENT},
@@ -564,76 +399,51 @@
 /*******************************************************************
   original code -> ":xx"  - CAP format
 ********************************************************************/
-
-static char *capencode(TALLOC_CTX *ctx, const char *from)
+static char *capencode(char *to, const char *from)
 {
-	char *out = NULL;
-	const char *p1;
-	char *to = NULL;
-	size_t len = 0;
+  pstring cvtbuf;
+  char *out;
 
-	for (p1 = from; *p1; p1++) {
-		if ((unsigned char)*p1 >= 0x80) {
-			len += 3;
-		} else {
-			len++;
-		}
-	}
-	len++;
+  if (to == from) {
+    from = pstrcpy ((char *) cvtbuf, from);
+  }
 
-	to = TALLOC_ARRAY(ctx, char, len);
-	if (!to) {
-		return NULL;
-	}
-
-	for (out = to; *from;) {
-		/* buffer husoku error */
-		if ((unsigned char)*from >= 0x80) {
-			*out++ = hex_tag;
-			*out++ = bin2hex (((*from)>>4)&0x0f);
-			*out++ = bin2hex ((*from)&0x0f);
-			from++;
-		} else {
-			*out++ = *from++;
-		}
-  	}
-	*out = '\0';
-	return to;
+  for (out = to; *from && (out - to < sizeof(pstring)-7);) {
+    /* buffer husoku error */
+    if ((unsigned char)*from >= 0x80) {
+      *out++ = hex_tag;
+      *out++ = bin2hex (((*from)>>4)&0x0f);
+      *out++ = bin2hex ((*from)&0x0f);
+      from++;
+    } 
+    else {
+      *out++ = *from++;
+    }
+  }
+  *out = '\0';
+  return to;
 }
 
 /*******************************************************************
   CAP -> original code
 ********************************************************************/
 /* ":xx" -> a byte */
-
-static char *capdecode(TALLOC_CTX *ctx, const char *from)
+static char *capdecode(char *to, const char *from)
 {
-	const char *p1;
-	char *out = NULL;
-	char *to = NULL;
-	size_t len = 0;
+  pstring cvtbuf;
+  char *out;
 
-	for (p1 = from; *p1; len++) {
-		if (is_hex(from)) {
-			p1 += 3;
-		} else {
-			p1++;
-		}
-	}
-
-	to = TALLOC_ARRAY(ctx, char, len);
-	if (!to) {
-		return NULL;
-	}
-
-	for (out = to; *from;) {
-		if (is_hex(from)) {
-			*out++ = (hex2bin(from[1])<<4) | (hex2bin(from[2]));
-			from += 3;
-		} else {
-			*out++ = *from++;
-		}
-	}
-	*out = '\0';
-	return to;
+  if (to == from) {
+    from = pstrcpy ((char *) cvtbuf, from);
+  }
+  for (out = to; *from && (out - to < sizeof(pstring)-3);) {
+    if (is_hex(from)) {
+      *out++ = (hex2bin (from[1])<<4) | (hex2bin (from[2]));
+      from += 3;
+    } else {
+      *out++ = *from++;
+    }
+  }
+  *out = '\0';
+  return to;
 }

Modified: branches/samba/upstream/source/modules/vfs_catia.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_catia.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_catia.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-/*
+/* 
  * Catia VFS module
  *
  * Implement a fixed mapping of forbidden NT characters in filenames that are
@@ -12,236 +12,170 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
- *
+ * 
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
- *
+ * 
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 
 #include "includes.h"
 
-static char *catia_string_replace(TALLOC_CTX *ctx,
-			const char *s,
-			unsigned char oldc,
-			unsigned char newc)
+static void catia_string_replace(char *s, unsigned char oldc, unsigned 
+				 char newc)
 {
-	smb_ucs2_t *tmpbuf = NULL;
-	smb_ucs2_t *ptr = NULL;
-	smb_ucs2_t old = oldc;
-	char *ret = NULL;
+        static smb_ucs2_t tmpbuf[sizeof(pstring)];
+        smb_ucs2_t *ptr = tmpbuf;
+        smb_ucs2_t old = oldc;
 
-	if (!s) {
-		return NULL;
-	}
+        push_ucs2(NULL, tmpbuf, s, sizeof(tmpbuf), STR_TERMINATE);
 
-	if (push_ucs2_talloc(ctx, &tmpbuf, s) == -1) {
-		return NULL;
-	}
+        for (;*ptr;ptr++)
+                if (*ptr==old) *ptr=newc;
 
-	ptr = tmpbuf;
-
-	for (;*ptr;ptr++) {
-		if (*ptr==old) {
-			*ptr=newc;
-		}
-	}
-
-	if (pull_ucs2_talloc(ctx, &ret, tmpbuf) == -1) {
-		TALLOC_FREE(tmpbuf);
-		return NULL;
-	}
-	TALLOC_FREE(tmpbuf);
-	return ret;
+        pull_ucs2(NULL, s, tmpbuf, -1, sizeof(tmpbuf), STR_TERMINATE);
 }
 
-static char *from_unix(TALLOC_CTX *ctx, const char *s)
+static void from_unix(char *s)
 {
-	char *ret = catia_string_replace(ctx, s, '\x22', '\xa8');
-	ret = catia_string_replace(ctx, ret, '\x2a', '\xa4');
-	ret = catia_string_replace(ctx, ret, '\x2f', '\xf8');
-	ret = catia_string_replace(ctx, ret, '\x3a', '\xf7');
-	ret = catia_string_replace(ctx, ret, '\x3c', '\xab');
-	ret = catia_string_replace(ctx, ret, '\x3e', '\xbb');
-	ret = catia_string_replace(ctx, ret, '\x3f', '\xbf');
-	ret = catia_string_replace(ctx, ret, '\x5c', '\xff');
-	ret = catia_string_replace(ctx, ret, '\x7c', '\xa6');
-	return catia_string_replace(ctx, ret, ' ', '\xb1');
+        catia_string_replace(s, '\x22', '\xa8');
+        catia_string_replace(s, '\x2a', '\xa4');
+        catia_string_replace(s, '\x2f', '\xf8');
+        catia_string_replace(s, '\x3a', '\xf7');
+        catia_string_replace(s, '\x3c', '\xab');
+        catia_string_replace(s, '\x3e', '\xbb');
+        catia_string_replace(s, '\x3f', '\xbf');
+        catia_string_replace(s, '\x5c', '\xff');
+        catia_string_replace(s, '\x7c', '\xa6');
+        catia_string_replace(s, ' ', '\xb1');
 }
 
-static char *to_unix(TALLOC_CTX *ctx, const char *s)
+static void to_unix(char *s)
 {
-	char *ret = catia_string_replace(ctx, s, '\xa8', '\x22');
-	ret = catia_string_replace(ctx, ret, '\xa4', '\x2a');
-	ret = catia_string_replace(ctx, ret, '\xf8', '\x2f');
-	ret = catia_string_replace(ctx, ret, '\xf7', '\x3a');
-	ret = catia_string_replace(ctx, ret, '\xab', '\x3c');
-	ret = catia_string_replace(ctx, ret, '\xbb', '\x3e');
-	ret = catia_string_replace(ctx, ret, '\xbf', '\x3f');
-	ret = catia_string_replace(ctx, ret, '\xff', '\x5c');
-	ret = catia_string_replace(ctx, ret, '\xa6', '\x7c');
-	return catia_string_replace(ctx, ret, '\xb1', ' ');
+        catia_string_replace(s, '\xa8', '\x22');
+        catia_string_replace(s, '\xa4', '\x2a');
+        catia_string_replace(s, '\xf8', '\x2f');
+        catia_string_replace(s, '\xf7', '\x3a');
+        catia_string_replace(s, '\xab', '\x3c');
+        catia_string_replace(s, '\xbb', '\x3e');
+        catia_string_replace(s, '\xbf', '\x3f');
+        catia_string_replace(s, '\xff', '\x5c');
+        catia_string_replace(s, '\xa6', '\x7c');
+        catia_string_replace(s, '\xb1', ' ');
 }
 
 static SMB_STRUCT_DIR *catia_opendir(vfs_handle_struct *handle,
 			  const char *fname, const char *mask, uint32 attr)
 {
-	char *name = to_unix(talloc_tos(), fname);
+        pstring name;
+        pstrcpy(name, fname);
+        to_unix(name);
 
-	if (!name) {
-		errno = ENOMEM;
-		return NULL;
-	}
         return SMB_VFS_NEXT_OPENDIR(handle, name, mask, attr);
 }
 
-static SMB_STRUCT_DIRENT *catia_readdir(vfs_handle_struct *handle,
+static SMB_STRUCT_DIRENT *catia_readdir(vfs_handle_struct *handle, 
 					SMB_STRUCT_DIR *dirp)
 {
-	SMB_STRUCT_DIRENT *result = SMB_VFS_NEXT_READDIR(handle, dirp);
-	SMB_STRUCT_DIRENT *newdirent;
-	char *newname;
-	size_t newnamelen;
+        SMB_STRUCT_DIRENT *result = SMB_VFS_NEXT_READDIR(handle, dirp);
 
-	if (result == NULL) {
-		return result;
-	}
+        if (result == NULL)
+                return result;
 
-	newname = from_unix(talloc_tos(), result->d_name);
-	if (!newname) {
-		return NULL;
-	}
-	newnamelen = strlen(newname)+1;
-	newdirent = (SMB_STRUCT_DIRENT *)TALLOC_ARRAY(talloc_tos(),
-						char,
-						sizeof(SMB_STRUCT_DIRENT)+
-							newnamelen);
-	if (!newdirent) {
-		return NULL;
-	}
-	memcpy(newdirent, result, sizeof(SMB_STRUCT_DIRENT));
-	memcpy(&newdirent->d_name, newname, newnamelen);
-	return newdirent;
+        from_unix(result->d_name);
+        return result;
 }
 
 static int catia_open(vfs_handle_struct *handle,
-		      const char *fname,
-		      files_struct *fsp,
-		      int flags,
-		      mode_t mode)
+		      const char *fname, files_struct *fsp, int flags, mode_t mode)
 {
-	char *name = to_unix(talloc_tos(), fname);
+        pstring name;
 
-	if (!name) {
-		errno = ENOMEM;
-		return -1;
-	}
+        pstrcpy(name, fname);
+        to_unix(name);
+ 
         return SMB_VFS_NEXT_OPEN(handle, name, fsp, flags, mode);
 }
 
 static int catia_rename(vfs_handle_struct *handle,
 			const char *oldname, const char *newname)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *oname = to_unix(ctx, oldname);
-	char *nname = to_unix(ctx, newname);
+        pstring oname, nname;
 
-	if (!oname || !nname) {
-		errno = ENOMEM;
-		return -1;
-	}
-	DEBUG(10, ("converted old name: %s\n", oname));
-	DEBUG(10, ("converted new name: %s\n", nname));
+        pstrcpy(oname, oldname);
+        to_unix(oname);
+        pstrcpy(nname, newname);
+        to_unix(nname);
 
+        DEBUG(10, ("converted old name: %s\n", oname));
+        DEBUG(10, ("converted new name: %s\n", nname));
+ 
         return SMB_VFS_NEXT_RENAME(handle, oname, nname);
 }
 
 static int catia_stat(vfs_handle_struct *handle,
 		      const char *fname, SMB_STRUCT_STAT *sbuf)
 {
-	char *name = to_unix(talloc_tos(), fname);
+        pstring name;
+        pstrcpy(name, fname);
+        to_unix(name);
 
-	if (!name) {
-		errno = ENOMEM;
-		return -1;
-	}
         return SMB_VFS_NEXT_STAT(handle, name, sbuf);
 }
 
 static int catia_lstat(vfs_handle_struct *handle,
 		       const char *path, SMB_STRUCT_STAT *sbuf)
 {
-	char *name = to_unix(talloc_tos(), path);
+        pstring name;
+        pstrcpy(name, path);
+        to_unix(name);
 
-	if (!name) {
-		errno = ENOMEM;
-		return -1;
-	}
         return SMB_VFS_NEXT_LSTAT(handle, name, sbuf);
 }
 
 static int catia_unlink(vfs_handle_struct *handle, const char *path)
 {
-	char *name = to_unix(talloc_tos(), path);
+        pstring name;
+        pstrcpy(name, path);
+        to_unix(name);
 
-	if (!name) {
-		errno = ENOMEM;
-		return -1;
-	}
         return SMB_VFS_NEXT_UNLINK(handle, name);
 }
 
 static int catia_chmod(vfs_handle_struct *handle,
 		       const char *path, mode_t mode)
 {
-	char *name = to_unix(talloc_tos(), path);
+        pstring name;
+        pstrcpy(name, path);
+        to_unix(name);
 
-	if (!name) {
-		errno = ENOMEM;
-		return -1;
-	}
         return SMB_VFS_NEXT_CHMOD(handle, name, mode);
 }
 
 static int catia_chown(vfs_handle_struct *handle,
 		       const char *path, uid_t uid, gid_t gid)
 {
-	char *name = to_unix(talloc_tos(), path);
+        pstring name;
+        pstrcpy(name, path);
+        to_unix(name);
 
-	if (!name) {
-		errno = ENOMEM;
-		return -1;
-	}
         return SMB_VFS_NEXT_CHOWN(handle, name, uid, gid);
 }
 
-static int catia_lchown(vfs_handle_struct *handle,
-		       const char *path, uid_t uid, gid_t gid)
-{
-	char *name = to_unix(talloc_tos(), path);
-
-	if (!name) {
-		errno = ENOMEM;
-		return -1;
-	}
-        return SMB_VFS_NEXT_LCHOWN(handle, name, uid, gid);
-}
-
 static int catia_chdir(vfs_handle_struct *handle,
 		       const char *path)
 {
-	char *name = to_unix(talloc_tos(), path);
+        pstring name;
+        pstrcpy(name, path);
+        to_unix(name);
 
-	if (!name) {
-		errno = ENOMEM;
-		return -1;
-	}
         return SMB_VFS_NEXT_CHDIR(handle, name);
 }
 
@@ -256,13 +190,13 @@
         return SMB_VFS_NEXT_NTIMES(handle, path, ts);
 }
 
-static bool catia_symlink(vfs_handle_struct *handle,
+static BOOL catia_symlink(vfs_handle_struct *handle,
 			  const char *oldpath, const char *newpath)
 {
         return SMB_VFS_NEXT_SYMLINK(handle, oldpath, newpath);
 }
 
-static bool catia_readlink(vfs_handle_struct *handle,
+static BOOL catia_readlink(vfs_handle_struct *handle,
 			   const char *path, char *buf, size_t bufsiz)
 {
         return SMB_VFS_NEXT_READLINK(handle, path, buf, bufsiz);
@@ -286,16 +220,17 @@
         return SMB_VFS_NEXT_REALPATH(handle, path, resolved_path);
 }
 
-static NTSTATUS catia_get_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
+static size_t catia_get_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
 			       const char *name, uint32 security_info,
-			       struct  security_descriptor **ppdesc)
+			       struct  security_descriptor_info **ppdesc)
 {
-        return SMB_VFS_NEXT_GET_NT_ACL(handle, name, security_info, ppdesc);
+        return SMB_VFS_NEXT_GET_NT_ACL(handle, fsp, name, security_info,
+				       ppdesc);
 }
 
-static NTSTATUS catia_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
+static BOOL catia_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp, 
 			     const char *name, uint32 security_info_sent,
-			     struct security_descriptor *psd)
+			     struct security_descriptor_info *psd)
 {
         return SMB_VFS_NEXT_SET_NT_ACL(handle, fsp, name, security_info_sent,
 				       psd);
@@ -318,66 +253,64 @@
 
         /* Directory operations */
 
-        {SMB_VFS_OP(catia_opendir), SMB_VFS_OP_OPENDIR,
+        {SMB_VFS_OP(catia_opendir), SMB_VFS_OP_OPENDIR, 
 SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(catia_readdir), SMB_VFS_OP_READDIR,
+        {SMB_VFS_OP(catia_readdir), SMB_VFS_OP_READDIR, 
 SMB_VFS_LAYER_TRANSPARENT},
 
         /* File operations */
 
-        {SMB_VFS_OP(catia_open), SMB_VFS_OP_OPEN,
+        {SMB_VFS_OP(catia_open), SMB_VFS_OP_OPEN, 
 SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(catia_rename),                      SMB_VFS_OP_RENAME,
+        {SMB_VFS_OP(catia_rename),                      SMB_VFS_OP_RENAME, 
         SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(catia_stat), SMB_VFS_OP_STAT,
+        {SMB_VFS_OP(catia_stat), SMB_VFS_OP_STAT, 
 SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(catia_lstat),                       SMB_VFS_OP_LSTAT,
+        {SMB_VFS_OP(catia_lstat),                       SMB_VFS_OP_LSTAT,  
 SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(catia_unlink),                      SMB_VFS_OP_UNLINK,
+        {SMB_VFS_OP(catia_unlink),                      SMB_VFS_OP_UNLINK, 
         SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(catia_chmod),                       SMB_VFS_OP_CHMOD,
+        {SMB_VFS_OP(catia_chmod),                       SMB_VFS_OP_CHMOD,  
 SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(catia_chown),                       SMB_VFS_OP_CHOWN,
+        {SMB_VFS_OP(catia_chown),                       SMB_VFS_OP_CHOWN,  
 SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(catia_lchown),                      SMB_VFS_OP_LCHOWN,
+        {SMB_VFS_OP(catia_chdir),                       SMB_VFS_OP_CHDIR,  
 SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(catia_chdir),                       SMB_VFS_OP_CHDIR,
+        {SMB_VFS_OP(catia_getwd),                       SMB_VFS_OP_GETWD,  
 SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(catia_getwd),                       SMB_VFS_OP_GETWD,
+        {SMB_VFS_OP(catia_ntimes),                       SMB_VFS_OP_NTIMES,  
 SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(catia_ntimes),                       SMB_VFS_OP_NTIMES,
+        {SMB_VFS_OP(catia_symlink), SMB_VFS_OP_SYMLINK, 
 SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(catia_symlink), SMB_VFS_OP_SYMLINK,
+        {SMB_VFS_OP(catia_readlink), SMB_VFS_OP_READLINK, 
 SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(catia_readlink), SMB_VFS_OP_READLINK,
+        {SMB_VFS_OP(catia_link), SMB_VFS_OP_LINK, 
 SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(catia_link), SMB_VFS_OP_LINK,
+        {SMB_VFS_OP(catia_mknod),                       SMB_VFS_OP_MKNOD,  
 SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(catia_mknod),                       SMB_VFS_OP_MKNOD,
+        {SMB_VFS_OP(catia_realpath), SMB_VFS_OP_REALPATH, 
 SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(catia_realpath), SMB_VFS_OP_REALPATH,
-SMB_VFS_LAYER_TRANSPARENT},
 
         /* NT File ACL operations */
 
-        {SMB_VFS_OP(catia_get_nt_acl), SMB_VFS_OP_GET_NT_ACL,
+        {SMB_VFS_OP(catia_get_nt_acl), SMB_VFS_OP_GET_NT_ACL, 
 SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(catia_set_nt_acl), SMB_VFS_OP_SET_NT_ACL,
+        {SMB_VFS_OP(catia_set_nt_acl), SMB_VFS_OP_SET_NT_ACL, 
 SMB_VFS_LAYER_TRANSPARENT},
 
         /* POSIX ACL operations */
 
-        {SMB_VFS_OP(catia_chmod_acl), SMB_VFS_OP_CHMOD_ACL,
+        {SMB_VFS_OP(catia_chmod_acl), SMB_VFS_OP_CHMOD_ACL, 
 SMB_VFS_LAYER_TRANSPARENT},
 
 
-        {NULL,                                          SMB_VFS_OP_NOOP,
+        {NULL,                                          SMB_VFS_OP_NOOP,   
 SMB_VFS_LAYER_NOOP}
 };
 
 NTSTATUS vfs_catia_init(void);
 NTSTATUS vfs_catia_init(void)
 {
-        return smb_register_vfs(SMB_VFS_INTERFACE_VERSION, "catia",
+        return smb_register_vfs(SMB_VFS_INTERFACE_VERSION, "catia", 
 catia_op_tuples);
 }

Modified: branches/samba/upstream/source/modules/vfs_commit.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_commit.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_commit.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,10 +1,9 @@
 /*
- * Copyright (c) James Peach 2006, 2007
- * Copyright (c) David Losada Carballo 2007
+ * Copyright (c) James Peach 2006
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
@@ -13,7 +12,8 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -30,73 +30,23 @@
  * Tunables:
  *
  *  commit: dthresh         Amount of dirty data that can accumulate
- *                          before we commit (sync) it.
+ *			                before we commit (sync) it.
  *
  *  commit: debug           Debug level at which to emit messages.
  *
- *  commit: eof mode        String. Tunes how the module tries to guess when
- *                          the client has written the last bytes of the file.
- *                          Possible values (default = hinted):
- *
- *     (*)  = hinted        Some clients (i.e. Windows Explorer) declare the
- *                          size of the file before transferring it. With this
- *                          option, we remember that hint, and commit after
- *                          writing in that file position. If the client
- *                          doesn't declare the size of file, commiting on EOF 
- *                          is not triggered.
- *
- *          = growth        Commits after a write operation has made the file
- *                          size grow. If the client declares a file size, it
- *                          refrains to commit until the file has reached it.
- *                          Useful for defeating writeback on NFS shares.
- *
  */
 
 #define MODULE "commit"
 
 static int module_debug;
 
-enum eof_mode
-{
-    EOF_NONE = 0x0000,
-    EOF_HINTED = 0x0001,
-    EOF_GROWTH = 0x0002
-};
-
 struct commit_info
 {
-        /* For chunk-based commits */
         SMB_OFF_T dbytes;	/* Dirty (uncommitted) bytes */
         SMB_OFF_T dthresh;	/* Dirty data threshold */
-        /* For commits on EOF */
-        enum eof_mode on_eof;
-        SMB_OFF_T eof;		/* Expected file size */
 };
 
-static int commit_do(
-        struct commit_info *            c,
-        int                             fd)
-{
-        int result;
-
-	DEBUG(module_debug,
-		("%s: flushing %lu dirty bytes\n",
-		 MODULE, (unsigned long)c->dbytes));
-
-#if HAVE_FDATASYNC
-        result = fdatasync(fd);
-#elif HAVE_FSYNC
-        result = fsync(fd);
-#else
-	result = 0
-#endif
-        if (result == 0) {
-                c->dbytes = 0;	/* on success, no dirty bytes */
-        }
-        return result;
-}
-
-static int commit_all(
+static void commit_all(
         struct vfs_handle_struct *	handle,
         files_struct *		        fsp)
 {
@@ -108,52 +58,34 @@
                                 ("%s: flushing %lu dirty bytes\n",
                                  MODULE, (unsigned long)c->dbytes));
 
-                        return commit_do(c, fsp->fh->fd);
+                        fdatasync(fsp->fh->fd);
+                        c->dbytes = 0;
                 }
         }
-        return 0;
 }
 
-static int commit(
+static void commit(
         struct vfs_handle_struct *	handle,
         files_struct *		        fsp,
-	SMB_OFF_T			offset,
         ssize_t			        last_write)
 {
         struct commit_info *c;
 
-        if ((c = VFS_FETCH_FSP_EXTENSION(handle, fsp)) == NULL) {
-		return 0;
-	}
+        if ((c = VFS_FETCH_FSP_EXTENSION(handle, fsp))) {
 
-	c->dbytes += last_write;	/* dirty bytes always counted */
+                if (last_write > 0) {
+                        c->dbytes += last_write;
+                }
 
-	if (c->dthresh && (c->dbytes > c->dthresh)) {
-		return commit_do(c, fsp->fh->fd);
-	}
+                if (c->dbytes > c->dthresh) {
+                        DEBUG(module_debug,
+                                ("%s: flushing %lu dirty bytes\n",
+                                 MODULE, (unsigned long)c->dbytes));
 
-	/* Return if we are not in EOF mode or if we have temporarily opted
-	 * out of it.
-	 */
-	if (c->on_eof == EOF_NONE || c->eof < 0) {
-		return 0;
-	}
-
-	/* This write hit or went past our cache the file size. */
-	if ((offset + last_write) >= c->eof) {
-		if (commit_do(c, fsp->fh->fd) == -1) {
-			return -1;
-		}
-
-		/* Hinted mode only commits the first time we hit EOF. */
-		if (c->on_eof == EOF_HINTED) {
-		    c->eof = -1;
-		} else if (c->on_eof == EOF_GROWTH) {
-		    c->eof = offset + last_write;
-		}
-	}
-
-        return 0;
+                        fdatasync(fsp->fh->fd);
+                        c->dbytes = 0;
+                }
+        }
 }
 
 static int commit_connect(
@@ -173,73 +105,38 @@
 	mode_t		    mode)
 {
         SMB_OFF_T dthresh;
-	const char *eof_mode;
-        struct commit_info *c = NULL;
-        int fd;
 
         /* Don't bother with read-only files. */
         if ((flags & O_ACCMODE) == O_RDONLY) {
                 return SMB_VFS_NEXT_OPEN(handle, fname, fsp, flags, mode);
         }
 
-        /* Read and check module configuration */
         dthresh = conv_str_size(lp_parm_const_string(SNUM(handle->conn),
                                         MODULE, "dthresh", NULL));
 
-	eof_mode = lp_parm_const_string(SNUM(handle->conn),
-                                        MODULE, "eof mode", "none");
-
-        if (dthresh > 0 || !strequal(eof_mode, "none")) {
+        if (dthresh > 0) {
+                struct commit_info * c;
                 c = VFS_ADD_FSP_EXTENSION(handle, fsp, struct commit_info);
-                /* Process main tunables */
                 if (c) {
                         c->dthresh = dthresh;
                         c->dbytes = 0;
-                        c->on_eof = EOF_NONE;
-                        c->eof = 0;
                 }
         }
-        /* Process eof_mode tunable */
-        if (c) {
-                if (strequal(eof_mode, "hinted")) {
-                        c->on_eof = EOF_HINTED;
-                } else if (strequal(eof_mode, "growth")) {
-                        c->on_eof = EOF_GROWTH;
-                }
-        }
 
-        fd = SMB_VFS_NEXT_OPEN(handle, fname, fsp, flags, mode);
-	if (fd == -1) {
-		VFS_REMOVE_FSP_EXTENSION(handle, fsp);
-		return fd;
-	}
-
-        /* EOF commit modes require us to know the initial file size. */
-        if (c && (c->on_eof != EOF_NONE)) {
-                SMB_STRUCT_STAT st;
-                if (SMB_VFS_FSTAT(fsp, &st) == -1) {
-                        return -1;
-                }
-		c->eof = st.st_size;
-        }
-
-        return 0;
+        return SMB_VFS_NEXT_OPEN(handle, fname, fsp, flags, mode);
 }
 
 static ssize_t commit_write(
         vfs_handle_struct * handle,
         files_struct *      fsp,
+        int                 fd,
         void *              data,
         size_t              count)
 {
         ssize_t ret;
-        ret = SMB_VFS_NEXT_WRITE(handle, fsp, data, count);
 
-        if (ret > 0) {
-                if (commit(handle, fsp, fsp->fh->pos, ret) == -1) {
-                        return -1;
-                }
-        }
+        ret = SMB_VFS_NEXT_WRITE(handle, fsp, fd, data, count);
+        commit(handle, fsp, ret);
 
         return ret;
 }
@@ -247,50 +144,28 @@
 static ssize_t commit_pwrite(
         vfs_handle_struct * handle,
         files_struct *      fsp,
+        int                 fd,
         void *              data,
         size_t              count,
 	SMB_OFF_T	    offset)
 {
         ssize_t ret;
 
-        ret = SMB_VFS_NEXT_PWRITE(handle, fsp, data, count, offset);
-        if (ret > 0) {
-                if (commit(handle, fsp, offset, ret) == -1) {
-                        return -1;
-                }
-        }
+        ret = SMB_VFS_NEXT_PWRITE(handle, fsp, fd, data, count, offset);
+        commit(handle, fsp, ret);
 
         return ret;
 }
 
-static int commit_close(
+static ssize_t commit_close(
         vfs_handle_struct * handle,
-        files_struct *      fsp)
+        files_struct *      fsp,
+        int                 fd)
 {
-        /* Commit errors not checked, close() will find them again */
         commit_all(handle, fsp);
-        return SMB_VFS_NEXT_CLOSE(handle, fsp);
+        return SMB_VFS_NEXT_CLOSE(handle, fsp, fd);
 }
 
-static int commit_ftruncate(
-        vfs_handle_struct * handle,
-        files_struct *      fsp,
-        SMB_OFF_T           len)
-{
-        int result;
-
-        result = SMB_VFS_NEXT_FTRUNCATE(handle, fsp, len);
-        if (result == 0) {
-		struct commit_info *c;
-		if ((c = VFS_FETCH_FSP_EXTENSION(handle, fsp))) {
-			commit(handle, fsp, len, 0);
-			c->eof = len;
-		}
-        }
-
-        return result;
-}
-
 static vfs_op_tuple commit_ops [] =
 {
         {SMB_VFS_OP(commit_open),
@@ -303,8 +178,6 @@
                 SMB_VFS_OP_PWRITE, SMB_VFS_LAYER_TRANSPARENT},
         {SMB_VFS_OP(commit_connect),
                 SMB_VFS_OP_CONNECT,  SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(commit_ftruncate),
-                SMB_VFS_OP_FTRUNCATE,  SMB_VFS_LAYER_TRANSPARENT},
 
         {SMB_VFS_OP(NULL), SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP}
 };
@@ -315,4 +188,3 @@
 	return smb_register_vfs(SMB_VFS_INTERFACE_VERSION, MODULE, commit_ops);
 }
 
-

Modified: branches/samba/upstream/source/modules/vfs_default.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_default.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_default.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -40,7 +41,7 @@
 
 /* Disk operations */
 
-static SMB_BIG_UINT vfswrap_disk_free(vfs_handle_struct *handle,  const char *path, bool small_query, SMB_BIG_UINT *bsize,
+static SMB_BIG_UINT vfswrap_disk_free(vfs_handle_struct *handle,  const char *path, BOOL small_query, SMB_BIG_UINT *bsize,
 			       SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize)
 {
 	SMB_BIG_UINT result;
@@ -79,7 +80,7 @@
 #endif
 }
 
-static int vfswrap_get_shadow_copy_data(struct vfs_handle_struct *handle, struct files_struct *fsp, SHADOW_COPY_DATA *shadow_copy_data, bool labels)
+static int vfswrap_get_shadow_copy_data(struct vfs_handle_struct *handle, struct files_struct *fsp, SHADOW_COPY_DATA *shadow_copy_data, BOOL labels)
 {
 	errno = ENOSYS;
 	return -1;  /* Not implemented. */
@@ -90,17 +91,6 @@
 	return sys_statvfs(path, statbuf);
 }
 
-static uint32_t vfswrap_fs_capabilities(struct vfs_handle_struct *handle)
-{
-#if defined(DARWINOS)
-	struct vfs_statvfs_struct statbuf;
-	ZERO_STRUCT(statbuf);
-	sys_statvfs(handle->conn->connectpath, &statbuf);
-	return statbuf.FsCapabilities;
-#endif
-	return FILE_CASE_SENSITIVE_SEARCH | FILE_CASE_PRESERVED_NAMES;
-}
-
 /* Directory operations */
 
 static SMB_STRUCT_DIR *vfswrap_opendir(vfs_handle_struct *handle,  const char *fname, const char *mask, uint32 attr)
@@ -149,7 +139,7 @@
 static int vfswrap_mkdir(vfs_handle_struct *handle,  const char *path, mode_t mode)
 {
 	int result;
-	bool has_dacl = False;
+	BOOL has_dacl = False;
 
 	START_PROFILE(syscall_mkdir);
 
@@ -208,39 +198,40 @@
 	return result;
 }
 
-static int vfswrap_close(vfs_handle_struct *handle, files_struct *fsp)
+static int vfswrap_close(vfs_handle_struct *handle, files_struct *fsp, int fd)
 {
 	int result;
 
 	START_PROFILE(syscall_close);
-	result = fd_close_posix(fsp);
+
+	result = close(fd);
 	END_PROFILE(syscall_close);
 	return result;
 }
 
-static ssize_t vfswrap_read(vfs_handle_struct *handle, files_struct *fsp, void *data, size_t n)
+static ssize_t vfswrap_read(vfs_handle_struct *handle, files_struct *fsp, int fd, void *data, size_t n)
 {
 	ssize_t result;
 
 	START_PROFILE_BYTES(syscall_read, n);
-	result = sys_read(fsp->fh->fd, data, n);
+	result = sys_read(fd, data, n);
 	END_PROFILE(syscall_read);
 	return result;
 }
 
-static ssize_t vfswrap_pread(vfs_handle_struct *handle, files_struct *fsp, void *data,
+static ssize_t vfswrap_pread(vfs_handle_struct *handle, files_struct *fsp, int fd, void *data,
 			size_t n, SMB_OFF_T offset)
 {
 	ssize_t result;
 
 #if defined(HAVE_PREAD) || defined(HAVE_PREAD64)
 	START_PROFILE_BYTES(syscall_pread, n);
-	result = sys_pread(fsp->fh->fd, data, n, offset);
+	result = sys_pread(fd, data, n, offset);
 	END_PROFILE(syscall_pread);
 
 	if (result == -1 && errno == ESPIPE) {
 		/* Maintain the fiction that pipes can be seeked (sought?) on. */
-		result = SMB_VFS_READ(fsp, data, n);
+		result = SMB_VFS_READ(fsp, fd, data, n);
 		fsp->fh->pos = 0;
 	}
 
@@ -248,23 +239,23 @@
 	SMB_OFF_T   curr;
 	int lerrno;
 
-	curr = SMB_VFS_LSEEK(fsp, 0, SEEK_CUR);
+	curr = SMB_VFS_LSEEK(fsp, fd, 0, SEEK_CUR);
 	if (curr == -1 && errno == ESPIPE) {
 		/* Maintain the fiction that pipes can be seeked (sought?) on. */
-		result = SMB_VFS_READ(fsp, data, n);
+		result = SMB_VFS_READ(fsp, fd, data, n);
 		fsp->fh->pos = 0;
 		return result;
 	}
 
-	if (SMB_VFS_LSEEK(fsp, offset, SEEK_SET) == -1) {
+	if (SMB_VFS_LSEEK(fsp, fd, offset, SEEK_SET) == -1) {
 		return -1;
 	}
 
 	errno = 0;
-	result = SMB_VFS_READ(fsp, data, n);
+	result = SMB_VFS_READ(fsp, fd, data, n);
 	lerrno = errno;
 
-	SMB_VFS_LSEEK(fsp, curr, SEEK_SET);
+	SMB_VFS_LSEEK(fsp, fd, curr, SEEK_SET);
 	errno = lerrno;
 
 #endif /* HAVE_PREAD */
@@ -272,48 +263,48 @@
 	return result;
 }
 
-static ssize_t vfswrap_write(vfs_handle_struct *handle, files_struct *fsp, const void *data, size_t n)
+static ssize_t vfswrap_write(vfs_handle_struct *handle, files_struct *fsp, int fd, const void *data, size_t n)
 {
 	ssize_t result;
 
 	START_PROFILE_BYTES(syscall_write, n);
-	result = sys_write(fsp->fh->fd, data, n);
+	result = sys_write(fd, data, n);
 	END_PROFILE(syscall_write);
 	return result;
 }
 
-static ssize_t vfswrap_pwrite(vfs_handle_struct *handle, files_struct *fsp, const void *data,
+static ssize_t vfswrap_pwrite(vfs_handle_struct *handle, files_struct *fsp, int fd, const void *data,
 			size_t n, SMB_OFF_T offset)
 {
 	ssize_t result;
 
 #if defined(HAVE_PWRITE) || defined(HAVE_PRWITE64)
 	START_PROFILE_BYTES(syscall_pwrite, n);
-	result = sys_pwrite(fsp->fh->fd, data, n, offset);
+	result = sys_pwrite(fd, data, n, offset);
 	END_PROFILE(syscall_pwrite);
 
 	if (result == -1 && errno == ESPIPE) {
 		/* Maintain the fiction that pipes can be sought on. */
-		result = SMB_VFS_WRITE(fsp, data, n);
+		result = SMB_VFS_WRITE(fsp, fd, data, n);
 	}
 
 #else /* HAVE_PWRITE */
 	SMB_OFF_T   curr;
 	int         lerrno;
 
-	curr = SMB_VFS_LSEEK(fsp, 0, SEEK_CUR);
+	curr = SMB_VFS_LSEEK(fsp, fd, 0, SEEK_CUR);
 	if (curr == -1) {
 		return -1;
 	}
 
-	if (SMB_VFS_LSEEK(fsp, offset, SEEK_SET) == -1) {
+	if (SMB_VFS_LSEEK(fsp, fd, offset, SEEK_SET) == -1) {
 		return -1;
 	}
 
-	result = SMB_VFS_WRITE(fsp, data, n);
+	result = SMB_VFS_WRITE(fsp, fd, data, n);
 	lerrno = errno;
 
-	SMB_VFS_LSEEK(fsp, curr, SEEK_SET);
+	SMB_VFS_LSEEK(fsp, fd, curr, SEEK_SET);
 	errno = lerrno;
 
 #endif /* HAVE_PWRITE */
@@ -321,15 +312,15 @@
 	return result;
 }
 
-static SMB_OFF_T vfswrap_lseek(vfs_handle_struct *handle, files_struct *fsp, SMB_OFF_T offset, int whence)
+static SMB_OFF_T vfswrap_lseek(vfs_handle_struct *handle, files_struct *fsp, int filedes, SMB_OFF_T offset, int whence)
 {
 	SMB_OFF_T result = 0;
 
 	START_PROFILE(syscall_lseek);
 
 	/* Cope with 'stat' file opens. */
-	if (fsp->fh->fd != -1)
-		result = sys_lseek(fsp->fh->fd, offset, whence);
+	if (filedes != -1)
+		result = sys_lseek(filedes, offset, whence);
 
 	/*
 	 * We want to maintain the fiction that we can seek
@@ -347,31 +338,17 @@
 	return result;
 }
 
-static ssize_t vfswrap_sendfile(vfs_handle_struct *handle, int tofd, files_struct *fromfsp, const DATA_BLOB *hdr,
+static ssize_t vfswrap_sendfile(vfs_handle_struct *handle, int tofd, files_struct *fsp, int fromfd, const DATA_BLOB *hdr,
 			SMB_OFF_T offset, size_t n)
 {
 	ssize_t result;
 
 	START_PROFILE_BYTES(syscall_sendfile, n);
-	result = sys_sendfile(tofd, fromfsp->fh->fd, hdr, offset, n);
+	result = sys_sendfile(tofd, fromfd, hdr, offset, n);
 	END_PROFILE(syscall_sendfile);
 	return result;
 }
 
-static ssize_t vfswrap_recvfile(vfs_handle_struct *handle,
-			int fromfd,
-			files_struct *tofsp,
-			SMB_OFF_T offset,
-			size_t n)
-{
-	ssize_t result;
-
-	START_PROFILE_BYTES(syscall_recvfile, n);
-	result = sys_recvfile(fromfd, tofsp->fh->fd, offset, n);
-	END_PROFILE(syscall_recvfile);
-	return result;
-}
-
 /*********************************************************
  For rename across filesystems Patch from Warren Birnbaum
  <warrenb at hpcvscdp.cv.hp.com>
@@ -476,13 +453,13 @@
 	return result;
 }
 
-static int vfswrap_fsync(vfs_handle_struct *handle, files_struct *fsp)
+static int vfswrap_fsync(vfs_handle_struct *handle, files_struct *fsp, int fd)
 {
 #ifdef HAVE_FSYNC
 	int result;
 
 	START_PROFILE(syscall_fsync);
-	result = fsync(fsp->fh->fd);
+	result = fsync(fd);
 	END_PROFILE(syscall_fsync);
 	return result;
 #else
@@ -500,12 +477,12 @@
 	return result;
 }
 
-static int vfswrap_fstat(vfs_handle_struct *handle, files_struct *fsp, SMB_STRUCT_STAT *sbuf)
+static int vfswrap_fstat(vfs_handle_struct *handle, files_struct *fsp, int fd, SMB_STRUCT_STAT *sbuf)
 {
 	int result;
 
 	START_PROFILE(syscall_fstat);
-	result = sys_fstat(fsp->fh->fd, sbuf);
+	result = sys_fstat(fd, sbuf);
 	END_PROFILE(syscall_fstat);
 	return result;
 }
@@ -558,7 +535,7 @@
 	return result;
 }
 
-static int vfswrap_fchmod(vfs_handle_struct *handle, files_struct *fsp, mode_t mode)
+static int vfswrap_fchmod(vfs_handle_struct *handle, files_struct *fsp, int fd, mode_t mode)
 {
 	int result;
 
@@ -572,7 +549,7 @@
 
 	{
 		int saved_errno = errno; /* We might get ENOSYS */
-		if ((result = SMB_VFS_FCHMOD_ACL(fsp, mode)) == 0) {
+		if ((result = SMB_VFS_FCHMOD_ACL(fsp, fd, mode)) == 0) {
 			END_PROFILE(syscall_fchmod);
 			return result;
 		}
@@ -581,7 +558,7 @@
 	}
 
 #if defined(HAVE_FCHMOD)
-	result = fchmod(fsp->fh->fd, mode);
+	result = fchmod(fd, mode);
 #else
 	result = -1;
 	errno = ENOSYS;
@@ -591,7 +568,7 @@
 	return result;
 }
 
-static int vfswrap_chown(vfs_handle_struct *handle, const char *path, uid_t uid, gid_t gid)
+static int vfswrap_chown(vfs_handle_struct *handle,  const char *path, uid_t uid, gid_t gid)
 {
 	int result;
 
@@ -601,13 +578,13 @@
 	return result;
 }
 
-static int vfswrap_fchown(vfs_handle_struct *handle, files_struct *fsp, uid_t uid, gid_t gid)
+static int vfswrap_fchown(vfs_handle_struct *handle, files_struct *fsp, int fd, uid_t uid, gid_t gid)
 {
 #ifdef HAVE_FCHOWN
 	int result;
 
 	START_PROFILE(syscall_fchown);
-	result = fchown(fsp->fh->fd, uid, gid);
+	result = fchown(fd, uid, gid);
 	END_PROFILE(syscall_fchown);
 	return result;
 #else
@@ -616,16 +593,6 @@
 #endif
 }
 
-static int vfswrap_lchown(vfs_handle_struct *handle, const char *path, uid_t uid, gid_t gid)
-{
-	int result;
-
-	START_PROFILE(syscall_lchown);
-	result = sys_lchown(path, uid, gid);
-	END_PROFILE(syscall_lchown);
-	return result;
-}
-
 static int vfswrap_chdir(vfs_handle_struct *handle,  const char *path)
 {
 	int result;
@@ -683,17 +650,17 @@
  allocate is set.
 **********************************************************************/
 
-static int strict_allocate_ftruncate(vfs_handle_struct *handle, files_struct *fsp, SMB_OFF_T len)
+static int strict_allocate_ftruncate(vfs_handle_struct *handle, files_struct *fsp, int fd, SMB_OFF_T len)
 {
 	SMB_STRUCT_STAT st;
-	SMB_OFF_T currpos = SMB_VFS_LSEEK(fsp, 0, SEEK_CUR);
+	SMB_OFF_T currpos = SMB_VFS_LSEEK(fsp, fd, 0, SEEK_CUR);
 	unsigned char zero_space[4096];
 	SMB_OFF_T space_to_write;
 
 	if (currpos == -1)
 		return -1;
 
-	if (SMB_VFS_FSTAT(fsp, &st) == -1)
+	if (SMB_VFS_FSTAT(fsp, fd, &st) == -1)
 		return -1;
 
 	space_to_write = len - st.st_size;
@@ -708,10 +675,10 @@
 
 	/* Shrink - just ftruncate. */
 	if (st.st_size > len)
-		return sys_ftruncate(fsp->fh->fd, len);
+		return sys_ftruncate(fd, len);
 
 	/* Write out the real space on disk. */
-	if (SMB_VFS_LSEEK(fsp, st.st_size, SEEK_SET) != st.st_size)
+	if (SMB_VFS_LSEEK(fsp, fd, st.st_size, SEEK_SET) != st.st_size)
 		return -1;
 
 	space_to_write = len - st.st_size;
@@ -721,7 +688,7 @@
 		SMB_OFF_T retlen;
 		SMB_OFF_T current_len_to_write = MIN(sizeof(zero_space),space_to_write);
 
-		retlen = SMB_VFS_WRITE(fsp,(char *)zero_space,current_len_to_write);
+		retlen = SMB_VFS_WRITE(fsp,fsp->fh->fd,(char *)zero_space,current_len_to_write);
 		if (retlen <= 0)
 			return -1;
 
@@ -729,13 +696,13 @@
 	}
 
 	/* Seek to where we were */
-	if (SMB_VFS_LSEEK(fsp, currpos, SEEK_SET) != currpos)
+	if (SMB_VFS_LSEEK(fsp, fd, currpos, SEEK_SET) != currpos)
 		return -1;
 
 	return 0;
 }
 
-static int vfswrap_ftruncate(vfs_handle_struct *handle, files_struct *fsp, SMB_OFF_T len)
+static int vfswrap_ftruncate(vfs_handle_struct *handle, files_struct *fsp, int fd, SMB_OFF_T len)
 {
 	int result = -1;
 	SMB_STRUCT_STAT st;
@@ -745,7 +712,7 @@
 	START_PROFILE(syscall_ftruncate);
 
 	if (lp_strict_allocate(SNUM(fsp->conn))) {
-		result = strict_allocate_ftruncate(handle, fsp, len);
+		result = strict_allocate_ftruncate(handle, fsp, fd, len);
 		END_PROFILE(syscall_ftruncate);
 		return result;
 	}
@@ -756,14 +723,14 @@
 	   expansion and some that don't! On Linux fat can't do
 	   ftruncate extend but ext2 can. */
 
-	result = sys_ftruncate(fsp->fh->fd, len);
+	result = sys_ftruncate(fd, len);
 	if (result == 0)
 		goto done;
 
 	/* According to W. R. Stevens advanced UNIX prog. Pure 4.3 BSD cannot
 	   extend a file with ftruncate. Provide alternate implementation
 	   for this */
-	currpos = SMB_VFS_LSEEK(fsp, 0, SEEK_CUR);
+	currpos = SMB_VFS_LSEEK(fsp, fd, 0, SEEK_CUR);
 	if (currpos == -1) {
 		goto done;
 	}
@@ -772,7 +739,7 @@
 	   size in which case the ftruncate above should have
 	   succeeded or shorter, in which case seek to len - 1 and
 	   write 1 byte of zero */
-	if (SMB_VFS_FSTAT(fsp, &st) == -1) {
+	if (SMB_VFS_FSTAT(fsp, fd, &st) == -1) {
 		goto done;
 	}
 
@@ -793,14 +760,14 @@
 		goto done;
 	}
 
-	if (SMB_VFS_LSEEK(fsp, len-1, SEEK_SET) != len -1)
+	if (SMB_VFS_LSEEK(fsp, fd, len-1, SEEK_SET) != len -1)
 		goto done;
 
-	if (SMB_VFS_WRITE(fsp, &c, 1)!=1)
+	if (SMB_VFS_WRITE(fsp, fd, &c, 1)!=1)
 		goto done;
 
 	/* Seek to where we were */
-	if (SMB_VFS_LSEEK(fsp, currpos, SEEK_SET) != currpos)
+	if (SMB_VFS_LSEEK(fsp, fd, currpos, SEEK_SET) != currpos)
 		goto done;
 	result = 0;
 
@@ -810,49 +777,48 @@
 	return result;
 }
 
-static bool vfswrap_lock(vfs_handle_struct *handle, files_struct *fsp, int op, SMB_OFF_T offset, SMB_OFF_T count, int type)
+static BOOL vfswrap_lock(vfs_handle_struct *handle, files_struct *fsp, int fd, int op, SMB_OFF_T offset, SMB_OFF_T count, int type)
 {
-	bool result;
+	BOOL result;
 
 	START_PROFILE(syscall_fcntl_lock);
-	result =  fcntl_lock(fsp->fh->fd, op, offset, count, type);
+	result =  fcntl_lock(fd, op, offset, count, type);
 	END_PROFILE(syscall_fcntl_lock);
 	return result;
 }
 
-static int vfswrap_kernel_flock(vfs_handle_struct *handle, files_struct *fsp,
+static int vfswrap_kernel_flock(vfs_handle_struct *handle, files_struct *fsp, int fd,
 				uint32 share_mode)
 {
 	START_PROFILE(syscall_kernel_flock);
-	kernel_flock(fsp->fh->fd, share_mode);
+	kernel_flock(fd, share_mode);
 	END_PROFILE(syscall_kernel_flock);
 	return 0;
 }
 
-static bool vfswrap_getlock(vfs_handle_struct *handle, files_struct *fsp, SMB_OFF_T *poffset, SMB_OFF_T *pcount, int *ptype, pid_t *ppid)
+static BOOL vfswrap_getlock(vfs_handle_struct *handle, files_struct *fsp, int fd, SMB_OFF_T *poffset, SMB_OFF_T *pcount, int *ptype, pid_t *ppid)
 {
-	bool result;
+	BOOL result;
 
 	START_PROFILE(syscall_fcntl_getlock);
-	result =  fcntl_getlock(fsp->fh->fd, poffset, pcount, ptype, ppid);
+	result =  fcntl_getlock(fd, poffset, pcount, ptype, ppid);
 	END_PROFILE(syscall_fcntl_getlock);
 	return result;
 }
 
-static int vfswrap_linux_setlease(vfs_handle_struct *handle, files_struct *fsp,
+static int vfswrap_linux_setlease(vfs_handle_struct *handle, files_struct *fsp, int fd,
 				int leasetype)
 {
 	int result = -1;
 
 	START_PROFILE(syscall_linux_setlease);
 
-#ifdef HAVE_KERNEL_OPLOCKS_LINUX
+#ifdef LINUX
 	/* first set the signal handler */
-	if(linux_set_lease_sighandler(fsp->fh->fd) == -1) {
+	if(linux_set_lease_sighandler(fd) == -1)
 		return -1;
-	}
 
-	result = linux_setlease(fsp->fh->fd, leasetype);
+	result = linux_setlease(fd, leasetype);
 #else
 	errno = ENOSYS;
 #endif
@@ -947,94 +913,29 @@
 #endif
 }
 
-static struct file_id vfswrap_file_id_create(struct vfs_handle_struct *handle, SMB_DEV_T dev, SMB_INO_T inode)
+static size_t vfswrap_fget_nt_acl(vfs_handle_struct *handle, files_struct *fsp, int fd, uint32 security_info, SEC_DESC **ppdesc)
 {
-	return file_id_create_dev(dev, inode);
-}
+	size_t result;
 
-static NTSTATUS vfswrap_streaminfo(vfs_handle_struct *handle,
-				   struct files_struct *fsp,
-				   const char *fname,
-				   TALLOC_CTX *mem_ctx,
-				   unsigned int *pnum_streams,
-				   struct stream_struct **pstreams)
-{
-	SMB_STRUCT_STAT sbuf;
-	unsigned int num_streams = 0;
-	struct stream_struct *streams = NULL;
-	int ret;
-
-	if ((fsp != NULL) && (fsp->is_directory)) {
-		/*
-		 * No default streams on directories
-		 */
-		goto done;
-	}
-
-	if ((fsp != NULL) && (fsp->fh->fd != -1)) {
-		ret = SMB_VFS_FSTAT(fsp, &sbuf);
-	}
-	else {
-		ret = SMB_VFS_STAT(handle->conn, fname, &sbuf);
-	}
-
-	if (ret == -1) {
-		return map_nt_error_from_unix(errno);
-	}
-
-	if (S_ISDIR(sbuf.st_mode)) {
-		goto done;
-	}
-
-	streams = talloc(mem_ctx, struct stream_struct);
-
-	if (streams == NULL) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	streams->size = sbuf.st_size;
-	streams->alloc_size = get_allocation_size(handle->conn, fsp, &sbuf);
-
-	streams->name = talloc_strdup(streams, "::$DATA");
-	if (streams->name == NULL) {
-		TALLOC_FREE(streams);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	num_streams = 1;
- done:
-	*pnum_streams = num_streams;
-	*pstreams = streams;
-	return NT_STATUS_OK;
-}
-
-static NTSTATUS vfswrap_fget_nt_acl(vfs_handle_struct *handle,
-				    files_struct *fsp,
-				    uint32 security_info, SEC_DESC **ppdesc)
-{
-	NTSTATUS result;
-
 	START_PROFILE(fget_nt_acl);
-	result = posix_fget_nt_acl(fsp, security_info, ppdesc);
+	result = get_nt_acl(fsp, security_info, ppdesc);
 	END_PROFILE(fget_nt_acl);
 	return result;
 }
 
-static NTSTATUS vfswrap_get_nt_acl(vfs_handle_struct *handle,
-				   const char *name,
-				   uint32 security_info, SEC_DESC **ppdesc)
+static size_t vfswrap_get_nt_acl(vfs_handle_struct *handle, files_struct *fsp, const char *name, uint32 security_info, SEC_DESC **ppdesc)
 {
-	NTSTATUS result;
+	size_t result;
 
 	START_PROFILE(get_nt_acl);
-	result = posix_get_nt_acl(handle->conn, name, security_info, ppdesc);
+	result = get_nt_acl(fsp, security_info, ppdesc);
 	END_PROFILE(get_nt_acl);
 	return result;
 }
 
-static NTSTATUS vfswrap_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp, uint32 security_info_sent, SEC_DESC *psd)
+static BOOL vfswrap_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp, int fd, uint32 security_info_sent, SEC_DESC *psd)
 {
-	NTSTATUS result;
+	BOOL result;
 
 	START_PROFILE(fset_nt_acl);
 	result = set_nt_acl(fsp, security_info_sent, psd);
@@ -1042,9 +943,9 @@
 	return result;
 }
 
-static NTSTATUS vfswrap_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp, const char *name, uint32 security_info_sent, SEC_DESC *psd)
+static BOOL vfswrap_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp, const char *name, uint32 security_info_sent, SEC_DESC *psd)
 {
-	NTSTATUS result;
+	BOOL result;
 
 	START_PROFILE(set_nt_acl);
 	result = set_nt_acl(fsp, security_info_sent, psd);
@@ -1067,7 +968,7 @@
 #endif
 }
 
-static int vfswrap_fchmod_acl(vfs_handle_struct *handle, files_struct *fsp, mode_t mode)
+static int vfswrap_fchmod_acl(vfs_handle_struct *handle, files_struct *fsp, int fd, mode_t mode)
 {
 #ifdef HAVE_NO_ACL
 	errno = ENOSYS;
@@ -1076,7 +977,7 @@
 	int result;
 
 	START_PROFILE(fchmod_acl);
-	result = fchmod_acl(fsp, mode);
+	result = fchmod_acl(fsp, fd, mode);
 	END_PROFILE(fchmod_acl);
 	return result;
 #endif
@@ -1107,9 +1008,9 @@
 	return sys_acl_get_file(handle, path_p, type);
 }
 
-static SMB_ACL_T vfswrap_sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp)
+static SMB_ACL_T vfswrap_sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp, int fd)
 {
-	return sys_acl_get_fd(handle, fsp);
+	return sys_acl_get_fd(handle, fsp, fd);
 }
 
 static int vfswrap_sys_acl_clear_perms(vfs_handle_struct *handle,  SMB_ACL_PERMSET_T permset)
@@ -1162,9 +1063,9 @@
 	return sys_acl_set_file(handle, name, acltype, theacl);
 }
 
-static int vfswrap_sys_acl_set_fd(vfs_handle_struct *handle, files_struct *fsp, SMB_ACL_T theacl)
+static int vfswrap_sys_acl_set_fd(vfs_handle_struct *handle, files_struct *fsp, int fd, SMB_ACL_T theacl)
 {
-	return sys_acl_set_fd(handle, fsp, theacl);
+	return sys_acl_set_fd(handle, fsp, fd, theacl);
 }
 
 static int vfswrap_sys_acl_delete_def_file(vfs_handle_struct *handle,  const char *path)
@@ -1206,9 +1107,9 @@
 	return sys_lgetxattr(path, name, value, size);
 }
 
-static ssize_t vfswrap_fgetxattr(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name, void *value, size_t size)
+static ssize_t vfswrap_fgetxattr(struct vfs_handle_struct *handle, struct files_struct *fsp,int fd, const char *name, void *value, size_t size)
 {
-	return sys_fgetxattr(fsp->fh->fd, name, value, size);
+	return sys_fgetxattr(fd, name, value, size);
 }
 
 static ssize_t vfswrap_listxattr(struct vfs_handle_struct *handle, const char *path, char *list, size_t size)
@@ -1221,9 +1122,9 @@
 	return sys_llistxattr(path, list, size);
 }
 
-ssize_t vfswrap_flistxattr(struct vfs_handle_struct *handle, struct files_struct *fsp, char *list, size_t size)
+ssize_t vfswrap_flistxattr(struct vfs_handle_struct *handle, struct files_struct *fsp,int fd, char *list, size_t size)
 {
-	return sys_flistxattr(fsp->fh->fd, list, size);
+	return sys_flistxattr(fd, list, size);
 }
 
 static int vfswrap_removexattr(struct vfs_handle_struct *handle, const char *path, const char *name)
@@ -1236,9 +1137,9 @@
 	return sys_lremovexattr(path, name);
 }
 
-static int vfswrap_fremovexattr(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name)
+static int vfswrap_fremovexattr(struct vfs_handle_struct *handle, struct files_struct *fsp,int fd, const char *name)
 {
-	return sys_fremovexattr(fsp->fh->fd, name);
+	return sys_fremovexattr(fd, name);
 }
 
 static int vfswrap_setxattr(struct vfs_handle_struct *handle, const char *path, const char *name, const void *value, size_t size, int flags)
@@ -1251,9 +1152,9 @@
 	return sys_lsetxattr(path, name, value, size, flags);
 }
 
-static int vfswrap_fsetxattr(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name, const void *value, size_t size, int flags)
+static int vfswrap_fsetxattr(struct vfs_handle_struct *handle, struct files_struct *fsp,int fd, const char *name, const void *value, size_t size, int flags)
 {
-	return sys_fsetxattr(fsp->fh->fd, name, value, size, flags);
+	return sys_fsetxattr(fd, name, value, size, flags);
 }
 
 static int vfswrap_aio_read(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb)
@@ -1271,9 +1172,9 @@
 	return sys_aio_return(aiocb);
 }
 
-static int vfswrap_aio_cancel(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb)
+static int vfswrap_aio_cancel(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, SMB_STRUCT_AIOCB *aiocb)
 {
-	return sys_aio_cancel(fsp->fh->fd, aiocb);
+	return sys_aio_cancel(fd, aiocb);
 }
 
 static int vfswrap_aio_error(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb)
@@ -1291,36 +1192,6 @@
 	return sys_aio_suspend(aiocb, n, timeout);
 }
 
-static bool vfswrap_aio_force(struct vfs_handle_struct *handle, struct files_struct *fsp)
-{
-	return false;
-}
-
-static bool vfswrap_is_offline(struct vfs_handle_struct *handle, const char *path, SMB_STRUCT_STAT *sbuf)
-{
-	if (ISDOT(path) || ISDOTDOT(path)) {
-		return false;
-	}
-
-	if (!lp_dmapi_support(SNUM(handle->conn)) || !dmapi_have_session()) {
-#if defined(ENOTSUP)
-		errno = ENOTSUP;
-#endif
-		return false;
-	}
-
-	return (dmapi_file_flags(path) & FILE_ATTRIBUTE_OFFLINE) != 0;
-}
-
-static int vfswrap_set_offline(struct vfs_handle_struct *handle, const char *path)
-{
-	/* We don't know how to set offline bit by default, needs to be overriden in the vfs modules */
-#if defined(ENOTSUP)
-	errno = ENOTSUP;
-#endif
-	return -1;
-}
-
 static vfs_op_tuple vfs_default_ops[] = {
 
 	/* Disk operations */
@@ -1339,8 +1210,6 @@
 	 SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(vfswrap_statvfs),	SMB_VFS_OP_STATVFS,
 	 SMB_VFS_LAYER_OPAQUE},
-	{SMB_VFS_OP(vfswrap_fs_capabilities), SMB_VFS_OP_FS_CAPABILITIES,
-	 SMB_VFS_LAYER_OPAQUE},
 
 	/* Directory operations */
 
@@ -1379,8 +1248,6 @@
 	 SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(vfswrap_sendfile),	SMB_VFS_OP_SENDFILE,
 	 SMB_VFS_LAYER_OPAQUE},
-	{SMB_VFS_OP(vfswrap_recvfile),	SMB_VFS_OP_RECVFILE,
-	 SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(vfswrap_rename),	SMB_VFS_OP_RENAME,
 	 SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(vfswrap_fsync),	SMB_VFS_OP_FSYNC,
@@ -1401,8 +1268,6 @@
 	 SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(vfswrap_fchown),	SMB_VFS_OP_FCHOWN,
 	 SMB_VFS_LAYER_OPAQUE},
-	{SMB_VFS_OP(vfswrap_lchown),	SMB_VFS_OP_LCHOWN,
-	 SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(vfswrap_chdir),	SMB_VFS_OP_CHDIR,
 	 SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(vfswrap_getwd),	SMB_VFS_OP_GETWD,
@@ -1433,10 +1298,6 @@
 	 SMB_VFS_LAYER_OPAQUE},
 	{SMB_VFS_OP(vfswrap_chflags),	SMB_VFS_OP_CHFLAGS,
 	 SMB_VFS_LAYER_OPAQUE},
-	{SMB_VFS_OP(vfswrap_file_id_create),	SMB_VFS_OP_FILE_ID_CREATE,
-	 SMB_VFS_LAYER_OPAQUE},
-	{SMB_VFS_OP(vfswrap_streaminfo),	SMB_VFS_OP_STREAMINFO,
-	 SMB_VFS_LAYER_OPAQUE},
 
 	/* NT ACL operations. */
 
@@ -1542,14 +1403,6 @@
 	{SMB_VFS_OP(vfswrap_aio_suspend),SMB_VFS_OP_AIO_SUSPEND,
 	 SMB_VFS_LAYER_OPAQUE},
 
-	{SMB_VFS_OP(vfswrap_aio_force), SMB_VFS_OP_AIO_FORCE,
-	 SMB_VFS_LAYER_OPAQUE},
-
-	{SMB_VFS_OP(vfswrap_is_offline),SMB_VFS_OP_IS_OFFLINE,
-	 SMB_VFS_LAYER_OPAQUE},
-	{SMB_VFS_OP(vfswrap_set_offline),SMB_VFS_OP_SET_OFFLINE,
-	 SMB_VFS_LAYER_OPAQUE},
-
 	/* Finish VFS operations definition */
 
 	{SMB_VFS_OP(NULL),		SMB_VFS_OP_NOOP,

Modified: branches/samba/upstream/source/modules/vfs_default_quota.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_default_quota.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_default_quota.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *  
  * This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  * GNU General Public License for more details.
  *  
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 /*

Modified: branches/samba/upstream/source/modules/vfs_expand_msdfs.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_expand_msdfs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_expand_msdfs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *  
  * This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  * GNU General Public License for more details.
  *  
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -37,25 +38,24 @@
   This is to redirect a DFS client to a host close to it.
 ***********************************************************/
 
-static char *read_target_host(TALLOC_CTX *ctx, const char *mapfile)
+static BOOL read_target_host(const char *mapfile, pstring targethost)
 {
 	XFILE *f;
-	char buf[1024];
+	pstring buf;
 	char *space = buf;
-	bool found = false;
-
+	BOOL found = False;
+	
 	f = x_fopen(mapfile, O_RDONLY, 0);
 
 	if (f == NULL) {
 		DEBUG(0,("can't open IP map %s. Error %s\n",
 			 mapfile, strerror(errno) ));
-		return NULL;
+		return False;
 	}
 
 	DEBUG(10, ("Scanning mapfile [%s]\n", mapfile));
 
 	while (x_fgets(buf, sizeof(buf), f) != NULL) {
-		char addr[INET6_ADDRSTRLEN];
 
 		if ((strlen(buf) > 0) && (buf[strlen(buf)-1] == '\n'))
 			buf[strlen(buf)-1] = '\0';
@@ -71,25 +71,24 @@
 
 		*space = '\0';
 
-		if (strncmp(client_addr(get_client_fd(),addr,sizeof(addr)),
-				buf, strlen(buf)) == 0) {
-			found = true;
+		if (strncmp(client_addr(), buf, strlen(buf)) == 0) {
+			found = True;
 			break;
 		}
 	}
 
 	x_fclose(f);
 
-	if (!found) {
-		return NULL;
-	}
+	if (!found)
+		return False;
 
 	space += 1;
 
 	while (isspace(*space))
 		space += 1;
 
-	return talloc_strdup(ctx, space);
+	pstrcpy(targethost, space);
+	return True;
 }
 
 /**********************************************************
@@ -105,83 +104,65 @@
 
 ***********************************************************/
 
-static char *expand_msdfs_target(TALLOC_CTX *ctx,
-				connection_struct *conn,
-				char *target)
+static BOOL expand_msdfs_target(connection_struct* conn, pstring target)
 {
-	char *mapfilename = NULL;
+	pstring mapfilename;
 	char *filename_start = strchr_m(target, '@');
-	char *filename_end = NULL;
-	int filename_len = 0;
-	char *targethost = NULL;
-	char *new_target = NULL;
+	char *filename_end;
+	int filename_len;
+	pstring targethost;
+	pstring new_target;
 
 	if (filename_start == NULL) {
 		DEBUG(10, ("No filename start in %s\n", target));
-		return NULL;
+		return False;
 	}
 
 	filename_end = strchr_m(filename_start+1, '@');
 
 	if (filename_end == NULL) {
 		DEBUG(10, ("No filename end in %s\n", target));
-		return NULL;
+		return False;
 	}
 
 	filename_len = PTR_DIFF(filename_end, filename_start+1);
-	mapfilename = talloc_strdup(ctx, filename_start+1);
-	if (!mapfilename) {
-		return NULL;
-	}
+	pstrcpy(mapfilename, filename_start+1);
 	mapfilename[filename_len] = '\0';
 
 	DEBUG(10, ("Expanding from table [%s]\n", mapfilename));
 
-	if ((targethost = read_target_host(ctx, mapfilename)) == NULL) {
+	if (!read_target_host(mapfilename, targethost)) {
 		DEBUG(1, ("Could not expand target host from file %s\n",
 			  mapfilename));
-		return NULL;
+		return False;
 	}
 
-	targethost = talloc_sub_advanced(ctx,
-				lp_servicename(SNUM(conn)),
-				conn->user,
-				conn->connectpath,
-				conn->gid,
-				get_current_username(),
-				current_user_info.domain,
-				targethost);
+	standard_sub_advanced(lp_servicename(SNUM(conn)), conn->user,
+			      conn->connectpath, conn->gid,
+			      get_current_username(),
+			      current_user_info.domain,
+			      mapfilename, sizeof(mapfilename));
 
 	DEBUG(10, ("Expanded targethost to %s\n", targethost));
 
-	/* Replace the part between '@...@' */
 	*filename_start = '\0';
-	new_target = talloc_asprintf(ctx,
-				"%s%s%s",
-				target,
-				targethost,
-				filename_end+1);
-	if (!new_target) {
-		return NULL;
-	}
+	pstrcpy(new_target, target);
+	pstrcat(new_target, targethost);
+	pstrcat(new_target, filename_end+1);
 
 	DEBUG(10, ("New DFS target: %s\n", new_target));
-	return new_target;
+	pstrcpy(target, new_target);
+	return True;
 }
 
 static int expand_msdfs_readlink(struct vfs_handle_struct *handle,
 				 const char *path, char *buf, size_t bufsiz)
 {
-	TALLOC_CTX *ctx = talloc_tos();
+	pstring target;
 	int result;
-	char *target = TALLOC_ARRAY(ctx, char, PATH_MAX+1);
 
-	if (!target) {
-		errno = ENOMEM;
-		return -1;
-	}
 	result = SMB_VFS_NEXT_READLINK(handle, path, target,
-				       PATH_MAX);
+				       sizeof(target));
 
 	if (result < 0)
 		return result;
@@ -190,8 +171,7 @@
 
 	if ((strncmp(target, "msdfs:", strlen("msdfs:")) == 0) &&
 	    (strchr_m(target, '@') != NULL)) {
-		target = expand_msdfs_target(ctx, handle->conn, target);
-		if (!target) {
+		if (!expand_msdfs_target(handle->conn, target)) {
 			errno = ENOENT;
 			return -1;
 		}
@@ -203,7 +183,7 @@
 
 /* VFS operations structure */
 
-static vfs_op_tuple expand_msdfs_ops[] = {
+static vfs_op_tuple expand_msdfs_ops[] = {	
 	{SMB_VFS_OP(expand_msdfs_readlink), SMB_VFS_OP_READLINK,
 	 SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(NULL), SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP}

Modified: branches/samba/upstream/source/modules/vfs_extd_audit.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_extd_audit.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_extd_audit.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *  
  * This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
  * GNU General Public License for more details.
  *  
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 
@@ -37,13 +38,13 @@
 static int audit_mkdir(vfs_handle_struct *handle, const char *path, mode_t mode);
 static int audit_rmdir(vfs_handle_struct *handle, const char *path);
 static int audit_open(vfs_handle_struct *handle, const char *fname, files_struct *fsp, int flags, mode_t mode);
-static int audit_close(vfs_handle_struct *handle, files_struct *fsp);
+static int audit_close(vfs_handle_struct *handle, files_struct *fsp, int fd);
 static int audit_rename(vfs_handle_struct *handle, const char *oldname, const char *newname);
 static int audit_unlink(vfs_handle_struct *handle, const char *path);
 static int audit_chmod(vfs_handle_struct *handle, const char *path, mode_t mode);
 static int audit_chmod_acl(vfs_handle_struct *handle, const char *name, mode_t mode);
-static int audit_fchmod(vfs_handle_struct *handle, files_struct *fsp, mode_t mode);
-static int audit_fchmod_acl(vfs_handle_struct *handle, files_struct *fsp, mode_t mode);
+static int audit_fchmod(vfs_handle_struct *handle, files_struct *fsp, int fd, mode_t mode);
+static int audit_fchmod_acl(vfs_handle_struct *handle, files_struct *fsp, int fd, mode_t mode);
 
 /* VFS operations */
 
@@ -114,11 +115,7 @@
 
 	int priority;
 
-	priority = lp_parm_enum(SNUM(handle->conn), "extd_audit", "priority",
-				enum_log_priorities, LOG_NOTICE);
-	if (priority == -1) {
-		priority = LOG_WARNING;
-	}
+	priority = lp_parm_enum(SNUM(handle->conn), "extd_audit", "priority", enum_log_priorities, LOG_NOTICE);
 
 	return priority;
 }
@@ -224,18 +221,18 @@
 	return result;
 }
 
-static int audit_close(vfs_handle_struct *handle, files_struct *fsp)
+static int audit_close(vfs_handle_struct *handle, files_struct *fsp, int fd)
 {
 	int result;
 	
-	result = SMB_VFS_NEXT_CLOSE(handle, fsp);
+	result = SMB_VFS_NEXT_CLOSE(handle, fsp, fd);
 
 	syslog(audit_syslog_priority(handle), "close fd %d %s%s\n",
-	       fsp->fh->fd,
+	       fd,
 	       (result < 0) ? "failed: " : "",
 	       (result < 0) ? strerror(errno) : "");
 	DEBUG(2, ("vfs_extd_audit: close fd %d %s %s\n",
-	       fsp->fh->fd,
+	       fd,
 	       (result < 0) ? "failed: " : "",
 	       (result < 0) ? strerror(errno) : ""));
 
@@ -314,11 +311,11 @@
 	return result;
 }
 
-static int audit_fchmod(vfs_handle_struct *handle, files_struct *fsp, mode_t mode)
+static int audit_fchmod(vfs_handle_struct *handle, files_struct *fsp, int fd, mode_t mode)
 {
 	int result;
 	
-	result = SMB_VFS_NEXT_FCHMOD(handle, fsp, mode);
+	result = SMB_VFS_NEXT_FCHMOD(handle, fsp, fd, mode);
 
 	syslog(audit_syslog_priority(handle), "fchmod %s mode 0x%x %s%s\n",
 	       fsp->fsp_name, mode,
@@ -332,11 +329,11 @@
 	return result;
 }
 
-static int audit_fchmod_acl(vfs_handle_struct *handle, files_struct *fsp, mode_t mode)
+static int audit_fchmod_acl(vfs_handle_struct *handle, files_struct *fsp, int fd, mode_t mode)
 {
 	int result;
 	
-	result = SMB_VFS_NEXT_FCHMOD_ACL(handle, fsp, mode);
+	result = SMB_VFS_NEXT_FCHMOD_ACL(handle, fsp, fd, mode);
 
 	syslog(audit_syslog_priority(handle), "fchmod_acl %s mode 0x%x %s%s\n",
 	       fsp->fsp_name, mode,

Modified: branches/samba/upstream/source/modules/vfs_fake_perms.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_fake_perms.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_fake_perms.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *  
  * This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
  * GNU General Public License for more details.
  *  
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -46,11 +47,11 @@
 	return ret;
 }
 
-static int fake_perms_fstat(vfs_handle_struct *handle, files_struct *fsp, SMB_STRUCT_STAT *sbuf)
+static int fake_perms_fstat(vfs_handle_struct *handle, files_struct *fsp, int fd, SMB_STRUCT_STAT *sbuf)
 {
 	int ret = -1;
 
-	ret = SMB_VFS_NEXT_FSTAT(handle, fsp, sbuf);
+	ret = SMB_VFS_NEXT_FSTAT(handle, fsp, fd, sbuf);
 	if (ret == 0) {
 		if (S_ISDIR(sbuf->st_mode)) {
 			sbuf->st_mode = S_IFDIR | S_IRWXU;

Deleted: branches/samba/upstream/source/modules/vfs_fileid.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_fileid.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_fileid.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,288 +0,0 @@
-/*
- * VFS module to alter the algorithm to calculate
- * the struct file_id used as key for the share mode
- * and byte range locking db's.
- *
- * Copyright (C) 2007, Stefan Metzmacher
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "includes.h"
-
-static int vfs_fileid_debug_level = DBGC_VFS;
-
-#undef DBGC_CLASS
-#define DBGC_CLASS vfs_fileid_debug_level
-
-struct fileid_mount_entry {
-	SMB_DEV_T device;
-	const char *mnt_fsname;
-	fsid_t fsid;
-	uint64_t devid;
-};
-
-struct fileid_handle_data {
-	uint64_t (*device_mapping_fn)(struct fileid_handle_data *data,
-				      SMB_DEV_T dev);
-	unsigned num_mount_entries;
-	struct fileid_mount_entry *mount_entries;
-};
-
-/* load all the mount entries from the mtab */
-static void fileid_load_mount_entries(struct fileid_handle_data *data)
-{
-	FILE *f;
-	struct mntent *m;
-
-	data->num_mount_entries = 0;
-	TALLOC_FREE(data->mount_entries);
-
-	f = setmntent("/etc/mtab", "r");
-	if (!f) return;
-
-	while ((m = getmntent(f))) {
-		struct stat st;
-		struct statfs sfs;
-		struct fileid_mount_entry *cur;
-
-		if (stat(m->mnt_dir, &st) != 0) continue;
-		if (statfs(m->mnt_dir, &sfs) != 0) continue;
-
-		if (strncmp(m->mnt_fsname, "/dev/", 5) == 0) {
-			m->mnt_fsname += 5;
-		}
-
-		data->mount_entries = TALLOC_REALLOC_ARRAY(data,
-							   data->mount_entries,
-							   struct fileid_mount_entry,
-							   data->num_mount_entries+1);
-		if (data->mount_entries == NULL) {
-			goto nomem;
-		}
-
-		cur = &data->mount_entries[data->num_mount_entries];
-		cur->device	= st.st_dev;
-		cur->mnt_fsname = talloc_strdup(data->mount_entries,
-						m->mnt_fsname);
-		if (!cur->mnt_fsname) goto nomem;
-		cur->fsid	= sfs.f_fsid;
-		cur->devid	= (uint64_t)-1;
-
-		data->num_mount_entries++;
-	}
-	endmntent(f);
-	return;
-	
-nomem:
-	if (f) endmntent(f);
-
-	data->num_mount_entries = 0;
-	TALLOC_FREE(data->mount_entries);
-
-	return;
-}
-
-/* find a mount entry given a dev_t */
-static struct fileid_mount_entry *fileid_find_mount_entry(struct fileid_handle_data *data,
-							  SMB_DEV_T dev)
-{
-	int i;
-
-	if (data->num_mount_entries == 0) {
-		fileid_load_mount_entries(data);
-	}
-	for (i=0;i<data->num_mount_entries;i++) {
-		if (data->mount_entries[i].device == dev) {
-			return &data->mount_entries[i];
-		}
-	}
-	/* 2nd pass after reloading */
-	fileid_load_mount_entries(data);
-	for (i=0;i<data->num_mount_entries;i++) {
-		if (data->mount_entries[i].device == dev) {
-			return &data->mount_entries[i];
-		}
-	}	
-	return NULL;
-}
-
-
-/* a 64 bit hash, based on the one in tdb */
-static uint64_t fileid_uint64_hash(const uint8_t *s, size_t len)
-{
-	uint64_t value;	/* Used to compute the hash value.  */
-	uint32_t i;	/* Used to cycle through random values. */
-
-	/* Set the initial value from the key size. */
-	for (value = 0x238F13AFLL * len, i=0; i < len; i++)
-		value = (value + (s[i] << (i*5 % 24)));
-
-	return (1103515243LL * value + 12345LL);
-}
-
-/* a device mapping using a fsname */
-static uint64_t fileid_device_mapping_fsname(struct fileid_handle_data *data,
-					     SMB_DEV_T dev)
-{
-	struct fileid_mount_entry *m;
-
-	m = fileid_find_mount_entry(data, dev);
-	if (!m) return dev;
-
-	if (m->devid == (uint64_t)-1) {
-		m->devid = fileid_uint64_hash((uint8_t *)m->mnt_fsname,
-					      strlen(m->mnt_fsname));
-	}
-
-	return m->devid;
-}
-
-/* device mapping functions using a fsid */
-static uint64_t fileid_device_mapping_fsid(struct fileid_handle_data *data,
-					   SMB_DEV_T dev)
-{
-	struct fileid_mount_entry *m;
-
-	m = fileid_find_mount_entry(data, dev);
-	if (!m) return dev;
-
-	if (m->devid == (uint64_t)-1) {
-		if (sizeof(fsid_t) > sizeof(uint64_t)) {
-			m->devid = fileid_uint64_hash((uint8_t *)&m->fsid,
-						      sizeof(m->fsid));
-		} else {
-			union {
-				uint64_t ret;
-				fsid_t fsid;
-			} u;
-			ZERO_STRUCT(u);
-			u.fsid = m->fsid;
-			m->devid = u.ret;
-		}
-	}
-
-	return m->devid;
-}
-
-static int fileid_connect(struct vfs_handle_struct *handle,
-			  const char *service, const char *user)
-{
-	struct fileid_handle_data *data;
-	const char *algorithm;
-
-	data = talloc_zero(handle->conn->mem_ctx, struct fileid_handle_data);
-	if (!data) {
-		DEBUG(0, ("talloc_zero() failed\n"));
-		return -1;
-	}
-
-	data->device_mapping_fn	= fileid_device_mapping_fsid;
-	algorithm = lp_parm_const_string(SNUM(handle->conn),
-					 "fileid", "algorithm",
-					 "fsname");
-	if (strcmp("fsname", algorithm) == 0) {
-		data->device_mapping_fn	= fileid_device_mapping_fsname;
-	} else if (strcmp("fsid", algorithm) == 0) {
-		data->device_mapping_fn	= fileid_device_mapping_fsid;
-	} else {
-		DEBUG(0,("fileid_connect(): unknown algorithm[%s]\n", algorithm));
-		return -1;
-	}
-
-	SMB_VFS_HANDLE_SET_DATA(handle, data, NULL,
-				struct fileid_handle_data,
-				return -1);
-
-	DEBUG(10, ("fileid_connect(): connect to service[%s] with algorithm[%s]\n",
-		service, algorithm));
-
-	return SMB_VFS_NEXT_CONNECT(handle, service, user);
-}
-
-static void fileid_disconnect(struct vfs_handle_struct *handle)
-{
-	DEBUG(10,("fileid_disconnect() connect to service[%s].\n",
-		lp_servicename(SNUM(handle->conn))));
-
-	SMB_VFS_NEXT_DISCONNECT(handle);
-}
-
-static struct file_id fileid_file_id_create(struct vfs_handle_struct *handle,
-					    SMB_DEV_T dev, SMB_INO_T inode)
-{
-	struct fileid_handle_data *data;
-	struct file_id id;
-
-	ZERO_STRUCT(id);
-
-	SMB_VFS_HANDLE_GET_DATA(handle, data,
-				struct fileid_handle_data,
-				return id);
-
-	id.devid	= data->device_mapping_fn(data, dev);
-	id.inode	= inode;
-
-	return id;
-}
-
-static vfs_op_tuple fileid_ops[] = {
-
-	/* Disk operations */
-	{
-		SMB_VFS_OP(fileid_connect),
-		SMB_VFS_OP_CONNECT,
-		SMB_VFS_LAYER_TRANSPARENT
-	},
-	{
-		SMB_VFS_OP(fileid_disconnect),
-		SMB_VFS_OP_DISCONNECT,
-		SMB_VFS_LAYER_TRANSPARENT
-	},
-
-	/* File operations */
-	{
-		SMB_VFS_OP(fileid_file_id_create),
-		SMB_VFS_OP_FILE_ID_CREATE,
-		SMB_VFS_LAYER_OPAQUE
-	},
-
-	/* End marker */
-	{
-		SMB_VFS_OP(NULL),
-		SMB_VFS_OP_NOOP,
-		SMB_VFS_LAYER_NOOP
-	}
-};
-
-NTSTATUS vfs_fileid_init(void);
-NTSTATUS vfs_fileid_init(void)
-{
-	NTSTATUS ret;
-
-	ret = smb_register_vfs(SMB_VFS_INTERFACE_VERSION, "fileid", fileid_ops);
-	if (!NT_STATUS_IS_OK(ret)) {
-		return ret;
-	}
-
-	vfs_fileid_debug_level = debug_add_class("fileid");
-	if (vfs_fileid_debug_level == -1) {
-		vfs_fileid_debug_level = DBGC_VFS;
-		DEBUG(0, ("vfs_fileid: Couldn't register custom debugging class!\n"));
-	} else {
-		DEBUG(10, ("vfs_fileid: Debug class number of 'fileid': %d\n", vfs_fileid_debug_level));
-	}
-
-	return ret;
-}

Modified: branches/samba/upstream/source/modules/vfs_full_audit.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_full_audit.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_full_audit.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,7 +10,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *  
  * This program is distributed in the hope that it will be useful,
@@ -19,7 +19,8 @@
  * GNU General Public License for more details.
  *  
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 /*
@@ -78,7 +79,7 @@
 static void smb_full_audit_disconnect(vfs_handle_struct *handle);
 static SMB_BIG_UINT smb_full_audit_disk_free(vfs_handle_struct *handle,
 				    const char *path,
-				    bool small_query, SMB_BIG_UINT *bsize, 
+				    BOOL small_query, SMB_BIG_UINT *bsize, 
 				    SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize);
 static int smb_full_audit_get_quota(struct vfs_handle_struct *handle,
 			   enum SMB_QUOTA_TYPE qtype, unid_t id,
@@ -88,7 +89,7 @@
 			   SMB_DISK_QUOTA *qt);
 static int smb_full_audit_get_shadow_copy_data(struct vfs_handle_struct *handle,
                                 struct files_struct *fsp,
-                                SHADOW_COPY_DATA *shadow_copy_data, bool labels);
+                                SHADOW_COPY_DATA *shadow_copy_data, BOOL labels);
 static int smb_full_audit_statvfs(struct vfs_handle_struct *handle,
 				const char *path,
 				struct vfs_statvfs_struct *statbuf);
@@ -111,32 +112,28 @@
 			  SMB_STRUCT_DIR *dirp);
 static int smb_full_audit_open(vfs_handle_struct *handle,
 		      const char *fname, files_struct *fsp, int flags, mode_t mode);
-static int smb_full_audit_close(vfs_handle_struct *handle, files_struct *fsp);
+static int smb_full_audit_close(vfs_handle_struct *handle, files_struct *fsp, int fd);
 static ssize_t smb_full_audit_read(vfs_handle_struct *handle, files_struct *fsp,
-			  void *data, size_t n);
+			  int fd, void *data, size_t n);
 static ssize_t smb_full_audit_pread(vfs_handle_struct *handle, files_struct *fsp,
-			   void *data, size_t n, SMB_OFF_T offset);
+			   int fd, void *data, size_t n, SMB_OFF_T offset);
 static ssize_t smb_full_audit_write(vfs_handle_struct *handle, files_struct *fsp,
-			   const void *data, size_t n);
+			   int fd, const void *data, size_t n);
 static ssize_t smb_full_audit_pwrite(vfs_handle_struct *handle, files_struct *fsp,
-			    const void *data, size_t n,
+			    int fd, const void *data, size_t n,
 			    SMB_OFF_T offset);
 static SMB_OFF_T smb_full_audit_lseek(vfs_handle_struct *handle, files_struct *fsp,
-			     SMB_OFF_T offset, int whence);
+			     int filedes, SMB_OFF_T offset, int whence);
 static ssize_t smb_full_audit_sendfile(vfs_handle_struct *handle, int tofd,
-			      files_struct *fromfsp,
+			      files_struct *fsp, int fromfd,
 			      const DATA_BLOB *hdr, SMB_OFF_T offset,
 			      size_t n);
-static ssize_t smb_full_audit_recvfile(vfs_handle_struct *handle, int fromfd,
-			      files_struct *tofsp,
-			      SMB_OFF_T offset,
-			      size_t n);
 static int smb_full_audit_rename(vfs_handle_struct *handle,
 			const char *oldname, const char *newname);
-static int smb_full_audit_fsync(vfs_handle_struct *handle, files_struct *fsp);
+static int smb_full_audit_fsync(vfs_handle_struct *handle, files_struct *fsp, int fd);
 static int smb_full_audit_stat(vfs_handle_struct *handle,
 		      const char *fname, SMB_STRUCT_STAT *sbuf);
-static int smb_full_audit_fstat(vfs_handle_struct *handle, files_struct *fsp,
+static int smb_full_audit_fstat(vfs_handle_struct *handle, files_struct *fsp, int fd,
 		       SMB_STRUCT_STAT *sbuf);
 static int smb_full_audit_lstat(vfs_handle_struct *handle,
 		       const char *path, SMB_STRUCT_STAT *sbuf);
@@ -144,14 +141,12 @@
 			const char *path);
 static int smb_full_audit_chmod(vfs_handle_struct *handle,
 		       const char *path, mode_t mode);
-static int smb_full_audit_fchmod(vfs_handle_struct *handle, files_struct *fsp,
+static int smb_full_audit_fchmod(vfs_handle_struct *handle, files_struct *fsp, int fd,
 			mode_t mode);
 static int smb_full_audit_chown(vfs_handle_struct *handle,
 		       const char *path, uid_t uid, gid_t gid);
-static int smb_full_audit_fchown(vfs_handle_struct *handle, files_struct *fsp,
+static int smb_full_audit_fchown(vfs_handle_struct *handle, files_struct *fsp, int fd,
 			uid_t uid, gid_t gid);
-static int smb_full_audit_lchown(vfs_handle_struct *handle,
-		       const char *path, uid_t uid, gid_t gid);
 static int smb_full_audit_chdir(vfs_handle_struct *handle,
 		       const char *path);
 static char *smb_full_audit_getwd(vfs_handle_struct *handle,
@@ -159,15 +154,15 @@
 static int smb_full_audit_ntimes(vfs_handle_struct *handle,
 		       const char *path, const struct timespec ts[2]);
 static int smb_full_audit_ftruncate(vfs_handle_struct *handle, files_struct *fsp,
-			   SMB_OFF_T len);
-static bool smb_full_audit_lock(vfs_handle_struct *handle, files_struct *fsp,
+			   int fd, SMB_OFF_T len);
+static BOOL smb_full_audit_lock(vfs_handle_struct *handle, files_struct *fsp, int fd,
 		       int op, SMB_OFF_T offset, SMB_OFF_T count, int type);
 static int smb_full_audit_kernel_flock(struct vfs_handle_struct *handle,
-				       struct files_struct *fsp,
+				       struct files_struct *fsp, int fd,
 				       uint32 share_mode);
 static int smb_full_audit_linux_setlease(vfs_handle_struct *handle, files_struct *fsp,
-					int leasetype);
-static bool smb_full_audit_getlock(vfs_handle_struct *handle, files_struct *fsp,
+					int fd, int leasetype);
+static BOOL smb_full_audit_getlock(vfs_handle_struct *handle, files_struct *fsp, int fd,
 		       SMB_OFF_T *poffset, SMB_OFF_T *pcount, int *ptype, pid_t *ppid);
 static int smb_full_audit_symlink(vfs_handle_struct *handle,
 			 const char *oldpath, const char *newpath);
@@ -187,31 +182,23 @@
 					struct notify_event *ev),
 			void *private_data, void *handle_p);
 static int smb_full_audit_chflags(vfs_handle_struct *handle,
-			    const char *path, unsigned int flags);
-static struct file_id smb_full_audit_file_id_create(struct vfs_handle_struct *handle,
-						    SMB_DEV_T dev, SMB_INO_T inode);
-static NTSTATUS smb_full_audit_streaminfo(vfs_handle_struct *handle,
-					  struct files_struct *fsp,
-					  const char *fname,
-					  TALLOC_CTX *mem_ctx,
-					  unsigned int *pnum_streams,
-					  struct stream_struct **pstreams);
-static NTSTATUS smb_full_audit_fget_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
-				uint32 security_info,
+			    const char *path, uint flags);
+static size_t smb_full_audit_fget_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
+				int fd, uint32 security_info,
 				SEC_DESC **ppdesc);
-static NTSTATUS smb_full_audit_get_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
+static size_t smb_full_audit_get_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
 			       const char *name, uint32 security_info,
 			       SEC_DESC **ppdesc);
-static NTSTATUS smb_full_audit_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
-			      uint32 security_info_sent,
+static BOOL smb_full_audit_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
+			      int fd, uint32 security_info_sent,
 			      SEC_DESC *psd);
-static NTSTATUS smb_full_audit_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
+static BOOL smb_full_audit_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
 			     const char *name, uint32 security_info_sent,
 			     SEC_DESC *psd);
 static int smb_full_audit_chmod_acl(vfs_handle_struct *handle,
 			   const char *path, mode_t mode);
 static int smb_full_audit_fchmod_acl(vfs_handle_struct *handle, files_struct *fsp,
-				     mode_t mode);
+			    int fd, mode_t mode);
 static int smb_full_audit_sys_acl_get_entry(vfs_handle_struct *handle,
 				   SMB_ACL_T theacl, int entry_id,
 				   SMB_ACL_ENTRY_T *entry_p);
@@ -227,7 +214,8 @@
 					const char *path_p,
 					SMB_ACL_TYPE_T type);
 static SMB_ACL_T smb_full_audit_sys_acl_get_fd(vfs_handle_struct *handle,
-				      files_struct *fsp);
+				      files_struct *fsp,
+				      int fd);
 static int smb_full_audit_sys_acl_clear_perms(vfs_handle_struct *handle,
 				     SMB_ACL_PERMSET_T permset);
 static int smb_full_audit_sys_acl_add_perm(vfs_handle_struct *handle,
@@ -256,7 +244,7 @@
 				  const char *name, SMB_ACL_TYPE_T acltype,
 				  SMB_ACL_T theacl);
 static int smb_full_audit_sys_acl_set_fd(vfs_handle_struct *handle, files_struct *fsp,
-				SMB_ACL_T theacl);
+				int fd, SMB_ACL_T theacl);
 static int smb_full_audit_sys_acl_delete_def_file(vfs_handle_struct *handle,
 					 const char *path);
 static int smb_full_audit_sys_acl_get_perm(vfs_handle_struct *handle,
@@ -276,14 +264,14 @@
 			       const char *path, const char *name,
 			       void *value, size_t size);
 static ssize_t smb_full_audit_fgetxattr(struct vfs_handle_struct *handle,
-			       struct files_struct *fsp,
+			       struct files_struct *fsp, int fd,
 			       const char *name, void *value, size_t size);
 static ssize_t smb_full_audit_listxattr(struct vfs_handle_struct *handle,
 			       const char *path, char *list, size_t size);
 static ssize_t smb_full_audit_llistxattr(struct vfs_handle_struct *handle,
 				const char *path, char *list, size_t size);
 static ssize_t smb_full_audit_flistxattr(struct vfs_handle_struct *handle,
-				struct files_struct *fsp, char *list,
+				struct files_struct *fsp, int fd, char *list,
 				size_t size);
 static int smb_full_audit_removexattr(struct vfs_handle_struct *handle,
 			     const char *path,
@@ -292,7 +280,7 @@
 			      const char *path,
 			      const char *name);
 static int smb_full_audit_fremovexattr(struct vfs_handle_struct *handle,
-			      struct files_struct *fsp,
+			      struct files_struct *fsp, int fd,
 			      const char *name);
 static int smb_full_audit_setxattr(struct vfs_handle_struct *handle,
 			  const char *path,
@@ -303,13 +291,13 @@
 			   const char *name, const void *value, size_t size,
 			   int flags);
 static int smb_full_audit_fsetxattr(struct vfs_handle_struct *handle,
-			   struct files_struct *fsp, const char *name,
+			   struct files_struct *fsp, int fd, const char *name,
 			   const void *value, size_t size, int flags);
 
 static int smb_full_audit_aio_read(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb);
 static int smb_full_audit_aio_write(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb);
 static ssize_t smb_full_audit_aio_return(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb);
-static int smb_full_audit_aio_cancel(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb);
+static int smb_full_audit_aio_cancel(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, SMB_STRUCT_AIOCB *aiocb);
 static int smb_full_audit_aio_error(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb);
 static int smb_full_audit_aio_fsync(struct vfs_handle_struct *handle, struct files_struct *fsp, int op, SMB_STRUCT_AIOCB *aiocb);
 static int smb_full_audit_aio_suspend(struct vfs_handle_struct *handle, struct files_struct *fsp, const SMB_STRUCT_AIOCB * const aiocb[], int n, const struct timespec *ts);
@@ -372,8 +360,6 @@
 	 SMB_VFS_LAYER_LOGGER},
 	{SMB_VFS_OP(smb_full_audit_sendfile),	SMB_VFS_OP_SENDFILE,
 	 SMB_VFS_LAYER_LOGGER},
-	{SMB_VFS_OP(smb_full_audit_recvfile),	SMB_VFS_OP_RECVFILE,
-	 SMB_VFS_LAYER_LOGGER},
 	{SMB_VFS_OP(smb_full_audit_rename),	SMB_VFS_OP_RENAME,
 	 SMB_VFS_LAYER_LOGGER},
 	{SMB_VFS_OP(smb_full_audit_fsync),	SMB_VFS_OP_FSYNC,
@@ -394,8 +380,6 @@
 	 SMB_VFS_LAYER_LOGGER},
 	{SMB_VFS_OP(smb_full_audit_fchown),	SMB_VFS_OP_FCHOWN,
 	 SMB_VFS_LAYER_LOGGER},
-	{SMB_VFS_OP(smb_full_audit_lchown),	SMB_VFS_OP_LCHOWN,
-	 SMB_VFS_LAYER_LOGGER},
 	{SMB_VFS_OP(smb_full_audit_chdir),	SMB_VFS_OP_CHDIR,
 	 SMB_VFS_LAYER_LOGGER},
 	{SMB_VFS_OP(smb_full_audit_getwd),	SMB_VFS_OP_GETWD,
@@ -426,10 +410,6 @@
 	 SMB_VFS_LAYER_LOGGER},
 	{SMB_VFS_OP(smb_full_audit_chflags),	SMB_VFS_OP_CHFLAGS,
 	 SMB_VFS_LAYER_LOGGER},
-	{SMB_VFS_OP(smb_full_audit_file_id_create),	SMB_VFS_OP_FILE_ID_CREATE,
-	 SMB_VFS_LAYER_LOGGER},
-	{SMB_VFS_OP(smb_full_audit_streaminfo),	SMB_VFS_OP_STREAMINFO,
-	 SMB_VFS_LAYER_LOGGER},
 
 	/* NT ACL operations. */
 
@@ -458,7 +438,7 @@
 	 SMB_VFS_LAYER_LOGGER},
 	{SMB_VFS_OP(smb_full_audit_sys_acl_get_file),	SMB_VFS_OP_SYS_ACL_GET_FILE,
 	 SMB_VFS_LAYER_LOGGER},
-{SMB_VFS_OP(smb_full_audit_sys_acl_get_fd),	SMB_VFS_OP_SYS_ACL_GET_FD,
+	{SMB_VFS_OP(smb_full_audit_sys_acl_get_fd),	SMB_VFS_OP_SYS_ACL_GET_FD,
 	 SMB_VFS_LAYER_LOGGER},
 	{SMB_VFS_OP(smb_full_audit_sys_acl_clear_perms),	SMB_VFS_OP_SYS_ACL_CLEAR_PERMS,
 	 SMB_VFS_LAYER_LOGGER},
@@ -554,7 +534,6 @@
 	{ SMB_VFS_OP_SET_QUOTA,	"set_quota" },
 	{ SMB_VFS_OP_GET_SHADOW_COPY_DATA,	"get_shadow_copy_data" },
 	{ SMB_VFS_OP_STATVFS,	"statvfs" },
-	{ SMB_VFS_OP_FS_CAPABILITIES,	"fs_capabilities" },
 	{ SMB_VFS_OP_OPENDIR,	"opendir" },
 	{ SMB_VFS_OP_READDIR,	"readdir" },
 	{ SMB_VFS_OP_SEEKDIR,   "seekdir" },
@@ -581,7 +560,6 @@
 	{ SMB_VFS_OP_FCHMOD,	"fchmod" },
 	{ SMB_VFS_OP_CHOWN,	"chown" },
 	{ SMB_VFS_OP_FCHOWN,	"fchown" },
-	{ SMB_VFS_OP_LCHOWN,	"lchown" },
 	{ SMB_VFS_OP_CHDIR,	"chdir" },
 	{ SMB_VFS_OP_GETWD,	"getwd" },
 	{ SMB_VFS_OP_NTIMES,	"ntimes" },
@@ -597,8 +575,6 @@
 	{ SMB_VFS_OP_REALPATH,	"realpath" },
 	{ SMB_VFS_OP_NOTIFY_WATCH, "notify_watch" },
 	{ SMB_VFS_OP_CHFLAGS,	"chflags" },
-	{ SMB_VFS_OP_FILE_ID_CREATE,	"file_id_create" },
-	{ SMB_VFS_OP_STREAMINFO,	"streaminfo" },
 	{ SMB_VFS_OP_FGET_NT_ACL,	"fget_nt_acl" },
 	{ SMB_VFS_OP_GET_NT_ACL,	"get_nt_acl" },
 	{ SMB_VFS_OP_FSET_NT_ACL,	"fset_nt_acl" },
@@ -646,9 +622,6 @@
 	{ SMB_VFS_OP_AIO_ERROR,	"aio_error" },
 	{ SMB_VFS_OP_AIO_FSYNC,	"aio_fsync" },
 	{ SMB_VFS_OP_AIO_SUSPEND,"aio_suspend" },
-	{ SMB_VFS_OP_AIO_FORCE, "aio_force" },
-	{ SMB_VFS_OP_IS_OFFLINE, "aio_is_offline" },
-	{ SMB_VFS_OP_SET_OFFLINE, "aio_set_offline" },
 	{ SMB_VFS_OP_LAST, NULL }
 };	
 
@@ -688,34 +661,26 @@
 
 	int priority;
 
-	priority = lp_parm_enum(SNUM(handle->conn), "full_audit", "priority",
-				enum_log_priorities, LOG_NOTICE);
-	if (priority == -1) {
-		priority = LOG_WARNING;
-	}
+	priority = lp_parm_enum(SNUM(handle->conn), "full_audit", "priority", enum_log_priorities, LOG_NOTICE);
 
 	return priority;
 }
 
-static char *audit_prefix(TALLOC_CTX *ctx, connection_struct *conn)
+static char *audit_prefix(connection_struct *conn)
 {
-	char *prefix = NULL;
+	static pstring prefix;
 
-	prefix = talloc_strdup(ctx,
-			lp_parm_const_string(SNUM(conn), "full_audit",
+	pstrcpy(prefix, lp_parm_const_string(SNUM(conn), "full_audit",
 					     "prefix", "%u|%I"));
-	if (!prefix) {
-		return NULL;
-	}
-	return talloc_sub_advanced(ctx,
-			lp_servicename(SNUM(conn)), conn->user,
-			conn->connectpath, conn->gid,
-			get_current_username(),
-			current_user_info.domain,
-			prefix);
+	standard_sub_advanced(lp_servicename(SNUM(conn)), conn->user,
+			      conn->connectpath, conn->gid,
+			      get_current_username(),
+			      current_user_info.domain,
+			      prefix, sizeof(prefix));
+	return prefix;
 }
 
-static bool log_success(vfs_handle_struct *handle, vfs_op_type op)
+static BOOL log_success(vfs_handle_struct *handle, vfs_op_type op)
 {
 	struct vfs_full_audit_private_data *pd = NULL;
 
@@ -730,7 +695,7 @@
 	return bitmap_query(pd->success_ops, op);
 }
 
-static bool log_failure(vfs_handle_struct *handle, vfs_op_type op)
+static BOOL log_failure(vfs_handle_struct *handle, vfs_op_type op)
 {
 	struct vfs_full_audit_private_data *pd = NULL;
 
@@ -746,7 +711,7 @@
 
 static void init_bitmap(struct bitmap **bm, const char **ops)
 {
-	bool log_all = False;
+	BOOL log_all = False;
 
 	if (*bm != NULL)
 		return;
@@ -761,7 +726,7 @@
 
 	while (*ops != NULL) {
 		int i;
-		bool found = False;
+		BOOL found = False;
 
 		if (strequal(*ops, "all")) {
 			log_all = True;
@@ -806,13 +771,12 @@
 	return vfs_op_names[op].name;
 }
 
-static void do_log(vfs_op_type op, bool success, vfs_handle_struct *handle,
+static void do_log(vfs_op_type op, BOOL success, vfs_handle_struct *handle,
 		   const char *format, ...)
 {
 	fstring err_msg;
-	char *audit_pre = NULL;
+	pstring op_msg;
 	va_list ap;
-	char *op_msg = NULL;
 
 	if (success && (!log_success(handle, op)))
 		return;
@@ -826,21 +790,12 @@
 		fstr_sprintf(err_msg, "fail (%s)", strerror(errno));
 
 	va_start(ap, format);
-	op_msg = talloc_vasprintf(NULL, format, ap);
+	vsnprintf(op_msg, sizeof(op_msg), format, ap);
 	va_end(ap);
 
-	if (!op_msg) {
-		return;
-	}
-
-	audit_pre = audit_prefix(NULL, handle->conn);
 	syslog(audit_syslog_priority(handle), "%s|%s|%s|%s\n",
-		audit_pre ? audit_pre : "",
-		audit_opname(op), err_msg, op_msg);
+	       audit_prefix(handle->conn), audit_opname(op), err_msg, op_msg);
 
-	TALLOC_FREE(audit_pre);
-	TALLOC_FREE(op_msg);
-
 	return;
 }
 
@@ -917,7 +872,7 @@
 
 static SMB_BIG_UINT smb_full_audit_disk_free(vfs_handle_struct *handle,
 				    const char *path,
-				    bool small_query, SMB_BIG_UINT *bsize, 
+				    BOOL small_query, SMB_BIG_UINT *bsize, 
 				    SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize)
 {
 	SMB_BIG_UINT result;
@@ -961,7 +916,7 @@
 
 static int smb_full_audit_get_shadow_copy_data(struct vfs_handle_struct *handle,
 				struct files_struct *fsp,
-				SHADOW_COPY_DATA *shadow_copy_data, bool labels)
+				SHADOW_COPY_DATA *shadow_copy_data, BOOL labels)
 {
 	int result;
 
@@ -1092,11 +1047,11 @@
 	return result;
 }
 
-static int smb_full_audit_close(vfs_handle_struct *handle, files_struct *fsp)
+static int smb_full_audit_close(vfs_handle_struct *handle, files_struct *fsp, int fd)
 {
 	int result;
 	
-	result = SMB_VFS_NEXT_CLOSE(handle, fsp);
+	result = SMB_VFS_NEXT_CLOSE(handle, fsp, fd);
 
 	do_log(SMB_VFS_OP_CLOSE, (result >= 0), handle, "%s", fsp->fsp_name);
 
@@ -1104,11 +1059,11 @@
 }
 
 static ssize_t smb_full_audit_read(vfs_handle_struct *handle, files_struct *fsp,
-			  void *data, size_t n)
+			  int fd, void *data, size_t n)
 {
 	ssize_t result;
 
-	result = SMB_VFS_NEXT_READ(handle, fsp, data, n);
+	result = SMB_VFS_NEXT_READ(handle, fsp, fd, data, n);
 
 	do_log(SMB_VFS_OP_READ, (result >= 0), handle, "%s", fsp->fsp_name);
 
@@ -1116,11 +1071,11 @@
 }
 
 static ssize_t smb_full_audit_pread(vfs_handle_struct *handle, files_struct *fsp,
-			   void *data, size_t n, SMB_OFF_T offset)
+			   int fd, void *data, size_t n, SMB_OFF_T offset)
 {
 	ssize_t result;
 
-	result = SMB_VFS_NEXT_PREAD(handle, fsp, data, n, offset);
+	result = SMB_VFS_NEXT_PREAD(handle, fsp, fd, data, n, offset);
 
 	do_log(SMB_VFS_OP_PREAD, (result >= 0), handle, "%s", fsp->fsp_name);
 
@@ -1128,11 +1083,11 @@
 }
 
 static ssize_t smb_full_audit_write(vfs_handle_struct *handle, files_struct *fsp,
-			   const void *data, size_t n)
+			   int fd, const void *data, size_t n)
 {
 	ssize_t result;
 
-	result = SMB_VFS_NEXT_WRITE(handle, fsp, data, n);
+	result = SMB_VFS_NEXT_WRITE(handle, fsp, fd, data, n);
 
 	do_log(SMB_VFS_OP_WRITE, (result >= 0), handle, "%s", fsp->fsp_name);
 
@@ -1140,12 +1095,12 @@
 }
 
 static ssize_t smb_full_audit_pwrite(vfs_handle_struct *handle, files_struct *fsp,
-			    const void *data, size_t n,
+			    int fd, const void *data, size_t n,
 			    SMB_OFF_T offset)
 {
 	ssize_t result;
 
-	result = SMB_VFS_NEXT_PWRITE(handle, fsp, data, n, offset);
+	result = SMB_VFS_NEXT_PWRITE(handle, fsp, fd, data, n, offset);
 
 	do_log(SMB_VFS_OP_PWRITE, (result >= 0), handle, "%s", fsp->fsp_name);
 
@@ -1153,11 +1108,11 @@
 }
 
 static SMB_OFF_T smb_full_audit_lseek(vfs_handle_struct *handle, files_struct *fsp,
-			     SMB_OFF_T offset, int whence)
+			     int filedes, SMB_OFF_T offset, int whence)
 {
 	ssize_t result;
 
-	result = SMB_VFS_NEXT_LSEEK(handle, fsp, offset, whence);
+	result = SMB_VFS_NEXT_LSEEK(handle, fsp, filedes, offset, whence);
 
 	do_log(SMB_VFS_OP_LSEEK, (result != (ssize_t)-1), handle,
 	       "%s", fsp->fsp_name);
@@ -1166,35 +1121,21 @@
 }
 
 static ssize_t smb_full_audit_sendfile(vfs_handle_struct *handle, int tofd,
-			      files_struct *fromfsp,
+			      files_struct *fsp, int fromfd,
 			      const DATA_BLOB *hdr, SMB_OFF_T offset,
 			      size_t n)
 {
 	ssize_t result;
 
-	result = SMB_VFS_NEXT_SENDFILE(handle, tofd, fromfsp, hdr, offset, n);
+	result = SMB_VFS_NEXT_SENDFILE(handle, tofd, fsp, fromfd, hdr,
+				       offset, n);
 
 	do_log(SMB_VFS_OP_SENDFILE, (result >= 0), handle,
-	       "%s", fromfsp->fsp_name);
+	       "%s", fsp->fsp_name);
 
 	return result;
 }
 
-static ssize_t smb_full_audit_recvfile(vfs_handle_struct *handle, int fromfd,
-		      files_struct *tofsp,
-			      SMB_OFF_T offset,
-			      size_t n)
-{
-	ssize_t result;
-
-	result = SMB_VFS_NEXT_RECVFILE(handle, fromfd, tofsp, offset, n);
-
-	do_log(SMB_VFS_OP_RECVFILE, (result >= 0), handle,
-	       "%s", tofsp->fsp_name);
-
-	return result;
-}
-
 static int smb_full_audit_rename(vfs_handle_struct *handle,
 			const char *oldname, const char *newname)
 {
@@ -1207,11 +1148,11 @@
 	return result;    
 }
 
-static int smb_full_audit_fsync(vfs_handle_struct *handle, files_struct *fsp)
+static int smb_full_audit_fsync(vfs_handle_struct *handle, files_struct *fsp, int fd)
 {
 	int result;
 	
-	result = SMB_VFS_NEXT_FSYNC(handle, fsp);
+	result = SMB_VFS_NEXT_FSYNC(handle, fsp, fd);
 
 	do_log(SMB_VFS_OP_FSYNC, (result >= 0), handle, "%s", fsp->fsp_name);
 
@@ -1230,12 +1171,12 @@
 	return result;    
 }
 
-static int smb_full_audit_fstat(vfs_handle_struct *handle, files_struct *fsp,
+static int smb_full_audit_fstat(vfs_handle_struct *handle, files_struct *fsp, int fd,
 		       SMB_STRUCT_STAT *sbuf)
 {
 	int result;
 	
-	result = SMB_VFS_NEXT_FSTAT(handle, fsp, sbuf);
+	result = SMB_VFS_NEXT_FSTAT(handle, fsp, fd, sbuf);
 
 	do_log(SMB_VFS_OP_FSTAT, (result >= 0), handle, "%s", fsp->fsp_name);
 
@@ -1278,12 +1219,12 @@
 	return result;
 }
 
-static int smb_full_audit_fchmod(vfs_handle_struct *handle, files_struct *fsp,
+static int smb_full_audit_fchmod(vfs_handle_struct *handle, files_struct *fsp, int fd,
 			mode_t mode)
 {
 	int result;
 	
-	result = SMB_VFS_NEXT_FCHMOD(handle, fsp, mode);
+	result = SMB_VFS_NEXT_FCHMOD(handle, fsp, fd, mode);
 
 	do_log(SMB_VFS_OP_FCHMOD, (result >= 0), handle,
 	       "%s|%o", fsp->fsp_name, mode);
@@ -1304,12 +1245,12 @@
 	return result;
 }
 
-static int smb_full_audit_fchown(vfs_handle_struct *handle, files_struct *fsp,
+static int smb_full_audit_fchown(vfs_handle_struct *handle, files_struct *fsp, int fd,
 			uid_t uid, gid_t gid)
 {
 	int result;
 
-	result = SMB_VFS_NEXT_FCHOWN(handle, fsp, uid, gid);
+	result = SMB_VFS_NEXT_FCHOWN(handle, fsp, fd, uid, gid);
 
 	do_log(SMB_VFS_OP_FCHOWN, (result >= 0), handle, "%s|%ld|%ld",
 	       fsp->fsp_name, (long int)uid, (long int)gid);
@@ -1317,19 +1258,6 @@
 	return result;
 }
 
-static int smb_full_audit_lchown(vfs_handle_struct *handle,
-		       const char *path, uid_t uid, gid_t gid)
-{
-	int result;
-
-	result = SMB_VFS_NEXT_LCHOWN(handle, path, uid, gid);
-
-	do_log(SMB_VFS_OP_LCHOWN, (result >= 0), handle, "%s|%ld|%ld",
-	       path, (long int)uid, (long int)gid);
-
-	return result;
-}
-
 static int smb_full_audit_chdir(vfs_handle_struct *handle,
 		       const char *path)
 {
@@ -1367,11 +1295,11 @@
 }
 
 static int smb_full_audit_ftruncate(vfs_handle_struct *handle, files_struct *fsp,
-			   SMB_OFF_T len)
+			   int fd, SMB_OFF_T len)
 {
 	int result;
 
-	result = SMB_VFS_NEXT_FTRUNCATE(handle, fsp, len);
+	result = SMB_VFS_NEXT_FTRUNCATE(handle, fsp, fd, len);
 
 	do_log(SMB_VFS_OP_FTRUNCATE, (result >= 0), handle,
 	       "%s", fsp->fsp_name);
@@ -1379,25 +1307,25 @@
 	return result;
 }
 
-static bool smb_full_audit_lock(vfs_handle_struct *handle, files_struct *fsp,
+static BOOL smb_full_audit_lock(vfs_handle_struct *handle, files_struct *fsp, int fd,
 		       int op, SMB_OFF_T offset, SMB_OFF_T count, int type)
 {
-	bool result;
+	BOOL result;
 
-	result = SMB_VFS_NEXT_LOCK(handle, fsp, op, offset, count, type);
+	result = SMB_VFS_NEXT_LOCK(handle, fsp, fd, op, offset, count, type);
 
-	do_log(SMB_VFS_OP_LOCK, result, handle, "%s", fsp->fsp_name);
+	do_log(SMB_VFS_OP_LOCK, (result >= 0), handle, "%s", fsp->fsp_name);
 
 	return result;
 }
 
 static int smb_full_audit_kernel_flock(struct vfs_handle_struct *handle,
-				       struct files_struct *fsp,
+				       struct files_struct *fsp, int fd,
 				       uint32 share_mode)
 {
 	int result;
 
-	result = SMB_VFS_NEXT_KERNEL_FLOCK(handle, fsp, share_mode);
+	result = SMB_VFS_NEXT_KERNEL_FLOCK(handle, fsp, fd, share_mode);
 
 	do_log(SMB_VFS_OP_KERNEL_FLOCK, (result >= 0), handle, "%s",
 	       fsp->fsp_name);
@@ -1406,11 +1334,11 @@
 }
 
 static int smb_full_audit_linux_setlease(vfs_handle_struct *handle, files_struct *fsp,
-                                 int leasetype)
+                                 int fd, int leasetype)
 {
         int result;
 
-        result = SMB_VFS_NEXT_LINUX_SETLEASE(handle, fsp, leasetype);
+        result = SMB_VFS_NEXT_LINUX_SETLEASE(handle, fsp, fd, leasetype);
 
         do_log(SMB_VFS_OP_LINUX_SETLEASE, (result >= 0), handle, "%s",
                fsp->fsp_name);
@@ -1418,14 +1346,14 @@
         return result;
 }
 
-static bool smb_full_audit_getlock(vfs_handle_struct *handle, files_struct *fsp,
+static BOOL smb_full_audit_getlock(vfs_handle_struct *handle, files_struct *fsp, int fd,
 		       SMB_OFF_T *poffset, SMB_OFF_T *pcount, int *ptype, pid_t *ppid)
 {
-	bool result;
+	BOOL result;
 
-	result = SMB_VFS_NEXT_GETLOCK(handle, fsp, poffset, pcount, ptype, ppid);
+	result = SMB_VFS_NEXT_GETLOCK(handle, fsp, fd, poffset, pcount, ptype, ppid);
 
-	do_log(SMB_VFS_OP_GETLOCK, result, handle, "%s", fsp->fsp_name);
+	do_log(SMB_VFS_OP_GETLOCK, (result >= 0), handle, "%s", fsp->fsp_name);
 
 	return result;
 }
@@ -1510,7 +1438,7 @@
 }
 
 static int smb_full_audit_chflags(vfs_handle_struct *handle,
-			    const char *path, unsigned int flags)
+			    const char *path, uint flags)
 {
 	int result;
 
@@ -1521,94 +1449,60 @@
 	return result;
 }
 
-static struct file_id smb_full_audit_file_id_create(struct vfs_handle_struct *handle,
-						    SMB_DEV_T dev, SMB_INO_T inode)
-{
-	struct file_id id_zero;
-	struct file_id result;
-
-	ZERO_STRUCT(id_zero);
-
-	result = SMB_VFS_NEXT_FILE_ID_CREATE(handle, dev, inode);
-
-	do_log(SMB_VFS_OP_FILE_ID_CREATE,
-	       !file_id_equal(&id_zero, &result),
-	       handle, "%s", file_id_string_tos(&result));
-
-	return result;
-}
-
-static NTSTATUS smb_full_audit_streaminfo(vfs_handle_struct *handle,
-					  struct files_struct *fsp,
-					  const char *fname,
-					  TALLOC_CTX *mem_ctx,
-					  unsigned int *pnum_streams,
-					  struct stream_struct **pstreams)
-{
-	NTSTATUS result;
-
-	result = SMB_VFS_NEXT_STREAMINFO(handle, fsp, fname, mem_ctx,
-					 pnum_streams, pstreams);
-
-	do_log(SMB_VFS_OP_STREAMINFO, NT_STATUS_IS_OK(result), handle,
-	       "%s", fname);
-
-	return result;
-}
-
-static NTSTATUS smb_full_audit_fget_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
-				uint32 security_info,
+static size_t smb_full_audit_fget_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
+				int fd, uint32 security_info,
 				SEC_DESC **ppdesc)
 {
-	NTSTATUS result;
+	size_t result;
 
-	result = SMB_VFS_NEXT_FGET_NT_ACL(handle, fsp, security_info, ppdesc);
+	result = SMB_VFS_NEXT_FGET_NT_ACL(handle, fsp, fd, security_info,
+					  ppdesc);
 
-	do_log(SMB_VFS_OP_FGET_NT_ACL, NT_STATUS_IS_OK(result), handle,
+	do_log(SMB_VFS_OP_FGET_NT_ACL, (result > 0), handle,
 	       "%s", fsp->fsp_name);
 
 	return result;
 }
 
-static NTSTATUS smb_full_audit_get_nt_acl(vfs_handle_struct *handle,
-					  files_struct *fsp,
-					  const char *name,
-					  uint32 security_info,
-					  SEC_DESC **ppdesc)
+static size_t smb_full_audit_get_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
+			       const char *name, uint32 security_info,
+			       SEC_DESC **ppdesc)
 {
-	NTSTATUS result;
+	size_t result;
 
-	result = SMB_VFS_NEXT_GET_NT_ACL(handle, name, security_info, ppdesc);
+	result = SMB_VFS_NEXT_GET_NT_ACL(handle, fsp, name, security_info,
+					 ppdesc);
 
-	do_log(SMB_VFS_OP_GET_NT_ACL, NT_STATUS_IS_OK(result), handle,
+	do_log(SMB_VFS_OP_GET_NT_ACL, (result > 0), handle,
 	       "%s", fsp->fsp_name);
 
 	return result;
 }
 
-static NTSTATUS smb_full_audit_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
-			      uint32 security_info_sent,
+static BOOL smb_full_audit_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
+			      int fd, uint32 security_info_sent,
 			      SEC_DESC *psd)
 {
-	NTSTATUS result;
+	BOOL result;
 
-	result = SMB_VFS_NEXT_FSET_NT_ACL(handle, fsp, security_info_sent, psd);
+	result = SMB_VFS_NEXT_FSET_NT_ACL(handle, fsp, fd, security_info_sent,
+					  psd);
 
-	do_log(SMB_VFS_OP_FSET_NT_ACL, NT_STATUS_IS_OK(result), handle, "%s", fsp->fsp_name);
+	do_log(SMB_VFS_OP_FSET_NT_ACL, result, handle, "%s", fsp->fsp_name);
 
 	return result;
 }
 
-static NTSTATUS smb_full_audit_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
+static BOOL smb_full_audit_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
 			     const char *name, uint32 security_info_sent,
 			     SEC_DESC *psd)
 {
-	NTSTATUS result;
+	BOOL result;
 
 	result = SMB_VFS_NEXT_SET_NT_ACL(handle, fsp, name, security_info_sent,
 					 psd);
 
-	do_log(SMB_VFS_OP_SET_NT_ACL, NT_STATUS_IS_OK(result), handle, "%s", fsp->fsp_name);
+	do_log(SMB_VFS_OP_SET_NT_ACL, result, handle, "%s", fsp->fsp_name);
 
 	return result;
 }
@@ -1627,11 +1521,11 @@
 }
 
 static int smb_full_audit_fchmod_acl(vfs_handle_struct *handle, files_struct *fsp,
-				     mode_t mode)
+			    int fd, mode_t mode)
 {
 	int result;
 	
-	result = SMB_VFS_NEXT_FCHMOD_ACL(handle, fsp, mode);
+	result = SMB_VFS_NEXT_FCHMOD_ACL(handle, fsp, fd, mode);
 
 	do_log(SMB_VFS_OP_FCHMOD_ACL, (result >= 0), handle,
 	       "%s|%o", fsp->fsp_name, mode);
@@ -1716,11 +1610,11 @@
 }
 
 static SMB_ACL_T smb_full_audit_sys_acl_get_fd(vfs_handle_struct *handle,
-				      files_struct *fsp)
+				      files_struct *fsp, int fd)
 {
 	SMB_ACL_T result;
 
-	result = SMB_VFS_NEXT_SYS_ACL_GET_FD(handle, fsp);
+	result = SMB_VFS_NEXT_SYS_ACL_GET_FD(handle, fsp, fd);
 
 	do_log(SMB_VFS_OP_SYS_ACL_GET_FD, (result != NULL), handle,
 	       "%s", fsp->fsp_name);
@@ -1876,11 +1770,11 @@
 }
 
 static int smb_full_audit_sys_acl_set_fd(vfs_handle_struct *handle, files_struct *fsp,
-				SMB_ACL_T theacl)
+				int fd, SMB_ACL_T theacl)
 {
 	int result;
 
-	result = SMB_VFS_NEXT_SYS_ACL_SET_FD(handle, fsp, theacl);
+	result = SMB_VFS_NEXT_SYS_ACL_SET_FD(handle, fsp, fd, theacl);
 
 	do_log(SMB_VFS_OP_SYS_ACL_SET_FD, (result >= 0), handle,
 	       "%s", fsp->fsp_name);
@@ -1989,12 +1883,12 @@
 }
 
 static ssize_t smb_full_audit_fgetxattr(struct vfs_handle_struct *handle,
-			       struct files_struct *fsp,
+			       struct files_struct *fsp, int fd,
 			       const char *name, void *value, size_t size)
 {
 	ssize_t result;
 
-	result = SMB_VFS_NEXT_FGETXATTR(handle, fsp, name, value, size);
+	result = SMB_VFS_NEXT_FGETXATTR(handle, fsp, fd, name, value, size);
 
 	do_log(SMB_VFS_OP_FGETXATTR, (result >= 0), handle,
 	       "%s|%s", fsp->fsp_name, name);
@@ -2027,12 +1921,12 @@
 }
 
 static ssize_t smb_full_audit_flistxattr(struct vfs_handle_struct *handle,
-				struct files_struct *fsp, char *list,
+				struct files_struct *fsp, int fd, char *list,
 				size_t size)
 {
 	ssize_t result;
 
-	result = SMB_VFS_NEXT_FLISTXATTR(handle, fsp, list, size);
+	result = SMB_VFS_NEXT_FLISTXATTR(handle, fsp, fd, list, size);
 
 	do_log(SMB_VFS_OP_FLISTXATTR, (result >= 0), handle,
 	       "%s", fsp->fsp_name);
@@ -2069,12 +1963,12 @@
 }
 
 static int smb_full_audit_fremovexattr(struct vfs_handle_struct *handle,
-			      struct files_struct *fsp,
+			      struct files_struct *fsp, int fd,
 			      const char *name)
 {
 	int result;
 
-	result = SMB_VFS_NEXT_FREMOVEXATTR(handle, fsp, name);
+	result = SMB_VFS_NEXT_FREMOVEXATTR(handle, fsp, fd, name);
 
 	do_log(SMB_VFS_OP_FREMOVEXATTR, (result >= 0), handle,
 	       "%s|%s", fsp->fsp_name, name);
@@ -2115,12 +2009,13 @@
 }
 
 static int smb_full_audit_fsetxattr(struct vfs_handle_struct *handle,
-			   struct files_struct *fsp, const char *name,
+			   struct files_struct *fsp, int fd, const char *name,
 			   const void *value, size_t size, int flags)
 {
 	int result;
 
-	result = SMB_VFS_NEXT_FSETXATTR(handle, fsp, name, value, size, flags);
+	result = SMB_VFS_NEXT_FSETXATTR(handle, fsp, fd, name, value, size,
+					flags);
 
 	do_log(SMB_VFS_OP_FSETXATTR, (result >= 0), handle,
 	       "%s|%s", fsp->fsp_name, name);
@@ -2161,11 +2056,11 @@
 	return result;
 }
 
-static int smb_full_audit_aio_cancel(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_STRUCT_AIOCB *aiocb)
+static int smb_full_audit_aio_cancel(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, SMB_STRUCT_AIOCB *aiocb)
 {
 	int result;
 
-	result = SMB_VFS_NEXT_AIO_CANCEL(handle, fsp, aiocb);
+	result = SMB_VFS_NEXT_AIO_CANCEL(handle, fsp, fd, aiocb);
 	do_log(SMB_VFS_OP_AIO_CANCEL, (result >= 0), handle,
 		"%s", fsp->fsp_name);
 

Modified: branches/samba/upstream/source/modules/vfs_gpfs.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_gpfs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_gpfs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
   
 
 */
@@ -30,10 +31,10 @@
 
 #include <gpfs_gpl.h>
 #include "nfs4_acls.h"
-#include "vfs_gpfs.h"
 
+
 static int vfs_gpfs_kernel_flock(vfs_handle_struct *handle, files_struct *fsp, 
-				 uint32 share_mode)
+				 int fd, uint32 share_mode)
 {
 
 	START_PROFILE(syscall_kernel_flock);
@@ -52,21 +53,21 @@
 }
 
 static int vfs_gpfs_setlease(vfs_handle_struct *handle, files_struct *fsp, 
-			     int leasetype)
+				 int fd, int leasetype)
 {
 	int ret;
 	
 	START_PROFILE(syscall_linux_setlease);
 	
-	if ( linux_set_lease_sighandler(fsp->fh->fd) == -1)
+	if ( linux_set_lease_sighandler(fd) == -1)
 		return -1;
 
-	ret = set_gpfs_lease(fsp->fh->fd,leasetype);
+	ret = set_gpfs_lease(fd,leasetype);
 	
 	if ( ret < 0 ) {
 		/* This must have come from GPFS not being available */
 		/* or some other error, hence call the default */
-		ret = linux_setlease(fsp->fh->fd, leasetype);
+		ret = linux_setlease(fd, leasetype);
 	}
 
 	END_PROFILE(syscall_linux_setlease);
@@ -101,7 +102,7 @@
 	struct gpfs_acl *acl;
 	size_t len = 200;
 	int ret;
-	TALLOC_CTX *mem_ctx = talloc_tos();
+	TALLOC_CTX *mem_ctx = main_loop_talloc_get();
 
 	acl = (struct gpfs_acl *)TALLOC_SIZE(mem_ctx, len);
 	if (acl == NULL) {
@@ -140,30 +141,28 @@
 	return acl;
 }
 
-/* Tries to get nfs4 acls and returns SMB ACL allocated.
- * On failure returns 1 if it got non-NFSv4 ACL to prompt 
- * retry with POSIX ACL checks.
- * On failure returns -1 if there is system (GPFS) error, check errno.
- * Returns 0 on success
- */
-static int gpfs_get_nfs4_acl(const char *fname, SMB4ACL_T **ppacl)
+static BOOL gpfs_get_nfs4_acl(struct files_struct *fsp, SMB4ACL_T **ppacl, BOOL *pretryPosix)
 {
+	TALLOC_CTX *mem_ctx;
 	int i;
 	struct gpfs_acl *gacl = NULL;
-	DEBUG(10, ("gpfs_get_nfs4_acl invoked for %s\n", fname));
 
+	mem_ctx = main_loop_talloc_get();
+
+	DEBUG(10, ("gpfs_get_nfs4_acl invoked for %s\n", fsp->fsp_name));
+
 	/* First get the real acl length */
-	gacl = gpfs_getacl_alloc(fname, 0);
+	gacl = gpfs_getacl_alloc(fsp->fsp_name, GPFS_ACL_TYPE_NFS4);
 	if (gacl == NULL) {
 		DEBUG(9, ("gpfs_getacl failed for %s with %s\n",
-			   fname, strerror(errno)));
-		return -1;
+			   fsp->fsp_name, strerror(errno)));
+		return False;
 	}
 
 	if (gacl->acl_type != GPFS_ACL_TYPE_NFS4) {
 		DEBUG(10, ("Got non-nfsv4 acl\n"));
-		/* Retry with POSIX ACLs check */
-		return 1;
+		*pretryPosix = True;
+		return False;
 	}
 
 	*ppacl = smb_create_smb4acl();
@@ -175,11 +174,12 @@
 	for (i=0; i<gacl->acl_nace; i++) {
 		struct gpfs_ace_v4 *gace = &gacl->ace_v4[i];
 		SMB_ACE4PROP_T smbace;
+		memset(&smbace, 0, sizeof(SMB4ACE_T));
+
 		DEBUG(10, ("type: %d, iflags: %x, flags: %x, mask: %x, "
 			   "who: %d\n", gace->aceType, gace->aceIFlags,
 			   gace->aceFlags, gace->aceMask, gace->aceWho));
 
-		memset(&smbace, 0, sizeof(SMB4ACE_T));
 		if (gace->aceIFlags & ACE4_IFLAG_SPECIAL_ID) {
 			smbace.flags |= SMB_ACE4_ID_SPECIAL;
 			switch (gace->aceWho) {
@@ -204,79 +204,58 @@
 				smbace.who.uid = gace->aceWho;
 		}
 
-		/* remove redundent deny entries */
-		if (i > 0 && gace->aceType == SMB_ACE4_ACCESS_DENIED_ACE_TYPE) {
-			struct gpfs_ace_v4 *prev = &gacl->ace_v4[i-1];
-			if (prev->aceType == SMB_ACE4_ACCESS_ALLOWED_ACE_TYPE &&
-			    prev->aceFlags == gace->aceFlags &&
-			    prev->aceIFlags == gace->aceIFlags &&
-			    (gace->aceMask & prev->aceMask) == 0 &&
-			    gace->aceWho == prev->aceWho) {
-				/* its redundent - skip it */
-				continue;
-			}                                                
-		}
-
 		smbace.aceType = gace->aceType;
 		smbace.aceFlags = gace->aceFlags;
 		smbace.aceMask = gace->aceMask;
+		smbace.flags = (gace->aceIFlags&ACE4_IFLAG_SPECIAL_ID) ? SMB_ACE4_ID_SPECIAL : 0;
+
 		smb_add_ace4(*ppacl, &smbace);
 	}
 
-	return 0;
+	return True;
 }
 
-static NTSTATUS gpfsacl_fget_nt_acl(vfs_handle_struct *handle,
-	files_struct *fsp, uint32 security_info,
-	SEC_DESC **ppdesc)
+static size_t gpfsacl_get_nt_acl_common(files_struct *fsp,
+	uint32 security_info, SEC_DESC **ppdesc)
 {
 	SMB4ACL_T *pacl = NULL;
-	int	result;
+	BOOL	result;
+	BOOL	retryPosix = False;
 
 	*ppdesc = NULL;
-	result = gpfs_get_nfs4_acl(fsp->fsp_name, &pacl);
-
-	if (result == 0)
-		return smb_fget_nt_acl_nfs4(fsp, security_info, ppdesc, pacl);
-
-	if (result > 0) {
+	result = gpfs_get_nfs4_acl(fsp, &pacl, &retryPosix);
+	if (retryPosix)
+	{
 		DEBUG(10, ("retrying with posix acl...\n"));
-		return posix_fget_nt_acl(fsp, security_info, ppdesc);
+		return get_nt_acl(fsp, security_info, ppdesc);
 	}
+	if (result==False)
+		return 0;
 
-	/* GPFS ACL was not read, something wrong happened, error code is set in errno */
-	return map_nt_error_from_unix(errno);
+	return smb_get_nt_acl_nfs4(fsp, security_info, ppdesc, pacl);
 }
 
-static NTSTATUS gpfsacl_get_nt_acl(vfs_handle_struct *handle,
-	const char *name,
-	uint32 security_info, SEC_DESC **ppdesc)
+size_t gpfsacl_fget_nt_acl(vfs_handle_struct *handle,
+	files_struct *fsp, int fd, uint32 security_info,
+	SEC_DESC **ppdesc)
 {
-	SMB4ACL_T *pacl = NULL;
-	int	result;
+        return gpfsacl_get_nt_acl_common(fsp, security_info, ppdesc);
+}
 
-	*ppdesc = NULL;
-	result = gpfs_get_nfs4_acl(name, &pacl);
-
-	if (result == 0)
-		return smb_get_nt_acl_nfs4(handle->conn, name, security_info, ppdesc, pacl);
-
-	if (result > 0) {
-		DEBUG(10, ("retrying with posix acl...\n"));
-		return posix_get_nt_acl(handle->conn, name, security_info, ppdesc);
-	}
-
-	/* GPFS ACL was not read, something wrong happened, error code is set in errno */
-	return map_nt_error_from_unix(errno);
+size_t gpfsacl_get_nt_acl(vfs_handle_struct *handle,
+	files_struct *fsp, const char *name,
+	uint32 security_info, SEC_DESC **ppdesc)
+{
+	return gpfsacl_get_nt_acl_common(fsp, security_info, ppdesc);
 }
 
-static bool gpfsacl_process_smbacl(files_struct *fsp, SMB4ACL_T *smbacl)
+static BOOL gpfsacl_process_smbacl(files_struct *fsp, SMB4ACL_T *smbacl)
 {
 	int ret;
 	gpfs_aclLen_t gacl_len;
 	SMB4ACE_T	*smbace;
 	struct gpfs_acl *gacl;
-	TALLOC_CTX *mem_ctx  = talloc_tos();
+	TALLOC_CTX *mem_ctx  = main_loop_talloc_get();
 
 	gacl_len = sizeof(struct gpfs_acl) +
 		(smb_get_naces(smbacl)-1)*sizeof(gpfs_ace_v4_t);
@@ -301,31 +280,8 @@
 		gace->aceType = aceprop->aceType;
 		gace->aceFlags = aceprop->aceFlags;
 		gace->aceMask = aceprop->aceMask;
-		
-		/*
-		 * GPFS can't distinguish between WRITE and APPEND on
-		 * files, so one being set without the other is an
-		 * error. Sorry for the many ()'s :-)
-		 */
-		
-		if (!fsp->is_directory
-		    &&
-		    ((((gace->aceMask & ACE4_MASK_WRITE) == 0)
-		      && ((gace->aceMask & ACE4_MASK_APPEND) != 0))
-		     ||
-		     (((gace->aceMask & ACE4_MASK_WRITE) != 0)
-		      && ((gace->aceMask & ACE4_MASK_APPEND) == 0)))
-		    &&
-		    lp_parm_bool(fsp->conn->params->service, "gpfs",
-				 "merge_writeappend", True)) {
-			DEBUG(2, ("vfs_gpfs.c: file [%s]: ACE contains "
-				  "WRITE^APPEND, setting WRITE|APPEND\n",
-				  fsp->fsp_name));
-			gace->aceMask |= ACE4_MASK_WRITE|ACE4_MASK_APPEND;
-		}
-		
 		gace->aceIFlags = (aceprop->flags&SMB_ACE4_ID_SPECIAL) ? ACE4_IFLAG_SPECIAL_ID : 0;
-		
+
 		if (aceprop->flags&SMB_ACE4_ID_SPECIAL)
 		{
 			switch(aceprop->who.special_id)
@@ -365,14 +321,14 @@
 	return True;
 }
 
-static NTSTATUS gpfsacl_set_nt_acl_internal(files_struct *fsp, uint32 security_info_sent, SEC_DESC *psd)
+static BOOL gpfsacl_set_nt_acl_internal(files_struct *fsp, uint32 security_info_sent, SEC_DESC *psd)
 {
 	struct gpfs_acl *acl;
-	NTSTATUS result = NT_STATUS_ACCESS_DENIED;
+	BOOL	result = False;
 
-	acl = gpfs_getacl_alloc(fsp->fsp_name, 0);
+	acl = gpfs_getacl_alloc(fsp->fsp_name, GPFS_ACL_TYPE_ACCESS);
 	if (acl == NULL)
-		return result;
+		return False;
 
 	if (acl->acl_version&GPFS_ACL_VERSION_NFS4)
 	{
@@ -386,12 +342,12 @@
 	return result;
 }
 
-static NTSTATUS gpfsacl_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp, uint32 security_info_sent, SEC_DESC *psd)
+static BOOL gpfsacl_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp, int fd, uint32 security_info_sent, SEC_DESC *psd)
 {
 	return gpfsacl_set_nt_acl_internal(fsp, security_info_sent, psd);
 }
 
-static NTSTATUS gpfsacl_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp, char *name, uint32 security_info_sent, SEC_DESC *psd)
+static BOOL gpfsacl_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp, char *name, uint32 security_info_sent, SEC_DESC *psd)
 {
 	return gpfsacl_set_nt_acl_internal(fsp, security_info_sent, psd);
 }
@@ -524,7 +480,8 @@
 }
 
 SMB_ACL_T gpfsacl_sys_acl_get_fd(vfs_handle_struct *handle,
-				 files_struct *fsp)
+				  files_struct *fsp,
+				  int fd)
 {
 	return gpfsacl_get_posix_acl(fsp->fsp_name, GPFS_ACL_TYPE_ACCESS);
 }
@@ -638,7 +595,7 @@
 
 int gpfsacl_sys_acl_set_fd(vfs_handle_struct *handle,
 			    files_struct *fsp,
-			    SMB_ACL_T theacl)
+			    int fd, SMB_ACL_T theacl)
 {
 	return gpfsacl_sys_acl_set_file(handle, fsp->fsp_name, SMB_ACL_TYPE_ACCESS, theacl);
 }
@@ -651,228 +608,58 @@
 	return -1;
 }
 
-/*
- * Assumed: mode bits are shiftable and standard
- * Output: the new aceMask field for an smb nfs4 ace
- */
-static uint32 gpfsacl_mask_filter(uint32 aceType, uint32 aceMask, uint32 rwx)
-{
-	const uint32 posix_nfs4map[3] = {
-                SMB_ACE4_EXECUTE, /* execute */
-		SMB_ACE4_WRITE_DATA | SMB_ACE4_APPEND_DATA, /* write; GPFS specific */
-                SMB_ACE4_READ_DATA /* read */
-	};
-	int     i;
-	uint32_t        posix_mask = 0x01;
-	uint32_t        posix_bit;
-	uint32_t        nfs4_bits;
-	
-	for(i=0; i<3; i++) {
-		nfs4_bits = posix_nfs4map[i];
-		posix_bit = rwx & posix_mask;
-		
-		if (aceType==SMB_ACE4_ACCESS_ALLOWED_ACE_TYPE) {
-			if (posix_bit)
-				aceMask |= nfs4_bits;
-			else
-				aceMask &= ~nfs4_bits;
-		} else {
-			/* add deny bits when suitable */
-			if (!posix_bit)
-				aceMask |= nfs4_bits;
-			else
-				aceMask &= ~nfs4_bits;
-		} /* other ace types are unexpected */
-		
-		posix_mask <<= 1;
-	}
-	
-	return aceMask;
-}
+/* VFS operations structure */
 
-static int gpfsacl_emu_chmod(const char *path, mode_t mode)
-{
-	SMB4ACL_T *pacl = NULL;
-	int     result;
-	bool    haveAllowEntry[SMB_ACE4_WHO_EVERYONE + 1] = {False, False, False, False};
-	int     i;
-	files_struct    fake_fsp; /* TODO: rationalize parametrization */
-	SMB4ACE_T       *smbace;
-	
-	DEBUG(10, ("gpfsacl_emu_chmod invoked for %s mode %o\n", path, mode));
-	
-	result = gpfs_get_nfs4_acl(path, &pacl);
-	if (result)
-		return result;
-	
-	if (mode & ~(S_IRWXU | S_IRWXG | S_IRWXO)) {
-		DEBUG(2, ("WARNING: cutting extra mode bits %o on %s\n", mode, path));
-	}
-	
-	for (smbace=smb_first_ace4(pacl); smbace!=NULL; smbace = smb_next_ace4(smbace)) {
-		SMB_ACE4PROP_T  *ace = smb_get_ace4(smbace);
-		uint32_t        specid = ace->who.special_id;
-		
-		if (ace->flags&SMB_ACE4_ID_SPECIAL &&
-		    ace->aceType<=SMB_ACE4_ACCESS_DENIED_ACE_TYPE &&
-		    specid <= SMB_ACE4_WHO_EVERYONE) {
-			
-			uint32_t newMask;
-			
-			if (ace->aceType==SMB_ACE4_ACCESS_ALLOWED_ACE_TYPE)
-				haveAllowEntry[specid] = True;
-			
-			/* mode >> 6 for @owner, mode >> 3 for @group,
-			 * mode >> 0 for @everyone */
-			newMask = gpfsacl_mask_filter(ace->aceType, ace->aceMask,
-						      mode >> ((SMB_ACE4_WHO_EVERYONE - specid) * 3));
-			if (ace->aceMask!=newMask) {
-				DEBUG(10, ("ace changed for %s (%o -> %o) id=%d\n",
-					   path, ace->aceMask, newMask, specid));
-			}
-			ace->aceMask = newMask;
-		}
-	}
+static vfs_op_tuple gpfs_op_tuples[] = {
 
-	/* make sure we have at least ALLOW entries
-	 * for all the 3 special ids (@EVERYONE, @OWNER, @GROUP)
-	 * - if necessary
-	 */
-	for(i = SMB_ACE4_WHO_OWNER; i<=SMB_ACE4_WHO_EVERYONE; i++) {
-		SMB_ACE4PROP_T  ace;
-		
-		if (haveAllowEntry[i]==True)
-			continue;
-		
-		memset(&ace, 0, sizeof(SMB_ACE4PROP_T));
-		ace.aceType = SMB_ACE4_ACCESS_ALLOWED_ACE_TYPE;
-		ace.flags |= SMB_ACE4_ID_SPECIAL;
-		ace.who.special_id = i;
-		
-		if (i==SMB_ACE4_WHO_GROUP) /* not sure it's necessary... */
-			ace.aceFlags |= SMB_ACE4_IDENTIFIER_GROUP;
-		
-		ace.aceMask = gpfsacl_mask_filter(ace.aceType, ace.aceMask,
-						  mode >> ((SMB_ACE4_WHO_EVERYONE - i) * 3));
-		
-		/* don't add unnecessary aces */
-		if (!ace.aceMask)
-			continue;
-		
-		/* we add it to the END - as windows expects allow aces */
-		smb_add_ace4(pacl, &ace);
-		DEBUG(10, ("Added ALLOW ace for %s, mode=%o, id=%d, aceMask=%x\n",
-			   path, mode, i, ace.aceMask));
-	}
-	
-	/* don't add complementary DENY ACEs here */
-	memset(&fake_fsp, 0, sizeof(struct files_struct));
-	fake_fsp.fsp_name = (char *)path; /* no file_new is needed here */
-	
-	/* put the acl */
-	if (gpfsacl_process_smbacl(&fake_fsp, pacl) == False)
-		return -1;
-	return 0; /* ok for [f]chmod */
-}
+	{SMB_VFS_OP(vfs_gpfs_kernel_flock),
+	 SMB_VFS_OP_KERNEL_FLOCK,
+	 SMB_VFS_LAYER_OPAQUE},
 
-static int vfs_gpfs_chmod(vfs_handle_struct *handle, const char *path, mode_t mode)
-{
-		 SMB_STRUCT_STAT st;
-		 int rc;
-		 
-		 if (SMB_VFS_NEXT_STAT(handle, path, &st) != 0) {
-			 return -1;
-		 }
-		 
-		 /* avoid chmod() if possible, to preserve acls */
-		 if ((st.st_mode & ~S_IFMT) == mode) {
-			 return 0;
-		 }
+	{SMB_VFS_OP(vfs_gpfs_setlease),
+	 SMB_VFS_OP_LINUX_SETLEASE,
+	 SMB_VFS_LAYER_OPAQUE},
 
-		 rc = gpfsacl_emu_chmod(path, mode);
-		 if (rc == 1)
-			 return SMB_VFS_NEXT_CHMOD(handle, path, mode);
-		 return rc;
-}
+	{SMB_VFS_OP(gpfsacl_fget_nt_acl),
+        SMB_VFS_OP_FGET_NT_ACL,
+        SMB_VFS_LAYER_TRANSPARENT},
 
-static int vfs_gpfs_fchmod(vfs_handle_struct *handle, files_struct *fsp, mode_t mode)
-{
-		 SMB_STRUCT_STAT st;
-		 int rc;
-		 
-		 if (SMB_VFS_NEXT_FSTAT(handle, fsp, &st) != 0) {
-			 return -1;
-		 }
+        {SMB_VFS_OP(gpfsacl_get_nt_acl),
+        SMB_VFS_OP_GET_NT_ACL,
+        SMB_VFS_LAYER_TRANSPARENT},
 
-		 /* avoid chmod() if possible, to preserve acls */
-		 if ((st.st_mode & ~S_IFMT) == mode) {
-			 return 0;
-		 }
+        {SMB_VFS_OP(gpfsacl_fset_nt_acl),
+        SMB_VFS_OP_FSET_NT_ACL,
+        SMB_VFS_LAYER_TRANSPARENT},
 
-		 rc = gpfsacl_emu_chmod(fsp->fsp_name, mode);
-		 if (rc == 1)
-			 return SMB_VFS_NEXT_FCHMOD(handle, fsp, mode);
-		 return rc;
-}
+        {SMB_VFS_OP(gpfsacl_set_nt_acl),
+        SMB_VFS_OP_SET_NT_ACL,
+        SMB_VFS_LAYER_TRANSPARENT},
 
-/* VFS operations structure */
+        {SMB_VFS_OP(gpfsacl_sys_acl_get_file),
+         SMB_VFS_OP_SYS_ACL_GET_FILE,
+         SMB_VFS_LAYER_TRANSPARENT},
 
-static vfs_op_tuple gpfs_op_tuples[] = {
-	
-	{ SMB_VFS_OP(vfs_gpfs_kernel_flock), 
-	  SMB_VFS_OP_KERNEL_FLOCK,
-	  SMB_VFS_LAYER_OPAQUE },
-	
-        { SMB_VFS_OP(vfs_gpfs_setlease), 
-	  SMB_VFS_OP_LINUX_SETLEASE,
-	  SMB_VFS_LAYER_OPAQUE },
-	
-        { SMB_VFS_OP(gpfsacl_fget_nt_acl), 
-	  SMB_VFS_OP_FGET_NT_ACL,
-	  SMB_VFS_LAYER_TRANSPARENT },
-	
-        { SMB_VFS_OP(gpfsacl_get_nt_acl), 
-	  SMB_VFS_OP_GET_NT_ACL,
-	  SMB_VFS_LAYER_TRANSPARENT },
-	
-        { SMB_VFS_OP(gpfsacl_fset_nt_acl), 
-	  SMB_VFS_OP_FSET_NT_ACL,
-	  SMB_VFS_LAYER_TRANSPARENT },
-	
-        { SMB_VFS_OP(gpfsacl_set_nt_acl), 
-	  SMB_VFS_OP_SET_NT_ACL,
-	  SMB_VFS_LAYER_TRANSPARENT },
-	
-        { SMB_VFS_OP(gpfsacl_sys_acl_get_file), 
-	  SMB_VFS_OP_SYS_ACL_GET_FILE,
-	  SMB_VFS_LAYER_TRANSPARENT },
-	
-        { SMB_VFS_OP(gpfsacl_sys_acl_get_fd), 
-	  SMB_VFS_OP_SYS_ACL_GET_FD,
-	  SMB_VFS_LAYER_TRANSPARENT },
-	
-        { SMB_VFS_OP(gpfsacl_sys_acl_set_file), 
-	  SMB_VFS_OP_SYS_ACL_SET_FILE,
-	  SMB_VFS_LAYER_TRANSPARENT },
-	
-        { SMB_VFS_OP(gpfsacl_sys_acl_set_fd), 
-	  SMB_VFS_OP_SYS_ACL_SET_FD,
-	  SMB_VFS_LAYER_TRANSPARENT },
-	
-        { SMB_VFS_OP(gpfsacl_sys_acl_delete_def_file),
-	  SMB_VFS_OP_SYS_ACL_DELETE_DEF_FILE,
-	  SMB_VFS_LAYER_TRANSPARENT },
-	
-        { SMB_VFS_OP(vfs_gpfs_chmod), 
-	  SMB_VFS_OP_CHMOD,
-	  SMB_VFS_LAYER_TRANSPARENT },
-	
-        { SMB_VFS_OP(vfs_gpfs_fchmod), 
-	  SMB_VFS_OP_FCHMOD,
-	  SMB_VFS_LAYER_TRANSPARENT },
+        {SMB_VFS_OP(gpfsacl_sys_acl_get_fd),
+         SMB_VFS_OP_SYS_ACL_GET_FD,
+         SMB_VFS_LAYER_TRANSPARENT},
 
-        { SMB_VFS_OP(NULL), SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP }
+        {SMB_VFS_OP(gpfsacl_sys_acl_set_file),
+         SMB_VFS_OP_SYS_ACL_SET_FILE,
+         SMB_VFS_LAYER_TRANSPARENT},
 
+        {SMB_VFS_OP(gpfsacl_sys_acl_set_fd),
+         SMB_VFS_OP_SYS_ACL_SET_FD,
+         SMB_VFS_LAYER_TRANSPARENT},
+
+        {SMB_VFS_OP(gpfsacl_sys_acl_delete_def_file),
+         SMB_VFS_OP_SYS_ACL_DELETE_DEF_FILE,
+         SMB_VFS_LAYER_TRANSPARENT},
+
+	{SMB_VFS_OP(NULL),
+	 SMB_VFS_OP_NOOP,
+	 SMB_VFS_LAYER_NOOP}
+
 };
 
 

Deleted: branches/samba/upstream/source/modules/vfs_gpfs.h
===================================================================
--- branches/samba/upstream/source/modules/vfs_gpfs.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_gpfs.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,32 +0,0 @@
-/*
-   Unix SMB/CIFS implementation.
-   Wrap gpfs calls in vfs functions.
- 
-   Copyright (C) Christian Ambach <cambach1 at de.ibm.com> 2006
-   
-   Major code contributions by Chetan Shringarpure <chetan.sh at in.ibm.com>
-                            and Gomati Mohanan <gomati.mohanan at in.ibm.com>
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-  
-
-*/
-
-bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
-			uint32 share_access);
-int set_gpfs_lease(int fd, int leasetype);
-int smbd_gpfs_getacl(char *pathname, int flags, void *acl);
-int smbd_gpfs_putacl(char *pathname, int flags, void *acl);
-void init_gpfs(void);

Modified: branches/samba/upstream/source/modules/vfs_hpuxacl.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_hpuxacl.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_hpuxacl.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 /*
  * Unix SMB/Netbios implementation.
  * VFS module to get and set HP-UX ACLs
- * Copyright (C) Michael Adam 2006,2008
+ * Copyright (C) Michael Adam 2006
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 /*
@@ -104,32 +105,32 @@
 /* prototypes for private functions */
 
 static HPUX_ACL_T hpux_acl_init(int count);
-static bool smb_acl_to_hpux_acl(SMB_ACL_T smb_acl, 
+static BOOL smb_acl_to_hpux_acl(SMB_ACL_T smb_acl, 
 		HPUX_ACL_T *solariacl, int *count, 
 		SMB_ACL_TYPE_T type);
 static SMB_ACL_T hpux_acl_to_smb_acl(HPUX_ACL_T hpuxacl, int count,
 		SMB_ACL_TYPE_T type);
 static HPUX_ACL_TAG_T smb_tag_to_hpux_tag(SMB_ACL_TAG_T smb_tag);
 static SMB_ACL_TAG_T hpux_tag_to_smb_tag(HPUX_ACL_TAG_T hpux_tag);
-static bool hpux_add_to_acl(HPUX_ACL_T *hpux_acl, int *count,
+static BOOL hpux_add_to_acl(HPUX_ACL_T *hpux_acl, int *count,
 		HPUX_ACL_T add_acl, int add_count, SMB_ACL_TYPE_T type);
-static bool hpux_acl_get_file(const char *name, HPUX_ACL_T *hpuxacl, 
+static BOOL hpux_acl_get_file(const char *name, HPUX_ACL_T *hpuxacl, 
 		int *count);
 static SMB_ACL_PERM_T hpux_perm_to_smb_perm(const HPUX_PERM_T perm);
 static HPUX_PERM_T smb_perm_to_hpux_perm(const SMB_ACL_PERM_T perm);
 #if 0
-static bool hpux_acl_check(HPUX_ACL_T hpux_acl, int count);
+static BOOL hpux_acl_check(HPUX_ACL_T hpux_acl, int count);
 #endif
 /* aclsort (internal) and helpers: */
-static bool hpux_acl_sort(HPUX_ACL_T acl, int count);
+static BOOL hpux_acl_sort(HPUX_ACL_T acl, int count);
 static int hpux_internal_aclsort(int acl_count, int calclass, HPUX_ACL_T aclp);
 static void hpux_count_obj(int acl_count, HPUX_ACL_T aclp, 
 		struct hpux_acl_types *acl_type_count);
 static void hpux_swap_acl_entries(HPUX_ACE_T *aclp0, HPUX_ACE_T *aclp1);
-static bool hpux_prohibited_duplicate_type(int acl_type);
+static BOOL hpux_prohibited_duplicate_type(int acl_type);
 
-static bool hpux_acl_call_present(void);
-static bool hpux_aclsort_call_present(void);
+static BOOL hpux_acl_call_present(void);
+static BOOL hpux_aclsort_call_present(void);
 
 
 /* public functions - the api */
@@ -182,14 +183,15 @@
  * get the access ACL of a file referred to by a fd
  */
 SMB_ACL_T hpuxacl_sys_acl_get_fd(vfs_handle_struct *handle,
-				 files_struct *fsp)
+				 files_struct *fsp,
+				 int fd)
 {
         /* 
 	 * HPUX doesn't have the facl call. Fake it using the path.... JRA. 
 	 */
 	/* For all I see, the info should already be in the fsp
 	 * parameter, but get it again to be safe --- necessary? */
-        files_struct *file_struct_p = file_find_fd(fsp->fh->fd);
+        files_struct *file_struct_p = file_find_fd(fd);
         if (file_struct_p == NULL) {
                 errno = EBADF;
                 return NULL;
@@ -306,14 +308,14 @@
  */
 int hpuxacl_sys_acl_set_fd(vfs_handle_struct *handle,
 			      files_struct *fsp,
-			      SMB_ACL_T theacl)
+			      int fd, SMB_ACL_T theacl)
 {
         /*
          * HPUX doesn't have the facl call. Fake it using the path.... JRA.
          */
 	/* For all I see, the info should already be in the fsp
 	 * parameter, but get it again to be safe --- necessary? */
-        files_struct *file_struct_p = file_find_fd(fsp->fh->fd);
+        files_struct *file_struct_p = file_find_fd(fd);
         if (file_struct_p == NULL) {
                 errno = EBADF;
                 return -1;
@@ -403,11 +405,11 @@
  * Convert the SMB acl to the ACCESS or DEFAULT part of a 
  * hpux ACL, as desired.
  */
-static bool smb_acl_to_hpux_acl(SMB_ACL_T smb_acl, 
+static BOOL smb_acl_to_hpux_acl(SMB_ACL_T smb_acl, 
 				   HPUX_ACL_T *hpux_acl, int *count, 
 				   SMB_ACL_TYPE_T type)
 {
-	bool ret = False;
+	BOOL ret = False;
 	int i;
 	int check_which, check_rc;
 
@@ -639,10 +641,10 @@
 }
 
 
-static bool hpux_acl_get_file(const char *name, HPUX_ACL_T *hpux_acl, 
+static BOOL hpux_acl_get_file(const char *name, HPUX_ACL_T *hpux_acl, 
 				 int *count)
 {
-	bool result = False;
+	BOOL result = False;
 	static HPUX_ACE_T dummy_ace;
 
 	DEBUG(10, ("hpux_acl_get_file called for file '%s'\n", name));
@@ -702,7 +704,7 @@
  * time. If it should become necessary to add all of an ACL, one 
  * would have to replace this parameter by another type.
  */
-static bool hpux_add_to_acl(HPUX_ACL_T *hpux_acl, int *count,
+static BOOL hpux_add_to_acl(HPUX_ACL_T *hpux_acl, int *count,
 			       HPUX_ACL_T add_acl, int add_count, 
 			       SMB_ACL_TYPE_T type)
 {
@@ -748,7 +750,7 @@
  * happen aclsort() will fail and return an error and someone will
  * have to fix it...)
  */
-static bool hpux_acl_sort(HPUX_ACL_T hpux_acl, int count)
+static BOOL hpux_acl_sort(HPUX_ACL_T hpux_acl, int count)
 {
 	int fixmask = (count <= 4);
 
@@ -870,7 +872,7 @@
  * False - If the ACL type doesn't match any of the prohibited types.
  */ 
 
-static bool hpux_prohibited_duplicate_type(int acl_type)
+static BOOL hpux_prohibited_duplicate_type(int acl_type)
 {
 	switch(acl_type) {
 		case USER:
@@ -1053,13 +1055,13 @@
  * calls if it isn't there.                            
  */
 
-static bool hpux_acl_call_present(void)
+static BOOL hpux_acl_call_present(void)
 {
 
 	shl_t handle = NULL;
 	void *value;
 	int ret_val=0;
-	static bool already_checked = False;
+	static BOOL already_checked = False;
 
 	if(already_checked)
 		return True;
@@ -1088,12 +1090,12 @@
  * a dispatcher function could be handy...
  */
 
-static bool hpux_aclsort_call_present(void) 
+static BOOL hpux_aclsort_call_present(void) 
 {
 	shl_t handle = NULL;
 	void *value;
 	int ret_val = 0;
-	static bool already_checked = False;
+	static BOOL already_checked = False;
 
 	if (already_checked) {
 		return True;
@@ -1121,7 +1123,7 @@
  *   concrete error messages for debugging...
  *   (acl sort just says that the acl is invalid...)
  */
-static bool hpux_acl_check(HPUX_ACL_T hpux_acl, int count)
+static BOOL hpux_acl_check(HPUX_ACL_T hpux_acl, int count)
 {
 	int check_rc;
 	int check_which;

Modified: branches/samba/upstream/source/modules/vfs_irixacl.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_irixacl.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_irixacl.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 /*
    Unix SMB/Netbios implementation.
    VFS module to get and set irix acls
-   Copyright (C) Michael Adam 2006,2008
+   Copyright (C) Michael Adam 2006
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -32,7 +33,8 @@
 }
 
 SMB_ACL_T irixacl_sys_acl_get_fd(vfs_handle_struct *handle,
-				 files_struct *fsp)
+				  files_struct *fsp,
+				  int fd)
 {
 	errno = ENOTSUP;
 	return NULL;
@@ -49,7 +51,7 @@
 
 int irixacl_sys_acl_set_fd(vfs_handle_struct *handle,
 			    files_struct *fsp,
-			    SMB_ACL_T theacl)
+			    int fd, SMB_ACL_T theacl)
 {
 	errno = ENOTSUP;
 	return -1;

Modified: branches/samba/upstream/source/modules/vfs_netatalk.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_netatalk.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_netatalk.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *  
  * This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
  * GNU General Public License for more details.
  *  
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -194,7 +195,7 @@
 
 static int atalk_rmdir(struct vfs_handle_struct *handle, const char *path)
 {
-	bool add = False;
+	BOOL add = False;
 	TALLOC_CTX *ctx = 0;
 	char *dpath;
 
@@ -374,38 +375,6 @@
 	return ret;
 }
 
-static int atalk_lchown(struct vfs_handle_struct *handle, const char *path, uid_t uid, gid_t gid)
-{
-	int ret = 0;
-	char *adbl_path = 0;
-	char *orig_path = 0;
-	SMB_STRUCT_STAT adbl_info;
-	SMB_STRUCT_STAT orig_info;
-	TALLOC_CTX *ctx;
-
-	ret = SMB_VFS_NEXT_CHOWN(handle, path, uid, gid);
-
-	if (!path) return ret;
-
-	if (!(ctx = talloc_init("lchown_file")))
-		return ret;
-
-	if (atalk_build_paths(ctx, handle->conn->origpath, path, &adbl_path, &orig_path,
-	  &adbl_info, &orig_info) != 0)
-		goto exit_lchown;
-
-	if (!S_ISDIR(orig_info.st_mode) && !S_ISREG(orig_info.st_mode)) {
-		DEBUG(3, ("ATALK: %s has passed..\n", orig_path));		
-		goto exit_lchown;
-	}
-
-	sys_lchown(adbl_path, uid, gid);
-
-exit_lchown:	
-	talloc_destroy(ctx);
-	return ret;
-}
-
 static vfs_op_tuple atalk_ops[] = {
     
 	/* Directory operations */
@@ -419,7 +388,6 @@
 	{SMB_VFS_OP(atalk_unlink), 		SMB_VFS_OP_UNLINK, 	SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(atalk_chmod), 		SMB_VFS_OP_CHMOD, 	SMB_VFS_LAYER_TRANSPARENT},
 	{SMB_VFS_OP(atalk_chown),		SMB_VFS_OP_CHOWN,	SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(atalk_lchown),		SMB_VFS_OP_LCHOWN,	SMB_VFS_LAYER_TRANSPARENT},
 	
 	/* Finish VFS operations definition */
 	

Modified: branches/samba/upstream/source/modules/vfs_notify_fam.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_notify_fam.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_notify_fam.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  */
 
 #include "includes.h"
@@ -62,7 +63,7 @@
  * We want one FAM connection per smbd, not one per tcon.
  */
 static FAMConnection fam_connection;
-static bool fam_connection_initialized = False;
+static BOOL fam_connection_initialized = False;
 
 static struct fam_watch_context *fam_notify_list;
 static void fam_handler(struct event_context *event_ctx,

Modified: branches/samba/upstream/source/modules/vfs_posixacl.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_posixacl.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_posixacl.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -22,7 +23,7 @@
 
 /* prototypes for static functions first - for clarity */
 
-static bool smb_ace_to_internal(acl_entry_t posix_ace,
+static BOOL smb_ace_to_internal(acl_entry_t posix_ace,
 				struct smb_acl_entry *ace);
 static struct smb_acl_t *smb_acl_to_internal(acl_t acl);
 static int smb_acl_set_mode(acl_entry_t entry, SMB_ACL_PERM_T perm);
@@ -63,10 +64,11 @@
 }
 
 SMB_ACL_T posixacl_sys_acl_get_fd(vfs_handle_struct *handle,
-				  files_struct *fsp)
+				  files_struct *fsp,
+				  int fd)
 {
 	struct smb_acl_t *result;
-	acl_t acl = acl_get_fd(fsp->fh->fd);
+	acl_t acl = acl_get_fd(fd);
 
 	if (acl == NULL) {
 		return NULL;
@@ -113,14 +115,14 @@
 
 int posixacl_sys_acl_set_fd(vfs_handle_struct *handle,
 			    files_struct *fsp,
-			    SMB_ACL_T theacl)
+			    int fd, SMB_ACL_T theacl)
 {
 	int res;
 	acl_t acl = smb_acl_to_posix(theacl);
 	if (acl == NULL) {
 		return -1;
 	}
-	res =  acl_set_fd(fsp->fh->fd, acl);
+	res =  acl_set_fd(fd, acl);
 	acl_free(acl);
 	return res;
 }
@@ -134,7 +136,7 @@
 
 /* private functions */
 
-static bool smb_ace_to_internal(acl_entry_t posix_ace,
+static BOOL smb_ace_to_internal(acl_entry_t posix_ace,
 				struct smb_acl_entry *ace)
 {
 	acl_tag_t tag;

Modified: branches/samba/upstream/source/modules/vfs_prealloc.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_prealloc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_prealloc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -47,16 +48,11 @@
 #define lock_type struct flock64
 #endif
 
-#ifdef HAVE_GPFS
-#include "gpfs_gpl.h"
-#endif
-
 #define MODULE "prealloc"
 static int module_debug;
 
 static int preallocate_space(int fd, SMB_OFF_T size)
 {
-#ifndef HAVE_GPFS
 	lock_type fl = {0};
 	int err;
 
@@ -83,9 +79,6 @@
 	err = -1;
 	errno = ENOSYS;
 #endif
-#else /* GPFS uses completely different interface */
-       err = gpfs_prealloc(fd, (gpfs_off64_t)0, (gpfs_off64_t)size);
-#endif
 
 	if (err) {
 		DEBUG(module_debug,
@@ -192,14 +185,15 @@
 
 static int prealloc_ftruncate(vfs_handle_struct * handle,
 			files_struct *	fsp,
+			int		fd,
 			SMB_OFF_T	offset)
 {
 	SMB_OFF_T *psize;
-	int ret = SMB_VFS_NEXT_FTRUNCATE(handle, fsp, offset);
+	int ret = SMB_VFS_NEXT_FTRUNCATE(handle, fsp, fd, offset);
 
 	/* Maintain the allocated space even in the face of truncates. */
 	if ((psize = VFS_FETCH_FSP_EXTENSION(handle, fsp))) {
-		preallocate_space(fsp->fh->fd, *psize);
+		preallocate_space(fd, *psize);
 	}
 
 	return ret;
@@ -218,3 +212,4 @@
 	return smb_register_vfs(SMB_VFS_INTERFACE_VERSION,
 		MODULE, prealloc_op_tuples);
 }
+

Modified: branches/samba/upstream/source/modules/vfs_readahead.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_readahead.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_readahead.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,7 +3,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
@@ -12,15 +12,20 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
 
+#if !defined(HAVE_LINUX_READAHEAD) && !defined(HAVE_POSIX_FADVISE)
+static BOOL didmsg;
+#endif
+
 struct readahead_data {
 	SMB_OFF_T off_bound;
 	SMB_OFF_T len;
-	bool didmsg;
+	BOOL didmsg;
 };
 
 /* 
@@ -35,7 +40,8 @@
 
 static ssize_t readahead_sendfile(struct vfs_handle_struct *handle,
 					int tofd,
-					files_struct *fromfsp,
+					files_struct *fsp,
+					int fromfd,
 					const DATA_BLOB *header,
 					SMB_OFF_T offset,
 					size_t count)
@@ -44,16 +50,16 @@
 
 	if ( offset % rhd->off_bound == 0) {
 #if defined(HAVE_LINUX_READAHEAD)
-		int err = readahead(fromfsp->fh->fd, offset, (size_t)rhd->len);
+		int err = readahead(fromfd, offset, (size_t)rhd->len);
 		DEBUG(10,("readahead_sendfile: readahead on fd %u, offset %llu, len %u returned %d\n",
-			(unsigned int)fromfsp->fh->fd,
+			(unsigned int)fromfd,
 			(unsigned long long)offset,
 			(unsigned int)rhd->len,
 		        err ));
 #elif defined(HAVE_POSIX_FADVISE)
-		int err = posix_fadvise(fromfsp->fh->fd, offset, (off_t)rhd->len, POSIX_FADV_WILLNEED);
+		int err = posix_fadvise(fromfd, offset, (off_t)rhd->len, POSIX_FADV_WILLNEED);
 		DEBUG(10,("readahead_sendfile: posix_fadvise on fd %u, offset %llu, len %u returned %d\n",
-			(unsigned int)fromfsp->fh->fd,
+			(unsigned int)fromfd,
 			(unsigned long long)offset,
 			(unsigned int)rhd->len,
 			err ));
@@ -66,7 +72,8 @@
 	}
 	return SMB_VFS_NEXT_SENDFILE(handle,
 					tofd,
-					fromfsp,
+					fsp,
+					fromfd,
 					header,
 					offset,
 					count);
@@ -78,6 +85,7 @@
 
 static ssize_t readahead_pread(vfs_handle_struct *handle,
 				files_struct *fsp,
+				int fd,
 				void *data,
 				size_t count,
 				SMB_OFF_T offset)
@@ -86,16 +94,16 @@
 
 	if ( offset % rhd->off_bound == 0) {
 #if defined(HAVE_LINUX_READAHEAD)
-		int err = readahead(fsp->fh->fd, offset, (size_t)rhd->len);
+		int err = readahead(fd, offset, (size_t)rhd->len);
 		DEBUG(10,("readahead_pread: readahead on fd %u, offset %llu, len %u returned %d\n",
-			(unsigned int)fsp->fh->fd,
+			(unsigned int)fd,
 			(unsigned long long)offset,
 			(unsigned int)rhd->len,
 			err ));
 #elif defined(HAVE_POSIX_FADVISE)
-		int err = posix_fadvise(fsp->fh->fd, offset, (off_t)rhd->len, POSIX_FADV_WILLNEED);
+		int err = posix_fadvise(fd, offset, (off_t)rhd->len, POSIX_FADV_WILLNEED);
 		DEBUG(10,("readahead_pread: posix_fadvise on fd %u, offset %llu, len %u returned %d\n",
-			(unsigned int)fsp->fh->fd,
+			(unsigned int)fd,
 			(unsigned long long)offset,
 			(unsigned int)rhd->len,
 			err ));
@@ -106,7 +114,7 @@
 		}
 #endif
         }
-        return SMB_VFS_NEXT_PREAD(handle, fsp, data, count, offset);
+        return SMB_VFS_NEXT_PREAD(handle, fsp, fd, data, count, offset);
 }
 
 /*******************************************************************

Modified: branches/samba/upstream/source/modules/vfs_readonly.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_readonly.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_readonly.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
    This work was sponsored by Optifacio Software Services, Inc.
 */

Modified: branches/samba/upstream/source/modules/vfs_recycle.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_recycle.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_recycle.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,7 +10,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
@@ -19,7 +19,8 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -75,9 +76,9 @@
 	return tmp_str;
 }
 
-static bool recycle_keep_dir_tree(vfs_handle_struct *handle)
+static BOOL recycle_keep_dir_tree(vfs_handle_struct *handle)
 {
-	bool ret;
+	BOOL ret;
 	
 	ret = lp_parm_bool(SNUM(handle->conn), "recycle", "keeptree", False);
 
@@ -86,9 +87,9 @@
 	return ret;
 }
 
-static bool recycle_versions(vfs_handle_struct *handle)
+static BOOL recycle_versions(vfs_handle_struct *handle)
 {
-	bool ret;
+	BOOL ret;
 
 	ret = lp_parm_bool(SNUM(handle->conn), "recycle", "versions", False);
 
@@ -97,9 +98,9 @@
 	return ret;
 }
 
-static bool recycle_touch(vfs_handle_struct *handle)
+static BOOL recycle_touch(vfs_handle_struct *handle)
 {
-	bool ret;
+	BOOL ret;
 
 	ret = lp_parm_bool(SNUM(handle->conn), "recycle", "touch", False);
 
@@ -108,9 +109,9 @@
 	return ret;
 }
 
-static bool recycle_touch_mtime(vfs_handle_struct *handle)
+static BOOL recycle_touch_mtime(vfs_handle_struct *handle)
 {
-	bool ret;
+	BOOL ret;
 
 	ret = lp_parm_bool(SNUM(handle->conn), "recycle", "touch_mtime", False);
 
@@ -210,7 +211,7 @@
 	return (mode_t)dirmode;
 }
 
-static bool recycle_directory_exist(vfs_handle_struct *handle, const char *dname)
+static BOOL recycle_directory_exist(vfs_handle_struct *handle, const char *dname)
 {
 	SMB_STRUCT_STAT st;
 
@@ -223,7 +224,7 @@
 	return False;
 }
 
-static bool recycle_file_exist(vfs_handle_struct *handle, const char *fname)
+static BOOL recycle_file_exist(vfs_handle_struct *handle, const char *fname)
 {
 	SMB_STRUCT_STAT st;
 
@@ -260,7 +261,7 @@
  * @param dname Directory tree to be created
  * @return Returns True for success
  **/
-static bool recycle_create_dir(vfs_handle_struct *handle, const char *dname)
+static BOOL recycle_create_dir(vfs_handle_struct *handle, const char *dname)
 {
 	size_t len;
 	mode_t mode;
@@ -268,8 +269,7 @@
 	char *tmp_str = NULL;
 	char *token;
 	char *tok_str;
-	bool ret = False;
-	char *saveptr;
+	BOOL ret = False;
 
 	mode = recycle_directory_mode(handle);
 
@@ -287,8 +287,7 @@
 	}
 
 	/* Create directory tree if neccessary */
-	for(token = strtok_r(tok_str, "/", &saveptr); token;
-	    token = strtok_r(NULL, "/", &saveptr)) {
+	for(token = strtok(tok_str, "/"); token; token = strtok(NULL, "/")) {
 		safe_strcat(new_dir, token, len);
 		if (recycle_directory_exist(handle, new_dir))
 			DEBUG(10, ("recycle: dir %s already exists\n", new_dir));
@@ -316,7 +315,7 @@
  * Return True if found
  **/
 
-static bool matchdirparam(const char **dir_exclude_list, char *path)
+static BOOL matchdirparam(const char **dir_exclude_list, char *path)
 {
 	char *startp = NULL, *endp = NULL;
 
@@ -366,7 +365,7 @@
  * @param needle string to be matched exectly to haystack including pattern matching
  * @return True if found
  **/
-static bool matchparam(const char **haystack_list, const char *needle)
+static BOOL matchparam(const char **haystack_list, const char *needle)
 {
 	int i;
 
@@ -387,28 +386,20 @@
 /**
  * Touch access or modify date
  **/
-static void recycle_do_touch(vfs_handle_struct *handle, const char *fname,
-			     bool touch_mtime)
+static void recycle_do_touch(vfs_handle_struct *handle, const char *fname, BOOL touch_mtime)
 {
 	SMB_STRUCT_STAT st;
 	struct timespec ts[2];
-	int ret, err;
-
+	
 	if (SMB_VFS_NEXT_STAT(handle, fname, &st) != 0) {
-		DEBUG(0,("recycle: stat for %s returned %s\n",
-			 fname, strerror(errno)));
+		DEBUG(0,("recycle: stat for %s returned %s\n", fname, strerror(errno)));
 		return;
 	}
 	ts[0] = timespec_current(); /* atime */
 	ts[1] = touch_mtime ? ts[0] : get_mtimespec(&st); /* mtime */
 
-	become_root();
-	ret = SMB_VFS_NEXT_NTIMES(handle, fname, ts);
-	err = errno;
-	unbecome_root();
-	if (ret == -1 ) {
-		DEBUG(0, ("recycle: touching %s failed, reason = %s\n",
-			  fname, strerror(err)));
+	if (SMB_VFS_NEXT_NTIMES(handle, fname, ts) == -1 ) {
+		DEBUG(0, ("recycle: touching %s failed, reason = %s\n", fname, strerror(errno)));
 	}
 }
 
@@ -428,7 +419,7 @@
 	int i = 1;
 	SMB_OFF_T maxsize, minsize;
 	SMB_OFF_T file_size; /* space_avail;	*/
-	bool exist;
+	BOOL exist;
 	int rc = -1;
 
 	repository = talloc_sub_advanced(NULL, lp_servicename(SNUM(conn)),

Modified: branches/samba/upstream/source/modules/vfs_shadow_copy.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_shadow_copy.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_shadow_copy.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *  
  * This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  * GNU General Public License for more details.
  *  
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -61,7 +62,7 @@
 	SMB_STRUCT_DIRENT *dirs;
 } shadow_copy_Dir;
 
-static bool shadow_copy_match_name(const char *name)
+static BOOL shadow_copy_match_name(const char *name)
 {
 	if (strncmp(SHADOW_COPY_PREFIX,name, sizeof(SHADOW_COPY_PREFIX)-1)==0 &&
 		(strlen(SHADOW_COPY_SAMPLE) == strlen(name))) {
@@ -160,7 +161,7 @@
 	return 0;	
 }
 
-static int shadow_copy_get_shadow_copy_data(vfs_handle_struct *handle, files_struct *fsp, SHADOW_COPY_DATA *shadow_copy_data, bool labels)
+static int shadow_copy_get_shadow_copy_data(vfs_handle_struct *handle, files_struct *fsp, SHADOW_COPY_DATA *shadow_copy_data, BOOL labels)
 {
 	SMB_STRUCT_DIR *p = SMB_VFS_NEXT_OPENDIR(handle,fsp->conn->connectpath,NULL,0);
 

Deleted: branches/samba/upstream/source/modules/vfs_shadow_copy2.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_shadow_copy2.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_shadow_copy2.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,637 +0,0 @@
-/* 
- * implementation of an Shadow Copy module - version 2
- *
- * Copyright (C) Andrew Tridgell     2007
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *  
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *  
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "includes.h"
-
-/*
-
-  This is a 2nd implemetation of a shadow copy module for exposing
-  snapshots to windows clients as shadow copies. This version has the
-  following features:
-
-     1) you don't need to populate your shares with symlinks to the
-     snapshots. This can be very important when you have thousands of
-     shares, or use [homes]
-
-     2) the inode number of the files is altered so it is different
-     from the original. This allows the 'restore' button to work
-     without a sharing violation
-
-  Module options:
-
-      shadow:snapdir = <directory where snapshots are kept>
-
-      This is the directory containing the @GMT-* snapshot directories. If it is an absolute
-      path it is used as-is. If it is a relative path, then it is taken relative to the mount
-      point of the filesystem that the root of this share is on
-
-      shadow:basedir = <base directory that snapshots are from>
-
-      This is an optional parameter that specifies the directory that
-      the snapshots are relative to. It defaults to the filesystem
-      mount point
-
-      shadow:fixinodes = yes/no
-
-      If you enable shadow:fixinodes then this module will modify the
-      apparent inode number of files in the snapshot directories using
-      a hash of the files path. This is needed for snapshot systems
-      where the snapshots have the same device:inode number as the
-      original files (such as happens with GPFS snapshots). If you
-      don't set this option then the 'restore' button in the shadow
-      copy UI will fail with a sharing violation.
-
-  Note that the directory names in the snapshot directory must take the form
-  @GMT-YYYY.MM.DD-HH.MM.SS
-  
-  The following command would generate a correctly formatted directory name:
-     date -u + at GMT-%Y.%m.%d-%H.%M.%S
-  
- */
-
-static int vfs_shadow_copy2_debug_level = DBGC_VFS;
-
-#undef DBGC_CLASS
-#define DBGC_CLASS vfs_shadow_copy2_debug_level
-
-#define GMT_NAME_LEN 24 /* length of a @GMT- name */
-
-/*
-  make very sure it is one of our special names 
- */
-static inline bool shadow_copy2_match_name(const char *name)
-{
-	unsigned year, month, day, hr, min, sec;
-	if (name[0] != '@') return False;
-	if (strncmp(name, "@GMT-", 5) != 0) return False;
-	if (sscanf(name, "@GMT-%04u.%02u.%02u-%02u.%02u.%02u", &year, &month,
-		   &day, &hr, &min, &sec) != 6) {
-		return False;
-	}
-	if (name[24] != 0 && name[24] != '/') {
-		return False;
-	}
-	return True;
-}
-
-/*
-  convert a name to the shadow directory
- */
-
-#define _SHADOW2_NEXT(op, args, rtype, eret, extra) do { \
-	const char *name = fname; \
-	if (shadow_copy2_match_name(fname)) { \
-		char *name2; \
-		rtype ret; \
-		name2 = convert_shadow2_name(handle, fname); \
-		if (name2 == NULL) { \
-			errno = EINVAL; \
-			return eret; \
-		} \
-		name = name2; \
-		ret = SMB_VFS_NEXT_ ## op args; \
-		talloc_free(name2); \
-		if (ret != eret) extra; \
-		return ret; \
-	} else { \
-		return SMB_VFS_NEXT_ ## op args; \
-	} \
-} while (0)
-
-/*
-  convert a name to the shadow directory: NTSTATUS-specific handling
- */
-
-#define _SHADOW2_NTSTATUS_NEXT(op, args, eret, extra) do { \
-        const char *name = fname; \
-        if (shadow_copy2_match_name(fname)) { \
-                char *name2; \
-                NTSTATUS ret; \
-                name2 = convert_shadow2_name(handle, fname); \
-                if (name2 == NULL) { \
-                        errno = EINVAL; \
-                        return eret; \
-                } \
-                name = name2; \
-                ret = SMB_VFS_NEXT_ ## op args; \
-                talloc_free(name2); \
-                if (!NT_STATUS_EQUAL(ret, eret)) extra; \
-                return ret; \
-        } else { \
-                return SMB_VFS_NEXT_ ## op args; \
-        } \
-} while (0)
-
-#define SHADOW2_NTSTATUS_NEXT(op, args, eret) _SHADOW2_NTSTATUS_NEXT(op, args, eret, )
-
-#define SHADOW2_NEXT(op, args, rtype, eret) _SHADOW2_NEXT(op, args, rtype, eret, )
-
-#define SHADOW2_NEXT2(op, args) do { \
-	if (shadow_copy2_match_name(oldname) || shadow_copy2_match_name(newname)) { \
-		errno = EROFS; \
-		return -1; \
-	} else { \
-		return SMB_VFS_NEXT_ ## op args; \
-	} \
-} while (0)
-
-
-/*
-  find the mount point of a filesystem
- */
-static char *find_mount_point(TALLOC_CTX *mem_ctx, vfs_handle_struct *handle)
-{
-	char *path = talloc_strdup(mem_ctx, handle->conn->connectpath);
-	dev_t dev;
-	struct stat st;
-	char *p;
-
-	if (stat(path, &st) != 0) {
-		talloc_free(path);
-		return NULL;
-	}
-
-	dev = st.st_dev;
-
-	while ((p = strrchr(path, '/')) && p > path) {
-		*p = 0;
-		if (stat(path, &st) != 0) {
-			talloc_free(path);
-			return NULL;
-		}
-		if (st.st_dev != dev) {
-			*p = '/';
-			break;
-		}
-	}
-
-	return path;	
-}
-
-/*
-  work out the location of the snapshot for this share
- */
-static const char *shadow_copy2_find_snapdir(TALLOC_CTX *mem_ctx, vfs_handle_struct *handle)
-{
-	const char *snapdir;
-	char *mount_point;
-	const char *ret;
-
-	snapdir = lp_parm_const_string(SNUM(handle->conn), "shadow", "snapdir", NULL);
-	if (snapdir == NULL) {
-		return NULL;
-	}
-	/* if its an absolute path, we're done */
-	if (*snapdir == '/') {
-		return snapdir;
-	}
-
-	/* other its relative to the filesystem mount point */
-	mount_point = find_mount_point(mem_ctx, handle);
-	if (mount_point == NULL) {
-		return NULL;
-	}
-
-	ret = talloc_asprintf(mem_ctx, "%s/%s", mount_point, snapdir);
-	talloc_free(mount_point);
-	return ret;
-}
-
-/*
-  work out the location of the base directory for snapshots of this share
- */
-static const char *shadow_copy2_find_basedir(TALLOC_CTX *mem_ctx, vfs_handle_struct *handle)
-{
-	const char *basedir = lp_parm_const_string(SNUM(handle->conn), "shadow", "basedir", NULL);
-
-	/* other its the filesystem mount point */
-	if (basedir == NULL) {
-		basedir = find_mount_point(mem_ctx, handle);
-	}
-
-	return basedir;
-}
-
-/*
-  convert a filename from a share relative path, to a path in the
-  snapshot directory
- */
-static char *convert_shadow2_name(vfs_handle_struct *handle, const char *fname)
-{
-	TALLOC_CTX *tmp_ctx = talloc_new(handle->data);
-	const char *snapdir, *relpath, *baseoffset, *basedir;
-	size_t baselen;
-	char *ret;
-
-	snapdir = shadow_copy2_find_snapdir(tmp_ctx, handle);
-	if (snapdir == NULL) {
-		DEBUG(2,("no snapdir found for share at %s\n", handle->conn->connectpath));
-		talloc_free(tmp_ctx);
-		return NULL;
-	}
-
-	basedir = shadow_copy2_find_basedir(tmp_ctx, handle);
-	if (basedir == NULL) {
-		DEBUG(2,("no basedir found for share at %s\n", handle->conn->connectpath));
-		talloc_free(tmp_ctx);
-		return NULL;
-	}
-
-	relpath = fname + GMT_NAME_LEN;
-	baselen = strlen(basedir);
-	baseoffset = handle->conn->connectpath + baselen;
-
-	/* some sanity checks */
-	if (strncmp(basedir, handle->conn->connectpath, baselen) != 0 ||
-	    (handle->conn->connectpath[baselen] != 0 && handle->conn->connectpath[baselen] != '/')) {
-		DEBUG(0,("convert_shadow2_name: basedir %s is not a parent of %s\n",
-			 basedir, handle->conn->connectpath));
-		talloc_free(tmp_ctx);
-		return NULL;
-	}
-
-	if (*relpath == '/') relpath++;
-	if (*baseoffset == '/') baseoffset++;
-
-	ret = talloc_asprintf(handle->data, "%s/%.*s/%s/%s", 
-			      snapdir, 
-			      GMT_NAME_LEN, fname, 
-			      baseoffset, 
-			      relpath);
-	DEBUG(6,("convert_shadow2_name: '%s' -> '%s'\n", fname, ret));
-	talloc_free(tmp_ctx);
-	return ret;
-}
-
-
-/*
-  simple string hash
- */
-static uint32 string_hash(const char *s)
-{
-        uint32 n = 0;
-	while (*s) {
-                n = ((n << 5) + n) ^ (uint32)(*s++);
-        }
-        return n;
-}
-
-/*
-  modify a sbuf return to ensure that inodes in the shadow directory
-  are different from those in the main directory
- */
-static void convert_sbuf(vfs_handle_struct *handle, const char *fname, SMB_STRUCT_STAT *sbuf)
-{
-	if (lp_parm_bool(SNUM(handle->conn), "shadow", "fixinodes", False)) {		
-		/* some snapshot systems, like GPFS, return the name
-		   device:inode for the snapshot files as the current
-		   files. That breaks the 'restore' button in the shadow copy
-		   GUI, as the client gets a sharing violation.
-
-		   This is a crude way of allowing both files to be
-		   open at once. It has a slight chance of inode
-		   number collision, but I can't see a better approach
-		   without significant VFS changes
-		*/
-		uint32_t shash = string_hash(fname) & 0xFF000000;
-		if (shash == 0) {
-			shash = 1;
-		}
-		sbuf->st_ino ^= shash;
-	}
-}
-
-static int shadow_copy2_rename(vfs_handle_struct *handle,
-			const char *oldname, const char *newname)
-{
-	SHADOW2_NEXT2(RENAME, (handle, oldname, newname));
-}
-
-static int shadow_copy2_symlink(vfs_handle_struct *handle,
-				const char *oldname, const char *newname)
-{
-	SHADOW2_NEXT2(SYMLINK, (handle, oldname, newname));
-}
-
-static int shadow_copy2_link(vfs_handle_struct *handle,
-			  const char *oldname, const char *newname)
-{
-	SHADOW2_NEXT2(LINK, (handle, oldname, newname));
-}
-
-static int shadow_copy2_open(vfs_handle_struct *handle,
-			     const char *fname, files_struct *fsp, int flags, mode_t mode)
-{
-	SHADOW2_NEXT(OPEN, (handle, name, fsp, flags, mode), int, -1);
-}
-
-static SMB_STRUCT_DIR *shadow_copy2_opendir(vfs_handle_struct *handle,
-			  const char *fname, const char *mask, uint32 attr)
-{
-        SHADOW2_NEXT(OPENDIR, (handle, name, mask, attr), SMB_STRUCT_DIR *, NULL);
-}
-
-static int shadow_copy2_stat(vfs_handle_struct *handle,
-		      const char *fname, SMB_STRUCT_STAT *sbuf)
-{
-        _SHADOW2_NEXT(STAT, (handle, name, sbuf), int, -1, convert_sbuf(handle, fname, sbuf));
-}
-
-static int shadow_copy2_lstat(vfs_handle_struct *handle,
-		       const char *fname, SMB_STRUCT_STAT *sbuf)
-{
-        _SHADOW2_NEXT(LSTAT, (handle, name, sbuf), int, -1, convert_sbuf(handle, fname, sbuf));
-}
-
-static int shadow_copy2_fstat(vfs_handle_struct *handle, files_struct *fsp, SMB_STRUCT_STAT *sbuf)
-{
-	int ret = SMB_VFS_NEXT_FSTAT(handle, fsp, sbuf);
-	if (ret == 0 && shadow_copy2_match_name(fsp->fsp_name)) {
-		convert_sbuf(handle, fsp->fsp_name, sbuf);
-	}
-	return ret;
-}
-
-static int shadow_copy2_unlink(vfs_handle_struct *handle, const char *fname)
-{
-        SHADOW2_NEXT(UNLINK, (handle, name), int, -1);
-}
-
-static int shadow_copy2_chmod(vfs_handle_struct *handle,
-		       const char *fname, mode_t mode)
-{
-        SHADOW2_NEXT(CHMOD, (handle, name, mode), int, -1);
-}
-
-static int shadow_copy2_chown(vfs_handle_struct *handle,
-		       const char *fname, uid_t uid, gid_t gid)
-{
-        SHADOW2_NEXT(CHOWN, (handle, name, uid, gid), int, -1);
-}
-
-static int shadow_copy2_chdir(vfs_handle_struct *handle,
-		       const char *fname)
-{
-	SHADOW2_NEXT(CHDIR, (handle, name), int, -1);
-}
-
-static int shadow_copy2_ntimes(vfs_handle_struct *handle,
-		       const char *fname, const struct timespec ts[2])
-{
-        SHADOW2_NEXT(NTIMES, (handle, name, ts), int, -1);
-}
-
-static int shadow_copy2_readlink(vfs_handle_struct *handle,
-				 const char *fname, char *buf, size_t bufsiz)
-{
-        SHADOW2_NEXT(READLINK, (handle, name, buf, bufsiz), int, -1);
-}
-
-static int shadow_copy2_mknod(vfs_handle_struct *handle,
-		       const char *fname, mode_t mode, SMB_DEV_T dev)
-{
-        SHADOW2_NEXT(MKNOD, (handle, name, mode, dev), int, -1);
-}
-
-static char *shadow_copy2_realpath(vfs_handle_struct *handle,
-			    const char *fname, char *resolved_path)
-{
-        SHADOW2_NEXT(REALPATH, (handle, name, resolved_path), char *, NULL);
-}
-
-static NTSTATUS shadow_copy2_get_nt_acl(vfs_handle_struct *handle,
-			       const char *fname, uint32 security_info,
-			       struct security_descriptor **ppdesc)
-{
-        SHADOW2_NTSTATUS_NEXT(GET_NT_ACL, (handle, name, security_info, ppdesc), NT_STATUS_ACCESS_DENIED);
-}
-
-static NTSTATUS shadow_copy2_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
-			     const char *fname, uint32 security_info_sent,
-			     struct security_descriptor *psd)
-{
-        SHADOW2_NTSTATUS_NEXT(SET_NT_ACL, (handle, fsp, name, security_info_sent, psd), NT_STATUS_ACCESS_DENIED);
-}
-
-static int shadow_copy2_mkdir(vfs_handle_struct *handle,  const char *fname, mode_t mode)
-{
-        SHADOW2_NEXT(MKDIR, (handle, name, mode), int, -1);
-}
-
-static int shadow_copy2_rmdir(vfs_handle_struct *handle,  const char *fname)
-{
-        SHADOW2_NEXT(RMDIR, (handle, name), int, -1);
-}
-
-static int shadow_copy2_chflags(vfs_handle_struct *handle, const char *fname, int flags)
-{
-        SHADOW2_NEXT(CHFLAGS, (handle, name, flags), int, -1);
-}
-
-static ssize_t shadow_copy2_getxattr(vfs_handle_struct *handle,
-				  const char *fname, const char *aname, void *value, size_t size)
-{
-        SHADOW2_NEXT(GETXATTR, (handle, name, aname, value, size), ssize_t, -1);
-}
-
-static ssize_t shadow_copy2_lgetxattr(vfs_handle_struct *handle,
-				      const char *fname, const char *aname, void *value, size_t size)
-{
-        SHADOW2_NEXT(LGETXATTR, (handle, name, aname, value, size), ssize_t, -1);
-}
-
-static ssize_t shadow_copy2_listxattr(struct vfs_handle_struct *handle, const char *fname, 
-				      char *list, size_t size)
-{
-	SHADOW2_NEXT(LISTXATTR, (handle, name, list, size), ssize_t, -1);
-}
-
-static int shadow_copy2_removexattr(struct vfs_handle_struct *handle, const char *fname, 
-				    const char *aname)
-{
-	SHADOW2_NEXT(REMOVEXATTR, (handle, name, aname), int, -1);
-}
-
-static int shadow_copy2_lremovexattr(struct vfs_handle_struct *handle, const char *fname, 
-				     const char *aname)
-{
-	SHADOW2_NEXT(LREMOVEXATTR, (handle, name, aname), int, -1);
-}
-
-static int shadow_copy2_setxattr(struct vfs_handle_struct *handle, const char *fname, 
-				 const char *aname, const void *value, size_t size, int flags)
-{
-	SHADOW2_NEXT(SETXATTR, (handle, name, aname, value, size, flags), int, -1);
-}
-
-static int shadow_copy2_lsetxattr(struct vfs_handle_struct *handle, const char *fname, 
-				  const char *aname, const void *value, size_t size, int flags)
-{
-	SHADOW2_NEXT(LSETXATTR, (handle, name, aname, value, size, flags), int, -1);
-}
-
-static int shadow_copy2_chmod_acl(vfs_handle_struct *handle,
-			   const char *fname, mode_t mode)
-{
-        /* If the underlying VFS doesn't have ACL support... */
-        if (!handle->vfs_next.ops.chmod_acl) {
-                errno = ENOSYS;
-                return -1;
-        }
-        SHADOW2_NEXT(CHMOD_ACL, (handle, name, mode), int, -1);
-}
-
-static int shadow_copy2_get_shadow_copy2_data(vfs_handle_struct *handle, 
-					      files_struct *fsp, 
-					      SHADOW_COPY_DATA *shadow_copy2_data, 
-					      bool labels)
-{
-	SMB_STRUCT_DIR *p;
-	const char *snapdir;
-	SMB_STRUCT_DIRENT *d;
-	TALLOC_CTX *tmp_ctx = talloc_new(handle->data);
-
-	snapdir = shadow_copy2_find_snapdir(tmp_ctx, handle);
-	if (snapdir == NULL) {
-		DEBUG(0,("shadow:snapdir not found for %s in get_shadow_copy_data\n",
-			 handle->conn->connectpath));
-		errno = EINVAL;
-		talloc_free(tmp_ctx);
-		return -1;
-	}
-
-	p = SMB_VFS_NEXT_OPENDIR(handle, snapdir, NULL, 0);
-
-	if (!p) {
-		DEBUG(0,("shadow_copy2: SMB_VFS_NEXT_OPENDIR() failed for '%s' - %s\n", 
-			 snapdir, strerror(errno)));
-		talloc_free(tmp_ctx);
-		return -1;
-	}
-
-	talloc_free(tmp_ctx);
-
-	shadow_copy2_data->num_volumes = 0;
-	shadow_copy2_data->labels      = NULL;
-
-	while ((d = SMB_VFS_NEXT_READDIR(handle, p))) {
-		SHADOW_COPY_LABEL *tlabels;
-
-		/* ignore names not of the right form in the snapshot directory */
-		if (!shadow_copy2_match_name(d->d_name)) {
-			continue;
-		}
-
-		if (!labels) {
-			/* the caller doesn't want the labels */
-			shadow_copy2_data->num_volumes++;
-			continue;
-		}
-
-		tlabels = talloc_realloc(shadow_copy2_data->mem_ctx,
-					 shadow_copy2_data->labels,
-					 SHADOW_COPY_LABEL, shadow_copy2_data->num_volumes+1);
-		if (tlabels == NULL) {
-			DEBUG(0,("shadow_copy2: out of memory\n"));
-			SMB_VFS_NEXT_CLOSEDIR(handle, p);
-			return -1;
-		}
-
-		strlcpy(tlabels[shadow_copy2_data->num_volumes], d->d_name, sizeof(*tlabels));
-		shadow_copy2_data->num_volumes++;
-		shadow_copy2_data->labels = tlabels;
-	}
-
-	SMB_VFS_NEXT_CLOSEDIR(handle,p);
-	return 0;
-}
-
-/* VFS operations structure */
-
-static vfs_op_tuple shadow_copy2_ops[] = {
-        {SMB_VFS_OP(shadow_copy2_opendir),  SMB_VFS_OP_OPENDIR,  SMB_VFS_LAYER_TRANSPARENT},
-
-	/* directory operations */
-        {SMB_VFS_OP(shadow_copy2_mkdir),       SMB_VFS_OP_MKDIR,       SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(shadow_copy2_rmdir),       SMB_VFS_OP_RMDIR,       SMB_VFS_LAYER_TRANSPARENT},
-
-	/* xattr and flags operations */
-        {SMB_VFS_OP(shadow_copy2_chflags),     SMB_VFS_OP_CHFLAGS,     SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(shadow_copy2_getxattr),    SMB_VFS_OP_GETXATTR,    SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(shadow_copy2_lgetxattr),   SMB_VFS_OP_LGETXATTR,   SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(shadow_copy2_listxattr),   SMB_VFS_OP_LISTXATTR,   SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(shadow_copy2_removexattr), SMB_VFS_OP_REMOVEXATTR, SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(shadow_copy2_lremovexattr),SMB_VFS_OP_LREMOVEXATTR,SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(shadow_copy2_setxattr),    SMB_VFS_OP_SETXATTR,    SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(shadow_copy2_lsetxattr),   SMB_VFS_OP_LSETXATTR,   SMB_VFS_LAYER_TRANSPARENT},
-
-        /* File operations */
-        {SMB_VFS_OP(shadow_copy2_open),       SMB_VFS_OP_OPEN,     SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(shadow_copy2_rename),     SMB_VFS_OP_RENAME,   SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(shadow_copy2_stat),       SMB_VFS_OP_STAT,     SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(shadow_copy2_lstat),      SMB_VFS_OP_LSTAT,    SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(shadow_copy2_fstat),      SMB_VFS_OP_FSTAT,    SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(shadow_copy2_unlink),     SMB_VFS_OP_UNLINK,   SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(shadow_copy2_chmod),      SMB_VFS_OP_CHMOD,    SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(shadow_copy2_chown),      SMB_VFS_OP_CHOWN,    SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(shadow_copy2_chdir),      SMB_VFS_OP_CHDIR,    SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(shadow_copy2_ntimes),     SMB_VFS_OP_NTIMES,   SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(shadow_copy2_symlink),    SMB_VFS_OP_SYMLINK,  SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(shadow_copy2_readlink),   SMB_VFS_OP_READLINK, SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(shadow_copy2_link),       SMB_VFS_OP_LINK,     SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(shadow_copy2_mknod),      SMB_VFS_OP_MKNOD,    SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(shadow_copy2_realpath),   SMB_VFS_OP_REALPATH, SMB_VFS_LAYER_TRANSPARENT},
-
-        /* NT File ACL operations */
-        {SMB_VFS_OP(shadow_copy2_get_nt_acl), SMB_VFS_OP_GET_NT_ACL, SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(shadow_copy2_set_nt_acl), SMB_VFS_OP_SET_NT_ACL, SMB_VFS_LAYER_TRANSPARENT},
-
-        /* POSIX ACL operations */
-        {SMB_VFS_OP(shadow_copy2_chmod_acl), SMB_VFS_OP_CHMOD_ACL, SMB_VFS_LAYER_TRANSPARENT},
-
-	/* special shadown copy op */
-	{SMB_VFS_OP(shadow_copy2_get_shadow_copy2_data), 
-	 SMB_VFS_OP_GET_SHADOW_COPY_DATA,SMB_VFS_LAYER_OPAQUE},
-
-	{SMB_VFS_OP(NULL), SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP}
-};
-
-NTSTATUS vfs_shadow_copy2_init(void);
-NTSTATUS vfs_shadow_copy2_init(void)
-{
-	NTSTATUS ret;
-
-	ret = smb_register_vfs(SMB_VFS_INTERFACE_VERSION, "shadow_copy2", shadow_copy2_ops);
-
-	if (!NT_STATUS_IS_OK(ret))
-		return ret;
-
-	vfs_shadow_copy2_debug_level = debug_add_class("shadow_copy2");
-	if (vfs_shadow_copy2_debug_level == -1) {
-		vfs_shadow_copy2_debug_level = DBGC_VFS;
-		DEBUG(0, ("%s: Couldn't register custom debugging class!\n",
-			"vfs_shadow_copy2_init"));
-	} else {
-		DEBUG(10, ("%s: Debug class number of '%s': %d\n", 
-			"vfs_shadow_copy2_init","shadow_copy2",vfs_shadow_copy2_debug_level));
-	}
-
-	return ret;
-}

Modified: branches/samba/upstream/source/modules/vfs_solarisacl.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_solarisacl.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_solarisacl.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 /*
    Unix SMB/Netbios implementation.
    VFS module to get and set Solaris ACLs
-   Copyright (C) Michael Adam 2006,2008
+   Copyright (C) Michael Adam 2006
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 
@@ -39,22 +40,22 @@
 /* prototypes for private functions */
 
 static SOLARIS_ACL_T solaris_acl_init(int count);
-static bool smb_acl_to_solaris_acl(SMB_ACL_T smb_acl, 
+static BOOL smb_acl_to_solaris_acl(SMB_ACL_T smb_acl, 
 		SOLARIS_ACL_T *solariacl, int *count, 
 		SMB_ACL_TYPE_T type);
 static SMB_ACL_T solaris_acl_to_smb_acl(SOLARIS_ACL_T solarisacl, int count,
 		SMB_ACL_TYPE_T type);
 static SOLARIS_ACL_TAG_T smb_tag_to_solaris_tag(SMB_ACL_TAG_T smb_tag);
 static SMB_ACL_TAG_T solaris_tag_to_smb_tag(SOLARIS_ACL_TAG_T solaris_tag);
-static bool solaris_add_to_acl(SOLARIS_ACL_T *solaris_acl, int *count,
+static BOOL solaris_add_to_acl(SOLARIS_ACL_T *solaris_acl, int *count,
 		SOLARIS_ACL_T add_acl, int add_count, SMB_ACL_TYPE_T type);
-static bool solaris_acl_get_file(const char *name, SOLARIS_ACL_T *solarisacl, 
+static BOOL solaris_acl_get_file(const char *name, SOLARIS_ACL_T *solarisacl, 
 		int *count);
-static bool solaris_acl_get_fd(int fd, SOLARIS_ACL_T *solarisacl, int *count);
-static bool solaris_acl_sort(SOLARIS_ACL_T acl, int count);
+static BOOL solaris_acl_get_fd(int fd, SOLARIS_ACL_T *solarisacl, int *count);
+static BOOL solaris_acl_sort(SOLARIS_ACL_T acl, int count);
 static SMB_ACL_PERM_T solaris_perm_to_smb_perm(const SOLARIS_PERM_T perm);
 static SOLARIS_PERM_T smb_perm_to_solaris_perm(const SMB_ACL_PERM_T perm);
-static bool solaris_acl_check(SOLARIS_ACL_T solaris_acl, int count);
+static BOOL solaris_acl_check(SOLARIS_ACL_T solaris_acl, int count);
 
 
 /* public functions - the api */
@@ -100,7 +101,8 @@
  * get the access ACL of a file referred to by a fd
  */
 SMB_ACL_T solarisacl_sys_acl_get_fd(vfs_handle_struct *handle,
-				    files_struct *fsp)
+				    files_struct *fsp,
+				    int fd)
 {
 	SMB_ACL_T result = NULL;
 	int count;
@@ -108,7 +110,7 @@
 
 	DEBUG(10, ("entering solarisacl_sys_acl_get_fd.\n"));
 
-	if (!solaris_acl_get_fd(fsp->fh->fd, &solaris_acl, &count)) {
+	if (!solaris_acl_get_fd(fd, &solaris_acl, &count)) {
 		goto done;
 	}
 	/* 
@@ -218,7 +220,7 @@
  */
 int solarisacl_sys_acl_set_fd(vfs_handle_struct *handle,
 			      files_struct *fsp,
-			      SMB_ACL_T theacl)
+			      int fd, SMB_ACL_T theacl)
 {
 	SOLARIS_ACL_T solaris_acl = NULL;
 	SOLARIS_ACL_T default_acl = NULL;
@@ -241,7 +243,7 @@
 			   strerror(errno)));
 		goto done;
 	}
-	if (!solaris_acl_get_fd(fsp->fh->fd, &default_acl, &default_count)) {
+	if (!solaris_acl_get_fd(fd, &default_acl, &default_count)) {
 		DEBUG(10, ("error getting (default) acl from fd\n"));
 		goto done;
 	}
@@ -257,14 +259,14 @@
 		goto done;
 	}
 
-	ret = facl(fsp->fh->fd, SETACL, count, solaris_acl);
+	ret = facl(fd, SETACL, count, solaris_acl);
 	if (ret != 0) {
 		DEBUG(10, ("call of facl failed (%s).\n", strerror(errno)));
 	}
 
  done:
-	DEBUG(10, ("solarisacl_sys_acl_set_fd %s.\n",
-		   ((ret == 0) ? "succeeded" : "failed" )));
+	DEBUG(10, ("solarisacl_sys_acl_st_fd %s.\n",
+		   ((ret == 0) ? "succeded" : "failed" )));
 	SAFE_FREE(solaris_acl);
 	SAFE_FREE(default_acl);
 	return ret;
@@ -341,11 +343,11 @@
  * Convert the SMB acl to the ACCESS or DEFAULT part of a 
  * solaris ACL, as desired.
  */
-static bool smb_acl_to_solaris_acl(SMB_ACL_T smb_acl, 
+static BOOL smb_acl_to_solaris_acl(SMB_ACL_T smb_acl, 
 				   SOLARIS_ACL_T *solaris_acl, int *count, 
 				   SMB_ACL_TYPE_T type)
 {
-	bool ret = False;
+	BOOL ret = False;
 	int i;
 	int check_which, check_rc;
 
@@ -572,10 +574,10 @@
 }
 
 
-static bool solaris_acl_get_file(const char *name, SOLARIS_ACL_T *solaris_acl, 
+static BOOL solaris_acl_get_file(const char *name, SOLARIS_ACL_T *solaris_acl, 
 				 int *count)
 {
-	bool result = False;
+	BOOL result = False;
 
 	DEBUG(10, ("solaris_acl_get_file called for file '%s'\n", name));
 	
@@ -609,9 +611,9 @@
 }
 
 
-static bool solaris_acl_get_fd(int fd, SOLARIS_ACL_T *solaris_acl, int *count)
+static BOOL solaris_acl_get_fd(int fd, SOLARIS_ACL_T *solaris_acl, int *count)
 {
-	bool ret = False;
+	BOOL ret = False;
 
 	DEBUG(10, ("entering solaris_acl_get_fd\n"));
 
@@ -660,7 +662,7 @@
  * should become necessary to add all of an ACL, one would have
  * to replace this parameter by another type.
  */
-static bool solaris_add_to_acl(SOLARIS_ACL_T *solaris_acl, int *count,
+static BOOL solaris_add_to_acl(SOLARIS_ACL_T *solaris_acl, int *count,
 			       SOLARIS_ACL_T add_acl, int add_count, 
 			       SMB_ACL_TYPE_T type)
 {
@@ -706,7 +708,7 @@
  * happen aclsort() will fail and return an error and someone will
  * have to fix it...)
  */
-static bool solaris_acl_sort(SOLARIS_ACL_T solaris_acl, int count)
+static BOOL solaris_acl_sort(SOLARIS_ACL_T solaris_acl, int count)
 {
 	int fixmask = (count <= 4);
 
@@ -723,7 +725,7 @@
  *   concrete error messages for debugging...
  *   (acl sort just says that the acl is invalid...)
  */
-static bool solaris_acl_check(SOLARIS_ACL_T solaris_acl, int count)
+static BOOL solaris_acl_check(SOLARIS_ACL_T solaris_acl, int count)
 {
 	int check_rc;
 	int check_which;

Deleted: branches/samba/upstream/source/modules/vfs_streams_depot.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_streams_depot.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_streams_depot.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,641 +0,0 @@
-/*
- * Store streams in a separate subdirectory
- *
- * Copyright (C) Volker Lendecke, 2007
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "includes.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_VFS
-
-/*
- * Excerpt from a mail from tridge:
- *
- * Volker, what I'm thinking of is this:
- * /mount-point/.streams/XX/YY/aaaa.bbbb/namedstream1
- * /mount-point/.streams/XX/YY/aaaa.bbbb/namedstream2
- *
- * where XX/YY is a 2 level hash based on the fsid/inode. "aaaa.bbbb"
- * is the fsid/inode. "namedstreamX" is a file named after the stream
- * name.
- */
-
-static uint32_t hash_fn(DATA_BLOB key)
-{
-	uint32_t value;	/* Used to compute the hash value.  */
-	uint32_t i;	/* Used to cycle through random values. */
-
-	/* Set the initial value from the key size. */
-	for (value = 0x238F13AF * key.length, i=0; i < key.length; i++)
-		value = (value + (key.data[i] << (i*5 % 24)));
-
-	return (1103515243 * value + 12345);
-}
-
-/*
- * With the hashing scheme based on the inode we need to protect against
- * streams showing up on files with re-used inodes. This can happen if we
- * create a stream directory from within Samba, and a local process or NFS
- * client deletes the file without deleting the streams directory. When the
- * inode is re-used and the stream directory is still around, the streams in
- * there would be show up as belonging to the new file.
- *
- * There are several workarounds for this, probably the easiest one is on
- * systems which have a true birthtime stat element: When the file has a later
- * birthtime than the streams directory, then we have to recreate the
- * directory.
- *
- * The other workaround is to somehow mark the file as generated by Samba with
- * something that a NFS client would not do. The closest one is a special
- * xattr value being set. On systems which do not support xattrs, it might be
- * an option to put in a special ACL entry for a non-existing group.
- */
-
-#define SAMBA_XATTR_MARKER "user.SAMBA_STREAMS"
-
-static bool file_is_valid(vfs_handle_struct *handle, const char *path)
-{
-	char buf;
-
-	DEBUG(10, ("file_is_valid (%s) called\n", path));
-
-	if (SMB_VFS_NEXT_GETXATTR(handle, path, SAMBA_XATTR_MARKER,
-				  &buf, sizeof(buf)) != sizeof(buf)) {
-		DEBUG(10, ("GETXATTR failed: %s\n", strerror(errno)));
-		return false;
-	}
-
-	if (buf != '1') {
-		DEBUG(10, ("got wrong buffer content: '%c'\n", buf));
-		return false;
-	}
-
-	return true;
-}
-
-static bool mark_file_valid(vfs_handle_struct *handle, const char *path)
-{
-	char buf = '1';
-	int ret;
-
-	DEBUG(10, ("marking file %s as valid\n", path));
-
-	ret = SMB_VFS_NEXT_SETXATTR(handle, path, SAMBA_XATTR_MARKER,
-				    &buf, sizeof(buf), 0);
-
-	if (ret == -1) {
-		DEBUG(10, ("SETXATTR failed: %s\n", strerror(errno)));
-		return false;
-	}
-
-	return true;
-}
-
-static char *stream_dir(vfs_handle_struct *handle, const char *base_path,
-			const SMB_STRUCT_STAT *base_sbuf, bool create_it)
-{
-	uint32_t hash;
-	char *result = NULL;
-	SMB_STRUCT_STAT sbuf;
-	uint8_t first, second;
-	char *tmp;
-	char *id_hex;
-	struct file_id id;
-	uint8 id_buf[16];
-
-	const char *rootdir = lp_parm_const_string(
-		SNUM(handle->conn), "streams", "directory",
-		handle->conn->connectpath);
-
-	if (base_sbuf == NULL) {
-		if (SMB_VFS_NEXT_STAT(handle, base_path, &sbuf) == -1) {
-			/*
-			 * base file is not there
-			 */
-			goto fail;
-		}
-		base_sbuf = &sbuf;
-	}
-
-	id = SMB_VFS_FILE_ID_CREATE(handle->conn, base_sbuf->st_dev,
-				    base_sbuf->st_ino);
-
-	push_file_id_16((char *)id_buf, &id);
-
-	hash = hash_fn(data_blob_const(id_buf, sizeof(id_buf)));
-
-	first = hash & 0xff;
-	second = (hash >> 8) & 0xff;
-
-	id_hex = hex_encode(talloc_tos(), id_buf, sizeof(id_buf));
-
-	if (id_hex == NULL) {
-		errno = ENOMEM;
-		goto fail;
-	}
-
-	result = talloc_asprintf(talloc_tos(), "%s/%2.2X/%2.2X/%s", rootdir,
-				 first, second, id_hex);
-
-	TALLOC_FREE(id_hex);
-
-	if (result == NULL) {
-		errno = ENOMEM;
-		return NULL;
-	}
-
-	if (SMB_VFS_NEXT_STAT(handle, result, &sbuf) == 0) {
-		char *newname;
-
-		if (!S_ISDIR(sbuf.st_mode)) {
-			errno = EINVAL;
-			goto fail;
-		}
-
-		if (file_is_valid(handle, base_path)) {
-			return result;
-		}
-
-		/*
-		 * Someone has recreated a file under an existing inode
-		 * without deleting the streams directory. For now, just move
-		 * it away.
-		 */
-
-	again:
-		newname = talloc_asprintf(talloc_tos(), "lost-%lu", random());
-		if (newname == NULL) {
-			errno = ENOMEM;
-			goto fail;
-		}
-
-		if (SMB_VFS_NEXT_RENAME(handle, result, newname) == -1) {
-			if ((errno == EEXIST) || (errno == ENOTEMPTY)) {
-				TALLOC_FREE(newname);
-				goto again;
-			}
-			goto fail;
-		}
-
-		TALLOC_FREE(newname);
-	}
-
-	if (!create_it) {
-		errno = ENOENT;
-		goto fail;
-	}
-
-	if ((SMB_VFS_NEXT_MKDIR(handle, rootdir, 0755) != 0)
-	    && (errno != EEXIST)) {
-		goto fail;
-	}
-
-	tmp = talloc_asprintf(result, "%s/%2.2X", rootdir, first);
-	if (tmp == NULL) {
-		errno = ENOMEM;
-		goto fail;
-	}
-
-	if ((SMB_VFS_NEXT_MKDIR(handle, tmp, 0755) != 0)
-	    && (errno != EEXIST)) {
-		goto fail;
-	}
-
-	TALLOC_FREE(tmp);
-
-	tmp = talloc_asprintf(result, "%s/%2.2X/%2.2X", rootdir, first,
-			      second);
-	if (tmp == NULL) {
-		errno = ENOMEM;
-		goto fail;
-	}
-
-	if ((SMB_VFS_NEXT_MKDIR(handle, tmp, 0755) != 0)
-	    && (errno != EEXIST)) {
-		goto fail;
-	}
-
-	TALLOC_FREE(tmp);
-
-	if ((SMB_VFS_NEXT_MKDIR(handle, result, 0755) != 0)
-	    && (errno != EEXIST)) {
-		goto fail;
-	}
-
-	if (!mark_file_valid(handle, base_path)) {
-		goto fail;
-	}
-
-	return result;
-
- fail:
-	TALLOC_FREE(result);
-	return NULL;
-}
-
-static char *stream_name(vfs_handle_struct *handle, const char *fname,
-			 bool create_dir)
-{
-	char *base = NULL;
-	char *sname = NULL;
-	char *id_hex = NULL;
-	char *dirname, *stream_fname;
-
-	if (!NT_STATUS_IS_OK(split_ntfs_stream_name(talloc_tos(), fname,
-						    &base, &sname))) {
-		DEBUG(10, ("split_ntfs_stream_name failed\n"));
-		errno = ENOMEM;
-		goto fail;
-	}
-
-	dirname = stream_dir(handle, base, NULL, create_dir);
-
-	if (dirname == NULL) {
-		goto fail;
-	}
-
-	stream_fname = talloc_asprintf(talloc_tos(), "%s/:%s", dirname, sname);
-
-	if (stream_fname == NULL) {
-		errno = ENOMEM;
-		goto fail;
-	}
-
-	DEBUG(10, ("stream filename = %s\n", stream_fname));
-
-	TALLOC_FREE(base);
-	TALLOC_FREE(sname);
-	TALLOC_FREE(id_hex);
-
-	return stream_fname;
-
- fail:
-	DEBUG(5, ("stream_name failed: %s\n", strerror(errno)));
-	TALLOC_FREE(base);
-	TALLOC_FREE(sname);
-	TALLOC_FREE(id_hex);
-	return NULL;
-}
-
-static NTSTATUS walk_streams(vfs_handle_struct *handle,
-			     const char *fname,
-			     const SMB_STRUCT_STAT *sbuf,
-			     char **pdirname,
-			     bool (*fn)(const char *dirname,
-					const char *dirent,
-					void *private_data),
-			     void *private_data)
-{
-	char *dirname;
-	SMB_STRUCT_DIR *dirhandle = NULL;
-	char *dirent;
-
-	dirname = stream_dir(handle, fname, sbuf, false);
-
-	if (dirname == NULL) {
-		if (errno == ENOENT) {
-			/*
-			 * no stream around
-			 */
-			return NT_STATUS_OK;
-		}
-		return map_nt_error_from_unix(errno);
-	}
-
-	DEBUG(10, ("walk_streams: dirname=%s\n", dirname));
-
-	dirhandle = SMB_VFS_NEXT_OPENDIR(handle, dirname, NULL, 0);
-
-	if (dirhandle == NULL) {
-		TALLOC_FREE(dirname);
-		return map_nt_error_from_unix(errno);
-	}
-
-	while ((dirent = vfs_readdirname(handle->conn, dirhandle)) != NULL) {
-
-		if (ISDOT(dirent) || ISDOTDOT(dirent)) {
-			continue;
-		}
-
-		DEBUG(10, ("walk_streams: dirent=%s\n", dirent));
-
-		if (!fn(dirname, dirent, private_data)) {
-			break;
-		}
-	}
-
-	SMB_VFS_NEXT_CLOSEDIR(handle, dirhandle);
-
-	if (pdirname != NULL) {
-		*pdirname = dirname;
-	}
-	else {
-		TALLOC_FREE(dirname);
-	}
-
-	return NT_STATUS_OK;
-}
-
-static int streams_depot_stat(vfs_handle_struct *handle, const char *fname,
-			      SMB_STRUCT_STAT *sbuf)
-{
-	char *stream_fname;
-	int ret = -1;
-
-	DEBUG(10, ("streams_depot_stat called for [%s]\n", fname));
-
-	if (!is_ntfs_stream_name(fname)) {
-		return SMB_VFS_NEXT_STAT(handle, fname, sbuf);
-	}
-
-	stream_fname = stream_name(handle, fname, false);
-	if (stream_fname == NULL) {
-		goto done;
-	}
-
-	ret = SMB_VFS_NEXT_STAT(handle, stream_fname, sbuf);
-
- done:
-	TALLOC_FREE(stream_fname);
-	return ret;
-}
-
-static int streams_depot_lstat(vfs_handle_struct *handle, const char *fname,
-			       SMB_STRUCT_STAT *sbuf)
-{
-	char *stream_fname;
-	int ret = -1;
-
-	if (!is_ntfs_stream_name(fname)) {
-		return SMB_VFS_NEXT_LSTAT(handle, fname, sbuf);
-	}
-
-	stream_fname = stream_name(handle, fname, false);
-	if (stream_fname == NULL) {
-		goto done;
-	}
-
-	ret = SMB_VFS_NEXT_LSTAT(handle, stream_fname, sbuf);
-
- done:
-	TALLOC_FREE(stream_fname);
-	return ret;
-}
-
-static int streams_depot_open(vfs_handle_struct *handle,  const char *fname,
-			      files_struct *fsp, int flags, mode_t mode)
-{
-	TALLOC_CTX *frame;
-	char *base = NULL;
-	SMB_STRUCT_STAT base_sbuf;
-	char *stream_fname;
-	int ret = -1;
-
-	if (!is_ntfs_stream_name(fname)) {
-		return SMB_VFS_NEXT_OPEN(handle, fname, fsp, flags, mode);
-	}
-
-	frame = talloc_stackframe();
-
-	if (!NT_STATUS_IS_OK(split_ntfs_stream_name(talloc_tos(), fname,
-						    &base, NULL))) {
-		errno = ENOMEM;
-		goto done;
-	}
-
-	ret = SMB_VFS_NEXT_STAT(handle, base, &base_sbuf);
-
-	if (ret == -1) {
-		goto done;
-	}
-
-	TALLOC_FREE(base);
-
-	stream_fname = stream_name(handle, fname, true);
-	if (stream_fname == NULL) {
-		goto done;
-	}
-
-	ret = SMB_VFS_NEXT_OPEN(handle, stream_fname, fsp, flags, mode);
-
- done:
-	TALLOC_FREE(frame);
-	return ret;
-}
-
-static int streams_depot_unlink(vfs_handle_struct *handle,  const char *fname)
-{
-	int ret = -1;
-	SMB_STRUCT_STAT sbuf;
-
-	DEBUG(10, ("streams_depot_unlink called for %s\n", fname));
-
-	if (is_ntfs_stream_name(fname)) {
-		char *stream_fname;
-
-		stream_fname = stream_name(handle, fname, false);
-		if (stream_fname == NULL) {
-			return -1;
-		}
-
-		ret = SMB_VFS_NEXT_UNLINK(handle, stream_fname);
-
-		TALLOC_FREE(stream_fname);
-		return ret;
-	}
-
-	/*
-	 * We potentially need to delete the per-inode streams directory
-	 */
-
-	if (SMB_VFS_NEXT_STAT(handle, fname, &sbuf) == -1) {
-		return -1;
-	}
-
-	if (sbuf.st_nlink == 1) {
-		char *dirname = stream_dir(handle, fname, &sbuf, false);
-
-		if (dirname != NULL) {
-			SMB_VFS_NEXT_RMDIR(handle, dirname);
-		}
-		TALLOC_FREE(dirname);
-	}
-
-	return SMB_VFS_NEXT_UNLINK(handle, fname);
-}
-
-static bool add_one_stream(TALLOC_CTX *mem_ctx, unsigned int *num_streams,
-			   struct stream_struct **streams,
-			   const char *name, SMB_OFF_T size,
-			   SMB_OFF_T alloc_size)
-{
-	struct stream_struct *tmp;
-
-	tmp = TALLOC_REALLOC_ARRAY(mem_ctx, *streams, struct stream_struct,
-				   (*num_streams)+1);
-	if (tmp == NULL) {
-		return false;
-	}
-
-	tmp[*num_streams].name = talloc_strdup(tmp, name);
-	if (tmp[*num_streams].name == NULL) {
-		return false;
-	}
-
-	tmp[*num_streams].size = size;
-	tmp[*num_streams].alloc_size = alloc_size;
-
-	*streams = tmp;
-	*num_streams += 1;
-	return true;
-}
-
-struct streaminfo_state {
-	TALLOC_CTX *mem_ctx;
-	vfs_handle_struct *handle;
-	unsigned int num_streams;
-	struct stream_struct *streams;
-	NTSTATUS status;
-};
-
-static bool collect_one_stream(const char *dirname,
-			       const char *dirent,
-			       void *private_data)
-{
-	struct streaminfo_state *state =
-		(struct streaminfo_state *)private_data;
-	char *full_sname;
-	SMB_STRUCT_STAT sbuf;
-
-	if (asprintf(&full_sname, "%s/%s", dirname, dirent) == -1) {
-		state->status = NT_STATUS_NO_MEMORY;
-		return false;
-	}
-	if (SMB_VFS_NEXT_STAT(state->handle, full_sname, &sbuf) == -1) {
-		DEBUG(10, ("Could not stat %s: %s\n", full_sname,
-			   strerror(errno)));
-		SAFE_FREE(full_sname);
-		return true;
-	}
-
-	SAFE_FREE(full_sname);
-
-	if (!add_one_stream(state->mem_ctx,
-			    &state->num_streams, &state->streams,
-			    dirent, sbuf.st_size,
-			    get_allocation_size(
-				    state->handle->conn, NULL, &sbuf))) {
-		state->status = NT_STATUS_NO_MEMORY;
-		return false;
-	}
-
-	return true;
-}
-
-static NTSTATUS streams_depot_streaminfo(vfs_handle_struct *handle,
-					 struct files_struct *fsp,
-					 const char *fname,
-					 TALLOC_CTX *mem_ctx,
-					 unsigned int *pnum_streams,
-					 struct stream_struct **pstreams)
-{
-	SMB_STRUCT_STAT sbuf;
-	int ret;
-	NTSTATUS status;
-	struct streaminfo_state state;
-
-	if ((fsp != NULL) && (fsp->fh->fd != -1)) {
-		if (is_ntfs_stream_name(fsp->fsp_name)) {
-			return NT_STATUS_INVALID_PARAMETER;
-		}
-		ret = SMB_VFS_NEXT_FSTAT(handle, fsp, &sbuf);
-	}
-	else {
-		if (is_ntfs_stream_name(fname)) {
-			return NT_STATUS_INVALID_PARAMETER;
-		}
-		ret = SMB_VFS_NEXT_STAT(handle, fname, &sbuf);
-	}
-
-	if (ret == -1) {
-		return map_nt_error_from_unix(errno);
-	}
-
-	state.streams = NULL;
-	state.num_streams = 0;
-
-	if (!S_ISDIR(sbuf.st_mode)) {
-		if (!add_one_stream(mem_ctx,
-				    &state.num_streams, &state.streams,
-				    "::$DATA", sbuf.st_size,
-				    get_allocation_size(handle->conn, fsp,
-							&sbuf))) {
-			return NT_STATUS_NO_MEMORY;
-		}
-	}
-
-	state.mem_ctx = mem_ctx;
-	state.handle = handle;
-	state.status = NT_STATUS_OK;
-
-	status = walk_streams(handle, fname, &sbuf, NULL, collect_one_stream,
-			      &state);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		TALLOC_FREE(state.streams);
-		return status;
-	}
-
-	if (!NT_STATUS_IS_OK(state.status)) {
-		TALLOC_FREE(state.streams);
-		return state.status;
-	}
-
-	*pnum_streams = state.num_streams;
-	*pstreams = state.streams;
-	return NT_STATUS_OK;
-}
-
-static uint32_t streams_depot_fs_capabilities(struct vfs_handle_struct *handle)
-{
-	return SMB_VFS_NEXT_FS_CAPABILITIES(handle) | FILE_NAMED_STREAMS;
-}
-
-/* VFS operations structure */
-
-static vfs_op_tuple streams_depot_ops[] = {
-	{SMB_VFS_OP(streams_depot_fs_capabilities), SMB_VFS_OP_FS_CAPABILITIES,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(streams_depot_open), SMB_VFS_OP_OPEN,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(streams_depot_stat), SMB_VFS_OP_STAT,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(streams_depot_lstat), SMB_VFS_OP_LSTAT,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(streams_depot_unlink), SMB_VFS_OP_UNLINK,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(streams_depot_streaminfo), SMB_VFS_OP_STREAMINFO,
-	 SMB_VFS_LAYER_OPAQUE},
-	{SMB_VFS_OP(NULL), SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP}
-};
-
-NTSTATUS vfs_streams_depot_init(void);
-NTSTATUS vfs_streams_depot_init(void)
-{
-	return smb_register_vfs(SMB_VFS_INTERFACE_VERSION, "streams_depot",
-				streams_depot_ops);
-}

Deleted: branches/samba/upstream/source/modules/vfs_streams_xattr.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_streams_xattr.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_streams_xattr.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,685 +0,0 @@
-/*
- * Store streams in xattrs
- *
- * Copyright (C) Volker Lendecke, 2008
- *
- * Partly based on James Peach's Darwin module, which is
- *
- * Copyright (C) James Peach 2006-2007
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "includes.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_VFS
-
-struct stream_io {
-	char *base;
-	char *xattr_name;
-};
-
-static SMB_INO_T stream_inode(const SMB_STRUCT_STAT *sbuf, const char *sname)
-{
-	struct MD5Context ctx;
-        unsigned char hash[16];
-	SMB_INO_T result;
-	char *upper_sname;
-
-	DEBUG(10, ("stream_inode called for %lu/%lu [%s]\n",
-		   (unsigned long)sbuf->st_dev,
-		   (unsigned long)sbuf->st_ino, sname));
-
-	upper_sname = talloc_strdup_upper(talloc_tos(), sname);
-	SMB_ASSERT(upper_sname != NULL);
-
-        MD5Init(&ctx);
-        MD5Update(&ctx, (unsigned char *)&(sbuf->st_dev),
-		  sizeof(sbuf->st_dev));
-        MD5Update(&ctx, (unsigned char *)&(sbuf->st_ino),
-		  sizeof(sbuf->st_ino));
-        MD5Update(&ctx, (unsigned char *)upper_sname,
-		  talloc_get_size(upper_sname)-1);
-        MD5Final(hash, &ctx);
-
-	TALLOC_FREE(upper_sname);
-
-        /* Hopefully all the variation is in the lower 4 (or 8) bytes! */
-	memcpy(&result, hash, sizeof(result));
-
-	DEBUG(10, ("stream_inode returns %lu\n", (unsigned long)result));
-
-	return result;
-}
-
-static ssize_t get_xattr_size(connection_struct *conn, const char *fname,
-			      const char *xattr_name)
-{
-	NTSTATUS status;
-	struct ea_struct ea;
-	ssize_t result;
-
-	status = get_ea_value(talloc_tos(), conn, NULL, fname,
-			      xattr_name, &ea);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return -1;
-	}
-
-	result = ea.value.length-1;
-	TALLOC_FREE(ea.value.data);
-	return result;
-}
-
-
-static int streams_xattr_fstat(vfs_handle_struct *handle, files_struct *fsp,
-			       SMB_STRUCT_STAT *sbuf)
-{
-	struct stream_io *io = (struct stream_io *)
-		VFS_FETCH_FSP_EXTENSION(handle, fsp);
-
-	DEBUG(10, ("streams_xattr_fstat called for %d\n", fsp->fh->fd));
-
-	if (io == NULL) {
-		return SMB_VFS_NEXT_FSTAT(handle, fsp, sbuf);
-	}
-
-	if (SMB_VFS_NEXT_FSTAT(handle, fsp, sbuf) == -1) {
-		return -1;
-	}
-
-	sbuf->st_size = get_xattr_size(handle->conn, io->base, io->xattr_name);
-	if (sbuf->st_size == -1) {
-		return -1;
-	}
-
-	DEBUG(10, ("sbuf->st_size = %d\n", (int)sbuf->st_size));
-
-	sbuf->st_ino = stream_inode(sbuf, io->xattr_name);
-	sbuf->st_mode &= ~S_IFMT;
-        sbuf->st_mode |= S_IFREG;
-        sbuf->st_blocks = sbuf->st_size % STAT_ST_BLOCKSIZE + 1;
-
-	return 0;
-}
-
-static int streams_xattr_stat(vfs_handle_struct *handle, const char *fname,
-			      SMB_STRUCT_STAT *sbuf)
-{
-	NTSTATUS status;
-	char *base = NULL, *sname = NULL;
-	int result = -1;
-	char *xattr_name;
-
-	if (!is_ntfs_stream_name(fname)) {
-		return SMB_VFS_NEXT_STAT(handle, fname, sbuf);
-	}
-
-	status = split_ntfs_stream_name(talloc_tos(), fname, &base, &sname);
-	if (!NT_STATUS_IS_OK(status)) {
-		errno = EINVAL;
-		return -1;
-	}
-
-	if (SMB_VFS_STAT(handle->conn, base, sbuf) == -1) {
-		goto fail;
-	}
-
-	xattr_name = talloc_asprintf(talloc_tos(), "%s%s",
-				     SAMBA_XATTR_DOSSTREAM_PREFIX, sname);
-	if (xattr_name == NULL) {
-		errno = ENOMEM;
-		goto fail;
-	}
-
-	sbuf->st_size = get_xattr_size(handle->conn, base, xattr_name);
-	if (sbuf->st_size == -1) {
-		errno = ENOENT;
-		goto fail;
-	}
-
-	sbuf->st_ino = stream_inode(sbuf, xattr_name);
-	sbuf->st_mode &= ~S_IFMT;
-        sbuf->st_mode |= S_IFREG;
-        sbuf->st_blocks = sbuf->st_size % STAT_ST_BLOCKSIZE + 1;
-
-	result = 0;
- fail:
-	TALLOC_FREE(base);
-	TALLOC_FREE(sname);
-	return result;
-}
-
-static int streams_xattr_lstat(vfs_handle_struct *handle, const char *fname,
-			       SMB_STRUCT_STAT *sbuf)
-{
-	NTSTATUS status;
-	char *base, *sname;
-	int result = -1;
-	char *xattr_name;
-
-	if (!is_ntfs_stream_name(fname)) {
-		return SMB_VFS_NEXT_LSTAT(handle, fname, sbuf);
-	}
-
-	status = split_ntfs_stream_name(talloc_tos(), fname, &base, &sname);
-	if (!NT_STATUS_IS_OK(status)) {
-		errno = EINVAL;
-		goto fail;
-	}
-
-	if (SMB_VFS_LSTAT(handle->conn, base, sbuf) == -1) {
-		goto fail;
-	}
-
-	xattr_name = talloc_asprintf(talloc_tos(), "%s%s",
-				     SAMBA_XATTR_DOSSTREAM_PREFIX, sname);
-	if (xattr_name == NULL) {
-		errno = ENOMEM;
-		goto fail;
-	}
-
-	sbuf->st_size = get_xattr_size(handle->conn, base, xattr_name);
-	if (sbuf->st_size == -1) {
-		errno = ENOENT;
-		goto fail;
-	}
-
-	sbuf->st_ino = stream_inode(sbuf, xattr_name);
-	sbuf->st_mode &= ~S_IFMT;
-        sbuf->st_mode |= S_IFREG;
-        sbuf->st_blocks = sbuf->st_size % STAT_ST_BLOCKSIZE + 1;
-
-	result = 0;
- fail:
-	TALLOC_FREE(base);
-	TALLOC_FREE(sname);
-	return result;
-}
-
-static int streams_xattr_open(vfs_handle_struct *handle,  const char *fname,
-			      files_struct *fsp, int flags, mode_t mode)
-{
-	TALLOC_CTX *frame;
-	NTSTATUS status;
-	struct stream_io *sio;
-	char *base, *sname;
-	struct ea_struct ea;
-	char *xattr_name;
-	int baseflags;
-	int hostfd = -1;
-
-	DEBUG(10, ("streams_xattr_open called for %s\n", fname));
-
-	if (!is_ntfs_stream_name(fname)) {
-		return SMB_VFS_NEXT_OPEN(handle, fname, fsp, flags, mode);
-	}
-
-	frame = talloc_stackframe();
-
-	status = split_ntfs_stream_name(talloc_tos(), fname,
-					&base, &sname);
-	if (!NT_STATUS_IS_OK(status)) {
-		errno = EINVAL;
-		goto fail;
-	}
-
-	xattr_name = talloc_asprintf(talloc_tos(), "%s%s",
-				     SAMBA_XATTR_DOSSTREAM_PREFIX, sname);
-	if (xattr_name == NULL) {
-		errno = ENOMEM;
-		goto fail;
-	}
-
-	/*
-	 * We use baseflags to turn off nasty side-effects when opening the
-	 * underlying file.
-         */
-        baseflags = flags;
-        baseflags &= ~O_TRUNC;
-        baseflags &= ~O_EXCL;
-        baseflags &= ~O_CREAT;
-
-        hostfd = SMB_VFS_OPEN(handle->conn, base, fsp, baseflags, mode);
-
-        /* It is legit to open a stream on a directory, but the base
-         * fd has to be read-only.
-         */
-        if ((hostfd == -1) && (errno == EISDIR)) {
-                baseflags &= ~O_ACCMODE;
-                baseflags |= O_RDONLY;
-                hostfd = SMB_VFS_OPEN(handle->conn, fname, fsp, baseflags,
-				      mode);
-        }
-
-        if (hostfd == -1) {
-		goto fail;
-        }
-
-	status = get_ea_value(talloc_tos(), handle->conn, NULL, base,
-			      xattr_name, &ea);
-
-	DEBUG(10, ("get_ea_value returned %s\n", nt_errstr(status)));
-
-	if (!NT_STATUS_IS_OK(status)
-	    && !NT_STATUS_EQUAL(status, NT_STATUS_NOT_FOUND)) {
-		/*
-		 * The base file is not there. This is an error even if we got
-		 * O_CREAT, the higher levels should have created the base
-		 * file for us.
-		 */
-		DEBUG(10, ("streams_xattr_open: base file %s not around, "
-			   "returning ENOENT\n", base));
-		errno = ENOENT;
-		goto fail;
-	}
-
-	if (!NT_STATUS_IS_OK(status)) {
-		/*
-		 * The attribute does not exist
-		 */
-
-                if (flags & O_CREAT) {
-			/*
-			 * Darn, xattrs need at least 1 byte
-			 */
-                        char null = '\0';
-
-			DEBUG(10, ("creating attribute %s on file %s\n",
-				   xattr_name, base));
-
-                        if (SMB_VFS_SETXATTR(
-				handle->conn, base, xattr_name,
-				&null, sizeof(null),
-				flags & O_EXCL ? XATTR_CREATE : 0) == -1) {
-				goto fail;
-			}
-		}
-	}
-
-	if (flags & O_TRUNC) {
-		char null = '\0';
-		if (SMB_VFS_SETXATTR(
-			    handle->conn, base, xattr_name,
-			    &null, sizeof(null),
-			    flags & O_EXCL ? XATTR_CREATE : 0) == -1) {
-			goto fail;
-		}
-	}
-
-        sio = (struct stream_io *)VFS_ADD_FSP_EXTENSION(handle, fsp,
-							struct stream_io);
-        if (sio == NULL) {
-                errno = ENOMEM;
-                goto fail;
-        }
-
-        sio->xattr_name = talloc_strdup(VFS_MEMCTX_FSP_EXTENSION(handle, fsp),
-					xattr_name);
-        sio->base = talloc_strdup(VFS_MEMCTX_FSP_EXTENSION(handle, fsp),
-				  base);
-
-	if ((sio->xattr_name == NULL) || (sio->base == NULL)) {
-		errno = ENOMEM;
-		goto fail;
-	}
-
-	TALLOC_FREE(frame);
-	return hostfd;
-
- fail:
-	if (hostfd >= 0) {
-		/*
-		 * BUGBUGBUG -- we would need to call fd_close_posix here, but
-		 * we don't have a full fsp yet
-		 */
-		SMB_VFS_CLOSE(fsp);
-	}
-
-	TALLOC_FREE(frame);
-	return -1;
-}
-
-static int streams_xattr_unlink(vfs_handle_struct *handle,  const char *fname)
-{
-	NTSTATUS status;
-	char *base = NULL;
-	char *sname = NULL;
-	int ret = -1;
-	char *xattr_name;
-
-	if (!is_ntfs_stream_name(fname)) {
-		return SMB_VFS_NEXT_UNLINK(handle, fname);
-	}
-
-	status = split_ntfs_stream_name(talloc_tos(), fname, &base, &sname);
-	if (!NT_STATUS_IS_OK(status)) {
-		errno = EINVAL;
-		goto fail;
-	}
-
-	xattr_name = talloc_asprintf(talloc_tos(), "%s%s",
-				     SAMBA_XATTR_DOSSTREAM_PREFIX, sname);
-	if (xattr_name == NULL) {
-		errno = ENOMEM;
-		goto fail;
-	}
-
-	ret = SMB_VFS_REMOVEXATTR(handle->conn, base, xattr_name);
-
-	if ((ret == -1) && (errno == ENOATTR)) {
-		errno = ENOENT;
-		goto fail;
-	}
-
-	ret = 0;
-
- fail:
-	TALLOC_FREE(base);
-	TALLOC_FREE(sname);
-	return ret;
-}
-
-static NTSTATUS walk_xattr_streams(connection_struct *conn, files_struct *fsp,
-				   const char *fname,
-				   bool (*fn)(struct ea_struct *ea,
-					      void *private_data),
-				   void *private_data)
-{
-	NTSTATUS status;
-	char **names;
-	size_t i, num_names;
-	size_t prefix_len = strlen(SAMBA_XATTR_DOSSTREAM_PREFIX);
-
-	status = get_ea_names_from_file(talloc_tos(), conn, fsp, fname,
-					&names, &num_names);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	for (i=0; i<num_names; i++) {
-		struct ea_struct ea;
-
-		if (strncmp(names[i], SAMBA_XATTR_DOSSTREAM_PREFIX,
-			    prefix_len) != 0) {
-			continue;
-		}
-
-		status = get_ea_value(names, conn, fsp, fname, names[i], &ea);
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(10, ("Could not get ea %s for file %s: %s\n",
-				   names[i], fname, nt_errstr(status)));
-			continue;
-		}
-
-		ea.name = talloc_asprintf(ea.value.data, ":%s",
-					  names[i] + prefix_len);
-		if (ea.name == NULL) {
-			DEBUG(0, ("talloc failed\n"));
-			continue;
-		}
-
-		if (!fn(&ea, private_data)) {
-			TALLOC_FREE(ea.value.data);
-			return NT_STATUS_OK;
-		}
-
-		TALLOC_FREE(ea.value.data);
-	}
-
-	TALLOC_FREE(names);
-	return NT_STATUS_OK;
-}
-
-static bool add_one_stream(TALLOC_CTX *mem_ctx, unsigned int *num_streams,
-			   struct stream_struct **streams,
-			   const char *name, SMB_OFF_T size,
-			   SMB_OFF_T alloc_size)
-{
-	struct stream_struct *tmp;
-
-	tmp = TALLOC_REALLOC_ARRAY(mem_ctx, *streams, struct stream_struct,
-				   (*num_streams)+1);
-	if (tmp == NULL) {
-		return false;
-	}
-
-	tmp[*num_streams].name = talloc_strdup(tmp, name);
-	if (tmp[*num_streams].name == NULL) {
-		return false;
-	}
-
-	tmp[*num_streams].size = size;
-	tmp[*num_streams].alloc_size = alloc_size;
-
-	*streams = tmp;
-	*num_streams += 1;
-	return true;
-}
-
-struct streaminfo_state {
-	TALLOC_CTX *mem_ctx;
-	vfs_handle_struct *handle;
-	unsigned int num_streams;
-	struct stream_struct *streams;
-	NTSTATUS status;
-};
-
-static bool collect_one_stream(struct ea_struct *ea, void *private_data)
-{
-	struct streaminfo_state *state =
-		(struct streaminfo_state *)private_data;
-
-	if (!add_one_stream(state->mem_ctx,
-			    &state->num_streams, &state->streams,
-			    ea->name, ea->value.length-1,
-			    smb_roundup(state->handle->conn,
-					ea->value.length-1))) {
-		state->status = NT_STATUS_NO_MEMORY;
-		return false;
-	}
-
-	return true;
-}
-
-static NTSTATUS streams_xattr_streaminfo(vfs_handle_struct *handle,
-					 struct files_struct *fsp,
-					 const char *fname,
-					 TALLOC_CTX *mem_ctx,
-					 unsigned int *pnum_streams,
-					 struct stream_struct **pstreams)
-{
-	SMB_STRUCT_STAT sbuf;
-	int ret;
-	NTSTATUS status;
-	struct streaminfo_state state;
-
-	if ((fsp != NULL) && (fsp->fh->fd != -1)) {
-		if (is_ntfs_stream_name(fsp->fsp_name)) {
-			return NT_STATUS_INVALID_PARAMETER;
-		}
-		ret = SMB_VFS_FSTAT(fsp, &sbuf);
-	}
-	else {
-		if (is_ntfs_stream_name(fname)) {
-			return NT_STATUS_INVALID_PARAMETER;
-		}
-		ret = SMB_VFS_STAT(handle->conn, fname, &sbuf);
-	}
-
-	if (ret == -1) {
-		return map_nt_error_from_unix(errno);
-	}
-
-	state.streams = NULL;
-	state.num_streams = 0;
-
-	if (!S_ISDIR(sbuf.st_mode)) {
-		if (!add_one_stream(mem_ctx,
-				    &state.num_streams, &state.streams,
-				    "::$DATA", sbuf.st_size,
-				    get_allocation_size(handle->conn, fsp,
-							&sbuf))) {
-			return NT_STATUS_NO_MEMORY;
-		}
-	}
-
-	state.mem_ctx = mem_ctx;
-	state.handle = handle;
-	state.status = NT_STATUS_OK;
-
-	status = walk_xattr_streams(handle->conn, fsp, fname,
-				    collect_one_stream, &state);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		TALLOC_FREE(state.streams);
-		return status;
-	}
-
-	if (!NT_STATUS_IS_OK(state.status)) {
-		TALLOC_FREE(state.streams);
-		return state.status;
-	}
-
-	*pnum_streams = state.num_streams;
-	*pstreams = state.streams;
-	return NT_STATUS_OK;
-}
-
-static uint32_t streams_xattr_fs_capabilities(struct vfs_handle_struct *handle)
-{
-	return SMB_VFS_NEXT_FS_CAPABILITIES(handle) | FILE_NAMED_STREAMS;
-}
-
-static ssize_t streams_xattr_pwrite(vfs_handle_struct *handle,
-				    files_struct *fsp, const void *data,
-				    size_t n, SMB_OFF_T offset)
-{
-        struct stream_io *sio =
-		(struct stream_io *)VFS_FETCH_FSP_EXTENSION(handle, fsp);
-	struct ea_struct ea;
-	NTSTATUS status;
-	int ret;
-
-	DEBUG(10, ("streams_xattr_pwrite called for %d bytes\n", (int)n));
-
-	if (sio == NULL) {
-		return SMB_VFS_NEXT_PWRITE(handle, fsp, data, n, offset);
-	}
-
-	status = get_ea_value(talloc_tos(), handle->conn, fsp->base_fsp,
-			      sio->base, sio->xattr_name, &ea);
-	if (!NT_STATUS_IS_OK(status)) {
-		return -1;
-	}
-
-        if ((offset + n) > ea.value.length-1) {
-		uint8 *tmp;
-
-		tmp = TALLOC_REALLOC_ARRAY(talloc_tos(), ea.value.data, uint8,
-					   offset + n + 1);
-
-		if (tmp == NULL) {
-			TALLOC_FREE(ea.value.data);
-                        errno = ENOMEM;
-                        return -1;
-                }
-		ea.value.data = tmp;
-		ea.value.length = offset + n + 1;
-		ea.value.data[offset+n] = 0;
-        }
-
-        memcpy(ea.value.data + offset, data, n);
-
-	ret = SMB_VFS_SETXATTR(fsp->conn, fsp->base_fsp->fsp_name,
-				sio->xattr_name,
-				ea.value.data, ea.value.length, 0);
-
-	TALLOC_FREE(ea.value.data);
-
-	if (ret == -1) {
-		return -1;
-	}
-
-	return n;
-}
-
-static ssize_t streams_xattr_pread(vfs_handle_struct *handle,
-				   files_struct *fsp, void *data,
-				   size_t n, SMB_OFF_T offset)
-{
-        struct stream_io *sio =
-		(struct stream_io *)VFS_FETCH_FSP_EXTENSION(handle, fsp);
-	struct ea_struct ea;
-	NTSTATUS status;
-        size_t length, overlap;
-
-	if (sio == NULL) {
-		return SMB_VFS_NEXT_PREAD(handle, fsp, data, n, offset);
-	}
-
-	status = get_ea_value(talloc_tos(), handle->conn, fsp->base_fsp,
-			      sio->base, sio->xattr_name, &ea);
-	if (!NT_STATUS_IS_OK(status)) {
-		return -1;
-	}
-
-	length = ea.value.length-1;
-
-        /* Attempt to read past EOF. */
-        if (length <= offset) {
-                errno = EINVAL;
-                return -1;
-        }
-
-        overlap = (offset + n) > length ? (length - offset) : n;
-        memcpy(data, ea.value.data + offset, overlap);
-
-	TALLOC_FREE(ea.value.data);
-        return overlap;
-}
-
-/* VFS operations structure */
-
-static vfs_op_tuple streams_xattr_ops[] = {
-	{SMB_VFS_OP(streams_xattr_fs_capabilities), SMB_VFS_OP_FS_CAPABILITIES,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(streams_xattr_open), SMB_VFS_OP_OPEN,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(streams_xattr_stat), SMB_VFS_OP_STAT,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(streams_xattr_fstat), SMB_VFS_OP_FSTAT,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(streams_xattr_lstat), SMB_VFS_OP_LSTAT,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(streams_xattr_pread), SMB_VFS_OP_PREAD,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(streams_xattr_pwrite), SMB_VFS_OP_PWRITE,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(streams_xattr_lstat), SMB_VFS_OP_LSTAT,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(streams_xattr_unlink), SMB_VFS_OP_UNLINK,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(streams_xattr_streaminfo), SMB_VFS_OP_STREAMINFO,
-	 SMB_VFS_LAYER_OPAQUE},
-	{SMB_VFS_OP(NULL), SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP}
-};
-
-NTSTATUS vfs_streams_xattr_init(void);
-NTSTATUS vfs_streams_xattr_init(void)
-{
-	return smb_register_vfs(SMB_VFS_INTERFACE_VERSION, "streams_xattr",
-				streams_xattr_ops);
-}

Deleted: branches/samba/upstream/source/modules/vfs_syncops.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_syncops.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_syncops.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,210 +0,0 @@
-/* 
- * ensure meta data operations are performed synchronously
- *
- * Copyright (C) Andrew Tridgell     2007
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *  
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *  
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "includes.h"
-
-/*
-
-  Some filesystems (even some journaled filesystems) require that a
-  fsync() be performed on many meta data operations to ensure that the
-  operation is guaranteed to remain in the filesystem after a power
-  failure. This is particularly important for some cluster filesystems
-  which are participating in a node failover system with clustered
-  Samba
-
-  On those filesystems this module provides a way to perform those
-  operations safely.  
- */
-
-/*
-  most of the performance loss with this module is in fsync on close(). 
-  You can disable that with syncops:onclose = no
- */
-static bool sync_onclose;
-
-/*
-  given a filename, find the parent directory
- */
-static char *parent_dir(TALLOC_CTX *mem_ctx, const char *name)
-{
-	const char *p = strrchr(name, '/');
-	if (p == NULL) {
-		return talloc_strdup(mem_ctx, ".");
-	}
-	return talloc_strndup(mem_ctx, name, (p+1) - name);
-}
-
-/*
-  fsync a directory by name
- */
-static void syncops_sync_directory(const char *dname)
-{
-#ifdef O_DIRECTORY
-	int fd = open(dname, O_DIRECTORY|O_RDONLY);
-	if (fd != -1) {
-		fsync(fd);
-		close(fd);
-	}
-#else
-	DIR *d = opendir(dname);
-	if (d != NULL) {
-		fsync(dirfd(d));
-		closedir(d);
-	}
-#endif
-}
-
-/*
-  sync two meta data changes for 2 names
- */
-static void syncops_two_names(const char *name1, const char *name2)
-{
-	TALLOC_CTX *tmp_ctx = talloc_new(NULL);
-	char *parent1, *parent2;
-	parent1 = parent_dir(tmp_ctx, name1);
-	parent2 = parent_dir(tmp_ctx, name2);
-	if (!parent1 || !parent2) {
-		talloc_free(tmp_ctx);
-		return;
-	}
-	syncops_sync_directory(parent1);
-	if (strcmp(parent1, parent2) != 0) {
-		syncops_sync_directory(parent2);		
-	}
-	talloc_free(tmp_ctx);
-}
-
-/*
-  sync two meta data changes for 1 names
- */
-static void syncops_name(const char *name)
-{
-	char *parent;
-	parent = parent_dir(NULL, name);
-	if (parent) {
-		syncops_sync_directory(parent);
-		talloc_free(parent);
-	}
-}
-
-
-/*
-  rename needs special handling, as we may need to fsync two directories
- */
-static int syncops_rename(vfs_handle_struct *handle,
-			  const char *oldname, const char *newname)
-{
-	int ret = SMB_VFS_NEXT_RENAME(handle, oldname, newname);
-	if (ret == 0) {
-		syncops_two_names(oldname, newname);
-	}
-	return ret;
-}
-
-/* handle the rest with a macro */
-#define SYNCOPS_NEXT(op, fname, args) do {   \
-	int ret = SMB_VFS_NEXT_ ## op args; \
-	if (ret == 0 && fname) syncops_name(fname); \
-	return ret; \
-} while (0)
-
-static int syncops_symlink(vfs_handle_struct *handle,
-			   const char *oldname, const char *newname)
-{
-	SYNCOPS_NEXT(SYMLINK, newname, (handle, oldname, newname));
-}
-
-static int syncops_link(vfs_handle_struct *handle,
-			 const char *oldname, const char *newname)
-{
-	SYNCOPS_NEXT(LINK, newname, (handle, oldname, newname));
-}
-
-static int syncops_open(vfs_handle_struct *handle,
-			const char *fname, files_struct *fsp, int flags, mode_t mode)
-{
-	SYNCOPS_NEXT(OPEN, (flags&O_CREAT?fname:NULL), (handle, fname, fsp, flags, mode));
-}
-
-static int syncops_unlink(vfs_handle_struct *handle, const char *fname)
-{
-        SYNCOPS_NEXT(UNLINK, fname, (handle, fname));
-}
-
-static int syncops_mknod(vfs_handle_struct *handle,
-			 const char *fname, mode_t mode, SMB_DEV_T dev)
-{
-        SYNCOPS_NEXT(MKNOD, fname, (handle, fname, mode, dev));
-}
-
-static int syncops_mkdir(vfs_handle_struct *handle,  const char *fname, mode_t mode)
-{
-        SYNCOPS_NEXT(MKDIR, fname, (handle, fname, mode));
-}
-
-static int syncops_rmdir(vfs_handle_struct *handle,  const char *fname)
-{
-        SYNCOPS_NEXT(RMDIR, fname, (handle, fname));
-}
-
-/* close needs to be handled specially */
-static int syncops_close(vfs_handle_struct *handle, files_struct *fsp)
-{
-	if (fsp->can_write && sync_onclose) {
-		/* ideally we'd only do this if we have written some
-		 data, but there is no flag for that in fsp yet. */
-		fsync(fsp->fh->fd);
-	}
-	return SMB_VFS_NEXT_CLOSE(handle, fsp);
-}
-
-
-/* VFS operations structure */
-
-static vfs_op_tuple syncops_ops[] = {
-	/* directory operations */
-        {SMB_VFS_OP(syncops_mkdir),       SMB_VFS_OP_MKDIR,       SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(syncops_rmdir),       SMB_VFS_OP_RMDIR,       SMB_VFS_LAYER_TRANSPARENT},
-
-        /* File operations */
-        {SMB_VFS_OP(syncops_open),       SMB_VFS_OP_OPEN,     SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(syncops_rename),     SMB_VFS_OP_RENAME,   SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(syncops_unlink),     SMB_VFS_OP_UNLINK,   SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(syncops_symlink),    SMB_VFS_OP_SYMLINK,  SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(syncops_link),       SMB_VFS_OP_LINK,     SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(syncops_mknod),      SMB_VFS_OP_MKNOD,    SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(syncops_close), 	 SMB_VFS_OP_CLOSE,    SMB_VFS_LAYER_TRANSPARENT},
-
-	{SMB_VFS_OP(NULL), SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP}
-};
-
-NTSTATUS vfs_syncops_init(void)
-{
-	NTSTATUS ret;
-
-	ret = smb_register_vfs(SMB_VFS_INTERFACE_VERSION, "syncops", syncops_ops);
-
-	if (!NT_STATUS_IS_OK(ret))
-		return ret;
-
-	sync_onclose = lp_parm_bool(-1, "syncops", "onclose", true);
-	
-	return ret;
-}

Modified: branches/samba/upstream/source/modules/vfs_tru64acl.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_tru64acl.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_tru64acl.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 /*
    Unix SMB/Netbios implementation.
    VFS module to get and set Tru64 acls
-   Copyright (C) Michael Adam 2006,2008
+   Copyright (C) Michael Adam 2006
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -22,7 +23,7 @@
 /* prototypes for private functions first - for clarity */
 
 static struct smb_acl_t *tru64_acl_to_smb_acl(const struct acl *tru64_acl);
-static bool tru64_ace_to_smb_ace(acl_entry_t tru64_ace, 
+static BOOL tru64_ace_to_smb_ace(acl_entry_t tru64_ace, 
 				struct smb_acl_entry *smb_ace);
 static acl_t smb_acl_to_tru64_acl(const SMB_ACL_T smb_acl);
 static acl_tag_t smb_tag_to_tru64(SMB_ACL_TAG_T smb_tag);
@@ -67,10 +68,11 @@
 }
 
 SMB_ACL_T tru64acl_sys_acl_get_fd(vfs_handle_struct *handle,
-				  files_struct *fsp)
+				  files_struct *fsp,
+				  int fd)
 {
 	struct smb_acl_t *result;
-	acl_t tru64_acl = acl_get_fd(fsp->fh->fd, ACL_TYPE_ACCESS);
+	acl_t tru64_acl = acl_get_fd(fd, ACL_TYPE_ACCESS);
 
 	if (tru64_acl == NULL) {
 		return NULL;
@@ -128,14 +130,14 @@
 
 int tru64acl_sys_acl_set_fd(vfs_handle_struct *handle,
 			    files_struct *fsp,
-			    SMB_ACL_T theacl)
+			    int fd, SMB_ACL_T theacl)
 {
         int res;
         acl_t tru64_acl = smb_acl_to_tru64_acl(theacl);
         if (tru64_acl == NULL) {
                 return -1;
         }
-        res =  acl_set_fd(fsp->fh->fd, ACL_TYPE_ACCESS, tru64_acl);
+        res =  acl_set_fd(fd, ACL_TYPE_ACCESS, tru64_acl);
         acl_free(tru64_acl);
         return res;
 
@@ -193,7 +195,7 @@
 	return NULL;
 }
 
-static bool tru64_ace_to_smb_ace(acl_entry_t tru64_ace, 
+static BOOL tru64_ace_to_smb_ace(acl_entry_t tru64_ace, 
 				struct smb_acl_entry *smb_ace) 
 {
 	acl_tag_t tru64_tag;

Deleted: branches/samba/upstream/source/modules/vfs_tsmsm.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_tsmsm.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_tsmsm.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,393 +0,0 @@
-/*
-  Unix SMB/CIFS implementation.
-  Samba VFS module for handling offline files
-  with Tivoli Storage Manager Space Management
-
-  (c) Alexander Bokovoy, 2007, 2008
-  (c) Andrew Tridgell, 2007, 2008
-  
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-/*
-  This VFS module accepts following options:
-  tsmsm: hsm script = <path to hsm script> (default does nothing)
-         hsm script should point to a shell script which accepts two arguments:
-	 <operation> <filepath>
-	 where <operation> is currently 'offline' to set offline status of the <filepath>
-
-  tsmsm: online ratio = ratio to check reported size against actual file size (0.5 by default)
-  tsmsm: attribute name = name of DMAPI attribute that is present when a file is offline. 
-  Default is "IBMobj" (which is what GPFS uses)
-
-  The TSMSM VFS module tries to avoid calling expensive DMAPI calls with some heuristics
-  based on the fact that number of blocks reported of a file multiplied by 512 will be
-  bigger than 'online ratio' of actual size for online (non-migrated) files.
-
-  If checks fail, we call DMAPI and ask for specific attribute which present for
-  offline (migrated) files. If this attribute presents, we consider file offline.
- */
-
-#include "includes.h"
-
-#ifndef USE_DMAPI
-#error "This module requires DMAPI support!"
-#endif
-
-#ifdef HAVE_XFS_DMAPI_H
-#include <xfs/dmapi.h>
-#elif defined(HAVE_SYS_DMI_H)
-#include <sys/dmi.h>
-#elif defined(HAVE_SYS_JFSDMAPI_H)
-#include <sys/jfsdmapi.h>
-#elif defined(HAVE_SYS_DMAPI_H)
-#include <sys/dmapi.h>
-#elif defined(HAVE_DMAPI_H)
-#include <dmapi.h>
-#endif
-
-#ifndef _ISOC99_SOURCE
-#define _ISOC99_SOURCE 
-#endif
-
-#include <math.h> 
-
-/* optimisation tunables - used to avoid the DMAPI slow path */
-#define FILE_IS_ONLINE_RATIO      0.5
-
-/* default attribute name to look for */
-#define DM_ATTRIB_OBJECT "IBMObj"
-
-struct tsmsm_struct {
-	float online_ratio;
-	char *hsmscript;
-	const char *attrib_name;
-	const char *attrib_value;
-};
-
-static void tsmsm_free_data(void **pptr) {
-	struct tsmsm_struct **tsmd = (struct tsmsm_struct **)pptr;
-	if(!tsmd) return;
-	TALLOC_FREE(*tsmd);
-}
-
-/* 
-   called when a client connects to a share
-*/
-static int tsmsm_connect(struct vfs_handle_struct *handle,
-			 const char *service,
-			 const char *user) {
-	struct tsmsm_struct *tsmd = TALLOC_ZERO_P(handle, struct tsmsm_struct);
-	const char *fres;
-	const char *tsmname;
-	
-	if (!tsmd) {
-		DEBUG(0,("tsmsm_connect: out of memory!\n"));
-		return -1;
-	}
-
-	if (!dmapi_have_session()) {
-		DEBUG(0,("tsmsm_connect: no DMAPI session for Samba is available!\n"));
-		TALLOC_FREE(tsmd);
-		return -1;
-	}
-
-	tsmname = (handle->param ? handle->param : "tsmsm");
-	
-	/* Get 'hsm script' and 'dmapi attribute' parameters to tsmd context */
-	tsmd->hsmscript = lp_parm_talloc_string(SNUM(handle->conn), tsmname,
-						"hsm script", NULL);
-	talloc_steal(tsmd, tsmd->hsmscript);
-	
-	tsmd->attrib_name = lp_parm_talloc_string(SNUM(handle->conn), tsmname, 
-						  "dmapi attribute", DM_ATTRIB_OBJECT);
-	talloc_steal(tsmd, tsmd->attrib_name);
-	
-	tsmd->attrib_value = lp_parm_talloc_string(SNUM(handle->conn), "tsmsm", 
-						   "dmapi value", NULL);
-	talloc_steal(tsmd, tsmd->attrib_value);
-	
-	/* retrieve 'online ratio'. In case of error default to FILE_IS_ONLINE_RATIO */
-	fres = lp_parm_const_string(SNUM(handle->conn), tsmname, 
-				    "online ratio", NULL);
-	if (fres == NULL) {
-		tsmd->online_ratio = FILE_IS_ONLINE_RATIO;
-	} else {
-		tsmd->online_ratio = strtof(fres, NULL);
-		if (tsmd->online_ratio > 1.0 ||
-		    tsmd->online_ratio <= 0.0) {
-			DEBUG(1, ("tsmsm_connect: invalid online ration %f - using %f.\n",
-				  tsmd->online_ratio, (float)FILE_IS_ONLINE_RATIO));
-		}
-	}
-
-        /* Store the private data. */
-        SMB_VFS_HANDLE_SET_DATA(handle, tsmd, tsmsm_free_data,
-                                struct tsmsm_struct, return -1);
-        return SMB_VFS_NEXT_CONNECT(handle, service, user); 
-}
-
-static bool tsmsm_is_offline(struct vfs_handle_struct *handle, 
-			    const char *path,
-			    SMB_STRUCT_STAT *stbuf) {
-	struct tsmsm_struct *tsmd = (struct tsmsm_struct *) handle->data;
-	const dm_sessid_t *dmsession_id;
-	void *dmhandle = NULL;
-	size_t dmhandle_len = 0;
-	size_t rlen;
-	dm_attrname_t dmname;
-	int ret, lerrno;
-	bool offline;
-	char *buf;
-	size_t buflen;
-
-        /* if the file has more than FILE_IS_ONLINE_RATIO of blocks available,
-	   then assume it is not offline (it may not be 100%, as it could be sparse) */
-	if (512 * (off_t)stbuf->st_blocks >= stbuf->st_size * tsmd->online_ratio) {
-		DEBUG(10,("%s not offline: st_blocks=%ld st_size=%ld "
-			  "online_ratio=%.2f\n", path, (long)stbuf->st_blocks,
-			  (long)stbuf->st_size, tsmd->online_ratio));
-		return false;
-	}
-
-	dmsession_id = dmapi_get_current_session();
-	if (dmsession_id == NULL) {
-		DEBUG(2, ("tsmsm_is_offline: no DMAPI session available? "
-			  "Assume file is online.\n"));
-		return false;
-	}
-
-        /* using POSIX capabilities does not work here. It's a slow path, so 
-	 * become_root() is just as good anyway (tridge) 
-	 */
-
-	/* Also, AIX has DMAPI but no POSIX capablities support. In this case,
-	 * we need to be root to do DMAPI manipulations.
-	 */
-	become_root();
-
-	/* go the slow DMAPI route */
-	if (dm_path_to_handle((char*)path, &dmhandle, &dmhandle_len) != 0) {
-		DEBUG(2,("dm_path_to_handle failed - assuming offline (%s) - %s\n", 
-			 path, strerror(errno)));
-		offline = true;
-		goto done;
-	}
-
-	memset(&dmname, 0, sizeof(dmname));
-	strlcpy((char *)&dmname.an_chars[0], tsmd->attrib_name, sizeof(dmname.an_chars));
-
-	if (tsmd->attrib_value != NULL) {
-		buflen = strlen(tsmd->attrib_value);
-	} else {
-		buflen = 1;
-	}
-	buf = talloc_zero_size(tsmd, buflen);
-	if (buf == NULL) {
-		DEBUG(0,("out of memory in tsmsm_is_offline -- assuming online (%s)\n", path));
-		errno = ENOMEM;
-		offline = false;
-		goto done;
-	}
-
-	lerrno = 0;
-
-	do {
-		ret = dm_get_dmattr(*dmsession_id, dmhandle, dmhandle_len, 
-				    DM_NO_TOKEN, &dmname, buflen, buf, &rlen);
-		if (ret == -1 && errno == EINVAL) {
-			DEBUG(0, ("Stale DMAPI session, re-creating it.\n"));
-			lerrno = EINVAL;
-			if (dmapi_new_session()) {
-				dmsession_id = dmapi_get_current_session();
-			} else {
-				DEBUG(0, 
-				      ("Unable to re-create DMAPI session, assuming offline (%s) - %s\n", 
-				       path, strerror(errno)));
-				offline = true;
-				dm_handle_free(dmhandle, dmhandle_len);
-				goto done;
-			}
-		}
-	} while (ret == -1 && lerrno == EINVAL);
-
-	/* check if we need a specific attribute value */
-	if (tsmd->attrib_value != NULL) {
-		offline = (ret == 0 && rlen == buflen && 
-			    memcmp(buf, tsmd->attrib_value, buflen) == 0);
-	} else {
-		/* its offline if the specified DMAPI attribute exists */
-		offline = (ret == 0 || (ret == -1 && errno == E2BIG));
-	}
-
-	DEBUG(10,("dm_get_dmattr %s ret=%d (%s)\n", path, ret, strerror(errno)));
-
-	ret = 0;
-
-	dm_handle_free(dmhandle, dmhandle_len);	
-
-done:
-	talloc_free(buf);
-	unbecome_root();
-	return offline;
-}
-
-
-static bool tsmsm_aio_force(struct vfs_handle_struct *handle, struct files_struct *fsp)
-{
-	SMB_STRUCT_STAT sbuf;
-	struct tsmsm_struct *tsmd = (struct tsmsm_struct *) handle->data;
-	/* see if the file might be offline. This is called before each IO
-	   to ensure we use AIO if the file is offline. We don't do the full dmapi
-	   call as that would be too slow, instead we err on the side of using AIO
-	   if the file might be offline
-	*/
-	if(SMB_VFS_FSTAT(fsp, &sbuf) == 0) {
-		DEBUG(10,("tsmsm_aio_force st_blocks=%ld st_size=%ld "
-			  "online_ratio=%.2f\n", (long)sbuf.st_blocks,
-			  (long)sbuf.st_size, tsmd->online_ratio));
-		return !(512 * (off_t)sbuf.st_blocks >= sbuf.st_size * tsmd->online_ratio);
-	}
-	return false;
-}
-
-static ssize_t tsmsm_aio_return(struct vfs_handle_struct *handle, struct files_struct *fsp, 
-				SMB_STRUCT_AIOCB *aiocb)
-{
-	ssize_t result;
-
-	result = SMB_VFS_NEXT_AIO_RETURN(handle, fsp, aiocb);
-	if(result >= 0) {
-		notify_fname(handle->conn, NOTIFY_ACTION_MODIFIED,
-			     FILE_NOTIFY_CHANGE_ATTRIBUTES,
-			     fsp->fsp_name);
-	}
-
-	return result;
-}
-
-static ssize_t tsmsm_sendfile(vfs_handle_struct *handle, int tofd, files_struct *fsp, const DATA_BLOB *hdr,
-			      SMB_OFF_T offset, size_t n)
-{
-	bool file_online = tsmsm_aio_force(handle, fsp);
-
-	if(!file_online) 
-	    return ENOSYS;
-	    
-	return SMB_VFS_NEXT_SENDFILE(handle, tofd, fsp, hdr, offset, n);
-}
-
-/* We do overload pread to allow notification when file becomes online after offline status */
-/* We don't intercept SMB_VFS_READ here because all file I/O now goes through SMB_VFS_PREAD instead */
-static ssize_t tsmsm_pread(struct vfs_handle_struct *handle, struct files_struct *fsp, 
-			   void *data, size_t n, SMB_OFF_T offset) {
-	ssize_t result;
-	bool notify_online = tsmsm_aio_force(handle, fsp);
-
-	result = SMB_VFS_NEXT_PREAD(handle, fsp, data, n, offset);
-	if((result != -1) && notify_online) {
-	    /* We can't actually force AIO at this point (came here not from reply_read_and_X) 
-	       what we can do is to send notification that file became online
-	    */
-		notify_fname(handle->conn, NOTIFY_ACTION_MODIFIED,
-			     FILE_NOTIFY_CHANGE_ATTRIBUTES,
-			     fsp->fsp_name);
-	}
-
-	return result;
-}
-
-static ssize_t tsmsm_pwrite(struct vfs_handle_struct *handle, struct files_struct *fsp, 
-			   void *data, size_t n, SMB_OFF_T offset) {
-	ssize_t result;
-	bool notify_online = tsmsm_aio_force(handle, fsp);
-
-	result = SMB_VFS_NEXT_PWRITE(handle, fsp, data, n, offset);
-	if((result != -1) && notify_online) {
-	    /* We can't actually force AIO at this point (came here not from reply_read_and_X) 
-	       what we can do is to send notification that file became online
-	    */
-		notify_fname(handle->conn, NOTIFY_ACTION_MODIFIED,
-			     FILE_NOTIFY_CHANGE_ATTRIBUTES,
-			     fsp->fsp_name);
-	}
-
-	return result;
-}
-
-static int tsmsm_set_offline(struct vfs_handle_struct *handle, 
-			     const char *path) {
-	struct tsmsm_struct *tsmd = (struct tsmsm_struct *) handle->data;
-	int result = 0;
-	char *command;
-
-	if (tsmd->hsmscript == NULL) {
-		/* no script enabled */
-		DEBUG(1, ("tsmsm_set_offline: No tsmsm:hsmscript configured\n"));
-		return 0;
-	}
-
-	/* Now, call the script */
-	command = talloc_asprintf(tsmd, "%s offline \"%s\"", tsmd->hsmscript, path);
-	if(!command) {
-		DEBUG(1, ("tsmsm_set_offline: can't allocate memory to run hsm script"));
-		return -1;
-	}
-	DEBUG(10, ("tsmsm_set_offline: Running [%s]\n", command));
-	if((result = smbrun(command, NULL)) != 0) {
-		DEBUG(1,("tsmsm_set_offline: Running [%s] returned %d\n", command, result));
-	}
-	TALLOC_FREE(command);
-	return result;
-}
-
-static uint32_t tsmsm_fs_capabilities(struct vfs_handle_struct *handle)
-{
-	return SMB_VFS_NEXT_FS_CAPABILITIES(handle) | FILE_SUPPORTS_REMOTE_STORAGE | FILE_SUPPORTS_REPARSE_POINTS;
-}
-
-static vfs_op_tuple vfs_tsmsm_ops[] = {
-
-	/* Disk operations */
-
-	{SMB_VFS_OP(tsmsm_connect),	SMB_VFS_OP_CONNECT,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(tsmsm_fs_capabilities),	SMB_VFS_OP_FS_CAPABILITIES,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(tsmsm_aio_force),	SMB_VFS_OP_AIO_FORCE,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(tsmsm_aio_return),	SMB_VFS_OP_AIO_RETURN,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(tsmsm_pread),	SMB_VFS_OP_PREAD,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(tsmsm_pwrite),	SMB_VFS_OP_PWRITE,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(tsmsm_sendfile),	SMB_VFS_OP_SENDFILE,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(tsmsm_is_offline),	SMB_VFS_OP_IS_OFFLINE,
-	 SMB_VFS_LAYER_OPAQUE},
-	{SMB_VFS_OP(tsmsm_set_offline),	SMB_VFS_OP_SET_OFFLINE,
-	 SMB_VFS_LAYER_OPAQUE},
-
-	/* Finish VFS operations definition */
-
-	{SMB_VFS_OP(NULL),		SMB_VFS_OP_NOOP,
-	 SMB_VFS_LAYER_NOOP}
-};
-
-NTSTATUS vfs_tsmsm_init(void);
-NTSTATUS vfs_tsmsm_init(void)
-{
-	return smb_register_vfs(SMB_VFS_INTERFACE_VERSION,
-				"tsmsm", vfs_tsmsm_ops);
-}

Deleted: branches/samba/upstream/source/modules/vfs_xattr_tdb.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_xattr_tdb.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_xattr_tdb.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,759 +0,0 @@
-/*
- * Store posix-level xattrs in a tdb
- *
- * Copyright (C) Volker Lendecke, 2007
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "includes.h"
-#include "librpc/gen_ndr/xattr.h"
-#include "librpc/gen_ndr/ndr_xattr.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_VFS
-
-/*
- * unmarshall tdb_xattrs
- */
-
-static NTSTATUS xattr_tdb_pull_attrs(TALLOC_CTX *mem_ctx,
-				     const TDB_DATA *data,
-				     struct tdb_xattrs **presult)
-{
-	DATA_BLOB blob;
-	enum ndr_err_code ndr_err;
-	struct tdb_xattrs *result;
-
-	if (!(result = TALLOC_ZERO_P(mem_ctx, struct tdb_xattrs))) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	if (data->dsize == 0) {
-		*presult = result;
-		return NT_STATUS_OK;
-	}
-
-	blob = data_blob_const(data->dptr, data->dsize);
-
-	ndr_err = ndr_pull_struct_blob(
-		&blob, result, result,
-		(ndr_pull_flags_fn_t)ndr_pull_tdb_xattrs);
-
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		DEBUG(0, ("ndr_pull_tdb_xattrs failed: %s\n",
-			  ndr_errstr(ndr_err)));
-		TALLOC_FREE(result);
-		return ndr_map_error2ntstatus(ndr_err);;
-	}
-
-	*presult = result;
-	return NT_STATUS_OK;
-}
-
-/*
- * marshall tdb_xattrs
- */
-
-static NTSTATUS xattr_tdb_push_attrs(TALLOC_CTX *mem_ctx,
-				     const struct tdb_xattrs *attribs,
-				     TDB_DATA *data)
-{
-	DATA_BLOB blob;
-	enum ndr_err_code ndr_err;
-
-	ndr_err = ndr_push_struct_blob(
-		&blob, mem_ctx, attribs,
-		(ndr_push_flags_fn_t)ndr_push_tdb_xattrs);
-
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		DEBUG(0, ("ndr_push_tdb_xattrs failed: %s\n",
-			  ndr_errstr(ndr_err)));
-		return ndr_map_error2ntstatus(ndr_err);;
-	}
-
-	*data = make_tdb_data(blob.data, blob.length);
-	return NT_STATUS_OK;
-}
-
-/*
- * Load tdb_xattrs for a file from the tdb
- */
-
-static NTSTATUS xattr_tdb_load_attrs(TALLOC_CTX *mem_ctx,
-				     struct db_context *db_ctx,
-				     const struct file_id *id,
-				     struct tdb_xattrs **presult)
-{
-	uint8 id_buf[16];
-	NTSTATUS status;
-	TDB_DATA data;
-
-	push_file_id_16((char *)id_buf, id);
-
-	if (db_ctx->fetch(db_ctx, mem_ctx,
-			  make_tdb_data(id_buf, sizeof(id_buf)),
-			  &data) == -1) {
-		return NT_STATUS_INTERNAL_DB_CORRUPTION;
-	}
-
-	status = xattr_tdb_pull_attrs(mem_ctx, &data, presult);
-	TALLOC_FREE(data.dptr);
-	return status;
-}
-
-/*
- * fetch_lock the tdb_ea record for a file
- */
-
-static struct db_record *xattr_tdb_lock_attrs(TALLOC_CTX *mem_ctx,
-					      struct db_context *db_ctx,
-					      const struct file_id *id)
-{
-	uint8 id_buf[16];
-	push_file_id_16((char *)id_buf, id);
-	return db_ctx->fetch_locked(db_ctx, mem_ctx,
-				    make_tdb_data(id_buf, sizeof(id_buf)));
-}
-
-/*
- * Save tdb_xattrs to a previously fetch_locked record
- */
-
-static NTSTATUS xattr_tdb_save_attrs(struct db_record *rec,
-				     const struct tdb_xattrs *attribs)
-{
-	TDB_DATA data = tdb_null;
-	NTSTATUS status;
-
-	status = xattr_tdb_push_attrs(talloc_tos(), attribs, &data);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0, ("xattr_tdb_push_attrs failed: %s\n",
-			  nt_errstr(status)));
-		return status;
-	}
-
-	status = rec->store(rec, data, 0);
-
-	TALLOC_FREE(data.dptr);
-
-	return status;
-}
-
-/*
- * Worker routine for getxattr and fgetxattr
- */
-
-static ssize_t xattr_tdb_getattr(struct db_context *db_ctx,
-				 const struct file_id *id,
-				 const char *name, void *value, size_t size)
-{
-	struct tdb_xattrs *attribs;
-	uint32_t i;
-	ssize_t result = -1;
-	NTSTATUS status;
-
-	DEBUG(10, ("xattr_tdb_getattr called for file %s, name %s\n",
-		   file_id_string_tos(id), name));
-
-	status = xattr_tdb_load_attrs(talloc_tos(), db_ctx, id, &attribs);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10, ("xattr_tdb_fetch_attrs failed: %s\n",
-			   nt_errstr(status)));
-		errno = EINVAL;
-		return -1;
-	}
-
-	for (i=0; i<attribs->num_xattrs; i++) {
-		if (strcmp(attribs->xattrs[i].name, name) == 0) {
-			break;
-		}
-	}
-
-	if (i == attribs->num_xattrs) {
-		errno = ENOATTR;
-		goto fail;
-	}
-
-	if (attribs->xattrs[i].value.length > size) {
-		errno = ERANGE;
-		goto fail;
-	}
-
-	memcpy(value, attribs->xattrs[i].value.data,
-	       attribs->xattrs[i].value.length);
-	result = attribs->xattrs[i].value.length;
-
- fail:
-	TALLOC_FREE(attribs);
-	return result;
-}
-
-static ssize_t xattr_tdb_getxattr(struct vfs_handle_struct *handle,
-				  const char *path, const char *name,
-				  void *value, size_t size)
-{
-	SMB_STRUCT_STAT sbuf;
-	struct file_id id;
-	struct db_context *db;
-
-	SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context, return -1);
-
-	if (SMB_VFS_STAT(handle->conn, path, &sbuf) == -1) {
-		return -1;
-	}
-
-	id = SMB_VFS_FILE_ID_CREATE(handle->conn, sbuf.st_dev, sbuf.st_ino);
-
-	return xattr_tdb_getattr(db, &id, name, value, size);
-}
-
-static ssize_t xattr_tdb_fgetxattr(struct vfs_handle_struct *handle,
-				   struct files_struct *fsp,
-				   const char *name, void *value, size_t size)
-{
-	SMB_STRUCT_STAT sbuf;
-	struct file_id id;
-	struct db_context *db;
-
-	SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context, return -1);
-
-	if (SMB_VFS_FSTAT(fsp, &sbuf) == -1) {
-		return -1;
-	}
-
-	id = SMB_VFS_FILE_ID_CREATE(handle->conn, sbuf.st_dev, sbuf.st_ino);
-
-	return xattr_tdb_getattr(db, &id, name, value, size);
-}
-
-/*
- * Worker routine for setxattr and fsetxattr
- */
-
-static int xattr_tdb_setattr(struct db_context *db_ctx,
-			     const struct file_id *id, const char *name,
-			     const void *value, size_t size, int flags)
-{
-	NTSTATUS status;
-	struct db_record *rec;
-	struct tdb_xattrs *attribs;
-	uint32_t i;
-
-	DEBUG(10, ("xattr_tdb_setattr called for file %s, name %s\n",
-		   file_id_string_tos(id), name));
-
-	rec = xattr_tdb_lock_attrs(talloc_tos(), db_ctx, id);
-
-	if (rec == NULL) {
-		DEBUG(0, ("xattr_tdb_lock_attrs failed\n"));
-		errno = EINVAL;
-		return -1;
-	}
-
-	status = xattr_tdb_pull_attrs(rec, &rec->value, &attribs);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10, ("xattr_tdb_fetch_attrs failed: %s\n",
-			   nt_errstr(status)));
-		TALLOC_FREE(rec);
-		return -1;
-	}
-
-	for (i=0; i<attribs->num_xattrs; i++) {
-		if (strcmp(attribs->xattrs[i].name, name) == 0) {
-			if (flags & XATTR_CREATE) {
-				TALLOC_FREE(rec);
-				errno = EEXIST;
-				return -1;
-			}
-			break;
-		}
-	}
-
-	if (i == attribs->num_xattrs) {
-		struct tdb_xattr *tmp;
-
-		if (flags & XATTR_REPLACE) {
-			TALLOC_FREE(rec);
-			errno = ENOATTR;
-			return -1;
-		}
-
-		tmp = TALLOC_REALLOC_ARRAY(
-			attribs, attribs->xattrs, struct tdb_xattr,
-			attribs->num_xattrs + 1);
-
-		if (tmp == NULL) {
-			DEBUG(0, ("TALLOC_REALLOC_ARRAY failed\n"));
-			TALLOC_FREE(rec);
-			errno = ENOMEM;
-			return -1;
-		}
-
-		attribs->xattrs = tmp;
-		attribs->num_xattrs += 1;
-	}
-
-	attribs->xattrs[i].name = name;
-	attribs->xattrs[i].value.data = CONST_DISCARD(uint8 *, value);
-	attribs->xattrs[i].value.length = size;
-
-	status = xattr_tdb_save_attrs(rec, attribs);
-
-	TALLOC_FREE(rec);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(1, ("save failed: %s\n", nt_errstr(status)));
-		return -1;
-	}
-
-	return 0;
-}
-
-static int xattr_tdb_setxattr(struct vfs_handle_struct *handle,
-			      const char *path, const char *name,
-			      const void *value, size_t size, int flags)
-{
-	SMB_STRUCT_STAT sbuf;
-	struct file_id id;
-	struct db_context *db;
-
-	SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context, return -1);
-
-	if (SMB_VFS_STAT(handle->conn, path, &sbuf) == -1) {
-		return -1;
-	}
-
-	id = SMB_VFS_FILE_ID_CREATE(handle->conn, sbuf.st_dev, sbuf.st_ino);
-
-	return xattr_tdb_setattr(db, &id, name, value, size, flags);
-}
-
-static int xattr_tdb_fsetxattr(struct vfs_handle_struct *handle,
-			       struct files_struct *fsp,
-			       const char *name, const void *value,
-			       size_t size, int flags)
-{
-	SMB_STRUCT_STAT sbuf;
-	struct file_id id;
-	struct db_context *db;
-
-	SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context, return -1);
-
-	if (SMB_VFS_FSTAT(fsp, &sbuf) == -1) {
-		return -1;
-	}
-
-	id = SMB_VFS_FILE_ID_CREATE(handle->conn, sbuf.st_dev, sbuf.st_ino);
-
-	return xattr_tdb_setattr(db, &id, name, value, size, flags);
-}
-
-/*
- * Worker routine for listxattr and flistxattr
- */
-
-static ssize_t xattr_tdb_listattr(struct db_context *db_ctx,
-				  const struct file_id *id, char *list,
-				  size_t size)
-{
-	NTSTATUS status;
-	struct tdb_xattrs *attribs;
-	uint32_t i;
-	size_t len = 0;
-
-	status = xattr_tdb_load_attrs(talloc_tos(), db_ctx, id, &attribs);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10, ("xattr_tdb_fetch_attrs failed: %s\n",
-			   nt_errstr(status)));
-		errno = EINVAL;
-		return -1;
-	}
-
-	DEBUG(10, ("xattr_tdb_listattr: Found %d xattrs\n",
-		   attribs->num_xattrs));
-
-	for (i=0; i<attribs->num_xattrs; i++) {
-		size_t tmp;
-
-		DEBUG(10, ("xattr_tdb_listattr: xattrs[i].name: %s\n",
-			   attribs->xattrs[i].name));
-
-		tmp = strlen(attribs->xattrs[i].name);
-
-		/*
-		 * Try to protect against overflow
-		 */
-
-		if (len + (tmp+1) < len) {
-			TALLOC_FREE(attribs);
-			errno = EINVAL;
-			return -1;
-		}
-
-		/*
-		 * Take care of the terminating NULL
-		 */
-		len += (tmp + 1);
-	}
-
-	if (len > size) {
-		TALLOC_FREE(attribs);
-		errno = ERANGE;
-		return -1;
-	}
-
-	len = 0;
-
-	for (i=0; i<attribs->num_xattrs; i++) {
-		strlcpy(list+len, attribs->xattrs[i].name,
-			size-len);
-		len += (strlen(attribs->xattrs[i].name) + 1);
-	}
-
-	TALLOC_FREE(attribs);
-	return len;
-}
-
-static ssize_t xattr_tdb_listxattr(struct vfs_handle_struct *handle,
-				   const char *path, char *list, size_t size)
-{
-	SMB_STRUCT_STAT sbuf;
-	struct file_id id;
-	struct db_context *db;
-
-	SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context, return -1);
-
-	if (SMB_VFS_STAT(handle->conn, path, &sbuf) == -1) {
-		return -1;
-	}
-
-	id = SMB_VFS_FILE_ID_CREATE(handle->conn, sbuf.st_dev, sbuf.st_ino);
-
-	return xattr_tdb_listattr(db, &id, list, size);
-}
-
-static ssize_t xattr_tdb_flistxattr(struct vfs_handle_struct *handle,
-				    struct files_struct *fsp, char *list,
-				    size_t size)
-{
-	SMB_STRUCT_STAT sbuf;
-	struct file_id id;
-	struct db_context *db;
-
-	SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context, return -1);
-
-	if (SMB_VFS_FSTAT(fsp, &sbuf) == -1) {
-		return -1;
-	}
-
-	id = SMB_VFS_FILE_ID_CREATE(handle->conn, sbuf.st_dev, sbuf.st_ino);
-
-	return xattr_tdb_listattr(db, &id, list, size);
-}
-
-/*
- * Worker routine for removexattr and fremovexattr
- */
-
-static int xattr_tdb_removeattr(struct db_context *db_ctx,
-				const struct file_id *id, const char *name)
-{
-	NTSTATUS status;
-	struct db_record *rec;
-	struct tdb_xattrs *attribs;
-	uint32_t i;
-
-	rec = xattr_tdb_lock_attrs(talloc_tos(), db_ctx, id);
-
-	if (rec == NULL) {
-		DEBUG(0, ("xattr_tdb_lock_attrs failed\n"));
-		errno = EINVAL;
-		return -1;
-	}
-
-	status = xattr_tdb_pull_attrs(rec, &rec->value, &attribs);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10, ("xattr_tdb_fetch_attrs failed: %s\n",
-			   nt_errstr(status)));
-		TALLOC_FREE(rec);
-		return -1;
-	}
-
-	for (i=0; i<attribs->num_xattrs; i++) {
-		if (strcmp(attribs->xattrs[i].name, name) == 0) {
-			break;
-		}
-	}
-
-	if (i == attribs->num_xattrs) {
-		TALLOC_FREE(rec);
-		errno = ENOATTR;
-		return -1;
-	}
-
-	attribs->xattrs[i] =
-		attribs->xattrs[attribs->num_xattrs-1];
-	attribs->num_xattrs -= 1;
-
-	if (attribs->num_xattrs == 0) {
-		rec->delete_rec(rec);
-		TALLOC_FREE(rec);
-		return 0;
-	}
-
-	status = xattr_tdb_save_attrs(rec, attribs);
-
-	TALLOC_FREE(rec);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(1, ("save failed: %s\n", nt_errstr(status)));
-		return -1;
-	}
-
-	return 0;
-}
-
-static int xattr_tdb_removexattr(struct vfs_handle_struct *handle,
-				 const char *path, const char *name)
-{
-	SMB_STRUCT_STAT sbuf;
-	struct file_id id;
-	struct db_context *db;
-
-	SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context, return -1);
-
-	if (SMB_VFS_STAT(handle->conn, path, &sbuf) == -1) {
-		return -1;
-	}
-
-	id = SMB_VFS_FILE_ID_CREATE(handle->conn, sbuf.st_dev, sbuf.st_ino);
-
-	return xattr_tdb_removeattr(db, &id, name);
-}
-
-static int xattr_tdb_fremovexattr(struct vfs_handle_struct *handle,
-				  struct files_struct *fsp, const char *name)
-{
-	SMB_STRUCT_STAT sbuf;
-	struct file_id id;
-	struct db_context *db;
-
-	SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context, return -1);
-
-	if (SMB_VFS_FSTAT(fsp, &sbuf) == -1) {
-		return -1;
-	}
-
-	id = SMB_VFS_FILE_ID_CREATE(handle->conn, sbuf.st_dev, sbuf.st_ino);
-
-	return xattr_tdb_removeattr(db, &id, name);
-}
-
-/*
- * Open the tdb file upon VFS_CONNECT
- */
-
-static bool xattr_tdb_init(int snum, struct db_context **p_db)
-{
-	struct db_context *db;
-	const char *dbname;
-
-	dbname = lp_parm_const_string(snum, "xattr_tdb", "file",
-				      lock_path("xattr.tdb"));
-
-	if (dbname == NULL) {
-		errno = ENOSYS;
-		return false;
-	}
-
-	become_root();
-	db = db_open(NULL, dbname, 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
-	unbecome_root();
-
-	if (db == NULL) {
-#if defined(ENOTSUP)
-		errno = ENOTSUP;
-#else
-		errno = ENOSYS;
-#endif
-		return false;
-	}
-
-	*p_db = db;
-	return true;
-}
-
-/*
- * On unlink we need to delete the tdb record
- */
-static int xattr_tdb_unlink(vfs_handle_struct *handle, const char *path)
-{
-	SMB_STRUCT_STAT sbuf;
-	struct file_id id;
-	struct db_context *db;
-	struct db_record *rec;
-	int ret;
-
-	SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context, return -1);
-
-	if (SMB_VFS_STAT(handle->conn, path, &sbuf) == -1) {
-		return -1;
-	}
-
-	ret = SMB_VFS_NEXT_UNLINK(handle, path);
-
-	if (ret == -1) {
-		return -1;
-	}
-
-	id = SMB_VFS_FILE_ID_CREATE(handle->conn, sbuf.st_dev, sbuf.st_ino);
-
-	rec = xattr_tdb_lock_attrs(talloc_tos(), db, &id);
-
-	/*
-	 * If rec == NULL there's not much we can do about it
-	 */
-
-	if (rec != NULL) {
-		rec->delete_rec(rec);
-		TALLOC_FREE(rec);
-	}
-
-	return 0;
-}
-
-/*
- * On rmdir we need to delete the tdb record
- */
-static int xattr_tdb_rmdir(vfs_handle_struct *handle, const char *path)
-{
-	SMB_STRUCT_STAT sbuf;
-	struct file_id id;
-	struct db_context *db;
-	struct db_record *rec;
-	int ret;
-
-	SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context, return -1);
-
-	if (SMB_VFS_STAT(handle->conn, path, &sbuf) == -1) {
-		return -1;
-	}
-
-	ret = SMB_VFS_NEXT_RMDIR(handle, path);
-
-	if (ret == -1) {
-		return -1;
-	}
-
-	id = SMB_VFS_FILE_ID_CREATE(handle->conn, sbuf.st_dev, sbuf.st_ino);
-
-	rec = xattr_tdb_lock_attrs(talloc_tos(), db, &id);
-
-	/*
-	 * If rec == NULL there's not much we can do about it
-	 */
-
-	if (rec != NULL) {
-		rec->delete_rec(rec);
-		TALLOC_FREE(rec);
-	}
-
-	return 0;
-}
-
-/*
- * Destructor for the VFS private data
- */
-
-static void close_xattr_db(void **data)
-{
-	struct db_context **p_db = (struct db_context **)data;
-	TALLOC_FREE(*p_db);
-}
-
-static int xattr_tdb_connect(vfs_handle_struct *handle, const char *service,
-			  const char *user)
-{
-	fstring sname;
-	int res, snum;
-	struct db_context *db;
-
-	res = SMB_VFS_NEXT_CONNECT(handle, service, user);
-	if (res < 0) {
-		return res;
-	}
-
-	fstrcpy(sname, service);
-	snum = find_service(sname);
-	if (snum == -1) {
-		/*
-		 * Should not happen, but we should not fail just *here*.
-		 */
-		return 0;
-	}
-
-	if (!xattr_tdb_init(snum, &db)) {
-		DEBUG(5, ("Could not init xattr tdb\n"));
-		lp_do_parameter(snum, "ea support", "False");
-		return 0;
-	}
-
-	lp_do_parameter(snum, "ea support", "True");
-
-	SMB_VFS_HANDLE_SET_DATA(handle, db, close_xattr_db,
-				struct db_context, return -1);
-
-	return 0;
-}
-
-/* VFS operations structure */
-
-static const vfs_op_tuple xattr_tdb_ops[] = {
-	{SMB_VFS_OP(xattr_tdb_getxattr), SMB_VFS_OP_GETXATTR,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(xattr_tdb_fgetxattr), SMB_VFS_OP_FGETXATTR,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(xattr_tdb_setxattr), SMB_VFS_OP_SETXATTR,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(xattr_tdb_fsetxattr), SMB_VFS_OP_FSETXATTR,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(xattr_tdb_listxattr), SMB_VFS_OP_LISTXATTR,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(xattr_tdb_flistxattr), SMB_VFS_OP_FLISTXATTR,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(xattr_tdb_removexattr), SMB_VFS_OP_REMOVEXATTR,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(xattr_tdb_fremovexattr), SMB_VFS_OP_FREMOVEXATTR,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(xattr_tdb_unlink), SMB_VFS_OP_UNLINK,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(xattr_tdb_rmdir), SMB_VFS_OP_RMDIR,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(xattr_tdb_connect), SMB_VFS_OP_CONNECT,
-	 SMB_VFS_LAYER_TRANSPARENT},
-	{SMB_VFS_OP(NULL), SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP}
-};
-
-NTSTATUS vfs_xattr_tdb_init(void);
-NTSTATUS vfs_xattr_tdb_init(void)
-{
-	return smb_register_vfs(SMB_VFS_INTERFACE_VERSION, "xattr_tdb",
-				xattr_tdb_ops);
-}

Deleted: branches/samba/upstream/source/modules/vfs_zfsacl.c
===================================================================
--- branches/samba/upstream/source/modules/vfs_zfsacl.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/vfs_zfsacl.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,257 +0,0 @@
-/*
- * Convert ZFS/NFSv4 acls to NT acls and vice versa.
- *
- * Copyright (C) Jiri Sasek, 2007
- * based on the foobar.c module which is copyrighted by Volker Lendecke
- *
- * Many thanks to Axel Apitz for help to fix the special ace's handling
- * issues.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "includes.h"
-#include "nfs4_acls.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_VFS
-
-#define ZFSACL_MODULE_NAME "zfsacl"
-
-/* zfs_get_nt_acl()
- * read the local file's acls and return it in NT form
- * using the NFSv4 format conversion
- */
-static NTSTATUS zfs_get_nt_acl_common(const char *name,
-				      uint32 security_info,
-				      SMB4ACL_T **ppacl)
-{
-	int naces, i;
-	ace_t *acebuf;
-	SMB4ACL_T *pacl;
-	TALLOC_CTX	*mem_ctx;
-
-	/* read the number of file aces */
-	if((naces = acl(name, ACE_GETACLCNT, 0, NULL)) == -1) {
-		if(errno == ENOSYS) {
-			DEBUG(9, ("acl(ACE_GETACLCNT, %s): Operation is not "
-				  "supported on the filesystem where the file "
-				  "reside", name));
-		} else {
-			DEBUG(9, ("acl(ACE_GETACLCNT, %s): %s ", name,
-					strerror(errno)));
-		}
-		return map_nt_error_from_unix(errno);
-	}
-	/* allocate the field of ZFS aces */
-	mem_ctx = talloc_tos();
-	acebuf = (ace_t *) talloc_size(mem_ctx, sizeof(ace_t)*naces);
-	if(acebuf == NULL) {
-		return NT_STATUS_NO_MEMORY;
-	}
-	/* read the aces into the field */
-	if(acl(name, ACE_GETACL, naces, acebuf) < 0) {
-		DEBUG(9, ("acl(ACE_GETACL, %s): %s ", name,
-				strerror(errno)));
-		return map_nt_error_from_unix(errno);
-	}
-	/* create SMB4ACL data */
-	if((pacl = smb_create_smb4acl()) == NULL) {
-		return NT_STATUS_NO_MEMORY;
-	}
-	for(i=0; i<naces; i++) {
-		SMB_ACE4PROP_T aceprop;
-
-		aceprop.aceType  = (uint32) acebuf[i].a_type;
-		aceprop.aceFlags = (uint32) acebuf[i].a_flags;
-		aceprop.aceMask  = (uint32) acebuf[i].a_access_mask;
-		aceprop.who.id   = (uint32) acebuf[i].a_who;
-
-		if(aceprop.aceFlags & ACE_OWNER) {
-			aceprop.flags = SMB_ACE4_ID_SPECIAL;
-			aceprop.who.special_id = SMB_ACE4_WHO_OWNER;
-		} else if(aceprop.aceFlags & ACE_GROUP) {
-			aceprop.flags = SMB_ACE4_ID_SPECIAL;
-			aceprop.who.special_id = SMB_ACE4_WHO_GROUP;
-		} else if(aceprop.aceFlags & ACE_EVERYONE) {
-			aceprop.flags = SMB_ACE4_ID_SPECIAL;
-			aceprop.who.special_id = SMB_ACE4_WHO_EVERYONE;
-		} else {
-			aceprop.flags	= 0;
-		}
-		if(smb_add_ace4(pacl, &aceprop) == NULL)
-			return NT_STATUS_NO_MEMORY;
-	}
-
-	*ppacl = pacl;
-	return NT_STATUS_OK;
-}
-
-/* call-back function processing the NT acl -> ZFS acl using NFSv4 conv. */
-static bool zfs_process_smbacl(files_struct *fsp, SMB4ACL_T *smbacl)
-{
-	int naces = smb_get_naces(smbacl), i;
-	ace_t *acebuf;
-	SMB4ACE_T *smbace;
-	TALLOC_CTX	*mem_ctx;
-
-	/* allocate the field of ZFS aces */
-	mem_ctx = talloc_tos();
-	acebuf = (ace_t *) talloc_size(mem_ctx, sizeof(ace_t)*naces);
-	if(acebuf == NULL) {
-		errno = ENOMEM;
-		return False;
-	}
-	/* handle all aces */
-	for(smbace = smb_first_ace4(smbacl), i = 0;
-			smbace!=NULL;
-			smbace = smb_next_ace4(smbace), i++) {
-		SMB_ACE4PROP_T *aceprop = smb_get_ace4(smbace);
-
-		acebuf[i].a_type        = aceprop->aceType;
-		acebuf[i].a_flags       = aceprop->aceFlags;
-		acebuf[i].a_access_mask = aceprop->aceMask;
-		acebuf[i].a_who         = aceprop->who.id;
-		if(aceprop->flags & SMB_ACE4_ID_SPECIAL) {
-			switch(aceprop->who.special_id) {
-			case SMB_ACE4_WHO_EVERYONE:
-				acebuf[i].a_flags |= ACE_EVERYONE;
-				break;
-			case SMB_ACE4_WHO_OWNER:
-				acebuf[i].a_flags |= ACE_OWNER;
-				break;
-			case SMB_ACE4_WHO_GROUP:
-				acebuf[i].a_flags |= ACE_GROUP;
-				break;
-			default:
-				DEBUG(8, ("unsupported special_id %d\n", \
-					aceprop->who.special_id));
-				continue; /* don't add it !!! */
-			}
-		}
-	}
-	SMB_ASSERT(i == naces);
-
-	/* store acl */
-	if(acl(fsp->fsp_name, ACE_SETACL, naces, acebuf)) {
-		if(errno == ENOSYS) {
-			DEBUG(9, ("acl(ACE_SETACL, %s): Operation is not "
-				  "supported on the filesystem where the file "
-				  "reside", fsp->fsp_name));
-		} else {
-			DEBUG(9, ("acl(ACE_SETACL, %s): %s ", fsp->fsp_name,
-					strerror(errno)));
-		}
-		return 0;
-	}
-
-	return True;
-}
-
-/* zfs_set_nt_acl()
- * set the local file's acls obtaining it in NT form
- * using the NFSv4 format conversion
- */
-static NTSTATUS zfs_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
-			   uint32 security_info_sent,
-			   struct security_descriptor *psd)
-{
-	return smb_set_nt_acl_nfs4(fsp, security_info_sent, psd,
-			zfs_process_smbacl);
-}
-
-static NTSTATUS zfsacl_fget_nt_acl(struct vfs_handle_struct *handle,
-				 struct files_struct *fsp,
-				 uint32 security_info,
-				 struct security_descriptor **ppdesc)
-{
-	SMB4ACL_T *pacl;
-	NTSTATUS status;
-
-	status = zfs_get_nt_acl_common(fsp->fsp_name, security_info, &pacl);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	return smb_fget_nt_acl_nfs4(fsp, security_info, ppdesc, pacl);
-}
-
-static NTSTATUS zfsacl_get_nt_acl(struct vfs_handle_struct *handle,
-				const char *name,  uint32 security_info,
-				struct security_descriptor **ppdesc)
-{
-	SMB4ACL_T *pacl;
-	NTSTATUS status;
-
-	status = zfs_get_nt_acl_common(name, security_info, &pacl);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	return smb_get_nt_acl_nfs4(handle->conn, name, security_info, ppdesc,
-				   pacl);
-}
-
-static NTSTATUS zfsacl_fset_nt_acl(vfs_handle_struct *handle,
-			 files_struct *fsp,
-			 uint32 security_info_sent,
-			 SEC_DESC *psd)
-{
-	return zfs_set_nt_acl(handle, fsp, security_info_sent, psd);
-}
-
-static NTSTATUS zfsacl_set_nt_acl(vfs_handle_struct *handle,
-		       files_struct *fsp,
-		       const char *name, uint32 security_info_sent,
-		       SEC_DESC *psd)
-{
-	return zfs_set_nt_acl(handle, fsp, security_info_sent, psd);
-}
-
-/* VFS operations structure */
-
-static vfs_op_tuple zfsacl_ops[] = {
-	{SMB_VFS_OP(zfsacl_fget_nt_acl), SMB_VFS_OP_FGET_NT_ACL,
-	 SMB_VFS_LAYER_OPAQUE},
-	{SMB_VFS_OP(zfsacl_get_nt_acl), SMB_VFS_OP_GET_NT_ACL,
-	 SMB_VFS_LAYER_OPAQUE},
-	{SMB_VFS_OP(zfsacl_fset_nt_acl), SMB_VFS_OP_FSET_NT_ACL,
-	 SMB_VFS_LAYER_OPAQUE},
-	{SMB_VFS_OP(zfsacl_set_nt_acl), SMB_VFS_OP_SET_NT_ACL,
-	 SMB_VFS_LAYER_OPAQUE},
-	{SMB_VFS_OP(NULL), SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP}
-};
-
-/* != 0 if this module will be compiled as static */
-
-#define STATIC 0
-
-#if STATIC
-NTSTATUS vfs_zfsacl_init(void);
-#else
-NTSTATUS init_module(void);
-#endif
-
-NTSTATUS
-#if STATIC
-	vfs_zfsacl_init
-#else
-	init_module
-#endif
-		(void)
-{
-	return smb_register_vfs(SMB_VFS_INTERFACE_VERSION, "zfsacl",
-				zfsacl_ops);
-}

Modified: branches/samba/upstream/source/modules/weird.c
===================================================================
--- branches/samba/upstream/source/modules/weird.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/modules/weird.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/source/nmbd/asyncdns.c
===================================================================
--- branches/samba/upstream/source/nmbd/asyncdns.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/asyncdns.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    */
 
 #include "includes.h"
@@ -87,13 +88,8 @@
 	DEBUGLEVEL = -1;
 
 	while (1) {
-		NTSTATUS status;
-
-		status = read_data(fd_in, (char *)&r, sizeof(r));
-
-		if (!NT_STATUS_IS_OK(status)) {
+		if (read_data(fd_in, (char *)&r, sizeof(r)) != sizeof(r)) 
 			break;
-		}
 
 		pull_ascii_nstring( qname, sizeof(qname), r.name.name);
 		r.result.s_addr = interpret_addr(qname);
@@ -164,11 +160,6 @@
 	CatchSignal(SIGHUP, SIG_IGN);
         CatchSignal(SIGTERM, SIGNAL_CAST sig_term );
 
-	if (!reinit_after_fork(nmbd_messaging_context(), true)) {
-		DEBUG(0,("reinit_after_fork() failed\n"));
-		smb_panic("reinit_after_fork() failed");
-	}
-
 	asyncdns_process();
 }
 
@@ -176,7 +167,7 @@
 /***************************************************************************
 check if a particular name is already being queried
   ****************************************************************************/
-static bool query_current(struct query_record *r)
+static BOOL query_current(struct query_record *r)
 {
 	return dns_current &&
 		nmb_name_equal(&r->name, 
@@ -187,7 +178,7 @@
 /***************************************************************************
   write a query to the child process
   ****************************************************************************/
-static bool write_child(struct packet_struct *p)
+static BOOL write_child(struct packet_struct *p)
 {
 	struct query_record r;
 
@@ -204,7 +195,7 @@
 	struct query_record r;
 	struct packet_struct *p, *p2;
 	struct name_record *namerec;
-	NTSTATUS status;
+	int size;
 
 	if (fd_in == -1)
 		return;
@@ -218,11 +209,11 @@
 		start_async_dns();
 	}
 
-	status = read_data(fd_in, (char *)&r, sizeof(r));
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0, ("read from child failed: %s\n", nt_errstr(status)));
-		fd_in = -1;
+	if ((size=read_data(fd_in, (char *)&r, sizeof(r))) != sizeof(r)) {
+		if (size) {
+			DEBUG(0,("Incomplete DNS answer from child!\n"));
+			fd_in = -1;
+		}
                 BlockSignals(True, SIGTERM);
 		return;
 	}
@@ -295,7 +286,7 @@
 queue a DNS query
   ****************************************************************************/
 
-bool queue_dns_query(struct packet_struct *p,struct nmb_name *question)
+BOOL queue_dns_query(struct packet_struct *p,struct nmb_name *question)
 {
 	if (in_dns || fd_in == -1)
 		return False;
@@ -327,7 +318,7 @@
   we use this when we can't do async DNS lookups
   ****************************************************************************/
 
-bool queue_dns_query(struct packet_struct *p,struct nmb_name *question)
+BOOL queue_dns_query(struct packet_struct *p,struct nmb_name *question)
 {
 	struct name_record *namerec = NULL;
 	struct in_addr dns_ip;

Modified: branches/samba/upstream/source/nmbd/nmbd.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -26,39 +27,28 @@
 int ClientDGRAM     = -1;
 int global_nmb_port = -1;
 
-extern bool rescan_listen_set;
-extern bool global_in_nmbd;
+extern BOOL rescan_listen_set;
+extern struct in_addr loopback_ip;
+extern BOOL global_in_nmbd;
 
-extern bool override_logfile;
+extern BOOL override_logfile;
 
+/* are we running as a daemon ? */
+static BOOL is_daemon;
+
+/* fork or run in foreground ? */
+static BOOL Fork = True;
+
+/* log to standard output ? */
+static BOOL log_stdout;
+
 /* have we found LanMan clients yet? */
-bool found_lm_clients = False;
+BOOL found_lm_clients = False;
 
 /* what server type are we currently */
 
 time_t StartupTime = 0;
 
-struct event_context *nmbd_event_context(void)
-{
-	static struct event_context *ctx;
-
-	if (!ctx && !(ctx = event_context_init(NULL))) {
-		smb_panic("Could not init nmbd event context");
-	}
-	return ctx;
-}
-
-struct messaging_context *nmbd_messaging_context(void)
-{
-	static struct messaging_context *ctx;
-
-	if (!ctx && !(ctx = messaging_init(NULL, server_id_self(),
-					   nmbd_event_context()))) {
-		smb_panic("Could not init nmbd messaging context");
-	}
-	return ctx;
-}
-
 /**************************************************************************** **
  Handle a SIGTERM in band.
  **************************************************************************** */
@@ -86,11 +76,8 @@
  Handle a SHUTDOWN message from smbcontrol.
  **************************************************************************** */
 
-static void nmbd_terminate(struct messaging_context *msg,
-			   void *private_data,
-			   uint32_t msg_type,
-			   struct server_id server_id,
-			   DATA_BLOB *data)
+static void nmbd_terminate(int msg_type, struct process_id src,
+			   void *buf, size_t len, void *private_data)
 {
 	terminate();
 }
@@ -176,7 +163,6 @@
 	if (t && ((t - lastt) < NMBD_INTERFACES_RELOAD)) {
 		return;
 	}
-
 	lastt = t;
 
 	if (!interfaces_changed()) {
@@ -191,50 +177,33 @@
 
 	/* find any interfaces that need adding */
 	for (n=iface_count() - 1; n >= 0; n--) {
-		char str[INET6_ADDRSTRLEN];
-		const struct interface *iface = get_interface(n);
-		struct in_addr ip, nmask;
+		struct interface *iface = get_interface(n);
 
 		if (!iface) {
 			DEBUG(2,("reload_interfaces: failed to get interface %d\n", n));
 			continue;
 		}
 
-		/* Ensure we're only dealing with IPv4 here. */
-		if (iface->ip.ss_family != AF_INET) {
-			DEBUG(2,("reload_interfaces: "
-				"ignoring non IPv4 interface.\n"));
-			continue;
-		}
-
-		ip = ((struct sockaddr_in *)&iface->ip)->sin_addr;
-		nmask = ((struct sockaddr_in *)&iface->netmask)->sin_addr;
-
 		/*
 		 * We don't want to add a loopback interface, in case
 		 * someone has added 127.0.0.1 for smbd, nmbd needs to
 		 * ignore it here. JRA.
 		 */
 
-		if (is_loopback_addr(&iface->ip)) {
-			DEBUG(2,("reload_interfaces: Ignoring loopback "
-				"interface %s\n",
-				print_sockaddr(str, sizeof(str), &iface->ip) ));
+		if (ip_equal(iface->ip, loopback_ip)) {
+			DEBUG(2,("reload_interfaces: Ignoring loopback interface %s\n", inet_ntoa(iface->ip)));
 			continue;
 		}
 
 		for (subrec=subnetlist; subrec; subrec=subrec->next) {
-			if (ip_equal_v4(ip, subrec->myip) &&
-			    ip_equal_v4(nmask, subrec->mask_ip)) {
-				break;
-			}
+			if (ip_equal(iface->ip, subrec->myip) &&
+			    ip_equal(iface->nmask, subrec->mask_ip)) break;
 		}
 
 		if (!subrec) {
 			/* it wasn't found! add it */
-			DEBUG(2,("Found new interface %s\n",
-				 print_sockaddr(str,
-					 sizeof(str), &iface->ip) ));
+			DEBUG(2,("Found new interface %s\n", 
+				 inet_ntoa(iface->ip)));
 			subrec = make_normal_subnet(iface);
 			if (subrec)
 				register_my_workgroup_one_subnet(subrec);
@@ -245,22 +214,8 @@
 	for (subrec=subnetlist; subrec; subrec=subrec->next) {
 		for (n=iface_count() - 1; n >= 0; n--) {
 			struct interface *iface = get_interface(n);
-			struct in_addr ip, nmask;
-			if (!iface) {
-				continue;
-			}
-			/* Ensure we're only dealing with IPv4 here. */
-			if (iface->ip.ss_family != AF_INET) {
-				DEBUG(2,("reload_interfaces: "
-					"ignoring non IPv4 interface.\n"));
-				continue;
-			}
-			ip = ((struct sockaddr_in *)&iface->ip)->sin_addr;
-			nmask = ((struct sockaddr_in *)&iface->netmask)->sin_addr;
-			if (ip_equal_v4(ip, subrec->myip) &&
-			    ip_equal_v4(nmask, subrec->mask_ip)) {
-				break;
-			}
+			if (ip_equal(iface->ip, subrec->myip) &&
+			    ip_equal(iface->nmask, subrec->mask_ip)) break;
 		}
 		if (n == -1) {
 			/* oops, an interface has disapeared. This is
@@ -269,7 +224,7 @@
 			 instead we just wear the memory leak and
 			 remove it from the list of interfaces without
 			 freeing it */
-			DEBUG(2,("Deleting dead interface %s\n",
+			DEBUG(2,("Deleting dead interface %s\n", 
 				 inet_ntoa(subrec->myip)));
 			close_subnet(subrec);
 		}
@@ -293,8 +248,7 @@
 
 		BlockSignals(false, SIGTERM);
 
-		/* We only count IPv4 interfaces here. */
-		while (iface_count_v4() == 0 && !got_sig_term) {
+                while (iface_count() == 0 && !got_sig_term) {
 			sleep(5);
 			load_interfaces();
 		}
@@ -321,16 +275,17 @@
  Reload the services file.
  **************************************************************************** */
 
-static bool reload_nmbd_services(bool test)
+static BOOL reload_nmbd_services(BOOL test)
 {
-	bool ret;
+	BOOL ret;
 
 	set_remote_machine_name("nmbd", False);
 
 	if ( lp_loaded() ) {
-		const char *fname = lp_configfile();
-		if (file_exist(fname,NULL) && !strcsequal(fname,get_dyn_CONFIGFILE())) {
-			set_dyn_CONFIGFILE(fname);
+		pstring fname;
+		pstrcpy( fname,lp_configfile());
+		if (file_exist(fname,NULL) && !strcsequal(fname,dyn_CONFIGFILE)) {
+			pstrcpy(dyn_CONFIGFILE,fname);
 			test = False;
 		}
 	}
@@ -338,7 +293,7 @@
 	if ( test && !lp_file_list_changed() )
 		return(True);
 
-	ret = lp_load(get_dyn_CONFIGFILE(), True , False, False, True);
+	ret = lp_load( dyn_CONFIGFILE, True , False, False, True);
 
 	/* perhaps the config filename is now set */
 	if ( !test ) {
@@ -353,11 +308,8 @@
  * React on 'smbcontrol nmbd reload-config' in the same way as to SIGHUP
  **************************************************************************** */
 
-static void msg_reload_nmbd_services(struct messaging_context *msg,
-				     void *private_data,
-				     uint32_t msg_type,
-				     struct server_id server_id,
-				     DATA_BLOB *data)
+static void msg_reload_nmbd_services(int msg_type, struct process_id src,
+				     void *buf, size_t len, void *private_data)
 {
 	write_browse_list( 0, True );
 	dump_all_namelists();
@@ -366,21 +318,16 @@
 	reload_interfaces(0);
 }
 
-static void msg_nmbd_send_packet(struct messaging_context *msg,
-				 void *private_data,
-				 uint32_t msg_type,
-				 struct server_id src,
-				 DATA_BLOB *data)
+static void msg_nmbd_send_packet(int msg_type, struct process_id src,
+				 void *buf, size_t len, void *private_data)
 {
-	struct packet_struct *p = (struct packet_struct *)data->data;
+	struct packet_struct *p = (struct packet_struct *)buf;
 	struct subnet_record *subrec;
-	struct sockaddr_storage ss;
-	const struct sockaddr_storage *pss;
-	const struct in_addr *local_ip;
+	struct in_addr *local_ip;
 
 	DEBUG(10, ("Received send_packet from %d\n", procid_to_pid(&src)));
 
-	if (data->length != sizeof(struct packet_struct)) {
+	if (len != sizeof(struct packet_struct)) {
 		DEBUG(2, ("Discarding invalid packet length from %d\n",
 			  procid_to_pid(&src)));
 		return;
@@ -393,16 +340,14 @@
 		return;
 	}
 
-	in_addr_to_sockaddr_storage(&ss, p->ip);
-	pss = iface_ip(&ss);
+	local_ip = iface_ip(p->ip);
 
-	if (pss == NULL) {
+	if (local_ip == NULL) {
 		DEBUG(2, ("Could not find ip for packet from %d\n",
 			  procid_to_pid(&src)));
 		return;
 	}
 
-	local_ip = &((const struct sockaddr_in *)pss)->sin_addr;
 	subrec = FIRST_SUBNET;
 
 	p->fd = (p->packet_type == NMB_PACKET) ?
@@ -410,7 +355,7 @@
 
 	for (subrec = FIRST_SUBNET; subrec != NULL;
 	     subrec = NEXT_SUBNET_EXCLUDING_UNICAST(subrec)) {
-		if (ip_equal_v4(*local_ip, subrec->myip)) {
+		if (ip_equal(*local_ip, subrec->myip)) {
 			p->fd = (p->packet_type == NMB_PACKET) ?
 				subrec->nmb_sock : subrec->dgram_sock;
 			break;
@@ -432,15 +377,14 @@
 
 static void process(void)
 {
-	bool run_election;
+	BOOL run_election;
 
 	while( True ) {
 		time_t t = time(NULL);
-		TALLOC_CTX *frame = talloc_stackframe();
 
 		/* Check for internal messages */
 
-		message_dispatch(nmbd_messaging_context());
+		message_dispatch();
 
 		/*
 		 * Check all broadcast subnets to see if
@@ -455,10 +399,8 @@
 		 * (nmbd_packets.c)
 		 */
 
-		if(listen_for_packets(run_election)) {
-			TALLOC_FREE(frame);
+		if(listen_for_packets(run_election))
 			return;
-		}
 
 		/*
 		 * Handle termination inband.
@@ -644,10 +586,8 @@
 
 		if(reload_after_sighup) {
 			DEBUG( 0, ( "Got SIGHUP dumping debug info.\n" ) );
-			msg_reload_nmbd_services(nmbd_messaging_context(),
-						 NULL, MSG_SMB_CONF_UPDATED,
-						 procid_self(), NULL);
-
+			msg_reload_nmbd_services(MSG_SMB_CONF_UPDATED,
+						 pid_to_procid(0), NULL, 0, NULL);
 			reload_after_sighup = 0;
 		}
 
@@ -656,7 +596,7 @@
 		reload_interfaces(t);
 
 		/* free up temp memory */
-		TALLOC_FREE(frame);
+		lp_TALLOC_FREE();
 	}
 }
 
@@ -664,11 +604,8 @@
  Open the socket communication.
  **************************************************************************** */
 
-static bool open_sockets(bool isdaemon, int port)
+static BOOL open_sockets(BOOL isdaemon, int port)
 {
-	struct sockaddr_storage ss;
-	const char *sock_addr = lp_socket_address();
-
 	/*
 	 * The sockets opened here will be used to receive broadcast
 	 * packets *only*. Interface specific sockets are opened in
@@ -677,41 +614,19 @@
 	 * now deprecated.
 	 */
 
-	if (!interpret_string_addr(&ss, sock_addr,
-				AI_NUMERICHOST|AI_PASSIVE)) {
-		DEBUG(0,("open_sockets: unable to get socket address "
-			"from string %s", sock_addr));
-		return false;
-	}
-	if (ss.ss_family != AF_INET) {
-		DEBUG(0,("open_sockets: unable to use IPv6 socket"
-			"%s in nmbd\n",
-			sock_addr));
-		return false;
-	}
-
-	if (isdaemon) {
+	if ( isdaemon )
 		ClientNMB = open_socket_in(SOCK_DGRAM, port,
-					   0, &ss,
-					   true);
-	} else {
+					   0, interpret_addr(lp_socket_address()),
+					   True);
+	else
 		ClientNMB = 0;
-	}
-
-	if (ClientNMB == -1) {
-		return false;
-	}
-
+  
 	ClientDGRAM = open_socket_in(SOCK_DGRAM, DGRAM_PORT,
-					   3, &ss,
-					   true);
+					   3, interpret_addr(lp_socket_address()),
+					   True);
 
-	if (ClientDGRAM == -1) {
-		if (ClientNMB != 0) {
-			close(ClientNMB);
-		}
-		return false;
-	}
+	if ( ClientNMB == -1 )
+		return( False );
 
 	/* we are never interested in SIGPIPE */
 	BlockSignals(True,SIGPIPE);
@@ -730,84 +645,43 @@
 /**************************************************************************** **
  main program
  **************************************************************************** */
-
  int main(int argc, const char *argv[])
 {
-	static bool is_daemon;
-	static bool opt_interactive;
-	static bool Fork = true;
-	static bool no_process_group;
-	static bool log_stdout;
+	pstring logfile;
+	static BOOL opt_interactive;
 	poptContext pc;
-	char *p_lmhosts = NULL;
-	int opt;
-	enum {
-		OPT_DAEMON = 1000,
-		OPT_INTERACTIVE,
-		OPT_FORK,
-		OPT_NO_PROCESS_GROUP,
-		OPT_LOG_STDOUT
-	};
+	static char *p_lmhosts = dyn_LMHOSTSFILE;
+	static BOOL no_process_group = False;
 	struct poptOption long_options[] = {
 	POPT_AUTOHELP
-	{"daemon", 'D', POPT_ARG_NONE, NULL, OPT_DAEMON, "Become a daemon(default)" },
-	{"interactive", 'i', POPT_ARG_NONE, NULL, OPT_INTERACTIVE, "Run interactive (not a daemon)" },
-	{"foreground", 'F', POPT_ARG_NONE, NULL, OPT_FORK, "Run daemon in foreground (for daemontools & etc)" },
-	{"no-process-group", 0, POPT_ARG_NONE, NULL, OPT_NO_PROCESS_GROUP, "Don't create a new process group" },
-	{"log-stdout", 'S', POPT_ARG_NONE, NULL, OPT_LOG_STDOUT, "Log to stdout" },
+	{"daemon", 'D', POPT_ARG_VAL, &is_daemon, True, "Become a daemon(default)" },
+	{"interactive", 'i', POPT_ARG_VAL, &opt_interactive, True, "Run interactive (not a daemon)" },
+	{"foreground", 'F', POPT_ARG_VAL, &Fork, False, "Run daemon in foreground (for daemontools & etc)" },
+	{"no-process-group", 0, POPT_ARG_VAL, &no_process_group, True, "Don't create a new process group" },
+	{"log-stdout", 'S', POPT_ARG_VAL, &log_stdout, True, "Log to stdout" },
 	{"hosts", 'H', POPT_ARG_STRING, &p_lmhosts, 'H', "Load a netbios hosts file"},
 	{"port", 'p', POPT_ARG_INT, &global_nmb_port, NMB_PORT, "Listen on the specified port" },
 	POPT_COMMON_SAMBA
 	{ NULL }
 	};
-	TALLOC_CTX *frame = talloc_stackframe(); /* Setup tos. */
 
-	db_tdb2_setup_messaging(NULL, false);
-
 	load_case_tables();
 
 	global_nmb_port = NMB_PORT;
 
 	pc = poptGetContext("nmbd", argc, argv, long_options, 0);
-	while ((opt = poptGetNextOpt(pc)) != -1) {
-		switch (opt) {
-		case OPT_DAEMON:
-			is_daemon = true;
-			break;
-		case OPT_INTERACTIVE:
-			opt_interactive = true;
-			break;
-		case OPT_FORK:
-			Fork = false;
-			break;
-		case OPT_NO_PROCESS_GROUP:
-			no_process_group = true;
-			break;
-		case OPT_LOG_STDOUT:
-			log_stdout = true;
-			break;
-		default:
-			d_fprintf(stderr, "\nInvalid option %s: %s\n\n",
-				  poptBadOption(pc, 0), poptStrerror(opt));
-			poptPrintUsage(pc, stderr, 0);
-			exit(1);
-		}
-	};
+	while (poptGetNextOpt(pc) != -1) {};
 	poptFreeContext(pc);
 
-	global_in_nmbd = true;
+	global_in_nmbd = True;
 	
 	StartupTime = time(NULL);
 	
 	sys_srandom(time(NULL) ^ sys_getpid());
 	
 	if (!override_logfile) {
-		char *logfile = NULL;
-		if (asprintf(&logfile, "%s/log.nmbd", get_dyn_LOGFILEBASE()) < 0) {
-			exit(1);
-		}
+		slprintf(logfile, sizeof(logfile)-1, "%s/log.nmbd", dyn_LOGFILEBASE);
 		lp_set_logfile(logfile);
-		SAFE_FREE(logfile);
 	}
 	
 	fault_setup((void (*)(void *))fault_continue );
@@ -846,20 +720,9 @@
 
 	reopen_logs();
 
-	DEBUG(0,("nmbd version %s started.\n", SAMBA_VERSION_STRING));
-	DEBUGADD(0,("%s\n", COPYRIGHT_STARTUP_MESSAGE));
+	DEBUG( 0, ( "Netbios nameserver version %s started.\n", SAMBA_VERSION_STRING) );
+	DEBUGADD( 0, ( "%s\n", COPYRIGHT_STARTUP_MESSAGE ) );
 
-	if (!lp_load_initial_only(get_dyn_CONFIGFILE())) {
-		DEBUG(0, ("error opening config file\n"));
-		exit(1);
-	}
-
-	if (nmbd_messaging_context() == NULL) {
-		return 1;
-	}
-
-	db_tdb2_setup_messaging(nmbd_messaging_context(), true);
-
 	if ( !reload_nmbd_services(False) )
 		return(-1);
 
@@ -894,10 +757,6 @@
 		setpgid( (pid_t)0, (pid_t)0 );
 #endif
 
-	if (nmbd_messaging_context() == NULL) {
-		return 1;
-	}
-
 #ifndef SYNC_DNS
 	/* Setup the async dns. We do it here so it doesn't have all the other
 		stuff initialised and thus chewing memory and sockets */
@@ -911,28 +770,15 @@
 	}
 
 	pidfile_create("nmbd");
-
-	if (!reinit_after_fork(nmbd_messaging_context(), false)) {
-		DEBUG(0,("reinit_after_fork() failed\n"));
-		exit(1);
-	}
-
-	/* get broadcast messages */
-	claim_connection(NULL,"",FLAG_MSG_GENERAL|FLAG_MSG_DBWRAP);
-
-	messaging_register(nmbd_messaging_context(), NULL,
-			   MSG_FORCE_ELECTION, nmbd_message_election);
+	message_init();
+	message_register(MSG_FORCE_ELECTION, nmbd_message_election, NULL);
 #if 0
 	/* Until winsrepl is done. */
-	messaging_register(nmbd_messaging_context(), NULL,
-			   MSG_WINS_NEW_ENTRY, nmbd_wins_new_entry);
+	message_register(MSG_WINS_NEW_ENTRY, nmbd_wins_new_entry, NULL);
 #endif
-	messaging_register(nmbd_messaging_context(), NULL,
-			   MSG_SHUTDOWN, nmbd_terminate);
-	messaging_register(nmbd_messaging_context(), NULL,
-			   MSG_SMB_CONF_UPDATED, msg_reload_nmbd_services);
-	messaging_register(nmbd_messaging_context(), NULL,
-			   MSG_SEND_PACKET, msg_nmbd_send_packet);
+	message_register(MSG_SHUTDOWN, nmbd_terminate, NULL);
+	message_register(MSG_SMB_CONF_UPDATED, msg_reload_nmbd_services, NULL);
+	message_register(MSG_SEND_PACKET, msg_nmbd_send_packet, NULL);
 
 	TimeInit();
 
@@ -954,11 +800,8 @@
 	}
 
 	/* Load in any static local names. */ 
-	if (p_lmhosts) {
-		set_dyn_LMHOSTSFILE(p_lmhosts);
-	}
-	load_lmhosts_file(get_dyn_LMHOSTSFILE());
-	DEBUG(3,("Loaded hosts file %s\n", get_dyn_LMHOSTSFILE()));
+	load_lmhosts_file(p_lmhosts);
+	DEBUG(3,("Loaded hosts file %s\n", p_lmhosts));
 
 	/* If we are acting as a WINS server, initialise data structures. */
 	if( !initialise_wins() ) {
@@ -984,7 +827,6 @@
 	/* We can only take signals in the select. */
 	BlockSignals( True, SIGTERM );
 
-	TALLOC_FREE(frame);
 	process();
 
 	if (dbf)

Modified: branches/samba/upstream/source/nmbd/nmbd_become_dmb.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_become_dmb.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_become_dmb.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,12 +16,15 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
 #include "includes.h"
 
+extern struct in_addr allones_ip;
+
 extern uint16 samba_nb_type; /* Samba's NetBIOS type. */
 
 static void become_domain_master_browser_bcast(const char *);
@@ -117,7 +120,7 @@
 	if( subrec == unicast_subnet ) {
 		struct nmb_name nmbname;
 		struct in_addr my_first_ip;
-		const struct in_addr *nip;
+		struct in_addr *nip;
 
 		/* Put our name and first IP address into the 
 		   workgroup struct as domain master browser. This
@@ -127,14 +130,14 @@
 		make_nmb_name(&nmbname, global_myname(), 0x20);
 
 		work->dmb_name = nmbname;
+		/* Pick the first interface ip address as the domain master browser ip. */
+		nip = iface_n_ip(0);
 
-		/* Pick the first interface IPv4 address as the domain master browser ip. */
-		nip = first_ipv4_iface();
 		if (!nip) {
-			DEBUG(0,("become_domain_master_stage2: "
-				"Error. get_interface returned NULL\n"));
+			DEBUG(0,("become_domain_master_stage2: Error. iface_n_ip returned NULL\n"));
 			return;
 		}
+
 		my_first_ip = *nip;
 
 		putip((char *)&work->dmb_addr, &my_first_ip);
@@ -202,12 +205,10 @@
 
 static void become_domain_master_query_success(struct subnet_record *subrec,
                         struct userdata_struct *userdata,
-                        struct nmb_name *nmbname, struct in_addr ip,
+                        struct nmb_name *nmbname, struct in_addr ip, 
                         struct res_rec *rrec)
 {
 	unstring name;
-	struct in_addr allones_ip;
-
 	pull_ascii_nstring(name, sizeof(name), nmbname->name);
 
 	/* If the given ip is not ours, then we can't become a domain
@@ -217,9 +218,7 @@
 	/* BUG note. Samba 1.9.16p11 servers seem to return the broadcast
 		address or zero ip for this query. Pretend this is ok. */
 
-	allones_ip.s_addr = htonl(INADDR_BROADCAST);
-
-	if(ismyip_v4(ip) || ip_equal_v4(allones_ip, ip) || is_zero_ip_v4(ip)) {
+	if(ismyip(ip) || ip_equal(allones_ip, ip) || is_zero_ip(ip)) {
 		if( DEBUGLVL( 3 ) ) {
 			dbgtext( "become_domain_master_query_success():\n" );
 			dbgtext( "Our address (%s) ", inet_ntoa(ip) );

Modified: branches/samba/upstream/source/nmbd/nmbd_become_lmb.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_become_lmb.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_become_lmb.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -71,7 +72,7 @@
 ******************************************************************/
 
 static void reset_workgroup_state( struct subnet_record *subrec, const char *workgroup_name,
-                                   bool force_new_election )
+                                   BOOL force_new_election )
 {
 	struct work_record *work;
 	struct server_record *servrec;
@@ -133,10 +134,10 @@
                              struct nmb_name *released_name,
                              struct in_addr released_ip)
 { 
-	bool force_new_election = False;
+	BOOL force_new_election = False;
 	unstring relname;
 
-	memcpy((char *)&force_new_election, userdata->data, sizeof(bool));
+	memcpy((char *)&force_new_election, userdata->data, sizeof(BOOL));
 
 	DEBUG(3,("unbecome_local_master_success: released name %s.\n",
 		nmb_namestr(released_name)));
@@ -164,10 +165,10 @@
 {
 	struct name_record *namerec;
 	struct userdata_struct *userdata = rrec->userdata;
-	bool force_new_election = False;
+	BOOL force_new_election = False;
 	unstring failname;
 
-	memcpy((char *)&force_new_election, userdata->data, sizeof(bool));
+	memcpy((char *)&force_new_election, userdata->data, sizeof(BOOL));
 
 	DEBUG(0,("unbecome_local_master_fail: failed to release name %s. \
 Removing from namelist anyway.\n", nmb_namestr(fail_name)));
@@ -195,7 +196,7 @@
 ******************************************************************/
 
 static void release_1d_name( struct subnet_record *subrec, const char *workgroup_name,
-                             bool force_new_election)
+                             BOOL force_new_election)
 {
 	struct nmb_name nmbname;
 	struct name_record *namerec;
@@ -203,7 +204,7 @@
 	make_nmb_name(&nmbname, workgroup_name, 0x1d);
 	if((namerec = find_name_on_subnet( subrec, &nmbname, FIND_SELF_NAME))!=NULL) {
 		struct userdata_struct *userdata;
-		size_t size = sizeof(struct userdata_struct) + sizeof(bool);
+		size_t size = sizeof(struct userdata_struct) + sizeof(BOOL);
 
 		if((userdata = (struct userdata_struct *)SMB_MALLOC(size)) == NULL) {
 			DEBUG(0,("release_1d_name: malloc fail.\n"));
@@ -212,8 +213,8 @@
 
 		userdata->copy_fn = NULL;
 		userdata->free_fn = NULL;
-		userdata->userdata_len = sizeof(bool);
-		memcpy((char *)userdata->data, &force_new_election, sizeof(bool));
+		userdata->userdata_len = sizeof(BOOL);
+		memcpy((char *)userdata->data, &force_new_election, sizeof(BOOL));
 
 		release_name(subrec, namerec,
 			unbecome_local_master_success,
@@ -268,7 +269,7 @@
 ******************************************************************/
 
 void unbecome_local_master_browser(struct subnet_record *subrec, struct work_record *work,
-                                   bool force_new_election)
+                                   BOOL force_new_election)
 {
 	struct name_record *namerec;
 	struct nmb_name nmbname;

Modified: branches/samba/upstream/source/nmbd/nmbd_browserdb.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_browserdb.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_browserdb.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 /* -------------------------------------------------------------------------- **

Modified: branches/samba/upstream/source/nmbd/nmbd_browsesync.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_browsesync.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_browsesync.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -98,12 +99,12 @@
 
 static void announce_local_master_browser_to_domain_master_browser( struct work_record *work)
 {
-	char outbuf[1024];
+	pstring outbuf;
 	unstring myname;
 	unstring dmb_name;
 	char *p;
 
-	if(ismyip_v4(work->dmb_addr)) {
+	if(ismyip(work->dmb_addr)) {
 		if( DEBUGLVL( 2 ) ) {
 			dbgtext( "announce_local_master_browser_to_domain_master_browser:\n" );
 			dbgtext( "We are both a domain and a local master browser for " );
@@ -122,7 +123,7 @@
 	strupper_m(myname);
 	myname[15]='\0';
 	/* The call below does CH_UNIX -> CH_DOS conversion. JRA */
-	push_ascii(p, myname, sizeof(outbuf)-PTR_DIFF(p,outbuf)-1, STR_TERMINATE);
+	push_pstring_base(p, myname, outbuf);
 
 	p = skip_string(outbuf,sizeof(outbuf),p);
 
@@ -136,7 +137,7 @@
 	/* Target name for send_mailslot must be in UNIX charset. */
 	pull_ascii_nstring(dmb_name, sizeof(dmb_name), work->dmb_name.name);
 	send_mailslot(True, BROWSE_MAILSLOT, outbuf,PTR_DIFF(p,outbuf),
-		global_myname(), 0x0, dmb_name, 0x0,
+		global_myname(), 0x0, dmb_name, 0x0, 
 		work->dmb_addr, FIRST_SUBNET->myip, DGRAM_PORT);
 }
 
@@ -291,7 +292,7 @@
 
   /* First check if we already have a dmb for this workgroup. */
 
-	if(!is_zero_ip_v4(work->dmb_addr) && ip_equal_v4(work->dmb_addr, answer_ip)) {
+	if(!is_zero_ip(work->dmb_addr) && ip_equal(work->dmb_addr, answer_ip)) {
 		/* Do the local master browser announcement to the domain
 			master browser name and IP. */
 		announce_local_master_browser_to_domain_master_browser( work );
@@ -300,7 +301,7 @@
 		sync_with_dmb(work);
 		return;
 	} else {
-		zero_ip_v4(&work->dmb_addr);
+		zero_ip(&work->dmb_addr);
 	}
 
 	/* Now initiate the node status request. */
@@ -526,7 +527,7 @@
 		 * Don't send node status requests to ourself.
 		 */
 
-		if(ismyip_v4( send_ip )) {
+		if(ismyip( send_ip )) {
 			if( DEBUGLVL( 5 ) ) {
 				dbgtext( "find_all_domain_master_names_query_succes:\n" );
 				dbgtext( "Not sending node status to our own IP " );

Modified: branches/samba/upstream/source/nmbd/nmbd_elections.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_elections.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_elections.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -32,7 +33,7 @@
 static void send_election_dgram(struct subnet_record *subrec, const char *workgroup_name,
                                 uint32 criterion, int timeup,const char *server_name)
 {
-	char outbuf[1024];
+	pstring outbuf;
 	unstring srv_name;
 	char *p;
 
@@ -51,9 +52,9 @@
 	unstrcpy(srv_name, server_name);
 	strupper_m(srv_name);
 	/* The following call does UNIX -> DOS charset conversion. */
-	push_ascii(p, srv_name, sizeof(outbuf)-PTR_DIFF(p,outbuf)-1, STR_TERMINATE);
+	pstrcpy_base(p, srv_name, outbuf);
 	p = skip_string(outbuf,sizeof(outbuf),p);
-
+  
 	send_mailslot(False, BROWSE_MAILSLOT, outbuf, PTR_DIFF(p,outbuf),
 		global_myname(), 0,
 		workgroup_name, 0x1e,
@@ -216,7 +217,7 @@
   Determine if I win an election.
 ******************************************************************/
 
-static bool win_election(struct work_record *work, int version,
+static BOOL win_election(struct work_record *work, int version,
                          uint32 criterion, int timeup, const char *server_name)
 {  
 	int mytimeup = time(NULL) - StartupTime;
@@ -328,17 +329,15 @@
   be done by run_elections().
 ***************************************************************************/
 
-bool check_elections(void)
+BOOL check_elections(void)
 {
 	struct subnet_record *subrec;
-	bool run_any_election = False;
+	BOOL run_any_election = False;
 
 	for (subrec = FIRST_SUBNET; subrec; subrec = NEXT_SUBNET_EXCLUDING_UNICAST(subrec)) {
 		struct work_record *work;
 		for (work = subrec->workgrouplist; work; work = work->next) {
-			if (work->RunningElection) {
-				run_any_election = work->RunningElection;
-			}
+			run_any_election |= work->RunningElection;
 
 			/* 
 			 * Start an election if we have any chance of winning.
@@ -379,11 +378,8 @@
  Process a internal Samba message forcing an election.
 ***************************************************************************/
 
-void nmbd_message_election(struct messaging_context *msg,
-			   void *private_data,
-			   uint32_t msg_type,
-			   struct server_id server_id,
-			   DATA_BLOB *data)
+void nmbd_message_election(int msg_type, struct process_id src,
+			   void *buf, size_t len, void *private_data)
 {
 	struct subnet_record *subrec;
 

Modified: branches/samba/upstream/source/nmbd/nmbd_incomingdgrams.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_incomingdgrams.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_incomingdgrams.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,13 +16,14 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
 #include "includes.h"
 
-extern bool found_lm_clients;
+extern BOOL found_lm_clients;
 
 #if 0
 
@@ -257,7 +258,7 @@
 	uint32 servertype = IVAL(buf,23);
 	fstring comment;
 	unstring work_name;
-	struct work_record *work = NULL;
+	struct work_record *work;
 	struct server_record *servrec;
 	unstring source_name;
 
@@ -344,7 +345,7 @@
 		 * This server is announcing it is going down. Remove it from the
 		 * workgroup.
 		 */
-		if(!is_myname(server_name) &&
+		if(!is_myname(server_name) && (work != NULL) &&
 				((servrec = find_server_in_workgroup( work, server_name))!=NULL)) {
 			remove_server_from_workgroup( work, servrec);
 		}
@@ -534,13 +535,13 @@
   Send a backup list response.
 *****************************************************************************/
 
-static void send_backup_list_response(struct subnet_record *subrec,
+static void send_backup_list_response(struct subnet_record *subrec, 
 				      struct work_record *work,
 				      struct nmb_name *send_to_name,
 				      unsigned char max_number_requested,
 				      uint32 token, struct in_addr sendto_ip,
 				      int port)
-{
+{                     
 	char outbuf[1024];
 	char *p, *countptr;
 	unsigned int count = 0;
@@ -554,9 +555,9 @@
 
 	DEBUG(3,("send_backup_list_response: sending backup list for workgroup %s to %s IP %s\n",
 		work->work_group, nmb_namestr(send_to_name), inet_ntoa(sendto_ip)));
-
+  
 	p = outbuf;
-
+  
 	SCVAL(p,0,ANN_GetBackupListResp); /* Backup list response opcode. */
 	p++;
 
@@ -565,13 +566,13 @@
 
 	SIVAL(p,0,token); /* The sender's unique info. */
 	p += 4;
-
+  
 	/* We always return at least one name - our own. */
 	count = 1;
 	unstrcpy(myname, global_myname());
 	strupper_m(myname);
 	myname[15]='\0';
-	push_ascii(p, myname, sizeof(outbuf)-PTR_DIFF(p,outbuf)-1, STR_TERMINATE);
+	push_pstring_base(p, myname, outbuf);
 
 	p = skip_string(outbuf,sizeof(outbuf),p);
 

Modified: branches/samba/upstream/source/nmbd/nmbd_incomingrequests.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_incomingrequests.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_incomingrequests.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
    This file contains all the code to process NetBIOS requests coming
    in on port 137. It does not deal with the code needed to service
@@ -58,9 +59,9 @@
 	struct in_addr owner_ip;
 	struct nmb_name *question = &nmb->question.question_name;
 	unstring qname;
-	bool bcast = nmb->header.nm_flags.bcast;
+	BOOL bcast = nmb->header.nm_flags.bcast;
 	uint16 nb_flags = get_nb_flags(nmb->additional->rdata);
-	bool group = (nb_flags & NB_GROUP) ? True : False;
+	BOOL group = (nb_flags & NB_GROUP) ? True : False;
 	struct name_record *namerec;
 	int rcode = 0;
   
@@ -88,7 +89,7 @@
 		subrec->subnet_name, inet_ntoa(owner_ip)));
   
 	/* If someone is releasing a broadcast group name, just ignore it. */
-	if( group && !ismyip_v4(owner_ip) )
+	if( group && !ismyip(owner_ip) )
 		return;
 
 	/*
@@ -98,7 +99,7 @@
 	 */
 
 	pull_ascii_nstring(qname, sizeof(qname), question->name);
-	if( !group && !ismyip_v4(owner_ip) && strequal(qname, lp_workgroup()) && 
+	if( !group && !ismyip(owner_ip) && strequal(qname, lp_workgroup()) && 
 			((question->name_type == 0x0) || (question->name_type == 0x1e))) {
 		DEBUG(6,("process_name_release_request: FTP OnNet bug workaround. Ignoring \
 group release name %s from IP %s on subnet %s with no group bit set.\n",
@@ -153,7 +154,7 @@
 {    
 	struct nmb_packet *nmb = &p->packet.nmb;
 	struct nmb_name *question = &nmb->question.question_name;
-	bool bcast = nmb->header.nm_flags.bcast;
+	BOOL bcast = nmb->header.nm_flags.bcast;
 	struct in_addr from_ip;
   
 	putip((char *)&from_ip,&nmb->additional->rdata[2]);
@@ -190,9 +191,9 @@
 {
 	struct nmb_packet *nmb = &p->packet.nmb;
 	struct nmb_name *question = &nmb->question.question_name;
-	bool bcast = nmb->header.nm_flags.bcast;
+	BOOL bcast = nmb->header.nm_flags.bcast;
 	uint16 nb_flags = get_nb_flags(nmb->additional->rdata);
-	bool group = (nb_flags & NB_GROUP) ? True : False;
+	BOOL group = (nb_flags & NB_GROUP) ? True : False;
 	struct name_record *namerec = NULL;
 	int ttl = nmb->additional->ttl;
 	struct in_addr from_ip;
@@ -331,7 +332,7 @@
  
 	/* this is not an exact calculation. the 46 is for the stats buffer
 		and the 60 is to leave room for the header etc */
-	bufend = &rdata[MAX_DGRAM_SIZE-1] - (18 + 46 + 60);
+	bufend = &rdata[MAX_DGRAM_SIZE] - (18 + 46 + 60);
 	countptr = buf = rdata;
 	buf += 1;
 	buf0 = buf;
@@ -439,12 +440,12 @@
 	struct nmb_packet *nmb = &p->packet.nmb;
 	struct nmb_name *question = &nmb->question.question_name;
 	int name_type = question->name_type;
-	bool bcast = nmb->header.nm_flags.bcast;
+	BOOL bcast = nmb->header.nm_flags.bcast;
 	int ttl=0;
 	int rcode = 0;
 	char *prdata = NULL;
 	char rdata[6];
-	bool success = False;
+	BOOL success = False;
 	struct name_record *namerec = NULL;
 	int reply_data_len = 0;
 	int i;
@@ -497,7 +498,7 @@
 			
 			if (namerec->data.source == WINS_PROXY_NAME) {
 				for( i = 0; i < namerec->data.num_ips; i++) {
-					if (same_net_v4(namerec->data.ip[i], subrec->myip, subrec->mask_ip)) {
+					if (same_net(namerec->data.ip[i], subrec->myip, subrec->mask_ip)) {
 						DEBUG(5,("process_name_query_request: name %s is a WINS proxy name and is also on the same subnet (%s) as the requestor. Not replying.\n", 
 							 nmb_namestr(&namerec->name), subrec->subnet_name ));
 						return;

Modified: branches/samba/upstream/source/nmbd/nmbd_lmhosts.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_lmhosts.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_lmhosts.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
    Revision History:
 
@@ -28,40 +29,30 @@
 Load a lmhosts file.
 ****************************************************************************/
 
-void load_lmhosts_file(const char *fname)
-{
-	char *name = NULL;
+void load_lmhosts_file(char *fname)
+{  
+	pstring name;
 	int name_type;
-	struct sockaddr_storage ss;
-	TALLOC_CTX *ctx = talloc_init("load_lmhosts_file");
+	struct in_addr ipaddr;
 	XFILE *fp = startlmhosts( fname );
 
 	if (!fp) {
 		DEBUG(2,("load_lmhosts_file: Can't open lmhosts file %s. Error was %s\n",
 			fname, strerror(errno)));
-		TALLOC_FREE(ctx);
 		return;
 	}
-
-	while (getlmhostsent(ctx, fp, &name, &name_type, &ss) ) {
-		struct in_addr ipaddr;
+   
+	while (getlmhostsent(fp, name, &name_type, &ipaddr) ) {
 		struct subnet_record *subrec = NULL;
 		enum name_source source = LMHOSTS_NAME;
 
-		if (ss.ss_family != AF_INET) {
-			TALLOC_FREE(name);
-			continue;
-		}
-
-		ipaddr = ((struct sockaddr_in *)&ss)->sin_addr;
-
 		/* We find a relevent subnet to put this entry on, then add it. */
 		/* Go through all the broadcast subnets and see if the mask matches. */
 		for (subrec = FIRST_SUBNET; subrec ; subrec = NEXT_SUBNET_EXCLUDING_UNICAST(subrec)) {
-			if(same_net_v4(ipaddr, subrec->bcast_ip, subrec->mask_ip))
+			if(same_net(ipaddr, subrec->bcast_ip, subrec->mask_ip))
 				break;
 		}
-
+  
 		/* If none match add the name to the remote_broadcast_subnet. */
 		if(subrec == NULL)
 			subrec = remote_broadcast_subnet;
@@ -75,8 +66,7 @@
 			(void)add_name_to_subnet(subrec,name,name_type,(uint16)NB_ACTIVE,PERMANENT_TTL,source,1,&ipaddr);
 		}
 	}
-
-	TALLOC_FREE(ctx);
+   
 	endlmhosts(fp);
 }
 
@@ -86,7 +76,7 @@
   subnet it will be found by normal name query processing.
 ****************************************************************************/
 
-bool find_name_in_lmhosts(struct nmb_name *nmbname, struct name_record **namerecp)
+BOOL find_name_in_lmhosts(struct nmb_name *nmbname, struct name_record **namerecp)
 {
 	struct name_record *namerec;
 

Modified: branches/samba/upstream/source/nmbd/nmbd_logonnames.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_logonnames.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_logonnames.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,12 +16,15 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
 #include "includes.h"
 
+extern struct in_addr allones_ip;
+
 extern uint16 samba_nb_type; /* Samba's NetBIOS type. */
 
 /****************************************************************************

Modified: branches/samba/upstream/source/nmbd/nmbd_mynames.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_mynames.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_mynames.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -110,11 +111,10 @@
   Also add the magic Samba names.
 **************************************************************************/
 
-bool register_my_workgroup_and_names(void)
+BOOL register_my_workgroup_and_names(void)
 {
 	struct subnet_record *subrec;
 	int i;
-	const char **cluster_addresses = NULL;
 
 	for(subrec = FIRST_SUBNET; subrec; subrec = NEXT_SUBNET_INCLUDING_UNICAST(subrec)) {
 		register_my_workgroup_one_subnet(subrec);
@@ -146,36 +146,6 @@
 	}
 
 	/*
-	 * add in any cluster addresses. We need to response to these,
-	 * but not listen on them. This allows us to run nmbd on every
-	 * node in the cluster, and have all of them register with a
-	 * WINS server correctly
-	 */
-	if (lp_clustering()) {
-		cluster_addresses = lp_cluster_addresses();
-	}
-	if (cluster_addresses) {
-		int a, n;
-		unsigned name_types[] = {0x20, 0x3, 0x0};
-		
-		for (i=0; my_netbios_names(i); i++) {
-			for(subrec = FIRST_SUBNET; subrec; subrec = subrec->next) {
-				for (n=0;n<ARRAY_SIZE(name_types);n++) {
-					struct name_record *namerec;
-					struct nmb_name nmbname;
-					struct in_addr ip;
-					make_nmb_name(&nmbname, my_netbios_names(i), name_types[n]);
-					namerec = find_name_on_subnet(unicast_subnet, &nmbname, FIND_SELF_NAME);
-					if (namerec == NULL) continue;
-					for (a=0;cluster_addresses[a];a++) {
-						add_ip_to_name_record(namerec, *interpret_addr2(&ip, cluster_addresses[a]));
-					}
-				}
-			}
-		}
-	}
-
-	/*
 	 * Add the WORKGROUP<0> and WORKGROUP<1e> group names to the unicast subnet
 	 * also for the same reasons.
 	 */

Modified: branches/samba/upstream/source/nmbd/nmbd_namelistdb.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_namelistdb.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_namelistdb.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -97,7 +98,7 @@
 
 struct name_record *find_name_on_subnet(struct subnet_record *subrec,
 				const struct nmb_name *nmbname,
-				bool self_only)
+				BOOL self_only)
 {
 	struct nmb_name uc_name;
 	struct name_record *name_ret;
@@ -139,7 +140,7 @@
 ************************************************************************/
 
 struct name_record *find_name_for_remote_broadcast_subnet(struct nmb_name *nmbname,
-						bool self_only)
+						BOOL self_only)
 {
 	struct subnet_record *subrec;
 	struct name_record *namerec;
@@ -179,7 +180,7 @@
  Add an entry to a subnet name list.
 ***********************************************************************/
 
-bool add_name_to_subnet( struct subnet_record *subrec,
+BOOL add_name_to_subnet( struct subnet_record *subrec,
 			const char *name,
 			int type,
 			uint16 nb_flags,
@@ -188,14 +189,10 @@
 			int num_ips,
 			struct in_addr *iplist)
 {
-	bool ret = False;
+	BOOL ret = False;
 	struct name_record *namerec;
 	time_t time_now = time(NULL);
 
-	if (num_ips == 0) {
-		return false;
-	}
-
 	namerec = SMB_MALLOC_P(struct name_record);
 	if( NULL == namerec ) {
 		DEBUG( 0, ( "add_name_to_subnet: malloc fail.\n" ) );
@@ -336,12 +333,12 @@
  Utility function to check if an IP address exists in a name record.
  ******************************************************************/
 
-bool find_ip_in_name_record( struct name_record *namerec, struct in_addr ip )
+BOOL find_ip_in_name_record( struct name_record *namerec, struct in_addr ip )
 {
 	int i;
 
 	for(i = 0; i < namerec->data.num_ips; i++) {
-		if(ip_equal_v4( namerec->data.ip[i], ip)) {
+		if(ip_equal( namerec->data.ip[i], ip)) {
 			return True;
 		}
 	}
@@ -394,7 +391,7 @@
 	int orig_num = namerec->data.num_ips;
 
 	for(i = 0; i < orig_num; i++) {
-		if( ip_equal_v4( remove_ip, namerec->data.ip[i]) ) {
+		if( ip_equal( remove_ip, namerec->data.ip[i]) ) {
 			remove_nth_ip_in_record( namerec, i);
 			break;
 		}

Modified: branches/samba/upstream/source/nmbd/nmbd_namequery.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_namequery.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_namequery.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -31,11 +32,11 @@
                                  struct packet_struct   *p)
 {
 	struct nmb_packet *nmb = &p->packet.nmb;
-	bool success = False;
+	BOOL success = False;
 	struct nmb_name *question_name = &rrec->packet->packet.nmb.question.question_name;
 	struct in_addr answer_ip;
 
-	zero_ip_v4(&answer_ip);
+	zero_ip(&answer_ip);
 
 	/* Ensure we don't retry the query but leave the response record cleanup
 		to the timeout code. We may get more answer responses in which case
@@ -139,7 +140,7 @@
 {
 	struct nmb_packet *sent_nmb = &rrec->packet->packet.nmb;
 	/* We can only fail here, never succeed. */
-	bool failed = True;
+	BOOL failed = True;
 	struct nmb_name *question_name = &sent_nmb->question.question_name;
 
 	if(rrec->num_msgs != 0) {
@@ -168,7 +169,7 @@
  name is not there we look for the name on the given subnet.
 ****************************************************************************/
 
-static bool query_local_namelists(struct subnet_record *subrec, struct nmb_name *nmbname,
+static BOOL query_local_namelists(struct subnet_record *subrec, struct nmb_name *nmbname,
                                   struct name_record **namerecp) 
 {
 	struct name_record *namerec;
@@ -192,7 +193,7 @@
  Try and query for a name.
 ****************************************************************************/
 
-bool query_name(struct subnet_record *subrec, const char *name, int type,
+BOOL query_name(struct subnet_record *subrec, const char *name, int type,
                    query_name_success_function success_fn,
                    query_name_fail_function fail_fn, 
                    struct userdata_struct *userdata)
@@ -254,7 +255,7 @@
  Try and query for a name from nmbd acting as a WINS server.
 ****************************************************************************/
 
-bool query_name_from_wins_server(struct in_addr ip_to, 
+BOOL query_name_from_wins_server(struct in_addr ip_to, 
                    const char *name, int type,
                    query_name_success_function success_fn,
                    query_name_fail_function fail_fn, 

Modified: branches/samba/upstream/source/nmbd/nmbd_nameregister.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_nameregister.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_nameregister.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -40,8 +41,8 @@
 	 */
 
 	struct nmb_packet *nmb = &p->packet.nmb;
-	bool bcast = nmb->header.nm_flags.bcast;
-	bool success = True;
+	BOOL bcast = nmb->header.nm_flags.bcast;
+	BOOL success = True;
 	struct nmb_name *question_name = &rrec->packet->packet.nmb.question.question_name;
 	struct nmb_name *answer_name = &nmb->answers->rr_name;
 	struct nmb_packet *sent_nmb = &rrec->packet->packet.nmb;
@@ -249,8 +250,8 @@
 	 */
 
 	struct nmb_packet *sent_nmb = &rrec->packet->packet.nmb;
-	bool bcast = sent_nmb->header.nm_flags.bcast;
-	bool success = False;
+	BOOL bcast = sent_nmb->header.nm_flags.bcast;
+	BOOL success = False;
 	struct nmb_name *question_name = &sent_nmb->question.question_name;
 	uint16 nb_flags = 0;
 	int ttl = 0;
@@ -363,7 +364,7 @@
 	tag = (const char *)userdata->data;
 
 	for (subrec = FIRST_SUBNET; subrec; subrec = NEXT_SUBNET_EXCLUDING_UNICAST(subrec)) {
-		if (ip_equal_v4(last_ip, subrec->myip)) {
+		if (ip_equal(last_ip, subrec->myip)) {
 			subrec = NEXT_SUBNET_EXCLUDING_UNICAST(subrec);
 			break;
 		}

Modified: branches/samba/upstream/source/nmbd/nmbd_namerelease.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_namerelease.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_namerelease.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -34,8 +35,8 @@
 	 * error. If we are releasing unicast, then we expect to get a response.
 	 */
 	struct nmb_packet *nmb = &p->packet.nmb;
-	bool bcast = nmb->header.nm_flags.bcast;
-	bool success = True;
+	BOOL bcast = nmb->header.nm_flags.bcast;
+	BOOL success = True;
 	struct nmb_name *question_name = &rrec->packet->packet.nmb.question.question_name;
 	struct nmb_name *answer_name = &nmb->answers->rr_name;
 	struct in_addr released_ip;
@@ -107,7 +108,7 @@
 	   doesn't respond and someone else wants the name then the
 	   normal WACK/name query from the WINS server will cope */
 	struct nmb_packet *sent_nmb = &rrec->packet->packet.nmb;
-	bool bcast = sent_nmb->header.nm_flags.bcast;
+	BOOL bcast = sent_nmb->header.nm_flags.bcast;
 	struct nmb_name *question_name = &sent_nmb->question.question_name;
 	struct in_addr released_ip;
 
@@ -150,7 +151,7 @@
 		for (i = 0; i < namerec->data.num_ips; i++) {
 			struct in_addr wins_ip = wins_srv_ip_tag(wins_tags[t], namerec->data.ip[i]);
 
-			bool last_one = ((i==namerec->data.num_ips - 1) && !wins_tags[t+1]);
+			BOOL last_one = ((i==namerec->data.num_ips - 1) && !wins_tags[t+1]);
 			if (queue_release_name(unicast_subnet,
 					       release_name_response,
 					       release_name_timeout_response,

Modified: branches/samba/upstream/source/nmbd/nmbd_nodestatus.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_nodestatus.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_nodestatus.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -77,7 +78,7 @@
  Try and do a node status to a name - given the name & IP address.
 ****************************************************************************/
  
-bool node_status(struct subnet_record *subrec, struct nmb_name *nmbname,
+BOOL node_status(struct subnet_record *subrec, struct nmb_name *nmbname,
                  struct in_addr send_ip, node_status_success_function success_fn, 
                  node_status_fail_function fail_fn, struct userdata_struct *userdata)
 {

Modified: branches/samba/upstream/source/nmbd/nmbd_packets.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_packets.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_packets.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -28,9 +29,11 @@
 
 extern int num_response_packets;
 
+extern struct in_addr loopback_ip;
+
 static void queue_packet(struct packet_struct *packet);
 
-bool rescan_listen_set = False;
+BOOL rescan_listen_set = False;
 
 
 /*******************************************************************
@@ -50,7 +53,7 @@
 	struct subnet_record *subrec;
 
 	for( subrec = FIRST_SUBNET; subrec; subrec = NEXT_SUBNET_EXCLUDING_UNICAST(subrec))
-		if(ip_equal_v4(local_ip, subrec->myip))
+		if(ip_equal(local_ip, subrec->myip))
 			return subrec->nmb_sock;
 
 	return ClientNMB;
@@ -65,7 +68,7 @@
 	struct subnet_record *subrec;
 
 	for( subrec = FIRST_SUBNET; subrec; subrec = NEXT_SUBNET_EXCLUDING_UNICAST(subrec))
-		if(ip_equal_v4(local_ip, subrec->myip))
+		if(ip_equal(local_ip, subrec->myip))
 			return subrec->dgram_sock;
 
 	return ClientDGRAM;
@@ -141,12 +144,12 @@
  Either loops back or sends out a completed NetBIOS packet.
 **************************************************************************/
 
-static bool send_netbios_packet(struct packet_struct *p)
+static BOOL send_netbios_packet(struct packet_struct *p)
 {
-	bool loopback_this_packet = False;
+	BOOL loopback_this_packet = False;
 
 	/* Check if we are sending to or from ourselves as a WINS server. */
-	if(ismyip_v4(p->ip) && (p->port == global_nmb_port))
+	if(ismyip(p->ip) && (p->port == global_nmb_port))
 		loopback_this_packet = True;
 
 	if(loopback_this_packet) {
@@ -174,7 +177,7 @@
 **************************************************************************/
 
 static struct packet_struct *create_and_init_netbios_packet(struct nmb_name *nmbname,
-                                                            bool bcast, bool rec_des,
+                                                            BOOL bcast, BOOL rec_des,
                                                             struct in_addr to_ip)
 {
 	struct packet_struct *packet = NULL;
@@ -221,14 +224,14 @@
  Sets up the common elements of register, refresh or release packet.
 **************************************************************************/
 
-static bool create_and_init_additional_record(struct packet_struct *packet,
+static BOOL create_and_init_additional_record(struct packet_struct *packet,
                                                      uint16 nb_flags,
-                                                     const struct in_addr *register_ip)
+                                                     struct in_addr *register_ip)
 {
 	struct nmb_packet *nmb = &packet->packet.nmb;
 
 	if((nmb->additional = SMB_MALLOC_P(struct res_rec)) == NULL) {
-		DEBUG(0,("create_and_init_additional_record: malloc fail for additional record.\n"));
+		DEBUG(0,("initiate_name_register_packet: malloc fail for additional record.\n"));
 		return False;
 	}
 
@@ -269,7 +272,7 @@
  Sends out a name query.
 **************************************************************************/
 
-static bool initiate_name_query_packet( struct packet_struct *packet)
+static BOOL initiate_name_query_packet( struct packet_struct *packet)
 {
 	struct nmb_packet *nmb = NULL;
 
@@ -291,7 +294,7 @@
  Sends out a name query - from a WINS server. 
 **************************************************************************/
 
-static bool initiate_name_query_packet_from_wins_server( struct packet_struct *packet)
+static BOOL initiate_name_query_packet_from_wins_server( struct packet_struct *packet)
 {   
 	struct nmb_packet *nmb = NULL;
   
@@ -313,8 +316,8 @@
  Sends out a name register.
 **************************************************************************/
 
-static bool initiate_name_register_packet( struct packet_struct *packet,
-                                    uint16 nb_flags, const struct in_addr *register_ip)
+static BOOL initiate_name_register_packet( struct packet_struct *packet,
+                                    uint16 nb_flags, struct in_addr *register_ip)
 {
 	struct nmb_packet *nmb = &packet->packet.nmb;
 
@@ -337,7 +340,7 @@
  Sends out a multihomed name register.
 **************************************************************************/
 
-static bool initiate_multihomed_name_register_packet(struct packet_struct *packet,
+static BOOL initiate_multihomed_name_register_packet(struct packet_struct *packet,
 						     uint16 nb_flags, struct in_addr *register_ip)
 {
 	struct nmb_packet *nmb = &packet->packet.nmb;
@@ -365,7 +368,7 @@
  Sends out a name refresh.
 **************************************************************************/
 
-static bool initiate_name_refresh_packet( struct packet_struct *packet,
+static BOOL initiate_name_refresh_packet( struct packet_struct *packet,
                                    uint16 nb_flags, struct in_addr *refresh_ip)
 {
 	struct nmb_packet *nmb = &packet->packet.nmb;
@@ -389,7 +392,7 @@
  Sends out a name release.
 **************************************************************************/
 
-static bool initiate_name_release_packet( struct packet_struct *packet,
+static BOOL initiate_name_release_packet( struct packet_struct *packet,
                                    uint16 nb_flags, struct in_addr *release_ip)
 {
 	struct nmb_packet *nmb = &packet->packet.nmb;
@@ -413,7 +416,7 @@
  Sends out a node status.
 **************************************************************************/
 
-static bool initiate_node_status_packet( struct packet_struct *packet )
+static BOOL initiate_node_status_packet( struct packet_struct *packet )
 {
 	struct nmb_packet *nmb = &packet->packet.nmb;
 
@@ -442,7 +445,7 @@
  broadcast subnet.
 ****************************************************************************/
 
-static bool assert_check_subnet(struct subnet_record *subrec)
+static BOOL assert_check_subnet(struct subnet_record *subrec)
 {
 	if( subrec == remote_broadcast_subnet) {
 		DEBUG(0,("assert_check_subnet: Attempt to send packet on remote broadcast subnet. \
@@ -467,8 +470,7 @@
 {
 	struct packet_struct *p;
 	struct response_record *rrec;
-	struct sockaddr_storage ss;
-	const struct sockaddr_storage *pss = NULL;
+
 	if(assert_check_subnet(subrec))
 		return NULL;
 
@@ -477,21 +479,12 @@
 				subrec->bcast_ip)) == NULL)
 		return NULL;
 
-	in_addr_to_sockaddr_storage(&ss, subrec->bcast_ip);
-	pss = iface_ip(&ss);
-	if (!pss || pss->ss_family != AF_INET) {
+	if(initiate_name_register_packet( p, nb_flags, iface_ip(subrec->bcast_ip)) == False) {
 		p->locked = False;
 		free_packet(p);
 		return NULL;
 	}
 
-	if(initiate_name_register_packet(p, nb_flags,
-			&((const struct sockaddr_in *)pss)->sin_addr) == False) {
-		p->locked = False;
-		free_packet(p);
-		return NULL;
-	}
-
 	if((rrec = make_response_record(subrec,        /* subnet record. */
 				p,                     /* packet we sent. */
 				resp_fn,               /* function to call on response. */
@@ -587,7 +580,7 @@
 {
 	struct packet_struct *p;
 	struct response_record *rrec;
-	bool ret;
+	BOOL ret;
 	
 	/* Sanity check. */
 	if(subrec != unicast_subnet) {
@@ -706,7 +699,7 @@
   
 	/* queries to the WINS server turn up here as queries to IP 0.0.0.0 
 			These need to be handled a bit differently */
-	if (subrec->type == UNICAST_SUBNET && is_zero_ip_v4(to_ip)) {
+	if (subrec->type == UNICAST_SUBNET && is_zero_ip(to_ip)) {
 		/* What we really need to do is loop over each of our wins
 		 * servers and wins server tags here, but that just doesn't
 		 * fit our architecture at the moment (userdata may already
@@ -732,14 +725,14 @@
 
 		DEBUG(10,("queue_query_name: bind_interfaces_only is set, looking for suitable source IP\n"));
 		for(i = 0; i < iface_count(); i++) {
-			const struct in_addr *ifip = iface_n_ip_v4(i);
+			struct in_addr *ifip = iface_n_ip(i);
 
-			if (ifip == NULL) {
+			if(ifip == NULL) {
 				DEBUG(0,("queue_query_name: interface %d has NULL IP address !\n", i));
 				continue;
 			}
 
-			if (is_loopback_ip_v4(*ifip)) {
+			if (ip_equal(*ifip,loopback_ip)) {
 				DEBUG(5,("queue_query_name: ignoring loopback interface (%d)\n", i));
 				continue;
 			}
@@ -774,7 +767,7 @@
 /****************************************************************************
  Queue a query name packet to a given address from the WINS subnet.
 ****************************************************************************/
-
+ 
 struct response_record *queue_query_name_from_wins_server( struct in_addr to_ip,
                           response_function resp_fn,
                           timeout_response_function timeout_fn,
@@ -813,7 +806,7 @@
 /****************************************************************************
  Queue a node status packet to a given name and address.
 ****************************************************************************/
-
+ 
 struct response_record *queue_node_status( struct subnet_record *subrec,
                           response_function resp_fn,
                           timeout_response_function timeout_fn,
@@ -843,7 +836,7 @@
 		p->locked = False;
 		free_packet(p);
 		return NULL;
-	}
+	} 
 
 	if((rrec = make_response_record(subrec,           /* subnet record. */
 					p,                     /* packet we sent. */
@@ -872,14 +865,14 @@
 	struct nmb_packet *nmb = NULL;
 	struct res_rec answers;
 	struct nmb_packet *orig_nmb = &orig_packet->packet.nmb;
-	bool loopback_this_packet = False;
+	BOOL loopback_this_packet = False;
 	int rr_type = RR_TYPE_NB;
 	const char *packet_type = "unknown";
-
+  
 	/* Check if we are sending to or from ourselves. */
-	if(ismyip_v4(orig_packet->ip) && (orig_packet->port == global_nmb_port))
+	if(ismyip(orig_packet->ip) && (orig_packet->port == global_nmb_port))
 		loopback_this_packet = True;
-
+  
 	nmb = &packet.packet.nmb;
 
 	/* Do a partial copy of the packet. We clear the locked flag and
@@ -952,23 +945,23 @@
 	nmb->header.nm_flags.bcast = False;
 	nmb->header.nm_flags.trunc = False;
 	nmb->header.nm_flags.authoritative = True;
-
+  
 	nmb->header.rcode = rcode;
 	nmb->header.qdcount = 0;
 	nmb->header.ancount = 1;
 	nmb->header.nscount = 0;
 	nmb->header.arcount = 0;
-
+  
 	memset((char*)&nmb->question,'\0',sizeof(nmb->question));
-
+  
 	nmb->answers = &answers;
 	memset((char*)nmb->answers,'\0',sizeof(*nmb->answers));
-
+  
 	nmb->answers->rr_name  = orig_nmb->question.question_name;
 	nmb->answers->rr_type  = rr_type;
 	nmb->answers->rr_class = RR_CLASS_IN;
 	nmb->answers->ttl      = ttl;
-
+  
 	if (data && len) {
 		if (len < 0 || len > sizeof(nmb->answers->rdata)) {
 			DEBUG(5,("reply_netbios_packet: "
@@ -979,7 +972,7 @@
 		nmb->answers->rdlength = len;
 		memcpy(nmb->answers->rdata, data, len);
 	}
-
+  
 	packet.packet_type = NMB_PACKET;
 	/* Ensure we send out on the same fd that the original
 		packet came in on to give the correct source IP address. */
@@ -987,7 +980,7 @@
 	packet.timestamp = time(NULL);
 
 	debug_nmb_packet(&packet);
-
+  
 	if(loopback_this_packet) {
 		struct packet_struct *lo_packet;
 		DEBUG(5,("reply_netbios_packet: sending packet to ourselves.\n"));
@@ -1014,9 +1007,9 @@
 		packet_queue = packet;
 		return;
 	}
-
+  
 	/* find the bottom */
-	for (p=packet_queue;p->next;p=p->next)
+	for (p=packet_queue;p->next;p=p->next) 
 		;
 
 	p->next = packet;
@@ -1034,7 +1027,7 @@
 
 	/* Go through all the broadcast subnets and see if the mask matches. */
 	for (subrec = FIRST_SUBNET; subrec ; subrec = NEXT_SUBNET_EXCLUDING_UNICAST(subrec)) {
-		if(same_net_v4(p->ip, subrec->bcast_ip, subrec->mask_ip))
+		if(same_net(p->ip, subrec->bcast_ip, subrec->mask_ip))
 			return subrec;
 	}
 
@@ -1118,7 +1111,7 @@
 			process_master_browser_announce(subrec, p, buf+1);
 			break;
 		case ANN_BecomeBackup:
-			/*
+			/* 
 			 * We don't currently implement this. Log it just in case.
 			 */
 			debug_browse_data(buf, len);
@@ -1132,7 +1125,7 @@
 command code %d from %s IP %s to %s\n", subrec->subnet_name, command, nmb_namestr(&dgram->source_name),
 				inet_ntoa(p->ip), nmb_namestr(&dgram->dest_name)));
 			break;
-	}
+	} 
 }
 
 /****************************************************************************
@@ -1185,12 +1178,12 @@
   stage as subsequent processing is expensive. 
 ****************************************************************************/
 
-static bool listening(struct packet_struct *p,struct nmb_name *nbname)
+static BOOL listening(struct packet_struct *p,struct nmb_name *nbname)
 {
 	struct subnet_record *subrec = NULL;
 
 	for (subrec = FIRST_SUBNET; subrec ; subrec = NEXT_SUBNET_EXCLUDING_UNICAST(subrec)) {
-		if(same_net_v4(p->ip, subrec->bcast_ip, subrec->mask_ip))
+		if(same_net(p->ip, subrec->bcast_ip, subrec->mask_ip))
 			break;
 	}
 
@@ -1313,9 +1306,9 @@
   Validate a response nmb packet.
 ****************************************************************************/
 
-static bool validate_nmb_response_packet( struct nmb_packet *nmb )
+static BOOL validate_nmb_response_packet( struct nmb_packet *nmb )
 {
-	bool ignore = False;
+	BOOL ignore = False;
 
 	switch (nmb->header.opcode) {
 		case NMB_NAME_REG_OPCODE:
@@ -1359,14 +1352,14 @@
 
 	return ignore;
 }
-
+ 
 /****************************************************************************
   Validate a request nmb packet.
 ****************************************************************************/
 
-static bool validate_nmb_packet( struct nmb_packet *nmb )
+static BOOL validate_nmb_packet( struct nmb_packet *nmb )
 {
-	bool ignore = False;
+	BOOL ignore = False;
 
 	switch (nmb->header.opcode) {
 		case NMB_NAME_REG_OPCODE:
@@ -1453,7 +1446,7 @@
 
 	/* Go through all the broadcast subnets and see if the mask matches. */
 	for (subrec = FIRST_SUBNET; subrec ; subrec = NEXT_SUBNET_EXCLUDING_UNICAST(subrec)) {
-		if(same_net_v4(p->ip, subrec->bcast_ip, subrec->mask_ip))
+		if(same_net(p->ip, subrec->bcast_ip, subrec->mask_ip))
 			return subrec;
 	}
 
@@ -1524,7 +1517,7 @@
 					break;
 			}
 			break;
-
+      
 		case NMB_NAME_RELEASE_OPCODE:
 			if(subrec == wins_server_subnet)
 				wins_process_name_release_request(subrec, p);
@@ -1563,7 +1556,7 @@
 	rrec->num_msgs++;
 	/* Ensure we don't re-send the request. */
 	rrec->repeat_count = 0;
-
+  
 	/* Call the response received function for this packet. */
 	(*rrec->resp_fn)(subrec, rrec, p);
 }
@@ -1596,7 +1589,7 @@
 		}
 		free_packet(p);
 	}
-}
+} 
 
 /*******************************************************************
  Retransmit or timeout elements from all the outgoing subnet response
@@ -1617,7 +1610,7 @@
 
 		for (rrec = subrec->responselist; rrec; rrec = nextrrec) {
 			nextrrec = rrec->next;
-
+   
 			if (rrec->repeat_time <= t) {
 				if (rrec->repeat_count > 0) {
 					/* Resend while we have a non-zero repeat_count. */
@@ -1668,7 +1661,7 @@
   plus the broadcast sockets.
 ***************************************************************************/
 
-static bool create_listen_fdset(fd_set **ppset, int **psock_array, int *listen_number, int *maxfd)
+static BOOL create_listen_fdset(fd_set **ppset, int **psock_array, int *listen_number, int *maxfd)
 {
 	int *sock_array = NULL;
 	struct subnet_record *subrec = NULL;
@@ -1731,7 +1724,7 @@
 
 	*ppset = pset;
 	*psock_array = sock_array;
-
+ 
 	return False;
 }
 
@@ -1740,7 +1733,7 @@
   return True if the socket is dead
 ***************************************************************************/
 
-bool listen_for_packets(bool run_election)
+BOOL listen_for_packets(BOOL run_election)
 {
 	static fd_set *listen_set = NULL;
 	static int listen_number = 0;
@@ -1748,8 +1741,7 @@
 	int i;
 	static int maxfd = 0;
 
-	fd_set r_fds;
-	fd_set w_fds;
+	fd_set fds;
 	int selrtn;
 	struct timeval timeout;
 #ifndef SYNC_DNS
@@ -1764,18 +1756,17 @@
 		rescan_listen_set = False;
 	}
 
-	memcpy((char *)&r_fds, (char *)listen_set, sizeof(fd_set));
-	FD_ZERO(&w_fds);
+	memcpy((char *)&fds, (char *)listen_set, sizeof(fd_set));
 
 #ifndef SYNC_DNS
 	dns_fd = asyncdns_fd();
 	if (dns_fd != -1) {
-		FD_SET(dns_fd, &r_fds);
+		FD_SET(dns_fd, &fds);
 		maxfd = MAX( maxfd, dns_fd);
 	}
 #endif
 
-	/*
+	/* 
 	 * During elections and when expecting a netbios response packet we
 	 * need to send election packets at tighter intervals.
 	 * Ideally it needs to be the interval (in ms) between time now and
@@ -1785,24 +1776,11 @@
 	timeout.tv_sec = (run_election||num_response_packets) ? 1 : NMBD_SELECT_LOOP;
 	timeout.tv_usec = 0;
 
-	{
-		struct timeval now = timeval_current();
-		event_add_to_select_args(nmbd_event_context(), &now,
-					 &r_fds, &w_fds, &timeout, &maxfd);
-	}
-
-	if (timeval_is_zero(&timeout)) {
-		/* Process a timed event now... */
-		if (run_events(nmbd_event_context(), 0, NULL, NULL)) {
-			return False;
-		}
-	}
-
 	/* Prepare for the select - allow certain signals. */
 
 	BlockSignals(False, SIGTERM);
 
-	selrtn = sys_select(maxfd+1,&r_fds,&w_fds,NULL,&timeout);
+	selrtn = sys_select(maxfd+1,&fds,NULL,NULL,&timeout);
 
 	/* We can only take signals when we are in the select - block them again here. */
 
@@ -1812,12 +1790,8 @@
 		return False;
 	}
 
-	if (run_events(nmbd_event_context(), selrtn, &r_fds, &w_fds)) {
-		return False;
-	}
-
 #ifndef SYNC_DNS
-	if (dns_fd != -1 && FD_ISSET(dns_fd,&r_fds)) {
+	if (dns_fd != -1 && FD_ISSET(dns_fd,&fds)) {
 		run_dns_queue();
 	}
 #endif
@@ -1825,7 +1799,7 @@
 	for(i = 0; i < listen_number; i++) {
 		if (i < (listen_number/2)) {
 			/* Processing a 137 socket. */
-			if (FD_ISSET(sock_array[i],&r_fds)) {
+			if (FD_ISSET(sock_array[i],&fds)) {
 				struct packet_struct *packet = read_packet(sock_array[i], NMB_PACKET);
 				if (packet) {
 					/*
@@ -1833,12 +1807,12 @@
 					 * only is set then check it came from one of our local nets. 
 					 */
 					if(lp_bind_interfaces_only() && (sock_array[i] == ClientNMB) && 
-								(!is_local_net_v4(packet->ip))) {
+								(!is_local_net(packet->ip))) {
 						DEBUG(7,("discarding nmb packet sent to broadcast socket from %s:%d\n",
 							inet_ntoa(packet->ip),packet->port));	  
 						free_packet(packet);
-					} else if ((is_loopback_ip_v4(packet->ip) || 
-								ismyip_v4(packet->ip)) && packet->port == global_nmb_port &&
+					} else if ((ip_equal(loopback_ip, packet->ip) || 
+								ismyip(packet->ip)) && packet->port == global_nmb_port &&
 								packet->packet.nmb.header.nm_flags.bcast) {
 						DEBUG(7,("discarding own bcast packet from %s:%d\n",
 							inet_ntoa(packet->ip),packet->port));	  
@@ -1852,7 +1826,7 @@
 			}
 		} else {
 			/* Processing a 138 socket. */
-				if (FD_ISSET(sock_array[i],&r_fds)) {
+				if (FD_ISSET(sock_array[i],&fds)) {
 				struct packet_struct *packet = read_packet(sock_array[i], DGRAM_PACKET);
 				if (packet) {
 					/*
@@ -1860,12 +1834,12 @@
 					 * only is set then check it came from one of our local nets. 
 					 */
 					if(lp_bind_interfaces_only() && (sock_array[i] == ClientDGRAM) && 
-								(!is_local_net_v4(packet->ip))) {
+								(!is_local_net(packet->ip))) {
 						DEBUG(7,("discarding dgram packet sent to broadcast socket from %s:%d\n",
 						inet_ntoa(packet->ip),packet->port));	  
 						free_packet(packet);
-					} else if ((is_loopback_ip_v4(packet->ip) || 
-							ismyip_v4(packet->ip)) && packet->port == DGRAM_PORT) {
+					} else if ((ip_equal(loopback_ip, packet->ip) || 
+							ismyip(packet->ip)) && packet->port == DGRAM_PORT) {
 						DEBUG(7,("discarding own dgram packet from %s:%d\n",
 							inet_ntoa(packet->ip),packet->port));	  
 						free_packet(packet);
@@ -1885,13 +1859,13 @@
   Construct and send a netbios DGRAM.
 **************************************************************************/
 
-bool send_mailslot(bool unique, const char *mailslot,char *buf, size_t len,
+BOOL send_mailslot(BOOL unique, const char *mailslot,char *buf, size_t len,
                    const char *srcname, int src_type,
                    const char *dstname, int dest_type,
                    struct in_addr dest_ip,struct in_addr src_ip,
 		   int dest_port)
 {
-	bool loopback_this_packet = False;
+	BOOL loopback_this_packet = False;
 	struct packet_struct p;
 	struct dgram_packet *dgram = &p.packet.dgram;
 	char *ptr,*p2;
@@ -1899,13 +1873,13 @@
 
 	memset((char *)&p,'\0',sizeof(p));
 
-	if(ismyip_v4(dest_ip) && (dest_port == DGRAM_PORT)) /* Only if to DGRAM_PORT */
+	if(ismyip(dest_ip) && (dest_port == DGRAM_PORT)) /* Only if to DGRAM_PORT */
 		loopback_this_packet = True;
 
 	/* generate_name_trn_id(); */ /* Not used, so gone, RJS */
 
 	/* DIRECT GROUP or UNIQUE datagram. */
-	dgram->header.msg_type = unique ? 0x10 : 0x11;
+	dgram->header.msg_type = unique ? 0x10 : 0x11; 
 	dgram->header.flags.node_type = M_NODE;
 	dgram->header.flags.first = True;
 	dgram->header.flags.more = False;
@@ -1914,7 +1888,7 @@
 	dgram->header.source_port = DGRAM_PORT;
 	dgram->header.dgm_length = 0; /* Let build_dgram() handle this. */
 	dgram->header.packet_offset = 0;
-
+  
 	make_nmb_name(&dgram->source_name,srcname,src_type);
 	make_nmb_name(&dgram->dest_name,dstname,dest_type);
 
@@ -1926,10 +1900,10 @@
 
 	if (smb_size + 17*2 + strlen(mailslot) + 1 + len > MAX_DGRAM_SIZE) {
 		DEBUG(0, ("send_mailslot: Cannot write beyond end of packet\n"));
-		return false;
+		return False;
 	}
 
-	cli_set_message(ptr,17,strlen(mailslot) + 1 + len,True);
+	set_message(ptr,17,strlen(mailslot) + 1 + len,True);
 	memcpy(ptr,tmp,4);
 
 	SCVAL(ptr,smb_com,SMBtrans);
@@ -1943,7 +1917,7 @@
 	p2 = smb_buf(ptr);
 	safe_strcpy_base(p2, mailslot, dgram->data, sizeof(dgram->data));
 	p2 = skip_string(ptr,MAX_DGRAM_SIZE,p2);
-
+  
 	if (((p2+len) > dgram->data+sizeof(dgram->data)) || ((p2+len) < p2)) {
 		DEBUG(0, ("send_mailslot: Cannot write beyond end of packet\n"));
 		return False;

Modified: branches/samba/upstream/source/nmbd/nmbd_processlogon.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_processlogon.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_processlogon.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
    Revision History:
 
@@ -32,6 +33,32 @@
 };
 
 /****************************************************************************
+Send a message to smbd to do a sam delta sync
+**************************************************************************/
+
+static void send_repl_message(uint32 low_serial)
+{
+        TDB_CONTEXT *tdb;
+
+        tdb = tdb_open_log(lock_path("connections.tdb"), 0,
+                           TDB_DEFAULT, O_RDONLY, 0);
+
+        if (!tdb) {
+                DEBUG(3, ("send_repl_message(): failed to open connections "
+                          "database\n"));
+                return;
+        }
+
+        DEBUG(3, ("sending replication message, serial = 0x%04x\n", 
+                  low_serial));
+        
+        message_send_all(tdb, MSG_SMB_SAM_REPL, &low_serial,
+                         sizeof(low_serial), False, NULL);
+
+        tdb_close(tdb);
+}
+
+/****************************************************************************
 Process a domain logon packet
 **************************************************************************/
 
@@ -39,35 +66,21 @@
                           const char *mailslot)
 {
 	struct dgram_packet *dgram = &p->packet.dgram;
-	fstring my_name;
+	pstring my_name;
 	fstring reply_name;
-	char outbuf[1024];
+	pstring outbuf;
 	int code;
 	uint16 token = 0;
 	uint32 ntversion = 0;
 	uint16 lmnttoken = 0;
 	uint16 lm20token = 0;
 	uint32 domainsidsize;
-	bool short_request = False;
+	BOOL short_request = False;
 	char *getdc;
 	char *uniuser; /* Unicode user name. */
-	fstring ascuser;
+	pstring ascuser;
 	char *unicomp; /* Unicode computer name. */
-	size_t size;
-	struct sockaddr_storage ss;
-	const struct sockaddr_storage *pss;
-	struct in_addr ip;
 
-	in_addr_to_sockaddr_storage(&ss, p->ip);
-	pss = iface_ip(&ss);
-	if (!pss) {
-		DEBUG(5,("process_logon_packet:can't find outgoing interface "
-			"for packet from IP %s\n",
-			inet_ntoa(p->ip) ));
-		return;
-	}
-	ip = ((struct sockaddr_in *)pss)->sin_addr;
-
 	memset(outbuf, 0, sizeof(outbuf));
 
 	if (!lp_domain_logons()) {
@@ -76,13 +89,13 @@
 		return;
 	}
 
-	fstrcpy(my_name, global_myname());
+	pstrcpy(my_name, global_myname());
 
 	code = get_safe_SVAL(buf,len,buf,0,-1);
 	DEBUG(4,("process_logon_packet: Logon from %s: code = 0x%x\n", inet_ntoa(p->ip), code));
 
 	switch (code) {
-		case 0:
+		case 0:    
 			{
 				fstring mach_str, user_str, getdc_str;
 				char *q = buf + 2;
@@ -107,7 +120,7 @@
 				}
 				token = SVAL(q,3);
 
-				fstrcpy(reply_name,my_name);
+				fstrcpy(reply_name,my_name); 
 
 				pull_ascii_fstring(mach_str, machine);
 				pull_ascii_fstring(user_str, user);
@@ -122,25 +135,22 @@
 
 				fstrcpy(reply_name, "\\\\");
 				fstrcat(reply_name, my_name);
-				size = push_ascii(q,reply_name,
+				push_ascii(q,reply_name,
 						sizeof(outbuf)-PTR_DIFF(q, outbuf),
 						STR_TERMINATE);
-				if (size == (size_t)-1) {
-					return;
-				}
 				q = skip_string(outbuf,sizeof(outbuf),q); /* PDC name */
 
 				SSVAL(q, 0, token);
 				q += 2;
 
-				dump_data(4, (uint8 *)outbuf, PTR_DIFF(q, outbuf));
+				dump_data(4, outbuf, PTR_DIFF(q, outbuf));
 
-				send_mailslot(True, getdc_str,
+				send_mailslot(True, getdc_str, 
 						outbuf,PTR_DIFF(q,outbuf),
 						global_myname(), 0x0,
 						mach_str,
 						dgram->source_name.name_type,
-						p->ip, ip, p->port);
+						p->ip, *iface_ip(p->ip), p->port);  
 				break;
 			}
 
@@ -151,7 +161,7 @@
 				char *q = buf + 2;
 				char *machine = q;
 
-				if (!lp_domain_master()) {
+				if (!lp_domain_master()) {  
 					/* We're not Primary Domain Controller -- ignore this */
 					return;
 				}
@@ -223,12 +233,9 @@
 				q += 2;
 
 				fstrcpy(reply_name,my_name);
-				size = push_ascii(q, reply_name,
+				push_ascii(q, reply_name,
 						sizeof(outbuf)-PTR_DIFF(q, outbuf),
 						STR_TERMINATE);
-				if (size == (size_t)-1) {
-					return;
-				}
 				q = skip_string(outbuf,sizeof(outbuf),q); /* PDC name */
 
 				/* PDC and domain name */
@@ -261,7 +268,7 @@
 					QUERYFORPDC_R, (uint32)ntversion, (uint32)lmnttoken,
 					(uint32)lm20token ));
 
-				dump_data(4, (uint8 *)outbuf, PTR_DIFF(q, outbuf));
+				dump_data(4, outbuf, PTR_DIFF(q, outbuf));
 
 				pull_ascii_fstring(getdc_str, getdc);
 				pull_ascii_nstring(source_name, sizeof(source_name), dgram->source_name.name);
@@ -271,7 +278,7 @@
 					global_myname(), 0x0,
 					source_name,
 					dgram->source_name.name_type,
-					p->ip, ip, p->port);
+					p->ip, *iface_ip(p->ip), p->port);  
 				return;
 			}
 
@@ -355,7 +362,7 @@
 				 * database. If it isn't then we let smbd send an appropriate error.
 				 * Let's ignore the SID.
 				 */
-				pull_ucs2_fstring(ascuser, uniuser);
+				pull_ucs2_pstring(ascuser, uniuser);
 				pull_ucs2_fstring(asccomp, unicomp);
 				DEBUG(5,("process_logon_packet: SAMLOGON user %s\n", ascuser));
 
@@ -394,26 +401,16 @@
 				else {
 					struct GUID domain_guid;
 					UUID_FLAT flat_guid;
-					char *domain;
-					char *hostname;
+					pstring domain;
+					pstring hostname;
 					char *component, *dc, *q1;
+					uint8 size;
 					char *q_orig = q;
 					int str_offset;
-					char *saveptr;
 
-					domain = get_mydnsdomname(talloc_tos());
-					if (!domain) {
-						DEBUG(2,
-						("get_mydnsdomname failed.\n"));
-						return;
-					}
-					hostname = get_myname(talloc_tos());
-					if (!hostname) {
-						DEBUG(2,
-						("get_myname failed.\n"));
-						return;
-					}
-
+					get_mydnsdomname(domain);
+					get_myname(hostname);
+	
 					if (sizeof(outbuf) - PTR_DIFF(q, outbuf) < 8) {
 						return;
 					}
@@ -424,8 +421,8 @@
 					}
 					q += 4;
 
-					SIVAL(q, 0, NBT_SERVER_PDC|NBT_SERVER_GC|NBT_SERVER_LDAP|NBT_SERVER_DS|
-						NBT_SERVER_KDC|NBT_SERVER_TIMESERV|NBT_SERVER_CLOSEST|NBT_SERVER_WRITABLE);
+					SIVAL(q, 0, ADS_PDC|ADS_GC|ADS_LDAP|ADS_DS|
+						ADS_KDC|ADS_TIMESERV|ADS_CLOSEST|ADS_WRITABLE);
 					q += 4;
 
 					/* Push Domain GUID */
@@ -445,7 +442,7 @@
 					str_offset = q - q_orig;
 					dc = domain;
 					q1 = q;
-					while ((component = strtok_r(dc, ".", &saveptr)) != NULL) {
+					while ((component = strtok(dc, "."))) {
 						dc = NULL;
 						if (sizeof(outbuf) - PTR_DIFF(q, outbuf) < 1) {
 							return;
@@ -453,7 +450,7 @@
 						size = push_ascii(&q[1], component,
 							sizeof(outbuf) - PTR_DIFF(q+1, outbuf),
 							0);
-						if (size == (size_t)-1 || size > 0xff) {
+						if (size == (uint8)-1) {
 							return;
 						}
 						SCVAL(q, 0, size);
@@ -476,7 +473,7 @@
 					size = push_ascii(&q[1], hostname,
 							sizeof(outbuf) - PTR_DIFF(q+1, outbuf),
 							0);
-					if (size == (size_t)-1 || size > 0xff) {
+					if (size == (uint8)-1) {
 						return;
 					}
 					SCVAL(q, 0, size);
@@ -494,7 +491,7 @@
 					size = push_ascii(&q[1], lp_workgroup(),
 							sizeof(outbuf) - PTR_DIFF(q+1, outbuf),
 							STR_UPPER);
-					if (size == (size_t)-1 || size > 0xff) {
+					if (size == (uint8)-1) {
 						return;
 					}
 					SCVAL(q, 0, size);
@@ -504,7 +501,6 @@
 					if (sizeof(outbuf) - PTR_DIFF(q, outbuf) < 2) {
 						return;
 					}
-
 					SCVAL(q, 0, 0);
 					q++;
 
@@ -512,7 +508,7 @@
 					size = push_ascii(&q[1], my_name,
 							sizeof(outbuf) - PTR_DIFF(q+1, outbuf),
 							0);
-					if (size == (size_t)-1 || size > 0xff) {
+					if (size == (uint8)-1) {
 						return;
 					}
 					SCVAL(q, 0, size);
@@ -522,7 +518,6 @@
 					if (sizeof(outbuf) - PTR_DIFF(q, outbuf) < 4) {
 						return;
 					}
-
 					SCVAL(q, 0, 0);
 					q++;
 
@@ -531,7 +526,7 @@
 						size = push_ascii(&q[1], ascuser,
 							sizeof(outbuf) - PTR_DIFF(q+1, outbuf),
 							0);
-						if (size == (size_t)-1 || size > 0xff) {
+						if (size == (uint8)-1) {
 							return;
 						}
 						SCVAL(q, 0, size);
@@ -546,7 +541,7 @@
 					size = push_ascii(&q[1], "Default-First-Site-Name",
 							sizeof(outbuf) - PTR_DIFF(q+1, outbuf),
 							0);
-					if (size == (size_t)-1 || size > 0xff) {
+					if (size == (uint8)-1) {
 						return;
 					}
 					SCVAL(q, 0, size);
@@ -567,13 +562,13 @@
 
 					SIVAL(q, 0, 0x00000002);
 					q += 4; /* unknown */
-					SIVAL(q, 0, ntohl(ip.s_addr));
+					SIVAL(q, 0, (iface_ip(p->ip))->s_addr);
 					q += 4;
 					SIVAL(q, 0, 0x00000000);
 					q += 4; /* unknown */
 					SIVAL(q, 0, 0x00000000);
 					q += 4; /* unknown */
-				}
+				}	
 #endif
 
 				if (sizeof(outbuf) - PTR_DIFF(q, outbuf) < 8) {
@@ -583,11 +578,11 @@
 				/* tell the client what version we are */
 				SIVAL(q, 0, ((ntversion < 11) || (SEC_ADS != lp_security())) ? 1 : 13); 
 				/* our ntversion */
-				SSVAL(q, 4, 0xffff); /* our lmnttoken */
+				SSVAL(q, 4, 0xffff); /* our lmnttoken */ 
 				SSVAL(q, 6, 0xffff); /* our lm20token */
 				q += 8;
 
-				dump_data(4, (uint8 *)outbuf, PTR_DIFF(q, outbuf));
+				dump_data(4, outbuf, PTR_DIFF(q, outbuf));
 
 				pull_ascii_fstring(getdc_str, getdc);
 				pull_ascii_nstring(source_name, sizeof(source_name), dgram->source_name.name);
@@ -597,7 +592,7 @@
 					global_myname(), 0x0,
 					source_name,
 					dgram->source_name.name_type,
-					p->ip, ip, p->port);
+					p->ip, *iface_ip(p->ip), p->port);  
 				break;
 			}
 
@@ -605,9 +600,103 @@
 		replication event is required. */
 
 		case SAM_UAS_CHANGE:
-			DEBUG(5, ("Got SAM_UAS_CHANGE\n"));
-			break;
+			{
+				struct sam_database_info *db_info;
+				char *q = buf + 2;
+				int i, db_count;
+				uint32 low_serial;
+          
+				/* Header */
+          
+				if (PTR_DIFF(q + 16, buf) >= len) {
+					DEBUG(0,("process_logon_packet: bad packet\n"));
+					return;
+				}
 
+				low_serial = IVAL(q, 0); q += 4;     /* Low serial number */
+
+				q += 4;                   /* Date/time */
+				q += 4;                   /* Pulse */
+				q += 4;                   /* Random */
+          
+				/* Domain info */
+          
+				q = skip_string(buf,len,q);    /* PDC name */
+
+				if (!q || PTR_DIFF(q, buf) >= len) {
+					DEBUG(0,("process_logon_packet: bad packet\n"));
+					return;
+				}
+
+				q = skip_string(buf,len,q);    /* Domain name */
+
+				if (!q || PTR_DIFF(q, buf) >= len) {
+					DEBUG(0,("process_logon_packet: bad packet\n"));
+					return;
+				}
+
+				q = skip_unibuf(q, PTR_DIFF(buf + len, q)); /* Unicode PDC name */
+
+				if (PTR_DIFF(q, buf) >= len) {
+					DEBUG(0,("process_logon_packet: bad packet\n"));
+					return;
+				}
+
+				q = skip_unibuf(q, PTR_DIFF(buf + len, q)); /* Unicode domain name */
+          
+				/* Database info */
+          
+				if (PTR_DIFF(q + 2, buf) >= len) {
+					DEBUG(0,("process_logon_packet: bad packet\n"));
+					return;
+				}
+
+				db_count = SVAL(q, 0); q += 2;
+
+				if (PTR_DIFF(q + (db_count*20), buf) >= len) {
+					DEBUG(0,("process_logon_packet: bad packet\n"));
+					return;
+				}
+
+				db_info = SMB_MALLOC_ARRAY(struct sam_database_info, db_count);
+
+				if (db_info == NULL) {
+					DEBUG(3, ("out of memory allocating info for %d databases\n", db_count));
+					return;
+				}
+          
+				for (i = 0; i < db_count; i++) {
+					db_info[i].index = IVAL(q, 0);
+					db_info[i].serial_lo = IVAL(q, 4);
+					db_info[i].serial_hi = IVAL(q, 8);
+					db_info[i].date_lo = IVAL(q, 12);
+					db_info[i].date_hi = IVAL(q, 16);
+					q += 20;
+				}
+
+				/* Domain SID */
+
+#if 0
+				/* We must range check this. */
+				q += IVAL(q, 0) + 4;  /* 4 byte length plus data */
+          
+				q += 2;               /* Alignment? */
+
+				/* Misc other info */
+
+				q += 4;               /* NT version (0x1) */
+				q += 2;               /* LMNT token (0xff) */
+				q += 2;               /* LM20 token (0xff) */
+#endif
+
+				SAFE_FREE(db_info);        /* Not sure whether we need to do anything useful with these */
+
+				/* Send message to smbd */
+
+				send_repl_message(low_serial);
+				break;
+			}
+
 		default:
 			DEBUG(3,("process_logon_packet: Unknown domain request %d\n",code));
 			return;

Modified: branches/samba/upstream/source/nmbd/nmbd_responserecordsdb.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_responserecordsdb.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_responserecordsdb.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -223,7 +224,7 @@
   Check if a refresh is queued for a particular name on a particular subnet.
   **************************************************************************/
    
-bool is_refresh_already_queued(struct subnet_record *subrec, struct name_record *namerec)
+BOOL is_refresh_already_queued(struct subnet_record *subrec, struct name_record *namerec)
 {  
 	struct response_record *rrec = NULL;
    

Modified: branches/samba/upstream/source/nmbd/nmbd_sendannounce.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_sendannounce.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_sendannounce.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,7 +10,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -19,14 +19,15 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
 #include "includes.h"
 
 extern int  updatecount;
-extern bool found_lm_clients;
+extern BOOL found_lm_clients;
 
 /****************************************************************************
  Send a browser reset packet.
@@ -34,7 +35,7 @@
 
 void send_browser_reset(int reset_type, const char *to_name, int to_type, struct in_addr to_ip)
 {
-	char outbuf[1024];
+	char outbuf[PSTRING_LEN];
 	char *p;
 
 	DEBUG(3,("send_browser_reset: sending reset request type %d to %s<%02x> IP %s.\n",
@@ -59,7 +60,7 @@
 
 void broadcast_announce_request(struct subnet_record *subrec, struct work_record *work)
 {
-	char outbuf[1024];
+	char outbuf[PSTRING_LEN];
 	char *p;
 
 	work->needannounce = True;
@@ -90,7 +91,7 @@
                               time_t announce_interval,
                               const char *server_name, int server_type, const char *server_comment)
 {
-	char outbuf[1024];
+	char outbuf[PSTRING_LEN];
 	unstring upper_server_name;
 	char *p;
 
@@ -131,7 +132,7 @@
                               time_t announce_interval,
                               char *server_name, int server_type, char *server_comment)
 {
-	char outbuf[1024];
+	char outbuf[PSTRING_LEN];
 	char *p=outbuf;
 
 	memset(outbuf,'\0',sizeof(outbuf));
@@ -457,11 +458,10 @@
 	char *s;
 	const char *ptr;
 	static time_t last_time = 0;
-	char *s2;
+	pstring s2;
 	struct in_addr addr;
 	char *comment;
 	int stype = lp_default_server_announce();
-	TALLOC_CTX *frame = NULL;
 
 	if (last_time && (t < (last_time + REMOTE_ANNOUNCE_INTERVAL)))
 		return;
@@ -474,9 +474,8 @@
 
 	comment = string_truncate(lp_serverstring(), MAX_SERVER_STRING_LENGTH);
 
-	frame = talloc_stackframe();
-	for (ptr=s; next_token_talloc(frame,&ptr,&s2,NULL); ) {
-		/* The entries are of the form a.b.c.d/WORKGROUP with
+	for (ptr=s; next_token(&ptr,s2,NULL,sizeof(s2)); ) {
+		/* The entries are of the form a.b.c.d/WORKGROUP with 
 				WORKGROUP being optional */
 		const char *wgroup;
 		char *pwgroup;
@@ -490,8 +489,8 @@
 		else
 			wgroup = pwgroup;
 
-		(void)interpret_addr2(&addr,s2);
-
+		addr = *interpret_addr2(s2);
+    
 		/* Announce all our names including aliases */
 		/* Give the ip address as the address of our first
 				broadcast subnet. */
@@ -512,7 +511,6 @@
 						comment);
 		}
 	}
-	TALLOC_FREE(frame);
 }
 
 /****************************************************************************
@@ -521,21 +519,20 @@
 **************************************************************************/
 
 void browse_sync_remote(time_t t)
-{
+{  
 	char *s;
 	const char *ptr;
-	static time_t last_time = 0;
-	char *s2;
+	static time_t last_time = 0; 
+	pstring s2;
 	struct in_addr addr;
 	struct work_record *work;
-	char outbuf[1024];
+	pstring outbuf;
 	char *p;
 	unstring myname;
-	TALLOC_CTX *frame = NULL;
-
+ 
 	if (last_time && (t < (last_time + REMOTE_ANNOUNCE_INTERVAL)))
 		return;
-
+   
 	last_time = t;
 
 	s = lp_remote_browse_sync();
@@ -552,12 +549,12 @@
 			lp_workgroup(), FIRST_SUBNET->subnet_name ));
 		return;
 	}
-
+         
 	if(!AM_LOCAL_MASTER_BROWSER(work)) {
 		DEBUG(5,("browse_sync_remote: We can only do this if we are a local master browser \
 for workgroup %s on subnet %s.\n", lp_workgroup(), FIRST_SUBNET->subnet_name ));
 		return;
-	}
+	} 
 
 	memset(outbuf,'\0',sizeof(outbuf));
 	p = outbuf;
@@ -567,14 +564,13 @@
 	unstrcpy(myname, global_myname());
 	strupper_m(myname);
 	myname[15]='\0';
-	push_ascii(p, myname, sizeof(outbuf)-PTR_DIFF(p,outbuf)-1, STR_TERMINATE);
+	push_pstring_base(p, myname, outbuf);
 
 	p = skip_string(outbuf,sizeof(outbuf),p);
 
-	frame = talloc_stackframe();
-	for (ptr=s; next_token_talloc(frame,&ptr,&s2,NULL); ) {
+	for (ptr=s; next_token(&ptr,s2,NULL,sizeof(s2)); ) {
 		/* The entries are of the form a.b.c.d */
-		(void)interpret_addr2(&addr,s2);
+		addr = *interpret_addr2(s2);
 
 		DEBUG(5,("announce_remote: Doing remote browse sync announce for server %s to IP %s.\n",
 			global_myname(), inet_ntoa(addr) ));
@@ -582,5 +578,4 @@
 		send_mailslot(True, BROWSE_MAILSLOT, outbuf,PTR_DIFF(p,outbuf),
 			global_myname(), 0x0, "*", 0x0, addr, FIRST_SUBNET->myip, DGRAM_PORT);
 	}
-	TALLOC_FREE(frame);
 }

Modified: branches/samba/upstream/source/nmbd/nmbd_serverlistdb.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_serverlistdb.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_serverlistdb.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -288,20 +289,18 @@
 	x_fprintf(fp, "\"%s\"\n", description);
 }
 
-void write_browse_list(time_t t, bool force_write)
-{
+void write_browse_list(time_t t, BOOL force_write)
+{   
 	struct subnet_record *subrec;
 	struct work_record *work;
 	struct server_record *servrec;
-	char *fname;
-	char *fnamenew;
+	pstring fname,fnamenew;
 	uint32 stype;
 	int i;
 	XFILE *fp;
-	bool list_changed = force_write;
+	BOOL list_changed = force_write;
 	static time_t lasttime = 0;
-	TALLOC_CTX *ctx = talloc_tos();
-
+    
 	/* Always dump if we're being told to by a signal. */
 	if(force_write == False) {
 		if (!lasttime)
@@ -313,7 +312,7 @@
 	lasttime = t;
 
 	dump_workgroups(force_write);
-
+ 
 	for (subrec = FIRST_SUBNET; subrec ; subrec = NEXT_SUBNET_INCLUDING_UNICAST(subrec)) {
 		if(subrec->work_changed) {
 			list_changed = True;
@@ -325,32 +324,22 @@
 		return;
 
 	updatecount++;
-
-	fname = talloc_strdup(ctx, lp_lockdir());
-	if (!fname) {
-		return;
-	}
+    
+	pstrcpy(fname,lp_lockdir());
 	trim_char(fname,'\0' ,'/');
-	fname = talloc_asprintf_append(fname,
-			"/%s",
-			SERVER_LIST);
-	if (!fname) {
-		return;
-	}
-	fnamenew = talloc_asprintf(ctx, "%s.",
-				fname);
-	if (!fnamenew) {
-		return;
-	}
-
+	pstrcat(fname,"/");
+	pstrcat(fname,SERVER_LIST);
+	pstrcpy(fnamenew,fname);
+	pstrcat(fnamenew,".");
+ 
 	fp = x_fopen(fnamenew,O_WRONLY|O_CREAT|O_TRUNC, 0644);
-
+ 
 	if (!fp) {
 		DEBUG(0,("write_browse_list: Can't open file %s. Error was %s\n",
 			fnamenew,strerror(errno)));
 		return;
-	}
-
+	} 
+  
 	/*
 	 * Write out a record for our workgroup. Use the record from the first
 	 * subnet.
@@ -367,7 +356,7 @@
 		SV_TYPE_DOMAIN_ENUM|SV_TYPE_NT|SV_TYPE_LOCAL_LIST_ONLY,
 		work->local_master_browser_name, work->work_group);
 
-	/*
+	/* 
 	 * We need to do something special for our own names.
 	 * This is due to the fact that we may be a local master browser on
 	 * one of our broadcast subnets, and a domain master on the unicast
@@ -390,7 +379,7 @@
 		write_browse_list_entry(fp, my_netbios_names(i), stype,
 			string_truncate(lp_serverstring(), MAX_SERVER_STRING_LENGTH), lp_workgroup());
 	}
-
+      
 	for (subrec = FIRST_SUBNET; subrec ; subrec = NEXT_SUBNET_INCLUDING_UNICAST(subrec)) { 
 		subrec->work_changed = False;
 
@@ -411,7 +400,7 @@
 
 				/* We have already written our names here. */
 				if(is_myname(servrec->serv.name))
-					continue;
+					continue; 
 
 				serv_type = write_this_server_name(subrec, work, servrec);
 				if(serv_type) {
@@ -421,8 +410,8 @@
 				}
 			}
 		}
-	}
-
+	} 
+  
 	x_fclose(fp);
 	unlink(fname);
 	chmod(fnamenew,0644);

Modified: branches/samba/upstream/source/nmbd/nmbd_subnetdb.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_subnetdb.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_subnetdb.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
    Revision History:
 
@@ -24,6 +25,7 @@
 
 #include "includes.h"
 
+extern struct in_addr loopback_ip;
 extern int global_nmb_port;
 
 /* This is the broadcast subnets database. */
@@ -85,17 +87,13 @@
 		nmb_sock = -1;
 		dgram_sock = -1;
 	} else {
-		struct sockaddr_storage ss;
-
-		in_addr_to_sockaddr_storage(&ss, myip);
-
 		/*
 		 * Attempt to open the sockets on port 137/138 for this interface
 		 * and bind them.
 		 * Fail the subnet creation if this fails.
 		 */
 
-		if((nmb_sock = open_socket_in(SOCK_DGRAM, global_nmb_port,0, &ss,true)) == -1) {
+		if((nmb_sock = open_socket_in(SOCK_DGRAM, global_nmb_port,0, myip.s_addr,True)) == -1) {
 			if( DEBUGLVL( 0 ) ) {
 				Debug1( "nmbd_subnetdb:make_subnet()\n" );
 				Debug1( "  Failed to open nmb socket on interface %s ", inet_ntoa(myip) );
@@ -105,7 +103,7 @@
 			return NULL;
 		}
 
-		if((dgram_sock = open_socket_in(SOCK_DGRAM,DGRAM_PORT,3, &ss, true)) == -1) {
+		if((dgram_sock = open_socket_in(SOCK_DGRAM,DGRAM_PORT,3, myip.s_addr,True)) == -1) {
 			if( DEBUGLVL( 0 ) ) {
 				Debug1( "nmbd_subnetdb:make_subnet()\n" );
 				Debug1( "  Failed to open dgram socket on interface %s ", inet_ntoa(myip) );
@@ -127,12 +125,8 @@
 	subrec = SMB_MALLOC_P(struct subnet_record);
 	if (!subrec) {
 		DEBUG(0,("make_subnet: malloc fail !\n"));
-		if (nmb_sock != -1) {
-			close(nmb_sock);
-		}
-		if (dgram_sock != -1) {
-			close(dgram_sock);
-		}
+		close(nmb_sock);
+		close(dgram_sock);
 		return(NULL);
 	}
   
@@ -140,12 +134,8 @@
 
 	if((subrec->subnet_name = SMB_STRDUP(name)) == NULL) {
 		DEBUG(0,("make_subnet: malloc fail for subnet name !\n"));
-		if (nmb_sock != -1) {
-			close(nmb_sock);
-		}
-		if (dgram_sock != -1) {
-			close(dgram_sock);
-		}
+		close(nmb_sock);
+		close(dgram_sock);
 		ZERO_STRUCTP(subrec);
 		SAFE_FREE(subrec);
 		return(NULL);
@@ -172,16 +162,12 @@
   Create a normal subnet
 **************************************************************************/
 
-struct subnet_record *make_normal_subnet(const struct interface *iface)
+struct subnet_record *make_normal_subnet(struct interface *iface)
 {
-
 	struct subnet_record *subrec;
-	const struct in_addr *pip = &((const struct sockaddr_in *)&iface->ip)->sin_addr;
-	const struct in_addr *pbcast = &((const struct sockaddr_in *)&iface->bcast)->sin_addr;
-	const struct in_addr *pnmask = &((const struct sockaddr_in *)&iface->netmask)->sin_addr;
 
-	subrec = make_subnet(inet_ntoa(*pip), NORMAL_SUBNET,
-			     *pip, *pbcast, *pnmask);
+	subrec = make_subnet(inet_ntoa(iface->ip), NORMAL_SUBNET,
+			     iface->ip, iface->bcast, iface->nmask);
 	if (subrec) {
 		add_subnet(subrec);
 	}
@@ -192,25 +178,23 @@
   Create subnet entries.
 **************************************************************************/
 
-bool create_subnets(void)
-{
-	/* We only count IPv4 interfaces whilst we're waiting. */
-	int num_interfaces = iface_count_v4();
+BOOL create_subnets(void)
+{    
+	int num_interfaces;
 	int i;
 	struct in_addr unicast_ip, ipzero;
 
   try_interfaces_again:
 
-	if (iface_count_v4() == 0) {
+	if (iface_count() == 0) {
 		DEBUG(0,("create_subnets: No local interfaces !\n"));
 		DEBUG(0,("create_subnets: Waiting for an interface to appear ...\n"));
 	}
 
-	/* We only count IPv4 interfaces here. */
-	while (iface_count_v4() == 0) {
+	while (iface_count() == 0) {
 		void (*saved_handler)(int);
 
-		/*
+		/* 
 		 * Whilst we're waiting for an interface, allow SIGTERM to
 		 * cause us to exit.
 		 */
@@ -220,46 +204,35 @@
 		sleep(5);
 		load_interfaces();
 
-		/*
+		/* 
 		 * We got an interface, restore our normal term handler.
 		 */
 
 		CatchSignal( SIGTERM, SIGNAL_CAST saved_handler );
 	}
 
-	/*
-	 * Here we count v4 and v6 - we know there's at least one
-	 * IPv4 interface and we filter on it below.
-	 */
 	num_interfaces = iface_count();
 
-	/*
+	/* 
 	 * Create subnets from all the local interfaces and thread them onto
-	 * the linked list.
+	 * the linked list. 
 	 */
 
 	for (i = 0 ; i < num_interfaces; i++) {
-		const struct interface *iface = get_interface(i);
+		struct interface *iface = get_interface(i);
 
 		if (!iface) {
 			DEBUG(2,("create_subnets: can't get interface %d.\n", i ));
 			continue;
 		}
 
-		/* Ensure we're only dealing with IPv4 here. */
-		if (iface->ip.ss_family != AF_INET) {
-			DEBUG(2,("create_subnets: "
-				"ignoring non IPv4 interface.\n"));
-			continue;
-		}
-
 		/*
 		 * We don't want to add a loopback interface, in case
 		 * someone has added 127.0.0.1 for smbd, nmbd needs to
 		 * ignore it here. JRA.
 		 */
 
-		if (is_loopback_addr(&iface->ip)) {
+		if (ip_equal(iface->ip, loopback_ip)) {
 			DEBUG(2,("create_subnets: Ignoring loopback interface.\n" ));
 			continue;
 		}
@@ -286,8 +259,8 @@
 	}
 
 	if (lp_we_are_a_wins_server()) {
-		/* Pick the first interface IPv4 address as the WINS server ip. */
-		const struct in_addr *nip = first_ipv4_iface();
+		/* Pick the first interface ip address as the WINS server ip. */
+		struct in_addr *nip = iface_n_ip(0);
 
 		if (!nip) {
 			return False;
@@ -298,7 +271,7 @@
 		/* note that we do not set the wins server IP here. We just
 			set it at zero and let the wins registration code cope
 			with getting the IPs right for each packet */
-		zero_ip_v4(&unicast_ip);
+		zero_ip(&unicast_ip);
 	}
 
 	/*
@@ -311,7 +284,7 @@
 	unicast_subnet = make_subnet( "UNICAST_SUBNET", UNICAST_SUBNET, 
 				unicast_ip, unicast_ip, unicast_ip);
 
-	zero_ip_v4(&ipzero);
+	zero_ip(&ipzero);
 
 	remote_broadcast_subnet = make_subnet( "REMOTE_BROADCAST_SUBNET",
 				REMOTE_BROADCAST_SUBNET,
@@ -339,7 +312,7 @@
 Function to tell us if we can use the unicast subnet.
 ******************************************************************/
 
-bool we_are_a_wins_client(void)
+BOOL we_are_a_wins_client(void)
 {
 	if (wins_srv_count() > 0) {
 		return True;

Modified: branches/samba/upstream/source/nmbd/nmbd_synclists.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_synclists.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_synclists.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -28,11 +29,13 @@
 
 #include "includes.h"
 
+extern fstring local_machine;
+
 struct sync_record {
 	struct sync_record *next, *prev;
 	unstring workgroup;
 	unstring server;
-	char *fname;
+	pstring fname;
 	struct in_addr ip;
 	pid_t pid;
 };
@@ -61,14 +64,13 @@
 
 static void sync_child(char *name, int nm_type, 
 		       char *workgroup,
-		       struct in_addr ip, bool local, bool servers,
+		       struct in_addr ip, BOOL local, BOOL servers,
 		       char *fname)
 {
 	fstring unix_workgroup;
 	struct cli_state *cli;
 	uint32 local_type = local ? SV_TYPE_LOCAL_LIST_ONLY : 0;
 	struct nmb_name called, calling;
-	struct sockaddr_storage ss;
 	NTSTATUS status;
 
 	/* W2K DMB's return empty browse lists on port 445. Use 139.
@@ -81,18 +83,15 @@
 	}
 
 	if (!cli_set_port(cli, 139)) {
-		cli_shutdown(cli);
 		return;
 	}
 
-	in_addr_to_sockaddr_storage(&ss, ip);
-	status = cli_connect(cli, name, &ss);
+	status = cli_connect(cli, name, &ip);
 	if (!NT_STATUS_IS_OK(status)) {
-		cli_shutdown(cli);
 		return;
 	}
 
-	make_nmb_name(&calling, get_local_machine_name(), 0x0);
+	make_nmb_name(&calling, local_machine, 0x0);
 	make_nmb_name(&called , name, nm_type);
 
 	if (!cli_session_request(cli, &calling, &called)) {
@@ -143,7 +142,7 @@
 
 void sync_browse_lists(struct work_record *work,
 		       char *name, int nm_type, 
-		       struct in_addr ip, bool local, bool servers)
+		       struct in_addr ip, BOOL local, BOOL servers)
 {
 	struct sync_record *s;
 	static int counter;
@@ -151,7 +150,7 @@
 	START_PROFILE(sync_browse_lists);
 	/* Check we're not trying to sync with ourselves. This can
 	   happen if we are a domain *and* a local master browser. */
-	if (ismyip_v4(ip)) {
+	if (ismyip(ip)) {
 done:
 		END_PROFILE(sync_browse_lists);
 		return;
@@ -161,18 +160,15 @@
 	if (!s) goto done;
 
 	ZERO_STRUCTP(s);
-
+	
 	unstrcpy(s->workgroup, work->work_group);
 	unstrcpy(s->server, name);
 	s->ip = ip;
 
-	if (asprintf(&s->fname, "%s/sync.%d", lp_lockdir(), counter++) < 0) {
-		SAFE_FREE(s);
-		goto done;
-	}
-	/* Safe to use as 0 means no size change. */
+	slprintf(s->fname, sizeof(pstring)-1,
+		 "%s/sync.%d", lp_lockdir(), counter++);
 	all_string_sub(s->fname,"//", "/", 0);
-
+	
 	DLIST_ADD(syncs, s);
 
 	/* the parent forks and returns, leaving the child to do the
@@ -188,7 +184,7 @@
 	fp = x_fopen(s->fname,O_WRONLY|O_CREAT|O_TRUNC, 0644);
 	if (!fp) {
 		END_PROFILE(sync_browse_lists);
-		_exit(1);
+		_exit(1);	
 	}
 
 	sync_child(name, nm_type, work->work_group, ip, local, servers,
@@ -203,7 +199,7 @@
  Handle one line from a completed sync file.
  **********************************************************************/
 
-static void complete_one(struct sync_record *s,
+static void complete_one(struct sync_record *s, 
 			 char *sname, uint32 stype, char *comment)
 {
 	struct work_record *work;
@@ -252,7 +248,7 @@
 	/* Create the server in the workgroup. */ 
 	create_server_on_workgroup(work, sname,stype, lp_max_ttl(), comment);
 }
-
+		
 /**********************************************************************
  Read the completed sync info.
 **********************************************************************/
@@ -260,11 +256,10 @@
 static void complete_sync(struct sync_record *s)
 {
 	XFILE *f;
-	char *server;
-	char *type_str;
+	unstring server, type_str;
 	unsigned type;
-	char *comment;
-	char line[1024];
+	pstring comment;
+	pstring line;
 	const char *ptr;
 	int count=0;
 
@@ -272,20 +267,17 @@
 
 	if (!f)
 		return;
-
+	
 	while (!x_feof(f)) {
-		TALLOC_CTX *frame = NULL;
-
-		if (!fgets_slash(line,sizeof(line),f))
+		
+		if (!fgets_slash(line,sizeof(pstring),f))
 			continue;
-
+		
 		ptr = line;
 
-		frame = talloc_stackframe();
-		if (!next_token_talloc(frame,&ptr,&server,NULL) ||
-		    !next_token_talloc(frame,&ptr,&type_str,NULL) ||
-		    !next_token_talloc(frame,&ptr,&comment,NULL)) {
-			TALLOC_FREE(frame);
+		if (!next_token(&ptr,server,NULL,sizeof(server)) ||
+		    !next_token(&ptr,type_str,NULL, sizeof(type_str)) ||
+		    !next_token(&ptr,comment,NULL, sizeof(comment))) {
 			continue;
 		}
 
@@ -294,8 +286,8 @@
 		complete_one(s, server, type, comment);
 
 		count++;
-		TALLOC_FREE(frame);
 	}
+
 	x_fclose(f);
 
 	unlink(s->fname);
@@ -318,7 +310,7 @@
 			/* it has completed - grab the info */
 			complete_sync(s);
 			DLIST_REMOVE(syncs, s);
-			SAFE_FREE(s->fname);
+			ZERO_STRUCTP(s);
 			SAFE_FREE(s);
 		}
 	}

Modified: branches/samba/upstream/source/nmbd/nmbd_winsproxy.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_winsproxy.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_winsproxy.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -107,7 +108,7 @@
 
 	if(namerec && original_packet->packet.nmb.header.nm_flags.bcast) {
 		for( i = 0; i < namerec->data.num_ips; i++) {
-			if( same_net_v4( namerec->data.ip[i], orig_broadcast_subnet->myip,
+			if( same_net( namerec->data.ip[i], orig_broadcast_subnet->myip,
 					orig_broadcast_subnet->mask_ip ) ) {
 				DEBUG( 5, ( "wins_proxy_name_query_request_success: name %s is a WINS \
 proxy name and is also on the same subnet (%s) as the requestor. \

Modified: branches/samba/upstream/source/nmbd/nmbd_winsserver.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_winsserver.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_winsserver.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
    Converted to store WINS data in a tdb. Dec 2005. JRA.
 */
@@ -102,7 +103,7 @@
 	}
 
 	namerec->subnet = wins_server_subnet;
-	push_ascii_nstring(namerec->name.name, (const char *)key.dptr);
+	push_ascii_nstring(namerec->name.name, key.dptr);
 	namerec->name.name_type = key.dptr[sizeof(unstring)];
 	/* Add the scope. */
 	push_ascii(namerec->name.scope, global_scope(), 64, STR_TERMINATE);
@@ -158,7 +159,7 @@
 	len = (2 + 1 + (7*4)); /* "wbddddddd" */
 	len += (namerec->data.num_ips * 4);
 
-	data.dptr = (uint8 *)SMB_MALLOC(len);
+	data.dptr = (char *)SMB_MALLOC(len);
 	if (!data.dptr) {
 		return data;
 	}
@@ -196,7 +197,7 @@
 	pull_ascii_nstring(keydata, sizeof(unstring), nmbname->name);
 	strupper_m(keydata);
 	keydata[sizeof(unstring)] = nmbname->name_type;
-	key.dptr = (uint8 *)keydata;
+	key.dptr = keydata;
 	key.dsize = sizeof(keydata);
 
 	return key;
@@ -207,7 +208,7 @@
  on the linked list. We will free this later in XXXX().
 *****************************************************************************/
 
-struct name_record *find_name_on_wins_subnet(const struct nmb_name *nmbname, bool self_only)
+struct name_record *find_name_on_wins_subnet(const struct nmb_name *nmbname, BOOL self_only)
 {
 	TDB_DATA data, key;
 	struct name_record *nr = NULL;
@@ -262,7 +263,7 @@
  Overwrite or add a given name in the wins.tdb.
 *****************************************************************************/
 
-static bool store_or_replace_wins_namerec(const struct name_record *namerec, int tdb_flag)
+static BOOL store_or_replace_wins_namerec(const struct name_record *namerec, int tdb_flag)
 {
 	TDB_DATA key, data;
 	int ret;
@@ -288,7 +289,7 @@
  Overwrite a given name in the wins.tdb.
 *****************************************************************************/
 
-bool wins_store_changed_namerec(const struct name_record *namerec)
+BOOL wins_store_changed_namerec(const struct name_record *namerec)
 {
 	return store_or_replace_wins_namerec(namerec, TDB_REPLACE);
 }
@@ -297,7 +298,7 @@
  Primary interface into creating and overwriting records in the wins.tdb.
 *****************************************************************************/
 
-bool add_name_to_wins_subnet(const struct name_record *namerec)
+BOOL add_name_to_wins_subnet(const struct name_record *namerec)
 {
 	return store_or_replace_wins_namerec(namerec, TDB_INSERT);
 }
@@ -307,7 +308,7 @@
  on the linked list.
 *****************************************************************************/
 
-bool remove_name_from_wins_namelist(struct name_record *namerec)
+BOOL remove_name_from_wins_namelist(struct name_record *namerec)
 {
 	TDB_DATA key;
 	int ret;
@@ -412,7 +413,7 @@
  Return the general ID value and increase it if requested.
 *****************************************************************************/
 
-static void get_global_id_and_update(SMB_BIG_UINT *current_id, bool update)
+static void get_global_id_and_update(SMB_BIG_UINT *current_id, BOOL update)
 {
 	/*
 	 * it's kept as a static here, to prevent people from messing
@@ -437,11 +438,10 @@
 
 static void wins_hook(const char *operation, struct name_record *namerec, int ttl)
 {
-	char *command = NULL;
+	pstring command;
 	char *cmd = lp_wins_hook();
 	char *p, *namestr;
 	int i;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	wins_store_changed_namerec(namerec);
 
@@ -463,36 +463,27 @@
 		*p = 0;
 	}
 
-	command = talloc_asprintf(ctx,
-				"%s %s %s %02x %d",
-				cmd,
-				operation,
-				namestr,
-				namerec->name.name_type,
-				ttl);
-	if (!command) {
-		return;
-	}
+	p = command;
+	p += slprintf(p, sizeof(command)-1, "%s %s %s %02x %d", 
+		      cmd,
+		      operation, 
+		      namestr,
+		      namerec->name.name_type,
+		      ttl);
 
 	for (i=0;i<namerec->data.num_ips;i++) {
-		command = talloc_asprintf_append(command,
-						" %s",
-						inet_ntoa(namerec->data.ip[i]));
-		if (!command) {
-			return;
-		}
+		p += slprintf(p, sizeof(command) - (p-command) -1, " %s", inet_ntoa(namerec->data.ip[i]));
 	}
 
 	DEBUG(3,("calling wins hook for %s\n", nmb_namestr(&namerec->name)));
 	smbrun(command, NULL);
-	TALLOC_FREE(command);
 }
 
 /****************************************************************************
 Determine if this packet should be allocated to the WINS server.
 *****************************************************************************/
 
-bool packet_is_for_wins_server(struct packet_struct *packet)
+BOOL packet_is_for_wins_server(struct packet_struct *packet)
 {
 	struct nmb_packet *nmb = &packet->packet.nmb;
 
@@ -572,11 +563,11 @@
 Load or create the WINS database.
 *****************************************************************************/
 
-bool initialise_wins(void)
+BOOL initialise_wins(void)
 {
 	time_t time_now = time(NULL);
 	XFILE *fp;
-	char line[1024];
+	pstring line;
 
 	if(!lp_we_are_a_wins_server()) {
 		return True;
@@ -594,40 +585,35 @@
 
 	add_samba_names_to_subnet(wins_server_subnet);
 
-	if((fp = x_fopen(state_path(WINS_LIST),O_RDONLY,0)) == NULL) {
+	if((fp = x_fopen(lock_path(WINS_LIST),O_RDONLY,0)) == NULL) {
 		DEBUG(2,("initialise_wins: Can't open wins database file %s. Error was %s\n",
 			WINS_LIST, strerror(errno) ));
 		return True;
 	}
 
 	while (!x_feof(fp)) {
-		char *name_str = NULL;
-		char *ip_str = NULL;
-		char *ttl_str = NULL, *nb_flags_str = NULL;
+		pstring name_str, ip_str, ttl_str, nb_flags_str;
 		unsigned int num_ips;
-		char *name = NULL;
-		struct in_addr *ip_list = NULL;
+		pstring name;
+		struct in_addr *ip_list;
 		int type = 0;
 		int nb_flags;
 		int ttl;
 		const char *ptr;
-		char *p = NULL;
-		bool got_token;
-		bool was_ip;
+		char *p;
+		BOOL got_token;
+		BOOL was_ip;
 		int i;
 		unsigned int hash;
 		int version;
-		TALLOC_CTX *frame = NULL;
 
 		/* Read a line from the wins.dat file. Strips whitespace
 			from the beginning and end of the line.  */
-		if (!fgets_slash(line,sizeof(line),fp)) {
+		if (!fgets_slash(line,sizeof(pstring),fp))
 			continue;
-		}
-
-		if (*line == '#') {
+      
+		if (*line == '#')
 			continue;
-		}
 
 		if (strncmp(line,"VERSION ", 8) == 0) {
 			if (sscanf(line,"VERSION %d %u", &version, &hash) != 2 ||
@@ -641,23 +627,20 @@
 
 		ptr = line;
 
-		/*
+		/* 
 		 * Now we handle multiple IP addresses per name we need
 		 * to iterate over the line twice. The first time to
 		 * determine how many IP addresses there are, the second
 		 * time to actually parse them into the ip_list array.
 		 */
 
-		frame = talloc_stackframe();
-		if (!next_token_talloc(frame,&ptr,&name_str,NULL)) {
+		if (!next_token(&ptr,name_str,NULL,sizeof(name_str))) {
 			DEBUG(0,("initialise_wins: Failed to parse name when parsing line %s\n", line ));
-			TALLOC_FREE(frame);
 			continue;
 		}
 
-		if (!next_token_talloc(frame,&ptr,&ttl_str,NULL)) {
+		if (!next_token(&ptr,ttl_str,NULL,sizeof(ttl_str))) {
 			DEBUG(0,("initialise_wins: Failed to parse time to live when parsing line %s\n", line ));
-			TALLOC_FREE(frame);
 			continue;
 		}
 
@@ -666,24 +649,22 @@
 		 */
 		num_ips = 0;
 		do {
-			got_token = next_token_talloc(frame,&ptr,&ip_str,NULL);
+			got_token = next_token(&ptr,ip_str,NULL,sizeof(ip_str));
 			was_ip = False;
 
 			if(got_token && strchr(ip_str, '.')) {
 				num_ips++;
 				was_ip = True;
 			}
-		} while(got_token && was_ip);
+		} while( got_token && was_ip);
 
 		if(num_ips == 0) {
 			DEBUG(0,("initialise_wins: Missing IP address when parsing line %s\n", line ));
-			TALLOC_FREE(frame);
 			continue;
 		}
 
 		if(!got_token) {
 			DEBUG(0,("initialise_wins: Missing nb_flags when parsing line %s\n", line ));
-			TALLOC_FREE(frame);
 			continue;
 		}
 
@@ -691,21 +672,20 @@
 		if((ip_list = SMB_MALLOC_ARRAY( struct in_addr, num_ips)) == NULL) {
 			DEBUG(0,("initialise_wins: Malloc fail !\n"));
 			x_fclose(fp);
-			TALLOC_FREE(frame);
 			return False;
 		}
-
+ 
 		/* Reset and re-parse the line. */
 		ptr = line;
-		next_token_talloc(frame,&ptr,&name_str,NULL);
-		next_token_talloc(frame,&ptr,&ttl_str,NULL);
+		next_token(&ptr,name_str,NULL,sizeof(name_str)); 
+		next_token(&ptr,ttl_str,NULL,sizeof(ttl_str));
 		for(i = 0; i < num_ips; i++) {
-			next_token_talloc(frame,&ptr, &ip_str, NULL);
-			(void)interpret_addr2(&ip_list[i], ip_str);
+			next_token(&ptr, ip_str, NULL, sizeof(ip_str));
+			ip_list[i] = *interpret_addr2(ip_str);
 		}
-		next_token_talloc(frame,&ptr,&nb_flags_str,NULL);
+		next_token(&ptr,nb_flags_str,NULL, sizeof(nb_flags_str));
 
-		/*
+		/* 
 		 * Deal with SELF or REGISTER name encoding. Default is REGISTER
 		 * for compatibility with old nmbds.
 		 */
@@ -713,22 +693,21 @@
 		if(nb_flags_str[strlen(nb_flags_str)-1] == 'S') {
 			DEBUG(5,("initialise_wins: Ignoring SELF name %s\n", line));
 			SAFE_FREE(ip_list);
-			TALLOC_FREE(frame);
 			continue;
 		}
-
+      
 		if(nb_flags_str[strlen(nb_flags_str)-1] == 'R') {
 			nb_flags_str[strlen(nb_flags_str)-1] = '\0';
 		}
-
+      
 		/* Netbios name. # divides the name from the type (hex): netbios#xx */
-		name = name_str;
-
+		pstrcpy(name,name_str);
+      
 		if((p = strchr(name,'#')) != NULL) {
 			*p = 0;
 			sscanf(p+1,"%x",&type);
 		}
-
+      
 		/* Decode the netbios flags (hex) and the time-to-live (in seconds). */
 		sscanf(nb_flags_str,"%x",&nb_flags);
 		sscanf(ttl_str,"%d",&ttl);
@@ -738,7 +717,7 @@
 			if(ttl != PERMANENT_TTL) {
 				ttl -= time_now;
 			}
-
+    
 			DEBUG( 4, ("initialise_wins: add name: %s#%02x ttl = %d first IP %s flags = %2x\n",
 				name, type, ttl, inet_ntoa(ip_list[0]), nb_flags));
 
@@ -750,10 +729,9 @@
 				name, type, ttl, inet_ntoa(ip_list[0]), nb_flags));
 		}
 
-		TALLOC_FREE(frame);
 		SAFE_FREE(ip_list);
-	}
-
+	} 
+    
 	x_fclose(fp);
 	return True;
 }
@@ -827,15 +805,14 @@
 {
 	struct nmb_packet *nmb = &p->packet.nmb;
 	struct nmb_name *question = &nmb->question.question_name;
-	bool bcast = nmb->header.nm_flags.bcast;
+	BOOL bcast = nmb->header.nm_flags.bcast;
 	uint16 nb_flags = get_nb_flags(nmb->additional->rdata);
-	bool group = (nb_flags & NB_GROUP) ? True : False;
+	BOOL group = (nb_flags & NB_GROUP) ? True : False;
 	struct name_record *namerec = NULL;
 	int ttl = get_ttl_from_packet(nmb);
 	struct in_addr from_ip;
-	struct in_addr our_fake_ip;
+	struct in_addr our_fake_ip = *interpret_addr2("0.0.0.0");
 
-	(void)interpret_addr2(&our_fake_ip, "0.0.0.0");
 	putip( (char *)&from_ip, &nmb->additional->rdata[2] );
 
 	if(bcast) {
@@ -938,7 +915,7 @@
 		 * if the record is a replica:
 		 * we take ownership and update the version ID.
 		 */
-		if (!ip_equal_v4(namerec->data.wins_ip, our_fake_ip)) {
+		if (!ip_equal(namerec->data.wins_ip, our_fake_ip)) {
 			update_wins_owner(namerec, our_fake_ip);
 			get_global_id_and_update(&namerec->data.id, True);
 		}
@@ -1054,7 +1031,7 @@
 	namerec = find_name_on_subnet(subrec, question_name, FIND_ANY_NAME);
 
 	if ((namerec != NULL) && (namerec->data.source == REGISTER_NAME) &&
-			ip_equal_v4(rrec->packet->ip, *namerec->data.ip)) {
+			ip_equal(rrec->packet->ip, *namerec->data.ip)) {
 		remove_name_from_namelist( subrec, namerec);
 		namerec = NULL;
 	}
@@ -1134,15 +1111,14 @@
 	unstring name;
 	struct nmb_packet *nmb = &p->packet.nmb;
 	struct nmb_name *question = &nmb->question.question_name;
-	bool bcast = nmb->header.nm_flags.bcast;
+	BOOL bcast = nmb->header.nm_flags.bcast;
 	uint16 nb_flags = get_nb_flags(nmb->additional->rdata);
 	int ttl = get_ttl_from_packet(nmb);
 	struct name_record *namerec = NULL;
 	struct in_addr from_ip;
-	bool registering_group_name = (nb_flags & NB_GROUP) ? True : False;
-	struct in_addr our_fake_ip;
+	BOOL registering_group_name = (nb_flags & NB_GROUP) ? True : False;
+	struct in_addr our_fake_ip = *interpret_addr2("0.0.0.0");
 
-	(void)interpret_addr2(&our_fake_ip, "0.0.0.0");
 	putip((char *)&from_ip,&nmb->additional->rdata[2]);
 
 	if(bcast) {
@@ -1217,7 +1193,7 @@
 	 */
 
 	if(registering_group_name && (question->name_type != 0x1c)) {
-		(void)interpret_addr2(&from_ip, "255.255.255.255");
+		from_ip = *interpret_addr2("255.255.255.255");
 	}
 
 	/*
@@ -1298,7 +1274,7 @@
 	if ( namerec != NULL ) {
 		pull_ascii_nstring(name, sizeof(name), namerec->name.name);
 		if( is_myname(name) ) {
-			if(!ismyip_v4(from_ip)) {
+			if(!ismyip(from_ip)) {
 				DEBUG(3,("wins_process_name_registration_request: Attempt to register name %s. Name \
 is one of our (WINS server) names. Denying registration.\n", nmb_namestr(question) ));
 				send_wins_name_registration_response(RFS_ERR, 0, p);
@@ -1329,8 +1305,8 @@
 	if( !registering_group_name
 			&& (namerec != NULL)
 			&& (namerec->data.num_ips == 1)
-			&& ip_equal_v4( namerec->data.ip[0], from_ip )
-			&& ip_equal_v4(namerec->data.wins_ip, our_fake_ip) ) {
+			&& ip_equal( namerec->data.ip[0], from_ip )
+			&& ip_equal(namerec->data.wins_ip, our_fake_ip) ) {
 		update_name_ttl( namerec, ttl );
 		wins_hook("refresh", namerec, ttl);
 		send_wins_name_registration_response( 0, ttl, p );
@@ -1422,9 +1398,8 @@
 	struct name_record *namerec = NULL;
 	struct in_addr from_ip;
 	int ttl;
-	struct in_addr our_fake_ip;
+	struct in_addr our_fake_ip = *interpret_addr2("0.0.0.0");
 
-	(void)interpret_addr2(&our_fake_ip, "0.0.0.0");
 	memcpy((char *)&orig_reg_packet, userdata->data, sizeof(struct packet_struct *));
 
 	nmb = &orig_reg_packet->packet.nmb;
@@ -1506,16 +1481,15 @@
 {
 	struct nmb_packet *nmb = &p->packet.nmb;
 	struct nmb_name *question = &nmb->question.question_name;
-	bool bcast = nmb->header.nm_flags.bcast;
+	BOOL bcast = nmb->header.nm_flags.bcast;
 	uint16 nb_flags = get_nb_flags(nmb->additional->rdata);
 	int ttl = get_ttl_from_packet(nmb);
 	struct name_record *namerec = NULL;
 	struct in_addr from_ip;
-	bool group = (nb_flags & NB_GROUP) ? True : False;
-	struct in_addr our_fake_ip;
+	BOOL group = (nb_flags & NB_GROUP) ? True : False;
+	struct in_addr our_fake_ip = *interpret_addr2("0.0.0.0");
 	unstring qname;
 
-	(void)interpret_addr2(&our_fake_ip, "0.0.0.0");
 	putip((char *)&from_ip,&nmb->additional->rdata[2]);
 
 	if(bcast) {
@@ -1622,7 +1596,7 @@
 	 */
 
 	if((namerec != NULL) && (is_myname(namerec->name.name)) ) {
-		if(!ismyip_v4(from_ip)) {
+		if(!ismyip(from_ip)) {
 			DEBUG(3,("wins_process_multihomed_name_registration_request: Attempt to register name %s. Name \
 is one of our (WINS server) names. Denying registration.\n", nmb_namestr(question) ));
 			send_wins_name_registration_response(RFS_ERR, 0, p);
@@ -1660,7 +1634,7 @@
 		 * If it's a replica, we need to become the wins owner
 		 * to force the replication
 		 */
-		if (!ip_equal_v4(namerec->data.wins_ip, our_fake_ip)) {
+		if (!ip_equal(namerec->data.wins_ip, our_fake_ip)) {
 			get_global_id_and_update(&namerec->data.id, True);
 			update_wins_owner(namerec, our_fake_ip);
 			update_wins_flag(namerec, WINS_ACTIVE);
@@ -2021,11 +1995,11 @@
 {
 	struct nmb_packet *nmb = &p->packet.nmb;
 	struct nmb_name *question = &nmb->question.question_name;
-	bool bcast = nmb->header.nm_flags.bcast;
+	BOOL bcast = nmb->header.nm_flags.bcast;
 	uint16 nb_flags = get_nb_flags(nmb->additional->rdata);
 	struct name_record *namerec = NULL;
 	struct in_addr from_ip;
-	bool releasing_group_name = (nb_flags & NB_GROUP) ? True : False;;
+	BOOL releasing_group_name = (nb_flags & NB_GROUP) ? True : False;;
 
 	putip((char *)&from_ip,&nmb->additional->rdata[2]);
 
@@ -2137,11 +2111,10 @@
 static int wins_processing_traverse_fn(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *state)
 {
 	time_t t = *(time_t *)state;
-	bool store_record = False;
+	BOOL store_record = False;
 	struct name_record *namerec = NULL;
-	struct in_addr our_fake_ip;
+	struct in_addr our_fake_ip = *interpret_addr2("0.0.0.0");
 
-	(void)interpret_addr2(&our_fake_ip, "0.0.0.0");
 	if (kbuf.dsize != sizeof(unstring) + 1) {
 		return 0;
 	}
@@ -2166,7 +2139,7 @@
 		}
 
 		/* handle records, samba is the wins owner */
-		if (ip_equal_v4(namerec->data.wins_ip, our_fake_ip)) {
+		if (ip_equal(namerec->data.wins_ip, our_fake_ip)) {
 			switch (namerec->data.wins_flags & WINS_STATE_MASK) {
 				case WINS_ACTIVE:
 					namerec->data.wins_flags&=~WINS_STATE_MASK;
@@ -2330,14 +2303,13 @@
 }
 
 
-void wins_write_database(time_t t, bool background)
+void wins_write_database(time_t t, BOOL background)
 {
 	static time_t last_write_time = 0;
-	char *fname = NULL;
-	char *fnamenew = NULL;
+	pstring fname, fnamenew;
 
 	XFILE *fp;
-
+   
 	if (background) {
 		if (!last_write_time) {
 			last_write_time = t;
@@ -2366,37 +2338,28 @@
 		}
 	}
 
-	if (asprintf(&fname, "%s/%s", get_dyn_STATEDIR(), WINS_LIST) < 0) {
-		goto err_exit;
-	}
-	/* This is safe as the 0 length means "don't expand". */
+	slprintf(fname,sizeof(fname)-1,"%s/%s", lp_lockdir(), WINS_LIST);
 	all_string_sub(fname,"//", "/", 0);
+	slprintf(fnamenew,sizeof(fnamenew)-1,"%s.%u", fname, (unsigned int)sys_getpid());
 
-	if (asprintf(&fnamenew, "%s.%u", fname, (unsigned int)sys_getpid()) < 0) {
-		goto err_exit;
-	}
-
 	if((fp = x_fopen(fnamenew,O_WRONLY|O_CREAT,0644)) == NULL) {
 		DEBUG(0,("wins_write_database: Can't open %s. Error was %s\n", fnamenew, strerror(errno)));
-		goto err_exit;
+		if (background) {
+			_exit(0);
+		}
+		return;
 	}
 
 	DEBUG(4,("wins_write_database: Dump of WINS name list.\n"));
 
 	x_fprintf(fp,"VERSION %d %u\n", WINS_VERSION, 0);
-
+ 
 	tdb_traverse(wins_tdb, wins_writedb_traverse_fn, fp);
 
 	x_fclose(fp);
 	chmod(fnamenew,0644);
 	unlink(fname);
 	rename(fnamenew,fname);
-
-  err_exit:
-
-	SAFE_FREE(fname);
-	SAFE_FREE(fnamenew);
-
 	if (background) {
 		_exit(0);
 	}
@@ -2408,21 +2371,17 @@
  Process a internal Samba message receiving a wins record.
 ***************************************************************************/
 
-void nmbd_wins_new_entry(struct messaging_context *msg,
-                                       void *private_data,
-                                       uint32_t msg_type,
-                                       struct server_id server_id,
-                                       DATA_BLOB *data)
+void nmbd_wins_new_entry(int msg_type, struct process_id src,
+			 void *buf, size_t len, void *private_data)
 {
 	WINS_RECORD *record;
 	struct name_record *namerec = NULL;
 	struct name_record *new_namerec = NULL;
 	struct nmb_name question;
-	bool overwrite=False;
-	struct in_addr our_fake_ip;
+	BOOL overwrite=False;
+	struct in_addr our_fake_ip = *interpret_addr2("0.0.0.0");
 	int i;
 
-	(void)interpret_addr2(&our_fake_ip, "0.0.0.0");
 	if (buf==NULL) {
 		return;
 	}
@@ -2463,16 +2422,16 @@
 		if (namerec->data.wins_flags&WINS_UNIQUE && record->wins_flags&WINS_UNIQUE) {
 
 			/* the database record is a replica */
-			if (!ip_equal_v4(namerec->data.wins_ip, our_fake_ip)) {
+			if (!ip_equal(namerec->data.wins_ip, our_fake_ip)) {
 				if (namerec->data.wins_flags&WINS_ACTIVE && record->wins_flags&WINS_TOMBSTONED) {
-					if (ip_equal_v4(namerec->data.wins_ip, record->wins_ip))
+					if (ip_equal(namerec->data.wins_ip, record->wins_ip))
 						overwrite=True;
 				} else
 					overwrite=True;
 			} else {
 			/* we are the wins owner of the database record */
 				/* the 2 records have the same IP address */
-				if (ip_equal_v4(namerec->data.ip[0], record->ip[0])) {
+				if (ip_equal(namerec->data.ip[0], record->ip[0])) {
 					if (namerec->data.wins_flags&WINS_ACTIVE && record->wins_flags&WINS_TOMBSTONED)
 						get_global_id_and_update(&namerec->data.id, True);
 					else
@@ -2524,10 +2483,10 @@
 					overwrite=True;
 			}
 			else {
-				if (ip_equal_v4(record->wins_ip, namerec->data.wins_ip))
+				if (ip_equal(record->wins_ip, namerec->data.wins_ip))
 					overwrite=True;
 				
-				if (ip_equal_v4(namerec->data.wins_ip, our_fake_ip))
+				if (ip_equal(namerec->data.wins_ip, our_fake_ip))
 					if (namerec->data.wins_flags&WINS_UNIQUE)
 						get_global_id_and_update(&namerec->data.id, True);
 				
@@ -2536,7 +2495,7 @@
 			if (record->wins_flags&WINS_ACTIVE && namerec->data.wins_flags&WINS_ACTIVE)
 				if (namerec->data.wins_flags&WINS_UNIQUE ||
 				    namerec->data.wins_flags&WINS_MHOMED)
-					if (ip_equal_v4(record->wins_ip, namerec->data.wins_ip))
+					if (ip_equal(record->wins_ip, namerec->data.wins_ip))
 						overwrite=True;
 				
 		}

Modified: branches/samba/upstream/source/nmbd/nmbd_workgroupdb.c
===================================================================
--- branches/samba/upstream/source/nmbd/nmbd_workgroupdb.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nmbd/nmbd_workgroupdb.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -110,7 +111,7 @@
 
 	/* No known domain master browser as yet. */
 	*work->dmb_name.name = '\0';
-	zero_ip_v4(&work->dmb_addr);
+	zero_ip(&work->dmb_addr);
 
 	/* WfWg  uses 01040b01 */
 	/* Win95 uses 01041501 */
@@ -269,7 +270,7 @@
   Dump a copy of the workgroup database into the log file.
   **************************************************************************/
 
-void dump_workgroups(bool force_write)
+void dump_workgroups(BOOL force_write)
 {
 	struct subnet_record *subrec;
 	int debuglevel = force_write ? 0 : 4;

Copied: branches/samba/upstream/source/nsswitch/idmap.c (from rev 1928, branches/samba/upstream/source/nsswitch/idmap.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/idmap.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/idmap.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,1622 @@
+/*
+   Unix SMB/CIFS implementation.
+   ID Mapping
+   Copyright (C) Tim Potter 2000
+   Copyright (C) Jim McDonough <jmcd at us.ibm.com>	2003
+   Copyright (C) Simo Sorce 2003-2007
+   Copyright (C) Jeremy Allison 2006
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "winbindd.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_IDMAP
+
+static_decl_idmap;
+
+struct idmap_backend {
+	const char *name;
+	struct idmap_methods *methods;
+	struct idmap_backend *prev, *next;
+};
+
+struct idmap_alloc_backend {
+	const char *name;
+	struct idmap_alloc_methods *methods;
+	struct idmap_alloc_backend *prev, *next;
+};
+
+struct idmap_cache_ctx;
+
+struct idmap_alloc_context {
+	const char *params;
+	struct idmap_alloc_methods *methods;
+	BOOL initialized;
+};
+
+static TALLOC_CTX *idmap_ctx = NULL;
+static struct idmap_cache_ctx *idmap_cache;
+
+static struct idmap_backend *backends = NULL;
+static struct idmap_domain **idmap_domains = NULL;
+static int num_domains = 0;
+static int pdb_dom_num = -1;
+static int def_dom_num = -1;
+
+static struct idmap_alloc_backend *alloc_backends = NULL;
+static struct idmap_alloc_context *idmap_alloc_ctx = NULL;
+
+#define IDMAP_CHECK_RET(ret) do { \
+	if ( ! NT_STATUS_IS_OK(ret)) { \
+		DEBUG(2, ("ERROR: NTSTATUS = 0x%08x\n", NT_STATUS_V(ret))); \
+			goto done; \
+	} } while(0)
+#define IDMAP_REPORT_RET(ret) do { \
+	if ( ! NT_STATUS_IS_OK(ret)) { \
+		DEBUG(2, ("ERROR: NTSTATUS = 0x%08x\n", NT_STATUS_V(ret))); \
+	} } while(0)
+#define IDMAP_CHECK_ALLOC(mem) do { \
+	if (!mem) { \
+		DEBUG(0, ("Out of memory!\n")); ret = NT_STATUS_NO_MEMORY; \
+		goto done; \
+	} } while(0)
+
+static struct idmap_methods *get_methods(struct idmap_backend *be,
+					 const char *name)
+{
+	struct idmap_backend *b;
+
+	for (b = be; b; b = b->next) {
+		if (strequal(b->name, name)) {
+			return b->methods;
+		}
+	}
+
+	return NULL;
+}
+
+static struct idmap_alloc_methods *get_alloc_methods(
+						struct idmap_alloc_backend *be,
+						const char *name)
+{
+	struct idmap_alloc_backend *b;
+
+	for (b = be; b; b = b->next) {
+		if (strequal(b->name, name)) {
+			return b->methods;
+		}
+	}
+
+	return NULL;
+}
+
+BOOL idmap_is_offline(void)
+{
+	return ( lp_winbind_offline_logon() &&
+	     get_global_winbindd_state_offline() );
+}
+
+/**********************************************************************
+ Allow a module to register itself as a method.
+**********************************************************************/
+
+NTSTATUS smb_register_idmap(int version, const char *name,
+			    struct idmap_methods *methods)
+{
+	struct idmap_methods *test;
+	struct idmap_backend *entry;
+
+	if (!idmap_ctx) {
+		return NT_STATUS_INTERNAL_DB_ERROR;
+	}
+
+ 	if ((version != SMB_IDMAP_INTERFACE_VERSION)) {
+		DEBUG(0, ("Failed to register idmap module.\n"
+		          "The module was compiled against "
+			  "SMB_IDMAP_INTERFACE_VERSION %d,\n"
+		          "current SMB_IDMAP_INTERFACE_VERSION is %d.\n"
+		          "Please recompile against the current version "
+			  "of samba!\n",
+			  version, SMB_IDMAP_INTERFACE_VERSION));
+		return NT_STATUS_OBJECT_TYPE_MISMATCH;
+  	}
+
+	if (!name || !name[0] || !methods) {
+		DEBUG(0,("Called with NULL pointer or empty name!\n"));
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	test = get_methods(backends, name);
+	if (test) {
+		DEBUG(0,("Idmap module %s already registered!\n", name));
+		return NT_STATUS_OBJECT_NAME_COLLISION;
+	}
+
+	entry = talloc(idmap_ctx, struct idmap_backend);
+	if ( ! entry) {
+		DEBUG(0,("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+	entry->name = talloc_strdup(idmap_ctx, name);
+	if ( ! entry->name) {
+		DEBUG(0,("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+	entry->methods = methods;
+
+	DLIST_ADD(backends, entry);
+	DEBUG(5, ("Successfully added idmap backend '%s'\n", name));
+	return NT_STATUS_OK;
+}
+
+/**********************************************************************
+ Allow a module to register itself as a method.
+**********************************************************************/
+
+NTSTATUS smb_register_idmap_alloc(int version, const char *name,
+				  struct idmap_alloc_methods *methods)
+{
+	struct idmap_alloc_methods *test;
+	struct idmap_alloc_backend *entry;
+
+	if (!idmap_ctx) {
+		return NT_STATUS_INTERNAL_DB_ERROR;
+	}
+
+ 	if ((version != SMB_IDMAP_INTERFACE_VERSION)) {
+		DEBUG(0, ("Failed to register idmap alloc module.\n"
+		          "The module was compiled against "
+			  "SMB_IDMAP_INTERFACE_VERSION %d,\n"
+		          "current SMB_IDMAP_INTERFACE_VERSION is %d.\n"
+		          "Please recompile against the current version "
+			  "of samba!\n",
+			  version, SMB_IDMAP_INTERFACE_VERSION));
+		return NT_STATUS_OBJECT_TYPE_MISMATCH;
+  	}
+
+	if (!name || !name[0] || !methods) {
+		DEBUG(0,("Called with NULL pointer or empty name!\n"));
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	test = get_alloc_methods(alloc_backends, name);
+	if (test) {
+		DEBUG(0,("idmap_alloc module %s already registered!\n", name));
+		return NT_STATUS_OBJECT_NAME_COLLISION;
+	}
+
+	entry = talloc(idmap_ctx, struct idmap_alloc_backend);
+	if ( ! entry) {
+		DEBUG(0,("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+	entry->name = talloc_strdup(idmap_ctx, name);
+	if ( ! entry->name) {
+		DEBUG(0,("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+	entry->methods = methods;
+
+	DLIST_ADD(alloc_backends, entry);
+	DEBUG(5, ("Successfully added idmap alloc backend '%s'\n", name));
+	return NT_STATUS_OK;
+}
+
+static int close_domain_destructor(struct idmap_domain *dom)
+{
+	NTSTATUS ret;
+
+	ret = dom->methods->close_fn(dom);
+	if (!NT_STATUS_IS_OK(ret)) {
+		DEBUG(3, ("Failed to close idmap domain [%s]!\n", dom->name));
+	}
+
+	return 0;
+}
+
+/**************************************************************************
+ Shutdown.
+**************************************************************************/
+
+NTSTATUS idmap_close(void)
+{
+	/* close the alloc backend first before freeing idmap_ctx */
+	if (idmap_alloc_ctx) {
+		idmap_alloc_ctx->methods->close_fn();
+		idmap_alloc_ctx->methods = NULL;
+	}
+	alloc_backends = NULL;
+
+	/* this talloc_free call will fire the talloc destructors
+	 * that will free all active backends resources */
+	TALLOC_FREE(idmap_ctx);
+	idmap_cache = NULL;
+	idmap_domains = NULL;
+	backends = NULL;
+
+	return NT_STATUS_OK;
+}
+
+/****************************************************************************
+ ****************************************************************************/
+
+NTSTATUS idmap_init_cache(void)
+{
+	/* Always initialize the cache.  We'll have to delay initialization
+	   of backends if we are offline */
+
+	if ( idmap_ctx ) {
+		return NT_STATUS_OK;
+	}
+
+	if ( (idmap_ctx = talloc_named_const(NULL, 0, "idmap_ctx")) == NULL ) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	if ( (idmap_cache = idmap_cache_init(idmap_ctx)) == NULL ) {
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	return NT_STATUS_OK;
+}
+
+/****************************************************************************
+ ****************************************************************************/
+
+NTSTATUS idmap_init(void)
+{
+	NTSTATUS ret;
+	static NTSTATUS idmap_init_status = NT_STATUS_UNSUCCESSFUL;
+	struct idmap_domain *dom;
+	char *compat_backend = NULL;
+	char *compat_params = NULL;
+	const char **dom_list = NULL;
+	const char *default_domain = NULL;
+	char *alloc_backend = NULL;
+	BOOL default_already_defined = False;
+	BOOL pri_dom_is_in_list = False;
+	int compat = 0;
+	int i;
+
+	ret = idmap_init_cache();
+	if (!NT_STATUS_IS_OK(ret))
+		return ret;
+
+	if (NT_STATUS_IS_OK(idmap_init_status))
+		return NT_STATUS_OK;
+
+	static_init_idmap;
+
+	dom_list = lp_idmap_domains();
+
+	if ( lp_idmap_backend() ) {
+       		const char **compat_list = lp_idmap_backend();
+		char *p = NULL;
+		const char *q = NULL;
+
+		if (dom_list) {
+			DEBUG(0, ("WARNING: idmap backend and idmap domains "
+				  "are mutually excusive!\n"));
+			DEBUGADD(0,("idmap backend option will be IGNORED!\n"));
+		} else {
+			compat = 1;
+
+			/* strip any leading idmap_ prefix of */
+			if (strncmp(*compat_list, "idmap_", 6) == 0 ) {
+				q = *compat_list += 6;
+				DEBUG(0, ("WARNING: idmap backend uses obsolete"
+					  " and deprecated 'idmap_' prefix.\n"
+					  "Please replace 'idmap_%s' by '%s' in"
+					  " %s\n", q, q, dyn_CONFIGFILE));
+				compat_backend = talloc_strdup(idmap_ctx, q);
+			} else {
+				compat_backend = talloc_strdup(idmap_ctx,
+								*compat_list);
+			}
+
+			if (compat_backend == NULL) {
+				ret = NT_STATUS_NO_MEMORY;
+				goto done;
+			}
+
+			/* separate the backend and module arguements */
+			if ((p = strchr(compat_backend, ':')) != NULL) {
+				*p = '\0';
+				compat_params = p + 1;
+			}
+		}
+	} else if ( !dom_list ) {
+		/* Back compatible: without idmap domains and explicit
+		   idmap backend.  Taking default idmap backend: tdb */
+
+		compat = 1;
+		compat_backend = talloc_strdup( idmap_ctx, "tdb");
+		compat_params = compat_backend;
+	}
+
+	if ( ! dom_list) {
+		/* generate a list with our main domain */
+		char ** dl;
+
+		dl = talloc_array(idmap_ctx, char *, 2);
+		if (dl == NULL) {
+			ret = NT_STATUS_NO_MEMORY;
+			goto done;
+		}
+		dl[0] = talloc_strdup(dl, lp_workgroup());
+		if (dl[0] == NULL) {
+			ret = NT_STATUS_NO_MEMORY;
+			goto done;
+		}
+
+		/* terminate */
+		dl[1] = NULL;
+
+		dom_list = (const char **)dl;
+		default_domain = dl[0];
+	}
+
+	/***************************
+	 * initialize idmap domains
+	 */
+	DEBUG(1, ("Initializing idmap domains\n"));
+
+	for (i=0, num_domains=0; dom_list[i]; i++) {
+	       	const char *parm_backend;
+		char *config_option;
+
+		/* ignore BUILTIN and local MACHINE domains */
+		if (strequal(dom_list[i], "BUILTIN")
+		     || strequal(dom_list[i], get_global_sam_name()))
+		{
+			DEBUG(0,("idmap_init: Ignoring domain %s\n",
+				 dom_list[i]));
+			continue;
+		}
+
+		if ((dom_list[i] != default_domain) &&
+		    strequal(dom_list[i], lp_workgroup())) {
+			pri_dom_is_in_list = True;
+		}
+		/* init domain */
+
+		dom = TALLOC_ZERO_P(idmap_ctx, struct idmap_domain);
+		IDMAP_CHECK_ALLOC(dom);
+
+		dom->name = talloc_strdup(dom, dom_list[i]);
+		IDMAP_CHECK_ALLOC(dom->name);
+
+		config_option = talloc_asprintf(dom, "idmap config %s",
+						dom->name);
+		IDMAP_CHECK_ALLOC(config_option);
+
+		/* default or specific ? */
+
+		dom->default_domain = lp_parm_bool(-1, config_option,
+						   "default", False);
+
+		if (dom->default_domain ||
+		    (default_domain && strequal(dom_list[i], default_domain))) {
+
+			/* make sure this is set even when we match
+			 * default_domain */
+			dom->default_domain = True;
+
+			if (default_already_defined) {
+				DEBUG(1, ("ERROR: Multiple domains defined as"
+					  " default!\n"));
+				ret = NT_STATUS_INVALID_PARAMETER;
+				goto done;
+			}
+
+			default_already_defined = True;
+
+		}
+
+		dom->readonly = lp_parm_bool(-1, config_option,
+					     "readonly", False);
+
+		/* find associated backend (default: tdb) */
+		if (compat) {
+			parm_backend = talloc_strdup(idmap_ctx, compat_backend);
+		} else {
+			parm_backend = talloc_strdup(idmap_ctx,
+						     lp_parm_const_string(
+							-1, config_option,
+							"backend", "tdb"));
+		}
+		IDMAP_CHECK_ALLOC(parm_backend);
+
+		/* get the backend methods for this domain */
+		dom->methods = get_methods(backends, parm_backend);
+
+		if ( ! dom->methods) {
+			ret = smb_probe_module("idmap", parm_backend);
+			if (NT_STATUS_IS_OK(ret)) {
+				dom->methods = get_methods(backends,
+							   parm_backend);
+			}
+		}
+		if ( ! dom->methods) {
+			DEBUG(0, ("ERROR: Could not get methods for "
+				  "backend %s\n", parm_backend));
+			ret = NT_STATUS_UNSUCCESSFUL;
+			goto done;
+		}
+
+		/* check the set_mapping function exists otherwise mark the
+		 * module as readonly */
+		if ( ! dom->methods->set_mapping) {
+			DEBUG(5, ("Forcing to readonly, as this module can't"
+				  " store arbitrary mappings.\n"));
+			dom->readonly = True;
+		}
+
+		/* now that we have methods,
+		 * set the destructor for this domain */
+		talloc_set_destructor(dom, close_domain_destructor);
+
+		if (compat_params) {
+			dom->params = talloc_strdup(dom, compat_params);
+			IDMAP_CHECK_ALLOC(dom->params);
+		} else {
+			dom->params = NULL;
+		}
+
+		/* Finally instance a backend copy for this domain */
+		ret = dom->methods->init(dom);
+		if ( ! NT_STATUS_IS_OK(ret)) {
+			DEBUG(0, ("ERROR: Initialization failed for backend "
+				  "%s (domain %s), deferred!\n",
+				  parm_backend, dom->name));
+		}
+		idmap_domains = talloc_realloc(idmap_ctx, idmap_domains,
+						struct idmap_domain *, i+1);
+		if ( ! idmap_domains) {
+			DEBUG(0, ("Out of memory!\n"));
+			ret = NT_STATUS_NO_MEMORY;
+			goto done;
+		}
+		idmap_domains[num_domains] = dom;
+
+		/* save default domain position for future uses */
+		if (dom->default_domain) {
+			def_dom_num = num_domains;
+		}
+
+		/* Bump counter to next available slot */
+
+		num_domains++;
+
+		DEBUG(10, ("Domain %s - Backend %s - %sdefault - %sreadonly\n",
+				dom->name, parm_backend,
+				dom->default_domain?"":"not ",
+				dom->readonly?"":"not "));
+
+		talloc_free(config_option);
+	}
+
+	/* on DCs we need to add idmap_tdb as the default backend if compat is
+	 * defined (when the old implicit configuration is used)
+	 * This is not done in the previous loop a on member server we exclude
+	 * the local domain. But on a DC the local domain is the only domain
+	 * available therefore we are left with no default domain */
+	if (((lp_server_role() == ROLE_DOMAIN_PDC) ||
+	     (lp_server_role() == ROLE_DOMAIN_BDC)) &&
+            ((num_domains == 0) && (compat == 1))) {
+
+		dom = TALLOC_ZERO_P(idmap_ctx, struct idmap_domain);
+		IDMAP_CHECK_ALLOC(dom);
+
+		dom->name = talloc_strdup(dom, "__default__");
+		IDMAP_CHECK_ALLOC(dom->name);
+
+		dom->default_domain = True;
+		dom->readonly = False;
+
+		/* get the backend methods for this domain */
+		dom->methods = get_methods(backends, compat_backend);
+
+		if ( ! dom->methods) {
+			ret = smb_probe_module("idmap", compat_backend);
+			if (NT_STATUS_IS_OK(ret)) {
+				dom->methods = get_methods(backends,
+							   compat_backend);
+			}
+		}
+		if ( ! dom->methods) {
+			DEBUG(0, ("ERROR: Could not get methods for "
+				  "backend %s\n", compat_backend));
+			ret = NT_STATUS_UNSUCCESSFUL;
+			goto done;
+		}
+
+		/* now that we have methods,
+		 * set the destructor for this domain */
+		talloc_set_destructor(dom, close_domain_destructor);
+
+		dom->params = talloc_strdup(dom, compat_params);
+		IDMAP_CHECK_ALLOC(dom->params);
+
+		/* Finally instance a backend copy for this domain */
+		ret = dom->methods->init(dom);
+		if ( ! NT_STATUS_IS_OK(ret)) {
+			DEBUG(0, ("ERROR: Initialization failed for backend "
+				  "%s (domain %s), deferred!\n",
+				  compat_backend, dom->name));
+		}
+		idmap_domains = talloc_realloc(idmap_ctx, idmap_domains,
+						struct idmap_domain *, 2);
+		if ( ! idmap_domains) {
+			DEBUG(0, ("Out of memory!\n"));
+			ret = NT_STATUS_NO_MEMORY;
+			goto done;
+		}
+		idmap_domains[num_domains] = dom;
+
+		def_dom_num = num_domains;
+
+		/* Bump counter to next available slot */
+
+		num_domains++;
+
+		DEBUG(10, ("Domain %s - Backend %s - %sdefault - %sreadonly\n",
+				dom->name, compat_backend,
+				dom->default_domain?"":"not ",
+				dom->readonly?"":"not "));
+	}
+
+	/* automatically add idmap_nss backend if needed */
+	if ((lp_server_role() == ROLE_DOMAIN_MEMBER) &&
+	    ( ! pri_dom_is_in_list) &&
+	    lp_winbind_trusted_domains_only()) {
+
+		dom = TALLOC_ZERO_P(idmap_ctx, struct idmap_domain);
+		IDMAP_CHECK_ALLOC(dom);
+
+		dom->name = talloc_strdup(dom, lp_workgroup());
+		IDMAP_CHECK_ALLOC(dom->name);
+
+		dom->default_domain = False;
+		dom->readonly = True;
+
+		/* get the backend methods for passdb */
+		dom->methods = get_methods(backends, "nss");
+
+		/* (the nss module is always statically linked) */
+		if ( ! dom->methods) {
+			DEBUG(0, ("ERROR: No methods for idmap_nss ?!\n"));
+			ret = NT_STATUS_UNSUCCESSFUL;
+			goto done;
+		}
+
+		/* now that we have methods,
+		 * set the destructor for this domain */
+		talloc_set_destructor(dom, close_domain_destructor);
+
+		if (compat_params) {
+			dom->params = talloc_strdup(dom, compat_params);
+			IDMAP_CHECK_ALLOC(dom->params);
+		} else {
+			dom->params = NULL;
+		}
+
+		/* Finally instance a backend copy for this domain */
+		ret = dom->methods->init(dom);
+		if ( ! NT_STATUS_IS_OK(ret)) {
+			DEBUG(0, ("ERROR: Init. failed for idmap_nss ?!\n"));
+			ret = NT_STATUS_UNSUCCESSFUL;
+			goto done;
+		}
+
+		idmap_domains = talloc_realloc(idmap_ctx,
+						idmap_domains,
+						struct idmap_domain *,
+						num_domains+1);
+		if ( ! idmap_domains) {
+			DEBUG(0, ("Out of memory!\n"));
+			ret = NT_STATUS_NO_MEMORY;
+			goto done;
+		}
+		idmap_domains[num_domains] = dom;
+
+		DEBUG(10, ("Domain %s - Backend nss - not default - readonly\n",
+			   dom->name ));
+
+		num_domains++;
+	}
+
+	/**** automatically add idmap_passdb backend ****/
+	dom = TALLOC_ZERO_P(idmap_ctx, struct idmap_domain);
+	IDMAP_CHECK_ALLOC(dom);
+
+	dom->name = talloc_strdup(dom, get_global_sam_name());
+	IDMAP_CHECK_ALLOC(dom->name);
+
+	dom->default_domain = False;
+	dom->readonly = True;
+
+	/* get the backend methods for passdb */
+	dom->methods = get_methods(backends, "passdb");
+
+	/* (the passdb module is always statically linked) */
+	if ( ! dom->methods) {
+		DEBUG(0, ("ERROR: No methods for idmap_passdb ?!\n"));
+		ret = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+	/* now that we have methods, set the destructor for this domain */
+	talloc_set_destructor(dom, close_domain_destructor);
+
+	if (compat_params) {
+		dom->params = talloc_strdup(dom, compat_params);
+		IDMAP_CHECK_ALLOC(dom->params);
+	} else {
+		dom->params = NULL;
+	}
+
+	/* Finally instance a backend copy for this domain */
+	ret = dom->methods->init(dom);
+	if ( ! NT_STATUS_IS_OK(ret)) {
+		DEBUG(0, ("ERROR: Init. failed for idmap_passdb ?!\n"));
+		ret = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+	idmap_domains = talloc_realloc(idmap_ctx,
+					idmap_domains,
+					struct idmap_domain *,
+					num_domains+1);
+	if ( ! idmap_domains) {
+		DEBUG(0, ("Out of memory!\n"));
+		ret = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+	idmap_domains[num_domains] = dom;
+
+	/* needed to handle special BUILTIN and wellknown SIDs cases */
+	pdb_dom_num = num_domains;
+
+	DEBUG(10, ("Domain %s - Backend passdb - not default - readonly\n",
+		   dom->name));
+
+	num_domains++;
+	/**** finished adding idmap_passdb backend ****/
+
+	/* sort domains so that the default is the last one */
+	/* don't sort if no default domain defined */
+	if (def_dom_num != -1 && def_dom_num != num_domains-1) {
+		/* default is not last, move it */
+		struct idmap_domain *tmp;
+
+		if (pdb_dom_num > def_dom_num) {
+			pdb_dom_num --;
+
+		} else if (pdb_dom_num == def_dom_num) { /* ?? */
+			pdb_dom_num = num_domains - 1;
+		}
+
+		tmp = idmap_domains[def_dom_num];
+
+		for (i = def_dom_num; i < num_domains-1; i++) {
+			idmap_domains[i] = idmap_domains[i+1];
+		}
+		idmap_domains[i] = tmp;
+		def_dom_num = i;
+	}
+
+
+	/* Initialize alloc module */
+
+	DEBUG(3, ("Initializing idmap alloc module\n"));
+
+	alloc_backend = NULL;
+	if (compat) {
+		alloc_backend = talloc_strdup(idmap_ctx, compat_backend);
+	} else {
+		char *ab = lp_idmap_alloc_backend();
+
+		if (ab && (ab[0] != '\0')) {
+			alloc_backend = talloc_strdup(idmap_ctx,
+						      lp_idmap_alloc_backend());
+		}
+	}
+
+	if ( alloc_backend ) {
+
+		idmap_alloc_ctx = TALLOC_ZERO_P(idmap_ctx,
+						struct idmap_alloc_context);
+		IDMAP_CHECK_ALLOC(idmap_alloc_ctx);
+
+		idmap_alloc_ctx->methods = get_alloc_methods(alloc_backends,
+							     alloc_backend);
+		if ( ! idmap_alloc_ctx->methods) {
+			ret = smb_probe_module("idmap", alloc_backend);
+			if (NT_STATUS_IS_OK(ret)) {
+				idmap_alloc_ctx->methods =
+					get_alloc_methods(alloc_backends,
+							  alloc_backend);
+			}
+		}
+		if (idmap_alloc_ctx->methods) {
+
+			if (compat_params) {
+				idmap_alloc_ctx->params =
+					talloc_strdup(idmap_alloc_ctx,
+						      compat_params);
+				IDMAP_CHECK_ALLOC(idmap_alloc_ctx->params);
+			} else {
+				idmap_alloc_ctx->params = NULL;
+			}
+
+			ret = idmap_alloc_ctx->methods->init(idmap_alloc_ctx->params);
+			if ( ! NT_STATUS_IS_OK(ret)) {
+				DEBUG(0, ("ERROR: Initialization failed for "
+					  "alloc backend %s, deferred!\n",
+					  alloc_backend));
+			} else {
+				idmap_alloc_ctx->initialized = True;
+			}
+		} else {
+			DEBUG(2, ("idmap_init: Unable to get methods for "
+				  "alloc backend %s\n",
+				  alloc_backend));
+			/* certain compat backends are just readonly */
+			if ( compat ) {
+				TALLOC_FREE(idmap_alloc_ctx);
+				ret = NT_STATUS_OK;
+			} else {
+				ret = NT_STATUS_UNSUCCESSFUL;
+			}
+		}
+	}
+
+	/* cleanpu temporary strings */
+	TALLOC_FREE( compat_backend );
+
+	idmap_init_status = NT_STATUS_OK;
+
+	return ret;
+
+done:
+	DEBUG(0, ("Aborting IDMAP Initialization ...\n"));
+	idmap_close();
+
+	return ret;
+}
+
+static NTSTATUS idmap_alloc_init(void)
+{
+	NTSTATUS ret;
+
+	if (! NT_STATUS_IS_OK(ret = idmap_init())) {
+		return ret;
+	}
+
+	if ( ! idmap_alloc_ctx) {
+		return NT_STATUS_NOT_SUPPORTED;
+	}
+
+	if ( ! idmap_alloc_ctx->initialized) {
+		ret = idmap_alloc_ctx->methods->init(idmap_alloc_ctx->params);
+		if ( ! NT_STATUS_IS_OK(ret)) {
+			DEBUG(0, ("ERROR: Initialization failed for alloc "
+				  "backend, deferred!\n"));
+			return ret;
+		} else {
+			idmap_alloc_ctx->initialized = True;
+		}
+	}
+
+	return NT_STATUS_OK;
+}
+
+/**************************************************************************
+ idmap allocator interface functions
+**************************************************************************/
+
+NTSTATUS idmap_allocate_uid(struct unixid *id)
+{
+	NTSTATUS ret;
+
+	if (! NT_STATUS_IS_OK(ret = idmap_alloc_init())) {
+		return ret;
+	}
+
+	id->type = ID_TYPE_UID;
+	return idmap_alloc_ctx->methods->allocate_id(id);
+}
+
+NTSTATUS idmap_allocate_gid(struct unixid *id)
+{
+	NTSTATUS ret;
+
+	if (! NT_STATUS_IS_OK(ret = idmap_alloc_init())) {
+		return ret;
+	}
+
+	id->type = ID_TYPE_GID;
+	return idmap_alloc_ctx->methods->allocate_id(id);
+}
+
+NTSTATUS idmap_set_uid_hwm(struct unixid *id)
+{
+	NTSTATUS ret;
+
+	if (! NT_STATUS_IS_OK(ret = idmap_alloc_init())) {
+		return ret;
+	}
+
+	id->type = ID_TYPE_UID;
+	return idmap_alloc_ctx->methods->set_id_hwm(id);
+}
+
+NTSTATUS idmap_set_gid_hwm(struct unixid *id)
+{
+	NTSTATUS ret;
+
+	if (! NT_STATUS_IS_OK(ret = idmap_alloc_init())) {
+		return ret;
+	}
+
+	id->type = ID_TYPE_GID;
+	return idmap_alloc_ctx->methods->set_id_hwm(id);
+}
+
+/******************************************************************************
+ Lookup an idmap_domain give a full user or group SID
+ ******************************************************************************/
+
+static struct idmap_domain* find_idmap_domain_from_sid( DOM_SID *account_sid )
+{
+	DOM_SID domain_sid;
+	uint32 rid;
+	struct winbindd_domain *domain = NULL;
+	int i;
+
+	/* 1. Handle BUILTIN or Special SIDs and prevent them from
+	   falling into the default domain space (if we have a
+	   configured passdb backend. */
+
+	if ( (pdb_dom_num != -1) &&
+	     (sid_check_is_in_builtin(account_sid) ||
+	      sid_check_is_in_wellknown_domain(account_sid) ||
+	      sid_check_is_in_unix_groups(account_sid) ||
+	      sid_check_is_in_unix_users(account_sid)) )
+	{
+		return idmap_domains[pdb_dom_num];
+	}
+
+	/* 2. Lookup the winbindd_domain from the account_sid */
+
+	sid_copy( &domain_sid, account_sid );
+	sid_split_rid( &domain_sid, &rid );
+	domain = find_domain_from_sid_noinit( &domain_sid );
+
+	for (i = 0; domain && i < num_domains; i++) {
+		if ( strequal( idmap_domains[i]->name, domain->name ) ) {
+			return idmap_domains[i];
+		}
+	}
+
+	/* 3. Fall back to the default domain */
+
+	if ( def_dom_num != -1 ) {
+		return idmap_domains[def_dom_num];
+	}
+
+	return NULL;
+}
+
+/******************************************************************************
+ Lookup an index given an idmap_domain pointer
+ ******************************************************************************/
+
+static uint32 find_idmap_domain_index( struct idmap_domain *id_domain)
+{
+	int i;
+
+	for (i = 0; i < num_domains; i++) {
+		if ( idmap_domains[i] == id_domain )
+			return i;
+	}
+
+	return -1;
+}
+
+
+/*********************************************************
+ Check if creating a mapping is permitted for the domain
+*********************************************************/
+
+static NTSTATUS idmap_can_map(const struct id_map *map,
+			      struct idmap_domain **ret_dom)
+{
+	struct idmap_domain *dom;
+
+	/* Check we do not create mappings for our own local domain,
+	 * or BUILTIN or special SIDs */
+	if ((sid_compare_domain(map->sid, get_global_sam_sid()) == 0) ||
+	    sid_check_is_in_builtin(map->sid) ||
+	    sid_check_is_in_wellknown_domain(map->sid)) {
+		DEBUG(10, ("We are not supposed to create mappings for "
+			   "our own domains (local, builtin, specials)\n"));
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	/* Special check for trusted domain only = Yes */
+	if (lp_winbind_trusted_domains_only()) {
+		struct winbindd_domain *wdom = find_our_domain();
+		if (wdom && (sid_compare_domain(map->sid, &wdom->sid) == 0)) {
+			DEBUG(10, ("We are not supposed to create mappings for "
+				   "our primary domain when <trusted domain "
+				   "only> is True\n"));
+			DEBUGADD(10, ("Leave [%s] unmapped\n",
+				      sid_string_static(map->sid)));
+			return NT_STATUS_UNSUCCESSFUL;
+		}
+	}
+
+	if ( (dom = find_idmap_domain_from_sid( map->sid )) == NULL ) {
+		/* huh, couldn't find a suitable domain,
+		 *  let's just leave it unmapped */
+		DEBUG(10, ("Could not find idmap backend for SID %s\n",
+			   sid_string_static(map->sid)));
+		return NT_STATUS_NO_SUCH_DOMAIN;
+	}
+
+	if (dom->readonly) {
+		/* ouch the domain is read only,
+		 *  let's just leave it unmapped */
+		DEBUG(10, ("idmap backend for SID %s is READONLY!\n",
+			   sid_string_static(map->sid)));
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	*ret_dom = dom;
+	return NT_STATUS_OK;
+}
+
+static NTSTATUS idmap_new_mapping(TALLOC_CTX *ctx, struct id_map *map)
+{
+	NTSTATUS ret;
+	struct idmap_domain *dom;
+
+	/* If we are offline we cannot lookup SIDs, deny mapping */
+	if (idmap_is_offline())	{
+		return NT_STATUS_FILE_IS_OFFLINE;
+	}
+
+	ret = idmap_can_map(map, &dom);
+	if ( ! NT_STATUS_IS_OK(ret)) {
+		return NT_STATUS_NONE_MAPPED;
+	}
+
+	/* check if this is a valid SID and then map it */
+	switch (map->xid.type) {
+	case ID_TYPE_UID:
+		ret = idmap_allocate_uid(&map->xid);
+		if ( ! NT_STATUS_IS_OK(ret)) {
+			/* can't allocate id, let's just leave it unmapped */
+			DEBUG(2, ("uid allocation failed! "
+				  "Can't create mapping\n"));
+			return NT_STATUS_NONE_MAPPED;
+		}
+		break;
+	case ID_TYPE_GID:
+		ret = idmap_allocate_gid(&map->xid);
+		if ( ! NT_STATUS_IS_OK(ret)) {
+			/* can't allocate id, let's just leave it unmapped */
+			DEBUG(2, ("gid allocation failed! "
+				  "Can't create mapping\n"));
+			return NT_STATUS_NONE_MAPPED;
+		}
+		break;
+	default:
+		/* invalid sid, let's just leave it unmapped */
+		DEBUG(3,("idmap_new_mapping: Refusing to create a "
+			 "mapping for an unspecified ID type.\n"));
+		return NT_STATUS_NONE_MAPPED;
+	}
+
+	/* ok, got a new id, let's set a mapping */
+	map->status = ID_MAPPED;
+
+	DEBUG(10, ("Setting mapping: %s <-> %s %lu\n",
+		   sid_string_static(map->sid),
+		   (map->xid.type == ID_TYPE_UID) ? "UID" : "GID",
+		   (unsigned long)map->xid.id));
+	ret = dom->methods->set_mapping(dom, map);
+
+	if ( ! NT_STATUS_IS_OK(ret)) {
+		/* something wrong here :-( */
+		DEBUG(2, ("Failed to commit mapping\n!"));
+
+	/* TODO: would it make sense to have an "unalloc_id function?" */
+
+		return NT_STATUS_NONE_MAPPED;
+	}
+
+	return NT_STATUS_OK;
+}
+
+static NTSTATUS idmap_backends_set_mapping(const struct id_map *map)
+{
+	struct idmap_domain *dom;
+	NTSTATUS ret;
+
+	DEBUG(10, ("Setting mapping %s <-> %s %lu\n",
+		   sid_string_static(map->sid),
+		   (map->xid.type == ID_TYPE_UID) ? "UID" : "GID",
+		   (unsigned long)map->xid.id));
+
+	ret = idmap_can_map(map, &dom);
+	if ( ! NT_STATUS_IS_OK(ret)) {
+		return ret;
+	}
+
+	DEBUG(10,("set_mapping for domain %s\n", dom->name ));
+
+	return dom->methods->set_mapping(dom, map);
+}
+
+static NTSTATUS idmap_backends_unixids_to_sids(struct id_map **ids)
+{
+	struct idmap_domain *dom;
+	struct id_map **unmapped;
+	struct id_map **_ids;
+	TALLOC_CTX *ctx;
+	NTSTATUS ret;
+	int i, u, n;
+
+	if (!ids || !*ids) {
+		DEBUG(1, ("Invalid list of maps\n"));
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	ctx = talloc_named_const(NULL, 0, "idmap_backends_unixids_to_sids ctx");
+	if ( ! ctx) {
+		DEBUG(0, ("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	DEBUG(10, ("Query backends to map ids->sids\n"));
+
+	/* start from the default (the last one) and then if there are still
+	 * unmapped entries cycle through the others */
+
+	_ids = ids;
+
+	unmapped = NULL;
+	for (n = num_domains-1; n >= 0; n--) { /* cycle backwards */
+
+		dom = idmap_domains[n];
+
+		DEBUG(10, ("Query sids from domain %s\n", dom->name));
+
+		ret = dom->methods->unixids_to_sids(dom, _ids);
+		IDMAP_REPORT_RET(ret);
+
+		unmapped = NULL;
+
+		for (i = 0, u = 0; _ids[i]; i++) {
+			if (_ids[i]->status != ID_MAPPED) {
+				unmapped = talloc_realloc(ctx, unmapped,
+							struct id_map *, u + 2);
+				IDMAP_CHECK_ALLOC(unmapped);
+				unmapped[u] = _ids[i];
+				u++;
+			}
+		}
+		if (unmapped) {
+			/* terminate the unmapped list */
+			unmapped[u] = NULL;
+		} else { /* no more entries, get out */
+			break;
+		}
+
+		_ids = unmapped;
+
+	}
+
+	if (unmapped) {
+		/* there are still unmapped ids,
+		 * map them to the unix users/groups domains */
+		/* except for expired entries,
+		 * these will be returned as valid (offline mode) */
+		for (i = 0; unmapped[i]; i++) {
+			if (unmapped[i]->status == ID_EXPIRED) continue;
+			switch (unmapped[i]->xid.type) {
+			case ID_TYPE_UID:
+				uid_to_unix_users_sid(
+						(uid_t)unmapped[i]->xid.id,
+						unmapped[i]->sid);
+				unmapped[i]->status = ID_MAPPED;
+				break;
+			case ID_TYPE_GID:
+				gid_to_unix_groups_sid(
+						(gid_t)unmapped[i]->xid.id,
+						unmapped[i]->sid);
+				unmapped[i]->status = ID_MAPPED;
+				break;
+			default: /* what?! */
+				unmapped[i]->status = ID_UNKNOWN;
+				break;
+			}
+		}
+	}
+
+	ret = NT_STATUS_OK;
+
+done:
+	talloc_free(ctx);
+	return ret;
+}
+
+static NTSTATUS idmap_backends_sids_to_unixids(struct id_map **ids)
+{
+	struct id_map ***dom_ids;
+	struct idmap_domain *dom;
+	TALLOC_CTX *ctx;
+	NTSTATUS ret;
+	int i, *counters;
+
+	if ( (ctx = talloc_named_const(NULL, 0, "be_sids_to_ids")) == NULL ) {
+		DEBUG(1, ("failed to allocate talloc context, OOM?\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	DEBUG(10, ("Query backends to map sids->ids\n"));
+
+	/* split list per domain */
+	if (num_domains == 0) {
+		DEBUG(1, ("No domains available?\n"));
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	dom_ids = TALLOC_ZERO_ARRAY(ctx, struct id_map **, num_domains);
+	IDMAP_CHECK_ALLOC(dom_ids);
+	counters = TALLOC_ZERO_ARRAY(ctx, int, num_domains);
+	IDMAP_CHECK_ALLOC(counters);
+
+	/* partition the requests by domain */
+
+	for (i = 0; ids[i]; i++) {
+		uint32 idx;
+
+		if ((dom = find_idmap_domain_from_sid(ids[i]->sid)) == NULL) {
+			/* no available idmap_domain.  Move on */
+			continue;
+		}
+
+		DEBUG(10,("SID %s is being handled by %s\n",
+			  sid_string_static(ids[i]->sid),
+			  dom ? dom->name : "none" ));
+
+		idx = find_idmap_domain_index( dom );
+		SMB_ASSERT( idx != -1 );
+
+		dom_ids[idx] = talloc_realloc(ctx, dom_ids[idx],
+					      struct id_map *,
+					      counters[idx] + 2);
+		IDMAP_CHECK_ALLOC(dom_ids[idx]);
+
+		dom_ids[idx][counters[idx]] = ids[i];
+		counters[idx]++;
+		dom_ids[idx][counters[idx]] = NULL;
+	}
+
+	/* All the ids have been dispatched in the right queues.
+	   Let's cycle through the filled ones */
+
+	for (i = 0; i < num_domains; i++) {
+		if (dom_ids[i]) {
+			dom = idmap_domains[i];
+			DEBUG(10, ("Query ids from domain %s\n", dom->name));
+			ret = dom->methods->sids_to_unixids(dom, dom_ids[i]);
+			IDMAP_REPORT_RET(ret);
+		}
+	}
+
+	/* ok all the backends have been contacted at this point */
+	/* let's see if we have any unmapped SID left and act accordingly */
+
+	for (i = 0; ids[i]; i++) {
+		/* NOTE: this will NOT touch ID_EXPIRED entries that the backend
+		 * was not able to confirm/deny (offline mode) */
+		if (ids[i]->status == ID_UNKNOWN ||
+			ids[i]->status == ID_UNMAPPED) {
+			/* ok this is an unmapped one, see if we can map it */
+			ret = idmap_new_mapping(ctx, ids[i]);
+			if (NT_STATUS_IS_OK(ret)) {
+				/* successfully mapped */
+				ids[i]->status = ID_MAPPED;
+			} else
+			if (NT_STATUS_EQUAL(ret, NT_STATUS_NONE_MAPPED)) {
+				/* could not map it */
+				ids[i]->status = ID_UNMAPPED;
+			} else {
+				/* Something very bad happened down there
+				 * OR we are offline */
+				ids[i]->status = ID_UNKNOWN;
+			}
+		}
+	}
+
+	ret = NT_STATUS_OK;
+
+done:
+	talloc_free(ctx);
+	return ret;
+}
+
+/**************************************************************************
+ idmap interface functions
+**************************************************************************/
+
+NTSTATUS idmap_unixids_to_sids(struct id_map **ids)
+{
+	TALLOC_CTX *ctx;
+	NTSTATUS ret;
+	struct id_map **bids;
+	int i, bi;
+	int bn = 0;
+
+	if (! NT_STATUS_IS_OK(ret = idmap_init())) {
+		return ret;
+	}
+
+	if (!ids || !*ids) {
+		DEBUG(1, ("Invalid list of maps\n"));
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	ctx = talloc_named_const(NULL, 0, "idmap_unixids_to_sids ctx");
+	if ( ! ctx) {
+		DEBUG(1, ("failed to allocate talloc context, OOM?\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	/* no ids to be asked to the backends by default */
+	bids = NULL;
+	bi = 0;
+
+	for (i = 0; ids[i]; i++) {
+
+		if ( ! ids[i]->sid) {
+			DEBUG(1, ("invalid null SID in id_map array"));
+			talloc_free(ctx);
+			return NT_STATUS_INVALID_PARAMETER;
+		}
+
+		ret = idmap_cache_map_id(idmap_cache, ids[i]);
+
+		if ( ! NT_STATUS_IS_OK(ret)) {
+
+			if ( ! bids) {
+				/* alloc space for ids to be resolved by
+				 * backends (realloc ten by ten) */
+				bids = TALLOC_ARRAY(ctx, struct id_map *, 10);
+				if ( ! bids) {
+					DEBUG(1, ("Out of memory!\n"));
+					talloc_free(ctx);
+					return NT_STATUS_NO_MEMORY;
+				}
+				bn = 10;
+			}
+
+			/* add this id to the ones to be retrieved
+			 * from the backends */
+			bids[bi] = ids[i];
+			bi++;
+
+			/* check if we need to allocate new space
+			 *  on the rids array */
+			if (bi == bn) {
+				bn += 10;
+				bids = talloc_realloc(ctx, bids,
+						      struct id_map *, bn);
+				if ( ! bids) {
+					DEBUG(1, ("Out of memory!\n"));
+					talloc_free(ctx);
+					return NT_STATUS_NO_MEMORY;
+				}
+			}
+
+			/* make sure the last element is NULL */
+			bids[bi] = NULL;
+		}
+	}
+
+	/* let's see if there is any id mapping to be retieved
+	 * from the backends */
+	if (bi) {
+
+		ret = idmap_backends_unixids_to_sids(bids);
+		IDMAP_CHECK_RET(ret);
+
+		/* update the cache */
+		for (i = 0; i < bi; i++) {
+			if (bids[i]->status == ID_MAPPED) {
+				ret = idmap_cache_set(idmap_cache, bids[i]);
+			} else if (bids[i]->status == ID_EXPIRED) {
+				/* the cache returned an expired entry and the
+				 * backend was not able to clear the situation
+				 * (offline). This handles a previous
+				 * NT_STATUS_SYNCHRONIZATION_REQUIRED
+				 * for disconnected mode, */
+				bids[i]->status = ID_MAPPED;
+			} else if (bids[i]->status == ID_UNKNOWN) {
+				/* something bad here. We were not able to
+				 * handle this for some reason, mark it as
+				 * unmapped and hope next time things will
+				 * settle down. */
+				bids[i]->status = ID_UNMAPPED;
+			} else { /* unmapped */
+				ret = idmap_cache_set_negative_id(idmap_cache,
+								  bids[i]);
+			}
+			IDMAP_CHECK_RET(ret);
+		}
+	}
+
+	ret = NT_STATUS_OK;
+done:
+	talloc_free(ctx);
+	return ret;
+}
+
+NTSTATUS idmap_sids_to_unixids(struct id_map **ids)
+{
+	TALLOC_CTX *ctx;
+	NTSTATUS ret;
+	struct id_map **bids;
+	int i, bi;
+	int bn = 0;
+
+	if (! NT_STATUS_IS_OK(ret = idmap_init())) {
+		return ret;
+	}
+
+	if (!ids || !*ids) {
+		DEBUG(1, ("Invalid list of maps\n"));
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	ctx = talloc_named_const(NULL, 0, "idmap_sids_to_unixids ctx");
+	if ( ! ctx) {
+		DEBUG(1, ("failed to allocate talloc context, OOM?\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	/* no ids to be asked to the backends by default */
+	bids = NULL;
+	bi = 0;
+
+	for (i = 0; ids[i]; i++) {
+
+		if ( ! ids[i]->sid) {
+			DEBUG(1, ("invalid null SID in id_map array\n"));
+			talloc_free(ctx);
+			return NT_STATUS_INVALID_PARAMETER;
+		}
+
+		ret = idmap_cache_map_sid(idmap_cache, ids[i]);
+
+		if ( ! NT_STATUS_IS_OK(ret)) {
+
+			if ( ! bids) {
+				/* alloc space for ids to be resolved
+				   by backends (realloc ten by ten) */
+				bids = TALLOC_ARRAY(ctx, struct id_map *, 10);
+				if ( ! bids) {
+					DEBUG(1, ("Out of memory!\n"));
+					talloc_free(ctx);
+					return NT_STATUS_NO_MEMORY;
+				}
+				bn = 10;
+			}
+
+			/* add this id to the ones to be retrieved
+			 * from the backends */
+			bids[bi] = ids[i];
+			bi++;
+
+			/* check if we need to allocate new space
+			 * on the ids array */
+			if (bi == bn) {
+				bn += 10;
+				bids = talloc_realloc(ctx, bids,
+						      struct id_map *, bn);
+				if ( ! bids) {
+					DEBUG(1, ("Out of memory!\n"));
+					talloc_free(ctx);
+					return NT_STATUS_NO_MEMORY;
+				}
+			}
+
+			/* make sure the last element is NULL */
+			bids[bi] = NULL;
+		}
+	}
+
+	/* let's see if there is any id mapping to be retieved
+	 * from the backends */
+	if (bids) {
+
+		ret = idmap_backends_sids_to_unixids(bids);
+		IDMAP_CHECK_RET(ret);
+
+		/* update the cache */
+		for (i = 0; bids[i]; i++) {
+			if (bids[i]->status == ID_MAPPED) {
+				ret = idmap_cache_set(idmap_cache, bids[i]);
+			} else if (bids[i]->status == ID_EXPIRED) {
+				/* the cache returned an expired entry and the
+				 * backend was not able to clear the situation
+				 * (offline). This handles a previous
+				 * NT_STATUS_SYNCHRONIZATION_REQUIRED
+				 * for disconnected mode, */
+				bids[i]->status = ID_MAPPED;
+			} else if (bids[i]->status == ID_UNKNOWN) {
+				/* something bad here. We were not able to
+				 * handle this for some reason, mark it as
+				 * unmapped and hope next time things will
+				 * settle down. */
+				bids[i]->status = ID_UNMAPPED;
+			} else { /* unmapped */
+				ret = idmap_cache_set_negative_sid(idmap_cache,
+								   bids[i]);
+			}
+			IDMAP_CHECK_RET(ret);
+		}
+	}
+
+	ret = NT_STATUS_OK;
+done:
+	talloc_free(ctx);
+	return ret;
+}
+
+NTSTATUS idmap_set_mapping(const struct id_map *id)
+{
+	TALLOC_CTX *ctx;
+	NTSTATUS ret;
+
+	if (! NT_STATUS_IS_OK(ret = idmap_init())) {
+		return ret;
+	}
+
+	/* sanity checks */
+	if ((id->sid == NULL) || (id->status != ID_MAPPED)) {
+		DEBUG(1, ("NULL SID or unmapped entry\n"));
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	/* TODO: check uid/gid range ? */
+
+	ctx = talloc_named_const(NULL, 0, "idmap_set_mapping ctx");
+	if ( ! ctx) {
+		DEBUG(1, ("failed to allocate talloc context, OOM?\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	/* set the new mapping */
+	ret = idmap_backends_set_mapping(id);
+	IDMAP_CHECK_RET(ret);
+
+	/* set the mapping in the cache */
+	ret = idmap_cache_set(idmap_cache, id);
+	IDMAP_CHECK_RET(ret);
+
+done:
+	talloc_free(ctx);
+	return ret;
+}
+
+/**************************************************************************
+ Dump backend status.
+**************************************************************************/
+
+void idmap_dump_maps(char *logfile)
+{
+	NTSTATUS ret;
+	struct unixid allid;
+	struct id_map *maps;
+	int num_maps;
+	FILE *dump;
+	int i;
+
+	if (! NT_STATUS_IS_OK(ret = idmap_init())) {
+		return;
+	}
+
+	dump = fopen(logfile, "w");
+	if ( ! dump) {
+		DEBUG(0, ("Unable to open open stream for file [%s], "
+			  "errno: %d\n", logfile, errno));
+		return;
+	}
+
+	if (NT_STATUS_IS_OK(ret = idmap_alloc_init())) {
+		allid.type = ID_TYPE_UID;
+		allid.id = 0;
+		idmap_alloc_ctx->methods->get_id_hwm(&allid);
+		fprintf(dump, "USER HWM %lu\n", (unsigned long)allid.id);
+
+		allid.type = ID_TYPE_GID;
+		allid.id = 0;
+		idmap_alloc_ctx->methods->get_id_hwm(&allid);
+		fprintf(dump, "GROUP HWM %lu\n", (unsigned long)allid.id);
+	}
+
+	maps = talloc(idmap_ctx, struct id_map);
+	num_maps = 0;
+
+	for (i = 0; i < num_domains; i++) {
+		if (idmap_domains[i]->methods->dump_data) {
+			idmap_domains[i]->methods->dump_data(idmap_domains[i],
+							     &maps, &num_maps);
+		}
+	}
+
+	for (i = 0; i < num_maps; i++) {
+		switch (maps[i].xid.type) {
+		case ID_TYPE_UID:
+			fprintf(dump, "UID %lu %s\n",
+				(unsigned long)maps[i].xid.id,
+				sid_string_static(maps[i].sid));
+			break;
+		case ID_TYPE_GID:
+			fprintf(dump, "GID %lu %s\n",
+				(unsigned long)maps[i].xid.id,
+				sid_string_static(maps[i].sid));
+			break;
+		case ID_TYPE_NOT_SPECIFIED:
+			break;
+		}
+	}
+
+	fflush(dump);
+	fclose(dump);
+}
+
+char *idmap_fetch_secret(const char *backend, bool alloc,
+			       const char *domain, const char *identity)
+{
+	char *tmp, *ret;
+	int r;
+
+	if (alloc) {
+		r = asprintf(&tmp, "IDMAP_ALLOC_%s", backend);
+	} else {
+		r = asprintf(&tmp, "IDMAP_%s_%s", backend, domain);
+	}
+
+	if (r < 0)
+		return NULL;
+
+	strupper_m(tmp); /* make sure the key is case insensitive */
+	ret = secrets_fetch_generic(tmp, identity);
+
+	SAFE_FREE(tmp);
+
+	return ret;
+}
+

Copied: branches/samba/upstream/source/nsswitch/idmap_ad.c (from rev 1928, branches/samba/upstream/source/nsswitch/idmap_ad.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/idmap_ad.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/idmap_ad.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,835 @@
+/*
+ *  idmap_ad: map between Active Directory and RFC 2307 or "Services for Unix" (SFU) Accounts
+ *
+ * Unix SMB/CIFS implementation.
+ *
+ * Winbind ADS backend functions
+ *
+ * Copyright (C) Andrew Tridgell 2001
+ * Copyright (C) Andrew Bartlett <abartlet at samba.org> 2003
+ * Copyright (C) Gerald (Jerry) Carter 2004-2007
+ * Copyright (C) Luke Howard 2001-2004
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_IDMAP
+
+#define WINBIND_CCACHE_NAME "MEMORY:winbind_ccache"
+
+#define IDMAP_AD_MAX_IDS 30
+#define CHECK_ALLOC_DONE(mem) do { \
+     if (!mem) { \
+           DEBUG(0, ("Out of memory!\n")); \
+           ret = NT_STATUS_NO_MEMORY; \
+           goto done; \
+      } \
+} while (0)
+
+struct idmap_ad_context {
+	uint32_t filter_low_id;
+	uint32_t filter_high_id;
+};
+
+NTSTATUS init_module(void);
+
+static ADS_STRUCT *ad_idmap_ads = NULL;
+static struct posix_schema *ad_schema = NULL;
+static enum wb_posix_mapping ad_map_type = WB_POSIX_MAP_UNKNOWN;
+
+/************************************************************************
+ ***********************************************************************/
+
+static ADS_STRUCT *ad_idmap_cached_connection_internal(void)
+{
+	ADS_STRUCT *ads;
+	ADS_STATUS status;
+	BOOL local = False;
+	fstring dc_name;
+	struct in_addr dc_ip;	
+
+	if (ad_idmap_ads != NULL) {
+
+		time_t expire;
+		time_t now = time(NULL);
+
+		ads = ad_idmap_ads;
+
+		expire = MIN(ads->auth.tgt_expire, ads->auth.tgs_expire);
+
+		/* check for a valid structure */
+		DEBUG(7, ("Current tickets expire in %d seconds (at %d, time is now %d)\n",
+			  (uint32)expire-(uint32)now, (uint32) expire, (uint32) now));
+
+		if ( ads->config.realm && (expire > time(NULL))) {
+			return ads;
+		} else {
+			/* we own this ADS_STRUCT so make sure it goes away */
+			DEBUG(7,("Deleting expired krb5 credential cache\n"));
+			ads->is_mine = True;
+			ads_destroy( &ads );
+			ads_kdestroy(WINBIND_CCACHE_NAME);
+			ad_idmap_ads = NULL;
+			TALLOC_FREE( ad_schema );			
+		}
+	}
+
+	if (!local) {
+		/* we don't want this to affect the users ccache */
+		setenv("KRB5CCNAME", WINBIND_CCACHE_NAME, 1);
+	}
+
+	if ( (ads = ads_init(lp_realm(), lp_workgroup(), NULL)) == NULL ) {
+		DEBUG(1,("ads_init failed\n"));
+		return NULL;
+	}
+
+	/* the machine acct password might have change - fetch it every time */
+	SAFE_FREE(ads->auth.password);
+	ads->auth.password = secrets_fetch_machine_password(lp_workgroup(), NULL, NULL);
+
+	SAFE_FREE(ads->auth.realm);
+	ads->auth.realm = SMB_STRDUP(lp_realm());
+
+	/* setup server affinity */
+
+	get_dc_name( NULL, ads->auth.realm, dc_name, &dc_ip );
+	
+	status = ads_connect(ads);
+	if (!ADS_ERR_OK(status)) {
+		DEBUG(1, ("ad_idmap_init: failed to connect to AD\n"));
+		ads_destroy(&ads);
+		return NULL;
+	}
+
+	ads->is_mine = False;
+
+	ad_idmap_ads = ads;
+
+	return ads;
+}
+
+/************************************************************************
+ ***********************************************************************/
+
+static ADS_STRUCT *ad_idmap_cached_connection(void)
+{
+	ADS_STRUCT *ads = ad_idmap_cached_connection_internal();
+	
+	if ( !ads )
+		return NULL;
+
+	/* if we have a valid ADS_STRUCT and the schema model is
+	   defined, then we can return here. */
+
+	if ( ad_schema )
+		return ads;
+
+	/* Otherwise, set the schema model */
+
+	if ( (ad_map_type ==  WB_POSIX_MAP_SFU) ||
+	     (ad_map_type ==  WB_POSIX_MAP_RFC2307) ) 
+	{
+		ADS_STATUS schema_status;
+		
+		schema_status = ads_check_posix_schema_mapping( NULL, ads, ad_map_type, &ad_schema);
+		if ( !ADS_ERR_OK(schema_status) ) {
+			DEBUG(2,("ad_idmap_cached_connection: Failed to obtain schema details!\n"));
+			return NULL;			
+		}
+	}
+	
+	return ads;
+}
+
+/************************************************************************
+ ***********************************************************************/
+
+static NTSTATUS idmap_ad_initialize(struct idmap_domain *dom)
+{
+	struct idmap_ad_context *ctx;
+	char *config_option;
+	const char *range = NULL;
+	const char *schema_mode = NULL;	
+
+	if ( (ctx = TALLOC_ZERO_P(dom, struct idmap_ad_context)) == NULL ) {
+		DEBUG(0, ("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	if ( (config_option = talloc_asprintf(ctx, "idmap config %s", dom->name)) == NULL ) {
+		DEBUG(0, ("Out of memory!\n"));
+		talloc_free(ctx);
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	/* load ranges */
+	range = lp_parm_const_string(-1, config_option, "range", NULL);
+	if (range && range[0]) {
+		if ((sscanf(range, "%u - %u", &ctx->filter_low_id, &ctx->filter_high_id) != 2) ||
+		    (ctx->filter_low_id > ctx->filter_high_id)) {
+			DEBUG(1, ("ERROR: invalid filter range [%s]", range));
+			ctx->filter_low_id = 0;
+			ctx->filter_high_id = 0;
+		}
+	}
+
+	/* schema mode */
+	if ( ad_map_type == WB_POSIX_MAP_UNKNOWN )
+		ad_map_type = WB_POSIX_MAP_RFC2307;
+	schema_mode = lp_parm_const_string(-1, config_option, "schema_mode", NULL);
+	if ( schema_mode && schema_mode[0] ) {
+		if ( strequal(schema_mode, "sfu") )
+			ad_map_type = WB_POSIX_MAP_SFU;
+		else if ( strequal(schema_mode, "rfc2307" ) )
+			ad_map_type = WB_POSIX_MAP_RFC2307;
+		else
+			DEBUG(0,("idmap_ad_initialize: Unknown schema_mode (%s)\n",
+				 schema_mode));
+	}
+
+	dom->private_data = ctx;
+	dom->initialized = True;
+
+	talloc_free(config_option);
+
+	return NT_STATUS_OK;
+}
+
+/************************************************************************
+ Search up to IDMAP_AD_MAX_IDS entries in maps for a match.
+ ***********************************************************************/
+
+static struct id_map *find_map_by_id(struct id_map **maps, enum id_type type, uint32_t id)
+{
+	int i;
+
+	for (i = 0; maps[i] && i<IDMAP_AD_MAX_IDS; i++) {
+		if ((maps[i]->xid.type == type) && (maps[i]->xid.id == id)) {
+			return maps[i];
+		}
+	}
+
+	return NULL;	
+}
+
+/************************************************************************
+ Search up to IDMAP_AD_MAX_IDS entries in maps for a match
+ ***********************************************************************/
+
+static struct id_map *find_map_by_sid(struct id_map **maps, DOM_SID *sid)
+{
+	int i;
+
+	for (i = 0; maps[i] && i<IDMAP_AD_MAX_IDS; i++) {
+		if (sid_equal(maps[i]->sid, sid)) {
+			return maps[i];
+		}
+	}
+
+	return NULL;	
+}
+
+/************************************************************************
+ ***********************************************************************/
+
+static NTSTATUS idmap_ad_unixids_to_sids(struct idmap_domain *dom, struct id_map **ids)
+{
+	NTSTATUS ret;
+	TALLOC_CTX *memctx;
+	struct idmap_ad_context *ctx;
+	ADS_STATUS rc;
+	ADS_STRUCT *ads;
+	const char *attrs[] = { "sAMAccountType", 
+				"objectSid",
+				NULL, /* uidnumber */
+				NULL, /* gidnumber */
+				NULL };
+	LDAPMessage *res = NULL;
+	LDAPMessage *entry = NULL;
+	char *filter = NULL;
+	int idx = 0;
+	int bidx = 0;
+	int count;
+	int i;
+	char *u_filter = NULL;
+	char *g_filter = NULL;
+
+	/* Only do query if we are online */
+	if (idmap_is_offline())	{
+		return NT_STATUS_FILE_IS_OFFLINE;
+	}
+
+	/* Initilization my have been deferred because we were offline */
+	if ( ! dom->initialized) {
+		ret = idmap_ad_initialize(dom);
+		if ( ! NT_STATUS_IS_OK(ret)) {
+			return ret;
+		}
+	}
+
+	ctx = talloc_get_type(dom->private_data, struct idmap_ad_context);
+
+	if ( (memctx = talloc_new(ctx)) == NULL ) {
+		DEBUG(0, ("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	if ( (ads = ad_idmap_cached_connection()) == NULL ) {
+		DEBUG(1, ("ADS uninitialized\n"));
+		ret = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+	attrs[2] = ad_schema->posix_uidnumber_attr;
+	attrs[3] = ad_schema->posix_gidnumber_attr;
+
+again:
+	bidx = idx;
+	for (i = 0; (i < IDMAP_AD_MAX_IDS) && ids[idx]; i++, idx++) {
+		switch (ids[idx]->xid.type) {
+		case ID_TYPE_UID:     
+			if ( ! u_filter) {
+				u_filter = talloc_asprintf(memctx, "(&(|"
+							   "(sAMAccountType=%d)"
+							   "(sAMAccountType=%d)"
+							   "(sAMAccountType=%d))(|",
+							   ATYPE_NORMAL_ACCOUNT,
+							   ATYPE_WORKSTATION_TRUST,
+							   ATYPE_INTERDOMAIN_TRUST);
+			}
+			u_filter = talloc_asprintf_append(u_filter, "(%s=%lu)",
+							  ad_schema->posix_uidnumber_attr,
+							  (unsigned long)ids[idx]->xid.id);
+			CHECK_ALLOC_DONE(u_filter);
+			break;
+				
+		case ID_TYPE_GID:
+			if ( ! g_filter) {
+				g_filter = talloc_asprintf(memctx, "(&(|"
+							   "(sAMAccountType=%d)"
+							   "(sAMAccountType=%d))(|",
+							   ATYPE_SECURITY_GLOBAL_GROUP,
+							   ATYPE_SECURITY_LOCAL_GROUP);
+			}
+			g_filter = talloc_asprintf_append(g_filter, "(%s=%lu)",
+							  ad_schema->posix_gidnumber_attr,
+							  (unsigned long)ids[idx]->xid.id);
+			CHECK_ALLOC_DONE(g_filter);
+			break;
+
+		default:
+			DEBUG(3, ("Error: mapping requested but Unknown ID type\n"));
+			ids[idx]->status = ID_UNKNOWN;
+			continue;
+		}
+	}
+	filter = talloc_asprintf(memctx, "(|");
+	CHECK_ALLOC_DONE(filter);
+	if ( u_filter) {
+		filter = talloc_asprintf_append(filter, "%s))", u_filter);
+		CHECK_ALLOC_DONE(filter);
+			TALLOC_FREE(u_filter);
+	}
+	if ( g_filter) {
+		filter = talloc_asprintf_append(filter, "%s))", g_filter);
+		CHECK_ALLOC_DONE(filter);
+		TALLOC_FREE(g_filter);
+	}
+	filter = talloc_asprintf_append(filter, ")");
+	CHECK_ALLOC_DONE(filter);
+
+	rc = ads_search_retry(ads, &res, filter, attrs);
+	if (!ADS_ERR_OK(rc)) {
+		DEBUG(1, ("ERROR: ads search returned: %s\n", ads_errstr(rc)));
+		ret = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+	if ( (count = ads_count_replies(ads, res)) == 0 ) {
+		DEBUG(10, ("No IDs found\n"));
+	}
+
+	entry = res;
+	for (i = 0; (i < count) && entry; i++) {
+		DOM_SID sid;
+		enum id_type type;
+		struct id_map *map;
+		uint32_t id;
+		uint32_t atype;
+
+		if (i == 0) { /* first entry */
+			entry = ads_first_entry(ads, entry);
+		} else { /* following ones */
+			entry = ads_next_entry(ads, entry);
+		}
+
+		if ( !entry ) {
+			DEBUG(2, ("ERROR: Unable to fetch ldap entries from results\n"));
+			break;
+		}
+
+		/* first check if the SID is present */
+		if (!ads_pull_sid(ads, entry, "objectSid", &sid)) {
+			DEBUG(2, ("Could not retrieve SID from entry\n"));
+			continue;
+		}
+
+		/* get type */
+		if (!ads_pull_uint32(ads, entry, "sAMAccountType", &atype)) {
+			DEBUG(1, ("could not get SAM account type\n"));
+			continue;
+		}
+
+		switch (atype & 0xF0000000) {
+		case ATYPE_SECURITY_GLOBAL_GROUP:
+		case ATYPE_SECURITY_LOCAL_GROUP:
+			type = ID_TYPE_GID;
+			break;
+		case ATYPE_NORMAL_ACCOUNT:
+		case ATYPE_WORKSTATION_TRUST:
+		case ATYPE_INTERDOMAIN_TRUST:
+			type = ID_TYPE_UID;
+			break;
+		default:
+			DEBUG(1, ("unrecognized SAM account type %08x\n", atype));
+			continue;
+		}
+
+		if (!ads_pull_uint32(ads, entry, (type==ID_TYPE_UID) ? 
+				                 ad_schema->posix_uidnumber_attr : 
+				                 ad_schema->posix_gidnumber_attr, 
+				     &id)) 
+		{
+			DEBUG(1, ("Could not get unix ID\n"));
+			continue;
+		}
+
+		if ((id == 0) ||
+		    (ctx->filter_low_id && (id < ctx->filter_low_id)) ||
+		    (ctx->filter_high_id && (id > ctx->filter_high_id))) {
+			DEBUG(5, ("Requested id (%u) out of range (%u - %u). Filtered!\n",
+				id, ctx->filter_low_id, ctx->filter_high_id));
+			continue;
+		}
+
+		map = find_map_by_id(&ids[bidx], type, id);
+		if (!map) {
+			DEBUG(2, ("WARNING: couldn't match result with requested ID\n"));
+			continue;
+		}
+
+		sid_copy(map->sid, &sid);
+
+		/* mapped */
+		map->status = ID_MAPPED;
+
+		DEBUG(10, ("Mapped %s -> %lu (%d)\n",
+			   sid_string_static(map->sid),
+			   (unsigned long)map->xid.id,
+			   map->xid.type));
+	}
+
+	if (res) {
+		ads_msgfree(ads, res);
+	}
+
+	if (ids[idx]) { /* still some values to map */
+		goto again;
+	}
+
+	ret = NT_STATUS_OK;
+
+	/* mark all unknown/expired ones as unmapped */
+	for (i = 0; ids[i]; i++) {
+		if (ids[i]->status != ID_MAPPED) 
+			ids[i]->status = ID_UNMAPPED;
+	}
+
+done:
+	talloc_free(memctx);
+	return ret;
+}
+
+/************************************************************************
+ ***********************************************************************/
+
+static NTSTATUS idmap_ad_sids_to_unixids(struct idmap_domain *dom, struct id_map **ids)
+{
+	NTSTATUS ret;
+	TALLOC_CTX *memctx;
+	struct idmap_ad_context *ctx;
+	ADS_STATUS rc;
+	ADS_STRUCT *ads;
+	const char *attrs[] = { "sAMAccountType", 
+				"objectSid",
+				NULL, /* attr_uidnumber */
+				NULL, /* attr_gidnumber */
+				NULL };
+	LDAPMessage *res = NULL;
+	LDAPMessage *entry = NULL;
+	char *filter = NULL;
+	int idx = 0;
+	int bidx = 0;
+	int count;
+	int i;
+	char *sidstr;
+
+	/* Only do query if we are online */
+	if (idmap_is_offline())	{
+		return NT_STATUS_FILE_IS_OFFLINE;
+	}
+
+	/* Initilization my have been deferred because we were offline */
+	if ( ! dom->initialized) {
+		ret = idmap_ad_initialize(dom);
+		if ( ! NT_STATUS_IS_OK(ret)) {
+			return ret;
+		}
+	}
+
+	ctx = talloc_get_type(dom->private_data, struct idmap_ad_context);	
+
+	if ( (memctx = talloc_new(ctx)) == NULL ) {		
+		DEBUG(0, ("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	if ( (ads = ad_idmap_cached_connection()) == NULL ) {
+		DEBUG(1, ("ADS uninitialized\n"));
+		ret = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+	attrs[2] = ad_schema->posix_uidnumber_attr;
+	attrs[3] = ad_schema->posix_gidnumber_attr;
+
+again:
+	filter = talloc_asprintf(memctx, "(&(|"
+				 "(sAMAccountType=%d)(sAMAccountType=%d)(sAMAccountType=%d)" /* user account types */
+				 "(sAMAccountType=%d)(sAMAccountType=%d)" /* group account types */
+				 ")(|",
+				 ATYPE_NORMAL_ACCOUNT, ATYPE_WORKSTATION_TRUST, ATYPE_INTERDOMAIN_TRUST,
+				 ATYPE_SECURITY_GLOBAL_GROUP, ATYPE_SECURITY_LOCAL_GROUP);
+		
+	CHECK_ALLOC_DONE(filter);
+
+	bidx = idx;
+	for (i = 0; (i < IDMAP_AD_MAX_IDS) && ids[idx]; i++, idx++) {
+
+		sidstr = sid_binstring(ids[idx]->sid);
+		filter = talloc_asprintf_append(filter, "(objectSid=%s)", sidstr);
+			
+		free(sidstr);
+		CHECK_ALLOC_DONE(filter);
+	}
+	filter = talloc_asprintf_append(filter, "))");
+	CHECK_ALLOC_DONE(filter);
+	DEBUG(10, ("Filter: [%s]\n", filter));
+
+	rc = ads_search_retry(ads, &res, filter, attrs);
+	if (!ADS_ERR_OK(rc)) {
+		DEBUG(1, ("ERROR: ads search returned: %s\n", ads_errstr(rc)));
+		ret = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+	if ( (count = ads_count_replies(ads, res)) == 0 ) {
+		DEBUG(10, ("No IDs found\n"));
+	}
+
+	entry = res;	
+	for (i = 0; (i < count) && entry; i++) {
+		DOM_SID sid;
+		enum id_type type;
+		struct id_map *map;
+		uint32_t id;
+		uint32_t atype;
+
+		if (i == 0) { /* first entry */
+			entry = ads_first_entry(ads, entry);
+		} else { /* following ones */
+			entry = ads_next_entry(ads, entry);
+		}
+
+		if ( !entry ) {
+			DEBUG(2, ("ERROR: Unable to fetch ldap entries from results\n"));
+			break;
+		}
+
+		/* first check if the SID is present */
+		if (!ads_pull_sid(ads, entry, "objectSid", &sid)) {
+			DEBUG(2, ("Could not retrieve SID from entry\n"));
+			continue;
+		}
+
+		map = find_map_by_sid(&ids[bidx], &sid);
+		if (!map) {
+			DEBUG(2, ("WARNING: couldn't match result with requested SID\n"));
+			continue;
+		}
+
+		/* get type */
+		if (!ads_pull_uint32(ads, entry, "sAMAccountType", &atype)) {
+			DEBUG(1, ("could not get SAM account type\n"));
+			continue;
+		}
+
+		switch (atype & 0xF0000000) {
+		case ATYPE_SECURITY_GLOBAL_GROUP:
+		case ATYPE_SECURITY_LOCAL_GROUP:
+			type = ID_TYPE_GID;
+			break;
+		case ATYPE_NORMAL_ACCOUNT:
+		case ATYPE_WORKSTATION_TRUST:
+		case ATYPE_INTERDOMAIN_TRUST:
+			type = ID_TYPE_UID;
+			break;
+		default:
+			DEBUG(1, ("unrecognized SAM account type %08x\n", atype));
+			continue;
+		}
+
+		if (!ads_pull_uint32(ads, entry, (type==ID_TYPE_UID) ? 
+				                 ad_schema->posix_uidnumber_attr : 
+				                 ad_schema->posix_gidnumber_attr, 
+				     &id)) 
+		{
+			DEBUG(1, ("Could not get unix ID\n"));
+			continue;
+		}
+		if ((id == 0) ||
+		    (ctx->filter_low_id && (id < ctx->filter_low_id)) ||
+		    (ctx->filter_high_id && (id > ctx->filter_high_id))) {
+			DEBUG(5, ("Requested id (%u) out of range (%u - %u). Filtered!\n",
+				id, ctx->filter_low_id, ctx->filter_high_id));
+			continue;
+		}
+
+		/* mapped */
+		map->xid.type = type;
+		map->xid.id = id;
+		map->status = ID_MAPPED;
+
+		DEBUG(10, ("Mapped %s -> %lu (%d)\n",
+			   sid_string_static(map->sid),
+			   (unsigned long)map->xid.id,
+			   map->xid.type));
+	}
+
+	if (res) {
+		ads_msgfree(ads, res);
+	}
+
+	if (ids[idx]) { /* still some values to map */
+		goto again;
+	}
+
+	ret = NT_STATUS_OK;
+
+	/* mark all unknwoni/expired ones as unmapped */
+	for (i = 0; ids[i]; i++) {
+		if (ids[i]->status != ID_MAPPED) 
+			ids[i]->status = ID_UNMAPPED;
+	}
+
+done:
+	talloc_free(memctx);
+	return ret;
+}
+
+/************************************************************************
+ ***********************************************************************/
+
+static NTSTATUS idmap_ad_close(struct idmap_domain *dom)
+{
+	ADS_STRUCT *ads = ad_idmap_ads;
+
+	if (ads != NULL) {
+		/* we own this ADS_STRUCT so make sure it goes away */
+		ads->is_mine = True;
+		ads_destroy( &ads );
+		ad_idmap_ads = NULL;
+	}
+
+	TALLOC_FREE( ad_schema );
+	
+	return NT_STATUS_OK;
+}
+
+/*
+ * nss_info_{sfu,rfc2307}
+ */
+
+/************************************************************************
+ Initialize the {sfu,rfc2307} state
+ ***********************************************************************/
+
+static NTSTATUS nss_sfu_init( struct nss_domain_entry *e )
+{
+	/* Sanity check if we have previously been called with a
+	   different schema model */
+
+	if ( (ad_map_type != WB_POSIX_MAP_UNKNOWN) &&
+	     (ad_map_type != WB_POSIX_MAP_SFU) ) 
+	{
+		DEBUG(0,("nss_sfu_init: Posix Map type has already been set.  "
+			 "Mixed schema models not supported!\n"));
+		return NT_STATUS_NOT_SUPPORTED;
+	}
+	
+	ad_map_type =  WB_POSIX_MAP_SFU;	
+
+	return NT_STATUS_OK;
+}
+
+static NTSTATUS nss_rfc2307_init( struct nss_domain_entry *e )
+{
+	/* Sanity check if we have previously been called with a
+	   different schema model */
+	 
+	if ( (ad_map_type != WB_POSIX_MAP_UNKNOWN) &&
+	     (ad_map_type != WB_POSIX_MAP_RFC2307) ) 
+	{
+		DEBUG(0,("nss_rfc2307_init: Posix Map type has already been set.  "
+			 "Mixed schema models not supported!\n"));
+		return NT_STATUS_NOT_SUPPORTED;
+	}
+	
+	ad_map_type =  WB_POSIX_MAP_RFC2307;
+
+	return NT_STATUS_OK;
+}
+
+
+/************************************************************************
+ ***********************************************************************/
+static NTSTATUS nss_ad_get_info( struct nss_domain_entry *e, 
+				  const DOM_SID *sid, 
+				  TALLOC_CTX *ctx,
+				  ADS_STRUCT *ads, 
+				  LDAPMessage *msg,
+				  char **homedir,
+				  char **shell, 
+				  char **gecos,
+				  uint32 *gid )
+{
+	ADS_STRUCT *ads_internal = NULL;
+
+	/* Only do query if we are online */
+	if (idmap_is_offline())	{
+		return NT_STATUS_FILE_IS_OFFLINE;
+	}
+
+	/* We are assuming that the internal ADS_STRUCT is for the 
+	   same forest as the incoming *ads pointer */
+
+	ads_internal = ad_idmap_cached_connection();
+
+	if ( !ads_internal || !ad_schema )
+		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
+	
+	if ( !homedir || !shell || !gecos )
+		return NT_STATUS_INVALID_PARAMETER;
+
+	*homedir = ads_pull_string( ads, ctx, msg, ad_schema->posix_homedir_attr );
+	*shell   = ads_pull_string( ads, ctx, msg, ad_schema->posix_shell_attr );
+	*gecos   = ads_pull_string( ads, ctx, msg, ad_schema->posix_gecos_attr );
+       
+	if ( gid ) {		
+		if ( !ads_pull_uint32(ads, msg, ad_schema->posix_gidnumber_attr, gid ) )
+			*gid = (uint32)-1;
+	}
+		
+	return NT_STATUS_OK;
+}
+
+/************************************************************************
+ ***********************************************************************/
+
+static NTSTATUS nss_ad_close( void )
+{
+	/* nothing to do.  All memory is free()'d by the idmap close_fn() */
+
+	return NT_STATUS_OK;
+}
+
+/************************************************************************
+ Function dispatch tables for the idmap and nss plugins
+ ***********************************************************************/
+
+static struct idmap_methods ad_methods = {
+	.init            = idmap_ad_initialize,
+	.unixids_to_sids = idmap_ad_unixids_to_sids,
+	.sids_to_unixids = idmap_ad_sids_to_unixids,
+	.close_fn        = idmap_ad_close
+};
+
+/* The SFU and RFC2307 NSS plugins share everything but the init
+   function which sets the intended schema model to use */
+  
+static struct nss_info_methods nss_rfc2307_methods = {
+	.init         = nss_rfc2307_init,
+	.get_nss_info =	nss_ad_get_info,
+	.close_fn     = nss_ad_close
+};
+
+static struct nss_info_methods nss_sfu_methods = {
+	.init         = nss_sfu_init,
+	.get_nss_info =	nss_ad_get_info,
+	.close_fn     = nss_ad_close
+};
+
+
+/************************************************************************
+ Initialize the plugins
+ ***********************************************************************/
+
+NTSTATUS idmap_ad_init(void)
+{
+	static NTSTATUS status_idmap_ad = NT_STATUS_UNSUCCESSFUL;
+	static NTSTATUS status_nss_rfc2307 = NT_STATUS_UNSUCCESSFUL;
+	static NTSTATUS status_nss_sfu = NT_STATUS_UNSUCCESSFUL;
+
+	/* Always register the AD method first in order to get the
+	   idmap_domain interface called */
+
+	if ( !NT_STATUS_IS_OK(status_idmap_ad) ) {
+		status_idmap_ad = smb_register_idmap(SMB_IDMAP_INTERFACE_VERSION, 
+						     "ad", &ad_methods);
+		if ( !NT_STATUS_IS_OK(status_idmap_ad) )
+			return status_idmap_ad;		
+	}
+	
+	if ( !NT_STATUS_IS_OK( status_nss_rfc2307 ) ) {
+		status_nss_rfc2307 = smb_register_idmap_nss(SMB_NSS_INFO_INTERFACE_VERSION,
+							    "rfc2307",  &nss_rfc2307_methods );		
+		if ( !NT_STATUS_IS_OK(status_nss_rfc2307) )
+			return status_nss_rfc2307;
+	}
+
+	if ( !NT_STATUS_IS_OK( status_nss_sfu ) ) {
+		status_nss_sfu = smb_register_idmap_nss(SMB_NSS_INFO_INTERFACE_VERSION,
+							"sfu",  &nss_sfu_methods );		
+		if ( !NT_STATUS_IS_OK(status_nss_sfu) )
+			return status_nss_sfu;		
+	}
+
+	return NT_STATUS_OK;	
+}
+

Copied: branches/samba/upstream/source/nsswitch/idmap_cache.c (from rev 1928, branches/samba/upstream/source/nsswitch/idmap_cache.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/idmap_cache.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/idmap_cache.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,560 @@
+/* 
+   Unix SMB/CIFS implementation.
+   ID Mapping Cache
+
+   based on gencache
+
+   Copyright (C) Simo Sorce		2006
+   Copyright (C) Rafal Szczesniak	2002
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.*/
+
+#include "includes.h"
+#include "winbindd.h"
+
+#define TIMEOUT_LEN 12
+#define IDMAP_CACHE_DATA_FMT	"%12u/%s"
+#define IDMAP_READ_CACHE_DATA_FMT_TEMPLATE "%%12u/%%%us"
+
+struct idmap_cache_ctx {
+	TDB_CONTEXT *tdb;
+};
+
+static int idmap_cache_destructor(struct idmap_cache_ctx *cache)
+{
+	int ret = 0;
+
+	if (cache && cache->tdb) {
+		ret = tdb_close(cache->tdb);
+		cache->tdb = NULL;
+	}
+
+	return ret;
+}
+
+struct idmap_cache_ctx *idmap_cache_init(TALLOC_CTX *memctx)
+{
+	struct idmap_cache_ctx *cache;
+	char* cache_fname = NULL;
+
+	cache = talloc(memctx, struct idmap_cache_ctx);
+	if ( ! cache) {
+		DEBUG(0, ("Out of memory!\n"));
+		return NULL;
+	}
+
+	cache_fname = lock_path("idmap_cache.tdb");
+
+	DEBUG(10, ("Opening cache file at %s\n", cache_fname));
+
+	cache->tdb = tdb_open_log(cache_fname, 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
+
+	if (!cache->tdb) {
+		DEBUG(5, ("Attempt to open %s has failed.\n", cache_fname));
+		return NULL;
+	}
+
+	talloc_set_destructor(cache, idmap_cache_destructor);
+
+	return cache;
+}
+
+void idmap_cache_shutdown(struct idmap_cache_ctx *cache)
+{
+	talloc_free(cache);
+}
+
+NTSTATUS idmap_cache_build_sidkey(TALLOC_CTX *ctx, char **sidkey, const struct id_map *id)
+{
+	*sidkey = talloc_asprintf(ctx, "IDMAP/SID/%s", sid_string_static(id->sid));
+	if ( ! *sidkey) {
+		DEBUG(1, ("failed to build sidkey, OOM?\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	return NT_STATUS_OK;
+}
+
+NTSTATUS idmap_cache_build_idkey(TALLOC_CTX *ctx, char **idkey, const struct id_map *id)
+{
+	*idkey = talloc_asprintf(ctx, "IDMAP/%s/%lu",
+				(id->xid.type==ID_TYPE_UID)?"UID":"GID",
+				(unsigned long)id->xid.id);
+	if ( ! *idkey) {
+		DEBUG(1, ("failed to build idkey, OOM?\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	return NT_STATUS_OK;
+}
+
+NTSTATUS idmap_cache_set(struct idmap_cache_ctx *cache, const struct id_map *id)
+{
+	NTSTATUS ret;
+	time_t timeout = time(NULL) + lp_idmap_cache_time();
+	TDB_DATA keybuf, databuf;
+	char *sidkey;
+	char *idkey;
+	char *valstr;
+
+	/* Don't cache lookups in the S-1-22-{1,2} domain */
+	if ( (id->xid.type == ID_TYPE_UID) && 
+	     sid_check_is_in_unix_users(id->sid) )
+	{
+		return NT_STATUS_OK;
+	}
+	if ( (id->xid.type == ID_TYPE_GID) && 
+	     sid_check_is_in_unix_groups(id->sid) )
+	{
+		return NT_STATUS_OK;
+	}
+	
+
+	ret = idmap_cache_build_sidkey(cache, &sidkey, id);
+	if (!NT_STATUS_IS_OK(ret)) return ret;
+
+	/* use sidkey as the local memory ctx */
+	ret = idmap_cache_build_idkey(sidkey, &idkey, id);
+	if (!NT_STATUS_IS_OK(ret)) {
+		goto done;
+	}
+
+	/* save SID -> ID */
+
+	/* use sidkey as the local memory ctx */
+	valstr = talloc_asprintf(sidkey, IDMAP_CACHE_DATA_FMT, (int)timeout, idkey);
+	if (!valstr) {
+		DEBUG(0, ("Out of memory!\n"));
+		ret = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	keybuf.dptr = sidkey;
+	keybuf.dsize = strlen(sidkey)+1;
+	databuf.dptr = valstr;
+	databuf.dsize = strlen(valstr)+1;
+	DEBUG(10, ("Adding cache entry with key = %s; value = %s and timeout ="
+	           " %s (%d seconds %s)\n", keybuf.dptr, valstr , ctime(&timeout),
+		   (int)(timeout - time(NULL)), 
+		   timeout > time(NULL) ? "ahead" : "in the past"));
+
+	if (tdb_store(cache->tdb, keybuf, databuf, TDB_REPLACE) != 0) {
+		DEBUG(3, ("Failed to store cache entry!\n"));
+		ret = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+	/* save ID -> SID */
+
+	/* use sidkey as the local memory ctx */
+	valstr = talloc_asprintf(sidkey, IDMAP_CACHE_DATA_FMT, (int)timeout, sidkey);
+	if (!valstr) {
+		DEBUG(0, ("Out of memory!\n"));
+		ret = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	keybuf.dptr = idkey;
+	keybuf.dsize = strlen(idkey)+1;
+	databuf.dptr = valstr;
+	databuf.dsize = strlen(valstr)+1;
+	DEBUG(10, ("Adding cache entry with key = %s; value = %s and timeout ="
+	           " %s (%d seconds %s)\n", keybuf.dptr, valstr, ctime(&timeout),
+		   (int)(timeout - time(NULL)), 
+		   timeout > time(NULL) ? "ahead" : "in the past"));
+
+	if (tdb_store(cache->tdb, keybuf, databuf, TDB_REPLACE) != 0) {
+		DEBUG(3, ("Failed to store cache entry!\n"));
+		ret = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+	ret = NT_STATUS_OK;
+
+done:
+	talloc_free(sidkey);
+	return ret;
+}
+
+NTSTATUS idmap_cache_del(struct idmap_cache_ctx *cache, const struct id_map *id)
+{
+	NTSTATUS ret;
+	TDB_DATA keybuf;
+	char *sidkey = NULL;
+	char *idkey = NULL;
+
+	ret = idmap_cache_build_sidkey(cache, &sidkey, id);
+	if (!NT_STATUS_IS_OK(ret)) return ret;
+
+	ret = idmap_cache_build_idkey(cache, &idkey, id);
+	if (!NT_STATUS_IS_OK(ret)) {
+		goto done;
+	}
+
+	/* delete SID */
+
+	keybuf.dptr = sidkey;
+	keybuf.dsize = strlen(sidkey)+1;
+	DEBUG(10, ("Deleting cache entry (key = %s)\n", keybuf.dptr));
+
+	if (tdb_delete(cache->tdb, keybuf) != 0) {
+		DEBUG(3, ("Failed to delete cache entry!\n"));
+	}
+
+	/* delete ID */
+
+	keybuf.dptr = idkey;
+	keybuf.dsize = strlen(idkey)+1;
+	DEBUG(10, ("Deleting cache entry (key = %s)\n", keybuf.dptr));
+
+	if (tdb_delete(cache->tdb, keybuf) != 0) {
+		DEBUG(3, ("Failed to delete cache entry!\n"));
+	}
+
+done:
+	talloc_free(sidkey);
+	talloc_free(idkey);
+	return ret;
+}
+
+NTSTATUS idmap_cache_set_negative_sid(struct idmap_cache_ctx *cache, const struct id_map *id)
+{
+	NTSTATUS ret;
+	time_t timeout = time(NULL) + lp_idmap_negative_cache_time();
+	TDB_DATA keybuf, databuf;
+	char *sidkey;
+	char *valstr;
+
+	ret = idmap_cache_build_sidkey(cache, &sidkey, id);
+	if (!NT_STATUS_IS_OK(ret)) return ret;
+
+	/* use sidkey as the local memory ctx */
+	valstr = talloc_asprintf(sidkey, IDMAP_CACHE_DATA_FMT, (int)timeout, "IDMAP/NEGATIVE");
+	if (!valstr) {
+		DEBUG(0, ("Out of memory!\n"));
+		ret = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	keybuf.dptr = sidkey;
+	keybuf.dsize = strlen(sidkey)+1;
+	databuf.dptr = valstr;
+	databuf.dsize = strlen(valstr)+1;
+	DEBUG(10, ("Adding cache entry with key = %s; value = %s and timeout ="
+	           " %s (%d seconds %s)\n", keybuf.dptr, valstr, ctime(&timeout),
+		   (int)(timeout - time(NULL)), 
+		   timeout > time(NULL) ? "ahead" : "in the past"));
+
+	if (tdb_store(cache->tdb, keybuf, databuf, TDB_REPLACE) != 0) {
+		DEBUG(3, ("Failed to store cache entry!\n"));
+		ret = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+done:
+	talloc_free(sidkey);
+	return ret;
+}
+
+NTSTATUS idmap_cache_set_negative_id(struct idmap_cache_ctx *cache, const struct id_map *id)
+{
+	NTSTATUS ret;
+	time_t timeout = time(NULL) + lp_idmap_negative_cache_time();
+	TDB_DATA keybuf, databuf;
+	char *idkey;
+	char *valstr;
+
+	ret = idmap_cache_build_idkey(cache, &idkey, id);
+	if (!NT_STATUS_IS_OK(ret)) return ret;
+
+	/* use idkey as the local memory ctx */
+	valstr = talloc_asprintf(idkey, IDMAP_CACHE_DATA_FMT, (int)timeout, "IDMAP/NEGATIVE");
+	if (!valstr) {
+		DEBUG(0, ("Out of memory!\n"));
+		ret = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	keybuf.dptr = idkey;
+	keybuf.dsize = strlen(idkey)+1;
+	databuf.dptr = valstr;
+	databuf.dsize = strlen(valstr)+1;
+	DEBUG(10, ("Adding cache entry with key = %s; value = %s and timeout ="
+	           " %s (%d seconds %s)\n", keybuf.dptr, valstr, ctime(&timeout),
+		   (int)(timeout - time(NULL)), 
+		   timeout > time(NULL) ? "ahead" : "in the past"));
+
+	if (tdb_store(cache->tdb, keybuf, databuf, TDB_REPLACE) != 0) {
+		DEBUG(3, ("Failed to store cache entry!\n"));
+		ret = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+done:
+	talloc_free(idkey);
+	return ret;
+}
+
+NTSTATUS idmap_cache_fill_map(struct id_map *id, const char *value)
+{
+	char *rem;
+
+	/* see if it is a sid */
+	if ( ! strncmp("IDMAP/SID/", value, 10)) {
+		
+		if ( ! string_to_sid(id->sid, &value[10])) {
+			goto failed;
+		}
+		
+		id->status = ID_MAPPED;
+
+		return NT_STATUS_OK;
+	}
+
+	/* not a SID see if it is an UID or a GID */
+	if ( ! strncmp("IDMAP/UID/", value, 10)) {
+		
+		/* a uid */
+		id->xid.type = ID_TYPE_UID;
+		
+	} else if ( ! strncmp("IDMAP/GID/", value, 10)) {
+		
+		/* a gid */
+		id->xid.type = ID_TYPE_GID;
+		
+	} else {
+		
+		/* a completely bogus value bail out */
+		goto failed;
+	}
+	
+	id->xid.id = strtol(&value[10], &rem, 0);
+	if (*rem != '\0') {
+		goto failed;
+	}
+
+	id->status = ID_MAPPED;
+
+	return NT_STATUS_OK;
+
+failed:
+	DEBUG(1, ("invalid value: %s\n", value));
+	id->status = ID_UNKNOWN;
+	return NT_STATUS_INTERNAL_DB_CORRUPTION;
+}
+
+BOOL idmap_cache_is_negative(const char *val)
+{
+	if ( ! strcmp("IDMAP/NEGATIVE", val)) {
+		return True;
+	}
+	return False;
+}
+
+/* search the cahce for the SID an return a mapping if found *
+ *
+ * 4 cases are possible
+ *
+ * 1 map found
+ * 	in this case id->status = ID_MAPPED and NT_STATUS_OK is returned
+ * 2 map not found
+ * 	in this case id->status = ID_UNKNOWN and NT_STATUS_NONE_MAPPED is returned
+ * 3 negative cache found
+ * 	in this case id->status = ID_UNMAPPED and NT_STATUS_OK is returned
+ * 4 map found but timer expired
+ *      in this case id->status = ID_EXPIRED and NT_STATUS_SYNCHRONIZATION_REQUIRED
+ *      is returned. In this case revalidation of the cache is needed.
+ */
+
+NTSTATUS idmap_cache_map_sid(struct idmap_cache_ctx *cache, struct id_map *id)
+{
+	NTSTATUS ret;
+	TDB_DATA keybuf, databuf;
+	time_t t, now;
+	char *sidkey;
+	char *endptr;
+
+	/* make sure it is marked as unknown by default */
+	id->status = ID_UNKNOWN;
+	
+	ret = idmap_cache_build_sidkey(cache, &sidkey, id);
+	if (!NT_STATUS_IS_OK(ret)) return ret;
+
+	keybuf.dptr = sidkey;
+	keybuf.dsize = strlen(sidkey)+1;
+
+	databuf = tdb_fetch(cache->tdb, keybuf);
+
+	if (databuf.dptr == NULL) {
+		DEBUG(10, ("Cache entry with key = %s couldn't be found\n", sidkey));
+		ret = NT_STATUS_NONE_MAPPED;
+		goto done;
+	}
+
+	t = strtol(databuf.dptr, &endptr, 10);
+
+	if ((endptr == NULL) || (*endptr != '/')) {
+		DEBUG(2, ("Invalid gencache data format: %s\n", databuf.dptr));
+		/* remove the entry */
+		tdb_delete(cache->tdb, keybuf);
+		ret = NT_STATUS_NONE_MAPPED;
+		goto done;
+	}
+
+	now = time(NULL);
+
+	/* check it is not negative */
+	if (strcmp("IDMAP/NEGATIVE", endptr+1) != 0) {
+
+		DEBUG(10, ("Returning %s cache entry: key = %s, value = %s, "
+			   "timeout = %s", t > now ? "valid" :
+			   "expired", sidkey, endptr+1, ctime(&t)));
+
+		/* this call if successful will also mark the entry as mapped */
+		ret = idmap_cache_fill_map(id, endptr+1);
+		if ( ! NT_STATUS_IS_OK(ret)) {
+			/* if not valid form delete the entry */
+			tdb_delete(cache->tdb, keybuf);
+			ret = NT_STATUS_NONE_MAPPED;
+			goto done;
+		}
+
+		/* here ret == NT_STATUS_OK and id->status = ID_MAPPED */
+
+		if (t <= now) {
+	
+			/* we have it, but it is expired */
+			id->status = ID_EXPIRED;
+				
+			/* We're expired, set an error code
+			   for upper layer */
+			ret = NT_STATUS_SYNCHRONIZATION_REQUIRED;
+		}
+	} else {
+		if (t <= now) {
+			/* We're expired, delete the NEGATIVE entry and return
+			   not mapped */
+			tdb_delete(cache->tdb, keybuf);
+			ret = NT_STATUS_NONE_MAPPED;
+		} else {
+			/* this is not mapped as it was a negative cache hit */
+			id->status = ID_UNMAPPED;
+			ret = NT_STATUS_OK;
+		}
+	}
+	
+done:
+	SAFE_FREE(databuf.dptr);
+	talloc_free(sidkey);
+	return ret;
+}
+
+/* search the cahce for the ID an return a mapping if found *
+ *
+ * 3 cases are possible
+ *
+ * 1 map found
+ * 	in this case id->status = ID_MAPPED and NT_STATUS_OK is returned
+ * 2 map not found
+ * 	in this case id->status = ID_UNKNOWN and NT_STATUS_NONE_MAPPED is returned
+ * 3 negative cache found
+ * 	in this case id->status = ID_UNMAPPED and NT_STATUS_OK is returned
+ * 4 map found but timer expired
+ *      in this case id->status = ID_EXPIRED and NT_STATUS_SYNCHRONIZATION_REQUIRED
+ *      is returned. In this case revalidation of the cache is needed.
+ */
+
+NTSTATUS idmap_cache_map_id(struct idmap_cache_ctx *cache, struct id_map *id)
+{
+	NTSTATUS ret;
+	TDB_DATA keybuf, databuf;
+	time_t t, now;
+	char *idkey;
+	char *endptr;
+
+	/* make sure it is marked as unknown by default */
+	id->status = ID_UNKNOWN;
+	
+	ret = idmap_cache_build_idkey(cache, &idkey, id);
+	if (!NT_STATUS_IS_OK(ret)) return ret;
+
+	keybuf.dptr = idkey;
+	keybuf.dsize = strlen(idkey)+1;
+
+	databuf = tdb_fetch(cache->tdb, keybuf);
+
+	if (databuf.dptr == NULL) {
+		DEBUG(10, ("Cache entry with key = %s couldn't be found\n", idkey));
+		ret = NT_STATUS_NONE_MAPPED;
+		goto done;
+	}
+
+	t = strtol(databuf.dptr, &endptr, 10);
+
+	if ((endptr == NULL) || (*endptr != '/')) {
+		DEBUG(2, ("Invalid gencache data format: %s\n", databuf.dptr));
+		/* remove the entry */
+		tdb_delete(cache->tdb, keybuf);
+		ret = NT_STATUS_NONE_MAPPED;
+		goto done;
+	}
+
+	now = time(NULL);
+
+	/* check it is not negative */
+	if (strcmp("IDMAP/NEGATIVE", endptr+1) != 0) {
+		
+		DEBUG(10, ("Returning %s cache entry: key = %s, value = %s, "
+			   "timeout = %s", t > now ? "valid" :
+			   "expired", idkey, endptr+1, ctime(&t)));
+
+		/* this call if successful will also mark the entry as mapped */
+		ret = idmap_cache_fill_map(id, endptr+1);
+		if ( ! NT_STATUS_IS_OK(ret)) {
+			/* if not valid form delete the entry */
+			tdb_delete(cache->tdb, keybuf);
+			ret = NT_STATUS_NONE_MAPPED;
+			goto done;
+		}
+
+		/* here ret == NT_STATUS_OK and id->mapped = ID_MAPPED */
+
+		if (t <= now) {
+
+			/* we have it, but it is expired */
+			id->status = ID_EXPIRED;
+
+			/* We're expired, set an error code
+			   for upper layer */
+			ret = NT_STATUS_SYNCHRONIZATION_REQUIRED;
+		}
+	} else {
+		if (t <= now) {
+			/* We're expired, delete the NEGATIVE entry and return
+			   not mapped */
+			tdb_delete(cache->tdb, keybuf);
+			ret = NT_STATUS_NONE_MAPPED;
+		} else {
+			/* this is not mapped as it was a negative cache hit */
+			id->status = ID_UNMAPPED;
+			ret = NT_STATUS_OK;
+		}
+	}
+done:
+	SAFE_FREE(databuf.dptr);
+	talloc_free(idkey);
+	return ret;
+}
+

Copied: branches/samba/upstream/source/nsswitch/idmap_ldap.c (from rev 1928, branches/samba/upstream/source/nsswitch/idmap_ldap.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/idmap_ldap.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/idmap_ldap.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,1503 @@
+/*
+   Unix SMB/CIFS implementation.
+
+   idmap LDAP backend
+
+   Copyright (C) Tim Potter 		2000
+   Copyright (C) Jim McDonough <jmcd at us.ibm.com>	2003
+   Copyright (C) Gerald Carter 		2003
+   Copyright (C) Simo Sorce 		2003-2007
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_IDMAP
+
+#include <lber.h>
+#include <ldap.h>
+
+#include "smbldap.h"
+
+struct idmap_ldap_context {
+	struct smbldap_state *smbldap_state;
+	char *url;
+	char *suffix;
+	char *user_dn;
+	uint32_t filter_low_id, filter_high_id;		/* Filter range */
+	BOOL anon;
+};
+
+struct idmap_ldap_alloc_context {
+	struct smbldap_state *smbldap_state;
+	char *url;
+	char *suffix;
+	char *user_dn;
+	uid_t low_uid, high_uid;      /* Range of uids */
+	gid_t low_gid, high_gid;      /* Range of gids */
+
+};
+
+#define CHECK_ALLOC_DONE(mem) do { \
+	if (!mem) { \
+		DEBUG(0, ("Out of memory!\n")); \
+		ret = NT_STATUS_NO_MEMORY; \
+		goto done; \
+	} } while (0)
+
+/**********************************************************************
+ IDMAP ALLOC TDB BACKEND
+**********************************************************************/
+
+static struct idmap_ldap_alloc_context *idmap_alloc_ldap;
+
+/*********************************************************************
+ ********************************************************************/
+
+static NTSTATUS get_credentials( TALLOC_CTX *mem_ctx,
+				 struct smbldap_state *ldap_state,
+				 const char *config_option,
+				 struct idmap_domain *dom,
+				 char **dn )
+{
+	NTSTATUS ret = NT_STATUS_UNSUCCESSFUL;
+	char *secret = NULL;
+	const char *tmp = NULL;
+	char *user_dn = NULL;
+	BOOL anon = False;
+
+	/* assume anonymous if we don't have a specified user */
+
+	tmp = lp_parm_const_string(-1, config_option, "ldap_user_dn", NULL);
+
+	if ( tmp ) {
+		if (!dom) {
+			/* only the alloc backend can pass in a NULL dom */
+			secret = idmap_fetch_secret("ldap", True,
+						    NULL, tmp);
+		} else {
+			secret = idmap_fetch_secret("ldap", False,
+						    dom->name, tmp);
+		}
+
+		if (!secret) {
+			DEBUG(0, ("get_credentials: Unable to fetch "
+				  "auth credentials for %s in %s\n",
+				  tmp, (dom==NULL)?"ALLOC":dom->name));
+			ret = NT_STATUS_ACCESS_DENIED;
+			goto done;
+		}
+		*dn = talloc_strdup(mem_ctx, tmp);
+		CHECK_ALLOC_DONE(*dn);
+	} else {
+		if (!fetch_ldap_pw(&user_dn, &secret)) {
+			DEBUG(2, ("get_credentials: Failed to lookup ldap "
+				  "bind creds. Using anonymous connection.\n"));
+			anon = True;
+		} else {
+			*dn = talloc_strdup(mem_ctx, user_dn);
+			SAFE_FREE( user_dn );
+			CHECK_ALLOC_DONE(*dn);
+		}
+	}
+
+	smbldap_set_creds(ldap_state, anon, *dn, secret);
+	ret = NT_STATUS_OK;
+
+done:
+	SAFE_FREE(secret);
+
+	return ret;
+}
+
+
+/**********************************************************************
+ Verify the sambaUnixIdPool entry in the directory.
+**********************************************************************/
+
+static NTSTATUS verify_idpool(void)
+{
+	NTSTATUS ret;
+	TALLOC_CTX *ctx;
+	LDAPMessage *result = NULL;
+	LDAPMod **mods = NULL;
+	const char **attr_list;
+	char *filter;
+	int count;
+	int rc;
+
+	if ( ! idmap_alloc_ldap) {
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	ctx = talloc_new(idmap_alloc_ldap);
+	if ( ! ctx) {
+		DEBUG(0, ("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	filter = talloc_asprintf(ctx, "(objectclass=%s)", LDAP_OBJ_IDPOOL);
+	CHECK_ALLOC_DONE(filter);
+
+	attr_list = get_attr_list(ctx, idpool_attr_list);
+	CHECK_ALLOC_DONE(attr_list);
+
+	rc = smbldap_search(idmap_alloc_ldap->smbldap_state,
+				idmap_alloc_ldap->suffix,
+				LDAP_SCOPE_SUBTREE,
+				filter,
+				attr_list,
+				0,
+				&result);
+
+	if (rc != LDAP_SUCCESS) {
+		DEBUG(1, ("Unable to verify the idpool, "
+			  "cannot continue initialization!\n"));
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	count = ldap_count_entries(idmap_alloc_ldap->smbldap_state->ldap_struct,
+				   result);
+
+	ldap_msgfree(result);
+
+	if ( count > 1 ) {
+		DEBUG(0,("Multiple entries returned from %s (base == %s)\n",
+			filter, idmap_alloc_ldap->suffix));
+		ret = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+	else if (count == 0) {
+		char *uid_str, *gid_str;
+
+		uid_str = talloc_asprintf(ctx, "%lu",
+				(unsigned long)idmap_alloc_ldap->low_uid);
+		gid_str = talloc_asprintf(ctx, "%lu",
+				(unsigned long)idmap_alloc_ldap->low_gid);
+
+		smbldap_set_mod(&mods, LDAP_MOD_ADD,
+				"objectClass", LDAP_OBJ_IDPOOL);
+		smbldap_set_mod(&mods, LDAP_MOD_ADD,
+				get_attr_key2string(idpool_attr_list,
+						    LDAP_ATTR_UIDNUMBER),
+				uid_str);
+		smbldap_set_mod(&mods, LDAP_MOD_ADD,
+				get_attr_key2string(idpool_attr_list,
+						    LDAP_ATTR_GIDNUMBER),
+				gid_str);
+		if (mods) {
+			rc = smbldap_modify(idmap_alloc_ldap->smbldap_state,
+						idmap_alloc_ldap->suffix,
+						mods);
+			ldap_mods_free(mods, True);
+		} else {
+			ret = NT_STATUS_UNSUCCESSFUL;
+			goto done;
+		}
+	}
+
+	ret = (rc == LDAP_SUCCESS)?NT_STATUS_OK:NT_STATUS_UNSUCCESSFUL;
+done:
+	talloc_free(ctx);
+	return ret;
+}
+
+/*****************************************************************************
+ Initialise idmap database.
+*****************************************************************************/
+
+static NTSTATUS idmap_ldap_alloc_init(const char *params)
+{
+	NTSTATUS ret = NT_STATUS_UNSUCCESSFUL;
+	const char *range;
+	const char *tmp;
+	uid_t low_uid = 0;
+	uid_t high_uid = 0;
+	gid_t low_gid = 0;
+	gid_t high_gid = 0;
+
+	/* Only do init if we are online */
+	if (idmap_is_offline())	{
+		return NT_STATUS_FILE_IS_OFFLINE;
+	}
+
+	idmap_alloc_ldap = TALLOC_ZERO_P(NULL, struct idmap_ldap_alloc_context);
+        CHECK_ALLOC_DONE( idmap_alloc_ldap );
+
+	/* load ranges */
+
+	idmap_alloc_ldap->low_uid = 0;
+	idmap_alloc_ldap->high_uid = 0;
+	idmap_alloc_ldap->low_gid = 0;
+	idmap_alloc_ldap->high_gid = 0;
+
+	range = lp_parm_const_string(-1, "idmap alloc config", "range", NULL);
+	if (range && range[0]) {
+		unsigned low_id, high_id;
+
+		if (sscanf(range, "%u - %u", &low_id, &high_id) == 2) {
+			if (low_id < high_id) {
+				idmap_alloc_ldap->low_gid = low_id;
+				idmap_alloc_ldap->low_uid = low_id;
+				idmap_alloc_ldap->high_gid = high_id;
+				idmap_alloc_ldap->high_uid = high_id;
+			} else {
+				DEBUG(1, ("ERROR: invalid idmap alloc range "
+					  "[%s]", range));
+			}
+		} else {
+			DEBUG(1, ("ERROR: invalid syntax for idmap alloc "
+				  "config:range [%s]", range));
+		}
+	}
+
+	if (lp_idmap_uid(&low_uid, &high_uid)) {
+		idmap_alloc_ldap->low_uid = low_uid;
+		idmap_alloc_ldap->high_uid = high_uid;
+	}
+
+	if (lp_idmap_gid(&low_gid, &high_gid)) {
+		idmap_alloc_ldap->low_gid = low_gid;
+		idmap_alloc_ldap->high_gid= high_gid;
+	}
+
+	if (idmap_alloc_ldap->high_uid <= idmap_alloc_ldap->low_uid) {
+		DEBUG(1, ("idmap uid range missing or invalid\n"));
+		DEBUGADD(1, ("idmap will be unable to map foreign SIDs\n"));
+		ret = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+	if (idmap_alloc_ldap->high_gid <= idmap_alloc_ldap->low_gid) {
+		DEBUG(1, ("idmap gid range missing or invalid\n"));
+		DEBUGADD(1, ("idmap will be unable to map foreign SIDs\n"));
+		ret = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+	if (params && *params) {
+		/* assume location is the only parameter */
+		idmap_alloc_ldap->url = talloc_strdup(idmap_alloc_ldap, params);
+	} else {
+		tmp = lp_parm_const_string(-1, "idmap alloc config",
+					   "ldap_url", NULL);
+
+		if ( ! tmp) {
+			DEBUG(1, ("ERROR: missing idmap ldap url\n"));
+			ret = NT_STATUS_UNSUCCESSFUL;
+			goto done;
+		}
+
+		idmap_alloc_ldap->url = talloc_strdup(idmap_alloc_ldap, tmp);
+	}
+	CHECK_ALLOC_DONE( idmap_alloc_ldap->url );
+
+	tmp = lp_parm_const_string(-1, "idmap alloc config",
+				   "ldap_base_dn", NULL);
+	if ( ! tmp || ! *tmp) {
+		tmp = lp_ldap_idmap_suffix();
+		if ( ! tmp) {
+			DEBUG(1, ("ERROR: missing idmap ldap suffix\n"));
+			ret = NT_STATUS_UNSUCCESSFUL;
+			goto done;
+		}
+	}
+
+	idmap_alloc_ldap->suffix = talloc_strdup(idmap_alloc_ldap, tmp);
+	CHECK_ALLOC_DONE( idmap_alloc_ldap->suffix );
+
+	ret = smbldap_init(idmap_alloc_ldap, idmap_alloc_ldap->url,
+				 &idmap_alloc_ldap->smbldap_state);
+	if (!NT_STATUS_IS_OK(ret)) {
+		DEBUG(1, ("ERROR: smbldap_init (%s) failed!\n",
+			  idmap_alloc_ldap->url));
+		goto done;
+	}
+
+        ret = get_credentials( idmap_alloc_ldap,
+			       idmap_alloc_ldap->smbldap_state,
+			       "idmap alloc config", NULL,
+			       &idmap_alloc_ldap->user_dn );
+	if ( !NT_STATUS_IS_OK(ret) ) {
+		DEBUG(1,("idmap_ldap_alloc_init: Failed to get connection "
+			 "credentials (%s)\n", nt_errstr(ret)));
+		goto done;
+	}
+
+	/* see if the idmap suffix and sub entries exists */
+
+	ret = verify_idpool();
+
+ done:
+	if ( !NT_STATUS_IS_OK( ret ) )
+		TALLOC_FREE( idmap_alloc_ldap );
+
+	return ret;
+}
+
+/********************************
+ Allocate a new uid or gid
+********************************/
+
+static NTSTATUS idmap_ldap_allocate_id(struct unixid *xid)
+{
+	TALLOC_CTX *ctx;
+	NTSTATUS ret = NT_STATUS_UNSUCCESSFUL;
+	int rc = LDAP_SERVER_DOWN;
+	int count = 0;
+	LDAPMessage *result = NULL;
+	LDAPMessage *entry = NULL;
+	LDAPMod **mods = NULL;
+	char *id_str;
+	char *new_id_str;
+	char *filter = NULL;
+	const char *dn = NULL;
+	const char **attr_list;
+	const char *type;
+
+	/* Only do query if we are online */
+	if (idmap_is_offline())	{
+		return NT_STATUS_FILE_IS_OFFLINE;
+	}
+
+	if ( ! idmap_alloc_ldap) {
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	ctx = talloc_new(idmap_alloc_ldap);
+	if ( ! ctx) {
+		DEBUG(0, ("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	/* get type */
+	switch (xid->type) {
+
+	case ID_TYPE_UID:
+		type = get_attr_key2string(idpool_attr_list,
+					   LDAP_ATTR_UIDNUMBER);
+	       	break;
+
+	case ID_TYPE_GID:
+		type = get_attr_key2string(idpool_attr_list,
+					   LDAP_ATTR_GIDNUMBER);
+		break;
+
+	default:
+		DEBUG(2, ("Invalid ID type (0x%x)\n", xid->type));
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	filter = talloc_asprintf(ctx, "(objectClass=%s)", LDAP_OBJ_IDPOOL);
+	CHECK_ALLOC_DONE(filter);
+
+	attr_list = get_attr_list(ctx, idpool_attr_list);
+	CHECK_ALLOC_DONE(attr_list);
+
+	DEBUG(10, ("Search of the id pool (filter: %s)\n", filter));
+
+	rc = smbldap_search(idmap_alloc_ldap->smbldap_state,
+				idmap_alloc_ldap->suffix,
+			       LDAP_SCOPE_SUBTREE, filter,
+			       attr_list, 0, &result);
+
+	if (rc != LDAP_SUCCESS) {
+		DEBUG(0,("%s object not found\n", LDAP_OBJ_IDPOOL));
+		goto done;
+	}
+
+	talloc_autofree_ldapmsg(ctx, result);
+
+	count = ldap_count_entries(idmap_alloc_ldap->smbldap_state->ldap_struct,
+				   result);
+	if (count != 1) {
+		DEBUG(0,("Single %s object not found\n", LDAP_OBJ_IDPOOL));
+		goto done;
+	}
+
+	entry = ldap_first_entry(idmap_alloc_ldap->smbldap_state->ldap_struct,
+				 result);
+
+	dn = smbldap_talloc_dn(ctx,
+			       idmap_alloc_ldap->smbldap_state->ldap_struct,
+			       entry);
+	if ( ! dn) {
+		goto done;
+	}
+
+	if ( ! (id_str = smbldap_talloc_single_attribute(idmap_alloc_ldap->smbldap_state->ldap_struct,
+				entry, type, ctx))) {
+		DEBUG(0,("%s attribute not found\n", type));
+		goto done;
+	}
+	if ( ! id_str) {
+		DEBUG(0,("Out of memory\n"));
+		ret = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	xid->id = strtoul(id_str, NULL, 10);
+
+	/* make sure we still have room to grow */
+
+	switch (xid->type) {
+	case ID_TYPE_UID:
+		if (xid->id > idmap_alloc_ldap->high_uid) {
+			DEBUG(0,("Cannot allocate uid above %lu!\n",
+				 (unsigned long)idmap_alloc_ldap->high_uid));
+			goto done;
+		}
+		break;
+
+	case ID_TYPE_GID:
+		if (xid->id > idmap_alloc_ldap->high_gid) {
+			DEBUG(0,("Cannot allocate gid above %lu!\n",
+				 (unsigned long)idmap_alloc_ldap->high_uid));
+			goto done;
+		}
+		break;
+
+	default:
+		/* impossible */
+		goto done;
+	}
+
+	new_id_str = talloc_asprintf(ctx, "%lu", (unsigned long)xid->id + 1);
+	if ( ! new_id_str) {
+		DEBUG(0,("Out of memory\n"));
+		ret = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	smbldap_set_mod(&mods, LDAP_MOD_DELETE, type, id_str);
+	smbldap_set_mod(&mods, LDAP_MOD_ADD, type, new_id_str);
+
+	if (mods == NULL) {
+		DEBUG(0,("smbldap_set_mod() failed.\n"));
+		goto done;
+	}
+
+	DEBUG(10, ("Try to atomically increment the id (%s -> %s)\n",
+		   id_str, new_id_str));
+
+	rc = smbldap_modify(idmap_alloc_ldap->smbldap_state, dn, mods);
+
+	ldap_mods_free(mods, True);
+
+	if (rc != LDAP_SUCCESS) {
+		DEBUG(1,("Failed to allocate new %s. "
+			 "smbldap_modify() failed.\n", type));
+		goto done;
+	}
+
+	ret = NT_STATUS_OK;
+
+done:
+	talloc_free(ctx);
+	return ret;
+}
+
+/**********************************
+ Get current highest id.
+**********************************/
+
+static NTSTATUS idmap_ldap_get_hwm(struct unixid *xid)
+{
+	TALLOC_CTX *memctx;
+	NTSTATUS ret = NT_STATUS_UNSUCCESSFUL;
+	int rc = LDAP_SERVER_DOWN;
+	int count = 0;
+	LDAPMessage *result = NULL;
+	LDAPMessage *entry = NULL;
+	char *id_str;
+	char *filter = NULL;
+	const char **attr_list;
+	const char *type;
+
+	/* Only do query if we are online */
+	if (idmap_is_offline())	{
+		return NT_STATUS_FILE_IS_OFFLINE;
+	}
+
+	if ( ! idmap_alloc_ldap) {
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	memctx = talloc_new(idmap_alloc_ldap);
+	if ( ! memctx) {
+		DEBUG(0, ("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	/* get type */
+	switch (xid->type) {
+
+	case ID_TYPE_UID:
+		type = get_attr_key2string(idpool_attr_list,
+					   LDAP_ATTR_UIDNUMBER);
+	       	break;
+
+	case ID_TYPE_GID:
+		type = get_attr_key2string(idpool_attr_list,
+					   LDAP_ATTR_GIDNUMBER);
+		break;
+
+	default:
+		DEBUG(2, ("Invalid ID type (0x%x)\n", xid->type));
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	filter = talloc_asprintf(memctx, "(objectClass=%s)", LDAP_OBJ_IDPOOL);
+	CHECK_ALLOC_DONE(filter);
+
+	attr_list = get_attr_list(memctx, idpool_attr_list);
+	CHECK_ALLOC_DONE(attr_list);
+
+	rc = smbldap_search(idmap_alloc_ldap->smbldap_state,
+				idmap_alloc_ldap->suffix,
+			       LDAP_SCOPE_SUBTREE, filter,
+			       attr_list, 0, &result);
+
+	if (rc != LDAP_SUCCESS) {
+		DEBUG(0,("%s object not found\n", LDAP_OBJ_IDPOOL));
+		goto done;
+	}
+
+	talloc_autofree_ldapmsg(memctx, result);
+
+	count = ldap_count_entries(idmap_alloc_ldap->smbldap_state->ldap_struct,
+				   result);
+	if (count != 1) {
+		DEBUG(0,("Single %s object not found\n", LDAP_OBJ_IDPOOL));
+		goto done;
+	}
+
+	entry = ldap_first_entry(idmap_alloc_ldap->smbldap_state->ldap_struct,
+				 result);
+
+	id_str = smbldap_talloc_single_attribute(idmap_alloc_ldap->smbldap_state->ldap_struct,
+			entry, type, memctx);
+	if ( ! id_str) {
+		DEBUG(0,("%s attribute not found\n", type));
+		goto done;
+	}
+	if ( ! id_str) {
+		DEBUG(0,("Out of memory\n"));
+		ret = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	xid->id	= strtoul(id_str, NULL, 10);
+
+	ret = NT_STATUS_OK;
+done:
+	talloc_free(memctx);
+	return ret;
+}
+/**********************************
+ Set highest id.
+**********************************/
+
+static NTSTATUS idmap_ldap_set_hwm(struct unixid *xid)
+{
+	TALLOC_CTX *ctx;
+	NTSTATUS ret = NT_STATUS_UNSUCCESSFUL;
+	int rc = LDAP_SERVER_DOWN;
+	int count = 0;
+	LDAPMessage *result = NULL;
+	LDAPMessage *entry = NULL;
+	LDAPMod **mods = NULL;
+	char *new_id_str;
+	char *filter = NULL;
+	const char *dn = NULL;
+	const char **attr_list;
+	const char *type;
+
+	/* Only do query if we are online */
+	if (idmap_is_offline())	{
+		return NT_STATUS_FILE_IS_OFFLINE;
+	}
+
+	if ( ! idmap_alloc_ldap) {
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	ctx = talloc_new(idmap_alloc_ldap);
+	if ( ! ctx) {
+		DEBUG(0, ("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	/* get type */
+	switch (xid->type) {
+
+	case ID_TYPE_UID:
+		type = get_attr_key2string(idpool_attr_list,
+					   LDAP_ATTR_UIDNUMBER);
+	       	break;
+
+	case ID_TYPE_GID:
+		type = get_attr_key2string(idpool_attr_list,
+					   LDAP_ATTR_GIDNUMBER);
+		break;
+
+	default:
+		DEBUG(2, ("Invalid ID type (0x%x)\n", xid->type));
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	filter = talloc_asprintf(ctx, "(objectClass=%s)", LDAP_OBJ_IDPOOL);
+	CHECK_ALLOC_DONE(filter);
+
+	attr_list = get_attr_list(ctx, idpool_attr_list);
+	CHECK_ALLOC_DONE(attr_list);
+
+	rc = smbldap_search(idmap_alloc_ldap->smbldap_state,
+				idmap_alloc_ldap->suffix,
+			       LDAP_SCOPE_SUBTREE, filter,
+			       attr_list, 0, &result);
+
+	if (rc != LDAP_SUCCESS) {
+		DEBUG(0,("%s object not found\n", LDAP_OBJ_IDPOOL));
+		goto done;
+	}
+
+	talloc_autofree_ldapmsg(ctx, result);
+
+	count = ldap_count_entries(idmap_alloc_ldap->smbldap_state->ldap_struct,
+				   result);
+	if (count != 1) {
+		DEBUG(0,("Single %s object not found\n", LDAP_OBJ_IDPOOL));
+		goto done;
+	}
+
+	entry = ldap_first_entry(idmap_alloc_ldap->smbldap_state->ldap_struct,
+				 result);
+
+	dn = smbldap_talloc_dn(ctx,
+				idmap_alloc_ldap->smbldap_state->ldap_struct,
+				entry);
+	if ( ! dn) {
+		goto done;
+	}
+
+	new_id_str = talloc_asprintf(ctx, "%lu", (unsigned long)xid->id);
+	if ( ! new_id_str) {
+		DEBUG(0,("Out of memory\n"));
+		ret = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	smbldap_set_mod(&mods, LDAP_MOD_REPLACE, type, new_id_str);
+
+	if (mods == NULL) {
+		DEBUG(0,("smbldap_set_mod() failed.\n"));
+		goto done;
+	}
+
+	rc = smbldap_modify(idmap_alloc_ldap->smbldap_state, dn, mods);
+
+	ldap_mods_free(mods, True);
+
+	if (rc != LDAP_SUCCESS) {
+		DEBUG(1,("Failed to allocate new %s. "
+			 "smbldap_modify() failed.\n", type));
+		goto done;
+	}
+
+	ret = NT_STATUS_OK;
+
+done:
+	talloc_free(ctx);
+	return ret;
+}
+
+/**********************************
+ Close idmap ldap alloc
+**********************************/
+
+static NTSTATUS idmap_ldap_alloc_close(void)
+{
+	if (idmap_alloc_ldap) {
+		smbldap_free_struct(&idmap_alloc_ldap->smbldap_state);
+		DEBUG(5,("The connection to the LDAP server was closed\n"));
+		/* maybe free the results here --metze */
+		TALLOC_FREE(idmap_alloc_ldap);
+	}
+	return NT_STATUS_OK;
+}
+
+
+/**********************************************************************
+ IDMAP MAPPING LDAP BACKEND
+**********************************************************************/
+
+static int idmap_ldap_close_destructor(struct idmap_ldap_context *ctx)
+{
+	smbldap_free_struct(&ctx->smbldap_state);
+	DEBUG(5,("The connection to the LDAP server was closed\n"));
+	/* maybe free the results here --metze */
+
+	return 0;
+}
+
+/********************************
+ Initialise idmap database.
+********************************/
+
+static NTSTATUS idmap_ldap_db_init(struct idmap_domain *dom)
+{
+	NTSTATUS ret;
+	struct idmap_ldap_context *ctx = NULL;
+	char *config_option = NULL;
+	const char *range = NULL;
+	const char *tmp = NULL;
+
+	/* Only do init if we are online */
+	if (idmap_is_offline())	{
+		return NT_STATUS_FILE_IS_OFFLINE;
+	}
+
+	ctx = TALLOC_ZERO_P(dom, struct idmap_ldap_context);
+	if ( ! ctx) {
+		DEBUG(0, ("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	config_option = talloc_asprintf(ctx, "idmap config %s", dom->name);
+	if ( ! config_option) {
+		DEBUG(0, ("Out of memory!\n"));
+		ret = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	/* load ranges */
+	range = lp_parm_const_string(-1, config_option, "range", NULL);
+	if (range && range[0]) {
+		if ((sscanf(range, "%u - %u", &ctx->filter_low_id,
+						&ctx->filter_high_id) != 2) ||
+		    (ctx->filter_low_id > ctx->filter_high_id)) {
+			DEBUG(1, ("ERROR: invalid filter range [%s]", range));
+			ctx->filter_low_id = 0;
+			ctx->filter_high_id = 0;
+		}
+	}
+
+	if (dom->params && *(dom->params)) {
+		/* assume location is the only parameter */
+		ctx->url = talloc_strdup(ctx, dom->params);
+	} else {
+		tmp = lp_parm_const_string(-1, config_option, "ldap_url", NULL);
+
+		if ( ! tmp) {
+			DEBUG(1, ("ERROR: missing idmap ldap url\n"));
+			ret = NT_STATUS_UNSUCCESSFUL;
+			goto done;
+		}
+
+		ctx->url = talloc_strdup(ctx, tmp);
+	}
+	CHECK_ALLOC_DONE(ctx->url);
+
+        tmp = lp_parm_const_string(-1, config_option, "ldap_base_dn", NULL);
+        if ( ! tmp || ! *tmp) {
+                tmp = lp_ldap_idmap_suffix();
+                if ( ! tmp) {
+                        DEBUG(1, ("ERROR: missing idmap ldap suffix\n"));
+                        ret = NT_STATUS_UNSUCCESSFUL;
+                        goto done;
+		}
+        }
+
+	ctx->suffix = talloc_strdup(ctx, tmp);
+	CHECK_ALLOC_DONE(ctx->suffix);
+
+	ret = smbldap_init(ctx, ctx->url, &ctx->smbldap_state);
+	if (!NT_STATUS_IS_OK(ret)) {
+		DEBUG(1, ("ERROR: smbldap_init (%s) failed!\n", ctx->url));
+		goto done;
+	}
+
+        ret = get_credentials( ctx, ctx->smbldap_state, config_option,
+			       dom, &ctx->user_dn );
+	if ( !NT_STATUS_IS_OK(ret) ) {
+		DEBUG(1,("idmap_ldap_db_init: Failed to get connection "
+			 "credentials (%s)\n", nt_errstr(ret)));
+		goto done;
+	}
+
+	/* set the destructor on the context, so that resource are properly
+	   freed if the contexts is released */
+
+	talloc_set_destructor(ctx, idmap_ldap_close_destructor);
+
+	dom->private_data = ctx;
+	dom->initialized = True;
+
+	talloc_free(config_option);
+	return NT_STATUS_OK;
+
+/*failed */
+done:
+	talloc_free(ctx);
+	return ret;
+}
+
+/* max number of ids requested per batch query */
+#define IDMAP_LDAP_MAX_IDS 30
+
+/**********************************
+ lookup a set of unix ids.
+**********************************/
+
+/* this function searches up to IDMAP_LDAP_MAX_IDS entries
+ * in maps for a match */
+static struct id_map *find_map_by_id(struct id_map **maps,
+				     enum id_type type,
+				     uint32_t id)
+{
+	int i;
+
+	for (i = 0; i < IDMAP_LDAP_MAX_IDS; i++) {
+		if (maps[i] == NULL) { /* end of the run */
+			return NULL;
+		}
+		if ((maps[i]->xid.type == type) && (maps[i]->xid.id == id)) {
+			return maps[i];
+		}
+	}
+
+	return NULL;
+}
+
+static NTSTATUS idmap_ldap_unixids_to_sids(struct idmap_domain *dom,
+					   struct id_map **ids)
+{
+	NTSTATUS ret;
+	TALLOC_CTX *memctx;
+	struct idmap_ldap_context *ctx;
+	LDAPMessage *result = NULL;
+	const char *uidNumber;
+	const char *gidNumber;
+	const char **attr_list;
+	char *filter = NULL;
+	BOOL multi = False;
+	int idx = 0;
+	int bidx = 0;
+	int count;
+	int rc;
+	int i;
+
+	/* Only do query if we are online */
+	if (idmap_is_offline())	{
+		return NT_STATUS_FILE_IS_OFFLINE;
+	}
+
+	/* Initilization my have been deferred because we were offline */
+	if ( ! dom->initialized) {
+		ret = idmap_ldap_db_init(dom);
+		if ( ! NT_STATUS_IS_OK(ret)) {
+			return ret;
+		}
+	}
+
+	ctx = talloc_get_type(dom->private_data, struct idmap_ldap_context);
+
+	memctx = talloc_new(ctx);
+	if ( ! memctx) {
+		DEBUG(0, ("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	uidNumber = get_attr_key2string(idpool_attr_list, LDAP_ATTR_UIDNUMBER);
+	gidNumber = get_attr_key2string(idpool_attr_list, LDAP_ATTR_GIDNUMBER);
+
+	attr_list = get_attr_list(memctx, sidmap_attr_list);
+
+	if ( ! ids[1]) {
+		/* if we are requested just one mapping use the simple filter */
+
+		filter = talloc_asprintf(memctx, "(&(objectClass=%s)(%s=%lu))",
+				LDAP_OBJ_IDMAP_ENTRY,
+				(ids[0]->xid.type==ID_TYPE_UID)?uidNumber:gidNumber,
+				(unsigned long)ids[0]->xid.id);
+		CHECK_ALLOC_DONE(filter);
+		DEBUG(10, ("Filter: [%s]\n", filter));
+	} else {
+		/* multiple mappings */
+		multi = True;
+	}
+
+again:
+	if (multi) {
+
+		talloc_free(filter);
+		filter = talloc_asprintf(memctx,
+					 "(&(objectClass=%s)(|",
+					 LDAP_OBJ_IDMAP_ENTRY);
+		CHECK_ALLOC_DONE(filter);
+
+		bidx = idx;
+		for (i = 0; (i < IDMAP_LDAP_MAX_IDS) && ids[idx]; i++, idx++) {
+			filter = talloc_asprintf_append(filter, "(%s=%lu)",
+					(ids[idx]->xid.type==ID_TYPE_UID)?uidNumber:gidNumber,
+					(unsigned long)ids[idx]->xid.id);
+			CHECK_ALLOC_DONE(filter);
+		}
+		filter = talloc_asprintf_append(filter, "))");
+		CHECK_ALLOC_DONE(filter);
+		DEBUG(10, ("Filter: [%s]\n", filter));
+	} else {
+		bidx = 0;
+		idx = 1;
+	}
+
+	rc = smbldap_search(ctx->smbldap_state, ctx->suffix, LDAP_SCOPE_SUBTREE,
+		filter, attr_list, 0, &result);
+
+	if (rc != LDAP_SUCCESS) {
+		DEBUG(3,("Failure looking up ids (%s)\n", ldap_err2string(rc)));
+		ret = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+	count = ldap_count_entries(ctx->smbldap_state->ldap_struct, result);
+
+	if (count == 0) {
+		DEBUG(10, ("NO SIDs found\n"));
+	}
+
+	for (i = 0; i < count; i++) {
+		LDAPMessage *entry = NULL;
+		char *sidstr = NULL;
+	       	char *tmp = NULL;
+		enum id_type type;
+		struct id_map *map;
+		uint32_t id;
+
+		if (i == 0) { /* first entry */
+			entry = ldap_first_entry(ctx->smbldap_state->ldap_struct,
+						 result);
+		} else { /* following ones */
+			entry = ldap_next_entry(ctx->smbldap_state->ldap_struct,
+						entry);
+		}
+		if ( ! entry) {
+			DEBUG(2, ("ERROR: Unable to fetch ldap entries "
+				  "from results\n"));
+			break;
+		}
+
+		/* first check if the SID is present */
+		sidstr = smbldap_talloc_single_attribute(
+				ctx->smbldap_state->ldap_struct,
+				entry, LDAP_ATTRIBUTE_SID, memctx);
+		if ( ! sidstr) { /* no sid, skip entry */
+			DEBUG(2, ("WARNING SID not found on entry\n"));
+			continue;
+		}
+
+		/* now try to see if it is a uid, if not try with a gid
+		 * (gid is more common, but in case both uidNumber and
+		 * gidNumber are returned the SID is mapped to the uid
+		 *not the gid) */
+		type = ID_TYPE_UID;
+		tmp = smbldap_talloc_single_attribute(
+				ctx->smbldap_state->ldap_struct,
+				entry, uidNumber, memctx);
+		if ( ! tmp) {
+			type = ID_TYPE_GID;
+			tmp = smbldap_talloc_single_attribute(
+					ctx->smbldap_state->ldap_struct,
+					entry, gidNumber, memctx);
+		}
+		if ( ! tmp) { /* wow very strange entry, how did it match ? */
+			DEBUG(5, ("Unprobable match on (%s), no uidNumber, "
+				  "nor gidNumber returned\n", sidstr));
+			TALLOC_FREE(sidstr);
+			continue;
+		}
+
+		id = strtoul(tmp, NULL, 10);
+		if ((id == 0) ||
+		    (ctx->filter_low_id && (id < ctx->filter_low_id)) ||
+		    (ctx->filter_high_id && (id > ctx->filter_high_id))) {
+			DEBUG(5, ("Requested id (%u) out of range (%u - %u). "
+				  "Filtered!\n", id,
+				  ctx->filter_low_id, ctx->filter_high_id));
+			TALLOC_FREE(sidstr);
+			TALLOC_FREE(tmp);
+			continue;
+		}
+		TALLOC_FREE(tmp);
+
+		map = find_map_by_id(&ids[bidx], type, id);
+		if (!map) {
+			DEBUG(2, ("WARNING: couldn't match sid (%s) "
+				  "with requested ids\n", sidstr));
+			TALLOC_FREE(sidstr);
+			continue;
+		}
+
+		if ( ! string_to_sid(map->sid, sidstr)) {
+			DEBUG(2, ("ERROR: Invalid SID on entry\n"));
+			TALLOC_FREE(sidstr);
+			continue;
+		}
+		TALLOC_FREE(sidstr);
+
+		/* mapped */
+		map->status = ID_MAPPED;
+
+		DEBUG(10, ("Mapped %s -> %lu (%d)\n",
+			   sid_string_static(map->sid),
+			   (unsigned long)map->xid.id, map->xid.type));
+	}
+
+	/* free the ldap results */
+	if (result) {
+		ldap_msgfree(result);
+		result = NULL;
+	}
+
+	if (multi && ids[idx]) { /* still some values to map */
+		goto again;
+	}
+
+	ret = NT_STATUS_OK;
+
+	/* mark all unknwon/expired ones as unmapped */
+	for (i = 0; ids[i]; i++) {
+		if (ids[i]->status != ID_MAPPED)
+			ids[i]->status = ID_UNMAPPED;
+	}
+
+done:
+	talloc_free(memctx);
+	return ret;
+}
+
+/**********************************
+ lookup a set of sids.
+**********************************/
+
+/* this function searches up to IDMAP_LDAP_MAX_IDS entries
+ * in maps for a match */
+static struct id_map *find_map_by_sid(struct id_map **maps, DOM_SID *sid)
+{
+	int i;
+
+	for (i = 0; i < IDMAP_LDAP_MAX_IDS; i++) {
+		if (maps[i] == NULL) { /* end of the run */
+			return NULL;
+		}
+		if (sid_equal(maps[i]->sid, sid)) {
+			return maps[i];
+		}
+	}
+
+	return NULL;
+}
+
+static NTSTATUS idmap_ldap_sids_to_unixids(struct idmap_domain *dom,
+					   struct id_map **ids)
+{
+       	LDAPMessage *entry = NULL;
+	NTSTATUS ret;
+	TALLOC_CTX *memctx;
+	struct idmap_ldap_context *ctx;
+	LDAPMessage *result = NULL;
+	const char *uidNumber;
+	const char *gidNumber;
+	const char **attr_list;
+	char *filter = NULL;
+	BOOL multi = False;
+	int idx = 0;
+	int bidx = 0;
+	int count;
+	int rc;
+	int i;
+
+	/* Only do query if we are online */
+	if (idmap_is_offline())	{
+		return NT_STATUS_FILE_IS_OFFLINE;
+	}
+
+	/* Initilization my have been deferred because we were offline */
+	if ( ! dom->initialized) {
+		ret = idmap_ldap_db_init(dom);
+		if ( ! NT_STATUS_IS_OK(ret)) {
+			return ret;
+		}
+	}
+
+	ctx = talloc_get_type(dom->private_data, struct idmap_ldap_context);
+
+	memctx = talloc_new(ctx);
+	if ( ! memctx) {
+		DEBUG(0, ("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	uidNumber = get_attr_key2string(idpool_attr_list, LDAP_ATTR_UIDNUMBER);
+	gidNumber = get_attr_key2string(idpool_attr_list, LDAP_ATTR_GIDNUMBER);
+
+	attr_list = get_attr_list(memctx, sidmap_attr_list);
+
+	if ( ! ids[1]) {
+		/* if we are requested just one mapping use the simple filter */
+
+		filter = talloc_asprintf(memctx, "(&(objectClass=%s)(%s=%s))",
+				LDAP_OBJ_IDMAP_ENTRY,
+				LDAP_ATTRIBUTE_SID,
+				sid_string_static(ids[0]->sid));
+		CHECK_ALLOC_DONE(filter);
+		DEBUG(10, ("Filter: [%s]\n", filter));
+	} else {
+		/* multiple mappings */
+		multi = True;
+	}
+
+again:
+	if (multi) {
+
+		TALLOC_FREE(filter);
+		filter = talloc_asprintf(memctx,
+					 "(&(objectClass=%s)(|",
+					 LDAP_OBJ_IDMAP_ENTRY);
+		CHECK_ALLOC_DONE(filter);
+
+		bidx = idx;
+		for (i = 0; (i < IDMAP_LDAP_MAX_IDS) && ids[idx]; i++, idx++) {
+			filter = talloc_asprintf_append(filter, "(%s=%s)",
+					LDAP_ATTRIBUTE_SID,
+					sid_string_static(ids[idx]->sid));
+			CHECK_ALLOC_DONE(filter);
+		}
+		filter = talloc_asprintf_append(filter, "))");
+		CHECK_ALLOC_DONE(filter);
+		DEBUG(10, ("Filter: [%s]", filter));
+	} else {
+		bidx = 0;
+		idx = 1;
+	}
+
+	rc = smbldap_search(ctx->smbldap_state, ctx->suffix, LDAP_SCOPE_SUBTREE,
+		filter, attr_list, 0, &result);
+
+	if (rc != LDAP_SUCCESS) {
+		DEBUG(3,("Failure looking up sids (%s)\n",
+			 ldap_err2string(rc)));
+		ret = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+	count = ldap_count_entries(ctx->smbldap_state->ldap_struct, result);
+
+	if (count == 0) {
+		DEBUG(10, ("NO SIDs found\n"));
+	}
+
+	for (i = 0; i < count; i++) {
+		char *sidstr = NULL;
+		char *tmp = NULL;
+		enum id_type type;
+		struct id_map *map;
+		DOM_SID sid;
+		uint32_t id;
+
+		if (i == 0) { /* first entry */
+			entry = ldap_first_entry(ctx->smbldap_state->ldap_struct,
+						 result);
+		} else { /* following ones */
+			entry = ldap_next_entry(ctx->smbldap_state->ldap_struct,
+						entry);
+		}
+		if ( ! entry) {
+			DEBUG(2, ("ERROR: Unable to fetch ldap entries "
+				  "from results\n"));
+			break;
+		}
+
+		/* first check if the SID is present */
+		sidstr = smbldap_talloc_single_attribute(
+				ctx->smbldap_state->ldap_struct,
+				entry, LDAP_ATTRIBUTE_SID, memctx);
+		if ( ! sidstr) { /* no sid ??, skip entry */
+			DEBUG(2, ("WARNING SID not found on entry\n"));
+			continue;
+		}
+
+		if ( ! string_to_sid(&sid, sidstr)) {
+			DEBUG(2, ("ERROR: Invalid SID on entry\n"));
+			TALLOC_FREE(sidstr);
+			continue;
+		}
+
+		map = find_map_by_sid(&ids[bidx], &sid);
+		if (!map) {
+			DEBUG(2, ("WARNING: couldn't find entry sid (%s) "
+				  "in ids", sidstr));
+			TALLOC_FREE(sidstr);
+			continue;
+		}
+
+		TALLOC_FREE(sidstr);
+
+		/* now try to see if it is a uid, if not try with a gid
+		 * (gid is more common, but in case both uidNumber and
+		 * gidNumber are returned the SID is mapped to the uid
+		 * not the gid) */
+		type = ID_TYPE_UID;
+		tmp = smbldap_talloc_single_attribute(
+				ctx->smbldap_state->ldap_struct,
+				entry, uidNumber, memctx);
+		if ( ! tmp) {
+			type = ID_TYPE_GID;
+			tmp = smbldap_talloc_single_attribute(
+					ctx->smbldap_state->ldap_struct,
+					entry, gidNumber, memctx);
+		}
+		if ( ! tmp) { /* no ids ?? */
+			DEBUG(5, ("no uidNumber, "
+				  "nor gidNumber attributes found\n"));
+			continue;
+		}
+
+		id = strtoul(tmp, NULL, 10);
+		if ((id == 0) ||
+		    (ctx->filter_low_id && (id < ctx->filter_low_id)) ||
+		    (ctx->filter_high_id && (id > ctx->filter_high_id))) {
+			DEBUG(5, ("Requested id (%u) out of range (%u - %u). "
+				  "Filtered!\n", id,
+				  ctx->filter_low_id, ctx->filter_high_id));
+			TALLOC_FREE(tmp);
+			continue;
+		}
+		TALLOC_FREE(tmp);
+
+		/* mapped */
+		map->xid.type = type;
+		map->xid.id = id;
+		map->status = ID_MAPPED;
+
+		DEBUG(10, ("Mapped %s -> %lu (%d)\n",
+			   sid_string_static(map->sid),
+			   (unsigned long)map->xid.id, map->xid.type));
+	}
+
+	/* free the ldap results */
+	if (result) {
+		ldap_msgfree(result);
+		result = NULL;
+	}
+
+	if (multi && ids[idx]) { /* still some values to map */
+		goto again;
+	}
+
+	ret = NT_STATUS_OK;
+
+	/* mark all unknwon/expired ones as unmapped */
+	for (i = 0; ids[i]; i++) {
+		if (ids[i]->status != ID_MAPPED)
+			ids[i]->status = ID_UNMAPPED;
+	}
+
+done:
+	talloc_free(memctx);
+	return ret;
+}
+
+/**********************************
+ set a mapping.
+**********************************/
+
+/* TODO: change this:  This function cannot be called to modify a mapping,
+ * only set a new one */
+
+static NTSTATUS idmap_ldap_set_mapping(struct idmap_domain *dom,
+				       const struct id_map *map)
+{
+	NTSTATUS ret;
+	TALLOC_CTX *memctx;
+	struct idmap_ldap_context *ctx;
+	LDAPMessage *entry = NULL;
+	LDAPMod **mods = NULL;
+	const char *type;
+	char *id_str;
+	char *sid;
+	char *dn;
+	int rc = -1;
+
+	/* Only do query if we are online */
+	if (idmap_is_offline())	{
+		return NT_STATUS_FILE_IS_OFFLINE;
+	}
+
+	/* Initilization my have been deferred because we were offline */
+	if ( ! dom->initialized) {
+		ret = idmap_ldap_db_init(dom);
+		if ( ! NT_STATUS_IS_OK(ret)) {
+			return ret;
+		}
+	}
+
+	ctx = talloc_get_type(dom->private_data, struct idmap_ldap_context);
+
+	switch(map->xid.type) {
+	case ID_TYPE_UID:
+		type = get_attr_key2string(sidmap_attr_list,
+					   LDAP_ATTR_UIDNUMBER);
+		break;
+
+	case ID_TYPE_GID:
+		type = get_attr_key2string(sidmap_attr_list,
+					   LDAP_ATTR_GIDNUMBER);
+		break;
+
+	default:
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	memctx = talloc_new(ctx);
+	if ( ! memctx) {
+		DEBUG(0, ("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	id_str = talloc_asprintf(memctx, "%lu", (unsigned long)map->xid.id);
+	CHECK_ALLOC_DONE(id_str);
+
+	sid = talloc_strdup(memctx, sid_string_static(map->sid));
+	CHECK_ALLOC_DONE(sid);
+
+	dn = talloc_asprintf(memctx, "%s=%s,%s",
+			get_attr_key2string(sidmap_attr_list, LDAP_ATTR_SID),
+			sid,
+			ctx->suffix);
+	CHECK_ALLOC_DONE(dn);
+
+	smbldap_set_mod(&mods, LDAP_MOD_ADD,
+			"objectClass", LDAP_OBJ_IDMAP_ENTRY);
+
+	smbldap_make_mod(ctx->smbldap_state->ldap_struct,
+			 entry, &mods, type, id_str);
+
+	smbldap_make_mod(ctx->smbldap_state->ldap_struct, entry, &mods,
+			 get_attr_key2string(sidmap_attr_list, LDAP_ATTR_SID),
+			 sid);
+
+	if ( ! mods) {
+		DEBUG(2, ("ERROR: No mods?\n"));
+		ret = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+	/* TODO: remove conflicting mappings! */
+
+	smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectClass", LDAP_OBJ_SID_ENTRY);
+
+	DEBUG(10, ("Set DN %s (%s -> %s)\n", dn, sid, id_str));
+
+	rc = smbldap_add(ctx->smbldap_state, dn, mods);
+	ldap_mods_free(mods, True);
+
+	if (rc != LDAP_SUCCESS) {
+		char *ld_error = NULL;
+		ldap_get_option(ctx->smbldap_state->ldap_struct,
+				LDAP_OPT_ERROR_STRING, &ld_error);
+		DEBUG(0,("ldap_set_mapping_internals: Failed to add %s to %lu "
+			 "mapping [%s]\n", sid,
+			 (unsigned long)map->xid.id, type));
+		DEBUG(0, ("ldap_set_mapping_internals: Error was: %s (%s)\n",
+			ld_error ? ld_error : "(NULL)", ldap_err2string (rc)));
+		if (ld_error) {
+			ldap_memfree(ld_error);
+		}
+		ret = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+	DEBUG(10,("ldap_set_mapping: Successfully created mapping from %s to "
+		  "%lu [%s]\n",	sid, (unsigned long)map->xid.id, type));
+
+	ret = NT_STATUS_OK;
+
+done:
+	talloc_free(memctx);
+	return ret;
+}
+
+/**********************************
+ Close the idmap ldap instance
+**********************************/
+
+static NTSTATUS idmap_ldap_close(struct idmap_domain *dom)
+{
+	struct idmap_ldap_context *ctx;
+
+	if (dom->private_data) {
+		ctx = talloc_get_type(dom->private_data,
+				      struct idmap_ldap_context);
+
+		talloc_free(ctx);
+		dom->private_data = NULL;
+	}
+
+	return NT_STATUS_OK;
+}
+
+static struct idmap_methods idmap_ldap_methods = {
+
+	.init = idmap_ldap_db_init,
+	.unixids_to_sids = idmap_ldap_unixids_to_sids,
+	.sids_to_unixids = idmap_ldap_sids_to_unixids,
+	.set_mapping = idmap_ldap_set_mapping,
+	.close_fn = idmap_ldap_close
+};
+
+static struct idmap_alloc_methods idmap_ldap_alloc_methods = {
+
+	.init = idmap_ldap_alloc_init,
+	.allocate_id = idmap_ldap_allocate_id,
+	.get_id_hwm = idmap_ldap_get_hwm,
+	.set_id_hwm = idmap_ldap_set_hwm,
+	.close_fn = idmap_ldap_alloc_close,
+	/* .dump_data = TODO */
+};
+
+NTSTATUS idmap_alloc_ldap_init(void)
+{
+	return smb_register_idmap_alloc(SMB_IDMAP_INTERFACE_VERSION, "ldap",
+					&idmap_ldap_alloc_methods);
+}
+
+NTSTATUS idmap_ldap_init(void)
+{
+	NTSTATUS ret;
+
+	/* FIXME: bad hack to actually register also the alloc_ldap module
+	 * without changining configure.in */
+	ret = idmap_alloc_ldap_init();
+	if (! NT_STATUS_IS_OK(ret)) {
+		return ret;
+	}
+	return smb_register_idmap(SMB_IDMAP_INTERFACE_VERSION, "ldap",
+				  &idmap_ldap_methods);
+}
+

Copied: branches/samba/upstream/source/nsswitch/idmap_nss.c (from rev 1928, branches/samba/upstream/source/nsswitch/idmap_nss.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/idmap_nss.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/idmap_nss.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,224 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   idmap PASSDB backend
+
+   Copyright (C) Simo Sorce 2006
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "winbindd.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_IDMAP
+
+/*****************************
+ Initialise idmap database. 
+*****************************/
+
+static NTSTATUS idmap_nss_int_init(struct idmap_domain *dom)
+{	
+	dom->initialized = True;
+	return NT_STATUS_OK;
+}
+
+/**********************************
+ lookup a set of unix ids. 
+**********************************/
+
+static NTSTATUS idmap_nss_unixids_to_sids(struct idmap_domain *dom, struct id_map **ids)
+{
+	TALLOC_CTX *ctx;
+	int i;
+
+	if (! dom->initialized) {
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	ctx = talloc_new(dom);
+	if ( ! ctx) {
+		DEBUG(0, ("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	for (i = 0; ids[i]; i++) {
+		struct passwd *pw;
+		struct group *gr;
+		const char *name;
+		enum lsa_SidType type;
+		BOOL ret;
+		
+		switch (ids[i]->xid.type) {
+		case ID_TYPE_UID:
+			pw = getpwuid((uid_t)ids[i]->xid.id);
+
+			if (!pw) {
+				ids[i]->status = ID_UNMAPPED;
+				continue;
+			}
+			name = pw->pw_name;
+			break;
+		case ID_TYPE_GID:
+			gr = getgrgid((gid_t)ids[i]->xid.id);
+
+			if (!gr) {
+				ids[i]->status = ID_UNMAPPED;
+				continue;
+			}
+			name = gr->gr_name;
+			break;
+		default: /* ?? */
+			ids[i]->status = ID_UNKNOWN;
+			continue;
+		}
+
+		/* by default calls to winbindd are disabled
+		   the following call will not recurse so this is safe */
+		winbind_on();
+		/* Lookup name from PDC using lsa_lookup_names() */
+		ret = winbind_lookup_name(dom->name, name, ids[i]->sid, &type);
+		winbind_off();
+
+		if (!ret) {
+			/* TODO: how do we know if the name is really not mapped,
+			 * or something just failed ? */
+			ids[i]->status = ID_UNMAPPED;
+			continue;
+		}
+
+		switch (type) {
+		case SID_NAME_USER:
+			if (ids[i]->xid.type == ID_TYPE_UID) {
+				ids[i]->status = ID_MAPPED;
+			}
+			break;
+
+		case SID_NAME_DOM_GRP:
+		case SID_NAME_ALIAS:
+		case SID_NAME_WKN_GRP:
+			if (ids[i]->xid.type == ID_TYPE_GID) {
+				ids[i]->status = ID_MAPPED;
+			}
+			break;
+
+		default:
+			ids[i]->status = ID_UNKNOWN;
+			break;
+		}
+	}
+
+
+	talloc_free(ctx);
+	return NT_STATUS_OK;
+}
+
+/**********************************
+ lookup a set of sids. 
+**********************************/
+
+static NTSTATUS idmap_nss_sids_to_unixids(struct idmap_domain *dom, struct id_map **ids)
+{
+	TALLOC_CTX *ctx;
+	int i;
+
+	if (! dom->initialized) {
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	ctx = talloc_new(dom);
+	if ( ! ctx) {
+		DEBUG(0, ("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	for (i = 0; ids[i]; i++) {
+		struct passwd *pw;
+		struct group *gr;
+		enum lsa_SidType type;
+		const char *dom_name = NULL;
+		const char *name = NULL;
+		BOOL ret;
+
+		/* by default calls to winbindd are disabled
+		   the following call will not recurse so this is safe */
+		winbind_on();
+		ret = winbind_lookup_sid(ctx, ids[i]->sid, &dom_name, &name, &type);
+		winbind_off();
+
+		if (!ret) {
+			/* TODO: how do we know if the name is really not mapped,
+			 * or something just failed ? */
+			ids[i]->status = ID_UNMAPPED;
+			continue;
+		}
+
+		switch (type) {
+		case SID_NAME_USER:
+
+			/* this will find also all lower case name and use username level */
+			
+			pw = Get_Pwnam(name);
+			if (pw) {
+				ids[i]->xid.id = pw->pw_uid;
+				ids[i]->xid.type = ID_TYPE_UID;
+				ids[i]->status = ID_MAPPED;
+			}
+			break;
+
+		case SID_NAME_DOM_GRP:
+		case SID_NAME_ALIAS:
+		case SID_NAME_WKN_GRP:
+
+			gr = getgrnam(name);
+			if (gr) {
+				ids[i]->xid.id = gr->gr_gid;
+				ids[i]->xid.type = ID_TYPE_GID;
+				ids[i]->status = ID_MAPPED;
+			}
+			break;
+
+		default:
+			ids[i]->status = ID_UNKNOWN;
+			break;
+		}
+	}
+
+	talloc_free(ctx);
+	return NT_STATUS_OK;
+}
+
+/**********************************
+ Close the idmap tdb instance
+**********************************/
+
+static NTSTATUS idmap_nss_close(struct idmap_domain *dom)
+{
+	return NT_STATUS_OK;
+}
+
+static struct idmap_methods nss_methods = {
+
+	.init = idmap_nss_int_init,
+	.unixids_to_sids = idmap_nss_unixids_to_sids,
+	.sids_to_unixids = idmap_nss_sids_to_unixids,
+	.close_fn = idmap_nss_close
+};
+
+NTSTATUS idmap_nss_init(void)
+{
+	return smb_register_idmap(SMB_IDMAP_INTERFACE_VERSION, "nss", &nss_methods);
+}

Copied: branches/samba/upstream/source/nsswitch/idmap_passdb.c (from rev 1928, branches/samba/upstream/source/nsswitch/idmap_passdb.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/idmap_passdb.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/idmap_passdb.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,140 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   idmap PASSDB backend
+
+   Copyright (C) Simo Sorce 2006
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_IDMAP
+
+/*****************************
+ Initialise idmap database. 
+*****************************/
+
+static NTSTATUS idmap_pdb_init(struct idmap_domain *dom)
+{	
+	dom->initialized = True;
+	return NT_STATUS_OK;
+}
+
+/**********************************
+ lookup a set of unix ids. 
+**********************************/
+
+static NTSTATUS idmap_pdb_unixids_to_sids(struct idmap_domain *dom, struct id_map **ids)
+{
+	int i;
+
+	if (! dom->initialized) {
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	for (i = 0; ids[i]; i++) {
+
+		/* unmapped by default */
+		ids[i]->status = ID_UNMAPPED;
+
+		switch (ids[i]->xid.type) {
+		case ID_TYPE_UID:
+			if (pdb_uid_to_sid((uid_t)ids[i]->xid.id, ids[i]->sid)) {
+				ids[i]->status = ID_MAPPED;
+			}
+			break;
+		case ID_TYPE_GID:
+			if (pdb_gid_to_sid((gid_t)ids[i]->xid.id, ids[i]->sid)) {
+				ids[i]->status = ID_MAPPED;
+			}
+			break;
+		default: /* ?? */
+			ids[i]->status = ID_UNKNOWN;
+		}
+	}
+
+	return NT_STATUS_OK;
+}
+
+/**********************************
+ lookup a set of sids. 
+**********************************/
+
+static NTSTATUS idmap_pdb_sids_to_unixids(struct idmap_domain *dom, struct id_map **ids)
+{
+	int i;
+
+	if (! dom->initialized) {
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	for (i = 0; ids[i]; i++) {
+		enum lsa_SidType type;
+		union unid_t id;
+		
+		if (pdb_sid_to_id(ids[i]->sid, &id, &type)) {
+			switch (type) {
+			case SID_NAME_USER:
+				ids[i]->xid.id = id.uid;
+				ids[i]->xid.type = ID_TYPE_UID;
+				ids[i]->status = ID_MAPPED;
+				break;
+
+			case SID_NAME_DOM_GRP:
+			case SID_NAME_ALIAS:
+			case SID_NAME_WKN_GRP:
+				ids[i]->xid.id = id.gid;
+				ids[i]->xid.type = ID_TYPE_GID;
+				ids[i]->status = ID_MAPPED;
+				break;
+
+			default: /* ?? */
+				/* make sure it is marked as unmapped */
+				ids[i]->status = ID_UNKNOWN;
+				break;
+			}
+		} else {
+			/* Query Failed */
+			ids[i]->status = ID_UNMAPPED;
+		}
+	}
+
+	return NT_STATUS_OK;
+}
+
+/**********************************
+ Close the idmap tdb instance
+**********************************/
+
+static NTSTATUS idmap_pdb_close(struct idmap_domain *dom)
+{
+	return NT_STATUS_OK;
+}
+
+static struct idmap_methods passdb_methods = {
+
+	.init = idmap_pdb_init,
+	.unixids_to_sids = idmap_pdb_unixids_to_sids,
+	.sids_to_unixids = idmap_pdb_sids_to_unixids,
+	.close_fn =idmap_pdb_close
+};
+
+NTSTATUS idmap_passdb_init(void)
+{
+	return smb_register_idmap(SMB_IDMAP_INTERFACE_VERSION, "passdb", &passdb_methods);
+}

Copied: branches/samba/upstream/source/nsswitch/idmap_rid.c (from rev 1928, branches/samba/upstream/source/nsswitch/idmap_rid.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/idmap_rid.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/idmap_rid.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,268 @@
+/*
+ *  idmap_rid: static map between Active Directory/NT RIDs and RFC 2307 accounts
+ *  Copyright (C) Guenther Deschner, 2004
+ *  Copyright (C) Sumit Bose, 2004
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#include "includes.h"
+#include "winbindd.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_IDMAP
+
+struct idmap_rid_context {
+	const char *domain_name;
+	uint32_t low_id;
+	uint32_t high_id;
+	uint32_t base_rid;
+};
+
+/******************************************************************************
+  compat params can't be used because of the completely different way
+  we support multiple domains in the new idmap
+ *****************************************************************************/
+
+static NTSTATUS idmap_rid_initialize(struct idmap_domain *dom)
+{
+	NTSTATUS ret;
+	struct idmap_rid_context *ctx;
+	char *config_option = NULL;
+	const char *range;
+	uid_t low_uid = 0;
+	uid_t high_uid = 0;
+	gid_t low_gid = 0;
+	gid_t high_gid = 0;
+
+	if ( (ctx = TALLOC_ZERO_P(dom, struct idmap_rid_context)) == NULL ) {
+		DEBUG(0, ("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	config_option = talloc_asprintf(ctx, "idmap config %s", dom->name);
+	if ( ! config_option) {
+		DEBUG(0, ("Out of memory!\n"));
+		ret = NT_STATUS_NO_MEMORY;
+		goto failed;
+	}
+
+	range = lp_parm_const_string(-1, config_option, "range", NULL);
+	if ( !range ||
+	    (sscanf(range, "%u - %u", &ctx->low_id, &ctx->high_id) != 2) ||
+	    (ctx->low_id > ctx->high_id)) 
+	{
+		ctx->low_id = 0;
+		ctx->high_id = 0;
+	}
+
+	/* lets see if the range is defined by the old idmap uid/idmap gid */
+	if (!ctx->low_id && !ctx->high_id) {
+		if (lp_idmap_uid(&low_uid, &high_uid)) {
+			ctx->low_id = low_uid;
+			ctx->high_id = high_uid;
+		}
+
+		if (lp_idmap_gid(&low_gid, &high_gid)) {
+			if ((ctx->low_id != low_gid) ||
+			    (ctx->high_id != high_uid)) {
+				DEBUG(1, ("ERROR: idmap uid irange must match idmap gid range\n"));
+				ret = NT_STATUS_UNSUCCESSFUL;
+				goto failed;
+			}
+		}
+	}
+
+	if (!ctx->low_id || !ctx->high_id) {
+		DEBUG(1, ("ERROR: Invalid configuration, ID range missing or invalid\n"));
+		ret = NT_STATUS_UNSUCCESSFUL;
+		goto failed;
+	}
+
+	ctx->base_rid = lp_parm_int(-1, config_option, "base_rid", 0);
+	ctx->domain_name = talloc_strdup( ctx, dom->name );
+	
+	dom->private_data = ctx;
+	dom->initialized = True;
+
+	talloc_free(config_option);
+	return NT_STATUS_OK;
+
+failed:
+	talloc_free(ctx);
+	return ret;
+}
+
+static NTSTATUS idmap_rid_id_to_sid(TALLOC_CTX *memctx, struct idmap_rid_context *ctx, struct id_map *map)
+{
+	struct winbindd_domain *domain;	
+
+	/* apply filters before checking */
+	if ((map->xid.id < ctx->low_id) || (map->xid.id > ctx->high_id)) {
+		DEBUG(5, ("Requested id (%u) out of range (%u - %u). Filtered!\n",
+				map->xid.id, ctx->low_id, ctx->high_id));
+		return NT_STATUS_NONE_MAPPED;
+	}
+
+	if ( (domain = find_domain_from_name_noinit(ctx->domain_name)) == NULL ) {
+		return NT_STATUS_NO_SUCH_DOMAIN;
+	}
+	
+	sid_compose(map->sid, &domain->sid, map->xid.id - ctx->low_id + ctx->base_rid);
+
+	/* We **really** should have some way of validating 
+	   the SID exists and is the correct type here.  But 
+	   that is a deficiency in the idmap_rid design. */
+
+	map->status = ID_MAPPED;
+
+	return NT_STATUS_OK;
+}
+
+/**********************************
+ Single sid to id lookup function. 
+**********************************/
+
+static NTSTATUS idmap_rid_sid_to_id(TALLOC_CTX *memctx, struct idmap_rid_context *ctx, struct id_map *map)
+{
+	uint32_t rid;
+
+	sid_peek_rid(map->sid, &rid);
+	map->xid.id = rid - ctx->base_rid + ctx->low_id;
+
+	/* apply filters before returning result */
+
+	if ((map->xid.id < ctx->low_id) || (map->xid.id > ctx->high_id)) {
+		DEBUG(5, ("Requested id (%u) out of range (%u - %u). Filtered!\n",
+				map->xid.id, ctx->low_id, ctx->high_id));
+		map->status = ID_UNMAPPED;
+		return NT_STATUS_NONE_MAPPED;
+	}
+
+	/* We **really** should have some way of validating 
+	   the SID exists and is the correct type here.  But 
+	   that is a deficiency in the idmap_rid design. */
+
+	map->status = ID_MAPPED;
+
+	return NT_STATUS_OK;
+}
+
+/**********************************
+ lookup a set of unix ids. 
+**********************************/
+
+static NTSTATUS idmap_rid_unixids_to_sids(struct idmap_domain *dom, struct id_map **ids)
+{
+	struct idmap_rid_context *ridctx;
+	TALLOC_CTX *ctx;
+	NTSTATUS ret;
+	int i;
+
+	/* Initilization my have been deferred because of an error, retry or fail */
+	if ( ! dom->initialized) {
+		ret = idmap_rid_initialize(dom);
+		if ( ! NT_STATUS_IS_OK(ret)) {
+			return ret;
+		}
+	}
+
+	ridctx = talloc_get_type(dom->private_data, struct idmap_rid_context);
+
+	ctx = talloc_new(dom);
+	if ( ! ctx) {
+		DEBUG(0, ("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	for (i = 0; ids[i]; i++) {
+
+		ret = idmap_rid_id_to_sid(ctx, ridctx, ids[i]);
+
+		if (( ! NT_STATUS_IS_OK(ret)) &&
+		    ( ! NT_STATUS_EQUAL(ret, NT_STATUS_NONE_MAPPED))) {
+			/* some fatal error occurred, log it */
+			DEBUG(3, ("Unexpected error resolving an ID (%d)\n", ids[i]->xid.id));
+		}
+	}
+
+	talloc_free(ctx);
+	return NT_STATUS_OK;
+}
+
+/**********************************
+ lookup a set of sids. 
+**********************************/
+
+static NTSTATUS idmap_rid_sids_to_unixids(struct idmap_domain *dom, struct id_map **ids)
+{
+	struct idmap_rid_context *ridctx;
+	TALLOC_CTX *ctx;
+	NTSTATUS ret;
+	int i;
+
+	/* Initilization my have been deferred because of an error, retry or fail */
+	if ( ! dom->initialized) {
+		ret = idmap_rid_initialize(dom);
+		if ( ! NT_STATUS_IS_OK(ret)) {
+			return ret;
+		}
+	}
+
+	ridctx = talloc_get_type(dom->private_data, struct idmap_rid_context);
+
+	ctx = talloc_new(dom);
+	if ( ! ctx) {
+		DEBUG(0, ("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	for (i = 0; ids[i]; i++) {
+
+		ret = idmap_rid_sid_to_id(ctx, ridctx, ids[i]);
+
+		if (( ! NT_STATUS_IS_OK(ret)) &&
+		    ( ! NT_STATUS_EQUAL(ret, NT_STATUS_NONE_MAPPED))) {
+			/* some fatal error occurred, log it */
+			DEBUG(3, ("Unexpected error resolving a SID (%s)\n",
+					sid_string_static(ids[i]->sid)));
+		}
+	}
+
+	talloc_free(ctx);
+	return NT_STATUS_OK;
+}
+
+static NTSTATUS idmap_rid_close(struct idmap_domain *dom)
+{
+	if (dom->private_data) {
+		TALLOC_FREE(dom->private_data);
+	}
+	return NT_STATUS_OK;
+}
+
+static struct idmap_methods rid_methods = {
+	.init = idmap_rid_initialize,
+	.unixids_to_sids = idmap_rid_unixids_to_sids,
+	.sids_to_unixids = idmap_rid_sids_to_unixids,
+	.close_fn = idmap_rid_close
+};
+
+NTSTATUS idmap_rid_init(void)
+{
+	return smb_register_idmap(SMB_IDMAP_INTERFACE_VERSION, "rid", &rid_methods);
+}
+

Copied: branches/samba/upstream/source/nsswitch/idmap_tdb.c (from rev 1928, branches/samba/upstream/source/nsswitch/idmap_tdb.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/idmap_tdb.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/idmap_tdb.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,1255 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   idmap TDB backend
+
+   Copyright (C) Tim Potter 2000
+   Copyright (C) Jim McDonough <jmcd at us.ibm.com> 2003
+   Copyright (C) Jeremy Allison 2006
+   Copyright (C) Simo Sorce 2003-2006
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "winbindd.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_IDMAP
+
+/* High water mark keys */
+#define HWM_GROUP  "GROUP HWM"
+#define HWM_USER   "USER HWM"
+
+static struct idmap_tdb_state {
+
+	/* User and group id pool */
+	uid_t low_uid, high_uid;               /* Range of uids to allocate */
+	gid_t low_gid, high_gid;               /* Range of gids to allocate */
+
+} idmap_tdb_state;
+
+/*****************************************************************************
+ For idmap conversion: convert one record to new format
+ Ancient versions (eg 2.2.3a) of winbindd_idmap.tdb mapped DOMAINNAME/rid
+ instead of the SID.
+*****************************************************************************/
+static int convert_fn(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA data, void *state)
+{
+	struct winbindd_domain *domain;
+	char *p;
+	DOM_SID sid;
+	uint32 rid;
+	fstring keystr;
+	fstring dom_name;
+	TDB_DATA key2;
+	BOOL *failed = (BOOL *)state;
+
+	DEBUG(10,("Converting %s\n", key.dptr));
+
+	p = strchr(key.dptr, '/');
+	if (!p)
+		return 0;
+
+	*p = 0;
+	fstrcpy(dom_name, key.dptr);
+	*p++ = '/';
+
+	domain = find_domain_from_name(dom_name);
+	if (domain == NULL) {
+		/* We must delete the old record. */
+		DEBUG(0,("Unable to find domain %s\n", dom_name ));
+		DEBUG(0,("deleting record %s\n", key.dptr ));
+
+		if (tdb_delete(tdb, key) != 0) {
+			DEBUG(0, ("Unable to delete record %s\n", key.dptr));
+			*failed = True;
+			return -1;
+		}
+
+		return 0;
+	}
+
+	rid = atoi(p);
+
+	sid_copy(&sid, &domain->sid);
+	sid_append_rid(&sid, rid);
+
+	sid_to_string(keystr, &sid);
+	key2.dptr = keystr;
+	key2.dsize = strlen(keystr) + 1;
+
+	if (tdb_store(tdb, key2, data, TDB_INSERT) != 0) {
+		DEBUG(0,("Unable to add record %s\n", key2.dptr ));
+		*failed = True;
+		return -1;
+	}
+
+	if (tdb_store(tdb, data, key2, TDB_REPLACE) != 0) {
+		DEBUG(0,("Unable to update record %s\n", data.dptr ));
+		*failed = True;
+		return -1;
+	}
+
+	if (tdb_delete(tdb, key) != 0) {
+		DEBUG(0,("Unable to delete record %s\n", key.dptr ));
+		*failed = True;
+		return -1;
+	}
+
+	return 0;
+}
+
+/*****************************************************************************
+ Convert the idmap database from an older version.
+*****************************************************************************/
+
+static BOOL idmap_tdb_convert(const char *idmap_name)
+{
+	int32 vers;
+	BOOL bigendianheader;
+	BOOL failed = False;
+	TDB_CONTEXT *idmap_tdb;
+
+	if (!(idmap_tdb = tdb_open_log(idmap_name, 0,
+					TDB_DEFAULT, O_RDWR,
+					0600))) {
+		DEBUG(0, ("Unable to open idmap database\n"));
+		return False;
+	}
+
+	bigendianheader = (tdb_get_flags(idmap_tdb) & TDB_BIGENDIAN) ? True : False;
+
+	vers = tdb_fetch_int32(idmap_tdb, "IDMAP_VERSION");
+
+	if (((vers == -1) && bigendianheader) || (IREV(vers) == IDMAP_VERSION)) {
+		/* Arrggghh ! Bytereversed or old big-endian - make order independent ! */
+		/*
+		 * high and low records were created on a
+		 * big endian machine and will need byte-reversing.
+		 */
+
+		int32 wm;
+
+		wm = tdb_fetch_int32(idmap_tdb, HWM_USER);
+
+		if (wm != -1) {
+			wm = IREV(wm);
+		}  else {
+			wm = idmap_tdb_state.low_uid;
+		}
+
+		if (tdb_store_int32(idmap_tdb, HWM_USER, wm) == -1) {
+			DEBUG(0, ("Unable to byteswap user hwm in idmap database\n"));
+			tdb_close(idmap_tdb);
+			return False;
+		}
+
+		wm = tdb_fetch_int32(idmap_tdb, HWM_GROUP);
+		if (wm != -1) {
+			wm = IREV(wm);
+		} else {
+			wm = idmap_tdb_state.low_gid;
+		}
+
+		if (tdb_store_int32(idmap_tdb, HWM_GROUP, wm) == -1) {
+			DEBUG(0, ("Unable to byteswap group hwm in idmap database\n"));
+			tdb_close(idmap_tdb);
+			return False;
+		}
+	}
+
+	/* the old format stored as DOMAIN/rid - now we store the SID direct */
+	tdb_traverse(idmap_tdb, convert_fn, &failed);
+
+	if (failed) {
+		DEBUG(0, ("Problem during conversion\n"));
+		tdb_close(idmap_tdb);
+		return False;
+	}
+
+	if (tdb_store_int32(idmap_tdb, "IDMAP_VERSION", IDMAP_VERSION) == -1) {
+		DEBUG(0, ("Unable to dtore idmap version in databse\n"));
+		tdb_close(idmap_tdb);
+		return False;
+	}
+
+	tdb_close(idmap_tdb);
+	return True;
+}
+
+/*****************************************************************************
+ Convert the idmap database from an older version if necessary
+*****************************************************************************/
+
+BOOL idmap_tdb_upgrade(TALLOC_CTX *ctx, const char *tdbfile)
+{
+	char *backup_name;
+
+	DEBUG(0, ("Upgrading winbindd_idmap.tdb from an old version\n"));
+
+	backup_name = talloc_asprintf(ctx, "%s.bak", tdbfile);
+	if ( ! backup_name) {
+		DEBUG(0, ("Out of memory!\n"));
+		return False;
+	}
+
+	if (backup_tdb(tdbfile, backup_name, 0) != 0) {
+		DEBUG(0, ("Could not backup idmap database\n"));
+		talloc_free(backup_name);
+		return False;
+	}
+
+	talloc_free(backup_name);
+	return idmap_tdb_convert(tdbfile);
+}
+
+/* WARNING: We can't open a tdb twice inthe same process, for that reason
+ * I'm going to use a hack with open ref counts to open the winbindd_idmap.tdb
+ * only once. We will later decide whether to split the db in multiple files
+ * or come up with a better solution to share them. */
+
+static TDB_CONTEXT *idmap_tdb_common_ctx;
+static int idmap_tdb_open_ref_count = 0;
+
+static NTSTATUS idmap_tdb_open_db(TALLOC_CTX *memctx, TDB_CONTEXT **tdbctx)
+{
+	NTSTATUS ret;
+	TALLOC_CTX *ctx;
+	SMB_STRUCT_STAT stbuf;
+	char *tdbfile = NULL;
+	int32 version;
+	BOOL tdb_is_new = False;
+
+	if (idmap_tdb_open_ref_count) { /* the tdb has already been opened */
+		idmap_tdb_open_ref_count++;
+		*tdbctx = idmap_tdb_common_ctx;
+		return NT_STATUS_OK;
+	}
+
+	/* use our own context here */
+	ctx = talloc_new(memctx);
+	if (!ctx) {
+		DEBUG(0, ("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	/* use the old database if present */
+	tdbfile = talloc_strdup(ctx, lock_path("winbindd_idmap.tdb"));
+	if (!tdbfile) {
+		DEBUG(0, ("Out of memory!\n"));
+		ret = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	if (!file_exist(tdbfile, &stbuf)) {
+		tdb_is_new = True;
+	}
+
+	DEBUG(10,("Opening tdbfile %s\n", tdbfile ));
+
+	/* Open idmap repository */
+	if (!(idmap_tdb_common_ctx = tdb_open_log(tdbfile, 0, TDB_DEFAULT, O_RDWR | O_CREAT, 0644))) {
+		DEBUG(0, ("Unable to open idmap database\n"));
+		ret = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+	if (tdb_is_new) {
+		/* the file didn't existed before opening it, let's
+		 * store idmap version as nobody else yet opened and
+		 * stored it. I do not like this method but didn't
+		 * found a way to understand if an opened tdb have
+		 * been just created or not --- SSS */
+		tdb_store_int32(idmap_tdb_common_ctx, "IDMAP_VERSION", IDMAP_VERSION);
+	}
+
+	/* check against earlier versions */
+	version = tdb_fetch_int32(idmap_tdb_common_ctx, "IDMAP_VERSION");
+	if (version != IDMAP_VERSION) {
+		
+		/* backup_tdb expects the tdb not to be open */
+		tdb_close(idmap_tdb_common_ctx);
+
+		if ( ! idmap_tdb_upgrade(ctx, tdbfile)) {
+		
+			DEBUG(0, ("Unable to open idmap database, it's in an old formati, and upgrade failed!\n"));
+			ret = NT_STATUS_INTERNAL_DB_ERROR;
+			goto done;
+		}
+
+		/* Re-Open idmap repository */
+		if (!(idmap_tdb_common_ctx = tdb_open_log(tdbfile, 0, TDB_DEFAULT, O_RDWR | O_CREAT, 0644))) {
+			DEBUG(0, ("Unable to open idmap database\n"));
+			ret = NT_STATUS_UNSUCCESSFUL;
+			goto done;
+		}
+	}
+
+	*tdbctx = idmap_tdb_common_ctx;
+	idmap_tdb_open_ref_count++;
+	ret = NT_STATUS_OK;
+
+done:
+	talloc_free(ctx);
+	return ret;
+}
+
+ /* NEVER use tdb_close() except for the conversion routines that are guaranteed
+ * to run only when the database is opened the first time, always use this function. */ 
+
+BOOL idmap_tdb_tdb_close(TDB_CONTEXT *tdbctx)
+{
+	if (tdbctx != idmap_tdb_common_ctx) {
+		DEBUG(0, ("ERROR: Invalid tdb context!"));
+		return False;
+	}
+
+	idmap_tdb_open_ref_count--;
+	if (idmap_tdb_open_ref_count) {
+		return True;
+	}
+
+	return tdb_close(idmap_tdb_common_ctx);
+}
+
+/**********************************************************************
+ IDMAP ALLOC TDB BACKEND
+**********************************************************************/
+ 
+static TDB_CONTEXT *idmap_alloc_tdb;
+
+/**********************************
+ Initialise idmap alloc database. 
+**********************************/
+
+static NTSTATUS idmap_tdb_alloc_init( const char *params )
+{
+	NTSTATUS ret;
+	TALLOC_CTX *ctx;
+	const char *range;
+	uid_t low_uid = 0;
+	uid_t high_uid = 0;
+	gid_t low_gid = 0;
+	gid_t high_gid = 0;
+
+	/* use our own context here */
+	ctx = talloc_new(NULL);
+	if (!ctx) {
+		DEBUG(0, ("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	ret = idmap_tdb_open_db(ctx, &idmap_alloc_tdb);
+	if ( ! NT_STATUS_IS_OK(ret)) {
+		talloc_free(ctx);
+		return ret;
+	}
+
+	talloc_free(ctx);
+
+	/* load ranges */
+	idmap_tdb_state.low_uid = 0;
+	idmap_tdb_state.high_uid = 0;
+	idmap_tdb_state.low_gid = 0;
+	idmap_tdb_state.high_gid = 0;
+
+	range = lp_parm_const_string(-1, "idmap alloc config", "range", NULL);
+	if (range && range[0]) {
+		unsigned low_id, high_id;
+
+		if (sscanf(range, "%u - %u", &low_id, &high_id) == 2) {
+			if (low_id < high_id) {
+				idmap_tdb_state.low_gid = idmap_tdb_state.low_uid = low_id;
+				idmap_tdb_state.high_gid = idmap_tdb_state.high_uid = high_id;
+			} else {
+				DEBUG(1, ("ERROR: invalid idmap alloc range [%s]", range));
+			}
+		} else {
+			DEBUG(1, ("ERROR: invalid syntax for idmap alloc config:range [%s]", range));
+		}
+	}
+
+	/* Create high water marks for group and user id */
+	if (lp_idmap_uid(&low_uid, &high_uid)) {
+		idmap_tdb_state.low_uid = low_uid;
+		idmap_tdb_state.high_uid = high_uid;
+	}
+
+	if (lp_idmap_gid(&low_gid, &high_gid)) {
+		idmap_tdb_state.low_gid = low_gid;
+		idmap_tdb_state.high_gid = high_gid;
+	}
+
+	if (idmap_tdb_state.high_uid <= idmap_tdb_state.low_uid) {
+		DEBUG(1, ("idmap uid range missing or invalid\n"));
+		DEBUGADD(1, ("idmap will be unable to map foreign SIDs\n"));
+		return NT_STATUS_UNSUCCESSFUL;
+	} else {
+		uint32 low_id;
+
+		if (((low_id = tdb_fetch_int32(idmap_alloc_tdb, HWM_USER)) == -1) ||
+		    (low_id < idmap_tdb_state.low_uid)) {
+			if (tdb_store_int32(idmap_alloc_tdb, HWM_USER, idmap_tdb_state.low_uid) == -1) {
+				DEBUG(0, ("Unable to initialise user hwm in idmap database\n"));
+				return NT_STATUS_INTERNAL_DB_ERROR;
+			}
+		}
+	}
+
+	if (idmap_tdb_state.high_gid <= idmap_tdb_state.low_gid) {
+		DEBUG(1, ("idmap gid range missing or invalid\n"));
+		DEBUGADD(1, ("idmap will be unable to map foreign SIDs\n"));
+		return NT_STATUS_UNSUCCESSFUL;
+	} else {
+		uint32 low_id;
+
+		if (((low_id = tdb_fetch_int32(idmap_alloc_tdb, HWM_GROUP)) == -1) ||
+		    (low_id < idmap_tdb_state.low_gid)) {
+			if (tdb_store_int32(idmap_alloc_tdb, HWM_GROUP, idmap_tdb_state.low_gid) == -1) {
+				DEBUG(0, ("Unable to initialise group hwm in idmap database\n"));
+				return NT_STATUS_INTERNAL_DB_ERROR;
+			}
+		}
+	}
+
+	return NT_STATUS_OK;
+}
+
+/**********************************
+ Allocate a new id. 
+**********************************/
+
+static NTSTATUS idmap_tdb_allocate_id(struct unixid *xid)
+{
+	BOOL ret;
+	const char *hwmkey;
+	const char *hwmtype;
+	uint32_t high_hwm;
+	uint32_t hwm;
+
+	/* Get current high water mark */
+	switch (xid->type) {
+
+	case ID_TYPE_UID:
+		hwmkey = HWM_USER;
+		hwmtype = "UID";
+		high_hwm = idmap_tdb_state.high_uid;
+		break;
+
+	case ID_TYPE_GID:
+		hwmkey = HWM_GROUP;
+		hwmtype = "GID";
+		high_hwm = idmap_tdb_state.high_gid;
+		break;
+
+	default:
+		DEBUG(2, ("Invalid ID type (0x%x)\n", xid->type));
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	if ((hwm = tdb_fetch_int32(idmap_alloc_tdb, hwmkey)) == -1) {
+		return NT_STATUS_INTERNAL_DB_ERROR;
+	}
+
+	/* check it is in the range */
+	if (hwm > high_hwm) {
+		DEBUG(1, ("Fatal Error: %s range full!! (max: %lu)\n", 
+			  hwmtype, (unsigned long)high_hwm));
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	/* fetch a new id and increment it */
+	ret = tdb_change_uint32_atomic(idmap_alloc_tdb, hwmkey, &hwm, 1);
+	if (!ret) {
+		DEBUG(1, ("Fatal error while fetching a new %s value\n!", hwmtype));
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	/* recheck it is in the range */
+	if (hwm > high_hwm) {
+		DEBUG(1, ("Fatal Error: %s range full!! (max: %lu)\n", 
+			  hwmtype, (unsigned long)high_hwm));
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+	
+	xid->id = hwm;
+	DEBUG(10,("New %s = %d\n", hwmtype, hwm));
+
+	return NT_STATUS_OK;
+}
+
+/**********************************
+ Get current highest id. 
+**********************************/
+
+static NTSTATUS idmap_tdb_get_hwm(struct unixid *xid)
+{
+	const char *hwmkey;
+	const char *hwmtype;
+	uint32_t hwm;
+	uint32_t high_hwm;
+
+	/* Get current high water mark */
+	switch (xid->type) {
+
+	case ID_TYPE_UID:
+		hwmkey = HWM_USER;
+		hwmtype = "UID";
+		high_hwm = idmap_tdb_state.high_uid;
+		break;
+
+	case ID_TYPE_GID:
+		hwmkey = HWM_GROUP;
+		hwmtype = "GID";
+		high_hwm = idmap_tdb_state.high_gid;
+		break;
+
+	default:
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	if ((hwm = tdb_fetch_int32(idmap_alloc_tdb, hwmkey)) == -1) {
+		return NT_STATUS_INTERNAL_DB_ERROR;
+	}
+
+	xid->id = hwm;
+
+	/* Warn if it is out of range */
+	if (hwm >= high_hwm) {
+		DEBUG(0, ("Warning: %s range full!! (max: %lu)\n", 
+			  hwmtype, (unsigned long)high_hwm));
+	}
+
+	return NT_STATUS_OK;
+}
+
+/**********************************
+ Set high id. 
+**********************************/
+
+static NTSTATUS idmap_tdb_set_hwm(struct unixid *xid)
+{
+	const char *hwmkey;
+	const char *hwmtype;
+	uint32_t hwm;
+	uint32_t high_hwm;
+
+	/* Get current high water mark */
+	switch (xid->type) {
+
+	case ID_TYPE_UID:
+		hwmkey = HWM_USER;
+		hwmtype = "UID";
+		high_hwm = idmap_tdb_state.high_uid;
+		break;
+
+	case ID_TYPE_GID:
+		hwmkey = HWM_GROUP;
+		hwmtype = "GID";
+		high_hwm = idmap_tdb_state.high_gid;
+		break;
+
+	default:
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	hwm = xid->id;
+
+	if ((hwm = tdb_store_int32(idmap_alloc_tdb, hwmkey, hwm)) == -1) {
+		return NT_STATUS_INTERNAL_DB_ERROR;
+	}
+
+	/* Warn if it is out of range */
+	if (hwm >= high_hwm) {
+		DEBUG(0, ("Warning: %s range full!! (max: %lu)\n", 
+			  hwmtype, (unsigned long)high_hwm));
+	}
+
+	return NT_STATUS_OK;
+}
+
+/**********************************
+ Close the alloc tdb 
+**********************************/
+
+static NTSTATUS idmap_tdb_alloc_close(void)
+{
+	if (idmap_alloc_tdb) {
+		if (idmap_tdb_tdb_close(idmap_alloc_tdb) == 0) {
+			return NT_STATUS_OK;
+		} else {
+			return NT_STATUS_UNSUCCESSFUL;
+		}
+	}
+	return NT_STATUS_OK;
+}
+
+/**********************************************************************
+ IDMAP MAPPING TDB BACKEND
+**********************************************************************/
+ 
+struct idmap_tdb_context {
+	TDB_CONTEXT *tdb;
+	uint32_t filter_low_id;
+	uint32_t filter_high_id;
+};
+
+/*****************************
+ Initialise idmap database. 
+*****************************/
+
+static NTSTATUS idmap_tdb_db_init(struct idmap_domain *dom)
+{
+	NTSTATUS ret;
+	struct idmap_tdb_context *ctx;
+	char *config_option = NULL;
+	const char *range;
+
+	ctx = talloc(dom, struct idmap_tdb_context);
+	if ( ! ctx) {
+		DEBUG(0, ("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	config_option = talloc_asprintf(ctx, "idmap config %s", dom->name);
+	if ( ! config_option) {
+		DEBUG(0, ("Out of memory!\n"));
+		ret = NT_STATUS_NO_MEMORY;
+		goto failed;
+	}
+
+	ret = idmap_tdb_open_db(ctx, &ctx->tdb);
+	if ( ! NT_STATUS_IS_OK(ret)) {
+		goto failed;
+	}
+
+	range = lp_parm_const_string(-1, config_option, "range", NULL);
+	if (( ! range) ||
+	    (sscanf(range, "%u - %u", &ctx->filter_low_id, &ctx->filter_high_id) != 2) ||
+	    (ctx->filter_low_id > ctx->filter_high_id)) {
+		ctx->filter_low_id = 0;
+		ctx->filter_high_id = 0;
+	}
+
+	dom->private_data = ctx;
+	dom->initialized = True;
+
+	talloc_free(config_option);
+	return NT_STATUS_OK;
+
+failed:
+	talloc_free(ctx);
+	return ret;
+}
+
+/**********************************
+ Single id to sid lookup function. 
+**********************************/
+
+static NTSTATUS idmap_tdb_id_to_sid(struct idmap_tdb_context *ctx, struct id_map *map)
+{
+	NTSTATUS ret;
+	TDB_DATA key, data;
+
+	if (!ctx || !map) {
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	/* apply filters before checking */
+	if ((ctx->filter_low_id && (map->xid.id < ctx->filter_low_id)) ||
+	    (ctx->filter_high_id && (map->xid.id > ctx->filter_high_id))) {
+		DEBUG(5, ("Requested id (%u) out of range (%u - %u). Filtered!\n",
+				map->xid.id, ctx->filter_low_id, ctx->filter_high_id));
+		return NT_STATUS_NONE_MAPPED;
+	}
+
+	switch (map->xid.type) {
+
+	case ID_TYPE_UID:
+		key.dptr = talloc_asprintf(ctx, "UID %lu", (unsigned long)map->xid.id);
+		break;
+		
+	case ID_TYPE_GID:
+		key.dptr = talloc_asprintf(ctx, "GID %lu", (unsigned long)map->xid.id);
+		break;
+
+	default:
+		DEBUG(2, ("INVALID unix ID type: 0x02%x\n", map->xid.type));
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	/* final SAFE_FREE safe */
+	data.dptr = NULL;
+
+	if (key.dptr == NULL) {
+		DEBUG(0, ("Out of memory!\n"));
+		ret = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	key.dsize = strlen(key.dptr) + 1;
+
+	DEBUG(10,("Fetching record %s\n", key.dptr));
+
+	/* Check if the mapping exists */
+	data = tdb_fetch(ctx->tdb, key);
+
+	if (!data.dptr) {
+		DEBUG(10,("Record %s not found\n", key.dptr));
+		ret = NT_STATUS_NONE_MAPPED;
+		goto done;
+	}
+		
+	if (!string_to_sid(map->sid, data.dptr)) {
+		DEBUG(10,("INVALID SID (%s) in record %s\n",
+				data.dptr, key.dptr));
+		ret = NT_STATUS_INTERNAL_DB_ERROR;
+		goto done;
+	}
+
+	DEBUG(10,("Found record %s -> %s\n", key.dptr, data.dptr));
+	ret = NT_STATUS_OK;
+
+done:
+	SAFE_FREE(data.dptr);
+	talloc_free(key.dptr);
+	return ret;
+}
+
+/**********************************
+ Single sid to id lookup function. 
+**********************************/
+
+static NTSTATUS idmap_tdb_sid_to_id(struct idmap_tdb_context *ctx, struct id_map *map)
+{
+	NTSTATUS ret;
+	TDB_DATA key, data;
+	unsigned long rec_id = 0;
+
+	if ((key.dptr = talloc_asprintf(ctx, "%s", sid_string_static(map->sid))) == NULL) {
+		DEBUG(0, ("Out of memory!\n"));
+		ret = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	key.dsize = strlen(key.dptr) + 1;
+
+	DEBUG(10,("Fetching record %s\n", key.dptr));
+
+	/* Check if sid is present in database */
+	data = tdb_fetch(ctx->tdb, key);
+	if (!data.dptr) {
+		DEBUG(10,("Record %s not found\n", key.dptr));
+		ret = NT_STATUS_NONE_MAPPED;
+		goto done;
+	}
+
+	/* What type of record is this ? */
+	if (sscanf(data.dptr, "UID %lu", &rec_id) == 1) { /* Try a UID record. */
+		map->xid.id = rec_id;
+		map->xid.type = ID_TYPE_UID;
+		DEBUG(10,("Found uid record %s -> %s \n", key.dptr, data.dptr ));
+		ret = NT_STATUS_OK;
+
+	} else if (sscanf(data.dptr, "GID %lu", &rec_id) == 1) { /* Try a GID record. */
+		map->xid.id = rec_id;
+		map->xid.type = ID_TYPE_GID;
+		DEBUG(10,("Found gid record %s -> %s \n", key.dptr, data.dptr ));
+		ret = NT_STATUS_OK;
+
+	} else { /* Unknown record type ! */
+		DEBUG(2, ("Found INVALID record %s -> %s\n", key.dptr, data.dptr));
+		ret = NT_STATUS_INTERNAL_DB_ERROR;
+	}
+	
+	SAFE_FREE(data.dptr);
+
+	/* apply filters before returning result */
+	if ((ctx->filter_low_id && (map->xid.id < ctx->filter_low_id)) ||
+	    (ctx->filter_high_id && (map->xid.id > ctx->filter_high_id))) {
+		DEBUG(5, ("Requested id (%u) out of range (%u - %u). Filtered!\n",
+				map->xid.id, ctx->filter_low_id, ctx->filter_high_id));
+		ret = NT_STATUS_NONE_MAPPED;
+	}
+
+done:
+	talloc_free(key.dptr);
+	return ret;
+}
+
+/**********************************
+ lookup a set of unix ids. 
+**********************************/
+
+static NTSTATUS idmap_tdb_unixids_to_sids(struct idmap_domain *dom, struct id_map **ids)
+{
+	struct idmap_tdb_context *ctx;
+	NTSTATUS ret;
+	int i;
+
+	/* make sure we initialized */
+	if ( ! dom->initialized) {
+		ret = idmap_tdb_db_init(dom);
+		if ( ! NT_STATUS_IS_OK(ret)) {
+			return ret;
+		}
+	}
+
+	ctx = talloc_get_type(dom->private_data, struct idmap_tdb_context);
+
+	for (i = 0; ids[i]; i++) {
+		ret = idmap_tdb_id_to_sid(ctx, ids[i]);
+		if ( ! NT_STATUS_IS_OK(ret)) {
+
+			/* if it is just a failed mapping continue */
+			if (NT_STATUS_EQUAL(ret, NT_STATUS_NONE_MAPPED)) {
+
+				/* make sure it is marked as unmapped */
+				ids[i]->status = ID_UNMAPPED;
+				continue;
+			}
+			
+			/* some fatal error occurred, return immediately */
+			goto done;
+		}
+
+		/* all ok, id is mapped */
+		ids[i]->status = ID_MAPPED;
+	}
+
+	ret = NT_STATUS_OK;
+
+done:
+	return ret;
+}
+
+/**********************************
+ lookup a set of sids. 
+**********************************/
+
+static NTSTATUS idmap_tdb_sids_to_unixids(struct idmap_domain *dom, struct id_map **ids)
+{
+	struct idmap_tdb_context *ctx;
+	NTSTATUS ret;
+	int i;
+
+	/* make sure we initialized */
+	if ( ! dom->initialized) {
+		ret = idmap_tdb_db_init(dom);
+		if ( ! NT_STATUS_IS_OK(ret)) {
+			return ret;
+		}
+	}
+
+	ctx = talloc_get_type(dom->private_data, struct idmap_tdb_context);
+
+	for (i = 0; ids[i]; i++) {
+		ret = idmap_tdb_sid_to_id(ctx, ids[i]);
+		if ( ! NT_STATUS_IS_OK(ret)) {
+
+			/* if it is just a failed mapping continue */
+			if (NT_STATUS_EQUAL(ret, NT_STATUS_NONE_MAPPED)) {
+
+				/* make sure it is marked as unmapped */
+				ids[i]->status = ID_UNMAPPED;
+				continue;
+			}
+			
+			/* some fatal error occurred, return immediately */
+			goto done;
+		}
+
+		/* all ok, id is mapped */
+		ids[i]->status = ID_MAPPED;
+	}
+
+	ret = NT_STATUS_OK;
+
+done:
+	return ret;
+}
+
+/**********************************
+ set a mapping. 
+**********************************/
+
+static NTSTATUS idmap_tdb_set_mapping(struct idmap_domain *dom, const struct id_map *map)
+{
+	struct idmap_tdb_context *ctx;
+	NTSTATUS ret;
+	TDB_DATA ksid, kid, data;
+
+	/* make sure we initialized */
+	if ( ! dom->initialized) {
+		ret = idmap_tdb_db_init(dom);
+		if ( ! NT_STATUS_IS_OK(ret)) {
+			return ret;
+		}
+	}
+
+	if (!map || !map->sid) {
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	ksid.dptr = kid.dptr = data.dptr = NULL;
+
+	/* TODO: should we filter a set_mapping using low/high filters ? */
+	
+	ctx = talloc_get_type(dom->private_data, struct idmap_tdb_context);
+
+	switch (map->xid.type) {
+
+	case ID_TYPE_UID:
+		kid.dptr = talloc_asprintf(ctx, "UID %lu", (unsigned long)map->xid.id);
+		break;
+		
+	case ID_TYPE_GID:
+		kid.dptr = talloc_asprintf(ctx, "GID %lu", (unsigned long)map->xid.id);
+		break;
+
+	default:
+		DEBUG(2, ("INVALID unix ID type: 0x02%x\n", map->xid.type));
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	if (kid.dptr == NULL) {
+		DEBUG(0, ("ERROR: Out of memory!\n"));
+		ret = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+	kid.dsize = strlen(kid.dptr) + 1;
+
+	if ((ksid.dptr = talloc_asprintf(ctx, "%s", sid_string_static(map->sid))) == NULL) {
+		DEBUG(0, ("Out of memory!\n"));
+		ret = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+	ksid.dsize = strlen(ksid.dptr) + 1;
+
+	DEBUG(10, ("Storing %s <-> %s map\n", ksid.dptr, kid.dptr));
+
+	/* *DELETE* previous mappings if any.
+	 * This is done both SID and [U|G]ID passed in */
+	
+	/* Lock the record for this SID. */
+	if (tdb_chainlock(ctx->tdb, ksid) != 0) {
+		DEBUG(10,("Failed to lock record %s. Error %s\n",
+				ksid.dptr, tdb_errorstr(ctx->tdb) ));
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	data = tdb_fetch(ctx->tdb, ksid);
+	if (data.dptr) {
+		DEBUG(10, ("Deleting existing mapping %s <-> %s\n", data.dptr, ksid.dptr ));
+		tdb_delete(ctx->tdb, data);
+		tdb_delete(ctx->tdb, ksid);
+		SAFE_FREE(data.dptr);
+	}
+
+	data = tdb_fetch(ctx->tdb, kid);
+	if (data.dptr) {
+		DEBUG(10,("Deleting existing mapping %s <-> %s\n", data.dptr, kid.dptr ));
+		tdb_delete(ctx->tdb, data);
+		tdb_delete(ctx->tdb, kid);
+		SAFE_FREE(data.dptr);
+	}
+
+	if (tdb_store(ctx->tdb, ksid, kid, TDB_INSERT) == -1) {
+		DEBUG(0, ("Error storing SID -> ID: %s\n", tdb_errorstr(ctx->tdb)));
+		tdb_chainunlock(ctx->tdb, ksid);
+		ret = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+	if (tdb_store(ctx->tdb, kid, ksid, TDB_INSERT) == -1) {
+		DEBUG(0, ("Error stroing ID -> SID: %s\n", tdb_errorstr(ctx->tdb)));
+		/* try to remove the previous stored SID -> ID map */
+		tdb_delete(ctx->tdb, ksid);
+		tdb_chainunlock(ctx->tdb, ksid);
+		ret = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+	tdb_chainunlock(ctx->tdb, ksid);
+	DEBUG(10,("Stored %s <-> %s\n", ksid.dptr, kid.dptr));
+	ret = NT_STATUS_OK;
+
+done:
+	talloc_free(ksid.dptr);
+	talloc_free(kid.dptr);
+	SAFE_FREE(data.dptr);
+	return ret;
+}
+
+/**********************************
+ remove a mapping. 
+**********************************/
+
+static NTSTATUS idmap_tdb_remove_mapping(struct idmap_domain *dom, const struct id_map *map)
+{
+	struct idmap_tdb_context *ctx;
+	NTSTATUS ret;
+	TDB_DATA ksid, kid, data;
+
+	/* make sure we initialized */
+	if ( ! dom->initialized) {
+		ret = idmap_tdb_db_init(dom);
+		if ( ! NT_STATUS_IS_OK(ret)) {
+			return ret;
+		}
+	}
+
+	if (!map || !map->sid) {
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	ksid.dptr = kid.dptr = data.dptr = NULL;
+
+	/* TODO: should we filter a remove_mapping using low/high filters ? */
+	
+	ctx = talloc_get_type(dom->private_data, struct idmap_tdb_context);
+
+	switch (map->xid.type) {
+
+	case ID_TYPE_UID:
+		kid.dptr = talloc_asprintf(ctx, "UID %lu", (unsigned long)map->xid.id);
+		break;
+		
+	case ID_TYPE_GID:
+		kid.dptr = talloc_asprintf(ctx, "GID %lu", (unsigned long)map->xid.id);
+		break;
+
+	default:
+		DEBUG(2, ("INVALID unix ID type: 0x02%x\n", map->xid.type));
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	if (kid.dptr == NULL) {
+		DEBUG(0, ("ERROR: Out of memory!\n"));
+		ret = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+	kid.dsize = strlen(kid.dptr) + 1;
+
+	if ((ksid.dptr = talloc_asprintf(ctx, "%s", sid_string_static(map->sid))) == NULL) {
+		DEBUG(0, ("Out of memory!\n"));
+		ret = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+	ksid.dsize = strlen(ksid.dptr) + 1;
+
+	DEBUG(10, ("Checking %s <-> %s map\n", ksid.dptr, kid.dptr));
+
+	/* Lock the record for this SID. */
+	if (tdb_chainlock(ctx->tdb, ksid) != 0) {
+		DEBUG(10,("Failed to lock record %s. Error %s\n",
+				ksid.dptr, tdb_errorstr(ctx->tdb) ));
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	/* Check if sid is present in database */
+	data = tdb_fetch(ctx->tdb, ksid);
+	if (!data.dptr) {
+		DEBUG(10,("Record %s not found\n", ksid.dptr));
+		tdb_chainunlock(ctx->tdb, ksid);
+		ret = NT_STATUS_NONE_MAPPED;
+		goto done;
+	}
+
+	/* Check if sid is mapped to the specified ID */
+	if ((data.dsize != kid.dsize) ||
+	    (memcmp(data.dptr, kid.dptr, data.dsize) != 0)) {
+		DEBUG(10,("Specified SID does not map to specified ID\n"));
+		DEBUGADD(10,("Actual mapping is %s -> %s\n", ksid.dptr, data.dptr));
+		tdb_chainunlock(ctx->tdb, ksid);
+		ret = NT_STATUS_NONE_MAPPED;
+		goto done;
+	}
+	
+	DEBUG(10, ("Removing %s <-> %s map\n", ksid.dptr, kid.dptr));
+
+	/* Delete previous mappings. */
+	
+	DEBUG(10, ("Deleting existing mapping %s -> %s\n", ksid.dptr, kid.dptr ));
+	tdb_delete(ctx->tdb, ksid);
+
+	DEBUG(10,("Deleting existing mapping %s -> %s\n", kid.dptr, ksid.dptr ));
+	tdb_delete(ctx->tdb, kid);
+
+	tdb_chainunlock(ctx->tdb, ksid);
+	ret = NT_STATUS_OK;
+
+done:
+	talloc_free(ksid.dptr);
+	talloc_free(kid.dptr);
+	SAFE_FREE(data.dptr);
+	return ret;
+}
+
+/**********************************
+ Close the idmap tdb instance
+**********************************/
+
+static NTSTATUS idmap_tdb_close(struct idmap_domain *dom)
+{
+	struct idmap_tdb_context *ctx;
+
+	if (dom->private_data) {
+		ctx = talloc_get_type(dom->private_data, struct idmap_tdb_context);
+
+		if (idmap_tdb_tdb_close(ctx->tdb) == 0) {
+			return NT_STATUS_OK;
+		} else {
+			return NT_STATUS_UNSUCCESSFUL;
+		}
+	}
+	return NT_STATUS_OK;
+}
+
+struct dump_data {
+	TALLOC_CTX *memctx;
+	struct id_map **maps;
+	int *num_maps;
+	NTSTATUS ret;
+};
+
+static int idmap_tdb_dump_one_entry(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA value, void *pdata)
+{
+	struct dump_data *data = talloc_get_type(pdata, struct dump_data);
+	struct id_map *maps;
+	int num_maps = *data->num_maps;
+
+	/* ignore any record but the ones with a SID as key */
+	if (strncmp(key.dptr, "S-", 2) == 0) {
+
+		maps = talloc_realloc(NULL, *data->maps, struct id_map, num_maps+1);
+		if ( ! maps) {
+			DEBUG(0, ("Out of memory!\n"));
+			data->ret = NT_STATUS_NO_MEMORY;
+			return -1;
+		}
+       		*data->maps = maps;
+		maps[num_maps].sid = talloc(maps, DOM_SID);
+		if ( ! maps[num_maps].sid) {
+			DEBUG(0, ("Out of memory!\n"));
+			data->ret = NT_STATUS_NO_MEMORY;
+			return -1;
+		}
+
+		if (!string_to_sid(maps[num_maps].sid, key.dptr)) {
+			DEBUG(10,("INVALID record %s\n", key.dptr));
+			/* continue even with errors */
+			return 0;
+		}
+
+		/* Try a UID record. */
+		if (sscanf(value.dptr, "UID %u", &(maps[num_maps].xid.id)) == 1) {
+			maps[num_maps].xid.type = ID_TYPE_UID;
+			maps[num_maps].status = ID_MAPPED;
+			*data->num_maps = num_maps + 1;
+
+		/* Try a GID record. */
+		} else
+		if (sscanf(value.dptr, "GID %u", &(maps[num_maps].xid.id)) == 1) {
+			maps[num_maps].xid.type = ID_TYPE_GID;
+			maps[num_maps].status = ID_MAPPED;
+			*data->num_maps = num_maps + 1;
+
+		/* Unknown record type ! */
+		} else {
+			maps[num_maps].status = ID_UNKNOWN;
+			DEBUG(2, ("Found INVALID record %s -> %s\n", key.dptr, value.dptr));
+			/* do not increment num_maps */
+		}
+	}
+
+	return 0;
+}
+
+/**********************************
+ Dump all mappings out
+**********************************/
+
+static NTSTATUS idmap_tdb_dump_data(struct idmap_domain *dom, struct id_map **maps, int *num_maps)
+{
+	struct idmap_tdb_context *ctx;
+	struct dump_data *data;
+	NTSTATUS ret = NT_STATUS_OK;
+
+	/* make sure we initialized */
+	if ( ! dom->initialized) {
+		ret = idmap_tdb_db_init(dom);
+		if ( ! NT_STATUS_IS_OK(ret)) {
+			return ret;
+		}
+	}
+
+	ctx = talloc_get_type(dom->private_data, struct idmap_tdb_context);
+
+	data = TALLOC_ZERO_P(ctx, struct dump_data);
+	if ( ! data) {
+		DEBUG(0, ("Out of memory!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+	data->maps = maps;
+	data->num_maps = num_maps;
+	data->ret = NT_STATUS_OK;
+
+	tdb_traverse(ctx->tdb, idmap_tdb_dump_one_entry, data);
+
+	if ( ! NT_STATUS_IS_OK(data->ret)) {
+		ret = data->ret;
+	}
+
+	talloc_free(data);
+	return ret;
+}
+
+static struct idmap_methods db_methods = {
+
+	.init = idmap_tdb_db_init,
+	.unixids_to_sids = idmap_tdb_unixids_to_sids,
+	.sids_to_unixids = idmap_tdb_sids_to_unixids,
+	.set_mapping = idmap_tdb_set_mapping,
+	.remove_mapping = idmap_tdb_remove_mapping,
+	.dump_data = idmap_tdb_dump_data,
+	.close_fn = idmap_tdb_close
+};
+
+static struct idmap_alloc_methods db_alloc_methods = {
+
+	.init = idmap_tdb_alloc_init,
+	.allocate_id = idmap_tdb_allocate_id,
+	.get_id_hwm = idmap_tdb_get_hwm,
+	.set_id_hwm = idmap_tdb_set_hwm,
+	.close_fn = idmap_tdb_alloc_close
+};
+
+NTSTATUS idmap_alloc_tdb_init(void)
+{
+	return smb_register_idmap_alloc(SMB_IDMAP_INTERFACE_VERSION, "tdb", &db_alloc_methods);
+}
+
+NTSTATUS idmap_tdb_init(void)
+{
+	NTSTATUS ret;
+
+	/* FIXME: bad hack to actually register also the alloc_tdb module without changining configure.in */
+	ret = idmap_alloc_tdb_init();
+	if (! NT_STATUS_IS_OK(ret)) {
+		return ret;
+	}
+	return smb_register_idmap(SMB_IDMAP_INTERFACE_VERSION, "tdb", &db_methods);
+}

Copied: branches/samba/upstream/source/nsswitch/idmap_util.c (from rev 1928, branches/samba/upstream/source/nsswitch/idmap_util.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/idmap_util.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/idmap_util.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,172 @@
+/* 
+   Unix SMB/CIFS implementation.
+   ID Mapping
+   Copyright (C) Simo Sorce 2003
+   Copyright (C) Jeremy Allison 2006
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.*/
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_IDMAP
+
+/*****************************************************************
+ Returns the SID mapped to the given UID.
+ If mapping is not possible returns an error.
+*****************************************************************/  
+
+NTSTATUS idmap_uid_to_sid(DOM_SID *sid, uid_t uid)
+{
+	NTSTATUS ret;
+	struct id_map map;
+	struct id_map *maps[2];
+
+	DEBUG(10,("uid = [%lu]\n", (unsigned long)uid));
+
+	map.sid = sid;
+	map.xid.type = ID_TYPE_UID;
+	map.xid.id = uid;
+
+	maps[0] = &map;
+	maps[1] = NULL;
+	
+	ret = idmap_unixids_to_sids(maps);
+	if ( ! NT_STATUS_IS_OK(ret)) {
+		DEBUG(10, ("error mapping uid [%lu]\n", (unsigned long)uid));
+		return ret;
+	}
+
+	if (map.status != ID_MAPPED) {
+		DEBUG(10, ("uid [%lu] not mapped\n", (unsigned long)uid));
+		return NT_STATUS_NONE_MAPPED;
+	}
+
+	return NT_STATUS_OK;
+}
+
+/*****************************************************************
+ Returns SID mapped to the given GID.
+ If mapping is not possible returns an error.
+*****************************************************************/  
+
+NTSTATUS idmap_gid_to_sid(DOM_SID *sid, gid_t gid)
+{
+	NTSTATUS ret;
+	struct id_map map;
+	struct id_map *maps[2];
+
+	DEBUG(10,("gid = [%lu]\n", (unsigned long)gid));
+
+	map.sid = sid;
+	map.xid.type = ID_TYPE_GID;
+	map.xid.id = gid;
+
+	maps[0] = &map;
+	maps[1] = NULL;
+	
+	ret = idmap_unixids_to_sids(maps);
+	if ( ! NT_STATUS_IS_OK(ret)) {
+		DEBUG(10, ("error mapping gid [%lu]\n", (unsigned long)gid));
+		return ret;
+	}
+
+	if (map.status != ID_MAPPED) {
+		DEBUG(10, ("gid [%lu] not mapped\n", (unsigned long)gid));
+		return NT_STATUS_NONE_MAPPED;
+	}
+
+	return NT_STATUS_OK;
+}
+
+/*****************************************************************
+ Returns the UID mapped to the given SID.
+ If mapping is not possible or SID maps to a GID returns an error.
+*****************************************************************/  
+
+NTSTATUS idmap_sid_to_uid(DOM_SID *sid, uid_t *uid)
+{
+	NTSTATUS ret;
+	struct id_map map;
+	struct id_map *maps[2];
+
+	DEBUG(10,("idmap_sid_to_uid: sid = [%s]\n", sid_string_static(sid)));
+
+	map.sid = sid;
+	map.xid.type = ID_TYPE_UID;	
+	
+	maps[0] = &map;
+	maps[1] = NULL;
+	
+	ret = idmap_sids_to_unixids(maps);
+	if ( ! NT_STATUS_IS_OK(ret)) {
+		DEBUG(10, ("error mapping sid [%s] to uid\n", 
+			   sid_string_static(sid)));
+		return ret;
+	}
+
+	if ((map.status != ID_MAPPED) || (map.xid.type != ID_TYPE_UID)) {
+		DEBUG(10, ("sid [%s] not mapped to an uid [%u,%u,%u]\n", 
+			   sid_string_static(sid), 
+			   map.status, 
+			   map.xid.type, 
+			   map.xid.id));
+		return NT_STATUS_NONE_MAPPED;
+	}
+
+	*uid = map.xid.id;
+
+	return NT_STATUS_OK;
+}
+
+/*****************************************************************
+ Returns the GID mapped to the given SID.
+ If mapping is not possible or SID maps to a UID returns an error.
+*****************************************************************/  
+
+NTSTATUS idmap_sid_to_gid(DOM_SID *sid, gid_t *gid)
+{
+	NTSTATUS ret;
+	struct id_map map;
+	struct id_map *maps[2];
+
+	DEBUG(10,("idmap_sid_to_gid: sid = [%s]\n", sid_string_static(sid)));
+
+	map.sid = sid;
+	map.xid.type = ID_TYPE_GID;
+	
+	maps[0] = &map;
+	maps[1] = NULL;
+	
+	ret = idmap_sids_to_unixids(maps);
+	if ( ! NT_STATUS_IS_OK(ret)) {
+		DEBUG(10, ("error mapping sid [%s] to gid\n", 
+			   sid_string_static(sid)));
+		return ret;
+	}
+
+	if ((map.status != ID_MAPPED) || (map.xid.type != ID_TYPE_GID)) {
+		DEBUG(10, ("sid [%s] not mapped to an gid [%u,%u,%u]\n", 
+			   sid_string_static(sid), 
+			   map.status, 
+			   map.xid.type, 
+			   map.xid.id));
+		return NT_STATUS_NONE_MAPPED;
+	}
+
+	*gid = map.xid.id;
+
+	return NT_STATUS_OK;
+}

Copied: branches/samba/upstream/source/nsswitch/nss_info.c (from rev 1928, branches/samba/upstream/source/nsswitch/nss_info.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/nss_info.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/nss_info.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,298 @@
+/* 
+   Unix SMB/CIFS implementation.
+   Idmap NSS headers
+
+   Copyright (C) Gerald Carter             2006
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public
+   License as published by the Free Software Foundation; either
+   version 2 of the License, or (at your option) any later version.
+   
+   This library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+   
+   You should have received a copy of the GNU Library General Public
+   License along with this library; if not, write to the
+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA  02111-1307, USA.   
+*/
+
+#include "includes.h"
+#include "nss_info.h"
+
+static struct nss_function_entry *backends = NULL;
+static struct nss_domain_entry *nss_domain_list = NULL;
+
+/**********************************************************************
+ Get idmap nss methods.
+**********************************************************************/
+
+static struct nss_function_entry *nss_get_backend(const char *name )
+{
+	struct nss_function_entry *entry = backends;
+
+	for(entry = backends; entry; entry = entry->next) {
+		if ( strequal(entry->name, name) )
+			return entry;
+	}
+
+	return NULL;
+}
+
+/*********************************************************************
+ Allow a module to register itself as a backend.
+**********************************************************************/
+
+ NTSTATUS smb_register_idmap_nss(int version, const char *name, struct nss_info_methods *methods)
+{
+	struct nss_function_entry *entry;
+
+ 	if ((version != SMB_NSS_INFO_INTERFACE_VERSION)) {
+		DEBUG(0, ("smb_register_idmap_nss: Failed to register idmap_nss module.\n"
+		          "The module was compiled against SMB_NSS_INFO_INTERFACE_VERSION %d,\n"
+		          "current SMB_NSS_INFO_INTERFACE_VERSION is %d.\n"
+		          "Please recompile against the current version of samba!\n",  
+			  version, SMB_NSS_INFO_INTERFACE_VERSION));
+		return NT_STATUS_OBJECT_TYPE_MISMATCH;
+  	}
+
+	if (!name || !name[0] || !methods) {
+		DEBUG(0,("smb_register_idmap_nss: called with NULL pointer or empty name!\n"));
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	if ( nss_get_backend(name) ) {
+		DEBUG(0,("smb_register_idmap_nss: idmap module %s "
+			 "already registered!\n", name));
+		return NT_STATUS_OBJECT_NAME_COLLISION;
+	}
+
+	entry = SMB_XMALLOC_P(struct nss_function_entry);
+	entry->name = smb_xstrdup(name);
+	entry->methods = methods;
+
+	DLIST_ADD(backends, entry);
+	DEBUG(5, ("smb_register_idmap_nss: Successfully added idmap "
+		  "nss backend '%s'\n", name));
+
+	return NT_STATUS_OK;
+}
+
+/********************************************************************
+ *******************************************************************/
+
+static BOOL parse_nss_parm( const char *config, char **backend, char **domain )
+{
+	char *p;
+	char *q;
+	int len;
+
+	*backend = *domain = NULL;
+	
+	if ( !config )
+		return False;
+	
+	p = strchr( config, ':' );
+	
+	/* if no : then the string must be the backend name only */
+
+	if ( !p ) {
+		*backend = SMB_STRDUP( config );
+		return (*backend != NULL);
+	}
+
+	/* split the string and return the two parts */
+
+	if ( strlen(p+1) > 0 ) {
+		*domain = SMB_STRDUP( p+1 );
+	}
+	
+	len = PTR_DIFF(p,config)+1;
+	if ( (q = SMB_MALLOC_ARRAY( char, len )) == NULL ) {
+		SAFE_FREE( *backend );
+		return False;
+	}
+	
+	StrnCpy( q, config, len-1);
+	q[len-1] = '\0';
+	*backend = q;
+
+	return True;
+}
+
+/********************************************************************
+ Each nss backend must not store global state, but rather be able 
+ to initialize the state on a per domain basis.
+ *******************************************************************/
+
+ NTSTATUS nss_init( const char **nss_list )
+{
+	NTSTATUS status;
+	static NTSTATUS nss_initialized = NT_STATUS_UNSUCCESSFUL;
+	int i;
+	char *backend, *domain;
+	struct nss_function_entry *nss_backend;
+	struct nss_domain_entry *nss_domain;
+
+	/* check for previous successful initializations */
+
+	if ( NT_STATUS_IS_OK(nss_initialized) )
+		return NT_STATUS_OK;
+	
+	/* The "template" backend should alqays be registered as it
+	   is a static module */
+
+	if ( (nss_backend = nss_get_backend( "template" )) == NULL ) {
+		static_init_nss_info;	       
+	}
+
+	/* Create the list of nss_domains (loading any shared plugins
+	   as necessary) */
+
+	for ( i=0; nss_list && nss_list[i]; i++ ) {
+
+		if ( !parse_nss_parm(nss_list[i], &backend, &domain) ) 	{
+			DEBUG(0,("nss_init: failed to parse \"%s\"!\n",
+				 nss_list[i]));
+			continue;			
+		}
+
+		/* validate the backend */
+
+		if ( (nss_backend = nss_get_backend( backend )) == NULL ) {
+			/* attempt to register the backend */
+			status = smb_probe_module( "nss_info", backend );
+			if ( !NT_STATUS_IS_OK(status) ) {
+				continue;
+			}
+			
+			/* try again */
+			if ( (nss_backend = nss_get_backend( backend )) == NULL ) {
+				DEBUG(0,("nss_init: unregistered backend %s!.  Skipping\n",
+					 backend));
+				continue;
+			}
+
+		}
+
+     		/* fill in the nss_domain_entry and add it to the 
+		   list of domains */
+
+		nss_domain = TALLOC_ZERO_P( nss_domain_list, struct nss_domain_entry );
+		if ( !nss_domain ) {
+			DEBUG(0,("nss_init: talloc() failure!\n"));
+			return NT_STATUS_NO_MEMORY;
+		}
+		
+		nss_domain->backend = nss_backend;
+		nss_domain->domain  = talloc_strdup( nss_domain, domain );
+
+		status = nss_domain->backend->methods->init( nss_domain );
+		if ( NT_STATUS_IS_OK( status ) ) {
+			DLIST_ADD( nss_domain_list, nss_domain );
+		} else {
+			DEBUG(0,("nss_init: Failed to init backend for %s domain!\n", 
+				 nss_domain->domain));
+		}
+
+		/* cleanup */
+
+		SAFE_FREE( backend );
+		SAFE_FREE( domain );		
+	}
+
+	if ( !nss_domain_list ) {
+		DEBUG(3,("nss_init: no nss backends configured.  "
+			 "Defaulting to \"template\".\n"));
+
+
+		/* we shouild default to use template here */
+	}
+	
+		
+	nss_initialized = NT_STATUS_OK;
+	
+	return NT_STATUS_OK;
+}
+
+/********************************************************************
+ *******************************************************************/
+
+static struct nss_domain_entry *find_nss_domain( const char *domain )
+{
+	NTSTATUS status;	
+	struct nss_domain_entry *p;
+
+	status = nss_init( lp_winbind_nss_info() );
+	if ( !NT_STATUS_IS_OK(status) ) {
+		DEBUG(4,("nss_get_info: Failed to init nss_info API (%s)!\n",
+			 nt_errstr(status)));
+		return NULL;
+	}
+	
+	for ( p=nss_domain_list; p; p=p->next ) {
+		if ( strequal( p->domain, domain ) )
+			break;
+	}
+	
+	/* If we didn't find a match, then use the default nss info */
+
+	if ( !p ) {
+		if ( !nss_domain_list ) {
+			return NULL;
+		}
+		
+		p = nss_domain_list;		
+	}
+
+	return p;
+}
+
+/********************************************************************
+ *******************************************************************/
+
+ NTSTATUS nss_get_info( const char *domain, const DOM_SID *user_sid,
+		       TALLOC_CTX *ctx,
+		       ADS_STRUCT *ads, LDAPMessage *msg,
+		       char **homedir, char **shell, char **gecos,
+		       gid_t *p_gid)
+{
+	struct nss_domain_entry *p;
+	struct nss_info_methods *m;
+
+	if ( (p = find_nss_domain( domain )) == NULL ) {
+		DEBUG(4,("nss_get_info: Failed to find nss domain pointer for %s\n",
+			 domain ));
+		return NT_STATUS_NOT_FOUND;
+	}
+		
+	m = p->backend->methods;
+
+	return m->get_nss_info( p, user_sid, ctx, ads, msg, 
+				homedir, shell, gecos, p_gid );
+}
+
+/********************************************************************
+ *******************************************************************/
+
+ NTSTATUS nss_close( const char *parameters )
+{
+	struct nss_domain_entry *p = nss_domain_list;
+	struct nss_domain_entry *q;
+
+	while ( p && p->backend && p->backend->methods ) {
+		/* close the backend */
+		p->backend->methods->close_fn();
+
+		/* free the memory */
+		q = p;
+		p = p->next;
+		TALLOC_FREE( q );
+	}
+
+	return NT_STATUS_OK;
+}
+

Copied: branches/samba/upstream/source/nsswitch/nss_info_template.c (from rev 1928, branches/samba/upstream/source/nsswitch/nss_info_template.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/nss_info_template.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/nss_info_template.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,85 @@
+/* 
+   Unix SMB/CIFS implementation.
+   idMap nss template plugin
+
+   Copyright (C) Gerald Carter             2006
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public
+   License as published by the Free Software Foundation; either
+   version 2 of the License, or (at your option) any later version.
+   
+   This library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+   
+   You should have received a copy of the GNU Library General Public
+   License along with this library; if not, write to the
+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA  02111-1307, USA.   
+*/
+
+#include "includes.h"
+#include "nss_info.h"
+
+/************************************************************************
+ ***********************************************************************/
+
+static NTSTATUS nss_template_init( struct nss_domain_entry *e )
+{
+	return NT_STATUS_OK;
+}
+
+/************************************************************************
+ ***********************************************************************/
+
+static NTSTATUS nss_template_get_info( struct nss_domain_entry *e,
+				       const DOM_SID *sid, 
+				       TALLOC_CTX *ctx,
+				       ADS_STRUCT *ads,
+				       LDAPMessage *msg,
+				       char **homedir,
+				       char **shell, 
+				       char **gecos,
+				       gid_t *gid )
+{     
+	if ( !homedir || !shell || !gecos )
+		return NT_STATUS_INVALID_PARAMETER;
+	
+	*homedir = talloc_strdup( ctx, lp_template_homedir() );
+	*shell   = talloc_strdup( ctx, lp_template_shell() );
+	*gecos   = NULL;
+
+	if ( !*homedir || !*shell ) {
+		return NT_STATUS_NO_MEMORY;
+	}
+	
+	return NT_STATUS_OK;
+}
+
+/************************************************************************
+ ***********************************************************************/
+
+static NTSTATUS nss_template_close( void )
+{
+	return NT_STATUS_OK;
+}
+
+
+/************************************************************************
+ ***********************************************************************/
+
+static struct nss_info_methods nss_template_methods = {
+	.init         = nss_template_init,
+	.get_nss_info = nss_template_get_info,
+	.close_fn     = nss_template_close
+};
+		
+NTSTATUS nss_info_template_init( void )
+{
+	return smb_register_idmap_nss(SMB_NSS_INFO_INTERFACE_VERSION, 
+				      "template", 
+				      &nss_template_methods);	
+}
+

Modified: branches/samba/upstream/source/nsswitch/pam_winbind.c
===================================================================
--- branches/samba/upstream/source/nsswitch/pam_winbind.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nsswitch/pam_winbind.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,27 +3,25 @@
    Copyright Andrew Tridgell <tridge at samba.org> 2000
    Copyright Tim Potter <tpot at samba.org> 2000
    Copyright Andrew Bartlett <abartlet at samba.org> 2002
-   Copyright Guenther Deschner <gd at samba.org> 2005-2008
+   Copyright Guenther Deschner <gd at samba.org> 2005-2007
 
-   largely based on pam_userdb by Cristian Gafton <gafton at redhat.com> also
-   contains large slabs of code from pam_unix by Elliot Lee
-   <sopwith at redhat.com> (see copyright below for full details)
+   largely based on pam_userdb by Cristian Gafton <gafton at redhat.com> 
+   also contains large slabs of code from pam_unix by Elliot Lee <sopwith at redhat.com>
+   (see copyright below for full details)
 */
 
 #include "pam_winbind.h"
 
-#define _PAM_LOG_FUNCTION_ENTER(function, ctx) \
+#define _PAM_LOG_FUNCTION_ENTER(function, pamh, ctrl, flags) \
 	do { \
-		_pam_log_debug(ctx, LOG_DEBUG, "[pamh: %p] ENTER: " \
-			       function " (flags: 0x%04x)", ctx->pamh, ctx->flags); \
-		_pam_log_state(ctx); \
+		_pam_log_debug(pamh, ctrl, LOG_DEBUG, "[pamh: 0x%08x] ENTER: " function " (flags: 0x%04x)", (uint32) pamh, flags); \
+		_pam_log_state(pamh, ctrl); \
 	} while (0)
 
-#define _PAM_LOG_FUNCTION_LEAVE(function, ctx, retval) \
+#define _PAM_LOG_FUNCTION_LEAVE(function, pamh, ctrl, retval) \
 	do { \
-		_pam_log_debug(ctx, LOG_DEBUG, "[pamh: %p] LEAVE: " \
-			       function " returning %d", ctx->pamh, retval); \
-		_pam_log_state(ctx); \
+		_pam_log_debug(pamh, ctrl, LOG_DEBUG, "[pamh: 0x%08x] LEAVE: " function " returning %d", (uint32) pamh, retval); \
+		_pam_log_state(pamh, ctrl); \
 	} while (0)
 
 /* data tokens */
@@ -31,19 +29,17 @@
 #define MAX_PASSWD_TRIES	3
 
 /*
- * Work around the pam API that has functions with void ** as parameters
+ * Work around the pam API that has functions with void ** as parameters.
  * These lead to strict aliasing warnings with gcc.
  */
-static int _pam_get_item(const pam_handle_t *pamh,
-			 int item_type,
+static int _pam_get_item(const pam_handle_t *pamh, int item_type,
 			 const void *_item)
 {
 	const void **item = (const void **)_item;
 	return pam_get_item(pamh, item_type, item);
 }
 static int _pam_get_data(const pam_handle_t *pamh,
-			 const char *module_data_name,
-			 const void *_data)
+			 const char *module_data_name, const void *_data)
 {
 	const void **data = (const void **)_data;
 	return pam_get_data(pamh, module_data_name, data);
@@ -52,25 +48,19 @@
 /* some syslogging */
 
 #ifdef HAVE_PAM_VSYSLOG
-static void _pam_log_int(const pam_handle_t *pamh,
-			 int err,
-			 const char *format,
-			 va_list args)
+static void _pam_log_int(const pam_handle_t *pamh, int err, const char *format, va_list args)
 {
 	pam_vsyslog(pamh, err, format, args);
 }
 #else
-static void _pam_log_int(const pam_handle_t *pamh,
-			 int err,
-			 const char *format,
-			 va_list args)
+static void _pam_log_int(const pam_handle_t *pamh, int err, const char *format, va_list args)
 {
 	char *format2 = NULL;
 	const char *service;
 
 	_pam_get_item(pamh, PAM_SERVICE, &service);
 
-	format2 = (char *)malloc(strlen(MODULE_NAME)+strlen(format)+strlen(service)+5);
+	format2 = malloc(strlen(MODULE_NAME)+strlen(format)+strlen(service)+5);
 	if (format2 == NULL) {
 		/* what else todo ? */
 		vsyslog(err, format, args);
@@ -83,29 +73,16 @@
 }
 #endif /* HAVE_PAM_VSYSLOG */
 
-static bool _pam_log_is_silent(int ctrl)
+static BOOL _pam_log_is_silent(int ctrl)
 {
 	return on(ctrl, WINBIND_SILENT);
 }
 
-static void _pam_log(struct pwb_context *r, int err, const char *format, ...) PRINTF_ATTRIBUTE(3,4);
-static void _pam_log(struct pwb_context *r, int err, const char *format, ...)
+static void _pam_log(const pam_handle_t *pamh, int ctrl, int err, const char *format, ...) PRINTF_ATTRIBUTE(4,5);
+static void _pam_log(const pam_handle_t *pamh, int ctrl, int err, const char *format, ...)
 {
 	va_list args;
 
-	if (_pam_log_is_silent(r->ctrl)) {
-		return;
-	}
-
-	va_start(args, format);
-	_pam_log_int(r->pamh, err, format, args);
-	va_end(args);
-}
-static void __pam_log(const pam_handle_t *pamh, int ctrl, int err, const char *format, ...) PRINTF_ATTRIBUTE(4,5);
-static void __pam_log(const pam_handle_t *pamh, int ctrl, int err, const char *format, ...)
-{
-	va_list args;
-
 	if (_pam_log_is_silent(ctrl)) {
 		return;
 	}
@@ -115,50 +92,37 @@
 	va_end(args);
 }
 
-static bool _pam_log_is_debug_enabled(int ctrl)
+static BOOL _pam_log_is_debug_enabled(int ctrl)
 {
 	if (ctrl == -1) {
-		return false;
+		return False;
 	}
 
 	if (_pam_log_is_silent(ctrl)) {
-		return false;
+		return False;
 	}
 
 	if (!(ctrl & WINBIND_DEBUG_ARG)) {
-		return false;
+		return False;
 	}
 
-	return true;
+	return True;
 }
 
-static bool _pam_log_is_debug_state_enabled(int ctrl)
+static BOOL _pam_log_is_debug_state_enabled(int ctrl)
 {
 	if (!(ctrl & WINBIND_DEBUG_STATE)) {
-		return false;
+		return False;
 	}
 
 	return _pam_log_is_debug_enabled(ctrl);
 }
 
-static void _pam_log_debug(struct pwb_context *r, int err, const char *format, ...) PRINTF_ATTRIBUTE(3,4);
-static void _pam_log_debug(struct pwb_context *r, int err, const char *format, ...)
+static void _pam_log_debug(const pam_handle_t *pamh, int ctrl, int err, const char *format, ...) PRINTF_ATTRIBUTE(4,5);
+static void _pam_log_debug(const pam_handle_t *pamh, int ctrl, int err, const char *format, ...)
 {
 	va_list args;
 
-	if (!_pam_log_is_debug_enabled(r->ctrl)) {
-		return;
-	}
-
-	va_start(args, format);
-	_pam_log_int(r->pamh, err, format, args);
-	va_end(args);
-}
-static void __pam_log_debug(const pam_handle_t *pamh, int ctrl, int err, const char *format, ...) PRINTF_ATTRIBUTE(4,5);
-static void __pam_log_debug(const pam_handle_t *pamh, int ctrl, int err, const char *format, ...)
-{
-	va_list args;
-
 	if (!_pam_log_is_debug_enabled(ctrl)) {
 		return;
 	}
@@ -168,43 +132,35 @@
 	va_end(args);
 }
 
-static void _pam_log_state_datum(struct pwb_context *ctx,
-				 int item_type,
-				 const char *key,
-				 int is_string)
+static void _pam_log_state_datum(const pam_handle_t *pamh, int ctrl, int item_type, const char *key, int is_string)
 {
 	const void *data = NULL;
 	if (item_type != 0) {
-		pam_get_item(ctx->pamh, item_type, &data);
+		pam_get_item(pamh, item_type, &data);
 	} else {
-		pam_get_data(ctx->pamh, key, &data);
+		pam_get_data(pamh, key, &data);
 	}
 	if (data != NULL) {
 		const char *type = (item_type != 0) ? "ITEM" : "DATA";
 		if (is_string != 0) {
-			_pam_log_debug(ctx, LOG_DEBUG,
-				       "[pamh: %p] STATE: %s(%s) = \"%s\" (%p)",
-				       ctx->pamh, type, key, (const char *)data,
-				       data);
+			_pam_log_debug(pamh, ctrl, LOG_DEBUG, "[pamh: 0x%08x] STATE: %s(%s) = \"%s\" (0x%08x)", (uint32) pamh, type, key, (const char *) data, (uint32) data);
 		} else {
-			_pam_log_debug(ctx, LOG_DEBUG,
-				       "[pamh: %p] STATE: %s(%s) = %p",
-				       ctx->pamh, type, key, data);
+			_pam_log_debug(pamh, ctrl, LOG_DEBUG, "[pamh: 0x%08x] STATE: %s(%s) = 0x%08x", (uint32) pamh, type, key, (uint32) data);
 		}
 	}
 }
 
-#define _PAM_LOG_STATE_DATA_POINTER(ctx, module_data_name) \
-	_pam_log_state_datum(ctx, 0, module_data_name, 0)
+#define _PAM_LOG_STATE_DATA_POINTER(pamh, ctrl, module_data_name) \
+	_pam_log_state_datum(pamh, ctrl, 0, module_data_name, 0)
 
-#define _PAM_LOG_STATE_DATA_STRING(ctx, module_data_name) \
-	_pam_log_state_datum(ctx, 0, module_data_name, 1)
+#define _PAM_LOG_STATE_DATA_STRING(pamh, ctrl, module_data_name) \
+	_pam_log_state_datum(pamh, ctrl, 0, module_data_name, 1)
 
-#define _PAM_LOG_STATE_ITEM_POINTER(ctx, item_type) \
-	_pam_log_state_datum(ctx, item_type, #item_type, 0)
+#define _PAM_LOG_STATE_ITEM_POINTER(pamh, ctrl, item_type) \
+	_pam_log_state_datum(pamh, ctrl, item_type, #item_type, 0)
 
-#define _PAM_LOG_STATE_ITEM_STRING(ctx, item_type) \
-	_pam_log_state_datum(ctx, item_type, #item_type, 1)
+#define _PAM_LOG_STATE_ITEM_STRING(pamh, ctrl, item_type) \
+	_pam_log_state_datum(pamh, ctrl, item_type, #item_type, 1)
 
 #ifdef DEBUG_PASSWORD
 #define _LOG_PASSWORD_AS_STRING 1
@@ -212,49 +168,41 @@
 #define _LOG_PASSWORD_AS_STRING 0
 #endif
 
-#define _PAM_LOG_STATE_ITEM_PASSWORD(ctx, item_type) \
-	_pam_log_state_datum(ctx, item_type, #item_type, \
-			     _LOG_PASSWORD_AS_STRING)
+#define _PAM_LOG_STATE_ITEM_PASSWORD(pamh, ctrl, item_type) \
+	_pam_log_state_datum(pamh, ctrl, item_type, #item_type, _LOG_PASSWORD_AS_STRING)
 
-static void _pam_log_state(struct pwb_context *ctx)
+static void _pam_log_state(const pam_handle_t *pamh, int ctrl)
 {
-	if (!_pam_log_is_debug_state_enabled(ctx->ctrl)) {
+	if (!_pam_log_is_debug_state_enabled(ctrl)) {
 		return;
 	}
 
-	_PAM_LOG_STATE_ITEM_STRING(ctx, PAM_SERVICE);
-	_PAM_LOG_STATE_ITEM_STRING(ctx, PAM_USER);
-	_PAM_LOG_STATE_ITEM_STRING(ctx, PAM_TTY);
-	_PAM_LOG_STATE_ITEM_STRING(ctx, PAM_RHOST);
-	_PAM_LOG_STATE_ITEM_STRING(ctx, PAM_RUSER);
-	_PAM_LOG_STATE_ITEM_PASSWORD(ctx, PAM_OLDAUTHTOK);
-	_PAM_LOG_STATE_ITEM_PASSWORD(ctx, PAM_AUTHTOK);
-	_PAM_LOG_STATE_ITEM_STRING(ctx, PAM_USER_PROMPT);
-	_PAM_LOG_STATE_ITEM_POINTER(ctx, PAM_CONV);
+	_PAM_LOG_STATE_ITEM_STRING(pamh, ctrl, PAM_SERVICE);
+	_PAM_LOG_STATE_ITEM_STRING(pamh, ctrl, PAM_USER);
+	_PAM_LOG_STATE_ITEM_STRING(pamh, ctrl, PAM_TTY);
+	_PAM_LOG_STATE_ITEM_STRING(pamh, ctrl, PAM_RHOST);
+	_PAM_LOG_STATE_ITEM_STRING(pamh, ctrl, PAM_RUSER);
+	_PAM_LOG_STATE_ITEM_PASSWORD(pamh, ctrl, PAM_OLDAUTHTOK);
+	_PAM_LOG_STATE_ITEM_PASSWORD(pamh, ctrl, PAM_AUTHTOK);
+	_PAM_LOG_STATE_ITEM_STRING(pamh, ctrl, PAM_USER_PROMPT);
+	_PAM_LOG_STATE_ITEM_POINTER(pamh, ctrl, PAM_CONV);
 #ifdef PAM_FAIL_DELAY
-	_PAM_LOG_STATE_ITEM_POINTER(ctx, PAM_FAIL_DELAY);
+	_PAM_LOG_STATE_ITEM_POINTER(pamh, ctrl, PAM_FAIL_DELAY);
 #endif
 #ifdef PAM_REPOSITORY
-	_PAM_LOG_STATE_ITEM_POINTER(ctx, PAM_REPOSITORY);
+	_PAM_LOG_STATE_ITEM_POINTER(pamh, ctrl, PAM_REPOSITORY);
 #endif
 
-	_PAM_LOG_STATE_DATA_STRING(ctx, PAM_WINBIND_HOMEDIR);
-	_PAM_LOG_STATE_DATA_STRING(ctx, PAM_WINBIND_LOGONSCRIPT);
-	_PAM_LOG_STATE_DATA_STRING(ctx, PAM_WINBIND_LOGONSERVER);
-	_PAM_LOG_STATE_DATA_STRING(ctx, PAM_WINBIND_PROFILEPATH);
-	_PAM_LOG_STATE_DATA_STRING(ctx,
-				   PAM_WINBIND_NEW_AUTHTOK_REQD);
-				   /* Use atoi to get PAM result code */
-	_PAM_LOG_STATE_DATA_STRING(ctx,
-				   PAM_WINBIND_NEW_AUTHTOK_REQD_DURING_AUTH);
-	_PAM_LOG_STATE_DATA_POINTER(ctx, PAM_WINBIND_PWD_LAST_SET);
+	_PAM_LOG_STATE_DATA_STRING(pamh, ctrl, PAM_WINBIND_HOMEDIR);
+	_PAM_LOG_STATE_DATA_STRING(pamh, ctrl, PAM_WINBIND_LOGONSCRIPT);
+	_PAM_LOG_STATE_DATA_STRING(pamh, ctrl, PAM_WINBIND_LOGONSERVER);
+	_PAM_LOG_STATE_DATA_STRING(pamh, ctrl, PAM_WINBIND_PROFILEPATH);
+	_PAM_LOG_STATE_DATA_STRING(pamh, ctrl, PAM_WINBIND_NEW_AUTHTOK_REQD); /* Use atoi to get PAM result code */
+	_PAM_LOG_STATE_DATA_STRING(pamh, ctrl, PAM_WINBIND_NEW_AUTHTOK_REQD_DURING_AUTH);
+	_PAM_LOG_STATE_DATA_POINTER(pamh, ctrl, PAM_WINBIND_PWD_LAST_SET);
 }
 
-static int _pam_parse(const pam_handle_t *pamh,
-		      int flags,
-		      int argc,
-		      const char **argv,
-		      dictionary **result_d)
+static int _pam_parse(const pam_handle_t *pamh, int flags, int argc, const char **argv, dictionary **result_d)
 {
 	int ctrl = 0;
 	const char *config_file = NULL;
@@ -283,23 +231,23 @@
 		goto config_from_pam;
 	}
 
-	if (iniparser_getboolean(d, "global:debug", false)) {
+	if (iniparser_getboolean(d, "global:debug", False)) {
 		ctrl |= WINBIND_DEBUG_ARG;
 	}
 
-	if (iniparser_getboolean(d, "global:debug_state", false)) {
+	if (iniparser_getboolean(d, "global:debug_state", False)) {
 		ctrl |= WINBIND_DEBUG_STATE;
 	}
 
-	if (iniparser_getboolean(d, "global:cached_login", false)) {
+	if (iniparser_getboolean(d, "global:cached_login", False)) {
 		ctrl |= WINBIND_CACHED_LOGIN;
 	}
 
-	if (iniparser_getboolean(d, "global:krb5_auth", false)) {
+	if (iniparser_getboolean(d, "global:krb5_auth", False)) {
 		ctrl |= WINBIND_KRB5_AUTH;
 	}
 
-	if (iniparser_getboolean(d, "global:silent", false)) {
+	if (iniparser_getboolean(d, "global:silent", False)) {
 		ctrl |= WINBIND_SILENT;
 	}
 
@@ -312,14 +260,10 @@
 		ctrl |= WINBIND_REQUIRED_MEMBERSHIP;
 	}
 
-	if (iniparser_getboolean(d, "global:try_first_pass", false)) {
+	if (iniparser_getboolean(d, "global:try_first_pass", False)) {
 		ctrl |= WINBIND_TRY_FIRST_PASS_ARG;
 	}
 
-	if (iniparser_getint(d, "global:warn_pwd_expire", 0)) {
-		ctrl |= WINBIND_WARN_PWD_EXPIRE;
-	}
-
 config_from_pam:
 	/* step through arguments */
 	for (i=argc,v=argv; i-- > 0; ++v) {
@@ -329,8 +273,6 @@
 			ctrl |= WINBIND_DEBUG_ARG;
 		else if (!strcasecmp(*v, "debug_state"))
 			ctrl |= WINBIND_DEBUG_STATE;
-		else if (!strcasecmp(*v, "silent"))
-			ctrl |= WINBIND_SILENT;
 		else if (!strcasecmp(*v, "use_authtok"))
 			ctrl |= WINBIND_USE_AUTHTOK_ARG;
 		else if (!strcasecmp(*v, "use_first_pass"))
@@ -339,22 +281,18 @@
 			ctrl |= WINBIND_TRY_FIRST_PASS_ARG;
 		else if (!strcasecmp(*v, "unknown_ok"))
 			ctrl |= WINBIND_UNKNOWN_OK_ARG;
-		else if (!strncasecmp(*v, "require_membership_of",
-				      strlen("require_membership_of")))
+		else if (!strncasecmp(*v, "require_membership_of", strlen("require_membership_of")))
 			ctrl |= WINBIND_REQUIRED_MEMBERSHIP;
-		else if (!strncasecmp(*v, "require-membership-of",
-				      strlen("require-membership-of")))
+		else if (!strncasecmp(*v, "require-membership-of", strlen("require-membership-of")))
 			ctrl |= WINBIND_REQUIRED_MEMBERSHIP;
 		else if (!strcasecmp(*v, "krb5_auth"))
 			ctrl |= WINBIND_KRB5_AUTH;
-		else if (!strncasecmp(*v, "krb5_ccache_type",
-				      strlen("krb5_ccache_type")))
+		else if (!strncasecmp(*v, "krb5_ccache_type", strlen("krb5_ccache_type")))
 			ctrl |= WINBIND_KRB5_CCACHE_TYPE;
 		else if (!strcasecmp(*v, "cached_login"))
 			ctrl |= WINBIND_CACHED_LOGIN;
 		else {
-			__pam_log(pamh, ctrl, LOG_ERR,
-				 "pam_parse: unknown option: %s", *v);
+			_pam_log(pamh, ctrl, LOG_ERR, "pam_parse: unknown option: %s", *v);
 			return -1;
 		}
 
@@ -371,55 +309,11 @@
 	return ctrl;
 };
 
-static void _pam_winbind_free_context(struct pwb_context *ctx)
+static void _pam_winbind_cleanup_func(pam_handle_t *pamh, void *data, int error_status)
 {
-	if (ctx->dict) {
-		iniparser_freedict(ctx->dict);
-	}
-
-	SAFE_FREE(ctx);
-}
-
-static int _pam_winbind_init_context(pam_handle_t *pamh,
-				     int flags,
-				     int argc,
-				     const char **argv,
-				     struct pwb_context **ctx_p)
-{
-	struct pwb_context *r = NULL;
-
-	r = (struct pwb_context *)malloc(sizeof(struct pwb_context));
-	if (!r) {
-		return PAM_BUF_ERR;
-	}
-
-	ZERO_STRUCTP(r);
-
-	r->pamh = pamh;
-	r->flags = flags;
-	r->argc = argc;
-	r->argv = argv;
-	r->ctrl = _pam_parse(pamh, flags, argc, argv, &r->dict);
-	if (r->ctrl == -1) {
-		_pam_winbind_free_context(r);
-		return PAM_SYSTEM_ERR;
-	}
-
-	*ctx_p = r;
-
-	return PAM_SUCCESS;
-}
-
-static void _pam_winbind_cleanup_func(pam_handle_t *pamh,
-				      void *data,
-				      int error_status)
-{
 	int ctrl = _pam_parse(pamh, 0, 0, NULL, NULL);
 	if (_pam_log_is_debug_state_enabled(ctrl)) {
-		__pam_log_debug(pamh, ctrl, LOG_DEBUG,
-			       "[pamh: %p] CLEAN: cleaning up PAM data %p "
-			       "(error_status = %d)", pamh, data,
-			       error_status);
+		_pam_log_debug(pamh, ctrl, LOG_DEBUG, "[pamh: 0x%08x] CLEAN: cleaning up PAM data 0x%08x (error_status = %d)", (uint32) pamh, (uint32) data, error_status);
 	}
 	SAFE_FREE(data);
 }
@@ -429,54 +323,32 @@
 	const char *ntstatus_string;
 	const char *error_string;
 } ntstatus_errors[] = {
-	{"NT_STATUS_OK",
-		"Success"},
-	{"NT_STATUS_BACKUP_CONTROLLER",
-		"No primary Domain Controler available"},
-	{"NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND",
-		"No domain controllers found"},
-	{"NT_STATUS_NO_LOGON_SERVERS",
-		"No logon servers"},
-	{"NT_STATUS_PWD_TOO_SHORT",
-		"Password too short"},
-	{"NT_STATUS_PWD_TOO_RECENT",
-		"The password of this user is too recent to change"},
-	{"NT_STATUS_PWD_HISTORY_CONFLICT",
-		"Password is already in password history"},
-	{"NT_STATUS_PASSWORD_EXPIRED",
-		"Your password has expired"},
-	{"NT_STATUS_PASSWORD_MUST_CHANGE",
-		"You need to change your password now"},
-	{"NT_STATUS_INVALID_WORKSTATION",
-		"You are not allowed to logon from this workstation"},
-	{"NT_STATUS_INVALID_LOGON_HOURS",
-		"You are not allowed to logon at this time"},
-	{"NT_STATUS_ACCOUNT_EXPIRED",
-		"Your account has expired. "
-		"Please contact your System administrator"}, /* SCNR */
-	{"NT_STATUS_ACCOUNT_DISABLED",
-		"Your account is disabled. "
-		"Please contact your System administrator"}, /* SCNR */
-	{"NT_STATUS_ACCOUNT_LOCKED_OUT",
-		"Your account has been locked. "
-		"Please contact your System administrator"}, /* SCNR */
-	{"NT_STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT",
-		"Invalid Trust Account"},
-	{"NT_STATUS_NOLOGON_SERVER_TRUST_ACCOUNT",
-		"Invalid Trust Account"},
-	{"NT_STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT",
-		"Invalid Trust Account"},
-	{"NT_STATUS_ACCESS_DENIED",
-		"Access is denied"},
+	{"NT_STATUS_OK", "Success"},
+	{"NT_STATUS_BACKUP_CONTROLLER", "No primary Domain Controler available"},
+	{"NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND", "No domain controllers found"},
+	{"NT_STATUS_NO_LOGON_SERVERS", "No logon servers"},
+	{"NT_STATUS_PWD_TOO_SHORT", "Password too short"},
+	{"NT_STATUS_PWD_TOO_RECENT", "The password of this user is too recent to change"},
+	{"NT_STATUS_PWD_HISTORY_CONFLICT", "Password is already in password history"},
+	{"NT_STATUS_PASSWORD_EXPIRED", "Your password has expired"},
+	{"NT_STATUS_PASSWORD_MUST_CHANGE", "You need to change your password now"},
+	{"NT_STATUS_INVALID_WORKSTATION", "You are not allowed to logon from this workstation"},
+	{"NT_STATUS_INVALID_LOGON_HOURS", "You are not allowed to logon at this time"},
+	{"NT_STATUS_ACCOUNT_EXPIRED", "Your account has expired. Please contact your System administrator"}, /* SCNR */
+	{"NT_STATUS_ACCOUNT_DISABLED", "Your account is disabled. Please contact your System administrator"}, /* SCNR */
+	{"NT_STATUS_ACCOUNT_LOCKED_OUT", "Your account has been locked. Please contact your System administrator"}, /* SCNR */
+	{"NT_STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT", "Invalid Trust Account"},
+	{"NT_STATUS_NOLOGON_SERVER_TRUST_ACCOUNT", "Invalid Trust Account"},
+	{"NT_STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT", "Invalid Trust Account"},
+	{"NT_STATUS_ACCESS_DENIED", "Access is denied"},
 	{NULL, NULL}
 };
 
-static const char *_get_ntstatus_error_string(const char *nt_status_string)
+const char *_get_ntstatus_error_string(const char *nt_status_string) 
 {
 	int i;
 	for (i=0; ntstatus_errors[i].ntstatus_string != NULL; i++) {
-		if (!strcasecmp(ntstatus_errors[i].ntstatus_string,
-				nt_status_string)) {
+		if (!strcasecmp(ntstatus_errors[i].ntstatus_string, nt_status_string)) {
 			return ntstatus_errors[i].error_string;
 		}
 	}
@@ -487,107 +359,98 @@
 
 /* Attempt a conversation */
 
-static int converse(const pam_handle_t *pamh,
-		    int nargs,
+static int converse(pam_handle_t *pamh, int nargs,
 		    struct pam_message **message,
 		    struct pam_response **response)
 {
 	int retval;
 	struct pam_conv *conv;
 
-	retval = _pam_get_item(pamh, PAM_CONV, &conv);
+	retval = _pam_get_item(pamh, PAM_CONV, &conv );
 	if (retval == PAM_SUCCESS) {
-		retval = conv->conv(nargs,
-				    (const struct pam_message **)message,
+		retval = conv->conv(nargs, (const struct pam_message **)message,
 				    response, conv->appdata_ptr);
 	}
-
+	
 	return retval; /* propagate error status */
 }
 
 
-static int _make_remark(struct pwb_context *ctx,
-			int type,
-			const char *text)
+static int _make_remark(pam_handle_t * pamh, int flags, int type, const char *text)
 {
 	int retval = PAM_SUCCESS;
 
 	struct pam_message *pmsg[1], msg[1];
 	struct pam_response *resp;
-
-	if (ctx->flags & WINBIND_SILENT) {
+	
+	if (flags & WINBIND_SILENT) {
 		return PAM_SUCCESS;
 	}
 
 	pmsg[0] = &msg[0];
-	msg[0].msg = discard_const_p(char, text);
+	msg[0].msg = CONST_DISCARD(char *, text);
 	msg[0].msg_style = type;
-
+	
 	resp = NULL;
-	retval = converse(ctx->pamh, 1, pmsg, &resp);
-
+	retval = converse(pamh, 1, pmsg, &resp);
+	
 	if (resp) {
 		_pam_drop_reply(resp, 1);
 	}
 	return retval;
 }
 
-static int _make_remark_v(struct pwb_context *ctx,
-			  int type,
-			  const char *format,
-			  va_list args)
+static int _make_remark_v(pam_handle_t * pamh, int flags, int type, const char *format, va_list args)
 {
 	char *var;
 	int ret;
 
 	ret = vasprintf(&var, format, args);
 	if (ret < 0) {
-		_pam_log(ctx, LOG_ERR, "memory allocation failure");
+		_pam_log(pamh, 0, LOG_ERR, "memory allocation failure");
 		return ret;
 	}
 
-	ret = _make_remark(ctx, type, var);
+	ret = _make_remark(pamh, flags, type, var);
 	SAFE_FREE(var);
 	return ret;
 }
 
-static int _make_remark_format(struct pwb_context *ctx, int type, const char *format, ...) PRINTF_ATTRIBUTE(3,4);
-static int _make_remark_format(struct pwb_context *ctx, int type, const char *format, ...)
+static int _make_remark_format(pam_handle_t * pamh, int flags, int type, const char *format, ...) PRINTF_ATTRIBUTE(4,5);
+static int _make_remark_format(pam_handle_t * pamh, int flags, int type, const char *format, ...)
 {
 	int ret;
 	va_list args;
 
 	va_start(args, format);
-	ret = _make_remark_v(ctx, type, format, args);
+	ret = _make_remark_v(pamh, flags, type, format, args);
 	va_end(args);
 	return ret;
 }
 
-static int pam_winbind_request(struct pwb_context *ctx,
+static int pam_winbind_request(pam_handle_t * pamh, int ctrl,
 			       enum winbindd_cmd req_type,
 			       struct winbindd_request *request,
 			       struct winbindd_response *response)
 {
 	/* Fill in request and send down pipe */
-	winbindd_init_request(request, req_type);
-
-	if (winbind_write_sock(request, sizeof(*request), 0, 0) == -1) {
-		_pam_log(ctx, LOG_ERR,
-			 "pam_winbind_request: write to socket failed!");
-		winbind_close_sock();
+	init_request(request, req_type);
+	
+	if (write_sock(request, sizeof(*request), 0, 0) == -1) {
+		_pam_log(pamh, ctrl, LOG_ERR, "pam_winbind_request: write to socket failed!");
+		close_sock();
 		return PAM_SERVICE_ERR;
 	}
-
+	
 	/* Wait for reply */
-	if (winbindd_read_reply(response) == -1) {
-		_pam_log(ctx, LOG_ERR,
-			 "pam_winbind_request: read from socket failed!");
-		winbind_close_sock();
+	if (read_reply(response) == -1) {
+		_pam_log(pamh, ctrl, LOG_ERR, "pam_winbind_request: read from socket failed!");
+		close_sock();
 		return PAM_SERVICE_ERR;
 	}
 
 	/* We are done with the socket - close it and avoid mischeif */
-	winbind_close_sock();
+	close_sock();
 
 	/* Copy reply data from socket */
 	if (response->result == WINBINDD_OK) {
@@ -600,11 +463,10 @@
 		case WINBINDD_GETPWNAM:
 		case WINBINDD_LOOKUPNAME:
 			if (strlen(response->data.auth.nt_status_string) > 0) {
-				_pam_log(ctx, LOG_ERR,
-					 "request failed, NT error was %s",
-					 response->data.auth.nt_status_string);
+				_pam_log(pamh, ctrl, LOG_ERR, "request failed, NT error was %s", 
+				response->data.auth.nt_status_string);
 			} else {
-				_pam_log(ctx, LOG_ERR, "request failed");
+				_pam_log(pamh, ctrl, LOG_ERR, "request failed");
 			}
 			return PAM_USER_UNKNOWN;
 		default:
@@ -612,22 +474,21 @@
 	}
 
 	if (response->data.auth.pam_error != PAM_SUCCESS) {
-		_pam_log(ctx, LOG_ERR,
-			 "request failed: %s, "
-			 "PAM error was %s (%d), NT error was %s",
+		_pam_log(pamh, ctrl, LOG_ERR, "request failed: %s, PAM error was %s (%d), NT error was %s", 
 			 response->data.auth.error_string,
-			 pam_strerror(ctx->pamh, response->data.auth.pam_error),
+			 pam_strerror(pamh, response->data.auth.pam_error),
 			 response->data.auth.pam_error,
 			 response->data.auth.nt_status_string);
 		return response->data.auth.pam_error;
-	}
+	} 
+	
+	_pam_log(pamh, ctrl, LOG_ERR, "request failed, but PAM error 0!");
 
-	_pam_log(ctx, LOG_ERR, "request failed, but PAM error 0!");
-
 	return PAM_SERVICE_ERR;
 }
 
-static int pam_winbind_request_log(struct pwb_context *ctx,
+static int pam_winbind_request_log(pam_handle_t * pamh,
+				   int ctrl,
 				   enum winbindd_cmd req_type,
 				   struct winbindd_request *request,
 				   struct winbindd_response *response,
@@ -635,36 +496,31 @@
 {
 	int retval;
 
-	retval = pam_winbind_request(ctx, req_type, request, response);
+	retval = pam_winbind_request(pamh, ctrl, req_type, request, response);
 
 	switch (retval) {
 	case PAM_AUTH_ERR:
 		/* incorrect password */
-		_pam_log(ctx, LOG_WARNING, "user '%s' denied access "
-			 "(incorrect password or invalid membership)", user);
+		_pam_log(pamh, ctrl, LOG_WARNING, "user '%s' denied access (incorrect password or invalid membership)", user);
 		return retval;
 	case PAM_ACCT_EXPIRED:
 		/* account expired */
-		_pam_log(ctx, LOG_WARNING, "user '%s' account expired",
-			 user);
+		_pam_log(pamh, ctrl, LOG_WARNING, "user '%s' account expired", user);
 		return retval;
 	case PAM_AUTHTOK_EXPIRED:
 		/* password expired */
-		_pam_log(ctx, LOG_WARNING, "user '%s' password expired",
-			 user);
+		_pam_log(pamh, ctrl, LOG_WARNING, "user '%s' password expired", user);
 		return retval;
 	case PAM_NEW_AUTHTOK_REQD:
 		/* new password required */
-		_pam_log(ctx, LOG_WARNING, "user '%s' new password "
-			 "required", user);
+		_pam_log(pamh, ctrl, LOG_WARNING, "user '%s' new password required", user);
 		return retval;
 	case PAM_USER_UNKNOWN:
 		/* the user does not exist */
-		_pam_log_debug(ctx, LOG_NOTICE, "user '%s' not found",
-			       user);
-		if (ctx->ctrl & WINBIND_UNKNOWN_OK_ARG) {
+		_pam_log_debug(pamh, ctrl, LOG_NOTICE, "user '%s' not found", user);
+		if (ctrl & WINBIND_UNKNOWN_OK_ARG) {
 			return PAM_IGNORE;
-		}
+		}	 
 		return retval;
 	case PAM_SUCCESS:
 		/* Otherwise, the authentication looked good */
@@ -672,24 +528,20 @@
 			case WINBINDD_INFO:
 				break;
 			case WINBINDD_PAM_AUTH:
-				_pam_log(ctx, LOG_NOTICE,
-					 "user '%s' granted access", user);
+				_pam_log(pamh, ctrl, LOG_NOTICE, "user '%s' granted access", user);
 				break;
 			case WINBINDD_PAM_CHAUTHTOK:
-				_pam_log(ctx, LOG_NOTICE,
-					 "user '%s' password changed", user);
+				_pam_log(pamh, ctrl, LOG_NOTICE, "user '%s' password changed", user);
 				break;
 			default:
-				_pam_log(ctx, LOG_NOTICE,
-					 "user '%s' OK", user);
+				_pam_log(pamh, ctrl, LOG_NOTICE, "user '%s' OK", user);
 				break;
 		}
-
+	
 		return retval;
 	default:
 		/* we don't know anything about this return value */
-		_pam_log(ctx, LOG_ERR,
-			 "internal module error (retval = %d, user = '%s')",
+		_pam_log(pamh, ctrl, LOG_ERR, "internal module error (retval = %d, user = '%s')",
 			 retval, user);
 		return retval;
 	}
@@ -697,64 +549,57 @@
 
 /**
  * send a password expiry message if required
- *
+ * 
  * @param pamh PAM handle
  * @param ctrl PAM winbind options.
  * @param next_change expected (calculated) next expiry date.
  * @param already_expired pointer to a boolean to indicate if the password is
  *        already expired.
  *
- * @return boolean Returns true if message has been sent, false if not.
+ * @return boolean Returns True if message has been sent, False if not.
  */
 
-static bool _pam_send_password_expiry_message(struct pwb_context *ctx,
-					      time_t next_change,
-					      time_t now,
-					      int warn_pwd_expire,
-					      bool *already_expired)
+static BOOL _pam_send_password_expiry_message(pam_handle_t *pamh, int ctrl, time_t next_change, time_t now, BOOL *already_expired)
 {
 	int days = 0;
 	struct tm tm_now, tm_next_change;
 
 	if (already_expired) {
-		*already_expired = false;
+		*already_expired = False;
 	}
 
 	if (next_change <= now) {
-		PAM_WB_REMARK_DIRECT(ctx, "NT_STATUS_PASSWORD_EXPIRED");
+		PAM_WB_REMARK_DIRECT(pamh, ctrl, "NT_STATUS_PASSWORD_EXPIRED");
 		if (already_expired) {
-			*already_expired = true;
+			*already_expired = True;
 		}
-		return true;
+		return True;
 	}
 
 	if ((next_change < 0) ||
-	    (next_change > now + warn_pwd_expire * SECONDS_PER_DAY)) {
-		return false;
+	    (next_change > now + DAYS_TO_WARN_BEFORE_PWD_EXPIRES * SECONDS_PER_DAY)) {
+		return False;
 	}
 
-	if ((localtime_r(&now, &tm_now) == NULL) ||
+	if ((localtime_r(&now, &tm_now) == NULL) || 
 	    (localtime_r(&next_change, &tm_next_change) == NULL)) {
-		return false;
+		return False;
 	}
 
-	days = (tm_next_change.tm_yday+tm_next_change.tm_year*365) -
-	       (tm_now.tm_yday+tm_now.tm_year*365);
+	days = (tm_next_change.tm_yday+tm_next_change.tm_year*365) - (tm_now.tm_yday+tm_now.tm_year*365);
 
 	if (days == 0) {
-		_make_remark(ctx, PAM_TEXT_INFO,
-			     "Your password expires today");
-		return true;
+		_make_remark(pamh, ctrl, PAM_TEXT_INFO, "Your password expires today");
+		return True;
+	} 
+	
+	if (days > 0 && days < DAYS_TO_WARN_BEFORE_PWD_EXPIRES) {
+		_make_remark_format(pamh, ctrl, PAM_TEXT_INFO, "Your password will expire in %d %s", 
+			days, (days > 1) ? "days":"day");
+		return True;
 	}
 
-	if (days > 0 && days < warn_pwd_expire) {
-		_make_remark_format(ctx, PAM_TEXT_INFO,
-				    "Your password will expire in %d %s",
-				    days, (days > 1) ? "days":"day");
-		return true;
-	}
-
-	return false;
+	return False;
 }
 
 /**
@@ -768,16 +613,16 @@
  * @return void.
  */
 
-static void _pam_warn_password_expiry(struct pwb_context *ctx,
+static void _pam_warn_password_expiry(pam_handle_t *pamh, 
+				      int flags, 
 				      const struct winbindd_response *response,
-				      int warn_pwd_expire,
-				      bool *already_expired)
+				      BOOL *already_expired)
 {
 	time_t now = time(NULL);
 	time_t next_change = 0;
 
 	if (already_expired) {
-		*already_expired = false;
+		*already_expired = False;
 	}
 
 	/* accounts with ACB_PWNOEXP set never receive a warning */
@@ -793,8 +638,7 @@
 	/* check if the info3 must change timestamp has been set */
 	next_change = response->data.auth.info3.pass_must_change_time;
 
-	if (_pam_send_password_expiry_message(ctx, next_change, now,
-					      warn_pwd_expire,
+	if (_pam_send_password_expiry_message(pamh, flags, next_change, now, 
 					      already_expired)) {
 		return;
 	}
@@ -806,11 +650,10 @@
 		return;
 	}
 
-	next_change = response->data.auth.info3.pass_last_set_time +
+	next_change = response->data.auth.info3.pass_last_set_time + 
 		      response->data.auth.policy.expire;
 
-	if (_pam_send_password_expiry_message(ctx, next_change, now,
-					      warn_pwd_expire,
+	if (_pam_send_password_expiry_message(pamh, flags, next_change, now, 
 					      already_expired)) {
 		return;
 	}
@@ -820,33 +663,37 @@
 
 #define IS_SID_STRING(name) (strncmp("S-", name, 2) == 0)
 
+static BOOL safe_append_string(char *dest,
+			const char *src,
+			int dest_buffer_size)
 /**
- * Append a string, making sure not to overflow and to always return a
- * NULL-terminated string.
+ * Append a string, making sure not to overflow and to always return a NULL-terminated
+ * string.
  *
  * @param dest Destination string buffer (must already be NULL-terminated).
  * @param src Source string buffer.
  * @param dest_buffer_size Size of dest buffer in bytes.
  *
- * @return false if dest buffer is not big enough (no bytes copied), true on
- * success.
+ * @return False if dest buffer is not big enough (no bytes copied), True on success.
  */
-
-static bool safe_append_string(char *dest,
-			       const char *src,
-			       int dest_buffer_size)
 {
 	int dest_length = strlen(dest);
 	int src_length = strlen(src);
 
-	if (dest_length + src_length + 1 > dest_buffer_size) {
-		return false;
+	if ( dest_length + src_length + 1 > dest_buffer_size ) {
+		return False;
 	}
 
 	memcpy(dest + dest_length, src, src_length + 1);
-	return true;
+	return True;
 }
 
+static BOOL winbind_name_to_sid_string(pam_handle_t *pamh,
+				int ctrl,
+				const char *user,
+				const char *name,
+				char *sid_list_buffer,
+				int sid_list_buffer_size)
 /**
  * Convert a names into a SID string, appending it to a buffer.
  *
@@ -857,18 +704,13 @@
  * @param sid_list_buffer Where to append the string sid.
  * @param sid_list_buffer Size of sid_list_buffer (in bytes).
  *
- * @return false on failure, true on success.
+ * @return False on failure, True on success.
  */
-static bool winbind_name_to_sid_string(struct pwb_context *ctx,
-				       const char *user,
-				       const char *name,
-				       char *sid_list_buffer,
-				       int sid_list_buffer_size)
 {
 	const char* sid_string;
 	struct winbindd_response sid_response;
 
-	/* lookup name? */
+	/* lookup name? */ 
 	if (IS_SID_STRING(name)) {
 		sid_string = name;
 	} else {
@@ -877,32 +719,33 @@
 		ZERO_STRUCT(sid_request);
 		ZERO_STRUCT(sid_response);
 
-		_pam_log_debug(ctx, LOG_DEBUG,
-			       "no sid given, looking up: %s\n", name);
+		_pam_log_debug(pamh, ctrl, LOG_DEBUG, "no sid given, looking up: %s\n", name);
 
 		/* fortunatly winbindd can handle non-separated names */
 		strncpy(sid_request.data.name.name, name,
 			sizeof(sid_request.data.name.name) - 1);
 
-		if (pam_winbind_request_log(ctx, WINBINDD_LOOKUPNAME,
-					    &sid_request, &sid_response,
-					    user)) {
-			_pam_log(ctx, LOG_INFO,
-				 "could not lookup name: %s\n", name);
-			return false;
+		if (pam_winbind_request_log(pamh, ctrl, WINBINDD_LOOKUPNAME, &sid_request, &sid_response, user)) {
+			_pam_log(pamh, ctrl, LOG_INFO, "could not lookup name: %s\n", name); 
+			return False;
 		}
 
 		sid_string = sid_response.data.sid.sid;
 	}
 
-	if (!safe_append_string(sid_list_buffer, sid_string,
-				sid_list_buffer_size)) {
-		return false;
+	if (!safe_append_string(sid_list_buffer, sid_string, sid_list_buffer_size)) {
+		return False;
 	}
 
-	return true;
+	return True;
 }
 
+static BOOL winbind_name_list_to_sid_string_list(pam_handle_t *pamh,
+				int ctrl,
+				const char *user,
+				const char *name_list,
+				char *sid_list_buffer,
+				int sid_list_buffer_size)
 /**
  * Convert a list of names into a list of sids.
  *
@@ -913,55 +756,43 @@
  * @param sid_list_buffer Where to put the list of string sids.
  * @param sid_list_buffer Size of sid_list_buffer (in bytes).
  *
- * @return false on failure, true on success.
+ * @return False on failure, True on success.
  */
-static bool winbind_name_list_to_sid_string_list(struct pwb_context *ctx,
-						 const char *user,
-						 const char *name_list,
-						 char *sid_list_buffer,
-						 int sid_list_buffer_size)
 {
-	bool result = false;
+	BOOL result = False;
 	char *current_name = NULL;
 	const char *search_location;
 	const char *comma;
 
-	if (sid_list_buffer_size > 0) {
+	if ( sid_list_buffer_size > 0 ) {
 		sid_list_buffer[0] = 0;
 	}
 
 	search_location = name_list;
-	while ((comma = strstr(search_location, ",")) != NULL) {
-		current_name = strndup(search_location,
-				       comma - search_location);
+	while ( (comma = strstr(search_location, ",")) != NULL ) {
+		current_name = strndup(search_location, comma - search_location);
 		if (NULL == current_name) {
 			goto out;
 		}
 
-		if (!winbind_name_to_sid_string(ctx, user,
-						current_name,
-						sid_list_buffer,
-						sid_list_buffer_size)) {
+		if (!winbind_name_to_sid_string(pamh, ctrl, user, current_name, sid_list_buffer, sid_list_buffer_size)) {
 			goto out;
 		}
 
 		SAFE_FREE(current_name);
 
-		if (!safe_append_string(sid_list_buffer, ",",
-					sid_list_buffer_size)) {
+		if (!safe_append_string(sid_list_buffer, ",", sid_list_buffer_size)) {
 			goto out;
 		}
 
 		search_location = comma + 1;
 	}
 
-	if (!winbind_name_to_sid_string(ctx, user, search_location,
-					sid_list_buffer,
-					sid_list_buffer_size)) {
+	if (!winbind_name_to_sid_string(pamh, ctrl, user, search_location, sid_list_buffer, sid_list_buffer_size)) {
 		goto out;
 	}
 
-	result = true;
+	result = True;
 
 out:
 	SAFE_FREE(current_name);
@@ -978,13 +809,12 @@
  * @return void.
  */
 
-static void _pam_setup_krb5_env(struct pwb_context *ctx,
-				const char *krb5ccname)
+static void _pam_setup_krb5_env(pam_handle_t *pamh, int ctrl, const char *krb5ccname)
 {
 	char var[PATH_MAX];
 	int ret;
 
-	if (off(ctx->ctrl, WINBIND_KRB5_AUTH)) {
+	if (off(ctrl, WINBIND_KRB5_AUTH)) {
 		return;
 	}
 
@@ -992,20 +822,18 @@
 		return;
 	}
 
-	_pam_log_debug(ctx, LOG_DEBUG,
-		       "request returned KRB5CCNAME: %s", krb5ccname);
-
+	_pam_log_debug(pamh, ctrl, LOG_DEBUG, "request returned KRB5CCNAME: %s", krb5ccname);
+	
 	if (snprintf(var, sizeof(var), "KRB5CCNAME=%s", krb5ccname) == -1) {
 		return;
 	}
-
-	ret = pam_putenv(ctx->pamh, var);
+	
+	ret = pam_putenv(pamh, var);
 	if (ret) {
-		_pam_log(ctx, LOG_ERR,
-			 "failed to set KRB5CCNAME to %s: %s",
-			 var, pam_strerror(ctx->pamh, ret));
+		_pam_log(pamh, ctrl, LOG_ERR, "failed to set KRB5CCNAME to %s: %s", 
+			var, pam_strerror(pamh, ret));
 	}
-}
+}	
 
 /**
  * Set string into the PAM stack.
@@ -1018,23 +846,18 @@
  * @return void.
  */
 
-static void _pam_set_data_string(struct pwb_context *ctx,
-				 const char *data_name,
-				 const char *value)
+static void _pam_set_data_string(pam_handle_t *pamh, int ctrl, const char *data_name, const char *value)
 {
 	int ret;
 
-	if (!data_name || !value || (strlen(data_name) == 0) ||
-	     (strlen(value) == 0)) {
+	if ( !data_name || !value || (strlen(data_name) == 0) || (strlen(value) == 0) ) {
 		return;
 	}
 
-	ret = pam_set_data(ctx->pamh, data_name, (void *)strdup(value),
-			   _pam_winbind_cleanup_func);
+	ret = pam_set_data(pamh, data_name, (void *)strdup(value), _pam_winbind_cleanup_func);
 	if (ret) {
-		_pam_log_debug(ctx, LOG_DEBUG,
-			       "Could not set data %s: %s\n",
-			       data_name, pam_strerror(ctx->pamh, ret));
+		_pam_log_debug(pamh, ctrl, LOG_DEBUG, "Could not set data %s: %s\n", 
+			data_name, pam_strerror(pamh, ret));
 	}
 
 }
@@ -1050,17 +873,12 @@
  * @return void.
  */
 
-static void _pam_set_data_info3(struct pwb_context *ctx,
-				struct winbindd_response *response)
+static void _pam_set_data_info3(pam_handle_t *pamh, int ctrl, struct winbindd_response *response)
 {
-	_pam_set_data_string(ctx, PAM_WINBIND_HOMEDIR,
-			     response->data.auth.info3.home_dir);
-	_pam_set_data_string(ctx, PAM_WINBIND_LOGONSCRIPT,
-			     response->data.auth.info3.logon_script);
-	_pam_set_data_string(ctx, PAM_WINBIND_LOGONSERVER,
-			     response->data.auth.info3.logon_srv);
-	_pam_set_data_string(ctx, PAM_WINBIND_PROFILEPATH,
-			     response->data.auth.info3.profile_path);
+	_pam_set_data_string(pamh, ctrl, PAM_WINBIND_HOMEDIR, response->data.auth.info3.home_dir);
+	_pam_set_data_string(pamh, ctrl, PAM_WINBIND_LOGONSCRIPT, response->data.auth.info3.logon_script);
+	_pam_set_data_string(pamh, ctrl, PAM_WINBIND_LOGONSERVER, response->data.auth.info3.logon_srv);
+	_pam_set_data_string(pamh, ctrl, PAM_WINBIND_PROFILEPATH, response->data.auth.info3.profile_path);
 }
 
 /**
@@ -1090,61 +908,26 @@
  * @return void.
  */
 
-static void _pam_warn_logon_type(struct pwb_context *ctx,
-				 const char *username,
-				 uint32_t info3_user_flgs)
+static void _pam_warn_logon_type(pam_handle_t *pamh, int ctrl, const char *username, uint32 info3_user_flgs)
 {
 	/* inform about logon type */
 	if (PAM_WB_GRACE_LOGON(info3_user_flgs)) {
 
-		_make_remark(ctx, PAM_ERROR_MSG,
-			     "Grace login. "
-			     "Please change your password as soon you're "
-			     "online again");
-		_pam_log_debug(ctx, LOG_DEBUG,
-			       "User %s logged on using grace logon\n",
-			       username);
+		_make_remark(pamh, ctrl, PAM_ERROR_MSG, 
+			"Grace login. Please change your password as soon you're online again");
+		_pam_log_debug(pamh, ctrl, LOG_DEBUG,
+			"User %s logged on using grace logon\n", username);
 
 	} else if (PAM_WB_CACHED_LOGON(info3_user_flgs)) {
 
-		_make_remark(ctx, PAM_ERROR_MSG,
-			     "Domain Controller unreachable, "
-			     "using cached credentials instead. "
-			     "Network resources may be unavailable");
-		_pam_log_debug(ctx, LOG_DEBUG,
-			       "User %s logged on using cached credentials\n",
-			       username);
+		_make_remark(pamh, ctrl, PAM_ERROR_MSG, 
+			"Domain Controller unreachable, using cached credentials instead. Network resources may be unavailable");
+		_pam_log_debug(pamh, ctrl, LOG_DEBUG,
+			"User %s logged on using cached credentials\n", username);
 	}
 }
 
 /**
- * Send PAM_ERROR_MSG for krb5 errors.
- *
- * @param pamh PAM handle
- * @param ctrl PAM winbind options.
- * @param username User in PAM request.
- * @param info3_user_flgs Info3 flags containing logon type bits.
- *
- * @return void.
- */
-
-static void _pam_warn_krb5_failure(struct pwb_context *ctx,
-				   const char *username,
-				   uint32_t info3_user_flgs)
-{
-	if (PAM_WB_KRB5_CLOCK_SKEW(info3_user_flgs)) {
-		_make_remark(ctx, PAM_ERROR_MSG,
-			     "Failed to establish your Kerberos Ticket cache "
-			     "due time differences\n"
-			     "with the domain controller.  "
-			     "Please verify the system time.\n");
-		_pam_log_debug(ctx, LOG_DEBUG,
-			       "User %s: Clock skew when getting Krb5 TGT\n",
-			       username);
-	}
-}
-
-/**
  * Compose Password Restriction String for a PAM_ERROR_MSG conversation.
  *
  * @param response The struct winbindd_response.
@@ -1171,42 +954,37 @@
 
 	if (response->data.auth.policy.min_length_password > 0) {
 		ret = snprintf(str+offset, str_size-offset,
-			       "must be at least %d characters; ",
-			       response->data.auth.policy.min_length_password);
+			     "must be at least %d characters; ",
+			     response->data.auth.policy.min_length_password);
 		if (ret == -1) {
 			goto failed;
 		}
 		offset += ret;
 	}
-
+	
 	if (response->data.auth.policy.password_history > 0) {
 		ret = snprintf(str+offset, str_size-offset,
-			       "cannot repeat any of your previous %d "
-			       "passwords; ",
-			       response->data.auth.policy.password_history);
+			     "cannot repeat any of your previous %d passwords; ",
+			     response->data.auth.policy.password_history);
 		if (ret == -1) {
 			goto failed;
 		}
 		offset += ret;
 	}
-
-	if (response->data.auth.policy.password_properties &
-	    DOMAIN_PASSWORD_COMPLEX) {
+	
+	if (response->data.auth.policy.password_properties & DOMAIN_PASSWORD_COMPLEX) {
 		ret = snprintf(str+offset, str_size-offset,
-			       "must contain capitals, numerals "
-			       "or punctuation; "
-			       "and cannot contain your account "
-			       "or full name; ");
+			     "must contain capitals, numerals or punctuation; "
+			     "and cannot contain your account or full name; ");
 		if (ret == -1) {
 			goto failed;
 		}
 		offset += ret;
 	}
 
-	ret = snprintf(str+offset, str_size-offset,
-		       "Please type a different password. "
-		       "Type a password which meets these requirements in "
-		       "both text boxes.");
+	ret = snprintf(str+offset, str_size-offset, 
+		     "Please type a different password. "
+		     "Type a password which meets these requirements in both text boxes.");
 	if (ret == -1) {
 		goto failed;
 	}
@@ -1219,12 +997,12 @@
 }
 
 /* talk to winbindd */
-static int winbind_auth_request(struct pwb_context *ctx,
-				const char *user,
-				const char *pass,
-				const char *member,
+static int winbind_auth_request(pam_handle_t * pamh,
+				int ctrl, 
+				const char *user, 
+				const char *pass, 
+				const char *member, 
 				const char *cctype,
-				const int warn_pwd_expire,
 				struct winbindd_response *p_response,
 				time_t *pwd_last_set,
 				char **user_ret)
@@ -1232,7 +1010,7 @@
 	struct winbindd_request request;
 	struct winbindd_response response;
 	int ret;
-	bool already_expired = false;
+	BOOL already_expired = False;
 
 	ZERO_STRUCT(request);
 	ZERO_STRUCT(response);
@@ -1241,24 +1019,20 @@
 		*pwd_last_set = 0;
 	}
 
-	strncpy(request.data.auth.user, user,
+	strncpy(request.data.auth.user, user, 
 		sizeof(request.data.auth.user)-1);
 
-	strncpy(request.data.auth.pass, pass,
+	strncpy(request.data.auth.pass, pass, 
 		sizeof(request.data.auth.pass)-1);
 
 	request.data.auth.krb5_cc_type[0] = '\0';
 	request.data.auth.uid = -1;
+	
+	request.flags = WBFLAG_PAM_INFO3_TEXT |
+			WBFLAG_PAM_GET_PWD_POLICY |
+			WBFLAG_PAM_CONTACT_TRUSTDOM;
 
-	request.flags = WBFLAG_PAM_INFO3_TEXT | WBFLAG_PAM_GET_PWD_POLICY;
-
-	/* Krb5 auth always has to go against the KDC of the user's realm */
-
-	if (ctx->ctrl & WINBIND_KRB5_AUTH) {
-		request.flags |= WBFLAG_PAM_CONTACT_TRUSTDOM;
-	}
-
-	if (ctx->ctrl & (WINBIND_KRB5_AUTH|WINBIND_CACHED_LOGIN)) {
+	if (ctrl & (WINBIND_KRB5_AUTH|WINBIND_CACHED_LOGIN)) {
 		struct passwd *pwd = NULL;
 
 		pwd = getpwnam(user);
@@ -1268,18 +1042,15 @@
 		request.data.auth.uid = pwd->pw_uid;
 	}
 
-	if (ctx->ctrl & WINBIND_KRB5_AUTH) {
+	if (ctrl & WINBIND_KRB5_AUTH) {
 
-		_pam_log_debug(ctx, LOG_DEBUG,
-			       "enabling krb5 login flag\n");
+		_pam_log_debug(pamh, ctrl, LOG_DEBUG, "enabling krb5 login flag\n"); 
 
-		request.flags |= WBFLAG_PAM_KRB5 |
-				 WBFLAG_PAM_FALLBACK_AFTER_KRB5;
+		request.flags |= WBFLAG_PAM_KRB5 | WBFLAG_PAM_FALLBACK_AFTER_KRB5;
 	}
 
-	if (ctx->ctrl & WINBIND_CACHED_LOGIN) {
-		_pam_log_debug(ctx, LOG_DEBUG,
-			       "enabling cached login flag\n");
+	if (ctrl & WINBIND_CACHED_LOGIN) {
+		_pam_log_debug(pamh, ctrl, LOG_DEBUG, "enabling cached login flag\n"); 
 		request.flags |= WBFLAG_PAM_CACHED_LOGIN;
 	}
 
@@ -1289,31 +1060,25 @@
 	}
 
 	if (cctype != NULL) {
-		strncpy(request.data.auth.krb5_cc_type, cctype,
+		strncpy(request.data.auth.krb5_cc_type, cctype, 
 			sizeof(request.data.auth.krb5_cc_type) - 1);
-		_pam_log_debug(ctx, LOG_DEBUG,
-			       "enabling request for a %s krb5 ccache\n",
-			       cctype);
+		_pam_log_debug(pamh, ctrl, LOG_DEBUG, "enabling request for a %s krb5 ccache\n", cctype); 
 	}
 
 	request.data.auth.require_membership_of_sid[0] = '\0';
 
 	if (member != NULL) {
 
-		if (!winbind_name_list_to_sid_string_list(ctx, user,
-			member,
+		if (!winbind_name_list_to_sid_string_list(pamh, ctrl, user, member,
 			request.data.auth.require_membership_of_sid,
 			sizeof(request.data.auth.require_membership_of_sid))) {
 
-			_pam_log_debug(ctx, LOG_ERR,
-				       "failed to serialize membership of sid "
-				       "\"%s\"\n", member);
+			_pam_log_debug(pamh, ctrl, LOG_ERR, "failed to serialize membership of sid \"%s\"\n", member);
 			return PAM_AUTH_ERR;
 		}
 	}
 
-	ret = pam_winbind_request_log(ctx, WINBINDD_PAM_AUTH,
-				      &request, &response, user);
+	ret = pam_winbind_request_log(pamh, ctrl, WINBINDD_PAM_AUTH, &request, &response, user);
 
 	if (pwd_last_set) {
 		*pwd_last_set = response.data.auth.info3.pass_last_set_time;
@@ -1326,53 +1091,33 @@
 	}
 
 	if (ret) {
-		PAM_WB_REMARK_CHECK_RESPONSE_RET(ctx, response,
-						 "NT_STATUS_PASSWORD_EXPIRED");
-		PAM_WB_REMARK_CHECK_RESPONSE_RET(ctx, response,
-						 "NT_STATUS_PASSWORD_MUST_CHANGE");
-		PAM_WB_REMARK_CHECK_RESPONSE_RET(ctx, response,
-						 "NT_STATUS_INVALID_WORKSTATION");
-		PAM_WB_REMARK_CHECK_RESPONSE_RET(ctx, response,
-						 "NT_STATUS_INVALID_LOGON_HOURS");
-		PAM_WB_REMARK_CHECK_RESPONSE_RET(ctx, response,
-						 "NT_STATUS_ACCOUNT_EXPIRED");
-		PAM_WB_REMARK_CHECK_RESPONSE_RET(ctx, response,
-						 "NT_STATUS_ACCOUNT_DISABLED");
-		PAM_WB_REMARK_CHECK_RESPONSE_RET(ctx, response,
-						 "NT_STATUS_ACCOUNT_LOCKED_OUT");
-		PAM_WB_REMARK_CHECK_RESPONSE_RET(ctx, response,
-						 "NT_STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT");
-		PAM_WB_REMARK_CHECK_RESPONSE_RET(ctx, response,
-						 "NT_STATUS_NOLOGON_SERVER_TRUST_ACCOUNT");
-		PAM_WB_REMARK_CHECK_RESPONSE_RET(ctx, response,
-						 "NT_STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT");
-		PAM_WB_REMARK_CHECK_RESPONSE_RET(ctx, response,
-						 "NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND");
-		PAM_WB_REMARK_CHECK_RESPONSE_RET(ctx, response,
-						 "NT_STATUS_NO_LOGON_SERVERS");
-		PAM_WB_REMARK_CHECK_RESPONSE_RET(ctx, response,
-						 "NT_STATUS_WRONG_PASSWORD");
-		PAM_WB_REMARK_CHECK_RESPONSE_RET(ctx, response,
-						 "NT_STATUS_ACCESS_DENIED");
+		PAM_WB_REMARK_CHECK_RESPONSE_RET(pamh, ctrl, response, "NT_STATUS_PASSWORD_EXPIRED");
+		PAM_WB_REMARK_CHECK_RESPONSE_RET(pamh, ctrl, response, "NT_STATUS_PASSWORD_MUST_CHANGE");
+		PAM_WB_REMARK_CHECK_RESPONSE_RET(pamh, ctrl, response, "NT_STATUS_INVALID_WORKSTATION");
+		PAM_WB_REMARK_CHECK_RESPONSE_RET(pamh, ctrl, response, "NT_STATUS_INVALID_LOGON_HOURS");
+		PAM_WB_REMARK_CHECK_RESPONSE_RET(pamh, ctrl, response, "NT_STATUS_ACCOUNT_EXPIRED");
+		PAM_WB_REMARK_CHECK_RESPONSE_RET(pamh, ctrl, response, "NT_STATUS_ACCOUNT_DISABLED");
+		PAM_WB_REMARK_CHECK_RESPONSE_RET(pamh, ctrl, response, "NT_STATUS_ACCOUNT_LOCKED_OUT");
+		PAM_WB_REMARK_CHECK_RESPONSE_RET(pamh, ctrl, response, "NT_STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT");
+		PAM_WB_REMARK_CHECK_RESPONSE_RET(pamh, ctrl, response, "NT_STATUS_NOLOGON_SERVER_TRUST_ACCOUNT");
+		PAM_WB_REMARK_CHECK_RESPONSE_RET(pamh, ctrl, response, "NT_STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT");
+		PAM_WB_REMARK_CHECK_RESPONSE_RET(pamh, ctrl, response, "NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND");
+		PAM_WB_REMARK_CHECK_RESPONSE_RET(pamh, ctrl, response, "NT_STATUS_NO_LOGON_SERVERS");
+		PAM_WB_REMARK_CHECK_RESPONSE_RET(pamh, ctrl, response, "NT_STATUS_WRONG_PASSWORD");
+		PAM_WB_REMARK_CHECK_RESPONSE_RET(pamh, ctrl, response, "NT_STATUS_ACCESS_DENIED");
 	}
 
 	if (ret == PAM_SUCCESS) {
 
 		/* warn a user if the password is about to expire soon */
-		_pam_warn_password_expiry(ctx, &response,
-					  warn_pwd_expire,
-					  &already_expired);
+		_pam_warn_password_expiry(pamh, ctrl, &response, &already_expired);
 
-		if (already_expired == true) {
-			SMB_TIME_T last_set;
-			last_set = response.data.auth.info3.pass_last_set_time;
-			_pam_log_debug(ctx, LOG_DEBUG,
-				       "Password has expired "
-				       "(Password was last set: %lld, "
-				       "the policy says it should expire here "
-				       "%lld (now it's: %lu))\n",
-				       (long long int)last_set,
-				       (long long int)last_set +
+		if (already_expired == True) {
+			_pam_log_debug(pamh, ctrl, LOG_DEBUG, "Password has expired "
+				       "(Password was last set: %lld, the policy says "
+				       "it should expire here %lld (now it's: %lu))\n",
+				       response.data.auth.info3.pass_last_set_time, 
+				       response.data.auth.info3.pass_last_set_time +
 				       response.data.auth.policy.expire,
 				       time(NULL));
 
@@ -1380,25 +1125,18 @@
 		}
 
 		/* inform about logon type */
-		_pam_warn_logon_type(ctx, user,
-				     response.data.auth.info3.user_flgs);
+		_pam_warn_logon_type(pamh, ctrl, user, response.data.auth.info3.user_flgs);
 
-		/* inform about krb5 failures */
-		_pam_warn_krb5_failure(ctx, user,
-				       response.data.auth.info3.user_flgs);
-
 		/* set some info3 info for other modules in the stack */
-		_pam_set_data_info3(ctx, &response);
+		_pam_set_data_info3(pamh, ctrl, &response);
 
 		/* put krb5ccname into env */
-		_pam_setup_krb5_env(ctx, response.data.auth.krb5ccname);
+		_pam_setup_krb5_env(pamh, ctrl, response.data.auth.krb5ccname);
 
-		/* If winbindd returned a username, return the pointer to it
-		 * here. */
-		if (user_ret && response.data.auth.unix_username[0]) {
+		/* If winbindd returned a username, return the pointer to it here. */
+		if (user_ret && response.extra_data.data) {
 			/* We have to trust it's a null terminated string. */
-			*user_ret = strndup(response.data.auth.unix_username,
-				    sizeof(response.data.auth.unix_username) - 1);
+			*user_ret = (char *)response.extra_data.data;
 		}
 	}
 
@@ -1406,11 +1144,12 @@
 }
 
 /* talk to winbindd */
-static int winbind_chauthtok_request(struct pwb_context *ctx,
-				     const char *user,
+static int winbind_chauthtok_request(pam_handle_t * pamh,
+				     int ctrl,
+				     const char *user, 
 				     const char *oldpass,
 				     const char *newpass,
-				     time_t pwd_last_set)
+				     time_t pwd_last_set) 
 {
 	struct winbindd_request request;
 	struct winbindd_response response;
@@ -1419,105 +1158,82 @@
 	ZERO_STRUCT(request);
 	ZERO_STRUCT(response);
 
-	if (request.data.chauthtok.user == NULL) {
-		return -2;
-	}
+	if (request.data.chauthtok.user == NULL) return -2;
 
-	strncpy(request.data.chauthtok.user, user,
+	strncpy(request.data.chauthtok.user, user, 
 		sizeof(request.data.chauthtok.user) - 1);
 
 	if (oldpass != NULL) {
-		strncpy(request.data.chauthtok.oldpass, oldpass,
+		strncpy(request.data.chauthtok.oldpass, oldpass, 
 			sizeof(request.data.chauthtok.oldpass) - 1);
 	} else {
 		request.data.chauthtok.oldpass[0] = '\0';
 	}
-
+	
 	if (newpass != NULL) {
-		strncpy(request.data.chauthtok.newpass, newpass,
+		strncpy(request.data.chauthtok.newpass, newpass, 
 			sizeof(request.data.chauthtok.newpass) - 1);
 	} else {
 		request.data.chauthtok.newpass[0] = '\0';
 	}
 
-	if (ctx->ctrl & WINBIND_KRB5_AUTH) {
-		request.flags = WBFLAG_PAM_KRB5 |
-				WBFLAG_PAM_CONTACT_TRUSTDOM;
+	if (ctrl & WINBIND_KRB5_AUTH) {
+		request.flags = WBFLAG_PAM_KRB5 | WBFLAG_PAM_CONTACT_TRUSTDOM;
 	}
 
-	ret = pam_winbind_request_log(ctx, WINBINDD_PAM_CHAUTHTOK,
-				      &request, &response, user);
+	ret = pam_winbind_request_log(pamh, ctrl, WINBINDD_PAM_CHAUTHTOK, &request, &response, user);
 
 	if (ret == PAM_SUCCESS) {
 		return ret;
 	}
 
-	PAM_WB_REMARK_CHECK_RESPONSE_RET(ctx, response,
-					 "NT_STATUS_BACKUP_CONTROLLER");
-	PAM_WB_REMARK_CHECK_RESPONSE_RET(ctx, response,
-					 "NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND");
-	PAM_WB_REMARK_CHECK_RESPONSE_RET(ctx, response,
-					 "NT_STATUS_NO_LOGON_SERVERS");
-	PAM_WB_REMARK_CHECK_RESPONSE_RET(ctx, response,
-					 "NT_STATUS_ACCESS_DENIED");
+	PAM_WB_REMARK_CHECK_RESPONSE_RET(pamh, ctrl, response, "NT_STATUS_BACKUP_CONTROLLER");
+	PAM_WB_REMARK_CHECK_RESPONSE_RET(pamh, ctrl, response, "NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND");
+	PAM_WB_REMARK_CHECK_RESPONSE_RET(pamh, ctrl, response, "NT_STATUS_NO_LOGON_SERVERS");
+	PAM_WB_REMARK_CHECK_RESPONSE_RET(pamh, ctrl, response, "NT_STATUS_ACCESS_DENIED");
 
 	/* TODO: tell the min pwd length ? */
-	PAM_WB_REMARK_CHECK_RESPONSE_RET(ctx, response,
-					 "NT_STATUS_PWD_TOO_SHORT");
+	PAM_WB_REMARK_CHECK_RESPONSE_RET(pamh, ctrl, response, "NT_STATUS_PWD_TOO_SHORT");
 
 	/* TODO: tell the minage ? */
-	PAM_WB_REMARK_CHECK_RESPONSE_RET(ctx, response,
-					 "NT_STATUS_PWD_TOO_RECENT");
+	PAM_WB_REMARK_CHECK_RESPONSE_RET(pamh, ctrl, response, "NT_STATUS_PWD_TOO_RECENT");
 
 	/* TODO: tell the history length ? */
-	PAM_WB_REMARK_CHECK_RESPONSE_RET(ctx, response,
-					 "NT_STATUS_PWD_HISTORY_CONFLICT");
+	PAM_WB_REMARK_CHECK_RESPONSE_RET(pamh, ctrl, response, "NT_STATUS_PWD_HISTORY_CONFLICT");
 
-	if (!strcasecmp(response.data.auth.nt_status_string,
-			"NT_STATUS_PASSWORD_RESTRICTION")) {
+	if (!strcasecmp(response.data.auth.nt_status_string, "NT_STATUS_PASSWORD_RESTRICTION")) {
 
 		char *pwd_restriction_string = NULL;
-		SMB_TIME_T min_pwd_age;
-		uint32_t reject_reason = response.data.auth.reject_reason;
-		min_pwd_age = response.data.auth.policy.min_passwordage;
 
 		/* FIXME: avoid to send multiple PAM messages after another */
-		switch (reject_reason) {
+		switch (response.data.auth.reject_reason) {
 			case -1:
 				break;
-			case SAMR_REJECT_OTHER:
-				if ((min_pwd_age > 0) &&
-				    (pwd_last_set + min_pwd_age > time(NULL))) {
-					PAM_WB_REMARK_DIRECT(ctx,
-					     "NT_STATUS_PWD_TOO_RECENT");
+			case REJECT_REASON_OTHER:
+				if ((response.data.auth.policy.min_passwordage > 0) &&
+				    (pwd_last_set + response.data.auth.policy.min_passwordage > time(NULL))) {
+					PAM_WB_REMARK_DIRECT(pamh, ctrl, "NT_STATUS_PWD_TOO_RECENT");
 				}
 				break;
-			case SAMR_REJECT_TOO_SHORT:
-				PAM_WB_REMARK_DIRECT(ctx,
-					"NT_STATUS_PWD_TOO_SHORT");
+			case REJECT_REASON_TOO_SHORT:
+				PAM_WB_REMARK_DIRECT(pamh, ctrl, "NT_STATUS_PWD_TOO_SHORT");
 				break;
-			case SAMR_REJECT_IN_HISTORY:
-				PAM_WB_REMARK_DIRECT(ctx,
-					"NT_STATUS_PWD_HISTORY_CONFLICT");
+			case REJECT_REASON_IN_HISTORY:
+				PAM_WB_REMARK_DIRECT(pamh, ctrl, "NT_STATUS_PWD_HISTORY_CONFLICT");
 				break;
-			case SAMR_REJECT_COMPLEXITY:
-				_make_remark(ctx, PAM_ERROR_MSG,
-					     "Password does not meet "
-					     "complexity requirements");
+			case REJECT_REASON_NOT_COMPLEX:
+				_make_remark(pamh, ctrl, PAM_ERROR_MSG, "Password does not meet complexity requirements");
 				break;
 			default:
-				_pam_log_debug(ctx, LOG_DEBUG,
-					       "unknown password change "
-					       "reject reason: %d",
-					       reject_reason);
+				_pam_log_debug(pamh, ctrl, LOG_DEBUG,
+					       "unknown password change reject reason: %d", 
+					       response.data.auth.reject_reason);
 				break;
 		}
 
-		pwd_restriction_string =
-			_pam_compose_pwd_restriction_string(&response);
+		pwd_restriction_string = _pam_compose_pwd_restriction_string(&response);
 		if (pwd_restriction_string) {
-			_make_remark(ctx, PAM_ERROR_MSG,
-				     pwd_restriction_string);
+			_make_remark(pamh, ctrl, PAM_ERROR_MSG, pwd_restriction_string);
 			SAFE_FREE(pwd_restriction_string);
 		}
 	}
@@ -1533,8 +1249,7 @@
  *	 0  = OK
  * 	-1  = System error
  */
-static int valid_user(struct pwb_context *ctx,
-		      const char *user)
+static int valid_user(pam_handle_t *pamh, int ctrl, const char *user)
 {
 	/* check not only if the user is available over NSS calls, also make
 	 * sure it's really a winbind user, this is important when stacking PAM
@@ -1556,8 +1271,7 @@
 	strncpy(request.data.username, user,
 		sizeof(request.data.username) - 1);
 
-	ret = pam_winbind_request_log(ctx, WINBINDD_GETPWNAM,
-				      &request, &response, user);
+	ret = pam_winbind_request_log(pamh, ctrl, WINBINDD_GETPWNAM, &request, &response, user);
 
 	switch (ret) {
 		case PAM_USER_UNKNOWN:
@@ -1581,7 +1295,7 @@
  * obtain a password from the user
  */
 
-static int _winbind_read_password(struct pwb_context *ctx,
+static int _winbind_read_password(pam_handle_t * pamh,
 				  unsigned int ctrl,
 				  const char *comment,
 				  const char *prompt1,
@@ -1593,7 +1307,7 @@
 	const char *item;
 	char *token;
 
-	_pam_log(ctx, LOG_DEBUG, "getting password (0x%08x)", ctrl);
+	_pam_log(pamh, ctrl, LOG_DEBUG, "getting password (0x%08x)", ctrl);
 
 	/*
 	 * make sure nothing inappropriate gets returned
@@ -1605,33 +1319,28 @@
 	 * which authentication token are we getting?
 	 */
 
-	if (on(WINBIND__OLD_PASSWORD, ctrl)) {
-		authtok_flag = PAM_OLDAUTHTOK;
-	} else {
-		authtok_flag = PAM_AUTHTOK;
-	}
+	authtok_flag = on(WINBIND__OLD_PASSWORD, ctrl) ? PAM_OLDAUTHTOK : PAM_AUTHTOK;
 
 	/*
 	 * should we obtain the password from a PAM item ?
 	 */
 
-	if (on(WINBIND_TRY_FIRST_PASS_ARG, ctrl) ||
-	    on(WINBIND_USE_FIRST_PASS_ARG, ctrl)) {
-		retval = _pam_get_item(ctx->pamh, authtok_flag, &item);
+	if (on(WINBIND_TRY_FIRST_PASS_ARG, ctrl) || on(WINBIND_USE_FIRST_PASS_ARG, ctrl)) {
+		retval = _pam_get_item(pamh, authtok_flag, &item);
 		if (retval != PAM_SUCCESS) {
 			/* very strange. */
-			_pam_log(ctx, LOG_ALERT,
-				 "pam_get_item returned error "
-				 "to unix-read-password");
+			_pam_log(pamh, ctrl, LOG_ALERT, 
+				 "pam_get_item returned error to unix-read-password"
+			    );
 			return retval;
 		} else if (item != NULL) {	/* we have a password! */
 			*pass = item;
 			item = NULL;
-			_pam_log(ctx, LOG_DEBUG,
+			_pam_log(pamh, ctrl, LOG_DEBUG, 
 				 "pam_get_item returned a password");
 			return PAM_SUCCESS;
 		} else if (on(WINBIND_USE_FIRST_PASS_ARG, ctrl)) {
-			return PAM_AUTHTOK_RECOVER_ERR;	/* didn't work */
+			return PAM_AUTHTOK_RECOVER_ERR;		/* didn't work */
 		} else if (on(WINBIND_USE_AUTHTOK_ARG, ctrl)
 			   && off(WINBIND__OLD_PASSWORD, ctrl)) {
 			return PAM_AUTHTOK_RECOVER_ERR;
@@ -1652,7 +1361,7 @@
 		if (comment != NULL && off(ctrl, WINBIND_SILENT)) {
 			pmsg[0] = &msg[0];
 			msg[0].msg_style = PAM_TEXT_INFO;
-			msg[0].msg = discard_const_p(char, comment);
+			msg[0].msg = CONST_DISCARD(char *, comment);
 			i = 1;
 		} else {
 			i = 0;
@@ -1660,76 +1369,72 @@
 
 		pmsg[i] = &msg[i];
 		msg[i].msg_style = PAM_PROMPT_ECHO_OFF;
-		msg[i++].msg = discard_const_p(char, prompt1);
+		msg[i++].msg = CONST_DISCARD(char *, prompt1);
 		replies = 1;
 
 		if (prompt2 != NULL) {
 			pmsg[i] = &msg[i];
 			msg[i].msg_style = PAM_PROMPT_ECHO_OFF;
-			msg[i++].msg = discard_const_p(char, prompt2);
+			msg[i++].msg = CONST_DISCARD(char *, prompt2);
 			++replies;
 		}
 		/* so call the conversation expecting i responses */
 		resp = NULL;
-		retval = converse(ctx->pamh, i, pmsg, &resp);
-		if (resp == NULL) {
-			if (retval == PAM_SUCCESS) {
-				retval = PAM_AUTHTOK_RECOVER_ERR;
-			}
-			goto done;
-		}
-		if (retval != PAM_SUCCESS) {
-			_pam_drop_reply(resp, i);
-			goto done;
-		}
+		retval = converse(pamh, i, pmsg, &resp);
 
-		/* interpret the response */
+		if (resp != NULL) {
 
-		token = x_strdup(resp[i - replies].resp);
-		if (!token) {
-			_pam_log(ctx, LOG_NOTICE,
-				 "could not recover "
-				 "authentication token");
-			retval = PAM_AUTHTOK_RECOVER_ERR;
-			goto done;
-		}
+			/* interpret the response */
 
-		if (replies == 2) {
-			/* verify that password entered correctly */
-			if (!resp[i - 1].resp ||
-			    strcmp(token, resp[i - 1].resp)) {
-				_pam_delete(token);	/* mistyped */
-				retval = PAM_AUTHTOK_RECOVER_ERR;
-				_make_remark(ctx, PAM_ERROR_MSG,
-					     MISTYPED_PASS);
+			if (retval == PAM_SUCCESS) {	/* a good conversation */
+
+				token = x_strdup(resp[i - replies].resp);
+				if (token != NULL) {
+					if (replies == 2) {
+						/* verify that password entered correctly */
+						if (!resp[i - 1].resp
+						    || strcmp(token, resp[i - 1].resp)) {
+							_pam_delete(token);	/* mistyped */
+							retval = PAM_AUTHTOK_RECOVER_ERR;
+							_make_remark(pamh, ctrl, PAM_ERROR_MSG, MISTYPED_PASS);
+						}
+					}
+				} else {
+					_pam_log(pamh, ctrl, LOG_NOTICE, "could not recover authentication token");
+					retval = PAM_AUTHTOK_RECOVER_ERR;
+				}
+
 			}
-		}
+			/*
+			 * tidy up the conversation (resp_retcode) is ignored
+			 * -- what is it for anyway? AGM
+			 */
 
-		/*
-		 * tidy up the conversation (resp_retcode) is ignored
-		 * -- what is it for anyway? AGM
-		 */
-		_pam_drop_reply(resp, i);
+			_pam_drop_reply(resp, i);
+
+		} else {
+			retval = (retval == PAM_SUCCESS)
+			    ? PAM_AUTHTOK_RECOVER_ERR : retval;
+		}
 	}
 
- done:
 	if (retval != PAM_SUCCESS) {
-		_pam_log_debug(ctx, LOG_DEBUG,
-			       "unable to obtain a password");
+		_pam_log_debug(pamh, ctrl, LOG_DEBUG,
+			         "unable to obtain a password");
 		return retval;
 	}
 	/* 'token' is the entered password */
 
 	/* we store this password as an item */
-
-	retval = pam_set_item(ctx->pamh, authtok_flag, token);
+	
+	retval = pam_set_item(pamh, authtok_flag, token);
 	_pam_delete(token);	/* clean it up */
-	if (retval != PAM_SUCCESS ||
-	    (retval = _pam_get_item(ctx->pamh, authtok_flag, &item)) != PAM_SUCCESS) {
-
-		_pam_log(ctx, LOG_CRIT, "error manipulating password");
+	if (retval != PAM_SUCCESS || 
+	    (retval = _pam_get_item(pamh, authtok_flag, &item)) != PAM_SUCCESS) {
+		
+		_pam_log(pamh, ctrl, LOG_CRIT, "error manipulating password");
 		return retval;
-
+		
 	}
 
 	*pass = item;
@@ -1738,215 +1443,70 @@
 	return PAM_SUCCESS;
 }
 
-static const char *get_conf_item_string(struct pwb_context *ctx,
-					const char *item,
-					int config_flag)
+const char *get_conf_item_string(const pam_handle_t *pamh,
+				 int argc, 
+				 const char **argv, 
+				 int ctrl,
+				 dictionary *d,
+				 const char *item, 
+				 int config_flag)
 {
 	int i = 0;
 	const char *parm_opt = NULL;
+	char *key = NULL;
 
-	if (!(ctx->ctrl & config_flag)) {
+	if (!(ctrl & config_flag)) {
 		goto out;
 	}
 
 	/* let the pam opt take precedence over the pam_winbind.conf option */
-	for (i=0; i<ctx->argc; i++) {
 
-		if ((strncmp(ctx->argv[i], item, strlen(item)) == 0)) {
-			char *p;
+	if (d != NULL) {
 
-			if ((p = strchr(ctx->argv[i], '=')) == NULL) {
-				_pam_log(ctx, LOG_INFO,
-					 "no \"=\" delimiter for \"%s\" found\n",
-					 item);
-				goto out;
-			}
-			_pam_log_debug(ctx, LOG_INFO,
-				       "PAM config: %s '%s'\n", item, p+1);
-			return p + 1;
-		}
-	}
-
-	if (ctx->dict) {
-		char *key = NULL;
-
 		if (!asprintf(&key, "global:%s", item)) {
 			goto out;
 		}
 
-		parm_opt = iniparser_getstr(ctx->dict, key);
+		parm_opt = iniparser_getstr(d, key);
 		SAFE_FREE(key);
-
-		_pam_log_debug(ctx, LOG_INFO, "CONFIG file: %s '%s'\n",
-			       item, parm_opt);
 	}
-out:
-	return parm_opt;
-}
 
-static int get_config_item_int(struct pwb_context *ctx,
-			       const char *item,
-			       int config_flag)
-{
-	int i, parm_opt = -1;
+	for ( i=0; i<argc; i++ ) {
 
-	if (!(ctx->ctrl & config_flag)) {
-		goto out;
-	}
-
-	/* let the pam opt take precedence over the pam_winbind.conf option */
-	for (i = 0; i < ctx->argc; i++) {
-
-		if ((strncmp(ctx->argv[i], item, strlen(item)) == 0)) {
+		if ((strncmp(argv[i], item, strlen(item)) == 0)) {
 			char *p;
 
-			if ((p = strchr(ctx->argv[i], '=')) == NULL) {
-				_pam_log(ctx, LOG_INFO,
-					 "no \"=\" delimiter for \"%s\" found\n",
-					 item);
+			if ( (p = strchr( argv[i], '=' )) == NULL) {
+				_pam_log(pamh, ctrl, LOG_INFO, "no \"=\" delimiter for \"%s\" found\n", item);
 				goto out;
 			}
-			parm_opt = atoi(p + 1);
-			_pam_log_debug(ctx, LOG_INFO,
-				       "PAM config: %s '%d'\n",
-				       item, parm_opt);
-			return parm_opt;
+			_pam_log_debug(pamh, ctrl, LOG_INFO, "PAM config: %s '%s'\n", item, p+1);
+			return p + 1;
 		}
 	}
 
-	if (ctx->dict) {
-		char *key = NULL;
-
-		if (!asprintf(&key, "global:%s", item)) {
-			goto out;
-		}
-
-		parm_opt = iniparser_getint(ctx->dict, key, -1);
-		SAFE_FREE(key);
-
-		_pam_log_debug(ctx, LOG_INFO,
-			       "CONFIG file: %s '%d'\n",
-			       item, parm_opt);
+	if (d != NULL) {
+		_pam_log_debug(pamh, ctrl, LOG_INFO, "CONFIG file: %s '%s'\n", item, parm_opt);
 	}
 out:
 	return parm_opt;
 }
 
-static const char *get_krb5_cc_type_from_config(struct pwb_context *ctx)
+const char *get_krb5_cc_type_from_config(const pam_handle_t *pamh, int argc, const char **argv, int ctrl, dictionary *d)
 {
-	return get_conf_item_string(ctx, "krb5_ccache_type",
-				    WINBIND_KRB5_CCACHE_TYPE);
+	return get_conf_item_string(pamh, argc, argv, ctrl, d, "krb5_ccache_type", WINBIND_KRB5_CCACHE_TYPE);
 }
 
-static const char *get_member_from_config(struct pwb_context *ctx)
+const char *get_member_from_config(const pam_handle_t *pamh, int argc, const char **argv, int ctrl, dictionary *d)
 {
 	const char *ret = NULL;
-	ret = get_conf_item_string(ctx, "require_membership_of",
-				   WINBIND_REQUIRED_MEMBERSHIP);
+	ret = get_conf_item_string(pamh, argc, argv, ctrl, d, "require_membership_of", WINBIND_REQUIRED_MEMBERSHIP);
 	if (ret) {
 		return ret;
 	}
-	return get_conf_item_string(ctx, "require-membership-of",
-				    WINBIND_REQUIRED_MEMBERSHIP);
+	return get_conf_item_string(pamh, argc, argv, ctrl, d, "require-membership-of", WINBIND_REQUIRED_MEMBERSHIP);
 }
 
-static int get_warn_pwd_expire_from_config(struct pwb_context *ctx)
-{
-	int ret;
-	ret = get_config_item_int(ctx, "warn_pwd_expire",
-				  WINBIND_WARN_PWD_EXPIRE);
-	/* no or broken setting */
-	if (ret <= 0) {
-		return DEFAULT_DAYS_TO_WARN_BEFORE_PWD_EXPIRES;
-	}
-	return ret;
-}
-
-/**
- * Retrieve the winbind separator.
- *
- * @param pamh PAM handle
- * @param ctrl PAM winbind options.
- *
- * @return string separator character. NULL on failure.
- */
-
-static char winbind_get_separator(struct pwb_context *ctx)
-{
-	struct winbindd_request request;
-	struct winbindd_response response;
-
-	ZERO_STRUCT(request);
-	ZERO_STRUCT(response);
-
-	if (pam_winbind_request_log(ctx, WINBINDD_INFO,
-				    &request, &response, NULL)) {
-		return '\0';
-	}
-
-	return response.data.info.winbind_separator;
-}
-
-/**
- * Convert a upn to a name.
- *
- * @param pamh PAM handle
- * @param ctrl PAM winbind options.
- * @param upn  USer UPN to be trabslated.
- *
- * @return converted name. NULL pointer on failure. Caller needs to free.
- */
-
-static char* winbind_upn_to_username(struct pwb_context *ctx,
-				     const char *upn)
-{
-	struct winbindd_request req;
-	struct winbindd_response resp;
-	int retval;
-	char *account_name;
-	int account_name_len;
-	char sep;
-
-	/* This cannot work when the winbind separator = @ */
-
-	sep = winbind_get_separator(ctx);
-	if (!sep || sep == '@') {
-		return NULL;
-	}
-
-	/* Convert the UPN to a SID */
-
-	ZERO_STRUCT(req);
-	ZERO_STRUCT(resp);
-
-	strncpy(req.data.name.dom_name, "",
-		sizeof(req.data.name.dom_name) - 1);
-	strncpy(req.data.name.name, upn,
-		sizeof(req.data.name.name) - 1);
-	retval = pam_winbind_request_log(ctx, WINBINDD_LOOKUPNAME,
-					 &req, &resp, upn);
-	if (retval != PAM_SUCCESS) {
-		return NULL;
-	}
-
-	/* Convert the the SID back to the sAMAccountName */
-
-	ZERO_STRUCT(req);
-	strncpy(req.data.sid, resp.data.sid.sid, sizeof(req.data.sid)-1);
-	ZERO_STRUCT(resp);
-	retval =  pam_winbind_request_log(ctx, WINBINDD_LOOKUPSID,
-					  &req, &resp, upn);
-	if (retval != PAM_SUCCESS) {
-		return NULL;
-	}
-
-	account_name_len = asprintf(&account_name, "%s\\%s",
-				    resp.data.name.dom_name,
-				    resp.data.name.name);
-
-	return account_name;
-}
-
 PAM_EXTERN
 int pam_sm_authenticate(pam_handle_t *pamh, int flags,
 			int argc, const char **argv)
@@ -1955,75 +1515,59 @@
 	const char *password;
 	const char *member = NULL;
 	const char *cctype = NULL;
-	int warn_pwd_expire;
 	int retval = PAM_AUTH_ERR;
+	dictionary *d = NULL;
 	char *username_ret = NULL;
 	char *new_authtok_required = NULL;
 	char *real_username = NULL;
-	struct pwb_context *ctx = NULL;
 
-	retval = _pam_winbind_init_context(pamh, flags, argc, argv, &ctx);
-	if (retval) {
+	/* parse arguments */
+	int ctrl = _pam_parse(pamh, flags, argc, argv, &d);
+	if (ctrl == -1) {
+		retval = PAM_SYSTEM_ERR;
 		goto out;
 	}
 
-	_PAM_LOG_FUNCTION_ENTER("pam_sm_authenticate", ctx);
+	_PAM_LOG_FUNCTION_ENTER("pam_sm_authenticate", pamh, ctrl, flags);
 
 	/* Get the username */
 	retval = pam_get_user(pamh, &username, NULL);
 	if ((retval != PAM_SUCCESS) || (!username)) {
-		_pam_log_debug(ctx, LOG_DEBUG,
-			       "can not get the username");
+		_pam_log_debug(pamh, ctrl, LOG_DEBUG, "can not get the username");
 		retval = PAM_SERVICE_ERR;
 		goto out;
 	}
 
-
 #if defined(AIX)
 	/* Decode the user name since AIX does not support logn user
 	   names by default.  The name is encoded as _#uid.  */
 
-	if (username[0] == '_') {
-		uid_t id = atoi(&username[1]);
-		struct passwd *pw = NULL;
+	if ( username[0] == '_' ) {
+		uid_t id = atoi( &username[1] );
+		struct passwd *pw = NULL;		
 
-		if ((id!=0) && ((pw = getpwuid(id)) != NULL)) {
-			real_username = strdup(pw->pw_name);
+		if ( (id!=0) && ((pw = getpwuid( id )) != NULL) ) {
+			real_username = strdup( pw->pw_name );
 		}
 	}
 #endif
 
-	if (!real_username) {
+	if ( !real_username ) {
 		/* Just making a copy of the username we got from PAM */
-		if ((real_username = strdup(username)) == NULL) {
-			_pam_log_debug(ctx, LOG_DEBUG,
-				       "memory allocation failure when copying "
-				       "username");
+		if ( (real_username = strdup( username )) == NULL ) {
+			_pam_log_debug(pamh, ctrl, LOG_DEBUG, 
+				       "memory allocation failure when copying username");
 			retval = PAM_SERVICE_ERR;
 			goto out;
 		}
-	}
+	}	
 
-	/* Maybe this was a UPN */
-
-	if (strchr(real_username, '@') != NULL) {
-		char *samaccountname = NULL;
-
-		samaccountname = winbind_upn_to_username(ctx,
-							 real_username);
-		if (samaccountname) {
-			free(real_username);
-			real_username = samaccountname;
-		}
-	}
-
-	retval = _winbind_read_password(ctx, ctx->ctrl, NULL,
+	retval = _winbind_read_password(pamh, ctrl, NULL, 
 					"Password: ", NULL,
 					&password);
 
 	if (retval != PAM_SUCCESS) {
-		_pam_log(ctx, LOG_ERR,
-			 "Could not retrieve user's password");
+		_pam_log(pamh, ctrl, LOG_ERR, "Could not retrieve user's password");
 		retval = PAM_AUTHTOK_ERR;
 		goto out;
 	}
@@ -2031,22 +1575,19 @@
 	/* Let's not give too much away in the log file */
 
 #ifdef DEBUG_PASSWORD
-	_pam_log_debug(ctx, LOG_INFO,
-		       "Verify user '%s' with password '%s'",
+	_pam_log_debug(pamh, ctrl, LOG_INFO, "Verify user '%s' with password '%s'", 
 		       real_username, password);
 #else
-	_pam_log_debug(ctx, LOG_INFO,
-		       "Verify user '%s'", real_username);
+	_pam_log_debug(pamh, ctrl, LOG_INFO, "Verify user '%s'", real_username);
 #endif
 
-	member = get_member_from_config(ctx);
-	cctype = get_krb5_cc_type_from_config(ctx);
-	warn_pwd_expire = get_warn_pwd_expire_from_config(ctx);
+	member = get_member_from_config(pamh, argc, argv, ctrl, d);
 
+	cctype = get_krb5_cc_type_from_config(pamh, argc, argv, ctrl, d);
+
 	/* Now use the username to look up password */
-	retval = winbind_auth_request(ctx, real_username, password,
-				      member, cctype, warn_pwd_expire, NULL,
-				      NULL, &username_ret);
+	retval = winbind_auth_request(pamh, ctrl, username, password, member,
+				      cctype, NULL, NULL, &username_ret);
 
 	if (retval == PAM_NEW_AUTHTOK_REQD ||
 	    retval == PAM_AUTHTOK_EXPIRED) {
@@ -2058,20 +1599,17 @@
 			goto out;
 		}
 
-		pam_set_data(pamh, PAM_WINBIND_NEW_AUTHTOK_REQD,
-			     new_authtok_required,
-			     _pam_winbind_cleanup_func);
+		pam_set_data(pamh, PAM_WINBIND_NEW_AUTHTOK_REQD, new_authtok_required, _pam_winbind_cleanup_func);
 
 		retval = PAM_SUCCESS;
 
-		if (!asprintf(&new_authtok_required_during_auth, "%d", true)) {
+		if (!asprintf(&new_authtok_required_during_auth, "%d", True)) {
 			retval = PAM_BUF_ERR;
 			goto out;
 		}
 
-		pam_set_data(pamh, PAM_WINBIND_NEW_AUTHTOK_REQD_DURING_AUTH,
-			     new_authtok_required_during_auth,
-			     _pam_winbind_cleanup_func);
+		pam_set_data(pamh, PAM_WINBIND_NEW_AUTHTOK_REQD_DURING_AUTH, 
+			     new_authtok_required_during_auth, _pam_winbind_cleanup_func);
 
 		goto out;
 	}
@@ -2079,13 +1617,16 @@
 out:
 	if (username_ret) {
 		pam_set_item (pamh, PAM_USER, username_ret);
-		_pam_log_debug(ctx, LOG_INFO,
-			       "Returned user was '%s'", username_ret);
+		_pam_log_debug(pamh, ctrl, LOG_INFO, "Returned user was '%s'", username_ret);
 		free(username_ret);
 	}
 
-	if (real_username) {
-		free(real_username);
+	if ( real_username ) {		
+		free( real_username );
+	}	
+			
+	if (d) {
+		iniparser_freedict(d);
 	}
 
 	if (!new_authtok_required) {
@@ -2096,10 +1637,8 @@
 		_pam_free_data_info3(pamh);
 	}
 
-	_PAM_LOG_FUNCTION_LEAVE("pam_sm_authenticate", ctx, retval);
+	_PAM_LOG_FUNCTION_LEAVE("pam_sm_authenticate", pamh, ctrl, retval);
 
-	_pam_winbind_free_context(ctx);
-
 	return retval;
 }
 
@@ -2108,14 +1647,16 @@
 		   int argc, const char **argv)
 {
 	int ret = PAM_SYSTEM_ERR;
-	struct pwb_context *ctx = NULL;
+	dictionary *d = NULL;
 
-	ret = _pam_winbind_init_context(pamh, flags, argc, argv, &ctx);
-	if (ret) {
+	/* parse arguments */
+	int ctrl = _pam_parse(pamh, flags, argc, argv, &d);
+	if (ctrl == -1) {
+		ret = PAM_SYSTEM_ERR;
 		goto out;
 	}
 
-	_PAM_LOG_FUNCTION_ENTER("pam_sm_setcred", ctx);
+	_PAM_LOG_FUNCTION_ENTER("pam_sm_setcred", pamh, ctrl, flags);
 
 	switch (flags & ~PAM_SILENT) {
 
@@ -2123,18 +1664,15 @@
 			ret = pam_sm_close_session(pamh, flags, argc, argv);
 			break;
 		case PAM_REFRESH_CRED:
-			_pam_log_debug(ctx, LOG_WARNING,
-				       "PAM_REFRESH_CRED not implemented");
+			_pam_log_debug(pamh, ctrl, LOG_WARNING, "PAM_REFRESH_CRED not implemented");
 			ret = PAM_SUCCESS;
 			break;
 		case PAM_REINITIALIZE_CRED:
-			_pam_log_debug(ctx, LOG_WARNING,
-				       "PAM_REINITIALIZE_CRED not implemented");
+			_pam_log_debug(pamh, ctrl, LOG_WARNING, "PAM_REINITIALIZE_CRED not implemented");
 			ret = PAM_SUCCESS;
 			break;
 		case PAM_ESTABLISH_CRED:
-			_pam_log_debug(ctx, LOG_WARNING,
-				       "PAM_ESTABLISH_CRED not implemented");
+			_pam_log_debug(pamh, ctrl, LOG_WARNING, "PAM_ESTABLISH_CRED not implemented");
 			ret = PAM_SUCCESS;
 			break;
 		default:
@@ -2143,16 +1681,17 @@
 	}
 
  out:
+	if (d) {
+		iniparser_freedict(d);
+	}
 
-	_PAM_LOG_FUNCTION_LEAVE("pam_sm_setcred", ctx, ret);
-
-	_pam_winbind_free_context(ctx);
-
+	_PAM_LOG_FUNCTION_LEAVE("pam_sm_setcred", pamh, ctrl, ret);
+	
 	return ret;
 }
 
 /*
- * Account management. We want to verify that the account exists
+ * Account management. We want to verify that the account exists 
  * before returning PAM_SUCCESS
  */
 PAM_EXTERN
@@ -2162,27 +1701,27 @@
 	const char *username;
 	int ret = PAM_USER_UNKNOWN;
 	void *tmp = NULL;
-	struct pwb_context *ctx = NULL;
+	dictionary *d = NULL;
 
-	ret = _pam_winbind_init_context(pamh, flags, argc, argv, &ctx);
-	if (ret) {
-		goto out;
+	/* parse arguments */
+	int ctrl = _pam_parse(pamh, flags, argc, argv, &d);
+	if (ctrl == -1) {
+		return PAM_SYSTEM_ERR;
 	}
 
-	_PAM_LOG_FUNCTION_ENTER("pam_sm_acct_mgmt", ctx);
+	_PAM_LOG_FUNCTION_ENTER("pam_sm_acct_mgmt", pamh, ctrl, flags);
 
 
 	/* Get the username */
 	ret = pam_get_user(pamh, &username, NULL);
 	if ((ret != PAM_SUCCESS) || (!username)) {
-		_pam_log_debug(ctx, LOG_DEBUG,
-			       "can not get the username");
+		_pam_log_debug(pamh, ctrl, LOG_DEBUG,"can not get the username");
 		ret = PAM_SERVICE_ERR;
 		goto out;
 	}
 
 	/* Verify the username */
-	ret = valid_user(ctx, username);
+	ret = valid_user(pamh, ctrl, username);
 	switch (ret) {
 	case -1:
 		/* some sort of system error. The log was already printed */
@@ -2190,51 +1729,42 @@
 		goto out;
 	case 1:
 		/* the user does not exist */
-		_pam_log_debug(ctx, LOG_NOTICE, "user '%s' not found",
-			       username);
-		if (ctx->ctrl & WINBIND_UNKNOWN_OK_ARG) {
+		_pam_log_debug(pamh, ctrl, LOG_NOTICE, "user '%s' not found", username);
+		if (ctrl & WINBIND_UNKNOWN_OK_ARG) {
 			ret = PAM_IGNORE;
 			goto out;
 		}
 		ret = PAM_USER_UNKNOWN;
 		goto out;
 	case 0:
-		pam_get_data(pamh, PAM_WINBIND_NEW_AUTHTOK_REQD,
-			     (const void **)&tmp);
+		pam_get_data( pamh, PAM_WINBIND_NEW_AUTHTOK_REQD, (const void **)&tmp);
 		if (tmp != NULL) {
 			ret = atoi((const char *)tmp);
 			switch (ret) {
 			case PAM_AUTHTOK_EXPIRED:
 				/* fall through, since new token is required in this case */
 			case PAM_NEW_AUTHTOK_REQD:
-				_pam_log(ctx, LOG_WARNING,
-					 "pam_sm_acct_mgmt success but %s is set",
+				_pam_log(pamh, ctrl, LOG_WARNING, "pam_sm_acct_mgmt success but %s is set", 
 					 PAM_WINBIND_NEW_AUTHTOK_REQD);
-				_pam_log(ctx, LOG_NOTICE,
-					 "user '%s' needs new password",
-					 username);
+				_pam_log(pamh, ctrl, LOG_NOTICE, "user '%s' needs new password", username);
 				/* PAM_AUTHTOKEN_REQD does not exist, but is documented in the manpage */
 				ret = PAM_NEW_AUTHTOK_REQD;
 				goto out;
 			default:
-				_pam_log(ctx, LOG_WARNING,
-					 "pam_sm_acct_mgmt success");
-				_pam_log(ctx, LOG_NOTICE,
-					 "user '%s' granted access", username);
+				_pam_log(pamh, ctrl, LOG_WARNING, "pam_sm_acct_mgmt success");
+				_pam_log(pamh, ctrl, LOG_NOTICE, "user '%s' granted access", username);
 				ret = PAM_SUCCESS;
 				goto out;
 			}
 		}
 
 		/* Otherwise, the authentication looked good */
-		_pam_log(ctx, LOG_NOTICE,
-			 "user '%s' granted access", username);
+		_pam_log(pamh, ctrl, LOG_NOTICE, "user '%s' granted access", username);
 		ret = PAM_SUCCESS;
 		goto out;
 	default:
 		/* we don't know anything about this return value */
-		_pam_log(ctx, LOG_ERR,
-			 "internal module error (ret = %d, user = '%s')",
+		_pam_log(pamh, ctrl, LOG_ERR, "internal module error (ret = %d, user = '%s')", 
 			 ret, username);
 		ret = PAM_SERVICE_ERR;
 		goto out;
@@ -2245,10 +1775,12 @@
 
  out:
 
-	_PAM_LOG_FUNCTION_LEAVE("pam_sm_acct_mgmt", ctx, ret);
+ 	if (d) {
+		iniparser_freedict(d);
+	}
 
-	_pam_winbind_free_context(ctx);
-
+	_PAM_LOG_FUNCTION_LEAVE("pam_sm_acct_mgmt", pamh, ctrl, ret);
+	
 	return ret;
 }
 
@@ -2257,22 +1789,26 @@
 			int argc, const char **argv)
 {
 	int ret = PAM_SYSTEM_ERR;
-	struct pwb_context *ctx = NULL;
+	dictionary *d = NULL;
 
-	ret = _pam_winbind_init_context(pamh, flags, argc, argv, &ctx);
-	if (ret) {
+	/* parse arguments */
+	int ctrl = _pam_parse(pamh, flags, argc, argv, &d);
+	if (ctrl == -1) {
+		ret = PAM_SYSTEM_ERR;
 		goto out;
 	}
 
-	_PAM_LOG_FUNCTION_ENTER("pam_sm_open_session", ctx);
+	_PAM_LOG_FUNCTION_ENTER("pam_sm_open_session", pamh, ctrl, flags);
 
 	ret = PAM_SUCCESS;
 
  out:
-	_PAM_LOG_FUNCTION_LEAVE("pam_sm_open_session", ctx, ret);
+	if (d) {
+		iniparser_freedict(d);
+	}
 
-	_pam_winbind_free_context(ctx);
-
+	_PAM_LOG_FUNCTION_LEAVE("pam_sm_open_session", pamh, ctrl, ret);
+	
 	return ret;
 }
 
@@ -2280,22 +1816,24 @@
 int pam_sm_close_session(pam_handle_t *pamh, int flags,
 			 int argc, const char **argv)
 {
+	dictionary *d = NULL;
 	int retval = PAM_SUCCESS;
-	struct pwb_context *ctx = NULL;
 
-	retval = _pam_winbind_init_context(pamh, flags, argc, argv, &ctx);
-	if (retval) {
+	/* parse arguments */
+	int ctrl = _pam_parse(pamh, flags, argc, argv, &d);
+	if (ctrl == -1) {
+		retval = PAM_SYSTEM_ERR;
 		goto out;
 	}
 
-	_PAM_LOG_FUNCTION_ENTER("pam_sm_close_session", ctx);
+	_PAM_LOG_FUNCTION_ENTER("pam_sm_close_session", pamh, ctrl, flags);
 
 	if (!(flags & PAM_DELETE_CRED)) {
 		retval = PAM_SUCCESS;
 		goto out;
 	}
 
-	if (ctx->ctrl & WINBIND_KRB5_AUTH) {
+	if (ctrl & WINBIND_KRB5_AUTH) {
 
 		/* destroy the ccache here */
 		struct winbindd_request request;
@@ -2309,25 +1847,21 @@
 
 		retval = pam_get_user(pamh, &user, "Username: ");
 		if (retval) {
-			_pam_log(ctx, LOG_ERR,
-				 "could not identify user");
+			_pam_log(pamh, ctrl, LOG_ERR, "could not identify user");
 			goto out;
 		}
 
 		if (user == NULL) {
-			_pam_log(ctx, LOG_ERR,
-				 "username was NULL!");
+			_pam_log(pamh, ctrl, LOG_ERR, "username was NULL!");
 			retval = PAM_USER_UNKNOWN;
 			goto out;
 		}
 
-		_pam_log_debug(ctx, LOG_DEBUG,
-			       "username [%s] obtained", user);
+		_pam_log_debug(pamh, ctrl, LOG_DEBUG, "username [%s] obtained", user);
 
 		ccname = pam_getenv(pamh, "KRB5CCNAME");
 		if (ccname == NULL) {
-			_pam_log_debug(ctx, LOG_DEBUG,
-				       "user has no KRB5CCNAME environment");
+			_pam_log_debug(pamh, ctrl, LOG_DEBUG, "user has no KRB5CCNAME environment");
 		}
 
 		strncpy(request.data.logoff.user, user,
@@ -2345,79 +1879,73 @@
 		}
 		request.data.logoff.uid = pwd->pw_uid;
 
-		request.flags = WBFLAG_PAM_KRB5 |
-				WBFLAG_PAM_CONTACT_TRUSTDOM;
+		request.flags = WBFLAG_PAM_KRB5 | WBFLAG_PAM_CONTACT_TRUSTDOM;
 
-	        retval = pam_winbind_request_log(ctx,
-						 WINBINDD_PAM_LOGOFF,
-						 &request, &response, user);
+	        retval = pam_winbind_request_log(pamh, ctrl, WINBINDD_PAM_LOGOFF, &request, &response, user);
 	}
 
 out:
+	if (d) {
+		iniparser_freedict(d);
+	}
 
-	_PAM_LOG_FUNCTION_LEAVE("pam_sm_close_session", ctx, retval);
-
-	_pam_winbind_free_context(ctx);
-
+	_PAM_LOG_FUNCTION_LEAVE("pam_sm_close_session", pamh, ctrl, retval);
+	
 	return retval;
 }
 
 /**
- * evaluate whether we need to re-authenticate with kerberos after a
- * password change
- *
+ * evaluate whether we need to re-authenticate with kerberos after a password change
+ * 
  * @param pamh PAM handle
  * @param ctrl PAM winbind options.
  * @param user The username
  *
- * @return boolean Returns true if required, false if not.
+ * @return boolean Returns True if required, False if not.
  */
 
-static bool _pam_require_krb5_auth_after_chauthtok(struct pwb_context *ctx,
-						   const char *user)
+static BOOL _pam_require_krb5_auth_after_chauthtok(pam_handle_t *pamh, int ctrl, const char *user)
 {
 
-	/* Make sure that we only do this if a) the chauthtok got initiated
-	 * during a logon attempt (authenticate->acct_mgmt->chauthtok) b) any
-	 * later password change via the "passwd" command if done by the user
-	 * itself */
-
+	/* Make sure that we only do this if 
+	 * a) the chauthtok got initiated during a logon attempt (authenticate->acct_mgmt->chauthtok)
+	 * b) any later password change via the "passwd" command if done by the user itself 
+	 */
+		
 	char *new_authtok_reqd_during_auth = NULL;
 	struct passwd *pwd = NULL;
 
-	if (!(ctx->ctrl & WINBIND_KRB5_AUTH)) {
-		return false;
+	if (!(ctrl & WINBIND_KRB5_AUTH)) {
+		return False;
 	}
 
-	_pam_get_data(ctx->pamh, PAM_WINBIND_NEW_AUTHTOK_REQD_DURING_AUTH,
-		      &new_authtok_reqd_during_auth);
-	pam_set_data(ctx->pamh, PAM_WINBIND_NEW_AUTHTOK_REQD_DURING_AUTH,
-		     NULL, NULL);
+	_pam_get_data(pamh, PAM_WINBIND_NEW_AUTHTOK_REQD_DURING_AUTH, &new_authtok_reqd_during_auth);
+	pam_set_data(pamh, PAM_WINBIND_NEW_AUTHTOK_REQD_DURING_AUTH, NULL, NULL);
 
 	if (new_authtok_reqd_during_auth) {
-		return true;
+		return True;
 	}
 
 	pwd = getpwnam(user);
 	if (!pwd) {
-		return false;
+		return False;
 	}
 
 	if (getuid() == pwd->pw_uid) {
-		return true;
+		return True;
 	}
 
-	return false;
+	return False;
 }
 
 
-PAM_EXTERN
+PAM_EXTERN 
 int pam_sm_chauthtok(pam_handle_t * pamh, int flags,
 		     int argc, const char **argv)
 {
 	unsigned int lctrl;
 	int ret;
-	bool cached_login = false;
+	unsigned int ctrl;
 
 	/* <DO NOT free() THESE> */
 	const char *user;
@@ -2425,46 +1953,45 @@
 	/* </DO NOT free() THESE> */
 
 	char *Announce;
-
+	
 	int retry = 0;
+	dictionary *d = NULL;
 	char *username_ret = NULL;
 	struct winbindd_response response;
-	struct pwb_context *ctx = NULL;
 
 	ZERO_STRUCT(response);
 
-	ret = _pam_winbind_init_context(pamh, flags, argc, argv, &ctx);
-	if (ret) {
+	ctrl = _pam_parse(pamh, flags, argc, argv, &d);
+	if (ctrl == -1) {
+		ret = PAM_SYSTEM_ERR;
 		goto out;
 	}
 
-	_PAM_LOG_FUNCTION_ENTER("pam_sm_chauthtok", ctx);
+	_PAM_LOG_FUNCTION_ENTER("pam_sm_chauthtok", pamh, ctrl, flags);
 
-	cached_login = (ctx->ctrl & WINBIND_CACHED_LOGIN);
+	/* clearing offline bit for the auth in the password change */
+	ctrl &= ~WINBIND_CACHED_LOGIN;
 
-	/* clearing offline bit for auth */
-	ctx->ctrl &= ~WINBIND_CACHED_LOGIN;
-
 	/*
 	 * First get the name of a user
 	 */
 	ret = pam_get_user(pamh, &user, "Username: ");
 	if (ret) {
-		_pam_log(ctx, LOG_ERR,
+		_pam_log(pamh, ctrl, LOG_ERR,
 			 "password - could not identify user");
 		goto out;
 	}
 
 	if (user == NULL) {
-		_pam_log(ctx, LOG_ERR, "username was NULL!");
+		_pam_log(pamh, ctrl, LOG_ERR, "username was NULL!");
 		ret = PAM_USER_UNKNOWN;
 		goto out;
 	}
 
-	_pam_log_debug(ctx, LOG_DEBUG, "username [%s] obtained", user);
+	_pam_log_debug(pamh, ctrl, LOG_DEBUG, "username [%s] obtained", user);
 
 	/* check if this is really a user in winbindd, not only in NSS */
-	ret = valid_user(ctx, user);
+	ret = valid_user(pamh, ctrl, user);
 	switch (ret) {
 		case 1:
 			ret = PAM_USER_UNKNOWN;
@@ -2475,7 +2002,7 @@
 		default:
 			break;
 	}
-
+		
 	/*
 	 * obtain and verify the current password (OLDAUTHTOK) for
 	 * the user.
@@ -2483,78 +2010,71 @@
 
 	if (flags & PAM_PRELIM_CHECK) {
 		time_t pwdlastset_prelim = 0;
-
+		
 		/* instruct user what is happening */
 #define greeting "Changing password for "
 		Announce = (char *) malloc(sizeof(greeting) + strlen(user));
 		if (Announce == NULL) {
-			_pam_log(ctx, LOG_CRIT,
-				 "password - out of memory");
+			_pam_log(pamh, ctrl, LOG_CRIT, "password - out of memory");
 			ret = PAM_BUF_ERR;
 			goto out;
 		}
 		(void) strcpy(Announce, greeting);
 		(void) strcpy(Announce + sizeof(greeting) - 1, user);
 #undef greeting
-
-		lctrl = ctx->ctrl | WINBIND__OLD_PASSWORD;
-		ret = _winbind_read_password(ctx, lctrl,
+		
+		lctrl = ctrl | WINBIND__OLD_PASSWORD;
+		ret = _winbind_read_password(pamh, lctrl,
 						Announce,
 						"(current) NT password: ",
 						NULL,
 						(const char **) &pass_old);
 		if (ret != PAM_SUCCESS) {
-			_pam_log(ctx, LOG_NOTICE,
-				 "password - (old) token not obtained");
+			_pam_log(pamh, ctrl, LOG_NOTICE, "password - (old) token not obtained");
 			goto out;
 		}
 
 		/* verify that this is the password for this user */
+		
+		ret = winbind_auth_request(pamh, ctrl, user, pass_old,
+					NULL, NULL, &response, &pwdlastset_prelim, NULL);
 
-		ret = winbind_auth_request(ctx, user, pass_old,
-					   NULL, NULL, 0, &response,
-					   &pwdlastset_prelim, NULL);
-
-		if (ret != PAM_ACCT_EXPIRED &&
+		if (ret != PAM_ACCT_EXPIRED && 
 		    ret != PAM_AUTHTOK_EXPIRED &&
 		    ret != PAM_NEW_AUTHTOK_REQD &&
 		    ret != PAM_SUCCESS) {
 			pass_old = NULL;
 			goto out;
 		}
+		
+		pam_set_data(pamh, PAM_WINBIND_PWD_LAST_SET, (void *)pwdlastset_prelim, NULL);
 
-		pam_set_data(pamh, PAM_WINBIND_PWD_LAST_SET,
-			     (void *)pwdlastset_prelim, NULL);
-
-		ret = pam_set_item(pamh, PAM_OLDAUTHTOK,
-				   (const void *) pass_old);
+		ret = pam_set_item(pamh, PAM_OLDAUTHTOK, (const void *) pass_old);
 		pass_old = NULL;
 		if (ret != PAM_SUCCESS) {
-			_pam_log(ctx, LOG_CRIT,
-				 "failed to set PAM_OLDAUTHTOK");
+			_pam_log(pamh, ctrl, LOG_CRIT, "failed to set PAM_OLDAUTHTOK");
 		}
 	} else if (flags & PAM_UPDATE_AUTHTOK) {
-
+	
 		time_t pwdlastset_update = 0;
-
+		
 		/*
 		 * obtain the proposed password
 		 */
-
+		
 		/*
-		 * get the old token back.
+		 * get the old token back. 
 		 */
-
+		
 		ret = _pam_get_item(pamh, PAM_OLDAUTHTOK, &pass_old);
-
+		
 		if (ret != PAM_SUCCESS) {
-			_pam_log(ctx, LOG_NOTICE,
-				 "user not authenticated");
+			_pam_log(pamh, ctrl, LOG_NOTICE, "user not authenticated");
 			goto out;
 		}
-
-		lctrl = ctx->ctrl & ~WINBIND_TRY_FIRST_PASS_ARG;
-
+		
+		lctrl = ctrl & ~WINBIND_TRY_FIRST_PASS_ARG;
+		
 		if (on(WINBIND_USE_AUTHTOK_ARG, lctrl)) {
 			lctrl |= WINBIND_USE_FIRST_PASS_ARG;
 		}
@@ -2565,17 +2085,16 @@
 			 * use_authtok is to force the use of a previously entered
 			 * password -- needed for pluggable password strength checking
 			 */
-
-			ret = _winbind_read_password(ctx, lctrl,
-						     NULL,
-						     "Enter new NT password: ",
-						     "Retype new NT password: ",
-						     (const char **)&pass_new);
-
+			
+			ret = _winbind_read_password(pamh, lctrl,
+							NULL,
+							"Enter new NT password: ",
+							"Retype new NT password: ",
+							(const char **) &pass_new);
+			
 			if (ret != PAM_SUCCESS) {
-				_pam_log_debug(ctx, LOG_ALERT,
-					       "password - "
-					       "new password not obtained");
+				_pam_log_debug(pamh, ctrl, LOG_ALERT
+					 ,"password - new password not obtained");
 				pass_old = NULL;/* tidy up */
 				goto out;
 			}
@@ -2585,30 +2104,20 @@
 			 * propose as their new password. Verify that the new
 			 * password is acceptable.
 			 */
-
+			
 			if (pass_new[0] == '\0') {/* "\0" password = NULL */
 				pass_new = NULL;
 			}
 		}
-
+		
 		/*
 		 * By reaching here we have approved the passwords and must now
 		 * rebuild the password database file.
 		 */
-		_pam_get_data(pamh, PAM_WINBIND_PWD_LAST_SET,
-			      &pwdlastset_update);
+		_pam_get_data( pamh, PAM_WINBIND_PWD_LAST_SET,
+			       &pwdlastset_update);
 
-		/*
-		 * if cached creds were enabled, make sure to set the
-		 * WINBIND_CACHED_LOGIN bit here in order to have winbindd
-		 * update the cached creds storage - gd
-		 */
-		if (cached_login) {
-			ctx->ctrl |= WINBIND_CACHED_LOGIN;
-		}
-
-		ret = winbind_chauthtok_request(ctx, user, pass_old,
-						pass_new, pwdlastset_update);
+		ret = winbind_chauthtok_request(pamh, ctrl, user, pass_old, pass_new, pwdlastset_update);
 		if (ret) {
 			_pam_overwrite(pass_new);
 			_pam_overwrite(pass_old);
@@ -2616,48 +2125,31 @@
 			goto out;
 		}
 
-		if (_pam_require_krb5_auth_after_chauthtok(ctx, user)) {
+		if (_pam_require_krb5_auth_after_chauthtok(pamh, ctrl, user)) {
 
-			const char *member = NULL;
-			const char *cctype = NULL;
-			int warn_pwd_expire;
+			const char *member = get_member_from_config(pamh, argc, argv, ctrl, d);
+			const char *cctype = get_krb5_cc_type_from_config(pamh, argc, argv, ctrl, d);
 
-			member = get_member_from_config(ctx);
-			cctype = get_krb5_cc_type_from_config(ctx);
-			warn_pwd_expire = get_warn_pwd_expire_from_config(ctx);
-
-			/* clearing offline bit for auth */
-			ctx->ctrl &= ~WINBIND_CACHED_LOGIN;
-
-			ret = winbind_auth_request(ctx, user, pass_new,
-						   member, cctype, 0, &response,
-						   NULL, &username_ret);
+			ret = winbind_auth_request(pamh, ctrl, user, pass_new,
+							member, cctype, &response, NULL, &username_ret);
 			_pam_overwrite(pass_new);
 			_pam_overwrite(pass_old);
 			pass_old = pass_new = NULL;
 
 			if (ret == PAM_SUCCESS) {
+			
+				/* warn a user if the password is about to expire soon */
+				_pam_warn_password_expiry(pamh, ctrl, &response, NULL);
 
-				/* warn a user if the password is about to
-				 * expire soon */
-				_pam_warn_password_expiry(ctx, &response,
-							  warn_pwd_expire,
-							  NULL);
+				/* set some info3 info for other modules in the stack */
+				_pam_set_data_info3(pamh, ctrl, &response);
 
-				/* set some info3 info for other modules in the
-				 * stack */
-				_pam_set_data_info3(ctx, &response);
-
 				/* put krb5ccname into env */
-				_pam_setup_krb5_env(ctx,
-						    response.data.auth.krb5ccname);
+				_pam_setup_krb5_env(pamh, ctrl, response.data.auth.krb5ccname);
 
 				if (username_ret) {
-					pam_set_item(pamh, PAM_USER,
-						     username_ret);
-					_pam_log_debug(ctx, LOG_INFO,
-						       "Returned user was '%s'",
-						       username_ret);
+					pam_set_item (pamh, PAM_USER, username_ret);
+					_pam_log_debug(pamh, ctrl, LOG_INFO, "Returned user was '%s'", username_ret);
 					free(username_ret);
 				}
 			}
@@ -2669,19 +2161,17 @@
 	}
 
 out:
+	if (d) {
+		iniparser_freedict(d);
+	}
 
 	/* Deal with offline errors. */
-	PAM_WB_REMARK_CHECK_RESPONSE(ctx, response,
-				     "NT_STATUS_NO_LOGON_SERVERS");
-	PAM_WB_REMARK_CHECK_RESPONSE(ctx, response,
-				     "NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND");
-	PAM_WB_REMARK_CHECK_RESPONSE(ctx, response,
-				     "NT_STATUS_ACCESS_DENIED");
+	PAM_WB_REMARK_CHECK_RESPONSE(pamh, ctrl, response, "NT_STATUS_NO_LOGON_SERVERS");
+	PAM_WB_REMARK_CHECK_RESPONSE(pamh, ctrl, response, "NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND");
+	PAM_WB_REMARK_CHECK_RESPONSE(pamh, ctrl, response, "NT_STATUS_ACCESS_DENIED");
 
-	_PAM_LOG_FUNCTION_LEAVE("pam_sm_chauthtok", ctx, ret);
-
-	_pam_winbind_free_context(ctx);
-
+	_PAM_LOG_FUNCTION_LEAVE("pam_sm_chauthtok", pamh, ctrl, ret);
+	
 	return ret;
 }
 
@@ -2705,12 +2195,12 @@
  * Copyright (c) Andrew Tridgell  <tridge at samba.org>   2000
  * Copyright (c) Tim Potter       <tpot at samba.org>     2000
  * Copyright (c) Andrew Bartlettt <abartlet at samba.org> 2002
- * Copyright (c) Guenther Deschner <gd at samba.org>      2005-2008
+ * Copyright (c) Guenther Deschner <gd at samba.org>      2005-2007
  * Copyright (c) Jan Rêkorajski 1999.
  * Copyright (c) Andrew G. Morgan 1996-8.
  * Copyright (c) Alex O. Yuriev, 1996.
  * Copyright (c) Cristian Gafton 1996.
- * Copyright (C) Elliot Lee <sopwith at redhat.com> 1996, Red Hat Software.
+ * Copyright (C) Elliot Lee <sopwith at redhat.com> 1996, Red Hat Software. 
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions

Modified: branches/samba/upstream/source/nsswitch/pam_winbind.h
===================================================================
--- branches/samba/upstream/source/nsswitch/pam_winbind.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nsswitch/pam_winbind.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -12,7 +12,6 @@
 #define PAM_SM_AUTH
 #define PAM_SM_ACCOUNT
 #define PAM_SM_PASSWORD
-#define PAM_SM_SESSION
 
 #ifndef PAM_WINBIND_CONFIG_FILE
 #define PAM_WINBIND_CONFIG_FILE "/etc/security/pam_winbind.conf"
@@ -24,11 +23,7 @@
 
 /* Solaris always uses dynamic pam modules */
 #define PAM_EXTERN extern
-#if defined(HAVE_SECURITY_PAM_APPL_H)
 #include <security/pam_appl.h> 
-#elif defined(HAVE_PAM_PAM_APPL_H)
-#include <pam/pam_appl.h>
-#endif
 
 #ifndef PAM_AUTHTOK_RECOVER_ERR
 #define PAM_AUTHTOK_RECOVER_ERR PAM_AUTHTOK_RECOVERY_ERR
@@ -36,16 +31,12 @@
 
 #endif /* defined(SUNOS5) || defined(SUNOS4) || defined(HPUX) || defined(FREEBSD) || defined(AIX) */
 
-#if defined(HAVE_SECURITY_PAM_MODULES_H)
+#ifdef HAVE_SECURITY_PAM_MODULES_H
 #include <security/pam_modules.h>
-#elif defined(HAVE_PAM_PAM_MODULES_H)
-#include <pam/pam_modules.h>
 #endif
 
-#if defined(HAVE_SECURITY__PAM_MACROS_H)
+#ifdef HAVE_SECURITY__PAM_MACROS_H
 #include <security/_pam_macros.h>
-#elif defined(HAVE_PAM__PAM_MACROS_H)
-#include <pam/_pam_macros.h>
 #else
 /* Define required macros from (Linux PAM 0.68) security/_pam_macros.h */
 #define _pam_drop_reply(/* struct pam_response * */ reply, /* int */ replies) \
@@ -96,7 +87,6 @@
 #define WINBIND_CONFIG_FILE (1<<10)
 #define WINBIND_SILENT (1<<11)
 #define WINBIND_DEBUG_STATE (1<<12)
-#define WINBIND_WARN_PWD_EXPIRE (1<<13)
 
 /*
  * here is the string to inform the user that the new passwords they
@@ -118,18 +108,18 @@
 
 #define SECONDS_PER_DAY 86400
 
-#define DEFAULT_DAYS_TO_WARN_BEFORE_PWD_EXPIRES 14
+#define DAYS_TO_WARN_BEFORE_PWD_EXPIRES 5
 
 #include "winbind_client.h"
 
-#define PAM_WB_REMARK_DIRECT(c,x)\
+#define PAM_WB_REMARK_DIRECT(h,f,x)\
 {\
 	const char *error_string = NULL; \
 	error_string = _get_ntstatus_error_string(x);\
 	if (error_string != NULL) {\
-		_make_remark(c, PAM_ERROR_MSG, error_string);\
+		_make_remark(h, f, PAM_ERROR_MSG, error_string);\
 	} else {\
-		_make_remark(c, PAM_ERROR_MSG, x);\
+		_make_remark(h, f, PAM_ERROR_MSG, x);\
 	};\
 };
 
@@ -145,67 +135,55 @@
 	return ret;\
 };
 
-#define PAM_WB_REMARK_CHECK_RESPONSE(c,x,y)\
+#define PAM_WB_REMARK_CHECK_RESPONSE(h,f,x,y)\
 {\
 	const char *ntstatus = x.data.auth.nt_status_string; \
 	const char *error_string = NULL; \
 	if (!strcasecmp(ntstatus,y)) {\
 		error_string = _get_ntstatus_error_string(y);\
 		if (error_string != NULL) {\
-			_make_remark(c, PAM_ERROR_MSG, error_string);\
+			_make_remark(h, f, PAM_ERROR_MSG, error_string);\
 		};\
 		if (x.data.auth.error_string[0] != '\0') {\
-			_make_remark(c, PAM_ERROR_MSG, x.data.auth.error_string);\
+			_make_remark(h, f, PAM_ERROR_MSG, x.data.auth.error_string);\
 		};\
-		_make_remark(c, PAM_ERROR_MSG, y);\
+		_make_remark(h, f, PAM_ERROR_MSG, y);\
 	};\
 };
 
-#define PAM_WB_REMARK_CHECK_RESPONSE_RET(c,x,y)\
+#define PAM_WB_REMARK_CHECK_RESPONSE_RET(h,f,x,y)\
 {\
 	const char *ntstatus = x.data.auth.nt_status_string; \
 	const char *error_string = NULL; \
 	if (!strcasecmp(ntstatus,y)) {\
 		error_string = _get_ntstatus_error_string(y);\
 		if (error_string != NULL) {\
-			_make_remark(c, PAM_ERROR_MSG, error_string);\
+			_make_remark(h, f, PAM_ERROR_MSG, error_string);\
 			return ret;\
 		};\
 		if (x.data.auth.error_string[0] != '\0') {\
-			_make_remark(c, PAM_ERROR_MSG, x.data.auth.error_string);\
+			_make_remark(h, f, PAM_ERROR_MSG, x.data.auth.error_string);\
 			return ret;\
 		};\
-		_make_remark(c, PAM_ERROR_MSG, y);\
+		_make_remark(h, f, PAM_ERROR_MSG, y);\
 		return ret;\
 	};\
 };
 
-/* from samr.idl */
-#define DOMAIN_PASSWORD_COMPLEX		0x00000001
+/* from include/rpc_samr.h */
+#define DOMAIN_PASSWORD_COMPLEX            0x00000001
 
-#define SAMR_REJECT_OTHER		0x00000000
-#define SAMR_REJECT_TOO_SHORT		0x00000001
-#define SAMR_REJECT_IN_HISTORY		0x00000002
-#define SAMR_REJECT_COMPLEXITY		0x00000005
+#define REJECT_REASON_OTHER		0x00000000
+#define REJECT_REASON_TOO_SHORT		0x00000001
+#define REJECT_REASON_IN_HISTORY	0x00000002
+#define REJECT_REASON_NOT_COMPLEX	0x00000005
 
+/* from include/smb.h */
 #define ACB_PWNOEXP			0x00000200
 
-/* from netlogon.idl */
-#define NETLOGON_CACHED_ACCOUNT		0x00000004
-#define NETLOGON_GRACE_LOGON		0x01000000
-
 /* from include/rpc_netlogon.h */
-#define LOGON_KRB5_FAIL_CLOCK_SKEW	0x02000000
+#define LOGON_CACHED_ACCOUNT		0x00000004
+#define LOGON_GRACE_LOGON		0x01000000
 
-#define PAM_WB_CACHED_LOGON(x) (x & NETLOGON_CACHED_ACCOUNT)
-#define PAM_WB_KRB5_CLOCK_SKEW(x) (x & LOGON_KRB5_FAIL_CLOCK_SKEW)
-#define PAM_WB_GRACE_LOGON(x)  ((NETLOGON_CACHED_ACCOUNT|NETLOGON_GRACE_LOGON) == ( x & (NETLOGON_CACHED_ACCOUNT|NETLOGON_GRACE_LOGON)))
-
-struct pwb_context {
-	pam_handle_t *pamh;
-	int flags;
-	int argc;
-	const char **argv;
-	dictionary *dict;
-	uint32_t ctrl;
-};
+#define PAM_WB_CACHED_LOGON(x) (x & LOGON_CACHED_ACCOUNT)
+#define PAM_WB_GRACE_LOGON(x)  ((LOGON_CACHED_ACCOUNT|LOGON_GRACE_LOGON) == ( x & (LOGON_CACHED_ACCOUNT|LOGON_GRACE_LOGON)))

Copied: branches/samba/upstream/source/nsswitch/wb_client.c (from rev 1928, branches/samba/upstream/source/nsswitch/wb_client.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/wb_client.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/wb_client.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,591 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   winbind client code
+
+   Copyright (C) Tim Potter 2000
+   Copyright (C) Andrew Tridgell 2000
+   
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public
+   License as published by the Free Software Foundation; either
+   version 2 of the License, or (at your option) any later version.
+   
+   This library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+   
+   You should have received a copy of the GNU Library General Public
+   License along with this library; if not, write to the
+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA  02111-1307, USA.   
+*/
+
+#include "includes.h"
+#include "nsswitch/winbind_nss.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_WINBIND
+
+NSS_STATUS winbindd_request_response(int req_type,
+                                 struct winbindd_request *request,
+                                 struct winbindd_response *response);
+
+/* Call winbindd to convert a name to a sid */
+
+BOOL winbind_lookup_name(const char *dom_name, const char *name, DOM_SID *sid, 
+                         enum lsa_SidType *name_type)
+{
+	struct winbindd_request request;
+	struct winbindd_response response;
+	NSS_STATUS result;
+	
+	if (!sid || !name_type)
+		return False;
+
+	/* Send off request */
+
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
+	fstrcpy(request.data.name.dom_name, dom_name);
+	fstrcpy(request.data.name.name, name);
+
+	if ((result = winbindd_request_response(WINBINDD_LOOKUPNAME, &request, 
+				       &response)) == NSS_STATUS_SUCCESS) {
+		if (!string_to_sid(sid, response.data.sid.sid))
+			return False;
+		*name_type = (enum lsa_SidType)response.data.sid.type;
+	}
+
+	return result == NSS_STATUS_SUCCESS;
+}
+
+/* Call winbindd to convert sid to name */
+
+BOOL winbind_lookup_sid(TALLOC_CTX *mem_ctx, const DOM_SID *sid, 
+			const char **domain, const char **name,
+                        enum lsa_SidType *name_type)
+{
+	struct winbindd_request request;
+	struct winbindd_response response;
+	NSS_STATUS result;
+	
+	/* Initialise request */
+
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
+	fstrcpy(request.data.sid, sid_string_static(sid));
+	
+	/* Make request */
+
+	result = winbindd_request_response(WINBINDD_LOOKUPSID, &request,
+					   &response);
+
+	if (result != NSS_STATUS_SUCCESS) {
+		return False;
+	}
+
+	/* Copy out result */
+
+	if (domain != NULL) {
+		*domain = talloc_strdup(mem_ctx, response.data.name.dom_name);
+		if (*domain == NULL) {
+			DEBUG(0, ("talloc failed\n"));
+			return False;
+		}
+	}
+	if (name != NULL) {
+		*name = talloc_strdup(mem_ctx, response.data.name.name);
+		if (*name == NULL) {
+			DEBUG(0, ("talloc failed\n"));
+			return False;
+		}
+	}
+
+	*name_type = (enum lsa_SidType)response.data.name.type;
+
+	DEBUG(10, ("winbind_lookup_sid: SUCCESS: SID %s -> %s %s\n", 
+		   sid_string_static(sid), response.data.name.dom_name,
+		   response.data.name.name));
+	return True;
+}
+
+BOOL winbind_lookup_rids(TALLOC_CTX *mem_ctx,
+			 const DOM_SID *domain_sid,
+			 int num_rids, uint32 *rids,
+			 const char **domain_name,
+			 const char ***names, enum lsa_SidType **types)
+{
+	size_t i, buflen;
+	ssize_t len;
+	char *ridlist;
+	char *p;
+	struct winbindd_request request;
+	struct winbindd_response response;
+	NSS_STATUS result;
+
+	if (num_rids == 0) {
+		return False;
+	}
+
+	/* Initialise request */
+
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
+	fstrcpy(request.data.sid, sid_string_static(domain_sid));
+	
+	len = 0;
+	buflen = 0;
+	ridlist = NULL;
+
+	for (i=0; i<num_rids; i++) {
+		sprintf_append(mem_ctx, &ridlist, &len, &buflen,
+			       "%ld\n", rids[i]);
+	}
+
+	if ((num_rids != 0) && (ridlist == NULL)) {
+		return False;
+	}
+
+	request.extra_data.data = ridlist;
+	request.extra_len = strlen(ridlist)+1;
+
+	result = winbindd_request_response(WINBINDD_LOOKUPRIDS,
+					   &request, &response);
+
+	TALLOC_FREE(ridlist);
+
+	if (result != NSS_STATUS_SUCCESS) {
+		return False;
+	}
+
+	*domain_name = talloc_strdup(mem_ctx, response.data.domain_name);
+
+	if (num_rids) {
+		*names = TALLOC_ARRAY(mem_ctx, const char *, num_rids);
+		*types = TALLOC_ARRAY(mem_ctx, enum lsa_SidType, num_rids);
+
+		if ((*names == NULL) || (*types == NULL)) {
+			goto fail;
+		}
+	} else {
+		*names = NULL;
+		*types = NULL;
+	}
+
+	p = (char *)response.extra_data.data;
+
+	for (i=0; i<num_rids; i++) {
+		char *q;
+
+		if (*p == '\0') {
+			DEBUG(10, ("Got invalid reply: %s\n",
+				   (char *)response.extra_data.data));
+			goto fail;
+		}
+			
+		(*types)[i] = (enum lsa_SidType)strtoul(p, &q, 10);
+
+		if (*q != ' ') {
+			DEBUG(10, ("Got invalid reply: %s\n",
+				   (char *)response.extra_data.data));
+			goto fail;
+		}
+
+		p = q+1;
+
+		q = strchr(p, '\n');
+		if (q == NULL) {
+			DEBUG(10, ("Got invalid reply: %s\n",
+				   (char *)response.extra_data.data));
+			goto fail;
+		}
+
+		*q = '\0';
+
+		(*names)[i] = talloc_strdup(*names, p);
+
+		p = q+1;
+	}
+
+	if (*p != '\0') {
+		DEBUG(10, ("Got invalid reply: %s\n",
+			   (char *)response.extra_data.data));
+		goto fail;
+	}
+
+	SAFE_FREE(response.extra_data.data);
+
+	return True;
+
+ fail:
+	TALLOC_FREE(*names);
+	TALLOC_FREE(*types);
+	return False;
+}
+
+/* Call winbindd to convert SID to uid */
+
+BOOL winbind_sid_to_uid(uid_t *puid, const DOM_SID *sid)
+{
+	struct winbindd_request request;
+	struct winbindd_response response;
+	int result;
+	fstring sid_str;
+
+	if (!puid)
+		return False;
+
+	/* Initialise request */
+
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
+	sid_to_string(sid_str, sid);
+	fstrcpy(request.data.sid, sid_str);
+	
+	/* Make request */
+
+	result = winbindd_request_response(WINBINDD_SID_TO_UID, &request, &response);
+
+	/* Copy out result */
+
+	if (result == NSS_STATUS_SUCCESS) {
+		*puid = response.data.uid;
+	}
+
+	return (result == NSS_STATUS_SUCCESS);
+}
+
+/* Call winbindd to convert uid to sid */
+
+BOOL winbind_uid_to_sid(DOM_SID *sid, uid_t uid)
+{
+	struct winbindd_request request;
+	struct winbindd_response response;
+	int result;
+
+	if (!sid)
+		return False;
+
+	/* Initialise request */
+
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
+	request.data.uid = uid;
+
+	/* Make request */
+
+	result = winbindd_request_response(WINBINDD_UID_TO_SID, &request, &response);
+
+	/* Copy out result */
+
+	if (result == NSS_STATUS_SUCCESS) {
+		if (!string_to_sid(sid, response.data.sid.sid))
+			return False;
+	} else {
+		sid_copy(sid, &global_sid_NULL);
+	}
+
+	return (result == NSS_STATUS_SUCCESS);
+}
+
+/* Call winbindd to convert SID to gid */
+
+BOOL winbind_sid_to_gid(gid_t *pgid, const DOM_SID *sid)
+{
+	struct winbindd_request request;
+	struct winbindd_response response;
+	int result;
+	fstring sid_str;
+
+	if (!pgid)
+		return False;
+
+	/* Initialise request */
+
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
+	sid_to_string(sid_str, sid);
+	fstrcpy(request.data.sid, sid_str);
+	
+	/* Make request */
+
+	result = winbindd_request_response(WINBINDD_SID_TO_GID, &request, &response);
+
+	/* Copy out result */
+
+	if (result == NSS_STATUS_SUCCESS) {
+		*pgid = response.data.gid;
+	}
+
+	return (result == NSS_STATUS_SUCCESS);
+}
+
+/* Call winbindd to convert gid to sid */
+
+BOOL winbind_gid_to_sid(DOM_SID *sid, gid_t gid)
+{
+	struct winbindd_request request;
+	struct winbindd_response response;
+	int result;
+
+	if (!sid)
+		return False;
+
+	/* Initialise request */
+
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
+	request.data.gid = gid;
+
+	/* Make request */
+
+	result = winbindd_request_response(WINBINDD_GID_TO_SID, &request, &response);
+
+	/* Copy out result */
+
+	if (result == NSS_STATUS_SUCCESS) {
+		if (!string_to_sid(sid, response.data.sid.sid))
+			return False;
+	} else {
+		sid_copy(sid, &global_sid_NULL);
+	}
+
+	return (result == NSS_STATUS_SUCCESS);
+}
+
+/* Call winbindd to convert SID to uid */
+
+BOOL winbind_sids_to_unixids(struct id_map *ids, int num_ids)
+{
+	struct winbindd_request request;
+	struct winbindd_response response;
+	int result;
+	DOM_SID *sids;
+	int i;
+
+	/* Initialise request */
+
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
+	request.extra_len = num_ids * sizeof(DOM_SID);
+
+	sids = (DOM_SID *)SMB_MALLOC(request.extra_len);
+	for (i = 0; i < num_ids; i++) {
+		sid_copy(&sids[i], ids[i].sid);
+	}
+
+	request.extra_data.data = (char *)sids;
+	
+	/* Make request */
+
+	result = winbindd_request_response(WINBINDD_SIDS_TO_XIDS, &request, &response);
+
+	/* Copy out result */
+
+	if (result == NSS_STATUS_SUCCESS) {
+		struct unixid *wid = (struct unixid *)response.extra_data.data;
+		
+		for (i = 0; i < num_ids; i++) {
+			if (wid[i].type == -1) {
+				ids[i].status = ID_UNMAPPED;
+			} else {
+				ids[i].status = ID_MAPPED;
+				ids[i].xid.type = wid[i].type;
+				ids[i].xid.id = wid[i].id;
+			}
+		}
+	}
+
+	SAFE_FREE(request.extra_data.data);
+	SAFE_FREE(response.extra_data.data);
+
+	return (result == NSS_STATUS_SUCCESS);
+}
+
+BOOL winbind_idmap_dump_maps(TALLOC_CTX *memctx, const char *file)
+{
+	struct winbindd_request request;
+	struct winbindd_response response;
+	int result;
+
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
+	request.extra_data.data = SMB_STRDUP(file);
+	request.extra_len = strlen(request.extra_data.data) + 1;
+
+	result = winbindd_request_response(WINBINDD_DUMP_MAPS, &request, &response);
+
+	SAFE_FREE(request.extra_data.data);
+	return (result == NSS_STATUS_SUCCESS);
+}
+
+BOOL winbind_allocate_uid(uid_t *uid)
+{
+	struct winbindd_request request;
+	struct winbindd_response response;
+	int result;
+
+	/* Initialise request */
+
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
+	/* Make request */
+
+	result = winbindd_request_response(WINBINDD_ALLOCATE_UID,
+					   &request, &response);
+
+	if (result != NSS_STATUS_SUCCESS)
+		return False;
+
+	/* Copy out result */
+	*uid = response.data.uid;
+
+	return True;
+}
+
+BOOL winbind_allocate_gid(gid_t *gid)
+{
+	struct winbindd_request request;
+	struct winbindd_response response;
+	int result;
+
+	/* Initialise request */
+
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
+	/* Make request */
+
+	result = winbindd_request_response(WINBINDD_ALLOCATE_GID,
+					   &request, &response);
+
+	if (result != NSS_STATUS_SUCCESS)
+		return False;
+
+	/* Copy out result */
+	*gid = response.data.gid;
+
+	return True;
+}
+
+BOOL winbind_set_mapping(const struct id_map *map)
+{
+	struct winbindd_request request;
+	struct winbindd_response response;
+	int result;
+
+	/* Initialise request */
+
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
+	/* Make request */
+
+	request.data.dual_idmapset.id = map->xid.id;
+	request.data.dual_idmapset.type = map->xid.type;
+	sid_to_string(request.data.dual_idmapset.sid, map->sid);
+
+	result = winbindd_request_response(WINBINDD_SET_MAPPING, &request, &response);
+
+	return (result == NSS_STATUS_SUCCESS);
+}
+
+BOOL winbind_set_uid_hwm(unsigned long id)
+{
+	struct winbindd_request request;
+	struct winbindd_response response;
+	int result;
+
+	/* Initialise request */
+
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
+	/* Make request */
+
+	request.data.dual_idmapset.id = id;
+	request.data.dual_idmapset.type = ID_TYPE_UID;
+
+	result = winbindd_request_response(WINBINDD_SET_HWM, &request, &response);
+
+	return (result == NSS_STATUS_SUCCESS);
+}
+
+BOOL winbind_set_gid_hwm(unsigned long id)
+{
+	struct winbindd_request request;
+	struct winbindd_response response;
+	int result;
+
+	/* Initialise request */
+
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
+	/* Make request */
+
+	request.data.dual_idmapset.id = id;
+	request.data.dual_idmapset.type = ID_TYPE_GID;
+
+	result = winbindd_request_response(WINBINDD_SET_HWM, &request, &response);
+
+	return (result == NSS_STATUS_SUCCESS);
+}
+
+/**********************************************************************
+ simple wrapper function to see if winbindd is alive
+**********************************************************************/
+
+BOOL winbind_ping( void )
+{
+	NSS_STATUS result;
+
+	result = winbindd_request_response(WINBINDD_PING, NULL, NULL);
+
+	return result == NSS_STATUS_SUCCESS;
+}
+
+/**********************************************************************
+ Is a domain trusted?
+
+ result == NSS_STATUS_UNAVAIL: winbind not around
+ result == NSS_STATUS_NOTFOUND: winbind around, but domain missing
+
+ Due to a bad API NSS_STATUS_NOTFOUND is returned both when winbind_off and
+ when winbind return WINBINDD_ERROR. So the semantics of this routine depends
+ on winbind_on. Grepping for winbind_off I just found 3 places where winbind
+ is turned off, and this does not conflict (as far as I have seen) with the
+ callers of is_trusted_domains.
+
+ I *hate* global variables....
+
+ Volker
+
+**********************************************************************/
+
+NSS_STATUS wb_is_trusted_domain(const char *domain)
+{
+	struct winbindd_request request;
+	struct winbindd_response response;
+
+	/* Call winbindd */
+
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
+	fstrcpy(request.domain_name, domain);
+
+	return winbindd_request_response(WINBINDD_DOMAIN_INFO, &request, &response);
+}

Modified: branches/samba/upstream/source/nsswitch/wb_common.c
===================================================================
--- branches/samba/upstream/source/nsswitch/wb_common.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nsswitch/wb_common.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,21 +9,27 @@
    
    
    This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
+   modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
    
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.
    
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU Library General Public
+   License along with this library; if not, write to the
+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA  02111-1307, USA.   
 */
 
 #include "winbind_client.h"
 
+BOOL winbind_env_set( void );
+BOOL winbind_off( void );
+BOOL winbind_on( void );
+
 /* Global variables.  These are effectively the client state information */
 
 int winbindd_fd = -1;           /* fd for winbindd socket */
@@ -31,7 +37,7 @@
 
 /* Free a response structure */
 
-void winbindd_free_response(struct winbindd_response *response)
+void free_response(struct winbindd_response *response)
 {
 	/* Free any allocated extra_data */
 
@@ -41,7 +47,7 @@
 
 /* Initialise a request structure */
 
-void winbindd_init_request(struct winbindd_request *request, int request_type)
+void init_request(struct winbindd_request *request, int request_type)
 {
 	request->length = sizeof(struct winbindd_request);
 
@@ -61,7 +67,7 @@
 
 /* Close established socket */
 
-void winbind_close_sock(void)
+void close_sock(void)
 {
 	if (winbindd_fd != -1) {
 		close(winbindd_fd);
@@ -168,51 +174,54 @@
 {
 	struct sockaddr_un sunaddr;
 	struct stat st;
-	char *path = NULL;
+	pstring path;
 	int fd;
 	int wait_time;
 	int slept;
-
+	
 	/* Check permissions on unix socket directory */
-
+	
 	if (lstat(dir, &st) == -1) {
 		return -1;
 	}
-
-	if (!S_ISDIR(st.st_mode) ||
+	
+	if (!S_ISDIR(st.st_mode) || 
 	    (st.st_uid != 0 && st.st_uid != geteuid())) {
 		return -1;
 	}
-
+	
 	/* Connect to socket */
-
-	if (asprintf(&path, "%s/%s", dir, WINBINDD_SOCKET_NAME) < 0) {
-		return -1;
-	}
-
+	
+	strncpy(path, dir, sizeof(path) - 1);
+	path[sizeof(path) - 1] = '\0';
+	
+	strncat(path, "/", sizeof(path) - 1 - strlen(path));
+	path[sizeof(path) - 1] = '\0';
+	
+	strncat(path, WINBINDD_SOCKET_NAME, sizeof(path) - 1 - strlen(path));
+	path[sizeof(path) - 1] = '\0';
+	
 	ZERO_STRUCT(sunaddr);
 	sunaddr.sun_family = AF_UNIX;
 	strncpy(sunaddr.sun_path, path, sizeof(sunaddr.sun_path) - 1);
-
+	
 	/* If socket file doesn't exist, don't bother trying to connect
 	   with retry.  This is an attempt to make the system usable when
 	   the winbindd daemon is not running. */
 
 	if (lstat(path, &st) == -1) {
-		SAFE_FREE(path);
 		return -1;
 	}
-
-	SAFE_FREE(path);
+	
 	/* Check permissions on unix socket file */
-
-	if (!S_ISSOCK(st.st_mode) ||
+	
+	if (!S_ISSOCK(st.st_mode) || 
 	    (st.st_uid != 0 && st.st_uid != geteuid())) {
 		return -1;
 	}
-
+	
 	/* Connect to socket */
-
+	
 	if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
 		return -1;
 	}
@@ -277,20 +286,6 @@
 	return -1;
 }
 
-static const char *winbindd_socket_dir(void)
-{
-#ifdef SOCKET_WRAPPER
-	const char *env_dir;
-
-	env_dir = getenv(WINBINDD_SOCKET_DIR_ENVVAR);
-	if (env_dir) {
-		return env_dir;
-	}
-#endif
-
-	return WINBINDD_SOCKET_DIR;
-}
-
 /* Connect to winbindd socket */
 
 static int winbind_open_pipe_sock(int recursing, int need_priv)
@@ -303,12 +298,12 @@
 	ZERO_STRUCT(response);
 
 	if (our_pid != getpid()) {
-		winbind_close_sock();
+		close_sock();
 		our_pid = getpid();
 	}
 
 	if ((need_priv != 0) && (is_privileged == 0)) {
-		winbind_close_sock();
+		close_sock();
 	}
 	
 	if (winbindd_fd != -1) {
@@ -319,7 +314,7 @@
 		return -1;
 	}
 
-	if ((winbindd_fd = winbind_named_pipe_sock(winbindd_socket_dir())) == -1) {
+	if ((winbindd_fd = winbind_named_pipe_sock(WINBINDD_SOCKET_DIR)) == -1) {
 		return -1;
 	}
 
@@ -327,15 +322,15 @@
 
 	/* version-check the socket */
 
-	request.wb_flags = WBFLAG_RECURSE;
+	request.flags = WBFLAG_RECURSE;
 	if ((winbindd_request_response(WINBINDD_INTERFACE_VERSION, &request, &response) != NSS_STATUS_SUCCESS) || (response.data.interface_version != WINBIND_INTERFACE_VERSION)) {
-		winbind_close_sock();
+		close_sock();
 		return -1;
 	}
 
 	/* try and get priv pipe */
 
-	request.wb_flags = WBFLAG_RECURSE;
+	request.flags = WBFLAG_RECURSE;
 	if (winbindd_request_response(WINBINDD_PRIV_PIPE_DIR, &request, &response) == NSS_STATUS_SUCCESS) {
 		int fd;
 		if ((fd = winbind_named_pipe_sock((char *)response.extra_data.data)) != -1) {
@@ -359,7 +354,7 @@
 
 /* Write data to winbindd socket */
 
-int winbind_write_sock(void *buffer, int count, int recursing, int need_priv)
+int write_sock(void *buffer, int count, int recursing, int need_priv)
 {
 	int result, nwritten;
 	
@@ -387,7 +382,7 @@
 		ZERO_STRUCT(tv);
 		
 		if (select(winbindd_fd + 1, &r_fds, NULL, NULL, &tv) == -1) {
-			winbind_close_sock();
+			close_sock();
 			return -1;                   /* Select error */
 		}
 		
@@ -405,7 +400,7 @@
 				
 				/* Write failed */
 				
-				winbind_close_sock();
+				close_sock();
 				return -1;
 			}
 			
@@ -415,7 +410,7 @@
 			
 			/* Pipe has closed on remote end */
 			
-			winbind_close_sock();
+			close_sock();
 			goto restart;
 		}
 	}
@@ -425,7 +420,7 @@
 
 /* Read data from winbindd socket */
 
-int winbind_read_sock(void *buffer, int count)
+static int read_sock(void *buffer, int count)
 {
 	int nread = 0;
 	int total_time = 0, selret;
@@ -449,7 +444,7 @@
 		tv.tv_sec = 5;
 
 		if ((selret = select(winbindd_fd + 1, &r_fds, NULL, NULL, &tv)) == -1) {
-			winbind_close_sock();
+			close_sock();
 			return -1;                   /* Select error */
 		}
 		
@@ -457,7 +452,7 @@
 			/* Not ready for read yet... */
 			if (total_time >= 30) {
 				/* Timeout */
-				winbind_close_sock();
+				close_sock();
 				return -1;
 			}
 			total_time += 5;
@@ -477,7 +472,7 @@
 				   can do here is just return -1 and fail since the
 				   transaction has failed half way through. */
 			
-				winbind_close_sock();
+				close_sock();
 				return -1;
 			}
 			
@@ -491,7 +486,7 @@
 
 /* Read reply */
 
-int winbindd_read_reply(struct winbindd_response *response)
+int read_reply(struct winbindd_response *response)
 {
 	int result1, result2 = 0;
 
@@ -501,9 +496,9 @@
 	
 	/* Read fixed length response */
 	
-	result1 = winbind_read_sock(response,
-				    sizeof(struct winbindd_response));
-	if (result1 == -1) {
+	if ((result1 = read_sock(response, sizeof(struct winbindd_response)))
+	    == -1) {
+		
 		return -1;
 	}
 	
@@ -525,10 +520,9 @@
 			return -1;
 		}
 		
-		result2 = winbind_read_sock(response->extra_data.data,
-					    extra_data_len);
-		if (result2 == -1) {
-			winbindd_free_response(response);
+		if ((result2 = read_sock(response->extra_data.data, extra_data_len))
+		    == -1) {
+			free_response(response);
 			return -1;
 		}
 	}
@@ -538,6 +532,18 @@
 	return result1 + result2;
 }
 
+BOOL winbind_env_set( void )
+{
+	char *env;
+	
+	if ((env=getenv(WINBINDD_DONT_ENV)) != NULL) {
+		if(strcmp(env, "1") == 0) {
+			return True;
+		}
+	}
+	return False;
+}
+
 /* 
  * send simple types of requests 
  */
@@ -560,19 +566,16 @@
 	
 	/* Fill in request and send down pipe */
 
-	winbindd_init_request(request, req_type);
+	init_request(request, req_type);
 	
-	if (winbind_write_sock(request, sizeof(*request),
-			       request->wb_flags & WBFLAG_RECURSE,
-			       need_priv) == -1) {
+	if (write_sock(request, sizeof(*request),
+		       request->flags & WBFLAG_RECURSE, need_priv) == -1) {
 		return NSS_STATUS_UNAVAIL;
 	}
 
 	if ((request->extra_len != 0) &&
-	    (winbind_write_sock(request->extra_data.data,
-	    			request->extra_len,
-				request->wb_flags & WBFLAG_RECURSE,
-				need_priv) == -1)) {
+	    (write_sock(request->extra_data.data, request->extra_len,
+			request->flags & WBFLAG_RECURSE, need_priv) == -1)) {
 		return NSS_STATUS_UNAVAIL;
 	}
 	
@@ -595,13 +598,13 @@
 	init_response(response);
 
 	/* Wait for reply */
-	if (winbindd_read_reply(response) == -1) {
+	if (read_reply(response) == -1) {
 		return NSS_STATUS_UNAVAIL;
 	}
 
 	/* Throw away extra data if client didn't request it */
 	if (response == &lresponse) {
-		winbindd_free_response(response);
+		free_response(response);
 	}
 
 	/* Copy reply data from socket */
@@ -651,24 +654,24 @@
 }
 
 /*************************************************************************
+ A couple of simple functions to disable winbindd lookups and re-
+ enable them
  ************************************************************************/
+ 
+/* Use putenv() instead of setenv() in these functions as not all
+   environments have the latter. */
 
-const char *nss_err_str(NSS_STATUS ret)
+BOOL winbind_off( void )
 {
-	switch (ret) {
-		case NSS_STATUS_TRYAGAIN:
-			return "NSS_STATUS_TRYAGAIN";
-		case NSS_STATUS_SUCCESS:
-			return "NSS_STATUS_SUCCESS";
-		case NSS_STATUS_NOTFOUND:
-			return "NSS_STATUS_NOTFOUND";
-		case NSS_STATUS_UNAVAIL:
-			return "NSS_STATUS_UNAVAIL";
-#ifdef NSS_STATUS_RETURN
-		case NSS_STATUS_RETURN:
-			return "NSS_STATUS_RETURN";
-#endif
-		default:
-			return "UNKNOWN RETURN CODE!!!!!!!";
-	}
+	static char *s = CONST_DISCARD(char *, WINBINDD_DONT_ENV "=1");
+
+	return putenv(s) != -1;
 }
+
+BOOL winbind_on( void )
+{
+	static char *s = CONST_DISCARD(char *, WINBINDD_DONT_ENV "=0");
+
+	return putenv(s) != -1;
+}
+

Modified: branches/samba/upstream/source/nsswitch/wbinfo.c
===================================================================
--- branches/samba/upstream/source/nsswitch/wbinfo.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nsswitch/wbinfo.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,45 +17,34 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
-#include "winbind_client.h"
-#include "libwbclient/wbclient.h"
+#include "winbindd.h"
+#include "debug.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_WINBIND
 
-static struct wbcInterfaceDetails *init_interface_details(void)
-{
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	static struct wbcInterfaceDetails *details;
+extern int winbindd_fd;
 
-	if (details) {
-		return details;
-	}
-
-	wbc_status = wbcInterfaceDetails(&details);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		d_fprintf(stderr, "could not obtain winbind interface details!\n");
-	}
-
-	return details;
-}
-
-static char winbind_separator_int(bool strict)
+static char winbind_separator_int(BOOL strict)
 {
-	struct wbcInterfaceDetails *details;
-	static bool got_sep;
+	struct winbindd_response response;
+	static BOOL got_sep;
 	static char sep;
 
 	if (got_sep)
 		return sep;
 
-	details = init_interface_details();
+	ZERO_STRUCT(response);
 
-	if (!details) {
+	/* Send off request */
+
+	if (winbindd_request_response(WINBINDD_INFO, NULL, &response) !=
+	    NSS_STATUS_SUCCESS) {
 		d_fprintf(stderr, "could not obtain winbind separator!\n");
 		if (strict) {
 			return 0;
@@ -64,8 +53,8 @@
 		return *lp_winbind_separator();
 	}
 
-	sep = details->winbind_separator;
-	got_sep = true;
+	sep = response.data.info.winbind_separator;
+	got_sep = True;
 
 	if (!sep) {
 		d_fprintf(stderr, "winbind separator was NULL!\n");
@@ -81,429 +70,377 @@
 
 static char winbind_separator(void)
 {
-	return winbind_separator_int(false);
+	return winbind_separator_int(False);
 }
 
 static const char *get_winbind_domain(void)
 {
-	static struct wbcInterfaceDetails *details;
+	struct winbindd_response response;
+	static fstring winbind_domain;
 
-	details = init_interface_details();
+	ZERO_STRUCT(response);
 
-	if (!details) {
-		d_fprintf(stderr, "could not obtain winbind domain name!\n");
+	/* Send off request */
 
-		/* HACK: (this module should not call lp_ functions) */
+	if (winbindd_request_response(WINBINDD_DOMAIN_NAME, NULL, &response) !=
+	    NSS_STATUS_SUCCESS) {
+		d_fprintf(stderr, "could not obtain winbind domain name!\n");
+		
+		/* HACK: (this module should not call lp_ funtions) */
 		return lp_workgroup();
 	}
 
-	return details->netbios_domain;
+	fstrcpy(winbind_domain, response.data.domain_name);
+
+	return winbind_domain;
+
 }
 
 /* Copy of parse_domain_user from winbindd_util.c.  Parse a string of the
    form DOMAIN/user into a domain and a user */
 
-static bool parse_wbinfo_domain_user(const char *domuser, fstring domain,
+static BOOL parse_wbinfo_domain_user(const char *domuser, fstring domain, 
 				     fstring user)
 {
 
 	char *p = strchr(domuser,winbind_separator());
 
 	if (!p) {
-		/* Maybe it was a UPN? */
-		if ((p = strchr(domuser, '@')) != NULL) {
-			fstrcpy(domain, "");
-			fstrcpy(user, domuser);
-			return true;
-		}
-
 		fstrcpy(user, domuser);
 		fstrcpy(domain, get_winbind_domain());
-		return true;
+		return True;
 	}
-
+        
 	fstrcpy(user, p+1);
 	fstrcpy(domain, domuser);
 	domain[PTR_DIFF(p, domuser)] = 0;
 	strupper_m(domain);
 
-	return true;
+	return True;
 }
 
 /* pull pwent info for a given user */
 
-static bool wbinfo_get_userinfo(char *user)
+static BOOL wbinfo_get_userinfo(char *user)
 {
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	struct passwd *pwd = NULL;
+	struct winbindd_request request;
+	struct winbindd_response response;
+	NSS_STATUS result;
+	
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
 
-	wbc_status = wbcGetpwnam(user, &pwd);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	/* Send request */
+	
+	fstrcpy(request.data.username, user);
 
-	d_printf("%s:%s:%d:%d:%s:%s:%s\n",
-		 pwd->pw_name,
-		 pwd->pw_passwd,
-		 pwd->pw_uid,
-		 pwd->pw_gid,
-		 pwd->pw_gecos,
-		 pwd->pw_dir,
-		 pwd->pw_shell);
-
-	return true;
+	result = winbindd_request_response(WINBINDD_GETPWNAM, &request, &response);
+	
+	if (result != NSS_STATUS_SUCCESS)
+		return False;
+	
+	d_printf( "%s:%s:%d:%d:%s:%s:%s\n",
+			  response.data.pw.pw_name,
+			  response.data.pw.pw_passwd,
+			  response.data.pw.pw_uid,
+			  response.data.pw.pw_gid,
+			  response.data.pw.pw_gecos,
+			  response.data.pw.pw_dir,
+			  response.data.pw.pw_shell );
+	
+	return True;
 }
 
-/* pull pwent info for a given uid */
-static bool wbinfo_get_uidinfo(int uid)
+/* pull grent for a given group */
+static BOOL wbinfo_get_groupinfo(char *group)
 {
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	struct passwd *pwd = NULL;
+	struct winbindd_request request;
+	struct winbindd_response response;
+	NSS_STATUS result;
 
-	wbc_status = wbcGetpwuid(uid, &pwd);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
 
-	d_printf("%s:%s:%d:%d:%s:%s:%s\n",
-		 pwd->pw_name,
-		 pwd->pw_passwd,
-		 pwd->pw_uid,
-		 pwd->pw_gid,
-		 pwd->pw_gecos,
-		 pwd->pw_dir,
-		 pwd->pw_shell);
+	/* Send request */
 
-	return true;
-}
+	fstrcpy(request.data.groupname, group);
 
-/* pull grent for a given group */
-static bool wbinfo_get_groupinfo(const char *group)
-{
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	struct group *grp;
+	result = winbindd_request_response(WINBINDD_GETGRNAM, &request,
+					   &response);
 
-	wbc_status = wbcGetgrnam(group, &grp);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	if ( result != NSS_STATUS_SUCCESS)
+		return False;
 
-	d_printf("%s:%s:%d\n",
-		 grp->gr_name,
-		 grp->gr_passwd,
-		 grp->gr_gid);
-
-	wbcFreeMemory(grp);
-
-	return true;
+  	d_printf( "%s:%s:%d\n",
+		  response.data.gr.gr_name,
+		  response.data.gr.gr_passwd,
+		  response.data.gr.gr_gid );
+	
+	return True;
 }
 
 /* List groups a user is a member of */
 
-static bool wbinfo_get_usergroups(const char *user)
+static BOOL wbinfo_get_usergroups(char *user)
 {
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	uint32_t num_groups;
-	uint32_t i;
-	gid_t *groups = NULL;
+	struct winbindd_request request;
+	struct winbindd_response response;
+	NSS_STATUS result;
+	int i;
+	
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
 
 	/* Send request */
 
-	wbc_status = wbcGetGroups(user, &num_groups, &groups);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	fstrcpy(request.data.username, user);
 
-	for (i = 0; i < num_groups; i++) {
-		d_printf("%d\n", (int)groups[i]);
-	}
+	result = winbindd_request_response(WINBINDD_GETGROUPS, &request, &response);
 
-	wbcFreeMemory(groups);
+	if (result != NSS_STATUS_SUCCESS)
+		return False;
 
-	return true;
+	for (i = 0; i < response.data.num_entries; i++)
+		d_printf("%d\n", (int)((gid_t *)response.extra_data.data)[i]);
+
+	SAFE_FREE(response.extra_data.data);
+
+	return True;
 }
 
 
 /* List group SIDs a user SID is a member of */
-static bool wbinfo_get_usersids(const char *user_sid_str)
+static BOOL wbinfo_get_usersids(char *user_sid)
 {
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	uint32_t num_sids;
-	uint32_t i;
-	struct wbcDomainSid user_sid, *sids = NULL;
+	struct winbindd_request request;
+	struct winbindd_response response;
+	NSS_STATUS result;
+	int i;
+	const char *s;
 
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
 	/* Send request */
+	fstrcpy(request.data.sid, user_sid);
 
-	wbc_status = wbcStringToSid(user_sid_str, &user_sid);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	result = winbindd_request_response(WINBINDD_GETUSERSIDS, &request, &response);
 
-	wbc_status = wbcLookupUserSids(&user_sid, false, &num_sids, &sids);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	if (result != NSS_STATUS_SUCCESS)
+		return False;
 
-	for (i = 0; i < num_sids; i++) {
-		char *str = NULL;
-		wbc_status = wbcSidToString(&sids[i], &str);
-		if (!WBC_ERROR_IS_OK(wbc_status)) {
-			wbcFreeMemory(sids);
-			return false;
-		}
-		d_printf("%s\n", str);
-		wbcFreeMemory(str);
+	s = (const char *)response.extra_data.data;
+	for (i = 0; i < response.data.num_entries; i++) {
+		d_printf("%s\n", s);
+		s += strlen(s) + 1;
 	}
 
-	wbcFreeMemory(sids);
+	SAFE_FREE(response.extra_data.data);
 
-	return true;
+	return True;
 }
 
-static bool wbinfo_get_userdomgroups(const char *user_sid_str)
+static BOOL wbinfo_get_userdomgroups(const char *user_sid)
 {
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	uint32_t num_sids;
-	uint32_t i;
-	struct wbcDomainSid user_sid, *sids = NULL;
+	struct winbindd_request request;
+	struct winbindd_response response;
+	NSS_STATUS result;
 
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
 	/* Send request */
+	fstrcpy(request.data.sid, user_sid);
 
-	wbc_status = wbcStringToSid(user_sid_str, &user_sid);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	result = winbindd_request_response(WINBINDD_GETUSERDOMGROUPS, &request,
+				  &response);
 
-	wbc_status = wbcLookupUserSids(&user_sid, true, &num_sids, &sids);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	if (result != NSS_STATUS_SUCCESS)
+		return False;
 
-	for (i = 0; i < num_sids; i++) {
-		char *str = NULL;
-		wbc_status = wbcSidToString(&sids[i], &str);
-		if (!WBC_ERROR_IS_OK(wbc_status)) {
-			wbcFreeMemory(sids);
-			return false;
-		}
-		d_printf("%s\n", str);
-		wbcFreeMemory(str);
-	}
+	if (response.data.num_entries != 0)
+		printf("%s", (char *)response.extra_data.data);
+	
+	SAFE_FREE(response.extra_data.data);
 
-	wbcFreeMemory(sids);
-
-	return true;
+	return True;
 }
 
 /* Convert NetBIOS name to IP */
 
-static bool wbinfo_wins_byname(const char *name)
+static BOOL wbinfo_wins_byname(char *name)
 {
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	char *ip = NULL;
+	struct winbindd_request request;
+	struct winbindd_response response;
 
-	wbc_status = wbcResolveWinsByName(name, &ip);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
+	/* Send request */
+
+	fstrcpy(request.data.winsreq, name);
+
+	if (winbindd_request_response(WINBINDD_WINS_BYNAME, &request, &response) !=
+	    NSS_STATUS_SUCCESS) {
+		return False;
 	}
 
 	/* Display response */
 
-	d_printf("%s\n", ip);
+	d_printf("%s\n", response.data.winsresp);
 
-	wbcFreeMemory(ip);
-
-	return true;
+	return True;
 }
 
 /* Convert IP to NetBIOS name */
 
-static bool wbinfo_wins_byip(const char *ip)
+static BOOL wbinfo_wins_byip(char *ip)
 {
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	char *name = NULL;
+	struct winbindd_request request;
+	struct winbindd_response response;
 
-	wbc_status = wbcResolveWinsByIP(ip, &name);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
+	/* Send request */
+
+	fstrcpy(request.data.winsreq, ip);
+
+	if (winbindd_request_response(WINBINDD_WINS_BYIP, &request, &response) !=
+	    NSS_STATUS_SUCCESS) {
+		return False;
 	}
 
 	/* Display response */
 
-	d_printf("%s\n", name);
+	d_printf("%s\n", response.data.winsresp);
 
-	wbcFreeMemory(name);
-
-	return true;
+	return True;
 }
 
-/* List all/trusted domains */
+/* List trusted domains */
 
-static bool wbinfo_list_domains(bool list_all_domains, bool verbose)
+static BOOL wbinfo_list_domains(BOOL list_all_domains)
 {
-	struct wbcDomainInfo *domain_list = NULL;
-	size_t num_domains;
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	bool print_all = !list_all_domains && verbose;
-	int i;
+	struct winbindd_request request;
+	struct winbindd_response response;
 
-	wbc_status = wbcListTrusts(&domain_list, &num_domains);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
 
-	if (print_all) {
-		d_printf("%-16s%-24s%-12s%-12s%-5s%-5s\n", 
-			 "Domain Name", "DNS Domain", "Trust Type", 
-			 "Transitive", "In", "Out");
-	}
+	/* Send request */
 
-	for (i=0; i<num_domains; i++) {
-		d_printf("%-16s", domain_list[i].short_name);
+	request.data.list_all_domains = list_all_domains;
 
-		if (!print_all) {
-			d_printf("\n");	
-			continue;
-		}
+	if (winbindd_request_response(WINBINDD_LIST_TRUSTDOM, &request, &response) !=
+	    NSS_STATUS_SUCCESS)
+		return False;
 
-		d_printf("%-24s", domain_list[i].dns_name);
+	/* Display response */
 
-		switch(domain_list[i].trust_type) {
-		case WBC_DOMINFO_TRUSTTYPE_NONE:
-			d_printf("None        ");
-			break;
-		case WBC_DOMINFO_TRUSTTYPE_FOREST:		
-			d_printf("Forest      ");
-			break;
-		case WBC_DOMINFO_TRUSTTYPE_EXTERNAL:		
-			d_printf("External    ");
-			break;
-		case WBC_DOMINFO_TRUSTTYPE_IN_FOREST:
-			d_printf("In-Forest   ");
-			break;
-		}
+	if (response.extra_data.data) {
+		const char *extra_data = (char *)response.extra_data.data;
+		fstring name;
+		char *p;
 
-		if (domain_list[i].trust_flags & WBC_DOMINFO_TRUST_TRANSITIVE) {
-			d_printf("Yes         ");
-		} else {
-			d_printf("No          ");
+		while(next_token(&extra_data, name, "\n", sizeof(fstring))) {
+			p = strchr(name, '\\');
+			if (p == 0) {
+				d_fprintf(stderr, "Got invalid response: %s\n",
+					 extra_data);
+				return False;
+			}
+			*p = 0;
+			d_printf("%s\n", name);
 		}
 
-		if (domain_list[i].trust_flags & WBC_DOMINFO_TRUST_INCOMING) {
-			d_printf("Yes  ");
-		} else {
-			d_printf("No   ");
-		}
-
-		if (domain_list[i].trust_flags & WBC_DOMINFO_TRUST_OUTGOING) {
-			d_printf("Yes  ");
-		} else {
-			d_printf("No   ");
-		}
-
-		d_printf("\n");
+		SAFE_FREE(response.extra_data.data);
 	}
 
-	return true;
+	return True;
 }
 
 /* List own domain */
 
-static bool wbinfo_list_own_domain(void)
+static BOOL wbinfo_list_own_domain(void)
 {
 	d_printf("%s\n", get_winbind_domain());
 
-	return true;
+	return True;
 }
 
 /* show sequence numbers */
-static bool wbinfo_show_sequence(const char *domain)
+static BOOL wbinfo_show_sequence(const char *domain)
 {
-	d_printf("This command has been deprecated.  Please use the --online-status option instead.\n");
-	return false;
-}
+	struct winbindd_request  request;
+	struct winbindd_response response;
 
-/* show sequence numbers */
-static bool wbinfo_show_onlinestatus(const char *domain)
-{
-	struct wbcDomainInfo *domain_list = NULL;
-	size_t num_domains;
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	int i;
+	ZERO_STRUCT(response);
+	ZERO_STRUCT(request);
 
-	wbc_status = wbcListTrusts(&domain_list, &num_domains);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	if ( domain )
+		fstrcpy( request.domain_name, domain );
 
-	for (i=0; i<num_domains; i++) {
-		bool is_offline;
+	/* Send request */
 
-		if (domain) {
-			if (!strequal(domain_list[i].short_name, domain)) {
-				continue;
-			}
-		}
+	if (winbindd_request_response(WINBINDD_SHOW_SEQUENCE, &request, &response) !=
+	    NSS_STATUS_SUCCESS)
+		return False;
 
-		is_offline = (domain_list[i].domain_flags & WBC_DOMINFO_DOMAIN_OFFLINE);
-		
-		d_printf("%s : %s\n", 
-			 domain_list[i].short_name,
-			 is_offline ? "offline" : "online" );
+	/* Display response */
+
+	if (response.extra_data.data) {
+		char *extra_data = (char *)response.extra_data.data;
+		d_printf("%s", extra_data);
+		SAFE_FREE(response.extra_data.data);
 	}
 
-	return true;
+	return True;
 }
 
-
 /* Show domain info */
 
-static bool wbinfo_domain_info(const char *domain)
+static BOOL wbinfo_domain_info(const char *domain_name)
 {
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	struct wbcDomainInfo *dinfo = NULL;
-	char *sid_str = NULL;
+	struct winbindd_request request;
+	struct winbindd_response response;
 
-	if ((domain == NULL) || (strequal(domain, ".")) || (domain[0] == '\0')) {
-		domain = get_winbind_domain();
-	}
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
 
+	if ((strequal(domain_name, ".")) || (domain_name[0] == '\0'))
+		fstrcpy(request.domain_name, get_winbind_domain());
+	else
+		fstrcpy(request.domain_name, domain_name);
+
 	/* Send request */
 
-	wbc_status = wbcDomainInfo(domain, &dinfo);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	if (winbindd_request_response(WINBINDD_DOMAIN_INFO, &request, &response) !=
+	    NSS_STATUS_SUCCESS)
+		return False;
 
-	wbc_status = wbcSidToString(&dinfo->sid, &sid_str);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		wbcFreeMemory(dinfo);
-		return false;
-	}
-
 	/* Display response */
 
-	d_printf("Name              : %s\n", dinfo->short_name);
-	d_printf("Alt_Name          : %s\n", dinfo->dns_name);
+	d_printf("Name              : %s\n", response.data.domain_info.name);
+	d_printf("Alt_Name          : %s\n", response.data.domain_info.alt_name);
 
-	d_printf("SID               : %s\n", sid_str);
+	d_printf("SID               : %s\n", response.data.domain_info.sid);
 
 	d_printf("Active Directory  : %s\n",
-		 (dinfo->domain_flags & WBC_DOMINFO_DOMAIN_AD) ? "Yes" : "No");
+		 response.data.domain_info.active_directory ? "Yes" : "No");
 	d_printf("Native            : %s\n",
-		 (dinfo->domain_flags & WBC_DOMINFO_DOMAIN_NATIVE) ? "Yes" : "No");
+		 response.data.domain_info.native_mode ? "Yes" : "No");
 
 	d_printf("Primary           : %s\n",
-		 (dinfo->domain_flags & WBC_DOMINFO_DOMAIN_PRIMARY) ? "Yes" : "No");
+		 response.data.domain_info.primary ? "Yes" : "No");
 
-	wbcFreeMemory(sid_str);
-	wbcFreeMemory(dinfo);
+	d_printf("Sequence          : %d\n", response.data.domain_info.sequence_number);
 
-	return true;
+	return True;
 }
 
 /* Get a foreign DC's name */
-static bool wbinfo_getdcname(const char *domain_name)
+static BOOL wbinfo_getdcname(const char *domain_name)
 {
 	struct winbindd_request request;
 	struct winbindd_response response;
@@ -518,303 +455,250 @@
 	if (winbindd_request_response(WINBINDD_GETDCNAME, &request, &response) !=
 	    NSS_STATUS_SUCCESS) {
 		d_fprintf(stderr, "Could not get dc name for %s\n", domain_name);
-		return false;
+		return False;
 	}
 
 	/* Display response */
 
 	d_printf("%s\n", response.data.dc_name);
 
-	return true;
+	return True;
 }
 
-/* Find a DC */
-static bool wbinfo_dsgetdcname(const char *domain_name, uint32_t flags)
-{
-	struct winbindd_request request;
-	struct winbindd_response response;
-
-	ZERO_STRUCT(request);
-	ZERO_STRUCT(response);
-
-	fstrcpy(request.domain_name, domain_name);
-	request.flags = flags;
-
-	request.flags |= DS_DIRECTORY_SERVICE_REQUIRED;
-
-	/* Send request */
-
-	if (winbindd_request_response(WINBINDD_DSGETDCNAME, &request, &response) !=
-	    NSS_STATUS_SUCCESS) {
-		d_fprintf(stderr, "Could not find dc for %s\n", domain_name);
-		return false;
-	}
-
-	/* Display response */
-
-	d_printf("%s\n", response.data.dc_name);
-
-	return true;
-}
-
 /* Check trust account password */
 
-static bool wbinfo_check_secret(void)
+static BOOL wbinfo_check_secret(void)
 {
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	struct wbcAuthErrorInfo *error = NULL;
+        struct winbindd_response response;
+        NSS_STATUS result;
 
-	wbc_status = wbcCheckTrustCredentials(NULL, &error);
+        ZERO_STRUCT(response);
 
-	d_printf("checking the trust secret via RPC calls %s\n",
-		 WBC_ERROR_IS_OK(wbc_status) ? "succeeded" : "failed");
+        result = winbindd_request_response(WINBINDD_CHECK_MACHACC, NULL, &response);
+		
+	d_printf("checking the trust secret via RPC calls %s\n", 
+		 (result == NSS_STATUS_SUCCESS) ? "succeeded" : "failed");
 
-	if (wbc_status == WBC_ERR_AUTH_ERROR) {
-		d_fprintf(stderr, "error code was %s (0x%x)\n",
-			  error->nt_string, error->nt_status);
-		wbcFreeMemory(error);
-	}
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
-
-	return true;
+	if (result != NSS_STATUS_SUCCESS)	
+		d_fprintf(stderr, "error code was %s (0x%x)\n", 
+		 	 response.data.auth.nt_status_string, 
+		 	 response.data.auth.nt_status);
+	
+	return result == NSS_STATUS_SUCCESS;	
 }
 
 /* Convert uid to sid */
 
-static bool wbinfo_uid_to_sid(uid_t uid)
+static BOOL wbinfo_uid_to_sid(uid_t uid)
 {
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	struct wbcDomainSid sid;
-	char *sid_str = NULL;
+	struct winbindd_request request;
+	struct winbindd_response response;
 
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
 	/* Send request */
 
-	wbc_status = wbcUidToSid(uid, &sid);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	request.data.uid = uid;
 
-	wbc_status = wbcSidToString(&sid, &sid_str);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	if (winbindd_request_response(WINBINDD_UID_TO_SID, &request, &response) !=
+	    NSS_STATUS_SUCCESS)
+		return False;
 
 	/* Display response */
 
-	d_printf("%s\n", sid_str);
+	d_printf("%s\n", response.data.sid.sid);
 
-	wbcFreeMemory(sid_str);
-
-	return true;
+	return True;
 }
 
 /* Convert gid to sid */
 
-static bool wbinfo_gid_to_sid(gid_t gid)
+static BOOL wbinfo_gid_to_sid(gid_t gid)
 {
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	struct wbcDomainSid sid;
-	char *sid_str = NULL;
+	struct winbindd_request request;
+	struct winbindd_response response;
 
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
 	/* Send request */
 
-	wbc_status = wbcGidToSid(gid, &sid);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	request.data.gid = gid;
 
-	wbc_status = wbcSidToString(&sid, &sid_str);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	if (winbindd_request_response(WINBINDD_GID_TO_SID, &request, &response) !=
+	    NSS_STATUS_SUCCESS)
+		return False;
 
 	/* Display response */
 
-	d_printf("%s\n", sid_str);
+	d_printf("%s\n", response.data.sid.sid);
 
-	wbcFreeMemory(sid_str);
-
-	return true;
+	return True;
 }
 
 /* Convert sid to uid */
 
-static bool wbinfo_sid_to_uid(const char *sid_str)
+static BOOL wbinfo_sid_to_uid(char *sid)
 {
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	struct wbcDomainSid sid;
-	uid_t uid;
+	struct winbindd_request request;
+	struct winbindd_response response;
 
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
 	/* Send request */
 
-	wbc_status = wbcStringToSid(sid_str, &sid);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	fstrcpy(request.data.sid, sid);
 
-	wbc_status = wbcSidToUid(&sid, &uid);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	if (winbindd_request_response(WINBINDD_SID_TO_UID, &request, &response) !=
+	    NSS_STATUS_SUCCESS)
+		return False;
 
 	/* Display response */
 
-	d_printf("%d\n", (int)uid);
+	d_printf("%d\n", (int)response.data.uid);
 
-	return true;
+	return True;
 }
 
-static bool wbinfo_sid_to_gid(const char *sid_str)
+static BOOL wbinfo_sid_to_gid(char *sid)
 {
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	struct wbcDomainSid sid;
-	gid_t gid;
+	struct winbindd_request request;
+	struct winbindd_response response;
 
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
 	/* Send request */
 
-	wbc_status = wbcStringToSid(sid_str, &sid);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	fstrcpy(request.data.sid, sid);
 
-	wbc_status = wbcSidToGid(&sid, &gid);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	if (winbindd_request_response(WINBINDD_SID_TO_GID, &request, &response) !=
+	    NSS_STATUS_SUCCESS)
+		return False;
 
 	/* Display response */
 
-	d_printf("%d\n", (int)gid);
+	d_printf("%d\n", (int)response.data.gid);
 
-	return true;
+	return True;
 }
 
-static bool wbinfo_allocate_uid(void)
+static BOOL wbinfo_allocate_uid(void)
 {
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
 	uid_t uid;
 
-	/* Send request */
+	if (!winbind_allocate_uid(&uid))
+		return False;
 
-	wbc_status = wbcAllocateUid(&uid);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
-
-	/* Display response */
-
 	d_printf("New uid: %d\n", uid);
 
-	return true;
+	return True;
 }
 
-static bool wbinfo_allocate_gid(void)
+static BOOL wbinfo_allocate_gid(void)
 {
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
 	gid_t gid;
 
-	/* Send request */
+	if (!winbind_allocate_gid(&gid))
+		return False;
 
-	wbc_status = wbcAllocateGid(&gid);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
-
-	/* Display response */
-
 	d_printf("New gid: %d\n", gid);
 
-	return true;
+	return True;
 }
 
 /* Convert sid to string */
 
-static bool wbinfo_lookupsid(const char *sid_str)
+static BOOL wbinfo_lookupsid(char *sid)
 {
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	struct wbcDomainSid sid;
-	char *domain;
-	char *name;
-	enum wbcSidType type;
+	struct winbindd_request request;
+	struct winbindd_response response;
 
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
 	/* Send off request */
 
-	wbc_status = wbcStringToSid(sid_str, &sid);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	fstrcpy(request.data.sid, sid);
 
-	wbc_status = wbcLookupSid(&sid, &domain, &name, &type);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	if (winbindd_request_response(WINBINDD_LOOKUPSID, &request, &response) !=
+	    NSS_STATUS_SUCCESS)
+		return False;
 
 	/* Display response */
 
-	d_printf("%s%c%s %d\n",
-		 domain, winbind_separator(), name, type);
+	d_printf("%s%c%s %d\n", response.data.name.dom_name, 
+		 winbind_separator(), response.data.name.name, 
+		 response.data.name.type);
 
-	return true;
+	return True;
 }
 
 /* Lookup a list of RIDs */
 
-static bool wbinfo_lookuprids(const char *domain, const char *arg)
+static BOOL wbinfo_lookuprids(char *domain, char *arg)
 {
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	struct wbcDomainInfo *dinfo = NULL;
-	char *domain_name = NULL;
-	const char **names = NULL;
-	enum wbcSidType *types = NULL;
 	size_t i;
+	DOM_SID sid;
 	int num_rids;
-	uint32 *rids = NULL;
+	uint32 *rids;
 	const char *p;
-	char *ridstr;
-	TALLOC_CTX *mem_ctx = NULL;
-	bool ret = false;
+	char ridstr[32];
+	const char **names;
+	enum lsa_SidType *types;
+	const char *domain_name;
+	TALLOC_CTX *mem_ctx;
+	struct winbindd_request request;
+	struct winbindd_response response;
 
-	if ((domain == NULL) || (strequal(domain, ".")) || (domain[0] == '\0')) {
-		domain = get_winbind_domain();
-	}
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
 
+	if ((domain == NULL) || (strequal(domain, ".")) || (domain[0] == '\0'))
+		fstrcpy(request.domain_name, get_winbind_domain());
+	else
+		fstrcpy(request.domain_name, domain);
+
 	/* Send request */
 
-	wbc_status = wbcDomainInfo(domain, &dinfo);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		d_printf("wbcDomainInfo(%s) failed: %s\n", domain,
-			 wbcErrorString(wbc_status));
-		goto done;
+	if (winbindd_request_response(WINBINDD_DOMAIN_INFO, &request, &response) !=
+	    NSS_STATUS_SUCCESS) {
+		d_printf("Could not get domain sid for %s\n", request.domain_name);
+		return False;
 	}
 
+	if (!string_to_sid(&sid, response.data.domain_info.sid)) {
+		d_printf("Could not convert %s to sid\n", response.data.domain_info.sid);
+		return False;
+	}
+
 	mem_ctx = talloc_new(NULL);
 	if (mem_ctx == NULL) {
 		d_printf("talloc_new failed\n");
-		goto done;
+		return False;
 	}
 
 	num_rids = 0;
 	rids = NULL;
 	p = arg;
 
-	while (next_token_talloc(mem_ctx, &p, &ridstr, " ,\n")) {
+	while (next_token(&p, ridstr, " ,\n", sizeof(ridstr))) {
 		uint32 rid = strtoul(ridstr, NULL, 10);
 		ADD_TO_ARRAY(mem_ctx, uint32, rid, &rids, &num_rids);
 	}
 
 	if (rids == NULL) {
-		d_printf("no rids\n");
-		goto done;
+		TALLOC_FREE(mem_ctx);
+		return False;
 	}
 
-	wbc_status = wbcLookupRids(&dinfo->sid, num_rids, rids,
-				   (const char **)&domain_name, &names, &types);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		d_printf("winbind_lookup_rids failed: %s\n",
-			 wbcErrorString(wbc_status));
-		goto done;
+	if (!winbind_lookup_rids(mem_ctx, &sid, num_rids, rids,
+				 &domain_name, &names, &types)) {
+		d_printf("winbind_lookup_rids failed\n");
+		TALLOC_FREE(mem_ctx);
+		return False;
 	}
 
 	d_printf("Domain: %s\n", domain_name);
@@ -824,63 +708,39 @@
 			 sid_type_lookup(types[i]));
 	}
 
-	ret = true;
-done:
-	if (dinfo) {
-		wbcFreeMemory(dinfo);
-	}
-	if (domain_name) {
-		wbcFreeMemory(domain_name);
-	}
-	if (names) {
-		wbcFreeMemory(names);
-	}
-	if (types) {
-		wbcFreeMemory(types);
-	}
 	TALLOC_FREE(mem_ctx);
-	return ret;
+	return True;
 }
 
 /* Convert string to sid */
 
-static bool wbinfo_lookupname(const char *full_name)
+static BOOL wbinfo_lookupname(char *name)
 {
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	struct wbcDomainSid sid;
-	char *sid_str;
-	enum wbcSidType type;
-	fstring domain_name;
-	fstring account_name;
+	struct winbindd_request request;
+	struct winbindd_response response;
 
 	/* Send off request */
 
-	parse_wbinfo_domain_user(full_name, domain_name,
-				 account_name);
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
 
-	wbc_status = wbcLookupName(domain_name, account_name,
-				   &sid, &type);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	parse_wbinfo_domain_user(name, request.data.name.dom_name, 
+				 request.data.name.name);
 
-	wbc_status = wbcSidToString(&sid, &sid_str);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	if (winbindd_request_response(WINBINDD_LOOKUPNAME, &request, &response) !=
+	    NSS_STATUS_SUCCESS)
+		return False;
 
 	/* Display response */
 
-	d_printf("%s %s (%d)\n", sid_str, sid_type_lookup(type), type);
+	d_printf("%s %s (%d)\n", response.data.sid.sid, sid_type_lookup(response.data.sid.type), response.data.sid.type);
 
-	wbcFreeMemory(sid_str);
-
-	return true;
+	return True;
 }
 
 /* Authenticate a user with a plaintext password */
 
-static bool wbinfo_auth_krb5(char *username, const char *cctype, uint32 flags)
+static BOOL wbinfo_auth_krb5(char *username, const char *cctype, uint32 flags)
 {
 	struct winbindd_request request;
 	struct winbindd_response response;
@@ -924,8 +784,8 @@
 	if (result == NSS_STATUS_SUCCESS) {
 
 		if (request.flags & WBFLAG_PAM_INFO3_TEXT) {
-			if (response.data.auth.info3.user_flgs & NETLOGON_CACHED_ACCOUNT) {
-				d_printf("user_flgs: NETLOGON_CACHED_ACCOUNT\n");
+			if (response.data.auth.info3.user_flgs & LOGON_CACHED_ACCOUNT) {
+				d_printf("user_flgs: LOGON_CACHED_ACCOUNT\n");
 			}
 		}
 
@@ -941,167 +801,167 @@
 
 /* Authenticate a user with a plaintext password */
 
-static bool wbinfo_auth(char *username)
+static BOOL wbinfo_auth(char *username)
 {
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	char *s = NULL;
-	char *p = NULL;
-	const char *password = NULL;
-	char *name = NULL;
+	struct winbindd_request request;
+	struct winbindd_response response;
+        NSS_STATUS result;
+        char *p;
 
-	if ((s = SMB_STRDUP(username)) == NULL) {
-		return false;
-	}
+	/* Send off request */
 
-	if ((p = strchr(s, '%')) != NULL) {
-		*p = 0;
-		p++;
-		password = p;
-	} else {
-		password = "";
-	}
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
 
-	name = s;
+        p = strchr(username, '%');
 
-	wbc_status = wbcAuthenticateUser(name, password);
+        if (p) {
+                *p = 0;
+                fstrcpy(request.data.auth.user, username);
+                fstrcpy(request.data.auth.pass, p + 1);
+                *p = '%';
+        } else
+                fstrcpy(request.data.auth.user, username);
 
-	d_printf("plaintext password authentication %s\n",
-		 WBC_ERROR_IS_OK(wbc_status) ? "succeeded" : "failed");
+	result = winbindd_request_response(WINBINDD_PAM_AUTH, &request, &response);
 
-#if 0
+	/* Display response */
+
+        d_printf("plaintext password authentication %s\n", 
+               (result == NSS_STATUS_SUCCESS) ? "succeeded" : "failed");
+
 	if (response.data.auth.nt_status)
 		d_fprintf(stderr, "error code was %s (0x%x)\nerror messsage was: %s\n", 
-			 response.data.auth.nt_status_string,
+			 response.data.auth.nt_status_string, 
 			 response.data.auth.nt_status,
 			 response.data.auth.error_string);
-#endif
 
-	SAFE_FREE(s);
-
-	return WBC_ERROR_IS_OK(wbc_status);
+        return result == NSS_STATUS_SUCCESS;
 }
 
 /* Authenticate a user with a challenge/response */
 
-static bool wbinfo_auth_crap(char *username)
+static BOOL wbinfo_auth_crap(char *username)
 {
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	struct wbcAuthUserParams params;
-	struct wbcAuthUserInfo *info = NULL;
-	struct wbcAuthErrorInfo *err = NULL;
-	DATA_BLOB lm = data_blob_null;
-	DATA_BLOB nt = data_blob_null;
-	fstring name_user;
-	fstring name_domain;
-	fstring pass;
-	char *p;
+	struct winbindd_request request;
+	struct winbindd_response response;
+        NSS_STATUS result;
+        fstring name_user;
+        fstring name_domain;
+        fstring pass;
+        char *p;
 
-	p = strchr(username, '%');
+	/* Send off request */
 
-	if (p) {
-		*p = 0;
-		fstrcpy(pass, p + 1);
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+
+        p = strchr(username, '%');
+
+        if (p) {
+                *p = 0;
+                fstrcpy(pass, p + 1);
 	}
 		
 	parse_wbinfo_domain_user(username, name_domain, name_user);
 
-	params.account_name	= name_user;
-	params.domain_name	= name_domain;
-	params.workstation_name	= NULL;
+	request.data.auth_crap.logon_parameters = MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT | MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT;
 
-	params.flags		= 0;
-	params.parameter_control= WBC_MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT |
-				  WBC_MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT;
+	fstrcpy(request.data.auth_crap.user, name_user);
 
-	params.level		= WBC_AUTH_USER_LEVEL_RESPONSE;
+	fstrcpy(request.data.auth_crap.domain, 
+			      name_domain);
 
-	generate_random_buffer(params.password.response.challenge, 8);
-
+	generate_random_buffer(request.data.auth_crap.chal, 8);
+        
 	if (lp_client_ntlmv2_auth()) {
 		DATA_BLOB server_chal;
-		DATA_BLOB names_blob;
+		DATA_BLOB names_blob;	
 
-		server_chal = data_blob(params.password.response.challenge, 8);
+		DATA_BLOB lm_response;
+		DATA_BLOB nt_response;
 
+		server_chal = data_blob(request.data.auth_crap.chal, 8); 
+		
 		/* Pretend this is a login to 'us', for blob purposes */
 		names_blob = NTLMv2_generate_names_blob(global_myname(), lp_workgroup());
-
-		if (!SMBNTLMv2encrypt(name_user, name_domain, pass, &server_chal,
+		
+		if (!SMBNTLMv2encrypt(name_user, name_domain, pass, &server_chal, 
 				      &names_blob,
-				      &lm, &nt, NULL)) {
+				      &lm_response, &nt_response, NULL)) {
 			data_blob_free(&names_blob);
 			data_blob_free(&server_chal);
-			return false;
+			return False;
 		}
 		data_blob_free(&names_blob);
 		data_blob_free(&server_chal);
 
+		memcpy(request.data.auth_crap.nt_resp, nt_response.data, 
+		       MIN(nt_response.length, 
+			   sizeof(request.data.auth_crap.nt_resp)));
+		request.data.auth_crap.nt_resp_len = nt_response.length;
+
+		memcpy(request.data.auth_crap.lm_resp, lm_response.data, 
+		       MIN(lm_response.length, 
+			   sizeof(request.data.auth_crap.lm_resp)));
+		request.data.auth_crap.lm_resp_len = lm_response.length;
+		       
+		data_blob_free(&nt_response);
+		data_blob_free(&lm_response);
+
 	} else {
-		if (lp_client_lanman_auth()) {
-			bool ok;
-			lm = data_blob(NULL, 24);
-			ok = SMBencrypt(pass, params.password.response.challenge,
-					lm.data);
-			if (!ok) {
-				data_blob_free(&lm);
-			}
+		if (lp_client_lanman_auth() 
+		    && SMBencrypt(pass, request.data.auth_crap.chal, 
+			       (uchar *)request.data.auth_crap.lm_resp)) {
+			request.data.auth_crap.lm_resp_len = 24;
+		} else {
+			request.data.auth_crap.lm_resp_len = 0;
 		}
-		nt = data_blob(NULL, 24);
-		SMBNTencrypt(pass, params.password.response.challenge,
-			     nt.data);
+		SMBNTencrypt(pass, request.data.auth_crap.chal,
+			     (uchar *)request.data.auth_crap.nt_resp);
+
+		request.data.auth_crap.nt_resp_len = 24;
 	}
 
-	params.password.response.nt_length	= nt.length;
-	params.password.response.nt_data	= nt.data;
-	params.password.response.lm_length	= lm.length;
-	params.password.response.lm_data	= lm.data;
+	result = winbindd_request_response(WINBINDD_PAM_AUTH_CRAP, &request, &response);
 
-	wbc_status = wbcAuthenticateUserEx(&params, &info, &err);
-
 	/* Display response */
 
-	d_printf("challenge/response password authentication %s\n",
-		 WBC_ERROR_IS_OK(wbc_status) ? "succeeded" : "failed");
+        d_printf("challenge/response password authentication %s\n", 
+               (result == NSS_STATUS_SUCCESS) ? "succeeded" : "failed");
 
-	if (wbc_status == WBC_ERR_AUTH_ERROR) {
+	if (response.data.auth.nt_status)
 		d_fprintf(stderr, "error code was %s (0x%x)\nerror messsage was: %s\n", 
-			 err->nt_string,
-			 err->nt_status,
-			 err->display_string);
-		wbcFreeMemory(err);
-	} else if (WBC_ERROR_IS_OK(wbc_status)) {
-		wbcFreeMemory(info);
-	}
+			 response.data.auth.nt_status_string, 
+			 response.data.auth.nt_status,
+			 response.data.auth.error_string);
 
-	data_blob_free(&nt);
-	data_blob_free(&lm);
-
-	return WBC_ERROR_IS_OK(wbc_status);
+        return result == NSS_STATUS_SUCCESS;
 }
 
 /* Authenticate a user with a plaintext password and set a token */
 
-static bool wbinfo_klog(char *username)
+static BOOL wbinfo_klog(char *username)
 {
 	struct winbindd_request request;
 	struct winbindd_response response;
-	NSS_STATUS result;
-	char *p;
+        NSS_STATUS result;
+        char *p;
 
 	/* Send off request */
 
 	ZERO_STRUCT(request);
 	ZERO_STRUCT(response);
 
-	p = strchr(username, '%');
+        p = strchr(username, '%');
 
-	if (p) {
-		*p = 0;
-		fstrcpy(request.data.auth.user, username);
-		fstrcpy(request.data.auth.pass, p + 1);
-		*p = '%';
-	} else {
-		fstrcpy(request.data.auth.user, username);
+        if (p) {
+                *p = 0;
+                fstrcpy(request.data.auth.user, username);
+                fstrcpy(request.data.auth.pass, p + 1);
+                *p = '%';
+        } else {
+                fstrcpy(request.data.auth.user, username);
 		fstrcpy(request.data.auth.pass, getpass("Password: "));
 	}
 
@@ -1111,95 +971,114 @@
 
 	/* Display response */
 
-	d_printf("plaintext password authentication %s\n",
-		 (result == NSS_STATUS_SUCCESS) ? "succeeded" : "failed");
+        d_printf("plaintext password authentication %s\n", 
+               (result == NSS_STATUS_SUCCESS) ? "succeeded" : "failed");
 
 	if (response.data.auth.nt_status)
 		d_fprintf(stderr, "error code was %s (0x%x)\nerror messsage was: %s\n", 
-			 response.data.auth.nt_status_string,
+			 response.data.auth.nt_status_string, 
 			 response.data.auth.nt_status,
 			 response.data.auth.error_string);
 
 	if (result != NSS_STATUS_SUCCESS)
-		return false;
+		return False;
 
 	if (response.extra_data.data == NULL) {
 		d_fprintf(stderr, "Did not get token data\n");
-		return false;
+		return False;
 	}
 
 	if (!afs_settoken_str((char *)response.extra_data.data)) {
 		d_fprintf(stderr, "Could not set token\n");
-		return false;
+		return False;
 	}
 
 	d_printf("Successfully created AFS token\n");
-	return true;
+	return True;
 }
 
 /* Print domain users */
 
-static bool print_domain_users(const char *domain)
+static BOOL print_domain_users(const char *domain)
 {
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	uint32_t i;
-	uint32_t num_users = 0;
-	const char **users = NULL;
+	struct winbindd_request request;
+	struct winbindd_response response;
+	const char *extra_data;
+	fstring name;
 
 	/* Send request to winbind daemon */
 
-	/* '.' is the special sign for our own domain */
-	if (domain && strcmp(domain, ".") == 0) {
-		domain = get_winbind_domain();
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+	
+	if (domain) {
+		/* '.' is the special sign for our own domain */
+		if ( strequal(domain, ".") )
+			fstrcpy( request.domain_name, get_winbind_domain() );
+		else
+			fstrcpy( request.domain_name, domain );
 	}
 
-	wbc_status = wbcListUsers(domain, &num_users, &users);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	if (winbindd_request_response(WINBINDD_LIST_USERS, &request, &response) !=
+	    NSS_STATUS_SUCCESS)
+		return False;
 
-	for (i=0; i < num_users; i++) {
-		d_printf("%s\n", users[i]);
-	}
+	/* Look through extra data */
 
-	wbcFreeMemory(users);
+	if (!response.extra_data.data)
+		return False;
 
-	return true;
+	extra_data = (const char *)response.extra_data.data;
+
+	while(next_token(&extra_data, name, ",", sizeof(fstring)))
+		d_printf("%s\n", name);
+	
+	SAFE_FREE(response.extra_data.data);
+
+	return True;
 }
 
 /* Print domain groups */
 
-static bool print_domain_groups(const char *domain)
+static BOOL print_domain_groups(const char *domain)
 {
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	uint32_t i;
-	uint32_t num_groups = 0;
-	const char **groups = NULL;
+	struct winbindd_request  request;
+	struct winbindd_response response;
+	const char *extra_data;
+	fstring name;
 
-	/* Send request to winbind daemon */
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
 
-	/* '.' is the special sign for our own domain */
-	if (domain && strcmp(domain, ".") == 0) {
-		domain = get_winbind_domain();
+	if (domain) {
+		if ( strequal(domain, ".") )
+			fstrcpy( request.domain_name, get_winbind_domain() );
+		else
+			fstrcpy( request.domain_name, domain );
 	}
 
-	wbc_status = wbcListGroups(domain, &num_groups, &groups);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
-	}
+	if (winbindd_request_response(WINBINDD_LIST_GROUPS, &request, &response) !=
+	    NSS_STATUS_SUCCESS)
+		return False;
 
-	for (i=0; i < num_groups; i++) {
-		d_printf("%s\n", groups[i]);
-	}
+	/* Look through extra data */
 
-	wbcFreeMemory(groups);
+	if (!response.extra_data.data)
+		return False;
 
-	return true;
+	extra_data = (const char *)response.extra_data.data;
+
+	while(next_token(&extra_data, name, ",", sizeof(fstring)))
+		d_printf("%s\n", name);
+
+	SAFE_FREE(response.extra_data.data);
+	
+	return True;
 }
 
 /* Set the authorised user for winbindd access in secrets.tdb */
 
-static bool wbinfo_set_auth_user(char *username)
+static BOOL wbinfo_set_auth_user(char *username)
 {
 	const char *password;
 	char *p;
@@ -1217,7 +1096,7 @@
 	} else {
 		char *thepass = getpass("Password: ");
 		if (thepass) {
-			password = thepass;
+			password = thepass;	
 		} else
 			password = "";
 	}
@@ -1231,7 +1110,7 @@
 		if (!secrets_store(SECRETS_AUTH_USER, user,
 				   strlen(user) + 1)) {
 			d_fprintf(stderr, "error storing username\n");
-			return false;
+			return False;
 		}
 
 		/* We always have a domain name added by the
@@ -1240,7 +1119,7 @@
 		if (!secrets_store(SECRETS_AUTH_DOMAIN, domain,
 				   strlen(domain) + 1)) {
 			d_fprintf(stderr, "error storing domain name\n");
-			return false;
+			return False;
 		}
 
 	} else {
@@ -1253,13 +1132,13 @@
 		if (!secrets_store(SECRETS_AUTH_PASSWORD, password,
 				   strlen(password) + 1)) {
 			d_fprintf(stderr, "error storing password\n");
-			return false;
+			return False;
 		}
 
 	} else
 		secrets_delete(SECRETS_AUTH_PASSWORD);
 
-	return true;
+	return True;
 }
 
 static void wbinfo_get_auth_user(void)
@@ -1267,7 +1146,7 @@
 	char *user, *domain, *password;
 
 	/* Lift data from secrets file */
-
+	
 	secrets_fetch_ipc_userpass(&user, &domain, &password);
 
 	if ((!user || !*user) && (!domain || !*domain ) && (!password || !*password)){
@@ -1289,18 +1168,18 @@
 	SAFE_FREE(password);
 }
 
-static bool wbinfo_ping(void)
+static BOOL wbinfo_ping(void)
 {
-	wbcErr wbc_status;
+        NSS_STATUS result;
 
-	wbc_status = wbcPing();
+	result = winbindd_request_response(WINBINDD_PING, NULL, NULL);
 
 	/* Display response */
 
-	d_printf("Ping to winbindd %s\n",
-		 WBC_ERROR_IS_OK(wbc_status) ? "succeeded" : "failed");
+        d_printf("Ping to winbindd %s on fd %d\n", 
+               (result == NSS_STATUS_SUCCESS) ? "succeeded" : "failed", winbindd_fd);
 
-	return WBC_ERROR_IS_OK(wbc_status);
+        return result == NSS_STATUS_SUCCESS;
 }
 
 /* Main program */
@@ -1311,7 +1190,6 @@
 	OPT_DOMAIN_NAME,
 	OPT_SEQUENCE,
 	OPT_GETDCNAME,
-	OPT_DSGETDCNAME,
 	OPT_USERDOMGROUPS,
 	OPT_USERSIDS,
 	OPT_ALLOCATE_UID,
@@ -1319,27 +1197,23 @@
 	OPT_SEPARATOR,
 	OPT_LIST_ALL_DOMAINS,
 	OPT_LIST_OWN_DOMAIN,
-	OPT_UID_INFO,
 	OPT_GROUP_INFO,
-	OPT_VERBOSE,
-	OPT_ONLINESTATUS
 };
 
 int main(int argc, char **argv, char **envp)
 {
 	int opt;
-	TALLOC_CTX *frame = talloc_stackframe();
+
 	poptContext pc;
 	static char *string_arg;
 	static char *opt_domain_name;
 	static int int_arg;
 	int result = 1;
-	bool verbose = false;
 
 	struct poptOption long_options[] = {
 		POPT_AUTOHELP
 
-		/* longName, shortName, argInfo, argPtr, value, descrip,
+		/* longName, shortName, argInfo, argPtr, value, descrip, 
 		   argDesc */
 
 		{ "domain-users", 'u', POPT_ARG_NONE, 0, 'u', "Lists all domain users", "domain"},
@@ -1362,10 +1236,8 @@
 		{ "all-domains", 0, POPT_ARG_NONE, 0, OPT_LIST_ALL_DOMAINS, "List all domains (trusted and own domain)" },
 		{ "own-domain", 0, POPT_ARG_NONE, 0, OPT_LIST_OWN_DOMAIN, "List own domain" },
 		{ "sequence", 0, POPT_ARG_NONE, 0, OPT_SEQUENCE, "Show sequence numbers of all domains" },
-		{ "online-status", 0, POPT_ARG_NONE, 0, OPT_ONLINESTATUS, "Show whether domains are marked as online or offline"},
 		{ "domain-info", 'D', POPT_ARG_STRING, &string_arg, 'D', "Show most of the info we have about the domain" },
 		{ "user-info", 'i', POPT_ARG_STRING, &string_arg, 'i', "Get user info", "USER" },
-		{ "uid-info", 0, POPT_ARG_INT, &int_arg, OPT_UID_INFO, "Get user info from uid", "UID" },
 		{ "group-info", 0, POPT_ARG_STRING, &string_arg, OPT_GROUP_INFO, "Get group info", "GROUP" },
 		{ "user-groups", 'r', POPT_ARG_STRING, &string_arg, 'r', "Get user groups", "USER" },
 		{ "user-domgroups", 0, POPT_ARG_STRING, &string_arg,
@@ -1375,7 +1247,6 @@
 		{ "set-auth-user", 0, POPT_ARG_STRING, &string_arg, OPT_SET_AUTH_USER, "Store user and password used by winbindd (root only)", "user%password" },
 		{ "getdcname", 0, POPT_ARG_STRING, &string_arg, OPT_GETDCNAME,
 		  "Get a DC name for a foreign domain", "domainname" },
-		{ "dsgetdcname", 0, POPT_ARG_STRING, &string_arg, OPT_DSGETDCNAME, "Find a DC for a domain", "domainname" },
 		{ "get-auth-user", 0, POPT_ARG_NONE, NULL, OPT_GET_AUTH_USER, "Retrieve user and password used by winbindd (root only)", NULL },
 		{ "ping", 'p', POPT_ARG_NONE, 0, 'p', "Ping winbindd to see if it is alive" },
 		{ "domain", 0, POPT_ARG_STRING, &opt_domain_name, OPT_DOMAIN_NAME, "Define to the domain to restrict operation", "domain" },
@@ -1388,8 +1259,6 @@
 			/* "user%password,DOM\\user%password,user at EXAMPLE.COM,EXAMPLE.COM\\user%password" }, */
 #endif
 		{ "separator", 0, POPT_ARG_NONE, 0, OPT_SEPARATOR, "Get the active winbind separator", NULL },
-		{ "verbose", 0, POPT_ARG_NONE, 0, OPT_VERBOSE, "Print additional information per command", NULL },
-		POPT_COMMON_CONFIGFILE
 		POPT_COMMON_VERSION
 		POPT_TABLEEND
 	};
@@ -1397,7 +1266,17 @@
 	/* Samba client initialisation */
 	load_case_tables();
 
+	if (!lp_load(dyn_CONFIGFILE, True, False, False, True)) {
+		d_fprintf(stderr, "wbinfo: error opening config file %s. Error was %s\n",
+			dyn_CONFIGFILE, strerror(errno));
+		exit(1);
+	}
 
+	if (!init_names())
+		return 1;
+
+	load_interfaces();
+
 	/* Parse options */
 
 	pc = poptGetContext("wbinfo", argc, (const char **)argv, long_options, 0);
@@ -1411,26 +1290,10 @@
 
 	while((opt = poptGetNextOpt(pc)) != -1) {
 		/* get the generic configuration parameters like --domain */
-		switch (opt) {
-		case OPT_VERBOSE:
-			verbose = True;
-			break;
-		}
 	}
 
 	poptFreeContext(pc);
 
-	if (!lp_load(get_dyn_CONFIGFILE(), true, false, false, true)) {
-		d_fprintf(stderr, "wbinfo: error opening config file %s. Error was %s\n",
-			get_dyn_CONFIGFILE(), strerror(errno));
-		exit(1);
-	}
-
-	if (!init_names())
-		return 1;
-
-	load_interfaces();
-
 	pc = poptGetContext(NULL, argc, (const char **)argv, long_options, 
 			    POPT_CONTEXT_KEEP_FIRST);
 
@@ -1524,7 +1387,7 @@
 			}
 			break;
 		case 'm':
-			if (!wbinfo_list_domains(false, verbose)) {
+			if (!wbinfo_list_domains(False)) {
 				d_fprintf(stderr, "Could not list trusted domains\n");
 				goto done;
 			}
@@ -1535,12 +1398,6 @@
 				goto done;
 			}
 			break;
-		case OPT_ONLINESTATUS:
-			if (!wbinfo_show_onlinestatus(opt_domain_name)) {
-				d_fprintf(stderr, "Could not show online-status\n");
-				goto done;
-			}
-			break;
 		case 'D':
 			if (!wbinfo_domain_info(string_arg)) {
 				d_fprintf(stderr, "Could not get domain info\n");
@@ -1554,13 +1411,6 @@
 				goto done;
 			}
 			break;
-		case OPT_UID_INFO:
-			if ( !wbinfo_get_uidinfo(int_arg)) {
-				d_fprintf(stderr, "Could not get info for uid "
-						"%d\n", int_arg);
-				goto done;
-			}
-			break;
 		case OPT_GROUP_INFO:
 			if ( !wbinfo_get_groupinfo(string_arg)) {
 				d_fprintf(stderr, "Could not get info for "
@@ -1590,18 +1440,18 @@
 			}
 			break;
 		case 'a': {
-				bool got_error = false;
+				BOOL got_error = False;
 
 				if (!wbinfo_auth(string_arg)) {
 					d_fprintf(stderr, "Could not authenticate user %s with "
 						"plaintext password\n", string_arg);
-					got_error = true;
+					got_error = True;
 				}
 
 				if (!wbinfo_auth_crap(string_arg)) {
 					d_fprintf(stderr, "Could not authenticate user %s with "
 						"challenge/response\n", string_arg);
-					got_error = true;
+					got_error = True;
 				}
 
 				if (got_error)
@@ -1646,13 +1496,8 @@
 				goto done;
 			}
 			break;
-		case OPT_DSGETDCNAME:
-			if (!wbinfo_dsgetdcname(string_arg, 0)) {
-				goto done;
-			}
-			break;
 		case OPT_SEPARATOR: {
-			const char sep = winbind_separator_int(true);
+			const char sep = winbind_separator_int(True);
 			if ( !sep ) {
 				goto done;
 			}
@@ -1660,7 +1505,7 @@
 			break;
 		}
 		case OPT_LIST_ALL_DOMAINS:
-			if (!wbinfo_list_domains(true, verbose)) {
+			if (!wbinfo_list_domains(True)) {
 				goto done;
 			}
 			break;
@@ -1672,8 +1517,6 @@
 		/* generic configuration options */
 		case OPT_DOMAIN_NAME:
 			break;
-		case OPT_VERBOSE:
-			break;
 		default:
 			d_fprintf(stderr, "Invalid option\n");
 			poptPrintHelp(pc, stderr, 0);
@@ -1686,8 +1529,6 @@
 	/* Exit code */
 
  done:
-	talloc_destroy(frame);
-
 	poptFreeContext(pc);
 	return result;
 }

Modified: branches/samba/upstream/source/nsswitch/winbind_client.h
===================================================================
--- branches/samba/upstream/source/nsswitch/winbind_client.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nsswitch/winbind_client.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,8 +1,7 @@
 #include "winbind_nss_config.h"
-#include "winbind_struct_protocol.h"
+#include "winbindd_nss.h"
 
-void winbindd_init_request(struct winbindd_request *req,int rq_type);
-void winbindd_free_response(struct winbindd_response *response);
+void init_request(struct winbindd_request *req,int rq_type);
 NSS_STATUS winbindd_send_request(int req_type, int need_priv,
 				 struct winbindd_request *request);
 NSS_STATUS winbindd_get_response(struct winbindd_response *response);
@@ -12,19 +11,8 @@
 NSS_STATUS winbindd_priv_request_response(int req_type, 
 					  struct winbindd_request *request,
 					  struct winbindd_response *response);
-int winbindd_read_reply(struct winbindd_response *response);
+int write_sock(void *buffer, int count, int recursing, int need_priv);
+int read_reply(struct winbindd_response *response);
+void close_sock(void);
+void free_response(struct winbindd_response *response);
 
-#define winbind_env_set() \
-	(strcmp(getenv(WINBINDD_DONT_ENV)?getenv(WINBINDD_DONT_ENV):"0","1") == 0)
-
-#define winbind_off() \
-	(setenv(WINBINDD_DONT_ENV, "1", 1) == 0)
-
-#define winbind_on() \
-	(setenv(WINBINDD_DONT_ENV, "0", 1) == 0)
-
-int winbind_write_sock(void *buffer, int count, int recursing, int need_priv);
-int winbind_read_sock(void *buffer, int count);
-void winbind_close_sock(void);
-
-const char *nss_err_str(NSS_STATUS ret);

Deleted: branches/samba/upstream/source/nsswitch/winbind_krb5_locator.c
===================================================================
--- branches/samba/upstream/source/nsswitch/winbind_krb5_locator.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nsswitch/winbind_krb5_locator.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,397 +0,0 @@
-/*
-   Unix SMB/CIFS implementation.
-   kerberos locator plugin
-   Copyright (C) Guenther Deschner 2007
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "nsswitch/winbind_client.h"
-
-#ifndef DEBUG_KRB5
-#undef DEBUG_KRB5
-#endif
-
-#if defined(HAVE_KRB5) && defined(HAVE_KRB5_LOCATE_PLUGIN_H)
-
-#include <krb5/locate_plugin.h>
-
-#ifndef KRB5_PLUGIN_NO_HANDLE
-#define KRB5_PLUGIN_NO_HANDLE KRB5_KDC_UNREACH /* Heimdal */
-#endif
-
-static const char *get_service_from_locate_service_type(enum locate_service_type svc)
-{
-	switch (svc) {
-		case locate_service_kdc:
-		case locate_service_master_kdc:
-			return "88";
-		case locate_service_kadmin:
-		case locate_service_krb524:
-			/* not supported */
-			return NULL;
-		case locate_service_kpasswd:
-			return "464";
-		default:
-			break;
-	}
-	return NULL;
-
-}
-
-#ifdef DEBUG_KRB5
-static const char *locate_service_type_name(enum locate_service_type svc)
-{
-	switch (svc) {
-		case locate_service_kdc:
-			return "locate_service_kdc";
-		case locate_service_master_kdc:
-			return "locate_service_master_kdc";
-		case locate_service_kadmin:
-			return "locate_service_kadmin";
-		case locate_service_krb524:
-			return "locate_service_krb524";
-		case locate_service_kpasswd:
-			return "locate_service_kpasswd";
-		default:
-			break;
-	}
-	return NULL;
-}
-
-static const char *socktype_name(int socktype)
-{
-	switch (socktype) {
-		case SOCK_STREAM:
-			return "SOCK_STREAM";
-		case SOCK_DGRAM:
-			return "SOCK_DGRAM";
-		default:
-			break;
-	}
-	return "unknown";
-}
-
-static const char *family_name(int family)
-{
-	switch (family) {
-		case AF_UNSPEC:
-			return "AF_UNSPEC";
-		case AF_INET:
-			return "AF_INET";
-#if defined(HAVE_IPV6)
-		case AF_INET6:
-			return "AF_INET6";
-#endif
-		default:
-			break;
-	}
-	return "unknown";
-}
-#endif
-
-/**
- * Check input parameters, return KRB5_PLUGIN_NO_HANDLE for unsupported ones
- *
- * @param svc
- * @param realm string
- * @param socktype integer
- * @param family integer
- *
- * @return integer.
- */
-
-static int smb_krb5_locator_lookup_sanity_check(enum locate_service_type svc,
-						const char *realm,
-						int socktype,
-						int family)
-{
-	if (!realm || strlen(realm) == 0) {
-		return EINVAL;
-	}
-
-	switch (svc) {
-		case locate_service_kdc:
-		case locate_service_master_kdc:
-		case locate_service_kpasswd:
-			break;
-		case locate_service_kadmin:
-		case locate_service_krb524:
-			return KRB5_PLUGIN_NO_HANDLE;
-		default:
-			return EINVAL;
-	}
-
-	switch (family) {
-		case AF_UNSPEC:
-		case AF_INET:
-			break;
-#if defined(HAVE_IPV6)
-		case AF_INET6:
-			break;
-#endif
-		default:
-			return EINVAL;
-	}
-
-	switch (socktype) {
-		case SOCK_STREAM:
-		case SOCK_DGRAM:
-		case 0: /* Heimdal uses that */
-			break;
-		default:
-			return EINVAL;
-	}
-
-	return 0;
-}
-
-/**
- * Try to get addrinfo for a given host and call the krb5 callback
- *
- * @param name string
- * @param service string
- * @param in struct addrinfo hint
- * @param cbfunc krb5 callback function
- * @param cbdata void pointer cbdata
- *
- * @return krb5_error_code.
- */
-
-static krb5_error_code smb_krb5_locator_call_cbfunc(const char *name,
-						    const char *service,
-						    struct addrinfo *in,
-						    int (*cbfunc)(void *, int, struct sockaddr *),
-						    void *cbdata)
-{
-	struct addrinfo *out = NULL;
-	int ret;
-	int count = 3;
-
-	while (count) {
-
-		ret = getaddrinfo(name, service, in, &out);
-		if (ret == 0) {
-			break;
-		}
-
-		if (ret == EAI_AGAIN) {
-			count--;
-			continue;
-		}
-
-#ifdef DEBUG_KRB5
-		fprintf(stderr, "[%5u]: smb_krb5_locator_lookup: "
-			"getaddrinfo failed: %s (%d)\n",
-			(unsigned int)getpid(), gai_strerror(ret), ret);
-#endif
-
-		return KRB5_PLUGIN_NO_HANDLE;
-	}
-
-	ret = cbfunc(cbdata, out->ai_socktype, out->ai_addr);
-#ifdef DEBUG_KRB5
-	if (ret) {
-		fprintf(stderr, "[%5u]: smb_krb5_locator_lookup: "
-			"failed to call callback: %s (%d)\n",
-			(unsigned int)getpid(), error_message(ret), ret);
-	}
-#endif
-
-	freeaddrinfo(out);
-	return ret;
-}
-
-/**
- * PUBLIC INTERFACE: locate init
- *
- * @param context krb5_context
- * @param privata_data pointer to private data pointer
- *
- * @return krb5_error_code.
- */
-
-krb5_error_code smb_krb5_locator_init(krb5_context context,
-				      void **private_data)
-{
-	return 0;
-}
-
-/**
- * PUBLIC INTERFACE: close locate
- *
- * @param private_data pointer to private data
- *
- * @return void.
- */
-
-void smb_krb5_locator_close(void *private_data)
-{
-	return;
-}
-
-
-static bool ask_winbind(const char *realm, char **dcname)
-{
-	NSS_STATUS status;
-	struct winbindd_request request;
-	struct winbindd_response response;
-
-	ZERO_STRUCT(request);
-	ZERO_STRUCT(response);
-
-	request.flags = 0x40020600;
-			/* DS_KDC_REQUIRED |
-			DS_IS_DNS_NAME |
-			DS_RETURN_DNS_NAME |
-			DS_IP_REQUIRED */
-
-	strncpy(request.domain_name, realm,
-		sizeof(request.domain_name)-1);
-
-	status = winbindd_request_response(WINBINDD_DSGETDCNAME,
-					   &request, &response);
-	if (status != NSS_STATUS_SUCCESS) {
-#ifdef DEBUG_KRB5
-		fprintf(stderr,"[%5u]: smb_krb5_locator_lookup: failed with: %s\n",
-			(unsigned int)getpid(), nss_err_str(status));
-#endif
-		return false;
-	}
-
-	*dcname = strdup(response.data.dc_name);
-	if (!*dcname) {
-		return false;
-	}
-
-	return true;
-}
-
-/**
- * PUBLIC INTERFACE: locate lookup
- *
- * @param private_data pointer to private data
- * @param svc enum locate_service_type.
- * @param realm string
- * @param socktype integer
- * @param family integer
- * @param cbfunc callback function to send back entries
- * @param cbdata void pointer to cbdata
- *
- * @return krb5_error_code.
- */
-
-krb5_error_code smb_krb5_locator_lookup(void *private_data,
-					enum locate_service_type svc,
-					const char *realm,
-					int socktype,
-					int family,
-					int (*cbfunc)(void *, int, struct sockaddr *),
-					void *cbdata)
-{
-	krb5_error_code ret;
-	struct addrinfo aihints;
-	char *kdc_name = NULL;
-	const char *service = get_service_from_locate_service_type(svc);
-
-	ZERO_STRUCT(aihints);
-
-#ifdef DEBUG_KRB5
-	fprintf(stderr,"[%5u]: smb_krb5_locator_lookup: called for '%s' "
-			"svc: '%s' (%d) "
-			"socktype: '%s' (%d), family: '%s' (%d)\n",
-			(unsigned int)getpid(), realm,
-			locate_service_type_name(svc), svc,
-			socktype_name(socktype), socktype,
-		        family_name(family), family);
-#endif
-	ret = smb_krb5_locator_lookup_sanity_check(svc, realm, socktype,
-						   family);
-	if (ret) {
-#ifdef DEBUG_KRB5
-		fprintf(stderr, "[%5u]: smb_krb5_locator_lookup: "
-			"returning ret: %s (%d)\n",
-			(unsigned int)getpid(), error_message(ret), ret);
-#endif
-		return ret;
-	}
-
-	if (!winbind_env_set()) {
-		if (!ask_winbind(realm, &kdc_name)) {
-#ifdef DEBUG_KRB5
-			fprintf(stderr, "[%5u]: smb_krb5_locator_lookup: "
-				"failed to query winbindd\n",
-				(unsigned int)getpid());
-#endif
-			goto failed;
-		}
-	} else {
-		const char *env = NULL;
-		char *var = NULL;
-		if (asprintf(&var, "%s_%s",
-			     WINBINDD_LOCATOR_KDC_ADDRESS, realm) == -1) {
-			goto failed;
-		}
-		env = getenv(var);
-		if (!env) {
-#ifdef DEBUG_KRB5
-			fprintf(stderr, "[%5u]: smb_krb5_locator_lookup: "
-				"failed to get kdc from env %s\n",
-				(unsigned int)getpid(), var);
-#endif
-			free(var);
-			goto failed;
-		}
-		free(var);
-
-		kdc_name = strdup(env);
-		if (!kdc_name) {
-			goto failed;
-		}
-	}
-#ifdef DEBUG_KRB5
-	fprintf(stderr, "[%5u]: smb_krb5_locator_lookup: "
-		"got '%s' for '%s' from winbindd\n", (unsigned int)getpid(),
-		kdc_name, realm);
-#endif
-
-	aihints.ai_family = family;
-	aihints.ai_socktype = socktype;
-
-	ret = smb_krb5_locator_call_cbfunc(kdc_name,
-					   service,
-					   &aihints,
-					   cbfunc, cbdata);
-	SAFE_FREE(kdc_name);
-
-	return ret;
-
- failed:
-	return KRB5_PLUGIN_NO_HANDLE;
-}
-
-#ifdef HEIMDAL_KRB5_LOCATE_PLUGIN_H
-#define SMB_KRB5_LOCATOR_SYMBOL_NAME resolve /* Heimdal */
-#else
-#define SMB_KRB5_LOCATOR_SYMBOL_NAME service_locator /* MIT */
-#endif
-
-const krb5plugin_service_locate_ftable SMB_KRB5_LOCATOR_SYMBOL_NAME = {
-	0, /* version */
-	smb_krb5_locator_init,
-	smb_krb5_locator_close,
-	smb_krb5_locator_lookup,
-};
-
-#endif

Modified: branches/samba/upstream/source/nsswitch/winbind_nss.h
===================================================================
--- branches/samba/upstream/source/nsswitch/winbind_nss.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nsswitch/winbind_nss.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,17 +7,19 @@
    Copyright (C) Tim Potter 2000
    
    This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
+   modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
    
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.
    
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU Library General Public
+   License along with this library; if not, write to the
+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA  02111-1307, USA.   
 */
 
 #ifndef _NSSWITCH_NSS_H
@@ -37,7 +39,8 @@
  * Linux (glibc)
  */
 
-#include "nsswitch/winbind_nss_linux.h"
+#include <nss.h>
+typedef enum nss_status NSS_STATUS;
 
 #elif HAVE_NS_API_H
 

Modified: branches/samba/upstream/source/nsswitch/winbind_nss_aix.c
===================================================================
--- branches/samba/upstream/source/nsswitch/winbind_nss_aix.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nsswitch/winbind_nss_aix.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,17 +9,19 @@
    Copyright (C) Andrew Tridgell 2003-2004
    
    This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
+   modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
    
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.
    
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU Library General Public
+   License along with this library; if not, write to the
+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA  02111-1307, USA.   
 */
 
 /*
@@ -284,7 +286,7 @@
 
 	grp = fill_grent(&response.data.gr, response.extra_data.data);
 
-	winbindd_free_response(&response);
+	free_response(&response);
 
 	return grp;
 }
@@ -314,7 +316,7 @@
 
 	grp = fill_grent(&response.data.gr, response.extra_data.data);
 
-	winbindd_free_response(&response);
+	free_response(&response);
 
 	return grp;
 }
@@ -385,7 +387,7 @@
 	}
 	idx += sprintf(tmpbuf+idx, "%u", gid_list[i]);	
 
-	winbindd_free_response(&response);
+	free_response(&response);
 
 	return tmpbuf;
 }
@@ -412,7 +414,7 @@
 
 	pwd = fill_pwent(&response.data.pw);
 
-	winbindd_free_response(&response);
+	free_response(&response);
 
 	logit("getpwuid gave ptr %p\n", pwd);
 
@@ -445,7 +447,7 @@
 	
 	pwd = fill_pwent(&response.data.pw);
 
-	winbindd_free_response(&response);
+	free_response(&response);
 
 	logit("getpwnam gave ptr %p\n", pwd);
 
@@ -482,7 +484,7 @@
 
 	s = malloc(len+2);
 	if (!s) {
-		winbindd_free_response(&response);
+		free_response(&response);
 		errno = ENOMEM;
 		return -1;
 	}
@@ -494,7 +496,7 @@
 	results[0].attr_un.au_char = s;
 	results[0].attr_flag = 0;
 
-	winbindd_free_response(&response);
+	free_response(&response);
 	
 	return 0;
 }
@@ -530,7 +532,7 @@
 
 	s = malloc(len+2);
 	if (!s) {
-		winbindd_free_response(&response);
+		free_response(&response);
 		errno = ENOMEM;
 		return -1;
 	}
@@ -542,7 +544,7 @@
 	results[0].attr_un.au_char = s;
 	results[0].attr_flag = 0;
 
-	winbindd_free_response(&response);
+	free_response(&response);
 	
 	return 0;
 }
@@ -887,7 +889,7 @@
 
 	result = winbindd_request_response(WINBINDD_PAM_AUTH, &request, &response);
 
-	winbindd_free_response(&response);
+	free_response(&response);
 
 	logit("auth result %d for '%s'\n", result, user);
 
@@ -936,7 +938,7 @@
 
 	result = winbindd_request_response(WINBINDD_PAM_CHAUTHTOK, &request, &response);
 
-	winbindd_free_response(&response);
+	free_response(&response);
 
 	if (result == NSS_STATUS_SUCCESS) {
 		errno = 0;

Modified: branches/samba/upstream/source/nsswitch/winbind_nss_config.h
===================================================================
--- branches/samba/upstream/source/nsswitch/winbind_nss_config.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nsswitch/winbind_nss_config.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,17 +6,19 @@
    Copyright (C) Tim Potter 2000
    
    This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
+   modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
    
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.
    
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU Library General Public
+   License along with this library; if not, write to the
+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA  02111-1307, USA.   
 */
 
 #ifndef _WINBIND_NSS_CONFIG_H
@@ -27,14 +29,6 @@
 #undef SIZEOF_LONG
 #endif
 
-/*
- * we don't need socket wrapper
- * nor nss wrapper here and we don't
- * want to depend on swrap_close()
- * so we better disable both
- */
-#define SOCKET_WRAPPER_NOT_REPLACE
-#define NSS_WRAPPER_NOT_REPLACE
 
 /* Include header files from data in config.h file */
 
@@ -51,11 +45,64 @@
 /* I'm trying really hard not to include anything from smb.h with the
    result of some silly looking redeclaration of structures. */
 
-#ifndef FSTRING_LEN
+#ifndef _PSTRING
+#define _PSTRING
+#define PSTRING_LEN 1024
 #define FSTRING_LEN 256
+typedef char pstring[PSTRING_LEN];
 typedef char fstring[FSTRING_LEN];
 #endif
 
+#ifndef _UPPER_BOOL
+#define _UPPER_BOOL
+#define False (0)
+#define True (1)
+#define Auto (2)
+typedef int BOOL;
+#endif
+
+#if !defined(uint32)
+#if (SIZEOF_INT == 4)
+#define uint32 unsigned int
+#elif (SIZEOF_LONG == 4)
+#define uint32 unsigned long
+#elif (SIZEOF_SHORT == 4)
+#define uint32 unsigned short
+#endif
+#endif
+
+#if !defined(uint16)
+#if (SIZEOF_SHORT == 4)
+#define uint16 __ERROR___CANNOT_DETERMINE_TYPE_FOR_INT16;
+#else /* SIZEOF_SHORT != 4 */
+#define uint16 unsigned short
+#endif /* SIZEOF_SHORT != 4 */
+#endif
+
+#ifndef uint8
+#define uint8 unsigned char
+#endif
+
+/*
+ * check for 8 byte long long
+ */
+
+#if !defined(uint64)
+#if (SIZEOF_LONG == 8)
+#define uint64 unsigned long
+#elif (SIZEOF_LONG_LONG == 8)
+#define uint64 unsigned long long
+#endif  /* don't lie.  If we don't have it, then don't use it */
+#endif
+
+#if !defined(int64)
+#if (SIZEOF_LONG == 8)
+#define int64 long
+#elif (SIZEOF_LONG_LONG == 8)
+#define int64 long long
+#endif  /* don't lie.  If we don't have it, then don't use it */
+#endif
+
 /* Some systems (SCO) treat UNIX domain sockets as FIFOs */
 
 #ifndef S_IFSOCK
@@ -66,4 +113,9 @@
 #define S_ISSOCK(mode)  ((mode & S_IFSOCK) == S_IFSOCK)
 #endif
 
+#ifndef HAVE_SOCKLEN_T_TYPE
+#define HAVE_SOCKLEN_T_TYPE
+typedef int socklen_t;
 #endif
+
+#endif

Modified: branches/samba/upstream/source/nsswitch/winbind_nss_freebsd.c
===================================================================
--- branches/samba/upstream/source/nsswitch/winbind_nss_freebsd.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nsswitch/winbind_nss_freebsd.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,17 +7,19 @@
    Copyright (C) Aaron Collins 2003
    
    This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
+   modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
    
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.
    
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU Library General Public
+   License along with this library; if not, write to the
+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA  02111-1307, USA.   
 */
 
 #include "winbind_client.h"

Modified: branches/samba/upstream/source/nsswitch/winbind_nss_hpux.h
===================================================================
--- branches/samba/upstream/source/nsswitch/winbind_nss_hpux.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nsswitch/winbind_nss_hpux.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,17 +5,19 @@
    Copyright (C) Jeremy Allison 2002.
  
    This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
+   modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
  
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.
  
-   You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU Library General Public
+   License along with this library; if not, write to the
+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA  02111-1307, USA.
 */
 
 #ifndef _WINBIND_NSS_HPUX_H

Modified: branches/samba/upstream/source/nsswitch/winbind_nss_irix.c
===================================================================
--- branches/samba/upstream/source/nsswitch/winbind_nss_irix.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nsswitch/winbind_nss_irix.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,17 +7,19 @@
    Copyright (C) James Peach 2006
    
    This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
+   modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
    
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.
    
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU Library General Public
+   License along with this library; if not, write to the
+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA  02111-1307, USA.   
 */
 
 #include "winbind_client.h"
@@ -195,7 +197,7 @@
 
 	if (status != NSS_STATUS_SUCCESS) {
 		/* free any extra data area in response structure */
-		winbindd_free_response(&response);
+		free_response(&response);
 		nsd_logprintf(NSD_LOG_MIN, 
 			"callback (winbind) returning not found, status = %d\n",
 			status);
@@ -227,7 +229,7 @@
 			return NSD_ERROR;
 		}
 		
-		winbindd_free_response(&response);
+		free_response(&response);
 		
 		nsd_logprintf(NSD_LOG_MIN, "    %s\n", result);
 		nsd_set_result(rq, NS_SUCCESS, result, rlen, DYNAMIC);
@@ -252,7 +254,7 @@
 	        if (rlen == 0 || result == NULL)
 	            return NSD_ERROR;
 	    
-	        winbindd_free_response(&response);
+	        free_response(&response);
 	    
 	        nsd_logprintf(NSD_LOG_MIN, "    %s\n", result);
 	        nsd_set_result(rq, NS_SUCCESS, result, rlen, DYNAMIC);
@@ -279,7 +281,7 @@
 	        if (rlen == 0 || result == NULL)
 	            return NSD_ERROR;
 	    
-	        winbindd_free_response(&response);
+	        free_response(&response);
 	    
 	        nsd_logprintf(NSD_LOG_MIN, "    %s\n", result);
 	        nsd_set_result(rq, NS_SUCCESS, result, rlen, DYNAMIC);
@@ -290,7 +292,7 @@
 	    case WINBINDD_SETPWENT:
 		nsd_logprintf(NSD_LOG_MIN,
 			"callback (winbind) SETGRENT | SETPWENT\n");
-		winbindd_free_response(&response);
+		free_response(&response);
 		return(do_list(1,rq));
 
 	    case WINBINDD_GETGRENT:
@@ -311,7 +313,7 @@
 	            gr = (struct winbindd_gr *)response.extra_data.data;
 	            if (! gr ) {
 	                nsd_logprintf(NSD_LOG_MIN, "     no extra_data\n");
-	                winbindd_free_response(&response);
+	                free_response(&response);
 	                return NSD_ERROR;
 	            }
 	    
@@ -338,7 +340,7 @@
 	        }
 	    
 	        entries = response.data.num_entries;
-	        winbindd_free_response(&response);
+	        free_response(&response);
 	        if (entries < MAX_GETPWENT_USERS)
 	            return(do_list(2,rq));
 	        else
@@ -360,7 +362,7 @@
 		    pw = (struct winbindd_pw *)response.extra_data.data;
 		    if (! pw ) {
 			nsd_logprintf(NSD_LOG_MIN, "     no extra_data\n");
-			winbindd_free_response(&response);
+			free_response(&response);
 			return NSD_ERROR;
 		    }
 		    for (i = 0; i < response.data.num_entries; i++) {
@@ -385,7 +387,7 @@
 		}
 
 		entries = response.data.num_entries;
-		winbindd_free_response(&response);
+		free_response(&response);
 		if (entries < MAX_GETPWENT_USERS)
 		    return(do_list(2,rq));
 		else
@@ -396,11 +398,11 @@
 	    case WINBINDD_ENDPWENT:
 		nsd_logprintf(NSD_LOG_MIN, "callback (winbind) ENDGRENT | ENDPWENT\n");
 		nsd_append_element(rq, NS_SUCCESS, "\n", 1);
-		winbindd_free_response(&response);
+		free_response(&response);
 		return NSD_NEXT;
 
 	    default:
-		winbindd_free_response(&response);
+		free_response(&response);
 		nsd_logprintf(NSD_LOG_MIN, "callback (winbind) invalid command %d\n", (int)rq->f_cmd_data);
 		return NSD_NEXT;
 	}

Modified: branches/samba/upstream/source/nsswitch/winbind_nss_irix.h
===================================================================
--- branches/samba/upstream/source/nsswitch/winbind_nss_irix.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nsswitch/winbind_nss_irix.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,17 +6,19 @@
    Copyright (C) Tim Potter 2000
    
    This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
+   modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
    
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.
    
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU Library General Public
+   License along with this library; if not, write to the
+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA  02111-1307, USA.   
 */
 
 #ifndef _WINBIND_NSS_IRIX_H

Modified: branches/samba/upstream/source/nsswitch/winbind_nss_linux.c
===================================================================
--- branches/samba/upstream/source/nsswitch/winbind_nss_linux.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nsswitch/winbind_nss_linux.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,29 +6,23 @@
    Copyright (C) Tim Potter 2000
    
    This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
+   modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
    
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.
    
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU Library General Public
+   License along with this library; if not, write to the
+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA  02111-1307, USA.   
 */
 
 #include "winbind_client.h"
 
-#if HAVE_PTHREAD_H
-#include <pthread.h>
-#endif
-
-#if HAVE_PTHREAD
-static pthread_mutex_t winbind_nss_mutex = PTHREAD_MUTEX_INITIALIZER;
-#endif
-
 /* Maximum number of users to pass back over the unix domain socket
    per call. This is not a static limit on the total number of users 
    or groups returned in total. */
@@ -73,6 +67,27 @@
 
 /* Prototypes from wb_common.c */
 
+extern int winbindd_fd;
+
+#ifdef DEBUG_NSS
+static const char *nss_err_str(NSS_STATUS ret) {
+	switch (ret) {
+		case NSS_STATUS_TRYAGAIN:
+			return "NSS_STATUS_TRYAGAIN";
+		case NSS_STATUS_SUCCESS:
+			return "NSS_STATUS_SUCCESS";
+		case NSS_STATUS_NOTFOUND:
+			return "NSS_STATUS_NOTFOUND";
+		case NSS_STATUS_UNAVAIL:
+			return "NSS_STATUS_UNAVAIL";
+		case NSS_STATUS_RETURN:
+			return "NSS_STATUS_RETURN";
+		default:
+			return "UNKNOWN RETURN CODE!!!!!!!";
+	}
+}
+#endif
+
 /* Allocate some space from the nss static buffer.  The buffer and buflen
    are the pointers passed in by the C library to the _nss_ntdom_*
    functions. */
@@ -83,7 +98,7 @@
 
 	/* Error check.  We return false if things aren't set up right, or
 	   there isn't enough buffer space left. */
-
+	
 	if ((buffer == NULL) || (buflen == NULL) || (*buflen < len)) {
 		return NULL;
 	}
@@ -97,79 +112,46 @@
 	return result;
 }
 
-/* I've copied the strtok() replacement function next_token_Xalloc() from
+/* I've copied the strtok() replacement function next_token() from
    lib/util_str.c as I really don't want to have to link in any other
    objects if I can possibly avoid it. */
 
-static bool next_token_alloc(const char **ptr,
-                                char **pp_buff,
-                                const char *sep)
+static BOOL next_token(char **ptr,char *buff,const char *sep, size_t bufsize)
 {
 	char *s;
-	char *saved_s;
-	char *pbuf;
-	bool quoted;
+	BOOL quoted;
 	size_t len=1;
 
-	*pp_buff = NULL;
-	if (!ptr) {
-		return(false);
-	}
+	if (!ptr) return(False);
 
-	s = (char *)*ptr;
+	s = *ptr;
 
 	/* default to simple separators */
-	if (!sep) {
-		sep = " \t\n\r";
-	}
+	if (!sep) sep = " \t\n\r";
 
 	/* find the first non sep char */
-	while (*s && strchr(sep,*s)) {
-		s++;
-	}
-
+	while (*s && strchr(sep,*s)) s++;
+	
 	/* nothing left? */
-	if (!*s) {
-		return false;
-	}
-
-	/* When restarting we need to go from here. */
-	saved_s = s;
-
-	/* Work out the length needed. */
-	for (quoted = false; *s &&
-			(quoted || !strchr(sep,*s)); s++) {
+	if (! *s) return(False);
+	
+	/* copy over the token */
+	for (quoted = False; len < bufsize && *s && (quoted || !strchr(sep,*s)); s++) {
 		if (*s == '\"') {
 			quoted = !quoted;
 		} else {
 			len++;
+			*buff++ = *s;
 		}
 	}
-
-	/* We started with len = 1 so we have space for the nul. */
-	*pp_buff = (char *)malloc(len);
-	if (!*pp_buff) {
-		return false;
-	}
-
-	/* copy over the token */
-	pbuf = *pp_buff;
-	s = saved_s;
-	for (quoted = false; *s &&
-			(quoted || !strchr(sep,*s)); s++) {
-		if ( *s == '\"' ) {
-			quoted = !quoted;
-		} else {
-			*pbuf++ = *s;
-		}
-	}
-
-	*ptr = (*s) ? s+1 : s;
-	*pbuf = 0;
-
-	return true;
+	
+	*ptr = (*s) ? s+1 : s;  
+	*buff = 0;
+	
+	return(True);
 }
 
+
 /* Fill a pwent structure from a winbindd_response structure.  We use
    the static data passed to us by libc to put strings and stuff in.
    Return NSS_STATUS_TRYAGAIN if we run out of memory. */
@@ -264,7 +246,7 @@
 static NSS_STATUS fill_grent(struct group *result, struct winbindd_gr *gr,
 		      char *gr_mem, char **buffer, size_t *buflen)
 {
-	char *name;
+	fstring name;
 	int i;
 	char *tst;
 
@@ -286,6 +268,7 @@
 	     get_static(buffer, buflen, strlen(gr->gr_passwd) + 1)) == NULL) {
 
 		/* Out of memory */
+		
 		return NSS_STATUS_TRYAGAIN;
 	}
 
@@ -306,8 +289,8 @@
 	/* Calculate number of extra bytes needed to align on pointer size boundry */
 	if ((i = (unsigned long)(*buffer) % sizeof(char*)) != 0)
 		i = sizeof(char*) - i;
-
-	if ((tst = get_static(buffer, buflen, ((gr->num_gr_mem + 1) *
+	
+	if ((tst = get_static(buffer, buflen, ((gr->num_gr_mem + 1) * 
 				 sizeof(char *)+i))) == NULL) {
 
 		/* Out of memory */
@@ -328,16 +311,19 @@
 
 	i = 0;
 
-	while(next_token_alloc((const char **)&gr_mem, &name, ",")) {
+	while(next_token((char **)&gr_mem, name, ",", sizeof(fstring))) {
+        
 		/* Allocate space for member */
-		if (((result->gr_mem)[i] =
+        
+		if (((result->gr_mem)[i] = 
 		     get_static(buffer, buflen, strlen(name) + 1)) == NULL) {
-			free(name);
+            
 			/* Out of memory */
+            
 			return NSS_STATUS_TRYAGAIN;
-		}
+		}        
+        
 		strcpy((result->gr_mem)[i], name);
-		free(name);
 		i++;
 	}
 
@@ -367,13 +353,9 @@
 	fprintf(stderr, "[%5d]: setpwent\n", getpid());
 #endif
 
-#if HAVE_PTHREAD
-	pthread_mutex_lock(&winbind_nss_mutex);
-#endif
-
 	if (num_pw_cache > 0) {
 		ndx_pw_cache = num_pw_cache = 0;
-		winbindd_free_response(&getpwent_response);
+		free_response(&getpwent_response);
 	}
 
 	ret = winbindd_request_response(WINBINDD_SETPWENT, NULL, NULL);
@@ -381,10 +363,6 @@
 	fprintf(stderr, "[%5d]: setpwent returns %s (%d)\n", getpid(),
 		nss_err_str(ret), ret);
 #endif
-
-#if HAVE_PTHREAD
-	pthread_mutex_unlock(&winbind_nss_mutex);
-#endif
 	return ret;
 }
 
@@ -398,13 +376,9 @@
 	fprintf(stderr, "[%5d]: endpwent\n", getpid());
 #endif
 
-#if HAVE_PTHREAD
-	pthread_mutex_lock(&winbind_nss_mutex);
-#endif
-
 	if (num_pw_cache > 0) {
 		ndx_pw_cache = num_pw_cache = 0;
-		winbindd_free_response(&getpwent_response);
+		free_response(&getpwent_response);
 	}
 
 	ret = winbindd_request_response(WINBINDD_ENDPWENT, NULL, NULL);
@@ -412,11 +386,6 @@
 	fprintf(stderr, "[%5d]: endpwent returns %s (%d)\n", getpid(),
 		nss_err_str(ret), ret);
 #endif
-
-#if HAVE_PTHREAD
-	pthread_mutex_unlock(&winbind_nss_mutex);
-#endif
-
 	return ret;
 }
 
@@ -434,10 +403,6 @@
 	fprintf(stderr, "[%5d]: getpwent\n", getpid());
 #endif
 
-#if HAVE_PTHREAD
-	pthread_mutex_lock(&winbind_nss_mutex);
-#endif
-
 	/* Return an entry from the cache if we have one, or if we are
 	   called again because we exceeded our static buffer.  */
 
@@ -448,7 +413,7 @@
 	/* Else call winbindd to get a bunch of entries */
 	
 	if (num_pw_cache > 0) {
-		winbindd_free_response(&getpwent_response);
+		free_response(&getpwent_response);
 	}
 
 	ZERO_STRUCT(request);
@@ -487,20 +452,20 @@
 		/* Out of memory - try again */
 
 		if (ret == NSS_STATUS_TRYAGAIN) {
-			called_again = true;
+			called_again = True;
 			*errnop = errno = ERANGE;
 			goto done;
 		}
 
 		*errnop = errno = 0;
-		called_again = false;
+		called_again = False;
 		ndx_pw_cache++;
 
 		/* If we've finished with this lot of results free cache */
 
 		if (ndx_pw_cache == num_pw_cache) {
 			ndx_pw_cache = num_pw_cache = 0;
-			winbindd_free_response(&getpwent_response);
+			free_response(&getpwent_response);
 		}
 	}
 	done:
@@ -508,10 +473,6 @@
 	fprintf(stderr, "[%5d]: getpwent returns %s (%d)\n", getpid(),
 		nss_err_str(ret), ret);
 #endif
-
-#if HAVE_PTHREAD
-	pthread_mutex_unlock(&winbind_nss_mutex);
-#endif
 	return ret;
 }
 
@@ -524,18 +485,14 @@
 	NSS_STATUS ret;
 	static struct winbindd_response response;
 	struct winbindd_request request;
-	static int keep_response;
+	static int keep_response=0;
 
 #ifdef DEBUG_NSS
-	fprintf(stderr, "[%5d]: getpwuid_r %d\n", getpid(), (unsigned int)uid);
+	fprintf(stderr, "[%5d]: getpwuid %d\n", getpid(), (unsigned int)uid);
 #endif
 
-#if HAVE_PTHREAD
-	pthread_mutex_lock(&winbind_nss_mutex);
-#endif
-
 	/* If our static buffer needs to be expanded we are called again */
-	if (!keep_response || uid != response.data.pw.pw_uid) {
+	if (!keep_response) {
 
 		/* Call for the first time */
 
@@ -551,7 +508,7 @@
 					 &buffer, &buflen);
 
 			if (ret == NSS_STATUS_TRYAGAIN) {
-				keep_response = true;
+				keep_response = True;
 				*errnop = errno = ERANGE;
 				goto done;
 			}
@@ -564,27 +521,22 @@
 		ret = fill_pwent(result, &response.data.pw, &buffer, &buflen);
 
 		if (ret == NSS_STATUS_TRYAGAIN) {
+			keep_response = True;
 			*errnop = errno = ERANGE;
 			goto done;
 		}
 
-		keep_response = false;
+		keep_response = False;
 		*errnop = errno = 0;
 	}
 
-	winbindd_free_response(&response);
-
+	free_response(&response);
 	done:
 
 #ifdef DEBUG_NSS
 	fprintf(stderr, "[%5d]: getpwuid %d returns %s (%d)\n", getpid(),
 		(unsigned int)uid, nss_err_str(ret), ret);
 #endif
-
-#if HAVE_PTHREAD
-	pthread_mutex_unlock(&winbind_nss_mutex);
-#endif
-
 	return ret;
 }
 
@@ -599,16 +551,12 @@
 	static int keep_response;
 
 #ifdef DEBUG_NSS
-	fprintf(stderr, "[%5d]: getpwnam_r %s\n", getpid(), name);
+	fprintf(stderr, "[%5d]: getpwnam %s\n", getpid(), name);
 #endif
 
-#if HAVE_PTHREAD
-	pthread_mutex_lock(&winbind_nss_mutex);
-#endif
-
 	/* If our static buffer needs to be expanded we are called again */
 
-	if (!keep_response || strcmp(name,response.data.pw.pw_name) != 0) {
+	if (!keep_response) {
 
 		/* Call for the first time */
 
@@ -627,7 +575,7 @@
 					 &buflen);
 
 			if (ret == NSS_STATUS_TRYAGAIN) {
-				keep_response = true;
+				keep_response = True;
 				*errnop = errno = ERANGE;
 				goto done;
 			}
@@ -640,26 +588,21 @@
 		ret = fill_pwent(result, &response.data.pw, &buffer, &buflen);
 
 		if (ret == NSS_STATUS_TRYAGAIN) {
-			keep_response = true;
+			keep_response = True;
 			*errnop = errno = ERANGE;
 			goto done;
 		}
 
-		keep_response = false;
+		keep_response = False;
 		*errnop = errno = 0;
 	}
 
-	winbindd_free_response(&response);
+	free_response(&response);
 	done:
 #ifdef DEBUG_NSS
 	fprintf(stderr, "[%5d]: getpwnam %s returns %s (%d)\n", getpid(),
 		name, nss_err_str(ret), ret);
 #endif
-
-#if HAVE_PTHREAD
-	pthread_mutex_unlock(&winbind_nss_mutex);
-#endif
-
 	return ret;
 }
 
@@ -682,13 +625,9 @@
 	fprintf(stderr, "[%5d]: setgrent\n", getpid());
 #endif
 
-#if HAVE_PTHREAD
-	pthread_mutex_lock(&winbind_nss_mutex);
-#endif
-
 	if (num_gr_cache > 0) {
 		ndx_gr_cache = num_gr_cache = 0;
-		winbindd_free_response(&getgrent_response);
+		free_response(&getgrent_response);
 	}
 
 	ret = winbindd_request_response(WINBINDD_SETGRENT, NULL, NULL);
@@ -696,11 +635,6 @@
 	fprintf(stderr, "[%5d]: setgrent returns %s (%d)\n", getpid(),
 		nss_err_str(ret), ret);
 #endif
-
-#if HAVE_PTHREAD
-	pthread_mutex_unlock(&winbind_nss_mutex);
-#endif
-
 	return ret;
 }
 
@@ -714,13 +648,9 @@
 	fprintf(stderr, "[%5d]: endgrent\n", getpid());
 #endif
 
-#if HAVE_PTHREAD
-	pthread_mutex_lock(&winbind_nss_mutex);
-#endif
-
 	if (num_gr_cache > 0) {
 		ndx_gr_cache = num_gr_cache = 0;
-		winbindd_free_response(&getgrent_response);
+		free_response(&getgrent_response);
 	}
 
 	ret = winbindd_request_response(WINBINDD_ENDGRENT, NULL, NULL);
@@ -728,11 +658,6 @@
 	fprintf(stderr, "[%5d]: endgrent returns %s (%d)\n", getpid(),
 		nss_err_str(ret), ret);
 #endif
-
-#if HAVE_PTHREAD
-	pthread_mutex_unlock(&winbind_nss_mutex);
-#endif
-
 	return ret;
 }
 
@@ -752,10 +677,6 @@
 	fprintf(stderr, "[%5d]: getgrent\n", getpid());
 #endif
 
-#if HAVE_PTHREAD
-	pthread_mutex_lock(&winbind_nss_mutex);
-#endif
-
 	/* Return an entry from the cache if we have one, or if we are
 	   called again because we exceeded our static buffer.  */
 
@@ -766,7 +687,7 @@
 	/* Else call winbindd to get a bunch of entries */
 	
 	if (num_gr_cache > 0) {
-		winbindd_free_response(&getgrent_response);
+		free_response(&getgrent_response);
 	}
 
 	ZERO_STRUCT(request);
@@ -814,20 +735,20 @@
 		/* Out of memory - try again */
 
 		if (ret == NSS_STATUS_TRYAGAIN) {
-			called_again = true;
+			called_again = True;
 			*errnop = errno = ERANGE;
 			goto done;
 		}
 
 		*errnop = 0;
-		called_again = false;
+		called_again = False;
 		ndx_gr_cache++;
 
 		/* If we've finished with this lot of results free cache */
 
 		if (ndx_gr_cache == num_gr_cache) {
 			ndx_gr_cache = num_gr_cache = 0;
-			winbindd_free_response(&getgrent_response);
+			free_response(&getgrent_response);
 		}
 	}
 	done:
@@ -835,11 +756,6 @@
 	fprintf(stderr, "[%5d]: getgrent returns %s (%d)\n", getpid(),
 		nss_err_str(ret), ret);
 #endif
-
-#if HAVE_PTHREAD
-	pthread_mutex_unlock(&winbind_nss_mutex);
-#endif
-
 	return ret;
 }
 
@@ -874,15 +790,10 @@
 	fprintf(stderr, "[%5d]: getgrnam %s\n", getpid(), name);
 #endif
 
-#if HAVE_PTHREAD
-	pthread_mutex_lock(&winbind_nss_mutex);
-#endif
-
 	/* If our static buffer needs to be expanded we are called again */
-	/* Or if the stored response group name differs from the request. */
+	
+	if (!keep_response) {
 
-	if (!keep_response || strcmp(name,response.data.gr.gr_name) != 0) {
-
 		/* Call for the first time */
 
 		ZERO_STRUCT(request);
@@ -901,41 +812,36 @@
 					 &buffer, &buflen);
 
 			if (ret == NSS_STATUS_TRYAGAIN) {
-				keep_response = true;
+				keep_response = True;
 				*errnop = errno = ERANGE;
 				goto done;
 			}
 		}
 
 	} else {
-
+		
 		/* We've been called again */
-
+		
 		ret = fill_grent(result, &response.data.gr, 
 				 (char *)response.extra_data.data, &buffer,
 				 &buflen);
-
+		
 		if (ret == NSS_STATUS_TRYAGAIN) {
-			keep_response = true;
+			keep_response = True;
 			*errnop = errno = ERANGE;
 			goto done;
 		}
 
-		keep_response = false;
+		keep_response = False;
 		*errnop = 0;
 	}
 
-	winbindd_free_response(&response);
+	free_response(&response);
 	done:
 #ifdef DEBUG_NSS
 	fprintf(stderr, "[%5d]: getgrnam %s returns %s (%d)\n", getpid(),
 		name, nss_err_str(ret), ret);
 #endif
-
-#if HAVE_PTHREAD
-	pthread_mutex_unlock(&winbind_nss_mutex);
-#endif
-
 	return ret;
 }
 
@@ -955,14 +861,9 @@
 	fprintf(stderr, "[%5d]: getgrgid %d\n", getpid(), gid);
 #endif
 
-#if HAVE_PTHREAD
-	pthread_mutex_lock(&winbind_nss_mutex);
-#endif
-
 	/* If our static buffer needs to be expanded we are called again */
-	/* Or if the stored response group name differs from the request. */
 
-	if (!keep_response || gid != response.data.gr.gr_gid) {
+	if (!keep_response) {
 
 		/* Call for the first time */
 
@@ -980,7 +881,7 @@
 					 &buffer, &buflen);
 
 			if (ret == NSS_STATUS_TRYAGAIN) {
-				keep_response = true;
+				keep_response = True;
 				*errnop = errno = ERANGE;
 				goto done;
 			}
@@ -995,25 +896,21 @@
 				 &buflen);
 
 		if (ret == NSS_STATUS_TRYAGAIN) {
-			keep_response = true;
+			keep_response = True;
 			*errnop = errno = ERANGE;
 			goto done;
 		}
 
-		keep_response = false;
+		keep_response = False;
 		*errnop = 0;
 	}
 
-	winbindd_free_response(&response);
+	free_response(&response);
 	done:
 #ifdef DEBUG_NSS
 	fprintf(stderr, "[%5d]: getgrgid %d returns %s (%d)\n", getpid(),
 		(unsigned int)gid, nss_err_str(ret), ret);
 #endif
-
-#if HAVE_PTHREAD
-	pthread_mutex_unlock(&winbind_nss_mutex);
-#endif
 	return ret;
 }
 
@@ -1034,10 +931,6 @@
 		user, group);
 #endif
 
-#if HAVE_PTHREAD
-	pthread_mutex_lock(&winbind_nss_mutex);
-#endif
-
 	ZERO_STRUCT(request);
 	ZERO_STRUCT(response);
 
@@ -1118,11 +1011,6 @@
 	fprintf(stderr, "[%5d]: initgroups %s returns %s (%d)\n", getpid(),
 		user, nss_err_str(ret), ret);
 #endif
-
-#if HAVE_PTHREAD
-	pthread_mutex_unlock(&winbind_nss_mutex);
-#endif
-
 	return ret;
 }
 
@@ -1141,10 +1029,6 @@
 	fprintf(stderr, "[%5d]: getusersids %s\n", getpid(), user_sid);
 #endif
 
-#if HAVE_PTHREAD
-	pthread_mutex_lock(&winbind_nss_mutex);
-#endif
-
 	ZERO_STRUCT(request);
 	ZERO_STRUCT(response);
 
@@ -1169,12 +1053,7 @@
 	errno = *errnop = 0;
 	
  done:
-	winbindd_free_response(&response);
-
-#if HAVE_PTHREAD
-	pthread_mutex_unlock(&winbind_nss_mutex);
-#endif
-
+	free_response(&response);
 	return ret;
 }
 
@@ -1192,10 +1071,6 @@
 	fprintf(stderr, "[%5d]: nametosid %s\n", getpid(), name);
 #endif
 
-#if HAVE_PTHREAD
-	pthread_mutex_lock(&winbind_nss_mutex);
-#endif
-
 	ZERO_STRUCT(response);
 	ZERO_STRUCT(request);
 
@@ -1220,12 +1095,7 @@
 	strcpy(*sid, response.data.sid.sid);
 
 failed:
-	winbindd_free_response(&response);
-
-#if HAVE_PTHREAD
-	pthread_mutex_unlock(&winbind_nss_mutex);
-#endif
-
+	free_response(&response);
 	return ret;
 }
 
@@ -1244,10 +1114,6 @@
 	fprintf(stderr, "[%5d]: sidtoname %s\n", getpid(), sid);
 #endif
 
-#if HAVE_PTHREAD
-	pthread_mutex_lock(&winbind_nss_mutex);
-#endif
-
 	ZERO_STRUCT(response);
 	ZERO_STRUCT(request);
 
@@ -1260,7 +1126,7 @@
 		}
 
 		sep_char = response.data.info.winbind_separator;
-		winbindd_free_response(&response);
+		free_response(&response);
 	}
 
 
@@ -1293,12 +1159,7 @@
 	*errnop = errno = 0;
 
 failed:
-	winbindd_free_response(&response);
-
-#if HAVE_PTHREAD
-	pthread_mutex_unlock(&winbind_nss_mutex);
-#endif
-
+	free_response(&response);
 	return ret;
 }
 
@@ -1314,10 +1175,6 @@
 	fprintf(stderr, "[%5d]: sidtouid %s\n", getpid(), sid);
 #endif
 
-#if HAVE_PTHREAD
-	pthread_mutex_lock(&winbind_nss_mutex);
-#endif
-
 	ZERO_STRUCT(request);
 	ZERO_STRUCT(response);
 
@@ -1333,11 +1190,6 @@
 	*uid = response.data.uid;
 
 failed:
-
-#if HAVE_PTHREAD
-	pthread_mutex_unlock(&winbind_nss_mutex);
-#endif
-
 	return ret;
 }
 
@@ -1353,10 +1205,6 @@
 	fprintf(stderr, "[%5d]: sidtogid %s\n", getpid(), sid);
 #endif
 
-#if HAVE_PTHREAD
-	pthread_mutex_lock(&winbind_nss_mutex);
-#endif
-
 	ZERO_STRUCT(request);
 	ZERO_STRUCT(response);
 
@@ -1372,11 +1220,6 @@
 	*gid = response.data.gid;
 
 failed:
-
-#if HAVE_PTHREAD
-	pthread_mutex_unlock(&winbind_nss_mutex);
-#endif
-
 	return ret;
 }
 
@@ -1393,10 +1236,6 @@
 	fprintf(stderr, "[%5u]: uidtosid %u\n", (unsigned int)getpid(), (unsigned int)uid);
 #endif
 
-#if HAVE_PTHREAD
-	pthread_mutex_lock(&winbind_nss_mutex);
-#endif
-
 	ZERO_STRUCT(response);
 	ZERO_STRUCT(request);
 
@@ -1419,12 +1258,7 @@
 	strcpy(*sid, response.data.sid.sid);
 
 failed:
-	winbindd_free_response(&response);
-
-#if HAVE_PTHREAD
-	pthread_mutex_unlock(&winbind_nss_mutex);
-#endif
-
+	free_response(&response);
 	return ret;
 }
 
@@ -1441,10 +1275,6 @@
 	fprintf(stderr, "[%5u]: gidtosid %u\n", (unsigned int)getpid(), (unsigned int)gid);
 #endif
 
-#if HAVE_PTHREAD
-	pthread_mutex_lock(&winbind_nss_mutex);
-#endif
-
 	ZERO_STRUCT(response);
 	ZERO_STRUCT(request);
 
@@ -1467,11 +1297,6 @@
 	strcpy(*sid, response.data.sid.sid);
 
 failed:
-	winbindd_free_response(&response);
-
-#if HAVE_PTHREAD
-	pthread_mutex_unlock(&winbind_nss_mutex);
-#endif
-
+	free_response(&response);
 	return ret;
 }

Modified: branches/samba/upstream/source/nsswitch/winbind_nss_linux.h
===================================================================
--- branches/samba/upstream/source/nsswitch/winbind_nss_linux.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nsswitch/winbind_nss_linux.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,24 +6,30 @@
    Copyright (C) Tim Potter 2000
    
    This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
+   modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
    
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.
    
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU Library General Public
+   License along with this library; if not, write to the
+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA  02111-1307, USA.   
 */
 
 #ifndef _WINBIND_NSS_LINUX_H
 #define _WINBIND_NSS_LINUX_H
 
+#if HAVE_NSS_H
+
 #include <nss.h>
 
 typedef enum nss_status NSS_STATUS;
 
+#endif /* HAVE_NSS_H */
+
 #endif /* _WINBIND_NSS_LINUX_H */

Modified: branches/samba/upstream/source/nsswitch/winbind_nss_netbsd.c
===================================================================
--- branches/samba/upstream/source/nsswitch/winbind_nss_netbsd.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nsswitch/winbind_nss_netbsd.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,23 +7,25 @@
    Copyright (C) Luke Mewburn 2004-2005
 
    This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
+   modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
 
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.
 
-   You should have received a copy of the GNU Lesser General Public
-   License along with this library; if not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU Library General Public
+   License along with this library; if not, write to the
+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA  02111-1307, USA.
 */
 
+#include <sys/param.h>
 
 #include "winbind_client.h"
 
-#include <sys/param.h>
 #include <stdarg.h>
 #include <syslog.h>
 
@@ -38,45 +40,6 @@
 static struct group	_winbind_group;
 static char		_winbind_groupbuf[1024];
 
-/*
- * We need a proper prototype for this :-)
- */
-
-NSS_STATUS _nss_winbind_setpwent(void);
-NSS_STATUS _nss_winbind_endpwent(void);
-NSS_STATUS _nss_winbind_getpwent_r(struct passwd *result, char *buffer,
-				   size_t buflen, int *errnop);
-NSS_STATUS _nss_winbind_getpwuid_r(uid_t uid, struct passwd *result,
-				   char *buffer, size_t buflen, int *errnop);
-NSS_STATUS _nss_winbind_getpwnam_r(const char *name, struct passwd *result,
-				   char *buffer, size_t buflen, int *errnop);
-NSS_STATUS _nss_winbind_setgrent(void);
-NSS_STATUS _nss_winbind_endgrent(void);
-NSS_STATUS _nss_winbind_getgrent_r(struct group *result, char *buffer,
-				   size_t buflen, int *errnop);
-NSS_STATUS _nss_winbind_getgrlst_r(struct group *result, char *buffer,
-				   size_t buflen, int *errnop);
-NSS_STATUS _nss_winbind_getgrnam_r(const char *name, struct group *result,
-				   char *buffer, size_t buflen, int *errnop);
-NSS_STATUS _nss_winbind_getgrgid_r(gid_t gid, struct group *result, char *buffer,
-				   size_t buflen, int *errnop);
-NSS_STATUS _nss_winbind_initgroups_dyn(char *user, gid_t group, long int *start,
-				       long int *size, gid_t **groups,
-				       long int limit, int *errnop);
-NSS_STATUS _nss_winbind_getusersids(const char *user_sid, char **group_sids,
-				    int *num_groups, char *buffer, size_t buf_size,
-				    int *errnop);
-NSS_STATUS _nss_winbind_nametosid(const char *name, char **sid, char *buffer,
-				  size_t buflen, int *errnop);
-NSS_STATUS _nss_winbind_sidtoname(const char *sid, char **name, char *buffer,
-				  size_t buflen, int *errnop);
-NSS_STATUS _nss_winbind_sidtouid(const char *sid, uid_t *uid, int *errnop);
-NSS_STATUS _nss_winbind_sidtogid(const char *sid, gid_t *gid, int *errnop);
-NSS_STATUS _nss_winbind_uidtosid(uid_t uid, char **sid, char *buffer,
-				 size_t buflen, int *errnop);
-NSS_STATUS _nss_winbind_gidtosid(gid_t gid, char **sid, char *buffer,
-				 size_t buflen, int *errnop);
-
 int
 netbsdwinbind_endgrent(void *nsrv, void *nscb, va_list ap)
 {

Modified: branches/samba/upstream/source/nsswitch/winbind_nss_netbsd.h
===================================================================
--- branches/samba/upstream/source/nsswitch/winbind_nss_netbsd.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nsswitch/winbind_nss_netbsd.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,17 +7,19 @@
    Copyright (C) Luke Mewburn 2004-2005
   
    This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
+   modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
    
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.
    
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU Library General Public
+   License along with this library; if not, write to the
+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA  02111-1307, USA.   
 */
 
 #ifndef _WINBIND_NSS_NETBSD_H

Modified: branches/samba/upstream/source/nsswitch/winbind_nss_solaris.c
===================================================================
--- branches/samba/upstream/source/nsswitch/winbind_nss_solaris.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nsswitch/winbind_nss_solaris.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,8 +10,8 @@
   This file is part of the nss_ldap library.
 
   The nss_ldap library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public License as
-  published by the Free Software Foundation; either version 3 of the
+  modify it under the terms of the GNU Library General Public License as
+  published by the Free Software Foundation; either version 2 of the
   License, or (at your option) any later version.
 
   The nss_ldap library is distributed in the hope that it will be useful,
@@ -19,14 +19,14 @@
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Library General Public License for more details.
 
-  You should have received a copy of the GNU Lesser General Public
+  You should have received a copy of the GNU Library General Public
   License along with the nss_ldap library; see the file COPYING.LIB.  If not,
-  see <http://www.gnu.org/licenses/>.
+  write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+  Boston, MA 02111-1307, USA.
 */
 
 #undef DEVELOPER
 
-#include "winbind_client.h"
 #include <stdlib.h>
 #include <sys/types.h>
 #include <sys/param.h>
@@ -37,6 +37,7 @@
 #if !defined(HPUX)
 #include <sys/syslog.h>
 #endif /*hpux*/
+#include "winbind_nss_config.h"
 
 #if defined(HAVE_NSS_COMMON_H) || defined(HPUX) 
 
@@ -500,7 +501,7 @@
 	  ret = parse_response(af, argp, &response);
 	}
 
-	winbindd_free_response(&response);
+	free_response(&response);
 	return ret;
 }
 
@@ -523,7 +524,7 @@
 	  ret = parse_response(AF_INET, argp, &response);
 	}
 
-	winbindd_free_response(&response);
+	free_response(&response);
 	return ret;
 }
 
@@ -553,7 +554,7 @@
 	if( ret == NSS_STATUS_SUCCESS) {
 	  parse_response(argp->key.hostaddr.type, argp, &response);
 	}
-	winbindd_free_response(&response);
+	free_response(&response);
         return ret;
 }
 

Modified: branches/samba/upstream/source/nsswitch/winbind_nss_solaris.h
===================================================================
--- branches/samba/upstream/source/nsswitch/winbind_nss_solaris.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nsswitch/winbind_nss_solaris.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,17 +6,19 @@
    Copyright (C) Tim Potter 2000
    
    This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
+   modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
-   version 3 of the License, or (at your option) any later version.
+   version 2 of the License, or (at your option) any later version.
    
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.
    
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU Library General Public
+   License along with this library; if not, write to the
+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA  02111-1307, USA.   
 */
 
 #ifndef _WINBIND_NSS_SOLARIS_H

Deleted: branches/samba/upstream/source/nsswitch/winbind_struct_protocol.h
===================================================================
--- branches/samba/upstream/source/nsswitch/winbind_struct_protocol.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nsswitch/winbind_struct_protocol.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,493 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-
-   Winbind daemon for ntdom nss module
-
-   Copyright (C) Tim Potter 2000
-   Copyright (C) Gerald Carter 2006
-   
-   You are free to use this interface definition in any way you see
-   fit, including without restriction, using this header in your own
-   products. You do not need to give any attribution.  
-*/
-
-#ifndef SAFE_FREE
-#define SAFE_FREE(x) do { if(x) {free(x); x=NULL;} } while(0)
-#endif
-
-#ifndef _WINBINDD_NTDOM_H
-#define _WINBINDD_NTDOM_H
-
-#define WINBINDD_SOCKET_NAME "pipe"            /* Name of PF_UNIX socket */
-
-/* Let the build environment override the public winbindd socket location. This
- * is needed for launchd support -- jpeach.
- */
-#ifndef WINBINDD_SOCKET_DIR
-#define WINBINDD_SOCKET_DIR  "/tmp/.winbindd"  /* Name of PF_UNIX dir */
-#endif
-
-/*
- * when compiled with socket_wrapper support
- * the location of the WINBINDD_SOCKET_DIR
- * can be overwritten via an environment variable
- */
-#define WINBINDD_SOCKET_DIR_ENVVAR "WINBINDD_SOCKET_DIR"
-
-#define WINBINDD_PRIV_SOCKET_SUBDIR "winbindd_privileged" /* name of subdirectory of lp_lockdir() to hold the 'privileged' pipe */
-#define WINBINDD_DOMAIN_ENV  "WINBINDD_DOMAIN" /* Environment variables */
-#define WINBINDD_DONT_ENV    "_NO_WINBINDD"
-#define WINBINDD_LOCATOR_KDC_ADDRESS "WINBINDD_LOCATOR_KDC_ADDRESS"
-
-/* Update this when you change the interface.  */
-
-#define WINBIND_INTERFACE_VERSION 19
-
-/* Have to deal with time_t being 4 or 8 bytes due to structure alignment.
-   On a 64bit Linux box, we have to support a constant structure size
-   between /lib/libnss_winbind.so.2 and /li64/libnss_winbind.so.2.
-   The easiest way to do this is to always use 8byte values for time_t. */
-
-#define SMB_TIME_T int64_t
-
-/* Socket commands */
-
-enum winbindd_cmd {
-
-	WINBINDD_INTERFACE_VERSION,    /* Always a well known value */
-
-	/* Get users and groups */
-
-	WINBINDD_GETPWNAM,
-	WINBINDD_GETPWUID,
-	WINBINDD_GETGRNAM,
-	WINBINDD_GETGRGID,
-	WINBINDD_GETGROUPS,
-
-	/* Enumerate users and groups */
-
-	WINBINDD_SETPWENT,
-	WINBINDD_ENDPWENT,
-	WINBINDD_GETPWENT,
-	WINBINDD_SETGRENT,
-	WINBINDD_ENDGRENT,
-	WINBINDD_GETGRENT,
-
-	/* PAM authenticate and password change */
-
-	WINBINDD_PAM_AUTH,
-	WINBINDD_PAM_AUTH_CRAP,
-	WINBINDD_PAM_CHAUTHTOK,
-	WINBINDD_PAM_LOGOFF,
-	WINBINDD_PAM_CHNG_PSWD_AUTH_CRAP,
-
-	/* List various things */
-
-	WINBINDD_LIST_USERS,         /* List w/o rid->id mapping */
-	WINBINDD_LIST_GROUPS,        /* Ditto */
-	WINBINDD_LIST_TRUSTDOM,
-
-	/* SID conversion */
-
-	WINBINDD_LOOKUPSID,
-	WINBINDD_LOOKUPNAME,
-	WINBINDD_LOOKUPRIDS,
-
-	/* Lookup functions */
-
-	WINBINDD_SID_TO_UID,       
-	WINBINDD_SID_TO_GID,
-	WINBINDD_SIDS_TO_XIDS,
-	WINBINDD_UID_TO_SID,
-	WINBINDD_GID_TO_SID,
-
-	WINBINDD_ALLOCATE_UID,
-	WINBINDD_ALLOCATE_GID,
-	WINBINDD_SET_MAPPING,
-	WINBINDD_SET_HWM,
-
-	/* Miscellaneous other stuff */
-
-	WINBINDD_CHECK_MACHACC,     /* Check machine account pw works */
-	WINBINDD_PING,              /* Just tell me winbind is running */
-	WINBINDD_INFO,              /* Various bit of info.  Currently just tidbits */
-	WINBINDD_DOMAIN_NAME,       /* The domain this winbind server is a member of (lp_workgroup()) */
-
-	WINBINDD_DOMAIN_INFO,	/* Most of what we know from
-				   struct winbindd_domain */
-	WINBINDD_GETDCNAME,	/* Issue a GetDCName Request */
-	WINBINDD_DSGETDCNAME,	/* Issue a DsGetDCName Request */
-
-	WINBINDD_SHOW_SEQUENCE, /* display sequence numbers of domains */
-
-	/* WINS commands */
-
-	WINBINDD_WINS_BYIP,
-	WINBINDD_WINS_BYNAME,
-
-	/* this is like GETGRENT but gives an empty group list */
-	WINBINDD_GETGRLST,
-
-	WINBINDD_NETBIOS_NAME,       /* The netbios name of the server */
-
-	/* find the location of our privileged pipe */
-	WINBINDD_PRIV_PIPE_DIR,
-
-	/* return a list of group sids for a user sid */
-	WINBINDD_GETUSERSIDS,
-
-	/* Various group queries */
-	WINBINDD_GETUSERDOMGROUPS,
-
-	/* Initialize connection in a child */
-	WINBINDD_INIT_CONNECTION,
-
-	/* Blocking calls that are not allowed on the main winbind pipe, only
-	 * between parent and children */
-	WINBINDD_DUAL_SID2UID,
-	WINBINDD_DUAL_SID2GID,
-	WINBINDD_DUAL_SIDS2XIDS,
-	WINBINDD_DUAL_UID2SID,
-	WINBINDD_DUAL_GID2SID,
-	WINBINDD_DUAL_SET_MAPPING,
-	WINBINDD_DUAL_SET_HWM,
-
-	/* Wrapper around possibly blocking unix nss calls */
-	WINBINDD_DUAL_USERINFO,
-	WINBINDD_DUAL_GETSIDALIASES,
-
-	/* Complete the challenge phase of the NTLM authentication
-	   protocol using cached password. */
-	WINBINDD_CCACHE_NTLMAUTH,
-
-	WINBINDD_NUM_CMDS
-};
-
-typedef struct winbindd_pw {
-	fstring pw_name;
-	fstring pw_passwd;
-	uid_t pw_uid;
-	gid_t pw_gid;
-	fstring pw_gecos;
-	fstring pw_dir;
-	fstring pw_shell;
-} WINBINDD_PW;
-
-
-typedef struct winbindd_gr {
-	fstring gr_name;
-	fstring gr_passwd;
-	gid_t gr_gid;
-	uint32_t num_gr_mem;
-	uint32_t gr_mem_ofs;   /* offset to group membership */
-} WINBINDD_GR;
-
-/* PAM specific request flags */
-#define WBFLAG_PAM_INFO3_NDR		0x00000001
-#define WBFLAG_PAM_INFO3_TEXT		0x00000002
-#define WBFLAG_PAM_USER_SESSION_KEY	0x00000004
-#define WBFLAG_PAM_LMKEY		0x00000008
-#define WBFLAG_PAM_CONTACT_TRUSTDOM	0x00000010
-#define WBFLAG_PAM_UNIX_NAME		0x00000080
-#define WBFLAG_PAM_AFS_TOKEN		0x00000100
-#define WBFLAG_PAM_NT_STATUS_SQUASH	0x00000200
-#define WBFLAG_PAM_KRB5			0x00001000
-#define WBFLAG_PAM_FALLBACK_AFTER_KRB5	0x00002000
-#define WBFLAG_PAM_CACHED_LOGIN		0x00004000
-#define WBFLAG_PAM_GET_PWD_POLICY	0x00008000
-
-/* generic request flags */
-#define WBFLAG_QUERY_ONLY		0x00000020	/* not used */
-/* This is a flag that can only be sent from parent to child */
-#define WBFLAG_IS_PRIVILEGED		0x00000400	/* not used */
-/* Flag to say this is a winbindd internal send - don't recurse. */
-#define WBFLAG_RECURSE			0x00000800
-
-
-#define WINBINDD_MAX_EXTRA_DATA (128*1024)
-
-/* Winbind request structure */
-
-/*******************************************************************************
- * This structure MUST be the same size in the 32bit and 64bit builds
- * for compatibility between /lib64/libnss_winbind.so and /lib/libnss_winbind.so
- * 
- * DO NOT CHANGE THIS STRUCTURE WITHOUT TESTING THE 32BIT NSS LIB AGAINST
- * A 64BIT WINBINDD    --jerry
- ******************************************************************************/
-
-struct winbindd_request {
-	uint32_t length;
-	enum winbindd_cmd cmd;   /* Winbindd command to execute */
-	enum winbindd_cmd original_cmd;   /* Original Winbindd command
-					     issued to parent process */
-	pid_t pid;               /* pid of calling process */
-	uint32_t wb_flags;       /* generic flags */
-	uint32_t flags;          /* flags relevant *only* to a given request */
-	fstring domain_name;	/* name of domain for which the request applies */
-
-	union {
-		fstring winsreq;     /* WINS request */
-		fstring username;    /* getpwnam */
-		fstring groupname;   /* getgrnam */
-		uid_t uid;           /* getpwuid, uid_to_sid */
-		gid_t gid;           /* getgrgid, gid_to_sid */
-		struct {
-			/* We deliberatedly don't split into domain/user to
-                           avoid having the client know what the separator
-                           character is. */
-			fstring user;
-			fstring pass;
-			char require_membership_of_sid[1024];
-			fstring krb5_cc_type;
-			uid_t uid;
-		} auth;              /* pam_winbind auth module */
-                struct {
-                        uint8_t chal[8];
-			uint32_t logon_parameters;
-                        fstring user;
-                        fstring domain;
-                        fstring lm_resp;
-                        uint32_t lm_resp_len;
-                        fstring nt_resp;
-                        uint32_t nt_resp_len;
-			fstring workstation;
-		        fstring require_membership_of_sid;
-                } auth_crap;
-                struct {
-                    fstring user;
-                    fstring oldpass;
-                    fstring newpass;
-                } chauthtok;         /* pam_winbind passwd module */
-		struct {
-			fstring user;
-			fstring domain;
-			uint8_t new_nt_pswd[516];
-			uint16_t new_nt_pswd_len;
-			uint8_t old_nt_hash_enc[16];
-			uint16_t old_nt_hash_enc_len;
-			uint8_t new_lm_pswd[516];
-			uint16_t new_lm_pswd_len;
-			uint8_t old_lm_hash_enc[16];
-			uint16_t old_lm_hash_enc_len;
-		} chng_pswd_auth_crap;/* pam_winbind passwd module */
-		struct {
-			fstring user;
-			fstring krb5ccname;
-			uid_t uid;
-		} logoff;              /* pam_winbind session module */
-		fstring sid;         /* lookupsid, sid_to_[ug]id */
-		struct {
-			fstring dom_name;       /* lookupname */
-			fstring name;
-		} name;
-		uint32_t num_entries;  /* getpwent, getgrent */
-		struct {
-			fstring username;
-			fstring groupname;
-		} acct_mgt;
-		struct {
-			bool is_primary;
-			fstring dcname;
-		} init_conn;
-		struct {
-			fstring sid;
-			fstring name;
-		} dual_sid2id;
-		struct {
-			fstring sid;
-			uint32_t type;
-			uint32_t id;
-		} dual_idmapset;
-		bool list_all_domains;
-
-		struct {
-			uid_t uid;
-			fstring user;
-			/* the effective uid of the client, must be the uid for 'user'.
-			   This is checked by the main daemon, trusted by children. */
-			/* if the blobs are length zero, then this doesn't
-			   produce an actual challenge response. It merely
-			   succeeds if there are cached credentials available
-			   that could be used. */
-			uint32_t initial_blob_len; /* blobs in extra_data */
-			uint32_t challenge_blob_len;
-		} ccache_ntlm_auth;
-
-		/* padding -- needed to fix alignment between 32bit and 64bit libs.
-		   The size is the sizeof the union without the padding aligned on 
-		   an 8 byte boundary.   --jerry */
-
-		char padding[1800];
-	} data;
-	union {
-		SMB_TIME_T padding;
-		char *data;
-	} extra_data;
-	uint32_t extra_len;
-	char null_term;
-};
-
-/* Response values */
-
-enum winbindd_result {
-	WINBINDD_ERROR,
-	WINBINDD_PENDING,
-	WINBINDD_OK
-};
-
-/* Winbind response structure */
-
-/*******************************************************************************
- * This structure MUST be the same size in the 32bit and 64bit builds
- * for compatibility between /lib64/libnss_winbind.so and /lib/libnss_winbind.so
- * 
- * DO NOT CHANGE THIS STRUCTURE WITHOUT TESTING THE 32BIT NSS LIB AGAINST
- * A 64BIT WINBINDD    --jerry
- ******************************************************************************/
-
-struct winbindd_response {
-    
-	/* Header information */
-
-	uint32_t length;                      /* Length of response */
-	enum winbindd_result result;          /* Result code */
-
-	/* Fixed length return data */
-	
-	union {
-		int interface_version;  /* Try to ensure this is always in the same spot... */
-		
-		fstring winsresp;		/* WINS response */
-
-		/* getpwnam, getpwuid */
-		
-		struct winbindd_pw pw;
-
-		/* getgrnam, getgrgid */
-
-		struct winbindd_gr gr;
-
-		uint32_t num_entries; /* getpwent, getgrent */
-		struct winbindd_sid {
-			fstring sid;        /* lookupname, [ug]id_to_sid */
-			int type;
-		} sid;
-		struct winbindd_name {
-			fstring dom_name;       /* lookupsid */
-			fstring name;       
-			int type;
-		} name;
-		uid_t uid;          /* sid_to_uid */
-		gid_t gid;          /* sid_to_gid */
-		struct winbindd_info {
-			char winbind_separator;
-			fstring samba_version;
-		} info;
-		fstring domain_name;
-		fstring netbios_name;
-		fstring dc_name;
-
-		struct auth_reply {
-			uint32_t nt_status;
-			fstring nt_status_string;
-			fstring error_string;
-			int pam_error;
-			char user_session_key[16];
-			char first_8_lm_hash[8];
-			fstring krb5ccname;
-			uint32_t reject_reason;
-			uint32_t padding;
-			struct policy_settings {
-				uint32_t min_length_password;
-				uint32_t password_history;
-				uint32_t password_properties;
-				uint32_t padding;
-				SMB_TIME_T expire;
-				SMB_TIME_T min_passwordage;
-			} policy;
-			struct info3_text {
-				SMB_TIME_T logon_time;
-				SMB_TIME_T logoff_time;
-				SMB_TIME_T kickoff_time;
-				SMB_TIME_T pass_last_set_time;
-				SMB_TIME_T pass_can_change_time;
-				SMB_TIME_T pass_must_change_time;
-				uint32_t logon_count;
-				uint32_t bad_pw_count;
-				uint32_t user_rid;
-				uint32_t group_rid;
-				uint32_t num_groups;
-				uint32_t user_flgs;
-				uint32_t acct_flags;
-				uint32_t num_other_sids;
-				fstring dom_sid;
-				fstring user_name;
-				fstring full_name;
-				fstring logon_script;
-				fstring profile_path;
-				fstring home_dir;
-				fstring dir_drive;
-				fstring logon_srv;
-				fstring logon_dom;
-			} info3;
-			fstring unix_username;
-		} auth;
-		struct {
-			fstring name;
-			fstring alt_name;
-			fstring sid;
-			bool native_mode;
-			bool active_directory;
-			bool primary;
-		} domain_info;
-		uint32_t sequence_number;
-		struct {
-			fstring acct_name;
-			fstring full_name;
-			fstring homedir;
-			fstring shell;
-			uint32_t primary_gid;
-			uint32_t group_rid;
-		} user_info;
-		struct {
-			uint32_t auth_blob_len; /* blob in extra_data */
-		} ccache_ntlm_auth;
-	} data;
-
-	/* Variable length return data */
-
-	union {
-		SMB_TIME_T padding;
-		void *data;
-	} extra_data;
-};
-
-struct WINBINDD_MEMORY_CREDS {
-	struct WINBINDD_MEMORY_CREDS *next, *prev;
-	const char *username; /* lookup key. */
-	uid_t uid;
-	int ref_count;
-	size_t len;
-	uint8_t *nt_hash; /* Base pointer for the following 2 */
-	uint8_t *lm_hash;
-	char *pass;
-};
-
-struct WINBINDD_CCACHE_ENTRY {
-	struct WINBINDD_CCACHE_ENTRY *next, *prev;
-	const char *principal_name;
-	const char *ccname;
-	const char *service;
-	const char *username;
-	const char *realm;
-	struct WINBINDD_MEMORY_CREDS *cred_ptr;
-	int ref_count;
-	uid_t uid;
-	time_t create_time;
-	time_t renew_until;
-	time_t refresh_time;
-	struct timed_event *event;
-};
-
-#endif

Copied: branches/samba/upstream/source/nsswitch/winbindd.c (from rev 1928, branches/samba/upstream/source/nsswitch/winbindd.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/winbindd.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/winbindd.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,1117 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   Winbind daemon for ntdom nss module
+
+   Copyright (C) by Tim Potter 2000-2002
+   Copyright (C) Andrew Tridgell 2002
+   Copyright (C) Jelmer Vernooij 2003
+   Copyright (C) Volker Lendecke 2004
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "winbindd.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_WINBIND
+
+BOOL opt_nocache = False;
+static BOOL interactive = False;
+
+extern BOOL override_logfile;
+
+struct event_context *winbind_event_context(void)
+{
+	static struct event_context *ctx;
+
+	if (!ctx && !(ctx = event_context_init(NULL))) {
+		smb_panic("Could not init winbind event context\n");
+	}
+	return ctx;
+}
+
+/* Reload configuration */
+
+static BOOL reload_services_file(void)
+{
+	BOOL ret;
+
+	if (lp_loaded()) {
+		pstring fname;
+
+		pstrcpy(fname,lp_configfile());
+		if (file_exist(fname,NULL) && !strcsequal(fname,dyn_CONFIGFILE)) {
+			pstrcpy(dyn_CONFIGFILE,fname);
+		}
+	}
+
+	reopen_logs();
+	ret = lp_load(dyn_CONFIGFILE,False,False,True,True);
+
+	reopen_logs();
+	load_interfaces();
+
+	return(ret);
+}
+
+
+/**************************************************************************** **
+ Handle a fault..
+ **************************************************************************** */
+
+static void fault_quit(void)
+{
+	dump_core();
+}
+
+static void winbindd_status(void)
+{
+	struct winbindd_cli_state *tmp;
+
+	DEBUG(0, ("winbindd status:\n"));
+
+	/* Print client state information */
+	
+	DEBUG(0, ("\t%d clients currently active\n", winbindd_num_clients()));
+	
+	if (DEBUGLEVEL >= 2 && winbindd_num_clients()) {
+		DEBUG(2, ("\tclient list:\n"));
+		for(tmp = winbindd_client_list(); tmp; tmp = tmp->next) {
+			DEBUGADD(2, ("\t\tpid %lu, sock %d\n",
+				  (unsigned long)tmp->pid, tmp->sock));
+		}
+	}
+}
+
+/* Print winbindd status to log file */
+
+static void print_winbindd_status(void)
+{
+	winbindd_status();
+}
+
+/* Flush client cache */
+
+static void flush_caches(void)
+{
+	/* We need to invalidate cached user list entries on a SIGHUP 
+           otherwise cached access denied errors due to restrict anonymous
+           hang around until the sequence number changes. */
+
+	wcache_invalidate_cache();
+}
+
+/* Handle the signal by unlinking socket and exiting */
+
+static void terminate(void)
+{
+	pstring path;
+
+	/* Remove socket file */
+	pstr_sprintf(path, "%s/%s", 
+		 WINBINDD_SOCKET_DIR, WINBINDD_SOCKET_NAME);
+	unlink(path);
+
+	idmap_close();
+	
+	trustdom_cache_shutdown();
+
+#if 0
+	if (interactive) {
+		TALLOC_CTX *mem_ctx = talloc_init("end_description");
+		char *description = talloc_describe_all(mem_ctx);
+
+		DEBUG(3, ("tallocs left:\n%s\n", description));
+		talloc_destroy(mem_ctx);
+	}
+#endif
+
+	exit(0);
+}
+
+static BOOL do_sigterm;
+
+static void termination_handler(int signum)
+{
+	do_sigterm = True;
+	sys_select_signal(signum);
+}
+
+static BOOL do_sigusr2;
+
+static void sigusr2_handler(int signum)
+{
+	do_sigusr2 = True;
+	sys_select_signal(SIGUSR2);
+}
+
+static BOOL do_sighup;
+
+static void sighup_handler(int signum)
+{
+	do_sighup = True;
+	sys_select_signal(SIGHUP);
+}
+
+static BOOL do_sigchld;
+
+static void sigchld_handler(int signum)
+{
+	do_sigchld = True;
+	sys_select_signal(SIGCHLD);
+}
+
+/* React on 'smbcontrol winbindd reload-config' in the same way as on SIGHUP*/
+static void msg_reload_services(int msg_type, struct process_id src,
+				void *buf, size_t len, void *private_data)
+{
+        /* Flush various caches */
+	flush_caches();
+	reload_services_file();
+}
+
+/* React on 'smbcontrol winbindd shutdown' in the same way as on SIGTERM*/
+static void msg_shutdown(int msg_type, struct process_id src,
+			 void *buf, size_t len, void *private_data)
+{
+	do_sigterm = True;
+}
+
+static struct winbindd_dispatch_table {
+	enum winbindd_cmd cmd;
+	void (*fn)(struct winbindd_cli_state *state);
+	const char *winbindd_cmd_name;
+} dispatch_table[] = {
+	
+	/* User functions */
+
+	{ WINBINDD_GETPWNAM, winbindd_getpwnam, "GETPWNAM" },
+	{ WINBINDD_GETPWUID, winbindd_getpwuid, "GETPWUID" },
+
+	{ WINBINDD_SETPWENT, winbindd_setpwent, "SETPWENT" },
+	{ WINBINDD_ENDPWENT, winbindd_endpwent, "ENDPWENT" },
+	{ WINBINDD_GETPWENT, winbindd_getpwent, "GETPWENT" },
+
+	{ WINBINDD_GETGROUPS, winbindd_getgroups, "GETGROUPS" },
+	{ WINBINDD_GETUSERSIDS, winbindd_getusersids, "GETUSERSIDS" },
+	{ WINBINDD_GETUSERDOMGROUPS, winbindd_getuserdomgroups,
+	  "GETUSERDOMGROUPS" },
+
+	/* Group functions */
+
+	{ WINBINDD_GETGRNAM, winbindd_getgrnam, "GETGRNAM" },
+	{ WINBINDD_GETGRGID, winbindd_getgrgid, "GETGRGID" },
+	{ WINBINDD_SETGRENT, winbindd_setgrent, "SETGRENT" },
+	{ WINBINDD_ENDGRENT, winbindd_endgrent, "ENDGRENT" },
+	{ WINBINDD_GETGRENT, winbindd_getgrent, "GETGRENT" },
+	{ WINBINDD_GETGRLST, winbindd_getgrent, "GETGRLST" },
+
+	/* PAM auth functions */
+
+	{ WINBINDD_PAM_AUTH, winbindd_pam_auth, "PAM_AUTH" },
+	{ WINBINDD_PAM_AUTH_CRAP, winbindd_pam_auth_crap, "AUTH_CRAP" },
+	{ WINBINDD_PAM_CHAUTHTOK, winbindd_pam_chauthtok, "CHAUTHTOK" },
+	{ WINBINDD_PAM_LOGOFF, winbindd_pam_logoff, "PAM_LOGOFF" },
+	{ WINBINDD_PAM_CHNG_PSWD_AUTH_CRAP, winbindd_pam_chng_pswd_auth_crap, "CHNG_PSWD_AUTH_CRAP" },
+
+	/* Enumeration functions */
+
+	{ WINBINDD_LIST_USERS, winbindd_list_users, "LIST_USERS" },
+	{ WINBINDD_LIST_GROUPS, winbindd_list_groups, "LIST_GROUPS" },
+	{ WINBINDD_LIST_TRUSTDOM, winbindd_list_trusted_domains,
+	  "LIST_TRUSTDOM" },
+	{ WINBINDD_SHOW_SEQUENCE, winbindd_show_sequence, "SHOW_SEQUENCE" },
+
+	/* SID related functions */
+
+	{ WINBINDD_LOOKUPSID, winbindd_lookupsid, "LOOKUPSID" },
+	{ WINBINDD_LOOKUPNAME, winbindd_lookupname, "LOOKUPNAME" },
+	{ WINBINDD_LOOKUPRIDS, winbindd_lookuprids, "LOOKUPRIDS" },
+
+	/* Lookup related functions */
+
+	{ WINBINDD_SID_TO_UID, winbindd_sid_to_uid, "SID_TO_UID" },
+	{ WINBINDD_SID_TO_GID, winbindd_sid_to_gid, "SID_TO_GID" },
+	{ WINBINDD_UID_TO_SID, winbindd_uid_to_sid, "UID_TO_SID" },
+	{ WINBINDD_GID_TO_SID, winbindd_gid_to_sid, "GID_TO_SID" },
+#if 0   /* DISABLED until we fix the interface in Samba 3.0.26 --jerry */
+	{ WINBINDD_SIDS_TO_XIDS, winbindd_sids_to_unixids, "SIDS_TO_XIDS" },
+#endif  /* end DISABLED */
+	{ WINBINDD_ALLOCATE_UID, winbindd_allocate_uid, "ALLOCATE_UID" },
+	{ WINBINDD_ALLOCATE_GID, winbindd_allocate_gid, "ALLOCATE_GID" },
+	{ WINBINDD_SET_MAPPING, winbindd_set_mapping, "SET_MAPPING" },
+	{ WINBINDD_SET_HWM, winbindd_set_hwm, "SET_HWMS" },
+
+	/* Miscellaneous */
+
+	{ WINBINDD_DUMP_MAPS, winbindd_dump_maps, "DUMP_MAPS" },
+
+	{ WINBINDD_CHECK_MACHACC, winbindd_check_machine_acct, "CHECK_MACHACC" },
+	{ WINBINDD_PING, winbindd_ping, "PING" },
+	{ WINBINDD_INFO, winbindd_info, "INFO" },
+	{ WINBINDD_INTERFACE_VERSION, winbindd_interface_version,
+	  "INTERFACE_VERSION" },
+	{ WINBINDD_DOMAIN_NAME, winbindd_domain_name, "DOMAIN_NAME" },
+	{ WINBINDD_DOMAIN_INFO, winbindd_domain_info, "DOMAIN_INFO" },
+	{ WINBINDD_NETBIOS_NAME, winbindd_netbios_name, "NETBIOS_NAME" },
+	{ WINBINDD_PRIV_PIPE_DIR, winbindd_priv_pipe_dir,
+	  "WINBINDD_PRIV_PIPE_DIR" },
+	{ WINBINDD_GETDCNAME, winbindd_getdcname, "GETDCNAME" },
+
+	/* Credential cache access */
+	{ WINBINDD_CCACHE_NTLMAUTH, winbindd_ccache_ntlm_auth, "NTLMAUTH" },
+
+	/* WINS functions */
+
+	{ WINBINDD_WINS_BYNAME, winbindd_wins_byname, "WINS_BYNAME" },
+	{ WINBINDD_WINS_BYIP, winbindd_wins_byip, "WINS_BYIP" },
+	
+	/* End of list */
+
+	{ WINBINDD_NUM_CMDS, NULL, "NONE" }
+};
+
+static void process_request(struct winbindd_cli_state *state)
+{
+	struct winbindd_dispatch_table *table = dispatch_table;
+
+	/* Free response data - we may be interrupted and receive another
+	   command before being able to send this data off. */
+
+	SAFE_FREE(state->response.extra_data.data);  
+
+	ZERO_STRUCT(state->response);
+
+	state->response.result = WINBINDD_PENDING;
+	state->response.length = sizeof(struct winbindd_response);
+
+	state->mem_ctx = talloc_init("winbind request");
+	if (state->mem_ctx == NULL)
+		return;
+
+	/* Remember who asked us. */
+	state->pid = state->request.pid;
+
+	/* Process command */
+
+	for (table = dispatch_table; table->fn; table++) {
+		if (state->request.cmd == table->cmd) {
+			DEBUG(10,("process_request: request fn %s\n",
+				  table->winbindd_cmd_name ));
+			table->fn(state);
+			break;
+		}
+	}
+
+	if (!table->fn) {
+		DEBUG(10,("process_request: unknown request fn number %d\n",
+			  (int)state->request.cmd ));
+		request_error(state);
+	}
+}
+
+/*
+ * A list of file descriptors being monitored by select in the main processing
+ * loop. fd_event->handler is called whenever the socket is readable/writable.
+ */
+
+static struct fd_event *fd_events = NULL;
+
+void add_fd_event(struct fd_event *ev)
+{
+	struct fd_event *match;
+
+	/* only add unique fd_event structs */
+
+	for (match=fd_events; match; match=match->next ) {
+#ifdef DEVELOPER
+		SMB_ASSERT( match != ev );
+#else
+		if ( match == ev )
+			return;
+#endif
+	}
+
+	DLIST_ADD(fd_events, ev);
+}
+
+void remove_fd_event(struct fd_event *ev)
+{
+	DLIST_REMOVE(fd_events, ev);
+}
+
+/*
+ * Handler for fd_events to complete a read/write request, set up by
+ * setup_async_read/setup_async_write.
+ */
+
+static void rw_callback(struct fd_event *event, int flags)
+{
+	size_t todo;
+	ssize_t done = 0;
+
+	todo = event->length - event->done;
+
+	if (event->flags & EVENT_FD_WRITE) {
+		SMB_ASSERT(flags == EVENT_FD_WRITE);
+		done = sys_write(event->fd,
+				 &((char *)event->data)[event->done],
+				 todo);
+
+		if (done <= 0) {
+			event->flags = 0;
+			event->finished(event->private_data, False);
+			return;
+		}
+	}
+
+	if (event->flags & EVENT_FD_READ) {
+		SMB_ASSERT(flags == EVENT_FD_READ);
+		done = sys_read(event->fd, &((char *)event->data)[event->done],
+				todo);
+
+		if (done <= 0) {
+			event->flags = 0;
+			event->finished(event->private_data, False);
+			return;
+		}
+	}
+
+	event->done += done;
+
+	if (event->done == event->length) {
+		event->flags = 0;
+		event->finished(event->private_data, True);
+	}
+}
+
+/*
+ * Request an async read/write on a fd_event structure. (*finished) is called
+ * when the request is completed or an error had occurred.
+ */
+
+void setup_async_read(struct fd_event *event, void *data, size_t length,
+		      void (*finished)(void *private_data, BOOL success),
+		      void *private_data)
+{
+	SMB_ASSERT(event->flags == 0);
+	event->data = data;
+	event->length = length;
+	event->done = 0;
+	event->handler = rw_callback;
+	event->finished = finished;
+	event->private_data = private_data;
+	event->flags = EVENT_FD_READ;
+}
+
+void setup_async_write(struct fd_event *event, void *data, size_t length,
+		       void (*finished)(void *private_data, BOOL success),
+		       void *private_data)
+{
+	SMB_ASSERT(event->flags == 0);
+	event->data = data;
+	event->length = length;
+	event->done = 0;
+	event->handler = rw_callback;
+	event->finished = finished;
+	event->private_data = private_data;
+	event->flags = EVENT_FD_WRITE;
+}
+
+/*
+ * This is the main event loop of winbind requests. It goes through a
+ * state-machine of 3 read/write requests, 4 if you have extra data to send.
+ *
+ * An idle winbind client has a read request of 4 bytes outstanding,
+ * finalizing function is request_len_recv, checking the length. request_recv
+ * then processes the packet. The processing function then at some point has
+ * to call request_finished which schedules sending the response.
+ */
+
+static void request_len_recv(void *private_data, BOOL success);
+static void request_recv(void *private_data, BOOL success);
+static void request_main_recv(void *private_data, BOOL success);
+static void request_finished(struct winbindd_cli_state *state);
+void request_finished_cont(void *private_data, BOOL success);
+static void response_main_sent(void *private_data, BOOL success);
+static void response_extra_sent(void *private_data, BOOL success);
+
+static void response_extra_sent(void *private_data, BOOL success)
+{
+	struct winbindd_cli_state *state =
+		talloc_get_type_abort(private_data, struct winbindd_cli_state);
+
+	if (state->mem_ctx != NULL) {
+		talloc_destroy(state->mem_ctx);
+		state->mem_ctx = NULL;
+	}
+
+	if (!success) {
+		state->finished = True;
+		return;
+	}
+
+	SAFE_FREE(state->request.extra_data.data);
+	SAFE_FREE(state->response.extra_data.data);
+
+	setup_async_read(&state->fd_event, &state->request, sizeof(uint32),
+			 request_len_recv, state);
+}
+
+static void response_main_sent(void *private_data, BOOL success)
+{
+	struct winbindd_cli_state *state =
+		talloc_get_type_abort(private_data, struct winbindd_cli_state);
+
+	if (!success) {
+		state->finished = True;
+		return;
+	}
+
+	if (state->response.length == sizeof(state->response)) {
+		if (state->mem_ctx != NULL) {
+			talloc_destroy(state->mem_ctx);
+			state->mem_ctx = NULL;
+		}
+
+		setup_async_read(&state->fd_event, &state->request,
+				 sizeof(uint32), request_len_recv, state);
+		return;
+	}
+
+	setup_async_write(&state->fd_event, state->response.extra_data.data,
+			  state->response.length - sizeof(state->response),
+			  response_extra_sent, state);
+}
+
+static void request_finished(struct winbindd_cli_state *state)
+{
+	setup_async_write(&state->fd_event, &state->response,
+			  sizeof(state->response), response_main_sent, state);
+}
+
+void request_error(struct winbindd_cli_state *state)
+{
+	SMB_ASSERT(state->response.result == WINBINDD_PENDING);
+	state->response.result = WINBINDD_ERROR;
+	request_finished(state);
+}
+
+void request_ok(struct winbindd_cli_state *state)
+{
+	SMB_ASSERT(state->response.result == WINBINDD_PENDING);
+	state->response.result = WINBINDD_OK;
+	request_finished(state);
+}
+
+void request_finished_cont(void *private_data, BOOL success)
+{
+	struct winbindd_cli_state *state =
+		talloc_get_type_abort(private_data, struct winbindd_cli_state);
+
+	if (success)
+		request_ok(state);
+	else
+		request_error(state);
+}
+
+static void request_len_recv(void *private_data, BOOL success)
+{
+	struct winbindd_cli_state *state =
+		talloc_get_type_abort(private_data, struct winbindd_cli_state);
+
+	if (!success) {
+		state->finished = True;
+		return;
+	}
+
+	if (*(uint32 *)(&state->request) != sizeof(state->request)) {
+		DEBUG(0,("request_len_recv: Invalid request size received: %d (expected %d)\n",
+			 *(uint32 *)(&state->request), (uint32)sizeof(state->request)));
+		state->finished = True;
+		return;
+	}
+
+	setup_async_read(&state->fd_event, (uint32 *)(&state->request)+1,
+			 sizeof(state->request) - sizeof(uint32),
+			 request_main_recv, state);
+}
+
+static void request_main_recv(void *private_data, BOOL success)
+{
+	struct winbindd_cli_state *state =
+		talloc_get_type_abort(private_data, struct winbindd_cli_state);
+
+	if (!success) {
+		state->finished = True;
+		return;
+	}
+
+	if (state->request.extra_len == 0) {
+		state->request.extra_data.data = NULL;
+		request_recv(state, True);
+		return;
+	}
+
+	if ((!state->privileged) &&
+	    (state->request.extra_len > WINBINDD_MAX_EXTRA_DATA)) {
+		DEBUG(3, ("Got request with %d bytes extra data on "
+			  "unprivileged socket\n", (int)state->request.extra_len));
+		state->request.extra_data.data = NULL;
+		state->finished = True;
+		return;
+	}
+
+	state->request.extra_data.data =
+		SMB_MALLOC_ARRAY(char, state->request.extra_len + 1);
+
+	if (state->request.extra_data.data == NULL) {
+		DEBUG(0, ("malloc failed\n"));
+		state->finished = True;
+		return;
+	}
+
+	/* Ensure null termination */
+	state->request.extra_data.data[state->request.extra_len] = '\0';
+
+	setup_async_read(&state->fd_event, state->request.extra_data.data,
+			 state->request.extra_len, request_recv, state);
+}
+
+static void request_recv(void *private_data, BOOL success)
+{
+	struct winbindd_cli_state *state =
+		talloc_get_type_abort(private_data, struct winbindd_cli_state);
+
+	if (!success) {
+		state->finished = True;
+		return;
+	}
+
+	process_request(state);
+}
+
+/* Process a new connection by adding it to the client connection list */
+
+static void new_connection(int listen_sock, BOOL privileged)
+{
+	struct sockaddr_un sunaddr;
+	struct winbindd_cli_state *state;
+	socklen_t len;
+	int sock;
+	
+	/* Accept connection */
+	
+	len = sizeof(sunaddr);
+
+	do {
+		sock = accept(listen_sock, (struct sockaddr *)&sunaddr, &len);
+	} while (sock == -1 && errno == EINTR);
+
+	if (sock == -1)
+		return;
+	
+	DEBUG(6,("accepted socket %d\n", sock));
+	
+	/* Create new connection structure */
+	
+	if ((state = TALLOC_ZERO_P(NULL, struct winbindd_cli_state)) == NULL) {
+		close(sock);
+		return;
+	}
+	
+	state->sock = sock;
+
+	state->last_access = time(NULL);	
+
+	state->privileged = privileged;
+
+	state->fd_event.fd = state->sock;
+	state->fd_event.flags = 0;
+	add_fd_event(&state->fd_event);
+
+	setup_async_read(&state->fd_event, &state->request, sizeof(uint32),
+			 request_len_recv, state);
+
+	/* Add to connection list */
+	
+	winbindd_add_client(state);
+}
+
+/* Remove a client connection from client connection list */
+
+static void remove_client(struct winbindd_cli_state *state)
+{
+	/* It's a dead client - hold a funeral */
+	
+	if (state == NULL) {
+		return;
+	}
+		
+	/* Close socket */
+		
+	close(state->sock);
+		
+	/* Free any getent state */
+		
+	free_getent_state(state->getpwent_state);
+	free_getent_state(state->getgrent_state);
+		
+	/* We may have some extra data that was not freed if the client was
+	   killed unexpectedly */
+
+	SAFE_FREE(state->response.extra_data.data);
+
+	if (state->mem_ctx != NULL) {
+		talloc_destroy(state->mem_ctx);
+		state->mem_ctx = NULL;
+	}
+
+	remove_fd_event(&state->fd_event);
+		
+	/* Remove from list and free */
+		
+	winbindd_remove_client(state);
+	TALLOC_FREE(state);
+}
+
+/* Shutdown client connection which has been idle for the longest time */
+
+static BOOL remove_idle_client(void)
+{
+	struct winbindd_cli_state *state, *remove_state = NULL;
+	time_t last_access = 0;
+	int nidle = 0;
+
+	for (state = winbindd_client_list(); state; state = state->next) {
+		if (state->response.result != WINBINDD_PENDING &&
+		    !state->getpwent_state && !state->getgrent_state) {
+			nidle++;
+			if (!last_access || state->last_access < last_access) {
+				last_access = state->last_access;
+				remove_state = state;
+			}
+		}
+	}
+
+	if (remove_state) {
+		DEBUG(5,("Found %d idle client connections, shutting down sock %d, pid %u\n",
+			nidle, remove_state->sock, (unsigned int)remove_state->pid));
+		remove_client(remove_state);
+		return True;
+	}
+
+	return False;
+}
+
+/* check if HUP has been received and reload files */
+void winbind_check_sighup(void)
+{
+	if (do_sighup) {
+
+		DEBUG(3, ("got SIGHUP\n"));
+
+		msg_reload_services(MSG_SMB_CONF_UPDATED, pid_to_procid(0), NULL, 0, NULL);
+		do_sighup = False;
+	}
+}
+
+/* check if TERM has been received */
+void winbind_check_sigterm(void)
+{
+	if (do_sigterm)
+		terminate();
+}
+
+/* Process incoming clients on listen_sock.  We use a tricky non-blocking,
+   non-forking, non-threaded model which allows us to handle many
+   simultaneous connections while remaining impervious to many denial of
+   service attacks. */
+
+static void process_loop(void)
+{
+	struct winbindd_cli_state *state;
+	struct fd_event *ev;
+	fd_set r_fds, w_fds;
+	int maxfd, listen_sock, listen_priv_sock, selret;
+	struct timeval timeout, ev_timeout;
+
+	/* Open Sockets here to get stuff going ASAP */
+	listen_sock = open_winbindd_socket();
+	listen_priv_sock = open_winbindd_priv_socket();
+
+	if (listen_sock == -1 || listen_priv_sock == -1) {
+		perror("open_winbind_socket");
+		exit(1);
+	}
+
+	/* We'll be doing this a lot */
+
+	/* Handle messages */
+
+	message_dispatch();
+
+	run_events(winbind_event_context(), 0, NULL, NULL);
+
+	/* refresh the trusted domain cache */
+
+	rescan_trusted_domains();
+
+	/* Free up temporary memory */
+
+	lp_TALLOC_FREE();
+	main_loop_TALLOC_FREE();
+
+	/* Initialise fd lists for select() */
+
+	maxfd = MAX(listen_sock, listen_priv_sock);
+
+	FD_ZERO(&r_fds);
+	FD_ZERO(&w_fds);
+	FD_SET(listen_sock, &r_fds);
+	FD_SET(listen_priv_sock, &r_fds);
+
+	timeout.tv_sec = WINBINDD_ESTABLISH_LOOP;
+	timeout.tv_usec = 0;
+
+	/* Check for any event timeouts. */
+	if (get_timed_events_timeout(winbind_event_context(), &ev_timeout)) {
+		timeout = timeval_min(&timeout, &ev_timeout);
+	}
+
+	/* Set up client readers and writers */
+
+	state = winbindd_client_list();
+
+	while (state) {
+
+		struct winbindd_cli_state *next = state->next;
+
+		/* Dispose of client connection if it is marked as 
+		   finished */ 
+
+		if (state->finished)
+			remove_client(state);
+
+		state = next;
+	}
+
+	for (ev = fd_events; ev; ev = ev->next) {
+		if (ev->flags & EVENT_FD_READ) {
+			FD_SET(ev->fd, &r_fds);
+			maxfd = MAX(ev->fd, maxfd);
+		}
+		if (ev->flags & EVENT_FD_WRITE) {
+			FD_SET(ev->fd, &w_fds);
+			maxfd = MAX(ev->fd, maxfd);
+		}
+	}
+
+	/* Call select */
+        
+	selret = sys_select(maxfd + 1, &r_fds, &w_fds, NULL, &timeout);
+
+	if (selret == 0) {
+		goto no_fds_ready;
+	}
+
+	if (selret == -1) {
+		if (errno == EINTR) {
+			goto no_fds_ready;
+		}
+
+		/* Select error, something is badly wrong */
+
+		perror("select");
+		exit(1);
+	}
+
+	/* selret > 0 */
+
+	ev = fd_events;
+	while (ev != NULL) {
+		struct fd_event *next = ev->next;
+		int flags = 0;
+		if (FD_ISSET(ev->fd, &r_fds))
+			flags |= EVENT_FD_READ;
+		if (FD_ISSET(ev->fd, &w_fds))
+			flags |= EVENT_FD_WRITE;
+		if (flags)
+			ev->handler(ev, flags);
+		ev = next;
+	}
+
+	if (FD_ISSET(listen_sock, &r_fds)) {
+		while (winbindd_num_clients() >
+		       WINBINDD_MAX_SIMULTANEOUS_CLIENTS - 1) {
+			DEBUG(5,("winbindd: Exceeding %d client "
+				 "connections, removing idle "
+				 "connection.\n",
+				 WINBINDD_MAX_SIMULTANEOUS_CLIENTS));
+			if (!remove_idle_client()) {
+				DEBUG(0,("winbindd: Exceeding %d "
+					 "client connections, no idle "
+					 "connection found\n",
+					 WINBINDD_MAX_SIMULTANEOUS_CLIENTS));
+				break;
+			}
+		}
+		/* new, non-privileged connection */
+		new_connection(listen_sock, False);
+	}
+            
+	if (FD_ISSET(listen_priv_sock, &r_fds)) {
+		while (winbindd_num_clients() >
+		       WINBINDD_MAX_SIMULTANEOUS_CLIENTS - 1) {
+			DEBUG(5,("winbindd: Exceeding %d client "
+				 "connections, removing idle "
+				 "connection.\n",
+				 WINBINDD_MAX_SIMULTANEOUS_CLIENTS));
+			if (!remove_idle_client()) {
+				DEBUG(0,("winbindd: Exceeding %d "
+					 "client connections, no idle "
+					 "connection found\n",
+					 WINBINDD_MAX_SIMULTANEOUS_CLIENTS));
+				break;
+			}
+		}
+		/* new, privileged connection */
+		new_connection(listen_priv_sock, True);
+	}
+
+ no_fds_ready:
+
+#if 0
+	winbindd_check_cache_size(time(NULL));
+#endif
+
+	/* Check signal handling things */
+
+	winbind_check_sigterm();
+	winbind_check_sighup();
+
+	if (do_sigusr2) {
+		print_winbindd_status();
+		do_sigusr2 = False;
+	}
+
+	if (do_sigchld) {
+		pid_t pid;
+
+		do_sigchld = False;
+
+		while ((pid = sys_waitpid(-1, NULL, WNOHANG)) > 0) {
+			winbind_child_died(pid);
+		}
+	}
+}
+
+/* Main function */
+
+int main(int argc, char **argv, char **envp)
+{
+	pstring logfile;
+	static BOOL Fork = True;
+	static BOOL log_stdout = False;
+	static BOOL no_process_group = False;
+	struct poptOption long_options[] = {
+		POPT_AUTOHELP
+		{ "stdout", 'S', POPT_ARG_VAL, &log_stdout, True, "Log to stdout" },
+		{ "foreground", 'F', POPT_ARG_VAL, &Fork, False, "Daemon in foreground mode" },
+		{ "no-process-group", 0, POPT_ARG_VAL, &no_process_group, True, "Don't create a new process group" },
+		{ "interactive", 'i', POPT_ARG_NONE, NULL, 'i', "Interactive mode" },
+		{ "no-caching", 'n', POPT_ARG_VAL, &opt_nocache, True, "Disable caching" },
+		POPT_COMMON_SAMBA
+		POPT_TABLEEND
+	};
+	poptContext pc;
+	int opt;
+
+	/* glibc (?) likes to print "User defined signal 1" and exit if a
+	   SIGUSR[12] is received before a handler is installed */
+
+ 	CatchSignal(SIGUSR1, SIG_IGN);
+ 	CatchSignal(SIGUSR2, SIG_IGN);
+
+	fault_setup((void (*)(void *))fault_quit );
+	dump_core_setup("winbindd");
+
+	load_case_tables();
+
+	/* Initialise for running in non-root mode */
+
+	sec_init();
+
+	set_remote_machine_name("winbindd", False);
+
+	/* Set environment variable so we don't recursively call ourselves.
+	   This may also be useful interactively. */
+
+	if ( !winbind_off() ) {
+		DEBUG(0,("Failed to disable recusive winbindd calls.  Exiting.\n"));
+		exit(1);
+	}
+
+	/* Initialise samba/rpc client stuff */
+
+	pc = poptGetContext("winbindd", argc, (const char **)argv, long_options,
+						POPT_CONTEXT_KEEP_FIRST);
+
+	while ((opt = poptGetNextOpt(pc)) != -1) {
+		switch (opt) {
+			/* Don't become a daemon */
+		case 'i':
+			interactive = True;
+			log_stdout = True;
+			Fork = False;
+			break;
+		}
+	}
+
+
+	if (log_stdout && Fork) {
+		printf("Can't log to stdout (-S) unless daemon is in foreground +(-F) or interactive (-i)\n");
+		poptPrintUsage(pc, stderr, 0);
+		exit(1);
+	}
+
+	if (!override_logfile) {
+		pstr_sprintf(logfile, "%s/log.winbindd", dyn_LOGFILEBASE);
+		lp_set_logfile(logfile);
+	}
+	setup_logging("winbindd", log_stdout);
+	reopen_logs();
+
+	DEBUG(1, ("winbindd version %s started.\n%s\n", 
+		  SAMBA_VERSION_STRING, 
+		  COPYRIGHT_STARTUP_MESSAGE) );
+
+	if (!reload_services_file()) {
+		DEBUG(0, ("error opening config file\n"));
+		exit(1);
+	}
+
+	if (!directory_exist(lp_lockdir(), NULL)) {
+		mkdir(lp_lockdir(), 0755);
+	}
+
+	/* Setup names. */
+
+	if (!init_names())
+		exit(1);
+
+  	load_interfaces();
+
+	if (!secrets_init()) {
+
+		DEBUG(0,("Could not initialize domain trust account secrets. Giving up\n"));
+		return False;
+	}
+
+	/* Enable netbios namecache */
+
+	namecache_enable();
+
+	/* Winbind daemon initialisation */
+
+	if ( ! NT_STATUS_IS_OK(idmap_init_cache()) ) {
+		DEBUG(1, ("Could not init idmap cache!\n"));		
+	}
+
+	/* Unblock all signals we are interested in as they may have been
+	   blocked by the parent process. */
+
+	BlockSignals(False, SIGINT);
+	BlockSignals(False, SIGQUIT);
+	BlockSignals(False, SIGTERM);
+	BlockSignals(False, SIGUSR1);
+	BlockSignals(False, SIGUSR2);
+	BlockSignals(False, SIGHUP);
+	BlockSignals(False, SIGCHLD);
+
+	/* Setup signal handlers */
+	
+	CatchSignal(SIGINT, termination_handler);      /* Exit on these sigs */
+	CatchSignal(SIGQUIT, termination_handler);
+	CatchSignal(SIGTERM, termination_handler);
+	CatchSignal(SIGCHLD, sigchld_handler);
+
+	CatchSignal(SIGPIPE, SIG_IGN);                 /* Ignore sigpipe */
+
+	CatchSignal(SIGUSR2, sigusr2_handler);         /* Debugging sigs */
+	CatchSignal(SIGHUP, sighup_handler);
+
+	if (!interactive)
+		become_daemon(Fork, no_process_group);
+
+	pidfile_create("winbindd");
+
+#if HAVE_SETPGID
+	/*
+	 * If we're interactive we want to set our own process group for
+	 * signal management.
+	 */
+	if (interactive && !no_process_group)
+		setpgid( (pid_t)0, (pid_t)0);
+#endif
+
+	TimeInit();
+
+	/* Initialise messaging system */
+
+	if (!message_init()) {
+		DEBUG(0, ("unable to initialize messaging system\n"));
+		exit(1);
+	}
+	
+	/* Initialize cache (ensure version is correct). */
+	if (!initialize_winbindd_cache()) {
+		exit(1);
+	}
+
+	/* React on 'smbcontrol winbindd reload-config' in the same way
+	   as to SIGHUP signal */
+	message_register(MSG_SMB_CONF_UPDATED, msg_reload_services, NULL);
+	message_register(MSG_SHUTDOWN, msg_shutdown, NULL);
+
+	/* Handle online/offline messages. */
+	message_register(MSG_WINBIND_OFFLINE, winbind_msg_offline, NULL);
+	message_register(MSG_WINBIND_ONLINE, winbind_msg_online, NULL);
+	message_register(MSG_WINBIND_ONLINESTATUS, winbind_msg_onlinestatus,
+			 NULL);
+
+	poptFreeContext(pc);
+
+	netsamlogon_cache_init(); /* Non-critical */
+	
+	if (!init_domain_list()) {
+		DEBUG(0,("unable to initalize domain list\n"));
+		exit(1);
+	}
+
+	init_idmap_child();
+
+	smb_nscd_flush_user_cache();
+	smb_nscd_flush_group_cache();
+
+	/* Loop waiting for requests */
+
+	while (1)
+		process_loop();
+
+	return 0;
+}

Copied: branches/samba/upstream/source/nsswitch/winbindd.h (from rev 1928, branches/samba/upstream/source/nsswitch/winbindd.h)
===================================================================
--- branches/samba/upstream/source/nsswitch/winbindd.h	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/winbindd.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,342 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   Winbind daemon for ntdom nss module
+
+   Copyright (C) Tim Potter 2000
+   Copyright (C) Jim McDonough <jmcd at us.ibm.com> 2003
+   
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public
+   License as published by the Free Software Foundation; either
+   version 2 of the License, or (at your option) any later version.
+   
+   This library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+   
+   You should have received a copy of the GNU Library General Public
+   License along with this library; if not, write to the
+   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA  02111-1307, USA.   
+*/
+
+#ifndef _WINBINDD_H
+#define _WINBINDD_H
+
+#include "nterr.h"
+
+#include "winbindd_nss.h"
+
+#ifdef HAVE_LIBNSCD
+#include "libnscd.h"
+#endif
+
+#ifdef HAVE_SYS_MMAN_H
+#include <sys/mman.h>
+#endif
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_WINBIND
+
+#define WB_REPLACE_CHAR		'_'
+
+/* bits for fd_event.flags */
+#define EVENT_FD_READ 1
+#define EVENT_FD_WRITE 2
+
+struct fd_event {
+	struct fd_event *next, *prev;
+	int fd;
+	int flags; /* see EVENT_FD_* flags */
+	void (*handler)(struct fd_event *fde, int flags);
+	void *data;
+	size_t length, done;
+	void (*finished)(void *private_data, BOOL success);
+	void *private_data;
+};
+
+struct sid_ctr {
+	DOM_SID *sid;
+	BOOL finished;
+	const char *domain;
+	const char *name;
+	enum lsa_SidType type;
+};
+
+struct winbindd_cli_state {
+	struct winbindd_cli_state *prev, *next;   /* Linked list pointers */
+	int sock;                                 /* Open socket from client */
+	struct fd_event fd_event;
+	pid_t pid;                                /* pid of client */
+	BOOL finished;                            /* Can delete from list */
+	BOOL write_extra_data;                    /* Write extra_data field */
+	time_t last_access;                       /* Time of last access (read or write) */
+	BOOL privileged;                           /* Is the client 'privileged' */
+
+	TALLOC_CTX *mem_ctx;			  /* memory per request */
+	struct winbindd_request request;          /* Request from client */
+	struct winbindd_response response;        /* Respose to client */
+	BOOL getpwent_initialized;                /* Has getpwent_state been
+						   * initialized? */
+	BOOL getgrent_initialized;                /* Has getgrent_state been
+						   * initialized? */
+	struct getent_state *getpwent_state;      /* State for getpwent() */
+	struct getent_state *getgrent_state;      /* State for getgrent() */
+};
+
+/* State between get{pw,gr}ent() calls */
+
+struct getent_state {
+	struct getent_state *prev, *next;
+	void *sam_entries;
+	uint32 sam_entry_index, num_sam_entries;
+	BOOL got_sam_entries;
+	fstring domain_name;
+};
+
+/* Storage for cached getpwent() user entries */
+
+struct getpwent_user {
+	fstring name;                        /* Account name */
+	fstring gecos;                       /* User information */
+	fstring homedir;                     /* User Home Directory */
+	fstring shell;                       /* User Login Shell */
+	DOM_SID user_sid;                    /* NT user and primary group SIDs */
+	DOM_SID group_sid;
+};
+
+/* Server state structure */
+
+typedef struct {
+	char *acct_name;
+	char *full_name;
+	char *homedir;
+	char *shell;
+	gid_t primary_gid;                   /* allow the nss_info
+						backend to set the primary group */
+	DOM_SID user_sid;                    /* NT user and primary group SIDs */
+	DOM_SID group_sid;
+} WINBIND_USERINFO;
+
+/* Our connection to the DC */
+
+struct winbindd_cm_conn {
+	struct cli_state *cli;
+
+	struct rpc_pipe_client *samr_pipe;
+	POLICY_HND sam_connect_handle, sam_domain_handle;
+
+	struct rpc_pipe_client *lsa_pipe;
+	POLICY_HND lsa_policy;
+
+	struct rpc_pipe_client *netlogon_pipe;
+};
+
+struct winbindd_async_request;
+
+/* Async child */
+
+struct winbindd_child {
+	struct winbindd_child *next, *prev;
+
+	pid_t pid;
+	struct winbindd_domain *domain;
+	pstring logfilename;
+
+	struct fd_event event;
+	struct timed_event *lockout_policy_event;
+	struct winbindd_async_request *requests;
+};
+
+/* Structures to hold per domain information */
+
+struct winbindd_domain {
+	fstring name;                          /* Domain name */	
+	fstring alt_name;                      /* alt Domain name (if any) */
+	fstring forest_name;                   /* Name of the AD forest we're in */
+	DOM_SID sid;                           /* SID for this domain */
+	BOOL initialized;		       /* Did we already ask for the domain mode? */
+	BOOL native_mode;                      /* is this a win2k domain in native mode ? */
+	BOOL active_directory;                 /* is this a win2k active directory ? */
+	BOOL primary;                          /* is this our primary domain ? */
+	BOOL internal;                         /* BUILTIN and member SAM */
+	BOOL online;			       /* is this domain available ? */
+	time_t startup_time;		       /* When we set "startup" true. */
+	BOOL startup;                          /* are we in the first 30 seconds after startup_time ? */
+
+	/* Lookup methods for this domain (LDAP or RPC) */
+	struct winbindd_methods *methods;
+
+	/* the backend methods are used by the cache layer to find the right
+	   backend */
+	struct winbindd_methods *backend;
+
+        /* Private data for the backends (used for connection cache) */
+
+	void *private_data; 
+
+	/* A working DC */
+	fstring dcname;
+	struct sockaddr_in dcaddr;
+
+	/* Sequence number stuff */
+
+	time_t last_seq_check;
+	uint32 sequence_number;
+	NTSTATUS last_status;
+
+	/* The smb connection */
+
+	struct winbindd_cm_conn conn;
+
+	/* The child pid we're talking to */
+
+	struct winbindd_child child;
+
+	/* Callback we use to try put us back online. */
+
+	uint32 check_online_timeout;
+	struct timed_event *check_online_event;
+
+	/* Linked list info */
+
+	struct winbindd_domain *prev, *next;
+};
+
+/* per-domain methods. This is how LDAP vs RPC is selected
+ */
+struct winbindd_methods {
+	/* does this backend provide a consistent view of the data? (ie. is the primary group
+	   always correct) */
+	BOOL consistent;
+
+	/* get a list of users, returning a WINBIND_USERINFO for each one */
+	NTSTATUS (*query_user_list)(struct winbindd_domain *domain,
+				   TALLOC_CTX *mem_ctx,
+				   uint32 *num_entries, 
+				   WINBIND_USERINFO **info);
+
+	/* get a list of domain groups */
+	NTSTATUS (*enum_dom_groups)(struct winbindd_domain *domain,
+				    TALLOC_CTX *mem_ctx,
+				    uint32 *num_entries, 
+				    struct acct_info **info);
+
+	/* get a list of domain local groups */
+	NTSTATUS (*enum_local_groups)(struct winbindd_domain *domain,
+				    TALLOC_CTX *mem_ctx,
+				    uint32 *num_entries, 
+				    struct acct_info **info);
+				    
+	/* convert one user or group name to a sid */
+	NTSTATUS (*name_to_sid)(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				const char *domain_name,
+				const char *name,
+				DOM_SID *sid,
+				enum lsa_SidType *type);
+
+	/* convert a sid to a user or group name */
+	NTSTATUS (*sid_to_name)(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				const DOM_SID *sid,
+				char **domain_name,
+				char **name,
+				enum lsa_SidType *type);
+
+	NTSTATUS (*rids_to_names)(struct winbindd_domain *domain,
+				  TALLOC_CTX *mem_ctx,
+				  const DOM_SID *domain_sid,
+				  uint32 *rids,
+				  size_t num_rids,
+				  char **domain_name,
+				  char ***names,
+				  enum lsa_SidType **types);
+
+	/* lookup user info for a given SID */
+	NTSTATUS (*query_user)(struct winbindd_domain *domain, 
+			       TALLOC_CTX *mem_ctx, 
+			       const DOM_SID *user_sid,
+			       WINBIND_USERINFO *user_info);
+
+	/* lookup all groups that a user is a member of. The backend
+	   can also choose to lookup by username or rid for this
+	   function */
+	NTSTATUS (*lookup_usergroups)(struct winbindd_domain *domain,
+				      TALLOC_CTX *mem_ctx,
+				      const DOM_SID *user_sid,
+				      uint32 *num_groups, DOM_SID **user_gids);
+
+	/* Lookup all aliases that the sids delivered are member of. This is
+	 * to implement 'domain local groups' correctly */
+	NTSTATUS (*lookup_useraliases)(struct winbindd_domain *domain,
+				       TALLOC_CTX *mem_ctx,
+				       uint32 num_sids,
+				       const DOM_SID *sids,
+				       uint32 *num_aliases,
+				       uint32 **alias_rids);
+
+	/* find all members of the group with the specified group_rid */
+	NTSTATUS (*lookup_groupmem)(struct winbindd_domain *domain,
+				    TALLOC_CTX *mem_ctx,
+				    const DOM_SID *group_sid,
+				    uint32 *num_names, 
+				    DOM_SID **sid_mem, char ***names, 
+				    uint32 **name_types);
+
+	/* return the current global sequence number */
+	NTSTATUS (*sequence_number)(struct winbindd_domain *domain, uint32 *seq);
+
+	/* return the lockout policy */
+	NTSTATUS (*lockout_policy)(struct winbindd_domain *domain, 
+ 				   TALLOC_CTX *mem_ctx,
+				   SAM_UNK_INFO_12 *lockout_policy);
+ 
+	/* return the lockout policy */
+	NTSTATUS (*password_policy)(struct winbindd_domain *domain, 
+				    TALLOC_CTX *mem_ctx,
+				    SAM_UNK_INFO_1 *password_policy);
+ 
+	/* enumerate trusted domains */
+	NTSTATUS (*trusted_domains)(struct winbindd_domain *domain,
+				    TALLOC_CTX *mem_ctx,
+				    uint32 *num_domains,
+				    char ***names,
+				    char ***alt_names,
+				    DOM_SID **dom_sids);
+};
+
+/* Used to glue a policy handle and cli_state together */
+
+typedef struct {
+	struct cli_state *cli;
+	POLICY_HND pol;
+} CLI_POLICY_HND;
+
+/* Filled out by IDMAP backends */
+struct winbindd_idmap_methods {
+  /* Called when backend is first loaded */
+  BOOL (*init)(void);
+
+  BOOL (*get_sid_from_uid)(uid_t uid, DOM_SID *sid);
+  BOOL (*get_sid_from_gid)(gid_t gid, DOM_SID *sid);
+
+  BOOL (*get_uid_from_sid)(DOM_SID *sid, uid_t *uid);
+  BOOL (*get_gid_from_sid)(DOM_SID *sid, gid_t *gid);
+
+  /* Called when backend is unloaded */
+  BOOL (*close)(void);
+  /* Called to dump backend status */
+  void (*status)(void);
+};
+
+#include "nsswitch/winbindd_proto.h"
+
+#define WINBINDD_ESTABLISH_LOOP 30
+#define WINBINDD_RESCAN_FREQ 300
+#define WINBINDD_PAM_AUTH_KRB5_RENEW_TIME 2592000 /* one month */
+#define DOM_SEQUENCE_NONE ((uint32)-1)
+
+#endif /* _WINBINDD_H */

Copied: branches/samba/upstream/source/nsswitch/winbindd_ads.c (from rev 1928, branches/samba/upstream/source/nsswitch/winbindd_ads.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/winbindd_ads.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/winbindd_ads.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,1129 @@
+/*
+   Unix SMB/CIFS implementation.
+
+   Winbind ADS backend functions
+
+   Copyright (C) Andrew Tridgell 2001
+   Copyright (C) Andrew Bartlett <abartlet at samba.org> 2003
+   Copyright (C) Gerald (Jerry) Carter 2004
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "winbindd.h"
+
+#ifdef HAVE_ADS
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_WINBIND
+
+extern struct winbindd_methods reconnect_methods;
+
+/*
+  return our ads connections structure for a domain. We keep the connection
+  open to make things faster
+*/
+static ADS_STRUCT *ads_cached_connection(struct winbindd_domain *domain)
+{
+	ADS_STRUCT *ads;
+	ADS_STATUS status;
+	fstring dc_name;
+	struct in_addr dc_ip;	
+
+	DEBUG(10,("ads_cached_connection\n"));
+
+	if (domain->private_data) {
+
+		time_t expire;
+		time_t now = time(NULL);
+
+		/* check for a valid structure */
+		ads = (ADS_STRUCT *)domain->private_data;
+
+		expire = MIN(ads->auth.tgt_expire, ads->auth.tgs_expire);
+
+		DEBUG(7, ("Current tickets expire in %d seconds (at %d, time is now %d)\n",
+			  (uint32)expire-(uint32)now, (uint32) expire, (uint32) now));
+
+		if ( ads->config.realm && (expire > now)) {
+			return ads;
+		} else {
+			/* we own this ADS_STRUCT so make sure it goes away */
+			DEBUG(7,("Deleting expired krb5 credential cache\n"));
+			ads->is_mine = True;
+			ads_destroy( &ads );
+			ads_kdestroy("MEMORY:winbind_ccache");
+			domain->private_data = NULL;
+		}	
+	}
+
+	/* we don't want this to affect the users ccache */
+	setenv("KRB5CCNAME", "MEMORY:winbind_ccache", 1);
+
+	ads = ads_init(domain->alt_name, domain->name, NULL);
+	if (!ads) {
+		DEBUG(1,("ads_init for domain %s failed\n", domain->name));
+		return NULL;
+	}
+
+	/* the machine acct password might have change - fetch it every time */
+
+	SAFE_FREE(ads->auth.password);
+	SAFE_FREE(ads->auth.realm);
+
+	if ( IS_DC ) {
+		DOM_SID sid;
+		time_t last_set_time;
+
+		if ( !secrets_fetch_trusted_domain_password( domain->name, &ads->auth.password, &sid, &last_set_time ) ) {
+			ads_destroy( &ads );
+			return NULL;
+		}
+		ads->auth.realm = SMB_STRDUP( ads->server.realm );
+		strupper_m( ads->auth.realm );
+	}
+	else {
+		struct winbindd_domain *our_domain = domain;
+
+		ads->auth.password = secrets_fetch_machine_password(lp_workgroup(), NULL, NULL);
+
+		/* always give preference to the alt_name in our 
+		   primary domain if possible */
+
+		if ( !domain->primary )
+			our_domain = find_our_domain();
+
+		if ( our_domain->alt_name[0] != '\0' ) {
+			ads->auth.realm = SMB_STRDUP( our_domain->alt_name );
+			strupper_m( ads->auth.realm );
+		}
+		else
+			ads->auth.realm = SMB_STRDUP( lp_realm() );
+	}
+
+	ads->auth.renewable = WINBINDD_PAM_AUTH_KRB5_RENEW_TIME;
+
+	/* Setup the server affinity cache.  We don't reaally care
+	   about the name.  Just setup affinity and the KRB5_CONFIG 
+	   file. */
+
+	get_dc_name( ads->server.workgroup, ads->server.realm, dc_name, &dc_ip );
+	
+	status = ads_connect(ads);
+	if (!ADS_ERR_OK(status) || !ads->config.realm) {
+		DEBUG(1,("ads_connect for domain %s failed: %s\n", 
+			 domain->name, ads_errstr(status)));
+		ads_destroy(&ads);
+
+		/* if we get ECONNREFUSED then it might be a NT4
+                   server, fall back to MSRPC */
+		if (status.error_type == ENUM_ADS_ERROR_SYSTEM &&
+		    status.err.rc == ECONNREFUSED) {
+			/* 'reconnect_methods' is the MS-RPC backend. */
+			DEBUG(1,("Trying MSRPC methods\n"));
+			domain->backend = &reconnect_methods;
+		}
+		return NULL;
+	}
+
+	/* set the flag that says we don't own the memory even 
+	   though we do so that ads_destroy() won't destroy the 
+	   structure we pass back by reference */
+
+	ads->is_mine = False;
+
+	domain->private_data = (void *)ads;
+	return ads;
+}
+
+
+/* Query display info for a realm. This is the basic user list fn */
+static NTSTATUS query_user_list(struct winbindd_domain *domain,
+			       TALLOC_CTX *mem_ctx,
+			       uint32 *num_entries, 
+			       WINBIND_USERINFO **info)
+{
+	ADS_STRUCT *ads = NULL;
+	const char *attrs[] = { "*", NULL };
+	int i, count;
+	ADS_STATUS rc;
+	LDAPMessage *res = NULL;
+	LDAPMessage *msg = NULL;
+	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
+
+	*num_entries = 0;
+
+	DEBUG(3,("ads: query_user_list\n"));
+
+	ads = ads_cached_connection(domain);
+	
+	if (!ads) {
+		domain->last_status = NT_STATUS_SERVER_DISABLED;
+		goto done;
+	}
+
+	rc = ads_search_retry(ads, &res, "(objectCategory=user)", attrs);
+	if (!ADS_ERR_OK(rc) || !res) {
+		DEBUG(1,("query_user_list ads_search: %s\n", ads_errstr(rc)));
+		goto done;
+	}
+
+	count = ads_count_replies(ads, res);
+	if (count == 0) {
+		DEBUG(1,("query_user_list: No users found\n"));
+		goto done;
+	}
+
+	(*info) = TALLOC_ZERO_ARRAY(mem_ctx, WINBIND_USERINFO, count);
+	if (!*info) {
+		status = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	i = 0;
+
+	for (msg = ads_first_entry(ads, res); msg; msg = ads_next_entry(ads, msg)) {
+		char *name, *gecos = NULL;
+		char *homedir = NULL;
+		char *shell = NULL;
+		uint32 group;
+		uint32 atype;
+		DOM_SID user_sid;
+		gid_t primary_gid = (gid_t)-1;
+
+		if (!ads_pull_uint32(ads, msg, "sAMAccountType", &atype) ||
+		    ads_atype_map(atype) != SID_NAME_USER) {
+			DEBUG(1,("Not a user account? atype=0x%x\n", atype));
+			continue;
+		}
+
+		name = ads_pull_username(ads, mem_ctx, msg);
+
+		if ( ads_pull_sid( ads, msg, "objectSid", &user_sid ) ) {
+			status = nss_get_info( domain->name, &user_sid, mem_ctx, 
+					       ads, msg, &homedir, &shell, &gecos,
+					       &primary_gid );
+		}
+
+		if (gecos == NULL) {
+			gecos = ads_pull_string(ads, mem_ctx, msg, "name");
+		}
+	
+		if (!ads_pull_sid(ads, msg, "objectSid",
+				  &(*info)[i].user_sid)) {
+			DEBUG(1,("No sid for %s !?\n", name));
+			continue;
+		}
+		if (!ads_pull_uint32(ads, msg, "primaryGroupID", &group)) {
+			DEBUG(1,("No primary group for %s !?\n", name));
+			continue;
+		}
+
+		(*info)[i].acct_name = name;
+		(*info)[i].full_name = gecos;
+		(*info)[i].homedir = homedir;
+		(*info)[i].shell = shell;
+		(*info)[i].primary_gid = primary_gid;
+		sid_compose(&(*info)[i].group_sid, &domain->sid, group);
+		i++;
+	}
+
+	(*num_entries) = i;
+	status = NT_STATUS_OK;
+
+	DEBUG(3,("ads query_user_list gave %d entries\n", (*num_entries)));
+
+done:
+	if (res) 
+		ads_msgfree(ads, res);
+
+	return status;
+}
+
+/* list all domain groups */
+static NTSTATUS enum_dom_groups(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				uint32 *num_entries, 
+				struct acct_info **info)
+{
+	ADS_STRUCT *ads = NULL;
+	const char *attrs[] = {"userPrincipalName", "sAMAccountName",
+			       "name", "objectSid", NULL};
+	int i, count;
+	ADS_STATUS rc;
+	LDAPMessage *res = NULL;
+	LDAPMessage *msg = NULL;
+	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
+	const char *filter;
+	BOOL enum_dom_local_groups = False;
+
+	*num_entries = 0;
+
+	DEBUG(3,("ads: enum_dom_groups\n"));
+
+	/* only grab domain local groups for our domain */
+	if ( domain->native_mode && strequal(lp_realm(), domain->alt_name)  ) {
+		enum_dom_local_groups = True;
+	}
+
+	/* Workaround ADS LDAP bug present in MS W2K3 SP0 and W2K SP4 w/o
+	 * rollup-fixes:
+	 *
+	 * According to Section 5.1(4) of RFC 2251 if a value of a type is it's
+	 * default value, it MUST be absent. In case of extensible matching the
+	 * "dnattr" boolean defaults to FALSE and so it must be only be present
+	 * when set to TRUE. 
+	 *
+	 * When it is set to FALSE and the OpenLDAP lib (correctly) encodes a
+	 * filter using bitwise matching rule then the buggy AD fails to decode
+	 * the extensible match. As a workaround set it to TRUE and thereby add
+	 * the dnAttributes "dn" field to cope with those older AD versions.
+	 * It should not harm and won't put any additional load on the AD since
+	 * none of the dn components have a bitmask-attribute.
+	 *
+	 * Thanks to Ralf Haferkamp for input and testing - Guenther */
+
+	filter = talloc_asprintf(mem_ctx, "(&(objectCategory=group)(&(groupType:dn:%s:=%d)(!(groupType:dn:%s:=%d))))", 
+				 ADS_LDAP_MATCHING_RULE_BIT_AND, GROUP_TYPE_SECURITY_ENABLED,
+				 ADS_LDAP_MATCHING_RULE_BIT_AND, 
+				 enum_dom_local_groups ? GROUP_TYPE_BUILTIN_LOCAL_GROUP : GROUP_TYPE_RESOURCE_GROUP);
+
+	if (filter == NULL) {
+		status = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	ads = ads_cached_connection(domain);
+
+	if (!ads) {
+		domain->last_status = NT_STATUS_SERVER_DISABLED;
+		goto done;
+	}
+
+	rc = ads_search_retry(ads, &res, filter, attrs);
+	if (!ADS_ERR_OK(rc) || !res) {
+		DEBUG(1,("enum_dom_groups ads_search: %s\n", ads_errstr(rc)));
+		goto done;
+	}
+
+	count = ads_count_replies(ads, res);
+	if (count == 0) {
+		DEBUG(1,("enum_dom_groups: No groups found\n"));
+		goto done;
+	}
+
+	(*info) = TALLOC_ZERO_ARRAY(mem_ctx, struct acct_info, count);
+	if (!*info) {
+		status = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	i = 0;
+	
+	for (msg = ads_first_entry(ads, res); msg; msg = ads_next_entry(ads, msg)) {
+		char *name, *gecos;
+		DOM_SID sid;
+		uint32 rid;
+
+		name = ads_pull_username(ads, mem_ctx, msg);
+		gecos = ads_pull_string(ads, mem_ctx, msg, "name");
+		if (!ads_pull_sid(ads, msg, "objectSid", &sid)) {
+			DEBUG(1,("No sid for %s !?\n", name));
+			continue;
+		}
+
+		if (!sid_peek_check_rid(&domain->sid, &sid, &rid)) {
+			DEBUG(1,("No rid for %s !?\n", name));
+			continue;
+		}
+
+		fstrcpy((*info)[i].acct_name, name);
+		fstrcpy((*info)[i].acct_desc, gecos);
+		(*info)[i].rid = rid;
+		i++;
+	}
+
+	(*num_entries) = i;
+
+	status = NT_STATUS_OK;
+
+	DEBUG(3,("ads enum_dom_groups gave %d entries\n", (*num_entries)));
+
+done:
+	if (res) 
+		ads_msgfree(ads, res);
+
+	return status;
+}
+
+/* list all domain local groups */
+static NTSTATUS enum_local_groups(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				uint32 *num_entries, 
+				struct acct_info **info)
+{
+	/*
+	 * This is a stub function only as we returned the domain 
+	 * local groups in enum_dom_groups() if the domain->native field
+	 * was true.  This is a simple performance optimization when
+	 * using LDAP.
+	 *
+	 * if we ever need to enumerate domain local groups separately, 
+	 * then this the optimization in enum_dom_groups() will need 
+	 * to be split out
+	 */
+	*num_entries = 0;
+	
+	return NT_STATUS_OK;
+}
+
+/* convert a DN to a name, SID and name type 
+   this might become a major speed bottleneck if groups have
+   lots of users, in which case we could cache the results
+*/
+static BOOL dn_lookup(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx,
+		      const char *dn,
+		      char **name, uint32 *name_type, DOM_SID *sid)
+{
+	LDAPMessage *res = NULL;
+	const char *attrs[] = {"userPrincipalName", "sAMAccountName",
+			       "objectSid", "sAMAccountType", NULL};
+	ADS_STATUS rc;
+	uint32 atype;
+	DEBUG(3,("ads: dn_lookup\n"));
+
+	rc = ads_search_retry_dn(ads, &res, dn, attrs);
+
+	if (!ADS_ERR_OK(rc) || !res) {
+		goto failed;
+	}
+
+	(*name) = ads_pull_username(ads, mem_ctx, res);
+
+	if (!ads_pull_uint32(ads, res, "sAMAccountType", &atype)) {
+		goto failed;
+	}
+	(*name_type) = ads_atype_map(atype);
+
+	if (!ads_pull_sid(ads, res, "objectSid", sid)) {
+		goto failed;
+	}
+
+	if (res) 
+		ads_msgfree(ads, res);
+
+	return True;
+
+failed:
+	if (res) 
+		ads_msgfree(ads, res);
+
+	return False;
+}
+
+/* Lookup user information from a rid */
+static NTSTATUS query_user(struct winbindd_domain *domain, 
+			   TALLOC_CTX *mem_ctx, 
+			   const DOM_SID *sid, 
+			   WINBIND_USERINFO *info)
+{
+	ADS_STRUCT *ads = NULL;
+	const char *attrs[] = { "*", NULL };
+	ADS_STATUS rc;
+	int count;
+	LDAPMessage *msg = NULL;
+	char *ldap_exp;
+	char *sidstr;
+	uint32 group_rid;
+	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(3,("ads: query_user\n"));
+
+	if ( (ads = ads_cached_connection(domain)) == NULL ) {
+		domain->last_status = NT_STATUS_SERVER_DISABLED;
+		goto done;
+	}
+
+	sidstr = sid_binstring(sid);
+	asprintf(&ldap_exp, "(objectSid=%s)", sidstr);
+	rc = ads_search_retry(ads, &msg, ldap_exp, attrs);
+	free(ldap_exp);
+	free(sidstr);
+	if (!ADS_ERR_OK(rc) || !msg) {
+		DEBUG(1,("query_user(sid=%s) ads_search: %s\n",
+			 sid_string_static(sid), ads_errstr(rc)));
+		goto done;
+	}
+
+	count = ads_count_replies(ads, msg);
+	if (count != 1) {
+		DEBUG(1,("query_user(sid=%s): Not found\n",
+			 sid_string_static(sid)));
+		goto done;
+	}
+
+	info->acct_name = ads_pull_username(ads, mem_ctx, msg);
+
+	info->primary_gid = (gid_t)-1;	
+	nss_get_info( domain->name, sid, mem_ctx, ads, msg, 
+		      &info->homedir, &info->shell, &info->full_name, &info->primary_gid );	
+
+	if (info->full_name == NULL) {
+		info->full_name = ads_pull_string(ads, mem_ctx, msg, "name");
+	}
+
+	if (!ads_pull_uint32(ads, msg, "primaryGroupID", &group_rid)) {
+		DEBUG(1,("No primary group for %s !?\n",
+			 sid_string_static(sid)));
+		goto done;
+	}
+
+	sid_copy(&info->user_sid, sid);
+	sid_compose(&info->group_sid, &domain->sid, group_rid);
+
+	status = NT_STATUS_OK;
+
+	DEBUG(3,("ads query_user gave %s\n", info->acct_name));
+done:
+	if (msg) 
+		ads_msgfree(ads, msg);
+
+	return status;
+}
+
+/* Lookup groups a user is a member of - alternate method, for when
+   tokenGroups are not available. */
+static NTSTATUS lookup_usergroups_member(struct winbindd_domain *domain,
+					 TALLOC_CTX *mem_ctx,
+					 const char *user_dn, 
+					 DOM_SID *primary_group,
+					 size_t *p_num_groups, DOM_SID **user_sids)
+{
+	ADS_STATUS rc;
+	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
+	int count;
+	LDAPMessage *res = NULL;
+	LDAPMessage *msg = NULL;
+	char *ldap_exp;
+	ADS_STRUCT *ads;
+	const char *group_attrs[] = {"objectSid", NULL};
+	char *escaped_dn;
+	size_t num_groups = 0;
+
+	DEBUG(3,("ads: lookup_usergroups_member\n"));
+
+	ads = ads_cached_connection(domain);
+
+	if (!ads) {
+		domain->last_status = NT_STATUS_SERVER_DISABLED;
+		goto done;
+	}
+
+	if (!(escaped_dn = escape_ldap_string_alloc(user_dn))) {
+		status = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	if (!(ldap_exp = talloc_asprintf(mem_ctx, "(&(member=%s)(objectCategory=group))", escaped_dn))) {
+		DEBUG(1,("lookup_usergroups(dn=%s) asprintf failed!\n", user_dn));
+		SAFE_FREE(escaped_dn);
+		status = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	SAFE_FREE(escaped_dn);
+
+	rc = ads_search_retry(ads, &res, ldap_exp, group_attrs);
+	
+	if (!ADS_ERR_OK(rc) || !res) {
+		DEBUG(1,("lookup_usergroups ads_search member=%s: %s\n", user_dn, ads_errstr(rc)));
+		return ads_ntstatus(rc);
+	}
+	
+	count = ads_count_replies(ads, res);
+	
+	*user_sids = NULL;
+	num_groups = 0;
+
+	/* always add the primary group to the sid array */
+	if (!add_sid_to_array(mem_ctx, primary_group, user_sids, &num_groups)) {
+		status = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	if (count > 0) {
+		for (msg = ads_first_entry(ads, res); msg;
+		     msg = ads_next_entry(ads, msg)) {
+			DOM_SID group_sid;
+		
+			if (!ads_pull_sid(ads, msg, "objectSid", &group_sid)) {
+				DEBUG(1,("No sid for this group ?!?\n"));
+				continue;
+			}
+	
+			/* ignore Builtin groups from ADS - Guenther */
+			if (sid_check_is_in_builtin(&group_sid)) {
+				continue;
+			}
+			       
+			if (!add_sid_to_array(mem_ctx, &group_sid, user_sids,
+					 &num_groups)) {
+				status = NT_STATUS_NO_MEMORY;
+				goto done;
+			}
+		}
+
+	}
+
+	*p_num_groups = num_groups;
+	status = (user_sids != NULL) ? NT_STATUS_OK : NT_STATUS_NO_MEMORY;
+
+	DEBUG(3,("ads lookup_usergroups (member) succeeded for dn=%s\n", user_dn));
+done:
+	if (res) 
+		ads_msgfree(ads, res);
+
+	return status;
+}
+
+/* Lookup groups a user is a member of - alternate method, for when
+   tokenGroups are not available. */
+static NTSTATUS lookup_usergroups_memberof(struct winbindd_domain *domain,
+					   TALLOC_CTX *mem_ctx,
+					   const char *user_dn, 
+					   DOM_SID *primary_group,
+					   size_t *p_num_groups, DOM_SID **user_sids)
+{
+	ADS_STATUS rc;
+	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
+	int count;
+	LDAPMessage *res = NULL;
+	ADS_STRUCT *ads;
+	const char *attrs[] = {"memberOf", NULL};
+	size_t num_groups = 0;
+	DOM_SID *group_sids = NULL;
+	int i;
+
+	DEBUG(3,("ads: lookup_usergroups_memberof\n"));
+
+	ads = ads_cached_connection(domain);
+
+	if (!ads) {
+		domain->last_status = NT_STATUS_SERVER_DISABLED;
+		goto done;
+	}
+
+	rc = ads_search_retry_extended_dn(ads, &res, user_dn, attrs, 
+					  ADS_EXTENDED_DN_HEX_STRING);
+	
+	if (!ADS_ERR_OK(rc) || !res) {
+		DEBUG(1,("lookup_usergroups_memberof ads_search member=%s: %s\n", 
+			user_dn, ads_errstr(rc)));
+		return ads_ntstatus(rc);
+	}
+	
+	count = ads_count_replies(ads, res);
+
+	if (count == 0) {
+		status = NT_STATUS_NO_SUCH_USER;
+		goto done;
+	}
+	
+	*user_sids = NULL;
+	num_groups = 0;
+
+	/* always add the primary group to the sid array */
+	if (!add_sid_to_array(mem_ctx, primary_group, user_sids, &num_groups)) {
+		status = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	count = ads_pull_sids_from_extendeddn(ads, mem_ctx, res, "memberOf", 
+					      ADS_EXTENDED_DN_HEX_STRING, 
+					      &group_sids);
+	if (count == 0) {
+		DEBUG(1,("No memberOf for this user?!?\n"));
+		status = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	for (i=0; i<count; i++) {
+
+		/* ignore Builtin groups from ADS - Guenther */
+		if (sid_check_is_in_builtin(&group_sids[i])) {
+			continue;
+		}
+		       
+		if (!add_sid_to_array(mem_ctx, &group_sids[i], user_sids,
+				 &num_groups)) {
+			status = NT_STATUS_NO_MEMORY;
+			goto done;
+		}
+	
+	}
+
+	*p_num_groups = num_groups;
+	status = (*user_sids != NULL) ? NT_STATUS_OK : NT_STATUS_NO_MEMORY;
+
+	DEBUG(3,("ads lookup_usergroups (memberof) succeeded for dn=%s\n", user_dn));
+done:
+	TALLOC_FREE(group_sids);
+	if (res) 
+		ads_msgfree(ads, res);
+
+	return status;
+}
+
+
+/* Lookup groups a user is a member of. */
+static NTSTATUS lookup_usergroups(struct winbindd_domain *domain,
+				  TALLOC_CTX *mem_ctx,
+				  const DOM_SID *sid, 
+				  uint32 *p_num_groups, DOM_SID **user_sids)
+{
+	ADS_STRUCT *ads = NULL;
+	const char *attrs[] = {"tokenGroups", "primaryGroupID", NULL};
+	ADS_STATUS rc;
+	int count;
+	LDAPMessage *msg = NULL;
+	char *user_dn = NULL;
+	DOM_SID *sids;
+	int i;
+	DOM_SID primary_group;
+	uint32 primary_group_rid;
+	fstring sid_string;
+	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
+	size_t num_groups = 0;
+
+	DEBUG(3,("ads: lookup_usergroups\n"));
+	*p_num_groups = 0;
+
+	status = lookup_usergroups_cached(domain, mem_ctx, sid, 
+					  p_num_groups, user_sids);
+	if (NT_STATUS_IS_OK(status)) {
+		return NT_STATUS_OK;
+	}
+
+	ads = ads_cached_connection(domain);
+	
+	if (!ads) {
+		domain->last_status = NT_STATUS_SERVER_DISABLED;
+		status = NT_STATUS_SERVER_DISABLED;
+		goto done;
+	}
+
+	rc = ads_search_retry_sid(ads, &msg, sid, attrs);
+
+	if (!ADS_ERR_OK(rc)) {
+		status = ads_ntstatus(rc);
+		DEBUG(1,("lookup_usergroups(sid=%s) ads_search tokenGroups: %s\n", 
+			 sid_to_string(sid_string, sid), ads_errstr(rc)));
+		goto done;
+	}
+	
+	count = ads_count_replies(ads, msg);
+	if (count != 1) {
+		status = NT_STATUS_UNSUCCESSFUL;
+		DEBUG(1,("lookup_usergroups(sid=%s) ads_search tokenGroups: "
+			 "invalid number of results (count=%d)\n", 
+			 sid_to_string(sid_string, sid), count));
+		goto done;
+	}
+
+	if (!msg) {
+		DEBUG(1,("lookup_usergroups(sid=%s) ads_search tokenGroups: NULL msg\n", 
+			 sid_to_string(sid_string, sid)));
+		status = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+	user_dn = ads_get_dn(ads, msg);
+	if (user_dn == NULL) {
+		status = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	if (!ads_pull_uint32(ads, msg, "primaryGroupID", &primary_group_rid)) {
+		DEBUG(1,("%s: No primary group for sid=%s !?\n", 
+			 domain->name, sid_to_string(sid_string, sid)));
+		goto done;
+	}
+
+	sid_copy(&primary_group, &domain->sid);
+	sid_append_rid(&primary_group, primary_group_rid);
+
+	count = ads_pull_sids(ads, mem_ctx, msg, "tokenGroups", &sids);
+
+	/* there must always be at least one group in the token, 
+	   unless we are talking to a buggy Win2k server */
+
+	/* actually this only happens when the machine account has no read
+	 * permissions on the tokenGroup attribute - gd */
+
+	if (count == 0) {
+
+		/* no tokenGroups */
+		
+		/* lookup what groups this user is a member of by DN search on
+		 * "memberOf" */
+
+		status = lookup_usergroups_memberof(domain, mem_ctx, user_dn,
+						    &primary_group,
+						    &num_groups, user_sids);
+		*p_num_groups = (uint32)num_groups;
+		if (NT_STATUS_IS_OK(status)) {
+			goto done;
+		}
+
+		/* lookup what groups this user is a member of by DN search on
+		 * "member" */
+
+		status = lookup_usergroups_member(domain, mem_ctx, user_dn, 
+						  &primary_group,
+						  &num_groups, user_sids);
+		*p_num_groups = (uint32)num_groups;
+		goto done;
+	}
+
+	*user_sids = NULL;
+	num_groups = 0;
+
+	if (!add_sid_to_array(mem_ctx, &primary_group, user_sids, &num_groups)) {
+		status = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+	
+	for (i=0;i<count;i++) {
+
+		/* ignore Builtin groups from ADS - Guenther */
+		if (sid_check_is_in_builtin(&sids[i])) {
+			continue;
+		}
+			       
+		if (!add_sid_to_array_unique(mem_ctx, &sids[i],
+					user_sids, &num_groups)) {
+			status = NT_STATUS_NO_MEMORY;
+			goto done;
+		}
+	}
+
+	*p_num_groups = (uint32)num_groups;
+	status = (*user_sids != NULL) ? NT_STATUS_OK : NT_STATUS_NO_MEMORY;
+
+	DEBUG(3,("ads lookup_usergroups (tokenGroups) succeeded for sid=%s\n",
+		 sid_to_string(sid_string, sid)));
+done:
+	ads_memfree(ads, user_dn);
+	ads_msgfree(ads, msg);
+	return status;
+}
+
+/*
+  find the members of a group, given a group rid and domain
+ */
+static NTSTATUS lookup_groupmem(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				const DOM_SID *group_sid, uint32 *num_names, 
+				DOM_SID **sid_mem, char ***names, 
+				uint32 **name_types)
+{
+	ADS_STATUS rc;
+	int count;
+	LDAPMessage *res=NULL;
+	ADS_STRUCT *ads = NULL;
+	char *ldap_exp;
+	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
+	char *sidstr;
+	char **members;
+	int i;
+	size_t num_members;
+	fstring sid_string;
+	BOOL more_values;
+	const char **attrs;
+	uint32 first_usn;
+	uint32 current_usn;
+	int num_retries = 0;
+
+	DEBUG(10,("ads: lookup_groupmem %s sid=%s\n", domain->name, 
+		  sid_string_static(group_sid)));
+
+	*num_names = 0;
+
+	ads = ads_cached_connection(domain);
+	
+	if (!ads) {
+		domain->last_status = NT_STATUS_SERVER_DISABLED;
+		goto done;
+	}
+
+	if ((sidstr = sid_binstring(group_sid)) == NULL) {
+		status = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	/* search for all members of the group */
+	if (!(ldap_exp = talloc_asprintf(mem_ctx, "(objectSid=%s)",sidstr))) {
+		SAFE_FREE(sidstr);
+		DEBUG(1, ("ads: lookup_groupmem: tallloc_asprintf for ldap_exp failed!\n"));
+		status = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+	SAFE_FREE(sidstr);
+
+	members = NULL;
+	num_members = 0;
+
+	if ((attrs = TALLOC_ARRAY(mem_ctx, const char *, 3)) == NULL) {
+		status = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+		
+	attrs[1] = talloc_strdup(mem_ctx, "usnChanged");
+	attrs[2] = NULL;
+		
+	do {
+		if (num_members == 0) 
+			attrs[0] = talloc_strdup(mem_ctx, "member");
+
+		DEBUG(10, ("Searching for attrs[0] = %s, attrs[1] = %s\n", attrs[0], attrs[1]));
+
+		rc = ads_search_retry(ads, &res, ldap_exp, attrs);
+
+		if (!ADS_ERR_OK(rc) || !res) {
+			DEBUG(1,("ads: lookup_groupmem ads_search: %s\n",
+				 ads_errstr(rc)));
+			status = ads_ntstatus(rc);
+			goto done;
+		}
+
+		count = ads_count_replies(ads, res);
+		if (count == 0)
+			break;
+
+		if (num_members == 0) {
+			if (!ads_pull_uint32(ads, res, "usnChanged", &first_usn)) {
+				DEBUG(1, ("ads: lookup_groupmem could not pull usnChanged!\n"));
+				goto done;
+			}
+		}
+
+		if (!ads_pull_uint32(ads, res, "usnChanged", &current_usn)) {
+			DEBUG(1, ("ads: lookup_groupmem could not pull usnChanged!\n"));
+			goto done;
+		}
+
+		if (first_usn != current_usn) {
+			DEBUG(5, ("ads: lookup_groupmem USN on this record changed"
+				  " - restarting search\n"));
+			if (num_retries < 5) {
+				num_retries++;
+				num_members = 0;
+				ads_msgfree(ads, res);
+				res = NULL;
+				continue;
+			} else {
+				DEBUG(5, ("ads: lookup_groupmem USN on this record changed"
+					  " - restarted search too many times, aborting!\n"));
+				status = NT_STATUS_UNSUCCESSFUL;
+				goto done;
+			}
+		}
+
+		members = ads_pull_strings_range(ads, mem_ctx, res,
+						 "member",
+						 members,
+						 &attrs[0],
+						 &num_members,
+						 &more_values);
+
+		ads_msgfree(ads, res);
+		res = NULL;
+
+		if ((members == NULL) || (num_members == 0))
+			break;
+
+	} while (more_values);
+		
+	/* now we need to turn a list of members into rids, names and name types 
+	   the problem is that the members are in the form of distinguised names
+	*/
+
+	if (num_members) {
+		(*sid_mem) = TALLOC_ZERO_ARRAY(mem_ctx, DOM_SID, num_members);
+		(*name_types) = TALLOC_ZERO_ARRAY(mem_ctx, uint32, num_members);
+		(*names) = TALLOC_ZERO_ARRAY(mem_ctx, char *, num_members);
+
+		if ((members == NULL) || (*sid_mem == NULL) ||
+		     (*name_types == NULL) || (*names == NULL)) {
+			DEBUG(1, ("talloc failed\n"));
+			status = NT_STATUS_NO_MEMORY;
+			goto done;
+		}
+	} else {
+		(*sid_mem) = NULL;
+		(*name_types) = NULL;
+		(*names) = NULL;
+	}
+ 
+	for (i=0;i<num_members;i++) {
+		uint32 name_type;
+		char *name;
+		DOM_SID sid;
+
+		if (dn_lookup(ads, mem_ctx, members[i], &name, &name_type, &sid)) {
+		    (*names)[*num_names] = name;
+		    (*name_types)[*num_names] = name_type;
+		    sid_copy(&(*sid_mem)[*num_names], &sid);
+		    (*num_names)++;
+		}
+	}	
+
+	status = NT_STATUS_OK;
+	DEBUG(3,("ads lookup_groupmem for sid=%s\n", sid_to_string(sid_string, group_sid)));
+done:
+
+	if (res) 
+		ads_msgfree(ads, res);
+
+	return status;
+}
+
+/* find the sequence number for a domain */
+static NTSTATUS sequence_number(struct winbindd_domain *domain, uint32 *seq)
+{
+	ADS_STRUCT *ads = NULL;
+	ADS_STATUS rc;
+
+	DEBUG(3,("ads: fetch sequence_number for %s\n", domain->name));
+
+	*seq = DOM_SEQUENCE_NONE;
+
+	ads = ads_cached_connection(domain);
+	
+	if (!ads) {
+		domain->last_status = NT_STATUS_SERVER_DISABLED;
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	rc = ads_USN(ads, seq);
+	
+	if (!ADS_ERR_OK(rc)) {
+	
+		/* its a dead connection, destroy it */
+
+		if (domain->private_data) {
+			ads = (ADS_STRUCT *)domain->private_data;
+			ads->is_mine = True;
+			ads_destroy(&ads);
+			ads_kdestroy("MEMORY:winbind_ccache");
+			domain->private_data = NULL;
+		}
+	}
+	return ads_ntstatus(rc);
+}
+
+/* get a list of trusted domains */
+static NTSTATUS trusted_domains(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				uint32 *num_domains,
+				char ***names,
+				char ***alt_names,
+				DOM_SID **dom_sids)
+{
+	NTSTATUS 		result = NT_STATUS_UNSUCCESSFUL;
+	struct ds_domain_trust	*domains = NULL;
+	int			count = 0;
+	int			i;
+	uint32			flags = DS_DOMAIN_IN_FOREST | DS_DOMAIN_DIRECT_OUTBOUND;
+	struct rpc_pipe_client *cli;
+
+	DEBUG(3,("ads: trusted_domains\n"));
+
+	*num_domains = 0;
+	*alt_names   = NULL;
+	*names       = NULL;
+	*dom_sids    = NULL;
+
+	result = cm_connect_netlogon(domain, &cli);
+
+	if (!NT_STATUS_IS_OK(result)) {
+		DEBUG(5, ("trusted_domains: Could not open a connection to %s "
+			  "for PIPE_NETLOGON (%s)\n", 
+			  domain->name, nt_errstr(result)));
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+	
+	if ( NT_STATUS_IS_OK(result) ) {
+		result = rpccli_ds_enum_domain_trusts(cli, mem_ctx,
+						      cli->cli->desthost, 
+						      flags, &domains,
+						      (unsigned int *)&count);
+	}
+	
+	if ( NT_STATUS_IS_OK(result) && count) {
+	
+		/* Allocate memory for trusted domain names and sids */
+
+		if ( !(*names = TALLOC_ARRAY(mem_ctx, char *, count)) ) {
+			DEBUG(0, ("trusted_domains: out of memory\n"));
+			return NT_STATUS_NO_MEMORY;
+		}
+
+		if ( !(*alt_names = TALLOC_ARRAY(mem_ctx, char *, count)) ) {
+			DEBUG(0, ("trusted_domains: out of memory\n"));
+			return NT_STATUS_NO_MEMORY;
+		}
+
+		if ( !(*dom_sids = TALLOC_ARRAY(mem_ctx, DOM_SID, count)) ) {
+			DEBUG(0, ("trusted_domains: out of memory\n"));
+			return NT_STATUS_NO_MEMORY;
+		}
+
+		/* Copy across names and sids */
+
+		for (i = 0; i < count; i++) {
+			(*names)[i] = domains[i].netbios_domain;
+			(*alt_names)[i] = domains[i].dns_domain;
+
+			sid_copy(&(*dom_sids)[i], &domains[i].sid);
+		}
+
+		*num_domains = count;	
+	}
+
+	return result;
+}
+
+/* the ADS backend methods are exposed via this structure */
+struct winbindd_methods ads_methods = {
+	True,
+	query_user_list,
+	enum_dom_groups,
+	enum_local_groups,
+	msrpc_name_to_sid,
+	msrpc_sid_to_name,
+	msrpc_rids_to_names,
+	query_user,
+	lookup_usergroups,
+	msrpc_lookup_useraliases,
+	lookup_groupmem,
+	sequence_number,
+	msrpc_lockout_policy,
+	msrpc_password_policy,
+	trusted_domains,
+};
+
+#endif

Copied: branches/samba/upstream/source/nsswitch/winbindd_async.c (from rev 1928, branches/samba/upstream/source/nsswitch/winbindd_async.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/winbindd_async.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/winbindd_async.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,1632 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   Async helpers for blocking functions
+
+   Copyright (C) Volker Lendecke 2005
+   Copyright (C) Gerald Carter 2006
+   
+   The helpers always consist of three functions: 
+
+   * A request setup function that takes the necessary parameters together
+     with a continuation function that is to be called upon completion
+
+   * A private continuation function that is internal only. This is to be
+     called by the lower-level functions in do_async(). Its only task is to
+     properly call the continuation function named above.
+
+   * A worker function that is called inside the appropriate child process.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "winbindd.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_WINBIND
+
+struct do_async_state {
+	TALLOC_CTX *mem_ctx;
+	struct winbindd_request request;
+	struct winbindd_response response;
+	void (*cont)(TALLOC_CTX *mem_ctx,
+		     BOOL success,
+		     struct winbindd_response *response,
+		     void *c, void *private_data);
+	void *c, *private_data;
+};
+
+static void do_async_recv(void *private_data, BOOL success)
+{
+	struct do_async_state *state =
+		talloc_get_type_abort(private_data, struct do_async_state);
+
+	state->cont(state->mem_ctx, success, &state->response,
+		    state->c, state->private_data);
+}
+
+static void do_async(TALLOC_CTX *mem_ctx, struct winbindd_child *child,
+		     const struct winbindd_request *request,
+		     void (*cont)(TALLOC_CTX *mem_ctx, BOOL success,
+				  struct winbindd_response *response,
+				  void *c, void *private_data),
+		     void *c, void *private_data)
+{
+	struct do_async_state *state;
+
+	state = TALLOC_ZERO_P(mem_ctx, struct do_async_state);
+	if (state == NULL) {
+		DEBUG(0, ("talloc failed\n"));
+		cont(mem_ctx, False, NULL, c, private_data);
+		return;
+	}
+
+	state->mem_ctx = mem_ctx;
+	state->request = *request;
+	state->request.length = sizeof(state->request);
+	state->cont = cont;
+	state->c = c;
+	state->private_data = private_data;
+
+	async_request(mem_ctx, child, &state->request,
+		      &state->response, do_async_recv, state);
+}
+
+void do_async_domain(TALLOC_CTX *mem_ctx, struct winbindd_domain *domain,
+		     const struct winbindd_request *request,
+		     void (*cont)(TALLOC_CTX *mem_ctx, BOOL success,
+				  struct winbindd_response *response,
+				  void *c, void *private_data),
+		     void *c, void *private_data)
+{
+	struct do_async_state *state;
+
+	state = TALLOC_ZERO_P(mem_ctx, struct do_async_state);
+	if (state == NULL) {
+		DEBUG(0, ("talloc failed\n"));
+		cont(mem_ctx, False, NULL, c, private_data);
+		return;
+	}
+
+	state->mem_ctx = mem_ctx;
+	state->request = *request;
+	state->request.length = sizeof(state->request);
+	state->cont = cont;
+	state->c = c;
+	state->private_data = private_data;
+
+	async_domain_request(mem_ctx, domain, &state->request,
+			     &state->response, do_async_recv, state);
+}
+
+static void winbindd_set_mapping_recv(TALLOC_CTX *mem_ctx, BOOL success,
+				   struct winbindd_response *response,
+				   void *c, void *private_data)
+{
+	void (*cont)(void *priv, BOOL succ) = (void (*)(void *, BOOL))c;
+
+	if (!success) {
+		DEBUG(5, ("Could not trigger idmap_set_mapping\n"));
+		cont(private_data, False);
+		return;
+	}
+
+	if (response->result != WINBINDD_OK) {
+		DEBUG(5, ("idmap_set_mapping returned an error\n"));
+		cont(private_data, False);
+		return;
+	}
+
+	cont(private_data, True);
+}
+
+void winbindd_set_mapping_async(TALLOC_CTX *mem_ctx, const struct id_map *map,
+			     void (*cont)(void *private_data, BOOL success),
+			     void *private_data)
+{
+	struct winbindd_request request;
+	ZERO_STRUCT(request);
+	request.cmd = WINBINDD_DUAL_SET_MAPPING;
+	request.data.dual_idmapset.id = map->xid.id;
+	request.data.dual_idmapset.type = map->xid.type;
+	sid_to_string(request.data.dual_idmapset.sid, map->sid);
+
+	do_async(mem_ctx, idmap_child(), &request, winbindd_set_mapping_recv,
+		 (void *)cont, private_data);
+}
+
+enum winbindd_result winbindd_dual_set_mapping(struct winbindd_domain *domain,
+					    struct winbindd_cli_state *state)
+{
+	struct id_map map;
+	DOM_SID sid;
+	NTSTATUS result;
+
+	DEBUG(3, ("[%5lu]: dual_idmapset\n", (unsigned long)state->pid));
+
+	if (!string_to_sid(&sid, state->request.data.dual_idmapset.sid))
+		return WINBINDD_ERROR;
+
+	map.sid = &sid;
+	map.xid.id = state->request.data.dual_idmapset.id;
+	map.xid.type = state->request.data.dual_idmapset.type;
+	map.status = ID_MAPPED;
+
+	result = idmap_set_mapping(&map);
+	return NT_STATUS_IS_OK(result) ? WINBINDD_OK : WINBINDD_ERROR;
+}
+
+static void winbindd_set_hwm_recv(TALLOC_CTX *mem_ctx, BOOL success,
+				   struct winbindd_response *response,
+				   void *c, void *private_data)
+{
+	void (*cont)(void *priv, BOOL succ) = (void (*)(void *, BOOL))c;
+
+	if (!success) {
+		DEBUG(5, ("Could not trigger idmap_set_hwm\n"));
+		cont(private_data, False);
+		return;
+	}
+
+	if (response->result != WINBINDD_OK) {
+		DEBUG(5, ("idmap_set_hwm returned an error\n"));
+		cont(private_data, False);
+		return;
+	}
+
+	cont(private_data, True);
+}
+
+void winbindd_set_hwm_async(TALLOC_CTX *mem_ctx, const struct unixid *xid,
+			     void (*cont)(void *private_data, BOOL success),
+			     void *private_data)
+{
+	struct winbindd_request request;
+	ZERO_STRUCT(request);
+	request.cmd = WINBINDD_DUAL_SET_HWM;
+	request.data.dual_idmapset.id = xid->id;
+	request.data.dual_idmapset.type = xid->type;
+
+	do_async(mem_ctx, idmap_child(), &request, winbindd_set_hwm_recv,
+		 (void *)cont, private_data);
+}
+
+enum winbindd_result winbindd_dual_set_hwm(struct winbindd_domain *domain,
+					    struct winbindd_cli_state *state)
+{
+	struct unixid xid;
+	NTSTATUS result;
+
+	DEBUG(3, ("[%5lu]: dual_set_hwm\n", (unsigned long)state->pid));
+
+	xid.id = state->request.data.dual_idmapset.id;
+	xid.type = state->request.data.dual_idmapset.type;
+
+	switch (xid.type) {
+	case ID_TYPE_UID:
+		result = idmap_set_uid_hwm(&xid);
+		break;
+	case ID_TYPE_GID:
+		result = idmap_set_gid_hwm(&xid);
+		break;
+	default:
+		return WINBINDD_ERROR;
+	}
+	return NT_STATUS_IS_OK(result) ? WINBINDD_OK : WINBINDD_ERROR;
+}
+
+static void winbindd_sids2xids_recv(TALLOC_CTX *mem_ctx, BOOL success,
+			       struct winbindd_response *response,
+			       void *c, void *private_data)
+{
+	void (*cont)(void *priv, BOOL succ, void *, int) =
+		(void (*)(void *, BOOL, void *, int))c;
+
+	if (!success) {
+		DEBUG(5, ("Could not trigger sids2xids\n"));
+		cont(private_data, False, NULL, 0);
+		return;
+	}
+
+	if (response->result != WINBINDD_OK) {
+		DEBUG(5, ("sids2xids returned an error\n"));
+		cont(private_data, False, NULL, 0);
+		return;
+	}
+
+	cont(private_data, True, response->extra_data.data, response->length - sizeof(response));
+}
+			 
+void winbindd_sids2xids_async(TALLOC_CTX *mem_ctx, void *sids, int size,
+			 void (*cont)(void *private_data, BOOL success, void *data, int len),
+			 void *private_data)
+{
+	struct winbindd_request request;
+	ZERO_STRUCT(request);
+	request.cmd = WINBINDD_DUAL_SIDS2XIDS;
+	request.extra_data.data = (char *)sids;
+	request.extra_len = size;
+	do_async(mem_ctx, idmap_child(), &request, winbindd_sids2xids_recv,
+		 (void *)cont, private_data);
+}
+
+enum winbindd_result winbindd_dual_sids2xids(struct winbindd_domain *domain,
+					   struct winbindd_cli_state *state)
+{
+	DOM_SID *sids;
+	struct unixid *xids;
+	struct id_map **ids;
+	NTSTATUS result;
+	int num, i;
+
+	DEBUG(3, ("[%5lu]: sids to unix ids\n", (unsigned long)state->pid));
+
+	if (state->request.extra_len == 0) {
+		DEBUG(0, ("Invalid buffer size!\n"));
+		return WINBINDD_ERROR;
+	}
+
+	sids = (DOM_SID *)state->request.extra_data.data;
+	num = state->request.extra_len / sizeof(DOM_SID);
+
+	ids = TALLOC_ZERO_ARRAY(state->mem_ctx, struct id_map *, num + 1);
+	if ( ! ids) {
+		DEBUG(0, ("Out of memory!\n"));
+		return WINBINDD_ERROR;
+	}
+	for (i = 0; i < num; i++) {
+		ids[i] = TALLOC_P(ids, struct id_map);
+		if ( ! ids[i]) {
+			DEBUG(0, ("Out of memory!\n"));
+			talloc_free(ids);
+			return WINBINDD_ERROR;
+		}
+		ids[i]->sid = &sids[i];
+	}
+
+	result = idmap_sids_to_unixids(ids);
+
+	if (NT_STATUS_IS_OK(result)) {
+
+		xids = SMB_MALLOC_ARRAY(struct unixid, num);
+		if ( ! xids) {
+			DEBUG(0, ("Out of memory!\n"));
+			talloc_free(ids);
+			return WINBINDD_ERROR;
+		}
+		
+		for (i = 0; i < num; i++) {
+			if (ids[i]->status == ID_MAPPED) {
+				xids[i].type = ids[i]->xid.type;
+				xids[i].id = ids[i]->xid.id;
+			} else {
+				xids[i].type = -1;
+			}
+		}
+
+		state->response.length = sizeof(state->response) + (sizeof(struct unixid) * num);
+		state->response.extra_data.data = xids;
+
+	} else {
+		DEBUG (2, ("idmap_sids_to_unixids returned an error: 0x%08x\n", NT_STATUS_V(result)));
+		talloc_free(ids);
+		return WINBINDD_ERROR;
+	}
+
+	talloc_free(ids);
+	return WINBINDD_OK;
+}
+
+static void winbindd_sid2uid_recv(TALLOC_CTX *mem_ctx, BOOL success,
+			       struct winbindd_response *response,
+			       void *c, void *private_data)
+{
+	void (*cont)(void *priv, BOOL succ, uid_t uid) =
+		(void (*)(void *, BOOL, uid_t))c;
+
+	if (!success) {
+		DEBUG(5, ("Could not trigger sid2uid\n"));
+		cont(private_data, False, 0);
+		return;
+	}
+
+	if (response->result != WINBINDD_OK) {
+		DEBUG(5, ("sid2uid returned an error\n"));
+		cont(private_data, False, 0);
+		return;
+	}
+
+	cont(private_data, True, response->data.uid);
+}
+			 
+void winbindd_sid2uid_async(TALLOC_CTX *mem_ctx, const DOM_SID *sid,
+			 void (*cont)(void *private_data, BOOL success, uid_t uid),
+			 void *private_data)
+{
+	struct winbindd_request request;
+	ZERO_STRUCT(request);
+	request.cmd = WINBINDD_DUAL_SID2UID;
+	sid_to_string(request.data.dual_sid2id.sid, sid);
+	do_async(mem_ctx, idmap_child(), &request, winbindd_sid2uid_recv,
+		 (void *)cont, private_data);
+}
+
+enum winbindd_result winbindd_dual_sid2uid(struct winbindd_domain *domain,
+					   struct winbindd_cli_state *state)
+{
+	DOM_SID sid;
+	NTSTATUS result;
+
+	DEBUG(3, ("[%5lu]: sid to uid %s\n", (unsigned long)state->pid,
+		  state->request.data.dual_sid2id.sid));
+
+	if (!string_to_sid(&sid, state->request.data.dual_sid2id.sid)) {
+		DEBUG(1, ("Could not get convert sid %s from string\n",
+			  state->request.data.dual_sid2id.sid));
+		return WINBINDD_ERROR;
+	}
+
+	/* Find uid for this sid and return it, possibly ask the slow remote idmap */
+
+	result = idmap_sid_to_uid(&sid, &(state->response.data.uid));
+
+	return NT_STATUS_IS_OK(result) ? WINBINDD_OK : WINBINDD_ERROR;
+}
+
+#if 0	/* not used */
+static void uid2name_recv(TALLOC_CTX *mem_ctx, BOOL success,
+			  struct winbindd_response *response,
+			  void *c, void *private_data);
+
+void winbindd_uid2name_async(TALLOC_CTX *mem_ctx, uid_t uid,
+			     void (*cont)(void *private_data, BOOL success,
+					  const char *name),
+			     void *private_data)
+{
+	struct winbindd_request request;
+	ZERO_STRUCT(request);
+	request.cmd = WINBINDD_DUAL_UID2NAME;
+	request.data.uid = uid;
+	do_async(mem_ctx, idmap_child(), &request, uid2name_recv,
+		 (void *)cont, private_data);
+}
+#endif	/* not used */
+
+enum winbindd_result winbindd_dual_uid2name(struct winbindd_domain *domain,
+					    struct winbindd_cli_state *state)
+{
+	struct passwd *pw;
+
+	DEBUG(3, ("[%5lu]: uid2name %lu\n", (unsigned long)state->pid, 
+		  (unsigned long)state->request.data.uid));
+
+	pw = getpwuid(state->request.data.uid);
+	if (pw == NULL) {
+		DEBUG(5, ("User %lu not found\n",
+			  (unsigned long)state->request.data.uid));
+		return WINBINDD_ERROR;
+	}
+
+	fstrcpy(state->response.data.name.name, pw->pw_name);
+	return WINBINDD_OK;
+}
+
+#if 0	/* not used */
+static void uid2name_recv(TALLOC_CTX *mem_ctx, BOOL success,
+			  struct winbindd_response *response,
+			  void *c, void *private_data)
+{
+	void (*cont)(void *priv, BOOL succ, const char *name) =
+		(void (*)(void *, BOOL, const char *))c;
+
+	if (!success) {
+		DEBUG(5, ("Could not trigger uid2name\n"));
+		cont(private_data, False, NULL);
+		return;
+	}
+
+	if (response->result != WINBINDD_OK) {
+		DEBUG(5, ("uid2name returned an error\n"));
+		cont(private_data, False, NULL);
+		return;
+	}
+
+	cont(private_data, True, response->data.name.name);
+}
+
+static void name2uid_recv(TALLOC_CTX *mem_ctx, BOOL success,
+			  struct winbindd_response *response,
+			  void *c, void *private_data);
+
+static void winbindd_name2uid_async(TALLOC_CTX *mem_ctx, const char *name,
+				    void (*cont)(void *private_data, BOOL success,
+						 uid_t uid),
+				    void *private_data)
+{
+	struct winbindd_request request;
+	ZERO_STRUCT(request);
+	request.cmd = WINBINDD_DUAL_NAME2UID;
+	fstrcpy(request.data.username, name);
+	do_async(mem_ctx, idmap_child(), &request, name2uid_recv,
+		 (void *)cont, private_data);
+}
+#endif	/* not used */
+
+enum winbindd_result winbindd_dual_name2uid(struct winbindd_domain *domain,
+					    struct winbindd_cli_state *state)
+{
+	struct passwd *pw;
+
+	/* Ensure null termination */
+	state->request.data.username
+		[sizeof(state->request.data.username)-1] = '\0';
+
+	DEBUG(3, ("[%5lu]: name2uid %s\n", (unsigned long)state->pid, 
+		  state->request.data.username));
+
+	pw = getpwnam(state->request.data.username);
+	if (pw == NULL) {
+		return WINBINDD_ERROR;
+	}
+
+	state->response.data.uid = pw->pw_uid;
+	return WINBINDD_OK;
+}
+
+#if 0	/* not used */
+static void name2uid_recv(TALLOC_CTX *mem_ctx, BOOL success,
+			  struct winbindd_response *response,
+			  void *c, void *private_data)
+{
+	void (*cont)(void *priv, BOOL succ, uid_t uid) =
+		(void (*)(void *, BOOL, uid_t))c;
+
+	if (!success) {
+		DEBUG(5, ("Could not trigger name2uid\n"));
+		cont(private_data, False, 0);
+		return;
+	}
+
+	if (response->result != WINBINDD_OK) {
+		DEBUG(5, ("name2uid returned an error\n"));
+		cont(private_data, False, 0);
+		return;
+	}
+
+	cont(private_data, True, response->data.uid);
+}
+#endif	/* not used */
+
+static void winbindd_sid2gid_recv(TALLOC_CTX *mem_ctx, BOOL success,
+			       struct winbindd_response *response,
+			       void *c, void *private_data)
+{
+	void (*cont)(void *priv, BOOL succ, gid_t gid) =
+		(void (*)(void *, BOOL, gid_t))c;
+
+	if (!success) {
+		DEBUG(5, ("Could not trigger sid2gid\n"));
+		cont(private_data, False, 0);
+		return;
+	}
+
+	if (response->result != WINBINDD_OK) {
+		DEBUG(5, ("sid2gid returned an error\n"));
+		cont(private_data, False, 0);
+		return;
+	}
+
+	cont(private_data, True, response->data.gid);
+}
+			 
+void winbindd_sid2gid_async(TALLOC_CTX *mem_ctx, const DOM_SID *sid,
+			 void (*cont)(void *private_data, BOOL success, gid_t gid),
+			 void *private_data)
+{
+	struct winbindd_request request;
+	ZERO_STRUCT(request);
+	request.cmd = WINBINDD_DUAL_SID2GID;
+	sid_to_string(request.data.dual_sid2id.sid, sid);
+
+	DEBUG(7,("winbindd_sid2gid_async: Resolving %s to a gid\n", 
+		request.data.dual_sid2id.sid));
+
+	do_async(mem_ctx, idmap_child(), &request, winbindd_sid2gid_recv,
+		 (void *)cont, private_data);
+}
+
+enum winbindd_result winbindd_dual_sid2gid(struct winbindd_domain *domain,
+					   struct winbindd_cli_state *state)
+{
+	DOM_SID sid;
+	NTSTATUS result;
+
+	DEBUG(3, ("[%5lu]: sid to gid %s\n", (unsigned long)state->pid,
+		  state->request.data.dual_sid2id.sid));
+
+	if (!string_to_sid(&sid, state->request.data.dual_sid2id.sid)) {
+		DEBUG(1, ("Could not get convert sid %s from string\n",
+			  state->request.data.dual_sid2id.sid));
+		return WINBINDD_ERROR;
+	}
+
+	/* Find gid for this sid and return it, possibly ask the slow remote idmap */
+
+	result = idmap_sid_to_gid(&sid, &state->response.data.gid);
+	
+	DEBUG(10, ("winbindd_dual_sid2gid: 0x%08x - %s - %u\n", NT_STATUS_V(result), sid_string_static(&sid), state->response.data.gid));
+
+	return NT_STATUS_IS_OK(result) ? WINBINDD_OK : WINBINDD_ERROR;
+}
+
+static void gid2name_recv(TALLOC_CTX *mem_ctx, BOOL success,
+			  struct winbindd_response *response,
+			  void *c, void *private_data)
+{
+	void (*cont)(void *priv, BOOL succ, const char *name) =
+		(void (*)(void *, BOOL, const char *))c;
+
+	if (!success) {
+		DEBUG(5, ("Could not trigger gid2name\n"));
+		cont(private_data, False, NULL);
+		return;
+	}
+
+	if (response->result != WINBINDD_OK) {
+		DEBUG(5, ("gid2name returned an error\n"));
+		cont(private_data, False, NULL);
+		return;
+	}
+
+	cont(private_data, True, response->data.name.name);
+}
+
+void winbindd_gid2name_async(TALLOC_CTX *mem_ctx, gid_t gid,
+			     void (*cont)(void *private_data, BOOL success,
+					  const char *name),
+			     void *private_data)
+{
+	struct winbindd_request request;
+	ZERO_STRUCT(request);
+	request.cmd = WINBINDD_DUAL_GID2NAME;
+	request.data.gid = gid;
+	do_async(mem_ctx, idmap_child(), &request, gid2name_recv,
+		 (void *)cont, private_data);
+}
+
+enum winbindd_result winbindd_dual_gid2name(struct winbindd_domain *domain,
+					    struct winbindd_cli_state *state)
+{
+	struct group *gr;
+
+	DEBUG(3, ("[%5lu]: gid2name %lu\n", (unsigned long)state->pid, 
+		  (unsigned long)state->request.data.gid));
+
+	gr = getgrgid(state->request.data.gid);
+	if (gr == NULL)
+		return WINBINDD_ERROR;
+
+	fstrcpy(state->response.data.name.name, gr->gr_name);
+	return WINBINDD_OK;
+}
+
+#if 0	/* not used */
+static void name2gid_recv(TALLOC_CTX *mem_ctx, BOOL success,
+			  struct winbindd_response *response,
+			  void *c, void *private_data);
+
+static void winbindd_name2gid_async(TALLOC_CTX *mem_ctx, const char *name,
+				    void (*cont)(void *private_data, BOOL success,
+						 gid_t gid),
+				    void *private_data)
+{
+	struct winbindd_request request;
+	ZERO_STRUCT(request);
+	request.cmd = WINBINDD_DUAL_NAME2GID;
+	fstrcpy(request.data.groupname, name);
+	do_async(mem_ctx, idmap_child(), &request, name2gid_recv,
+		 (void *)cont, private_data);
+}
+#endif	/* not used */
+
+enum winbindd_result winbindd_dual_name2gid(struct winbindd_domain *domain,
+					    struct winbindd_cli_state *state)
+{
+	struct group *gr;
+
+	/* Ensure null termination */
+	state->request.data.groupname
+		[sizeof(state->request.data.groupname)-1] = '\0';
+
+	DEBUG(3, ("[%5lu]: name2gid %s\n", (unsigned long)state->pid, 
+		  state->request.data.groupname));
+
+	gr = getgrnam(state->request.data.groupname);
+	if (gr == NULL) {
+		return WINBINDD_ERROR;
+	}
+
+	state->response.data.gid = gr->gr_gid;
+	return WINBINDD_OK;
+}
+
+#if 0	/* not used */
+static void name2gid_recv(TALLOC_CTX *mem_ctx, BOOL success,
+			  struct winbindd_response *response,
+			  void *c, void *private_data)
+{
+	void (*cont)(void *priv, BOOL succ, gid_t gid) =
+		(void (*)(void *, BOOL, gid_t))c;
+
+	if (!success) {
+		DEBUG(5, ("Could not trigger name2gid\n"));
+		cont(private_data, False, 0);
+		return;
+	}
+
+	if (response->result != WINBINDD_OK) {
+		DEBUG(5, ("name2gid returned an error\n"));
+		cont(private_data, False, 0);
+		return;
+	}
+
+	cont(private_data, True, response->data.gid);
+}
+#endif	/* not used */
+
+static void lookupsid_recv(TALLOC_CTX *mem_ctx, BOOL success,
+			   struct winbindd_response *response,
+			   void *c, void *private_data)
+{
+	void (*cont)(void *priv, BOOL succ, const char *dom_name,
+		     const char *name, enum lsa_SidType type) =
+		(void (*)(void *, BOOL, const char *, const char *,
+			  enum lsa_SidType))c;
+
+	if (!success) {
+		DEBUG(5, ("Could not trigger lookupsid\n"));
+		cont(private_data, False, NULL, NULL, SID_NAME_UNKNOWN);
+		return;
+	}
+
+	if (response->result != WINBINDD_OK) {
+		DEBUG(5, ("lookupsid returned an error\n"));
+		cont(private_data, False, NULL, NULL, SID_NAME_UNKNOWN);
+		return;
+	}
+
+	cont(private_data, True, response->data.name.dom_name,
+	     response->data.name.name,
+	     (enum lsa_SidType)response->data.name.type);
+}
+
+void winbindd_lookupsid_async(TALLOC_CTX *mem_ctx, const DOM_SID *sid,
+			      void (*cont)(void *private_data, BOOL success,
+					   const char *dom_name,
+					   const char *name,
+					   enum lsa_SidType type),
+			      void *private_data)
+{
+	struct winbindd_domain *domain;
+	struct winbindd_request request;
+
+	domain = find_lookup_domain_from_sid(sid);
+	if (domain == NULL) {
+		DEBUG(5, ("Could not find domain for sid %s\n",
+			  sid_string_static(sid)));
+		cont(private_data, False, NULL, NULL, SID_NAME_UNKNOWN);
+		return;
+	}
+
+	ZERO_STRUCT(request);
+	request.cmd = WINBINDD_LOOKUPSID;
+	fstrcpy(request.data.sid, sid_string_static(sid));
+
+	do_async_domain(mem_ctx, domain, &request, lookupsid_recv,
+			(void *)cont, private_data);
+}
+
+enum winbindd_result winbindd_dual_lookupsid(struct winbindd_domain *domain,
+					     struct winbindd_cli_state *state)
+{
+	enum lsa_SidType type;
+	DOM_SID sid;
+	char *name;
+	char *dom_name;
+
+	/* Ensure null termination */
+	state->request.data.sid[sizeof(state->request.data.sid)-1]='\0';
+
+	DEBUG(3, ("[%5lu]: lookupsid %s\n", (unsigned long)state->pid, 
+		  state->request.data.sid));
+
+	/* Lookup sid from PDC using lsa_lookup_sids() */
+
+	if (!string_to_sid(&sid, state->request.data.sid)) {
+		DEBUG(5, ("%s not a SID\n", state->request.data.sid));
+		return WINBINDD_ERROR;
+	}
+
+	/* Lookup the sid */
+
+	if (!winbindd_lookup_name_by_sid(state->mem_ctx, &sid, &dom_name, &name,
+					 &type)) {
+		TALLOC_FREE(dom_name);
+		TALLOC_FREE(name);
+		return WINBINDD_ERROR;
+	}
+
+	fstrcpy(state->response.data.name.dom_name, dom_name);
+	fstrcpy(state->response.data.name.name, name);
+	state->response.data.name.type = type;
+
+	TALLOC_FREE(dom_name);
+	TALLOC_FREE(name);
+	return WINBINDD_OK;
+}
+
+/********************************************************************
+ This is the second callback after contacting the forest root
+********************************************************************/
+
+struct lookupname_state {
+	char *dom_name;
+	char *name;
+	void *caller_private_data;
+};
+
+static void lookupname_recv2(TALLOC_CTX *mem_ctx, BOOL success,
+			    struct winbindd_response *response,
+			    void *c, void *private_data)
+{
+	void (*cont)(void *priv, BOOL succ, const DOM_SID *sid,
+		     enum lsa_SidType type) =
+		(void (*)(void *, BOOL, const DOM_SID *, enum lsa_SidType))c;
+	DOM_SID sid;
+	struct lookupname_state *s = talloc_get_type_abort(private_data, struct lookupname_state);
+
+	if (!success) {
+		DEBUG(5, ("Could not trigger lookup_name\n"));
+		cont(s->caller_private_data, False, NULL, SID_NAME_UNKNOWN);
+		return;
+	}
+
+	if (response->result != WINBINDD_OK) {
+		DEBUG(5, ("lookup_name returned an error\n"));
+		cont(s->caller_private_data, False, NULL, SID_NAME_UNKNOWN);
+		return;
+	}
+
+	if (!string_to_sid(&sid, response->data.sid.sid)) {
+		DEBUG(0, ("Could not convert string %s to sid\n",
+			  response->data.sid.sid));
+		cont(s->caller_private_data, False, NULL, SID_NAME_UNKNOWN);
+		return;
+	}
+
+	cont(s->caller_private_data, True, &sid,
+	     (enum lsa_SidType)response->data.sid.type);
+}
+
+/********************************************************************
+ This is the first callback after contacting our own domain 
+********************************************************************/
+
+static void lookupname_recv(TALLOC_CTX *mem_ctx, BOOL success,
+			    struct winbindd_response *response,
+			    void *c, void *private_data)
+{
+	void (*cont)(void *priv, BOOL succ, const DOM_SID *sid,
+		     enum lsa_SidType type) =
+		(void (*)(void *, BOOL, const DOM_SID *, enum lsa_SidType))c;
+	DOM_SID sid;
+	struct lookupname_state *s = talloc_get_type_abort(private_data, struct lookupname_state);
+
+	if (!success) {
+		DEBUG(5, ("lookupname_recv: lookup_name() failed!\n"));
+		cont(s->caller_private_data, False, NULL, SID_NAME_UNKNOWN);
+		return;
+	}
+
+	if (response->result != WINBINDD_OK) {
+		/* Try again using the forest root */
+		struct winbindd_domain *root_domain = find_root_domain();
+		struct winbindd_request request;
+
+		if ( !root_domain ) {
+			DEBUG(5,("lookupname_recv: unable to determine forest root\n"));
+			cont(s->caller_private_data, False, NULL, SID_NAME_UNKNOWN);
+			return;
+		}
+
+		ZERO_STRUCT(request);
+		request.cmd = WINBINDD_LOOKUPNAME;
+		fstrcpy(request.data.name.dom_name, s->dom_name);
+		fstrcpy(request.data.name.name, s->name);
+
+		do_async_domain(mem_ctx, root_domain, &request, lookupname_recv2,
+				(void *)cont, s);
+
+		return;
+	}
+
+	if (!string_to_sid(&sid, response->data.sid.sid)) {
+		DEBUG(0, ("Could not convert string %s to sid\n",
+			  response->data.sid.sid));
+		cont(s->caller_private_data, False, NULL, SID_NAME_UNKNOWN);
+		return;
+	}
+
+	cont(s->caller_private_data, True, &sid,
+	     (enum lsa_SidType)response->data.sid.type);
+}
+
+/********************************************************************
+ The lookup name call first contacts a DC in its own domain
+ and fallbacks to contact a DC in the forest in our domain doesn't
+ know the name.
+********************************************************************/
+
+void winbindd_lookupname_async(TALLOC_CTX *mem_ctx,
+			       const char *dom_name, const char *name,
+			       void (*cont)(void *private_data, BOOL success,
+					    const DOM_SID *sid,
+					    enum lsa_SidType type),
+			       void *private_data)
+{
+	struct winbindd_request request;
+	struct winbindd_domain *domain;
+	struct lookupname_state *s;
+
+	if ( (domain = find_lookup_domain_from_name(dom_name)) == NULL ) {
+		DEBUG(5, ("Could not find domain for name %s\n", dom_name));
+		cont(private_data, False, NULL, SID_NAME_UNKNOWN);
+		return;
+	}
+
+	ZERO_STRUCT(request);
+	request.cmd = WINBINDD_LOOKUPNAME;
+	fstrcpy(request.data.name.dom_name, dom_name);
+	fstrcpy(request.data.name.name, name);
+
+	if ( (s = TALLOC_ZERO_P(mem_ctx, struct lookupname_state)) == NULL ) {
+		DEBUG(0, ("winbindd_lookupname_async: talloc failed\n"));
+		cont(private_data, False, NULL, SID_NAME_UNKNOWN);
+		return;
+	}
+
+	s->dom_name = talloc_strdup( s, dom_name );
+	s->name     = talloc_strdup( s, name );
+	if (!s->dom_name || !s->name) {
+		cont(private_data, False, NULL, SID_NAME_UNKNOWN);
+		return;
+	}
+
+	s->caller_private_data = private_data;
+
+	do_async_domain(mem_ctx, domain, &request, lookupname_recv,
+			(void *)cont, s);
+}
+
+enum winbindd_result winbindd_dual_lookupname(struct winbindd_domain *domain,
+					      struct winbindd_cli_state *state)
+{
+	enum lsa_SidType type;
+	char *name_domain, *name_user;
+	DOM_SID sid;
+	char *p;
+
+	/* Ensure null termination */
+	state->request.data.name.dom_name[sizeof(state->request.data.name.dom_name)-1]='\0';
+
+	/* Ensure null termination */
+	state->request.data.name.name[sizeof(state->request.data.name.name)-1]='\0';
+
+	/* cope with the name being a fully qualified name */
+	p = strstr(state->request.data.name.name, lp_winbind_separator());
+	if (p) {
+		*p = 0;
+		name_domain = state->request.data.name.name;
+		name_user = p+1;
+	} else {
+		name_domain = state->request.data.name.dom_name;
+		name_user = state->request.data.name.name;
+	}
+
+	DEBUG(3, ("[%5lu]: lookupname %s%s%s\n", (unsigned long)state->pid,
+		  name_domain, lp_winbind_separator(), name_user));
+
+	/* Lookup name from DC using lsa_lookup_names() */
+	if (!winbindd_lookup_sid_by_name(state->mem_ctx, domain, name_domain,
+					 name_user, &sid, &type)) {
+		return WINBINDD_ERROR;
+	}
+
+	sid_to_string(state->response.data.sid.sid, &sid);
+	state->response.data.sid.type = type;
+
+	return WINBINDD_OK;
+}
+
+BOOL print_sidlist(TALLOC_CTX *mem_ctx, const DOM_SID *sids,
+		   size_t num_sids, char **result, ssize_t *len)
+{
+	size_t i;
+	size_t buflen = 0;
+
+	*len = 0;
+	*result = NULL;
+	for (i=0; i<num_sids; i++) {
+		sprintf_append(mem_ctx, result, len, &buflen,
+			       "%s\n", sid_string_static(&sids[i]));
+	}
+
+	if ((num_sids != 0) && (*result == NULL)) {
+		return False;
+	}
+
+	return True;
+}
+
+static BOOL parse_sidlist(TALLOC_CTX *mem_ctx, char *sidstr,
+			  DOM_SID **sids, size_t *num_sids)
+{
+	char *p, *q;
+
+	p = sidstr;
+	if (p == NULL)
+		return False;
+
+	while (p[0] != '\0') {
+		DOM_SID sid;
+		q = strchr(p, '\n');
+		if (q == NULL) {
+			DEBUG(0, ("Got invalid sidstr: %s\n", p));
+			return False;
+		}
+		*q = '\0';
+		q += 1;
+		if (!string_to_sid(&sid, p)) {
+			DEBUG(0, ("Could not parse sid %s\n", p));
+			return False;
+		}
+		if (!add_sid_to_array(mem_ctx, &sid, sids, num_sids)) {
+			return False;
+		}
+		p = q;
+	}
+	return True;
+}
+
+static BOOL parse_ridlist(TALLOC_CTX *mem_ctx, char *ridstr,
+			  uint32 **rids, size_t *num_rids)
+{
+	char *p;
+
+	p = ridstr;
+	if (p == NULL)
+		return False;
+
+	while (p[0] != '\0') {
+		uint32 rid;
+		char *q;
+		rid = strtoul(p, &q, 10);
+		if (*q != '\n') {
+			DEBUG(0, ("Got invalid ridstr: %s\n", p));
+			return False;
+		}
+		p = q+1;
+		ADD_TO_ARRAY(mem_ctx, uint32, rid, rids, num_rids);
+	}
+	return True;
+}
+
+enum winbindd_result winbindd_dual_lookuprids(struct winbindd_domain *domain,
+					      struct winbindd_cli_state *state)
+{
+	uint32 *rids = NULL;
+	size_t i, buflen, num_rids = 0;
+	ssize_t len;
+	DOM_SID domain_sid;
+	char *domain_name;
+	char **names;
+	enum lsa_SidType *types;
+	NTSTATUS status;
+	char *result;
+
+	DEBUG(10, ("Looking up RIDs for domain %s (%s)\n",
+		   state->request.domain_name,
+		   state->request.data.sid));
+
+	if (!parse_ridlist(state->mem_ctx, state->request.extra_data.data,
+			   &rids, &num_rids)) {
+		DEBUG(5, ("Could not parse ridlist\n"));
+		return WINBINDD_ERROR;
+	}
+
+	if (!string_to_sid(&domain_sid, state->request.data.sid)) {
+		DEBUG(5, ("Could not parse domain sid %s\n",
+			  state->request.data.sid));
+		return WINBINDD_ERROR;
+	}
+
+	status = domain->methods->rids_to_names(domain, state->mem_ctx,
+						&domain_sid, rids, num_rids,
+						&domain_name,
+						&names, &types);
+
+	if (!NT_STATUS_IS_OK(status) &&
+	    !NT_STATUS_EQUAL(status, STATUS_SOME_UNMAPPED)) {
+		return WINBINDD_ERROR;
+	}
+
+	len = 0;
+	buflen = 0;
+	result = NULL;
+
+	for (i=0; i<num_rids; i++) {
+		sprintf_append(state->mem_ctx, &result, &len, &buflen,
+			       "%d %s\n", types[i], names[i]);
+	}
+
+	fstrcpy(state->response.data.domain_name, domain_name);
+
+	if (result != NULL) {
+		state->response.extra_data.data = SMB_STRDUP(result);
+		if (!state->response.extra_data.data) {
+			return WINBINDD_ERROR;
+		}
+		state->response.length += len+1;
+	}
+
+	return WINBINDD_OK;
+}
+
+static void getsidaliases_recv(TALLOC_CTX *mem_ctx, BOOL success,
+			       struct winbindd_response *response,
+			       void *c, void *private_data)
+{
+	void (*cont)(void *priv, BOOL succ,
+		     DOM_SID *aliases, size_t num_aliases) =
+		(void (*)(void *, BOOL, DOM_SID *, size_t))c;
+	char *aliases_str;
+	DOM_SID *sids = NULL;
+	size_t num_sids = 0;
+
+	if (!success) {
+		DEBUG(5, ("Could not trigger getsidaliases\n"));
+		cont(private_data, success, NULL, 0);
+		return;
+	}
+
+	if (response->result != WINBINDD_OK) {
+		DEBUG(5, ("getsidaliases returned an error\n"));
+		cont(private_data, False, NULL, 0);
+		return;
+	}
+
+	aliases_str = (char *)response->extra_data.data;
+
+	if (aliases_str == NULL) {
+		DEBUG(10, ("getsidaliases return 0 SIDs\n"));
+		cont(private_data, True, NULL, 0);
+		return;
+	}
+
+	if (!parse_sidlist(mem_ctx, aliases_str, &sids, &num_sids)) {
+		DEBUG(0, ("Could not parse sids\n"));
+		cont(private_data, False, NULL, 0);
+		return;
+	}
+
+	SAFE_FREE(response->extra_data.data);
+
+	cont(private_data, True, sids, num_sids);
+}
+
+void winbindd_getsidaliases_async(struct winbindd_domain *domain,
+				  TALLOC_CTX *mem_ctx,
+				  const DOM_SID *sids, size_t num_sids,
+			 	  void (*cont)(void *private_data,
+				 	       BOOL success,
+					       const DOM_SID *aliases,
+					       size_t num_aliases),
+				  void *private_data)
+{
+	struct winbindd_request request;
+	char *sidstr = NULL;
+	ssize_t len;
+
+	if (num_sids == 0) {
+		cont(private_data, True, NULL, 0);
+		return;
+	}
+
+	if (!print_sidlist(mem_ctx, sids, num_sids, &sidstr, &len)) {
+		cont(private_data, False, NULL, 0);
+		return;
+	}
+
+	ZERO_STRUCT(request);
+	request.cmd = WINBINDD_DUAL_GETSIDALIASES;
+	request.extra_len = len;
+	request.extra_data.data = sidstr;
+
+	do_async_domain(mem_ctx, domain, &request, getsidaliases_recv,
+			(void *)cont, private_data);
+}
+
+enum winbindd_result winbindd_dual_getsidaliases(struct winbindd_domain *domain,
+						 struct winbindd_cli_state *state)
+{
+	DOM_SID *sids = NULL;
+	size_t num_sids = 0;
+	char *sidstr = NULL;
+	ssize_t len;
+	size_t i;
+	uint32 num_aliases;
+	uint32 *alias_rids;
+	NTSTATUS result;
+
+	DEBUG(3, ("[%5lu]: getsidaliases\n", (unsigned long)state->pid));
+
+	sidstr = state->request.extra_data.data;
+	if (sidstr == NULL) {
+		sidstr = talloc_strdup(state->mem_ctx, "\n"); /* No SID */
+		if (!sidstr) {
+			DEBUG(0, ("Out of memory\n"));
+			return WINBINDD_ERROR;
+		}
+	}
+
+	DEBUG(10, ("Sidlist: %s\n", sidstr));
+
+	if (!parse_sidlist(state->mem_ctx, sidstr, &sids, &num_sids)) {
+		DEBUG(0, ("Could not parse SID list: %s\n", sidstr));
+		return WINBINDD_ERROR;
+	}
+
+	num_aliases = 0;
+	alias_rids = NULL;
+
+	result = domain->methods->lookup_useraliases(domain,
+						     state->mem_ctx,
+						     num_sids, sids,
+						     &num_aliases,
+						     &alias_rids);
+
+	if (!NT_STATUS_IS_OK(result)) {
+		DEBUG(3, ("Could not lookup_useraliases: %s\n",
+			  nt_errstr(result)));
+		return WINBINDD_ERROR;
+	}
+
+	num_sids = 0;
+	sids = NULL;
+	sidstr = NULL;
+
+	DEBUG(10, ("Got %d aliases\n", num_aliases));
+
+	for (i=0; i<num_aliases; i++) {
+		DOM_SID sid;
+		DEBUGADD(10, (" rid %d\n", alias_rids[i]));
+		sid_copy(&sid, &domain->sid);
+		sid_append_rid(&sid, alias_rids[i]);
+		if (!add_sid_to_array(state->mem_ctx, &sid, &sids, &num_sids)) {
+			return WINBINDD_ERROR;
+		}
+	}
+
+
+	if (!print_sidlist(state->mem_ctx, sids, num_sids, &sidstr, &len)) {
+		DEBUG(0, ("Could not print_sidlist\n"));
+		state->response.extra_data.data = NULL;
+		return WINBINDD_ERROR;
+	}
+
+	state->response.extra_data.data = NULL;
+
+	if (sidstr) {
+		state->response.extra_data.data = SMB_STRDUP(sidstr);
+		if (!state->response.extra_data.data) {
+			DEBUG(0, ("Out of memory\n"));
+			return WINBINDD_ERROR;
+		}
+		DEBUG(10, ("aliases_list: %s\n",
+			   (char *)state->response.extra_data.data));
+		state->response.length += len+1;
+	}
+	
+	return WINBINDD_OK;
+}
+
+struct gettoken_state {
+	TALLOC_CTX *mem_ctx;
+	DOM_SID user_sid;
+	struct winbindd_domain *alias_domain;
+	struct winbindd_domain *local_alias_domain;
+	struct winbindd_domain *builtin_domain;
+	DOM_SID *sids;
+	size_t num_sids;
+	void (*cont)(void *private_data, BOOL success, DOM_SID *sids, size_t num_sids);
+	void *private_data;
+};
+
+static void gettoken_recvdomgroups(TALLOC_CTX *mem_ctx, BOOL success,
+				   struct winbindd_response *response,
+				   void *c, void *private_data);
+static void gettoken_recvaliases(void *private_data, BOOL success,
+				 const DOM_SID *aliases,
+				 size_t num_aliases);
+				 
+
+void winbindd_gettoken_async(TALLOC_CTX *mem_ctx, const DOM_SID *user_sid,
+			     void (*cont)(void *private_data, BOOL success,
+					  DOM_SID *sids, size_t num_sids),
+			     void *private_data)
+{
+	struct winbindd_domain *domain;
+	struct winbindd_request request;
+	struct gettoken_state *state;
+
+	state = TALLOC_ZERO_P(mem_ctx, struct gettoken_state);
+	if (state == NULL) {
+		DEBUG(0, ("talloc failed\n"));
+		cont(private_data, False, NULL, 0);
+		return;
+	}
+
+	state->mem_ctx = mem_ctx;
+	sid_copy(&state->user_sid, user_sid);
+	state->alias_domain = find_our_domain();
+	state->local_alias_domain = find_domain_from_name( get_global_sam_name() );
+	state->builtin_domain = find_builtin_domain();
+	state->cont = cont;
+	state->private_data = private_data;
+
+	domain = find_domain_from_sid_noinit(user_sid);
+	if (domain == NULL) {
+		DEBUG(5, ("Could not find domain from SID %s\n",
+			  sid_string_static(user_sid)));
+		cont(private_data, False, NULL, 0);
+		return;
+	}
+
+	ZERO_STRUCT(request);
+	request.cmd = WINBINDD_GETUSERDOMGROUPS;
+	fstrcpy(request.data.sid, sid_string_static(user_sid));
+
+	do_async_domain(mem_ctx, domain, &request, gettoken_recvdomgroups,
+			NULL, state);
+}
+
+static void gettoken_recvdomgroups(TALLOC_CTX *mem_ctx, BOOL success,
+				   struct winbindd_response *response,
+				   void *c, void *private_data)
+{
+	struct gettoken_state *state =
+		talloc_get_type_abort(private_data, struct gettoken_state);
+	char *sids_str;
+	
+	if (!success) {
+		DEBUG(10, ("Could not get domain groups\n"));
+		state->cont(state->private_data, False, NULL, 0);
+		return;
+	}
+
+	sids_str = (char *)response->extra_data.data;
+
+	if (sids_str == NULL) {
+		/* This could be normal if we are dealing with a
+		   local user and local groups */
+
+		if ( !sid_check_is_in_our_domain( &state->user_sid ) ) {
+			DEBUG(10, ("Received no domain groups\n"));
+			state->cont(state->private_data, True, NULL, 0);
+			return;
+		}
+	}
+
+	state->sids = NULL;
+	state->num_sids = 0;
+
+	if (!add_sid_to_array(mem_ctx, &state->user_sid, &state->sids,
+			 &state->num_sids)) {
+		DEBUG(0, ("Out of memory\n"));
+		state->cont(state->private_data, False, NULL, 0);
+		return;
+	}
+
+	if (sids_str && !parse_sidlist(mem_ctx, sids_str, &state->sids,
+			   &state->num_sids)) {
+		DEBUG(0, ("Could not parse sids\n"));
+		state->cont(state->private_data, False, NULL, 0);
+		return;
+	}
+
+	SAFE_FREE(response->extra_data.data);
+
+	if (state->alias_domain == NULL) {
+		DEBUG(10, ("Don't expand domain local groups\n"));
+		state->cont(state->private_data, True, state->sids,
+			    state->num_sids);
+		return;
+	}
+
+	winbindd_getsidaliases_async(state->alias_domain, mem_ctx,
+				     state->sids, state->num_sids,
+				     gettoken_recvaliases, state);
+}
+
+static void gettoken_recvaliases(void *private_data, BOOL success,
+				 const DOM_SID *aliases,
+				 size_t num_aliases)
+{
+	struct gettoken_state *state = (struct gettoken_state *)private_data;
+	size_t i;
+
+	if (!success) {
+		DEBUG(10, ("Could not receive domain local groups\n"));
+		state->cont(state->private_data, False, NULL, 0);
+		return;
+	}
+
+	for (i=0; i<num_aliases; i++) {
+		if (!add_sid_to_array(state->mem_ctx, &aliases[i],
+				 &state->sids, &state->num_sids)) {
+			DEBUG(0, ("Out of memory\n"));
+			state->cont(state->private_data, False, NULL, 0);
+			return;
+		}
+	}
+
+	if (state->local_alias_domain != NULL) {
+		struct winbindd_domain *local_domain = state->local_alias_domain;
+		DEBUG(10, ("Expanding our own local groups\n"));
+		state->local_alias_domain = NULL;
+		winbindd_getsidaliases_async(local_domain, state->mem_ctx,
+					     state->sids, state->num_sids,
+					     gettoken_recvaliases, state);
+		return;
+	}
+
+	if (state->builtin_domain != NULL) {
+		struct winbindd_domain *builtin_domain = state->builtin_domain;
+		DEBUG(10, ("Expanding our own BUILTIN groups\n"));
+		state->builtin_domain = NULL;
+		winbindd_getsidaliases_async(builtin_domain, state->mem_ctx,
+					     state->sids, state->num_sids,
+					     gettoken_recvaliases, state);
+		return;
+	}
+
+	state->cont(state->private_data, True, state->sids, state->num_sids);
+}
+
+static void query_user_recv(TALLOC_CTX *mem_ctx, BOOL success,
+			    struct winbindd_response *response,
+			    void *c, void *private_data)
+{
+	void (*cont)(void *priv, BOOL succ, const char *acct_name,
+		     const char *full_name, const char *homedir, 
+		     const char *shell, uint32 gid, uint32 group_rid) =
+		(void (*)(void *, BOOL, const char *, const char *,
+			  const char *, const char *, uint32, uint32))c;
+
+	if (!success) {
+		DEBUG(5, ("Could not trigger query_user\n"));
+		cont(private_data, False, NULL, NULL, NULL, NULL, -1, -1);
+		return;
+	}
+
+	if (response->result != WINBINDD_OK) {
+		DEBUG(5, ("query_user returned an error\n"));
+		cont(private_data, False, NULL, NULL, NULL, NULL, -1, -1);
+		return;
+	}
+
+	cont(private_data, True, response->data.user_info.acct_name,
+	     response->data.user_info.full_name,
+	     response->data.user_info.homedir,
+	     response->data.user_info.shell,
+	     response->data.user_info.primary_gid,
+	     response->data.user_info.group_rid);
+}
+
+void query_user_async(TALLOC_CTX *mem_ctx, struct winbindd_domain *domain,
+		      const DOM_SID *sid,
+		      void (*cont)(void *private_data, BOOL success,
+				   const char *acct_name,
+				   const char *full_name,
+				   const char *homedir,
+				   const char *shell,
+				   gid_t gid,
+				   uint32 group_rid),
+		      void *private_data)
+{
+	struct winbindd_request request;
+	ZERO_STRUCT(request);
+	request.cmd = WINBINDD_DUAL_USERINFO;
+	sid_to_string(request.data.sid, sid);
+	do_async_domain(mem_ctx, domain, &request, query_user_recv,
+			(void *)cont, private_data);
+}
+
+/* The following uid2sid/gid2sid functions has been contributed by
+ * Keith Reynolds <Keith.Reynolds at centrify.com> */
+
+static void winbindd_uid2sid_recv(TALLOC_CTX *mem_ctx, BOOL success,
+				  struct winbindd_response *response,
+				  void *c, void *private_data)
+{
+	void (*cont)(void *priv, BOOL succ, const char *sid) =
+		(void (*)(void *, BOOL, const char *))c;
+
+	if (!success) {
+		DEBUG(5, ("Could not trigger uid2sid\n"));
+		cont(private_data, False, NULL);
+		return;
+	}
+
+	if (response->result != WINBINDD_OK) {
+		DEBUG(5, ("uid2sid returned an error\n"));
+		cont(private_data, False, NULL);
+		return;
+	}
+
+	cont(private_data, True, response->data.sid.sid);
+}
+
+void winbindd_uid2sid_async(TALLOC_CTX *mem_ctx, uid_t uid,
+			    void (*cont)(void *private_data, BOOL success, const char *sid),
+			    void *private_data)
+{
+	struct winbindd_request request;
+
+	ZERO_STRUCT(request);
+	request.cmd = WINBINDD_DUAL_UID2SID;
+	request.data.uid = uid;
+	do_async(mem_ctx, idmap_child(), &request, winbindd_uid2sid_recv,
+		 (void *)cont, private_data);
+}
+
+enum winbindd_result winbindd_dual_uid2sid(struct winbindd_domain *domain,
+					   struct winbindd_cli_state *state)
+{
+	DOM_SID sid;
+	NTSTATUS result;
+
+	DEBUG(3,("[%5lu]: uid to sid %lu\n",
+		 (unsigned long)state->pid,
+		 (unsigned long) state->request.data.uid));
+
+	/* Find sid for this uid and return it, possibly ask the slow remote idmap */
+	result = idmap_uid_to_sid(&sid, state->request.data.uid);
+
+	if (NT_STATUS_IS_OK(result)) {
+		sid_to_string(state->response.data.sid.sid, &sid);
+		state->response.data.sid.type = SID_NAME_USER;
+		return WINBINDD_OK;
+	}
+
+	return WINBINDD_ERROR;
+}
+
+static void winbindd_gid2sid_recv(TALLOC_CTX *mem_ctx, BOOL success,
+				  struct winbindd_response *response,
+				  void *c, void *private_data)
+{
+	void (*cont)(void *priv, BOOL succ, const char *sid) =
+		(void (*)(void *, BOOL, const char *))c;
+
+	if (!success) {
+		DEBUG(5, ("Could not trigger gid2sid\n"));
+		cont(private_data, False, NULL);
+		return;
+	}
+
+	if (response->result != WINBINDD_OK) {
+		DEBUG(5, ("gid2sid returned an error\n"));
+		cont(private_data, False, NULL);
+		return;
+	}
+
+	cont(private_data, True, response->data.sid.sid);
+}
+
+void winbindd_gid2sid_async(TALLOC_CTX *mem_ctx, gid_t gid,
+			    void (*cont)(void *private_data, BOOL success, const char *sid),
+			    void *private_data)
+{
+	struct winbindd_request request;
+
+	ZERO_STRUCT(request);
+	request.cmd = WINBINDD_DUAL_GID2SID;
+	request.data.gid = gid;
+	do_async(mem_ctx, idmap_child(), &request, winbindd_gid2sid_recv,
+		 (void *)cont, private_data);
+}
+
+enum winbindd_result winbindd_dual_gid2sid(struct winbindd_domain *domain,
+					   struct winbindd_cli_state *state)
+{
+	DOM_SID sid;
+	NTSTATUS result;
+
+	DEBUG(3,("[%5lu]: gid %lu to sid\n",
+		(unsigned long)state->pid,
+		(unsigned long) state->request.data.gid));
+
+	/* Find sid for this gid and return it, possibly ask the slow remote idmap */
+	result = idmap_gid_to_sid(&sid, state->request.data.gid);
+
+	if (NT_STATUS_IS_OK(result)) {
+		sid_to_string(state->response.data.sid.sid, &sid);
+		DEBUG(10, ("[%5lu]: retrieved sid: %s\n",
+			   (unsigned long)state->pid,
+			   state->response.data.sid.sid));
+		state->response.data.sid.type = SID_NAME_DOM_GRP;
+		return WINBINDD_OK;
+	}
+
+	return WINBINDD_ERROR;
+}
+
+static void winbindd_dump_id_maps_recv(TALLOC_CTX *mem_ctx, BOOL success,
+			       struct winbindd_response *response,
+			       void *c, void *private_data)
+{
+	void (*cont)(void *priv, BOOL succ) =
+		(void (*)(void *, BOOL))c;
+
+	if (!success) {
+		DEBUG(5, ("Could not trigger a map dump\n"));
+		cont(private_data, False);
+		return;
+	}
+
+	if (response->result != WINBINDD_OK) {
+		DEBUG(5, ("idmap dump maps returned an error\n"));
+		cont(private_data, False);
+		return;
+	}
+
+	cont(private_data, True);
+}
+			 
+void winbindd_dump_maps_async(TALLOC_CTX *mem_ctx, void *data, int size,
+			 void (*cont)(void *private_data, BOOL success),
+			 void *private_data)
+{
+	struct winbindd_request request;
+	ZERO_STRUCT(request);
+	request.cmd = WINBINDD_DUAL_DUMP_MAPS;
+	request.extra_data.data = (char *)data;
+	request.extra_len = size;
+	do_async(mem_ctx, idmap_child(), &request, winbindd_dump_id_maps_recv,
+		 (void *)cont, private_data);
+}
+
+enum winbindd_result winbindd_dual_dump_maps(struct winbindd_domain *domain,
+					   struct winbindd_cli_state *state)
+{
+	DEBUG(3, ("[%5lu]: dual dump maps\n", (unsigned long)state->pid));
+
+	idmap_dump_maps((char *)state->request.extra_data.data);
+
+	return WINBINDD_OK;
+}
+

Copied: branches/samba/upstream/source/nsswitch/winbindd_cache.c (from rev 1928, branches/samba/upstream/source/nsswitch/winbindd_cache.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/winbindd_cache.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/winbindd_cache.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,2737 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   Winbind cache backend functions
+
+   Copyright (C) Andrew Tridgell 2001
+   Copyright (C) Gerald Carter   2003
+   Copyright (C) Volker Lendecke 2005
+   Copyright (C) Guenther Deschner 2005
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "winbindd.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_WINBIND
+
+#define WINBINDD_CACHE_VERSION 1
+#define WINBINDD_CACHE_VERSION_KEYSTR "WINBINDD_CACHE_VERSION"
+
+extern struct winbindd_methods reconnect_methods;
+extern BOOL opt_nocache;
+#ifdef HAVE_ADS
+extern struct winbindd_methods ads_methods;
+#endif
+extern struct winbindd_methods passdb_methods;
+
+/*
+ * JRA. KEEP THIS LIST UP TO DATE IF YOU ADD CACHE ENTRIES.
+ * Here are the list of entry types that are *not* stored
+ * as form struct cache_entry in the cache.
+ */
+
+static const char *non_centry_keys[] = {
+	"SEQNUM/",
+	"DR/",
+	"DE/",
+	"WINBINDD_OFFLINE",
+	WINBINDD_CACHE_VERSION_KEYSTR,
+	NULL
+};
+
+/************************************************************************
+ Is this key a non-centry type ?
+************************************************************************/
+
+static BOOL is_non_centry_key(TDB_DATA kbuf)
+{
+	int i;
+
+	if (kbuf.dptr == NULL || kbuf.dsize == 0) {
+		return False;
+	}
+	for (i = 0; non_centry_keys[i] != NULL; i++) {
+		size_t namelen = strlen(non_centry_keys[i]);
+		if (kbuf.dsize < namelen) {
+			continue;
+		}
+		if (strncmp(non_centry_keys[i], (const char *)kbuf.dptr, namelen) == 0) {
+			return True;
+		}
+	}
+	return False;
+}
+
+/* Global online/offline state - False when online. winbindd starts up online
+   and sets this to true if the first query fails and there's an entry in
+   the cache tdb telling us to stay offline. */
+
+static BOOL global_winbindd_offline_state;
+
+struct winbind_cache {
+	TDB_CONTEXT *tdb;
+};
+
+struct cache_entry {
+	NTSTATUS status;
+	uint32 sequence_number;
+	uint8 *data;
+	uint32 len, ofs;
+};
+
+#define WINBINDD_MAX_CACHE_SIZE (50*1024*1024)
+
+static struct winbind_cache *wcache;
+
+void winbindd_check_cache_size(time_t t)
+{
+	static time_t last_check_time;
+	struct stat st;
+
+	if (last_check_time == (time_t)0)
+		last_check_time = t;
+
+	if (t - last_check_time < 60 && t - last_check_time > 0)
+		return;
+
+	if (wcache == NULL || wcache->tdb == NULL) {
+		DEBUG(0, ("Unable to check size of tdb cache - cache not open !\n"));
+		return;
+	}
+
+	if (fstat(tdb_fd(wcache->tdb), &st) == -1) {
+		DEBUG(0, ("Unable to check size of tdb cache %s!\n", strerror(errno) ));
+		return;
+	}
+
+	if (st.st_size > WINBINDD_MAX_CACHE_SIZE) {
+		DEBUG(10,("flushing cache due to size (%lu) > (%lu)\n",
+			(unsigned long)st.st_size,
+			(unsigned long)WINBINDD_MAX_CACHE_SIZE));
+		wcache_flush_cache();
+	}
+}
+
+/* get the winbind_cache structure */
+static struct winbind_cache *get_cache(struct winbindd_domain *domain)
+{
+	struct winbind_cache *ret = wcache;
+#ifdef HAVE_ADS
+	struct winbindd_domain *our_domain = domain;
+#endif
+
+	/* We have to know what type of domain we are dealing with first. */
+
+	if (domain->internal) {
+		domain->backend = &passdb_methods;
+		domain->initialized = True;
+	}
+	if ( !domain->initialized ) {
+		init_dc_connection( domain );
+	}
+
+	/* 
+	   OK.  listen up becasue I'm only going to say this once.
+	   We have the following scenarios to consider
+	   (a) trusted AD domains on a Samba DC,
+	   (b) trusted AD domains and we are joined to a non-kerberos domain
+	   (c) trusted AD domains and we are joined to a kerberos (AD) domain
+
+	   For (a) we can always contact the trusted domain using krb5 
+	   since we have the domain trust account password
+
+	   For (b) we can only use RPC since we have no way of 
+	   getting a krb5 ticket in our own domain
+
+	   For (c) we can always use krb5 since we have a kerberos trust
+
+	   --jerry
+	 */
+
+	if (!domain->backend) {
+#ifdef HAVE_ADS
+		/* find our domain first so we can figure out if we 
+		   are joined to a kerberized domain */
+
+		if ( !domain->primary )
+			our_domain = find_our_domain();
+
+		if ( (our_domain->active_directory || IS_DC) && domain->active_directory ) {
+			DEBUG(5,("get_cache: Setting ADS methods for domain %s\n", domain->name));
+			domain->backend = &ads_methods;
+		} else {
+#endif	/* HAVE_ADS */
+			DEBUG(5,("get_cache: Setting MS-RPC methods for domain %s\n", domain->name));
+			domain->backend = &reconnect_methods;
+#ifdef HAVE_ADS
+		}
+#endif	/* HAVE_ADS */
+	}
+
+	if (ret)
+		return ret;
+	
+	ret = SMB_XMALLOC_P(struct winbind_cache);
+	ZERO_STRUCTP(ret);
+
+	wcache = ret;
+	wcache_flush_cache();
+
+	return ret;
+}
+
+/*
+  free a centry structure
+*/
+static void centry_free(struct cache_entry *centry)
+{
+	if (!centry)
+		return;
+	SAFE_FREE(centry->data);
+	free(centry);
+}
+
+/*
+  pull a uint32 from a cache entry 
+*/
+static uint32 centry_uint32(struct cache_entry *centry)
+{
+	uint32 ret;
+	if (centry->len - centry->ofs < 4) {
+		DEBUG(0,("centry corruption? needed 4 bytes, have %d\n", 
+			 centry->len - centry->ofs));
+		smb_panic("centry_uint32");
+	}
+	ret = IVAL(centry->data, centry->ofs);
+	centry->ofs += 4;
+	return ret;
+}
+
+/*
+  pull a uint16 from a cache entry 
+*/
+static uint16 centry_uint16(struct cache_entry *centry)
+{
+	uint16 ret;
+	if (centry->len - centry->ofs < 2) {
+		DEBUG(0,("centry corruption? needed 2 bytes, have %d\n", 
+			 centry->len - centry->ofs));
+		smb_panic("centry_uint16");
+	}
+	ret = CVAL(centry->data, centry->ofs);
+	centry->ofs += 2;
+	return ret;
+}
+
+/*
+  pull a uint8 from a cache entry 
+*/
+static uint8 centry_uint8(struct cache_entry *centry)
+{
+	uint8 ret;
+	if (centry->len - centry->ofs < 1) {
+		DEBUG(0,("centry corruption? needed 1 bytes, have %d\n", 
+			 centry->len - centry->ofs));
+		smb_panic("centry_uint32");
+	}
+	ret = CVAL(centry->data, centry->ofs);
+	centry->ofs += 1;
+	return ret;
+}
+
+/*
+  pull a NTTIME from a cache entry 
+*/
+static NTTIME centry_nttime(struct cache_entry *centry)
+{
+	NTTIME ret;
+	if (centry->len - centry->ofs < 8) {
+		DEBUG(0,("centry corruption? needed 8 bytes, have %d\n", 
+			 centry->len - centry->ofs));
+		smb_panic("centry_nttime");
+	}
+	ret = IVAL(centry->data, centry->ofs);
+	centry->ofs += 4;
+	ret += (uint64_t)IVAL(centry->data, centry->ofs) << 32;
+	centry->ofs += 4;
+	return ret;
+}
+
+/*
+  pull a time_t from a cache entry. time_t stored portably as a 64-bit time.
+*/
+static time_t centry_time(struct cache_entry *centry)
+{
+	return (time_t)centry_nttime(centry);
+}
+
+/* pull a string from a cache entry, using the supplied
+   talloc context 
+*/
+static char *centry_string(struct cache_entry *centry, TALLOC_CTX *mem_ctx)
+{
+	uint32 len;
+	char *ret;
+
+	len = centry_uint8(centry);
+
+	if (len == 0xFF) {
+		/* a deliberate NULL string */
+		return NULL;
+	}
+
+	if (centry->len - centry->ofs < len) {
+		DEBUG(0,("centry corruption? needed %d bytes, have %d\n", 
+			 len, centry->len - centry->ofs));
+		smb_panic("centry_string");
+	}
+
+	ret = TALLOC_ARRAY(mem_ctx, char, len+1);
+	if (!ret) {
+		smb_panic("centry_string out of memory\n");
+	}
+	memcpy(ret,centry->data + centry->ofs, len);
+	ret[len] = 0;
+	centry->ofs += len;
+	return ret;
+}
+
+/* pull a hash16 from a cache entry, using the supplied
+   talloc context 
+*/
+static char *centry_hash16(struct cache_entry *centry, TALLOC_CTX *mem_ctx)
+{
+	uint32 len;
+	char *ret;
+
+	len = centry_uint8(centry);
+
+	if (len != 16) {
+		DEBUG(0,("centry corruption? hash len (%u) != 16\n", 
+			len ));
+		return NULL;
+	}
+
+	if (centry->len - centry->ofs < 16) {
+		DEBUG(0,("centry corruption? needed 16 bytes, have %d\n", 
+			 centry->len - centry->ofs));
+		return NULL;
+	}
+
+	ret = TALLOC_ARRAY(mem_ctx, char, 16);
+	if (!ret) {
+		smb_panic("centry_hash out of memory\n");
+	}
+	memcpy(ret,centry->data + centry->ofs, 16);
+	centry->ofs += 16;
+	return ret;
+}
+
+/* pull a sid from a cache entry, using the supplied
+   talloc context 
+*/
+static BOOL centry_sid(struct cache_entry *centry, TALLOC_CTX *mem_ctx, DOM_SID *sid)
+{
+	char *sid_string;
+	sid_string = centry_string(centry, mem_ctx);
+	if ((sid_string == NULL) || (!string_to_sid(sid, sid_string))) {
+		return False;
+	}
+	return True;
+}
+
+/* the server is considered down if it can't give us a sequence number */
+static BOOL wcache_server_down(struct winbindd_domain *domain)
+{
+	BOOL ret;
+
+	if (!wcache->tdb)
+		return False;
+
+	ret = (domain->sequence_number == DOM_SEQUENCE_NONE);
+
+	if (ret)
+		DEBUG(10,("wcache_server_down: server for Domain %s down\n", 
+			domain->name ));
+	return ret;
+}
+
+static NTSTATUS fetch_cache_seqnum( struct winbindd_domain *domain, time_t now )
+{
+	TDB_DATA data;
+	fstring key;
+	uint32 time_diff;
+	
+	if (!wcache->tdb) {
+		DEBUG(10,("fetch_cache_seqnum: tdb == NULL\n"));
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+		
+	fstr_sprintf( key, "SEQNUM/%s", domain->name );
+	
+	data = tdb_fetch_bystring( wcache->tdb, key );
+	if ( !data.dptr || data.dsize!=8 ) {
+		DEBUG(10,("fetch_cache_seqnum: invalid data size key [%s]\n", key ));
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+	
+	domain->sequence_number = IVAL(data.dptr, 0);
+	domain->last_seq_check  = IVAL(data.dptr, 4);
+	
+	SAFE_FREE(data.dptr);
+
+	/* have we expired? */
+	
+	time_diff = now - domain->last_seq_check;
+	if ( time_diff > lp_winbind_cache_time() ) {
+		DEBUG(10,("fetch_cache_seqnum: timeout [%s][%u @ %u]\n",
+			domain->name, domain->sequence_number,
+			(uint32)domain->last_seq_check));
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	DEBUG(10,("fetch_cache_seqnum: success [%s][%u @ %u]\n", 
+		domain->name, domain->sequence_number, 
+		(uint32)domain->last_seq_check));
+
+	return NT_STATUS_OK;
+}
+
+static NTSTATUS store_cache_seqnum( struct winbindd_domain *domain )
+{
+	TDB_DATA data;
+	fstring key_str;
+	char buf[8];
+	
+	if (!wcache->tdb) {
+		DEBUG(10,("store_cache_seqnum: tdb == NULL\n"));
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+		
+	fstr_sprintf( key_str, "SEQNUM/%s", domain->name );
+	
+	SIVAL(buf, 0, domain->sequence_number);
+	SIVAL(buf, 4, domain->last_seq_check);
+	data.dptr = buf;
+	data.dsize = 8;
+	
+	if ( tdb_store_bystring( wcache->tdb, key_str, data, TDB_REPLACE) == -1 ) {
+		DEBUG(10,("store_cache_seqnum: tdb_store fail key [%s]\n", key_str ));
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	DEBUG(10,("store_cache_seqnum: success [%s][%u @ %u]\n", 
+		domain->name, domain->sequence_number, 
+		(uint32)domain->last_seq_check));
+	
+	return NT_STATUS_OK;
+}
+
+/*
+  refresh the domain sequence number. If force is True
+  then always refresh it, no matter how recently we fetched it
+*/
+
+static void refresh_sequence_number(struct winbindd_domain *domain, BOOL force)
+{
+	NTSTATUS status;
+	unsigned time_diff;
+	time_t t = time(NULL);
+	unsigned cache_time = lp_winbind_cache_time();
+
+	get_cache( domain );
+
+#if 0	/* JERRY -- disable as the default cache time is now 5 minutes */
+	/* trying to reconnect is expensive, don't do it too often */
+	if (domain->sequence_number == DOM_SEQUENCE_NONE) {
+		cache_time *= 8;
+	}
+#endif
+
+	time_diff = t - domain->last_seq_check;
+
+	/* see if we have to refetch the domain sequence number */
+	if (!force && (time_diff < cache_time)) {
+		DEBUG(10, ("refresh_sequence_number: %s time ok\n", domain->name));
+		goto done;
+	}
+	
+	/* try to get the sequence number from the tdb cache first */
+	/* this will update the timestamp as well */
+	
+	status = fetch_cache_seqnum( domain, t );
+	if ( NT_STATUS_IS_OK(status) )
+		goto done;	
+
+	/* important! make sure that we know if this is a native 
+	   mode domain or not */
+
+	status = domain->backend->sequence_number(domain, &domain->sequence_number);
+
+	/* the above call could have set our domain->backend to NULL when
+	 * coming from offline to online mode, make sure to reinitialize the
+	 * backend - Guenther */
+	get_cache( domain );
+
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(10,("refresh_sequence_number: failed with %s\n", nt_errstr(status)));
+		domain->sequence_number = DOM_SEQUENCE_NONE;
+	}
+	
+	domain->last_status = status;
+	domain->last_seq_check = time(NULL);
+	
+	/* save the new sequence number ni the cache */
+	store_cache_seqnum( domain );
+
+done:
+	DEBUG(10, ("refresh_sequence_number: %s seq number is now %d\n", 
+		   domain->name, domain->sequence_number));
+
+	return;
+}
+
+/*
+  decide if a cache entry has expired
+*/
+static BOOL centry_expired(struct winbindd_domain *domain, const char *keystr, struct cache_entry *centry)
+{
+	/* If we've been told to be offline - stay in that state... */
+	if (lp_winbind_offline_logon() && global_winbindd_offline_state) {
+		DEBUG(10,("centry_expired: Key %s for domain %s valid as winbindd is globally offline.\n",
+			keystr, domain->name ));
+		return False;
+	}
+
+	/* when the domain is offline return the cached entry.
+	 * This deals with transient offline states... */
+
+	if (!domain->online) {
+		DEBUG(10,("centry_expired: Key %s for domain %s valid as domain is offline.\n",
+			keystr, domain->name ));
+		return False;
+	}
+
+	/* if the server is OK and our cache entry came from when it was down then
+	   the entry is invalid */
+	if ((domain->sequence_number != DOM_SEQUENCE_NONE) &&  
+	    (centry->sequence_number == DOM_SEQUENCE_NONE)) {
+		DEBUG(10,("centry_expired: Key %s for domain %s invalid sequence.\n",
+			keystr, domain->name ));
+		return True;
+	}
+
+	/* if the server is down or the cache entry is not older than the
+	   current sequence number then it is OK */
+	if (wcache_server_down(domain) || 
+	    centry->sequence_number == domain->sequence_number) {
+		DEBUG(10,("centry_expired: Key %s for domain %s is good.\n",
+			keystr, domain->name ));
+		return False;
+	}
+
+	DEBUG(10,("centry_expired: Key %s for domain %s expired\n",
+		keystr, domain->name ));
+
+	/* it's expired */
+	return True;
+}
+
+static struct cache_entry *wcache_fetch_raw(char *kstr)
+{
+	TDB_DATA data;
+	struct cache_entry *centry;
+	TDB_DATA key;
+
+	key.dptr = kstr;
+	key.dsize = strlen(kstr);
+	data = tdb_fetch(wcache->tdb, key);
+	if (!data.dptr) {
+		/* a cache miss */
+		return NULL;
+	}
+
+	centry = SMB_XMALLOC_P(struct cache_entry);
+	centry->data = (unsigned char *)data.dptr;
+	centry->len = data.dsize;
+	centry->ofs = 0;
+
+	if (centry->len < 8) {
+		/* huh? corrupt cache? */
+		DEBUG(10,("wcache_fetch_raw: Corrupt cache for key %s (len < 8) ?\n", kstr));
+		centry_free(centry);
+		return NULL;
+	}
+	
+	centry->status = NT_STATUS(centry_uint32(centry));
+	centry->sequence_number = centry_uint32(centry);
+
+	return centry;
+}
+
+/*
+  fetch an entry from the cache, with a varargs key. auto-fetch the sequence
+  number and return status
+*/
+static struct cache_entry *wcache_fetch(struct winbind_cache *cache, 
+					struct winbindd_domain *domain,
+					const char *format, ...) PRINTF_ATTRIBUTE(3,4);
+static struct cache_entry *wcache_fetch(struct winbind_cache *cache, 
+					struct winbindd_domain *domain,
+					const char *format, ...)
+{
+	va_list ap;
+	char *kstr;
+	struct cache_entry *centry;
+
+	if (opt_nocache) {
+		return NULL;
+	}
+
+	refresh_sequence_number(domain, False);
+
+	va_start(ap, format);
+	smb_xvasprintf(&kstr, format, ap);
+	va_end(ap);
+
+	centry = wcache_fetch_raw(kstr);
+	if (centry == NULL) {
+		free(kstr);
+		return NULL;
+	}
+
+	if (centry_expired(domain, kstr, centry)) {
+
+		DEBUG(10,("wcache_fetch: entry %s expired for domain %s\n",
+			 kstr, domain->name ));
+
+		centry_free(centry);
+		free(kstr);
+		return NULL;
+	}
+
+	DEBUG(10,("wcache_fetch: returning entry %s for domain %s\n",
+		 kstr, domain->name ));
+
+	free(kstr);
+	return centry;
+}
+
+static void wcache_delete(const char *format, ...) PRINTF_ATTRIBUTE(1,2);
+static void wcache_delete(const char *format, ...)
+{
+	va_list ap;
+	char *kstr;
+	TDB_DATA key;
+
+	va_start(ap, format);
+	smb_xvasprintf(&kstr, format, ap);
+	va_end(ap);
+
+	key.dptr = kstr;
+	key.dsize = strlen(kstr);
+
+	tdb_delete(wcache->tdb, key);
+	free(kstr);
+}
+
+/*
+  make sure we have at least len bytes available in a centry 
+*/
+static void centry_expand(struct cache_entry *centry, uint32 len)
+{
+	if (centry->len - centry->ofs >= len)
+		return;
+	centry->len *= 2;
+	centry->data = SMB_REALLOC_ARRAY(centry->data, unsigned char,
+					 centry->len);
+	if (!centry->data) {
+		DEBUG(0,("out of memory: needed %d bytes in centry_expand\n", centry->len));
+		smb_panic("out of memory in centry_expand");
+	}
+}
+
+/*
+  push a uint32 into a centry 
+*/
+static void centry_put_uint32(struct cache_entry *centry, uint32 v)
+{
+	centry_expand(centry, 4);
+	SIVAL(centry->data, centry->ofs, v);
+	centry->ofs += 4;
+}
+
+/*
+  push a uint16 into a centry 
+*/
+static void centry_put_uint16(struct cache_entry *centry, uint16 v)
+{
+	centry_expand(centry, 2);
+	SIVAL(centry->data, centry->ofs, v);
+	centry->ofs += 2;
+}
+
+/*
+  push a uint8 into a centry 
+*/
+static void centry_put_uint8(struct cache_entry *centry, uint8 v)
+{
+	centry_expand(centry, 1);
+	SCVAL(centry->data, centry->ofs, v);
+	centry->ofs += 1;
+}
+
+/* 
+   push a string into a centry 
+ */
+static void centry_put_string(struct cache_entry *centry, const char *s)
+{
+	int len;
+
+	if (!s) {
+		/* null strings are marked as len 0xFFFF */
+		centry_put_uint8(centry, 0xFF);
+		return;
+	}
+
+	len = strlen(s);
+	/* can't handle more than 254 char strings. Truncating is probably best */
+	if (len > 254) {
+		DEBUG(10,("centry_put_string: truncating len (%d) to: 254\n", len));
+		len = 254;
+	}
+	centry_put_uint8(centry, len);
+	centry_expand(centry, len);
+	memcpy(centry->data + centry->ofs, s, len);
+	centry->ofs += len;
+}
+
+/* 
+   push a 16 byte hash into a centry - treat as 16 byte string.
+ */
+static void centry_put_hash16(struct cache_entry *centry, const uint8 val[16])
+{
+	centry_put_uint8(centry, 16);
+	centry_expand(centry, 16);
+	memcpy(centry->data + centry->ofs, val, 16);
+	centry->ofs += 16;
+}
+
+static void centry_put_sid(struct cache_entry *centry, const DOM_SID *sid) 
+{
+	fstring sid_string;
+	centry_put_string(centry, sid_to_string(sid_string, sid));
+}
+
+/*
+  push a NTTIME into a centry 
+*/
+static void centry_put_nttime(struct cache_entry *centry, NTTIME nt)
+{
+	centry_expand(centry, 8);
+	SIVAL(centry->data, centry->ofs, nt & 0xFFFFFFFF);
+	centry->ofs += 4;
+	SIVAL(centry->data, centry->ofs, nt >> 32);
+	centry->ofs += 4;
+}
+
+/*
+  push a time_t into a centry - use a 64 bit size.
+  NTTIME here is being used as a convenient 64-bit size.
+*/
+static void centry_put_time(struct cache_entry *centry, time_t t)
+{
+	NTTIME nt = (NTTIME)t;
+	centry_put_nttime(centry, nt);
+}
+
+/*
+  start a centry for output. When finished, call centry_end()
+*/
+struct cache_entry *centry_start(struct winbindd_domain *domain, NTSTATUS status)
+{
+	struct cache_entry *centry;
+
+	if (!wcache->tdb)
+		return NULL;
+
+	centry = SMB_XMALLOC_P(struct cache_entry);
+
+	centry->len = 8192; /* reasonable default */
+	centry->data = SMB_XMALLOC_ARRAY(uint8, centry->len);
+	centry->ofs = 0;
+	centry->sequence_number = domain->sequence_number;
+	centry_put_uint32(centry, NT_STATUS_V(status));
+	centry_put_uint32(centry, centry->sequence_number);
+	return centry;
+}
+
+/*
+  finish a centry and write it to the tdb
+*/
+static void centry_end(struct cache_entry *centry, const char *format, ...) PRINTF_ATTRIBUTE(2,3);
+static void centry_end(struct cache_entry *centry, const char *format, ...)
+{
+	va_list ap;
+	char *kstr;
+	TDB_DATA key, data;
+
+	va_start(ap, format);
+	smb_xvasprintf(&kstr, format, ap);
+	va_end(ap);
+
+	key.dptr = kstr;
+	key.dsize = strlen(kstr);
+	data.dptr = (char *)centry->data;
+	data.dsize = centry->ofs;
+
+	tdb_store(wcache->tdb, key, data, TDB_REPLACE);
+	free(kstr);
+}
+
+static void wcache_save_name_to_sid(struct winbindd_domain *domain, 
+				    NTSTATUS status, const char *domain_name,
+				    const char *name, const DOM_SID *sid, 
+				    enum lsa_SidType type)
+{
+	struct cache_entry *centry;
+	fstring uname;
+
+	centry = centry_start(domain, status);
+	if (!centry)
+		return;
+	centry_put_uint32(centry, type);
+	centry_put_sid(centry, sid);
+	fstrcpy(uname, name);
+	strupper_m(uname);
+	centry_end(centry, "NS/%s/%s", domain_name, uname);
+	DEBUG(10,("wcache_save_name_to_sid: %s\\%s -> %s\n", domain_name, uname,
+		  sid_string_static(sid)));
+	centry_free(centry);
+}
+
+static void wcache_save_sid_to_name(struct winbindd_domain *domain, NTSTATUS status, 
+				    const DOM_SID *sid, const char *domain_name, const char *name, enum lsa_SidType type)
+{
+	struct cache_entry *centry;
+	fstring sid_string;
+
+	if (is_null_sid(sid)) {
+		return;
+	}
+
+	centry = centry_start(domain, status);
+	if (!centry)
+		return;
+	if (NT_STATUS_IS_OK(status)) {
+		centry_put_uint32(centry, type);
+		centry_put_string(centry, domain_name);
+		centry_put_string(centry, name);
+	}
+	centry_end(centry, "SN/%s", sid_to_string(sid_string, sid));
+	DEBUG(10,("wcache_save_sid_to_name: %s -> %s\n", sid_string, name));
+	centry_free(centry);
+}
+
+
+static void wcache_save_user(struct winbindd_domain *domain, NTSTATUS status, WINBIND_USERINFO *info)
+{
+	struct cache_entry *centry;
+	fstring sid_string;
+
+	if (is_null_sid(&info->user_sid)) {
+		return;
+	}
+
+	centry = centry_start(domain, status);
+	if (!centry)
+		return;
+	centry_put_string(centry, info->acct_name);
+	centry_put_string(centry, info->full_name);
+	centry_put_string(centry, info->homedir);
+	centry_put_string(centry, info->shell);
+	centry_put_uint32(centry, info->primary_gid);
+	centry_put_sid(centry, &info->user_sid);
+	centry_put_sid(centry, &info->group_sid);
+	centry_end(centry, "U/%s", sid_to_string(sid_string, &info->user_sid));
+	DEBUG(10,("wcache_save_user: %s (acct_name %s)\n", sid_string, info->acct_name));
+	centry_free(centry);
+}
+
+static void wcache_save_lockout_policy(struct winbindd_domain *domain, NTSTATUS status, SAM_UNK_INFO_12 *lockout_policy)
+{
+	struct cache_entry *centry;
+
+	centry = centry_start(domain, status);
+	if (!centry)
+		return;
+
+	centry_put_nttime(centry, lockout_policy->duration);
+	centry_put_nttime(centry, lockout_policy->reset_count);
+	centry_put_uint16(centry, lockout_policy->bad_attempt_lockout);
+
+	centry_end(centry, "LOC_POL/%s", domain->name);
+	
+	DEBUG(10,("wcache_save_lockout_policy: %s\n", domain->name));
+
+	centry_free(centry);
+}
+
+static void wcache_save_password_policy(struct winbindd_domain *domain, NTSTATUS status, SAM_UNK_INFO_1 *policy)
+{
+	struct cache_entry *centry;
+
+	centry = centry_start(domain, status);
+	if (!centry)
+		return;
+
+	centry_put_uint16(centry, policy->min_length_password);
+	centry_put_uint16(centry, policy->password_history);
+	centry_put_uint32(centry, policy->password_properties);
+	centry_put_nttime(centry, policy->expire);
+	centry_put_nttime(centry, policy->min_passwordage);
+
+	centry_end(centry, "PWD_POL/%s", domain->name);
+	
+	DEBUG(10,("wcache_save_password_policy: %s\n", domain->name));
+
+	centry_free(centry);
+}
+
+NTSTATUS wcache_cached_creds_exist(struct winbindd_domain *domain, const DOM_SID *sid)
+{
+	struct winbind_cache *cache = get_cache(domain);
+	TDB_DATA data;
+	fstring key_str;
+	uint32 rid;
+
+	if (!cache->tdb) {
+		return NT_STATUS_INTERNAL_DB_ERROR;
+	}
+
+	if (is_null_sid(sid)) {
+		return NT_STATUS_INVALID_SID;
+	}
+
+	if (!(sid_peek_rid(sid, &rid)) || (rid == 0)) {
+		return NT_STATUS_INVALID_SID;
+	}
+
+	fstr_sprintf(key_str, "CRED/%s", sid_string_static(sid));
+
+	data = tdb_fetch(cache->tdb, make_tdb_data(key_str, strlen(key_str)));
+	if (!data.dptr) {
+		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
+	}
+
+	SAFE_FREE(data.dptr);
+	return NT_STATUS_OK;
+}
+
+/* Lookup creds for a SID - copes with old (unsalted) creds as well
+   as new salted ones. */
+
+NTSTATUS wcache_get_creds(struct winbindd_domain *domain, 
+			  TALLOC_CTX *mem_ctx, 
+			  const DOM_SID *sid,
+			  const uint8 **cached_nt_pass,
+			  const uint8 **cached_salt)
+{
+	struct winbind_cache *cache = get_cache(domain);
+	struct cache_entry *centry = NULL;
+	NTSTATUS status;
+	time_t t;
+	uint32 rid;
+
+	if (!cache->tdb) {
+		return NT_STATUS_INTERNAL_DB_ERROR;
+	}
+
+	if (is_null_sid(sid)) {
+		return NT_STATUS_INVALID_SID;
+	}
+
+	if (!(sid_peek_rid(sid, &rid)) || (rid == 0)) {
+		return NT_STATUS_INVALID_SID;
+	}
+
+	/* Try and get a salted cred first. If we can't
+	   fall back to an unsalted cred. */
+
+	centry = wcache_fetch(cache, domain, "CRED/%s", sid_string_static(sid));
+	if (!centry) {
+		DEBUG(10,("wcache_get_creds: entry for [CRED/%s] not found\n", 
+				sid_string_static(sid)));
+		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
+	}
+
+	t = centry_time(centry);
+
+	/* In the salted case this isn't actually the nt_hash itself,
+	   but the MD5 of the salt + nt_hash. Let the caller
+	   sort this out. It can tell as we only return the cached_salt
+	   if we are returning a salted cred. */
+
+	*cached_nt_pass = (const uint8 *)centry_hash16(centry, mem_ctx);
+	if (*cached_nt_pass == NULL) {
+		const char *sidstr = sid_string_static(sid);
+
+		/* Bad (old) cred cache. Delete and pretend we
+		   don't have it. */
+		DEBUG(0,("wcache_get_creds: bad entry for [CRED/%s] - deleting\n", 
+				sidstr));
+		wcache_delete("CRED/%s", sidstr);
+		centry_free(centry);
+		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
+	}
+
+	/* We only have 17 bytes more data in the salted cred case. */
+	if (centry->len - centry->ofs == 17) {
+		*cached_salt = (const uint8 *)centry_hash16(centry, mem_ctx);
+	} else {
+		*cached_salt = NULL;
+	}
+
+#if DEBUG_PASSWORD
+	dump_data(100, (const char *)*cached_nt_pass, NT_HASH_LEN);
+	if (*cached_salt) {
+		dump_data(100, (const char *)*cached_salt, NT_HASH_LEN);
+	}
+#endif
+	status = centry->status;
+
+	DEBUG(10,("wcache_get_creds: [Cached] - cached creds for user %s status: %s\n",
+		sid_string_static(sid), nt_errstr(status) ));
+
+	centry_free(centry);
+	return status;
+}
+
+/* Store creds for a SID - only writes out new salted ones. */
+
+NTSTATUS wcache_save_creds(struct winbindd_domain *domain, 
+			   TALLOC_CTX *mem_ctx, 
+			   const DOM_SID *sid, 
+			   const uint8 nt_pass[NT_HASH_LEN])
+{
+	struct cache_entry *centry;
+	fstring sid_string;
+	uint32 rid;
+	uint8 cred_salt[NT_HASH_LEN];
+	uint8 salted_hash[NT_HASH_LEN];
+
+	if (is_null_sid(sid)) {
+		return NT_STATUS_INVALID_SID;
+	}
+
+	if (!(sid_peek_rid(sid, &rid)) || (rid == 0)) {
+		return NT_STATUS_INVALID_SID;
+	}
+
+	centry = centry_start(domain, NT_STATUS_OK);
+	if (!centry) {
+		return NT_STATUS_INTERNAL_DB_ERROR;
+	}
+
+#if DEBUG_PASSWORD
+	dump_data(100, (const char *)nt_pass, NT_HASH_LEN);
+#endif
+
+	centry_put_time(centry, time(NULL));
+
+	/* Create a salt and then salt the hash. */
+	generate_random_buffer(cred_salt, NT_HASH_LEN);
+	E_md5hash(cred_salt, nt_pass, salted_hash);
+
+	centry_put_hash16(centry, salted_hash);
+	centry_put_hash16(centry, cred_salt);
+	centry_end(centry, "CRED/%s", sid_to_string(sid_string, sid));
+
+	DEBUG(10,("wcache_save_creds: %s\n", sid_string));
+
+	centry_free(centry);
+
+	return NT_STATUS_OK;
+}
+
+
+/* Query display info. This is the basic user list fn */
+static NTSTATUS query_user_list(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				uint32 *num_entries, 
+				WINBIND_USERINFO **info)
+{
+	struct winbind_cache *cache = get_cache(domain);
+	struct cache_entry *centry = NULL;
+	NTSTATUS status;
+	unsigned int i, retry;
+
+	if (!cache->tdb)
+		goto do_query;
+
+	centry = wcache_fetch(cache, domain, "UL/%s", domain->name);
+	if (!centry)
+		goto do_query;
+
+	*num_entries = centry_uint32(centry);
+	
+	if (*num_entries == 0)
+		goto do_cached;
+
+	(*info) = TALLOC_ARRAY(mem_ctx, WINBIND_USERINFO, *num_entries);
+	if (! (*info))
+		smb_panic("query_user_list out of memory");
+	for (i=0; i<(*num_entries); i++) {
+		(*info)[i].acct_name = centry_string(centry, mem_ctx);
+		(*info)[i].full_name = centry_string(centry, mem_ctx);
+		(*info)[i].homedir = centry_string(centry, mem_ctx);
+		(*info)[i].shell = centry_string(centry, mem_ctx);
+		centry_sid(centry, mem_ctx, &(*info)[i].user_sid);
+		centry_sid(centry, mem_ctx, &(*info)[i].group_sid);
+	}
+
+do_cached:	
+	status = centry->status;
+
+	DEBUG(10,("query_user_list: [Cached] - cached list for domain %s status: %s\n",
+		domain->name, nt_errstr(status) ));
+
+	centry_free(centry);
+	return status;
+
+do_query:
+	*num_entries = 0;
+	*info = NULL;
+
+	/* Return status value returned by seq number check */
+
+	if (!NT_STATUS_IS_OK(domain->last_status))
+		return domain->last_status;
+
+	/* Put the query_user_list() in a retry loop.  There appears to be
+	 * some bug either with Windows 2000 or Samba's handling of large
+	 * rpc replies.  This manifests itself as sudden disconnection
+	 * at a random point in the enumeration of a large (60k) user list.
+	 * The retry loop simply tries the operation again. )-:  It's not
+	 * pretty but an acceptable workaround until we work out what the
+	 * real problem is. */
+
+	retry = 0;
+	do {
+
+		DEBUG(10,("query_user_list: [Cached] - doing backend query for list for domain %s\n",
+			domain->name ));
+
+		status = domain->backend->query_user_list(domain, mem_ctx, num_entries, info);
+		if (!NT_STATUS_IS_OK(status)) {
+			DEBUG(3, ("query_user_list: returned 0x%08x, "
+				  "retrying\n", NT_STATUS_V(status)));
+		}
+		if (NT_STATUS_EQUAL(status, NT_STATUS_UNSUCCESSFUL)) {
+			DEBUG(3, ("query_user_list: flushing "
+				  "connection cache\n"));
+			invalidate_cm_connection(&domain->conn);
+		}
+
+	} while (NT_STATUS_V(status) == NT_STATUS_V(NT_STATUS_UNSUCCESSFUL) && 
+		 (retry++ < 5));
+
+	/* and save it */
+	refresh_sequence_number(domain, False);
+	centry = centry_start(domain, status);
+	if (!centry)
+		goto skip_save;
+	centry_put_uint32(centry, *num_entries);
+	for (i=0; i<(*num_entries); i++) {
+		centry_put_string(centry, (*info)[i].acct_name);
+		centry_put_string(centry, (*info)[i].full_name);
+		centry_put_string(centry, (*info)[i].homedir);
+		centry_put_string(centry, (*info)[i].shell);
+		centry_put_sid(centry, &(*info)[i].user_sid);
+		centry_put_sid(centry, &(*info)[i].group_sid);
+		if (domain->backend && domain->backend->consistent) {
+			/* when the backend is consistent we can pre-prime some mappings */
+			wcache_save_name_to_sid(domain, NT_STATUS_OK, 
+						domain->name,
+						(*info)[i].acct_name, 
+						&(*info)[i].user_sid,
+						SID_NAME_USER);
+			wcache_save_sid_to_name(domain, NT_STATUS_OK, 
+						&(*info)[i].user_sid,
+						domain->name,
+						(*info)[i].acct_name, 
+						SID_NAME_USER);
+			wcache_save_user(domain, NT_STATUS_OK, &(*info)[i]);
+		}
+	}	
+	centry_end(centry, "UL/%s", domain->name);
+	centry_free(centry);
+
+skip_save:
+	return status;
+}
+
+/* list all domain groups */
+static NTSTATUS enum_dom_groups(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				uint32 *num_entries, 
+				struct acct_info **info)
+{
+	struct winbind_cache *cache = get_cache(domain);
+	struct cache_entry *centry = NULL;
+	NTSTATUS status;
+	unsigned int i;
+
+	if (!cache->tdb)
+		goto do_query;
+
+	centry = wcache_fetch(cache, domain, "GL/%s/domain", domain->name);
+	if (!centry)
+		goto do_query;
+
+	*num_entries = centry_uint32(centry);
+	
+	if (*num_entries == 0)
+		goto do_cached;
+
+	(*info) = TALLOC_ARRAY(mem_ctx, struct acct_info, *num_entries);
+	if (! (*info))
+		smb_panic("enum_dom_groups out of memory");
+	for (i=0; i<(*num_entries); i++) {
+		fstrcpy((*info)[i].acct_name, centry_string(centry, mem_ctx));
+		fstrcpy((*info)[i].acct_desc, centry_string(centry, mem_ctx));
+		(*info)[i].rid = centry_uint32(centry);
+	}
+
+do_cached:	
+	status = centry->status;
+
+	DEBUG(10,("enum_dom_groups: [Cached] - cached list for domain %s status: %s\n",
+		domain->name, nt_errstr(status) ));
+
+	centry_free(centry);
+	return status;
+
+do_query:
+	*num_entries = 0;
+	*info = NULL;
+
+	/* Return status value returned by seq number check */
+
+	if (!NT_STATUS_IS_OK(domain->last_status))
+		return domain->last_status;
+
+	DEBUG(10,("enum_dom_groups: [Cached] - doing backend query for list for domain %s\n",
+		domain->name ));
+
+	status = domain->backend->enum_dom_groups(domain, mem_ctx, num_entries, info);
+
+	/* and save it */
+	refresh_sequence_number(domain, False);
+	centry = centry_start(domain, status);
+	if (!centry)
+		goto skip_save;
+	centry_put_uint32(centry, *num_entries);
+	for (i=0; i<(*num_entries); i++) {
+		centry_put_string(centry, (*info)[i].acct_name);
+		centry_put_string(centry, (*info)[i].acct_desc);
+		centry_put_uint32(centry, (*info)[i].rid);
+	}	
+	centry_end(centry, "GL/%s/domain", domain->name);
+	centry_free(centry);
+
+skip_save:
+	return status;
+}
+
+/* list all domain groups */
+static NTSTATUS enum_local_groups(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				uint32 *num_entries, 
+				struct acct_info **info)
+{
+	struct winbind_cache *cache = get_cache(domain);
+	struct cache_entry *centry = NULL;
+	NTSTATUS status;
+	unsigned int i;
+
+	if (!cache->tdb)
+		goto do_query;
+
+	centry = wcache_fetch(cache, domain, "GL/%s/local", domain->name);
+	if (!centry)
+		goto do_query;
+
+	*num_entries = centry_uint32(centry);
+	
+	if (*num_entries == 0)
+		goto do_cached;
+
+	(*info) = TALLOC_ARRAY(mem_ctx, struct acct_info, *num_entries);
+	if (! (*info))
+		smb_panic("enum_dom_groups out of memory");
+	for (i=0; i<(*num_entries); i++) {
+		fstrcpy((*info)[i].acct_name, centry_string(centry, mem_ctx));
+		fstrcpy((*info)[i].acct_desc, centry_string(centry, mem_ctx));
+		(*info)[i].rid = centry_uint32(centry);
+	}
+
+do_cached:	
+
+	/* If we are returning cached data and the domain controller
+	   is down then we don't know whether the data is up to date
+	   or not.  Return NT_STATUS_MORE_PROCESSING_REQUIRED to
+	   indicate this. */
+
+	if (wcache_server_down(domain)) {
+		DEBUG(10, ("enum_local_groups: returning cached user list and server was down\n"));
+		status = NT_STATUS_MORE_PROCESSING_REQUIRED;
+	} else
+		status = centry->status;
+
+	DEBUG(10,("enum_local_groups: [Cached] - cached list for domain %s status: %s\n",
+		domain->name, nt_errstr(status) ));
+
+	centry_free(centry);
+	return status;
+
+do_query:
+	*num_entries = 0;
+	*info = NULL;
+
+	/* Return status value returned by seq number check */
+
+	if (!NT_STATUS_IS_OK(domain->last_status))
+		return domain->last_status;
+
+	DEBUG(10,("enum_local_groups: [Cached] - doing backend query for list for domain %s\n",
+		domain->name ));
+
+	status = domain->backend->enum_local_groups(domain, mem_ctx, num_entries, info);
+
+	/* and save it */
+	refresh_sequence_number(domain, False);
+	centry = centry_start(domain, status);
+	if (!centry)
+		goto skip_save;
+	centry_put_uint32(centry, *num_entries);
+	for (i=0; i<(*num_entries); i++) {
+		centry_put_string(centry, (*info)[i].acct_name);
+		centry_put_string(centry, (*info)[i].acct_desc);
+		centry_put_uint32(centry, (*info)[i].rid);
+	}
+	centry_end(centry, "GL/%s/local", domain->name);
+	centry_free(centry);
+
+skip_save:
+	return status;
+}
+
+/* convert a single name to a sid in a domain */
+static NTSTATUS name_to_sid(struct winbindd_domain *domain,
+			    TALLOC_CTX *mem_ctx,
+			    const char *domain_name,
+			    const char *name,
+			    DOM_SID *sid,
+			    enum lsa_SidType *type)
+{
+	struct winbind_cache *cache = get_cache(domain);
+	struct cache_entry *centry = NULL;
+	NTSTATUS status;
+	fstring uname;
+
+	if (!cache->tdb)
+		goto do_query;
+
+	fstrcpy(uname, name);
+	strupper_m(uname);
+	centry = wcache_fetch(cache, domain, "NS/%s/%s", domain_name, uname);
+	if (!centry)
+		goto do_query;
+	*type = (enum lsa_SidType)centry_uint32(centry);
+	status = centry->status;
+	if (NT_STATUS_IS_OK(status)) {
+		centry_sid(centry, mem_ctx, sid);
+	}
+
+	DEBUG(10,("name_to_sid: [Cached] - cached name for domain %s status: %s\n",
+		domain->name, nt_errstr(status) ));
+
+	centry_free(centry);
+	return status;
+
+do_query:
+	ZERO_STRUCTP(sid);
+
+	/* If the seq number check indicated that there is a problem
+	 * with this DC, then return that status... except for
+	 * access_denied.  This is special because the dc may be in
+	 * "restrict anonymous = 1" mode, in which case it will deny
+	 * most unauthenticated operations, but *will* allow the LSA
+	 * name-to-sid that we try as a fallback. */
+
+	if (!(NT_STATUS_IS_OK(domain->last_status)
+	      || NT_STATUS_EQUAL(domain->last_status, NT_STATUS_ACCESS_DENIED)))
+		return domain->last_status;
+
+	DEBUG(10,("name_to_sid: [Cached] - doing backend query for name for domain %s\n",
+		domain->name ));
+
+	status = domain->backend->name_to_sid(domain, mem_ctx, domain_name, name, sid, type);
+
+	/* and save it */
+	refresh_sequence_number(domain, False);
+
+	if (domain->online && !is_null_sid(sid)) {
+		wcache_save_name_to_sid(domain, status, domain_name, name, sid, *type);
+	}
+
+	if (NT_STATUS_IS_OK(status)) {
+		strupper_m(CONST_DISCARD(char *,domain_name));
+		strlower_m(CONST_DISCARD(char *,name));
+		wcache_save_sid_to_name(domain, status, sid, domain_name, name, *type);
+	}
+
+	return status;
+}
+
+/* convert a sid to a user or group name. The sid is guaranteed to be in the domain
+   given */
+static NTSTATUS sid_to_name(struct winbindd_domain *domain,
+			    TALLOC_CTX *mem_ctx,
+			    const DOM_SID *sid,
+			    char **domain_name,
+			    char **name,
+			    enum lsa_SidType *type)
+{
+	struct winbind_cache *cache = get_cache(domain);
+	struct cache_entry *centry = NULL;
+	NTSTATUS status;
+	fstring sid_string;
+
+	if (!cache->tdb)
+		goto do_query;
+
+	centry = wcache_fetch(cache, domain, "SN/%s", sid_to_string(sid_string, sid));
+	if (!centry)
+		goto do_query;
+	if (NT_STATUS_IS_OK(centry->status)) {
+		*type = (enum lsa_SidType)centry_uint32(centry);
+		*domain_name = centry_string(centry, mem_ctx);
+		*name = centry_string(centry, mem_ctx);
+	}
+	status = centry->status;
+
+	DEBUG(10,("sid_to_name: [Cached] - cached name for domain %s status: %s\n",
+		domain->name, nt_errstr(status) ));
+
+	centry_free(centry);
+	return status;
+
+do_query:
+	*name = NULL;
+	*domain_name = NULL;
+
+	/* If the seq number check indicated that there is a problem
+	 * with this DC, then return that status... except for
+	 * access_denied.  This is special because the dc may be in
+	 * "restrict anonymous = 1" mode, in which case it will deny
+	 * most unauthenticated operations, but *will* allow the LSA
+	 * sid-to-name that we try as a fallback. */
+
+	if (!(NT_STATUS_IS_OK(domain->last_status)
+	      || NT_STATUS_EQUAL(domain->last_status, NT_STATUS_ACCESS_DENIED)))
+		return domain->last_status;
+
+	DEBUG(10,("sid_to_name: [Cached] - doing backend query for name for domain %s\n",
+		domain->name ));
+
+	status = domain->backend->sid_to_name(domain, mem_ctx, sid, domain_name, name, type);
+
+	/* and save it */
+	refresh_sequence_number(domain, False);
+	wcache_save_sid_to_name(domain, status, sid, *domain_name, *name, *type);
+
+	/* We can't save the name to sid mapping here, as with sid history a
+	 * later name2sid would give the wrong sid. */
+
+	return status;
+}
+
+static NTSTATUS rids_to_names(struct winbindd_domain *domain,
+			      TALLOC_CTX *mem_ctx,
+			      const DOM_SID *domain_sid,
+			      uint32 *rids,
+			      size_t num_rids,
+			      char **domain_name,
+			      char ***names,
+			      enum lsa_SidType **types)
+{
+	struct winbind_cache *cache = get_cache(domain);
+	size_t i;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+	BOOL have_mapped;
+	BOOL have_unmapped;
+
+	*domain_name = NULL;
+	*names = NULL;
+	*types = NULL;
+
+	if (!cache->tdb) {
+		goto do_query;
+	}
+
+	if (num_rids == 0) {
+		return NT_STATUS_OK;
+	}
+
+	*names = TALLOC_ARRAY(mem_ctx, char *, num_rids);
+	*types = TALLOC_ARRAY(mem_ctx, enum lsa_SidType, num_rids);
+
+	if ((*names == NULL) || (*types == NULL)) {
+		result = NT_STATUS_NO_MEMORY;
+		goto error;
+	}
+
+	have_mapped = have_unmapped = False;
+
+	for (i=0; i<num_rids; i++) {
+		DOM_SID sid;
+		struct cache_entry *centry;
+
+		if (!sid_compose(&sid, domain_sid, rids[i])) {
+			result = NT_STATUS_INTERNAL_ERROR;
+			goto error;
+		}
+
+		centry = wcache_fetch(cache, domain, "SN/%s",
+				      sid_string_static(&sid));
+		if (!centry) {
+			goto do_query;
+		}
+
+		(*types)[i] = SID_NAME_UNKNOWN;
+		(*names)[i] = talloc_strdup(*names, "");
+
+		if (NT_STATUS_IS_OK(centry->status)) {
+			char *dom;
+			have_mapped = True;
+			(*types)[i] = (enum lsa_SidType)centry_uint32(centry);
+			dom = centry_string(centry, mem_ctx);
+			if (*domain_name == NULL) {
+				*domain_name = dom;
+			} else {
+				talloc_free(dom);
+			}
+			(*names)[i] = centry_string(centry, *names);
+		} else {
+			have_unmapped = True;
+		}
+
+		centry_free(centry);
+	}
+
+	if (!have_mapped) {
+		return NT_STATUS_NONE_MAPPED;
+	}
+	if (!have_unmapped) {
+		return NT_STATUS_OK;
+	}
+	return STATUS_SOME_UNMAPPED;
+
+ do_query:
+
+	TALLOC_FREE(*names);
+	TALLOC_FREE(*types);
+
+	result = domain->backend->rids_to_names(domain, mem_ctx, domain_sid,
+						rids, num_rids, domain_name,
+						names, types);
+
+	if (!NT_STATUS_IS_OK(result) &&
+	    !NT_STATUS_EQUAL(result, STATUS_SOME_UNMAPPED)) {
+		return result;
+	}
+
+	refresh_sequence_number(domain, False);
+
+	for (i=0; i<num_rids; i++) {
+		DOM_SID sid;
+		NTSTATUS status;
+
+		if (!sid_compose(&sid, domain_sid, rids[i])) {
+			result = NT_STATUS_INTERNAL_ERROR;
+			goto error;
+		}
+
+		status = (*types)[i] == SID_NAME_UNKNOWN ?
+			NT_STATUS_NONE_MAPPED : NT_STATUS_OK;
+
+		wcache_save_sid_to_name(domain, status, &sid, *domain_name,
+					(*names)[i], (*types)[i]);
+	}
+
+	return result;
+
+ error:
+	
+	TALLOC_FREE(*names);
+	TALLOC_FREE(*types);
+	return result;
+}
+
+/* Lookup user information from a rid */
+static NTSTATUS query_user(struct winbindd_domain *domain, 
+			   TALLOC_CTX *mem_ctx, 
+			   const DOM_SID *user_sid, 
+			   WINBIND_USERINFO *info)
+{
+	struct winbind_cache *cache = get_cache(domain);
+	struct cache_entry *centry = NULL;
+	NTSTATUS status;
+
+	if (!cache->tdb)
+		goto do_query;
+
+	centry = wcache_fetch(cache, domain, "U/%s", sid_string_static(user_sid));
+	
+	/* If we have an access denied cache entry and a cached info3 in the
+           samlogon cache then do a query.  This will force the rpc back end
+           to return the info3 data. */
+
+	if (NT_STATUS_V(domain->last_status) == NT_STATUS_V(NT_STATUS_ACCESS_DENIED) &&
+	    netsamlogon_cache_have(user_sid)) {
+		DEBUG(10, ("query_user: cached access denied and have cached info3\n"));
+		domain->last_status = NT_STATUS_OK;
+		centry_free(centry);
+		goto do_query;
+	}
+	
+	if (!centry)
+		goto do_query;
+
+	info->acct_name = centry_string(centry, mem_ctx);
+	info->full_name = centry_string(centry, mem_ctx);
+	info->homedir = centry_string(centry, mem_ctx);
+	info->shell = centry_string(centry, mem_ctx);
+	info->primary_gid = centry_uint32(centry);
+	centry_sid(centry, mem_ctx, &info->user_sid);
+	centry_sid(centry, mem_ctx, &info->group_sid);
+	status = centry->status;
+
+	DEBUG(10,("query_user: [Cached] - cached info for domain %s status: %s\n",
+		domain->name, nt_errstr(status) ));
+
+	centry_free(centry);
+	return status;
+
+do_query:
+	ZERO_STRUCTP(info);
+
+	/* Return status value returned by seq number check */
+
+	if (!NT_STATUS_IS_OK(domain->last_status))
+		return domain->last_status;
+	
+	DEBUG(10,("query_user: [Cached] - doing backend query for info for domain %s\n",
+		domain->name ));
+
+	status = domain->backend->query_user(domain, mem_ctx, user_sid, info);
+
+	/* and save it */
+	refresh_sequence_number(domain, False);
+	wcache_save_user(domain, status, info);
+
+	return status;
+}
+
+
+/* Lookup groups a user is a member of. */
+static NTSTATUS lookup_usergroups(struct winbindd_domain *domain,
+				  TALLOC_CTX *mem_ctx,
+				  const DOM_SID *user_sid, 
+				  uint32 *num_groups, DOM_SID **user_gids)
+{
+	struct winbind_cache *cache = get_cache(domain);
+	struct cache_entry *centry = NULL;
+	NTSTATUS status;
+	unsigned int i;
+	fstring sid_string;
+
+	if (!cache->tdb)
+		goto do_query;
+
+	centry = wcache_fetch(cache, domain, "UG/%s", sid_to_string(sid_string, user_sid));
+	
+	/* If we have an access denied cache entry and a cached info3 in the
+           samlogon cache then do a query.  This will force the rpc back end
+           to return the info3 data. */
+
+	if (NT_STATUS_V(domain->last_status) == NT_STATUS_V(NT_STATUS_ACCESS_DENIED) &&
+	    netsamlogon_cache_have(user_sid)) {
+		DEBUG(10, ("lookup_usergroups: cached access denied and have cached info3\n"));
+		domain->last_status = NT_STATUS_OK;
+		centry_free(centry);
+		goto do_query;
+	}
+	
+	if (!centry)
+		goto do_query;
+
+	*num_groups = centry_uint32(centry);
+	
+	if (*num_groups == 0)
+		goto do_cached;
+
+	(*user_gids) = TALLOC_ARRAY(mem_ctx, DOM_SID, *num_groups);
+	if (! (*user_gids))
+		smb_panic("lookup_usergroups out of memory");
+	for (i=0; i<(*num_groups); i++) {
+		centry_sid(centry, mem_ctx, &(*user_gids)[i]);
+	}
+
+do_cached:	
+	status = centry->status;
+
+	DEBUG(10,("lookup_usergroups: [Cached] - cached info for domain %s status: %s\n",
+		domain->name, nt_errstr(status) ));
+
+	centry_free(centry);
+	return status;
+
+do_query:
+	(*num_groups) = 0;
+	(*user_gids) = NULL;
+
+	/* Return status value returned by seq number check */
+
+	if (!NT_STATUS_IS_OK(domain->last_status))
+		return domain->last_status;
+
+	DEBUG(10,("lookup_usergroups: [Cached] - doing backend query for info for domain %s\n",
+		domain->name ));
+
+	status = domain->backend->lookup_usergroups(domain, mem_ctx, user_sid, num_groups, user_gids);
+
+	/* and save it */
+	refresh_sequence_number(domain, False);
+	centry = centry_start(domain, status);
+	if (!centry)
+		goto skip_save;
+	centry_put_uint32(centry, *num_groups);
+	for (i=0; i<(*num_groups); i++) {
+		centry_put_sid(centry, &(*user_gids)[i]);
+	}	
+	centry_end(centry, "UG/%s", sid_to_string(sid_string, user_sid));
+	centry_free(centry);
+
+skip_save:
+	return status;
+}
+
+static NTSTATUS lookup_useraliases(struct winbindd_domain *domain,
+				   TALLOC_CTX *mem_ctx,
+				   uint32 num_sids, const DOM_SID *sids,
+				   uint32 *num_aliases, uint32 **alias_rids)
+{
+	struct winbind_cache *cache = get_cache(domain);
+	struct cache_entry *centry = NULL;
+	NTSTATUS status;
+	char *sidlist = talloc_strdup(mem_ctx, "");
+	int i;
+
+	if (!cache->tdb)
+		goto do_query;
+
+	if (num_sids == 0) {
+		*num_aliases = 0;
+		*alias_rids = NULL;
+		return NT_STATUS_OK;
+	}
+
+	/* We need to cache indexed by the whole list of SIDs, the aliases
+	 * resulting might come from any of the SIDs. */
+
+	for (i=0; i<num_sids; i++) {
+		sidlist = talloc_asprintf(mem_ctx, "%s/%s", sidlist,
+					  sid_string_static(&sids[i]));
+		if (sidlist == NULL)
+			return NT_STATUS_NO_MEMORY;
+	}
+
+	centry = wcache_fetch(cache, domain, "UA%s", sidlist);
+
+	if (!centry)
+		goto do_query;
+
+	*num_aliases = centry_uint32(centry);
+	*alias_rids = NULL;
+
+	if (*num_aliases) {
+		(*alias_rids) = TALLOC_ARRAY(mem_ctx, uint32, *num_aliases);
+
+		if ((*alias_rids) == NULL) {
+			centry_free(centry);
+			return NT_STATUS_NO_MEMORY;
+		}
+	} else {
+		(*alias_rids) = NULL;
+	}
+
+	for (i=0; i<(*num_aliases); i++)
+		(*alias_rids)[i] = centry_uint32(centry);
+
+	status = centry->status;
+
+	DEBUG(10,("lookup_useraliases: [Cached] - cached info for domain: %s "
+		  "status %s\n", domain->name, nt_errstr(status)));
+
+	centry_free(centry);
+	return status;
+
+ do_query:
+	(*num_aliases) = 0;
+	(*alias_rids) = NULL;
+
+	if (!NT_STATUS_IS_OK(domain->last_status))
+		return domain->last_status;
+
+	DEBUG(10,("lookup_usergroups: [Cached] - doing backend query for info "
+		  "for domain %s\n", domain->name ));
+
+	status = domain->backend->lookup_useraliases(domain, mem_ctx,
+						     num_sids, sids,
+						     num_aliases, alias_rids);
+
+	/* and save it */
+	refresh_sequence_number(domain, False);
+	centry = centry_start(domain, status);
+	if (!centry)
+		goto skip_save;
+	centry_put_uint32(centry, *num_aliases);
+	for (i=0; i<(*num_aliases); i++)
+		centry_put_uint32(centry, (*alias_rids)[i]);
+	centry_end(centry, "UA%s", sidlist);
+	centry_free(centry);
+
+ skip_save:
+	return status;
+}
+
+
+static NTSTATUS lookup_groupmem(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				const DOM_SID *group_sid, uint32 *num_names, 
+				DOM_SID **sid_mem, char ***names, 
+				uint32 **name_types)
+{
+	struct winbind_cache *cache = get_cache(domain);
+	struct cache_entry *centry = NULL;
+	NTSTATUS status;
+	unsigned int i;
+	fstring sid_string;
+
+	if (!cache->tdb)
+		goto do_query;
+
+	centry = wcache_fetch(cache, domain, "GM/%s", sid_to_string(sid_string, group_sid));
+	if (!centry)
+		goto do_query;
+
+	*num_names = centry_uint32(centry);
+	
+	if (*num_names == 0)
+		goto do_cached;
+
+	(*sid_mem) = TALLOC_ARRAY(mem_ctx, DOM_SID, *num_names);
+	(*names) = TALLOC_ARRAY(mem_ctx, char *, *num_names);
+	(*name_types) = TALLOC_ARRAY(mem_ctx, uint32, *num_names);
+
+	if (! (*sid_mem) || ! (*names) || ! (*name_types)) {
+		smb_panic("lookup_groupmem out of memory");
+	}
+
+	for (i=0; i<(*num_names); i++) {
+		centry_sid(centry, mem_ctx, &(*sid_mem)[i]);
+		(*names)[i] = centry_string(centry, mem_ctx);
+		(*name_types)[i] = centry_uint32(centry);
+	}
+
+do_cached:	
+	status = centry->status;
+
+	DEBUG(10,("lookup_groupmem: [Cached] - cached info for domain %s status: %s\n",
+		domain->name, nt_errstr(status)));
+
+	centry_free(centry);
+	return status;
+
+do_query:
+	(*num_names) = 0;
+	(*sid_mem) = NULL;
+	(*names) = NULL;
+	(*name_types) = NULL;
+	
+	/* Return status value returned by seq number check */
+
+	if (!NT_STATUS_IS_OK(domain->last_status))
+		return domain->last_status;
+
+	DEBUG(10,("lookup_groupmem: [Cached] - doing backend query for info for domain %s\n",
+		domain->name ));
+
+	status = domain->backend->lookup_groupmem(domain, mem_ctx, group_sid, num_names, 
+						  sid_mem, names, name_types);
+
+	/* and save it */
+	refresh_sequence_number(domain, False);
+	centry = centry_start(domain, status);
+	if (!centry)
+		goto skip_save;
+	centry_put_uint32(centry, *num_names);
+	for (i=0; i<(*num_names); i++) {
+		centry_put_sid(centry, &(*sid_mem)[i]);
+		centry_put_string(centry, (*names)[i]);
+		centry_put_uint32(centry, (*name_types)[i]);
+	}	
+	centry_end(centry, "GM/%s", sid_to_string(sid_string, group_sid));
+	centry_free(centry);
+
+skip_save:
+	return status;
+}
+
+/* find the sequence number for a domain */
+static NTSTATUS sequence_number(struct winbindd_domain *domain, uint32 *seq)
+{
+	refresh_sequence_number(domain, False);
+
+	*seq = domain->sequence_number;
+
+	return NT_STATUS_OK;
+}
+
+/* enumerate trusted domains 
+ * (we need to have the list of trustdoms in the cache when we go offline) -
+ * Guenther */
+static NTSTATUS trusted_domains(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				uint32 *num_domains,
+				char ***names,
+				char ***alt_names,
+				DOM_SID **dom_sids)
+{
+ 	struct winbind_cache *cache = get_cache(domain);
+ 	struct cache_entry *centry = NULL;
+ 	NTSTATUS status;
+	int i;
+ 
+	if (!cache->tdb)
+		goto do_query;
+ 
+	centry = wcache_fetch(cache, domain, "TRUSTDOMS/%s", domain->name);
+	
+	if (!centry) {
+ 		goto do_query;
+	}
+ 
+	*num_domains = centry_uint32(centry);
+	
+	if (*num_domains) {
+		(*names) 	= TALLOC_ARRAY(mem_ctx, char *, *num_domains);
+		(*alt_names) 	= TALLOC_ARRAY(mem_ctx, char *, *num_domains);
+		(*dom_sids) 	= TALLOC_ARRAY(mem_ctx, DOM_SID, *num_domains);
+ 
+		if (! (*dom_sids) || ! (*names) || ! (*alt_names)) {
+			smb_panic("trusted_domains out of memory");
+ 		}
+	} else {
+		(*names) = NULL;
+		(*alt_names) = NULL;
+		(*dom_sids) = NULL;
+	}
+ 
+	for (i=0; i<(*num_domains); i++) {
+		(*names)[i] = centry_string(centry, mem_ctx);
+		(*alt_names)[i] = centry_string(centry, mem_ctx);
+		centry_sid(centry, mem_ctx, &(*dom_sids)[i]);
+	}
+
+ 	status = centry->status;
+ 
+	DEBUG(10,("trusted_domains: [Cached] - cached info for domain %s (%d trusts) status: %s\n",
+		domain->name, *num_domains, nt_errstr(status) ));
+ 
+ 	centry_free(centry);
+ 	return status;
+ 
+do_query:
+	(*num_domains) = 0;
+	(*dom_sids) = NULL;
+	(*names) = NULL;
+	(*alt_names) = NULL;
+ 
+	/* Return status value returned by seq number check */
+
+ 	if (!NT_STATUS_IS_OK(domain->last_status))
+ 		return domain->last_status;
+	
+	DEBUG(10,("trusted_domains: [Cached] - doing backend query for info for domain %s\n",
+		domain->name ));
+ 
+	status = domain->backend->trusted_domains(domain, mem_ctx, num_domains,
+						names, alt_names, dom_sids);
+
+	/* no trusts gives NT_STATUS_NO_MORE_ENTRIES resetting to NT_STATUS_OK
+	 * so that the generic centry handling still applies correctly -
+	 * Guenther*/
+
+	if (!NT_STATUS_IS_ERR(status)) {
+		status = NT_STATUS_OK;
+	}
+
+	/* and save it */
+	refresh_sequence_number(domain, False);
+ 
+ 	centry = centry_start(domain, status);
+	if (!centry)
+		goto skip_save;
+
+	centry_put_uint32(centry, *num_domains);
+
+	for (i=0; i<(*num_domains); i++) {
+		centry_put_string(centry, (*names)[i]);
+		centry_put_string(centry, (*alt_names)[i]);
+		centry_put_sid(centry, &(*dom_sids)[i]);
+ 	}
+	
+	centry_end(centry, "TRUSTDOMS/%s", domain->name);
+ 
+ 	centry_free(centry);
+ 
+skip_save:
+ 	return status;
+}	
+
+/* get lockout policy */
+static NTSTATUS lockout_policy(struct winbindd_domain *domain,
+ 			       TALLOC_CTX *mem_ctx,
+			       SAM_UNK_INFO_12 *policy){
+ 	struct winbind_cache *cache = get_cache(domain);
+ 	struct cache_entry *centry = NULL;
+ 	NTSTATUS status;
+ 
+	if (!cache->tdb)
+		goto do_query;
+ 
+	centry = wcache_fetch(cache, domain, "LOC_POL/%s", domain->name);
+	
+	if (!centry)
+ 		goto do_query;
+ 
+	policy->duration = centry_nttime(centry);
+	policy->reset_count = centry_nttime(centry);
+	policy->bad_attempt_lockout = centry_uint16(centry);
+ 
+ 	status = centry->status;
+ 
+	DEBUG(10,("lockout_policy: [Cached] - cached info for domain %s status: %s\n",
+		domain->name, nt_errstr(status) ));
+ 
+ 	centry_free(centry);
+ 	return status;
+ 
+do_query:
+	ZERO_STRUCTP(policy);
+ 
+	/* Return status value returned by seq number check */
+
+ 	if (!NT_STATUS_IS_OK(domain->last_status))
+ 		return domain->last_status;
+	
+	DEBUG(10,("lockout_policy: [Cached] - doing backend query for info for domain %s\n",
+		domain->name ));
+ 
+	status = domain->backend->lockout_policy(domain, mem_ctx, policy); 
+ 
+	/* and save it */
+ 	refresh_sequence_number(domain, False);
+	wcache_save_lockout_policy(domain, status, policy);
+ 
+ 	return status;
+}
+ 
+/* get password policy */
+static NTSTATUS password_policy(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				SAM_UNK_INFO_1 *policy)
+{
+	struct winbind_cache *cache = get_cache(domain);
+	struct cache_entry *centry = NULL;
+	NTSTATUS status;
+
+	if (!cache->tdb)
+		goto do_query;
+ 
+	centry = wcache_fetch(cache, domain, "PWD_POL/%s", domain->name);
+	
+	if (!centry)
+		goto do_query;
+
+	policy->min_length_password = centry_uint16(centry);
+	policy->password_history = centry_uint16(centry);
+	policy->password_properties = centry_uint32(centry);
+	policy->expire = centry_nttime(centry);
+	policy->min_passwordage = centry_nttime(centry);
+
+	status = centry->status;
+
+	DEBUG(10,("lockout_policy: [Cached] - cached info for domain %s status: %s\n",
+		domain->name, nt_errstr(status) ));
+
+	centry_free(centry);
+	return status;
+
+do_query:
+	ZERO_STRUCTP(policy);
+
+	/* Return status value returned by seq number check */
+
+	if (!NT_STATUS_IS_OK(domain->last_status))
+		return domain->last_status;
+	
+	DEBUG(10,("password_policy: [Cached] - doing backend query for info for domain %s\n",
+		domain->name ));
+
+	status = domain->backend->password_policy(domain, mem_ctx, policy); 
+
+	/* and save it */
+	refresh_sequence_number(domain, False);
+	if (NT_STATUS_IS_OK(status)) {
+		wcache_save_password_policy(domain, status, policy);
+	}
+
+	return status;
+}
+
+
+/* Invalidate cached user and group lists coherently */
+
+static int traverse_fn(TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf, 
+		       void *state)
+{
+	if (strncmp(kbuf.dptr, "UL/", 3) == 0 ||
+	    strncmp(kbuf.dptr, "GL/", 3) == 0)
+		tdb_delete(the_tdb, kbuf);
+
+	return 0;
+}
+
+/* Invalidate the getpwnam and getgroups entries for a winbindd domain */
+
+void wcache_invalidate_samlogon(struct winbindd_domain *domain, 
+				NET_USER_INFO_3 *info3)
+{
+	struct winbind_cache *cache;
+
+	/* dont clear cached U/SID and UG/SID entries when we want to logon
+	 * offline - gd */
+
+	if (lp_winbind_offline_logon()) {
+		return;
+	}
+
+	if (!domain)
+		return;
+
+	cache = get_cache(domain);
+	netsamlogon_clear_cached_user(cache->tdb, info3);
+}
+
+void wcache_invalidate_cache(void)
+{
+	struct winbindd_domain *domain;
+
+	for (domain = domain_list(); domain; domain = domain->next) {
+		struct winbind_cache *cache = get_cache(domain);
+
+		DEBUG(10, ("wcache_invalidate_cache: invalidating cache "
+			   "entries for %s\n", domain->name));
+		if (cache)
+			tdb_traverse(cache->tdb, traverse_fn, NULL);
+	}
+}
+
+static BOOL init_wcache(void)
+{
+	if (wcache == NULL) {
+		wcache = SMB_XMALLOC_P(struct winbind_cache);
+		ZERO_STRUCTP(wcache);
+	}
+
+	if (wcache->tdb != NULL)
+		return True;
+
+	/* when working offline we must not clear the cache on restart */
+	wcache->tdb = tdb_open_log(lock_path("winbindd_cache.tdb"),
+				WINBINDD_CACHE_TDB_DEFAULT_HASH_SIZE, 
+				lp_winbind_offline_logon() ? TDB_DEFAULT : (TDB_DEFAULT | TDB_CLEAR_IF_FIRST), 
+				O_RDWR|O_CREAT, 0600);
+
+	if (wcache->tdb == NULL) {
+		DEBUG(0,("Failed to open winbindd_cache.tdb!\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/************************************************************************
+ This is called by the parent to initialize the cache file.
+ We don't need sophisticated locking here as we know we're the
+ only opener.
+************************************************************************/
+
+BOOL initialize_winbindd_cache(void)
+{
+	BOOL cache_bad = True;
+	uint32 vers;
+
+	if (!init_wcache()) {
+		DEBUG(0,("initialize_winbindd_cache: init_wcache failed.\n"));
+		return False;
+	}
+
+	/* Check version number. */
+	if (tdb_fetch_uint32(wcache->tdb, WINBINDD_CACHE_VERSION_KEYSTR, &vers) &&
+			vers == WINBINDD_CACHE_VERSION) {
+		cache_bad = False;
+	}
+
+	if (cache_bad) {
+		DEBUG(0,("initialize_winbindd_cache: clearing cache "
+			"and re-creating with version number %d\n",
+			WINBINDD_CACHE_VERSION ));
+
+		tdb_close(wcache->tdb);
+		wcache->tdb = NULL;
+
+		if (unlink(lock_path("winbindd_cache.tdb")) == -1) {
+			DEBUG(0,("initialize_winbindd_cache: unlink %s failed %s ",
+				lock_path("winbindd_cache.tdb"),
+				strerror(errno) ));
+			return False;
+		}
+		if (!init_wcache()) {
+			DEBUG(0,("initialize_winbindd_cache: re-initialization "
+					"init_wcache failed.\n"));
+			return False;
+		}
+
+		/* Write the version. */
+		if (!tdb_store_uint32(wcache->tdb, WINBINDD_CACHE_VERSION_KEYSTR, WINBINDD_CACHE_VERSION)) {
+			DEBUG(0,("initialize_winbindd_cache: version number store failed %s\n",
+				tdb_errorstr(wcache->tdb) ));
+			return False;
+		}
+	}
+
+	tdb_close(wcache->tdb);
+	wcache->tdb = NULL;
+	return True;
+}
+
+void cache_store_response(pid_t pid, struct winbindd_response *response)
+{
+	fstring key_str;
+
+	if (!init_wcache())
+		return;
+
+	DEBUG(10, ("Storing response for pid %d, len %d\n",
+		   pid, response->length));
+
+	fstr_sprintf(key_str, "DR/%d", pid);
+	if (tdb_store(wcache->tdb, string_tdb_data(key_str), 
+		      make_tdb_data((const char *)response, sizeof(*response)),
+		      TDB_REPLACE) == -1)
+		return;
+
+	if (response->length == sizeof(*response))
+		return;
+
+	/* There's extra data */
+
+	DEBUG(10, ("Storing extra data: len=%d\n",
+		   (int)(response->length - sizeof(*response))));
+
+	fstr_sprintf(key_str, "DE/%d", pid);
+	if (tdb_store(wcache->tdb, string_tdb_data(key_str),
+		      make_tdb_data((const char *)response->extra_data.data,
+				    response->length - sizeof(*response)),
+		      TDB_REPLACE) == 0)
+		return;
+
+	/* We could not store the extra data, make sure the tdb does not
+	 * contain a main record with wrong dangling extra data */
+
+	fstr_sprintf(key_str, "DR/%d", pid);
+	tdb_delete(wcache->tdb, string_tdb_data(key_str));
+
+	return;
+}
+
+BOOL cache_retrieve_response(pid_t pid, struct winbindd_response * response)
+{
+	TDB_DATA data;
+	fstring key_str;
+
+	if (!init_wcache())
+		return False;
+
+	DEBUG(10, ("Retrieving response for pid %d\n", pid));
+
+	fstr_sprintf(key_str, "DR/%d", pid);
+	data = tdb_fetch(wcache->tdb, string_tdb_data(key_str));
+
+	if (data.dptr == NULL)
+		return False;
+
+	if (data.dsize != sizeof(*response))
+		return False;
+
+	memcpy(response, data.dptr, data.dsize);
+	SAFE_FREE(data.dptr);
+
+	if (response->length == sizeof(*response)) {
+		response->extra_data.data = NULL;
+		return True;
+	}
+
+	/* There's extra data */
+
+	DEBUG(10, ("Retrieving extra data length=%d\n",
+		   (int)(response->length - sizeof(*response))));
+
+	fstr_sprintf(key_str, "DE/%d", pid);
+	data = tdb_fetch(wcache->tdb, string_tdb_data(key_str));
+
+	if (data.dptr == NULL) {
+		DEBUG(0, ("Did not find extra data\n"));
+		return False;
+	}
+
+	if (data.dsize != (response->length - sizeof(*response))) {
+		DEBUG(0, ("Invalid extra data length: %d\n", (int)data.dsize));
+		SAFE_FREE(data.dptr);
+		return False;
+	}
+
+	dump_data(11, data.dptr, data.dsize);
+
+	response->extra_data.data = data.dptr;
+	return True;
+}
+
+void cache_cleanup_response(pid_t pid)
+{
+	fstring key_str;
+
+	if (!init_wcache())
+		return;
+
+	fstr_sprintf(key_str, "DR/%d", pid);
+	tdb_delete(wcache->tdb, string_tdb_data(key_str));
+
+	fstr_sprintf(key_str, "DE/%d", pid);
+	tdb_delete(wcache->tdb, string_tdb_data(key_str));
+
+	return;
+}
+
+
+BOOL lookup_cached_sid(TALLOC_CTX *mem_ctx, const DOM_SID *sid,
+		       const char **domain_name, const char **name,
+		       enum lsa_SidType *type)
+{
+	struct winbindd_domain *domain;
+	struct winbind_cache *cache;
+	struct cache_entry *centry = NULL;
+	NTSTATUS status;
+
+	domain = find_lookup_domain_from_sid(sid);
+	if (domain == NULL) {
+		return False;
+	}
+
+	cache = get_cache(domain);
+
+	if (cache->tdb == NULL) {
+		return False;
+	}
+
+	centry = wcache_fetch(cache, domain, "SN/%s", sid_string_static(sid));
+	if (centry == NULL) {
+		return False;
+	}
+
+	if (NT_STATUS_IS_OK(centry->status)) {
+		*type = (enum lsa_SidType)centry_uint32(centry);
+		*domain_name = centry_string(centry, mem_ctx);
+		*name = centry_string(centry, mem_ctx);
+	}
+
+	status = centry->status;
+	centry_free(centry);
+	return NT_STATUS_IS_OK(status);
+}
+
+BOOL lookup_cached_name(TALLOC_CTX *mem_ctx,
+			const char *domain_name,
+			const char *name,
+			DOM_SID *sid,
+			enum lsa_SidType *type)
+{
+	struct winbindd_domain *domain;
+	struct winbind_cache *cache;
+	struct cache_entry *centry = NULL;
+	NTSTATUS status;
+	fstring uname;
+
+	domain = find_lookup_domain_from_name(domain_name);
+	if (domain == NULL) {
+		return False;
+	}
+
+	cache = get_cache(domain);
+
+	if (cache->tdb == NULL) {
+		return False;
+	}
+
+	fstrcpy(uname, name);
+	strupper_m(uname);
+	
+	centry = wcache_fetch(cache, domain, "NS/%s/%s", domain_name, uname);
+	if (centry == NULL) {
+		return False;
+	}
+
+	if (NT_STATUS_IS_OK(centry->status)) {
+		*type = (enum lsa_SidType)centry_uint32(centry);
+		centry_sid(centry, mem_ctx, sid);
+	}
+
+	status = centry->status;
+	centry_free(centry);
+	
+	return NT_STATUS_IS_OK(status);
+}
+
+void cache_name2sid(struct winbindd_domain *domain, 
+		    const char *domain_name, const char *name,
+		    enum lsa_SidType type, const DOM_SID *sid)
+{
+	refresh_sequence_number(domain, False);
+	wcache_save_name_to_sid(domain, NT_STATUS_OK, domain_name, name,
+				sid, type);
+}
+
+/* delete all centries that don't have NT_STATUS_OK set */
+/*
+ * The original idea that this cache only contains centries has
+ * been blurred - now other stuff gets put in here. Ensure we
+ * ignore these things on cleanup.
+ */
+
+static int traverse_fn_cleanup(TDB_CONTEXT *the_tdb, TDB_DATA kbuf, 
+			       TDB_DATA dbuf, void *state)
+{
+	struct cache_entry *centry;
+
+	if (is_non_centry_key(kbuf)) {
+		return 0;
+	}
+
+	centry = wcache_fetch_raw(kbuf.dptr);
+	if (!centry) {
+		return 0;
+	}
+
+	if (!NT_STATUS_IS_OK(centry->status)) {
+		DEBUG(10,("deleting centry %s\n", kbuf.dptr));
+		tdb_delete(the_tdb, kbuf);
+	}
+
+	centry_free(centry);
+	return 0;
+}
+
+/* flush the cache */
+void wcache_flush_cache(void)
+{
+	if (!wcache)
+		return;
+	if (wcache->tdb) {
+		tdb_close(wcache->tdb);
+		wcache->tdb = NULL;
+	}
+	if (opt_nocache)
+		return;
+
+	/* when working offline we must not clear the cache on restart */
+	wcache->tdb = tdb_open_log(lock_path("winbindd_cache.tdb"),
+				WINBINDD_CACHE_TDB_DEFAULT_HASH_SIZE, 
+				lp_winbind_offline_logon() ? TDB_DEFAULT : (TDB_DEFAULT | TDB_CLEAR_IF_FIRST), 
+				O_RDWR|O_CREAT, 0600);
+
+	if (!wcache->tdb) {
+		DEBUG(0,("Failed to open winbindd_cache.tdb!\n"));
+		return;
+	}
+
+	tdb_traverse(wcache->tdb, traverse_fn_cleanup, NULL);
+
+	DEBUG(10,("wcache_flush_cache success\n"));
+}
+
+/* Count cached creds */
+
+static int traverse_fn_cached_creds(TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf, 
+			 	    void *state)
+{
+	int *cred_count = (int*)state;
+ 
+	if (strncmp(kbuf.dptr, "CRED/", 5) == 0) {
+		(*cred_count)++;
+	}
+	return 0;
+}
+
+NTSTATUS wcache_count_cached_creds(struct winbindd_domain *domain, int *count)
+{
+	struct winbind_cache *cache = get_cache(domain);
+
+	*count = 0;
+
+	if (!cache->tdb) {
+		return NT_STATUS_INTERNAL_DB_ERROR;
+	}
+ 
+	tdb_traverse(cache->tdb, traverse_fn_cached_creds, (void *)count);
+
+	return NT_STATUS_OK;
+}
+
+struct cred_list {
+	struct cred_list *prev, *next;
+	TDB_DATA key;
+	fstring name;
+	time_t created;
+};
+static struct cred_list *wcache_cred_list;
+
+static int traverse_fn_get_credlist(TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf, 
+				    void *state)
+{
+	struct cred_list *cred;
+
+	if (strncmp(kbuf.dptr, "CRED/", 5) == 0) {
+
+		cred = SMB_MALLOC_P(struct cred_list);
+		if (cred == NULL) {
+			DEBUG(0,("traverse_fn_remove_first_creds: failed to malloc new entry for list\n"));
+			return -1;
+		}
+
+		ZERO_STRUCTP(cred);
+		
+		/* save a copy of the key */
+		
+		fstrcpy(cred->name, kbuf.dptr);		
+		DLIST_ADD(wcache_cred_list, cred);
+	}
+	
+	return 0;
+}
+
+NTSTATUS wcache_remove_oldest_cached_creds(struct winbindd_domain *domain, const DOM_SID *sid) 
+{
+	struct winbind_cache *cache = get_cache(domain);
+	NTSTATUS status;
+	int ret;
+	struct cred_list *cred, *oldest = NULL;
+
+	if (!cache->tdb) {
+		return NT_STATUS_INTERNAL_DB_ERROR;
+	}
+
+	/* we possibly already have an entry */
+ 	if (sid && NT_STATUS_IS_OK(wcache_cached_creds_exist(domain, sid))) {
+	
+		fstring key_str;
+
+		DEBUG(11,("we already have an entry, deleting that\n"));
+
+		fstr_sprintf(key_str, "CRED/%s", sid_string_static(sid));
+
+		tdb_delete(cache->tdb, string_tdb_data(key_str));
+
+		return NT_STATUS_OK;
+	}
+
+	ret = tdb_traverse(cache->tdb, traverse_fn_get_credlist, NULL);
+	if (ret == 0) {
+		return NT_STATUS_OK;
+	} else if ((ret == -1) || (wcache_cred_list == NULL)) {
+		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
+	}
+
+	ZERO_STRUCTP(oldest);
+
+	for (cred = wcache_cred_list; cred; cred = cred->next) {
+
+		TDB_DATA data;
+		time_t t;
+
+		data = tdb_fetch(cache->tdb, make_tdb_data(cred->name, strlen(cred->name)));
+		if (!data.dptr) {
+			DEBUG(10,("wcache_remove_oldest_cached_creds: entry for [%s] not found\n", 
+				cred->name));
+			status = NT_STATUS_OBJECT_NAME_NOT_FOUND;
+			goto done;
+		}
+	
+		t = IVAL(data.dptr, 0);
+		SAFE_FREE(data.dptr);
+
+		if (!oldest) {
+			oldest = SMB_MALLOC_P(struct cred_list);
+			if (oldest == NULL) {
+				status = NT_STATUS_NO_MEMORY;
+				goto done;
+			}
+
+			fstrcpy(oldest->name, cred->name);
+			oldest->created = t;
+			continue;
+		}
+
+		if (t < oldest->created) {
+			fstrcpy(oldest->name, cred->name);
+			oldest->created = t;
+		}
+	}
+
+	if (tdb_delete(cache->tdb, string_tdb_data(oldest->name)) == 0) {
+		status = NT_STATUS_OK;
+	} else {
+		status = NT_STATUS_UNSUCCESSFUL;
+	}
+done:
+	SAFE_FREE(wcache_cred_list);
+	SAFE_FREE(oldest);
+	
+	return status;
+}
+
+/* Change the global online/offline state. */
+BOOL set_global_winbindd_state_offline(void)
+{
+	TDB_DATA data;
+
+	DEBUG(10,("set_global_winbindd_state_offline: offline requested.\n"));
+
+	/* Only go offline if someone has created
+	   the key "WINBINDD_OFFLINE" in the cache tdb. */
+
+	if (wcache == NULL || wcache->tdb == NULL) {
+		DEBUG(10,("set_global_winbindd_state_offline: wcache not open yet.\n"));
+		return False;
+	}
+
+	if (!lp_winbind_offline_logon()) {
+		DEBUG(10,("set_global_winbindd_state_offline: rejecting.\n"));
+		return False;
+	}
+
+	if (global_winbindd_offline_state) {
+		/* Already offline. */
+		return True;
+	}
+
+	data = tdb_fetch_bystring( wcache->tdb, "WINBINDD_OFFLINE" );
+
+	if (!data.dptr || data.dsize != 4) {
+		DEBUG(10,("set_global_winbindd_state_offline: offline state not set.\n"));
+		SAFE_FREE(data.dptr);
+		return False;
+	} else {
+		DEBUG(10,("set_global_winbindd_state_offline: offline state set.\n"));
+		global_winbindd_offline_state = True;
+		SAFE_FREE(data.dptr);
+		return True;
+	}
+}
+
+void set_global_winbindd_state_online(void)
+{
+	DEBUG(10,("set_global_winbindd_state_online: online requested.\n"));
+
+	if (!lp_winbind_offline_logon()) {
+		DEBUG(10,("set_global_winbindd_state_online: rejecting.\n"));
+		return;
+	}
+
+	if (!global_winbindd_offline_state) {
+		/* Already online. */
+		return;
+	}
+	global_winbindd_offline_state = False;
+
+	if (!wcache->tdb) {
+		return;
+	}
+
+	/* Ensure there is no key "WINBINDD_OFFLINE" in the cache tdb. */
+	tdb_delete_bystring(wcache->tdb, "WINBINDD_OFFLINE");
+}
+
+BOOL get_global_winbindd_state_offline(void)
+{
+	return global_winbindd_offline_state;
+}
+
+/* the cache backend methods are exposed via this structure */
+struct winbindd_methods cache_methods = {
+	True,
+	query_user_list,
+	enum_dom_groups,
+	enum_local_groups,
+	name_to_sid,
+	sid_to_name,
+	rids_to_names,
+	query_user,
+	lookup_usergroups,
+	lookup_useraliases,
+	lookup_groupmem,
+	sequence_number,
+	lockout_policy,
+	password_policy,
+	trusted_domains
+};

Copied: branches/samba/upstream/source/nsswitch/winbindd_ccache_access.c (from rev 1928, branches/samba/upstream/source/nsswitch/winbindd_ccache_access.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/winbindd_ccache_access.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/winbindd_ccache_access.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,284 @@
+/*
+   Unix SMB/CIFS implementation.
+
+   Winbind daemon - cached credentials funcions
+
+   Copyright (C) Robert O'Callahan 2006
+   Copyright (C) Jeremy Allison 2006 (minor fixes to fit into Samba and
+				      protect against integer wrap).
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "winbindd.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_WINBIND
+
+static BOOL client_can_access_ccache_entry(uid_t client_uid,
+					struct WINBINDD_MEMORY_CREDS *entry)
+{
+	if (client_uid == entry->uid || client_uid == 0) {
+		DEBUG(10, ("Access granted to uid %d\n", client_uid));
+		return True;
+	}
+
+	DEBUG(1, ("Access denied to uid %d (expected %d)\n", client_uid, entry->uid));
+	return False;
+}
+
+static NTSTATUS do_ntlm_auth_with_hashes(const char *username,
+					const char *domain,
+					const unsigned char lm_hash[LM_HASH_LEN],
+					const unsigned char nt_hash[NT_HASH_LEN],
+					const DATA_BLOB initial_msg,
+					const DATA_BLOB challenge_msg,
+					DATA_BLOB *auth_msg)
+{
+	NTSTATUS status;
+	NTLMSSP_STATE *ntlmssp_state = NULL;
+	DATA_BLOB dummy_msg, reply;
+
+	status = ntlmssp_client_start(&ntlmssp_state);
+
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(1, ("Could not start NTLMSSP client: %s\n",
+			nt_errstr(status)));
+		goto done;
+	}
+
+	status = ntlmssp_set_username(ntlmssp_state, username);
+
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(1, ("Could not set username: %s\n",
+			nt_errstr(status)));
+		goto done;
+	}
+
+	status = ntlmssp_set_domain(ntlmssp_state, domain);
+
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(1, ("Could not set domain: %s\n",
+			nt_errstr(status)));
+		goto done;
+	}
+
+	status = ntlmssp_set_hashes(ntlmssp_state, lm_hash, nt_hash);
+        
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(1, ("Could not set hashes: %s\n",
+			nt_errstr(status)));
+		goto done;
+	}
+
+	/* We need to get our protocol handler into the right state. So first
+	   we ask it to generate the initial message. Actually the client has already
+	   sent its own initial message, so we're going to drop this one on the floor.
+	   The client might have sent a different message, for example with different
+	   negotiation options, but as far as I can tell this won't hurt us. (Unless
+	   the client sent a different username or domain, in which case that's their
+	   problem for telling us the wrong username or domain.)
+	   Since we have a copy of the initial message that the client sent, we could
+	   resolve any discrepancies if we had to.
+	*/
+	dummy_msg = data_blob(NULL, 0);
+	reply = data_blob(NULL, 0);
+	status = ntlmssp_update(ntlmssp_state, dummy_msg, &reply);
+	data_blob_free(&dummy_msg);
+	data_blob_free(&reply);
+
+	if (!NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
+		DEBUG(1, ("Failed to create initial message! [%s]\n",
+			nt_errstr(status)));
+		goto done;
+	}
+
+	/* Now we are ready to handle the server's actual response. */
+	status = ntlmssp_update(ntlmssp_state, challenge_msg, &reply);
+
+	if (!NT_STATUS_EQUAL(status, NT_STATUS_OK)) {
+		DEBUG(1, ("We didn't get a response to the challenge! [%s]\n",
+			nt_errstr(status)));
+		data_blob_free(&reply);
+		goto done;
+	}
+	*auth_msg = reply;
+	status = NT_STATUS_OK;
+
+done:
+	ntlmssp_end(&ntlmssp_state);
+	return status;
+}
+
+static BOOL check_client_uid(struct winbindd_cli_state *state, uid_t uid)
+{
+	int ret;
+	uid_t ret_uid;
+
+	ret_uid = (uid_t)-1;
+
+	ret = sys_getpeereid(state->sock, &ret_uid);
+	if (ret != 0) {
+		DEBUG(1, ("check_client_uid: Could not get socket peer uid: %s; "
+			"denying access\n", strerror(errno)));
+		return False;
+	}
+
+	if (uid != ret_uid) {
+		DEBUG(1, ("check_client_uid: Client lied about its uid: said %d, "
+			"actually was %d; denying access\n",
+			uid, ret_uid));
+		return False;
+	}
+
+	return True;
+}
+
+void winbindd_ccache_ntlm_auth(struct winbindd_cli_state *state)
+{
+	struct winbindd_domain *domain;
+	fstring name_domain, name_user;
+
+	/* Ensure null termination */
+	state->request.data.ccache_ntlm_auth.user[
+			sizeof(state->request.data.ccache_ntlm_auth.user)-1]='\0';
+
+	DEBUG(3, ("[%5lu]: perform NTLM auth on behalf of user %s\n", (unsigned long)state->pid,
+		state->request.data.ccache_ntlm_auth.user));
+
+	/* Parse domain and username */
+
+	if (!canonicalize_username(state->request.data.ccache_ntlm_auth.user,
+				name_domain, name_user)) {
+		DEBUG(5,("winbindd_ccache_ntlm_auth: cannot parse domain and user from name [%s]\n",
+			state->request.data.ccache_ntlm_auth.user));
+		request_error(state);
+		return;
+	}
+
+	domain = find_auth_domain(state, name_domain);
+
+	if (domain == NULL) {
+		DEBUG(5,("winbindd_ccache_ntlm_auth: can't get domain [%s]\n",
+			name_domain));
+		request_error(state);
+		return;
+	}
+
+	if (!check_client_uid(state, state->request.data.ccache_ntlm_auth.uid)) {
+		request_error(state);
+		return;
+	}
+
+	sendto_domain(state, domain);
+}
+
+enum winbindd_result winbindd_dual_ccache_ntlm_auth(struct winbindd_domain *domain,
+						struct winbindd_cli_state *state)
+{
+	NTSTATUS result = NT_STATUS_NOT_SUPPORTED;
+	struct WINBINDD_MEMORY_CREDS *entry;
+	DATA_BLOB initial, challenge, auth;
+	fstring name_domain, name_user;
+	uint32 initial_blob_len, challenge_blob_len, extra_len;
+
+	/* Ensure null termination */
+	state->request.data.ccache_ntlm_auth.user[
+		sizeof(state->request.data.ccache_ntlm_auth.user)-1]='\0';
+
+	DEBUG(3, ("winbindd_dual_ccache_ntlm_auth: [%5lu]: perform NTLM auth on "
+		"behalf of user %s (dual)\n", (unsigned long)state->pid,
+		state->request.data.ccache_ntlm_auth.user));
+
+	/* validate blob lengths */
+	initial_blob_len = state->request.data.ccache_ntlm_auth.initial_blob_len;
+	challenge_blob_len = state->request.data.ccache_ntlm_auth.challenge_blob_len;
+	extra_len = state->request.extra_len;
+
+	if (initial_blob_len > extra_len || challenge_blob_len > extra_len ||
+		initial_blob_len + challenge_blob_len > extra_len ||
+		initial_blob_len + challenge_blob_len < initial_blob_len ||
+		initial_blob_len + challenge_blob_len < challenge_blob_len) {
+
+		DEBUG(10,("winbindd_dual_ccache_ntlm_auth: blob lengths overrun "
+			"or wrap. Buffer [%d+%d > %d]\n",
+			initial_blob_len,
+			challenge_blob_len,
+			extra_len));
+		goto process_result;
+	}
+
+	/* Parse domain and username */
+	if (!parse_domain_user(state->request.data.ccache_ntlm_auth.user, name_domain, name_user)) {
+		DEBUG(10,("winbindd_dual_ccache_ntlm_auth: cannot parse "
+			"domain and user from name [%s]\n",
+			state->request.data.ccache_ntlm_auth.user));
+		goto process_result;
+	}
+
+	entry = find_memory_creds_by_name(state->request.data.ccache_ntlm_auth.user);
+	if (entry == NULL || entry->nt_hash == NULL || entry->lm_hash == NULL) {
+		DEBUG(10,("winbindd_dual_ccache_ntlm_auth: could not find "
+			"credentials for user %s\n", 
+			state->request.data.ccache_ntlm_auth.user));
+		goto process_result;
+	}
+
+	DEBUG(10,("winbindd_dual_ccache_ntlm_auth: found ccache [%s]\n", entry->username));
+
+	if (!client_can_access_ccache_entry(state->request.data.ccache_ntlm_auth.uid, entry)) {
+		goto process_result;
+	}
+
+	if (initial_blob_len == 0 && challenge_blob_len == 0) {
+		/* this is just a probe to see if credentials are available. */
+		result = NT_STATUS_OK;
+		state->response.data.ccache_ntlm_auth.auth_blob_len = 0;
+		goto process_result;
+	}
+
+	initial = data_blob(state->request.extra_data.data, initial_blob_len);
+	challenge = data_blob(state->request.extra_data.data + initial_blob_len, 
+				state->request.data.ccache_ntlm_auth.challenge_blob_len);
+
+	if (!initial.data || !challenge.data) {
+		result = NT_STATUS_NO_MEMORY;
+	} else {
+		result = do_ntlm_auth_with_hashes(name_user, name_domain,
+						entry->lm_hash, entry->nt_hash,
+						initial, challenge, &auth);
+	}
+
+	data_blob_free(&initial);
+	data_blob_free(&challenge);
+
+	if (!NT_STATUS_IS_OK(result)) {
+		goto process_result;
+	}
+
+	state->response.extra_data.data = smb_xmemdup(auth.data, auth.length);
+	if (!state->response.extra_data.data) {
+		result = NT_STATUS_NO_MEMORY;
+		goto process_result;
+	}
+	state->response.length += auth.length;
+	state->response.data.ccache_ntlm_auth.auth_blob_len = auth.length;
+
+	data_blob_free(&auth);
+
+  process_result:
+	return NT_STATUS_IS_OK(result) ? WINBINDD_OK : WINBINDD_ERROR;
+}

Copied: branches/samba/upstream/source/nsswitch/winbindd_cm.c (from rev 1928, branches/samba/upstream/source/nsswitch/winbindd_cm.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/winbindd_cm.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/winbindd_cm.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,2133 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   Winbind daemon connection manager
+
+   Copyright (C) Tim Potter                2001
+   Copyright (C) Andrew Bartlett           2002
+   Copyright (C) Gerald (Jerry) Carter     2003-2005.
+   Copyright (C) Volker Lendecke           2004-2005
+   Copyright (C) Jeremy Allison		   2006
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+/*
+   We need to manage connections to domain controllers without having to
+   mess up the main winbindd code with other issues.  The aim of the
+   connection manager is to:
+  
+       - make connections to domain controllers and cache them
+       - re-establish connections when networks or servers go down
+       - centralise the policy on connection timeouts, domain controller
+	 selection etc
+       - manage re-entrancy for when winbindd becomes able to handle
+	 multiple outstanding rpc requests
+  
+   Why not have connection management as part of the rpc layer like tng?
+   Good question.  This code may morph into libsmb/rpc_cache.c or something
+   like that but at the moment it's simply staying as part of winbind.	I
+   think the TNG architecture of forcing every user of the rpc layer to use
+   the connection caching system is a bad idea.	 It should be an optional
+   method of using the routines.
+
+   The TNG design is quite good but I disagree with some aspects of the
+   implementation. -tpot
+
+ */
+
+/*
+   TODO:
+
+     - I'm pretty annoyed by all the make_nmb_name() stuff.  It should be
+       moved down into another function.
+
+     - Take care when destroying cli_structs as they can be shared between
+       various sam handles.
+
+ */
+
+#include "includes.h"
+#include "winbindd.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_WINBIND
+
+struct dc_name_ip {
+	fstring name;
+	struct in_addr ip;
+};
+
+extern struct winbindd_methods reconnect_methods;
+extern BOOL override_logfile;
+
+static NTSTATUS init_dc_connection_network(struct winbindd_domain *domain);
+static void set_dc_type_and_flags( struct winbindd_domain *domain );
+static BOOL get_dcs(TALLOC_CTX *mem_ctx, const struct winbindd_domain *domain,
+		    struct dc_name_ip **dcs, int *num_dcs);
+
+/****************************************************************
+ Child failed to find DC's. Reschedule check.
+****************************************************************/
+
+static void msg_failed_to_go_online(int msg_type, struct process_id src,
+				    void *buf, size_t len, void *private_data)
+{
+	struct winbindd_domain *domain;
+	const char *domainname = (const char *)buf;
+
+	if (buf == NULL || len == 0) {
+		return;
+	}
+
+	DEBUG(5,("msg_fail_to_go_online: received for domain %s.\n", domainname));
+
+	for (domain = domain_list(); domain; domain = domain->next) {
+		if (domain->internal) {
+			continue;
+		}
+
+		if (strequal(domain->name, domainname)) {
+			if (domain->online) {
+				/* We're already online, ignore. */
+				DEBUG(5,("msg_fail_to_go_online: domain %s "
+					"already online.\n", domainname));
+				continue;
+			}
+
+			/* Reschedule the online check. */
+			set_domain_offline(domain);
+			break;
+		}
+	}
+}
+
+/****************************************************************
+ Actually cause a reconnect from a message.
+****************************************************************/
+
+static void msg_try_to_go_online(int msg_type, struct process_id src,
+				 void *buf, size_t len, void *private_data)
+{
+	struct winbindd_domain *domain;
+	const char *domainname = (const char *)buf;
+
+	if (buf == NULL || len == 0) {
+		return;
+	}
+
+	DEBUG(5,("msg_try_to_go_online: received for domain %s.\n", domainname));
+
+	for (domain = domain_list(); domain; domain = domain->next) {
+		if (domain->internal) {
+			continue;
+		}
+
+		if (strequal(domain->name, domainname)) {
+
+			if (domain->online) {
+				/* We're already online, ignore. */
+				DEBUG(5,("msg_try_to_go_online: domain %s "
+					"already online.\n", domainname));
+				continue;
+			}
+
+			/* This call takes care of setting the online
+			   flag to true if we connected, or re-adding
+			   the offline handler if false. Bypasses online
+			   check so always does network calls. */
+
+			init_dc_connection_network(domain);
+			break;
+		}
+	}
+}
+
+/****************************************************************
+ Fork a child to try and contact a DC. Do this as contacting a
+ DC requires blocking lookups and we don't want to block our
+ parent.
+****************************************************************/
+
+static BOOL fork_child_dc_connect(struct winbindd_domain *domain)
+{
+	struct dc_name_ip *dcs = NULL;
+	int num_dcs = 0;
+	TALLOC_CTX *mem_ctx = NULL;
+	pid_t child_pid;
+	pid_t parent_pid = sys_getpid();
+
+	/* Stop zombies */
+	CatchChild();
+
+	message_block();
+
+	child_pid = sys_fork();
+
+	if (child_pid == -1) {
+		DEBUG(0, ("fork_child_dc_connect: Could not fork: %s\n", strerror(errno)));
+		message_unblock();
+		return False;
+	}
+
+	if (child_pid != 0) {
+		/* Parent */
+		message_register(MSG_WINBIND_TRY_TO_GO_ONLINE,
+				 msg_try_to_go_online, NULL);
+		message_register(MSG_WINBIND_FAILED_TO_GO_ONLINE,
+				 msg_failed_to_go_online, NULL);
+		message_unblock();
+		return True;
+	}
+
+	/* Child. */
+
+	/* Leave messages blocked - we will never process one. */
+
+	/* tdb needs special fork handling */
+	if (tdb_reopen_all(1) == -1) {
+		DEBUG(0,("tdb_reopen_all failed.\n"));
+		_exit(0);
+	}
+
+	close_conns_after_fork();
+
+	if (!override_logfile) {
+		pstring logfile;
+		pstr_sprintf(logfile, "%s/log.winbindd-dc-connect", dyn_LOGFILEBASE);
+		lp_set_logfile(logfile);
+		reopen_logs();
+	}
+
+	mem_ctx = talloc_init("fork_child_dc_connect");
+	if (!mem_ctx) {
+		DEBUG(0,("talloc_init failed.\n"));
+		_exit(0);
+	}
+
+	if ((!get_dcs(mem_ctx, domain, &dcs, &num_dcs)) || (num_dcs == 0)) {
+		/* Still offline ? Can't find DC's. */
+		message_send_pid(pid_to_procid(parent_pid), MSG_WINBIND_FAILED_TO_GO_ONLINE,
+				domain->name,
+				strlen(domain->name)+1, False);
+		_exit(0);
+	}
+
+	/* We got a DC. Send a message to our parent to get it to
+	   try and do the same. */
+
+	message_send_pid(pid_to_procid(parent_pid), MSG_WINBIND_TRY_TO_GO_ONLINE,
+				domain->name,
+				strlen(domain->name)+1, False);
+	_exit(0);
+}
+
+/****************************************************************
+ Handler triggered if we're offline to try and detect a DC.
+****************************************************************/
+
+static void check_domain_online_handler(struct event_context *ctx,
+					struct timed_event *te,
+					const struct timeval *now,
+					void *private_data)
+{
+        struct winbindd_domain *domain =
+                (struct winbindd_domain *)private_data;
+
+	DEBUG(10,("check_domain_online_handler: called for domain %s\n",
+		domain->name ));
+
+	TALLOC_FREE(domain->check_online_event);
+
+	/* Are we still in "startup" mode ? */
+
+	if (domain->startup && (now->tv_sec > domain->startup_time + 30)) {
+		/* No longer in "startup" mode. */
+		DEBUG(10,("check_domain_online_handler: domain %s no longer in 'startup' mode.\n",
+			domain->name ));
+		domain->startup = False;
+	}
+
+	/* We've been told to stay offline, so stay
+	   that way. */
+
+	if (get_global_winbindd_state_offline()) {
+		DEBUG(10,("check_domain_online_handler: domain %s remaining globally offline\n",
+			domain->name ));
+		return;
+	}
+
+	/* Fork a child to test if it can contact a DC. 
+	   If it can then send ourselves a message to
+	   cause a reconnect. */
+
+	fork_child_dc_connect(domain);
+}
+
+/****************************************************************
+ If we're still offline setup the timeout check.
+****************************************************************/
+
+static void calc_new_online_timeout_check(struct winbindd_domain *domain)
+{
+	int wbc = lp_winbind_cache_time();
+
+	if (domain->startup) {
+		domain->check_online_timeout = 10;
+	} else if (domain->check_online_timeout < wbc) {
+		domain->check_online_timeout = wbc;
+	}
+}
+
+/****************************************************************
+ Set domain offline and also add handler to put us back online
+ if we detect a DC.
+****************************************************************/
+
+void set_domain_offline(struct winbindd_domain *domain)
+{
+	DEBUG(10,("set_domain_offline: called for domain %s\n",
+		domain->name ));
+
+	TALLOC_FREE(domain->check_online_event);
+
+	if (domain->internal) {
+		DEBUG(3,("set_domain_offline: domain %s is internal - logic error.\n",
+			domain->name ));
+		return;
+	}
+
+	domain->online = False;
+
+	/* Offline domains are always initialized. They're
+	   re-initialized when they go back online. */
+
+	domain->initialized = True;
+
+	/* We only add the timeout handler that checks and
+	   allows us to go back online when we've not
+	   been told to remain offline. */
+
+	if (get_global_winbindd_state_offline()) {
+		DEBUG(10,("set_domain_offline: domain %s remaining globally offline\n",
+			domain->name ));
+		return;
+	}
+
+	/* If we're in statup mode, check again in 10 seconds, not in
+	   lp_winbind_cache_time() seconds (which is 5 mins by default). */
+
+	calc_new_online_timeout_check(domain);
+
+	domain->check_online_event = event_add_timed(winbind_event_context(),
+						NULL,
+						timeval_current_ofs(domain->check_online_timeout,0),
+						"check_domain_online_handler",
+						check_domain_online_handler,
+						domain);
+
+	/* The above *has* to succeed for winbindd to work. */
+	if (!domain->check_online_event) {
+		smb_panic("set_domain_offline: failed to add online handler.\n");
+	}
+
+	DEBUG(10,("set_domain_offline: added event handler for domain %s\n",
+		domain->name ));
+}
+
+/****************************************************************
+ Set domain online - if allowed.
+****************************************************************/
+
+static void set_domain_online(struct winbindd_domain *domain)
+{
+	struct timeval now;
+
+	DEBUG(10,("set_domain_online: called for domain %s\n",
+		domain->name ));
+
+	if (domain->internal) {
+		DEBUG(3,("set_domain_online: domain %s is internal - logic error.\n",
+			domain->name ));
+		return;
+	}
+
+	if (get_global_winbindd_state_offline()) {
+		DEBUG(10,("set_domain_online: domain %s remaining globally offline\n",
+			domain->name ));
+		return;
+	}
+
+	/* If we are waiting to get a krb5 ticket, trigger immediately. */
+	GetTimeOfDay(&now);
+	set_event_dispatch_time(winbind_event_context(),
+				"krb5_ticket_gain_handler", now);
+
+	/* Ok, we're out of any startup mode now... */
+	domain->startup = False;
+
+	if (domain->online == False) {
+		/* We were offline - now we're online. We default to
+		   using the MS-RPC backend if we started offline,
+		   and if we're going online for the first time we
+		   should really re-initialize the backends and the
+		   checks to see if we're talking to an AD or NT domain.
+		*/
+
+		domain->initialized = False;
+
+		/* 'reconnect_methods' is the MS-RPC backend. */
+		if (domain->backend == &reconnect_methods) {
+			domain->backend = NULL;
+		}
+	}
+
+	/* Ensure we have no online timeout checks. */
+	domain->check_online_timeout = 0;
+	TALLOC_FREE(domain->check_online_event);
+
+	/* Ensure we ignore any pending child messages. */
+	message_deregister(MSG_WINBIND_TRY_TO_GO_ONLINE);
+	message_deregister(MSG_WINBIND_FAILED_TO_GO_ONLINE);
+
+	domain->online = True;
+}
+
+/****************************************************************
+ Requested to set a domain online.
+****************************************************************/
+
+void set_domain_online_request(struct winbindd_domain *domain)
+{
+	struct timeval tev;
+
+	DEBUG(10,("set_domain_online_request: called for domain %s\n",
+		domain->name ));
+
+	if (get_global_winbindd_state_offline()) {
+		DEBUG(10,("set_domain_online_request: domain %s remaining globally offline\n",
+			domain->name ));
+		return;
+	}
+
+	/* We've been told it's safe to go online and
+	   try and connect to a DC. But I don't believe it
+	   because network manager seems to lie.
+	   Wait at least 5 seconds. Heuristics suck... */
+
+	if (!domain->check_online_event) {
+		/* If we've come from being globally offline we
+		   don't have a check online event handler set.
+		   We need to add one now we're trying to go
+		   back online. */
+
+		DEBUG(10,("set_domain_online_request: domain %s was globally offline.\n",
+			domain->name ));
+
+		domain->check_online_event = event_add_timed(winbind_event_context(),
+								NULL,
+								timeval_current_ofs(5, 0),
+								"check_domain_online_handler",
+								check_domain_online_handler,
+								domain);
+
+		/* The above *has* to succeed for winbindd to work. */
+		if (!domain->check_online_event) {
+			smb_panic("set_domain_online_request: failed to add online handler.\n");
+		}
+	}
+
+	GetTimeOfDay(&tev);
+
+	/* Go into "startup" mode again. */
+	domain->startup_time = tev.tv_sec;
+	domain->startup = True;
+
+	tev.tv_sec += 5;
+
+	set_event_dispatch_time(winbind_event_context(), "check_domain_online_handler", tev);
+}
+
+/****************************************************************
+ Add -ve connection cache entries for domain and realm.
+****************************************************************/
+
+void winbind_add_failed_connection_entry(const struct winbindd_domain *domain,
+					const char *server,
+					NTSTATUS result)
+{
+	add_failed_connection_entry(domain->name, server, result);
+	/* If this was the saf name for the last thing we talked to,
+	   remove it. */
+	saf_delete(domain->name);
+	if (*domain->alt_name) {
+		add_failed_connection_entry(domain->alt_name, server, result);
+		saf_delete(domain->alt_name);
+	}
+}
+
+/* Choose between anonymous or authenticated connections.  We need to use
+   an authenticated connection if DCs have the RestrictAnonymous registry
+   entry set > 0, or the "Additional restrictions for anonymous
+   connections" set in the win2k Local Security Policy. 
+   
+   Caller to free() result in domain, username, password
+*/
+
+static void cm_get_ipc_userpass(char **username, char **domain, char **password)
+{
+	*username = (char *)secrets_fetch(SECRETS_AUTH_USER, NULL);
+	*domain = (char *)secrets_fetch(SECRETS_AUTH_DOMAIN, NULL);
+	*password = (char *)secrets_fetch(SECRETS_AUTH_PASSWORD, NULL);
+	
+	if (*username && **username) {
+
+		if (!*domain || !**domain)
+			*domain = smb_xstrdup(lp_workgroup());
+		
+		if (!*password || !**password)
+			*password = smb_xstrdup("");
+
+		DEBUG(3, ("cm_get_ipc_userpass: Retrieved auth-user from secrets.tdb [%s\\%s]\n", 
+			  *domain, *username));
+
+	} else {
+		DEBUG(3, ("cm_get_ipc_userpass: No auth-user defined\n"));
+		*username = smb_xstrdup("");
+		*domain = smb_xstrdup("");
+		*password = smb_xstrdup("");
+	}
+}
+
+static BOOL get_dc_name_via_netlogon(const struct winbindd_domain *domain,
+				     fstring dcname, struct in_addr *dc_ip)
+{
+	struct winbindd_domain *our_domain = NULL;
+	struct rpc_pipe_client *netlogon_pipe = NULL;
+	NTSTATUS result;
+	WERROR werr;
+	TALLOC_CTX *mem_ctx;
+	unsigned int orig_timeout;
+	fstring tmp;
+	char *p;
+
+	/* Hmmmm. We can only open one connection to the NETLOGON pipe at the
+	 * moment.... */
+
+	if (IS_DC) {
+		return False;
+	}
+
+	if (domain->primary) {
+		return False;
+	}
+
+	our_domain = find_our_domain();
+
+	if ((mem_ctx = talloc_init("get_dc_name_via_netlogon")) == NULL) {
+		return False;
+	}
+
+	result = cm_connect_netlogon(our_domain, &netlogon_pipe);
+	if (!NT_STATUS_IS_OK(result)) {
+		talloc_destroy(mem_ctx);
+		return False;
+	}
+
+	/* This call can take a long time - allow the server to time out.
+	   35 seconds should do it. */
+
+	orig_timeout = cli_set_timeout(netlogon_pipe->cli, 35000);
+	
+	werr = rpccli_netlogon_getanydcname(netlogon_pipe, mem_ctx, our_domain->dcname,
+					    domain->name, tmp);
+
+	/* And restore our original timeout. */
+	cli_set_timeout(netlogon_pipe->cli, orig_timeout);
+
+	talloc_destroy(mem_ctx);
+
+	if (!W_ERROR_IS_OK(werr)) {
+		DEBUG(10, ("rpccli_netlogon_getanydcname failed: %s\n",
+			   dos_errstr(werr)));
+		return False;
+	}
+
+	/* cli_netlogon_getanydcname gives us a name with \\ */
+	p = tmp;
+	if (*p == '\\') {
+		p+=1;
+	}
+	if (*p == '\\') {
+		p+=1;
+	}
+
+	fstrcpy(dcname, p);
+
+	DEBUG(10, ("rpccli_netlogon_getanydcname returned %s\n", dcname));
+
+	if (!resolve_name(dcname, dc_ip, 0x20)) {
+		return False;
+	}
+
+	return True;
+}
+
+/**
+ * Helper function to assemble trust password and account name
+ */
+static NTSTATUS get_trust_creds(const struct winbindd_domain *domain,
+				char **machine_password,
+				char **machine_account,
+				char **machine_krb5_principal)
+{
+	const char *account_name;
+
+	if (!get_trust_pw_clear(domain->name, machine_password,
+				&account_name, NULL))
+	{
+		return NT_STATUS_CANT_ACCESS_DOMAIN_INFO;
+	}
+
+	if ((machine_account != NULL) &&
+	    (asprintf(machine_account, "%s$", account_name) == -1))
+	{
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	/* this is at least correct when domain is our domain,
+	 * which is the only case, when this is currently used: */
+	if (machine_krb5_principal != NULL)
+	{
+		if (asprintf(machine_krb5_principal, "%s$@%s",
+			     account_name, domain->alt_name) == -1)
+		{
+			return NT_STATUS_NO_MEMORY;
+		}
+
+		strupper_m(*machine_krb5_principal);
+	}
+
+	return NT_STATUS_OK;
+}
+
+/************************************************************************
+ Given a fd with a just-connected TCP connection to a DC, open a connection
+ to the pipe.
+************************************************************************/
+
+static NTSTATUS cm_prepare_connection(const struct winbindd_domain *domain,
+				      const int sockfd,
+				      const char *controller,
+				      struct cli_state **cli,
+				      BOOL *retry)
+{
+	char *machine_password = NULL;
+	char *machine_krb5_principal = NULL;
+	char *machine_account = NULL;
+	char *ipc_username = NULL;
+	char *ipc_domain = NULL;
+	char *ipc_password = NULL;
+
+	BOOL got_mutex;
+
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	struct sockaddr peeraddr;
+	socklen_t peeraddr_len;
+
+	struct sockaddr_in *peeraddr_in = (struct sockaddr_in *)&peeraddr;
+
+	DEBUG(10,("cm_prepare_connection: connecting to DC %s for domain %s\n",
+		controller, domain->name ));
+
+	*retry = True;
+
+	got_mutex = secrets_named_mutex(controller,
+					WINBIND_SERVER_MUTEX_WAIT_TIME);
+
+	if (!got_mutex) {
+		DEBUG(0,("cm_prepare_connection: mutex grab failed for %s\n",
+			 controller));
+		result = NT_STATUS_POSSIBLE_DEADLOCK;
+		goto done;
+	}
+
+	if ((*cli = cli_initialise()) == NULL) {
+		DEBUG(1, ("Could not cli_initialize\n"));
+		result = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	(*cli)->timeout = 10000; 	/* 10 seconds */
+	(*cli)->fd = sockfd;
+	fstrcpy((*cli)->desthost, controller);
+	(*cli)->use_kerberos = True;
+
+	peeraddr_len = sizeof(peeraddr);
+
+	if ((getpeername((*cli)->fd, &peeraddr, &peeraddr_len) != 0) ||
+	    (peeraddr_len != sizeof(struct sockaddr_in)) ||
+	    (peeraddr_in->sin_family != PF_INET))
+	{
+		DEBUG(0,("cm_prepare_connection: %s\n", strerror(errno)));
+		result = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+	if (ntohs(peeraddr_in->sin_port) == 139) {
+		struct nmb_name calling;
+		struct nmb_name called;
+
+		make_nmb_name(&calling, global_myname(), 0x0);
+		make_nmb_name(&called, "*SMBSERVER", 0x20);
+
+		if (!cli_session_request(*cli, &calling, &called)) {
+			DEBUG(8, ("cli_session_request failed for %s\n",
+				  controller));
+			result = NT_STATUS_UNSUCCESSFUL;
+			goto done;
+		}
+	}
+
+	cli_setup_signing_state(*cli, Undefined);
+
+	if (!cli_negprot(*cli)) {
+		DEBUG(1, ("cli_negprot failed\n"));
+		result = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+	if (!is_trusted_domain_situation(domain->name) &&
+	    (*cli)->protocol >= PROTOCOL_NT1 &&
+	    (*cli)->capabilities & CAP_EXTENDED_SECURITY)
+	{
+		ADS_STATUS ads_status;
+
+		result = get_trust_creds(domain, &machine_password,
+					 &machine_account,
+					 &machine_krb5_principal);
+		if (!NT_STATUS_IS_OK(result)) {
+			goto anon_fallback;
+		}
+
+		if (lp_security() == SEC_ADS) {
+
+			/* Try a krb5 session */
+
+			(*cli)->use_kerberos = True;
+			DEBUG(5, ("connecting to %s from %s with kerberos principal "
+				  "[%s]\n", controller, global_myname(),
+				  machine_krb5_principal));
+
+			ads_status = cli_session_setup_spnego(*cli,
+							      machine_krb5_principal, 
+							      machine_password, 
+							      domain->name);
+
+			if (!ADS_ERR_OK(ads_status)) {
+				DEBUG(4,("failed kerberos session setup with %s\n",
+					 ads_errstr(ads_status)));
+			}
+
+			result = ads_ntstatus(ads_status);
+			if (NT_STATUS_IS_OK(result)) {
+				/* Ensure creds are stored for NTLMSSP authenticated pipe access. */
+				cli_init_creds(*cli, machine_account, domain->name, machine_password);
+				goto session_setup_done;
+			}
+		}
+
+		/* Fall back to non-kerberos session setup using NTLMSSP SPNEGO with the machine account. */
+		(*cli)->use_kerberos = False;
+
+		DEBUG(5, ("connecting to %s from %s with username "
+			  "[%s]\\[%s]\n",  controller, global_myname(),
+			  domain->name, machine_account));
+
+		ads_status = cli_session_setup_spnego(*cli,
+						      machine_account, 
+						      machine_password, 
+						      domain->name);
+		if (!ADS_ERR_OK(ads_status)) {
+			DEBUG(4, ("authenticated session setup failed with %s\n",
+				ads_errstr(ads_status)));
+		}
+
+		result = ads_ntstatus(ads_status);
+		if (NT_STATUS_IS_OK(result)) {
+			/* Ensure creds are stored for NTLMSSP authenticated pipe access. */
+			cli_init_creds(*cli, machine_account, domain->name, machine_password);
+			goto session_setup_done;
+		}
+	}
+
+	/* Fall back to non-kerberos session setup with auth_user */
+
+	(*cli)->use_kerberos = False;
+
+	cm_get_ipc_userpass(&ipc_username, &ipc_domain, &ipc_password);
+
+	if ((((*cli)->sec_mode & NEGOTIATE_SECURITY_CHALLENGE_RESPONSE) != 0) &&
+	    (strlen(ipc_username) > 0)) {
+
+		/* Only try authenticated if we have a username */
+
+		DEBUG(5, ("connecting to %s from %s with username "
+			  "[%s]\\[%s]\n",  controller, global_myname(),
+			  ipc_domain, ipc_username));
+
+		if (NT_STATUS_IS_OK(cli_session_setup(
+					    *cli, ipc_username,
+					    ipc_password, strlen(ipc_password)+1,
+					    ipc_password, strlen(ipc_password)+1,
+					    ipc_domain))) {
+			/* Successful logon with given username. */
+			cli_init_creds(*cli, ipc_username, ipc_domain, ipc_password);
+			goto session_setup_done;
+		} else {
+			DEBUG(4, ("authenticated session setup with user %s\\%s failed.\n",
+				ipc_domain, ipc_username ));
+		}
+	}
+
+ anon_fallback:
+
+	/* Fall back to anonymous connection, this might fail later */
+
+	if (NT_STATUS_IS_OK(cli_session_setup(*cli, "", NULL, 0,
+					      NULL, 0, ""))) {
+		DEBUG(5, ("Connected anonymously\n"));
+		cli_init_creds(*cli, "", "", "");
+		goto session_setup_done;
+	}
+
+	result = cli_nt_error(*cli);
+
+	if (NT_STATUS_IS_OK(result))
+		result = NT_STATUS_UNSUCCESSFUL;
+
+	/* We can't session setup */
+
+	goto done;
+
+ session_setup_done:
+
+	/* cache the server name for later connections */
+
+	saf_store( domain->name, (*cli)->desthost );
+	if (domain->alt_name && (*cli)->use_kerberos) {
+		saf_store( domain->alt_name, (*cli)->desthost );
+	}
+
+	if (!cli_send_tconX(*cli, "IPC$", "IPC", "", 0)) {
+
+		result = cli_nt_error(*cli);
+
+		DEBUG(1,("failed tcon_X with %s\n", nt_errstr(result)));
+
+		if (NT_STATUS_IS_OK(result))
+			result = NT_STATUS_UNSUCCESSFUL;
+
+		goto done;
+	}
+
+	secrets_named_mutex_release(controller);
+	got_mutex = False;
+	*retry = False;
+
+	/* set the domain if empty; needed for schannel connections */
+	if ( !*(*cli)->domain ) {
+		fstrcpy( (*cli)->domain, domain->name );
+	}
+
+	result = NT_STATUS_OK;
+
+ done:
+	if (got_mutex) {
+		secrets_named_mutex_release(controller);
+	}
+
+	SAFE_FREE(machine_account);
+	SAFE_FREE(machine_password);
+	SAFE_FREE(machine_krb5_principal);
+	SAFE_FREE(ipc_username);
+	SAFE_FREE(ipc_domain);
+	SAFE_FREE(ipc_password);
+
+	if (!NT_STATUS_IS_OK(result)) {
+		winbind_add_failed_connection_entry(domain, controller, result);
+		if ((*cli) != NULL) {
+			cli_shutdown(*cli);
+			*cli = NULL;
+		}
+	}
+
+	return result;
+}
+
+static BOOL add_one_dc_unique(TALLOC_CTX *mem_ctx, const char *domain_name,
+			      const char *dcname, struct in_addr ip,
+			      struct dc_name_ip **dcs, int *num)
+{
+	if (!NT_STATUS_IS_OK(check_negative_conn_cache(domain_name, dcname))) {
+		DEBUG(10, ("DC %s was in the negative conn cache\n", dcname));
+		return False;
+	}
+
+	*dcs = TALLOC_REALLOC_ARRAY(mem_ctx, *dcs, struct dc_name_ip, (*num)+1);
+
+	if (*dcs == NULL)
+		return False;
+
+	fstrcpy((*dcs)[*num].name, dcname);
+	(*dcs)[*num].ip = ip;
+	*num += 1;
+	return True;
+}
+
+static BOOL add_sockaddr_to_array(TALLOC_CTX *mem_ctx,
+				  struct in_addr ip, uint16 port,
+				  struct sockaddr_in **addrs, int *num)
+{
+	*addrs = TALLOC_REALLOC_ARRAY(mem_ctx, *addrs, struct sockaddr_in, (*num)+1);
+
+	if (*addrs == NULL) {
+		*num = 0;
+		return False;
+	}
+
+	(*addrs)[*num].sin_family = PF_INET;
+	putip((char *)&((*addrs)[*num].sin_addr), (char *)&ip);
+	(*addrs)[*num].sin_port = htons(port);
+
+	*num += 1;
+	return True;
+}
+
+static void mailslot_name(struct in_addr dc_ip, fstring name)
+{
+	fstr_sprintf(name, "\\MAILSLOT\\NET\\GETDC%X", dc_ip.s_addr);
+}
+
+static BOOL send_getdc_request(struct in_addr dc_ip,
+			       const char *domain_name,
+			       const DOM_SID *sid)
+{
+	pstring outbuf;
+	char *p;
+	fstring my_acct_name;
+	fstring my_mailslot;
+
+	mailslot_name(dc_ip, my_mailslot);
+
+	memset(outbuf, '\0', sizeof(outbuf));
+
+	p = outbuf;
+
+	SCVAL(p, 0, SAMLOGON);
+	p++;
+
+	SCVAL(p, 0, 0); /* Count pointer ... */
+	p++;
+
+	SIVAL(p, 0, 0); /* The sender's token ... */
+	p += 2;
+
+	p += dos_PutUniCode(p, global_myname(),
+		sizeof(outbuf) - PTR_DIFF(p, outbuf), True);
+	fstr_sprintf(my_acct_name, "%s$", global_myname());
+	p += dos_PutUniCode(p, my_acct_name,
+			sizeof(outbuf) - PTR_DIFF(p, outbuf), True);
+
+	if (strlen(my_mailslot)+1 > sizeof(outbuf) - PTR_DIFF(p, outbuf)) {
+		return False;
+	}
+
+	memcpy(p, my_mailslot, strlen(my_mailslot)+1);
+	p += strlen(my_mailslot)+1;
+
+	if (sizeof(outbuf) - PTR_DIFF(p, outbuf) < 8) {
+		return False;
+	}
+	SIVAL(p, 0, 0x80);
+	p+=4;
+
+	SIVAL(p, 0, sid_size(sid));
+	p+=4;
+
+	p = ALIGN4(p, outbuf);
+
+	if (PTR_DIFF(p, outbuf) > sizeof(outbuf)) {
+		return False;
+	}
+
+	if (sid_size(sid) + 8 > sizeof(outbuf) - PTR_DIFF(p, outbuf)) {
+		return False;
+	}
+
+	sid_linearize(p, sizeof(outbuf) - PTR_DIFF(p, outbuf), sid);
+	p += sid_size(sid);
+
+	SIVAL(p, 0, 1);
+	SSVAL(p, 4, 0xffff);
+	SSVAL(p, 6, 0xffff);
+	p+=8;
+
+	return cli_send_mailslot(False, "\\MAILSLOT\\NET\\NTLOGON", 0,
+				 outbuf, PTR_DIFF(p, outbuf),
+				 global_myname(), 0, domain_name, 0x1c,
+				 dc_ip);
+}
+
+static BOOL receive_getdc_response(struct in_addr dc_ip,
+				   const char *domain_name,
+				   fstring dc_name)
+{
+	struct packet_struct *packet;
+	fstring my_mailslot;
+	char *buf, *p;
+	fstring dcname, user, domain;
+	int len;
+
+	mailslot_name(dc_ip, my_mailslot);
+
+	packet = receive_unexpected(DGRAM_PACKET, 0, my_mailslot);
+
+	if (packet == NULL) {
+		DEBUG(5, ("Did not receive packet for %s\n", my_mailslot));
+		return False;
+	}
+
+	DEBUG(5, ("Received packet for %s\n", my_mailslot));
+
+	buf = packet->packet.dgram.data;
+	len = packet->packet.dgram.datasize;
+
+	if (len < 70) {
+		/* 70 is a completely arbitrary value to make sure
+		   the SVAL below does not read uninitialized memory */
+		DEBUG(3, ("GetDC got short response\n"));
+		return False;
+	}
+
+	/* This should be (buf-4)+SVAL(buf-4, smb_vwv12)... */
+	p = buf+SVAL(buf, smb_vwv10);
+
+	if (CVAL(p,0) != SAMLOGON_R) {
+		DEBUG(8, ("GetDC got invalid response type %d\n", CVAL(p, 0)));
+		return False;
+	}
+
+	p+=2;
+	pull_ucs2(buf, dcname, p, sizeof(dcname), PTR_DIFF(buf+len, p),
+		  STR_TERMINATE|STR_NOALIGN);
+	p = skip_unibuf(p, PTR_DIFF(buf+len, p));
+	pull_ucs2(buf, user, p, sizeof(dcname), PTR_DIFF(buf+len, p),
+		  STR_TERMINATE|STR_NOALIGN);
+	p = skip_unibuf(p, PTR_DIFF(buf+len, p));
+	pull_ucs2(buf, domain, p, sizeof(dcname), PTR_DIFF(buf+len, p),
+		  STR_TERMINATE|STR_NOALIGN);
+	p = skip_unibuf(p, PTR_DIFF(buf+len, p));
+
+	if (!strequal(domain, domain_name)) {
+		DEBUG(3, ("GetDC: Expected domain %s, got %s\n",
+			  domain_name, domain));
+		return False;
+	}
+
+	p = dcname;
+	if (*p == '\\')	p += 1;
+	if (*p == '\\')	p += 1;
+
+	fstrcpy(dc_name, p);
+
+	DEBUG(10, ("GetDC gave name %s for domain %s\n",
+		   dc_name, domain));
+
+	return True;
+}
+
+/*******************************************************************
+ convert an ip to a name
+*******************************************************************/
+
+static BOOL dcip_to_name(const struct winbindd_domain *domain, struct in_addr ip, fstring name )
+{
+	struct ip_service ip_list;
+
+	ip_list.ip = ip;
+	ip_list.port = 0;
+
+#ifdef WITH_ADS
+	/* For active directory servers, try to get the ldap server name.
+	   None of these failures should be considered critical for now */
+
+	if (lp_security() == SEC_ADS) {
+		ADS_STRUCT *ads;
+
+		ads = ads_init(domain->alt_name, domain->name, NULL);
+		ads->auth.flags |= ADS_AUTH_NO_BIND;
+
+		if (ads_try_connect( ads, inet_ntoa(ip) ) )  {
+			/* We got a cldap packet. */
+			fstrcpy(name, ads->config.ldap_server_name);
+			namecache_store(name, 0x20, 1, &ip_list);
+
+			DEBUG(10,("dcip_to_name: flags = 0x%x\n", (unsigned int)ads->config.flags));
+
+			if (domain->primary && (ads->config.flags & ADS_KDC)) {
+				if (ads_closest_dc(ads)) {
+					char *sitename = sitename_fetch(ads->config.realm);
+
+					/* We're going to use this KDC for this realm/domain.
+					   If we are using sites, then force the krb5 libs
+					   to use this KDC. */
+
+					create_local_private_krb5_conf_for_domain(domain->alt_name,
+									domain->name,
+									sitename,
+									ip);
+
+					SAFE_FREE(sitename);
+				} else {
+					/* use an off site KDC */
+					create_local_private_krb5_conf_for_domain(domain->alt_name,
+									domain->name,
+									NULL,
+									ip);
+				}
+				/* Ensure we contact this DC also. */
+				saf_store( domain->name, name);
+				saf_store( domain->alt_name, name);
+			}
+
+			ads_destroy( &ads );
+			return True;
+		}
+
+		ads_destroy( &ads );
+	}
+#endif
+
+	/* try GETDC requests next */
+	
+	if (send_getdc_request(ip, domain->name, &domain->sid)) {
+		int i;
+		smb_msleep(100);
+		for (i=0; i<5; i++) {
+			if (receive_getdc_response(ip, domain->name, name)) {
+				namecache_store(name, 0x20, 1, &ip_list);
+				return True;
+			}
+			smb_msleep(500);
+		}
+	}
+
+	/* try node status request */
+
+	if ( name_status_find(domain->name, 0x1c, 0x20, ip, name) ) {
+		namecache_store(name, 0x20, 1, &ip_list);
+		return True;
+	}
+	return False;
+}
+
+/*******************************************************************
+ Retreive a list of IP address for domain controllers.  Fill in 
+ the dcs[]  with results.
+*******************************************************************/
+
+static BOOL get_dcs(TALLOC_CTX *mem_ctx, const struct winbindd_domain *domain,
+		    struct dc_name_ip **dcs, int *num_dcs)
+{
+	fstring dcname;
+	struct  in_addr ip;
+	struct  ip_service *ip_list = NULL;
+	int     iplist_size = 0;
+	int     i;
+	BOOL    is_our_domain;
+	enum security_types sec = (enum security_types)lp_security();
+
+	is_our_domain = strequal(domain->name, lp_workgroup());
+
+	if ( !is_our_domain 
+		&& get_dc_name_via_netlogon(domain, dcname, &ip) 
+		&& add_one_dc_unique(mem_ctx, domain->name, dcname, ip, dcs, num_dcs) )
+	{
+		DEBUG(10, ("Retrieved DC %s at %s via netlogon\n",
+			   dcname, inet_ntoa(ip)));
+		return True;
+	}
+
+	if (sec == SEC_ADS) {
+		char *sitename = NULL;
+
+		/* We need to make sure we know the local site before
+		   doing any DNS queries, as this will restrict the
+		   get_sorted_dc_list() call below to only fetching
+		   DNS records for the correct site. */
+
+		/* Find any DC to get the site record.
+		   We deliberately don't care about the
+		   return here. */
+
+		get_dc_name(domain->name, domain->alt_name, dcname, &ip);
+
+		sitename = sitename_fetch(domain->alt_name);
+		if (sitename) {
+
+			/* Do the site-specific AD dns lookup first. */
+			get_sorted_dc_list(domain->alt_name, sitename, &ip_list, &iplist_size, True);
+
+			for ( i=0; i<iplist_size; i++ ) {
+				add_one_dc_unique(mem_ctx, domain->name, inet_ntoa(ip_list[i].ip),
+							ip_list[i].ip, dcs, num_dcs);
+			}
+
+			SAFE_FREE(ip_list);
+			SAFE_FREE(sitename);
+			iplist_size = 0;
+		}
+
+		/* Now we add DCs from the main AD dns lookup. */
+		get_sorted_dc_list(domain->alt_name, NULL, &ip_list, &iplist_size, True);
+
+		for ( i=0; i<iplist_size; i++ ) {
+			add_one_dc_unique(mem_ctx, domain->name, inet_ntoa(ip_list[i].ip),
+						ip_list[i].ip, dcs, num_dcs);
+		}
+        }
+
+	/* try standard netbios queries if no ADS */
+
+	if (iplist_size==0) {
+		get_sorted_dc_list(domain->name, NULL, &ip_list, &iplist_size, False);
+	}
+
+	/* FIXME!! this is where we should re-insert the GETDC requests --jerry */
+
+	/* now add to the dc array.  We'll wait until the last minute 
+	   to look up the name of the DC.  But we fill in the char* for 
+	   the ip now in to make the failed connection cache work */
+
+	for ( i=0; i<iplist_size; i++ ) {
+		add_one_dc_unique(mem_ctx, domain->name, inet_ntoa(ip_list[i].ip), 
+			ip_list[i].ip, dcs, num_dcs);
+	}
+
+	SAFE_FREE( ip_list );
+
+	return True;
+}
+
+static BOOL find_new_dc(TALLOC_CTX *mem_ctx,
+			const struct winbindd_domain *domain,
+			fstring dcname, struct sockaddr_in *addr, int *fd)
+{
+	struct dc_name_ip *dcs = NULL;
+	int num_dcs = 0;
+
+	const char **dcnames = NULL;
+	int num_dcnames = 0;
+
+	struct sockaddr_in *addrs = NULL;
+	int num_addrs = 0;
+
+	int i, fd_index;
+
+ again:
+	if (!get_dcs(mem_ctx, domain, &dcs, &num_dcs) || (num_dcs == 0))
+		return False;
+
+	for (i=0; i<num_dcs; i++) {
+
+		if (!add_string_to_array(mem_ctx, dcs[i].name,
+				    &dcnames, &num_dcnames)) {
+			return False;
+		}
+		if (!add_sockaddr_to_array(mem_ctx, dcs[i].ip, 445,
+				      &addrs, &num_addrs)) {
+			return False;
+		}
+
+		if (!add_string_to_array(mem_ctx, dcs[i].name,
+				    &dcnames, &num_dcnames)) {
+			return False;
+		}
+		if (!add_sockaddr_to_array(mem_ctx, dcs[i].ip, 139,
+				      &addrs, &num_addrs)) {
+			return False;
+		}
+	}
+
+	if ((num_dcnames == 0) || (num_dcnames != num_addrs))
+		return False;
+
+	if ((addrs == NULL) || (dcnames == NULL))
+		return False;
+
+	/* 5 second timeout. */
+	if ( !open_any_socket_out(addrs, num_addrs, 5000, &fd_index, fd) ) 
+	{
+		for (i=0; i<num_dcs; i++) {
+			DEBUG(10, ("find_new_dc: open_any_socket_out failed for "
+				"domain %s address %s. Error was %s\n",
+				domain->name, inet_ntoa(dcs[i].ip), strerror(errno) ));
+			winbind_add_failed_connection_entry(domain,
+				dcs[i].name, NT_STATUS_UNSUCCESSFUL);
+		}
+		return False;
+	}
+
+	*addr = addrs[fd_index];
+
+	if (*dcnames[fd_index] != '\0' && !is_ipaddress(dcnames[fd_index])) {
+		/* Ok, we've got a name for the DC */
+		fstrcpy(dcname, dcnames[fd_index]);
+		return True;
+	}
+
+	/* Try to figure out the name */
+	if (dcip_to_name( domain, addr->sin_addr, dcname )) {
+		return True;
+	}
+
+	/* We can not continue without the DC's name */
+	winbind_add_failed_connection_entry(domain, dcs[fd_index].name,
+				    NT_STATUS_UNSUCCESSFUL);
+	goto again;
+}
+
+static NTSTATUS cm_open_connection(struct winbindd_domain *domain,
+				   struct winbindd_cm_conn *new_conn)
+{
+	TALLOC_CTX *mem_ctx;
+	NTSTATUS result;
+	char *saf_servername = saf_fetch( domain->name );
+	int retries;
+
+	if ((mem_ctx = talloc_init("cm_open_connection")) == NULL) {
+		SAFE_FREE(saf_servername);
+		set_domain_offline(domain);
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	/* we have to check the server affinity cache here since 
+	   later we selecte a DC based on response time and not preference */
+	   
+	/* Check the negative connection cache
+	   before talking to it. It going down may have
+	   triggered the reconnection. */
+
+	if ( saf_servername && NT_STATUS_IS_OK(check_negative_conn_cache( domain->name, saf_servername))) {
+
+		DEBUG(10,("cm_open_connection: saf_servername is '%s' for domain %s\n",
+			saf_servername, domain->name ));
+
+		/* convert an ip address to a name */
+		if ( is_ipaddress( saf_servername ) ) {
+			fstring saf_name;
+			struct in_addr ip;
+
+			ip = *interpret_addr2( saf_servername );
+			if (dcip_to_name( domain, ip, saf_name )) {
+				fstrcpy( domain->dcname, saf_name );
+			} else {
+				winbind_add_failed_connection_entry(
+					domain, saf_servername,
+					NT_STATUS_UNSUCCESSFUL);
+			}
+		} else {
+			fstrcpy( domain->dcname, saf_servername );
+		}
+
+		SAFE_FREE( saf_servername );
+	}
+
+	for (retries = 0; retries < 3; retries++) {
+
+		int fd = -1;
+		BOOL retry = False;
+
+		result = NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND;
+
+		DEBUG(10,("cm_open_connection: dcname is '%s' for domain %s\n",
+			domain->dcname, domain->name ));
+
+		if (*domain->dcname 
+			&& NT_STATUS_IS_OK(check_negative_conn_cache( domain->name, domain->dcname))
+			&& (resolve_name(domain->dcname, &domain->dcaddr.sin_addr, 0x20)))
+		{
+			struct sockaddr_in *addrs = NULL;
+			int num_addrs = 0;
+			int dummy = 0;
+
+			if (!add_sockaddr_to_array(mem_ctx, domain->dcaddr.sin_addr, 445, &addrs, &num_addrs)) {
+				set_domain_offline(domain);
+				talloc_destroy(mem_ctx);
+				return NT_STATUS_NO_MEMORY;
+			}
+			if (!add_sockaddr_to_array(mem_ctx, domain->dcaddr.sin_addr, 139, &addrs, &num_addrs)) {
+				set_domain_offline(domain);
+				talloc_destroy(mem_ctx);
+				return NT_STATUS_NO_MEMORY;
+			}
+
+			/* 5 second timeout. */
+			if (!open_any_socket_out(addrs, num_addrs, 5000, &dummy, &fd)) {
+				fd = -1;
+			}
+		}
+
+		if ((fd == -1) 
+			&& !find_new_dc(mem_ctx, domain, domain->dcname, &domain->dcaddr, &fd))
+		{
+			/* This is the one place where we will
+			   set the global winbindd offline state
+			   to true, if a "WINBINDD_OFFLINE" entry
+			   is found in the winbindd cache. */
+			set_global_winbindd_state_offline();
+			break;
+		}
+
+		new_conn->cli = NULL;
+
+		result = cm_prepare_connection(domain, fd, domain->dcname,
+			&new_conn->cli, &retry);
+
+		if (!retry)
+			break;
+	}
+
+	if (NT_STATUS_IS_OK(result)) {
+		if (domain->online == False) {
+			/* We're changing state from offline to online. */
+			set_global_winbindd_state_online();
+		}
+		set_domain_online(domain);
+	} else {
+		/* Ensure we setup the retry handler. */
+		set_domain_offline(domain);
+	}
+
+	talloc_destroy(mem_ctx);
+	return result;
+}
+
+/* Close down all open pipes on a connection. */
+
+void invalidate_cm_connection(struct winbindd_cm_conn *conn)
+{
+	/* We're closing down a possibly dead
+	   connection. Don't have impossibly long (10s) timeouts. */
+
+	if (conn->cli) {
+		cli_set_timeout(conn->cli, 1000); /* 1 second. */
+	}
+
+	if (conn->samr_pipe != NULL) {
+		if (!cli_rpc_pipe_close(conn->samr_pipe)) {
+			/* Ok, it must be dead. Drop timeout to 0.5 sec. */
+			if (conn->cli) {
+				cli_set_timeout(conn->cli, 500);
+			}
+		}
+		conn->samr_pipe = NULL;
+	}
+
+	if (conn->lsa_pipe != NULL) {
+		if (!cli_rpc_pipe_close(conn->lsa_pipe)) {
+			/* Ok, it must be dead. Drop timeout to 0.5 sec. */
+			if (conn->cli) {
+				cli_set_timeout(conn->cli, 500);
+			}
+		}
+		conn->lsa_pipe = NULL;
+	}
+
+	if (conn->netlogon_pipe != NULL) {
+		if (!cli_rpc_pipe_close(conn->netlogon_pipe)) {
+			/* Ok, it must be dead. Drop timeout to 0.5 sec. */
+			if (conn->cli) {
+				cli_set_timeout(conn->cli, 500);
+			}
+		}
+		conn->netlogon_pipe = NULL;
+	}
+
+	if (conn->cli) {
+		cli_shutdown(conn->cli);
+	}
+
+	conn->cli = NULL;
+}
+
+void close_conns_after_fork(void)
+{
+	struct winbindd_domain *domain;
+
+	for (domain = domain_list(); domain; domain = domain->next) {
+		if (domain->conn.cli == NULL)
+			continue;
+
+		if (domain->conn.cli->fd == -1)
+			continue;
+
+		close(domain->conn.cli->fd);
+		domain->conn.cli->fd = -1;
+	}
+}
+
+static BOOL connection_ok(struct winbindd_domain *domain)
+{
+	if (domain->conn.cli == NULL) {
+		DEBUG(8, ("connection_ok: Connection to %s for domain %s has NULL "
+			  "cli!\n", domain->dcname, domain->name));
+		return False;
+	}
+
+	if (!domain->conn.cli->initialised) {
+		DEBUG(3, ("connection_ok: Connection to %s for domain %s was never "
+			  "initialised!\n", domain->dcname, domain->name));
+		return False;
+	}
+
+	if (domain->conn.cli->fd == -1) {
+		DEBUG(3, ("connection_ok: Connection to %s for domain %s has died or was "
+			  "never started (fd == -1)\n", 
+			  domain->dcname, domain->name));
+		return False;
+	}
+
+	if (domain->online == False) {
+		DEBUG(3, ("connection_ok: Domain %s is offline\n", domain->name));
+		return False;
+	}
+
+	return True;
+}
+
+/* Initialize a new connection up to the RPC BIND.
+   Bypass online status check so always does network calls. */
+
+static NTSTATUS init_dc_connection_network(struct winbindd_domain *domain)
+{
+	NTSTATUS result;
+
+	/* Internal connections never use the network. */
+	if (domain->internal) {
+		domain->initialized = True;
+		return NT_STATUS_OK;
+	}
+
+	if (connection_ok(domain)) {
+		if (!domain->initialized) {
+			set_dc_type_and_flags(domain);
+		}
+		return NT_STATUS_OK;
+	}
+
+	invalidate_cm_connection(&domain->conn);
+
+	result = cm_open_connection(domain, &domain->conn);
+
+	if (NT_STATUS_IS_OK(result) && !domain->initialized) {
+		set_dc_type_and_flags(domain);
+	}
+
+	return result;
+}
+
+NTSTATUS init_dc_connection(struct winbindd_domain *domain)
+{
+	if (domain->initialized && !domain->online) {
+		/* We check for online status elsewhere. */
+		return NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND;
+	}
+
+	return init_dc_connection_network(domain);
+}
+
+/******************************************************************************
+ We can 'sense' certain things about the DC by it's replies to certain
+ questions.
+
+ This tells us if this particular remote server is Active Directory, and if it
+ is native mode.
+******************************************************************************/
+
+static void set_dc_type_and_flags( struct winbindd_domain *domain )
+{
+	NTSTATUS 		result;
+	DS_DOMINFO_CTR		ctr;
+	TALLOC_CTX              *mem_ctx = NULL;
+	struct rpc_pipe_client  *cli;
+	POLICY_HND pol;
+
+	char *domain_name = NULL;
+	char *dns_name = NULL;
+	char *forest_name = NULL;	
+	DOM_SID *dom_sid = NULL;	
+
+	ZERO_STRUCT( ctr );
+	
+	if (!connection_ok(domain)) {
+		return;
+	}
+
+	DEBUG(5, ("set_dc_type_and_flags: domain %s\n", domain->name ));
+
+	cli = cli_rpc_pipe_open_noauth(domain->conn.cli, PI_LSARPC_DS,
+				       &result);
+
+	if (cli == NULL) {
+		DEBUG(5, ("set_dc_type_and_flags: Could not bind to "
+			  "PI_LSARPC_DS on domain %s: (%s)\n",
+			  domain->name, nt_errstr(result)));
+
+		/* if this is just a non-AD domain we need to continue
+		 * identifying so that we can in the end return with
+		 * domain->initialized = True - gd */
+
+		goto no_lsarpc_ds;
+	}
+
+	result = rpccli_ds_getprimarydominfo(cli, cli->cli->mem_ctx,
+					     DsRolePrimaryDomainInfoBasic,
+					     &ctr);
+	cli_rpc_pipe_close(cli);
+
+	if (!NT_STATUS_IS_OK(result)) {
+		DEBUG(5, ("set_dc_type_and_flags: rpccli_ds_getprimarydominfo "
+			  "on domain %s failed: (%s)\n",
+			  domain->name, nt_errstr(result)));
+
+		/* older samba3 DCs will return DCERPC_FAULT_OP_RNG_ERROR for
+		 * every opcode on the LSARPC_DS pipe, continue with
+		 * no_lsarpc_ds mode here as well to get domain->initialized
+		 * set - gd */
+
+		if (NT_STATUS_V(result) == DCERPC_FAULT_OP_RNG_ERROR) {
+			goto no_lsarpc_ds;
+		}
+
+		return;
+	}
+	
+	if ((ctr.basic->flags & DSROLE_PRIMARY_DS_RUNNING) &&
+	    !(ctr.basic->flags & DSROLE_PRIMARY_DS_MIXED_MODE)) {
+		domain->native_mode = True;
+	} else {
+		domain->native_mode = False;
+	}
+
+no_lsarpc_ds:
+	cli = cli_rpc_pipe_open_noauth(domain->conn.cli, PI_LSARPC, &result);
+
+	if (cli == NULL) {
+		DEBUG(5, ("set_dc_type_and_flags: Could not bind to "
+			  "PI_LSARPC on domain %s: (%s)\n",
+			  domain->name, nt_errstr(result)));
+		cli_rpc_pipe_close(cli);
+		return;
+	}
+
+	mem_ctx = talloc_init("set_dc_type_and_flags on domain %s\n",
+			      domain->name);
+	if (!mem_ctx) {
+		DEBUG(1, ("set_dc_type_and_flags: talloc_init() failed\n"));
+		cli_rpc_pipe_close(cli);
+		return;
+	}
+
+	result = rpccli_lsa_open_policy2(cli, mem_ctx, True, 
+					 SEC_RIGHTS_MAXIMUM_ALLOWED, &pol);
+		
+	if (NT_STATUS_IS_OK(result)) {
+		/* This particular query is exactly what Win2k clients use 
+		   to determine that the DC is active directory */
+		result = rpccli_lsa_query_info_policy2(cli, mem_ctx, &pol,
+						       12, &domain_name,
+						       &dns_name, &forest_name,
+						       NULL, &dom_sid);
+	}
+
+	if (NT_STATUS_IS_OK(result)) {
+		domain->active_directory = True;
+
+		if (domain_name)
+			fstrcpy(domain->name, domain_name);
+
+		if (dns_name)
+			fstrcpy(domain->alt_name, dns_name);
+
+		if ( forest_name )
+			fstrcpy(domain->forest_name, forest_name);		
+
+		if (dom_sid) 
+			sid_copy(&domain->sid, dom_sid);
+	} else {
+		domain->active_directory = False;
+
+		result = rpccli_lsa_open_policy(cli, mem_ctx, True, 
+						SEC_RIGHTS_MAXIMUM_ALLOWED,
+						&pol);
+			
+		if (!NT_STATUS_IS_OK(result))
+			goto done;
+			
+		result = rpccli_lsa_query_info_policy(cli, mem_ctx, 
+						      &pol, 5, &domain_name, 
+						      &dom_sid);
+			
+		if (NT_STATUS_IS_OK(result)) {
+			if (domain_name)
+				fstrcpy(domain->name, domain_name);
+
+			if (dom_sid) 
+				sid_copy(&domain->sid, dom_sid);
+		}
+	}
+done:
+
+	DEBUG(5, ("set_dc_type_and_flags: domain %s is %sin native mode.\n",
+		  domain->name, domain->native_mode ? "" : "NOT "));
+
+	DEBUG(5,("set_dc_type_and_flags: domain %s is %srunning active directory.\n",
+		  domain->name, domain->active_directory ? "" : "NOT "));
+
+	cli_rpc_pipe_close(cli);
+	
+	talloc_destroy(mem_ctx);
+
+	domain->initialized = True;
+}
+
+static BOOL cm_get_schannel_dcinfo(struct winbindd_domain *domain,
+				   struct dcinfo **ppdc)
+{
+	NTSTATUS result;
+	struct rpc_pipe_client *netlogon_pipe;
+
+	if (lp_client_schannel() == False) {
+		return False;
+	}
+
+	result = cm_connect_netlogon(domain, &netlogon_pipe);
+	if (!NT_STATUS_IS_OK(result)) {
+		return False;
+	}
+
+	/* Return a pointer to the struct dcinfo from the
+	   netlogon pipe. */
+
+	*ppdc = domain->conn.netlogon_pipe->dc;
+	return True;
+}
+
+NTSTATUS cm_connect_sam(struct winbindd_domain *domain, TALLOC_CTX *mem_ctx,
+			struct rpc_pipe_client **cli, POLICY_HND *sam_handle)
+{
+	struct winbindd_cm_conn *conn;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+	fstring conn_pwd;
+	struct dcinfo *p_dcinfo;
+	char *machine_password = NULL;
+	char *machine_account = NULL;
+	char *domain_name = NULL;
+
+	result = init_dc_connection(domain);
+	if (!NT_STATUS_IS_OK(result)) {
+		return result;
+	}
+
+	conn = &domain->conn;
+
+	if (conn->samr_pipe != NULL) {
+		goto done;
+	}
+
+	/*
+	 * No SAMR pipe yet. Attempt to get an NTLMSSP SPNEGO authenticated
+	 * sign and sealed pipe using the machine account password by
+	 * preference. If we can't - try schannel, if that fails, try
+	 * anonymous.
+	 */
+
+	pwd_get_cleartext(&conn->cli->pwd, conn_pwd);
+	if ((conn->cli->user_name[0] == '\0') ||
+	    (conn->cli->domain[0] == '\0') || 
+	    (conn_pwd[0] == '\0'))
+	{
+		result = get_trust_creds(domain, &machine_password,
+					 &machine_account, NULL);
+		if (!NT_STATUS_IS_OK(result)) {
+			DEBUG(10, ("cm_connect_sam: No no user available for "
+				   "domain %s, trying schannel\n", conn->cli->domain));
+			goto schannel;
+		}
+		domain_name = domain->name;
+	} else {
+		machine_password = SMB_STRDUP(conn_pwd);		
+		machine_account = SMB_STRDUP(conn->cli->user_name);
+		domain_name = conn->cli->domain;
+	}
+
+	if (!machine_password || !machine_account) {
+		result = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	/* We have an authenticated connection. Use a NTLMSSP SPNEGO
+	   authenticated SAMR pipe with sign & seal. */
+	conn->samr_pipe =
+		cli_rpc_pipe_open_spnego_ntlmssp(conn->cli, PI_SAMR,
+						 PIPE_AUTH_LEVEL_PRIVACY,
+						 domain_name,
+						 machine_account,
+						 machine_password, &result);
+
+	if (conn->samr_pipe == NULL) {
+		DEBUG(10,("cm_connect_sam: failed to connect to SAMR "
+			  "pipe for domain %s using NTLMSSP "
+			  "authenticated pipe: user %s\\%s. Error was "
+			  "%s\n", domain->name, domain_name,
+			  machine_account, nt_errstr(result)));
+		goto schannel;
+	}
+
+	DEBUG(10,("cm_connect_sam: connected to SAMR pipe for "
+		  "domain %s using NTLMSSP authenticated "
+		  "pipe: user %s\\%s\n", domain->name,
+		  domain_name, machine_account));
+
+	result = rpccli_samr_connect(conn->samr_pipe, mem_ctx,
+				     SEC_RIGHTS_MAXIMUM_ALLOWED,
+				     &conn->sam_connect_handle);
+	if (NT_STATUS_IS_OK(result)) {
+		goto open_domain;
+	}
+	DEBUG(10,("cm_connect_sam: ntlmssp-sealed rpccli_samr_connect "
+		  "failed for domain %s, error was %s. Trying schannel\n",
+		  domain->name, nt_errstr(result) ));
+	cli_rpc_pipe_close(conn->samr_pipe);
+
+ schannel:
+
+	/* Fall back to schannel if it's a W2K pre-SP1 box. */
+
+	if (!cm_get_schannel_dcinfo(domain, &p_dcinfo)) {
+		/* If this call fails - conn->cli can now be NULL ! */
+		DEBUG(10, ("cm_connect_sam: Could not get schannel auth info "
+			   "for domain %s, trying anon\n", domain->name));
+		goto anonymous;
+	}
+	conn->samr_pipe = cli_rpc_pipe_open_schannel_with_key
+		(conn->cli, PI_SAMR, PIPE_AUTH_LEVEL_PRIVACY,
+		 domain->name, p_dcinfo, &result);
+
+	if (conn->samr_pipe == NULL) {
+		DEBUG(10,("cm_connect_sam: failed to connect to SAMR pipe for "
+			  "domain %s using schannel. Error was %s\n",
+			  domain->name, nt_errstr(result) ));
+		goto anonymous;
+	}
+	DEBUG(10,("cm_connect_sam: connected to SAMR pipe for domain %s using "
+		  "schannel.\n", domain->name ));
+
+	result = rpccli_samr_connect(conn->samr_pipe, mem_ctx,
+				     SEC_RIGHTS_MAXIMUM_ALLOWED,
+				     &conn->sam_connect_handle);
+	if (NT_STATUS_IS_OK(result)) {
+		goto open_domain;
+	}
+	DEBUG(10,("cm_connect_sam: schannel-sealed rpccli_samr_connect failed "
+		  "for domain %s, error was %s. Trying anonymous\n",
+		  domain->name, nt_errstr(result) ));
+	cli_rpc_pipe_close(conn->samr_pipe);
+
+ anonymous:
+
+	/* Finally fall back to anonymous. */
+	conn->samr_pipe = cli_rpc_pipe_open_noauth(conn->cli, PI_SAMR,
+						   &result);
+
+	if (conn->samr_pipe == NULL) {
+		result = NT_STATUS_PIPE_NOT_AVAILABLE;
+		goto done;
+	}
+
+	result = rpccli_samr_connect(conn->samr_pipe, mem_ctx,
+				     SEC_RIGHTS_MAXIMUM_ALLOWED,
+				     &conn->sam_connect_handle);
+	if (!NT_STATUS_IS_OK(result)) {
+		DEBUG(10,("cm_connect_sam: rpccli_samr_connect failed "
+			  "for domain %s Error was %s\n",
+			  domain->name, nt_errstr(result) ));
+		goto done;
+	}
+
+ open_domain:
+	result = rpccli_samr_open_domain(conn->samr_pipe,
+					 mem_ctx,
+					 &conn->sam_connect_handle,
+					 SEC_RIGHTS_MAXIMUM_ALLOWED,
+					 &domain->sid,
+					 &conn->sam_domain_handle);
+
+ done:
+
+	if (!NT_STATUS_IS_OK(result)) {
+		invalidate_cm_connection(conn);
+		return result;
+	}
+
+	*cli = conn->samr_pipe;
+	*sam_handle = conn->sam_domain_handle;
+	SAFE_FREE(machine_password);
+	SAFE_FREE(machine_account);
+	return result;
+}
+
+NTSTATUS cm_connect_lsa(struct winbindd_domain *domain, TALLOC_CTX *mem_ctx,
+			struct rpc_pipe_client **cli, POLICY_HND *lsa_policy)
+{
+	struct winbindd_cm_conn *conn;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+	fstring conn_pwd;
+	struct dcinfo *p_dcinfo;
+
+	result = init_dc_connection(domain);
+	if (!NT_STATUS_IS_OK(result))
+		return result;
+
+	conn = &domain->conn;
+
+	if (conn->lsa_pipe != NULL) {
+		goto done;
+	}
+
+	pwd_get_cleartext(&conn->cli->pwd, conn_pwd);
+	if ((conn->cli->user_name[0] == '\0') ||
+	    (conn->cli->domain[0] == '\0') || 
+	    (conn_pwd[0] == '\0')) {
+		DEBUG(10, ("cm_connect_lsa: No no user available for "
+			   "domain %s, trying schannel\n", conn->cli->domain));
+		goto schannel;
+	}
+
+	/* We have an authenticated connection. Use a NTLMSSP SPNEGO
+	 * authenticated LSA pipe with sign & seal. */
+	conn->lsa_pipe = cli_rpc_pipe_open_spnego_ntlmssp
+		(conn->cli, PI_LSARPC, PIPE_AUTH_LEVEL_PRIVACY,
+		 conn->cli->domain, conn->cli->user_name, conn_pwd, &result);
+
+	if (conn->lsa_pipe == NULL) {
+		DEBUG(10,("cm_connect_lsa: failed to connect to LSA pipe for "
+			  "domain %s using NTLMSSP authenticated pipe: user "
+			  "%s\\%s. Error was %s. Trying schannel.\n",
+			  domain->name, conn->cli->domain,
+			  conn->cli->user_name, nt_errstr(result)));
+		goto schannel;
+	}
+
+	DEBUG(10,("cm_connect_lsa: connected to LSA pipe for domain %s using "
+		  "NTLMSSP authenticated pipe: user %s\\%s\n",
+		  domain->name, conn->cli->domain, conn->cli->user_name ));
+
+	result = rpccli_lsa_open_policy(conn->lsa_pipe, mem_ctx, True,
+					SEC_RIGHTS_MAXIMUM_ALLOWED,
+					&conn->lsa_policy);
+	if (NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	DEBUG(10,("cm_connect_lsa: rpccli_lsa_open_policy failed, trying "
+		  "schannel\n"));
+
+	cli_rpc_pipe_close(conn->lsa_pipe);
+
+ schannel:
+
+	/* Fall back to schannel if it's a W2K pre-SP1 box. */
+
+	if (!cm_get_schannel_dcinfo(domain, &p_dcinfo)) {
+		/* If this call fails - conn->cli can now be NULL ! */
+		DEBUG(10, ("cm_connect_lsa: Could not get schannel auth info "
+			   "for domain %s, trying anon\n", domain->name));
+		goto anonymous;
+	}
+	conn->lsa_pipe = cli_rpc_pipe_open_schannel_with_key
+		(conn->cli, PI_LSARPC, PIPE_AUTH_LEVEL_PRIVACY,
+		 domain->name, p_dcinfo, &result);
+
+	if (conn->lsa_pipe == NULL) {
+		DEBUG(10,("cm_connect_lsa: failed to connect to LSA pipe for "
+			  "domain %s using schannel. Error was %s\n",
+			  domain->name, nt_errstr(result) ));
+		goto anonymous;
+	}
+	DEBUG(10,("cm_connect_lsa: connected to LSA pipe for domain %s using "
+		  "schannel.\n", domain->name ));
+
+	result = rpccli_lsa_open_policy(conn->lsa_pipe, mem_ctx, True,
+					SEC_RIGHTS_MAXIMUM_ALLOWED,
+					&conn->lsa_policy);
+	if (NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	DEBUG(10,("cm_connect_lsa: rpccli_lsa_open_policy failed, trying "
+		  "anonymous\n"));
+
+	cli_rpc_pipe_close(conn->lsa_pipe);
+
+ anonymous:
+
+	conn->lsa_pipe = cli_rpc_pipe_open_noauth(conn->cli, PI_LSARPC,
+						  &result);
+	if (conn->lsa_pipe == NULL) {
+		result = NT_STATUS_PIPE_NOT_AVAILABLE;
+		goto done;
+	}
+
+	result = rpccli_lsa_open_policy(conn->lsa_pipe, mem_ctx, True,
+					SEC_RIGHTS_MAXIMUM_ALLOWED,
+					&conn->lsa_policy);
+ done:
+	if (!NT_STATUS_IS_OK(result)) {
+		invalidate_cm_connection(conn);
+		return result;
+	}
+
+	*cli = conn->lsa_pipe;
+	*lsa_policy = conn->lsa_policy;
+	return result;
+}
+
+/****************************************************************************
+ Open the netlogon pipe to this DC. Use schannel if specified in client conf.
+ session key stored in conn->netlogon_pipe->dc->sess_key.
+****************************************************************************/
+
+NTSTATUS cm_connect_netlogon(struct winbindd_domain *domain,
+			     struct rpc_pipe_client **cli)
+{
+	struct winbindd_cm_conn *conn;
+	NTSTATUS result;
+
+	uint32 neg_flags = NETLOGON_NEG_AUTH2_ADS_FLAGS;
+	uint8  mach_pwd[16];
+	uint32  sec_chan_type;
+	const char *account_name;
+	struct rpc_pipe_client *netlogon_pipe = NULL;
+
+	*cli = NULL;
+
+	result = init_dc_connection(domain);
+	if (!NT_STATUS_IS_OK(result)) {
+		return result;
+	}
+
+	conn = &domain->conn;
+
+	if (conn->netlogon_pipe != NULL) {
+		*cli = conn->netlogon_pipe;
+		return NT_STATUS_OK;
+	}
+
+	netlogon_pipe = cli_rpc_pipe_open_noauth(conn->cli, PI_NETLOGON,
+						 &result);
+	if (netlogon_pipe == NULL) {
+		return result;
+	}
+
+	if ((!IS_DC) && (!domain->primary)) {
+		/* Clear the schannel request bit and drop down */
+		neg_flags &= ~NETLOGON_NEG_SCHANNEL;		
+		goto no_schannel;
+	}
+
+	if (lp_client_schannel() != False) {
+		neg_flags |= NETLOGON_NEG_SCHANNEL;
+	}
+
+	if (!get_trust_pw_hash(domain->name, mach_pwd, &account_name,
+			       &sec_chan_type))
+	{
+		cli_rpc_pipe_close(netlogon_pipe);
+		return NT_STATUS_CANT_ACCESS_DOMAIN_INFO;
+	}
+
+	result = rpccli_netlogon_setup_creds(
+		 netlogon_pipe,
+		 domain->dcname, /* server name. */
+		 domain->name,   /* domain name */
+		 global_myname(), /* client name */
+		 account_name,   /* machine account */
+		 mach_pwd,       /* machine password */
+		 sec_chan_type,  /* from get_trust_pw */
+		 &neg_flags);
+
+	if (!NT_STATUS_IS_OK(result)) {
+		cli_rpc_pipe_close(netlogon_pipe);
+		return result;
+	}
+
+	if ((lp_client_schannel() == True) &&
+			((neg_flags & NETLOGON_NEG_SCHANNEL) == 0)) {
+		DEBUG(3, ("Server did not offer schannel\n"));
+		cli_rpc_pipe_close(netlogon_pipe);
+		return NT_STATUS_ACCESS_DENIED;
+	}
+
+ no_schannel:
+	if ((lp_client_schannel() == False) ||
+			((neg_flags & NETLOGON_NEG_SCHANNEL) == 0)) {
+		/* We're done - just keep the existing connection to NETLOGON
+		 * open */
+		conn->netlogon_pipe = netlogon_pipe;
+		*cli = conn->netlogon_pipe;
+		return NT_STATUS_OK;
+	}
+
+	/* Using the credentials from the first pipe, open a signed and sealed
+	   second netlogon pipe. The session key is stored in the schannel
+	   part of the new pipe auth struct.
+	*/
+
+	conn->netlogon_pipe =
+		cli_rpc_pipe_open_schannel_with_key(conn->cli,
+						    PI_NETLOGON,
+						    PIPE_AUTH_LEVEL_PRIVACY,
+						    domain->name,
+						    netlogon_pipe->dc,
+						    &result);
+
+	/* We can now close the initial netlogon pipe. */
+	cli_rpc_pipe_close(netlogon_pipe);
+
+	if (conn->netlogon_pipe == NULL) {
+		DEBUG(3, ("Could not open schannel'ed NETLOGON pipe. Error "
+			  "was %s\n", nt_errstr(result)));
+			  
+		/* make sure we return something besides OK */
+		return !NT_STATUS_IS_OK(result) ? result : NT_STATUS_PIPE_NOT_AVAILABLE;
+	}
+
+	*cli = conn->netlogon_pipe;
+	return NT_STATUS_OK;
+}

Copied: branches/samba/upstream/source/nsswitch/winbindd_cred_cache.c (from rev 1928, branches/samba/upstream/source/nsswitch/winbindd_cred_cache.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/winbindd_cred_cache.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/winbindd_cred_cache.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,747 @@
+/*
+   Unix SMB/CIFS implementation.
+
+   Winbind daemon - krb5 credential cache functions
+   and in-memory cache functions.
+
+   Copyright (C) Guenther Deschner 2005-2006
+   Copyright (C) Jeremy Allison 2006
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "winbindd.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_WINBIND
+
+/* uncomment this to to fast debugging on the krb5 ticket renewal event */
+#ifdef DEBUG_KRB5_TKT_RENEWAL
+#undef DEBUG_KRB5_TKT_RENEWAL
+#endif
+
+#define MAX_CCACHES 100
+
+static struct WINBINDD_CCACHE_ENTRY *ccache_list;
+
+/* The Krb5 ticket refresh handler should be scheduled 
+   at one-half of the period from now till the tkt 
+   expiration */
+#define KRB5_EVENT_REFRESH_TIME(x) ((x) - (((x) - time(NULL))/2))
+
+/****************************************************************
+ Find an entry by name.
+****************************************************************/
+
+static struct WINBINDD_CCACHE_ENTRY *get_ccache_by_username(const char *username)
+{
+	struct WINBINDD_CCACHE_ENTRY *entry;
+
+	for (entry = ccache_list; entry; entry = entry->next) {
+		if (strequal(entry->username, username)) {
+			return entry;
+		}
+	}
+	return NULL;
+}
+
+/****************************************************************
+ How many do we have ?
+****************************************************************/
+
+static int ccache_entry_count(void)
+{
+	struct WINBINDD_CCACHE_ENTRY *entry;
+	int i = 0;
+
+	for (entry = ccache_list; entry; entry = entry->next) {
+		i++;
+	}
+	return i;
+}
+
+/****************************************************************
+ Do the work of refreshing the ticket.
+****************************************************************/
+
+static void krb5_ticket_refresh_handler(struct event_context *event_ctx,
+					struct timed_event *te,
+					const struct timeval *now,
+					void *private_data)
+{
+	struct WINBINDD_CCACHE_ENTRY *entry =
+		talloc_get_type_abort(private_data, struct WINBINDD_CCACHE_ENTRY);
+#ifdef HAVE_KRB5
+	int ret;
+	time_t new_start;
+	struct WINBINDD_MEMORY_CREDS *cred_ptr = entry->cred_ptr;
+#endif
+
+	DEBUG(10,("krb5_ticket_refresh_handler called\n"));
+	DEBUGADD(10,("event called for: %s, %s\n", entry->ccname, entry->username));
+
+	TALLOC_FREE(entry->event);
+
+#ifdef HAVE_KRB5
+
+	/* Kinit again if we have the user password and we can't renew the old
+	 * tgt anymore */
+
+	if ((entry->renew_until < time(NULL)) && cred_ptr && cred_ptr->pass) {
+	     
+		set_effective_uid(entry->uid);
+
+		ret = kerberos_kinit_password_ext(entry->principal_name,
+						  cred_ptr->pass,
+						  0, /* hm, can we do time correction here ? */
+						  &entry->refresh_time,
+						  &entry->renew_until,
+						  entry->ccname,
+						  False, /* no PAC required anymore */
+						  True,
+						  WINBINDD_PAM_AUTH_KRB5_RENEW_TIME);
+		gain_root_privilege();
+
+		if (ret) {
+			DEBUG(3,("krb5_ticket_refresh_handler: could not re-kinit: %s\n",
+				error_message(ret)));
+			TALLOC_FREE(entry->event);
+			return;
+		}
+
+		DEBUG(10,("krb5_ticket_refresh_handler: successful re-kinit "
+			"for: %s in ccache: %s\n", 
+			entry->principal_name, entry->ccname));
+
+#if defined(DEBUG_KRB5_TKT_RENEWAL)
+		new_start = time(NULL) + 30;		
+#else
+		/* The tkt should be refreshed at one-half the period
+		   from now to the expiration time */
+		new_start = KRB5_EVENT_REFRESH_TIME(entry->refresh_time);
+#endif
+
+		goto done;
+	}
+
+	set_effective_uid(entry->uid);
+
+	ret = smb_krb5_renew_ticket(entry->ccname, 
+				    entry->principal_name,
+				    entry->service,
+				    &new_start);
+#if defined(DEBUG_KRB5_TKT_RENEWAL)
+	new_start = time(NULL) + 30;
+#else
+	new_start = KRB5_EVENT_REFRESH_TIME(new_start);
+#endif
+
+	gain_root_privilege();
+
+	if (ret) {
+		DEBUG(3,("krb5_ticket_refresh_handler: could not renew tickets: %s\n",
+			error_message(ret)));
+		/* maybe we are beyond the renewing window */
+
+		/* avoid breaking the renewal chain: retry in lp_winbind_cache_time()
+		 * seconds when the KDC was not available right now. */
+
+		if (ret == KRB5_KDC_UNREACH) {
+			new_start = time(NULL) + MAX(30, lp_winbind_cache_time());
+			goto done;
+		}
+
+		return;
+	}
+
+done:
+
+	entry->event = event_add_timed(winbind_event_context(), entry, 
+				       timeval_set(new_start, 0),
+				       "krb5_ticket_refresh_handler",
+				       krb5_ticket_refresh_handler,
+				       entry);
+
+#endif
+}
+
+/****************************************************************
+ Do the work of regaining a ticket when coming from offline auth.
+****************************************************************/
+
+static void krb5_ticket_gain_handler(struct event_context *event_ctx,
+				     struct timed_event *te,
+					const struct timeval *now,
+					void *private_data)
+{
+	struct WINBINDD_CCACHE_ENTRY *entry =
+		talloc_get_type_abort(private_data, struct WINBINDD_CCACHE_ENTRY);
+#ifdef HAVE_KRB5
+	int ret;
+	struct timeval t;
+	struct WINBINDD_MEMORY_CREDS *cred_ptr = entry->cred_ptr;
+	struct winbindd_domain *domain = NULL;
+#endif
+
+	DEBUG(10,("krb5_ticket_gain_handler called\n"));
+	DEBUGADD(10,("event called for: %s, %s\n", entry->ccname, entry->username));
+
+	TALLOC_FREE(entry->event);
+
+#ifdef HAVE_KRB5
+
+	if (!cred_ptr || !cred_ptr->pass) {
+		DEBUG(10,("krb5_ticket_gain_handler: no memory creds\n"));
+		return;
+	}
+
+	if ((domain = find_domain_from_name(entry->realm)) == NULL) {
+		DEBUG(0,("krb5_ticket_gain_handler: unknown domain\n"));
+		return;
+	}
+
+	if (domain->online) {
+
+		set_effective_uid(entry->uid);
+
+		ret = kerberos_kinit_password_ext(entry->principal_name,
+						cred_ptr->pass,
+						0, /* hm, can we do time correction here ? */
+						&entry->refresh_time,
+						&entry->renew_until,
+						entry->ccname,
+						False, /* no PAC required anymore */
+						True,
+						WINBINDD_PAM_AUTH_KRB5_RENEW_TIME);
+		gain_root_privilege();
+
+		if (ret) {
+			DEBUG(3,("krb5_ticket_gain_handler: could not kinit: %s\n",
+				error_message(ret)));
+			goto retry_later;
+		}
+
+		DEBUG(10,("krb5_ticket_gain_handler: successful kinit for: %s in ccache: %s\n",
+			entry->principal_name, entry->ccname));
+
+		goto got_ticket;
+	}
+
+  retry_later:
+
+	entry->event = event_add_timed(winbind_event_context(), entry,
+					timeval_current_ofs(MAX(30, lp_winbind_cache_time()), 0),
+					"krb5_ticket_gain_handler",
+					krb5_ticket_gain_handler,
+					entry);
+
+	return;
+
+  got_ticket:
+
+#if defined(DEBUG_KRB5_TKT_RENEWAL)
+	t = timeval_set(time(NULL) + 30, 0);
+#else
+	t = timeval_set(KRB5_EVENT_REFRESH_TIME(entry->refresh_time), 0);
+#endif
+
+	entry->event = event_add_timed(winbind_event_context(), entry,
+					t,
+					"krb5_ticket_refresh_handler",
+					krb5_ticket_refresh_handler,
+					entry);
+
+	return;
+#endif
+}
+
+/****************************************************************
+ Check if an ccache entry exists.
+****************************************************************/
+
+BOOL ccache_entry_exists(const char *username)
+{
+	struct WINBINDD_CCACHE_ENTRY *entry = get_ccache_by_username(username);
+	return (entry != NULL);
+}
+
+/****************************************************************
+ Ensure we're changing the correct entry.
+****************************************************************/
+
+BOOL ccache_entry_identical(const char *username, uid_t uid, const char *ccname)
+{
+	struct WINBINDD_CCACHE_ENTRY *entry = get_ccache_by_username(username);
+
+	if (!entry) {
+		return False;
+	}
+
+	if (entry->uid != uid) {
+		DEBUG(0,("cache_entry_identical: uid's differ: %u != %u\n",
+			(unsigned int)entry->uid, (unsigned int)uid ));
+		return False;
+	}
+	if (!strcsequal(entry->ccname, ccname)) {
+		DEBUG(0,("cache_entry_identical: ccnames differ: (cache) %s != (client) %s\n",
+                        entry->ccname, ccname));
+		return False;
+	}
+	return True;
+}
+
+NTSTATUS add_ccache_to_list(const char *princ_name,
+			    const char *ccname,
+			    const char *service,
+			    const char *username, 
+			    const char *realm,
+			    uid_t uid,
+			    time_t create_time, 
+			    time_t ticket_end, 
+			    time_t renew_until, 
+			    BOOL postponed_request)
+{
+	struct WINBINDD_CCACHE_ENTRY *entry = NULL;
+
+	if ((username == NULL && princ_name == NULL) || ccname == NULL || uid < 0) {
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	if (ccache_entry_count() + 1 > MAX_CCACHES) {
+		DEBUG(10,("add_ccache_to_list: max number of ccaches reached\n"));
+		return NT_STATUS_NO_MORE_ENTRIES;
+	}
+
+	/* Reference count old entries */
+	entry = get_ccache_by_username(username);
+	if (entry) {
+		/* Check cached entries are identical. */
+		if (!ccache_entry_identical(username, uid, ccname)) {
+			return NT_STATUS_INVALID_PARAMETER;
+		}
+		entry->ref_count++;
+		DEBUG(10,("add_ccache_to_list: ref count on entry %s is now %d\n",
+			username, entry->ref_count));
+		/* FIXME: in this case we still might want to have a krb5 cred
+		 * event handler created - gd*/
+		return NT_STATUS_OK;
+	}
+	
+	entry = TALLOC_P(NULL, struct WINBINDD_CCACHE_ENTRY);
+	if (!entry) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	ZERO_STRUCTP(entry);
+
+	if (username) {
+		entry->username = talloc_strdup(entry, username);
+		if (!entry->username) {
+			goto no_mem;
+		}
+	}
+	if (princ_name) {
+		entry->principal_name = talloc_strdup(entry, princ_name);
+		if (!entry->principal_name) {
+			goto no_mem;
+		}
+	}
+	if (service) {
+		entry->service = talloc_strdup(entry, service);
+		if (!entry->service) {
+			goto no_mem;
+		}
+	}
+
+	entry->ccname = talloc_strdup(entry, ccname);
+	if (!entry->ccname) {
+		goto no_mem;
+	}
+
+	entry->realm = talloc_strdup(entry, realm);
+	if (!entry->realm) {
+		goto no_mem;
+	}
+
+	entry->create_time = create_time;
+	entry->renew_until = renew_until;
+	entry->uid = uid;
+	entry->ref_count = 1;
+
+	if (lp_winbind_refresh_tickets() && renew_until > 0) {
+		if (postponed_request) {
+			entry->event = event_add_timed(winbind_event_context(), entry,
+						timeval_current_ofs(MAX(30, lp_winbind_cache_time()), 0),
+						"krb5_ticket_gain_handler",
+						krb5_ticket_gain_handler,
+						entry);
+		} else {
+			/* Renew at 1/2 the ticket expiration time */
+			entry->event = event_add_timed(winbind_event_context(), entry,
+#if defined(DEBUG_KRB5_TKT_RENEWAL)
+						timeval_set(time(NULL)+30, 0),
+#else
+						timeval_set(KRB5_EVENT_REFRESH_TIME(ticket_end), 0),
+#endif
+						"krb5_ticket_refresh_handler",
+						krb5_ticket_refresh_handler,
+						entry);
+		}
+
+		if (!entry->event) {
+			goto no_mem;
+		}
+
+		DEBUG(10,("add_ccache_to_list: added krb5_ticket handler\n"));
+	}
+
+	DLIST_ADD(ccache_list, entry);
+
+	DEBUG(10,("add_ccache_to_list: added ccache [%s] for user [%s] to the list\n", ccname, username));
+
+	return NT_STATUS_OK;
+
+ no_mem:
+
+	TALLOC_FREE(entry);
+	return NT_STATUS_NO_MEMORY;
+}
+
+/*******************************************************************
+ Remove a WINBINDD_CCACHE_ENTRY entry and the krb5 ccache if no longer referenced.
+*******************************************************************/
+
+NTSTATUS remove_ccache(const char *username)
+{
+	struct WINBINDD_CCACHE_ENTRY *entry = get_ccache_by_username(username);
+	NTSTATUS status = NT_STATUS_OK;
+#ifdef HAVE_KRB5
+	krb5_error_code ret;
+#endif
+
+	if (!entry) {
+		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
+	}
+
+	if (entry->ref_count <= 0) {
+		DEBUG(0,("remove_ccache: logic error. ref count for user %s = %d\n",
+			username, entry->ref_count));
+		return NT_STATUS_INTERNAL_DB_CORRUPTION;
+	}
+
+	entry->ref_count--;
+
+	if (entry->ref_count > 0) {
+		DEBUG(10,("remove_ccache: entry %s ref count now %d\n",
+			username, entry->ref_count ));
+		return NT_STATUS_OK;
+	}
+
+	/* no references any more */
+
+	DLIST_REMOVE(ccache_list, entry);
+	TALLOC_FREE(entry->event); /* unregisters events */
+
+#ifdef HAVE_KRB5
+	ret = ads_kdestroy(entry->ccname);
+
+	/* we ignore the error when there has been no credential cache */
+	if (ret == KRB5_FCC_NOFILE) {
+		ret = 0;
+	} else if (ret) {
+		DEBUG(0,("remove_ccache: failed to destroy user krb5 ccache %s with: %s\n",
+			entry->ccname, error_message(ret)));
+	} else {
+		DEBUG(10,("remove_ccache: successfully destroyed krb5 ccache %s for user %s\n",
+			entry->ccname, username));
+	}
+	status = krb5_to_nt_status(ret);
+#endif
+
+	TALLOC_FREE(entry);
+ 	DEBUG(10,("remove_ccache: removed ccache for user %s\n", username));
+
+	return status;
+}
+
+/*******************************************************************
+ In memory credentials cache code.
+*******************************************************************/
+
+static struct WINBINDD_MEMORY_CREDS *memory_creds_list;
+
+/***********************************************************
+ Find an entry on the list by name.
+***********************************************************/
+
+struct WINBINDD_MEMORY_CREDS *find_memory_creds_by_name(const char *username)
+{
+	struct WINBINDD_MEMORY_CREDS *p;
+
+	for (p = memory_creds_list; p; p = p->next) {
+		if (strequal(p->username, username)) {
+			return p;
+		}
+	}
+	return NULL;
+}
+
+/***********************************************************
+ Store the required creds and mlock them.
+***********************************************************/
+
+static NTSTATUS store_memory_creds(struct WINBINDD_MEMORY_CREDS *memcredp, const char *pass)
+{
+#if !defined(HAVE_MLOCK)
+	return NT_STATUS_OK;
+#else
+	/* new_entry->nt_hash is the base pointer for the block
+	   of memory pointed into by new_entry->lm_hash and
+	   new_entry->pass (if we're storing plaintext). */
+
+	memcredp->len = NT_HASH_LEN + LM_HASH_LEN;
+	if (pass) {
+		memcredp->len += strlen(pass)+1;
+	}
+
+
+#if defined(LINUX)
+	/* aligning the memory on on x86_64 and compiling 
+	   with gcc 4.1 using -O2 causes a segv in the 
+	   next memset()  --jerry */
+	memcredp->nt_hash = SMB_MALLOC_ARRAY(unsigned char, memcredp->len);
+#else
+	/* On non-linux platforms, mlock()'d memory must be aligned */
+	memcredp->nt_hash = SMB_MEMALIGN_ARRAY(unsigned char, 
+					       getpagesize(), memcredp->len);
+#endif
+	if (!memcredp->nt_hash) {
+		return NT_STATUS_NO_MEMORY;
+	}
+	memset( memcredp->nt_hash, 0x0, memcredp->len );
+
+	memcredp->lm_hash = memcredp->nt_hash + NT_HASH_LEN;
+
+#ifdef DEBUG_PASSWORD
+	DEBUG(10,("mlocking memory: %p\n", memcredp->nt_hash));
+#endif		
+	if ((mlock(memcredp->nt_hash, memcredp->len)) == -1) {
+		DEBUG(0,("failed to mlock memory: %s (%d)\n", 
+			strerror(errno), errno));
+		SAFE_FREE(memcredp->nt_hash);
+		return map_nt_error_from_unix(errno);
+	}
+
+#ifdef DEBUG_PASSWORD
+	DEBUG(10,("mlocked memory: %p\n", memcredp->nt_hash));
+#endif		
+
+	/* Create and store the password hashes. */
+	E_md4hash(pass, memcredp->nt_hash);
+	E_deshash(pass, memcredp->lm_hash);
+
+	if (pass) {
+		memcredp->pass = (char *)memcredp->lm_hash + LM_HASH_LEN;
+		memcpy(memcredp->pass, pass, memcredp->len - NT_HASH_LEN - LM_HASH_LEN);
+	}
+
+	return NT_STATUS_OK;
+#endif
+}
+
+/***********************************************************
+ Destroy existing creds.
+***********************************************************/
+
+static NTSTATUS delete_memory_creds(struct WINBINDD_MEMORY_CREDS *memcredp)
+{
+#if !defined(HAVE_MUNLOCK)
+	return NT_STATUS_OK;
+#else
+	if (munlock(memcredp->nt_hash, memcredp->len) == -1) {
+		DEBUG(0,("failed to munlock memory: %s (%d)\n", 
+			strerror(errno), errno));
+		return map_nt_error_from_unix(errno);
+	}
+	memset(memcredp->nt_hash, '\0', memcredp->len);
+	SAFE_FREE(memcredp->nt_hash);
+	memcredp->nt_hash = NULL;
+	memcredp->lm_hash = NULL;
+	memcredp->pass = NULL;
+	memcredp->len = 0;
+	return NT_STATUS_OK;
+#endif
+}
+
+/***********************************************************
+ Replace the required creds with new ones (password change).
+***********************************************************/
+
+static NTSTATUS winbindd_replace_memory_creds_internal(struct WINBINDD_MEMORY_CREDS *memcredp,
+						const char *pass)
+{
+	NTSTATUS status = delete_memory_creds(memcredp);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
+	}
+	return store_memory_creds(memcredp, pass);
+}
+
+/*************************************************************
+ Store credentials in memory in a list.
+*************************************************************/
+
+static NTSTATUS winbindd_add_memory_creds_internal(const char *username, uid_t uid, const char *pass)
+{
+	/* Shortcut to ensure we don't store if no mlock. */
+#if !defined(HAVE_MLOCK) || !defined(HAVE_MUNLOCK)
+	return NT_STATUS_OK;
+#else
+	NTSTATUS status;
+	struct WINBINDD_MEMORY_CREDS *memcredp = find_memory_creds_by_name(username);
+
+	if (uid == (uid_t)-1) {
+		DEBUG(0,("winbindd_add_memory_creds_internal: invalid uid for user %s.\n",
+			username ));
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	if (memcredp) {
+		/* Already exists. Increment the reference count and replace stored creds. */
+		if (uid != memcredp->uid) {
+			DEBUG(0,("winbindd_add_memory_creds_internal: uid %u for user %s doesn't "
+				"match stored uid %u. Replacing.\n",
+				(unsigned int)uid, username, (unsigned int)memcredp->uid ));
+			memcredp->uid = uid;
+		}
+		memcredp->ref_count++;
+		DEBUG(10,("winbindd_add_memory_creds_internal: ref count for user %s is now %d\n",
+			username, memcredp->ref_count ));
+		return winbindd_replace_memory_creds_internal(memcredp, pass);
+	}
+
+	memcredp = TALLOC_ZERO_P(NULL, struct WINBINDD_MEMORY_CREDS);
+	if (!memcredp) {
+		return NT_STATUS_NO_MEMORY;
+	}
+	memcredp->username = talloc_strdup(memcredp, username);
+	if (!memcredp->username) {
+		talloc_destroy(memcredp);
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	status = store_memory_creds(memcredp, pass);
+	if (!NT_STATUS_IS_OK(status)) {
+		talloc_destroy(memcredp);
+		return status;
+	}
+
+	memcredp->uid = uid;
+	memcredp->ref_count = 1;
+	DLIST_ADD(memory_creds_list, memcredp);
+
+	DEBUG(10,("winbindd_add_memory_creds_internal: added entry for user %s\n",
+		username ));
+
+	return NT_STATUS_OK;
+#endif
+}
+
+/*************************************************************
+ Store users credentials in memory. If we also have a 
+ struct WINBINDD_CCACHE_ENTRY for this username with a
+ refresh timer, then store the plaintext of the password
+ and associate the new credentials with the struct WINBINDD_CCACHE_ENTRY.
+*************************************************************/
+
+NTSTATUS winbindd_add_memory_creds(const char *username, uid_t uid, const char *pass)
+{
+	struct WINBINDD_CCACHE_ENTRY *entry = get_ccache_by_username(username);
+	NTSTATUS status;
+
+	status = winbindd_add_memory_creds_internal(username, uid, pass);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
+	}
+
+	if (entry) {
+		struct WINBINDD_MEMORY_CREDS *memcredp = find_memory_creds_by_name(username);
+		if (memcredp) {
+			entry->cred_ptr = memcredp;
+		}
+	}
+
+	return status;
+}
+
+/*************************************************************
+ Decrement the in-memory ref count - delete if zero.
+*************************************************************/
+
+NTSTATUS winbindd_delete_memory_creds(const char *username)
+{
+	struct WINBINDD_MEMORY_CREDS *memcredp = find_memory_creds_by_name(username);
+	struct WINBINDD_CCACHE_ENTRY *entry = get_ccache_by_username(username);
+	NTSTATUS status = NT_STATUS_OK;
+
+	if (!memcredp) {
+		DEBUG(10,("winbindd_delete_memory_creds: unknown user %s\n",
+			username ));
+		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
+	}
+
+	if (memcredp->ref_count <= 0) {
+		DEBUG(0,("winbindd_delete_memory_creds: logic error. ref count for user %s = %d\n",
+			username, memcredp->ref_count));
+		status = NT_STATUS_INTERNAL_DB_CORRUPTION;
+	}
+
+	memcredp->ref_count--;
+	if (memcredp->ref_count <= 0) {
+		delete_memory_creds(memcredp);
+		DLIST_REMOVE(memory_creds_list, memcredp);
+		talloc_destroy(memcredp);
+		DEBUG(10,("winbindd_delete_memory_creds: deleted entry for user %s\n",
+			username));
+	} else {
+		DEBUG(10,("winbindd_delete_memory_creds: entry for user %s ref_count now %d\n",
+			username, memcredp->ref_count));
+	}
+
+	if (entry) {
+		entry->cred_ptr = NULL; /* Ensure we have no dangling references to this. */
+	}
+	return status;
+}
+
+/***********************************************************
+ Replace the required creds with new ones (password change).
+***********************************************************/
+
+NTSTATUS winbindd_replace_memory_creds(const char *username, const char *pass)
+{
+	struct WINBINDD_MEMORY_CREDS *memcredp = find_memory_creds_by_name(username);
+
+	if (!memcredp) {
+		DEBUG(10,("winbindd_replace_memory_creds: unknown user %s\n",
+			username ));
+		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
+	}
+
+	DEBUG(10,("winbindd_replace_memory_creds: replaced creds for user %s\n",
+		username ));
+
+	return winbindd_replace_memory_creds_internal(memcredp, pass);
+}

Copied: branches/samba/upstream/source/nsswitch/winbindd_creds.c (from rev 1928, branches/samba/upstream/source/nsswitch/winbindd_creds.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/winbindd_creds.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/winbindd_creds.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,165 @@
+/*
+   Unix SMB/CIFS implementation.
+
+   Winbind daemon - cached credentials funcions
+
+   Copyright (C) Guenther Deschner 2005
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "winbindd.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_WINBIND
+
+#define MAX_CACHED_LOGINS 10
+
+NTSTATUS winbindd_get_creds(struct winbindd_domain *domain,
+			    TALLOC_CTX *mem_ctx,
+			    const DOM_SID *sid,
+			    NET_USER_INFO_3 **info3,
+			    const uint8 *cached_nt_pass[NT_HASH_LEN],
+			    const uint8 *cred_salt[NT_HASH_LEN])
+{
+	NET_USER_INFO_3 *info;
+	NTSTATUS status;
+
+	status = wcache_get_creds(domain, mem_ctx, sid, cached_nt_pass, cred_salt);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
+	}
+
+	info = netsamlogon_cache_get(mem_ctx, sid);
+	if (info == NULL) {
+		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
+	}
+
+	*info3 = info;
+
+	return NT_STATUS_OK;
+}
+
+
+NTSTATUS winbindd_store_creds(struct winbindd_domain *domain,
+			      TALLOC_CTX *mem_ctx, 
+			      const char *user, 
+			      const char *pass, 
+			      NET_USER_INFO_3 *info3,
+			      const DOM_SID *user_sid)
+{
+	NTSTATUS status;
+	uchar nt_pass[NT_HASH_LEN];
+	DOM_SID cred_sid;
+
+	if (info3 != NULL) {
+	
+		DOM_SID sid;
+		sid_copy(&sid, &(info3->dom_sid.sid));
+		sid_append_rid(&sid, info3->user_rid);
+		sid_copy(&cred_sid, &sid);
+		info3->user_flgs |= LOGON_CACHED_ACCOUNT;
+		
+	} else if (user_sid != NULL) {
+	
+		sid_copy(&cred_sid, user_sid);
+		
+	} else if (user != NULL) {
+	
+		/* do lookup ourself */
+
+		enum lsa_SidType type;
+		
+		if (!lookup_cached_name(mem_ctx,
+	        	                domain->name,
+					user,
+					&cred_sid,
+					&type)) {
+			return NT_STATUS_NO_SUCH_USER;
+		}
+	} else {
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+		
+	if (pass) {
+
+		int count = 0;
+
+		status = wcache_count_cached_creds(domain, &count);
+		if (!NT_STATUS_IS_OK(status)) {
+			return status;
+		}
+
+		DEBUG(11,("we have %d cached creds\n", count));
+
+		if (count + 1 > MAX_CACHED_LOGINS) {
+
+			DEBUG(10,("need to delete the oldest cached login\n"));
+
+			status = wcache_remove_oldest_cached_creds(domain, &cred_sid);
+			if (!NT_STATUS_IS_OK(status)) {
+				DEBUG(10,("failed to remove oldest cached cred: %s\n", 
+					nt_errstr(status)));
+				return status;
+			}
+		}
+
+		E_md4hash(pass, nt_pass);
+
+#if DEBUG_PASSWORD
+		dump_data(100, (const char *)nt_pass, NT_HASH_LEN);
+#endif
+
+		status = wcache_save_creds(domain, mem_ctx, &cred_sid, nt_pass);
+		if (!NT_STATUS_IS_OK(status)) {
+			return status;
+		}
+	}
+
+	if (info3 != NULL && user != NULL) {
+		if (!netsamlogon_cache_store(user, info3)) {
+			return NT_STATUS_ACCESS_DENIED;
+		}
+	}
+
+	return NT_STATUS_OK;
+}
+
+NTSTATUS winbindd_update_creds_by_info3(struct winbindd_domain *domain,
+				        TALLOC_CTX *mem_ctx,
+				        const char *user,
+				        const char *pass,
+				        NET_USER_INFO_3 *info3)
+{
+	return winbindd_store_creds(domain, mem_ctx, user, pass, info3, NULL);
+}
+
+NTSTATUS winbindd_update_creds_by_sid(struct winbindd_domain *domain,
+				      TALLOC_CTX *mem_ctx,
+				      const DOM_SID *sid,
+				      const char *pass)
+{
+	return winbindd_store_creds(domain, mem_ctx, NULL, pass, NULL, sid);
+}
+
+NTSTATUS winbindd_update_creds_by_name(struct winbindd_domain *domain,
+				       TALLOC_CTX *mem_ctx,
+				       const char *user,
+				       const char *pass)
+{
+	return winbindd_store_creds(domain, mem_ctx, user, pass, NULL, NULL);
+}
+
+

Copied: branches/samba/upstream/source/nsswitch/winbindd_dual.c (from rev 1928, branches/samba/upstream/source/nsswitch/winbindd_dual.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/winbindd_dual.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/winbindd_dual.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,1096 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   Winbind child daemons
+
+   Copyright (C) Andrew Tridgell 2002
+   Copyright (C) Volker Lendecke 2004,2005
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+/*
+ * We fork a child per domain to be able to act non-blocking in the main
+ * winbind daemon. A domain controller thousands of miles away being being
+ * slow replying with a 10.000 user list should not hold up netlogon calls
+ * that can be handled locally.
+ */
+
+#include "includes.h"
+#include "winbindd.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_WINBIND
+
+extern BOOL override_logfile;
+extern struct winbindd_methods cache_methods;
+
+/* Read some data from a client connection */
+
+static void child_read_request(struct winbindd_cli_state *state)
+{
+	ssize_t len;
+
+	/* Read data */
+
+	len = read_data(state->sock, (char *)&state->request,
+			sizeof(state->request));
+
+	if (len != sizeof(state->request)) {
+		DEBUG(len > 0 ? 0 : 3, ("Got invalid request length: %d\n", (int)len));
+		state->finished = True;
+		return;
+	}
+
+	if (state->request.extra_len == 0) {
+		state->request.extra_data.data = NULL;
+		return;
+	}
+
+	DEBUG(10, ("Need to read %d extra bytes\n", (int)state->request.extra_len));
+
+	state->request.extra_data.data =
+		SMB_MALLOC_ARRAY(char, state->request.extra_len + 1);
+
+	if (state->request.extra_data.data == NULL) {
+		DEBUG(0, ("malloc failed\n"));
+		state->finished = True;
+		return;
+	}
+
+	/* Ensure null termination */
+	state->request.extra_data.data[state->request.extra_len] = '\0';
+
+	len = read_data(state->sock, state->request.extra_data.data,
+			state->request.extra_len);
+
+	if (len != state->request.extra_len) {
+		DEBUG(0, ("Could not read extra data\n"));
+		state->finished = True;
+		return;
+	}
+}
+
+/*
+ * Machinery for async requests sent to children. You set up a
+ * winbindd_request, select a child to query, and issue a async_request
+ * call. When the request is completed, the callback function you specified is
+ * called back with the private pointer you gave to async_request.
+ */
+
+struct winbindd_async_request {
+	struct winbindd_async_request *next, *prev;
+	TALLOC_CTX *mem_ctx;
+	struct winbindd_child *child;
+	struct winbindd_request *request;
+	struct winbindd_response *response;
+	void (*continuation)(void *private_data, BOOL success);
+	struct timed_event *reply_timeout_event;
+	pid_t child_pid; /* pid of the child we're waiting on. Used to detect
+			    a restart of the child (child->pid != child_pid). */
+	void *private_data;
+};
+
+static void async_main_request_sent(void *private_data, BOOL success);
+static void async_request_sent(void *private_data, BOOL success);
+static void async_reply_recv(void *private_data, BOOL success);
+static void schedule_async_request(struct winbindd_child *child);
+
+void async_request(TALLOC_CTX *mem_ctx, struct winbindd_child *child,
+		   struct winbindd_request *request,
+		   struct winbindd_response *response,
+		   void (*continuation)(void *private_data, BOOL success),
+		   void *private_data)
+{
+	struct winbindd_async_request *state;
+
+	SMB_ASSERT(continuation != NULL);
+
+	state = TALLOC_P(mem_ctx, struct winbindd_async_request);
+
+	if (state == NULL) {
+		DEBUG(0, ("talloc failed\n"));
+		continuation(private_data, False);
+		return;
+	}
+
+	state->mem_ctx = mem_ctx;
+	state->child = child;
+	state->request = request;
+	state->response = response;
+	state->continuation = continuation;
+	state->private_data = private_data;
+
+	DLIST_ADD_END(child->requests, state, struct winbindd_async_request *);
+
+	schedule_async_request(child);
+
+	return;
+}
+
+static void async_main_request_sent(void *private_data, BOOL success)
+{
+	struct winbindd_async_request *state =
+		talloc_get_type_abort(private_data, struct winbindd_async_request);
+
+	if (!success) {
+		DEBUG(5, ("Could not send async request\n"));
+
+		state->response->length = sizeof(struct winbindd_response);
+		state->response->result = WINBINDD_ERROR;
+		state->continuation(state->private_data, False);
+		return;
+	}
+
+	if (state->request->extra_len == 0) {
+		async_request_sent(private_data, True);
+		return;
+	}
+
+	setup_async_write(&state->child->event, state->request->extra_data.data,
+			  state->request->extra_len,
+			  async_request_sent, state);
+}
+
+/****************************************************************
+ Handler triggered if the child winbindd doesn't respond within
+ a given timeout.
+****************************************************************/
+
+static void async_request_timeout_handler(struct event_context *ctx,
+					struct timed_event *te,
+					const struct timeval *now,
+					void *private_data)
+{
+	struct winbindd_async_request *state =
+		talloc_get_type_abort(private_data, struct winbindd_async_request);
+
+	DEBUG(0,("async_request_timeout_handler: child pid %u is not responding. "
+		"Closing connection to it.\n",
+		state->child_pid ));
+
+	/* Deal with the reply - set to error. */
+	async_reply_recv(private_data, False);
+}
+
+/**************************************************************
+ Common function called on both async send and recv fail.
+ Cleans up the child and schedules the next request.
+**************************************************************/
+
+static void async_request_fail(struct winbindd_async_request *state)
+{
+	DLIST_REMOVE(state->child->requests, state);
+
+	TALLOC_FREE(state->reply_timeout_event);
+
+	SMB_ASSERT(state->child_pid != (pid_t)0);
+
+	/* If not already reaped, send kill signal to child. */
+	if (state->child->pid == state->child_pid) {
+		kill(state->child_pid, SIGTERM);
+
+		/* 
+		 * Close the socket to the child.
+		 */
+		winbind_child_died(state->child_pid);
+	}
+
+	state->response->length = sizeof(struct winbindd_response);
+	state->response->result = WINBINDD_ERROR;
+	state->continuation(state->private_data, False);
+}
+
+static void async_request_sent(void *private_data_data, BOOL success)
+{
+	struct winbindd_async_request *state =
+		talloc_get_type_abort(private_data_data, struct winbindd_async_request);
+
+	if (!success) {
+		DEBUG(5, ("Could not send async request to child pid %u\n",
+			(unsigned int)state->child_pid ));
+		async_request_fail(state);
+		return;
+	}
+
+	/* Request successfully sent to the child, setup the wait for reply */
+
+	setup_async_read(&state->child->event,
+			 &state->response->result,
+			 sizeof(state->response->result),
+			 async_reply_recv, state);
+
+	/* 
+	 * Set up a timeout of 300 seconds for the response.
+	 * If we don't get it close the child socket and
+	 * report failure.
+	 */
+
+	state->reply_timeout_event = event_add_timed(winbind_event_context(),
+							NULL,
+							timeval_current_ofs(300,0),
+							"async_request_timeout",
+							async_request_timeout_handler,
+							state);
+	if (!state->reply_timeout_event) {
+		smb_panic("async_request_sent: failed to add timeout handler.\n");
+	}
+}
+
+static void async_reply_recv(void *private_data, BOOL success)
+{
+	struct winbindd_async_request *state =
+		talloc_get_type_abort(private_data, struct winbindd_async_request);
+	struct winbindd_child *child = state->child;
+
+	TALLOC_FREE(state->reply_timeout_event);
+
+	state->response->length = sizeof(struct winbindd_response);
+
+	if (!success) {
+		DEBUG(5, ("Could not receive async reply from child pid %u\n",
+			(unsigned int)state->child_pid ));
+
+		cache_cleanup_response(state->child_pid);
+		async_request_fail(state);
+		return;
+	}
+
+	SMB_ASSERT(cache_retrieve_response(state->child_pid,
+					   state->response));
+
+	cache_cleanup_response(state->child_pid);
+	
+	DLIST_REMOVE(child->requests, state);
+
+	schedule_async_request(child);
+
+	state->continuation(state->private_data, True);
+}
+
+static BOOL fork_domain_child(struct winbindd_child *child);
+
+static void schedule_async_request(struct winbindd_child *child)
+{
+	struct winbindd_async_request *request = child->requests;
+
+	if (request == NULL) {
+		return;
+	}
+
+	if (child->event.flags != 0) {
+		return;		/* Busy */
+	}
+
+	if ((child->pid == 0) && (!fork_domain_child(child))) {
+		/* Cancel all outstanding requests */
+
+		while (request != NULL) {
+			/* request might be free'd in the continuation */
+			struct winbindd_async_request *next = request->next;
+			request->continuation(request->private_data, False);
+			request = next;
+		}
+		return;
+	}
+
+	/* Now we know who we're sending to - remember the pid. */
+	request->child_pid = child->pid;
+
+	setup_async_write(&child->event, request->request,
+			  sizeof(*request->request),
+			  async_main_request_sent, request);
+
+	return;
+}
+
+struct domain_request_state {
+	TALLOC_CTX *mem_ctx;
+	struct winbindd_domain *domain;
+	struct winbindd_request *request;
+	struct winbindd_response *response;
+	void (*continuation)(void *private_data_data, BOOL success);
+	void *private_data_data;
+};
+
+static void domain_init_recv(void *private_data_data, BOOL success);
+
+void async_domain_request(TALLOC_CTX *mem_ctx,
+			  struct winbindd_domain *domain,
+			  struct winbindd_request *request,
+			  struct winbindd_response *response,
+			  void (*continuation)(void *private_data_data, BOOL success),
+			  void *private_data_data)
+{
+	struct domain_request_state *state;
+
+	if (domain->initialized) {
+		async_request(mem_ctx, &domain->child, request, response,
+			      continuation, private_data_data);
+		return;
+	}
+
+	state = TALLOC_P(mem_ctx, struct domain_request_state);
+	if (state == NULL) {
+		DEBUG(0, ("talloc failed\n"));
+		continuation(private_data_data, False);
+		return;
+	}
+
+	state->mem_ctx = mem_ctx;
+	state->domain = domain;
+	state->request = request;
+	state->response = response;
+	state->continuation = continuation;
+	state->private_data_data = private_data_data;
+
+	init_child_connection(domain, domain_init_recv, state);
+}
+
+static void recvfrom_child(void *private_data_data, BOOL success)
+{
+	struct winbindd_cli_state *state =
+		talloc_get_type_abort(private_data_data, struct winbindd_cli_state);
+	enum winbindd_result result = state->response.result;
+
+	/* This is an optimization: The child has written directly to the
+	 * response buffer. The request itself is still in pending state,
+	 * state that in the result code. */
+
+	state->response.result = WINBINDD_PENDING;
+
+	if ((!success) || (result != WINBINDD_OK)) {
+		request_error(state);
+		return;
+	}
+
+	request_ok(state);
+}
+
+void sendto_child(struct winbindd_cli_state *state,
+		  struct winbindd_child *child)
+{
+	async_request(state->mem_ctx, child, &state->request,
+		      &state->response, recvfrom_child, state);
+}
+
+void sendto_domain(struct winbindd_cli_state *state,
+		   struct winbindd_domain *domain)
+{
+	async_domain_request(state->mem_ctx, domain,
+			     &state->request, &state->response,
+			     recvfrom_child, state);
+}
+
+static void domain_init_recv(void *private_data_data, BOOL success)
+{
+	struct domain_request_state *state =
+		talloc_get_type_abort(private_data_data, struct domain_request_state);
+
+	if (!success) {
+		DEBUG(5, ("Domain init returned an error\n"));
+		state->continuation(state->private_data_data, False);
+		return;
+	}
+
+	async_request(state->mem_ctx, &state->domain->child,
+		      state->request, state->response,
+		      state->continuation, state->private_data_data);
+}
+
+struct winbindd_child_dispatch_table {
+	enum winbindd_cmd cmd;
+	enum winbindd_result (*fn)(struct winbindd_domain *domain,
+				   struct winbindd_cli_state *state);
+	const char *winbindd_cmd_name;
+};
+
+static struct winbindd_child_dispatch_table child_dispatch_table[] = {
+	
+	{ WINBINDD_LOOKUPSID,            winbindd_dual_lookupsid,             "LOOKUPSID" },
+	{ WINBINDD_LOOKUPNAME,           winbindd_dual_lookupname,            "LOOKUPNAME" },
+	{ WINBINDD_LOOKUPRIDS,           winbindd_dual_lookuprids,            "LOOKUPRIDS" },
+	{ WINBINDD_LIST_TRUSTDOM,        winbindd_dual_list_trusted_domains,  "LIST_TRUSTDOM" },
+	{ WINBINDD_INIT_CONNECTION,      winbindd_dual_init_connection,       "INIT_CONNECTION" },
+	{ WINBINDD_GETDCNAME,            winbindd_dual_getdcname,             "GETDCNAME" },
+	{ WINBINDD_SHOW_SEQUENCE,        winbindd_dual_show_sequence,         "SHOW_SEQUENCE" },
+	{ WINBINDD_PAM_AUTH,             winbindd_dual_pam_auth,              "PAM_AUTH" },
+	{ WINBINDD_PAM_AUTH_CRAP,        winbindd_dual_pam_auth_crap,         "AUTH_CRAP" },
+	{ WINBINDD_PAM_LOGOFF,           winbindd_dual_pam_logoff,            "PAM_LOGOFF" },
+	{ WINBINDD_PAM_CHNG_PSWD_AUTH_CRAP,winbindd_dual_pam_chng_pswd_auth_crap,"CHNG_PSWD_AUTH_CRAP" },
+	{ WINBINDD_PAM_CHAUTHTOK,        winbindd_dual_pam_chauthtok,         "PAM_CHAUTHTOK" },
+	{ WINBINDD_CHECK_MACHACC,        winbindd_dual_check_machine_acct,    "CHECK_MACHACC" },
+	{ WINBINDD_DUAL_SID2UID,         winbindd_dual_sid2uid,               "DUAL_SID2UID" },
+	{ WINBINDD_DUAL_SID2GID,         winbindd_dual_sid2gid,               "DUAL_SID2GID" },
+#if 0   /* DISABLED until we fix the interface in Samba 3.0.26 --jerry */
+	{ WINBINDD_DUAL_SIDS2XIDS,       winbindd_dual_sids2xids,             "DUAL_SIDS2XIDS" },
+#endif  /* end DISABLED */
+	{ WINBINDD_DUAL_UID2SID,         winbindd_dual_uid2sid,               "DUAL_UID2SID" },
+	{ WINBINDD_DUAL_GID2SID,         winbindd_dual_gid2sid,               "DUAL_GID2SID" },
+	{ WINBINDD_DUAL_UID2NAME,        winbindd_dual_uid2name,              "DUAL_UID2NAME" },
+	{ WINBINDD_DUAL_NAME2UID,        winbindd_dual_name2uid,              "DUAL_NAME2UID" },
+	{ WINBINDD_DUAL_GID2NAME,        winbindd_dual_gid2name,              "DUAL_GID2NAME" },
+	{ WINBINDD_DUAL_NAME2GID,        winbindd_dual_name2gid,              "DUAL_NAME2GID" },
+	{ WINBINDD_DUAL_SET_MAPPING,     winbindd_dual_set_mapping,           "DUAL_SET_MAPPING" },
+	{ WINBINDD_DUAL_SET_HWM,         winbindd_dual_set_hwm,               "DUAL_SET_HWMS" },
+	{ WINBINDD_DUAL_DUMP_MAPS,       winbindd_dual_dump_maps,             "DUAL_DUMP_MAPS" },
+	{ WINBINDD_DUAL_USERINFO,        winbindd_dual_userinfo,              "DUAL_USERINFO" },
+	{ WINBINDD_ALLOCATE_UID,         winbindd_dual_allocate_uid,          "ALLOCATE_UID" },
+	{ WINBINDD_ALLOCATE_GID,         winbindd_dual_allocate_gid,          "ALLOCATE_GID" },
+	{ WINBINDD_GETUSERDOMGROUPS,     winbindd_dual_getuserdomgroups,      "GETUSERDOMGROUPS" },
+	{ WINBINDD_DUAL_GETSIDALIASES,   winbindd_dual_getsidaliases,         "GETSIDALIASES" },
+	{ WINBINDD_CCACHE_NTLMAUTH,      winbindd_dual_ccache_ntlm_auth,      "CCACHE_NTLM_AUTH" },
+	/* End of list */
+
+	{ WINBINDD_NUM_CMDS, NULL, "NONE" }
+};
+
+static void child_process_request(struct winbindd_domain *domain,
+				  struct winbindd_cli_state *state)
+{
+	struct winbindd_child_dispatch_table *table;
+
+	/* Free response data - we may be interrupted and receive another
+	   command before being able to send this data off. */
+
+	state->response.result = WINBINDD_ERROR;
+	state->response.length = sizeof(struct winbindd_response);
+
+	state->mem_ctx = talloc_init("winbind request");
+	if (state->mem_ctx == NULL)
+		return;
+
+	/* Process command */
+
+	for (table = child_dispatch_table; table->fn; table++) {
+		if (state->request.cmd == table->cmd) {
+			DEBUG(10,("process_request: request fn %s\n",
+				  table->winbindd_cmd_name ));
+			state->response.result = table->fn(domain, state);
+			break;
+		}
+	}
+
+	if (!table->fn) {
+		DEBUG(10,("process_request: unknown request fn number %d\n",
+			  (int)state->request.cmd ));
+		state->response.result = WINBINDD_ERROR;
+	}
+
+	talloc_destroy(state->mem_ctx);
+}
+
+void setup_domain_child(struct winbindd_domain *domain,
+			struct winbindd_child *child,
+			const char *explicit_logfile)
+{
+	if (explicit_logfile != NULL) {
+		pstr_sprintf(child->logfilename, "%s/log.winbindd-%s",
+			     dyn_LOGFILEBASE, explicit_logfile);
+	} else if (domain != NULL) {
+		pstr_sprintf(child->logfilename, "%s/log.wb-%s",
+			     dyn_LOGFILEBASE, domain->name);
+	} else {
+		smb_panic("Internal error: domain == NULL && "
+			  "explicit_logfile == NULL");
+	}
+
+	child->domain = domain;
+}
+
+struct winbindd_child *children = NULL;
+
+void winbind_child_died(pid_t pid)
+{
+	struct winbindd_child *child;
+
+	for (child = children; child != NULL; child = child->next) {
+		if (child->pid == pid) {
+			break;
+		}
+	}
+
+	if (child == NULL) {
+		DEBUG(5, ("Already reaped child %u died\n", (unsigned int)pid));
+		return;
+	}
+
+	/* This will be re-added in fork_domain_child() */
+
+	DLIST_REMOVE(children, child);
+	
+	remove_fd_event(&child->event);
+	close(child->event.fd);
+	child->event.fd = 0;
+	child->event.flags = 0;
+	child->pid = 0;
+
+	schedule_async_request(child);
+}
+
+/* Ensure any negative cache entries with the netbios or realm names are removed. */
+
+void winbindd_flush_negative_conn_cache(struct winbindd_domain *domain)
+{
+	flush_negative_conn_cache_for_domain(domain->name);
+	if (*domain->alt_name) {
+		flush_negative_conn_cache_for_domain(domain->alt_name);
+	}
+}
+
+/* Set our domains as offline and forward the offline message to our children. */
+
+void winbind_msg_offline(int msg_type, struct process_id src,
+			 void *buf, size_t len, void *private_data)
+{
+	struct winbindd_child *child;
+	struct winbindd_domain *domain;
+
+	DEBUG(10,("winbind_msg_offline: got offline message.\n"));
+
+	if (!lp_winbind_offline_logon()) {
+		DEBUG(10,("winbind_msg_offline: rejecting offline message.\n"));
+		return;
+	}
+
+	/* Set our global state as offline. */
+	if (!set_global_winbindd_state_offline()) {
+		DEBUG(10,("winbind_msg_offline: offline request failed.\n"));
+		return;
+	}
+
+	/* Set all our domains as offline. */
+	for (domain = domain_list(); domain; domain = domain->next) {
+		if (domain->internal) {
+			continue;
+		}
+		DEBUG(5,("winbind_msg_offline: marking %s offline.\n", domain->name));
+		set_domain_offline(domain);
+
+		/* Send an offline message to the idmap child when our
+		   primary domain goes offline */
+
+		if ( domain->primary ) {
+			struct winbindd_child *idmap = idmap_child();
+
+			if ( idmap->pid != 0 ) {
+				message_send_pid(pid_to_procid(idmap->pid), 
+						 MSG_WINBIND_OFFLINE, 
+						 domain->name, 
+						 strlen(domain->name)+1, 
+						 False);
+			}			
+		}
+	}
+
+	for (child = children; child != NULL; child = child->next) {
+		/* Don't send message to idmap child.  We've already
+		   done so above. */
+		if (!child->domain || (child == idmap_child())) {
+			continue;
+		}
+
+		/* Or internal domains (this should not be possible....) */
+		if (child->domain->internal) {
+			continue;
+		}
+
+		/* Each winbindd child should only process requests for one domain - make sure
+		   we only set it online / offline for that domain. */
+
+		DEBUG(10,("winbind_msg_offline: sending message to pid %u for domain %s.\n",
+			(unsigned int)child->pid, domain->name ));
+
+		message_send_pid(pid_to_procid(child->pid), MSG_WINBIND_OFFLINE, child->domain->name,
+			strlen(child->domain->name)+1, False);
+	}
+}
+
+/* Set our domains as online and forward the online message to our children. */
+
+void winbind_msg_online(int msg_type, struct process_id src,
+			void *buf, size_t len, void *private_data)
+{
+	struct winbindd_child *child;
+	struct winbindd_domain *domain;
+
+	DEBUG(10,("winbind_msg_online: got online message.\n"));
+
+	if (!lp_winbind_offline_logon()) {
+		DEBUG(10,("winbind_msg_online: rejecting online message.\n"));
+		return;
+	}
+
+	/* Set our global state as online. */
+	set_global_winbindd_state_online();
+
+	smb_nscd_flush_user_cache();
+	smb_nscd_flush_group_cache();
+
+	/* Set all our domains as online. */
+	for (domain = domain_list(); domain; domain = domain->next) {
+		if (domain->internal) {
+			continue;
+		}
+		DEBUG(5,("winbind_msg_online: requesting %s to go online.\n", domain->name));
+
+		winbindd_flush_negative_conn_cache(domain);
+		set_domain_online_request(domain);
+
+		/* Send an online message to the idmap child when our
+		   primary domain comes back online */
+
+		if ( domain->primary ) {
+			struct winbindd_child *idmap = idmap_child();
+			
+			if ( idmap->pid != 0 ) {
+				message_send_pid(pid_to_procid(idmap->pid), 
+						 MSG_WINBIND_ONLINE,
+						 domain->name,
+						 strlen(domain->name)+1, 
+						 False);
+			}
+			
+		}
+	}
+
+	for (child = children; child != NULL; child = child->next) {
+		/* Don't send message to idmap child. */
+		if (!child->domain || (child == idmap_child())) {
+			continue;
+		}
+
+		/* Or internal domains (this should not be possible....) */
+		if (child->domain->internal) {
+			continue;
+		}
+
+		/* Each winbindd child should only process requests for one domain - make sure
+		   we only set it online / offline for that domain. */
+
+		DEBUG(10,("winbind_msg_online: sending message to pid %u for domain %s.\n",
+			(unsigned int)child->pid, child->domain->name ));
+
+		message_send_pid(pid_to_procid(child->pid), MSG_WINBIND_ONLINE, child->domain->name,
+			strlen(child->domain->name)+1, False);
+	}
+}
+
+/* Forward the online/offline messages to our children. */
+void winbind_msg_onlinestatus(int msg_type, struct process_id src,
+			      void *buf, size_t len, void *private_data)
+{
+	struct winbindd_child *child;
+
+	DEBUG(10,("winbind_msg_onlinestatus: got onlinestatus message.\n"));
+
+	for (child = children; child != NULL; child = child->next) {
+		if (child->domain && child->domain->primary) {
+			DEBUG(10,("winbind_msg_onlinestatus: "
+				  "sending message to pid %u of primary domain.\n",
+				  (unsigned int)child->pid));
+			message_send_pid(pid_to_procid(child->pid), 
+					 MSG_WINBIND_ONLINESTATUS, buf, len, False);
+			break;
+		}
+	}
+}
+
+
+static void account_lockout_policy_handler(struct event_context *ctx,
+					   struct timed_event *te,
+					   const struct timeval *now,
+					   void *private_data)
+{
+	struct winbindd_child *child =
+		(struct winbindd_child *)private_data;
+	TALLOC_CTX *mem_ctx = NULL;
+	struct winbindd_methods *methods;
+	SAM_UNK_INFO_12 lockout_policy;
+	NTSTATUS result;
+
+	DEBUG(10,("account_lockout_policy_handler called\n"));
+
+	TALLOC_FREE(child->lockout_policy_event);
+
+	methods = child->domain->methods;
+
+	mem_ctx = talloc_init("account_lockout_policy_handler ctx");
+	if (!mem_ctx) {
+		result = NT_STATUS_NO_MEMORY;
+	} else {
+		result = methods->lockout_policy(child->domain, mem_ctx, &lockout_policy);
+	}
+
+	talloc_destroy(mem_ctx);
+
+	if (!NT_STATUS_IS_OK(result)) {
+		DEBUG(10,("account_lockout_policy_handler: lockout_policy failed error %s\n",
+			 nt_errstr(result)));
+	}
+
+	child->lockout_policy_event = event_add_timed(winbind_event_context(), NULL,
+						      timeval_current_ofs(3600, 0),
+						      "account_lockout_policy_handler",
+						      account_lockout_policy_handler,
+						      child);
+}
+
+/* Deal with a request to go offline. */
+
+static void child_msg_offline(int msg_type, struct process_id src,
+			      void *buf, size_t len, void *private_data)
+{
+	struct winbindd_domain *domain;
+	const char *domainname = (const char *)buf;
+
+	if (buf == NULL || len == 0) {
+		return;
+	}
+
+	DEBUG(5,("child_msg_offline received for domain %s.\n", domainname));
+
+	if (!lp_winbind_offline_logon()) {
+		DEBUG(10,("child_msg_offline: rejecting offline message.\n"));
+		return;
+	}
+
+	/* Set our global state as offline. */
+	if (!set_global_winbindd_state_offline()) {
+		DEBUG(10,("child_msg_offline: offline request failed.\n"));
+		return;
+	}
+
+	/* Mark the requested domain offline. */
+
+	for (domain = domain_list(); domain; domain = domain->next) {
+		if (domain->internal) {
+			continue;
+		}
+		if (strequal(domain->name, domainname)) {
+			DEBUG(5,("child_msg_offline: marking %s offline.\n", domain->name));
+			set_domain_offline(domain);
+		}
+	}
+}
+
+/* Deal with a request to go online. */
+
+static void child_msg_online(int msg_type, struct process_id src,
+			     void *buf, size_t len, void *private_data)
+{
+	struct winbindd_domain *domain;
+	const char *domainname = (const char *)buf;
+
+	if (buf == NULL || len == 0) {
+		return;
+	}
+
+	DEBUG(5,("child_msg_online received for domain %s.\n", domainname));
+
+	if (!lp_winbind_offline_logon()) {
+		DEBUG(10,("child_msg_online: rejecting online message.\n"));
+		return;
+	}
+
+	/* Set our global state as online. */
+	set_global_winbindd_state_online();
+
+	/* Try and mark everything online - delete any negative cache entries
+	   to force a reconnect now. */
+
+	for (domain = domain_list(); domain; domain = domain->next) {
+		if (domain->internal) {
+			continue;
+		}
+		if (strequal(domain->name, domainname)) {
+			DEBUG(5,("child_msg_online: requesting %s to go online.\n", domain->name));
+			winbindd_flush_negative_conn_cache(domain);
+			set_domain_online_request(domain);
+		}
+	}
+}
+
+static const char *collect_onlinestatus(TALLOC_CTX *mem_ctx)
+{
+	struct winbindd_domain *domain;
+	char *buf = NULL;
+
+	if ((buf = talloc_asprintf(mem_ctx, "global:%s ", 
+				   get_global_winbindd_state_offline() ? 
+				   "Offline":"Online")) == NULL) {
+		return NULL;
+	}
+
+	for (domain = domain_list(); domain; domain = domain->next) {
+		if ((buf = talloc_asprintf_append(buf, "%s:%s ", 
+						  domain->name, 
+						  domain->online ?
+						  "Online":"Offline")) == NULL) {
+			return NULL;
+		}
+	}
+
+	buf = talloc_asprintf_append(buf, "\n");
+
+	DEBUG(5,("collect_onlinestatus: %s", buf));
+
+	return buf;
+}
+
+static void child_msg_onlinestatus(int msg_type, struct process_id src,
+				   void *buf, size_t len, void *private_data)
+{
+	TALLOC_CTX *mem_ctx;
+	const char *message;
+	struct process_id *sender;
+	
+	DEBUG(5,("winbind_msg_onlinestatus received.\n"));
+
+	if (!buf) {
+		return;
+	}
+
+	sender = (struct process_id *)buf;
+
+	mem_ctx = talloc_init("winbind_msg_onlinestatus");
+	if (mem_ctx == NULL) {
+		return;
+	}
+	
+	message = collect_onlinestatus(mem_ctx);
+	if (message == NULL) {
+		talloc_destroy(mem_ctx);
+		return;
+	}
+
+	message_send_pid(*sender, MSG_WINBIND_ONLINESTATUS, 
+			 message, strlen(message) + 1, True);
+
+	talloc_destroy(mem_ctx);
+}
+
+static BOOL fork_domain_child(struct winbindd_child *child)
+{
+	int fdpair[2];
+	struct winbindd_cli_state state;
+	struct winbindd_domain *domain;
+
+	if (socketpair(AF_UNIX, SOCK_STREAM, 0, fdpair) != 0) {
+		DEBUG(0, ("Could not open child pipe: %s\n",
+			  strerror(errno)));
+		return False;
+	}
+
+	ZERO_STRUCT(state);
+	state.pid = sys_getpid();
+
+	/* Ensure we don't process messages whilst we're
+	   changing the disposition for the child. */
+	message_block();
+
+	child->pid = sys_fork();
+
+	if (child->pid == -1) {
+		DEBUG(0, ("Could not fork: %s\n", strerror(errno)));
+		message_unblock();
+		return False;
+	}
+
+	if (child->pid != 0) {
+		/* Parent */
+		close(fdpair[0]);
+		child->next = child->prev = NULL;
+		DLIST_ADD(children, child);
+		child->event.fd = fdpair[1];
+		child->event.flags = 0;
+		child->requests = NULL;
+		add_fd_event(&child->event);
+		/* We're ok with online/offline messages now. */
+		message_unblock();
+		return True;
+	}
+
+	/* Child */
+
+	/* Stop zombies in children */
+	CatchChild();
+
+	state.sock = fdpair[0];
+	close(fdpair[1]);
+
+	/* tdb needs special fork handling */
+	if (tdb_reopen_all(1) == -1) {
+		DEBUG(0,("tdb_reopen_all failed.\n"));
+		_exit(0);
+	}
+
+	close_conns_after_fork();
+
+	if (!override_logfile) {
+		lp_set_logfile(child->logfilename);
+		reopen_logs();
+	}
+
+	/* Don't handle the same messages as our parent. */
+	message_deregister(MSG_SMB_CONF_UPDATED);
+	message_deregister(MSG_SHUTDOWN);
+	message_deregister(MSG_WINBIND_OFFLINE);
+	message_deregister(MSG_WINBIND_ONLINE);
+	message_deregister(MSG_WINBIND_ONLINESTATUS);
+
+	/* The child is ok with online/offline messages now. */
+	message_unblock();
+
+	/* Handle online/offline messages. */
+	message_register(MSG_WINBIND_OFFLINE, child_msg_offline, NULL);
+	message_register(MSG_WINBIND_ONLINE, child_msg_online, NULL);
+	message_register(MSG_WINBIND_ONLINESTATUS, child_msg_onlinestatus,
+			 NULL);
+
+	if ( child->domain ) {
+		child->domain->startup = True;
+		child->domain->startup_time = time(NULL);
+	}
+
+	/* Ensure we have no pending check_online events other
+	   than one for this domain. */
+
+	for (domain = domain_list(); domain; domain = domain->next) {
+		if (domain != child->domain) {
+			TALLOC_FREE(domain->check_online_event);
+		}
+	}
+
+	/* Ensure we're not handling an event inherited from
+	   our parent. */
+
+	cancel_named_event(winbind_event_context(),
+			   "krb5_ticket_refresh_handler");
+
+	/* We might be in the idmap child...*/
+	if (child->domain && !(child->domain->internal) &&
+	    lp_winbind_offline_logon()) {
+
+		set_domain_online_request(child->domain);
+
+		child->lockout_policy_event = event_add_timed(
+			winbind_event_context(), NULL, timeval_zero(),
+			"account_lockout_policy_handler",
+			account_lockout_policy_handler,
+			child);
+	}
+
+	/* Special case for Winbindd on a Samba DC,
+	 * We want to make sure the child can connect to smbd
+	 * but not the main daemon */
+
+	if (child->domain && child->domain->internal && IS_DC) {
+		child->domain->methods = &cache_methods;
+		child->domain->online = False;
+	}
+
+	while (1) {
+
+		int ret;
+		fd_set read_fds;
+		struct timeval t;
+		struct timeval *tp;
+		struct timeval now;
+
+		/* free up any talloc memory */
+		lp_TALLOC_FREE();
+		main_loop_TALLOC_FREE();
+
+		/* check for signals */
+		winbind_check_sigterm();
+		winbind_check_sighup();
+
+		run_events(winbind_event_context(), 0, NULL, NULL);
+
+		GetTimeOfDay(&now);
+
+		if (child->domain && child->domain->startup &&
+				(now.tv_sec > child->domain->startup_time + 30)) {
+			/* No longer in "startup" mode. */
+			DEBUG(10,("fork_domain_child: domain %s no longer in 'startup' mode.\n",
+				child->domain->name ));
+			child->domain->startup = False;
+		}
+
+		tp = get_timed_events_timeout(winbind_event_context(), &t);
+		if (tp) {
+			DEBUG(11,("select will use timeout of %u.%u seconds\n",
+				(unsigned int)tp->tv_sec, (unsigned int)tp->tv_usec ));
+		}
+
+		/* Handle messages */
+
+		message_dispatch();
+
+		FD_ZERO(&read_fds);
+		FD_SET(state.sock, &read_fds);
+
+		ret = sys_select(state.sock + 1, &read_fds, NULL, NULL, tp);
+
+		if (ret == 0) {
+			DEBUG(11,("nothing is ready yet, continue\n"));
+			continue;
+		}
+
+		if (ret == -1 && errno == EINTR) {
+			/* We got a signal - continue. */
+			continue;
+		}
+
+		if (ret == -1 && errno != EINTR) {
+			DEBUG(0,("select error occured\n"));
+			perror("select");
+			return False;
+		}
+
+		/* fetch a request from the main daemon */
+		child_read_request(&state);
+
+		if (state.finished) {
+			/* we lost contact with our parent */
+			exit(0);
+		}
+
+		DEBUG(4,("child daemon request %d\n", (int)state.request.cmd));
+
+		ZERO_STRUCT(state.response);
+		state.request.null_term = '\0';
+		child_process_request(child->domain, &state);
+
+		SAFE_FREE(state.request.extra_data.data);
+
+		cache_store_response(sys_getpid(), &state.response);
+
+		SAFE_FREE(state.response.extra_data.data);
+
+		/* We just send the result code back, the result
+		 * structure needs to be fetched via the
+		 * winbindd_cache. Hmm. That needs fixing... */
+
+		if (write_data(state.sock,
+			       (const char *)&state.response.result,
+			       sizeof(state.response.result)) !=
+		    sizeof(state.response.result)) {
+			DEBUG(0, ("Could not write result\n"));
+			exit(1);
+		}
+	}
+}

Copied: branches/samba/upstream/source/nsswitch/winbindd_group.c (from rev 1928, branches/samba/upstream/source/nsswitch/winbindd_group.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/winbindd_group.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/winbindd_group.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,1558 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   Winbind daemon for ntdom nss module
+
+   Copyright (C) Tim Potter 2000
+   Copyright (C) Jeremy Allison 2001.
+   Copyright (C) Gerald (Jerry) Carter 2003.
+   Copyright (C) Volker Lendecke 2005
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "winbindd.h"
+
+extern BOOL opt_nocache;
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_WINBIND
+
+static void add_member(const char *domain, const char *user,
+	   char **pp_members, size_t *p_num_members)
+{
+	fstring name;
+
+	fill_domain_username(name, domain, user, True);
+	safe_strcat(name, ",", sizeof(name)-1);
+	string_append(pp_members, name);
+	*p_num_members += 1;
+}
+
+/**********************************************************************
+ Add member users resulting from sid. Expand if it is a domain group.
+**********************************************************************/
+
+static void add_expanded_sid(const DOM_SID *sid, char **pp_members, size_t *p_num_members)
+{
+	DOM_SID dom_sid;
+	uint32 rid;
+	struct winbindd_domain *domain;
+	size_t i;
+
+	char *domain_name = NULL;
+	char *name = NULL;
+	enum lsa_SidType type;
+
+	uint32 num_names;
+	DOM_SID *sid_mem;
+	char **names;
+	uint32 *types;
+
+	NTSTATUS result;
+
+	TALLOC_CTX *mem_ctx = talloc_init("add_expanded_sid");
+
+	if (mem_ctx == NULL) {
+		DEBUG(1, ("talloc_init failed\n"));
+		return;
+	}
+
+	sid_copy(&dom_sid, sid);
+	sid_split_rid(&dom_sid, &rid);
+
+	domain = find_lookup_domain_from_sid(sid);
+
+	if (domain == NULL) {
+		DEBUG(3, ("Could not find domain for sid %s\n",
+			  sid_string_static(sid)));
+		goto done;
+	}
+
+	result = domain->methods->sid_to_name(domain, mem_ctx, sid,
+					      &domain_name, &name, &type);
+
+	if (!NT_STATUS_IS_OK(result)) {
+		DEBUG(3, ("sid_to_name failed for sid %s\n",
+			  sid_string_static(sid)));
+		goto done;
+	}
+
+	DEBUG(10, ("Found name %s, type %d\n", name, type));
+
+	if (type == SID_NAME_USER) {
+		add_member(domain_name, name, pp_members, p_num_members);
+		goto done;
+	}
+
+	if (type != SID_NAME_DOM_GRP) {
+		DEBUG(10, ("Alias member %s neither user nor group, ignore\n",
+			   name));
+		goto done;
+	}
+
+	/* Expand the domain group, this must be done via the target domain */
+
+	domain = find_domain_from_sid(sid);
+
+	if (domain == NULL) {
+		DEBUG(3, ("Could not find domain from SID %s\n",
+			  sid_string_static(sid)));
+		goto done;
+	}
+
+	result = domain->methods->lookup_groupmem(domain, mem_ctx,
+						  sid, &num_names,
+						  &sid_mem, &names,
+						  &types);
+
+	if (!NT_STATUS_IS_OK(result)) {
+		DEBUG(10, ("Could not lookup group members for %s: %s\n",
+			   name, nt_errstr(result)));
+		goto done;
+	}
+
+	for (i=0; i<num_names; i++) {
+		DEBUG(10, ("Adding group member SID %s\n",
+			   sid_string_static(&sid_mem[i])));
+
+		if (types[i] != SID_NAME_USER) {
+			DEBUG(1, ("Hmmm. Member %s of group %s is no user. "
+				  "Ignoring.\n", names[i], name));
+			continue;
+		}
+
+		add_member(domain->name, names[i], pp_members, p_num_members);
+	}
+
+ done:
+	talloc_destroy(mem_ctx);
+	return;
+}
+
+static BOOL fill_passdb_alias_grmem(struct winbindd_domain *domain,
+			     DOM_SID *group_sid, 
+			     size_t *num_gr_mem, char **gr_mem, size_t *gr_mem_len)
+{
+	DOM_SID *members;
+	size_t i, num_members;
+
+	*num_gr_mem = 0;
+	*gr_mem = NULL;
+	*gr_mem_len = 0;
+
+	if (!NT_STATUS_IS_OK(pdb_enum_aliasmem(group_sid, &members,
+					       &num_members)))
+		return True;
+
+	for (i=0; i<num_members; i++) {
+		add_expanded_sid(&members[i], gr_mem, num_gr_mem);
+	}
+
+	TALLOC_FREE(members);
+
+	if (*gr_mem != NULL) {
+		size_t len;
+
+		/* We have at least one member, strip off the last "," */
+		len = strlen(*gr_mem);
+		(*gr_mem)[len-1] = '\0';
+		*gr_mem_len = len;
+	}
+
+	return True;
+}
+
+/* Fill a grent structure from various other information */
+
+static BOOL fill_grent(struct winbindd_gr *gr, const char *dom_name, 
+		       const char *gr_name, gid_t unix_gid)
+{
+	fstring full_group_name;
+
+	fill_domain_username( full_group_name, dom_name, gr_name, True );
+
+	gr->gr_gid = unix_gid;
+    
+	/* Group name and password */
+    
+	safe_strcpy(gr->gr_name, full_group_name, sizeof(gr->gr_name) - 1);
+	safe_strcpy(gr->gr_passwd, "x", sizeof(gr->gr_passwd) - 1);
+
+	return True;
+}
+
+/* Fill in the group membership field of a NT group given by group_sid */
+
+static BOOL fill_grent_mem(struct winbindd_domain *domain,
+			   struct winbindd_cli_state *state,
+			   DOM_SID *group_sid, 
+			   enum lsa_SidType group_name_type, 
+			   size_t *num_gr_mem, char **gr_mem, size_t *gr_mem_len)
+{
+	DOM_SID *sid_mem = NULL;
+	uint32 num_names = 0;
+	uint32 *name_types = NULL;
+	unsigned int buf_len = 0, buf_ndx = 0, i;
+	char **names = NULL, *buf = NULL;
+	BOOL result = False;
+	TALLOC_CTX *mem_ctx;
+	NTSTATUS status;
+	uint32 group_rid;
+	fstring sid_string;
+
+	if (!(mem_ctx = talloc_init("fill_grent_mem(%s)", domain->name)))
+		return False;
+
+	/* Initialise group membership information */
+	
+	DEBUG(10, ("group SID %s\n", sid_to_string(sid_string, group_sid)));
+
+	/* Initialize with no members */
+	*num_gr_mem = 0;
+
+	/* HACK ALERT!! This whole routine does not cope with group members
+	 * from more than one domain, ie aliases. Thus we have to work it out
+	 * ourselves in a special routine. */
+
+	if (domain->internal) {
+		result = fill_passdb_alias_grmem(domain, group_sid,
+					       num_gr_mem,
+					       gr_mem, gr_mem_len);
+		goto done;
+	}
+	
+	if ( !((group_name_type==SID_NAME_DOM_GRP) ||
+		((group_name_type==SID_NAME_ALIAS) && domain->primary)) )
+	{
+		DEBUG(1, ("SID %s in domain %s isn't a domain group (%d)\n", 
+			  sid_to_string(sid_string, group_sid), domain->name, 
+			  group_name_type));
+                goto done;
+	}
+
+	/* OPTIMIZATION / HACK. */
+	/* If "enum users" is set to false, and the group being looked
+	   up is the Domain Users SID: S-1-5-domain-513, then for the
+	   list of members check if the querying user is in that group,
+	   and if so only return that user as the gr_mem array.
+	   We can change this to a different parameter than "enum users"
+	   if neccessaey, or parameterize the group list we do this for. */
+
+	sid_peek_rid( group_sid, &group_rid );
+	if (!lp_winbind_enum_users() && group_rid == DOMAIN_GROUP_RID_USERS) {
+		DOM_SID querying_user_sid;
+		DOM_SID *pquerying_user_sid = NULL;
+		uint32 num_groups = 0;
+		DOM_SID *user_sids = NULL;
+		BOOL u_in_group = False;
+
+		DEBUG(10,("fill_grent_mem: optimized lookup for sid %s domain %s\n",
+			sid_to_string(sid_string, group_sid), domain->name ));
+
+		if (state) {
+			uid_t ret_uid = (uid_t)-1;
+			if (sys_getpeereid(state->sock, &ret_uid)==0) {
+				/* We know who's asking - look up their SID if
+				   it's one we've mapped before. */
+				status = idmap_uid_to_sid(&querying_user_sid, ret_uid);
+				if (NT_STATUS_IS_OK(status)) {
+					pquerying_user_sid = &querying_user_sid;
+					DEBUG(10,("fill_grent_mem: querying uid %u -> %s\n",
+						(unsigned int)ret_uid,
+						sid_to_string(sid_string, pquerying_user_sid) ));
+				}
+			}
+		}
+
+		/* Only look up if it was a winbindd user in this domain. */
+		if (pquerying_user_sid &&
+				(sid_compare_domain(pquerying_user_sid, &domain->sid) == 0)) {
+
+			DEBUG(10,("fill_grent_mem: querying user = %s\n",
+				sid_to_string(sid_string, pquerying_user_sid) ));
+
+			status = domain->methods->lookup_usergroups(domain,
+							mem_ctx,
+							pquerying_user_sid,
+							&num_groups,
+							&user_sids);
+			if (!NT_STATUS_IS_OK(status)) {
+				DEBUG(1, ("fill_grent_mem: lookup_usergroups failed "
+					"for sid %s in domain %s (error: %s)\n", 
+					sid_to_string(sid_string, pquerying_user_sid),
+					domain->name,
+					nt_errstr(status)));
+				goto done;
+			}
+
+			for (i = 0; i < num_groups; i++) {
+				if (sid_equal(group_sid, &user_sids[i])) {
+					/* User is in Domain Users, add their name
+					   as the only group member. */
+					u_in_group = True;
+					break;
+				}
+			}
+		}
+
+		if (u_in_group) {
+			size_t len = 0;
+			char *domainname = NULL;
+			char *username = NULL;
+			fstring name;
+			enum lsa_SidType type;
+
+			DEBUG(10,("fill_grent_mem: sid %s in 'Domain Users' in domain %s\n",
+				sid_to_string(sid_string, pquerying_user_sid), domain->name ));
+
+			status = domain->methods->sid_to_name(domain, mem_ctx,
+								pquerying_user_sid,
+								&domainname,
+								&username,
+								&type);
+			if (!NT_STATUS_IS_OK(status)) {
+				DEBUG(1, ("could not lookup username for user "
+					"sid %s in domain %s (error: %s)\n", 
+					sid_to_string(sid_string, pquerying_user_sid),
+					domain->name,
+					nt_errstr(status)));
+				goto done;
+			}
+			fill_domain_username(name, domain->name, username, True);
+			len = strlen(name);
+			buf_len = len + 1;
+			if (!(buf = (char *)SMB_MALLOC(buf_len))) {
+				DEBUG(1, ("out of memory\n"));
+				goto done;
+			}
+			memcpy(buf, name, buf_len);
+
+			DEBUG(10,("fill_grent_mem: user %s in 'Domain Users' in domain %s\n",
+				name, domain->name ));
+
+			/* user is the only member */
+			*num_gr_mem = 1;
+		}
+		
+		*gr_mem = buf;
+		*gr_mem_len = buf_len;
+
+		DEBUG(10, ("num_mem = %u, len = %u, mem = %s\n", (unsigned int)*num_gr_mem, 
+		   (unsigned int)buf_len, *num_gr_mem ? buf : "NULL")); 
+		result = True;
+		goto done;
+	}
+
+	/* Lookup group members */
+	status = domain->methods->lookup_groupmem(domain, mem_ctx, group_sid, &num_names, 
+						  &sid_mem, &names, &name_types);
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(1, ("could not lookup membership for group sid %s in domain %s (error: %s)\n", 
+			  sid_to_string(sid_string, group_sid), domain->name, nt_errstr(status)));
+		goto done;
+	}
+
+	DEBUG(10, ("looked up %d names\n", num_names));
+
+	if (DEBUGLEVEL >= 10) {
+		for (i = 0; i < num_names; i++)
+			DEBUG(10, ("\t%20s %s %d\n", names[i],
+				   sid_string_static(&sid_mem[i]),
+				   name_types[i]));
+	}
+
+	/* Add members to list */
+
+ again:
+
+	for (i = 0; i < num_names; i++) {
+		char *the_name;
+		fstring name;
+		int len;
+			
+		the_name = names[i];
+
+		DEBUG(10, ("processing name %s\n", the_name));
+
+		/* FIXME: need to cope with groups within groups.  These
+                   occur in Universal groups on a Windows 2000 native mode
+                   server. */
+
+		/* make sure to allow machine accounts */
+
+		if (name_types[i] != SID_NAME_USER && name_types[i] != SID_NAME_COMPUTER) {
+			DEBUG(3, ("name %s isn't a domain user (%s)\n", the_name, sid_type_lookup(name_types[i])));
+			continue;
+		}
+
+		/* Append domain name */
+
+		fill_domain_username(name, domain->name, the_name, True);
+
+		len = strlen(name);
+		
+		/* Add to list or calculate buffer length */
+
+		if (!buf) {
+			buf_len += len + 1; /* List is comma separated */
+			(*num_gr_mem)++;
+			DEBUG(10, ("buf_len + %d = %d\n", len + 1, buf_len));
+		} else {
+			DEBUG(10, ("appending %s at ndx %d\n", name, buf_ndx));
+			safe_strcpy(&buf[buf_ndx], name, len);
+			buf_ndx += len;
+			buf[buf_ndx] = ',';
+			buf_ndx++;
+		}
+	}
+
+	/* Allocate buffer */
+
+	if (!buf && buf_len != 0) {
+		if (!(buf = (char *)SMB_MALLOC(buf_len))) {
+			DEBUG(1, ("out of memory\n"));
+			result = False;
+			goto done;
+		}
+		memset(buf, 0, buf_len);
+		goto again;
+	}
+
+	if (buf && buf_ndx > 0) {
+		buf[buf_ndx - 1] = '\0';
+	}
+
+	*gr_mem = buf;
+	*gr_mem_len = buf_len;
+
+	DEBUG(10, ("num_mem = %u, len = %u, mem = %s\n", (unsigned int)*num_gr_mem, 
+		   (unsigned int)buf_len, *num_gr_mem ? buf : "NULL")); 
+	result = True;
+
+done:
+
+	talloc_destroy(mem_ctx);
+	
+	DEBUG(10, ("fill_grent_mem returning %d\n", result));
+
+	return result;
+}
+
+/* Return a group structure from a group name */
+
+void winbindd_getgrnam(struct winbindd_cli_state *state)
+{
+	DOM_SID group_sid, tmp_sid;
+	uint32 grp_rid;
+	struct winbindd_domain *domain;
+	enum lsa_SidType name_type;
+	fstring name_domain, name_group;
+	char *tmp, *gr_mem;
+	size_t gr_mem_len;
+	size_t num_gr_mem;
+	gid_t gid;
+	union unid_t id;
+	NTSTATUS status;
+	
+	/* Ensure null termination */
+	state->request.data.groupname[sizeof(state->request.data.groupname)-1]='\0';
+
+	DEBUG(3, ("[%5lu]: getgrnam %s\n", (unsigned long)state->pid,
+		  state->request.data.groupname));
+
+	/* Parse domain and groupname */
+	
+	memset(name_group, 0, sizeof(fstring));
+
+	tmp = state->request.data.groupname;
+
+	name_domain[0] = '\0';
+	name_group[0] = '\0';
+	
+	parse_domain_user(tmp, name_domain, name_group);
+
+	/* if no domain or our local domain and no local tdb group, default to
+	 * our local domain for aliases */
+
+	if ( !*name_domain || strequal(name_domain, get_global_sam_name()) ) {
+		fstrcpy(name_domain, get_global_sam_name());
+	}
+
+	/* Get info for the domain */
+
+	if ((domain = find_domain_from_name(name_domain)) == NULL) {
+		DEBUG(3, ("could not get domain sid for domain %s\n",
+			  name_domain));
+		request_error(state);
+		return;
+	}
+	/* should we deal with users for our domain? */
+	
+	if ( lp_winbind_trusted_domains_only() && domain->primary) {
+		DEBUG(7,("winbindd_getgrnam: My domain -- rejecting "
+			 "getgrnam() for %s\\%s.\n", name_domain, name_group));
+		request_error(state);
+		return;
+	}
+
+	/* Get rid and name type from name */
+
+	ws_name_replace( name_group, WB_REPLACE_CHAR );
+        
+	if (!winbindd_lookup_sid_by_name(state->mem_ctx, domain, domain->name,
+					 name_group, &group_sid, &name_type)) {
+		DEBUG(1, ("group %s in domain %s does not exist\n", 
+			  name_group, name_domain));
+		request_error(state);
+		return;
+	}
+
+	if ( !((name_type==SID_NAME_DOM_GRP) ||
+	       ((name_type==SID_NAME_ALIAS) && domain->primary) ||
+	       ((name_type==SID_NAME_ALIAS) && domain->internal) ||
+	       ((name_type==SID_NAME_WKN_GRP) && domain->internal)) )
+	{
+		DEBUG(1, ("name '%s' is not a local, domain or builtin "
+			  "group: %d\n", name_group, name_type));
+		request_error(state);
+		return;
+	}
+
+	/* Make sure that the group SID is within the domain of the
+	   original domain */
+
+	sid_copy( &tmp_sid, &group_sid );
+	sid_split_rid( &tmp_sid, &grp_rid );
+	if ( !sid_equal( &tmp_sid, &domain->sid ) ) {
+		DEBUG(3,("winbindd_getgrnam: group %s resolves to a SID in the wrong domain [%s]\n", 
+			state->request.data.groupname, sid_string_static(&group_sid)));
+		request_error(state);
+		return;
+	}
+
+	
+
+	/* Try to get the GID */
+
+	status = idmap_sid_to_gid(&group_sid, &gid);
+
+	if (NT_STATUS_IS_OK(status)) {
+		goto got_gid;
+	}
+
+	/* Maybe it's one of our aliases in passdb */
+
+	if (pdb_sid_to_id(&group_sid, &id, &name_type) &&
+	    ((name_type == SID_NAME_ALIAS) ||
+	     (name_type == SID_NAME_WKN_GRP))) {
+		gid = id.gid;
+		goto got_gid;
+	}
+
+	DEBUG(1, ("error converting unix gid to sid\n"));
+	request_error(state);
+	return;
+
+ got_gid:
+
+	if (!fill_grent(&state->response.data.gr, name_domain,
+			name_group, gid) ||
+	    !fill_grent_mem(domain, state, &group_sid, name_type,
+			    &num_gr_mem,
+			    &gr_mem, &gr_mem_len)) {
+		request_error(state);
+		return;
+	}
+
+	state->response.data.gr.num_gr_mem = (uint32)num_gr_mem;
+
+	/* Group membership lives at start of extra data */
+
+	state->response.data.gr.gr_mem_ofs = 0;
+
+	state->response.length += gr_mem_len;
+	state->response.extra_data.data = gr_mem;
+	request_ok(state);
+}
+
+static void getgrgid_got_sid(struct winbindd_cli_state *state, DOM_SID group_sid)
+{
+	struct winbindd_domain *domain;
+	enum lsa_SidType name_type;
+	char *dom_name;
+	char *group_name;
+	size_t gr_mem_len;
+	size_t num_gr_mem;
+	char *gr_mem;
+
+	/* Get name from sid */
+
+	if (!winbindd_lookup_name_by_sid(state->mem_ctx, &group_sid, &dom_name,
+					 &group_name, &name_type)) {
+		DEBUG(1, ("could not lookup sid\n"));
+		request_error(state);
+		TALLOC_FREE(group_name);
+		TALLOC_FREE(dom_name);
+		return;
+	}
+
+	/* Fill in group structure */
+
+	domain = find_domain_from_sid_noinit(&group_sid);
+
+	if (!domain) {
+		DEBUG(1,("Can't find domain from sid\n"));
+		request_error(state);
+		TALLOC_FREE(group_name);
+		TALLOC_FREE(dom_name);
+		return;
+	}
+
+	if ( !((name_type==SID_NAME_DOM_GRP) ||
+	       ((name_type==SID_NAME_ALIAS) && domain->primary) ||
+	       ((name_type==SID_NAME_ALIAS) && domain->internal)) )
+	{
+		DEBUG(1, ("name '%s' is not a local or domain group: %d\n", 
+			  group_name, name_type));
+		request_error(state);
+		TALLOC_FREE(group_name);
+		TALLOC_FREE(dom_name);
+		return;
+	}
+
+	if (!fill_grent(&state->response.data.gr, dom_name, group_name, 
+			state->request.data.gid) ||
+	    !fill_grent_mem(domain, state, &group_sid, name_type,
+			    &num_gr_mem,
+			    &gr_mem, &gr_mem_len)) {
+		request_error(state);
+		TALLOC_FREE(group_name);
+		TALLOC_FREE(dom_name);
+		return;
+	}
+
+	state->response.data.gr.num_gr_mem = (uint32)num_gr_mem;
+
+	/* Group membership lives at start of extra data */
+
+	state->response.data.gr.gr_mem_ofs = 0;
+
+	state->response.length += gr_mem_len;
+	state->response.extra_data.data = gr_mem;
+
+	TALLOC_FREE(group_name);
+	TALLOC_FREE(dom_name);
+
+	request_ok(state);
+}
+
+static void getgrgid_recv(void *private_data, BOOL success, const char *sid)
+{
+	struct winbindd_cli_state *state = talloc_get_type_abort(private_data, struct winbindd_cli_state);
+	enum lsa_SidType name_type;
+	DOM_SID group_sid;
+
+	if (success) {
+		DEBUG(10,("getgrgid_recv: gid %lu has sid %s\n",
+			  (unsigned long)(state->request.data.gid), sid));
+
+		string_to_sid(&group_sid, sid);
+		getgrgid_got_sid(state, group_sid);
+		return;
+	}
+
+	/* Ok, this might be "ours", i.e. an alias */
+	if (pdb_gid_to_sid(state->request.data.gid, &group_sid) &&
+	    lookup_sid(state->mem_ctx, &group_sid, NULL, NULL, &name_type) &&
+	    (name_type == SID_NAME_ALIAS)) {
+		/* Hey, got an alias */
+		DEBUG(10,("getgrgid_recv: we have an alias with gid %lu and sid %s\n",
+			  (unsigned long)(state->request.data.gid), sid));
+		getgrgid_got_sid(state, group_sid);
+		return;
+	}
+
+	DEBUG(1, ("could not convert gid %lu to sid\n", 
+		  (unsigned long)state->request.data.gid));
+	request_error(state);
+}
+
+/* Return a group structure from a gid number */
+void winbindd_getgrgid(struct winbindd_cli_state *state)
+{
+	DEBUG(3, ("[%5lu]: getgrgid %lu\n", (unsigned long)state->pid, 
+		  (unsigned long)state->request.data.gid));
+
+	/* always use the async interface */
+	winbindd_gid2sid_async(state->mem_ctx, state->request.data.gid, getgrgid_recv, state);
+}
+
+/*
+ * set/get/endgrent functions
+ */
+
+/* "Rewind" file pointer for group database enumeration */
+
+static BOOL winbindd_setgrent_internal(struct winbindd_cli_state *state)
+{
+	struct winbindd_domain *domain;
+
+	DEBUG(3, ("[%5lu]: setgrent\n", (unsigned long)state->pid));
+
+	/* Check user has enabled this */
+
+	if (!lp_winbind_enum_groups()) {
+		return False;
+	}		
+
+	/* Free old static data if it exists */
+	
+	if (state->getgrent_state != NULL) {
+		free_getent_state(state->getgrent_state);
+		state->getgrent_state = NULL;
+	}
+	
+	/* Create sam pipes for each domain we know about */
+	
+	for (domain = domain_list(); domain != NULL; domain = domain->next) {
+		struct getent_state *domain_state;
+		
+		/* Create a state record for this domain */
+
+		/* don't add our domaina if we are a PDC or if we 
+		   are a member of a Samba domain */
+		
+		if ( lp_winbind_trusted_domains_only() && domain->primary )
+		{
+			continue;
+		}
+						
+		
+		if ((domain_state = SMB_MALLOC_P(struct getent_state)) == NULL) {
+			DEBUG(1, ("winbindd_setgrent: malloc failed for domain_state!\n"));
+			return False;
+		}
+		
+		ZERO_STRUCTP(domain_state);
+		
+		fstrcpy(domain_state->domain_name, domain->name);
+
+		/* Add to list of open domains */
+		
+		DLIST_ADD(state->getgrent_state, domain_state);
+	}
+	
+	state->getgrent_initialized = True;
+	return True;
+}
+
+void winbindd_setgrent(struct winbindd_cli_state *state)
+{
+	if (winbindd_setgrent_internal(state)) {
+		request_ok(state);
+	} else {
+		request_error(state);
+	}
+}
+
+/* Close file pointer to ntdom group database */
+
+void winbindd_endgrent(struct winbindd_cli_state *state)
+{
+	DEBUG(3, ("[%5lu]: endgrent\n", (unsigned long)state->pid));
+
+	free_getent_state(state->getgrent_state);
+	state->getgrent_initialized = False;
+	state->getgrent_state = NULL;
+	request_ok(state);
+}
+
+/* Get the list of domain groups and domain aliases for a domain.  We fill in
+   the sam_entries and num_sam_entries fields with domain group information.  
+   The dispinfo_ndx field is incremented to the index of the next group to 
+   fetch. Return True if some groups were returned, False otherwise. */
+
+static BOOL get_sam_group_entries(struct getent_state *ent)
+{
+	NTSTATUS status;
+	uint32 num_entries;
+	struct acct_info *name_list = NULL;
+	TALLOC_CTX *mem_ctx;
+	BOOL result = False;
+	struct acct_info *sam_grp_entries = NULL;
+	struct winbindd_domain *domain;
+        
+	if (ent->got_sam_entries)
+		return False;
+
+	if (!(mem_ctx = talloc_init("get_sam_group_entries(%s)",
+					  ent->domain_name))) {
+		DEBUG(1, ("get_sam_group_entries: could not create talloc context!\n")); 
+		return False;
+	}
+		
+	/* Free any existing group info */
+
+	SAFE_FREE(ent->sam_entries);
+	ent->num_sam_entries = 0;
+	ent->got_sam_entries = True;
+
+	/* Enumerate domain groups */
+
+	num_entries = 0;
+
+	if (!(domain = find_domain_from_name(ent->domain_name))) {
+		DEBUG(3, ("no such domain %s in get_sam_group_entries\n", ent->domain_name));
+		goto done;
+	}
+
+	/* always get the domain global groups */
+
+	status = domain->methods->enum_dom_groups(domain, mem_ctx, &num_entries, &sam_grp_entries);
+	
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(3, ("get_sam_group_entries: could not enumerate domain groups! Error: %s\n", nt_errstr(status)));
+		result = False;
+		goto done;
+	}
+
+	/* Copy entries into return buffer */
+
+	if (num_entries) {
+		if ( !(name_list = SMB_MALLOC_ARRAY(struct acct_info, num_entries)) ) {
+			DEBUG(0,("get_sam_group_entries: Failed to malloc memory for %d domain groups!\n", 
+				num_entries));
+			result = False;
+			goto done;
+		}
+		memcpy( name_list, sam_grp_entries, num_entries * sizeof(struct acct_info) );
+	}
+	
+	ent->num_sam_entries = num_entries;
+	
+	/* get the domain local groups if we are a member of a native win2k domain
+	   and are not using LDAP to get the groups */
+	   
+	if ( ( lp_security() != SEC_ADS && domain->native_mode 
+		&& domain->primary) || domain->internal )
+	{
+		DEBUG(4,("get_sam_group_entries: %s domain; enumerating local groups as well\n", 
+			domain->native_mode ? "Native Mode 2k":"BUILTIN or local"));
+		
+		status = domain->methods->enum_local_groups(domain, mem_ctx, &num_entries, &sam_grp_entries);
+		
+		if ( !NT_STATUS_IS_OK(status) ) { 
+			DEBUG(3,("get_sam_group_entries: Failed to enumerate domain local groups!\n"));
+			num_entries = 0;
+		}
+		else
+			DEBUG(4,("get_sam_group_entries: Returned %d local groups\n", num_entries));
+		
+		/* Copy entries into return buffer */
+
+		if ( num_entries ) {
+			if ( !(name_list = SMB_REALLOC_ARRAY( name_list, struct acct_info, ent->num_sam_entries+num_entries)) )
+			{
+				DEBUG(0,("get_sam_group_entries: Failed to realloc more memory for %d local groups!\n", 
+					num_entries));
+				result = False;
+				goto done;
+			}
+			
+			memcpy( &name_list[ent->num_sam_entries], sam_grp_entries, 
+				num_entries * sizeof(struct acct_info) );
+		}
+	
+		ent->num_sam_entries += num_entries;
+	}
+	
+		
+	/* Fill in remaining fields */
+
+	ent->sam_entries = name_list;
+	ent->sam_entry_index = 0;
+
+	result = (ent->num_sam_entries > 0);
+
+ done:
+	talloc_destroy(mem_ctx);
+
+	return result;
+}
+
+/* Fetch next group entry from ntdom database */
+
+#define MAX_GETGRENT_GROUPS 500
+
+void winbindd_getgrent(struct winbindd_cli_state *state)
+{
+	struct getent_state *ent;
+	struct winbindd_gr *group_list = NULL;
+	int num_groups, group_list_ndx, gr_mem_list_len = 0;
+	char *gr_mem_list = NULL;
+
+	DEBUG(3, ("[%5lu]: getgrent\n", (unsigned long)state->pid));
+
+	/* Check user has enabled this */
+
+	if (!lp_winbind_enum_groups()) {
+		request_error(state);
+		return;
+	}
+
+	num_groups = MIN(MAX_GETGRENT_GROUPS, state->request.data.num_entries);
+
+	if (num_groups == 0) {
+		request_error(state);
+		return;
+	}
+
+	if ((state->response.extra_data.data = SMB_MALLOC_ARRAY(struct winbindd_gr, num_groups)) == NULL) {
+		request_error(state);
+		return;
+	}
+
+	memset(state->response.extra_data.data, '\0',
+		num_groups * sizeof(struct winbindd_gr) );
+
+	state->response.data.num_entries = 0;
+
+	group_list = (struct winbindd_gr *)state->response.extra_data.data;
+
+	if (!state->getgrent_initialized)
+		winbindd_setgrent_internal(state);
+
+	if (!(ent = state->getgrent_state)) {
+		request_error(state);
+		return;
+	}
+
+	/* Start sending back groups */
+
+	for (group_list_ndx = 0; group_list_ndx < num_groups; ) {
+		struct acct_info *name_list = NULL;
+		fstring domain_group_name;
+		uint32 result;
+		gid_t group_gid;
+		size_t gr_mem_len;
+		char *gr_mem;
+		DOM_SID group_sid;
+		struct winbindd_domain *domain;
+				
+		/* Do we need to fetch another chunk of groups? */
+
+	tryagain:
+
+		DEBUG(10, ("entry_index = %d, num_entries = %d\n",
+			   ent->sam_entry_index, ent->num_sam_entries));
+
+		if (ent->num_sam_entries == ent->sam_entry_index) {
+
+			while(ent && !get_sam_group_entries(ent)) {
+				struct getent_state *next_ent;
+
+				DEBUG(10, ("freeing state info for domain %s\n", ent->domain_name)); 
+
+				/* Free state information for this domain */
+
+				SAFE_FREE(ent->sam_entries);
+
+				next_ent = ent->next;
+				DLIST_REMOVE(state->getgrent_state, ent);
+				
+				SAFE_FREE(ent);
+				ent = next_ent;
+			}
+
+			/* No more domains */
+
+			if (!ent) 
+                                break;
+		}
+		
+		name_list = (struct acct_info *)ent->sam_entries;
+		
+		if (!(domain = 
+		      find_domain_from_name(ent->domain_name))) {
+			DEBUG(3, ("No such domain %s in winbindd_getgrent\n", ent->domain_name));
+			result = False;
+			goto done;
+		}
+
+		/* Lookup group info */
+		
+		sid_copy(&group_sid, &domain->sid);
+		sid_append_rid(&group_sid, name_list[ent->sam_entry_index].rid);
+
+		if (!NT_STATUS_IS_OK(idmap_sid_to_gid(&group_sid, &group_gid))) {
+			union unid_t id;
+			enum lsa_SidType type;
+
+			DEBUG(10, ("SID %s not in idmap\n",
+				   sid_string_static(&group_sid)));
+
+			if (!pdb_sid_to_id(&group_sid, &id, &type)) {
+				DEBUG(1, ("could not look up gid for group "
+					  "%s\n", 
+					  name_list[ent->sam_entry_index].acct_name));
+				ent->sam_entry_index++;
+				goto tryagain;
+			}
+
+			if ((type != SID_NAME_DOM_GRP) &&
+			    (type != SID_NAME_ALIAS) &&
+			    (type != SID_NAME_WKN_GRP)) {
+				DEBUG(1, ("Group %s is a %s, not a group\n",
+					  sid_type_lookup(type),
+					  name_list[ent->sam_entry_index].acct_name));
+				ent->sam_entry_index++;
+				goto tryagain;
+			}
+			group_gid = id.gid;
+		}
+
+		DEBUG(10, ("got gid %lu for group %lu\n", (unsigned long)group_gid,
+			   (unsigned long)name_list[ent->sam_entry_index].rid));
+		
+		/* Fill in group entry */
+
+		fill_domain_username(domain_group_name, ent->domain_name, 
+			 name_list[ent->sam_entry_index].acct_name, True);
+
+		result = fill_grent(&group_list[group_list_ndx], 
+				    ent->domain_name,
+				    name_list[ent->sam_entry_index].acct_name,
+				    group_gid);
+
+		/* Fill in group membership entry */
+
+		if (result) {
+			size_t num_gr_mem = 0;
+			DOM_SID member_sid;
+			group_list[group_list_ndx].num_gr_mem = 0;
+			gr_mem = NULL;
+			gr_mem_len = 0;
+			
+			/* Get group membership */			
+			if (state->request.cmd == WINBINDD_GETGRLST) {
+				result = True;
+			} else {
+				sid_copy(&member_sid, &domain->sid);
+				sid_append_rid(&member_sid, name_list[ent->sam_entry_index].rid);
+				result = fill_grent_mem(
+					domain,
+					NULL,
+					&member_sid,
+					SID_NAME_DOM_GRP,
+					&num_gr_mem,
+					&gr_mem, &gr_mem_len);
+
+				group_list[group_list_ndx].num_gr_mem = (uint32)num_gr_mem;
+			}
+		}
+
+		if (result) {
+			/* Append to group membership list */
+			gr_mem_list = (char *)SMB_REALLOC(
+				gr_mem_list, gr_mem_list_len + gr_mem_len);
+
+			if (!gr_mem_list && (group_list[group_list_ndx].num_gr_mem != 0)) {
+				DEBUG(0, ("out of memory\n"));
+				gr_mem_list_len = 0;
+				break;
+			}
+
+			DEBUG(10, ("list_len = %d, mem_len = %u\n",
+				   gr_mem_list_len, (unsigned int)gr_mem_len));
+
+			memcpy(&gr_mem_list[gr_mem_list_len], gr_mem,
+			       gr_mem_len);
+
+			SAFE_FREE(gr_mem);
+
+			group_list[group_list_ndx].gr_mem_ofs = 
+				gr_mem_list_len;
+
+			gr_mem_list_len += gr_mem_len;
+		}
+
+		ent->sam_entry_index++;
+		
+		/* Add group to return list */
+		
+		if (result) {
+
+			DEBUG(10, ("adding group num_entries = %d\n",
+				   state->response.data.num_entries));
+
+			group_list_ndx++;
+			state->response.data.num_entries++;
+			
+			state->response.length +=
+				sizeof(struct winbindd_gr);
+			
+		} else {
+			DEBUG(0, ("could not lookup domain group %s\n", 
+				  domain_group_name));
+		}
+	}
+
+	/* Copy the list of group memberships to the end of the extra data */
+
+	if (group_list_ndx == 0)
+		goto done;
+
+	state->response.extra_data.data = SMB_REALLOC(
+		state->response.extra_data.data,
+		group_list_ndx * sizeof(struct winbindd_gr) + gr_mem_list_len);
+
+	if (!state->response.extra_data.data) {
+		DEBUG(0, ("out of memory\n"));
+		group_list_ndx = 0;
+		SAFE_FREE(gr_mem_list);
+		request_error(state);
+		return;
+	}
+
+	memcpy(&((char *)state->response.extra_data.data)
+	       [group_list_ndx * sizeof(struct winbindd_gr)], 
+	       gr_mem_list, gr_mem_list_len);
+
+	state->response.length += gr_mem_list_len;
+
+	DEBUG(10, ("returning %d groups, length = %d\n",
+		   group_list_ndx, gr_mem_list_len));
+
+	/* Out of domains */
+
+ done:
+
+       	SAFE_FREE(gr_mem_list);
+
+	if (group_list_ndx > 0)
+		request_ok(state);
+	else
+		request_error(state);
+}
+
+/* List domain groups without mapping to unix ids */
+
+void winbindd_list_groups(struct winbindd_cli_state *state)
+{
+	uint32 total_entries = 0;
+	struct winbindd_domain *domain;
+	const char *which_domain;
+	char *extra_data = NULL;
+	unsigned int extra_data_len = 0, i;
+
+	DEBUG(3, ("[%5lu]: list groups\n", (unsigned long)state->pid));
+
+	/* Ensure null termination */
+	state->request.domain_name[sizeof(state->request.domain_name)-1]='\0';	
+	which_domain = state->request.domain_name;
+	
+	/* Enumerate over trusted domains */
+
+	for (domain = domain_list(); domain; domain = domain->next) {
+		struct getent_state groups;
+
+		/* if we have a domain name restricting the request and this
+		   one in the list doesn't match, then just bypass the remainder
+		   of the loop */
+		   
+		if ( *which_domain && !strequal(which_domain, domain->name) )
+			continue;
+			
+		ZERO_STRUCT(groups);
+
+		/* Get list of sam groups */
+		
+		fstrcpy(groups.domain_name, domain->name);
+
+		get_sam_group_entries(&groups);
+			
+		if (groups.num_sam_entries == 0) {
+			/* this domain is empty or in an error state */
+			continue;
+		}
+
+		/* keep track the of the total number of groups seen so 
+		   far over all domains */
+		total_entries += groups.num_sam_entries;
+		
+		/* Allocate some memory for extra data.  Note that we limit
+		   account names to sizeof(fstring) = 128 characters.  */		
+		extra_data = (char *)SMB_REALLOC(
+			extra_data, sizeof(fstring) * total_entries);
+ 
+		if (!extra_data) {
+			DEBUG(0,("failed to enlarge buffer!\n"));
+			request_error(state);
+			return;
+		}
+
+		/* Pack group list into extra data fields */
+		for (i = 0; i < groups.num_sam_entries; i++) {
+			char *group_name = ((struct acct_info *)
+					    groups.sam_entries)[i].acct_name; 
+			fstring name;
+
+			fill_domain_username(name, domain->name, group_name, True);
+			/* Append to extra data */			
+			memcpy(&extra_data[extra_data_len], name, 
+                               strlen(name));
+			extra_data_len += strlen(name);
+			extra_data[extra_data_len++] = ',';
+		}
+
+		SAFE_FREE(groups.sam_entries);
+	}
+
+	/* Assign extra_data fields in response structure */
+	if (extra_data) {
+		extra_data[extra_data_len - 1] = '\0';
+		state->response.extra_data.data = extra_data;
+		state->response.length += extra_data_len;
+	}
+
+	/* No domains may have responded but that's still OK so don't
+	   return an error. */
+
+	request_ok(state);
+}
+
+/* Get user supplementary groups.  This is much quicker than trying to
+   invert the groups database.  We merge the groups from the gids and
+   other_sids info3 fields as trusted domain, universal group
+   memberships, and nested groups (win2k native mode only) are not
+   returned by the getgroups RPC call but are present in the info3. */
+
+struct getgroups_state {
+	struct winbindd_cli_state *state;
+	struct winbindd_domain *domain;
+	char *domname;
+	char *username;
+	DOM_SID user_sid;
+
+	const DOM_SID *token_sids;
+	size_t i, num_token_sids;
+
+	gid_t *token_gids;
+	size_t num_token_gids;
+};
+
+static void getgroups_usersid_recv(void *private_data, BOOL success,
+				   const DOM_SID *sid, enum lsa_SidType type);
+static void getgroups_tokensids_recv(void *private_data, BOOL success,
+				     DOM_SID *token_sids, size_t num_token_sids);
+static void getgroups_sid2gid_recv(void *private_data, BOOL success, gid_t gid);
+
+void winbindd_getgroups(struct winbindd_cli_state *state)
+{
+	struct getgroups_state *s;
+
+	/* Ensure null termination */
+	state->request.data.username
+		[sizeof(state->request.data.username)-1]='\0';
+
+	DEBUG(3, ("[%5lu]: getgroups %s\n", (unsigned long)state->pid,
+		  state->request.data.username));
+
+	/* Parse domain and username */
+
+	s = TALLOC_P(state->mem_ctx, struct getgroups_state);
+	if (s == NULL) {
+		DEBUG(0, ("talloc failed\n"));
+		request_error(state);
+		return;
+	}
+
+	s->state = state;
+
+	ws_name_return( state->request.data.username, WB_REPLACE_CHAR );
+
+	if (!parse_domain_user_talloc(state->mem_ctx,
+				      state->request.data.username,
+				      &s->domname, &s->username)) {
+		DEBUG(5, ("Could not parse domain user: %s\n",
+			  state->request.data.username));
+
+		/* error out if we do not have nested group support */
+
+		if ( !lp_winbind_nested_groups() ) {
+			request_error(state);
+			return;
+		}
+
+		s->domname = talloc_strdup( state->mem_ctx, get_global_sam_name() );
+		s->username = talloc_strdup( state->mem_ctx, state->request.data.username );
+	}
+	
+	/* Get info for the domain */
+
+	s->domain = find_domain_from_name_noinit(s->domname);
+
+	if (s->domain == NULL) {
+		DEBUG(7, ("could not find domain entry for domain %s\n", 
+			  s->domname));
+		request_error(state);
+		return;
+	}
+
+	if ( s->domain->primary && lp_winbind_trusted_domains_only()) {
+		DEBUG(7,("winbindd_getgroups: My domain -- rejecting "
+			 "getgroups() for %s\\%s.\n", s->domname,
+			 s->username));
+		request_error(state);
+		return;
+	}	
+
+	/* Get rid and name type from name.  The following costs 1 packet */
+
+	winbindd_lookupname_async(state->mem_ctx, s->domname, s->username,
+				  getgroups_usersid_recv, s);
+}
+
+static void getgroups_usersid_recv(void *private_data, BOOL success,
+				   const DOM_SID *sid, enum lsa_SidType type)
+{
+	struct getgroups_state *s =
+		(struct getgroups_state *)private_data;
+
+	if ((!success) ||
+	    ((type != SID_NAME_USER) && (type != SID_NAME_COMPUTER))) {
+		request_error(s->state);
+		return;
+	}
+
+	sid_copy(&s->user_sid, sid);
+
+	winbindd_gettoken_async(s->state->mem_ctx, &s->user_sid,
+				getgroups_tokensids_recv, s);
+}
+
+static void getgroups_tokensids_recv(void *private_data, BOOL success,
+				     DOM_SID *token_sids, size_t num_token_sids)
+{
+	struct getgroups_state *s =
+		(struct getgroups_state *)private_data;
+
+	/* We need at least the user sid and the primary group in the token,
+	 * otherwise it's an error */
+
+	if ((!success) || (num_token_sids < 2)) {
+		request_error(s->state);
+		return;
+	}
+
+	s->token_sids = token_sids;
+	s->num_token_sids = num_token_sids;
+	s->i = 0;
+
+	s->token_gids = NULL;
+	s->num_token_gids = 0;
+
+	getgroups_sid2gid_recv(s, False, 0);
+}
+
+static void getgroups_sid2gid_recv(void *private_data, BOOL success, gid_t gid)
+{
+	struct getgroups_state *s =
+		(struct getgroups_state *)private_data;
+
+	if (success) {
+		if (!add_gid_to_array_unique(s->state->mem_ctx, gid,
+					&s->token_gids,
+					&s->num_token_gids)) {
+			return;
+		}
+	}
+
+	if (s->i < s->num_token_sids) {
+		const DOM_SID *sid = &s->token_sids[s->i];
+		s->i += 1;
+
+		if (sid_equal(sid, &s->user_sid)) {
+			getgroups_sid2gid_recv(s, False, 0);
+			return;
+		}
+
+		winbindd_sid2gid_async(s->state->mem_ctx, sid,
+				       getgroups_sid2gid_recv, s);
+		return;
+	}
+
+	s->state->response.data.num_entries = s->num_token_gids;
+	/* s->token_gids are talloced */
+	s->state->response.extra_data.data = smb_xmemdup(s->token_gids, s->num_token_gids * sizeof(gid_t));
+	s->state->response.length += s->num_token_gids * sizeof(gid_t);
+	request_ok(s->state);
+}
+
+/* Get user supplementary sids. This is equivalent to the
+   winbindd_getgroups() function but it involves a SID->SIDs mapping
+   rather than a NAME->SID->SIDS->GIDS mapping, which means we avoid
+   idmap. This call is designed to be used with applications that need
+   to do ACL evaluation themselves. Note that the cached info3 data is
+   not used 
+
+   this function assumes that the SID that comes in is a user SID. If
+   you pass in another type of SID then you may get unpredictable
+   results.
+*/
+
+static void getusersids_recv(void *private_data, BOOL success, DOM_SID *sids,
+			     size_t num_sids);
+
+void winbindd_getusersids(struct winbindd_cli_state *state)
+{
+	DOM_SID *user_sid;
+
+	/* Ensure null termination */
+	state->request.data.sid[sizeof(state->request.data.sid)-1]='\0';
+
+	user_sid = TALLOC_P(state->mem_ctx, DOM_SID);
+	if (user_sid == NULL) {
+		DEBUG(1, ("talloc failed\n"));
+		request_error(state);
+		return;
+	}
+
+	if (!string_to_sid(user_sid, state->request.data.sid)) {
+		DEBUG(1, ("Could not get convert sid %s from string\n",
+			  state->request.data.sid));
+		request_error(state);
+		return;
+	}
+
+	winbindd_gettoken_async(state->mem_ctx, user_sid, getusersids_recv,
+				state);
+}
+
+static void getusersids_recv(void *private_data, BOOL success, DOM_SID *sids,
+			     size_t num_sids)
+{
+	struct winbindd_cli_state *state =
+		(struct winbindd_cli_state *)private_data;
+	char *ret = NULL;
+	unsigned ofs, ret_size = 0;
+	size_t i;
+
+	if (!success) {
+		request_error(state);
+		return;
+	}
+
+	/* work out the response size */
+	for (i = 0; i < num_sids; i++) {
+		const char *s = sid_string_static(&sids[i]);
+		ret_size += strlen(s) + 1;
+	}
+
+	/* build the reply */
+	ret = (char *)SMB_MALLOC(ret_size);
+	if (!ret) {
+		DEBUG(0, ("malloc failed\n"));
+		request_error(state);
+		return;
+	}
+	ofs = 0;
+	for (i = 0; i < num_sids; i++) {
+		const char *s = sid_string_static(&sids[i]);
+		safe_strcpy(ret + ofs, s, ret_size - ofs - 1);
+		ofs += strlen(ret+ofs) + 1;
+	}
+
+	/* Send data back to client */
+	state->response.data.num_entries = num_sids;
+	state->response.extra_data.data = ret;
+	state->response.length += ret_size;
+	request_ok(state);
+}
+
+void winbindd_getuserdomgroups(struct winbindd_cli_state *state)
+{
+	DOM_SID user_sid;
+	struct winbindd_domain *domain;
+
+	/* Ensure null termination */
+	state->request.data.sid[sizeof(state->request.data.sid)-1]='\0';
+
+	if (!string_to_sid(&user_sid, state->request.data.sid)) {
+		DEBUG(1, ("Could not get convert sid %s from string\n",
+			  state->request.data.sid));
+		request_error(state);
+		return;
+	}
+
+	/* Get info for the domain */	
+	if ((domain = find_domain_from_sid_noinit(&user_sid)) == NULL) {
+		DEBUG(0,("could not find domain entry for sid %s\n", 
+			 sid_string_static(&user_sid)));
+		request_error(state);
+		return;
+	}
+
+	sendto_domain(state, domain);
+}
+
+enum winbindd_result winbindd_dual_getuserdomgroups(struct winbindd_domain *domain,
+						    struct winbindd_cli_state *state)
+{
+	DOM_SID user_sid;
+	NTSTATUS status;
+
+	char *sidstring;
+	ssize_t len;
+	DOM_SID *groups;
+	uint32 num_groups;
+
+	/* Ensure null termination */
+	state->request.data.sid[sizeof(state->request.data.sid)-1]='\0';
+
+	if (!string_to_sid(&user_sid, state->request.data.sid)) {
+		DEBUG(1, ("Could not get convert sid %s from string\n",
+			  state->request.data.sid));
+		return WINBINDD_ERROR;
+	}
+
+	status = domain->methods->lookup_usergroups(domain, state->mem_ctx,
+						    &user_sid, &num_groups,
+						    &groups);
+	if (!NT_STATUS_IS_OK(status))
+		return WINBINDD_ERROR;
+
+	if (num_groups == 0) {
+		state->response.data.num_entries = 0;
+		state->response.extra_data.data = NULL;
+		return WINBINDD_OK;
+	}
+
+	if (!print_sidlist(state->mem_ctx, groups, num_groups, &sidstring, &len)) {
+		DEBUG(0, ("talloc failed\n"));
+		return WINBINDD_ERROR;
+	}
+
+	state->response.extra_data.data = SMB_STRDUP(sidstring);
+	if (!state->response.extra_data.data) {
+		return WINBINDD_ERROR;
+	}
+	state->response.length += len+1;
+	state->response.data.num_entries = num_groups;
+
+	return WINBINDD_OK;
+}

Copied: branches/samba/upstream/source/nsswitch/winbindd_misc.c (from rev 1928, branches/samba/upstream/source/nsswitch/winbindd_misc.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/winbindd_misc.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/winbindd_misc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,538 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   Winbind daemon - miscellaneous other functions
+
+   Copyright (C) Tim Potter      2000
+   Copyright (C) Andrew Bartlett 2002
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "winbindd.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_WINBIND
+
+/* Check the machine account password is valid */
+
+void winbindd_check_machine_acct(struct winbindd_cli_state *state)
+{
+	DEBUG(3, ("[%5lu]: check machine account\n",
+		  (unsigned long)state->pid));
+
+	sendto_domain(state, find_our_domain());
+}
+
+enum winbindd_result winbindd_dual_check_machine_acct(struct winbindd_domain *domain,
+						      struct winbindd_cli_state *state)
+{
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+        int num_retries = 0;
+	struct winbindd_domain *contact_domain;
+
+	DEBUG(3, ("[%5lu]: check machine account\n", (unsigned long)state->pid));
+
+	/* Get trust account password */
+
+ again:
+
+	contact_domain = find_our_domain();
+	
+        /* This call does a cli_nt_setup_creds() which implicitly checks
+           the trust account password. */
+
+	invalidate_cm_connection(&contact_domain->conn);
+
+	{
+		struct rpc_pipe_client *netlogon_pipe;
+		result = cm_connect_netlogon(contact_domain, &netlogon_pipe);
+	}
+
+        if (!NT_STATUS_IS_OK(result)) {
+                DEBUG(3, ("could not open handle to NETLOGON pipe\n"));
+                goto done;
+        }
+
+        /* There is a race condition between fetching the trust account
+           password and the periodic machine password change.  So it's 
+	   possible that the trust account password has been changed on us.  
+	   We are returned NT_STATUS_ACCESS_DENIED if this happens. */
+
+#define MAX_RETRIES 8
+
+        if ((num_retries < MAX_RETRIES) && 
+            NT_STATUS_V(result) == NT_STATUS_V(NT_STATUS_ACCESS_DENIED)) {
+                num_retries++;
+                goto again;
+        }
+
+	/* Pass back result code - zero for success, other values for
+	   specific failures. */
+
+	DEBUG(3, ("secret is %s\n", NT_STATUS_IS_OK(result) ?  
+                  "good" : "bad"));
+
+ done:
+	state->response.data.auth.nt_status = NT_STATUS_V(result);
+	fstrcpy(state->response.data.auth.nt_status_string, nt_errstr(result));
+	fstrcpy(state->response.data.auth.error_string, nt_errstr(result));
+	state->response.data.auth.pam_error = nt_status_to_pam(result);
+
+	DEBUG(NT_STATUS_IS_OK(result) ? 5 : 2, ("Checking the trust account password returned %s\n", 
+						state->response.data.auth.nt_status_string));
+
+	return NT_STATUS_IS_OK(result) ? WINBINDD_OK : WINBINDD_ERROR;
+}
+
+void winbindd_list_trusted_domains(struct winbindd_cli_state *state)
+{
+	DEBUG(3, ("[%5lu]: list trusted domains\n",
+		  (unsigned long)state->pid));
+
+	sendto_domain(state, find_our_domain());
+}
+
+enum winbindd_result winbindd_dual_list_trusted_domains(struct winbindd_domain *domain,
+							struct winbindd_cli_state *state)
+{
+	uint32 i, num_domains;
+	char **names, **alt_names;
+	DOM_SID *sids;
+	int extra_data_len = 0;
+	char *extra_data;
+	NTSTATUS result;
+	BOOL have_own_domain = False;
+
+	DEBUG(3, ("[%5lu]: list trusted domains\n",
+		  (unsigned long)state->pid));
+
+	result = domain->methods->trusted_domains(domain, state->mem_ctx,
+						  &num_domains, &names,
+						  &alt_names, &sids);
+
+	if (!NT_STATUS_IS_OK(result)) {
+		DEBUG(3, ("winbindd_dual_list_trusted_domains: trusted_domains returned %s\n",
+			nt_errstr(result) ));
+		return WINBINDD_ERROR;
+	}
+
+	extra_data = talloc_strdup(state->mem_ctx, "");
+
+	if (num_domains > 0)
+		extra_data = talloc_asprintf(state->mem_ctx, "%s\\%s\\%s",
+					     names[0],
+					     alt_names[0] ? alt_names[0] : names[0],
+					     sid_string_static(&sids[0]));
+
+	for (i=1; i<num_domains; i++)
+		extra_data = talloc_asprintf(state->mem_ctx, "%s\n%s\\%s\\%s",
+					     extra_data,
+					     names[i],
+					     alt_names[i] ? alt_names[i] : names[i],
+					     sid_string_static(&sids[i]));
+	/* add our primary domain */
+	
+	for (i=0; i<num_domains; i++) {
+		if (strequal(names[i], domain->name)) {
+			have_own_domain = True;
+			break;
+		}
+	}
+
+	if (state->request.data.list_all_domains && !have_own_domain) {
+		extra_data = talloc_asprintf(state->mem_ctx, "%s\n%s\\%s\\%s",
+					     extra_data,
+					     domain->name,
+					     domain->alt_name ? domain->alt_name : domain->name,
+					     sid_string_static(&domain->sid));
+	}
+
+	/* This is a bit excessive, but the extra data sooner or later will be
+	   talloc'ed */
+
+	extra_data_len = 0;
+	if (extra_data != NULL) {
+		extra_data_len = strlen(extra_data);
+	}
+
+	if (extra_data_len > 0) {
+		state->response.extra_data.data = SMB_STRDUP(extra_data);
+		state->response.length += extra_data_len+1;
+	}
+
+	return WINBINDD_OK;
+}
+
+void winbindd_getdcname(struct winbindd_cli_state *state)
+{
+	state->request.domain_name
+		[sizeof(state->request.domain_name)-1] = '\0';
+
+	DEBUG(3, ("[%5lu]: Get DC name for %s\n", (unsigned long)state->pid,
+		  state->request.domain_name));
+
+	sendto_domain(state, find_our_domain());
+}
+
+enum winbindd_result winbindd_dual_getdcname(struct winbindd_domain *domain,
+					     struct winbindd_cli_state *state)
+{
+	fstring dcname_slash;
+	char *p;
+	struct rpc_pipe_client *netlogon_pipe;
+	NTSTATUS result;
+	WERROR werr;
+	unsigned int orig_timeout;
+
+	state->request.domain_name
+		[sizeof(state->request.domain_name)-1] = '\0';
+
+	DEBUG(3, ("[%5lu]: Get DC name for %s\n", (unsigned long)state->pid,
+		  state->request.domain_name));
+
+	result = cm_connect_netlogon(domain, &netlogon_pipe);
+
+	if (!NT_STATUS_IS_OK(result)) {
+		DEBUG(1, ("Can't contact the NETLOGON pipe\n"));
+		return WINBINDD_ERROR;
+	}
+
+	/* This call can take a long time - allow the server to time out.
+	   35 seconds should do it. */
+
+	orig_timeout = cli_set_timeout(netlogon_pipe->cli, 35000);
+
+	werr = rpccli_netlogon_getanydcname(netlogon_pipe, state->mem_ctx, domain->dcname,
+					    state->request.domain_name,
+					    dcname_slash);
+	/* And restore our original timeout. */
+	cli_set_timeout(netlogon_pipe->cli, orig_timeout);
+
+	if (!W_ERROR_IS_OK(werr)) {
+		DEBUG(5, ("Error requesting DCname: %s\n", dos_errstr(werr)));
+		return WINBINDD_ERROR;
+	}
+
+	p = dcname_slash;
+	if (*p == '\\') {
+		p+=1;
+	}
+	if (*p == '\\') {
+		p+=1;
+	}
+
+	fstrcpy(state->response.data.dc_name, p);
+	return WINBINDD_OK;
+}
+
+struct sequence_state {
+	TALLOC_CTX *mem_ctx;
+	struct winbindd_cli_state *cli_state;
+	struct winbindd_domain *domain;
+	struct winbindd_request *request;
+	struct winbindd_response *response;
+	char *extra_data;
+};
+
+static void sequence_recv(void *private_data, BOOL success);
+
+void winbindd_show_sequence(struct winbindd_cli_state *state)
+{
+	struct sequence_state *seq;
+
+	/* Ensure null termination */
+	state->request.domain_name[sizeof(state->request.domain_name)-1]='\0';
+
+	if (strlen(state->request.domain_name) > 0) {
+		struct winbindd_domain *domain;
+		domain = find_domain_from_name_noinit(
+			state->request.domain_name);
+		if (domain == NULL) {
+			request_error(state);
+			return;
+		}
+		sendto_domain(state, domain);
+		return;
+	}
+
+	/* Ask all domains in sequence, collect the results in sequence_recv */
+
+	seq = TALLOC_P(state->mem_ctx, struct sequence_state);
+	if (seq == NULL) {
+		DEBUG(0, ("talloc failed\n"));
+		request_error(state);
+		return;
+	}
+
+	seq->mem_ctx = state->mem_ctx;
+	seq->cli_state = state;
+	seq->domain = domain_list();
+	if (seq->domain == NULL) {
+		DEBUG(0, ("domain list empty\n"));
+		request_error(state);
+		return;
+	}
+	seq->request = TALLOC_ZERO_P(state->mem_ctx,
+				     struct winbindd_request);
+	seq->response = TALLOC_ZERO_P(state->mem_ctx,
+				      struct winbindd_response);
+	seq->extra_data = talloc_strdup(state->mem_ctx, "");
+
+	if ((seq->request == NULL) || (seq->response == NULL) ||
+	    (seq->extra_data == NULL)) {
+		DEBUG(0, ("talloc failed\n"));
+		request_error(state);
+		return;
+	}
+
+	seq->request->length = sizeof(*seq->request);
+	seq->request->cmd = WINBINDD_SHOW_SEQUENCE;
+	fstrcpy(seq->request->domain_name, seq->domain->name);
+
+	async_domain_request(state->mem_ctx, seq->domain,
+			     seq->request, seq->response,
+			     sequence_recv, seq);
+}
+
+static void sequence_recv(void *private_data, BOOL success)
+{
+	struct sequence_state *state =
+		(struct sequence_state *)private_data;
+	uint32 seq = DOM_SEQUENCE_NONE;
+
+	if ((success) && (state->response->result == WINBINDD_OK))
+		seq = state->response->data.domain_info.sequence_number;
+
+	if (seq == DOM_SEQUENCE_NONE) {
+		state->extra_data = talloc_asprintf(state->mem_ctx,
+						    "%s%s : DISCONNECTED\n",
+						    state->extra_data,
+						    state->domain->name);
+	} else {
+		state->extra_data = talloc_asprintf(state->mem_ctx,
+						    "%s%s : %d\n",
+						    state->extra_data,
+						    state->domain->name, seq);
+	}
+
+	state->domain->sequence_number = seq;
+
+	state->domain = state->domain->next;
+
+	if (state->domain == NULL) {
+		struct winbindd_cli_state *cli_state = state->cli_state;
+		cli_state->response.length =
+			sizeof(cli_state->response) +
+			strlen(state->extra_data) + 1;
+		cli_state->response.extra_data.data =
+			SMB_STRDUP(state->extra_data);
+		request_ok(cli_state);
+		return;
+	}
+
+	/* Ask the next domain */
+	fstrcpy(state->request->domain_name, state->domain->name);
+	async_domain_request(state->mem_ctx, state->domain,
+			     state->request, state->response,
+			     sequence_recv, state);
+}
+
+/* This is the child-only version of --sequence. It only allows for a single
+ * domain (ie "our" one) to be displayed. */
+
+enum winbindd_result winbindd_dual_show_sequence(struct winbindd_domain *domain,
+						 struct winbindd_cli_state *state)
+{
+	DEBUG(3, ("[%5lu]: show sequence\n", (unsigned long)state->pid));
+
+	/* Ensure null termination */
+	state->request.domain_name[sizeof(state->request.domain_name)-1]='\0';
+
+	domain->methods->sequence_number(domain, &domain->sequence_number);
+
+	state->response.data.domain_info.sequence_number =
+		domain->sequence_number;
+
+	return WINBINDD_OK;
+}
+
+struct domain_info_state {
+	struct winbindd_domain *domain;
+	struct winbindd_cli_state *cli_state;
+};
+
+static void domain_info_init_recv(void *private_data, BOOL success);
+
+void winbindd_domain_info(struct winbindd_cli_state *state)
+{
+	struct winbindd_domain *domain;
+
+	DEBUG(3, ("[%5lu]: domain_info [%s]\n", (unsigned long)state->pid,
+		  state->request.domain_name));
+
+	domain = find_domain_from_name_noinit(state->request.domain_name);
+
+	if (domain == NULL) {
+		DEBUG(3, ("Did not find domain [%s]\n",
+			  state->request.domain_name));
+		request_error(state);
+		return;
+	}
+
+	if (!domain->initialized) {
+		struct domain_info_state *istate;
+
+		istate = TALLOC_P(state->mem_ctx, struct domain_info_state);
+		if (istate == NULL) {
+			DEBUG(0, ("talloc failed\n"));
+			request_error(state);
+			return;
+		}
+
+		istate->cli_state = state;
+		istate->domain = domain;
+
+		init_child_connection(domain, domain_info_init_recv, istate);
+				      
+		return;
+	}
+
+	fstrcpy(state->response.data.domain_info.name,
+		domain->name);
+	fstrcpy(state->response.data.domain_info.alt_name,
+		domain->alt_name);
+	fstrcpy(state->response.data.domain_info.sid,
+		sid_string_static(&domain->sid));
+	
+	state->response.data.domain_info.native_mode =
+		domain->native_mode;
+	state->response.data.domain_info.active_directory =
+		domain->active_directory;
+	state->response.data.domain_info.primary =
+		domain->primary;
+	state->response.data.domain_info.sequence_number =
+		domain->sequence_number;
+
+	request_ok(state);
+}
+
+static void domain_info_init_recv(void *private_data, BOOL success)
+{
+	struct domain_info_state *istate =
+		(struct domain_info_state *)private_data;
+	struct winbindd_cli_state *state = istate->cli_state;
+	struct winbindd_domain *domain = istate->domain;
+
+	DEBUG(10, ("Got back from child init: %d\n", success));
+
+	if ((!success) || (!domain->initialized)) {
+		DEBUG(5, ("Could not init child for domain %s\n",
+			  domain->name));
+		request_error(state);
+		return;
+	}
+
+	fstrcpy(state->response.data.domain_info.name,
+		domain->name);
+	fstrcpy(state->response.data.domain_info.alt_name,
+		domain->alt_name);
+	fstrcpy(state->response.data.domain_info.sid,
+		sid_string_static(&domain->sid));
+	
+	state->response.data.domain_info.native_mode =
+		domain->native_mode;
+	state->response.data.domain_info.active_directory =
+		domain->active_directory;
+	state->response.data.domain_info.primary =
+		domain->primary;
+	state->response.data.domain_info.sequence_number =
+		domain->sequence_number;
+
+	request_ok(state);
+}
+
+void winbindd_ping(struct winbindd_cli_state *state)
+{
+	DEBUG(3, ("[%5lu]: ping\n", (unsigned long)state->pid));
+	request_ok(state);
+}
+
+/* List various tidbits of information */
+
+void winbindd_info(struct winbindd_cli_state *state)
+{
+
+	DEBUG(3, ("[%5lu]: request misc info\n", (unsigned long)state->pid));
+
+	state->response.data.info.winbind_separator = *lp_winbind_separator();
+	fstrcpy(state->response.data.info.samba_version, SAMBA_VERSION_STRING);
+	request_ok(state);
+}
+
+/* Tell the client the current interface version */
+
+void winbindd_interface_version(struct winbindd_cli_state *state)
+{
+	DEBUG(3, ("[%5lu]: request interface version\n",
+		  (unsigned long)state->pid));
+	
+	state->response.data.interface_version = WINBIND_INTERFACE_VERSION;
+	request_ok(state);
+}
+
+/* What domain are we a member of? */
+
+void winbindd_domain_name(struct winbindd_cli_state *state)
+{
+	DEBUG(3, ("[%5lu]: request domain name\n", (unsigned long)state->pid));
+	
+	fstrcpy(state->response.data.domain_name, lp_workgroup());
+	request_ok(state);
+}
+
+/* What's my name again? */
+
+void winbindd_netbios_name(struct winbindd_cli_state *state)
+{
+	DEBUG(3, ("[%5lu]: request netbios name\n",
+		  (unsigned long)state->pid));
+	
+	fstrcpy(state->response.data.netbios_name, global_myname());
+	request_ok(state);
+}
+
+/* Where can I find the privilaged pipe? */
+
+void winbindd_priv_pipe_dir(struct winbindd_cli_state *state)
+{
+
+	DEBUG(3, ("[%5lu]: request location of privileged pipe\n",
+		  (unsigned long)state->pid));
+	
+	state->response.extra_data.data = SMB_STRDUP(get_winbind_priv_pipe_dir());
+	if (!state->response.extra_data.data) {
+		DEBUG(0, ("malloc failed\n"));
+		request_error(state);
+		return;
+	}
+
+	/* must add one to length to copy the 0 for string termination */
+	state->response.length +=
+		strlen((char *)state->response.extra_data.data) + 1;
+
+	request_ok(state);
+}

Copied: branches/samba/upstream/source/nsswitch/winbindd_nss.h (from rev 1928, branches/samba/upstream/source/nsswitch/winbindd_nss.h)
===================================================================
--- branches/samba/upstream/source/nsswitch/winbindd_nss.h	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/winbindd_nss.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,493 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   Winbind daemon for ntdom nss module
+
+   Copyright (C) Tim Potter 2000
+   Copyright (C) Gerald Carter 2006
+   
+   You are free to use this interface definition in any way you see
+   fit, including without restriction, using this header in your own
+   products. You do not need to give any attribution.  
+*/
+
+
+#ifndef CONST_DISCARD
+#define CONST_DISCARD(type, ptr)      ((type) ((void *) (ptr)))
+#endif
+
+#ifndef CONST_ADD
+#define CONST_ADD(type, ptr)          ((type) ((const void *) (ptr)))
+#endif
+
+#ifndef SAFE_FREE
+#define SAFE_FREE(x) do { if(x) {free(x); x=NULL;} } while(0)
+#endif
+
+#ifndef _WINBINDD_NTDOM_H
+#define _WINBINDD_NTDOM_H
+
+#define WINBINDD_SOCKET_NAME "pipe"            /* Name of PF_UNIX socket */
+#define WINBINDD_SOCKET_DIR  "/tmp/.winbindd"  /* Name of PF_UNIX dir */
+#define WINBINDD_PRIV_SOCKET_SUBDIR "winbindd_privileged" /* name of subdirectory of lp_lockdir() to hold the 'privileged' pipe */
+#define WINBINDD_DOMAIN_ENV  "WINBINDD_DOMAIN" /* Environment variables */
+#define WINBINDD_DONT_ENV    "_NO_WINBINDD"
+
+/* Update this when you change the interface.  */
+
+#define WINBIND_INTERFACE_VERSION 18
+
+/* Have to deal with time_t being 4 or 8 bytes due to structure alignment.
+   On a 64bit Linux box, we have to support a constant structure size
+   between /lib/libnss_winbind.so.2 and /li64/libnss_winbind.so.2.
+   The easiest way to do this is to always use 8byte values for time_t. */
+
+#if defined(int64)
+#  define SMB_TIME_T int64
+#else
+#  define SMB_TIME_T time_t
+#endif
+
+/* Socket commands */
+
+enum winbindd_cmd {
+
+	WINBINDD_INTERFACE_VERSION,    /* Always a well known value */
+
+	/* Get users and groups */
+
+	WINBINDD_GETPWNAM,
+	WINBINDD_GETPWUID,
+	WINBINDD_GETGRNAM,
+	WINBINDD_GETGRGID,
+	WINBINDD_GETGROUPS,
+
+	/* Enumerate users and groups */
+
+	WINBINDD_SETPWENT,
+	WINBINDD_ENDPWENT,
+	WINBINDD_GETPWENT,
+	WINBINDD_SETGRENT,
+	WINBINDD_ENDGRENT,
+	WINBINDD_GETGRENT,
+
+	/* PAM authenticate and password change */
+
+	WINBINDD_PAM_AUTH,
+	WINBINDD_PAM_AUTH_CRAP,
+	WINBINDD_PAM_CHAUTHTOK,
+	WINBINDD_PAM_LOGOFF,
+	WINBINDD_PAM_CHNG_PSWD_AUTH_CRAP,
+
+	/* List various things */
+
+	WINBINDD_LIST_USERS,         /* List w/o rid->id mapping */
+	WINBINDD_LIST_GROUPS,        /* Ditto */
+	WINBINDD_LIST_TRUSTDOM,
+
+	/* SID conversion */
+
+	WINBINDD_LOOKUPSID,
+	WINBINDD_LOOKUPNAME,
+	WINBINDD_LOOKUPRIDS,
+
+	/* Lookup functions */
+
+	WINBINDD_SID_TO_UID,       
+	WINBINDD_SID_TO_GID,
+	WINBINDD_SIDS_TO_XIDS,
+	WINBINDD_UID_TO_SID,
+	WINBINDD_GID_TO_SID,
+
+	WINBINDD_ALLOCATE_UID,
+	WINBINDD_ALLOCATE_GID,
+	WINBINDD_SET_MAPPING,
+	WINBINDD_SET_HWM,
+
+	/* Miscellaneous other stuff */
+
+	WINBINDD_DUMP_MAPS,
+
+	WINBINDD_CHECK_MACHACC,     /* Check machine account pw works */
+	WINBINDD_PING,              /* Just tell me winbind is running */
+	WINBINDD_INFO,              /* Various bit of info.  Currently just tidbits */
+	WINBINDD_DOMAIN_NAME,       /* The domain this winbind server is a member of (lp_workgroup()) */
+
+	WINBINDD_DOMAIN_INFO,	/* Most of what we know from
+				   struct winbindd_domain */
+	WINBINDD_GETDCNAME,	/* Issue a GetDCName Request */
+
+	WINBINDD_SHOW_SEQUENCE, /* display sequence numbers of domains */
+
+	/* WINS commands */
+
+	WINBINDD_WINS_BYIP,
+	WINBINDD_WINS_BYNAME,
+
+	/* this is like GETGRENT but gives an empty group list */
+	WINBINDD_GETGRLST,
+
+	WINBINDD_NETBIOS_NAME,       /* The netbios name of the server */
+
+	/* find the location of our privileged pipe */
+	WINBINDD_PRIV_PIPE_DIR,
+
+	/* return a list of group sids for a user sid */
+	WINBINDD_GETUSERSIDS,
+
+	/* Various group queries */
+	WINBINDD_GETUSERDOMGROUPS,
+
+	/* Initialize connection in a child */
+	WINBINDD_INIT_CONNECTION,
+
+	/* Blocking calls that are not allowed on the main winbind pipe, only
+	 * between parent and children */
+	WINBINDD_DUAL_SID2UID,
+	WINBINDD_DUAL_SID2GID,
+	WINBINDD_DUAL_SIDS2XIDS,
+	WINBINDD_DUAL_UID2SID,
+	WINBINDD_DUAL_GID2SID,
+	WINBINDD_DUAL_SET_MAPPING,
+	WINBINDD_DUAL_SET_HWM,
+	WINBINDD_DUAL_DUMP_MAPS,
+
+	/* Wrapper around possibly blocking unix nss calls */
+	WINBINDD_DUAL_UID2NAME,
+	WINBINDD_DUAL_NAME2UID,
+	WINBINDD_DUAL_GID2NAME,
+	WINBINDD_DUAL_NAME2GID,
+
+	WINBINDD_DUAL_USERINFO,
+	WINBINDD_DUAL_GETSIDALIASES,
+
+	/* Complete the challenge phase of the NTLM authentication
+	   protocol using cached password. */
+	WINBINDD_CCACHE_NTLMAUTH,
+
+	WINBINDD_NUM_CMDS
+};
+
+typedef struct winbindd_pw {
+	fstring pw_name;
+	fstring pw_passwd;
+	uid_t pw_uid;
+	gid_t pw_gid;
+	fstring pw_gecos;
+	fstring pw_dir;
+	fstring pw_shell;
+} WINBINDD_PW;
+
+
+typedef struct winbindd_gr {
+	fstring gr_name;
+	fstring gr_passwd;
+	gid_t gr_gid;
+	uint32 num_gr_mem;
+	uint32 gr_mem_ofs;   /* offset to group membership */
+} WINBINDD_GR;
+
+
+#define WBFLAG_PAM_INFO3_NDR  		0x0001
+#define WBFLAG_PAM_INFO3_TEXT 		0x0002
+#define WBFLAG_PAM_USER_SESSION_KEY     0x0004
+#define WBFLAG_PAM_LMKEY      		0x0008
+#define WBFLAG_PAM_CONTACT_TRUSTDOM 	0x0010
+#define WBFLAG_QUERY_ONLY		0x0020
+#define WBFLAG_PAM_UNIX_NAME            0x0080
+#define WBFLAG_PAM_AFS_TOKEN            0x0100
+#define WBFLAG_PAM_NT_STATUS_SQUASH     0x0200
+
+/* This is a flag that can only be sent from parent to child */
+#define WBFLAG_IS_PRIVILEGED            0x0400
+/* Flag to say this is a winbindd internal send - don't recurse. */
+#define WBFLAG_RECURSE			0x0800
+
+#define WBFLAG_PAM_KRB5			0x1000
+#define WBFLAG_PAM_FALLBACK_AFTER_KRB5	0x2000
+#define WBFLAG_PAM_CACHED_LOGIN		0x4000
+#define WBFLAG_PAM_GET_PWD_POLICY	0x8000
+
+#define WINBINDD_MAX_EXTRA_DATA (128*1024)
+
+/* Winbind request structure */
+
+/*******************************************************************************
+ * This structure MUST be the same size in the 32bit and 64bit builds
+ * for compatibility between /lib64/libnss_winbind.so and /lib/libnss_winbind.so
+ * 
+ * DO NOT CHANGE THIS STRUCTURE WITHOUT TESTING THE 32BIT NSS LIB AGAINST
+ * A 64BIT WINBINDD    --jerry
+ ******************************************************************************/
+
+struct winbindd_request {
+	uint32 length;
+	enum winbindd_cmd cmd;   /* Winbindd command to execute */
+	pid_t pid;               /* pid of calling process */
+	uint32 flags;            /* flags relavant to a given request */
+	fstring domain_name;	/* name of domain for which the request applies */
+
+	union {
+		fstring winsreq;     /* WINS request */
+		fstring username;    /* getpwnam */
+		fstring groupname;   /* getgrnam */
+		uid_t uid;           /* getpwuid, uid_to_sid */
+		gid_t gid;           /* getgrgid, gid_to_sid */
+		struct {
+			/* We deliberatedly don't split into domain/user to
+                           avoid having the client know what the separator
+                           character is. */	
+			fstring user;
+			fstring pass;
+			pstring require_membership_of_sid;
+			fstring krb5_cc_type;
+			uid_t uid;
+		} auth;              /* pam_winbind auth module */
+                struct {
+                        unsigned char chal[8];
+			uint32 logon_parameters;
+                        fstring user;
+                        fstring domain;
+                        fstring lm_resp;
+                        uint32 lm_resp_len;
+                        fstring nt_resp;
+                        uint32 nt_resp_len;
+			fstring workstation;
+		        fstring require_membership_of_sid;
+                } auth_crap;
+                struct {
+                    fstring user;
+                    fstring oldpass;
+                    fstring newpass;
+                } chauthtok;         /* pam_winbind passwd module */
+		struct {
+			fstring user;
+			fstring domain;
+			unsigned char new_nt_pswd[516];
+			uint16	new_nt_pswd_len;
+			unsigned char old_nt_hash_enc[16];
+			uint16 	old_nt_hash_enc_len;
+			unsigned char new_lm_pswd[516];
+			uint16	new_lm_pswd_len;
+			unsigned char old_lm_hash_enc[16];
+			uint16	old_lm_hash_enc_len;
+		} chng_pswd_auth_crap;/* pam_winbind passwd module */
+		struct {
+			fstring user;
+			fstring krb5ccname;
+			uid_t uid;
+		} logoff;              /* pam_winbind session module */
+		fstring sid;         /* lookupsid, sid_to_[ug]id */
+		struct {
+			fstring dom_name;       /* lookupname */
+			fstring name;       
+		} name;
+		uint32 num_entries;  /* getpwent, getgrent */
+		struct {
+			fstring username;
+			fstring groupname;
+		} acct_mgt;
+		struct {
+			BOOL is_primary;
+			fstring dcname;
+		} init_conn;
+		struct {
+			fstring sid;
+			fstring name;
+		} dual_sid2id;
+		struct {
+			fstring sid;
+			uint32 type;
+			uint32 id;
+		} dual_idmapset;
+		BOOL list_all_domains;
+
+		struct {
+			uid_t uid;
+			fstring user;
+			/* the effective uid of the client, must be the uid for 'user'.
+			   This is checked by the main daemon, trusted by children. */
+			/* if the blobs are length zero, then this doesn't
+			   produce an actual challenge response. It merely
+			   succeeds if there are cached credentials available
+			   that could be used. */
+			uint32 initial_blob_len; /* blobs in extra_data */
+			uint32 challenge_blob_len;
+		} ccache_ntlm_auth;
+
+		/* padding -- needed to fix alignment between 32bit and 64bit libs.
+		   The size is the sizeof the union without the padding aligned on 
+		   an 8 byte boundary.   --jerry */
+
+		char padding[1800];
+	} data;
+	union {
+		SMB_TIME_T padding;
+		char *data;
+	} extra_data;
+	uint32 extra_len;
+	char null_term;
+};
+
+/* Response values */
+
+enum winbindd_result {
+	WINBINDD_ERROR,
+	WINBINDD_PENDING,
+	WINBINDD_OK
+};
+
+/* Winbind response structure */
+
+/*******************************************************************************
+ * This structure MUST be the same size in the 32bit and 64bit builds
+ * for compatibility between /lib64/libnss_winbind.so and /lib/libnss_winbind.so
+ * 
+ * DO NOT CHANGE THIS STRUCTURE WITHOUT TESTING THE 32BIT NSS LIB AGAINST
+ * A 64BIT WINBINDD    --jerry
+ ******************************************************************************/
+
+struct winbindd_response {
+    
+	/* Header information */
+
+	uint32 length;                        /* Length of response */
+	enum winbindd_result result;          /* Result code */
+
+	/* Fixed length return data */
+	
+	union {
+		int interface_version;  /* Try to ensure this is always in the same spot... */
+		
+		fstring winsresp;		/* WINS response */
+
+		/* getpwnam, getpwuid */
+		
+		struct winbindd_pw pw;
+
+		/* getgrnam, getgrgid */
+
+		struct winbindd_gr gr;
+
+		uint32 num_entries; /* getpwent, getgrent */
+		struct winbindd_sid {
+			fstring sid;        /* lookupname, [ug]id_to_sid */
+			int type;
+		} sid;
+		struct winbindd_name {
+			fstring dom_name;       /* lookupsid */
+			fstring name;       
+			int type;
+		} name;
+		uid_t uid;          /* sid_to_uid */
+		gid_t gid;          /* sid_to_gid */
+		struct winbindd_info {
+			char winbind_separator;
+			fstring samba_version;
+		} info;
+		fstring domain_name;
+		fstring netbios_name;
+		fstring dc_name;
+
+		struct auth_reply {
+			uint32 nt_status;
+			fstring nt_status_string;
+			fstring error_string;
+			int pam_error;
+			char user_session_key[16];
+			char first_8_lm_hash[8];
+			fstring krb5ccname;
+			uint32 reject_reason;
+			uint32 padding;
+			struct policy_settings {
+				uint32 min_length_password;
+				uint32 password_history;
+				uint32 password_properties;
+				uint32 padding;
+				SMB_TIME_T expire;
+				SMB_TIME_T min_passwordage;
+			} policy;
+			struct info3_text {
+				SMB_TIME_T logon_time;
+				SMB_TIME_T logoff_time;
+				SMB_TIME_T kickoff_time;
+				SMB_TIME_T pass_last_set_time;
+				SMB_TIME_T pass_can_change_time;
+				SMB_TIME_T pass_must_change_time;
+				uint32 logon_count;
+				uint32 bad_pw_count;
+				uint32 user_rid;
+				uint32 group_rid;
+				uint32 num_groups;
+				uint32 user_flgs;
+				uint32 acct_flags;
+				uint32 num_other_sids;
+				fstring dom_sid;
+				fstring user_name;
+				fstring full_name;
+				fstring logon_script;
+				fstring profile_path;
+				fstring home_dir;
+				fstring dir_drive;
+				fstring logon_srv;
+				fstring logon_dom;
+			} info3;
+		} auth;
+		struct {
+			fstring name;
+			fstring alt_name;
+			fstring sid;
+			BOOL native_mode;
+			BOOL active_directory;
+			BOOL primary;
+			uint32 sequence_number;
+		} domain_info;
+		struct {
+			fstring acct_name;
+			fstring full_name;
+			fstring homedir;
+			fstring shell;
+			uint32 primary_gid;			
+			uint32 group_rid;
+		} user_info;
+		struct {
+			uint32 auth_blob_len; /* blob in extra_data */
+		} ccache_ntlm_auth;
+	} data;
+
+	/* Variable length return data */
+
+	union {
+		SMB_TIME_T padding;
+		void *data;
+	} extra_data;
+};
+
+struct WINBINDD_MEMORY_CREDS {
+	struct WINBINDD_MEMORY_CREDS *next, *prev;
+	const char *username; /* lookup key. */
+	uid_t uid;
+	int ref_count;
+	size_t len;
+	unsigned char *nt_hash; /* Base pointer for the following 2 */
+	unsigned char *lm_hash;
+	char *pass;
+};
+
+struct WINBINDD_CCACHE_ENTRY {
+	struct WINBINDD_CCACHE_ENTRY *next, *prev;
+	const char *principal_name;
+	const char *ccname;
+	const char *service;
+	const char *username;
+	const char *realm;
+	struct WINBINDD_MEMORY_CREDS *cred_ptr;
+	int ref_count;
+	uid_t uid;
+	time_t create_time;
+	time_t renew_until;
+	time_t refresh_time;
+	struct timed_event *event;
+};
+
+#endif

Copied: branches/samba/upstream/source/nsswitch/winbindd_pam.c (from rev 1928, branches/samba/upstream/source/nsswitch/winbindd_pam.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/winbindd_pam.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/winbindd_pam.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,2384 @@
+/*
+   Unix SMB/CIFS implementation.
+
+   Winbind daemon - pam auth funcions
+
+   Copyright (C) Andrew Tridgell 2000
+   Copyright (C) Tim Potter 2001
+   Copyright (C) Andrew Bartlett 2001-2002
+   Copyright (C) Guenther Deschner 2005
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "winbindd.h"
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_WINBIND
+
+static NTSTATUS append_info3_as_txt(TALLOC_CTX *mem_ctx, 
+				    struct winbindd_cli_state *state, 
+				    NET_USER_INFO_3 *info3) 
+{
+	fstring str_sid;
+
+	state->response.data.auth.info3.logon_time = 
+		nt_time_to_unix(info3->logon_time);
+	state->response.data.auth.info3.logoff_time = 
+		nt_time_to_unix(info3->logoff_time);
+	state->response.data.auth.info3.kickoff_time = 
+		nt_time_to_unix(info3->kickoff_time);
+	state->response.data.auth.info3.pass_last_set_time = 
+		nt_time_to_unix(info3->pass_last_set_time);
+	state->response.data.auth.info3.pass_can_change_time = 
+		nt_time_to_unix(info3->pass_can_change_time);
+	state->response.data.auth.info3.pass_must_change_time = 
+		nt_time_to_unix(info3->pass_must_change_time);
+
+	state->response.data.auth.info3.logon_count = info3->logon_count;
+	state->response.data.auth.info3.bad_pw_count = info3->bad_pw_count;
+
+	state->response.data.auth.info3.user_rid = info3->user_rid;
+	state->response.data.auth.info3.group_rid = info3->group_rid;
+	sid_to_string(str_sid, &(info3->dom_sid.sid));
+	fstrcpy(state->response.data.auth.info3.dom_sid, str_sid);
+
+	state->response.data.auth.info3.num_groups = info3->num_groups;
+	state->response.data.auth.info3.user_flgs = info3->user_flgs;
+
+	state->response.data.auth.info3.acct_flags = info3->acct_flags;
+	state->response.data.auth.info3.num_other_sids = info3->num_other_sids;
+
+	unistr2_to_ascii(state->response.data.auth.info3.user_name, 
+		&info3->uni_user_name, -1);
+	unistr2_to_ascii(state->response.data.auth.info3.full_name, 
+		&info3->uni_full_name, -1);
+	unistr2_to_ascii(state->response.data.auth.info3.logon_script, 
+		&info3->uni_logon_script, -1);
+	unistr2_to_ascii(state->response.data.auth.info3.profile_path, 
+		&info3->uni_profile_path, -1);
+	unistr2_to_ascii(state->response.data.auth.info3.home_dir, 
+		&info3->uni_home_dir, -1);
+	unistr2_to_ascii(state->response.data.auth.info3.dir_drive, 
+		&info3->uni_dir_drive, -1);
+
+	unistr2_to_ascii(state->response.data.auth.info3.logon_srv, 
+		&info3->uni_logon_srv, -1);
+	unistr2_to_ascii(state->response.data.auth.info3.logon_dom, 
+		&info3->uni_logon_dom, -1);
+
+	return NT_STATUS_OK;
+}
+
+static NTSTATUS append_info3_as_ndr(TALLOC_CTX *mem_ctx, 
+				    struct winbindd_cli_state *state, 
+				    NET_USER_INFO_3 *info3) 
+{
+	prs_struct ps;
+	uint32 size;
+	if (!prs_init(&ps, 256 /* Random, non-zero number */, mem_ctx, MARSHALL)) {
+		return NT_STATUS_NO_MEMORY;
+	}
+	if (!net_io_user_info3("", info3, &ps, 1, 3, False)) {
+		prs_mem_free(&ps);
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	size = prs_data_size(&ps);
+	SAFE_FREE(state->response.extra_data.data);
+	state->response.extra_data.data = SMB_MALLOC(size);
+	if (!state->response.extra_data.data) {
+		prs_mem_free(&ps);
+		return NT_STATUS_NO_MEMORY;
+	}
+	memset( state->response.extra_data.data, '\0', size );
+	prs_copy_all_data_out((char *)state->response.extra_data.data, &ps);
+	state->response.length += size;
+	prs_mem_free(&ps);
+	return NT_STATUS_OK;
+}
+
+static NTSTATUS check_info3_in_group(TALLOC_CTX *mem_ctx, 
+				     NET_USER_INFO_3 *info3,
+				     const char *group_sid) 
+/**
+ * Check whether a user belongs to a group or list of groups.
+ *
+ * @param mem_ctx talloc memory context.
+ * @param info3 user information, including group membership info.
+ * @param group_sid One or more groups , separated by commas.
+ *
+ * @return NT_STATUS_OK on success,
+ *    NT_STATUS_LOGON_FAILURE if the user does not belong,
+ *    or other NT_STATUS_IS_ERR(status) for other kinds of failure.
+ */
+{
+	DOM_SID *require_membership_of_sid;
+	size_t num_require_membership_of_sid;
+	DOM_SID *all_sids;
+	size_t num_all_sids = (2 + info3->num_groups2 + info3->num_other_sids);
+	size_t i, j = 0, k;
+	size_t group_sid_length;
+	const char *search_location;
+	char *single_group_sid;
+	const char *comma;
+
+	/* Parse the 'required group' SID */
+	
+	if (!group_sid || !group_sid[0]) {
+		/* NO sid supplied, all users may access */
+		return NT_STATUS_OK;
+	}
+
+	num_require_membership_of_sid = 1;
+	group_sid_length = strlen(group_sid);
+	for (i = 0; i < group_sid_length; i++) {
+		if (',' == group_sid[i]) {
+			num_require_membership_of_sid++;
+		}
+	}
+
+	require_membership_of_sid = TALLOC_ARRAY(mem_ctx, DOM_SID, num_require_membership_of_sid);
+	if (!require_membership_of_sid)
+		return NT_STATUS_NO_MEMORY;
+
+	i = 0;
+	search_location = group_sid;
+
+	if (num_require_membership_of_sid > 1) {
+
+		/* Allocate the maximum possible size */
+		single_group_sid = TALLOC(mem_ctx, group_sid_length);
+		if (!single_group_sid)
+			return NT_STATUS_NO_MEMORY;
+
+		while ( (comma = strstr(search_location, ",")) != NULL ) {
+
+			strncpy(single_group_sid, search_location, comma - search_location);
+			single_group_sid[comma - search_location] = 0;
+
+			if (!string_to_sid(&require_membership_of_sid[i++], single_group_sid)) {
+				DEBUG(0, ("check_info3_in_group: could not parse %s as a SID!", 
+					  single_group_sid));
+			
+				return NT_STATUS_INVALID_PARAMETER;
+			}
+
+			search_location = comma + 1;
+		}
+	}
+
+	if (!string_to_sid(&require_membership_of_sid[i++], search_location)) {
+		DEBUG(0, ("check_info3_in_group: could not parse %s as a SID!", 
+			  search_location));
+
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	all_sids = TALLOC_ARRAY(mem_ctx, DOM_SID, num_all_sids);
+	if (!all_sids)
+		return NT_STATUS_NO_MEMORY;
+
+	/* and create (by appending rids) the 'domain' sids */
+	
+	sid_copy(&all_sids[0], &(info3->dom_sid.sid));
+	
+	if (!sid_append_rid(&all_sids[0], info3->user_rid)) {
+		DEBUG(3,("could not append user's primary RID 0x%x\n",
+			 info3->user_rid));			
+		
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+	j++;
+
+	sid_copy(&all_sids[1], &(info3->dom_sid.sid));
+		
+	if (!sid_append_rid(&all_sids[1], info3->group_rid)) {
+		DEBUG(3,("could not append additional group rid 0x%x\n",
+			 info3->group_rid));			
+		
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+	j++;	
+
+	for (i = 0; i < info3->num_groups2; i++) {
+	
+		sid_copy(&all_sids[j], &(info3->dom_sid.sid));
+		
+		if (!sid_append_rid(&all_sids[j], info3->gids[i].g_rid)) {
+			DEBUG(3,("could not append additional group rid 0x%x\n",
+				info3->gids[i].g_rid));			
+				
+			return NT_STATUS_INVALID_PARAMETER;
+		}
+		j++;
+	}
+
+	/* Copy 'other' sids.  We need to do sid filtering here to
+ 	   prevent possible elevation of privileges.  See:
+
+           http://www.microsoft.com/windows2000/techinfo/administration/security/sidfilter.asp
+         */
+
+	for (i = 0; i < info3->num_other_sids; i++) {
+		sid_copy(&all_sids[info3->num_groups2 + i + 2],
+			 &info3->other_sids[i].sid);
+		j++;
+	}
+
+	for (i = 0; i < j; i++) {
+		fstring sid1, sid2;
+		DEBUG(10, ("User has SID: %s\n", 
+			   sid_to_string(sid1, &all_sids[i])));
+		for (k = 0; k < num_require_membership_of_sid; k++) {
+			if (sid_equal(&require_membership_of_sid[k], &all_sids[i])) {
+				DEBUG(10, ("SID %s matches %s - user permitted to authenticate!\n", 
+					   sid_to_string(sid1, &require_membership_of_sid[k]), sid_to_string(sid2, &all_sids[i])));
+				return NT_STATUS_OK;
+			}
+		}
+	}
+	
+	/* Do not distinguish this error from a wrong username/pw */
+
+	return NT_STATUS_LOGON_FAILURE;
+}
+
+struct winbindd_domain *find_auth_domain(struct winbindd_cli_state *state, 
+					const char *domain_name)
+{
+	struct winbindd_domain *domain;
+
+	if (IS_DC) {
+		domain = find_domain_from_name_noinit(domain_name);
+		if (domain == NULL) {
+			DEBUG(3, ("Authentication for domain [%s] refused"
+				  "as it is not a trusted domain\n", 
+				  domain_name));
+		}
+		return domain;
+	}
+
+	if (is_myname(domain_name)) {
+		DEBUG(3, ("Authentication for domain %s (local domain "
+			  "to this server) not supported at this "
+			  "stage\n", domain_name));
+		return NULL;
+	}
+
+	/* we can auth against trusted domains */
+	if (state->request.flags & WBFLAG_PAM_CONTACT_TRUSTDOM) {
+		domain = find_domain_from_name_noinit(domain_name);
+		if (domain == NULL) {
+			DEBUG(3, ("Authentication for domain [%s] skipped " 
+				  "as it is not a trusted domain\n", 
+				  domain_name));
+		} else {
+			return domain;
+		} 
+	}
+
+	return find_our_domain();
+}
+
+static void set_auth_errors(struct winbindd_response *resp, NTSTATUS result)
+{
+	resp->data.auth.nt_status = NT_STATUS_V(result);
+	fstrcpy(resp->data.auth.nt_status_string, nt_errstr(result));
+
+	/* we might have given a more useful error above */
+	if (*resp->data.auth.error_string == '\0') 
+		fstrcpy(resp->data.auth.error_string,
+			get_friendly_nt_error_msg(result));
+	resp->data.auth.pam_error = nt_status_to_pam(result);
+}
+
+static NTSTATUS fillup_password_policy(struct winbindd_domain *domain,
+				       struct winbindd_cli_state *state)
+{
+	struct winbindd_methods *methods;
+	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
+	SAM_UNK_INFO_1 password_policy;
+
+	methods = domain->methods;
+
+	status = methods->password_policy(domain, state->mem_ctx, &password_policy);
+	if (NT_STATUS_IS_ERR(status)) {
+		return status;
+	}
+
+	state->response.data.auth.policy.min_length_password =
+		password_policy.min_length_password;
+	state->response.data.auth.policy.password_history =
+		password_policy.password_history;
+	state->response.data.auth.policy.password_properties =
+		password_policy.password_properties;
+	state->response.data.auth.policy.expire	=
+		nt_time_to_unix_abs(&(password_policy.expire));
+	state->response.data.auth.policy.min_passwordage = 
+		nt_time_to_unix_abs(&(password_policy.min_passwordage));
+
+	return NT_STATUS_OK;
+}
+
+static NTSTATUS get_max_bad_attempts_from_lockout_policy(struct winbindd_domain *domain, 
+							 TALLOC_CTX *mem_ctx, 
+							 uint16 *max_allowed_bad_attempts)
+{
+	struct winbindd_methods *methods;
+	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
+	SAM_UNK_INFO_12 lockout_policy;
+
+	*max_allowed_bad_attempts = 0;
+
+	methods = domain->methods;
+
+	status = methods->lockout_policy(domain, mem_ctx, &lockout_policy);
+	if (NT_STATUS_IS_ERR(status)) {
+		return status;
+	}
+
+	*max_allowed_bad_attempts = lockout_policy.bad_attempt_lockout;
+
+	return NT_STATUS_OK;
+}
+
+static NTSTATUS get_pwd_properties(struct winbindd_domain *domain, 
+				   TALLOC_CTX *mem_ctx, 
+				   uint32 *password_properties)
+{
+	struct winbindd_methods *methods;
+	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
+	SAM_UNK_INFO_1 password_policy;
+
+	*password_properties = 0;
+
+	methods = domain->methods;
+
+	status = methods->password_policy(domain, mem_ctx, &password_policy);
+	if (NT_STATUS_IS_ERR(status)) {
+		return status;
+	}
+
+	*password_properties = password_policy.password_properties;
+
+	return NT_STATUS_OK;
+}
+
+#ifdef HAVE_KRB5
+
+static const char *generate_krb5_ccache(TALLOC_CTX *mem_ctx, 
+					const char *type,
+					uid_t uid,
+					BOOL *internal_ccache)
+{
+	/* accept FILE and WRFILE as krb5_cc_type from the client and then
+	 * build the full ccname string based on the user's uid here -
+	 * Guenther*/
+
+	const char *gen_cc = NULL;
+
+	*internal_ccache = True;
+
+	if (uid == -1) {
+		goto memory_ccache;
+	}
+
+	if (!type || type[0] == '\0') {
+		goto memory_ccache;
+	}
+
+	if (strequal(type, "FILE")) {
+		gen_cc = talloc_asprintf(mem_ctx, "FILE:/tmp/krb5cc_%d", uid);
+	} else if (strequal(type, "WRFILE")) {
+		gen_cc = talloc_asprintf(mem_ctx, "WRFILE:/tmp/krb5cc_%d", uid);
+	} else {
+		DEBUG(10,("we don't allow to set a %s type ccache\n", type));
+		goto memory_ccache;
+	}
+
+	*internal_ccache = False;
+	goto done;
+
+  memory_ccache:
+  	gen_cc = talloc_strdup(mem_ctx, "MEMORY:winbindd_pam_ccache");
+
+  done:
+  	if (gen_cc == NULL) {
+		DEBUG(0,("out of memory\n"));
+		return NULL;
+	}
+
+	DEBUG(10,("using ccache: %s %s\n", gen_cc, *internal_ccache ? "(internal)":""));
+
+	return gen_cc;
+}
+
+static void setup_return_cc_name(struct winbindd_cli_state *state, const char *cc)
+{
+	const char *type = state->request.data.auth.krb5_cc_type;
+
+	state->response.data.auth.krb5ccname[0] = '\0';
+
+	if (type[0] == '\0') {
+		return;
+	}
+
+	if (!strequal(type, "FILE") &&
+	    !strequal(type, "WRFILE")) {
+	    	DEBUG(10,("won't return krbccname for a %s type ccache\n", 
+			type));
+		return;
+	}
+	
+	fstrcpy(state->response.data.auth.krb5ccname, cc);
+}
+
+#endif
+
+static uid_t get_uid_from_state(struct winbindd_cli_state *state)
+{
+	uid_t uid = -1;
+
+	uid = state->request.data.auth.uid;
+
+	if (uid < 0) {
+		DEBUG(1,("invalid uid: '%d'\n", uid));
+		return -1;
+	}
+	return uid;
+}
+
+/**********************************************************************
+ Authenticate a user with a clear text password using Kerberos and fill up
+ ccache if required
+ **********************************************************************/
+
+static NTSTATUS winbindd_raw_kerberos_login(struct winbindd_domain *domain,
+					    struct winbindd_cli_state *state,
+					    NET_USER_INFO_3 **info3)
+{
+#ifdef HAVE_KRB5
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+	krb5_error_code krb5_ret;
+	DATA_BLOB tkt, session_key_krb5;
+	DATA_BLOB ap_rep, session_key;
+	PAC_DATA *pac_data = NULL;
+	PAC_LOGON_INFO *logon_info = NULL;
+	char *client_princ = NULL;
+	char *client_princ_out = NULL;
+	char *local_service = NULL;
+	const char *cc = NULL;
+	const char *principal_s = NULL;
+	const char *service = NULL;
+	char *realm = NULL;
+	fstring name_domain, name_user;
+	time_t ticket_lifetime = 0;
+	time_t renewal_until = 0;
+	uid_t uid = -1;
+	ADS_STRUCT *ads;
+	time_t time_offset = 0;
+	BOOL internal_ccache = True;
+
+	ZERO_STRUCT(session_key);
+	ZERO_STRUCT(session_key_krb5);
+	ZERO_STRUCT(tkt);
+	ZERO_STRUCT(ap_rep);
+
+	ZERO_STRUCTP(info3);
+
+	*info3 = NULL;
+	
+	/* 1st step: 
+	 * prepare a krb5_cc_cache string for the user */
+
+	uid = get_uid_from_state(state);
+	if (uid == -1) {
+		DEBUG(0,("no valid uid\n"));
+	}
+
+	cc = generate_krb5_ccache(state->mem_ctx,
+				  state->request.data.auth.krb5_cc_type,
+				  state->request.data.auth.uid, 
+				  &internal_ccache);
+	if (cc == NULL) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+
+	/* 2nd step: 
+	 * get kerberos properties */
+	
+	if (domain->private_data) {
+		ads = (ADS_STRUCT *)domain->private_data;
+		time_offset = ads->auth.time_offset; 
+	}
+
+
+	/* 3rd step: 
+	 * do kerberos auth and setup ccache as the user */
+
+	parse_domain_user(state->request.data.auth.user, name_domain, name_user);
+
+	realm = domain->alt_name;
+	strupper_m(realm);
+	
+	principal_s = talloc_asprintf(state->mem_ctx, "%s@%s", name_user, realm); 
+	if (principal_s == NULL) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	service = talloc_asprintf(state->mem_ctx, "%s/%s@%s", KRB5_TGS_NAME, realm, realm);
+	if (service == NULL) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	/* if this is a user ccache, we need to act as the user to let the krb5
+	 * library handle the chown, etc. */
+
+	/************************ NON-ROOT **********************/
+
+	if (!internal_ccache) {
+
+		set_effective_uid(uid);
+		DEBUG(10,("winbindd_raw_kerberos_login: uid is %d\n", uid));
+	}
+
+	krb5_ret = kerberos_kinit_password_ext(principal_s, 
+					       state->request.data.auth.pass, 
+					       time_offset, 
+					       &ticket_lifetime,
+					       &renewal_until,
+					       cc, 
+					       True,
+					       True,
+					       WINBINDD_PAM_AUTH_KRB5_RENEW_TIME);
+
+	if (krb5_ret) {
+		DEBUG(1,("winbindd_raw_kerberos_login: kinit failed for '%s' with: %s (%d)\n", 
+			principal_s, error_message(krb5_ret), krb5_ret));
+		result = krb5_to_nt_status(krb5_ret);
+		goto failed;
+	}
+
+	/* does http_timestring use heimdals libroken strftime?? - Guenther */
+	DEBUG(10,("got TGT for %s in %s (valid until: %s (%d), renewable till: %s (%d))\n", 
+		principal_s, cc, 
+		http_timestring(ticket_lifetime), (int)ticket_lifetime, 
+		http_timestring(renewal_until), (int)renewal_until));
+
+	/* we cannot continue with krb5 when UF_DONT_REQUIRE_PREAUTH is set,
+	 * in that case fallback to NTLM - gd */ 
+
+	if ((ticket_lifetime == 0) && (renewal_until == 0)) {
+		result = NT_STATUS_INVALID_LOGON_TYPE;
+		goto failed;
+	}
+
+	client_princ = talloc_strdup(state->mem_ctx, global_myname());
+	if (client_princ == NULL) {
+		result = NT_STATUS_NO_MEMORY;
+		goto failed;
+	}
+	strlower_m(client_princ);
+
+	local_service = talloc_asprintf(state->mem_ctx, "%s$@%s", client_princ, lp_realm());
+	if (local_service == NULL) {
+		DEBUG(0,("winbindd_raw_kerberos_login: out of memory\n"));
+		result = NT_STATUS_NO_MEMORY;
+		goto failed;
+	}
+
+	krb5_ret = cli_krb5_get_ticket(local_service, 
+				       time_offset, 
+				       &tkt, 
+				       &session_key_krb5, 
+				       0, 
+				       cc,
+				       NULL);
+	if (krb5_ret) {
+		DEBUG(1,("winbindd_raw_kerberos_login: failed to get ticket for %s: %s\n", 
+			local_service, error_message(krb5_ret)));
+		result = krb5_to_nt_status(krb5_ret);
+		goto failed;
+	}
+
+	if (!internal_ccache) {
+		gain_root_privilege();
+	}
+
+	/************************ NON-ROOT **********************/
+
+	result = ads_verify_ticket(state->mem_ctx, 
+				   lp_realm(), 
+				   time_offset,
+				   &tkt, 
+				   &client_princ_out, 
+				   &pac_data, 
+				   &ap_rep, 
+				   &session_key);	
+	if (!NT_STATUS_IS_OK(result)) {
+		DEBUG(0,("winbindd_raw_kerberos_login: ads_verify_ticket failed: %s\n", 
+			nt_errstr(result)));
+		goto failed;
+	}
+
+	if (!pac_data) {
+		DEBUG(3,("winbindd_raw_kerberos_login: no pac data\n"));
+		result = NT_STATUS_INVALID_PARAMETER;
+		goto failed;
+	}
+			
+	logon_info = get_logon_info_from_pac(pac_data);
+	if (logon_info == NULL) {
+		DEBUG(1,("winbindd_raw_kerberos_login: no logon info\n"));
+		result = NT_STATUS_INVALID_PARAMETER;
+		goto failed;
+	}
+
+	DEBUG(10,("winbindd_raw_kerberos_login: winbindd validated ticket of %s\n", 
+		local_service));
+
+
+	/* last step: 
+	 * put results together */
+
+	*info3 = &logon_info->info3;
+
+	/* if we had a user's ccache then return that string for the pam
+	 * environment */
+
+	if (!internal_ccache) {
+		
+		setup_return_cc_name(state, cc);
+
+		result = add_ccache_to_list(principal_s,
+					    cc,
+					    service,
+					    state->request.data.auth.user,
+					    realm,
+					    uid,
+					    time(NULL),
+					    ticket_lifetime,
+					    renewal_until, 
+					    False);
+
+		if (!NT_STATUS_IS_OK(result)) {
+			DEBUG(10,("winbindd_raw_kerberos_login: failed to add ccache to list: %s\n", 
+				nt_errstr(result)));
+		}
+	} else {
+
+		/* need to delete the memory cred cache, it is not used anymore */
+
+		krb5_ret = ads_kdestroy(cc);
+		if (krb5_ret) {
+			DEBUG(3,("winbindd_raw_kerberos_login: "
+				 "could not destroy krb5 credential cache: "
+				 "%s\n", error_message(krb5_ret)));
+		}
+
+	}
+
+	result = NT_STATUS_OK;
+
+	goto done;
+
+failed:
+
+	/* we could have created a new credential cache with a valid tgt in it
+	 * but we werent able to get or verify the service ticket for this
+	 * local host and therefor didn't get the PAC, we need to remove that
+	 * cache entirely now */
+
+	krb5_ret = ads_kdestroy(cc);
+	if (krb5_ret) {
+		DEBUG(3,("winbindd_raw_kerberos_login: "
+			 "could not destroy krb5 credential cache: "
+			 "%s\n", error_message(krb5_ret)));
+	}
+
+	if (!NT_STATUS_IS_OK(remove_ccache(state->request.data.auth.user))) {
+		DEBUG(3,("winbindd_raw_kerberos_login: "
+			  "could not remove ccache for user %s\n",
+			state->request.data.auth.user));
+	}
+
+done:
+	data_blob_free(&session_key);
+	data_blob_free(&session_key_krb5);
+	data_blob_free(&ap_rep);
+	data_blob_free(&tkt);
+
+	SAFE_FREE(client_princ_out);
+
+	if (!internal_ccache) {
+		gain_root_privilege();
+	}
+
+	return result;
+#else 
+	return NT_STATUS_NOT_SUPPORTED;
+#endif /* HAVE_KRB5 */
+}
+
+void winbindd_pam_auth(struct winbindd_cli_state *state)
+{
+	struct winbindd_domain *domain;
+	fstring name_domain, name_user;
+
+	/* Ensure null termination */
+	state->request.data.auth.user
+		[sizeof(state->request.data.auth.user)-1]='\0';
+
+	/* Ensure null termination */
+	state->request.data.auth.pass
+		[sizeof(state->request.data.auth.pass)-1]='\0';
+
+	DEBUG(3, ("[%5lu]: pam auth %s\n", (unsigned long)state->pid,
+		  state->request.data.auth.user));
+
+	/* Parse domain and username */
+	
+	ws_name_return( state->request.data.auth.user, WB_REPLACE_CHAR );
+
+	if (!canonicalize_username(state->request.data.auth.user,
+			       name_domain, name_user)) {
+		set_auth_errors(&state->response, NT_STATUS_NO_SUCH_USER);
+		DEBUG(5, ("Plain text authentication for %s returned %s "
+			  "(PAM: %d)\n",
+			  state->request.data.auth.user, 
+			  state->response.data.auth.nt_status_string,
+			  state->response.data.auth.pam_error));
+		request_error(state);
+		return;
+	}
+
+	domain = find_auth_domain(state, name_domain);
+
+	if (domain == NULL) {
+		set_auth_errors(&state->response, NT_STATUS_NO_SUCH_USER);
+		DEBUG(5, ("Plain text authentication for %s returned %s "
+			  "(PAM: %d)\n",
+			  state->request.data.auth.user, 
+			  state->response.data.auth.nt_status_string,
+			  state->response.data.auth.pam_error));
+		request_error(state);
+		return;
+	}
+
+	sendto_domain(state, domain);
+}
+
+NTSTATUS winbindd_dual_pam_auth_cached(struct winbindd_domain *domain,
+				       struct winbindd_cli_state *state,
+				       NET_USER_INFO_3 **info3)
+{
+	NTSTATUS result = NT_STATUS_LOGON_FAILURE;
+	uint16 max_allowed_bad_attempts; 
+	fstring name_domain, name_user;
+	DOM_SID sid;
+	enum lsa_SidType type;
+	uchar new_nt_pass[NT_HASH_LEN];
+	const uint8 *cached_nt_pass;
+	const uint8 *cached_salt;
+	NET_USER_INFO_3 *my_info3;
+	time_t kickoff_time, must_change_time;
+	BOOL password_good = False;
+
+	*info3 = NULL;
+
+	ZERO_STRUCTP(info3);
+
+	DEBUG(10,("winbindd_dual_pam_auth_cached\n"));
+
+	/* Parse domain and username */
+	
+	parse_domain_user(state->request.data.auth.user, name_domain, name_user);
+
+
+	if (!lookup_cached_name(state->mem_ctx,
+	                        name_domain,
+				name_user,
+				&sid,
+				&type)) {
+		DEBUG(10,("winbindd_dual_pam_auth_cached: no such user in the cache\n"));
+		return NT_STATUS_NO_SUCH_USER;
+	}
+
+	if (type != SID_NAME_USER) {
+		DEBUG(10,("winbindd_dual_pam_auth_cached: not a user (%s)\n", sid_type_lookup(type)));
+		return NT_STATUS_LOGON_FAILURE;
+	}
+
+	result = winbindd_get_creds(domain, 
+				    state->mem_ctx, 
+				    &sid, 
+				    &my_info3, 
+				    &cached_nt_pass,
+				    &cached_salt);
+	if (!NT_STATUS_IS_OK(result)) {
+		DEBUG(10,("winbindd_dual_pam_auth_cached: failed to get creds: %s\n", nt_errstr(result)));
+		return result;
+	}
+
+	*info3 = my_info3;
+
+	E_md4hash(state->request.data.auth.pass, new_nt_pass);
+
+#if DEBUG_PASSWORD
+	dump_data(100, (const char *)new_nt_pass, NT_HASH_LEN);
+	dump_data(100, (const char *)cached_nt_pass, NT_HASH_LEN);
+	if (cached_salt) {
+		dump_data(100, (const char *)cached_salt, NT_HASH_LEN);
+	}
+#endif
+
+	if (cached_salt) {
+		/* In this case we didn't store the nt_hash itself,
+		   but the MD5 combination of salt + nt_hash. */
+		uchar salted_hash[NT_HASH_LEN];
+		E_md5hash(cached_salt, new_nt_pass, salted_hash);
+
+		password_good = (memcmp(cached_nt_pass, salted_hash, NT_HASH_LEN) == 0) ?
+			True : False;
+	} else {
+		/* Old cached cred - direct store of nt_hash (bad bad bad !). */
+		password_good = (memcmp(cached_nt_pass, new_nt_pass, NT_HASH_LEN) == 0) ?
+			True : False;
+	}
+
+	if (password_good) {
+
+		/* User *DOES* know the password, update logon_time and reset
+		 * bad_pw_count */
+	
+		my_info3->user_flgs |= LOGON_CACHED_ACCOUNT;
+	
+		if (my_info3->acct_flags & ACB_AUTOLOCK) {
+			return NT_STATUS_ACCOUNT_LOCKED_OUT;
+		}
+	
+		if (my_info3->acct_flags & ACB_DISABLED) {
+			return NT_STATUS_ACCOUNT_DISABLED;
+		}
+	
+		if (my_info3->acct_flags & ACB_WSTRUST) {
+			return NT_STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT;
+		}
+	
+		if (my_info3->acct_flags & ACB_SVRTRUST) {
+			return NT_STATUS_NOLOGON_SERVER_TRUST_ACCOUNT;
+		}
+	
+		if (my_info3->acct_flags & ACB_DOMTRUST) {
+			return NT_STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT;
+		}
+
+		if (!(my_info3->acct_flags & ACB_NORMAL)) {
+			DEBUG(0,("winbindd_dual_pam_auth_cached: whats wrong with that one?: 0x%08x\n", 
+				my_info3->acct_flags));
+			return NT_STATUS_LOGON_FAILURE;
+		}
+
+		kickoff_time = nt_time_to_unix(my_info3->kickoff_time);
+		if (kickoff_time != 0 && time(NULL) > kickoff_time) {
+			return NT_STATUS_ACCOUNT_EXPIRED;
+		}
+
+		must_change_time = nt_time_to_unix(my_info3->pass_must_change_time);
+		if (must_change_time != 0 && must_change_time < time(NULL)) {
+			/* we allow grace logons when the password has expired */
+			my_info3->user_flgs |= LOGON_GRACE_LOGON;
+			/* return NT_STATUS_PASSWORD_EXPIRED; */
+			goto success;
+		}
+	
+#ifdef HAVE_KRB5
+		/* FIXME: what else points out that the remote domain is AD ? */
+		if (!strequal(domain->name, domain->alt_name) &&
+		    (state->request.flags & WBFLAG_PAM_KRB5)) {
+
+			uid_t uid = -1;
+			const char *cc = NULL;
+			char *realm = NULL;
+			const char *principal_s = NULL;
+			const char *service = NULL;
+			BOOL internal_ccache = False;
+
+			uid = get_uid_from_state(state);
+			if (uid == -1) {
+				DEBUG(0,("winbindd_dual_pam_auth_cached: invalid uid\n"));
+				return NT_STATUS_INVALID_PARAMETER;
+			}
+
+			cc = generate_krb5_ccache(state->mem_ctx,
+						state->request.data.auth.krb5_cc_type,
+						state->request.data.auth.uid,
+						&internal_ccache);
+			if (cc == NULL) {
+				return NT_STATUS_NO_MEMORY;
+			}
+
+			realm = domain->alt_name;
+			strupper_m(realm);
+
+			principal_s = talloc_asprintf(state->mem_ctx, "%s@%s", name_user, realm);
+			if (principal_s == NULL) {
+				return NT_STATUS_NO_MEMORY;
+			}
+
+			service = talloc_asprintf(state->mem_ctx, "%s/%s@%s", KRB5_TGS_NAME, realm, realm);
+			if (service == NULL) {
+				return NT_STATUS_NO_MEMORY;
+			}
+
+			if (!internal_ccache) {
+
+				setup_return_cc_name(state, cc);
+
+				result = add_ccache_to_list(principal_s,
+							    cc,
+							    service,
+							    state->request.data.auth.user,
+							    domain->alt_name,
+							    uid,
+							    time(NULL),
+							    time(NULL) + lp_winbind_cache_time(),
+							    time(NULL) + WINBINDD_PAM_AUTH_KRB5_RENEW_TIME,
+							    True);
+
+				if (!NT_STATUS_IS_OK(result)) {
+					DEBUG(10,("winbindd_dual_pam_auth_cached: failed "
+						"to add ccache to list: %s\n",
+						nt_errstr(result)));
+				}
+			}
+		}
+#endif /* HAVE_KRB5 */
+ success:
+		/* FIXME: we possibly should handle logon hours as well (does xp when
+		 * offline?) see auth/auth_sam.c:sam_account_ok for details */
+
+		unix_to_nt_time(&my_info3->logon_time, time(NULL));
+		my_info3->bad_pw_count = 0;
+
+		result = winbindd_update_creds_by_info3(domain,
+							state->mem_ctx,
+							state->request.data.auth.user,
+							state->request.data.auth.pass,
+							my_info3);
+		if (!NT_STATUS_IS_OK(result)) {
+			DEBUG(1,("winbindd_dual_pam_auth_cached: failed to update creds: %s\n",
+				nt_errstr(result)));
+			return result;
+		}
+
+		return NT_STATUS_OK;
+
+	}
+
+	/* User does *NOT* know the correct password, modify info3 accordingly */
+
+	/* failure of this is not critical */
+	result = get_max_bad_attempts_from_lockout_policy(domain, state->mem_ctx, &max_allowed_bad_attempts);
+	if (!NT_STATUS_IS_OK(result)) {
+		DEBUG(10,("winbindd_dual_pam_auth_cached: failed to get max_allowed_bad_attempts. "
+			  "Won't be able to honour account lockout policies\n"));
+	}
+
+	/* increase counter */
+	my_info3->bad_pw_count++;
+
+	if (max_allowed_bad_attempts == 0) {
+		goto failed;
+	}
+
+	/* lockout user */
+	if (my_info3->bad_pw_count >= max_allowed_bad_attempts) {
+
+		uint32 password_properties;
+
+		result = get_pwd_properties(domain, state->mem_ctx, &password_properties);
+		if (!NT_STATUS_IS_OK(result)) {
+			DEBUG(10,("winbindd_dual_pam_auth_cached: failed to get password properties.\n"));
+		}
+
+		if ((my_info3->user_rid != DOMAIN_USER_RID_ADMIN) || 
+		    (password_properties & DOMAIN_LOCKOUT_ADMINS)) {
+			my_info3->acct_flags |= ACB_AUTOLOCK;
+		}
+	}
+
+failed:
+	result = winbindd_update_creds_by_info3(domain,
+						state->mem_ctx,
+						state->request.data.auth.user,
+						NULL,
+						my_info3);
+
+	if (!NT_STATUS_IS_OK(result)) {
+		DEBUG(0,("winbindd_dual_pam_auth_cached: failed to update creds %s\n", 
+			nt_errstr(result)));
+	}
+
+	return NT_STATUS_LOGON_FAILURE;
+}
+
+NTSTATUS winbindd_dual_pam_auth_kerberos(struct winbindd_domain *domain,
+					 struct winbindd_cli_state *state, 
+					 NET_USER_INFO_3 **info3)
+{
+	struct winbindd_domain *contact_domain;
+	fstring name_domain, name_user;
+	NTSTATUS result;
+
+	DEBUG(10,("winbindd_dual_pam_auth_kerberos\n"));
+	
+	/* Parse domain and username */
+	
+	parse_domain_user(state->request.data.auth.user, name_domain, name_user);
+
+	/* what domain should we contact? */
+	
+	if ( IS_DC ) {
+		if (!(contact_domain = find_domain_from_name(name_domain))) {
+			DEBUG(3, ("Authentication for domain for [%s] -> [%s]\\[%s] failed as %s is not a trusted domain\n", 
+				  state->request.data.auth.user, name_domain, name_user, name_domain)); 
+			result = NT_STATUS_NO_SUCH_USER;
+			goto done;
+		}
+		
+	} else {
+		if (is_myname(name_domain)) {
+			DEBUG(3, ("Authentication for domain %s (local domain to this server) not supported at this stage\n", name_domain));
+			result =  NT_STATUS_NO_SUCH_USER;
+			goto done;
+		}
+		
+		contact_domain = find_domain_from_name(name_domain);
+		if (contact_domain == NULL) {
+			DEBUG(3, ("Authentication for domain for [%s] -> [%s]\\[%s] failed as %s is not a trusted domain\n", 
+				  state->request.data.auth.user, name_domain, name_user, name_domain)); 
+
+			contact_domain = find_our_domain();
+		}
+	}
+
+	if (contact_domain->initialized && 
+	    contact_domain->active_directory) {
+	    	goto try_login;
+	}
+
+	if (!contact_domain->initialized) {
+		init_dc_connection(contact_domain);
+	}
+
+	if (!contact_domain->active_directory) {
+		DEBUG(3,("krb5 auth requested but domain is not Active Directory\n"));
+		return NT_STATUS_INVALID_LOGON_TYPE;
+	}
+try_login:
+	result = winbindd_raw_kerberos_login(contact_domain, state, info3);
+done:
+	return result;
+}
+
+NTSTATUS winbindd_dual_pam_auth_samlogon(struct winbindd_domain *domain,
+					 struct winbindd_cli_state *state,
+					 NET_USER_INFO_3 **info3)
+{
+
+	struct rpc_pipe_client *netlogon_pipe;
+	uchar chal[8];
+	DATA_BLOB lm_resp;
+	DATA_BLOB nt_resp;
+	int attempts = 0;
+	unsigned char local_lm_response[24];
+	unsigned char local_nt_response[24];
+	struct winbindd_domain *contact_domain;
+	fstring name_domain, name_user;
+	BOOL retry;
+	NTSTATUS result;
+	NET_USER_INFO_3 *my_info3;
+
+	ZERO_STRUCTP(info3);
+
+	*info3 = NULL;
+
+	my_info3 = TALLOC_ZERO_P(state->mem_ctx, NET_USER_INFO_3);
+	if (my_info3 == NULL) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+
+	DEBUG(10,("winbindd_dual_pam_auth_samlogon\n"));
+	
+	/* Parse domain and username */
+	
+	parse_domain_user(state->request.data.auth.user, name_domain, name_user);
+
+	/* do password magic */
+	
+
+	generate_random_buffer(chal, 8);
+	if (lp_client_ntlmv2_auth()) {
+		DATA_BLOB server_chal;
+		DATA_BLOB names_blob;
+		DATA_BLOB nt_response;
+		DATA_BLOB lm_response;
+		server_chal = data_blob_talloc(state->mem_ctx, chal, 8); 
+		
+		/* note that the 'workgroup' here is a best guess - we don't know
+		   the server's domain at this point.  The 'server name' is also
+		   dodgy... 
+		*/
+		names_blob = NTLMv2_generate_names_blob(global_myname(), lp_workgroup());
+		
+		if (!SMBNTLMv2encrypt(name_user, name_domain, 
+				      state->request.data.auth.pass, 
+				      &server_chal, 
+				      &names_blob,
+				      &lm_response, &nt_response, NULL)) {
+			data_blob_free(&names_blob);
+			data_blob_free(&server_chal);
+			DEBUG(0, ("winbindd_pam_auth: SMBNTLMv2encrypt() failed!\n"));
+			result = NT_STATUS_NO_MEMORY;
+			goto done;
+		}
+		data_blob_free(&names_blob);
+		data_blob_free(&server_chal);
+		lm_resp = data_blob_talloc(state->mem_ctx, lm_response.data,
+					   lm_response.length);
+		nt_resp = data_blob_talloc(state->mem_ctx, nt_response.data,
+					   nt_response.length);
+		data_blob_free(&lm_response);
+		data_blob_free(&nt_response);
+
+	} else {
+		if (lp_client_lanman_auth() 
+		    && SMBencrypt(state->request.data.auth.pass, 
+				  chal, 
+				  local_lm_response)) {
+			lm_resp = data_blob_talloc(state->mem_ctx, 
+						   local_lm_response, 
+						   sizeof(local_lm_response));
+		} else {
+			lm_resp = data_blob(NULL, 0);
+		}
+		SMBNTencrypt(state->request.data.auth.pass, 
+			     chal,
+			     local_nt_response);
+
+		nt_resp = data_blob_talloc(state->mem_ctx, 
+					   local_nt_response, 
+					   sizeof(local_nt_response));
+	}
+	
+	/* what domain should we contact? */
+	
+	if ( IS_DC ) {
+		if (!(contact_domain = find_domain_from_name(name_domain))) {
+			DEBUG(3, ("Authentication for domain for [%s] -> [%s]\\[%s] failed as %s is not a trusted domain\n", 
+				  state->request.data.auth.user, name_domain, name_user, name_domain)); 
+			result = NT_STATUS_NO_SUCH_USER;
+			goto done;
+		}
+		
+	} else {
+		if (is_myname(name_domain)) {
+			DEBUG(3, ("Authentication for domain %s (local domain to this server) not supported at this stage\n", name_domain));
+			result =  NT_STATUS_NO_SUCH_USER;
+			goto done;
+		}
+
+		contact_domain = find_our_domain();
+	}
+
+	/* check authentication loop */
+
+	do {
+
+		ZERO_STRUCTP(my_info3);
+		retry = False;
+
+		result = cm_connect_netlogon(contact_domain, &netlogon_pipe);
+
+		if (!NT_STATUS_IS_OK(result)) {
+			DEBUG(3, ("could not open handle to NETLOGON pipe\n"));
+			goto done;
+		}
+
+		result = rpccli_netlogon_sam_network_logon(netlogon_pipe,
+							   state->mem_ctx,
+							   0,
+							   contact_domain->dcname, /* server name */
+							   name_user,              /* user name */
+							   name_domain,            /* target domain */
+							   global_myname(),        /* workstation */
+							   chal,
+							   lm_resp,
+							   nt_resp,
+							   my_info3);
+		attempts += 1;
+
+		/* We have to try a second time as cm_connect_netlogon
+		   might not yet have noticed that the DC has killed
+		   our connection. */
+
+		if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL)) {
+			retry = True;
+			continue;
+		}
+		
+		/* if we get access denied, a possible cause was that we had
+		   and open connection to the DC, but someone changed our
+		   machine account password out from underneath us using 'net
+		   rpc changetrustpw' */
+		   
+		if ( NT_STATUS_EQUAL(result, NT_STATUS_ACCESS_DENIED) ) {
+			DEBUG(3,("winbindd_pam_auth: sam_logon returned "
+				 "ACCESS_DENIED.  Maybe the trust account "
+				"password was changed and we didn't know it. "
+				 "Killing connections to domain %s\n",
+				name_domain));
+			invalidate_cm_connection(&contact_domain->conn);
+			retry = True;
+		} 
+		
+	} while ( (attempts < 2) && retry );
+
+	/* handle the case where a NT4 DC does not fill in the acct_flags in
+	 * the samlogon reply info3. When accurate info3 is required by the
+	 * caller, we look up the account flags ourselve - gd */
+
+	if ((state->request.flags & WBFLAG_PAM_INFO3_TEXT) && 
+	    (my_info3->acct_flags == 0) && NT_STATUS_IS_OK(result)) {
+
+		struct rpc_pipe_client *samr_pipe;
+		POLICY_HND samr_domain_handle, user_pol;
+		SAM_USERINFO_CTR *user_ctr;
+		NTSTATUS status_tmp;
+		uint32 acct_flags;
+
+		ZERO_STRUCT(user_ctr);
+
+		status_tmp = cm_connect_sam(contact_domain, state->mem_ctx, 
+					    &samr_pipe, &samr_domain_handle);
+
+		if (!NT_STATUS_IS_OK(status_tmp)) {
+			DEBUG(3, ("could not open handle to SAMR pipe: %s\n", 
+				nt_errstr(status_tmp)));
+			goto done;
+		}
+
+		status_tmp = rpccli_samr_open_user(samr_pipe, state->mem_ctx, 
+						   &samr_domain_handle,
+						   MAXIMUM_ALLOWED_ACCESS,
+						   my_info3->user_rid, &user_pol);
+
+		if (!NT_STATUS_IS_OK(status_tmp)) {
+			DEBUG(3, ("could not open user handle on SAMR pipe: %s\n",
+				nt_errstr(status_tmp)));
+			goto done;
+		}
+
+		status_tmp = rpccli_samr_query_userinfo(samr_pipe, state->mem_ctx, 
+							&user_pol, 16, &user_ctr);
+
+		if (!NT_STATUS_IS_OK(status_tmp)) {
+			DEBUG(3, ("could not query user info on SAMR pipe: %s\n",
+				nt_errstr(status_tmp)));
+			rpccli_samr_close(samr_pipe, state->mem_ctx, &user_pol);
+			goto done;
+		}
+
+		acct_flags = user_ctr->info.id16->acb_info;
+
+		if (acct_flags == 0) {
+			rpccli_samr_close(samr_pipe, state->mem_ctx, &user_pol);
+			goto done;
+		}
+
+		my_info3->acct_flags = acct_flags;
+
+		DEBUG(10,("successfully retrieved acct_flags 0x%x\n", acct_flags));
+
+		rpccli_samr_close(samr_pipe, state->mem_ctx, &user_pol);
+	}
+
+	*info3 = my_info3;
+done:
+	return result;
+}
+
+enum winbindd_result winbindd_dual_pam_auth(struct winbindd_domain *domain,
+					    struct winbindd_cli_state *state) 
+{
+	NTSTATUS result = NT_STATUS_LOGON_FAILURE;
+	fstring name_domain, name_user;
+	NET_USER_INFO_3 *info3 = NULL;
+	
+	/* Ensure null termination */
+	state->request.data.auth.user[sizeof(state->request.data.auth.user)-1]='\0';
+
+	/* Ensure null termination */
+	state->request.data.auth.pass[sizeof(state->request.data.auth.pass)-1]='\0';
+
+	DEBUG(3, ("[%5lu]: dual pam auth %s\n", (unsigned long)state->pid,
+		  state->request.data.auth.user));
+
+	/* Parse domain and username */
+	
+	ws_name_return( state->request.data.auth.user, WB_REPLACE_CHAR );
+
+	parse_domain_user(state->request.data.auth.user, name_domain, name_user);
+
+	if (domain->online == False) {
+		result = NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND;
+		if (domain->startup) {
+			/* Logons are very important to users. If we're offline and
+			   we get a request within the first 30 seconds of startup,
+			   try very hard to find a DC and go online. */
+
+			DEBUG(10,("winbindd_dual_pam_auth: domain: %s offline and auth "
+				"request in startup mode.\n", domain->name ));
+
+			winbindd_flush_negative_conn_cache(domain);
+			result = init_dc_connection(domain);
+		}
+	}
+
+	DEBUG(10,("winbindd_dual_pam_auth: domain: %s last was %s\n", domain->name, domain->online ? "online":"offline"));
+
+	/* Check for Kerberos authentication */
+	if (domain->online && (state->request.flags & WBFLAG_PAM_KRB5)) {
+	
+		result = winbindd_dual_pam_auth_kerberos(domain, state, &info3);
+
+		if (NT_STATUS_IS_OK(result)) {
+			DEBUG(10,("winbindd_dual_pam_auth_kerberos succeeded\n"));
+			goto process_result;
+		} else {
+			DEBUG(10,("winbindd_dual_pam_auth_kerberos failed: %s\n", nt_errstr(result)));
+		}
+
+		if (NT_STATUS_EQUAL(result, NT_STATUS_NO_LOGON_SERVERS) ||
+		    NT_STATUS_EQUAL(result, NT_STATUS_IO_TIMEOUT) ||
+		    NT_STATUS_EQUAL(result, NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND)) {
+			DEBUG(10,("winbindd_dual_pam_auth_kerberos setting domain to offline\n"));
+			domain->online = False;
+		}
+
+		/* there are quite some NT_STATUS errors where there is no
+		 * point in retrying with a samlogon, we explictly have to take
+		 * care not to increase the bad logon counter on the DC */
+
+		if (NT_STATUS_EQUAL(result, NT_STATUS_ACCOUNT_DISABLED) ||
+		    NT_STATUS_EQUAL(result, NT_STATUS_ACCOUNT_EXPIRED) ||
+		    NT_STATUS_EQUAL(result, NT_STATUS_ACCOUNT_LOCKED_OUT) ||
+		    NT_STATUS_EQUAL(result, NT_STATUS_INVALID_LOGON_HOURS) ||
+		    NT_STATUS_EQUAL(result, NT_STATUS_INVALID_WORKSTATION) ||
+		    NT_STATUS_EQUAL(result, NT_STATUS_LOGON_FAILURE) ||
+		    NT_STATUS_EQUAL(result, NT_STATUS_NO_SUCH_USER) ||
+		    NT_STATUS_EQUAL(result, NT_STATUS_PASSWORD_EXPIRED) ||
+		    NT_STATUS_EQUAL(result, NT_STATUS_PASSWORD_MUST_CHANGE) ||
+		    NT_STATUS_EQUAL(result, NT_STATUS_WRONG_PASSWORD)) {
+			goto process_result;
+		}
+		
+		if (state->request.flags & WBFLAG_PAM_FALLBACK_AFTER_KRB5) {
+			DEBUG(3,("falling back to samlogon\n"));
+			goto sam_logon;
+		} else {
+			goto cached_logon;
+		}
+	}
+
+sam_logon:
+	/* Check for Samlogon authentication */
+	if (domain->online) {
+		result = winbindd_dual_pam_auth_samlogon(domain, state, &info3);
+	
+		if (NT_STATUS_IS_OK(result)) {
+			DEBUG(10,("winbindd_dual_pam_auth_samlogon succeeded\n"));
+			goto process_result;
+		} else {
+			DEBUG(10,("winbindd_dual_pam_auth_samlogon failed: %s\n", nt_errstr(result)));
+			if (domain->online) {
+				/* We're still online - fail. */
+				goto done;
+			}
+			/* Else drop through and see if we can check offline.... */
+		}
+	}
+
+cached_logon:
+	/* Check for Cached logons */
+	if (!domain->online && (state->request.flags & WBFLAG_PAM_CACHED_LOGIN) && 
+	    lp_winbind_offline_logon()) {
+	
+		result = winbindd_dual_pam_auth_cached(domain, state, &info3);
+
+		if (NT_STATUS_IS_OK(result)) {
+			DEBUG(10,("winbindd_dual_pam_auth_cached succeeded\n"));
+			goto process_result;
+		} else {
+			DEBUG(10,("winbindd_dual_pam_auth_cached failed: %s\n", nt_errstr(result)));
+			goto done;
+		}
+	}
+
+process_result:
+
+	if (NT_STATUS_IS_OK(result)) {
+	
+		DOM_SID user_sid;
+
+		/* In all codepaths where result == NT_STATUS_OK info3 must have
+		   been initialized. */
+		if (!info3) {
+			result = NT_STATUS_INTERNAL_ERROR;
+			goto done;
+		}
+
+		netsamlogon_cache_store(name_user, info3);
+		wcache_invalidate_samlogon(find_domain_from_name(name_domain), info3);
+
+		/* save name_to_sid info as early as possible */
+		sid_compose(&user_sid, &info3->dom_sid.sid, info3->user_rid);
+		cache_name2sid(domain, name_domain, name_user, SID_NAME_USER, &user_sid);
+		
+		/* Check if the user is in the right group */
+
+		if (!NT_STATUS_IS_OK(result = check_info3_in_group(state->mem_ctx, info3,
+					state->request.data.auth.require_membership_of_sid))) {
+			DEBUG(3, ("User %s is not in the required group (%s), so plaintext authentication is rejected\n",
+				  state->request.data.auth.user, 
+				  state->request.data.auth.require_membership_of_sid));
+			goto done;
+		}
+
+		if (state->request.flags & WBFLAG_PAM_INFO3_NDR) {
+			result = append_info3_as_ndr(state->mem_ctx, state, info3);
+			if (!NT_STATUS_IS_OK(result)) {
+				DEBUG(10,("Failed to append INFO3 (NDR): %s\n", nt_errstr(result)));
+				goto done;
+			}
+		}
+
+		if (state->request.flags & WBFLAG_PAM_INFO3_TEXT) {
+			result = append_info3_as_txt(state->mem_ctx, state, info3);
+			if (!NT_STATUS_IS_OK(result)) {
+				DEBUG(10,("Failed to append INFO3 (TXT): %s\n", nt_errstr(result)));
+				goto done;
+			}
+
+		}
+
+		if ((state->request.flags & WBFLAG_PAM_CACHED_LOGIN)) {
+
+			/* Store in-memory creds for single-signon using ntlm_auth. */
+			result = winbindd_add_memory_creds(state->request.data.auth.user,
+							get_uid_from_state(state),
+							state->request.data.auth.pass);
+
+			if (!NT_STATUS_IS_OK(result)) {
+				DEBUG(10,("Failed to store memory creds: %s\n", nt_errstr(result)));
+				goto done;
+			}
+
+			if (lp_winbind_offline_logon()) {
+				result = winbindd_store_creds(domain,
+						      state->mem_ctx,
+						      state->request.data.auth.user,
+						      state->request.data.auth.pass,
+						      info3, NULL);
+				if (!NT_STATUS_IS_OK(result)) {
+
+					/* Release refcount. */
+					winbindd_delete_memory_creds(state->request.data.auth.user);
+
+					DEBUG(10,("Failed to store creds: %s\n", nt_errstr(result)));
+					goto done;
+				}
+			}
+		}
+
+		if (state->request.flags & WBFLAG_PAM_GET_PWD_POLICY) {
+			result = fillup_password_policy(domain, state);
+
+			if (!NT_STATUS_IS_OK(result)) {
+				DEBUG(10,("Failed to get password policies: %s\n", nt_errstr(result)));
+				goto done;
+			}
+		}
+
+		if (state->request.flags & WBFLAG_PAM_UNIX_NAME) {
+			/* We've been asked to return the unix username, per 
+			   'winbind use default domain' settings and the like */
+
+			fstring username_out;
+			const char *nt_username, *nt_domain;
+
+			if (!(nt_username = unistr2_tdup(state->mem_ctx, &info3->uni_user_name))) {
+				/* If the server didn't give us one, just use the one we sent them */
+				nt_username = name_user;
+			}
+
+			if (!(nt_domain = unistr2_tdup(state->mem_ctx, &info3->uni_logon_dom))) {
+				/* If the server didn't give us one, just use the one we sent them */
+				nt_domain = name_domain;
+			}
+
+			fill_domain_username(username_out, nt_domain, nt_username, True);
+
+			DEBUG(5, ("Setting unix username to [%s]\n", username_out));
+
+			SAFE_FREE(state->response.extra_data.data);
+			state->response.extra_data.data = SMB_STRDUP(username_out);
+			if (!state->response.extra_data.data) {
+				result = NT_STATUS_NO_MEMORY;
+				goto done;
+			}
+			state->response.length +=
+				strlen((const char *)state->response.extra_data.data)+1;
+		}
+	}
+ 
+
+done:
+	/* give us a more useful (more correct?) error code */
+	if ((NT_STATUS_EQUAL(result, NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND) ||
+	    (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL)))) {
+		result = NT_STATUS_NO_LOGON_SERVERS;
+	}
+	
+	state->response.data.auth.nt_status = NT_STATUS_V(result);
+	fstrcpy(state->response.data.auth.nt_status_string, nt_errstr(result));
+
+	/* we might have given a more useful error above */
+	if (!*state->response.data.auth.error_string) 
+		fstrcpy(state->response.data.auth.error_string, get_friendly_nt_error_msg(result));
+	state->response.data.auth.pam_error = nt_status_to_pam(result);
+
+	DEBUG(NT_STATUS_IS_OK(result) ? 5 : 2, ("Plain-text authentication for user %s returned %s (PAM: %d)\n", 
+	      state->request.data.auth.user, 
+	      state->response.data.auth.nt_status_string,
+	      state->response.data.auth.pam_error));	      
+
+	if ( NT_STATUS_IS_OK(result) && info3 &&
+	     (state->request.flags & WBFLAG_PAM_AFS_TOKEN) ) {
+
+		char *afsname = talloc_strdup(state->mem_ctx,
+					      lp_afs_username_map());
+		char *cell;
+
+		if (afsname == NULL) {
+			goto no_token;
+		}
+
+		afsname = talloc_string_sub(state->mem_ctx,
+					    lp_afs_username_map(),
+					    "%D", name_domain);
+		afsname = talloc_string_sub(state->mem_ctx, afsname,
+					    "%u", name_user);
+		afsname = talloc_string_sub(state->mem_ctx, afsname,
+					    "%U", name_user);
+
+		{
+			DOM_SID user_sid;
+			fstring sidstr;
+
+			sid_copy(&user_sid, &info3->dom_sid.sid);
+			sid_append_rid(&user_sid, info3->user_rid);
+			sid_to_string(sidstr, &user_sid);
+			afsname = talloc_string_sub(state->mem_ctx, afsname,
+						    "%s", sidstr);
+		}
+
+		if (afsname == NULL) {
+			goto no_token;
+		}
+
+		strlower_m(afsname);
+
+		DEBUG(10, ("Generating token for user %s\n", afsname));
+
+		cell = strchr(afsname, '@');
+
+		if (cell == NULL) {
+			goto no_token;
+		}
+
+		*cell = '\0';
+		cell += 1;
+
+		/* Append an AFS token string */
+		SAFE_FREE(state->response.extra_data.data);
+		state->response.extra_data.data =
+			afs_createtoken_str(afsname, cell);
+
+		if (state->response.extra_data.data != NULL) {
+			state->response.length +=
+				strlen((const char *)state->response.extra_data.data)+1;
+		}
+
+	no_token:
+		TALLOC_FREE(afsname);
+	}
+	
+	return NT_STATUS_IS_OK(result) ? WINBINDD_OK : WINBINDD_ERROR;
+}
+
+
+/**********************************************************************
+ Challenge Response Authentication Protocol 
+**********************************************************************/
+
+void winbindd_pam_auth_crap(struct winbindd_cli_state *state)
+{
+	struct winbindd_domain *domain = NULL;
+	const char *domain_name = NULL;
+	NTSTATUS result;
+
+	if (!state->privileged) {
+		char *error_string = NULL;
+		DEBUG(2, ("winbindd_pam_auth_crap: non-privileged access "
+			  "denied.  !\n"));
+		DEBUGADD(2, ("winbindd_pam_auth_crap: Ensure permissions "
+			     "on %s are set correctly.\n",
+			     get_winbind_priv_pipe_dir()));
+		/* send a better message than ACCESS_DENIED */
+		error_string = talloc_asprintf(state->mem_ctx,
+					       "winbind client not authorized "
+					       "to use winbindd_pam_auth_crap."
+					       " Ensure permissions on %s "
+					       "are set correctly.",
+					       get_winbind_priv_pipe_dir());
+		fstrcpy(state->response.data.auth.error_string, error_string);
+		result = NT_STATUS_ACCESS_DENIED;
+		goto done;
+	}
+
+	/* Ensure null termination */
+	state->request.data.auth_crap.user
+		[sizeof(state->request.data.auth_crap.user)-1]=0;
+	state->request.data.auth_crap.domain
+		[sizeof(state->request.data.auth_crap.domain)-1]=0;
+
+	DEBUG(3, ("[%5lu]: pam auth crap domain: [%s] user: %s\n",
+		  (unsigned long)state->pid,
+		  state->request.data.auth_crap.domain,
+		  state->request.data.auth_crap.user));
+
+	if (*state->request.data.auth_crap.domain != '\0') {
+		domain_name = state->request.data.auth_crap.domain;
+	} else if (lp_winbind_use_default_domain()) {
+		domain_name = lp_workgroup();
+	}
+
+	if (domain_name != NULL)
+		domain = find_auth_domain(state, domain_name);
+
+	if (domain != NULL) {
+		sendto_domain(state, domain);
+		return;
+	}
+
+	result = NT_STATUS_NO_SUCH_USER;
+
+ done:
+	set_auth_errors(&state->response, result);
+	DEBUG(5, ("CRAP authentication for %s\\%s returned %s (PAM: %d)\n",
+		  state->request.data.auth_crap.domain,
+		  state->request.data.auth_crap.user, 
+		  state->response.data.auth.nt_status_string,
+		  state->response.data.auth.pam_error));
+	request_error(state);
+	return;
+}
+
+
+enum winbindd_result winbindd_dual_pam_auth_crap(struct winbindd_domain *domain,
+						 struct winbindd_cli_state *state) 
+{
+	NTSTATUS result;
+        NET_USER_INFO_3 info3;
+	struct rpc_pipe_client *netlogon_pipe;
+	const char *name_user = NULL;
+	const char *name_domain = NULL;
+	const char *workstation;
+	struct winbindd_domain *contact_domain;
+	int attempts = 0;
+	BOOL retry;
+
+	DATA_BLOB lm_resp, nt_resp;
+
+	/* This is child-only, so no check for privileged access is needed
+	   anymore */
+
+	/* Ensure null termination */
+	state->request.data.auth_crap.user[sizeof(state->request.data.auth_crap.user)-1]=0;
+	state->request.data.auth_crap.domain[sizeof(state->request.data.auth_crap.domain)-1]=0;
+
+	name_user = state->request.data.auth_crap.user;
+
+	if (*state->request.data.auth_crap.domain) {
+		name_domain = state->request.data.auth_crap.domain;
+	} else if (lp_winbind_use_default_domain()) {
+		name_domain = lp_workgroup();
+	} else {
+		DEBUG(5,("no domain specified with username (%s) - failing auth\n", 
+			 name_user));
+		result = NT_STATUS_NO_SUCH_USER;
+		goto done;
+	}
+
+	DEBUG(3, ("[%5lu]: pam auth crap domain: %s user: %s\n", (unsigned long)state->pid,
+		  name_domain, name_user));
+	   
+	if (*state->request.data.auth_crap.workstation) {
+		workstation = state->request.data.auth_crap.workstation;
+	} else {
+		workstation = global_myname();
+	}
+
+	if (state->request.data.auth_crap.lm_resp_len > sizeof(state->request.data.auth_crap.lm_resp)
+		|| state->request.data.auth_crap.nt_resp_len > sizeof(state->request.data.auth_crap.nt_resp)) {
+		DEBUG(0, ("winbindd_pam_auth_crap: invalid password length %u/%u\n", 
+			  state->request.data.auth_crap.lm_resp_len, 
+			  state->request.data.auth_crap.nt_resp_len));
+		result = NT_STATUS_INVALID_PARAMETER;
+		goto done;
+	}
+
+	lm_resp = data_blob_talloc(state->mem_ctx, state->request.data.auth_crap.lm_resp,
+					state->request.data.auth_crap.lm_resp_len);
+	nt_resp = data_blob_talloc(state->mem_ctx, state->request.data.auth_crap.nt_resp,
+					state->request.data.auth_crap.nt_resp_len);
+
+	/* what domain should we contact? */
+	
+	if ( IS_DC ) {
+		if (!(contact_domain = find_domain_from_name(name_domain))) {
+			DEBUG(3, ("Authentication for domain for [%s] -> [%s]\\[%s] failed as %s is not a trusted domain\n", 
+				  state->request.data.auth_crap.user, name_domain, name_user, name_domain)); 
+			result = NT_STATUS_NO_SUCH_USER;
+			goto done;
+		}
+	} else {
+		if (is_myname(name_domain)) {
+			DEBUG(3, ("Authentication for domain %s (local domain to this server) not supported at this stage\n", name_domain));
+			result =  NT_STATUS_NO_SUCH_USER;
+			goto done;
+		}
+		contact_domain = find_our_domain();
+	}
+
+	do {
+		ZERO_STRUCT(info3);
+		retry = False;
+
+		netlogon_pipe = NULL;
+		result = cm_connect_netlogon(contact_domain, &netlogon_pipe);
+
+		if (!NT_STATUS_IS_OK(result)) {
+			DEBUG(3, ("could not open handle to NETLOGON pipe (error: %s)\n",
+				  nt_errstr(result)));
+			goto done;
+		}
+
+		result = rpccli_netlogon_sam_network_logon(netlogon_pipe,
+							   state->mem_ctx,
+							   state->request.data.auth_crap.logon_parameters,
+							   contact_domain->dcname,
+							   name_user,
+							   name_domain, 
+									/* Bug #3248 - found by Stefan Burkei. */
+							   workstation, /* We carefully set this above so use it... */
+							   state->request.data.auth_crap.chal,
+							   lm_resp,
+							   nt_resp,
+							   &info3);
+
+		attempts += 1;
+
+		/* We have to try a second time as cm_connect_netlogon
+		   might not yet have noticed that the DC has killed
+		   our connection. */
+
+		if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL)) {
+			retry = True;
+			continue;
+		}
+
+		/* if we get access denied, a possible cause was that we had and open
+		   connection to the DC, but someone changed our machine account password
+		   out from underneath us using 'net rpc changetrustpw' */
+		   
+		if ( NT_STATUS_EQUAL(result, NT_STATUS_ACCESS_DENIED) ) {
+			DEBUG(3,("winbindd_pam_auth: sam_logon returned "
+				 "ACCESS_DENIED.  Maybe the trust account "
+				"password was changed and we didn't know it. "
+				 "Killing connections to domain %s\n",
+				name_domain));
+			invalidate_cm_connection(&contact_domain->conn);
+			retry = True;
+		} 
+
+	} while ( (attempts < 2) && retry );
+
+	if (NT_STATUS_IS_OK(result)) {
+
+		netsamlogon_cache_store(name_user, &info3);
+		wcache_invalidate_samlogon(find_domain_from_name(name_domain), &info3);
+
+		/* Check if the user is in the right group */
+
+		if (!NT_STATUS_IS_OK(result = check_info3_in_group(state->mem_ctx, &info3,
+							state->request.data.auth_crap.require_membership_of_sid))) {
+			DEBUG(3, ("User %s is not in the required group (%s), so plaintext authentication is rejected\n",
+				  state->request.data.auth_crap.user, 
+				  state->request.data.auth_crap.require_membership_of_sid));
+			goto done;
+		}
+
+		if (state->request.flags & WBFLAG_PAM_INFO3_NDR) {
+			result = append_info3_as_ndr(state->mem_ctx, state, &info3);
+		} else if (state->request.flags & WBFLAG_PAM_UNIX_NAME) {
+			/* ntlm_auth should return the unix username, per 
+			   'winbind use default domain' settings and the like */
+
+			fstring username_out;
+			const char *nt_username, *nt_domain;
+			if (!(nt_username = unistr2_tdup(state->mem_ctx, &(info3.uni_user_name)))) {
+				/* If the server didn't give us one, just use the one we sent them */
+				nt_username = name_user;
+			}
+
+			if (!(nt_domain = unistr2_tdup(state->mem_ctx, &(info3.uni_logon_dom)))) {
+				/* If the server didn't give us one, just use the one we sent them */
+				nt_domain = name_domain;
+			}
+
+			fill_domain_username(username_out, nt_domain, nt_username, True);
+
+			DEBUG(5, ("Setting unix username to [%s]\n", username_out));
+
+			SAFE_FREE(state->response.extra_data.data);
+			state->response.extra_data.data = SMB_STRDUP(username_out);
+			if (!state->response.extra_data.data) {
+				result = NT_STATUS_NO_MEMORY;
+				goto done;
+			}
+			state->response.length +=
+				strlen((const char *)state->response.extra_data.data)+1;
+		}
+		
+		if (state->request.flags & WBFLAG_PAM_USER_SESSION_KEY) {
+			memcpy(state->response.data.auth.user_session_key, info3.user_sess_key,
+					sizeof(state->response.data.auth.user_session_key) /* 16 */);
+		}
+		if (state->request.flags & WBFLAG_PAM_LMKEY) {
+			memcpy(state->response.data.auth.first_8_lm_hash, info3.lm_sess_key,
+					sizeof(state->response.data.auth.first_8_lm_hash) /* 8 */);
+		}
+	}
+
+done:
+
+	/* give us a more useful (more correct?) error code */
+	if ((NT_STATUS_EQUAL(result, NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND) ||
+	    (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL)))) {
+		result = NT_STATUS_NO_LOGON_SERVERS;
+	}
+
+	if (state->request.flags & WBFLAG_PAM_NT_STATUS_SQUASH) {
+		result = nt_status_squash(result);
+	}
+
+	state->response.data.auth.nt_status = NT_STATUS_V(result);
+	fstrcpy(state->response.data.auth.nt_status_string, nt_errstr(result));
+
+	/* we might have given a more useful error above */
+	if (!*state->response.data.auth.error_string) {
+		fstrcpy(state->response.data.auth.error_string, get_friendly_nt_error_msg(result));
+	}
+	state->response.data.auth.pam_error = nt_status_to_pam(result);
+
+	DEBUG(NT_STATUS_IS_OK(result) ? 5 : 2, 
+	      ("NTLM CRAP authentication for user [%s]\\[%s] returned %s (PAM: %d)\n", 
+	       name_domain,
+	       name_user,
+	       state->response.data.auth.nt_status_string,
+	       state->response.data.auth.pam_error));	      
+
+	return NT_STATUS_IS_OK(result) ? WINBINDD_OK : WINBINDD_ERROR;
+}
+
+/* Change a user password */
+
+void winbindd_pam_chauthtok(struct winbindd_cli_state *state)
+{
+	fstring domain, user;
+	struct winbindd_domain *contact_domain;
+
+	DEBUG(3, ("[%5lu]: pam chauthtok %s\n", (unsigned long)state->pid,
+		state->request.data.chauthtok.user));
+
+	/* Setup crap */
+
+	if (!canonicalize_username(state->request.data.chauthtok.user, domain, user)) {
+		set_auth_errors(&state->response, NT_STATUS_NO_SUCH_USER);
+		DEBUG(5, ("winbindd_pam_chauthtok: canonicalize_username %s failed with %s"
+			  "(PAM: %d)\n",
+			  state->request.data.auth.user, 
+			  state->response.data.auth.nt_status_string,
+			  state->response.data.auth.pam_error));
+		request_error(state);
+		return;
+	}
+
+	contact_domain = find_domain_from_name(domain);
+	if (!contact_domain) {
+		set_auth_errors(&state->response, NT_STATUS_NO_SUCH_USER);
+		DEBUG(3, ("Cannot change password for [%s] -> [%s]\\[%s] as %s is not a trusted domain\n", 
+			  state->request.data.chauthtok.user, domain, user, domain)); 
+		request_error(state);
+		return;
+	}
+
+	sendto_domain(state, contact_domain);
+}
+
+enum winbindd_result winbindd_dual_pam_chauthtok(struct winbindd_domain *contact_domain,
+						 struct winbindd_cli_state *state)
+{
+	char *oldpass;
+	char *newpass = NULL;
+	POLICY_HND dom_pol;
+	struct rpc_pipe_client *cli;
+	BOOL got_info = False;
+	SAM_UNK_INFO_1 info;
+	SAMR_CHANGE_REJECT reject;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+	fstring domain, user;
+
+	DEBUG(3, ("[%5lu]: dual pam chauthtok %s\n", (unsigned long)state->pid,
+		  state->request.data.auth.user));
+
+	if (!parse_domain_user(state->request.data.chauthtok.user, domain, user)) {
+		goto done;
+	}
+
+	/* Change password */
+
+	oldpass = state->request.data.chauthtok.oldpass;
+	newpass = state->request.data.chauthtok.newpass;
+
+	/* Initialize reject reason */
+	state->response.data.auth.reject_reason = Undefined;
+
+	/* Get sam handle */
+
+	result = cm_connect_sam(contact_domain, state->mem_ctx, &cli,
+				&dom_pol);
+	if (!NT_STATUS_IS_OK(result)) {
+		DEBUG(1, ("could not get SAM handle on DC for %s\n", domain));
+		goto done;
+	}
+
+	result = rpccli_samr_chgpasswd3(cli, state->mem_ctx, user, newpass, oldpass, &info, &reject);
+
+ 	/* Windows 2003 returns NT_STATUS_PASSWORD_RESTRICTION */
+
+	if (NT_STATUS_EQUAL(result, NT_STATUS_PASSWORD_RESTRICTION) ) {
+		state->response.data.auth.policy.min_length_password = 
+			info.min_length_password;
+		state->response.data.auth.policy.password_history = 
+			info.password_history;
+		state->response.data.auth.policy.password_properties = 
+			info.password_properties;
+		state->response.data.auth.policy.expire = 
+			nt_time_to_unix_abs(&info.expire);
+		state->response.data.auth.policy.min_passwordage = 
+			nt_time_to_unix_abs(&info.min_passwordage);
+
+		state->response.data.auth.reject_reason = 
+			reject.reject_reason;
+
+		got_info = True;
+	}
+
+	/* only fallback when the chgpasswd3 call is not supported */
+	if ((NT_STATUS_EQUAL(result, NT_STATUS(DCERPC_FAULT_OP_RNG_ERROR))) ||
+		   (NT_STATUS_EQUAL(result, NT_STATUS_NOT_SUPPORTED)) ||
+		   (NT_STATUS_EQUAL(result, NT_STATUS_NOT_IMPLEMENTED))) {
+
+		DEBUG(10,("Password change with chgpasswd3 failed with: %s, retrying chgpasswd_user\n", 
+			nt_errstr(result)));
+		
+		result = rpccli_samr_chgpasswd_user(cli, state->mem_ctx, user, newpass, oldpass);
+
+		/* Windows 2000 returns NT_STATUS_ACCOUNT_RESTRICTION.
+		   Map to the same status code as Windows 2003. */
+
+		if ( NT_STATUS_EQUAL(NT_STATUS_ACCOUNT_RESTRICTION, result ) ) {
+			result = NT_STATUS_PASSWORD_RESTRICTION;			
+		}
+	}
+
+done: 
+
+	if (NT_STATUS_IS_OK(result) && (state->request.flags & WBFLAG_PAM_CACHED_LOGIN)) {
+		
+		/* Update the single sign-on memory creds. */
+		result = winbindd_replace_memory_creds(state->request.data.chauthtok.user,
+							newpass);
+
+		if (!NT_STATUS_IS_OK(result)) {
+			DEBUG(10,("Failed to replace memory creds: %s\n", nt_errstr(result)));
+			goto process_result;
+		}
+
+		if (lp_winbind_offline_logon()) {
+			result = winbindd_update_creds_by_name(contact_domain,
+							 state->mem_ctx, user,
+							 newpass);
+			if (!NT_STATUS_IS_OK(result)) {
+				DEBUG(10,("Failed to store creds: %s\n", nt_errstr(result)));
+				goto process_result;
+			}
+		}
+	}		
+
+	if (!NT_STATUS_IS_OK(result) && !got_info && contact_domain) {
+
+		NTSTATUS policy_ret;
+		
+		policy_ret = fillup_password_policy(contact_domain, state);
+
+		/* failure of this is non critical, it will just provide no
+		 * additional information to the client why the change has
+		 * failed - Guenther */
+
+		if (!NT_STATUS_IS_OK(policy_ret)) {
+			DEBUG(10,("Failed to get password policies: %s\n", nt_errstr(policy_ret)));
+			goto process_result;
+		}
+	}
+
+process_result:
+
+	state->response.data.auth.nt_status = NT_STATUS_V(result);
+	fstrcpy(state->response.data.auth.nt_status_string, nt_errstr(result));
+	fstrcpy(state->response.data.auth.error_string, get_friendly_nt_error_msg(result));
+	state->response.data.auth.pam_error = nt_status_to_pam(result);
+
+	DEBUG(NT_STATUS_IS_OK(result) ? 5 : 2, 
+	      ("Password change for user [%s]\\[%s] returned %s (PAM: %d)\n", 
+	       domain,
+	       user,
+	       state->response.data.auth.nt_status_string,
+	       state->response.data.auth.pam_error));	      
+
+	return NT_STATUS_IS_OK(result) ? WINBINDD_OK : WINBINDD_ERROR;
+}
+
+void winbindd_pam_logoff(struct winbindd_cli_state *state)
+{
+	struct winbindd_domain *domain;
+	fstring name_domain, user;
+	uid_t caller_uid = (uid_t)-1;
+	uid_t request_uid = state->request.data.logoff.uid;
+
+	DEBUG(3, ("[%5lu]: pam logoff %s\n", (unsigned long)state->pid,
+		state->request.data.logoff.user));
+
+	/* Ensure null termination */
+	state->request.data.logoff.user
+		[sizeof(state->request.data.logoff.user)-1]='\0';
+
+	state->request.data.logoff.krb5ccname
+		[sizeof(state->request.data.logoff.krb5ccname)-1]='\0';
+
+	if (request_uid == (gid_t)-1) {
+		goto failed;
+	}
+
+	if (!canonicalize_username(state->request.data.logoff.user, name_domain, user)) {
+		goto failed;
+	}
+
+	if ((domain = find_auth_domain(state, name_domain)) == NULL) {
+		goto failed;
+	}
+
+	if ((sys_getpeereid(state->sock, &caller_uid)) != 0) {
+		DEBUG(1,("winbindd_pam_logoff: failed to check peerid: %s\n", 
+			strerror(errno)));
+		goto failed;
+	}
+
+	switch (caller_uid) {
+		case -1:
+			goto failed;
+		case 0:
+			/* root must be able to logoff any user - gd */
+			state->request.data.logoff.uid = request_uid;
+			break;
+		default:
+			if (caller_uid != request_uid) {
+				DEBUG(1,("winbindd_pam_logoff: caller requested invalid uid\n"));
+				goto failed;
+			}
+			state->request.data.logoff.uid = caller_uid;
+			break;
+	}
+
+	sendto_domain(state, domain);
+	return;
+
+ failed:
+	set_auth_errors(&state->response, NT_STATUS_NO_SUCH_USER);
+	DEBUG(5, ("Pam Logoff for %s returned %s "
+		  "(PAM: %d)\n",
+		  state->request.data.logoff.user,
+		  state->response.data.auth.nt_status_string,
+		  state->response.data.auth.pam_error));
+	request_error(state);
+	return;
+}
+
+enum winbindd_result winbindd_dual_pam_logoff(struct winbindd_domain *domain,
+					      struct winbindd_cli_state *state) 
+{
+	NTSTATUS result = NT_STATUS_NOT_SUPPORTED;
+
+	DEBUG(3, ("[%5lu]: pam dual logoff %s\n", (unsigned long)state->pid,
+		state->request.data.logoff.user));
+
+	if (!(state->request.flags & WBFLAG_PAM_KRB5)) {
+		result = NT_STATUS_OK;
+		goto process_result;
+	}
+
+	if (state->request.data.logoff.krb5ccname[0] == '\0') {
+		result = NT_STATUS_OK;
+		goto process_result;
+	}
+
+#ifdef HAVE_KRB5
+	
+	if (state->request.data.logoff.uid < 0) {
+		DEBUG(0,("winbindd_pam_logoff: invalid uid\n"));
+		goto process_result;
+	}
+
+	/* what we need here is to find the corresponding krb5 ccache name *we*
+	 * created for a given username and destroy it */
+
+	if (!ccache_entry_exists(state->request.data.logoff.user)) {
+		result = NT_STATUS_OK;
+		DEBUG(10,("winbindd_pam_logoff: no entry found.\n"));
+		goto process_result;
+	}
+
+	if (!ccache_entry_identical(state->request.data.logoff.user, 
+					state->request.data.logoff.uid,
+					state->request.data.logoff.krb5ccname)) {
+		DEBUG(0,("winbindd_pam_logoff: cached entry differs.\n"));
+		goto process_result;
+	}
+
+	result = remove_ccache(state->request.data.logoff.user);
+	if (!NT_STATUS_IS_OK(result)) {
+		DEBUG(0,("winbindd_pam_logoff: failed to remove ccache: %s\n",
+			nt_errstr(result)));
+		goto process_result;
+	}
+
+#else
+	result = NT_STATUS_NOT_SUPPORTED;
+#endif
+
+process_result:
+
+	winbindd_delete_memory_creds(state->request.data.logoff.user);
+
+	state->response.data.auth.nt_status = NT_STATUS_V(result);
+	fstrcpy(state->response.data.auth.nt_status_string, nt_errstr(result));
+	fstrcpy(state->response.data.auth.error_string, get_friendly_nt_error_msg(result));
+	state->response.data.auth.pam_error = nt_status_to_pam(result);
+
+	return NT_STATUS_IS_OK(result) ? WINBINDD_OK : WINBINDD_ERROR;
+}
+
+/* Change user password with auth crap*/
+
+void winbindd_pam_chng_pswd_auth_crap(struct winbindd_cli_state *state)
+{
+	struct winbindd_domain *domain = NULL;
+	const char *domain_name = NULL;
+
+	/* Ensure null termination */
+	state->request.data.chng_pswd_auth_crap.user[
+		sizeof(state->request.data.chng_pswd_auth_crap.user)-1]=0;
+	state->request.data.chng_pswd_auth_crap.domain[
+		sizeof(state->request.data.chng_pswd_auth_crap.domain)-1]=0;
+	
+	DEBUG(3, ("[%5lu]: pam change pswd auth crap domain: %s user: %s\n",
+		  (unsigned long)state->pid,
+		  state->request.data.chng_pswd_auth_crap.domain,
+		  state->request.data.chng_pswd_auth_crap.user));
+	
+	if (*state->request.data.chng_pswd_auth_crap.domain != '\0') {
+		domain_name = state->request.data.chng_pswd_auth_crap.domain;
+	} else if (lp_winbind_use_default_domain()) {
+		domain_name = lp_workgroup();
+	}
+
+	if (domain_name != NULL)
+		domain = find_domain_from_name(domain_name);
+
+	if (domain != NULL) {
+		DEBUG(7, ("[%5lu]: pam auth crap changing pswd in domain: "
+			  "%s\n", (unsigned long)state->pid,domain->name));
+		sendto_domain(state, domain);
+		return;
+	}
+
+	set_auth_errors(&state->response, NT_STATUS_NO_SUCH_USER);
+	DEBUG(5, ("CRAP change password  for %s\\%s returned %s (PAM: %d)\n",
+		  state->request.data.chng_pswd_auth_crap.domain,
+		  state->request.data.chng_pswd_auth_crap.user, 
+		  state->response.data.auth.nt_status_string,
+		  state->response.data.auth.pam_error));
+	request_error(state);
+	return;
+}
+
+enum winbindd_result winbindd_dual_pam_chng_pswd_auth_crap(struct winbindd_domain *domainSt, struct winbindd_cli_state *state)
+{
+	NTSTATUS result;
+	DATA_BLOB new_nt_password;
+	DATA_BLOB old_nt_hash_enc;
+	DATA_BLOB new_lm_password;
+	DATA_BLOB old_lm_hash_enc;
+	fstring  domain,user;
+	POLICY_HND dom_pol;
+	struct winbindd_domain *contact_domain = domainSt;
+	struct rpc_pipe_client *cli;
+
+	/* Ensure null termination */
+	state->request.data.chng_pswd_auth_crap.user[
+		sizeof(state->request.data.chng_pswd_auth_crap.user)-1]=0;
+	state->request.data.chng_pswd_auth_crap.domain[
+		sizeof(state->request.data.chng_pswd_auth_crap.domain)-1]=0;
+	*domain = 0;
+	*user = 0;
+	
+	DEBUG(3, ("[%5lu]: pam change pswd auth crap domain: %s user: %s\n",
+		  (unsigned long)state->pid,
+		  state->request.data.chng_pswd_auth_crap.domain,
+		  state->request.data.chng_pswd_auth_crap.user));
+
+	if (lp_winbind_offline_logon()) {
+		DEBUG(0,("Refusing password change as winbind offline logons are enabled. "));
+		DEBUGADD(0,("Changing passwords here would risk inconsistent logons\n"));
+		result = NT_STATUS_ACCESS_DENIED;
+		goto done;
+	}
+
+	if (*state->request.data.chng_pswd_auth_crap.domain) {
+		fstrcpy(domain,state->request.data.chng_pswd_auth_crap.domain);
+	} else {
+		parse_domain_user(state->request.data.chng_pswd_auth_crap.user,
+				  domain, user);
+
+		if(!*domain) {
+			DEBUG(3,("no domain specified with username (%s) - "
+				 "failing auth\n",
+				 state->request.data.chng_pswd_auth_crap.user));
+			result = NT_STATUS_NO_SUCH_USER;
+			goto done;
+		}
+	}
+
+	if (!*domain && lp_winbind_use_default_domain()) {
+		fstrcpy(domain,(char *)lp_workgroup());
+	}
+
+	if(!*user) {
+		fstrcpy(user, state->request.data.chng_pswd_auth_crap.user);
+	}
+
+	DEBUG(3, ("[%5lu]: pam auth crap domain: %s user: %s\n",
+		  (unsigned long)state->pid, domain, user));
+	
+	/* Change password */
+	new_nt_password = data_blob_talloc(
+		state->mem_ctx,
+		state->request.data.chng_pswd_auth_crap.new_nt_pswd,
+		state->request.data.chng_pswd_auth_crap.new_nt_pswd_len);
+
+	old_nt_hash_enc = data_blob_talloc(
+		state->mem_ctx,
+		state->request.data.chng_pswd_auth_crap.old_nt_hash_enc,
+		state->request.data.chng_pswd_auth_crap.old_nt_hash_enc_len);
+
+	if(state->request.data.chng_pswd_auth_crap.new_lm_pswd_len > 0)	{
+		new_lm_password = data_blob_talloc(
+			state->mem_ctx,
+			state->request.data.chng_pswd_auth_crap.new_lm_pswd,
+			state->request.data.chng_pswd_auth_crap.new_lm_pswd_len);
+
+		old_lm_hash_enc = data_blob_talloc(
+			state->mem_ctx,
+			state->request.data.chng_pswd_auth_crap.old_lm_hash_enc,
+			state->request.data.chng_pswd_auth_crap.old_lm_hash_enc_len);
+	} else {
+		new_lm_password.length = 0;
+		old_lm_hash_enc.length = 0;
+	}
+
+	/* Get sam handle */
+
+	result = cm_connect_sam(contact_domain, state->mem_ctx, &cli, &dom_pol);
+	if (!NT_STATUS_IS_OK(result)) {
+		DEBUG(1, ("could not get SAM handle on DC for %s\n", domain));
+		goto done;
+	}
+
+	result = rpccli_samr_chng_pswd_auth_crap(
+		cli, state->mem_ctx, user, new_nt_password, old_nt_hash_enc,
+		new_lm_password, old_lm_hash_enc);
+
+ done:    
+	state->response.data.auth.nt_status = NT_STATUS_V(result);
+	fstrcpy(state->response.data.auth.nt_status_string, nt_errstr(result));
+	fstrcpy(state->response.data.auth.error_string,
+		get_friendly_nt_error_msg(result));
+	state->response.data.auth.pam_error = nt_status_to_pam(result);
+
+	DEBUG(NT_STATUS_IS_OK(result) ? 5 : 2, 
+	      ("Password change for user [%s]\\[%s] returned %s (PAM: %d)\n", 
+	       domain, user,
+	       state->response.data.auth.nt_status_string,
+	       state->response.data.auth.pam_error));	      
+
+	return NT_STATUS_IS_OK(result) ? WINBINDD_OK : WINBINDD_ERROR;
+}

Copied: branches/samba/upstream/source/nsswitch/winbindd_passdb.c (from rev 1928, branches/samba/upstream/source/nsswitch/winbindd_passdb.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/winbindd_passdb.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/winbindd_passdb.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,452 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   Winbind rpc backend functions
+
+   Copyright (C) Tim Potter 2000-2001,2003
+   Copyright (C) Simo Sorce 2003
+   Copyright (C) Volker Lendecke 2004
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "winbindd.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_WINBIND
+
+/* Query display info for a domain.  This returns enough information plus a
+   bit extra to give an overview of domain users for the User Manager
+   application. */
+static NTSTATUS query_user_list(struct winbindd_domain *domain,
+			       TALLOC_CTX *mem_ctx,
+			       uint32 *num_entries, 
+			       WINBIND_USERINFO **info)
+{
+	/* We don't have users */
+	*num_entries = 0;
+	*info = NULL;
+	return NT_STATUS_OK;
+}
+
+/* list all domain groups */
+static NTSTATUS enum_dom_groups(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				uint32 *num_entries, 
+				struct acct_info **info)
+{
+	/* We don't have domain groups */
+	*num_entries = 0;
+	*info = NULL;
+	return NT_STATUS_OK;
+}
+
+/* List all domain groups */
+
+static NTSTATUS enum_local_groups(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				uint32 *num_entries, 
+				struct acct_info **info)
+{
+	struct pdb_search *search;
+	struct samr_displayentry *aliases;
+	int i;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	search = pdb_search_aliases(&domain->sid);
+	if (search == NULL) goto done;
+
+	*num_entries = pdb_search_entries(search, 0, 0xffffffff, &aliases);
+	if (*num_entries == 0) goto done;
+
+	*info = TALLOC_ARRAY(mem_ctx, struct acct_info, *num_entries);
+	if (*info == NULL) {
+		result = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	for (i=0; i<*num_entries; i++) {
+		fstrcpy((*info)[i].acct_name, aliases[i].account_name);
+		fstrcpy((*info)[i].acct_desc, aliases[i].description);
+		(*info)[i].rid = aliases[i].rid;
+	}
+
+	result = NT_STATUS_OK;
+ done:
+	pdb_search_destroy(search);
+	return result;
+}
+
+/* convert a single name to a sid in a domain */
+static NTSTATUS name_to_sid(struct winbindd_domain *domain,
+			    TALLOC_CTX *mem_ctx,
+			    const char *domain_name,
+			    const char *name,
+			    DOM_SID *sid,
+			    enum lsa_SidType *type)
+{
+	DEBUG(10, ("Finding name %s\n", name));
+
+	if ( !lookup_name( mem_ctx, name, LOOKUP_NAME_ALL, 
+		NULL, NULL, sid, type ) )
+	{
+		return NT_STATUS_NONE_MAPPED;
+	}
+
+	return NT_STATUS_OK;
+}
+
+/*
+  convert a domain SID to a user or group name
+*/
+static NTSTATUS sid_to_name(struct winbindd_domain *domain,
+			    TALLOC_CTX *mem_ctx,
+			    const DOM_SID *sid,
+			    char **domain_name,
+			    char **name,
+			    enum lsa_SidType *type)
+{
+	const char *dom, *nam;
+
+	DEBUG(10, ("Converting SID %s\n", sid_string_static(sid)));
+
+	/* Paranoia check */
+	if (!sid_check_is_in_builtin(sid) &&
+	    !sid_check_is_in_our_domain(sid)) {
+		DEBUG(0, ("Possible deadlock: Trying to lookup SID %s with "
+			  "passdb backend\n", sid_string_static(sid)));
+		return NT_STATUS_NONE_MAPPED;
+	}
+
+	if (!lookup_sid(mem_ctx, sid, &dom, &nam, type)) {
+		return NT_STATUS_NONE_MAPPED;
+	}
+
+	*domain_name = talloc_strdup(mem_ctx, dom);
+	*name = talloc_strdup(mem_ctx, nam);
+
+	return NT_STATUS_OK;
+}
+
+static NTSTATUS rids_to_names(struct winbindd_domain *domain,
+			      TALLOC_CTX *mem_ctx,
+			      const DOM_SID *sid,
+			      uint32 *rids,
+			      size_t num_rids,
+			      char **domain_name,
+			      char ***names,
+			      enum lsa_SidType **types)
+{
+	return NT_STATUS_UNSUCCESSFUL;
+}
+
+/* Lookup user information from a rid or username. */
+static NTSTATUS query_user(struct winbindd_domain *domain, 
+			   TALLOC_CTX *mem_ctx, 
+			   const DOM_SID *user_sid,
+			   WINBIND_USERINFO *user_info)
+{
+	return NT_STATUS_NO_SUCH_USER;
+}
+
+/* Lookup groups a user is a member of.  I wish Unix had a call like this! */
+static NTSTATUS lookup_usergroups(struct winbindd_domain *domain,
+				  TALLOC_CTX *mem_ctx,
+				  const DOM_SID *user_sid,
+				  uint32 *num_groups, DOM_SID **user_gids)
+{
+	NTSTATUS result;
+	DOM_SID *groups = NULL;
+	gid_t *gids = NULL;
+	size_t ngroups = 0;
+	struct samu *user;
+
+	if ( (user = samu_new(mem_ctx)) == NULL ) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	if ( !pdb_getsampwsid( user, user_sid ) ) {
+		return NT_STATUS_NO_SUCH_USER;
+	}
+
+	result = pdb_enum_group_memberships( mem_ctx, user, &groups, &gids, &ngroups );
+
+	TALLOC_FREE( user );
+
+	*num_groups = (uint32)ngroups;
+	*user_gids = groups;
+
+	return result;
+}
+
+static NTSTATUS lookup_useraliases(struct winbindd_domain *domain,
+				   TALLOC_CTX *mem_ctx,
+				   uint32 num_sids, const DOM_SID *sids,
+				   uint32 *p_num_aliases, uint32 **rids)
+{
+	NTSTATUS result;
+	size_t num_aliases = 0;
+
+	result = pdb_enum_alias_memberships(mem_ctx, &domain->sid,
+					    sids, num_sids, rids, &num_aliases);
+
+	*p_num_aliases = num_aliases;
+	return result;
+}
+
+/* Lookup group membership given a rid.   */
+static NTSTATUS lookup_groupmem(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				const DOM_SID *group_sid, uint32 *num_names, 
+				DOM_SID **sid_mem, char ***names, 
+				uint32 **name_types)
+{
+	size_t i, num_members, num_mapped;
+	uint32 *rids;
+	NTSTATUS result;
+	const DOM_SID **sids;
+	struct lsa_dom_info *lsa_domains;
+	struct lsa_name_info *lsa_names;
+	TALLOC_CTX *tmp_ctx;
+
+	if (!sid_check_is_in_our_domain(group_sid)) {
+		/* There's no groups, only aliases in BUILTIN */
+		return NT_STATUS_NO_SUCH_GROUP;
+	}
+
+	if (!(tmp_ctx = talloc_init("lookup_groupmem"))) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	result = pdb_enum_group_members(tmp_ctx, group_sid, &rids,
+					&num_members);
+	if (!NT_STATUS_IS_OK(result)) {
+		TALLOC_FREE(tmp_ctx);
+		return result;
+	}
+
+	if (num_members == 0) {
+		*num_names = 0;
+		*sid_mem = NULL;
+		*names = NULL;
+		*name_types = NULL;
+		TALLOC_FREE(tmp_ctx);
+		return NT_STATUS_OK;
+	}
+
+	*sid_mem = TALLOC_ARRAY(mem_ctx, DOM_SID, num_members);
+	*names = TALLOC_ARRAY(mem_ctx, char *, num_members);
+	*name_types = TALLOC_ARRAY(mem_ctx, uint32, num_members);
+	sids = TALLOC_ARRAY(tmp_ctx, const DOM_SID *, num_members);
+
+	if (((*sid_mem) == NULL) || ((*names) == NULL) ||
+	    ((*name_types) == NULL) || (sids == NULL)) {
+		TALLOC_FREE(tmp_ctx);
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	/*
+	 * Prepare an array of sid pointers for the lookup_sids calling
+	 * convention.
+	 */
+
+	for (i=0; i<num_members; i++) {
+		DOM_SID *sid = &((*sid_mem)[i]);
+		if (!sid_compose(sid, &domain->sid, rids[i])) {
+			TALLOC_FREE(tmp_ctx);
+			return NT_STATUS_INTERNAL_ERROR;
+		}
+		sids[i] = sid;
+	}
+
+	result = lookup_sids(tmp_ctx, num_members, sids, 1,
+			     &lsa_domains, &lsa_names);
+	if (!NT_STATUS_IS_OK(result)) {
+		TALLOC_FREE(tmp_ctx);
+		return result;
+	}
+
+	num_mapped = 0;
+	for (i=0; i<num_members; i++) {
+		if (lsa_names[i].type != SID_NAME_USER) {
+			DEBUG(2, ("Got %s as group member -- ignoring\n",
+				  sid_type_lookup(lsa_names[i].type)));
+			continue;
+		}
+		if (!((*names)[i] = talloc_strdup((*names),
+						  lsa_names[i].name))) {
+			TALLOC_FREE(tmp_ctx);
+			return NT_STATUS_NO_MEMORY;
+		}
+
+		(*name_types)[i] = lsa_names[i].type;
+
+		num_mapped += 1;
+	}
+
+	*num_names = num_mapped;
+
+	TALLOC_FREE(tmp_ctx);
+	return NT_STATUS_OK;
+}
+
+/* find the sequence number for a domain */
+static NTSTATUS sequence_number(struct winbindd_domain *domain, uint32 *seq)
+{
+	BOOL result;
+	time_t seq_num;
+
+	result = pdb_get_seq_num(&seq_num);
+	if (!result) {
+		*seq = 1;
+	}
+
+	*seq = (int) seq_num;
+	/* *seq = 1; */
+	return NT_STATUS_OK;
+}
+
+static NTSTATUS lockout_policy(struct winbindd_domain *domain,
+			       TALLOC_CTX *mem_ctx,
+			       SAM_UNK_INFO_12 *policy)
+{
+	/* actually we have that */
+	return NT_STATUS_NOT_IMPLEMENTED;
+}
+
+static NTSTATUS password_policy(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				SAM_UNK_INFO_1 *policy)
+{
+	uint32 min_pass_len,pass_hist,password_properties;
+	time_t u_expire, u_min_age;
+	NTTIME nt_expire, nt_min_age;
+	uint32 account_policy_temp;
+
+	if ((policy = TALLOC_ZERO_P(mem_ctx, SAM_UNK_INFO_1)) == NULL) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	if (!pdb_get_account_policy(AP_MIN_PASSWORD_LEN, &account_policy_temp)) {
+		return NT_STATUS_ACCESS_DENIED;
+	}
+	min_pass_len = account_policy_temp;
+
+	if (!pdb_get_account_policy(AP_PASSWORD_HISTORY, &account_policy_temp)) {
+		return NT_STATUS_ACCESS_DENIED;
+	}
+	pass_hist = account_policy_temp;
+
+	if (!pdb_get_account_policy(AP_USER_MUST_LOGON_TO_CHG_PASS, &account_policy_temp)) {
+		return NT_STATUS_ACCESS_DENIED;
+	}
+	password_properties = account_policy_temp;
+	
+	if (!pdb_get_account_policy(AP_MAX_PASSWORD_AGE, &account_policy_temp)) {
+		return NT_STATUS_ACCESS_DENIED;
+	}
+	u_expire = account_policy_temp;
+
+	if (!pdb_get_account_policy(AP_MIN_PASSWORD_AGE, &account_policy_temp)) {
+		return NT_STATUS_ACCESS_DENIED;
+	}
+	u_min_age = account_policy_temp;
+
+	unix_to_nt_time_abs(&nt_expire, u_expire);
+	unix_to_nt_time_abs(&nt_min_age, u_min_age);
+
+	init_unk_info1(policy, (uint16)min_pass_len, (uint16)pass_hist, 
+	               password_properties, nt_expire, nt_min_age);
+
+	return NT_STATUS_OK;
+}
+
+/* get a list of trusted domains */
+static NTSTATUS trusted_domains(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				uint32 *num_domains,
+				char ***names,
+				char ***alt_names,
+				DOM_SID **dom_sids)
+{
+	NTSTATUS nt_status;
+	struct trustdom_info **domains;
+	int i;
+	TALLOC_CTX *tmp_ctx;
+
+	*num_domains = 0;
+	*names = NULL;
+	*alt_names = NULL;
+	*dom_sids = NULL;
+
+	if (!(tmp_ctx = talloc_init("trusted_domains"))) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	nt_status = secrets_trusted_domains(tmp_ctx, num_domains,
+					    &domains);
+	if (!NT_STATUS_IS_OK(nt_status)) {
+		TALLOC_FREE(tmp_ctx);
+		return nt_status;
+	}
+
+	if (*num_domains) {
+		*names = TALLOC_ARRAY(mem_ctx, char *, *num_domains);
+		*alt_names = TALLOC_ARRAY(mem_ctx, char *, *num_domains);
+		*dom_sids = TALLOC_ARRAY(mem_ctx, DOM_SID, *num_domains);
+
+		if ((*alt_names == NULL) || (*names == NULL) || (*dom_sids == NULL)) {
+			TALLOC_FREE(tmp_ctx);
+			return NT_STATUS_NO_MEMORY;
+		}
+	} else {
+		*names = NULL;
+		*alt_names = NULL;
+		*dom_sids = NULL;
+	}
+
+	for (i=0; i<*num_domains; i++) {
+		(*alt_names)[i] = NULL;
+		if (!((*names)[i] = talloc_strdup((*names),
+						  domains[i]->name))) {
+			TALLOC_FREE(tmp_ctx);
+			return NT_STATUS_NO_MEMORY;
+		}
+		sid_copy(&(*dom_sids)[i], &domains[i]->sid);
+	}
+
+	TALLOC_FREE(tmp_ctx);
+	return NT_STATUS_OK;
+}
+
+/* the rpc backend methods are exposed via this structure */
+struct winbindd_methods passdb_methods = {
+	False,
+	query_user_list,
+	enum_dom_groups,
+	enum_local_groups,
+	name_to_sid,
+	sid_to_name,
+	rids_to_names,
+	query_user,
+	lookup_usergroups,
+	lookup_useraliases,
+	lookup_groupmem,
+	sequence_number,
+	lockout_policy,
+	password_policy,
+	trusted_domains,
+};

Copied: branches/samba/upstream/source/nsswitch/winbindd_reconnect.c (from rev 1928, branches/samba/upstream/source/nsswitch/winbindd_reconnect.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/winbindd_reconnect.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/winbindd_reconnect.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,316 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   Wrapper around winbindd_rpc.c to centralize retry logic.
+
+   Copyright (C) Volker Lendecke 2005
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "winbindd.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_WINBIND
+
+extern struct winbindd_methods msrpc_methods;
+
+/* List all users */
+static NTSTATUS query_user_list(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				uint32 *num_entries, 
+				WINBIND_USERINFO **info)
+{
+	NTSTATUS result;
+
+	result = msrpc_methods.query_user_list(domain, mem_ctx,
+					       num_entries, info);
+
+	if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL))
+		result = msrpc_methods.query_user_list(domain, mem_ctx,
+						       num_entries, info);
+	return result;
+}
+
+/* list all domain groups */
+static NTSTATUS enum_dom_groups(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				uint32 *num_entries, 
+				struct acct_info **info)
+{
+	NTSTATUS result;
+
+	result = msrpc_methods.enum_dom_groups(domain, mem_ctx,
+					       num_entries, info);
+
+	if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL))
+		result = msrpc_methods.enum_dom_groups(domain, mem_ctx,
+						       num_entries, info);
+	return result;
+}
+
+/* List all domain groups */
+
+static NTSTATUS enum_local_groups(struct winbindd_domain *domain,
+				  TALLOC_CTX *mem_ctx,
+				  uint32 *num_entries, 
+				  struct acct_info **info)
+{
+	NTSTATUS result;
+
+	result = msrpc_methods.enum_local_groups(domain, mem_ctx,
+						 num_entries, info);
+
+	if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL))
+		result = msrpc_methods.enum_local_groups(domain, mem_ctx,
+							 num_entries, info);
+
+	return result;
+}
+
+/* convert a single name to a sid in a domain */
+static NTSTATUS name_to_sid(struct winbindd_domain *domain,
+			    TALLOC_CTX *mem_ctx,
+			    const char *domain_name,
+			    const char *name,
+			    DOM_SID *sid,
+			    enum lsa_SidType *type)
+{
+	NTSTATUS result;
+
+	result = msrpc_methods.name_to_sid(domain, mem_ctx,
+					   domain_name, name,
+					   sid, type);
+
+	if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL))
+		result = msrpc_methods.name_to_sid(domain, mem_ctx,
+						   domain_name, name,
+						   sid, type);
+
+	return result;
+}
+
+/*
+  convert a domain SID to a user or group name
+*/
+static NTSTATUS sid_to_name(struct winbindd_domain *domain,
+			    TALLOC_CTX *mem_ctx,
+			    const DOM_SID *sid,
+			    char **domain_name,
+			    char **name,
+			    enum lsa_SidType *type)
+{
+	NTSTATUS result;
+
+	result = msrpc_methods.sid_to_name(domain, mem_ctx, sid,
+					   domain_name, name, type);
+
+	if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL))
+		result = msrpc_methods.sid_to_name(domain, mem_ctx, sid,
+						   domain_name, name, type);
+
+	return result;
+}
+
+static NTSTATUS rids_to_names(struct winbindd_domain *domain,
+			      TALLOC_CTX *mem_ctx,
+			      const DOM_SID *sid,
+			      uint32 *rids,
+			      size_t num_rids,
+			      char **domain_name,
+			      char ***names,
+			      enum lsa_SidType **types)
+{
+	NTSTATUS result;
+
+	result = msrpc_methods.rids_to_names(domain, mem_ctx, sid,
+					     rids, num_rids,
+					     domain_name, names, types);
+	if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL)) {
+		result = msrpc_methods.rids_to_names(domain, mem_ctx, sid,
+						     rids, num_rids,
+						     domain_name, names,
+						     types);
+	}
+
+	return result;
+}
+
+/* Lookup user information from a rid or username. */
+static NTSTATUS query_user(struct winbindd_domain *domain, 
+			   TALLOC_CTX *mem_ctx, 
+			   const DOM_SID *user_sid,
+			   WINBIND_USERINFO *user_info)
+{
+	NTSTATUS result;
+
+	result = msrpc_methods.query_user(domain, mem_ctx, user_sid,
+					  user_info);
+
+	if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL))
+		result = msrpc_methods.query_user(domain, mem_ctx, user_sid,
+						  user_info);
+
+	return result;
+}
+
+/* Lookup groups a user is a member of.  I wish Unix had a call like this! */
+static NTSTATUS lookup_usergroups(struct winbindd_domain *domain,
+				  TALLOC_CTX *mem_ctx,
+				  const DOM_SID *user_sid,
+				  uint32 *num_groups, DOM_SID **user_gids)
+{
+	NTSTATUS result;
+
+	result = msrpc_methods.lookup_usergroups(domain, mem_ctx,
+						 user_sid, num_groups,
+						 user_gids);
+
+	if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL))
+		result = msrpc_methods.lookup_usergroups(domain, mem_ctx,
+							 user_sid, num_groups,
+							 user_gids);
+
+	return result;
+}
+
+static NTSTATUS lookup_useraliases(struct winbindd_domain *domain,
+				   TALLOC_CTX *mem_ctx,
+				   uint32 num_sids, const DOM_SID *sids,
+				   uint32 *num_aliases, uint32 **alias_rids)
+{
+	NTSTATUS result;
+
+	result = msrpc_methods.lookup_useraliases(domain, mem_ctx,
+						  num_sids, sids,
+						  num_aliases,
+						  alias_rids);
+
+	if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL))
+		result = msrpc_methods.lookup_useraliases(domain, mem_ctx,
+							  num_sids, sids,
+							  num_aliases,
+							  alias_rids);
+
+	return result;
+}
+
+/* Lookup group membership given a rid.   */
+static NTSTATUS lookup_groupmem(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				const DOM_SID *group_sid, uint32 *num_names, 
+				DOM_SID **sid_mem, char ***names, 
+				uint32 **name_types)
+{
+	NTSTATUS result;
+
+	result = msrpc_methods.lookup_groupmem(domain, mem_ctx,
+					       group_sid, num_names,
+					       sid_mem, names,
+					       name_types);
+
+	if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL))
+		result = msrpc_methods.lookup_groupmem(domain, mem_ctx,
+						       group_sid, num_names,
+						       sid_mem, names,
+						       name_types);
+
+	return result;
+}
+
+/* find the sequence number for a domain */
+static NTSTATUS sequence_number(struct winbindd_domain *domain, uint32 *seq)
+{
+	NTSTATUS result;
+
+	result = msrpc_methods.sequence_number(domain, seq);
+
+	if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL))
+		result = msrpc_methods.sequence_number(domain, seq);
+
+	return result;
+}
+
+/* find the lockout policy of a domain */
+static NTSTATUS lockout_policy(struct winbindd_domain *domain, 
+			       TALLOC_CTX *mem_ctx,
+			       SAM_UNK_INFO_12 *policy)
+{
+	NTSTATUS result;
+
+	result = msrpc_methods.lockout_policy(domain, mem_ctx, policy);
+
+	if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL))
+		result = msrpc_methods.lockout_policy(domain, mem_ctx, policy);
+
+	return result;
+}
+
+/* find the password policy of a domain */
+static NTSTATUS password_policy(struct winbindd_domain *domain, 
+				TALLOC_CTX *mem_ctx,
+				SAM_UNK_INFO_1 *policy)
+{
+ 	NTSTATUS result;
+ 
+	result = msrpc_methods.password_policy(domain, mem_ctx, policy);
+
+	if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL))
+		result = msrpc_methods.password_policy(domain, mem_ctx, policy);
+	
+	return result;
+}
+
+/* get a list of trusted domains */
+static NTSTATUS trusted_domains(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				uint32 *num_domains,
+				char ***names,
+				char ***alt_names,
+				DOM_SID **dom_sids)
+{
+	NTSTATUS result;
+
+	result = msrpc_methods.trusted_domains(domain, mem_ctx,
+					       num_domains, names,
+					       alt_names, dom_sids);
+
+	if (NT_STATUS_EQUAL(result, NT_STATUS_UNSUCCESSFUL))
+		result = msrpc_methods.trusted_domains(domain, mem_ctx,
+						       num_domains, names,
+						       alt_names, dom_sids);
+
+	return result;
+}
+
+/* the rpc backend methods are exposed via this structure */
+struct winbindd_methods reconnect_methods = {
+	False,
+	query_user_list,
+	enum_dom_groups,
+	enum_local_groups,
+	name_to_sid,
+	sid_to_name,
+	rids_to_names,
+	query_user,
+	lookup_usergroups,
+	lookup_useraliases,
+	lookup_groupmem,
+	sequence_number,
+	lockout_policy,
+	password_policy,
+	trusted_domains,
+};

Copied: branches/samba/upstream/source/nsswitch/winbindd_rpc.c (from rev 1928, branches/samba/upstream/source/nsswitch/winbindd_rpc.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/winbindd_rpc.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/winbindd_rpc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,1039 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   Winbind rpc backend functions
+
+   Copyright (C) Tim Potter 2000-2001,2003
+   Copyright (C) Andrew Tridgell 2001
+   Copyright (C) Volker Lendecke 2005
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "winbindd.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_WINBIND
+
+
+/* Query display info for a domain.  This returns enough information plus a
+   bit extra to give an overview of domain users for the User Manager
+   application. */
+static NTSTATUS query_user_list(struct winbindd_domain *domain,
+			       TALLOC_CTX *mem_ctx,
+			       uint32 *num_entries, 
+			       WINBIND_USERINFO **info)
+{
+	NTSTATUS result;
+	POLICY_HND dom_pol;
+	unsigned int i, start_idx;
+	uint32 loop_count;
+	struct rpc_pipe_client *cli;
+
+	DEBUG(3,("rpc: query_user_list\n"));
+
+	*num_entries = 0;
+	*info = NULL;
+
+	result = cm_connect_sam(domain, mem_ctx, &cli, &dom_pol);
+	if (!NT_STATUS_IS_OK(result))
+		return result;
+
+	i = start_idx = 0;
+	loop_count = 0;
+
+	do {
+		TALLOC_CTX *ctx2;
+		uint32 num_dom_users, j;
+		uint32 max_entries, max_size;
+		SAM_DISPINFO_CTR ctr;
+		SAM_DISPINFO_1 info1;
+
+		ZERO_STRUCT( ctr );
+		ZERO_STRUCT( info1 );
+		ctr.sam.info1 = &info1;
+	
+		if (!(ctx2 = talloc_init("winbindd enum_users")))
+			return NT_STATUS_NO_MEMORY;
+
+		/* this next bit is copied from net_user_list_internal() */
+
+		get_query_dispinfo_params(loop_count, &max_entries,
+					  &max_size);
+
+		result = rpccli_samr_query_dispinfo(cli, mem_ctx, &dom_pol,
+						    &start_idx, 1,
+						    &num_dom_users,
+						    max_entries, max_size,
+						    &ctr);
+
+		loop_count++;
+
+		*num_entries += num_dom_users;
+
+		*info = TALLOC_REALLOC_ARRAY(mem_ctx, *info, WINBIND_USERINFO,
+					     *num_entries);
+
+		if (!(*info)) {
+			talloc_destroy(ctx2);
+			return NT_STATUS_NO_MEMORY;
+		}
+
+		for (j = 0; j < num_dom_users; i++, j++) {
+			fstring username, fullname;
+			uint32 rid = ctr.sam.info1->sam[j].rid_user;
+			
+			unistr2_to_ascii( username, &(&ctr.sam.info1->str[j])->uni_acct_name, sizeof(username)-1);
+			unistr2_to_ascii( fullname, &(&ctr.sam.info1->str[j])->uni_full_name, sizeof(fullname)-1);
+			
+			(*info)[i].acct_name = talloc_strdup(mem_ctx, username );
+			(*info)[i].full_name = talloc_strdup(mem_ctx, fullname );
+			(*info)[i].homedir = NULL;
+			(*info)[i].shell = NULL;
+			sid_compose(&(*info)[i].user_sid, &domain->sid, rid);
+			
+			/* For the moment we set the primary group for
+			   every user to be the Domain Users group.
+			   There are serious problems with determining
+			   the actual primary group for large domains.
+			   This should really be made into a 'winbind
+			   force group' smb.conf parameter or
+			   something like that. */
+			   
+			sid_compose(&(*info)[i].group_sid, &domain->sid, 
+				    DOMAIN_GROUP_RID_USERS);
+		}
+
+		talloc_destroy(ctx2);
+
+	} while (NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES));
+
+	return result;
+}
+
+/* list all domain groups */
+static NTSTATUS enum_dom_groups(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				uint32 *num_entries, 
+				struct acct_info **info)
+{
+	POLICY_HND dom_pol;
+	NTSTATUS status;
+	uint32 start = 0;
+	struct rpc_pipe_client *cli;
+
+	*num_entries = 0;
+	*info = NULL;
+
+	DEBUG(3,("rpc: enum_dom_groups\n"));
+
+	status = cm_connect_sam(domain, mem_ctx, &cli, &dom_pol);
+	if (!NT_STATUS_IS_OK(status))
+		return status;
+
+	do {
+		struct acct_info *info2 = NULL;
+		uint32 count = 0;
+		TALLOC_CTX *mem_ctx2;
+
+		mem_ctx2 = talloc_init("enum_dom_groups[rpc]");
+
+		/* start is updated by this call. */
+		status = rpccli_samr_enum_dom_groups(cli, mem_ctx2, &dom_pol,
+						     &start,
+						     0xFFFF, /* buffer size? */
+						     &info2, &count);
+
+		if (!NT_STATUS_IS_OK(status) && 
+		    !NT_STATUS_EQUAL(status, STATUS_MORE_ENTRIES)) {
+			talloc_destroy(mem_ctx2);
+			break;
+		}
+
+		(*info) = TALLOC_REALLOC_ARRAY(mem_ctx, *info,
+					       struct acct_info,
+					       (*num_entries) + count);
+		if (! *info) {
+			talloc_destroy(mem_ctx2);
+			return NT_STATUS_NO_MEMORY;
+		}
+
+		memcpy(&(*info)[*num_entries], info2, count*sizeof(*info2));
+		(*num_entries) += count;
+		talloc_destroy(mem_ctx2);
+	} while (NT_STATUS_EQUAL(status, STATUS_MORE_ENTRIES));
+
+	return NT_STATUS_OK;
+}
+
+/* List all domain groups */
+
+static NTSTATUS enum_local_groups(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				uint32 *num_entries, 
+				struct acct_info **info)
+{
+	POLICY_HND dom_pol;
+	NTSTATUS result;
+	struct rpc_pipe_client *cli;
+
+	*num_entries = 0;
+	*info = NULL;
+
+	DEBUG(3,("rpc: enum_local_groups\n"));
+
+	result = cm_connect_sam(domain, mem_ctx, &cli, &dom_pol);
+	if (!NT_STATUS_IS_OK(result))
+		return result;
+
+	do {
+		struct acct_info *info2 = NULL;
+		uint32 count = 0, start = *num_entries;
+		TALLOC_CTX *mem_ctx2;
+
+		mem_ctx2 = talloc_init("enum_dom_local_groups[rpc]");
+
+		result = rpccli_samr_enum_als_groups( cli, mem_ctx2, &dom_pol,
+						      &start, 0xFFFF, &info2,
+						      &count);
+					  
+		if (!NT_STATUS_IS_OK(result) &&
+		    !NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES) ) 
+		{
+			talloc_destroy(mem_ctx2);
+			return result;
+		}
+
+		(*info) = TALLOC_REALLOC_ARRAY(mem_ctx, *info,
+					       struct acct_info,
+					       (*num_entries) + count);
+		if (! *info) {
+			talloc_destroy(mem_ctx2);
+			return NT_STATUS_NO_MEMORY;
+		}
+
+		memcpy(&(*info)[*num_entries], info2, count*sizeof(*info2));
+		(*num_entries) += count;
+		talloc_destroy(mem_ctx2);
+
+	} while (NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES));
+
+	return NT_STATUS_OK;
+}
+
+/* convert a single name to a sid in a domain */
+NTSTATUS msrpc_name_to_sid(struct winbindd_domain *domain,
+			    TALLOC_CTX *mem_ctx,
+			    const char *domain_name,
+			    const char *name,
+			    DOM_SID *sid,
+			    enum lsa_SidType *type)
+{
+	NTSTATUS result;
+	DOM_SID *sids = NULL;
+	enum lsa_SidType *types = NULL;
+	char *full_name = NULL;
+	struct rpc_pipe_client *cli;
+	POLICY_HND lsa_policy;
+
+        if(name == NULL || *name=='\0') {
+                DEBUG(3,("rpc: name_to_sid name=%s\n", domain_name));
+                full_name = talloc_asprintf(mem_ctx, "%s", domain_name);
+        } else {
+                DEBUG(3,("rpc: name_to_sid name=%s\\%s\n", domain_name, name));
+                full_name = talloc_asprintf(mem_ctx, "%s\\%s", domain_name, name);
+        }
+	if (!full_name) {
+		DEBUG(0, ("talloc_asprintf failed!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	ws_name_return( full_name, WB_REPLACE_CHAR );
+
+	DEBUG(3,("name_to_sid [rpc] %s for domain %s\n", full_name?full_name:"", domain_name ));
+
+	result = cm_connect_lsa(domain, mem_ctx, &cli, &lsa_policy);
+	if (!NT_STATUS_IS_OK(result))
+		return result;
+
+	result = rpccli_lsa_lookup_names(cli, mem_ctx, &lsa_policy, 1, 
+					 (const char**) &full_name, NULL, &sids, &types);
+        
+	if (!NT_STATUS_IS_OK(result))
+		return result;
+
+	/* Return rid and type if lookup successful */
+
+	sid_copy(sid, &sids[0]);
+	*type = types[0];
+
+	return NT_STATUS_OK;
+}
+
+/*
+  convert a domain SID to a user or group name
+*/
+NTSTATUS msrpc_sid_to_name(struct winbindd_domain *domain,
+			    TALLOC_CTX *mem_ctx,
+			    const DOM_SID *sid,
+			    char **domain_name,
+			    char **name,
+			    enum lsa_SidType *type)
+{
+	char **domains;
+	char **names;
+	enum lsa_SidType *types;
+	NTSTATUS result;
+	struct rpc_pipe_client *cli;
+	POLICY_HND lsa_policy;
+
+	DEBUG(3,("sid_to_name [rpc] %s for domain %s\n", sid_string_static(sid),
+			domain->name ));
+
+	result = cm_connect_lsa(domain, mem_ctx, &cli, &lsa_policy);
+	if (!NT_STATUS_IS_OK(result))
+		return result;
+
+	result = rpccli_lsa_lookup_sids(cli, mem_ctx, &lsa_policy,
+					1, sid, &domains, &names, &types);
+	if (!NT_STATUS_IS_OK(result))
+		return result;
+
+	*type = (enum lsa_SidType)types[0];
+	*domain_name = domains[0];
+	*name = names[0];
+
+	ws_name_replace( *name, WB_REPLACE_CHAR );	
+		
+	DEBUG(5,("Mapped sid to [%s]\\[%s]\n", domains[0], *name));
+	return NT_STATUS_OK;
+}
+
+NTSTATUS msrpc_rids_to_names(struct winbindd_domain *domain,
+			     TALLOC_CTX *mem_ctx,
+			     const DOM_SID *sid,
+			     uint32 *rids,
+			     size_t num_rids,
+			     char **domain_name,
+			     char ***names,
+			     enum lsa_SidType **types)
+{
+	char **domains;
+	NTSTATUS result;
+	struct rpc_pipe_client *cli;
+	POLICY_HND lsa_policy;
+	DOM_SID *sids;
+	size_t i;
+	char **ret_names;
+
+	DEBUG(3, ("rids_to_names [rpc] for domain %s\n", domain->name ));
+
+	if (num_rids) {
+		sids = TALLOC_ARRAY(mem_ctx, DOM_SID, num_rids);
+		if (sids == NULL) {
+			return NT_STATUS_NO_MEMORY;
+		}
+	} else {
+		sids = NULL;
+	}
+
+	for (i=0; i<num_rids; i++) {
+		if (!sid_compose(&sids[i], sid, rids[i])) {
+			return NT_STATUS_INTERNAL_ERROR;
+		}
+	}
+
+	result = cm_connect_lsa(domain, mem_ctx, &cli, &lsa_policy);
+	if (!NT_STATUS_IS_OK(result)) {
+		return result;
+	}
+
+	result = rpccli_lsa_lookup_sids(cli, mem_ctx, &lsa_policy,
+					num_rids, sids, &domains,
+					names, types);
+	if (!NT_STATUS_IS_OK(result) &&
+	    !NT_STATUS_EQUAL(result, STATUS_SOME_UNMAPPED)) {
+		return result;
+	}
+
+	ret_names = *names;
+	for (i=0; i<num_rids; i++) {
+		if ((*types)[i] != SID_NAME_UNKNOWN) {
+			ws_name_replace( ret_names[i], WB_REPLACE_CHAR );
+			*domain_name = domains[i];
+		}
+	}
+
+	return result;
+}
+
+/* Lookup user information from a rid or username. */
+static NTSTATUS query_user(struct winbindd_domain *domain, 
+			   TALLOC_CTX *mem_ctx, 
+			   const DOM_SID *user_sid, 
+			   WINBIND_USERINFO *user_info)
+{
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+	POLICY_HND dom_pol, user_pol;
+	SAM_USERINFO_CTR *ctr;
+	fstring sid_string;
+	uint32 user_rid;
+	NET_USER_INFO_3 *user;
+	struct rpc_pipe_client *cli;
+
+	DEBUG(3,("rpc: query_user sid=%s\n",
+		 sid_to_string(sid_string, user_sid)));
+
+	if (!sid_peek_check_rid(&domain->sid, user_sid, &user_rid))
+		return NT_STATUS_UNSUCCESSFUL;
+	
+	/* try netsamlogon cache first */
+			
+	if ( (user = netsamlogon_cache_get( mem_ctx, user_sid )) != NULL ) 
+	{
+				
+		DEBUG(5,("query_user: Cache lookup succeeded for %s\n", 
+			sid_string_static(user_sid)));
+
+		sid_compose(&user_info->user_sid, &domain->sid, user_rid);
+		sid_compose(&user_info->group_sid, &domain->sid,
+			    user->group_rid);
+				
+		user_info->acct_name = unistr2_tdup(mem_ctx,
+						    &user->uni_user_name);
+		user_info->full_name = unistr2_tdup(mem_ctx,
+						    &user->uni_full_name);
+		
+		user_info->homedir = NULL;
+		user_info->shell = NULL;
+		user_info->primary_gid = (gid_t)-1;
+						
+		TALLOC_FREE(user);
+				
+		return NT_STATUS_OK;
+	}
+	
+	/* no cache; hit the wire */
+		
+	result = cm_connect_sam(domain, mem_ctx, &cli, &dom_pol);
+	if (!NT_STATUS_IS_OK(result))
+		return result;
+
+	/* Get user handle */
+	result = rpccli_samr_open_user(cli, mem_ctx, &dom_pol,
+				       SEC_RIGHTS_MAXIMUM_ALLOWED, user_rid,
+				       &user_pol);
+
+	if (!NT_STATUS_IS_OK(result))
+		return result;
+
+	/* Get user info */
+	result = rpccli_samr_query_userinfo(cli, mem_ctx, &user_pol,
+					    0x15, &ctr);
+
+	rpccli_samr_close(cli, mem_ctx, &user_pol);
+
+	if (!NT_STATUS_IS_OK(result))
+		return result;
+
+	sid_compose(&user_info->user_sid, &domain->sid, user_rid);
+	sid_compose(&user_info->group_sid, &domain->sid,
+		    ctr->info.id21->group_rid);
+	user_info->acct_name = unistr2_tdup(mem_ctx, 
+					    &ctr->info.id21->uni_user_name);
+	user_info->full_name = unistr2_tdup(mem_ctx, 
+					    &ctr->info.id21->uni_full_name);
+	user_info->homedir = NULL;
+	user_info->shell = NULL;
+	user_info->primary_gid = (gid_t)-1;
+
+	return NT_STATUS_OK;
+}                                   
+
+/* Lookup groups a user is a member of.  I wish Unix had a call like this! */
+static NTSTATUS lookup_usergroups(struct winbindd_domain *domain,
+				  TALLOC_CTX *mem_ctx,
+				  const DOM_SID *user_sid,
+				  uint32 *num_groups, DOM_SID **user_grpsids)
+{
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+	POLICY_HND dom_pol, user_pol;
+	uint32 des_access = SEC_RIGHTS_MAXIMUM_ALLOWED;
+	DOM_GID *user_groups;
+	unsigned int i;
+	fstring sid_string;
+	uint32 user_rid;
+	struct rpc_pipe_client *cli;
+
+	DEBUG(3,("rpc: lookup_usergroups sid=%s\n",
+		 sid_to_string(sid_string, user_sid)));
+
+	if (!sid_peek_check_rid(&domain->sid, user_sid, &user_rid))
+		return NT_STATUS_UNSUCCESSFUL;
+
+	*num_groups = 0;
+	*user_grpsids = NULL;
+
+	/* so lets see if we have a cached user_info_3 */
+	result = lookup_usergroups_cached(domain, mem_ctx, user_sid, 
+					  num_groups, user_grpsids);
+
+	if (NT_STATUS_IS_OK(result)) {
+		return NT_STATUS_OK;
+	}
+
+	/* no cache; hit the wire */
+	
+	result = cm_connect_sam(domain, mem_ctx, &cli, &dom_pol);
+	if (!NT_STATUS_IS_OK(result))
+		return result;
+
+	/* Get user handle */
+	result = rpccli_samr_open_user(cli, mem_ctx, &dom_pol,
+					des_access, user_rid, &user_pol);
+
+	if (!NT_STATUS_IS_OK(result))
+		return result;
+
+	/* Query user rids */
+	result = rpccli_samr_query_usergroups(cli, mem_ctx, &user_pol, 
+					   num_groups, &user_groups);
+
+	rpccli_samr_close(cli, mem_ctx, &user_pol);
+
+	if (!NT_STATUS_IS_OK(result) || (*num_groups) == 0)
+		return result;
+
+	(*user_grpsids) = TALLOC_ARRAY(mem_ctx, DOM_SID, *num_groups);
+	if (!(*user_grpsids))
+		return NT_STATUS_NO_MEMORY;
+
+	for (i=0;i<(*num_groups);i++) {
+		sid_copy(&((*user_grpsids)[i]), &domain->sid);
+		sid_append_rid(&((*user_grpsids)[i]),
+				user_groups[i].g_rid);
+	}
+	
+	return NT_STATUS_OK;
+}
+
+NTSTATUS msrpc_lookup_useraliases(struct winbindd_domain *domain,
+				  TALLOC_CTX *mem_ctx,
+				  uint32 num_sids, const DOM_SID *sids,
+				  uint32 *num_aliases, uint32 **alias_rids)
+{
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+	POLICY_HND dom_pol;
+	DOM_SID2 *query_sids;
+	uint32 num_query_sids = 0;
+	int i;
+	struct rpc_pipe_client *cli;
+	uint32 *alias_rids_query, num_aliases_query;
+	int rangesize = MAX_SAM_ENTRIES_W2K;
+	uint32 total_sids = 0;
+	int num_queries = 1;
+
+	*num_aliases = 0;
+	*alias_rids = NULL;
+
+	DEBUG(3,("rpc: lookup_useraliases\n"));
+
+	result = cm_connect_sam(domain, mem_ctx, &cli, &dom_pol);
+	if (!NT_STATUS_IS_OK(result))
+		return result;
+
+	do {
+		/* prepare query */
+
+		num_query_sids = MIN(num_sids - total_sids, rangesize);
+
+		DEBUG(10,("rpc: lookup_useraliases: entering query %d for %d sids\n", 
+			num_queries, num_query_sids));	
+
+		if (num_query_sids) {
+			query_sids = TALLOC_ARRAY(mem_ctx, DOM_SID2, num_query_sids);
+			if (query_sids == NULL) {
+				return NT_STATUS_NO_MEMORY;
+			}
+		} else {
+			query_sids = NULL;
+		}
+
+		for (i=0; i<num_query_sids; i++) {
+			sid_copy(&query_sids[i].sid, &sids[total_sids++]);
+			query_sids[i].num_auths = query_sids[i].sid.num_auths;
+		}
+
+		/* do request */
+
+		result = rpccli_samr_query_useraliases(cli, mem_ctx, &dom_pol,
+						       num_query_sids, query_sids,
+						       &num_aliases_query, 
+						       &alias_rids_query);
+
+		if (!NT_STATUS_IS_OK(result)) {
+			*num_aliases = 0;
+			*alias_rids = NULL;
+			TALLOC_FREE(query_sids);
+			goto done;
+		}
+
+		/* process output */
+
+		for (i=0; i<num_aliases_query; i++) {
+			size_t na = *num_aliases;
+			if (!add_rid_to_array_unique(mem_ctx, alias_rids_query[i], 
+						alias_rids, &na)) {
+				return NT_STATUS_NO_MEMORY;
+			}
+			*num_aliases = na;
+		}
+
+		TALLOC_FREE(query_sids);
+
+		num_queries++;
+
+	} while (total_sids < num_sids);
+
+ done:
+	DEBUG(10,("rpc: lookup_useraliases: got %d aliases in %d queries "
+		"(rangesize: %d)\n", *num_aliases, num_queries, rangesize));
+
+	return result;
+}
+
+
+/* Lookup group membership given a rid.   */
+static NTSTATUS lookup_groupmem(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				const DOM_SID *group_sid, uint32 *num_names, 
+				DOM_SID **sid_mem, char ***names, 
+				uint32 **name_types)
+{
+        NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+        uint32 i, total_names = 0;
+        POLICY_HND dom_pol, group_pol;
+        uint32 des_access = SEC_RIGHTS_MAXIMUM_ALLOWED;
+	uint32 *rid_mem = NULL;
+	uint32 group_rid;
+	unsigned int j;
+	fstring sid_string;
+	struct rpc_pipe_client *cli;
+	unsigned int orig_timeout;
+
+	DEBUG(10,("rpc: lookup_groupmem %s sid=%s\n", domain->name,
+		  sid_to_string(sid_string, group_sid)));
+
+	if (!sid_peek_check_rid(&domain->sid, group_sid, &group_rid))
+		return NT_STATUS_UNSUCCESSFUL;
+
+	*num_names = 0;
+
+	result = cm_connect_sam(domain, mem_ctx, &cli, &dom_pol);
+	if (!NT_STATUS_IS_OK(result))
+		return result;
+
+        result = rpccli_samr_open_group(cli, mem_ctx, &dom_pol,
+					des_access, group_rid, &group_pol);
+
+        if (!NT_STATUS_IS_OK(result))
+		return result;
+
+        /* Step #1: Get a list of user rids that are the members of the
+           group. */
+
+	/* This call can take a long time - allow the server to time out.
+	   35 seconds should do it. */
+
+	orig_timeout = cli_set_timeout(cli->cli, 35000);
+
+        result = rpccli_samr_query_groupmem(cli, mem_ctx,
+					    &group_pol, num_names, &rid_mem,
+					    name_types);
+
+	/* And restore our original timeout. */
+	cli_set_timeout(cli->cli, orig_timeout);
+
+	rpccli_samr_close(cli, mem_ctx, &group_pol);
+
+        if (!NT_STATUS_IS_OK(result))
+		return result;
+
+	if (!*num_names) {
+		names = NULL;
+		name_types = NULL;
+		sid_mem = NULL;
+		return NT_STATUS_OK;
+	}
+
+        /* Step #2: Convert list of rids into list of usernames.  Do this
+           in bunches of ~1000 to avoid crashing NT4.  It looks like there
+           is a buffer overflow or something like that lurking around
+           somewhere. */
+
+#define MAX_LOOKUP_RIDS 900
+
+        *names = TALLOC_ZERO_ARRAY(mem_ctx, char *, *num_names);
+        *name_types = TALLOC_ZERO_ARRAY(mem_ctx, uint32, *num_names);
+        *sid_mem = TALLOC_ZERO_ARRAY(mem_ctx, DOM_SID, *num_names);
+
+	for (j=0;j<(*num_names);j++)
+		sid_compose(&(*sid_mem)[j], &domain->sid, rid_mem[j]);
+	
+	if (*num_names>0 && (!*names || !*name_types))
+		return NT_STATUS_NO_MEMORY;
+
+        for (i = 0; i < *num_names; i += MAX_LOOKUP_RIDS) {
+                int num_lookup_rids = MIN(*num_names - i, MAX_LOOKUP_RIDS);
+                uint32 tmp_num_names = 0;
+                char **tmp_names = NULL;
+                uint32 *tmp_types = NULL;
+
+                /* Lookup a chunk of rids */
+
+                result = rpccli_samr_lookup_rids(cli, mem_ctx,
+						 &dom_pol,
+						 num_lookup_rids,
+						 &rid_mem[i],
+						 &tmp_num_names,
+						 &tmp_names, &tmp_types);
+
+		/* see if we have a real error (and yes the
+		   STATUS_SOME_UNMAPPED is the one returned from 2k) */
+		
+                if (!NT_STATUS_IS_OK(result) &&
+		    !NT_STATUS_EQUAL(result, STATUS_SOME_UNMAPPED))
+			return result;
+			
+                /* Copy result into array.  The talloc system will take
+                   care of freeing the temporary arrays later on. */
+
+                memcpy(&(*names)[i], tmp_names, sizeof(char *) * 
+                       tmp_num_names);
+
+                memcpy(&(*name_types)[i], tmp_types, sizeof(uint32) *
+                       tmp_num_names);
+		
+                total_names += tmp_num_names;
+        }
+
+        *num_names = total_names;
+
+	return NT_STATUS_OK;
+}
+
+#ifdef HAVE_LDAP
+
+#include <ldap.h>
+
+static int get_ldap_seq(const char *server, int port, uint32 *seq)
+{
+	int ret = -1;
+	struct timeval to;
+	const char *attrs[] = {"highestCommittedUSN", NULL};
+	LDAPMessage *res = NULL;
+	char **values = NULL;
+	LDAP *ldp = NULL;
+
+	*seq = DOM_SEQUENCE_NONE;
+
+	/*
+	 * Parameterised (5) second timeout on open. This is needed as the
+	 * search timeout doesn't seem to apply to doing an open as well. JRA.
+	 */
+
+	ldp = ldap_open_with_timeout(server, port, lp_ldap_timeout());
+	if (ldp == NULL)
+		return -1;
+
+	/* Timeout if no response within 20 seconds. */
+	to.tv_sec = 10;
+	to.tv_usec = 0;
+
+	if (ldap_search_st(ldp, "", LDAP_SCOPE_BASE, "(objectclass=*)",
+			   CONST_DISCARD(char **, attrs), 0, &to, &res))
+		goto done;
+
+	if (ldap_count_entries(ldp, res) != 1)
+		goto done;
+
+	values = ldap_get_values(ldp, res, "highestCommittedUSN");
+	if (!values || !values[0])
+		goto done;
+
+	*seq = atoi(values[0]);
+	ret = 0;
+
+  done:
+
+	if (values)
+		ldap_value_free(values);
+	if (res)
+		ldap_msgfree(res);
+	if (ldp)
+		ldap_unbind(ldp);
+	return ret;
+}
+
+/**********************************************************************
+ Get the sequence number for a Windows AD native mode domain using
+ LDAP queries. 
+**********************************************************************/
+
+static int get_ldap_sequence_number(struct winbindd_domain *domain, uint32 *seq)
+{
+	int ret = -1;
+	fstring ipstr;
+
+	fstrcpy( ipstr, inet_ntoa(domain->dcaddr.sin_addr));
+	if ((ret = get_ldap_seq( ipstr, LDAP_PORT, seq)) == 0) {
+		DEBUG(3, ("get_ldap_sequence_number: Retrieved sequence "
+			  "number for Domain (%s) from DC (%s)\n", 
+			domain->name, ipstr));
+	} 
+	return ret;
+}
+
+#endif /* HAVE_LDAP */
+
+/* find the sequence number for a domain */
+static NTSTATUS sequence_number(struct winbindd_domain *domain, uint32 *seq)
+{
+	TALLOC_CTX *mem_ctx;
+	SAM_UNK_CTR ctr;
+	NTSTATUS result;
+	POLICY_HND dom_pol;
+	BOOL got_seq_num = False;
+	struct rpc_pipe_client *cli;
+
+	DEBUG(10,("rpc: fetch sequence_number for %s\n", domain->name));
+
+	*seq = DOM_SEQUENCE_NONE;
+
+	if (!(mem_ctx = talloc_init("sequence_number[rpc]")))
+		return NT_STATUS_NO_MEMORY;
+
+#ifdef HAVE_LDAP
+	if ( domain->native_mode ) 
+	{
+		int res;
+
+		DEBUG(8,("using get_ldap_seq() to retrieve the "
+			 "sequence number\n"));
+
+		res =  get_ldap_sequence_number( domain, seq );
+		if (res == 0)
+		{			
+			result = NT_STATUS_OK;
+			DEBUG(10,("domain_sequence_number: LDAP for "
+				  "domain %s is %u\n",
+				  domain->name, *seq));
+			goto done;
+		}
+
+		DEBUG(10,("domain_sequence_number: failed to get LDAP "
+			  "sequence number for domain %s\n",
+			  domain->name ));
+	}
+#endif /* HAVE_LDAP */
+
+	result = cm_connect_sam(domain, mem_ctx, &cli, &dom_pol);
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	/* Query domain info */
+
+	result = rpccli_samr_query_dom_info(cli, mem_ctx, &dom_pol, 8, &ctr);
+
+	if (NT_STATUS_IS_OK(result)) {
+		*seq = ctr.info.inf8.seq_num;
+		got_seq_num = True;
+		goto seq_num;
+	}
+
+	/* retry with info-level 2 in case the dc does not support info-level 8
+	 * (like all older samba2 and samba3 dc's - Guenther */
+
+	result = rpccli_samr_query_dom_info(cli, mem_ctx, &dom_pol, 2, &ctr);
+	
+	if (NT_STATUS_IS_OK(result)) {
+		*seq = ctr.info.inf2.seq_num;
+		got_seq_num = True;
+	}
+
+ seq_num:
+	if (got_seq_num) {
+		DEBUG(10,("domain_sequence_number: for domain %s is %u\n",
+			  domain->name, (unsigned)*seq));
+	} else {
+		DEBUG(10,("domain_sequence_number: failed to get sequence "
+			  "number (%u) for domain %s\n",
+			  (unsigned)*seq, domain->name ));
+	}
+
+  done:
+
+	talloc_destroy(mem_ctx);
+
+	return result;
+}
+
+/* get a list of trusted domains */
+static NTSTATUS trusted_domains(struct winbindd_domain *domain,
+				TALLOC_CTX *mem_ctx,
+				uint32 *num_domains,
+				char ***names,
+				char ***alt_names,
+				DOM_SID **dom_sids)
+{
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+	uint32 enum_ctx = 0;
+	struct rpc_pipe_client *cli;
+	POLICY_HND lsa_policy;
+
+	DEBUG(3,("rpc: trusted_domains\n"));
+
+	*num_domains = 0;
+	*names = NULL;
+	*alt_names = NULL;
+	*dom_sids = NULL;
+
+	result = cm_connect_lsa(domain, mem_ctx, &cli, &lsa_policy);
+	if (!NT_STATUS_IS_OK(result))
+		return result;
+
+	result = STATUS_MORE_ENTRIES;
+
+	while (NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES)) {
+		uint32 start_idx, num;
+		char **tmp_names;
+		DOM_SID *tmp_sids;
+		int i;
+
+		result = rpccli_lsa_enum_trust_dom(cli, mem_ctx,
+						   &lsa_policy, &enum_ctx,
+						   &num, &tmp_names,
+						   &tmp_sids);
+
+		if (!NT_STATUS_IS_OK(result) &&
+		    !NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES))
+			break;
+
+		start_idx = *num_domains;
+		*num_domains += num;
+		*names = TALLOC_REALLOC_ARRAY(mem_ctx, *names,
+					      char *, *num_domains);
+		*dom_sids = TALLOC_REALLOC_ARRAY(mem_ctx, *dom_sids,
+						 DOM_SID, *num_domains);
+		*alt_names = TALLOC_REALLOC_ARRAY(mem_ctx, *alt_names,
+						 char *, *num_domains);
+		if ((*names == NULL) || (*dom_sids == NULL) ||
+		    (*alt_names == NULL))
+			return NT_STATUS_NO_MEMORY;
+
+		for (i=0; i<num; i++) {
+			(*names)[start_idx+i] = tmp_names[i];
+			(*dom_sids)[start_idx+i] = tmp_sids[i];
+			(*alt_names)[start_idx+i] = talloc_strdup(mem_ctx, "");
+		}
+	}
+	return result;
+}
+
+/* find the lockout policy for a domain */
+NTSTATUS msrpc_lockout_policy(struct winbindd_domain *domain, 
+			      TALLOC_CTX *mem_ctx,
+			      SAM_UNK_INFO_12 *lockout_policy)
+{
+	NTSTATUS result;
+	struct rpc_pipe_client *cli;
+	POLICY_HND dom_pol;
+	SAM_UNK_CTR ctr;
+
+	DEBUG(10,("rpc: fetch lockout policy for %s\n", domain->name));
+
+	result = cm_connect_sam(domain, mem_ctx, &cli, &dom_pol);
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	result = rpccli_samr_query_dom_info(cli, mem_ctx, &dom_pol, 12, &ctr);
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	*lockout_policy = ctr.info.inf12;
+
+	DEBUG(10,("msrpc_lockout_policy: bad_attempt_lockout %d\n", 
+		ctr.info.inf12.bad_attempt_lockout));
+
+  done:
+
+	return result;
+}
+
+/* find the password policy for a domain */
+NTSTATUS msrpc_password_policy(struct winbindd_domain *domain, 
+			       TALLOC_CTX *mem_ctx,
+			       SAM_UNK_INFO_1 *password_policy)
+{
+	NTSTATUS result;
+	struct rpc_pipe_client *cli;
+	POLICY_HND dom_pol;
+	SAM_UNK_CTR ctr;
+
+	DEBUG(10,("rpc: fetch password policy for %s\n", domain->name));
+
+	result = cm_connect_sam(domain, mem_ctx, &cli, &dom_pol);
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	result = rpccli_samr_query_dom_info(cli, mem_ctx, &dom_pol, 1, &ctr);
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	*password_policy = ctr.info.inf1;
+
+	DEBUG(10,("msrpc_password_policy: min_length_password %d\n", 
+		ctr.info.inf1.min_length_password));
+
+  done:
+
+	return result;
+}
+
+
+/* the rpc backend methods are exposed via this structure */
+struct winbindd_methods msrpc_methods = {
+	False,
+	query_user_list,
+	enum_dom_groups,
+	enum_local_groups,
+	msrpc_name_to_sid,
+	msrpc_sid_to_name,
+	msrpc_rids_to_names,
+	query_user,
+	lookup_usergroups,
+	msrpc_lookup_useraliases,
+	lookup_groupmem,
+	sequence_number,
+	msrpc_lockout_policy,
+	msrpc_password_policy,
+	trusted_domains,
+};

Copied: branches/samba/upstream/source/nsswitch/winbindd_sid.c (from rev 1928, branches/samba/upstream/source/nsswitch/winbindd_sid.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/winbindd_sid.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/winbindd_sid.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,560 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   Winbind daemon - sid related functions
+
+   Copyright (C) Tim Potter 2000
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "winbindd.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_WINBIND
+
+/* Convert a string  */
+
+static void lookupsid_recv(void *private_data, BOOL success,
+			   const char *dom_name, const char *name,
+			   enum lsa_SidType type);
+
+void winbindd_lookupsid(struct winbindd_cli_state *state)
+{
+	DOM_SID sid;
+
+	/* Ensure null termination */
+	state->request.data.sid[sizeof(state->request.data.sid)-1]='\0';
+
+	DEBUG(3, ("[%5lu]: lookupsid %s\n", (unsigned long)state->pid, 
+		  state->request.data.sid));
+
+	if (!string_to_sid(&sid, state->request.data.sid)) {
+		DEBUG(5, ("%s not a SID\n", state->request.data.sid));
+		request_error(state);
+		return;
+	}
+
+	winbindd_lookupsid_async(state->mem_ctx, &sid, lookupsid_recv, state);
+}
+
+static void lookupsid_recv(void *private_data, BOOL success,
+			   const char *dom_name, const char *name,
+			   enum lsa_SidType type)
+{
+	struct winbindd_cli_state *state =
+		talloc_get_type_abort(private_data, struct winbindd_cli_state);
+
+	if (!success) {
+		DEBUG(5, ("lookupsid returned an error\n"));
+		request_error(state);
+		return;
+	}
+
+	fstrcpy(state->response.data.name.dom_name, dom_name);
+	fstrcpy(state->response.data.name.name, name);
+	state->response.data.name.type = type;
+	request_ok(state);
+}
+
+/**
+ * Look up the SID for a qualified name.  
+ **/
+
+static void lookupname_recv(void *private_data, BOOL success,
+			    const DOM_SID *sid, enum lsa_SidType type);
+
+void winbindd_lookupname(struct winbindd_cli_state *state)
+{
+	char *name_domain, *name_user;
+	char *p;
+
+	/* Ensure null termination */
+	state->request.data.name.dom_name[sizeof(state->request.data.name.dom_name)-1]='\0';
+
+	/* Ensure null termination */
+	state->request.data.name.name[sizeof(state->request.data.name.name)-1]='\0';
+
+	/* cope with the name being a fully qualified name */
+	p = strstr(state->request.data.name.name, lp_winbind_separator());
+	if (p) {
+		*p = 0;
+		name_domain = state->request.data.name.name;
+		name_user = p+1;
+	} else {
+		name_domain = state->request.data.name.dom_name;
+		name_user = state->request.data.name.name;
+	}
+
+	DEBUG(3, ("[%5lu]: lookupname %s%s%s\n", (unsigned long)state->pid,
+		  name_domain, lp_winbind_separator(), name_user));
+
+	winbindd_lookupname_async(state->mem_ctx, name_domain, name_user,
+				  lookupname_recv, state);
+}
+
+static void lookupname_recv(void *private_data, BOOL success,
+			    const DOM_SID *sid, enum lsa_SidType type)
+{
+	struct winbindd_cli_state *state =
+		talloc_get_type_abort(private_data, struct winbindd_cli_state);
+
+	if (!success) {
+		DEBUG(5, ("lookupname returned an error\n"));
+		request_error(state);
+		return;
+	}
+
+	sid_to_string(state->response.data.sid.sid, sid);
+	state->response.data.sid.type = type;
+	request_ok(state);
+	return;
+}
+
+void winbindd_lookuprids(struct winbindd_cli_state *state)
+{
+	struct winbindd_domain *domain;
+	DOM_SID domain_sid;
+	
+	/* Ensure null termination */
+	state->request.data.sid[sizeof(state->request.data.sid)-1]='\0';
+
+	DEBUG(10, ("lookup_rids: %s\n", state->request.data.sid));
+
+	if (!string_to_sid(&domain_sid, state->request.data.sid)) {
+		DEBUG(5, ("Could not convert %s to SID\n",
+			  state->request.data.sid));
+		request_error(state);
+		return;
+	}
+
+	domain = find_lookup_domain_from_sid(&domain_sid);
+	if (domain == NULL) {
+		DEBUG(10, ("Could not find domain for name %s\n",
+			   state->request.domain_name));
+		request_error(state);
+		return;
+	}
+
+	sendto_domain(state, domain);
+}
+
+static struct winbindd_child static_idmap_child;
+
+void init_idmap_child(void)
+{
+	setup_domain_child(NULL, &static_idmap_child, "idmap");
+}
+
+struct winbindd_child *idmap_child(void)
+{
+	return &static_idmap_child;
+}
+
+/* Convert a sid to a uid.  We assume we only have one rid attached to the
+   sid. */
+
+static void sid2uid_recv(void *private_data, BOOL success, uid_t uid)
+{
+	struct winbindd_cli_state *state =
+		talloc_get_type_abort(private_data, struct winbindd_cli_state);
+
+	if (!success) {
+		DEBUG(5, ("Could not convert sid %s\n",
+			  state->request.data.sid));
+		request_error(state);
+		return;
+	}
+
+	state->response.data.uid = uid;
+	request_ok(state);
+}
+
+static void sid2uid_lookupsid_recv( void *private_data, BOOL success, 
+				    const char *domain_name, 
+				    const char *name, 
+				    enum lsa_SidType type)
+{
+	struct winbindd_cli_state *state =
+		talloc_get_type_abort(private_data, struct winbindd_cli_state);
+	DOM_SID sid;
+
+	if (!success) {
+		DEBUG(5, ("sid2uid_lookupsid_recv Could not convert get sid type for %s\n",
+			  state->request.data.sid));
+		request_error(state);
+		return;
+	}
+
+	if ( (type!=SID_NAME_USER) && (type!=SID_NAME_COMPUTER) ) {
+		DEBUG(5,("sid2uid_lookupsid_recv: Sid %s is not a user or a computer.\n", 
+			 state->request.data.sid));
+		request_error(state);
+		return;		
+	}
+
+	if (!string_to_sid(&sid, state->request.data.sid)) {
+		DEBUG(1, ("sid2uid_lookupsid_recv: Could not get convert sid %s from string\n",
+			  state->request.data.sid));
+		request_error(state);
+		return;
+	}
+	
+	/* always use the async interface (may block) */
+	winbindd_sid2uid_async(state->mem_ctx, &sid, sid2uid_recv, state);
+}
+
+void winbindd_sid_to_uid(struct winbindd_cli_state *state)
+{
+	DOM_SID sid;
+
+	/* Ensure null termination */
+	state->request.data.sid[sizeof(state->request.data.sid)-1]='\0';
+
+	DEBUG(3, ("[%5lu]: sid to uid %s\n", (unsigned long)state->pid,
+		  state->request.data.sid));
+
+	if (!string_to_sid(&sid, state->request.data.sid)) {
+		DEBUG(1, ("Could not get convert sid %s from string\n",
+			  state->request.data.sid));
+		request_error(state);
+		return;
+	}
+
+	/* Validate the SID as a user.  Hopefully this will hit cache.
+	   Needed to prevent DoS by exhausting the uid allocation
+	   range from random SIDs. */
+
+	winbindd_lookupsid_async( state->mem_ctx, &sid, sid2uid_lookupsid_recv, state );
+}
+
+/* Convert a sid to a gid.  We assume we only have one rid attached to the
+   sid.*/
+
+static void sid2gid_recv(void *private_data, BOOL success, gid_t gid)
+{
+	struct winbindd_cli_state *state =
+		talloc_get_type_abort(private_data, struct winbindd_cli_state);
+
+	if (!success) {
+		DEBUG(5, ("Could not convert sid %s\n",
+			  state->request.data.sid));
+		request_error(state);
+		return;
+	}
+
+	state->response.data.gid = gid;
+	request_ok(state);
+}
+
+static void sid2gid_lookupsid_recv( void *private_data, BOOL success, 
+				    const char *domain_name, 
+				    const char *name, 
+				    enum lsa_SidType type)
+{
+	struct winbindd_cli_state *state =
+		talloc_get_type_abort(private_data, struct winbindd_cli_state);
+	DOM_SID sid;
+
+	if (!success) {
+		DEBUG(5, ("sid2gid_lookupsid_recv: Could not convert get sid type for %s\n",
+			  state->request.data.sid));
+		request_error(state);
+		return;
+	}
+
+	if ( (type!=SID_NAME_DOM_GRP) &&
+	     (type!=SID_NAME_ALIAS) && 
+	     (type!=SID_NAME_WKN_GRP) ) 
+	{
+		DEBUG(5,("sid2gid_lookupsid_recv: Sid %s is not a group.\n", 
+			 state->request.data.sid));
+		request_error(state);
+		return;		
+	}
+
+	if (!string_to_sid(&sid, state->request.data.sid)) {
+		DEBUG(1, ("sid2gid_lookupsid_recv: Could not get convert sid %s from string\n",
+			  state->request.data.sid));
+		request_error(state);
+		return;
+	}
+	
+	/* always use the async interface (may block) */
+	winbindd_sid2gid_async(state->mem_ctx, &sid, sid2gid_recv, state);
+}
+
+void winbindd_sid_to_gid(struct winbindd_cli_state *state)
+{
+	DOM_SID sid;
+
+	/* Ensure null termination */
+	state->request.data.sid[sizeof(state->request.data.sid)-1]='\0';
+
+	DEBUG(3, ("[%5lu]: sid to gid %s\n", (unsigned long)state->pid,
+		  state->request.data.sid));
+
+	if (!string_to_sid(&sid, state->request.data.sid)) {
+		DEBUG(1, ("Could not get convert sid %s from string\n",
+			  state->request.data.sid));
+		request_error(state);
+		return;
+	}
+
+	/* Validate the SID as a group.  Hopefully this will hit cache.
+	   Needed to prevent DoS by exhausting the uid allocation
+	   range from random SIDs. */
+
+	winbindd_lookupsid_async( state->mem_ctx, &sid, sid2gid_lookupsid_recv, state );	
+}
+
+static void sids2xids_recv(void *private_data, BOOL success, void *data, int len)
+{
+	struct winbindd_cli_state *state =
+		talloc_get_type_abort(private_data, struct winbindd_cli_state);
+
+	if (!success) {
+		DEBUG(5, ("Could not convert sids to xids\n"));
+		request_error(state);
+		return;
+	}
+
+	state->response.extra_data.data = data;
+	state->response.length = sizeof(state->response) + len;
+	request_ok(state);
+}
+
+void winbindd_sids_to_unixids(struct winbindd_cli_state *state)
+{
+	DEBUG(3, ("[%5lu]: sids to xids\n", (unsigned long)state->pid));
+
+	winbindd_sids2xids_async(state->mem_ctx,
+			state->request.extra_data.data,
+			state->request.extra_len,
+			sids2xids_recv, state);
+}
+
+static void set_mapping_recv(void *private_data, BOOL success)
+{
+	struct winbindd_cli_state *state =
+		talloc_get_type_abort(private_data, struct winbindd_cli_state);
+
+	if (!success) {
+		DEBUG(5, ("Could not set sid mapping\n"));
+		request_error(state);
+		return;
+	}
+
+	request_ok(state);
+}
+
+void winbindd_set_mapping(struct winbindd_cli_state *state)
+{
+	struct id_map map;
+	DOM_SID sid;
+
+	DEBUG(3, ("[%5lu]: set id map\n", (unsigned long)state->pid));
+
+	if ( ! state->privileged) {
+		DEBUG(0, ("Only root is allowed to set mappings!\n"));
+		request_error(state);
+		return;
+	}
+
+	if (!string_to_sid(&sid, state->request.data.dual_idmapset.sid)) {
+		DEBUG(1, ("Could not get convert sid %s from string\n",
+			  state->request.data.sid));
+		request_error(state);
+		return;
+	}
+
+	map.sid = &sid;
+	map.xid.id = state->request.data.dual_idmapset.id;
+	map.xid.type = state->request.data.dual_idmapset.type;
+
+	winbindd_set_mapping_async(state->mem_ctx, &map,
+			set_mapping_recv, state);
+}
+
+static void set_hwm_recv(void *private_data, BOOL success)
+{
+	struct winbindd_cli_state *state =
+		talloc_get_type_abort(private_data, struct winbindd_cli_state);
+
+	if (!success) {
+		DEBUG(5, ("Could not set sid mapping\n"));
+		request_error(state);
+		return;
+	}
+
+	request_ok(state);
+}
+
+void winbindd_set_hwm(struct winbindd_cli_state *state)
+{
+	struct unixid xid;
+
+	DEBUG(3, ("[%5lu]: set hwm\n", (unsigned long)state->pid));
+
+	if ( ! state->privileged) {
+		DEBUG(0, ("Only root is allowed to set mappings!\n"));
+		request_error(state);
+		return;
+	}
+
+	xid.id = state->request.data.dual_idmapset.id;
+	xid.type = state->request.data.dual_idmapset.type;
+
+	winbindd_set_hwm_async(state->mem_ctx, &xid, set_hwm_recv, state);
+}
+
+/* Convert a uid to a sid */
+
+static void uid2sid_recv(void *private_data, BOOL success, const char *sid)
+{
+	struct winbindd_cli_state *state =
+		(struct winbindd_cli_state *)private_data;
+
+	if (success) {
+		DEBUG(10,("uid2sid: uid %lu has sid %s\n",
+			  (unsigned long)(state->request.data.uid), sid));
+		fstrcpy(state->response.data.sid.sid, sid);
+		state->response.data.sid.type = SID_NAME_USER;
+		request_ok(state);
+		return;
+	}
+
+	request_error(state);
+	return;
+}
+
+void winbindd_uid_to_sid(struct winbindd_cli_state *state)
+{
+	DEBUG(3, ("[%5lu]: uid to sid %lu\n", (unsigned long)state->pid, 
+		  (unsigned long)state->request.data.uid));
+
+	/* always go via the async interface (may block) */
+	winbindd_uid2sid_async(state->mem_ctx, state->request.data.uid, uid2sid_recv, state);
+}
+
+/* Convert a gid to a sid */
+
+static void gid2sid_recv(void *private_data, BOOL success, const char *sid)
+{
+	struct winbindd_cli_state *state =
+		(struct winbindd_cli_state *)private_data;
+
+	if (success) {
+		DEBUG(10,("gid2sid: gid %lu has sid %s\n",
+			  (unsigned long)(state->request.data.gid), sid));
+		fstrcpy(state->response.data.sid.sid, sid);
+		state->response.data.sid.type = SID_NAME_DOM_GRP;
+		request_ok(state);
+		return;
+	}
+
+	request_error(state);
+	return;
+}
+
+
+void winbindd_gid_to_sid(struct winbindd_cli_state *state)
+{
+	DEBUG(3, ("[%5lu]: gid to sid %lu\n", (unsigned long)state->pid, 
+		  (unsigned long)state->request.data.gid));
+
+	/* always use async calls (may block) */
+	winbindd_gid2sid_async(state->mem_ctx, state->request.data.gid, gid2sid_recv, state);
+}
+
+void winbindd_allocate_uid(struct winbindd_cli_state *state)
+{
+	if ( !state->privileged ) {
+		DEBUG(2, ("winbindd_allocate_uid: non-privileged access "
+			  "denied!\n"));
+		request_error(state);
+		return;
+	}
+
+	sendto_child(state, idmap_child());
+}
+
+enum winbindd_result winbindd_dual_allocate_uid(struct winbindd_domain *domain,
+						struct winbindd_cli_state *state)
+{
+	struct unixid xid;
+
+	if (!NT_STATUS_IS_OK(idmap_allocate_uid(&xid))) {
+		return WINBINDD_ERROR;
+	}
+	state->response.data.uid = xid.id;
+	return WINBINDD_OK;
+}
+
+void winbindd_allocate_gid(struct winbindd_cli_state *state)
+{
+	if ( !state->privileged ) {
+		DEBUG(2, ("winbindd_allocate_gid: non-privileged access "
+			  "denied!\n"));
+		request_error(state);
+		return;
+	}
+
+	sendto_child(state, idmap_child());
+}
+
+enum winbindd_result winbindd_dual_allocate_gid(struct winbindd_domain *domain,
+						struct winbindd_cli_state *state)
+{
+	struct unixid xid;
+
+	if (!NT_STATUS_IS_OK(idmap_allocate_gid(&xid))) {
+		return WINBINDD_ERROR;
+	}
+	state->response.data.gid = xid.id;
+	return WINBINDD_OK;
+}
+
+static void dump_maps_recv(void *private_data, BOOL success)
+{
+	struct winbindd_cli_state *state =
+		talloc_get_type_abort(private_data, struct winbindd_cli_state);
+
+	if (!success) {
+		DEBUG(5, ("Could not dump maps\n"));
+		request_error(state);
+		return;
+	}
+
+	request_ok(state);
+}
+
+void winbindd_dump_maps(struct winbindd_cli_state *state)
+{
+	if ( ! state->privileged) {
+		DEBUG(0, ("Only root is allowed to ask for an idmap dump!\n"));
+		request_error(state);
+		return;
+	}
+
+	DEBUG(3, ("[%5lu]: dump maps\n", (unsigned long)state->pid));
+
+	winbindd_dump_maps_async(state->mem_ctx,
+			state->request.extra_data.data,
+			state->request.extra_len,
+			dump_maps_recv, state);
+}
+

Copied: branches/samba/upstream/source/nsswitch/winbindd_user.c (from rev 1928, branches/samba/upstream/source/nsswitch/winbindd_user.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/winbindd_user.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/winbindd_user.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,838 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   Winbind daemon - user related functions
+
+   Copyright (C) Tim Potter 2000
+   Copyright (C) Jeremy Allison 2001.
+   Copyright (C) Gerald (Jerry) Carter 2003.
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "winbindd.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_WINBIND
+
+static BOOL fillup_pw_field(const char *lp_template, 
+			    const char *username, 
+			    const char *domname,
+			    uid_t uid,
+			    gid_t gid,
+			    const char *in, 
+			    fstring out)
+{
+	char *templ;
+
+	if (out == NULL)
+		return False;
+
+	/* The substitution of %U and %D in the 'template 
+	   homedir' is done by talloc_sub_specified() below.
+	   If we have an in string (which means the value has already
+	   been set in the nss_info backend), then use that.
+	   Otherwise use the template value passed in. */
+
+	if ( in && !strequal(in,"") && lp_security() == SEC_ADS ) {
+		templ = talloc_sub_specified(NULL, in, 
+					     username, domname,
+				     uid, gid);
+	} else {
+		templ = talloc_sub_specified(NULL, lp_template, 
+					     username, domname,
+					     uid, gid);		
+	}
+		
+	if (!templ)
+		return False;
+
+	safe_strcpy(out, templ, sizeof(fstring) - 1);
+	TALLOC_FREE(templ);
+		
+	return True;
+	
+}
+/* Fill a pwent structure with information we have obtained */
+
+static BOOL winbindd_fill_pwent(char *dom_name, char *user_name, 
+				DOM_SID *user_sid, DOM_SID *group_sid,
+				char *full_name, char *homedir, char *shell,
+				struct winbindd_pw *pw)
+{
+	fstring output_username;
+	fstring sid_string;
+	
+	if (!pw || !dom_name || !user_name)
+		return False;
+	
+	/* Resolve the uid number */
+
+	if (!NT_STATUS_IS_OK(idmap_sid_to_uid(user_sid, &pw->pw_uid))) {
+		DEBUG(1, ("error getting user id for sid %s\n", sid_to_string(sid_string, user_sid)));
+		return False;
+	}
+	
+	/* Resolve the gid number */   
+
+	if (!NT_STATUS_IS_OK(idmap_sid_to_gid(group_sid, &pw->pw_gid))) {
+		DEBUG(1, ("error getting group id for sid %s\n", sid_to_string(sid_string, group_sid)));
+		return False;
+	}
+
+	strlower_m(user_name);
+
+	/* Username */
+
+	fill_domain_username(output_username, dom_name, user_name, True); 
+
+	safe_strcpy(pw->pw_name, output_username, sizeof(pw->pw_name) - 1);
+	
+	/* Full name (gecos) */
+	
+	safe_strcpy(pw->pw_gecos, full_name, sizeof(pw->pw_gecos) - 1);
+
+	/* Home directory and shell - use template config parameters.  The
+	   defaults are /tmp for the home directory and /bin/false for
+	   shell. */
+	
+	if (!fillup_pw_field(lp_template_homedir(), user_name, dom_name, 
+			     pw->pw_uid, pw->pw_gid, homedir, pw->pw_dir))
+		return False;
+
+	if (!fillup_pw_field(lp_template_shell(), user_name, dom_name, 
+			     pw->pw_uid, pw->pw_gid, shell, pw->pw_shell))
+		return False;
+
+	/* Password - set to "*" as we can't generate anything useful here.
+	   Authentication can be done using the pam_winbind module. */
+
+	safe_strcpy(pw->pw_passwd, "*", sizeof(pw->pw_passwd) - 1);
+
+	return True;
+}
+
+/* Wrapper for domain->methods->query_user, only on the parent->child pipe */
+
+enum winbindd_result winbindd_dual_userinfo(struct winbindd_domain *domain,
+					    struct winbindd_cli_state *state)
+{
+	DOM_SID sid;
+	WINBIND_USERINFO user_info;
+	NTSTATUS status;
+
+	/* Ensure null termination */
+	state->request.data.sid[sizeof(state->request.data.sid)-1]='\0';
+
+	DEBUG(3, ("[%5lu]: lookupsid %s\n", (unsigned long)state->pid, 
+		  state->request.data.sid));
+
+	if (!string_to_sid(&sid, state->request.data.sid)) {
+		DEBUG(5, ("%s not a SID\n", state->request.data.sid));
+		return WINBINDD_ERROR;
+	}
+
+	status = domain->methods->query_user(domain, state->mem_ctx,
+					     &sid, &user_info);
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(1, ("error getting user info for sid %s\n",
+			  sid_string_static(&sid)));
+		return WINBINDD_ERROR;
+	}
+
+	fstrcpy(state->response.data.user_info.acct_name, user_info.acct_name);
+	fstrcpy(state->response.data.user_info.full_name, user_info.full_name);
+	fstrcpy(state->response.data.user_info.homedir, user_info.homedir);
+	fstrcpy(state->response.data.user_info.shell, user_info.shell);
+	state->response.data.user_info.primary_gid = user_info.primary_gid;	
+	if (!sid_peek_check_rid(&domain->sid, &user_info.group_sid,
+				&state->response.data.user_info.group_rid)) {
+		DEBUG(1, ("Could not extract group rid out of %s\n",
+			  sid_string_static(&sid)));
+		return WINBINDD_ERROR;
+	}
+
+	return WINBINDD_OK;
+}
+
+struct getpwsid_state {
+	struct winbindd_cli_state *state;
+	struct winbindd_domain *domain;
+	char *username;
+	char *fullname;
+	char *homedir;
+	char *shell;
+	DOM_SID user_sid;
+	uid_t uid;
+	DOM_SID group_sid;
+	gid_t gid;
+};
+
+static void getpwsid_queryuser_recv(void *private_data, BOOL success,
+				    const char *acct_name,
+				    const char *full_name, 
+				    const char *homedir,
+				    const char *shell,
+				    uint32 gid,
+				    uint32 group_rid);
+static void getpwsid_sid2uid_recv(void *private_data, BOOL success, uid_t uid);
+static void getpwsid_sid2gid_recv(void *private_data, BOOL success, gid_t gid);
+
+static void winbindd_getpwsid(struct winbindd_cli_state *state,
+			      const DOM_SID *sid)
+{
+	struct getpwsid_state *s;
+
+	s = TALLOC_ZERO_P(state->mem_ctx, struct getpwsid_state);
+	if (s == NULL) {
+		DEBUG(0, ("talloc failed\n"));
+		goto error;
+	}
+
+	s->state = state;
+	s->domain = find_domain_from_sid_noinit(sid);
+	if (s->domain == NULL) {
+		DEBUG(3, ("Could not find domain for sid %s\n",
+			  sid_string_static(sid)));
+		goto error;
+	}
+
+	sid_copy(&s->user_sid, sid);
+
+	query_user_async(s->state->mem_ctx, s->domain, sid,
+			 getpwsid_queryuser_recv, s);
+	return;
+
+ error:
+	request_error(state);
+}
+	
+static void getpwsid_queryuser_recv(void *private_data, BOOL success,
+				    const char *acct_name,
+				    const char *full_name, 
+				    const char *homedir,
+				    const char *shell,
+				    uint32 gid,
+				    uint32 group_rid)
+{
+	fstring username;
+	struct getpwsid_state *s =
+		talloc_get_type_abort(private_data, struct getpwsid_state);
+
+	if (!success) {
+		DEBUG(5, ("Could not query domain %s SID %s\n", s->domain->name,
+			  sid_string_static(&s->user_sid)));
+		request_error(s->state);
+		return;
+	}
+
+	fstrcpy( username, acct_name );
+	strlower_m( username );
+	s->username = talloc_strdup(s->state->mem_ctx, username);
+
+	ws_name_replace( s->username, WB_REPLACE_CHAR );
+	 
+	s->fullname = talloc_strdup(s->state->mem_ctx, full_name);
+	s->homedir = talloc_strdup(s->state->mem_ctx, homedir);
+	s->shell = talloc_strdup(s->state->mem_ctx, shell);
+	s->gid = gid;	
+	sid_copy(&s->group_sid, &s->domain->sid);
+	sid_append_rid(&s->group_sid, group_rid);
+
+	winbindd_sid2uid_async(s->state->mem_ctx, &s->user_sid,
+			       getpwsid_sid2uid_recv, s);
+}
+
+static void getpwsid_sid2uid_recv(void *private_data, BOOL success, uid_t uid)
+{
+	struct getpwsid_state *s =
+		talloc_get_type_abort(private_data, struct getpwsid_state);
+
+	if (!success) {
+		DEBUG(5, ("Could not query uid for user %s\\%s\n",
+			  s->domain->name, s->username));
+		request_error(s->state);
+		return;
+	}
+
+	s->uid = uid;
+	winbindd_sid2gid_async(s->state->mem_ctx, &s->group_sid,
+			       getpwsid_sid2gid_recv, s);
+}
+
+static void getpwsid_sid2gid_recv(void *private_data, BOOL success, gid_t gid)
+{
+	struct getpwsid_state *s =
+		talloc_get_type_abort(private_data, struct getpwsid_state);
+	struct winbindd_pw *pw;
+	fstring output_username;
+
+	/* allow the nss backend to override the primary group ID.
+	   If the gid has already been set, then keep it.
+	   This makes me feel dirty.  If the nss backend already
+	   gave us a gid, we don't really care whether the sid2gid()
+	   call worked or not.   --jerry  */
+
+	if ( s->gid == (gid_t)-1 ) {
+
+		if (!success) {
+			DEBUG(5, ("Could not query gid for user %s\\%s\n",
+				  s->domain->name, s->username));
+			goto failed;
+		}
+
+		/* take what the sid2gid() call gave us */
+		s->gid = gid;
+	}
+
+	pw = &s->state->response.data.pw;
+	pw->pw_uid = s->uid;
+	pw->pw_gid = s->gid;
+	fill_domain_username(output_username, s->domain->name, s->username, True); 
+	safe_strcpy(pw->pw_name, output_username, sizeof(pw->pw_name) - 1);
+	safe_strcpy(pw->pw_gecos, s->fullname, sizeof(pw->pw_gecos) - 1);
+
+	if (!fillup_pw_field(lp_template_homedir(), s->username, s->domain->name, 
+			     pw->pw_uid, pw->pw_gid, s->homedir, pw->pw_dir)) {
+		DEBUG(5, ("Could not compose homedir\n"));
+		goto failed;
+	}
+
+	if (!fillup_pw_field(lp_template_shell(), s->username, s->domain->name, 
+			     pw->pw_uid, pw->pw_gid, s->shell, pw->pw_shell)) {
+		DEBUG(5, ("Could not compose shell\n"));
+		goto failed;
+	}
+
+	/* Password - set to "*" as we can't generate anything useful here.
+	   Authentication can be done using the pam_winbind module. */
+
+	safe_strcpy(pw->pw_passwd, "*", sizeof(pw->pw_passwd) - 1);
+
+	request_ok(s->state);
+	return;
+
+ failed:
+	request_error(s->state);
+}
+
+/* Return a password structure from a username.  */
+
+static void getpwnam_name2sid_recv(void *private_data, BOOL success,
+				   const DOM_SID *sid, enum lsa_SidType type);
+
+void winbindd_getpwnam(struct winbindd_cli_state *state)
+{
+	struct winbindd_domain *domain;
+	fstring domname, username;
+
+	/* Ensure null termination */
+	state->request.data.username[sizeof(state->request.data.username)-1]='\0';
+
+	DEBUG(3, ("[%5lu]: getpwnam %s\n", (unsigned long)state->pid,
+		  state->request.data.username));
+
+	ws_name_return( state->request.data.username, WB_REPLACE_CHAR );
+
+	if (!parse_domain_user(state->request.data.username, domname,
+			       username)) {
+		DEBUG(5, ("Could not parse domain user: %s\n",
+			  state->request.data.username));
+		request_error(state);
+		return;
+	}
+	
+	/* Get info for the domain */
+
+	domain = find_domain_from_name(domname);
+
+	if (domain == NULL) {
+		DEBUG(7, ("could not find domain entry for domain %s\n",
+			  domname));
+		request_error(state);
+		return;
+	}
+
+	if ( strequal(domname, lp_workgroup()) && lp_winbind_trusted_domains_only() ) {
+		DEBUG(7,("winbindd_getpwnam: My domain -- rejecting getpwnam() for %s\\%s.\n", 
+			domname, username));
+		request_error(state);
+		return;
+	}	
+
+	/* Get rid and name type from name.  The following costs 1 packet */
+
+	winbindd_lookupname_async(state->mem_ctx, domname, username,
+				  getpwnam_name2sid_recv, state);
+}
+
+static void getpwnam_name2sid_recv(void *private_data, BOOL success,
+				   const DOM_SID *sid, enum lsa_SidType type)
+{
+	struct winbindd_cli_state *state =
+		(struct winbindd_cli_state *)private_data;
+
+	if (!success) {
+		DEBUG(5, ("Could not lookup name for user %s\n",
+			  state->request.data.username));
+		request_error(state);
+		return;
+	}
+
+	if ((type != SID_NAME_USER) && (type != SID_NAME_COMPUTER)) {
+		DEBUG(5, ("%s is not a user\n", state->request.data.username));
+		request_error(state);
+		return;
+	}
+
+	winbindd_getpwsid(state, sid);
+}
+
+static void getpwuid_recv(void *private_data, BOOL success, const char *sid)
+{
+	struct winbindd_cli_state *state =
+		(struct winbindd_cli_state *)private_data;
+	DOM_SID user_sid;
+
+	if (!success) {
+		DEBUG(10,("uid2sid_recv: uid [%lu] to sid mapping failed\n.",
+			  (unsigned long)(state->request.data.uid)));
+		request_error(state);
+		return;
+	}
+	
+	DEBUG(10,("uid2sid_recv: uid %lu has sid %s\n",
+		  (unsigned long)(state->request.data.uid), sid));
+
+	string_to_sid(&user_sid, sid);
+	winbindd_getpwsid(state, &user_sid);
+}
+
+/* Return a password structure given a uid number */
+void winbindd_getpwuid(struct winbindd_cli_state *state)
+{
+	DEBUG(3, ("[%5lu]: getpwuid %lu\n", (unsigned long)state->pid, 
+		  (unsigned long)state->request.data.uid));
+
+	/* always query idmap via the async interface */
+	/* if this turns to be too slow we will add here a direct query to the cache */
+	winbindd_uid2sid_async(state->mem_ctx, state->request.data.uid, getpwuid_recv, state);
+}
+
+/*
+ * set/get/endpwent functions
+ */
+
+/* Rewind file pointer for ntdom passwd database */
+
+static BOOL winbindd_setpwent_internal(struct winbindd_cli_state *state)
+{
+	struct winbindd_domain *domain;
+        
+	DEBUG(3, ("[%5lu]: setpwent\n", (unsigned long)state->pid));
+        
+	/* Check user has enabled this */
+        
+	if (!lp_winbind_enum_users()) {
+		return False;
+	}
+
+	/* Free old static data if it exists */
+        
+	if (state->getpwent_state != NULL) {
+		free_getent_state(state->getpwent_state);
+		state->getpwent_state = NULL;
+	}
+
+#if 0	/* JERRY */
+	/* add any local users we have */
+	        
+	if ( (domain_state = (struct getent_state *)malloc(sizeof(struct getent_state))) == NULL )
+		return False;
+                
+	ZERO_STRUCTP(domain_state);
+
+	/* Add to list of open domains */
+                
+	DLIST_ADD(state->getpwent_state, domain_state);
+#endif
+        
+	/* Create sam pipes for each domain we know about */
+        
+	for(domain = domain_list(); domain != NULL; domain = domain->next) {
+		struct getent_state *domain_state;
+                
+		
+		/* don't add our domaina if we are a PDC or if we 
+		   are a member of a Samba domain */
+		
+		if ( (IS_DC || lp_winbind_trusted_domains_only())
+			&& strequal(domain->name, lp_workgroup()) )
+		{
+			continue;
+		}
+						
+		/* Create a state record for this domain */
+                
+		if ((domain_state = SMB_MALLOC_P(struct getent_state)) == NULL) {
+			DEBUG(0, ("malloc failed\n"));
+			return False;
+		}
+                
+		ZERO_STRUCTP(domain_state);
+
+		fstrcpy(domain_state->domain_name, domain->name);
+
+		/* Add to list of open domains */
+                
+		DLIST_ADD(state->getpwent_state, domain_state);
+	}
+        
+	state->getpwent_initialized = True;
+	return True;
+}
+
+void winbindd_setpwent(struct winbindd_cli_state *state)
+{
+	if (winbindd_setpwent_internal(state)) {
+		request_ok(state);
+	} else {
+		request_error(state);
+	}
+}
+
+/* Close file pointer to ntdom passwd database */
+
+void winbindd_endpwent(struct winbindd_cli_state *state)
+{
+	DEBUG(3, ("[%5lu]: endpwent\n", (unsigned long)state->pid));
+
+	free_getent_state(state->getpwent_state);    
+	state->getpwent_initialized = False;
+	state->getpwent_state = NULL;
+	request_ok(state);
+}
+
+/* Get partial list of domain users for a domain.  We fill in the sam_entries,
+   and num_sam_entries fields with domain user information.  The dispinfo_ndx
+   field is incremented to the index of the next user to fetch.  Return True if
+   some users were returned, False otherwise. */
+
+static BOOL get_sam_user_entries(struct getent_state *ent, TALLOC_CTX *mem_ctx)
+{
+	NTSTATUS status;
+	uint32 num_entries;
+	WINBIND_USERINFO *info;
+	struct getpwent_user *name_list = NULL;
+	struct winbindd_domain *domain;
+	struct winbindd_methods *methods;
+	unsigned int i;
+
+	if (ent->num_sam_entries)
+		return False;
+
+	if (!(domain = find_domain_from_name(ent->domain_name))) {
+		DEBUG(3, ("no such domain %s in get_sam_user_entries\n",
+			  ent->domain_name));
+		return False;
+	}
+
+	methods = domain->methods;
+
+	/* Free any existing user info */
+
+	SAFE_FREE(ent->sam_entries);
+	ent->num_sam_entries = 0;
+	
+	/* Call query_user_list to get a list of usernames and user rids */
+
+	num_entries = 0;
+
+	status = methods->query_user_list(domain, mem_ctx, &num_entries, 
+					  &info);
+		
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(10,("get_sam_user_entries: query_user_list failed with %s\n",
+			nt_errstr(status) ));
+		return False;
+	}
+
+	if (num_entries) {
+		name_list = SMB_REALLOC_ARRAY(name_list, struct getpwent_user, ent->num_sam_entries + num_entries);
+		
+		if (!name_list) {
+			DEBUG(0,("get_sam_user_entries realloc failed.\n"));
+			return False;
+		}
+	}
+
+	for (i = 0; i < num_entries; i++) {
+		/* Store account name and gecos */
+		if (!info[i].acct_name) {
+			fstrcpy(name_list[ent->num_sam_entries + i].name, "");
+		} else {
+			fstrcpy(name_list[ent->num_sam_entries + i].name, 
+				info[i].acct_name); 
+		}
+		if (!info[i].full_name) {
+			fstrcpy(name_list[ent->num_sam_entries + i].gecos, "");
+		} else {
+			fstrcpy(name_list[ent->num_sam_entries + i].gecos, 
+				info[i].full_name); 
+		}
+		if (!info[i].homedir) {
+			fstrcpy(name_list[ent->num_sam_entries + i].homedir, "");
+		} else {
+			fstrcpy(name_list[ent->num_sam_entries + i].homedir, 
+				info[i].homedir); 
+		}
+		if (!info[i].shell) {
+			fstrcpy(name_list[ent->num_sam_entries + i].shell, "");
+		} else {
+			fstrcpy(name_list[ent->num_sam_entries + i].shell, 
+				info[i].shell); 
+		}
+	
+	
+		/* User and group ids */
+		sid_copy(&name_list[ent->num_sam_entries+i].user_sid,
+			 &info[i].user_sid);
+		sid_copy(&name_list[ent->num_sam_entries+i].group_sid,
+			 &info[i].group_sid);
+	}
+		
+	ent->num_sam_entries += num_entries;
+	
+	/* Fill in remaining fields */
+	
+	ent->sam_entries = name_list;
+	ent->sam_entry_index = 0;
+	return ent->num_sam_entries > 0;
+}
+
+/* Fetch next passwd entry from ntdom database */
+
+#define MAX_GETPWENT_USERS 500
+
+void winbindd_getpwent(struct winbindd_cli_state *state)
+{
+	struct getent_state *ent;
+	struct winbindd_pw *user_list;
+	int num_users, user_list_ndx;
+
+	DEBUG(3, ("[%5lu]: getpwent\n", (unsigned long)state->pid));
+
+	/* Check user has enabled this */
+
+	if (!lp_winbind_enum_users()) {
+		request_error(state);
+		return;
+	}
+
+	/* Allocate space for returning a chunk of users */
+
+	num_users = MIN(MAX_GETPWENT_USERS, state->request.data.num_entries);
+
+	if (num_users == 0) {
+		request_error(state);
+		return;
+	}
+	
+	if ((state->response.extra_data.data = SMB_MALLOC_ARRAY(struct winbindd_pw, num_users)) == NULL) {
+		request_error(state);
+		return;
+	}
+
+	memset(state->response.extra_data.data, 0, num_users * 
+	       sizeof(struct winbindd_pw));
+
+	user_list = (struct winbindd_pw *)state->response.extra_data.data;
+
+	if (!state->getpwent_initialized)
+		winbindd_setpwent_internal(state);
+	
+	if (!(ent = state->getpwent_state)) {
+		request_error(state);
+		return;
+	}
+
+	/* Start sending back users */
+
+	for (user_list_ndx = 0; user_list_ndx < num_users; ) {
+		struct getpwent_user *name_list = NULL;
+		uint32 result;
+
+		/* Do we need to fetch another chunk of users? */
+
+		if (ent->num_sam_entries == ent->sam_entry_index) {
+
+			while(ent &&
+			      !get_sam_user_entries(ent, state->mem_ctx)) {
+				struct getent_state *next_ent;
+
+				/* Free state information for this domain */
+
+				SAFE_FREE(ent->sam_entries);
+
+				next_ent = ent->next;
+				DLIST_REMOVE(state->getpwent_state, ent);
+
+				SAFE_FREE(ent);
+				ent = next_ent;
+			}
+ 
+			/* No more domains */
+
+			if (!ent) 
+				break;
+		}
+
+		name_list = (struct getpwent_user *)ent->sam_entries;
+
+		/* Lookup user info */
+		
+		result = winbindd_fill_pwent(
+			ent->domain_name, 
+			name_list[ent->sam_entry_index].name,
+			&name_list[ent->sam_entry_index].user_sid,
+			&name_list[ent->sam_entry_index].group_sid,
+			name_list[ent->sam_entry_index].gecos,
+			name_list[ent->sam_entry_index].homedir,
+			name_list[ent->sam_entry_index].shell,
+			&user_list[user_list_ndx]);
+		
+		/* Add user to return list */
+		
+		if (result) {
+				
+			user_list_ndx++;
+			state->response.data.num_entries++;
+			state->response.length += 
+				sizeof(struct winbindd_pw);
+
+		} else
+			DEBUG(1, ("could not lookup domain user %s\n",
+				  name_list[ent->sam_entry_index].name));
+
+		ent->sam_entry_index++;
+		
+	}
+
+	/* Out of domains */
+
+	if (user_list_ndx > 0)
+		request_ok(state);
+	else
+		request_error(state);
+}
+
+/* List domain users without mapping to unix ids */
+
+void winbindd_list_users(struct winbindd_cli_state *state)
+{
+	struct winbindd_domain *domain;
+	WINBIND_USERINFO *info;
+	const char *which_domain;
+	uint32 num_entries = 0, total_entries = 0;
+	char *extra_data = NULL;
+	int extra_data_len = 0;
+	enum winbindd_result rv = WINBINDD_ERROR;
+
+	DEBUG(3, ("[%5lu]: list users\n", (unsigned long)state->pid));
+
+	/* Ensure null termination */
+	state->request.domain_name[sizeof(state->request.domain_name)-1]='\0';	
+	which_domain = state->request.domain_name;
+	
+	/* Enumerate over trusted domains */
+
+	for (domain = domain_list(); domain; domain = domain->next) {
+		NTSTATUS status;
+		struct winbindd_methods *methods;
+		unsigned int i;
+		
+		/* if we have a domain name restricting the request and this
+		   one in the list doesn't match, then just bypass the remainder
+		   of the loop */
+		   
+		if ( *which_domain && !strequal(which_domain, domain->name) )
+			continue;
+			
+		methods = domain->methods;
+
+		/* Query display info */
+		status = methods->query_user_list(domain, state->mem_ctx, 
+						  &num_entries, &info);
+
+		if (!NT_STATUS_IS_OK(status)) {
+			continue;
+		}
+
+		if (num_entries == 0)
+			continue;
+
+		/* Allocate some memory for extra data */
+		total_entries += num_entries;
+			
+		extra_data = (char *)SMB_REALLOC(
+			extra_data, sizeof(fstring) * total_entries);
+			
+		if (!extra_data) {
+			DEBUG(0,("failed to enlarge buffer!\n"));
+			goto done;
+		}
+
+		/* Pack user list into extra data fields */
+			
+		for (i = 0; i < num_entries; i++) {
+			fstring acct_name, name;
+			
+			if (!info[i].acct_name) {
+				fstrcpy(acct_name, "");
+			} else {
+				fstrcpy(acct_name, info[i].acct_name);
+			}
+			
+			fill_domain_username(name, domain->name, acct_name, True);
+			
+				/* Append to extra data */
+			memcpy(&extra_data[extra_data_len], name, 
+			       strlen(name));
+			extra_data_len += strlen(name);
+			extra_data[extra_data_len++] = ',';
+		}   
+        }
+
+	/* Assign extra_data fields in response structure */
+
+	if (extra_data) {
+		extra_data[extra_data_len - 1] = '\0';
+		state->response.extra_data.data = extra_data;
+		state->response.length += extra_data_len;
+	}
+
+	/* No domains responded but that's still OK so don't return an
+	   error. */
+
+	rv = WINBINDD_OK;
+
+ done:
+
+	if (rv == WINBINDD_OK)
+		request_ok(state);
+	else
+		request_error(state);
+}

Copied: branches/samba/upstream/source/nsswitch/winbindd_util.c (from rev 1928, branches/samba/upstream/source/nsswitch/winbindd_util.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/winbindd_util.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/winbindd_util.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,1099 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   Winbind daemon for ntdom nss module
+
+   Copyright (C) Tim Potter 2000-2001
+   Copyright (C) 2001 by Martin Pool <mbp at samba.org>
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "winbindd.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_WINBIND
+
+extern struct winbindd_methods cache_methods;
+extern struct winbindd_methods passdb_methods;
+
+/**
+ * @file winbindd_util.c
+ *
+ * Winbind daemon for NT domain authentication nss module.
+ **/
+
+
+/* The list of trusted domains.  Note that the list can be deleted and
+   recreated using the init_domain_list() function so pointers to
+   individual winbindd_domain structures cannot be made.  Keep a copy of
+   the domain name instead. */
+
+static struct winbindd_domain *_domain_list;
+
+/**
+   When was the last scan of trusted domains done?
+   
+   0 == not ever
+*/
+
+static time_t last_trustdom_scan;
+
+struct winbindd_domain *domain_list(void)
+{
+	/* Initialise list */
+
+	if ((!_domain_list) && (!init_domain_list())) {
+		smb_panic("Init_domain_list failed\n");
+	}
+
+	return _domain_list;
+}
+
+/* Free all entries in the trusted domain list */
+
+void free_domain_list(void)
+{
+	struct winbindd_domain *domain = _domain_list;
+
+	while(domain) {
+		struct winbindd_domain *next = domain->next;
+		
+		DLIST_REMOVE(_domain_list, domain);
+		SAFE_FREE(domain);
+		domain = next;
+	}
+}
+
+static BOOL is_internal_domain(const DOM_SID *sid)
+{
+	if (sid == NULL)
+		return False;
+
+	return (sid_check_is_domain(sid) || sid_check_is_builtin(sid));
+}
+
+static BOOL is_in_internal_domain(const DOM_SID *sid)
+{
+	if (sid == NULL)
+		return False;
+
+	return (sid_check_is_in_our_domain(sid) || sid_check_is_in_builtin(sid));
+}
+
+
+/* Add a trusted domain to our list of domains */
+static struct winbindd_domain *add_trusted_domain(const char *domain_name, const char *alt_name,
+						  struct winbindd_methods *methods,
+						  const DOM_SID *sid)
+{
+	struct winbindd_domain *domain;
+	const char *alternative_name = NULL;
+	
+	/* ignore alt_name if we are not in an AD domain */
+	
+	if ( (lp_security() == SEC_ADS) && alt_name && *alt_name) {
+		alternative_name = alt_name;
+	}
+        
+	/* We can't call domain_list() as this function is called from
+	   init_domain_list() and we'll get stuck in a loop. */
+	for (domain = _domain_list; domain; domain = domain->next) {
+		if (strequal(domain_name, domain->name) ||
+		    strequal(domain_name, domain->alt_name)) {
+			return domain;
+		}
+		if (alternative_name && *alternative_name) {
+			if (strequal(alternative_name, domain->name) ||
+			    strequal(alternative_name, domain->alt_name)) {
+				return domain;
+			}
+		}
+		if (sid) {
+			if (is_null_sid(sid)) {
+				
+			} else if (sid_equal(sid, &domain->sid)) {
+				return domain;
+			}
+		}
+	}
+        
+	/* Create new domain entry */
+
+	if ((domain = SMB_MALLOC_P(struct winbindd_domain)) == NULL)
+		return NULL;
+
+	/* Fill in fields */
+        
+	ZERO_STRUCTP(domain);
+
+	/* prioritise the short name */
+	if (strchr_m(domain_name, '.') && alternative_name && *alternative_name) {
+		fstrcpy(domain->name, alternative_name);
+		fstrcpy(domain->alt_name, domain_name);
+	} else {
+		fstrcpy(domain->name, domain_name);
+		if (alternative_name) {
+			fstrcpy(domain->alt_name, alternative_name);
+		}
+	}
+
+	domain->methods = methods;
+	domain->backend = NULL;
+	domain->internal = is_internal_domain(sid);
+	domain->sequence_number = DOM_SEQUENCE_NONE;
+	domain->last_seq_check = 0;
+	domain->initialized = False;
+	domain->online = is_internal_domain(sid);
+	domain->check_online_timeout = 0;
+	if (sid) {
+		sid_copy(&domain->sid, sid);
+	}
+	
+	/* Link to domain list */
+	DLIST_ADD(_domain_list, domain);
+        
+	DEBUG(2,("Added domain %s %s %s\n", 
+		 domain->name, domain->alt_name,
+		 &domain->sid?sid_string_static(&domain->sid):""));
+        
+	return domain;
+}
+
+/********************************************************************
+  rescan our domains looking for new trusted domains
+********************************************************************/
+
+struct trustdom_state {
+	TALLOC_CTX *mem_ctx;
+	struct winbindd_response *response;
+};
+
+static void trustdom_recv(void *private_data, BOOL success);
+
+static void add_trusted_domains( struct winbindd_domain *domain )
+{
+	TALLOC_CTX *mem_ctx;
+	struct winbindd_request *request;
+	struct winbindd_response *response;
+
+	struct trustdom_state *state;
+
+	mem_ctx = talloc_init("add_trusted_domains");
+	if (mem_ctx == NULL) {
+		DEBUG(0, ("talloc_init failed\n"));
+		return;
+	}
+
+	request = TALLOC_ZERO_P(mem_ctx, struct winbindd_request);
+	response = TALLOC_P(mem_ctx, struct winbindd_response);
+	state = TALLOC_P(mem_ctx, struct trustdom_state);
+
+	if ((request == NULL) || (response == NULL) || (state == NULL)) {
+		DEBUG(0, ("talloc failed\n"));
+		talloc_destroy(mem_ctx);
+		return;
+	}
+
+	state->mem_ctx = mem_ctx;
+	state->response = response;
+
+	request->length = sizeof(*request);
+	request->cmd = WINBINDD_LIST_TRUSTDOM;
+
+	async_domain_request(mem_ctx, domain, request, response,
+			     trustdom_recv, state);
+}
+
+static void trustdom_recv(void *private_data, BOOL success)
+{
+	struct trustdom_state *state =
+		talloc_get_type_abort(private_data, struct trustdom_state);
+	struct winbindd_response *response = state->response;
+	char *p;
+
+	if ((!success) || (response->result != WINBINDD_OK)) {
+		DEBUG(1, ("Could not receive trustdoms\n"));
+		talloc_destroy(state->mem_ctx);
+		return;
+	}
+
+	p = (char *)response->extra_data.data;
+
+	while ((p != NULL) && (*p != '\0')) {
+		char *q, *sidstr, *alt_name;
+		DOM_SID sid;
+
+		alt_name = strchr(p, '\\');
+		if (alt_name == NULL) {
+			DEBUG(0, ("Got invalid trustdom response\n"));
+			break;
+		}
+
+		*alt_name = '\0';
+		alt_name += 1;
+
+		sidstr = strchr(alt_name, '\\');
+		if (sidstr == NULL) {
+			DEBUG(0, ("Got invalid trustdom response\n"));
+			break;
+		}
+
+		*sidstr = '\0';
+		sidstr += 1;
+
+		q = strchr(sidstr, '\n');
+		if (q != NULL)
+			*q = '\0';
+
+		if (!string_to_sid(&sid, sidstr)) {
+			/* Allow NULL sid for sibling domains */
+			if ( strcmp(sidstr,"S-0-0") == 0) {
+				sid_copy( &sid, &global_sid_NULL);				
+			} else {				
+				DEBUG(0, ("Got invalid trustdom response\n"));
+				break;
+			}			
+		}
+
+		if (find_domain_from_name_noinit(p) == NULL) {
+			struct winbindd_domain *domain;
+			char *alternate_name = NULL;
+			
+			/* use the real alt_name if we have one, else pass in NULL */
+
+			if ( !strequal( alt_name, "(null)" ) )
+				alternate_name = alt_name;
+
+			domain = add_trusted_domain(p, alternate_name,
+						    &cache_methods,
+						    &sid);
+			setup_domain_child(domain, &domain->child, NULL);
+		}
+		p=q;
+		if (p != NULL)
+			p += 1;
+	}
+
+	SAFE_FREE(response->extra_data.data);
+	talloc_destroy(state->mem_ctx);
+}
+
+/********************************************************************
+ Periodically we need to refresh the trusted domain cache for smbd 
+********************************************************************/
+
+void rescan_trusted_domains( void )
+{
+	time_t now = time(NULL);
+	
+	/* see if the time has come... */
+	
+	if ((now >= last_trustdom_scan) &&
+	    ((now-last_trustdom_scan) < WINBINDD_RESCAN_FREQ) )
+		return;
+		
+	/* this will only add new domains we didn't already know about */
+	
+	add_trusted_domains( find_our_domain() );
+
+	last_trustdom_scan = now;
+	
+	return;	
+}
+
+struct init_child_state {
+	TALLOC_CTX *mem_ctx;
+	struct winbindd_domain *domain;
+	struct winbindd_request *request;
+	struct winbindd_response *response;
+	void (*continuation)(void *private_data, BOOL success);
+	void *private_data;
+};
+
+static void init_child_recv(void *private_data, BOOL success);
+static void init_child_getdc_recv(void *private_data, BOOL success);
+
+enum winbindd_result init_child_connection(struct winbindd_domain *domain,
+					   void (*continuation)(void *private_data,
+								BOOL success),
+					   void *private_data)
+{
+	TALLOC_CTX *mem_ctx;
+	struct winbindd_request *request;
+	struct winbindd_response *response;
+	struct init_child_state *state;
+	struct winbindd_domain *request_domain;
+
+	mem_ctx = talloc_init("init_child_connection");
+	if (mem_ctx == NULL) {
+		DEBUG(0, ("talloc_init failed\n"));
+		return WINBINDD_ERROR;
+	}
+
+	request = TALLOC_ZERO_P(mem_ctx, struct winbindd_request);
+	response = TALLOC_P(mem_ctx, struct winbindd_response);
+	state = TALLOC_P(mem_ctx, struct init_child_state);
+
+	if ((request == NULL) || (response == NULL) || (state == NULL)) {
+		DEBUG(0, ("talloc failed\n"));
+		TALLOC_FREE(mem_ctx);
+		continuation(private_data, False);
+		return WINBINDD_ERROR;
+	}
+
+	request->length = sizeof(*request);
+
+	state->mem_ctx = mem_ctx;
+	state->domain = domain;
+	state->request = request;
+	state->response = response;
+	state->continuation = continuation;
+	state->private_data = private_data;
+
+	if (IS_DC || domain->primary) {
+		/* The primary domain has to find the DC name itself */
+		request->cmd = WINBINDD_INIT_CONNECTION;
+		fstrcpy(request->domain_name, domain->name);
+		request->data.init_conn.is_primary = True;
+		fstrcpy(request->data.init_conn.dcname, "");
+		async_request(mem_ctx, &domain->child, request, response,
+			      init_child_recv, state);
+		return WINBINDD_PENDING;
+	}
+
+	/* This is *not* the primary domain, let's ask our DC about a DC
+	 * name */
+
+	request->cmd = WINBINDD_GETDCNAME;
+	fstrcpy(request->domain_name, domain->name);
+
+	request_domain = find_our_domain();
+	
+	async_domain_request(mem_ctx, request_domain, request, response,
+			     init_child_getdc_recv, state);
+	return WINBINDD_PENDING;
+}
+
+static void init_child_getdc_recv(void *private_data, BOOL success)
+{
+	struct init_child_state *state =
+		talloc_get_type_abort(private_data, struct init_child_state);
+	const char *dcname = "";
+
+	DEBUG(10, ("Received getdcname response\n"));
+
+	if (success && (state->response->result == WINBINDD_OK)) {
+		dcname = state->response->data.dc_name;
+	}
+
+	state->request->cmd = WINBINDD_INIT_CONNECTION;
+	fstrcpy(state->request->domain_name, state->domain->name);
+	state->request->data.init_conn.is_primary = False;
+	fstrcpy(state->request->data.init_conn.dcname, dcname);
+
+	async_request(state->mem_ctx, &state->domain->child,
+		      state->request, state->response,
+		      init_child_recv, state);
+}
+
+static void init_child_recv(void *private_data, BOOL success)
+{
+	struct init_child_state *state =
+		talloc_get_type_abort(private_data, struct init_child_state);
+
+	DEBUG(5, ("Received child initialization response for domain %s\n",
+		  state->domain->name));
+
+	if ((!success) || (state->response->result != WINBINDD_OK)) {
+		DEBUG(3, ("Could not init child\n"));
+		state->continuation(state->private_data, False);
+		talloc_destroy(state->mem_ctx);
+		return;
+	}
+
+	fstrcpy(state->domain->name,
+		state->response->data.domain_info.name);
+	fstrcpy(state->domain->alt_name,
+		state->response->data.domain_info.alt_name);
+	string_to_sid(&state->domain->sid,
+		      state->response->data.domain_info.sid);
+	state->domain->native_mode =
+		state->response->data.domain_info.native_mode;
+	state->domain->active_directory =
+		state->response->data.domain_info.active_directory;
+	state->domain->sequence_number =
+		state->response->data.domain_info.sequence_number;
+
+	init_dc_connection(state->domain);
+
+	if (state->continuation != NULL)
+		state->continuation(state->private_data, True);
+	talloc_destroy(state->mem_ctx);
+}
+
+enum winbindd_result winbindd_dual_init_connection(struct winbindd_domain *domain,
+						   struct winbindd_cli_state *state)
+{
+	/* Ensure null termination */
+	state->request.domain_name
+		[sizeof(state->request.domain_name)-1]='\0';
+	state->request.data.init_conn.dcname
+		[sizeof(state->request.data.init_conn.dcname)-1]='\0';
+
+	if (strlen(state->request.data.init_conn.dcname) > 0) {
+		fstrcpy(domain->dcname, state->request.data.init_conn.dcname);
+	}
+
+	init_dc_connection(domain);
+
+	if (!domain->initialized) {
+		/* If we return error here we can't do any cached authentication,
+		   but we may be in disconnected mode and can't initialize correctly.
+		   Do what the previous code did and just return without initialization,
+		   once we go online we'll re-initialize.
+		*/
+		DEBUG(5, ("winbindd_dual_init_connection: %s returning without initialization "
+			"online = %d\n", domain->name, (int)domain->online ));
+	}
+
+	fstrcpy(state->response.data.domain_info.name, domain->name);
+	fstrcpy(state->response.data.domain_info.alt_name, domain->alt_name);
+	fstrcpy(state->response.data.domain_info.sid,
+		sid_string_static(&domain->sid));
+	
+	state->response.data.domain_info.native_mode
+		= domain->native_mode;
+	state->response.data.domain_info.active_directory
+		= domain->active_directory;
+	state->response.data.domain_info.primary
+		= domain->primary;
+	state->response.data.domain_info.sequence_number =
+		domain->sequence_number;
+
+	return WINBINDD_OK;
+}
+
+/* Look up global info for the winbind daemon */
+BOOL init_domain_list(void)
+{
+	struct winbindd_domain *domain;
+	int role = lp_server_role();
+
+	/* Free existing list */
+	free_domain_list();
+
+	/* Add ourselves as the first entry. */
+
+	if ( role == ROLE_DOMAIN_MEMBER ) {
+		DOM_SID our_sid;
+
+		if (!secrets_fetch_domain_sid(lp_workgroup(), &our_sid)) {
+			DEBUG(0, ("Could not fetch our SID - did we join?\n"));
+			return False;
+		}
+	
+		domain = add_trusted_domain( lp_workgroup(), lp_realm(),
+					     &cache_methods, &our_sid);
+		domain->primary = True;
+		setup_domain_child(domain, &domain->child, NULL);
+		
+		/* Even in the parent winbindd we'll need to
+		   talk to the DC, so try and see if we can
+		   contact it. Theoretically this isn't neccessary
+		   as the init_dc_connection() in init_child_recv()
+		   will do this, but we can start detecting the DC
+		   early here. */
+		set_domain_online_request(domain);
+	}
+
+	/* Local SAM */
+
+	domain = add_trusted_domain(get_global_sam_name(), NULL,
+				    &passdb_methods, get_global_sam_sid());
+	if ( role != ROLE_DOMAIN_MEMBER ) {
+		domain->primary = True;
+	}
+	setup_domain_child(domain, &domain->child, NULL);
+
+	/* BUILTIN domain */
+
+	domain = add_trusted_domain("BUILTIN", NULL, &passdb_methods,
+				    &global_sid_Builtin);
+	setup_domain_child(domain, &domain->child, NULL);
+
+	return True;
+}
+
+/** 
+ * Given a domain name, return the struct winbindd domain info for it 
+ *
+ * @note Do *not* pass lp_workgroup() to this function.  domain_list
+ *       may modify it's value, and free that pointer.  Instead, our local
+ *       domain may be found by calling find_our_domain().
+ *       directly.
+ *
+ *
+ * @return The domain structure for the named domain, if it is working.
+ */
+
+struct winbindd_domain *find_domain_from_name_noinit(const char *domain_name)
+{
+	struct winbindd_domain *domain;
+
+	/* Search through list */
+
+	for (domain = domain_list(); domain != NULL; domain = domain->next) {
+		if (strequal(domain_name, domain->name) ||
+		    (domain->alt_name[0] &&
+		     strequal(domain_name, domain->alt_name))) {
+			return domain;
+		}
+	}
+
+	/* Not found */
+
+	return NULL;
+}
+
+struct winbindd_domain *find_domain_from_name(const char *domain_name)
+{
+	struct winbindd_domain *domain;
+
+	domain = find_domain_from_name_noinit(domain_name);
+
+	if (domain == NULL)
+		return NULL;
+
+	if (!domain->initialized)
+		init_dc_connection(domain);
+
+	return domain;
+}
+
+/* Given a domain sid, return the struct winbindd domain info for it */
+
+struct winbindd_domain *find_domain_from_sid_noinit(const DOM_SID *sid)
+{
+	struct winbindd_domain *domain;
+
+	/* Search through list */
+
+	for (domain = domain_list(); domain != NULL; domain = domain->next) {
+		if (sid_compare_domain(sid, &domain->sid) == 0)
+			return domain;
+	}
+
+	/* Not found */
+
+	return NULL;
+}
+
+/* Given a domain sid, return the struct winbindd domain info for it */
+
+struct winbindd_domain *find_domain_from_sid(const DOM_SID *sid)
+{
+	struct winbindd_domain *domain;
+
+	domain = find_domain_from_sid_noinit(sid);
+
+	if (domain == NULL)
+		return NULL;
+
+	if (!domain->initialized)
+		init_dc_connection(domain);
+
+	return domain;
+}
+
+struct winbindd_domain *find_our_domain(void)
+{
+	struct winbindd_domain *domain;
+
+	/* Search through list */
+
+	for (domain = domain_list(); domain != NULL; domain = domain->next) {
+		if (domain->primary)
+			return domain;
+	}
+
+	smb_panic("Could not find our domain\n");
+	return NULL;
+}
+
+struct winbindd_domain *find_root_domain(void)
+{
+	struct winbindd_domain *ours = find_our_domain();	
+	
+	if ( !ours )
+		return NULL;
+	
+	if ( strlen(ours->forest_name) == 0 )
+		return NULL;
+	
+	return find_domain_from_name( ours->forest_name );
+}
+
+struct winbindd_domain *find_builtin_domain(void)
+{
+	DOM_SID sid;
+	struct winbindd_domain *domain;
+
+	string_to_sid(&sid, "S-1-5-32");
+	domain = find_domain_from_sid(&sid);
+
+	if (domain == NULL)
+		smb_panic("Could not find BUILTIN domain\n");
+
+	return domain;
+}
+
+/* Find the appropriate domain to lookup a name or SID */
+
+struct winbindd_domain *find_lookup_domain_from_sid(const DOM_SID *sid)
+{
+	/* A DC can't ask the local smbd for remote SIDs, here winbindd is the
+	 * one to contact the external DC's. On member servers the internal
+	 * domains are different: These are part of the local SAM. */
+
+	DEBUG(10, ("find_lookup_domain_from_sid(%s)\n",
+		   sid_string_static(sid)));
+
+	if (IS_DC || is_internal_domain(sid) || is_in_internal_domain(sid)) {
+		DEBUG(10, ("calling find_domain_from_sid\n"));
+		return find_domain_from_sid(sid);
+	}
+
+	/* On a member server a query for SID or name can always go to our
+	 * primary DC. */
+
+	DEBUG(10, ("calling find_our_domain\n"));
+	return find_our_domain();
+}
+
+struct winbindd_domain *find_lookup_domain_from_name(const char *domain_name)
+{
+	if (IS_DC || strequal(domain_name, "BUILTIN") ||
+	    strequal(domain_name, get_global_sam_name()))
+		return find_domain_from_name_noinit(domain_name);
+
+	return find_our_domain();
+}
+
+/* Lookup a sid in a domain from a name */
+
+BOOL winbindd_lookup_sid_by_name(TALLOC_CTX *mem_ctx,
+				 struct winbindd_domain *domain, 
+				 const char *domain_name,
+				 const char *name, DOM_SID *sid, 
+				 enum lsa_SidType *type)
+{
+	NTSTATUS result;
+
+	/* Lookup name */
+	result = domain->methods->name_to_sid(domain, mem_ctx, domain_name, name, sid, type);
+
+	/* Return sid and type if lookup successful */
+	if (!NT_STATUS_IS_OK(result)) {
+		*type = SID_NAME_UNKNOWN;
+	}
+
+	return NT_STATUS_IS_OK(result);
+}
+
+/**
+ * @brief Lookup a name in a domain from a sid.
+ *
+ * @param sid Security ID you want to look up.
+ * @param name On success, set to the name corresponding to @p sid.
+ * @param dom_name On success, set to the 'domain name' corresponding to @p sid.
+ * @param type On success, contains the type of name: alias, group or
+ * user.
+ * @retval True if the name exists, in which case @p name and @p type
+ * are set, otherwise False.
+ **/
+BOOL winbindd_lookup_name_by_sid(TALLOC_CTX *mem_ctx,
+				 DOM_SID *sid,
+				 char **dom_name,
+				 char **name,
+				 enum lsa_SidType *type)
+{
+	NTSTATUS result;
+	struct winbindd_domain *domain;
+
+	*dom_name = NULL;
+	*name = NULL;
+
+	domain = find_lookup_domain_from_sid(sid);
+
+	if (!domain) {
+		DEBUG(1,("Can't find domain from sid\n"));
+		return False;
+	}
+
+	/* Lookup name */
+
+	result = domain->methods->sid_to_name(domain, mem_ctx, sid, dom_name, name, type);
+
+	/* Return name and type if successful */
+        
+	if (NT_STATUS_IS_OK(result)) {
+		return True;
+	}
+
+	*type = SID_NAME_UNKNOWN;
+        
+	return False;
+}
+
+/* Free state information held for {set,get,end}{pw,gr}ent() functions */
+
+void free_getent_state(struct getent_state *state)
+{
+	struct getent_state *temp;
+
+	/* Iterate over state list */
+
+	temp = state;
+
+	while(temp != NULL) {
+		struct getent_state *next;
+
+		/* Free sam entries then list entry */
+
+		SAFE_FREE(state->sam_entries);
+		DLIST_REMOVE(state, state);
+		next = temp->next;
+
+		SAFE_FREE(temp);
+		temp = next;
+	}
+}
+
+/* Is this a domain which we may assume no DOMAIN\ prefix? */
+
+static BOOL assume_domain(const char *domain)
+{
+	/* never assume the domain on a standalone server */
+
+	if ( lp_server_role() == ROLE_STANDALONE )
+		return False;
+
+	/* domain member servers may possibly assume for the domain name */
+
+	if ( lp_server_role() == ROLE_DOMAIN_MEMBER ) {
+		if ( !strequal(lp_workgroup(), domain) )
+			return False;
+
+		if ( lp_winbind_use_default_domain() || lp_winbind_trusted_domains_only() )
+			return True;
+	} 
+
+	/* only left with a domain controller */
+
+	if ( strequal(get_global_sam_name(), domain) )  {
+		return True;
+	}
+	
+	return False;
+}
+
+/* Parse a string of the form DOMAIN\user into a domain and a user */
+
+BOOL parse_domain_user(const char *domuser, fstring domain, fstring user)
+{
+	char *p = strchr(domuser,*lp_winbind_separator());
+
+	if ( !p ) {
+		fstrcpy(user, domuser);
+
+		if ( assume_domain(lp_workgroup())) {
+			fstrcpy(domain, lp_workgroup());
+		} else {
+			return False;
+		}
+	} else {
+		fstrcpy(user, p+1);
+		fstrcpy(domain, domuser);
+		domain[PTR_DIFF(p, domuser)] = 0;
+	}
+	
+	strupper_m(domain);
+	
+	return True;
+}
+
+BOOL parse_domain_user_talloc(TALLOC_CTX *mem_ctx, const char *domuser,
+			      char **domain, char **user)
+{
+	fstring fstr_domain, fstr_user;
+	if (!parse_domain_user(domuser, fstr_domain, fstr_user)) {
+		return False;
+	}
+	*domain = talloc_strdup(mem_ctx, fstr_domain);
+	*user = talloc_strdup(mem_ctx, fstr_user);
+	return ((*domain != NULL) && (*user != NULL));
+}
+
+/* Ensure an incoming username from NSS is fully qualified. Replace the
+   incoming fstring with DOMAIN <separator> user. Returns the same
+   values as parse_domain_user() but also replaces the incoming username.
+   Used to ensure all names are fully qualified within winbindd.
+   Used by the NSS protocols of auth, chauthtok, logoff and ccache_ntlm_auth.
+   The protocol definitions of auth_crap, chng_pswd_auth_crap
+   really should be changed to use this instead of doing things
+   by hand. JRA. */
+
+BOOL canonicalize_username(fstring username_inout, fstring domain, fstring user)
+{
+	if (!parse_domain_user(username_inout, domain, user)) {
+		return False;
+	}
+	slprintf(username_inout, sizeof(fstring) - 1, "%s%c%s",
+		 domain, *lp_winbind_separator(),
+		 user);
+	return True;
+}
+
+/*
+    Fill DOMAIN\\USERNAME entry accounting 'winbind use default domain' and
+    'winbind separator' options.
+    This means:
+	- omit DOMAIN when 'winbind use default domain = true' and DOMAIN is
+	lp_workgroup()
+
+    If we are a PDC or BDC, and this is for our domain, do likewise.
+
+    Also, if omit DOMAIN if 'winbind trusted domains only = true', as the 
+    username is then unqualified in unix
+
+    We always canonicalize as UPPERCASE DOMAIN, lowercase username.
+*/
+void fill_domain_username(fstring name, const char *domain, const char *user, BOOL can_assume)
+{
+	fstring tmp_user;
+
+	fstrcpy(tmp_user, user);
+	strlower_m(tmp_user);
+
+	if (can_assume && assume_domain(domain)) {
+		strlcpy(name, tmp_user, sizeof(fstring));
+	} else {
+		slprintf(name, sizeof(fstring) - 1, "%s%c%s",
+			 domain, *lp_winbind_separator(),
+			 tmp_user);
+	}
+}
+
+/*
+ * Winbindd socket accessor functions
+ */
+
+char *get_winbind_priv_pipe_dir(void) 
+{
+	return lock_path(WINBINDD_PRIV_SOCKET_SUBDIR);
+}
+
+/* Open the winbindd socket */
+
+static int _winbindd_socket = -1;
+static int _winbindd_priv_socket = -1;
+
+int open_winbindd_socket(void)
+{
+	if (_winbindd_socket == -1) {
+		_winbindd_socket = create_pipe_sock(
+			WINBINDD_SOCKET_DIR, WINBINDD_SOCKET_NAME, 0755);
+		DEBUG(10, ("open_winbindd_socket: opened socket fd %d\n",
+			   _winbindd_socket));
+	}
+
+	return _winbindd_socket;
+}
+
+int open_winbindd_priv_socket(void)
+{
+	if (_winbindd_priv_socket == -1) {
+		_winbindd_priv_socket = create_pipe_sock(
+			get_winbind_priv_pipe_dir(), WINBINDD_SOCKET_NAME, 0750);
+		DEBUG(10, ("open_winbindd_priv_socket: opened socket fd %d\n",
+			   _winbindd_priv_socket));
+	}
+
+	return _winbindd_priv_socket;
+}
+
+/* Close the winbindd socket */
+
+void close_winbindd_socket(void)
+{
+	if (_winbindd_socket != -1) {
+		DEBUG(10, ("close_winbindd_socket: closing socket fd %d\n",
+			   _winbindd_socket));
+		close(_winbindd_socket);
+		_winbindd_socket = -1;
+	}
+	if (_winbindd_priv_socket != -1) {
+		DEBUG(10, ("close_winbindd_socket: closing socket fd %d\n",
+			   _winbindd_priv_socket));
+		close(_winbindd_priv_socket);
+		_winbindd_priv_socket = -1;
+	}
+}
+
+/*
+ * Client list accessor functions
+ */
+
+static struct winbindd_cli_state *_client_list;
+static int _num_clients;
+
+/* Return list of all connected clients */
+
+struct winbindd_cli_state *winbindd_client_list(void)
+{
+	return _client_list;
+}
+
+/* Add a connection to the list */
+
+void winbindd_add_client(struct winbindd_cli_state *cli)
+{
+	DLIST_ADD(_client_list, cli);
+	_num_clients++;
+}
+
+/* Remove a client from the list */
+
+void winbindd_remove_client(struct winbindd_cli_state *cli)
+{
+	DLIST_REMOVE(_client_list, cli);
+	_num_clients--;
+}
+
+/* Close all open clients */
+
+void winbindd_kill_all_clients(void)
+{
+	struct winbindd_cli_state *cl = winbindd_client_list();
+
+	DEBUG(10, ("winbindd_kill_all_clients: going postal\n"));
+
+	while (cl) {
+		struct winbindd_cli_state *next;
+		
+		next = cl->next;
+		winbindd_remove_client(cl);
+		cl = next;
+	}
+}
+
+/* Return number of open clients */
+
+int winbindd_num_clients(void)
+{
+	return _num_clients;
+}
+
+NTSTATUS lookup_usergroups_cached(struct winbindd_domain *domain,
+				  TALLOC_CTX *mem_ctx,
+				  const DOM_SID *user_sid,
+				  uint32 *p_num_groups, DOM_SID **user_sids)
+{
+	NET_USER_INFO_3 *info3 = NULL;
+	NTSTATUS status = NT_STATUS_NO_MEMORY;
+	int i;
+	size_t num_groups = 0;
+	DOM_SID group_sid, primary_group;
+	
+	DEBUG(3,(": lookup_usergroups_cached\n"));
+	
+	*user_sids = NULL;
+	num_groups = 0;
+	*p_num_groups = 0;
+
+	info3 = netsamlogon_cache_get(mem_ctx, user_sid);
+
+	if (info3 == NULL) {
+		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
+	}
+
+	if (info3->num_groups == 0) {
+		TALLOC_FREE(info3);
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+	
+	/* always add the primary group to the sid array */
+	sid_compose(&primary_group, &info3->dom_sid.sid, info3->user_rid);
+	
+	if (!add_sid_to_array(mem_ctx, &primary_group, user_sids, &num_groups)) {
+		TALLOC_FREE(info3);
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	for (i=0; i<info3->num_groups; i++) {
+		sid_copy(&group_sid, &info3->dom_sid.sid);
+		sid_append_rid(&group_sid, info3->gids[i].g_rid);
+
+		if (!add_sid_to_array(mem_ctx, &group_sid, user_sids,
+				 &num_groups)) {
+			TALLOC_FREE(info3);
+			return NT_STATUS_NO_MEMORY;
+		}
+	}
+
+	TALLOC_FREE(info3);
+	*p_num_groups = num_groups;
+	status = (user_sids != NULL) ? NT_STATUS_OK : NT_STATUS_NO_MEMORY;
+	
+	DEBUG(3,(": lookup_usergroups_cached succeeded\n"));
+
+	return status;
+}
+
+/*********************************************************************
+ We use this to remove spaces from user and group names
+********************************************************************/
+
+void ws_name_replace( char *name, char replace )
+{
+	char replace_char[2] = { 0x0, 0x0 };
+    
+	if ( !lp_winbind_normalize_names() || (replace == '\0') ) 
+		return;
+
+	replace_char[0] = replace;	
+	all_string_sub( name, " ", replace_char, 0 );
+
+	return;	
+}
+
+/*********************************************************************
+ We use this to do the inverse of ws_name_replace()
+********************************************************************/
+
+void ws_name_return( char *name, char replace )
+{
+	char replace_char[2] = { 0x0, 0x0 };
+    
+	if ( !lp_winbind_normalize_names() || (replace == '\0') ) 
+		return;
+	
+	replace_char[0] = replace;	
+	all_string_sub( name, replace_char, " ", 0 );
+
+	return;	
+}

Copied: branches/samba/upstream/source/nsswitch/winbindd_wins.c (from rev 1928, branches/samba/upstream/source/nsswitch/winbindd_wins.c)
===================================================================
--- branches/samba/upstream/source/nsswitch/winbindd_wins.c	                        (rev 0)
+++ branches/samba/upstream/source/nsswitch/winbindd_wins.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,235 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   Winbind daemon - WINS related functions
+
+   Copyright (C) Andrew Tridgell 1999
+   Copyright (C) Herb Lewis 2002
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "winbindd.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_WINBIND
+
+/* Use our own create socket code so we don't recurse.... */
+
+static int wins_lookup_open_socket_in(void)
+{
+	struct sockaddr_in sock;
+	int val=1;
+	int res;
+
+	memset((char *)&sock,'\0',sizeof(sock));
+
+#ifdef HAVE_SOCK_SIN_LEN
+	sock.sin_len = sizeof(sock);
+#endif
+	sock.sin_port = 0;
+	sock.sin_family = AF_INET;
+	sock.sin_addr.s_addr = interpret_addr("0.0.0.0");
+	res = socket(AF_INET, SOCK_DGRAM, 0);
+	if (res == -1)
+		return -1;
+
+	setsockopt(res,SOL_SOCKET,SO_REUSEADDR,(char *)&val,sizeof(val));
+#ifdef SO_REUSEPORT
+	setsockopt(res,SOL_SOCKET,SO_REUSEPORT,(char *)&val,sizeof(val));
+#endif /* SO_REUSEPORT */
+
+	/* now we've got a socket - we need to bind it */
+
+	if (bind(res, (struct sockaddr * ) &sock,sizeof(sock)) < 0) {
+		close(res);
+		return(-1);
+	}
+
+	set_socket_options(res,"SO_BROADCAST");
+
+	return res;
+}
+
+
+static NODE_STATUS_STRUCT *lookup_byaddr_backend(char *addr, int *count)
+{
+	int fd;
+	struct in_addr  ip;
+	struct nmb_name nname;
+	NODE_STATUS_STRUCT *status;
+
+	fd = wins_lookup_open_socket_in();
+	if (fd == -1)
+		return NULL;
+
+	make_nmb_name(&nname, "*", 0);
+	ip = *interpret_addr2(addr);
+	status = node_status_query(fd,&nname,ip, count, NULL);
+
+	close(fd);
+	return status;
+}
+
+static struct in_addr *lookup_byname_backend(const char *name, int *count)
+{
+	int fd;
+	struct ip_service *ret = NULL;
+	struct in_addr *return_ip = NULL;
+	int j, i, flags = 0;
+
+	*count = 0;
+
+	/* always try with wins first */
+	if (resolve_wins(name,0x20,&ret,count)) {
+		if ( *count == 0 )
+			return NULL;
+		if ( (return_ip = SMB_MALLOC_ARRAY(struct in_addr, *count)) == NULL ) {
+			free( ret );
+			return NULL;
+		}
+
+		/* copy the IP addresses */
+		for ( i=0; i<(*count); i++ ) 
+			return_ip[i] = ret[i].ip;
+		
+		free( ret );
+		return return_ip;
+	}
+
+	fd = wins_lookup_open_socket_in();
+	if (fd == -1) {
+		return NULL;
+	}
+
+	/* uggh, we have to broadcast to each interface in turn */
+	for (j=iface_count() - 1;
+	     j >= 0;
+	     j--) {
+		struct in_addr *bcast = iface_n_bcast(j);
+		return_ip = name_query(fd,name,0x20,True,True,*bcast,count, &flags, NULL);
+		if (return_ip) {
+			break;
+		}
+	}
+
+	close(fd);
+	return return_ip;
+}
+
+/* Get hostname from IP  */
+
+void winbindd_wins_byip(struct winbindd_cli_state *state)
+{
+	fstring response;
+	int i, count, maxlen, size;
+	NODE_STATUS_STRUCT *status;
+
+	/* Ensure null termination */
+	state->request.data.winsreq[sizeof(state->request.data.winsreq)-1]='\0';
+
+	DEBUG(3, ("[%5lu]: wins_byip %s\n", (unsigned long)state->pid,
+		state->request.data.winsreq));
+
+	*response = '\0';
+	maxlen = sizeof(response) - 1;
+
+	if ((status = lookup_byaddr_backend(state->request.data.winsreq, &count))){
+	    size = strlen(state->request.data.winsreq);
+	    if (size > maxlen) {
+		SAFE_FREE(status);
+		request_error(state);
+		return;
+	    }
+	    fstrcat(response,state->request.data.winsreq);
+	    fstrcat(response,"\t");
+	    for (i = 0; i < count; i++) {
+		/* ignore group names */
+		if (status[i].flags & 0x80) continue;
+		if (status[i].type == 0x20) {
+			size = sizeof(status[i].name) + strlen(response);
+			if (size > maxlen) {
+			    SAFE_FREE(status);
+			    request_error(state);
+			    return;
+			}
+			fstrcat(response, status[i].name);
+			fstrcat(response, " ");
+		}
+	    }
+	    /* make last character a newline */
+	    response[strlen(response)-1] = '\n';
+	    SAFE_FREE(status);
+	}
+	fstrcpy(state->response.data.winsresp,response);
+	request_ok(state);
+}
+
+/* Get IP from hostname */
+
+void winbindd_wins_byname(struct winbindd_cli_state *state)
+{
+	struct in_addr *ip_list;
+	int i, count, maxlen, size;
+	fstring response;
+	char * addr;
+
+	/* Ensure null termination */
+	state->request.data.winsreq[sizeof(state->request.data.winsreq)-1]='\0';
+
+	DEBUG(3, ("[%5lu]: wins_byname %s\n", (unsigned long)state->pid,
+		state->request.data.winsreq));
+
+	*response = '\0';
+	maxlen = sizeof(response) - 1;
+
+	if ((ip_list = lookup_byname_backend(state->request.data.winsreq,&count))){
+		for (i = count; i ; i--) {
+		    addr = inet_ntoa(ip_list[i-1]);
+		    size = strlen(addr);
+		    if (size > maxlen) {
+			SAFE_FREE(ip_list);
+			request_error(state);
+			return;
+		    }
+		    if (i != 0) {
+			/* Clear out the newline character */
+		        /* But only if there is something in there, 
+			   otherwise we clobber something in the stack */
+			if (strlen(response))
+				response[strlen(response)-1] = ' '; 
+		    }
+		    fstrcat(response,addr);
+		    fstrcat(response,"\t");
+		}
+		size = strlen(state->request.data.winsreq) + strlen(response);
+		if (size > maxlen) {
+		    SAFE_FREE(ip_list);
+		    request_error(state);
+		    return;
+		}   
+		fstrcat(response,state->request.data.winsreq);
+		fstrcat(response,"\n");
+		SAFE_FREE(ip_list);
+	} else {
+		request_error(state);
+		return;
+	}
+
+	fstrcpy(state->response.data.winsresp,response);
+
+	request_ok(state);
+}

Modified: branches/samba/upstream/source/nsswitch/wins.c
===================================================================
--- branches/samba/upstream/source/nsswitch/wins.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/nsswitch/wins.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -31,7 +32,7 @@
 
 static int initialised;
 
-extern bool AllowDebugChange;
+extern BOOL AllowDebugChange;
 
 NSS_STATUS _nss_wins_gethostbyname_r(const char *hostname, struct hostent *he,
 			  char *buffer, size_t buflen, int *h_errnop);
@@ -58,15 +59,9 @@
 	if (res == -1)
 		return -1;
 
-	if (setsockopt(res,SOL_SOCKET,SO_REUSEADDR,(char *)&val,sizeof(val)) != 0) {
-		close(res);
-		return -1;
-	}
+	setsockopt(res,SOL_SOCKET,SO_REUSEADDR,(char *)&val,sizeof(val));
 #ifdef SO_REUSEPORT
-	if (setsockopt(res,SOL_SOCKET,SO_REUSEPORT,(char *)&val,sizeof(val)) != 0) {
-		close(res);
-		return -1;
-	}
+	setsockopt(res,SOL_SOCKET,SO_REUSEPORT,(char *)&val,sizeof(val));
 #endif /* SO_REUSEPORT */
 
 	/* now we've got a socket - we need to bind it */
@@ -91,7 +86,7 @@
 	TimeInit();
 	setup_logging("nss_wins",False);
 	load_case_tables();
-	lp_load(get_dyn_CONFIGFILE(),True,False,False,True);
+	lp_load(dyn_CONFIGFILE,True,False,False,True);
 	load_interfaces();
 }
 
@@ -109,17 +104,12 @@
 	*count = 0;
 
 	/* always try with wins first */
-	if (NT_STATUS_IS_OK(resolve_wins(name,0x00,&address,count))) {
+	if (resolve_wins(name,0x00,&address,count)) {
 		if ( (ret = SMB_MALLOC_P(struct in_addr)) == NULL ) {
 			free( address );
 			return NULL;
 		}
-		if (address[0].ss.ss_family != AF_INET) {
-			free(address);
-			free(ret);
-			return NULL;
-		}
-		*ret = ((struct sockaddr_in *)&address[0].ss)->sin_addr;
+		*ret = address[0].ip;
 		free( address );
 		return ret;
 	}
@@ -131,21 +121,9 @@
 
 	/* uggh, we have to broadcast to each interface in turn */
 	for (j=iface_count() - 1;j >= 0;j--) {
-		const struct in_addr *bcast = iface_n_bcast_v4(j);
-		struct sockaddr_storage ss;
-		struct sockaddr_storage *pss;
-		if (!bcast) {
-			continue;
-		}
-		in_addr_to_sockaddr_storage(&ss, *bcast);
-		pss = name_query(fd,name,0x00,True,True,&ss,count, &flags, NULL);
-		if (pss) {
-			if ((ret = SMB_MALLOC_P(struct in_addr)) == NULL) {
-				return NULL;
-			}
-			*ret = ((struct sockaddr_in *)pss)->sin_addr;
-			break;
-		}
+		struct in_addr *bcast = iface_n_bcast(j);
+		ret = name_query(fd,name,0x00,True,True,*bcast,count, &flags, NULL);
+		if (ret) break;
 	}
 
 	close(fd);
@@ -157,7 +135,7 @@
 static NODE_STATUS_STRUCT *lookup_byaddr_backend(char *addr, int *count)
 {
 	int fd;
-	struct sockaddr_storage ss;
+	struct in_addr  ip;
 	struct nmb_name nname;
 	NODE_STATUS_STRUCT *status;
 
@@ -170,10 +148,8 @@
 		return NULL;
 
 	make_nmb_name(&nname, "*", 0);
-	if (!interpret_string_addr(&ss, addr, AI_NUMERICHOST)) {
-		return NULL;
-	}
-	status = node_status_query(fd, &nname, &ss, count, NULL);
+	ip = *interpret_addr2(addr);
+	status = node_status_query(fd,&nname,ip, count, NULL);
 
 	close(fd);
 	return status;
@@ -197,7 +173,7 @@
 	NODE_STATUS_STRUCT *status;
 	int i, count, len, size;
 	char response[1024];
-	bool found = False;
+	BOOL found = False;
 
 	nsd_logprintf(NSD_LOG_MIN, "entering lookup (wins)\n");
 	if (! rq) 
@@ -340,10 +316,8 @@
 
 	namelen = strlen(name) + 1;
 
-	if ((he->h_name = get_static(&buffer, &buflen, namelen)) == NULL) {
-		free(ip_list);
+	if ((he->h_name = get_static(&buffer, &buflen, namelen)) == NULL)
 		return NSS_STATUS_TRYAGAIN;
-	}
 
 	memcpy(he->h_name, name, namelen);
 
@@ -352,29 +326,24 @@
 	if ((i = (unsigned long)(buffer) % sizeof(char*)) != 0)
 		i = sizeof(char*) - i;
 
-	if (get_static(&buffer, &buflen, i) == NULL) {
-		free(ip_list);
+	if (get_static(&buffer, &buflen, i) == NULL)
 		return NSS_STATUS_TRYAGAIN;
-	}
 
 	if ((he->h_addr_list = (char **)get_static(
-		     &buffer, &buflen, (count + 1) * sizeof(char *))) == NULL) {
-		free(ip_list);
+		     &buffer, &buflen, (count + 1) * sizeof(char *))) == NULL)
 		return NSS_STATUS_TRYAGAIN;
-	}
 
 	for (i = 0; i < count; i++) {
 		if ((he->h_addr_list[i] = get_static(&buffer, &buflen,
-						     INADDRSZ)) == NULL) {
-			free(ip_list);
+						     INADDRSZ)) == NULL)
 			return NSS_STATUS_TRYAGAIN;
-		}
 		memcpy(he->h_addr_list[i], &ip_list[i], INADDRSZ);
 	}
 
 	he->h_addr_list[count] = NULL;
 
-	free(ip_list);
+	if (ip_list)
+		free(ip_list);
 
 	/* Set h_addr_type and h_length */
 

Modified: branches/samba/upstream/source/pam_smbpass/general.h
===================================================================
--- branches/samba/upstream/source/pam_smbpass/general.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/pam_smbpass/general.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,17 +1,9 @@
 #ifndef LINUX
 /* This is only needed by modules in the Sun implementation. */
-#if defined(HAVE_SECURITY_PAM_APPL_H)
 #include <security/pam_appl.h>
-#elif defined(HAVE_PAM_PAM_APPL_H)
-#include <pam/pam_appl.h>
-#endif
 #endif  /* LINUX */
 
-#if defined(HAVE_SECURITY_PAM_MODULES_H)
 #include <security/pam_modules.h>
-#elif defined(HAVE_PAM_PAM_MODULES_H)
-#include <pam/pam_modules.h>
-#endif
 
 #ifndef PAM_AUTHTOK_RECOVER_ERR  
 #define PAM_AUTHTOK_RECOVER_ERR PAM_AUTHTOK_RECOVERY_ERR

Modified: branches/samba/upstream/source/pam_smbpass/pam_smb_acct.c
===================================================================
--- branches/samba/upstream/source/pam_smbpass/pam_smb_acct.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/pam_smbpass/pam_smb_acct.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -2,7 +2,7 @@
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 3 of the License, or (at your option)
+ * Software Foundation; either version 2 of the License, or (at your option)
  * any later version.
  *
  * This program is distributed in the hope that it will be useful, but WITHOUT
@@ -11,7 +11,8 @@
  * more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * this program; if not, see <http://www.gnu.org/licenses/>.
+ * this program; if not, write to the Free Software Foundation, Inc., 675
+ * Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /* indicate the following groups are defined */
@@ -22,19 +23,11 @@
 #ifndef LINUX
 
 /* This is only used in the Sun implementation. */
-#if defined(HAVE_SECURITY_PAM_APPL_H)
 #include <security/pam_appl.h>
-#elif defined(HAVE_PAM_PAM_APPL_H)
-#include <pam/pam_appl.h>
-#endif
 
 #endif  /* LINUX */
 
-#if defined(HAVE_SECURITY_PAM_MODULES_H)
 #include <security/pam_modules.h>
-#elif defined(HAVE_PAM_PAM_MODULES_H)
-#include <pam/pam_modules.h>
-#endif
 
 #include "general.h"
 
@@ -55,11 +48,12 @@
 	const char *name;
 	struct samu *sampass = NULL;
 	void (*oldsig_handler)(int);
+	extern BOOL in_client;
 
 	/* Samba initialization. */
 	load_case_tables();
 	setup_logging( "pam_smbpass", False );
-        lp_set_in_client(True);
+	in_client = True;
 
 	ctrl = set_ctrl( flags, argc, argv );
 
@@ -84,7 +78,7 @@
 	/* Getting into places that might use LDAP -- protect the app
 		from a SIGPIPE it's not expecting */
 	oldsig_handler = CatchSignal(SIGPIPE, SIGNAL_CAST SIG_IGN);
-	if (!initialize_password_db(True, NULL)) {
+	if (!initialize_password_db(True)) {
 		_log_err( LOG_ALERT, "Cannot access samba password database" );
 		CatchSignal(SIGPIPE, SIGNAL_CAST oldsig_handler);
 		return PAM_AUTHINFO_UNAVAIL;

Modified: branches/samba/upstream/source/pam_smbpass/pam_smb_auth.c
===================================================================
--- branches/samba/upstream/source/pam_smbpass/pam_smb_auth.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/pam_smbpass/pam_smb_auth.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -2,7 +2,7 @@
  *
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 3 of the License, or (at your option)
+ * Software Foundation; either version 2 of the License, or (at your option)
  * any later version.
  *
  * This program is distributed in the hope that it will be useful, but WITHOUT
@@ -11,7 +11,8 @@
  * more details.
  *
  * You should have received a copy of the GNU General Public License along with
- * this program; if not, see <http://www.gnu.org/licenses/>.
+ * this program; if not, write to the Free Software Foundation, Inc., 675
+ * Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /* indicate the following groups are defined */
@@ -23,19 +24,11 @@
 #ifndef LINUX
 
 /* This is only used in the Sun implementation. */
-#if defined(HAVE_SECURITY_PAM_APPL_H)
 #include <security/pam_appl.h>
-#elif defined(HAVE_PAM_PAM_APPL_H)
-#include <pam/pam_appl.h>
-#endif
 
 #endif  /* LINUX */
 
-#if defined(HAVE_SECURITY_PAM_MODULES_H)
 #include <security/pam_modules.h>
-#elif defined(HAVE_PAM_PAM_MODULES_H)
-#include <pam/pam_modules.h>
-#endif
 
 #include "general.h"
 
@@ -54,7 +47,7 @@
 } while (0)
 
 static int _smb_add_user(pam_handle_t *pamh, unsigned int ctrl,
-                         const char *name, struct samu *sampass, bool exist);
+                         const char *name, struct samu *sampass, BOOL exist);
 
 
 /*
@@ -72,9 +65,10 @@
 	unsigned int ctrl;
 	int retval, *ret_data = NULL;
 	struct samu *sampass = NULL;
+	extern BOOL in_client;
 	const char *name;
 	void (*oldsig_handler)(int) = NULL;
-	bool found;
+	BOOL found;
 
 	/* Points to memory managed by the PAM library. Do not free. */
 	char *p = NULL;
@@ -82,7 +76,7 @@
 	/* Samba initialization. */
 	load_case_tables();
 	setup_logging("pam_smbpass",False);
-        lp_set_in_client(True);
+	in_client = True;
 
 	ctrl = set_ctrl(flags, argc, argv);
 
@@ -108,12 +102,12 @@
 	}
 
 	if (geteuid() != 0) {
-		_log_err( LOG_DEBUG, "Cannot access samba password database, not running as root.");
+		_log_err(LOG_DEBUG, "Cannot access samba password database, not running as root.");
 		retval = PAM_AUTHINFO_UNAVAIL;
 		AUTH_RETURN;
 	}
 
-	if (!initialize_password_db(True, NULL)) {
+	if (!initialize_password_db(True)) {
 		_log_err( LOG_ALERT, "Cannot access samba password database" );
 		retval = PAM_AUTHINFO_UNAVAIL;
 		AUTH_RETURN;
@@ -141,7 +135,7 @@
 		sampass = NULL;
 		AUTH_RETURN;
 	}
-
+   
 	/* if this user does not have a password... */
 
 	if (_smb_blankpasswd( ctrl, sampass )) {
@@ -175,82 +169,98 @@
 int pam_sm_setcred(pam_handle_t *pamh, int flags,
                    int argc, const char **argv)
 {
-	int retval, *pretval = NULL;
+    int retval, *pretval = NULL;
 
-	retval = PAM_SUCCESS;
+    retval = PAM_SUCCESS;
 
-	pam_get_data(pamh, "smb_setcred_return", (const void **) &pretval);
-	if(pretval) {
-		retval = *pretval;
-		SAFE_FREE(pretval);
-	}
-	pam_set_data(pamh, "smb_setcred_return", NULL, NULL);
+    pam_get_data(pamh, "smb_setcred_return", (const void **) &pretval);
+    if(pretval) {
+	retval = *pretval;
+	SAFE_FREE(pretval);
+    }
+    pam_set_data(pamh, "smb_setcred_return", NULL, NULL);
 
-	return retval;
+    return retval;
 }
 
+
 /* Helper function for adding a user to the db. */
 static int _smb_add_user(pam_handle_t *pamh, unsigned int ctrl,
-                         const char *name, struct samu *sampass, bool exist)
+                         const char *name, struct samu *sampass, BOOL exist)
 {
-	char *err_str = NULL;
-	char *msg_str = NULL;
-	const char *pass = NULL;
-	int retval;
+    pstring err_str;
+    pstring msg_str;
+    const char *pass = NULL;
+    int retval;
 
-	/* Get the authtok; if we don't have one, silently fail. */
-	retval = pam_get_item( pamh, PAM_AUTHTOK, (const void **) &pass );
+    err_str[0] = '\0';
+    msg_str[0] = '\0';
 
-	if (retval != PAM_SUCCESS) {
-		_log_err( LOG_ALERT
-			, "pam_get_item returned error to pam_sm_authenticate" );
-		return PAM_AUTHTOK_RECOVER_ERR;
-	} else if (pass == NULL) {
-		return PAM_AUTHTOK_RECOVER_ERR;
-	}
+    /* Get the authtok; if we don't have one, silently fail. */
+    retval = pam_get_item( pamh, PAM_AUTHTOK, (const void **) &pass );
 
-	/* Add the user to the db if they aren't already there. */
-	if (!exist) {
-		retval = NT_STATUS_IS_OK(local_password_change(name, LOCAL_ADD_USER|LOCAL_SET_PASSWORD,
-					pass, &err_str, &msg_str));
-		if (!retval && err_str) {
-			make_remark(pamh, ctrl, PAM_ERROR_MSG, err_str );
-		} else if (msg_str) {
-			make_remark(pamh, ctrl, PAM_TEXT_INFO, msg_str );
-		}
-		pass = NULL;
+    if (retval != PAM_SUCCESS) {
+	_log_err( LOG_ALERT
+	          , "pam_get_item returned error to pam_sm_authenticate" );
+	return PAM_AUTHTOK_RECOVER_ERR;
+    } else if (pass == NULL) {
+	return PAM_AUTHTOK_RECOVER_ERR;
+    }
 
-		SAFE_FREE(err_str);
-		SAFE_FREE(msg_str);
-		return PAM_IGNORE;
-	} else {
-		/* mimick 'update encrypted' as long as the 'no pw req' flag is not set */
-		if ( pdb_get_acct_ctrl(sampass) & ~ACB_PWNOTREQ ) {
-			retval = NT_STATUS_IS_OK(local_password_change(name, LOCAL_SET_PASSWORD,
-					pass, &err_str, &msg_str));
-			if (!retval && err_str) {
-				make_remark(pamh, ctrl, PAM_ERROR_MSG, err_str );
-			} else if (msg_str) {
-				make_remark(pamh, ctrl, PAM_TEXT_INFO, msg_str );
-			}
-		}
+    /* Add the user to the db if they aren't already there. */
+   if (!exist) {
+	retval = NT_STATUS_IS_OK(local_password_change( name, LOCAL_ADD_USER|LOCAL_SET_PASSWORD,
+	                                 pass, err_str,
+	                                 sizeof(err_str),
+	                                 msg_str, sizeof(msg_str) ));
+	if (!retval && *err_str)
+	{
+	    err_str[PSTRING_LEN-1] = '\0';
+	    make_remark( pamh, ctrl, PAM_ERROR_MSG, err_str );
 	}
-    
-	SAFE_FREE(err_str);
-	SAFE_FREE(msg_str);
+	else if (*msg_str)
+	{
+	    msg_str[PSTRING_LEN-1] = '\0';
+	    make_remark( pamh, ctrl, PAM_TEXT_INFO, msg_str );
+	}
 	pass = NULL;
+
 	return PAM_IGNORE;
+   }
+   else {
+    /* mimick 'update encrypted' as long as the 'no pw req' flag is not set */
+    if ( pdb_get_acct_ctrl(sampass) & ~ACB_PWNOTREQ )
+    {
+	retval = NT_STATUS_IS_OK(local_password_change( name, LOCAL_SET_PASSWORD, pass, err_str, sizeof(err_str),
+	                                 msg_str, sizeof(msg_str) ));
+	if (!retval && *err_str)
+	{
+	    err_str[PSTRING_LEN-1] = '\0';
+	    make_remark( pamh, ctrl, PAM_ERROR_MSG, err_str );
+	}
+	else if (*msg_str)
+	{
+	    msg_str[PSTRING_LEN-1] = '\0';
+	    make_remark( pamh, ctrl, PAM_TEXT_INFO, msg_str );
+	}
+    }
+   }
+    
+    pass = NULL;
+
+    return PAM_IGNORE;
 }
 
+
 /* static module data */
 #ifdef PAM_STATIC
 struct pam_module _pam_smbpass_auth_modstruct = {
-	"pam_smbpass",
-	pam_sm_authenticate,
-	pam_sm_setcred,
-	NULL,
-	NULL,
-	NULL,
-	NULL
+     "pam_smbpass",
+     pam_sm_authenticate,
+     pam_sm_setcred,
+     NULL,
+     NULL,
+     NULL,
+     NULL
 };
 #endif

Modified: branches/samba/upstream/source/pam_smbpass/pam_smb_passwd.c
===================================================================
--- branches/samba/upstream/source/pam_smbpass/pam_smb_passwd.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/pam_smbpass/pam_smb_passwd.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
 */
 
@@ -28,18 +29,10 @@
    and others (including FreeBSD). */
 
 #ifndef LINUX
-#if defined(HAVE_SECURITY_PAM_APPL_H)
 #include <security/pam_appl.h>
-#elif defined(HAVE_PAM_PAM_APPL_H)
-#include <pam/pam_appl.h>
 #endif
-#endif
 
-#if defined(HAVE_SECURITY_PAM_MODULES_H)
 #include <security/pam_modules.h>
-#elif defined(HAVE_PAM_PAM_MODULES_H)
-#include <pam/pam_modules.h>
-#endif
 
 #include "general.h" 
 
@@ -48,29 +41,32 @@
 int smb_update_db( pam_handle_t *pamh, int ctrl, const char *user,  const char *pass_new )
 {
 	int retval;
-	char *err_str = NULL;
-	char *msg_str = NULL;
+	pstring err_str;
+	pstring msg_str;
 
-	retval = NT_STATUS_IS_OK(local_password_change(user, LOCAL_SET_PASSWORD, pass_new,
-	                                &err_str,
-	                                &msg_str));
+	err_str[0] = '\0';
+	msg_str[0] = '\0';
 
+	retval = NT_STATUS_IS_OK(local_password_change( user, LOCAL_SET_PASSWORD, pass_new,
+	                                err_str, sizeof(err_str),
+	                                msg_str, sizeof(msg_str) ));
+
 	if (!retval) {
-		if (err_str) {
-			make_remark(pamh, ctrl, PAM_ERROR_MSG, err_str );
+		if (*err_str) {
+			err_str[PSTRING_LEN-1] = '\0';
+			make_remark( pamh, ctrl, PAM_ERROR_MSG, err_str );
 		}
 
 		/* FIXME: what value is appropriate here? */
 		retval = PAM_AUTHTOK_ERR;
 	} else {
-		if (msg_str) {
-			make_remark(pamh, ctrl, PAM_TEXT_INFO, msg_str );
+		if (*msg_str) {
+			msg_str[PSTRING_LEN-1] = '\0';
+			make_remark( pamh, ctrl, PAM_TEXT_INFO, msg_str );
 		}
 		retval = PAM_SUCCESS;
 	}
 
-	SAFE_FREE(err_str);
-	SAFE_FREE(msg_str);
 	return retval;      
 }
 
@@ -98,6 +94,8 @@
     unsigned int ctrl;
     int retval;
 
+    extern BOOL in_client;
+
     struct samu *sampass = NULL;
     void (*oldsig_handler)(int);
     const char *user;
@@ -107,7 +105,7 @@
     /* Samba initialization. */
     load_case_tables();
     setup_logging( "pam_smbpass", False );
-    lp_set_in_client(True);
+    in_client = True;
 
     ctrl = set_ctrl(flags, argc, argv);
 
@@ -136,7 +134,7 @@
        from a SIGPIPE it's not expecting */
     oldsig_handler = CatchSignal(SIGPIPE, SIGNAL_CAST SIG_IGN);
 
-    if (!initialize_password_db(False, NULL)) {
+    if (!initialize_password_db(False)) {
         _log_err( LOG_ALERT, "Cannot access samba password database" );
         CatchSignal(SIGPIPE, SIGNAL_CAST oldsig_handler);
         return PAM_AUTHINFO_UNAVAIL;

Modified: branches/samba/upstream/source/pam_smbpass/support.c
===================================================================
--- branches/samba/upstream/source/pam_smbpass/support.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/pam_smbpass/support.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,130 +1,135 @@
-/* Unix NT password database implementation, version 0.6.
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 3 of the License, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, see <http://www.gnu.org/licenses/>.
- */
+	/* Unix NT password database implementation, version 0.6.
+	 *
+	 * This program is free software; you can redistribute it and/or modify it under
+	 * the terms of the GNU General Public License as published by the Free
+	 * Software Foundation; either version 2 of the License, or (at your option)
+	 * any later version.
+	 *
+	 * This program is distributed in the hope that it will be useful, but WITHOUT
+	 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+	 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+	 * more details.
+	 *
+	 * You should have received a copy of the GNU General Public License along with
+	 * this program; if not, write to the Free Software Foundation, Inc., 675
+	 * Mass Ave, Cambridge, MA 02139, USA.
+	 */
 
-#include "includes.h"
-#include "general.h"
+	#include "includes.h"
+	#include "general.h"
 
-#include "support.h"
+	#include "support.h"
 
 
-#define _pam_overwrite(x)        \
-do {                             \
-     register char *__xx__;      \
-     if ((__xx__=(x)))           \
-	  while (*__xx__)        \
-	       *__xx__++ = '\0'; \
-} while (0)
+	#define _pam_overwrite(x)        \
+	do {                             \
+	     register char *__xx__;      \
+	     if ((__xx__=(x)))           \
+		  while (*__xx__)        \
+		       *__xx__++ = '\0'; \
+	} while (0)
 
-/*
- * Don't just free it, forget it too.
- */
+	/*
+	 * Don't just free it, forget it too.
+	 */
 
-#define _pam_drop(X) \
-do {                 \
-    if (X) {         \
-	free(X);     \
-	X=NULL;      \
-    }                \
-} while (0)
+	#define _pam_drop(X) \
+	do {                 \
+	    if (X) {         \
+		free(X);     \
+		X=NULL;      \
+	    }                \
+	} while (0)
 
-#define _pam_drop_reply(/* struct pam_response * */ reply, /* int */ replies) \
-do {                                              \
-    int reply_i;                                  \
-						  \
-    for (reply_i=0; reply_i<replies; ++reply_i) { \
-	if (reply[reply_i].resp) {                \
-	    _pam_overwrite(reply[reply_i].resp);  \
-	    free(reply[reply_i].resp);            \
-	}                                         \
-    }                                             \
-    if (reply)                                    \
-	free(reply);                              \
-} while (0)
+	#define _pam_drop_reply(/* struct pam_response * */ reply, /* int */ replies) \
+	do {                                              \
+	    int reply_i;                                  \
+							  \
+	    for (reply_i=0; reply_i<replies; ++reply_i) { \
+		if (reply[reply_i].resp) {                \
+		    _pam_overwrite(reply[reply_i].resp);  \
+		    free(reply[reply_i].resp);            \
+		}                                         \
+	    }                                             \
+	    if (reply)                                    \
+		free(reply);                              \
+	} while (0)
 
 
-int converse(pam_handle_t *, int, int, struct pam_message **,
-			 struct pam_response **);
-int make_remark(pam_handle_t *, unsigned int, int, const char *);
-void _cleanup(pam_handle_t *, void *, int);
-char *_pam_delete(register char *);
+	int converse(pam_handle_t *, int, int, struct pam_message **,
+				 struct pam_response **);
+	int make_remark(pam_handle_t *, unsigned int, int, const char *);
+	void _cleanup(pam_handle_t *, void *, int);
+	char *_pam_delete(register char *);
 
-/* syslogging function for errors and other information */
+	/* default configuration file location */
 
-void _log_err( int err, const char *format, ... )
-{
-    va_list args;
+	char *servicesf = dyn_CONFIGFILE;
 
-    va_start( args, format );
-    openlog( "PAM_smbpass", LOG_CONS | LOG_PID, LOG_AUTH );
-    vsyslog( err, format, args );
-    va_end( args );
-    closelog();
-}
+	/* syslogging function for errors and other information */
 
-/* this is a front-end for module-application conversations */
+	void _log_err( int err, const char *format, ... )
+	{
+	    va_list args;
 
-int converse( pam_handle_t * pamh, int ctrl, int nargs
-	      , struct pam_message **message
-	      , struct pam_response **response )
-{
-	int retval;
-	struct pam_conv *conv;
+	    va_start( args, format );
+	    openlog( "PAM_smbpass", LOG_CONS | LOG_PID, LOG_AUTH );
+	    vsyslog( err, format, args );
+	    va_end( args );
+	    closelog();
+	}
 
-	retval = pam_get_item(pamh, PAM_CONV, (const void **) &conv);
-	if (retval == PAM_SUCCESS) {
+	/* this is a front-end for module-application conversations */
 
-		retval = conv->conv(nargs, (const struct pam_message **) message
-							,response, conv->appdata_ptr);
+	int converse( pam_handle_t * pamh, int ctrl, int nargs
+		      , struct pam_message **message
+		      , struct pam_response **response )
+	{
+		int retval;
+		struct pam_conv *conv;
 
-		if (retval != PAM_SUCCESS && on(SMB_DEBUG, ctrl)) {
-			_log_err(LOG_DEBUG, "conversation failure [%s]"
+		retval = pam_get_item(pamh, PAM_CONV, (const void **) &conv);
+		if (retval == PAM_SUCCESS) {
+
+			retval = conv->conv(nargs, (const struct pam_message **) message
+								,response, conv->appdata_ptr);
+
+			if (retval != PAM_SUCCESS && on(SMB_DEBUG, ctrl)) {
+				_log_err(LOG_DEBUG, "conversation failure [%s]"
+						 ,pam_strerror(pamh, retval));
+			}
+		} else {
+			_log_err(LOG_ERR, "couldn't obtain coversation function [%s]"
 					 ,pam_strerror(pamh, retval));
 		}
-	} else {
-		_log_err(LOG_ERR, "couldn't obtain coversation function [%s]"
-				 ,pam_strerror(pamh, retval));
+
+		return retval;				/* propagate error status */
 	}
 
-	return retval;				/* propagate error status */
-}
+	int make_remark( pam_handle_t * pamh, unsigned int ctrl
+			 , int type, const char *text )
+	{
+		if (off(SMB__QUIET, ctrl)) {
+			struct pam_message *pmsg[1], msg[1];
+			struct pam_response *resp;
 
-int make_remark( pam_handle_t * pamh, unsigned int ctrl
-		 , int type, const char *text )
-{
-	if (off(SMB__QUIET, ctrl)) {
-		struct pam_message *pmsg[1], msg[1];
-		struct pam_response *resp;
+			pmsg[0] = &msg[0];
+			msg[0].msg = CONST_DISCARD(char *, text);
+			msg[0].msg_style = type;
+			resp = NULL;
 
-		pmsg[0] = &msg[0];
-		msg[0].msg = CONST_DISCARD(char *, text);
-		msg[0].msg_style = type;
-		resp = NULL;
-
-		return converse(pamh, ctrl, 1, pmsg, &resp);
+			return converse(pamh, ctrl, 1, pmsg, &resp);
+		}
+		return PAM_SUCCESS;
 	}
-	return PAM_SUCCESS;
-}
 
 
-/* set the control flags for the SMB module. */
+	/* set the control flags for the SMB module. */
 
 int set_ctrl( int flags, int argc, const char **argv )
 {
     int i = 0;
-    const char *service_file = NULL;
+    const char *service_file = dyn_CONFIGFILE;
     unsigned int ctrl;
 
     ctrl = SMB_DEFAULTS;	/* the default selection of options */
@@ -135,7 +140,7 @@
     set( SMB__NONULL, ctrl );
 
     /* initialize service file location */
-    service_file=get_dyn_CONFIGFILE();
+    service_file=servicesf;
 
     if (flags & PAM_SILENT) {
         set( SMB__QUIET, ctrl );

Modified: branches/samba/upstream/source/pam_smbpass/support.h
===================================================================
--- branches/samba/upstream/source/pam_smbpass/support.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/pam_smbpass/support.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -21,10 +21,10 @@
 extern void _cleanup_failures(pam_handle_t *, void *, int);
 
 /* compare 2 strings */
-extern bool strequal(const char *, const char *);
+extern BOOL strequal(const char *, const char *);
 
 extern struct smb_passwd *
-_my_get_smbpwnam(FILE *, const char *, bool *, bool *, long *);
+_my_get_smbpwnam(FILE *, const char *, BOOL *, BOOL *, long *);
 
 extern int _smb_verify_password( pam_handle_t *pamh , struct samu *sampass, 
 	const char *p, unsigned int ctrl );

Modified: branches/samba/upstream/source/param/loadparm.c
===================================================================
--- branches/samba/upstream/source/param/loadparm.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/param/loadparm.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,11 +9,10 @@
    Copyright (C) Alexander Bokovoy 2002
    Copyright (C) Stefan (metze) Metzmacher 2002
    Copyright (C) Jim McDonough <jmcd at us.ibm.com> 2003
-   Copyright (C) Michael Adam 2008
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -22,7 +21,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /*
@@ -53,8 +53,10 @@
 
 #include "includes.h"
 
-bool bLoaded = False;
+BOOL in_client = False;		/* Not in the client by default */
+BOOL bLoaded = False;
 
+extern pstring user_socket_options;
 extern enum protocol_types Protocol;
 extern userdom_struct current_user_info;
 
@@ -70,23 +72,6 @@
 #define HOMES_NAME "homes"
 #endif
 
-/* the special value for the include parameter
- * to be interpreted not as a file name but to
- * trigger loading of the global smb.conf options
- * from registry. */
-#ifndef INCLUDE_REGISTRY_NAME
-#define INCLUDE_REGISTRY_NAME "registry"
-#endif
-
-static bool in_client = False;		/* Not in the client by default */
-static struct smbconf_csn conf_last_csn;
-static struct smbconf_ctx *conf_ctx = NULL;
-
-#define CONFIG_BACKEND_FILE 0
-#define CONFIG_BACKEND_REGISTRY 1
-
-static int config_backend = CONFIG_BACKEND_FILE;
-
 /* some helpful bits */
 #define LP_SNUM_OK(i) (((i) >= 0) && ((i) < iNumServices) && (ServicePtrs != NULL) && ServicePtrs[(i)]->valid)
 #define VALID(i) (ServicePtrs != NULL && ServicePtrs[i]->valid)
@@ -94,9 +79,12 @@
 #define USERSHARE_VALID 1
 #define USERSHARE_PENDING_DELETE 2
 
+int keepalive = DEFAULT_KEEPALIVE;
+BOOL use_getwd_cache = True;
+
 extern int extra_time_offset;
 
-static bool defaults_saved = False;
+static BOOL defaults_saved = False;
 
 typedef struct _param_opt_struct param_opt_struct;
 struct _param_opt_struct {
@@ -106,11 +94,10 @@
 	char **list;
 };
 
-/*
+/* 
  * This structure describes global (ie., server-wide) parameters.
  */
-struct global {
-	int ConfigBackend;
+typedef struct {
 	char *smb_ports;
 	char *dos_charset;
 	char *unix_charset;
@@ -143,7 +130,7 @@
 	char *szRealm;
 	char *szAfsUsernameMap;
 	int iAfsTokenLifetime;
-	char *szLogNtTokenCommand;
+ 	char *szLogNtTokenCommand;
 	char *szUsernameMap;
 	char *szLogonScript;
 	char *szLogonPath;
@@ -163,7 +150,7 @@
 	char *szNameResolveOrder;
 	char *szPanicAction;
 	char *szAddUserScript;
-	char *szRenameUserScript;
+        char *szRenameUserScript;
 	char *szDelUserScript;
 	char *szAddGroupScript;
 	char *szDelGroupScript;
@@ -178,31 +165,29 @@
 	char *szWINSHook;
 	char *szUtmpDir;
 	char *szWtmpDir;
-	bool bUtmp;
+	BOOL bUtmp;
 	char *szIdmapUID;
 	char *szIdmapGID;
-	bool bPassdbExpandExplicit;
+	BOOL bPassdbExpandExplicit;
 	int AlgorithmicRidBase;
 	char *szTemplateHomedir;
 	char *szTemplateShell;
 	char *szWinbindSeparator;
-	bool bWinbindEnumUsers;
-	bool bWinbindEnumGroups;
-	bool bWinbindUseDefaultDomain;
-	bool bWinbindTrustedDomainsOnly;
-	bool bWinbindNestedGroups;
-	int  winbind_expand_groups;
-	bool bWinbindRefreshTickets;
-	bool bWinbindOfflineLogon;
-	bool bWinbindNormalizeNames;
-	bool bWinbindRpcOnly;
+	BOOL bWinbindEnumUsers;
+	BOOL bWinbindEnumGroups;
+	BOOL bWinbindUseDefaultDomain;
+	BOOL bWinbindTrustedDomainsOnly;
+	BOOL bWinbindNestedGroups;
+	BOOL bWinbindRefreshTickets;
+	BOOL bWinbindOfflineLogon;
+	BOOL bWinbindNormalizeNames;
 	char **szIdmapDomains;
 	char **szIdmapBackend; /* deprecated */
 	char *szIdmapAllocBackend;
 	char *szAddShareCommand;
 	char *szChangeShareCommand;
 	char *szDeleteShareCommand;
-	char **szEventLogs;
+        char **szEventLogs;
 	char *szGuestaccount;
 	char *szManglingMethod;
 	char **szServicesList;
@@ -220,19 +205,18 @@
 	int pwordlevel;
 	int unamelevel;
 	int deadtime;
-	bool getwd_cache;
 	int maxprotocol;
 	int minprotocol;
 	int security;
 	char **AuthMethods;
-	bool paranoid_server_security;
+	BOOL paranoid_server_security;
 	int maxdisksize;
 	int lpqcachetime;
 	int iMaxSmbdProcesses;
-	bool bDisableSpoolss;
+	BOOL bDisableSpoolss;
 	int syslog;
 	int os_level;
-	bool enhanced_browsing;
+	int enhanced_browsing;
 	int max_ttl;
 	int max_wins_ttl;
 	int min_wins_ttl;
@@ -258,98 +242,91 @@
 	int iAclCompat;
 	char *szCupsServer;
 	char *szIPrintServer;
-	char *ctdbdSocket;
-	char **szClusterAddresses;
-	bool clustering;
-	int ldap_passwd_sync;
+	int ldap_passwd_sync; 
 	int ldap_replication_sleep;
 	int ldap_timeout; /* This is initialised in init_globals */
-	int ldap_connection_timeout;
 	int ldap_page_size;
-	bool ldap_delete_dn;
-	bool bMsAddPrinterWizard;
-	bool bDNSproxy;
-	bool bWINSsupport;
-	bool bWINSproxy;
-	bool bLocalMaster;
-	int  iPreferredMaster;
-	int iDomainMaster;
-	bool bDomainLogons;
-	bool bEncryptPasswords;
-	bool bUpdateEncrypt;
+	BOOL ldap_delete_dn;
+	BOOL bMsAddPrinterWizard;
+	BOOL bDNSproxy;
+	BOOL bWINSsupport;
+	BOOL bWINSproxy;
+	BOOL bLocalMaster;
+	BOOL bPreferredMaster;
+	BOOL bDomainMaster;
+	BOOL bDomainLogons;
+	BOOL bEncryptPasswords;
+	BOOL bUpdateEncrypt;
 	int  clientSchannel;
 	int  serverSchannel;
-	bool bNullPasswords;
-	bool bObeyPamRestrictions;
-	bool bLoadPrinters;
+	BOOL bNullPasswords;
+	BOOL bObeyPamRestrictions;
+	BOOL bLoadPrinters;
 	int PrintcapCacheTime;
-	bool bLargeReadwrite;
-	bool bReadRaw;
-	bool bWriteRaw;
-	bool bSyslogOnly;
-	bool bBrowseList;
-	bool bNISHomeMap;
-	bool bTimeServer;
-	bool bBindInterfacesOnly;
-	bool bPamPasswordChange;
-	bool bUnixPasswdSync;
-	bool bPasswdChatDebug;
+	BOOL bLargeReadwrite;
+	BOOL bReadRaw;
+	BOOL bWriteRaw;
+	BOOL bReadbmpx;
+	BOOL bSyslogOnly;
+	BOOL bBrowseList;
+	BOOL bNISHomeMap;
+	BOOL bTimeServer;
+	BOOL bBindInterfacesOnly;
+	BOOL bPamPasswordChange;
+	BOOL bUnixPasswdSync;
+	BOOL bPasswdChatDebug;
 	int iPasswdChatTimeout;
-	bool bTimestampLogs;
-	bool bNTSmbSupport;
-	bool bNTPipeSupport;
-	bool bNTStatusSupport;
-	bool bStatCache;
+	BOOL bTimestampLogs;
+	BOOL bNTSmbSupport;
+	BOOL bNTPipeSupport;
+	BOOL bNTStatusSupport;
+	BOOL bStatCache;
 	int iMaxStatCacheSize;
-	bool bKernelOplocks;
-	bool bAllowTrustedDomains;
-	bool bLanmanAuth;
-	bool bNTLMAuth;
-	bool bUseSpnego;
-	bool bClientLanManAuth;
-	bool bClientNTLMv2Auth;
-	bool bClientPlaintextAuth;
-	bool bClientUseSpnego;
-	bool bDebugPrefixTimestamp;
-	bool bDebugHiresTimestamp;
-	bool bDebugPid;
-	bool bDebugUid;
-	bool bDebugClass;
-	bool bEnableCoreFiles;
-	bool bHostMSDfs;
-	bool bUseMmap;
-	bool bHostnameLookups;
-	bool bUnixExtensions;
-	bool bDisableNetbios;
-	bool bUseKerberosKeytab;
-	bool bDeferSharingViolations;
-	bool bEnablePrivileges;
-	bool bASUSupport;
-	bool bUsershareOwnerOnly;
-	bool bUsershareAllowGuests;
-	bool bRegistryShares;
+	BOOL bKernelOplocks;
+	BOOL bAllowTrustedDomains;
+	BOOL bLanmanAuth;
+	BOOL bNTLMAuth;
+	BOOL bUseSpnego;
+	BOOL bClientLanManAuth;
+	BOOL bClientNTLMv2Auth;
+	BOOL bClientPlaintextAuth;
+	BOOL bClientUseSpnego;
+	BOOL bDebugPrefixTimestamp;
+	BOOL bDebugHiresTimestamp;
+	BOOL bDebugPid;
+	BOOL bDebugUid;
+	BOOL bEnableCoreFiles;
+	BOOL bHostMSDfs;
+	BOOL bUseMmap;
+	BOOL bHostnameLookups;
+	BOOL bUnixExtensions;
+	BOOL bDisableNetbios;
+	BOOL bUseKerberosKeytab;
+	BOOL bDeferSharingViolations;
+	BOOL bEnablePrivileges;
+	BOOL bASUSupport;
+	BOOL bUsershareOwnerOnly;
+	BOOL bUsershareAllowGuests;
 	int restrict_anonymous;
 	int name_cache_timeout;
 	int client_signing;
 	int server_signing;
-	int client_ldap_sasl_wrapping;
 	int iUsershareMaxShares;
 	int iIdmapCacheTime;
 	int iIdmapNegativeCacheTime;
-	bool bResetOnZeroVC;
-	int iKeepalive;
-	int iminreceivefile;
+
+	BOOL bResetOnZeroVC;
 	param_opt_struct *param_opt;
-};
+} global;
 
-static struct global Globals;
+static global Globals;
 
-/*
- * This structure describes a single service.
+/* 
+ * This structure describes a single service. 
  */
-struct service {
-	bool valid;
-	bool autoloaded;
+typedef struct {
+	BOOL valid;
+	BOOL autoloaded;
 	int usershare;
 	time_t usershare_last_mod;
 	char *szService;
@@ -379,6 +356,7 @@
 	char **szHostsdeny;
 	char *szMagicScript;
 	char *szMagicOutput;
+	char *szMangledMap;
 	char *szVetoFiles;
 	char *szHideFiles;
 	char *szVetoOplockFiles;
@@ -413,84 +391,83 @@
 	int iCSCPolicy;
 	int iBlock_size;
 	int iDfreeCacheTime;
-	bool bPreexecClose;
-	bool bRootpreexecClose;
+	BOOL bPreexecClose;
+	BOOL bRootpreexecClose;
 	int  iCaseSensitive;
-	bool bCasePreserve;
-	bool bShortCasePreserve;
-	bool bHideDotFiles;
-	bool bHideSpecialFiles;
-	bool bHideUnReadable;
-	bool bHideUnWriteableFiles;
-	bool bBrowseable;
-	bool bAvailable;
-	bool bRead_only;
-	bool bNo_set_dir;
-	bool bGuest_only;
-	bool bAdministrative_share;
-	bool bGuest_ok;
-	bool bPrint_ok;
-	bool bMap_system;
-	bool bMap_hidden;
-	bool bMap_archive;
-	bool bStoreDosAttributes;
-	bool bDmapiSupport;
-	bool bLocking;
+	BOOL bCasePreserve;
+	BOOL bShortCasePreserve;
+	BOOL bHideDotFiles;
+	BOOL bHideSpecialFiles;
+	BOOL bHideUnReadable;
+	BOOL bHideUnWriteableFiles;
+	BOOL bBrowseable;
+	BOOL bAvailable;
+	BOOL bRead_only;
+	BOOL bNo_set_dir;
+	BOOL bGuest_only;
+	BOOL bAdministrative_share;
+	BOOL bGuest_ok;
+	BOOL bPrint_ok;
+	BOOL bMap_system;
+	BOOL bMap_hidden;
+	BOOL bMap_archive;
+	BOOL bStoreDosAttributes;
+	BOOL bDmapiSupport;
+	BOOL bLocking;
 	int iStrictLocking;
-	bool bPosixLocking;
-	bool bShareModes;
-	bool bOpLocks;
-	bool bLevel2OpLocks;
-	bool bOnlyUser;
-	bool bMangledNames;
-	bool bWidelinks;
-	bool bSymlinks;
-	bool bSyncAlways;
-	bool bStrictAllocate;
-	bool bStrictSync;
+	BOOL bPosixLocking;
+	BOOL bShareModes;
+	BOOL bOpLocks;
+	BOOL bLevel2OpLocks;
+	BOOL bOnlyUser;
+	BOOL bMangledNames;
+	BOOL bWidelinks;
+	BOOL bSymlinks;
+	BOOL bSyncAlways;
+	BOOL bStrictAllocate;
+	BOOL bStrictSync;
 	char magic_char;
-	struct bitmap *copymap;
-	bool bDeleteReadonly;
-	bool bFakeOplocks;
-	bool bDeleteVetoFiles;
-	bool bDosFilemode;
-	bool bDosFiletimes;
-	bool bDosFiletimeResolution;
-	bool bFakeDirCreateTimes;
-	bool bBlockingLocks;
-	bool bInheritPerms;
-	bool bInheritACLS;
-	bool bInheritOwner;
-	bool bMSDfsRoot;
-	bool bUseClientDriver;
-	bool bDefaultDevmode;
-	bool bForcePrintername;
-	bool bNTAclSupport;
-	bool bForceUnknownAclUser;
-	bool bUseSendfile;
-	bool bProfileAcls;
-	bool bMap_acl_inherit;
-	bool bAfs_Share;
-	bool bEASupport;
-	bool bAclCheckPermissions;
-	bool bAclMapFullControl;
-	bool bAclGroupControl;
-	bool bChangeNotify;
-	bool bKernelChangeNotify;
+	BOOL *copymap;
+	BOOL bDeleteReadonly;
+	BOOL bFakeOplocks;
+	BOOL bDeleteVetoFiles;
+	BOOL bDosFilemode;
+	BOOL bDosFiletimes;
+	BOOL bDosFiletimeResolution;
+	BOOL bFakeDirCreateTimes;
+	BOOL bBlockingLocks;
+	BOOL bInheritPerms;
+	BOOL bInheritACLS;
+	BOOL bInheritOwner;
+	BOOL bMSDfsRoot;
+	BOOL bUseClientDriver;
+	BOOL bDefaultDevmode;
+	BOOL bForcePrintername;
+	BOOL bNTAclSupport;
+	BOOL bForceUnknownAclUser;
+	BOOL bUseSendfile;
+	BOOL bProfileAcls;
+	BOOL bMap_acl_inherit;
+	BOOL bAfs_Share;
+	BOOL bEASupport;
+	BOOL bAclCheckPermissions;
+	BOOL bAclMapFullControl;
+	BOOL bAclGroupControl;
+	BOOL bChangeNotify;
+	BOOL bKernelChangeNotify;
 	int iallocation_roundup_size;
 	int iAioReadSize;
 	int iAioWriteSize;
 	int iMap_readonly;
 	int iDirectoryNameCacheSize;
-	int ismb_encrypt;
 	param_opt_struct *param_opt;
 
 	char dummy[3];		/* for alignment */
-};
+} service;
 
 
 /* This is a default service used to prime a services structure */
-static struct service sDefault = {
+static service sDefault = {
 	True,			/* valid */
 	False,			/* not autoloaded */
 	0,			/* not a usershare */
@@ -522,6 +499,7 @@
 	NULL,			/* szHostsdeny */
 	NULL,			/* szMagicScript */
 	NULL,			/* szMagicOutput */
+	NULL,			/* szMangledMap */
 	NULL,			/* szVetoFiles */
 	NULL,			/* szHideFiles */
 	NULL,			/* szVetoOplockFiles */
@@ -629,39 +607,38 @@
 #else
 	100,			/* iDirectoryNameCacheSize */
 #endif
-	Auto,			/* ismb_encrypt */
 	NULL,			/* Parametric options */
 
 	""			/* dummy */
 };
 
 /* local variables */
-static struct service **ServicePtrs = NULL;
+static service **ServicePtrs = NULL;
 static int iNumServices = 0;
 static int iServiceIndex = 0;
-static struct db_context *ServiceHash;
+static TDB_CONTEXT *ServiceHash;
 static int *invalid_services = NULL;
 static int num_invalid_services = 0;
-static bool bInGlobalSection = True;
-static bool bGlobalOnly = False;
+static BOOL bInGlobalSection = True;
+static BOOL bGlobalOnly = False;
 static int server_role;
 static int default_server_announce;
 
 #define NUMPARAMETERS (sizeof(parm_table) / sizeof(struct parm_struct))
 
 /* prototypes for the special type handlers */
-static bool handle_include( int snum, const char *pszParmValue, char **ptr);
-static bool handle_copy( int snum, const char *pszParmValue, char **ptr);
-static bool handle_netbios_name( int snum, const char *pszParmValue, char **ptr);
-static bool handle_idmap_uid( int snum, const char *pszParmValue, char **ptr);
-static bool handle_idmap_gid( int snum, const char *pszParmValue, char **ptr);
-static bool handle_debug_list( int snum, const char *pszParmValue, char **ptr );
-static bool handle_workgroup( int snum, const char *pszParmValue, char **ptr );
-static bool handle_netbios_aliases( int snum, const char *pszParmValue, char **ptr );
-static bool handle_netbios_scope( int snum, const char *pszParmValue, char **ptr );
-static bool handle_charset( int snum, const char *pszParmValue, char **ptr );
-static bool handle_printing( int snum, const char *pszParmValue, char **ptr);
-static bool handle_ldap_debug_level( int snum, const char *pszParmValue, char **ptr);
+static BOOL handle_include( int snum, const char *pszParmValue, char **ptr);
+static BOOL handle_copy( int snum, const char *pszParmValue, char **ptr);
+static BOOL handle_netbios_name( int snum, const char *pszParmValue, char **ptr);
+static BOOL handle_idmap_uid( int snum, const char *pszParmValue, char **ptr);
+static BOOL handle_idmap_gid( int snum, const char *pszParmValue, char **ptr);
+static BOOL handle_debug_list( int snum, const char *pszParmValue, char **ptr );
+static BOOL handle_workgroup( int snum, const char *pszParmValue, char **ptr );
+static BOOL handle_netbios_aliases( int snum, const char *pszParmValue, char **ptr );
+static BOOL handle_netbios_scope( int snum, const char *pszParmValue, char **ptr );
+static BOOL handle_charset( int snum, const char *pszParmValue, char **ptr );
+static BOOL handle_printing( int snum, const char *pszParmValue, char **ptr);
+static BOOL handle_ldap_debug_level( int snum, const char *pszParmValue, char **ptr);
 
 static void set_server_role(void);
 static void set_default_server_announce_type(void);
@@ -707,13 +684,6 @@
 	{-1, NULL}
 };
 
-static const struct enum_list enum_ldap_sasl_wrapping[] = {
-	{0, "plain"},
-	{ADS_AUTH_SASL_SIGN, "sign"},
-	{ADS_AUTH_SASL_SEAL, "seal"},
-	{-1, NULL}
-};
-
 static const struct enum_list enum_ldap_ssl[] = {
 	{LDAP_SSL_OFF, "no"},
 	{LDAP_SSL_OFF, "No"},
@@ -854,14 +824,6 @@
 	{-1, NULL}
 };
 
-/* Config backend options */
-
-static const struct enum_list enum_config_backend[] = {
-	{CONFIG_BACKEND_FILE, "file"},
-	{CONFIG_BACKEND_REGISTRY, "registry"},
-	{-1, NULL}
-};
-
 /* Note: We do not initialise the defaults union - it is not allowed in ANSI C
  *
  * The FLAG_HIDE is explicit. Paramters set this way do NOT appear in any edit
@@ -881,3580 +843,470 @@
  */
 
 static struct parm_struct parm_table[] = {
-	{N_("Base Options"), P_SEP, P_SEPARATOR},
+	{N_("Base Options"), P_SEP, P_SEPARATOR}, 
 
-	{
-		.label		= "dos charset",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.dos_charset,
-		.special	= handle_charset,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED
-	},
-	{
-		.label		= "unix charset",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.unix_charset,
-		.special	= handle_charset,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED
-	},
-	{
-		.label		= "display charset",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.display_charset,
-		.special	= handle_charset,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED
-	},
-	{
-		.label		= "comment",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.comment,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT
-	},
-	{
-		.label		= "path",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szPath,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT,
-	},
-	{
-		.label		= "directory",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szPath,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "workgroup",
-		.type		= P_USTRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szWorkgroup,
-		.special	= handle_workgroup,
-		.enum_list	= NULL,
-		.flags		= FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD,
-	},
+	{"dos charset", P_STRING, P_GLOBAL, &Globals.dos_charset, handle_charset, NULL, FLAG_ADVANCED}, 
+	{"unix charset", P_STRING, P_GLOBAL, &Globals.unix_charset, handle_charset, NULL, FLAG_ADVANCED}, 
+	{"display charset", P_STRING, P_GLOBAL, &Globals.display_charset, handle_charset, NULL, FLAG_ADVANCED}, 
+	{"comment", P_STRING, P_LOCAL, &sDefault.comment, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, 
+	{"path", P_STRING, P_LOCAL, &sDefault.szPath, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, 
+	{"directory", P_STRING, P_LOCAL, &sDefault.szPath, NULL, NULL, FLAG_HIDE}, 
+	{"workgroup", P_USTRING, P_GLOBAL, &Globals.szWorkgroup, handle_workgroup, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, 
 #ifdef WITH_ADS
-	{
-		.label		= "realm",
-		.type		= P_USTRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szRealm,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD,
-	},
+	{"realm", P_USTRING, P_GLOBAL, &Globals.szRealm, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, 
 #endif
-	{
-		.label		= "netbios name",
-		.type		= P_USTRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szNetbiosName,
-		.special	= handle_netbios_name,
-		.enum_list	= NULL,
-		.flags		= FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD,
-	},
-	{
-		.label		= "netbios aliases",
-		.type		= P_LIST,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szNetbiosAliases,
-		.special	= handle_netbios_aliases,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "netbios scope",
-		.type		= P_USTRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szNetbiosScope,
-		.special	= handle_netbios_scope,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "server string",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szServerString,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_BASIC | FLAG_ADVANCED,
-	},
-	{
-		.label		= "interfaces",
-		.type		= P_LIST,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szInterfaces,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD,
-	},
-	{
-		.label		= "bind interfaces only",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bBindInterfacesOnly,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_WIZARD,
-	},
-	{
-		.label		= "config backend",
-		.type		= P_ENUM,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.ConfigBackend,
-		.special	= NULL,
-		.enum_list	= enum_config_backend,
-		.flags		= FLAG_ADVANCED,
-	},
+	{"netbios name", P_USTRING, P_GLOBAL, &Globals.szNetbiosName, handle_netbios_name, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, 
+	{"netbios aliases", P_LIST, P_GLOBAL, &Globals.szNetbiosAliases, handle_netbios_aliases,  NULL, FLAG_ADVANCED}, 
+	{"netbios scope", P_USTRING, P_GLOBAL, &Globals.szNetbiosScope, handle_netbios_scope,  NULL, FLAG_ADVANCED}, 
+	{"server string", P_STRING, P_GLOBAL, &Globals.szServerString, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED }, 
+	{"interfaces", P_LIST, P_GLOBAL, &Globals.szInterfaces, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, 
+	{"bind interfaces only", P_BOOL, P_GLOBAL, &Globals.bBindInterfacesOnly, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, 
 
-	{N_("Security Options"), P_SEP, P_SEPARATOR},
+	{N_("Security Options"), P_SEP, P_SEPARATOR}, 
 
-	{
-		.label		= "security",
-		.type		= P_ENUM,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.security,
-		.special	= NULL,
-		.enum_list	= enum_security,
-		.flags		= FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD,
-	},
-	{
-		.label		= "auth methods",
-		.type		= P_LIST,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.AuthMethods,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "encrypt passwords",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bEncryptPasswords,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD,
-	},
-	{
-		.label		= "update encrypted",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bUpdateEncrypt,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "client schannel",
-		.type		= P_ENUM,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.clientSchannel,
-		.special	= NULL,
-		.enum_list	= enum_bool_auto,
-		.flags		= FLAG_BASIC | FLAG_ADVANCED,
-	},
-	{
-		.label		= "server schannel",
-		.type		= P_ENUM,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.serverSchannel,
-		.special	= NULL,
-		.enum_list	= enum_bool_auto,
-		.flags		= FLAG_BASIC | FLAG_ADVANCED,
-	},
-	{
-		.label		= "allow trusted domains",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bAllowTrustedDomains,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "map to guest",
-		.type		= P_ENUM,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.map_to_guest,
-		.special	= NULL,
-		.enum_list	= enum_map_to_guest,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "null passwords",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bNullPasswords,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "obey pam restrictions",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bObeyPamRestrictions,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "password server",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szPasswordServer,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_WIZARD,
-	},
-	{
-		.label		= "smb passwd file",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szSMBPasswdFile,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "private dir",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szPrivateDir,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "passdb backend",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szPassdbBackend,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_WIZARD,
-	},
-	{
-		.label		= "algorithmic rid base",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.AlgorithmicRidBase,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "root directory",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szRootdir,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "root dir",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szRootdir,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "root",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szRootdir,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "guest account",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szGuestaccount,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_BASIC | FLAG_ADVANCED,
-	},
-	{
-		.label		= "enable privileges",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bEnablePrivileges,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
+	{"security", P_ENUM, P_GLOBAL, &Globals.security, NULL, enum_security, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, 
+	{"auth methods", P_LIST, P_GLOBAL, &Globals.AuthMethods, NULL, NULL, FLAG_ADVANCED}, 
+	{"encrypt passwords", P_BOOL, P_GLOBAL, &Globals.bEncryptPasswords, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, 
+	{"update encrypted", P_BOOL, P_GLOBAL, &Globals.bUpdateEncrypt, NULL, NULL, FLAG_ADVANCED}, 
+	{"client schannel", P_ENUM, P_GLOBAL, &Globals.clientSchannel, NULL, enum_bool_auto, FLAG_BASIC | FLAG_ADVANCED}, 
+	{"server schannel", P_ENUM, P_GLOBAL, &Globals.serverSchannel, NULL, enum_bool_auto, FLAG_BASIC | FLAG_ADVANCED}, 
+	{"allow trusted domains", P_BOOL, P_GLOBAL, &Globals.bAllowTrustedDomains, NULL, NULL, FLAG_ADVANCED}, 
+	{"map to guest", P_ENUM, P_GLOBAL, &Globals.map_to_guest, NULL, enum_map_to_guest, FLAG_ADVANCED}, 
+	{"null passwords", P_BOOL, P_GLOBAL, &Globals.bNullPasswords, NULL, NULL, FLAG_ADVANCED}, 
+	{"obey pam restrictions", P_BOOL, P_GLOBAL, &Globals.bObeyPamRestrictions, NULL, NULL, FLAG_ADVANCED}, 
+	{"password server", P_STRING, P_GLOBAL, &Globals.szPasswordServer, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, 
+	{"smb passwd file", P_STRING, P_GLOBAL, &Globals.szSMBPasswdFile, NULL, NULL, FLAG_ADVANCED}, 
+	{"private dir", P_STRING, P_GLOBAL, &Globals.szPrivateDir, NULL, NULL, FLAG_ADVANCED}, 
+	{"passdb backend", P_STRING, P_GLOBAL, &Globals.szPassdbBackend, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, 
+	{"algorithmic rid base", P_INTEGER, P_GLOBAL, &Globals.AlgorithmicRidBase, NULL, NULL, FLAG_ADVANCED}, 
+	{"root directory", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_ADVANCED}, 
+	{"root dir", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_HIDE}, 
+	{"root", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, FLAG_HIDE}, 
+	{"guest account", P_STRING, P_GLOBAL, &Globals.szGuestaccount, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED}, 
+	{"enable privileges", P_BOOL, P_GLOBAL, &Globals.bEnablePrivileges, NULL, NULL, FLAG_ADVANCED}, 
 
-	{
-		.label		= "pam password change",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bPamPasswordChange,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "passwd program",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szPasswdProgram,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "passwd chat",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szPasswdChat,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "passwd chat debug",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bPasswdChatDebug,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "passwd chat timeout",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.iPasswdChatTimeout,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "check password script",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szCheckPasswordScript,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "username map",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szUsernameMap,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "password level",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.pwordlevel,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "username level",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.unamelevel,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "unix password sync",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bUnixPasswdSync,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "restrict anonymous",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.restrict_anonymous,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "lanman auth",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bLanmanAuth,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "ntlm auth",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bNTLMAuth,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "client NTLMv2 auth",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bClientNTLMv2Auth,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "client lanman auth",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bClientLanManAuth,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "client plaintext auth",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bClientPlaintextAuth,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "username",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szUsername,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
-	},
-	{
-		.label		= "user",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szUsername,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "users",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szUsername,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "invalid users",
-		.type		= P_LIST,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szInvalidUsers,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
-	},
-	{
-		.label		= "valid users",
-		.type		= P_LIST,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szValidUsers,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
-	},
-	{
-		.label		= "admin users",
-		.type		= P_LIST,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szAdminUsers,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
-	},
-	{
-		.label		= "read list",
-		.type		= P_LIST,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.readlist,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
-	},
-	{
-		.label		= "write list",
-		.type		= P_LIST,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.writelist,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
-	},
-	{
-		.label		= "printer admin",
-		.type		= P_LIST,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.printer_admin,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL | FLAG_PRINT | FLAG_DEPRECATED,
-	},
-	{
-		.label		= "force user",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.force_user,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "force group",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.force_group,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "group",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.force_group,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "read only",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bRead_only,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "write ok",
-		.type		= P_BOOLREV,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bRead_only,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "writeable",
-		.type		= P_BOOLREV,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bRead_only,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "writable",
-		.type		= P_BOOLREV,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bRead_only,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "acl check permissions",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bAclCheckPermissions,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
-	},
-	{
-		.label		= "acl group control",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bAclGroupControl,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE | FLAG_DEPRECATED,
-	},
-	{
-		.label		= "acl map full control",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bAclMapFullControl,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
-	},
-	{
-		.label		= "create mask",
-		.type		= P_OCTAL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iCreate_mask,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
-	},
-	{
-		.label		= "create mode",
-		.type		= P_OCTAL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iCreate_mask,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "force create mode",
-		.type		= P_OCTAL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iCreate_force_mode,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
-	},
-	{
-		.label		= "security mask",
-		.type		= P_OCTAL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iSecurity_mask,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
-	},
-	{
-		.label		= "force security mode",
-		.type		= P_OCTAL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iSecurity_force_mode,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
-	},
-	{
-		.label		= "directory mask",
-		.type		= P_OCTAL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iDir_mask,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
-	},
-	{
-		.label		= "directory mode",
-		.type		= P_OCTAL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iDir_mask,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL,
-	},
-	{
-		.label		= "force directory mode",
-		.type		= P_OCTAL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iDir_force_mode,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
-	},
-	{
-		.label		= "directory security mask",
-		.type		= P_OCTAL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iDir_Security_mask,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
-	},
-	{
-		.label		= "force directory security mode",
-		.type		= P_OCTAL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iDir_Security_force_mode,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
-	},
-	{
-		.label		= "force unknown acl user",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bForceUnknownAclUser,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
-	},
-	{
-		.label		= "inherit permissions",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bInheritPerms,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "inherit acls",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bInheritACLS,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "inherit owner",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bInheritOwner,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "guest only",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bGuest_only,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "only guest",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bGuest_only,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "administrative share",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bAdministrative_share,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT,
-	},
+	{"pam password change", P_BOOL, P_GLOBAL, &Globals.bPamPasswordChange, NULL, NULL, FLAG_ADVANCED}, 
+	{"passwd program", P_STRING, P_GLOBAL, &Globals.szPasswdProgram, NULL, NULL, FLAG_ADVANCED}, 
+	{"passwd chat", P_STRING, P_GLOBAL, &Globals.szPasswdChat, NULL, NULL, FLAG_ADVANCED}, 
+	{"passwd chat debug", P_BOOL, P_GLOBAL, &Globals.bPasswdChatDebug, NULL, NULL, FLAG_ADVANCED}, 
+	{"passwd chat timeout", P_INTEGER, P_GLOBAL, &Globals.iPasswdChatTimeout, NULL, NULL, FLAG_ADVANCED}, 
+	{"check password script", P_STRING, P_GLOBAL, &Globals.szCheckPasswordScript, NULL, NULL, FLAG_ADVANCED}, 
+	{"username map", P_STRING, P_GLOBAL, &Globals.szUsernameMap, NULL, NULL, FLAG_ADVANCED}, 
+	{"password level", P_INTEGER, P_GLOBAL, &Globals.pwordlevel, NULL, NULL, FLAG_ADVANCED}, 
+	{"username level", P_INTEGER, P_GLOBAL, &Globals.unamelevel, NULL, NULL, FLAG_ADVANCED}, 
+	{"unix password sync", P_BOOL, P_GLOBAL, &Globals.bUnixPasswdSync, NULL, NULL, FLAG_ADVANCED}, 
+	{"restrict anonymous", P_INTEGER, P_GLOBAL, &Globals.restrict_anonymous, NULL, NULL, FLAG_ADVANCED}, 
+	{"lanman auth", P_BOOL, P_GLOBAL, &Globals.bLanmanAuth, NULL, NULL, FLAG_ADVANCED}, 
+	{"ntlm auth", P_BOOL, P_GLOBAL, &Globals.bNTLMAuth, NULL, NULL, FLAG_ADVANCED}, 
+	{"client NTLMv2 auth", P_BOOL, P_GLOBAL, &Globals.bClientNTLMv2Auth, NULL, NULL, FLAG_ADVANCED}, 
+	{"client lanman auth", P_BOOL, P_GLOBAL, &Globals.bClientLanManAuth, NULL, NULL, FLAG_ADVANCED}, 
+	{"client plaintext auth", P_BOOL, P_GLOBAL, &Globals.bClientPlaintextAuth, NULL, NULL, FLAG_ADVANCED}, 
 
-	{
-		.label		= "guest ok",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bGuest_ok,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT,
-	},
-	{
-		.label		= "public",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bGuest_ok,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "only user",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bOnlyUser,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_DEPRECATED,
-	},
-	{
-		.label		= "hosts allow",
-		.type		= P_LIST,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szHostsallow,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_GLOBAL | FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT,
-	},
-	{
-		.label		= "allow hosts",
-		.type		= P_LIST,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szHostsallow,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "hosts deny",
-		.type		= P_LIST,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szHostsdeny,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_GLOBAL | FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT,
-	},
-	{
-		.label		= "deny hosts",
-		.type		= P_LIST,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szHostsdeny,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "preload modules",
-		.type		= P_LIST,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szPreloadModules,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL,
-	},
-	{
-		.label		= "use kerberos keytab",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bUseKerberosKeytab,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
+	{"username", P_STRING, P_LOCAL, &sDefault.szUsername, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE}, 
+	{"user", P_STRING, P_LOCAL, &sDefault.szUsername, NULL, NULL, FLAG_HIDE}, 
+	{"users", P_STRING, P_LOCAL, &sDefault.szUsername, NULL, NULL, FLAG_HIDE}, 
 
-	{N_("Logging Options"), P_SEP, P_SEPARATOR},
+	{"invalid users", P_LIST, P_LOCAL, &sDefault.szInvalidUsers, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE}, 
+	{"valid users", P_LIST, P_LOCAL, &sDefault.szValidUsers, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE}, 
+	{"admin users", P_LIST, P_LOCAL, &sDefault.szAdminUsers, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE}, 
+	{"read list", P_LIST, P_LOCAL, &sDefault.readlist, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE}, 
+	{"write list", P_LIST, P_LOCAL, &sDefault.writelist, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE}, 
+	{"printer admin", P_LIST, P_LOCAL, &sDefault.printer_admin, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL | FLAG_PRINT | FLAG_DEPRECATED }, 
+	{"force user", P_STRING, P_LOCAL, &sDefault.force_user, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
+	{"force group", P_STRING, P_LOCAL, &sDefault.force_group, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
+	{"group", P_STRING, P_LOCAL, &sDefault.force_group, NULL, NULL, FLAG_ADVANCED}, 
 
-	{
-		.label		= "log level",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szLogLevel,
-		.special	= handle_debug_list,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "debuglevel",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szLogLevel,
-		.special	= handle_debug_list,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "syslog",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.syslog,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "syslog only",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bSyslogOnly,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "log file",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szLogFile,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "max log size",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.max_log_size,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "debug timestamp",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bTimestampLogs,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "timestamp logs",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bTimestampLogs,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "debug prefix timestamp",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bDebugPrefixTimestamp,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "debug hires timestamp",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bDebugHiresTimestamp,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "debug pid",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bDebugPid,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "debug uid",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bDebugUid,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "debug class",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bDebugClass,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "enable core files",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bEnableCoreFiles,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
+	{"read only", P_BOOL, P_LOCAL, &sDefault.bRead_only, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE}, 
+	{"write ok", P_BOOLREV, P_LOCAL, &sDefault.bRead_only, NULL, NULL, FLAG_HIDE}, 
+	{"writeable", P_BOOLREV, P_LOCAL, &sDefault.bRead_only, NULL, NULL, FLAG_HIDE}, 
+	{"writable", P_BOOLREV, P_LOCAL, &sDefault.bRead_only, NULL, NULL, FLAG_HIDE}, 
 
-	{N_("Protocol Options"), P_SEP, P_SEPARATOR},
+	{"acl check permissions", P_BOOL, P_LOCAL, &sDefault.bAclCheckPermissions, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE},
+	{"acl group control", P_BOOL, P_LOCAL, &sDefault.bAclGroupControl, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE | FLAG_DEPRECATED },
+	{"acl map full control", P_BOOL, P_LOCAL, &sDefault.bAclMapFullControl, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE},
+	{"create mask", P_OCTAL, P_LOCAL, &sDefault.iCreate_mask, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE}, 
+	{"create mode", P_OCTAL, P_LOCAL, &sDefault.iCreate_mask, NULL, NULL, FLAG_HIDE}, 
+	{"force create mode", P_OCTAL, P_LOCAL, &sDefault.iCreate_force_mode, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE}, 
+	{"security mask", P_OCTAL, P_LOCAL, &sDefault.iSecurity_mask, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE}, 
+	{"force security mode", P_OCTAL, P_LOCAL, &sDefault.iSecurity_force_mode, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE}, 
+	{"directory mask", P_OCTAL, P_LOCAL, &sDefault.iDir_mask, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE}, 
+	{"directory mode", P_OCTAL, P_LOCAL, &sDefault.iDir_mask, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL}, 
+	{"force directory mode", P_OCTAL, P_LOCAL, &sDefault.iDir_force_mode, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE}, 
+	{"directory security mask", P_OCTAL, P_LOCAL, &sDefault.iDir_Security_mask, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE}, 
+	{"force directory security mode", P_OCTAL, P_LOCAL, &sDefault.iDir_Security_force_mode, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE}, 
+	{"force unknown acl user", P_BOOL, P_LOCAL, &sDefault.bForceUnknownAclUser, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE},
+	{"inherit permissions", P_BOOL, P_LOCAL, &sDefault.bInheritPerms, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
+	{"inherit acls", P_BOOL, P_LOCAL, &sDefault.bInheritACLS, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
+	{"inherit owner", P_BOOL, P_LOCAL, &sDefault.bInheritOwner, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
+	{"guest only", P_BOOL, P_LOCAL, &sDefault.bGuest_only, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
+	{"only guest", P_BOOL, P_LOCAL, &sDefault.bGuest_only, NULL, NULL, FLAG_HIDE}, 
+	{"administrative share", P_BOOL, P_LOCAL, &sDefault.bAdministrative_share, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT},
 
-	{
-		.label		= "allocation roundup size",
-		.type		= P_INTEGER,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iallocation_roundup_size,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "aio read size",
-		.type		= P_INTEGER,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iAioReadSize,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "aio write size",
-		.type		= P_INTEGER,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iAioWriteSize,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "aio write behind",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szAioWriteBehind,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "smb ports",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.smb_ports,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "large readwrite",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bLargeReadwrite,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "max protocol",
-		.type		= P_ENUM,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.maxprotocol,
-		.special	= NULL,
-		.enum_list	= enum_protocol,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "protocol",
-		.type		= P_ENUM,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.maxprotocol,
-		.special	= NULL,
-		.enum_list	= enum_protocol,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "min protocol",
-		.type		= P_ENUM,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.minprotocol,
-		.special	= NULL,
-		.enum_list	= enum_protocol,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "min receivefile size",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.iminreceivefile,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "read raw",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bReadRaw,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "write raw",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bWriteRaw,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "disable netbios",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bDisableNetbios,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "reset on zero vc",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bResetOnZeroVC,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "acl compatibility",
-		.type		= P_ENUM,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.iAclCompat,
-		.special	= NULL,
-		.enum_list	= enum_acl_compat_vals,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "defer sharing violations",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bDeferSharingViolations,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL,
-	},
-	{
-		.label		= "ea support",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bEASupport,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "nt acl support",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bNTAclSupport,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "nt pipe support",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bNTPipeSupport,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "nt status support",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bNTStatusSupport,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "profile acls",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bProfileAcls,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
-	},
-	{
-		.label		= "announce version",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szAnnounceVersion,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "announce as",
-		.type		= P_ENUM,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.announce_as,
-		.special	= NULL,
-		.enum_list	= enum_announce_as,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "map acl inherit",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bMap_acl_inherit,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "afs share",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bAfs_Share,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "max mux",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.max_mux,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "max xmit",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.max_xmit,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "name resolve order",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szNameResolveOrder,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_WIZARD,
-	},
-	{
-		.label		= "max ttl",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.max_ttl,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "max wins ttl",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.max_wins_ttl,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "min wins ttl",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.min_wins_ttl,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "time server",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bTimeServer,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "unix extensions",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bUnixExtensions,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "use spnego",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bUseSpnego,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "client signing",
-		.type		= P_ENUM,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.client_signing,
-		.special	= NULL,
-		.enum_list	= enum_smb_signing_vals,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "server signing",
-		.type		= P_ENUM,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.server_signing,
-		.special	= NULL,
-		.enum_list	= enum_smb_signing_vals,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "smb encrypt",
-		.type		= P_ENUM,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.ismb_encrypt,
-		.special	= NULL,
-		.enum_list	= enum_smb_signing_vals,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "client use spnego",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bClientUseSpnego,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "client ldap sasl wrapping",
-		.type		= P_ENUM,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.client_ldap_sasl_wrapping,
-		.special	= NULL,
-		.enum_list	= enum_ldap_sasl_wrapping,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "enable asu support",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bASUSupport,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "svcctl list",
-		.type		= P_LIST,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szServicesList,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
+	{"guest ok", P_BOOL, P_LOCAL, &sDefault.bGuest_ok, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, 
+	{"public", P_BOOL, P_LOCAL, &sDefault.bGuest_ok, NULL, NULL, FLAG_HIDE}, 
 
-	{N_("Tuning Options"), P_SEP, P_SEPARATOR},
+	{"only user", P_BOOL, P_LOCAL, &sDefault.bOnlyUser, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_DEPRECATED}, 
+	{"hosts allow", P_LIST, P_LOCAL, &sDefault.szHostsallow, NULL, NULL, FLAG_GLOBAL | FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, 
+	{"allow hosts", P_LIST, P_LOCAL, &sDefault.szHostsallow, NULL, NULL, FLAG_HIDE}, 
+	{"hosts deny", P_LIST, P_LOCAL, &sDefault.szHostsdeny, NULL, NULL, FLAG_GLOBAL | FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, 
+	{"deny hosts", P_LIST, P_LOCAL, &sDefault.szHostsdeny, NULL, NULL, FLAG_HIDE}, 
+	{"preload modules", P_LIST, P_GLOBAL, &Globals.szPreloadModules, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL}, 
+	{"use kerberos keytab", P_BOOL, P_GLOBAL, &Globals.bUseKerberosKeytab, NULL, NULL, FLAG_ADVANCED}, 
 
-	{
-		.label		= "block size",
-		.type		= P_INTEGER,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iBlock_size,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "deadtime",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.deadtime,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "getwd cache",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.getwd_cache,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "keepalive",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.iKeepalive,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "change notify",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bChangeNotify,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "directory name cache size",
-		.type		= P_INTEGER,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iDirectoryNameCacheSize,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "kernel change notify",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bKernelChangeNotify,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "lpq cache time",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.lpqcachetime,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "max smbd processes",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.iMaxSmbdProcesses,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "max connections",
-		.type		= P_INTEGER,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iMaxConnections,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "paranoid server security",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.paranoid_server_security,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "max disk size",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.maxdisksize,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "max open files",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.max_open_files,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "min print space",
-		.type		= P_INTEGER,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iMinPrintSpace,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_PRINT,
-	},
-	{
-		.label		= "socket options",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szSocketOptions,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "strict allocate",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bStrictAllocate,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "strict sync",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bStrictSync,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "sync always",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bSyncAlways,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "use mmap",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bUseMmap,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "use sendfile",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bUseSendfile,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "hostname lookups",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bHostnameLookups,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "write cache size",
-		.type		= P_INTEGER,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iWriteCacheSize,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_DEPRECATED,
-	},
-	{
-		.label		= "name cache timeout",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.name_cache_timeout,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "ctdbd socket",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.ctdbdSocket,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL,
-	},
-	{
-		.label		= "cluster addresses",
-		.type		= P_LIST,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szClusterAddresses,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL,
-	},
-	{
-		.label		= "clustering",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.clustering,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL,
-	},
+	{N_("Logging Options"), P_SEP, P_SEPARATOR}, 
 
-	{N_("Printing Options"), P_SEP, P_SEPARATOR},
+	{"log level", P_STRING, P_GLOBAL, &Globals.szLogLevel, handle_debug_list, NULL, FLAG_ADVANCED}, 
+	{"debuglevel", P_STRING, P_GLOBAL, &Globals.szLogLevel, handle_debug_list, NULL, FLAG_HIDE}, 
+	{"syslog", P_INTEGER, P_GLOBAL, &Globals.syslog, NULL, NULL, FLAG_ADVANCED}, 
+	{"syslog only", P_BOOL, P_GLOBAL, &Globals.bSyslogOnly, NULL, NULL, FLAG_ADVANCED}, 
+	{"log file", P_STRING, P_GLOBAL, &Globals.szLogFile, NULL, NULL, FLAG_ADVANCED}, 
 
-	{
-		.label		= "max reported print jobs",
-		.type		= P_INTEGER,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iMaxReportedPrintJobs,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_PRINT,
-	},
-	{
-		.label		= "max print jobs",
-		.type		= P_INTEGER,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iMaxPrintJobs,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_PRINT,
-	},
-	{
-		.label		= "load printers",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bLoadPrinters,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_PRINT,
-	},
-	{
-		.label		= "printcap cache time",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.PrintcapCacheTime,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_PRINT,
-	},
-	{
-		.label		= "printcap name",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szPrintcapname,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_PRINT,
-	},
-	{
-		.label		= "printcap",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szPrintcapname,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "printable",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bPrint_ok,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_PRINT,
-	},
-	{
-		.label		= "print ok",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bPrint_ok,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "printing",
-		.type		= P_ENUM,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iPrinting,
-		.special	= handle_printing,
-		.enum_list	= enum_printing,
-		.flags		= FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
-	},
-	{
-		.label		= "cups options",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szCupsOptions,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
-	},
-	{
-		.label		= "cups server",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szCupsServer,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
-	},
-	{
-		.label		= "iprint server",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szIPrintServer,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
-	},
-	{
-		.label		= "print command",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szPrintcommand,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
-	},
-	{
-		.label		= "disable spoolss",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bDisableSpoolss,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
-	},
-	{
-		.label		= "enable spoolss",
-		.type		= P_BOOLREV,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bDisableSpoolss,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "lpq command",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szLpqcommand,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
-	},
-	{
-		.label		= "lprm command",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szLprmcommand,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
-	},
-	{
-		.label		= "lppause command",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szLppausecommand,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
-	},
-	{
-		.label		= "lpresume command",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szLpresumecommand,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
-	},
-	{
-		.label		= "queuepause command",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szQueuepausecommand,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
-	},
-	{
-		.label		= "queueresume command",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szQueueresumecommand,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL,
-	},
-	{
-		.label		= "addport command",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szAddPortCommand,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "enumports command",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szEnumPortsCommand,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "addprinter command",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szAddPrinterCommand,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "deleteprinter command",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szDeletePrinterCommand,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "show add printer wizard",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bMsAddPrinterWizard,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "os2 driver map",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szOs2DriverMap,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
+	{"max log size", P_INTEGER, P_GLOBAL, &Globals.max_log_size, NULL, NULL, FLAG_ADVANCED}, 
+	{"debug timestamp", P_BOOL, P_GLOBAL, &Globals.bTimestampLogs, NULL, NULL, FLAG_ADVANCED}, 
+	{"timestamp logs", P_BOOL, P_GLOBAL, &Globals.bTimestampLogs, NULL, NULL, FLAG_ADVANCED}, 
+	{"debug prefix timestamp", P_BOOL, P_GLOBAL, &Globals.bDebugPrefixTimestamp, NULL, NULL, FLAG_ADVANCED}, 
+	{"debug hires timestamp", P_BOOL, P_GLOBAL, &Globals.bDebugHiresTimestamp, NULL, NULL, FLAG_ADVANCED}, 
+	{"debug pid", P_BOOL, P_GLOBAL, &Globals.bDebugPid, NULL, NULL, FLAG_ADVANCED}, 
+	{"debug uid", P_BOOL, P_GLOBAL, &Globals.bDebugUid, NULL, NULL, FLAG_ADVANCED}, 
+	{"enable core files", P_BOOL, P_GLOBAL, &Globals.bEnableCoreFiles, NULL, NULL, FLAG_ADVANCED},
 
-	{
-		.label		= "printer name",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szPrintername,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_PRINT,
-	},
-	{
-		.label		= "printer",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szPrintername,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "use client driver",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bUseClientDriver,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_PRINT,
-	},
-	{
-		.label		= "default devmode",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bDefaultDevmode,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_PRINT,
-	},
-	{
-		.label		= "force printername",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bForcePrintername,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_PRINT,
-	},
-	{
-		.label		= "printjob username",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szPrintjobUsername,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_PRINT,
-	},
+	{N_("Protocol Options"), P_SEP, P_SEPARATOR}, 
 
-	{N_("Filename Handling"), P_SEP, P_SEPARATOR},
+	{"allocation roundup size", P_INTEGER, P_LOCAL, &sDefault.iallocation_roundup_size, NULL, NULL, FLAG_ADVANCED}, 
+	{"aio read size", P_INTEGER, P_LOCAL, &sDefault.iAioReadSize, NULL, NULL, FLAG_ADVANCED}, 
+	{"aio write size", P_INTEGER, P_LOCAL, &sDefault.iAioWriteSize, NULL, NULL, FLAG_ADVANCED}, 
+	{"aio write behind", P_STRING, P_LOCAL, &sDefault.szAioWriteBehind, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL }, 
+	{"smb ports", P_STRING, P_GLOBAL, &Globals.smb_ports, NULL, NULL, FLAG_ADVANCED}, 
+	{"large readwrite", P_BOOL, P_GLOBAL, &Globals.bLargeReadwrite, NULL, NULL, FLAG_ADVANCED}, 
+	{"max protocol", P_ENUM, P_GLOBAL, &Globals.maxprotocol, NULL, enum_protocol, FLAG_ADVANCED}, 
+	{"protocol", P_ENUM, P_GLOBAL, &Globals.maxprotocol, NULL, enum_protocol, FLAG_ADVANCED}, 
+	{"min protocol", P_ENUM, P_GLOBAL, &Globals.minprotocol, NULL, enum_protocol, FLAG_ADVANCED}, 
+	{"read bmpx", P_BOOL, P_GLOBAL, &Globals.bReadbmpx, NULL, NULL, FLAG_ADVANCED}, 
+	{"read raw", P_BOOL, P_GLOBAL, &Globals.bReadRaw, NULL, NULL, FLAG_ADVANCED}, 
+	{"write raw", P_BOOL, P_GLOBAL, &Globals.bWriteRaw, NULL, NULL, FLAG_ADVANCED}, 
+	{"disable netbios", P_BOOL, P_GLOBAL, &Globals.bDisableNetbios, NULL, NULL, FLAG_ADVANCED}, 
+	{"reset on zero vc", P_BOOL, P_GLOBAL, &Globals.bResetOnZeroVC, NULL, NULL, FLAG_ADVANCED}, 
 
-	{
-		.label		= "mangling method",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szManglingMethod,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "mangle prefix",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.mangle_prefix,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
+	{"acl compatibility", P_ENUM, P_GLOBAL, &Globals.iAclCompat, NULL,  enum_acl_compat_vals, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"defer sharing violations", P_BOOL, P_GLOBAL, &Globals.bDeferSharingViolations, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL},
+	{"ea support", P_BOOL, P_LOCAL, &sDefault.bEASupport, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"nt acl support", P_BOOL, P_LOCAL, &sDefault.bNTAclSupport, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"nt pipe support", P_BOOL, P_GLOBAL, &Globals.bNTPipeSupport, NULL, NULL, FLAG_ADVANCED}, 
+	{"nt status support", P_BOOL, P_GLOBAL, &Globals.bNTStatusSupport, NULL, NULL, FLAG_ADVANCED}, 
+	{"profile acls", P_BOOL, P_LOCAL, &sDefault.bProfileAcls, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE}, 
 
-	{
-		.label		= "default case",
-		.type		= P_ENUM,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iDefaultCase,
-		.special	= NULL,
-		.enum_list	= enum_case,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "case sensitive",
-		.type		= P_ENUM,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iCaseSensitive,
-		.special	= NULL,
-		.enum_list	= enum_bool_auto,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "casesignames",
-		.type		= P_ENUM,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iCaseSensitive,
-		.special	= NULL,
-		.enum_list	= enum_bool_auto,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL | FLAG_HIDE,
-	},
-	{
-		.label		= "preserve case",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bCasePreserve,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "short preserve case",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bShortCasePreserve,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "mangling char",
-		.type		= P_CHAR,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.magic_char,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "hide dot files",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bHideDotFiles,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "hide special files",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bHideSpecialFiles,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "hide unreadable",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bHideUnReadable,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "hide unwriteable files",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bHideUnWriteableFiles,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "delete veto files",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bDeleteVetoFiles,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "veto files",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szVetoFiles,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "hide files",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szHideFiles,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "veto oplock files",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szVetoOplockFiles,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "map archive",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bMap_archive,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "map hidden",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bMap_hidden,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "map system",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bMap_system,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "map readonly",
-		.type		= P_ENUM,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iMap_readonly,
-		.special	= NULL,
-		.enum_list	= enum_map_readonly,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "mangled names",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bMangledNames,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "max stat cache size",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.iMaxStatCacheSize,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "stat cache",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bStatCache,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "store dos attributes",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bStoreDosAttributes,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "dmapi support",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bDmapiSupport,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
+	{"announce version", P_STRING, P_GLOBAL, &Globals.szAnnounceVersion, NULL, NULL, FLAG_ADVANCED}, 
+	{"announce as", P_ENUM, P_GLOBAL, &Globals.announce_as, NULL, enum_announce_as,  FLAG_ADVANCED}, 
+	{"map acl inherit", P_BOOL, P_LOCAL, &sDefault.bMap_acl_inherit, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"afs share", P_BOOL, P_LOCAL, &sDefault.bAfs_Share, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL},
+	{"max mux", P_INTEGER, P_GLOBAL, &Globals.max_mux, NULL, NULL, FLAG_ADVANCED}, 
+	{"max xmit", P_INTEGER, P_GLOBAL, &Globals.max_xmit, NULL, NULL, FLAG_ADVANCED}, 
 
+	{"name resolve order", P_STRING, P_GLOBAL, &Globals.szNameResolveOrder, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, 
+	{"max ttl", P_INTEGER, P_GLOBAL, &Globals.max_ttl, NULL, NULL, FLAG_ADVANCED}, 
+	{"max wins ttl", P_INTEGER, P_GLOBAL, &Globals.max_wins_ttl, NULL, NULL, FLAG_ADVANCED}, 
+	{"min wins ttl", P_INTEGER, P_GLOBAL, &Globals.min_wins_ttl, NULL, NULL, FLAG_ADVANCED}, 
+	{"time server", P_BOOL, P_GLOBAL, &Globals.bTimeServer, NULL, NULL, FLAG_ADVANCED}, 
+	{"unix extensions", P_BOOL, P_GLOBAL, &Globals.bUnixExtensions, NULL, NULL, FLAG_ADVANCED}, 
+	{"use spnego", P_BOOL, P_GLOBAL, &Globals.bUseSpnego, NULL, NULL, FLAG_ADVANCED}, 
+	{"client signing", P_ENUM, P_GLOBAL, &Globals.client_signing, NULL, enum_smb_signing_vals, FLAG_ADVANCED}, 
+	{"server signing", P_ENUM, P_GLOBAL, &Globals.server_signing, NULL, enum_smb_signing_vals, FLAG_ADVANCED}, 
+	{"client use spnego", P_BOOL, P_GLOBAL, &Globals.bClientUseSpnego, NULL, NULL, FLAG_ADVANCED}, 
 
-	{N_("Domain Options"), P_SEP, P_SEPARATOR},
+	{"enable asu support", P_BOOL, P_GLOBAL, &Globals.bASUSupport, NULL, NULL, FLAG_ADVANCED}, 
+	{"svcctl list", P_LIST, P_GLOBAL, &Globals.szServicesList, NULL, NULL, FLAG_ADVANCED},
 
-	{
-		.label		= "machine password timeout",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.machine_password_timeout,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_WIZARD,
-	},
+	{N_("Tuning Options"), P_SEP, P_SEPARATOR}, 
 
-	{N_("Logon Options"), P_SEP, P_SEPARATOR},
+	{"block size", P_INTEGER, P_LOCAL, &sDefault.iBlock_size, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"deadtime", P_INTEGER, P_GLOBAL, &Globals.deadtime, NULL, NULL, FLAG_ADVANCED}, 
+	{"getwd cache", P_BOOL, P_GLOBAL, &use_getwd_cache, NULL, NULL, FLAG_ADVANCED}, 
+	{"keepalive", P_INTEGER, P_GLOBAL, &keepalive, NULL, NULL, FLAG_ADVANCED}, 
+	{"change notify", P_BOOL, P_LOCAL, &sDefault.bChangeNotify, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE },
+	{"directory name cache size", P_INTEGER, P_LOCAL, &sDefault.iDirectoryNameCacheSize, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE },
+	{"kernel change notify", P_BOOL, P_LOCAL, &sDefault.bKernelChangeNotify, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE },
 
-	{
-		.label		= "add user script",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szAddUserScript,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "rename user script",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szRenameUserScript,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "delete user script",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szDelUserScript,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "add group script",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szAddGroupScript,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "delete group script",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szDelGroupScript,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "add user to group script",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szAddUserToGroupScript,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "delete user from group script",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szDelUserFromGroupScript,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "set primary group script",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szSetPrimaryGroupScript,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "add machine script",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szAddMachineScript,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "shutdown script",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szShutdownScript,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "abort shutdown script",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szAbortShutdownScript,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "username map script",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szUsernameMapScript,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "logon script",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szLogonScript,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "logon path",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szLogonPath,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "logon drive",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szLogonDrive,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "logon home",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szLogonHome,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "domain logons",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bDomainLogons,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
+	{"lpq cache time", P_INTEGER, P_GLOBAL, &Globals.lpqcachetime, NULL, NULL, FLAG_ADVANCED}, 
+	{"max smbd processes", P_INTEGER, P_GLOBAL, &Globals.iMaxSmbdProcesses, NULL, NULL, FLAG_ADVANCED}, 
+	{"max connections", P_INTEGER, P_LOCAL, &sDefault.iMaxConnections, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
+	{"paranoid server security", P_BOOL, P_GLOBAL, &Globals.paranoid_server_security, NULL, NULL, FLAG_ADVANCED}, 
+	{"max disk size", P_INTEGER, P_GLOBAL, &Globals.maxdisksize, NULL, NULL, FLAG_ADVANCED}, 
+	{"max open files", P_INTEGER, P_GLOBAL, &Globals.max_open_files, NULL, NULL, FLAG_ADVANCED}, 
+	{"min print space", P_INTEGER, P_LOCAL, &sDefault.iMinPrintSpace, NULL, NULL, FLAG_ADVANCED | FLAG_PRINT}, 
+	{"open files database hash size", P_INTEGER, P_GLOBAL, &Globals.open_files_db_hash_size, NULL, NULL, FLAG_ADVANCED}, 
 
-	{N_("Browse Options"), P_SEP, P_SEPARATOR},
+	{"socket options", P_GSTRING, P_GLOBAL, user_socket_options, NULL, NULL, FLAG_ADVANCED}, 
+	{"strict allocate", P_BOOL, P_LOCAL, &sDefault.bStrictAllocate, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
+	{"strict sync", P_BOOL, P_LOCAL, &sDefault.bStrictSync, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
+	{"sync always", P_BOOL, P_LOCAL, &sDefault.bSyncAlways, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
+	{"use mmap", P_BOOL, P_GLOBAL, &Globals.bUseMmap, NULL, NULL, FLAG_ADVANCED}, 
+	{"use sendfile", P_BOOL, P_LOCAL, &sDefault.bUseSendfile, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
+	{"hostname lookups", P_BOOL, P_GLOBAL, &Globals.bHostnameLookups, NULL, NULL, FLAG_ADVANCED}, 
+	{"write cache size", P_INTEGER, P_LOCAL, &sDefault.iWriteCacheSize, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_DEPRECATED}, 
 
-	{
-		.label		= "os level",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.os_level,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_BASIC | FLAG_ADVANCED,
-	},
-	{
-		.label		= "lm announce",
-		.type		= P_ENUM,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.lm_announce,
-		.special	= NULL,
-		.enum_list	= enum_bool_auto,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "lm interval",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.lm_interval,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "preferred master",
-		.type		= P_ENUM,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.iPreferredMaster,
-		.special	= NULL,
-		.enum_list	= enum_bool_auto,
-		.flags		= FLAG_BASIC | FLAG_ADVANCED,
-	},
-	{
-		.label		= "prefered master",
-		.type		= P_ENUM,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.iPreferredMaster,
-		.special	= NULL,
-		.enum_list	= enum_bool_auto,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "local master",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bLocalMaster,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_BASIC | FLAG_ADVANCED,
-	},
-	{
-		.label		= "domain master",
-		.type		= P_ENUM,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.iDomainMaster,
-		.special	= NULL,
-		.enum_list	= enum_bool_auto,
-		.flags		= FLAG_BASIC | FLAG_ADVANCED,
-	},
-	{
-		.label		= "browse list",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bBrowseList,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "browseable",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bBrowseable,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT,
-	},
-	{
-		.label		= "browsable",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bBrowseable,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "enhanced browsing",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.enhanced_browsing,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
+	{"name cache timeout", P_INTEGER, P_GLOBAL, &Globals.name_cache_timeout, NULL, NULL, FLAG_ADVANCED}, 
 
-	{N_("WINS Options"), P_SEP, P_SEPARATOR},
+	{N_("Printing Options"), P_SEP, P_SEPARATOR}, 
 
-	{
-		.label		= "dns proxy",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bDNSproxy,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "wins proxy",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bWINSproxy,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "wins server",
-		.type		= P_LIST,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szWINSservers,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD,
-	},
-	{
-		.label		= "wins support",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bWINSsupport,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD,
-	},
-	{
-		.label		= "wins hook",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szWINSHook,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
+	{"max reported print jobs", P_INTEGER, P_LOCAL, &sDefault.iMaxReportedPrintJobs, NULL, NULL, FLAG_ADVANCED | FLAG_PRINT}, 
+	{"max print jobs", P_INTEGER, P_LOCAL, &sDefault.iMaxPrintJobs, NULL, NULL, FLAG_ADVANCED | FLAG_PRINT}, 
+	{"load printers", P_BOOL, P_GLOBAL, &Globals.bLoadPrinters, NULL, NULL, FLAG_ADVANCED | FLAG_PRINT}, 
+	{"printcap cache time", P_INTEGER, P_GLOBAL, &Globals.PrintcapCacheTime, NULL, NULL, FLAG_ADVANCED | FLAG_PRINT}, 
+	{"printcap name", P_STRING, P_GLOBAL, &Globals.szPrintcapname, NULL, NULL, FLAG_ADVANCED | FLAG_PRINT}, 
+	{"printcap", P_STRING, P_GLOBAL, &Globals.szPrintcapname, NULL, NULL, FLAG_HIDE}, 
+	{"printable", P_BOOL, P_LOCAL, &sDefault.bPrint_ok, NULL, NULL, FLAG_ADVANCED | FLAG_PRINT}, 
+	{"print ok", P_BOOL, P_LOCAL, &sDefault.bPrint_ok, NULL, NULL, FLAG_HIDE}, 
+	{"printing", P_ENUM, P_LOCAL, &sDefault.iPrinting, handle_printing, enum_printing, FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL}, 
+	{"cups options", P_STRING, P_LOCAL, &sDefault.szCupsOptions, NULL, NULL, FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL}, 
+	{"cups server", P_STRING, P_GLOBAL, &Globals.szCupsServer, NULL, NULL, FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL}, 
+	{"iprint server", P_STRING, P_GLOBAL, &Globals.szIPrintServer, NULL, NULL, FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL}, 
+	{"print command", P_STRING, P_LOCAL, &sDefault.szPrintcommand, NULL, NULL, FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL}, 
+	{"disable spoolss", P_BOOL, P_GLOBAL, &Globals.bDisableSpoolss, NULL, NULL, FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL}, 
+	{"enable spoolss", P_BOOLREV, P_GLOBAL, &Globals.bDisableSpoolss, NULL, NULL, FLAG_HIDE}, 
+	{"lpq command", P_STRING, P_LOCAL, &sDefault.szLpqcommand, NULL, NULL, FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL}, 
+	{"lprm command", P_STRING, P_LOCAL, &sDefault.szLprmcommand, NULL, NULL, FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL}, 
+	{"lppause command", P_STRING, P_LOCAL, &sDefault.szLppausecommand, NULL, NULL, FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL}, 
+	{"lpresume command", P_STRING, P_LOCAL, &sDefault.szLpresumecommand, NULL, NULL, FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL}, 
+	{"queuepause command", P_STRING, P_LOCAL, &sDefault.szQueuepausecommand, NULL, NULL, FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL}, 
+	{"queueresume command", P_STRING, P_LOCAL, &sDefault.szQueueresumecommand, NULL, NULL, FLAG_ADVANCED | FLAG_PRINT | FLAG_GLOBAL}, 
 
-	{N_("Locking Options"), P_SEP, P_SEPARATOR},
+	{"addport command", P_STRING, P_GLOBAL, &Globals.szAddPortCommand, NULL, NULL, FLAG_ADVANCED}, 
+	{"enumports command", P_STRING, P_GLOBAL, &Globals.szEnumPortsCommand, NULL, NULL, FLAG_ADVANCED}, 
+	{"addprinter command", P_STRING, P_GLOBAL, &Globals.szAddPrinterCommand, NULL, NULL, FLAG_ADVANCED}, 
+	{"deleteprinter command", P_STRING, P_GLOBAL, &Globals.szDeletePrinterCommand, NULL, NULL, FLAG_ADVANCED}, 
+	{"show add printer wizard", P_BOOL, P_GLOBAL, &Globals.bMsAddPrinterWizard, NULL, NULL, FLAG_ADVANCED}, 
+	{"os2 driver map", P_STRING, P_GLOBAL, &Globals.szOs2DriverMap, NULL, NULL, FLAG_ADVANCED}, 
 
-	{
-		.label		= "blocking locks",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bBlockingLocks,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "csc policy",
-		.type		= P_ENUM,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iCSCPolicy,
-		.special	= NULL,
-		.enum_list	= enum_csc_policy,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "fake oplocks",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bFakeOplocks,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "kernel oplocks",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bKernelOplocks,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL,
-	},
-	{
-		.label		= "locking",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bLocking,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "lock spin time",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.iLockSpinTime,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL,
-	},
-	{
-		.label		= "oplocks",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bOpLocks,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "level2 oplocks",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bLevel2OpLocks,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "oplock break wait time",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.oplock_break_wait_time,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL,
-	},
-	{
-		.label		= "oplock contention limit",
-		.type		= P_INTEGER,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iOplockContentionLimit,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "posix locking",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bPosixLocking,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "strict locking",
-		.type		= P_ENUM,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iStrictLocking,
-		.special	= NULL,
-		.enum_list	= enum_bool_auto,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "share modes",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bShareModes,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
+	{"printer name", P_STRING, P_LOCAL, &sDefault.szPrintername, NULL, NULL, FLAG_ADVANCED | FLAG_PRINT}, 
+	{"printer", P_STRING, P_LOCAL, &sDefault.szPrintername, NULL, NULL, FLAG_HIDE}, 
+	{"use client driver", P_BOOL, P_LOCAL, &sDefault.bUseClientDriver, NULL, NULL, FLAG_ADVANCED | FLAG_PRINT}, 
+	{"default devmode", P_BOOL, P_LOCAL, &sDefault.bDefaultDevmode, NULL, NULL, FLAG_ADVANCED | FLAG_PRINT}, 
+	{"force printername", P_BOOL, P_LOCAL, &sDefault.bForcePrintername, NULL, NULL, FLAG_ADVANCED | FLAG_PRINT}, 
+	{"printjob username", P_STRING, P_LOCAL, &sDefault.szPrintjobUsername, NULL, NULL, FLAG_ADVANCED | FLAG_PRINT},
 
-	{N_("Ldap Options"), P_SEP, P_SEPARATOR},
+	{N_("Filename Handling"), P_SEP, P_SEPARATOR}, 
+	{"mangling method", P_STRING, P_GLOBAL, &Globals.szManglingMethod, NULL, NULL, FLAG_ADVANCED}, 
+	{"mangle prefix", P_INTEGER, P_GLOBAL, &Globals.mangle_prefix, NULL, NULL, FLAG_ADVANCED}, 
 
-	{
-		.label		= "ldap admin dn",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szLdapAdminDn,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "ldap delete dn",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.ldap_delete_dn,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "ldap group suffix",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szLdapGroupSuffix,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "ldap idmap suffix",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szLdapIdmapSuffix,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "ldap machine suffix",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szLdapMachineSuffix,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "ldap passwd sync",
-		.type		= P_ENUM,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.ldap_passwd_sync,
-		.special	= NULL,
-		.enum_list	= enum_ldap_passwd_sync,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "ldap password sync",
-		.type		= P_ENUM,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.ldap_passwd_sync,
-		.special	= NULL,
-		.enum_list	= enum_ldap_passwd_sync,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "ldap replication sleep",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.ldap_replication_sleep,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "ldap suffix",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szLdapSuffix,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "ldap ssl",
-		.type		= P_ENUM,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.ldap_ssl,
-		.special	= NULL,
-		.enum_list	= enum_ldap_ssl,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "ldap timeout",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.ldap_timeout,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "ldap connection timeout",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.ldap_connection_timeout,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "ldap page size",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.ldap_page_size,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "ldap user suffix",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szLdapUserSuffix,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "ldap debug level",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.ldap_debug_level,
-		.special	= handle_ldap_debug_level,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "ldap debug threshold",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.ldap_debug_threshold,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
+	{"default case", P_ENUM, P_LOCAL, &sDefault.iDefaultCase, NULL, enum_case, FLAG_ADVANCED | FLAG_SHARE}, 
+	{"case sensitive", P_ENUM, P_LOCAL, &sDefault.iCaseSensitive, NULL, enum_bool_auto, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"casesignames", P_ENUM, P_LOCAL, &sDefault.iCaseSensitive, NULL, enum_bool_auto, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL | FLAG_HIDE}, 
+	{"preserve case", P_BOOL, P_LOCAL, &sDefault.bCasePreserve, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"short preserve case", P_BOOL, P_LOCAL, &sDefault.bShortCasePreserve, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"mangling char", P_CHAR, P_LOCAL, &sDefault.magic_char, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"hide dot files", P_BOOL, P_LOCAL, &sDefault.bHideDotFiles, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"hide special files", P_BOOL, P_LOCAL, &sDefault.bHideSpecialFiles, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"hide unreadable", P_BOOL, P_LOCAL, &sDefault.bHideUnReadable, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"hide unwriteable files", P_BOOL, P_LOCAL, &sDefault.bHideUnWriteableFiles, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"delete veto files", P_BOOL, P_LOCAL, &sDefault.bDeleteVetoFiles, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"veto files", P_STRING, P_LOCAL, &sDefault.szVetoFiles, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL }, 
+	{"hide files", P_STRING, P_LOCAL, &sDefault.szHideFiles, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL }, 
+	{"veto oplock files", P_STRING, P_LOCAL, &sDefault.szVetoOplockFiles, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL }, 
+	{"map archive", P_BOOL, P_LOCAL, &sDefault.bMap_archive, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"map hidden", P_BOOL, P_LOCAL, &sDefault.bMap_hidden, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"map system", P_BOOL, P_LOCAL, &sDefault.bMap_system, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"map readonly", P_ENUM, P_LOCAL, &sDefault.iMap_readonly, NULL, enum_map_readonly, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"mangled names", P_BOOL, P_LOCAL, &sDefault.bMangledNames, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"mangled map", P_STRING, P_LOCAL, &sDefault.szMangledMap, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL | FLAG_DEPRECATED }, 
+	{"max stat cache size", P_INTEGER, P_GLOBAL, &Globals.iMaxStatCacheSize, NULL, NULL, FLAG_ADVANCED}, 
+	{"stat cache", P_BOOL, P_GLOBAL, &Globals.bStatCache, NULL, NULL, FLAG_ADVANCED}, 
+	{"store dos attributes", P_BOOL, P_LOCAL, &sDefault.bStoreDosAttributes, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"dmapi support", P_BOOL, P_LOCAL, &sDefault.bDmapiSupport, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL},
 
-	{N_("EventLog Options"), P_SEP, P_SEPARATOR},
 
-	{
-		.label		= "eventlog list",
-		.type		= P_LIST,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szEventLogs,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE,
-	},
+	{N_("Domain Options"), P_SEP, P_SEPARATOR}, 
 
-	{N_("Miscellaneous Options"), P_SEP, P_SEPARATOR},
+	{"machine password timeout", P_INTEGER, P_GLOBAL, &Globals.machine_password_timeout, NULL, NULL, FLAG_ADVANCED | FLAG_WIZARD}, 
 
-	{
-		.label		= "add share command",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szAddShareCommand,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "change share command",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szChangeShareCommand,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "delete share command",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szDeleteShareCommand,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "config file",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szConfigFile,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "preload",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szAutoServices,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "auto services",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szAutoServices,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "lock directory",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szLockDir,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "lock dir",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szLockDir,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "pid directory",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szPidDir,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
+	{N_("Logon Options"), P_SEP, P_SEPARATOR}, 
+
+	{"add user script", P_STRING, P_GLOBAL, &Globals.szAddUserScript, NULL, NULL, FLAG_ADVANCED}, 
+        {"rename user script", P_STRING, P_GLOBAL, &Globals.szRenameUserScript, NULL, NULL, FLAG_ADVANCED},
+	{"delete user script", P_STRING, P_GLOBAL, &Globals.szDelUserScript, NULL, NULL, FLAG_ADVANCED}, 
+	{"add group script", P_STRING, P_GLOBAL, &Globals.szAddGroupScript, NULL, NULL, FLAG_ADVANCED}, 
+	{"delete group script", P_STRING, P_GLOBAL, &Globals.szDelGroupScript, NULL, NULL, FLAG_ADVANCED}, 
+	{"add user to group script", P_STRING, P_GLOBAL, &Globals.szAddUserToGroupScript, NULL, NULL, FLAG_ADVANCED}, 
+	{"delete user from group script", P_STRING, P_GLOBAL, &Globals.szDelUserFromGroupScript, NULL, NULL, FLAG_ADVANCED}, 
+	{"set primary group script", P_STRING, P_GLOBAL, &Globals.szSetPrimaryGroupScript, NULL, NULL, FLAG_ADVANCED}, 
+	{"add machine script", P_STRING, P_GLOBAL, &Globals.szAddMachineScript, NULL, NULL, FLAG_ADVANCED}, 
+	{"shutdown script", P_STRING, P_GLOBAL, &Globals.szShutdownScript, NULL, NULL, FLAG_ADVANCED}, 
+	{"abort shutdown script", P_STRING, P_GLOBAL, &Globals.szAbortShutdownScript, NULL, NULL, FLAG_ADVANCED}, 
+	{"username map script", P_STRING, P_GLOBAL, &Globals.szUsernameMapScript, NULL, NULL, FLAG_ADVANCED}, 
+
+	{"logon script", P_STRING, P_GLOBAL, &Globals.szLogonScript, NULL, NULL, FLAG_ADVANCED}, 
+	{"logon path", P_STRING, P_GLOBAL, &Globals.szLogonPath, NULL, NULL, FLAG_ADVANCED}, 
+	{"logon drive", P_STRING, P_GLOBAL, &Globals.szLogonDrive, NULL, NULL, FLAG_ADVANCED}, 
+	{"logon home", P_STRING, P_GLOBAL, &Globals.szLogonHome, NULL, NULL, FLAG_ADVANCED}, 
+	{"domain logons", P_BOOL, P_GLOBAL, &Globals.bDomainLogons, NULL, NULL, FLAG_ADVANCED}, 
+
+	{N_("Browse Options"), P_SEP, P_SEPARATOR}, 
+
+	{"os level", P_INTEGER, P_GLOBAL, &Globals.os_level, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED}, 
+	{"lm announce", P_ENUM, P_GLOBAL, &Globals.lm_announce, NULL, enum_bool_auto, FLAG_ADVANCED}, 
+	{"lm interval", P_INTEGER, P_GLOBAL, &Globals.lm_interval, NULL, NULL, FLAG_ADVANCED}, 
+	{"preferred master", P_ENUM, P_GLOBAL, &Globals.bPreferredMaster, NULL, enum_bool_auto, FLAG_BASIC | FLAG_ADVANCED}, 
+	{"prefered master", P_ENUM, P_GLOBAL, &Globals.bPreferredMaster, NULL, enum_bool_auto, FLAG_HIDE}, 
+	{"local master", P_BOOL, P_GLOBAL, &Globals.bLocalMaster, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED}, 
+	{"domain master", P_ENUM, P_GLOBAL, &Globals.bDomainMaster, NULL, enum_bool_auto, FLAG_BASIC | FLAG_ADVANCED}, 
+	{"browse list", P_BOOL, P_GLOBAL, &Globals.bBrowseList, NULL, NULL, FLAG_ADVANCED}, 
+	{"browseable", P_BOOL, P_LOCAL, &sDefault.bBrowseable, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, 
+	{"browsable", P_BOOL, P_LOCAL, &sDefault.bBrowseable, NULL, NULL, FLAG_HIDE}, 
+	{"enhanced browsing", P_BOOL, P_GLOBAL, &Globals.enhanced_browsing, NULL, NULL, FLAG_ADVANCED}, 
+
+	{N_("WINS Options"), P_SEP, P_SEPARATOR}, 
+
+	{"dns proxy", P_BOOL, P_GLOBAL, &Globals.bDNSproxy, NULL, NULL, FLAG_ADVANCED}, 
+	{"wins proxy", P_BOOL, P_GLOBAL, &Globals.bWINSproxy, NULL, NULL, FLAG_ADVANCED}, 
+
+	{"wins server", P_LIST, P_GLOBAL, &Globals.szWINSservers, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, 
+	{"wins support", P_BOOL, P_GLOBAL, &Globals.bWINSsupport, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_WIZARD}, 
+	{"wins hook", P_STRING, P_GLOBAL, &Globals.szWINSHook, NULL, NULL, FLAG_ADVANCED}, 
+
+	{N_("Locking Options"), P_SEP, P_SEPARATOR}, 
+
+	{"blocking locks", P_BOOL, P_LOCAL, &sDefault.bBlockingLocks, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"csc policy", P_ENUM, P_LOCAL, &sDefault.iCSCPolicy, NULL, enum_csc_policy, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"fake oplocks", P_BOOL, P_LOCAL, &sDefault.bFakeOplocks, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
+	{"kernel oplocks", P_BOOL, P_GLOBAL, &Globals.bKernelOplocks, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL}, 
+	{"locking", P_BOOL, P_LOCAL, &sDefault.bLocking, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"lock spin time", P_INTEGER, P_GLOBAL, &Globals.iLockSpinTime, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL}, 
+
+	{"oplocks", P_BOOL, P_LOCAL, &sDefault.bOpLocks, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"level2 oplocks", P_BOOL, P_LOCAL, &sDefault.bLevel2OpLocks, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"oplock break wait time", P_INTEGER, P_GLOBAL, &Globals.oplock_break_wait_time, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL}, 
+	{"oplock contention limit", P_INTEGER, P_LOCAL, &sDefault.iOplockContentionLimit, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"posix locking", P_BOOL, P_LOCAL, &sDefault.bPosixLocking, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"strict locking", P_ENUM, P_LOCAL, &sDefault.iStrictLocking, NULL, enum_bool_auto, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"share modes", P_BOOL, P_LOCAL,  &sDefault.bShareModes, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+
+	{N_("Ldap Options"), P_SEP, P_SEPARATOR}, 
+
+	{"ldap admin dn", P_STRING, P_GLOBAL, &Globals.szLdapAdminDn, NULL, NULL, FLAG_ADVANCED}, 
+	{"ldap delete dn", P_BOOL, P_GLOBAL, &Globals.ldap_delete_dn, NULL, NULL, FLAG_ADVANCED}, 
+	{"ldap group suffix", P_STRING, P_GLOBAL, &Globals.szLdapGroupSuffix, NULL, NULL, FLAG_ADVANCED}, 
+	{"ldap idmap suffix", P_STRING, P_GLOBAL, &Globals.szLdapIdmapSuffix, NULL, NULL, FLAG_ADVANCED}, 
+	{"ldap machine suffix", P_STRING, P_GLOBAL, &Globals.szLdapMachineSuffix, NULL, NULL, FLAG_ADVANCED}, 
+	{"ldap passwd sync", P_ENUM, P_GLOBAL, &Globals.ldap_passwd_sync, NULL, enum_ldap_passwd_sync, FLAG_ADVANCED}, 
+	{"ldap password sync", P_ENUM, P_GLOBAL, &Globals.ldap_passwd_sync, NULL, enum_ldap_passwd_sync, FLAG_HIDE}, 
+	{"ldap replication sleep", P_INTEGER, P_GLOBAL, &Globals.ldap_replication_sleep, NULL, NULL, FLAG_ADVANCED},
+	{"ldap suffix", P_STRING, P_GLOBAL, &Globals.szLdapSuffix, NULL, NULL, FLAG_ADVANCED}, 
+	{"ldap ssl", P_ENUM, P_GLOBAL, &Globals.ldap_ssl, NULL, enum_ldap_ssl, FLAG_ADVANCED}, 
+	{"ldap timeout", P_INTEGER, P_GLOBAL, &Globals.ldap_timeout, NULL, NULL, FLAG_ADVANCED},
+	{"ldap page size", P_INTEGER, P_GLOBAL, &Globals.ldap_page_size, NULL, NULL, FLAG_ADVANCED},
+	{"ldap user suffix", P_STRING, P_GLOBAL, &Globals.szLdapUserSuffix, NULL, NULL, FLAG_ADVANCED}, 
+
+	{"ldap debug level", P_INTEGER, P_GLOBAL, &Globals.ldap_debug_level, handle_ldap_debug_level, NULL, FLAG_ADVANCED},
+	{"ldap debug threshold", P_INTEGER, P_GLOBAL, &Globals.ldap_debug_threshold, NULL, NULL, FLAG_ADVANCED},
+
+
+	{N_("Miscellaneous Options"), P_SEP, P_SEPARATOR}, 
+	{"add share command", P_STRING, P_GLOBAL, &Globals.szAddShareCommand, NULL, NULL, FLAG_ADVANCED}, 
+	{"change share command", P_STRING, P_GLOBAL, &Globals.szChangeShareCommand, NULL, NULL, FLAG_ADVANCED}, 
+	{"delete share command", P_STRING, P_GLOBAL, &Globals.szDeleteShareCommand, NULL, NULL, FLAG_ADVANCED}, 
+
+	{N_("EventLog Options"), P_SEP, P_SEPARATOR}, 
+	{"eventlog list",  P_LIST, P_GLOBAL, &Globals.szEventLogs, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL | FLAG_SHARE}, 
+	
+	{"config file", P_STRING, P_GLOBAL, &Globals.szConfigFile, NULL, NULL, FLAG_HIDE}, 
+	{"preload", P_STRING, P_GLOBAL, &Globals.szAutoServices, NULL, NULL, FLAG_ADVANCED}, 
+	{"auto services", P_STRING, P_GLOBAL, &Globals.szAutoServices, NULL, NULL, FLAG_ADVANCED}, 
+	{"lock directory", P_STRING, P_GLOBAL, &Globals.szLockDir, NULL, NULL, FLAG_ADVANCED}, 
+	{"lock dir", P_STRING, P_GLOBAL, &Globals.szLockDir, NULL, NULL, FLAG_HIDE}, 
+	{"pid directory", P_STRING, P_GLOBAL, &Globals.szPidDir, NULL, NULL, FLAG_ADVANCED}, 
 #ifdef WITH_UTMP
-	{
-		.label		= "utmp directory",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szUtmpDir,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "wtmp directory",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szWtmpDir,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "utmp",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bUtmp,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
+	{"utmp directory", P_STRING, P_GLOBAL, &Globals.szUtmpDir, NULL, NULL, FLAG_ADVANCED}, 
+	{"wtmp directory", P_STRING, P_GLOBAL, &Globals.szWtmpDir, NULL, NULL, FLAG_ADVANCED}, 
+	{"utmp", P_BOOL, P_GLOBAL, &Globals.bUtmp, NULL, NULL, FLAG_ADVANCED}, 
 #endif
-	{
-		.label		= "default service",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szDefaultService,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "default",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szDefaultService,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "message command",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szMsgCommand,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "dfree cache time",
-		.type		= P_INTEGER,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.iDfreeCacheTime,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "dfree command",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szDfree,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "get quota command",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szGetQuota,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "set quota command",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szSetQuota,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "remote announce",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szRemoteAnnounce,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "remote browse sync",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szRemoteBrowseSync,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "socket address",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szSocketAddress,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "homedir map",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szNISHomeMapName,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "afs username map",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szAfsUsernameMap,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "afs token lifetime",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.iAfsTokenLifetime,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "log nt token command",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szLogNtTokenCommand,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "time offset",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &extra_time_offset,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "NIS homedir",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bNISHomeMap,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "-valid",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.valid,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "copy",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szCopy,
-		.special	= handle_copy,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "include",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szInclude,
-		.special	= handle_include,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "preexec",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szPreExec,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT,
-	},
-	{
-		.label		= "exec",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szPreExec,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "preexec close",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bPreexecClose,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "postexec",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szPostExec,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT,
-	},
-	{
-		.label		= "root preexec",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szRootPreExec,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT,
-	},
-	{
-		.label		= "root preexec close",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bRootpreexecClose,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "root postexec",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szRootPostExec,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT,
-	},
-	{
-		.label		= "available",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bAvailable,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT,
-	},
-	{
-		.label		= "registry shares",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bRegistryShares,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "usershare allow guests",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bUsershareAllowGuests,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "usershare max shares",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.iUsershareMaxShares,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "usershare owner only",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bUsershareOwnerOnly,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "usershare path",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szUsersharePath,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "usershare prefix allow list",
-		.type		= P_LIST,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szUsersharePrefixAllowList,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "usershare prefix deny list",
-		.type		= P_LIST,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szUsersharePrefixDenyList,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "usershare template share",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szUsershareTemplateShare,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "volume",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.volume,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "fstype",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.fstype,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "set directory",
-		.type		= P_BOOLREV,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bNo_set_dir,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "wide links",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bWidelinks,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "follow symlinks",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bSymlinks,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "dont descend",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szDontdescend,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "magic script",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szMagicScript,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "magic output",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szMagicOutput,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "delete readonly",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bDeleteReadonly,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "dos filemode",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bDosFilemode,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "dos filetimes",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bDosFiletimes,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "dos filetime resolution",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bDosFiletimeResolution,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "fake directory create times",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bFakeDirCreateTimes,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL,
-	},
-	{
-		.label		= "panic action",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szPanicAction,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
 
-	{N_("VFS module options"), P_SEP, P_SEPARATOR},
+	{"default service", P_STRING, P_GLOBAL, &Globals.szDefaultService, NULL, NULL, FLAG_ADVANCED}, 
+	{"default", P_STRING, P_GLOBAL, &Globals.szDefaultService, NULL, NULL, FLAG_ADVANCED}, 
+	{"message command", P_STRING, P_GLOBAL, &Globals.szMsgCommand, NULL, NULL, FLAG_ADVANCED}, 
+	{"dfree cache time", P_INTEGER, P_LOCAL, &sDefault.iDfreeCacheTime, NULL, NULL, FLAG_ADVANCED}, 
+	{"dfree command", P_STRING, P_LOCAL, &sDefault.szDfree, NULL, NULL, FLAG_ADVANCED}, 
+	{"get quota command", P_STRING, P_GLOBAL, &Globals.szGetQuota, NULL, NULL, FLAG_ADVANCED}, 
+	{"set quota command", P_STRING, P_GLOBAL, &Globals.szSetQuota, NULL, NULL, FLAG_ADVANCED}, 
+	{"remote announce", P_STRING, P_GLOBAL, &Globals.szRemoteAnnounce, NULL, NULL, FLAG_ADVANCED}, 
+	{"remote browse sync", P_STRING, P_GLOBAL, &Globals.szRemoteBrowseSync, NULL, NULL, FLAG_ADVANCED}, 
+	{"socket address", P_STRING, P_GLOBAL, &Globals.szSocketAddress, NULL, NULL, FLAG_ADVANCED}, 
+	{"homedir map", P_STRING, P_GLOBAL, &Globals.szNISHomeMapName, NULL, NULL, FLAG_ADVANCED}, 
+	{"afs username map", P_STRING, P_GLOBAL, &Globals.szAfsUsernameMap, NULL, NULL, FLAG_ADVANCED}, 
+	{"afs token lifetime", P_INTEGER, P_GLOBAL, &Globals.iAfsTokenLifetime, NULL, NULL, FLAG_ADVANCED},
+	{"log nt token command", P_STRING, P_GLOBAL, &Globals.szLogNtTokenCommand, NULL, NULL, FLAG_ADVANCED},
+	{"time offset", P_INTEGER, P_GLOBAL, &extra_time_offset, NULL, NULL, FLAG_ADVANCED}, 
+	{"NIS homedir", P_BOOL, P_GLOBAL, &Globals.bNISHomeMap, NULL, NULL, FLAG_ADVANCED}, 
+	{"-valid", P_BOOL, P_LOCAL, &sDefault.valid, NULL, NULL, FLAG_HIDE}, 
 
-	{
-		.label		= "vfs objects",
-		.type		= P_LIST,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szVfsObjects,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "vfs object",
-		.type		= P_LIST,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szVfsObjects,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
+	{"copy", P_STRING, P_LOCAL, &sDefault.szCopy, handle_copy, NULL, FLAG_HIDE}, 
+	{"include", P_STRING, P_LOCAL, &sDefault.szInclude, handle_include, NULL, FLAG_HIDE}, 
+	{"preexec", P_STRING, P_LOCAL, &sDefault.szPreExec, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, 
+	{"exec", P_STRING, P_LOCAL, &sDefault.szPreExec, NULL, NULL, FLAG_ADVANCED}, 
 
+	{"preexec close", P_BOOL, P_LOCAL, &sDefault.bPreexecClose, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
+	{"postexec", P_STRING, P_LOCAL, &sDefault.szPostExec, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, 
+	{"root preexec", P_STRING, P_LOCAL, &sDefault.szRootPreExec, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, 
+	{"root preexec close", P_BOOL, P_LOCAL, &sDefault.bRootpreexecClose, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
+	{"root postexec", P_STRING, P_LOCAL, &sDefault.szRootPostExec, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, 
+	{"available", P_BOOL, P_LOCAL, &sDefault.bAvailable, NULL, NULL, FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT}, 
+	{"usershare allow guests", P_BOOL, P_GLOBAL, &Globals.bUsershareAllowGuests, NULL, NULL, FLAG_ADVANCED},
+	{"usershare max shares", P_INTEGER, P_GLOBAL, &Globals.iUsershareMaxShares, NULL, NULL, FLAG_ADVANCED},
+	{"usershare owner only", P_BOOL, P_GLOBAL, &Globals.bUsershareOwnerOnly, NULL, NULL, FLAG_ADVANCED}, 
+	{"usershare path", P_STRING, P_GLOBAL, &Globals.szUsersharePath, NULL, NULL, FLAG_ADVANCED},
+	{"usershare prefix allow list", P_LIST, P_GLOBAL, &Globals.szUsersharePrefixAllowList, NULL, NULL, FLAG_ADVANCED}, 
+	{"usershare prefix deny list", P_LIST, P_GLOBAL, &Globals.szUsersharePrefixDenyList, NULL, NULL, FLAG_ADVANCED}, 
+	{"usershare template share", P_STRING, P_GLOBAL, &Globals.szUsershareTemplateShare, NULL, NULL, FLAG_ADVANCED},
+	{"volume", P_STRING, P_LOCAL, &sDefault.volume, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE }, 
+	{"fstype", P_STRING, P_LOCAL, &sDefault.fstype, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
+	{"set directory", P_BOOLREV, P_LOCAL, &sDefault.bNo_set_dir, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
+	{"wide links", P_BOOL, P_LOCAL, &sDefault.bWidelinks, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"follow symlinks", P_BOOL, P_LOCAL, &sDefault.bSymlinks, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"dont descend", P_STRING, P_LOCAL, &sDefault.szDontdescend, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
+	{"magic script", P_STRING, P_LOCAL, &sDefault.szMagicScript, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
+	{"magic output", P_STRING, P_LOCAL, &sDefault.szMagicOutput, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
+	{"delete readonly", P_BOOL, P_LOCAL, &sDefault.bDeleteReadonly, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"dos filemode", P_BOOL, P_LOCAL, &sDefault.bDosFilemode, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"dos filetimes", P_BOOL, P_LOCAL, &sDefault.bDosFiletimes, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"dos filetime resolution", P_BOOL, P_LOCAL, &sDefault.bDosFiletimeResolution, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
 
-	{N_("MSDFS options"), P_SEP, P_SEPARATOR},
+	{"fake directory create times", P_BOOL, P_LOCAL, &sDefault.bFakeDirCreateTimes, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+	{"panic action", P_STRING, P_GLOBAL, &Globals.szPanicAction, NULL, NULL, FLAG_ADVANCED}, 
 
-	{
-		.label		= "msdfs root",
-		.type		= P_BOOL,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.bMSDfsRoot,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "msdfs proxy",
-		.type		= P_STRING,
-		.p_class	= P_LOCAL,
-		.ptr		= &sDefault.szMSDfsProxy,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED | FLAG_SHARE,
-	},
-	{
-		.label		= "host msdfs",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bHostMSDfs,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
+	{N_("VFS module options"), P_SEP, P_SEPARATOR}, 
 
-	{N_("Winbind options"), P_SEP, P_SEPARATOR},
+	{"vfs objects", P_LIST, P_LOCAL, &sDefault.szVfsObjects, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
+	{"vfs object", P_LIST, P_LOCAL, &sDefault.szVfsObjects, NULL, NULL, FLAG_HIDE}, 
 
-	{
-		.label		= "passdb expand explicit",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bPassdbExpandExplicit,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "idmap domains",
-		.type		= P_LIST,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szIdmapDomains,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "idmap backend",
-		.type		= P_LIST,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szIdmapBackend,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "idmap alloc backend",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szIdmapAllocBackend,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "idmap cache time",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.iIdmapCacheTime,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "idmap negative cache time",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.iIdmapNegativeCacheTime,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "idmap uid",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szIdmapUID,
-		.special	= handle_idmap_uid,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "winbind uid",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szIdmapUID,
-		.special	= handle_idmap_uid,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "idmap gid",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szIdmapGID,
-		.special	= handle_idmap_gid,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "winbind gid",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szIdmapGID,
-		.special	= handle_idmap_gid,
-		.enum_list	= NULL,
-		.flags		= FLAG_HIDE,
-	},
-	{
-		.label		= "template homedir",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szTemplateHomedir,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "template shell",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szTemplateShell,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "winbind separator",
-		.type		= P_STRING,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szWinbindSeparator,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "winbind cache time",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.winbind_cache_time,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "winbind enum users",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bWinbindEnumUsers,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "winbind enum groups",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bWinbindEnumGroups,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "winbind use default domain",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bWinbindUseDefaultDomain,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "winbind trusted domains only",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bWinbindTrustedDomainsOnly,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "winbind nested groups",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bWinbindNestedGroups,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "winbind expand groups",
-		.type		= P_INTEGER,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.winbind_expand_groups,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "winbind nss info",
-		.type		= P_LIST,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.szWinbindNssInfo,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "winbind refresh tickets",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bWinbindRefreshTickets,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "winbind offline logon",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bWinbindOfflineLogon,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "winbind normalize names",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bWinbindNormalizeNames,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
-	{
-		.label		= "winbind rpc only",
-		.type		= P_BOOL,
-		.p_class	= P_GLOBAL,
-		.ptr		= &Globals.bWinbindRpcOnly,
-		.special	= NULL,
-		.enum_list	= NULL,
-		.flags		= FLAG_ADVANCED,
-	},
 
+	{"msdfs root", P_BOOL, P_LOCAL, &sDefault.bMSDfsRoot, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
+	{"msdfs proxy", P_STRING, P_LOCAL, &sDefault.szMSDfsProxy, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE}, 
+	{"host msdfs", P_BOOL, P_GLOBAL, &Globals.bHostMSDfs, NULL, NULL, FLAG_ADVANCED}, 
+
+	{N_("Winbind options"), P_SEP, P_SEPARATOR}, 
+
+	{"passdb expand explicit", P_BOOL, P_GLOBAL, &Globals.bPassdbExpandExplicit, NULL, NULL, FLAG_ADVANCED},
+	{"idmap domains", P_LIST, P_GLOBAL, &Globals.szIdmapDomains, NULL, NULL, FLAG_ADVANCED}, 
+	{"idmap backend", P_LIST, P_GLOBAL, &Globals.szIdmapBackend, NULL, NULL, FLAG_ADVANCED }, 
+	{"idmap alloc backend", P_STRING, P_GLOBAL, &Globals.szIdmapAllocBackend, NULL, NULL, FLAG_ADVANCED}, 
+	{"idmap cache time", P_INTEGER, P_GLOBAL, &Globals.iIdmapCacheTime, NULL, NULL, FLAG_ADVANCED}, 
+	{"idmap negative cache time", P_INTEGER, P_GLOBAL, &Globals.iIdmapNegativeCacheTime, NULL, NULL, FLAG_ADVANCED}, 
+	{"idmap uid", P_STRING, P_GLOBAL, &Globals.szIdmapUID, handle_idmap_uid, NULL, FLAG_ADVANCED }, 
+	{"winbind uid", P_STRING, P_GLOBAL, &Globals.szIdmapUID, handle_idmap_uid, NULL, FLAG_HIDE }, 
+	{"idmap gid", P_STRING, P_GLOBAL, &Globals.szIdmapGID, handle_idmap_gid, NULL, FLAG_ADVANCED }, 
+	{"winbind gid", P_STRING, P_GLOBAL, &Globals.szIdmapGID, handle_idmap_gid, NULL, FLAG_HIDE }, 
+	{"template homedir", P_STRING, P_GLOBAL, &Globals.szTemplateHomedir, NULL, NULL, FLAG_ADVANCED}, 
+	{"template shell", P_STRING, P_GLOBAL, &Globals.szTemplateShell, NULL, NULL, FLAG_ADVANCED}, 
+	{"winbind separator", P_STRING, P_GLOBAL, &Globals.szWinbindSeparator, NULL, NULL, FLAG_ADVANCED}, 
+	{"winbind cache time", P_INTEGER, P_GLOBAL, &Globals.winbind_cache_time, NULL, NULL, FLAG_ADVANCED}, 
+	{"winbind enum users", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumUsers, NULL, NULL, FLAG_ADVANCED}, 
+	{"winbind enum groups", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumGroups, NULL, NULL, FLAG_ADVANCED}, 
+	{"winbind use default domain", P_BOOL, P_GLOBAL, &Globals.bWinbindUseDefaultDomain, NULL, NULL, FLAG_ADVANCED}, 
+	{"winbind trusted domains only", P_BOOL, P_GLOBAL, &Globals.bWinbindTrustedDomainsOnly, NULL, NULL, FLAG_ADVANCED}, 
+	{"winbind nested groups", P_BOOL, P_GLOBAL, &Globals.bWinbindNestedGroups, NULL, NULL, FLAG_ADVANCED}, 
+	{"winbind nss info", P_LIST, P_GLOBAL, &Globals.szWinbindNssInfo, NULL, NULL, FLAG_ADVANCED}, 
+	{"winbind refresh tickets", P_BOOL, P_GLOBAL, &Globals.bWinbindRefreshTickets, NULL, NULL, FLAG_ADVANCED}, 
+	{"winbind offline logon", P_BOOL, P_GLOBAL, &Globals.bWinbindOfflineLogon, NULL, NULL, FLAG_ADVANCED},
+	{"winbind normalize names", P_BOOL, P_GLOBAL, &Globals.bWinbindNormalizeNames, NULL, NULL, FLAG_ADVANCED},
+
 	{NULL,  P_BOOL,  P_NONE,  NULL,  NULL,  NULL,  0}
 };
 
@@ -4462,7 +1314,7 @@
  Initialise the sDefault parameter structure for the printer values.
 ***************************************************************************/
 
-static void init_printer_values(struct service *pService)
+static void init_printer_values(service *pService)
 {
 	/* choose defaults depending on the type of printing */
 	switch (pService->iPrinting) {
@@ -4548,11 +1400,10 @@
  Initialise the global parameter structure.
 ***************************************************************************/
 
-static void init_globals(bool first_time_only)
+static void init_globals(BOOL first_time_only)
 {
-	static bool done_init = False;
-	char *s = NULL;
-	int i;
+	static BOOL done_init = False;
+	pstring s;
 
         /* If requested to initialize only once and we've already done it... */
         if (first_time_only && done_init) {
@@ -4561,44 +1412,35 @@
         }
 
 	if (!done_init) {
+		int i;
+
 		/* The logfile can be set before this is invoked. Free it if so. */
 		if (Globals.szLogFile != NULL) {
 			string_free(&Globals.szLogFile);
 			Globals.szLogFile = NULL;
 		}
-		done_init = True;
-	} else {
-		for (i = 0; parm_table[i].label; i++) {
+
+		memset((void *)&Globals, '\0', sizeof(Globals));
+
+		for (i = 0; parm_table[i].label; i++)
 			if ((parm_table[i].type == P_STRING ||
 			     parm_table[i].type == P_USTRING) &&
 			    parm_table[i].ptr)
-			{
-				string_free((char **)parm_table[i].ptr);
-			}
-		}
-	}
+				string_set((char **)parm_table[i].ptr, "");
 
-	memset((void *)&Globals, '\0', sizeof(Globals));
+		string_set(&sDefault.fstype, FSTYPE_STRING);
+		string_set(&sDefault.szPrintjobUsername, "%U");
 
-	for (i = 0; parm_table[i].label; i++) {
-		if ((parm_table[i].type == P_STRING ||
-		     parm_table[i].type == P_USTRING) &&
-		    parm_table[i].ptr)
-		{
-			string_set((char **)parm_table[i].ptr, "");
-		}
+		init_printer_values(&sDefault);
+
+		done_init = True;
 	}
 
-	string_set(&sDefault.fstype, FSTYPE_STRING);
-	string_set(&sDefault.szPrintjobUsername, "%U");
 
-	init_printer_values(&sDefault);
-
-
 	DEBUG(3, ("Initialising global parameters\n"));
 
-	string_set(&Globals.szSMBPasswdFile, get_dyn_SMB_PASSWD_FILE());
-	string_set(&Globals.szPrivateDir, get_dyn_PRIVATE_DIR());
+	string_set(&Globals.szSMBPasswdFile, dyn_SMB_PASSWD_FILE);
+	string_set(&Globals.szPrivateDir, dyn_PRIVATE_DIR);
 
 	/* use the new 'hash2' method by default, with a prefix of 1 */
 	string_set(&Globals.szManglingMethod, "hash2");
@@ -4624,34 +1466,28 @@
 	 * Allow the default PASSWD_CHAT to be overridden in local.h.
 	 */
 	string_set(&Globals.szPasswdChat, DEFAULT_PASSWD_CHAT);
-
+	
 	set_global_myname(myhostname());
 	string_set(&Globals.szNetbiosName,global_myname());
 
 	set_global_myworkgroup(WORKGROUP);
 	string_set(&Globals.szWorkgroup, lp_workgroup());
-
+	
 	string_set(&Globals.szPasswdProgram, "");
-	string_set(&Globals.szPidDir, get_dyn_PIDDIR());
-	string_set(&Globals.szLockDir, get_dyn_LOCKDIR());
+	string_set(&Globals.szPidDir, dyn_PIDDIR);
+	string_set(&Globals.szLockDir, dyn_LOCKDIR);
 	string_set(&Globals.szSocketAddress, "0.0.0.0");
-
-	if (asprintf(&s, "Samba %s", SAMBA_VERSION_STRING) < 0) {
-		smb_panic("init_globals: ENOMEM");
-	}
+	pstrcpy(s, "Samba ");
+	pstrcat(s, SAMBA_VERSION_STRING);
 	string_set(&Globals.szServerString, s);
-	SAFE_FREE(s);
-	if (asprintf(&s, "%d.%d", DEFAULT_MAJOR_VERSION,
-			DEFAULT_MINOR_VERSION) < 0) {
-		smb_panic("init_globals: ENOMEM");
-	}
+	slprintf(s, sizeof(s) - 1, "%d.%d", DEFAULT_MAJOR_VERSION,
+		 DEFAULT_MINOR_VERSION);
 	string_set(&Globals.szAnnounceVersion, s);
-	SAFE_FREE(s);
 #ifdef DEVELOPER
 	string_set(&Globals.szPanicAction, "/bin/sleep 999999999");
 #endif
 
-	string_set(&Globals.szSocketOptions, DEFAULT_SOCKET_OPTIONS);
+	pstrcpy(user_socket_options, DEFAULT_SOCKET_OPTIONS);
 
 	string_set(&Globals.szLogonDrive, "");
 	/* %N is the NIS auto.home server if -DAUTOHOME is used, else same as %L */
@@ -4666,8 +1502,6 @@
 	Globals.bLoadPrinters = True;
 	Globals.PrintcapCacheTime = 750; 	/* 12.5 minutes */
 
-	Globals.ConfigBackend = config_backend;
-
 	/* Was 65535 (0xFFFF). 0x4101 matches W2K and causes major speed improvements... */
 	/* Discovered by 2 days of pain by Don McCall @ HP :-). */
 	Globals.max_xmit = 0x4104;
@@ -4678,7 +1512,6 @@
 	Globals.pwordlevel = 0;
 	Globals.unamelevel = 0;
 	Globals.deadtime = 0;
-	Globals.getwd_cache = true;
 	Globals.bLargeReadwrite = True;
 	Globals.max_log_size = 5000;
 	Globals.max_open_files = MAX_OPEN_FILES;
@@ -4693,6 +1526,7 @@
 	Globals.serverSchannel = Auto;
 	Globals.bReadRaw = True;
 	Globals.bWriteRaw = True;
+	Globals.bReadbmpx = False;
 	Globals.bNullPasswords = False;
 	Globals.bObeyPamRestrictions = False;
 	Globals.syslog = 1;
@@ -4703,7 +1537,6 @@
 	Globals.bDebugHiresTimestamp = False;
 	Globals.bDebugPid = False;
 	Globals.bDebugUid = False;
-	Globals.bDebugClass = False;
 	Globals.bEnableCoreFiles = True;
 	Globals.max_ttl = 60 * 60 * 24 * 3;	/* 3 days default. */
 	Globals.max_wins_ttl = 60 * 60 * 24 * 6;	/* 6 days default. */
@@ -4729,18 +1562,18 @@
 	Globals.bNTPipeSupport = True;	/* Do NT pipes by default. */
 	Globals.bNTStatusSupport = True; /* Use NT status by default. */
 	Globals.bStatCache = True;	/* use stat cache by default */
-	Globals.iMaxStatCacheSize = 256; /* 256k by default */
+	Globals.iMaxStatCacheSize = 1024; /* one Meg by default. */
 	Globals.restrict_anonymous = 0;
-	Globals.bClientLanManAuth = False;	/* Do NOT use the LanMan hash if it is available */
-	Globals.bClientPlaintextAuth = False;	/* Do NOT use a plaintext password even if is requested by the server */
-	Globals.bLanmanAuth = False;	/* Do NOT use the LanMan hash, even if it is supplied */
-	Globals.bNTLMAuth = True;	/* Do use NTLMv1 if it is supplied by the client (otherwise NTLMv2) */
+	Globals.bClientLanManAuth = True;	/* Do use the LanMan hash if it is available */
+	Globals.bClientPlaintextAuth = True;	/* Do use a plaintext password if is requested by the server */
+	Globals.bLanmanAuth = True;	/* Do use the LanMan hash if it is available */
+	Globals.bNTLMAuth = True;	/* Do use NTLMv1 if it is available (otherwise NTLMv2) */
 	Globals.bClientNTLMv2Auth = False; /* Client should not use NTLMv2, as we can't tell that the server supports it. */
 	/* Note, that we will use NTLM2 session security (which is different), if it is available */
 
 	Globals.map_to_guest = 0;	/* By Default, "Never" */
 	Globals.oplock_break_wait_time = 0;	/* By Default, 0 msecs. */
-	Globals.enhanced_browsing = true;
+	Globals.enhanced_browsing = True; 
 	Globals.iLockSpinTime = WINDOWS_MINIMUM_LOCK_TIMEOUT_MS; /* msec. */
 #ifdef MMAP_BLACKLIST
 	Globals.bUseMmap = False;
@@ -4766,8 +1599,7 @@
 	Globals.ldap_passwd_sync = LDAP_PASSWD_SYNC_OFF;
 	Globals.ldap_delete_dn = False;
 	Globals.ldap_replication_sleep = 1000; /* wait 1 sec for replication */
-	Globals.ldap_timeout = LDAP_DEFAULT_TIMEOUT;
-	Globals.ldap_connection_timeout = LDAP_CONNECTION_DEFAULT_TIMEOUT;
+	Globals.ldap_timeout = LDAP_CONNECT_DEFAULT_TIMEOUT;
 	Globals.ldap_page_size = LDAP_PAGE_SIZE;
 
 	Globals.ldap_debug_level = 0;
@@ -4791,9 +1623,10 @@
 */
 
 	Globals.bMsAddPrinterWizard = True;
+	Globals.bPreferredMaster = Auto;	/* depending on bDomainMaster */
 	Globals.os_level = 20;
 	Globals.bLocalMaster = True;
-	Globals.iDomainMaster = Auto;	/* depending on bDomainLogons */
+	Globals.bDomainMaster = Auto;	/* depending on bDomainLogons */
 	Globals.bDomainLogons = False;
 	Globals.bBrowseList = True;
 	Globals.bWINSsupport = False;
@@ -4813,18 +1646,13 @@
 	string_set(&Globals.szCupsServer, "");
 	string_set(&Globals.szIPrintServer, "");
 
-	string_set(&Globals.ctdbdSocket, "");
-	Globals.szClusterAddresses = NULL;
-	Globals.clustering = False;
-
 	Globals.winbind_cache_time = 300;	/* 5 minutes */
 	Globals.bWinbindEnumUsers = False;
 	Globals.bWinbindEnumGroups = False;
 	Globals.bWinbindUseDefaultDomain = False;
 	Globals.bWinbindTrustedDomainsOnly = False;
 	Globals.bWinbindNestedGroups = True;
-	Globals.winbind_expand_groups = 1;
-	Globals.szWinbindNssInfo = str_list_make(NULL, "template", NULL);
+	Globals.szWinbindNssInfo = str_list_make("template", NULL);
 	Globals.bWinbindRefreshTickets = False;
 	Globals.bWinbindOfflineLogon = False;
 
@@ -4847,28 +1675,46 @@
 	Globals.bEnablePrivileges = True;
 	Globals.bHostMSDfs        = True;
 	Globals.bASUSupport       = False;
-
+	
 	/* User defined shares. */
-	if (asprintf(&s, "%s/usershares", get_dyn_STATEDIR()) < 0) {
-		smb_panic("init_globals: ENOMEM");
-	}
+	pstrcpy(s, dyn_LOCKDIR);
+	pstrcat(s, "/usershares");
 	string_set(&Globals.szUsersharePath, s);
-	SAFE_FREE(s);
 	string_set(&Globals.szUsershareTemplateShare, "");
 	Globals.iUsershareMaxShares = 0;
 	/* By default disallow sharing of directories not owned by the sharer. */
 	Globals.bUsershareOwnerOnly = True;
 	/* By default disallow guest access to usershares. */
 	Globals.bUsershareAllowGuests = False;
+}
 
-	Globals.iKeepalive = DEFAULT_KEEPALIVE;
+static TALLOC_CTX *lp_talloc;
 
-	/* By default no shares out of the registry */
-	Globals.bRegistryShares = False;
+/******************************************************************* a
+ Free up temporary memory - called from the main loop.
+********************************************************************/
 
-	Globals.iminreceivefile = 0;
+void lp_TALLOC_FREE(void)
+{
+	if (!lp_talloc)
+		return;
+	TALLOC_FREE(lp_talloc);
+	lp_talloc = NULL;
 }
 
+TALLOC_CTX *tmp_talloc_ctx(void)
+{
+	if (lp_talloc == NULL) {
+		lp_talloc = talloc_init("tmp_talloc_ctx");
+	}
+
+	if (lp_talloc == NULL) {
+		smb_panic("Could not create temporary talloc context\n");
+	}
+
+	return lp_talloc;
+}
+
 /*******************************************************************
  Convenience routine to grab string parameters into temporary memory
  and run standard_sub_basic on them. The buffers can be written to by
@@ -4877,8 +1723,7 @@
 
 static char *lp_string(const char *s)
 {
-	char *ret;
-	TALLOC_CTX *ctx = talloc_tos();
+	char *ret, *tmpstr;
 
 	/* The follow debug is useful for tracking down memory problems
 	   especially if you have an inner loop that is calling a lp_*()
@@ -4889,20 +1734,22 @@
 	DEBUG(10, ("lp_string(%s)\n", s));
 #endif
 
-	ret = talloc_sub_basic(ctx,
-			get_current_username(),
-			current_user_info.domain,
-			s);
-	if (trim_char(ret, '\"', '\"')) {
-		if (strchr(ret,'\"') != NULL) {
-			TALLOC_FREE(ret);
-			ret = talloc_sub_basic(ctx,
-					get_current_username(),
-					current_user_info.domain,
-					s);
+	if (!lp_talloc)
+		lp_talloc = talloc_init("lp_talloc");
+
+	tmpstr = alloc_sub_basic(get_current_username(),
+				 current_user_info.domain, s);
+	if (trim_char(tmpstr, '\"', '\"')) {
+		if (strchr(tmpstr,'\"') != NULL) {
+			SAFE_FREE(tmpstr);
+			tmpstr = alloc_sub_basic(get_current_username(),
+						 current_user_info.domain, s);
 		}
 	}
-	return ret;
+	ret = talloc_strdup(lp_talloc, tmpstr);
+	SAFE_FREE(tmpstr);
+			
+	return (ret);
 }
 
 /*
@@ -4917,7 +1764,7 @@
 #define FN_GLOBAL_LIST(fn_name,ptr) \
  const char **fn_name(void) {return(*(const char ***)(ptr));}
 #define FN_GLOBAL_BOOL(fn_name,ptr) \
- bool fn_name(void) {return(*(bool *)(ptr));}
+ BOOL fn_name(void) {return(*(BOOL *)(ptr));}
 #define FN_GLOBAL_CHAR(fn_name,ptr) \
  char fn_name(void) {return(*(char *)(ptr));}
 #define FN_GLOBAL_INTEGER(fn_name,ptr) \
@@ -4930,12 +1777,12 @@
 #define FN_LOCAL_LIST(fn_name,val) \
  const char **fn_name(int i) {return(const char **)(LP_SNUM_OK(i)? ServicePtrs[(i)]->val : sDefault.val);}
 #define FN_LOCAL_BOOL(fn_name,val) \
- bool fn_name(int i) {return(bool)(LP_SNUM_OK(i)? ServicePtrs[(i)]->val : sDefault.val);}
+ BOOL fn_name(int i) {return(LP_SNUM_OK(i)? ServicePtrs[(i)]->val : sDefault.val);}
 #define FN_LOCAL_INTEGER(fn_name,val) \
  int fn_name(int i) {return(LP_SNUM_OK(i)? ServicePtrs[(i)]->val : sDefault.val);}
 
 #define FN_LOCAL_PARM_BOOL(fn_name,val) \
- bool fn_name(const struct share_params *p) {return(bool)(LP_SNUM_OK(p->service)? ServicePtrs[(p->service)]->val : sDefault.val);}
+ BOOL fn_name(const struct share_params *p) {return(LP_SNUM_OK(p->service)? ServicePtrs[(p->service)]->val : sDefault.val);}
 #define FN_LOCAL_PARM_INTEGER(fn_name,val) \
  int fn_name(const struct share_params *p) {return(LP_SNUM_OK(p->service)? ServicePtrs[(p->service)]->val : sDefault.val);}
 #define FN_LOCAL_PARM_STRING(fn_name,val) \
@@ -5065,18 +1912,15 @@
 FN_GLOBAL_BOOL(lp_winbind_use_default_domain, &Globals.bWinbindUseDefaultDomain)
 FN_GLOBAL_BOOL(lp_winbind_trusted_domains_only, &Globals.bWinbindTrustedDomainsOnly)
 FN_GLOBAL_BOOL(lp_winbind_nested_groups, &Globals.bWinbindNestedGroups)
-FN_GLOBAL_INTEGER(lp_winbind_expand_groups, &Globals.winbind_expand_groups)
 FN_GLOBAL_BOOL(lp_winbind_refresh_tickets, &Globals.bWinbindRefreshTickets)
 FN_GLOBAL_BOOL(lp_winbind_offline_logon, &Globals.bWinbindOfflineLogon)
 FN_GLOBAL_BOOL(lp_winbind_normalize_names, &Globals.bWinbindNormalizeNames)
-FN_GLOBAL_BOOL(lp_winbind_rpc_only, &Globals.bWinbindRpcOnly)
 
 FN_GLOBAL_LIST(lp_idmap_domains, &Globals.szIdmapDomains)
 FN_GLOBAL_LIST(lp_idmap_backend, &Globals.szIdmapBackend) /* deprecated */
 FN_GLOBAL_STRING(lp_idmap_alloc_backend, &Globals.szIdmapAllocBackend)
 FN_GLOBAL_INTEGER(lp_idmap_cache_time, &Globals.iIdmapCacheTime)
 FN_GLOBAL_INTEGER(lp_idmap_negative_cache_time, &Globals.iIdmapNegativeCacheTime)
-FN_GLOBAL_INTEGER(lp_keepalive, &Globals.iKeepalive)
 FN_GLOBAL_BOOL(lp_passdb_expand_explicit, &Globals.bPassdbExpandExplicit)
 
 FN_GLOBAL_STRING(lp_ldap_suffix, &Globals.szLdapSuffix)
@@ -5086,7 +1930,6 @@
 FN_GLOBAL_BOOL(lp_ldap_delete_dn, &Globals.ldap_delete_dn)
 FN_GLOBAL_INTEGER(lp_ldap_replication_sleep, &Globals.ldap_replication_sleep)
 FN_GLOBAL_INTEGER(lp_ldap_timeout, &Globals.ldap_timeout)
-FN_GLOBAL_INTEGER(lp_ldap_connection_timeout, &Globals.ldap_connection_timeout)
 FN_GLOBAL_INTEGER(lp_ldap_page_size, &Globals.ldap_page_size)
 FN_GLOBAL_INTEGER(lp_ldap_debug_level, &Globals.ldap_debug_level)
 FN_GLOBAL_INTEGER(lp_ldap_debug_threshold, &Globals.ldap_debug_threshold)
@@ -5099,7 +1942,6 @@
 
 FN_GLOBAL_LIST(lp_eventlog_list, &Globals.szEventLogs)
 
-FN_GLOBAL_BOOL(lp_registry_shares, &Globals.bRegistryShares)
 FN_GLOBAL_BOOL(lp_usershare_allow_guests, &Globals.bUsershareAllowGuests)
 FN_GLOBAL_BOOL(lp_usershare_owner_only, &Globals.bUsershareOwnerOnly)
 FN_GLOBAL_BOOL(lp_disable_netbios, &Globals.bDisableNetbios)
@@ -5112,6 +1954,7 @@
 FN_GLOBAL_BOOL(lp_local_master, &Globals.bLocalMaster)
 FN_GLOBAL_BOOL(lp_domain_logons, &Globals.bDomainLogons)
 FN_GLOBAL_BOOL(lp_load_printers, &Globals.bLoadPrinters)
+FN_GLOBAL_BOOL(lp_readbmpx, &Globals.bReadbmpx)
 FN_GLOBAL_BOOL(lp_readraw, &Globals.bReadRaw)
 FN_GLOBAL_BOOL(lp_large_readwrite, &Globals.bLargeReadwrite)
 FN_GLOBAL_BOOL(lp_writeraw, &Globals.bWriteRaw)
@@ -5127,7 +1970,6 @@
 FN_GLOBAL_BOOL(lp_debug_hires_timestamp, &Globals.bDebugHiresTimestamp)
 FN_GLOBAL_BOOL(lp_debug_pid, &Globals.bDebugPid)
 FN_GLOBAL_BOOL(lp_debug_uid, &Globals.bDebugUid)
-FN_GLOBAL_BOOL(lp_debug_class, &Globals.bDebugClass)
 FN_GLOBAL_BOOL(lp_enable_core_files, &Globals.bEnableCoreFiles)
 FN_GLOBAL_BOOL(lp_browse_list, &Globals.bBrowseList)
 FN_GLOBAL_BOOL(lp_nis_home_map, &Globals.bNISHomeMap)
@@ -5174,7 +2016,6 @@
 FN_GLOBAL_INTEGER(lp_passwordlevel, &Globals.pwordlevel)
 FN_GLOBAL_INTEGER(lp_usernamelevel, &Globals.unamelevel)
 FN_GLOBAL_INTEGER(lp_deadtime, &Globals.deadtime)
-FN_GLOBAL_BOOL(lp_getwd_cache, &Globals.getwd_cache)
 FN_GLOBAL_INTEGER(lp_maxprotocol, &Globals.maxprotocol)
 FN_GLOBAL_INTEGER(lp_minprotocol, &Globals.minprotocol)
 FN_GLOBAL_INTEGER(lp_security, &Globals.security)
@@ -5183,7 +2024,7 @@
 FN_GLOBAL_INTEGER(lp_maxdisksize, &Globals.maxdisksize)
 FN_GLOBAL_INTEGER(lp_lpqcachetime, &Globals.lpqcachetime)
 FN_GLOBAL_INTEGER(lp_max_smbd_processes, &Globals.iMaxSmbdProcesses)
-FN_GLOBAL_BOOL(_lp_disable_spoolss, &Globals.bDisableSpoolss)
+FN_GLOBAL_INTEGER(_lp_disable_spoolss, &Globals.bDisableSpoolss)
 FN_GLOBAL_INTEGER(lp_syslog, &Globals.syslog)
 static FN_GLOBAL_INTEGER(lp_announce_as, &Globals.announce_as)
 FN_GLOBAL_INTEGER(lp_lm_announce, &Globals.lm_announce)
@@ -5193,8 +2034,6 @@
 FN_GLOBAL_INTEGER(lp_oplock_break_wait_time, &Globals.oplock_break_wait_time)
 FN_GLOBAL_INTEGER(lp_lock_spin_time, &Globals.iLockSpinTime)
 FN_GLOBAL_INTEGER(lp_usershare_max_shares, &Globals.iUsershareMaxShares)
-FN_GLOBAL_CONST_STRING(lp_socket_options, &Globals.szSocketOptions)
-FN_GLOBAL_INTEGER(lp_config_backend, &Globals.ConfigBackend)
 
 FN_LOCAL_STRING(lp_preexec, szPreExec)
 FN_LOCAL_STRING(lp_postexec, szPostExec)
@@ -5212,9 +2051,6 @@
 FN_LOCAL_STRING(lp_cups_options, szCupsOptions)
 FN_GLOBAL_STRING(lp_cups_server, &Globals.szCupsServer)
 FN_GLOBAL_STRING(lp_iprint_server, &Globals.szIPrintServer)
-FN_GLOBAL_CONST_STRING(lp_ctdbd_socket, &Globals.ctdbdSocket)
-FN_GLOBAL_LIST(lp_cluster_addresses, &Globals.szClusterAddresses)
-FN_GLOBAL_BOOL(lp_clustering, &Globals.clustering)
 FN_LOCAL_STRING(lp_printcommand, szPrintcommand)
 FN_LOCAL_STRING(lp_lpqcommand, szLpqcommand)
 FN_LOCAL_STRING(lp_lprmcommand, szLprmcommand)
@@ -5238,6 +2074,7 @@
 FN_LOCAL_LIST(lp_vfs_objects, szVfsObjects)
 FN_LOCAL_STRING(lp_msdfs_proxy, szMSDfsProxy)
 static FN_LOCAL_STRING(lp_volume, volume)
+FN_LOCAL_PARM_STRING(lp_mangled_map, szMangledMap)
 FN_LOCAL_STRING(lp_veto_files, szVetoFiles)
 FN_LOCAL_STRING(lp_hide_files, szHideFiles)
 FN_LOCAL_STRING(lp_veto_oplocks, szVetoOplockFiles)
@@ -5326,7 +2163,6 @@
 FN_LOCAL_INTEGER(lp_aio_write_size, iAioWriteSize)
 FN_LOCAL_INTEGER(lp_map_readonly, iMap_readonly)
 FN_LOCAL_INTEGER(lp_directory_name_cache_size, iDirectoryNameCacheSize)
-FN_LOCAL_INTEGER(lp_smb_encrypt, ismb_encrypt)
 FN_LOCAL_CHAR(lp_magicchar, magic_char)
 FN_GLOBAL_INTEGER(lp_winbind_cache_time, &Globals.winbind_cache_time)
 FN_GLOBAL_LIST(lp_winbind_nss_info, &Globals.szWinbindNssInfo)
@@ -5334,35 +2170,29 @@
 FN_GLOBAL_INTEGER(lp_name_cache_timeout, &Globals.name_cache_timeout)
 FN_GLOBAL_INTEGER(lp_client_signing, &Globals.client_signing)
 FN_GLOBAL_INTEGER(lp_server_signing, &Globals.server_signing)
-FN_GLOBAL_INTEGER(lp_client_ldap_sasl_wrapping, &Globals.client_ldap_sasl_wrapping)
 
 /* local prototypes */
 
 static int map_parameter(const char *pszParmName);
-static int map_parameter_canonical(const char *pszParmName, bool *inverse);
-static bool set_boolean(bool *pb, const char *pszParmValue);
-static const char *get_boolean(bool bool_value);
+static BOOL set_boolean(BOOL *pb, const char *pszParmValue);
 static int getservicebyname(const char *pszServiceName,
-			    struct service *pserviceDest);
-static void copy_service(struct service *pserviceDest,
-			 struct service *pserviceSource,
-			 struct bitmap *pcopymapDest);
-static bool do_parameter(const char *pszParmName, const char *pszParmValue,
-			 void *userdata);
-static bool do_section(const char *pszSectionName, void *userdata);
-static void init_copymap(struct service *pservice);
-static bool hash_a_service(const char *name, int number);
+			    service * pserviceDest);
+static void copy_service(service * pserviceDest,
+			 service * pserviceSource, BOOL *pcopymapDest);
+static BOOL service_ok(int iService);
+static BOOL do_parameter(const char *pszParmName, const char *pszParmValue);
+static BOOL do_section(const char *pszSectionName);
+static void init_copymap(service * pservice);
+static BOOL hash_a_service(const char *name, int number);
 static void free_service_byindex(int iService);
 static char * canonicalize_servicename(const char *name);
-static void show_parameter(int parmIndex);
-static bool is_synonym_of(int parm1, int parm2, bool *inverse);
 
 /* This is a helper function for parametrical options support. */
 /* It returns a pointer to parametrical option value if it exists or NULL otherwise */
 /* Actual parametrical functions are quite simple */
 static param_opt_struct *get_parametrics(int snum, const char *type, const char *option)
 {
-	bool global_section = False;
+	BOOL global_section = False;
 	char* param_key;
         param_opt_struct *data;
 	
@@ -5375,7 +2205,8 @@
 		data = ServicePtrs[snum]->param_opt;
 	}
     
-	if (asprintf(&param_key, "%s:%s", type, option) == -1) {
+	asprintf(&param_key, "%s:%s", type, option);
+	if (!param_key) {
 		DEBUG(0,("asprintf failed!\n"));
 		return NULL;
 	}
@@ -5441,9 +2272,9 @@
 /*******************************************************************
 convenience routine to return boolean parameters.
 ********************************************************************/
-static bool lp_bool(const char *s)
+static BOOL lp_bool(const char *s)
 {
-	bool ret = False;
+	BOOL ret = False;
 
 	if (!s || !*s) {
 		MISSING_PARAMETER(lp_bool);
@@ -5495,7 +2326,7 @@
 
 /* Return parametric option from a given service. Type is a part of option before ':' */
 /* Parametric option has following syntax: 'Type: option = value' */
-/* the returned value is talloced on the talloc_tos() */
+/* the returned value is talloced in lp_talloc */
 char *lp_parm_talloc_string(int snum, const char *type, const char *option, const char *def)
 {
 	param_opt_struct *data = get_parametrics(snum, type, option);
@@ -5534,7 +2365,7 @@
 		return (const char **)def;
 		
 	if (data->list==NULL) {
-		data->list = str_list_make(NULL, data->value, NULL);
+		data->list = str_list_make(data->value, NULL);
 	}
 
 	return (const char **)data->list;
@@ -5569,7 +2400,7 @@
 /* Return parametric option from a given service. Type is a part of option before ':' */
 /* Parametric option has following syntax: 'Type: option = value' */
 
-bool lp_parm_bool(int snum, const char *type, const char *option, bool def)
+BOOL lp_parm_bool(int snum, const char *type, const char *option, BOOL def)
 {
 	param_opt_struct *data = get_parametrics(snum, type, option);
 	
@@ -5598,9 +2429,9 @@
  Initialise a service to the defaults.
 ***************************************************************************/
 
-static void init_service(struct service *pservice)
+static void init_service(service * pservice)
 {
-	memset((char *)pservice, '\0', sizeof(struct service));
+	memset((char *)pservice, '\0', sizeof(service));
 	copy_service(pservice, &sDefault, NULL);
 }
 
@@ -5608,7 +2439,7 @@
  Free the dynamically allocated parts of a service struct.
 ***************************************************************************/
 
-static void free_service(struct service *pservice)
+static void free_service(service *pservice)
 {
 	int i;
         param_opt_struct *data, *pdata;
@@ -5620,7 +2451,7 @@
 		       pservice->szService));
 
 	string_free(&pservice->szService);
-	bitmap_free(pservice->copymap);
+	SAFE_FREE(pservice->copymap);
 
 	for (i = 0; parm_table[i].label; i++) {
 		if ((parm_table[i].type == P_STRING ||
@@ -5631,10 +2462,9 @@
 				     PTR_DIFF(parm_table[i].ptr, &sDefault)));
 		else if (parm_table[i].type == P_LIST &&
 			 parm_table[i].p_class == P_LOCAL)
-			     TALLOC_FREE(*((char ***)
-					   (((char *)pservice) +
-					    PTR_DIFF(parm_table[i].ptr,
-						     &sDefault))));
+			     str_list_free((char ***)
+			     		    (((char *)pservice) +
+					     PTR_DIFF(parm_table[i].ptr, &sDefault)));
 	}
 
 	data = pservice->param_opt;
@@ -5644,7 +2474,7 @@
 		DEBUG(5,("[%s = %s]\n", data->key, data->value));
 		string_free(&data->key);
 		string_free(&data->value);
-		TALLOC_FREE(data->list);
+		str_list_free(&data->list);
 		pdata = data->next;
 		SAFE_FREE(data);
 		data = pdata;
@@ -5670,11 +2500,9 @@
 	/* we have to cleanup the hash record */
 
 	if (ServicePtrs[idx]->szService) {
-		char *canon_name = canonicalize_servicename(
-			ServicePtrs[idx]->szService );
+		char *canon_name = canonicalize_servicename( ServicePtrs[idx]->szService );
 		
-		dbwrap_delete_bystring(ServiceHash, canon_name );
-		TALLOC_FREE(canon_name);
+		tdb_delete_bystring(ServiceHash, canon_name );
 	}
 
 	free_service(ServicePtrs[idx]);
@@ -5685,10 +2513,10 @@
  service. 
 ***************************************************************************/
 
-static int add_a_service(const struct service *pservice, const char *name)
+static int add_a_service(const service *pservice, const char *name)
 {
 	int i;
-	struct service tservice;
+	service tservice;
 	int num_to_alloc = iNumServices + 1;
 	param_opt_struct *data, *pdata;
 
@@ -5704,7 +2532,7 @@
 			while (data) {
 				string_free(&data->key);
 				string_free(&data->value);
-				TALLOC_FREE(data->list);
+				str_list_free(&data->list);
 				pdata = data->next;
 				SAFE_FREE(data);
 				data = pdata;
@@ -5722,16 +2550,16 @@
 
 	/* if not, then create one */
 	if (i == iNumServices) {
-		struct service **tsp;
+		service **tsp;
 		int *tinvalid;
 		
-		tsp = SMB_REALLOC_ARRAY_KEEP_OLD_ON_ERROR(ServicePtrs, struct service *, num_to_alloc);
+		tsp = SMB_REALLOC_ARRAY_KEEP_OLD_ON_ERROR(ServicePtrs, service *, num_to_alloc);
 		if (tsp == NULL) {
 			DEBUG(0,("add_a_service: failed to enlarge ServicePtrs!\n"));
 			return (-1);
 		}
 		ServicePtrs = tsp;
-		ServicePtrs[iNumServices] = SMB_MALLOC_P(struct service);
+		ServicePtrs[iNumServices] = SMB_MALLOC_P(service);
 		if (!ServicePtrs[iNumServices]) {
 			DEBUG(0,("add_a_service: out of memory!\n"));
 			return (-1);
@@ -5774,31 +2602,31 @@
 
 static char *canonicalize_servicename(const char *src)
 {
-	char *result;
+	static fstring canon; /* is fstring large enough? */
 
 	if ( !src ) {
 		DEBUG(0,("canonicalize_servicename: NULL source name!\n"));
 		return NULL;
 	}
 
-	result = talloc_strdup(talloc_tos(), src);
-	SMB_ASSERT(result != NULL);
+	fstrcpy( canon, src );
+	strlower_m( canon );
 
-	strlower_m(result);
-	return result;
+	return canon;
 }
 
 /***************************************************************************
   Add a name/index pair for the services array to the hash table.
 ***************************************************************************/
 
-static bool hash_a_service(const char *name, int idx)
+static BOOL hash_a_service(const char *name, int idx)
 {
 	char *canon_name;
 
 	if ( !ServiceHash ) {
-		DEBUG(10,("hash_a_service: creating servicehash\n"));
-		ServiceHash = db_open_rbt(NULL);
+		DEBUG(10,("hash_a_service: creating tdb servicehash\n"));
+		ServiceHash = tdb_open("servicehash", 1031, TDB_INTERNAL, 
+                                        (O_RDWR|O_CREAT), 0600);
 		if ( !ServiceHash ) {
 			DEBUG(0,("hash_a_service: open tdb servicehash failed!\n"));
 			return False;
@@ -5808,26 +2636,24 @@
 	DEBUG(10,("hash_a_service: hashing index %d for service name %s\n",
 		idx, name));
 
-	canon_name = canonicalize_servicename( name );
+	if ( !(canon_name = canonicalize_servicename( name )) )
+		return False;
 
-	dbwrap_store_bystring(ServiceHash, canon_name,
-			      make_tdb_data((uint8 *)&idx, sizeof(idx)),
-			      TDB_REPLACE);
+        tdb_store_int32(ServiceHash, canon_name, idx);
 
-	TALLOC_FREE(canon_name);
-
 	return True;
 }
 
 /***************************************************************************
- Add a new home service, with the specified home directory, defaults coming
+ Add a new home service, with the specified home directory, defaults coming 
  from service ifrom.
 ***************************************************************************/
 
-bool lp_add_home(const char *pszHomename, int iDefaultService,
+BOOL lp_add_home(const char *pszHomename, int iDefaultService, 
 		 const char *user, const char *pszHomedir)
 {
 	int i;
+	pstring newHomedir;
 
 	i = add_a_service(ServicePtrs[iDefaultService], pszHomename);
 
@@ -5836,16 +2662,15 @@
 
 	if (!(*(ServicePtrs[iDefaultService]->szPath))
 	    || strequal(ServicePtrs[iDefaultService]->szPath, lp_pathname(GLOBAL_SECTION_SNUM))) {
-		string_set(&ServicePtrs[i]->szPath, pszHomedir);
-	}
+		pstrcpy(newHomedir, pszHomedir);
+		string_set(&ServicePtrs[i]->szPath, newHomedir);
+	} 
 
 	if (!(*(ServicePtrs[i]->comment))) {
-		char *comment = NULL;
-		if (asprintf(&comment, "Home directory of %s", user) < 0) {
-			return false;
-		}
+		pstring comment;
+		slprintf(comment, sizeof(comment) - 1,
+			 "Home directory of %s", user);
 		string_set(&ServicePtrs[i]->comment, comment);
-		SAFE_FREE(comment);
 	}
 
 	/* set the browseable flag from the global default */
@@ -5856,7 +2681,7 @@
 
 	DEBUG(3, ("adding home's share [%s] for user '%s' at '%s'\n", pszHomename, 
 	       user, ServicePtrs[i]->szPath ));
-
+	
 	return (True);
 }
 
@@ -5866,10 +2691,6 @@
 
 int lp_add_service(const char *pszService, int iDefaultService)
 {
-	if (iDefaultService < 0) {
-		return add_a_service(&sDefault, pszService);
-	}
-
 	return (add_a_service(ServicePtrs[iDefaultService], pszService));
 }
 
@@ -5877,18 +2698,16 @@
  Add the IPC service.
 ***************************************************************************/
 
-static bool lp_add_ipc(const char *ipc_name, bool guest_ok)
+static BOOL lp_add_ipc(const char *ipc_name, BOOL guest_ok)
 {
-	char *comment = NULL;
+	pstring comment;
 	int i = add_a_service(&sDefault, ipc_name);
 
 	if (i < 0)
 		return (False);
 
-	if (asprintf(&comment, "IPC Service (%s)",
-				Globals.szServerString) < 0) {
-		return (False);
-	}
+	slprintf(comment, sizeof(comment) - 1,
+		 "IPC Service (%s)", Globals.szServerString);
 
 	string_set(&ServicePtrs[i]->szPath, tmpdir());
 	string_set(&ServicePtrs[i]->szUsername, "");
@@ -5905,7 +2724,6 @@
 
 	DEBUG(3, ("adding IPC service\n"));
 
-	SAFE_FREE(comment);
 	return (True);
 }
 
@@ -5913,7 +2731,7 @@
  Add a new printer service, with defaults coming from service iFrom.
 ***************************************************************************/
 
-bool lp_add_printer(const char *pszPrintername, int iDefaultService)
+BOOL lp_add_printer(const char *pszPrintername, int iDefaultService)
 {
 	const char *comment = "From Printcap";
 	int i = add_a_service(ServicePtrs[iDefaultService], pszPrintername);
@@ -5947,126 +2765,7 @@
 	return (True);
 }
 
-
 /***************************************************************************
- Check whether the given parameter name is valid.
- Parametric options (names containing a colon) are considered valid.
-***************************************************************************/
-
-bool lp_parameter_is_valid(const char *pszParmName)
-{
-	return ((map_parameter(pszParmName) != -1) ||
-		(strchr(pszParmName, ':') != NULL));
-}
-
-/***************************************************************************
- Check whether the given name is the name of a global parameter.
- Returns True for strings belonging to parameters of class
- P_GLOBAL, False for all other strings, also for parametric options
- and strings not belonging to any option.
-***************************************************************************/
-
-bool lp_parameter_is_global(const char *pszParmName)
-{
-	int num = map_parameter(pszParmName);
-
-	if (num >= 0) {
-		return (parm_table[num].p_class == P_GLOBAL);
-	}
-
-	return False;
-}
-
-/**************************************************************************
- Check whether the given name is the canonical name of a parameter.
- Returns False if it is not a valid parameter Name.
- For parametric options, True is returned.
-**************************************************************************/
-
-bool lp_parameter_is_canonical(const char *parm_name)
-{
-	if (!lp_parameter_is_valid(parm_name)) {
-		return False;
-	}
-
-	return (map_parameter(parm_name) ==
-		map_parameter_canonical(parm_name, NULL));
-}
-
-/**************************************************************************
- Determine the canonical name for a parameter.
- Indicate when it is an inverse (boolean) synonym instead of a
- "usual" synonym.
-**************************************************************************/
-
-bool lp_canonicalize_parameter(const char *parm_name, const char **canon_parm,
-			       bool *inverse)
-{
-	int num;
-
-	if (!lp_parameter_is_valid(parm_name)) {
-		*canon_parm = NULL;
-		return False;
-	}
-
-	num = map_parameter_canonical(parm_name, inverse);
-	if (num < 0) {
-		/* parametric option */
-		*canon_parm = parm_name;
-	} else {
-		*canon_parm = parm_table[num].label;
-	}
-
-	return True;
-
-}
-
-/**************************************************************************
- Determine the canonical name for a parameter.
- Turn the value given into the inverse boolean expression when
- the synonym is an invers boolean synonym.
-
- Return True if parm_name is a valid parameter name and
- in case it is an invers boolean synonym, if the val string could
- successfully be converted to the reverse bool.
- Return false in all other cases.
-**************************************************************************/
-
-bool lp_canonicalize_parameter_with_value(const char *parm_name,
-					  const char *val,
-					  const char **canon_parm,
-					  const char **canon_val)
-{
-	int num;
-	bool inverse;
-
-	if (!lp_parameter_is_valid(parm_name)) {
-		*canon_parm = NULL;
-		*canon_val = NULL;
-		return False;
-	}
-
-	num = map_parameter_canonical(parm_name, &inverse);
-	if (num < 0) {
-		/* parametric option */
-		*canon_parm = parm_name;
-		*canon_val = val;
-	} else {
-		*canon_parm = parm_table[num].label;
-		if (inverse) {
-			if (!lp_invert_boolean(val, canon_val)) {
-				*canon_val = NULL;
-				return False;
-			}
-		} else {
-			*canon_val = val;
-		}
-	}
-
-	return True;
-}
-
-/***************************************************************************
  Map a parameter's string representation to something we can use. 
  Returns False if the parameter string is not recognised, else TRUE.
 ***************************************************************************/
@@ -6084,7 +2783,7 @@
 
 	/* Warn only if it isn't parametric option */
 	if (strchr(pszParmName, ':') == NULL)
-		DEBUG(1, ("Unknown parameter encountered: \"%s\"\n", pszParmName));
+		DEBUG(0, ("Unknown parameter encountered: \"%s\"\n", pszParmName));
 	/* We do return 'fail' for parametric options as well because they are
 	   stored in different storage
 	 */
@@ -6092,78 +2791,17 @@
 }
 
 /***************************************************************************
- Map a parameter's string representation to the index of the canonical
- form of the parameter (it might be a synonym).
- Returns -1 if the parameter string is not recognised.
+ Show all parameter's name, type, [values,] and flags.
 ***************************************************************************/
 
-static int map_parameter_canonical(const char *pszParmName, bool *inverse)
+void show_parameter_list(void)
 {
-	int parm_num, canon_num;
-	bool loc_inverse = False;
-
-	parm_num = map_parameter(pszParmName);
-	if ((parm_num < 0) || !(parm_table[parm_num].flags & FLAG_HIDE)) {
-		/* invalid, parametric or no canidate for synonyms ... */
-		goto done;
-	}
-
-	for (canon_num = 0; parm_table[canon_num].label; canon_num++) {
-		if (is_synonym_of(parm_num, canon_num, &loc_inverse)) {
-			parm_num = canon_num;
-			goto done;
-		}
-	}
-
-done:
-	if (inverse != NULL) {
-		*inverse = loc_inverse;
-	}
-	return parm_num;
-}
-
-/***************************************************************************
- return true if parameter number parm1 is a synonym of parameter
- number parm2 (parm2 being the principal name).
- set inverse to True if parm1 is P_BOOLREV and parm2 is P_BOOL,
- False otherwise.
-***************************************************************************/
-
-static bool is_synonym_of(int parm1, int parm2, bool *inverse)
-{
-	if ((parm_table[parm1].ptr == parm_table[parm2].ptr) &&
-	    (parm_table[parm1].flags & FLAG_HIDE) &&
-	    !(parm_table[parm2].flags & FLAG_HIDE))
-	{
-		if (inverse != NULL) {
-			if ((parm_table[parm1].type == P_BOOLREV) &&
-			    (parm_table[parm2].type == P_BOOL))
-			{
-				*inverse = True;
-			} else {
-				*inverse = False;
-			}
-		}
-		return True;
-	}
-	return False;
-}
-
-/***************************************************************************
- Show one parameter's name, type, [values,] and flags.
- (helper functions for show_parameter_list)
-***************************************************************************/
-
-static void show_parameter(int parmIndex)
-{
-	int enumIndex, flagIndex;
-	int parmIndex2;
-	bool hadFlag;
-	bool hadSyn;
-	bool inverse;
+	int classIndex, parmIndex, enumIndex, flagIndex;
+	BOOL hadFlag;
+	const char *section_names[] = { "local", "global", NULL};
 	const char *type[] = { "P_BOOL", "P_BOOLREV", "P_CHAR", "P_INTEGER",
-		"P_OCTAL", "P_LIST", "P_STRING", "P_USTRING",
-		"P_ENUM", "P_SEP"};
+		"P_OCTAL", "P_LIST", "P_STRING", "P_USTRING", "P_GSTRING",
+		"P_UGSTRING", "P_ENUM", "P_SEP"};
 	unsigned flags[] = { FLAG_BASIC, FLAG_SHARE, FLAG_PRINT, FLAG_GLOBAL,
 		FLAG_WIZARD, FLAG_ADVANCED, FLAG_DEVELOPER, FLAG_DEPRECATED,
 		FLAG_HIDE, FLAG_DOS_STRING};
@@ -6171,68 +2809,35 @@
 		"FLAG_GLOBAL", "FLAG_WIZARD", "FLAG_ADVANCED", "FLAG_DEVELOPER",
 		"FLAG_DEPRECATED", "FLAG_HIDE", "FLAG_DOS_STRING", NULL};
 
-	printf("%s=%s", parm_table[parmIndex].label,
-	       type[parm_table[parmIndex].type]);
-	if (parm_table[parmIndex].type == P_ENUM) {
-		printf(",");
-		for (enumIndex=0;
-		     parm_table[parmIndex].enum_list[enumIndex].name;
-		     enumIndex++)
-		{
-			printf("%s%s",
-			       enumIndex ? "|" : "",
-			       parm_table[parmIndex].enum_list[enumIndex].name);
-		}
-	}
-	printf(",");
-	hadFlag = False;
-	for (flagIndex=0; flag_names[flagIndex]; flagIndex++) {
-		if (parm_table[parmIndex].flags & flags[flagIndex]) {
-			printf("%s%s",
-				hadFlag ? "|" : "",
-				flag_names[flagIndex]);
-			hadFlag = True;
-		}
-	}
-
-	/* output synonyms */
-	hadSyn = False;
-	for (parmIndex2=0; parm_table[parmIndex2].label; parmIndex2++) {
-		if (is_synonym_of(parmIndex, parmIndex2, &inverse)) {
-			printf(" (%ssynonym of %s)", inverse ? "inverse " : "",
-			       parm_table[parmIndex2].label);
-		} else if (is_synonym_of(parmIndex2, parmIndex, &inverse)) {
-			if (!hadSyn) {
-				printf(" (synonyms: ");
-				hadSyn = True;
-			} else {
-				printf(", ");
-			}
-			printf("%s%s", parm_table[parmIndex2].label,
-			       inverse ? "[i]" : "");
-		}
-	}
-	if (hadSyn) {
-		printf(")");
-	}
-
-	printf("\n");
-}
-
-/***************************************************************************
- Show all parameter's name, type, [values,] and flags.
-***************************************************************************/
-
-void show_parameter_list(void)
-{
-	int classIndex, parmIndex;
-	const char *section_names[] = { "local", "global", NULL};
-
-	for (classIndex=0; section_names[classIndex]; classIndex++) {
+	for ( classIndex=0; section_names[classIndex]; classIndex++) {
 		printf("[%s]\n", section_names[classIndex]);
 		for (parmIndex = 0; parm_table[parmIndex].label; parmIndex++) {
 			if (parm_table[parmIndex].p_class == classIndex) {
-				show_parameter(parmIndex);
+				printf("%s=%s", 
+					parm_table[parmIndex].label,
+					type[parm_table[parmIndex].type]);
+				switch (parm_table[parmIndex].type) {
+				case P_ENUM:
+					printf(",");
+					for (enumIndex=0; parm_table[parmIndex].enum_list[enumIndex].name; enumIndex++)
+						printf("%s%s",
+							enumIndex ? "|" : "",
+							parm_table[parmIndex].enum_list[enumIndex].name);
+					break;
+				default:
+					break;
+				}
+				printf(",");
+				hadFlag = False;
+				for ( flagIndex=0; flag_names[flagIndex]; flagIndex++ ) {
+					if (parm_table[parmIndex].flags & flags[flagIndex]) {
+						printf("%s%s",
+							hadFlag ? "|" : "",
+							flag_names[flagIndex]);
+						hadFlag = True;
+					}
+				}
+				printf("\n");
 			}
 		}
 	}
@@ -6244,122 +2849,52 @@
  represent a boolean.
 ***************************************************************************/
 
-static bool set_boolean(bool *pb, const char *pszParmValue)
+static BOOL set_boolean(BOOL *pb, const char *pszParmValue)
 {
-	bool bRetval;
-	bool value;
+	BOOL bRetval;
 
 	bRetval = True;
-	value = False;
 	if (strwicmp(pszParmValue, "yes") == 0 ||
 	    strwicmp(pszParmValue, "true") == 0 ||
 	    strwicmp(pszParmValue, "1") == 0)
-		value = True;
+		*pb = True;
 	else if (strwicmp(pszParmValue, "no") == 0 ||
 		    strwicmp(pszParmValue, "False") == 0 ||
 		    strwicmp(pszParmValue, "0") == 0)
-		value = False;
+		*pb = False;
 	else {
-		DEBUG(2,
+		DEBUG(0,
 		      ("ERROR: Badly formed boolean in configuration file: \"%s\".\n",
 		       pszParmValue));
 		bRetval = False;
 	}
-
-	if ((pb != NULL) && (bRetval != False)) {
-		*pb = value;
-	}
-
 	return (bRetval);
 }
 
-
 /***************************************************************************
- Check if a given string correctly represents a boolean value.
-***************************************************************************/
-
-bool lp_string_is_valid_boolean(const char *parm_value)
-{
-	return set_boolean(NULL, parm_value);
-}
-
-/***************************************************************************
- Get the standard string representation of a boolean value ("yes" or "no")
-***************************************************************************/
-
-static const char *get_boolean(bool bool_value)
-{
-	static const char *yes_str = "yes";
-	static const char *no_str = "no";
-
-	return (bool_value ? yes_str : no_str);
-}
-
-/***************************************************************************
- Provide the string of the negated boolean value associated to the boolean
- given as a string. Returns False if the passed string does not correctly
- represent a boolean.
-***************************************************************************/
-
-bool lp_invert_boolean(const char *str, const char **inverse_str)
-{
-	bool val;
-
-	if (!set_boolean(&val, str)) {
-		return False;
-	}
-
-	*inverse_str = get_boolean(!val);
-	return True;
-}
-
-/***************************************************************************
- Provide the canonical string representation of a boolean value given
- as a string. Return True on success, False if the string given does
- not correctly represent a boolean.
-***************************************************************************/
-
-bool lp_canonicalize_boolean(const char *str, const char**canon_str)
-{
-	bool val;
-
-	if (!set_boolean(&val, str)) {
-		return False;
-	}
-
-	*canon_str = get_boolean(val);
-	return True;
-}
-
-/***************************************************************************
 Find a service by name. Otherwise works like get_service.
 ***************************************************************************/
 
-static int getservicebyname(const char *pszServiceName, struct service *pserviceDest)
+static int getservicebyname(const char *pszServiceName, service * pserviceDest)
 {
 	int iService = -1;
 	char *canon_name;
-	TDB_DATA data;
 
-	if (ServiceHash == NULL) {
-		return -1;
-	}
+	if (ServiceHash != NULL) {
+		if ( !(canon_name = canonicalize_servicename( pszServiceName )) )
+			return -1;
 
-	canon_name = canonicalize_servicename(pszServiceName);
+		iService = tdb_fetch_int32(ServiceHash, canon_name );
 
-	data = dbwrap_fetch_bystring(ServiceHash, canon_name, canon_name);
-
-	if ((data.dptr != NULL) && (data.dsize == sizeof(iService))) {
-		iService = *(int *)data.dptr;
+		if (LP_SNUM_OK(iService)) {
+			if (pserviceDest != NULL) {
+				copy_service(pserviceDest, ServicePtrs[iService], NULL);
+			}
+		} else {
+			iService = -1;
+		}
 	}
 
-	TALLOC_FREE(canon_name);
-
-	if ((iService != -1) && (LP_SNUM_OK(iService))
-	    && (pserviceDest != NULL)) {
-		copy_service(pserviceDest, ServicePtrs[iService], NULL);
-	}
-
 	return (iService);
 }
 
@@ -6368,17 +2903,16 @@
  If pcopymapDest is NULL then copy all fields
 ***************************************************************************/
 
-static void copy_service(struct service *pserviceDest, struct service *pserviceSource,
-			 struct bitmap *pcopymapDest)
+static void copy_service(service * pserviceDest, service * pserviceSource, BOOL *pcopymapDest)
 {
 	int i;
-	bool bcopyall = (pcopymapDest == NULL);
+	BOOL bcopyall = (pcopymapDest == NULL);
 	param_opt_struct *data, *pdata, *paramo;
-	bool not_added;
+	BOOL not_added;
 
 	for (i = 0; parm_table[i].label; i++)
 		if (parm_table[i].ptr && parm_table[i].p_class == P_LOCAL &&
-		    (bcopyall || bitmap_query(pcopymapDest,i))) {
+		    (bcopyall || pcopymapDest[i])) {
 			void *def_ptr = parm_table[i].ptr;
 			void *src_ptr =
 				((char *)pserviceSource) + PTR_DIFF(def_ptr,
@@ -6390,7 +2924,7 @@
 			switch (parm_table[i].type) {
 				case P_BOOL:
 				case P_BOOLREV:
-					*(bool *)dest_ptr = *(bool *)src_ptr;
+					*(BOOL *)dest_ptr = *(BOOL *)src_ptr;
 					break;
 
 				case P_INTEGER:
@@ -6414,9 +2948,8 @@
 					strupper_m(*(char **)dest_ptr);
 					break;
 				case P_LIST:
-					TALLOC_FREE(*((char ***)dest_ptr));
-					str_list_copy(NULL, (char ***)dest_ptr,
-						      *(const char ***)src_ptr);
+					str_list_free((char ***)dest_ptr);
+					str_list_copy((char ***)dest_ptr, *(const char ***)src_ptr);
 					break;
 				default:
 					break;
@@ -6426,8 +2959,9 @@
 	if (bcopyall) {
 		init_copymap(pserviceDest);
 		if (pserviceSource->copymap)
-			bitmap_copy(pserviceDest->copymap,
-				    pserviceSource->copymap);
+			memcpy((void *)pserviceDest->copymap,
+			       (void *)pserviceSource->copymap,
+			       sizeof(BOOL) * NUMPARAMETERS);
 	}
 	
 	data = pserviceSource->param_opt;
@@ -6439,7 +2973,7 @@
 			/* If we already have same option, override it */
 			if (strcmp(pdata->key, data->key) == 0) {
 				string_free(&pdata->value);
-				TALLOC_FREE(data->list);
+				str_list_free(&data->list);
 				pdata->value = SMB_STRDUP(data->value);
 				not_added = False;
 				break;
@@ -6462,9 +2996,9 @@
 incomplete or faulty, else True.
 ***************************************************************************/
 
-bool service_ok(int iService)
+static BOOL service_ok(int iService)
 {
-	bool bRetval;
+	BOOL bRetval;
 
 	bRetval = True;
 	if (ServicePtrs[iService]->szService[0] == '\0') {
@@ -6495,7 +3029,7 @@
 		ServicePtrs[iService]->bAvailable = False;
 	}
 
-	/* If a service is flagged unavailable, log the fact at level 1. */
+	/* If a service is flagged unavailable, log the fact at level 0. */
 	if (!ServicePtrs[iService]->bAvailable)
 		DEBUG(1, ("NOTE: Service %s is flagged unavailable.\n",
 			  ServicePtrs[iService]->szService));
@@ -6503,55 +3037,6 @@
 	return (bRetval);
 }
 
-/*
- * process_registry_globals
- */
-static bool process_registry_globals(void)
-{
-	WERROR werr;
-	struct smbconf_service *service = NULL;
-	uint32_t count;
-	TALLOC_CTX *mem_ctx = talloc_stackframe();
-	bool ret = false;
-
-	if (conf_ctx == NULL) {
-		/* first time */
-		werr = smbconf_init(NULL, &conf_ctx, "registry:");
-		if (!W_ERROR_IS_OK(werr)) {
-			goto done;
-		}
-	}
-
-	if (!smbconf_share_exists(conf_ctx, GLOBAL_NAME)) {
-		/* nothing to read from the registry yet but make sure lp_load
-		 * doesn't return false */
-		ret = true;
-		goto done;
-	}
-
-	werr = smbconf_get_share(conf_ctx, mem_ctx, GLOBAL_NAME, &service);
-	if (!W_ERROR_IS_OK(werr)) {
-		goto done;
-	}
-
-	for (count = 0; count < service->num_params; count++) {
-		ret = do_parameter(service->param_names[count],
-				   service->param_values[count],
-				   NULL);
-		if (ret != true) {
-			goto done;
-		}
-	}
-
-	ret = do_parameter("registry shares", "yes", NULL);
-	/* store the csn */
-	smbconf_changed(conf_ctx, &conf_last_csn, NULL, NULL);
-
-done:
-	TALLOC_FREE(mem_ctx);
-	return ret;
-}
-
 static struct file_lists {
 	struct file_lists *next;
 	char *name;
@@ -6598,58 +3083,25 @@
 	}
 }
 
-/**
- * Utility function for outsiders to check if we're running on registry.
- */
-bool lp_config_backend_is_registry(void)
-{
-	return (lp_config_backend() == CONFIG_BACKEND_REGISTRY);
-}
-
-/**
- * Utility function to check if the config backend is FILE.
- */
-bool lp_config_backend_is_file(void)
-{
-	return (lp_config_backend() == CONFIG_BACKEND_FILE);
-}
-
 /*******************************************************************
  Check if a config file has changed date.
 ********************************************************************/
 
-bool lp_file_list_changed(void)
+BOOL lp_file_list_changed(void)
 {
 	struct file_lists *f = file_lists;
 
  	DEBUG(6, ("lp_file_list_changed()\n"));
 
-	if (lp_config_backend_is_registry()) {
-		if (conf_ctx == NULL) {
-			WERROR werr;
-			werr = smbconf_init(NULL, &conf_ctx, "registry:");
-			if (!W_ERROR_IS_OK(werr)) {
-				DEBUG(0, ("error opening configuration: %s\n",
-					  dos_errstr(werr)));
-				return false;
-			}
-		}
-		if (smbconf_changed(conf_ctx, &conf_last_csn, NULL, NULL)) {
-			DEBUGADD(6, ("registry config changed\n"));
-			return true;
-		}
-	}
-
 	while (f) {
-		char *n2 = NULL;
+		pstring n2;
 		time_t mod_time;
 
-		n2 = alloc_sub_basic(get_current_username(),
+		pstrcpy(n2, f->name);
+		standard_sub_basic( get_current_username(),
 				    current_user_info.domain,
-				    f->name);
-		if (!n2) {
-			return false;
-		}
+				    n2, sizeof(n2) );
+
 		DEBUGADD(6, ("file %s -> %s  last mod_time: %s\n",
 			     f->name, n2, ctime(&f->modtime)));
 
@@ -6661,42 +3113,40 @@
 				  ctime(&mod_time)));
 			f->modtime = mod_time;
 			SAFE_FREE(f->subfname);
-			f->subfname = n2; /* Passing ownership of
-					     return from alloc_sub_basic
-					     above. */
-			return true;
+			f->subfname = SMB_STRDUP(n2);
+			return (True);
 		}
-		SAFE_FREE(n2);
 		f = f->next;
 	}
 	return (False);
 }
 
-
 /***************************************************************************
  Run standard_sub_basic on netbios name... needed because global_myname
  is not accessed through any lp_ macro.
  Note: We must *NOT* use string_set() here as ptr points to global_myname.
 ***************************************************************************/
 
-static bool handle_netbios_name(int snum, const char *pszParmValue, char **ptr)
+static BOOL handle_netbios_name(int snum, const char *pszParmValue, char **ptr)
 {
-	bool ret;
-	char *netbios_name = alloc_sub_basic(get_current_username(),
-					current_user_info.domain,
-					pszParmValue);
+	BOOL ret;
+	pstring netbios_name;
 
+	pstrcpy(netbios_name, pszParmValue);
+
+	standard_sub_basic(get_current_username(), current_user_info.domain,
+			   netbios_name, sizeof(netbios_name));
+
 	ret = set_global_myname(netbios_name);
-	SAFE_FREE(netbios_name);
 	string_set(&Globals.szNetbiosName,global_myname());
-
+	
 	DEBUG(4, ("handle_netbios_name: set global_myname to: %s\n",
 	       global_myname()));
 
 	return ret;
 }
 
-static bool handle_charset(int snum, const char *pszParmValue, char **ptr)
+static BOOL handle_charset(int snum, const char *pszParmValue, char **ptr)
 {
 	if (strcmp(*ptr, pszParmValue) != 0) {
 		string_set(ptr, pszParmValue);
@@ -6707,9 +3157,9 @@
 
 
 
-static bool handle_workgroup(int snum, const char *pszParmValue, char **ptr)
+static BOOL handle_workgroup(int snum, const char *pszParmValue, char **ptr)
 {
-	bool ret;
+	BOOL ret;
 	
 	ret = set_global_myworkgroup(pszParmValue);
 	string_set(&Globals.szWorkgroup,lp_workgroup());
@@ -6717,9 +3167,9 @@
 	return ret;
 }
 
-static bool handle_netbios_scope(int snum, const char *pszParmValue, char **ptr)
+static BOOL handle_netbios_scope(int snum, const char *pszParmValue, char **ptr)
 {
-	bool ret;
+	BOOL ret;
 	
 	ret = set_global_scope(pszParmValue);
 	string_set(&Globals.szNetbiosScope,global_scope());
@@ -6727,63 +3177,46 @@
 	return ret;
 }
 
-static bool handle_netbios_aliases(int snum, const char *pszParmValue, char **ptr)
+static BOOL handle_netbios_aliases(int snum, const char *pszParmValue, char **ptr)
 {
-	TALLOC_FREE(Globals.szNetbiosAliases);
-	Globals.szNetbiosAliases = str_list_make(NULL, pszParmValue, NULL);
+	str_list_free(&Globals.szNetbiosAliases);
+	Globals.szNetbiosAliases = str_list_make(pszParmValue, NULL);
 	return set_netbios_aliases((const char **)Globals.szNetbiosAliases);
 }
 
 /***************************************************************************
  Handle the include operation.
 ***************************************************************************/
-static bool bAllowIncludeRegistry = true;
 
-static bool handle_include(int snum, const char *pszParmValue, char **ptr)
+static BOOL handle_include(int snum, const char *pszParmValue, char **ptr)
 {
-	char *fname;
+	pstring fname;
+	pstrcpy(fname, pszParmValue);
 
-	if (strequal(pszParmValue, INCLUDE_REGISTRY_NAME)) {
-		if (!bAllowIncludeRegistry) {
-			return true;
-		}
-		if (bInGlobalSection) {
-			return process_registry_globals();
-		} else {
-			DEBUG(1, ("\"include = registry\" only effective "
-				  "in %s section\n", GLOBAL_NAME));
-			return false;
-		}
-	}
+	standard_sub_basic(get_current_username(), current_user_info.domain,
+			   fname,sizeof(fname));
 
-	fname = alloc_sub_basic(get_current_username(),
-				current_user_info.domain,
-				pszParmValue);
-
 	add_to_file_list(pszParmValue, fname);
 
 	string_set(ptr, fname);
 
-	if (file_exist(fname, NULL)) {
-		bool ret = pm_process(fname, do_section, do_parameter, NULL);
-		SAFE_FREE(fname);
-		return ret;
-	}
+	if (file_exist(fname, NULL))
+		return (pm_process(fname, do_section, do_parameter));
 
 	DEBUG(2, ("Can't find include file %s\n", fname));
-	SAFE_FREE(fname);
-	return false;
+
+	return (False);
 }
 
 /***************************************************************************
  Handle the interpretation of the copy parameter.
 ***************************************************************************/
 
-static bool handle_copy(int snum, const char *pszParmValue, char **ptr)
+static BOOL handle_copy(int snum, const char *pszParmValue, char **ptr)
 {
-	bool bRetval;
+	BOOL bRetval;
 	int iTemp;
-	struct service serviceTemp;
+	service serviceTemp;
 
 	string_set(ptr, pszParmValue);
 
@@ -6811,11 +3244,11 @@
 	return (bRetval);
 }
 
-static bool handle_ldap_debug_level(int snum, const char *pszParmValue, char **ptr)
+static BOOL handle_ldap_debug_level(int snum, const char *pszParmValue, char **ptr)
 {
 	Globals.ldap_debug_level = lp_int(pszParmValue);
 	init_ldap_debugging();
-	return true;
+	return True;
 }
 
 /***************************************************************************
@@ -6837,7 +3270,7 @@
 static uid_t idmap_uid_low, idmap_uid_high;
 static gid_t idmap_gid_low, idmap_gid_high;
 
-bool lp_idmap_uid(uid_t *low, uid_t *high)
+BOOL lp_idmap_uid(uid_t *low, uid_t *high)
 {
         if (idmap_uid_low == 0 || idmap_uid_high == 0)
                 return False;
@@ -6851,7 +3284,7 @@
         return True;
 }
 
-bool lp_idmap_gid(gid_t *low, gid_t *high)
+BOOL lp_idmap_gid(gid_t *low, gid_t *high)
 {
         if (idmap_gid_low == 0 || idmap_gid_high == 0)
                 return False;
@@ -6867,7 +3300,7 @@
 
 /* Do some simple checks on "idmap [ug]id" parameter values */
 
-static bool handle_idmap_uid(int snum, const char *pszParmValue, char **ptr)
+static BOOL handle_idmap_uid(int snum, const char *pszParmValue, char **ptr)
 {
 	uint32 low, high;
 
@@ -6884,7 +3317,7 @@
 	return True;
 }
 
-static bool handle_idmap_gid(int snum, const char *pszParmValue, char **ptr)
+static BOOL handle_idmap_gid(int snum, const char *pszParmValue, char **ptr)
 {
 	uint32 low, high;
 
@@ -6905,10 +3338,13 @@
  Handle the DEBUG level list.
 ***************************************************************************/
 
-static bool handle_debug_list( int snum, const char *pszParmValueIn, char **ptr )
+static BOOL handle_debug_list( int snum, const char *pszParmValueIn, char **ptr )
 {
+	pstring pszParmValue;
+
+	pstrcpy(pszParmValue, pszParmValueIn);
 	string_set(ptr, pszParmValueIn);
-	return debug_parse_levels(pszParmValueIn);
+	return debug_parse_levels( pszParmValue );
 }
 
 /***************************************************************************
@@ -6920,8 +3356,10 @@
 	const char *suffix_string;
 
 
-	suffix_string = talloc_asprintf(talloc_tos(), "%s,%s", str,
-					Globals.szLdapSuffix );
+	if (!lp_talloc)
+		lp_talloc = talloc_init("lp_talloc");
+
+	suffix_string = talloc_asprintf( lp_talloc, "%s,%s", str, Globals.szLdapSuffix );
 	if ( !suffix_string ) {
 		DEBUG(0,("append_ldap_suffix: talloc_asprintf() failed!\n"));
 		return "";
@@ -6982,10 +3420,10 @@
 /***************************************************************************
 ***************************************************************************/
 
-static bool handle_printing(int snum, const char *pszParmValue, char **ptr)
+static BOOL handle_printing(int snum, const char *pszParmValue, char **ptr)
 {
 	static int parm_num = -1;
-	struct service *s;
+	service *s;
 
 	if ( parm_num == -1 )
 		parm_num = map_parameter( "printing" );
@@ -7007,20 +3445,18 @@
  Initialise a copymap.
 ***************************************************************************/
 
-static void init_copymap(struct service *pservice)
+static void init_copymap(service * pservice)
 {
 	int i;
-	if (pservice->copymap) {
-		bitmap_free(pservice->copymap);
-	}
-	pservice->copymap = bitmap_allocate(NUMPARAMETERS);
+	SAFE_FREE(pservice->copymap);
+	pservice->copymap = SMB_MALLOC_ARRAY(BOOL,NUMPARAMETERS);
 	if (!pservice->copymap)
 		DEBUG(0,
 		      ("Couldn't allocate copymap!! (size %d)\n",
 		       (int)NUMPARAMETERS));
 	else
 		for (i = 0; i < NUMPARAMETERS; i++)
-			bitmap_set(pservice->copymap, i);
+			pservice->copymap[i] = True;
 }
 
 /***************************************************************************
@@ -7038,44 +3474,35 @@
  then assume we are in the globals.
 ***************************************************************************/
 
-bool lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue)
+BOOL lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue)
 {
 	int parmnum, i, slen;
 	void *parm_ptr = NULL;	/* where we are going to store the result */
 	void *def_ptr = NULL;
-	char *param_key = NULL;
+	pstring param_key;
 	char *sep;
 	param_opt_struct *paramo, *data;
-	bool not_added;
+	BOOL not_added;
 
 	parmnum = map_parameter(pszParmName);
 
 	if (parmnum < 0) {
 		if ((sep=strchr(pszParmName, ':')) != NULL) {
-			TALLOC_CTX *frame = talloc_stackframe();
-
 			*sep = '\0';
-			param_key = talloc_asprintf(frame, "%s:", pszParmName);
-			if (!param_key) {
-				TALLOC_FREE(frame);
-				return false;
-			}
+			ZERO_STRUCT(param_key);
+			pstr_sprintf(param_key, "%s:", pszParmName);
 			slen = strlen(param_key);
-			param_key = talloc_asprintf_append(param_key, sep+1);
-			if (!param_key) {
-				TALLOC_FREE(frame);
-				return false;
-			}
+			pstrcat(param_key, sep+1);
 			trim_char(param_key+slen, ' ', ' ');
 			not_added = True;
-			data = (snum < 0) ? Globals.param_opt :
+			data = (snum < 0) ? Globals.param_opt : 
 				ServicePtrs[snum]->param_opt;
 			/* Traverse destination */
 			while (data) {
 				/* If we already have same option, override it */
 				if (strcmp(data->key, param_key) == 0) {
 					string_free(&data->value);
-					TALLOC_FREE(data->list);
+					str_list_free(&data->list);
 					data->value = SMB_STRDUP(pszParmValue);
 					not_added = False;
 					break;
@@ -7095,7 +3522,6 @@
 			}
 
 			*sep = ':';
-			TALLOC_FREE(frame);
 			return (True);
 		}
 		DEBUG(0, ("Ignoring unknown parameter \"%s\"\n", pszParmName));
@@ -7132,7 +3558,7 @@
 		   the same data pointer */
 		for (i = 0; parm_table[i].label; i++)
 			if (parm_table[i].ptr == parm_table[parmnum].ptr)
-				bitmap_clear(ServicePtrs[snum]->copymap, i);
+				ServicePtrs[snum]->copymap[i] = False;
 	}
 
 	/* if it is a special case then go ahead */
@@ -7145,11 +3571,11 @@
 	switch (parm_table[parmnum].type)
 	{
 		case P_BOOL:
-			*(bool *)parm_ptr = lp_bool(pszParmValue);
+			*(BOOL *)parm_ptr = lp_bool(pszParmValue);
 			break;
 
 		case P_BOOLREV:
-			*(bool *)parm_ptr = !lp_bool(pszParmValue);
+			*(BOOL *)parm_ptr = !lp_bool(pszParmValue);
 			break;
 
 		case P_INTEGER:
@@ -7168,9 +3594,8 @@
 			break;
 
 		case P_LIST:
-			TALLOC_FREE(*((char ***)parm_ptr));
-			*(char ***)parm_ptr = str_list_make(
-				NULL, pszParmValue, NULL);
+			str_list_free((char ***)parm_ptr);
+			*(char ***)parm_ptr = str_list_make(pszParmValue, NULL);
 			break;
 
 		case P_STRING:
@@ -7182,6 +3607,15 @@
 			strupper_m(*(char **)parm_ptr);
 			break;
 
+		case P_GSTRING:
+			pstrcpy((char *)parm_ptr, pszParmValue);
+			break;
+
+		case P_UGSTRING:
+			pstrcpy((char *)parm_ptr, pszParmValue);
+			strupper_m((char *)parm_ptr);
+			break;
+
 		case P_ENUM:
 			lp_set_enum_parm( &parm_table[parmnum], pszParmValue, (int*)parm_ptr );
 			break;
@@ -7196,8 +3630,7 @@
  Process a parameter.
 ***************************************************************************/
 
-static bool do_parameter(const char *pszParmName, const char *pszParmValue,
-			 void *userdata)
+static BOOL do_parameter(const char *pszParmName, const char *pszParmValue)
 {
 	if (!bInGlobalSection && bGlobalOnly)
 		return (True);
@@ -7228,11 +3661,11 @@
 			break;
 
 		case P_BOOL:
-			fprintf(f, "%s", BOOLSTR(*(bool *)ptr));
+			fprintf(f, "%s", BOOLSTR(*(BOOL *)ptr));
 			break;
 
 		case P_BOOLREV:
-			fprintf(f, "%s", BOOLSTR(!*(bool *)ptr));
+			fprintf(f, "%s", BOOLSTR(!*(BOOL *)ptr));
 			break;
 
 		case P_INTEGER:
@@ -7243,16 +3676,14 @@
 			fprintf(f, "%c", *(char *)ptr);
 			break;
 
-		case P_OCTAL: {
-			char *o = octal_string(*(int *)ptr);
-			fprintf(f, "%s", o);
-			TALLOC_FREE(o);
+		case P_OCTAL:
+			fprintf(f, "%s", octal_string(*(int *)ptr));
 			break;
-		}
 
 		case P_LIST:
 			if ((char ***)ptr && *(char ***)ptr) {
 				char **list = *(char ***)ptr;
+				
 				for (; *list; list++) {
 					/* surround strings with whitespace in double quotes */
 					if ( strchr_m( *list, ' ' ) )
@@ -7263,6 +3694,13 @@
 			}
 			break;
 
+		case P_GSTRING:
+		case P_UGSTRING:
+			if ((char *)ptr) {
+				fprintf(f, "%s", (char *)ptr);
+			}
+			break;
+
 		case P_STRING:
 		case P_USTRING:
 			if (*(char **)ptr) {
@@ -7278,12 +3716,12 @@
  Check if two parameters are equal.
 ***************************************************************************/
 
-static bool equal_parameter(parm_type type, void *ptr1, void *ptr2)
+static BOOL equal_parameter(parm_type type, void *ptr1, void *ptr2)
 {
 	switch (type) {
 		case P_BOOL:
 		case P_BOOLREV:
-			return (*((bool *)ptr1) == *((bool *)ptr2));
+			return (*((BOOL *)ptr1) == *((BOOL *)ptr2));
 
 		case P_INTEGER:
 		case P_ENUM:
@@ -7292,10 +3730,20 @@
 
 		case P_CHAR:
 			return (*((char *)ptr1) == *((char *)ptr2));
-
+		
 		case P_LIST:
 			return str_list_compare(*(char ***)ptr1, *(char ***)ptr2);
 
+		case P_GSTRING:
+		case P_UGSTRING:
+		{
+			char *p1 = (char *)ptr1, *p2 = (char *)ptr2;
+			if (p1 && !*p1)
+				p1 = NULL;
+			if (p2 && !*p2)
+				p2 = NULL;
+			return (p1 == p2 || strequal(p1, p2));
+		}
 		case P_STRING:
 		case P_USTRING:
 		{
@@ -7327,10 +3775,10 @@
  Returns True on success, False on failure. 
 ***************************************************************************/
 
-static bool do_section(const char *pszSectionName, void *userdata)
+static BOOL do_section(const char *pszSectionName)
 {
-	bool bRetval;
-	bool isglobal = ((strwicmp(pszSectionName, GLOBAL_NAME) == 0) ||
+	BOOL bRetval;
+	BOOL isglobal = ((strwicmp(pszSectionName, GLOBAL_NAME) == 0) ||
 			 (strwicmp(pszSectionName, GLOBAL_NAME2) == 0));
 	bRetval = False;
 
@@ -7377,7 +3825,7 @@
  Determine if a partcular base parameter is currentl set to the default value.
 ***************************************************************************/
 
-static bool is_default(int i)
+static BOOL is_default(int i)
 {
 	if (!defaults_saved)
 		return False;
@@ -7389,10 +3837,14 @@
 		case P_USTRING:
 			return strequal(parm_table[i].def.svalue,
 					*(char **)parm_table[i].ptr);
+		case P_GSTRING:
+		case P_UGSTRING:
+			return strequal(parm_table[i].def.svalue,
+					(char *)parm_table[i].ptr);
 		case P_BOOL:
 		case P_BOOLREV:
 			return parm_table[i].def.bvalue ==
-				*(bool *)parm_table[i].ptr;
+				*(BOOL *)parm_table[i].ptr;
 		case P_CHAR:
 			return parm_table[i].def.cvalue ==
 				*(char *)parm_table[i].ptr;
@@ -7442,7 +3894,7 @@
  Return True if a local parameter is currently set to the global default.
 ***************************************************************************/
 
-bool lp_is_default(int snum, struct parm_struct *parm)
+BOOL lp_is_default(int snum, struct parm_struct *parm)
 {
 	int pdiff = PTR_DIFF(parm->ptr, &sDefault);
 
@@ -7455,7 +3907,7 @@
  Display the contents of a single services record.
 ***************************************************************************/
 
-static void dump_a_service(struct service *pService, FILE * f)
+static void dump_a_service(service * pService, FILE * f)
 {
 	int i;
 	param_opt_struct *data;
@@ -7505,10 +3957,10 @@
  Display the contents of a parameter of a single services record.
 ***************************************************************************/
 
-bool dump_a_parameter(int snum, char *parm_name, FILE * f, bool isGlobal)
+BOOL dump_a_parameter(int snum, char *parm_name, FILE * f, BOOL isGlobal)
 {
 	int i;
-	bool result = False;
+	BOOL result = False;
 	parm_class p_class;
 	unsigned flag = 0;
 	fstring local_parm_name;
@@ -7552,7 +4004,7 @@
 			if (isGlobal) {
 				ptr = parm_table[i].ptr;
 			} else {
-				struct service *pService = ServicePtrs[snum];
+				service * pService = ServicePtrs[snum];
 				ptr = ((char *)pService) +
 					PTR_DIFF(parm_table[i].ptr, &sDefault);
 			}
@@ -7569,24 +4021,7 @@
 }
 
 /***************************************************************************
- Return info about the requested parameter (given as a string).
- Return NULL when the string is not a valid parameter name.
-***************************************************************************/
-
-struct parm_struct *lp_get_parameter(const char *param_name)
-{
-	int num = map_parameter(param_name);
-
-	if (num < 0) {
-		return NULL;
-	}
-
-	return &parm_table[num];
-}
-
-/***************************************************************************
- Return info about the next parameter in a service.
- snum==GLOBAL_SECTION_SNUM gives the globals.
+ Return info about the next service  in a service. snum==GLOBAL_SECTION_SNUM gives the globals.
  Return NULL when out of parameters.
 ***************************************************************************/
 
@@ -7606,14 +4041,11 @@
 			    && (parm_table[*i].ptr ==
 				parm_table[(*i) - 1].ptr))
 				continue;
-			
-			if (is_default(*i) && !allparameters)
-				continue;
 
 			return &parm_table[(*i)++];
 		}
 	} else {
-		struct service *pService = ServicePtrs[snum];
+		service *pService = ServicePtrs[snum];
 
 		for (; parm_table[*i].label; (*i)++) {
 			if (parm_table[*i].p_class == P_SEPARATOR)
@@ -7651,7 +4083,7 @@
 /***************************************************************************
  Display the contents of a single copy structure.
 ***************************************************************************/
-static void dump_copy_map(bool *pcopymap)
+static void dump_copy_map(BOOL *pcopymap)
 {
 	int i;
 	if (!pcopymap)
@@ -7673,7 +4105,7 @@
  Return TRUE if the passed service number is within range.
 ***************************************************************************/
 
-bool lp_snum_ok(int iService)
+BOOL lp_snum_ok(int iService)
 {
 	return (LP_SNUM_OK(iService) && ServicePtrs[iService]->bAvailable);
 }
@@ -7687,7 +4119,6 @@
 	char *s;
 	char *p;
 	int homes;
-	char *saveptr;
 
 	if (!str)
 		return;
@@ -7698,19 +4129,14 @@
 
 	homes = lp_servicenumber(HOMES_NAME);
 
-	for (p = strtok_r(s, LIST_SEP, &saveptr); p;
-	     p = strtok_r(NULL, LIST_SEP, &saveptr)) {
-		char *home;
+	for (p = strtok(s, LIST_SEP); p; p = strtok(NULL, LIST_SEP)) {
+		char *home = get_user_home_dir(p);
 
 		if (lp_servicenumber(p) >= 0)
 			continue;
 
-		home = get_user_home_dir(talloc_tos(), p);
-
 		if (home && homes >= 0)
 			lp_add_home(p, homes, p, home);
-
-		TALLOC_FREE(home);
 	}
 	SAFE_FREE(s);
 }
@@ -7737,7 +4163,7 @@
  Have we loaded a services file yet?
 ***************************************************************************/
 
-bool lp_loaded(void)
+BOOL lp_loaded(void)
 {
 	return (bLoaded);
 }
@@ -7746,7 +4172,7 @@
  Unload unused services.
 ***************************************************************************/
 
-void lp_killunused(bool (*snumused) (int))
+void lp_killunused(BOOL (*snumused) (int))
 {
 	int i;
 	for (i = 0; i < iNumServices; i++) {
@@ -7765,14 +4191,6 @@
 	}
 }
 
-/**
- * Kill all except autoloaded and usershare services - convenience wrapper
- */
-void lp_kill_all_services(void)
-{
-	lp_killunused(NULL);
-}
-
 /***************************************************************************
  Unload a service.
 ***************************************************************************/
@@ -7798,9 +4216,8 @@
 			continue;
 		switch (parm_table[i].type) {
 			case P_LIST:
-				str_list_copy(
-					NULL, &(parm_table[i].def.lvalue),
-					*(const char ***)parm_table[i].ptr);
+				str_list_copy(&(parm_table[i].def.lvalue),
+					    *(const char ***)parm_table[i].ptr);
 				break;
 			case P_STRING:
 			case P_USTRING:
@@ -7810,10 +4227,18 @@
 					parm_table[i].def.svalue = NULL;
 				}
 				break;
+			case P_GSTRING:
+			case P_UGSTRING:
+				if (parm_table[i].ptr) {
+					parm_table[i].def.svalue = SMB_STRDUP((char *)parm_table[i].ptr);
+				} else {
+					parm_table[i].def.svalue = NULL;
+				}
+				break;
 			case P_BOOL:
 			case P_BOOLREV:
 				parm_table[i].def.bvalue =
-					*(bool *)parm_table[i].ptr;
+					*(BOOL *)parm_table[i].ptr;
 				break;
 			case P_CHAR:
 				parm_table[i].def.cvalue =
@@ -7891,7 +4316,7 @@
 		case SEC_USER:
 			if (lp_domain_logons()) {
 
-				if (Globals.iDomainMaster) /* auto or yes */ 
+				if (Globals.bDomainMaster) /* auto or yes */ 
 					server_role = ROLE_DOMAIN_PDC;
 				else
 					server_role = ROLE_DOMAIN_BDC;
@@ -7938,7 +4363,7 @@
  get their sorry ass fired.
 ***************************************************************************/
 
-static bool check_usershare_stat(const char *fname, SMB_STRUCT_STAT *psbuf)
+static BOOL check_usershare_stat(const char *fname, SMB_STRUCT_STAT *psbuf)
 {
 	if (!S_ISREG(psbuf->st_mode)) {
 		DEBUG(0,("check_usershare_stat: file %s owned by uid %u is "
@@ -7971,28 +4396,23 @@
  Parse the contents of a usershare file.
 ***************************************************************************/
 
-enum usershare_err parse_usershare_file(TALLOC_CTX *ctx,
+enum usershare_err parse_usershare_file(TALLOC_CTX *ctx, 
 			SMB_STRUCT_STAT *psbuf,
 			const char *servicename,
 			int snum,
 			char **lines,
 			int numlines,
-			char **pp_sharepath,
-			char **pp_comment,
+			pstring sharepath,
+			pstring comment,
 			SEC_DESC **ppsd,
-			bool *pallow_guest)
+			BOOL *pallow_guest)
 {
 	const char **prefixallowlist = lp_usershare_prefix_allow_list();
 	const char **prefixdenylist = lp_usershare_prefix_deny_list();
 	int us_vers;
 	SMB_STRUCT_DIR *dp;
 	SMB_STRUCT_STAT sbuf;
-	char *sharepath = NULL;
-	char *comment = NULL;
 
-	*pp_sharepath = NULL;
-	*pp_comment = NULL;
-
 	*pallow_guest = False;
 
 	if (numlines < 4) {
@@ -8014,20 +4434,14 @@
 		return USERSHARE_MALFORMED_PATH;
 	}
 
-	sharepath = talloc_strdup(ctx, &lines[1][5]);
-	if (!sharepath) {
-		return USERSHARE_POSIX_ERR;
-	}
+	pstrcpy(sharepath, &lines[1][5]);
 	trim_string(sharepath, " ", " ");
 
 	if (strncmp(lines[2], "comment=", 8) != 0) {
 		return USERSHARE_MALFORMED_COMMENT_DEF;
 	}
 
-	comment = talloc_strdup(ctx, &lines[2][8]);
-	if (!comment) {
-		return USERSHARE_POSIX_ERR;
-	}
+	pstrcpy(comment, &lines[2][8]);
 	trim_string(comment, " ", " ");
 	trim_char(comment, '"', '"');
 
@@ -8050,8 +4464,6 @@
 
 	if (snum != -1 && (strcmp(sharepath, ServicePtrs[snum]->szPath) == 0)) {
 		/* Path didn't change, no checks needed. */
-		*pp_sharepath = sharepath;
-		*pp_comment = comment;
 		return USERSHARE_OK;
 	}
 
@@ -8136,8 +4548,6 @@
 		}
 	}
 
-	*pp_sharepath = sharepath;
-	*pp_comment = comment;
 	return USERSHARE_OK;
 }
 
@@ -8154,9 +4564,9 @@
 {
 	SMB_STRUCT_STAT sbuf;
 	SMB_STRUCT_STAT lsbuf;
-	char *fname = NULL;
-	char *sharepath = NULL;
-	char *comment = NULL;
+	pstring fname;
+	pstring sharepath;
+	pstring comment;
 	fstring service_name;
 	char **lines = NULL;
 	int numlines = 0;
@@ -8164,7 +4574,7 @@
 	int iService = -1;
 	TALLOC_CTX *ctx = NULL;
 	SEC_DESC *psd = NULL;
-	bool guest_ok = False;
+	BOOL guest_ok = False;
 
 	/* Ensure share name doesn't contain invalid characters. */
 	if (!validate_net_name(file_name, INVALID_SHARENAME_CHARS, strlen(file_name))) {
@@ -8176,8 +4586,9 @@
 
 	fstrcpy(service_name, file_name);
 
-	if (asprintf(&fname, "%s/%s", dir_name, file_name) < 0) {
-	}
+	pstrcpy(fname, dir_name);
+	pstrcat(fname, "/");
+	pstrcat(fname, file_name);
 
 	/* Minimize the race condition by doing an lstat before we
 	   open and fstat. Ensure this isn't a symlink link. */
@@ -8185,36 +4596,24 @@
 	if (sys_lstat(fname, &lsbuf) != 0) {
 		DEBUG(0,("process_usershare_file: stat of %s failed. %s\n",
 			fname, strerror(errno) ));
-		SAFE_FREE(fname);
 		return -1;
 	}
 
 	/* This must be a regular file, not a symlink, directory or
 	   other strange filetype. */
 	if (!check_usershare_stat(fname, &lsbuf)) {
-		SAFE_FREE(fname);
 		return -1;
 	}
 
-	{
-		char *canon_name = canonicalize_servicename(service_name);
-		TDB_DATA data = dbwrap_fetch_bystring(
-			ServiceHash, canon_name, canon_name);
+	/* See if there is already a servicenum for this name. */
+	/* tdb_fetch_int32 returns -1 if not found. */
+	iService = (int)tdb_fetch_int32(ServiceHash, canonicalize_servicename(service_name) );
 
-		iService = -1;
-
-		if ((data.dptr != NULL) && (data.dsize == sizeof(iService))) {
-			iService = *(int *)data.dptr;
-		}
-		TALLOC_FREE(canon_name);
-	}
-
 	if (iService != -1 && ServicePtrs[iService]->usershare_last_mod == lsbuf.st_mtime) {
 		/* Nothing changed - Mark valid and return. */
 		DEBUG(10,("process_usershare_file: service %s not changed.\n",
 			service_name ));
 		ServicePtrs[iService]->usershare = USERSHARE_VALID;
-		SAFE_FREE(fname);
 		return iService;
 	}
 
@@ -8228,7 +4627,6 @@
 	if (fd == -1) {
 		DEBUG(0,("process_usershare_file: unable to open %s. %s\n",
 			fname, strerror(errno) ));
-		SAFE_FREE(fname);
 		return -1;
 	}
 
@@ -8237,7 +4635,6 @@
 		close(fd);
 		DEBUG(0,("process_usershare_file: fstat of %s failed. %s\n",
 			fname, strerror(errno) ));
-		SAFE_FREE(fname);
 		return -1;
 	}
 
@@ -8246,14 +4643,12 @@
 		close(fd);
 		DEBUG(0,("process_usershare_file: fstat of %s is a different file from lstat. "
 			"Symlink spoofing going on ?\n", fname ));
-		SAFE_FREE(fname);
 		return -1;
 	}
 
 	/* This must be a regular file, not a symlink, directory or
 	   other strange filetype. */
 	if (!check_usershare_stat(fname, &sbuf)) {
-		SAFE_FREE(fname);
 		return -1;
 	}
 
@@ -8263,12 +4658,9 @@
 	if (lines == NULL) {
 		DEBUG(0,("process_usershare_file: loading file %s owned by %u failed.\n",
 			fname, (unsigned int)sbuf.st_uid ));
-		SAFE_FREE(fname);
 		return -1;
 	}
 
-	SAFE_FREE(fname);
-
 	/* Should we allow printers to be shared... ? */
 	ctx = talloc_init("usershare_sd_xctx");
 	if (!ctx) {
@@ -8277,8 +4669,8 @@
 	}
 
 	if (parse_usershare_file(ctx, &sbuf, service_name,
-			iService, lines, numlines, &sharepath,
-			&comment, &psd, &guest_ok) != USERSHARE_OK) {
+			iService, lines, numlines, sharepath,
+			comment, &psd, &guest_ok) != USERSHARE_OK) {
 		talloc_destroy(ctx);
 		file_lines_free(lines);
 		return -1;
@@ -8288,7 +4680,7 @@
 
 	/* Everything ok - add the service possibly using a template. */
 	if (iService < 0) {
-		const struct service *sp = &sDefault;
+		const service *sp = &sDefault;
 		if (snum_template != -1) {
 			sp = ServicePtrs[snum_template];
 		}
@@ -8314,6 +4706,8 @@
 		return -1;
 	}
 
+	talloc_destroy(ctx);
+
 	/* If from a template it may be marked invalid. */
 	ServicePtrs[iService]->valid = True;
 
@@ -8330,8 +4724,6 @@
 	string_set(&ServicePtrs[iService]->szPath, sharepath);
 	string_set(&ServicePtrs[iService]->comment, comment);
 
-	talloc_destroy(ctx);
-
 	return iService;
 }
 
@@ -8339,31 +4731,26 @@
  Checks if a usershare entry has been modified since last load.
 ***************************************************************************/
 
-static bool usershare_exists(int iService, time_t *last_mod)
+static BOOL usershare_exists(int iService, time_t *last_mod)
 {
 	SMB_STRUCT_STAT lsbuf;
 	const char *usersharepath = Globals.szUsersharePath;
-	char *fname;
+	pstring fname;
 
-	if (asprintf(&fname, "%s/%s",
-				usersharepath,
-				ServicePtrs[iService]->szService) < 0) {
-		return false;
-	}
+	pstrcpy(fname, usersharepath);
+	pstrcat(fname, "/");
+	pstrcat(fname, ServicePtrs[iService]->szService);
 
 	if (sys_lstat(fname, &lsbuf) != 0) {
-		SAFE_FREE(fname);
-		return false;
+		return False;
 	}
 
 	if (!S_ISREG(lsbuf.st_mode)) {
-		SAFE_FREE(fname);
-		return false;
+		return False;
 	}
 
-	SAFE_FREE(fname);
 	*last_mod = lsbuf.st_mtime;
-	return true;
+	return True;
 }
 
 /***************************************************************************
@@ -8583,7 +4970,7 @@
 			/* Remove from the share ACL db. */
 			DEBUG(10,("load_usershare_shares: Removing deleted usershare %s\n",
 				lp_servicename(iService) ));
-			delete_share_security(lp_servicename(iService));
+			delete_share_security(snum2params_static(iService));
 			free_service_byindex(iService);
 		}
 	}
@@ -8601,6 +4988,8 @@
 	struct file_lists *next;
 	int i;
 
+	lp_TALLOC_FREE();
+
 	/* Free the file lists */
 
 	f = file_lists;
@@ -8634,55 +5023,39 @@
 			string_free( (char**)parm_table[i].ptr );
 		}
 		else if (parm_table[i].type == P_LIST) {
-			TALLOC_FREE( *((char***)parm_table[i].ptr) );
+			str_list_free( (char***)parm_table[i].ptr );
 		}
 	}
 }
 
-
 /***************************************************************************
- Allow client apps to specify that they are a client
-***************************************************************************/
-void lp_set_in_client(bool b)
-{
-    in_client = b;
-}
-
-
-/***************************************************************************
- Determine if we're running in a client app
-***************************************************************************/
-bool lp_is_in_client(void)
-{
-    return in_client;
-}
-
-
-
-
-/***************************************************************************
  Load the services array from the services file. Return True on success, 
  False on failure.
 ***************************************************************************/
 
-bool lp_load_ex(const char *pszFname,
-		bool global_only,
-		bool save_defaults,
-		bool add_ipc,
-		bool initialize_globals,
-		bool allow_include_registry)
+BOOL lp_load(const char *pszFname,
+             BOOL global_only,
+             BOOL save_defaults,
+	     BOOL add_ipc,
+             BOOL initialize_globals)
 {
-	char *n2 = NULL;
-	bool bRetval;
+	pstring n2;
+	BOOL bRetval;
 	param_opt_struct *data, *pdata;
 
-	bRetval = False;
+	pstrcpy(n2, pszFname);
+	
+	standard_sub_basic( get_current_username(), current_user_info.domain,
+			    n2,sizeof(n2) );
 
-	DEBUG(3, ("lp_load_ex: refreshing parameters\n"));
+	add_to_file_list(pszFname, n2);
 
+	bRetval = False;
+
+	DEBUG(3, ("lp_load: refreshing parameters\n"));
+	
 	bInGlobalSection = True;
 	bGlobalOnly = global_only;
-	bAllowIncludeRegistry = allow_include_registry;
 
 	init_globals(! initialize_globals);
 	debug_init();
@@ -8697,72 +5070,32 @@
 		while (data) {
 			string_free(&data->key);
 			string_free(&data->value);
-			TALLOC_FREE(data->list);
+			str_list_free(&data->list);
 			pdata = data->next;
 			SAFE_FREE(data);
 			data = pdata;
 		}
 		Globals.param_opt = NULL;
 	}
+	
+	/* We get sections first, so have to start 'behind' to make up */
+	iServiceIndex = -1;
+	bRetval = pm_process(n2, do_section, do_parameter);
 
-	if (lp_config_backend_is_file()) {
-		n2 = alloc_sub_basic(get_current_username(),
-					current_user_info.domain,
-					pszFname);
-		if (!n2) {
-			smb_panic("lp_load_ex: out of memory");
-		}
+	/* finish up the last section */
+	DEBUG(4, ("pm_process() returned %s\n", BOOLSTR(bRetval)));
+	if (bRetval)
+		if (iServiceIndex >= 0)
+			bRetval = service_ok(iServiceIndex);
 
-		add_to_file_list(pszFname, n2);
-
-		/* We get sections first, so have to start 'behind' to make up */
-		iServiceIndex = -1;
-		bRetval = pm_process(n2, do_section, do_parameter, NULL);
-		SAFE_FREE(n2);
-
-		/* finish up the last section */
-		DEBUG(4, ("pm_process() returned %s\n", BOOLSTR(bRetval)));
-		if (bRetval) {
-			if (iServiceIndex >= 0) {
-				bRetval = service_ok(iServiceIndex);
-			}
-		}
-
-		if (lp_config_backend_is_registry()) {
-			/* config backend changed to registry in config file */
-			/*
-			 * We need to use this extra global variable here to
-			 * survive restart: init_globals uses this as a default
-			 * for ConfigBackend. Otherwise, init_globals would
-			 *  send us into an endless loop here.
-			 */
-			config_backend = CONFIG_BACKEND_REGISTRY;
-			/* start over */
-			DEBUG(1, ("lp_load_ex: changing to config backend "
-				  "registry\n"));
-			init_globals(false);
-			lp_kill_all_services();
-			return lp_load_ex(pszFname, global_only, save_defaults,
-					  add_ipc, initialize_globals,
-					  allow_include_registry);
-		}
-	} else if (lp_config_backend_is_registry()) {
-		bRetval = process_registry_globals();
-	} else {
-		DEBUG(0, ("Illegal config  backend given: %d\n",
-			  lp_config_backend()));
-		bRetval = false;
-	}
-
 	lp_add_auto_services(lp_auto_services());
 
 	if (add_ipc) {
 		/* When 'restrict anonymous = 2' guest connections to ipc$
 		   are denied */
 		lp_add_ipc("IPC$", (lp_restrict_anonymous() < 2));
-		if ( lp_enable_asu_support() ) {
-			lp_add_ipc("ADMIN$", false);
-		}
+		if ( lp_enable_asu_support() )
+			lp_add_ipc("ADMIN$", False);
 	}
 
 	set_server_role();
@@ -8773,41 +5106,15 @@
 
 	/* Now we check bWINSsupport and set szWINSserver to 127.0.0.1 */
 	/* if bWINSsupport is true and we are in the client            */
-	if (lp_is_in_client() && Globals.bWINSsupport) {
+	if (in_client && Globals.bWINSsupport) {
 		lp_do_parameter(GLOBAL_SECTION_SNUM, "wins server", "127.0.0.1");
 	}
 
 	init_iconv();
 
-	bAllowIncludeRegistry = true;
-
 	return (bRetval);
 }
 
-bool lp_load(const char *pszFname,
-	     bool global_only,
-	     bool save_defaults,
-	     bool add_ipc,
-	     bool initialize_globals)
-{
-	return lp_load_ex(pszFname,
-			  global_only,
-			  save_defaults,
-			  add_ipc,
-			  initialize_globals,
-			  true);
-}
-
-bool lp_load_initial_only(const char *pszFname)
-{
-	return lp_load_ex(pszFname,
-			  true,
-			  false,
-			  false,
-			  true,
-			  false);
-}
-
 /***************************************************************************
  Reset the max number of services.
 ***************************************************************************/
@@ -8830,7 +5137,7 @@
 Display the contents of the services array in human-readable form.
 ***************************************************************************/
 
-void lp_dump(FILE *f, bool show_defaults, int maxtoprint)
+void lp_dump(FILE *f, BOOL show_defaults, int maxtoprint)
 {
 	int iService;
 
@@ -8851,7 +5158,7 @@
 Display the contents of one service in human-readable form.
 ***************************************************************************/
 
-void lp_dump_one(FILE * f, bool show_defaults, int snum)
+void lp_dump_one(FILE * f, BOOL show_defaults, int snum)
 {
 	if (VALID(snum)) {
 		if (ServicePtrs[snum]->szService[0] == '\0')
@@ -8897,7 +5204,7 @@
 
 		if (!usershare_exists(iService, &last_mod)) {
 			/* Remove the share security tdb entry for it. */
-			delete_share_security(lp_servicename(iService));
+			delete_share_security(snum2params_static(iService));
 			/* Remove it from the array. */
 			free_service_byindex(iService);
 			/* Doesn't exist anymore. */
@@ -8921,7 +5228,7 @@
 	return (iService);
 }
 
-bool share_defined(const char *service_name)
+BOOL share_defined(const char *service_name)
 {
 	return (lp_servicenumber(service_name) != -1);
 }
@@ -9026,7 +5333,7 @@
 	}
 		
 	/* This returns a 33 byte guarenteed null terminated string. */
-	ret = talloc_strndup(talloc_tos(), label, 32);
+	ret = talloc_strndup(main_loop_talloc_get(), label, 32);
 	if (!ret) {
 		return "";
 	}		
@@ -9101,24 +5408,24 @@
  If we are PDC then prefer us as DMB
 ************************************************************/
 
-bool lp_domain_master(void)
+BOOL lp_domain_master(void)
 {
-	if (Globals.iDomainMaster == Auto)
+	if (Globals.bDomainMaster == Auto)
 		return (lp_server_role() == ROLE_DOMAIN_PDC);
 
-	return (bool)Globals.iDomainMaster;
+	return Globals.bDomainMaster;
 }
 
 /***********************************************************
  If we are DMB then prefer us as LMB
 ************************************************************/
 
-bool lp_preferred_master(void)
+BOOL lp_preferred_master(void)
 {
-	if (Globals.iPreferredMaster == Auto)
+	if (Globals.bPreferredMaster == Auto)
 		return (lp_local_master() && lp_domain_master());
 
-	return (bool)Globals.iPreferredMaster;
+	return Globals.bPreferredMaster;
 }
 
 /*******************************************************************
@@ -9137,7 +5444,7 @@
 
 void lp_copy_service(int snum, const char *new_name)
 {
-	do_section(new_name, NULL);
+	do_section(new_name);
 	if (snum >= 0) {
 		snum = lp_servicenumber(new_name);
 		if (snum >= 0)
@@ -9161,7 +5468,7 @@
 
 int lp_major_announce_version(void)
 {
-	static bool got_major = False;
+	static BOOL got_major = False;
 	static int major_version = DEFAULT_MAJOR_VERSION;
 	char *vers;
 	char *p;
@@ -9183,7 +5490,7 @@
 
 int lp_minor_announce_version(void)
 {
-	static bool got_minor = False;
+	static BOOL got_minor = False;
 	static int minor_version = DEFAULT_MINOR_VERSION;
 	char *vers;
 	char *p;
@@ -9229,7 +5536,7 @@
 void lp_set_logfile(const char *name)
 {
 	string_set(&Globals.szLogFile, name);
-	debug_set_logfile(name);
+	pstrcpy(debugf, name);
 }
 
 /*******************************************************************
@@ -9271,7 +5578,7 @@
 
 static uint32 spoolss_state;
 
-bool lp_disable_spoolss( void )
+BOOL lp_disable_spoolss( void )
 {
 	if ( spoolss_state == SVCCTL_STATE_UNKNOWN )
 		spoolss_state = _lp_disable_spoolss() ? SVCCTL_STOPPED : SVCCTL_RUNNING;
@@ -9295,22 +5602,20 @@
  Ensure we don't use sendfile if server smb signing is active.
 ********************************************************************/
 
-bool lp_use_sendfile(int snum)
+BOOL lp_use_sendfile(int snum)
 {
 	/* Using sendfile blows the brains out of any DOS or Win9x TCP stack... JRA. */
 	if (Protocol < PROTOCOL_NT1) {
 		return False;
 	}
-	return (_lp_use_sendfile(snum) &&
-			(get_remote_arch() != RA_WIN95) &&
-			!srv_is_signing_active());
+	return (_lp_use_sendfile(snum) && (get_remote_arch() != RA_WIN95) && !srv_is_signing_active());
 }
 
 /*******************************************************************
  Turn off sendfile if we find the underlying OS doesn't support it.
 ********************************************************************/
 
-void set_use_sendfile(int snum, bool val)
+void set_use_sendfile(int snum, BOOL val)
 {
 	if (LP_SNUM_OK(snum))
 		ServicePtrs[snum]->bUseSendfile = val;
@@ -9322,7 +5627,7 @@
  Turn off storing DOS attributes if this share doesn't support it.
 ********************************************************************/
 
-void set_store_dos_attributes(int snum, bool val)
+void set_store_dos_attributes(int snum, BOOL val)
 {
 	if (!LP_SNUM_OK(snum))
 		return;
@@ -9338,9 +5643,9 @@
  Global state for POSIX pathname processing.
 ********************************************************************/
 
-static bool posix_pathnames;
+static BOOL posix_pathnames;
 
-bool lp_posix_pathnames(void)
+BOOL lp_posix_pathnames(void)
 {
 	return posix_pathnames;
 }
@@ -9359,7 +5664,7 @@
  Global state for POSIX lock processing - CIFS unix extensions.
 ********************************************************************/
 
-bool posix_default_lock_was_set;
+BOOL posix_default_lock_was_set;
 static enum brl_flavour posix_cifsx_locktype; /* By default 0 == WINDOWS_LOCK */
 
 enum brl_flavour lp_posix_cifsu_locktype(files_struct *fsp)
@@ -9379,11 +5684,3 @@
 	posix_default_lock_was_set = True;
 	posix_cifsx_locktype = val;
 }
-
-int lp_min_receive_file_size(void)
-{
-	if (Globals.iminreceivefile < 0) {
-		return 0;
-	}
-	return MIN(Globals.iminreceivefile, BUFFER_SIZE);
-}

Modified: branches/samba/upstream/source/param/params.c
===================================================================
--- branches/samba/upstream/source/param/params.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/param/params.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,7 +10,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
@@ -19,7 +19,8 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  * -------------------------------------------------------------------------- **
  *
@@ -80,6 +81,8 @@
 
 #include "includes.h"
 
+extern BOOL in_client;
+
 /* -------------------------------------------------------------------------- **
  * Constants...
  */
@@ -97,6 +100,9 @@
  *  bSize       - The size of the global buffer <bufr>.
  */
 
+static char *bufr  = NULL;
+static int   bSize = 0;
+
 /* we can't use FILE* due to the 256 fd limit - use this cheap hack
    instead */
 typedef struct {
@@ -207,7 +213,7 @@
  *
  *****************************************************************************/
 
-static int Continuation(uint8_t *line, int pos )
+static int Continuation(char *line, int pos )
 {
 	pos--;
 	while( (pos >= 0) && isspace((int)line[pos]))
@@ -230,7 +236,7 @@
  * ------------------------------------------------------------------------ **
  */
 
-static bool Section( DATA_BLOB *buf, myFILE *InFile, bool (*sfunc)(const char *, void *), void *userdata )
+static BOOL Section( myFILE *InFile, BOOL (*sfunc)(const char *) )
 {
 	int   c;
 	int   i;
@@ -255,37 +261,37 @@
 
 	while( (EOF != c) && (c > 0) ) {
 		/* Check that the buffer is big enough for the next character. */
-		if( i > (buf->length - 2) ) {
-			uint8_t *tb = (uint8_t *)SMB_REALLOC_KEEP_OLD_ON_ERROR(buf->data, buf->length+BUFR_INC );
+		if( i > (bSize - 2) ) {
+			char *tb = (char *)SMB_REALLOC_KEEP_OLD_ON_ERROR( bufr, bSize +BUFR_INC );
 			if(!tb) {
 				DEBUG(0, ("%s Memory re-allocation failure.", func) );
 				return False;
 			}
-			buf->data = tb;
-			buf->length += BUFR_INC;
+			bufr = tb;
+			bSize += BUFR_INC;
 		}
 
 		/* Handle a single character other than section end. */
 		switch( c ) {
 			case '\n': /* Got newline before closing ']'.    */
-				i = Continuation( buf->data, i );    /* Check for line continuation.     */
+				i = Continuation( bufr, i );    /* Check for line continuation.     */
 				if( i < 0 ) {
-					buf->data[end] = '\0';
-					DEBUG(0, ("%s Badly formed line in configuration file: %s\n", func, buf->data ));
+					bufr[end] = '\0';
+					DEBUG(0, ("%s Badly formed line in configuration file: %s\n", func, bufr ));
 					return False;
 				}
-				end = ( (i > 0) && (' ' == buf->data[i - 1]) ) ? (i - 1) : (i);
+				end = ( (i > 0) && (' ' == bufr[i - 1]) ) ? (i - 1) : (i);
 					c = mygetc( InFile );             /* Continue with next line.         */
 				break;
 
 			default: /* All else are a valid name chars.   */
 				if(isspace( c )) {
 					/* One space per whitespace region. */
-					buf->data[end] = ' ';
+					bufr[end] = ' ';
 					i = end + 1;
 					c = EatWhitespace( InFile );
 				} else {
-					buf->data[i++] = c;
+					bufr[i++] = c;
 					end = i;
 					c = mygetc( InFile );
 				}
@@ -293,13 +299,13 @@
 
 		if (AtSectionEnd(InFile)) {
 			/* Got to the closing bracket. */
-			buf->data[end] = '\0';
+			bufr[end] = '\0';
 			if( 0 == end ) {
 				/* Don't allow an empty name.       */
 				DEBUG(0, ("%s Empty section name in configuration file.\n", func ));
 				return False;
 			}
-			if( !sfunc((char *)buf->data, userdata) )            /* Got a valid name.  Deal with it. */
+			if( !sfunc(bufr) )            /* Got a valid name.  Deal with it. */
 				return False;
 			EatComment( InFile );     /* Finish off the line.             */
 			return True;
@@ -308,7 +314,7 @@
 	}
 
 	/* We arrive here if we've met the EOF before the closing bracket. */
-	DEBUG(0, ("%s Unexpected EOF in the configuration file: %s\n", func, buf->data ));
+	DEBUG(0, ("%s Unexpected EOF in the configuration file: %s\n", func, bufr ));
 	return False;
 }
 
@@ -336,7 +342,7 @@
  * ------------------------------------------------------------------------ **
  */
 
-static bool Parameter( DATA_BLOB *buf, myFILE *InFile, bool (*pfunc)(const char *, const char *, void *), int c, void *userdata )
+static BOOL Parameter( myFILE *InFile, BOOL (*pfunc)(const char *, const char *), int c )
 {
 	int   i       = 0;    /* Position within bufr. */
 	int   end     = 0;    /* bufr[end] is current end-of-string. */
@@ -346,15 +352,15 @@
 	/* Read the parameter name. */
 	while( 0 == vstart ) {
 		/* Loop until we've found the start of the value. */
-		if( i > (buf->length - 2) ) {
+		if( i > (bSize - 2) ) {
 			/* Ensure there's space for next char.    */
-			uint8_t *tb = (uint8_t *)SMB_REALLOC_KEEP_OLD_ON_ERROR( buf->data, buf->length + BUFR_INC );
+			char *tb = (char *)SMB_REALLOC_KEEP_OLD_ON_ERROR( bufr, bSize + BUFR_INC );
 			if (!tb) {
 				DEBUG(0, ("%s Memory re-allocation failure.", func) );
 				return False;
 			}
-			buf->data = tb;
-			buf->length += BUFR_INC;
+			bufr = tb;
+			bSize += BUFR_INC;
 		}
 
 		switch(c) {
@@ -364,37 +370,37 @@
 					DEBUG(0, ("%s Invalid parameter name in config. file.\n", func ));
 					return False;
 				}
-				buf->data[end++] = '\0';         /* Mark end of string & advance.   */
+				bufr[end++] = '\0';         /* Mark end of string & advance.   */
 				i       = end;              /* New string starts here.         */
 				vstart  = end;              /* New string is parameter value.  */
-				buf->data[i] = '\0';             /* New string is nul, for now.     */
+				bufr[i] = '\0';             /* New string is nul, for now.     */
 				break;
 
 			case '\n': /* Find continuation char, else error. */
-				i = Continuation( buf->data, i );
+				i = Continuation( bufr, i );
 				if( i < 0 ) {
-					buf->data[end] = '\0';
-					DEBUG(1,("%s Ignoring badly formed line in configuration file: %s\n", func, buf->data ));
+					bufr[end] = '\0';
+					DEBUG(1,("%s Ignoring badly formed line in configuration file: %s\n", func, bufr ));
 					return True;
 				}
-				end = ( (i > 0) && (' ' == buf->data[i - 1]) ) ? (i - 1) : (i);
+				end = ( (i > 0) && (' ' == bufr[i - 1]) ) ? (i - 1) : (i);
 				c = mygetc( InFile );       /* Read past eoln.                   */
 				break;
 
 			case '\0': /* Shouldn't have EOF within param name. */
 			case EOF:
-				buf->data[i] = '\0';
-				DEBUG(1,("%s Unexpected end-of-file at: %s\n", func, buf->data ));
+				bufr[i] = '\0';
+				DEBUG(1,("%s Unexpected end-of-file at: %s\n", func, bufr ));
 				return True;
 
 			default:
 				if(isspace( c )) {
 					/* One ' ' per whitespace region.       */
-					buf->data[end] = ' ';
+					bufr[end] = ' ';
 					i = end + 1;
 					c = EatWhitespace( InFile );
 				} else {
-					buf->data[i++] = c;
+					bufr[i++] = c;
 					end = i;
 					c = mygetc( InFile );
 				}
@@ -404,15 +410,15 @@
 	/* Now parse the value. */
 	c = EatWhitespace( InFile );  /* Again, trim leading whitespace. */
 	while( (EOF !=c) && (c > 0) ) {
-		if( i > (buf->length - 2) ) {
+		if( i > (bSize - 2) ) {
 			/* Make sure there's enough room. */
-			uint8_t *tb = (uint8_t *)SMB_REALLOC_KEEP_OLD_ON_ERROR( buf->data, buf->length + BUFR_INC );
+			char *tb = (char *)SMB_REALLOC_KEEP_OLD_ON_ERROR( bufr, bSize + BUFR_INC );
 			if (!tb) {
 				DEBUG(0, ("%s Memory re-allocation failure.", func));
 				return False;
 			}
-			buf->data = tb;
-			buf->length += BUFR_INC;
+			bufr = tb;
+			bSize += BUFR_INC;
 		}
 
 		switch(c) {
@@ -421,27 +427,27 @@
 				break;                /* removes them.                            */
 
 			case '\n': /* Marks end of value unless there's a '\'. */
-				i = Continuation( buf->data, i );
+				i = Continuation( bufr, i );
 				if( i < 0 ) {
 					c = 0;
 				} else {
-					for( end = i; (end >= 0) && isspace((int)buf->data[end]); end-- )
+					for( end = i; (end >= 0) && isspace((int)bufr[end]); end-- )
 						;
 					c = mygetc( InFile );
 				}
 				break;
 
 			default: /* All others verbatim.  Note that spaces do not advance <end>.  This allows trimming  */
-				buf->data[i++] = c;
+				bufr[i++] = c;
 				if( !isspace( c ) )  /* of whitespace at the end of the line.     */
 					end = i;
 				c = mygetc( InFile );
 				break;
 		}
 	}
-	buf->data[end] = '\0';          /* End of value. */
+	bufr[end] = '\0';          /* End of value. */
 
-	return( pfunc( (char *)buf->data, (char *)&buf->data[vstart], userdata ) );   /* Pass name & value to pfunc().  */
+	return( pfunc( bufr, &bufr[vstart] ) );   /* Pass name & value to pfunc().  */
 }
 
 /* ------------------------------------------------------------------------ **
@@ -466,10 +472,9 @@
  * ------------------------------------------------------------------------ **
  */
 
-static bool Parse( DATA_BLOB *buf, myFILE *InFile,
-                   bool (*sfunc)(const char *, void *),
-                   bool (*pfunc)(const char *, const char *, void *),
-		   void *userdata)
+static BOOL Parse( myFILE *InFile,
+                   BOOL (*sfunc)(const char *),
+                   BOOL (*pfunc)(const char *, const char *) )
 {
 	int    c;
 
@@ -486,7 +491,7 @@
 				break;
 
 			case '[': /* Section Header. */
-				if( !Section( buf, InFile, sfunc, userdata ) )
+				if( !Section( InFile, sfunc ) )
 					return False;
 				c = EatWhitespace( InFile );
 				break;
@@ -496,7 +501,7 @@
 				break;
 
 			default: /* Parameter line. */
-				if( !Parameter( buf, InFile, pfunc, c, userdata ) )
+				if( !Parameter( InFile, pfunc, c ) )
 					return False;
 				c = EatWhitespace( InFile );
 				break;
@@ -518,7 +523,7 @@
 static myFILE *OpenConfFile( const char *FileName )
 {
 	const char *func = "params.c:OpenConfFile() -";
-	int lvl = lp_is_in_client() ? 1 : 0;
+	int lvl = in_client?1:0;
 	myFILE *ret;
 
 	ret = SMB_MALLOC_P(myFILE);
@@ -552,15 +557,13 @@
  * ------------------------------------------------------------------------ **
  */
 
-bool pm_process( const char *FileName,
-		bool (*sfunc)(const char *, void *),
-		bool (*pfunc)(const char *, const char *, void *),
-		void *userdata)
+BOOL pm_process( const char *FileName,
+		BOOL (*sfunc)(const char *),
+		BOOL (*pfunc)(const char *, const char *) )
 {
 	int   result;
 	myFILE *InFile;
 	const char *func = "params.c:pm_process() -";
-	DATA_BLOB buf;
 
 	InFile = OpenConfFile( FileName );          /* Open the config file. */
 	if( NULL == InFile )
@@ -568,17 +571,25 @@
 
 	DEBUG( 3, ("%s Processing configuration file \"%s\"\n", func, FileName) );
 
-	buf = data_blob(NULL, 256);
+	if( NULL != bufr ) {
+		/* If we already have a buffer */
+		/* (recursive call), then just */
+		/* use it.                     */
+		result = Parse( InFile, sfunc, pfunc );
+	} else {
+		bSize = BUFR_INC;
+		bufr = (char *)SMB_MALLOC( bSize );
+		if( NULL == bufr ) {
+			DEBUG(0,("%s memory allocation failure.\n", func));
+			myfile_close(InFile);
+			return False;
+		}
 
-	if (buf.data == NULL) {
-		DEBUG(0,("%s memory allocation failure.\n", func));
-		myfile_close(InFile);
-		return False;
+		result = Parse( InFile, sfunc, pfunc );
+		SAFE_FREE( bufr );
+		bSize = 0;
 	}
 
-	result = Parse( &buf, InFile, sfunc, pfunc, userdata );
-	data_blob_free(&buf);
-
 	myfile_close(InFile);
 
 	if( !result ) {

Deleted: branches/samba/upstream/source/param/util.c
===================================================================
--- branches/samba/upstream/source/param/util.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/param/util.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,50 +0,0 @@
-/*
- *  Unix SMB/CIFS implementation.
- *  param helper routines
- *  Copyright (C) Gerald Carter                2003
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "includes.h"
-
-/*********************************************************
- utility function to parse an integer parameter from
- "parameter = value"
-**********************************************************/
-uint32 get_int_param( const char* param )
-{
-	char *p;
-
-	p = strchr( param, '=' );
-	if ( !p )
-		return 0;
-
-	return atoi(p+1);
-}
-
-/*********************************************************
- utility function to parse an integer parameter from
- "parameter = value"
-**********************************************************/
-char* get_string_param( const char* param )
-{
-	char *p;
-
-	p = strchr( param, '=' );
-	if ( !p )
-		return NULL;
-
-	return (p+1);
-}

Modified: branches/samba/upstream/source/passdb/login_cache.c
===================================================================
--- branches/samba/upstream/source/passdb/login_cache.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/passdb/login_cache.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
       
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -28,7 +29,7 @@
 
 static TDB_CONTEXT *cache;
 
-bool login_cache_init(void)
+BOOL login_cache_init(void)
 {
 	char* cache_fname = NULL;
 	
@@ -54,7 +55,7 @@
 	return (cache ? True : False);
 }
 
-bool login_cache_shutdown(void)
+BOOL login_cache_shutdown(void)
 {
 	/* tdb_close routine returns -1 on error */
 	if (!cache) return False;
@@ -65,8 +66,7 @@
 /* if we can't read the cache, oh well, no need to return anything */
 LOGIN_CACHE * login_cache_read(struct samu *sampass)
 {
-	char *keystr;
-	TDB_DATA databuf;
+	TDB_DATA keybuf, databuf;
 	LOGIN_CACHE *entry;
 
 	if (!login_cache_init())
@@ -76,16 +76,17 @@
 		return NULL;
 	}
 
-	keystr = SMB_STRDUP(pdb_get_nt_username(sampass));
-	if (!keystr || !keystr[0]) {
-		SAFE_FREE(keystr);
+	keybuf.dptr = SMB_STRDUP(pdb_get_nt_username(sampass));
+	if (!keybuf.dptr || !strlen(keybuf.dptr)) {
+		SAFE_FREE(keybuf.dptr);
 		return NULL;
 	}
+	keybuf.dsize = strlen(keybuf.dptr) + 1;
 
 	DEBUG(7, ("Looking up login cache for user %s\n",
-		  keystr));
-	databuf = tdb_fetch_bystring(cache, keystr);
-	SAFE_FREE(keystr);
+		  keybuf.dptr));
+	databuf = tdb_fetch(cache, keybuf);
+	SAFE_FREE(keybuf.dptr);
 
 	if (!(entry = SMB_MALLOC_P(LOGIN_CACHE))) {
 		DEBUG(1, ("Unable to allocate cache entry buffer!\n"));
@@ -111,12 +112,12 @@
 	return entry;
 }
 
-bool login_cache_write(const struct samu *sampass, LOGIN_CACHE entry)
+BOOL login_cache_write(const struct samu *sampass, LOGIN_CACHE entry)
 {
-	char *keystr;
-	TDB_DATA databuf;
-	bool ret;
 
+	TDB_DATA keybuf, databuf;
+	BOOL ret;
+
 	if (!login_cache_init())
 		return False;
 
@@ -124,11 +125,12 @@
 		return False;
 	}
 
-	keystr = SMB_STRDUP(pdb_get_nt_username(sampass));
-	if (!keystr || !keystr[0]) {
-		SAFE_FREE(keystr);
+	keybuf.dptr = SMB_STRDUP(pdb_get_nt_username(sampass));
+	if (!keybuf.dptr || !strlen(keybuf.dptr)) {
+		SAFE_FREE(keybuf.dptr);
 		return False;
 	}
+	keybuf.dsize = strlen(keybuf.dptr) + 1;
 
 	entry.entry_timestamp = time(NULL);
 
@@ -138,9 +140,9 @@
 			 entry.acct_ctrl,
 			 entry.bad_password_count,
 			 entry.bad_password_time);
-	databuf.dptr = SMB_MALLOC_ARRAY(uint8, databuf.dsize);
+	databuf.dptr = SMB_MALLOC_ARRAY(char, databuf.dsize);
 	if (!databuf.dptr) {
-		SAFE_FREE(keystr);
+		SAFE_FREE(keybuf.dptr);
 		return False;
 	}
 			 
@@ -150,21 +152,21 @@
 			 entry.bad_password_count,
 			 entry.bad_password_time)
 	    != databuf.dsize) {
-		SAFE_FREE(keystr);
+		SAFE_FREE(keybuf.dptr);
 		SAFE_FREE(databuf.dptr);
 		return False;
 	}
 
-	ret = tdb_store_bystring(cache, keystr, databuf, 0);
-	SAFE_FREE(keystr);
+	ret = tdb_store(cache, keybuf, databuf, 0);
+	SAFE_FREE(keybuf.dptr);
 	SAFE_FREE(databuf.dptr);
 	return ret == 0;
 }
 
-bool login_cache_delentry(const struct samu *sampass)
+BOOL login_cache_delentry(const struct samu *sampass)
 {
 	int ret;
-	char *keystr;
+	TDB_DATA keybuf;
 	
 	if (!login_cache_init()) 
 		return False;	
@@ -173,16 +175,17 @@
 		return False;
 	}
 
-	keystr = SMB_STRDUP(pdb_get_nt_username(sampass));
-	if (!keystr || !keystr[0]) {
-		SAFE_FREE(keystr);
+	keybuf.dptr = SMB_STRDUP(pdb_get_nt_username(sampass));
+	if (!keybuf.dptr || !strlen(keybuf.dptr)) {
+		SAFE_FREE(keybuf.dptr);
 		return False;
 	}
-
-	DEBUG(9, ("About to delete entry for %s\n", keystr));
-	ret = tdb_delete_bystring(cache, keystr);
+	keybuf.dsize = strlen(keybuf.dptr) + 1;
+	DEBUG(9, ("About to delete entry for %s\n", keybuf.dptr));
+	ret = tdb_delete(cache, keybuf);
 	DEBUG(9, ("tdb_delete returned %d\n", ret));
 	
-	SAFE_FREE(keystr);
+	SAFE_FREE(keybuf.dptr);
 	return ret == 0;
 }
+

Modified: branches/samba/upstream/source/passdb/lookup_sid.c
===================================================================
--- branches/samba/upstream/source/passdb/lookup_sid.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/passdb/lookup_sid.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -29,7 +30,7 @@
  to do guesswork.
 *****************************************************************/  
 
-bool lookup_name(TALLOC_CTX *mem_ctx,
+BOOL lookup_name(TALLOC_CTX *mem_ctx,
 		 const char *full_name, int flags,
 		 const char **ret_domain, const char **ret_name,
 		 DOM_SID *ret_sid, enum lsa_SidType *ret_type)
@@ -45,7 +46,7 @@
 
 	if (tmp_ctx == NULL) {
 		DEBUG(0, ("talloc_new failed\n"));
-		return false;
+		return False;
 	}
 
 	p = strchr_m(full_name, '\\');
@@ -62,7 +63,7 @@
 	if ((domain == NULL) || (name == NULL)) {
 		DEBUG(0, ("talloc failed\n"));
 		TALLOC_FREE(tmp_ctx);
-		return false;
+		return False;
 	}
 
 	DEBUG(10,("lookup_name: %s => %s (domain), %s (name)\n",
@@ -80,7 +81,7 @@
 			goto ok;
 		}
 		TALLOC_FREE(tmp_ctx);
-		return false;
+		return False;
 	}
 
 	if ((flags & LOOKUP_NAME_BUILTIN) &&
@@ -94,7 +95,7 @@
 			goto ok;
 		}
 		TALLOC_FREE(tmp_ctx);
-		return false;
+		return False;
 	}
 
 	/* Try the explicit winbind lookup first, don't let it guess the
@@ -106,27 +107,27 @@
 			goto ok;
 	}
 
-	if (!(flags & LOOKUP_NAME_EXPLICIT) && strequal(domain, unix_users_domain_name())) {
+	if (strequal(domain, unix_users_domain_name())) {
 		if (lookup_unix_user_name(name, &sid)) {
 			type = SID_NAME_USER;
 			goto ok;
 		}
 		TALLOC_FREE(tmp_ctx);
-		return false;
+		return False;
 	}
 
-	if (!(flags & LOOKUP_NAME_EXPLICIT) && strequal(domain, unix_groups_domain_name())) {
+	if (strequal(domain, unix_groups_domain_name())) {
 		if (lookup_unix_group_name(name, &sid)) {
 			type = SID_NAME_DOM_GRP;
 			goto ok;
 		}
 		TALLOC_FREE(tmp_ctx);
-		return false;
+		return False;
 	}
 
 	if ((domain[0] == '\0') && (!(flags & LOOKUP_NAME_ISOLATED))) {
 		TALLOC_FREE(tmp_ctx);
-		return false;
+		return False;
 	}
 
 	/* Now the guesswork begins, we haven't been given an explicit
@@ -163,7 +164,7 @@
 		if (!secrets_fetch_domain_sid(name, &sid)) {
 			DEBUG(3, ("Could not fetch my SID\n"));
 			TALLOC_FREE(tmp_ctx);
-			return false;
+			return False;
 		}
 		/* Swap domain and name */
 		tmp = name; name = domain; domain = tmp;
@@ -179,7 +180,7 @@
 		if (!secrets_fetch_domain_sid(name, &sid)) {
 			DEBUG(3, ("Could not fetch the domain SID\n"));
 			TALLOC_FREE(tmp_ctx);
-			return false;
+			return False;
 		}
 		/* Swap domain and name */
 		tmp = name; name = domain; domain = tmp;
@@ -191,7 +192,7 @@
               this, tested an XP workstation in a NT domain -- vl */
 
 	if ((flags & LOOKUP_NAME_REMOTE) && IS_DC &&
-	    (pdb_get_trusteddom_pw(name, NULL, &sid, NULL)))
+	    (secrets_fetch_trusted_domain_password(name, NULL, &sid, NULL)))
 	{
 		/* Swap domain and name */
 		tmp = name; name = domain; domain = tmp;
@@ -229,7 +230,7 @@
 
 	if (!(flags & LOOKUP_NAME_REMOTE)) {
 		TALLOC_FREE(tmp_ctx);
-		return false;
+		return False;
 	}
 
 	/* If we are not a DC, we have to ask in our primary domain. Let
@@ -270,7 +271,7 @@
 			DEBUG(2, ("winbind could not find the domain's name "
 				  "it just looked up for us\n"));
 			TALLOC_FREE(tmp_ctx);
-			return false;
+			return False;
 		}
 		goto ok;
 	}
@@ -280,13 +281,13 @@
 	/* 11. Ok, windows would end here. Samba has two more options:
                Unmapped users and unmapped groups */
 
-	if (!(flags & LOOKUP_NAME_EXPLICIT) && lookup_unix_user_name(name, &sid)) {
+	if (lookup_unix_user_name(name, &sid)) {
 		domain = talloc_strdup(tmp_ctx, unix_users_domain_name());
 		type = SID_NAME_USER;
 		goto ok;
 	}
 
-	if (!(flags & LOOKUP_NAME_EXPLICIT) && lookup_unix_group_name(name, &sid)) {
+	if (lookup_unix_group_name(name, &sid)) {
 		domain = talloc_strdup(tmp_ctx, unix_groups_domain_name());
 		type = SID_NAME_DOM_GRP;
 		goto ok;
@@ -297,13 +298,13 @@
 	 */
 
 	TALLOC_FREE(tmp_ctx);
-	return false;
+	return False;
 
  ok:
 	if ((domain == NULL) || (name == NULL)) {
 		DEBUG(0, ("talloc failed\n"));
 		TALLOC_FREE(tmp_ctx);
-		return false;
+		return False;
 	}
 
 	/*
@@ -314,7 +315,7 @@
 	    !(*ret_name = talloc_strdup(mem_ctx, name))) {
 		DEBUG(0, ("talloc failed\n"));
 		TALLOC_FREE(tmp_ctx);
-		return false;
+		return False;
 	}
 
 	if (ret_domain != NULL) {
@@ -322,7 +323,7 @@
 		if (!(tmp_dom = talloc_strdup(mem_ctx, domain))) {
 			DEBUG(0, ("talloc failed\n"));
 			TALLOC_FREE(tmp_ctx);
-			return false;
+			return False;
 		}
 		strupper_m(tmp_dom);
 		*ret_domain = tmp_dom;
@@ -337,7 +338,7 @@
 	}
 
 	TALLOC_FREE(tmp_ctx);
-	return true;
+	return True;
 }
 
 /************************************************************************
@@ -346,7 +347,7 @@
  and then "Unix Users"\foo (or "Unix Groups"\foo).
 ************************************************************************/
 
-bool lookup_name_smbconf(TALLOC_CTX *mem_ctx,
+BOOL lookup_name_smbconf(TALLOC_CTX *mem_ctx,
 		 const char *full_name, int flags,
 		 const char **ret_domain, const char **ret_name,
 		 DOM_SID *ret_sid, enum lsa_SidType *ret_type)
@@ -366,7 +367,7 @@
 
 			tmp = talloc_strdup(mem_ctx, full_name);
 			if (!tmp) {
-				return false;
+				return False;
 			}
 			tmp[p - full_name] = '\\';
 			full_name = tmp;
@@ -382,13 +383,13 @@
 				get_global_sam_name(),
 				full_name );
 	if (!qualified_name) {
-		return false;
+		return False;
 	}
 
 	if (lookup_name(mem_ctx, qualified_name, flags,
 				ret_domain, ret_name,
 				ret_sid, ret_type)) {
-		return true;
+		return True;
 	}
 	
 	/* Finally try with "Unix Users" or "Unix Group" */
@@ -398,7 +399,7 @@
 					unix_users_domain_name(),
 				full_name );
 	if (!qualified_name) {
-		return false;
+		return False;
 	}
 
 	return lookup_name(mem_ctx, qualified_name, flags,
@@ -406,7 +407,7 @@
 				ret_sid, ret_type);
 }
 
-static bool wb_lookup_rids(TALLOC_CTX *mem_ctx,
+static BOOL wb_lookup_rids(TALLOC_CTX *mem_ctx,
 			   const DOM_SID *domain_sid,
 			   int num_rids, uint32 *rids,
 			   const char **domain_name,
@@ -418,7 +419,7 @@
 	TALLOC_CTX *tmp_ctx;
 
 	if (!(tmp_ctx = talloc_init("wb_lookup_rids"))) {
-		return false;
+		return False;
 	}
 
 	if (!winbind_lookup_rids(tmp_ctx, domain_sid, num_rids, rids,
@@ -429,12 +430,12 @@
 			types[i] = SID_NAME_UNKNOWN;
 		}
 		TALLOC_FREE(tmp_ctx);
-		return true;
+		return True;
 	}
 
 	if (!(*domain_name = talloc_strdup(mem_ctx, *domain_name))) {
 		TALLOC_FREE(tmp_ctx);
-		return false;
+		return False;
 	}
 
 	/*
@@ -445,34 +446,31 @@
 	for (i=0; i<num_rids; i++) {
 		if (my_names[i] == NULL) {
 			TALLOC_FREE(tmp_ctx);
-			return false;
+			return False;
 		}
 		if (!(names[i] = talloc_strdup(names, my_names[i]))) {
 			TALLOC_FREE(tmp_ctx);
-			return false;
+			return False;
 		}
 		types[i] = my_types[i];
 	}
 	TALLOC_FREE(tmp_ctx);
-	return true;
+	return True;
 }
 
-static bool lookup_rids(TALLOC_CTX *mem_ctx, const DOM_SID *domain_sid,
+static BOOL lookup_rids(TALLOC_CTX *mem_ctx, const DOM_SID *domain_sid,
 			int num_rids, uint32_t *rids,
 			const char **domain_name,
 			const char ***names, enum lsa_SidType **types)
 {
 	int i;
 
-	DEBUG(10, ("lookup_rids called for domain sid '%s'\n",
-		   sid_string_dbg(domain_sid)));
-
 	if (num_rids) {
 		*names = TALLOC_ARRAY(mem_ctx, const char *, num_rids);
 		*types = TALLOC_ARRAY(mem_ctx, enum lsa_SidType, num_rids);
 
 		if ((*names == NULL) || (*types == NULL)) {
-			return false;
+			return False;
 		}
 	} else {
 		*names = NULL;
@@ -488,7 +486,7 @@
 		}
 
 		if (*domain_name == NULL) {
-			return false;
+			return False;
 		}
 
 		become_root();
@@ -509,21 +507,21 @@
 		}
 
 		if (*domain_name == NULL) {
-			return false;
+			return False;
 		}
 
 		for (i=0; i<num_rids; i++) {
 			if (lookup_builtin_rid(*names, rids[i],
 					       &(*names)[i])) {
 				if ((*names)[i] == NULL) {
-					return false;
+					return False;
 				}
 				(*types)[i] = SID_NAME_ALIAS;
 			} else {
 				(*types)[i] = SID_NAME_UNKNOWN;
 			}
 		}
-		return true;
+		return True;
 	}
 
 	if (sid_check_is_wellknown_domain(domain_sid, NULL)) {
@@ -534,52 +532,40 @@
 			if (lookup_wellknown_sid(mem_ctx, &sid,
 						 domain_name, &(*names)[i])) {
 				if ((*names)[i] == NULL) {
-					return false;
+					return False;
 				}
 				(*types)[i] = SID_NAME_WKN_GRP;
 			} else {
 				(*types)[i] = SID_NAME_UNKNOWN;
 			}
 		}
-		return true;
+		return True;
 	}
 
 	if (sid_check_is_unix_users(domain_sid)) {
 		if (*domain_name == NULL) {
 			*domain_name = talloc_strdup(
 				mem_ctx, unix_users_domain_name());
-			if (*domain_name == NULL) {
-				return false;
-			}
 		}
 		for (i=0; i<num_rids; i++) {
 			(*names)[i] = talloc_strdup(
 				(*names), uidtoname(rids[i]));
-			if ((*names)[i] == NULL) {
-				return false;
-			}
 			(*types)[i] = SID_NAME_USER;
 		}
-		return true;
+		return True;
 	}
 
 	if (sid_check_is_unix_groups(domain_sid)) {
 		if (*domain_name == NULL) {
 			*domain_name = talloc_strdup(
 				mem_ctx, unix_groups_domain_name());
-			if (*domain_name == NULL) {
-				return false;
-			}
 		}
 		for (i=0; i<num_rids; i++) {
 			(*names)[i] = talloc_strdup(
 				(*names), gidtoname(rids[i]));
-			if ((*names)[i] == NULL) {
-				return false;
-			}
 			(*types)[i] = SID_NAME_DOM_GRP;
 		}
-		return true;
+		return True;
 	}
 
 	return wb_lookup_rids(mem_ctx, domain_sid, num_rids, rids,
@@ -590,7 +576,7 @@
  * Is the SID a domain as such? If yes, lookup its name.
  */
 
-static bool lookup_as_domain(const DOM_SID *sid, TALLOC_CTX *mem_ctx,
+static BOOL lookup_as_domain(const DOM_SID *sid, TALLOC_CTX *mem_ctx,
 			     const char **name)
 {
 	const char *tmp;
@@ -598,32 +584,22 @@
 
 	if (sid_check_is_domain(sid)) {
 		*name = talloc_strdup(mem_ctx, get_global_sam_name());
-		return true;
+		return True;
 	}
 
 	if (sid_check_is_builtin(sid)) {
 		*name = talloc_strdup(mem_ctx, builtin_domain_name());
-		return true;
+		return True;
 	}
 
 	if (sid_check_is_wellknown_domain(sid, &tmp)) {
 		*name = talloc_strdup(mem_ctx, tmp);
-		return true;
+		return True;
 	}
 
-	if (sid_check_is_unix_users(sid)) {
-		*name = talloc_strdup(mem_ctx, unix_users_domain_name());
-		return true;
-	}
-
-	if (sid_check_is_unix_groups(sid)) {
-		*name = talloc_strdup(mem_ctx, unix_groups_domain_name());
-		return true;
-	}
-
 	if (sid->num_auths != 4) {
 		/* This can't be a domain */
-		return false;
+		return False;
 	}
 
 	if (IS_DC) {
@@ -634,29 +610,29 @@
 		 * and for SIDs that have 4 sub-authorities and thus look like
 		 * domains */
 
-		if (!NT_STATUS_IS_OK(pdb_enum_trusteddoms(mem_ctx,
-						          &num_domains,
-						          &domains))) {
-			return false;
+		if (!NT_STATUS_IS_OK(secrets_trusted_domains(mem_ctx,
+							     &num_domains,
+							     &domains))) {
+			return False;
 		}
 
 		for (i=0; i<num_domains; i++) {
 			if (sid_equal(sid, &domains[i]->sid)) {
 				*name = talloc_strdup(mem_ctx,
 						      domains[i]->name);
-				return true;
+				return True;
 			}
 		}
-		return false;
+		return False;
 	}
 
 	if (winbind_lookup_sid(mem_ctx, sid, &tmp, NULL, &type) &&
 	    (type == SID_NAME_DOMAIN)) {
 		*name = tmp;
-		return true;
+		return True;
 	}
 
-	return false;
+	return False;
 }
 
 /*
@@ -674,17 +650,17 @@
  * Level 2: Ask domain and trusted domains, no builtin and wkn
  * Level 3: Only ask domain
  * Level 4: W2k3ad: Only ask AD trusts
- * Level 5: Only ask transitive forest trusts
+ * Level 5: Don't lookup anything
  * Level 6: Like 4
  */
 
-static bool check_dom_sid_to_level(const DOM_SID *sid, int level)
+static BOOL check_dom_sid_to_level(const DOM_SID *sid, int level)
 {
-	int ret = false;
+	int ret = False;
 
 	switch(level) {
 	case 1:
-		ret = true;
+		ret = True;
 		break;
 	case 2:
 		ret = (!sid_check_is_builtin(sid) &&
@@ -696,13 +672,13 @@
 		ret = sid_check_is_domain(sid);
 		break;
 	case 5:
-		ret = false;
+		ret = False;
 		break;
 	}
 
 	DEBUG(10, ("%s SID %s in level %d\n",
 		   ret ? "Accepting" : "Rejecting",
-		   sid_string_dbg(sid), level));
+		   sid_string_static(sid), level));
 	return ret;
 }
 
@@ -834,7 +810,7 @@
 		if (!dom_infos[j].valid) {
 			/* We found a domain not yet referenced, create a new
 			 * ref. */
-			dom_infos[j].valid = true;
+			dom_infos[j].valid = True;
 			sid_copy(&dom_infos[j].sid, &sid);
 
 			if (domain_name != NULL) {
@@ -924,7 +900,6 @@
 
 	*ret_domains = dom_infos;
 	*ret_names = name_infos;
-	TALLOC_FREE(tmp_ctx);
 	return NT_STATUS_OK;
 
  fail:
@@ -938,20 +913,18 @@
  *THE CANONICAL* convert SID to name function.
 *****************************************************************/  
 
-bool lookup_sid(TALLOC_CTX *mem_ctx, const DOM_SID *sid,
+BOOL lookup_sid(TALLOC_CTX *mem_ctx, const DOM_SID *sid,
 		const char **ret_domain, const char **ret_name,
 		enum lsa_SidType *ret_type)
 {
 	struct lsa_dom_info *domain;
 	struct lsa_name_info *name;
 	TALLOC_CTX *tmp_ctx;
-	bool ret = false;
+	BOOL ret = False;
 
-	DEBUG(10, ("lookup_sid called for SID '%s'\n", sid_string_dbg(sid)));
-
 	if (!(tmp_ctx = talloc_new(mem_ctx))) {
 		DEBUG(0, ("talloc_new failed\n"));
-		return false;
+		return False;
 	}
 
 	if (!NT_STATUS_IS_OK(lookup_sids(tmp_ctx, 1, &sid, 1,
@@ -977,14 +950,16 @@
 		*ret_type = name->type;
 	}
 
-	ret = true;
+	ret = True;
 
  done:
 	if (ret) {
-		DEBUG(10, ("Sid %s -> %s\\%s(%d)\n", sid_string_dbg(sid),
-			   domain->name, name->name, name->type));
+		DEBUG(10, ("Sid %s -> %s\\%s(%d)\n",
+			   sid_string_static(sid), domain->name,
+			   name->name, name->type));
 	} else {
-		DEBUG(10, ("failed to lookup sid %s\n", sid_string_dbg(sid)));
+		DEBUG(10, ("failed to lookup sid %s\n",
+			   sid_string_static(sid)));
 	}
 	TALLOC_FREE(tmp_ctx);
 	return ret;
@@ -998,114 +973,184 @@
  modified to use linked lists by jra.
 *****************************************************************/  
 
+#define MAX_UID_SID_CACHE_SIZE 100
+#define TURNOVER_UID_SID_CACHE_SIZE 10
+#define MAX_GID_SID_CACHE_SIZE 100
+#define TURNOVER_GID_SID_CACHE_SIZE 10
+
+static size_t n_uid_sid_cache = 0;
+static size_t n_gid_sid_cache = 0;
+
+static struct uid_sid_cache {
+	struct uid_sid_cache *next, *prev;
+	uid_t uid;
+	DOM_SID sid;
+	enum lsa_SidType sidtype;
+} *uid_sid_cache_head;
+
+static struct gid_sid_cache {
+	struct gid_sid_cache *next, *prev;
+	gid_t gid;
+	DOM_SID sid;
+	enum lsa_SidType sidtype;
+} *gid_sid_cache_head;
+
 /*****************************************************************
   Find a SID given a uid.
-*****************************************************************/
+*****************************************************************/  
 
-static bool fetch_sid_from_uid_cache(DOM_SID *psid, uid_t uid)
+static BOOL fetch_sid_from_uid_cache(DOM_SID *psid, uid_t uid)
 {
-	DATA_BLOB cache_value;
+	struct uid_sid_cache *pc;
 
-	if (!memcache_lookup(NULL, UID_SID_CACHE,
-			     data_blob_const(&uid, sizeof(uid)),
-			     &cache_value)) {
-		return false;
+	for (pc = uid_sid_cache_head; pc; pc = pc->next) {
+		if (pc->uid == uid) {
+			*psid = pc->sid;
+			DEBUG(3,("fetch sid from uid cache %u -> %s\n",
+				 (unsigned int)uid, sid_string_static(psid)));
+			DLIST_PROMOTE(uid_sid_cache_head, pc);
+			return True;
+		}
 	}
-
-	memcpy(psid, cache_value.data, MIN(sizeof(*psid), cache_value.length));
-	SMB_ASSERT(cache_value.length >= offsetof(struct dom_sid, id_auth));
-	SMB_ASSERT(cache_value.length == ndr_size_dom_sid(psid, 0));
-
-	return true;
+	return False;
 }
 
 /*****************************************************************
   Find a uid given a SID.
-*****************************************************************/
+*****************************************************************/  
 
-static bool fetch_uid_from_cache( uid_t *puid, const DOM_SID *psid )
+static BOOL fetch_uid_from_cache( uid_t *puid, const DOM_SID *psid )
 {
-	DATA_BLOB cache_value;
+	struct uid_sid_cache *pc;
 
-	if (!memcache_lookup(NULL, SID_UID_CACHE,
-			     data_blob_const(psid, ndr_size_dom_sid(psid, 0)),
-			     &cache_value)) {
-		return false;
+	for (pc = uid_sid_cache_head; pc; pc = pc->next) {
+		if (sid_compare(&pc->sid, psid) == 0) {
+			*puid = pc->uid;
+			DEBUG(3,("fetch uid from cache %u -> %s\n",
+				 (unsigned int)*puid, sid_string_static(psid)));
+			DLIST_PROMOTE(uid_sid_cache_head, pc);
+			return True;
+		}
 	}
-
-	SMB_ASSERT(cache_value.length == sizeof(*puid));
-	memcpy(puid, cache_value.data, sizeof(*puid));
-
-	return true;
+	return False;
 }
 
 /*****************************************************************
  Store uid to SID mapping in cache.
-*****************************************************************/
+*****************************************************************/  
 
 void store_uid_sid_cache(const DOM_SID *psid, uid_t uid)
 {
-	memcache_add(NULL, SID_UID_CACHE,
-		     data_blob_const(psid, ndr_size_dom_sid(psid, 0)),
-		     data_blob_const(&uid, sizeof(uid)));
-	memcache_add(NULL, UID_SID_CACHE,
-		     data_blob_const(&uid, sizeof(uid)),
-		     data_blob_const(psid, ndr_size_dom_sid(psid, 0)));
+	struct uid_sid_cache *pc;
+
+	/* do not store SIDs in the "Unix Group" domain */
+	
+	if ( sid_check_is_in_unix_users( psid ) )
+		return;
+
+	if (n_uid_sid_cache >= MAX_UID_SID_CACHE_SIZE && n_uid_sid_cache > TURNOVER_UID_SID_CACHE_SIZE) {
+		/* Delete the last TURNOVER_UID_SID_CACHE_SIZE entries. */
+		struct uid_sid_cache *pc_next;
+		size_t i;
+
+		for (i = 0, pc = uid_sid_cache_head; i < (n_uid_sid_cache - TURNOVER_UID_SID_CACHE_SIZE); i++, pc = pc->next)
+			;
+		for(; pc; pc = pc_next) {
+			pc_next = pc->next;
+			DLIST_REMOVE(uid_sid_cache_head,pc);
+			SAFE_FREE(pc);
+			n_uid_sid_cache--;
+		}
+	}
+
+	pc = SMB_MALLOC_P(struct uid_sid_cache);
+	if (!pc)
+		return;
+	pc->uid = uid;
+	sid_copy(&pc->sid, psid);
+	DLIST_ADD(uid_sid_cache_head, pc);
+	n_uid_sid_cache++;
 }
 
 /*****************************************************************
   Find a SID given a gid.
-*****************************************************************/
+*****************************************************************/  
 
-static bool fetch_sid_from_gid_cache(DOM_SID *psid, gid_t gid)
+static BOOL fetch_sid_from_gid_cache(DOM_SID *psid, gid_t gid)
 {
-	DATA_BLOB cache_value;
+	struct gid_sid_cache *pc;
 
-	if (!memcache_lookup(NULL, GID_SID_CACHE,
-			     data_blob_const(&gid, sizeof(gid)),
-			     &cache_value)) {
-		return false;
+	for (pc = gid_sid_cache_head; pc; pc = pc->next) {
+		if (pc->gid == gid) {
+			*psid = pc->sid;
+			DEBUG(3,("fetch sid from gid cache %u -> %s\n",
+				 (unsigned int)gid, sid_string_static(psid)));
+			DLIST_PROMOTE(gid_sid_cache_head, pc);
+			return True;
+		}
 	}
-
-	memcpy(psid, cache_value.data, MIN(sizeof(*psid), cache_value.length));
-	SMB_ASSERT(cache_value.length >= offsetof(struct dom_sid, id_auth));
-	SMB_ASSERT(cache_value.length == ndr_size_dom_sid(psid, 0));
-
-	return true;
+	return False;
 }
 
 /*****************************************************************
   Find a gid given a SID.
-*****************************************************************/
+*****************************************************************/  
 
-static bool fetch_gid_from_cache(gid_t *pgid, const DOM_SID *psid)
+static BOOL fetch_gid_from_cache(gid_t *pgid, const DOM_SID *psid)
 {
-	DATA_BLOB cache_value;
+	struct gid_sid_cache *pc;
 
-	if (!memcache_lookup(NULL, SID_UID_CACHE,
-			     data_blob_const(psid, ndr_size_dom_sid(psid, 0)),
-			     &cache_value)) {
-		return false;
+	for (pc = gid_sid_cache_head; pc; pc = pc->next) {
+		if (sid_compare(&pc->sid, psid) == 0) {
+			*pgid = pc->gid;
+			DEBUG(3,("fetch gid from cache %u -> %s\n",
+				 (unsigned int)*pgid, sid_string_static(psid)));
+			DLIST_PROMOTE(gid_sid_cache_head, pc);
+			return True;
+		}
 	}
-
-	SMB_ASSERT(cache_value.length == sizeof(*pgid));
-	memcpy(pgid, cache_value.data, sizeof(*pgid));
-
-	return true;
+	return False;
 }
 
 /*****************************************************************
  Store gid to SID mapping in cache.
-*****************************************************************/
+*****************************************************************/  
 
 void store_gid_sid_cache(const DOM_SID *psid, gid_t gid)
 {
-	memcache_add(NULL, SID_GID_CACHE,
-		     data_blob_const(psid, ndr_size_dom_sid(psid, 0)),
-		     data_blob_const(&gid, sizeof(gid)));
-	memcache_add(NULL, GID_SID_CACHE,
-		     data_blob_const(&gid, sizeof(gid)),
-		     data_blob_const(psid, ndr_size_dom_sid(psid, 0)));
+	struct gid_sid_cache *pc;
+	
+	/* do not store SIDs in the "Unix Group" domain */
+	
+	if ( sid_check_is_in_unix_groups( psid ) )
+		return;
+
+	if (n_gid_sid_cache >= MAX_GID_SID_CACHE_SIZE && n_gid_sid_cache > TURNOVER_GID_SID_CACHE_SIZE) {
+		/* Delete the last TURNOVER_GID_SID_CACHE_SIZE entries. */
+		struct gid_sid_cache *pc_next;
+		size_t i;
+
+		for (i = 0, pc = gid_sid_cache_head; i < (n_gid_sid_cache - TURNOVER_GID_SID_CACHE_SIZE); i++, pc = pc->next)
+			;
+		for(; pc; pc = pc_next) {
+			pc_next = pc->next;
+			DLIST_REMOVE(gid_sid_cache_head,pc);
+			SAFE_FREE(pc);
+			n_gid_sid_cache--;
+		}
+	}
+
+	pc = SMB_MALLOC_P(struct gid_sid_cache);
+	if (!pc)
+		return;
+	pc->gid = gid;
+	sid_copy(&pc->sid, psid);
+	DLIST_ADD(gid_sid_cache_head, pc);
+
+	DEBUG(3,("store_gid_sid_cache: gid %u in cache -> %s\n", (unsigned int)gid,
+		sid_string_static(psid)));
+
+	n_gid_sid_cache++;
 }
 
 /*****************************************************************
@@ -1115,7 +1160,7 @@
 static void legacy_uid_to_sid(DOM_SID *psid, uid_t uid)
 {
 	uint32 rid;
-	bool ret;
+	BOOL ret;
 
 	ZERO_STRUCTP(psid);
 
@@ -1136,7 +1181,7 @@
 
  done:
 	DEBUG(10,("LEGACY: uid %u -> sid %s\n", (unsigned int)uid,
-		  sid_string_dbg(psid)));
+		  sid_string_static(psid)));
 
 	store_uid_sid_cache(psid, uid);
 	return;
@@ -1148,7 +1193,7 @@
 
 static void legacy_gid_to_sid(DOM_SID *psid, gid_t gid)
 {
-	bool ret;
+	BOOL ret;
 
 	ZERO_STRUCTP(psid);
 
@@ -1167,7 +1212,7 @@
 
  done:
 	DEBUG(10,("LEGACY: gid %u -> sid %s\n", (unsigned int)gid,
-		  sid_string_dbg(psid)));
+		  sid_string_static(psid)));
 
 	store_gid_sid_cache(psid, gid);
 	return;
@@ -1177,14 +1222,14 @@
  *THE LEGACY* convert SID to uid function.
 *****************************************************************/  
 
-static bool legacy_sid_to_uid(const DOM_SID *psid, uid_t *puid)
+static BOOL legacy_sid_to_uid(const DOM_SID *psid, uid_t *puid)
 {
 	enum lsa_SidType type;
 	uint32 rid;
 
 	if (sid_peek_check_rid(get_global_sam_sid(), psid, &rid)) {
 		union unid_t id;
-		bool ret;
+		BOOL ret;
 
 		become_root();
 		ret = pdb_sid_to_id(psid, &id, &type);
@@ -1193,27 +1238,26 @@
 		if (ret) {
 			if (type != SID_NAME_USER) {
 				DEBUG(5, ("sid %s is a %s, expected a user\n",
-					  sid_string_dbg(psid),
+					  sid_string_static(psid),
 					  sid_type_lookup(type)));
-				return false;
+				return False;
 			}
 			*puid = id.uid;
 			goto done;
 		}
 
 		/* This was ours, but it was not mapped.  Fail */
-	}
+		}
 
-	DEBUG(10,("LEGACY: mapping failed for sid %s\n",
-		  sid_string_dbg(psid)));
-	return false;
+	DEBUG(10,("LEGACY: mapping failed for sid %s\n", sid_string_static(psid)));
+	return False;
 
 done:
-	DEBUG(10,("LEGACY: sid %s -> uid %u\n", sid_string_dbg(psid),
-		  (unsigned int)*puid ));
+	DEBUG(10,("LEGACY: sid %s -> uid %u\n", sid_string_static(psid),
+		(unsigned int)*puid ));
 
 	store_uid_sid_cache(psid, *puid);
-	return true;
+	return True;
 }
 
 /*****************************************************************
@@ -1221,7 +1265,7 @@
  Group mapping is used for gids that maps to Wellknown SIDs
 *****************************************************************/  
 
-static bool legacy_sid_to_gid(const DOM_SID *psid, gid_t *pgid)
+static BOOL legacy_sid_to_gid(const DOM_SID *psid, gid_t *pgid)
 {
 	uint32 rid;
 	GROUP_MAP map;
@@ -1230,7 +1274,7 @@
 
 	if ((sid_check_is_in_builtin(psid) ||
 	     sid_check_is_in_wellknown_domain(psid))) {
-		bool ret;
+		BOOL ret;
 
 		become_root();
 		ret = pdb_getgrsid(&map, *psid);
@@ -1240,13 +1284,12 @@
 			*pgid = map.gid;
 			goto done;
 		}
-		DEBUG(10,("LEGACY: mapping failed for sid %s\n",
-			  sid_string_dbg(psid)));
-		return false;
+		DEBUG(10,("LEGACY: mapping failed for sid %s\n", sid_string_static(psid)));
+		return False;
 	}
 
 	if (sid_peek_check_rid(get_global_sam_sid(), psid, &rid)) {
-		bool ret;
+		BOOL ret;
 
 		become_root();
 		ret = pdb_sid_to_id(psid, &id, &type);
@@ -1255,29 +1298,28 @@
 		if (ret) {
 			if ((type != SID_NAME_DOM_GRP) &&
 			    (type != SID_NAME_ALIAS)) {
-				DEBUG(5, ("LEGACY: sid %s is a %s, expected "
-					  "a group\n", sid_string_dbg(psid),
+				DEBUG(5, ("LEGACY: sid %s is a %s, expected a group\n",
+					  sid_string_static(psid),
 					  sid_type_lookup(type)));
-				return false;
+				return False;
 			}
 			*pgid = id.gid;
 			goto done;
 		}
-	
+
 		/* This was ours, but it was not mapped.  Fail */
 	}
 
-	DEBUG(10,("LEGACY: mapping failed for sid %s\n",
-		  sid_string_dbg(psid)));
-	return false;
+	DEBUG(10,("LEGACY: mapping failed for sid %s\n", sid_string_static(psid)));
+		return False;
 	
  done:
-	DEBUG(10,("LEGACY: sid %s -> gid %u\n", sid_string_dbg(psid),
+	DEBUG(10,("LEGACY: sid %s -> gid %u\n", sid_string_static(psid),
 		  (unsigned int)*pgid ));
 
 	store_gid_sid_cache(psid, *pgid);
 
-	return true;
+	return True;
 }
 
 /*****************************************************************
@@ -1301,10 +1343,10 @@
 			uid));
 		return;
 	}
+	
+	DEBUG(10,("uid %u -> sid %s\n",
+		  (unsigned int)uid, sid_string_static(psid)));
 
-	DEBUG(10,("uid %u -> sid %s\n", (unsigned int)uid,
-		  sid_string_dbg(psid)));
-
 	store_uid_sid_cache(psid, uid);
 	return;
 }
@@ -1316,7 +1358,7 @@
 void gid_to_sid(DOM_SID *psid, gid_t gid)
 {
 	ZERO_STRUCTP(psid);
-
+		
 	if (fetch_sid_from_gid_cache(psid, gid))
 		return;
 
@@ -1331,8 +1373,8 @@
 		return;
 	}
 
-	DEBUG(10,("gid %u -> sid %s\n", (unsigned int)gid,
-		  sid_string_dbg(psid)));
+	DEBUG(10,("gid %u -> sid %s\n",
+		  (unsigned int)gid, sid_string_static(psid)));
 	
 	store_gid_sid_cache(psid, gid);
 	return;
@@ -1342,16 +1384,16 @@
  *THE CANONICAL* convert SID to uid function.
 *****************************************************************/  
 
-bool sid_to_uid(const DOM_SID *psid, uid_t *puid)
+BOOL sid_to_uid(const DOM_SID *psid, uid_t *puid)
 {
 	uint32 rid;
 	gid_t gid;
 
 	if (fetch_uid_from_cache(puid, psid))
-		return true;
+		return True;
 
 	if (fetch_gid_from_cache(&gid, psid)) {
-		return false;
+		return False;
 	}
 
 	/* Optimize for the Unix Users Domain
@@ -1361,9 +1403,9 @@
 		*puid = uid;
 
 		/* return here, don't cache */
-		DEBUG(10,("sid %s -> uid %u\n", sid_string_dbg(psid),
+		DEBUG(10,("sid %s -> uid %u\n", sid_string_static(psid),
 			(unsigned int)*puid ));
-		return true;
+		return True;
 	}
 
 	if (!winbind_sid_to_uid(puid, psid)) {
@@ -1372,18 +1414,18 @@
 		}
 
 		DEBUG(5, ("winbind failed to find a uid for sid %s\n",
-			  sid_string_dbg(psid)));
-		return false;
+			  sid_string_static(psid)));
+		return False;
 	}
-
+	
 	/* TODO: Here would be the place to allocate both a gid and a uid for
 	 * the SID in question */
 
-	DEBUG(10,("sid %s -> uid %u\n", sid_string_dbg(psid),
+	DEBUG(10,("sid %s -> uid %u\n", sid_string_static(psid),
 		(unsigned int)*puid ));
 
 	store_uid_sid_cache(psid, *puid);
-	return true;
+	return True;
 }
 
 /*****************************************************************
@@ -1391,16 +1433,16 @@
  Group mapping is used for gids that maps to Wellknown SIDs
 *****************************************************************/  
 
-bool sid_to_gid(const DOM_SID *psid, gid_t *pgid)
+BOOL sid_to_gid(const DOM_SID *psid, gid_t *pgid)
 {
 	uint32 rid;
 	uid_t uid;
 
 	if (fetch_gid_from_cache(pgid, psid))
-		return true;
+		return True;
 
 	if (fetch_uid_from_cache(&uid, psid))
-		return false;
+		return False;
 
 	/* Optimize for the Unix Groups Domain
 	 * as the conversion is straightforward */
@@ -1409,9 +1451,9 @@
 		*pgid = gid;
 
 		/* return here, don't cache */
-		DEBUG(10,("sid %s -> gid %u\n", sid_string_dbg(psid),
+		DEBUG(10,("sid %s -> gid %u\n", sid_string_static(psid),
 			(unsigned int)*pgid ));
-		return true;
+		return True;
 	}
 
 	/* Ask winbindd if it can map this sid to a gid.
@@ -1423,15 +1465,15 @@
 		}
 
 		DEBUG(10,("winbind failed to find a gid for sid %s\n",
-			  sid_string_dbg(psid)));
-		return false;
+					sid_string_static(psid)));
+		return False;
 	}
 
-	DEBUG(10,("sid %s -> gid %u\n", sid_string_dbg(psid),
+	DEBUG(10,("sid %s -> gid %u\n", sid_string_static(psid),
 		  (unsigned int)*pgid ));
 
 	store_gid_sid_cache(psid, *pgid);
 	
-	return true;
+	return True;
 }
 

Modified: branches/samba/upstream/source/passdb/machine_sid.c
===================================================================
--- branches/samba/upstream/source/passdb/machine_sid.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/passdb/machine_sid.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
       
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -35,11 +36,11 @@
  style of SID storage
 ****************************************************************************/
 
-static bool read_sid_from_file(const char *fname, DOM_SID *sid)
+static BOOL read_sid_from_file(const char *fname, DOM_SID *sid)
 {
 	char **lines;
 	int numlines;
-	bool ret;
+	BOOL ret;
 
 	lines = file_lines_load(fname, &numlines,0);
 	
@@ -128,10 +129,7 @@
 	}
 
 	/* check for an old MACHINE.SID file for backwards compatibility */
-	if (asprintf(&fname, "%s/MACHINE.SID", lp_private_dir()) == -1) {
-		SAFE_FREE(sam_sid);
-		return NULL;
-	}
+	asprintf(&fname, "%s/MACHINE.SID", lp_private_dir());
 
 	if (read_sid_from_file(fname, sam_sid)) {
 		/* remember it for future reference and unlink the old MACHINE.SID */
@@ -181,38 +179,16 @@
 /* return our global_sam_sid */
 DOM_SID *get_global_sam_sid(void)
 {
-	struct db_context *db;
-
 	if (global_sam_sid != NULL)
 		return global_sam_sid;
 	
-	/*
-	 * memory for global_sam_sid is allocated in
-	 * pdb_generate_sam_sid() as needed
-	 *
-	 * Note: this is garded by a transaction
-	 *       to prevent races on startup which
-	 *       can happen with some dbwrap backends
-	 */
+	/* memory for global_sam_sid is allocated in 
+	   pdb_generate_sam_sid() as needed */
 
-	db = secrets_db_ctx();
-	if (!db) {
-		smb_panic("could not open secrets db");
-	}
-
-	if (db->transaction_start(db) != 0) {
-		smb_panic("could not start transaction on secrets db");
-	}
-
 	if (!(global_sam_sid = pdb_generate_sam_sid())) {
-		db->transaction_cancel(db);
-		smb_panic("could not generate a machine SID");
+		smb_panic("Could not generate a machine SID\n");
 	}
 
-	if (db->transaction_commit(db) != 0) {
-		smb_panic("could not start commit secrets db");
-	}
-
 	return global_sam_sid;
 }
 
@@ -228,7 +204,7 @@
  Check if the SID is our domain SID (S-1-5-21-x-y-z).
 *****************************************************************/  
 
-bool sid_check_is_domain(const DOM_SID *sid)
+BOOL sid_check_is_domain(const DOM_SID *sid)
 {
 	return sid_equal(sid, get_global_sam_sid());
 }
@@ -237,12 +213,13 @@
  Check if the SID is our domain SID (S-1-5-21-x-y-z).
 *****************************************************************/  
 
-bool sid_check_is_in_our_domain(const DOM_SID *sid)
+BOOL sid_check_is_in_our_domain(const DOM_SID *sid)
 {
 	DOM_SID dom_sid;
 	uint32 rid;
 
 	sid_copy(&dom_sid, sid);
 	sid_split_rid(&dom_sid, &rid);
-	return sid_check_is_domain(&dom_sid);
+	
+	return sid_equal(&dom_sid, get_global_sam_sid());
 }

Modified: branches/samba/upstream/source/passdb/passdb.c
===================================================================
--- branches/samba/upstream/source/passdb/passdb.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/passdb/passdb.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,7 +10,7 @@
       
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -19,7 +19,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -129,7 +130,7 @@
  attributes and a user SID.
 *********************************************************************/
 
-static NTSTATUS samu_set_unix_internal(struct samu *user, const struct passwd *pwd, bool create)
+static NTSTATUS samu_set_unix_internal(struct samu *user, const struct passwd *pwd, BOOL create)
 {
 	const char *guest_account = lp_guestaccount();
 	const char *domain = global_myname();
@@ -206,7 +207,7 @@
 	/* Now deal with the user SID.  If we have a backend that can generate 
 	   RIDs, then do so.  But sometimes the caller just wanted a structure 
 	   initialized and will fill in these fields later (such as from a 
-	   netr_SamInfo3 structure) */
+	   NET_USER_INFO_3 structure) */
 
 	if ( create && !pdb_rid_algorithm() ) {
 		uint32 user_rid;
@@ -261,8 +262,7 @@
 
 char *pdb_encode_acct_ctrl(uint32 acct_ctrl, size_t length)
 {
-	fstring acct_str;
-	char *result;
+	static fstring acct_str;
 
 	size_t i = 0;
 
@@ -289,9 +289,7 @@
 	acct_str[i++] = ']';
 	acct_str[i++] = '\0';
 
-	result = talloc_strdup(talloc_tos(), acct_str);
-	SMB_ASSERT(result != NULL);
-	return result;
+	return acct_str;
 }     
 
 /**********************************************************
@@ -301,7 +299,7 @@
 uint32 pdb_decode_acct_ctrl(const char *p)
 {
 	uint32 acct_ctrl = 0;
-	bool finished = False;
+	BOOL finished = False;
 
 	/*
 	 * Check if the account type bits have been encoded after the
@@ -340,7 +338,7 @@
  Routine to set 32 hex password characters from a 16 byte array.
 **************************************************************/
 
-void pdb_sethexpwd(char p[33], const unsigned char *pwd, uint32 acct_ctrl)
+void pdb_sethexpwd(char *p, const unsigned char *pwd, uint32 acct_ctrl)
 {
 	if (pwd != NULL) {
 		int i;
@@ -359,7 +357,7 @@
  into a 16 byte array.
 **************************************************************/
 
-bool pdb_gethexpwd(const char *p, unsigned char *pwd)
+BOOL pdb_gethexpwd(const char *p, unsigned char *pwd)
 {
 	int i;
 	unsigned char   lonybble, hinybble;
@@ -408,7 +406,7 @@
  into a 21 byte array.
 **************************************************************/
 
-bool pdb_gethexhours(const char *p, unsigned char *hours)
+BOOL pdb_gethexhours(const char *p, unsigned char *hours)
 {
 	int i;
 	unsigned char   lonybble, hinybble;
@@ -443,8 +441,11 @@
 
 int algorithmic_rid_base(void)
 {
-	int rid_offset;
+	static int rid_offset = 0;
 
+	if (rid_offset != 0)
+		return rid_offset;
+
 	rid_offset = lp_algorithmic_rid_base();
 
 	if (rid_offset < BASE_RID) {  
@@ -518,7 +519,7 @@
  Decides if a RID is a well known RID.
  ********************************************************************/
 
-static bool rid_is_well_known(uint32 rid)
+static BOOL rid_is_well_known(uint32 rid)
 {
 	/* Not using rid_offset here, because this is the actual
 	   NT fixed value (1000) */
@@ -530,7 +531,7 @@
  Decides if a RID is a user or group RID.
  ********************************************************************/
 
-bool algorithmic_pdb_rid_is_user(uint32 rid)
+BOOL algorithmic_pdb_rid_is_user(uint32 rid)
 {
 	if ( rid_is_well_known(rid) ) {
 		/*
@@ -549,18 +550,18 @@
  Convert a name into a SID. Used in the lookup name rpc.
  ********************************************************************/
 
-bool lookup_global_sam_name(const char *name, int flags, uint32_t *rid,
+BOOL lookup_global_sam_name(const char *user, int flags, uint32_t *rid,
 			    enum lsa_SidType *type)
 {
 	GROUP_MAP map;
-	bool ret;
+	BOOL ret;
 	
 	/* Windows treats "MACHINE\None" as a special name for 
 	   rid 513 on non-DCs.  You cannot create a user or group
 	   name "None" on Windows.  You will get an error that 
 	   the group already exists. */
 	   
-	if ( strequal( name, "None" ) ) {
+	if ( strequal( user, "None" ) ) {
 		*rid = DOMAIN_GROUP_RID_USERS;
 		*type = SID_NAME_DOM_GRP;
 		
@@ -580,7 +581,7 @@
 		}
 	
 		become_root();
-		ret =  pdb_getsampwnam(sam_account, name);
+		ret =  pdb_getsampwnam(sam_account, user);
 		unbecome_root();
 
 		if (ret) {
@@ -592,7 +593,7 @@
 		if (ret) {
 			if (!sid_check_is_in_our_domain(&user_sid)) {
 				DEBUG(0, ("User %s with invalid SID %s in passdb\n",
-					  name, sid_string_dbg(&user_sid)));
+					  user, sid_string_static(&user_sid)));
 				return False;
 			}
 
@@ -607,7 +608,7 @@
 	 */
 
 	become_root();
-	ret = pdb_getgrnam(&map, name);
+	ret = pdb_getgrnam(&map, user);
 	unbecome_root();
 
  	if (!ret) {
@@ -617,7 +618,8 @@
 	/* BUILTIN groups are looked up elsewhere */
 	if (!sid_check_is_in_our_domain(&map.sid)) {
 		DEBUG(10, ("Found group %s (%s) not in our domain -- "
-			   "ignoring.", name, sid_string_dbg(&map.sid)));
+			   "ignoring.", user,
+			   sid_string_static(&map.sid)));
 		return False;
 	}
 
@@ -631,18 +633,17 @@
  Change a password entry in the local smbpasswd file.
  *************************************************************/
 
-NTSTATUS local_password_change(const char *user_name,
-				int local_flags,
-				const char *new_passwd, 
-				char **pp_err_str,
-				char **pp_msg_str)
+NTSTATUS local_password_change(const char *user_name, int local_flags,
+			   const char *new_passwd, 
+			   char *err_str, size_t err_str_len,
+			   char *msg_str, size_t msg_str_len)
 {
 	struct samu *sam_pass=NULL;
 	uint32 other_acb;
 	NTSTATUS result;
 
-	*pp_err_str = NULL;
-	*pp_msg_str = NULL;
+	*err_str = '\0';
+	*msg_str = '\0';
 
 	/* Get the smb passwd entry for this user */
 
@@ -686,12 +687,12 @@
 			}
 
 			if (!NT_STATUS_IS_OK(result)) {
-				asprintf(pp_err_str, "Failed to " "initialize account for user %s: %s\n",
+				slprintf(err_str, err_str_len-1, "Failed to " "initialize account for user %s: %s\n",
 					user_name, nt_errstr(result));
 				return result;
 			}
 		} else {
-			asprintf(pp_err_str, "Failed to find entry for user %s.\n", user_name);
+			slprintf(err_str, err_str_len-1,"Failed to find entry for user %s.\n", user_name);
 			return NT_STATUS_NO_SUCH_USER;
 		}
 	} else {
@@ -704,19 +705,19 @@
 	other_acb =  (pdb_get_acct_ctrl(sam_pass) & (~(ACB_WSTRUST|ACB_DOMTRUST|ACB_SVRTRUST|ACB_NORMAL)));
 	if (local_flags & LOCAL_TRUST_ACCOUNT) {
 		if (!pdb_set_acct_ctrl(sam_pass, ACB_WSTRUST | other_acb, PDB_CHANGED) ) {
-			asprintf(pp_err_str, "Failed to set 'trusted workstation account' flags for user %s.\n", user_name);
+			slprintf(err_str, err_str_len - 1, "Failed to set 'trusted workstation account' flags for user %s.\n", user_name);
 			TALLOC_FREE(sam_pass);
 			return NT_STATUS_UNSUCCESSFUL;
 		}
 	} else if (local_flags & LOCAL_INTERDOM_ACCOUNT) {
 		if (!pdb_set_acct_ctrl(sam_pass, ACB_DOMTRUST | other_acb, PDB_CHANGED)) {
-			asprintf(pp_err_str, "Failed to set 'domain trust account' flags for user %s.\n", user_name);
+			slprintf(err_str, err_str_len - 1, "Failed to set 'domain trust account' flags for user %s.\n", user_name);
 			TALLOC_FREE(sam_pass);
 			return NT_STATUS_UNSUCCESSFUL;
 		}
 	} else {
 		if (!pdb_set_acct_ctrl(sam_pass, ACB_NORMAL | other_acb, PDB_CHANGED)) {
-			asprintf(pp_err_str, "Failed to set 'normal account' flags for user %s.\n", user_name);
+			slprintf(err_str, err_str_len - 1, "Failed to set 'normal account' flags for user %s.\n", user_name);
 			TALLOC_FREE(sam_pass);
 			return NT_STATUS_UNSUCCESSFUL;
 		}
@@ -729,13 +730,13 @@
 
 	if (local_flags & LOCAL_DISABLE_USER) {
 		if (!pdb_set_acct_ctrl (sam_pass, pdb_get_acct_ctrl(sam_pass)|ACB_DISABLED, PDB_CHANGED)) {
-			asprintf(pp_err_str, "Failed to set 'disabled' flag for user %s.\n", user_name);
+			slprintf(err_str, err_str_len-1, "Failed to set 'disabled' flag for user %s.\n", user_name);
 			TALLOC_FREE(sam_pass);
 			return NT_STATUS_UNSUCCESSFUL;
 		}
 	} else if (local_flags & LOCAL_ENABLE_USER) {
 		if (!pdb_set_acct_ctrl (sam_pass, pdb_get_acct_ctrl(sam_pass)&(~ACB_DISABLED), PDB_CHANGED)) {
-			asprintf(pp_err_str, "Failed to unset 'disabled' flag for user %s.\n", user_name);
+			slprintf(err_str, err_str_len-1, "Failed to unset 'disabled' flag for user %s.\n", user_name);
 			TALLOC_FREE(sam_pass);
 			return NT_STATUS_UNSUCCESSFUL;
 		}
@@ -743,7 +744,7 @@
 	
 	if (local_flags & LOCAL_SET_NO_PASSWORD) {
 		if (!pdb_set_acct_ctrl (sam_pass, pdb_get_acct_ctrl(sam_pass)|ACB_PWNOTREQ, PDB_CHANGED)) {
-			asprintf(pp_err_str, "Failed to set 'no password required' flag for user %s.\n", user_name);
+			slprintf(err_str, err_str_len-1, "Failed to set 'no password required' flag for user %s.\n", user_name);
 			TALLOC_FREE(sam_pass);
 			return NT_STATUS_UNSUCCESSFUL;
 		}
@@ -759,19 +760,19 @@
 		 */
 		if ((pdb_get_lanman_passwd(sam_pass)==NULL) && (pdb_get_acct_ctrl(sam_pass)&ACB_DISABLED)) {
 			if (!pdb_set_acct_ctrl (sam_pass, pdb_get_acct_ctrl(sam_pass)&(~ACB_DISABLED), PDB_CHANGED)) {
-				asprintf(pp_err_str, "Failed to unset 'disabled' flag for user %s.\n", user_name);
+				slprintf(err_str, err_str_len-1, "Failed to unset 'disabled' flag for user %s.\n", user_name);
 				TALLOC_FREE(sam_pass);
 				return NT_STATUS_UNSUCCESSFUL;
 			}
 		}
 		if (!pdb_set_acct_ctrl (sam_pass, pdb_get_acct_ctrl(sam_pass)&(~ACB_PWNOTREQ), PDB_CHANGED)) {
-			asprintf(pp_err_str, "Failed to unset 'no password required' flag for user %s.\n", user_name);
+			slprintf(err_str, err_str_len-1, "Failed to unset 'no password required' flag for user %s.\n", user_name);
 			TALLOC_FREE(sam_pass);
 			return NT_STATUS_UNSUCCESSFUL;
 		}
 		
 		if (!pdb_set_plaintext_passwd (sam_pass, new_passwd)) {
-			asprintf(pp_err_str, "Failed to set password for user %s.\n", user_name);
+			slprintf(err_str, err_str_len-1, "Failed to set password for user %s.\n", user_name);
 			TALLOC_FREE(sam_pass);
 			return NT_STATUS_UNSUCCESSFUL;
 		}
@@ -779,34 +780,34 @@
 
 	if (local_flags & LOCAL_ADD_USER) {
 		if (NT_STATUS_IS_OK(pdb_add_sam_account(sam_pass))) {
-			asprintf(pp_msg_str, "Added user %s.\n", user_name);
+			slprintf(msg_str, msg_str_len-1, "Added user %s.\n", user_name);
 			TALLOC_FREE(sam_pass);
 			return NT_STATUS_OK;
 		} else {
-			asprintf(pp_err_str, "Failed to add entry for user %s.\n", user_name);
+			slprintf(err_str, err_str_len-1, "Failed to add entry for user %s.\n", user_name);
 			TALLOC_FREE(sam_pass);
 			return NT_STATUS_UNSUCCESSFUL;
 		}
 	} else if (local_flags & LOCAL_DELETE_USER) {
 		if (!NT_STATUS_IS_OK(pdb_delete_sam_account(sam_pass))) {
-			asprintf(pp_err_str, "Failed to delete entry for user %s.\n", user_name);
+			slprintf(err_str,err_str_len-1, "Failed to delete entry for user %s.\n", user_name);
 			TALLOC_FREE(sam_pass);
 			return NT_STATUS_UNSUCCESSFUL;
 		}
-		asprintf(pp_msg_str, "Deleted user %s.\n", user_name);
+		slprintf(msg_str, msg_str_len-1, "Deleted user %s.\n", user_name);
 	} else {
 		result = pdb_update_sam_account(sam_pass);
 		if(!NT_STATUS_IS_OK(result)) {
-			asprintf(pp_err_str, "Failed to modify entry for user %s.\n", user_name);
+			slprintf(err_str, err_str_len-1, "Failed to modify entry for user %s.\n", user_name);
 			TALLOC_FREE(sam_pass);
 			return result;
 		}
 		if(local_flags & LOCAL_DISABLE_USER)
-			asprintf(pp_msg_str, "Disabled user %s.\n", user_name);
+			slprintf(msg_str, msg_str_len-1, "Disabled user %s.\n", user_name);
 		else if (local_flags & LOCAL_ENABLE_USER)
-			asprintf(pp_msg_str, "Enabled user %s.\n", user_name);
+			slprintf(msg_str, msg_str_len-1, "Enabled user %s.\n", user_name);
 		else if (local_flags & LOCAL_SET_NO_PASSWORD)
-			asprintf(pp_msg_str, "User %s password set to none.\n", user_name);
+			slprintf(msg_str, msg_str_len-1, "User %s password set to none.\n", user_name);
 	}
 
 	TALLOC_FREE(sam_pass);
@@ -822,7 +823,7 @@
 /*********************************************************************
 *********************************************************************/
 
-bool init_sam_from_buffer_v3(struct samu *sampass, uint8 *buf, uint32 buflen)
+BOOL init_sam_from_buffer_v3(struct samu *sampass, uint8 *buf, uint32 buflen)
 {
 
 	/* times are stored as 32bit integer
@@ -860,9 +861,9 @@
 	uint32		len = 0;
 	uint32		lm_pw_len, nt_pw_len, nt_pw_hist_len, hourslen;
 	uint32 pwHistLen = 0;
-	bool ret = True;
-	fstring tmp_string;
-	bool expand_explicit = lp_passdb_expand_explicit();
+	BOOL ret = True;
+	fstring tmpstring;
+	BOOL expand_explicit = lp_passdb_expand_explicit();
 	
 	if(sampass == NULL || buf == NULL) {
 		DEBUG(0, ("init_sam_from_buffer_v3: NULL parameters found!\n"));
@@ -872,7 +873,7 @@
 /* TDB_FORMAT_STRING_V3       "dddddddBBBBBBBBBBBBddBBBdwdBwwd" */
 
 	/* unpack the buffer into variables */
-	len = tdb_unpack (buf, buflen, TDB_FORMAT_STRING_V3,
+	len = tdb_unpack ((char *)buf, buflen, TDB_FORMAT_STRING_V3,
 		&logon_time,						/* d */
 		&logoff_time,						/* d */
 		&kickoff_time,						/* d */
@@ -927,12 +928,12 @@
 	pdb_set_fullname(sampass, fullname, PDB_SET);
 
 	if (homedir) {
-		fstrcpy( tmp_string, homedir );
+		fstrcpy( tmpstring, homedir );
 		if (expand_explicit) {
-			standard_sub_basic( username, domain, tmp_string,
-					    sizeof(tmp_string) );
+			standard_sub_basic( username, domain, tmpstring,
+					    sizeof(tmpstring) );
 		}
-		pdb_set_homedir(sampass, tmp_string, PDB_SET);
+		pdb_set_homedir(sampass, tmpstring, PDB_SET);
 	}
 	else {
 		pdb_set_homedir(sampass, 
@@ -947,12 +948,12 @@
 		pdb_set_dir_drive(sampass, lp_logon_drive(), PDB_DEFAULT );
 
 	if (logon_script) {
-		fstrcpy( tmp_string, logon_script );
+		fstrcpy( tmpstring, logon_script );
 		if (expand_explicit) {
-			standard_sub_basic( username, domain, tmp_string,
-					    sizeof(tmp_string) );
+			standard_sub_basic( username, domain, tmpstring,
+					    sizeof(tmpstring) );
 		}
-		pdb_set_logon_script(sampass, tmp_string, PDB_SET);
+		pdb_set_logon_script(sampass, tmpstring, PDB_SET);
 	}
 	else {
 		pdb_set_logon_script(sampass, 
@@ -962,12 +963,12 @@
 	}
 	
 	if (profile_path) {	
-		fstrcpy( tmp_string, profile_path );
+		fstrcpy( tmpstring, profile_path );
 		if (expand_explicit) {
-			standard_sub_basic( username, domain, tmp_string,
-					    sizeof(tmp_string) );
+			standard_sub_basic( username, domain, tmpstring,
+					    sizeof(tmpstring) );
 		}
-		pdb_set_profile_path(sampass, tmp_string, PDB_SET);
+		pdb_set_profile_path(sampass, tmpstring, PDB_SET);
 	} 
 	else {
 		pdb_set_profile_path(sampass, 
@@ -1056,7 +1057,7 @@
 /*********************************************************************
 *********************************************************************/
 
-uint32 init_buffer_from_sam_v3 (uint8 **buf, struct samu *sampass, bool size_only)
+uint32 init_buffer_from_sam_v3 (uint8 **buf, struct samu *sampass, BOOL size_only)
 {
 	size_t len, buflen;
 
@@ -1277,7 +1278,7 @@
 	}
 	
 	/* now for the real call to tdb_pack() */
-	buflen = tdb_pack(*buf, len,  TDB_FORMAT_STRING_V3,
+	buflen = tdb_pack((char *)*buf, len,  TDB_FORMAT_STRING_V3,
 		logon_time,				/* d */
 		logoff_time,				/* d */
 		kickoff_time,				/* d */
@@ -1326,7 +1327,7 @@
 /*********************************************************************
 *********************************************************************/
 
-bool pdb_copy_sam_account(struct samu *dst, struct samu *src )
+BOOL pdb_copy_sam_account(struct samu *dst, struct samu *src )
 {
 	uint8 *buf = NULL;
 	int len;
@@ -1360,12 +1361,12 @@
  Update the bad password count checking the AP_RESET_COUNT_TIME 
 *********************************************************************/
 
-bool pdb_update_bad_password_count(struct samu *sampass, bool *updated)
+BOOL pdb_update_bad_password_count(struct samu *sampass, BOOL *updated)
 {
 	time_t LastBadPassword;
 	uint16 BadPasswordCount;
 	uint32 resettime; 
-	bool res;
+	BOOL res;
 
 	BadPasswordCount = pdb_get_bad_password_count(sampass);
 	if (!BadPasswordCount) {
@@ -1406,11 +1407,11 @@
  Update the ACB_AUTOLOCK flag checking the AP_LOCK_ACCOUNT_DURATION 
 *********************************************************************/
 
-bool pdb_update_autolock_flag(struct samu *sampass, bool *updated)
+BOOL pdb_update_autolock_flag(struct samu *sampass, BOOL *updated)
 {
 	uint32 duration;
 	time_t LastBadPassword;
-	bool res;
+	BOOL res;
 
 	if (!(pdb_get_acct_ctrl(sampass) & ACB_AUTOLOCK)) {
 		DEBUG(9, ("pdb_update_autolock_flag: Account %s not autolocked, no check needed\n",
@@ -1438,11 +1439,10 @@
 		  pdb_get_username(sampass), (uint32)LastBadPassword, duration*60, (uint32)time(NULL)));
 
 	if (LastBadPassword == (time_t)0) {
-		DEBUG(1,("pdb_update_autolock_flag: Account %s "
-			 "administratively locked out with no bad password "
-			 "time. Leaving locked out.\n",
-			 pdb_get_username(sampass) ));
-		return True;
+		DEBUG(1,("pdb_update_autolock_flag: Account %s administratively locked out with no \
+bad password time. Leaving locked out.\n",
+			pdb_get_username(sampass) ));
+			return True;
 	}
 
 	if ((time(NULL) > (LastBadPassword + convert_uint32_to_time_t(duration) * 60))) {
@@ -1463,11 +1463,11 @@
  Increment the bad_password_count 
 *********************************************************************/
 
-bool pdb_increment_bad_password_count(struct samu *sampass)
+BOOL pdb_increment_bad_password_count(struct samu *sampass)
 {
 	uint32 account_policy_lockout;
-	bool autolock_updated = False, badpw_updated = False;
-	bool ret;
+	BOOL autolock_updated = False, badpw_updated = False;
+	BOOL ret;
 
 	/* Retrieve the account lockout policy */
 	become_root();
@@ -1516,126 +1516,3 @@
 
 	return True;
 }
-
-bool is_trusted_domain_situation(const char *domain_name)
-{
-	return IS_DC &&
-		lp_allow_trusted_domains() &&
-		!strequal(domain_name, lp_workgroup());
-}
-
-/*******************************************************************
- Wrapper around retrieving the clear text trust account password.
- appropriate account name is stored in account_name.
- Caller must free password, but not account_name.
-*******************************************************************/
-
-bool get_trust_pw_clear(const char *domain, char **ret_pwd,
-			const char **account_name, uint32 *channel)
-{
-	char *pwd;
-	time_t last_set_time;
-
-	/* if we are a DC and this is not our domain, then lookup an account
-	 * for the domain trust */
-
-	if (is_trusted_domain_situation(domain)) {
-		if (!pdb_get_trusteddom_pw(domain, ret_pwd, NULL,
-					   &last_set_time))
-		{
-			DEBUG(0, ("get_trust_pw: could not fetch trust "
-				"account password for trusted domain %s\n",
-				domain));
-			return false;
-		}
-
-		if (channel != NULL) {
-			*channel = SEC_CHAN_DOMAIN;
-		}
-
-		if (account_name != NULL) {
-			*account_name = lp_workgroup();
-		}
-
-		return true;
-	}
-
-	/* Here we are a domain member server.  We can only be a member
-	   of one domain so ignore the request domain and assume our own */
-
-	pwd = secrets_fetch_machine_password(lp_workgroup(), &last_set_time, channel);
-
-	if (pwd != NULL) {
-		*ret_pwd = pwd;
-		if (account_name != NULL) {
-			*account_name = global_myname();
-		}
-
-		return true;
-	}
-
-	DEBUG(5, ("get_trust_pw_clear: could not fetch clear text trust "
-		  "account password for domain %s\n", domain));
-	return false;
-}
-
-/*******************************************************************
- Wrapper around retrieving the trust account password.
- appropriate account name is stored in account_name.
-*******************************************************************/
-
-bool get_trust_pw_hash(const char *domain, uint8 ret_pwd[16],
-		       const char **account_name, uint32 *channel)
-{
-	char *pwd = NULL;
-	time_t last_set_time;
-
-	if (get_trust_pw_clear(domain, &pwd, account_name, channel)) {
-		E_md4hash(pwd, ret_pwd);
-		SAFE_FREE(pwd);
-		return true;
-	} else if (is_trusted_domain_situation(domain)) {
-		return false;
-	}
-
-	/* as a fallback, try to get the hashed pwd directly from the tdb... */
-
-	if (secrets_fetch_trust_account_password_legacy(domain, ret_pwd,
-							&last_set_time,
-							channel))
-	{
-		if (account_name != NULL) {
-			*account_name = global_myname();
-		}
-
-		return true;
-	}
-
-	DEBUG(5, ("get_trust_pw_hash: could not fetch trust account "
-		"password for domain %s\n", domain));
-	return False;
-}
-
-struct samr_LogonHours get_logon_hours_from_pdb(TALLOC_CTX *mem_ctx,
-						struct samu *pw)
-{
-	struct samr_LogonHours hours;
-	const int units_per_week = 168;
-
-	ZERO_STRUCT(hours);
-	hours.bits = talloc_array(mem_ctx, uint8_t, units_per_week);
-	if (!hours.bits) {
-		return hours;
-	}
-
-	hours.units_per_week = units_per_week;
-	memset(hours.bits, 0xFF, units_per_week);
-
-	if (pdb_get_hours(pw)) {
-		memcpy(hours.bits, pdb_get_hours(pw),
-		       MIN(pdb_get_hours_len(pw), units_per_week));
-	}
-
-	return hours;
-}
-

Modified: branches/samba/upstream/source/passdb/pdb_compat.c
===================================================================
--- branches/samba/upstream/source/passdb/pdb_compat.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/passdb/pdb_compat.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
       
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -47,7 +48,7 @@
 	return (0);
 }
 
-bool pdb_set_user_sid_from_rid (struct samu *sampass, uint32 rid, enum pdb_value_state flag)
+BOOL pdb_set_user_sid_from_rid (struct samu *sampass, uint32 rid, enum pdb_value_state flag)
 {
 	DOM_SID u_sid;
 	const DOM_SID *global_sam_sid;
@@ -69,12 +70,12 @@
 		return False;
 
 	DEBUG(10, ("pdb_set_user_sid_from_rid:\n\tsetting user sid %s from rid %d\n", 
-		    sid_string_dbg(&u_sid),rid));
+		    sid_string_static(&u_sid),rid));
 
 	return True;
 }
 
-bool pdb_set_group_sid_from_rid (struct samu *sampass, uint32 grid, enum pdb_value_state flag)
+BOOL pdb_set_group_sid_from_rid (struct samu *sampass, uint32 grid, enum pdb_value_state flag)
 {
 	DOM_SID g_sid;
 	const DOM_SID *global_sam_sid;
@@ -96,7 +97,7 @@
 		return False;
 
 	DEBUG(10, ("pdb_set_group_sid_from_rid:\n\tsetting group sid %s from rid %d\n", 
-		    sid_string_dbg(&g_sid), grid));
+		    sid_string_static(&g_sid), grid));
 
 	return True;
 }

Modified: branches/samba/upstream/source/passdb/pdb_get_set.c
===================================================================
--- branches/samba/upstream/source/passdb/pdb_get_set.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/passdb/pdb_get_set.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
       
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -29,7 +30,7 @@
 /**
  * @todo Redefine this to NULL, but this changes the API because
  *       much of samba assumes that the pdb_get...() funtions 
- *       return strings.  (ie not null-pointers).
+ *       return pstrings.  (ie not null-pointers).
  *       See also pdb_fill_default_sam().
  */
 
@@ -118,7 +119,7 @@
 	return sampass->pass_last_set_time + expire;
 }
 
-bool pdb_get_pass_can_change(const struct samu *sampass)
+BOOL pdb_get_pass_can_change(const struct samu *sampass)
 {
 	if (sampass->pass_can_change_time == get_time_t_max() &&
 	    sampass->pass_last_set_time != 0)
@@ -214,7 +215,7 @@
 	if ( pdb_gid_to_sid(pwd->pw_gid, gsid) ) {
 		enum lsa_SidType type = SID_NAME_UNKNOWN;
 		TALLOC_CTX *mem_ctx = talloc_init("pdb_get_group_sid");
-		bool lookup_ret;
+		BOOL lookup_ret;
 		
 		if (!mem_ctx) {
 			return NULL;
@@ -372,61 +373,61 @@
  Collection of set...() functions for struct samu.
  ********************************************************************/
 
-bool pdb_set_acct_ctrl(struct samu *sampass, uint32 acct_ctrl, enum pdb_value_state flag)
+BOOL pdb_set_acct_ctrl(struct samu *sampass, uint32 acct_ctrl, enum pdb_value_state flag)
 {
 	sampass->acct_ctrl = acct_ctrl;
 	return pdb_set_init_flags(sampass, PDB_ACCTCTRL, flag);
 }
 
-bool pdb_set_logon_time(struct samu *sampass, time_t mytime, enum pdb_value_state flag)
+BOOL pdb_set_logon_time(struct samu *sampass, time_t mytime, enum pdb_value_state flag)
 {
 	sampass->logon_time = mytime;
 	return pdb_set_init_flags(sampass, PDB_LOGONTIME, flag);
 }
 
-bool pdb_set_logoff_time(struct samu *sampass, time_t mytime, enum pdb_value_state flag)
+BOOL pdb_set_logoff_time(struct samu *sampass, time_t mytime, enum pdb_value_state flag)
 {
 	sampass->logoff_time = mytime;
 	return pdb_set_init_flags(sampass, PDB_LOGOFFTIME, flag);
 }
 
-bool pdb_set_kickoff_time(struct samu *sampass, time_t mytime, enum pdb_value_state flag)
+BOOL pdb_set_kickoff_time(struct samu *sampass, time_t mytime, enum pdb_value_state flag)
 {
 	sampass->kickoff_time = mytime;
 	return pdb_set_init_flags(sampass, PDB_KICKOFFTIME, flag);
 }
 
-bool pdb_set_bad_password_time(struct samu *sampass, time_t mytime, enum pdb_value_state flag)
+BOOL pdb_set_bad_password_time(struct samu *sampass, time_t mytime, enum pdb_value_state flag)
 {
 	sampass->bad_password_time = mytime;
 	return pdb_set_init_flags(sampass, PDB_BAD_PASSWORD_TIME, flag);
 }
 
-bool pdb_set_pass_can_change_time(struct samu *sampass, time_t mytime, enum pdb_value_state flag)
+BOOL pdb_set_pass_can_change_time(struct samu *sampass, time_t mytime, enum pdb_value_state flag)
 {
 	sampass->pass_can_change_time = mytime;
 	return pdb_set_init_flags(sampass, PDB_CANCHANGETIME, flag);
 }
 
-bool pdb_set_pass_must_change_time(struct samu *sampass, time_t mytime, enum pdb_value_state flag)
+BOOL pdb_set_pass_must_change_time(struct samu *sampass, time_t mytime, enum pdb_value_state flag)
 {
 	sampass->pass_must_change_time = mytime;
 	return pdb_set_init_flags(sampass, PDB_MUSTCHANGETIME, flag);
 }
 
-bool pdb_set_pass_last_set_time(struct samu *sampass, time_t mytime, enum pdb_value_state flag)
+BOOL pdb_set_pass_last_set_time(struct samu *sampass, time_t mytime, enum pdb_value_state flag)
 {
 	sampass->pass_last_set_time = mytime;
 	return pdb_set_init_flags(sampass, PDB_PASSLASTSET, flag);
 }
 
-bool pdb_set_hours_len(struct samu *sampass, uint32 len, enum pdb_value_state flag)
+BOOL pdb_set_hours_len(struct samu *sampass, uint32 len, enum pdb_value_state flag)
 {
 	sampass->hours_len = len;
 	return pdb_set_init_flags(sampass, PDB_HOURSLEN, flag);
 }
 
-bool pdb_set_logon_divs(struct samu *sampass, uint16 hours, enum pdb_value_state flag)
+BOOL pdb_set_logon_divs(struct samu *sampass, uint16 hours, enum pdb_value_state flag)
 {
 	sampass->logon_divs = hours;
 	return pdb_set_init_flags(sampass, PDB_LOGONDIVS, flag);
@@ -439,7 +440,7 @@
  *             this flag is only added.  
  **/
  
-bool pdb_set_init_flags(struct samu *sampass, enum pdb_elements element, enum pdb_value_state value_flag)
+BOOL pdb_set_init_flags(struct samu *sampass, enum pdb_elements element, enum pdb_value_state value_flag)
 {
         if (!sampass->set_flags) {
         	if ((sampass->set_flags = 
@@ -498,7 +499,7 @@
         return True;
 }
 
-bool pdb_set_user_sid(struct samu *sampass, const DOM_SID *u_sid, enum pdb_value_state flag)
+BOOL pdb_set_user_sid(struct samu *sampass, const DOM_SID *u_sid, enum pdb_value_state flag)
 {
 	if (!u_sid)
 		return False;
@@ -506,12 +507,12 @@
 	sid_copy(&sampass->user_sid, u_sid);
 
 	DEBUG(10, ("pdb_set_user_sid: setting user sid %s\n", 
-		    sid_string_dbg(&sampass->user_sid)));
+		    sid_string_static(&sampass->user_sid)));
 
 	return pdb_set_init_flags(sampass, PDB_USERSID, flag);
 }
 
-bool pdb_set_user_sid_from_string(struct samu *sampass, fstring u_sid, enum pdb_value_state flag)
+BOOL pdb_set_user_sid_from_string(struct samu *sampass, fstring u_sid, enum pdb_value_state flag)
 {
 	DOM_SID new_sid;
 	
@@ -538,11 +539,11 @@
  We never fill this in from a passdb backend but rather set is 
  based on the user's primary group membership.  However, the 
  struct samu* is overloaded and reused in domain memship code 
- as well and built from the netr_SamInfo3 or PAC so we
+ as well and built from the NET_USER_INFO_3 or PAC so we 
  have to allow the explicitly setting of a group SID here.
 ********************************************************************/
 
-bool pdb_set_group_sid(struct samu *sampass, const DOM_SID *g_sid, enum pdb_value_state flag)
+BOOL pdb_set_group_sid(struct samu *sampass, const DOM_SID *g_sid, enum pdb_value_state flag)
 {
 	gid_t gid;
 
@@ -564,7 +565,7 @@
 	}
 
 	DEBUG(10, ("pdb_set_group_sid: setting group sid %s\n", 
-		   sid_string_dbg(sampass->group_sid)));
+		sid_string_static(sampass->group_sid)));
 
 	return pdb_set_init_flags(sampass, PDB_GROUPSID, flag);
 }
@@ -573,7 +574,7 @@
  Set the user's UNIX name.
  ********************************************************************/
 
-bool pdb_set_username(struct samu *sampass, const char *username, enum pdb_value_state flag)
+BOOL pdb_set_username(struct samu *sampass, const char *username, enum pdb_value_state flag)
 {
 	if (username) { 
 		DEBUG(10, ("pdb_set_username: setting username %s, was %s\n", username,
@@ -596,7 +597,7 @@
  Set the domain name.
  ********************************************************************/
 
-bool pdb_set_domain(struct samu *sampass, const char *domain, enum pdb_value_state flag)
+BOOL pdb_set_domain(struct samu *sampass, const char *domain, enum pdb_value_state flag)
 {
 	if (domain) { 
 		DEBUG(10, ("pdb_set_domain: setting domain %s, was %s\n", domain,
@@ -619,7 +620,7 @@
  Set the user's NT name.
  ********************************************************************/
 
-bool pdb_set_nt_username(struct samu *sampass, const char *nt_username, enum pdb_value_state flag)
+BOOL pdb_set_nt_username(struct samu *sampass, const char *nt_username, enum pdb_value_state flag)
 {
 	if (nt_username) { 
 		DEBUG(10, ("pdb_set_nt_username: setting nt username %s, was %s\n", nt_username,
@@ -642,7 +643,7 @@
  Set the user's full name.
  ********************************************************************/
 
-bool pdb_set_fullname(struct samu *sampass, const char *full_name, enum pdb_value_state flag)
+BOOL pdb_set_fullname(struct samu *sampass, const char *full_name, enum pdb_value_state flag)
 {
 	if (full_name) { 
 		DEBUG(10, ("pdb_set_full_name: setting full name %s, was %s\n", full_name,
@@ -665,7 +666,7 @@
  Set the user's logon script.
  ********************************************************************/
 
-bool pdb_set_logon_script(struct samu *sampass, const char *logon_script, enum pdb_value_state flag)
+BOOL pdb_set_logon_script(struct samu *sampass, const char *logon_script, enum pdb_value_state flag)
 {
 	if (logon_script) { 
 		DEBUG(10, ("pdb_set_logon_script: setting logon script %s, was %s\n", logon_script,
@@ -688,7 +689,7 @@
  Set the user's profile path.
  ********************************************************************/
 
-bool pdb_set_profile_path(struct samu *sampass, const char *profile_path, enum pdb_value_state flag)
+BOOL pdb_set_profile_path(struct samu *sampass, const char *profile_path, enum pdb_value_state flag)
 {
 	if (profile_path) { 
 		DEBUG(10, ("pdb_set_profile_path: setting profile path %s, was %s\n", profile_path,
@@ -711,7 +712,7 @@
  Set the user's directory drive.
  ********************************************************************/
 
-bool pdb_set_dir_drive(struct samu *sampass, const char *dir_drive, enum pdb_value_state flag)
+BOOL pdb_set_dir_drive(struct samu *sampass, const char *dir_drive, enum pdb_value_state flag)
 {
 	if (dir_drive) { 
 		DEBUG(10, ("pdb_set_dir_drive: setting dir drive %s, was %s\n", dir_drive,
@@ -735,7 +736,7 @@
  Set the user's home directory.
  ********************************************************************/
 
-bool pdb_set_homedir(struct samu *sampass, const char *home_dir, enum pdb_value_state flag)
+BOOL pdb_set_homedir(struct samu *sampass, const char *home_dir, enum pdb_value_state flag)
 {
 	if (home_dir) { 
 		DEBUG(10, ("pdb_set_homedir: setting home dir %s, was %s\n", home_dir,
@@ -758,7 +759,7 @@
  Set the user's account description.
  ********************************************************************/
 
-bool pdb_set_acct_desc(struct samu *sampass, const char *acct_desc, enum pdb_value_state flag)
+BOOL pdb_set_acct_desc(struct samu *sampass, const char *acct_desc, enum pdb_value_state flag)
 {
 	if (acct_desc) { 
 		sampass->acct_desc = talloc_strdup(sampass, acct_desc);
@@ -778,7 +779,7 @@
  Set the user's workstation allowed list.
  ********************************************************************/
 
-bool pdb_set_workstations(struct samu *sampass, const char *workstations, enum pdb_value_state flag)
+BOOL pdb_set_workstations(struct samu *sampass, const char *workstations, enum pdb_value_state flag)
 {
 	if (workstations) { 
 		DEBUG(10, ("pdb_set_workstations: setting workstations %s, was %s\n", workstations,
@@ -800,7 +801,7 @@
 /*********************************************************************
  ********************************************************************/
 
-bool pdb_set_comment(struct samu *sampass, const char *comment, enum pdb_value_state flag)
+BOOL pdb_set_comment(struct samu *sampass, const char *comment, enum pdb_value_state flag)
 {
 	if (comment) { 
 		sampass->comment = talloc_strdup(sampass, comment);
@@ -820,7 +821,7 @@
  Set the user's dial string.
  ********************************************************************/
 
-bool pdb_set_munged_dial(struct samu *sampass, const char *munged_dial, enum pdb_value_state flag)
+BOOL pdb_set_munged_dial(struct samu *sampass, const char *munged_dial, enum pdb_value_state flag)
 {
 	if (munged_dial) { 
 		sampass->munged_dial = talloc_strdup(sampass, munged_dial);
@@ -840,7 +841,7 @@
  Set the user's NT hash.
  ********************************************************************/
 
-bool pdb_set_nt_passwd(struct samu *sampass, const uint8 pwd[NT_HASH_LEN], enum pdb_value_state flag)
+BOOL pdb_set_nt_passwd(struct samu *sampass, const uint8 pwd[NT_HASH_LEN], enum pdb_value_state flag)
 {
 	data_blob_clear_free(&sampass->nt_pw);
 	
@@ -848,7 +849,7 @@
                sampass->nt_pw =
 		       data_blob_talloc(sampass, pwd, NT_HASH_LEN);
        } else {
-               sampass->nt_pw = data_blob_null;
+               sampass->nt_pw = data_blob(NULL, 0);
        }
 
 	return pdb_set_init_flags(sampass, PDB_NTPASSWD, flag);
@@ -858,7 +859,7 @@
  Set the user's LM hash.
  ********************************************************************/
 
-bool pdb_set_lanman_passwd(struct samu *sampass, const uint8 pwd[LM_HASH_LEN], enum pdb_value_state flag)
+BOOL pdb_set_lanman_passwd(struct samu *sampass, const uint8 pwd[LM_HASH_LEN], enum pdb_value_state flag)
 {
 	data_blob_clear_free(&sampass->lm_pw);
 	
@@ -867,7 +868,7 @@
 	if (pwd && lp_lanman_auth() ) {
 		sampass->lm_pw = data_blob_talloc(sampass, pwd, LM_HASH_LEN);
 	} else {
-		sampass->lm_pw = data_blob_null;
+		sampass->lm_pw = data_blob(NULL, 0);
 	}
 
 	return pdb_set_init_flags(sampass, PDB_LMPASSWD, flag);
@@ -880,7 +881,7 @@
  in pwd.
 ********************************************************************/
 
-bool pdb_set_pw_history(struct samu *sampass, const uint8 *pwd, uint32 historyLen, enum pdb_value_state flag)
+BOOL pdb_set_pw_history(struct samu *sampass, const uint8 *pwd, uint32 historyLen, enum pdb_value_state flag)
 {
 	if (historyLen && pwd){
 		sampass->nt_pw_his = data_blob_talloc(sampass,
@@ -901,7 +902,7 @@
  below)
  ********************************************************************/
 
-bool pdb_set_plaintext_pw_only(struct samu *sampass, const char *password, enum pdb_value_state flag)
+BOOL pdb_set_plaintext_pw_only(struct samu *sampass, const char *password, enum pdb_value_state flag)
 {
 	if (password) { 
 		if (sampass->plaintext_pw!=NULL) 
@@ -920,25 +921,25 @@
 	return pdb_set_init_flags(sampass, PDB_PLAINTEXT_PW, flag);
 }
 
-bool pdb_set_bad_password_count(struct samu *sampass, uint16 bad_password_count, enum pdb_value_state flag)
+BOOL pdb_set_bad_password_count(struct samu *sampass, uint16 bad_password_count, enum pdb_value_state flag)
 {
 	sampass->bad_password_count = bad_password_count;
 	return pdb_set_init_flags(sampass, PDB_BAD_PASSWORD_COUNT, flag);
 }
 
-bool pdb_set_logon_count(struct samu *sampass, uint16 logon_count, enum pdb_value_state flag)
+BOOL pdb_set_logon_count(struct samu *sampass, uint16 logon_count, enum pdb_value_state flag)
 {
 	sampass->logon_count = logon_count;
 	return pdb_set_init_flags(sampass, PDB_LOGON_COUNT, flag);
 }
 
-bool pdb_set_unknown_6(struct samu *sampass, uint32 unkn, enum pdb_value_state flag)
+BOOL pdb_set_unknown_6(struct samu *sampass, uint32 unkn, enum pdb_value_state flag)
 {
 	sampass->unknown_6 = unkn;
 	return pdb_set_init_flags(sampass, PDB_UNKNOWN6, flag);
 }
 
-bool pdb_set_hours(struct samu *sampass, const uint8 *hours, enum pdb_value_state flag)
+BOOL pdb_set_hours(struct samu *sampass, const uint8 *hours, enum pdb_value_state flag)
 {
 	if (!hours) {
 		memset ((char *)sampass->hours, 0, MAX_HOURS_LEN);
@@ -949,7 +950,7 @@
 	return pdb_set_init_flags(sampass, PDB_HOURS, flag);
 }
 
-bool pdb_set_backend_private_data(struct samu *sampass, void *private_data, 
+BOOL pdb_set_backend_private_data(struct samu *sampass, void *private_data, 
 				   void (*free_fn)(void **), 
 				   const struct pdb_methods *my_methods, 
 				   enum pdb_value_state flag)
@@ -970,7 +971,7 @@
 
 /* Helpful interfaces to the above */
 
-bool pdb_set_pass_can_change(struct samu *sampass, bool canchange)
+BOOL pdb_set_pass_can_change(struct samu *sampass, BOOL canchange)
 {
 	return pdb_set_pass_can_change_time(sampass, 
 				     canchange ? 0 : get_time_t_max(),
@@ -983,7 +984,7 @@
  Also sets the last change time to NOW.
  ********************************************************************/
 
-bool pdb_set_plaintext_passwd(struct samu *sampass, const char *plaintext)
+BOOL pdb_set_plaintext_passwd(struct samu *sampass, const char *plaintext)
 {
 	uchar new_lanman_p16[LM_HASH_LEN];
 	uchar new_nt_p16[NT_HASH_LEN];

Modified: branches/samba/upstream/source/passdb/pdb_interface.c
===================================================================
--- branches/samba/upstream/source/passdb/pdb_interface.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/passdb/pdb_interface.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -25,13 +26,17 @@
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_PASSDB
 
+/* Cache of latest SAM lookup query */
+
+static struct samu *csamuser = NULL;
+
 static_decl_pdb;
 
 static struct pdb_init_function_entry *backends = NULL;
 
 static void lazy_initialize_passdb(void)
 {
-	static bool initialized = False;
+	static BOOL initialized = False;
 	if(initialized) {
 		return;
 	}
@@ -39,7 +44,7 @@
 	initialized = True;
 }
 
-static bool lookup_global_sam_rid(TALLOC_CTX *mem_ctx, uint32 rid,
+static BOOL lookup_global_sam_rid(TALLOC_CTX *mem_ctx, uint32 rid,
 				  const char **name,
 				  enum lsa_SidType *psid_name_use,
 				  union unid_t *unix_id);
@@ -89,23 +94,6 @@
 	return NULL;
 }
 
-/*
- * The event context for the passdb backend. I know this is a bad hack and yet
- * another static variable, but our pdb API is a global thing per
- * definition. The first use for this is the LDAP idle function, more might be
- * added later.
- *
- * I don't feel too bad about this static variable, it replaces the
- * smb_idle_event_list that used to exist in lib/module.c.  -- VL
- */
-
-static struct event_context *pdb_event_ctx;
-
-struct event_context *pdb_get_event_context(void)
-{
-	return pdb_event_ctx;
-}
-
 /******************************************************************
   Make a pdb_methods from scratch
  *******************************************************************/
@@ -168,30 +156,28 @@
 }
 
 /******************************************************************
- Return an already initialized pdb_methods structure
+ Return an already initialised pdn_methods structure
 *******************************************************************/
 
-static struct pdb_methods *pdb_get_methods_reload( bool reload ) 
+static struct pdb_methods *pdb_get_methods_reload( BOOL reload ) 
 {
 	static struct pdb_methods *pdb = NULL;
 
 	if ( pdb && reload ) {
 		pdb->free_private_data( &(pdb->private_data) );
 		if ( !NT_STATUS_IS_OK( make_pdb_method_name( &pdb, lp_passdb_backend() ) ) ) {
-			char *msg = NULL;
-			asprintf(&msg, "pdb_get_methods_reload: "
-				"failed to get pdb methods for backend %s\n",
-				lp_passdb_backend());
+			pstring msg;
+			slprintf(msg, sizeof(msg)-1, "pdb_get_methods_reload: failed to get pdb methods for backend %s\n",
+				lp_passdb_backend() );
 			smb_panic(msg);
 		}
 	}
 
 	if ( !pdb ) {
 		if ( !NT_STATUS_IS_OK( make_pdb_method_name( &pdb, lp_passdb_backend() ) ) ) {
-			char *msg = NULL;
-			asprintf(&msg, "pdb_get_methods_reload: "
-				"failed to get pdb methods for backend %s\n",
-				lp_passdb_backend());
+			pstring msg;
+			slprintf(msg, sizeof(msg)-1, "pdb_get_methods_reload: failed to get pdb methods for backend %s\n",
+				lp_passdb_backend() );
 			smb_panic(msg);
 		}
 	}
@@ -204,39 +190,62 @@
 	return pdb_get_methods_reload(False);
 }
 
-bool pdb_getsampwnam(struct samu *sam_acct, const char *username) 
+/******************************************************************
+ Backward compatibility functions for the original passdb interface
+*******************************************************************/
+
+BOOL pdb_setsampwent(BOOL update, uint16 acb_mask) 
 {
 	struct pdb_methods *pdb = pdb_get_methods();
-	struct samu *cache_copy;
-	const struct dom_sid *user_sid;
+	return NT_STATUS_IS_OK(pdb->setsampwent(pdb, update, acb_mask));
+}
 
+void pdb_endsampwent(void) 
+{
+	struct pdb_methods *pdb = pdb_get_methods();
+	pdb->endsampwent(pdb);
+}
+
+BOOL pdb_getsampwent(struct samu *user) 
+{
+	struct pdb_methods *pdb = pdb_get_methods();
+
+	if ( !NT_STATUS_IS_OK(pdb->getsampwent(pdb, user) ) ) {
+		return False;
+	}
+
+	return True;
+}
+
+BOOL pdb_getsampwnam(struct samu *sam_acct, const char *username) 
+{
+	struct pdb_methods *pdb = pdb_get_methods();
+
 	if (!NT_STATUS_IS_OK(pdb->getsampwnam(pdb, sam_acct, username))) {
 		return False;
 	}
 
-	cache_copy = samu_new(NULL);
-	if (cache_copy == NULL) {
+	if ( csamuser ) {
+		TALLOC_FREE(csamuser);
+	}
+
+	csamuser = samu_new( NULL );
+	if (!csamuser) {
 		return False;
 	}
 
-	if (!pdb_copy_sam_account(cache_copy, sam_acct)) {
-		TALLOC_FREE(cache_copy);
+	if (!pdb_copy_sam_account(csamuser, sam_acct)) {
+		TALLOC_FREE(csamuser);
 		return False;
 	}
 
-	user_sid = pdb_get_user_sid(cache_copy);
-
-	memcache_add_talloc(NULL, PDB_GETPWSID_CACHE,
-			    data_blob_const(user_sid, sizeof(*user_sid)),
-			    cache_copy);
-
 	return True;
 }
 
 /**********************************************************************
 **********************************************************************/
 
-bool guest_user_info( struct samu *user )
+BOOL guest_user_info( struct samu *user )
 {
 	struct passwd *pwd;
 	NTSTATUS result;
@@ -258,11 +267,10 @@
 /**********************************************************************
 **********************************************************************/
 
-bool pdb_getsampwsid(struct samu *sam_acct, const DOM_SID *sid) 
+BOOL pdb_getsampwsid(struct samu *sam_acct, const DOM_SID *sid) 
 {
 	struct pdb_methods *pdb = pdb_get_methods();
 	uint32 rid;
-	void *cache_data;
 
 	/* hard code the Guest RID of 501 */
 
@@ -275,17 +283,10 @@
 	}
 	
 	/* check the cache first */
+	
+	if ( csamuser && sid_equal(sid, pdb_get_user_sid(csamuser) ) )
+		return pdb_copy_sam_account(sam_acct, csamuser);
 
-	cache_data = memcache_lookup_talloc(
-		NULL, PDB_GETPWSID_CACHE, data_blob_const(sid, sizeof(*sid)));
-
-	if (cache_data != NULL) {
-		struct samu *cache_copy = talloc_get_type_abort(
-			cache_data, struct samu);
-
-		return pdb_copy_sam_account(sam_acct, cache_copy);
-	}
-
 	return NT_STATUS_IS_OK(pdb->getsampwsid(pdb, sam_acct, sid));
 }
 
@@ -302,19 +303,17 @@
 	}
 
 	if ( !(pwd = Get_Pwnam_alloc(tmp_ctx, name)) ) {
-		char *add_script = NULL;
+		pstring add_script;
 		int add_ret;
 		fstring name2;
 
 		if ((acb_info & ACB_NORMAL) && name[strlen(name)-1] != '$') {
-			add_script = talloc_strdup(tmp_ctx,
-					lp_adduser_script());
+			pstrcpy(add_script, lp_adduser_script());
 		} else {
-			add_script = talloc_strdup(tmp_ctx,
-					lp_addmachine_script());
+			pstrcpy(add_script, lp_addmachine_script());
 		}
 
-		if (!add_script || add_script[0] == '\0') {
+		if (add_script[0] == '\0') {
 			DEBUG(3, ("Could not find user %s and no add script "
 				  "defined\n", name));
 			return NT_STATUS_NO_SUCH_USER;
@@ -324,13 +323,7 @@
 		   compatibility with previous Samba releases */
 		fstrcpy( name2, name );
 		strlower_m( name2 );
-		add_script = talloc_all_string_sub(tmp_ctx,
-					add_script,
-					"%u",
-					name2);
-		if (!add_script) {
-			return NT_STATUS_NO_MEMORY;
-		}
+		all_string_sub(add_script, "%u", name2, sizeof(add_script));
 		add_ret = smbrun(add_script,NULL);
 		DEBUG(add_ret ? 0 : 3, ("_samr_create_user: Running the command `%s' gave %d\n",
 					add_script, add_ret));
@@ -338,6 +331,14 @@
 			smb_nscd_flush_user_cache();
 		}
 
+#ifdef ENABLE_BUILD_FARM_HACKS
+		if (add_ret != 0) {
+			DEBUG(1, ("Creating a faked user %s for build farm "
+				  "purposes\n", name));
+			faked_create_user(name);
+		}
+#endif
+
 		flush_pwnam_cache();
 
 		pwd = Get_Pwnam_alloc(tmp_ctx, name);
@@ -390,7 +391,7 @@
 
 static int smb_delete_user(const char *unix_user)
 {
-	char *del_script = NULL;
+	pstring del_script;
 	int ret;
 
 	/* safety check */
@@ -400,17 +401,10 @@
 		return -1;
 	}
 
-	del_script = talloc_strdup(talloc_tos(), lp_deluser_script());
-	if (!del_script || !*del_script) {
+	pstrcpy(del_script, lp_deluser_script());
+	if (! *del_script)
 		return -1;
-	}
-	del_script = talloc_all_string_sub(talloc_tos(),
-				del_script,
-				"%u",
-				unix_user);
-	if (!del_script) {
-		return -1;
-	}
+	all_string_sub(del_script, "%u", unix_user, sizeof(del_script));
 	ret = smbrun(del_script,NULL);
 	flush_pwnam_cache();
 	if (ret == 0) {
@@ -479,7 +473,10 @@
 {
 	struct pdb_methods *pdb = pdb_get_methods();
 
-	memcache_flush(NULL, PDB_GETPWSID_CACHE);
+	if (csamuser != NULL) {
+		TALLOC_FREE(csamuser);
+		csamuser = NULL;
+	}
 
 	return pdb->update_sam_account(pdb, sam_acct);
 }
@@ -488,7 +485,10 @@
 {
 	struct pdb_methods *pdb = pdb_get_methods();
 
-	memcache_flush(NULL, PDB_GETPWSID_CACHE);
+	if (csamuser != NULL) {
+		TALLOC_FREE(csamuser);
+		csamuser = NULL;
+	}
 
 	return pdb->delete_sam_account(pdb, sam_acct);
 }
@@ -499,7 +499,10 @@
 	uid_t uid;
 	NTSTATUS status;
 
-	memcache_flush(NULL, PDB_GETPWSID_CACHE);
+	if (csamuser != NULL) {
+		TALLOC_FREE(csamuser);
+		csamuser = NULL;
+	}
 
 	/* sanity check to make sure we don't rename root */
 
@@ -519,25 +522,25 @@
 	return status;
 }
 
-NTSTATUS pdb_update_login_attempts(struct samu *sam_acct, bool success)
+NTSTATUS pdb_update_login_attempts(struct samu *sam_acct, BOOL success)
 {
 	struct pdb_methods *pdb = pdb_get_methods();
 	return pdb->update_login_attempts(pdb, sam_acct, success);
 }
 
-bool pdb_getgrsid(GROUP_MAP *map, DOM_SID sid)
+BOOL pdb_getgrsid(GROUP_MAP *map, DOM_SID sid)
 {
 	struct pdb_methods *pdb = pdb_get_methods();
 	return NT_STATUS_IS_OK(pdb->getgrsid(pdb, map, sid));
 }
 
-bool pdb_getgrgid(GROUP_MAP *map, gid_t gid)
+BOOL pdb_getgrgid(GROUP_MAP *map, gid_t gid)
 {
 	struct pdb_methods *pdb = pdb_get_methods();
 	return NT_STATUS_IS_OK(pdb->getgrgid(pdb, map, gid));
 }
 
-bool pdb_getgrnam(GROUP_MAP *map, const char *name)
+BOOL pdb_getgrnam(GROUP_MAP *map, const char *name)
 {
 	struct pdb_methods *pdb = pdb_get_methods();
 	return NT_STATUS_IS_OK(pdb->getgrnam(pdb, map, name));
@@ -550,7 +553,6 @@
 {
 	DOM_SID group_sid;
 	struct group *grp;
-	fstring tmp;
 
 	grp = getgrnam(name);
 
@@ -578,7 +580,7 @@
 
 	sid_compose(&group_sid, get_global_sam_sid(), *rid);
 		
-	return add_initial_entry(grp->gr_gid, sid_to_fstring(tmp, &group_sid),
+	return add_initial_entry(grp->gr_gid, sid_string_static(&group_sid),
 				 SID_NAME_DOM_GRP, name, NULL);
 }
 
@@ -661,8 +663,8 @@
 	return pdb->delete_group_mapping_entry(pdb, sid);
 }
 
-bool pdb_enum_group_mapping(const DOM_SID *sid, enum lsa_SidType sid_name_use, GROUP_MAP **pp_rmap,
-			    size_t *p_num_entries, bool unix_only)
+BOOL pdb_enum_group_mapping(const DOM_SID *sid, enum lsa_SidType sid_name_use, GROUP_MAP **pp_rmap,
+			    size_t *p_num_entries, BOOL unix_only)
 {
 	struct pdb_methods *pdb = pdb_get_methods();
 	return NT_STATUS_IS_OK(pdb-> enum_group_mapping(pdb, sid, sid_name_use,
@@ -740,7 +742,7 @@
  * fulfil.
  */
 
-static bool pdb_user_in_group(TALLOC_CTX *mem_ctx, struct samu *account,
+static BOOL pdb_user_in_group(TALLOC_CTX *mem_ctx, struct samu *account,
 			      const DOM_SID *group_sid)
 {
 	DOM_SID *sids;
@@ -885,28 +887,35 @@
 	return pdb->del_groupmem(pdb, mem_ctx, group_rid, member_rid);
 }
 
+BOOL pdb_find_alias(const char *name, DOM_SID *sid)
+{
+	struct pdb_methods *pdb = pdb_get_methods();
+	return NT_STATUS_IS_OK(pdb->find_alias(pdb, name, sid));
+}
+
 NTSTATUS pdb_create_alias(const char *name, uint32 *rid)
 {
 	struct pdb_methods *pdb = pdb_get_methods();
 	return pdb->create_alias(pdb, name, rid);
 }
 
-NTSTATUS pdb_delete_alias(const DOM_SID *sid)
+BOOL pdb_delete_alias(const DOM_SID *sid)
 {
 	struct pdb_methods *pdb = pdb_get_methods();
-	return pdb->delete_alias(pdb, sid);
+	return NT_STATUS_IS_OK(pdb->delete_alias(pdb, sid));
+							    
 }
 
-NTSTATUS pdb_get_aliasinfo(const DOM_SID *sid, struct acct_info *info)
+BOOL pdb_get_aliasinfo(const DOM_SID *sid, struct acct_info *info)
 {
 	struct pdb_methods *pdb = pdb_get_methods();
-	return pdb->get_aliasinfo(pdb, sid, info);
+	return NT_STATUS_IS_OK(pdb->get_aliasinfo(pdb, sid, info));
 }
 
-NTSTATUS pdb_set_aliasinfo(const DOM_SID *sid, struct acct_info *info)
+BOOL pdb_set_aliasinfo(const DOM_SID *sid, struct acct_info *info)
 {
 	struct pdb_methods *pdb = pdb_get_methods();
-	return pdb->set_aliasinfo(pdb, sid, info);
+	return NT_STATUS_IS_OK(pdb->set_aliasinfo(pdb, sid, info));
 }
 
 NTSTATUS pdb_add_aliasmem(const DOM_SID *alias, const DOM_SID *member)
@@ -975,7 +984,7 @@
 }
 #endif
 
-bool pdb_get_account_policy(int policy_index, uint32 *value)
+BOOL pdb_get_account_policy(int policy_index, uint32 *value)
 {
 	struct pdb_methods *pdb = pdb_get_methods();
 	NTSTATUS status;
@@ -987,7 +996,7 @@
 	return NT_STATUS_IS_OK(status);	
 }
 
-bool pdb_set_account_policy(int policy_index, uint32 value)
+BOOL pdb_set_account_policy(int policy_index, uint32 value)
 {
 	struct pdb_methods *pdb = pdb_get_methods();
 	NTSTATUS status;
@@ -999,38 +1008,38 @@
 	return NT_STATUS_IS_OK(status);
 }
 
-bool pdb_get_seq_num(time_t *seq_num)
+BOOL pdb_get_seq_num(time_t *seq_num)
 {
 	struct pdb_methods *pdb = pdb_get_methods();
 	return NT_STATUS_IS_OK(pdb->get_seq_num(pdb, seq_num));
 }
 
-bool pdb_uid_to_rid(uid_t uid, uint32 *rid)
+BOOL pdb_uid_to_rid(uid_t uid, uint32 *rid)
 {
 	struct pdb_methods *pdb = pdb_get_methods();
 	return pdb->uid_to_rid(pdb, uid, rid);
 }
 
-bool pdb_uid_to_sid(uid_t uid, DOM_SID *sid)
+BOOL pdb_uid_to_sid(uid_t uid, DOM_SID *sid)
 {
 	struct pdb_methods *pdb = pdb_get_methods();
 	return pdb->uid_to_sid(pdb, uid, sid);
 }
 
-bool pdb_gid_to_sid(gid_t gid, DOM_SID *sid)
+BOOL pdb_gid_to_sid(gid_t gid, DOM_SID *sid)
 {
 	struct pdb_methods *pdb = pdb_get_methods();
 	return pdb->gid_to_sid(pdb, gid, sid);
 }
 
-bool pdb_sid_to_id(const DOM_SID *sid, union unid_t *id,
+BOOL pdb_sid_to_id(const DOM_SID *sid, union unid_t *id,
 		   enum lsa_SidType *type)
 {
 	struct pdb_methods *pdb = pdb_get_methods();
 	return pdb->sid_to_id(pdb, sid, id, type);
 }
 
-bool pdb_rid_algorithm(void)
+BOOL pdb_rid_algorithm(void)
 {
 	struct pdb_methods *pdb = pdb_get_methods();
 	return pdb->rid_algorithm(pdb);
@@ -1043,7 +1052,7 @@
  with add RIDs (assigned from previous algorithmic mappings)
 ********************************************************************/
 
-bool pdb_new_rid(uint32 *rid)
+BOOL pdb_new_rid(uint32 *rid)
 {
 	struct pdb_methods *pdb = pdb_get_methods();
 	const char *name = NULL;
@@ -1107,9 +1116,8 @@
   If uninitialised, context will auto-init on first use.
  ***************************************************************/
 
-bool initialize_password_db(bool reload, struct event_context *event_ctx)
-{
-	pdb_event_ctx = event_ctx;
+BOOL initialize_password_db(BOOL reload)
+{	
 	return (pdb_get_methods_reload(reload) != NULL);
 }
 
@@ -1148,11 +1156,26 @@
 	return NT_STATUS_NOT_IMPLEMENTED;
 }
 
-static NTSTATUS pdb_default_update_login_attempts (struct pdb_methods *methods, struct samu *newpwd, bool success)
+static NTSTATUS pdb_default_update_login_attempts (struct pdb_methods *methods, struct samu *newpwd, BOOL success)
 {
+	return NT_STATUS_OK;
+}
+
+static NTSTATUS pdb_default_setsampwent(struct pdb_methods *methods, BOOL update, uint32 acb_mask)
+{
 	return NT_STATUS_NOT_IMPLEMENTED;
 }
 
+static NTSTATUS pdb_default_getsampwent(struct pdb_methods *methods, struct samu *user)
+{
+	return NT_STATUS_NOT_IMPLEMENTED;
+}
+
+static void pdb_default_endsampwent(struct pdb_methods *methods)
+{
+	return; /* NT_STATUS_NOT_IMPLEMENTED; */
+}
+
 static NTSTATUS pdb_default_get_account_policy(struct pdb_methods *methods, int policy_index, uint32 *value)
 {
 	return account_policy_get(policy_index, value) ? NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
@@ -1169,12 +1192,12 @@
 	return NT_STATUS_OK;
 }
 
-static bool pdb_default_uid_to_sid(struct pdb_methods *methods, uid_t uid,
+static BOOL pdb_default_uid_to_sid(struct pdb_methods *methods, uid_t uid,
 				   DOM_SID *sid)
 {
 	struct samu *sampw = NULL;
 	struct passwd *unix_pw;
-	bool ret;
+	BOOL ret;
 	
 	unix_pw = sys_getpwuid( uid );
 
@@ -1208,11 +1231,11 @@
 	return True;
 }
 
-static bool pdb_default_uid_to_rid(struct pdb_methods *methods, uid_t uid,
+static BOOL pdb_default_uid_to_rid(struct pdb_methods *methods, uid_t uid,
 				   uint32 *rid)
 {
 	DOM_SID sid;
-	bool ret;
+	BOOL ret;
 
 	ret = pdb_default_uid_to_sid(methods, uid, &sid);
 	if (!ret) {
@@ -1223,13 +1246,13 @@
 
 	if (!ret) {
 		DEBUG(1, ("Could not peek rid out of sid %s\n",
-			  sid_string_dbg(&sid)));
+			  sid_string_static(&sid)));
 	}
 
 	return ret;
 }
 
-static bool pdb_default_gid_to_sid(struct pdb_methods *methods, gid_t gid,
+static BOOL pdb_default_gid_to_sid(struct pdb_methods *methods, gid_t gid,
 				   DOM_SID *sid)
 {
 	GROUP_MAP map;
@@ -1242,12 +1265,12 @@
 	return True;
 }
 
-static bool pdb_default_sid_to_id(struct pdb_methods *methods,
+static BOOL pdb_default_sid_to_id(struct pdb_methods *methods,
 				  const DOM_SID *sid,
 				  union unid_t *id, enum lsa_SidType *type)
 {
 	TALLOC_CTX *mem_ctx;
-	bool ret = False;
+	BOOL ret = False;
 	const char *name;
 	uint32 rid;
 
@@ -1273,7 +1296,7 @@
 		goto done;		
 	}
 	
-	/* check for "Unix Group" */
+	/* check for "Unix User" */
 
 	if ( sid_peek_check_rid(&global_sid_Unix_Groups, sid, &rid) ) {
 		id->gid = rid;
@@ -1282,21 +1305,21 @@
 		goto done;		
 	}
 	
+
 	/* BUILTIN */
 
-	if (sid_check_is_in_builtin(sid) ||
-	    sid_check_is_in_wellknown_domain(sid)) {
+	if (sid_peek_check_rid(&global_sid_Builtin, sid, &rid)) {
 		/* Here we only have aliases */
 		GROUP_MAP map;
 		if (!NT_STATUS_IS_OK(methods->getgrsid(methods, &map, *sid))) {
 			DEBUG(10, ("Could not find map for sid %s\n",
-				   sid_string_dbg(sid)));
+				   sid_string_static(sid)));
 			goto done;
 		}
 		if ((map.sid_name_use != SID_NAME_ALIAS) &&
 		    (map.sid_name_use != SID_NAME_WKN_GRP)) {
 			DEBUG(10, ("Map for sid %s is a %s, expected an "
-				   "alias\n", sid_string_dbg(sid),
+				   "alias\n", sid_string_static(sid),
 				   sid_type_lookup(map.sid_name_use)));
 			goto done;
 		}
@@ -1308,7 +1331,7 @@
 	}
 
 	DEBUG(5, ("Sid %s is neither ours, a Unix SID, nor builtin\n",
-		  sid_string_dbg(sid)));
+		  sid_string_static(sid)));
 
  done:
 
@@ -1316,7 +1339,7 @@
 	return ret;
 }
 
-static bool add_uid_to_array_unique(TALLOC_CTX *mem_ctx,
+static BOOL add_uid_to_array_unique(TALLOC_CTX *mem_ctx,
 				    uid_t uid, uid_t **pp_uids, size_t *p_num)
 {
 	size_t i;
@@ -1336,20 +1359,20 @@
 	return True;
 }
 
-static bool get_memberuids(TALLOC_CTX *mem_ctx, gid_t gid, uid_t **pp_uids, size_t *p_num)
+static BOOL get_memberuids(TALLOC_CTX *mem_ctx, gid_t gid, uid_t **pp_uids, size_t *p_num)
 {
 	struct group *grp;
 	char **gr;
 	struct passwd *pwd;
-	bool winbind_env;
-	bool ret = False;
+	BOOL winbind_env;
+	BOOL ret = False;
  
 	*pp_uids = NULL;
 	*p_num = 0;
 
 	/* We only look at our own sam, so don't care about imported stuff */
 	winbind_env = winbind_env_set();
-	(void)winbind_off();
+	winbind_off();
 
 	if ((grp = getgrgid(gid)) == NULL) {
 		/* allow winbindd lookups, but only if they weren't already disabled */
@@ -1385,17 +1408,17 @@
 
 	/* allow winbindd lookups, but only if they weren't already disabled */
 	if (!winbind_env) {
-		(void)winbind_on();
+		winbind_on();
 	}
 	
 	return ret;
 }
 
 static NTSTATUS pdb_default_enum_group_members(struct pdb_methods *methods,
-					       TALLOC_CTX *mem_ctx,
-					       const DOM_SID *group,
-					       uint32 **pp_member_rids,
-					       size_t *p_num_members)
+					TALLOC_CTX *mem_ctx,
+					const DOM_SID *group,
+					uint32 **pp_member_rids,
+					size_t *p_num_members)
 {
 	gid_t gid;
 	uid_t *uids;
@@ -1434,11 +1457,11 @@
 }
 
 static NTSTATUS pdb_default_enum_group_memberships(struct pdb_methods *methods,
-						   TALLOC_CTX *mem_ctx,
-						   struct samu *user,
-						   DOM_SID **pp_sids,
-						   gid_t **pp_gids,
-						   size_t *p_num_groups)
+					    TALLOC_CTX *mem_ctx,
+					    struct samu *user,
+					    DOM_SID **pp_sids,
+					    gid_t **pp_gids,
+					    size_t *p_num_groups)
 {
 	size_t i;
 	gid_t gid;
@@ -1483,14 +1506,14 @@
  Look up a rid in the SAM we're responsible for (i.e. passdb)
  ********************************************************************/
 
-static bool lookup_global_sam_rid(TALLOC_CTX *mem_ctx, uint32 rid,
+static BOOL lookup_global_sam_rid(TALLOC_CTX *mem_ctx, uint32 rid,
 				  const char **name,
 				  enum lsa_SidType *psid_name_use,
 				  union unid_t *unix_id)
 {
 	struct samu *sam_account = NULL;
 	GROUP_MAP map;
-	bool ret;
+	BOOL ret;
 	DOM_SID sid;
 
 	*psid_name_use = SID_NAME_UNKNOWN;
@@ -1527,12 +1550,11 @@
 			return True;
 		}
 
-		pw = Get_Pwnam_alloc(talloc_tos(), *name);
+		pw = Get_Pwnam(*name);
 		if (pw == NULL) {
 			return False;
 		}
 		unix_id->uid = pw->pw_uid;
-		TALLOC_FREE(pw);
 		return True;
 	}
 	TALLOC_FREE(sam_account);
@@ -1574,16 +1596,16 @@
 }
 
 static NTSTATUS pdb_default_lookup_rids(struct pdb_methods *methods,
-					const DOM_SID *domain_sid,
-					int num_rids,
-					uint32 *rids,
-					const char **names,
-					enum lsa_SidType *attrs)
+				 const DOM_SID *domain_sid,
+				 int num_rids,
+				 uint32 *rids,
+				 const char **names,
+				 enum lsa_SidType *attrs)
 {
 	int i;
 	NTSTATUS result;
-	bool have_mapped = False;
-	bool have_unmapped = False;
+	BOOL have_mapped = False;
+	BOOL have_unmapped = False;
 
 	if (sid_check_is_builtin(domain_sid)) {
 
@@ -1638,16 +1660,16 @@
 
 #if 0
 static NTSTATUS pdb_default_lookup_names(struct pdb_methods *methods,
-					 const DOM_SID *domain_sid,
-					 int num_names,
-					 const char **names,
-					 uint32 *rids,
-					 enum lsa_SidType *attrs)
+				  const DOM_SID *domain_sid,
+				  int num_names,
+				  const char **names,
+				  uint32 *rids,
+				  enum lsa_SidType *attrs)
 {
 	int i;
 	NTSTATUS result;
-	bool have_mapped = False;
-	bool have_unmapped = False;
+	BOOL have_mapped = False;
+	BOOL have_unmapped = False;
 
 	if (sid_check_is_builtin(domain_sid)) {
 
@@ -1695,7 +1717,7 @@
 }
 #endif
 
-struct pdb_search *pdb_search_init(enum pdb_search_type type)
+static struct pdb_search *pdb_search_init(enum pdb_search_type type)
 {
 	TALLOC_CTX *mem_ctx;
 	struct pdb_search *result;
@@ -1752,12 +1774,87 @@
 		entry->description = "";
 }
 
+static BOOL user_search_in_progress = False;
+struct user_search {
+	uint16 acct_flags;
+};
+
+static BOOL next_entry_users(struct pdb_search *s,
+			     struct samr_displayentry *entry)
+{
+	struct user_search *state = (struct user_search *)s->private_data;
+	struct samu *user = NULL;
+
+ next:
+	if ( !(user = samu_new( NULL )) ) {
+		DEBUG(0, ("next_entry_users: samu_new() failed!\n"));
+		return False;
+	}
+
+	if (!pdb_getsampwent(user)) {
+		TALLOC_FREE(user);
+		return False;
+	}
+
+ 	if ((state->acct_flags != 0) &&
+	    ((pdb_get_acct_ctrl(user) & state->acct_flags) == 0)) {
+		TALLOC_FREE(user);
+		goto next;
+	}
+
+	fill_displayentry(s->mem_ctx, pdb_get_user_rid(user),
+			  pdb_get_acct_ctrl(user), pdb_get_username(user),
+			  pdb_get_fullname(user), pdb_get_acct_desc(user),
+			  entry);
+
+	TALLOC_FREE(user);
+	return True;
+}
+
+static void search_end_users(struct pdb_search *search)
+{
+	pdb_endsampwent();
+	user_search_in_progress = False;
+}
+
+static BOOL pdb_default_search_users(struct pdb_methods *methods,
+				     struct pdb_search *search,
+				     uint32 acct_flags)
+{
+	struct user_search *state;
+
+	if (user_search_in_progress) {
+		DEBUG(1, ("user search in progress\n"));
+		return False;
+	}
+
+	if (!pdb_setsampwent(False, acct_flags)) {
+		DEBUG(5, ("Could not start search\n"));
+		return False;
+	}
+
+	user_search_in_progress = True;
+
+	state = TALLOC_P(search->mem_ctx, struct user_search);
+	if (state == NULL) {
+		DEBUG(0, ("talloc failed\n"));
+		return False;
+	}
+
+	state->acct_flags = acct_flags;
+
+	search->private_data = state;
+	search->next_entry = next_entry_users;
+	search->search_end = search_end_users;
+	return True;
+}
+
 struct group_search {
 	GROUP_MAP *groups;
 	size_t num_groups, current_group;
 };
 
-static bool next_entry_groups(struct pdb_search *s,
+static BOOL next_entry_groups(struct pdb_search *s,
 			      struct samr_displayentry *entry)
 {
 	struct group_search *state = (struct group_search *)s->private_data;
@@ -1783,7 +1880,7 @@
 	SAFE_FREE(state->groups);
 }
 
-static bool pdb_search_grouptype(struct pdb_search *search,
+static BOOL pdb_search_grouptype(struct pdb_search *search,
 				 const DOM_SID *sid, enum lsa_SidType type)
 {
 	struct group_search *state;
@@ -1807,13 +1904,13 @@
 	return True;
 }
 
-static bool pdb_default_search_groups(struct pdb_methods *methods,
+static BOOL pdb_default_search_groups(struct pdb_methods *methods,
 				      struct pdb_search *search)
 {
 	return pdb_search_grouptype(search, get_global_sam_sid(), SID_NAME_DOM_GRP);
 }
 
-static bool pdb_default_search_aliases(struct pdb_methods *methods,
+static BOOL pdb_default_search_aliases(struct pdb_methods *methods,
 				       struct pdb_search *search,
 				       const DOM_SID *sid)
 {
@@ -1933,77 +2030,6 @@
 }
 
 /*******************************************************************
- trustodm methods
- *******************************************************************/
-
-bool pdb_get_trusteddom_pw(const char *domain, char** pwd, DOM_SID *sid, 
-			   time_t *pass_last_set_time)
-{
-	struct pdb_methods *pdb = pdb_get_methods();
-	return pdb->get_trusteddom_pw(pdb, domain, pwd, sid, 
-			pass_last_set_time);
-}
-
-bool pdb_set_trusteddom_pw(const char* domain, const char* pwd,
-			   const DOM_SID *sid)
-{
-	struct pdb_methods *pdb = pdb_get_methods();
-	return pdb->set_trusteddom_pw(pdb, domain, pwd, sid);
-}
-
-bool pdb_del_trusteddom_pw(const char *domain)
-{
-	struct pdb_methods *pdb = pdb_get_methods();
-	return pdb->del_trusteddom_pw(pdb, domain);
-}
-
-NTSTATUS pdb_enum_trusteddoms(TALLOC_CTX *mem_ctx, uint32 *num_domains,
-			      struct trustdom_info ***domains)
-{
-	struct pdb_methods *pdb = pdb_get_methods();
-	return pdb->enum_trusteddoms(pdb, mem_ctx, num_domains, domains);
-}
-
-/*******************************************************************
- the defaults for trustdom methods: 
- these simply call the original passdb/secrets.c actions,
- to be replaced by pdb_ldap.
- *******************************************************************/
-
-static bool pdb_default_get_trusteddom_pw(struct pdb_methods *methods,
-					  const char *domain, 
-					  char** pwd, 
-					  DOM_SID *sid, 
-	        	 		  time_t *pass_last_set_time)
-{
-	return secrets_fetch_trusted_domain_password(domain, pwd,
-				sid, pass_last_set_time);
-
-}
-
-static bool pdb_default_set_trusteddom_pw(struct pdb_methods *methods, 
-					  const char* domain, 
-					  const char* pwd,
-	        	  		  const DOM_SID *sid)
-{
-	return secrets_store_trusted_domain_password(domain, pwd, sid);
-}
-
-static bool pdb_default_del_trusteddom_pw(struct pdb_methods *methods, 
-					  const char *domain)
-{
-	return trusted_domain_password_delete(domain);
-}
-
-static NTSTATUS pdb_default_enum_trusteddoms(struct pdb_methods *methods,
-					     TALLOC_CTX *mem_ctx, 
-					     uint32 *num_domains,
-					     struct trustdom_info ***domains)
-{
-	return secrets_trusted_domains(mem_ctx, num_domains, domains);
-}
-
-/*******************************************************************
  Create a pdb_methods structure and initialize it with the default
  operations.  In this way a passdb module can simply implement
  the functionality it cares about.  However, normally this is done 
@@ -2018,6 +2044,9 @@
 		return NT_STATUS_NO_MEMORY;
 	}
 
+	(*methods)->setsampwent = pdb_default_setsampwent;
+	(*methods)->endsampwent = pdb_default_endsampwent;
+	(*methods)->getsampwent = pdb_default_getsampwent;
 	(*methods)->getsampwnam = pdb_default_getsampwnam;
 	(*methods)->getsampwsid = pdb_default_getsampwsid;
 	(*methods)->create_user = pdb_default_create_user;
@@ -2042,6 +2071,7 @@
 	(*methods)->set_unix_primary_group = pdb_default_set_unix_primary_group;
 	(*methods)->add_groupmem = pdb_default_add_groupmem;
 	(*methods)->del_groupmem = pdb_default_del_groupmem;
+	(*methods)->find_alias = pdb_default_find_alias;
 	(*methods)->create_alias = pdb_default_create_alias;
 	(*methods)->delete_alias = pdb_default_delete_alias;
 	(*methods)->get_aliasinfo = pdb_default_get_aliasinfo;
@@ -2059,13 +2089,9 @@
 	(*methods)->gid_to_sid = pdb_default_gid_to_sid;
 	(*methods)->sid_to_id = pdb_default_sid_to_id;
 
+	(*methods)->search_users = pdb_default_search_users;
 	(*methods)->search_groups = pdb_default_search_groups;
 	(*methods)->search_aliases = pdb_default_search_aliases;
 
-	(*methods)->get_trusteddom_pw = pdb_default_get_trusteddom_pw;
-	(*methods)->set_trusteddom_pw = pdb_default_set_trusteddom_pw;
-	(*methods)->del_trusteddom_pw = pdb_default_del_trusteddom_pw;
-	(*methods)->enum_trusteddoms  = pdb_default_enum_trusteddoms;
-
 	return NT_STATUS_OK;
 }

Modified: branches/samba/upstream/source/passdb/pdb_ldap.c
===================================================================
--- branches/samba/upstream/source/passdb/pdb_ldap.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/passdb/pdb_ldap.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,7 +10,7 @@
     
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -19,7 +19,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -159,8 +160,7 @@
 
 static const char* get_objclass_filter( int schema_ver )
 {
-	fstring objclass_filter;
-	char *result;
+	static fstring objclass_filter;
 	
 	switch( schema_ver ) {
 		case SCHEMAVER_SAMBAACCOUNT:
@@ -171,13 +171,10 @@
 			break;
 		default:
 			DEBUG(0,("get_objclass_filter: Invalid schema version specified!\n"));
-			objclass_filter[0] = '\0';
 			break;
 	}
 	
-	result = talloc_strdup(talloc_tos(), objclass_filter);
-	SMB_ASSERT(result != NULL);
-	return result;
+	return objclass_filter;	
 }
 
 /*****************************************************************
@@ -193,8 +190,8 @@
 	TALLOC_CTX *mem_ctx;
 	char **values = NULL;
 	int rc, num_result, num_values, rid;
-	char *suffix = NULL;
-	char *tok;
+	pstring suffix;
+	fstring tok;
 	const char *p;
 	const char **attrs;
 
@@ -239,25 +236,16 @@
 		/* csn=20050126161620Z#0000001#00#00000 */
 		attrs[0] = talloc_strdup(mem_ctx, "syncreplCookie");
 		attrs[1] = NULL;
-		suffix = talloc_asprintf(mem_ctx,
-				"cn=syncrepl%d,%s", rid, lp_ldap_suffix());
-		if (!suffix) {
-			ntstatus = NT_STATUS_NO_MEMORY;
-			goto done;
-		}
+		pstr_sprintf( suffix, "cn=syncrepl%d,%s", rid, lp_ldap_suffix());
+
 	} else {
 
 		/* provider contextCSN */
 		/* 20050126161620Z#000009#00#000000 */
 		attrs[0] = talloc_strdup(mem_ctx, "contextCSN");
 		attrs[1] = NULL;
-		suffix = talloc_asprintf(mem_ctx,
-				"cn=ldapsync,%s", lp_ldap_suffix());
+		pstr_sprintf( suffix, "cn=ldapsync,%s", lp_ldap_suffix());
 
-		if (!suffix) {
-			ntstatus = NT_STATUS_NO_MEMORY;
-			goto done;
-		}
 	}
 
 	rc = smbldap_search(ldap_state->smbldap_state, suffix,
@@ -292,7 +280,7 @@
 	}
 
 	p = values[0];
-	if (!next_token_talloc(mem_ctx, &p, &tok, "#")) {
+	if (!next_token(&p, tok, "#", sizeof(tok))) {
 		DEBUG(0,("ldapsam_get_seq_num: failed to parse sequence number\n"));
 		goto done;
 	}
@@ -329,14 +317,13 @@
  Run the search by name.
 ******************************************************************/
 
-int ldapsam_search_suffix_by_name(struct ldapsam_privates *ldap_state,
+int ldapsam_search_suffix_by_name(struct ldapsam_privates *ldap_state, 
 					  const char *user,
 					  LDAPMessage ** result,
 					  const char **attr)
 {
-	char *filter = NULL;
+	pstring filter;
 	char *escape_user = escape_ldap_string_alloc(user);
-	int ret = -1;
 
 	if (!escape_user) {
 		return LDAP_NO_MEMORY;
@@ -346,50 +333,37 @@
 	 * in the filter expression, replace %u with the real name
 	 * so in ldap filter, %u MUST exist :-)
 	 */
-	filter = talloc_asprintf(talloc_tos(), "(&%s%s)", "(uid=%u)",
+	pstr_sprintf(filter, "(&%s%s)", "(uid=%u)", 
 		get_objclass_filter(ldap_state->schema_ver));
-	if (!filter) {
-		SAFE_FREE(escape_user);
-		return LDAP_NO_MEMORY;
-	}
-	/*
+
+	/* 
 	 * have to use this here because $ is filtered out
-	 * in string_sub
+	   * in pstring_sub
 	 */
+	
 
-	filter = talloc_all_string_sub(talloc_tos(),
-				filter, "%u", escape_user);
+	all_string_sub(filter, "%u", escape_user, sizeof(pstring));
 	SAFE_FREE(escape_user);
-	if (!filter) {
-		return LDAP_NO_MEMORY;
-	}
 
-	ret = smbldap_search_suffix(ldap_state->smbldap_state,
-			filter, attr, result);
-	TALLOC_FREE(filter);
-	return ret;
+	return smbldap_search_suffix(ldap_state->smbldap_state, filter, attr, result);
 }
 
 /*******************************************************************
  Run the search by rid.
 ******************************************************************/
 
-static int ldapsam_search_suffix_by_rid (struct ldapsam_privates *ldap_state,
-					 uint32 rid, LDAPMessage ** result,
+static int ldapsam_search_suffix_by_rid (struct ldapsam_privates *ldap_state, 
+					 uint32 rid, LDAPMessage ** result, 
 					 const char **attr)
 {
-	char *filter = NULL;
+	pstring filter;
 	int rc;
 
-	filter = talloc_asprintf(talloc_tos(), "(&(rid=%i)%s)", rid,
+	pstr_sprintf(filter, "(&(rid=%i)%s)", rid, 
 		get_objclass_filter(ldap_state->schema_ver));
-	if (!filter) {
-		return LDAP_NO_MEMORY;
-	}
-
-	rc = smbldap_search_suffix(ldap_state->smbldap_state,
-			filter, attr, result);
-	TALLOC_FREE(filter);
+	
+	rc = smbldap_search_suffix(ldap_state->smbldap_state, filter, attr, result);
+	
 	return rc;
 }
 
@@ -397,27 +371,21 @@
  Run the search by SID.
 ******************************************************************/
 
-static int ldapsam_search_suffix_by_sid (struct ldapsam_privates *ldap_state,
-				 const DOM_SID *sid, LDAPMessage ** result,
-				 const char **attr)
+static int ldapsam_search_suffix_by_sid (struct ldapsam_privates *ldap_state, 
+					 const DOM_SID *sid, LDAPMessage ** result, 
+					 const char **attr)
 {
-	char *filter = NULL;
+	pstring filter;
 	int rc;
 	fstring sid_string;
 
-	filter = talloc_asprintf(talloc_tos(), "(&(%s=%s)%s)",
-		get_userattr_key2string(ldap_state->schema_ver,
-			LDAP_ATTR_USER_SID),
-		sid_to_fstring(sid_string, sid),
+	pstr_sprintf(filter, "(&(%s=%s)%s)", 
+		get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_USER_SID),
+		sid_to_string(sid_string, sid), 
 		get_objclass_filter(ldap_state->schema_ver));
-	if (!filter) {
-		return LDAP_NO_MEMORY;
-	}
-
-	rc = smbldap_search_suffix(ldap_state->smbldap_state,
-			filter, attr, result);
-
-	TALLOC_FREE(filter);
+		
+	rc = smbldap_search_suffix(ldap_state->smbldap_state, filter, attr, result);
+	
 	return rc;
 }
 
@@ -470,32 +438,28 @@
 	if (ptr != NULL) {
 		ber_free(ptr, 0);
 	}
-
+	
 	smbldap_set_mod(&mods, LDAP_MOD_DELETE, "objectClass", objectclass);
 	talloc_autofree_ldapmod(mem_ctx, mods);
-
+	
 	return smbldap_modify(priv->smbldap_state, dn, mods);
 }
-
+		  
 static time_t ldapsam_get_entry_timestamp( struct ldapsam_privates *ldap_state, LDAPMessage * entry)
 {
-	char *temp;
+	pstring temp;	
 	struct tm tm;
 
-	temp = smbldap_talloc_single_attribute(ldap_state->smbldap_state->ldap_struct, entry,
+	if (!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry,
 			get_userattr_key2string(ldap_state->schema_ver,LDAP_ATTR_MOD_TIMESTAMP),
-			talloc_tos());
-	if (!temp) {
+			temp))
 		return (time_t) 0;
-	}
 
 	if ( !strptime(temp, "%Y%m%d%H%M%SZ", &tm)) {
 		DEBUG(2,("ldapsam_get_entry_timestamp: strptime failed on: %s\n",
 			(char*)temp));
-		TALLOC_FREE(temp);
 		return (time_t) 0;
 	}
-	TALLOC_FREE(temp);
 	tzset();
 	return timegm(&tm);
 }
@@ -505,104 +469,100 @@
  (Based on init_sam_from_buffer in pdb_tdb.c)
 *********************************************************************/
 
-static bool init_sam_from_ldap(struct ldapsam_privates *ldap_state,
+static BOOL init_sam_from_ldap(struct ldapsam_privates *ldap_state, 
 				struct samu * sampass,
 				LDAPMessage * entry)
 {
 	time_t  logon_time,
 			logoff_time,
 			kickoff_time,
-			pass_last_set_time,
-			pass_can_change_time,
+			pass_last_set_time, 
+			pass_can_change_time, 
 			pass_must_change_time,
 			ldap_entry_time,
 			bad_password_time;
-	char *username = NULL,
-			*domain = NULL,
-			*nt_username = NULL,
-			*fullname = NULL,
-			*homedir = NULL,
-			*dir_drive = NULL,
-			*logon_script = NULL,
-			*profile_path = NULL,
-			*acct_desc = NULL,
-			*workstations = NULL,
-			*munged_dial = NULL;
-	uint32 		user_rid;
+	pstring 	username, 
+			domain,
+			nt_username,
+			fullname,
+			homedir,
+			dir_drive,
+			logon_script,
+			profile_path,
+			acct_desc,
+			workstations;
+	char		munged_dial[2048];
+	uint32 		user_rid; 
 	uint8 		smblmpwd[LM_HASH_LEN],
 			smbntpwd[NT_HASH_LEN];
-	bool 		use_samba_attrs = True;
+	BOOL 		use_samba_attrs = True;
 	uint32 		acct_ctrl = 0;
 	uint16		logon_divs;
-	uint16 		bad_password_count = 0,
+	uint16 		bad_password_count = 0, 
 			logon_count = 0;
 	uint32 hours_len;
 	uint8 		hours[MAX_HOURS_LEN];
-	char *temp = NULL;
+	pstring temp;
 	LOGIN_CACHE	*cache_entry = NULL;
 	uint32 		pwHistLen;
-	bool expand_explicit = lp_passdb_expand_explicit();
-	bool ret = false;
-	TALLOC_CTX *ctx = talloc_init("init_sam_from_ldap");
+	pstring		tmpstring;
+	BOOL expand_explicit = lp_passdb_expand_explicit();
 
-	if (!ctx) {
-		return false;
-	}
+	/*
+	 * do a little initialization
+	 */
+	username[0] 	= '\0';
+	domain[0] 	= '\0';
+	nt_username[0] 	= '\0';
+	fullname[0] 	= '\0';
+	homedir[0] 	= '\0';
+	dir_drive[0] 	= '\0';
+	logon_script[0] = '\0';
+	profile_path[0] = '\0';
+	acct_desc[0] 	= '\0';
+	munged_dial[0] 	= '\0';
+	workstations[0] = '\0';
+	 
+
 	if (sampass == NULL || ldap_state == NULL || entry == NULL) {
 		DEBUG(0, ("init_sam_from_ldap: NULL parameters found!\n"));
-		goto fn_exit;
+		return False;
 	}
 
 	if (priv2ld(ldap_state) == NULL) {
 		DEBUG(0, ("init_sam_from_ldap: ldap_state->smbldap_state->"
 			  "ldap_struct is NULL!\n"));
-		goto fn_exit;
+		return False;
 	}
-
-	if (!(username = smbldap_talloc_single_attribute(priv2ld(ldap_state),
-					entry,
-					"uid",
-					ctx))) {
+	
+	if (!smbldap_get_single_pstring(priv2ld(ldap_state), entry, "uid",
+					username)) {
 		DEBUG(1, ("init_sam_from_ldap: No uid attribute found for "
 			  "this user!\n"));
-		goto fn_exit;
+		return False;
 	}
 
 	DEBUG(2, ("init_sam_from_ldap: Entry found for user: %s\n", username));
 
-	nt_username = talloc_strdup(ctx, username);
-	if (!nt_username) {
-		goto fn_exit;
-	}
+	pstrcpy(nt_username, username);
 
-	domain = talloc_strdup(ctx, ldap_state->domain_name);
-	if (!domain) {
-		goto fn_exit;
-	}
-
+	pstrcpy(domain, ldap_state->domain_name);
+	
 	pdb_set_username(sampass, username, PDB_SET);
 
 	pdb_set_domain(sampass, domain, PDB_DEFAULT);
 	pdb_set_nt_username(sampass, nt_username, PDB_SET);
 
 	/* deal with different attributes between the schema first */
-
+	
 	if ( ldap_state->schema_ver == SCHEMAVER_SAMBASAMACCOUNT ) {
-		if ((temp = smbldap_talloc_single_attribute(
-				ldap_state->smbldap_state->ldap_struct,
-				entry,
-				get_userattr_key2string(ldap_state->schema_ver,
-					LDAP_ATTR_USER_SID),
-				ctx))!=NULL) {
+		if (smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry, 
+				get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_USER_SID), temp)) {
 			pdb_set_user_sid_from_string(sampass, temp, PDB_SET);
 		}
 	} else {
-		if ((temp = smbldap_talloc_single_attribute(
-				ldap_state->smbldap_state->ldap_struct,
-				entry,
-				get_userattr_key2string(ldap_state->schema_ver,
-					LDAP_ATTR_USER_RID),
-				ctx))!=NULL) {
+		if (smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry,
+				get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_USER_RID), temp)) {
 			user_rid = (uint32)atol(temp);
 			pdb_set_user_sid_from_rid(sampass, user_rid, PDB_SET);
 		}
@@ -610,81 +570,58 @@
 
 	if (pdb_get_init_flags(sampass,PDB_USERSID) == PDB_DEFAULT) {
 		DEBUG(1, ("init_sam_from_ldap: no %s or %s attribute found for this user %s\n", 
-			get_userattr_key2string(ldap_state->schema_ver,
-				LDAP_ATTR_USER_SID),
-			get_userattr_key2string(ldap_state->schema_ver,
-				LDAP_ATTR_USER_RID),
+			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_USER_SID),
+			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_USER_RID),
 			username));
 		return False;
 	}
 
-	temp = smbldap_talloc_single_attribute(
-			ldap_state->smbldap_state->ldap_struct,
-			entry,
-			get_userattr_key2string(ldap_state->schema_ver,
-				LDAP_ATTR_PWD_LAST_SET),
-			ctx);
-	if (temp) {
+	if (!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry, 
+			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_PWD_LAST_SET), temp)) {
+		/* leave as default */
+	} else {
 		pass_last_set_time = (time_t) atol(temp);
-		pdb_set_pass_last_set_time(sampass,
-				pass_last_set_time, PDB_SET);
+		pdb_set_pass_last_set_time(sampass, pass_last_set_time, PDB_SET);
 	}
 
-	temp = smbldap_talloc_single_attribute(
-			ldap_state->smbldap_state->ldap_struct,
-			entry,
-			get_userattr_key2string(ldap_state->schema_ver,
-				LDAP_ATTR_LOGON_TIME),
-			ctx);
-	if (temp) {
+	if (!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry, 
+			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_LOGON_TIME), temp)) {
+		/* leave as default */
+	} else {
 		logon_time = (time_t) atol(temp);
 		pdb_set_logon_time(sampass, logon_time, PDB_SET);
 	}
 
-	temp = smbldap_talloc_single_attribute(
-			ldap_state->smbldap_state->ldap_struct,
-			entry,
-			get_userattr_key2string(ldap_state->schema_ver,
-				LDAP_ATTR_LOGOFF_TIME),
-			ctx);
-	if (temp) {
+	if (!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry, 
+			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_LOGOFF_TIME), temp)) {
+		/* leave as default */
+	} else {
 		logoff_time = (time_t) atol(temp);
 		pdb_set_logoff_time(sampass, logoff_time, PDB_SET);
 	}
 
-	temp = smbldap_talloc_single_attribute(
-			ldap_state->smbldap_state->ldap_struct,
-			entry,
-			get_userattr_key2string(ldap_state->schema_ver,
-				LDAP_ATTR_KICKOFF_TIME),
-			ctx);
-	if (temp) {
+	if (!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry, 
+			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_KICKOFF_TIME), temp)) {
+		/* leave as default */
+	} else {
 		kickoff_time = (time_t) atol(temp);
 		pdb_set_kickoff_time(sampass, kickoff_time, PDB_SET);
 	}
 
-	temp = smbldap_talloc_single_attribute(
-			ldap_state->smbldap_state->ldap_struct,
-			entry,
-			get_userattr_key2string(ldap_state->schema_ver,
-				LDAP_ATTR_PWD_CAN_CHANGE),
-			ctx);
-	if (temp) {
+	if (!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry, 
+			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_PWD_CAN_CHANGE), temp)) {
+		/* leave as default */
+	} else {
 		pass_can_change_time = (time_t) atol(temp);
-		pdb_set_pass_can_change_time(sampass,
-				pass_can_change_time, PDB_SET);
+		pdb_set_pass_can_change_time(sampass, pass_can_change_time, PDB_SET);
 	}
 
-	temp = smbldap_talloc_single_attribute(
-			ldap_state->smbldap_state->ldap_struct,
-			entry,
-			get_userattr_key2string(ldap_state->schema_ver,
-				LDAP_ATTR_PWD_MUST_CHANGE),
-			ctx);
-	if (temp) {
+	if (!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry, 
+			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_PWD_MUST_CHANGE), temp)) {	
+		/* leave as default */
+	} else {
 		pass_must_change_time = (time_t) atol(temp);
-		pdb_set_pass_must_change_time(sampass,
-				pass_must_change_time, PDB_SET);
+		pdb_set_pass_must_change_time(sampass, pass_must_change_time, PDB_SET);
 	}
 
 	/* recommend that 'gecos' and 'displayName' should refer to the same
@@ -693,142 +630,98 @@
 	 * that fits your needs; using cn then displayName rather than 'userFullName'
 	 */
 
-	fullname = smbldap_talloc_single_attribute(
-			ldap_state->smbldap_state->ldap_struct,
-			entry,
-			get_userattr_key2string(ldap_state->schema_ver,
-				LDAP_ATTR_DISPLAY_NAME),
-			ctx);
-	if (fullname) {
-		pdb_set_fullname(sampass, fullname, PDB_SET);
-	} else {
-		fullname = smbldap_talloc_single_attribute(
-				ldap_state->smbldap_state->ldap_struct,
-				entry,
-				get_userattr_key2string(ldap_state->schema_ver,
-					LDAP_ATTR_CN),
-				ctx);
-		if (fullname) {
+	if (!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry,
+			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_DISPLAY_NAME), fullname)) {
+		if (!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry,
+				get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_CN), fullname)) {
+			/* leave as default */
+		} else {
 			pdb_set_fullname(sampass, fullname, PDB_SET);
 		}
+	} else {
+		pdb_set_fullname(sampass, fullname, PDB_SET);
 	}
 
-	dir_drive = smbldap_talloc_single_attribute(
-			ldap_state->smbldap_state->ldap_struct,
-			entry,
-			get_userattr_key2string(ldap_state->schema_ver,
-				LDAP_ATTR_HOME_DRIVE),
-			ctx);
-	if (dir_drive) {
-		pdb_set_dir_drive(sampass, dir_drive, PDB_SET);
-	} else {
+	if (!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry, 
+			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_HOME_DRIVE), dir_drive)) 
+	{
 		pdb_set_dir_drive( sampass, lp_logon_drive(), PDB_DEFAULT );
+	} else {
+		pdb_set_dir_drive(sampass, dir_drive, PDB_SET);
 	}
 
-	homedir = smbldap_talloc_single_attribute(
-			ldap_state->smbldap_state->ldap_struct,
-			entry,
-			get_userattr_key2string(ldap_state->schema_ver,
-				LDAP_ATTR_HOME_PATH),
-			ctx);
-	if (homedir) {
+	if (!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry,
+			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_HOME_PATH), homedir)) 
+	{
+		pdb_set_homedir( sampass, 
+			talloc_sub_basic(sampass, username, domain,
+					 lp_logon_home()),
+			PDB_DEFAULT );
+	} else {
+		pstrcpy( tmpstring, homedir );
 		if (expand_explicit) {
-			homedir = talloc_sub_basic(ctx,
-						username,
-						domain,
-						homedir);
-			if (!homedir) {
-				goto fn_exit;
-			}
+			standard_sub_basic( username, domain, tmpstring,
+					    sizeof(tmpstring) );
 		}
-		pdb_set_homedir(sampass, homedir, PDB_SET);
-	} else {
-		pdb_set_homedir(sampass,
-			talloc_sub_basic(ctx, username, domain,
-					 lp_logon_home()),
-			PDB_DEFAULT);
+		pdb_set_homedir(sampass, tmpstring, PDB_SET);
 	}
 
-	logon_script = smbldap_talloc_single_attribute(
-			ldap_state->smbldap_state->ldap_struct,
-			entry,
-			get_userattr_key2string(ldap_state->schema_ver,
-				LDAP_ATTR_LOGON_SCRIPT),
-			ctx);
-	if (logon_script) {
+	if (!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry,
+			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_LOGON_SCRIPT), logon_script)) 
+	{
+		pdb_set_logon_script( sampass, 
+			talloc_sub_basic(sampass, username, domain,
+					 lp_logon_script()), 
+			PDB_DEFAULT );
+	} else {
+		pstrcpy( tmpstring, logon_script );
 		if (expand_explicit) {
-			logon_script = talloc_sub_basic(ctx,
-						username,
-						domain,
-						logon_script);
-			if (!logon_script) {
-				goto fn_exit;
-			}
+			standard_sub_basic( username, domain, tmpstring,
+					    sizeof(tmpstring) );
 		}
-		pdb_set_logon_script(sampass, logon_script, PDB_SET);
-	} else {
-		pdb_set_logon_script(sampass,
-			talloc_sub_basic(ctx, username, domain,
-					 lp_logon_script()),
-			PDB_DEFAULT );
+		pdb_set_logon_script(sampass, tmpstring, PDB_SET);
 	}
 
-	profile_path = smbldap_talloc_single_attribute(
-			ldap_state->smbldap_state->ldap_struct,
-			entry,
-			get_userattr_key2string(ldap_state->schema_ver,
-				LDAP_ATTR_PROFILE_PATH),
-			ctx);
-	if (profile_path) {
-		if (expand_explicit) {
-			profile_path = talloc_sub_basic(ctx,
-						username,
-						domain,
-						profile_path);
-			if (!profile_path) {
-				goto fn_exit;
-			}
-		}
-		pdb_set_profile_path(sampass, profile_path, PDB_SET);
-	} else {
-		pdb_set_profile_path(sampass,
-			talloc_sub_basic(ctx, username, domain,
+	if (!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry,
+			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_PROFILE_PATH), profile_path)) 
+	{
+		pdb_set_profile_path( sampass, 
+			talloc_sub_basic( sampass, username, domain,
 					  lp_logon_path()),
 			PDB_DEFAULT );
+	} else {
+		pstrcpy( tmpstring, profile_path );
+		if (expand_explicit) {
+			standard_sub_basic( username, domain, tmpstring,
+					    sizeof(tmpstring) );
+		}
+		pdb_set_profile_path(sampass, tmpstring, PDB_SET);
 	}
 
-	acct_desc = smbldap_talloc_single_attribute(
-			ldap_state->smbldap_state->ldap_struct,
-			entry,
-			get_userattr_key2string(ldap_state->schema_ver,
-				LDAP_ATTR_DESC),
-			ctx);
-	if (acct_desc) {
+	if (!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry, 
+		get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_DESC), acct_desc)) 
+	{
+		/* leave as default */
+	} else {
 		pdb_set_acct_desc(sampass, acct_desc, PDB_SET);
 	}
 
-	workstations = smbldap_talloc_single_attribute(
-			ldap_state->smbldap_state->ldap_struct,
-			entry,
-			get_userattr_key2string(ldap_state->schema_ver,
-				LDAP_ATTR_USER_WKS),
-			ctx);
-	if (workstations) {
+	if (!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry, 
+		get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_USER_WKS), workstations)) {
+		/* leave as default */;
+	} else {
 		pdb_set_workstations(sampass, workstations, PDB_SET);
 	}
 
-	munged_dial = smbldap_talloc_single_attribute(
-			ldap_state->smbldap_state->ldap_struct,
-			entry,
-			get_userattr_key2string(ldap_state->schema_ver,
-				LDAP_ATTR_MUNGED_DIAL),
-			ctx);
-	if (munged_dial) {
+	if (!smbldap_get_single_attribute(ldap_state->smbldap_state->ldap_struct, entry, 
+		get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_MUNGED_DIAL), munged_dial, sizeof(munged_dial))) {
+		/* leave as default */;
+	} else {
 		pdb_set_munged_dial(sampass, munged_dial, PDB_SET);
 	}
-
+	
 	/* FIXME: hours stuff should be cleaner */
-
+	
 	logon_divs = 168;
 	hours_len = 21;
 	memset(hours, 0xff, hours_len);
@@ -837,7 +730,7 @@
 		char *user_dn;
 		size_t pwd_len;
 		char clear_text_pw[512];
-
+   
 		/* Make call to Novell eDirectory ldap extension to get clear text password.
 			NOTE: This will only work if we have an SSL connection to eDirectory. */
 		user_dn = smbldap_get_dn(ldap_state->smbldap_state->ldap_struct, entry);
@@ -868,33 +761,25 @@
 	}
 
 	if (use_samba_attrs) {
-		temp = smbldap_talloc_single_attribute(
-				ldap_state->smbldap_state->ldap_struct,
-				entry,
-				get_userattr_key2string(ldap_state->schema_ver,
-					LDAP_ATTR_LMPW),
-				ctx);
-		if (temp) {
+		if (!smbldap_get_single_pstring (ldap_state->smbldap_state->ldap_struct, entry, 
+			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_LMPW), temp)) {
+			/* leave as default */
+		} else {
 			pdb_gethexpwd(temp, smblmpwd);
 			memset((char *)temp, '\0', strlen(temp)+1);
-			if (!pdb_set_lanman_passwd(sampass, smblmpwd, PDB_SET)) {
-				goto fn_exit;
-			}
+			if (!pdb_set_lanman_passwd(sampass, smblmpwd, PDB_SET))
+				return False;
 			ZERO_STRUCT(smblmpwd);
 		}
 
-		temp = smbldap_talloc_single_attribute(
-				ldap_state->smbldap_state->ldap_struct,
-				entry,
-				get_userattr_key2string(ldap_state->schema_ver,
-					LDAP_ATTR_NTPW),
-				ctx);
-		if (temp) {
+		if (!smbldap_get_single_pstring (ldap_state->smbldap_state->ldap_struct, entry,
+			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_NTPW), temp)) {
+			/* leave as default */
+		} else {
 			pdb_gethexpwd(temp, smbntpwd);
 			memset((char *)temp, '\0', strlen(temp)+1);
-			if (!pdb_set_nt_passwd(sampass, smbntpwd, PDB_SET)) {
-				goto fn_exit;
-			}
+			if (!pdb_set_nt_passwd(sampass, smbntpwd, PDB_SET))
+				return False;
 			ZERO_STRUCT(smbntpwd);
 		}
 	}
@@ -905,42 +790,31 @@
 	if (pwHistLen > 0){
 		uint8 *pwhist = NULL;
 		int i;
-		char *history_string = TALLOC_ARRAY(ctx, char,
-						MAX_PW_HISTORY_LEN*64);
+		char history_string[MAX_PW_HISTORY_LEN*64];
 
-		if (!history_string) {
-			goto fn_exit;
-		}
-
 		pwHistLen = MIN(pwHistLen, MAX_PW_HISTORY_LEN);
 
-		if ((pwhist = TALLOC_ARRAY(ctx, uint8,
-					pwHistLen * PW_HISTORY_ENTRY_LEN)) ==
-				NULL){
-			DEBUG(0, ("init_sam_from_ldap: talloc failed!\n"));
-			goto fn_exit;
+		if ((pwhist = SMB_MALLOC_ARRAY(uint8, pwHistLen * PW_HISTORY_ENTRY_LEN)) == NULL){
+			DEBUG(0, ("init_sam_from_ldap: malloc failed!\n"));
+			return False;
 		}
 		memset(pwhist, '\0', pwHistLen * PW_HISTORY_ENTRY_LEN);
 
-		if (smbldap_get_single_attribute(
-				ldap_state->smbldap_state->ldap_struct,
-				entry,
-				get_userattr_key2string(ldap_state->schema_ver,
-					LDAP_ATTR_PWD_HISTORY),
-				history_string,
-				MAX_PW_HISTORY_LEN*64)) {
-			bool hex_failed = false;
+		if (!smbldap_get_single_attribute(ldap_state->smbldap_state->ldap_struct, entry,
+						  get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_PWD_HISTORY),
+						  history_string, sizeof(history_string))) {
+			/* leave as default - zeros */
+		} else {
+			BOOL hex_failed = False;
 			for (i = 0; i < pwHistLen; i++){
 				/* Get the 16 byte salt. */
-				if (!pdb_gethexpwd(&history_string[i*64],
-					&pwhist[i*PW_HISTORY_ENTRY_LEN])) {
-					hex_failed = true;
+				if (!pdb_gethexpwd(&history_string[i*64], &pwhist[i*PW_HISTORY_ENTRY_LEN])) {
+					hex_failed = True;
 					break;
 				}
 				/* Get the 16 byte MD5 hash of salt+passwd. */
 				if (!pdb_gethexpwd(&history_string[(i*64)+32],
-					&pwhist[(i*PW_HISTORY_ENTRY_LEN)+
-						PW_HISTORY_SALT_LEN])) {
+						&pwhist[(i*PW_HISTORY_ENTRY_LEN)+PW_HISTORY_SALT_LEN])) {
 					hex_failed = True;
 					break;
 				}
@@ -952,75 +826,58 @@
 			}
 		}
 		if (!pdb_set_pw_history(sampass, pwhist, pwHistLen, PDB_SET)){
-			goto fn_exit;
+			SAFE_FREE(pwhist);
+			return False;
 		}
+		SAFE_FREE(pwhist);
 	}
 
-	temp = smbldap_talloc_single_attribute(
-			ldap_state->smbldap_state->ldap_struct,
-			entry,
-			get_userattr_key2string(ldap_state->schema_ver,
-				LDAP_ATTR_ACB_INFO),
-			ctx);
-	if (temp) {
+	if (!smbldap_get_single_pstring (ldap_state->smbldap_state->ldap_struct, entry,
+			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_ACB_INFO), temp)) {
+		acct_ctrl |= ACB_NORMAL;
+	} else {
 		acct_ctrl = pdb_decode_acct_ctrl(temp);
 
-		if (acct_ctrl == 0) {
+		if (acct_ctrl == 0)
 			acct_ctrl |= ACB_NORMAL;
-		}
 
 		pdb_set_acct_ctrl(sampass, acct_ctrl, PDB_SET);
-	} else {
-		acct_ctrl |= ACB_NORMAL;
 	}
 
 	pdb_set_hours_len(sampass, hours_len, PDB_SET);
 	pdb_set_logon_divs(sampass, logon_divs, PDB_SET);
 
-	temp = smbldap_talloc_single_attribute(
-			ldap_state->smbldap_state->ldap_struct,
-			entry,
-			get_userattr_key2string(ldap_state->schema_ver,
-				LDAP_ATTR_BAD_PASSWORD_COUNT),
-			ctx);
-	if (temp) {
+	if (!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry,
+			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_BAD_PASSWORD_COUNT), temp)) {
+			/* leave as default */
+	} else {
 		bad_password_count = (uint32) atol(temp);
-		pdb_set_bad_password_count(sampass,
-				bad_password_count, PDB_SET);
+		pdb_set_bad_password_count(sampass, bad_password_count, PDB_SET);
 	}
 
-	temp = smbldap_talloc_single_attribute(
-			ldap_state->smbldap_state->ldap_struct,
-			entry,
-			get_userattr_key2string(ldap_state->schema_ver,
-				LDAP_ATTR_BAD_PASSWORD_TIME),
-			ctx);
-	if (temp) {
+	if (!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry, 
+			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_BAD_PASSWORD_TIME), temp)) {
+		/* leave as default */
+	} else {
 		bad_password_time = (time_t) atol(temp);
 		pdb_set_bad_password_time(sampass, bad_password_time, PDB_SET);
 	}
 
 
-	temp = smbldap_talloc_single_attribute(
-			ldap_state->smbldap_state->ldap_struct,
-			entry,
-			get_userattr_key2string(ldap_state->schema_ver,
-				LDAP_ATTR_LOGON_COUNT),
-			ctx);
-	if (temp) {
+	if (!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry,
+			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_LOGON_COUNT), temp)) {
+			/* leave as default */
+	} else {
 		logon_count = (uint32) atol(temp);
 		pdb_set_logon_count(sampass, logon_count, PDB_SET);
 	}
 
 	/* pdb_set_unknown_6(sampass, unknown6, PDB_SET); */
 
-	temp = smbldap_talloc_single_attribute(
-			ldap_state->smbldap_state->ldap_struct,
-			entry,
-			get_userattr_key2string(ldap_state->schema_ver,
-				LDAP_ATTR_LOGON_HOURS),
-			ctx);
-	if (temp) {
+	if(!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry,
+		get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_LOGON_HOURS), temp)) {
+			/* leave as default */
+	} else {
 		pdb_gethexhours(temp, hours);
 		memset((char *)temp, '\0', strlen(temp) +1);
 		pdb_set_hours(sampass, hours, PDB_SET);
@@ -1028,12 +885,8 @@
 	}
 
 	if (lp_parm_bool(-1, "ldapsam", "trusted", False)) {
-		temp = smbldap_talloc_single_attribute(
-				priv2ld(ldap_state),
-				entry,
-				"uidNumber",
-				ctx);
-		if (temp) {
+		if (smbldap_get_single_pstring(priv2ld(ldap_state), entry,
+					       "uidNumber", temp)) {
 			/* We've got a uid, feed the cache */
 			uid_t uid = strtoul(temp, NULL, 10);
 			store_uid_sid_cache(pdb_get_user_sid(sampass), uid);
@@ -1041,52 +894,43 @@
 	}
 
 	/* check the timestamp of the cache vs ldap entry */
-	if (!(ldap_entry_time = ldapsam_get_entry_timestamp(ldap_state,
-							    entry))) {
-		ret = true;
-		goto fn_exit;
-	}
+	if (!(ldap_entry_time = ldapsam_get_entry_timestamp(ldap_state, 
+							    entry)))
+		return True;
 
 	/* see if we have newer updates */
 	if (!(cache_entry = login_cache_read(sampass))) {
 		DEBUG (9, ("No cache entry, bad count = %u, bad time = %u\n",
 			   (unsigned int)pdb_get_bad_password_count(sampass),
 			   (unsigned int)pdb_get_bad_password_time(sampass)));
-		ret = true;
-		goto fn_exit;
+		return True;
 	}
 
-	DEBUG(7, ("ldap time is %u, cache time is %u, bad time = %u\n",
-		  (unsigned int)ldap_entry_time,
-		  (unsigned int)cache_entry->entry_timestamp,
+	DEBUG(7, ("ldap time is %u, cache time is %u, bad time = %u\n", 
+		  (unsigned int)ldap_entry_time, (unsigned int)cache_entry->entry_timestamp, 
 		  (unsigned int)cache_entry->bad_password_time));
 
 	if (ldap_entry_time > cache_entry->entry_timestamp) {
 		/* cache is older than directory , so
-		   we need to delete the entry but allow the
+		   we need to delete the entry but allow the 
 		   fields to be written out */
 		login_cache_delentry(sampass);
 	} else {
 		/* read cache in */
-		pdb_set_acct_ctrl(sampass,
-				  pdb_get_acct_ctrl(sampass) |
+		pdb_set_acct_ctrl(sampass, 
+				  pdb_get_acct_ctrl(sampass) | 
 				  (cache_entry->acct_ctrl & ACB_AUTOLOCK),
 				  PDB_SET);
-		pdb_set_bad_password_count(sampass,
-					   cache_entry->bad_password_count,
+		pdb_set_bad_password_count(sampass, 
+					   cache_entry->bad_password_count, 
 					   PDB_SET);
-		pdb_set_bad_password_time(sampass,
-					  cache_entry->bad_password_time,
+		pdb_set_bad_password_time(sampass, 
+					  cache_entry->bad_password_time, 
 					  PDB_SET);
 	}
 
-	ret = true;
-
-  fn_exit:
-
-	TALLOC_FREE(ctx);
 	SAFE_FREE(cache_entry);
-	return ret;
+	return True;
 }
 
 /**********************************************************************
@@ -1094,13 +938,13 @@
  (Based on init_buffer_from_sam in pdb_tdb.c)
 *********************************************************************/
 
-static bool init_ldap_from_sam (struct ldapsam_privates *ldap_state,
+static BOOL init_ldap_from_sam (struct ldapsam_privates *ldap_state, 
 				LDAPMessage *existing,
 				LDAPMod *** mods, struct samu * sampass,
-				bool (*need_update)(const struct samu *,
+				BOOL (*need_update)(const struct samu *,
 						    enum pdb_elements))
 {
-	char *temp = NULL;
+	pstring temp;
 	uint32 rid;
 
 	if (mods == NULL || sampass == NULL) {
@@ -1110,7 +954,7 @@
 
 	*mods = NULL;
 
-	/*
+	/* 
 	 * took out adding "objectclass: sambaAccount"
 	 * do this on a per-mod basis
 	 */
@@ -1131,35 +975,31 @@
 	if (need_update(sampass, PDB_USERSID)) {
 		fstring sid_string;
 		const DOM_SID *user_sid = pdb_get_user_sid(sampass);
-
+		
 		switch ( ldap_state->schema_ver ) {
 			case SCHEMAVER_SAMBAACCOUNT:
 				if (!sid_peek_check_rid(&ldap_state->domain_sid, user_sid, &rid)) {
 					DEBUG(1, ("init_ldap_from_sam: User's SID (%s) is not for this domain (%s), cannot add to LDAP!\n", 
-						  sid_string_dbg(user_sid),
-						  sid_string_dbg(
-							  &ldap_state->domain_sid)));
+						  sid_string_static(user_sid), 
+						  sid_string_static(&ldap_state->domain_sid)));
 					return False;
 				}
-				if (asprintf(&temp, "%i", rid) < 0) {
-					return false;
-				}
+				slprintf(temp, sizeof(temp) - 1, "%i", rid);
 				smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, existing, mods,
 					get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_USER_RID), 
 					temp);
-				SAFE_FREE(temp);
 				break;
-
+				
 			case SCHEMAVER_SAMBASAMACCOUNT:
 				smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, existing, mods,
 					get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_USER_SID), 
-					sid_to_fstring(sid_string, user_sid));
+					sid_to_string(sid_string, user_sid));				      
 				break;
-
+				
 			default:
 				DEBUG(0,("init_ldap_from_sam: unknown schema version specified\n"));
 				break;
-		}
+		}		
 	}
 
 	/* we don't need to store the primary group RID - so leaving it
@@ -1168,42 +1008,38 @@
 	if (need_update(sampass, PDB_GROUPSID)) {
 		fstring sid_string;
 		const DOM_SID *group_sid = pdb_get_group_sid(sampass);
-
+		
 		switch ( ldap_state->schema_ver ) {
 			case SCHEMAVER_SAMBAACCOUNT:
 				if (!sid_peek_check_rid(&ldap_state->domain_sid, group_sid, &rid)) {
 					DEBUG(1, ("init_ldap_from_sam: User's Primary Group SID (%s) is not for this domain (%s), cannot add to LDAP!\n",
-						  sid_string_dbg(group_sid),
-						  sid_string_dbg(
-							  &ldap_state->domain_sid)));
+						  sid_string_static(group_sid),
+						  sid_string_static(&ldap_state->domain_sid)));
 					return False;
 				}
 
-				if (asprintf(&temp, "%i", rid) < 0) {
-					return false;
-				}
+				slprintf(temp, sizeof(temp) - 1, "%i", rid);
 				smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, existing, mods,
 					get_userattr_key2string(ldap_state->schema_ver, 
 					LDAP_ATTR_PRIMARY_GROUP_RID), temp);
-				SAFE_FREE(temp);
 				break;
-
+				
 			case SCHEMAVER_SAMBASAMACCOUNT:
 				smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, existing, mods,
 					get_userattr_key2string(ldap_state->schema_ver, 
-					LDAP_ATTR_PRIMARY_GROUP_SID), sid_to_fstring(sid_string, group_sid));
+					LDAP_ATTR_PRIMARY_GROUP_SID), sid_to_string(sid_string, group_sid));
 				break;
-
+				
 			default:
 				DEBUG(0,("init_ldap_from_sam: unknown schema version specified\n"));
 				break;
 		}
-
+		
 	}
-
+	
 	/* displayName, cn, and gecos should all be the same
 	 *  most easily accomplished by giving them the same OID
-	 *  gecos isn't set here b/c it should be handled by the
+	 *  gecos isn't set here b/c it should be handled by the 
 	 *  add-user script
 	 *  We change displayName only and fall back to cn if
 	 *  it does not exist.
@@ -1223,17 +1059,17 @@
 		smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, existing, mods,
 			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_USER_WKS), 
 			pdb_get_workstations(sampass));
-
+	
 	if (need_update(sampass, PDB_MUNGEDDIAL))
 		smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, existing, mods,
 			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_MUNGED_DIAL), 
 			pdb_get_munged_dial(sampass));
-
+	
 	if (need_update(sampass, PDB_SMBHOME))
 		smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, existing, mods,
 			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_HOME_PATH), 
 			pdb_get_homedir(sampass));
-
+			
 	if (need_update(sampass, PDB_DRIVE))
 		smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, existing, mods,
 			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_HOME_DRIVE), 
@@ -1249,58 +1085,43 @@
 			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_PROFILE_PATH), 
 			pdb_get_profile_path(sampass));
 
-	if (asprintf(&temp, "%li", pdb_get_logon_time(sampass)) < 0) {
-		return false;
-	}
+	slprintf(temp, sizeof(temp) - 1, "%li", pdb_get_logon_time(sampass));
 	if (need_update(sampass, PDB_LOGONTIME))
 		smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, existing, mods,
 			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_LOGON_TIME), temp);
-	SAFE_FREE(temp);
 
-	if (asprintf(&temp, "%li", pdb_get_logoff_time(sampass)) < 0) {
-		return false;
-	}
+	slprintf(temp, sizeof(temp) - 1, "%li", pdb_get_logoff_time(sampass));
 	if (need_update(sampass, PDB_LOGOFFTIME))
 		smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, existing, mods,
 			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_LOGOFF_TIME), temp);
-	SAFE_FREE(temp);
 
-	if (asprintf(&temp, "%li", pdb_get_kickoff_time(sampass)) < 0) {
-		return false;
-	}
+	slprintf (temp, sizeof (temp) - 1, "%li", pdb_get_kickoff_time(sampass));
 	if (need_update(sampass, PDB_KICKOFFTIME))
 		smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, existing, mods,
 			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_KICKOFF_TIME), temp);
-	SAFE_FREE(temp);
 
-	if (asprintf(&temp, "%li", pdb_get_pass_can_change_time_noncalc(sampass)) < 0) {
-		return false;
-	}
+	slprintf (temp, sizeof (temp) - 1, "%li", pdb_get_pass_can_change_time_noncalc(sampass));
 	if (need_update(sampass, PDB_CANCHANGETIME))
 		smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, existing, mods,
 			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_PWD_CAN_CHANGE), temp);
-	SAFE_FREE(temp);
 
-	if (asprintf(&temp, "%li", pdb_get_pass_must_change_time(sampass)) < 0) {
-		return false;
-	}
+	slprintf (temp, sizeof (temp) - 1, "%li", pdb_get_pass_must_change_time(sampass));
 	if (need_update(sampass, PDB_MUSTCHANGETIME))
 		smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, existing, mods,
 			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_PWD_MUST_CHANGE), temp);
-	SAFE_FREE(temp);
 
+
 	if ((pdb_get_acct_ctrl(sampass)&(ACB_WSTRUST|ACB_SVRTRUST|ACB_DOMTRUST))
 			|| (lp_ldap_passwd_sync()!=LDAP_PASSWD_SYNC_ONLY)) {
 
 		if (need_update(sampass, PDB_LMPASSWD)) {
-			const uchar *lm_pw = pdb_get_lanman_passwd(sampass);
+			const uchar *lm_pw =  pdb_get_lanman_passwd(sampass);
 			if (lm_pw) {
-				char pwstr[34];
-				pdb_sethexpwd(pwstr, lm_pw,
+				pdb_sethexpwd(temp, lm_pw,
 					      pdb_get_acct_ctrl(sampass));
 				smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, existing, mods,
 						 get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_LMPW), 
-						 pwstr);
+						 temp);
 			} else {
 				smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, existing, mods,
 						 get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_LMPW), 
@@ -1308,14 +1129,13 @@
 			}
 		}
 		if (need_update(sampass, PDB_NTPASSWD)) {
-			const uchar *nt_pw = pdb_get_nt_passwd(sampass);
+			const uchar *nt_pw =  pdb_get_nt_passwd(sampass);
 			if (nt_pw) {
-				char pwstr[34];
-				pdb_sethexpwd(pwstr, nt_pw,
+				pdb_sethexpwd(temp, nt_pw,
 					      pdb_get_acct_ctrl(sampass));
 				smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, existing, mods,
 						 get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_NTPW), 
-						 pwstr);
+						 temp);
 			} else {
 				smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, existing, mods,
 						 get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_NTPW), 
@@ -1324,64 +1144,52 @@
 		}
 
 		if (need_update(sampass, PDB_PWHISTORY)) {
-			char *pwstr = NULL;
 			uint32 pwHistLen = 0;
 			pdb_get_account_policy(AP_PASSWORD_HISTORY, &pwHistLen);
-
-			pwstr = SMB_MALLOC_ARRAY(char, 1024);
-			if (!pwstr) {
-				return false;
-			}
 			if (pwHistLen == 0) {
 				/* Remove any password history from the LDAP store. */
-				memset(pwstr, '0', 64); /* NOTE !!!! '0' *NOT '\0' */
-				pwstr[64] = '\0';
+				memset(temp, '0', 64); /* NOTE !!!! '0' *NOT '\0' */
+				temp[64] = '\0';
 			} else {
-				int i;
+				int i; 
 				uint32 currHistLen = 0;
 				const uint8 *pwhist = pdb_get_pw_history(sampass, &currHistLen);
 				if (pwhist != NULL) {
-					/* We can only store (1024-1/64 password history entries. */
-					pwHistLen = MIN(pwHistLen, ((1024-1)/64));
+					/* We can only store (sizeof(pstring)-1)/64 password history entries. */
+					pwHistLen = MIN(pwHistLen, ((sizeof(temp)-1)/64));
 					for (i=0; i< pwHistLen && i < currHistLen; i++) {
 						/* Store the salt. */
-						pdb_sethexpwd(&pwstr[i*64], &pwhist[i*PW_HISTORY_ENTRY_LEN], 0);
+						pdb_sethexpwd(&temp[i*64], &pwhist[i*PW_HISTORY_ENTRY_LEN], 0);
 						/* Followed by the md5 hash of salt + md4 hash */
-						pdb_sethexpwd(&pwstr[(i*64)+32],
+						pdb_sethexpwd(&temp[(i*64)+32],
 							&pwhist[(i*PW_HISTORY_ENTRY_LEN)+PW_HISTORY_SALT_LEN], 0);
-						DEBUG(100, ("pwstr=%s\n", pwstr));
+						DEBUG(100, ("temp=%s\n", temp));
 					}
-				}
+				} 
 			}
 			smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, existing, mods,
 					 get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_PWD_HISTORY), 
-					 pwstr);
-			SAFE_FREE(pwstr);
+					 temp);
 		}
 
 		if (need_update(sampass, PDB_PASSLASTSET)) {
-			if (asprintf(&temp, "%li",
-				pdb_get_pass_last_set_time(sampass)) < 0) {
-				return false;
-			}
+			slprintf (temp, sizeof (temp) - 1, "%li", pdb_get_pass_last_set_time(sampass));
 			smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, existing, mods,
 				get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_PWD_LAST_SET), 
 				temp);
-			SAFE_FREE(temp);
 		}
 	}
 
 	if (need_update(sampass, PDB_HOURS)) {
 		const uint8 *hours = pdb_get_hours(sampass);
 		if (hours) {
-			char hourstr[44];
-			pdb_sethexhours(hourstr, hours);
+			pdb_sethexhours(temp, hours);
 			smbldap_make_mod(ldap_state->smbldap_state->ldap_struct,
 				existing,
 				mods,
 				get_userattr_key2string(ldap_state->schema_ver,
 						LDAP_ATTR_LOGON_HOURS),
-				hourstr);
+				temp);
 		}
 	}
 
@@ -1390,7 +1198,7 @@
 			get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_ACB_INFO), 
 			pdb_encode_acct_ctrl (pdb_get_acct_ctrl(sampass), NEW_PW_FORMAT_SPACE_PADDED_LEN));
 
-	/* password lockout cache:
+	/* password lockout cache: 
 	   - If we are now autolocking or clearing, we write to ldap
 	   - If we are clearing, we delete the cache entry
 	   - If the count is > 0, we update the cache
@@ -1411,29 +1219,23 @@
 		if ((badcount >= pol) || (badcount == 0)) {
 			DEBUG(7, ("making mods to update ldap, count=%u, time=%u\n",
 				(unsigned int)badcount, (unsigned int)badtime));
-			if (asprintf(&temp, "%li", (long)badcount) < 0) {
-				return false;
-			}
+			slprintf (temp, sizeof (temp) - 1, "%li", (long)badcount);
 			smbldap_make_mod(
 				ldap_state->smbldap_state->ldap_struct,
-				existing, mods,
+				existing, mods, 
 				get_userattr_key2string(
-					ldap_state->schema_ver,
+					ldap_state->schema_ver, 
 					LDAP_ATTR_BAD_PASSWORD_COUNT),
 				temp);
-			SAFE_FREE(temp);
 
-			if (asprintf(&temp, "%li", badtime) < 0) {
-				return false;
-			}
+			slprintf (temp, sizeof (temp) - 1, "%li", badtime);
 			smbldap_make_mod(
-				ldap_state->smbldap_state->ldap_struct,
+				ldap_state->smbldap_state->ldap_struct, 
 				existing, mods,
 				get_userattr_key2string(
-					ldap_state->schema_ver,
-					LDAP_ATTR_BAD_PASSWORD_TIME),
+					ldap_state->schema_ver, 
+					LDAP_ATTR_BAD_PASSWORD_TIME), 
 				temp);
-			SAFE_FREE(temp);
 		}
 		if (badcount == 0) {
 			DEBUG(7, ("bad password count is reset, deleting login cache entry for %s\n", pdb_get_nt_username(sampass)));
@@ -1455,6 +1257,60 @@
 }
 
 /**********************************************************************
+ Connect to LDAP server for password enumeration.
+*********************************************************************/
+
+static NTSTATUS ldapsam_setsampwent(struct pdb_methods *my_methods, BOOL update, uint32 acb_mask)
+{
+	struct ldapsam_privates *ldap_state = (struct ldapsam_privates *)my_methods->private_data;
+	int rc;
+	pstring filter, suffix;
+	const char **attr_list;
+	BOOL machine_mask = False, user_mask = False;
+
+	pstr_sprintf( filter, "(&%s%s)", "(uid=%u)", 
+		get_objclass_filter(ldap_state->schema_ver));
+	all_string_sub(filter, "%u", "*", sizeof(pstring));
+
+	machine_mask 	= ((acb_mask != 0) && (acb_mask & (ACB_WSTRUST|ACB_SVRTRUST|ACB_DOMTRUST)));
+	user_mask 	= ((acb_mask != 0) && (acb_mask & ACB_NORMAL));
+
+	if (machine_mask) {
+		pstrcpy(suffix, lp_ldap_machine_suffix());
+	} else if (user_mask) {
+		pstrcpy(suffix, lp_ldap_user_suffix());
+	} else {
+		pstrcpy(suffix, lp_ldap_suffix());
+	}
+
+	DEBUG(10,("ldapsam_setsampwent: LDAP Query for acb_mask 0x%x will use suffix %s\n", 
+		acb_mask, suffix));
+
+	attr_list = get_userattr_list(NULL, ldap_state->schema_ver);
+	rc = smbldap_search(ldap_state->smbldap_state, suffix, LDAP_SCOPE_SUBTREE, filter, 
+			    attr_list, 0, &ldap_state->result);
+	TALLOC_FREE( attr_list );
+
+	if (rc != LDAP_SUCCESS) {
+		DEBUG(0, ("ldapsam_setsampwent: LDAP search failed: %s\n", ldap_err2string(rc)));
+		DEBUG(3, ("ldapsam_setsampwent: Query was: %s, %s\n", suffix, filter));
+		ldap_msgfree(ldap_state->result);
+		ldap_state->result = NULL;
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	DEBUG(2, ("ldapsam_setsampwent: %d entries in the base %s\n",
+		ldap_count_entries(ldap_state->smbldap_state->ldap_struct, 
+		ldap_state->result), suffix));
+
+	ldap_state->entry = ldap_first_entry(ldap_state->smbldap_state->ldap_struct,
+				 ldap_state->result);
+	ldap_state->index = 0;
+
+	return NT_STATUS_OK;
+}
+
+/**********************************************************************
  End enumeration of the LDAP password list.
 *********************************************************************/
 
@@ -1467,6 +1323,32 @@
 	}
 }
 
+/**********************************************************************
+Get the next entry in the LDAP password database.
+*********************************************************************/
+
+static NTSTATUS ldapsam_getsampwent(struct pdb_methods *my_methods,
+				    struct samu *user)
+{
+	NTSTATUS ret = NT_STATUS_UNSUCCESSFUL;
+	struct ldapsam_privates *ldap_state =
+		(struct ldapsam_privates *)my_methods->private_data;
+	BOOL bret = False;
+
+	while (!bret) {
+		if (!ldap_state->entry)
+			return ret;
+		
+		ldap_state->index++;
+		bret = init_sam_from_ldap(ldap_state, user, ldap_state->entry);
+		
+		ldap_state->entry = ldap_next_entry(priv2ld(ldap_state),
+						    ldap_state->entry);	
+	}
+
+	return NT_STATUS_OK;
+}
+
 static void append_attr(TALLOC_CTX *mem_ctx, const char ***attr_list,
 			const char *new_attr)
 {
@@ -1600,6 +1482,7 @@
 	LDAPMessage *entry = NULL;
 	int count;
 	int rc;
+	fstring sid_string;
 
 	rc = ldapsam_get_ldap_user_by_sid(ldap_state, 
 					  sid, &result); 
@@ -1609,14 +1492,13 @@
 	count = ldap_count_entries(ldap_state->smbldap_state->ldap_struct, result);
 	
 	if (count < 1) {
-		DEBUG(4, ("ldapsam_getsampwsid: Unable to locate SID [%s] "
-			  "count=%d\n", sid_string_dbg(sid), count));
+		DEBUG(4, ("ldapsam_getsampwsid: Unable to locate SID [%s] count=%d\n", sid_to_string(sid_string, sid),
+		       count));
 		ldap_msgfree(result);
 		return NT_STATUS_NO_SUCH_USER;
 	}  else if (count > 1) {
-		DEBUG(1, ("ldapsam_getsampwsid: More than one user with SID "
-			  "[%s]. Failing. count=%d\n", sid_string_dbg(sid),
-			  count));
+		DEBUG(1, ("ldapsam_getsampwsid: More than one user with SID [%s]. Failing. count=%d\n", sid_to_string(sid_string, sid),
+		       count));
 		ldap_msgfree(result);
 		return NT_STATUS_NO_SUCH_USER;
 	}
@@ -1647,7 +1529,7 @@
 static NTSTATUS ldapsam_modify_entry(struct pdb_methods *my_methods, 
 				     struct samu *newpwd, char *dn,
 				     LDAPMod **mods, int ldap_op, 
-				     bool (*need_update)(const struct samu *, enum pdb_elements))
+				     BOOL (*need_update)(const struct samu *, enum pdb_elements))
 {
 	struct ldapsam_privates *ldap_state = (struct ldapsam_privates *)my_methods->private_data;
 	int rc;
@@ -1726,16 +1608,10 @@
 			return NT_STATUS_UNSUCCESSFUL;
 		}
 
-		if ((ber_printf (ber, "{") < 0) ||
-		    (ber_printf (ber, "ts", LDAP_TAG_EXOP_MODIFY_PASSWD_ID, utf8_dn) < 0) ||
-		    (ber_printf (ber, "ts", LDAP_TAG_EXOP_MODIFY_PASSWD_NEW, utf8_password) < 0) ||
-		    (ber_printf (ber, "n}") < 0)) {
-			DEBUG(0,("ldapsam_modify_entry: ber_printf returns a value <0\n"));
-                       ber_free(ber,1);
-                       SAFE_FREE(utf8_dn);
-                       SAFE_FREE(utf8_password);
-                       return NT_STATUS_UNSUCCESSFUL;
-		}
+		ber_printf (ber, "{");
+		ber_printf (ber, "ts", LDAP_TAG_EXOP_MODIFY_PASSWD_ID, utf8_dn);
+	        ber_printf (ber, "ts", LDAP_TAG_EXOP_MODIFY_PASSWD_NEW, utf8_password);
+	        ber_printf (ber, "n}");
 
 	        if ((rc = ber_flatten (ber, &bv))<0) {
 			DEBUG(0,("ldapsam_modify_entry: ber_flatten returns a value <0\n"));
@@ -1861,7 +1737,7 @@
  we need LDAP modification.
 *********************************************************************/
 
-static bool element_is_changed(const struct samu *sampass,
+static BOOL element_is_changed(const struct samu *sampass,
 			       enum pdb_elements element)
 {
 	return IS_SAM_CHANGED(sampass, element);
@@ -1964,12 +1840,12 @@
 ***************************************************************************/
 
 static NTSTATUS ldapsam_rename_sam_account(struct pdb_methods *my_methods,
-					   struct samu *old_acct,
+					   struct samu *old_acct, 
 					   const char *newname)
 {
 	const char *oldname;
 	int rc;
-	char *rename_script = NULL;
+	pstring rename_script;
 	fstring oldname_lower, newname_lower;
 
 	if (!old_acct) {
@@ -1980,21 +1856,16 @@
 		DEBUG(0, ("ldapsam_rename_sam_account: newname was NULL!\n"));
 		return NT_STATUS_INVALID_PARAMETER;
 	}
-
+		
 	oldname = pdb_get_username(old_acct);
 
-	/* rename the posix user */
-	rename_script = SMB_STRDUP(lp_renameuser_script());
-	if (rename_script == NULL) {
-		return NT_STATUS_NO_MEMORY;
-	}
+        /* rename the posix user */
+        pstrcpy(rename_script, lp_renameuser_script());
 
-	if (!(*rename_script)) {
-		SAFE_FREE(rename_script);
+	if (!(*rename_script))
 		return NT_STATUS_ACCESS_DENIED;
-	}
 
-	DEBUG (3, ("ldapsam_rename_sam_account: Renaming user %s to %s.\n",
+	DEBUG (3, ("ldapsam_rename_sam_account: Renaming user %s to %s.\n", 
 		   oldname, newname));
 
 	/* We have to allow the account name to end with a '$'.
@@ -2005,26 +1876,15 @@
 	strlower_m( oldname_lower );
 	fstrcpy( newname_lower, newname );
 	strlower_m( newname_lower );
-	rename_script = realloc_string_sub2(rename_script,
-					"%unew",
-					newname_lower,
-					true,
-					true);
-	if (rename_script) {
-		return NT_STATUS_NO_MEMORY;
-	}
-	rename_script = realloc_string_sub2(rename_script,
-					"%uold",
-					oldname_lower,
-					true,
-					true);
+	string_sub2(rename_script, "%unew", newname_lower, sizeof(pstring), 
+		    True, False, True);
+	string_sub2(rename_script, "%uold", oldname_lower, sizeof(pstring), 
+		    True, False, True);
 	rc = smbrun(rename_script, NULL);
 
-	DEBUG(rc ? 0 : 3,("Running the command `%s' gave %d\n",
+	DEBUG(rc ? 0 : 3,("Running the command `%s' gave %d\n", 
 			  rename_script, rc));
 
-	SAFE_FREE(rename_script);
-
 	if (rc == 0) {
 		smb_nscd_flush_user_cache();
 	}
@@ -2040,7 +1900,7 @@
  we need LDAP modification.
  *********************************************************************/
 
-static bool element_is_set_or_changed(const struct samu *sampass,
+static BOOL element_is_set_or_changed(const struct samu *sampass,
 				      enum pdb_elements element)
 {
 	return (IS_SAM_SET(sampass, element) ||
@@ -2058,161 +1918,148 @@
 	int rc;
 	LDAPMessage 	*result = NULL;
 	LDAPMessage 	*entry  = NULL;
+	pstring 	dn;
 	LDAPMod 	**mods = NULL;
 	int		ldap_op = LDAP_MOD_REPLACE;
 	uint32		num_result;
 	const char	**attr_list;
-	char *escape_user = NULL;
+	char 		*escape_user;
 	const char 	*username = pdb_get_username(newpwd);
 	const DOM_SID 	*sid = pdb_get_user_sid(newpwd);
-	char *filter = NULL;
-	char *dn = NULL;
-	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
-	TALLOC_CTX *ctx = talloc_init("ldapsam_add_sam_account");
+	pstring		filter;
+	fstring         sid_string;
 
-	if (!ctx) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
 	if (!username || !*username) {
 		DEBUG(0, ("ldapsam_add_sam_account: Cannot add user without a username!\n"));
-		status = NT_STATUS_INVALID_PARAMETER;
-		goto fn_exit;
+		return NT_STATUS_INVALID_PARAMETER;
 	}
 
 	/* free this list after the second search or in case we exit on failure */
-	attr_list = get_userattr_list(ctx, ldap_state->schema_ver);
+	attr_list = get_userattr_list(NULL, ldap_state->schema_ver);
 
 	rc = ldapsam_search_suffix_by_name (ldap_state, username, &result, attr_list);
 
 	if (rc != LDAP_SUCCESS) {
-		goto fn_exit;
+		TALLOC_FREE( attr_list );
+		return NT_STATUS_UNSUCCESSFUL;
 	}
 
 	if (ldap_count_entries(ldap_state->smbldap_state->ldap_struct, result) != 0) {
 		DEBUG(0,("ldapsam_add_sam_account: User '%s' already in the base, with samba attributes\n", 
 			 username));
-		goto fn_exit;
+		ldap_msgfree(result);
+		TALLOC_FREE( attr_list );
+		return NT_STATUS_UNSUCCESSFUL;
 	}
 	ldap_msgfree(result);
 	result = NULL;
 
 	if (element_is_set_or_changed(newpwd, PDB_USERSID)) {
-		rc = ldapsam_get_ldap_user_by_sid(ldap_state,
-						  sid, &result);
+		rc = ldapsam_get_ldap_user_by_sid(ldap_state, 
+						  sid, &result); 
 		if (rc == LDAP_SUCCESS) {
 			if (ldap_count_entries(ldap_state->smbldap_state->ldap_struct, result) != 0) {
-				DEBUG(0,("ldapsam_add_sam_account: SID '%s' "
-					 "already in the base, with samba "
-					 "attributes\n", sid_string_dbg(sid)));
-				goto fn_exit;
+				DEBUG(0,("ldapsam_add_sam_account: SID '%s' already in the base, with samba attributes\n", 
+					 sid_to_string(sid_string, sid)));
+				TALLOC_FREE( attr_list );
+				ldap_msgfree(result);
+				return NT_STATUS_UNSUCCESSFUL;
 			}
 			ldap_msgfree(result);
-			result = NULL;
 		}
 	}
 
 	/* does the entry already exist but without a samba attributes?
 	   we need to return the samba attributes here */
-
+	   
 	escape_user = escape_ldap_string_alloc( username );
-	filter = talloc_strdup(attr_list, "(uid=%u)");
-	if (!filter) {
-		status = NT_STATUS_NO_MEMORY;
-		goto fn_exit;
-	}
-	filter = talloc_all_string_sub(attr_list, filter, "%u", escape_user);
-	if (!filter) {
-		status = NT_STATUS_NO_MEMORY;
-		goto fn_exit;
-	}
-	SAFE_FREE(escape_user);
+	pstrcpy( filter, "(uid=%u)" );
+	all_string_sub( filter, "%u", escape_user, sizeof(filter) );
+	SAFE_FREE( escape_user );
 
-	rc = smbldap_search_suffix(ldap_state->smbldap_state,
+	rc = smbldap_search_suffix(ldap_state->smbldap_state, 
 				   filter, attr_list, &result);
 	if ( rc != LDAP_SUCCESS ) {
-		goto fn_exit;
+		TALLOC_FREE( attr_list );
+		return NT_STATUS_UNSUCCESSFUL;
 	}
 
 	num_result = ldap_count_entries(ldap_state->smbldap_state->ldap_struct, result);
-
+	
 	if (num_result > 1) {
 		DEBUG (0, ("ldapsam_add_sam_account: More than one user with that uid exists: bailing out!\n"));
-		goto fn_exit;
+		TALLOC_FREE( attr_list );
+		ldap_msgfree(result);
+		return NT_STATUS_UNSUCCESSFUL;
 	}
-
+	
 	/* Check if we need to update an existing entry */
 	if (num_result == 1) {
 		char *tmp;
-
+		
 		DEBUG(3,("ldapsam_add_sam_account: User exists without samba attributes: adding them\n"));
 		ldap_op = LDAP_MOD_REPLACE;
 		entry = ldap_first_entry (ldap_state->smbldap_state->ldap_struct, result);
-		tmp = smbldap_get_dn(ldap_state->smbldap_state->ldap_struct, entry);
+		tmp = smbldap_get_dn (ldap_state->smbldap_state->ldap_struct, entry);
 		if (!tmp) {
-			goto fn_exit;
+			TALLOC_FREE( attr_list );
+			ldap_msgfree(result);
+			return NT_STATUS_UNSUCCESSFUL;
 		}
-		dn = talloc_asprintf(ctx, "%s", tmp);
+		slprintf (dn, sizeof (dn) - 1, "%s", tmp);
 		SAFE_FREE(tmp);
-		if (!dn) {
-			status = NT_STATUS_NO_MEMORY;
-			goto fn_exit;
-		}
 
 	} else if (ldap_state->schema_ver == SCHEMAVER_SAMBASAMACCOUNT) {
 
 		/* There might be a SID for this account already - say an idmap entry */
 
-		filter = talloc_asprintf(ctx,
-				"(&(%s=%s)(|(objectClass=%s)(objectClass=%s)))",
-				 get_userattr_key2string(ldap_state->schema_ver,
-					 LDAP_ATTR_USER_SID),
-				 sid_string_talloc(ctx, sid),
-				 LDAP_OBJ_IDMAP_ENTRY,
-				 LDAP_OBJ_SID_ENTRY);
-		if (!filter) {
-			status = NT_STATUS_NO_MEMORY;
-			goto fn_exit;
-		}
-
+		pstr_sprintf(filter, "(&(%s=%s)(|(objectClass=%s)(objectClass=%s)))", 
+			 get_userattr_key2string(ldap_state->schema_ver, LDAP_ATTR_USER_SID),
+			 sid_to_string(sid_string, sid),
+			 LDAP_OBJ_IDMAP_ENTRY,
+			 LDAP_OBJ_SID_ENTRY);
+		
 		/* free old result before doing a new search */
 		if (result != NULL) {
 			ldap_msgfree(result);
 			result = NULL;
 		}
-		rc = smbldap_search_suffix(ldap_state->smbldap_state,
+		rc = smbldap_search_suffix(ldap_state->smbldap_state, 
 					   filter, attr_list, &result);
-
+			
 		if ( rc != LDAP_SUCCESS ) {
-			goto fn_exit;
+			TALLOC_FREE( attr_list );
+			return NT_STATUS_UNSUCCESSFUL;
 		}
-
+		
 		num_result = ldap_count_entries(ldap_state->smbldap_state->ldap_struct, result);
-
+		
 		if (num_result > 1) {
 			DEBUG (0, ("ldapsam_add_sam_account: More than one user with specified Sid exists: bailing out!\n"));
-			goto fn_exit;
+			TALLOC_FREE( attr_list );
+			ldap_msgfree(result);
+			return NT_STATUS_UNSUCCESSFUL;
 		}
-
+		
 		/* Check if we need to update an existing entry */
 		if (num_result == 1) {
 			char *tmp;
-
+			
 			DEBUG(3,("ldapsam_add_sam_account: User exists without samba attributes: adding them\n"));
 			ldap_op = LDAP_MOD_REPLACE;
 			entry = ldap_first_entry (ldap_state->smbldap_state->ldap_struct, result);
 			tmp = smbldap_get_dn (ldap_state->smbldap_state->ldap_struct, entry);
 			if (!tmp) {
-				goto fn_exit;
+				TALLOC_FREE( attr_list );
+				ldap_msgfree(result);
+				return NT_STATUS_UNSUCCESSFUL;
 			}
-			dn = talloc_asprintf(ctx, "%s", tmp);
+			slprintf (dn, sizeof (dn) - 1, "%s", tmp);
 			SAFE_FREE(tmp);
-			if (!dn) {
-				status = NT_STATUS_NO_MEMORY;
-				goto fn_exit;
-			}
 		}
 	}
+	
+	TALLOC_FREE( attr_list );
 
 	if (num_result == 0) {
 		char *escape_username;
@@ -2222,41 +2069,34 @@
 
 		escape_username = escape_rdn_val_string_alloc(username);
 		if (!escape_username) {
-			status = NT_STATUS_NO_MEMORY;
-			goto fn_exit;
+			DEBUG(0, ("Out of memory!\n"));
+			ldap_msgfree(result);
+			return NT_STATUS_NO_MEMORY;
 		}
 
 		if (username[strlen(username)-1] == '$') {
-			dn = talloc_asprintf(ctx,
-					"uid=%s,%s",
-					escape_username,
-					lp_ldap_machine_suffix());
+			slprintf (dn, sizeof (dn) - 1, "uid=%s,%s", escape_username, lp_ldap_machine_suffix ());
 		} else {
-			dn = talloc_asprintf(ctx,
-					"uid=%s,%s",
-					escape_username,
-					lp_ldap_user_suffix());
+			slprintf (dn, sizeof (dn) - 1, "uid=%s,%s", escape_username, lp_ldap_user_suffix ());
 		}
 
 		SAFE_FREE(escape_username);
-		if (!dn) {
-			status = NT_STATUS_NO_MEMORY;
-			goto fn_exit;
-		}
 	}
 
 	if (!init_ldap_from_sam(ldap_state, entry, &mods, newpwd,
 				element_is_set_or_changed)) {
 		DEBUG(0, ("ldapsam_add_sam_account: init_ldap_from_sam failed!\n"));
-		if (mods != NULL) {
-			ldap_mods_free(mods, true);
-		}
-		goto fn_exit;
+		ldap_msgfree(result);
+		if (mods != NULL)
+			ldap_mods_free(mods,True);
+		return NT_STATUS_UNSUCCESSFUL;		
 	}
+	
+	ldap_msgfree(result);
 
 	if (mods == NULL) {
 		DEBUG(0,("ldapsam_add_sam_account: mods is empty: nothing to add for user: %s\n",pdb_get_username(newpwd)));
-		goto fn_exit;
+		return NT_STATUS_UNSUCCESSFUL;
 	}
 	switch ( ldap_state->schema_ver ) {
 		case SCHEMAVER_SAMBAACCOUNT:
@@ -2274,23 +2114,14 @@
 	if (!NT_STATUS_IS_OK(ret)) {
 		DEBUG(0,("ldapsam_add_sam_account: failed to modify/add user with uid = %s (dn = %s)\n",
 			 pdb_get_username(newpwd),dn));
-		ldap_mods_free(mods, true);
-		goto fn_exit;
+		ldap_mods_free(mods, True);
+		return ret;
 	}
 
 	DEBUG(2,("ldapsam_add_sam_account: added: uid == %s in the LDAP database\n", pdb_get_username(newpwd)));
-	ldap_mods_free(mods, true);
-
-	status = NT_STATUS_OK;
-
-  fn_exit:
-
-	TALLOC_FREE(ctx);
-	SAFE_FREE(escape_user);
-	if (result) {
-		ldap_msgfree(result);
-	}
-	return status;
+	ldap_mods_free(mods, True);
+	
+	return NT_STATUS_OK;
 }
 
 /**********************************************************************
@@ -2305,7 +2136,7 @@
 	const char **attr_list;
 
 	attr_list = get_attr_list(NULL, groupmap_attr_list);
-	rc = smbldap_search(ldap_state->smbldap_state,
+	rc = smbldap_search(ldap_state->smbldap_state, 
 			    lp_ldap_group_suffix (), scope,
 			    filter, attr_list, 0, result);
 	TALLOC_FREE(attr_list);
@@ -2316,122 +2147,77 @@
 /**********************************************************************
  *********************************************************************/
 
-static bool init_group_from_ldap(struct ldapsam_privates *ldap_state,
+static BOOL init_group_from_ldap(struct ldapsam_privates *ldap_state,
 				 GROUP_MAP *map, LDAPMessage *entry)
 {
-	char *temp = NULL;
-	TALLOC_CTX *ctx = talloc_init("init_group_from_ldap");
+	pstring temp;
 
 	if (ldap_state == NULL || map == NULL || entry == NULL ||
 			ldap_state->smbldap_state->ldap_struct == NULL) {
 		DEBUG(0, ("init_group_from_ldap: NULL parameters found!\n"));
-		TALLOC_FREE(ctx);
-		return false;
+		return False;
 	}
 
-	temp = smbldap_talloc_single_attribute(
-			ldap_state->smbldap_state->ldap_struct,
-			entry,
-			get_attr_key2string(groupmap_attr_list,
-				LDAP_ATTR_GIDNUMBER),
-			ctx);
-	if (!temp) {
+	if (!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry, 
+			get_attr_key2string(groupmap_attr_list, LDAP_ATTR_GIDNUMBER), temp)) {
 		DEBUG(0, ("init_group_from_ldap: Mandatory attribute %s not found\n", 
 			get_attr_key2string( groupmap_attr_list, LDAP_ATTR_GIDNUMBER)));
-		TALLOC_FREE(ctx);
-		return false;
+		return False;
 	}
 	DEBUG(2, ("init_group_from_ldap: Entry found for group: %s\n", temp));
 
 	map->gid = (gid_t)atol(temp);
 
-	TALLOC_FREE(temp);
-	temp = smbldap_talloc_single_attribute(
-			ldap_state->smbldap_state->ldap_struct,
-			entry,
-			get_attr_key2string(groupmap_attr_list,
-				LDAP_ATTR_GROUP_SID),
-			ctx);
-	if (!temp) {
+	if (!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry, 
+			get_attr_key2string( groupmap_attr_list, LDAP_ATTR_GROUP_SID), temp)) {
 		DEBUG(0, ("init_group_from_ldap: Mandatory attribute %s not found\n",
 			get_attr_key2string( groupmap_attr_list, LDAP_ATTR_GROUP_SID)));
-		TALLOC_FREE(ctx);
-		return false;
+		return False;
 	}
-
+	
 	if (!string_to_sid(&map->sid, temp)) {
 		DEBUG(1, ("SID string [%s] could not be read as a valid SID\n", temp));
-		TALLOC_FREE(ctx);
-		return false;
+		return False;
 	}
 
-	TALLOC_FREE(temp);
-	temp = smbldap_talloc_single_attribute(
-			ldap_state->smbldap_state->ldap_struct,
-			entry,
-			get_attr_key2string(groupmap_attr_list,
-				LDAP_ATTR_GROUP_TYPE),
-			ctx);
-	if (!temp) {
+	if (!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry, 
+			get_attr_key2string( groupmap_attr_list, LDAP_ATTR_GROUP_TYPE), temp)) {
 		DEBUG(0, ("init_group_from_ldap: Mandatory attribute %s not found\n",
 			get_attr_key2string( groupmap_attr_list, LDAP_ATTR_GROUP_TYPE)));
-		TALLOC_FREE(ctx);
-		return false;
+		return False;
 	}
 	map->sid_name_use = (enum lsa_SidType)atol(temp);
 
 	if ((map->sid_name_use < SID_NAME_USER) ||
 			(map->sid_name_use > SID_NAME_UNKNOWN)) {
 		DEBUG(0, ("init_group_from_ldap: Unknown Group type: %d\n", map->sid_name_use));
-		TALLOC_FREE(ctx);
-		return false;
+		return False;
 	}
 
-	TALLOC_FREE(temp);
-	temp = smbldap_talloc_single_attribute(
-			ldap_state->smbldap_state->ldap_struct,
-			entry,
-			get_attr_key2string(groupmap_attr_list,
-				LDAP_ATTR_DISPLAY_NAME),
-			ctx);
-	if (!temp) {
-		temp = smbldap_talloc_single_attribute(
-				ldap_state->smbldap_state->ldap_struct,
-				entry,
-				get_attr_key2string(groupmap_attr_list,
-					LDAP_ATTR_CN),
-				ctx);
-		if (!temp) {
+	if (!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry, 
+			get_attr_key2string( groupmap_attr_list, LDAP_ATTR_DISPLAY_NAME), temp)) {
+		temp[0] = '\0';
+		if (!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry, 
+			get_attr_key2string( groupmap_attr_list, LDAP_ATTR_CN), temp)) 
+		{
 			DEBUG(0, ("init_group_from_ldap: Attributes cn not found either \
 for gidNumber(%lu)\n",(unsigned long)map->gid));
-			TALLOC_FREE(ctx);
-			return false;
+			return False;
 		}
 	}
 	fstrcpy(map->nt_name, temp);
 
-	TALLOC_FREE(temp);
-	temp = smbldap_talloc_single_attribute(
-			ldap_state->smbldap_state->ldap_struct,
-			entry,
-			get_attr_key2string(groupmap_attr_list,
-				LDAP_ATTR_DESC),
-			ctx);
-	if (!temp) {
-		temp = talloc_strdup(ctx, "");
-		if (!temp) {
-			TALLOC_FREE(ctx);
-			return false;
-		}
+	if (!smbldap_get_single_pstring(ldap_state->smbldap_state->ldap_struct, entry, 
+			get_attr_key2string( groupmap_attr_list, LDAP_ATTR_DESC), temp)) {
+		temp[0] = '\0';
 	}
 	fstrcpy(map->comment, temp);
 
-	if (lp_parm_bool(-1, "ldapsam", "trusted", false)) {
+	if (lp_parm_bool(-1, "ldapsam", "trusted", False)) {
 		store_gid_sid_cache(&map->sid, map->gid);
 	}
 
-	TALLOC_FREE(ctx);
-	return true;
+	return True;
 }
 
 /**********************************************************************
@@ -2455,8 +2241,7 @@
 	count = ldap_count_entries(priv2ld(ldap_state), result);
 
 	if (count < 1) {
-		DEBUG(4, ("ldapsam_getgroup: Did not find group, filter was "
-			  "%s\n", filter));
+		DEBUG(4, ("ldapsam_getgroup: Did not find group\n"));
 		ldap_msgfree(result);
 		return NT_STATUS_NO_SUCH_GROUP;
 	}
@@ -2492,20 +2277,14 @@
 static NTSTATUS ldapsam_getgrsid(struct pdb_methods *methods, GROUP_MAP *map,
 				 DOM_SID sid)
 {
-	char *filter = NULL;
-	NTSTATUS status;
-	fstring tmp;
+	pstring filter;
 
-	if (asprintf(&filter, "(&(objectClass=%s)(%s=%s))",
-		LDAP_OBJ_GROUPMAP,
+	pstr_sprintf(filter, "(&(objectClass=%s)(%s=%s))",
+		LDAP_OBJ_GROUPMAP, 
 		get_attr_key2string(groupmap_attr_list, LDAP_ATTR_GROUP_SID),
-		sid_to_fstring(tmp, &sid)) < 0) {
-		return NT_STATUS_NO_MEMORY;
-	}
+		sid_string_static(&sid));
 
-	status = ldapsam_getgroup(methods, filter, map);
-	SAFE_FREE(filter);
-	return status;
+	return ldapsam_getgroup(methods, filter, map);
 }
 
 /**********************************************************************
@@ -2514,19 +2293,14 @@
 static NTSTATUS ldapsam_getgrgid(struct pdb_methods *methods, GROUP_MAP *map,
 				 gid_t gid)
 {
-	char *filter = NULL;
-	NTSTATUS status;
+	pstring filter;
 
-	if (asprintf(&filter, "(&(objectClass=%s)(%s=%lu))",
+	pstr_sprintf(filter, "(&(objectClass=%s)(%s=%lu))",
 		LDAP_OBJ_GROUPMAP,
 		get_attr_key2string(groupmap_attr_list, LDAP_ATTR_GIDNUMBER),
-		(unsigned long)gid) < 0) {
-		return NT_STATUS_NO_MEMORY;
-	}
+		(unsigned long)gid);
 
-	status = ldapsam_getgroup(methods, filter, map);
-	SAFE_FREE(filter);
-	return status;
+	return ldapsam_getgroup(methods, filter, map);
 }
 
 /**********************************************************************
@@ -2535,30 +2309,24 @@
 static NTSTATUS ldapsam_getgrnam(struct pdb_methods *methods, GROUP_MAP *map,
 				 const char *name)
 {
-	char *filter = NULL;
+	pstring filter;
 	char *escape_name = escape_ldap_string_alloc(name);
-	NTSTATUS status;
 
 	if (!escape_name) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	if (asprintf(&filter, "(&(objectClass=%s)(|(%s=%s)(%s=%s)))",
+	pstr_sprintf(filter, "(&(objectClass=%s)(|(%s=%s)(%s=%s)))",
 		LDAP_OBJ_GROUPMAP,
 		get_attr_key2string(groupmap_attr_list, LDAP_ATTR_DISPLAY_NAME), escape_name,
-		get_attr_key2string(groupmap_attr_list, LDAP_ATTR_CN),
-		escape_name) < 0) {
-		SAFE_FREE(escape_name);
-		return NT_STATUS_NO_MEMORY;
-	}
+		get_attr_key2string(groupmap_attr_list, LDAP_ATTR_CN), escape_name);
 
 	SAFE_FREE(escape_name);
-	status = ldapsam_getgroup(methods, filter, map);
-	SAFE_FREE(filter);
-	return status;
+
+	return ldapsam_getgroup(methods, filter, map);
 }
 
-static bool ldapsam_extract_rid_from_entry(LDAP *ldap_struct,
+static BOOL ldapsam_extract_rid_from_entry(LDAP *ldap_struct,
 					   LDAPMessage *entry,
 					   const DOM_SID *domain_sid,
 					   uint32 *rid)
@@ -2579,7 +2347,7 @@
 
 	if (sid_compare_domain(&sid, domain_sid) != 0) {
 		DEBUG(10, ("SID %s is not in expected domain %s\n",
-			   str, sid_string_dbg(domain_sid)));
+			   str, sid_string_static(domain_sid)));
 		return False;
 	}
 
@@ -2620,7 +2388,7 @@
 				 "(sambaSID=%s))",
 				 LDAP_OBJ_POSIXGROUP,
 				 LDAP_OBJ_GROUPMAP,
-				 sid_string_talloc(mem_ctx, group));
+				 sid_string_static(group));
 	if (filter == NULL) {
 		ret = NT_STATUS_NO_MEMORY;
 		goto done;
@@ -2639,7 +2407,7 @@
 
 	if (count > 1) {
 		DEBUG(1, ("Found more than one groupmap entry for %s\n",
-			  sid_string_dbg(group)));
+			  sid_string_static(group)));
 		ret = NT_STATUS_INTERNAL_DB_CORRUPTION;
 		goto done;
 	}
@@ -2679,7 +2447,7 @@
 				goto done;
 			}
 			
-			filter = talloc_asprintf_append_buffer(filter, "(uid=%s)", escape_memberuid);
+			filter = talloc_asprintf_append(filter, "(uid=%s)", escape_memberuid);
 			if (filter == NULL) {
 				SAFE_FREE(escape_memberuid);
 				ret = NT_STATUS_NO_MEMORY;
@@ -2689,7 +2457,7 @@
 			SAFE_FREE(escape_memberuid);
 		}
 
-		filter = talloc_asprintf_append_buffer(filter, "))");
+		filter = talloc_asprintf_append(filter, "))");
 		if (filter == NULL) {
 			ret = NT_STATUS_NO_MEMORY;
 			goto done;
@@ -2898,9 +2666,8 @@
 
 	/* This sid will be replaced later */
 
-	ret = add_sid_to_array_unique(mem_ctx, &global_sid_NULL, pp_sids,
-				      &num_sids);
-	if (!NT_STATUS_IS_OK(ret)) {
+	if (!add_sid_to_array_unique(mem_ctx, &global_sid_NULL, pp_sids, &num_sids)) {
+		ret = NT_STATUS_NO_MEMORY;
 		goto done;
 	}
 
@@ -2939,9 +2706,9 @@
 				ret = NT_STATUS_NO_MEMORY;
 				goto done;
 			}
-			ret = add_sid_to_array_unique(mem_ctx, &sid, pp_sids,
-						      &num_sids);
-			if (!NT_STATUS_IS_OK(ret)) {
+			if (!add_sid_to_array_unique(mem_ctx, &sid, pp_sids,
+						&num_sids)) {
+				ret = NT_STATUS_NO_MEMORY;
 				goto done;
 			}
 		}
@@ -3003,7 +2770,7 @@
 	smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectClass",
 			"sambaGroupMapping");
 	smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, entry, &mods, "sambaSid",
-			 sid_string_talloc(mem_ctx, &map->sid));
+			 sid_string_static(&map->sid));
 	smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, entry, &mods, "sambaGroupType",
 			 talloc_asprintf(mem_ctx, "%d", map->sid_name_use));
 	smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, entry, &mods, "displayName",
@@ -3045,7 +2812,7 @@
 	}
 
 	filter = talloc_asprintf(mem_ctx, "(sambaSid=%s)",
-				 sid_string_talloc(mem_ctx, &map->sid));
+				 sid_string_static(&map->sid));
 	if (filter == NULL) {
 		result = NT_STATUS_NO_MEMORY;
 		goto done;
@@ -3059,7 +2826,8 @@
 	    (ldap_count_entries(ldap_state->smbldap_state->ldap_struct, msg) > 0)) {
 
 		DEBUG(3, ("SID %s already present in LDAP, refusing to add "
-			  "group mapping entry\n", sid_string_dbg(&map->sid)));
+			  "group mapping entry\n",
+			  sid_string_static(&map->sid)));
 		result = NT_STATUS_GROUP_EXISTS;
 		goto done;
 	}
@@ -3078,7 +2846,7 @@
 			&& !sid_check_is_in_builtin(&map->sid) ) 
 		{
 			DEBUG(3, ("Refusing to map sid %s as an alias, not in our domain\n",
-				  sid_string_dbg(&map->sid)));
+				  sid_string_static(&map->sid)));
 			result = NT_STATUS_INVALID_PARAMETER;
 			goto done;
 		}
@@ -3102,7 +2870,7 @@
 
 	if (pdb_gid_to_sid(map->gid, &sid)) {
 		DEBUG(3, ("Gid %d is already mapped to SID %s, refusing to "
-			  "add\n", map->gid, sid_string_dbg(&sid)));
+			  "add\n", map->gid, sid_string_static(&sid)));
 		result = NT_STATUS_GROUP_EXISTS;
 		goto done;
 	}
@@ -3111,7 +2879,7 @@
 	 * the best we can get out of LDAP. */
 
 	dn = talloc_asprintf(mem_ctx, "sambaSid=%s,%s",
-			     sid_string_talloc(mem_ctx, &map->sid),
+			     sid_string_static(&map->sid),
 			     lp_ldap_group_suffix());
 	if (dn == NULL) {
 		result = NT_STATUS_NO_MEMORY;
@@ -3126,7 +2894,7 @@
 			 "sambaGroupMapping");
 
 	smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, NULL, &mods, "sambaSid",
-			 sid_string_talloc(mem_ctx, &map->sid));
+			 sid_string_static(&map->sid));
 	smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, NULL, &mods, "sambaGroupType",
 			 talloc_asprintf(mem_ctx, "%d", map->sid_name_use));
 	smbldap_make_mod(ldap_state->smbldap_state->ldap_struct, NULL, &mods, "displayName",
@@ -3179,8 +2947,8 @@
 				 "(sambaSid=%s)(gidNumber=%u)"
 				 "(sambaGroupType=%d))",
 				 LDAP_OBJ_GROUPMAP,
-				 sid_string_talloc(mem_ctx, &map->sid),
-				 map->gid, map->sid_name_use);
+				 sid_string_static(&map->sid), map->gid,
+				 map->sid_name_use);
 	if (filter == NULL) {
 		result = NT_STATUS_NO_MEMORY;
 		goto done;
@@ -3258,7 +3026,7 @@
 
 	filter = talloc_asprintf(mem_ctx, "(&(objectClass=%s)(%s=%s))",
 				 LDAP_OBJ_GROUPMAP, LDAP_ATTRIBUTE_SID,
-				 sid_string_talloc(mem_ctx, &sid));
+				 sid_string_static(&sid));
 	if (filter == NULL) {
 		result = NT_STATUS_NO_MEMORY;
 		goto done;
@@ -3319,18 +3087,15 @@
  *********************************************************************/
 
 static NTSTATUS ldapsam_setsamgrent(struct pdb_methods *my_methods,
-				    bool update)
+				    BOOL update)
 {
 	struct ldapsam_privates *ldap_state =
 		(struct ldapsam_privates *)my_methods->private_data;
-	char *filter = NULL;
+	fstring filter;
 	int rc;
 	const char **attr_list;
 
-	filter = talloc_asprintf(NULL, "(objectclass=%s)", LDAP_OBJ_GROUPMAP);
-	if (!filter) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	pstr_sprintf( filter, "(objectclass=%s)", LDAP_OBJ_GROUPMAP);
 	attr_list = get_attr_list( NULL, groupmap_attr_list );
 	rc = smbldap_search(ldap_state->smbldap_state, lp_ldap_group_suffix(),
 			    LDAP_SCOPE_SUBTREE, filter,
@@ -3344,12 +3109,9 @@
 			  lp_ldap_group_suffix(), filter));
 		ldap_msgfree(ldap_state->result);
 		ldap_state->result = NULL;
-		TALLOC_FREE(filter);
 		return NT_STATUS_UNSUCCESSFUL;
 	}
 
-	TALLOC_FREE(filter);
-
 	DEBUG(2, ("ldapsam_setsamgrent: %d entries in the base!\n",
 		  ldap_count_entries(ldap_state->smbldap_state->ldap_struct,
 				     ldap_state->result)));
@@ -3379,7 +3141,7 @@
 	NTSTATUS ret = NT_STATUS_UNSUCCESSFUL;
 	struct ldapsam_privates *ldap_state =
 		(struct ldapsam_privates *)my_methods->private_data;
-	bool bret = False;
+	BOOL bret = False;
 
 	while (!bret) {
 		if (!ldap_state->entry)
@@ -3404,7 +3166,7 @@
 					   const DOM_SID *domsid, enum lsa_SidType sid_name_use,
 					   GROUP_MAP **pp_rmap,
 					   size_t *p_num_entries,
-					   bool unix_only)
+					   BOOL unix_only)
 {
 	GROUP_MAP map;
 	size_t entries = 0;
@@ -3457,16 +3219,15 @@
 {
 	struct ldapsam_privates *ldap_state =
 		(struct ldapsam_privates *)methods->private_data;
-	char *dn = NULL;
+	char *dn;
 	LDAPMessage *result = NULL;
 	LDAPMessage *entry = NULL;
 	int count;
 	LDAPMod **mods = NULL;
 	int rc;
 	enum lsa_SidType type = SID_NAME_USE_NONE;
-	fstring tmp;
 
-	char *filter = NULL;
+	pstring filter;
 
 	if (sid_check_is_in_builtin(alias)) {
 		type = SID_NAME_ALIAS;
@@ -3478,22 +3239,18 @@
 
 	if (type == SID_NAME_USE_NONE) {
 		DEBUG(5, ("SID %s is neither in builtin nor in our domain!\n",
-			  sid_string_dbg(alias)));
+			  sid_string_static(alias)));
 		return NT_STATUS_NO_SUCH_ALIAS;
 	}
 
-	if (asprintf(&filter,
+	pstr_sprintf(filter,
 		     "(&(objectClass=%s)(sambaSid=%s)(sambaGroupType=%d))",
-		     LDAP_OBJ_GROUPMAP, sid_to_fstring(tmp, alias),
-		     type) < 0) {
-		return NT_STATUS_NO_MEMORY;
-	}
+		     LDAP_OBJ_GROUPMAP, sid_string_static(alias),
+		     type);
 
 	if (ldapsam_search_one_group(ldap_state, filter,
-				     &result) != LDAP_SUCCESS) {
-		SAFE_FREE(filter);
+				     &result) != LDAP_SUCCESS)
 		return NT_STATUS_NO_SUCH_ALIAS;
-	}
 
 	count = ldap_count_entries(ldap_state->smbldap_state->ldap_struct,
 				   result);
@@ -3501,7 +3258,6 @@
 	if (count < 1) {
 		DEBUG(4, ("ldapsam_modify_aliasmem: Did not find alias\n"));
 		ldap_msgfree(result);
-		SAFE_FREE(filter);
 		return NT_STATUS_NO_SUCH_ALIAS;
 	}
 
@@ -3509,12 +3265,9 @@
 		DEBUG(1, ("ldapsam_modify_aliasmem: Duplicate entries for "
 			  "filter %s: count=%d\n", filter, count));
 		ldap_msgfree(result);
-		SAFE_FREE(filter);
 		return NT_STATUS_NO_SUCH_ALIAS;
 	}
 
-	SAFE_FREE(filter);
-
 	entry = ldap_first_entry(ldap_state->smbldap_state->ldap_struct,
 				 result);
 
@@ -3532,7 +3285,7 @@
 	smbldap_set_mod(&mods, modop,
 			get_attr_key2string(groupmap_attr_list,
 					    LDAP_ATTR_SID_LIST),
-			sid_to_fstring(tmp, member));
+			sid_string_static(member));
 
 	rc = smbldap_modify(ldap_state->smbldap_state, dn, mods);
 
@@ -3580,12 +3333,11 @@
 	LDAPMessage *result = NULL;
 	LDAPMessage *entry = NULL;
 	int count;
-	char **values = NULL;
+	char **values;
 	int i;
-	char *filter = NULL;
+	pstring filter;
 	size_t num_members = 0;
 	enum lsa_SidType type = SID_NAME_USE_NONE;
-	fstring tmp;
 
 	*pp_members = NULL;
 	*p_num_members = 0;
@@ -3600,22 +3352,18 @@
 
 	if (type == SID_NAME_USE_NONE) {
 		DEBUG(5, ("SID %s is neither in builtin nor in our domain!\n",
-			  sid_string_dbg(alias)));
+			  sid_string_static(alias)));
 		return NT_STATUS_NO_SUCH_ALIAS;
 	}
 
-	if (asprintf(&filter,
+	pstr_sprintf(filter,
 		     "(&(objectClass=%s)(sambaSid=%s)(sambaGroupType=%d))",
-		     LDAP_OBJ_GROUPMAP, sid_to_fstring(tmp, alias),
-		     type) < 0) {
-		return NT_STATUS_NO_MEMORY;
-	}
+		     LDAP_OBJ_GROUPMAP, sid_string_static(alias),
+		     type);
 
 	if (ldapsam_search_one_group(ldap_state, filter,
-				     &result) != LDAP_SUCCESS) {
-		SAFE_FREE(filter);
+				     &result) != LDAP_SUCCESS)
 		return NT_STATUS_NO_SUCH_ALIAS;
-	}
 
 	count = ldap_count_entries(ldap_state->smbldap_state->ldap_struct,
 				   result);
@@ -3623,7 +3371,6 @@
 	if (count < 1) {
 		DEBUG(4, ("ldapsam_enum_aliasmem: Did not find alias\n"));
 		ldap_msgfree(result);
-		SAFE_FREE(filter);
 		return NT_STATUS_NO_SUCH_ALIAS;
 	}
 
@@ -3631,12 +3378,9 @@
 		DEBUG(1, ("ldapsam_enum_aliasmem: Duplicate entries for "
 			  "filter %s: count=%d\n", filter, count));
 		ldap_msgfree(result);
-		SAFE_FREE(filter);
 		return NT_STATUS_NO_SUCH_ALIAS;
 	}
 
-	SAFE_FREE(filter);
-
 	entry = ldap_first_entry(ldap_state->smbldap_state->ldap_struct,
 				 result);
 
@@ -3659,17 +3403,14 @@
 
 	for (i=0; i<count; i++) {
 		DOM_SID member;
-		NTSTATUS status;
 
 		if (!string_to_sid(&member, values[i]))
 			continue;
 
-		status = add_sid_to_array(NULL, &member, pp_members,
-					  &num_members);
-		if (!NT_STATUS_IS_OK(status)) {
+		if (!add_sid_to_array(NULL, &member, pp_members, &num_members)) {
 			ldap_value_free(values);
 			ldap_msgfree(result);
-			return status;
+			return NT_STATUS_NO_MEMORY;
 		}
 	}
 
@@ -3711,7 +3452,7 @@
 
 	if (type == SID_NAME_USE_NONE) {
 		DEBUG(5, ("SID %s is neither builtin nor domain!\n",
-			  sid_string_dbg(domain_sid)));
+			  sid_string_static(domain_sid)));
 		return NT_STATUS_UNSUCCESSFUL;
 	}
 
@@ -3722,8 +3463,7 @@
 	for (i=0; i<num_members; i++)
 		filter = talloc_asprintf(mem_ctx, "%s(sambaSIDList=%s)",
 					 filter,
-					 sid_string_talloc(mem_ctx,
-							   &members[i]));
+					 sid_string_static(&members[i]));
 
 	filter = talloc_asprintf(mem_ctx, "%s))", filter);
 
@@ -3971,7 +3711,7 @@
 	NTSTATUS result = NT_STATUS_NO_MEMORY;
 	TALLOC_CTX *mem_ctx;
 	LDAP *ld;
-	bool is_builtin;
+	BOOL is_builtin;
 
 	mem_ctx = talloc_new(NULL);
 	if (mem_ctx == NULL) {
@@ -3996,9 +3736,8 @@
 	for (i=0; i<num_rids; i++) {
 		DOM_SID sid;
 		sid_compose(&sid, domain_sid, rids[i]);
-		allsids = talloc_asprintf_append_buffer(
-			allsids, "(sambaSid=%s)",
-			sid_string_talloc(mem_ctx, &sid));
+		allsids = talloc_asprintf_append(allsids, "(sambaSid=%s)",
+						 sid_string_static(&sid));
 		if (allsids == NULL) {
 			goto done;
 		}
@@ -4241,13 +3980,13 @@
 	void *pagedresults_cookie;
 
 	LDAPMessage *entries, *current_entry;
-	bool (*ldap2displayentry)(struct ldap_search_state *state,
+	BOOL (*ldap2displayentry)(struct ldap_search_state *state,
 				  TALLOC_CTX *mem_ctx,
 				  LDAP *ld, LDAPMessage *entry,
 				  struct samr_displayentry *result);
 };
 
-static bool ldapsam_search_firstpage(struct pdb_search *search)
+static BOOL ldapsam_search_firstpage(struct pdb_search *search)
 {
 	struct ldap_search_state *state =
 		(struct ldap_search_state *)search->private_data;
@@ -4300,7 +4039,7 @@
 	return True;
 }
 
-static bool ldapsam_search_nextpage(struct pdb_search *search)
+static BOOL ldapsam_search_nextpage(struct pdb_search *search)
 {
 	struct ldap_search_state *state =
 		(struct ldap_search_state *)search->private_data;
@@ -4330,12 +4069,12 @@
 	return True;
 }
 
-static bool ldapsam_search_next_entry(struct pdb_search *search,
+static BOOL ldapsam_search_next_entry(struct pdb_search *search,
 				      struct samr_displayentry *entry)
 {
 	struct ldap_search_state *state =
 		(struct ldap_search_state *)search->private_data;
-	bool result;
+	BOOL result;
 
  retry:
 	if ((state->entries == NULL) && (state->pagedresults_cookie == NULL))
@@ -4398,7 +4137,7 @@
 	return;
 }
 
-static bool ldapuser2displayentry(struct ldap_search_state *state,
+static BOOL ldapuser2displayentry(struct ldap_search_state *state,
 				  TALLOC_CTX *mem_ctx,
 				  LDAP *ld, LDAPMessage *entry,
 				  struct samr_displayentry *result)
@@ -4474,7 +4213,7 @@
 
 	if (!sid_peek_check_rid(get_global_sam_sid(), &sid, &result->rid)) {
 		DEBUG(0, ("sid %s does not belong to our domain\n",
-			  sid_string_dbg(&sid)));
+			  sid_string_static(&sid)));
 		return False;
 	}
 
@@ -4482,7 +4221,7 @@
 }
 
 
-static bool ldapsam_search_users(struct pdb_methods *methods,
+static BOOL ldapsam_search_users(struct pdb_methods *methods,
 				 struct pdb_search *search,
 				 uint32 acct_flags)
 {
@@ -4530,7 +4269,7 @@
 	return ldapsam_search_firstpage(search);
 }
 
-static bool ldapgroup2displayentry(struct ldap_search_state *state,
+static BOOL ldapgroup2displayentry(struct ldap_search_state *state,
 				   TALLOC_CTX *mem_ctx,
 				   LDAP *ld, LDAPMessage *entry,
 				   struct samr_displayentry *result)
@@ -4627,7 +4366,7 @@
 				&& !sid_peek_check_rid(&global_sid_Builtin, &sid, &result->rid)) 
 			{
 				DEBUG(0, ("%s is not in our domain\n",
-					  sid_string_dbg(&sid)));
+					  sid_string_static(&sid)));
 				return False;
 			}
 			break;
@@ -4640,7 +4379,7 @@
 	return True;
 }
 
-static bool ldapsam_search_grouptype(struct pdb_methods *methods,
+static BOOL ldapsam_search_grouptype(struct pdb_methods *methods,
 				     struct pdb_search *search,
                                      const DOM_SID *sid,
 				     enum lsa_SidType type)
@@ -4648,7 +4387,6 @@
 	struct ldapsam_privates *ldap_state =
 		(struct ldapsam_privates *)methods->private_data;
 	struct ldap_search_state *state;
-	fstring tmp;
 
 	state = TALLOC_P(search->mem_ctx, struct ldap_search_state);
 	if (state == NULL) {
@@ -4664,7 +4402,7 @@
 	state->filter =	talloc_asprintf(search->mem_ctx,
 					"(&(objectclass=sambaGroupMapping)"
 					"(sambaGroupType=%d)(sambaSID=%s*))", 
-					type, sid_to_fstring(tmp, sid));
+					type, sid_string_static(sid));
 	state->attrs = talloc_attrs(search->mem_ctx, "cn", "sambaSid",
 				    "displayName", "description",
 				    "sambaGroupType", NULL);
@@ -4686,20 +4424,20 @@
 	return ldapsam_search_firstpage(search);
 }
 
-static bool ldapsam_search_groups(struct pdb_methods *methods,
+static BOOL ldapsam_search_groups(struct pdb_methods *methods,
 				  struct pdb_search *search)
 {
 	return ldapsam_search_grouptype(methods, search, get_global_sam_sid(), SID_NAME_DOM_GRP);
 }
 
-static bool ldapsam_search_aliases(struct pdb_methods *methods,
+static BOOL ldapsam_search_aliases(struct pdb_methods *methods,
 				   struct pdb_search *search,
 				   const DOM_SID *sid)
 {
 	return ldapsam_search_grouptype(methods, search, sid, SID_NAME_ALIAS);
 }
 
-static bool ldapsam_rid_algorithm(struct pdb_methods *methods)
+static BOOL ldapsam_rid_algorithm(struct pdb_methods *methods)
 {
 	return False;
 }
@@ -4823,13 +4561,13 @@
 	return NT_STATUS_ACCESS_DENIED;
 }
 
-static bool ldapsam_new_rid(struct pdb_methods *methods, uint32 *rid)
+static BOOL ldapsam_new_rid(struct pdb_methods *methods, uint32 *rid)
 {
 	NTSTATUS result = ldapsam_new_rid_internal(methods, rid);
 	return NT_STATUS_IS_OK(result) ? True : False;
 }
 
-static bool ldapsam_sid_to_id(struct pdb_methods *methods,
+static BOOL ldapsam_sid_to_id(struct pdb_methods *methods,
 			      const DOM_SID *sid,
 			      union unid_t *id, enum lsa_SidType *type)
 {
@@ -4840,7 +4578,7 @@
 				NULL };
 	LDAPMessage *result = NULL;
 	LDAPMessage *entry = NULL;
-	bool ret = False;
+	BOOL ret = False;
 	char *value;
 	int rc;
 
@@ -4855,7 +4593,7 @@
 	filter = talloc_asprintf(mem_ctx,
 				 "(&(sambaSid=%s)"
 				 "(|(objectClass=%s)(objectClass=%s)))",
-				 sid_string_talloc(mem_ctx, sid),
+				 sid_string_static(sid),
 				 LDAP_OBJ_GROUPMAP, LDAP_OBJ_SAMBASAMACCOUNT);
 	if (filter == NULL) {
 		DEBUG(5, ("talloc_asprintf failed\n"));
@@ -4940,8 +4678,8 @@
 	LDAPMessage *entry = NULL;
 	LDAPMessage *result = NULL;
 	uint32 num_result;
-	bool is_machine = False;
-	bool add_posix = False;
+	BOOL is_machine = False;
+	BOOL add_posix = False;
 	LDAPMod **mods = NULL;
 	struct samu *user;
 	char *filter;
@@ -5229,7 +4967,7 @@
 	LDAPMessage *entry = NULL;
 	LDAPMessage *result = NULL;
 	uint32 num_result;
-	bool is_new_entry = False;
+	BOOL is_new_entry = False;
 	LDAPMod **mods = NULL;
 	char *filter;
 	char *groupsidstr;
@@ -5335,8 +5073,7 @@
 
 	sid_compose(&group_sid, get_global_sam_sid(), *rid);
 
-	groupsidstr = talloc_strdup(tmp_ctx, sid_string_talloc(tmp_ctx,
-							       &group_sid));
+	groupsidstr = talloc_strdup(tmp_ctx, sid_string_static(&group_sid));
 	grouptype = talloc_asprintf(tmp_ctx, "%d", SID_NAME_DOM_GRP);
 
 	if (!groupsidstr || !grouptype) {
@@ -5393,7 +5130,7 @@
 				 "(&(sambaSID=%s)"
 				 "(objectClass=%s)"
 				 "(objectClass=%s))",
-				 sid_string_talloc(tmp_ctx, &group_sid),
+				 sid_string_static(&group_sid),
 				 LDAP_OBJ_POSIXGROUP,
 				 LDAP_OBJ_GROUPMAP);
 	if (filter == NULL) {
@@ -5507,7 +5244,7 @@
 				 "(&(sambaSID=%s)"
 				 "(objectClass=%s)"
 				 "(objectClass=%s))",
-				 sid_string_talloc(tmp_ctx, &member_sid),
+				 sid_string_static(&member_sid),
 				 LDAP_OBJ_POSIXACCOUNT,
 				 LDAP_OBJ_SAMBASAMACCOUNT);
 	if (filter == NULL) {
@@ -5558,7 +5295,7 @@
 		}
 
 		if (user_gid == group_gid) {
-			DEBUG (3, ("ldapsam_change_groupmem: can't remove user from its own primary group!\n"));
+			DEBUG (3, ("ldapsam_change_groupmem: can't remove user from it's own primary group!\n"));
 			return NT_STATUS_MEMBERS_PRIMARY_GROUP;
 		}
 	}
@@ -5574,7 +5311,7 @@
 				 "(&(sambaSID=%s)"
 				 "(objectClass=%s)"
 				 "(objectClass=%s))",
-				 sid_string_talloc(tmp_ctx, &group_sid),
+				 sid_string_static(&group_sid),
 				 LDAP_OBJ_POSIXGROUP,
 				 LDAP_OBJ_GROUPMAP);
 
@@ -5743,318 +5480,7 @@
 	return NT_STATUS_OK;
 }
 
-
 /**********************************************************************
- trusted domains functions
- *********************************************************************/
-
-static char *trusteddom_dn(struct ldapsam_privates *ldap_state,
-			   const char *domain)
-{
-	return talloc_asprintf(talloc_tos(), "sambaDomainName=%s,%s", domain,
-			       ldap_state->domain_dn);
-}
-
-static bool get_trusteddom_pw_int(struct ldapsam_privates *ldap_state,
-				  const char *domain, LDAPMessage **entry)
-{
-	int rc;
-	char *filter;
-	int scope = LDAP_SCOPE_SUBTREE;
-	const char **attrs = NULL; /* NULL: get all attrs */
-	int attrsonly = 0; /* 0: return values too */
-	LDAPMessage *result = NULL;
-	char *trusted_dn;
-	uint32 num_result;
-
-	filter = talloc_asprintf(talloc_tos(),
-				 "(&(objectClass=%s)(sambaDomainName=%s))",
-				 LDAP_OBJ_TRUSTDOM_PASSWORD, domain);
-
-	trusted_dn = trusteddom_dn(ldap_state, domain);
-	if (trusted_dn == NULL) {
-		return False;
-	}
-	rc = smbldap_search(ldap_state->smbldap_state, trusted_dn, scope,
-			    filter, attrs, attrsonly, &result);
-
-	if (rc == LDAP_NO_SUCH_OBJECT) {
-		*entry = NULL;
-		return True;
-	}
-
-	if (rc != LDAP_SUCCESS) {
-		return False;
-	}
-
-	num_result = ldap_count_entries(priv2ld(ldap_state), result);
-
-	if (num_result > 1) {
-		DEBUG(1, ("ldapsam_get_trusteddom_pw: more than one "
-			  "sambaTrustedDomainPassword object for domain '%s'"
-			  "?!\n", domain));
-		return False;
-	}
-
-	if (num_result == 0) {
-		DEBUG(1, ("ldapsam_get_trusteddom_pw: no "
-			  "sambaTrustedDomainPassword object for domain %s.\n",
-			  domain));
-		*entry = NULL;
-	} else {
-		*entry = ldap_first_entry(priv2ld(ldap_state), result);
-	}
-
-	return True;
-}
-
-static bool ldapsam_get_trusteddom_pw(struct pdb_methods *methods,
-				      const char *domain,
-				      char** pwd,
-				      DOM_SID *sid,
-	        	 	      time_t *pass_last_set_time)
-{
-	struct ldapsam_privates *ldap_state =
-		(struct ldapsam_privates *)methods->private_data;
-	LDAPMessage *entry = NULL;
-
-	DEBUG(10, ("ldapsam_get_trusteddom_pw called for domain %s\n", domain));
-
-	if (!get_trusteddom_pw_int(ldap_state, domain, &entry) ||
-	    (entry == NULL))
-	{
-		return False;
-	}
-
-	/* password */
-	if (pwd != NULL) {
-		char *pwd_str;
-		pwd_str = smbldap_talloc_single_attribute(priv2ld(ldap_state),
-				entry, "sambaClearTextPassword", talloc_tos());
-		if (pwd_str == NULL) {
-			return False;
-		}
-		/* trusteddom_pw routines do not use talloc yet... */
-		*pwd = SMB_STRDUP(pwd_str);
-		if (*pwd == NULL) {
-			return False;
-		}
-	}
-
-	/* last change time */
-	if (pass_last_set_time != NULL) {
-		char *time_str;
-		time_str = smbldap_talloc_single_attribute(priv2ld(ldap_state),
-				entry, "sambaPwdLastSet", talloc_tos());
-		if (time_str == NULL) {
-			return False;
-		}
-		*pass_last_set_time = (time_t)atol(time_str);
-	}
-
-	/* domain sid */
-	if (sid != NULL) {
-		char *sid_str;
-		DOM_SID *dom_sid;
-		sid_str = smbldap_talloc_single_attribute(priv2ld(ldap_state),
-							  entry, "sambaSID",
-							  talloc_tos());
-		if (sid_str == NULL) {
-			return False;
-		}
-		dom_sid = string_sid_talloc(talloc_tos(), sid_str);
-		if (dom_sid == NULL) {
-			return False;
-		}
-		sid_copy(sid, dom_sid);
-	}
-
-	return True;
-}
-
-static bool ldapsam_set_trusteddom_pw(struct pdb_methods *methods,
-				      const char* domain,
-				      const char* pwd,
-	        	  	      const DOM_SID *sid)
-{
-	struct ldapsam_privates *ldap_state =
-		(struct ldapsam_privates *)methods->private_data;
-	LDAPMessage *entry = NULL;
-	LDAPMod **mods = NULL;
-	char *prev_pwd = NULL;
-	char *trusted_dn = NULL;
-	int rc;
-
-	DEBUG(10, ("ldapsam_set_trusteddom_pw called for domain %s\n", domain));
-
-	/*
-	 * get the current entry (if there is one) in order to put the
-	 * current password into the previous password attribute
-	 */
-	if (!get_trusteddom_pw_int(ldap_state, domain, &entry)) {
-		return False;
-	}
-
-	mods = NULL;
-	smbldap_make_mod(priv2ld(ldap_state), entry, &mods, "objectClass",
-			 "sambaTrustedDomainPassword");
-	smbldap_make_mod(priv2ld(ldap_state), entry, &mods, "sambaDomainName",
-			 domain);
-	smbldap_make_mod(priv2ld(ldap_state), entry, &mods, "sambaSID",
-			 sid_string_tos(sid));
-	smbldap_make_mod(priv2ld(ldap_state), entry, &mods, "sambaPwdLastSet",
-			 talloc_asprintf(talloc_tos(), "%li", time(NULL)));
-	smbldap_make_mod(priv2ld(ldap_state), entry, &mods,
-			 "sambaClearTextPassword", pwd);
-	if (entry != NULL) {
-		prev_pwd = smbldap_talloc_single_attribute(priv2ld(ldap_state),
-				entry, "sambaClearTextPassword", talloc_tos());
-		if (prev_pwd != NULL) {
-			smbldap_make_mod(priv2ld(ldap_state), entry, &mods,
-					 "sambaPreviousClearTextPassword",
-					 prev_pwd);
-		}
-	}
-
-	trusted_dn = trusteddom_dn(ldap_state, domain);
-	if (trusted_dn == NULL) {
-		return False;
-	}
-	if (entry == NULL) {
-		rc = smbldap_add(ldap_state->smbldap_state, trusted_dn, mods);
-	} else {
-		rc = smbldap_modify(ldap_state->smbldap_state, trusted_dn, mods);
-	}
-
-	if (rc != LDAP_SUCCESS) {
-		DEBUG(1, ("error writing trusted domain password!\n"));
-		return False;
-	}
-
-	return True;
-}
-
-static bool ldapsam_del_trusteddom_pw(struct pdb_methods *methods,
-				      const char *domain)
-{
-	int rc;
-	struct ldapsam_privates *ldap_state =
-		(struct ldapsam_privates *)methods->private_data;
-	LDAPMessage *entry = NULL;
-	const char *trusted_dn;
-
-	if (!get_trusteddom_pw_int(ldap_state, domain, &entry)) {
-		return False;
-	}
-
-	if (entry == NULL) {
-		DEBUG(5, ("ldapsam_del_trusteddom_pw: no such trusted domain: "
-			  "%s\n", domain));
-		return True;
-	}
-
-	trusted_dn = smbldap_talloc_dn(talloc_tos(), priv2ld(ldap_state),
-				       entry);
-	if (trusted_dn == NULL) {
-		DEBUG(0,("ldapsam_del_trusteddom_pw: Out of memory!\n"));
-		return False;
-	}
-
-	rc = smbldap_delete(ldap_state->smbldap_state, trusted_dn);
-	if (rc != LDAP_SUCCESS) {
-		return False;
-	}
-
-	return True;
-}
-
-static NTSTATUS ldapsam_enum_trusteddoms(struct pdb_methods *methods,
-					 TALLOC_CTX *mem_ctx,
-					 uint32 *num_domains,
-					 struct trustdom_info ***domains)
-{
-	int rc;
-	struct ldapsam_privates *ldap_state =
-		(struct ldapsam_privates *)methods->private_data;
-	char *filter;
-	int scope = LDAP_SCOPE_SUBTREE;
-	const char *attrs[] = { "sambaDomainName", "sambaSID", NULL };
-	int attrsonly = 0; /* 0: return values too */
-	LDAPMessage *result = NULL;
-	LDAPMessage *entry = NULL;
-
-	filter = talloc_asprintf(talloc_tos(), "(objectClass=%s)",
-				 LDAP_OBJ_TRUSTDOM_PASSWORD);
-
-	rc = smbldap_search(ldap_state->smbldap_state,
-			    ldap_state->domain_dn,
-			    scope,
-			    filter,
-			    attrs,
-			    attrsonly,
-			    &result);
-
-	if (rc != LDAP_SUCCESS) {
-		return NT_STATUS_UNSUCCESSFUL;
-	}
-
-	*num_domains = 0;
-	if (!(*domains = TALLOC_ARRAY(mem_ctx, struct trustdom_info *, 1))) {
-		DEBUG(1, ("talloc failed\n"));
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	for (entry = ldap_first_entry(priv2ld(ldap_state), result);
-	     entry != NULL;
-	     entry = ldap_next_entry(priv2ld(ldap_state), entry))
-	{
-		char *dom_name, *dom_sid_str;
-		struct trustdom_info *dom_info;
-
-		dom_info = TALLOC_P(*domains, struct trustdom_info);
-		if (dom_info == NULL) {
-			DEBUG(1, ("talloc failed\n"));
-			return NT_STATUS_NO_MEMORY;
-		}
-
-		dom_name = smbldap_talloc_single_attribute(priv2ld(ldap_state),
-							   entry,
-							   "sambaDomainName",
-							   talloc_tos());
-		if (dom_name == NULL) {
-			DEBUG(1, ("talloc failed\n"));
-			return NT_STATUS_NO_MEMORY;
-		}
-		dom_info->name = dom_name;
-
-		dom_sid_str = smbldap_talloc_single_attribute(
-					priv2ld(ldap_state), entry, "sambaSID",
-					talloc_tos());
-		if (dom_sid_str == NULL) {
-			DEBUG(1, ("talloc failed\n"));
-			return NT_STATUS_NO_MEMORY;
-		}
-		if (!string_to_sid(&dom_info->sid, dom_sid_str)) {
-			DEBUG(1, ("Error calling string_to_sid on SID %s\n",
-				  dom_sid_str));
-			return NT_STATUS_UNSUCCESSFUL;
-		}
-
-		ADD_TO_ARRAY(*domains, struct trustdom_info *, dom_info,
-			     domains, num_domains);
-
-		if (*domains == NULL) {
-			DEBUG(1, ("talloc failed\n"));
-			return NT_STATUS_NO_MEMORY;
-		}
-	}
-
-	DEBUG(5, ("ldapsam_enum_trusteddoms: got %d domains\n", *num_domains));
-	return NT_STATUS_OK;
-}
-
-
-/**********************************************************************
  Housekeeping
  *********************************************************************/
 
@@ -6093,6 +5519,9 @@
 
 	(*pdb_method)->name = "ldapsam";
 
+	(*pdb_method)->setsampwent = ldapsam_setsampwent;
+	(*pdb_method)->endsampwent = ldapsam_endsampwent;
+	(*pdb_method)->getsampwent = ldapsam_getsampwent;
 	(*pdb_method)->getsampwnam = ldapsam_getsampwnam;
 	(*pdb_method)->getsampwsid = ldapsam_getsampwsid;
 	(*pdb_method)->add_sam_account = ldapsam_add_sam_account;
@@ -6116,11 +5545,6 @@
 	(*pdb_method)->rid_algorithm = ldapsam_rid_algorithm;
 	(*pdb_method)->new_rid = ldapsam_new_rid;
 
-	(*pdb_method)->get_trusteddom_pw = ldapsam_get_trusteddom_pw;
-	(*pdb_method)->set_trusteddom_pw = ldapsam_set_trusteddom_pw;
-	(*pdb_method)->del_trusteddom_pw = ldapsam_del_trusteddom_pw;
-	(*pdb_method)->enum_trusteddoms = ldapsam_enum_trusteddoms;
-
 	/* TODO: Setup private data and free */
 
 	if ( !(ldap_state = TALLOC_ZERO_P(*pdb_method, struct ldapsam_privates)) ) {
@@ -6128,8 +5552,7 @@
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	nt_status = smbldap_init(*pdb_method, pdb_get_event_context(),
-				 location, &ldap_state->smbldap_state);
+	nt_status = smbldap_init(*pdb_method, location, &ldap_state->smbldap_state);
 
 	if ( !NT_STATUS_IS_OK(nt_status) ) {
 		return nt_status;
@@ -6182,22 +5605,21 @@
 NTSTATUS pdb_init_ldapsam(struct pdb_methods **pdb_method, const char *location)
 {
 	NTSTATUS nt_status;
-	struct ldapsam_privates *ldap_state = NULL;
+	struct ldapsam_privates *ldap_state;
 	uint32 alg_rid_base;
-	char *alg_rid_base_string = NULL;
+	pstring alg_rid_base_string;
 	LDAPMessage *result = NULL;
 	LDAPMessage *entry = NULL;
 	DOM_SID ldap_domain_sid;
 	DOM_SID secrets_domain_sid;
-	char *domain_sid_string = NULL;
-	char *dn = NULL;
+	pstring domain_sid_string;
+	char *dn;
 	char *uri = talloc_strdup( NULL, location );
 
 	trim_char( uri, '\"', '\"' );
 	nt_status = pdb_init_ldapsam_common(pdb_method, uri);
-	if (uri) {
-		TALLOC_FREE(uri);
-	}
+	if ( uri )
+		TALLOC_FREE( uri );
 
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		return nt_status;
@@ -6219,7 +5641,7 @@
 			ldapsam_enum_group_memberships;
 		(*pdb_method)->lookup_rids = ldapsam_lookup_rids;
 		(*pdb_method)->sid_to_id = ldapsam_sid_to_id;
-
+		
 		if (lp_parm_bool(-1, "ldapsam", "editposix", False)) {
 			(*pdb_method)->create_user = ldapsam_create_user;
 			(*pdb_method)->delete_user = ldapsam_delete_user;
@@ -6235,11 +5657,11 @@
 	ldap_state->schema_ver = SCHEMAVER_SAMBASAMACCOUNT;
 
 	/* Try to setup the Domain Name, Domain SID, algorithmic rid base */
-
+	
 	nt_status = smbldap_search_domain_info(ldap_state->smbldap_state,
-					       &result,
+					       &result, 
 					       ldap_state->domain_name, True);
-
+	
 	if ( !NT_STATUS_IS_OK(nt_status) ) {
 		DEBUG(2, ("pdb_init_ldapsam: WARNING: Could not get domain "
 			  "info, nor add one to the domain\n"));
@@ -6252,7 +5674,7 @@
 
 	/* Given that the above might fail, everything below this must be
 	 * optional */
-
+	
 	entry = ldap_first_entry(ldap_state->smbldap_state->ldap_struct,
 				 result);
 	if (!entry) {
@@ -6271,59 +5693,56 @@
 	ldap_state->domain_dn = smb_xstrdup(dn);
 	ldap_memfree(dn);
 
-	domain_sid_string = smbldap_talloc_single_attribute(
+	if (smbldap_get_single_pstring(
 		    ldap_state->smbldap_state->ldap_struct,
-		    entry,
+		    entry, 
 		    get_userattr_key2string(ldap_state->schema_ver,
-					    LDAP_ATTR_USER_SID),
-		    talloc_tos());
-
-	if (domain_sid_string) {
-		bool found_sid;
+					    LDAP_ATTR_USER_SID), 
+		    domain_sid_string)) {
+		BOOL found_sid;
 		if (!string_to_sid(&ldap_domain_sid, domain_sid_string)) {
 			DEBUG(1, ("pdb_init_ldapsam: SID [%s] could not be "
 				  "read as a valid SID\n", domain_sid_string));
 			ldap_msgfree(result);
-			TALLOC_FREE(domain_sid_string);
 			return NT_STATUS_INVALID_PARAMETER;
 		}
 		found_sid = secrets_fetch_domain_sid(ldap_state->domain_name,
 						     &secrets_domain_sid);
 		if (!found_sid || !sid_equal(&secrets_domain_sid,
 					     &ldap_domain_sid)) {
+			fstring new_sid_str, old_sid_str;
 			DEBUG(1, ("pdb_init_ldapsam: Resetting SID for domain "
 				  "%s based on pdb_ldap results %s -> %s\n",
 				  ldap_state->domain_name,
-				  sid_string_dbg(&secrets_domain_sid),
-				  sid_string_dbg(&ldap_domain_sid)));
-
+				  sid_to_string(old_sid_str,
+						&secrets_domain_sid),
+				  sid_to_string(new_sid_str,
+						&ldap_domain_sid)));
+			
 			/* reset secrets.tdb sid */
 			secrets_store_domain_sid(ldap_state->domain_name,
 						 &ldap_domain_sid);
 			DEBUG(1, ("New global sam SID: %s\n",
-				  sid_string_dbg(get_global_sam_sid())));
+				  sid_to_string(new_sid_str,
+						get_global_sam_sid())));
 		}
 		sid_copy(&ldap_state->domain_sid, &ldap_domain_sid);
-		TALLOC_FREE(domain_sid_string);
 	}
 
-	alg_rid_base_string = smbldap_talloc_single_attribute(
+	if (smbldap_get_single_pstring(
 		    ldap_state->smbldap_state->ldap_struct,
-		    entry,
+		    entry, 
 		    get_attr_key2string( dominfo_attr_list,
 					 LDAP_ATTR_ALGORITHMIC_RID_BASE ),
-		    talloc_tos());
-	if (alg_rid_base_string) {
+		    alg_rid_base_string)) {
 		alg_rid_base = (uint32)atol(alg_rid_base_string);
 		if (alg_rid_base != algorithmic_rid_base()) {
 			DEBUG(0, ("The value of 'algorithmic RID base' has "
 				  "changed since the LDAP\n"
 				  "database was initialised.  Aborting. \n"));
 			ldap_msgfree(result);
-			TALLOC_FREE(alg_rid_base_string);
 			return NT_STATUS_UNSUCCESSFUL;
 		}
-		TALLOC_FREE(alg_rid_base_string);
 	}
 	ldap_msgfree(result);
 

Modified: branches/samba/upstream/source/passdb/pdb_nds.c
===================================================================
--- branches/samba/upstream/source/passdb/pdb_nds.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/passdb/pdb_nds.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
     
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    
 */
 
@@ -740,7 +741,7 @@
 *********************************************************************/
 
 static NTSTATUS pdb_nds_update_login_attempts(struct pdb_methods *methods,
-					struct samu *sam_acct, bool success)
+					struct samu *sam_acct, BOOL success)
 {
 	struct ldapsam_privates *ldap_state;
 
@@ -763,7 +764,7 @@
 		char clear_text_pw[512];
 		LDAP *ld = NULL;
 		const char *username = pdb_get_username(sam_acct);
-		bool got_clear_text_pw = False;
+		BOOL got_clear_text_pw = False;
 
 		DEBUG(5,("pdb_nds_update_login_attempts: %s login for %s\n",
 				success ? "Successful" : "Failed", username));

Modified: branches/samba/upstream/source/passdb/pdb_smbpasswd.c
===================================================================
--- branches/samba/upstream/source/passdb/pdb_smbpasswd.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/passdb/pdb_smbpasswd.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
  * 
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 3 of the License, or (at your option)
+ * Software Foundation; either version 2 of the License, or (at your option)
  * any later version.
  * 
  * This program is distributed in the hope that it will be useful, but WITHOUT
@@ -17,7 +17,8 @@
  * more details.
  * 
  * You should have received a copy of the GNU General Public License along with
- * this program; if not, see <http://www.gnu.org/licenses/>.
+ * this program; if not, write to the Free Software Foundation, Inc., 675
+ * Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -53,7 +54,7 @@
 	
 	/* formerly static variables */
 	struct smb_passwd pw_buf;
-	fstring user_name;
+	pstring  user_name;
 	unsigned char smbpwd[16];
 	unsigned char smbntpwd[16];
 
@@ -79,7 +80,7 @@
  seconds.
 ****************************************************************/
 
-static bool do_file_lock(int fd, int waitsecs, int type)
+static BOOL do_file_lock(int fd, int waitsecs, int type)
 {
 	SMB_STRUCT_FLOCK lock;
 	int             ret;
@@ -113,7 +114,7 @@
  Lock an fd. Abandon after waitsecs seconds.
 ****************************************************************/
 
-static bool pw_file_lock(int fd, int type, int secs, int *plock_depth)
+static BOOL pw_file_lock(int fd, int type, int secs, int *plock_depth)
 {
 	if (fd < 0) {
 		return False;
@@ -136,9 +137,9 @@
  Unlock an fd. Abandon after waitsecs seconds.
 ****************************************************************/
 
-static bool pw_file_unlock(int fd, int *plock_depth)
+static BOOL pw_file_unlock(int fd, int *plock_depth)
 {
-	bool ret=True;
+	BOOL ret=True;
 
 	if (fd == 0 || *plock_depth == 0) {
 		return True;
@@ -437,6 +438,12 @@
 			continue;
 		}
 
+		/*
+		 * As 256 is shorter than a pstring we don't need to check
+		 * length here - if this ever changes....
+		 */
+		SMB_ASSERT(sizeof(pstring) > sizeof(linebuf));
+
 		strncpy(user_name, linebuf, PTR_DIFF(p, linebuf));
 		user_name[PTR_DIFF(p, linebuf)] = '\0';
 
@@ -722,10 +729,10 @@
  override = True, override XXXXXXXX'd out password or NO PASS
 ************************************************************************/
 
-static bool mod_smbfilepwd_entry(struct smbpasswd_privates *smbpasswd_state, const struct smb_passwd* pwd)
+static BOOL mod_smbfilepwd_entry(struct smbpasswd_privates *smbpasswd_state, const struct smb_passwd* pwd)
 {
 	/* Static buffers we will return. */
-	fstring user_name;
+	pstring user_name;
 
 	char *status;
 	char linebuf[256];
@@ -738,8 +745,8 @@
 	FILE *fp;
 	int lockfd;
 	const char *pfile = smbpasswd_state->smbpasswd_file;
-	bool found_entry = False;
-	bool got_pass_last_set_time = False;
+	BOOL found_entry = False;
+	BOOL got_pass_last_set_time = False;
 
 	SMB_OFF_T pwd_seekpos = 0;
 
@@ -841,6 +848,13 @@
 			continue;
 		}
 
+		/*
+		 * As 256 is shorter than a pstring we don't need to check
+		 * length here - if this ever changes....
+		 */
+
+		SMB_ASSERT(sizeof(user_name) > sizeof(linebuf));
+
 		strncpy(user_name, linebuf, PTR_DIFF(p, linebuf));
 		user_name[PTR_DIFF(p, linebuf)] = '\0';
 		if (strequal(user_name, pwd->smb_name)) {
@@ -1009,7 +1023,7 @@
 
 #ifdef DEBUG_PASSWORD
 	DEBUG(100,("mod_smbfilepwd_entry: "));
-	dump_data(100, (uint8 *)ascii_p16, wr_len);
+	dump_data(100, ascii_p16, wr_len);
 #endif
 
 	if(wr_len > sizeof(linebuf)) {
@@ -1075,21 +1089,16 @@
  Routine to delete an entry in the smbpasswd file by name.
 *************************************************************************/
 
-static bool del_smbfilepwd_entry(struct smbpasswd_privates *smbpasswd_state, const char *name)
+static BOOL del_smbfilepwd_entry(struct smbpasswd_privates *smbpasswd_state, const char *name)
 {
 	const char *pfile = smbpasswd_state->smbpasswd_file;
-	char *pfile2 = NULL;
+	pstring pfile2;
 	struct smb_passwd *pwd = NULL;
 	FILE *fp = NULL;
 	FILE *fp_write = NULL;
 	int pfile2_lockdepth = 0;
 
-	pfile2 = talloc_asprintf(talloc_tos(),
-			"%s.%u",
-			pfile, (unsigned)sys_getpid());
-	if (!pfile2) {
-		return false;
-	}
+	slprintf(pfile2, sizeof(pfile2)-1, "%s.%u", pfile, (unsigned)sys_getpid() );
 
 	/*
 	 * Open the smbpassword file - for update. It needs to be update
@@ -1171,7 +1180,7 @@
 	if(rename(pfile2,pfile) != 0) {
 		unlink(pfile2);
 	}
-
+  
 	endsmbfilepwent(fp, &smbpasswd_state->pw_file_lock_depth);
 	endsmbfilepwent(fp_write,&pfile2_lockdepth);
 	return True;
@@ -1183,7 +1192,7 @@
  should only stay around as long as the struct samu does.
  ********************************************************************/
 
-static bool build_smb_pass (struct smb_passwd *smb_pw, const struct samu *sampass)
+static BOOL build_smb_pass (struct smb_passwd *smb_pw, const struct samu *sampass)
 {
 	uint32 rid;
 
@@ -1226,7 +1235,7 @@
  Create a struct samu from a smb_passwd struct
  ********************************************************************/
 
-static bool build_sam_account(struct smbpasswd_privates *smbpasswd_state, 
+static BOOL build_sam_account(struct smbpasswd_privates *smbpasswd_state, 
 			      struct samu *sam_pass, const struct smb_passwd *pw_buf)
 {
 	struct passwd *pwfile;
@@ -1251,10 +1260,8 @@
 
 	/* set remaining fields */
 		
-	if (!pdb_set_nt_passwd (sam_pass, pw_buf->smb_nt_passwd, PDB_SET))
-		return False;
-	if (!pdb_set_lanman_passwd (sam_pass, pw_buf->smb_passwd, PDB_SET))
-		return False;
+	pdb_set_nt_passwd (sam_pass, pw_buf->smb_nt_passwd, PDB_SET);
+	pdb_set_lanman_passwd (sam_pass, pw_buf->smb_passwd, PDB_SET);			
 	pdb_set_acct_ctrl (sam_pass, pw_buf->acct_ctrl, PDB_SET);
 	pdb_set_pass_last_set_time (sam_pass, pw_buf->pass_last_set_time, PDB_SET);
 	pdb_set_pass_can_change_time (sam_pass, pw_buf->pass_last_set_time, PDB_SET);
@@ -1266,6 +1273,79 @@
  Functions to be implemented by the new passdb API 
  ****************************************************************/
 
+static NTSTATUS smbpasswd_setsampwent (struct pdb_methods *my_methods, BOOL update, uint32 acb_mask)
+{
+	struct smbpasswd_privates *smbpasswd_state = (struct smbpasswd_privates*)my_methods->private_data;
+	
+	smbpasswd_state->pw_file = startsmbfilepwent(smbpasswd_state->smbpasswd_file, 
+						       update ? PWF_UPDATE : PWF_READ, 
+						       &(smbpasswd_state->pw_file_lock_depth));
+				   
+	/* did we fail?  Should we try to create it? */
+	if (!smbpasswd_state->pw_file && update && errno == ENOENT) {
+		FILE *fp;
+		/* slprintf(msg_str,msg_str_len-1,
+		   "smbpasswd file did not exist - attempting to create it.\n"); */
+		DEBUG(0,("smbpasswd file did not exist - attempting to create it.\n"));
+		fp = sys_fopen(smbpasswd_state->smbpasswd_file, "w");
+		if (fp) {
+			fprintf(fp, "# Samba SMB password file\n");
+			fclose(fp);
+		}
+		
+		smbpasswd_state->pw_file = startsmbfilepwent(smbpasswd_state->smbpasswd_file, 
+							     update ? PWF_UPDATE : PWF_READ, 
+							     &(smbpasswd_state->pw_file_lock_depth));
+	}
+	
+	if (smbpasswd_state->pw_file != NULL)
+		return NT_STATUS_OK;
+	else
+		return NT_STATUS_UNSUCCESSFUL;  
+}
+
+static void smbpasswd_endsampwent (struct pdb_methods *my_methods)
+{
+	struct smbpasswd_privates *smbpasswd_state = (struct smbpasswd_privates*)my_methods->private_data;
+	endsmbfilepwent(smbpasswd_state->pw_file, &(smbpasswd_state->pw_file_lock_depth));
+}
+ 
+/*****************************************************************
+ ****************************************************************/
+
+static NTSTATUS smbpasswd_getsampwent(struct pdb_methods *my_methods, struct samu *user)
+{
+	NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL;
+	struct smbpasswd_privates *smbpasswd_state = (struct smbpasswd_privates*)my_methods->private_data;
+	struct smb_passwd *pw_buf=NULL;
+	BOOL done = False;
+
+	DEBUG(5,("pdb_getsampwent\n"));
+
+	if ( !user ) {
+		DEBUG(5,("pdb_getsampwent (smbpasswd): user is NULL\n"));
+		return nt_status;
+	}
+
+	while (!done) {
+		/* do we have an entry? */
+		pw_buf = getsmbfilepwent(smbpasswd_state, smbpasswd_state->pw_file);
+		if (pw_buf == NULL) 
+			return nt_status;
+
+		/* build the struct samu entry from the smb_passwd struct. 
+		   We loop in case the user in the pdb does not exist in 
+		   the local system password file */
+		if (build_sam_account(smbpasswd_state, user, pw_buf))
+			done = True;
+	}
+
+	DEBUG(5,("getsampwent (smbpasswd): done\n"));
+
+	/* success */
+	return NT_STATUS_OK;
+}
+
 /****************************************************************
  Search smbpasswd file by iterating over the entries.  Do not
  call getpwnam() for unix account information until we have found
@@ -1323,10 +1403,10 @@
 	struct smbpasswd_privates *smbpasswd_state = (struct smbpasswd_privates*)my_methods->private_data;
 	struct smb_passwd *smb_pw;
 	FILE *fp = NULL;
+	fstring sid_str;
 	uint32 rid;
 	
-	DEBUG(10, ("smbpasswd_getsampwrid: search by sid: %s\n",
-		   sid_string_dbg(sid)));
+	DEBUG(10, ("smbpasswd_getsampwrid: search by sid: %s\n", sid_to_string(sid_str, sid)));
 
 	if (!sid_peek_check_rid(get_global_sam_sid(), sid, &rid))
 		return NT_STATUS_UNSUCCESSFUL;
@@ -1372,10 +1452,9 @@
 
 	/* build_sam_account might change the SID on us, if the name was for the guest account */
 	if (NT_STATUS_IS_OK(nt_status) && !sid_equal(pdb_get_user_sid(sam_acct), sid)) {
-		DEBUG(1, ("looking for user with sid %s instead returned %s "
-			  "for account %s!?!\n", sid_string_dbg(sid),
-			  sid_string_dbg(pdb_get_user_sid(sam_acct)),
-			  pdb_get_username(sam_acct)));
+		fstring sid_string1, sid_string2;
+		DEBUG(1, ("looking for user with sid %s instead returned %s for account %s!?!\n",
+			  sid_to_string(sid_string1, sid), sid_to_string(sid_string2, pdb_get_user_sid(sam_acct)), pdb_get_username(sam_acct)));
 		return NT_STATUS_NO_SUCH_USER;
 	}
 
@@ -1433,10 +1512,9 @@
 					      struct samu *old_acct,
 					      const char *newname)
 {
-	char *rename_script = NULL;
+	pstring rename_script;
 	struct samu *new_acct = NULL;
-	bool interim_account = False;
-	TALLOC_CTX *ctx = talloc_tos();
+	BOOL interim_account = False;
 	NTSTATUS ret = NT_STATUS_UNSUCCESSFUL;
 
 	if (!*(lp_renameuser_script()))
@@ -1451,7 +1529,7 @@
 	{
 		goto done;
 	}
-
+	
 	ret = smbpasswd_add_sam_account(my_methods, new_acct);
 	if (!NT_STATUS_IS_OK(ret))
 		goto done;
@@ -1459,38 +1537,15 @@
 	interim_account = True;
 
 	/* rename the posix user */
-	rename_script = talloc_strdup(ctx,
-				lp_renameuser_script());
-	if (!rename_script) {
-		ret = NT_STATUS_NO_MEMORY;
-		goto done;
-	}
+	pstrcpy(rename_script, lp_renameuser_script());
 
 	if (*rename_script) {
 	        int rename_ret;
 
-		rename_script = talloc_string_sub2(ctx,
-					rename_script,
-					"%unew",
-					newname,
-					true,
-					false,
-					true);
-		if (!rename_script) {
-			ret = NT_STATUS_NO_MEMORY;
-			goto done;
-		}
-		rename_script = talloc_string_sub2(ctx,
-					rename_script,
-					"%uold",
-					pdb_get_username(old_acct),
-					true,
-					false,
-					true);
-		if (!rename_script) {
-			ret = NT_STATUS_NO_MEMORY;
-			goto done;
-		}
+		string_sub2(rename_script, "%unew", newname, sizeof(pstring), 
+			    True, False, True);
+		string_sub2(rename_script, "%uold", pdb_get_username(old_acct), 
+			    sizeof(pstring), True, False, True);
 
 		rename_ret = smbrun(rename_script, NULL);
 
@@ -1500,8 +1555,8 @@
 			smb_nscd_flush_user_cache();
 		}
 
-		if (rename_ret)
-			goto done;
+		if (rename_ret) 
+			goto done; 
         } else {
 		goto done;
 	}
@@ -1509,7 +1564,7 @@
 	smbpasswd_delete_sam_account(my_methods, old_acct);
 	interim_account = False;
 
-done:
+done:	
 	/* cleanup */
 	if (interim_account)
 		smbpasswd_delete_sam_account(my_methods, new_acct);
@@ -1520,7 +1575,7 @@
 	return (ret);	
 }
 
-static bool smbpasswd_rid_algorithm(struct pdb_methods *methods)
+static BOOL smbpasswd_rid_algorithm(struct pdb_methods *methods)
 {
 	return True;
 }
@@ -1535,135 +1590,6 @@
 	/* No need to free any further, as it is talloc()ed */
 }
 
-struct smbpasswd_search_state {
-	uint32_t acct_flags;
-
-	struct samr_displayentry *entries;
-	uint32_t num_entries;
-	ssize_t array_size;
-	uint32_t current;
-};
-
-static void smbpasswd_search_end(struct pdb_search *search)
-{
-	struct smbpasswd_search_state *state = talloc_get_type_abort(
-		search->private_data, struct smbpasswd_search_state);
-	TALLOC_FREE(state);
-}
-
-static bool smbpasswd_search_next_entry(struct pdb_search *search,
-					struct samr_displayentry *entry)
-{
-	struct smbpasswd_search_state *state = talloc_get_type_abort(
-		search->private_data, struct smbpasswd_search_state);
-
-	if (state->current == state->num_entries) {
-		return false;
-	}
-
-	entry->idx = state->entries[state->current].idx;
-	entry->rid = state->entries[state->current].rid;
-	entry->acct_flags = state->entries[state->current].acct_flags;
-
-	entry->account_name = talloc_strdup(
-		search->mem_ctx, state->entries[state->current].account_name);
-	entry->fullname = talloc_strdup(
-		search->mem_ctx, state->entries[state->current].fullname);
-	entry->description = talloc_strdup(
-		search->mem_ctx, state->entries[state->current].description);
-
-	if ((entry->account_name == NULL) || (entry->fullname == NULL)
-	    || (entry->description == NULL)) {
-		DEBUG(0, ("talloc_strdup failed\n"));
-		return false;
-	}
-
-	state->current += 1;
-	return true;
-}
-
-static bool smbpasswd_search_users(struct pdb_methods *methods,
-				   struct pdb_search *search,
-				   uint32_t acct_flags)
-{
-	struct smbpasswd_privates *smbpasswd_state =
-		(struct smbpasswd_privates*)methods->private_data;
-
-	struct smbpasswd_search_state *search_state;
-	struct smb_passwd *pwd;
-	FILE *fp;
-
-	search_state = TALLOC_ZERO_P(search->mem_ctx,
-				     struct smbpasswd_search_state);
-	if (search_state == NULL) {
-		DEBUG(0, ("talloc failed\n"));
-		return false;
-	}
-	search_state->acct_flags = acct_flags;
-
-	fp = startsmbfilepwent(smbpasswd_state->smbpasswd_file, PWF_READ,
-			       &smbpasswd_state->pw_file_lock_depth);
-
-	if (fp == NULL) {
-		DEBUG(10, ("Unable to open smbpasswd file.\n"));
-		TALLOC_FREE(search_state);
-		return false;
-	}
-
-	while ((pwd = getsmbfilepwent(smbpasswd_state, fp)) != NULL) {
-		struct samr_displayentry entry;
-		struct samu *user;
-
-		if ((acct_flags != 0)
-		    && ((acct_flags & pwd->acct_ctrl) == 0)) {
-			continue;
-		}
-
-		user = samu_new(talloc_tos());
-		if (user == NULL) {
-			DEBUG(0, ("samu_new failed\n"));
-			break;
-		}
-
-		if (!build_sam_account(smbpasswd_state, user, pwd)) {
-			/* Already got debug msgs... */
-			break;
-		}
-
-		ZERO_STRUCT(entry);
-
-		entry.acct_flags = pdb_get_acct_ctrl(user);
-		sid_peek_rid(pdb_get_user_sid(user), &entry.rid);
-		entry.account_name = talloc_strdup(
-			search_state, pdb_get_username(user));
-		entry.fullname = talloc_strdup(
-			search_state, pdb_get_fullname(user));
-		entry.description = talloc_strdup(
-			search_state, pdb_get_acct_desc(user));
-
-		TALLOC_FREE(user);
-
-		if ((entry.account_name == NULL) || (entry.fullname == NULL)
-		    || (entry.description == NULL)) {
-			DEBUG(0, ("talloc_strdup failed\n"));
-			break;
-		}
-
-		ADD_TO_LARGE_ARRAY(search_state, struct samr_displayentry,
-				   entry, &search_state->entries,
-				   &search_state->num_entries,
-				   &search_state->array_size);
-	}
-
-	endsmbfilepwent(fp, &(smbpasswd_state->pw_file_lock_depth));
-
-	search->private_data = search_state;
-	search->next_entry = smbpasswd_search_next_entry;
-	search->search_end = smbpasswd_search_end;
-
-	return true;
-}
-
 static NTSTATUS pdb_init_smbpasswd( struct pdb_methods **pdb_method, const char *location )
 {
 	NTSTATUS nt_status;
@@ -1675,13 +1601,15 @@
 
 	(*pdb_method)->name = "smbpasswd";
 
+	(*pdb_method)->setsampwent = smbpasswd_setsampwent;
+	(*pdb_method)->endsampwent = smbpasswd_endsampwent;
+	(*pdb_method)->getsampwent = smbpasswd_getsampwent;
 	(*pdb_method)->getsampwnam = smbpasswd_getsampwnam;
 	(*pdb_method)->getsampwsid = smbpasswd_getsampwsid;
 	(*pdb_method)->add_sam_account = smbpasswd_add_sam_account;
 	(*pdb_method)->update_sam_account = smbpasswd_update_sam_account;
 	(*pdb_method)->delete_sam_account = smbpasswd_delete_sam_account;
 	(*pdb_method)->rename_sam_account = smbpasswd_rename_sam_account;
-	(*pdb_method)->search_users = smbpasswd_search_users;
 
 	(*pdb_method)->rid_algorithm = smbpasswd_rid_algorithm;
 

Modified: branches/samba/upstream/source/passdb/pdb_tdb.c
===================================================================
--- branches/samba/upstream/source/passdb/pdb_tdb.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/passdb/pdb_tdb.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,7 +10,7 @@
  * 
  * This program is free software; you can redistribute it and/or modify it under
  * the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 3 of the License, or (at your option)
+ * Software Foundation; either version 2 of the License, or (at your option)
  * any later version.
  * 
  * This program is distributed in the hope that it will be useful, but WITHOUT
@@ -19,7 +19,8 @@
  * more details.
  * 
  * You should have received a copy of the GNU General Public License along with
- * this program; if not, see <http://www.gnu.org/licenses/>.
+ * this program; if not, write to the Free Software Foundation, Inc., 675
+ * Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -41,14 +42,21 @@
 #define TDBSAM_VERSION_STRING	"INFO/version"
 #define PASSDB_FILE_NAME	"passdb.tdb"
 #define USERPREFIX		"USER_"
-#define USERPREFIX_LEN		5
 #define RIDPREFIX		"RID_"
 #define PRIVPREFIX		"PRIV_"
 
+struct pwent_list {
+	struct pwent_list *prev, *next;
+	TDB_DATA key;
+};
+static struct pwent_list *tdbsam_pwent_list;
+static BOOL pwent_initialized;
+
 /* GLOBAL TDB SAM CONTEXT */
 
-static struct db_context *db_sam;
-static char *tdbsam_filename;
+static TDB_CONTEXT *tdbsam;
+static int ref_count = 0;
+static pstring tdbsam_filename;
 
 /**********************************************************************
  Marshall/unmarshall struct samu structs.
@@ -61,7 +69,7 @@
 /*********************************************************************
 *********************************************************************/
 
-static bool init_sam_from_buffer_v0(struct samu *sampass, uint8 *buf, uint32 buflen)
+static BOOL init_sam_from_buffer_v0(struct samu *sampass, uint8 *buf, uint32 buflen)
 {
 
 	/* times are stored as 32bit integer
@@ -97,7 +105,7 @@
 	uint8	*lm_pw_ptr = NULL, *nt_pw_ptr = NULL;
 	uint32		len = 0;
 	uint32		lm_pw_len, nt_pw_len, hourslen;
-	bool ret = True;
+	BOOL ret = True;
 	
 	if(sampass == NULL || buf == NULL) {
 		DEBUG(0, ("init_sam_from_buffer_v0: NULL parameters found!\n"));
@@ -107,7 +115,7 @@
 /* TDB_FORMAT_STRING_V0       "ddddddBBBBBBBBBBBBddBBwdwdBwwd" */
 
 	/* unpack the buffer into variables */
-	len = tdb_unpack (buf, buflen, TDB_FORMAT_STRING_V0,
+	len = tdb_unpack ((char *)buf, buflen, TDB_FORMAT_STRING_V0,
 		&logon_time,						/* d */
 		&logoff_time,						/* d */
 		&kickoff_time,						/* d */
@@ -246,7 +254,7 @@
 /*********************************************************************
 *********************************************************************/
 
-static bool init_sam_from_buffer_v1(struct samu *sampass, uint8 *buf, uint32 buflen)
+static BOOL init_sam_from_buffer_v1(struct samu *sampass, uint8 *buf, uint32 buflen)
 {
 
 	/* times are stored as 32bit integer
@@ -283,7 +291,7 @@
 	uint8	*lm_pw_ptr = NULL, *nt_pw_ptr = NULL;
 	uint32		len = 0;
 	uint32		lm_pw_len, nt_pw_len, hourslen;
-	bool ret = True;
+	BOOL ret = True;
 	
 	if(sampass == NULL || buf == NULL) {
 		DEBUG(0, ("init_sam_from_buffer_v1: NULL parameters found!\n"));
@@ -293,7 +301,7 @@
 /* TDB_FORMAT_STRING_V1       "dddddddBBBBBBBBBBBBddBBwdwdBwwd" */
 
 	/* unpack the buffer into variables */
-	len = tdb_unpack (buf, buflen, TDB_FORMAT_STRING_V1,
+	len = tdb_unpack ((char *)buf, buflen, TDB_FORMAT_STRING_V1,
 		&logon_time,						/* d */
 		&logoff_time,						/* d */
 		&kickoff_time,						/* d */
@@ -435,7 +443,7 @@
 	return ret;
 }
 
-bool init_sam_from_buffer_v2(struct samu *sampass, uint8 *buf, uint32 buflen)
+BOOL init_sam_from_buffer_v2(struct samu *sampass, uint8 *buf, uint32 buflen)
 {
 
 	/* times are stored as 32bit integer
@@ -473,9 +481,9 @@
 	uint32		len = 0;
 	uint32		lm_pw_len, nt_pw_len, nt_pw_hist_len, hourslen;
 	uint32 pwHistLen = 0;
-	bool ret = True;
-	fstring tmp_string;
-	bool expand_explicit = lp_passdb_expand_explicit();
+	BOOL ret = True;
+	fstring tmpstring;
+	BOOL expand_explicit = lp_passdb_expand_explicit();
 	
 	if(sampass == NULL || buf == NULL) {
 		DEBUG(0, ("init_sam_from_buffer_v2: NULL parameters found!\n"));
@@ -485,7 +493,7 @@
 /* TDB_FORMAT_STRING_V2       "dddddddBBBBBBBBBBBBddBBBwwdBwwd" */
 
 	/* unpack the buffer into variables */
-	len = tdb_unpack (buf, buflen, TDB_FORMAT_STRING_V2,
+	len = tdb_unpack ((char *)buf, buflen, TDB_FORMAT_STRING_V2,
 		&logon_time,						/* d */
 		&logoff_time,						/* d */
 		&kickoff_time,						/* d */
@@ -539,12 +547,12 @@
 	pdb_set_fullname(sampass, fullname, PDB_SET);
 
 	if (homedir) {
-		fstrcpy( tmp_string, homedir );
+		fstrcpy( tmpstring, homedir );
 		if (expand_explicit) {
-			standard_sub_basic( username, domain, tmp_string,
-					    sizeof(tmp_string) );
+			standard_sub_basic( username, domain, tmpstring,
+					    sizeof(tmpstring) );
 		}
-		pdb_set_homedir(sampass, tmp_string, PDB_SET);
+		pdb_set_homedir(sampass, tmpstring, PDB_SET);
 	}
 	else {
 		pdb_set_homedir(sampass, 
@@ -559,12 +567,12 @@
 		pdb_set_dir_drive(sampass, lp_logon_drive(), PDB_DEFAULT );
 
 	if (logon_script) {
-		fstrcpy( tmp_string, logon_script );
+		fstrcpy( tmpstring, logon_script );
 		if (expand_explicit) {
-			standard_sub_basic( username, domain, tmp_string,
-					    sizeof(tmp_string) );
+			standard_sub_basic( username, domain, tmpstring,
+					    sizeof(tmpstring) );
 		}
-		pdb_set_logon_script(sampass, tmp_string, PDB_SET);
+		pdb_set_logon_script(sampass, tmpstring, PDB_SET);
 	}
 	else {
 		pdb_set_logon_script(sampass, 
@@ -574,12 +582,12 @@
 	}
 	
 	if (profile_path) {	
-		fstrcpy( tmp_string, profile_path );
+		fstrcpy( tmpstring, profile_path );
 		if (expand_explicit) {
-			standard_sub_basic( username, domain, tmp_string,
-					    sizeof(tmp_string) );
+			standard_sub_basic( username, domain, tmpstring,
+					    sizeof(tmpstring) );
 		}
-		pdb_set_profile_path(sampass, tmp_string, PDB_SET);
+		pdb_set_profile_path(sampass, tmpstring, PDB_SET);
 	} 
 	else {
 		pdb_set_profile_path(sampass, 
@@ -672,7 +680,7 @@
  Intialize a struct samu struct from a BYTE buffer of size len
  *********************************************************************/
 
-static bool init_sam_from_buffer(struct samu *sampass, uint8 *buf, uint32 buflen)
+static BOOL init_sam_from_buffer(struct samu *sampass, uint8 *buf, uint32 buflen)
 {
 	return init_sam_from_buffer_v3(sampass, buf, buflen);
 }
@@ -681,7 +689,7 @@
  Intialize a BYTE buffer from a struct samu struct
  *********************************************************************/
 
-static uint32 init_buffer_from_sam (uint8 **buf, struct samu *sampass, bool size_only)
+static uint32 init_buffer_from_sam (uint8 **buf, struct samu *sampass, BOOL size_only)
 {
 	return init_buffer_from_sam_v3(buf, sampass, size_only);
 }
@@ -690,198 +698,334 @@
  Intialize a BYTE buffer from a struct samu struct
  *********************************************************************/
 
-struct tdbsam_convert_state {
-	int32_t from;
-	bool success;
-};
-
-static int tdbsam_convert_one(struct db_record *rec, void *priv)
+static BOOL tdbsam_convert(int32 from) 
 {
-	struct tdbsam_convert_state *state =
-		(struct tdbsam_convert_state *)priv;
-	struct samu *user;
-	TDB_DATA data;
-	NTSTATUS status;
-	bool ret;
+	const char      *vstring = TDBSAM_VERSION_STRING;
+	const char      *prefix = USERPREFIX;
+	TDB_DATA 	data, key, old_key;
+	uint8		*buf = NULL;
+	BOOL 		ret;
 
-	if (rec->key.dsize < USERPREFIX_LEN) {
-		return 0;
-	}
-	if (strncmp((char *)rec->key.dptr, USERPREFIX, USERPREFIX_LEN) != 0) {
-		return 0;
-	}
+	/* handle a Samba upgrade */
+	tdb_lock_bystring(tdbsam, vstring);
+	
+	/* Enumerate all records and convert them */
+	key = tdb_firstkey(tdbsam);
 
-	user = samu_new(talloc_tos());
-	if (user == NULL) {
-		DEBUG(0,("tdbsam_convert: samu_new() failed!\n"));
-		state->success = false;
-		return -1;
+	while (key.dptr) {
+	
+		/* skip all non-USER entries (eg. RIDs) */
+		while ((key.dsize != 0) && (strncmp(key.dptr, prefix, strlen (prefix)))) {
+			old_key = key;
+			/* increment to next in line */
+			key = tdb_nextkey(tdbsam, key);
+			SAFE_FREE(old_key.dptr);
+		}
+	
+		if (key.dptr) {
+			struct samu *user = NULL;
+
+			/* read from tdbsam */
+			data = tdb_fetch(tdbsam, key);
+			if (!data.dptr) {
+				DEBUG(0,("tdbsam_convert: database entry not found: %s.\n",key.dptr));
+				return False;
+			}
+	
+			/* unpack the buffer from the former format */
+			if ( !(user = samu_new( NULL )) ) {
+				DEBUG(0,("tdbsam_convert: samu_new() failed!\n"));
+				SAFE_FREE( data.dptr );
+				return False;
+			}
+			DEBUG(10,("tdbsam_convert: Try unpacking a record with (key:%s) (version:%d)\n", key.dptr, from));
+			switch (from) {
+				case 0:
+					ret = init_sam_from_buffer_v0(user, (uint8 *)data.dptr, data.dsize);
+					break;
+				case 1:
+					ret = init_sam_from_buffer_v1(user, (uint8 *)data.dptr, data.dsize);
+					break;
+				case 2:
+					ret = init_sam_from_buffer_v2(user, (uint8 *)data.dptr, data.dsize);
+					break;
+				case 3:
+					ret = init_sam_from_buffer_v3(user, (uint8 *)data.dptr, data.dsize);
+					break;
+				default:
+					/* unknown tdbsam version */
+					ret = False;
+			}
+			if (!ret) {
+				DEBUG(0,("tdbsam_convert: Bad struct samu entry returned from TDB (key:%s) (version:%d)\n", key.dptr, from));
+				SAFE_FREE(data.dptr);
+				TALLOC_FREE(user );
+				return False;
+			}
+	
+			/* We're finished with the old data. */
+			SAFE_FREE(data.dptr);
+
+			/* pack from the buffer into the new format */
+			
+			DEBUG(10,("tdbsam_convert: Try packing a record (key:%s) (version:%d)\n", key.dptr, from));
+			data.dsize = init_buffer_from_sam (&buf, user, False);
+			TALLOC_FREE(user );
+			
+			if ( data.dsize == -1 ) {
+				DEBUG(0,("tdbsam_convert: cannot pack the struct samu into the new format\n"));
+				return False;
+			}
+			data.dptr = (char *)buf;
+			
+			/* Store the buffer inside the TDBSAM */
+			if (tdb_store(tdbsam, key, data, TDB_MODIFY) != TDB_SUCCESS) {
+				DEBUG(0,("tdbsam_convert: cannot store the struct samu (key:%s) in new format\n",key.dptr));
+				SAFE_FREE(data.dptr);
+				return False;
+			}
+			
+			SAFE_FREE(data.dptr);
+			
+			/* increment to next in line */
+			old_key = key;
+			key = tdb_nextkey(tdbsam, key);
+			SAFE_FREE(old_key.dptr);
+		}
+		
 	}
 
-	DEBUG(10,("tdbsam_convert: Try unpacking a record with (key:%s) "
-		  "(version:%d)\n", rec->key.dptr, state->from));
+	
+	/* upgrade finished */
+	tdb_store_int32(tdbsam, vstring, TDBSAM_VERSION);
+	tdb_unlock_bystring(tdbsam, vstring);
 
-	switch (state->from) {
-	case 0:
-		ret = init_sam_from_buffer_v0(user, (uint8 *)rec->value.dptr,
-					      rec->value.dsize);
-		break;
-	case 1:
-		ret = init_sam_from_buffer_v1(user, (uint8 *)rec->value.dptr,
-					      rec->value.dsize);
-		break;
-	case 2:
-		ret = init_sam_from_buffer_v2(user, (uint8 *)rec->value.dptr,
-					      rec->value.dsize);
-		break;
-	case 3:
-		ret = init_sam_from_buffer_v3(user, (uint8 *)rec->value.dptr,
-					      rec->value.dsize);
-		break;
-	default:
-		/* unknown tdbsam version */
-		ret = False;
+	return(True);	
+}
+
+/*********************************************************************
+ Open the tdbsam file based on the absolute path specified.
+ Uses a reference count to allow multiple open calls.
+*********************************************************************/
+
+static BOOL tdbsam_open( const char *name )
+{
+	int32	version;
+	
+	/* check if we are already open */
+	
+	if ( tdbsam ) {
+		ref_count++;
+		DEBUG(8,("tdbsam_open: Incrementing open reference count.  Ref count is now %d\n", 
+			ref_count));
+		return True;
 	}
-	if (!ret) {
-		DEBUG(0,("tdbsam_convert: Bad struct samu entry returned "
-			 "from TDB (key:%s) (version:%d)\n", rec->key.dptr,
-			 state->from));
-		TALLOC_FREE(user);
-		state->success = false;
-		return -1;
+	
+	SMB_ASSERT( ref_count == 0 );
+	
+	/* Try to open tdb passwd.  Create a new one if necessary */
+	
+	if (!(tdbsam = tdb_open_log(name, 0, TDB_DEFAULT, O_CREAT|O_RDWR, 0600))) {
+		DEBUG(0, ("tdbsam_open: Failed to open/create TDB passwd [%s]\n", name));
+		return False;
 	}
 
-	data.dsize = init_buffer_from_sam(&data.dptr, user, false);
-	TALLOC_FREE(user);
+	/* set the initial reference count - must be done before tdbsam_convert
+	   as that calls tdbsam_open()/tdbsam_close(). */
 
-	if (data.dsize == -1) {
-		DEBUG(0,("tdbsam_convert: cannot pack the struct samu into "
-			 "the new format\n"));
-		state->success = false;
-		return -1;
-	}
+	ref_count = 1;
 
-	status = rec->store(rec, data, TDB_MODIFY);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0, ("Could not store the new record: %s\n",
-			  nt_errstr(status)));
-		state->success = false;
-		return -1;
+	/* Check the version */
+	version = tdb_fetch_int32( tdbsam, TDBSAM_VERSION_STRING );
+	
+	if (version == -1) {
+		version = 0;	/* Version not found, assume version 0 */
 	}
-
-	return 0;
+	
+	/* Compare the version */
+	if (version > TDBSAM_VERSION) {
+		/* Version more recent than the latest known */ 
+		DEBUG(0, ("tdbsam_open: unknown version => %d\n", version));
+		tdb_close( tdbsam );
+		ref_count = 0;
+		return False;
+	} 
+	
+	
+	if ( version < TDBSAM_VERSION ) {	
+		DEBUG(1, ("tdbsam_open: Converting version %d database to version %d.\n", 
+			version, TDBSAM_VERSION));
+		
+		if ( !tdbsam_convert(version) ) {
+			DEBUG(0, ("tdbsam_open: Error when trying to convert tdbsam [%s]\n",name));
+			tdb_close(tdbsam);
+			ref_count = 0;
+			return False;
+		}
+			
+		DEBUG(3, ("TDBSAM converted successfully.\n"));
+	}
+	
+	DEBUG(4,("tdbsam_open: successfully opened %s\n", name ));	
+	
+	return True;
 }
 
-static bool tdbsam_convert(struct db_context *db, int32 from)
+/****************************************************************************
+ wrapper atound tdb_close() to handle the reference count
+****************************************************************************/
+
+void tdbsam_close( void )
 {
-	struct tdbsam_convert_state state;
-	int ret;
+	ref_count--;
+	
+	DEBUG(8,("tdbsam_close: Reference count is now %d.\n", ref_count));
 
-	state.from = from;
-	state.success = true;
-
-	if (db->transaction_start(db) != 0) {
-		DEBUG(0, ("Could not start transaction\n"));
-		return false;
+	SMB_ASSERT(ref_count >= 0 );
+	
+	if ( ref_count == 0 ) {
+		tdb_close( tdbsam );
+		tdbsam = NULL;
 	}
+	
+	return;
+}
 
-	ret = db->traverse(db, tdbsam_convert_one, &state);
-	if (ret < 0) {
-		DEBUG(0, ("traverse failed\n"));
-		goto cancel;
-	}
+/****************************************************************************
+ creates a list of user keys
+****************************************************************************/
 
-	if (!state.success) {
-		DEBUG(0, ("Converting records failed\n"));
-		goto cancel;
-	}
+static int tdbsam_traverse_setpwent(TDB_CONTEXT *t, TDB_DATA key, TDB_DATA data, void *state)
+{
+	const char *prefix = USERPREFIX;
+	int  prefixlen = strlen (prefix);
+	struct pwent_list *ptr;
+	
+	if ( strncmp(key.dptr, prefix, prefixlen) == 0 ) {
+		if ( !(ptr=SMB_MALLOC_P(struct pwent_list)) ) {
+			DEBUG(0,("tdbsam_traverse_setpwent: Failed to malloc new entry for list\n"));
+			
+			/* just return 0 and let the traversal continue */
+			return 0;
+		}
+		ZERO_STRUCTP(ptr);
+		
+		/* save a copy of the key */
+		
+		ptr->key.dptr = (char *)memdup( key.dptr, key.dsize );
+		if (!ptr->key.dptr) {
+			DEBUG(0,("tdbsam_traverse_setpwent: memdup failed\n"));
+			/* just return 0 and let the traversal continue */
+			SAFE_FREE(ptr);
+			return 0;
+		}
 
-	if (dbwrap_store_int32(db, TDBSAM_VERSION_STRING,
-			       TDBSAM_VERSION) != 0) {
-		DEBUG(0, ("Could not store tdbsam version\n"));
-		goto cancel;
+		ptr->key.dsize = key.dsize;
+		
+		DLIST_ADD( tdbsam_pwent_list, ptr );
+	
 	}
+	
+	return 0;
+}
 
-	if (db->transaction_commit(db) != 0) {
-		DEBUG(0, ("Could not commit transaction\n"));
-		goto cancel;
+/***************************************************************
+ Open the TDB passwd database for SAM account enumeration.
+ Save a list of user keys for iteration.
+****************************************************************/
+
+static NTSTATUS tdbsam_setsampwent(struct pdb_methods *my_methods, BOOL update, uint32 acb_mask)
+{
+	if ( !tdbsam_open( tdbsam_filename ) ) {
+		DEBUG(0,("tdbsam_getsampwnam: failed to open %s!\n", tdbsam_filename));
+		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	return true;
+	tdb_traverse( tdbsam, tdbsam_traverse_setpwent, NULL );
+	pwent_initialized = True;
 
- cancel:
-	if (db->transaction_cancel(db) != 0) {
-		smb_panic("transaction_cancel failed");
-	}
-
-	return false;
+	return NT_STATUS_OK;
 }
 
-/*********************************************************************
- Open the tdbsam file based on the absolute path specified.
- Uses a reference count to allow multiple open calls.
-*********************************************************************/
 
-static bool tdbsam_open( const char *name )
+/***************************************************************
+ End enumeration of the TDB passwd list.
+****************************************************************/
+
+static void tdbsam_endsampwent(struct pdb_methods *my_methods)
 {
-	int32	version;
-
-	/* check if we are already open */
-
-	if ( db_sam ) {
-		return true;
+	struct pwent_list *ptr, *ptr_next;
+	
+	/* close the tdb only if we have a valid pwent state */
+	
+	if ( pwent_initialized ) {
+		DEBUG(7, ("endtdbpwent: closed sam database.\n"));
+		tdbsam_close();
 	}
+	
+	/* clear out any remaining entries in the list */
+	
+	for ( ptr=tdbsam_pwent_list; ptr; ptr = ptr_next ) {
+		ptr_next = ptr->next;
+		DLIST_REMOVE( tdbsam_pwent_list, ptr );
+		SAFE_FREE( ptr->key.dptr);
+		SAFE_FREE( ptr );
+	}	
+	
+	pwent_initialized = False;
+}
 
-	/* Try to open tdb passwd.  Create a new one if necessary */
+/*****************************************************************
+ Get one struct samu from the TDB (next in line)
+*****************************************************************/
 
-	db_sam = db_open_trans(NULL, name, 0, TDB_DEFAULT, O_CREAT|O_RDWR, 0600);
-	if (db_sam == NULL) {
-		DEBUG(0, ("tdbsam_open: Failed to open/create TDB passwd "
-			  "[%s]\n", name));
-		return false;
-	}
+static NTSTATUS tdbsam_getsampwent(struct pdb_methods *my_methods, struct samu *user)
+{
+	NTSTATUS 		nt_status = NT_STATUS_UNSUCCESSFUL;
+	TDB_DATA 		data;
+	struct pwent_list	*pkey;
 
-	/* Check the version */
-	version = dbwrap_fetch_int32(db_sam, TDBSAM_VERSION_STRING);
-	if (version == -1) {
-		version = 0;	/* Version not found, assume version 0 */
+	if ( !user ) {
+		DEBUG(0,("tdbsam_getsampwent: struct samu is NULL.\n"));
+		return nt_status;
 	}
 
-	/* Compare the version */
-	if (version > TDBSAM_VERSION) {
-		/* Version more recent than the latest known */
-		DEBUG(0, ("tdbsam_open: unknown version => %d\n", version));
-		TALLOC_FREE(db_sam);
-		return false;
+	if ( !tdbsam_pwent_list ) {
+		DEBUG(4,("tdbsam_getsampwent: end of list\n"));
+		return nt_status;
 	}
+	
+	/* pull the next entry */
+		
+	pkey = tdbsam_pwent_list;
+	DLIST_REMOVE( tdbsam_pwent_list, pkey );
+	
+	data = tdb_fetch(tdbsam, pkey->key);
 
-	if ( version < TDBSAM_VERSION ) {
-		DEBUG(1, ("tdbsam_open: Converting version %d database to "
-			  "version %d.\n", version, TDBSAM_VERSION));
-
-		if ( !tdbsam_convert(db_sam, version) ) {
-			DEBUG(0, ("tdbsam_open: Error when trying to convert "
-				  "tdbsam [%s]\n",name));
-			TALLOC_FREE(db_sam);
-			return false;
-		}
-
-		DEBUG(3, ("TDBSAM converted successfully.\n"));
+	SAFE_FREE( pkey->key.dptr);
+	SAFE_FREE( pkey);
+	
+	if ( !data.dptr ) {
+		DEBUG(5,("pdb_getsampwent: database entry not found.  Was the user deleted?\n"));
+		return nt_status;
 	}
+  
+	if ( !init_sam_from_buffer(user, (unsigned char *)data.dptr, data.dsize) ) {
+		DEBUG(0,("pdb_getsampwent: Bad struct samu entry returned from TDB!\n"));
+	}
+	
+	SAFE_FREE( data.dptr );
 
-	DEBUG(4,("tdbsam_open: successfully opened %s\n", name ));
-
-	return true;
+	return NT_STATUS_OK;
 }
 
 /******************************************************************
  Lookup a name in the SAM TDB
 ******************************************************************/
 
-static NTSTATUS tdbsam_getsampwnam (struct pdb_methods *my_methods,
-				    struct samu *user, const char *sname)
+static NTSTATUS tdbsam_getsampwnam (struct pdb_methods *my_methods, struct samu *user, const char *sname)
 {
-	TDB_DATA 	data;
+	TDB_DATA 	data, key;
 	fstring 	keystr;
 	fstring		name;
 
@@ -896,35 +1040,41 @@
 
 	/* set search key */
 	slprintf(keystr, sizeof(keystr)-1, "%s%s", USERPREFIX, name);
+	key.dptr = keystr;
+	key.dsize = strlen(keystr) + 1;
 
 	/* open the database */
-
+		
 	if ( !tdbsam_open( tdbsam_filename ) ) {
 		DEBUG(0,("tdbsam_getsampwnam: failed to open %s!\n", tdbsam_filename));
 		return NT_STATUS_ACCESS_DENIED;
 	}
-
+	
 	/* get the record */
-
-	data = dbwrap_fetch_bystring(db_sam, talloc_tos(), keystr);
+	
+	data = tdb_fetch(tdbsam, key);
 	if (!data.dptr) {
 		DEBUG(5,("pdb_getsampwnam (TDB): error fetching database.\n"));
+		DEBUGADD(5, (" Error: %s\n", tdb_errorstr(tdbsam)));
 		DEBUGADD(5, (" Key: %s\n", keystr));
+		tdbsam_close();
 		return NT_STATUS_NO_SUCH_USER;
 	}
-
+  
   	/* unpack the buffer */
-
-	if (!init_sam_from_buffer(user, data.dptr, data.dsize)) {
+	
+	if (!init_sam_from_buffer(user, (unsigned char *)data.dptr, data.dsize)) {
 		DEBUG(0,("pdb_getsampwent: Bad struct samu entry returned from TDB!\n"));
 		SAFE_FREE(data.dptr);
+		tdbsam_close();
 		return NT_STATUS_NO_MEMORY;
 	}
-
+	
 	/* success */
-
-	TALLOC_FREE(data.dptr);
-
+	
+	SAFE_FREE(data.dptr);
+	tdbsam_close();
+	
 	return NT_STATUS_OK;
 }
 
@@ -932,11 +1082,10 @@
  Search by rid
  **************************************************************************/
 
-static NTSTATUS tdbsam_getsampwrid (struct pdb_methods *my_methods,
-				    struct samu *user, uint32 rid)
+static NTSTATUS tdbsam_getsampwrid (struct pdb_methods *my_methods, struct samu *user, uint32 rid)
 {
 	NTSTATUS                nt_status = NT_STATUS_UNSUCCESSFUL;
-	TDB_DATA 		data;
+	TDB_DATA 		data, key;
 	fstring 		keystr;
 	fstring			name;
 
@@ -944,82 +1093,93 @@
 		DEBUG(0,("pdb_getsampwrid: struct samu is NULL.\n"));
 		return nt_status;
 	}
-
+	
 	/* set search key */
-
+	
 	slprintf(keystr, sizeof(keystr)-1, "%s%.8x", RIDPREFIX, rid);
+	key.dptr = keystr;
+	key.dsize = strlen (keystr) + 1;
 
 	/* open the database */
-
+		
 	if ( !tdbsam_open( tdbsam_filename ) ) {
 		DEBUG(0,("tdbsam_getsampwnam: failed to open %s!\n", tdbsam_filename));
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
 	/* get the record */
-
-	data = dbwrap_fetch_bystring(db_sam, talloc_tos(), keystr);
+	
+	data = tdb_fetch (tdbsam, key);
 	if (!data.dptr) {
 		DEBUG(5,("pdb_getsampwrid (TDB): error looking up RID %d by key %s.\n", rid, keystr));
-		return NT_STATUS_UNSUCCESSFUL;
+		DEBUGADD(5, (" Error: %s\n", tdb_errorstr(tdbsam)));
+		nt_status = NT_STATUS_UNSUCCESSFUL;
+		goto done;
 	}
 
-	fstrcpy(name, (const char *)data.dptr);
-	TALLOC_FREE(data.dptr);
+	fstrcpy(name, data.dptr);
+	SAFE_FREE(data.dptr);
+	
+	nt_status = tdbsam_getsampwnam (my_methods, user, name);
 
-	return tdbsam_getsampwnam (my_methods, user, name);
+ done:
+	/* cleanup */
+	
+	tdbsam_close();
+		
+	return nt_status;
 }
 
-static NTSTATUS tdbsam_getsampwsid(struct pdb_methods *my_methods,
-				   struct samu * user, const DOM_SID *sid)
+static NTSTATUS tdbsam_getsampwsid(struct pdb_methods *my_methods, struct samu * user, const DOM_SID *sid)
 {
 	uint32 rid;
-
+	
 	if ( !sid_peek_check_rid(get_global_sam_sid(), sid, &rid) )
 		return NT_STATUS_UNSUCCESSFUL;
 
 	return tdbsam_getsampwrid(my_methods, user, rid);
 }
 
-static bool tdb_delete_samacct_only( struct samu *sam_pass )
+static BOOL tdb_delete_samacct_only( struct samu *sam_pass )
 {
+	TDB_DATA 	key;
 	fstring 	keystr;
 	fstring		name;
-	NTSTATUS status;
 
 	fstrcpy(name, pdb_get_username(sam_pass));
 	strlower_m(name);
-
+	
   	/* set the search key */
-
+	
 	slprintf(keystr, sizeof(keystr)-1, "%s%s", USERPREFIX, name);
-
+	key.dptr = keystr;
+	key.dsize = strlen (keystr) + 1;
+	
 	/* it's outaa here!  8^) */
-
-	status = dbwrap_delete_bystring(db_sam, keystr);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(5, ("Error deleting entry from tdb passwd "
-			  "database: %s!\n", nt_errstr(status)));
-		return false;
+	
+	if (tdb_delete(tdbsam, key) != TDB_SUCCESS) {
+		DEBUG(5, ("Error deleting entry from tdb passwd database!\n"));
+		DEBUGADD(5, (" Error: %s\n", tdb_errorstr(tdbsam)));
+		return False;
 	}
-
-	return true;
+	
+	return True;
 }
 
 /***************************************************************************
  Delete a struct samu records for the username and RID key
 ****************************************************************************/
 
-static NTSTATUS tdbsam_delete_sam_account(struct pdb_methods *my_methods,
-					  struct samu *sam_pass)
+static NTSTATUS tdbsam_delete_sam_account(struct pdb_methods *my_methods, struct samu *sam_pass)
 {
 	NTSTATUS        nt_status = NT_STATUS_UNSUCCESSFUL;
+	TDB_DATA 	key;
 	fstring 	keystr;
 	uint32		rid;
 	fstring		name;
-
+	
 	/* open the database */
-
+		
 	if ( !tdbsam_open( tdbsam_filename ) ) {
 		DEBUG(0,("tdbsam_delete_sam_account: failed to open %s!\n",
 			 tdbsam_filename));
@@ -1028,52 +1188,44 @@
 
 	fstrcpy(name, pdb_get_username(sam_pass));
 	strlower_m(name);
-
+	
   	/* set the search key */
 
 	slprintf(keystr, sizeof(keystr)-1, "%s%s", USERPREFIX, name);
-
+	key.dptr = keystr;
+	key.dsize = strlen (keystr) + 1;
+	
 	rid = pdb_get_user_rid(sam_pass);
 
 	/* it's outaa here!  8^) */
 
-	if (db_sam->transaction_start(db_sam) != 0) {
-		DEBUG(0, ("Could not start transaction\n"));
-		return NT_STATUS_UNSUCCESSFUL;
+	if ( tdb_delete(tdbsam, key) != TDB_SUCCESS ) {
+		DEBUG(5, ("Error deleting entry from tdb passwd database!\n"));
+		DEBUGADD(5, (" Error: %s\n", tdb_errorstr(tdbsam)));
+		nt_status = NT_STATUS_UNSUCCESSFUL;
+		goto done;
 	}
 
-	nt_status = dbwrap_delete_bystring(db_sam, keystr);
-	if (!NT_STATUS_IS_OK(nt_status)) {
-		DEBUG(5, ("Error deleting entry from tdb passwd "
-			  "database: %s!\n", nt_errstr(nt_status)));
-		goto cancel;
-	}
-
   	/* set the search key */
-
+	
 	slprintf(keystr, sizeof(keystr)-1, "%s%.8x", RIDPREFIX, rid);
+	key.dptr = keystr;
+	key.dsize = strlen (keystr) + 1;
 
 	/* it's outaa here!  8^) */
-
-	nt_status = dbwrap_delete_bystring(db_sam, keystr);
-	if (!NT_STATUS_IS_OK(nt_status)) {
-		DEBUG(5, ("Error deleting entry from tdb rid "
-			  "database: %s!\n", nt_errstr(nt_status)));
-		goto cancel;
+	
+	if ( tdb_delete(tdbsam, key) != TDB_SUCCESS ) {
+		DEBUG(5, ("Error deleting entry from tdb rid database!\n"));
+		DEBUGADD(5, (" Error: %s\n", tdb_errorstr(tdbsam)));
+		nt_status = NT_STATUS_UNSUCCESSFUL;
+		goto done;
 	}
 
-	if (db_sam->transaction_commit(db_sam) != 0) {
-		DEBUG(0, ("Could not commit transaction\n"));
-		goto cancel;
-	}
-
-	return NT_STATUS_OK;
-
- cancel:
-	if (db_sam->transaction_cancel(db_sam) != 0) {
-		smb_panic("transaction_cancel failed");
-	}
-
+	nt_status = NT_STATUS_OK;
+	
+ done:
+	tdbsam_close();
+	
 	return nt_status;
 }
 
@@ -1082,80 +1234,84 @@
  Update the TDB SAM account record only
  Assumes that the tdbsam is already open 
 ****************************************************************************/
-static bool tdb_update_samacct_only( struct samu* newpwd, int flag )
+static BOOL tdb_update_samacct_only( struct samu* newpwd, int flag )
 {
-	TDB_DATA 	data;
+	TDB_DATA 	key, data;
 	uint8		*buf = NULL;
 	fstring 	keystr;
 	fstring		name;
-	bool		ret = false;
-	NTSTATUS status;
+	BOOL		ret = True;
 
 	/* copy the struct samu struct into a BYTE buffer for storage */
-
+	
 	if ( (data.dsize=init_buffer_from_sam (&buf, newpwd, False)) == -1 ) {
 		DEBUG(0,("tdb_update_sam: ERROR - Unable to copy struct samu info BYTE buffer!\n"));
+		ret = False;
 		goto done;
 	}
-	data.dptr = buf;
+	data.dptr = (char *)buf;
 
 	fstrcpy(name, pdb_get_username(newpwd));
 	strlower_m(name);
-
-	DEBUG(5, ("Storing %saccount %s with RID %d\n",
-		  flag == TDB_INSERT ? "(new) " : "", name,
+	
+	DEBUG(5, ("Storing %saccount %s with RID %d\n", 
+		  flag == TDB_INSERT ? "(new) " : "", name, 
 		  pdb_get_user_rid(newpwd)));
 
   	/* setup the USER index key */
 	slprintf(keystr, sizeof(keystr)-1, "%s%s", USERPREFIX, name);
+	key.dptr = keystr;
+	key.dsize = strlen(keystr) + 1;
 
 	/* add the account */
-
-	status = dbwrap_store_bystring(db_sam, keystr, data, flag);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0, ("Unable to modify passwd TDB: %s!",
-			  nt_errstr(status)));
+	
+	if ( tdb_store(tdbsam, key, data, flag) != TDB_SUCCESS ) {
+		DEBUG(0, ("Unable to modify passwd TDB!"));
+		DEBUGADD(0, (" Error: %s", tdb_errorstr(tdbsam)));
+		DEBUGADD(0, (" occured while storing the main record (%s)\n",
+			     keystr));
+		ret = False;
 		goto done;
 	}
 
-	ret = true;
-
-done:
+done:	
 	/* cleanup */
 	SAFE_FREE(buf);
+	
 	return ret;
 }
 
 /***************************************************************************
  Update the TDB SAM RID record only
- Assumes that the tdbsam is already open
+ Assumes that the tdbsam is already open 
 ****************************************************************************/
-static bool tdb_update_ridrec_only( struct samu* newpwd, int flag )
+static BOOL tdb_update_ridrec_only( struct samu* newpwd, int flag )
 {
-	TDB_DATA 	data;
+	TDB_DATA 	key, data;
 	fstring 	keystr;
 	fstring		name;
-	NTSTATUS status;
 
 	fstrcpy(name, pdb_get_username(newpwd));
 	strlower_m(name);
 
 	/* setup RID data */
-	data = string_term_tdb_data(name);
+	data.dsize = strlen(name) + 1;
+	data.dptr = name;
 
 	/* setup the RID index key */
-	slprintf(keystr, sizeof(keystr)-1, "%s%.8x", RIDPREFIX,
-		 pdb_get_user_rid(newpwd));
-
+	slprintf(keystr, sizeof(keystr)-1, "%s%.8x", RIDPREFIX,  pdb_get_user_rid(newpwd));
+	key.dptr = keystr;
+	key.dsize = strlen (keystr) + 1;
+	
 	/* add the reference */
-	status = dbwrap_store_bystring(db_sam, keystr, data, flag);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0, ("Unable to modify TDB passwd: %s!\n",
-			  nt_errstr(status)));
-		return false;
+	if (tdb_store(tdbsam, key, data, flag) != TDB_SUCCESS) {
+		DEBUG(0, ("Unable to modify TDB passwd !"));
+		DEBUGADD(0, (" Error: %s\n", tdb_errorstr(tdbsam)));
+		DEBUGADD(0, (" occured while storing the RID index (%s)\n", keystr));
+		return False;
 	}
 
-	return true;
+	return True;
 
 }
 
@@ -1163,44 +1319,43 @@
  Update the TDB SAM
 ****************************************************************************/
 
-static bool tdb_update_sam(struct pdb_methods *my_methods, struct samu* newpwd,
-			   int flag)
+static BOOL tdb_update_sam(struct pdb_methods *my_methods, struct samu* newpwd, int flag)
 {
+	BOOL            result = True;
+
+	/* invalidate the existing TDB iterator if it is open */
+	
+	tdbsam_endsampwent( my_methods );
+	
+#if 0 
+	if ( !pdb_get_group_rid(newpwd) ) {
+		DEBUG (0,("tdb_update_sam: Failing to store a struct samu for [%s] "
+			"without a primary group RID\n", pdb_get_username(newpwd)));
+		return False;
+	}
+#endif
+
 	if (!pdb_get_user_rid(newpwd)) {
-		DEBUG(0,("tdb_update_sam: struct samu (%s) with no RID!\n",
-			 pdb_get_username(newpwd)));
+		DEBUG(0,("tdb_update_sam: struct samu (%s) with no RID!\n", pdb_get_username(newpwd)));
 		return False;
 	}
 
 	/* open the database */
-
+		
 	if ( !tdbsam_open( tdbsam_filename ) ) {
 		DEBUG(0,("tdbsam_getsampwnam: failed to open %s!\n", tdbsam_filename));
 		return False;
 	}
-
-	if (db_sam->transaction_start(db_sam) != 0) {
-		DEBUG(0, ("Could not start transaction\n"));
-		return false;
+	
+	if ( !tdb_update_samacct_only(newpwd, flag) || !tdb_update_ridrec_only(newpwd, flag)) {
+		result = False;
 	}
 
-	if (!tdb_update_samacct_only(newpwd, flag)
-	    || !tdb_update_ridrec_only(newpwd, flag)) {
-		goto cancel;
-	}
+	/* cleanup */
 
-	if (db_sam->transaction_commit(db_sam) != 0) {
-		DEBUG(0, ("Could not commit transaction\n"));
-		goto cancel;
-	}
-
-	return true;
-
- cancel:
-	if (db_sam->transaction_cancel(db_sam) != 0) {
-		smb_panic("transaction_cancel failed");
-	}
-	return false;
+	tdbsam_close();
+	
+	return result;	
 }
 
 /***************************************************************************
@@ -1237,58 +1392,58 @@
  - unlock the new user record
 ***************************************************************************/
 static NTSTATUS tdbsam_rename_sam_account(struct pdb_methods *my_methods,
-					  struct samu *old_acct,
+					  struct samu *old_acct, 
 					  const char *newname)
 {
 	struct samu      *new_acct = NULL;
-	char *rename_script = NULL;
+	pstring          rename_script;
+	BOOL             interim_account = False;
 	int              rename_ret;
 	fstring          oldname_lower;
 	fstring          newname_lower;
 
 	/* can't do anything without an external script */
-
-	if ( !(new_acct = samu_new( talloc_tos() )) ) {
-		return NT_STATUS_NO_MEMORY;
+	
+	pstrcpy(rename_script, lp_renameuser_script() );
+	if ( ! *rename_script ) {
+		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	rename_script = talloc_strdup(new_acct, lp_renameuser_script());
-	if (!rename_script) {
-		TALLOC_FREE(new_acct);
+	/* invalidate the existing TDB iterator if it is open */
+	
+	tdbsam_endsampwent( my_methods );
+
+	if ( !(new_acct = samu_new( NULL )) ) {
 		return NT_STATUS_NO_MEMORY;
 	}
-	if (!*rename_script) {
-		TALLOC_FREE(new_acct);
-		return NT_STATUS_ACCESS_DENIED;
-	}
-
-	if ( !pdb_copy_sam_account(new_acct, old_acct)
-		|| !pdb_set_username(new_acct, newname, PDB_CHANGED))
+	
+	if ( !pdb_copy_sam_account(new_acct, old_acct) 
+		|| !pdb_set_username(new_acct, newname, PDB_CHANGED)) 
 	{
-		TALLOC_FREE(new_acct);
+		TALLOC_FREE(new_acct );
 		return NT_STATUS_NO_MEMORY;
 	}
 
 	/* open the database */
+		
 	if ( !tdbsam_open( tdbsam_filename ) ) {
-		DEBUG(0, ("tdbsam_getsampwnam: failed to open %s!\n",
-			  tdbsam_filename));
-		TALLOC_FREE(new_acct);
+		DEBUG(0,("tdbsam_getsampwnam: failed to open %s!\n", tdbsam_filename));
+		TALLOC_FREE(new_acct );
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	if (db_sam->transaction_start(db_sam) != 0) {
-		DEBUG(0, ("Could not start transaction\n"));
-		TALLOC_FREE(new_acct);
-		return NT_STATUS_ACCESS_DENIED;
-
-	}
-
 	/* add the new account and lock it */
+	
 	if ( !tdb_update_samacct_only(new_acct, TDB_INSERT) ) {
-		goto cancel;
+		goto done;
 	}
+	
+	interim_account = True;
 
+	if ( tdb_lock_bystring_with_timeout(tdbsam, newname, 30) == -1 ) {
+		goto done;
+	}
+
 	/* Rename the posix user.  Follow the semantics of _samr_create_user()
 	   so that we lower case the posix name but preserve the case in passdb */
 
@@ -1298,69 +1453,53 @@
 	fstrcpy( newname_lower, newname );
 	strlower_m( newname_lower );
 
-	rename_script = talloc_string_sub2(new_acct,
-				rename_script,
-				"%unew",
-				newname_lower,
-				true,
-				false,
-				true);
-	if (!rename_script) {
-		goto cancel;
-	}
-	rename_script = talloc_string_sub2(new_acct,
-				rename_script,
-				"%uold",
-				oldname_lower,
-				true,
-				false,
-				true);
-	if (!rename_script) {
-		goto cancel;
-	}
+	string_sub2(rename_script, "%unew", newname_lower, sizeof(pstring), 
+		True, False, True);
+	string_sub2(rename_script, "%uold", oldname_lower, sizeof(pstring), 
+		True, False, True);
 	rename_ret = smbrun(rename_script, NULL);
 
-	DEBUG(rename_ret ? 0 : 3,("Running the command `%s' gave %d\n",
-				rename_script, rename_ret));
+	DEBUG(rename_ret ? 0 : 3,("Running the command `%s' gave %d\n", rename_script, rename_ret));
 
-	if (rename_ret != 0) {
-		goto cancel;
+	if (rename_ret == 0) {
+		smb_nscd_flush_user_cache();
 	}
 
-	smb_nscd_flush_user_cache();
+	if (rename_ret) {
+		goto done; 
+	}
 
 	/* rewrite the rid->username record */
-
+	
 	if ( !tdb_update_ridrec_only( new_acct, TDB_MODIFY) ) {
-		goto cancel;
+		goto done;
 	}
+	interim_account = False;
+	tdb_unlock_bystring( tdbsam, newname );
 
 	tdb_delete_samacct_only( old_acct );
-
-	if (db_sam->transaction_commit(db_sam) != 0) {
-		/*
-		 * Ok, we're screwed. We've changed the posix account, but
-		 * could not adapt passdb.tdb. Shall we change the posix
-		 * account back?
-		 */
-		DEBUG(0, ("transaction_commit failed\n"));
-		goto cancel;
-	}
-
+	
+	tdbsam_close();
+	
 	TALLOC_FREE(new_acct );
 	return NT_STATUS_OK;
 
- cancel:
-	if (db_sam->transaction_cancel(db_sam) != 0) {
-		smb_panic("transaction_cancel failed");
+done:	
+	/* cleanup */
+	if (interim_account) {
+		tdb_unlock_bystring(tdbsam, newname);
+		tdb_delete_samacct_only(new_acct);
 	}
-
-	TALLOC_FREE(new_acct);
-
+	
+	tdbsam_close();
+	
+	if (new_acct)
+		TALLOC_FREE(new_acct);
+	
 	return NT_STATUS_ACCESS_DENIED;	
 }
 
-static bool tdbsam_rid_algorithm(struct pdb_methods *methods)
+static BOOL tdbsam_rid_algorithm(struct pdb_methods *methods)
 {
 	return False;
 }
@@ -1381,7 +1520,7 @@
  interested in the RID counter.
 *****************************************************************************/
 
-static bool init_idmap_tdb(TDB_CONTEXT *tdb)
+static BOOL init_idmap_tdb(TDB_CONTEXT *tdb)
 {
 	int32 version;
 
@@ -1414,13 +1553,13 @@
 	return True;
 }
 
-static bool tdbsam_new_rid(struct pdb_methods *methods, uint32 *prid)
+static BOOL tdbsam_new_rid(struct pdb_methods *methods, uint32 *prid)
 {
 	TDB_CONTEXT *tdb;
 	uint32 rid;
-	bool ret = False;
+	BOOL ret = False;
 
-	tdb = tdb_open_log(state_path("winbindd_idmap.tdb"), 0,
+	tdb = tdb_open_log(lock_path("winbindd_idmap.tdb"), 0,
 			   TDB_DEFAULT, O_RDWR | O_CREAT, 0644);
 
 	if (tdb == NULL) {
@@ -1445,142 +1584,12 @@
 
  done:
 	if ((tdb != NULL) && (tdb_close(tdb) != 0)) {
-		smb_panic("tdb_close(idmap_tdb) failed");
+		smb_panic("tdb_close(idmap_tdb) failed\n");
 	}
 
 	return ret;
 }
 
-struct tdbsam_search_state {
-	struct pdb_methods *methods;
-	uint32_t acct_flags;
-
-	uint32_t *rids;
-	uint32_t num_rids;
-	ssize_t array_size;
-	uint32_t current;
-};
-
-static int tdbsam_collect_rids(struct db_record *rec, void *private_data)
-{
-	struct tdbsam_search_state *state = talloc_get_type_abort(
-		private_data, struct tdbsam_search_state);
-	size_t prefixlen = strlen(RIDPREFIX);
-	uint32 rid;
-
-	if ((rec->key.dsize < prefixlen)
-	    || (strncmp((char *)rec->key.dptr, RIDPREFIX, prefixlen))) {
-		return 0;
-	}
-
-	rid = strtoul((char *)rec->key.dptr+prefixlen, NULL, 16);
-
-	ADD_TO_LARGE_ARRAY(state, uint32, rid, &state->rids, &state->num_rids,
-			   &state->array_size);
-
-	return 0;
-}
-
-static void tdbsam_search_end(struct pdb_search *search)
-{
-	struct tdbsam_search_state *state = talloc_get_type_abort(
-		search->private_data, struct tdbsam_search_state);
-	TALLOC_FREE(state);
-}
-
-static bool tdbsam_search_next_entry(struct pdb_search *search,
-				     struct samr_displayentry *entry)
-{
-	struct tdbsam_search_state *state = talloc_get_type_abort(
-		search->private_data, struct tdbsam_search_state);
-	struct samu *user = NULL;
-	NTSTATUS status;
-	uint32_t rid;
-
- again:
-	TALLOC_FREE(user);
-	user = samu_new(talloc_tos());
-	if (user == NULL) {
-		DEBUG(0, ("samu_new failed\n"));
-		return false;
-	}
-
-	if (state->current == state->num_rids) {
-		return false;
-	}
-
-	rid = state->rids[state->current++];
-
-	status = tdbsam_getsampwrid(state->methods, user, rid);
-
-	if (NT_STATUS_EQUAL(status, NT_STATUS_NO_SUCH_USER)) {
-		/*
-		 * Someone has deleted that user since we listed the RIDs
-		 */
-		goto again;
-	}
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10, ("tdbsam_getsampwrid failed: %s\n",
-			   nt_errstr(status)));
-		TALLOC_FREE(user);
-		return false;
-	}
-
-	if ((state->acct_flags != 0) &&
-	    ((state->acct_flags & pdb_get_acct_ctrl(user)) == 0)) {
-		goto again;
-	}
-
-	entry->acct_flags = pdb_get_acct_ctrl(user);
-	entry->rid = rid;
-	entry->account_name = talloc_strdup(
-		search->mem_ctx, pdb_get_username(user));
-	entry->fullname = talloc_strdup(
-		search->mem_ctx, pdb_get_fullname(user));
-	entry->description = talloc_strdup(
-		search->mem_ctx, pdb_get_acct_desc(user));
-
-	TALLOC_FREE(user);
-
-	if ((entry->account_name == NULL) || (entry->fullname == NULL)
-	    || (entry->description == NULL)) {
-		DEBUG(0, ("talloc_strdup failed\n"));
-		return false;
-	}
-
-	return true;
-}
-
-static bool tdbsam_search_users(struct pdb_methods *methods,
-				struct pdb_search *search,
-				uint32 acct_flags)
-{
-	struct tdbsam_search_state *state;
-
-	if (!tdbsam_open(tdbsam_filename)) {
-		DEBUG(0,("tdbsam_getsampwnam: failed to open %s!\n",
-			 tdbsam_filename));
-		return false;
-	}
-
-	state = TALLOC_ZERO_P(search->mem_ctx, struct tdbsam_search_state);
-	if (state == NULL) {
-		DEBUG(0, ("talloc failed\n"));
-		return false;
-	}
-	state->acct_flags = acct_flags;
-	state->methods = methods;
-
-	db_sam->traverse_read(db_sam, tdbsam_collect_rids, state);
-
-	search->private_data = state;
-	search->next_entry = tdbsam_search_next_entry;
-	search->search_end = tdbsam_search_end;
-
-	return true;
-}
-
 /*********************************************************************
  Initialize the tdb sam backend.  Setup the dispath table of methods,
  open the tdb, etc...
@@ -1589,7 +1598,7 @@
 static NTSTATUS pdb_init_tdbsam(struct pdb_methods **pdb_method, const char *location)
 {
 	NTSTATUS nt_status;
-	char *tdbfile = NULL;
+	pstring tdbfile;
 	const char *pfile = location;
 
 	if (!NT_STATUS_IS_OK(nt_status = make_pdb_method( pdb_method ))) {
@@ -1598,34 +1607,29 @@
 
 	(*pdb_method)->name = "tdbsam";
 
+	(*pdb_method)->setsampwent = tdbsam_setsampwent;
+	(*pdb_method)->endsampwent = tdbsam_endsampwent;
+	(*pdb_method)->getsampwent = tdbsam_getsampwent;
 	(*pdb_method)->getsampwnam = tdbsam_getsampwnam;
 	(*pdb_method)->getsampwsid = tdbsam_getsampwsid;
 	(*pdb_method)->add_sam_account = tdbsam_add_sam_account;
 	(*pdb_method)->update_sam_account = tdbsam_update_sam_account;
 	(*pdb_method)->delete_sam_account = tdbsam_delete_sam_account;
 	(*pdb_method)->rename_sam_account = tdbsam_rename_sam_account;
-	(*pdb_method)->search_users = tdbsam_search_users;
 
 	(*pdb_method)->rid_algorithm = tdbsam_rid_algorithm;
 	(*pdb_method)->new_rid = tdbsam_new_rid;
 
 	/* save the path for later */
-
-	if (!location) {
-		if (asprintf(&tdbfile, "%s/%s", lp_private_dir(),
-			     PASSDB_FILE_NAME) < 0) {
-			return NT_STATUS_NO_MEMORY;
-		}
+			   
+	if ( !location ) {
+		pstr_sprintf( tdbfile, "%s/%s", lp_private_dir(), PASSDB_FILE_NAME );
 		pfile = tdbfile;
 	}
-	tdbsam_filename = SMB_STRDUP(pfile);
-	if (!tdbsam_filename) {
-		return NT_STATUS_NO_MEMORY;
-	}
-	SAFE_FREE(tdbfile);
+	pstrcpy( tdbsam_filename, pfile );
 
 	/* no private data */
-
+	
 	(*pdb_method)->private_data      = NULL;
 	(*pdb_method)->free_private_data = NULL;
 

Modified: branches/samba/upstream/source/passdb/secrets.c
===================================================================
--- branches/samba/upstream/source/passdb/secrets.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/passdb/secrets.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    Copyright (C) Andrew Tridgell 1992-2001
    Copyright (C) Andrew Bartlett      2002
@@ -7,16 +7,17 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /* the Samba secrets database stores any generated, private information
@@ -27,57 +28,49 @@
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_PASSDB
 
-static struct db_context *db_ctx;
+static TDB_CONTEXT *tdb;
 
 /* Urrrg. global.... */
-bool global_machine_password_needs_changing;
+BOOL global_machine_password_needs_changing;
 
 /**
  * Use a TDB to store an incrementing random seed.
  *
  * Initialised to the current pid, the very first time Samba starts,
- * and incremented by one each time it is needed.
- *
+ * and incremented by one each time it is needed.  
+ * 
  * @note Not called by systems with a working /dev/urandom.
  */
-static void get_rand_seed(int *new_seed)
+static void get_rand_seed(int *new_seed) 
 {
 	*new_seed = sys_getpid();
-	if (db_ctx) {
-		dbwrap_change_int32_atomic(db_ctx, "INFO/random_seed",
-					   new_seed, 1);
+	if (tdb) {
+		tdb_change_int32_atomic(tdb, "INFO/random_seed", new_seed, 1);
 	}
 }
 
 /* open up the secrets database */
-bool secrets_init(void)
+BOOL secrets_init(void)
 {
-	char *fname = NULL;
+	pstring fname;
 	unsigned char dummy;
 
-	if (db_ctx != NULL)
+	if (tdb)
 		return True;
 
-	fname = talloc_asprintf(talloc_tos(), "%s/secrets.tdb",
-				lp_private_dir());
-	if (fname == NULL) {
-		return false;
-	}
+	pstrcpy(fname, lp_private_dir());
+	pstrcat(fname,"/secrets.tdb");
 
-	db_ctx = db_open_trans(NULL, fname, 0,
-			       TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
+	tdb = tdb_open_log(fname, 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
 
-	if (db_ctx == NULL) {
+	if (!tdb) {
 		DEBUG(0,("Failed to open %s\n", fname));
-		TALLOC_FREE(fname);
 		return False;
 	}
 
-	TALLOC_FREE(fname);
-
 	/**
-	 * Set a reseed function for the crypto random generator
-	 *
+	 * Set a reseed function for the crypto random generator 
+	 * 
 	 * This avoids a problem where systems without /dev/urandom
 	 * could send the same challenge to multiple clients
 	 */
@@ -89,124 +82,73 @@
 	return True;
 }
 
-struct db_context *secrets_db_ctx(void)
-{
-	if (!secrets_init()) {
-		return NULL;
-	}
-
-	return db_ctx;
-}
-
-/*
- * close secrets.tdb
- */
-void secrets_shutdown(void)
-{
-	TALLOC_FREE(db_ctx);
-}
-
 /* read a entry from the secrets database - the caller must free the result
    if size is non-null then the size of the entry is put in there
  */
 void *secrets_fetch(const char *key, size_t *size)
 {
 	TDB_DATA dbuf;
-	void *result;
-
-	if (!secrets_init()) {
+	secrets_init();
+	if (!tdb)
 		return NULL;
-	}
-
-	if (db_ctx->fetch(db_ctx, talloc_tos(), string_tdb_data(key),
-			  &dbuf) != 0) {
-		return NULL;
-	}
-
-	result = memdup(dbuf.dptr, dbuf.dsize);
-	if (result == NULL) {
-		return NULL;
-	}
-	TALLOC_FREE(dbuf.dptr);
-
-	if (size) {
+	dbuf = tdb_fetch(tdb, string_tdb_data(key));
+	if (size)
 		*size = dbuf.dsize;
-	}
-
-	return result;
+	return dbuf.dptr;
 }
 
-/* store a secrets entry
+/* store a secrets entry 
  */
-bool secrets_store(const char *key, const void *data, size_t size)
+BOOL secrets_store(const char *key, const void *data, size_t size)
 {
-	NTSTATUS status;
-
-	if (!secrets_init()) {
-		return false;
-	}
-
-	status = dbwrap_trans_store(db_ctx, string_tdb_data(key),
-				    make_tdb_data((const uint8 *)data, size),
-				    TDB_REPLACE);
-	return NT_STATUS_IS_OK(status);
+	secrets_init();
+	if (!tdb)
+		return False;
+	return tdb_trans_store(tdb, string_tdb_data(key),
+			       make_tdb_data((const char *)data, size),
+			       TDB_REPLACE) == 0;
 }
 
 
 /* delete a secets database entry
  */
-bool secrets_delete(const char *key)
+BOOL secrets_delete(const char *key)
 {
-	NTSTATUS status;
-	if (!secrets_init()) {
-		return false;
-	}
-
-	status = dbwrap_trans_delete(db_ctx, string_tdb_data(key));
-
-	return NT_STATUS_IS_OK(status);
+	secrets_init();
+	if (!tdb)
+		return False;
+	return tdb_delete(tdb, string_tdb_data(key)) == 0;
 }
 
-/**
- * Form a key for fetching the domain sid
- *
- * @param domain domain name
- *
- * @return keystring
- **/
-static const char *domain_sid_keystr(const char *domain)
+BOOL secrets_store_domain_sid(const char *domain, const DOM_SID *sid)
 {
-	char *keystr;
+	fstring key;
+	BOOL ret;
 
-	keystr = talloc_asprintf_strupper_m(talloc_tos(), "%s/%s",
-					    SECRETS_DOMAIN_SID, domain);
-	SMB_ASSERT(keystr != NULL);
-	return keystr;
-}
+	slprintf(key, sizeof(key)-1, "%s/%s", SECRETS_DOMAIN_SID, domain);
+	strupper_m(key);
+	ret = secrets_store(key, sid, sizeof(DOM_SID));
 
-bool secrets_store_domain_sid(const char *domain, const DOM_SID *sid)
-{
-	bool ret;
-
-	ret = secrets_store(domain_sid_keystr(domain), sid, sizeof(DOM_SID));
-
 	/* Force a re-query, in case we modified our domain */
 	if (ret)
 		reset_global_sam_sid();
 	return ret;
 }
 
-bool secrets_fetch_domain_sid(const char *domain, DOM_SID *sid)
+BOOL secrets_fetch_domain_sid(const char *domain, DOM_SID *sid)
 {
 	DOM_SID *dyn_sid;
+	fstring key;
 	size_t size = 0;
 
-	dyn_sid = (DOM_SID *)secrets_fetch(domain_sid_keystr(domain), &size);
+	slprintf(key, sizeof(key)-1, "%s/%s", SECRETS_DOMAIN_SID, domain);
+	strupper_m(key);
+	dyn_sid = (DOM_SID *)secrets_fetch(key, &size);
 
 	if (dyn_sid == NULL)
 		return False;
 
-	if (size != sizeof(DOM_SID)) {
+	if (size != sizeof(DOM_SID)) { 
 		SAFE_FREE(dyn_sid);
 		return False;
 	}
@@ -216,7 +158,7 @@
 	return True;
 }
 
-bool secrets_store_domain_guid(const char *domain, struct GUID *guid)
+BOOL secrets_store_domain_guid(const char *domain, struct GUID *guid)
 {
 	fstring key;
 
@@ -225,7 +167,7 @@
 	return secrets_store(key, guid, sizeof(struct GUID));
 }
 
-bool secrets_fetch_domain_guid(const char *domain, struct GUID *guid)
+BOOL secrets_fetch_domain_guid(const char *domain, struct GUID *guid)
 {
 	struct GUID *dyn_guid;
 	fstring key;
@@ -248,7 +190,7 @@
 		}
 	}
 
-	if (size != sizeof(struct GUID)) {
+	if (size != sizeof(struct GUID)) { 
 		DEBUG(1,("UUID size %d is wrong!\n", (int)size));
 		SAFE_FREE(dyn_guid);
 		return False;
@@ -260,73 +202,20 @@
 }
 
 /**
- * Form a key for fetching the machine trust account sec channel type
- *
- * @param domain domain name
- *
- * @return keystring
- **/
-static const char *machine_sec_channel_type_keystr(const char *domain)
-{
-	char *keystr;
-
-	keystr = talloc_asprintf_strupper_m(talloc_tos(), "%s/%s",
-					    SECRETS_MACHINE_SEC_CHANNEL_TYPE,
-					    domain);
-	SMB_ASSERT(keystr != NULL);
-	return keystr;
-}
-
-/**
- * Form a key for fetching the machine trust account last change time
- *
- * @param domain domain name
- *
- * @return keystring
- **/
-static const char *machine_last_change_time_keystr(const char *domain)
-{
-	char *keystr;
-
-	keystr = talloc_asprintf_strupper_m(talloc_tos(), "%s/%s",
-					    SECRETS_MACHINE_LAST_CHANGE_TIME,
-					    domain);
-	SMB_ASSERT(keystr != NULL);
-	return keystr;
-}
-
-
-/**
  * Form a key for fetching the machine trust account password
  *
  * @param domain domain name
  *
- * @return keystring
- **/
-static const char *machine_password_keystr(const char *domain)
-{
-	char *keystr;
-
-	keystr = talloc_asprintf_strupper_m(talloc_tos(), "%s/%s",
-					    SECRETS_MACHINE_PASSWORD, domain);
-	SMB_ASSERT(keystr != NULL);
-	return keystr;
-}
-
-/**
- * Form a key for fetching the machine trust account password
- *
- * @param domain domain name
- *
  * @return stored password's key
  **/
 static const char *trust_keystr(const char *domain)
 {
-	char *keystr;
+	static fstring keystr;
 
-	keystr = talloc_asprintf_strupper_m(talloc_tos(), "%s/%s",
-					    SECRETS_MACHINE_ACCT_PASS, domain);
-	SMB_ASSERT(keystr != NULL);
+	slprintf(keystr,sizeof(keystr)-1,"%s/%s", 
+		 SECRETS_MACHINE_ACCT_PASS, domain);
+	strupper_m(keystr);
+
 	return keystr;
 }
 
@@ -339,12 +228,11 @@
  **/
 static char *trustdom_keystr(const char *domain)
 {
-	char *keystr;
+	static pstring keystr;
 
-	keystr = talloc_asprintf_strupper_m(talloc_tos(), "%s/%s",
-					    SECRETS_DOMTRUST_ACCT_PASS,
-					    domain);
-	SMB_ASSERT(keystr != NULL);
+	pstr_sprintf(keystr, "%s/%s", SECRETS_DOMTRUST_ACCT_PASS, domain);
+	strupper_m(keystr);
+		
 	return keystr;
 }
 
@@ -352,23 +240,25 @@
  Lock the trust password entry.
 ************************************************************************/
 
-void *secrets_get_trust_account_lock(TALLOC_CTX *mem_ctx, const char *domain)
+BOOL secrets_lock_trust_account_password(const char *domain, BOOL dolock)
 {
-	if (!secrets_init()) {
-		return NULL;
-	}
+	if (!tdb)
+		return False;
 
-	return db_ctx->fetch_locked(
-		db_ctx, mem_ctx, string_term_tdb_data(trust_keystr(domain)));
+	if (dolock)
+		return (tdb_lock_bystring(tdb, trust_keystr(domain)) == 0);
+	else
+		tdb_unlock_bystring(tdb, trust_keystr(domain));
+	return True;
 }
 
 /************************************************************************
  Routine to get the default secure channel type for trust accounts
 ************************************************************************/
 
-uint32 get_default_sec_channel(void)
+uint32 get_default_sec_channel(void) 
 {
-	if (lp_server_role() == ROLE_DOMAIN_BDC ||
+	if (lp_server_role() == ROLE_DOMAIN_BDC || 
 	    lp_server_role() == ROLE_DOMAIN_PDC) {
 		return SEC_CHAN_BDC;
 	} else {
@@ -383,7 +273,7 @@
  the above secrets_lock_trust_account_password().
 ************************************************************************/
 
-bool secrets_fetch_trust_account_password_legacy(const char *domain,
+BOOL secrets_fetch_trust_account_password_legacy(const char *domain,
 						 uint8 ret_pwd[16],
 						 time_t *pass_last_set_time,
 						 uint32 *channel)
@@ -396,10 +286,9 @@
 		DEBUG(5, ("secrets_fetch failed!\n"));
 		return False;
 	}
-
+	
 	if (size != sizeof(*pass)) {
 		DEBUG(0, ("secrets were of incorrect size!\n"));
-		SAFE_FREE(pass);
 		return False;
 	}
 
@@ -430,7 +319,7 @@
  the above secrets_lock_trust_account_password().
 ************************************************************************/
 
-bool secrets_fetch_trust_account_password(const char *domain, uint8 ret_pwd[16],
+BOOL secrets_fetch_trust_account_password(const char *domain, uint8 ret_pwd[16],
 					  time_t *pass_last_set_time,
 					  uint32 *channel)
 {
@@ -459,42 +348,26 @@
  *
  * @return length of the packed representation of the whole structure
  **/
-static size_t tdb_sid_pack(uint8 *pack_buf, int bufsize, DOM_SID* sid)
+static size_t tdb_sid_pack(char* pack_buf, int bufsize, DOM_SID* sid)
 {
 	int idx;
 	size_t len = 0;
-	uint8 *p = pack_buf;
-	int remaining_space = pack_buf ? bufsize : 0;
-
-	if (!sid) {
-		return -1;
-	}
-
-	len += tdb_pack(p, remaining_space, "bb", sid->sid_rev_num,
+	
+	if (!sid || !pack_buf) return -1;
+	
+	len += tdb_pack(pack_buf + len, bufsize - len, "bb", sid->sid_rev_num,
 	                sid->num_auths);
-	if (pack_buf) {
-		p = pack_buf + len;
-		remaining_space = bufsize - len;
-	}
-
+	
 	for (idx = 0; idx < 6; idx++) {
-		len += tdb_pack(p, remaining_space, "b",
+		len += tdb_pack(pack_buf + len, bufsize - len, "b",
 				sid->id_auth[idx]);
-		if (pack_buf) {
-			p = pack_buf + len;
-			remaining_space = bufsize - len;
-		}
 	}
-
+	
 	for (idx = 0; idx < MAXSUBAUTHS; idx++) {
-		len += tdb_pack(p, remaining_space, "d",
+		len += tdb_pack(pack_buf + len, bufsize - len, "d",
 				sid->sub_auths[idx]);
-		if (pack_buf) {
-			p = pack_buf + len;
-			remaining_space = bufsize - len;
-		}
 	}
-
+	
 	return len;
 }
 
@@ -507,25 +380,25 @@
  *
  * @return size of structure unpacked from buffer
  **/
-static size_t tdb_sid_unpack(uint8 *pack_buf, int bufsize, DOM_SID* sid)
+static size_t tdb_sid_unpack(char* pack_buf, int bufsize, DOM_SID* sid)
 {
 	int idx, len = 0;
-
+	
 	if (!sid || !pack_buf) return -1;
 
 	len += tdb_unpack(pack_buf + len, bufsize - len, "bb",
 	                  &sid->sid_rev_num, &sid->num_auths);
-
+			  
 	for (idx = 0; idx < 6; idx++) {
 		len += tdb_unpack(pack_buf + len, bufsize - len, "b",
 				  &sid->id_auth[idx]);
 	}
-
+	
 	for (idx = 0; idx < MAXSUBAUTHS; idx++) {
 		len += tdb_unpack(pack_buf + len, bufsize - len, "d",
 				  &sid->sub_auths[idx]);
 	}
-
+	
 	return len;
 }
 
@@ -538,47 +411,26 @@
  *
  * @return length of the packed representation of the whole structure
  **/
-static size_t tdb_trusted_dom_pass_pack(uint8 *pack_buf, int bufsize,
+static size_t tdb_trusted_dom_pass_pack(char* pack_buf, int bufsize,
 					TRUSTED_DOM_PASS* pass)
 {
 	int idx, len = 0;
-	uint8 *p = pack_buf;
-	int remaining_space = pack_buf ? bufsize : 0;
-
-	if (!pass) {
-		return -1;
-	}
-
+	
+	if (!pack_buf || !pass) return -1;
+	
 	/* packing unicode domain name and password */
-	len += tdb_pack(p, remaining_space, "d",
+	len += tdb_pack(pack_buf + len, bufsize - len, "d",
 			pass->uni_name_len);
-	if (pack_buf) {
-		p = pack_buf + len;
-		remaining_space = bufsize - len;
-	}
-
-	for (idx = 0; idx < 32; idx++) {
-		len += tdb_pack(p, remaining_space, "w",
+	
+	for (idx = 0; idx < 32; idx++)
+		len +=  tdb_pack(pack_buf + len, bufsize - len, "w",
 				 pass->uni_name[idx]);
-		if (pack_buf) {
-			p = pack_buf + len;
-			remaining_space = bufsize - len;
-		}
-	}
-
-	len += tdb_pack(p, remaining_space, "dPd", pass->pass_len,
+	
+	len += tdb_pack(pack_buf + len, bufsize - len, "dPd", pass->pass_len,
 	                     pass->pass, pass->mod_time);
-	if (pack_buf) {
-		p = pack_buf + len;
-		remaining_space = bufsize - len;
-	}
 
 	/* packing SID structure */
-	len += tdb_sid_pack(p, remaining_space, &pass->domain_sid);
-	if (pack_buf) {
-		p = pack_buf + len;
-		remaining_space = bufsize - len;
-	}
+	len += tdb_sid_pack(pack_buf + len, bufsize - len, &pass->domain_sid);
 
 	return len;
 }
@@ -593,53 +445,48 @@
  *
  * @return size of structure unpacked from buffer
  **/
-static size_t tdb_trusted_dom_pass_unpack(uint8 *pack_buf, int bufsize,
+static size_t tdb_trusted_dom_pass_unpack(char* pack_buf, int bufsize,
 					  TRUSTED_DOM_PASS* pass)
 {
 	int idx, len = 0;
-	char *passp = NULL;
-
+	
 	if (!pack_buf || !pass) return -1;
 
 	/* unpack unicode domain name and plaintext password */
 	len += tdb_unpack(pack_buf, bufsize - len, "d", &pass->uni_name_len);
-
+	
 	for (idx = 0; idx < 32; idx++)
 		len +=  tdb_unpack(pack_buf + len, bufsize - len, "w",
 				   &pass->uni_name[idx]);
 
 	len += tdb_unpack(pack_buf + len, bufsize - len, "dPd",
-			  &pass->pass_len, &passp, &pass->mod_time);
-	if (passp) {
-		fstrcpy(pass->pass, passp);
-	}
-	SAFE_FREE(passp);
-
+			  &pass->pass_len, &pass->pass, &pass->mod_time);
+	
 	/* unpack domain sid */
 	len += tdb_sid_unpack(pack_buf + len, bufsize - len,
 			      &pass->domain_sid);
-
-	return len;
+	
+	return len;	
 }
 
 /************************************************************************
  Routine to get account password to trusted domain
 ************************************************************************/
 
-bool secrets_fetch_trusted_domain_password(const char *domain, char** pwd,
+BOOL secrets_fetch_trusted_domain_password(const char *domain, char** pwd,
                                            DOM_SID *sid, time_t *pass_last_set_time)
 {
 	struct trusted_dom_pass pass;
 	size_t size = 0;
-
+	
 	/* unpacking structures */
-	uint8 *pass_buf;
+	char* pass_buf;
 	int pass_len = 0;
 
 	ZERO_STRUCT(pass);
 
 	/* fetching trusted domain password structure */
-	if (!(pass_buf = (uint8 *)secrets_fetch(trustdom_keystr(domain),
+	if (!(pass_buf = (char *)secrets_fetch(trustdom_keystr(domain),
 					       &size))) {
 		DEBUG(5, ("secrets_fetch failed!\n"));
 		return False;
@@ -653,8 +500,8 @@
 		DEBUG(5, ("Invalid secrets size. Unpacked data doesn't match trusted_dom_pass structure.\n"));
 		return False;
 	}
-
-	/* the trust's password */
+			
+	/* the trust's password */	
 	if (pwd) {
 		*pwd = SMB_STRDUP(pass.pass);
 		if (!*pwd) {
@@ -667,7 +514,7 @@
 
 	/* domain sid */
 	if (sid != NULL) sid_copy(sid, &pass.domain_sid);
-
+		
 	return True;
 }
 
@@ -681,16 +528,16 @@
  * @return true if succeeded
  **/
 
-bool secrets_store_trusted_domain_password(const char* domain, const char* pwd,
+BOOL secrets_store_trusted_domain_password(const char* domain, const char* pwd,
                                            const DOM_SID *sid)
 {
 	smb_ucs2_t *uni_dom_name;
-	bool ret;
 
 	/* packing structures */
-	uint8 *pass_buf = NULL;
+	pstring pass_buf;
 	int pass_len = 0;
-
+	int pass_buf_len = sizeof(pass_buf);
+	
 	struct trusted_dom_pass pass;
 	ZERO_STRUCT(pass);
 
@@ -699,7 +546,7 @@
 			  domain));
 		return False;
 	}
-
+	
 	strncpy_w(pass.uni_name, uni_dom_name, sizeof(pass.uni_name) - 1);
 	pass.uni_name_len = strlen_w(uni_dom_name)+1;
 	SAFE_FREE(uni_dom_name);
@@ -713,74 +560,52 @@
 
 	/* domain sid */
 	sid_copy(&pass.domain_sid, sid);
+	
+	pass_len = tdb_trusted_dom_pass_pack(pass_buf, pass_buf_len, &pass);
 
-	/* Calculate the length. */
-	pass_len = tdb_trusted_dom_pass_pack(NULL, 0, &pass);
-	pass_buf = SMB_MALLOC_ARRAY(uint8, pass_len);
-	if (!pass_buf) {
-		return false;
-	}
-	pass_len = tdb_trusted_dom_pass_pack(pass_buf, pass_len, &pass);
-	ret = secrets_store(trustdom_keystr(domain), (void *)pass_buf,
-			pass_len);
-	SAFE_FREE(pass_buf);
-	return ret;
+	return secrets_store(trustdom_keystr(domain), (void *)&pass_buf, pass_len);
 }
 
 /************************************************************************
- Routine to delete the plaintext machine account password
-************************************************************************/
-
-bool secrets_delete_machine_password(const char *domain)
-{
-	return secrets_delete(machine_password_keystr(domain));
-}
-
-/************************************************************************
- Routine to delete the plaintext machine account password, sec channel type and
- last change time from secrets database
-************************************************************************/
-
-bool secrets_delete_machine_password_ex(const char *domain)
-{
-	if (!secrets_delete(machine_password_keystr(domain))) {
-		return false;
-	}
-	if (!secrets_delete(machine_sec_channel_type_keystr(domain))) {
-		return false;
-	}
-	return secrets_delete(machine_last_change_time_keystr(domain));
-}
-
-/************************************************************************
- Routine to delete the domain sid
-************************************************************************/
-
-bool secrets_delete_domain_sid(const char *domain)
-{
-	return secrets_delete(domain_sid_keystr(domain));
-}
-
-/************************************************************************
  Routine to set the plaintext machine account password for a realm
 the password is assumed to be a null terminated ascii string
 ************************************************************************/
 
-bool secrets_store_machine_password(const char *pass, const char *domain, uint32 sec_channel)
+BOOL secrets_store_machine_password(const char *pass, const char *domain, uint32 sec_channel)
 {
-	bool ret;
+	char *key = NULL;
+	BOOL ret;
 	uint32 last_change_time;
 	uint32 sec_channel_type;
 
-	ret = secrets_store(machine_password_keystr(domain), pass, strlen(pass)+1);
+	asprintf(&key, "%s/%s", SECRETS_MACHINE_PASSWORD, domain);
+	if (!key) 
+		return False;
+	strupper_m(key);
+
+	ret = secrets_store(key, pass, strlen(pass)+1);
+	SAFE_FREE(key);
+
 	if (!ret)
 		return ret;
+	
+	asprintf(&key, "%s/%s", SECRETS_MACHINE_LAST_CHANGE_TIME, domain);
+	if (!key) 
+		return False;
+	strupper_m(key);
 
 	SIVAL(&last_change_time, 0, time(NULL));
-	ret = secrets_store(machine_last_change_time_keystr(domain), &last_change_time, sizeof(last_change_time));
+	ret = secrets_store(key, &last_change_time, sizeof(last_change_time));
+	SAFE_FREE(key);
 
+	asprintf(&key, "%s/%s", SECRETS_MACHINE_SEC_CHANNEL_TYPE, domain);
+	if (!key) 
+		return False;
+	strupper_m(key);
+
 	SIVAL(&sec_channel_type, 0, sec_channel);
-	ret = secrets_store(machine_sec_channel_type_keystr(domain), &sec_channel_type, sizeof(sec_channel_type));
+	ret = secrets_store(key, &sec_channel_type, sizeof(sec_channel_type));
+	SAFE_FREE(key);
 
 	return ret;
 }
@@ -790,61 +615,170 @@
  the password is assumed to be a null terminated ascii string.
 ************************************************************************/
 
-char *secrets_fetch_machine_password(const char *domain,
+char *secrets_fetch_machine_password(const char *domain, 
 				     time_t *pass_last_set_time,
 				     uint32 *channel)
 {
+	char *key = NULL;
 	char *ret;
-	ret = (char *)secrets_fetch(machine_password_keystr(domain), NULL);
-
+	asprintf(&key, "%s/%s", SECRETS_MACHINE_PASSWORD, domain);
+	strupper_m(key);
+	ret = (char *)secrets_fetch(key, NULL);
+	SAFE_FREE(key);
+	
 	if (pass_last_set_time) {
 		size_t size;
 		uint32 *last_set_time;
-		last_set_time = (unsigned int *)secrets_fetch(machine_last_change_time_keystr(domain), &size);
+		asprintf(&key, "%s/%s", SECRETS_MACHINE_LAST_CHANGE_TIME, domain);
+		strupper_m(key);
+		last_set_time = (unsigned int *)secrets_fetch(key, &size);
 		if (last_set_time) {
 			*pass_last_set_time = IVAL(last_set_time,0);
 			SAFE_FREE(last_set_time);
 		} else {
 			*pass_last_set_time = 0;
 		}
+		SAFE_FREE(key);
 	}
-
+	
 	if (channel) {
 		size_t size;
 		uint32 *channel_type;
-		channel_type = (unsigned int *)secrets_fetch(machine_sec_channel_type_keystr(domain), &size);
+		asprintf(&key, "%s/%s", SECRETS_MACHINE_SEC_CHANNEL_TYPE, domain);
+		strupper_m(key);
+		channel_type = (unsigned int *)secrets_fetch(key, &size);
 		if (channel_type) {
 			*channel = IVAL(channel_type,0);
 			SAFE_FREE(channel_type);
 		} else {
 			*channel = get_default_sec_channel();
 		}
+		SAFE_FREE(key);
 	}
-
+	
 	return ret;
 }
 
+BOOL is_trusted_domain_situation(const char *domain_name)
+{
+	return IS_DC &&
+		lp_allow_trusted_domains() &&
+		!strequal(domain_name, lp_workgroup());
+}
+ 
+/*******************************************************************
+ Wrapper around retrieving the clear text trust account password.
+ appropriate account name is stored in account_name.
+ Caller must free password, but not account_name.
+*******************************************************************/
+
+BOOL get_trust_pw_clear(const char *domain, char **ret_pwd,
+			const char **account_name, uint32 *channel)
+{
+	char *pwd;
+	time_t last_set_time;
+
+	/* if we are a DC and this is not our domain, then lookup an account
+	 * for the domain trust */
+
+	if (is_trusted_domain_situation(domain)) {
+		if (!secrets_fetch_trusted_domain_password(domain, ret_pwd,
+							   NULL, &last_set_time))
+		{
+			DEBUG(0, ("get_trust_pw: could not fetch trust "
+				"account password for trusted domain %s\n",
+				domain));
+			return False;
+		}
+
+		if (channel != NULL) {
+			*channel = SEC_CHAN_DOMAIN;
+		}
+
+		if (account_name != NULL) {
+			*account_name = lp_workgroup();
+		}
+
+		return True;
+	}
+
+	/* Just get the account for the requested domain. In the future this
+	 * might also cover to be member of more than one domain. */
+
+	pwd = secrets_fetch_machine_password(domain, &last_set_time, channel);
+
+	if (pwd != NULL) {
+		*ret_pwd = pwd;
+		if (account_name != NULL) {
+			*account_name = global_myname();
+		}
+
+		return True;
+	}
+
+	DEBUG(5, ("get_trust_pw_clear: could not fetch clear text trust "
+		  "account password for domain %s\n", domain));
+	return False;
+}
+
+/*******************************************************************
+ Wrapper around retrieving the trust account password.
+ appropriate account name is stored in account_name.
+*******************************************************************/
+
+BOOL get_trust_pw_hash(const char *domain, uint8 ret_pwd[16],
+		       const char **account_name, uint32 *channel)
+{
+	char *pwd = NULL;
+	time_t last_set_time;
+
+	if (get_trust_pw_clear(domain, &pwd, account_name, channel)) {
+		E_md4hash(pwd, ret_pwd);
+		SAFE_FREE(pwd);
+		return True;
+	} else if (is_trusted_domain_situation(domain)) {
+		return False;
+	}
+
+	/* as a fallback, try to get the hashed pwd directly from the tdb... */
+
+	if (secrets_fetch_trust_account_password_legacy(domain, ret_pwd,
+							&last_set_time,
+							channel))
+	{
+		if (account_name != NULL) {
+			*account_name = global_myname();
+		}
+
+		return True;
+	}
+
+	DEBUG(5, ("get_trust_pw_hash: could not fetch trust account "
+		"password for domain %s\n", domain));
+	return False;
+}
+
 /************************************************************************
  Routine to delete the password for trusted domain
 ************************************************************************/
 
-bool trusted_domain_password_delete(const char *domain)
+BOOL trusted_domain_password_delete(const char *domain)
 {
 	return secrets_delete(trustdom_keystr(domain));
 }
 
-bool secrets_store_ldap_pw(const char* dn, char* pw)
+BOOL secrets_store_ldap_pw(const char* dn, char* pw)
 {
 	char *key = NULL;
-	bool ret;
-
+	BOOL ret;
+	
 	if (asprintf(&key, "%s/%s", SECRETS_LDAP_BIND_PW, dn) < 0) {
 		DEBUG(0, ("secrets_store_ldap_pw: asprintf failed!\n"));
 		return False;
 	}
-
+		
 	ret = secrets_store(key, pw, strlen(pw)+1);
-
+	
 	SAFE_FREE(key);
 	return ret;
 }
@@ -853,18 +787,18 @@
  Find the ldap password.
 ******************************************************************/
 
-bool fetch_ldap_pw(char **dn, char** pw)
+BOOL fetch_ldap_pw(char **dn, char** pw)
 {
 	char *key = NULL;
 	size_t size = 0;
-
+	
 	*dn = smb_xstrdup(lp_ldap_admin_dn());
-
+	
 	if (asprintf(&key, "%s/%s", SECRETS_LDAP_BIND_PW, *dn) < 0) {
 		SAFE_FREE(*dn);
 		DEBUG(0, ("fetch_ldap_pw: asprintf failed!\n"));
 	}
-
+	
 	*pw=(char *)secrets_fetch(key, &size);
 	SAFE_FREE(key);
 
@@ -874,7 +808,7 @@
 	        char* old_style_key = SMB_STRDUP(*dn);
 		char *data;
 		fstring old_style_pw;
-
+		
 		if (!old_style_key) {
 			DEBUG(0, ("fetch_ldap_pw: strdup failed!\n"));
 			return False;
@@ -882,13 +816,12 @@
 
 		for (p=old_style_key; *p; p++)
 			if (*p == ',') *p = '/';
-
+	
 		data=(char *)secrets_fetch(old_style_key, &size);
-		if ((data == NULL) || (size < sizeof(old_style_pw))) {
+		if (!size && size < sizeof(old_style_pw)) {
 			DEBUG(0,("fetch_ldap_pw: neither ldap secret retrieved!\n"));
 			SAFE_FREE(old_style_key);
 			SAFE_FREE(*dn);
-			SAFE_FREE(data);
 			return False;
 		}
 
@@ -902,7 +835,7 @@
 			DEBUG(0,("fetch_ldap_pw: ldap secret could not be upgraded!\n"));
 			SAFE_FREE(old_style_key);
 			SAFE_FREE(*dn);
-			return False;
+			return False;			
 		}
 		if (!secrets_delete(old_style_key)) {
 			DEBUG(0,("fetch_ldap_pw: old ldap secret could not be deleted!\n"));
@@ -910,112 +843,163 @@
 
 		SAFE_FREE(old_style_key);
 
-		*pw = smb_xstrdup(old_style_pw);
+		*pw = smb_xstrdup(old_style_pw);		
 	}
-
+	
 	return True;
 }
 
 /**
  * Get trusted domains info from secrets.tdb.
- **/
+ **/ 
 
-struct list_trusted_domains_state {
-	uint32 num_domains;
-	struct trustdom_info **domains;
-};
-
-static int list_trusted_domain(struct db_record *rec, void *private_data)
+NTSTATUS secrets_trusted_domains(TALLOC_CTX *mem_ctx, uint32 *num_domains,
+				 struct trustdom_info ***domains)
 {
-	const size_t prefix_len = strlen(SECRETS_DOMTRUST_ACCT_PASS);
-	size_t packed_size = 0;
-	struct trusted_dom_pass pass;
-	struct trustdom_info *dom_info;
+	TDB_LIST_NODE *keys, *k;
+	char *pattern;
+	TALLOC_CTX *tmp_ctx;
 
-	struct list_trusted_domains_state *state =
-		(struct list_trusted_domains_state *)private_data;
-
-	if ((rec->key.dsize < prefix_len)
-	    || (strncmp((char *)rec->key.dptr, SECRETS_DOMTRUST_ACCT_PASS,
-			prefix_len) != 0)) {
-		return 0;
+	if (!(tmp_ctx = talloc_new(mem_ctx))) {
+		return NT_STATUS_NO_MEMORY;
 	}
 
-	packed_size = tdb_trusted_dom_pass_unpack(
-		rec->value.dptr, rec->value.dsize, &pass);
-
-	if (rec->value.dsize != packed_size) {
-		DEBUG(2, ("Secrets record is invalid!\n"));
-		return 0;
+	if (!secrets_init()) return NT_STATUS_ACCESS_DENIED;
+	
+	/* generate searching pattern */
+	pattern = talloc_asprintf(tmp_ctx, "%s/*", SECRETS_DOMTRUST_ACCT_PASS);
+	if (pattern == NULL) {
+		DEBUG(0, ("secrets_trusted_domains: talloc_asprintf() "
+			  "failed!\n"));
+		TALLOC_FREE(tmp_ctx);
+		return NT_STATUS_NO_MEMORY;
 	}
 
-	if (pass.domain_sid.num_auths != 4) {
-		DEBUG(0, ("SID %s is not a domain sid, has %d "
-			  "auths instead of 4\n",
-			  sid_string_dbg(&pass.domain_sid),
-			  pass.domain_sid.num_auths));
-		return 0;
-	}
+	*num_domains = 0;
 
-	if (!(dom_info = TALLOC_P(state->domains, struct trustdom_info))) {
-		DEBUG(0, ("talloc failed\n"));
-		return 0;
-	}
+	/*
+	 * Make sure that a talloc context for the trustdom_info structs
+	 * exists
+	 */
 
-	if (pull_ucs2_talloc(dom_info, &dom_info->name,
-			     pass.uni_name) == (size_t)-1) {
-		DEBUG(2, ("pull_ucs2_talloc failed\n"));
-		TALLOC_FREE(dom_info);
-		return 0;
+	if (!(*domains = TALLOC_ARRAY(mem_ctx, struct trustdom_info *, 1))) {
+		TALLOC_FREE(tmp_ctx);
+		return NT_STATUS_NO_MEMORY;
 	}
 
-	sid_copy(&dom_info->sid, &pass.domain_sid);
+	/* fetching trusted domains' data and collecting them in a list */
+	keys = tdb_search_keys(tdb, pattern);
 
-	ADD_TO_ARRAY(state->domains, struct trustdom_info *, dom_info,
-		     &state->domains, &state->num_domains);
+	/* searching for keys in secrets db -- way to go ... */
+	for (k = keys; k; k = k->next) {
+		char *packed_pass;
+		size_t size = 0, packed_size = 0;
+		struct trusted_dom_pass pass;
+		char *secrets_key;
+		struct trustdom_info *dom_info;
+		
+		/* important: ensure null-termination of the key string */
+		secrets_key = talloc_strndup(tmp_ctx,
+					     k->node_key.dptr,
+					     k->node_key.dsize);
+		if (!secrets_key) {
+			DEBUG(0, ("strndup failed!\n"));
+			tdb_search_list_free(keys);
+			TALLOC_FREE(tmp_ctx);
+			return NT_STATUS_NO_MEMORY;
+		}
 
-	if (state->domains == NULL) {
-		state->num_domains = 0;
-		return -1;
-	}
-	return 0;
-}
+		packed_pass = (char *)secrets_fetch(secrets_key, &size);
+		packed_size = tdb_trusted_dom_pass_unpack(packed_pass, size,
+							  &pass);
+		/* packed representation isn't needed anymore */
+		SAFE_FREE(packed_pass);
+		
+		if (size != packed_size) {
+			DEBUG(2, ("Secrets record %s is invalid!\n",
+				  secrets_key));
+			continue;
+		}
 
-NTSTATUS secrets_trusted_domains(TALLOC_CTX *mem_ctx, uint32 *num_domains,
-				 struct trustdom_info ***domains)
-{
-	struct list_trusted_domains_state state;
+		if (pass.domain_sid.num_auths != 4) {
+			DEBUG(0, ("SID %s is not a domain sid, has %d "
+				  "auths instead of 4\n",
+				  sid_string_static(&pass.domain_sid),
+				  pass.domain_sid.num_auths));
+			continue;
+		}
 
-	secrets_init();
+		if (!(dom_info = TALLOC_P(*domains, struct trustdom_info))) {
+			DEBUG(0, ("talloc failed\n"));
+			tdb_search_list_free(keys);
+			TALLOC_FREE(tmp_ctx);
+			return NT_STATUS_NO_MEMORY;
+		}
 
-	if (db_ctx == NULL) {
-		return NT_STATUS_ACCESS_DENIED;
-	}
+		if (pull_ucs2_talloc(dom_info, &dom_info->name,
+				     pass.uni_name) == (size_t)-1) {
+			DEBUG(2, ("pull_ucs2_talloc failed\n"));
+			tdb_search_list_free(keys);
+			TALLOC_FREE(tmp_ctx);
+			return NT_STATUS_NO_MEMORY;
+		}
 
-	state.num_domains = 0;
+		sid_copy(&dom_info->sid, &pass.domain_sid);
 
-	/*
-	 * Make sure that a talloc context for the trustdom_info structs
-	 * exists
-	 */
+		ADD_TO_ARRAY(*domains, struct trustdom_info *, dom_info,
+			     domains, num_domains);
 
-	if (!(state.domains = TALLOC_ARRAY(
-		      mem_ctx, struct trustdom_info *, 1))) {
-		return NT_STATUS_NO_MEMORY;
+		if (*domains == NULL) {
+			tdb_search_list_free(keys);
+			TALLOC_FREE(tmp_ctx);
+			return NT_STATUS_NO_MEMORY;
+		}
 	}
+	
+	DEBUG(5, ("secrets_get_trusted_domains: got %d domains\n",
+		  *num_domains));
 
-	db_ctx->traverse_read(db_ctx, list_trusted_domain, (void *)&state);
+	/* free the results of searching the keys */
+	tdb_search_list_free(keys);
+	TALLOC_FREE(tmp_ctx);
 
-	*num_domains = state.num_domains;
-	*domains = state.domains;
 	return NT_STATUS_OK;
 }
 
 /*******************************************************************************
+ Lock the secrets tdb based on a string - this is used as a primitive form of mutex
+ between smbd instances.
+*******************************************************************************/
+
+BOOL secrets_named_mutex(const char *name, unsigned int timeout)
+{
+	int ret = 0;
+
+	if (!secrets_init())
+		return False;
+
+	ret = tdb_lock_bystring_with_timeout(tdb, name, timeout);
+	if (ret == 0)
+		DEBUG(10,("secrets_named_mutex: got mutex for %s\n", name ));
+
+	return (ret == 0);
+}
+
+/*******************************************************************************
+ Unlock a named mutex.
+*******************************************************************************/
+
+void secrets_named_mutex_release(const char *name)
+{
+	tdb_unlock_bystring(tdb, name);
+	DEBUG(10,("secrets_named_mutex: released mutex for %s\n", name ));
+}
+
+/*******************************************************************************
  Store a complete AFS keyfile into secrets.tdb.
 *******************************************************************************/
 
-bool secrets_store_afs_keyfile(const char *cell, const struct afs_keyfile *keyfile)
+BOOL secrets_store_afs_keyfile(const char *cell, const struct afs_keyfile *keyfile)
 {
 	fstring key;
 
@@ -1032,7 +1016,7 @@
 /*******************************************************************************
  Fetch the current (highest) AFS key from secrets.tdb
 *******************************************************************************/
-bool secrets_fetch_afs_key(const char *cell, struct afs_key *result)
+BOOL secrets_fetch_afs_key(const char *cell, struct afs_key *result)
 {
 	fstring key;
 	struct afs_keyfile *keyfile;
@@ -1062,14 +1046,12 @@
 
 	result->kvno = ntohl(result->kvno);
 
-	SAFE_FREE(keyfile);
-
 	return True;
 }
 
 /******************************************************************************
   When kerberos is not available, choose between anonymous or
-  authenticated connections.
+  authenticated connections.  
 
   We need to use an authenticated connection if DCs have the
   RestrictAnonymous registry entry set > 0, or the "Additional
@@ -1083,16 +1065,16 @@
 	*username = (char *)secrets_fetch(SECRETS_AUTH_USER, NULL);
 	*domain = (char *)secrets_fetch(SECRETS_AUTH_DOMAIN, NULL);
 	*password = (char *)secrets_fetch(SECRETS_AUTH_PASSWORD, NULL);
-
+	
 	if (*username && **username) {
 
 		if (!*domain || !**domain)
 			*domain = smb_xstrdup(lp_workgroup());
-
+		
 		if (!*password || !**password)
 			*password = smb_xstrdup("");
 
-		DEBUG(3, ("IPC$ connections done by user %s\\%s\n",
+		DEBUG(3, ("IPC$ connections done by user %s\\%s\n", 
 			  *domain, *username));
 
 	} else {
@@ -1130,7 +1112,7 @@
 	if (vers.dptr == NULL) {
 		/* First opener, no version. */
 		SIVAL(&ver,0,1);
-		vers.dptr = (uint8 *)&ver;
+		vers.dptr = (char *)&ver;
 		vers.dsize = 4;
 		tdb_store_bystring(tdb_sc, "SCHANNEL_STORE_VERSION", vers, TDB_REPLACE);
 		vers.dptr = NULL;
@@ -1160,20 +1142,21 @@
  Note we must be root here.
 *******************************************************************************/
 
-bool secrets_store_schannel_session_info(TALLOC_CTX *mem_ctx,
+BOOL secrets_store_schannel_session_info(TALLOC_CTX *mem_ctx,
 				const char *remote_machine,
 				const struct dcinfo *pdc)
 {
 	TDB_CONTEXT *tdb_sc = NULL;
 	TDB_DATA value;
-	bool ret;
-	char *keystr = talloc_asprintf_strupper_m(mem_ctx, "%s/%s",
-						  SECRETS_SCHANNEL_STATE,
-						  remote_machine);
+	BOOL ret;
+	char *keystr = talloc_asprintf(mem_ctx, "%s/%s", SECRETS_SCHANNEL_STATE,
+				remote_machine);
 	if (!keystr) {
 		return False;
 	}
 
+	strupper_m(keystr);
+
 	/* Work out how large the record is. */
 	value.dsize = tdb_pack(NULL, 0, "dBBBBBfff",
 				pdc->sequence,
@@ -1186,7 +1169,7 @@
 				pdc->remote_machine,
 				pdc->domain);
 
-	value.dptr = TALLOC_ARRAY(mem_ctx, uint8, value.dsize);
+	value.dptr = (char *)TALLOC(mem_ctx, value.dsize);
 	if (!value.dptr) {
 		TALLOC_FREE(keystr);
 		return False;
@@ -1226,7 +1209,7 @@
  Note we must be root here.
 *******************************************************************************/
 
-bool secrets_restore_schannel_session_info(TALLOC_CTX *mem_ctx,
+BOOL secrets_restore_schannel_session_info(TALLOC_CTX *mem_ctx,
 				const char *remote_machine,
 				struct dcinfo **ppdc)
 {
@@ -1240,9 +1223,8 @@
 	uint32 l1, l2, l3, l4, l5;
 	int ret;
 	struct dcinfo *pdc = NULL;
-	char *keystr = talloc_asprintf_strupper_m(mem_ctx, "%s/%s",
-						  SECRETS_SCHANNEL_STATE,
-						  remote_machine);
+	char *keystr = talloc_asprintf(mem_ctx, "%s/%s", SECRETS_SCHANNEL_STATE,
+				remote_machine);
 
 	*ppdc = NULL;
 
@@ -1250,6 +1232,8 @@
 		return False;
 	}
 
+	strupper_m(keystr);
+
 	tdb_sc = open_schannel_session_store(mem_ctx);
 	if (!tdb_sc) {
 		TALLOC_FREE(keystr);
@@ -1322,18 +1306,18 @@
 	return True;
 }
 
-bool secrets_store_generic(const char *owner, const char *key, const char *secret)
+BOOL secrets_store_generic(const char *owner, const char *key, const char *secret)
 {
 	char *tdbkey = NULL;
-	bool ret;
-
+	BOOL ret;
+	
 	if (asprintf(&tdbkey, "SECRETS/GENERIC/%s/%s", owner, key) < 0) {
 		DEBUG(0, ("asprintf failed!\n"));
 		return False;
 	}
-
+		
 	ret = secrets_store(tdbkey, secret, strlen(secret)+1);
-
+	
 	SAFE_FREE(tdbkey);
 	return ret;
 }
@@ -1356,7 +1340,7 @@
 		DEBUG(0, ("Out of memory!\n"));
 		return NULL;
 	}
-
+	
 	secret = (char *)secrets_fetch(tdbkey, NULL);
 	SAFE_FREE(tdbkey);
 

Modified: branches/samba/upstream/source/passdb/util_builtin.c
===================================================================
--- branches/samba/upstream/source/passdb/util_builtin.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/passdb/util_builtin.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
       
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -41,7 +42,7 @@
 /*******************************************************************
  Look up a rid in the BUILTIN domain
  ********************************************************************/
-bool lookup_builtin_rid(TALLOC_CTX *mem_ctx, uint32 rid, const char **name)
+BOOL lookup_builtin_rid(TALLOC_CTX *mem_ctx, uint32 rid, const char **name)
 {
 	const struct rid_name_map *aliases = builtin_aliases;
 
@@ -59,7 +60,7 @@
 /*******************************************************************
  Look up a name in the BUILTIN domain
  ********************************************************************/
-bool lookup_builtin_name(const char *name, uint32 *rid)
+BOOL lookup_builtin_name(const char *name, uint32 *rid)
 {
 	const struct rid_name_map *aliases = builtin_aliases;
 
@@ -87,7 +88,7 @@
  Check if the SID is the builtin SID (S-1-5-32).
 *****************************************************************/  
 
-bool sid_check_is_builtin(const DOM_SID *sid)
+BOOL sid_check_is_builtin(const DOM_SID *sid)
 {
 	return sid_equal(sid, &global_sid_Builtin);
 }
@@ -96,7 +97,7 @@
  Check if the SID is one of the builtin SIDs (S-1-5-32-a).
 *****************************************************************/  
 
-bool sid_check_is_in_builtin(const DOM_SID *sid)
+BOOL sid_check_is_in_builtin(const DOM_SID *sid)
 {
 	DOM_SID dom_sid;
 	uint32 rid;

Modified: branches/samba/upstream/source/passdb/util_unixsids.c
===================================================================
--- branches/samba/upstream/source/passdb/util_unixsids.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/passdb/util_unixsids.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
       
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,17 +14,18 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
-bool sid_check_is_unix_users(const DOM_SID *sid)
+BOOL sid_check_is_unix_users(const DOM_SID *sid)
 {
 	return sid_equal(sid, &global_sid_Unix_Users);
 }
 
-bool sid_check_is_in_unix_users(const DOM_SID *sid)
+BOOL sid_check_is_in_unix_users(const DOM_SID *sid)
 {
 	DOM_SID dom_sid;
 	uint32 rid;
@@ -35,13 +36,13 @@
 	return sid_check_is_unix_users(&dom_sid);
 }
 
-bool uid_to_unix_users_sid(uid_t uid, DOM_SID *sid)
+BOOL uid_to_unix_users_sid(uid_t uid, DOM_SID *sid)
 {
 	sid_copy(sid, &global_sid_Unix_Users);
 	return sid_append_rid(sid, uid);
 }
 
-bool gid_to_unix_groups_sid(gid_t gid, DOM_SID *sid)
+BOOL gid_to_unix_groups_sid(gid_t gid, DOM_SID *sid)
 {
 	sid_copy(sid, &global_sid_Unix_Groups);
 	return sid_append_rid(sid, gid);
@@ -52,7 +53,7 @@
 	return "Unix User";
 }
 
-bool lookup_unix_user_name(const char *name, DOM_SID *sid)
+BOOL lookup_unix_user_name(const char *name, DOM_SID *sid)
 {
 	struct passwd *pwd;
 
@@ -68,12 +69,12 @@
 	return True;
 }
 
-bool sid_check_is_unix_groups(const DOM_SID *sid)
+BOOL sid_check_is_unix_groups(const DOM_SID *sid)
 {
 	return sid_equal(sid, &global_sid_Unix_Groups);
 }
 
-bool sid_check_is_in_unix_groups(const DOM_SID *sid)
+BOOL sid_check_is_in_unix_groups(const DOM_SID *sid)
 {
 	DOM_SID dom_sid;
 	uint32 rid;
@@ -89,7 +90,7 @@
 	return "Unix Group";
 }
 
-bool lookup_unix_group_name(const char *name, DOM_SID *sid)
+BOOL lookup_unix_group_name(const char *name, DOM_SID *sid)
 {
 	struct group *grp;
 

Modified: branches/samba/upstream/source/passdb/util_wellknown.c
===================================================================
--- branches/samba/upstream/source/passdb/util_wellknown.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/passdb/util_wellknown.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -69,7 +70,7 @@
 	{ &global_sid_NT_Authority, "NT Authority", nt_authority_users },
 	{ NULL, NULL, NULL }};
 
-bool sid_check_is_wellknown_domain(const DOM_SID *sid, const char **name)
+BOOL sid_check_is_wellknown_domain(const DOM_SID *sid, const char **name)
 {
 	int i;
 
@@ -84,7 +85,7 @@
 	return False;
 }
 
-bool sid_check_is_in_wellknown_domain(const DOM_SID *sid)
+BOOL sid_check_is_in_wellknown_domain(const DOM_SID *sid)
 {
 	DOM_SID dom_sid;
 	uint32 rid;
@@ -99,7 +100,7 @@
  Looks up a known username from one of the known domains.
 ***************************************************************************/
 
-bool lookup_wellknown_sid(TALLOC_CTX *mem_ctx, const DOM_SID *sid,
+BOOL lookup_wellknown_sid(TALLOC_CTX *mem_ctx, const DOM_SID *sid,
 			  const char **domain, const char **name)
 {
 	int i;
@@ -123,7 +124,8 @@
 	}
 
 	if (users == NULL) {
-		DEBUG(10, ("SID %s is no special sid\n", sid_string_dbg(sid)));
+		DEBUG(10, ("SID %s is no special sid\n",
+			   sid_string_static(sid)));
 		return False;
 	}
 
@@ -134,7 +136,8 @@
 		}
 	}
 
-	DEBUG(10, ("RID of special SID %s not found\n", sid_string_dbg(sid)));
+	DEBUG(10, ("RID of special SID %s not found\n",
+		   sid_string_static(sid)));
 
 	return False;
 }
@@ -143,7 +146,7 @@
  Try and map a name to one of the well known SIDs.
 ***************************************************************************/
 
-bool lookup_wellknown_name(TALLOC_CTX *mem_ctx, const char *name,
+BOOL lookup_wellknown_name(TALLOC_CTX *mem_ctx, const char *name,
 			   DOM_SID *sid, const char **domain)
 {
 	int i, j;

Modified: branches/samba/upstream/source/po/de.msg
===================================================================
--- branches/samba/upstream/source/po/de.msg	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/po/de.msg	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,7 +3,7 @@
 #
 #   This program is free software; you can redistribute it and/or modify
 #   it under the terms of the GNU General Public License as published by
-#   the Free Software Foundation; either version 3 of the License, or
+#   the Free Software Foundation; either version 2 of the License, or
 #   (at your option) any later version.
 #
 #   This program is distributed in the hope that it will be useful,
@@ -12,7 +12,8 @@
 #   GNU General Public License for more details.
 #
 #   You should have received a copy of the GNU General Public License
-#   along with this program; if not, see <http://www.gnu.org/licenses/>.
+#   along with this program; if not, write to the Free Software
+#   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 #
 msgid ""
 msgstr ""

Modified: branches/samba/upstream/source/po/en.msg
===================================================================
--- branches/samba/upstream/source/po/en.msg	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/po/en.msg	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,7 +3,7 @@
 #
 #   This program is free software; you can redistribute it and/or modify
 #   it under the terms of the GNU General Public License as published by
-#   the Free Software Foundation; either version 3 of the License, or
+#   the Free Software Foundation; either version 2 of the License, or
 #   (at your option) any later version.
 #
 #   This program is distributed in the hope that it will be useful,
@@ -12,7 +12,8 @@
 #   GNU General Public License for more details.
 #
 #   You should have received a copy of the GNU General Public License
-#   along with this program; if not, see <http://www.gnu.org/licenses/>.
+#   along with this program; if not, write to the Free Software
+#   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 #
 msgid ""
 msgstr ""

Modified: branches/samba/upstream/source/po/fi.msg
===================================================================
--- branches/samba/upstream/source/po/fi.msg	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/po/fi.msg	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,7 +3,7 @@
 #
 #   This program is free software; you can redistribute it and/or modify
 #   it under the terms of the GNU General Public License as published by
-#   the Free Software Foundation; either version 3 of the License, or
+#   the Free Software Foundation; either version 2 of the License, or
 #   (at your option) any later version.
 #
 #   This program is distributed in the hope that it will be useful,
@@ -12,7 +12,8 @@
 #   GNU General Public License for more details.
 #
 #   You should have received a copy of the GNU General Public License
-#   along with this program; if not, see <http://www.gnu.org/licenses/>.
+#   along with this program; if not, write to the Free Software
+#   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 #
 msgid ""
 msgstr ""

Modified: branches/samba/upstream/source/po/fr.msg
===================================================================
--- branches/samba/upstream/source/po/fr.msg	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/po/fr.msg	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,7 +3,7 @@
 #
 #   This program is free software; you can redistribute it and/or modify
 #   it under the terms of the GNU General Public License as published by
-#   the Free Software Foundation; either version 3 of the License, or
+#   the Free Software Foundation; either version 2 of the License, or
 #   (at your option) any later version.
 #
 #   This program is distributed in the hope that it will be useful,
@@ -12,7 +12,8 @@
 #   GNU General Public License for more details.
 #
 #   You should have received a copy of the GNU General Public License
-#   along with this program; if not, see <http://www.gnu.org/licenses/>.
+#   along with this program; if not, write to the Free Software
+#   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 #
 msgid ""
 msgstr ""

Modified: branches/samba/upstream/source/po/genmsg
===================================================================
--- branches/samba/upstream/source/po/genmsg	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/po/genmsg	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,7 +3,7 @@
 #
 #   This program is free software; you can redistribute it and/or modify
 #   it under the terms of the GNU General Public License as published by
-#   the Free Software Foundation; either version 3 of the License, or
+#   the Free Software Foundation; either version 2 of the License, or
 #   (at your option) any later version.
 #
 #   This program is distributed in the hope that it will be useful,
@@ -12,7 +12,8 @@
 #   GNU General Public License for more details.
 #
 #   You should have received a copy of the GNU General Public License
-#   along with this program; if not, see <http://www.gnu.org/licenses/>.
+#   along with this program; if not, write to the Free Software
+#   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 #
 
 FILES='../web/swat.c ../web/statuspage.c ../param/loadparm.c'
@@ -30,7 +31,7 @@
   $FILES
 
 for lang in $LANGS; do
-  printf "%s" "$lang"
+  echo -n $lang
   mv ${lang}.msg ${lang}.msg.old
   $MSGMERGE --width=${WIDTH} ${lang}.msg.old i18n_swat.po -o ${lang}.msg
 done

Modified: branches/samba/upstream/source/po/it.msg
===================================================================
--- branches/samba/upstream/source/po/it.msg	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/po/it.msg	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,7 +3,7 @@
 #
 #   This program is free software; you can redistribute it and/or modify
 #   it under the terms of the GNU General Public License as published by
-#   the Free Software Foundation; either version 3 of the License, or
+#   the Free Software Foundation; either version 2 of the License, or
 #   (at your option) any later version.
 #
 #   This program is distributed in the hope that it will be useful,
@@ -12,7 +12,8 @@
 #   GNU General Public License for more details.
 #
 #   You should have received a copy of the GNU General Public License
-#   along with this program; if not, see <http://www.gnu.org/licenses/>.
+#   along with this program; if not, write to the Free Software
+#   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 #
 msgid ""
 msgstr ""

Modified: branches/samba/upstream/source/po/ja.msg
===================================================================
--- branches/samba/upstream/source/po/ja.msg	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/po/ja.msg	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
 #
 #   This program is free software; you can redistribute it and/or modify
 #   it under the terms of the GNU General Public License as published by
-#   the Free Software Foundation; either version 3 of the License, or
+#   the Free Software Foundation; either version 2 of the License, or
 #   (at your option) any later version.
 #
 #   This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
 #   GNU General Public License for more details.
 #
 #   You should have received a copy of the GNU General Public License
-#   along with this program; if not, see <http://www.gnu.org/licenses/>.
+#   along with this program; if not, write to the Free Software
+#   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 #
 msgid ""
 msgstr ""

Modified: branches/samba/upstream/source/po/nl.msg
===================================================================
--- branches/samba/upstream/source/po/nl.msg	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/po/nl.msg	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,7 +3,7 @@
 #
 #   This program is free software; you can redistribute it and/or modify
 #   it under the terms of the GNU General Public License as published by
-#   the Free Software Foundation; either version 3 of the License, or
+#   the Free Software Foundation; either version 2 of the License, or
 #   (at your option) any later version.
 #
 #   This program is distributed in the hope that it will be useful,
@@ -12,7 +12,8 @@
 #   GNU General Public License for more details.
 #
 #   You should have received a copy of the GNU General Public License
-#   along with this program; if not, see <http://www.gnu.org/licenses/>.
+#   along with this program; if not, write to the Free Software
+#   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 #
 msgid ""
 msgstr ""

Modified: branches/samba/upstream/source/po/pl.msg
===================================================================
--- branches/samba/upstream/source/po/pl.msg	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/po/pl.msg	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,7 +3,7 @@
 #
 #   This program is free software; you can redistribute it and/or modify
 #   it under the terms of the GNU General Public License as published by
-#   the Free Software Foundation; either version 3 of the License, or
+#   the Free Software Foundation; either version 2 of the License, or
 #   (at your option) any later version.
 #
 #   This program is distributed in the hope that it will be useful,
@@ -12,7 +12,8 @@
 #   GNU General Public License for more details.
 #
 #   You should have received a copy of the GNU General Public License
-#   along with this program; if not, see <http://www.gnu.org/licenses/>.
+#   along with this program; if not, write to the Free Software
+#   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 #
 msgid ""
 msgstr ""

Modified: branches/samba/upstream/source/po/tr.msg
===================================================================
--- branches/samba/upstream/source/po/tr.msg	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/po/tr.msg	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,7 +3,7 @@
 #
 #   This program is free software; you can redistribute it and/or modify
 #   it under the terms of the GNU General Public License as published by
-#   the Free Software Foundation; either version 3 of the License, or
+#   the Free Software Foundation; either version 2 of the License, or
 #   (at your option) any later version.
 #
 #   This program is distributed in the hope that it will be useful,
@@ -12,7 +12,8 @@
 #   GNU General Public License for more details.
 #
 #   You should have received a copy of the GNU General Public License
-#   along with this program; if not, see <http://www.gnu.org/licenses/>.
+#   along with this program; if not, write to the Free Software
+#   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 #
 msgid ""
 msgstr ""

Modified: branches/samba/upstream/source/popt/poptconfig.c
===================================================================
--- branches/samba/upstream/source/popt/poptconfig.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/popt/poptconfig.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -18,7 +18,7 @@
     /*@=type@*/
     const char * entryType;
     const char * opt;
-    poptItem item = (poptItem)alloca(sizeof(*item));
+    poptItem item = alloca(sizeof(*item));
     int i, j;
     
 /*@-boundswrite@*/
@@ -114,7 +114,7 @@
 	return POPT_ERROR_ERRNO;
     }
 
-    file = (const char *)alloca(fileLength + 1);
+    file = alloca(fileLength + 1);
     if (read(fd, (char *)file, fileLength) != fileLength) {
 	rc = errno;
 	(void) close(fd);
@@ -127,7 +127,7 @@
 	return POPT_ERROR_ERRNO;
 
 /*@-boundswrite@*/
-    dst = buf = (char *)alloca(fileLength + 1);
+    dst = buf = alloca(fileLength + 1);
 
     chptr = file;
     end = (file + fileLength);
@@ -179,7 +179,7 @@
 #endif
 
     if ((home = getenv("HOME"))) {
-	fn = (char *)alloca(strlen(home) + 20);
+	fn = alloca(strlen(home) + 20);
 	strcpy(fn, home);
 	strcat(fn, "/.popt");
 	rc = poptReadConfigFile(con, fn);

Modified: branches/samba/upstream/source/popt/popthelp.c
===================================================================
--- branches/samba/upstream/source/popt/popthelp.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/popt/popthelp.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -76,7 +76,7 @@
     if (table != NULL)
     for (opt = table; opt->longName || opt->shortName || opt->arg; opt++) {
 	if (opt->argInfo == POPT_ARG_INTL_DOMAIN)
-	    return (char *)opt->arg;
+	    return opt->arg;
     }
     return NULL;
 }
@@ -131,7 +131,7 @@
 	/*@*/
 {
     const char * defstr = D_(translation_domain, "default");
-    char * le = (char *)malloc(4*lineLength + 1);
+    char * le = malloc(4*lineLength + 1);
     char * l = le;
 
     if (le == NULL) return NULL;	/* XXX can't happen */
@@ -176,7 +176,7 @@
     }	break;
     case POPT_ARG_NONE:
     default:
-	l = (char *)_free(l);
+	l = _free(l);
 	return NULL;
 	/*@notreached@*/ break;
     }
@@ -214,7 +214,7 @@
     if (argDescrip)	nb += strlen(argDescrip);
 
 /*@-boundswrite@*/
-    left = (char *)malloc(nb);
+    left = malloc(nb);
     if (left == NULL) return;	/* XXX can't happen */
     left[0] = '\0';
     left[maxLeftCol] = '\0';
@@ -242,7 +242,7 @@
 	if (opt->argInfo & POPT_ARGFLAG_SHOW_DEFAULT) {
 	    defs = singleOptionDefaultValue(lineLength, opt, translation_domain);
 	    if (defs) {
-		char * t = (char *)malloc((help ? strlen(help) : 0) +
+		char * t = malloc((help ? strlen(help) : 0) +
 				strlen(defs) + sizeof(" "));
 		if (t) {
 		    char * te = t;
@@ -252,7 +252,7 @@
 		    }
 		    *te++ = ' ';
 		    strcpy(te, defs);
-		    defs = (char *)_free(defs);
+		    defs = _free(defs);
 		}
 		defs = t;
 	    }
@@ -323,7 +323,7 @@
 	goto out;
     }
 
-    left = (char *)_free(left);
+    left = _free(left);
     if (defs) {
 	help = defs; defs = NULL;
     }
@@ -354,9 +354,9 @@
 
 out:
     /*@-dependenttrans@*/
-    defs = (char *)_free(defs);
+    defs = _free(defs);
     /*@=dependenttrans@*/
-    left = (char *)_free(left);
+    left = _free(left);
 }
 
 /**
@@ -375,7 +375,7 @@
     while (opt->longName || opt->shortName || opt->arg) {
 	if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE) {
 	    if (opt->arg)	/* XXX program error */
-	    len = maxArgWidth((const struct poptOption *)opt->arg, translation_domain);
+	    len = maxArgWidth(opt->arg, translation_domain);
 	    if (len > max) max = len;
 	} else if (!(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN)) {
 	    len = sizeof("  ")-1;
@@ -461,15 +461,14 @@
     for (opt = table; (opt->longName || opt->shortName || opt->arg); opt++) {
 	if ((opt->argInfo & POPT_ARG_MASK) != POPT_ARG_INCLUDE_TABLE)
 	    continue;
-	sub_transdom = getTableTranslationDomain(
-	    (const struct poptOption *)opt->arg);
+	sub_transdom = getTableTranslationDomain(opt->arg);
 	if (sub_transdom == NULL)
 	    sub_transdom = translation_domain;
 	    
 	if (opt->descrip)
 	    fprintf(fp, "\n%s\n", D_(sub_transdom, opt->descrip));
 
-	singleTableHelp(con, fp, (const struct poptOption *)opt->arg, left, sub_transdom);
+	singleTableHelp(con, fp, opt->arg, left, sub_transdom);
     }
 }
 
@@ -654,7 +653,7 @@
 		    done->opts[done->nopts++] = (const void *) opt->arg;
 /*@=boundswrite@*/
 	    }
-	    cursor = singleTableUsage(con, fp, cursor, (const struct poptOption *)opt->arg,
+	    cursor = singleTableUsage(con, fp, cursor, opt->arg,
 			translation_domain, done);
 	} else if ((opt->longName || opt->shortName) &&
 		 !(opt->argInfo & POPT_ARGFLAG_DOC_HIDDEN)) {
@@ -681,7 +680,7 @@
 	/*@requires maxRead(str) >= 0 @*/
 {
     /* bufsize larger then the ascii set, lazy alloca on top level call. */
-    char * s = (str != NULL ? str : (char *)memset(alloca(300), 0, 300));
+    char * s = (str != NULL ? str : memset(alloca(300), 0, 300));
     int len = 0;
 
 /*@-boundswrite@*/
@@ -691,8 +690,7 @@
 	    s[strlen(s)] = opt->shortName;
 	else if ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_INCLUDE_TABLE)
 	    if (opt->arg)	/* XXX program error */
-		len = showShortOptions(
-		    (const struct poptOption *)opt->arg, fp, s);
+		len = showShortOptions(opt->arg, fp, s);
     } 
 /*@=boundswrite@*/
 
@@ -706,14 +704,14 @@
 
 void poptPrintUsage(poptContext con, FILE * fp, /*@unused@*/ int flags)
 {
-    poptDone done = (poptDone)memset(alloca(sizeof(*done)), 0, sizeof(*done));
+    poptDone done = memset(alloca(sizeof(*done)), 0, sizeof(*done));
     int cursor;
 
     done->nopts = 0;
     done->maxopts = 64;
     cursor = done->maxopts * sizeof(*done->opts);
 /*@-boundswrite@*/
-    done->opts = (const void **)memset(alloca(cursor), 0, cursor);
+    done->opts = memset(alloca(cursor), 0, cursor);
     done->opts[done->nopts++] = (const void *) con->options;
 /*@=boundswrite@*/
 
@@ -734,7 +732,7 @@
 
 void poptSetOtherOptionHelp(poptContext con, const char * text)
 {
-    con->otherHelp = (const char *)_free(con->otherHelp);
+    con->otherHelp = _free(con->otherHelp);
     con->otherHelp = xstrdup(text);
 }
 /*@=type@*/

Modified: branches/samba/upstream/source/popt/poptparse.c
===================================================================
--- branches/samba/upstream/source/popt/poptparse.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/popt/poptparse.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -27,10 +27,10 @@
 	nb += strlen(argv[i]) + 1;
     }
 	
-    dst = (char *)malloc(nb);
+    dst = malloc(nb);
     if (dst == NULL)			/* XXX can't happen */
 	return POPT_ERROR_MALLOC;
-    argv2 = (const char **) dst;
+    argv2 = (void *) dst;
     dst += (argc + 1) * sizeof(*argv);
 
     /*@-branchstate@*/
@@ -59,10 +59,10 @@
     const char * src;
     char quote = '\0';
     int argvAlloced = POPT_ARGV_ARRAY_GROW_DELTA;
-    const char ** argv = (const char **)malloc(sizeof(*argv) * argvAlloced);
+    const char ** argv = malloc(sizeof(*argv) * argvAlloced);
     int argc = 0;
     int buflen = strlen(s) + 1;
-    char * buf = (char*)memset(alloca(buflen), 0, buflen);
+    char * buf = memset(alloca(buflen), 0, buflen);
     int rc = POPT_ERROR_MALLOC;
 
     if (argv == NULL) return rc;
@@ -86,7 +86,7 @@
 		buf++, argc++;
 		if (argc == argvAlloced) {
 		    argvAlloced += POPT_ARGV_ARRAY_GROW_DELTA;
-		    argv = (const char **)realloc(argv, sizeof(*argv) * argvAlloced);
+		    argv = realloc(argv, sizeof(*argv) * argvAlloced);
 		    if (argv == NULL) goto exit;
 		}
 		argv[argc] = buf;
@@ -149,7 +149,7 @@
     if (fp == NULL)
 	return POPT_ERROR_NULLARG;
 
-    argstr = (char *)calloc(maxargvlen, sizeof(*argstr));
+    argstr = calloc(maxargvlen, sizeof(*argstr));
     if (argstr == NULL) return POPT_ERROR_MALLOC;
 
     while (fgets(line, (int)maxlinelen, fp) != NULL) {
@@ -183,7 +183,7 @@
 	    argvlen += (t = q - p) + (sizeof(" --")-1);
 	    if (argvlen >= maxargvlen) {
 		maxargvlen = (t > maxargvlen) ? t*2 : maxargvlen*2;
-		argstr = (char *)realloc(argstr, maxargvlen);
+		argstr = realloc(argstr, maxargvlen);
 		if (argstr == NULL) return POPT_ERROR_MALLOC;
 	    }
 	    strcat(argstr, " --");
@@ -212,7 +212,7 @@
 	argvlen += t + (sizeof("' --='")-1);
 	if (argvlen >= maxargvlen) {
 	    maxargvlen = (t > maxargvlen) ? t*2 : maxargvlen*2;
-	    argstr = (char *)realloc(argstr, maxargvlen);
+	    argstr = realloc(argstr, maxargvlen);
 	    if (argstr == NULL) return POPT_ERROR_MALLOC;
 	}
 	strcat(argstr, " --");

Modified: branches/samba/upstream/source/printing/load.c
===================================================================
--- branches/samba/upstream/source/printing/load.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/printing/load.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -28,7 +29,6 @@
 	const char *p;
 	int pnum = lp_servicenumber(PRINTERS_NAME);
 	char *str;
-	char *saveptr;
 
 	if (pnum < 0)
 		return;
@@ -36,8 +36,7 @@
 	if ((str = SMB_STRDUP(lp_auto_services())) == NULL)
 		return;
 
-	for (p = strtok_r(str, LIST_SEP, &saveptr); p;
-	     p = strtok_r(NULL, LIST_SEP, &saveptr)) {
+	for (p = strtok(str, LIST_SEP); p; p = strtok(NULL, LIST_SEP)) {
 		if (lp_servicenumber(p) >= 0)
 			continue;
 		

Modified: branches/samba/upstream/source/printing/lpq_parse.c
===================================================================
--- branches/samba/upstream/source/printing/lpq_parse.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/printing/lpq_parse.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -27,7 +28,7 @@
  Process time fields
 ********************************************************************/
 
-static time_t EntryTime(char *tok[], int ptr, int count, int minimum)
+static time_t EntryTime(fstring tok[], int ptr, int count, int minimum)
 {
 	time_t jobtime,jobtime1;
 
@@ -35,6 +36,7 @@
 	if (count >= minimum) {
 		struct tm *t;
 		int i, day, hour, min, sec;
+		char   *c;
 
 		for (i=0; i<13; i++) {
 			if (!strncmp(tok[ptr], Months[i],3)) {
@@ -43,13 +45,12 @@
 		}
 
 		if (i<12) {
-			fstring c;
 			t = localtime(&jobtime);
 			if (!t) {
 				return (time_t)-1;
 			}
 			day = atoi(tok[ptr+1]);
-			fstrcpy(c,tok[ptr+2]);
+			c=(char *)(tok[ptr+2]);
 			*(c+2)=0;
 			hour = atoi(c);
 			*(c+5)=0;
@@ -102,7 +103,7 @@
 further below.
 ****************************************************************************/
 
-static bool parse_lpq_bsd(char *line,print_queue_struct *buf,bool first)
+static BOOL parse_lpq_bsd(char *line,print_queue_struct *buf,BOOL first)
 {
 #ifdef	OSF1
 #define	RANKTOK	0
@@ -125,14 +126,9 @@
 
 	char *tok[MAXTOK];
 	int  count = 0;
-	TALLOC_CTX *ctx = talloc_tos();
-	char *line2 = NULL;
-	char *saveptr;
+	pstring line2;
 
-	line2 = talloc_strdup(ctx, line);
-	if (!line2) {
-		return false;
-	}
+	pstrcpy(line2,line);
 
 #ifdef	OSF1
 	{
@@ -144,12 +140,11 @@
 	}
 #endif	/* OSF1 */
 
-	/* FIXME: Use next_token_talloc rather than strtok! */
-	tok[0] = strtok_r(line2," \t", &saveptr);
+	/* FIXME: Use next_token rather than strtok! */
+	tok[0] = strtok(line2," \t");
 	count++;
 
-	while ((count < MAXTOK)
-	       && ((tok[count] = strtok_r(NULL, " \t", &saveptr)) != NULL)) {
+	while ((count < MAXTOK) && ((tok[count] = strtok(NULL," \t")) != NULL)) {
 		count++;
 	}
 
@@ -181,7 +176,7 @@
 			fstrcat(buf->fs_file, tok[i]);
 		}
 		/* Ensure null termination. */
-		buf->fs_file[sizeof(buf->fs_file)-1] = '\0';
+		fstrterminate(buf->fs_file);
 	}
 
 #ifdef PRIOTOK
@@ -245,7 +240,7 @@
 
 ****************************************************************************/
 
-static bool parse_lpq_lprng(char *line,print_queue_struct *buf,bool first)
+static BOOL parse_lpq_lprng(char *line,print_queue_struct *buf,BOOL first)
 {
 #define	LPRNG_RANKTOK	0
 #define	LPRNG_USERTOK	1
@@ -257,26 +252,22 @@
 #define	LPRNG_NTOK	7
 #define	LPRNG_MAXTOK	128 /* PFMA just to keep us from running away. */
 
-	char *tokarr[LPRNG_MAXTOK];
+	fstring tokarr[LPRNG_MAXTOK];
 	const char *cptr;
 	char *ptr;
 	int num_tok = 0;
-	TALLOC_CTX *frame = talloc_stackframe();
 
 	cptr = line;
-	while((num_tok < LPRNG_MAXTOK) && next_token_talloc(frame, &cptr,
-				&tokarr[num_tok], " \t")) {
+	while((num_tok < LPRNG_MAXTOK) && next_token( &cptr, tokarr[num_tok], " \t", sizeof(fstring))) {
 		num_tok++;
 	}
 
 	/* We must get at least LPRNG_NTOK tokens. */
 	if (num_tok < LPRNG_NTOK) {
-		TALLOC_FREE(frame);
 		return False;
 	}
 
 	if (!isdigit((int)*tokarr[LPRNG_JOBTOK]) || !isdigit((int)*tokarr[LPRNG_TOTALTOK])) {
-		TALLOC_FREE(frame);
 		return False;
 	}
 
@@ -320,10 +311,9 @@
 			fstrcat(buf->fs_file, tokarr[i]);
 		}
 		/* Ensure null termination. */
-		buf->fs_file[sizeof(buf->fs_file)-1] = '\0';
+		fstrterminate(buf->fs_file);
 	}
 
-	TALLOC_FREE(frame);
 	return True;
 }
 
@@ -340,20 +330,18 @@
               QUEUED    541 P.ps               root at IEDVB            22   1   5
 ********************************************************************/
 
-static bool parse_lpq_aix(char *line,print_queue_struct *buf,bool first)
+static BOOL parse_lpq_aix(char *line,print_queue_struct *buf,BOOL first)
 {
-	char *tok[11];
+	fstring tok[11];
 	int count=0;
 	const char *cline = line;
-	TALLOC_CTX *frame = talloc_stackframe();
 
 	/* handle the case of "(standard input)" as a filename */
 	string_sub(line,"standard input","STDIN",0);
 	all_string_sub(line,"(","\"",0);
 	all_string_sub(line,")","\"",0);
 
-	for (count=0; count<10 &&
-			next_token_talloc(frame,&cline,&tok[count],NULL); count++) {
+	for (count=0; count<10 && next_token(&cline,tok[count],NULL, sizeof(tok[count])); count++) {
 		;
 	}
 
@@ -362,24 +350,21 @@
 		if ((count == 7) && ((strcmp(tok[0],"QUEUED") == 0) || (strcmp(tok[0],"HELD") == 0))) {
 			/* the 2nd and 5th columns must be integer */
 			if (!isdigit((int)*tok[1]) || !isdigit((int)*tok[4])) {
-				TALLOC_FREE(frame);
 				return False;
 			}
 			buf->size = atoi(tok[4]) * 1024;
 			/* if the fname contains a space then use STDIN */
 			if (strchr_m(tok[2],' ')) {
-				tok[2] = talloc_strdup(frame,"STDIN");
-				if (!tok[2]) {
-					TALLOC_FREE(frame);
-					return false;
-				}
+				fstrcpy(tok[2],"STDIN");
 			}
 
 			/* only take the last part of the filename */
 			{
+				fstring tmp;
 				char *p = strrchr_m(tok[2],'/');
 				if (p) {
-					tok[2] = p+1;
+					fstrcpy(tmp,p+1);
+					fstrcpy(tok[2],tmp);
 				}
 			}
 
@@ -391,31 +376,27 @@
 			fstrcpy(buf->fs_file,tok[2]);
 		} else {
 			DEBUG(6,("parse_lpq_aix count=%d\n", count));
-			TALLOC_FREE(frame);
 			return False;
 		}
 	} else {
 		/* the 4th and 9th columns must be integer */
 		if (!isdigit((int)*tok[3]) || !isdigit((int)*tok[8])) {
-			TALLOC_FREE(frame);
 			return False;
 		}
 
 		buf->size = atoi(tok[8]) * 1024;
 		/* if the fname contains a space then use STDIN */
 		if (strchr_m(tok[4],' ')) {
-			tok[4] = talloc_strdup(frame,"STDIN");
-			if (!tok[4]) {
-				TALLOC_FREE(frame);
-				return false;
-			}
+			fstrcpy(tok[4],"STDIN");
 		}
 
 		/* only take the last part of the filename */
 		{
+			fstring tmp;
 			char *p = strrchr_m(tok[4],'/');
 			if (p) {
-				tok[4] = p+1;
+				fstrcpy(tmp,p+1);
+				fstrcpy(tok[4],tmp);
 			}
 		}
 
@@ -427,7 +408,6 @@
 		fstrcpy(buf->fs_file,tok[4]);
 	}
 
-	TALLOC_FREE(frame);
 	return True;
 }
 
@@ -442,11 +422,11 @@
       (standard input)                          7551 bytes
 ****************************************************************************/
 
-static bool parse_lpq_hpux(char *line, print_queue_struct *buf, bool first)
+static BOOL parse_lpq_hpux(char *line, print_queue_struct *buf, BOOL first)
 {
 	/* must read two lines to process, therefore keep some values static */
-	static bool header_line_ok=False, base_prio_reset=False;
-	static char *jobuser;
+	static BOOL header_line_ok=False, base_prio_reset=False;
+	static fstring jobuser;
 	static int jobid;
 	static int jobprio;
 	static time_t jobtime;
@@ -455,13 +435,12 @@
 		with -p option first, to work */
 	static int base_prio;
 	int count;
-	char htab = '\011';
+	char htab = '\011';  
 	const char *cline = line;
-	char *tok[12];
-	TALLOC_CTX *frame = talloc_stackframe();
+	fstring tok[12];
 
 	/* If a line begins with a horizontal TAB, it is a subline type */
-
+  
 	if (line[0] == htab) { /* subline */
 		/* check if it contains the base priority */
 		if (!strncmp(line,"\tfence priority : ",18)) {
@@ -470,7 +449,6 @@
 		}
 
 		if (!header_line_ok) {
-			TALLOC_FREE(frame);
 			return  False; /* incorrect header line */
 		}
 
@@ -478,48 +456,35 @@
 		string_sub(line,"standard input","STDIN",0);
 		all_string_sub(line,"(","\"",0);
 		all_string_sub(line,")","\"",0);
-
-		for (count=0; count<2 &&
-				next_token_talloc(frame, &cline, &tok[count],NULL);
-				count++) {
+    
+		for (count=0; count<2 && next_token(&cline,tok[count],NULL,sizeof(tok[count])); count++) {
 			;
 		}
 		/* we must get 2 tokens */
 		if (count < 2) {
-			TALLOC_FREE(frame);
 			return False;
 		}
-
+    
 		/* the 2nd column must be integer */
 		if (!isdigit((int)*tok[1])) {
-			TALLOC_FREE(frame);
 			return False;
 		}
-
+    
 		/* if the fname contains a space then use STDIN */
 		if (strchr_m(tok[0],' ')) {
-			tok[0] = talloc_strdup(frame, "STDIN");
-			if (!tok[0]) {
-				TALLOC_FREE(frame);
-				return false;
-			}
+			fstrcpy(tok[0],"STDIN");
 		}
-
+    
 		buf->size = atoi(tok[1]);
 		fstrcpy(buf->fs_file,tok[0]);
-
+    
 		/* fill things from header line */
 		buf->time = jobtime;
 		buf->job = jobid;
 		buf->status = jobstat;
 		buf->priority = jobprio;
-		if (jobuser) {
-			fstrcpy(buf->fs_user,jobuser);
-		} else {
-			buf->fs_user[0] = '\0';
-		}
-
-		TALLOC_FREE(frame);
+		fstrcpy(buf->fs_user,jobuser);
+    
 		return True;
 	} else { /* header line */
 		header_line_ok=False; /* reset it */
@@ -531,33 +496,28 @@
 		} else if (base_prio) {
 			base_prio_reset=False;
 		}
-
+    
 		/* handle the dash in the job id */
 		string_sub(line,"-"," ",0);
-
-		for (count=0; count<12 &&
-				next_token_talloc(frame, &cline, &tok[count],NULL);
-				count++) {
+    
+		for (count=0; count<12 && next_token(&cline,tok[count],NULL,sizeof(tok[count])); count++) {
 			;
 		}
-
+      
 		/* we must get 8 tokens */
 		if (count < 8) {
-			TALLOC_FREE(frame);
 			return False;
 		}
-
+    
 		/* first token must be printer name (cannot check ?) */
 		/* the 2nd, 5th & 7th column must be integer */
 		if (!isdigit((int)*tok[1]) || !isdigit((int)*tok[4]) || !isdigit((int)*tok[6])) {
-			TALLOC_FREE(frame);
 			return False;
 		}
 		jobid = atoi(tok[1]);
-		SAFE_FREE(jobuser);
-		jobuser = SMB_STRDUP(tok[2]);
+		fstrcpy(jobuser,tok[2]);
 		jobprio = atoi(tok[4]);
-
+    
 		/* process time */
 		jobtime=EntryTime(tok, 5, count, 8);
 		if (jobprio < base_prio) {
@@ -572,9 +532,8 @@
 				jobstat = LPQ_PRINTING;
 			}
 		}
-
+    
 		header_line_ok=True; /* information is correct */
-		TALLOC_FREE(frame);
 		return False; /* need subline info to include into queuelist */
 	}
 }
@@ -589,15 +548,14 @@
 
 ****************************************************************************/
 
-static bool parse_lpq_sysv(char *line,print_queue_struct *buf,bool first)
+static BOOL parse_lpq_sysv(char *line,print_queue_struct *buf,BOOL first)
 {
-	char *tok[9];
+	fstring tok[9];
 	int count=0;
 	char *p;
 	const char *cline = line;
-	TALLOC_CTX *frame = NULL;
 
-	/*
+	/* 
 	 * Handle the dash in the job id, but make sure that we skip over
 	 * the printer name in case we have a dash in that.
 	 * Patch from Dom.Mitchell at palmerharvey.co.uk.
@@ -622,32 +580,28 @@
 		*p = ' ';
 	}
 
-	frame = talloc_stackframe();
-	for (count=0; count<9 &&
-			next_token_talloc(frame, &cline, &tok[count],NULL);
-			count++) {
+	for (count=0; count<9 && next_token(&cline,tok[count],NULL,sizeof(tok[count])); count++) {
 		;
 	}
 
 	/* we must get 7 tokens */
 	if (count < 7) {
-		TALLOC_FREE(frame);
 		return False;
 	}
 
 	/* the 2nd and 4th, 6th columns must be integer */
 	if (!isdigit((int)*tok[1]) || !isdigit((int)*tok[3])) {
-		TALLOC_FREE(frame);
 		return False;
 	}
 	if (!isdigit((int)*tok[5])) {
-		TALLOC_FREE(frame);
 		return False;
 	}
 
-	/* if the user contains a ! then trim the first part of it */
+	/* if the user contains a ! then trim the first part of it */  
 	if ((p=strchr_m(tok[2],'!'))) {
-		tok[2] = p+1;
+		fstring tmp;
+		fstrcpy(tmp,p+1);
+		fstrcpy(tok[2],tmp);
 	}
 
 	buf->job = atoi(tok[1]);
@@ -663,7 +617,6 @@
 	buf->time = EntryTime(tok, 4, count, 7);
 	fstrcpy(buf->fs_user,tok[2]);
 	fstrcpy(buf->fs_file,tok[2]);
-	TALLOC_FREE(frame);
 	return True;
 }
 
@@ -672,18 +625,17 @@
 
 here is an example of lpq output under qnx
 Spooler: /qnx/spooler, on node 1
-Printer: txt        (ready)
+Printer: txt        (ready) 
 0000:     root	[job #1    ]   active 1146 bytes	/etc/profile
 0001:     root	[job #2    ]    ready 2378 bytes	/etc/install
 0002:     root	[job #3    ]    ready 1146 bytes	-- standard input --
 ****************************************************************************/
 
-static bool parse_lpq_qnx(char *line,print_queue_struct *buf,bool first)
+static BOOL parse_lpq_qnx(char *line,print_queue_struct *buf,BOOL first)
 {
-	char *tok[7];
+	fstring tok[7];
 	int count=0;
 	const char *cline = line;
-	TALLOC_CTX *frame = NULL;
 
 	DEBUG(4,("antes [%s]\n", line));
 
@@ -698,33 +650,30 @@
 	string_sub(line,"]","",0);
 	DEBUG(4,("despues 2 [%s]\n", line));
 
-	frame = talloc_stackframe();
-	for (count=0; count<7 &&
-			next_token_talloc(frame,&cline,&tok[count],NULL);
-			count++) {
+	for (count=0; count<7 && next_token(&cline,tok[count],NULL,sizeof(tok[count])); count++) {
 		;
 	}
 
 	/* we must get 7 tokens */
 	if (count < 7) {
-		TALLOC_FREE(frame);
 		return False;
 	}
 
 	/* the 3rd and 5th columns must be integer */
 	if (!isdigit((int)*tok[2]) || !isdigit((int)*tok[4])) {
-		TALLOC_FREE(frame);
 		return False;
 	}
 
 	/* only take the last part of the filename */
 	{
+		fstring tmp;
 		char *p = strrchr_m(tok[6],'/');
 		if (p) {
-			tok[6] = p+1;
+			fstrcpy(tmp,p+1);
+			fstrcpy(tok[6],tmp);
 		}
 	}
-
+	
 	buf->job = atoi(tok[2]);
 	buf->size = atoi(tok[4]);
 	buf->status = strequal(tok[3],"active")?LPQ_PRINTING:LPQ_QUEUED;
@@ -732,7 +681,6 @@
 	buf->time = time(NULL);
 	fstrcpy(buf->fs_user,tok[1]);
 	fstrcpy(buf->fs_file,tok[6]);
-	TALLOC_FREE(frame);
 	return True;
 }
 
@@ -750,49 +698,39 @@
 
 ****************************************************************************/
 
-static bool parse_lpq_plp(char *line,print_queue_struct *buf,bool first)
+static BOOL parse_lpq_plp(char *line,print_queue_struct *buf,BOOL first)
 {
-	char *tok[11];
+	fstring tok[11];
 	int count=0;
 	const char *cline = line;
-	TALLOC_CTX *frame = talloc_stackframe();
 
 	/* handle the case of "(standard input)" as a filename */
 	string_sub(line,"stdin","STDIN",0);
 	all_string_sub(line,"(","\"",0);
 	all_string_sub(line,")","\"",0);
-
-	for (count=0; count<11 &&
-			next_token_talloc(frame,&cline,&tok[count],NULL);
-			count++) {
+  
+	for (count=0; count<11 && next_token(&cline,tok[count],NULL,sizeof(tok[count])); count++) {
 		;
 	}
 
 	/* we must get 11 tokens */
 	if (count < 11) {
-		TALLOC_FREE(frame);
 		return False;
 	}
 
 	/* the first must be "active" or begin with an integer */
 	if (strcmp(tok[0],"active") && !isdigit((int)tok[0][0])) {
-		TALLOC_FREE(frame);
 		return False;
 	}
 
 	/* the 5th and 8th must be integer */
 	if (!isdigit((int)*tok[4]) || !isdigit((int)*tok[7])) {
-		TALLOC_FREE(frame);
 		return False;
 	}
 
 	/* if the fname contains a space then use STDIN */
 	if (strchr_m(tok[6],' ')) {
-		tok[6] = talloc_strdup(frame, "STDIN");
-		if (!tok[6]) {
-			TALLOC_FREE(frame);
-			return false;
-		}
+		fstrcpy(tok[6],"STDIN");
 	}
 
 	/* only take the last part of the filename */
@@ -820,7 +758,6 @@
 	buf->time = time(NULL);
 	fstrcpy(buf->fs_user,tok[1]);
 	fstrcpy(buf->fs_file,tok[6]);
-	TALLOC_FREE(frame);
 	return True;
 }
 
@@ -838,7 +775,7 @@
 
 ********************************************************************/
 
-static bool parse_lpq_nt(char *line,print_queue_struct *buf,bool first)
+static BOOL parse_lpq_nt(char *line,print_queue_struct *buf,BOOL first)
 {
 #define LPRNT_OWNSIZ 11
 #define LPRNT_STATSIZ 9
@@ -921,7 +858,7 @@
 
 ********************************************************************/
 
-static bool parse_lpq_os2(char *line,print_queue_struct *buf,bool first)
+static BOOL parse_lpq_os2(char *line,print_queue_struct *buf,BOOL first)
 {
 #define LPROS2_IDSIZ 5
 #define LPROS2_JOBSIZ 15
@@ -1001,23 +938,19 @@
 parse a vlp line
 ****************************************************************************/
 
-static bool parse_lpq_vlp(char *line,print_queue_struct *buf,bool first)
+static BOOL parse_lpq_vlp(char *line,print_queue_struct *buf,BOOL first)
 {
 	int toknum = 0;
-	char *tok;
-	TALLOC_CTX *frame = talloc_stackframe();
+	fstring tok;
 	const char *cline = line;
 
 	/* First line is printer status */
 
-	if (!isdigit(line[0])) {
-		TALLOC_FREE(frame);
-		return False;
-	}
+	if (!isdigit(line[0])) return False;
 
 	/* Parse a print job entry */
 
-	while(next_token_talloc(frame, &cline, &tok, NULL)) {
+	while(next_token(&cline, tok, NULL, sizeof(fstring))) {
 		switch (toknum) {
 		case 0:
 			buf->job = atoi(tok);
@@ -1041,7 +974,6 @@
 		toknum++;
 	}
 
-	TALLOC_FREE(frame);
 	return True;
 }
 
@@ -1051,11 +983,11 @@
 parse a lpq line. Choose printing style
 ****************************************************************************/
 
-bool parse_lpq_entry(enum printing_types printing_type,char *line,
+BOOL parse_lpq_entry(enum printing_types printing_type,char *line,
 		     print_queue_struct *buf,
-		     print_status_struct *status,bool first)
+		     print_status_struct *status,BOOL first)
 {
-	bool ret;
+	BOOL ret;
 
 	switch (printing_type) {
 		case PRINT_SYSV:

Modified: branches/samba/upstream/source/printing/notify.c
===================================================================
--- branches/samba/upstream/source/printing/notify.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/printing/notify.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -30,12 +31,12 @@
 	struct notify_queue *next, *prev;
 	struct spoolss_notify_msg *msg;
 	struct timeval tv;
-	uint8 *buf;
+	char *buf;
 	size_t buflen;
 } *notify_queue_head = NULL;
 
 
-static bool create_send_ctx(void)
+static BOOL create_send_ctx(void)
 {
 	if (!send_ctx)
 		send_ctx = talloc_init("print notify queue");
@@ -62,7 +63,7 @@
  Used to decide if we need a short select timeout.
 *******************************************************************/
 
-bool print_notify_messages_pending(void)
+BOOL print_notify_messages_pending(void)
 {
 	return (notify_queue_head != NULL);
 }
@@ -71,10 +72,10 @@
  Flatten data into a message.
 *******************************************************************/
 
-static bool flatten_message(struct notify_queue *q)
+static BOOL flatten_message(struct notify_queue *q)
 {
 	struct spoolss_notify_msg *msg = q->msg;
-	uint8 *buf = NULL;
+	char *buf = NULL;
 	size_t buflen = 0, len;
 
 again:
@@ -98,7 +99,7 @@
 				msg->len, msg->notify.data);
 
 	if (buflen != len) {
-		buf = (uint8 *)TALLOC_REALLOC(send_ctx, buf, len);
+		buf = (char *)TALLOC_REALLOC(send_ctx, buf, len);
 		if (!buf)
 			return False;
 		buflen = len;
@@ -115,9 +116,7 @@
  Send the batched messages - on a per-printer basis.
 *******************************************************************/
 
-static void print_notify_send_messages_to_printer(struct messaging_context *msg_ctx,
-						  const char *printer,
-						  unsigned int timeout)
+static void print_notify_send_messages_to_printer(const char *printer, unsigned int timeout)
 {
 	char *buf;
 	struct notify_queue *pq, *pq_next;
@@ -125,7 +124,6 @@
 	size_t num_pids = 0;
 	size_t i;
 	pid_t *pid_list = NULL;
-	struct timeval end_time = timeval_zero();
 
 	/* Count the space needed to send the messages. */
 	for (pq = notify_queue_head; pq; pq = pq->next) {
@@ -177,19 +175,16 @@
 	if (!print_notify_pid_list(printer, send_ctx, &num_pids, &pid_list))
 		return;
 
-	if (timeout != 0) {
-		end_time = timeval_current_ofs(timeout, 0);
-	}
-
 	for (i = 0; i < num_pids; i++) {
-		messaging_send_buf(msg_ctx,
-				   pid_to_procid(pid_list[i]),
-				   MSG_PRINTER_NOTIFY2 | MSG_FLAG_LOWPRIORITY,
-				   (uint8 *)buf, offset);
-
-		if ((timeout != 0) && timeval_expired(&end_time)) {
-			break;
+		unsigned int q_len = messages_pending_for_pid(pid_to_procid(pid_list[i]));
+		if (q_len > 1000) {
+			DEBUG(5, ("print_notify_send_messages_to_printer: discarding notify to printer %s as queue length = %u\n",
+				printer, q_len ));
+			continue;
 		}
+		message_send_pid_with_timeout(pid_to_procid(pid_list[i]),
+					      MSG_PRINTER_NOTIFY2,
+					      buf, offset, True, timeout);
 	}
 }
 
@@ -197,8 +192,7 @@
  Actually send the batched messages.
 *******************************************************************/
 
-void print_notify_send_messages(struct messaging_context *msg_ctx,
-				unsigned int timeout)
+void print_notify_send_messages(unsigned int timeout)
 {
 	if (!print_notify_messages_pending())
 		return;
@@ -207,8 +201,7 @@
 		return;
 
 	while (print_notify_messages_pending())
-		print_notify_send_messages_to_printer(
-			msg_ctx, notify_queue_head->msg->printer, timeout);
+		print_notify_send_messages_to_printer(notify_queue_head->msg->printer, timeout);
 
 	talloc_free_children(send_ctx);
 	num_messages = 0;
@@ -218,7 +211,7 @@
  deep copy a SPOOLSS_NOTIFY_MSG structure using a TALLOC_CTX
  *********************************************************************/
  
-static bool copy_notify2_msg( SPOOLSS_NOTIFY_MSG *to, SPOOLSS_NOTIFY_MSG *from )
+static BOOL copy_notify2_msg( SPOOLSS_NOTIFY_MSG *to, SPOOLSS_NOTIFY_MSG *from )
 {
 
 	if ( !to || !from )
@@ -510,12 +503,12 @@
  messages on this print queue. Used in printing/notify to send the messages.
 ****************************************************************************/
 
-bool print_notify_pid_list(const char *printername, TALLOC_CTX *mem_ctx, size_t *p_num_pids, pid_t **pp_pid_list)
+BOOL print_notify_pid_list(const char *printername, TALLOC_CTX *mem_ctx, size_t *p_num_pids, pid_t **pp_pid_list)
 {
 	struct tdb_print_db *pdb = NULL;
 	TDB_CONTEXT *tdb = NULL;
 	TDB_DATA data;
-	bool ret = True;
+	BOOL ret = True;
 	size_t i, num_pids, offset;
 	pid_t *pid_list;
 
@@ -553,7 +546,7 @@
 		pid_list = NULL;
 	}
 
-	for( i = 0, offset = 0; i < num_pids; offset += 8, i++)
+	for( i = 0, offset = 0; offset < data.dsize; offset += 8, i++)
 		pid_list[i] = (pid_t)IVAL(data.dptr, offset);
 
 	*pp_pid_list = pid_list;

Modified: branches/samba/upstream/source/printing/nt_printing.c
===================================================================
--- branches/samba/upstream/source/printing/nt_printing.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/printing/nt_printing.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -42,14 +43,14 @@
 
 /* Map generic permissions to printer object specific permissions */
 
-const struct generic_mapping printer_generic_mapping = {
+GENERIC_MAPPING printer_generic_mapping = {
 	PRINTER_READ,
 	PRINTER_WRITE,
 	PRINTER_EXECUTE,
 	PRINTER_ALL_ACCESS
 };
 
-const struct standard_mapping printer_std_mapping = {
+STANDARD_MAPPING printer_std_mapping = {
 	PRINTER_READ,
 	PRINTER_WRITE,
 	PRINTER_EXECUTE,
@@ -58,14 +59,14 @@
 
 /* Map generic permissions to print server object specific permissions */
 
-const struct generic_mapping printserver_generic_mapping = {
+GENERIC_MAPPING printserver_generic_mapping = {
 	SERVER_READ,
 	SERVER_WRITE,
 	SERVER_EXECUTE,
 	SERVER_ALL_ACCESS
 };
 
-const struct generic_mapping printserver_std_mapping = {
+STANDARD_MAPPING printserver_std_mapping = {
 	SERVER_READ,
 	SERVER_WRITE,
 	SERVER_EXECUTE,
@@ -74,7 +75,7 @@
 
 /* Map generic permissions to job object specific permissions */
 
-const struct generic_mapping job_generic_mapping = {
+GENERIC_MAPPING job_generic_mapping = {
 	JOB_READ,
 	JOB_WRITE,
 	JOB_EXECUTE,
@@ -237,18 +238,20 @@
  generate a new TDB_DATA key for storing a printer
 ****************************************************************************/
 
-static TDB_DATA make_printer_tdbkey(TALLOC_CTX *ctx, const char *sharename )
+static TDB_DATA make_printer_tdbkey( const char *sharename )
 {
 	fstring share;
-	char *keystr = NULL;
+	static pstring keystr;
 	TDB_DATA key;
+	
+	fstrcpy( share, sharename );
+	strlower_m( share );
+	
+	pstr_sprintf( keystr, "%s%s", PRINTERS_PREFIX, share );
+	
+	key.dptr = keystr;
+	key.dsize = strlen(keystr)+1;
 
-	fstrcpy(share, sharename);
-	strlower_m(share);
-
-	keystr = talloc_asprintf(ctx, "%s%s", PRINTERS_PREFIX, share);
-	key = string_term_tdb_data(keystr ? keystr : "");
-
 	return key;
 }
 
@@ -256,26 +259,23 @@
  generate a new TDB_DATA key for storing a printer security descriptor
 ****************************************************************************/
 
-static TDB_DATA make_printers_secdesc_tdbkey(TALLOC_CTX *ctx,
-					const char* sharename  )
+static char *make_printers_secdesc_tdbkey( const char* sharename  )
 {
 	fstring share;
-	char *keystr = NULL;
-	TDB_DATA key;
+	static pstring keystr;
+	
+	fstrcpy( share, sharename );
+	strlower_m( share );
+	
+	pstr_sprintf( keystr, "%s%s", SECDESC_PREFIX, share );
 
-	fstrcpy(share, sharename );
-	strlower_m(share);
-
-	keystr = talloc_asprintf(ctx, "%s%s", SECDESC_PREFIX, share);
-	key = string_term_tdb_data(keystr ? keystr : "");
-
-	return key;
+	return keystr;
 }
 
 /****************************************************************************
 ****************************************************************************/
 
-static bool upgrade_to_version_3(void)
+static BOOL upgrade_to_version_3(void)
 {
 	TDB_DATA kbuf, newkey, dbuf;
  
@@ -286,7 +286,7 @@
 
 		dbuf = tdb_fetch(tdb_drivers, kbuf);
 
-		if (strncmp((const char *)kbuf.dptr, FORMS_PREFIX, strlen(FORMS_PREFIX)) == 0) {
+		if (strncmp(kbuf.dptr, FORMS_PREFIX, strlen(FORMS_PREFIX)) == 0) {
 			DEBUG(0,("upgrade_to_version_3:moving form\n"));
 			if (tdb_store(tdb_forms, kbuf, dbuf, TDB_REPLACE) != 0) {
 				SAFE_FREE(dbuf.dptr);
@@ -300,7 +300,7 @@
 			}
 		}
  
-		if (strncmp((const char *)kbuf.dptr, PRINTERS_PREFIX, strlen(PRINTERS_PREFIX)) == 0) {
+		if (strncmp(kbuf.dptr, PRINTERS_PREFIX, strlen(PRINTERS_PREFIX)) == 0) {
 			DEBUG(0,("upgrade_to_version_3:moving printer\n"));
 			if (tdb_store(tdb_printers, kbuf, dbuf, TDB_REPLACE) != 0) {
 				SAFE_FREE(dbuf.dptr);
@@ -314,7 +314,7 @@
 			}
 		}
  
-		if (strncmp((const char *)kbuf.dptr, SECDESC_PREFIX, strlen(SECDESC_PREFIX)) == 0) {
+		if (strncmp(kbuf.dptr, SECDESC_PREFIX, strlen(SECDESC_PREFIX)) == 0) {
 			DEBUG(0,("upgrade_to_version_3:moving secdesc\n"));
 			if (tdb_store(tdb_printers, kbuf, dbuf, TDB_REPLACE) != 0) {
 				SAFE_FREE(dbuf.dptr);
@@ -353,12 +353,13 @@
 	int result, i;
 	uint32 sd_size;
 	size_t size_new_sec;
+	DOM_SID sid;
 
 	if (!data.dptr || data.dsize == 0) {
 		return 0;
 	}
 
-	if ( strncmp((const char *) key.dptr, SECDESC_PREFIX, strlen(SECDESC_PREFIX) ) != 0 ) {
+	if ( strncmp( key.dptr, SECDESC_PREFIX, strlen(SECDESC_PREFIX) ) != 0 ) {
 		return 0;
 	}
 
@@ -366,13 +367,12 @@
 
 	ZERO_STRUCT( ps );
 
-	prs_init_empty( &ps, ctx, UNMARSHALL );
-	prs_give_memory( &ps, (char *)data.dptr, data.dsize, False );
+	prs_init( &ps, 0, ctx, UNMARSHALL );
+	prs_give_memory( &ps, data.dptr, data.dsize, False );
 
 	if ( !sec_io_desc_buf( "sec_desc_upg_fn", &sd_orig, &ps, 1 ) ) {
 		/* delete bad entries */
-		DEBUG(0,("sec_desc_upg_fn: Failed to parse original sec_desc for %si.  Deleting....\n",
-			(const char *)key.dptr ));
+		DEBUG(0,("sec_desc_upg_fn: Failed to parse original sec_desc for %si.  Deleting....\n", key.dptr ));
 		tdb_delete( tdb_printers, key );
 		prs_mem_free( &ps );
 		return 0;
@@ -382,7 +382,7 @@
 		prs_mem_free( &ps );
 		return 0;
 	}
-	sec = sd_orig->sd;
+	sec = sd_orig->sec;
 		
 	/* is this even valid? */
 	
@@ -413,10 +413,10 @@
 
 	/* create a new SEC_DESC with the appropriate owner and group SIDs */
 
+	string_to_sid(&sid, "S-1-5-32-544" );
 	new_sec = make_sec_desc( ctx, SEC_DESC_REVISION, SEC_DESC_SELF_RELATIVE,
-				 &global_sid_Builtin_Administrators,
-				 &global_sid_Builtin_Administrators,
-				 NULL, NULL, &size_new_sec );
+		&sid, &sid,
+		NULL, NULL, &size_new_sec );
 	if (!new_sec) {
 		prs_mem_free( &ps );
 		return 0;
@@ -437,12 +437,8 @@
 
 	/* store it back */
 	
-	sd_size = ndr_size_security_descriptor(sd_store->sd, 0)
-		+ sizeof(SEC_DESC_BUF);
-	if ( !prs_init(&ps, sd_size, ctx, MARSHALL) ) {
-		DEBUG(0,("sec_desc_upg_fn: Failed to allocate prs memory for %s\n", key.dptr ));
-		return 0;
-	}
+	sd_size = sec_desc_size(sd_store->sec) + sizeof(SEC_DESC_BUF);
+	prs_init(&ps, sd_size, ctx, MARSHALL);
 
 	if ( !sec_io_desc_buf( "sec_desc_upg_fn", &sd_store, &ps, 1 ) ) {
 		DEBUG(0,("sec_desc_upg_fn: Failed to parse new sec_desc for %s\n", key.dptr ));
@@ -450,7 +446,7 @@
 		return 0;
 	}
 
-	data.dptr = (uint8 *)prs_data_p( &ps );
+	data.dptr = prs_data_p( &ps );
 	data.dsize = sd_size;
 	
 	result = tdb_store( tdb_printers, key, data, TDB_REPLACE );
@@ -465,7 +461,7 @@
 /*******************************************************************
 *******************************************************************/
 
-static bool upgrade_to_version_4(void)
+static BOOL upgrade_to_version_4(void)
 {
 	TALLOC_CTX *ctx;
 	int result;
@@ -493,46 +489,46 @@
 static int normalize_printers_fn( TDB_CONTEXT *the_tdb, TDB_DATA key,
                                   TDB_DATA data, void *state )
 {
-	TALLOC_CTX *ctx = talloc_tos();
 	TDB_DATA new_key;
-
+	
 	if (!data.dptr || data.dsize == 0)
 		return 0;
 
 	/* upgrade printer records and security descriptors */
-
-	if ( strncmp((const char *) key.dptr, PRINTERS_PREFIX, strlen(PRINTERS_PREFIX) ) == 0 ) {
-		new_key = make_printer_tdbkey(ctx, (const char *)key.dptr+strlen(PRINTERS_PREFIX) );
+	
+	if ( strncmp( key.dptr, PRINTERS_PREFIX, strlen(PRINTERS_PREFIX) ) == 0 ) {
+		new_key = make_printer_tdbkey( key.dptr+strlen(PRINTERS_PREFIX) );
 	}
-	else if ( strncmp((const char *) key.dptr, SECDESC_PREFIX, strlen(SECDESC_PREFIX) ) == 0 ) {
-		new_key = make_printers_secdesc_tdbkey(ctx, (const char *)key.dptr+strlen(SECDESC_PREFIX) );
+	else if ( strncmp( key.dptr, SECDESC_PREFIX, strlen(SECDESC_PREFIX) ) == 0 ) {
+		new_key.dptr = make_printers_secdesc_tdbkey( key.dptr+strlen(SECDESC_PREFIX) );
+		new_key.dsize = strlen( new_key.dptr ) + 1;
 	}
 	else {
 		/* ignore this record */
 		return 0;
 	}
-
+		
 	/* delete the original record and store under the normalized key */
-
+	
 	if ( tdb_delete( the_tdb, key ) != 0 ) {
 		DEBUG(0,("normalize_printers_fn: tdb_delete for [%s] failed!\n", 
 			key.dptr));
 		return 1;
 	}
-
+	
 	if ( tdb_store( the_tdb, new_key, data, TDB_REPLACE) != 0 ) {
 		DEBUG(0,("normalize_printers_fn: failed to store new record for [%s]!\n",
 			key.dptr));
 		return 1;
 	}
-
+	
 	return 0;
 }
 
 /*******************************************************************
 *******************************************************************/
 
-static bool upgrade_to_version_5(void)
+static BOOL upgrade_to_version_5(void)
 {
 	TALLOC_CTX *ctx;
 	int result;
@@ -553,7 +549,7 @@
  Open the NT printing tdbs. Done once before fork().
 ****************************************************************************/
 
-bool nt_printing_init(struct messaging_context *msg_ctx)
+BOOL nt_printing_init(void)
 {
 	const char *vstring = "INFO/version";
 	WERROR win_rc;
@@ -564,28 +560,28 @@
  
 	if (tdb_drivers)
 		tdb_close(tdb_drivers);
-	tdb_drivers = tdb_open_log(state_path("ntdrivers.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
+	tdb_drivers = tdb_open_log(lock_path("ntdrivers.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
 	if (!tdb_drivers) {
 		DEBUG(0,("nt_printing_init: Failed to open nt drivers database %s (%s)\n",
-			state_path("ntdrivers.tdb"), strerror(errno) ));
+			lock_path("ntdrivers.tdb"), strerror(errno) ));
 		return False;
 	}
  
 	if (tdb_printers)
 		tdb_close(tdb_printers);
-	tdb_printers = tdb_open_log(state_path("ntprinters.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
+	tdb_printers = tdb_open_log(lock_path("ntprinters.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
 	if (!tdb_printers) {
 		DEBUG(0,("nt_printing_init: Failed to open nt printers database %s (%s)\n",
-			state_path("ntprinters.tdb"), strerror(errno) ));
+			lock_path("ntprinters.tdb"), strerror(errno) ));
 		return False;
 	}
  
 	if (tdb_forms)
 		tdb_close(tdb_forms);
-	tdb_forms = tdb_open_log(state_path("ntforms.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
+	tdb_forms = tdb_open_log(lock_path("ntforms.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
 	if (!tdb_forms) {
 		DEBUG(0,("nt_printing_init: Failed to open nt forms database %s (%s)\n",
-			state_path("ntforms.tdb"), strerror(errno) ));
+			lock_path("ntforms.tdb"), strerror(errno) ));
 		return False;
 	}
  
@@ -642,16 +638,15 @@
 	 * drivers are installed
 	 */
 
-	messaging_register(msg_ctx, NULL, MSG_PRINTER_DRVUPGRADE,
-			   do_drv_upgrade_printer);
+	message_register(MSG_PRINTER_DRVUPGRADE, do_drv_upgrade_printer, NULL);
 
 	/*
 	 * register callback to handle updating printer data
 	 * when a driver is initialized
 	 */
 
-	messaging_register(msg_ctx, NULL, MSG_PRINTERDATA_INIT_RESET,
-			   reset_all_printerdata);
+	message_register(MSG_PRINTERDATA_INIT_RESET, reset_all_printerdata,
+			 NULL);
 
 	/* of course, none of the message callbacks matter if you don't
 	   tell messages.c that you interested in receiving PRINT_GENERAL 
@@ -671,25 +666,13 @@
  Function to allow filename parsing "the old way".
 ********************************************************************/
 
-static char *driver_unix_convert(connection_struct *conn,
-		const char *old_name,
-		SMB_STRUCT_STAT *pst)
+static void driver_unix_convert(char *name,connection_struct *conn,
+		char *saved_last_component, SMB_STRUCT_STAT *pst)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *name = talloc_strdup(ctx, old_name);
-	char *new_name = NULL;
-
-	if (!name) {
-		return NULL;
-	}
 	unix_format(name);
-	name = unix_clean_name(ctx, name);
-	if (!name) {
-		return NULL;
-	}
+	unix_clean_name(name);
 	trim_string(name,"/","/");
-	unix_convert(ctx,conn, name, false, &new_name, NULL, pst);
-	return new_name;
+	unix_convert(conn, name, False, saved_last_component, pst);
 }
 
 /*******************************************************************
@@ -716,7 +699,7 @@
  each add or delete printer RPC. Only Microsoft knows why... JRR020119
 ********************************************************************/
 
-uint32 update_c_setprinter(bool initialize)
+uint32 update_c_setprinter(BOOL initialize)
 {
 	int32 c_setprinter;
 	int32 printer_count = 0;
@@ -775,11 +758,11 @@
  get a builtin form struct
 ****************************************************************************/
 
-bool get_a_builtin_ntform(UNISTR2 *uni_formname,nt_forms_struct *form)
+BOOL get_a_builtin_ntform(UNISTR2 *uni_formname,nt_forms_struct *form)
 {
 	int i,count;
 	fstring form_name;
-	unistr2_to_ascii(form_name, uni_formname, sizeof(form_name));
+	unistr2_to_ascii(form_name, uni_formname, sizeof(form_name)-1);
 	DEBUGADD(6,("Looking for builtin form %s \n", form_name));
 	count = sizeof(default_forms) / sizeof(default_forms[0]);
 	for (i=0;i<count;i++) {
@@ -811,14 +794,14 @@
 	     kbuf.dptr;
 	     newkey = tdb_nextkey(tdb_forms, kbuf), safe_free(kbuf.dptr), kbuf=newkey) 
 	{
-		if (strncmp((const char *)kbuf.dptr, FORMS_PREFIX, strlen(FORMS_PREFIX)) != 0) 
+		if (strncmp(kbuf.dptr, FORMS_PREFIX, strlen(FORMS_PREFIX)) != 0) 
 			continue;
 		
 		dbuf = tdb_fetch(tdb_forms, kbuf);
 		if (!dbuf.dptr) 
 			continue;
 
-		fstrcpy(form.name, (const char *)kbuf.dptr+strlen(FORMS_PREFIX));
+		fstrcpy(form.name, kbuf.dptr+strlen(FORMS_PREFIX));
 		ret = tdb_unpack(dbuf.dptr, dbuf.dsize, "dddddddd",
 				 &i, &form.flag, &form.width, &form.length, &form.left,
 				 &form.top, &form.right, &form.bottom);
@@ -842,46 +825,26 @@
 /****************************************************************************
 write a form struct list
 ****************************************************************************/
-
 int write_ntforms(nt_forms_struct **list, int number)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *buf = NULL;
-	char *key = NULL;
+	pstring buf, key;
 	int len;
-	TDB_DATA dbuf;
+	TDB_DATA kbuf,dbuf;
 	int i;
 
 	for (i=0;i<number;i++) {
 		/* save index, so list is rebuilt in correct order */
-		len = tdb_pack(NULL, 0, "dddddddd",
+		len = tdb_pack(buf, sizeof(buf), "dddddddd",
 			       i, (*list)[i].flag, (*list)[i].width, (*list)[i].length,
 			       (*list)[i].left, (*list)[i].top, (*list)[i].right,
 			       (*list)[i].bottom);
-		if (!len) {
-			continue;
-		}
-		buf = TALLOC_ARRAY(ctx, char, len);
-		if (!buf) {
-			return 0;
-		}
-		len = tdb_pack((uint8 *)buf, len, "dddddddd",
-			       i, (*list)[i].flag, (*list)[i].width, (*list)[i].length,
-			       (*list)[i].left, (*list)[i].top, (*list)[i].right,
-			       (*list)[i].bottom);
-		key = talloc_asprintf(ctx, "%s%s", FORMS_PREFIX, (*list)[i].name);
-		if (!key) {
-			return 0;
-		}
+		if (len > sizeof(buf)) break;
+		slprintf(key, sizeof(key)-1, "%s%s", FORMS_PREFIX, (*list)[i].name);
+		kbuf.dsize = strlen(key)+1;
+		kbuf.dptr = key;
 		dbuf.dsize = len;
-		dbuf.dptr = (uint8 *)buf;
-		if (tdb_store_bystring(tdb_forms, key, dbuf, TDB_REPLACE) != 0) {
-			TALLOC_FREE(key);
-			TALLOC_FREE(buf);
-			break;
-		}
-		TALLOC_FREE(key);
-		TALLOC_FREE(buf);
+		dbuf.dptr = buf;
+		if (tdb_store(tdb_forms, kbuf, dbuf, TDB_REPLACE) != 0) break;
        }
 
        return i;
@@ -890,10 +853,10 @@
 /****************************************************************************
 add a form struct at the end of the list
 ****************************************************************************/
-bool add_a_form(nt_forms_struct **list, const FORM *form, int *count)
+BOOL add_a_form(nt_forms_struct **list, const FORM *form, int *count)
 {
 	int n=0;
-	bool update;
+	BOOL update;
 	fstring form_name;
 
 	/*
@@ -904,7 +867,7 @@
 
 	update=False;
 	
-	unistr2_to_ascii(form_name, &form->name, sizeof(form_name));
+	unistr2_to_ascii(form_name, &form->name, sizeof(form_name)-1);
 	for (n=0; n<*count; n++) {
 		if ( strequal((*list)[n].name, form_name) ) {
 			update=True;
@@ -917,7 +880,7 @@
 			DEBUG(0,("add_a_form: failed to enlarge forms list!\n"));
 			return False;
 		}
-		unistr2_to_ascii((*list)[n].name, &form->name, sizeof((*list)[n].name));
+		unistr2_to_ascii((*list)[n].name, &form->name, sizeof((*list)[n].name)-1);
 		(*count)++;
 	}
 	
@@ -939,15 +902,16 @@
  Delete a named form struct.
 ****************************************************************************/
 
-bool delete_a_form(nt_forms_struct **list, UNISTR2 *del_name, int *count, WERROR *ret)
+BOOL delete_a_form(nt_forms_struct **list, UNISTR2 *del_name, int *count, WERROR *ret)
 {
-	char *key = NULL;
+	pstring key;
+	TDB_DATA kbuf;
 	int n=0;
 	fstring form_name;
 
 	*ret = WERR_OK;
 
-	unistr2_to_ascii(form_name, del_name, sizeof(form_name));
+	unistr2_to_ascii(form_name, del_name, sizeof(form_name)-1);
 
 	for (n=0; n<*count; n++) {
 		if (!strncmp((*list)[n].name, form_name, strlen(form_name))) {
@@ -962,17 +926,15 @@
 		return False;
 	}
 
-	if (asprintf(&key, "%s%s", FORMS_PREFIX, (*list)[n].name) < 0) {
+	slprintf(key, sizeof(key)-1, "%s%s", FORMS_PREFIX, (*list)[n].name);
+	kbuf.dsize = strlen(key)+1;
+	kbuf.dptr = key;
+	if (tdb_delete(tdb_forms, kbuf) != 0) {
 		*ret = WERR_NOMEM;
-		return false;
-	}
-	if (tdb_delete_bystring(tdb_forms, key) != 0) {
-		SAFE_FREE(key);
-		*ret = WERR_NOMEM;
 		return False;
 	}
-	SAFE_FREE(key);
-	return true;
+
+	return True;
 }
 
 /****************************************************************************
@@ -983,7 +945,7 @@
 {
 	int n=0;
 	fstring form_name;
-	unistr2_to_ascii(form_name, &(form->name), sizeof(form_name));
+	unistr2_to_ascii(form_name, &(form->name), sizeof(form_name)-1);
 
 	DEBUG(106, ("[%s]\n", form_name));
 	for (n=0; n<count; n++) {
@@ -1011,7 +973,7 @@
 {
 	int total=0;
 	const char *short_archi;
-	char *key = NULL;
+	pstring key;
 	TDB_DATA kbuf, newkey;
 
 	short_archi = get_short_archi(architecture);
@@ -1019,29 +981,24 @@
 		return 0;
 	}
 
-	if (asprintf(&key, "%s%s/%d/", DRIVERS_PREFIX,
-				short_archi, version) < 0) {
-		return 0;
-	}
+	slprintf(key, sizeof(key)-1, "%s%s/%d/", DRIVERS_PREFIX, short_archi, version);
 
 	for (kbuf = tdb_firstkey(tdb_drivers);
 	     kbuf.dptr;
 	     newkey = tdb_nextkey(tdb_drivers, kbuf), safe_free(kbuf.dptr), kbuf=newkey) {
 
-		if (strncmp((const char *)kbuf.dptr, key, strlen(key)) != 0)
+		if (strncmp(kbuf.dptr, key, strlen(key)) != 0)
 			continue;
-
+		
 		if((*list = SMB_REALLOC_ARRAY(*list, fstring, total+1)) == NULL) {
 			DEBUG(0,("get_ntdrivers: failed to enlarge list!\n"));
-			SAFE_FREE(key);
 			return -1;
 		}
 
-		fstrcpy((*list)[total], (const char *)kbuf.dptr+strlen(key));
+		fstrcpy((*list)[total], kbuf.dptr+strlen(key));
 		total++;
 	}
 
-	SAFE_FREE(key);
 	return(total);
 }
 
@@ -1108,7 +1065,7 @@
 	}
 
 	/* Skip OEM header (if any) and the DOS stub to start of Windows header */
-	if (SMB_VFS_LSEEK(fsp, SVAL(buf,DOS_HEADER_LFANEW_OFFSET), SEEK_SET) == (SMB_OFF_T)-1) {
+	if (SMB_VFS_LSEEK(fsp, fsp->fh->fd, SVAL(buf,DOS_HEADER_LFANEW_OFFSET), SEEK_SET) == (SMB_OFF_T)-1) {
 		DEBUG(3,("get_file_version: File [%s] too short, errno = %d\n",
 				fname, errno));
 		/* Assume this isn't an error... the file just looks sort of like a PE/NE file */
@@ -1129,7 +1086,7 @@
 		unsigned int section_table_bytes;
 
 		/* Just skip over optional header to get to section table */
-		if (SMB_VFS_LSEEK(fsp,
+		if (SMB_VFS_LSEEK(fsp, fsp->fh->fd,
 				SVAL(buf,PE_HEADER_OPTIONAL_HEADER_SIZE)-(NE_HEADER_SIZE-PE_HEADER_SIZE),
 				SEEK_CUR) == (SMB_OFF_T)-1) {
 			DEBUG(3,("get_file_version: File [%s] Windows optional header too short, errno = %d\n",
@@ -1175,7 +1132,7 @@
 				}
 
 				/* Seek to the start of the .rsrc section info */
-				if (SMB_VFS_LSEEK(fsp, section_pos, SEEK_SET) == (SMB_OFF_T)-1) {
+				if (SMB_VFS_LSEEK(fsp, fsp->fh->fd, section_pos, SEEK_SET) == (SMB_OFF_T)-1) {
 					DEBUG(3,("get_file_version: PE file [%s] too short for section info, errno = %d\n",
 							fname, errno));
 					goto error_exit;
@@ -1199,7 +1156,7 @@
 						if (IVAL(buf,pos) == VS_MAGIC_VALUE) {
 							*major = IVAL(buf,pos+VS_MAJOR_OFFSET);
 							*minor = IVAL(buf,pos+VS_MINOR_OFFSET);
-
+							
 							DEBUG(6,("get_file_version: PE file [%s] Version = %08x:%08x (%d.%d.%d.%d)\n",
 									  fname, *major, *minor,
 									  (*major>>16)&0xffff, *major&0xffff,
@@ -1271,7 +1228,7 @@
 				 * twice, as it is simpler to read the code. */
 				if (strcmp(&buf[i], VS_SIGNATURE) == 0) {
 					/* Compute skip alignment to next long address */
-					int skip = -(SMB_VFS_LSEEK(fsp, 0, SEEK_CUR) - (byte_count - i) +
+					int skip = -(SMB_VFS_LSEEK(fsp, fsp->fh->fd, 0, SEEK_CUR) - (byte_count - i) +
 								 sizeof(VS_SIGNATURE)) & 3;
 					if (IVAL(buf,i+sizeof(VS_SIGNATURE)+skip) != 0xfeef04bd) continue;
 
@@ -1318,8 +1275,8 @@
 
 static int file_version_is_newer(connection_struct *conn, fstring new_file, fstring old_file)
 {
-	bool use_version = true;
-	char *filepath = NULL;
+	BOOL   use_version = True;
+	pstring filepath;
 
 	uint32 new_major;
 	uint32 new_minor;
@@ -1341,12 +1298,11 @@
 	old_create_time = (time_t)0;
 
 	/* Get file version info (if available) for previous file (if it exists) */
-	filepath = driver_unix_convert(conn,old_file,&stat_buf);
-	if (!filepath) {
-		goto error_exit;
-	}
+	pstrcpy(filepath, old_file);
 
-	status = open_file_ntcreate(conn, NULL, filepath, &stat_buf,
+	driver_unix_convert(filepath,conn,NULL,&stat_buf);
+
+	status = open_file_ntcreate(conn, filepath, &stat_buf,
 				FILE_GENERIC_READ,
 				FILE_SHARE_READ|FILE_SHARE_WRITE,
 				FILE_OPEN,
@@ -1359,7 +1315,7 @@
 		/* Old file not found, so by definition new file is in fact newer */
 		DEBUG(10,("file_version_is_newer: Can't open old file [%s], errno = %d\n",
 				filepath, errno));
-		return 1;
+		return True;
 
 	} else {
 		int ret = get_file_version(fsp, old_file, &old_major, &old_minor);
@@ -1370,10 +1326,8 @@
 		if (!ret) {
 			DEBUG(6,("file_version_is_newer: Version info not found [%s], use mod time\n",
 					 old_file));
-			use_version = false;
-			if (SMB_VFS_FSTAT(fsp, &st) == -1) {
-				 goto error_exit;
-			}
+			use_version = False;
+			if (SMB_VFS_FSTAT(fsp, fsp->fh->fd, &st) == -1) goto error_exit;
 			old_create_time = st.st_mtime;
 			DEBUGADD(6,("file_version_is_newer: mod time = %ld sec\n", old_create_time));
 		}
@@ -1381,12 +1335,10 @@
 	close_file(fsp, NORMAL_CLOSE);
 
 	/* Get file version info (if available) for new file */
-	filepath = driver_unix_convert(conn,new_file,&stat_buf);
-	if (!filepath) {
-		goto error_exit;
-	}
+	pstrcpy(filepath, new_file);
+	driver_unix_convert(filepath,conn,NULL,&stat_buf);
 
-	status = open_file_ntcreate(conn, NULL, filepath, &stat_buf,
+	status = open_file_ntcreate(conn, filepath, &stat_buf,
 				FILE_GENERIC_READ,
 				FILE_SHARE_READ|FILE_SHARE_WRITE,
 				FILE_OPEN,
@@ -1410,10 +1362,8 @@
 		if (!ret) {
 			DEBUG(6,("file_version_is_newer: Version info not found [%s], use mod time\n",
 					 new_file));
-			use_version = false;
-			if (SMB_VFS_FSTAT(fsp, &st) == -1) {
-				goto error_exit;
-			}
+			use_version = False;
+			if (SMB_VFS_FSTAT(fsp, fsp->fh->fd, &st) == -1) goto error_exit;
 			new_create_time = st.st_mtime;
 			DEBUGADD(6,("file_version_is_newer: mod time = %ld sec\n", new_create_time));
 		}
@@ -1424,24 +1374,24 @@
 		/* Compare versions and choose the larger version number */
 		if (new_major > old_major ||
 			(new_major == old_major && new_minor > old_minor)) {
-
+			
 			DEBUG(6,("file_version_is_newer: Replacing [%s] with [%s]\n", old_file, new_file));
-			return 1;
+			return True;
 		}
 		else {
 			DEBUG(6,("file_version_is_newer: Leaving [%s] unchanged\n", old_file));
-			return 0;
+			return False;
 		}
 
 	} else {
 		/* Compare modification time/dates and choose the newest time/date */
 		if (new_create_time > old_create_time) {
 			DEBUG(6,("file_version_is_newer: Replacing [%s] with [%s]\n", old_file, new_file));
-			return 1;
+			return True;
 		}
 		else {
 			DEBUG(6,("file_version_is_newer: Leaving [%s] unchanged\n", old_file));
-			return 0;
+			return False;
 		}
 	}
 
@@ -1459,7 +1409,7 @@
 {
 	int               cversion;
 	NTSTATUS          nt_status;
- 	char *driverpath = NULL;
+ 	pstring           driverpath;
 	DATA_BLOB         null_pw;
 	fstring           res_type;
 	files_struct      *fsp = NULL;
@@ -1491,7 +1441,7 @@
 	 */
 
 	/* Null password is ok - we are already an authenticated user... */
-	null_pw = data_blob_null;
+	null_pw = data_blob(NULL, 0);
 	fstrcpy(res_type, "A:");
  	become_root();
 	conn = make_connection_with_chdir("print$", null_pw, res_type, user->vuid, &nt_status);
@@ -1512,27 +1462,16 @@
 
 	/* Open the driver file (Portable Executable format) and determine the
 	 * deriver the cversion. */
-	driverpath = talloc_asprintf(talloc_tos(),
-					"%s/%s",
-					architecture,
-					driverpath_in);
-	if (!driverpath) {
-		*perr = WERR_NOMEM;
-		goto error_exit;
-	}
+	slprintf(driverpath, sizeof(driverpath)-1, "%s/%s", architecture, driverpath_in);
 
-	driverpath = driver_unix_convert(conn,driverpath,&st);
-	if (!driverpath) {
-		*perr = WERR_NOMEM;
-		goto error_exit;
-	}
+	driver_unix_convert(driverpath,conn,NULL,&st);
 
-	if (!vfs_file_exist(conn, driverpath, &st)) {
+	if ( !vfs_file_exist( conn, driverpath, &st ) ) {
 		*perr = WERR_BADFILE;
 		goto error_exit;
 	}
 
-	status = open_file_ntcreate(conn, NULL, driverpath, &st,
+	status = open_file_ntcreate(conn, driverpath, &st,
 				FILE_GENERIC_READ,
 				FILE_SHARE_READ|FILE_SHARE_WRITE,
 				FILE_OPEN,
@@ -1802,18 +1741,21 @@
 	NT_PRINTER_DRIVER_INFO_LEVEL_3 *driver;
 	NT_PRINTER_DRIVER_INFO_LEVEL_3 converted_driver;
 	const char *architecture;
-	char *new_dir = NULL;
-	char *old_name = NULL;
-	char *new_name = NULL;
+	pstring new_dir;
+	pstring old_name;
+	pstring new_name;
 	DATA_BLOB null_pw;
 	connection_struct *conn;
 	NTSTATUS nt_status;
+	pstring inbuf;
+	pstring outbuf;
 	fstring res_type;
 	SMB_STRUCT_STAT st;
-	int i;
-	TALLOC_CTX *ctx = talloc_tos();
 	int ver = 0;
+	int i;
 
+	memset(inbuf, '\0', sizeof(inbuf));
+	memset(outbuf, '\0', sizeof(outbuf));
 	*perr = WERR_OK;
 
 	if (level==3)
@@ -1836,7 +1778,7 @@
 	 * Note we must be root to do this.
 	 */
 
-	null_pw = data_blob_null;
+	null_pw = data_blob(NULL, 0);
 	fstrcpy(res_type, "A:");
 	become_root();
 	conn = make_connection_with_chdir("print$", null_pw, res_type, user->vuid, &nt_status);
@@ -1857,29 +1799,15 @@
 		return WERR_ACCESS_DENIED;
 	}
 
-	/* WE ARE NOW RUNNING AS USER conn->vuid !!!!! */
-
 	/*
 	 * make the directories version and version\driver_name
 	 * under the architecture directory.
 	 */
 	DEBUG(5,("Creating first directory\n"));
-	new_dir = talloc_asprintf(ctx,
-				"%s/%d",
-				architecture,
-				driver->cversion);
-	if (!new_dir) {
-		*perr = WERR_NOMEM;
-		goto err_exit;
-	}
-	new_dir = driver_unix_convert(conn,new_dir,&st);
-	if (!new_dir) {
-		*perr = WERR_NOMEM;
-		goto err_exit;
-	}
+	slprintf(new_dir, sizeof(new_dir)-1, "%s/%d", architecture, driver->cversion);
+	driver_unix_convert(new_dir, conn, NULL, &st);
+	create_directory(conn, new_dir);
 
-	create_directory(conn, NULL, new_dir);
-
 	/* For each driver file, archi\filexxx.yyy, if there is a duplicate file
 	 * listed for this driver which has already been moved, skip it (note:
 	 * drivers may list the same file name several times. Then check if the
@@ -1900,64 +1828,27 @@
 	DEBUG(5,("Moving files now !\n"));
 
 	if (driver->driverpath && strlen(driver->driverpath)) {
-		new_name = talloc_asprintf(ctx,
-					"%s/%s",
-					architecture,
-					driver->driverpath);
-		if (!new_name) {
-			*perr = WERR_NOMEM;
-			goto err_exit;
-		}
-		old_name = talloc_asprintf(ctx,
-					"%s/%s",
-					new_dir,
-					driver->driverpath);
-		if (!old_name) {
-			*perr = WERR_NOMEM;
-			goto err_exit;
-		}
-
+		slprintf(new_name, sizeof(new_name)-1, "%s/%s", architecture, driver->driverpath);	
+		slprintf(old_name, sizeof(old_name)-1, "%s/%s", new_dir, driver->driverpath);	
 		if (ver != -1 && (ver=file_version_is_newer(conn, new_name, old_name)) > 0) {
-			new_name = driver_unix_convert(conn,new_name,&st);
-			if (!new_name) {
-				*perr = WERR_NOMEM;
-				goto err_exit;
-			}
-			if ( !NT_STATUS_IS_OK(copy_file(ctx,conn, new_name, old_name, OPENX_FILE_EXISTS_TRUNCATE|
+			driver_unix_convert(new_name, conn, NULL, &st);
+			if ( !NT_STATUS_IS_OK(copy_file(conn, new_name, old_name, OPENX_FILE_EXISTS_TRUNCATE|
 						OPENX_FILE_CREATE_IF_NOT_EXIST, 0, False))) {
 				DEBUG(0,("move_driver_to_download_area: Unable to rename [%s] to [%s]\n",
 						new_name, old_name));
 				*perr = WERR_ACCESS_DENIED;
 				ver = -1;
 			}
-		}
+		} 
 	}
 
 	if (driver->datafile && strlen(driver->datafile)) {
 		if (!strequal(driver->datafile, driver->driverpath)) {
-			new_name = talloc_asprintf(ctx,
-					"%s/%s",
-					architecture,
-					driver->datafile);
-			if (!new_name) {
-				*perr = WERR_NOMEM;
-				goto err_exit;
-			}
-			old_name = talloc_asprintf(ctx,
-					"%s/%s",
-					new_dir,
-					driver->datafile);
-			if (!old_name) {
-				*perr = WERR_NOMEM;
-				goto err_exit;
-			}
+			slprintf(new_name, sizeof(new_name)-1, "%s/%s", architecture, driver->datafile);	
+			slprintf(old_name, sizeof(old_name)-1, "%s/%s", new_dir, driver->datafile);	
 			if (ver != -1 && (ver=file_version_is_newer(conn, new_name, old_name)) > 0) {
-				new_name = driver_unix_convert(conn,new_name,&st);
-				if (!new_name) {
-					*perr = WERR_NOMEM;
-					goto err_exit;
-				}
-				if ( !NT_STATUS_IS_OK(copy_file(ctx,conn, new_name, old_name, OPENX_FILE_EXISTS_TRUNCATE|
+				driver_unix_convert(new_name, conn, NULL, &st);
+				if ( !NT_STATUS_IS_OK(copy_file(conn, new_name, old_name, OPENX_FILE_EXISTS_TRUNCATE|
 						OPENX_FILE_CREATE_IF_NOT_EXIST, 0, False))) {
 					DEBUG(0,("move_driver_to_download_area: Unable to rename [%s] to [%s]\n",
 							new_name, old_name));
@@ -1971,29 +1862,11 @@
 	if (driver->configfile && strlen(driver->configfile)) {
 		if (!strequal(driver->configfile, driver->driverpath) &&
 			!strequal(driver->configfile, driver->datafile)) {
-			new_name = talloc_asprintf(ctx,
-						"%s/%s",
-						architecture,
-						driver->configfile);
-			if (!new_name) {
-				*perr = WERR_NOMEM;
-				goto err_exit;
-			}
-			old_name = talloc_asprintf(ctx,
-						"%s/%s",
-						new_dir,
-						driver->configfile);
-			if (!old_name) {
-				*perr = WERR_NOMEM;
-				goto err_exit;
-			}
+			slprintf(new_name, sizeof(new_name)-1, "%s/%s", architecture, driver->configfile);	
+			slprintf(old_name, sizeof(old_name)-1, "%s/%s", new_dir, driver->configfile);	
 			if (ver != -1 && (ver=file_version_is_newer(conn, new_name, old_name)) > 0) {
-				new_name = driver_unix_convert(conn,new_name,&st);
-				if (!new_name) {
-					*perr = WERR_NOMEM;
-					goto err_exit;
-				}
-				if ( !NT_STATUS_IS_OK(copy_file(ctx,conn, new_name, old_name, OPENX_FILE_EXISTS_TRUNCATE|
+				driver_unix_convert(new_name, conn, NULL, &st);
+				if ( !NT_STATUS_IS_OK(copy_file(conn, new_name, old_name, OPENX_FILE_EXISTS_TRUNCATE|
 						OPENX_FILE_CREATE_IF_NOT_EXIST, 0, False))) {
 					DEBUG(0,("move_driver_to_download_area: Unable to rename [%s] to [%s]\n",
 							new_name, old_name));
@@ -2008,29 +1881,11 @@
 		if (!strequal(driver->helpfile, driver->driverpath) &&
 			!strequal(driver->helpfile, driver->datafile) &&
 			!strequal(driver->helpfile, driver->configfile)) {
-			new_name = talloc_asprintf(ctx,
-					"%s/%s",
-					architecture,
-					driver->helpfile);
-			if (!new_name) {
-				*perr = WERR_NOMEM;
-				goto err_exit;
-			}
-			old_name = talloc_asprintf(ctx,
-					"%s/%s",
-					new_dir,
-					driver->helpfile);
-			if (!old_name) {
-				*perr = WERR_NOMEM;
-				goto err_exit;
-			}
+			slprintf(new_name, sizeof(new_name)-1, "%s/%s", architecture, driver->helpfile);	
+			slprintf(old_name, sizeof(old_name)-1, "%s/%s", new_dir, driver->helpfile);	
 			if (ver != -1 && (ver=file_version_is_newer(conn, new_name, old_name)) > 0) {
-				new_name = driver_unix_convert(conn,new_name,&st);
-				if (!new_name) {
-					*perr = WERR_NOMEM;
-					goto err_exit;
-				}
-				if ( !NT_STATUS_IS_OK(copy_file(ctx,conn, new_name, old_name, OPENX_FILE_EXISTS_TRUNCATE|
+				driver_unix_convert(new_name, conn, NULL, &st);
+				if ( !NT_STATUS_IS_OK(copy_file(conn, new_name, old_name, OPENX_FILE_EXISTS_TRUNCATE|
 						OPENX_FILE_CREATE_IF_NOT_EXIST, 0, False))) {
 					DEBUG(0,("move_driver_to_download_area: Unable to rename [%s] to [%s]\n",
 							new_name, old_name));
@@ -2054,29 +1909,11 @@
 					}
 				}
 
-				new_name = talloc_asprintf(ctx,
-						"%s/%s",
-						architecture,
-						driver->dependentfiles[i]);
-				if (!new_name) {
-					*perr = WERR_NOMEM;
-					goto err_exit;
-				}
-				old_name = talloc_asprintf(ctx,
-						"%s/%s",
-						new_dir,
-						driver->dependentfiles[i]);
-				if (!old_name) {
-					*perr = WERR_NOMEM;
-					goto err_exit;
-				}
+				slprintf(new_name, sizeof(new_name)-1, "%s/%s", architecture, driver->dependentfiles[i]);	
+				slprintf(old_name, sizeof(old_name)-1, "%s/%s", new_dir, driver->dependentfiles[i]);	
 				if (ver != -1 && (ver=file_version_is_newer(conn, new_name, old_name)) > 0) {
-					new_name = driver_unix_convert(conn,new_name,&st);
-					if (!new_name) {
-						*perr = WERR_NOMEM;
-						goto err_exit;
-					}
-					if ( !NT_STATUS_IS_OK(copy_file(ctx,conn, new_name, old_name,
+					driver_unix_convert(new_name, conn, NULL, &st);
+					if ( !NT_STATUS_IS_OK(copy_file(conn, new_name, old_name,
 							OPENX_FILE_EXISTS_TRUNCATE|
 							OPENX_FILE_CREATE_IF_NOT_EXIST, 0, False))) {
 						DEBUG(0,("move_driver_to_download_area: Unable to rename [%s] to [%s]\n",
@@ -2090,34 +1927,24 @@
 		}
 	}
 
-  err_exit:
-
 	close_cnum(conn, user->vuid);
 	unbecome_user();
 
-	if (W_ERROR_EQUAL(*perr, WERR_OK)) {
-		return WERR_OK;
-	}
-	if (ver == -1) {
-		return WERR_UNKNOWN_PRINTER_DRIVER;
-	}
-	return (*perr);
+	return ver != -1 ? WERR_OK : WERR_UNKNOWN_PRINTER_DRIVER;
 }
 
 /****************************************************************************
 ****************************************************************************/
-
 static uint32 add_a_printer_driver_3(NT_PRINTER_DRIVER_INFO_LEVEL_3 *driver)
 {
-	TALLOC_CTX *ctx = talloc_tos();
 	int len, buflen;
 	const char *architecture;
-	char *directory = NULL;
+	pstring directory;
 	fstring temp_name;
-	char *key = NULL;
-	uint8 *buf;
+	pstring key;
+	char *buf;
 	int i, ret;
-	TDB_DATA dbuf;
+	TDB_DATA kbuf, dbuf;
 
 	architecture = get_short_archi(driver->environment);
 	if (!architecture) {
@@ -2129,11 +1956,7 @@
 	 * It does make sense to NOT store the server's name in the printer TDB.
 	 */
 
-	directory = talloc_asprintf(ctx, "\\print$\\%s\\%d\\",
-			architecture, driver->cversion);
-	if (!directory) {
-		return (uint32)-1;
-	}
+	slprintf(directory, sizeof(directory)-1, "\\print$\\%s\\%d\\", architecture, driver->cversion);
 
 	/* .inf files do not always list a file for each of the four standard files. 
 	 * Don't prepend a path to a null filename, or client claims:
@@ -2168,11 +1991,7 @@
 		}
 	}
 
-	key = talloc_asprintf(ctx, "%s%s/%d/%s", DRIVERS_PREFIX,
-			architecture, driver->cversion, driver->name);
-	if (!key) {
-		return (uint32)-1;
-	}
+	slprintf(key, sizeof(key)-1, "%s%s/%d/%s", DRIVERS_PREFIX, architecture, driver->cversion, driver->name);
 
 	DEBUG(5,("add_a_printer_driver_3: Adding driver with key %s\n", key ));
 
@@ -2200,7 +2019,7 @@
 	}
 
 	if (len != buflen) {
-		buf = (uint8 *)SMB_REALLOC(buf, len);
+		buf = (char *)SMB_REALLOC(buf, len);
 		if (!buf) {
 			DEBUG(0,("add_a_printer_driver_3: failed to enlarge buffer\n!"));
 			ret = -1;
@@ -2210,11 +2029,14 @@
 		goto again;
 	}
 
+
+	kbuf.dptr = key;
+	kbuf.dsize = strlen(key)+1;
 	dbuf.dptr = buf;
 	dbuf.dsize = len;
+	
+	ret = tdb_store(tdb_drivers, kbuf, dbuf, TDB_REPLACE);
 
-	ret = tdb_store_bystring(tdb_drivers, key, dbuf, TDB_REPLACE);
-
 done:
 	if (ret)
 		DEBUG(0,("add_a_printer_driver_3: Adding driver with key %s failed.\n", key ));
@@ -2281,11 +2103,11 @@
 static WERROR get_a_printer_driver_3(NT_PRINTER_DRIVER_INFO_LEVEL_3 **info_ptr, fstring drivername, const char *arch, uint32 version)
 {
 	NT_PRINTER_DRIVER_INFO_LEVEL_3 driver;
-	TDB_DATA dbuf;
+	TDB_DATA kbuf, dbuf;
 	const char *architecture;
 	int len = 0;
 	int i;
-	char *key = NULL;
+	pstring key;
 
 	ZERO_STRUCT(driver);
 
@@ -2293,24 +2115,22 @@
 	if ( !architecture ) {
 		return WERR_UNKNOWN_PRINTER_DRIVER;
 	}
-
+	
 	/* Windows 4.0 (i.e. win9x) should always use a version of 0 */
-
+	
 	if ( strcmp( architecture, SPL_ARCH_WIN40 ) == 0 )
 		version = 0;
 
 	DEBUG(8,("get_a_printer_driver_3: [%s%s/%d/%s]\n", DRIVERS_PREFIX, architecture, version, drivername));
 
-	if (asprintf(&key, "%s%s/%d/%s", DRIVERS_PREFIX,
-				architecture, version, drivername) < 0) {
-		return WERR_NOMEM;
-	}
+	slprintf(key, sizeof(key)-1, "%s%s/%d/%s", DRIVERS_PREFIX, architecture, version, drivername);
 
-	dbuf = tdb_fetch_bystring(tdb_drivers, key);
-	if (!dbuf.dptr) {
-		SAFE_FREE(key);
+	kbuf.dptr = key;
+	kbuf.dsize = strlen(key)+1;
+	
+	dbuf = tdb_fetch(tdb_drivers, kbuf);
+	if (!dbuf.dptr) 
 		return WERR_UNKNOWN_PRINTER_DRIVER;
-	}
 
 	len += tdb_unpack(dbuf.dptr, dbuf.dsize, "dffffffff",
 			  &driver.cversion,
@@ -2335,12 +2155,11 @@
 				  &driver.dependentfiles[i]);
 		i++;
 	}
-
+	
 	if ( driver.dependentfiles )
 		fstrcpy( driver.dependentfiles[i], "" );
 
 	SAFE_FREE(dbuf.dptr);
-	SAFE_FREE(key);
 
 	if (len != dbuf.dsize) {
 		SAFE_FREE(driver.dependentfiles);
@@ -2408,7 +2227,7 @@
 
 /****************************************************************************
 ****************************************************************************/
-int pack_devicemode(NT_DEVICEMODE *nt_devmode, uint8 *buf, int buflen)
+int pack_devicemode(NT_DEVICEMODE *nt_devmode, char *buf, int buflen)
 {
 	int len = 0;
 
@@ -2456,6 +2275,7 @@
 			nt_devmode->panningheight,
 			nt_devmode->nt_dev_private);
 
+	
 	if (nt_devmode->nt_dev_private) {
 		len += tdb_pack(buf+len, buflen-len, "B",
 				nt_devmode->driverextra,
@@ -2470,46 +2290,44 @@
 /****************************************************************************
  Pack all values in all printer keys
  ***************************************************************************/
-
-static int pack_values(NT_PRINTER_DATA *data, uint8 *buf, int buflen)
+ 
+static int pack_values(NT_PRINTER_DATA *data, char *buf, int buflen)
 {
 	int 		len = 0;
 	int 		i, j;
 	REGISTRY_VALUE	*val;
 	REGVAL_CTR	*val_ctr;
-	char *path = NULL;
+	pstring		path;
 	int		num_values;
 
 	if ( !data )
 		return 0;
 
 	/* loop over all keys */
-
-	for ( i=0; i<data->num_keys; i++ ) {
+		
+	for ( i=0; i<data->num_keys; i++ ) {	
 		val_ctr = data->keys[i].values;
 		num_values = regval_ctr_numvals( val_ctr );
 
 		/* pack the keyname followed by a empty value */
 
-		len += tdb_pack(buf+len, buflen-len, "pPdB",
+		len += tdb_pack(buf+len, buflen-len, "pPdB", 
 				&data->keys[i].name,
-				data->keys[i].name,
+				data->keys[i].name, 
 				REG_NONE,
 				0,
 				NULL);
-
+		
 		/* now loop over all values */
-
+		
 		for ( j=0; j<num_values; j++ ) {
 			/* pathname should be stored as <key>\<value> */
-
+			
 			val = regval_ctr_specific_value( val_ctr, j );
-			if (asprintf(&path, "%s\\%s",
-					data->keys[i].name,
-					regval_name(val)) < 0) {
-				return -1;
-			}
-
+			pstrcpy( path, data->keys[i].name );
+			pstrcat( path, "\\" );
+			pstrcat( path, regval_name(val) );
+			
 			len += tdb_pack(buf+len, buflen-len, "pPdB",
 					val,
 					path,
@@ -2518,13 +2336,12 @@
 					regval_data_p(val) );
 
 			DEBUG(8,("specific: [%s], len: %d\n", regval_name(val), regval_size(val)));
-			SAFE_FREE(path);
 		}
-
+	
 	}
 
 	/* terminator */
-
+	
 	len += tdb_pack(buf+len, buflen-len, "p", NULL);
 
 	return len;
@@ -2539,25 +2356,23 @@
 uint32 del_a_printer(const char *sharename)
 {
 	TDB_DATA kbuf;
-	char *printdb_path = NULL;
-	TALLOC_CTX *ctx = talloc_tos();
+	pstring printdb_path;
 
-	kbuf = make_printer_tdbkey(ctx, sharename);
+	kbuf = make_printer_tdbkey( sharename );
 	tdb_delete(tdb_printers, kbuf);
 
-	kbuf= make_printers_secdesc_tdbkey(ctx, sharename);
+	kbuf.dptr = make_printers_secdesc_tdbkey( sharename );
+	kbuf.dsize = strlen(kbuf.dptr) + 1;
 	tdb_delete(tdb_printers, kbuf);
 
 	close_all_print_db();
 
 	if (geteuid() == 0) {
-		if (asprintf(&printdb_path, "%s%s.tdb",
-				lock_path("printing/"),
-				sharename) < 0) {
-			return (uint32)-1;
-		}
+		pstrcpy(printdb_path, lock_path("printing/"));
+		pstrcat(printdb_path, sharename);
+		pstrcat(printdb_path, ".tdb");
+
 		unlink(printdb_path);
-		SAFE_FREE(printdb_path);
 	}
 
 	return 0;
@@ -2567,9 +2382,8 @@
 ****************************************************************************/
 static WERROR update_a_printer_2(NT_PRINTER_INFO_LEVEL_2 *info)
 {
-	uint8 *buf;
+	char *buf;
 	int buflen, len;
-	int retlen;
 	WERROR ret;
 	TDB_DATA kbuf, dbuf;
 	
@@ -2604,7 +2418,7 @@
 	buf = NULL;
 	buflen = 0;
 
- again:
+ again:	
 	len = 0;
 	len += tdb_pack(buf+len, buflen-len, "dddddddddddfffffPfffff",
 			info->attributes,
@@ -2631,15 +2445,11 @@
 			info->parameters);
 
 	len += pack_devicemode(info->devmode, buf+len, buflen-len);
-	retlen = pack_values( info->data, buf+len, buflen-len );
-	if (retlen == -1) {
-		ret = WERR_NOMEM;
-		goto done;
-	}
-	len += retlen;
+	
+	len += pack_values( info->data, buf+len, buflen-len );
 
 	if (buflen != len) {
-		buf = (uint8 *)SMB_REALLOC(buf, len);
+		buf = (char *)SMB_REALLOC(buf, len);
 		if (!buf) {
 			DEBUG(0,("update_a_printer_2: failed to enlarge buffer!\n"));
 			ret = WERR_NOMEM;
@@ -2648,8 +2458,9 @@
 		buflen = len;
 		goto again;
 	}
+	
 
-	kbuf = make_printer_tdbkey(talloc_tos(), info->sharename );
+	kbuf = make_printer_tdbkey( info->sharename );
 
 	dbuf.dptr = buf;
 	dbuf.dsize = len;
@@ -2796,7 +2607,7 @@
 
 /****************************************************************************
 ****************************************************************************/
-int unpack_devicemode(NT_DEVICEMODE **nt_devmode, const uint8 *buf, int buflen)
+int unpack_devicemode(NT_DEVICEMODE **nt_devmode, char *buf, int buflen)
 {
 	int len = 0;
 	int extra_len = 0;
@@ -3093,7 +2904,7 @@
 }
 
 static void map_bool_into_ctr(REGVAL_CTR *ctr, const char *val_name,
-			      bool b)
+			      BOOL b)
 {
 	uint8 bin_bool = (b ? 1 : 0);
 	regval_ctr_delvalue(ctr, val_name);
@@ -3131,14 +2942,14 @@
  * Map the NT_PRINTER_INFO_LEVEL_2 data into DsSpooler keys for publishing.
  *
  * @param info2 NT_PRINTER_INFO_LEVEL_2 describing printer - gets modified
- * @return bool indicating success or failure
+ * @return BOOL indicating success or failure
  ***************************************************************************/
 
-static bool map_nt_printer_info2_to_dsspooler(NT_PRINTER_INFO_LEVEL_2 *info2)
+static BOOL map_nt_printer_info2_to_dsspooler(NT_PRINTER_INFO_LEVEL_2 *info2)
 {
 	REGVAL_CTR *ctr = NULL;
 	fstring longname;
-	const char *dnssuffix;
+	fstring dnssuffix;
 	char *allocated_string = NULL;
         const char *ascii_str;
 	int i;
@@ -3150,17 +2961,15 @@
 	map_sz_into_ctr(ctr, SPOOL_REG_PRINTERNAME, info2->sharename);
 	map_sz_into_ctr(ctr, SPOOL_REG_SHORTSERVERNAME, global_myname());
 
-	/* we make the assumption that the netbios name is the same
-	   as the DNS name sinc ethe former will be what we used to
+	/* we make the assumption that the netbios name is the same 
+	   as the DNS name sinc ethe former will be what we used to 
 	   join the domain */
 
-	dnssuffix = get_mydnsdomname(talloc_tos());
-	if (dnssuffix && *dnssuffix) {
+	if ( get_mydnsdomname( dnssuffix ) )
 		fstr_sprintf( longname, "%s.%s", global_myname(), dnssuffix );
-	} else {
+	else
 		fstrcpy( longname, global_myname() );
-	}
-
+		
 	map_sz_into_ctr(ctr, SPOOL_REG_SERVERNAME, longname);
 
 	asprintf(&allocated_string, "\\\\%s\\%s", longname, info2->sharename);
@@ -3220,8 +3029,7 @@
 	   Vista to whine */
 
 	ZERO_STRUCT( unistr_guid );	
-	
-	init_unistr2( &unistr_guid, smb_uuid_string(talloc_tos(), guid),
+	init_unistr2( &unistr_guid, smb_uuid_string_static(guid),
 		      UNI_STR_TERMINATE );
 
 	regval_ctr_addvalue(ctr, "objectGUID", REG_SZ, 
@@ -3251,7 +3059,7 @@
 	/* We use ldap_get_dn here as we need the answer
 	 * in utf8 to call ldap_explode_dn(). JRA. */
 
-	srv_dn_utf8 = ldap_get_dn((LDAP *)ads->ldap.ld, (LDAPMessage *)res);
+	srv_dn_utf8 = ldap_get_dn((LDAP *)ads->ld, (LDAPMessage *)res);
 	if (!srv_dn_utf8) {
 		ads_destroy(&ads);
 		return WERR_SERVER_UNAVAILABLE;
@@ -3326,13 +3134,8 @@
 
 	/* publish it */
 	ads_rc = ads_mod_printer_entry(ads, prt_dn, ctx, &mods);
-	if (ads_rc.err.rc == LDAP_NO_SUCH_OBJECT) {
-		int i;
-		for (i=0; mods[i] != 0; i++)
-			;
-		mods[i] = (LDAPMod *)-1;
+	if (ads_rc.err.rc == LDAP_NO_SUCH_OBJECT)
 		ads_rc = ads_add_printer_entry(ads, prt_dn, ctx, &mods);
-	}
 
 	if (!ADS_ERR_OK(ads_rc))
 		DEBUG(3, ("error publishing %s: %s\n", printer->info_2->sharename, ads_errstr(ads_rc)));
@@ -3501,7 +3304,7 @@
 	return WERR_OK;
 }
 
-bool is_printer_published(Printer_entry *print_hnd, int snum, 
+BOOL is_printer_published(Printer_entry *print_hnd, int snum, 
 			  struct GUID *guid)
 {
 	NT_PRINTER_INFO_LEVEL *printer = NULL;
@@ -3509,7 +3312,7 @@
 	REGISTRY_VALUE *guid_val;
 	WERROR win_rc;
 	int i;
-	bool ret = False;
+	BOOL ret = False;
 
 	win_rc = get_a_printer(print_hnd, &printer, 2, lp_servicename(snum));
 
@@ -3565,7 +3368,7 @@
 	return WERR_OK;
 }
 
-bool is_printer_published(Printer_entry *print_hnd, int snum, 
+BOOL is_printer_published(Printer_entry *print_hnd, int snum, 
 			  struct GUID *guid)
 {
 	return False;
@@ -3719,13 +3522,13 @@
 	
 	DEBUG(8,("add_printer_data: Added key => [%s], value => [%s], type=> [%d], size => [%d]\n",
 		key, value, type, real_len  ));
-
+	
 	return result;
 }
 
 /****************************************************************************
  ***************************************************************************/
-
+ 
 REGISTRY_VALUE* get_printer_data( NT_PRINTER_INFO_LEVEL_2 *p2, const char *key, const char *value )
 {
 	int		key_index;
@@ -3742,14 +3545,12 @@
 /****************************************************************************
  Unpack a list of registry values frem the TDB
  ***************************************************************************/
-
-static int unpack_values(NT_PRINTER_DATA *printer_data, const uint8 *buf, int buflen)
+ 
+static int unpack_values(NT_PRINTER_DATA *printer_data, char *buf, int buflen)
 {
 	int 		len = 0;
 	uint32		type;
-	fstring string;
-	const char *valuename = NULL;
-	const char *keyname = NULL;
+	pstring		string, valuename, keyname;
 	char		*str;
 	int		size;
 	uint8		*data_p;
@@ -3757,22 +3558,22 @@
 	int		key_index;
 
 	/* add the "PrinterDriverData" key first for performance reasons */
-
+	
 	add_new_printer_key( printer_data, SPOOL_PRINTERDATA_KEY );
 
 	/* loop and unpack the rest of the registry values */
-
+	
 	while ( True ) {
-
+	
 		/* check to see if there are any more registry values */
-
+		
 		regval_p = NULL;
-		len += tdb_unpack(buf+len, buflen-len, "p", &regval_p);
-		if ( !regval_p )
+		len += tdb_unpack(buf+len, buflen-len, "p", &regval_p);		
+		if ( !regval_p ) 
 			break;
 
 		/* unpack the next regval */
-
+		
 		len += tdb_unpack(buf+len, buflen-len, "fdB",
 				  string,
 				  &type,
@@ -3787,65 +3588,64 @@
 				add_new_printer_key( printer_data, string );
 			continue;
 		}
-
+	
 		/*
-		 * break of the keyname from the value name.
+		 * break of the keyname from the value name.  
 		 * Valuenames can have embedded '\'s so be careful.
-		 * only support one level of keys.  See the
+		 * only support one level of keys.  See the 
 		 * "Konica Fiery S300 50C-K v1.1. enu" 2k driver.
 		 * -- jerry
-		 */
-
+		 */	
+		 
 		str = strchr_m( string, '\\');
-
+		
 		/* Put in "PrinterDriverData" is no key specified */
-
+		
 		if ( !str ) {
-			keyname = SPOOL_PRINTERDATA_KEY;
-			valuename = string;
+			pstrcpy( keyname, SPOOL_PRINTERDATA_KEY );
+			pstrcpy( valuename, string );
 		}
 		else {
 			*str = '\0';
-			keyname = string;
-			valuename = str+1;
+			pstrcpy( keyname, string );
+			pstrcpy( valuename, str+1 );
 		}
-
+			
 		/* see if we need a new key */
-
+		
 		if ( (key_index=lookup_printerkey( printer_data, keyname )) == -1 )
 			key_index = add_new_printer_key( printer_data, keyname );
-
+			
 		if ( key_index == -1 ) {
 			DEBUG(0,("unpack_values: Failed to allocate a new key [%s]!\n",
 				keyname));
 			break;
 		}
-
+		
 		DEBUG(8,("specific: [%s:%s], len: %d\n", keyname, valuename, size));
 
-		/* Vista doesn't like unknown REG_BINARY values in DsSpooler.
+		/* Vista doesn't like unknown REG_BINARY values in DsSpooler.  
 		   Thanks to Martin Zielinski for the hint. */
 
-		if ( type == REG_BINARY &&
-		     strequal( keyname, SPOOL_DSSPOOLER_KEY ) &&
-		     strequal( valuename, "objectGUID" ) )
+		if ( type == REG_BINARY && 
+		     strequal( keyname, SPOOL_DSSPOOLER_KEY ) && 
+		     strequal( valuename, "objectGUID" ) ) 
 		{
 			struct GUID guid;
 			UNISTR2 unistr_guid;
 
 			ZERO_STRUCT( unistr_guid );
-
+			
 			/* convert the GUID to a UNICODE string */
-
+			
 			memcpy( &guid, data_p, sizeof(struct GUID) );
-
-			init_unistr2( &unistr_guid,
-				      smb_uuid_string(talloc_tos(), guid), 
+			
+			init_unistr2( &unistr_guid, smb_uuid_string_static(guid), 
 				      UNI_STR_TERMINATE );
-
+			
 			regval_ctr_addvalue( printer_data->keys[key_index].values, 
-					     valuename, REG_SZ,
-					     (const char *)unistr_guid.buffer,
+					     valuename, REG_SZ, 
+					     (const char *)unistr_guid.buffer, 
 					     unistr_guid.uni_str_len*2 );
 
 		} else {
@@ -3855,6 +3655,7 @@
 					     valuename, type, (const char *)data_p, 
 					     size );
 		}
+		
 
 		SAFE_FREE(data_p); /* 'B' option to tdbpack does a malloc() */
 
@@ -3866,46 +3667,10 @@
 /****************************************************************************
  ***************************************************************************/
 
-static char *last_from;
-static char *last_to;
-
-static const char *get_last_from(void)
-{
-	if (!last_from) {
-		return "";
-	}
-	return last_from;
-}
-
-static const char *get_last_to(void)
-{
-	if (!last_to) {
-		return "";
-	}
-	return last_to;
-}
-
-static bool set_last_from_to(const char *from, const char *to)
-{
-	char *orig_from = last_from;
-	char *orig_to = last_to;
-
-	last_from = SMB_STRDUP(from);
-	last_to = SMB_STRDUP(to);
-
-	SAFE_FREE(orig_from);
-	SAFE_FREE(orig_to);
-
-	if (!last_from || !last_to) {
-		SAFE_FREE(last_from);
-		SAFE_FREE(last_to);
-		return false;
-	}
-	return true;
-}
-
 static void map_to_os2_driver(fstring drivername)
 {
+	static BOOL initialised=False;
+	static fstring last_from,last_to;
 	char *mapfile = lp_os2_driver_map();
 	char **lines = NULL;
 	int numlines = 0;
@@ -3917,10 +3682,14 @@
 	if (!*mapfile)
 		return;
 
-	if (strequal(drivername,get_last_from())) {
-		DEBUG(3,("Mapped Windows driver %s to OS/2 driver %s\n",
-			drivername,get_last_to()));
-		fstrcpy(drivername,get_last_to());
+	if (!initialised) {
+		*last_from = *last_to = 0;
+		initialised = True;
+	}
+
+	if (strequal(drivername,last_from)) {
+		DEBUG(3,("Mapped Windows driver %s to OS/2 driver %s\n",drivername,last_to));
+		fstrcpy(drivername,last_to);
 		return;
 	}
 
@@ -3969,7 +3738,8 @@
 
 		if (strequal(nt_name,drivername)) {
 			DEBUG(3,("Mapped windows driver %s to os2 driver%s\n",drivername,os2_name));
-			set_last_from_to(drivername,os2_name);
+			fstrcpy(last_from,drivername);
+			fstrcpy(last_to,os2_name);
 			fstrcpy(drivername,os2_name);
 			file_lines_free(lines);
 			return;
@@ -3984,9 +3754,9 @@
 ****************************************************************************/
 
 static WERROR get_a_printer_2_default(NT_PRINTER_INFO_LEVEL_2 *info,
-				const char *servername,
-				const char* sharename,
-				bool get_loc_com)
+					const char *servername,
+					const char* sharename,
+					BOOL get_loc_com)
 {
 	int snum = lp_servicenumber(sharename);
 
@@ -4008,7 +3778,7 @@
 
 	DEBUG(10,("get_a_printer_2_default: driver name set to [%s]\n", info->drivername));
 
-	strlcpy(info->comment, "", sizeof(info->comment));
+	pstrcpy(info->comment, "");
 	fstrcpy(info->printprocessor, "winprint");
 	fstrcpy(info->datatype, "RAW");
 
@@ -4066,21 +3836,20 @@
 static WERROR get_a_printer_2(NT_PRINTER_INFO_LEVEL_2 *info,
 				const char *servername,
 				const char *sharename,
-				bool get_loc_com)
+				BOOL get_loc_com)
 {
 	int len = 0;
 	int snum = lp_servicenumber(sharename);
 	TDB_DATA kbuf, dbuf;
 	fstring printername;
 	char adevice[MAXDEVICENAME];
-	char *comment = NULL;
+		
+	kbuf = make_printer_tdbkey( sharename );
 
-	kbuf = make_printer_tdbkey(talloc_tos(), sharename);
-
 	dbuf = tdb_fetch(tdb_printers, kbuf);
 	if (!dbuf.dptr) {
 		return get_a_printer_2_default(info, servername,
-					sharename, get_loc_com);
+				sharename, get_loc_com);
 	}
 
 	len += tdb_unpack(dbuf.dptr+len, dbuf.dsize-len, "dddddddddddfffffPfffff",
@@ -4100,18 +3869,13 @@
 			info->sharename,
 			info->portname,
 			info->drivername,
-			&comment,
+			info->comment,
 			info->location,
 			info->sepfile,
 			info->printprocessor,
 			info->datatype,
 			info->parameters);
 
-	if (comment) {
-		strlcpy(info->comment, comment, sizeof(info->comment));
-		SAFE_FREE(comment);
-	}
-
 	/* Samba has to have shared raw drivers. */
 	info->attributes |= PRINTER_ATTRIBUTE_SAMBA;
 	info->attributes &= ~PRINTER_ATTRIBUTE_NOT_SAMBA;
@@ -4128,7 +3892,7 @@
 	fstrcpy(info->printername, printername);
 
 #ifdef HAVE_CUPS
-	if (get_loc_com && (enum printing_types)lp_printing(snum) == PRINT_CUPS ) {
+	if (get_loc_com && (enum printing_types)lp_printing(snum) == PRINT_CUPS ) {		
 		/* Pull the location and comment strings from cups if we don't
 		   already have one */
 		if ( !strlen(info->location) || !strlen(info->comment) )
@@ -4320,13 +4084,14 @@
 			 */
 
 			result=update_a_printer_2(printer->info_2);
+			
 			break;
 		}
 		default:
 			result=WERR_UNKNOWN_LEVEL;
 			break;
 	}
-
+	
 	return result;
 }
 
@@ -4334,11 +4099,11 @@
  Initialize printer devmode & data with previously saved driver init values.
 ****************************************************************************/
 
-static bool set_driver_init_2( NT_PRINTER_INFO_LEVEL_2 *info_ptr )
+static BOOL set_driver_init_2( NT_PRINTER_INFO_LEVEL_2 *info_ptr )
 {
 	int                     len = 0;
-	char *key = NULL;
-	TDB_DATA                dbuf;
+	pstring                 key;
+	TDB_DATA                kbuf, dbuf;
 	NT_PRINTER_INFO_LEVEL_2 info;
 
 
@@ -4349,38 +4114,36 @@
 	 * replace, there will generally be some, but during an add printer, there
 	 * should not be any (if there are delete them).
 	 */
-
+	 
 	if ( info_ptr->data )
 		delete_all_printer_data( info_ptr, "" );
+	
+	slprintf(key, sizeof(key)-1, "%s%s", DRIVER_INIT_PREFIX, info_ptr->drivername);
 
-	if (asprintf(&key, "%s%s", DRIVER_INIT_PREFIX,
-				info_ptr->drivername) < 0) {
-		return false;
-	}
+	kbuf.dptr = key;
+	kbuf.dsize = strlen(key)+1;
 
-	dbuf = tdb_fetch_bystring(tdb_drivers, key);
+	dbuf = tdb_fetch(tdb_drivers, kbuf);
 	if (!dbuf.dptr) {
 		/*
 		 * When changing to a driver that has no init info in the tdb, remove
 		 * the previous drivers init info and leave the new on blank.
 		 */
 		free_nt_devicemode(&info_ptr->devmode);
-		SAFE_FREE(key);
-		return false;
+		return False;
 	}
-
-	SAFE_FREE(key);
+	
 	/*
 	 * Get the saved DEVMODE..
 	 */
-
+	 
 	len += unpack_devicemode(&info.devmode,dbuf.dptr+len, dbuf.dsize-len);
 
 	/*
 	 * The saved DEVMODE contains the devicename from the printer used during
 	 * the initialization save. Change it to reflect the new printer.
 	 */
-
+	 
 	if ( info.devmode ) {
 		ZERO_STRUCT(info.devmode->devicename);
 		fstrcpy(info.devmode->devicename, info_ptr->printername);
@@ -4388,18 +4151,18 @@
 
 	/*
 	 * NT/2k does not change out the entire DeviceMode of a printer
-	 * when changing the driver.  Only the driverextra, private, &
+	 * when changing the driver.  Only the driverextra, private, & 
 	 * driverversion fields.   --jerry  (Thu Mar 14 08:58:43 CST 2002)
 	 *
 	 * Later examination revealed that Windows NT/2k does reset the
-	 * the printer's device mode, bit **only** when you change a
+	 * the printer's device mode, bit **only** when you change a 
 	 * property of the device mode such as the page orientation.
 	 * --jerry
 	 */
 
 
 	/* Bind the saved DEVMODE to the new the printer */
-
+	 
 	free_nt_devicemode(&info_ptr->devmode);
 	info_ptr->devmode = info.devmode;
 
@@ -4412,12 +4175,13 @@
 		DEBUG(0,("set_driver_init_2: talloc() failed!\n"));
 		return False;
 	}
-
+	 
 	len += unpack_values( info_ptr->data, dbuf.dptr+len, dbuf.dsize-len );
+	
 
 	SAFE_FREE(dbuf.dptr);
 
-	return true;
+	return True;	
 }
 
 /****************************************************************************
@@ -4427,21 +4191,21 @@
  is bound to the new printer.
 ****************************************************************************/
 
-bool set_driver_init(NT_PRINTER_INFO_LEVEL *printer, uint32 level)
+BOOL set_driver_init(NT_PRINTER_INFO_LEVEL *printer, uint32 level)
 {
-	bool result = False;
-
+	BOOL result = False;
+	
 	switch (level) {
 		case 2:
 			result = set_driver_init_2(printer->info_2);
 			break;
-
+			
 		default:
 			DEBUG(0,("set_driver_init: Programmer's error!  Unknown driver_init level [%d]\n",
 				level));
 			break;
 	}
-
+	
 	return result;
 }
 
@@ -4449,26 +4213,24 @@
  Delete driver init data stored for a specified driver
 ****************************************************************************/
 
-bool del_driver_init(char *drivername)
+BOOL del_driver_init(char *drivername)
 {
-	char *key;
-	bool ret;
+	pstring key;
+	TDB_DATA kbuf;
 
 	if (!drivername || !*drivername) {
 		DEBUG(3,("del_driver_init: No drivername specified!\n"));
-		return false;
+		return False;
 	}
 
-	if (asprintf(&key, "%s%s", DRIVER_INIT_PREFIX, drivername) < 0) {
-		return false;
-	}
+	slprintf(key, sizeof(key)-1, "%s%s", DRIVER_INIT_PREFIX, drivername);
 
-	DEBUG(6,("del_driver_init: Removing driver init data for [%s]\n",
-				drivername));
+	kbuf.dptr = key;
+	kbuf.dsize = strlen(key)+1;
 
-	ret = (tdb_delete_bystring(tdb_drivers, key) == 0);
-	SAFE_FREE(key);
-	return ret;
+	DEBUG(6,("del_driver_init: Removing driver init data for [%s]\n", drivername));
+
+	return (tdb_delete(tdb_drivers, kbuf) == 0);
 }
 
 /****************************************************************************
@@ -4481,28 +4243,22 @@
 
 static uint32 update_driver_init_2(NT_PRINTER_INFO_LEVEL_2 *info)
 {
-	char *key = NULL;
-	uint8 *buf;
+	pstring key;
+	char *buf;
 	int buflen, len, ret;
-	int retlen;
-	TDB_DATA dbuf;
+	TDB_DATA kbuf, dbuf;
 
 	buf = NULL;
 	buflen = 0;
 
- again:
+ again:	
 	len = 0;
 	len += pack_devicemode(info->devmode, buf+len, buflen-len);
 
-	retlen = pack_values( info->data, buf+len, buflen-len );
-	if (retlen == -1) {
-		ret = -1;
-		goto done;
-	}
-	len += retlen;
+	len += pack_values( info->data, buf+len, buflen-len );
 
 	if (buflen < len) {
-		buf = (uint8 *)SMB_REALLOC(buf, len);
+		buf = (char *)SMB_REALLOC(buf, len);
 		if (!buf) {
 			DEBUG(0, ("update_driver_init_2: failed to enlarge buffer!\n"));
 			ret = -1;
@@ -4512,16 +4268,14 @@
 		goto again;
 	}
 
-	SAFE_FREE(key);
-	if (asprintf(&key, "%s%s", DRIVER_INIT_PREFIX, info->drivername) < 0) {
-		ret = (uint32)-1;
-		goto done;
-	}
+	slprintf(key, sizeof(key)-1, "%s%s", DRIVER_INIT_PREFIX, info->drivername);
 
+	kbuf.dptr = key;
+	kbuf.dsize = strlen(key)+1;
 	dbuf.dptr = buf;
 	dbuf.dsize = len;
 
-	ret = tdb_store_bystring(tdb_drivers, key, dbuf, TDB_REPLACE);
+	ret = tdb_store(tdb_drivers, kbuf, dbuf, TDB_REPLACE);
 
 done:
 	if (ret == -1)
@@ -4563,15 +4317,15 @@
  got to keep the endians happy :).
 ****************************************************************************/
 
-static bool convert_driver_init( TALLOC_CTX *ctx, NT_DEVICEMODE *nt_devmode, uint8 *data, uint32 data_len )
+static BOOL convert_driver_init( TALLOC_CTX *ctx, NT_DEVICEMODE *nt_devmode, uint8 *data, uint32 data_len )
 {
-	bool       result = False;
+	BOOL       result = False;
 	prs_struct ps;
 	DEVICEMODE devmode;
 
 	ZERO_STRUCT(devmode);
 
-	prs_init_empty(&ps, ctx, UNMARSHALL);
+	prs_init(&ps, 0, ctx, UNMARSHALL);
 	ps.data_p      = (char *)data;
 	ps.buffer_size = data_len;
 
@@ -4713,7 +4467,7 @@
 ****************************************************************************/
 
 static WERROR get_a_printer_internal( Printer_entry *print_hnd, NT_PRINTER_INFO_LEVEL **pp_printer, uint32 level, 
-			const char *sharename, bool get_loc_com)
+			const char *sharename, BOOL get_loc_com)
 {
 	WERROR result;
 	fstring servername;
@@ -4742,10 +4496,13 @@
 			}
 
 			result = get_a_printer_2( (*pp_printer)->info_2,
-					servername, sharename, get_loc_com);
-
+					servername,
+					sharename,
+					get_loc_com);
+	
+			
 			/* we have a new printer now.  Save it with this handle */
-
+			
 			if ( !W_ERROR_IS_OK(result) ) {
 				TALLOC_FREE( *pp_printer );
 				DEBUG(10,("get_a_printer: [%s] level %u returning %s\n", 
@@ -4765,22 +4522,18 @@
 	return WERR_OK;
 }
 
-WERROR get_a_printer( Printer_entry *print_hnd,
-			NT_PRINTER_INFO_LEVEL **pp_printer,
-			uint32 level,
+WERROR get_a_printer( Printer_entry *print_hnd, NT_PRINTER_INFO_LEVEL **pp_printer, uint32 level, 
 			const char *sharename)
 {
 	return get_a_printer_internal(print_hnd, pp_printer, level,
-					sharename, true);
+					sharename, True);
 }
 
-WERROR get_a_printer_search( Printer_entry *print_hnd,
-			NT_PRINTER_INFO_LEVEL **pp_printer,
-			uint32 level,
+WERROR get_a_printer_search( Printer_entry *print_hnd, NT_PRINTER_INFO_LEVEL **pp_printer, uint32 level, 
 			const char *sharename)
 {
 	return get_a_printer_internal(print_hnd, pp_printer, level,
-					sharename, false);
+					sharename, False);
 }
 
 /****************************************************************************
@@ -4922,12 +4675,12 @@
   to a printer
 ****************************************************************************/
 
-bool printer_driver_in_use ( NT_PRINTER_DRIVER_INFO_LEVEL_3 *info_3 )
+BOOL printer_driver_in_use ( NT_PRINTER_DRIVER_INFO_LEVEL_3 *info_3 )
 {
 	int snum;
 	int n_services = lp_numservices();
 	NT_PRINTER_INFO_LEVEL *printer = NULL;
-	bool in_use = False;
+	BOOL in_use = False;
 
 	if ( !info_3 ) 
 		return False;
@@ -4998,7 +4751,7 @@
  Check to see if a ogiven file is in use by *info
  *********************************************************************/
  
-static bool drv_file_in_use( char* file, NT_PRINTER_DRIVER_INFO_LEVEL_3 *info )
+static BOOL drv_file_in_use( char* file, NT_PRINTER_DRIVER_INFO_LEVEL_3 *info )
 {
 	int i = 0;
 
@@ -5061,10 +4814,10 @@
  Check if any of the files used by src are also used by drv 
  *********************************************************************/
 
-static bool trim_overlap_drv_files( NT_PRINTER_DRIVER_INFO_LEVEL_3 *src, 
+static BOOL trim_overlap_drv_files( NT_PRINTER_DRIVER_INFO_LEVEL_3 *src, 
 				       NT_PRINTER_DRIVER_INFO_LEVEL_3 *drv )
 {
-	bool 	in_use = False;
+	BOOL 	in_use = False;
 	int 	i = 0;
 	
 	if ( !src || !drv )
@@ -5130,14 +4883,14 @@
   match.
 ****************************************************************************/
 
-bool printer_driver_files_in_use ( NT_PRINTER_DRIVER_INFO_LEVEL_3 *info )
+BOOL printer_driver_files_in_use ( NT_PRINTER_DRIVER_INFO_LEVEL_3 *info )
 {
 	int 				i;
 	int 				ndrivers;
 	uint32 				version;
 	fstring 			*list = NULL;
 	NT_PRINTER_DRIVER_INFO_LEVEL 	driver;
-	bool in_use = false;
+	BOOL in_use = False;
 
 	if ( !info )
 		return False;
@@ -5176,36 +4929,36 @@
 				/* mz: Do not instantly return -
 				 * we need to ensure this file isn't
 				 * also in use by other drivers. */
-				in_use = true;
+				in_use = True;
 			}
 		}
-
+	
 		free_a_printer_driver(driver, 3);
-	}
-
+	}	
+	
 	SAFE_FREE(list);
-
+	
 	DEBUG(5,("printer_driver_files_in_use: Completed search through ntdrivers.tdb...\n"));
-
+	
 	driver.info_3 = info;
-
+	
 	if ( DEBUGLEVEL >= 20 )
 		dump_a_printer_driver( driver, 3 );
-
+	
 	return in_use;
 }
 
 /****************************************************************************
-  Actually delete the driver files.  Make sure that
-  printer_driver_files_in_use() return False before calling
+  Actually delete the driver files.  Make sure that 
+  printer_driver_files_in_use() return False before calling 
   this.
 ****************************************************************************/
 
-static bool delete_driver_files( NT_PRINTER_DRIVER_INFO_LEVEL_3 *info_3, struct current_user *user )
+static BOOL delete_driver_files( NT_PRINTER_DRIVER_INFO_LEVEL_3 *info_3, struct current_user *user )
 {
 	int i = 0;
 	char *s;
-	const char *file;
+	pstring file;
 	connection_struct *conn;
 	DATA_BLOB null_pw;
 	NTSTATUS nt_status;
@@ -5214,21 +4967,21 @@
 
 	if ( !info_3 )
 		return False;
-
+		
 	DEBUG(6,("delete_driver_files: deleting driver [%s] - version [%d]\n", info_3->name, info_3->cversion));
-
+	
 	/*
-	 * Connect to the print$ share under the same account as the
-	 * user connected to the rpc pipe. Note we must be root to
+	 * Connect to the print$ share under the same account as the 
+	 * user connected to the rpc pipe. Note we must be root to 
 	 * do this.
 	 */
-
-	null_pw = data_blob_null;
+	 
+	null_pw = data_blob( NULL, 0 );
 	fstrcpy(res_type, "A:");
 	become_root();
         conn = make_connection_with_chdir( "print$", null_pw, res_type, user->vuid, &nt_status );
 	unbecome_root();
-
+	
 	if ( !conn ) {
 		DEBUG(0,("delete_driver_files: Unable to connect\n"));
 		return False;
@@ -5246,67 +4999,67 @@
 		return False;
 	}
 
-	/* now delete the files; must strip the '\print$' string from
+	/* now delete the files; must strip the '\print$' string from 
 	   fron of path                                                */
-
+	
 	if ( *info_3->driverpath ) {
 		if ( (s = strchr( &info_3->driverpath[1], '\\' )) != NULL ) {
-			file = s;
-			driver_unix_convert(conn,file,&st);
+			pstrcpy( file, s );
+			driver_unix_convert(file, conn, NULL, &st);
 			DEBUG(10,("deleting driverfile [%s]\n", s));
-			unlink_internals(conn, NULL, 0, file, False);
+			unlink_internals(conn, 0, file, False, False);
 		}
 	}
-
+		
 	if ( *info_3->configfile ) {
 		if ( (s = strchr( &info_3->configfile[1], '\\' )) != NULL ) {
-			file = s;
-			driver_unix_convert(conn,file,&st);
+			pstrcpy( file, s );
+			driver_unix_convert(file, conn, NULL, &st);
 			DEBUG(10,("deleting configfile [%s]\n", s));
-			unlink_internals(conn, NULL, 0, file, False);
+			unlink_internals(conn, 0, file, False, False);
 		}
 	}
-
+	
 	if ( *info_3->datafile ) {
 		if ( (s = strchr( &info_3->datafile[1], '\\' )) != NULL ) {
-			file = s;
-			driver_unix_convert(conn,file,&st);
+			pstrcpy( file, s );
+			driver_unix_convert(file, conn, NULL, &st);
 			DEBUG(10,("deleting datafile [%s]\n", s));
-			unlink_internals(conn, NULL, 0, file, False);
+			unlink_internals(conn, 0, file, False, False);
 		}
 	}
-
+	
 	if ( *info_3->helpfile ) {
 		if ( (s = strchr( &info_3->helpfile[1], '\\' )) != NULL ) {
-			file = s;
-			driver_unix_convert(conn,file,&st);
+			pstrcpy( file, s );
+			driver_unix_convert(file, conn, NULL, &st);
 			DEBUG(10,("deleting helpfile [%s]\n", s));
-			unlink_internals(conn, NULL, 0, file, False);
+			unlink_internals(conn, 0, file, False, False);
 		}
 	}
-
+	
 	/* check if we are done removing files */
-
+	
 	if ( info_3->dependentfiles ) {
 		while ( info_3->dependentfiles[i][0] ) {
 			char *p;
 
 			/* bypass the "\print$" portion of the path */
-
+			
 			if ( (p = strchr( info_3->dependentfiles[i]+1, '\\' )) != NULL ) {
-				file = p;
-				driver_unix_convert(conn,file,&st);
+				pstrcpy( file, p );
+				driver_unix_convert(file, conn, NULL, &st);
 				DEBUG(10,("deleting dependent file [%s]\n", file));
-				unlink_internals(conn, NULL, 0, file, False);
+				unlink_internals(conn, 0, file, False, False);
 			}
-
+			
 			i++;
 		}
 	}
 
 	unbecome_user();
-
-	return true;
+	
+	return True;
 }
 
 /****************************************************************************
@@ -5315,11 +5068,11 @@
  ***************************************************************************/
 
 WERROR delete_printer_driver( NT_PRINTER_DRIVER_INFO_LEVEL_3 *info_3, struct current_user *user,
-                              uint32 version, bool delete_files )
+                              uint32 version, BOOL delete_files )
 {
-	char *key = NULL;
+	pstring 	key;
 	const char     *arch;
-	TDB_DATA 	dbuf;
+	TDB_DATA 	kbuf, dbuf;
 	NT_PRINTER_DRIVER_INFO_LEVEL	ctr;
 
 	/* delete the tdb data first */
@@ -5328,10 +5081,8 @@
 	if (!arch) {
 		return WERR_UNKNOWN_PRINTER_DRIVER;
 	}
-	if (asprintf(&key, "%s%s/%d/%s", DRIVERS_PREFIX,
-			arch, version, info_3->name) < 0) {
-		return WERR_NOMEM;
-	}
+	slprintf(key, sizeof(key)-1, "%s%s/%d/%s", DRIVERS_PREFIX,
+		arch, version, info_3->name);
 
 	DEBUG(5,("delete_printer_driver: key = [%s] delete_files = %s\n",
 		key, delete_files ? "TRUE" : "FALSE" ));
@@ -5339,22 +5090,23 @@
 	ctr.info_3 = info_3;
 	dump_a_printer_driver( ctr, 3 );
 
-	/* check if the driver actually exists for this environment */
+	kbuf.dptr=key;
+	kbuf.dsize=strlen(key)+1;
 
-	dbuf = tdb_fetch_bystring( tdb_drivers, key );
+	/* check if the driver actually exists for this environment */
+	
+	dbuf = tdb_fetch( tdb_drivers, kbuf );
 	if ( !dbuf.dptr ) {
 		DEBUG(8,("delete_printer_driver: Driver unknown [%s]\n", key));
-		SAFE_FREE(key);
 		return WERR_UNKNOWN_PRINTER_DRIVER;
 	}
-
+		
 	SAFE_FREE( dbuf.dptr );
-
+	
 	/* ok... the driver exists so the delete should return success */
-
-	if (tdb_delete_bystring(tdb_drivers, key) == -1) {
+		
+	if (tdb_delete(tdb_drivers, kbuf) == -1) {
 		DEBUG (0,("delete_printer_driver: fail to delete %s!\n", key));
-		SAFE_FREE(key);
 		return WERR_ACCESS_DENIED;
 	}
 
@@ -5366,13 +5118,13 @@
 
 	if ( delete_files )
 		delete_driver_files( info_3, user );
-
+			
+		
 	DEBUG(5,("delete_printer_driver: driver delete successful [%s]\n", key));
-	SAFE_FREE(key);
 
 	return WERR_OK;
-}
-
+	}
+	
 /****************************************************************************
  Store a security desc for a printer.
 ****************************************************************************/
@@ -5382,9 +5134,8 @@
 	SEC_DESC_BUF *new_secdesc_ctr = NULL;
 	SEC_DESC_BUF *old_secdesc_ctr = NULL;
 	prs_struct ps;
-	bool prs_init_done = false;
 	TALLOC_CTX *mem_ctx = NULL;
-	TDB_DATA kbuf;
+	char *key;
 	WERROR status;
 
 	mem_ctx = talloc_init("nt_printing_setsec");
@@ -5396,7 +5147,7 @@
 	   permissions through NT.  If they are NULL in the new security
 	   descriptor then copy them over from the old one. */
 
-	if (!secdesc_ctr->sd->owner_sid || !secdesc_ctr->sd->group_sid) {
+	if (!secdesc_ctr->sec->owner_sid || !secdesc_ctr->sec->group_sid) {
 		DOM_SID *owner_sid, *group_sid;
 		SEC_ACL *dacl, *sacl;
 		SEC_DESC *psd = NULL;
@@ -5409,25 +5160,25 @@
 
 		/* Pick out correct owner and group sids */
 
-		owner_sid = secdesc_ctr->sd->owner_sid ?
-			secdesc_ctr->sd->owner_sid :
-			old_secdesc_ctr->sd->owner_sid;
+		owner_sid = secdesc_ctr->sec->owner_sid ?
+			secdesc_ctr->sec->owner_sid :
+			old_secdesc_ctr->sec->owner_sid;
 
-		group_sid = secdesc_ctr->sd->group_sid ?
-			secdesc_ctr->sd->group_sid :
-			old_secdesc_ctr->sd->group_sid;
+		group_sid = secdesc_ctr->sec->group_sid ?
+			secdesc_ctr->sec->group_sid :
+			old_secdesc_ctr->sec->group_sid;
 
-		dacl = secdesc_ctr->sd->dacl ?
-			secdesc_ctr->sd->dacl :
-			old_secdesc_ctr->sd->dacl;
+		dacl = secdesc_ctr->sec->dacl ?
+			secdesc_ctr->sec->dacl :
+			old_secdesc_ctr->sec->dacl;
 
-		sacl = secdesc_ctr->sd->sacl ?
-			secdesc_ctr->sd->sacl :
-			old_secdesc_ctr->sd->sacl;
+		sacl = secdesc_ctr->sec->sacl ?
+			secdesc_ctr->sec->sacl :
+			old_secdesc_ctr->sec->sacl;
 
 		/* Make a deep copy of the security descriptor */
 
-		psd = make_sec_desc(mem_ctx, secdesc_ctr->sd->revision, secdesc_ctr->sd->type,
+		psd = make_sec_desc(mem_ctx, secdesc_ctr->sec->revision, secdesc_ctr->sec->type,
 				    owner_sid, group_sid,
 				    sacl,
 				    dacl,
@@ -5447,25 +5198,18 @@
 
 	/* Store the security descriptor in a tdb */
 
-	if (!prs_init(&ps,
-		(uint32)ndr_size_security_descriptor(new_secdesc_ctr->sd, 0)
-		+ sizeof(SEC_DESC_BUF), mem_ctx, MARSHALL) ) {
-		status = WERR_NOMEM;
-		goto out;
-	}
+	prs_init(&ps, (uint32)sec_desc_size(new_secdesc_ctr->sec) +
+		 sizeof(SEC_DESC_BUF), mem_ctx, MARSHALL);
 
-
-	prs_init_done = true;
-
 	if (!sec_io_desc_buf("nt_printing_setsec", &new_secdesc_ctr,
 			     &ps, 1)) {
 		status = WERR_BADFUNC;
 		goto out;
 	}
 
-	kbuf = make_printers_secdesc_tdbkey(mem_ctx, sharename );
+	key = make_printers_secdesc_tdbkey( sharename );
 
-	if (tdb_prs_store(tdb_printers, kbuf, &ps)==0) {
+	if (tdb_prs_store(tdb_printers, key, &ps)==0) {
 		status = WERR_OK;
 	} else {
 		DEBUG(1,("Failed to store secdesc for %s\n", sharename));
@@ -5476,9 +5220,7 @@
 
  out:
 
-	if (prs_init_done) {
-		prs_mem_free(&ps);
-	}
+	prs_mem_free(&ps);
 	if (mem_ctx)
 		talloc_destroy(mem_ctx);
 	return status;
@@ -5572,10 +5314,10 @@
  Get a security desc for a printer.
 ****************************************************************************/
 
-bool nt_printing_getsec(TALLOC_CTX *ctx, const char *sharename, SEC_DESC_BUF **secdesc_ctr)
+BOOL nt_printing_getsec(TALLOC_CTX *ctx, const char *sharename, SEC_DESC_BUF **secdesc_ctr)
 {
 	prs_struct ps;
-	TDB_DATA kbuf;
+	char *key;
 	char *temp;
 
 	if (strlen(sharename) > 2 && (temp = strchr(sharename + 2, '\\'))) {
@@ -5586,9 +5328,9 @@
 
 	/* Fetch security descriptor from tdb */
 
-	kbuf = make_printers_secdesc_tdbkey(ctx, sharename  );
+	key = make_printers_secdesc_tdbkey( sharename  );
 
-	if (tdb_prs_fetch(tdb_printers, kbuf, &ps, ctx)!=0 ||
+	if (tdb_prs_fetch(tdb_printers, key, &ps, ctx)!=0 ||
 	    !sec_io_desc_buf("nt_printing_getsec", secdesc_ctr, &ps, 1)) {
 
 		prs_mem_free(&ps);
@@ -5601,12 +5343,11 @@
 
 		/* Save default security descriptor for later */
 
-		if (!prs_init(&ps, (uint32)ndr_size_security_descriptor((*secdesc_ctr)->sd, 0) +
-			sizeof(SEC_DESC_BUF), ctx, MARSHALL))
-			return False;
+		prs_init(&ps, (uint32)sec_desc_size((*secdesc_ctr)->sec) +
+				sizeof(SEC_DESC_BUF), ctx, MARSHALL);
 
 		if (sec_io_desc_buf("nt_printing_getsec", secdesc_ctr, &ps, 1)) {
-			tdb_prs_store(tdb_printers, kbuf, &ps);
+			tdb_prs_store(tdb_printers, key, &ps);
 		}
 
 		prs_mem_free(&ps);
@@ -5620,7 +5361,7 @@
 	   this security descriptor has been created when winbindd was
 	   down.  Take ownership of security descriptor. */
 
-	if (sid_equal((*secdesc_ctr)->sd->owner_sid, &global_sid_World)) {
+	if (sid_equal((*secdesc_ctr)->sec->owner_sid, &global_sid_World)) {
 		DOM_SID owner_sid;
 
 		/* Change sd owner to workgroup administrator */
@@ -5634,11 +5375,11 @@
 
 			sid_append_rid(&owner_sid, DOMAIN_USER_RID_ADMIN);
 
-			psd = make_sec_desc(ctx, (*secdesc_ctr)->sd->revision, (*secdesc_ctr)->sd->type,
+			psd = make_sec_desc(ctx, (*secdesc_ctr)->sec->revision, (*secdesc_ctr)->sec->type,
 					    &owner_sid,
-					    (*secdesc_ctr)->sd->group_sid,
-					    (*secdesc_ctr)->sd->sacl,
-					    (*secdesc_ctr)->sd->dacl,
+					    (*secdesc_ctr)->sec->group_sid,
+					    (*secdesc_ctr)->sec->sacl,
+					    (*secdesc_ctr)->sec->dacl,
 					    &size);
 
 			if (!psd) {
@@ -5661,15 +5402,18 @@
 	}
 
 	if (DEBUGLEVEL >= 10) {
-		SEC_ACL *the_acl = (*secdesc_ctr)->sd->dacl;
+		SEC_ACL *the_acl = (*secdesc_ctr)->sec->dacl;
 		int i;
 
 		DEBUG(10, ("secdesc_ctr for %s has %d aces:\n", 
 			   sharename, the_acl->num_aces));
 
 		for (i = 0; i < the_acl->num_aces; i++) {
-			DEBUG(10, ("%s %d %d 0x%08x\n",
-				   sid_string_dbg(&the_acl->aces[i].trustee),
+			fstring sid_str;
+
+			sid_to_string(sid_str, &the_acl->aces[i].trustee);
+
+			DEBUG(10, ("%s %d %d 0x%08x\n", sid_str,
 				   the_acl->aces[i].type, the_acl->aces[i].flags, 
 				   the_acl->aces[i].access_mask)); 
 		}
@@ -5762,12 +5506,12 @@
     3)  "printer admins" (may result in numerous calls to winbind)
 
  ****************************************************************************/
-bool print_access_check(struct current_user *user, int snum, int access_type)
+BOOL print_access_check(struct current_user *user, int snum, int access_type)
 {
 	SEC_DESC_BUF *secdesc = NULL;
 	uint32 access_granted;
 	NTSTATUS status;
-	bool result;
+	BOOL result;
 	const char *pname;
 	TALLOC_CTX *mem_ctx = NULL;
 	SE_PRIV se_printop = SE_PRINT_OPERATOR;
@@ -5812,7 +5556,7 @@
 		   against.  This is because print jobs are child objects
 		   objects of a printer. */
 
-		secdesc = se_create_child_secdesc(mem_ctx, parent_secdesc->sd, False);
+		secdesc = se_create_child_secdesc(mem_ctx, parent_secdesc->sec, False);
 
 		if (!secdesc) {
 			talloc_destroy(mem_ctx);
@@ -5820,13 +5564,13 @@
 			return False;
 		}
 
-		map_job_permissions(secdesc->sd);
+		map_job_permissions(secdesc->sec);
 	} else {
-		map_printer_permissions(secdesc->sd);
+		map_printer_permissions(secdesc->sec);
 	}
 
 	/* Check access */
-	result = se_access_check(secdesc->sd, user->nt_user_token, access_type,
+	result = se_access_check(secdesc->sec, user->nt_user_token, access_type,
 				 &access_granted, &status);
 
 	DEBUG(4, ("access check was %s\n", result ? "SUCCESS" : "FAILURE"));
@@ -5854,10 +5598,10 @@
  Check the time parameters allow a print operation.
 *****************************************************************************/
 
-bool print_time_access_check(const char *servicename)
+BOOL print_time_access_check(const char *servicename)
 {
 	NT_PRINTER_INFO_LEVEL *printer = NULL;
-	bool ok = False;
+	BOOL ok = False;
 	time_t now = time(NULL);
 	struct tm *t;
 	uint32 mins;

Modified: branches/samba/upstream/source/printing/pcap.c
===================================================================
--- branches/samba/upstream/source/printing/pcap.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/printing/pcap.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -13,7 +13,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -22,7 +22,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /*
@@ -71,7 +72,7 @@
 
 static pcap_cache_t *pcap_cache = NULL;
 
-bool pcap_cache_add(const char *name, const char *comment)
+BOOL pcap_cache_add(const char *name, const char *comment)
 {
 	pcap_cache_t *p;
 
@@ -100,7 +101,7 @@
 	}
 }
 
-bool pcap_cache_loaded(void)
+BOOL pcap_cache_loaded(void)
 {
 	return (pcap_cache != NULL);
 }
@@ -108,7 +109,7 @@
 void pcap_cache_reload(void)
 {
 	const char *pcap_name = lp_printcapname();
-	bool pcap_reloaded = False;
+	BOOL pcap_reloaded = False;
 	pcap_cache_t *tmp_cache = NULL;
 	XFILE *pcap_file;
 	char *pcap_line;
@@ -159,9 +160,8 @@
 		goto done;
 	}
 
-	for (; (pcap_line = fgets_slash(NULL, 1024, pcap_file)) != NULL; safe_free(pcap_line)) {
-		char name[MAXPRINTERLEN+1];
-		char comment[62];
+	for (; (pcap_line = fgets_slash(NULL, sizeof(pstring), pcap_file)) != NULL; safe_free(pcap_line)) {
+		pstring name, comment;
 		char *p, *q;
 
 		if (*pcap_line == '#' || *pcap_line == 0)
@@ -176,7 +176,7 @@
 		 * this is pure guesswork, but it's better than nothing
 		 */
 		for (*name = *comment = 0, p = pcap_line; p != NULL; p = q) {
-			bool has_punctuation;
+			BOOL has_punctuation;
 
 			if ((q = strchr_m(p, '|')) != NULL)
 				*q++ = 0;
@@ -187,22 +187,22 @@
 			                   strchr_m(p, ')'));
 
 			if (strlen(p) > strlen(comment) && has_punctuation) {
-				strlcpy(comment, p, sizeof(comment));
+				pstrcpy(comment, p);
 				continue;
 			}
 
 			if (strlen(p) <= MAXPRINTERLEN &&
 			    strlen(p) > strlen(name) && !has_punctuation) {
-				if (!*comment) {
-					strlcpy(comment, name, sizeof(comment));
-				}
-				strlcpy(name, p, sizeof(name));
+				if (!*comment)
+					pstrcpy(comment, name);
+
+				pstrcpy(name, p);
 				continue;
 			}
 
 			if (!strchr_m(comment, ' ') &&
 			    strlen(p) > strlen(comment)) {
-				strlcpy(comment, p, sizeof(comment));
+				pstrcpy(comment, p);
 				continue;
 			}
 		}
@@ -233,7 +233,7 @@
 }
 
 
-bool pcap_printername_ok(const char *printername)
+BOOL pcap_printername_ok(const char *printername)
 {
 	pcap_cache_t *p;
 

Modified: branches/samba/upstream/source/printing/print_aix.c
===================================================================
--- branches/samba/upstream/source/printing/print_aix.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/printing/print_aix.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /*
@@ -27,29 +28,26 @@
 #include "includes.h"
 
 #ifdef AIX
-bool aix_cache_reload(void)
+BOOL aix_cache_reload(void)
 {
 	int iEtat;
 	XFILE *pfile;
 	char *line = NULL, *p;
-	char *name = NULL;
-	TALLOC_CTX *ctx = talloc_init("aix_cache_reload");
+	pstring name, comment;
 
-	if (!ctx) {
-		return false;
-	}
+	*name = 0;
+	*comment = 0;
 
 	DEBUG(5, ("reloading aix printcap cache\n"));
 
 	if ((pfile = x_fopen(lp_printcapname(), O_RDONLY, 0)) == NULL) {
 		DEBUG(0,( "Unable to open qconfig file %s for read!\n", lp_printcapname()));
-		TALLOC_FREE(ctx);
-		return false;
+		return False;
 	}
 
 	iEtat = 0;
 	/* scan qconfig file for searching <printername>:	*/
-	for (;(line = fgets_slash(NULL, 1024, pfile)); safe_free(line)) {
+	for (;(line = fgets_slash(NULL, sizeof(pstring), pfile)); safe_free(line)) {
 		if (*line == '*' || *line == 0)
 			continue;
 
@@ -59,17 +57,10 @@
 				continue;
 
 			if ((p = strchr_m(line, ':'))) {
-				char *saveptr;
 				*p = '\0';
-				p = strtok_r(line, ":", &saveptr);
+				p = strtok(line, ":");
 				if (strcmp(p, "bsh") != 0) {
-					name = talloc_strdup(ctx, p);
-					if (!name) {
-						safe_free(line);
-						x_fclose(pfile);
-						TALLOC_FREE(ctx);
-						return false;
-					}
+					pstrcpy(name, p);
 					iEtat = 1;
 					continue;
 				}
@@ -87,12 +78,11 @@
 				if (!pcap_cache_add(name, NULL)) {
 					safe_free(line);
 					x_fclose(pfile);
-					TALLOC_FREE(ctx);
-					return false;
+					return False;
 				}
 				continue;
 			}
-
+		  	
 			if (strstr_m(line, "backend")) {
 				/* it's a device, not a virtual printer */
 				iEtat = 0;
@@ -102,8 +92,7 @@
 				if (!pcap_cache_add(name, NULL)) {
 					safe_free(line);
 					x_fclose(pfile);
-					TALLOC_FREE(ctx);
-					return false;
+					return False;
 				}
 				continue;
 			}
@@ -112,8 +101,7 @@
 	}
 
 	x_fclose(pfile);
-	TALLOC_FREE(ctx);
-	return true;
+	return True;
 }
 
 #else

Modified: branches/samba/upstream/source/printing/print_cups.c
===================================================================
--- branches/samba/upstream/source/printing/print_cups.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/printing/print_cups.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  * 
  * This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  * GNU General Public License for more details.
  * 
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -74,7 +75,7 @@
 	return http;
 }
 
-bool cups_cache_reload(void)
+BOOL cups_cache_reload(void)
 {
 	http_t		*http = NULL;		/* HTTP connection to server */
 	ipp_t		*request = NULL,	/* IPP Request */
@@ -88,7 +89,7 @@
 			  "printer-name",
 			  "printer-info"
 			};       
-	bool ret = False;
+	BOOL ret = False;
 
 	DEBUG(5, ("reloading cups printcap cache\n"));
 
@@ -563,11 +564,10 @@
 			*response = NULL;	/* IPP Response */
 	cups_lang_t	*language = NULL;	/* Default language */
 	char		uri[HTTP_MAX_URI]; /* printer-uri attribute */
-	const char 	*clientname = NULL; 	/* hostname of client for job-originating-host attribute */
-	char *new_jobname = NULL;
-	int		num_options = 0;
+	char 		*clientname = NULL; 	/* hostname of client for job-originating-host attribute */
+	pstring		new_jobname;
+	int		num_options = 0; 
 	cups_option_t 	*options = NULL;
-	char addr[INET6_ADDRSTRLEN];
 
 	DEBUG(5,("cups_job_submit(%d, %p (%d))\n", snum, pjob, pjob->sysjob));
 
@@ -618,19 +618,17 @@
 	ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
         	     NULL, pjob->user);
 
-	clientname = client_name(get_client_fd());
+	clientname = client_name();
 	if (strcmp(clientname, "UNKNOWN") == 0) {
-		clientname = client_addr(get_client_fd(),addr,sizeof(addr));
+		clientname = client_addr();
 	}
 
 	ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
 	             "job-originating-host-name", NULL,
 		      clientname);
 
-	if (asprintf(&new_jobname,"%s%.8u %s", PRINT_SPOOL_PREFIX,
-			(unsigned int)pjob->smbjob, pjob->jobname) < 0) {
-		goto out;
-	}
+        pstr_sprintf(new_jobname,"%s%.8u %s", PRINT_SPOOL_PREFIX, 
+		(unsigned int)pjob->smbjob, pjob->jobname);
 
 	ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL,
         	     new_jobname);
@@ -678,8 +676,6 @@
 	if (http)
 		httpClose(http);
 
-	SAFE_FREE(new_jobname);
-
 	return ret;
 }
 
@@ -1202,7 +1198,7 @@
 	cups_job_submit,
 };
 
-bool cups_pull_comment_location(NT_PRINTER_INFO_LEVEL_2 *printer)
+BOOL cups_pull_comment_location(NT_PRINTER_INFO_LEVEL_2 *printer)
 {
 	http_t		*http = NULL;		/* HTTP connection to server */
 	ipp_t		*request = NULL,	/* IPP Request */
@@ -1219,7 +1215,7 @@
 			  "printer-info",
 			  "printer-location"
 			};
-	bool ret = False;
+	BOOL ret = False;
 
 	DEBUG(5, ("pulling %s location\n", printer->sharename));
 
@@ -1298,9 +1294,7 @@
 			{
 				DEBUG(5,("cups_pull_comment_location: Using cups comment: %s\n",
 					 attr->values[0].string.text));				
-			    	strlcpy(printer->comment,
-						attr->values[0].string.text,
-						sizeof(printer->comment));
+			    	pstrcpy(printer->comment,attr->values[0].string.text);
 			}
 
 			/* Grab the location if we don't have one */ 

Modified: branches/samba/upstream/source/printing/print_generic.c
===================================================================
--- branches/samba/upstream/source/printing/print_generic.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/printing/print_generic.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -24,67 +25,45 @@
 extern userdom_struct current_user_info;
 
 /****************************************************************************
- Run a given print command
- a null terminated list of value/substitute pairs is provided
- for local substitution strings
+run a given print command 
+a null terminated list of value/substitute pairs is provided
+for local substitution strings
 ****************************************************************************/
-static int print_run_command(int snum, const char* printername, bool do_sub,
+static int print_run_command(int snum, const char* printername, BOOL do_sub,
 			     const char *command, int *outfd, ...)
 {
-	char *syscmd;
+	pstring syscmd;
 	char *arg;
 	int ret;
-	TALLOC_CTX *ctx = talloc_tos();
 	va_list ap;
 	va_start(ap, outfd);
 
 	/* check for a valid system printername and valid command to run */
 
-	if ( !printername || !*printername ) {
-		va_end(ap);
+	if ( !printername || !*printername ) 
 		return -1;
-	}
 
-	if (!command || !*command) {
-		va_end(ap);
+	if (!command || !*command) 
 		return -1;
-	}
 
-	syscmd = talloc_strdup(ctx, command);
-	if (!syscmd) {
-		va_end(ap);
-		return -1;
-	}
+	pstrcpy(syscmd, command);
 
 	while ((arg = va_arg(ap, char *))) {
 		char *value = va_arg(ap,char *);
-		syscmd = talloc_string_sub(ctx, syscmd, arg, value);
-		if (!syscmd) {
-			va_end(ap);
-			return -1;
-		}
+		pstring_sub(syscmd, arg, value);
 	}
 	va_end(ap);
+  
+	pstring_sub( syscmd, "%p", printername );
 
-	syscmd = talloc_string_sub(ctx, syscmd, "%p", printername);
-	if (!syscmd) {
-		return -1;
-	}
-
-	if (do_sub && snum != -1) {
-		syscmd = talloc_sub_advanced(ctx,
-				lp_servicename(snum),
-				current_user_info.unix_name,
-				"",
-				current_user.ut.gid,
-				get_current_username(),
-				current_user_info.domain,
-				syscmd);
-		if (!syscmd) {
-			return -1;
-		}
-	}
-
+	if ( do_sub && snum != -1 )
+		standard_sub_advanced(lp_servicename(snum),
+				      current_user_info.unix_name, "",
+				      current_user.ut.gid,
+				      get_current_username(),
+				      current_user_info.domain,
+				      syscmd, sizeof(syscmd));
+		
 	ret = smbrun_no_sanitize(syscmd,outfd);
 
 	DEBUG(3,("Running the command `%s' gave %d\n",syscmd,ret));
@@ -129,7 +108,7 @@
 static int generic_job_resume(int snum, struct printjob *pjob)
 {
 	fstring jobstr;
-
+	
 	/* need to pause the spooled entry */
 	slprintf(jobstr, sizeof(jobstr)-1, "%d", pjob->sysjob);
 	return print_run_command(snum, PRINTERNAME(snum), True,
@@ -144,52 +123,30 @@
 
 static int generic_job_submit(int snum, struct printjob *pjob)
 {
-	int ret = -1;
-	char *current_directory = NULL;
-	char *print_directory = NULL;
-	char *wd = NULL;
-	char *p = NULL;
-	char *jobname = NULL;
-	TALLOC_CTX *ctx = talloc_tos();
+	int ret;
+	pstring current_directory;
+	pstring print_directory;
+	char *wd, *p;
+	pstring jobname;
 	fstring job_page_count, job_size;
 
 	/* we print from the directory path to give the best chance of
            parsing the lpq output */
-	current_directory = TALLOC_ARRAY(ctx,
-					char,
-					PATH_MAX+1);
-	if (!current_directory) {
-		return -1;
-	}
 	wd = sys_getwd(current_directory);
-	if (!wd) {
-		return -1;
-	}
+	if (!wd)
+		return 0;
 
-	print_directory = talloc_strdup(ctx, pjob->filename);
-	if (!print_directory) {
-		return -1;
-	}
+	pstrcpy(print_directory, pjob->filename);
 	p = strrchr_m(print_directory,'/');
-	if (!p) {
-		return -1;
-	}
+	if (!p)
+		return 0;
 	*p++ = 0;
 
-	if (chdir(print_directory) != 0) {
-		return -1;
-	}
+	if (chdir(print_directory) != 0)
+		return 0;
 
-	jobname = talloc_strdup(ctx, pjob->jobname);
-	if (!jobname) {
-		ret = -1;
-		goto out;
-	}
-	jobname = talloc_string_sub(ctx, jobname, "'", "_");
-	if (!jobname) {
-		ret = -1;
-		goto out;
-	}
+	pstrcpy(jobname, pjob->jobname);
+	pstring_sub(jobname, "'", "_");
 	slprintf(job_page_count, sizeof(job_page_count)-1, "%d", pjob->page_count);
 	slprintf(job_size, sizeof(job_size)-1, "%lu", (unsigned long)pjob->size);
 
@@ -203,10 +160,8 @@
 			"%c", job_page_count,
 			NULL);
 
- out:
-
 	chdir(wd);
-	TALLOC_FREE(current_directory);
+
         return ret;
 }
 

Modified: branches/samba/upstream/source/printing/print_iprint.c
===================================================================
--- branches/samba/upstream/source/printing/print_iprint.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/printing/print_iprint.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  * 
  * This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
  * GNU General Public License for more details.
  * 
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -305,7 +306,7 @@
 	return(0);
 }
 
-bool iprint_cache_reload(void)
+BOOL iprint_cache_reload(void)
 {
 	http_t		*http = NULL;		/* HTTP connection to server */
 	ipp_t		*request = NULL,	/* IPP Request */
@@ -313,7 +314,7 @@
 	ipp_attribute_t	*attr;			/* Current attribute */
 	cups_lang_t	*language = NULL;	/* Default language */
 	int		i;
-	bool ret = False;
+	BOOL ret = False;
 
 	DEBUG(5, ("reloading iprint printcap cache\n"));
 
@@ -726,8 +727,7 @@
 	ipp_attribute_t	*attr;		/* Current attribute */
 	cups_lang_t	*language = NULL;	/* Default language */
 	char		uri[HTTP_MAX_URI]; /* printer-uri attribute */
-	const char	*clientname = NULL; 	/* hostname of client for job-originating-host attribute */
-	char addr[INET6_ADDRSTRLEN];
+	char 		*clientname = NULL; 	/* hostname of client for job-originating-host attribute */
 
 	DEBUG(5,("iprint_job_submit(%d, %p (%d))\n", snum, pjob, pjob->sysjob));
 
@@ -779,11 +779,11 @@
 	ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
 	             NULL, pjob->user);
 
-	clientname = client_name(get_client_fd());
+	clientname = client_name();
 	if (strcmp(clientname, "UNKNOWN") == 0) {
-		clientname = client_addr(get_client_fd(),addr,sizeof(addr));
+		clientname = client_addr();
 	}
-	
+
 	ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
 	             "job-originating-host-name", NULL,
 	             clientname);

Modified: branches/samba/upstream/source/printing/print_svid.c
===================================================================
--- branches/samba/upstream/source/printing/print_svid.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/printing/print_svid.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  * 
  * This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  * GNU General Public License for more details.
  * 
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 /*
@@ -34,7 +35,7 @@
 #include "includes.h"
 
 #if defined(SYSV) || defined(HPUX)
-bool sysv_cache_reload(void)
+BOOL sysv_cache_reload(void)
 {
 	char **lines;
 	int i;

Copied: branches/samba/upstream/source/printing/print_test.c (from rev 1928, branches/samba/upstream/source/printing/print_test.c)
===================================================================
--- branches/samba/upstream/source/printing/print_test.c	                        (rev 0)
+++ branches/samba/upstream/source/printing/print_test.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,82 @@
+/*
+ * Printing backend for the build farm
+ *
+ * Copyright (C) Volker Lendecke 2006
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "includes.h"
+#include "printing.h"
+
+#if defined(DEVELOPER) || defined(ENABLE_BUILD_FARM_HACKS)
+
+static int test_queue_get(const char *printer_name,
+			  enum printing_types printing_type,
+			  char *lpq_command,
+			  print_queue_struct **q,
+			  print_status_struct *status)
+{
+	return -1;
+}
+
+static int test_queue_pause(int snum)
+{
+	return -1;
+}
+
+static int test_queue_resume(int snum)
+{
+	return -1;
+}
+
+static int test_job_delete(const char *sharename, const char *lprm_command,
+			   struct printjob *pjob)
+{
+	return -1;
+}
+
+static int test_job_pause(int snum, struct printjob *pjob)
+{
+	return -1;
+}
+
+static int test_job_resume(int snum, struct printjob *pjob)
+{
+	return -1;
+}
+
+static int test_job_submit(int snum, struct printjob *pjob)
+{
+	return -1;
+};
+
+struct printif test_printif =
+{
+	PRINT_TEST,
+	test_queue_get,
+	test_queue_pause,
+	test_queue_resume,
+	test_job_delete,
+	test_job_pause,
+	test_job_resume,
+	test_job_submit,
+};
+
+#else
+ /* this keeps fussy compilers happy */
+ void print_test_dummy(void);
+ void print_test_dummy(void) {}
+#endif /* DEVELOPER||ENABLE_BUILD_FARM_HACKS */

Modified: branches/samba/upstream/source/printing/printfsp.c
===================================================================
--- branches/samba/upstream/source/printing/printfsp.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/printing/printfsp.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -82,10 +83,12 @@
 	fsp->sent_oplock_break = NO_BREAK_SENT;
 	fsp->is_directory = False;
 	string_set(&fsp->fsp_name,print_job_fname(lp_const_servicename(SNUM(conn)),jobid));
+	fsp->wbmpx_ptr = NULL;      
 	fsp->wcp = NULL; 
-	SMB_VFS_FSTAT(fsp, &sbuf);
+	SMB_VFS_FSTAT(fsp,fsp->fh->fd, &sbuf);
 	fsp->mode = sbuf.st_mode;
-	fsp->file_id = vfs_file_id_from_sbuf(conn, &sbuf);
+	fsp->inode = sbuf.st_ino;
+	fsp->dev = sbuf.st_dev;
 
 	conn->num_files_open++;
 

Modified: branches/samba/upstream/source/printing/printing.c
===================================================================
--- branches/samba/upstream/source/printing/printing.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/printing/printing.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -28,7 +29,7 @@
 extern userdom_struct current_user_info;
 
 /* Current printer interface */
-static bool remove_from_jobs_changed(const char* sharename, uint32 jobid);
+static BOOL remove_from_jobs_changed(const char* sharename, uint32 jobid);
 
 /* 
    the printing backend revolves around a tdb database that stores the
@@ -75,7 +76,7 @@
 	ZERO_STRUCT( jinfo );
 	fstrcpy( jinfo.sharename, sharename );
 	jinfo.jobid = jobid;
-	key.dptr = (uint8 *)&jinfo;
+	key.dptr = (char*)&jinfo;
 	key.dsize = sizeof(jinfo);
 
 	data = tdb_fetch(rap_tdb, key);
@@ -92,7 +93,7 @@
 	if (rap_jobid == 0)
 		rap_jobid = ++next_rap_jobid;
 	SSVAL(buf,0,rap_jobid);
-	data.dptr = buf;
+	data.dptr = (char*)buf;
 	data.dsize = sizeof(rap_jobid);
 	tdb_store(rap_tdb, key, data, TDB_REPLACE);
 	tdb_store(rap_tdb, data, key, TDB_REPLACE);
@@ -102,7 +103,7 @@
 	return rap_jobid;
 }
 
-bool rap_to_pjobid(uint16 rap_jobid, fstring sharename, uint32 *pjobid)
+BOOL rap_to_pjobid(uint16 rap_jobid, fstring sharename, uint32 *pjobid)
 {
 	TDB_DATA data, key;
 	uint8 buf[2];
@@ -113,7 +114,7 @@
 		return False;
 
 	SSVAL(buf,0,rap_jobid);
-	key.dptr = buf;
+	key.dptr = (char*)buf;
 	key.dsize = sizeof(rap_jobid);
 	data = tdb_fetch(rap_tdb, key);
 	if ( data.dptr && data.dsize == sizeof(struct rap_jobid_key) ) 
@@ -148,7 +149,7 @@
 	ZERO_STRUCT( jinfo );
 	fstrcpy( jinfo.sharename, sharename );
 	jinfo.jobid = jobid;
-	key.dptr = (uint8 *)&jinfo;
+	key.dptr = (char*)&jinfo;
 	key.dsize = sizeof(jinfo);
 
 	data = tdb_fetch(rap_tdb, key);
@@ -165,7 +166,7 @@
 	rap_jobid = SVAL(data.dptr, 0);
 	SAFE_FREE(data.dptr);
 	SSVAL(buf,0,rap_jobid);
-	data.dptr = buf;
+	data.dptr = (char*)buf;
 	data.dsize = sizeof(rap_jobid);
 	tdb_delete(rap_tdb, key);
 	tdb_delete(rap_tdb, data);
@@ -177,14 +178,16 @@
  Initialise the printing backend. Called once at startup before the fork().
 ****************************************************************************/
 
-bool print_backend_init(struct messaging_context *msg_ctx)
+BOOL print_backend_init(void)
 {
 	const char *sversion = "INFO/version";
+	pstring printing_path;
 	int services = lp_numservices();
 	int snum;
 
 	unlink(lock_path("printing.tdb"));
-	mkdir(lock_path("printing"),0755);
+	pstrcpy(printing_path,lock_path("printing"));
+	mkdir(printing_path,0755);
 
 	/* handle a Samba upgrade */
 
@@ -202,7 +205,7 @@
 			return False;
 		}
 		if (tdb_fetch_int32(pdb->tdb, sversion) != PRINT_DATABASE_VERSION) {
-			tdb_wipe_all(pdb->tdb);
+			tdb_traverse(pdb->tdb, tdb_traverse_delete_fn, NULL);
 			tdb_store_int32(pdb->tdb, sversion, PRINT_DATABASE_VERSION);
 		}
 		tdb_unlock_bystring(pdb->tdb, sversion);
@@ -212,7 +215,7 @@
 	close_all_print_db(); /* Don't leave any open. */
 
 	/* do NT print initialization... */
-	return nt_printing_init(msg_ctx);
+	return nt_printing_init();
 }
 
 /****************************************************************************
@@ -264,13 +267,14 @@
  Useful function to generate a tdb key.
 ****************************************************************************/
 
-static TDB_DATA print_key(uint32 jobid, uint32 *tmp)
+static TDB_DATA print_key(uint32 jobid)
 {
+	static uint32 j;
 	TDB_DATA ret;
 
-	SIVAL(tmp, 0, jobid);
-	ret.dptr = (uint8 *)tmp;
-	ret.dsize = sizeof(*tmp);
+	SIVAL(&j, 0, jobid);
+	ret.dptr = (char *)&j;
+	ret.dsize = sizeof(j);
 	return ret;
 }
 
@@ -278,7 +282,7 @@
  unpack a pjob from a tdb buffer 
 ***********************************************************************/
  
-int unpack_pjob( uint8 *buf, int buflen, struct printjob *pjob )
+int unpack_pjob( char* buf, int buflen, struct printjob *pjob )
 {
 	int	len = 0;
 	int	used;
@@ -332,7 +336,6 @@
 static struct printjob *print_job_find(const char *sharename, uint32 jobid)
 {
 	static struct printjob 	pjob;
-	uint32_t tmp;
 	TDB_DATA 		ret;
 	struct tdb_print_db 	*pdb = get_print_db_byname(sharename);
 	
@@ -343,7 +346,7 @@
 		return NULL;
 	}
 
-	ret = tdb_fetch(pdb->tdb, print_key(jobid, &tmp));
+	ret = tdb_fetch(pdb->tdb, print_key(jobid));
 	release_print_db(pdb);
 
 	if (!ret.dptr) {
@@ -373,17 +376,13 @@
 
 /* Convert a unix jobid to a smb jobid */
 
-struct unixjob_traverse_state {
-	int sysjob;
-	uint32 sysjob_to_jobid_value;
-};
+static uint32 sysjob_to_jobid_value;
 
 static int unixjob_traverse_fn(TDB_CONTEXT *the_tdb, TDB_DATA key,
-			       TDB_DATA data, void *private_data)
+			       TDB_DATA data, void *state)
 {
 	struct printjob *pjob;
-	struct unixjob_traverse_state *state =
-		(struct unixjob_traverse_state *)private_data;
+	int *sysjob = (int *)state;
 
 	if (!data.dptr || data.dsize == 0)
 		return 0;
@@ -392,10 +391,10 @@
 	if (key.dsize != sizeof(uint32))
 		return 0;
 
-	if (state->sysjob == pjob->sysjob) {
+	if (*sysjob == pjob->sysjob) {
 		uint32 jobid = IVAL(key.dptr,0);
 
-		state->sysjob_to_jobid_value = jobid;
+		sysjob_to_jobid_value = jobid;
 		return 1;
 	}
 
@@ -411,10 +410,8 @@
 {
 	int services = lp_numservices();
 	int snum;
-	struct unixjob_traverse_state state;
 
-	state.sysjob = unix_jobid;
-	state.sysjob_to_jobid_value = (uint32)-1;
+	sysjob_to_jobid_value = (uint32)-1;
 
 	for (snum = 0; snum < services; snum++) {
 		struct tdb_print_db *pdb;
@@ -424,10 +421,10 @@
 		if (!pdb) {
 			continue;
 		}
-		tdb_traverse(pdb->tdb, unixjob_traverse_fn, &state);
+		tdb_traverse(pdb->tdb, unixjob_traverse_fn, &unix_jobid);
 		release_print_db(pdb);
-		if (state.sysjob_to_jobid_value != (uint32)-1)
-			return state.sysjob_to_jobid_value;
+		if (sysjob_to_jobid_value != (uint32)-1)
+			return sysjob_to_jobid_value;
 	}
 	return (uint32)-1;
 }
@@ -436,7 +433,7 @@
  Send notifications based on what has changed after a pjob_store.
 ****************************************************************************/
 
-static const struct {
+static struct {
 	uint32 lpq_status;
 	uint32 spoolss_status;
 } lpq_to_spoolss_status_map[] = {
@@ -473,7 +470,7 @@
 static void pjob_store_notify(const char* sharename, uint32 jobid, struct printjob *old_data,
 			      struct printjob *new_data)
 {
-	bool new_job = False;
+	BOOL new_job = False;
 
 	if (!old_data)
 		new_job = True;
@@ -516,13 +513,12 @@
  Store a job structure back to the database.
 ****************************************************************************/
 
-static bool pjob_store(const char* sharename, uint32 jobid, struct printjob *pjob)
+static BOOL pjob_store(const char* sharename, uint32 jobid, struct printjob *pjob)
 {
-	uint32_t tmp;
 	TDB_DATA 		old_data, new_data;
-	bool 			ret = False;
+	BOOL 			ret = False;
 	struct tdb_print_db 	*pdb = get_print_db_byname(sharename);
-	uint8			*buf = NULL;
+	char			*buf = NULL;
 	int			len, newlen, buflen;
 	
 
@@ -531,7 +527,7 @@
 
 	/* Get old data */
 
-	old_data = tdb_fetch(pdb->tdb, print_key(jobid, &tmp));
+	old_data = tdb_fetch(pdb->tdb, print_key(jobid));
 
 	/* Doh!  Now we have to pack/unpack data since the NT_DEVICEMODE was added */
 
@@ -558,7 +554,7 @@
 		len += pack_devicemode(pjob->nt_devmode, buf+len, buflen-len);
 	
 		if (buflen != len) {
-			buf = (uint8 *)SMB_REALLOC(buf, len);
+			buf = (char *)SMB_REALLOC(buf, len);
 			if (!buf) {
 				DEBUG(0,("pjob_store: failed to enlarge buffer!\n"));
 				goto done;
@@ -572,8 +568,7 @@
 
 	new_data.dptr = buf;
 	new_data.dsize = len;
-	ret = (tdb_store(pdb->tdb, print_key(jobid, &tmp), new_data,
-			 TDB_REPLACE) == 0);
+	ret = (tdb_store(pdb->tdb, print_key(jobid), new_data, TDB_REPLACE) == 0);
 
 	release_print_db(pdb);
 
@@ -609,7 +604,6 @@
 
 void pjob_delete(const char* sharename, uint32 jobid)
 {
-	uint32_t tmp;
 	struct printjob *pjob;
 	uint32 job_status = 0;
 	struct tdb_print_db *pdb;
@@ -637,7 +631,7 @@
 	
 	/* Remove from printing.tdb */
 
-	tdb_delete(pdb->tdb, print_key(jobid, &tmp));
+	tdb_delete(pdb->tdb, print_key(jobid));
 	remove_from_jobs_changed(sharename, jobid);
 	release_print_db( pdb );
 	rap_jobid_delete(sharename, jobid);
@@ -873,7 +867,8 @@
 	if (!pdb)
 		return (pid_t)-1;
 	slprintf(keystr, sizeof(keystr)-1, "UPDATING/%s", sharename);
-    	key = string_tdb_data(keystr);
+    	key.dptr = keystr;
+	key.dsize = strlen(keystr);
 
 	data = tdb_fetch(pdb->tdb, key);
 	release_print_db(pdb);
@@ -896,7 +891,7 @@
  in the tdb.
 ****************************************************************************/
 
-static void set_updating_pid(const fstring sharename, bool updating)
+static void set_updating_pid(const fstring sharename, BOOL updating)
 {
 	fstring keystr;
 	TDB_DATA key;
@@ -910,7 +905,8 @@
 		return;
 
 	slprintf(keystr, sizeof(keystr)-1, "UPDATING/%s", sharename);
-    	key = string_tdb_data(keystr);
+    	key.dptr = keystr;
+	key.dsize = strlen(keystr);
 	
 	DEBUG(5, ("set_updating_pid: %s updating lpq cache for print share %s\n", 
 		updating ? "" : "not ",
@@ -923,7 +919,7 @@
 	}
 	
 	SIVAL( buffer, 0, updating_pid);
-	data.dptr = buffer;
+	data.dptr = (char *)buffer;
 	data.dsize = 4;		/* we always assume this is a 4 byte value */
 
 	tdb_store(pdb->tdb, key, data, TDB_REPLACE);	
@@ -964,7 +960,7 @@
 	print_queue_struct *queue = pts->queue;
 	size_t len;
 	size_t i;
-	unsigned int qcount;
+	uint qcount;
 
 	if (max_reported_jobs && (max_reported_jobs < pts->qcount))
 		pts->qcount = max_reported_jobs;
@@ -990,7 +986,7 @@
 				queue[i].fs_file);
 	}
 
-	if ((data.dptr = (uint8 *)SMB_MALLOC(data.dsize)) == NULL)
+	if ((data.dptr = (char *)SMB_MALLOC(data.dsize)) == NULL)
 		return;
 
         len = 0;
@@ -1049,12 +1045,12 @@
  Check if the print queue has been updated recently enough.
 ****************************************************************************/
 
-static bool print_cache_expired(const char *sharename, bool check_pending)
+static BOOL print_cache_expired(const char *sharename, BOOL check_pending)
 {
 	fstring key;
 	time_t last_qscan_time, time_now = time(NULL);
 	struct tdb_print_db *pdb = get_print_db_byname(sharename);
-	bool result = False;
+	BOOL result = False;
 
 	if (!pdb)
 		return False;
@@ -1237,10 +1233,11 @@
 
 	/* store the new queue status structure */
 	slprintf(keystr, sizeof(keystr)-1, "STATUS/%s", sharename);
-	key = string_tdb_data(keystr);
+	key.dptr = keystr;
+	key.dsize = strlen(keystr);
 
 	status.qcount = qcount;
-	data.dptr = (uint8 *)&status;
+	data.dptr = (char *)&status;
 	data.dsize = sizeof(status);
 	tdb_store(pdb->tdb, key, data, TDB_REPLACE);	
 
@@ -1354,26 +1351,22 @@
 /****************************************************************************
 this is the receive function of the background lpq updater
 ****************************************************************************/
-static void print_queue_receive(struct messaging_context *msg,
-				void *private_data,
-				uint32_t msg_type,
-				struct server_id server_id,
-				DATA_BLOB *data)
+static void print_queue_receive(int msg_type, struct process_id src,
+				void *buf, size_t msglen,
+				void *private_data)
 {
 	fstring sharename;
-	char *lpqcommand = NULL, *lprmcommand = NULL;
+	pstring lpqcommand, lprmcommand;
 	int printing_type;
 	size_t len;
 
-	len = tdb_unpack( (uint8 *)data->data, data->length, "fdPP",
+	len = tdb_unpack( (char *)buf, msglen, "fdPP",
 		sharename,
 		&printing_type,
-		&lpqcommand,
-		&lprmcommand );
+		lpqcommand,
+		lprmcommand );
 
 	if ( len == -1 ) {
-		SAFE_FREE(lpqcommand);
-		SAFE_FREE(lprmcommand);
 		DEBUG(0,("print_queue_receive: Got invalid print queue update message\n"));
 		return;
 	}
@@ -1382,8 +1375,6 @@
 		get_printer_fns_from_type((enum printing_types)printing_type),
 		lpqcommand, lprmcommand );
 
-	SAFE_FREE(lpqcommand);
-	SAFE_FREE(lprmcommand);
 	return;
 }
 
@@ -1406,20 +1397,15 @@
 		/* Child. */
 		DEBUG(5,("start_background_queue: background LPQ thread started\n"));
 
-		if (!reinit_after_fork(smbd_messaging_context(), true)) {
-			DEBUG(0,("reinit_after_fork() failed\n"));
-			smb_panic("reinit_after_fork() failed");
-		}
-
-		claim_connection( NULL, "smbd lpq backend",
+		claim_connection( NULL, "smbd lpq backend", 0, False, 
 			FLAG_MSG_GENERAL|FLAG_MSG_SMBD|FLAG_MSG_PRINT_GENERAL);
 
-		if (!locking_init()) {
+		if (!locking_init(0)) {
 			exit(1);
 		}
 
-		messaging_register(smbd_messaging_context(), NULL,
-				   MSG_PRINTER_UPDATE, print_queue_receive);
+		message_register(MSG_PRINTER_UPDATE, print_queue_receive,
+				 NULL);
 		
 		DEBUG(5,("start_background_queue: background LPQ thread waiting for messages\n"));
 		while (1) {
@@ -1441,12 +1427,11 @@
 			/* now check for messages */
 			
 			DEBUG(10,("start_background_queue: background LPQ thread got a message\n"));
-			message_dispatch(smbd_messaging_context());
+			message_dispatch();
 
 			/* process any pending print change notify messages */
 
-			print_notify_send_messages(smbd_messaging_context(),
-						   0);
+			print_notify_send_messages(0);
 		}
 	}
 }
@@ -1455,69 +1440,47 @@
 update the internal database from the system print queue for a queue
 ****************************************************************************/
 
-static void print_queue_update(int snum, bool force)
+static void print_queue_update(int snum, BOOL force)
 {
 	fstring key;
 	fstring sharename;
-	char *lpqcommand = NULL;
-	char *lprmcommand = NULL;
-	uint8 *buffer = NULL;
+	pstring lpqcommand, lprmcommand;
+	char *buffer = NULL;
 	size_t len = 0;
 	size_t newlen;
 	struct tdb_print_db *pdb;
 	int type;
 	struct printif *current_printif;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	fstrcpy( sharename, lp_const_servicename(snum));
 
 	/* don't strip out characters like '$' from the printername */
-
-	lpqcommand = talloc_string_sub2(ctx,
-			lp_lpqcommand(snum),
-			"%p",
-			PRINTERNAME(snum),
-			false, false, false);
-	if (!lpqcommand) {
-		return;
-	}
-	lpqcommand = talloc_sub_advanced(ctx,
-			lp_servicename(snum),
-			current_user_info.unix_name,
-			"",
-			current_user.ut.gid,
-			get_current_username(),
-			current_user_info.domain,
-			lpqcommand);
-	if (!lpqcommand) {
-		return;
-	}
-
-	lprmcommand = talloc_string_sub2(ctx,
-			lp_lprmcommand(snum),
-			"%p",
-			PRINTERNAME(snum),
-			false, false, false);
-	if (!lprmcommand) {
-		return;
-	}
-	lprmcommand = talloc_sub_advanced(ctx,
-			lp_servicename(snum),
-			current_user_info.unix_name,
-			"",
-			current_user.ut.gid,
-			get_current_username(),
-			current_user_info.domain,
-			lprmcommand);
-	if (!lprmcommand) {
-		return;
-	}
-
-	/*
-	 * Make sure that the background queue process exists.
-	 * Otherwise just do the update ourselves
+	
+	pstrcpy( lpqcommand, lp_lpqcommand(snum));
+	string_sub2( lpqcommand, "%p", PRINTERNAME(snum), sizeof(lpqcommand), 
+		     False, False, False );
+	standard_sub_advanced(lp_servicename(snum),
+			      current_user_info.unix_name, "",
+			      current_user.ut.gid,
+			      get_current_username(),
+			      current_user_info.domain,
+			      lpqcommand, sizeof(lpqcommand) );
+	
+	pstrcpy( lprmcommand, lp_lprmcommand(snum));
+	string_sub2( lprmcommand, "%p", PRINTERNAME(snum), sizeof(lprmcommand), 
+		     False, False, False );
+	standard_sub_advanced(lp_servicename(snum),
+			      current_user_info.unix_name, "",
+			      current_user.ut.gid,
+			      get_current_username(),
+			      current_user_info.domain,
+			      lprmcommand, sizeof(lprmcommand) );
+	
+	/* 
+	 * Make sure that the background queue process exists.  
+	 * Otherwise just do the update ourselves 
 	 */
-
+	
 	if ( force || background_lpq_updater_pid == -1 ) {
 		DEBUG(4,("print_queue_update: updating queue [%s] myself\n", sharename));
 		current_printif = get_printer_fns( snum );
@@ -1527,16 +1490,16 @@
 	}
 
 	type = lp_printing(snum);
-
+	
 	/* get the length */
 
 	len = tdb_pack( NULL, 0, "fdPP",
 		sharename,
 		type,
-		lpqcommand,
+		lpqcommand, 
 		lprmcommand );
 
-	buffer = SMB_XMALLOC_ARRAY( uint8, len );
+	buffer = SMB_XMALLOC_ARRAY( char, len );
 
 	/* now pack the buffer */
 	newlen = tdb_pack( buffer, len, "fdPP",
@@ -1574,9 +1537,8 @@
 
 	/* finally send the message */
 	
-	messaging_send_buf(smbd_messaging_context(),
-			   pid_to_procid(background_lpq_updater_pid),
-			   MSG_PRINTER_UPDATE, (uint8 *)buffer, len);
+	message_send_pid(pid_to_procid(background_lpq_updater_pid),
+		 MSG_PRINTER_UPDATE, buffer, len, False);
 
 	SAFE_FREE( buffer );
 
@@ -1588,14 +1550,14 @@
  updates only to interested smbd's. 
 ****************************************************************************/
 
-bool print_notify_register_pid(int snum)
+BOOL print_notify_register_pid(int snum)
 {
 	TDB_DATA data;
 	struct tdb_print_db *pdb = NULL;
 	TDB_CONTEXT *tdb = NULL;
 	const char *printername;
 	uint32 mypid = (uint32)sys_getpid();
-	bool ret = False;
+	BOOL ret = False;
 	size_t i;
 
 	/* if (snum == -1), then the change notify request was
@@ -1645,7 +1607,7 @@
 
 	if (i == data.dsize) {
 		/* We weren't in the list. Realloc. */
-		data.dptr = (uint8 *)SMB_REALLOC(data.dptr, data.dsize + 8);
+		data.dptr = (char *)SMB_REALLOC(data.dptr, data.dsize + 8);
 		if (!data.dptr) {
 			DEBUG(0,("print_notify_register_pid: Relloc fail for printer %s\n",
 						printername));
@@ -1679,7 +1641,7 @@
  updates only to interested smbd's. 
 ****************************************************************************/
 
-bool print_notify_deregister_pid(int snum)
+BOOL print_notify_deregister_pid(int snum)
 {
 	TDB_DATA data;
 	struct tdb_print_db *pdb = NULL;
@@ -1687,7 +1649,7 @@
 	const char *printername;
 	uint32 mypid = (uint32)sys_getpid();
 	size_t i;
-	bool ret = False;
+	BOOL ret = False;
 
 	/* if ( snum == -1 ), we are deregister a print server handle
 	   which means to deregister on all print queues */
@@ -1768,15 +1730,14 @@
  Check if a jobid is valid. It is valid if it exists in the database.
 ****************************************************************************/
 
-bool print_job_exists(const char* sharename, uint32 jobid)
+BOOL print_job_exists(const char* sharename, uint32 jobid)
 {
 	struct tdb_print_db *pdb = get_print_db_byname(sharename);
-	bool ret;
-	uint32_t tmp;
+	BOOL ret;
 
 	if (!pdb)
 		return False;
-	ret = tdb_exists(pdb->tdb, print_key(jobid, &tmp));
+	ret = tdb_exists(pdb->tdb, print_key(jobid));
 	release_print_db(pdb);
 	return ret;
 }
@@ -1831,7 +1792,7 @@
  Set the place in the queue for a job.
 ****************************************************************************/
 
-bool print_job_set_place(const char *sharename, uint32 jobid, int place)
+BOOL print_job_set_place(const char *sharename, uint32 jobid, int place)
 {
 	DEBUG(2,("print_job_set_place not implemented yet\n"));
 	return False;
@@ -1841,7 +1802,7 @@
  Set the name of a job. Only possible for owner.
 ****************************************************************************/
 
-bool print_job_set_name(const char *sharename, uint32 jobid, char *name)
+BOOL print_job_set_name(const char *sharename, uint32 jobid, char *name)
 {
 	struct printjob *pjob;
 
@@ -1857,13 +1818,13 @@
  Remove a jobid from the 'jobs changed' list.
 ***************************************************************************/
 
-static bool remove_from_jobs_changed(const char* sharename, uint32 jobid)
+static BOOL remove_from_jobs_changed(const char* sharename, uint32 jobid)
 {
 	struct tdb_print_db *pdb = get_print_db_byname(sharename);
 	TDB_DATA data, key;
 	size_t job_count, i;
-	bool ret = False;
-	bool gotlock = False;
+	BOOL ret = False;
+	BOOL gotlock = False;
 
 	if (!pdb) {
 		return False;
@@ -1916,7 +1877,7 @@
  Delete a print job - don't update queue.
 ****************************************************************************/
 
-static bool print_job_delete1(int snum, uint32 jobid)
+static BOOL print_job_delete1(int snum, uint32 jobid)
 {
 	const char* sharename = lp_const_servicename(snum);
 	struct printjob *pjob = print_job_find(sharename, jobid);
@@ -1979,7 +1940,7 @@
  Return true if the current user owns the print job.
 ****************************************************************************/
 
-static bool is_owner(struct current_user *user, const char *servicename,
+static BOOL is_owner(struct current_user *user, const char *servicename,
 		     uint32 jobid)
 {
 	struct printjob *pjob = print_job_find(servicename, jobid);
@@ -1999,11 +1960,11 @@
  Delete a print job.
 ****************************************************************************/
 
-bool print_job_delete(struct current_user *user, int snum, uint32 jobid, WERROR *errcode)
+BOOL print_job_delete(struct current_user *user, int snum, uint32 jobid, WERROR *errcode)
 {
 	const char* sharename = lp_const_servicename( snum );
 	struct printjob *pjob;
-	bool 	owner;
+	BOOL 	owner;
 	char 	*fname;
 
 	*errcode = WERR_OK;
@@ -2066,7 +2027,7 @@
  Pause a job.
 ****************************************************************************/
 
-bool print_job_pause(struct current_user *user, int snum, uint32 jobid, WERROR *errcode)
+BOOL print_job_pause(struct current_user *user, int snum, uint32 jobid, WERROR *errcode)
 {
 	const char* sharename = lp_const_servicename(snum);
 	struct printjob *pjob;
@@ -2126,7 +2087,7 @@
  Resume a job.
 ****************************************************************************/
 
-bool print_job_resume(struct current_user *user, int snum, uint32 jobid, WERROR *errcode)
+BOOL print_job_resume(struct current_user *user, int snum, uint32 jobid, WERROR *errcode)
 {
 	const char *sharename = lp_const_servicename(snum);
 	struct printjob *pjob;
@@ -2269,7 +2230,7 @@
  Allocate a jobid. Hold the lock for as short a time as possible.
 ***************************************************************************/
 
-static bool allocate_print_jobid(struct tdb_print_db *pdb, int snum, const char *sharename, uint32 *pjobid)
+static BOOL allocate_print_jobid(struct tdb_print_db *pdb, int snum, const char *sharename, uint32 *pjobid)
 {
 	int i;
 	uint32 jobid;
@@ -2317,12 +2278,10 @@
 
 	/* Store a dummy placeholder. */
 	{
-		uint32_t tmp;
 		TDB_DATA dum;
 		dum.dptr = NULL;
 		dum.dsize = 0;
-		if (tdb_store(pdb->tdb, print_key(jobid, &tmp), dum,
-			      TDB_INSERT) == -1) {
+		if (tdb_store(pdb->tdb, print_key(jobid), dum, TDB_INSERT) == -1) {
 			DEBUG(3, ("allocate_print_jobid: jobid (%d) failed to store placeholder.\n",
 				jobid ));
 			return False;
@@ -2337,13 +2296,13 @@
  Append a jobid to the 'jobs changed' list.
 ***************************************************************************/
 
-static bool add_to_jobs_changed(struct tdb_print_db *pdb, uint32 jobid)
+static BOOL add_to_jobs_changed(struct tdb_print_db *pdb, uint32 jobid)
 {
 	TDB_DATA data;
 	uint32 store_jobid;
 
 	SIVAL(&store_jobid, 0, jobid);
-	data.dptr = (uint8 *)&store_jobid;
+	data.dptr = (char *)&store_jobid;
 	data.dsize = 4;
 
 	DEBUG(10,("add_to_jobs_changed: Added jobid %u\n", (unsigned int)jobid ));
@@ -2514,7 +2473,7 @@
  error.
 ****************************************************************************/
 
-bool print_job_end(int snum, uint32 jobid, enum file_close_type close_type)
+BOOL print_job_end(int snum, uint32 jobid, enum file_close_type close_type)
 {
 	const char* sharename = lp_const_servicename(snum);
 	struct printjob *pjob;
@@ -2591,7 +2550,7 @@
  Get a snapshot of jobs in the system without traversing.
 ****************************************************************************/
 
-static bool get_stored_queue_info(struct tdb_print_db *pdb, int snum, int *pcount, print_queue_struct **ppqueue)
+static BOOL get_stored_queue_info(struct tdb_print_db *pdb, int snum, int *pcount, print_queue_struct **ppqueue)
 {
 	TDB_DATA data, cgdata;
 	print_queue_struct *queue = NULL;
@@ -2601,7 +2560,7 @@
 	size_t len = 0;
 	uint32 i;
 	int max_reported_jobs = lp_max_reported_jobs(snum);
-	bool ret = False;
+	BOOL ret = False;
 	const char* sharename = lp_servicename(snum);
 
 	/* make sure the database is up to date */
@@ -2742,8 +2701,8 @@
 
 	ZERO_STRUCTP(status);
 	slprintf(keystr, sizeof(keystr)-1, "STATUS/%s", sharename);
-	key = string_tdb_data(keystr);
-
+	key.dptr = keystr;
+	key.dsize = strlen(keystr);
 	data = tdb_fetch(pdb->tdb, key);
 	if (data.dptr) {
 		if (data.dsize == sizeof(*status)) {
@@ -2772,7 +2731,7 @@
  Pause a queue.
 ****************************************************************************/
 
-bool print_queue_pause(struct current_user *user, int snum, WERROR *errcode)
+BOOL print_queue_pause(struct current_user *user, int snum, WERROR *errcode)
 {
 	int ret;
 	struct printif *current_printif = get_printer_fns( snum );
@@ -2808,7 +2767,7 @@
  Resume a queue.
 ****************************************************************************/
 
-bool print_queue_resume(struct current_user *user, int snum, WERROR *errcode)
+BOOL print_queue_resume(struct current_user *user, int snum, WERROR *errcode)
 {
 	int ret;
 	struct printif *current_printif = get_printer_fns( snum );
@@ -2844,12 +2803,12 @@
  Purge a queue - implemented by deleting all jobs that we can delete.
 ****************************************************************************/
 
-bool print_queue_purge(struct current_user *user, int snum, WERROR *errcode)
+BOOL print_queue_purge(struct current_user *user, int snum, WERROR *errcode)
 {
 	print_queue_struct *queue;
 	print_status_struct status;
 	int njobs, i;
-	bool can_job_admin;
+	BOOL can_job_admin;
 
 	/* Force and update so the count is accurate (i.e. not a cached count) */
 	print_queue_update(snum, True);
@@ -2861,7 +2820,7 @@
 		become_root();
 
 	for (i=0;i<njobs;i++) {
-		bool owner = is_owner(user, lp_const_servicename(snum), queue[i].job);
+		BOOL owner = is_owner(user, lp_const_servicename(snum), queue[i].job);
 
 		if (owner || can_job_admin) {
 			print_job_delete1(snum, queue[i].job);

Modified: branches/samba/upstream/source/printing/printing_db.c
===================================================================
--- branches/samba/upstream/source/printing/printing_db.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/printing/printing_db.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -33,8 +34,8 @@
 {
 	struct tdb_print_db *p = NULL, *last_entry = NULL;
 	int num_open = 0;
-	char *printdb_path = NULL;
-	bool done_become_root = False;
+	pstring printdb_path;
+	BOOL done_become_root = False;
 
 	SMB_ASSERT(printername != NULL);
 
@@ -78,7 +79,7 @@
 			p = print_db_head;
 		}
 	}
-
+       
 	if (!p)	{
 		/* Create one. */
 		p = SMB_MALLOC_P(struct tdb_print_db);
@@ -90,13 +91,9 @@
 		DLIST_ADD(print_db_head, p);
 	}
 
-	if (asprintf(&printdb_path, "%s%s.tdb",
-				lock_path("printing/"),
-				printername) < 0) {
-		DLIST_REMOVE(print_db_head, p);
-		SAFE_FREE(p);
-		return NULL;
-	}
+	pstrcpy(printdb_path, lock_path("printing/"));
+	pstrcat(printdb_path, printername);
+	pstrcat(printdb_path, ".tdb");
 
 	if (geteuid() != 0) {
 		become_root();
@@ -113,11 +110,9 @@
 		DEBUG(0,("get_print_db: Failed to open printer backend database %s.\n",
 					printdb_path ));
 		DLIST_REMOVE(print_db_head, p);
-		SAFE_FREE(printdb_path);
 		SAFE_FREE(p);
 		return NULL;
 	}
-	SAFE_FREE(printdb_path);
 	fstrcpy(p->printer_name, printername);
 	p->ref_count++;
 	return p;
@@ -158,7 +153,7 @@
  messages. data needs freeing on exit.
 ****************************************************************************/
 
-TDB_DATA get_printer_notify_pid_list(TDB_CONTEXT *tdb, const char *printer_name, bool cleanlist)
+TDB_DATA get_printer_notify_pid_list(TDB_CONTEXT *tdb, const char *printer_name, BOOL cleanlist)
 {
 	TDB_DATA data;
 	size_t i;

Modified: branches/samba/upstream/source/profile/profile.c
===================================================================
--- branches/samba/upstream/source/profile/profile.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/profile/profile.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
 */
 
@@ -27,23 +28,23 @@
 
 #ifdef WITH_PROFILE
 static int shm_id;
-static bool read_only;
+static BOOL read_only;
 #if defined(HAVE_CLOCK_GETTIME)
 clockid_t __profile_clock;
-bool have_profiling_clock = False;
+BOOL have_profiling_clock = False;
 #endif
 #endif
 
 struct profile_header *profile_h;
 struct profile_stats *profile_p;
 
-bool do_profile_flag = False;
-bool do_profile_times = False;
+BOOL do_profile_flag = False;
+BOOL do_profile_times = False;
 
 /****************************************************************************
 Set a profiling level.
 ****************************************************************************/
-void set_profile_level(int level, struct server_id src)
+void set_profile_level(int level, struct process_id src)
 {
 #ifdef WITH_PROFILE
 	switch (level) {
@@ -89,36 +90,22 @@
 #endif /* WITH_PROFILE */
 }
 
-#ifdef WITH_PROFILE
-
 /****************************************************************************
 receive a set profile level message
 ****************************************************************************/
-static void profile_message(struct messaging_context *msg_ctx,
-			    void *private_data,
-			    uint32_t msg_type,
-			    struct server_id src,
-			    DATA_BLOB *data)
+void profile_message(int msg_type, struct process_id src, void *buf, size_t len, void *private_data)
 {
         int level;
 
-	if (data->length != sizeof(level)) {
-		DEBUG(0, ("got invalid profile message\n"));
-		return;
-	}
-
-	memcpy(&level, data->data, sizeof(level));
+	memcpy(&level, buf, sizeof(int));
 	set_profile_level(level, src);
 }
 
 /****************************************************************************
 receive a request profile level message
 ****************************************************************************/
-static void reqprofile_message(struct messaging_context *msg_ctx,
-			       void *private_data, 
-			       uint32_t msg_type, 
-			       struct server_id src,
-			       DATA_BLOB *data)
+void reqprofile_message(int msg_type, struct process_id src,
+			void *buf, size_t len, void *private_data)
 {
         int level;
 
@@ -129,13 +116,13 @@
 #endif
 	DEBUG(1,("INFO: Received REQ_PROFILELEVEL message from PID %u\n",
 		 (unsigned int)procid_to_pid(&src)));
-	messaging_send_buf(msg_ctx, src, MSG_PROFILELEVEL,
-			   (uint8 *)&level, sizeof(level));
+	message_send_pid(src, MSG_PROFILELEVEL, &level, sizeof(int), True);
 }
 
 /*******************************************************************
   open the profiling shared memory area
   ******************************************************************/
+#ifdef WITH_PROFILE
 
 #ifdef HAVE_CLOCK_GETTIME
 
@@ -196,7 +183,7 @@
 }
 #endif
 
-bool profile_setup(struct messaging_context *msg_ctx, bool rdonly)
+BOOL profile_setup(BOOL rdonly)
 {
 	struct shmid_ds shm_ds;
 
@@ -250,8 +237,8 @@
 	}
 
 	if (shm_ds.shm_segsz != sizeof(*profile_h)) {
-		DEBUG(0,("WARNING: profile size is %d (expected %d). Deleting\n",
-			 (int)shm_ds.shm_segsz, (int)sizeof(*profile_h)));
+		DEBUG(0,("WARNING: profile size is %d (expected %lu). Deleting\n",
+			 (int)shm_ds.shm_segsz, sizeof(*profile_h)));
 		if (shmctl(shm_id, IPC_RMID, &shm_ds) == 0) {
 			goto again;
 		} else {
@@ -267,12 +254,8 @@
 	}
 
 	profile_p = &profile_h->stats;
-	if (msg_ctx != NULL) {
-		messaging_register(msg_ctx, NULL, MSG_PROFILE,
-				   profile_message);
-		messaging_register(msg_ctx, NULL, MSG_REQ_PROFILELEVEL,
-				   reqprofile_message);
-	}
+	message_register(MSG_PROFILE, profile_message, NULL);
+	message_register(MSG_REQ_PROFILELEVEL, reqprofile_message, NULL);
 	return True;
 }
 
@@ -297,7 +280,6 @@
 	    "syscall_pwrite",		/* PR_VALUE_SYSCALL_PWRITE */
 	    "syscall_lseek",		/* PR_VALUE_SYSCALL_LSEEK */
 	    "syscall_sendfile",		/* PR_VALUE_SYSCALL_SENDFILE */
-	    "syscall_recvfile",		/* PR_VALUE_SYSCALL_RECVFILE */
 	    "syscall_rename",		/* PR_VALUE_SYSCALL_RENAME */
 	    "syscall_fsync",		/* PR_VALUE_SYSCALL_FSYNC */
 	    "syscall_stat",		/* PR_VALUE_SYSCALL_STAT */

Copied: branches/samba/upstream/source/python (from rev 1928, branches/samba/upstream/source/python)

Deleted: branches/samba/upstream/source/registry/reg_api.c
===================================================================
--- branches/samba/upstream/source/registry/reg_api.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/registry/reg_api.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,1247 +0,0 @@
-/*
- *  Unix SMB/CIFS implementation.
- *  Virtual Windows Registry Layer
- *  Copyright (C) Volker Lendecke 2006
- *  Copyright (C) Michael Adam 2007-2008
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-/* Attempt to wrap the existing API in a more winreg.idl-like way */
-
-/*
- * Here is a list of winreg.idl functions and corresponding implementations
- * provided here:
- *
- * 0x00		winreg_OpenHKCR
- * 0x01		winreg_OpenHKCU
- * 0x02		winreg_OpenHKLM
- * 0x03		winreg_OpenHKPD
- * 0x04		winreg_OpenHKU
- * 0x05		winreg_CloseKey
- * 0x06		winreg_CreateKey			reg_createkey
- * 0x07		winreg_DeleteKey			reg_deletekey
- * 0x08		winreg_DeleteValue			reg_deletevalue
- * 0x09		winreg_EnumKey				reg_enumkey
- * 0x0a		winreg_EnumValue			reg_enumvalue
- * 0x0b		winreg_FlushKey
- * 0x0c		winreg_GetKeySecurity			reg_getkeysecurity
- * 0x0d		winreg_LoadKey
- * 0x0e		winreg_NotifyChangeKeyValue
- * 0x0f		winreg_OpenKey				reg_openkey
- * 0x10		winreg_QueryInfoKey			reg_queryinfokey
- * 0x11		winreg_QueryValue			reg_queryvalue
- * 0x12		winreg_ReplaceKey
- * 0x13		winreg_RestoreKey			reg_restorekey
- * 0x14		winreg_SaveKey				reg_savekey
- * 0x15		winreg_SetKeySecurity			reg_setkeysecurity
- * 0x16		winreg_SetValue				reg_setvalue
- * 0x17		winreg_UnLoadKey
- * 0x18		winreg_InitiateSystemShutdown
- * 0x19		winreg_AbortSystemShutdown
- * 0x1a		winreg_GetVersion			reg_getversion
- * 0x1b		winreg_OpenHKCC
- * 0x1c		winreg_OpenHKDD
- * 0x1d		winreg_QueryMultipleValues
- * 0x1e		winreg_InitiateSystemShutdownEx
- * 0x1f		winreg_SaveKeyEx
- * 0x20		winreg_OpenHKPT
- * 0x21		winreg_OpenHKPN
- * 0x22		winreg_QueryMultipleValues2
- *
- */
-
-#include "includes.h"
-#include "regfio.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_REGISTRY
-
-
-/**********************************************************************
- * Helper functions
- **********************************************************************/
-
-static WERROR fill_value_cache(struct registry_key *key)
-{
-	if (key->values != NULL) {
-		if (!reg_values_need_update(key->key, key->values)) {
-			return WERR_OK;
-		}
-	}
-
-	if (!(key->values = TALLOC_ZERO_P(key, REGVAL_CTR))) {
-		return WERR_NOMEM;
-	}
-	if (fetch_reg_values(key->key, key->values) == -1) {
-		TALLOC_FREE(key->values);
-		return WERR_BADFILE;
-	}
-
-	return WERR_OK;
-}
-
-static WERROR fill_subkey_cache(struct registry_key *key)
-{
-	if (key->subkeys != NULL) {
-		if (!reg_subkeys_need_update(key->key, key->subkeys)) {
-			return WERR_OK;
-		}
-	}
-
-	if (!(key->subkeys = TALLOC_ZERO_P(key, REGSUBKEY_CTR))) {
-		return WERR_NOMEM;
-	}
-
-	if (fetch_reg_keys(key->key, key->subkeys) == -1) {
-		TALLOC_FREE(key->subkeys);
-		return WERR_NO_MORE_ITEMS;
-	}
-
-	return WERR_OK;
-}
-
-static int regkey_destructor(REGISTRY_KEY *key)
-{
-	return regdb_close();
-}
-
-static WERROR regkey_open_onelevel(TALLOC_CTX *mem_ctx, 
-				   struct registry_key *parent,
-				   const char *name,
-				   const struct nt_user_token *token,
-				   uint32 access_desired,
-				   struct registry_key **pregkey)
-{
-	WERROR     	result = WERR_OK;
-	struct registry_key *regkey;
-	REGISTRY_KEY *key;
-	REGSUBKEY_CTR	*subkeys = NULL;
-
-	DEBUG(7,("regkey_open_onelevel: name = [%s]\n", name));
-
-	SMB_ASSERT(strchr(name, '\\') == NULL);
-
-	if (!(regkey = TALLOC_ZERO_P(mem_ctx, struct registry_key)) ||
-	    !(regkey->token = dup_nt_token(regkey, token)) ||
-	    !(regkey->key = TALLOC_ZERO_P(regkey, REGISTRY_KEY))) {
-		result = WERR_NOMEM;
-		goto done;
-	}
-
-	if ( !(W_ERROR_IS_OK(result = regdb_open())) ) {
-		goto done;
-	}
-
-	key = regkey->key;
-	talloc_set_destructor(key, regkey_destructor);
-		
-	/* initialization */
-	
-	key->type = REG_KEY_GENERIC;
-
-	if (name[0] == '\0') {
-		/*
-		 * Open a copy of the parent key
-		 */
-		if (!parent) {
-			result = WERR_BADFILE;
-			goto done;
-		}
-		key->name = talloc_strdup(key, parent->key->name);
-	}
-	else {
-		/*
-		 * Normal subkey open
-		 */
-		key->name = talloc_asprintf(key, "%s%s%s",
-					    parent ? parent->key->name : "",
-					    parent ? "\\": "",
-					    name);
-	}
-
-	if (key->name == NULL) {
-		result = WERR_NOMEM;
-		goto done;
-	}
-
-	/* Tag this as a Performance Counter Key */
-
-	if( StrnCaseCmp(key->name, KEY_HKPD, strlen(KEY_HKPD)) == 0 )
-		key->type = REG_KEY_HKPD;
-	
-	/* Look up the table of registry I/O operations */
-
-	if ( !(key->ops = reghook_cache_find( key->name )) ) {
-		DEBUG(0,("reg_open_onelevel: Failed to assign "
-			 "REGISTRY_OPS to [%s]\n", key->name ));
-		result = WERR_BADFILE;
-		goto done;
-	}
-
-	/* check if the path really exists; failed is indicated by -1 */
-	/* if the subkey count failed, bail out */
-
-	if ( !(subkeys = TALLOC_ZERO_P( key, REGSUBKEY_CTR )) ) {
-		result = WERR_NOMEM;
-		goto done;
-	}
-
-	if ( fetch_reg_keys( key, subkeys ) == -1 )  {
-		result = WERR_BADFILE;
-		goto done;
-	}
-
-	TALLOC_FREE( subkeys );
-
-	if ( !regkey_access_check( key, access_desired, &key->access_granted,
-				   token ) ) {
-		result = WERR_ACCESS_DENIED;
-		goto done;
-	}
-
-	*pregkey = regkey;
-	result = WERR_OK;
-	
-done:
-	if ( !W_ERROR_IS_OK(result) ) {
-		TALLOC_FREE(regkey);
-	}
-
-	return result;
-}
-
-WERROR reg_openhive(TALLOC_CTX *mem_ctx, const char *hive,
-		    uint32 desired_access,
-		    const struct nt_user_token *token,
-		    struct registry_key **pkey)
-{
-	SMB_ASSERT(hive != NULL);
-	SMB_ASSERT(hive[0] != '\0');
-	SMB_ASSERT(strchr(hive, '\\') == NULL);
-
-	return regkey_open_onelevel(mem_ctx, NULL, hive, token, desired_access,
-				    pkey);
-}
-
-
-/**********************************************************************
- * The API functions
- **********************************************************************/
-
-WERROR reg_openkey(TALLOC_CTX *mem_ctx, struct registry_key *parent,
-		   const char *name, uint32 desired_access,
-		   struct registry_key **pkey)
-{
-	struct registry_key *direct_parent = parent;
-	WERROR err;
-	char *p, *path, *to_free;
-	size_t len;
-
-	if (!(path = SMB_STRDUP(name))) {
-		return WERR_NOMEM;
-	}
-	to_free = path;
-
-	len = strlen(path);
-
-	if ((len > 0) && (path[len-1] == '\\')) {
-		path[len-1] = '\0';
-	}
-
-	while ((p = strchr(path, '\\')) != NULL) {
-		char *name_component;
-		struct registry_key *tmp;
-
-		if (!(name_component = SMB_STRNDUP(path, (p - path)))) {
-			err = WERR_NOMEM;
-			goto error;
-		}
-
-		err = regkey_open_onelevel(mem_ctx, direct_parent,
-					   name_component, parent->token,
-					   SEC_RIGHTS_ENUM_SUBKEYS, &tmp);
-		SAFE_FREE(name_component);
-
-		if (!W_ERROR_IS_OK(err)) {
-			goto error;
-		}
-		if (direct_parent != parent) {
-			TALLOC_FREE(direct_parent);
-		}
-
-		direct_parent = tmp;
-		path = p+1;
-	}
-
-	err = regkey_open_onelevel(mem_ctx, direct_parent, path, parent->token,
-				   desired_access, pkey);
- error:
-	if (direct_parent != parent) {
-		TALLOC_FREE(direct_parent);
-	}
-	SAFE_FREE(to_free);
-	return err;
-}
-
-WERROR reg_enumkey(TALLOC_CTX *mem_ctx, struct registry_key *key,
-		   uint32 idx, char **name, NTTIME *last_write_time)
-{
-	WERROR err;
-
-	if (!(key->key->access_granted & SEC_RIGHTS_ENUM_SUBKEYS)) {
-		return WERR_ACCESS_DENIED;
-	}
-
-	if (!W_ERROR_IS_OK(err = fill_subkey_cache(key))) {
-		return err;
-	}
-
-	if (idx >= key->subkeys->num_subkeys) {
-		return WERR_NO_MORE_ITEMS;
-	}
-
-	if (!(*name = talloc_strdup(mem_ctx, key->subkeys->subkeys[idx]))) {
-		return WERR_NOMEM;
-	}
-
-	if (last_write_time) {
-		*last_write_time = 0;
-	}
-
-	return WERR_OK;
-}
-
-WERROR reg_enumvalue(TALLOC_CTX *mem_ctx, struct registry_key *key,
-		     uint32 idx, char **pname, struct registry_value **pval)
-{
-	struct registry_value *val;
-	WERROR err;
-
-	if (!(key->key->access_granted & SEC_RIGHTS_QUERY_VALUE)) {
-		return WERR_ACCESS_DENIED;
-	}
-
-	if (!(W_ERROR_IS_OK(err = fill_value_cache(key)))) {
-		return err;
-	}
-
-	if (idx >= key->values->num_values) {
-		return WERR_NO_MORE_ITEMS;
-	}
-
-	err = registry_pull_value(mem_ctx, &val,
-				  key->values->values[idx]->type,
-				  key->values->values[idx]->data_p,
-				  key->values->values[idx]->size,
-				  key->values->values[idx]->size);
-	if (!W_ERROR_IS_OK(err)) {
-		return err;
-	}
-
-	if (pname
-	    && !(*pname = talloc_strdup(
-			 mem_ctx, key->values->values[idx]->valuename))) {
-		SAFE_FREE(val);
-		return WERR_NOMEM;
-	}
-
-	*pval = val;
-	return WERR_OK;
-}
-
-WERROR reg_queryvalue(TALLOC_CTX *mem_ctx, struct registry_key *key,
-		      const char *name, struct registry_value **pval)
-{
-	WERROR err;
-	uint32 i;
-
-	if (!(key->key->access_granted & SEC_RIGHTS_QUERY_VALUE)) {
-		return WERR_ACCESS_DENIED;
-	}
-
-	if (!(W_ERROR_IS_OK(err = fill_value_cache(key)))) {
-		return err;
-	}
-
-	for (i=0; i<key->values->num_values; i++) {
-		if (strequal(key->values->values[i]->valuename, name)) {
-			return reg_enumvalue(mem_ctx, key, i, NULL, pval);
-		}
-	}
-
-	return WERR_BADFILE;
-}
-
-WERROR reg_queryinfokey(struct registry_key *key, uint32_t *num_subkeys,
-			uint32_t *max_subkeylen, uint32_t *max_subkeysize, 
-			uint32_t *num_values, uint32_t *max_valnamelen, 
-			uint32_t *max_valbufsize, uint32_t *secdescsize,
-			NTTIME *last_changed_time)
-{
-	uint32 i, max_size;
-	size_t max_len;
-	TALLOC_CTX *mem_ctx;
-	WERROR err;
-	struct security_descriptor *secdesc;
-
-	if (!(key->key->access_granted & SEC_RIGHTS_QUERY_VALUE)) {
-		return WERR_ACCESS_DENIED;
-	}
-
-	if (!W_ERROR_IS_OK(fill_subkey_cache(key)) ||
-	    !W_ERROR_IS_OK(fill_value_cache(key))) {
-		return WERR_BADFILE;
-	}
-
-	max_len = 0;
-	for (i=0; i<key->subkeys->num_subkeys; i++) {
-		max_len = MAX(max_len, strlen(key->subkeys->subkeys[i]));
-	}
-
-	*num_subkeys = key->subkeys->num_subkeys;
-	*max_subkeylen = max_len;
-	*max_subkeysize = 0;	/* Class length? */
-
-	max_len = 0;
-	max_size = 0;
-	for (i=0; i<key->values->num_values; i++) {
-		max_len = MAX(max_len,
-			      strlen(key->values->values[i]->valuename));
-		max_size = MAX(max_size, key->values->values[i]->size);
-	}
-
-	*num_values = key->values->num_values;
-	*max_valnamelen = max_len;
-	*max_valbufsize = max_size;
-
-	if (!(mem_ctx = talloc_new(key))) {
-		return WERR_NOMEM;
-	}
-
-	err = regkey_get_secdesc(mem_ctx, key->key, &secdesc);
-	if (!W_ERROR_IS_OK(err)) {
-		TALLOC_FREE(mem_ctx);
-		return err;
-	}
-
-	*secdescsize = ndr_size_security_descriptor(secdesc, 0);
-	TALLOC_FREE(mem_ctx);
-
-	*last_changed_time = 0;
-
-	return WERR_OK;
-}
-
-WERROR reg_createkey(TALLOC_CTX *ctx, struct registry_key *parent,
-		     const char *subkeypath, uint32 desired_access,
-		     struct registry_key **pkey,
-		     enum winreg_CreateAction *paction)
-{
-	struct registry_key *key = parent;
-	struct registry_key *create_parent;
-	TALLOC_CTX *mem_ctx;
-	char *path, *end;
-	WERROR err;
-
-	if (!(mem_ctx = talloc_new(ctx))) return WERR_NOMEM;
-
-	if (!(path = talloc_strdup(mem_ctx, subkeypath))) {
-		err = WERR_NOMEM;
-		goto done;
-	}
-
-	while ((end = strchr(path, '\\')) != NULL) {
-		struct registry_key *tmp;
-		enum winreg_CreateAction action;
-
-		*end = '\0';
-
-		err = reg_createkey(mem_ctx, key, path,
-				    SEC_RIGHTS_ENUM_SUBKEYS, &tmp, &action);
-		if (!W_ERROR_IS_OK(err)) {
-			goto done;
-		}
-
-		if (key != parent) {
-			TALLOC_FREE(key);
-		}
-
-		key = tmp;
-		path = end+1;
-	}
-
-	/*
-	 * At this point, "path" contains the one-element subkey of "key". We
-	 * can try to open it.
-	 */
-
-	err = reg_openkey(ctx, key, path, desired_access, pkey);
-	if (W_ERROR_IS_OK(err)) {
-		if (paction != NULL) {
-			*paction = REG_OPENED_EXISTING_KEY;
-		}
-		goto done;
-	}
-
-	if (!W_ERROR_EQUAL(err, WERR_BADFILE)) {
-		/*
-		 * Something but "notfound" has happened, so bail out
-		 */
-		goto done;
-	}
-
-	/*
-	 * We have to make a copy of the current key, as we opened it only
-	 * with ENUM_SUBKEY access.
-	 */
-
-	err = reg_openkey(mem_ctx, key, "", SEC_RIGHTS_CREATE_SUBKEY,
-			  &create_parent);
-	if (!W_ERROR_IS_OK(err)) {
-		goto done;
-	}
-
-	/*
-	 * Actually create the subkey
-	 */
-
-	err = fill_subkey_cache(create_parent);
-	if (!W_ERROR_IS_OK(err)) goto done;
-
-	err = regsubkey_ctr_addkey(create_parent->subkeys, path);
-	if (!W_ERROR_IS_OK(err)) goto done;
-
-	if (!store_reg_keys(create_parent->key, create_parent->subkeys)) {
-		TALLOC_FREE(create_parent->subkeys);
-		err = WERR_REG_IO_FAILURE;
-		goto done;
-	}
-
-	/*
-	 * Now open the newly created key
-	 */
-
-	err = reg_openkey(ctx, create_parent, path, desired_access, pkey);
-	if (W_ERROR_IS_OK(err) && (paction != NULL)) {
-		*paction = REG_CREATED_NEW_KEY;
-	}
-
- done:
-	TALLOC_FREE(mem_ctx);
-	return err;
-}
-
-WERROR reg_deletekey(struct registry_key *parent, const char *path)
-{
-	WERROR err;
-	TALLOC_CTX *mem_ctx;
-	char *name, *end;
-	int num_subkeys;
-	struct registry_key *tmp_key, *key;
-
-	if (!(mem_ctx = talloc_init("reg_createkey"))) return WERR_NOMEM;
-
-	if (!(name = talloc_strdup(mem_ctx, path))) {
-		err = WERR_NOMEM;
-		goto error;
-	}
-
-	/* check if the key has subkeys */
-	err = reg_openkey(mem_ctx, parent, name, REG_KEY_READ, &key);
-	if (!W_ERROR_IS_OK(err)) {
-		goto error;
-	}
-	if (!W_ERROR_IS_OK(err = fill_subkey_cache(key))) {
-		goto error;
-	}
-	if (key->subkeys->num_subkeys > 0) {
-		err = WERR_ACCESS_DENIED;
-		goto error;
-	}
-
-	/* no subkeys - proceed with delete */
-	if ((end = strrchr(name, '\\')) != NULL) {
-		*end = '\0';
-
-		err = reg_openkey(mem_ctx, parent, name,
-				  SEC_RIGHTS_CREATE_SUBKEY, &tmp_key);
-		if (!W_ERROR_IS_OK(err)) {
-			goto error;
-		}
-
-		parent = tmp_key;
-		name = end+1;
-	}
-
-	if (name[0] == '\0') {
-		err = WERR_INVALID_PARAM;
-		goto error;
-	}
-
-	if (!W_ERROR_IS_OK(err = fill_subkey_cache(parent))) {
-		goto error;
-	}
-
-	num_subkeys = parent->subkeys->num_subkeys;
-
-	if (regsubkey_ctr_delkey(parent->subkeys, name) == num_subkeys) {
-		err = WERR_BADFILE;
-		goto error;
-	}
-
-	if (!store_reg_keys(parent->key, parent->subkeys)) {
-		TALLOC_FREE(parent->subkeys);
-		err = WERR_REG_IO_FAILURE;
-		goto error;
-	}
-
-	regkey_set_secdesc(key->key, NULL);
-
-	err = WERR_OK;
-
- error:
-	TALLOC_FREE(mem_ctx);
-	return err;
-}
-
-WERROR reg_setvalue(struct registry_key *key, const char *name,
-		    const struct registry_value *val)
-{
-	WERROR err;
-	DATA_BLOB value_data;
-	int res;
-
-	if (!(key->key->access_granted & SEC_RIGHTS_SET_VALUE)) {
-		return WERR_ACCESS_DENIED;
-	}
-
-	if (!W_ERROR_IS_OK(err = fill_value_cache(key))) {
-		return err;
-	}
-
-	err = registry_push_value(key, val, &value_data);
-	if (!W_ERROR_IS_OK(err)) {
-		return err;
-	}
-
-	res = regval_ctr_addvalue(key->values, name, val->type,
-				  (char *)value_data.data, value_data.length);
-	TALLOC_FREE(value_data.data);
-
-	if (res == 0) {
-		TALLOC_FREE(key->values);
-		return WERR_NOMEM;
-	}
-
-	if (!store_reg_values(key->key, key->values)) {
-		TALLOC_FREE(key->values);
-		return WERR_REG_IO_FAILURE;
-	}
-
-	return WERR_OK;
-}
-
-static WERROR reg_value_exists(struct registry_key *key, const char *name)
-{
-	int i;
-
-	for (i=0; i<key->values->num_values; i++) {
-		if (strequal(key->values->values[i]->valuename, name)) {
-			return WERR_OK;
-		}
-	}
-
-	return WERR_BADFILE;
-}
-
-WERROR reg_deletevalue(struct registry_key *key, const char *name)
-{
-	WERROR err;
-
-	if (!(key->key->access_granted & SEC_RIGHTS_SET_VALUE)) {
-		return WERR_ACCESS_DENIED;
-	}
-
-	if (!W_ERROR_IS_OK(err = fill_value_cache(key))) {
-		return err;
-	}
-
-	err = reg_value_exists(key, name);
-	if (!W_ERROR_IS_OK(err)) {
-		return err;
-	}
-
-	regval_ctr_delvalue(key->values, name);
-
-	if (!store_reg_values(key->key, key->values)) {
-		TALLOC_FREE(key->values);
-		return WERR_REG_IO_FAILURE;
-	}
-
-	return WERR_OK;
-}
-
-WERROR reg_getkeysecurity(TALLOC_CTX *mem_ctx, struct registry_key *key,
-			  struct security_descriptor **psecdesc)
-{
-	return regkey_get_secdesc(mem_ctx, key->key, psecdesc);
-}
-
-WERROR reg_setkeysecurity(struct registry_key *key,
-			  struct security_descriptor *psecdesc)
-{
-	return regkey_set_secdesc(key->key, psecdesc);
-}
-
-WERROR reg_getversion(uint32_t *version)
-{
-	if (version == NULL) {
-		return WERR_INVALID_PARAM;
-	}
-
-	*version = 0x00000005; /* Windows 2000 registry API version */
-	return WERR_OK;
-}
-
-/*******************************************************************
- Note: topkeypat is the *full* path that this *key will be
- loaded into (including the name of the key)
- ********************************************************************/
-
-static WERROR reg_load_tree(REGF_FILE *regfile, const char *topkeypath,
-			    REGF_NK_REC *key)
-{
-	REGF_NK_REC *subkey;
-	REGISTRY_KEY registry_key;
-	REGVAL_CTR *values;
-	REGSUBKEY_CTR *subkeys;
-	int i;
-	char *path = NULL;
-	WERROR result = WERR_OK;
-
-	/* initialize the REGISTRY_KEY structure */
-
-	registry_key.ops = reghook_cache_find(topkeypath);
-	if (!registry_key.ops) {
-		DEBUG(0, ("reg_load_tree: Failed to assign  REGISTRY_OPS "
-			  "to [%s]\n", topkeypath));
-		return WERR_BADFILE;
-	}
-
-	registry_key.name = talloc_strdup(regfile->mem_ctx, topkeypath);
-	if (!registry_key.name) {
-		DEBUG(0, ("reg_load_tree: Talloc failed for reg_key.name!\n"));
-		return WERR_NOMEM;
-	}
-
-	/* now start parsing the values and subkeys */
-
-	subkeys = TALLOC_ZERO_P(regfile->mem_ctx, REGSUBKEY_CTR);
-	if (subkeys == NULL) {
-		return WERR_NOMEM;
-	}
-
-	values = TALLOC_ZERO_P(subkeys, REGVAL_CTR);
-	if (values == NULL) {
-		return WERR_NOMEM;
-	}
-
-	/* copy values into the REGVAL_CTR */
-
-	for (i=0; i<key->num_values; i++) {
-		regval_ctr_addvalue(values, key->values[i].valuename,
-				    key->values[i].type,
-				    (char*)key->values[i].data,
-				    (key->values[i].data_size & ~VK_DATA_IN_OFFSET));
-	}
-
-	/* copy subkeys into the REGSUBKEY_CTR */
-
-	key->subkey_index = 0;
-	while ((subkey = regfio_fetch_subkey( regfile, key ))) {
-		result = regsubkey_ctr_addkey(subkeys, subkey->keyname);
-		if (!W_ERROR_IS_OK(result)) {
-			TALLOC_FREE(subkeys);
-			return result;
-		}
-	}
-
-	/* write this key and values out */
-
-	if (!store_reg_values(&registry_key, values)
-	    || !store_reg_keys(&registry_key, subkeys))
-	{
-		DEBUG(0,("reg_load_tree: Failed to load %s!\n", topkeypath));
-		result = WERR_REG_IO_FAILURE;
-	}
-
-	TALLOC_FREE(subkeys);
-
-	if (!W_ERROR_IS_OK(result)) {
-		return result;
-	}
-
-	/* now continue to load each subkey registry tree */
-
-	key->subkey_index = 0;
-	while ((subkey = regfio_fetch_subkey(regfile, key))) {
-		path = talloc_asprintf(regfile->mem_ctx,
-				       "%s\\%s",
-				       topkeypath,
-				       subkey->keyname);
-		if (path == NULL) {
-			return WERR_NOMEM;
-		}
-		result = reg_load_tree(regfile, path, subkey);
-		if (!W_ERROR_IS_OK(result)) {
-			break;
-		}
-	}
-
-	return result;
-}
-
-/*******************************************************************
- ********************************************************************/
-
-static WERROR restore_registry_key(REGISTRY_KEY *krecord, const char *fname)
-{
-	REGF_FILE *regfile;
-	REGF_NK_REC *rootkey;
-	WERROR result;
-
-	/* open the registry file....fail if the file already exists */
-
-	regfile = regfio_open(fname, (O_RDONLY), 0);
-	if (regfile == NULL) {
-		DEBUG(0, ("restore_registry_key: failed to open \"%s\" (%s)\n",
-			  fname, strerror(errno)));
-		return ntstatus_to_werror(map_nt_error_from_unix(errno));
-	}
-
-	/* get the rootkey from the regf file and then load the tree
-	   via recursive calls */
-
-	if (!(rootkey = regfio_rootkey(regfile))) {
-		regfio_close(regfile);
-		return WERR_REG_FILE_INVALID;
-	}
-
-	result = reg_load_tree(regfile, krecord->name, rootkey);
-
-	/* cleanup */
-
-	regfio_close(regfile);
-
-	return result;
-}
-
-WERROR reg_restorekey(struct registry_key *key, const char *fname)
-{
-	return restore_registry_key(key->key, fname);
-}
-
-/********************************************************************
-********************************************************************/
-
-static WERROR reg_write_tree(REGF_FILE *regfile, const char *keypath,
-			     REGF_NK_REC *parent)
-{
-	REGF_NK_REC *key;
-	REGVAL_CTR *values;
-	REGSUBKEY_CTR *subkeys;
-	int i, num_subkeys;
-	char *key_tmp = NULL;
-	char *keyname, *parentpath;
-	char *subkeypath = NULL;
-	char *subkeyname;
-	REGISTRY_KEY registry_key;
-	WERROR result = WERR_OK;
-	SEC_DESC *sec_desc = NULL;
-
-	if (!regfile) {
-		return WERR_GENERAL_FAILURE;
-	}
-
-	if (!keypath) {
-		return WERR_OBJECT_PATH_INVALID;
-	}
-
-	/* split up the registry key path */
-
-	key_tmp = talloc_strdup(regfile->mem_ctx, keypath);
-	if (!key_tmp) {
-		return WERR_NOMEM;
-	}
-	if (!reg_split_key(key_tmp, &parentpath, &keyname)) {
-		return WERR_OBJECT_PATH_INVALID;
-	}
-
-	if (!keyname) {
-		keyname = parentpath;
-	}
-
-	/* we need a REGISTRY_KEY object here to enumerate subkeys and values */
-
-	ZERO_STRUCT(registry_key);
-
-	registry_key.name = talloc_strdup(regfile->mem_ctx, keypath);
-	if (registry_key.name == NULL) {
-		return WERR_NOMEM;
-	}
-
-	registry_key.ops = reghook_cache_find(registry_key.name);
-	if (registry_key.ops == NULL) {
-		return WERR_BADFILE;
-	}
-
-	/* lookup the values and subkeys */
-
-	subkeys = TALLOC_ZERO_P(regfile->mem_ctx, REGSUBKEY_CTR);
-	if (subkeys == NULL) {
-		return WERR_NOMEM;
-	}
-
-	values = TALLOC_ZERO_P(subkeys, REGVAL_CTR);
-	if (values == NULL) {
-		return WERR_NOMEM;
-	}
-
-	fetch_reg_keys(&registry_key, subkeys);
-	fetch_reg_values(&registry_key, values);
-
-	result = regkey_get_secdesc(regfile->mem_ctx, &registry_key, &sec_desc);
-	if (!W_ERROR_IS_OK(result)) {
-		goto done;
-	}
-
-	/* write out this key */
-
-	key = regfio_write_key(regfile, keyname, values, subkeys, sec_desc,
-			       parent);
-	if (key == NULL) {
-		result = WERR_CAN_NOT_COMPLETE;
-		goto done;
-	}
-
-	/* write each one of the subkeys out */
-
-	num_subkeys = regsubkey_ctr_numkeys(subkeys);
-	for (i=0; i<num_subkeys; i++) {
-		subkeyname = regsubkey_ctr_specific_key(subkeys, i);
-		subkeypath = talloc_asprintf(regfile->mem_ctx, "%s\\%s",
-					     keypath, subkeyname);
-		if (subkeypath == NULL) {
-			result = WERR_NOMEM;
-			goto done;
-		}
-		result = reg_write_tree(regfile, subkeypath, key);
-		if (!W_ERROR_IS_OK(result))
-			goto done;
-	}
-
-	DEBUG(6, ("reg_write_tree: wrote key [%s]\n", keypath));
-
-done:
-	TALLOC_FREE(subkeys);
-	TALLOC_FREE(registry_key.name);
-
-	return result;
-}
-
-static WERROR backup_registry_key(REGISTRY_KEY *krecord, const char *fname)
-{
-	REGF_FILE *regfile;
-	WERROR result;
-
-	/* open the registry file....fail if the file already exists */
-
-	regfile = regfio_open(fname, (O_RDWR|O_CREAT|O_EXCL),
-			      (S_IREAD|S_IWRITE));
-	if (regfile == NULL) {
-		DEBUG(0,("backup_registry_key: failed to open \"%s\" (%s)\n",
-			 fname, strerror(errno) ));
-		return ntstatus_to_werror(map_nt_error_from_unix(errno));
-	}
-
-	/* write the registry tree to the file  */
-
-	result = reg_write_tree(regfile, krecord->name, NULL);
-
-	/* cleanup */
-
-	regfio_close(regfile);
-
-	return result;
-}
-
-WERROR reg_savekey(struct registry_key *key, const char *fname)
-{
-	return backup_registry_key(key->key, fname);
-}
-
-/**********************************************************************
- * Higher level utility functions
- **********************************************************************/
-
-WERROR reg_deleteallvalues(struct registry_key *key)
-{
-	WERROR err;
-	int i;
-
-	if (!(key->key->access_granted & SEC_RIGHTS_SET_VALUE)) {
-		return WERR_ACCESS_DENIED;
-	}
-
-	if (!W_ERROR_IS_OK(err = fill_value_cache(key))) {
-		return err;
-	}
-
-	for (i=0; i<key->values->num_values; i++) {
-		regval_ctr_delvalue(key->values, key->values->values[i]->valuename);
-	}
-
-	if (!store_reg_values(key->key, key->values)) {
-		TALLOC_FREE(key->values);
-		return WERR_REG_IO_FAILURE;
-	}
-
-	return WERR_OK;
-}
-
-/*
- * Utility function to open a complete registry path including the hive prefix.
- */
-
-WERROR reg_open_path(TALLOC_CTX *mem_ctx, const char *orig_path,
-		     uint32 desired_access, const struct nt_user_token *token,
-		     struct registry_key **pkey)
-{
-	struct registry_key *hive, *key;
-	char *path, *p;
-	WERROR err;
-
-	if (!(path = SMB_STRDUP(orig_path))) {
-		return WERR_NOMEM;
-	}
-
-	p = strchr(path, '\\');
-
-	if ((p == NULL) || (p[1] == '\0')) {
-		/*
-		 * No key behind the hive, just return the hive
-		 */
-
-		err = reg_openhive(mem_ctx, path, desired_access, token,
-				   &hive);
-		if (!W_ERROR_IS_OK(err)) {
-			SAFE_FREE(path);
-			return err;
-		}
-		SAFE_FREE(path);
-		*pkey = hive;
-		return WERR_OK;
-	}
-
-	*p = '\0';
-
-	err = reg_openhive(mem_ctx, path, SEC_RIGHTS_ENUM_SUBKEYS, token,
-			   &hive);
-	if (!W_ERROR_IS_OK(err)) {
-		SAFE_FREE(path);
-		return err;
-	}
-
-	err = reg_openkey(mem_ctx, hive, p+1, desired_access, &key);
-
-	TALLOC_FREE(hive);
-	SAFE_FREE(path);
-
-	if (!W_ERROR_IS_OK(err)) {
-		return err;
-	}
-
-	*pkey = key;
-	return WERR_OK;
-}
-
-/*
- * Utility function to delete a registry key with all its subkeys.
- * Note that reg_deletekey returns ACCESS_DENIED when called on a
- * key that has subkeys.
- */
-static WERROR reg_deletekey_recursive_internal(TALLOC_CTX *ctx,
-					       struct registry_key *parent,
-					       const char *path,
-					       bool del_key)
-{
-	TALLOC_CTX *mem_ctx = NULL;
-	WERROR werr = WERR_OK;
-	struct registry_key *key;
-	char *subkey_name = NULL;
-
-	mem_ctx = talloc_new(ctx);
-	if (mem_ctx == NULL) {
-		werr = WERR_NOMEM;
-		goto done;
-	}
-
-	/* recurse through subkeys first */
-	werr = reg_openkey(mem_ctx, parent, path, REG_KEY_ALL, &key);
-	if (!W_ERROR_IS_OK(werr)) {
-		goto done;
-	}
-
-	while (W_ERROR_IS_OK(werr = reg_enumkey(mem_ctx, key, 0,
-						&subkey_name, NULL)))
-	{
-		werr = reg_deletekey_recursive_internal(mem_ctx, key,
-							subkey_name,
-							true);
-		if (!W_ERROR_IS_OK(werr)) {
-			goto done;
-		}
-	}
-	if (!W_ERROR_EQUAL(WERR_NO_MORE_ITEMS, werr)) {
-		DEBUG(1, ("reg_deletekey_recursive_internal: "
-			  "Error enumerating subkeys: %s\n",
-			  dos_errstr(werr)));
-		goto done;
-	}
-
-	werr = WERR_OK;
-
-	if (del_key) {
-		/* now delete the actual key */
-		werr = reg_deletekey(parent, path);
-	}
-
-done:
-	TALLOC_FREE(mem_ctx);
-	return werr;
-}
-
-WERROR reg_deletekey_recursive(TALLOC_CTX *ctx,
-			       struct registry_key *parent,
-			       const char *path)
-{
-	return reg_deletekey_recursive_internal(ctx, parent, path, true);
-}
-
-WERROR reg_deletesubkeys_recursive(TALLOC_CTX *ctx,
-				   struct registry_key *parent,
-				   const char *path)
-{
-	return reg_deletekey_recursive_internal(ctx, parent, path, false);
-}
-
-#if 0
-/* these two functions are unused. */
-
-/**
- * Utility function to create a registry key without opening the hive
- * before. Assumes the hive already exists.
- */
-
-WERROR reg_create_path(TALLOC_CTX *mem_ctx, const char *orig_path,
-		       uint32 desired_access,
-		       const struct nt_user_token *token,
-		       enum winreg_CreateAction *paction,
-		       struct registry_key **pkey)
-{
-	struct registry_key *hive;
-	char *path, *p;
-	WERROR err;
-
-	if (!(path = SMB_STRDUP(orig_path))) {
-		return WERR_NOMEM;
-	}
-
-	p = strchr(path, '\\');
-
-	if ((p == NULL) || (p[1] == '\0')) {
-		/*
-		 * No key behind the hive, just return the hive
-		 */
-
-		err = reg_openhive(mem_ctx, path, desired_access, token,
-				   &hive);
-		if (!W_ERROR_IS_OK(err)) {
-			SAFE_FREE(path);
-			return err;
-		}
-		SAFE_FREE(path);
-		*pkey = hive;
-		*paction = REG_OPENED_EXISTING_KEY;
-		return WERR_OK;
-	}
-
-	*p = '\0';
-
-	err = reg_openhive(mem_ctx, path,
-			   (strchr(p+1, '\\') != NULL) ?
-			   SEC_RIGHTS_ENUM_SUBKEYS : SEC_RIGHTS_CREATE_SUBKEY,
-			   token, &hive);
-	if (!W_ERROR_IS_OK(err)) {
-		SAFE_FREE(path);
-		return err;
-	}
-
-	err = reg_createkey(mem_ctx, hive, p+1, desired_access, pkey, paction);
-	SAFE_FREE(path);
-	TALLOC_FREE(hive);
-	return err;
-}
-
-/*
- * Utility function to create a registry key without opening the hive
- * before. Will not delete a hive.
- */
-
-WERROR reg_delete_path(const struct nt_user_token *token,
-		       const char *orig_path)
-{
-	struct registry_key *hive;
-	char *path, *p;
-	WERROR err;
-
-	if (!(path = SMB_STRDUP(orig_path))) {
-		return WERR_NOMEM;
-	}
-
-	p = strchr(path, '\\');
-
-	if ((p == NULL) || (p[1] == '\0')) {
-		SAFE_FREE(path);
-		return WERR_INVALID_PARAM;
-	}
-
-	*p = '\0';
-
-	err = reg_openhive(NULL, path,
-			   (strchr(p+1, '\\') != NULL) ?
-			   SEC_RIGHTS_ENUM_SUBKEYS : SEC_RIGHTS_CREATE_SUBKEY,
-			   token, &hive);
-	if (!W_ERROR_IS_OK(err)) {
-		SAFE_FREE(path);
-		return err;
-	}
-
-	err = reg_deletekey(hive, p+1);
-	SAFE_FREE(path);
-	TALLOC_FREE(hive);
-	return err;
-}
-#endif /* #if 0 */

Deleted: branches/samba/upstream/source/registry/reg_backend_current_version.c
===================================================================
--- branches/samba/upstream/source/registry/reg_backend_current_version.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/registry/reg_backend_current_version.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,81 +0,0 @@
-/*
- *  Unix SMB/CIFS implementation.
- *  Virtual Windows Registry Layer
- *  Copyright (C) Gerald Carter     2002-2005
- *  Copyright (C) Michael Adam      2008
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-/*
- * CurrentVersion registry backend.
- *
- * This is a virtual overlay, dynamically presenting version information.
- */
-
-#include "includes.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_REGISTRY
-
-extern REGISTRY_OPS regdb_ops;
-
-#define KEY_CURRENT_VERSION_NORM "HKLM/SOFTWARE/MICROSOFT/WINDOWS NT/CURRENTVERSION"
-
-static int current_version_fetch_values(const char *key, REGVAL_CTR *values)
-{
-	const char *sysroot_string = "c:\\Windows";
-	fstring sysversion;
-	fstring value;
-	uint32 value_length;
-	char *path = NULL;
-	TALLOC_CTX *ctx = talloc_tos();
-
-	path = talloc_strdup(ctx, key);
-	if (path == NULL) {
-		return -1;
-	}
-	path = normalize_reg_path(ctx, path);
-	if (path == NULL) {
-		return -1;
-	}
-
-	if (strncmp(path, KEY_CURRENT_VERSION_NORM, strlen(path)) != 0) {
-		return regdb_ops.fetch_values(key, values);
-	}
-
-	value_length = push_ucs2(value, value, sysroot_string, sizeof(value),
-				 STR_TERMINATE|STR_NOALIGN );
-	regval_ctr_addvalue(values, "SystemRoot", REG_SZ, value, value_length);
-
-	fstr_sprintf(sysversion, "%d.%d", lp_major_announce_version(),
-		     lp_minor_announce_version());
-	value_length = push_ucs2(value, value, sysversion, sizeof(value),
-				 STR_TERMINATE|STR_NOALIGN);
-	regval_ctr_addvalue(values, "CurrentVersion", REG_SZ, value,
-			    value_length);
-
-	return regval_ctr_numvals(values);
-}
-
-static int current_version_fetch_subkeys(const char *key,
-					 REGSUBKEY_CTR *subkey_ctr)
-{
-	return regdb_ops.fetch_subkeys(key, subkey_ctr);
-}
-
-REGISTRY_OPS current_version_reg_ops = {
-	.fetch_values = current_version_fetch_values,
-	.fetch_subkeys = current_version_fetch_subkeys,
-};

Deleted: branches/samba/upstream/source/registry/reg_backend_db.c
===================================================================
--- branches/samba/upstream/source/registry/reg_backend_db.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/registry/reg_backend_db.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,1061 +0,0 @@
-/* 
- *  Unix SMB/CIFS implementation.
- *  Virtual Windows Registry Layer
- *  Copyright (C) Gerald Carter                     2002-2005
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *  
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *  
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-/* Implementation of internal registry database functions. */
-
-#include "includes.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_REGISTRY
-
-static struct db_context *regdb = NULL;
-static int regdb_refcount;
-
-/* List the deepest path into the registry.  All part components will be created.*/
-
-/* If you want to have a part of the path controlled by the tdb and part by
-   a virtual registry db (e.g. printing), then you have to list the deepest path.
-   For example,"HKLM/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Print" 
-   allows the reg_db backend to handle everything up to 
-   "HKLM/SOFTWARE/Microsoft/Windows NT/CurrentVersion" and then we'll hook 
-   the reg_printing backend onto the last component of the path (see 
-   KEY_PRINTING_2K in include/rpc_reg.h)   --jerry */
-
-static const char *builtin_registry_paths[] = {
-	KEY_PRINTING_2K,
-	KEY_PRINTING_PORTS,
-	KEY_PRINTING,
-	KEY_SHARES,
-	KEY_EVENTLOG,
-	KEY_SMBCONF,
-	KEY_PERFLIB,
-	KEY_PERFLIB_009,
-	"HKLM\\SYSTEM\\CurrentControlSet\\Control\\Print\\Monitors",
-	KEY_PROD_OPTIONS,
-	"HKLM\\SYSTEM\\CurrentControlSet\\Control\\Terminal Server\\DefaultUserConfiguration",
-	KEY_TCPIP_PARAMS,
-	KEY_NETLOGON_PARAMS,
-	KEY_HKU,
-	KEY_HKCR,
-	KEY_HKPD,
-	KEY_HKPT,
-	 NULL };
-
-struct builtin_regkey_value {
-	const char *path;
-	const char *valuename;
-	uint32 type;
-	union {
-		const char *string;
-		uint32 dw_value;
-	} data;
-};
-
-static struct builtin_regkey_value builtin_registry_values[] = {
-	{ KEY_PRINTING_PORTS,
-		SAMBA_PRINTER_PORT_NAME, REG_SZ, { "" } },
-	{ KEY_PRINTING_2K,
-		"DefaultSpoolDirectory", REG_SZ, { "C:\\Windows\\System32\\Spool\\Printers" } },
-	{ KEY_EVENTLOG,
-		"DisplayName", REG_SZ, { "Event Log" } }, 
-	{ KEY_EVENTLOG,
-		"ErrorControl", REG_DWORD, { (char*)0x00000001 } },
-	{ NULL, NULL, 0, { NULL } }
-};
-
-/**
- * Initialize a key in the registry:
- * create each component key of the specified path.
- */
-static WERROR init_registry_key_internal(const char *add_path)
-{
-	WERROR werr;
-	TALLOC_CTX *frame = talloc_stackframe();
-	char *path = NULL;
-	char *base = NULL;
-	char *remaining = NULL;
-	char *keyname;
-	char *subkeyname;
-	REGSUBKEY_CTR *subkeys;
-	const char *p, *p2;
-
-	DEBUG(6, ("init_registry_key: Adding [%s]\n", add_path));
-
-	path = talloc_strdup(frame, add_path);
-	base = talloc_strdup(frame, "");
-	if (!path || !base) {
-		werr = WERR_NOMEM;
-		goto fail;
-	}
-	p = path;
-
-	while (next_token_talloc(frame, &p, &keyname, "\\")) {
-
-		/* build up the registry path from the components */
-
-		if (*base) {
-			base = talloc_asprintf(frame, "%s\\", base);
-			if (!base) {
-				werr = WERR_NOMEM;
-				goto fail;
-			}
-		}
-		base = talloc_asprintf_append(base, "%s", keyname);
-		if (!base) {
-			werr = WERR_NOMEM;
-			goto fail;
-		}
-
-		/* get the immediate subkeyname (if we have one ) */
-
-		subkeyname = talloc_strdup(frame, "");
-		if (!subkeyname) {
-			werr = WERR_NOMEM;
-			goto fail;
-		}
-		if (*p) {
-			remaining = talloc_strdup(frame, p);
-			if (!remaining) {
-				werr = WERR_NOMEM;
-				goto fail;
-			}
-			p2 = remaining;
-
-			if (!next_token_talloc(frame, &p2,
-						&subkeyname, "\\"))
-			{
-				subkeyname = talloc_strdup(frame,p2);
-				if (!subkeyname) {
-					werr = WERR_NOMEM;
-					goto fail;
-				}
-			}
-		}
-
-		DEBUG(10,("init_registry_key: Storing key [%s] with "
-			  "subkey [%s]\n", base,
-			  *subkeyname ? subkeyname : "NULL"));
-
-		/* we don't really care if the lookup succeeds or not
-		 * since we are about to update the record.
-		 * We just want any subkeys already present */
-
-		if (!(subkeys = TALLOC_ZERO_P(frame, REGSUBKEY_CTR))) {
-			DEBUG(0,("talloc() failure!\n"));
-			werr = WERR_NOMEM;
-			goto fail;
-		}
-
-		regdb_fetch_keys(base, subkeys);
-		if (*subkeyname) {
-			werr = regsubkey_ctr_addkey(subkeys, subkeyname);
-			if (!W_ERROR_IS_OK(werr)) {
-				goto fail;
-			}
-		}
-		if (!regdb_store_keys( base, subkeys)) {
-			werr = WERR_CAN_NOT_COMPLETE;
-			goto fail;
-		}
-	}
-
-	werr = WERR_OK;
-
-fail:
-	TALLOC_FREE(frame);
-	return werr;
-}
-
-/**
- * Initialize a key in the registry:
- * create each component key of the specified path,
- * wrapped in one db transaction.
- */
-WERROR init_registry_key(const char *add_path)
-{
-	WERROR werr;
-
-	if (regdb->transaction_start(regdb) != 0) {
-		DEBUG(0, ("init_registry_key: transaction_start failed\n"));
-		return WERR_REG_IO_FAILURE;
-	}
-
-	werr = init_registry_key_internal(add_path);
-	if (!W_ERROR_IS_OK(werr)) {
-		goto fail;
-	}
-
-	if (regdb->transaction_commit(regdb) != 0) {
-		DEBUG(0, ("init_registry_key: Could not commit transaction\n"));
-		return WERR_REG_IO_FAILURE;
-	}
-
-	return WERR_OK;
-
-fail:
-	if (regdb->transaction_cancel(regdb) != 0) {
-		smb_panic("init_registry_key: transaction_cancel failed\n");
-	}
-
-	return werr;
-}
-
-/***********************************************************************
- Open the registry data in the tdb
- ***********************************************************************/
-
-WERROR init_registry_data(void)
-{
-	WERROR werr;
-	TALLOC_CTX *frame = NULL;
-	REGVAL_CTR *values;
-	int i;
-	UNISTR2 data;
-
-	/*
-	 * There are potentially quite a few store operations which are all
-	 * indiviually wrapped in tdb transactions. Wrapping them in a single
-	 * transaction gives just a single transaction_commit() to actually do
-	 * its fsync()s. See tdb/common/transaction.c for info about nested
-	 * transaction behaviour.
-	 */
-
-	if (regdb->transaction_start(regdb) != 0) {
-		DEBUG(0, ("init_registry_data: tdb_transaction_start "
-			  "failed\n"));
-		return WERR_REG_IO_FAILURE;
-	}
-
-	/* loop over all of the predefined paths and add each component */
-
-	for (i=0; builtin_registry_paths[i] != NULL; i++) {
-		werr = init_registry_key_internal(builtin_registry_paths[i]);
-		if (!W_ERROR_IS_OK(werr)) {
-			goto fail;
-		}
-	}
-
-	/* loop over all of the predefined values and add each component */
-
-	frame = talloc_stackframe();
-
-	for (i=0; builtin_registry_values[i].path != NULL; i++) {
-
-		values = TALLOC_ZERO_P(frame, REGVAL_CTR);
-		if (values == NULL) {
-			werr = WERR_NOMEM;
-			goto fail;
-		}
-
-		regdb_fetch_values(builtin_registry_values[i].path, values);
-
-		/* preserve existing values across restarts. Only add new ones */
-
-		if (!regval_ctr_key_exists(values,
-					builtin_registry_values[i].valuename))
-		{
-			switch(builtin_registry_values[i].type) {
-			case REG_DWORD:
-				regval_ctr_addvalue(values,
-					builtin_registry_values[i].valuename,
-					REG_DWORD,
-					(char*)&builtin_registry_values[i].data.dw_value,
-					sizeof(uint32));
-				break;
-
-			case REG_SZ:
-				init_unistr2(&data,
-					builtin_registry_values[i].data.string,
-					UNI_STR_TERMINATE);
-				regval_ctr_addvalue(values,
-					builtin_registry_values[i].valuename,
-					REG_SZ,
-					(char*)data.buffer,
-					data.uni_str_len*sizeof(uint16));
-				break;
-
-			default:
-				DEBUG(0, ("init_registry_data: invalid value "
-					  "type in builtin_registry_values "
-					  "[%d]\n",
-					  builtin_registry_values[i].type));
-			}
-			regdb_store_values(builtin_registry_values[i].path,
-					   values);
-		}
-		TALLOC_FREE(values);
-	}
-
-	TALLOC_FREE(frame);
-
-	if (regdb->transaction_commit(regdb) != 0) {
-		DEBUG(0, ("init_registry_data: Could not commit "
-			  "transaction\n"));
-		return WERR_REG_IO_FAILURE;
-	}
-
-	return WERR_OK;
-
- fail:
-
-	TALLOC_FREE(frame);
-
-	if (regdb->transaction_cancel(regdb) != 0) {
-		smb_panic("init_registry_data: tdb_transaction_cancel "
-			  "failed\n");
-	}
-
-	return werr;
-}
-
-/***********************************************************************
- Open the registry database
- ***********************************************************************/
- 
-WERROR regdb_init(void)
-{
-	const char *vstring = "INFO/version";
-	uint32 vers_id;
-	WERROR werr;
-
-	if (regdb) {
-		DEBUG(10, ("regdb_init: incrementing refcount (%d)\n",
-			  regdb_refcount));
-		regdb_refcount++;
-		return WERR_OK;
-	}
-
-	regdb = db_open_trans(NULL, state_path("registry.tdb"), 0,
-			      REG_TDB_FLAGS, O_RDWR, 0600);
-	if (!regdb) {
-		regdb = db_open_trans(NULL, state_path("registry.tdb"), 0,
-				      REG_TDB_FLAGS, O_RDWR|O_CREAT, 0600);
-		if (!regdb) {
-			werr = ntstatus_to_werror(map_nt_error_from_unix(errno));
-			DEBUG(0,("regdb_init: Failed to open registry %s (%s)\n",
-				state_path("registry.tdb"), strerror(errno) ));
-			return werr;
-		}
-		
-		DEBUG(10,("regdb_init: Successfully created registry tdb\n"));
-	}
-
-	regdb_refcount = 1;
-
-	vers_id = dbwrap_fetch_int32(regdb, vstring);
-
-	if ( vers_id != REGVER_V1 ) {
-		NTSTATUS status;
-		/* any upgrade code here if needed */
-		DEBUG(10, ("regdb_init: got %s = %d != %d\n", vstring,
-			   vers_id, REGVER_V1));
-		status = dbwrap_trans_store_int32(regdb, vstring, REGVER_V1);
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(0, ("regdb_init: error storing %s = %d: %s\n",
-				  vstring, REGVER_V1, nt_errstr(status)));
-			return ntstatus_to_werror(status);
-		} else {
-			DEBUG(10, ("regdb_init: stored %s = %d\n",
-				  vstring, REGVER_V1));
-		}
-	}
-
-	return WERR_OK;
-}
-
-/***********************************************************************
- Open the registry.  Must already have been initialized by regdb_init()
- ***********************************************************************/
-
-WERROR regdb_open( void )
-{
-	WERROR result = WERR_OK;
-
-	if ( regdb ) {
-		DEBUG(10,("regdb_open: incrementing refcount (%d)\n", regdb_refcount));
-		regdb_refcount++;
-		return WERR_OK;
-	}
-	
-	become_root();
-
-	regdb = db_open_trans(NULL, state_path("registry.tdb"), 0,
-			      REG_TDB_FLAGS, O_RDWR, 0600);
-	if ( !regdb ) {
-		result = ntstatus_to_werror( map_nt_error_from_unix( errno ) );
-		DEBUG(0,("regdb_open: Failed to open %s! (%s)\n", 
-			state_path("registry.tdb"), strerror(errno) ));
-	}
-
-	unbecome_root();
-
-	regdb_refcount = 1;
-	DEBUG(10,("regdb_open: refcount reset (%d)\n", regdb_refcount));
-
-	return result;
-}
-
-/***********************************************************************
- ***********************************************************************/
-
-int regdb_close( void )
-{
-	if (regdb_refcount == 0) {
-		return 0;
-	}
-
-	regdb_refcount--;
-
-	DEBUG(10,("regdb_close: decrementing refcount (%d)\n", regdb_refcount));
-
-	if ( regdb_refcount > 0 )
-		return 0;
-
-	SMB_ASSERT( regdb_refcount >= 0 );
-
-	TALLOC_FREE(regdb);
-	return 0;
-}
-
-/***********************************************************************
- return the tdb sequence number of the registry tdb.
- this is an indicator for the content of the registry
- having changed. it will change upon regdb_init, too, though.
- ***********************************************************************/
-int regdb_get_seqnum(void)
-{
-	return regdb->get_seqnum(regdb);
-}
-
-/***********************************************************************
- Add subkey strings to the registry tdb under a defined key
- fmt is the same format as tdb_pack except this function only supports
- fstrings
- ***********************************************************************/
-
-static bool regdb_store_keys_internal(const char *key, REGSUBKEY_CTR *ctr)
-{
-	TDB_DATA dbuf;
-	uint8 *buffer = NULL;
-	int i = 0;
-	uint32 len, buflen;
-	bool ret = true;
-	uint32 num_subkeys = regsubkey_ctr_numkeys(ctr);
-	char *keyname = NULL;
-	TALLOC_CTX *ctx = talloc_stackframe();
-	NTSTATUS status;
-
-	if (!key) {
-		return false;
-	}
-
-	keyname = talloc_strdup(ctx, key);
-	if (!keyname) {
-		return false;
-	}
-	keyname = normalize_reg_path(ctx, keyname);
-
-	/* allocate some initial memory */
-
-	buffer = (uint8 *)SMB_MALLOC(1024);
-	if (buffer == NULL) {
-		return false;
-	}
-	buflen = 1024;
-	len = 0;
-
-	/* store the number of subkeys */
-
-	len += tdb_pack(buffer+len, buflen-len, "d", num_subkeys);
-
-	/* pack all the strings */
-
-	for (i=0; i<num_subkeys; i++) {
-		len += tdb_pack(buffer+len, buflen-len, "f",
-				regsubkey_ctr_specific_key(ctr, i));
-		if (len > buflen) {
-			/* allocate some extra space */
-			buffer = (uint8 *)SMB_REALLOC(buffer, len*2);
-			if(buffer == NULL) {
-				DEBUG(0, ("regdb_store_keys: Failed to realloc "
-					  "memory of size [%d]\n", len*2));
-				ret = false;
-				goto done;
-			}
-			buflen = len*2;
-			len = tdb_pack(buffer+len, buflen-len, "f",
-				       regsubkey_ctr_specific_key(ctr, i));
-		}
-	}
-
-	/* finally write out the data */
-
-	dbuf.dptr = buffer;
-	dbuf.dsize = len;
-	status = dbwrap_store_bystring(regdb, keyname, dbuf, TDB_REPLACE);
-	if (!NT_STATUS_IS_OK(status)) {
-		ret = false;
-		goto done;
-	}
-
-done:
-	TALLOC_FREE(ctx);
-	SAFE_FREE(buffer);
-	return ret;
-}
-
-/***********************************************************************
- Store the new subkey record and create any child key records that
- do not currently exist
- ***********************************************************************/
-
-bool regdb_store_keys(const char *key, REGSUBKEY_CTR *ctr)
-{
-	int num_subkeys, i;
-	char *path = NULL;
-	REGSUBKEY_CTR *subkeys = NULL, *old_subkeys = NULL;
-	char *oldkeyname = NULL;
-	TALLOC_CTX *ctx = talloc_stackframe();
-	NTSTATUS status;
-
-	/*
-	 * fetch a list of the old subkeys so we can determine if anything has
-	 * changed
-	 */
-
-	if (!(old_subkeys = TALLOC_ZERO_P(ctx, REGSUBKEY_CTR))) {
-		DEBUG(0,("regdb_store_keys: talloc() failure!\n"));
-		return false;
-	}
-
-	regdb_fetch_keys(key, old_subkeys);
-
-	if ((ctr->num_subkeys && old_subkeys->num_subkeys) &&
-	    (ctr->num_subkeys == old_subkeys->num_subkeys)) {
-
-		for (i = 0; i<ctr->num_subkeys; i++) {
-			if (strcmp(ctr->subkeys[i],
-				   old_subkeys->subkeys[i]) != 0) {
-				break;
-			}
-		}
-		if (i == ctr->num_subkeys) {
-			/*
-			 * Nothing changed, no point to even start a tdb
-			 * transaction
-			 */
-			TALLOC_FREE(old_subkeys);
-			return true;
-		}
-	}
-
-	TALLOC_FREE(old_subkeys);
-
-	if (regdb->transaction_start(regdb) != 0) {
-		DEBUG(0, ("regdb_store_keys: transaction_start failed\n"));
-		goto fail;
-	}
-
-	/*
-	 * Re-fetch the old keys inside the transaction
-	 */
-
-	if (!(old_subkeys = TALLOC_ZERO_P(ctx, REGSUBKEY_CTR))) {
-		DEBUG(0,("regdb_store_keys: talloc() failure!\n"));
-		goto cancel;
-	}
-
-	regdb_fetch_keys(key, old_subkeys);
-
-	/* store the subkey list for the parent */
-
-	if (!regdb_store_keys_internal(key, ctr) ) {
-		DEBUG(0,("regdb_store_keys: Failed to store new subkey list "
-			 "for parent [%s]\n", key));
-		goto cancel;
-	}
-
-	/* now delete removed keys */
-
-	num_subkeys = regsubkey_ctr_numkeys(old_subkeys);
-	for (i=0; i<num_subkeys; i++) {
-		oldkeyname = regsubkey_ctr_specific_key(old_subkeys, i);
-
-		if (regsubkey_ctr_key_exists(ctr, oldkeyname)) {
-			/*
-			 * It's still around, don't delete
-			 */
-
-			continue;
-		}
-
-		path = talloc_asprintf(ctx, "%s/%s", key, oldkeyname);
-		if (!path) {
-			goto cancel;
-		}
-		path = normalize_reg_path(ctx, path);
-		if (!path) {
-			goto cancel;
-		}
-		status = dbwrap_delete_bystring(regdb, path);
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(1, ("Deleting %s failed\n", path));
-			goto cancel;
-		}
-
-		TALLOC_FREE(path);
-		path = talloc_asprintf(ctx, "%s/%s/%s",
-				REG_VALUE_PREFIX,
-				key,
-				oldkeyname );
-		if (!path) {
-			goto cancel;
-		}
-		path = normalize_reg_path(ctx, path);
-		if (!path) {
-			goto cancel;
-		}
-
-		/*
-		 * Ignore errors here, we might have no values around
-		 */
-		dbwrap_delete_bystring(regdb, path);
-		TALLOC_FREE(path);
-	}
-
-	TALLOC_FREE(old_subkeys);
-
-	/* now create records for any subkeys that don't already exist */
-
-	num_subkeys = regsubkey_ctr_numkeys(ctr);
-
-	if (num_subkeys == 0) {
-		if (!(subkeys = TALLOC_ZERO_P(ctx, REGSUBKEY_CTR)) ) {
-			DEBUG(0,("regdb_store_keys: talloc() failure!\n"));
-			goto cancel;
-		}
-
-		if (!regdb_store_keys_internal(key, subkeys)) {
-			DEBUG(0,("regdb_store_keys: Failed to store "
-				 "new record for key [%s]\n", key));
-			goto cancel;
-		}
-		TALLOC_FREE(subkeys);
-
-	}
-
-	for (i=0; i<num_subkeys; i++) {
-		path = talloc_asprintf(ctx, "%s/%s",
-					key,
-					regsubkey_ctr_specific_key(ctr, i));
-		if (!path) {
-			goto cancel;
-		}
-		if (!(subkeys = TALLOC_ZERO_P(ctx, REGSUBKEY_CTR)) ) {
-			DEBUG(0,("regdb_store_keys: talloc() failure!\n"));
-			goto cancel;
-		}
-
-		if (regdb_fetch_keys( path, subkeys ) == -1) {
-			/* create a record with 0 subkeys */
-			if (!regdb_store_keys_internal(path, subkeys)) {
-				DEBUG(0,("regdb_store_keys: Failed to store "
-					 "new record for key [%s]\n", path));
-				goto cancel;
-			}
-		}
-
-		TALLOC_FREE(subkeys);
-		TALLOC_FREE(path);
-	}
-
-	if (regdb->transaction_commit(regdb) != 0) {
-		DEBUG(0, ("regdb_store_keys: Could not commit transaction\n"));
-		goto fail;
-	}
-
-	TALLOC_FREE(ctx);
-	return true;
-
-cancel:
-	if (regdb->transaction_cancel(regdb) != 0) {
-		smb_panic("regdb_store_keys: transaction_cancel failed\n");
-	}
-
-fail:
-	TALLOC_FREE(ctx);
-
-	return false;
-}
-
-
-/***********************************************************************
- Retrieve an array of strings containing subkeys.  Memory should be
- released by the caller.
- ***********************************************************************/
-
-int regdb_fetch_keys(const char *key, REGSUBKEY_CTR *ctr)
-{
-	WERROR werr;
-	char *path = NULL;
-	uint32 num_items;
-	uint8 *buf;
-	uint32 buflen, len;
-	int i;
-	fstring subkeyname;
-	int ret = -1;
-	int dbret = -1;
-	TALLOC_CTX *frame = talloc_stackframe();
-	TDB_DATA value;
-
-	DEBUG(11,("regdb_fetch_keys: Enter key => [%s]\n", key ? key : "NULL"));
-
-	path = talloc_strdup(frame, key);
-	if (!path) {
-		goto fail;
-	}
-
-	/* convert to key format */
-	path = talloc_string_sub(frame, path, "\\", "/");
-	if (!path) {
-		goto fail;
-	}
-	strupper_m(path);
-
-	ctr->seqnum = regdb_get_seqnum();
-
-	dbret = regdb->fetch(regdb, frame, string_term_tdb_data(path), &value);
-	if (dbret != 0) {
-		goto fail;
-	}
-
-	buf = value.dptr;
-	buflen = value.dsize;
-
-	if ( !buf ) {
-		DEBUG(5,("regdb_fetch_keys: tdb lookup failed to locate key [%s]\n", key));
-		goto fail;
-	}
-
-	len = tdb_unpack( buf, buflen, "d", &num_items);
-
-	for (i=0; i<num_items; i++) {
-		len += tdb_unpack(buf+len, buflen-len, "f", subkeyname);
-		werr = regsubkey_ctr_addkey(ctr, subkeyname);
-		if (!W_ERROR_IS_OK(werr)) {
-			DEBUG(5, ("regdb_fetch_keys: regsubkey_ctr_addkey "
-				  "failed: %s\n", dos_errstr(werr)));
-			goto fail;
-		}
-	}
-
-	DEBUG(11,("regdb_fetch_keys: Exit [%d] items\n", num_items));
-
-	ret = num_items;
- fail:
-	TALLOC_FREE(frame);
-	return ret;
-}
-
-/****************************************************************************
- Unpack a list of registry values frem the TDB
- ***************************************************************************/
-
-static int regdb_unpack_values(REGVAL_CTR *values, uint8 *buf, int buflen)
-{
-	int 		len = 0;
-	uint32		type;
-	fstring valuename;
-	uint32		size;
-	uint8		*data_p;
-	uint32 		num_values = 0;
-	int 		i;
-
-	/* loop and unpack the rest of the registry values */
-
-	len += tdb_unpack(buf+len, buflen-len, "d", &num_values);
-
-	for ( i=0; i<num_values; i++ ) {
-		/* unpack the next regval */
-
-		type = REG_NONE;
-		size = 0;
-		data_p = NULL;
-		valuename[0] = '\0';
-		len += tdb_unpack(buf+len, buflen-len, "fdB",
-				  valuename,
-				  &type,
-				  &size,
-				  &data_p);
-
-		/* add the new value. Paranoid protective code -- make sure data_p is valid */
-
-		if (*valuename && size && data_p) {
-			regval_ctr_addvalue(values, valuename, type,
-					(const char *)data_p, size);
-		}
-		SAFE_FREE(data_p); /* 'B' option to tdb_unpack does a malloc() */
-
-		DEBUG(8,("specific: [%s], len: %d\n", valuename, size));
-	}
-
-	return len;
-}
-
-/****************************************************************************
- Pack all values in all printer keys
- ***************************************************************************/
-
-static int regdb_pack_values(REGVAL_CTR *values, uint8 *buf, int buflen)
-{
-	int 		len = 0;
-	int 		i;
-	REGISTRY_VALUE	*val;
-	int		num_values;
-
-	if ( !values )
-		return 0;
-
-	num_values = regval_ctr_numvals( values );
-
-	/* pack the number of values first */
-
-	len += tdb_pack( buf+len, buflen-len, "d", num_values );
-
-	/* loop over all values */
-
-	for ( i=0; i<num_values; i++ ) {
-		val = regval_ctr_specific_value( values, i );
-		len += tdb_pack(buf+len, buflen-len, "fdB",
-				regval_name(val),
-				regval_type(val),
-				regval_size(val),
-				regval_data_p(val) );
-	}
-
-	return len;
-}
-
-/***********************************************************************
- Retrieve an array of strings containing subkeys.  Memory should be
- released by the caller.
- ***********************************************************************/
-
-int regdb_fetch_values( const char* key, REGVAL_CTR *values )
-{
-	char *keystr = NULL;
-	TALLOC_CTX *ctx = talloc_stackframe();
-	int ret = 0;
-	int dbret = -1;
-	TDB_DATA value;
-
-	DEBUG(10,("regdb_fetch_values: Looking for value of key [%s] \n", key));
-
-	keystr = talloc_asprintf(ctx, "%s/%s", REG_VALUE_PREFIX, key);
-	if (!keystr) {
-		return 0;
-	}
-	keystr = normalize_reg_path(ctx, keystr);
-	if (!keystr) {
-		goto done;
-	}
-
-	values->seqnum = regdb_get_seqnum();
-
-	dbret = regdb->fetch(regdb, ctx, string_term_tdb_data(keystr), &value);
-	if (dbret != 0) {
-		goto done;
-	}
-
-	if (!value.dptr) {
-		/* all keys have zero values by default */
-		goto done;
-	}
-
-	regdb_unpack_values(values, value.dptr, value.dsize);
-	ret = regval_ctr_numvals(values);
-
-done:
-	TALLOC_FREE(ctx);
-	return ret;
-}
-
-bool regdb_store_values( const char *key, REGVAL_CTR *values )
-{
-	TDB_DATA old_data, data;
-	char *keystr = NULL;
-	TALLOC_CTX *ctx = talloc_stackframe();
-	int len;
-	NTSTATUS status;
-	bool result = false;
-
-	DEBUG(10,("regdb_store_values: Looking for value of key [%s] \n", key));
-
-	ZERO_STRUCT(data);
-
-	len = regdb_pack_values(values, data.dptr, data.dsize);
-	if (len <= 0) {
-		DEBUG(0,("regdb_store_values: unable to pack values. len <= 0\n"));
-		goto done;
-	}
-
-	data.dptr = TALLOC_ARRAY(ctx, uint8, len);
-	data.dsize = len;
-
-	len = regdb_pack_values(values, data.dptr, data.dsize);
-
-	SMB_ASSERT( len == data.dsize );
-
-	keystr = talloc_asprintf(ctx, "%s/%s", REG_VALUE_PREFIX, key );
-	if (!keystr) {
-		goto done;
-	}
-	keystr = normalize_reg_path(ctx, keystr);
-	if (!keystr) {
-		goto done;
-	}
-
-	old_data = dbwrap_fetch_bystring(regdb, ctx, keystr);
-
-	if ((old_data.dptr != NULL)
-	    && (old_data.dsize == data.dsize)
-	    && (memcmp(old_data.dptr, data.dptr, data.dsize) == 0))
-	{
-		result = true;
-		goto done;
-	}
-
-	status = dbwrap_trans_store(regdb, string_term_tdb_data(keystr), data,
-				    TDB_REPLACE);
-
-	result = NT_STATUS_IS_OK(status);
-
-done:
-	TALLOC_FREE(ctx);
-	return result;
-}
-
-static WERROR regdb_get_secdesc(TALLOC_CTX *mem_ctx, const char *key,
-				struct security_descriptor **psecdesc)
-{
-	char *tdbkey;
-	TDB_DATA data;
-	NTSTATUS status;
-	TALLOC_CTX *tmp_ctx = talloc_stackframe();
-	WERROR err = WERR_OK;
-
-	DEBUG(10, ("regdb_get_secdesc: Getting secdesc of key [%s]\n", key));
-
-	tdbkey = talloc_asprintf(tmp_ctx, "%s/%s", REG_SECDESC_PREFIX, key);
-	if (tdbkey == NULL) {
-		err = WERR_NOMEM;
-		goto done;
-	}
-	normalize_dbkey(tdbkey);
-
-	data = dbwrap_fetch_bystring(regdb, tmp_ctx, tdbkey);
-	if (data.dptr == NULL) {
-		err = WERR_BADFILE;
-		goto done;
-	}
-
-	status = unmarshall_sec_desc(mem_ctx, (uint8 *)data.dptr, data.dsize,
-				     psecdesc);
-
-	if (NT_STATUS_EQUAL(status, NT_STATUS_NO_MEMORY)) {
-		err = WERR_NOMEM;
-	} else if (!NT_STATUS_IS_OK(status)) {
-		err = WERR_REG_CORRUPT;
-	}
-
-done:
-	TALLOC_FREE(tmp_ctx);
-	return err;
-}
-
-static WERROR regdb_set_secdesc(const char *key,
-				struct security_descriptor *secdesc)
-{
-	TALLOC_CTX *mem_ctx = talloc_stackframe();
-	char *tdbkey;
-	NTSTATUS status;
-	WERROR err = WERR_NOMEM;
-	TDB_DATA tdbdata;
-
-	tdbkey = talloc_asprintf(mem_ctx, "%s/%s", REG_SECDESC_PREFIX, key);
-	if (tdbkey == NULL) {
-		goto done;
-	}
-	normalize_dbkey(tdbkey);
-
-	if (secdesc == NULL) {
-		/* assuming a delete */
-		status = dbwrap_trans_delete(regdb,
-					     string_term_tdb_data(tdbkey));
-		if (NT_STATUS_IS_OK(status)) {
-			err = WERR_OK;
-		} else {
-			err = ntstatus_to_werror(status);
-		}
-		goto done;
-	}
-
-	err = ntstatus_to_werror(marshall_sec_desc(mem_ctx, secdesc,
-						   &tdbdata.dptr,
-						   &tdbdata.dsize));
-	if (!W_ERROR_IS_OK(err)) {
-		goto done;
-	}
-
-	status = dbwrap_trans_store(regdb, string_term_tdb_data(tdbkey),
-				    tdbdata, 0);
-	if (!NT_STATUS_IS_OK(status)) {
-		err = ntstatus_to_werror(status);
-		goto done;
-	}
-
- done:
-	TALLOC_FREE(mem_ctx);
-	return err;
-}
-
-bool regdb_subkeys_need_update(REGSUBKEY_CTR *subkeys)
-{
-	return (regdb_get_seqnum() != subkeys->seqnum);
-}
-
-bool regdb_values_need_update(REGVAL_CTR *values)
-{
-	return (regdb_get_seqnum() != values->seqnum);
-}
-
-/* 
- * Table of function pointers for default access
- */
- 
-REGISTRY_OPS regdb_ops = {
-	.fetch_subkeys = regdb_fetch_keys,
-	.fetch_values = regdb_fetch_values,
-	.store_subkeys = regdb_store_keys,
-	.store_values = regdb_store_values,
-	.get_secdesc = regdb_get_secdesc,
-	.set_secdesc = regdb_set_secdesc,
-	.subkeys_need_update = regdb_subkeys_need_update,
-	.values_need_update = regdb_values_need_update
-};

Deleted: branches/samba/upstream/source/registry/reg_backend_hkpt_params.c
===================================================================
--- branches/samba/upstream/source/registry/reg_backend_hkpt_params.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/registry/reg_backend_hkpt_params.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,70 +0,0 @@
-/*
- *  Unix SMB/CIFS implementation.
- *  Virtual Windows Registry Layer
- *  Copyright (C) Gerald Carter     2002-2005
- *  Copyright (C) Michael Adam      2008
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-/*
- * HKPT parameters registry backend.
- *
- * This replaces the former dynamic hkpt parameters overlay.
- */
-
-#include "includes.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_REGISTRY
-
-extern REGISTRY_OPS regdb_ops;
-
-static int hkpt_params_fetch_values(const char *key, REGVAL_CTR *regvals)
-{
-	uint32 base_index;
-	uint32 buffer_size;
-	char *buffer = NULL;
-
-	/* This is ALMOST the same as perflib_009_params, but HKPT has
-	   a "Counters" entry instead of a "Counter" key. <Grrrr> */
-
-	base_index = reg_perfcount_get_base_index();
-	buffer_size = reg_perfcount_get_counter_names(base_index, &buffer);
-	regval_ctr_addvalue(regvals, "Counters", REG_MULTI_SZ, buffer,
-			    buffer_size);
-
-	if(buffer_size > 0) {
-		SAFE_FREE(buffer);
-	}
-
-	buffer_size = reg_perfcount_get_counter_help(base_index, &buffer);
-	regval_ctr_addvalue(regvals, "Help", REG_MULTI_SZ, buffer, buffer_size);
-	if(buffer_size > 0) {
-		SAFE_FREE(buffer);
-	}
-
-	return regval_ctr_numvals( regvals );
-}
-
-static int hkpt_params_fetch_subkeys(const char *key,
-					 REGSUBKEY_CTR *subkey_ctr)
-{
-	return regdb_ops.fetch_subkeys(key, subkey_ctr);
-}
-
-REGISTRY_OPS hkpt_params_reg_ops = {
-	.fetch_values = hkpt_params_fetch_values,
-	.fetch_subkeys = hkpt_params_fetch_subkeys,
-};

Deleted: branches/samba/upstream/source/registry/reg_backend_netlogon_params.c
===================================================================
--- branches/samba/upstream/source/registry/reg_backend_netlogon_params.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/registry/reg_backend_netlogon_params.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,57 +0,0 @@
-/*
- *  Unix SMB/CIFS implementation.
- *  Virtual Windows Registry Layer
- *  Copyright (C) Gerald Carter     2002-2005
- *  Copyright (C) Michael Adam      2008
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-/*
- * Netlogon parameters registry backend.
- *
- * This replaces the former dynamic netlogon parameters overlay.
- */
-
-#include "includes.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_REGISTRY
-
-extern REGISTRY_OPS regdb_ops;
-
-static int netlogon_params_fetch_values(const char *key, REGVAL_CTR *regvals)
-{
-	uint32 dwValue;
-
-	if (!pdb_get_account_policy(AP_REFUSE_MACHINE_PW_CHANGE, &dwValue)) {
-		dwValue = 0;
-	}
-
-	regval_ctr_addvalue(regvals, "RefusePasswordChange", REG_DWORD,
-			    (char*)&dwValue, sizeof(dwValue));
-
-	return regval_ctr_numvals(regvals);
-}
-
-static int netlogon_params_fetch_subkeys(const char *key,
-					 REGSUBKEY_CTR *subkey_ctr)
-{
-	return regdb_ops.fetch_subkeys(key, subkey_ctr);
-}
-
-REGISTRY_OPS netlogon_params_reg_ops = {
-	.fetch_values = netlogon_params_fetch_values,
-	.fetch_subkeys = netlogon_params_fetch_subkeys,
-};

Deleted: branches/samba/upstream/source/registry/reg_backend_perflib.c
===================================================================
--- branches/samba/upstream/source/registry/reg_backend_perflib.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/registry/reg_backend_perflib.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,106 +0,0 @@
-/*
- *  Unix SMB/CIFS implementation.
- *  Virtual Windows Registry Layer
- *  Copyright (C) Gerald Carter     2002-2005
- *  Copyright (C) Michael Adam      2008
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-/*
- * perflib registry backend.
- *
- * This is a virtual overlay, dynamically presenting perflib values.
- */
-
-#include "includes.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_REGISTRY
-
-extern REGISTRY_OPS regdb_ops;
-
-#define KEY_PERFLIB_NORM	"HKLM/SOFTWARE/MICROSOFT/WINDOWS NT/CURRENTVERSION/PERFLIB"
-#define KEY_PERFLIB_009_NORM	"HKLM/SOFTWARE/MICROSOFT/WINDOWS NT/CURRENTVERSION/PERFLIB/009"
-
-static int perflib_params( REGVAL_CTR *regvals )
-{
-	int base_index = -1;
-	int last_counter = -1;
-	int last_help = -1;
-	int version = 0x00010001;
-	
-	base_index = reg_perfcount_get_base_index();
-	regval_ctr_addvalue(regvals, "Base Index", REG_DWORD, (char *)&base_index, sizeof(base_index));
-	last_counter = reg_perfcount_get_last_counter(base_index);
-	regval_ctr_addvalue(regvals, "Last Counter", REG_DWORD, (char *)&last_counter, sizeof(last_counter));
-	last_help = reg_perfcount_get_last_help(last_counter);
-	regval_ctr_addvalue(regvals, "Last Help", REG_DWORD, (char *)&last_help, sizeof(last_help));
-	regval_ctr_addvalue(regvals, "Version", REG_DWORD, (char *)&version, sizeof(version));
-
-	return regval_ctr_numvals( regvals );
-}
-
-static int perflib_009_params( REGVAL_CTR *regvals )
-{
-	int base_index;
-	int buffer_size;
-	char *buffer = NULL;
-
-	base_index = reg_perfcount_get_base_index();
-	buffer_size = reg_perfcount_get_counter_names(base_index, &buffer);
-	regval_ctr_addvalue(regvals, "Counter", REG_MULTI_SZ, buffer, buffer_size);
-	if(buffer_size > 0)
-		SAFE_FREE(buffer);
-	buffer_size = reg_perfcount_get_counter_help(base_index, &buffer);
-	regval_ctr_addvalue(regvals, "Help", REG_MULTI_SZ, buffer, buffer_size);
-	if(buffer_size > 0)
-		SAFE_FREE(buffer);
-	
-	return regval_ctr_numvals( regvals );
-}
-
-static int perflib_fetch_values(const char *key, REGVAL_CTR *regvals)
-{
-	char *path = NULL;
-	TALLOC_CTX *ctx = talloc_tos();
-
-	path = talloc_strdup(ctx, key);
-	if (path == NULL) {
-		return -1;
-	}
-	path = normalize_reg_path(ctx, path);
-	if (path == NULL) {
-		return -1;
-	}
-
-	if (strncmp(path, KEY_PERFLIB_NORM, strlen(path)) == 0) {
-		return perflib_params(regvals);
-	} else if (strncmp(path, KEY_PERFLIB_009_NORM, strlen(path)) == 0) {
-		return perflib_009_params(regvals);
-	} else {
-		return 0;
-	}
-}
-
-static int perflib_fetch_subkeys(const char *key,
-					 REGSUBKEY_CTR *subkey_ctr)
-{
-	return regdb_ops.fetch_subkeys(key, subkey_ctr);
-}
-
-REGISTRY_OPS perflib_reg_ops = {
-	.fetch_values = perflib_fetch_values,
-	.fetch_subkeys = perflib_fetch_subkeys,
-};

Deleted: branches/samba/upstream/source/registry/reg_backend_printing.c
===================================================================
--- branches/samba/upstream/source/registry/reg_backend_printing.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/registry/reg_backend_printing.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,1268 +0,0 @@
-/*
- *  Unix SMB/CIFS implementation.
- *  Virtual Windows Registry Layer
- *  Copyright (C) Gerald Carter                     2002-2005
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-/* Implementation of registry virtual views for printing information */
-
-#include "includes.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_REGISTRY
-
-/* registrt paths used in the print_registry[] */
-
-#define KEY_MONITORS		"HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT/MONITORS"
-#define KEY_FORMS		"HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT/FORMS"
-#define KEY_CONTROL_PRINTERS	"HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT/PRINTERS"
-#define KEY_ENVIRONMENTS	"HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT/ENVIRONMENTS"
-#define KEY_CONTROL_PRINT	"HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT"
-#define KEY_WINNT_PRINTERS	"HKLM/SOFTWARE/MICROSOFT/WINDOWS NT/CURRENTVERSION/PRINT/PRINTERS"
-#define KEY_WINNT_PRINT		"HKLM/SOFTWARE/MICROSOFT/WINDOWS NT/CURRENTVERSION/PRINT"
-#define KEY_PORTS		"HKLM/SOFTWARE/MICROSOFT/WINDOWS NT/CURRENTVERSION/PORTS"
-
-/* callback table for various registry paths below the ones we service in this module */
-
-struct reg_dyn_tree {
-	/* full key path in normalized form */
-	const char *path;
-
-	/* callbscks for fetch/store operations */
-	int ( *fetch_subkeys) ( const char *path, REGSUBKEY_CTR *subkeys );
-	bool (*store_subkeys) ( const char *path, REGSUBKEY_CTR *subkeys );
-	int  (*fetch_values)  ( const char *path, REGVAL_CTR *values );
-	bool (*store_values)  ( const char *path, REGVAL_CTR *values );
-};
-
-/*********************************************************************
- *********************************************************************
- ** Utility Functions
- *********************************************************************
- *********************************************************************/
-
-/***********************************************************************
- simple function to prune a pathname down to the basename of a file
- **********************************************************************/
-
-static const char *dos_basename(const char *path)
-{
-	const char *p;
-
-	if (!(p = strrchr( path, '\\'))) {
-		p = path;
-	} else {
-		p++;
-	}
-
-	return p;
-}
-
-/*********************************************************************
- *********************************************************************
- ** "HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT/FORMS"
- *********************************************************************
- *********************************************************************/
-
-static int key_forms_fetch_keys(const char *key, REGSUBKEY_CTR *subkeys)
-{
-	char *p = reg_remaining_path(talloc_tos(), key + strlen(KEY_FORMS));
-
-	/* no keys below Forms */
-
-	if (p) {
-		return -1;
-	}
-
-	return 0;
-}
-
-/**********************************************************************
- *********************************************************************/
-
-static int key_forms_fetch_values( const char *key, REGVAL_CTR *values )
-{
-	uint32 		data[8];
-	int		i, num_values, form_index = 1;
-	nt_forms_struct *forms_list = NULL;
-	nt_forms_struct *form;
-
-	DEBUG(10,("print_values_forms: key=>[%s]\n", key ? key : "NULL" ));
-
-	num_values = get_ntforms( &forms_list );
-
-	DEBUG(10,("hive_forms_fetch_values: [%d] user defined forms returned\n",
-		num_values));
-
-	/* handle user defined forms */
-
-	for ( i=0; i<num_values; i++ ) {
-		form = &forms_list[i];
-
-		data[0] = form->width;
-		data[1] = form->length;
-		data[2] = form->left;
-		data[3] = form->top;
-		data[4] = form->right;
-		data[5] = form->bottom;
-		data[6] = form_index++;
-		data[7] = form->flag;
-
-		regval_ctr_addvalue( values, form->name, REG_BINARY, (char*)data, sizeof(data) );	
-	}
-
-	SAFE_FREE( forms_list );
-	forms_list = NULL;
-
-	/* handle built-on forms */
-
-	num_values = get_builtin_ntforms( &forms_list );
-
-	DEBUG(10,("print_subpath_values_forms: [%d] built-in forms returned\n",
-		num_values));
-
-	for ( i=0; i<num_values; i++ ) {
-		form = &forms_list[i];
-
-		data[0] = form->width;
-		data[1] = form->length;
-		data[2] = form->left;
-		data[3] = form->top;
-		data[4] = form->right;
-		data[5] = form->bottom;
-		data[6] = form_index++;
-		data[7] = form->flag;
-
-		regval_ctr_addvalue(values, form->name, REG_BINARY, (char*)data, sizeof(data) );
-	}
-
-	SAFE_FREE(forms_list);
-
-	return regval_ctr_numvals(values);
-}
-
-/*********************************************************************
- *********************************************************************
- ** "HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT/PRINTERS"
- ** "HKLM/SOFTWARE/MICROSOFT/WINDOWS NT/CURRENTVERSION/PRINT/PRINTERS"
- *********************************************************************
- *********************************************************************/
-
-/*********************************************************************
- strip off prefix for printers key.  DOes return a pointer to static
- memory.
- *********************************************************************/
-
-static char *strip_printers_prefix(const char *key)
-{
-	char *subkeypath = NULL;
-	char *path = NULL;
-	TALLOC_CTX *ctx = talloc_tos();
-
-	path = talloc_strdup(ctx, key);
-	if (!path) {
-		return NULL;
-	}
-	path = normalize_reg_path(ctx, path);
-	if (!path) {
-		return NULL;
-	}
-
-	/* normalizing the path does not change length, just key delimiters and case */
-
-	if (strncmp(path, KEY_WINNT_PRINTERS, strlen(KEY_WINNT_PRINTERS)) == 0) {
-		subkeypath = reg_remaining_path(ctx, key + strlen(KEY_WINNT_PRINTERS));
-	} else {
-		subkeypath = reg_remaining_path(ctx, key + strlen(KEY_CONTROL_PRINTERS));
-	}
-
-	TALLOC_FREE(path);
-	return subkeypath;
-}
-
-/*********************************************************************
- *********************************************************************/
-
-static int key_printers_fetch_keys( const char *key, REGSUBKEY_CTR *subkeys )
-{
-	int n_services = lp_numservices();
-	int snum;
-	fstring sname;
-	int i;
-	int num_subkeys = 0;
-	char *printers_key;
-	char *printername, *printerdatakey;
-	NT_PRINTER_INFO_LEVEL *printer = NULL;
-	fstring *subkey_names = NULL;
-
-	DEBUG(10,("key_printers_fetch_keys: key=>[%s]\n", key ? key : "NULL" ));
-
-	printers_key = strip_printers_prefix( key );
-
-	if ( !printers_key ) {
-		/* enumerate all printers */
-
-		for (snum=0; snum<n_services; snum++) {
-			if ( !(lp_snum_ok(snum) && lp_print_ok(snum) ) )
-				continue;
-
-			/* don't report the [printers] share */
-
-			if ( strequal( lp_servicename(snum), PRINTERS_NAME ) )
-				continue;
-
-			fstrcpy( sname, lp_servicename(snum) );
-
-			regsubkey_ctr_addkey( subkeys, sname );
-		}
-
-		num_subkeys = regsubkey_ctr_numkeys( subkeys );
-		goto done;
-	}
-
-	/* get information for a specific printer */
-
-	if (!reg_split_path( printers_key, &printername, &printerdatakey )) {
-		return -1;
-	}
-
-	/* validate the printer name */
-
-	for (snum=0; snum<n_services; snum++) {
-		if ( !lp_snum_ok(snum) || !lp_print_ok(snum) )
-			continue;
-		if (strequal( lp_servicename(snum), printername ) )
-			break;
-	}
-
-	if ( snum>=n_services
-		|| !W_ERROR_IS_OK( get_a_printer(NULL, &printer, 2, printername) ) ) 
-	{
-		return -1;
-	}
-
-	num_subkeys = get_printer_subkeys( printer->info_2->data, printerdatakey?printerdatakey:"", &subkey_names );
-	
-	for ( i=0; i<num_subkeys; i++ )
-		regsubkey_ctr_addkey( subkeys, subkey_names[i] );
-	
-	free_a_printer( &printer, 2 );
-			
-	/* no other subkeys below here */
-
-done:	
-	SAFE_FREE( subkey_names );
-	
-	return num_subkeys;
-}
-
-/**********************************************************************
- Take a list of names and call add_printer_hook() if necessary
- Note that we do this a little differently from Windows since the 
- keyname is the sharename and not the printer name.
- *********************************************************************/
-
-static bool add_printers_by_registry( REGSUBKEY_CTR *subkeys )
-{
-	int i, num_keys, snum;
-	char *printername;
-	NT_PRINTER_INFO_LEVEL_2 info2;
-	NT_PRINTER_INFO_LEVEL printer;
-	
-	ZERO_STRUCT( info2 );
-	printer.info_2 = &info2;
-	
-	num_keys = regsubkey_ctr_numkeys( subkeys );
-	
-	become_root();
-	for ( i=0; i<num_keys; i++ ) {
-		printername = regsubkey_ctr_specific_key( subkeys, i );
-		snum = find_service( printername );
-		
-		/* just verify a valied snum for now */
-		if ( snum == -1 ) {
-			fstrcpy( info2.printername, printername );
-			fstrcpy( info2.sharename, printername );
-			if ( !add_printer_hook(talloc_tos(), NULL, &printer ) ) {
-				DEBUG(0,("add_printers_by_registry: Failed to add printer [%s]\n",
-					printername));
-			}	
-		}
-	}
-	unbecome_root();
-
-	return True;
-}
-
-/**********************************************************************
- *********************************************************************/
-
-static bool key_printers_store_keys( const char *key, REGSUBKEY_CTR *subkeys )
-{
-	char *printers_key;
-	char *printername, *printerdatakey;
-	NT_PRINTER_INFO_LEVEL *printer = NULL;
-	int i, num_subkeys, num_existing_keys;
-	char *subkeyname;
-	fstring *existing_subkeys = NULL;
-	
-	printers_key = strip_printers_prefix( key );
-	
-	if ( !printers_key ) {
-		/* have to deal with some new or deleted printer */
-		return add_printers_by_registry( subkeys );
-	}
-	
-	if (!reg_split_path( printers_key, &printername, &printerdatakey )) {
-		return False;
-	}
-	
-	/* lookup the printer */
-	
-	if ( !W_ERROR_IS_OK(get_a_printer(NULL, &printer, 2, printername)) ) {
-		DEBUG(0,("key_printers_store_keys: Tried to store subkey for bad printername %s\n", 
-			printername));
-		return False;
-	}
-	
-	/* get the top level printer keys */
-	
-	num_existing_keys = get_printer_subkeys( printer->info_2->data, "", &existing_subkeys );
-	
-	for ( i=0; i<num_existing_keys; i++ ) {
-	
-		/* remove the key if it has been deleted */
-		
-		if ( !regsubkey_ctr_key_exists( subkeys, existing_subkeys[i] ) ) {
-			DEBUG(5,("key_printers_store_keys: deleting key %s\n", 
-				existing_subkeys[i]));
-			delete_printer_key( printer->info_2->data, existing_subkeys[i] );
-		}
-	}
-
-	num_subkeys = regsubkey_ctr_numkeys( subkeys );
-	for ( i=0; i<num_subkeys; i++ ) {
-		subkeyname = regsubkey_ctr_specific_key(subkeys, i);
-		/* add any missing printer keys */
-		if ( lookup_printerkey(printer->info_2->data, subkeyname) == -1 ) {
-			DEBUG(5,("key_printers_store_keys: adding key %s\n", 
-				existing_subkeys[i]));
-			if ( add_new_printer_key( printer->info_2->data, subkeyname ) == -1 ) {
-				SAFE_FREE( existing_subkeys );
-				return False;
-			}
-		}
-	}
-	
-	/* write back to disk */
-	
-	mod_a_printer( printer, 2 );
-	
-	/* cleanup */
-	
-	free_a_printer( &printer, 2 );
-
-	SAFE_FREE( existing_subkeys );
-
-	return True;
-}
-
-/**********************************************************************
- *********************************************************************/
-
-static void fill_in_printer_values( NT_PRINTER_INFO_LEVEL_2 *info2, REGVAL_CTR *values )
-{
-	DEVICEMODE	*devmode;
-	prs_struct	prs;
-	uint32		offset;
-	UNISTR2		data;
-	char 		*p;
-	uint32 printer_status = PRINTER_STATUS_OK;
-	
-	regval_ctr_addvalue( values, "Attributes",       REG_DWORD, (char*)&info2->attributes,       sizeof(info2->attributes) );
-	regval_ctr_addvalue( values, "Priority",         REG_DWORD, (char*)&info2->priority,         sizeof(info2->attributes) );
-	regval_ctr_addvalue( values, "ChangeID",         REG_DWORD, (char*)&info2->changeid,         sizeof(info2->changeid) );
-	regval_ctr_addvalue( values, "Default Priority", REG_DWORD, (char*)&info2->default_priority, sizeof(info2->default_priority) );
-	
-	/* lie and say everything is ok since we don't want to call print_queue_length() to get the real status */
-	regval_ctr_addvalue( values, "Status",           REG_DWORD, (char*)&printer_status,          sizeof(info2->status) );
-
-	regval_ctr_addvalue( values, "StartTime",        REG_DWORD, (char*)&info2->starttime,        sizeof(info2->starttime) );
-	regval_ctr_addvalue( values, "UntilTime",        REG_DWORD, (char*)&info2->untiltime,        sizeof(info2->untiltime) );
-
-	/* strip the \\server\ from this string */
-	if ( !(p = strrchr( info2->printername, '\\' ) ) )
-		p = info2->printername;
-	else
-		p++;
-	init_unistr2( &data, p, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Name", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
-
-	init_unistr2( &data, info2->location, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Location", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
-
-	init_unistr2( &data, info2->comment, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Description", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
-
-	init_unistr2( &data, info2->parameters, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Parameters", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
-
-	init_unistr2( &data, info2->portname, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Port", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
-
-	init_unistr2( &data, info2->sharename, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Share Name", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
-
-	init_unistr2( &data, info2->drivername, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Printer Driver", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
-
-	init_unistr2( &data, info2->sepfile, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Separator File", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
-
-	init_unistr2( &data, "WinPrint", UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Print Processor",  REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
-
-	init_unistr2( &data, "RAW", UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Datatype", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
-
-		
-	/* use a prs_struct for converting the devmode and security 
-	   descriptor to REG_BINARY */
-	
-	if (!prs_init( &prs, RPC_MAX_PDU_FRAG_LEN, values, MARSHALL))
-		return;
-
-	/* stream the device mode */
-		
-	if ( (devmode = construct_dev_mode( info2->sharename )) != NULL ) {
-		if ( spoolss_io_devmode( "devmode", &prs, 0, devmode ) ) {
-			offset = prs_offset( &prs );
-			regval_ctr_addvalue( values, "Default Devmode", REG_BINARY, prs_data_p(&prs), offset );
-		}
-	}
-		
-	prs_mem_clear( &prs );
-	prs_set_offset( &prs, 0 );
-		
-	/* stream the printer security descriptor */
-	
-	if ( info2->secdesc_buf &&
-	     info2->secdesc_buf->sd &&
-	     info2->secdesc_buf->sd_size )  
-	{
-		if ( sec_io_desc("sec_desc", &info2->secdesc_buf->sd, &prs, 0 ) ) {
-			offset = prs_offset( &prs );
-			regval_ctr_addvalue( values, "Security", REG_BINARY, prs_data_p(&prs), offset );
-		}
-	}
-
-	prs_mem_free( &prs );
-
-	return;		
-}
-
-/**********************************************************************
- *********************************************************************/
-
-static int key_printers_fetch_values( const char *key, REGVAL_CTR *values )
-{
-	int 		num_values;
-	char		*printers_key;
-	char		*printername, *printerdatakey;
-	NT_PRINTER_INFO_LEVEL 	*printer = NULL;
-	NT_PRINTER_DATA	*p_data;
-	int		i, key_index;
-	
-	printers_key = strip_printers_prefix( key );	
-	
-	/* top level key values stored in the registry has no values */
-	
-	if ( !printers_key ) {
-		/* normalize to the 'HKLM\SOFTWARE\...\Print\Printers' key */
-		return regdb_fetch_values( KEY_WINNT_PRINTERS, values );
-	}
-	
-	/* lookup the printer object */
-	
-	if (!reg_split_path( printers_key, &printername, &printerdatakey )) {
-		return -1;
-	}
-	
-	if ( !W_ERROR_IS_OK( get_a_printer(NULL, &printer, 2, printername) ) )
-		goto done;
-		
-	if ( !printerdatakey ) {
-		fill_in_printer_values( printer->info_2, values );
-		goto done;
-	}
-		
-	/* iterate over all printer data keys and fill the regval container */
-	
-	p_data = printer->info_2->data;
-	if ( (key_index = lookup_printerkey( p_data, printerdatakey )) == -1  ) {
-		/* failure....should never happen if the client has a valid open handle first */
-		DEBUG(10,("key_printers_fetch_values: Unknown keyname [%s]\n", printerdatakey));
-		free_a_printer( &printer, 2 );
-		return -1;
-	}
-	
-	num_values = regval_ctr_numvals( p_data->keys[key_index].values );	
-	for ( i=0; i<num_values; i++ )
-		regval_ctr_copyvalue( values, regval_ctr_specific_value(p_data->keys[key_index].values, i) );
-			
-
-done:
-	if ( printer )
-		free_a_printer( &printer, 2 );
-		
-	return regval_ctr_numvals( values );
-}
-
-/**********************************************************************
- *********************************************************************/
-
-#define REG_IDX_ATTRIBUTES		1
-#define REG_IDX_PRIORITY		2
-#define REG_IDX_DEFAULT_PRIORITY	3
-#define REG_IDX_CHANGEID		4
-#define REG_IDX_STATUS			5
-#define REG_IDX_STARTTIME		6
-#define REG_IDX_NAME			7
-#define REG_IDX_LOCATION		8
-#define REG_IDX_DESCRIPTION		9
-#define REG_IDX_PARAMETERS		10
-#define REG_IDX_PORT			12
-#define REG_IDX_SHARENAME		13
-#define REG_IDX_DRIVER			14
-#define REG_IDX_SEP_FILE		15
-#define REG_IDX_PRINTPROC		16
-#define REG_IDX_DATATYPE		17
-#define REG_IDX_DEVMODE			18
-#define REG_IDX_SECDESC			19
-#define REG_IDX_UNTILTIME		20
-
-struct {
-	const char *name;
-	int index;	
-} printer_values_map[] = {
-	{ "Attributes", 	REG_IDX_ATTRIBUTES },
-	{ "Priority", 		REG_IDX_PRIORITY },
-	{ "Default Priority", 	REG_IDX_DEFAULT_PRIORITY },
-	{ "ChangeID", 		REG_IDX_CHANGEID },
-	{ "Status", 		REG_IDX_STATUS },
-	{ "StartTime", 		REG_IDX_STARTTIME },
-	{ "UntilTime",	 	REG_IDX_UNTILTIME },
-	{ "Name", 		REG_IDX_NAME },
-	{ "Location", 		REG_IDX_LOCATION },
-	{ "Description", 	REG_IDX_DESCRIPTION },
-	{ "Parameters", 	REG_IDX_PARAMETERS },
-	{ "Port", 		REG_IDX_PORT },
-	{ "Share Name", 	REG_IDX_SHARENAME },
-	{ "Printer Driver", 	REG_IDX_DRIVER },
-	{ "Separator File", 	REG_IDX_SEP_FILE },
-	{ "Print Processor", 	REG_IDX_PRINTPROC },
-	{ "Datatype", 		REG_IDX_DATATYPE },
-	{ "Default Devmode", 	REG_IDX_DEVMODE },
-	{ "Security", 		REG_IDX_SECDESC },
-	{ NULL, -1 }
-};
-
-
-static int find_valuename_index( const char *valuename )
-{
-	int i;
-	
-	for ( i=0; printer_values_map[i].name; i++ ) {
-		if ( strequal( valuename, printer_values_map[i].name ) )
-			return printer_values_map[i].index;
-	}
-	
-	return -1;
-}
-
-/**********************************************************************
- *********************************************************************/
-
-static void convert_values_to_printer_info_2( NT_PRINTER_INFO_LEVEL_2 *printer2, REGVAL_CTR *values )
-{
-	int num_values = regval_ctr_numvals( values );
-	uint32 value_index;
-	REGISTRY_VALUE *val;
-	int i;
-	
-	for ( i=0; i<num_values; i++ ) {
-		val = regval_ctr_specific_value( values, i );
-		value_index = find_valuename_index( regval_name( val ) );
-		
-		switch( value_index ) {
-			case REG_IDX_ATTRIBUTES:
-				printer2->attributes = (uint32)(*regval_data_p(val));
-				break;
-			case REG_IDX_PRIORITY:
-				printer2->priority = (uint32)(*regval_data_p(val));
-				break;
-			case REG_IDX_DEFAULT_PRIORITY:
-				printer2->default_priority = (uint32)(*regval_data_p(val));
-				break;
-			case REG_IDX_CHANGEID:
-				printer2->changeid = (uint32)(*regval_data_p(val));
-				break;
-			case REG_IDX_STARTTIME:
-				printer2->starttime = (uint32)(*regval_data_p(val));
-				break;
-			case REG_IDX_UNTILTIME:
-				printer2->untiltime = (uint32)(*regval_data_p(val));
-				break;
-			case REG_IDX_NAME:
-				rpcstr_pull( printer2->printername, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
-				break;
-			case REG_IDX_LOCATION:
-				rpcstr_pull( printer2->location, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
-				break;
-			case REG_IDX_DESCRIPTION:
-				rpcstr_pull( printer2->comment, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
-				break;
-			case REG_IDX_PARAMETERS:
-				rpcstr_pull( printer2->parameters, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
-				break;
-			case REG_IDX_PORT:
-				rpcstr_pull( printer2->portname, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
-				break;
-			case REG_IDX_SHARENAME:
-				rpcstr_pull( printer2->sharename, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
-				break;
-			case REG_IDX_DRIVER:
-				rpcstr_pull( printer2->drivername, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
-				break;
-			case REG_IDX_SEP_FILE:
-				rpcstr_pull( printer2->sepfile, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
-				break;
-			case REG_IDX_PRINTPROC:
-				rpcstr_pull( printer2->printprocessor, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
-				break;
-			case REG_IDX_DATATYPE:
-				rpcstr_pull( printer2->datatype, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
-				break;
-			case REG_IDX_DEVMODE:
-				break;
-			case REG_IDX_SECDESC:
-				break;		
-			default:
-				/* unsupported value...throw away */
-				DEBUG(8,("convert_values_to_printer_info_2: Unsupported registry value [%s]\n", 
-					regval_name( val ) ));
-		}
-	}
-	
-	return;
-}	
-
-/**********************************************************************
- *********************************************************************/
-
-static bool key_printers_store_values( const char *key, REGVAL_CTR *values )
-{
-	char *printers_key;
-	char *printername, *keyname;
-	NT_PRINTER_INFO_LEVEL   *printer = NULL;
-	WERROR result;
-	
-	printers_key = strip_printers_prefix( key );
-	
-	/* values in the top level key get stored in the registry */
-
-	if ( !printers_key ) {
-		/* normalize on the 'HKLM\SOFTWARE\....\Print\Printers' key */
-		return regdb_store_values( KEY_WINNT_PRINTERS, values );
-	}
-	
-	if (!reg_split_path( printers_key, &printername, &keyname )) {
-		return False;
-	}
-
-	if ( !W_ERROR_IS_OK(get_a_printer(NULL, &printer, 2, printername) ) )
-		return False;
-
-	/* deal with setting values directly under the printername */
-
-	if ( !keyname ) {
-		convert_values_to_printer_info_2( printer->info_2, values );
-	}
-	else {
-		int num_values = regval_ctr_numvals( values );
-		int i;
-		REGISTRY_VALUE *val;
-		
-		delete_printer_key( printer->info_2->data, keyname );
-		
-		/* deal with any subkeys */
-		for ( i=0; i<num_values; i++ ) {
-			val = regval_ctr_specific_value( values, i );
-			result = set_printer_dataex( printer, keyname, 
-				regval_name( val ),
-				regval_type( val ),
-				regval_data_p( val ),
-				regval_size( val ) );
-			if ( !W_ERROR_IS_OK(result) ) {
-				DEBUG(0,("key_printers_store_values: failed to set printer data [%s]!\n",
-					keyname));
-				free_a_printer( &printer, 2 );
-				return False;
-			}
-		}
-	}
-
-	result = mod_a_printer( printer, 2 );
-
-	free_a_printer( &printer, 2 );
-
-	return W_ERROR_IS_OK(result);
-}
-
-/*********************************************************************
- *********************************************************************
- ** "HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT/ENVIRONMENTS"
- *********************************************************************
- *********************************************************************/
-
-static int key_driver_fetch_keys( const char *key, REGSUBKEY_CTR *subkeys )
-{
-	const char *environments[] = {
-		"Windows 4.0",
-		"Windows NT x86",
-		"Windows NT R4000",
-		"Windows NT Alpha_AXP",
-		"Windows NT PowerPC",
-		"Windows IA64",
-		"Windows x64",
-		NULL };
-	fstring *drivers = NULL;
-	int i, env_index, num_drivers;
-	char *keystr, *base, *subkeypath;
-	char *key2 = NULL;
-	int num_subkeys = -1;
-	int version;
-	TALLOC_CTX *ctx = talloc_tos();
-
-	DEBUG(10,("key_driver_fetch_keys key=>[%s]\n", key ? key : "NULL" ));
-
-	keystr = reg_remaining_path(ctx, key + strlen(KEY_ENVIRONMENTS) );
-
-	/* list all possible architectures */
-
-	if ( !keystr ) {
-		for ( num_subkeys=0; environments[num_subkeys]; num_subkeys++ )
-			regsubkey_ctr_addkey( subkeys, 	environments[num_subkeys] );
-
-		return num_subkeys;
-	}
-
-	/* we are dealing with a subkey of "Environments */
-	key2 = talloc_strdup(ctx, keystr);
-	if (!key2) {
-		return -1;
-	}
-	keystr = key2;
-	if (!reg_split_path(keystr, &base, &subkeypath )) {
-		return -1;
-	}
-
-	/* sanity check */
-
-	for ( env_index=0; environments[env_index]; env_index++ ) {
-		if ( strequal( environments[env_index], base ) )
-			break;
-	}
-	if ( !environments[env_index] )
-		return -1;
-
-	/* ...\Print\Environements\...\ */
-
-	if ( !subkeypath ) {
-		regsubkey_ctr_addkey( subkeys, "Drivers" );
-		regsubkey_ctr_addkey( subkeys, "Print Processors" );
-
-		return 2;
-	}
-
-	/* more of the key path to process */
-
-	keystr = subkeypath;
-	if (!reg_split_path( keystr, &base, &subkeypath )) {
-		return -1;
-	}
-
-	/* ...\Print\Environements\...\Drivers\ */
-
-	if ( !subkeypath ) {
-		if ( strequal(base, "Drivers") ) {
-			switch ( env_index ) {
-				case 0:	/* Win9x */
-					regsubkey_ctr_addkey( subkeys, "Version-0" );
-					break;
-				default: /* Windows NT based systems */
-					regsubkey_ctr_addkey( subkeys, "Version-2" );
-					regsubkey_ctr_addkey( subkeys, "Version-3" );
-					break;
-			}
-
-			return regsubkey_ctr_numkeys( subkeys );
-		} else if ( strequal(base, "Print Processors") ) {
-			if ( env_index == 1 || env_index == 5 || env_index == 6 )
-
-
-			return regsubkey_ctr_numkeys( subkeys );
-		} else
-			return -1;	/* bad path */
-	}
-
-	/* we finally get to enumerate the drivers */
-
-	/* only one possible subkey below PrintProc key */
-
-	if ( strequal(base, "Print Processors") ) {
-		keystr = subkeypath;
-		if (!reg_split_path( keystr, &base, &subkeypath )) {
-			return -1;
-		}
-
-		/* no subkeys below this point */
-
-		if ( subkeypath )
-			return -1;
-
-		/* only allow one keyname here -- 'winprint' */
-
-		return strequal( base, "winprint" ) ? 0 : -1;
-	}
-
-	/* only dealing with drivers from here on out */
-
-	keystr = subkeypath;
-	if (!reg_split_path( keystr, &base, &subkeypath )) {
-		return -1;
-	}
-
-	version = atoi(&base[strlen(base)-1]);
-
-	switch (env_index) {
-	case 0:
-		if ( version != 0 )
-			return -1;
-		break;
-	default:
-		if ( version != 2 && version != 3 )
-			return -1;
-		break;
-	}
-
-
-	if ( !subkeypath ) {
-		num_drivers = get_ntdrivers( &drivers, environments[env_index], version );
-		for ( i=0; i<num_drivers; i++ )
-			regsubkey_ctr_addkey( subkeys, drivers[i] );
-
-		return regsubkey_ctr_numkeys( subkeys );
-	}
-
-	/* if anything else left, just say if has no subkeys */
-
-	DEBUG(1,("key_driver_fetch_keys unhandled key [%s] (subkey == %s\n",
-		key, subkeypath ));
-
-	return 0;
-}
-
-
-/**********************************************************************
- *********************************************************************/
-
-static void fill_in_driver_values( NT_PRINTER_DRIVER_INFO_LEVEL_3 *info3, REGVAL_CTR *values )
-{
-	char *buffer = NULL;
-	int buffer_size = 0;
-	int i, length;
-	const char *filename;
-	UNISTR2	data;
-
-	filename = dos_basename( info3->driverpath );
-	init_unistr2( &data, filename, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Driver", REG_SZ, (char*)data.buffer,
-		data.uni_str_len*sizeof(uint16) );
-
-	filename = dos_basename( info3->configfile );
-	init_unistr2( &data, filename, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Configuration File", REG_SZ, (char*)data.buffer, 
-		data.uni_str_len*sizeof(uint16) );
-
-	filename = dos_basename( info3->datafile );
-	init_unistr2( &data, filename, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Data File", REG_SZ, (char*)data.buffer,
-		data.uni_str_len*sizeof(uint16) );
-
-	filename = dos_basename( info3->helpfile );
-	init_unistr2( &data, filename, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Help File", REG_SZ, (char*)data.buffer,
-		data.uni_str_len*sizeof(uint16) );
-
-	init_unistr2( &data, info3->defaultdatatype, UNI_STR_TERMINATE);
-	regval_ctr_addvalue( values, "Data Type", REG_SZ, (char*)data.buffer,
-		data.uni_str_len*sizeof(uint16) );
-
-	regval_ctr_addvalue( values, "Version", REG_DWORD, (char*)&info3->cversion, 
-		sizeof(info3->cversion) );
-
-	if ( info3->dependentfiles ) {
-		/* place the list of dependent files in a single
-		   character buffer, separating each file name by
-		   a NULL */
-
-		for ( i=0; strcmp(info3->dependentfiles[i], ""); i++ ) {
-			/* strip the path to only the file's base name */
-
-			filename = dos_basename( info3->dependentfiles[i] );
-
-			length = strlen(filename);
-
-			buffer = (char *)SMB_REALLOC( buffer, buffer_size + (length + 1)*sizeof(uint16) );
-			if ( !buffer ) {
-				break;
-			}
-
-			init_unistr2( &data, filename, UNI_STR_TERMINATE);
-			memcpy( buffer+buffer_size, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
-
-			buffer_size += (length + 1)*sizeof(uint16);
-		}
-
-		/* terminated by double NULL.  Add the final one here */
-
-		buffer = (char *)SMB_REALLOC( buffer, buffer_size + 2 );
-		if ( !buffer ) {
-			buffer_size = 0;
-		} else {
-			buffer[buffer_size++] = '\0';
-			buffer[buffer_size++] = '\0';
-		}
-	}
-
-	regval_ctr_addvalue( values, "Dependent Files",    REG_MULTI_SZ, buffer, buffer_size );
-
-	SAFE_FREE( buffer );
-
-	return;
-}
-
-/**********************************************************************
- *********************************************************************/
-
-static int driver_arch_fetch_values( char *key, REGVAL_CTR *values )
-{
-	char 		*keystr, *base, *subkeypath;
-	fstring		arch_environment;
-	fstring		driver;
-	int		version;
-	NT_PRINTER_DRIVER_INFO_LEVEL	driver_ctr;
-	WERROR		w_result;
-
-	if (!reg_split_path( key, &base, &subkeypath )) {
-		return -1;
-	}
-
-	/* no values in 'Environments\Drivers\Windows NT x86' */
-
-	if ( !subkeypath )
-		return 0;
-
-	/* We have the Architecture string and some subkey name:
-	   Currently we only support
-	   * Drivers
-	   * Print Processors
-	   Anything else is an error.
-	   */
-
-	fstrcpy( arch_environment, base );
-
-	keystr = subkeypath;
-	if (!reg_split_path( keystr, &base, &subkeypath )) {
-		return -1;
-	}
-
-	if ( strequal(base, "Print Processors") )
-		return 0;
-
-	/* only Drivers key can be left */
-
-	if ( !strequal(base, "Drivers") )
-		return -1;
-
-	if ( !subkeypath )
-		return 0;
-
-	/* We know that we have Architechure\Drivers with some subkey name
-	   The subkey name has to be Version-XX */
-
-	keystr = subkeypath;
-	if (!reg_split_path( keystr, &base, &subkeypath )) {
-		return -1;
-	}
-
-	if ( !subkeypath )
-		return 0;
-
-	version = atoi(&base[strlen(base)-1]);
-
-	/* BEGIN PRINTER DRIVER NAME BLOCK */
-
-	keystr = subkeypath;
-	if (!reg_split_path( keystr, &base, &subkeypath )) {
-		return -1;
-	}
-
-	/* don't go any deeper for now */
-
-	fstrcpy( driver, base );
-
-	w_result = get_a_printer_driver( &driver_ctr, 3, driver, arch_environment, version );
-
-	if ( !W_ERROR_IS_OK(w_result) )
-		return -1;
-
-	fill_in_driver_values( driver_ctr.info_3, values );
-
-	free_a_printer_driver( driver_ctr, 3 );
-
-	/* END PRINTER DRIVER NAME BLOCK */
-
-
-	DEBUG(8,("key_driver_fetch_values: Exit\n"));
-
-	return regval_ctr_numvals( values );
-}
-
-/**********************************************************************
- *********************************************************************/
-
-static int key_driver_fetch_values( const char *key, REGVAL_CTR *values )
-{
-	char *keystr = NULL;
-	char *subkey = NULL;
-	TALLOC_CTX *ctx = talloc_tos();
-
-	DEBUG(8,("key_driver_fetch_values: Enter key => [%s]\n", key ? key : "NULL"));
-
-	/* no values in the Environments key */
-
-	if (!(keystr = reg_remaining_path(ctx, key + strlen(KEY_ENVIRONMENTS))))
-		return 0;
-
-	subkey = talloc_strdup(ctx, keystr);
-	if (!subkey) {
-		return 0;
-	}
-
-	/* pass off to handle subkeys */
-
-	return driver_arch_fetch_values( subkey, values );
-}
-
-/*********************************************************************
- *********************************************************************
- ** "HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT"
- *********************************************************************
- *********************************************************************/
-
-static int key_print_fetch_keys( const char *key, REGSUBKEY_CTR *subkeys )
-{
-	int key_len = strlen(key);
-
-	/* no keys below 'Print' handled here */
-
-	if ( (key_len != strlen(KEY_CONTROL_PRINT)) && (key_len != strlen(KEY_WINNT_PRINT)) )
-		return -1;
-
-	regsubkey_ctr_addkey( subkeys, "Environments" );
-	regsubkey_ctr_addkey( subkeys, "Monitors" );
-	regsubkey_ctr_addkey( subkeys, "Forms" );
-	regsubkey_ctr_addkey( subkeys, "Printers" );
-
-	return regsubkey_ctr_numkeys( subkeys );
-}
-
-/**********************************************************************
- *********************************************************************
- ** Structure to hold dispatch table of ops for various printer keys.
- ** Make sure to always store deeper keys along the same path first so
- ** we ge a more specific match.
- *********************************************************************
- *********************************************************************/
-
-static struct reg_dyn_tree print_registry[] = {
-/* just pass the monitor onto the registry tdb */
-{ KEY_MONITORS,
-	&regdb_fetch_keys,
-	&regdb_store_keys,
-	&regdb_fetch_values,
-	&regdb_store_values },
-{ KEY_FORMS,
-	&key_forms_fetch_keys,
-	NULL,
-	&key_forms_fetch_values,
-	NULL },
-{ KEY_CONTROL_PRINTERS,
-	&key_printers_fetch_keys,
-	&key_printers_store_keys,
-	&key_printers_fetch_values,
-	&key_printers_store_values },
-{ KEY_ENVIRONMENTS,
-	&key_driver_fetch_keys,
-	NULL,
-	&key_driver_fetch_values,
-	NULL },
-{ KEY_CONTROL_PRINT,
-	&key_print_fetch_keys,
-	NULL,
-	NULL,
-	NULL },
-{ KEY_WINNT_PRINTERS,
-	&key_printers_fetch_keys,
-	&key_printers_store_keys,
-	&key_printers_fetch_values,
-	&key_printers_store_values },
-{ KEY_PORTS,
-	&regdb_fetch_keys,
-	&regdb_store_keys,
-	&regdb_fetch_values,
-	&regdb_store_values },
-
-{ NULL, NULL, NULL, NULL, NULL }
-};
-
-
-/**********************************************************************
- *********************************************************************
- ** Main reg_printing interface functions
- *********************************************************************
- *********************************************************************/
-
-/***********************************************************************
- Lookup a key in the print_registry table, returning its index.
- -1 on failure
- **********************************************************************/
-
-static int match_registry_path(const char *key)
-{
-	int i;
-	char *path = NULL;
-	TALLOC_CTX *ctx = talloc_tos();
-
-	if ( !key )
-		return -1;
-
-	path = talloc_strdup(ctx, key);
-	if (!path) {
-		return -1;
-	}
-	path = normalize_reg_path(ctx, path);
-	if (!path) {
-		return -1;
-	}
-
-	for ( i=0; print_registry[i].path; i++ ) {
-		if (strncmp( path, print_registry[i].path, strlen(print_registry[i].path) ) == 0 )
-			return i;
-	}
-
-	return -1;
-}
-
-/***********************************************************************
- **********************************************************************/
-
-static int regprint_fetch_reg_keys( const char *key, REGSUBKEY_CTR *subkeys )
-{
-	int i = match_registry_path( key );
-
-	if ( i == -1 )
-		return -1;
-
-	if ( !print_registry[i].fetch_subkeys )
-		return -1;
-
-	return print_registry[i].fetch_subkeys( key, subkeys );
-}
-
-/**********************************************************************
- *********************************************************************/
-
-static bool regprint_store_reg_keys( const char *key, REGSUBKEY_CTR *subkeys )
-{
-	int i = match_registry_path( key );
-
-	if ( i == -1 )
-		return False;
-
-	if ( !print_registry[i].store_subkeys )
-		return False;
-
-	return print_registry[i].store_subkeys( key, subkeys );
-}
-
-/**********************************************************************
- *********************************************************************/
-
-static int regprint_fetch_reg_values( const char *key, REGVAL_CTR *values )
-{
-	int i = match_registry_path( key );
-
-	if ( i == -1 )
-		return -1;
-
-	/* return 0 values by default since we know the key had
-	   to exist because the client opened a handle */
-
-	if ( !print_registry[i].fetch_values )
-		return 0;
-
-	return print_registry[i].fetch_values( key, values );
-}
-
-/**********************************************************************
- *********************************************************************/
-
-static bool regprint_store_reg_values( const char *key, REGVAL_CTR *values )
-{
-	int i = match_registry_path( key );
-
-	if ( i == -1 )
-		return False;
-
-	if ( !print_registry[i].store_values )
-		return False;
-
-	return print_registry[i].store_values( key, values );
-}
-
-/*
- * Table of function pointers for accessing printing data
- */
-
-REGISTRY_OPS printing_ops = {
-	.fetch_subkeys = regprint_fetch_reg_keys,
-	.fetch_values = regprint_fetch_reg_values,
-	.store_subkeys = regprint_store_reg_keys,
-	.store_values = regprint_store_reg_values,
-};

Deleted: branches/samba/upstream/source/registry/reg_backend_prod_options.c
===================================================================
--- branches/samba/upstream/source/registry/reg_backend_prod_options.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/registry/reg_backend_prod_options.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,70 +0,0 @@
-/*
- *  Unix SMB/CIFS implementation.
- *  Virtual Windows Registry Layer
- *  Copyright (C) Gerald Carter     2002-2005
- *  Copyright (C) Michael Adam      2008
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-/*
- * Product options registry backend.
- *
- * This replaces the former dynamic product options overlay.
- */
-
-#include "includes.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_REGISTRY
-
-extern REGISTRY_OPS regdb_ops;
-
-static int prod_options_fetch_values(const char *key, REGVAL_CTR *regvals)
-{
-	const char *value_ascii = "";
-	fstring value;
-	int value_length;
-
-	switch (lp_server_role()) {
-		case ROLE_DOMAIN_PDC:
-		case ROLE_DOMAIN_BDC:
-			value_ascii = "LanmanNT";
-			break;
-		case ROLE_STANDALONE:
-			value_ascii = "ServerNT";
-			break;
-		case ROLE_DOMAIN_MEMBER:
-			value_ascii = "WinNT";
-			break;
-	}
-
-	value_length = push_ucs2(value, value, value_ascii, sizeof(value),
-				 STR_TERMINATE|STR_NOALIGN );
-	regval_ctr_addvalue(regvals, "ProductType", REG_SZ, value,
-			    value_length);
-
-	return regval_ctr_numvals( regvals );
-}
-
-static int prod_options_fetch_subkeys(const char *key,
-				      REGSUBKEY_CTR *subkey_ctr)
-{
-	return regdb_ops.fetch_subkeys(key, subkey_ctr);
-}
-
-REGISTRY_OPS prod_options_reg_ops = {
-	.fetch_values = prod_options_fetch_values,
-	.fetch_subkeys = prod_options_fetch_subkeys,
-};

Deleted: branches/samba/upstream/source/registry/reg_backend_shares.c
===================================================================
--- branches/samba/upstream/source/registry/reg_backend_shares.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/registry/reg_backend_shares.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,164 +0,0 @@
-/* 
- *  Unix SMB/CIFS implementation.
- *  Virtual Windows Registry Layer
- *  Copyright (C) Gerald Carter                     2005
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *  
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *  
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-/* Implementation of registry virtual views for printing information */
-
-#include "includes.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_REGISTRY
-
-/**********************************************************************
- It is safe to assume that every registry path passed into on of 
- the exported functions here begins with KEY_PRINTING else
- these functions would have never been called.  This is a small utility
- function to strip the beginning of the path and make a copy that the 
- caller can modify.  Note that the caller is responsible for releasing
- the memory allocated here.
- **********************************************************************/
-
-static char* trim_reg_path( const char *path )
-{
-	const char *p;
-	uint16 key_len = strlen(KEY_SHARES);
-	
-	/* 
-	 * sanity check...this really should never be True.
-	 * It is only here to prevent us from accessing outside
-	 * the path buffer in the extreme case.
-	 */
-	
-	if ( strlen(path) < key_len ) {
-		DEBUG(0,("trim_reg_path: Registry path too short! [%s]\n", path));
-		return NULL;
-	}
-	
-	
-	p = path + strlen( KEY_SHARES );
-	
-	if ( *p == '\\' )
-		p++;
-	
-	if ( *p )
-		return SMB_STRDUP(p);
-	else
-		return NULL;
-}
-
-/**********************************************************************
- Enumerate registry subkey names given a registry path.  
- Caller is responsible for freeing memory to **subkeys
- *********************************************************************/
- 
-static int shares_subkey_info( const char *key, REGSUBKEY_CTR *subkey_ctr )
-{
-	char 		*path;
-	bool		top_level = False;
-	int		num_subkeys = 0;
-	
-	DEBUG(10,("printing_subkey_info: key=>[%s]\n", key));
-	
-	path = trim_reg_path( key );
-	
-	/* check to see if we are dealing with the top level key */
-	
-	if ( !path )
-		top_level = True;
-		
-	if ( top_level ) {
-		num_subkeys = 1;
-		regsubkey_ctr_addkey( subkey_ctr, "Security" );
-	}
-#if 0
-	else
-		num_subkeys = handle_share_subpath( path, subkey_ctr, NULL );
-#endif
-	
-	SAFE_FREE( path );
-	
-	return num_subkeys;
-}
-
-/**********************************************************************
- Enumerate registry values given a registry path.  
- Caller is responsible for freeing memory 
- *********************************************************************/
-
-static int shares_value_info( const char *key, REGVAL_CTR *val )
-{
-	char 		*path;
-	bool		top_level = False;
-	int		num_values = 0;
-	
-	DEBUG(10,("printing_value_info: key=>[%s]\n", key));
-	
-	path = trim_reg_path( key );
-	
-	/* check to see if we are dealing with the top level key */
-	
-	if ( !path )
-		top_level = True;
-	
-	/* fill in values from the getprinterdata_printer_server() */
-	if ( top_level )
-		num_values = 0;
-#if 0
-	else
-		num_values = handle_printing_subpath( path, NULL, val );
-#endif
-		
-	SAFE_FREE(path);
-	
-	return num_values;
-}
-
-/**********************************************************************
- Stub function which always returns failure since we don't want
- people storing printing information directly via regostry calls
- (for now at least)
- *********************************************************************/
-
-static bool shares_store_subkey( const char *key, REGSUBKEY_CTR *subkeys )
-{
-	return False;
-}
-
-/**********************************************************************
- Stub function which always returns failure since we don't want
- people storing printing information directly via regostry calls
- (for now at least)
- *********************************************************************/
-
-static bool shares_store_value( const char *key, REGVAL_CTR *val )
-{
-	return False;
-}
-
-/* 
- * Table of function pointers for accessing printing data
- */
- 
-REGISTRY_OPS shares_reg_ops = {
-	.fetch_subkeys = shares_subkey_info,
-	.fetch_values = shares_value_info,
-	.store_subkeys = shares_store_subkey,
-	.store_values = shares_store_value,
-};
-
-

Deleted: branches/samba/upstream/source/registry/reg_backend_smbconf.c
===================================================================
--- branches/samba/upstream/source/registry/reg_backend_smbconf.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/registry/reg_backend_smbconf.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,85 +0,0 @@
-/*
- *  Unix SMB/CIFS implementation.
- *  Virtual Windows Registry Layer
- *  Copyright (C) Volker Lendecke 2006
- *  Copyright (C) Michael Adam 2007
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "includes.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_REGISTRY
-
-extern REGISTRY_OPS regdb_ops;		/* these are the default */
-
-static int smbconf_fetch_keys( const char *key, REGSUBKEY_CTR *subkey_ctr )
-{
-	return regdb_ops.fetch_subkeys(key, subkey_ctr);
-}
-
-static bool smbconf_store_keys( const char *key, REGSUBKEY_CTR *subkeys )
-{
-	return regdb_ops.store_subkeys(key, subkeys);
-}
-
-static int smbconf_fetch_values( const char *key, REGVAL_CTR *val )
-{
-	return regdb_ops.fetch_values(key, val);
-}
-
-static bool smbconf_store_values( const char *key, REGVAL_CTR *val )
-{
-	return regdb_ops.store_values(key, val);
-}
-
-static bool smbconf_reg_access_check(const char *keyname, uint32 requested,
-				     uint32 *granted,
-				     const struct nt_user_token *token)
-{
-	if (!(user_has_privileges(token, &se_disk_operators))) {
-		return False;
-	}
-
-	*granted = REG_KEY_ALL;
-	return True;
-}
-
-static WERROR smbconf_get_secdesc(TALLOC_CTX *mem_ctx, const char *key,
-				  struct security_descriptor **psecdesc)
-{
-	return regdb_ops.get_secdesc(mem_ctx, key, psecdesc);
-}
-
-static WERROR smbconf_set_secdesc(const char *key,
-				  struct security_descriptor *secdesc)
-{
-	return regdb_ops.set_secdesc(key, secdesc);
-}
-
-
-/*
- * Table of function pointers for accessing smb.conf data
- */
-
-REGISTRY_OPS smbconf_reg_ops = {
-	.fetch_subkeys = smbconf_fetch_keys,
-	.fetch_values = smbconf_fetch_values,
-	.store_subkeys = smbconf_store_keys,
-	.store_values = smbconf_store_values,
-	.reg_access_check = smbconf_reg_access_check,
-	.get_secdesc = smbconf_get_secdesc,
-	.set_secdesc = smbconf_set_secdesc,
-};

Deleted: branches/samba/upstream/source/registry/reg_backend_tcpip_params.c
===================================================================
--- branches/samba/upstream/source/registry/reg_backend_tcpip_params.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/registry/reg_backend_tcpip_params.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,67 +0,0 @@
-/*
- *  Unix SMB/CIFS implementation.
- *  Virtual Windows Registry Layer
- *  Copyright (C) Gerald Carter     2002-2005
- *  Copyright (C) Michael Adam      2008
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-/*
- * TCP/IP parameters registry backend.
- *
- * This replaces the former dynamic tcpip parameters overlay.
- */
-
-#include "includes.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_REGISTRY
-
-extern REGISTRY_OPS regdb_ops;
-
-static int tcpip_params_fetch_values(const char *key, REGVAL_CTR *regvals)
-{
-	fstring value;
-	int value_length;
-	char *hname;
-	char *mydomainname = NULL;
-
-	hname = myhostname();
-	value_length = push_ucs2(value, value, hname, sizeof(value),
-				 STR_TERMINATE|STR_NOALIGN);
-	regval_ctr_addvalue(regvals, "Hostname",REG_SZ, value, value_length);
-
-	mydomainname = get_mydnsdomname(talloc_tos());
-	if (!mydomainname) {
-		return -1;
-	}
-
-	value_length = push_ucs2(value, value, mydomainname, sizeof(value),
-				 STR_TERMINATE|STR_NOALIGN);
-	regval_ctr_addvalue(regvals, "Domain", REG_SZ, value, value_length);
-
-	return regval_ctr_numvals(regvals);
-}
-
-static int tcpip_params_fetch_subkeys(const char *key,
-					 REGSUBKEY_CTR *subkey_ctr)
-{
-	return regdb_ops.fetch_subkeys(key, subkey_ctr);
-}
-
-REGISTRY_OPS tcpip_params_reg_ops = {
-	.fetch_values = tcpip_params_fetch_values,
-	.fetch_subkeys = tcpip_params_fetch_subkeys,
-};

Modified: branches/samba/upstream/source/registry/reg_cachehook.c
===================================================================
--- branches/samba/upstream/source/registry/reg_cachehook.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/registry/reg_cachehook.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 /* Implementation of registry hook cache tree */
@@ -23,125 +24,90 @@
 #include "adt_tree.h"
 
 #undef DBGC_CLASS
-#define DBGC_CLASS DBGC_REGISTRY
+#define DBGC_CLASS DBGC_RPC_SRV
 
-static SORTED_TREE *cache_tree = NULL;
+static SORTED_TREE *cache_tree;
 extern REGISTRY_OPS regdb_ops;		/* these are the default */
+static REGISTRY_HOOK default_hook = { KEY_TREE_ROOT, &regdb_ops };
 
-static WERROR keyname_to_path(TALLOC_CTX *mem_ctx, const char *keyname,
-			      char **path)
-{
-	char *tmp_path = NULL;
-
-	if ((keyname == NULL) || (path == NULL)) {
-		return WERR_INVALID_PARAM;
-	}
-
-	tmp_path = talloc_asprintf(mem_ctx, "\\%s", keyname);
-	if (tmp_path == NULL) {
-		DEBUG(0, ("talloc_asprintf failed!\n"));
-		return WERR_NOMEM;
-	}
-
-	tmp_path = talloc_string_sub(mem_ctx, tmp_path, "\\", "/");
-	if (tmp_path == NULL) {
-		DEBUG(0, ("talloc_string_sub_failed!\n"));
-		return WERR_NOMEM;
-	}
-
-	*path = tmp_path;
-
-	return WERR_OK;
-}
-
 /**********************************************************************
- Initialize the cache tree if it has not been initialized yet.
+ Initialize the cache tree
  *********************************************************************/
 
-WERROR reghook_cache_init(void)
+BOOL reghook_cache_init( void )
 {
-	if (cache_tree != NULL) {
-		return WERR_OK;
-	}
+	cache_tree = pathtree_init( &default_hook, NULL );
 
-	cache_tree = pathtree_init(&regdb_ops, NULL);
-	if (cache_tree == NULL) {
-		return WERR_NOMEM;
-	}
-	DEBUG(10, ("reghook_cache_init: new tree with default "
-		   "ops %p for key [%s]\n", (void *)&regdb_ops,
-		   KEY_TREE_ROOT));
-	return WERR_OK;
+	return ( cache_tree == NULL );
 }
 
 /**********************************************************************
- Add a new registry hook to the cache.  Note that the keyname
+ Add a new REGISTRY_HOOK to the cache.  Note that the keyname
  is not in the exact format that a SORTED_TREE expects.
  *********************************************************************/
 
-WERROR reghook_cache_add(const char *keyname, REGISTRY_OPS *ops)
+BOOL reghook_cache_add( REGISTRY_HOOK *hook )
 {
-	WERROR werr;
-	char *key = NULL;
+	pstring key;
+	
+	if ( !hook )
+		return False;
+		
+	pstrcpy( key, "\\");
+	pstrcat( key, hook->keyname );	
+	
+	pstring_sub( key, "\\", "/" );
 
-	if ((keyname == NULL) || (ops == NULL)) {
-		return WERR_INVALID_PARAM;
-	}
-
-	werr = keyname_to_path(talloc_tos(), keyname, &key);
-	if (!W_ERROR_IS_OK(werr)) {
-		goto done;
-	}
-
-	DEBUG(10, ("reghook_cache_add: Adding ops %p for key [%s]\n",
-		   (void *)ops, key));
-
-	werr = pathtree_add(cache_tree, key, ops);
-
-done:
-	TALLOC_FREE(key);
-	return werr;
+	DEBUG(10,("reghook_cache_add: Adding key [%s]\n", key));
+		
+	return pathtree_add( cache_tree, key, hook );
 }
 
 /**********************************************************************
- Find a key in the cache.
+ Initialize the cache tree
  *********************************************************************/
 
-REGISTRY_OPS *reghook_cache_find(const char *keyname)
+REGISTRY_HOOK* reghook_cache_find( const char *keyname )
 {
-	WERROR werr;
-	char *key = NULL;
-	REGISTRY_OPS *ops = NULL;
-
-	if (keyname == NULL) {
+	char *key;
+	int len;
+	REGISTRY_HOOK *hook;
+	
+	if ( !keyname )
 		return NULL;
+	
+	/* prepend the string with a '\' character */
+	
+	len = strlen( keyname );
+	if ( !(key = (char *)SMB_MALLOC( len + 2 )) ) {
+		DEBUG(0,("reghook_cache_find: malloc failed for string [%s] !?!?!\n",
+			keyname));
+		return NULL;
 	}
 
-	werr = keyname_to_path(talloc_tos(), keyname, &key);
-	if (!W_ERROR_IS_OK(werr)) {
-		goto done;
-	}
+	*key = '\\';
+	strncpy( key+1, keyname, len+1);
+	
+	/* swap to a form understood by the SORTED_TREE */
 
+	string_sub( key, "\\", "/", 0 );
+		
 	DEBUG(10,("reghook_cache_find: Searching for keyname [%s]\n", key));
-
-	ops = (REGISTRY_OPS *)pathtree_find(cache_tree, key);
-
-	DEBUG(10, ("reghook_cache_find: found ops %p for key [%s]\n",
-		   ops ? (void *)ops : 0, key));
-
-done:
-	TALLOC_FREE(key);
-
-	return ops;
+	
+	hook = (REGISTRY_HOOK *)pathtree_find( cache_tree, key ) ;
+	
+	SAFE_FREE( key );
+	
+	return hook;
 }
 
 /**********************************************************************
- Print out the cache tree structure for debugging.
+ Initialize the cache tree
  *********************************************************************/
 
 void reghook_dump_cache( int debuglevel )
 {
 	DEBUG(debuglevel,("reghook_dump_cache: Starting cache dump now...\n"));
-
+	
 	pathtree_print_keys( cache_tree, debuglevel );
 }

Copied: branches/samba/upstream/source/registry/reg_db.c (from rev 1928, branches/samba/upstream/source/registry/reg_db.c)
===================================================================
--- branches/samba/upstream/source/registry/reg_db.c	                        (rev 0)
+++ branches/samba/upstream/source/registry/reg_db.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,664 @@
+/* 
+ *  Unix SMB/CIFS implementation.
+ *  Virtual Windows Registry Layer
+ *  Copyright (C) Gerald Carter                     2002-2005
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/* Implementation of internal registry database functions. */
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_RPC_SRV
+
+static TDB_CONTEXT *tdb_reg;
+static int tdb_refcount;
+
+#define VALUE_PREFIX	"SAMBA_REGVAL"
+
+/* List the deepest path into the registry.  All part components will be created.*/
+
+/* If you want to have a part of the path controlled by the tdb and part by
+   a virtual registry db (e.g. printing), then you have to list the deepest path.
+   For example,"HKLM/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Print" 
+   allows the reg_db backend to handle everything up to 
+   "HKLM/SOFTWARE/Microsoft/Windows NT/CurrentVersion" and then we'll hook 
+   the reg_printing backend onto the last component of the path (see 
+   KEY_PRINTING_2K in include/rpc_reg.h)   --jerry */
+
+static const char *builtin_registry_paths[] = {
+	KEY_PRINTING_2K,
+	KEY_PRINTING_PORTS,
+	KEY_PRINTING,
+	KEY_SHARES,
+	KEY_EVENTLOG,
+	"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib",
+	"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib\\009",
+	"HKLM\\SYSTEM\\CurrentControlSet\\Control\\Print\\Monitors",
+	"HKLM\\SYSTEM\\CurrentControlSet\\Control\\ProductOptions",
+	"HKLM\\SYSTEM\\CurrentControlSet\\Control\\Terminal Server\\DefaultUserConfiguration",
+	"HKLM\\SYSTEM\\CurrentControlSet\\Services\\TcpIp\\Parameters",
+	"HKLM\\SYSTEM\\CurrentControlSet\\Services\\Netlogon\\Parameters",
+	"HKU",
+	"HKCR",
+	"HKPD",
+	"HKPT",
+	 NULL };
+
+struct builtin_regkey_value {
+	const char *path;
+	const char *valuename;
+	uint32 type;
+	union {
+		const char *string;
+		uint32 dw_value;
+	} data;
+};
+
+static struct builtin_regkey_value builtin_registry_values[] = {
+	{ KEY_PRINTING_PORTS,
+		SAMBA_PRINTER_PORT_NAME, REG_SZ, { "" } },
+	{ KEY_PRINTING_2K,
+		"DefaultSpoolDirectory", REG_SZ, { "C:\\Windows\\System32\\Spool\\Printers" } },
+	{ KEY_EVENTLOG,
+		"DisplayName", REG_SZ, { "Event Log" } }, 
+	{ KEY_EVENTLOG,
+		"ErrorControl", REG_DWORD, { (char*)0x00000001 } },
+	{ NULL, NULL, 0, { NULL } }
+};
+
+#define REGVER_V1	1	/* first db version with write support */
+	
+/***********************************************************************
+ Open the registry data in the tdb
+ ***********************************************************************/
+ 
+static BOOL init_registry_data( void )
+{
+	pstring path, base, remaining;
+	fstring keyname, subkeyname;
+	REGSUBKEY_CTR *subkeys;
+	REGVAL_CTR *values;
+	int i;
+	const char *p, *p2;
+	UNISTR2 data;
+
+	/*
+	 * There are potentially quite a few store operations which are all
+	 * indiviually wrapped in tdb transactions. Wrapping them in a single
+	 * transaction gives just a single transaction_commit() to actually do
+	 * its fsync()s. See tdb/common/transaction.c for info about nested
+	 * transaction behaviour.
+	 */
+
+	if ( tdb_transaction_start( tdb_reg ) == -1 ) {
+		DEBUG(0, ("init_registry_data: tdb_transaction_start "
+			  "failed\n"));
+		return False;
+	}
+	
+	/* loop over all of the predefined paths and add each component */
+	
+	for ( i=0; builtin_registry_paths[i] != NULL; i++ ) {
+
+		DEBUG(6,("init_registry_data: Adding [%s]\n", builtin_registry_paths[i]));
+
+		pstrcpy( path, builtin_registry_paths[i] );
+		pstrcpy( base, "" );
+		p = path;
+		
+		while ( next_token(&p, keyname, "\\", sizeof(keyname)) ) {
+		
+			/* build up the registry path from the components */
+			
+			if ( *base )
+				pstrcat( base, "\\" );
+			pstrcat( base, keyname );
+			
+			/* get the immediate subkeyname (if we have one ) */
+			
+			*subkeyname = '\0';
+			if ( *p ) {
+				pstrcpy( remaining, p );
+				p2 = remaining;
+				
+				if ( !next_token(&p2, subkeyname, "\\", sizeof(subkeyname)) )
+					fstrcpy( subkeyname, p2 );
+			}
+
+			DEBUG(10,("init_registry_data: Storing key [%s] with subkey [%s]\n",
+				base, *subkeyname ? subkeyname : "NULL"));
+			
+			/* we don't really care if the lookup succeeds or not since
+			   we are about to update the record.  We just want any 
+			   subkeys already present */
+			
+			if ( !(subkeys = TALLOC_ZERO_P( NULL, REGSUBKEY_CTR )) ) {
+				DEBUG(0,("talloc() failure!\n"));
+				goto fail;
+			}
+
+			regdb_fetch_keys( base, subkeys );
+			if ( *subkeyname ) 
+				regsubkey_ctr_addkey( subkeys, subkeyname );
+			if ( !regdb_store_keys( base, subkeys ))
+				goto fail;
+			
+			TALLOC_FREE( subkeys );
+		}
+	}
+
+	/* loop over all of the predefined values and add each component */
+	
+	for ( i=0; builtin_registry_values[i].path != NULL; i++ ) {
+		if ( !(values = TALLOC_ZERO_P( NULL, REGVAL_CTR )) ) {
+			DEBUG(0,("talloc() failure!\n"));
+			goto fail;
+		}
+
+		regdb_fetch_values( builtin_registry_values[i].path, values );
+
+		/* preserve existing values across restarts.  Only add new ones */
+
+		if ( !regval_ctr_key_exists( values, builtin_registry_values[i].valuename ) ) 
+		{
+			switch( builtin_registry_values[i].type ) {
+			case REG_DWORD:
+				regval_ctr_addvalue( values, 
+				                     builtin_registry_values[i].valuename,
+						     REG_DWORD,
+						     (char*)&builtin_registry_values[i].data.dw_value,
+						     sizeof(uint32) );
+				break;
+				
+			case REG_SZ:
+				init_unistr2( &data, builtin_registry_values[i].data.string, UNI_STR_TERMINATE);
+				regval_ctr_addvalue( values, 
+				                     builtin_registry_values[i].valuename,
+						     REG_SZ,
+						     (char*)data.buffer,
+						     data.uni_str_len*sizeof(uint16) );
+				break;
+			
+			default:
+				DEBUG(0,("init_registry_data: invalid value type in builtin_registry_values [%d]\n",
+					builtin_registry_values[i].type));
+			}
+			regdb_store_values( builtin_registry_values[i].path, values );
+		}
+		
+		TALLOC_FREE( values );
+	}
+	
+	if (tdb_transaction_commit( tdb_reg ) == -1) {
+		DEBUG(0, ("init_registry_data: Could not commit "
+			  "transaction\n"));
+		return False;
+	}
+
+	return True;
+
+ fail:
+
+	if (tdb_transaction_cancel( tdb_reg ) == -1) {
+		smb_panic("init_registry_data: tdb_transaction_cancel "
+			  "failed\n");
+	}
+
+	return False;
+}
+
+/***********************************************************************
+ Open the registry database
+ ***********************************************************************/
+ 
+BOOL regdb_init( void )
+{
+	const char *vstring = "INFO/version";
+	uint32 vers_id;
+
+	if ( tdb_reg )
+		return True;
+
+	if ( !(tdb_reg = tdb_open_log(lock_path("registry.tdb"), 0, TDB_DEFAULT, O_RDWR, 0600)) )
+	{
+		tdb_reg = tdb_open_log(lock_path("registry.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600);
+		if ( !tdb_reg ) {
+			DEBUG(0,("regdb_init: Failed to open registry %s (%s)\n",
+				lock_path("registry.tdb"), strerror(errno) ));
+			return False;
+		}
+		
+		DEBUG(10,("regdb_init: Successfully created registry tdb\n"));
+	}
+
+	tdb_refcount = 1;
+		
+
+	vers_id = tdb_fetch_int32(tdb_reg, vstring);
+
+	if ( vers_id != REGVER_V1 ) {
+		/* any upgrade code here if needed */
+	}
+
+	/* always setup the necessary keys and values */
+
+	if ( !init_registry_data() ) {
+		DEBUG(0,("init_registry: Failed to initialize data in registry!\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***********************************************************************
+ Open the registry.  Must already have been initialized by regdb_init()
+ ***********************************************************************/
+
+WERROR regdb_open( void )
+{
+	WERROR result = WERR_OK;
+
+	if ( tdb_reg ) {
+		DEBUG(10,("regdb_open: incrementing refcount (%d)\n", tdb_refcount));
+		tdb_refcount++;
+		return WERR_OK;
+	}
+	
+	become_root();
+
+	tdb_reg = tdb_open_log(lock_path("registry.tdb"), 0, TDB_DEFAULT, O_RDWR, 0600);
+	if ( !tdb_reg ) {
+		result = ntstatus_to_werror( map_nt_error_from_unix( errno ) );
+		DEBUG(0,("regdb_open: Failed to open %s! (%s)\n", 
+			lock_path("registry.tdb"), strerror(errno) ));
+	}
+
+	unbecome_root();
+
+	tdb_refcount = 1;
+	DEBUG(10,("regdb_open: refcount reset (%d)\n", tdb_refcount));
+
+	return result;
+}
+
+/***********************************************************************
+ ***********************************************************************/
+
+int regdb_close( void )
+{
+	int ret;
+
+	tdb_refcount--;
+
+	DEBUG(10,("regdb_close: decrementing refcount (%d)\n", tdb_refcount));
+
+	if ( tdb_refcount > 0 )
+		return 0;
+
+	SMB_ASSERT( tdb_refcount >= 0 );
+
+	ret = tdb_close( tdb_reg );
+	tdb_reg = NULL;
+
+	return ret;
+}
+
+/***********************************************************************
+ Add subkey strings to the registry tdb under a defined key
+ fmt is the same format as tdb_pack except this function only supports
+ fstrings
+ ***********************************************************************/
+ 
+static BOOL regdb_store_keys_internal( const char *key, REGSUBKEY_CTR *ctr )
+{
+	TDB_DATA kbuf, dbuf;
+	char *buffer;
+	int i = 0;
+	uint32 len, buflen;
+	BOOL ret = True;
+	uint32 num_subkeys = regsubkey_ctr_numkeys( ctr );
+	pstring keyname;
+	
+	if ( !key )
+		return False;
+
+	pstrcpy( keyname, key );
+	normalize_reg_path( keyname );
+
+	/* allocate some initial memory */
+		
+	if (!(buffer = (char *)SMB_MALLOC(sizeof(pstring)))) {
+		return False;
+	}
+	buflen = sizeof(pstring);
+	len = 0;
+	
+	/* store the number of subkeys */
+	
+	len += tdb_pack(buffer+len, buflen-len, "d", num_subkeys );
+	
+	/* pack all the strings */
+	
+	for (i=0; i<num_subkeys; i++) {
+		len += tdb_pack( buffer+len, buflen-len, "f", regsubkey_ctr_specific_key(ctr, i) );
+		if ( len > buflen ) {
+			/* allocate some extra space */
+			if ((buffer = (char *)SMB_REALLOC( buffer, len*2 )) == NULL) {
+				DEBUG(0,("regdb_store_keys: Failed to realloc memory of size [%d]\n", len*2));
+				ret = False;
+				goto done;
+			}
+			buflen = len*2;
+					
+			len = tdb_pack( buffer+len, buflen-len, "f", regsubkey_ctr_specific_key(ctr, i) );
+		}		
+	}
+	
+	/* finally write out the data */
+	
+	kbuf.dptr = keyname;
+	kbuf.dsize = strlen(keyname)+1;
+	dbuf.dptr = buffer;
+	dbuf.dsize = len;
+	if ( tdb_store( tdb_reg, kbuf, dbuf, TDB_REPLACE ) == -1) {
+		ret = False;
+		goto done;
+	}
+
+done:		
+	SAFE_FREE( buffer );
+	
+	return ret;
+}
+
+/***********************************************************************
+ Store the new subkey record and create any child key records that 
+ do not currently exist
+ ***********************************************************************/
+
+BOOL regdb_store_keys( const char *key, REGSUBKEY_CTR *ctr )
+{
+	int num_subkeys, i;
+	pstring path;
+	REGSUBKEY_CTR *subkeys, *old_subkeys;
+	char *oldkeyname;
+	
+	/* fetch a list of the old subkeys so we can determine if any were deleted */
+	
+	if ( !(old_subkeys = TALLOC_ZERO_P( ctr, REGSUBKEY_CTR )) ) {
+		DEBUG(0,("regdb_store_keys: talloc() failure!\n"));
+		return False;
+	}
+
+	regdb_fetch_keys( key, old_subkeys );
+	
+	/* store the subkey list for the parent */
+	
+	if ( !regdb_store_keys_internal( key, ctr ) ) {
+		DEBUG(0,("regdb_store_keys: Failed to store new subkey list for parent [%s}\n", key ));
+		return False;
+	}
+	
+	/* now delete removed keys */
+	
+	num_subkeys = regsubkey_ctr_numkeys( old_subkeys );
+	for ( i=0; i<num_subkeys; i++ ) {
+		oldkeyname = regsubkey_ctr_specific_key( old_subkeys, i );
+		if ( !regsubkey_ctr_key_exists( ctr, oldkeyname ) ) {
+			pstr_sprintf( path, "%s%c%s", key, '/', oldkeyname );
+			normalize_reg_path( path );
+			tdb_delete_bystring( tdb_reg, path );
+		}
+	}
+
+	TALLOC_FREE( old_subkeys );
+	
+	/* now create records for any subkeys that don't already exist */
+	
+	num_subkeys = regsubkey_ctr_numkeys( ctr );
+	for ( i=0; i<num_subkeys; i++ ) {
+		pstr_sprintf( path, "%s%c%s", key, '/', regsubkey_ctr_specific_key( ctr, i ) );
+
+		if ( !(subkeys = TALLOC_ZERO_P( ctr, REGSUBKEY_CTR )) ) {
+			DEBUG(0,("regdb_store_keys: talloc() failure!\n"));
+			return False;
+		}
+
+		if ( regdb_fetch_keys( path, subkeys ) == -1 ) {
+			/* create a record with 0 subkeys */
+			if ( !regdb_store_keys_internal( path, subkeys ) ) {
+				DEBUG(0,("regdb_store_keys: Failed to store new record for key [%s}\n", path ));
+				TALLOC_FREE( subkeys );
+				return False;
+			}
+		}
+
+		TALLOC_FREE( subkeys );
+	}
+	
+	return True;
+}
+
+
+/***********************************************************************
+ Retrieve an array of strings containing subkeys.  Memory should be 
+ released by the caller.  
+ ***********************************************************************/
+
+int regdb_fetch_keys( const char* key, REGSUBKEY_CTR *ctr )
+{
+	pstring path;
+	uint32 num_items;
+	TDB_DATA dbuf;
+	char *buf;
+	uint32 buflen, len;
+	int i;
+	fstring subkeyname;
+
+	DEBUG(11,("regdb_fetch_keys: Enter key => [%s]\n", key ? key : "NULL"));
+	
+	pstrcpy( path, key );
+	
+	/* convert to key format */
+	pstring_sub( path, "\\", "/" ); 
+	strupper_m( path );
+	
+	dbuf = tdb_fetch_bystring( tdb_reg, path );
+	
+	buf = dbuf.dptr;
+	buflen = dbuf.dsize;
+	
+	if ( !buf ) {
+		DEBUG(5,("regdb_fetch_keys: tdb lookup failed to locate key [%s]\n", key));
+		return -1;
+	}
+	
+	len = tdb_unpack( buf, buflen, "d", &num_items);
+	
+	for (i=0; i<num_items; i++) {
+		len += tdb_unpack( buf+len, buflen-len, "f", subkeyname );
+		regsubkey_ctr_addkey( ctr, subkeyname );
+	}
+
+	SAFE_FREE( dbuf.dptr );
+	
+	DEBUG(11,("regdb_fetch_keys: Exit [%d] items\n", num_items));
+	
+	return num_items;
+}
+
+/****************************************************************************
+ Unpack a list of registry values frem the TDB
+ ***************************************************************************/
+ 
+static int regdb_unpack_values(REGVAL_CTR *values, char *buf, int buflen)
+{
+	int 		len = 0;
+	uint32		type;
+	pstring		valuename;
+	uint32		size;
+	uint8		*data_p;
+	uint32 		num_values = 0;
+	int 		i;
+	
+	
+	
+	/* loop and unpack the rest of the registry values */
+	
+	len += tdb_unpack(buf+len, buflen-len, "d", &num_values);
+	
+	for ( i=0; i<num_values; i++ ) {
+		/* unpack the next regval */
+		
+		type = REG_NONE;
+		size = 0;
+		data_p = NULL;
+		len += tdb_unpack(buf+len, buflen-len, "fdB",
+				  valuename,
+				  &type,
+				  &size,
+				  &data_p);
+				
+		/* add the new value. Paranoid protective code -- make sure data_p is valid */
+
+		if ( size && data_p ) {
+			regval_ctr_addvalue( values, valuename, type, (const char *)data_p, size );
+			SAFE_FREE(data_p); /* 'B' option to tdb_unpack does a malloc() */
+		}
+
+		DEBUG(8,("specific: [%s], len: %d\n", valuename, size));
+	}
+
+	return len;
+}
+
+/****************************************************************************
+ Pack all values in all printer keys
+ ***************************************************************************/
+ 
+static int regdb_pack_values(REGVAL_CTR *values, char *buf, int buflen)
+{
+	int 		len = 0;
+	int 		i;
+	REGISTRY_VALUE	*val;
+	int		num_values;
+
+	if ( !values )
+		return 0;
+
+	num_values = regval_ctr_numvals( values );
+
+	/* pack the number of values first */
+	
+	len += tdb_pack( buf+len, buflen-len, "d", num_values );
+	
+	/* loop over all values */
+		
+	for ( i=0; i<num_values; i++ ) {			
+		val = regval_ctr_specific_value( values, i );
+		len += tdb_pack(buf+len, buflen-len, "fdB",
+				regval_name(val),
+				regval_type(val),
+				regval_size(val),
+				regval_data_p(val) );
+	}
+
+	return len;
+}
+
+/***********************************************************************
+ Retrieve an array of strings containing subkeys.  Memory should be 
+ released by the caller.
+ ***********************************************************************/
+
+int regdb_fetch_values( const char* key, REGVAL_CTR *values )
+{
+	TDB_DATA data;
+	pstring keystr;
+
+	DEBUG(10,("regdb_fetch_values: Looking for value of key [%s] \n", key));
+	
+	pstr_sprintf( keystr, "%s/%s", VALUE_PREFIX, key );
+	normalize_reg_path( keystr );
+	
+	data = tdb_fetch_bystring( tdb_reg, keystr );
+	
+	if ( !data.dptr ) {
+		/* all keys have zero values by default */
+		return 0;
+	}
+	
+	regdb_unpack_values( values, data.dptr, data.dsize );
+	
+	SAFE_FREE( data.dptr );
+	
+	return regval_ctr_numvals(values);
+}
+
+/***********************************************************************
+ Stub function since we do not currently support storing registry 
+ values in the registry.tdb
+ ***********************************************************************/
+
+BOOL regdb_store_values( const char *key, REGVAL_CTR *values )
+{
+	TDB_DATA data;
+	pstring keystr;
+	int len, ret;
+	
+	DEBUG(10,("regdb_store_values: Looking for value of key [%s] \n", key));
+	
+	ZERO_STRUCT( data );
+	
+	len = regdb_pack_values( values, data.dptr, data.dsize );
+	if ( len <= 0 ) {
+		DEBUG(0,("regdb_store_values: unable to pack values. len <= 0\n"));
+		return False;
+	}
+	
+	data.dptr = SMB_MALLOC_ARRAY( char, len );
+	data.dsize = len;
+	
+	len = regdb_pack_values( values, data.dptr, data.dsize );
+	
+	SMB_ASSERT( len == data.dsize );
+	
+	pstr_sprintf( keystr, "%s/%s", VALUE_PREFIX, key );
+	normalize_reg_path( keystr );
+	
+	ret = tdb_store_bystring(tdb_reg, keystr, data, TDB_REPLACE);
+	
+	SAFE_FREE( data.dptr );
+	
+	return ret != -1 ;
+}
+
+
+/* 
+ * Table of function pointers for default access
+ */
+ 
+REGISTRY_OPS regdb_ops = {
+	regdb_fetch_keys,
+	regdb_fetch_values,
+	regdb_store_keys,
+	regdb_store_values,
+	NULL
+};
+
+

Deleted: branches/samba/upstream/source/registry/reg_dispatcher.c
===================================================================
--- branches/samba/upstream/source/registry/reg_dispatcher.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/registry/reg_dispatcher.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,245 +0,0 @@
-/*
- *  Unix SMB/CIFS implementation.
- *  Virtual Windows Registry Layer
- *  Copyright (C) Gerald Carter                     2002-2005
- *  Copyright (C) Michael Adam                      2006-2008
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-/*
- * Implementation of registry frontend view functions.
- * Functions moved from reg_frontend.c to minimize linker deps.
- */
-
-#include "includes.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_REGISTRY
-
-static const struct generic_mapping reg_generic_map =
-	{ REG_KEY_READ, REG_KEY_WRITE, REG_KEY_EXECUTE, REG_KEY_ALL };
-
-/********************************************************************
-********************************************************************/
-
-static WERROR construct_registry_sd(TALLOC_CTX *ctx, SEC_DESC **psd)
-{
-	SEC_ACE ace[3];
-	SEC_ACCESS mask;
-	size_t i = 0;
-	SEC_DESC *sd;
-	SEC_ACL *acl;
-	size_t sd_size;
-
-	/* basic access for Everyone */
-
-	init_sec_access(&mask, REG_KEY_READ);
-	init_sec_ace(&ace[i++], &global_sid_World, SEC_ACE_TYPE_ACCESS_ALLOWED,
-		     mask, 0);
-
-	/* Full Access 'BUILTIN\Administrators' */
-
-	init_sec_access(&mask, REG_KEY_ALL);
-	init_sec_ace(&ace[i++], &global_sid_Builtin_Administrators,
-		     SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0);
-
-	/* Full Access 'NT Authority\System' */
-
-	init_sec_access(&mask, REG_KEY_ALL );
-	init_sec_ace(&ace[i++], &global_sid_System, SEC_ACE_TYPE_ACCESS_ALLOWED,
-		     mask, 0);
-
-	/* create the security descriptor */
-
-	acl = make_sec_acl(ctx, NT4_ACL_REVISION, i, ace);
-	if (acl == NULL) {
-		return WERR_NOMEM;
-	}
-
-	sd = make_sec_desc(ctx, SEC_DESC_REVISION, SEC_DESC_SELF_RELATIVE,
-			   &global_sid_Builtin_Administrators,
-			   &global_sid_System, NULL, acl,
-			   &sd_size);
-	if (sd == NULL) {
-		return WERR_NOMEM;
-	}
-
-	*psd = sd;
-	return WERR_OK;
-}
-
-/***********************************************************************
- High level wrapper function for storing registry subkeys
- ***********************************************************************/
-
-bool store_reg_keys( REGISTRY_KEY *key, REGSUBKEY_CTR *subkeys )
-{
-	if (key->ops && key->ops->store_subkeys)
-		return key->ops->store_subkeys(key->name, subkeys);
-
-	return false;
-}
-
-/***********************************************************************
- High level wrapper function for storing registry values
- ***********************************************************************/
-
-bool store_reg_values( REGISTRY_KEY *key, REGVAL_CTR *val )
-{
-	if (key->ops && key->ops->store_values)
-		return key->ops->store_values(key->name, val);
-
-	return false;
-}
-
-/***********************************************************************
- High level wrapper function for enumerating registry subkeys
- Initialize the TALLOC_CTX if necessary
- ***********************************************************************/
-
-int fetch_reg_keys( REGISTRY_KEY *key, REGSUBKEY_CTR *subkey_ctr )
-{
-	int result = -1;
-
-	if (key->ops && key->ops->fetch_subkeys)
-		result = key->ops->fetch_subkeys(key->name, subkey_ctr);
-
-	return result;
-}
-
-/***********************************************************************
- High level wrapper function for enumerating registry values
- ***********************************************************************/
-
-int fetch_reg_values( REGISTRY_KEY *key, REGVAL_CTR *val )
-{
-	int result = -1;
-
-	DEBUG(10, ("fetch_reg_values called for key '%s' (ops %p)\n", key->name,
-		   (key->ops) ? (void *)key->ops : NULL));
-
-	if (key->ops && key->ops->fetch_values)
-		result = key->ops->fetch_values(key->name, val);
-
-	return result;
-}
-
-/***********************************************************************
- High level access check for passing the required access mask to the
- underlying registry backend
- ***********************************************************************/
-
-bool regkey_access_check( REGISTRY_KEY *key, uint32 requested, uint32 *granted,
-			  const struct nt_user_token *token )
-{
-	SEC_DESC *sec_desc;
-	NTSTATUS status;
-	WERROR err;
-	TALLOC_CTX *mem_ctx;
-
-	/* use the default security check if the backend has not defined its
-	 * own */
-
-	if (key->ops && key->ops->reg_access_check) {
-		return key->ops->reg_access_check(key->name, requested,
-						  granted, token);
-	}
-
-	/*
-	 * The secdesc routines can't yet cope with a NULL talloc ctx sanely.
-	 */
-
-	if (!(mem_ctx = talloc_init("regkey_access_check"))) {
-		return false;
-	}
-
-	err = regkey_get_secdesc(mem_ctx, key, &sec_desc);
-
-	if (!W_ERROR_IS_OK(err)) {
-		TALLOC_FREE(mem_ctx);
-		return false;
-	}
-
-	se_map_generic( &requested, &reg_generic_map );
-
-	if (!se_access_check(sec_desc, token, requested, granted, &status)) {
-		TALLOC_FREE(mem_ctx);
-		return false;
-	}
-
-	TALLOC_FREE(mem_ctx);
-	return NT_STATUS_IS_OK(status);
-}
-
-WERROR regkey_get_secdesc(TALLOC_CTX *mem_ctx, REGISTRY_KEY *key,
-			  struct security_descriptor **psecdesc)
-{
-	struct security_descriptor *secdesc;
-	WERROR werr;
-
-	if (key->ops && key->ops->get_secdesc) {
-		werr = key->ops->get_secdesc(mem_ctx, key->name, psecdesc);
-		if (W_ERROR_IS_OK(werr)) {
-			return WERR_OK;
-		}
-	}
-
-	werr = construct_registry_sd(mem_ctx, &secdesc);
-	if (!W_ERROR_IS_OK(werr)) {
-		return werr;
-	}
-
-	*psecdesc = secdesc;
-	return WERR_OK;
-}
-
-WERROR regkey_set_secdesc(REGISTRY_KEY *key,
-			  struct security_descriptor *psecdesc)
-{
-	if (key->ops && key->ops->set_secdesc) {
-		return key->ops->set_secdesc(key->name, psecdesc);
-	}
-
-	return WERR_ACCESS_DENIED;
-}
-
-/**
- * Check whether the in-memory version of the subkyes of a
- * registry key needs update from disk.
- */
-bool reg_subkeys_need_update(REGISTRY_KEY *key, REGSUBKEY_CTR *subkeys)
-{
-	if (key->ops && key->ops->subkeys_need_update)
-	{
-		return key->ops->subkeys_need_update(subkeys);
-	}
-
-	return false;
-}
-
-/**
- * Check whether the in-memory version of the values of a
- * registry key needs update from disk.
- */
-bool reg_values_need_update(REGISTRY_KEY *key, REGVAL_CTR *values)
-{
-	if (key->ops && key->ops->values_need_update)
-	{
-		return key->ops->values_need_update(values);
-	}
-
-	return false;
-}
-

Copied: branches/samba/upstream/source/registry/reg_dynamic.c (from rev 1928, branches/samba/upstream/source/registry/reg_dynamic.c)
===================================================================
--- branches/samba/upstream/source/registry/reg_dynamic.c	                        (rev 0)
+++ branches/samba/upstream/source/registry/reg_dynamic.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,249 @@
+/* 
+ *  Unix SMB/CIFS implementation.
+ *  Virtual Windows Registry Layer
+ *  Copyright (C) Gerald Carter                     2002-2005
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/* Implementation of registry frontend view functions. */
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_RPC_SRV
+
+struct reg_dyn_values {
+	const char *path;
+	int (*fetch_values) ( REGVAL_CTR *val );
+};
+
+/***********************************************************************
+***********************************************************************/
+
+static int netlogon_params( REGVAL_CTR *regvals )
+{
+	uint32 dwValue;
+	
+	if ( !pdb_get_account_policy(AP_REFUSE_MACHINE_PW_CHANGE, &dwValue) )
+		dwValue = 0;
+		
+	regval_ctr_addvalue( regvals, "RefusePasswordChange", REG_DWORD,
+		(char*)&dwValue, sizeof(dwValue) );
+
+	return regval_ctr_numvals( regvals );
+}
+
+/***********************************************************************
+***********************************************************************/
+
+static int prod_options( REGVAL_CTR *regvals )
+{
+	const char              *value_ascii = "";
+	fstring                 value;
+	int                     value_length;
+	
+	switch (lp_server_role()) {
+		case ROLE_DOMAIN_PDC:
+		case ROLE_DOMAIN_BDC:
+			value_ascii = "LanmanNT";
+			break;
+		case ROLE_STANDALONE:
+			value_ascii = "ServerNT";
+			break;
+		case ROLE_DOMAIN_MEMBER:
+			value_ascii = "WinNT";
+			break;
+	}
+		
+	value_length = push_ucs2( value, value, value_ascii, sizeof(value), 
+		STR_TERMINATE|STR_NOALIGN );
+	regval_ctr_addvalue( regvals, "ProductType", REG_SZ, value, 
+		value_length );
+	
+	return regval_ctr_numvals( regvals );
+}
+
+/***********************************************************************
+***********************************************************************/
+
+static int tcpip_params( REGVAL_CTR *regvals )
+{
+	fstring                 value;
+	int                     value_length;
+	char   			*hname;
+	fstring 		mydomainname;
+	
+
+	hname = myhostname();
+	value_length = push_ucs2( value, value, hname, sizeof(value), STR_TERMINATE|STR_NOALIGN);		
+	regval_ctr_addvalue( regvals, "Hostname",REG_SZ, value, value_length );
+	
+	get_mydnsdomname( mydomainname );		
+	value_length = push_ucs2( value, value, mydomainname, sizeof(value), STR_TERMINATE|STR_NOALIGN);		
+	regval_ctr_addvalue( regvals, "Domain", REG_SZ, value, value_length );
+		
+	return regval_ctr_numvals( regvals );
+}
+
+/***********************************************************************
+***********************************************************************/
+
+static int perflib_params( REGVAL_CTR *regvals )
+{
+	int base_index = -1;
+	int last_counter = -1;
+	int last_help = -1;
+	int version = 0x00010001;
+	
+	base_index = reg_perfcount_get_base_index();
+	regval_ctr_addvalue(regvals, "Base Index", REG_DWORD, (char *)&base_index, sizeof(base_index));
+	last_counter = reg_perfcount_get_last_counter(base_index);
+	regval_ctr_addvalue(regvals, "Last Counter", REG_DWORD, (char *)&last_counter, sizeof(last_counter));
+	last_help = reg_perfcount_get_last_help(last_counter);
+	regval_ctr_addvalue(regvals, "Last Help", REG_DWORD, (char *)&last_help, sizeof(last_help));
+	regval_ctr_addvalue(regvals, "Version", REG_DWORD, (char *)&version, sizeof(version));
+
+	return regval_ctr_numvals( regvals );
+}
+
+/***********************************************************************
+***********************************************************************/
+
+static int perflib_009_params( REGVAL_CTR *regvals )
+{
+	int base_index;
+	int buffer_size;
+	char *buffer = NULL;
+
+	base_index = reg_perfcount_get_base_index();
+	buffer_size = reg_perfcount_get_counter_names(base_index, &buffer);
+	regval_ctr_addvalue(regvals, "Counter", REG_MULTI_SZ, buffer, buffer_size);
+	if(buffer_size > 0)
+		SAFE_FREE(buffer);
+	buffer_size = reg_perfcount_get_counter_help(base_index, &buffer);
+	regval_ctr_addvalue(regvals, "Help", REG_MULTI_SZ, buffer, buffer_size);
+	if(buffer_size > 0)
+		SAFE_FREE(buffer);
+	
+	return regval_ctr_numvals( regvals );
+}
+
+/***********************************************************************
+***********************************************************************/
+
+static int hkpt_params( REGVAL_CTR *regvals )
+{
+	uint32 base_index;
+	uint32 buffer_size;
+	char *buffer = NULL;
+
+	/* This is ALMOST the same as perflib_009_params, but HKPT has
+	   a "Counters" entry instead of a "Counter" key. <Grrrr> */
+	   
+	base_index = reg_perfcount_get_base_index();
+	buffer_size = reg_perfcount_get_counter_names(base_index, &buffer);
+	regval_ctr_addvalue(regvals, "Counters", REG_MULTI_SZ, buffer, buffer_size);
+	
+	if(buffer_size > 0)
+		SAFE_FREE(buffer);
+		
+	buffer_size = reg_perfcount_get_counter_help(base_index, &buffer);
+	regval_ctr_addvalue(regvals, "Help", REG_MULTI_SZ, buffer, buffer_size);
+	if(buffer_size > 0)
+		SAFE_FREE(buffer);
+	
+	return regval_ctr_numvals( regvals );
+}
+
+/***********************************************************************
+***********************************************************************/
+
+static int current_version( REGVAL_CTR *values )
+{
+	const char *sysroot_string = "c:\\Windows";
+	fstring sysversion;
+	fstring value;
+	uint32 value_length;
+	
+	value_length = push_ucs2( value, value, sysroot_string, sizeof(value), 
+		STR_TERMINATE|STR_NOALIGN );
+	regval_ctr_addvalue( values, "SystemRoot", REG_SZ, value, value_length );
+	
+	fstr_sprintf( sysversion, "%d.%d", lp_major_announce_version(), lp_minor_announce_version() );
+	value_length = push_ucs2( value, value, sysversion, sizeof(value), 
+		STR_TERMINATE|STR_NOALIGN );
+	regval_ctr_addvalue( values, "CurrentVersion", REG_SZ, value, value_length );
+	
+		
+	return regval_ctr_numvals( values );
+}
+
+
+/***********************************************************************
+ Structure holding the registry paths and pointers to the value 
+ enumeration functions
+***********************************************************************/
+
+static struct reg_dyn_values dynamic_values[] = {
+	{ "HKLM/SYSTEM/CURRENTCONTROLSET/SERVICES/NETLOGON/PARAMETERS", &netlogon_params  },
+	{ "HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRODUCTOPTIONS",       &prod_options     },
+	{ "HKLM/SYSTEM/CURRENTCONTROLSET/SERVICES/TCPIP/PARAMETERS",    &tcpip_params     },
+	{ "HKLM/SOFTWARE/MICROSOFT/WINDOWS NT/CURRENTVERSION/PERFLIB",  &perflib_params   }, 
+	{ "HKLM/SOFTWARE/MICROSOFT/WINDOWS NT/CURRENTVERSION/PERFLIB/009", &perflib_009_params }, 
+	{ "HKLM/SOFTWARE/MICROSOFT/WINDOWS NT/CURRENTVERSION",          &current_version }, 
+	{ "HKPT", &hkpt_params },
+	{ NULL, NULL }
+};
+
+/***********************************************************************
+***********************************************************************/
+
+int fetch_dynamic_reg_values( REGISTRY_KEY *key, REGVAL_CTR *val )
+{
+	int i;
+	pstring path;
+	
+	pstrcpy( path, key->name );
+	normalize_reg_path( path );
+	
+	for ( i=0; dynamic_values[i].path; i++ ) {
+		if ( strcmp( path, dynamic_values[i].path ) == 0 )
+			return dynamic_values[i].fetch_values( val );
+	}
+	
+	return -1;
+}
+
+/***********************************************************************
+***********************************************************************/
+
+BOOL check_dynamic_reg_values( REGISTRY_KEY *key )
+{
+	int i;
+	pstring path;
+	
+	pstrcpy( path, key->name );
+	normalize_reg_path( path );
+	
+	for ( i=0; dynamic_values[i].path; i++ ) {
+		/* can't write to dynamic keys */
+		if ( strcmp( path, dynamic_values[i].path ) == 0 )
+			return True;
+	}
+	
+	return False;
+}
+

Modified: branches/samba/upstream/source/registry/reg_eventlog.c
===================================================================
--- branches/samba/upstream/source/registry/reg_eventlog.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/registry/reg_eventlog.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -17,74 +17,65 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
 
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_REGISTRY
 
 /**********************************************************************
  for an eventlog, add in the default values
 *********************************************************************/
 
-bool eventlog_init_keys(void)
+BOOL eventlog_init_keys( void )
 {
 	/* Find all of the eventlogs, add keys for each of them */
-	const char **elogs = lp_eventlog_list();
-	char *evtlogpath = NULL;
-	char *evtfilepath = NULL;
+	const char **elogs = lp_eventlog_list(  );
+	pstring evtlogpath;
+	pstring evtfilepath;
 	REGSUBKEY_CTR *subkeys;
 	REGVAL_CTR *values;
 	uint32 uiMaxSize;
 	uint32 uiRetention;
 	uint32 uiCategoryCount;
 	UNISTR2 data;
-	TALLOC_CTX *ctx = talloc_tos();
 
-	while (elogs && *elogs) {
-		if (!(subkeys = TALLOC_ZERO_P(ctx, REGSUBKEY_CTR ) ) ) {
+	while ( elogs && *elogs ) {
+		if ( !( subkeys = TALLOC_ZERO_P( NULL, REGSUBKEY_CTR ) ) ) {
 			DEBUG( 0, ( "talloc() failure!\n" ) );
 			return False;
 		}
-		regdb_fetch_keys(KEY_EVENTLOG, subkeys);
+		regdb_fetch_keys( KEY_EVENTLOG, subkeys );
 		regsubkey_ctr_addkey( subkeys, *elogs );
-		if ( !regdb_store_keys( KEY_EVENTLOG, subkeys ) ) {
-			TALLOC_FREE(subkeys);
+		if ( !regdb_store_keys( KEY_EVENTLOG, subkeys ) )
 			return False;
-		}
-		TALLOC_FREE(subkeys);
+		TALLOC_FREE( subkeys );
 
 		/* add in the key of form KEY_EVENTLOG/Application */
 		DEBUG( 5,
 		       ( "Adding key of [%s] to path of [%s]\n", *elogs,
 			 KEY_EVENTLOG ) );
 
-		evtlogpath = talloc_asprintf(ctx, "%s\\%s",
-			  KEY_EVENTLOG, *elogs);
-		if (!evtlogpath) {
-			return false;
-		}
+		slprintf( evtlogpath, sizeof( evtlogpath ) - 1, "%s\\%s",
+			  KEY_EVENTLOG, *elogs );
 		/* add in the key of form KEY_EVENTLOG/Application/Application */
 		DEBUG( 5,
 		       ( "Adding key of [%s] to path of [%s]\n", *elogs,
 			 evtlogpath ) );
-		if (!(subkeys = TALLOC_ZERO_P(ctx, REGSUBKEY_CTR))) {
+		if ( !( subkeys = TALLOC_ZERO_P( NULL, REGSUBKEY_CTR ) ) ) {
 			DEBUG( 0, ( "talloc() failure!\n" ) );
 			return False;
 		}
 		regdb_fetch_keys( evtlogpath, subkeys );
 		regsubkey_ctr_addkey( subkeys, *elogs );
 
-		if ( !regdb_store_keys( evtlogpath, subkeys ) ) {
-			TALLOC_FREE(subkeys);
+		if ( !regdb_store_keys( evtlogpath, subkeys ) )
 			return False;
-		}
 		TALLOC_FREE( subkeys );
 
 		/* now add the values to the KEY_EVENTLOG/Application form key */
-		if (!(values = TALLOC_ZERO_P(ctx, REGVAL_CTR))) {
+		if ( !( values = TALLOC_ZERO_P( NULL, REGVAL_CTR ) ) ) {
 			DEBUG( 0, ( "talloc() failure!\n" ) );
 			return False;
 		}
@@ -94,7 +85,7 @@
 		regdb_fetch_values( evtlogpath, values );
 
 
-		if (!regval_ctr_key_exists(values, "MaxSize")) {
+		if ( !regval_ctr_key_exists( values, "MaxSize" ) ) {
 
 			/* assume we have none, add them all */
 
@@ -104,57 +95,48 @@
 			uiMaxSize = 0x00080000;
 			uiRetention = 0x93A80;
 
-			regval_ctr_addvalue(values, "MaxSize", REG_DWORD,
-					     (char *)&uiMaxSize,
-					     sizeof(uint32));
+			regval_ctr_addvalue( values, "MaxSize", REG_DWORD,
+					     ( char * ) &uiMaxSize,
+					     sizeof( uint32 ) );
 
-			regval_ctr_addvalue(values, "Retention", REG_DWORD,
-					     (char *)&uiRetention,
-					     sizeof(uint32));
-			init_unistr2(&data, *elogs, UNI_STR_TERMINATE);
+			regval_ctr_addvalue( values, "Retention", REG_DWORD,
+					     ( char * ) &uiRetention,
+					     sizeof( uint32 ) );
+			init_unistr2( &data, *elogs, UNI_STR_TERMINATE );
 
-			regval_ctr_addvalue(values, "PrimaryModule", REG_SZ,
-					     (char *)data.buffer,
+			regval_ctr_addvalue( values, "PrimaryModule", REG_SZ,
+					     ( char * ) data.buffer,
 					     data.uni_str_len *
-					     sizeof(uint16));
-			init_unistr2(&data, *elogs, UNI_STR_TERMINATE);
+					     sizeof( uint16 ) );
+			init_unistr2( &data, *elogs, UNI_STR_TERMINATE );
 
-			regval_ctr_addvalue(values, "Sources", REG_MULTI_SZ,
-					     (char *)data.buffer,
+			regval_ctr_addvalue( values, "Sources", REG_MULTI_SZ,
+					     ( char * ) data.buffer,
 					     data.uni_str_len *
-					     sizeof(uint16));
+					     sizeof( uint16 ) );
 
-			evtfilepath = talloc_asprintf(ctx,
-					"%%SystemRoot%%\\system32\\config\\%s.tdb",
-					*elogs);
-			if (!evtfilepath) {
-				TALLOC_FREE(values);
-			}
-			init_unistr2(&data, evtfilepath, UNI_STR_TERMINATE);
-			regval_ctr_addvalue(values, "File", REG_EXPAND_SZ, (char *)data.buffer,
-					     data.uni_str_len * sizeof(uint16));
-			regdb_store_values(evtlogpath, values);
+			pstr_sprintf( evtfilepath, "%%SystemRoot%%\\system32\\config\\%s.tdb", *elogs );
+			init_unistr2( &data, evtfilepath, UNI_STR_TERMINATE );
+			regval_ctr_addvalue( values, "File", REG_EXPAND_SZ, ( char * ) data.buffer,
+					     data.uni_str_len * sizeof( uint16 ) );
+			regdb_store_values( evtlogpath, values );
 
 		}
 
-		TALLOC_FREE(values);
+		TALLOC_FREE( values );
 
 		/* now do the values under KEY_EVENTLOG/Application/Application */
-		TALLOC_FREE(evtlogpath);
-		evtlogpath = talloc_asprintf(ctx, "%s\\%s\\%s",
-			  KEY_EVENTLOG, *elogs, *elogs);
-		if (!evtlogpath) {
-			return false;
-		}
-		if (!(values = TALLOC_ZERO_P(ctx, REGVAL_CTR))) {
+		slprintf( evtlogpath, sizeof( evtlogpath ) - 1, "%s\\%s\\%s",
+			  KEY_EVENTLOG, *elogs, *elogs );
+		if ( !( values = TALLOC_ZERO_P( NULL, REGVAL_CTR ) ) ) {
 			DEBUG( 0, ( "talloc() failure!\n" ) );
 			return False;
 		}
 		DEBUG( 5,
 		       ( "Storing values to eventlog path of [%s]\n",
-			 evtlogpath));
-		regdb_fetch_values(evtlogpath, values);
-		if (!regval_ctr_key_exists( values, "CategoryCount")) {
+			 evtlogpath ) );
+		regdb_fetch_values( evtlogpath, values );
+		if ( !regval_ctr_key_exists( values, "CategoryCount" ) ) {
 
 			/* hard code some initial values */
 
@@ -174,20 +156,21 @@
 					     sizeof( uint16 ) );
 			regdb_store_values( evtlogpath, values );
 		}
-		TALLOC_FREE(values);
+		TALLOC_FREE( values );
 		elogs++;
 	}
 
-	return true;
+	return True;
+
 }
 
 /*********************************************************************
- for an eventlog, add in a source name. If the eventlog doesn't
- exist (not in the list) do nothing.   If a source for the log
+ for an eventlog, add in a source name. If the eventlog doesn't 
+ exist (not in the list) do nothing.   If a source for the log 
  already exists, change the information (remove, replace)
 *********************************************************************/
 
-bool eventlog_add_source( const char *eventlog, const char *sourcename,
+BOOL eventlog_add_source( const char *eventlog, const char *sourcename,
 			  const char *messagefile )
 {
 	/* Find all of the eventlogs, add keys for each of them */
@@ -196,17 +179,16 @@
 
 	const char **elogs = lp_eventlog_list(  );
 	char **wrklist, **wp;
-	char *evtlogpath = NULL;
+	pstring evtlogpath;
 	REGSUBKEY_CTR *subkeys;
 	REGVAL_CTR *values;
 	REGISTRY_VALUE *rval;
 	UNISTR2 data;
 	uint16 *msz_wp;
 	int mbytes, ii;
-	bool already_in;
+	BOOL already_in;
 	int i;
 	int numsources;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	if (!elogs) {
 		return False;
@@ -221,7 +203,7 @@
 		DEBUG( 0,
 		       ( "Eventlog [%s] not found in list of valid event logs\n",
 			 eventlog ) );
-		return false;	/* invalid named passed in */
+		return False;	/* invalid named passed in */
 	}
 
 	/* have to assume that the evenlog key itself exists at this point */
@@ -229,16 +211,12 @@
 
 	/* todo add to Sources */
 
-	if (!( values = TALLOC_ZERO_P(ctx, REGVAL_CTR))) {
-		DEBUG( 0, ( "talloc() failure!\n" ));
-		return false;
+	if ( !( values = TALLOC_ZERO_P( NULL, REGVAL_CTR ) ) ) {
+		DEBUG( 0, ( "talloc() failure!\n" ) );
+		return False;
 	}
 
-	evtlogpath = talloc_asprintf(ctx, "%s\\%s", KEY_EVENTLOG, eventlog);
-	if (!evtlogpath) {
-		TALLOC_FREE(values);
-		return false;
-	}
+	pstr_sprintf( evtlogpath, "%s\\%s", KEY_EVENTLOG, eventlog );
 
 	regdb_fetch_values( evtlogpath, values );
 
@@ -259,7 +237,7 @@
 
 	already_in = False;
 	wrklist = NULL;
-	dump_data( 1, rval->data_p, rval->size );
+	dump_data( 1, (const char *)rval->data_p, rval->size );
 	if ( ( numsources =
 	       regval_convert_multi_sz( ( uint16 * ) rval->data_p, rval->size,
 					&wrklist ) ) > 0 ) {
@@ -292,7 +270,7 @@
 
 	if ( !already_in ) {
 		/* make a new list with an additional entry; copy values, add another */
-		wp = TALLOC_ARRAY(ctx, char *, numsources + 2 );
+		wp = TALLOC_ARRAY( NULL, char *, numsources + 2 );
 
 		if ( !wp ) {
 			DEBUG( 0, ( "talloc() failed \n" ) );
@@ -302,29 +280,25 @@
 		*( wp + numsources ) = ( char * ) sourcename;
 		*( wp + numsources + 1 ) = NULL;
 		mbytes = regval_build_multi_sz( wp, &msz_wp );
-		dump_data( 1, ( uint8 * ) msz_wp, mbytes );
+		dump_data( 1, ( char * ) msz_wp, mbytes );
 		regval_ctr_addvalue( values, "Sources", REG_MULTI_SZ,
 				     ( char * ) msz_wp, mbytes );
 		regdb_store_values( evtlogpath, values );
-		TALLOC_FREE(msz_wp);
+		TALLOC_FREE( msz_wp );
 	} else {
 		DEBUG( 3,
 		       ( "Source name [%s] found in existing list of sources\n",
 			 sourcename ) );
 	}
-	TALLOC_FREE(values);
-	TALLOC_FREE(wrklist);	/*  */
+	TALLOC_FREE( values );
+	if ( wrklist )
+		TALLOC_FREE( wrklist );	/*  */
 
-	if ( !( subkeys = TALLOC_ZERO_P(ctx, REGSUBKEY_CTR ) ) ) {
+	if ( !( subkeys = TALLOC_ZERO_P( NULL, REGSUBKEY_CTR ) ) ) {
 		DEBUG( 0, ( "talloc() failure!\n" ) );
 		return False;
 	}
-	TALLOC_FREE(evtlogpath);
-	evtlogpath = talloc_asprintf(ctx, "%s\\%s", KEY_EVENTLOG, eventlog );
-	if (!evtlogpath) {
-		TALLOC_FREE(subkeys);
-		return false;
-	}
+	pstr_sprintf( evtlogpath, "%s\\%s", KEY_EVENTLOG, eventlog );
 
 	regdb_fetch_keys( evtlogpath, subkeys );
 
@@ -336,28 +310,23 @@
 		if ( !regdb_store_keys( evtlogpath, subkeys ) )
 			return False;
 	}
-	TALLOC_FREE(subkeys);
+	TALLOC_FREE( subkeys );
 
 	/* at this point KEY_EVENTLOG/<eventlog>/<sourcename> key is in there. Now need to add EventMessageFile */
 
 	/* now allocate room for the source's subkeys */
 
-	if ( !( subkeys = TALLOC_ZERO_P(ctx, REGSUBKEY_CTR ) ) ) {
+	if ( !( subkeys = TALLOC_ZERO_P( NULL, REGSUBKEY_CTR ) ) ) {
 		DEBUG( 0, ( "talloc() failure!\n" ) );
 		return False;
 	}
-	TALLOC_FREE(evtlogpath);
-	evtlogpath = talloc_asprintf(ctx, "%s\\%s\\%s",
-		  KEY_EVENTLOG, eventlog, sourcename);
-	if (!evtlogpath) {
-		TALLOC_FREE(subkeys);
-		return false;
-	}
+	slprintf( evtlogpath, sizeof( evtlogpath ) - 1, "%s\\%s\\%s",
+		  KEY_EVENTLOG, eventlog, sourcename );
 
 	regdb_fetch_keys( evtlogpath, subkeys );
 
 	/* now add the values to the KEY_EVENTLOG/Application form key */
-	if ( !( values = TALLOC_ZERO_P(ctx, REGVAL_CTR ) ) ) {
+	if ( !( values = TALLOC_ZERO_P( NULL, REGVAL_CTR ) ) ) {
 		DEBUG( 0, ( "talloc() failure!\n" ) );
 		return False;
 	}
@@ -374,7 +343,7 @@
 			     data.uni_str_len * sizeof( uint16 ) );
 	regdb_store_values( evtlogpath, values );
 
-	TALLOC_FREE(values);
+	TALLOC_FREE( values );
 
 	return True;
 }

Copied: branches/samba/upstream/source/registry/reg_frontend.c (from rev 1928, branches/samba/upstream/source/registry/reg_frontend.c)
===================================================================
--- branches/samba/upstream/source/registry/reg_frontend.c	                        (rev 0)
+++ branches/samba/upstream/source/registry/reg_frontend.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,429 @@
+/* 
+ *  Unix SMB/CIFS implementation.
+ *  Virtual Windows Registry Layer
+ *  Copyright (C) Gerald Carter                     2002-2005
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/* Implementation of registry frontend view functions. */
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_RPC_SRV
+
+extern REGISTRY_OPS printing_ops;
+extern REGISTRY_OPS eventlog_ops;
+extern REGISTRY_OPS shares_reg_ops;
+extern REGISTRY_OPS regdb_ops;		/* these are the default */
+
+/* array of REGISTRY_HOOK's which are read into a tree for easy access */
+/* #define REG_TDB_ONLY		1 */
+
+REGISTRY_HOOK reg_hooks[] = {
+#ifndef REG_TDB_ONLY 
+  { KEY_PRINTING,    		&printing_ops },
+  { KEY_PRINTING_2K, 		&printing_ops },
+  { KEY_PRINTING_PORTS, 	&printing_ops },
+  { KEY_SHARES,      		&shares_reg_ops },
+#endif
+  { NULL, NULL }
+};
+
+
+static struct generic_mapping reg_generic_map = 
+	{ REG_KEY_READ, REG_KEY_WRITE, REG_KEY_EXECUTE, REG_KEY_ALL };
+
+/********************************************************************
+********************************************************************/
+
+static NTSTATUS registry_access_check( SEC_DESC *sec_desc, NT_USER_TOKEN *token, 
+                                     uint32 access_desired, uint32 *access_granted )
+{
+	NTSTATUS result;
+
+	if ( geteuid() == sec_initial_uid() ) {
+		DEBUG(5,("registry_access_check: using root's token\n"));
+		token = get_root_nt_token();
+	}
+
+	se_map_generic( &access_desired, &reg_generic_map );
+	se_access_check( sec_desc, token, access_desired, access_granted, &result );
+
+	return result;
+}
+
+/********************************************************************
+********************************************************************/
+
+static SEC_DESC* construct_registry_sd( TALLOC_CTX *ctx )
+{
+	SEC_ACE ace[2];	
+	SEC_ACCESS mask;
+	size_t i = 0;
+	SEC_DESC *sd;
+	SEC_ACL *acl;
+	size_t sd_size;
+
+	/* basic access for Everyone */
+	
+	init_sec_access(&mask, REG_KEY_READ );
+	init_sec_ace(&ace[i++], &global_sid_World, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0);
+	
+	/* Full Access 'BUILTIN\Administrators' */
+	
+	init_sec_access(&mask, REG_KEY_ALL );
+	init_sec_ace(&ace[i++], &global_sid_Builtin_Administrators, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0);
+	
+	
+	/* create the security descriptor */
+	
+	if ( !(acl = make_sec_acl(ctx, NT4_ACL_REVISION, i, ace)) )
+		return NULL;
+
+	if ( !(sd = make_sec_desc(ctx, SEC_DESC_REVISION, SEC_DESC_SELF_RELATIVE, NULL, NULL, NULL, acl, &sd_size)) )
+		return NULL;
+
+	return sd;
+}
+
+
+/***********************************************************************
+ Open the registry database and initialize the REGISTRY_HOOK cache
+ ***********************************************************************/
+ 
+BOOL init_registry( void )
+{
+	int i;
+	
+	
+	if ( !regdb_init() ) {
+		DEBUG(0,("init_registry: failed to initialize the registry tdb!\n"));
+		return False;
+	}
+
+	/* build the cache tree of registry hooks */
+	
+	reghook_cache_init();
+	
+	for ( i=0; reg_hooks[i].keyname; i++ ) {
+		if ( !reghook_cache_add(&reg_hooks[i]) )
+			return False;
+	}
+
+	if ( DEBUGLEVEL >= 20 )
+		reghook_dump_cache(20);
+
+	/* add any keys for other services */
+
+	svcctl_init_keys();
+	eventlog_init_keys();
+	perfcount_init_keys();
+
+	/* close and let each smbd open up as necessary */
+
+	regdb_close();
+
+	return True;
+}
+
+/***********************************************************************
+ High level wrapper function for storing registry subkeys
+ ***********************************************************************/
+ 
+BOOL store_reg_keys( REGISTRY_KEY *key, REGSUBKEY_CTR *subkeys )
+{
+	if ( key->hook && key->hook->ops && key->hook->ops->store_subkeys )
+		return key->hook->ops->store_subkeys( key->name, subkeys );
+		
+	return False;
+
+}
+
+/***********************************************************************
+ High level wrapper function for storing registry values
+ ***********************************************************************/
+ 
+BOOL store_reg_values( REGISTRY_KEY *key, REGVAL_CTR *val )
+{
+	if ( check_dynamic_reg_values( key ) )
+		return False;
+
+	if ( key->hook && key->hook->ops && key->hook->ops->store_values )
+		return key->hook->ops->store_values( key->name, val );
+
+	return False;
+}
+
+
+/***********************************************************************
+ High level wrapper function for enumerating registry subkeys
+ Initialize the TALLOC_CTX if necessary
+ ***********************************************************************/
+
+int fetch_reg_keys( REGISTRY_KEY *key, REGSUBKEY_CTR *subkey_ctr )
+{
+	int result = -1;
+	
+	if ( key->hook && key->hook->ops && key->hook->ops->fetch_subkeys )
+		result = key->hook->ops->fetch_subkeys( key->name, subkey_ctr );
+
+	return result;
+}
+
+/***********************************************************************
+ retreive a specific subkey specified by index.  Caller is 
+ responsible for freeing memory
+ ***********************************************************************/
+
+BOOL fetch_reg_keys_specific( REGISTRY_KEY *key, char** subkey, uint32 key_index )
+{
+	static REGSUBKEY_CTR *ctr = NULL;
+	static pstring save_path;
+	char *s;
+	
+	*subkey = NULL;
+	
+	/* simple caching for performance; very basic heuristic */
+
+	DEBUG(8,("fetch_reg_keys_specific: Looking for key [%d] of  [%s]\n", key_index, key->name));
+	
+	if ( !ctr ) {
+		DEBUG(8,("fetch_reg_keys_specific: Initializing cache of subkeys for [%s]\n", key->name));
+
+		if ( !(ctr = TALLOC_ZERO_P( NULL, REGSUBKEY_CTR )) ) {
+			DEBUG(0,("fetch_reg_keys_specific: talloc() failed!\n"));
+			return False;
+		}
+		
+		pstrcpy( save_path, key->name );
+		
+		if ( fetch_reg_keys( key, ctr) == -1 )
+			return False;
+			
+	}
+	/* clear the cache when key_index == 0 or the path has changed */
+	else if ( !key_index || StrCaseCmp( save_path, key->name) ) {
+
+		DEBUG(8,("fetch_reg_keys_specific: Updating cache of subkeys for [%s]\n", key->name));
+		
+		TALLOC_FREE( ctr );
+
+		if ( !(ctr = TALLOC_ZERO_P( NULL, REGSUBKEY_CTR )) ) {
+			DEBUG(0,("fetch_reg_keys_specific: talloc() failed!\n"));
+			return False;
+		}
+		
+		pstrcpy( save_path, key->name );
+		
+		if ( fetch_reg_keys( key, ctr) == -1 )
+			return False;
+	}
+	
+	if ( !(s = regsubkey_ctr_specific_key( ctr, key_index )) )
+		return False;
+
+	*subkey = SMB_STRDUP( s );
+
+	return True;
+}
+
+/***********************************************************************
+ High level wrapper function for enumerating registry values
+ ***********************************************************************/
+
+int fetch_reg_values( REGISTRY_KEY *key, REGVAL_CTR *val )
+{
+	int result = -1;
+	
+	if ( key->hook && key->hook->ops && key->hook->ops->fetch_values )
+		result = key->hook->ops->fetch_values( key->name, val );
+	
+	/* if the backend lookup returned no data, try the dynamic overlay */
+	
+	if ( result == 0 ) {
+		result = fetch_dynamic_reg_values( key, val );
+
+		return ( result != -1 ) ? result : 0;
+	}
+	
+	return result;
+}
+
+
+/***********************************************************************
+ retreive a specific subkey specified by index.  Caller is 
+ responsible for freeing memory
+ ***********************************************************************/
+
+BOOL fetch_reg_values_specific( REGISTRY_KEY *key, REGISTRY_VALUE **val, uint32 val_index )
+{
+	static REGVAL_CTR 	*ctr = NULL;
+	static pstring		save_path;
+	REGISTRY_VALUE		*v;
+	
+	*val = NULL;
+	
+	/* simple caching for performance; very basic heuristic */
+	
+	if ( !ctr ) {
+		DEBUG(8,("fetch_reg_values_specific: Initializing cache of values for [%s]\n", key->name));
+
+		if ( !(ctr = TALLOC_ZERO_P( NULL, REGVAL_CTR )) ) {
+			DEBUG(0,("fetch_reg_values_specific: talloc() failed!\n"));
+			return False;
+		}
+
+		pstrcpy( save_path, key->name );
+		
+		if ( fetch_reg_values( key, ctr) == -1 )
+			return False;
+	}
+	/* clear the cache when val_index == 0 or the path has changed */
+	else if ( !val_index || !strequal(save_path, key->name) ) {
+
+		DEBUG(8,("fetch_reg_values_specific: Updating cache of values for [%s]\n", key->name));		
+		
+		TALLOC_FREE( ctr );
+
+		if ( !(ctr = TALLOC_ZERO_P( NULL, REGVAL_CTR )) ) {
+			DEBUG(0,("fetch_reg_values_specific: talloc() failed!\n"));
+			return False;
+		}
+
+		pstrcpy( save_path, key->name );
+		
+		if ( fetch_reg_values( key, ctr) == -1 )
+			return False;
+	}
+	
+	if ( !(v = regval_ctr_specific_value( ctr, val_index )) )
+		return False;
+
+	*val = dup_registry_value( v );
+
+	return True;
+}
+
+/***********************************************************************
+ High level access check for passing the required access mask to the 
+ underlying registry backend
+ ***********************************************************************/
+
+BOOL regkey_access_check( REGISTRY_KEY *key, uint32 requested, uint32 *granted, NT_USER_TOKEN *token )
+{
+	/* use the default security check if the backend has not defined its own */
+	
+	if ( !(key->hook && key->hook->ops && key->hook->ops->reg_access_check) ) {
+		SEC_DESC *sec_desc;
+		NTSTATUS status;
+		
+		if ( !(sec_desc = construct_registry_sd( get_talloc_ctx() )) )
+			return False;
+		
+		status = registry_access_check( sec_desc, token, requested, granted );		
+		
+		return NT_STATUS_IS_OK(status);
+	}
+	
+	return key->hook->ops->reg_access_check( key->name, requested, granted, token );
+}
+
+/***********************************************************************
+***********************************************************************/
+
+WERROR regkey_open_internal( REGISTRY_KEY **regkey, const char *path, 
+                             NT_USER_TOKEN *token, uint32 access_desired )
+{
+	WERROR     	result = WERR_OK;
+	REGISTRY_KEY    *keyinfo;
+	REGSUBKEY_CTR	*subkeys = NULL;
+	uint32 access_granted;
+	
+	if ( !(W_ERROR_IS_OK(result = regdb_open()) ) )
+		return result;
+
+	DEBUG(7,("regkey_open_internal: name = [%s]\n", path));
+
+	if ( !(*regkey = TALLOC_ZERO_P(NULL, REGISTRY_KEY)) ) {
+		regdb_close();
+		return WERR_NOMEM;
+	}
+		
+	keyinfo = *regkey;
+		
+	/* initialization */
+	
+	keyinfo->type = REG_KEY_GENERIC;
+	if (!(keyinfo->name = talloc_strdup(keyinfo, path))) {
+		result = WERR_NOMEM;
+		goto done;
+	}
+
+	/* Tag this as a Performance Counter Key */
+
+	if( StrnCaseCmp(path, KEY_HKPD, strlen(KEY_HKPD)) == 0 )
+		keyinfo->type = REG_KEY_HKPD;
+	
+	/* Look up the table of registry I/O operations */
+
+	if ( !(keyinfo->hook = reghook_cache_find( keyinfo->name )) ) {
+		DEBUG(0,("open_registry_key: Failed to assigned a REGISTRY_HOOK to [%s]\n",
+			keyinfo->name ));
+		result = WERR_BADFILE;
+		goto done;
+	}
+	
+	/* check if the path really exists; failed is indicated by -1 */
+	/* if the subkey count failed, bail out */
+
+	if ( !(subkeys = TALLOC_ZERO_P( keyinfo, REGSUBKEY_CTR )) ) {
+		result = WERR_NOMEM;
+		goto done;
+	}
+
+	if ( fetch_reg_keys( keyinfo, subkeys ) == -1 )  {
+		result = WERR_BADFILE;
+		goto done;
+	}
+	
+	TALLOC_FREE( subkeys );
+
+	if ( !regkey_access_check( keyinfo, access_desired, &access_granted, token ) ) {
+		result = WERR_ACCESS_DENIED;
+		goto done;
+	}
+	
+	keyinfo->access_granted = access_granted;
+
+done:
+	if ( !W_ERROR_IS_OK(result) ) {
+		regkey_close_internal( *regkey );
+	}
+
+	return result;
+}
+
+/*******************************************************************
+*******************************************************************/
+
+WERROR regkey_close_internal( REGISTRY_KEY *key )
+{
+	TALLOC_FREE( key );
+	regdb_close();
+
+	return WERR_OK;
+}

Deleted: branches/samba/upstream/source/registry/reg_init_basic.c
===================================================================
--- branches/samba/upstream/source/registry/reg_init_basic.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/registry/reg_init_basic.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,55 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * Registry helper routines
- * Copyright (C) Michael Adam 2008
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 3 of the License, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "includes.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_REGISTRY
-
-WERROR registry_init_common(void)
-{
-	WERROR werr;
-
-	werr = regdb_init();
-	if (!W_ERROR_IS_OK(werr)) {
-		DEBUG(0, ("Failed to initialize the registry: %s\n",
-			  dos_errstr(werr)));
-		goto done;
-	}
-
-	werr = reghook_cache_init();
-	if (!W_ERROR_IS_OK(werr)) {
-		DEBUG(0, ("Failed to initialize the reghook cache: %s\n",
-			  dos_errstr(werr)));
-	}
-
-done:
-	return werr;
-}
-
-WERROR registry_init_basic(void)
-{
-	WERROR werr;
-
-	DEBUG(10, ("registry_init_basic called\n"));
-
-	werr = registry_init_common();
-	regdb_close();
-	return werr;
-}

Deleted: branches/samba/upstream/source/registry/reg_init_full.c
===================================================================
--- branches/samba/upstream/source/registry/reg_init_full.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/registry/reg_init_full.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,105 +0,0 @@
-/* 
- *  Unix SMB/CIFS implementation.
- *  Virtual Windows Registry Layer
- *  Copyright (C) Gerald Carter                     2002-2005
- *  Copyright (C) Michael Adam                      2008
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *  
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *  
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-/* Initialize the registry with all available backends. */
-
-#include "includes.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_REGISTRY
-
-extern REGISTRY_OPS printing_ops;
-extern REGISTRY_OPS eventlog_ops;
-extern REGISTRY_OPS shares_reg_ops;
-extern REGISTRY_OPS smbconf_reg_ops;
-extern REGISTRY_OPS netlogon_params_reg_ops;
-extern REGISTRY_OPS prod_options_reg_ops;
-extern REGISTRY_OPS tcpip_params_reg_ops;
-extern REGISTRY_OPS hkpt_params_reg_ops;
-extern REGISTRY_OPS current_version_reg_ops;
-extern REGISTRY_OPS perflib_reg_ops;
-extern REGISTRY_OPS regdb_ops;		/* these are the default */
-
-/* array of REGISTRY_HOOK's which are read into a tree for easy access */
-/* #define REG_TDB_ONLY		1 */
-
-REGISTRY_HOOK reg_hooks[] = {
-#ifndef REG_TDB_ONLY 
-  { KEY_PRINTING,    		&printing_ops },
-  { KEY_PRINTING_2K, 		&printing_ops },
-  { KEY_PRINTING_PORTS, 	&printing_ops },
-  { KEY_SHARES,      		&shares_reg_ops },
-  { KEY_SMBCONF,      		&smbconf_reg_ops },
-  { KEY_NETLOGON_PARAMS,	&netlogon_params_reg_ops },
-  { KEY_PROD_OPTIONS,		&prod_options_reg_ops },
-  { KEY_TCPIP_PARAMS,		&tcpip_params_reg_ops },
-  { KEY_HKPT,			&hkpt_params_reg_ops },
-  { KEY_CURRENT_VERSION,	&current_version_reg_ops },
-  { KEY_PERFLIB,		&perflib_reg_ops },
-#endif
-  { NULL, NULL }
-};
-
-/***********************************************************************
- Open the registry database and initialize the REGISTRY_HOOK cache
- with all available backens.
- ***********************************************************************/
-
-WERROR registry_init_full(void)
-{
-	int i;
-	WERROR werr;
-
-	werr = registry_init_common();
-	if (!W_ERROR_IS_OK(werr)) {
-		goto fail;
-	}
-
-	/* setup the necessary keys and values */
-
-	werr = init_registry_data();
-	if (!W_ERROR_IS_OK(werr)) {
-		DEBUG(0, ("Failed to initialize data in registry!\n"));
-		goto fail;
-	}
-
-	/* build the cache tree of registry hooks */
-
-	for ( i=0; reg_hooks[i].keyname; i++ ) {
-		werr = reghook_cache_add(reg_hooks[i].keyname, reg_hooks[i].ops);
-		if (!W_ERROR_IS_OK(werr)) {
-			goto fail;
-		}
-	}
-
-	if ( DEBUGLEVEL >= 20 )
-		reghook_dump_cache(20);
-
-	/* add any keys for other services */
-
-	svcctl_init_keys();
-	eventlog_init_keys();
-	perfcount_init_keys();
-
-fail:
-	/* close and let each smbd open up as necessary */
-	regdb_close();
-	return werr;
-}

Deleted: branches/samba/upstream/source/registry/reg_init_smbconf.c
===================================================================
--- branches/samba/upstream/source/registry/reg_init_smbconf.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/registry/reg_init_smbconf.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,104 +0,0 @@
-/*
- * Unix SMB/CIFS implementation.
- * Registry helper routines
- * Copyright (C) Michael Adam 2007
- * 
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 3 of the License, or (at your option)
- * any later version.
- * 
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
- * more details.
- * 
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "includes.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_REGISTRY
-
-extern REGISTRY_OPS smbconf_reg_ops;
-
-/*
- * create a fake token just with enough rights to
- * locally access the registry:
- *
- * - builtin administrators sid
- * - disk operators privilege
- */
-NTSTATUS registry_create_admin_token(TALLOC_CTX *mem_ctx,
-				     NT_USER_TOKEN **ptoken)
-{
-	NTSTATUS status;
-	NT_USER_TOKEN *token = NULL;
-
-	if (ptoken == NULL) {
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	token = TALLOC_ZERO_P(mem_ctx, NT_USER_TOKEN);
-	if (token == NULL) {
-		DEBUG(1, ("talloc failed\n"));
-		status = NT_STATUS_NO_MEMORY;
-		goto done;
-	}
-	token->privileges = se_disk_operators;
-	status = add_sid_to_array(token, &global_sid_Builtin_Administrators,
-				  &token->user_sids, &token->num_sids);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(1, ("Error adding builtin administrators sid "
-			  "to fake token.\n"));
-		goto done;
-	}
-
-	*ptoken = token;
-
-done:
-	return status;
-}
-
-/*
- * init the smbconf portion of the registry.
- * for use in places where not the whole registry is needed,
- * e.g. utils/net_conf.c and loadparm.c
- */
-WERROR registry_init_smbconf(const char *keyname)
-{
-	WERROR werr;
-
-	DEBUG(10, ("registry_init_smbconf called\n"));
-
-	if (keyname == NULL) {
-		DEBUG(10, ("registry_init_smbconf: defaulting to key '%s'\n",
-			   KEY_SMBCONF));
-		keyname = KEY_SMBCONF;
-	}
-
-	werr = registry_init_common();
-	if (!W_ERROR_IS_OK(werr)) {
-		goto done;
-	}
-
-	werr = init_registry_key(keyname);
-	if (!W_ERROR_IS_OK(werr)) {
-		DEBUG(1, ("Failed to initialize registry key '%s': %s\n",
-			  keyname, dos_errstr(werr)));
-		goto done;
-	}
-
-	werr = reghook_cache_add(keyname, &smbconf_reg_ops);
-	if (!W_ERROR_IS_OK(werr)) {
-		DEBUG(1, ("Failed to add smbconf reghooks to reghook cache: "
-			  "%s\n", dos_errstr(werr)));
-		goto done;
-	}
-
-done:
-	regdb_close();
-	return werr;
-}

Modified: branches/samba/upstream/source/registry/reg_objects.c
===================================================================
--- branches/samba/upstream/source/registry/reg_objects.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/registry/reg_objects.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,20 +1,21 @@
-/*
+/* 
  *  Unix SMB/CIFS implementation.
  *  Virtual Windows Registry Layer
  *  Copyright (C) Gerald Carter                     2002-2005
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
- *
+ *  
  *  This program is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
- *
+ *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 /* Implementation of registry frontend view functions. */
@@ -22,16 +23,16 @@
 #include "includes.h"
 
 #undef DBGC_CLASS
-#define DBGC_CLASS DBGC_REGISTRY
+#define DBGC_CLASS DBGC_RPC_SRV
 
 /**********************************************************************
 
  Note that the REGSUB_CTR and REGVAL_CTR objects *must* be talloc()'d
- since the methods use the object pointer as the talloc context for
+ since the methods use the object pointer as the talloc context for 
  internal private data.
 
  There is no longer a regXXX_ctr_intit() and regXXX_ctr_destroy()
- pair of functions.  Simply TALLOC_ZERO_P() and TALLOC_FREE() the
+ pair of functions.  Simply TALLOC_ZERO_P() and TALLOC_FREE() the 
  object.
 
  **********************************************************************/
@@ -40,41 +41,39 @@
  Add a new key to the array
  **********************************************************************/
 
-WERROR regsubkey_ctr_addkey( REGSUBKEY_CTR *ctr, const char *keyname )
+int regsubkey_ctr_addkey( REGSUBKEY_CTR *ctr, const char *keyname )
 {
-	char **newkeys;
+	if ( !keyname )
+		return ctr->num_subkeys;
 
-	if ( !keyname ) {
-		return WERR_OK;
-	}
-
 	/* make sure the keyname is not already there */
 
-	if ( regsubkey_ctr_key_exists( ctr, keyname ) ) {
-		return WERR_OK;
+	if ( regsubkey_ctr_key_exists( ctr, keyname ) )
+		return ctr->num_subkeys;
+		
+	/* allocate a space for the char* in the array */
+		
+	if (ctr->subkeys == NULL) {
+		ctr->subkeys = TALLOC_P(ctr, char *);
+	} else {
+		ctr->subkeys = TALLOC_REALLOC_ARRAY(ctr, ctr->subkeys, char *, ctr->num_subkeys+1);
 	}
 
-	if (!(newkeys = TALLOC_REALLOC_ARRAY(ctr, ctr->subkeys, char *,
-					     ctr->num_subkeys+1))) {
-		return WERR_NOMEM;
+	if (!ctr->subkeys) {
+		ctr->num_subkeys = 0;
+		return 0;
 	}
 
-	ctr->subkeys = newkeys;
-
-	if (!(ctr->subkeys[ctr->num_subkeys] = talloc_strdup(ctr->subkeys,
-							     keyname ))) {
-		/*
-		 * Don't shrink the new array again, this wastes a pointer
-		 */
-		return WERR_NOMEM;
-	}
+	/* allocate the string and save it in the array */
+	
+	ctr->subkeys[ctr->num_subkeys] = talloc_strdup( ctr, keyname );
 	ctr->num_subkeys++;
-
-	return WERR_OK;
+	
+	return ctr->num_subkeys;
 }
-
+ 
  /***********************************************************************
- Delete a key from the array
+ Add a new key to the array
  **********************************************************************/
 
 int regsubkey_ctr_delkey( REGSUBKEY_CTR *ctr, const char *keyname )
@@ -90,16 +89,15 @@
 		if ( strequal( ctr->subkeys[i], keyname ) )
 			break;
 	}
-
+	
 	if ( i == ctr->num_subkeys )
 		return ctr->num_subkeys;
 
 	/* update if we have any keys left */
 	ctr->num_subkeys--;
 	if ( i < ctr->num_subkeys )
-		memmove(&ctr->subkeys[i], &ctr->subkeys[i+1],
-			sizeof(char*) * (ctr->num_subkeys-i));
-
+		memmove( &ctr->subkeys[i], &ctr->subkeys[i+1], sizeof(char*) * (ctr->num_subkeys-i) );
+	
 	return ctr->num_subkeys;
 }
 
@@ -107,10 +105,10 @@
  Check for the existance of a key
  **********************************************************************/
 
-bool regsubkey_ctr_key_exists( REGSUBKEY_CTR *ctr, const char *keyname )
+BOOL regsubkey_ctr_key_exists( REGSUBKEY_CTR *ctr, const char *keyname )
 {
 	int 	i;
-
+	
 	if (!ctr->subkeys) {
 		return False;
 	}
@@ -119,7 +117,7 @@
 		if ( strequal( ctr->subkeys[i],keyname ) )
 			return True;
 	}
-
+	
 	return False;
 }
 
@@ -140,7 +138,7 @@
 {
 	if ( ! (key_index < ctr->num_subkeys) )
 		return NULL;
-
+		
 	return ctr->subkeys[key_index];
 }
 
@@ -165,49 +163,49 @@
 REGISTRY_VALUE* dup_registry_value( REGISTRY_VALUE *val )
 {
 	REGISTRY_VALUE 	*copy = NULL;
-
+	
 	if ( !val )
 		return NULL;
-
+	
 	if ( !(copy = SMB_MALLOC_P( REGISTRY_VALUE)) ) {
 		DEBUG(0,("dup_registry_value: malloc() failed!\n"));
 		return NULL;
 	}
-
+	
 	/* copy all the non-pointer initial data */
-
+	
 	memcpy( copy, val, sizeof(REGISTRY_VALUE) );
-
+	
 	copy->size = 0;
 	copy->data_p = NULL;
-
-	if ( val->data_p && val->size )
+	
+	if ( val->data_p && val->size ) 
 	{
 		if ( !(copy->data_p = (uint8 *)memdup( val->data_p,
 						       val->size )) ) {
-			DEBUG(0,("dup_registry_value: memdup() failed for [%d] "
-				 "bytes!\n", val->size));
+			DEBUG(0,("dup_registry_value: memdup() failed for [%d] bytes!\n",
+				val->size));
 			SAFE_FREE( copy );
 			return NULL;
 		}
 		copy->size = val->size;
 	}
-
-	return copy;
+	
+	return copy;	
 }
 
 /**********************************************************************
- free the memory allocated to a REGISTRY_VALUE
+ free the memory allocated to a REGISTRY_VALUE 
  *********************************************************************/
-
+ 
 void free_registry_value( REGISTRY_VALUE *val )
 {
 	if ( !val )
 		return;
-
+		
 	SAFE_FREE( val->data_p );
 	SAFE_FREE( val );
-
+	
 	return;
 }
 
@@ -252,7 +250,7 @@
 {
 	if ( !(idx < ctr->num_values) )
 		return NULL;
-
+		
 	return ctr->values[idx];
 }
 
@@ -260,52 +258,22 @@
  Check for the existance of a value
  **********************************************************************/
 
-bool regval_ctr_key_exists( REGVAL_CTR *ctr, const char *value )
+BOOL regval_ctr_key_exists( REGVAL_CTR *ctr, const char *value )
 {
 	int 	i;
-
+	
 	for ( i=0; i<ctr->num_values; i++ ) {
 		if ( strequal( ctr->values[i]->valuename, value) )
 			return True;
 	}
-
+	
 	return False;
 }
-
 /***********************************************************************
- * compose a REGISTRY_VALUE from input data
- **********************************************************************/
-
-REGISTRY_VALUE *regval_compose(TALLOC_CTX *ctx, const char *name, uint16 type,
-			       const char *data_p, size_t size)
-{
-	REGISTRY_VALUE *regval = TALLOC_P(ctx, REGISTRY_VALUE);
-
-	if (regval == NULL) {
-		return NULL;
-	}
-
-	fstrcpy(regval->valuename, name);
-	regval->type = type;
-	if (size) {
-		regval->data_p = (uint8 *)TALLOC_MEMDUP(regval, data_p, size);
-		if (!regval->data_p) {
-			TALLOC_FREE(regval);
-			return NULL;
-		}
-	} else {
-		regval->data_p = NULL;
-	}
-	regval->size = size;
-
-	return regval;
-}
-
-/***********************************************************************
  Add a new registry value to the array
  **********************************************************************/
 
-int regval_ctr_addvalue( REGVAL_CTR *ctr, const char *name, uint16 type,
+int regval_ctr_addvalue( REGVAL_CTR *ctr, const char *name, uint16 type, 
                          const char *data_p, size_t size )
 {
 	if ( !name )
@@ -316,13 +284,11 @@
 	regval_ctr_delvalue( ctr, name );
 
 	/* allocate a slot in the array of pointers */
-
+		
 	if (  ctr->num_values == 0 ) {
 		ctr->values = TALLOC_P( ctr, REGISTRY_VALUE *);
 	} else {
-		ctr->values = TALLOC_REALLOC_ARRAY(ctr, ctr->values,
-						   REGISTRY_VALUE *,
-						   ctr->num_values+1);
+		ctr->values = TALLOC_REALLOC_ARRAY( ctr, ctr->values, REGISTRY_VALUE *, ctr->num_values+1 );
 	}
 
 	if (!ctr->values) {
@@ -331,13 +297,28 @@
 	}
 
 	/* allocate a new value and store the pointer in the arrya */
-
-	ctr->values[ctr->num_values] = regval_compose(ctr, name, type, data_p,
-						      size);
-	if (ctr->values[ctr->num_values] == NULL) {
+		
+	ctr->values[ctr->num_values] = TALLOC_P( ctr, REGISTRY_VALUE);
+	if (!ctr->values[ctr->num_values]) {
 		ctr->num_values = 0;
 		return 0;
 	}
+
+	/* init the value */
+	
+	fstrcpy( ctr->values[ctr->num_values]->valuename, name );
+	ctr->values[ctr->num_values]->type = type;
+	if (size) {
+		ctr->values[ctr->num_values]->data_p = (uint8 *)TALLOC_MEMDUP(
+			ctr, data_p, size );
+		if (!ctr->values[ctr->num_values]->data_p) {
+			ctr->num_values = 0;
+			return 0;
+		}
+	} else {
+		ctr->values[ctr->num_values]->data_p = NULL;
+	}
+	ctr->values[ctr->num_values]->size = size;
 	ctr->num_values++;
 
 	return ctr->num_values;
@@ -350,8 +331,43 @@
 int regval_ctr_copyvalue( REGVAL_CTR *ctr, REGISTRY_VALUE *val )
 {
 	if ( val ) {
-		regval_ctr_addvalue(ctr, val->valuename, val->type,
-				    (char *)val->data_p, val->size);
+		/* allocate a slot in the array of pointers */
+		
+		if (  ctr->num_values == 0 ) {
+			ctr->values = TALLOC_P( ctr, REGISTRY_VALUE *);
+		} else {
+			ctr->values = TALLOC_REALLOC_ARRAY( ctr, ctr->values, REGISTRY_VALUE *, ctr->num_values+1 );
+		}
+
+		if (!ctr->values) {
+			ctr->num_values = 0;
+			return 0;
+		}
+
+		/* allocate a new value and store the pointer in the arrya */
+		
+		ctr->values[ctr->num_values] = TALLOC_P( ctr, REGISTRY_VALUE);
+		if (!ctr->values[ctr->num_values]) {
+			ctr->num_values = 0;
+			return 0;
+		}
+
+		/* init the value */
+	
+		fstrcpy( ctr->values[ctr->num_values]->valuename, val->valuename );
+		ctr->values[ctr->num_values]->type = val->type;
+		if (val->size) {
+			ctr->values[ctr->num_values]->data_p = (uint8 *)TALLOC_MEMDUP(
+				ctr, val->data_p, val->size );
+			if (!ctr->values[ctr->num_values]->data_p) {
+				ctr->num_values = 0;
+				return 0;
+			}
+		} else {
+			ctr->values[ctr->num_values]->data_p = NULL;
+		}
+		ctr->values[ctr->num_values]->size = val->size;
+		ctr->num_values++;
 	}
 
 	return ctr->num_values;
@@ -365,23 +381,22 @@
 int regval_ctr_delvalue( REGVAL_CTR *ctr, const char *name )
 {
 	int 	i;
-
+	
 	for ( i=0; i<ctr->num_values; i++ ) {
 		if ( strequal( ctr->values[i]->valuename, name ) )
 			break;
 	}
-
+	
 	/* just return if we don't find it */
-
+	
 	if ( i == ctr->num_values )
 		return ctr->num_values;
-
+	
 	/* If 'i' was not the last element, just shift everything down one */
 	ctr->num_values--;
 	if ( i < ctr->num_values )
-		memmove(&ctr->values[i], &ctr->values[i+1],
-			sizeof(REGISTRY_VALUE*)*(ctr->num_values-i));
-
+		memmove( &ctr->values[i], &ctr->values[i+1], sizeof(REGISTRY_VALUE*)*(ctr->num_values-i) );
+	
 	return ctr->num_values;
 }
 
@@ -393,14 +408,14 @@
 REGISTRY_VALUE* regval_ctr_getvalue( REGVAL_CTR *ctr, const char *name )
 {
 	int 	i;
-
+	
 	/* search for the value */
-
+	
 	for ( i=0; i<ctr->num_values; i++ ) {
 		if ( strequal( ctr->values[i]->valuename, name ) )
 			return ctr->values[i];
 	}
-
+	
 	return NULL;
 }
 
@@ -411,9 +426,9 @@
 uint32 regval_dword( REGISTRY_VALUE *val )
 {
 	uint32 data;
-
+	
 	data = IVAL( regval_data_p(val), 0 );
-
+	
 	return data;
 }
 
@@ -421,11 +436,11 @@
  return the data_p as a character string
  **********************************************************************/
 
-char *regval_sz(REGISTRY_VALUE *val)
+char* regval_sz( REGISTRY_VALUE *val )
 {
-	char *data = NULL;
+	static pstring data;
 
-	rpcstr_pull_talloc(talloc_tos(), &data,
-			regval_data_p(val), regval_size(val),0);
+	rpcstr_pull( data, regval_data_p(val), sizeof(data), regval_size(val), 0 );
+	
 	return data;
 }

Modified: branches/samba/upstream/source/registry/reg_perfcount.c
===================================================================
--- branches/samba/upstream/source/registry/reg_perfcount.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/registry/reg_perfcount.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -16,13 +16,14 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
 
 #undef DBGC_CLASS
-#define DBGC_CLASS DBGC_REGISTRY
+#define DBGC_CLASS DBGC_RPC_SRV
 
 #define PERFCOUNT_MAX_LEN 256
 
@@ -35,23 +36,19 @@
 /*********************************************************************
 *********************************************************************/
 
-static char *counters_directory(const char *dbname)
+static char* counters_directory( const char *dbname )
 {
-	char *path = NULL;
-	char *ret = NULL;
-	TALLOC_CTX *ctx = talloc_tos();
-
-	if (!dbname)
+	static pstring fname;
+	fstring path;
+	
+	if ( !dbname )
 		return NULL;
-
-	path = talloc_asprintf(ctx, "%s/%s", PERFCOUNTDIR, dbname);
-	if (!path) {
-		return NULL;
-	}
-
-	ret = talloc_strdup(ctx, state_path(path));
-	TALLOC_FREE(path);
-	return ret;
+	
+	fstr_sprintf( path, "%s/%s", PERFCOUNTDIR, dbname );
+	
+	pstrcpy( fname, lock_path( path ) );
+	
+	return fname;
 }
 
 /*********************************************************************
@@ -59,7 +56,7 @@
 
 void perfcount_init_keys( void )
 {
-	char *p = state_path(PERFCOUNTDIR);
+	char *p = lock_path(PERFCOUNTDIR);
 
 	/* no registry keys; just create the perfmon directory */
 	
@@ -101,7 +98,8 @@
 	   even_num+1 perf_counter<even_num>_help
 	   and so on.
 	   So last_counter becomes num_counters*2, and last_help will be last_counter+1 */
-	kbuf = string_tdb_data(key);
+	kbuf.dptr = key;
+	kbuf.dsize = strlen(key);
 	dbuf = tdb_fetch(names, kbuf);
 	if(dbuf.dptr == NULL)
 	{
@@ -168,7 +166,8 @@
 
 	memset(temp, 0, sizeof(temp));
 	snprintf(temp, sizeof(temp), "%d", keyval);
-	kbuf = string_tdb_data(temp);
+	kbuf.dptr = temp;
+	kbuf.dsize = strlen(temp);
 	dbuf = tdb_fetch(tdb, kbuf);
 	if(dbuf.dptr == NULL)
 	{
@@ -185,7 +184,7 @@
 		buffer_size = 0;
 		return buffer_size;
 	}
-	init_unistr2(&name_index, (const char *)kbuf.dptr, UNI_STR_TERMINATE);
+	init_unistr2(&name_index, kbuf.dptr, UNI_STR_TERMINATE);
 	memcpy(buf1+buffer_size, (char *)name_index.buffer, working_size);
 	buffer_size += working_size;
 	/* Now encode the actual name */
@@ -310,7 +309,8 @@
 	else 
 		snprintf(buf, buflen, "%d", key_part1);
 
-	*key = string_tdb_data(buf);
+	key->dptr = buf;
+	key->dsize = strlen(buf);
 
 	return;
 }
@@ -318,7 +318,7 @@
 /*********************************************************************
 *********************************************************************/
 
-static bool _reg_perfcount_isparent(TDB_DATA data)
+static BOOL _reg_perfcount_isparent(TDB_DATA data)
 {
 	if(data.dsize > 0)
 	{
@@ -333,7 +333,7 @@
 /*********************************************************************
 *********************************************************************/
 
-static bool _reg_perfcount_ischild(TDB_DATA data)
+static BOOL _reg_perfcount_ischild(TDB_DATA data)
 {
 	if(data.dsize > 0)
 	{
@@ -361,21 +361,20 @@
     
 	memset(buf, 0, PERFCOUNT_MAX_LEN);
 	memcpy(buf, data.dptr, data.dsize);
-	SAFE_FREE(data.dptr);
 	return (uint32)atoi(buf);
 }
 
 /*********************************************************************
 *********************************************************************/
 
-static bool _reg_perfcount_add_object(PERF_DATA_BLOCK *block,
+static BOOL _reg_perfcount_add_object(PERF_DATA_BLOCK *block,
 				      prs_struct *ps,
 				      int num,
 				      TDB_DATA data,
 				      TDB_CONTEXT *names)
 {
 	int i;
-	bool success = True;
+	BOOL success = True;
 	PERF_OBJECT_TYPE *obj;
 
 	block->objects = (PERF_OBJECT_TYPE *)TALLOC_REALLOC_ARRAY(ps->mem_ctx,
@@ -410,7 +409,7 @@
 /*********************************************************************
 *********************************************************************/
 
-bool _reg_perfcount_get_counter_data(TDB_DATA key, TDB_DATA *data)
+BOOL _reg_perfcount_get_counter_data(TDB_DATA key, TDB_DATA *data)
 {
 	TDB_CONTEXT *counters;
 	const char *fname = counters_directory( DATA_DB );
@@ -472,7 +471,7 @@
 /*********************************************************************
 *********************************************************************/
 
-static bool _reg_perfcount_get_counter_info(PERF_DATA_BLOCK *block,
+static BOOL _reg_perfcount_get_counter_info(PERF_DATA_BLOCK *block,
 					    prs_struct *ps,
 					    int CounterIndex,
 					    PERF_OBJECT_TYPE *obj,
@@ -601,7 +600,7 @@
 /*********************************************************************
 *********************************************************************/
 
-static bool _reg_perfcount_add_counter(PERF_DATA_BLOCK *block,
+static BOOL _reg_perfcount_add_counter(PERF_DATA_BLOCK *block,
 				       prs_struct *ps,
 				       int num,
 				       TDB_DATA data,
@@ -610,7 +609,7 @@
 	char *begin, *end, *start, *stop;
 	int parent;
 	PERF_OBJECT_TYPE *obj;
-	bool success = True;
+	BOOL success = True;
 	char buf[PERFCOUNT_MAX_LEN];
     
 	obj = NULL;
@@ -663,7 +662,7 @@
 /*********************************************************************
 *********************************************************************/
 
-bool _reg_perfcount_get_instance_info(PERF_INSTANCE_DEFINITION *inst,
+BOOL _reg_perfcount_get_instance_info(PERF_INSTANCE_DEFINITION *inst,
 				      prs_struct *ps,
 				      int instId,
 				      PERF_OBJECT_TYPE *obj,
@@ -671,17 +670,14 @@
 {
 	TDB_DATA key, data;
 	char buf[PERFCOUNT_MAX_LEN], temp[PERFCOUNT_MAX_LEN];
-	smb_ucs2_t *name = NULL;
+	wpstring name;
 	int pad;
 
 	/* First grab the instance data from the data file */
 	memset(temp, 0, PERFCOUNT_MAX_LEN);
 	snprintf(temp, PERFCOUNT_MAX_LEN, "i%d", instId);
 	_reg_perfcount_make_key(&key, buf, PERFCOUNT_MAX_LEN, obj->ObjectNameTitleIndex, temp);
-	if (!_reg_perfcount_get_counter_data(key, &data)) {
-		DEBUG(3, ("_reg_perfcount_get_counter_data failed\n"));
-		return false;
-	}
+	_reg_perfcount_get_counter_data(key, &data);
 	if(data.dptr == NULL)
 	{
 		DEBUG(3, ("_reg_perfcount_get_instance_info: No instance data for instance [%s].\n",
@@ -714,13 +710,9 @@
 	else
 	{
 		memset(buf, 0, PERFCOUNT_MAX_LEN);
-		memcpy(buf, data.dptr, MIN(PERFCOUNT_MAX_LEN-1,data.dsize));
-		buf[PERFCOUNT_MAX_LEN-1] = '\0';
-		inst->NameLength = rpcstr_push_talloc(ps->mem_ctx, &name, buf);
-		if (inst->NameLength == (uint32_t)-1 || !name) {
-			SAFE_FREE(data.dptr);
-			return False;
-		}
+		memcpy(buf, data.dptr, data.dsize);
+		rpcstr_push((void *)name, buf, sizeof(name), STR_TERMINATE);
+		inst->NameLength = (strlen_w(name) * 2) + 2;
 		inst->data = TALLOC_REALLOC_ARRAY(ps->mem_ctx,
 						  inst->data,
 						  uint8,
@@ -757,7 +749,7 @@
 /*********************************************************************
 *********************************************************************/
 
-bool _reg_perfcount_add_instance(PERF_OBJECT_TYPE *obj,
+BOOL _reg_perfcount_add_instance(PERF_OBJECT_TYPE *obj,
 				 prs_struct *ps,
 				 int instInd,
 				 TDB_CONTEXT *names)
@@ -786,7 +778,7 @@
 					  int base_index,
 					  TDB_CONTEXT *names)
 {
-	bool success;
+	BOOL success;
 	int i, j, retval = 0;
 	char keybuf[PERFCOUNT_MAX_LEN];
 	TDB_DATA key, data;
@@ -823,7 +815,7 @@
 /*********************************************************************
 *********************************************************************/
 
-static bool _reg_perfcount_get_64(SMB_BIG_UINT *retval,
+static BOOL _reg_perfcount_get_64(SMB_BIG_UINT *retval,
 				  TDB_CONTEXT *tdb,
 				  int key_part1,
 				  const char *key_part2)
@@ -852,12 +844,12 @@
 /*********************************************************************
 *********************************************************************/
 
-static bool _reg_perfcount_init_data_block_perf(PERF_DATA_BLOCK *block,
+static BOOL _reg_perfcount_init_data_block_perf(PERF_DATA_BLOCK *block,
 						TDB_CONTEXT *names)
 {
 	SMB_BIG_UINT PerfFreq, PerfTime, PerfTime100nSec;
 	TDB_CONTEXT *counters;
-	bool status = False;
+	BOOL status = False;
 	const char *fname = counters_directory( DATA_DB );
     
 	counters = tdb_open_log(fname, 0, TDB_DEFAULT, O_RDONLY, 0444);
@@ -899,18 +891,14 @@
 /*********************************************************************
 *********************************************************************/
 
-static bool _reg_perfcount_init_data_block(PERF_DATA_BLOCK *block,
+static BOOL _reg_perfcount_init_data_block(PERF_DATA_BLOCK *block,
 					   prs_struct *ps, TDB_CONTEXT *names)
 {
-	smb_ucs2_t *temp = NULL;
+	wpstring temp;
 	time_t tm;
-
-	if (rpcstr_push_talloc(ps->mem_ctx, &temp, "PERF")==(size_t)-1) {
-		return false;
-	}
-	if (!temp) {
-		return false;
-	}
+ 
+	memset(temp, 0, sizeof(temp));
+	rpcstr_push((void *)temp, "PERF", sizeof(temp), STR_TERMINATE);
 	memcpy(block->Signature, temp, strlen_w(temp) *2);
 
 	if(ps->bigendian_data == RPC_BIG_ENDIAN)
@@ -1043,7 +1031,7 @@
 uint32 reg_perfcount_get_perf_data_block(uint32 base_index, 
 					 prs_struct *ps, 
 					 PERF_DATA_BLOCK *block,
-					 const char *object_ids)
+					 char *object_ids)
 {
 	uint32 buffer_size = 0;
 	const char *fname = counters_directory( NAMES_DB );
@@ -1090,7 +1078,7 @@
 /*********************************************************************
 *********************************************************************/
 
-static bool _reg_perfcount_marshall_perf_data_block(prs_struct *ps, PERF_DATA_BLOCK block, int depth)
+static BOOL _reg_perfcount_marshall_perf_data_block(prs_struct *ps, PERF_DATA_BLOCK block, int depth)
 {
 	int i;
 	prs_debug(ps, depth, "", "_reg_perfcount_marshall_perf_data_block");
@@ -1144,7 +1132,7 @@
 /*********************************************************************
 *********************************************************************/
 
-static bool _reg_perfcount_marshall_perf_counters(prs_struct *ps,
+static BOOL _reg_perfcount_marshall_perf_counters(prs_struct *ps,
 						  PERF_OBJECT_TYPE object,
 						  int depth)
 {
@@ -1188,7 +1176,7 @@
 /*********************************************************************
 *********************************************************************/
 
-static bool _reg_perfcount_marshall_perf_counter_data(prs_struct *ps, 
+static BOOL _reg_perfcount_marshall_perf_counter_data(prs_struct *ps, 
 						      PERF_COUNTER_BLOCK counter_data, 
 						      int depth)
 {
@@ -1211,7 +1199,7 @@
 /*********************************************************************
 *********************************************************************/
 
-static bool _reg_perfcount_marshall_perf_instances(prs_struct *ps,
+static BOOL _reg_perfcount_marshall_perf_instances(prs_struct *ps,
 						   PERF_OBJECT_TYPE object, 
 						   int depth)
 {
@@ -1252,7 +1240,7 @@
 /*********************************************************************
 *********************************************************************/
 
-static bool _reg_perfcount_marshall_perf_objects(prs_struct *ps, PERF_DATA_BLOCK block, int depth)
+static BOOL _reg_perfcount_marshall_perf_objects(prs_struct *ps, PERF_DATA_BLOCK block, int depth)
 {
 	int obj;
 
@@ -1322,7 +1310,7 @@
 /*********************************************************************
 *********************************************************************/
 
-static bool _reg_perfcount_marshall_hkpd(prs_struct *ps, PERF_DATA_BLOCK block)
+static BOOL _reg_perfcount_marshall_hkpd(prs_struct *ps, PERF_DATA_BLOCK block)
 {
 	int depth = 0;
 	if(_reg_perfcount_marshall_perf_data_block(ps, block, depth) == True)
@@ -1336,15 +1324,11 @@
 /*********************************************************************
 *********************************************************************/
 
-WERROR reg_perfcount_get_hkpd(prs_struct *ps, uint32 max_buf_size, uint32 *outbuf_len, const char *object_ids)
+WERROR reg_perfcount_get_hkpd(prs_struct *ps, uint32 max_buf_size, uint32 *outbuf_len, char *object_ids)
 {
 	/*
 	 * For a detailed description of the layout of this structure,
 	 * see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/perfmon/base/performance_data_format.asp
-	 *
-	 * By 2006-11-23 this link did not work anymore, I found something
-	 * promising under
-	 * http://msdn2.microsoft.com/en-us/library/aa373105.aspx -- vl
 	 */
 	PERF_DATA_BLOCK block;
 	uint32 buffer_size, base_index; 

Copied: branches/samba/upstream/source/registry/reg_printing.c (from rev 1928, branches/samba/upstream/source/registry/reg_printing.c)
===================================================================
--- branches/samba/upstream/source/registry/reg_printing.c	                        (rev 0)
+++ branches/samba/upstream/source/registry/reg_printing.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,1245 @@
+/* 
+ *  Unix SMB/CIFS implementation.
+ *  Virtual Windows Registry Layer
+ *  Copyright (C) Gerald Carter                     2002-2005
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/* Implementation of registry virtual views for printing information */
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_RPC_SRV
+
+/* registrt paths used in the print_registry[] */
+
+#define KEY_MONITORS		"HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT/MONITORS"
+#define KEY_FORMS		"HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT/FORMS"
+#define KEY_CONTROL_PRINTERS	"HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT/PRINTERS"
+#define KEY_ENVIRONMENTS	"HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT/ENVIRONMENTS"
+#define KEY_CONTROL_PRINT	"HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT"
+#define KEY_WINNT_PRINTERS	"HKLM/SOFTWARE/MICROSOFT/WINDOWS NT/CURRENTVERSION/PRINT/PRINTERS"
+#define KEY_WINNT_PRINT		"HKLM/SOFTWARE/MICROSOFT/WINDOWS NT/CURRENTVERSION/PRINT"
+#define KEY_PORTS		"HKLM/SOFTWARE/MICROSOFT/WINDOWS NT/CURRENTVERSION/PORTS"
+
+/* callback table for various registry paths below the ones we service in this module */
+	
+struct reg_dyn_tree {
+	/* full key path in normalized form */
+	const char *path;
+	
+	/* callbscks for fetch/store operations */
+	int ( *fetch_subkeys) ( const char *path, REGSUBKEY_CTR *subkeys );
+	BOOL (*store_subkeys) ( const char *path, REGSUBKEY_CTR *subkeys );
+	int  (*fetch_values)  ( const char *path, REGVAL_CTR *values );
+	BOOL (*store_values)  ( const char *path, REGVAL_CTR *values );
+};
+
+/*********************************************************************
+ *********************************************************************
+ ** Utility Functions
+ *********************************************************************
+ *********************************************************************/
+
+/***********************************************************************
+ simple function to prune a pathname down to the basename of a file 
+ **********************************************************************/
+ 
+static char* dos_basename ( char *path )
+{
+	char *p;
+	
+	if ( !(p = strrchr( path, '\\' )) )
+		p = path;
+	else
+		p++;
+		
+	return p;
+}
+
+/*********************************************************************
+ *********************************************************************
+ ** "HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT/FORMS"
+ *********************************************************************
+ *********************************************************************/
+
+static int key_forms_fetch_keys( const char *key, REGSUBKEY_CTR *subkeys )
+{
+	char *p = reg_remaining_path( key + strlen(KEY_FORMS) );
+	
+	/* no keys below Forms */
+	
+	if ( p )
+		return -1;
+		
+	return 0;
+}
+
+/**********************************************************************
+ *********************************************************************/
+
+static int key_forms_fetch_values( const char *key, REGVAL_CTR *values )
+{
+	uint32 		data[8];
+	int		i, num_values, form_index = 1;
+	nt_forms_struct *forms_list = NULL;
+	nt_forms_struct *form;
+		
+	DEBUG(10,("print_values_forms: key=>[%s]\n", key ? key : "NULL" ));
+	
+	num_values = get_ntforms( &forms_list );
+		
+	DEBUG(10,("hive_forms_fetch_values: [%d] user defined forms returned\n",
+		num_values));
+
+	/* handle user defined forms */
+				
+	for ( i=0; i<num_values; i++ ) {
+		form = &forms_list[i];
+			
+		data[0] = form->width;
+		data[1] = form->length;
+		data[2] = form->left;
+		data[3] = form->top;
+		data[4] = form->right;
+		data[5] = form->bottom;
+		data[6] = form_index++;
+		data[7] = form->flag;
+			
+		regval_ctr_addvalue( values, form->name, REG_BINARY, (char*)data, sizeof(data) );	
+	}
+		
+	SAFE_FREE( forms_list );
+	forms_list = NULL;
+		
+	/* handle built-on forms */
+		
+	num_values = get_builtin_ntforms( &forms_list );
+		
+	DEBUG(10,("print_subpath_values_forms: [%d] built-in forms returned\n",
+		num_values));
+			
+	for ( i=0; i<num_values; i++ ) {
+		form = &forms_list[i];
+			
+		data[0] = form->width;
+		data[1] = form->length;
+		data[2] = form->left;
+		data[3] = form->top;
+		data[4] = form->right;
+		data[5] = form->bottom;
+		data[6] = form_index++;
+		data[7] = form->flag;
+					
+		regval_ctr_addvalue( values, form->name, REG_BINARY, (char*)data, sizeof(data) );
+	}
+		
+	SAFE_FREE( forms_list );
+	
+	return regval_ctr_numvals( values );
+}
+
+/*********************************************************************
+ *********************************************************************
+ ** "HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT/PRINTERS"
+ ** "HKLM/SOFTWARE/MICROSOFT/WINDOWS NT/CURRENTVERSION/PRINT/PRINTERS"
+ *********************************************************************
+ *********************************************************************/
+
+/*********************************************************************
+ strip off prefix for printers key.  DOes return a pointer to static 
+ memory.
+ *********************************************************************/
+
+static char* strip_printers_prefix( const char *key )
+{
+	char *subkeypath;
+	pstring path;
+	
+	pstrcpy( path, key );
+	normalize_reg_path( path );
+
+	/* normalizing the path does not change length, just key delimiters and case */
+
+	if ( strncmp( path, KEY_WINNT_PRINTERS, strlen(KEY_WINNT_PRINTERS) ) == 0 )
+		subkeypath = reg_remaining_path( key + strlen(KEY_WINNT_PRINTERS) );
+	else
+		subkeypath = reg_remaining_path( key + strlen(KEY_CONTROL_PRINTERS) );
+		
+	return subkeypath;
+}
+
+/*********************************************************************
+ *********************************************************************/
+ 
+static int key_printers_fetch_keys( const char *key, REGSUBKEY_CTR *subkeys )
+{
+	int n_services = lp_numservices();	
+	int snum;
+	fstring sname;
+	int i;
+	int num_subkeys = 0;
+	char *printers_key;
+	char *printername, *printerdatakey;
+	NT_PRINTER_INFO_LEVEL *printer = NULL;
+	fstring *subkey_names = NULL;
+	
+	DEBUG(10,("key_printers_fetch_keys: key=>[%s]\n", key ? key : "NULL" ));
+	
+	printers_key = strip_printers_prefix( key );	
+	
+	if ( !printers_key ) {
+		/* enumerate all printers */
+		
+		for (snum=0; snum<n_services; snum++) {
+			if ( !(lp_snum_ok(snum) && lp_print_ok(snum) ) )
+				continue;
+
+			/* don't report the [printers] share */
+
+			if ( strequal( lp_servicename(snum), PRINTERS_NAME ) )
+				continue;
+				
+			fstrcpy( sname, lp_servicename(snum) );
+				
+			regsubkey_ctr_addkey( subkeys, sname );
+		}
+		
+		num_subkeys = regsubkey_ctr_numkeys( subkeys );
+		goto done;
+	}
+
+	/* get information for a specific printer */
+	
+	if (!reg_split_path( printers_key, &printername, &printerdatakey )) {
+		return -1;
+	}
+
+	/* validate the printer name */
+
+	for (snum=0; snum<n_services; snum++) {
+		if ( !lp_snum_ok(snum) || !lp_print_ok(snum) )
+			continue;
+		if (strequal( lp_servicename(snum), printername ) )
+			break;
+	}
+
+	if ( snum>=n_services
+		|| !W_ERROR_IS_OK( get_a_printer(NULL, &printer, 2, printername) ) ) 
+	{
+		return -1;
+	}
+
+	num_subkeys = get_printer_subkeys( printer->info_2->data, printerdatakey?printerdatakey:"", &subkey_names );
+	
+	for ( i=0; i<num_subkeys; i++ )
+		regsubkey_ctr_addkey( subkeys, subkey_names[i] );
+	
+	free_a_printer( &printer, 2 );
+			
+	/* no other subkeys below here */
+
+done:	
+	SAFE_FREE( subkey_names );
+	
+	return num_subkeys;
+}
+
+/**********************************************************************
+ Take a list of names and call add_printer_hook() if necessary
+ Note that we do this a little differently from Windows since the 
+ keyname is the sharename and not the printer name.
+ *********************************************************************/
+
+static BOOL add_printers_by_registry( REGSUBKEY_CTR *subkeys )
+{
+	int i, num_keys, snum;
+	char *printername;
+	NT_PRINTER_INFO_LEVEL_2 info2;
+	NT_PRINTER_INFO_LEVEL printer;
+	
+	ZERO_STRUCT( info2 );
+	printer.info_2 = &info2;
+	
+	num_keys = regsubkey_ctr_numkeys( subkeys );
+	
+	become_root();
+	for ( i=0; i<num_keys; i++ ) {
+		printername = regsubkey_ctr_specific_key( subkeys, i );
+		snum = find_service( printername );
+		
+		/* just verify a valied snum for now */
+		if ( snum == -1 ) {
+			fstrcpy( info2.printername, printername );
+			fstrcpy( info2.sharename, printername );
+			if ( !add_printer_hook( NULL, &printer ) ) {
+				DEBUG(0,("add_printers_by_registry: Failed to add printer [%s]\n",
+					printername));
+			}	
+		}
+	}
+	unbecome_root();
+
+	return True;
+}
+
+/**********************************************************************
+ *********************************************************************/
+
+static BOOL key_printers_store_keys( const char *key, REGSUBKEY_CTR *subkeys )
+{
+	char *printers_key;
+	char *printername, *printerdatakey;
+	NT_PRINTER_INFO_LEVEL *printer = NULL;
+	int i, num_subkeys, num_existing_keys;
+	char *subkeyname;
+	fstring *existing_subkeys = NULL;
+	
+	printers_key = strip_printers_prefix( key );
+	
+	if ( !printers_key ) {
+		/* have to deal with some new or deleted printer */
+		return add_printers_by_registry( subkeys );
+	}
+	
+	if (!reg_split_path( printers_key, &printername, &printerdatakey )) {
+		return False;
+	}
+	
+	/* lookup the printer */
+	
+	if ( !W_ERROR_IS_OK(get_a_printer(NULL, &printer, 2, printername)) ) {
+		DEBUG(0,("key_printers_store_keys: Tried to store subkey for bad printername %s\n", 
+			printername));
+		return False;
+	}
+	
+	/* get the top level printer keys */
+	
+	num_existing_keys = get_printer_subkeys( printer->info_2->data, "", &existing_subkeys );
+	
+	for ( i=0; i<num_existing_keys; i++ ) {
+	
+		/* remove the key if it has been deleted */
+		
+		if ( !regsubkey_ctr_key_exists( subkeys, existing_subkeys[i] ) ) {
+			DEBUG(5,("key_printers_store_keys: deleting key %s\n", 
+				existing_subkeys[i]));
+			delete_printer_key( printer->info_2->data, existing_subkeys[i] );
+		}
+	}
+
+	num_subkeys = regsubkey_ctr_numkeys( subkeys );
+	for ( i=0; i<num_subkeys; i++ ) {
+		subkeyname = regsubkey_ctr_specific_key(subkeys, i);
+		/* add any missing printer keys */
+		if ( lookup_printerkey(printer->info_2->data, subkeyname) == -1 ) {
+			DEBUG(5,("key_printers_store_keys: adding key %s\n", 
+				existing_subkeys[i]));
+			if ( add_new_printer_key( printer->info_2->data, subkeyname ) == -1 ) {
+				SAFE_FREE( existing_subkeys );
+				return False;
+			}
+		}
+	}
+	
+	/* write back to disk */
+	
+	mod_a_printer( printer, 2 );
+	
+	/* cleanup */
+	
+	if ( printer )
+		free_a_printer( &printer, 2 );
+
+	SAFE_FREE( existing_subkeys );
+
+	return True;
+}
+
+/**********************************************************************
+ *********************************************************************/
+
+static void fill_in_printer_values( NT_PRINTER_INFO_LEVEL_2 *info2, REGVAL_CTR *values )
+{
+	DEVICEMODE	*devmode;
+	prs_struct	prs;
+	uint32		offset;
+	UNISTR2		data;
+	char 		*p;
+	uint32 printer_status = PRINTER_STATUS_OK;
+	
+	regval_ctr_addvalue( values, "Attributes",       REG_DWORD, (char*)&info2->attributes,       sizeof(info2->attributes) );
+	regval_ctr_addvalue( values, "Priority",         REG_DWORD, (char*)&info2->priority,         sizeof(info2->attributes) );
+	regval_ctr_addvalue( values, "ChangeID",         REG_DWORD, (char*)&info2->changeid,         sizeof(info2->changeid) );
+	regval_ctr_addvalue( values, "Default Priority", REG_DWORD, (char*)&info2->default_priority, sizeof(info2->default_priority) );
+	
+	/* lie and say everything is ok since we don't want to call print_queue_length() to get the real status */
+	regval_ctr_addvalue( values, "Status",           REG_DWORD, (char*)&printer_status,          sizeof(info2->status) );
+
+	regval_ctr_addvalue( values, "StartTime",        REG_DWORD, (char*)&info2->starttime,        sizeof(info2->starttime) );
+	regval_ctr_addvalue( values, "UntilTime",        REG_DWORD, (char*)&info2->untiltime,        sizeof(info2->untiltime) );
+
+	/* strip the \\server\ from this string */
+	if ( !(p = strrchr( info2->printername, '\\' ) ) )
+		p = info2->printername;
+	else
+		p++;
+	init_unistr2( &data, p, UNI_STR_TERMINATE);
+	regval_ctr_addvalue( values, "Name", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
+
+	init_unistr2( &data, info2->location, UNI_STR_TERMINATE);
+	regval_ctr_addvalue( values, "Location", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
+
+	init_unistr2( &data, info2->comment, UNI_STR_TERMINATE);
+	regval_ctr_addvalue( values, "Description", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
+
+	init_unistr2( &data, info2->parameters, UNI_STR_TERMINATE);
+	regval_ctr_addvalue( values, "Parameters", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
+
+	init_unistr2( &data, info2->portname, UNI_STR_TERMINATE);
+	regval_ctr_addvalue( values, "Port", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
+
+	init_unistr2( &data, info2->sharename, UNI_STR_TERMINATE);
+	regval_ctr_addvalue( values, "Share Name", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
+
+	init_unistr2( &data, info2->drivername, UNI_STR_TERMINATE);
+	regval_ctr_addvalue( values, "Printer Driver", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
+
+	init_unistr2( &data, info2->sepfile, UNI_STR_TERMINATE);
+	regval_ctr_addvalue( values, "Separator File", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
+
+	init_unistr2( &data, "WinPrint", UNI_STR_TERMINATE);
+	regval_ctr_addvalue( values, "Print Processor",  REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
+
+	init_unistr2( &data, "RAW", UNI_STR_TERMINATE);
+	regval_ctr_addvalue( values, "Datatype", REG_SZ, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
+
+		
+	/* use a prs_struct for converting the devmode and security 
+	   descriptor to REG_BINARY */
+	
+	prs_init( &prs, RPC_MAX_PDU_FRAG_LEN, values, MARSHALL);
+
+	/* stream the device mode */
+		
+	if ( (devmode = construct_dev_mode( info2->sharename )) != NULL ) {
+		if ( spoolss_io_devmode( "devmode", &prs, 0, devmode ) ) {
+			offset = prs_offset( &prs );
+			regval_ctr_addvalue( values, "Default Devmode", REG_BINARY, prs_data_p(&prs), offset );
+		}
+	}
+		
+	prs_mem_clear( &prs );
+	prs_set_offset( &prs, 0 );
+		
+	/* stream the printer security descriptor */
+	
+	if ( info2->secdesc_buf && info2->secdesc_buf->len )  {
+		if ( sec_io_desc("sec_desc", &info2->secdesc_buf->sec, &prs, 0 ) ) {
+			offset = prs_offset( &prs );
+			regval_ctr_addvalue( values, "Security", REG_BINARY, prs_data_p(&prs), offset );
+		}
+	}
+
+	prs_mem_free( &prs );
+
+	return;		
+}
+
+/**********************************************************************
+ *********************************************************************/
+
+static int key_printers_fetch_values( const char *key, REGVAL_CTR *values )
+{
+	int 		num_values;
+	char		*printers_key;
+	char		*printername, *printerdatakey;
+	NT_PRINTER_INFO_LEVEL 	*printer = NULL;
+	NT_PRINTER_DATA	*p_data;
+	int		i, key_index;
+	
+	printers_key = strip_printers_prefix( key );	
+	
+	/* top level key values stored in the registry has no values */
+	
+	if ( !printers_key ) {
+		/* normalize to the 'HKLM\SOFTWARE\...\Print\Printers' ket */
+		return regdb_fetch_values( KEY_WINNT_PRINTERS, values );
+	}
+	
+	/* lookup the printer object */
+	
+	if (!reg_split_path( printers_key, &printername, &printerdatakey )) {
+		return -1;
+	}
+	
+	if ( !W_ERROR_IS_OK( get_a_printer(NULL, &printer, 2, printername) ) )
+		goto done;
+		
+	if ( !printerdatakey ) {
+		fill_in_printer_values( printer->info_2, values );
+		goto done;
+	}
+		
+	/* iterate over all printer data keys and fill the regval container */
+	
+	p_data = printer->info_2->data;
+	if ( (key_index = lookup_printerkey( p_data, printerdatakey )) == -1  ) {
+		/* failure....should never happen if the client has a valid open handle first */
+		DEBUG(10,("key_printers_fetch_values: Unknown keyname [%s]\n", printerdatakey));
+		if ( printer )
+			free_a_printer( &printer, 2 );
+		return -1;
+	}
+	
+	num_values = regval_ctr_numvals( p_data->keys[key_index].values );	
+	for ( i=0; i<num_values; i++ )
+		regval_ctr_copyvalue( values, regval_ctr_specific_value(p_data->keys[key_index].values, i) );
+			
+
+done:
+	if ( printer )
+		free_a_printer( &printer, 2 );
+		
+	return regval_ctr_numvals( values );
+}
+
+/**********************************************************************
+ *********************************************************************/
+
+#define REG_IDX_ATTRIBUTES		1
+#define REG_IDX_PRIORITY		2
+#define REG_IDX_DEFAULT_PRIORITY	3
+#define REG_IDX_CHANGEID		4
+#define REG_IDX_STATUS			5
+#define REG_IDX_STARTTIME		6
+#define REG_IDX_NAME			7
+#define REG_IDX_LOCATION		8
+#define REG_IDX_DESCRIPTION		9
+#define REG_IDX_PARAMETERS		10
+#define REG_IDX_PORT			12
+#define REG_IDX_SHARENAME		13
+#define REG_IDX_DRIVER			14
+#define REG_IDX_SEP_FILE		15
+#define REG_IDX_PRINTPROC		16
+#define REG_IDX_DATATYPE		17
+#define REG_IDX_DEVMODE			18
+#define REG_IDX_SECDESC			19
+#define REG_IDX_UNTILTIME		20
+
+struct {
+	const char *name;
+	int index;	
+} printer_values_map[] = {
+	{ "Attributes", 	REG_IDX_ATTRIBUTES },
+	{ "Priority", 		REG_IDX_PRIORITY },
+	{ "Default Priority", 	REG_IDX_DEFAULT_PRIORITY },
+	{ "ChangeID", 		REG_IDX_CHANGEID },
+	{ "Status", 		REG_IDX_STATUS },
+	{ "StartTime", 		REG_IDX_STARTTIME },
+	{ "UntilTime",	 	REG_IDX_UNTILTIME },
+	{ "Name", 		REG_IDX_NAME },
+	{ "Location", 		REG_IDX_LOCATION },
+	{ "Description", 	REG_IDX_DESCRIPTION },
+	{ "Parameters", 	REG_IDX_PARAMETERS },
+	{ "Port", 		REG_IDX_PORT },
+	{ "Share Name", 	REG_IDX_SHARENAME },
+	{ "Printer Driver", 	REG_IDX_DRIVER },
+	{ "Separator File", 	REG_IDX_SEP_FILE },
+	{ "Print Processor", 	REG_IDX_PRINTPROC },
+	{ "Datatype", 		REG_IDX_DATATYPE },
+	{ "Default Devmode", 	REG_IDX_DEVMODE },
+	{ "Security", 		REG_IDX_SECDESC },
+	{ NULL, -1 }
+};
+
+
+static int find_valuename_index( const char *valuename )
+{
+	int i;
+	
+	for ( i=0; printer_values_map[i].name; i++ ) {
+		if ( strequal( valuename, printer_values_map[i].name ) )
+			return printer_values_map[i].index;
+	}
+	
+	return -1;
+}
+
+/**********************************************************************
+ *********************************************************************/
+
+static void convert_values_to_printer_info_2( NT_PRINTER_INFO_LEVEL_2 *printer2, REGVAL_CTR *values )
+{
+	int num_values = regval_ctr_numvals( values );
+	uint32 value_index;
+	REGISTRY_VALUE *val;
+	int i;
+	
+	for ( i=0; i<num_values; i++ ) {
+		val = regval_ctr_specific_value( values, i );
+		value_index = find_valuename_index( regval_name( val ) );
+		
+		switch( value_index ) {
+			case REG_IDX_ATTRIBUTES:
+				printer2->attributes = (uint32)(*regval_data_p(val));
+				break;
+			case REG_IDX_PRIORITY:
+				printer2->priority = (uint32)(*regval_data_p(val));
+				break;
+			case REG_IDX_DEFAULT_PRIORITY:
+				printer2->default_priority = (uint32)(*regval_data_p(val));
+				break;
+			case REG_IDX_CHANGEID:
+				printer2->changeid = (uint32)(*regval_data_p(val));
+				break;
+			case REG_IDX_STARTTIME:
+				printer2->starttime = (uint32)(*regval_data_p(val));
+				break;
+			case REG_IDX_UNTILTIME:
+				printer2->untiltime = (uint32)(*regval_data_p(val));
+				break;
+			case REG_IDX_NAME:
+				rpcstr_pull( printer2->printername, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
+				break;
+			case REG_IDX_LOCATION:
+				rpcstr_pull( printer2->location, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
+				break;
+			case REG_IDX_DESCRIPTION:
+				rpcstr_pull( printer2->comment, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
+				break;
+			case REG_IDX_PARAMETERS:
+				rpcstr_pull( printer2->parameters, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
+				break;
+			case REG_IDX_PORT:
+				rpcstr_pull( printer2->portname, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
+				break;
+			case REG_IDX_SHARENAME:
+				rpcstr_pull( printer2->sharename, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
+				break;
+			case REG_IDX_DRIVER:
+				rpcstr_pull( printer2->drivername, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
+				break;
+			case REG_IDX_SEP_FILE:
+				rpcstr_pull( printer2->sepfile, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
+				break;
+			case REG_IDX_PRINTPROC:
+				rpcstr_pull( printer2->printprocessor, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
+				break;
+			case REG_IDX_DATATYPE:
+				rpcstr_pull( printer2->datatype, regval_data_p(val), sizeof(fstring), regval_size(val), 0 );
+				break;
+			case REG_IDX_DEVMODE:
+				break;
+			case REG_IDX_SECDESC:
+				break;		
+			default:
+				/* unsupported value...throw away */
+				DEBUG(8,("convert_values_to_printer_info_2: Unsupported registry value [%s]\n", 
+					regval_name( val ) ));
+		}
+	}
+	
+	return;
+}	
+
+/**********************************************************************
+ *********************************************************************/
+
+static BOOL key_printers_store_values( const char *key, REGVAL_CTR *values )
+{
+	char *printers_key;
+	char *printername, *keyname;
+	NT_PRINTER_INFO_LEVEL   *printer = NULL;
+	WERROR result;
+	
+	printers_key = strip_printers_prefix( key );
+	
+	/* values in the top level key get stored in the registry */
+
+	if ( !printers_key ) {
+		/* normalize on the 'HKLM\SOFTWARE\....\Print\Printers' key */
+		return regdb_store_values( KEY_WINNT_PRINTERS, values );
+	}
+	
+	if (!reg_split_path( printers_key, &printername, &keyname )) {
+		return False;
+	}
+
+	if ( !W_ERROR_IS_OK(get_a_printer(NULL, &printer, 2, printername) ) )
+		return False;
+
+	/* deal with setting values directly under the printername */
+
+	if ( !keyname ) {
+		convert_values_to_printer_info_2( printer->info_2, values );
+	}
+	else {
+		int num_values = regval_ctr_numvals( values );
+		int i;
+		REGISTRY_VALUE *val;
+		
+		delete_printer_key( printer->info_2->data, keyname );
+		
+		/* deal with any subkeys */
+		for ( i=0; i<num_values; i++ ) {
+			val = regval_ctr_specific_value( values, i );
+			result = set_printer_dataex( printer, keyname, 
+				regval_name( val ),
+				regval_type( val ),
+				regval_data_p( val ),
+				regval_size( val ) );
+			if ( !W_ERROR_IS_OK(result) ) {
+				DEBUG(0,("key_printers_store_values: failed to set printer data [%s]!\n",
+					keyname));
+				free_a_printer( &printer, 2 );
+				return False;
+			}
+		}
+	}
+
+	result = mod_a_printer( printer, 2 );
+
+	free_a_printer( &printer, 2 );
+
+	return W_ERROR_IS_OK(result);
+}
+
+/*********************************************************************
+ *********************************************************************
+ ** "HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT/ENVIRONMENTS"
+ *********************************************************************
+ *********************************************************************/
+
+static int key_driver_fetch_keys( const char *key, REGSUBKEY_CTR *subkeys )
+{
+	const char *environments[] = {
+		"Windows 4.0",
+		"Windows NT x86",
+		"Windows NT R4000",
+		"Windows NT Alpha_AXP",
+		"Windows NT PowerPC",
+		"Windows IA64",
+		"Windows x64",
+		NULL };
+	fstring *drivers = NULL;
+	int i, env_index, num_drivers;
+	char *keystr, *base, *subkeypath;
+	pstring key2;
+	int num_subkeys = -1;
+	int version;
+
+	DEBUG(10,("key_driver_fetch_keys key=>[%s]\n", key ? key : "NULL" ));
+	
+	keystr = reg_remaining_path( key + strlen(KEY_ENVIRONMENTS) );	
+	
+	/* list all possible architectures */
+	
+	if ( !keystr ) {
+		for ( num_subkeys=0; environments[num_subkeys]; num_subkeys++ ) 
+			regsubkey_ctr_addkey( subkeys, 	environments[num_subkeys] );
+
+		return num_subkeys;
+	}
+	
+	/* we are dealing with a subkey of "Environments */
+	
+	pstrcpy( key2, keystr );
+	keystr = key2;
+	if (!reg_split_path( keystr, &base, &subkeypath )) {
+		return -1;
+	}
+	
+	/* sanity check */
+	
+	for ( env_index=0; environments[env_index]; env_index++ ) {
+		if ( strequal( environments[env_index], base ) )
+			break;
+	}
+	if ( !environments[env_index] )
+		return -1;
+	
+	/* ...\Print\Environements\...\ */
+	
+	if ( !subkeypath ) {
+		regsubkey_ctr_addkey( subkeys, "Drivers" );
+		regsubkey_ctr_addkey( subkeys, "Print Processors" );
+				
+		return 2;
+	}
+	
+	/* more of the key path to process */
+	
+	keystr = subkeypath;
+	if (!reg_split_path( keystr, &base, &subkeypath )) {
+		return -1;
+	}
+		
+	/* ...\Print\Environements\...\Drivers\ */
+	
+	if ( !subkeypath ) {
+		if ( strequal(base, "Drivers") ) {
+			switch ( env_index ) {
+				case 0:	/* Win9x */
+					regsubkey_ctr_addkey( subkeys, "Version-0" );
+					break;
+				default: /* Windows NT based systems */
+					regsubkey_ctr_addkey( subkeys, "Version-2" );
+					regsubkey_ctr_addkey( subkeys, "Version-3" );
+					break;			
+			}
+		
+			return regsubkey_ctr_numkeys( subkeys );
+		} else if ( strequal(base, "Print Processors") ) {
+			if ( env_index == 1 || env_index == 5 || env_index == 6 )
+				regsubkey_ctr_addkey( subkeys, "winprint" );
+				
+			return regsubkey_ctr_numkeys( subkeys );
+		} else
+			return -1;	/* bad path */
+	}
+	
+	/* we finally get to enumerate the drivers */
+	
+	/* only one possible subkey below PrintProc key */
+
+	if ( strequal(base, "Print Processors") ) {
+		keystr = subkeypath;
+		if (!reg_split_path( keystr, &base, &subkeypath )) {
+			return -1;
+		}
+
+		/* no subkeys below this point */
+
+		if ( subkeypath )
+			return -1;
+
+		/* only allow one keyname here -- 'winprint' */
+
+		return strequal( base, "winprint" ) ? 0 : -1;
+	}
+	
+	/* only dealing with drivers from here on out */
+
+	keystr = subkeypath;
+	if (!reg_split_path( keystr, &base, &subkeypath )) {
+		return -1;
+	}
+
+	version = atoi(&base[strlen(base)-1]);
+			
+	switch (env_index) {
+	case 0:
+		if ( version != 0 )
+			return -1;
+		break;
+	default:
+		if ( version != 2 && version != 3 )
+			return -1;
+		break;
+	}
+
+	
+	if ( !subkeypath ) {
+		num_drivers = get_ntdrivers( &drivers, environments[env_index], version );
+		for ( i=0; i<num_drivers; i++ )
+			regsubkey_ctr_addkey( subkeys, drivers[i] );
+			
+		return regsubkey_ctr_numkeys( subkeys );	
+	}	
+	
+	/* if anything else left, just say if has no subkeys */
+	
+	DEBUG(1,("key_driver_fetch_keys unhandled key [%s] (subkey == %s\n", 
+		key, subkeypath ));
+	
+	return 0;
+}
+
+
+/**********************************************************************
+ *********************************************************************/
+
+static void fill_in_driver_values( NT_PRINTER_DRIVER_INFO_LEVEL_3 *info3, REGVAL_CTR *values )
+{
+	char *buffer = NULL;
+	int buffer_size = 0;
+	int i, length;
+	char *filename;
+	UNISTR2	data;
+	
+	filename = dos_basename( info3->driverpath );
+	init_unistr2( &data, filename, UNI_STR_TERMINATE);
+	regval_ctr_addvalue( values, "Driver", REG_SZ, (char*)data.buffer, 
+		data.uni_str_len*sizeof(uint16) );
+	
+	filename = dos_basename( info3->configfile );
+	init_unistr2( &data, filename, UNI_STR_TERMINATE);
+	regval_ctr_addvalue( values, "Configuration File", REG_SZ, (char*)data.buffer, 
+		data.uni_str_len*sizeof(uint16) );
+	
+	filename = dos_basename( info3->datafile );
+	init_unistr2( &data, filename, UNI_STR_TERMINATE);
+	regval_ctr_addvalue( values, "Data File", REG_SZ, (char*)data.buffer, 
+		data.uni_str_len*sizeof(uint16) );
+	
+	filename = dos_basename( info3->helpfile );
+	init_unistr2( &data, filename, UNI_STR_TERMINATE);
+	regval_ctr_addvalue( values, "Help File", REG_SZ, (char*)data.buffer, 
+		data.uni_str_len*sizeof(uint16) );
+	
+	init_unistr2( &data, info3->defaultdatatype, UNI_STR_TERMINATE);
+	regval_ctr_addvalue( values, "Data Type", REG_SZ, (char*)data.buffer, 
+		data.uni_str_len*sizeof(uint16) );
+	
+	regval_ctr_addvalue( values, "Version", REG_DWORD, (char*)&info3->cversion, 
+		sizeof(info3->cversion) );
+	
+	if ( info3->dependentfiles ) {
+		/* place the list of dependent files in a single 
+		   character buffer, separating each file name by
+		   a NULL */
+		   
+		for ( i=0; strcmp(info3->dependentfiles[i], ""); i++ ) {
+			/* strip the path to only the file's base name */
+		
+			filename = dos_basename( info3->dependentfiles[i] );
+			
+			length = strlen(filename);
+		
+			buffer = (char *)SMB_REALLOC( buffer, buffer_size + (length + 1)*sizeof(uint16) );
+			if ( !buffer ) {
+				break;
+			}
+			
+			init_unistr2( &data, filename, UNI_STR_TERMINATE);
+			memcpy( buffer+buffer_size, (char*)data.buffer, data.uni_str_len*sizeof(uint16) );
+		
+			buffer_size += (length + 1)*sizeof(uint16);
+		}
+		
+		/* terminated by double NULL.  Add the final one here */
+		
+		buffer = (char *)SMB_REALLOC( buffer, buffer_size + 2 );
+		if ( !buffer ) {
+			buffer_size = 0;
+		} else {
+			buffer[buffer_size++] = '\0';
+			buffer[buffer_size++] = '\0';
+		}
+	}
+	
+	regval_ctr_addvalue( values, "Dependent Files",    REG_MULTI_SZ, buffer, buffer_size );
+		
+	SAFE_FREE( buffer );
+	
+	return;
+}
+
+/**********************************************************************
+ *********************************************************************/
+
+static int driver_arch_fetch_values( char *key, REGVAL_CTR *values )
+{
+	char 		*keystr, *base, *subkeypath;
+	fstring		arch_environment;
+	fstring		driver;
+	int		version;
+	NT_PRINTER_DRIVER_INFO_LEVEL	driver_ctr;
+	WERROR		w_result;
+
+	if (!reg_split_path( key, &base, &subkeypath )) {
+		return -1;
+	}
+	
+	/* no values in 'Environments\Drivers\Windows NT x86' */
+	
+	if ( !subkeypath ) 
+		return 0;
+		
+	/* We have the Architecture string and some subkey name:
+	   Currently we only support
+	   * Drivers
+	   * Print Processors
+	   Anything else is an error.
+	   */
+
+	fstrcpy( arch_environment, base );
+	
+	keystr = subkeypath;
+	if (!reg_split_path( keystr, &base, &subkeypath )) {
+		return -1;
+	}
+
+	if ( strequal(base, "Print Processors") )
+		return 0;
+
+	/* only Drivers key can be left */
+		
+	if ( !strequal(base, "Drivers") )
+		return -1;
+			
+	if ( !subkeypath )
+		return 0;
+	
+	/* We know that we have Architechure\Drivers with some subkey name
+	   The subkey name has to be Version-XX */
+	
+	keystr = subkeypath;
+	if (!reg_split_path( keystr, &base, &subkeypath )) {
+		return -1;
+	}
+
+	if ( !subkeypath )
+		return 0;
+		
+	version = atoi(&base[strlen(base)-1]);
+
+	/* BEGIN PRINTER DRIVER NAME BLOCK */
+	
+	keystr = subkeypath;
+	if (!reg_split_path( keystr, &base, &subkeypath )) {
+		return -1;
+	}
+	
+	/* don't go any deeper for now */
+	
+	fstrcpy( driver, base );
+	
+	w_result = get_a_printer_driver( &driver_ctr, 3, driver, arch_environment, version );
+
+	if ( !W_ERROR_IS_OK(w_result) )
+		return -1;
+		
+	fill_in_driver_values( driver_ctr.info_3, values ); 
+	
+	free_a_printer_driver( driver_ctr, 3 );
+
+	/* END PRINTER DRIVER NAME BLOCK */
+
+						
+	DEBUG(8,("key_driver_fetch_values: Exit\n"));
+	
+	return regval_ctr_numvals( values );
+}
+
+/**********************************************************************
+ *********************************************************************/
+
+static int key_driver_fetch_values( const char *key, REGVAL_CTR *values )
+{
+	char *keystr;
+	pstring subkey;
+	
+	DEBUG(8,("key_driver_fetch_values: Enter key => [%s]\n", key ? key : "NULL"));
+
+	/* no values in the Environments key */
+	
+	if ( !(keystr = reg_remaining_path( key + strlen(KEY_ENVIRONMENTS) )) )
+		return 0;
+	
+	pstrcpy( subkey, keystr);
+	
+	/* pass off to handle subkeys */
+	
+	return driver_arch_fetch_values( subkey, values );
+}
+
+/*********************************************************************
+ *********************************************************************
+ ** "HKLM/SYSTEM/CURRENTCONTROLSET/CONTROL/PRINT"
+ *********************************************************************
+ *********************************************************************/
+
+static int key_print_fetch_keys( const char *key, REGSUBKEY_CTR *subkeys )
+{	
+	int key_len = strlen(key);
+	
+	/* no keys below 'Print' handled here */
+	
+	if ( (key_len != strlen(KEY_CONTROL_PRINT)) && (key_len != strlen(KEY_WINNT_PRINT)) )
+		return -1;
+
+	regsubkey_ctr_addkey( subkeys, "Environments" );
+	regsubkey_ctr_addkey( subkeys, "Monitors" );
+	regsubkey_ctr_addkey( subkeys, "Forms" );
+	regsubkey_ctr_addkey( subkeys, "Printers" );
+	
+	return regsubkey_ctr_numkeys( subkeys );
+}
+
+/**********************************************************************
+ *********************************************************************
+ ** Structure to hold dispatch table of ops for various printer keys.
+ ** Make sure to always store deeper keys along the same path first so 
+ ** we ge a more specific match.
+ *********************************************************************
+ *********************************************************************/
+
+static struct reg_dyn_tree print_registry[] = {
+/* just pass the monitor onto the registry tdb */
+{ KEY_MONITORS,
+	&regdb_fetch_keys, 
+	&regdb_store_keys,
+	&regdb_fetch_values,
+	&regdb_store_values },
+{ KEY_FORMS, 
+	&key_forms_fetch_keys, 
+	NULL, 
+	&key_forms_fetch_values,
+	NULL },
+{ KEY_CONTROL_PRINTERS, 
+	&key_printers_fetch_keys,
+	&key_printers_store_keys,
+	&key_printers_fetch_values,
+	&key_printers_store_values },
+{ KEY_ENVIRONMENTS,
+	&key_driver_fetch_keys,
+	NULL,
+	&key_driver_fetch_values,
+	NULL },
+{ KEY_CONTROL_PRINT,
+	&key_print_fetch_keys,
+	NULL,
+	NULL,
+	NULL },
+{ KEY_WINNT_PRINTERS,
+	&key_printers_fetch_keys,
+	&key_printers_store_keys,
+	&key_printers_fetch_values,
+	&key_printers_store_values },
+{ KEY_PORTS,
+	&regdb_fetch_keys, 
+	&regdb_store_keys,
+	&regdb_fetch_values,
+	&regdb_store_values },
+	
+{ NULL, NULL, NULL, NULL, NULL }
+};
+
+
+/**********************************************************************
+ *********************************************************************
+ ** Main reg_printing interface functions
+ *********************************************************************
+ *********************************************************************/
+
+/***********************************************************************
+ Lookup a key in the print_registry table, returning its index.
+ -1 on failure
+ **********************************************************************/
+
+static int match_registry_path( const char *key )
+{
+	int i;
+	pstring path;
+	
+	if ( !key )
+		return -1;
+
+	pstrcpy( path, key );
+	normalize_reg_path( path );
+	
+	for ( i=0; print_registry[i].path; i++ ) {
+		if ( strncmp( path, print_registry[i].path, strlen(print_registry[i].path) ) == 0 )
+			return i;
+	}
+	
+	return -1;
+}
+
+/***********************************************************************
+ **********************************************************************/
+
+static int regprint_fetch_reg_keys( const char *key, REGSUBKEY_CTR *subkeys )
+{
+	int i = match_registry_path( key );
+	
+	if ( i == -1 )
+		return -1;
+		
+	if ( !print_registry[i].fetch_subkeys )
+		return -1;
+		
+	return print_registry[i].fetch_subkeys( key, subkeys );
+}
+
+/**********************************************************************
+ *********************************************************************/
+
+static BOOL regprint_store_reg_keys( const char *key, REGSUBKEY_CTR *subkeys )
+{
+	int i = match_registry_path( key );
+	
+	if ( i == -1 )
+		return False;
+	
+	if ( !print_registry[i].store_subkeys )
+		return False;
+		
+	return print_registry[i].store_subkeys( key, subkeys );
+}
+
+/**********************************************************************
+ *********************************************************************/
+
+static int regprint_fetch_reg_values( const char *key, REGVAL_CTR *values )
+{
+	int i = match_registry_path( key );
+	
+	if ( i == -1 )
+		return -1;
+	
+	/* return 0 values by default since we know the key had 
+	   to exist because the client opened a handle */
+	   
+	if ( !print_registry[i].fetch_values )
+		return 0;
+		
+	return print_registry[i].fetch_values( key, values );
+}
+
+/**********************************************************************
+ *********************************************************************/
+
+static BOOL regprint_store_reg_values( const char *key, REGVAL_CTR *values )
+{
+	int i = match_registry_path( key );
+	
+	if ( i == -1 )
+		return False;
+	
+	if ( !print_registry[i].store_values )
+		return False;
+		
+	return print_registry[i].store_values( key, values );
+}
+
+/* 
+ * Table of function pointers for accessing printing data
+ */
+ 
+REGISTRY_OPS printing_ops = {
+	regprint_fetch_reg_keys,
+	regprint_fetch_reg_values,
+	regprint_store_reg_keys,
+	regprint_store_reg_values,
+	NULL
+};
+
+

Copied: branches/samba/upstream/source/registry/reg_shares.c (from rev 1928, branches/samba/upstream/source/registry/reg_shares.c)
===================================================================
--- branches/samba/upstream/source/registry/reg_shares.c	                        (rev 0)
+++ branches/samba/upstream/source/registry/reg_shares.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,166 @@
+/* 
+ *  Unix SMB/CIFS implementation.
+ *  Virtual Windows Registry Layer
+ *  Copyright (C) Gerald Carter                     2005
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/* Implementation of registry virtual views for printing information */
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_RPC_SRV
+
+/**********************************************************************
+ It is safe to assume that every registry path passed into on of 
+ the exported functions here begins with KEY_PRINTING else
+ these functions would have never been called.  This is a small utility
+ function to strip the beginning of the path and make a copy that the 
+ caller can modify.  Note that the caller is responsible for releasing
+ the memory allocated here.
+ **********************************************************************/
+
+static char* trim_reg_path( const char *path )
+{
+	const char *p;
+	uint16 key_len = strlen(KEY_SHARES);
+	
+	/* 
+	 * sanity check...this really should never be True.
+	 * It is only here to prevent us from accessing outside
+	 * the path buffer in the extreme case.
+	 */
+	
+	if ( strlen(path) < key_len ) {
+		DEBUG(0,("trim_reg_path: Registry path too short! [%s]\n", path));
+		return NULL;
+	}
+	
+	
+	p = path + strlen( KEY_SHARES );
+	
+	if ( *p == '\\' )
+		p++;
+	
+	if ( *p )
+		return SMB_STRDUP(p);
+	else
+		return NULL;
+}
+
+/**********************************************************************
+ Enumerate registry subkey names given a registry path.  
+ Caller is responsible for freeing memory to **subkeys
+ *********************************************************************/
+ 
+static int shares_subkey_info( const char *key, REGSUBKEY_CTR *subkey_ctr )
+{
+	char 		*path;
+	BOOL		top_level = False;
+	int		num_subkeys = 0;
+	
+	DEBUG(10,("printing_subkey_info: key=>[%s]\n", key));
+	
+	path = trim_reg_path( key );
+	
+	/* check to see if we are dealing with the top level key */
+	
+	if ( !path )
+		top_level = True;
+		
+	if ( top_level ) {
+		num_subkeys = 1;
+		regsubkey_ctr_addkey( subkey_ctr, "Security" );
+	}
+#if 0
+	else
+		num_subkeys = handle_share_subpath( path, subkey_ctr, NULL );
+#endif
+	
+	SAFE_FREE( path );
+	
+	return num_subkeys;
+}
+
+/**********************************************************************
+ Enumerate registry values given a registry path.  
+ Caller is responsible for freeing memory 
+ *********************************************************************/
+
+static int shares_value_info( const char *key, REGVAL_CTR *val )
+{
+	char 		*path;
+	BOOL		top_level = False;
+	int		num_values = 0;
+	
+	DEBUG(10,("printing_value_info: key=>[%s]\n", key));
+	
+	path = trim_reg_path( key );
+	
+	/* check to see if we are dealing with the top level key */
+	
+	if ( !path )
+		top_level = True;
+	
+	/* fill in values from the getprinterdata_printer_server() */
+	if ( top_level )
+		num_values = 0;
+#if 0
+	else
+		num_values = handle_printing_subpath( path, NULL, val );
+#endif
+		
+	SAFE_FREE(path);
+	
+	return num_values;
+}
+
+/**********************************************************************
+ Stub function which always returns failure since we don't want
+ people storing printing information directly via regostry calls
+ (for now at least)
+ *********************************************************************/
+
+static BOOL shares_store_subkey( const char *key, REGSUBKEY_CTR *subkeys )
+{
+	return False;
+}
+
+/**********************************************************************
+ Stub function which always returns failure since we don't want
+ people storing printing information directly via regostry calls
+ (for now at least)
+ *********************************************************************/
+
+static BOOL shares_store_value( const char *key, REGVAL_CTR *val )
+{
+	return False;
+}
+
+/* 
+ * Table of function pointers for accessing printing data
+ */
+ 
+REGISTRY_OPS shares_reg_ops = {
+	shares_subkey_info,
+	shares_value_info,
+	shares_store_subkey,
+	shares_store_value,
+	NULL
+};
+
+

Modified: branches/samba/upstream/source/registry/reg_util.c
===================================================================
--- branches/samba/upstream/source/registry/reg_util.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/registry/reg_util.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,16 +5,17 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
- *
+ *  
  *  This program is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
- *
+ *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 /* Implementation of registry frontend view functions. */
@@ -22,121 +23,105 @@
 #include "includes.h"
 
 #undef DBGC_CLASS
-#define DBGC_CLASS DBGC_REGISTRY
+#define DBGC_CLASS DBGC_RPC_SRV
 
 /***********************************************************************
  Utility function for splitting the base path of a registry path off
  by setting base and new_path to the apprapriate offsets withing the
  path.
-
+ 
  WARNING!!  Does modify the original string!
  ***********************************************************************/
 
-bool reg_split_path(char *path, char **base, char **new_path)
+BOOL reg_split_path( char *path, char **base, char **new_path )
 {
 	char *p;
-
+	
 	*new_path = *base = NULL;
-
-	if (!path) {
-		return false;
-	}
+	
+	if ( !path)
+		return False;
+	
 	*base = path;
-
-	p = strchr(path, '\\');
-
+	
+	p = strchr( path, '\\' );
+	
 	if ( p ) {
 		*p = '\0';
 		*new_path = p+1;
 	}
-
-	return true;
+	
+	return True;
 }
 
+
 /***********************************************************************
  Utility function for splitting the base path of a registry path off
  by setting base and new_path to the appropriate offsets withing the
  path.
-
+ 
  WARNING!!  Does modify the original string!
  ***********************************************************************/
 
-bool reg_split_key(char *path, char **base, char **key)
+BOOL reg_split_key( char *path, char **base, char **key )
 {
 	char *p;
-
+	
 	*key = *base = NULL;
-
-	if (!path) {
-		return false;
-	}
-
+	
+	if ( !path)
+		return False;
+	
 	*base = path;
-
-	p = strrchr(path, '\\');
-
-	if (p) {
+	
+	p = strrchr( path, '\\' );
+	
+	if ( p ) {
 		*p = '\0';
 		*key = p+1;
 	}
-
-	return true;
+	
+	return True;
 }
 
+
 /**********************************************************************
- The full path to the registry key is used as database after the
+ The full path to the registry key is used as database after the 
  \'s are converted to /'s.  Key string is also normalized to UPPER
- case.
+ case. 
 **********************************************************************/
 
-char *normalize_reg_path(TALLOC_CTX *ctx, const char *keyname )
+void normalize_reg_path( pstring keyname )
 {
-	char *nkeyname = talloc_string_sub(ctx, keyname, "\\", "/");
-	if (!nkeyname) {
-		return NULL;
-	}
-	strupper_m(nkeyname);
-	return nkeyname;
+	pstring_sub( keyname, "\\", "/" );
+	strupper_m( keyname  );
 }
 
-/**
- * normalize ther registry path in place.
- */
-void normalize_dbkey(char *key)
-{
-	size_t len = strlen(key);
-	string_sub(key, "\\", "/", len+1);
-	strupper_m(key);
-}
-
 /**********************************************************************
  move to next non-delimter character
 *********************************************************************/
 
-char *reg_remaining_path(TALLOC_CTX *ctx, const char *key)
+char* reg_remaining_path( const char *key )
 {
-	char *new_path = NULL;
-	char *p = NULL;
-
-	if (!key || !*key) {
+	static pstring new_path;
+	char *p;
+	
+	if ( !key || !*key )
 		return NULL;
-	}
 
-	new_path = talloc_strdup(ctx, key);
-	if (!new_path) {
-		return NULL;
-	}
+	pstrcpy( new_path, key );
 	/* normalize_reg_path( new_path ); */
-	if (!(p = strchr(new_path, '\\')) ) {
-		if (!(p = strchr( new_path, '/'))) {
+	
+	if ( !(p = strchr( new_path, '\\' )) ) 
+	{
+		if ( !(p = strchr( new_path, '/' )) )
 			p = new_path;
-		} else {
+		else 
 			p++;
-		}
-	} else {
-		p++;
 	}
-
+	else
+		p++;
+		
 	return p;
 }
 
@@ -151,14 +136,14 @@
 	fstring buffer;
 	uint16 *wp;
 	size_t multi_len = byte_len / 2;
-
+	
 	if ( !multi_string || !values )
 		return 0;
 
 	*values = NULL;
 
 	/* just count the NULLs */
-
+	
 	for ( i=0; (i<multi_len-1) && !(multi_string[i]==0x0 && multi_string[i+1]==0x0); i++ ) {
 		/* peek ahead */
 		if ( multi_string[i+1] == 0x0 )
@@ -167,29 +152,29 @@
 
 	if ( num_strings == 0 )
 		return 0;
-
+	
 	if ( !(sz = TALLOC_ARRAY( NULL, char*, num_strings+1 )) ) {
 		DEBUG(0,("reg_convert_multi_sz: talloc() failed!\n"));
 		return -1;
 	}
 
 	wp = multi_string;
-
+	
 	for ( i=0; i<num_strings; i++ ) {
 		rpcstr_pull( buffer, wp, sizeof(buffer), -1, STR_TERMINATE );
 		sz[i] = talloc_strdup( sz, buffer );
-
+		
 		/* skip to the next string NULL and then one more */
 		while ( *wp )
 			wp++;
 		wp++;
 	}
-
+	
 	/* tag the array off with an empty string */
 	sz[i] = '\0';
-
+	
 	*values = sz;
-
+	
 	return num_strings;
 }
 
@@ -206,22 +191,22 @@
 
 	if ( !values || !buffer )
 		return 0;
-
+	
 	/* go ahead and alloc some space */
-
+	
 	if ( !(buf = TALLOC_ARRAY( NULL, uint16, 2 )) ) {
 		DEBUG(0,("regval_build_multi_sz: talloc() failed!\n"));
 		return 0;
 	}
-
+	
 	for ( i=0; values[i]; i++ ) {
 		ZERO_STRUCT( sz );
 		/* DEBUG(0,("regval_build_multi_sz: building [%s]\n",values[i])); */
 		init_unistr2( &sz, values[i], UNI_STR_TERMINATE );
-
+		
 		/* Alloc some more memory.  Always add one one to account for the 
 		   double NULL termination */
-
+		   
 		b = TALLOC_REALLOC_ARRAY( NULL, buf, uint16, buf_size+sz.uni_str_len+1 );
 		if ( !b ) {
 			DEBUG(0,("regval_build_multi_sz: talloc() reallocation error!\n"));
@@ -230,15 +215,15 @@
 		}
 		buf = b;
 
-		/* copy the unistring2 buffer and increment the size */
+		/* copy the unistring2 buffer and increment the size */	
 		/* dump_data(1,sz.buffer,sz.uni_str_len*2); */
 		memcpy( buf+buf_size, sz.buffer, sz.uni_str_len*2 );
 		buf_size += sz.uni_str_len;
-
+		
 		/* cleanup rather than leaving memory hanging around */
 		TALLOC_FREE( sz.buffer );
 	}
-
+	
 	buf[buf_size++] = 0x0;
 
 	*buffer = buf;
@@ -246,3 +231,5 @@
 	/* return number of bytes */
 	return buf_size*2;
 }
+
+

Deleted: branches/samba/upstream/source/registry/reg_util_legacy.c
===================================================================
--- branches/samba/upstream/source/registry/reg_util_legacy.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/registry/reg_util_legacy.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,47 +0,0 @@
-/* 
- *  Unix SMB/CIFS implementation.
- *  Virtual Windows Registry Layer
- *  Copyright (C) Gerald Carter                     2002-2005
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *  
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *  
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-/* Implementation of registry frontend view functions. */
-
-#include "includes.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_REGISTRY
-
-/**
- * legacy open key function that should be replaced by uses of
- * reg_open_path
- */
-WERROR regkey_open_internal( TALLOC_CTX *ctx, REGISTRY_KEY **regkey,
-			     const char *path,
-                             const struct nt_user_token *token,
-			     uint32 access_desired )
-{
-	struct registry_key *key;
-	WERROR err;
-
-	err = reg_open_path(NULL, path, access_desired, token, &key);
-	if (!W_ERROR_IS_OK(err)) {
-		return err;
-	}
-
-	*regkey = talloc_move(ctx, &key->key);
-	TALLOC_FREE(key);
-	return WERR_OK;
-}

Modified: branches/samba/upstream/source/registry/regfio.c
===================================================================
--- branches/samba/upstream/source/registry/regfio.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/registry/regfio.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
@@ -14,15 +14,13 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.  
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  
  */
 
 #include "includes.h"
 #include "regfio.h"
 
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_REGISTRY
-
 /*******************************************************************
  *
  * TODO : Right now this code basically ignores classnames.
@@ -123,10 +121,7 @@
 		return -1;
 	}
 	
-	if (!prs_init( ps, block_size, file->mem_ctx, UNMARSHALL )) {
-		DEBUG(0,("read_block: prs_init() failed! (%s)\n", strerror(errno) ));
-		return -1;
-	}
+	prs_init( ps, block_size, file->mem_ctx, UNMARSHALL );
 	buffer = prs_data_p( ps );
 	bytes_read = returned = 0;
 
@@ -149,7 +144,7 @@
 /*******************************************************************
 *******************************************************************/
 
-static bool write_hbin_block( REGF_FILE *file, REGF_HBIN *hbin )
+static BOOL write_hbin_block( REGF_FILE *file, REGF_HBIN *hbin )
 {
 	if ( !hbin->dirty )
 		return True;
@@ -175,7 +170,7 @@
 /*******************************************************************
 *******************************************************************/
 
-static bool hbin_block_close( REGF_FILE *file, REGF_HBIN *hbin )
+static BOOL hbin_block_close( REGF_FILE *file, REGF_HBIN *hbin )
 {
 	REGF_HBIN *p;
 
@@ -199,7 +194,7 @@
 /*******************************************************************
 *******************************************************************/
 
-static bool prs_regf_block( const char *desc, prs_struct *ps, int depth, REGF_FILE *file )
+static BOOL prs_regf_block( const char *desc, prs_struct *ps, int depth, REGF_FILE *file )
 {
 	prs_debug(ps, depth, desc, "prs_regf_block");
 	depth++;
@@ -259,7 +254,7 @@
 /*******************************************************************
 *******************************************************************/
 
-static bool prs_hbin_block( const char *desc, prs_struct *ps, int depth, REGF_HBIN *hbin )
+static BOOL prs_hbin_block( const char *desc, prs_struct *ps, int depth, REGF_HBIN *hbin )
 {
 	uint32 block_size2;
 
@@ -294,7 +289,7 @@
 /*******************************************************************
 *******************************************************************/
 
-static bool prs_nk_rec( const char *desc, prs_struct *ps, int depth, REGF_NK_REC *nk )
+static BOOL prs_nk_rec( const char *desc, prs_struct *ps, int depth, REGF_NK_REC *nk )
 {
 	uint16 class_length, name_length;
 	uint32 start;
@@ -421,7 +416,7 @@
 /*******************************************************************
 *******************************************************************/
 
-static bool read_regf_block( REGF_FILE *file )
+static BOOL read_regf_block( REGF_FILE *file )
 {
 	prs_struct ps;
 	uint32 checksum;
@@ -542,7 +537,7 @@
  block for it
 *******************************************************************/
 
-static bool hbin_contains_offset( REGF_HBIN *hbin, uint32 offset )
+static BOOL hbin_contains_offset( REGF_HBIN *hbin, uint32 offset )
 {
 	if ( !hbin )
 		return False;
@@ -597,7 +592,7 @@
 /*******************************************************************
 *******************************************************************/
 
-static bool prs_hash_rec( const char *desc, prs_struct *ps, int depth, REGF_HASH_REC *hash )
+static BOOL prs_hash_rec( const char *desc, prs_struct *ps, int depth, REGF_HASH_REC *hash )
 {
 	prs_debug(ps, depth, desc, "prs_hash_rec");
 	depth++;
@@ -613,7 +608,7 @@
 /*******************************************************************
 *******************************************************************/
 
-static bool hbin_prs_lf_records( const char *desc, REGF_HBIN *hbin, int depth, REGF_NK_REC *nk )
+static BOOL hbin_prs_lf_records( const char *desc, REGF_HBIN *hbin, int depth, REGF_NK_REC *nk )
 {
 	int i;
 	REGF_LF_REC *lf = &nk->subkeys;
@@ -677,7 +672,7 @@
 /*******************************************************************
 *******************************************************************/
 
-static bool hbin_prs_sk_rec( const char *desc, REGF_HBIN *hbin, int depth, REGF_SK_REC *sk )
+static BOOL hbin_prs_sk_rec( const char *desc, REGF_HBIN *hbin, int depth, REGF_SK_REC *sk )
 {
 	prs_struct *ps = &hbin->ps;
 	uint16 tag = 0xFFFF;
@@ -732,7 +727,7 @@
 /*******************************************************************
 *******************************************************************/
 
-static bool hbin_prs_vk_rec( const char *desc, REGF_HBIN *hbin, int depth, REGF_VK_REC *vk, REGF_FILE *file )
+static BOOL hbin_prs_vk_rec( const char *desc, REGF_HBIN *hbin, int depth, REGF_VK_REC *vk, REGF_FILE *file )
 {
 	uint32 offset;
 	uint16 name_length;
@@ -788,7 +783,7 @@
 	/* get the data if necessary */
 
 	if ( vk->data_size != 0 ) {
-		bool charmode = False;
+		BOOL charmode = False;
 
 		if ( (vk->type == REG_SZ) || (vk->type == REG_MULTI_SZ) )
 			charmode = True;
@@ -849,7 +844,7 @@
  in the prs_struct *ps.
 *******************************************************************/
 
-static bool hbin_prs_vk_records( const char *desc, REGF_HBIN *hbin, int depth, REGF_NK_REC *nk, REGF_FILE *file )
+static BOOL hbin_prs_vk_records( const char *desc, REGF_HBIN *hbin, int depth, REGF_NK_REC *nk, REGF_FILE *file )
 {
 	int i;
 	uint32 record_size;
@@ -948,7 +943,7 @@
 /*******************************************************************
 *******************************************************************/
 
-static bool hbin_prs_key( REGF_FILE *file, REGF_HBIN *hbin, REGF_NK_REC *nk )
+static BOOL hbin_prs_key( REGF_FILE *file, REGF_HBIN *hbin, REGF_NK_REC *nk )
 {
 	int depth = 0;
 	REGF_HBIN *sub_hbin;
@@ -1027,12 +1022,12 @@
 /*******************************************************************
 *******************************************************************/
 
-static bool next_record( REGF_HBIN *hbin, const char *hdr, bool *eob )
+static BOOL next_record( REGF_HBIN *hbin, const char *hdr, BOOL *eob )
 {
 	uint8 header[REC_HDR_SIZE];
 	uint32 record_size;
 	uint32 curr_off, block_size;
-	bool found = False;
+	BOOL found = False;
 	prs_struct *ps = &hbin->ps;
 	
 	curr_off = prs_offset( ps );
@@ -1090,7 +1085,7 @@
 /*******************************************************************
 *******************************************************************/
 
-static bool next_nk_record( REGF_FILE *file, REGF_HBIN *hbin, REGF_NK_REC *nk, bool *eob )
+static BOOL next_nk_record( REGF_FILE *file, REGF_HBIN *hbin, REGF_NK_REC *nk, BOOL *eob )
 {
 	if ( next_record( hbin, "nk", eob ) && hbin_prs_key( file, hbin, nk ) )
 		return True;
@@ -1103,10 +1098,10 @@
  block header to disk 
 *******************************************************************/
 
-static bool init_regf_block( REGF_FILE *file )
+static BOOL init_regf_block( REGF_FILE *file )
 {	
 	prs_struct ps;
-	bool result = True;
+	BOOL result = True;
 	
 	if ( !prs_init( &ps, REGF_BLOCKSIZE, file->mem_ctx, MARSHALL ) )
 		return False;
@@ -1233,7 +1228,7 @@
 
 	/* cleanup for a file opened for write */
 
-	if ((file->fd != -1) && (file->open_flags & (O_WRONLY|O_RDWR))) {
+	if ( file->open_flags & (O_WRONLY|O_RDWR) ) {
 		prs_struct ps;
 		REGF_SK_REC *sk;
 
@@ -1277,7 +1272,7 @@
 
 	/* nothing tdo do if there is no open file */
 
-	if (file->fd == -1)
+	if ( !file || (file->fd == -1) )
 		return 0;
 		
 	fd = file->fd;
@@ -1309,8 +1304,8 @@
 	REGF_NK_REC *nk;
 	REGF_HBIN   *hbin;
 	uint32      offset = REGF_BLOCKSIZE;
-	bool        found = False;
-	bool        eob;
+	BOOL        found = False;
+	BOOL        eob;
 	
 	if ( !file )
 		return NULL;
@@ -1456,7 +1451,7 @@
 {
 	REGF_HBIN *hbin, *p_hbin;
 	uint32 block_off;
-	bool cached;
+	BOOL cached;
 
 	/* check open block list */
 
@@ -1553,7 +1548,7 @@
 
 	/* the record size is sizeof(hdr) + name + static members + data_size_field */
 
-	size = sizeof(uint32)*5 + ndr_size_security_descriptor(sd, 0) + sizeof(uint32);
+	size = sizeof(uint32)*5 + sec_desc_size( sd ) + sizeof(uint32);
 
 	/* multiple of 8 */
 	size_mod8 = size & 0xfffffff8;
@@ -1635,7 +1630,7 @@
 /*******************************************************************
 *******************************************************************/
 
-static bool create_vk_record( REGF_FILE *file, REGF_VK_REC *vk, REGISTRY_VALUE *value )
+static BOOL create_vk_record( REGF_FILE *file, REGF_VK_REC *vk, REGISTRY_VALUE *value )
 {
 	char *name = regval_name(value);
 	REGF_HBIN *data_hbin;
@@ -1783,8 +1778,7 @@
 			nk->sec_desc->ref_count = 0;
 			
 			/* size value must be self-inclusive */
-			nk->sec_desc->size      = ndr_size_security_descriptor(sec_desc, 0)
-				+ sizeof(uint32);
+			nk->sec_desc->size      = sec_desc_size(sec_desc) + sizeof(uint32);
 
 			DLIST_ADD_END( file->sec_desc_list, nk->sec_desc, REGF_SK_REC *);
 

Copied: branches/samba/upstream/source/rpc_client/cli_dfs.c (from rev 1928, branches/samba/upstream/source/rpc_client/cli_dfs.c)
===================================================================
--- branches/samba/upstream/source/rpc_client/cli_dfs.c	                        (rev 0)
+++ branches/samba/upstream/source/rpc_client/cli_dfs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,632 @@
+/*
+ * Unix SMB/CIFS implementation.
+ * client auto-generated by pidl. DO NOT MODIFY!
+ */
+
+#include "includes.h"
+
+NTSTATUS rpccli_dfs_GetManagerVersion(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, uint32 *exist_flag)
+{
+	prs_struct qbuf, rbuf;
+	NETDFS_Q_DFS_GETMANAGERVERSION q;
+	NETDFS_R_DFS_GETMANAGERVERSION r;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	
+	/* Marshall data and send request */
+	
+	if (!init_netdfs_q_dfs_GetManagerVersion(&q))
+		return NT_STATUS_INVALID_PARAMETER;
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_GETMANAGERVERSION,
+		q, r,
+		qbuf, rbuf, 
+		netdfs_io_q_dfs_GetManagerVersion,
+		netdfs_io_r_dfs_GetManagerVersion,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	/* Return variables */
+	*exist_flag = r.exist_flag;
+	
+	/* Return result */
+	return NT_STATUS_OK;
+}
+
+NTSTATUS rpccli_dfs_Add(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const char *path, const char *server, const char *share, const char *comment, uint32 flags)
+{
+	prs_struct qbuf, rbuf;
+	NETDFS_Q_DFS_ADD q;
+	NETDFS_R_DFS_ADD r;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	
+	/* Marshall data and send request */
+	
+	if (!init_netdfs_q_dfs_Add(&q, path, server, share, comment, flags))
+		return NT_STATUS_INVALID_PARAMETER;
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_ADD,
+		q, r,
+		qbuf, rbuf, 
+		netdfs_io_q_dfs_Add,
+		netdfs_io_r_dfs_Add,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	/* Return variables */
+	
+	/* Return result */
+	return werror_to_ntstatus(r.status);
+}
+
+NTSTATUS rpccli_dfs_Remove(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const char *path, const char *server, const char *share)
+{
+	prs_struct qbuf, rbuf;
+	NETDFS_Q_DFS_REMOVE q;
+	NETDFS_R_DFS_REMOVE r;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	
+	/* Marshall data and send request */
+	
+	if (!init_netdfs_q_dfs_Remove(&q, path, server, share))
+		return NT_STATUS_INVALID_PARAMETER;
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_REMOVE,
+		q, r,
+		qbuf, rbuf, 
+		netdfs_io_q_dfs_Remove,
+		netdfs_io_r_dfs_Remove,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	/* Return variables */
+	
+	/* Return result */
+	return werror_to_ntstatus(r.status);
+}
+
+NTSTATUS rpccli_dfs_SetInfo(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
+{
+	prs_struct qbuf, rbuf;
+	NETDFS_Q_DFS_SETINFO q;
+	NETDFS_R_DFS_SETINFO r;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	
+	/* Marshall data and send request */
+	
+	if (!init_netdfs_q_dfs_SetInfo(&q))
+		return NT_STATUS_INVALID_PARAMETER;
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_SETINFO,
+		q, r,
+		qbuf, rbuf, 
+		netdfs_io_q_dfs_SetInfo,
+		netdfs_io_r_dfs_SetInfo,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	/* Return variables */
+	
+	/* Return result */
+	return werror_to_ntstatus(r.status);
+}
+
+NTSTATUS rpccli_dfs_GetInfo(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const char *path, const char *server, const char *share, uint32 level, NETDFS_DFS_INFO_CTR *info)
+{
+	prs_struct qbuf, rbuf;
+	NETDFS_Q_DFS_GETINFO q;
+	NETDFS_R_DFS_GETINFO r;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	
+	/* Marshall data and send request */
+	
+	if (!init_netdfs_q_dfs_GetInfo(&q, path, server, share, level))
+		return NT_STATUS_INVALID_PARAMETER;
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_GETINFO,
+		q, r,
+		qbuf, rbuf, 
+		netdfs_io_q_dfs_GetInfo,
+		netdfs_io_r_dfs_GetInfo,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	/* Return variables */
+	*info = r.info;
+	
+	/* Return result */
+	return werror_to_ntstatus(r.status);
+}
+
+NTSTATUS rpccli_dfs_Enum(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, uint32 level, uint32 bufsize, NETDFS_DFS_ENUMSTRUCT *info, uint32 *total)
+{
+	prs_struct qbuf, rbuf;
+	NETDFS_Q_DFS_ENUM q;
+	NETDFS_R_DFS_ENUM r;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	
+	/* Marshall data and send request */
+	
+	if (!init_netdfs_q_dfs_Enum(&q, level, bufsize, info, total))
+		return NT_STATUS_INVALID_PARAMETER;
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_ENUM,
+		q, r,
+		qbuf, rbuf, 
+		netdfs_io_q_dfs_Enum,
+		netdfs_io_r_dfs_Enum,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	/* Return variables */
+	*info = r.info;
+	*total = r.total;
+	
+	/* Return result */
+	return werror_to_ntstatus(r.status);
+}
+
+NTSTATUS rpccli_dfs_Rename(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
+{
+	prs_struct qbuf, rbuf;
+	NETDFS_Q_DFS_RENAME q;
+	NETDFS_R_DFS_RENAME r;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	
+	/* Marshall data and send request */
+	
+	if (!init_netdfs_q_dfs_Rename(&q))
+		return NT_STATUS_INVALID_PARAMETER;
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_RENAME,
+		q, r,
+		qbuf, rbuf, 
+		netdfs_io_q_dfs_Rename,
+		netdfs_io_r_dfs_Rename,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	/* Return variables */
+	
+	/* Return result */
+	return werror_to_ntstatus(r.status);
+}
+
+NTSTATUS rpccli_dfs_Move(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
+{
+	prs_struct qbuf, rbuf;
+	NETDFS_Q_DFS_MOVE q;
+	NETDFS_R_DFS_MOVE r;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	
+	/* Marshall data and send request */
+	
+	if (!init_netdfs_q_dfs_Move(&q))
+		return NT_STATUS_INVALID_PARAMETER;
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_MOVE,
+		q, r,
+		qbuf, rbuf, 
+		netdfs_io_q_dfs_Move,
+		netdfs_io_r_dfs_Move,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	/* Return variables */
+	
+	/* Return result */
+	return werror_to_ntstatus(r.status);
+}
+
+NTSTATUS rpccli_dfs_ManagerGetConfigInfo(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
+{
+	prs_struct qbuf, rbuf;
+	NETDFS_Q_DFS_MANAGERGETCONFIGINFO q;
+	NETDFS_R_DFS_MANAGERGETCONFIGINFO r;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	
+	/* Marshall data and send request */
+	
+	if (!init_netdfs_q_dfs_ManagerGetConfigInfo(&q))
+		return NT_STATUS_INVALID_PARAMETER;
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_MANAGERGETCONFIGINFO,
+		q, r,
+		qbuf, rbuf, 
+		netdfs_io_q_dfs_ManagerGetConfigInfo,
+		netdfs_io_r_dfs_ManagerGetConfigInfo,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	/* Return variables */
+	
+	/* Return result */
+	return werror_to_ntstatus(r.status);
+}
+
+NTSTATUS rpccli_dfs_ManagerSendSiteInfo(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
+{
+	prs_struct qbuf, rbuf;
+	NETDFS_Q_DFS_MANAGERSENDSITEINFO q;
+	NETDFS_R_DFS_MANAGERSENDSITEINFO r;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	
+	/* Marshall data and send request */
+	
+	if (!init_netdfs_q_dfs_ManagerSendSiteInfo(&q))
+		return NT_STATUS_INVALID_PARAMETER;
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_MANAGERSENDSITEINFO,
+		q, r,
+		qbuf, rbuf, 
+		netdfs_io_q_dfs_ManagerSendSiteInfo,
+		netdfs_io_r_dfs_ManagerSendSiteInfo,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	/* Return variables */
+	
+	/* Return result */
+	return werror_to_ntstatus(r.status);
+}
+
+NTSTATUS rpccli_dfs_AddFtRoot(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
+{
+	prs_struct qbuf, rbuf;
+	NETDFS_Q_DFS_ADDFTROOT q;
+	NETDFS_R_DFS_ADDFTROOT r;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	
+	/* Marshall data and send request */
+	
+	if (!init_netdfs_q_dfs_AddFtRoot(&q))
+		return NT_STATUS_INVALID_PARAMETER;
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_ADDFTROOT,
+		q, r,
+		qbuf, rbuf, 
+		netdfs_io_q_dfs_AddFtRoot,
+		netdfs_io_r_dfs_AddFtRoot,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	/* Return variables */
+	
+	/* Return result */
+	return werror_to_ntstatus(r.status);
+}
+
+NTSTATUS rpccli_dfs_RemoveFtRoot(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
+{
+	prs_struct qbuf, rbuf;
+	NETDFS_Q_DFS_REMOVEFTROOT q;
+	NETDFS_R_DFS_REMOVEFTROOT r;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	
+	/* Marshall data and send request */
+	
+	if (!init_netdfs_q_dfs_RemoveFtRoot(&q))
+		return NT_STATUS_INVALID_PARAMETER;
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_REMOVEFTROOT,
+		q, r,
+		qbuf, rbuf, 
+		netdfs_io_q_dfs_RemoveFtRoot,
+		netdfs_io_r_dfs_RemoveFtRoot,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	/* Return variables */
+	
+	/* Return result */
+	return werror_to_ntstatus(r.status);
+}
+
+NTSTATUS rpccli_dfs_AddStdRoot(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
+{
+	prs_struct qbuf, rbuf;
+	NETDFS_Q_DFS_ADDSTDROOT q;
+	NETDFS_R_DFS_ADDSTDROOT r;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	
+	/* Marshall data and send request */
+	
+	if (!init_netdfs_q_dfs_AddStdRoot(&q))
+		return NT_STATUS_INVALID_PARAMETER;
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_ADDSTDROOT,
+		q, r,
+		qbuf, rbuf, 
+		netdfs_io_q_dfs_AddStdRoot,
+		netdfs_io_r_dfs_AddStdRoot,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	/* Return variables */
+	
+	/* Return result */
+	return werror_to_ntstatus(r.status);
+}
+
+NTSTATUS rpccli_dfs_RemoveStdRoot(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
+{
+	prs_struct qbuf, rbuf;
+	NETDFS_Q_DFS_REMOVESTDROOT q;
+	NETDFS_R_DFS_REMOVESTDROOT r;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	
+	/* Marshall data and send request */
+	
+	if (!init_netdfs_q_dfs_RemoveStdRoot(&q))
+		return NT_STATUS_INVALID_PARAMETER;
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_REMOVESTDROOT,
+		q, r,
+		qbuf, rbuf, 
+		netdfs_io_q_dfs_RemoveStdRoot,
+		netdfs_io_r_dfs_RemoveStdRoot,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	/* Return variables */
+	
+	/* Return result */
+	return werror_to_ntstatus(r.status);
+}
+
+NTSTATUS rpccli_dfs_ManagerInitialize(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
+{
+	prs_struct qbuf, rbuf;
+	NETDFS_Q_DFS_MANAGERINITIALIZE q;
+	NETDFS_R_DFS_MANAGERINITIALIZE r;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	
+	/* Marshall data and send request */
+	
+	if (!init_netdfs_q_dfs_ManagerInitialize(&q))
+		return NT_STATUS_INVALID_PARAMETER;
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_MANAGERINITIALIZE,
+		q, r,
+		qbuf, rbuf, 
+		netdfs_io_q_dfs_ManagerInitialize,
+		netdfs_io_r_dfs_ManagerInitialize,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	/* Return variables */
+	
+	/* Return result */
+	return werror_to_ntstatus(r.status);
+}
+
+NTSTATUS rpccli_dfs_AddStdRootForced(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
+{
+	prs_struct qbuf, rbuf;
+	NETDFS_Q_DFS_ADDSTDROOTFORCED q;
+	NETDFS_R_DFS_ADDSTDROOTFORCED r;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	
+	/* Marshall data and send request */
+	
+	if (!init_netdfs_q_dfs_AddStdRootForced(&q))
+		return NT_STATUS_INVALID_PARAMETER;
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_ADDSTDROOTFORCED,
+		q, r,
+		qbuf, rbuf, 
+		netdfs_io_q_dfs_AddStdRootForced,
+		netdfs_io_r_dfs_AddStdRootForced,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	/* Return variables */
+	
+	/* Return result */
+	return werror_to_ntstatus(r.status);
+}
+
+NTSTATUS rpccli_dfs_GetDcAddress(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
+{
+	prs_struct qbuf, rbuf;
+	NETDFS_Q_DFS_GETDCADDRESS q;
+	NETDFS_R_DFS_GETDCADDRESS r;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	
+	/* Marshall data and send request */
+	
+	if (!init_netdfs_q_dfs_GetDcAddress(&q))
+		return NT_STATUS_INVALID_PARAMETER;
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_GETDCADDRESS,
+		q, r,
+		qbuf, rbuf, 
+		netdfs_io_q_dfs_GetDcAddress,
+		netdfs_io_r_dfs_GetDcAddress,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	/* Return variables */
+	
+	/* Return result */
+	return werror_to_ntstatus(r.status);
+}
+
+NTSTATUS rpccli_dfs_SetDcAddress(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
+{
+	prs_struct qbuf, rbuf;
+	NETDFS_Q_DFS_SETDCADDRESS q;
+	NETDFS_R_DFS_SETDCADDRESS r;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	
+	/* Marshall data and send request */
+	
+	if (!init_netdfs_q_dfs_SetDcAddress(&q))
+		return NT_STATUS_INVALID_PARAMETER;
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_SETDCADDRESS,
+		q, r,
+		qbuf, rbuf, 
+		netdfs_io_q_dfs_SetDcAddress,
+		netdfs_io_r_dfs_SetDcAddress,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	/* Return variables */
+	
+	/* Return result */
+	return werror_to_ntstatus(r.status);
+}
+
+NTSTATUS rpccli_dfs_FlushFtTable(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
+{
+	prs_struct qbuf, rbuf;
+	NETDFS_Q_DFS_FLUSHFTTABLE q;
+	NETDFS_R_DFS_FLUSHFTTABLE r;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	
+	/* Marshall data and send request */
+	
+	if (!init_netdfs_q_dfs_FlushFtTable(&q))
+		return NT_STATUS_INVALID_PARAMETER;
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_FLUSHFTTABLE,
+		q, r,
+		qbuf, rbuf, 
+		netdfs_io_q_dfs_FlushFtTable,
+		netdfs_io_r_dfs_FlushFtTable,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	/* Return variables */
+	
+	/* Return result */
+	return werror_to_ntstatus(r.status);
+}
+
+NTSTATUS rpccli_dfs_Add2(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
+{
+	prs_struct qbuf, rbuf;
+	NETDFS_Q_DFS_ADD2 q;
+	NETDFS_R_DFS_ADD2 r;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	
+	/* Marshall data and send request */
+	
+	if (!init_netdfs_q_dfs_Add2(&q))
+		return NT_STATUS_INVALID_PARAMETER;
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_ADD2,
+		q, r,
+		qbuf, rbuf, 
+		netdfs_io_q_dfs_Add2,
+		netdfs_io_r_dfs_Add2,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	/* Return variables */
+	
+	/* Return result */
+	return werror_to_ntstatus(r.status);
+}
+
+NTSTATUS rpccli_dfs_Remove2(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
+{
+	prs_struct qbuf, rbuf;
+	NETDFS_Q_DFS_REMOVE2 q;
+	NETDFS_R_DFS_REMOVE2 r;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	
+	/* Marshall data and send request */
+	
+	if (!init_netdfs_q_dfs_Remove2(&q))
+		return NT_STATUS_INVALID_PARAMETER;
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_REMOVE2,
+		q, r,
+		qbuf, rbuf, 
+		netdfs_io_q_dfs_Remove2,
+		netdfs_io_r_dfs_Remove2,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	/* Return variables */
+	
+	/* Return result */
+	return werror_to_ntstatus(r.status);
+}
+
+NTSTATUS rpccli_dfs_EnumEx(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
+{
+	prs_struct qbuf, rbuf;
+	NETDFS_Q_DFS_ENUMEX q;
+	NETDFS_R_DFS_ENUMEX r;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	
+	/* Marshall data and send request */
+	
+	if (!init_netdfs_q_dfs_EnumEx(&q))
+		return NT_STATUS_INVALID_PARAMETER;
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_ENUMEX,
+		q, r,
+		qbuf, rbuf, 
+		netdfs_io_q_dfs_EnumEx,
+		netdfs_io_r_dfs_EnumEx,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	/* Return variables */
+	
+	/* Return result */
+	return werror_to_ntstatus(r.status);
+}
+
+NTSTATUS rpccli_dfs_SetInfo2(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
+{
+	prs_struct qbuf, rbuf;
+	NETDFS_Q_DFS_SETINFO2 q;
+	NETDFS_R_DFS_SETINFO2 r;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	
+	/* Marshall data and send request */
+	
+	if (!init_netdfs_q_dfs_SetInfo2(&q))
+		return NT_STATUS_INVALID_PARAMETER;
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_SETINFO2,
+		q, r,
+		qbuf, rbuf, 
+		netdfs_io_q_dfs_SetInfo2,
+		netdfs_io_r_dfs_SetInfo2,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	/* Return variables */
+	
+	/* Return result */
+	return werror_to_ntstatus(r.status);
+}
+

Copied: branches/samba/upstream/source/rpc_client/cli_ds.c (from rev 1928, branches/samba/upstream/source/rpc_client/cli_ds.c)
===================================================================
--- branches/samba/upstream/source/rpc_client/cli_ds.c	                        (rev 0)
+++ branches/samba/upstream/source/rpc_client/cli_ds.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,139 @@
+/* 
+   Unix SMB/CIFS implementation.
+   RPC pipe client
+   Copyright (C) Gerald Carter                        2002,
+   Copyright (C) Jeremy Allison				2005.
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+
+/* implementations of client side DsXXX() functions */
+
+/********************************************************************
+ Get information about the server and directory services
+********************************************************************/
+
+NTSTATUS rpccli_ds_getprimarydominfo(struct rpc_pipe_client *cli,
+				     TALLOC_CTX *mem_ctx, 
+				     uint16 level, DS_DOMINFO_CTR *ctr)
+{
+	prs_struct qbuf, rbuf;
+	DS_Q_GETPRIMDOMINFO q;
+	DS_R_GETPRIMDOMINFO r;
+	NTSTATUS result;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	q.level = level;
+	
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC_DS, DS_GETPRIMDOMINFO,
+		q, r,
+		qbuf, rbuf,
+		ds_io_q_getprimdominfo,
+		ds_io_r_getprimdominfo,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	/* Return basic info - if we are requesting at info != 1 then
+	   there could be trouble. */ 
+
+	result = r.status;
+
+	if ( r.ptr && ctr ) {
+		ctr->basic = TALLOC_P(mem_ctx, DSROLE_PRIMARY_DOMAIN_INFO_BASIC);
+		if (!ctr->basic)
+			goto done;
+		memcpy(ctr->basic, r.info.basic, sizeof(DSROLE_PRIMARY_DOMAIN_INFO_BASIC));
+	}
+	
+done:
+
+	return result;
+}
+
+/********************************************************************
+ Enumerate trusted domains in an AD forest
+********************************************************************/
+
+NTSTATUS rpccli_ds_enum_domain_trusts(struct rpc_pipe_client *cli,
+				      TALLOC_CTX *mem_ctx, 
+				      const char *server, uint32 flags, 
+				      struct ds_domain_trust **trusts,
+				      uint32 *num_domains)
+{
+	prs_struct qbuf, rbuf;
+	DS_Q_ENUM_DOM_TRUSTS q;
+	DS_R_ENUM_DOM_TRUSTS r;
+	NTSTATUS result;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	init_q_ds_enum_domain_trusts( &q, server, flags );
+		
+	CLI_DO_RPC( cli, mem_ctx, PI_NETLOGON, DS_ENUM_DOM_TRUSTS,
+		q, r,
+		qbuf, rbuf,
+		ds_io_q_enum_domain_trusts,
+		ds_io_r_enum_domain_trusts,
+		NT_STATUS_UNSUCCESSFUL);
+	
+	result = r.status;
+	
+	if ( NT_STATUS_IS_OK(result) ) {
+		int i;
+	
+		*num_domains = r.num_domains;
+		if (r.num_domains) {
+			*trusts = TALLOC_ARRAY(mem_ctx, struct ds_domain_trust, r.num_domains);
+
+			if (*trusts == NULL) {
+				return NT_STATUS_NO_MEMORY;
+			}
+		} else {
+			*trusts = NULL;
+		}
+
+		for ( i=0; i< *num_domains; i++ ) {
+			(*trusts)[i].flags = r.domains.trusts[i].flags;
+			(*trusts)[i].parent_index = r.domains.trusts[i].parent_index;
+			(*trusts)[i].trust_type = r.domains.trusts[i].trust_type;
+			(*trusts)[i].trust_attributes = r.domains.trusts[i].trust_attributes;
+			(*trusts)[i].guid = r.domains.trusts[i].guid;
+
+			if (r.domains.trusts[i].sid_ptr) {
+				sid_copy(&(*trusts)[i].sid, &r.domains.trusts[i].sid.sid);
+			} else {
+				ZERO_STRUCT((*trusts)[i].sid);
+			}
+
+			if (r.domains.trusts[i].netbios_ptr) {
+				(*trusts)[i].netbios_domain = unistr2_tdup( mem_ctx, &r.domains.trusts[i].netbios_domain );
+			} else {
+				(*trusts)[i].netbios_domain = NULL;
+			}
+
+			if (r.domains.trusts[i].dns_ptr) {
+				(*trusts)[i].dns_domain = unistr2_tdup( mem_ctx, &r.domains.trusts[i].dns_domain );
+			} else {
+				(*trusts)[i].dns_domain = NULL;
+			}
+		}
+	}
+	
+	return result;
+}

Copied: branches/samba/upstream/source/rpc_client/cli_echo.c (from rev 1928, branches/samba/upstream/source/rpc_client/cli_echo.c)
===================================================================
--- branches/samba/upstream/source/rpc_client/cli_echo.c	                        (rev 0)
+++ branches/samba/upstream/source/rpc_client/cli_echo.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,143 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   RPC pipe client
+
+   Copyright (C) Tim Potter 2003
+   Copyright (C) Jeremy Allison 2005.
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+
+NTSTATUS rpccli_echo_add_one(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+			  uint32 request, uint32 *response)
+{
+	prs_struct qbuf, rbuf;
+	ECHO_Q_ADD_ONE q;
+	ECHO_R_ADD_ONE r;
+	BOOL result = False;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+        init_echo_q_add_one(&q, request);
+
+	CLI_DO_RPC( cli, mem_ctx, PI_ECHO, ECHO_ADD_ONE,
+			q, r,
+			qbuf, rbuf,
+			echo_io_q_add_one,
+			echo_io_r_add_one,
+			NT_STATUS_UNSUCCESSFUL);
+
+	if (response)
+		*response = r.response;
+
+	result = True;
+
+	return result ? NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
+}
+
+NTSTATUS rpccli_echo_data(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+		       uint32 size, char *in_data, char **out_data)
+{
+	prs_struct qbuf, rbuf;
+	ECHO_Q_ECHO_DATA q;
+	ECHO_R_ECHO_DATA r;
+	BOOL result = False;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+        init_echo_q_echo_data(&q, size, in_data);
+
+	CLI_DO_RPC( cli, mem_ctx, PI_ECHO, ECHO_DATA,
+			q, r,
+			qbuf, rbuf,
+			echo_io_q_echo_data,
+			echo_io_r_echo_data,
+			NT_STATUS_UNSUCCESSFUL);
+
+	result = True;
+
+	if (out_data) {
+		*out_data = TALLOC(mem_ctx, size);
+		if (!*out_data) {
+			return NT_STATUS_NO_MEMORY;
+		}
+		memcpy(*out_data, r.data, size);
+	}
+
+	return result ? NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
+}
+
+NTSTATUS rpccli_echo_sink_data(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+			    uint32 size, char *in_data)
+{
+	prs_struct qbuf, rbuf;
+	ECHO_Q_SINK_DATA q;
+	ECHO_R_SINK_DATA r;
+	BOOL result = False;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+        init_echo_q_sink_data(&q, size, in_data);
+
+	CLI_DO_RPC( cli, mem_ctx, PI_ECHO, ECHO_SINK_DATA,
+			q, r,
+			qbuf, rbuf,
+			echo_io_q_sink_data,
+			echo_io_r_sink_data,
+			NT_STATUS_UNSUCCESSFUL);
+
+	result = True;
+
+	return result ? NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
+}
+
+NTSTATUS rpccli_echo_source_data(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+			      uint32 size, char **out_data)
+{
+	prs_struct qbuf, rbuf;
+	ECHO_Q_SOURCE_DATA q;
+	ECHO_R_SOURCE_DATA r;
+	BOOL result = False;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+        init_echo_q_source_data(&q, size);
+
+	CLI_DO_RPC( cli, mem_ctx, PI_ECHO, ECHO_SOURCE_DATA,
+			q, r,
+			qbuf, rbuf,
+			echo_io_q_source_data,
+			echo_io_r_source_data,
+			NT_STATUS_UNSUCCESSFUL);
+
+	result = True;
+
+	return result ? NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
+}

Modified: branches/samba/upstream/source/rpc_client/cli_lsarpc.c
===================================================================
--- branches/samba/upstream/source/rpc_client/cli_lsarpc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_client/cli_lsarpc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,25 +1,24 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    RPC pipe client
    Copyright (C) Tim Potter                        2000-2001,
    Copyright (C) Andrew Tridgell              1992-1997,2000,
    Copyright (C) Rafal Szczesniak                       2002
    Copyright (C) Jeremy Allison				2005.
-   Copyright (C) Michael Adam				2007.
-   Copyright (C) Guenther Deschner			2008.
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -43,312 +42,236 @@
 
 NTSTATUS rpccli_lsa_open_policy(struct rpc_pipe_client *cli,
 				TALLOC_CTX *mem_ctx,
-				bool sec_qos, uint32 des_access,
+				BOOL sec_qos, uint32 des_access,
 				POLICY_HND *pol)
 {
-	struct lsa_ObjectAttribute attr;
-	struct lsa_QosInfo qos;
-	uint16_t system_name = '\\';
+	prs_struct qbuf, rbuf;
+	LSA_Q_OPEN_POL q;
+	LSA_R_OPEN_POL r;
+	LSA_SEC_QOS qos;
+	NTSTATUS result;
 
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Initialise input parameters */
+
 	if (sec_qos) {
-		init_lsa_sec_qos(&qos, 0xc, 2, 1, 0);
-		init_lsa_obj_attr(&attr,
-				  0x18,
-				  NULL,
-				  NULL,
-				  0,
-				  NULL,
-				  &qos);
+		init_lsa_sec_qos(&qos, 2, 1, 0);
+		init_q_open_pol(&q, '\\', 0, des_access, &qos);
 	} else {
-		init_lsa_obj_attr(&attr,
-				  0x18,
-				  NULL,
-				  NULL,
-				  0,
-				  NULL,
-				  NULL);
+		init_q_open_pol(&q, '\\', 0, des_access, NULL);
 	}
 
-	return rpccli_lsa_OpenPolicy(cli, mem_ctx,
-				     &system_name,
-				     &attr,
-				     des_access,
-				     pol);
+	/* Marshall data and send request */
+
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_OPENPOLICY,
+			q, r,
+			qbuf, rbuf,
+			lsa_io_q_open_pol,
+			lsa_io_r_open_pol,
+			NT_STATUS_UNSUCCESSFUL );
+
+	/* Return output parameters */
+
+	result = r.status;
+
+	if (NT_STATUS_IS_OK(result)) {
+		*pol = r.pol;
+#ifdef __INSURE__
+		pol->marker = MALLOC(1);
+#endif
+	}
+
+	return result;
 }
 
 /** Open a LSA policy handle
   *
-  * @param cli Handle on an initialised SMB connection
+  * @param cli Handle on an initialised SMB connection 
   */
 
 NTSTATUS rpccli_lsa_open_policy2(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx, bool sec_qos,
+				 TALLOC_CTX *mem_ctx, BOOL sec_qos,
 				 uint32 des_access, POLICY_HND *pol)
 {
-	struct lsa_ObjectAttribute attr;
-	struct lsa_QosInfo qos;
+	prs_struct qbuf, rbuf;
+	LSA_Q_OPEN_POL2 q;
+	LSA_R_OPEN_POL2 r;
+	LSA_SEC_QOS qos;
+	NTSTATUS result;
+	char *srv_name_slash = talloc_asprintf(mem_ctx, "\\\\%s", cli->cli->desthost);
 
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
 	if (sec_qos) {
-		init_lsa_sec_qos(&qos, 0xc, 2, 1, 0);
-		init_lsa_obj_attr(&attr,
-				  0x18,
-				  NULL,
-				  NULL,
-				  0,
-				  NULL,
-				  &qos);
+		init_lsa_sec_qos(&qos, 2, 1, 0);
+		init_q_open_pol2(&q, srv_name_slash, 0, des_access, &qos);
 	} else {
-		init_lsa_obj_attr(&attr,
-				  0x18,
-				  NULL,
-				  NULL,
-				  0,
-				  NULL,
-				  NULL);
+		init_q_open_pol2(&q, srv_name_slash, 0, des_access, NULL);
 	}
 
-	return rpccli_lsa_OpenPolicy2(cli, mem_ctx,
-				      cli->cli->srv_name_slash,
-				      &attr,
-				      des_access,
-				      pol);
-}
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_OPENPOLICY2,
+			q, r,
+			qbuf, rbuf,
+			lsa_io_q_open_pol2,
+			lsa_io_r_open_pol2,
+			NT_STATUS_UNSUCCESSFUL );
 
-/* Lookup a list of sids
- *
- * internal version withOUT memory allocation of the target arrays.
- * this assumes suffciently sized arrays to store domains, names and types. */
+	/* Return output parameters */
 
-static NTSTATUS rpccli_lsa_lookup_sids_noalloc(struct rpc_pipe_client *cli,
-					       TALLOC_CTX *mem_ctx,
-					       POLICY_HND *pol,
-					       int num_sids,
-					       const DOM_SID *sids,
-					       char **domains,
-					       char **names,
-					       enum lsa_SidType *types)
-{
-	NTSTATUS result = NT_STATUS_OK;
-	TALLOC_CTX *tmp_ctx = NULL;
-	int i;
-	struct lsa_SidArray sid_array;
-	struct lsa_RefDomainList *ref_domains = NULL;
-	struct lsa_TransNameArray lsa_names;
-	uint32_t count = 0;
-	uint16_t level = 1;
+	result = r.status;
 
-	ZERO_STRUCT(lsa_names);
-
-	tmp_ctx = talloc_new(mem_ctx);
-	if (!tmp_ctx) {
-		DEBUG(0, ("rpccli_lsa_lookup_sids_noalloc: out of memory!\n"));
-		result = NT_STATUS_UNSUCCESSFUL;
-		goto done;
+	if (NT_STATUS_IS_OK(result)) {
+		*pol = r.pol;
+#ifdef __INSURE__
+		pol->marker = (char *)malloc(1);
+#endif
 	}
 
-	sid_array.num_sids = num_sids;
-	sid_array.sids = TALLOC_ARRAY(mem_ctx, struct lsa_SidPtr, num_sids);
-	if (!sid_array.sids) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	return result;
+}
 
-	for (i = 0; i<num_sids; i++) {
-		sid_array.sids[i].sid = sid_dup_talloc(mem_ctx, &sids[i]);
-		if (!sid_array.sids[i].sid) {
-			return NT_STATUS_NO_MEMORY;
-		}
-	}
+/** Close a LSA policy handle */
 
-	result = rpccli_lsa_LookupSids(cli, mem_ctx,
-				       pol,
-				       &sid_array,
-				       &ref_domains,
-				       &lsa_names,
-				       level,
-				       &count);
+NTSTATUS rpccli_lsa_close(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, 
+			  POLICY_HND *pol)
+{
+	prs_struct qbuf, rbuf;
+	LSA_Q_CLOSE q;
+	LSA_R_CLOSE r;
+	NTSTATUS result;
 
-	DEBUG(10, ("LSA_LOOKUPSIDS returned '%s', mapped count = %d'\n",
-		   nt_errstr(result), count));
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
 
-	if (!NT_STATUS_IS_OK(result) &&
-	    !NT_STATUS_EQUAL(result, NT_STATUS_NONE_MAPPED) &&
-	    !NT_STATUS_EQUAL(result, STATUS_SOME_UNMAPPED))
-	{
-		/* An actual error occured */
-		goto done;
-	}
+	init_lsa_q_close(&q, pol);
 
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_CLOSE,
+			q, r,
+			qbuf, rbuf,
+			lsa_io_q_close,
+			lsa_io_r_close,
+			NT_STATUS_UNSUCCESSFUL );
+
 	/* Return output parameters */
 
-	if (NT_STATUS_EQUAL(result, NT_STATUS_NONE_MAPPED) ||
-	    (count == 0))
-	{
-		for (i = 0; i < num_sids; i++) {
-			(names)[i] = NULL;
-			(domains)[i] = NULL;
-			(types)[i] = SID_NAME_UNKNOWN;
-		}
-		result = NT_STATUS_NONE_MAPPED;
-		goto done;
-	}
+	result = r.status;
 
-	for (i = 0; i < num_sids; i++) {
-		const char *name, *dom_name;
-		uint32_t dom_idx = lsa_names.names[i].sid_index;
-
-		/* Translate optimised name through domain index array */
-
-		if (dom_idx != 0xffffffff) {
-
-			dom_name = ref_domains->domains[dom_idx].name.string;
-			name = lsa_names.names[i].name.string;
-
-			if (name) {
-				(names)[i] = talloc_strdup(mem_ctx, name);
-				if ((names)[i] == NULL) {
-					DEBUG(0, ("cli_lsa_lookup_sids_noalloc(): out of memory\n"));
-					result = NT_STATUS_UNSUCCESSFUL;
-					goto done;
-				}
-			} else {
-				(names)[i] = NULL;
-			}
-			(domains)[i] = talloc_strdup(mem_ctx, dom_name);
-			(types)[i] = lsa_names.names[i].sid_type;
-			if (((domains)[i] == NULL)) {
-				DEBUG(0, ("cli_lsa_lookup_sids_noalloc(): out of memory\n"));
-				result = NT_STATUS_UNSUCCESSFUL;
-				goto done;
-			}
-
-		} else {
-			(names)[i] = NULL;
-			(domains)[i] = NULL;
-			(types)[i] = SID_NAME_UNKNOWN;
-		}
+	if (NT_STATUS_IS_OK(result)) {
+#ifdef __INSURE__
+		SAFE_FREE(pol->marker);
+#endif
+		*pol = r.pol;
 	}
 
-done:
-	TALLOC_FREE(tmp_ctx);
 	return result;
 }
 
-/* Lookup a list of sids
- *
- * do it the right way: there is a limit (of 20480 for w2k3) entries
- * returned by this call. when the sids list contains more entries,
- * empty lists are returned. This version of lsa_lookup_sids passes
- * the list of sids in hunks of LOOKUP_SIDS_HUNK_SIZE to the lsa call. */
+/** Lookup a list of sids */
 
-/* This constant defines the limit of how many sids to look up
- * in one call (maximum). the limit from the server side is
- * at 20480 for win2k3, but we keep it at a save 1000 for now. */
-#define LOOKUP_SIDS_HUNK_SIZE 1000
-
 NTSTATUS rpccli_lsa_lookup_sids(struct rpc_pipe_client *cli,
 				TALLOC_CTX *mem_ctx,
-				POLICY_HND *pol,
-				int num_sids,
-				const DOM_SID *sids,
-				char ***pdomains,
-				char ***pnames,
-				enum lsa_SidType **ptypes)
+				POLICY_HND *pol, int num_sids,
+				const DOM_SID *sids, 
+				char ***domains, char ***names, uint32 **types)
 {
+	prs_struct qbuf, rbuf;
+	LSA_Q_LOOKUP_SIDS q;
+	LSA_R_LOOKUP_SIDS r;
+	DOM_R_REF ref;
 	NTSTATUS result = NT_STATUS_OK;
-	int sids_left = 0;
-	int sids_processed = 0;
-	const DOM_SID *hunk_sids = sids;
-	char **hunk_domains;
-	char **hunk_names;
-	enum lsa_SidType *hunk_types;
-	char **domains = NULL;
-	char **names = NULL;
-	enum lsa_SidType *types = NULL;
+	int i;
 
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	init_q_lookup_sids(mem_ctx, &q, pol, num_sids, sids, 1);
+
+	ZERO_STRUCT(ref);
+
+	r.dom_ref = &ref;
+
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_LOOKUPSIDS,
+			q, r,
+			qbuf, rbuf,
+			lsa_io_q_lookup_sids,
+			lsa_io_r_lookup_sids,
+			NT_STATUS_UNSUCCESSFUL );
+
+	if (!NT_STATUS_IS_OK(r.status) &&
+	    NT_STATUS_V(r.status) != NT_STATUS_V(STATUS_SOME_UNMAPPED)) {
+	  
+		/* An actual error occured */
+		result = r.status;
+
+		goto done;
+	}
+
+	/* Return output parameters */
+
+	if (r.mapped_count == 0) {
+		result = NT_STATUS_NONE_MAPPED;
+		goto done;
+	}
+
 	if (num_sids) {
-		if (!(domains = TALLOC_ARRAY(mem_ctx, char *, num_sids))) {
-			DEBUG(0, ("rpccli_lsa_lookup_sids(): out of memory\n"));
+		if (!((*domains) = TALLOC_ARRAY(mem_ctx, char *, num_sids))) {
+			DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
 			result = NT_STATUS_NO_MEMORY;
-			goto fail;
+			goto done;
 		}
 
-		if (!(names = TALLOC_ARRAY(mem_ctx, char *, num_sids))) {
-			DEBUG(0, ("rpccli_lsa_lookup_sids(): out of memory\n"));
+		if (!((*names) = TALLOC_ARRAY(mem_ctx, char *, num_sids))) {
+			DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
 			result = NT_STATUS_NO_MEMORY;
-			goto fail;
+			goto done;
 		}
 
-		if (!(types = TALLOC_ARRAY(mem_ctx, enum lsa_SidType, num_sids))) {
-			DEBUG(0, ("rpccli_lsa_lookup_sids(): out of memory\n"));
+		if (!((*types) = TALLOC_ARRAY(mem_ctx, uint32, num_sids))) {
+			DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
 			result = NT_STATUS_NO_MEMORY;
-			goto fail;
+			goto done;
 		}
+	} else {
+		(*domains) = NULL;
+		(*names) = NULL;
+		(*types) = NULL;
 	}
+		
+	for (i = 0; i < num_sids; i++) {
+		fstring name, dom_name;
+		uint32 dom_idx = r.names.name[i].domain_idx;
 
-	sids_left = num_sids;
-	hunk_domains = domains;
-	hunk_names = names;
-	hunk_types = types;
+		/* Translate optimised name through domain index array */
 
-	while (sids_left > 0) {
-		int hunk_num_sids;
-		NTSTATUS hunk_result = NT_STATUS_OK;
+		if (dom_idx != 0xffffffff) {
 
-		hunk_num_sids = ((sids_left > LOOKUP_SIDS_HUNK_SIZE)
-				? LOOKUP_SIDS_HUNK_SIZE
-				: sids_left);
+			rpcstr_pull_unistr2_fstring(
+                                dom_name, &ref.ref_dom[dom_idx].uni_dom_name);
+			rpcstr_pull_unistr2_fstring(
+                                name, &r.names.uni_name[i]);
 
-		DEBUG(10, ("rpccli_lsa_lookup_sids: processing items "
-			   "%d -- %d of %d.\n",
-			   sids_processed,
-			   sids_processed + hunk_num_sids - 1,
-			   num_sids));
+			(*names)[i] = talloc_strdup(mem_ctx, name);
+			(*domains)[i] = talloc_strdup(mem_ctx, dom_name);
+			(*types)[i] = r.names.name[i].sid_name_use;
+			
+			if (((*names)[i] == NULL) || ((*domains)[i] == NULL)) {
+				DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
+				result = NT_STATUS_UNSUCCESSFUL;
+				goto done;
+			}
 
-		hunk_result = rpccli_lsa_lookup_sids_noalloc(cli,
-							     mem_ctx,
-							     pol,
-							     hunk_num_sids,
-							     hunk_sids,
-							     hunk_domains,
-							     hunk_names,
-							     hunk_types);
-
-		if (!NT_STATUS_IS_OK(hunk_result) &&
-		    !NT_STATUS_EQUAL(hunk_result, STATUS_SOME_UNMAPPED) &&
-		    !NT_STATUS_EQUAL(hunk_result, NT_STATUS_NONE_MAPPED))
-		{
-			/* An actual error occured */
-			result = hunk_result;
-			goto fail;
+		} else {
+			(*names)[i] = NULL;
+			(*domains)[i] = NULL;
+			(*types)[i] = SID_NAME_UNKNOWN;
 		}
-
-		/* adapt overall result */
-		if (( NT_STATUS_IS_OK(result) &&
-		     !NT_STATUS_IS_OK(hunk_result))
-		    ||
-		    ( NT_STATUS_EQUAL(result, NT_STATUS_NONE_MAPPED) &&
-		     !NT_STATUS_EQUAL(hunk_result, NT_STATUS_NONE_MAPPED)))
-		{
-			result = STATUS_SOME_UNMAPPED;
-		}
-
-		sids_left -= hunk_num_sids;
-		sids_processed += hunk_num_sids; /* only used in DEBUG */
-		hunk_sids += hunk_num_sids;
-		hunk_domains += hunk_num_sids;
-		hunk_names += hunk_num_sids;
-		hunk_types += hunk_num_sids;
 	}
 
-	*pdomains = domains;
-	*pnames = names;
-	*ptypes = types;
-	return result;
+ done:
 
-fail:
-	TALLOC_FREE(domains);
-	TALLOC_FREE(names);
-	TALLOC_FREE(types);
 	return result;
 }
 
@@ -356,39 +279,35 @@
 
 NTSTATUS rpccli_lsa_lookup_names(struct rpc_pipe_client *cli,
 				 TALLOC_CTX *mem_ctx,
-				 POLICY_HND *pol, int num_names,
+				 POLICY_HND *pol, int num_names, 
 				 const char **names,
 				 const char ***dom_names,
-				 int level,
 				 DOM_SID **sids,
-				 enum lsa_SidType **types)
+				 uint32 **types)
 {
+	prs_struct qbuf, rbuf;
+	LSA_Q_LOOKUP_NAMES q;
+	LSA_R_LOOKUP_NAMES r;
+	DOM_R_REF ref;
 	NTSTATUS result;
 	int i;
-	struct lsa_String *lsa_names = NULL;
-	struct lsa_RefDomainList *domains = NULL;
-	struct lsa_TransSidArray sid_array;
-	uint32_t count = 0;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
 
-	ZERO_STRUCT(sid_array);
+	ZERO_STRUCT(ref);
+	r.dom_ref = &ref;
 
-	lsa_names = TALLOC_ARRAY(mem_ctx, struct lsa_String, num_names);
-	if (!lsa_names) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	init_q_lookup_names(mem_ctx, &q, pol, num_names, names);
 
-	for (i=0; i<num_names; i++) {
-		init_lsa_String(&lsa_names[i], names[i]);
-	}
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_LOOKUPNAMES,
+			q, r,
+			qbuf, rbuf,
+			lsa_io_q_lookup_names,
+			lsa_io_r_lookup_names,
+			NT_STATUS_UNSUCCESSFUL);
 
-	result = rpccli_lsa_LookupNames(cli, mem_ctx,
-				        pol,
-					num_names,
-					lsa_names,
-					&domains,
-					&sid_array,
-					level,
-					&count);
+	result = r.status;
 
 	if (!NT_STATUS_IS_OK(result) && NT_STATUS_V(result) !=
 	    NT_STATUS_V(STATUS_SOME_UNMAPPED)) {
@@ -400,7 +319,7 @@
 
 	/* Return output parameters */
 
-	if (count == 0) {
+	if (r.mapped_count == 0) {
 		result = NT_STATUS_NONE_MAPPED;
 		goto done;
 	}
@@ -412,7 +331,7 @@
 			goto done;
 		}
 
-		if (!((*types = TALLOC_ARRAY(mem_ctx, enum lsa_SidType, num_names)))) {
+		if (!((*types = TALLOC_ARRAY(mem_ctx, uint32, num_names)))) {
 			DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
 			result = NT_STATUS_NO_MEMORY;
 			goto done;
@@ -435,8 +354,9 @@
 	}
 
 	for (i = 0; i < num_names; i++) {
-		uint32_t dom_idx = sid_array.sids[i].sid_index;
-		uint32_t dom_rid = sid_array.sids[i].rid;
+		DOM_RID *t_rids = r.dom_rid;
+		uint32 dom_idx = t_rids[i].rid_idx;
+		uint32 dom_rid = t_rids[i].rid;
 		DOM_SID *sid = &(*sids)[i];
 
 		/* Translate optimised sid through domain index array */
@@ -448,19 +368,20 @@
 			continue;
 		}
 
-		sid_copy(sid, domains->domains[dom_idx].sid);
+		sid_copy(sid, &ref.ref_dom[dom_idx].ref_dom.sid);
 
 		if (dom_rid != 0xffffffff) {
 			sid_append_rid(sid, dom_rid);
 		}
 
-		(*types)[i] = sid_array.sids[i].sid_type;
+		(*types)[i] = t_rids[i].type;
 
 		if (dom_names == NULL) {
 			continue;
 		}
 
-		(*dom_names)[i] = domains->domains[dom_idx].name.string;
+		(*dom_names)[i] = rpcstr_pull_unistr2_talloc(
+			*dom_names, &ref.ref_dom[dom_idx].uni_dom_name);
 	}
 
  done:
@@ -468,65 +389,968 @@
 	return result;
 }
 
+NTSTATUS rpccli_lsa_query_info_policy_new(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+					  POLICY_HND *pol, uint16 info_class,
+					  LSA_INFO_CTR *ctr) 
+{
+	prs_struct qbuf, rbuf;
+	LSA_Q_QUERY_INFO q;
+	LSA_R_QUERY_INFO r;
+	NTSTATUS result;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	init_q_query(&q, pol, info_class);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_LSARPC, LSA_QUERYINFOPOLICY,
+		q, r,
+		qbuf, rbuf,
+		lsa_io_q_query,
+		lsa_io_r_query,
+		NT_STATUS_UNSUCCESSFUL);
+
+	result = r.status;
+
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+ done:
+
+	*ctr = r.ctr;
+	
+	return result;
+}
+
+NTSTATUS rpccli_lsa_query_info_policy2_new(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+					  POLICY_HND *pol, uint16 info_class,
+					  LSA_INFO_CTR2 *ctr) 
+{
+	prs_struct qbuf, rbuf;
+	LSA_Q_QUERY_INFO2 q;
+	LSA_R_QUERY_INFO2 r;
+	NTSTATUS result;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	init_q_query2(&q, pol, info_class);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_LSARPC, LSA_QUERYINFO2,
+		q, r,
+		qbuf, rbuf,
+		lsa_io_q_query_info2,
+		lsa_io_r_query_info2,
+		NT_STATUS_UNSUCCESSFUL);
+
+	result = r.status;
+
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+ done:
+
+	*ctr = r.ctr;
+	
+	return result;
+}
+
+
+
+/** Query info policy
+ *
+ *  @param domain_sid - returned remote server's domain sid */
+
+NTSTATUS rpccli_lsa_query_info_policy(struct rpc_pipe_client *cli,
+				      TALLOC_CTX *mem_ctx,
+				      POLICY_HND *pol, uint16 info_class, 
+				      char **domain_name, DOM_SID **domain_sid)
+{
+	prs_struct qbuf, rbuf;
+	LSA_Q_QUERY_INFO q;
+	LSA_R_QUERY_INFO r;
+	NTSTATUS result;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	init_q_query(&q, pol, info_class);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_LSARPC, LSA_QUERYINFOPOLICY,
+		q, r,
+		qbuf, rbuf,
+		lsa_io_q_query,
+		lsa_io_r_query,
+		NT_STATUS_UNSUCCESSFUL);
+
+	result = r.status;
+
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	/* Return output parameters */
+
+	switch (info_class) {
+
+	case 3:
+		if (domain_name && (r.ctr.info.id3.buffer_dom_name != 0)) {
+			*domain_name = unistr2_tdup(mem_ctx, 
+						   &r.ctr.info.id3.
+						   uni_domain_name);
+			if (!*domain_name) {
+				return NT_STATUS_NO_MEMORY;
+			}
+		}
+
+		if (domain_sid && (r.ctr.info.id3.buffer_dom_sid != 0)) {
+			*domain_sid = TALLOC_P(mem_ctx, DOM_SID);
+			if (!*domain_sid) {
+				return NT_STATUS_NO_MEMORY;
+			}
+			sid_copy(*domain_sid, &r.ctr.info.id3.dom_sid.sid);
+		}
+
+		break;
+
+	case 5:
+		
+		if (domain_name && (r.ctr.info.id5.buffer_dom_name != 0)) {
+			*domain_name = unistr2_tdup(mem_ctx, 
+						   &r.ctr.info.id5.
+						   uni_domain_name);
+			if (!*domain_name) {
+				return NT_STATUS_NO_MEMORY;
+			}
+		}
+			
+		if (domain_sid && (r.ctr.info.id5.buffer_dom_sid != 0)) {
+			*domain_sid = TALLOC_P(mem_ctx, DOM_SID);
+			if (!*domain_sid) {
+				return NT_STATUS_NO_MEMORY;
+			}
+			sid_copy(*domain_sid, &r.ctr.info.id5.dom_sid.sid);
+		}
+		break;
+			
+	default:
+		DEBUG(3, ("unknown info class %d\n", info_class));
+		break;		      
+	}
+	
+ done:
+
+	return result;
+}
+
+/** Query info policy2
+ *
+ *  @param domain_name - returned remote server's domain name
+ *  @param dns_name - returned remote server's dns domain name
+ *  @param forest_name - returned remote server's forest name
+ *  @param domain_guid - returned remote server's domain guid
+ *  @param domain_sid - returned remote server's domain sid */
+
+NTSTATUS rpccli_lsa_query_info_policy2(struct rpc_pipe_client *cli,
+				       TALLOC_CTX *mem_ctx,
+				       POLICY_HND *pol, uint16 info_class, 
+				       char **domain_name, char **dns_name,
+				       char **forest_name,
+				       struct GUID **domain_guid,
+				       DOM_SID **domain_sid)
+{
+	prs_struct qbuf, rbuf;
+	LSA_Q_QUERY_INFO2 q;
+	LSA_R_QUERY_INFO2 r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	if (info_class != 12)
+		goto done;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	init_q_query2(&q, pol, info_class);
+
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_QUERYINFO2,
+		q, r,
+		qbuf, rbuf,
+		lsa_io_q_query_info2,
+		lsa_io_r_query_info2,
+		NT_STATUS_UNSUCCESSFUL);
+
+	result = r.status;
+
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	/* Return output parameters */
+
+	ZERO_STRUCTP(domain_guid);
+
+	if (domain_name && r.ctr.info.id12.hdr_nb_dom_name.buffer) {
+		*domain_name = unistr2_tdup(mem_ctx, 
+					    &r.ctr.info.id12
+					    .uni_nb_dom_name);
+		if (!*domain_name) {
+			return NT_STATUS_NO_MEMORY;
+		}
+	}
+	if (dns_name && r.ctr.info.id12.hdr_dns_dom_name.buffer) {
+		*dns_name = unistr2_tdup(mem_ctx, 
+					 &r.ctr.info.id12
+					 .uni_dns_dom_name);
+		if (!*dns_name) {
+			return NT_STATUS_NO_MEMORY;
+		}
+	}
+	if (forest_name && r.ctr.info.id12.hdr_forest_name.buffer) {
+		*forest_name = unistr2_tdup(mem_ctx, 
+					    &r.ctr.info.id12
+					    .uni_forest_name);
+		if (!*forest_name) {
+			return NT_STATUS_NO_MEMORY;
+		}
+	}
+	
+	if (domain_guid) {
+		*domain_guid = TALLOC_P(mem_ctx, struct GUID);
+		if (!*domain_guid) {
+			return NT_STATUS_NO_MEMORY;
+		}
+		memcpy(*domain_guid, 
+		       &r.ctr.info.id12.dom_guid, 
+		       sizeof(struct GUID));
+	}
+
+	if (domain_sid && r.ctr.info.id12.ptr_dom_sid != 0) {
+		*domain_sid = TALLOC_P(mem_ctx, DOM_SID);
+		if (!*domain_sid) {
+			return NT_STATUS_NO_MEMORY;
+		}
+		sid_copy(*domain_sid, 
+			 &r.ctr.info.id12.dom_sid.sid);
+	}
+	
+ done:
+
+	return result;
+}
+
+NTSTATUS rpccli_lsa_set_info_policy(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+				    POLICY_HND *pol, uint16 info_class,
+				    LSA_INFO_CTR ctr) 
+{
+	prs_struct qbuf, rbuf;
+	LSA_Q_SET_INFO q;
+	LSA_R_SET_INFO r;
+	NTSTATUS result;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	init_q_set(&q, pol, info_class, ctr);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_LSARPC, LSA_SETINFOPOLICY,
+		q, r,
+		qbuf, rbuf,
+		lsa_io_q_set,
+		lsa_io_r_set,
+		NT_STATUS_UNSUCCESSFUL);
+
+	result = r.status;
+
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	/* Return output parameters */
+
+ done:
+
+	return result;
+}
+
+
+/**
+ * Enumerate list of trusted domains
+ *
+ * @param cli client state (cli_state) structure of the connection
+ * @param mem_ctx memory context
+ * @param pol opened lsa policy handle
+ * @param enum_ctx enumeration context ie. index of first returned domain entry
+ * @param pref_num_domains preferred max number of entries returned in one response
+ * @param num_domains total number of trusted domains returned by response
+ * @param domain_names returned trusted domain names
+ * @param domain_sids returned trusted domain sids
+ *
+ * @return nt status code of response
+ **/
+
+NTSTATUS rpccli_lsa_enum_trust_dom(struct rpc_pipe_client *cli,
+				   TALLOC_CTX *mem_ctx,
+				   POLICY_HND *pol, uint32 *enum_ctx, 
+				   uint32 *num_domains,
+				   char ***domain_names, DOM_SID **domain_sids)
+{
+	prs_struct qbuf, rbuf;
+	LSA_Q_ENUM_TRUST_DOM in;
+	LSA_R_ENUM_TRUST_DOM out;
+	int i;
+	fstring tmp;
+
+	ZERO_STRUCT(in);
+	ZERO_STRUCT(out);
+
+	/* 64k is enough for about 2000 trusted domains */
+	
+        init_q_enum_trust_dom(&in, pol, *enum_ctx, 0x10000);
+
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_ENUMTRUSTDOM, 
+	            in, out, 
+	            qbuf, rbuf,
+	            lsa_io_q_enum_trust_dom,
+	            lsa_io_r_enum_trust_dom, 
+	            NT_STATUS_UNSUCCESSFUL );
+
+
+	/* check for an actual error */
+
+	if ( !NT_STATUS_IS_OK(out.status) 
+		&& !NT_STATUS_EQUAL(out.status, NT_STATUS_NO_MORE_ENTRIES) 
+		&& !NT_STATUS_EQUAL(out.status, STATUS_MORE_ENTRIES) )
+	{
+		return out.status;
+	}
+		
+	/* Return output parameters */
+
+	*num_domains  = out.count;
+	*enum_ctx     = out.enum_context;
+	
+	if ( out.count ) {
+
+		/* Allocate memory for trusted domain names and sids */
+
+		if ( !(*domain_names = TALLOC_ARRAY(mem_ctx, char *, out.count)) ) {
+			DEBUG(0, ("cli_lsa_enum_trust_dom(): out of memory\n"));
+			return NT_STATUS_NO_MEMORY;
+		}
+
+		if ( !(*domain_sids = TALLOC_ARRAY(mem_ctx, DOM_SID, out.count)) ) {
+			DEBUG(0, ("cli_lsa_enum_trust_dom(): out of memory\n"));
+			return NT_STATUS_NO_MEMORY;
+		}
+
+		/* Copy across names and sids */
+
+		for (i = 0; i < out.count; i++) {
+
+			rpcstr_pull( tmp, out.domlist->domains[i].name.string->buffer, 
+				sizeof(tmp), out.domlist->domains[i].name.length, 0);
+			(*domain_names)[i] = talloc_strdup(mem_ctx, tmp);
+
+			sid_copy(&(*domain_sids)[i], &out.domlist->domains[i].sid->sid );
+		}
+	}
+
+	return out.status;
+}
+
+/** Enumerate privileges*/
+
+NTSTATUS rpccli_lsa_enum_privilege(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                                POLICY_HND *pol, uint32 *enum_context, uint32 pref_max_length,
+				uint32 *count, char ***privs_name, uint32 **privs_high, uint32 **privs_low)
+{
+	prs_struct qbuf, rbuf;
+	LSA_Q_ENUM_PRIVS q;
+	LSA_R_ENUM_PRIVS r;
+	NTSTATUS result;
+	int i;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	init_q_enum_privs(&q, pol, *enum_context, pref_max_length);
+
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_ENUM_PRIVS,
+		q, r,
+		qbuf, rbuf,
+		lsa_io_q_enum_privs,
+		lsa_io_r_enum_privs,
+		NT_STATUS_UNSUCCESSFUL);
+
+	result = r.status;
+
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	/* Return output parameters */
+
+	*enum_context = r.enum_context;
+	*count = r.count;
+
+	if (r.count) {
+		if (!((*privs_name = TALLOC_ARRAY(mem_ctx, char *, r.count)))) {
+			DEBUG(0, ("(cli_lsa_enum_privilege): out of memory\n"));
+			result = NT_STATUS_UNSUCCESSFUL;
+			goto done;
+		}
+
+		if (!((*privs_high = TALLOC_ARRAY(mem_ctx, uint32, r.count)))) {
+			DEBUG(0, ("(cli_lsa_enum_privilege): out of memory\n"));
+			result = NT_STATUS_UNSUCCESSFUL;
+			goto done;
+		}
+
+		if (!((*privs_low = TALLOC_ARRAY(mem_ctx, uint32, r.count)))) {
+			DEBUG(0, ("(cli_lsa_enum_privilege): out of memory\n"));
+			result = NT_STATUS_UNSUCCESSFUL;
+			goto done;
+		}
+	} else {
+		*privs_name = NULL;
+		*privs_high = NULL;
+		*privs_low = NULL;
+	}
+
+	for (i = 0; i < r.count; i++) {
+		fstring name;
+
+		rpcstr_pull_unistr2_fstring( name, &r.privs[i].name);
+
+		(*privs_name)[i] = talloc_strdup(mem_ctx, name);
+
+		(*privs_high)[i] = r.privs[i].luid_high;
+		(*privs_low)[i] = r.privs[i].luid_low;
+	}
+
+ done:
+
+	return result;
+}
+
+/** Get privilege name */
+
+NTSTATUS rpccli_lsa_get_dispname(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+			      POLICY_HND *pol, const char *name, 
+			      uint16 lang_id, uint16 lang_id_sys,
+			      fstring description, uint16 *lang_id_desc)
+{
+	prs_struct qbuf, rbuf;
+	LSA_Q_PRIV_GET_DISPNAME q;
+	LSA_R_PRIV_GET_DISPNAME r;
+	NTSTATUS result;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	init_lsa_priv_get_dispname(&q, pol, name, lang_id, lang_id_sys);
+
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_PRIV_GET_DISPNAME,
+		q, r,
+		qbuf, rbuf,
+		lsa_io_q_priv_get_dispname,
+		lsa_io_r_priv_get_dispname,
+		NT_STATUS_UNSUCCESSFUL);
+
+	result = r.status;
+
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	/* Return output parameters */
+	
+	rpcstr_pull_unistr2_fstring(description , &r.desc);
+	*lang_id_desc = r.lang_id;
+
+ done:
+
+	return result;
+}
+
+/** Enumerate list of SIDs  */
+
+NTSTATUS rpccli_lsa_enum_sids(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                                POLICY_HND *pol, uint32 *enum_ctx, uint32 pref_max_length, 
+                                uint32 *num_sids, DOM_SID **sids)
+{
+	prs_struct qbuf, rbuf;
+	LSA_Q_ENUM_ACCOUNTS q;
+	LSA_R_ENUM_ACCOUNTS r;
+	NTSTATUS result;
+	int i;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+        init_lsa_q_enum_accounts(&q, pol, *enum_ctx, pref_max_length);
+
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_ENUM_ACCOUNTS,
+		q, r,
+		qbuf, rbuf,
+		lsa_io_q_enum_accounts,
+		lsa_io_r_enum_accounts,
+		NT_STATUS_UNSUCCESSFUL);
+
+	result = r.status;
+
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	if (r.sids.num_entries==0)
+		goto done;
+
+	/* Return output parameters */
+
+	*sids = TALLOC_ARRAY(mem_ctx, DOM_SID, r.sids.num_entries);
+	if (!*sids) {
+		DEBUG(0, ("(cli_lsa_enum_sids): out of memory\n"));
+		result = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+	/* Copy across names and sids */
+
+	for (i = 0; i < r.sids.num_entries; i++) {
+		sid_copy(&(*sids)[i], &r.sids.sid[i].sid);
+	}
+
+	*num_sids= r.sids.num_entries;
+	*enum_ctx = r.enum_context;
+
+ done:
+
+	return result;
+}
+
+/** Create a LSA user handle
+ *
+ * @param cli Handle on an initialised SMB connection
+ *
+ * FIXME: The code is actually identical to open account
+ * TODO: Check and code what the function should exactly do
+ *
+ * */
+
+NTSTATUS rpccli_lsa_create_account(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                             POLICY_HND *dom_pol, DOM_SID *sid, uint32 desired_access, 
+			     POLICY_HND *user_pol)
+{
+	prs_struct qbuf, rbuf;
+	LSA_Q_CREATEACCOUNT q;
+	LSA_R_CREATEACCOUNT r;
+	NTSTATUS result;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Initialise input parameters */
+
+	init_lsa_q_create_account(&q, dom_pol, sid, desired_access);
+
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_CREATEACCOUNT,
+		q, r,
+		qbuf, rbuf,
+		lsa_io_q_create_account,
+		lsa_io_r_create_account,
+		NT_STATUS_UNSUCCESSFUL);
+
+	/* Return output parameters */
+
+	result = r.status;
+
+	if (NT_STATUS_IS_OK(result)) {
+		*user_pol = r.pol;
+	}
+
+	return result;
+}
+
+/** Open a LSA user handle
+ *
+ * @param cli Handle on an initialised SMB connection */
+
+NTSTATUS rpccli_lsa_open_account(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                             POLICY_HND *dom_pol, DOM_SID *sid, uint32 des_access, 
+			     POLICY_HND *user_pol)
+{
+	prs_struct qbuf, rbuf;
+	LSA_Q_OPENACCOUNT q;
+	LSA_R_OPENACCOUNT r;
+	NTSTATUS result;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Initialise input parameters */
+
+	init_lsa_q_open_account(&q, dom_pol, sid, des_access);
+
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_OPENACCOUNT,
+		q, r,
+		qbuf, rbuf,
+		lsa_io_q_open_account,
+		lsa_io_r_open_account,
+		NT_STATUS_UNSUCCESSFUL);
+
+	/* Return output parameters */
+
+	result = r.status;
+
+	if (NT_STATUS_IS_OK(result)) {
+		*user_pol = r.pol;
+	}
+
+	return result;
+}
+
+/** Enumerate user privileges
+ *
+ * @param cli Handle on an initialised SMB connection */
+
+NTSTATUS rpccli_lsa_enum_privsaccount(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                             POLICY_HND *pol, uint32 *count, LUID_ATTR **set)
+{
+	prs_struct qbuf, rbuf;
+	LSA_Q_ENUMPRIVSACCOUNT q;
+	LSA_R_ENUMPRIVSACCOUNT r;
+	NTSTATUS result;
+	int i;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Initialise input parameters */
+
+	init_lsa_q_enum_privsaccount(&q, pol);
+
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_ENUMPRIVSACCOUNT,
+		q, r,
+		qbuf, rbuf,
+		lsa_io_q_enum_privsaccount,
+		lsa_io_r_enum_privsaccount,
+		NT_STATUS_UNSUCCESSFUL);
+
+	/* Return output parameters */
+
+	result = r.status;
+
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	if (r.count == 0)
+		goto done;
+
+	if (!((*set = TALLOC_ARRAY(mem_ctx, LUID_ATTR, r.count)))) {
+		DEBUG(0, ("(cli_lsa_enum_privsaccount): out of memory\n"));
+		result = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+	for (i=0; i<r.count; i++) {
+		(*set)[i].luid.low = r.set.set[i].luid.low;
+		(*set)[i].luid.high = r.set.set[i].luid.high;
+		(*set)[i].attr = r.set.set[i].attr;
+	}
+
+	*count=r.count;
+ done:
+
+	return result;
+}
+
+/** Get a privilege value given its name */
+
+NTSTATUS rpccli_lsa_lookup_priv_value(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+				 POLICY_HND *pol, const char *name, LUID *luid)
+{
+	prs_struct qbuf, rbuf;
+	LSA_Q_LOOKUP_PRIV_VALUE q;
+	LSA_R_LOOKUP_PRIV_VALUE r;
+	NTSTATUS result;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_lsa_q_lookup_priv_value(&q, pol, name);
+
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_LOOKUPPRIVVALUE,
+		q, r,
+		qbuf, rbuf,
+		lsa_io_q_lookup_priv_value,
+		lsa_io_r_lookup_priv_value,
+		NT_STATUS_UNSUCCESSFUL);
+
+	result = r.status;
+
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	/* Return output parameters */
+
+	(*luid).low=r.luid.low;
+	(*luid).high=r.luid.high;
+
+ done:
+
+	return result;
+}
+
+/** Query LSA security object */
+
+NTSTATUS rpccli_lsa_query_secobj(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+			      POLICY_HND *pol, uint32 sec_info, 
+			      SEC_DESC_BUF **psdb)
+{
+	prs_struct qbuf, rbuf;
+	LSA_Q_QUERY_SEC_OBJ q;
+	LSA_R_QUERY_SEC_OBJ r;
+	NTSTATUS result;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_q_query_sec_obj(&q, pol, sec_info);
+
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_QUERYSECOBJ,
+		q, r,
+		qbuf, rbuf,
+		lsa_io_q_query_sec_obj,
+		lsa_io_r_query_sec_obj,
+		NT_STATUS_UNSUCCESSFUL);
+
+	result = r.status;
+
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	/* Return output parameters */
+
+	if (psdb)
+		*psdb = r.buf;
+
+ done:
+
+	return result;
+}
+
+
+/* Enumerate account rights This is similar to enum_privileges but
+   takes a SID directly, avoiding the open_account call.
+*/
+
+NTSTATUS rpccli_lsa_enum_account_rights(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+				     POLICY_HND *pol, DOM_SID *sid,
+				     uint32 *count, char ***priv_names)
+{
+	prs_struct qbuf, rbuf;
+	LSA_Q_ENUM_ACCT_RIGHTS q;
+	LSA_R_ENUM_ACCT_RIGHTS r;
+	NTSTATUS result;
+	int i;
+	fstring *privileges;
+	char **names;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+	init_q_enum_acct_rights(&q, pol, 2, sid);
+
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_ENUMACCTRIGHTS,
+		q, r,
+		qbuf, rbuf,
+		lsa_io_q_enum_acct_rights,
+		lsa_io_r_enum_acct_rights,
+		NT_STATUS_UNSUCCESSFUL);
+
+	result = r.status;
+
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	*count = r.count;
+	if (! *count) {
+		goto done;
+	}
+
+	
+	privileges = TALLOC_ARRAY( mem_ctx, fstring, *count );
+	names      = TALLOC_ARRAY( mem_ctx, char *, *count );
+
+	if ((privileges == NULL) || (names == NULL)) {
+		TALLOC_FREE(privileges);
+		TALLOC_FREE(names);
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	for ( i=0; i<*count; i++ ) {
+		UNISTR4 *uni_string = &r.rights->strings[i];
+
+		if ( !uni_string->string )
+			continue;
+
+		rpcstr_pull( privileges[i], uni_string->string->buffer, sizeof(privileges[i]), -1, STR_TERMINATE );
+			
+		/* now copy to the return array */
+		names[i] = talloc_strdup( mem_ctx, privileges[i] );
+	}
+	
+	*priv_names = names;
+
+done:
+
+	return result;
+}
+
+
+
+/* add account rights to an account. */
+
+NTSTATUS rpccli_lsa_add_account_rights(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+				    POLICY_HND *pol, DOM_SID sid,
+					uint32 count, const char **privs_name)
+{
+	prs_struct qbuf, rbuf;
+	LSA_Q_ADD_ACCT_RIGHTS q;
+	LSA_R_ADD_ACCT_RIGHTS r;
+	NTSTATUS result;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+	init_q_add_acct_rights(&q, pol, &sid, count, privs_name);
+
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_ADDACCTRIGHTS,
+		q, r,
+		qbuf, rbuf,
+		lsa_io_q_add_acct_rights,
+		lsa_io_r_add_acct_rights,
+		NT_STATUS_UNSUCCESSFUL);
+
+	result = r.status;
+
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+done:
+
+	return result;
+}
+
+
+/* remove account rights for an account. */
+
+NTSTATUS rpccli_lsa_remove_account_rights(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+				       POLICY_HND *pol, DOM_SID sid, BOOL removeall,
+				       uint32 count, const char **privs_name)
+{
+	prs_struct qbuf, rbuf;
+	LSA_Q_REMOVE_ACCT_RIGHTS q;
+	LSA_R_REMOVE_ACCT_RIGHTS r;
+	NTSTATUS result;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+	init_q_remove_acct_rights(&q, pol, &sid, removeall?1:0, count, privs_name);
+
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_REMOVEACCTRIGHTS,
+		q, r,
+		qbuf, rbuf,
+		lsa_io_q_remove_acct_rights,
+		lsa_io_r_remove_acct_rights,
+		NT_STATUS_UNSUCCESSFUL);
+
+	result = r.status;
+
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+done:
+
+	return result;
+}
+
+
 #if 0
 
 /** An example of how to use the routines in this file.  Fetch a DOMAIN
     sid. Does complete cli setup / teardown anonymously. */
 
-bool fetch_domain_sid( char *domain, char *remote_machine, DOM_SID *psid)
+BOOL fetch_domain_sid( char *domain, char *remote_machine, DOM_SID *psid)
 {
+	extern pstring global_myname;
 	struct cli_state cli;
 	NTSTATUS result;
 	POLICY_HND lsa_pol;
-	bool ret = False;
-
+	BOOL ret = False;
+ 
 	ZERO_STRUCT(cli);
 	if(cli_initialise(&cli) == False) {
 		DEBUG(0,("fetch_domain_sid: unable to initialize client connection.\n"));
 		return False;
 	}
-
+ 
 	if(!resolve_name( remote_machine, &cli.dest_ip, 0x20)) {
 		DEBUG(0,("fetch_domain_sid: Can't resolve address for %s\n", remote_machine));
 		goto done;
 	}
-
+ 
 	if (!cli_connect(&cli, remote_machine, &cli.dest_ip)) {
 		DEBUG(0,("fetch_domain_sid: unable to connect to SMB server on \
 machine %s. Error was : %s.\n", remote_machine, cli_errstr(&cli) ));
 		goto done;
 	}
 
-	if (!attempt_netbios_session_request(&cli, global_myname(), remote_machine, &cli.dest_ip)) {
-		DEBUG(0,("fetch_domain_sid: machine %s rejected the NetBIOS session request.\n",
+	if (!attempt_netbios_session_request(&cli, global_myname, remote_machine, &cli.dest_ip)) {
+		DEBUG(0,("fetch_domain_sid: machine %s rejected the NetBIOS session request.\n", 
 			remote_machine));
 		goto done;
 	}
-
+ 
 	cli.protocol = PROTOCOL_NT1;
-
+ 
 	if (!cli_negprot(&cli)) {
 		DEBUG(0,("fetch_domain_sid: machine %s rejected the negotiate protocol. \
 Error was : %s.\n", remote_machine, cli_errstr(&cli) ));
 		goto done;
 	}
-
+ 
 	if (cli.protocol != PROTOCOL_NT1) {
 		DEBUG(0,("fetch_domain_sid: machine %s didn't negotiate NT protocol.\n",
 			remote_machine));
 		goto done;
 	}
-
+ 
 	/*
 	 * Do an anonymous session setup.
 	 */
-
+ 
 	if (!cli_session_setup(&cli, "", "", 0, "", 0, "")) {
 		DEBUG(0,("fetch_domain_sid: machine %s rejected the session setup. \
 Error was : %s.\n", remote_machine, cli_errstr(&cli) ));
 		goto done;
 	}
-
+ 
 	if (!(cli.sec_mode & NEGOTIATE_SECURITY_USER_LEVEL)) {
 		DEBUG(0,("fetch_domain_sid: machine %s isn't in user level security mode\n",
 			remote_machine));
@@ -540,26 +1364,26 @@
 	}
 
 	/* Fetch domain sid */
-
+ 
 	if (!cli_nt_session_open(&cli, PI_LSARPC)) {
 		DEBUG(0, ("fetch_domain_sid: Error connecting to SAM pipe\n"));
 		goto done;
 	}
-
+ 
 	result = cli_lsa_open_policy(&cli, cli.mem_ctx, True, SEC_RIGHTS_QUERY_VALUE, &lsa_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		DEBUG(0, ("fetch_domain_sid: Error opening lsa policy handle. %s\n",
 			nt_errstr(result) ));
 		goto done;
 	}
-
+ 
 	result = cli_lsa_query_info_policy(&cli, cli.mem_ctx, &lsa_pol, 5, domain, psid);
 	if (!NT_STATUS_IS_OK(result)) {
 		DEBUG(0, ("fetch_domain_sid: Error querying lsa policy handle. %s\n",
 			nt_errstr(result) ));
 		goto done;
 	}
-
+ 
 	ret = True;
 
   done:
@@ -569,3 +1393,222 @@
 }
 
 #endif
+
+NTSTATUS rpccli_lsa_open_trusted_domain(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+				     POLICY_HND *pol, DOM_SID *dom_sid, uint32 access_mask,
+				     POLICY_HND *trustdom_pol)
+{
+	prs_struct qbuf, rbuf;
+	LSA_Q_OPEN_TRUSTED_DOMAIN q;
+	LSA_R_OPEN_TRUSTED_DOMAIN r;
+	NTSTATUS result;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Initialise input parameters */
+
+	init_lsa_q_open_trusted_domain(&q, pol, dom_sid, access_mask);
+
+	/* Marshall data and send request */
+
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_OPENTRUSTDOM,
+		q, r,
+		qbuf, rbuf,
+		lsa_io_q_open_trusted_domain,
+		lsa_io_r_open_trusted_domain,
+		NT_STATUS_UNSUCCESSFUL);
+
+	/* Return output parameters */
+	
+	result = r.status;
+
+	if (NT_STATUS_IS_OK(result)) {
+		*trustdom_pol = r.handle;
+	}
+
+	return result;
+}
+
+NTSTATUS rpccli_lsa_query_trusted_domain_info(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+					   POLICY_HND *pol, 
+					   uint16 info_class,  
+					   LSA_TRUSTED_DOMAIN_INFO **info)
+{
+	prs_struct qbuf, rbuf;
+	LSA_Q_QUERY_TRUSTED_DOMAIN_INFO q;
+	LSA_R_QUERY_TRUSTED_DOMAIN_INFO r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_q_query_trusted_domain_info(&q, pol, info_class); 
+
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_QUERYTRUSTDOMINFO,
+		q, r,
+		qbuf, rbuf,
+		lsa_io_q_query_trusted_domain_info,
+		lsa_io_r_query_trusted_domain_info,
+		NT_STATUS_UNSUCCESSFUL);
+
+	result = r.status;
+
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	*info = r.info;
+		
+done:
+	return result;
+}
+
+NTSTATUS rpccli_lsa_open_trusted_domain_by_name(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+						POLICY_HND *pol, const char *name, uint32 access_mask,
+						POLICY_HND *trustdom_pol)
+{
+	prs_struct qbuf, rbuf;
+	LSA_Q_OPEN_TRUSTED_DOMAIN_BY_NAME q;
+	LSA_R_OPEN_TRUSTED_DOMAIN_BY_NAME r;
+	NTSTATUS result;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Initialise input parameters */
+
+	init_lsa_q_open_trusted_domain_by_name(&q, pol, name, access_mask);
+
+	/* Marshall data and send request */
+
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_OPENTRUSTDOMBYNAME,
+		q, r,
+		qbuf, rbuf,
+		lsa_io_q_open_trusted_domain_by_name,
+		lsa_io_r_open_trusted_domain_by_name,
+		NT_STATUS_UNSUCCESSFUL);
+
+	/* Return output parameters */
+	
+	result = r.status;
+
+	if (NT_STATUS_IS_OK(result)) {
+		*trustdom_pol = r.handle;
+	}
+
+	return result;
+}
+
+
+NTSTATUS rpccli_lsa_query_trusted_domain_info_by_sid(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+						  POLICY_HND *pol, 
+						  uint16 info_class, DOM_SID *dom_sid, 
+						  LSA_TRUSTED_DOMAIN_INFO **info)
+{
+	prs_struct qbuf, rbuf;
+	LSA_Q_QUERY_TRUSTED_DOMAIN_INFO_BY_SID q;
+	LSA_R_QUERY_TRUSTED_DOMAIN_INFO r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_q_query_trusted_domain_info_by_sid(&q, pol, info_class, dom_sid); 
+
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_QUERYTRUSTDOMINFOBYSID,
+		q, r,
+		qbuf, rbuf,
+		lsa_io_q_query_trusted_domain_info_by_sid,
+		lsa_io_r_query_trusted_domain_info,
+		NT_STATUS_UNSUCCESSFUL);
+
+	result = r.status;
+
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	*info = r.info;
+
+done:
+
+	return result;
+}
+
+NTSTATUS rpccli_lsa_query_trusted_domain_info_by_name(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+						   POLICY_HND *pol, 
+						   uint16 info_class, const char *domain_name, 
+						   LSA_TRUSTED_DOMAIN_INFO **info)
+{
+	prs_struct qbuf, rbuf;
+	LSA_Q_QUERY_TRUSTED_DOMAIN_INFO_BY_NAME q;
+	LSA_R_QUERY_TRUSTED_DOMAIN_INFO r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_q_query_trusted_domain_info_by_name(&q, pol, info_class, domain_name); 
+
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_QUERYTRUSTDOMINFOBYNAME,
+		q, r,
+		qbuf, rbuf,
+		lsa_io_q_query_trusted_domain_info_by_name,
+		lsa_io_r_query_trusted_domain_info,
+		NT_STATUS_UNSUCCESSFUL);
+
+	result = r.status;
+
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	*info = r.info;
+
+done:
+	
+	return result;
+}
+
+NTSTATUS cli_lsa_query_domain_info_policy(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+					  POLICY_HND *pol, 
+					  uint16 info_class, LSA_DOM_INFO_UNION **info)
+{
+	prs_struct qbuf, rbuf;
+	LSA_Q_QUERY_DOM_INFO_POLICY q;
+	LSA_R_QUERY_DOM_INFO_POLICY r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_q_query_dom_info(&q, pol, info_class); 
+
+	CLI_DO_RPC( cli, mem_ctx, PI_LSARPC, LSA_QUERYDOMINFOPOL, 
+		q, r,
+		qbuf, rbuf,
+		lsa_io_q_query_dom_info,
+		lsa_io_r_query_dom_info,
+		NT_STATUS_UNSUCCESSFUL);
+
+	result = r.status;
+
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	*info = r.info;
+
+done:
+	return result;
+}
+

Modified: branches/samba/upstream/source/rpc_client/cli_netlogon.c
===================================================================
--- branches/samba/upstream/source/rpc_client/cli_netlogon.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_client/cli_netlogon.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,23 +1,23 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    NT Domain Authentication SMB / MSRPC client
    Copyright (C) Andrew Tridgell 1992-2000
    Copyright (C) Jeremy Allison                    1998.
    Largely re-written by Jeremy Allison (C)	   2005.
-   Copyright (C) Guenther Deschner                 2008.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -28,19 +28,57 @@
  private data. Only call this via rpccli_netlogon_setup_creds(). JRA.
 */
 
-/* instead of rpccli_net_req_chal() we use rpccli_netr_ServerReqChallenge() now - gd */
+static NTSTATUS rpccli_net_req_chal(struct rpc_pipe_client *cli,
+				TALLOC_CTX *mem_ctx,
+				const char *server_name,
+				const char *clnt_name,
+				const DOM_CHAL *clnt_chal_in,
+				DOM_CHAL *srv_chal_out)
+{
+	prs_struct qbuf, rbuf;
+	NET_Q_REQ_CHAL q;
+	NET_R_REQ_CHAL r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 
+	/* create and send a MSRPC command with api NET_REQCHAL */
+
+	DEBUG(4,("cli_net_req_chal: LSA Request Challenge from %s to %s\n",
+		clnt_name, server_name));
+        
+	/* store the parameters */
+	init_q_req_chal(&q, server_name, clnt_name, clnt_chal_in);
+
+	/* Marshall data and send request */
+	CLI_DO_RPC(cli, mem_ctx, PI_NETLOGON, NET_REQCHAL,
+		q, r,
+		qbuf, rbuf,
+		net_io_q_req_chal,
+		net_io_r_req_chal,
+		NT_STATUS_UNSUCCESSFUL);
+
+	result = r.status;
+
+	/* Return result */
+
+	if (NT_STATUS_IS_OK(result)) {
+		/* Store the returned server challenge. */
+		*srv_chal_out = r.srv_chal;
+	}
+
+	return result;
+}
+
 #if 0
 /****************************************************************************
 LSA Authenticate 2
 
 Send the client credential, receive back a server credential.
-Ensure that the server credential returned matches the session key
+Ensure that the server credential returned matches the session key 
 encrypt of the server challenge originally received. JRA.
 ****************************************************************************/
 
-  NTSTATUS rpccli_net_auth2(struct rpc_pipe_client *cli,
-		       uint16 sec_chan,
+  NTSTATUS rpccli_net_auth2(struct rpc_pipe_client *cli, 
+		       uint16 sec_chan, 
 		       uint32 *neg_flags, DOM_CHAL *srv_chal)
 {
         prs_struct qbuf, rbuf;
@@ -53,7 +91,7 @@
 		fstr_sprintf( machine_acct, "%s$", lp_workgroup() );
 	else
 		fstrcpy( machine_acct, cli->mach_acct );
-
+	
         /* create and send a MSRPC command with api NET_AUTH2 */
 
         DEBUG(4,("cli_net_auth2: srv:%s acct:%s sc:%x mc: %s chal %s neg: %x\n",
@@ -62,8 +100,8 @@
 
         /* store the parameters */
 
-        init_q_auth_2(&q, cli->srv_name_slash, machine_acct,
-                      sec_chan, global_myname(), &cli->clnt_cred.challenge,
+        init_q_auth_2(&q, cli->srv_name_slash, machine_acct, 
+                      sec_chan, global_myname(), &cli->clnt_cred.challenge, 
                       *neg_flags);
 
         /* turn parameters into data stream */
@@ -79,7 +117,7 @@
 
         if (NT_STATUS_IS_OK(result)) {
                 UTIME zerotime;
-
+                
                 /*
                  * Check the returned value using the initial
                  * server received challenge.
@@ -106,31 +144,125 @@
  LSA Authenticate 2
 
  Send the client credential, receive back a server credential.
- The caller *must* ensure that the server credential returned matches the session key
+ The caller *must* ensure that the server credential returned matches the session key 
  encrypt of the server challenge originally received. JRA.
 ****************************************************************************/
 
-/* instead of rpccli_net_auth2() we use rpccli_netr_ServerAuthenticate2() now -  gd */
+static NTSTATUS rpccli_net_auth2(struct rpc_pipe_client *cli,
+			TALLOC_CTX *mem_ctx,
+			const char *server_name,
+			const char *account_name,
+			uint16 sec_chan_type,
+			const char *computer_name,
+			uint32 *neg_flags_inout,
+			const DOM_CHAL *clnt_chal_in,
+			DOM_CHAL *srv_chal_out)
+{
+        prs_struct qbuf, rbuf;
+        NET_Q_AUTH_2 q;
+        NET_R_AUTH_2 r;
+        NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 
+        /* create and send a MSRPC command with api NET_AUTH2 */
 
+        DEBUG(4,("cli_net_auth2: srv:%s acct:%s sc:%x mc: %s neg: %x\n",
+                 server_name, account_name, sec_chan_type, computer_name,
+                 *neg_flags_inout));
+
+        /* store the parameters */
+
+        init_q_auth_2(&q, server_name, account_name, sec_chan_type,
+		      computer_name, clnt_chal_in, *neg_flags_inout);
+
+        /* turn parameters into data stream */
+
+	CLI_DO_RPC(cli, mem_ctx, PI_NETLOGON, NET_AUTH2,
+		q, r,
+		qbuf, rbuf,
+		net_io_q_auth_2,
+		net_io_r_auth_2,
+		NT_STATUS_UNSUCCESSFUL);
+
+        result = r.status;
+
+        if (NT_STATUS_IS_OK(result)) {
+		*srv_chal_out = r.srv_chal;
+		*neg_flags_inout = r.srv_flgs.neg_flags;
+        }
+
+        return result;
+}
+
+#if 0	/* not currebntly used */
 /****************************************************************************
+ LSA Authenticate 3
+
+ Send the client credential, receive back a server credential.
+ The caller *must* ensure that the server credential returned matches the session key 
+ encrypt of the server challenge originally received. JRA.
+****************************************************************************/
+
+static NTSTATUS rpccli_net_auth3(struct rpc_pipe_client *cli, 
+			TALLOC_CTX *mem_ctx,
+			const char *server_name,
+			const char *account_name,
+			uint16 sec_chan_type,
+			const char *computer_name,
+			uint32 *neg_flags_inout,
+			const DOM_CHAL *clnt_chal_in,
+			DOM_CHAL *srv_chal_out)
+{
+        prs_struct qbuf, rbuf;
+        NET_Q_AUTH_3 q;
+        NET_R_AUTH_3 r;
+        NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+        /* create and send a MSRPC command with api NET_AUTH2 */
+
+        DEBUG(4,("cli_net_auth3: srv:%s acct:%s sc:%x mc: %s chal %s neg: %x\n",
+		server_name, account_name, sec_chan_type, computer_name,
+		credstr(clnt_chal_in->data), *neg_flags_inout));
+
+        /* store the parameters */
+        init_q_auth_3(&q, server_name, account_name, sec_chan_type,
+			computer_name, clnt_chal_in, *neg_flags_inout);
+
+        /* turn parameters into data stream */
+
+	CLI_DO_RPC(cli, mem_ctx, PI_NETLOGON, NET_AUTH3,
+		q, r,
+		qbuf, rbuf,
+		net_io_q_auth_3,
+		net_io_r_auth_3,
+		NT_STATUS_UNSUCCESSFUL);
+
+        if (NT_STATUS_IS_OK(result)) {
+		*srv_chal_out = r.srv_chal;
+		*neg_flags_inout = r.srv_flgs.neg_flags;
+        }
+
+        return result;
+}
+#endif 	/* not currebntly used */
+
+/****************************************************************************
  Wrapper function that uses the auth and auth2 calls to set up a NETLOGON
  credentials chain. Stores the credentials in the struct dcinfo in the
  netlogon pipe struct.
 ****************************************************************************/
 
 NTSTATUS rpccli_netlogon_setup_creds(struct rpc_pipe_client *cli,
-				     const char *server_name,
-				     const char *domain,
-				     const char *clnt_name,
-				     const char *machine_account,
-				     const unsigned char machine_pwd[16],
-				     enum netr_SchannelType sec_chan_type,
-				     uint32_t *neg_flags_inout)
+				const char *server_name,
+				const char *domain,
+				const char *clnt_name,
+				const char *machine_account,
+				const unsigned char machine_pwd[16],
+				uint32 sec_chan_type,
+				uint32 *neg_flags_inout)
 {
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	struct netr_Credential clnt_chal_send;
-	struct netr_Credential srv_chal_recv;
+	DOM_CHAL clnt_chal_send;
+	DOM_CHAL srv_chal_recv;
 	struct dcinfo *dc;
 	bool retried = false;
 
@@ -159,11 +291,13 @@
 	generate_random_buffer(clnt_chal_send.data, 8);
 
 	/* Get the server challenge. */
-	result = rpccli_netr_ServerReqChallenge(cli, cli->mem_ctx,
-						dc->remote_machine,
-						clnt_name,
-						&clnt_chal_send,
-						&srv_chal_recv);
+	result = rpccli_net_req_chal(cli,
+				cli->mem_ctx,
+				dc->remote_machine,
+				clnt_name,
+				&clnt_chal_send,
+				&srv_chal_recv);
+
 	if (!NT_STATUS_IS_OK(result)) {
 		return result;
 	}
@@ -176,18 +310,19 @@
 			machine_pwd,
 			&clnt_chal_send);
 
-	/*
-	 * Send client auth-2 challenge and receive server repy.
-	 */
+        /*  
+         * Send client auth-2 challenge and receive server repy.
+         */
 
-	result = rpccli_netr_ServerAuthenticate2(cli, cli->mem_ctx,
-						 dc->remote_machine,
-						 dc->mach_acct,
-						 sec_chan_type,
-						 clnt_name,
-						 &clnt_chal_send, /* input. */
-						 &srv_chal_recv, /* output. */
-						 neg_flags_inout);
+	result = rpccli_net_auth2(cli,
+			cli->mem_ctx,
+			dc->remote_machine,
+			dc->mach_acct,
+			sec_chan_type,
+			clnt_name,
+			neg_flags_inout,
+			&clnt_chal_send, /* input. */
+			&srv_chal_recv); /* output */
 
 	/* we might be talking to NT4, so let's downgrade in that case and retry
 	 * with the returned neg_flags - gd */
@@ -206,7 +341,7 @@
 	 * server received challenge.
 	 */
 
-	if (!netlogon_creds_client_check(dc, &srv_chal_recv)) {
+	if (!creds_client_check(dc, &srv_chal_recv)) {
 		/*
 		 * Server replied with bad credential. Fail.
 		 */
@@ -223,351 +358,607 @@
 	return NT_STATUS_OK;
 }
 
-/* Logon domain user */
+/* Logon Control 2 */
 
-NTSTATUS rpccli_netlogon_sam_logon(struct rpc_pipe_client *cli,
-				   TALLOC_CTX *mem_ctx,
-				   uint32 logon_parameters,
-				   const char *domain,
-				   const char *username,
-				   const char *password,
-				   const char *workstation,
-				   int logon_type)
+NTSTATUS rpccli_netlogon_logon_ctrl2(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                                  uint32 query_level)
 {
+	prs_struct qbuf, rbuf;
+	NET_Q_LOGON_CTRL2 q;
+	NET_R_LOGON_CTRL2 r;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	struct netr_Authenticator clnt_creds;
-	struct netr_Authenticator ret_creds;
-	union netr_LogonInfo *logon;
-	union netr_Validation validation;
-	uint8_t authoritative;
-	int validation_level = 3;
-	fstring clnt_name_slash;
-	uint8 zeros[16];
+	fstring server;
 
-	ZERO_STRUCT(ret_creds);
-	ZERO_STRUCT(zeros);
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
 
-	logon = TALLOC_ZERO_P(mem_ctx, union netr_LogonInfo);
-	if (!logon) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	if (workstation) {
-		fstr_sprintf( clnt_name_slash, "\\\\%s", workstation );
-	} else {
-		fstr_sprintf( clnt_name_slash, "\\\\%s", global_myname() );
-	}
-
 	/* Initialise input parameters */
 
-	netlogon_creds_client_step(cli->dc, &clnt_creds);
+	slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->cli->desthost);
+	init_net_q_logon_ctrl2(&q, server, query_level);
 
-	switch (logon_type) {
-	case INTERACTIVE_LOGON_TYPE: {
+	/* Marshall data and send request */
 
-		struct netr_PasswordInfo *password_info;
+	CLI_DO_RPC(cli, mem_ctx, PI_NETLOGON, NET_LOGON_CTRL2,
+		q, r,
+		qbuf, rbuf,
+		net_io_q_logon_ctrl2,
+		net_io_r_logon_ctrl2,
+		NT_STATUS_UNSUCCESSFUL);
 
-		struct samr_Password lmpassword;
-		struct samr_Password ntpassword;
+	result = r.status;
+	return result;
+}
 
-		unsigned char lm_owf_user_pwd[16], nt_owf_user_pwd[16];
+/* GetAnyDCName */
 
-		unsigned char lm_owf[16];
-		unsigned char nt_owf[16];
-		unsigned char key[16];
+WERROR rpccli_netlogon_getanydcname(struct rpc_pipe_client *cli,
+				    TALLOC_CTX *mem_ctx, const char *mydcname,
+				    const char *domainname, fstring newdcname)
+{
+	prs_struct qbuf, rbuf;
+	NET_Q_GETANYDCNAME q;
+	NET_R_GETANYDCNAME r;
+	WERROR result;
+	fstring mydcname_slash;
 
-		password_info = TALLOC_ZERO_P(mem_ctx, struct netr_PasswordInfo);
-		if (!password_info) {
-			return NT_STATUS_NO_MEMORY;
-		}
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
 
-		nt_lm_owf_gen(password, nt_owf_user_pwd, lm_owf_user_pwd);
+	/* Initialise input parameters */
 
-#ifdef DEBUG_PASSWORD
-		DEBUG(100,("lm cypher:"));
-		dump_data(100, lm_owf_user_pwd, 16);
+	slprintf(mydcname_slash, sizeof(fstring)-1, "\\\\%s", mydcname);
+	init_net_q_getanydcname(&q, mydcname_slash, domainname);
 
-		DEBUG(100,("nt cypher:"));
-		dump_data(100, nt_owf_user_pwd, 16);
-#endif
-		memset(key, 0, 16);
-		memcpy(key, cli->dc->sess_key, 8);
+	/* Marshall data and send request */
 
-		memcpy(lm_owf, lm_owf_user_pwd, 16);
-		SamOEMhash(lm_owf, key, 16);
-		memcpy(nt_owf, nt_owf_user_pwd, 16);
-		SamOEMhash(nt_owf, key, 16);
+	CLI_DO_RPC_WERR(cli, mem_ctx, PI_NETLOGON, NET_GETANYDCNAME,
+		q, r,
+		qbuf, rbuf,
+		net_io_q_getanydcname,
+		net_io_r_getanydcname,
+		WERR_GENERAL_FAILURE);
 
-#ifdef DEBUG_PASSWORD
-		DEBUG(100,("encrypt of lm owf password:"));
-		dump_data(100, lm_owf, 16);
+	result = r.status;
 
-		DEBUG(100,("encrypt of nt owf password:"));
-		dump_data(100, nt_owf, 16);
-#endif
-		memcpy(lmpassword.hash, lm_owf, 16);
-		memcpy(ntpassword.hash, nt_owf, 16);
+	if (W_ERROR_IS_OK(result)) {
+		rpcstr_pull_unistr2_fstring(newdcname, &r.uni_dcname);
+	}
 
-		init_netr_PasswordInfo(password_info,
-				       domain,
-				       logon_parameters,
-				       0xdead,
-				       0xbeef,
-				       username,
-				       clnt_name_slash,
-				       lmpassword,
-				       ntpassword);
+	return result;
+}
 
-		logon->password = password_info;
+static WERROR pull_domain_controller_info_from_getdcname_reply(TALLOC_CTX *mem_ctx,
+							       struct DS_DOMAIN_CONTROLLER_INFO **info_out, 
+							       NET_R_DSR_GETDCNAME *r)
+{
+	struct DS_DOMAIN_CONTROLLER_INFO *info;
 
-		break;
+	info = TALLOC_ZERO_P(mem_ctx, struct DS_DOMAIN_CONTROLLER_INFO);
+	if (!info) {
+		return WERR_NOMEM;
 	}
-	case NET_LOGON_TYPE: {
-		struct netr_NetworkInfo *network_info;
-		uint8 chal[8];
-		unsigned char local_lm_response[24];
-		unsigned char local_nt_response[24];
-		struct netr_ChallengeResponse lm;
-		struct netr_ChallengeResponse nt;
 
-		ZERO_STRUCT(lm);
-		ZERO_STRUCT(nt);
+	if (&r->uni_dc_unc) {
 
-		network_info = TALLOC_ZERO_P(mem_ctx, struct netr_NetworkInfo);
-		if (!network_info) {
-			return NT_STATUS_NO_MEMORY;
+		char *tmp;
+		tmp = rpcstr_pull_unistr2_talloc(mem_ctx, &r->uni_dc_unc);
+		if (tmp == NULL) {
+			return WERR_GENERAL_FAILURE;
 		}
+		if (*tmp == '\\') tmp += 1;
+		if (*tmp == '\\') tmp += 1;
 
-		generate_random_buffer(chal, 8);
+		info->domain_controller_name = talloc_strdup(mem_ctx, tmp);
+		if (info->domain_controller_name == NULL) {
+			return WERR_GENERAL_FAILURE;
+		}
+	}
 
-		SMBencrypt(password, chal, local_lm_response);
-		SMBNTencrypt(password, chal, local_nt_response);
+	if (&r->uni_dc_address) {
 
-		lm.length = 24;
-		lm.data = local_lm_response;
+		char *tmp;
+		tmp = rpcstr_pull_unistr2_talloc(mem_ctx, &r->uni_dc_address);
+		if (tmp == NULL) {
+			return WERR_GENERAL_FAILURE;
+		}
+		if (*tmp == '\\') tmp += 1;
+		if (*tmp == '\\') tmp += 1;
 
-		nt.length = 24;
-		nt.data = local_nt_response;
+		info->domain_controller_address = talloc_strdup(mem_ctx, tmp);
+		if (info->domain_controller_address == NULL) {
+			return WERR_GENERAL_FAILURE;
+		}
+	}
 
-		init_netr_NetworkInfo(network_info,
-				      domain,
-				      logon_parameters,
-				      0xdead,
-				      0xbeef,
-				      username,
-				      clnt_name_slash,
-				      chal,
-				      nt,
-				      lm);
+	info->domain_controller_address_type = r->dc_address_type;
 
-		logon->network = network_info;
+	info->domain_guid = talloc_memdup(mem_ctx, &r->domain_guid, sizeof(struct GUID));
+	if (!info->domain_guid) {
+		return WERR_GENERAL_FAILURE;
+	}
 
-		break;
+	if (&r->uni_domain_name) {
+		info->domain_name = rpcstr_pull_unistr2_talloc(mem_ctx, &r->uni_domain_name);
+		if (!info->domain_name) {
+			return WERR_GENERAL_FAILURE;
+		}
 	}
-	default:
-		DEBUG(0, ("switch value %d not supported\n",
-			logon_type));
-		return NT_STATUS_INVALID_INFO_CLASS;
+
+	if (&r->uni_forest_name) {
+		info->dns_forest_name = rpcstr_pull_unistr2_talloc(mem_ctx, &r->uni_forest_name);
+		if (!info->dns_forest_name) {
+			return WERR_GENERAL_FAILURE;
+		}
 	}
 
-	result = rpccli_netr_LogonSamLogon(cli, mem_ctx,
-					   cli->dc->remote_machine,
-					   global_myname(),
-					   &clnt_creds,
-					   &ret_creds,
-					   logon_type,
-					   logon,
-					   validation_level,
-					   &validation,
-					   &authoritative);
+	info->flags = r->dc_flags;
 
-	if (memcmp(zeros, &ret_creds.cred.data, sizeof(ret_creds.cred.data)) != 0) {
-		/* Check returned credentials if present. */
-		if (!netlogon_creds_client_check(cli->dc, &ret_creds.cred)) {
-			DEBUG(0,("rpccli_netlogon_sam_logon: credentials chain check failed\n"));
-			return NT_STATUS_ACCESS_DENIED;
+	if (&r->uni_dc_site_name) {
+		info->dc_site_name = rpcstr_pull_unistr2_talloc(mem_ctx, &r->uni_dc_site_name);
+		if (!info->dc_site_name) {
+			return WERR_GENERAL_FAILURE;
 		}
 	}
 
-	return result;
+	if (&r->uni_client_site_name) {
+		info->client_site_name = rpcstr_pull_unistr2_talloc(mem_ctx, &r->uni_client_site_name);
+		if (!info->client_site_name) {
+			return WERR_GENERAL_FAILURE;
+		}
+	}
+
+	*info_out = info;
+
+	return WERR_OK;
 }
 
+/* Dsr_GetDCName */
 
-/**
- * Logon domain user with an 'network' SAM logon
- *
- * @param info3 Pointer to a NET_USER_INFO_3 already allocated by the caller.
- **/
-
-NTSTATUS rpccli_netlogon_sam_network_logon(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   uint32 logon_parameters,
-					   const char *server,
-					   const char *username,
-					   const char *domain,
-					   const char *workstation,
-					   const uint8 chal[8],
-					   DATA_BLOB lm_response,
-					   DATA_BLOB nt_response,
-					   struct netr_SamInfo3 **info3)
+WERROR rpccli_netlogon_dsr_getdcname(struct rpc_pipe_client *cli,
+				     TALLOC_CTX *mem_ctx,
+				     const char *server_name,
+				     const char *domain_name,
+				     struct GUID *domain_guid,
+				     struct GUID *site_guid,
+				     uint32_t flags,
+				     struct DS_DOMAIN_CONTROLLER_INFO **info_out)
 {
-	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	int validation_level = 3;
-	const char *workstation_name_slash;
-	const char *server_name_slash;
-	uint8 zeros[16];
-	struct netr_Authenticator clnt_creds;
-	struct netr_Authenticator ret_creds;
-	union netr_LogonInfo *logon = NULL;
-	struct netr_NetworkInfo *network_info;
-	uint8_t authoritative;
-	union netr_Validation validation;
-	struct netr_ChallengeResponse lm;
-	struct netr_ChallengeResponse nt;
-	struct netr_UserSessionKey user_session_key;
-	struct netr_LMSessionKey lmsesskey;
+	prs_struct qbuf, rbuf;
+	NET_Q_DSR_GETDCNAME q;
+	NET_R_DSR_GETDCNAME r;
+	char *tmp_str;
 
-	*info3 = NULL;
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
 
-	ZERO_STRUCT(zeros);
-	ZERO_STRUCT(ret_creds);
+	/* Initialize input parameters */
 
-	ZERO_STRUCT(lm);
-	ZERO_STRUCT(nt);
+	tmp_str = talloc_asprintf(mem_ctx, "\\\\%s", server_name);
+	if (tmp_str == NULL) {
+		return WERR_NOMEM;
+	}
 
-	logon = TALLOC_ZERO_P(mem_ctx, union netr_LogonInfo);
-	if (!logon) {
-		return NT_STATUS_NO_MEMORY;
+	init_net_q_dsr_getdcname(&q, tmp_str, domain_name, domain_guid,
+				 site_guid, flags);
+
+	/* Marshall data and send request */
+
+	CLI_DO_RPC_WERR(cli, mem_ctx, PI_NETLOGON, NET_DSR_GETDCNAME,
+			q, r,
+			qbuf, rbuf,
+			net_io_q_dsr_getdcname,
+			net_io_r_dsr_getdcname,
+			WERR_GENERAL_FAILURE);
+
+	if (!W_ERROR_IS_OK(r.result)) {
+		return r.result;
 	}
 
-	network_info = TALLOC_ZERO_P(mem_ctx, struct netr_NetworkInfo);
-	if (!network_info) {
-		return NT_STATUS_NO_MEMORY;
+	r.result = pull_domain_controller_info_from_getdcname_reply(mem_ctx, info_out, &r);
+	if (!W_ERROR_IS_OK(r.result)) {
+		return r.result;
 	}
 
-	netlogon_creds_client_step(cli->dc, &clnt_creds);
+	return WERR_OK;
+}
 
-	if (server[0] != '\\' && server[1] != '\\') {
-		server_name_slash = talloc_asprintf(mem_ctx, "\\\\%s", server);
-	} else {
-		server_name_slash = server;
+/* Dsr_GetDCNameEx */
+
+WERROR rpccli_netlogon_dsr_getdcnameex(struct rpc_pipe_client *cli,
+				       TALLOC_CTX *mem_ctx,
+				       const char *server_name,
+				       const char *domain_name,
+				       struct GUID *domain_guid,
+				       const char *site_name,
+				       uint32_t flags,
+				       struct DS_DOMAIN_CONTROLLER_INFO **info_out)
+{
+	prs_struct qbuf, rbuf;
+	NET_Q_DSR_GETDCNAMEEX q;
+	NET_R_DSR_GETDCNAME r;
+	char *tmp_str;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Initialize input parameters */
+
+	tmp_str = talloc_asprintf(mem_ctx, "\\\\%s", server_name);
+	if (tmp_str == NULL) {
+		return WERR_NOMEM;
 	}
 
-	if (workstation[0] != '\\' && workstation[1] != '\\') {
-		workstation_name_slash = talloc_asprintf(mem_ctx, "\\\\%s", workstation);
-	} else {
-		workstation_name_slash = workstation;
+	init_net_q_dsr_getdcnameex(&q, server_name, domain_name, domain_guid,
+				   site_name, flags);
+
+	/* Marshall data and send request */
+
+	CLI_DO_RPC_WERR(cli, mem_ctx, PI_NETLOGON, NET_DSR_GETDCNAMEEX,
+			q, r,
+			qbuf, rbuf,
+			net_io_q_dsr_getdcnameex,
+			net_io_r_dsr_getdcname,
+			WERR_GENERAL_FAILURE);
+
+	if (!W_ERROR_IS_OK(r.result)) {
+		return r.result;
 	}
 
-	if (!workstation_name_slash || !server_name_slash) {
-		DEBUG(0, ("talloc_asprintf failed!\n"));
-		return NT_STATUS_NO_MEMORY;
+	r.result = pull_domain_controller_info_from_getdcname_reply(mem_ctx, info_out, &r);
+	if (!W_ERROR_IS_OK(r.result)) {
+		return r.result;
 	}
 
-	/* Initialise input parameters */
+	return WERR_OK;
+}
 
-	lm.data = lm_response.data;
-	lm.length = lm_response.length;
-	nt.data = nt_response.data;
-	nt.length = nt_response.length;
+/* Dsr_GetDCNameEx */
 
-	init_netr_NetworkInfo(network_info,
-			      domain,
-			      logon_parameters,
-			      0xdead,
-			      0xbeef,
-			      username,
-			      workstation_name_slash,
-			      (uint8_t *) chal,
-			      nt,
-			      lm);
+WERROR rpccli_netlogon_dsr_getdcnameex2(struct rpc_pipe_client *cli,
+					TALLOC_CTX *mem_ctx,
+					const char *server_name,
+					const char *client_account,
+					uint32 mask,
+					const char *domain_name,
+					struct GUID *domain_guid,
+					const char *site_name,
+					uint32_t flags,
+					struct DS_DOMAIN_CONTROLLER_INFO **info_out)
+{
+	prs_struct qbuf, rbuf;
+	NET_Q_DSR_GETDCNAMEEX2 q;
+	NET_R_DSR_GETDCNAME r;
+	char *tmp_str;
 
-	logon->network = network_info;
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
 
+	/* Initialize input parameters */
+
+	tmp_str = talloc_asprintf(mem_ctx, "\\\\%s", server_name);
+	if (tmp_str == NULL) {
+		return WERR_NOMEM;
+	}
+
+	init_net_q_dsr_getdcnameex2(&q, server_name, domain_name, client_account,
+				    mask, domain_guid, site_name, flags);
+
 	/* Marshall data and send request */
 
-	result = rpccli_netr_LogonSamLogon(cli, mem_ctx,
-					   server_name_slash,
-					   global_myname(),
-					   &clnt_creds,
-					   &ret_creds,
-					   NET_LOGON_TYPE,
-					   logon,
-					   validation_level,
-					   &validation,
-					   &authoritative);
-	if (!NT_STATUS_IS_OK(result)) {
-		return result;
+	CLI_DO_RPC_WERR(cli, mem_ctx, PI_NETLOGON, NET_DSR_GETDCNAMEEX2,
+			q, r,
+			qbuf, rbuf,
+			net_io_q_dsr_getdcnameex2,
+			net_io_r_dsr_getdcname,
+			WERR_GENERAL_FAILURE);
+
+	if (!W_ERROR_IS_OK(r.result)) {
+		return r.result;
 	}
 
-	user_session_key = validation.sam3->base.key;
-	lmsesskey = validation.sam3->base.LMSessKey;
+	r.result = pull_domain_controller_info_from_getdcname_reply(mem_ctx, info_out, &r);
+	if (!W_ERROR_IS_OK(r.result)) {
+		return r.result;
+	}
 
-	if (memcmp(zeros, user_session_key.key, 16) != 0) {
-		SamOEMhash(user_session_key.key, cli->dc->sess_key, 16);
+	return WERR_OK;
+}
+
+
+/* Dsr_GetSiteName */
+
+WERROR rpccli_netlogon_dsr_getsitename(struct rpc_pipe_client *cli,
+				       TALLOC_CTX *mem_ctx,
+				       const char *computer_name,
+				       char **site_name)
+{
+	prs_struct qbuf, rbuf;
+	NET_Q_DSR_GETSITENAME q;
+	NET_R_DSR_GETSITENAME r;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Initialize input parameters */
+
+	init_net_q_dsr_getsitename(&q, computer_name);
+
+	/* Marshall data and send request */
+
+	CLI_DO_RPC_WERR(cli, mem_ctx, PI_NETLOGON, NET_DSR_GETSITENAME,
+			q, r,
+			qbuf, rbuf,
+			net_io_q_dsr_getsitename,
+			net_io_r_dsr_getsitename,
+			WERR_GENERAL_FAILURE);
+
+	if (!W_ERROR_IS_OK(r.result)) {
+		return r.result;
 	}
 
-	if (memcmp(zeros, lmsesskey.key, 8) != 0) {
-		SamOEMhash(lmsesskey.key, cli->dc->sess_key, 8);
+	if ((site_name != NULL) &&
+	    ((*site_name = rpcstr_pull_unistr2_talloc(
+		      mem_ctx, &r.uni_site_name)) == NULL)) {
+		return WERR_GENERAL_FAILURE;
 	}
 
-	if (memcmp(zeros, ret_creds.cred.data, sizeof(ret_creds.cred.data)) != 0) {
-		/* Check returned credentials if present. */
-		if (!netlogon_creds_client_check(cli->dc, &ret_creds.cred)) {
-			DEBUG(0,("rpccli_netlogon_sam_network_logon: credentials chain check failed\n"));
+	return WERR_OK;
+}
+
+
+
+/* Sam synchronisation */
+
+NTSTATUS rpccli_netlogon_sam_sync(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                               uint32 database_id, uint32 next_rid, uint32 *num_deltas,
+                               SAM_DELTA_HDR **hdr_deltas, 
+                               SAM_DELTA_CTR **deltas)
+{
+	prs_struct qbuf, rbuf;
+	NET_Q_SAM_SYNC q;
+	NET_R_SAM_SYNC r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+        DOM_CRED clnt_creds;
+        DOM_CRED ret_creds;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	ZERO_STRUCT(ret_creds);
+
+	/* Initialise input parameters */
+
+	creds_client_step(cli->dc, &clnt_creds);
+
+	init_net_q_sam_sync(&q, cli->dc->remote_machine, global_myname(),
+                            &clnt_creds, &ret_creds, database_id, next_rid);
+
+	/* Marshall data and send request */
+
+	CLI_DO_RPC_COPY_SESS_KEY(cli, mem_ctx, PI_NETLOGON, NET_SAM_SYNC,
+		q, r,
+		qbuf, rbuf,
+		net_io_q_sam_sync,
+		net_io_r_sam_sync,
+		NT_STATUS_UNSUCCESSFUL);
+
+        /* Return results */
+
+	result = r.status;
+        *num_deltas = r.num_deltas2;
+        *hdr_deltas = r.hdr_deltas;
+        *deltas = r.deltas;
+
+	if (!NT_STATUS_IS_ERR(result)) {
+		/* Check returned credentials. */
+		if (!creds_client_check(cli->dc, &r.srv_creds.challenge)) {
+			DEBUG(0,("cli_netlogon_sam_sync: credentials chain check failed\n"));
 			return NT_STATUS_ACCESS_DENIED;
 		}
 	}
 
-	*info3 = validation.sam3;
-
 	return result;
 }
 
-NTSTATUS rpccli_netlogon_sam_network_logon_ex(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      uint32 logon_parameters,
-					      const char *server,
-					      const char *username,
-					      const char *domain,
-					      const char *workstation,
-					      const uint8 chal[8],
-					      DATA_BLOB lm_response,
-					      DATA_BLOB nt_response,
-					      struct netr_SamInfo3 **info3)
+/* Sam synchronisation */
+
+NTSTATUS rpccli_netlogon_sam_deltas(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                                 uint32 database_id, uint64 seqnum,
+                                 uint32 *num_deltas, 
+                                 SAM_DELTA_HDR **hdr_deltas, 
+                                 SAM_DELTA_CTR **deltas)
 {
+	prs_struct qbuf, rbuf;
+	NET_Q_SAM_DELTAS q;
+	NET_R_SAM_DELTAS r;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	int validation_level = 3;
-	const char *workstation_name_slash;
-	const char *server_name_slash;
-	uint8 zeros[16];
-	union netr_LogonInfo *logon = NULL;
-	struct netr_NetworkInfo *network_info;
-	uint8_t authoritative;
-	union netr_Validation validation;
-	struct netr_ChallengeResponse lm;
-	struct netr_ChallengeResponse nt;
-	struct netr_UserSessionKey user_session_key;
-	struct netr_LMSessionKey lmsesskey;
-	uint32_t flags = 0;
+        DOM_CRED clnt_creds;
 
-	*info3 = NULL;
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
 
-	ZERO_STRUCT(zeros);
+	/* Initialise input parameters */
 
-	ZERO_STRUCT(lm);
-	ZERO_STRUCT(nt);
+	creds_client_step(cli->dc, &clnt_creds);
 
-	logon = TALLOC_ZERO_P(mem_ctx, union netr_LogonInfo);
-	if (!logon) {
-		return NT_STATUS_NO_MEMORY;
+	init_net_q_sam_deltas(&q, cli->dc->remote_machine,
+                              global_myname(), &clnt_creds, 
+                              database_id, seqnum);
+
+	/* Marshall data and send request */
+
+	CLI_DO_RPC(cli, mem_ctx, PI_NETLOGON, NET_SAM_DELTAS,
+		q, r,
+		qbuf, rbuf,
+		net_io_q_sam_deltas,
+		net_io_r_sam_deltas,
+		NT_STATUS_UNSUCCESSFUL);
+
+        /* Return results */
+
+	result = r.status;
+        *num_deltas = r.num_deltas2;
+        *hdr_deltas = r.hdr_deltas;
+        *deltas = r.deltas;
+
+	if (!NT_STATUS_IS_ERR(result)) {
+		/* Check returned credentials. */
+		if (!creds_client_check(cli->dc, &r.srv_creds.challenge)) {
+			DEBUG(0,("cli_netlogon_sam_sync: credentials chain check failed\n"));
+			return NT_STATUS_ACCESS_DENIED;
+		}
 	}
 
-	network_info = TALLOC_ZERO_P(mem_ctx, struct netr_NetworkInfo);
-	if (!network_info) {
-		return NT_STATUS_NO_MEMORY;
+	return result;
+}
+
+/* Logon domain user */
+
+NTSTATUS rpccli_netlogon_sam_logon(struct rpc_pipe_client *cli,
+				   TALLOC_CTX *mem_ctx,
+				   uint32 logon_parameters,
+				   const char *domain,
+				   const char *username,
+				   const char *password,
+				   const char *workstation,
+				   int logon_type)
+{
+	prs_struct qbuf, rbuf;
+	NET_Q_SAM_LOGON q;
+	NET_R_SAM_LOGON r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+	DOM_CRED clnt_creds;
+	DOM_CRED ret_creds;
+        NET_ID_INFO_CTR ctr;
+        NET_USER_INFO_3 user;
+        int validation_level = 3;
+	fstring clnt_name_slash;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	ZERO_STRUCT(ret_creds);
+
+	if (workstation) {
+		fstr_sprintf( clnt_name_slash, "\\\\%s", workstation );
+	} else {
+		fstr_sprintf( clnt_name_slash, "\\\\%s", global_myname() );
 	}
 
+        /* Initialise input parameters */
+
+	creds_client_step(cli->dc, &clnt_creds);
+
+        q.validation_level = validation_level;
+
+        ctr.switch_value = logon_type;
+
+        switch (logon_type) {
+        case INTERACTIVE_LOGON_TYPE: {
+                unsigned char lm_owf_user_pwd[16], nt_owf_user_pwd[16];
+
+                nt_lm_owf_gen(password, nt_owf_user_pwd, lm_owf_user_pwd);
+
+                init_id_info1(&ctr.auth.id1, domain, 
+			      logon_parameters, /* param_ctrl */
+                              0xdead, 0xbeef, /* LUID? */
+                              username, clnt_name_slash,
+                              (const char *)cli->dc->sess_key, lm_owf_user_pwd,
+                              nt_owf_user_pwd);
+
+                break;
+        }
+        case NET_LOGON_TYPE: {
+                uint8 chal[8];
+                unsigned char local_lm_response[24];
+                unsigned char local_nt_response[24];
+
+                generate_random_buffer(chal, 8);
+
+                SMBencrypt(password, chal, local_lm_response);
+                SMBNTencrypt(password, chal, local_nt_response);
+
+                init_id_info2(&ctr.auth.id2, domain, 
+			      logon_parameters, /* param_ctrl */
+                              0xdead, 0xbeef, /* LUID? */
+                              username, clnt_name_slash, chal,
+                              local_lm_response, 24, local_nt_response, 24);
+                break;
+        }
+        default:
+                DEBUG(0, ("switch value %d not supported\n", 
+                          ctr.switch_value));
+                return NT_STATUS_INVALID_INFO_CLASS;
+        }
+
+        r.user = &user;
+
+        init_sam_info(&q.sam_id, cli->dc->remote_machine, global_myname(),
+                      &clnt_creds, &ret_creds, logon_type,
+                      &ctr);
+
+        /* Marshall data and send request */
+
+	CLI_DO_RPC(cli, mem_ctx, PI_NETLOGON, NET_SAMLOGON,
+		q, r,
+		qbuf, rbuf,
+		net_io_q_sam_logon,
+		net_io_r_sam_logon,
+		NT_STATUS_UNSUCCESSFUL);
+
+        /* Return results */
+
+	result = r.status;
+
+	if (r.buffer_creds) {
+		/* Check returned credentials if present. */
+		if (!creds_client_check(cli->dc, &r.srv_creds.challenge)) {
+			DEBUG(0,("rpccli_netlogon_sam_logon: credentials chain check failed\n"));
+			return NT_STATUS_ACCESS_DENIED;
+		}
+	}
+
+        return result;
+}
+
+
+/** 
+ * Logon domain user with an 'network' SAM logon 
+ *
+ * @param info3 Pointer to a NET_USER_INFO_3 already allocated by the caller.
+ **/
+
+NTSTATUS rpccli_netlogon_sam_network_logon(struct rpc_pipe_client *cli,
+					   TALLOC_CTX *mem_ctx,
+					   uint32 logon_parameters,
+					   const char *server,
+					   const char *username,
+					   const char *domain,
+					   const char *workstation, 
+					   const uint8 chal[8], 
+					   DATA_BLOB lm_response,
+					   DATA_BLOB nt_response,
+					   NET_USER_INFO_3 *info3)
+{
+	prs_struct qbuf, rbuf;
+	NET_Q_SAM_LOGON q;
+	NET_R_SAM_LOGON r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+	NET_ID_INFO_CTR ctr;
+	int validation_level = 3;
+	const char *workstation_name_slash;
+	const char *server_name_slash;
+	static uint8 zeros[16];
+	DOM_CRED clnt_creds;
+	DOM_CRED ret_creds;
+	int i;
+	
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	ZERO_STRUCT(ret_creds);
+
+	creds_client_step(cli->dc, &clnt_creds);
+
 	if (server[0] != '\\' && server[1] != '\\') {
 		server_name_slash = talloc_asprintf(mem_ctx, "\\\\%s", server);
 	} else {
@@ -587,51 +978,106 @@
 
 	/* Initialise input parameters */
 
-	lm.data = lm_response.data;
-	lm.length = lm_response.length;
-	nt.data = nt_response.data;
-	nt.length = nt_response.length;
+	q.validation_level = validation_level;
 
-	init_netr_NetworkInfo(network_info,
-			      domain,
-			      logon_parameters,
-			      0xdead,
-			      0xbeef,
-			      username,
-			      workstation_name_slash,
-			      (uint8_t *) chal,
-			      nt,
-			      lm);
+        ctr.switch_value = NET_LOGON_TYPE;
 
-	logon->network = network_info;
+	init_id_info2(&ctr.auth.id2, domain,
+		      logon_parameters, /* param_ctrl */
+		      0xdead, 0xbeef, /* LUID? */
+		      username, workstation_name_slash, (const uchar*)chal,
+		      lm_response.data, lm_response.length, nt_response.data, nt_response.length);
+ 
+        init_sam_info(&q.sam_id, server_name_slash, global_myname(),
+                      &clnt_creds, &ret_creds, NET_LOGON_TYPE,
+                      &ctr);
 
+        r.user = info3;
+
         /* Marshall data and send request */
 
-	result = rpccli_netr_LogonSamLogonEx(cli, mem_ctx,
-					     server_name_slash,
-					     global_myname(),
-					     NET_LOGON_TYPE,
-					     logon,
-					     validation_level,
-					     &validation,
-					     &authoritative,
-					     &flags);
-	if (!NT_STATUS_IS_OK(result)) {
-		return result;
+	CLI_DO_RPC(cli, mem_ctx, PI_NETLOGON, NET_SAMLOGON,
+		q, r,
+		qbuf, rbuf,
+		net_io_q_sam_logon,
+		net_io_r_sam_logon,
+		NT_STATUS_UNSUCCESSFUL);
+
+	if (memcmp(zeros, info3->user_sess_key, 16) != 0) {
+		SamOEMhash(info3->user_sess_key, cli->dc->sess_key, 16);
+	} else {
+		memset(info3->user_sess_key, '\0', 16);
 	}
 
-	user_session_key = validation.sam3->base.key;
-	lmsesskey = validation.sam3->base.LMSessKey;
+	if (memcmp(zeros, info3->lm_sess_key, 8) != 0) {
+		SamOEMhash(info3->lm_sess_key, cli->dc->sess_key, 8);
+	} else {
+		memset(info3->lm_sess_key, '\0', 8);
+	}
 
-	if (memcmp(zeros, user_session_key.key, 16) != 0) {
-		SamOEMhash(user_session_key.key, cli->dc->sess_key, 16);
+	for (i=0; i < 7; i++) {
+		memset(&info3->unknown[i], '\0', 4);
 	}
 
-	if (memcmp(zeros, lmsesskey.key, 8) != 0) {
-		SamOEMhash(lmsesskey.key, cli->dc->sess_key, 8);
+        /* Return results */
+
+	result = r.status;
+
+	if (r.buffer_creds) {
+		/* Check returned credentials if present. */
+		if (!creds_client_check(cli->dc, &r.srv_creds.challenge)) {
+			DEBUG(0,("rpccli_netlogon_sam_network_logon: credentials chain check failed\n"));
+			return NT_STATUS_ACCESS_DENIED;
+		}
 	}
 
-	*info3 = validation.sam3;
+        return result;
+}
 
+/***************************************************************************
+LSA Server Password Set.
+****************************************************************************/
+
+NTSTATUS rpccli_net_srv_pwset(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, 
+			   const char *machine_name, const uint8 hashed_mach_pwd[16])
+{
+	prs_struct rbuf;
+	prs_struct qbuf; 
+	DOM_CRED clnt_creds;
+	NET_Q_SRV_PWSET q;
+	NET_R_SRV_PWSET r;
+	uint16 sec_chan_type = 2;
+	NTSTATUS result;
+
+	creds_client_step(cli->dc, &clnt_creds);
+	
+	DEBUG(4,("cli_net_srv_pwset: srv:%s acct:%s sc: %d mc: %s\n",
+		 cli->dc->remote_machine, cli->dc->mach_acct, sec_chan_type, machine_name));
+	
+        /* store the parameters */
+	init_q_srv_pwset(&q, cli->dc->remote_machine, (const char *)cli->dc->sess_key,
+			 cli->dc->mach_acct, sec_chan_type, machine_name, 
+			 &clnt_creds, hashed_mach_pwd);
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_NETLOGON, NET_SRVPWSET,
+		q, r,
+		qbuf, rbuf,
+		net_io_q_srv_pwset,
+		net_io_r_srv_pwset,
+		NT_STATUS_UNSUCCESSFUL);
+
+	result = r.status;
+
+	if (!NT_STATUS_IS_OK(result)) {
+		/* report error code */
+		DEBUG(0,("cli_net_srv_pwset: %s\n", nt_errstr(result)));
+	}
+
+	/* Always check returned credentials. */
+	if (!creds_client_check(cli->dc, &r.srv_cred.challenge)) {
+		DEBUG(0,("rpccli_net_srv_pwset: credentials chain check failed\n"));
+		return NT_STATUS_ACCESS_DENIED;
+	}
+
 	return result;
 }

Modified: branches/samba/upstream/source/rpc_client/cli_pipe.c
===================================================================
--- branches/samba/upstream/source/rpc_client/cli_pipe.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_client/cli_pipe.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -683,7 +684,7 @@
 	/* Common case. */
 	if (current_pdu_len == (uint32)prhdr->frag_len) {
 		prs_mem_free(current_pdu);
-		prs_init_empty(current_pdu, prs_get_mem_context(current_pdu), UNMARSHALL);
+		prs_init(current_pdu, 0, prs_get_mem_context(current_pdu), UNMARSHALL);
 		/* Make current_pdu dynamic with no memory. */
 		prs_give_memory(current_pdu, 0, 0, True);
 		return NT_STATUS_OK;
@@ -757,7 +758,7 @@
 #endif
 
 	/* Set up the current pdu parse struct. */
-	prs_init_empty(&current_pdu, prs_get_mem_context(rbuf), UNMARSHALL);
+	prs_init(&current_pdu, 0, prs_get_mem_context(rbuf), UNMARSHALL);
 
 	/* Create setup parameters - must be in native byte order. */
 	setup[0] = TRANSACT_DCERPCCMD; 
@@ -781,7 +782,7 @@
 	          &rparam, &rparam_len,            /* return params, len */
 	          &prdata, &rdata_len))            /* return data, len */
 	{
-		DEBUG(0, ("rpc_api_pipe: Remote machine %s pipe %s fnum 0x%x "
+		DEBUG(0, ("rpc_api_pipe: Remote machine %s pipe %s fnum 0x%x"
 			"returned critical error. Error was %s\n",
 			cli->cli->desthost,
 			cli->pipe_name,
@@ -914,8 +915,8 @@
 #ifdef HAVE_KRB5
 	int ret;
 	struct kerberos_auth_struct *a = cli->auth.a_u.kerberos_auth;
-	DATA_BLOB tkt = data_blob_null;
-	DATA_BLOB tkt_wrapped = data_blob_null;
+	DATA_BLOB tkt = data_blob(NULL, 0);
+	DATA_BLOB tkt_wrapped = data_blob(NULL, 0);
 
 	/* We may change the pad length before marshalling. */
 	init_rpc_hdr_auth(pauth_out, RPC_KRB5_AUTH_TYPE, (int)auth_level, 0, 1);
@@ -952,7 +953,7 @@
 	}
 
 	DEBUG(5, ("create_krb5_auth_bind_req: Created krb5 GSS blob :\n"));
-	dump_data(5, tkt_wrapped.data, tkt_wrapped.length);
+	dump_data(5, (const char *)tkt_wrapped.data, tkt_wrapped.length);
 
 	data_blob_free(&tkt_wrapped);
 	return NT_STATUS_OK;
@@ -971,9 +972,9 @@
 						prs_struct *auth_data)
 {
 	NTSTATUS nt_status;
-	DATA_BLOB null_blob = data_blob_null;
-	DATA_BLOB request = data_blob_null;
-	DATA_BLOB spnego_msg = data_blob_null;
+	DATA_BLOB null_blob = data_blob(NULL, 0);
+	DATA_BLOB request = data_blob(NULL, 0);
+	DATA_BLOB spnego_msg = data_blob(NULL, 0);
 
 	/* We may change the pad length before marshalling. */
 	init_rpc_hdr_auth(pauth_out, RPC_SPNEGO_AUTH_TYPE, (int)auth_level, 0, 1);
@@ -1002,7 +1003,7 @@
 	}
 
 	DEBUG(5, ("create_spnego_ntlmssp_auth_rpc_bind_req: NTLMSSP Negotiate:\n"));
-	dump_data(5, spnego_msg.data, spnego_msg.length);
+	dump_data(5, (const char *)spnego_msg.data, spnego_msg.length);
 
 	data_blob_free(&spnego_msg);
 	return NT_STATUS_OK;
@@ -1018,8 +1019,8 @@
 						prs_struct *auth_data)
 {
 	NTSTATUS nt_status;
-	DATA_BLOB null_blob = data_blob_null;
-	DATA_BLOB request = data_blob_null;
+	DATA_BLOB null_blob = data_blob(NULL, 0);
+	DATA_BLOB request = data_blob(NULL, 0);
 
 	/* We may change the pad length before marshalling. */
 	init_rpc_hdr_auth(pauth_out, RPC_NTLMSSP_AUTH_TYPE, (int)auth_level, 0, 1);
@@ -1043,7 +1044,7 @@
 	}
 
 	DEBUG(5, ("create_ntlmssp_auth_rpc_bind_req: NTLMSSP Negotiate:\n"));
-	dump_data(5, request.data, request.length);
+	dump_data(5, (const char *)request.data, request.length);
 
 	data_blob_free(&request);
 	return NT_STATUS_OK;
@@ -1183,8 +1184,7 @@
 	NTSTATUS ret = NT_STATUS_OK;
 
 	ZERO_STRUCT(hdr_auth);
-	if (!prs_init(&auth_info, RPC_HDR_AUTH_LEN, prs_get_mem_context(rpc_out), MARSHALL))
-		return NT_STATUS_NO_MEMORY;
+	prs_init(&auth_info, RPC_HDR_AUTH_LEN, prs_get_mem_context(rpc_out), MARSHALL);
 
 	switch (auth_type) {
 		case PIPE_AUTH_TYPE_SCHANNEL:
@@ -1250,7 +1250,7 @@
 {
 	RPC_HDR_AUTH auth_info;
 	NTSTATUS status;
-	DATA_BLOB auth_blob = data_blob_null;
+	DATA_BLOB auth_blob = data_blob(NULL, 0);
 	uint16 data_and_pad_len = prs_offset(outgoing_pdu) - RPC_HEADER_LEN - RPC_HDR_RESP_LEN;
 
 	if (!cli->auth.a_u.ntlmssp_state) {
@@ -1469,8 +1469,7 @@
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-	if (!prs_init(&outgoing_pdu, cli->max_xmit_frag, prs_get_mem_context(in_data), MARSHALL))
-		return NT_STATUS_NO_MEMORY;
+	prs_init(&outgoing_pdu, cli->max_xmit_frag, prs_get_mem_context(in_data), MARSHALL);
 
 	while (1) {
 		RPC_HDR hdr;
@@ -1553,15 +1552,13 @@
 			ret = rpc_api_pipe(cli, &outgoing_pdu, out_data, RPC_RESPONSE);
 			prs_mem_free(&outgoing_pdu);
 
+			
 			if (DEBUGLEVEL >= 50) {
-				char *dump_name = NULL;
+				pstring dump_name;
 				/* Also capture received data */
-				if (asprintf(&dump_name, "%s/reply_%s_%d",
-						get_dyn_LOGFILEBASE(), cli->pipe_name,
-						op_num) > 0) {
-					prs_dump(dump_name, op_num, out_data);
-					SAFE_FREE(dump_name);
-				}
+				slprintf(dump_name, sizeof(dump_name) - 1, "%s/reply_%s_%d",
+					dyn_LOGFILEBASE, cli->pipe_name, op_num);
+				prs_dump(dump_name, op_num, out_data);
 			}
 
 			return ret;
@@ -1593,10 +1590,10 @@
  Set the handle state.
 ****************************************************************************/
 
-static bool rpc_pipe_set_hnd_state(struct rpc_pipe_client *cli,
+static BOOL rpc_pipe_set_hnd_state(struct rpc_pipe_client *cli,
 				   const char *pipe_name, uint16 device_state)
 {
-	bool state_set = False;
+	BOOL state_set = False;
 	char param[2];
 	uint16 setup[2]; /* only need 2 uint16 setup parameters */
 	char *rparam = NULL;
@@ -1639,7 +1636,7 @@
  Check the rpc bind acknowledge response.
 ****************************************************************************/
 
-static bool valid_pipe_name(const int pipe_idx, RPC_IFACE *abstract, RPC_IFACE *transfer)
+static BOOL valid_pipe_name(const int pipe_idx, RPC_IFACE *abstract, RPC_IFACE *transfer)
 {
 	if ( pipe_idx >= PI_MAX_PIPES ) {
 		DEBUG(0,("valid_pipe_name: Programmer error!  Invalid pipe index [%d]\n",
@@ -1648,10 +1645,10 @@
 	}
 
 	DEBUG(5,("Bind Abstract Syntax: "));	
-	dump_data(5, (uint8 *)&pipe_names[pipe_idx].abstr_syntax, 
+	dump_data(5, (char*)&pipe_names[pipe_idx].abstr_syntax, 
 	          sizeof(pipe_names[pipe_idx].abstr_syntax));
 	DEBUG(5,("Bind Transfer Syntax: "));
-	dump_data(5, (uint8 *)&pipe_names[pipe_idx].trans_syntax,
+	dump_data(5, (char*)&pipe_names[pipe_idx].trans_syntax,
 	          sizeof(pipe_names[pipe_idx].trans_syntax));
 
 	/* copy the required syntaxes out so we can do the right bind */
@@ -1666,7 +1663,7 @@
  Check the rpc bind acknowledge response.
 ****************************************************************************/
 
-static bool check_bind_response(RPC_HDR_BA *hdr_ba, const int pipe_idx, RPC_IFACE *transfer)
+static BOOL check_bind_response(RPC_HDR_BA *hdr_ba, const int pipe_idx, RPC_IFACE *transfer)
 {
 	if ( hdr_ba->addr.len == 0) {
 		DEBUG(4,("Ignoring length check -- ASU bug (server didn't fill in the pipe name correctly)"));
@@ -1778,8 +1775,8 @@
 				enum pipe_auth_type auth_type,
 				enum pipe_auth_level auth_level)
 {
-	DATA_BLOB server_response = data_blob_null;
-	DATA_BLOB client_reply = data_blob_null;
+	DATA_BLOB server_response = data_blob(NULL,0);
+	DATA_BLOB client_reply = data_blob(NULL,0);
 	RPC_HDR_AUTH hdr_auth;
 	NTSTATUS nt_status;
 	prs_struct rpc_out;
@@ -1813,7 +1810,7 @@
 		return nt_status;
 	}
 
-	prs_init_empty(&rpc_out, prs_get_mem_context(rbuf), MARSHALL);
+	prs_init(&rpc_out, 0, prs_get_mem_context(rbuf), MARSHALL);
 
 	nt_status = create_rpc_bind_auth3(cli, rpc_call_id,
 				auth_type, auth_level,
@@ -1867,8 +1864,7 @@
 	NTSTATUS ret = NT_STATUS_OK;
 
 	ZERO_STRUCT(hdr_auth);
-	if (!prs_init(&auth_info, RPC_HDR_AUTH_LEN, prs_get_mem_context(rpc_out), MARSHALL))
-		return NT_STATUS_NO_MEMORY;
+	prs_init(&auth_info, RPC_HDR_AUTH_LEN, prs_get_mem_context(rpc_out), MARSHALL);
 
 	/* We may change the pad length before marshalling. */
 	init_rpc_hdr_auth(&hdr_auth, RPC_SPNEGO_AUTH_TYPE, (int)auth_level, 0, 1);
@@ -1905,10 +1901,10 @@
                                 enum pipe_auth_type auth_type,
                                 enum pipe_auth_level auth_level)
 {
-	DATA_BLOB server_spnego_response = data_blob_null;
-	DATA_BLOB server_ntlm_response = data_blob_null;
-	DATA_BLOB client_reply = data_blob_null;
-	DATA_BLOB tmp_blob = data_blob_null;
+	DATA_BLOB server_spnego_response = data_blob(NULL,0);
+	DATA_BLOB server_ntlm_response = data_blob(NULL,0);
+	DATA_BLOB client_reply = data_blob(NULL,0);
+	DATA_BLOB tmp_blob = data_blob(NULL, 0);
 	RPC_HDR_AUTH hdr_auth;
 	NTSTATUS nt_status;
 	prs_struct rpc_out;
@@ -1958,10 +1954,10 @@
 	tmp_blob = spnego_gen_auth(client_reply);
 	data_blob_free(&client_reply);
 	client_reply = tmp_blob;
-	tmp_blob = data_blob_null; /* Ensure it's safe to free this just in case. */
+	tmp_blob = data_blob(NULL,0); /* Ensure it's safe to free this just in case. */
 
 	/* Now prepare the alter context pdu. */
-	prs_init_empty(&rpc_out, prs_get_mem_context(rbuf), MARSHALL);
+	prs_init(&rpc_out, 0, prs_get_mem_context(rbuf), MARSHALL);
 
 	nt_status = create_rpc_alter_context(rpc_call_id,
 						abstract,
@@ -1979,7 +1975,7 @@
 
 	/* Initialize the returning data struct. */
 	prs_mem_free(rbuf);
-	prs_init_empty(rbuf, cli->mem_ctx, UNMARSHALL);
+	prs_init(rbuf, 0, cli->cli->mem_ctx, UNMARSHALL);
 
 	nt_status = rpc_api_pipe(cli, &rpc_out, rbuf, RPC_ALTCONTRESP);
 	if (!NT_STATUS_IS_OK(nt_status)) {
@@ -2007,7 +2003,7 @@
 	prs_copy_data_out((char *)server_spnego_response.data, rbuf, phdr->auth_len);
 
 	/* Check we got a valid auth response. */
-	if (!spnego_parse_auth_response(server_spnego_response, NT_STATUS_OK, OID_NTLMSSP, &tmp_blob)) {
+	if (!spnego_parse_auth_response(server_spnego_response, NT_STATUS_OK, &tmp_blob)) {
 		data_blob_free(&server_spnego_response);
 		data_blob_free(&tmp_blob);
 		return NT_STATUS_INVALID_PARAMETER;
@@ -2052,7 +2048,7 @@
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-	prs_init_empty(&rpc_out, cli->mem_ctx, MARSHALL);
+	prs_init(&rpc_out, 0, cli->cli->mem_ctx, MARSHALL);
 
 	rpc_call_id = get_rpc_call_id();
 
@@ -2068,7 +2064,7 @@
 	}
 
 	/* Initialize the incoming data struct. */
-	prs_init_empty(&rbuf, cli->mem_ctx, UNMARSHALL);
+	prs_init(&rbuf, 0, cli->cli->mem_ctx, UNMARSHALL);
 
 	/* send data on \PIPE\.  receive a response */
 	status = rpc_api_pipe(cli, &rpc_out, &rbuf, RPC_BINDACK);
@@ -2267,7 +2263,7 @@
 	*perr = rpc_pipe_bind(result, PIPE_AUTH_TYPE_NONE, PIPE_AUTH_LEVEL_NONE);
 	if (!NT_STATUS_IS_OK(*perr)) {
 		int lvl = 0;
-		if (pipe_idx == PI_DSSETUP) {
+		if (pipe_idx == PI_LSARPC_DS) {
 			/* non AD domains just don't have this pipe, avoid
 			 * level 0 statement in that case - gd */
 			lvl = 3;
@@ -2430,7 +2426,7 @@
 /****************************************************************************
   Get a the schannel session key out of an already opened netlogon pipe.
  ****************************************************************************/
-static bool get_schannel_session_key_common(struct rpc_pipe_client *netlogon_pipe,
+static BOOL get_schannel_session_key_common(struct rpc_pipe_client *netlogon_pipe,
 					    struct cli_state *cli,
 					    const char *domain,
 					    uint32 *pneg_flags,
@@ -2448,7 +2444,7 @@
 			"trust account password for domain '%s'\n",
 			domain));
 		*perr = NT_STATUS_CANT_ACCESS_DOMAIN_INFO;
-		return false;
+		return False;
 	}
 
 	*perr = rpccli_netlogon_setup_creds(netlogon_pipe,
@@ -2464,17 +2460,17 @@
 		DEBUG(3,("get_schannel_session_key_common: rpccli_netlogon_setup_creds "
 			"failed with result %s to server %s, domain %s, machine account %s.\n",
 			nt_errstr(*perr), cli->desthost, domain, machine_account ));
-		return false;
+		return False;
 	}
 
 	if (((*pneg_flags) & NETLOGON_NEG_SCHANNEL) == 0) {
 		DEBUG(3, ("get_schannel_session_key: Server %s did not offer schannel\n",
 			cli->desthost));
 		*perr = NT_STATUS_INVALID_NETWORK_RESPONSE;
-		return false;
+		return False;
 	}
 
-	return true;
+	return True;
 }
 
 /****************************************************************************
@@ -2710,7 +2706,7 @@
 		}
 	}
 
-	result->auth.a_u.kerberos_auth = TALLOC_ZERO_P(result->mem_ctx, struct kerberos_auth_struct);
+	result->auth.a_u.kerberos_auth = TALLOC_ZERO_P(cli->mem_ctx, struct kerberos_auth_struct);
 	if (!result->auth.a_u.kerberos_auth) {
 		cli_rpc_pipe_close(result);
 		*perr = NT_STATUS_NO_MEMORY;
@@ -2734,3 +2730,30 @@
 	return NULL;
 #endif
 }
+
+#if 0 /* Moved to libsmb/clientgen.c */
+/****************************************************************************
+ External interface.
+ Close an open named pipe over SMB. Free any authentication data.
+ ****************************************************************************/
+
+ void cli_rpc_pipe_close(struct rpc_pipe_client *cli)
+{
+	if (!cli_close(cli->cli, cli->fnum)) {
+		DEBUG(0,("cli_rpc_pipe_close: cli_close failed on pipe %s "
+			 "to machine %s.  Error was %s\n",
+			 cli->pipe_name),
+			 cli->cli->desthost,
+			 cli_errstr(cli->cli)));
+	}
+
+	if (cli->auth.cli_auth_data_free_func) {
+		(*cli->auth.cli_auth_data_free_func)(&cli->auth);
+	}
+	DEBUG(10,("cli_rpc_pipe_close: closed pipe %s to machine %s\n",
+		cli->pipe_name, cli->cli->desthost ));
+
+	DLIST_REMOVE(cli->cli->pipe_list, cli);
+	talloc_destroy(cli->mem_ctx);	
+}
+#endif

Modified: branches/samba/upstream/source/rpc_client/cli_reg.c
===================================================================
--- branches/samba/upstream/source/rpc_client/cli_reg.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_client/cli_reg.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -2,11 +2,15 @@
    Unix SMB/CIFS implementation.
    RPC Pipe client
  
-   Copyright (C) Gerald (Jerry) Carter        2005-2006
+   Copyright (C) Andrew Tridgell              1992-2000,
+   Copyright (C) Jeremy Allison                    1999 - 2005
+   Copyright (C) Simo Sorce                        2001
+   Copyright (C) Jeremy Cooper                     2004
+   Copyright (C) Gerald (Jerry) Carter             2005
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,65 +19,713 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 #include "rpc_client.h"
 
+/* Shutdown a server */
+
 /*******************************************************************
+ internal connect to a registry hive root (open a registry policy)
+*******************************************************************/
+
+static WERROR rpccli_reg_open_hive_int(struct rpc_pipe_client *cli,
+                                      TALLOC_CTX *mem_ctx, uint16 op_code,
+                                      const char *op_name,
+                                      uint32 access_mask, POLICY_HND *hnd)
+{
+	REG_Q_OPEN_HIVE in;
+	REG_R_OPEN_HIVE out;
+	prs_struct qbuf, rbuf;
+
+	ZERO_STRUCT(in);
+	ZERO_STRUCT(out);
+
+	init_reg_q_open_hive(&in, access_mask);
+
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_WINREG, op_code, 
+	            in, out, 
+	            qbuf, rbuf,
+	            reg_io_q_open_hive,
+	            reg_io_r_open_hive, 
+	            WERR_GENERAL_FAILURE );
+
+	if ( !W_ERROR_IS_OK( out.status ) )
+		return out.status;
+
+	memcpy( hnd, &out.pol, sizeof(POLICY_HND) );
+
+	return out.status;
+}
+
+/*******************************************************************
  connect to a registry hive root (open a registry policy)
 *******************************************************************/
 
-NTSTATUS rpccli_winreg_Connect(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+WERROR rpccli_reg_connect(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
                          uint32 reg_type, uint32 access_mask,
                          POLICY_HND *reg_hnd)
-{
+{	uint16 op_code;
+	const char *op_name;
+
 	ZERO_STRUCTP(reg_hnd);
 
 	switch (reg_type)
 	{
 	case HKEY_CLASSES_ROOT:
-		return rpccli_winreg_OpenHKCR( cli, mem_ctx, NULL, 
-			access_mask, reg_hnd, NULL);
-
+		op_code = REG_OPEN_HKCR;
+		op_name = "REG_OPEN_HKCR";
+		break;
 	case HKEY_LOCAL_MACHINE:
-		return rpccli_winreg_OpenHKLM( cli, mem_ctx, NULL, 
-			access_mask, reg_hnd, NULL);
-
+		op_code = REG_OPEN_HKLM;
+		op_name = "REG_OPEN_HKLM";
+		break;
 	case HKEY_USERS:
-		return rpccli_winreg_OpenHKU( cli, mem_ctx, NULL, 
-			access_mask, reg_hnd, NULL);
-
-	case HKEY_CURRENT_USER:
-		return rpccli_winreg_OpenHKCU( cli, mem_ctx, NULL, 
-			access_mask, reg_hnd, NULL);
-
+		op_code = REG_OPEN_HKU;
+		op_name = "REG_OPEN_HKU";
+		break;
 	case HKEY_PERFORMANCE_DATA:
-		return rpccli_winreg_OpenHKPD( cli, mem_ctx, NULL, 
-			access_mask, reg_hnd, NULL);
-
+		op_code = REG_OPEN_HKPD;
+		op_name = "REG_OPEN_HKPD";
+		break;
 	default:
-		/* fall through to end of function */
-		break;
+		return WERR_INVALID_PARAM;
 	}
 
-	return NT_STATUS_INVALID_PARAMETER;
+	return rpccli_reg_open_hive_int(cli, mem_ctx, op_code, op_name,
+                                     access_mask, reg_hnd);
 }
 
+
 /*******************************************************************
- Fill in a REGVAL_BUFFER for the data given a REGISTRY_VALUE
- *******************************************************************/
+*******************************************************************/
 
-uint32 reg_init_regval_buffer( REGVAL_BUFFER *buf2, REGISTRY_VALUE *val )
+WERROR rpccli_reg_shutdown(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                          const char *msg, uint32 timeout, BOOL do_reboot,
+			  BOOL force)
 {
-	uint32		real_size = 0;
+	REG_Q_SHUTDOWN in;
+	REG_R_SHUTDOWN out;
+	prs_struct qbuf, rbuf;
+
+	if (msg == NULL) 
+		return WERR_INVALID_PARAM;
+
+	ZERO_STRUCT (in);
+	ZERO_STRUCT (out);
+
+	/* Marshall data and send request */
+
+	init_reg_q_shutdown(&in, msg, timeout, do_reboot, force);
+
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_WINREG, REG_SHUTDOWN, 
+	            in, out, 
+	            qbuf, rbuf,
+	            reg_io_q_shutdown,
+	            reg_io_r_shutdown, 
+	            WERR_GENERAL_FAILURE );
+
+	return out.status;
+}
+
+/*******************************************************************
+*******************************************************************/
+
+WERROR rpccli_reg_abort_shutdown(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
+{
+	REG_Q_ABORT_SHUTDOWN in;
+	REG_R_ABORT_SHUTDOWN out;
+	prs_struct qbuf, rbuf;
+
+	ZERO_STRUCT (in);
+	ZERO_STRUCT (out);
+
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_WINREG, REG_ABORT_SHUTDOWN, 
+	            in, out, 
+	            qbuf, rbuf,
+	            reg_io_q_abort_shutdown,
+	            reg_io_r_abort_shutdown, 
+	            WERR_GENERAL_FAILURE );
+
+	return out.status;	
+}
+
+
+/****************************************************************************
+do a REG Unknown 0xB command.  sent after a create key or create value.
+this might be some sort of "sync" or "refresh" command, sent after
+modification of the registry...
+****************************************************************************/
+
+WERROR rpccli_reg_flush_key(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                           POLICY_HND *hnd)
+{
+	REG_Q_FLUSH_KEY in;
+	REG_R_FLUSH_KEY out;
+	prs_struct qbuf, rbuf;
+
+	ZERO_STRUCT (in);
+	ZERO_STRUCT (out);
 	
-	if ( !buf2 || !val )
-		return 0;
+	init_reg_q_flush_key(&in, hnd);
+
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_WINREG, REG_FLUSH_KEY, 
+	            in, out, 
+	            qbuf, rbuf,
+	            reg_io_q_flush_key,
+	            reg_io_r_flush_key, 
+	            WERR_GENERAL_FAILURE );
+		    
+	return out.status;
+}
+
+/****************************************************************************
+do a REG Query Key
+****************************************************************************/
+
+WERROR rpccli_reg_query_key(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                           POLICY_HND *hnd,
+                           char *key_class, uint32 *class_len,
+                           uint32 *num_subkeys, uint32 *max_subkeylen,
+                           uint32 *max_classlen, uint32 *num_values,
+                           uint32 *max_valnamelen, uint32 *max_valbufsize,
+                           uint32 *sec_desc, NTTIME *mod_time)
+{
+	REG_Q_QUERY_KEY in;
+	REG_R_QUERY_KEY out;
+	prs_struct qbuf, rbuf;
+	uint32 saved_class_len = *class_len;
+
+	ZERO_STRUCT (in);
+	ZERO_STRUCT (out);
+
+	init_reg_q_query_key( &in, hnd, key_class );
+
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_WINREG, REG_QUERY_KEY, 
+	            in, out, 
+	            qbuf, rbuf,
+	            reg_io_q_query_key,
+	            reg_io_r_query_key, 
+	            WERR_GENERAL_FAILURE );
+
+	if ( W_ERROR_EQUAL( out.status, WERR_MORE_DATA ) ) {
+		ZERO_STRUCT (in);
+
+		*class_len = out.key_class.string->uni_max_len;
+		if ( *class_len > saved_class_len )
+			return out.status;
+			
+		/* set a string of spaces and NULL terminate */
+
+		memset( key_class, (int)' ', *class_len );
+		key_class[*class_len] = '\0';
 		
-	real_size = regval_size(val);
-	init_regval_buffer( buf2, (unsigned char*)regval_data_p(val), real_size );
+		init_reg_q_query_key( &in, hnd, key_class );
 
-	return real_size;
+		ZERO_STRUCT (out);
+
+		CLI_DO_RPC_WERR( cli, mem_ctx, PI_WINREG, REG_QUERY_KEY, 
+		            in, out, 
+		            qbuf, rbuf,
+		            reg_io_q_query_key,
+		            reg_io_r_query_key, 
+		            WERR_GENERAL_FAILURE );
+	}
+	
+	if ( !W_ERROR_IS_OK( out.status ) )
+		return out.status;
+
+	*class_len      = out.key_class.string->uni_max_len;
+	unistr2_to_ascii(key_class, out.key_class.string, saved_class_len-1);
+	*num_subkeys    = out.num_subkeys   ;
+	*max_subkeylen  = out.max_subkeylen ;
+	*num_values     = out.num_values    ;
+	*max_valnamelen = out.max_valnamelen;
+	*max_valbufsize = out.max_valbufsize;
+	*sec_desc       = out.sec_desc      ;
+	*mod_time       = out.mod_time      ;
+	/* Maybe: *max_classlen = out.reserved; */
+
+	return out.status;
 }
+
+/****************************************************************************
+****************************************************************************/
+
+WERROR rpccli_reg_getversion(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                            POLICY_HND *hnd, uint32 *version)
+{
+	REG_Q_GETVERSION in;
+	REG_R_GETVERSION out;
+	prs_struct qbuf, rbuf;
+
+	ZERO_STRUCT (in);
+	ZERO_STRUCT (out);
+	
+	init_reg_q_getversion(&in, hnd);
+
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_WINREG, REG_GETVERSION, 
+	            in, out, 
+	            qbuf, rbuf,
+	            reg_io_q_getversion,
+	            reg_io_r_getversion, 
+	            WERR_GENERAL_FAILURE );
+		    
+
+	if ( !W_ERROR_IS_OK( out.status ) )
+		return out.status;
+		
+	*version = out.win_version;
+
+	return out.status;
+}
+
+/****************************************************************************
+do a REG Query Info
+****************************************************************************/
+
+WERROR rpccli_reg_query_value(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                           POLICY_HND *hnd, const char *val_name,
+                           uint32 *type, REGVAL_BUFFER *buffer)
+{
+	REG_Q_QUERY_VALUE in;
+	REG_R_QUERY_VALUE out;
+	prs_struct qbuf, rbuf;
+
+	ZERO_STRUCT (in);
+	ZERO_STRUCT (out);
+	
+	init_reg_q_query_value(&in, hnd, val_name, buffer);
+
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_WINREG, REG_QUERY_VALUE, 
+	            in, out, 
+	            qbuf, rbuf,
+	            reg_io_q_query_value,
+	            reg_io_r_query_value, 
+	            WERR_GENERAL_FAILURE );
+		    
+
+	if ( !W_ERROR_IS_OK( out.status ) )
+		return out.status;
+		
+	*type   = *out.type;
+	*buffer = *out.value;
+
+	return out.status;
+}
+
+/****************************************************************************
+do a REG Set Key Security 
+****************************************************************************/
+
+WERROR rpccli_reg_set_key_sec(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                             POLICY_HND *hnd, uint32 sec_info,
+                             size_t secdesc_size, SEC_DESC *sec_desc)
+{
+	REG_Q_SET_KEY_SEC in;
+	REG_R_SET_KEY_SEC out;
+	prs_struct qbuf, rbuf;
+	SEC_DESC_BUF *sec_desc_buf;
+
+	ZERO_STRUCT (in);
+	ZERO_STRUCT (out);
+	
+	/* Flatten the security descriptor */
+	
+	if ( !(sec_desc_buf = make_sec_desc_buf(mem_ctx, secdesc_size, sec_desc)) )
+		return WERR_GENERAL_FAILURE;
+		
+	init_reg_q_set_key_sec(&in, hnd, sec_info, sec_desc_buf);
+
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_WINREG, REG_SET_KEY_SEC, 
+	            in, out, 
+	            qbuf, rbuf,
+	            reg_io_q_set_key_sec,
+	            reg_io_r_set_key_sec, 
+	            WERR_GENERAL_FAILURE );
+		    
+
+	return out.status;
+}
+
+
+/****************************************************************************
+do a REG Query Key Security 
+****************************************************************************/
+
+WERROR rpccli_reg_get_key_sec(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                             POLICY_HND *hnd, uint32 sec_info,
+                             uint32 *sec_buf_size, SEC_DESC_BUF *sec_buf)
+{
+	REG_Q_GET_KEY_SEC in;
+	REG_R_GET_KEY_SEC out;
+	prs_struct qbuf, rbuf;
+
+	ZERO_STRUCT (in);
+	ZERO_STRUCT (out);
+	
+	init_reg_q_get_key_sec(&in, hnd, sec_info, *sec_buf_size, sec_buf);
+
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_WINREG, REG_GET_KEY_SEC, 
+	            in, out, 
+	            qbuf, rbuf,
+	            reg_io_q_get_key_sec,
+	            reg_io_r_get_key_sec, 
+	            WERR_GENERAL_FAILURE );
+		    
+
+	/* this might be able to return WERR_MORE_DATA, I'm not sure */
+	
+	if ( !W_ERROR_IS_OK( out.status ) )
+		return out.status;
+	
+	sec_buf       = out.data;
+	*sec_buf_size = out.data->len;
+		
+	return out.status;	
+}
+
+/****************************************************************************
+do a REG Delete Value
+****************************************************************************/
+
+WERROR rpccli_reg_delete_val(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                            POLICY_HND *hnd, char *val_name)
+{
+	REG_Q_DELETE_VALUE in;
+	REG_R_DELETE_VALUE out;
+	prs_struct qbuf, rbuf;
+
+	ZERO_STRUCT (in);
+	ZERO_STRUCT (out);
+	
+	init_reg_q_delete_val(&in, hnd, val_name);
+
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_WINREG, REG_DELETE_VALUE, 
+	            in, out, 
+	            qbuf, rbuf,
+	            reg_io_q_delete_value,
+	            reg_io_r_delete_value, 
+	            WERR_GENERAL_FAILURE );
+	
+	return out.status;
+}
+
+/****************************************************************************
+do a REG Delete Key
+****************************************************************************/
+
+WERROR rpccli_reg_delete_key(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                            POLICY_HND *hnd, char *key_name)
+{
+	REG_Q_DELETE_KEY in;
+	REG_R_DELETE_KEY out;
+	prs_struct qbuf, rbuf;
+
+	ZERO_STRUCT (in);
+	ZERO_STRUCT (out);
+	
+	init_reg_q_delete_key(&in, hnd, key_name);
+
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_WINREG, REG_DELETE_KEY, 
+	            in, out, 
+	            qbuf, rbuf,
+	            reg_io_q_delete_key,
+	            reg_io_r_delete_key, 
+	            WERR_GENERAL_FAILURE );
+	
+	return out.status;
+}
+
+/****************************************************************************
+do a REG Create Key
+****************************************************************************/
+
+WERROR rpccli_reg_create_key_ex(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                            POLICY_HND *hnd, char *key_name, char *key_class,
+                            uint32 access_desired, POLICY_HND *key)
+{
+	REG_Q_CREATE_KEY_EX in;
+	REG_R_CREATE_KEY_EX out;
+	prs_struct qbuf, rbuf;
+	SEC_DESC *sec;
+	SEC_DESC_BUF *sec_buf;
+	size_t sec_len;
+
+	ZERO_STRUCT (in);
+	ZERO_STRUCT (out);
+	
+	if ( !(sec = make_sec_desc(mem_ctx, 1, SEC_DESC_SELF_RELATIVE,
+		NULL, NULL, NULL, NULL, &sec_len)) ) {
+		return WERR_GENERAL_FAILURE;
+	}
+				 
+	if ( !(sec_buf = make_sec_desc_buf(mem_ctx, sec_len, sec)) )
+		return WERR_GENERAL_FAILURE;
+
+	init_reg_q_create_key_ex(&in, hnd, key_name, key_class, access_desired, sec_buf);
+
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_WINREG, REG_CREATE_KEY_EX, 
+	            in, out, 
+	            qbuf, rbuf,
+	            reg_io_q_create_key_ex,
+	            reg_io_r_create_key_ex, 
+	            WERR_GENERAL_FAILURE );
+		    
+
+	if ( !W_ERROR_IS_OK( out.status ) )
+		return out.status;
+	
+	memcpy( key, &out.handle, sizeof(POLICY_HND) );
+	
+	return out.status;
+}
+
+/****************************************************************************
+do a REG Enum Key
+****************************************************************************/
+
+WERROR rpccli_reg_enum_key(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                          POLICY_HND *hnd, int key_index, fstring key_name,
+                          fstring class_name, time_t *mod_time)
+{
+	REG_Q_ENUM_KEY in;
+	REG_R_ENUM_KEY out;
+	prs_struct qbuf, rbuf;
+
+	ZERO_STRUCT (in);
+	ZERO_STRUCT (out);
+	
+	init_reg_q_enum_key(&in, hnd, key_index);
+
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_WINREG, REG_ENUM_KEY, 
+	            in, out, 
+	            qbuf, rbuf,
+	            reg_io_q_enum_key,
+	            reg_io_r_enum_key, 
+	            WERR_GENERAL_FAILURE );
+
+	if ( !W_ERROR_IS_OK(out.status) )
+		return out.status;
+
+	if ( out.keyname.string )
+		rpcstr_pull( key_name, out.keyname.string->buffer, sizeof(fstring), -1, STR_TERMINATE );
+	else
+		fstrcpy( key_name, "(Default)" );
+
+	if ( out.classname && out.classname->string )
+		rpcstr_pull( class_name, out.classname->string->buffer, sizeof(fstring), -1, STR_TERMINATE );
+	else
+		fstrcpy( class_name, "" );
+
+	*mod_time   = nt_time_to_unix(*out.time);
+
+	return out.status;
+}
+
+/****************************************************************************
+do a REG Create Value
+****************************************************************************/
+
+WERROR rpccli_reg_set_val(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                            POLICY_HND *hnd, char *val_name, uint32 type,
+                            RPC_DATA_BLOB *data)
+{
+	REG_Q_SET_VALUE in;
+	REG_R_SET_VALUE out;
+	prs_struct qbuf, rbuf;
+
+	ZERO_STRUCT (in);
+	ZERO_STRUCT (out);
+	
+	init_reg_q_set_val(&in, hnd, val_name, type, data);
+
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_WINREG, REG_SET_VALUE, 
+	            in, out, 
+	            qbuf, rbuf,
+	            reg_io_q_set_value,
+	            reg_io_r_set_value, 
+	            WERR_GENERAL_FAILURE );
+
+	return out.status;
+}
+
+/****************************************************************************
+do a REG Enum Value
+****************************************************************************/
+
+WERROR rpccli_reg_enum_val(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                          POLICY_HND *hnd, int idx,
+                          fstring val_name, uint32 *type, REGVAL_BUFFER *value)
+{
+	REG_Q_ENUM_VALUE in;
+	REG_R_ENUM_VALUE out;
+	prs_struct qbuf, rbuf;
+
+	ZERO_STRUCT (in);
+	ZERO_STRUCT (out);
+	
+	init_reg_q_enum_val(&in, hnd, idx, 0x0100, 0x1000);
+
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_WINREG, REG_ENUM_VALUE, 
+	            in, out, 
+	            qbuf, rbuf,
+	            reg_io_q_enum_val,
+	            reg_io_r_enum_val, 
+	            WERR_GENERAL_FAILURE );
+
+	if ( W_ERROR_EQUAL(out.status, WERR_MORE_DATA) ) {
+
+		ZERO_STRUCT (in);
+
+		init_reg_q_enum_val(&in, hnd, idx, 0x0100, *out.buffer_len1);
+
+		ZERO_STRUCT (out);
+
+		CLI_DO_RPC_WERR( cli, mem_ctx, PI_WINREG, REG_ENUM_VALUE, 
+		            in, out, 
+		            qbuf, rbuf,
+		            reg_io_q_enum_val,
+		            reg_io_r_enum_val, 
+		            WERR_GENERAL_FAILURE );
+	}
+
+	if ( !W_ERROR_IS_OK(out.status) )
+		return out.status;
+
+	unistr2_to_ascii(val_name, out.name.string, sizeof(fstring)-1);
+	*type      = *out.type;
+	*value     = *out.value;
+	
+	return out.status;
+}
+
+/****************************************************************************
+****************************************************************************/
+
+WERROR rpccli_reg_open_entry(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                            POLICY_HND *hnd, char *key_name,
+                            uint32 access_desired, POLICY_HND *key_hnd)
+{
+	REG_Q_OPEN_ENTRY in;
+	REG_R_OPEN_ENTRY out;
+	prs_struct qbuf, rbuf;
+
+	ZERO_STRUCT (in);
+	ZERO_STRUCT (out);
+	
+	init_reg_q_open_entry(&in, hnd, key_name, access_desired);
+
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_WINREG, REG_OPEN_ENTRY, 
+	            in, out, 
+	            qbuf, rbuf,
+	            reg_io_q_open_entry,
+	            reg_io_r_open_entry, 
+	            WERR_GENERAL_FAILURE );
+
+	if ( !W_ERROR_IS_OK( out.status ) )
+		return out.status;
+
+	memcpy( key_hnd, &out.handle, sizeof(POLICY_HND) );
+	
+	return out.status;
+}
+
+/****************************************************************************
+****************************************************************************/
+
+WERROR rpccli_reg_close(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                       POLICY_HND *hnd)
+{
+	REG_Q_CLOSE in;
+	REG_R_CLOSE out;
+	prs_struct qbuf, rbuf;
+
+	ZERO_STRUCT (in);
+	ZERO_STRUCT (out);
+	
+	init_reg_q_close(&in, hnd);
+
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_WINREG, REG_CLOSE, 
+	            in, out, 
+	            qbuf, rbuf,
+	            reg_io_q_close,
+	            reg_io_r_close, 
+	            WERR_GENERAL_FAILURE );
+	
+	return out.status;
+}
+
+/****************************************************************************
+do a REG Query Info
+****************************************************************************/
+
+WERROR rpccli_reg_save_key(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                         POLICY_HND *hnd, const char *filename )
+{
+	REG_Q_SAVE_KEY in;
+	REG_R_SAVE_KEY out;
+	prs_struct qbuf, rbuf;
+
+	ZERO_STRUCT (in);
+	ZERO_STRUCT (out);
+	
+	init_q_reg_save_key( &in, hnd, filename );
+
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_WINREG, REG_SAVE_KEY, 
+	            in, out, 
+	            qbuf, rbuf,
+	            reg_io_q_save_key,
+	            reg_io_r_save_key,
+	            WERR_GENERAL_FAILURE );
+
+	return out.status;
+}
+
+
+/* 
+ #################################################################
+  Utility functions
+ #################################################################
+ */
+
+/*****************************************************************
+ Splits out the start of the key (HKLM or HKU) and the rest of the key.
+*****************************************************************/  
+
+BOOL reg_split_hive(const char *full_keyname, uint32 *reg_type, pstring key_name)
+{
+	pstring tmp;
+
+	if (!next_token(&full_keyname, tmp, "\\", sizeof(tmp)))
+		return False;
+
+	(*reg_type) = 0;
+
+	DEBUG(10, ("reg_split_key: hive %s\n", tmp));
+
+	if (strequal(tmp, "HKLM") || strequal(tmp, "HKEY_LOCAL_MACHINE"))
+		(*reg_type) = HKEY_LOCAL_MACHINE;
+	else if (strequal(tmp, "HKCR") || strequal(tmp, "HKEY_CLASSES_ROOT"))
+		(*reg_type) = HKEY_CLASSES_ROOT;
+	else if (strequal(tmp, "HKU") || strequal(tmp, "HKEY_USERS"))
+		(*reg_type) = HKEY_USERS;
+	else if (strequal(tmp, "HKPD")||strequal(tmp, "HKEY_PERFORMANCE_DATA"))
+		(*reg_type) = HKEY_PERFORMANCE_DATA;
+	else {
+		DEBUG(10,("reg_split_key: unrecognised hive key %s\n", tmp));
+		return False;
+	}
+	
+	if (next_token(&full_keyname, tmp, "\n\r", sizeof(tmp)))
+		pstrcpy(key_name, tmp);
+	else
+		key_name[0] = 0;
+
+	DEBUG(10, ("reg_split_key: name %s\n", key_name));
+
+	return True;
+}

Modified: branches/samba/upstream/source/rpc_client/cli_samr.c
===================================================================
--- branches/samba/upstream/source/rpc_client/cli_samr.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_client/cli_samr.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,11 +5,10 @@
    Copyright (C) Andrew Tridgell              1992-1997,2000,
    Copyright (C) Rafal Szczesniak                       2002.
    Copyright (C) Jeremy Allison                         2005.
-   Copyright (C) Guenther Deschner                      2008.
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -18,109 +17,1326 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
+/* Connect to SAMR database */
+
+NTSTATUS rpccli_samr_connect(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, 
+			     uint32 access_mask, POLICY_HND *connect_pol)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_CONNECT q;
+	SAMR_R_CONNECT r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_connect to %s\n", cli->cli->desthost));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_connect(&q, cli->cli->desthost, access_mask);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_CONNECT,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_connect,
+		samr_io_r_connect,
+		NT_STATUS_UNSUCCESSFUL); 
+	/* Return output parameters */
+
+	if (NT_STATUS_IS_OK(result = r.status)) {
+		*connect_pol = r.connect_pol;
+#ifdef __INSURE__
+		connect_pol->marker = malloc(1);
+#endif
+	}
+
+	return result;
+}
+
+/* Connect to SAMR database */
+
+NTSTATUS rpccli_samr_connect4(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, 
+			   uint32 access_mask, POLICY_HND *connect_pol)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_CONNECT4 q;
+	SAMR_R_CONNECT4 r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_connect4(&q, cli->cli->desthost, access_mask);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_CONNECT4,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_connect4,
+		samr_io_r_connect4,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	if (NT_STATUS_IS_OK(result = r.status)) {
+		*connect_pol = r.connect_pol;
+#ifdef __INSURE__
+		connect_pol->marker = malloc(1);
+#endif
+	}
+
+	return result;
+}
+
+/* Close SAMR handle */
+
+NTSTATUS rpccli_samr_close(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+			   POLICY_HND *connect_pol)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_CLOSE_HND q;
+	SAMR_R_CLOSE_HND r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_close\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_close_hnd(&q, connect_pol);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_CLOSE_HND,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_close_hnd,
+		samr_io_r_close_hnd,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	if (NT_STATUS_IS_OK(result = r.status)) {
+#ifdef __INSURE__
+		SAFE_FREE(connect_pol->marker);
+#endif
+		*connect_pol = r.pol;
+	}
+
+	return result;
+}
+
+/* Open handle on a domain */
+
+NTSTATUS rpccli_samr_open_domain(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+				 POLICY_HND *connect_pol, uint32 access_mask, 
+				 const DOM_SID *domain_sid,
+				 POLICY_HND *domain_pol)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_OPEN_DOMAIN q;
+	SAMR_R_OPEN_DOMAIN r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_open_domain with sid %s\n", sid_string_static(domain_sid) ));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_open_domain(&q, connect_pol, access_mask, domain_sid);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_OPEN_DOMAIN,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_open_domain,
+		samr_io_r_open_domain,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	if (NT_STATUS_IS_OK(result = r.status)) {
+		*domain_pol = r.domain_pol;
+#ifdef __INSURE__
+		domain_pol->marker = malloc(1);
+#endif
+	}
+
+	return result;
+}
+
+NTSTATUS rpccli_samr_open_user(struct rpc_pipe_client *cli,
+			       TALLOC_CTX *mem_ctx,
+			       POLICY_HND *domain_pol, uint32 access_mask, 
+			       uint32 user_rid, POLICY_HND *user_pol)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_OPEN_USER q;
+	SAMR_R_OPEN_USER r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_open_user with rid 0x%x\n", user_rid ));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_open_user(&q, domain_pol, access_mask, user_rid);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_OPEN_USER,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_open_user,
+		samr_io_r_open_user,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	if (NT_STATUS_IS_OK(result = r.status)) {
+		*user_pol = r.user_pol;
+#ifdef __INSURE__
+		user_pol->marker = malloc(1);
+#endif
+	}
+
+	return result;
+}
+
+/* Open handle on a group */
+
+NTSTATUS rpccli_samr_open_group(struct rpc_pipe_client *cli,
+				TALLOC_CTX *mem_ctx, 
+				POLICY_HND *domain_pol, uint32 access_mask, 
+				uint32 group_rid, POLICY_HND *group_pol)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_OPEN_GROUP q;
+	SAMR_R_OPEN_GROUP r;
+	NTSTATUS result =  NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_open_group with rid 0x%x\n", group_rid ));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_open_group(&q, domain_pol, access_mask, group_rid);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_OPEN_GROUP,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_open_group,
+		samr_io_r_open_group,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	if (NT_STATUS_IS_OK(result = r.status)) {
+		*group_pol = r.pol;
+#ifdef __INSURE__
+		group_pol->marker = malloc(1);
+#endif
+	}
+
+	return result;
+}
+
+/* Create domain group */
+
+NTSTATUS rpccli_samr_create_dom_group(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+				   POLICY_HND *domain_pol,
+				   const char *group_name,
+				   uint32 access_mask, POLICY_HND *group_pol)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_CREATE_DOM_GROUP q;
+	SAMR_R_CREATE_DOM_GROUP r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_create_dom_group\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_create_dom_group(&q, domain_pol, group_name, access_mask);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_CREATE_DOM_GROUP,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_create_dom_group,
+		samr_io_r_create_dom_group,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	result = r.status;
+
+	if (NT_STATUS_IS_OK(result))
+		*group_pol = r.pol;
+
+	return result;
+}
+
+/* Add a domain group member */
+
+NTSTATUS rpccli_samr_add_groupmem(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+			       POLICY_HND *group_pol, uint32 rid)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_ADD_GROUPMEM q;
+	SAMR_R_ADD_GROUPMEM r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_add_groupmem\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_add_groupmem(&q, group_pol, rid);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_ADD_GROUPMEM,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_add_groupmem,
+		samr_io_r_add_groupmem,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	result = r.status;
+
+	return result;
+}
+
+/* Delete a domain group member */
+
+NTSTATUS rpccli_samr_del_groupmem(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+			       POLICY_HND *group_pol, uint32 rid)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_DEL_GROUPMEM q;
+	SAMR_R_DEL_GROUPMEM r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_del_groupmem\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_del_groupmem(&q, group_pol, rid);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_DEL_GROUPMEM,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_del_groupmem,
+		samr_io_r_del_groupmem,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	result = r.status;
+
+	return result;
+}
+
+/* Query user info */
+
+NTSTATUS rpccli_samr_query_userinfo(struct rpc_pipe_client *cli,
+				    TALLOC_CTX *mem_ctx,
+				    const POLICY_HND *user_pol,
+				    uint16 switch_value, 
+				    SAM_USERINFO_CTR **ctr)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_QUERY_USERINFO q;
+	SAMR_R_QUERY_USERINFO r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_query_userinfo\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_query_userinfo(&q, user_pol, switch_value);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_QUERY_USERINFO,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_query_userinfo,
+		samr_io_r_query_userinfo,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	result = r.status;
+	*ctr = r.ctr;
+
+	return result;
+}
+
+/* Set group info */
+
+NTSTATUS rpccli_samr_set_groupinfo(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+				POLICY_HND *group_pol, GROUP_INFO_CTR *ctr)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_SET_GROUPINFO q;
+	SAMR_R_SET_GROUPINFO r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_set_groupinfo\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_set_groupinfo(&q, group_pol, ctr);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_SET_GROUPINFO,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_set_groupinfo,
+		samr_io_r_set_groupinfo,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	result = r.status;
+
+	return result;
+}
+
+/* Query group info */
+
+NTSTATUS rpccli_samr_query_groupinfo(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                                  POLICY_HND *group_pol, uint32 info_level, 
+                                  GROUP_INFO_CTR **ctr)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_QUERY_GROUPINFO q;
+	SAMR_R_QUERY_GROUPINFO r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_query_groupinfo\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_query_groupinfo(&q, group_pol, info_level);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_QUERY_GROUPINFO,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_query_groupinfo,
+		samr_io_r_query_groupinfo,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	*ctr = r.ctr;
+
+	/* Return output parameters */
+
+	result = r.status;
+
+	return result;
+}
+
+/* Query user groups */
+
+NTSTATUS rpccli_samr_query_usergroups(struct rpc_pipe_client *cli,
+				      TALLOC_CTX *mem_ctx, 
+				      POLICY_HND *user_pol,
+				      uint32 *num_groups, 
+				      DOM_GID **gid)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_QUERY_USERGROUPS q;
+	SAMR_R_QUERY_USERGROUPS r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_query_usergroups\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_query_usergroups(&q, user_pol);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_QUERY_USERGROUPS,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_query_usergroups,
+		samr_io_r_query_usergroups,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	if (NT_STATUS_IS_OK(result = r.status)) {
+		*num_groups = r.num_entries;
+		*gid = r.gid;
+	}
+
+	return result;
+}
+
+/* Set alias info */
+
+NTSTATUS rpccli_samr_set_aliasinfo(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+				POLICY_HND *alias_pol, ALIAS_INFO_CTR *ctr)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_SET_ALIASINFO q;
+	SAMR_R_SET_ALIASINFO r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_set_aliasinfo\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_set_aliasinfo(&q, alias_pol, ctr);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_SET_ALIASINFO,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_set_aliasinfo,
+		samr_io_r_set_aliasinfo,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	result = r.status;
+
+	return result;
+}
+
+/* Query user aliases */
+
+NTSTATUS rpccli_samr_query_useraliases(struct rpc_pipe_client *cli,
+				       TALLOC_CTX *mem_ctx, 
+				       POLICY_HND *dom_pol, uint32 num_sids,
+				       DOM_SID2 *sid,
+				       uint32 *num_aliases, uint32 **als_rids)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_QUERY_USERALIASES q;
+	SAMR_R_QUERY_USERALIASES r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+	int i;
+	uint32 *sid_ptrs;
+	
+	DEBUG(10,("cli_samr_query_useraliases\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	if (num_sids) {
+		sid_ptrs = TALLOC_ARRAY(mem_ctx, uint32, num_sids);
+		if (sid_ptrs == NULL)
+			return NT_STATUS_NO_MEMORY;
+	} else {
+		sid_ptrs = NULL;
+	}
+	
+	for (i=0; i<num_sids; i++)
+		sid_ptrs[i] = 1;
+
+	/* Marshall data and send request */
+
+	init_samr_q_query_useraliases(&q, dom_pol, num_sids, sid_ptrs, sid);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_QUERY_USERALIASES,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_query_useraliases,
+		samr_io_r_query_useraliases,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	if (NT_STATUS_IS_OK(result = r.status)) {
+		*num_aliases = r.num_entries;
+		*als_rids = r.rid;
+	}
+
+	return result;
+}
+
+/* Query user groups */
+
+NTSTATUS rpccli_samr_query_groupmem(struct rpc_pipe_client *cli,
+				    TALLOC_CTX *mem_ctx,
+				    POLICY_HND *group_pol, uint32 *num_mem, 
+				    uint32 **rid, uint32 **attr)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_QUERY_GROUPMEM q;
+	SAMR_R_QUERY_GROUPMEM r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_query_groupmem\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_query_groupmem(&q, group_pol);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_QUERY_GROUPMEM,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_query_groupmem,
+		samr_io_r_query_groupmem,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	if (NT_STATUS_IS_OK(result = r.status)) {
+		*num_mem = r.num_entries;
+		*rid = r.rid;
+		*attr = r.attr;
+	}
+
+	return result;
+}
+
+/**
+ * Enumerate domain users
+ *
+ * @param cli client state structure
+ * @param mem_ctx talloc context
+ * @param pol opened domain policy handle
+ * @param start_idx starting index of enumeration, returns context for
+                    next enumeration
+ * @param acb_mask account control bit mask (to enumerate some particular
+ *                 kind of accounts)
+ * @param size max acceptable size of response
+ * @param dom_users returned array of domain user names
+ * @param rids returned array of domain user RIDs
+ * @param num_dom_users numer returned entries
+ * 
+ * @return NTSTATUS returned in rpc response
+ **/
+
+NTSTATUS rpccli_samr_enum_dom_users(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                                 POLICY_HND *pol, uint32 *start_idx, uint32 acb_mask,
+                                 uint32 size, char ***dom_users, uint32 **rids,
+                                 uint32 *num_dom_users)
+{
+	prs_struct qbuf;
+	prs_struct rbuf;
+	SAMR_Q_ENUM_DOM_USERS q;
+	SAMR_R_ENUM_DOM_USERS r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+	int i;
+	
+	DEBUG(10,("cli_samr_enum_dom_users starting at index %u\n", (unsigned int)*start_idx));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+	
+	/* always init this */
+	*num_dom_users = 0;
+	
+	/* Fill query structure with parameters */
+
+	init_samr_q_enum_dom_users(&q, pol, *start_idx, acb_mask, size);
+	
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_ENUM_DOM_USERS,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_enum_dom_users,
+		samr_io_r_enum_dom_users,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	result = r.status;
+
+	if (!NT_STATUS_IS_OK(result) &&
+	    NT_STATUS_V(result) != NT_STATUS_V(STATUS_MORE_ENTRIES))
+		goto done;
+	
+	*start_idx = r.next_idx;
+	*num_dom_users = r.num_entries2;
+
+	if (r.num_entries2) {
+		/* allocate memory needed to return received data */	
+		*rids = TALLOC_ARRAY(mem_ctx, uint32, r.num_entries2);
+		if (!*rids) {
+			DEBUG(0, ("Error in cli_samr_enum_dom_users(): out of memory\n"));
+			return NT_STATUS_NO_MEMORY;
+		}
+		
+		*dom_users = TALLOC_ARRAY(mem_ctx, char*, r.num_entries2);
+		if (!*dom_users) {
+			DEBUG(0, ("Error in cli_samr_enum_dom_users(): out of memory\n"));
+			return NT_STATUS_NO_MEMORY;
+		}
+		
+		/* fill output buffers with rpc response */
+		for (i = 0; i < r.num_entries2; i++) {
+			fstring conv_buf;
+			
+			(*rids)[i] = r.sam[i].rid;
+			unistr2_to_ascii(conv_buf, &(r.uni_acct_name[i]), sizeof(conv_buf) - 1);
+			(*dom_users)[i] = talloc_strdup(mem_ctx, conv_buf);
+		}
+	}
+	
+done:
+	return result;
+}
+
+/* Enumerate domain groups */
+
+NTSTATUS rpccli_samr_enum_dom_groups(struct rpc_pipe_client *cli,
+				     TALLOC_CTX *mem_ctx, 
+				     POLICY_HND *pol, uint32 *start_idx, 
+				     uint32 size, struct acct_info **dom_groups,
+				     uint32 *num_dom_groups)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_ENUM_DOM_GROUPS q;
+	SAMR_R_ENUM_DOM_GROUPS r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+	uint32 name_idx, i;
+
+	DEBUG(10,("cli_samr_enum_dom_groups starting at index %u\n", (unsigned int)*start_idx));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_enum_dom_groups(&q, pol, *start_idx, size);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_ENUM_DOM_GROUPS,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_enum_dom_groups,
+		samr_io_r_enum_dom_groups,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	result = r.status;
+
+	if (!NT_STATUS_IS_OK(result) &&
+	    NT_STATUS_V(result) != NT_STATUS_V(STATUS_MORE_ENTRIES))
+		goto done;
+
+	*num_dom_groups = r.num_entries2;
+
+	if (*num_dom_groups == 0)
+		goto done;
+
+	if (!((*dom_groups) = TALLOC_ARRAY(mem_ctx, struct acct_info, *num_dom_groups))) {
+		result = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	memset(*dom_groups, 0, sizeof(struct acct_info) * (*num_dom_groups));
+
+	name_idx = 0;
+
+	for (i = 0; i < *num_dom_groups; i++) {
+
+		(*dom_groups)[i].rid = r.sam[i].rid;
+
+		if (r.sam[i].hdr_name.buffer) {
+			unistr2_to_ascii((*dom_groups)[i].acct_name,
+					 &r.uni_grp_name[name_idx],
+					 sizeof(fstring) - 1);
+			name_idx++;
+		}
+
+		*start_idx = r.next_idx;
+	}
+
+ done:
+	return result;
+}
+
+/* Enumerate domain groups */
+
+NTSTATUS rpccli_samr_enum_als_groups(struct rpc_pipe_client *cli,
+				     TALLOC_CTX *mem_ctx, 
+				     POLICY_HND *pol, uint32 *start_idx, 
+				     uint32 size, struct acct_info **dom_aliases,
+				     uint32 *num_dom_aliases)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_ENUM_DOM_ALIASES q;
+	SAMR_R_ENUM_DOM_ALIASES r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+	uint32 name_idx, i;
+
+	DEBUG(10,("cli_samr_enum_als_groups starting at index %u\n", (unsigned int)*start_idx));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_enum_dom_aliases(&q, pol, *start_idx, size);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_ENUM_DOM_ALIASES,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_enum_dom_aliases,
+		samr_io_r_enum_dom_aliases,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	result = r.status;
+
+	if (!NT_STATUS_IS_OK(result) &&
+	    NT_STATUS_V(result) != NT_STATUS_V(STATUS_MORE_ENTRIES)) {
+		goto done;
+	}
+
+	*num_dom_aliases = r.num_entries2;
+
+	if (*num_dom_aliases == 0)
+		goto done;
+
+	if (!((*dom_aliases) = TALLOC_ARRAY(mem_ctx, struct acct_info, *num_dom_aliases))) {
+		result = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	memset(*dom_aliases, 0, sizeof(struct acct_info) * *num_dom_aliases);
+
+	name_idx = 0;
+
+	for (i = 0; i < *num_dom_aliases; i++) {
+
+		(*dom_aliases)[i].rid = r.sam[i].rid;
+
+		if (r.sam[i].hdr_name.buffer) {
+			unistr2_to_ascii((*dom_aliases)[i].acct_name,
+					 &r.uni_grp_name[name_idx],
+					 sizeof(fstring) - 1);
+			name_idx++;
+		}
+
+		*start_idx = r.next_idx;
+	}
+
+ done:
+	return result;
+}
+
+/* Query alias members */
+
+NTSTATUS rpccli_samr_query_aliasmem(struct rpc_pipe_client *cli,
+				    TALLOC_CTX *mem_ctx,
+				    POLICY_HND *alias_pol, uint32 *num_mem, 
+				    DOM_SID **sids)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_QUERY_ALIASMEM q;
+	SAMR_R_QUERY_ALIASMEM r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+	uint32 i;
+
+	DEBUG(10,("cli_samr_query_aliasmem\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_query_aliasmem(&q, alias_pol);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_QUERY_ALIASMEM,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_query_aliasmem,
+		samr_io_r_query_aliasmem,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	if (!NT_STATUS_IS_OK(result = r.status)) {
+		goto done;
+	}
+
+	*num_mem = r.num_sids;
+
+	if (*num_mem == 0) {
+		*sids = NULL;
+		result = NT_STATUS_OK;
+		goto done;
+	}
+
+	if (!(*sids = TALLOC_ARRAY(mem_ctx, DOM_SID, *num_mem))) {
+		result = NT_STATUS_UNSUCCESSFUL;
+		goto done;
+	}
+
+	for (i = 0; i < *num_mem; i++) {
+		(*sids)[i] = r.sid[i].sid;
+	}
+
+ done:
+	return result;
+}
+
+/* Open handle on an alias */
+
+NTSTATUS rpccli_samr_open_alias(struct rpc_pipe_client *cli,
+				TALLOC_CTX *mem_ctx, 
+				POLICY_HND *domain_pol, uint32 access_mask, 
+				uint32 alias_rid, POLICY_HND *alias_pol)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_OPEN_ALIAS q;
+	SAMR_R_OPEN_ALIAS r;
+	NTSTATUS result;
+
+	DEBUG(10,("cli_samr_open_alias with rid 0x%x\n", alias_rid));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_open_alias(&q, domain_pol, access_mask, alias_rid);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_OPEN_ALIAS,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_open_alias,
+		samr_io_r_open_alias,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	if (NT_STATUS_IS_OK(result = r.status)) {
+		*alias_pol = r.pol;
+#ifdef __INSURE__
+		alias_pol->marker = malloc(1);
+#endif
+	}
+
+	return result;
+}
+
+/* Create an alias */
+
+NTSTATUS rpccli_samr_create_dom_alias(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, 
+				   POLICY_HND *domain_pol, const char *name,
+				   POLICY_HND *alias_pol)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_CREATE_DOM_ALIAS q;
+	SAMR_R_CREATE_DOM_ALIAS r;
+	NTSTATUS result;
+
+	DEBUG(10,("cli_samr_create_dom_alias named %s\n", name));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_create_dom_alias(&q, domain_pol, name);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_CREATE_DOM_ALIAS,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_create_dom_alias,
+		samr_io_r_create_dom_alias,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	if (NT_STATUS_IS_OK(result = r.status)) {
+		*alias_pol = r.alias_pol;
+	}
+
+	return result;
+}
+
+/* Add an alias member */
+
+NTSTATUS rpccli_samr_add_aliasmem(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, 
+			       POLICY_HND *alias_pol, DOM_SID *member)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_ADD_ALIASMEM q;
+	SAMR_R_ADD_ALIASMEM r;
+	NTSTATUS result;
+
+	DEBUG(10,("cli_samr_add_aliasmem"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_add_aliasmem(&q, alias_pol, member);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_ADD_ALIASMEM,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_add_aliasmem,
+		samr_io_r_add_aliasmem,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	result = r.status;
+
+	return result;
+}
+
+/* Delete an alias member */
+
+NTSTATUS rpccli_samr_del_aliasmem(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, 
+			       POLICY_HND *alias_pol, DOM_SID *member)
+{
+	prs_struct qbuf, rbuf;
+ 	SAMR_Q_DEL_ALIASMEM q;
+ 	SAMR_R_DEL_ALIASMEM r;
+ 	NTSTATUS result;
+
+ 	DEBUG(10,("cli_samr_del_aliasmem"));
+
+ 	ZERO_STRUCT(q);
+ 	ZERO_STRUCT(r);
+
+ 	/* Marshall data and send request */
+
+ 	init_samr_q_del_aliasmem(&q, alias_pol, member);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_DEL_ALIASMEM,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_del_aliasmem,
+		samr_io_r_del_aliasmem,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	result = r.status;
+
+	return result;
+}
+
+/* Query alias info */
+
+NTSTATUS rpccli_samr_query_alias_info(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+				   POLICY_HND *alias_pol, uint16 switch_value,
+				   ALIAS_INFO_CTR *ctr)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_QUERY_ALIASINFO q;
+	SAMR_R_QUERY_ALIASINFO r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_query_alias_info\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_query_aliasinfo(&q, alias_pol, switch_value);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_QUERY_ALIASINFO,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_query_aliasinfo,
+		samr_io_r_query_aliasinfo,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	if (!NT_STATUS_IS_OK(result = r.status)) {
+		goto done;
+	}
+
+	*ctr = *r.ctr;
+
+  done:
+
+	return result;
+}
+
+/* Query domain info */
+
+NTSTATUS rpccli_samr_query_dom_info(struct rpc_pipe_client *cli,
+				    TALLOC_CTX *mem_ctx, 
+				    POLICY_HND *domain_pol,
+				    uint16 switch_value,
+				    SAM_UNK_CTR *ctr)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_QUERY_DOMAIN_INFO q;
+	SAMR_R_QUERY_DOMAIN_INFO r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_query_dom_info\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_query_domain_info(&q, domain_pol, switch_value);
+
+	r.ctr = ctr;
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_QUERY_DOMAIN_INFO,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_query_domain_info,
+		samr_io_r_query_domain_info,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	if (!NT_STATUS_IS_OK(result = r.status)) {
+		goto done;
+	}
+
+ done:
+
+	return result;
+}
+
+/* Query domain info2 */
+
+NTSTATUS rpccli_samr_query_dom_info2(struct rpc_pipe_client *cli,
+				     TALLOC_CTX *mem_ctx, 
+				     POLICY_HND *domain_pol,
+				     uint16 switch_value,
+				     SAM_UNK_CTR *ctr)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_QUERY_DOMAIN_INFO2 q;
+	SAMR_R_QUERY_DOMAIN_INFO2 r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_query_dom_info2\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_query_domain_info2(&q, domain_pol, switch_value);
+
+	r.ctr = ctr;
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_QUERY_DOMAIN_INFO2,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_query_domain_info2,
+		samr_io_r_query_domain_info2,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	if (!NT_STATUS_IS_OK(result = r.status)) {
+		goto done;
+	}
+
+ done:
+
+	return result;
+}
+
+/* Set domain info */
+
+NTSTATUS rpccli_samr_set_domain_info(struct rpc_pipe_client *cli,
+				     TALLOC_CTX *mem_ctx, 
+				     POLICY_HND *domain_pol,
+				     uint16 switch_value,
+				     SAM_UNK_CTR *ctr)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_SET_DOMAIN_INFO q;
+	SAMR_R_SET_DOMAIN_INFO r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_set_domain_info\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_set_domain_info(&q, domain_pol, switch_value, ctr);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_SET_DOMAIN_INFO,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_set_domain_info,
+		samr_io_r_set_domain_info,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	if (!NT_STATUS_IS_OK(result = r.status)) {
+		goto done;
+	}
+
+ done:
+
+	return result;
+}
+
 /* User change password */
 
 NTSTATUS rpccli_samr_chgpasswd_user(struct rpc_pipe_client *cli,
-				    TALLOC_CTX *mem_ctx,
-				    const char *username,
-				    const char *newpassword,
-				    const char *oldpassword)
+				    TALLOC_CTX *mem_ctx, 
+				    const char *username, 
+				    const char *newpassword, 
+				    const char *oldpassword )
 {
+	prs_struct qbuf, rbuf;
+	SAMR_Q_CHGPASSWD_USER q;
+	SAMR_R_CHGPASSWD_USER r;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	struct samr_CryptPassword new_nt_password;
-	struct samr_CryptPassword new_lm_password;
-	struct samr_Password old_nt_hash_enc;
-	struct samr_Password old_lanman_hash_enc;
 
+	uchar new_nt_password[516];
+	uchar new_lm_password[516];
 	uchar old_nt_hash[16];
 	uchar old_lanman_hash[16];
+	uchar old_nt_hash_enc[16];
+	uchar old_lanman_hash_enc[16];
+
 	uchar new_nt_hash[16];
 	uchar new_lanman_hash[16];
-	struct lsa_String server, account;
 
+	char *srv_name_slash = talloc_asprintf(mem_ctx, "\\\\%s", cli->cli->desthost);
+
 	DEBUG(10,("rpccli_samr_chgpasswd_user\n"));
 
-	init_lsa_String(&server, cli->cli->srv_name_slash);
-	init_lsa_String(&account, username);
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
 
 	/* Calculate the MD4 hash (NT compatible) of the password */
 	E_md4hash(oldpassword, old_nt_hash);
 	E_md4hash(newpassword, new_nt_hash);
 
-	if (lp_client_lanman_auth() &&
-	    E_deshash(newpassword, new_lanman_hash) &&
-	    E_deshash(oldpassword, old_lanman_hash)) {
+	if (lp_client_lanman_auth() 
+	    && E_deshash(newpassword, new_lanman_hash) 
+	    && E_deshash(oldpassword, old_lanman_hash)) {
 		/* E_deshash returns false for 'long' passwords (> 14
 		   DOS chars).  This allows us to match Win2k, which
 		   does not store a LM hash for these passwords (which
 		   would reduce the effective password length to 14) */
 
-		encode_pw_buffer(new_lm_password.data, newpassword, STR_UNICODE);
+		encode_pw_buffer(new_lm_password, newpassword, STR_UNICODE);
 
-		SamOEMhash(new_lm_password.data, old_nt_hash, 516);
-		E_old_pw_hash(new_nt_hash, old_lanman_hash, old_lanman_hash_enc.hash);
+		SamOEMhash( new_lm_password, old_nt_hash, 516);
+		E_old_pw_hash( new_nt_hash, old_lanman_hash, old_lanman_hash_enc);
 	} else {
 		ZERO_STRUCT(new_lm_password);
 		ZERO_STRUCT(old_lanman_hash_enc);
 	}
 
-	encode_pw_buffer(new_nt_password.data, newpassword, STR_UNICODE);
+	encode_pw_buffer(new_nt_password, newpassword, STR_UNICODE);
+	
+	SamOEMhash( new_nt_password, old_nt_hash, 516);
+	E_old_pw_hash( new_nt_hash, old_nt_hash, old_nt_hash_enc);
 
-	SamOEMhash(new_nt_password.data, old_nt_hash, 516);
-	E_old_pw_hash(new_nt_hash, old_nt_hash, old_nt_hash_enc.hash);
+	/* Marshall data and send request */
 
-	result = rpccli_samr_ChangePasswordUser2(cli, mem_ctx,
-						 &server,
-						 &account,
-						 &new_nt_password,
-						 &old_nt_hash_enc,
-						 true,
-						 &new_lm_password,
-						 &old_lanman_hash_enc);
+	init_samr_q_chgpasswd_user(&q, srv_name_slash, username, 
+				   new_nt_password, 
+				   old_nt_hash_enc, 
+				   new_lm_password,
+				   old_lanman_hash_enc);
 
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_CHGPASSWD_USER,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_chgpasswd_user,
+		samr_io_r_chgpasswd_user,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	if (!NT_STATUS_IS_OK(result = r.status)) {
+		goto done;
+	}
+
+ done:
+
 	return result;
 }
 
 /* User change password given blobs */
 
 NTSTATUS rpccli_samr_chng_pswd_auth_crap(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 const char *username,
-					 DATA_BLOB new_nt_password_blob,
-					 DATA_BLOB old_nt_hash_enc_blob,
-					 DATA_BLOB new_lm_password_blob,
-					 DATA_BLOB old_lm_hash_enc_blob)
+				    TALLOC_CTX *mem_ctx, 
+				    const char *username, 
+				    DATA_BLOB new_nt_password,
+				    DATA_BLOB old_nt_hash_enc,
+				    DATA_BLOB new_lm_password,
+				    DATA_BLOB old_lm_hash_enc)
 {
+	prs_struct qbuf, rbuf;
+	SAMR_Q_CHGPASSWD_USER q;
+	SAMR_R_CHGPASSWD_USER r;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	struct samr_CryptPassword new_nt_password;
-	struct samr_CryptPassword new_lm_password;
-	struct samr_Password old_nt_hash_enc;
-	struct samr_Password old_lm_hash_enc;
-	struct lsa_String server, account;
 
+	char *srv_name_slash = talloc_asprintf(mem_ctx, "\\\\%s", cli->cli->desthost);
+
 	DEBUG(10,("rpccli_samr_chng_pswd_auth_crap\n"));
 
-	init_lsa_String(&server, cli->cli->srv_name_slash);
-	init_lsa_String(&account, username);
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
 
-	memcpy(&new_nt_password.data, new_nt_password_blob.data, 516);
-	memcpy(&new_lm_password.data, new_lm_password_blob.data, 516);
-	memcpy(&old_nt_hash_enc.hash, old_nt_hash_enc_blob.data, 16);
-	memcpy(&old_lm_hash_enc.hash, old_lm_hash_enc_blob.data, 16);
+	/* Marshall data and send request */
 
-	result = rpccli_samr_ChangePasswordUser2(cli, mem_ctx,
-						 &server,
-						 &account,
-						 &new_nt_password,
-						 &old_nt_hash_enc,
-						 true,
-						 &new_lm_password,
-						 &old_lm_hash_enc);
+	init_samr_q_chgpasswd_user(&q, srv_name_slash, username, 
+				   new_nt_password.data, 
+				   old_nt_hash_enc.data, 
+				   new_lm_password.data,
+				   old_lm_hash_enc.data);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_CHGPASSWD_USER,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_chgpasswd_user,
+		samr_io_r_chgpasswd_user,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	if (!NT_STATUS_IS_OK(result = r.status)) {
+		goto done;
+	}
+
+ done:
+
 	return result;
 }
 
@@ -128,70 +1344,80 @@
 /* change password 3 */
 
 NTSTATUS rpccli_samr_chgpasswd3(struct rpc_pipe_client *cli,
-				TALLOC_CTX *mem_ctx,
-				const char *username,
-				const char *newpassword,
+				TALLOC_CTX *mem_ctx, 
+				const char *username, 
+				const char *newpassword, 
 				const char *oldpassword,
-				struct samr_DomInfo1 **dominfo1,
-				struct samr_ChangeReject **reject)
+				SAM_UNK_INFO_1 *info,
+				SAMR_CHANGE_REJECT *reject)
 {
-	NTSTATUS status;
+	prs_struct qbuf, rbuf;
+	SAMR_Q_CHGPASSWD_USER3 q;
+	SAMR_R_CHGPASSWD_USER3 r;
 
-	struct samr_CryptPassword new_nt_password;
-	struct samr_CryptPassword new_lm_password;
-	struct samr_Password old_nt_hash_enc;
-	struct samr_Password old_lanman_hash_enc;
-
+	uchar new_nt_password[516];
+	uchar new_lm_password[516];
 	uchar old_nt_hash[16];
 	uchar old_lanman_hash[16];
+	uchar old_nt_hash_enc[16];
+	uchar old_lanman_hash_enc[16];
+
 	uchar new_nt_hash[16];
 	uchar new_lanman_hash[16];
 
-	struct lsa_String server, account;
+	char *srv_name_slash = talloc_asprintf(mem_ctx, "\\\\%s", cli->cli->desthost);
 
 	DEBUG(10,("rpccli_samr_chgpasswd_user3\n"));
 
-	init_lsa_String(&server, cli->cli->srv_name_slash);
-	init_lsa_String(&account, username);
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
 
 	/* Calculate the MD4 hash (NT compatible) of the password */
 	E_md4hash(oldpassword, old_nt_hash);
 	E_md4hash(newpassword, new_nt_hash);
 
-	if (lp_client_lanman_auth() &&
-	    E_deshash(newpassword, new_lanman_hash) &&
-	    E_deshash(oldpassword, old_lanman_hash)) {
+	if (lp_client_lanman_auth() 
+	    && E_deshash(newpassword, new_lanman_hash) 
+	    && E_deshash(oldpassword, old_lanman_hash)) {
 		/* E_deshash returns false for 'long' passwords (> 14
 		   DOS chars).  This allows us to match Win2k, which
 		   does not store a LM hash for these passwords (which
 		   would reduce the effective password length to 14) */
 
-		encode_pw_buffer(new_lm_password.data, newpassword, STR_UNICODE);
+		encode_pw_buffer(new_lm_password, newpassword, STR_UNICODE);
 
-		SamOEMhash(new_lm_password.data, old_nt_hash, 516);
-		E_old_pw_hash(new_nt_hash, old_lanman_hash, old_lanman_hash_enc.hash);
+		SamOEMhash( new_lm_password, old_nt_hash, 516);
+		E_old_pw_hash( new_nt_hash, old_lanman_hash, old_lanman_hash_enc);
 	} else {
 		ZERO_STRUCT(new_lm_password);
 		ZERO_STRUCT(old_lanman_hash_enc);
 	}
 
-	encode_pw_buffer(new_nt_password.data, newpassword, STR_UNICODE);
+	encode_pw_buffer(new_nt_password, newpassword, STR_UNICODE);
+	
+	SamOEMhash( new_nt_password, old_nt_hash, 516);
+	E_old_pw_hash( new_nt_hash, old_nt_hash, old_nt_hash_enc);
 
-	SamOEMhash(new_nt_password.data, old_nt_hash, 516);
-	E_old_pw_hash(new_nt_hash, old_nt_hash, old_nt_hash_enc.hash);
+	/* Marshall data and send request */
 
-	status = rpccli_samr_ChangePasswordUser3(cli, mem_ctx,
-						 &server,
-						 &account,
-						 &new_nt_password,
-						 &old_nt_hash_enc,
-						 true,
-						 &new_lm_password,
-						 &old_lanman_hash_enc,
-						 NULL,
-						 dominfo1,
-						 reject);
-	return status;
+	init_samr_q_chgpasswd_user3(&q, srv_name_slash, username, 
+				    new_nt_password, 
+				    old_nt_hash_enc, 
+				    new_lm_password,
+				    old_lanman_hash_enc);
+	r.info = info;
+	r.reject = reject;
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_CHGPASSWD_USER3,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_chgpasswd_user3,
+		samr_io_r_chgpasswd_user3,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	return r.status;
 }
 
 /* This function returns the bizzare set of (max_entries, max_size) required
@@ -224,48 +1450,655 @@
 		*max_size = 131071;
 		break;
 	}
+}		     
+
+/* Query display info */
+
+NTSTATUS rpccli_samr_query_dispinfo(struct rpc_pipe_client *cli,
+				    TALLOC_CTX *mem_ctx, 
+				    POLICY_HND *domain_pol, uint32 *start_idx,
+				    uint16 switch_value, uint32 *num_entries,
+				    uint32 max_entries, uint32 max_size,
+				    SAM_DISPINFO_CTR *ctr)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_QUERY_DISPINFO q;
+	SAMR_R_QUERY_DISPINFO r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_query_dispinfo for start_idx = %u\n", *start_idx));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	*num_entries = 0;
+
+	/* Marshall data and send request */
+
+	init_samr_q_query_dispinfo(&q, domain_pol, switch_value,
+				   *start_idx, max_entries, max_size);
+
+	r.ctr = ctr;
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_QUERY_DISPINFO,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_query_dispinfo,
+		samr_io_r_query_dispinfo,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+        result = r.status;
+
+	if (!NT_STATUS_IS_OK(result) &&
+	    NT_STATUS_V(result) != NT_STATUS_V(STATUS_MORE_ENTRIES)) {
+		goto done;
+	}
+
+	*num_entries = r.num_entries;
+	*start_idx += r.num_entries;  /* No next_idx in this structure! */
+
+ done:
+	return result;
 }
 
-NTSTATUS rpccli_try_samr_connects(struct rpc_pipe_client *cli,
-				  TALLOC_CTX *mem_ctx,
-				  uint32_t access_mask,
-				  POLICY_HND *connect_pol)
+/* Lookup rids.  Note that NT4 seems to crash if more than ~1000 rids are
+   looked up in one packet. */
+
+NTSTATUS rpccli_samr_lookup_rids(struct rpc_pipe_client *cli,
+				 TALLOC_CTX *mem_ctx, 
+				 POLICY_HND *domain_pol,
+				 uint32 num_rids, uint32 *rids, 
+				 uint32 *num_names, char ***names,
+				 uint32 **name_types)
 {
-	NTSTATUS status;
-	union samr_ConnectInfo info_in, info_out;
-	struct samr_ConnectInfo1 info1;
-	uint32_t lvl_out = 0;
+	prs_struct qbuf, rbuf;
+	SAMR_Q_LOOKUP_RIDS q;
+	SAMR_R_LOOKUP_RIDS r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+	uint32 i;
 
-	ZERO_STRUCT(info1);
+	DEBUG(10,("cli_samr_lookup_rids\n"));
 
-	info1.client_version = SAMR_CONNECT_W2K;
-	info_in.info1 = info1;
+        if (num_rids > 1000) {
+                DEBUG(2, ("cli_samr_lookup_rids: warning: NT4 can crash if "
+                          "more than ~1000 rids are looked up at once.\n"));
+        }
 
-	status = rpccli_samr_Connect5(cli, mem_ctx,
-				      cli->cli->srv_name_slash,
-				      access_mask,
-				      1,
-				      &info_in,
-				      &lvl_out,
-				      &info_out,
-				      connect_pol);
-	if (NT_STATUS_IS_OK(status)) {
-		return status;
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_lookup_rids(mem_ctx, &q, domain_pol, 1000, num_rids, rids);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_LOOKUP_RIDS,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_lookup_rids,
+		samr_io_r_lookup_rids,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	result = r.status;
+
+	if (!NT_STATUS_IS_OK(result) &&
+	    !NT_STATUS_EQUAL(result, STATUS_SOME_UNMAPPED))
+		goto done;
+
+	if (r.num_names1 == 0) {
+		*num_names = 0;
+		*names = NULL;
+		goto done;
 	}
 
-	status = rpccli_samr_Connect4(cli, mem_ctx,
-				      cli->cli->srv_name_slash,
-				      SAMR_CONNECT_W2K,
-				      access_mask,
-				      connect_pol);
-	if (NT_STATUS_IS_OK(status)) {
-		return status;
+	*num_names = r.num_names1;
+	*names = TALLOC_ARRAY(mem_ctx, char *, r.num_names1);
+	*name_types = TALLOC_ARRAY(mem_ctx, uint32, r.num_names1);
+
+	if ((*names == NULL) || (*name_types == NULL)) {
+		TALLOC_FREE(*names);
+		TALLOC_FREE(*name_types);
+		return NT_STATUS_NO_MEMORY;
 	}
 
-	status = rpccli_samr_Connect2(cli, mem_ctx,
-				      cli->cli->srv_name_slash,
-				      access_mask,
-				      connect_pol);
-	return status;
+	for (i = 0; i < r.num_names1; i++) {
+		fstring tmp;
+
+		unistr2_to_ascii(tmp, &r.uni_name[i], sizeof(tmp) - 1);
+		(*names)[i] = talloc_strdup(mem_ctx, tmp);
+		(*name_types)[i] = r.type[i];
+	}
+
+ done:
+
+	return result;
 }
 
+/* Lookup names */
+
+NTSTATUS rpccli_samr_lookup_names(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, 
+                               POLICY_HND *domain_pol, uint32 flags,
+                               uint32 num_names, const char **names,
+                               uint32 *num_rids, uint32 **rids,
+                               uint32 **rid_types)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_LOOKUP_NAMES q;
+	SAMR_R_LOOKUP_NAMES r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+	uint32 i;
+
+	DEBUG(10,("cli_samr_lookup_names\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_lookup_names(mem_ctx, &q, domain_pol, flags,
+				 num_names, names);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_LOOKUP_NAMES,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_lookup_names,
+		samr_io_r_lookup_names,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	if (!NT_STATUS_IS_OK(result = r.status)) {
+		goto done;
+	}
+
+	if (r.num_rids1 == 0) {
+		*num_rids = 0;
+		goto done;
+	}
+
+	*num_rids = r.num_rids1;
+	*rids = TALLOC_ARRAY(mem_ctx, uint32, r.num_rids1);
+	*rid_types = TALLOC_ARRAY(mem_ctx, uint32, r.num_rids1);
+
+	if ((*rids == NULL) || (*rid_types == NULL)) {
+		TALLOC_FREE(*rids);
+		TALLOC_FREE(*rid_types);
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	for (i = 0; i < r.num_rids1; i++) {
+		(*rids)[i] = r.rids[i];
+		(*rid_types)[i] = r.types[i];
+	}
+
+ done:
+
+	return result;
+}
+
+/* Create a domain user */
+
+NTSTATUS rpccli_samr_create_dom_user(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, 
+                                  POLICY_HND *domain_pol, const char *acct_name,
+                                  uint32 acb_info, uint32 unknown, 
+                                  POLICY_HND *user_pol, uint32 *rid)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_CREATE_USER q;
+	SAMR_R_CREATE_USER r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_create_dom_user %s\n", acct_name));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_create_user(&q, domain_pol, acct_name, acb_info, unknown);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_CREATE_USER,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_create_user,
+		samr_io_r_create_user,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	if (!NT_STATUS_IS_OK(result = r.status)) {
+		goto done;
+	}
+
+	if (user_pol)
+		*user_pol = r.user_pol;
+
+	if (rid)
+		*rid = r.user_rid;
+
+ done:
+
+	return result;
+}
+
+/* Set userinfo */
+
+NTSTATUS rpccli_samr_set_userinfo(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, 
+                               const POLICY_HND *user_pol, uint16 switch_value,
+                               DATA_BLOB *sess_key, SAM_USERINFO_CTR *ctr)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_SET_USERINFO q;
+	SAMR_R_SET_USERINFO r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_set_userinfo\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	if (!sess_key->length) {
+		DEBUG(1, ("No user session key\n"));
+		return NT_STATUS_NO_USER_SESSION_KEY;
+	}
+
+	/* Initialise parse structures */
+
+	prs_init(&qbuf, RPC_MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
+	prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+
+	/* Marshall data and send request */
+
+	q.ctr = ctr;
+
+	init_samr_q_set_userinfo(&q, user_pol, sess_key, switch_value, 
+				 ctr->info.id);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_SET_USERINFO,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_set_userinfo,
+		samr_io_r_set_userinfo,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	if (!NT_STATUS_IS_OK(result = r.status)) {
+		goto done;
+	}
+
+ done:
+
+	return result;
+}
+
+/* Set userinfo2 */
+
+NTSTATUS rpccli_samr_set_userinfo2(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, 
+				   const POLICY_HND *user_pol, uint16 switch_value,
+                                DATA_BLOB *sess_key, SAM_USERINFO_CTR *ctr)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_SET_USERINFO2 q;
+	SAMR_R_SET_USERINFO2 r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_set_userinfo2\n"));
+
+	if (!sess_key->length) {
+		DEBUG(1, ("No user session key\n"));
+		return NT_STATUS_NO_USER_SESSION_KEY;
+	}
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_set_userinfo2(&q, user_pol, sess_key, switch_value, ctr);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_SET_USERINFO2,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_set_userinfo2,
+		samr_io_r_set_userinfo2,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	if (!NT_STATUS_IS_OK(result = r.status)) {
+		goto done;
+	}
+
+ done:
+
+	return result;
+}
+
+/* Delete domain group */
+
+NTSTATUS rpccli_samr_delete_dom_group(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, 
+                                  POLICY_HND *group_pol)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_DELETE_DOM_GROUP q;
+	SAMR_R_DELETE_DOM_GROUP r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_delete_dom_group\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_delete_dom_group(&q, group_pol);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_DELETE_DOM_GROUP,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_delete_dom_group,
+		samr_io_r_delete_dom_group,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	result = r.status;
+
+	return result;
+}
+
+/* Delete domain alias */
+
+NTSTATUS rpccli_samr_delete_dom_alias(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, 
+                                  POLICY_HND *alias_pol)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_DELETE_DOM_ALIAS q;
+	SAMR_R_DELETE_DOM_ALIAS r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_delete_dom_alias\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_delete_dom_alias(&q, alias_pol);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_DELETE_DOM_ALIAS,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_delete_dom_alias,
+		samr_io_r_delete_dom_alias,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	result = r.status;
+
+	return result;
+}
+
+/* Delete domain user */
+
+NTSTATUS rpccli_samr_delete_dom_user(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, 
+                                  POLICY_HND *user_pol)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_DELETE_DOM_USER q;
+	SAMR_R_DELETE_DOM_USER r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_delete_dom_user\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_delete_dom_user(&q, user_pol);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_DELETE_DOM_USER,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_delete_dom_user,
+		samr_io_r_delete_dom_user,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	result = r.status;
+
+	return result;
+}
+
+/* Remove foreign SID */
+
+NTSTATUS rpccli_samr_remove_sid_foreign_domain(struct rpc_pipe_client *cli, 
+					    TALLOC_CTX *mem_ctx, 
+					    POLICY_HND *user_pol,
+					    DOM_SID *sid)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_REMOVE_SID_FOREIGN_DOMAIN q;
+	SAMR_R_REMOVE_SID_FOREIGN_DOMAIN r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_remove_sid_foreign_domain\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_remove_sid_foreign_domain(&q, user_pol, sid);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_REMOVE_SID_FOREIGN_DOMAIN,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_remove_sid_foreign_domain,
+		samr_io_r_remove_sid_foreign_domain,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	result = r.status;
+
+	return result;
+}
+
+/* Query user security object */
+
+NTSTATUS rpccli_samr_query_sec_obj(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                                 POLICY_HND *user_pol, uint32 sec_info, 
+                                 TALLOC_CTX *ctx, SEC_DESC_BUF **sec_desc_buf)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_QUERY_SEC_OBJ q;
+	SAMR_R_QUERY_SEC_OBJ r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_query_sec_obj\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_query_sec_obj(&q, user_pol, sec_info);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_QUERY_SEC_OBJECT,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_query_sec_obj,
+		samr_io_r_query_sec_obj,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	result = r.status;
+	*sec_desc_buf=dup_sec_desc_buf(ctx, r.buf);
+
+	return result;
+}
+
+/* Set user security object */
+
+NTSTATUS rpccli_samr_set_sec_obj(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                                 POLICY_HND *user_pol, uint32 sec_info, 
+                                 SEC_DESC_BUF *sec_desc_buf)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_SET_SEC_OBJ q;
+	SAMR_R_SET_SEC_OBJ r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_set_sec_obj\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_set_sec_obj(&q, user_pol, sec_info, sec_desc_buf);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_SET_SEC_OBJECT,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_set_sec_obj,
+		samr_io_r_set_sec_obj,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	result = r.status;
+
+	return result;
+}
+
+
+/* Get domain password info */
+
+NTSTATUS rpccli_samr_get_dom_pwinfo(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+				 uint16 *min_pwd_length, uint32 *password_properties)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_GET_DOM_PWINFO q;
+	SAMR_R_GET_DOM_PWINFO r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_get_dom_pwinfo\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_get_dom_pwinfo(&q, cli->cli->desthost);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_GET_DOM_PWINFO,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_get_dom_pwinfo,
+		samr_io_r_get_dom_pwinfo,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	result = r.status;
+
+	if (NT_STATUS_IS_OK(result)) {
+		if (min_pwd_length)
+			*min_pwd_length = r.min_pwd_length;
+		if (password_properties)
+			*password_properties = r.password_properties;
+	}
+
+	return result;
+}
+
+/* Get domain password info */
+
+NTSTATUS rpccli_samr_get_usrdom_pwinfo(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+				       POLICY_HND *pol, uint16 *min_pwd_length, 
+				       uint32 *password_properties, uint32 *unknown1)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_GET_USRDOM_PWINFO q;
+	SAMR_R_GET_USRDOM_PWINFO r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_get_usrdom_pwinfo\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_get_usrdom_pwinfo(&q, pol);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_GET_USRDOM_PWINFO,
+		   q, r,
+		   qbuf, rbuf,
+		   samr_io_q_get_usrdom_pwinfo,
+		   samr_io_r_get_usrdom_pwinfo,
+		   NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	result = r.status;
+
+	if (NT_STATUS_IS_OK(result)) {
+		if (min_pwd_length)
+			*min_pwd_length = r.min_pwd_length;
+		if (password_properties)
+			*password_properties = r.password_properties;
+		if (unknown1)
+			*unknown1 = r.unknown_1;
+	}
+
+	return result;
+}
+
+
+/* Lookup Domain Name */
+
+NTSTATUS rpccli_samr_lookup_domain(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+				POLICY_HND *user_pol, char *domain_name, 
+				DOM_SID *sid)
+{
+	prs_struct qbuf, rbuf;
+	SAMR_Q_LOOKUP_DOMAIN q;
+	SAMR_R_LOOKUP_DOMAIN r;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	DEBUG(10,("cli_samr_lookup_domain\n"));
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Marshall data and send request */
+
+	init_samr_q_lookup_domain(&q, user_pol, domain_name);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SAMR, SAMR_LOOKUP_DOMAIN,
+		q, r,
+		qbuf, rbuf,
+		samr_io_q_lookup_domain,
+		samr_io_r_lookup_domain,
+		NT_STATUS_UNSUCCESSFUL); 
+
+	/* Return output parameters */
+
+	result = r.status;
+
+	if (NT_STATUS_IS_OK(result))
+		sid_copy(sid, &r.dom_sid.sid);
+
+	return result;
+}

Copied: branches/samba/upstream/source/rpc_client/cli_shutdown.c (from rev 1928, branches/samba/upstream/source/rpc_client/cli_shutdown.c)
===================================================================
--- branches/samba/upstream/source/rpc_client/cli_shutdown.c	                        (rev 0)
+++ branches/samba/upstream/source/rpc_client/cli_shutdown.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,119 @@
+/* 
+   Unix SMB/CIFS implementation.
+   RPC Pipe client
+ 
+   Copyright (C) Andrew Tridgell              1992-1998,
+   Largely rewritten by Jeremy Allison (C)	   2005.
+   Copyright (C) Jim McDonough (jmcd at us.ibm.com)   2003.
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+
+/* Shutdown a server */
+
+NTSTATUS rpccli_shutdown_init(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+			   const char *msg, uint32 timeout, BOOL do_reboot,
+			   BOOL force)
+{
+	prs_struct qbuf;
+	prs_struct rbuf; 
+	SHUTDOWN_Q_INIT q;
+	SHUTDOWN_R_INIT r;
+	WERROR result = WERR_GENERAL_FAILURE;
+
+	if (msg == NULL) 
+		return NT_STATUS_INVALID_PARAMETER;
+
+	ZERO_STRUCT (q);
+	ZERO_STRUCT (r);
+
+	/* Marshall data and send request */
+
+	init_shutdown_q_init(&q, msg, timeout, do_reboot, force);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SHUTDOWN, SHUTDOWN_INIT,
+		q, r,
+		qbuf, rbuf,
+		shutdown_io_q_init,
+		shutdown_io_r_init,
+		NT_STATUS_UNSUCCESSFUL);
+
+	result = r.status;
+	return werror_to_ntstatus(result);
+}
+
+/* Shutdown a server */
+
+NTSTATUS rpccli_shutdown_init_ex(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+			   const char *msg, uint32 timeout, BOOL do_reboot,
+			   BOOL force, uint32 reason)
+{
+	prs_struct qbuf;
+	prs_struct rbuf; 
+	SHUTDOWN_Q_INIT_EX q;
+	SHUTDOWN_R_INIT_EX r;
+	WERROR result = WERR_GENERAL_FAILURE;
+
+	if (msg == NULL) 
+		return NT_STATUS_INVALID_PARAMETER;
+
+	ZERO_STRUCT (q);
+	ZERO_STRUCT (r);
+
+	/* Marshall data and send request */
+
+	init_shutdown_q_init_ex(&q, msg, timeout, do_reboot, force, reason);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SHUTDOWN, SHUTDOWN_INIT_EX,
+		q, r,
+		qbuf, rbuf,
+		shutdown_io_q_init_ex,
+		shutdown_io_r_init_ex,
+		NT_STATUS_UNSUCCESSFUL);
+
+	result = r.status;
+	return werror_to_ntstatus(result);
+}
+
+
+/* Abort a server shutdown */
+
+NTSTATUS rpccli_shutdown_abort(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx)
+{
+	prs_struct rbuf;
+	prs_struct qbuf; 
+	SHUTDOWN_Q_ABORT q;
+	SHUTDOWN_R_ABORT r;
+	WERROR result = WERR_GENERAL_FAILURE;
+
+	ZERO_STRUCT (q);
+	ZERO_STRUCT (r);
+
+	/* Marshall data and send request */
+
+	init_shutdown_q_abort(&q);
+
+	CLI_DO_RPC(cli, mem_ctx, PI_SHUTDOWN, SHUTDOWN_ABORT,
+		q, r,
+		qbuf, rbuf,
+		shutdown_io_q_abort,
+		shutdown_io_r_abort,
+		NT_STATUS_UNSUCCESSFUL);
+
+	result = r.status;
+	return werror_to_ntstatus(result);
+}

Modified: branches/samba/upstream/source/rpc_client/cli_spoolss.c
===================================================================
--- branches/samba/upstream/source/rpc_client/cli_spoolss.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_client/cli_spoolss.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,7 +10,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -19,7 +19,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -32,7 +33,7 @@
 /**********************************************************************
 **********************************************************************/
 
-static bool decode_printer_info_0(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer,
+static BOOL decode_printer_info_0(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer,
 				uint32 returned, PRINTER_INFO_0 **info)
 {
 	uint32 i;
@@ -63,7 +64,7 @@
 /**********************************************************************
 **********************************************************************/
 
-static bool decode_printer_info_1(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer,
+static BOOL decode_printer_info_1(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer,
 				uint32 returned, PRINTER_INFO_1 **info)
 {
 	uint32 i;
@@ -94,7 +95,7 @@
 /**********************************************************************
 **********************************************************************/
 
-static bool decode_printer_info_2(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer, 
+static BOOL decode_printer_info_2(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer, 
 				uint32 returned, PRINTER_INFO_2 **info)
 {
 	uint32 i;
@@ -127,7 +128,7 @@
 /**********************************************************************
 **********************************************************************/
 
-static bool decode_printer_info_3(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer, 
+static BOOL decode_printer_info_3(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer, 
 				uint32 returned, PRINTER_INFO_3 **info)
 {
 	uint32 i;
@@ -159,7 +160,7 @@
 /**********************************************************************
 **********************************************************************/
 
-static bool decode_printer_info_7(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer,
+static BOOL decode_printer_info_7(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer,
 				uint32 returned, PRINTER_INFO_7 **info)
 {
 	uint32 i;
@@ -191,7 +192,7 @@
 /**********************************************************************
 **********************************************************************/
 
-static bool decode_port_info_1(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer, 
+static BOOL decode_port_info_1(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer, 
 			uint32 returned, PORT_INFO_1 **info)
 {
 	uint32 i;
@@ -222,7 +223,7 @@
 /**********************************************************************
 **********************************************************************/
 
-static bool decode_port_info_2(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer, 
+static BOOL decode_port_info_2(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer, 
 			uint32 returned, PORT_INFO_2 **info)
 {
 	uint32 i;
@@ -253,7 +254,7 @@
 /**********************************************************************
 **********************************************************************/
 
-static bool decode_printer_driver_1(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer, 
+static BOOL decode_printer_driver_1(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer, 
 			uint32 returned, DRIVER_INFO_1 **info)
 {
 	uint32 i;
@@ -284,7 +285,7 @@
 /**********************************************************************
 **********************************************************************/
 
-static bool decode_printer_driver_2(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer, 
+static BOOL decode_printer_driver_2(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer, 
 			uint32 returned, DRIVER_INFO_2 **info)
 {
 	uint32 i;
@@ -315,7 +316,7 @@
 /**********************************************************************
 **********************************************************************/
 
-static bool decode_printer_driver_3(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer, 
+static BOOL decode_printer_driver_3(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer, 
 			uint32 returned, DRIVER_INFO_3 **info)
 {
 	uint32 i;
@@ -346,7 +347,7 @@
 /**********************************************************************
 **********************************************************************/
 
-static bool decode_printerdriverdir_1 (TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer,
+static BOOL decode_printerdriverdir_1 (TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer,
 			uint32 returned, DRIVER_DIRECTORY_1 **info
 )
 {
@@ -371,7 +372,7 @@
 /**********************************************************************
 **********************************************************************/
 
-static bool decode_jobs_1(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer, 
+static BOOL decode_jobs_1(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer, 
 			  uint32 num_jobs, JOB_INFO_1 **jobs)
 {
 	uint32 i;
@@ -398,7 +399,7 @@
 /**********************************************************************
 **********************************************************************/
 
-static bool decode_jobs_2(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer, 
+static BOOL decode_jobs_2(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer, 
 			  uint32 num_jobs, JOB_INFO_2 **jobs)
 {
 	uint32 i;
@@ -425,7 +426,7 @@
 /**********************************************************************
 **********************************************************************/
 
-static bool decode_forms_1(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer, 
+static BOOL decode_forms_1(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer, 
 			   uint32 num_forms, FORM_1 **forms)
 {
 	int i;

Modified: branches/samba/upstream/source/rpc_client/cli_spoolss_notify.c
===================================================================
--- branches/samba/upstream/source/rpc_client/cli_spoolss_notify.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_client/cli_spoolss_notify.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,7 +10,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -19,7 +19,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Copied: branches/samba/upstream/source/rpc_client/cli_srvsvc.c (from rev 1928, branches/samba/upstream/source/rpc_client/cli_srvsvc.c)
===================================================================
--- branches/samba/upstream/source/rpc_client/cli_srvsvc.c	                        (rev 0)
+++ branches/samba/upstream/source/rpc_client/cli_srvsvc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,617 @@
+/* 
+   Unix SMB/CIFS implementation.
+   NT Domain Authentication SMB / MSRPC client
+   Copyright (C) Andrew Tridgell 1994-2000
+   Copyright (C) Tim Potter 2001
+   Copyright (C) Jim McDonough <jmcd at us.ibm.com> 2002
+   Copyright (C) Jeremy Allison  2005.
+   Copyright (C) Gerald (Jerry) Carter        2006.
+
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+
+WERROR rpccli_srvsvc_net_srv_get_info(struct rpc_pipe_client *cli, 
+				   TALLOC_CTX *mem_ctx,
+				   uint32 switch_value, SRV_INFO_CTR *ctr)
+{
+	prs_struct qbuf, rbuf;
+	SRV_Q_NET_SRV_GET_INFO q;
+	SRV_R_NET_SRV_GET_INFO r;
+	WERROR result = W_ERROR(ERRgeneral);
+	fstring server;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Initialise input parameters */
+
+	slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->cli->desthost);
+	strupper_m(server);
+
+	init_srv_q_net_srv_get_info(&q, server, switch_value);
+	r.ctr = ctr;
+
+	/* Marshall data and send request */
+
+	CLI_DO_RPC_WERR(cli, mem_ctx, PI_SRVSVC, SRV_NET_SRV_GET_INFO,
+		q, r,
+		qbuf, rbuf,
+		srv_io_q_net_srv_get_info,
+		srv_io_r_net_srv_get_info,
+		WERR_GENERAL_FAILURE);
+
+	result = r.status;
+	return result;
+}
+
+WERROR rpccli_srvsvc_net_share_enum(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+				 uint32 info_level, SRV_SHARE_INFO_CTR *ctr,
+				 int preferred_len, ENUM_HND *hnd)
+{
+	prs_struct qbuf, rbuf;
+	SRV_Q_NET_SHARE_ENUM q;
+	SRV_R_NET_SHARE_ENUM r;
+	WERROR result = W_ERROR(ERRgeneral);
+	fstring server;
+	int i;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Initialise input parameters */
+
+	slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->cli->desthost);
+	strupper_m(server);
+
+	init_srv_q_net_share_enum(&q, server, info_level, preferred_len, hnd);
+
+	/* Marshall data and send request */
+
+	CLI_DO_RPC_WERR(cli, mem_ctx, PI_SRVSVC, SRV_NET_SHARE_ENUM_ALL,
+		q, r,
+		qbuf, rbuf,
+		srv_io_q_net_share_enum,
+		srv_io_r_net_share_enum,
+		WERR_GENERAL_FAILURE);
+
+	result = r.status;
+
+	if (!W_ERROR_IS_OK(result))
+		goto done;
+
+	/* Oh yuck yuck yuck - we have to copy all the info out of the
+	   SRV_SHARE_INFO_CTR in the SRV_R_NET_SHARE_ENUM as when we do a
+	   prs_mem_free() it will all be invalidated.  The various share
+	   info structures suck badly too.  This really is gross. */
+
+	ZERO_STRUCTP(ctr);
+
+	if (!r.ctr.num_entries)
+		goto done;
+
+	ctr->info_level = info_level;
+	ctr->num_entries = r.ctr.num_entries;
+
+	switch(info_level) {
+	case 1:
+		ctr->share.info1 = TALLOC_ARRAY(mem_ctx, SRV_SHARE_INFO_1, ctr->num_entries);
+		if (ctr->share.info1 == NULL) {
+			return WERR_NOMEM;
+		}
+		
+		memset(ctr->share.info1, 0, sizeof(SRV_SHARE_INFO_1));
+
+		for (i = 0; i < ctr->num_entries; i++) {
+			SRV_SHARE_INFO_1 *info1 = &ctr->share.info1[i];
+			char *s;
+			
+			/* Copy pointer crap */
+
+			memcpy(&info1->info_1, &r.ctr.share.info1[i].info_1, 
+			       sizeof(SH_INFO_1));
+
+			/* Duplicate strings */
+
+			s = unistr2_tdup(mem_ctx, &r.ctr.share.info1[i].info_1_str.uni_netname);
+			if (s)
+				init_unistr2(&info1->info_1_str.uni_netname, s, UNI_STR_TERMINATE);
+		
+			s = unistr2_tdup(mem_ctx, &r.ctr.share.info1[i].info_1_str.uni_remark);
+			if (s)
+				init_unistr2(&info1->info_1_str.uni_remark, s, UNI_STR_TERMINATE);
+
+		}		
+
+		break;
+	case 2:
+		ctr->share.info2 = TALLOC_ARRAY(mem_ctx, SRV_SHARE_INFO_2, ctr->num_entries);
+		if (ctr->share.info2 == NULL) {
+			return WERR_NOMEM;
+		}
+		
+		memset(ctr->share.info2, 0, sizeof(SRV_SHARE_INFO_2));
+
+		for (i = 0; i < ctr->num_entries; i++) {
+			SRV_SHARE_INFO_2 *info2 = &ctr->share.info2[i];
+			char *s;
+			
+			/* Copy pointer crap */
+
+			memcpy(&info2->info_2, &r.ctr.share.info2[i].info_2, 
+			       sizeof(SH_INFO_2));
+
+			/* Duplicate strings */
+
+			s = unistr2_tdup(mem_ctx, &r.ctr.share.info2[i].info_2_str.uni_netname);
+			if (s)
+				init_unistr2(&info2->info_2_str.uni_netname, s, UNI_STR_TERMINATE);
+
+			s = unistr2_tdup(mem_ctx, &r.ctr.share.info2[i].info_2_str.uni_remark);
+			if (s)
+				init_unistr2(&info2->info_2_str.uni_remark, s, UNI_STR_TERMINATE);
+
+			s = unistr2_tdup(mem_ctx, &r.ctr.share.info2[i].info_2_str.uni_path);
+			if (s)
+				init_unistr2(&info2->info_2_str.uni_path, s, UNI_STR_TERMINATE);
+
+			s = unistr2_tdup(mem_ctx, &r.ctr.share.info2[i].info_2_str.uni_passwd);
+			if (s)
+				init_unistr2(&info2->info_2_str.uni_passwd, s, UNI_STR_TERMINATE);
+		}
+		break;
+	/* adding info-level 502 here */
+	case 502:
+		ctr->share.info502 = TALLOC_ARRAY(mem_ctx, SRV_SHARE_INFO_502, ctr->num_entries);
+
+		if (ctr->share.info502 == NULL) {
+			return WERR_NOMEM;
+		}
+		
+		memset(ctr->share.info502, 0, sizeof(SRV_SHARE_INFO_502));
+
+		for (i = 0; i < ctr->num_entries; i++) {
+			SRV_SHARE_INFO_502 *info502 = &ctr->share.info502[i];
+			char *s;
+			
+			/* Copy pointer crap */
+			memcpy(&info502->info_502, &r.ctr.share.info502[i].info_502, 
+			       sizeof(SH_INFO_502));
+
+			/* Duplicate strings */
+
+			s = unistr2_tdup(mem_ctx, &r.ctr.share.info502[i].info_502_str.uni_netname);
+			if (s)
+				init_unistr2(&info502->info_502_str.uni_netname, s, UNI_STR_TERMINATE);
+
+			s = unistr2_tdup(mem_ctx, &r.ctr.share.info502[i].info_502_str.uni_remark);
+			if (s)
+				init_unistr2(&info502->info_502_str.uni_remark, s, UNI_STR_TERMINATE);
+
+			s = unistr2_tdup(mem_ctx, &r.ctr.share.info502[i].info_502_str.uni_path);
+			if (s)
+				init_unistr2(&info502->info_502_str.uni_path, s, UNI_STR_TERMINATE);
+
+			s = unistr2_tdup(mem_ctx, &r.ctr.share.info502[i].info_502_str.uni_passwd);
+			if (s)
+				init_unistr2(&info502->info_502_str.uni_passwd, s, UNI_STR_TERMINATE);
+		
+			info502->info_502_str.sd = dup_sec_desc(mem_ctx, r.ctr.share.info502[i].info_502_str.sd);
+		}
+		break;
+	}
+
+  done:
+
+	return result;
+}
+
+WERROR rpccli_srvsvc_net_share_get_info(struct rpc_pipe_client *cli,
+				     TALLOC_CTX *mem_ctx,
+				     const char *sharename,
+				     uint32 info_level,
+				     SRV_SHARE_INFO *info)
+{
+	prs_struct qbuf, rbuf;
+	SRV_Q_NET_SHARE_GET_INFO q;
+	SRV_R_NET_SHARE_GET_INFO r;
+	WERROR result = W_ERROR(ERRgeneral);
+	fstring server;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Initialise input parameters */
+
+	slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->cli->desthost);
+	strupper_m(server);
+
+	init_srv_q_net_share_get_info(&q, server, sharename, info_level);
+
+	/* Marshall data and send request */
+
+	CLI_DO_RPC_WERR(cli, mem_ctx, PI_SRVSVC, SRV_NET_SHARE_GET_INFO,
+		q, r,
+		qbuf, rbuf,
+		srv_io_q_net_share_get_info,
+		srv_io_r_net_share_get_info,
+		WERR_GENERAL_FAILURE);
+
+	result = r.status;
+
+	if (!W_ERROR_IS_OK(result))
+		goto done;
+
+	ZERO_STRUCTP(info);
+
+	info->switch_value = info_level;
+
+	switch(info_level) {
+	case 1:
+	{
+		SRV_SHARE_INFO_1 *info1 = &info->share.info1;
+		SH_INFO_1_STR *info1_str = &info1->info_1_str;
+		
+		char *s;
+
+		info->share.info1 = r.info.share.info1;
+
+		/* Duplicate strings */
+
+		s = unistr2_tdup(mem_ctx, &info1_str->uni_netname);
+		if (s)
+			init_unistr2(&info1_str->uni_netname,
+				     s, UNI_STR_TERMINATE);
+
+		s = unistr2_tdup(mem_ctx, &info1_str->uni_remark);
+		if (s)
+			init_unistr2(&info1_str->uni_remark,
+				     s, UNI_STR_TERMINATE);
+
+		break;
+	}
+	case 2:
+	{
+		SRV_SHARE_INFO_2 *info2 = &info->share.info2;
+		SH_INFO_2_STR *info2_str = &info2->info_2_str;
+		
+		char *s;
+
+		info->share.info2 = r.info.share.info2;
+
+		/* Duplicate strings */
+
+		s = unistr2_tdup(mem_ctx, &info2_str->uni_netname);
+		if (s)
+			init_unistr2(&info2_str->uni_netname,
+				     s, UNI_STR_TERMINATE);
+
+		s = unistr2_tdup(mem_ctx, &info2_str->uni_remark);
+		if (s)
+			init_unistr2(&info2_str->uni_remark,
+				     s, UNI_STR_TERMINATE);
+
+		s = unistr2_tdup(mem_ctx, &info2_str->uni_path);
+		if (s)
+			init_unistr2(&info2_str->uni_path,
+				     s, UNI_STR_TERMINATE);
+
+		s = unistr2_tdup(mem_ctx, &info2_str->uni_passwd);
+		if (s)
+			init_unistr2(&info2_str->uni_passwd,
+				     s, UNI_STR_TERMINATE);
+
+
+		break;
+	}
+	case 502:
+	{
+		SRV_SHARE_INFO_502 *info502 = &info->share.info502;
+		SH_INFO_502_STR *info502_str = &info502->info_502_str;
+		
+		char *s;
+
+		info->share.info502 = r.info.share.info502;
+
+		/* Duplicate strings */
+
+		s = unistr2_tdup(mem_ctx, &info502_str->uni_netname);
+		if (s)
+			init_unistr2(&info502_str->uni_netname,
+				     s, UNI_STR_TERMINATE);
+
+		s = unistr2_tdup(mem_ctx, &info502_str->uni_remark);
+		if (s)
+			init_unistr2(&info502_str->uni_remark,
+				     s, UNI_STR_TERMINATE);
+
+		s = unistr2_tdup(mem_ctx, &info502_str->uni_path);
+		if (s)
+			init_unistr2(&info502_str->uni_path,
+				     s, UNI_STR_TERMINATE);
+
+		s = unistr2_tdup(mem_ctx, &info502_str->uni_passwd);
+		if (s)
+			init_unistr2(&info502_str->uni_passwd,
+				     s, UNI_STR_TERMINATE);
+
+		info502_str->sd = dup_sec_desc(mem_ctx, info502_str->sd);
+		break;
+	}
+	default:
+		DEBUG(0,("unimplemented info-level: %d\n", info_level));
+		break;
+	}
+
+  done:
+
+	return result;
+}
+
+WERROR rpccli_srvsvc_net_share_set_info(struct rpc_pipe_client *cli,
+				     TALLOC_CTX *mem_ctx,
+				     const char *sharename,
+				     uint32 info_level,
+				     SRV_SHARE_INFO *info)
+{
+	prs_struct qbuf, rbuf;
+	SRV_Q_NET_SHARE_SET_INFO q;
+	SRV_R_NET_SHARE_SET_INFO r;
+	WERROR result = W_ERROR(ERRgeneral);
+	fstring server;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Initialise input parameters */
+
+	slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->cli->desthost);
+	strupper_m(server);
+
+	init_srv_q_net_share_set_info(&q, server, sharename, info_level, info);
+
+	/* Marshall data and send request */
+
+	CLI_DO_RPC_WERR(cli, mem_ctx, PI_SRVSVC, SRV_NET_SHARE_SET_INFO,
+		q, r,
+		qbuf, rbuf,
+		srv_io_q_net_share_set_info,
+		srv_io_r_net_share_set_info,
+		WERR_GENERAL_FAILURE);
+
+	result = r.status;
+	return result;
+}
+
+WERROR rpccli_srvsvc_net_share_del(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+				const char *sharename)
+{
+	prs_struct qbuf, rbuf;
+	SRV_Q_NET_SHARE_DEL q;
+	SRV_R_NET_SHARE_DEL r;
+	WERROR result = W_ERROR(ERRgeneral);
+	fstring server;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Initialise input parameters */
+
+	slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->cli->desthost);
+	strupper_m(server);
+
+	init_srv_q_net_share_del(&q, server, sharename);
+
+	/* Marshall data and send request */
+
+	CLI_DO_RPC_WERR(cli, mem_ctx, PI_SRVSVC, SRV_NET_SHARE_DEL,
+		q, r,
+		qbuf, rbuf,
+		srv_io_q_net_share_del,
+		srv_io_r_net_share_del,
+		WERR_GENERAL_FAILURE);
+
+	result = r.status;
+	return result;
+}
+
+WERROR rpccli_srvsvc_net_share_add(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+				const char *netname, uint32 type, 
+				const char *remark, uint32 perms, 
+				uint32 max_uses, uint32 num_uses, 
+				const char *path, const char *passwd,
+				int level, SEC_DESC *sd)
+{
+	prs_struct qbuf, rbuf;
+	SRV_Q_NET_SHARE_ADD q;
+	SRV_R_NET_SHARE_ADD r;
+	WERROR result = W_ERROR(ERRgeneral);
+	fstring server;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->cli->desthost);
+	strupper_m(server);
+
+	init_srv_q_net_share_add(&q,server, netname, type, remark,
+				 perms, max_uses, num_uses, path, passwd, 
+				 level, sd);
+
+	/* Marshall data and send request */
+
+	CLI_DO_RPC_WERR(cli, mem_ctx, PI_SRVSVC, SRV_NET_SHARE_ADD,
+		q, r,
+		qbuf, rbuf,
+		srv_io_q_net_share_add,
+		srv_io_r_net_share_add,
+		WERR_GENERAL_FAILURE);
+
+	result = r.status;
+	return result;	
+}
+
+WERROR rpccli_srvsvc_net_remote_tod(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+				 char *server, TIME_OF_DAY_INFO *tod)
+{
+	prs_struct qbuf, rbuf;
+	SRV_Q_NET_REMOTE_TOD q;
+	SRV_R_NET_REMOTE_TOD r;
+	WERROR result = W_ERROR(ERRgeneral);
+	fstring server_slash;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Initialise input parameters */
+
+	slprintf(server_slash, sizeof(fstring)-1, "\\\\%s", cli->cli->desthost);
+	strupper_m(server_slash);
+
+	init_srv_q_net_remote_tod(&q, server_slash);
+	r.tod = tod;
+
+	/* Marshall data and send request */
+
+	CLI_DO_RPC_WERR(cli, mem_ctx, PI_SRVSVC, SRV_NET_REMOTE_TOD,
+		q, r,
+		qbuf, rbuf,
+		srv_io_q_net_remote_tod,
+		srv_io_r_net_remote_tod,
+		WERR_GENERAL_FAILURE);
+
+	result = r.status;
+	return result;	
+}
+
+WERROR rpccli_srvsvc_net_file_enum(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+				uint32 file_level, const char *user_name,
+				SRV_FILE_INFO_CTR *ctr,	int preferred_len,
+				ENUM_HND *hnd)
+{
+	prs_struct qbuf, rbuf;
+	SRV_Q_NET_FILE_ENUM q;
+	SRV_R_NET_FILE_ENUM r;
+	WERROR result = W_ERROR(ERRgeneral);
+	fstring server;
+	int i;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Initialise input parameters */
+
+	slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->cli->desthost);
+	strupper_m(server);
+
+	init_srv_q_net_file_enum(&q, server, NULL, user_name, 
+				 file_level, ctr, preferred_len, hnd);
+
+	/* Marshall data and send request */
+
+	CLI_DO_RPC_WERR(cli, mem_ctx, PI_SRVSVC, SRV_NET_FILE_ENUM,
+		q, r,
+		qbuf, rbuf,
+		srv_io_q_net_file_enum,
+		srv_io_r_net_file_enum,
+		WERR_GENERAL_FAILURE);
+
+	result = r.status;
+
+	if (!W_ERROR_IS_OK(result))
+		goto done;
+
+	/* copy the data over to the ctr */
+
+	ZERO_STRUCTP(ctr);
+
+	ctr->level = file_level;
+
+	ctr->num_entries = ctr->num_entries2 = r.ctr.num_entries;
+	
+	switch(file_level) {
+	case 3:
+		if (ctr->num_entries) {
+			if ( (ctr->file.info3 = TALLOC_ARRAY(mem_ctx, FILE_INFO_3, ctr->num_entries)) == NULL ) {
+				return WERR_NOMEM;
+			}
+
+			memset(ctr->file.info3, 0, sizeof(FILE_INFO_3) * ctr->num_entries);
+		} else {
+			ctr->file.info3 = NULL;
+		}
+
+		for (i = 0; i < r.ctr.num_entries; i++) {
+			FILE_INFO_3 *info3 = &ctr->file.info3[i];
+			char *s;
+			
+			/* Copy pointer crap */
+
+			memcpy(info3, &r.ctr.file.info3[i], sizeof(FILE_INFO_3));
+
+			/* Duplicate strings */
+
+			if ( (s = unistr2_tdup(mem_ctx, r.ctr.file.info3[i].path)) != NULL ) {
+				info3->path = TALLOC_P( mem_ctx, UNISTR2 );
+				init_unistr2(info3->path, s, UNI_STR_TERMINATE);
+			}
+		
+			if ( (s = unistr2_tdup(mem_ctx, r.ctr.file.info3[i].user)) != NULL ) {
+				info3->user = TALLOC_P( mem_ctx, UNISTR2 );
+				init_unistr2(info3->user, s, UNI_STR_TERMINATE);
+			}
+
+		}		
+
+		break;
+	}
+
+  done:
+	return result;
+}
+
+WERROR rpccli_srvsvc_net_file_close(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+				 uint32 file_id)
+{
+	prs_struct qbuf, rbuf;
+	SRV_Q_NET_FILE_CLOSE q;
+	SRV_R_NET_FILE_CLOSE r;
+	WERROR result = W_ERROR(ERRgeneral);
+	fstring server;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	/* Initialise input parameters */
+
+	slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->cli->desthost);
+	strupper_m(server);
+
+	init_srv_q_net_file_close(&q, server, file_id);
+
+	/* Marshall data and send request */
+
+	CLI_DO_RPC_WERR(cli, mem_ctx, PI_SRVSVC, SRV_NET_FILE_CLOSE,
+		q, r,
+		qbuf, rbuf,
+		srv_io_q_net_file_close,
+		srv_io_r_net_file_close,
+		WERR_GENERAL_FAILURE);
+
+	result = r.status;
+	return result;
+}

Modified: branches/samba/upstream/source/rpc_client/cli_svcctl.c
===================================================================
--- branches/samba/upstream/source/rpc_client/cli_svcctl.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_client/cli_svcctl.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 
@@ -42,7 +43,7 @@
 ********************************************************************/
 const char* svc_status_string( uint32 state )
 {
-	fstring msg;
+	static fstring msg;
 	int i;
 	
 	fstr_sprintf( msg, "Unknown State [%d]", state );
@@ -54,9 +55,108 @@
 		}
 	}
 	
-	return talloc_strdup(talloc_tos(), msg);
+	return msg;
 }
 
+/********************************************************************
+********************************************************************/
+
+WERROR rpccli_svcctl_open_scm(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, 
+                              POLICY_HND *hSCM, uint32 access_desired )
+{
+	SVCCTL_Q_OPEN_SCMANAGER in;
+	SVCCTL_R_OPEN_SCMANAGER out;
+	prs_struct qbuf, rbuf;
+	fstring server;
+	
+	ZERO_STRUCT(in);
+	ZERO_STRUCT(out);
+	
+	/* leave the database name NULL to get the default service db */
+
+	in.database = NULL;
+
+	/* set the server name */
+
+	if ( !(in.servername = TALLOC_P( mem_ctx, UNISTR2 )) )
+		return WERR_NOMEM;
+	fstr_sprintf( server, "\\\\%s", cli->cli->desthost );
+	init_unistr2( in.servername, server, UNI_STR_TERMINATE );
+
+	in.access = access_desired;
+	
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_SVCCTL, SVCCTL_OPEN_SCMANAGER_W, 
+	            in, out, 
+	            qbuf, rbuf,
+	            svcctl_io_q_open_scmanager,
+	            svcctl_io_r_open_scmanager, 
+	            WERR_GENERAL_FAILURE );
+	
+	if ( !W_ERROR_IS_OK( out.status ) )
+		return out.status;
+
+	memcpy( hSCM, &out.handle, sizeof(POLICY_HND) );
+	
+	return out.status;
+}
+
+/********************************************************************
+********************************************************************/
+
+WERROR rpccli_svcctl_open_service( struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, 
+                                POLICY_HND *hSCM, POLICY_HND *hService, 
+				const char *servicename, uint32 access_desired )
+{
+	SVCCTL_Q_OPEN_SERVICE in;
+	SVCCTL_R_OPEN_SERVICE out;
+	prs_struct qbuf, rbuf;
+	
+	ZERO_STRUCT(in);
+	ZERO_STRUCT(out);
+	
+	memcpy( &in.handle, hSCM, sizeof(POLICY_HND) );
+	init_unistr2( &in.servicename, servicename, UNI_STR_TERMINATE );
+	in.access = access_desired;
+	
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_SVCCTL, SVCCTL_OPEN_SERVICE_W, 
+	            in, out, 
+	            qbuf, rbuf,
+	            svcctl_io_q_open_service,
+	            svcctl_io_r_open_service, 
+	            WERR_GENERAL_FAILURE );
+	
+	if ( !W_ERROR_IS_OK( out.status ) )
+		return out.status;
+
+	memcpy( hService, &out.handle, sizeof(POLICY_HND) );
+	
+	return out.status;
+}
+
+/********************************************************************
+********************************************************************/
+
+WERROR rpccli_svcctl_close_service(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, POLICY_HND *hService )
+{
+	SVCCTL_Q_CLOSE_SERVICE in;
+	SVCCTL_R_CLOSE_SERVICE out;
+	prs_struct qbuf, rbuf;
+	
+	ZERO_STRUCT(in);
+	ZERO_STRUCT(out);
+	
+	memcpy( &in.handle, hService, sizeof(POLICY_HND) );
+	
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_SVCCTL, SVCCTL_CLOSE_SERVICE, 
+	            in, out, 
+	            qbuf, rbuf,
+	            svcctl_io_q_close_service,
+	            svcctl_io_r_close_service, 
+	            WERR_GENERAL_FAILURE );
+
+	return out.status;
+}
+
 /*******************************************************************
 *******************************************************************/
 
@@ -129,6 +229,36 @@
 /*******************************************************************
 *******************************************************************/
 
+WERROR rpccli_svcctl_query_status( struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                                POLICY_HND *hService, SERVICE_STATUS *status )
+{
+	SVCCTL_Q_QUERY_STATUS in;
+	SVCCTL_R_QUERY_STATUS out;
+	prs_struct qbuf, rbuf;
+	
+	ZERO_STRUCT(in);
+	ZERO_STRUCT(out);
+	
+	memcpy( &in.handle, hService, sizeof(POLICY_HND) );
+	
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_SVCCTL, SVCCTL_QUERY_STATUS, 
+	            in, out, 
+	            qbuf, rbuf,
+	            svcctl_io_q_query_status,
+	            svcctl_io_r_query_status, 
+	            WERR_GENERAL_FAILURE );
+	
+	if ( !W_ERROR_IS_OK( out.status ) )
+		return out.status;
+
+	memcpy( status, &out.svc_status, sizeof(SERVICE_STATUS) );
+	
+	return out.status;
+}
+
+/*******************************************************************
+*******************************************************************/
+
 WERROR rpccli_svcctl_query_config(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
                                 POLICY_HND *hService, SERVICE_CONFIG *config )
 {
@@ -199,3 +329,109 @@
 	
 	return out.status;
 }
+
+/*******************************************************************
+*******************************************************************/
+
+WERROR rpccli_svcctl_start_service( struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                                 POLICY_HND *hService,
+                                 const char **parm_array, uint32 parmcount )
+{
+	SVCCTL_Q_START_SERVICE in;
+	SVCCTL_R_START_SERVICE out;
+	prs_struct qbuf, rbuf;
+	
+	ZERO_STRUCT(in);
+	ZERO_STRUCT(out);
+	
+	memcpy( &in.handle, hService, sizeof(POLICY_HND) );
+	
+	in.parmcount  = 0;
+	in.parameters = NULL;
+	
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_SVCCTL, SVCCTL_START_SERVICE_W,
+	            in, out, 
+	            qbuf, rbuf,
+	            svcctl_io_q_start_service,
+	            svcctl_io_r_start_service,
+	            WERR_GENERAL_FAILURE );
+	
+	return out.status;
+}
+
+/*******************************************************************
+*******************************************************************/
+
+WERROR rpccli_svcctl_control_service( struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                                   POLICY_HND *hService, uint32 control,
+				   SERVICE_STATUS *status )
+{
+	SVCCTL_Q_CONTROL_SERVICE in;
+	SVCCTL_R_CONTROL_SERVICE out;
+	prs_struct qbuf, rbuf;
+	
+	ZERO_STRUCT(in);
+	ZERO_STRUCT(out);
+	
+	memcpy( &in.handle, hService, sizeof(POLICY_HND) );
+	in.control = control;
+	
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_SVCCTL, SVCCTL_CONTROL_SERVICE, 
+	            in, out, 
+	            qbuf, rbuf,
+	            svcctl_io_q_control_service,
+	            svcctl_io_r_control_service,
+	            WERR_GENERAL_FAILURE );
+	
+	if ( !W_ERROR_IS_OK( out.status ) )
+		return out.status;
+
+	memcpy( status, &out.svc_status, sizeof(SERVICE_STATUS) );
+	
+	return out.status;
+}
+
+
+/*******************************************************************
+*******************************************************************/
+
+WERROR rpccli_svcctl_get_dispname( struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, 
+                                POLICY_HND *hService, fstring displayname )
+{
+	SVCCTL_Q_GET_DISPLAY_NAME in;
+	SVCCTL_R_GET_DISPLAY_NAME out;
+	prs_struct qbuf, rbuf;
+	
+	ZERO_STRUCT(in);
+	ZERO_STRUCT(out);
+	
+	memcpy( &in.handle, hService, sizeof(POLICY_HND) );
+	in.display_name_len = 0;
+	
+	CLI_DO_RPC_WERR( cli, mem_ctx, PI_SVCCTL, SVCCTL_GET_DISPLAY_NAME, 
+	            in, out, 
+	            qbuf, rbuf,
+	            svcctl_io_q_get_display_name,
+	            svcctl_io_r_get_display_name, 
+	            WERR_GENERAL_FAILURE );
+	
+	/* second time with correct buffer size...should be ok */
+	
+	if ( W_ERROR_EQUAL( out.status, WERR_INSUFFICIENT_BUFFER ) ) {
+		in.display_name_len = out.display_name_len;
+
+		CLI_DO_RPC_WERR( cli, mem_ctx, PI_SVCCTL, SVCCTL_GET_DISPLAY_NAME, 
+		            in, out, 
+		            qbuf, rbuf,
+		            svcctl_io_q_get_display_name,
+		            svcctl_io_r_get_display_name, 
+		            WERR_GENERAL_FAILURE );
+	}
+
+	if ( !W_ERROR_IS_OK( out.status ) )
+		return out.status;
+
+	rpcstr_pull( displayname, out.displayname.buffer, sizeof(displayname), -1, STR_TERMINATE );
+	
+	return out.status;
+}

Deleted: branches/samba/upstream/source/rpc_client/init_lsa.c
===================================================================
--- branches/samba/upstream/source/rpc_client/init_lsa.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_client/init_lsa.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,126 +0,0 @@
-/*
- *  Unix SMB/CIFS implementation.
- *  RPC Pipe client / server routines
- *  Copyright (C) Guenther Deschner                  2008.
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "includes.h"
-
-/*******************************************************************
- inits a structure.
-********************************************************************/
-
-void init_lsa_String(struct lsa_String *name, const char *s)
-{
-	name->string = s;
-}
-
-/*******************************************************************
- inits a structure.
-********************************************************************/
-
-void init_lsa_StringLarge(struct lsa_StringLarge *name, const char *s)
-{
-	name->string = s;
-}
-
-/*******************************************************************
- inits a structure.
-********************************************************************/
-
-void init_lsa_AsciiString(struct lsa_AsciiString *name, const char *s)
-{
-	name->string = s;
-}
-
-/*******************************************************************
- inits a structure.
-********************************************************************/
-
-void init_lsa_AsciiStringLarge(struct lsa_AsciiStringLarge *name, const char *s)
-{
-	name->string = s;
-}
-
-/*******************************************************************
- Inits an lsa_QosInfo structure.
-********************************************************************/
-
-void init_lsa_sec_qos(struct lsa_QosInfo *r,
-		      uint32_t len,
-		      uint16_t impersonation_level,
-		      uint8_t context_mode,
-		      uint8_t effective_only)
-{
-	DEBUG(5, ("init_lsa_sec_qos\n"));
-
-	r->len = len;
-	r->impersonation_level = impersonation_level;
-	r->context_mode = context_mode;
-	r->effective_only = effective_only;
-}
-
-/*******************************************************************
- Inits an lsa_ObjectAttribute structure.
-********************************************************************/
-
-void init_lsa_obj_attr(struct lsa_ObjectAttribute *r,
-		       uint32_t len,
-		       uint8_t *root_dir,
-		       const char *object_name,
-		       uint32_t attributes,
-		       struct security_descriptor *sec_desc,
-		       struct lsa_QosInfo *sec_qos)
-{
-	DEBUG(5,("init_lsa_obj_attr\n"));
-
-	r->len = len;
-	r->root_dir = root_dir;
-	r->object_name = object_name;
-	r->attributes = attributes;
-	r->sec_desc = sec_desc;
-	r->sec_qos = sec_qos;
-}
-
-/*******************************************************************
- Inits a lsa_TranslatedSid structure.
-********************************************************************/
-
-void init_lsa_translated_sid(struct lsa_TranslatedSid *r,
-			     enum lsa_SidType sid_type,
-			     uint32_t rid,
-			     uint32_t sid_index)
-{
-	r->sid_type = sid_type;
-	r->rid = rid;
-	r->sid_index = sid_index;
-}
-
-/*******************************************************************
- Inits a lsa_TranslatedName2 structure.
-********************************************************************/
-
-void init_lsa_translated_name2(struct lsa_TranslatedName2 *r,
-			       enum lsa_SidType sid_type,
-			       const char *name,
-			       uint32_t sid_index,
-			       uint32_t unknown)
-{
-	r->sid_type = sid_type;
-	init_lsa_String(&r->name, name);
-	r->sid_index = sid_index;
-	r->unknown = unknown;
-}

Deleted: branches/samba/upstream/source/rpc_client/init_netlogon.c
===================================================================
--- branches/samba/upstream/source/rpc_client/init_netlogon.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_client/init_netlogon.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,220 +0,0 @@
-/*
- *  Unix SMB/CIFS implementation.
- *  RPC Pipe client / server routines
- *  Copyright (C) Guenther Deschner                  2008.
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "includes.h"
-
-/*******************************************************************
- inits a structure.
-********************************************************************/
-
-void init_netr_SamBaseInfo(struct netr_SamBaseInfo *r,
-			   NTTIME last_logon,
-			   NTTIME last_logoff,
-			   NTTIME acct_expiry,
-			   NTTIME last_password_change,
-			   NTTIME allow_password_change,
-			   NTTIME force_password_change,
-			   const char *account_name,
-			   const char *full_name,
-			   const char *logon_script,
-			   const char *profile_path,
-			   const char *home_directory,
-			   const char *home_drive,
-			   uint16_t logon_count,
-			   uint16_t bad_password_count,
-			   uint32_t rid,
-			   uint32_t primary_gid,
-			   struct samr_RidWithAttributeArray groups,
-			   uint32_t user_flags,
-			   struct netr_UserSessionKey key,
-			   const char *logon_server,
-			   const char *domain,
-			   struct dom_sid2 *domain_sid,
-			   struct netr_LMSessionKey LMSessKey,
-			   uint32_t acct_flags)
-{
-	r->last_logon = last_logon;
-	r->last_logoff = last_logoff;
-	r->acct_expiry = acct_expiry;
-	r->last_password_change = last_password_change;
-	r->allow_password_change = allow_password_change;
-	r->force_password_change = force_password_change;
-	init_lsa_String(&r->account_name, account_name);
-	init_lsa_String(&r->full_name, full_name);
-	init_lsa_String(&r->logon_script, logon_script);
-	init_lsa_String(&r->profile_path, profile_path);
-	init_lsa_String(&r->home_directory, home_directory);
-	init_lsa_String(&r->home_drive, home_drive);
-	r->logon_count = logon_count;
-	r->bad_password_count = bad_password_count;
-	r->rid = rid;
-	r->primary_gid = primary_gid;
-	r->groups = groups;
-	r->user_flags = user_flags;
-	r->key = key;
-	init_lsa_StringLarge(&r->logon_server, logon_server);
-	init_lsa_StringLarge(&r->domain, domain);
-	r->domain_sid = domain_sid;
-	r->LMSessKey = LMSessKey;
-	r->acct_flags = acct_flags;
-}
-
-/*******************************************************************
- inits a structure.
-********************************************************************/
-
-void init_netr_SamInfo3(struct netr_SamInfo3 *r,
-			NTTIME last_logon,
-			NTTIME last_logoff,
-			NTTIME acct_expiry,
-			NTTIME last_password_change,
-			NTTIME allow_password_change,
-			NTTIME force_password_change,
-			const char *account_name,
-			const char *full_name,
-			const char *logon_script,
-			const char *profile_path,
-			const char *home_directory,
-			const char *home_drive,
-			uint16_t logon_count,
-			uint16_t bad_password_count,
-			uint32_t rid,
-			uint32_t primary_gid,
-			struct samr_RidWithAttributeArray groups,
-			uint32_t user_flags,
-			struct netr_UserSessionKey key,
-			const char *logon_server,
-			const char *domain,
-			struct dom_sid2 *domain_sid,
-			struct netr_LMSessionKey LMSessKey,
-			uint32_t acct_flags,
-			uint32_t sidcount,
-			struct netr_SidAttr *sids)
-{
-	init_netr_SamBaseInfo(&r->base,
-			      last_logon,
-			      last_logoff,
-			      acct_expiry,
-			      last_password_change,
-			      allow_password_change,
-			      force_password_change,
-			      account_name,
-			      full_name,
-			      logon_script,
-			      profile_path,
-			      home_directory,
-			      home_drive,
-			      logon_count,
-			      bad_password_count,
-			      rid,
-			      primary_gid,
-			      groups,
-			      user_flags,
-			      key,
-			      logon_server,
-			      domain,
-			      domain_sid,
-			      LMSessKey,
-			      acct_flags);
-	r->sidcount = sidcount;
-	r->sids = sids;
-}
-
-/*******************************************************************
- inits a structure.
-********************************************************************/
-
-void init_netr_IdentityInfo(struct netr_IdentityInfo *r,
-			    const char *domain_name,
-			    uint32_t parameter_control,
-			    uint32_t logon_id_low,
-			    uint32_t logon_id_high,
-			    const char *account_name,
-			    const char *workstation)
-{
-	init_lsa_String(&r->domain_name, domain_name);
-	r->parameter_control = parameter_control;
-	r->logon_id_low = logon_id_low;
-	r->logon_id_high = logon_id_high;
-	init_lsa_String(&r->account_name, account_name);
-	init_lsa_String(&r->workstation, workstation);
-}
-
-/*******************************************************************
- inits a structure.
- This is a network logon packet. The log_id parameters
- are what an NT server would generate for LUID once the
- user is logged on. I don't think we care about them.
-
- Note that this has no access to the NT and LM hashed passwords,
- so it forwards the challenge, and the NT and LM responses (24
- bytes each) over the secure channel to the Domain controller
- for it to say yea or nay. This is the preferred method of
- checking for a logon as it doesn't export the password
- hashes to anyone who has compromised the secure channel. JRA.
-
-********************************************************************/
-
-void init_netr_NetworkInfo(struct netr_NetworkInfo *r,
-			   const char *domain_name,
-			   uint32_t parameter_control,
-			   uint32_t logon_id_low,
-			   uint32_t logon_id_high,
-			   const char *account_name,
-			   const char *workstation,
-			   uint8_t challenge[8],
-			   struct netr_ChallengeResponse nt,
-			   struct netr_ChallengeResponse lm)
-{
-	init_netr_IdentityInfo(&r->identity_info,
-			       domain_name,
-			       parameter_control,
-			       logon_id_low,
-			       logon_id_high,
-			       account_name,
-			       workstation);
-	memcpy(r->challenge, challenge, 8);
-	r->nt = nt;
-	r->lm = lm;
-}
-
-/*******************************************************************
- inits a structure.
-********************************************************************/
-
-void init_netr_PasswordInfo(struct netr_PasswordInfo *r,
-			    const char *domain_name,
-			    uint32_t parameter_control,
-			    uint32_t logon_id_low,
-			    uint32_t logon_id_high,
-			    const char *account_name,
-			    const char *workstation,
-			    struct samr_Password lmpassword,
-			    struct samr_Password ntpassword)
-{
-	init_netr_IdentityInfo(&r->identity_info,
-			       domain_name,
-			       parameter_control,
-			       logon_id_low,
-			       logon_id_high,
-			       account_name,
-			       workstation);
-	r->lmpassword = lmpassword;
-	r->ntpassword = ntpassword;
-}

Deleted: branches/samba/upstream/source/rpc_client/init_samr.c
===================================================================
--- branches/samba/upstream/source/rpc_client/init_samr.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_client/init_samr.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,461 +0,0 @@
-/*
- *  Unix SMB/CIFS implementation.
- *  RPC Pipe client / server routines
- *  Copyright (C) Guenther Deschner                  2008.
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "includes.h"
-
-/*******************************************************************
- inits a structure.
-********************************************************************/
-
-void init_samr_DomInfo1(struct samr_DomInfo1 *r,
-			uint16_t min_password_length,
-			uint16_t password_history_length,
-			uint32_t password_properties,
-			int64_t max_password_age,
-			int64_t min_password_age)
-{
-	r->min_password_length = min_password_length;
-	r->password_history_length = password_history_length;
-	r->password_properties = password_properties;
-	r->max_password_age = max_password_age;
-	r->min_password_age = min_password_age;
-}
-
-/*******************************************************************
- inits a structure.
-********************************************************************/
-
-void init_samr_DomInfo2(struct samr_DomInfo2 *r,
-			NTTIME force_logoff_time,
-			const char *comment,
-			const char *domain_name,
-			const char *primary,
-			uint64_t sequence_num,
-			uint32_t unknown2,
-			enum samr_Role role,
-			uint32_t unknown3,
-			uint32_t num_users,
-			uint32_t num_groups,
-			uint32_t num_aliases)
-{
-	r->force_logoff_time = force_logoff_time;
-	init_lsa_String(&r->comment, comment);
-	init_lsa_String(&r->domain_name, domain_name);
-	init_lsa_String(&r->primary, primary);
-	r->sequence_num = sequence_num;
-	r->unknown2 = unknown2;
-	r->role = role;
-	r->unknown3 = unknown3;
-	r->num_users = num_users;
-	r->num_groups = num_groups;
-	r->num_aliases = num_aliases;
-}
-
-/*******************************************************************
- inits a structure.
-********************************************************************/
-
-void init_samr_DomInfo3(struct samr_DomInfo3 *r,
-			NTTIME force_logoff_time)
-{
-	r->force_logoff_time = force_logoff_time;
-}
-
-/*******************************************************************
- inits a structure.
-********************************************************************/
-
-void init_samr_DomInfo4(struct samr_DomInfo4 *r,
-			const char *comment)
-{
-	init_lsa_String(&r->comment, comment);
-}
-
-/*******************************************************************
- inits a structure.
-********************************************************************/
-
-void init_samr_DomInfo5(struct samr_DomInfo5 *r,
-			const char *domain_name)
-{
-	init_lsa_String(&r->domain_name, domain_name);
-}
-
-/*******************************************************************
- inits a structure.
-********************************************************************/
-
-void init_samr_DomInfo6(struct samr_DomInfo6 *r,
-			const char *primary)
-{
-	init_lsa_String(&r->primary, primary);
-}
-
-/*******************************************************************
- inits a structure.
-********************************************************************/
-
-void init_samr_DomInfo7(struct samr_DomInfo7 *r,
-			enum samr_Role role)
-{
-	r->role = role;
-}
-
-/*******************************************************************
- inits a structure.
-********************************************************************/
-
-void init_samr_DomInfo8(struct samr_DomInfo8 *r,
-			uint64_t sequence_num,
-			NTTIME domain_create_time)
-{
-	r->sequence_num = sequence_num;
-	r->domain_create_time = domain_create_time;
-}
-
-/*******************************************************************
- inits a structure.
-********************************************************************/
-
-void init_samr_DomInfo9(struct samr_DomInfo9 *r,
-			uint32_t unknown)
-{
-	r->unknown = unknown;
-}
-
-/*******************************************************************
- inits a structure.
-********************************************************************/
-
-void init_samr_DomInfo12(struct samr_DomInfo12 *r,
-			 uint64_t lockout_duration,
-			 uint64_t lockout_window,
-			 uint16_t lockout_threshold)
-{
-	r->lockout_duration = lockout_duration;
-	r->lockout_window = lockout_window;
-	r->lockout_threshold = lockout_threshold;
-}
-
-/*******************************************************************
- inits a samr_GroupInfoAll structure.
-********************************************************************/
-
-void init_samr_group_info1(struct samr_GroupInfoAll *r,
-			   const char *name,
-			   uint32_t attributes,
-			   uint32_t num_members,
-			   const char *description)
-{
-	DEBUG(5, ("init_samr_group_info1\n"));
-
-	init_lsa_String(&r->name, name);
-	r->attributes = attributes;
-	r->num_members = num_members;
-	init_lsa_String(&r->description, description);
-}
-
-/*******************************************************************
- inits a lsa_String structure
-********************************************************************/
-
-void init_samr_group_info2(struct lsa_String *r, const char *group_name)
-{
-	DEBUG(5, ("init_samr_group_info2\n"));
-
-	init_lsa_String(r, group_name);
-}
-
-/*******************************************************************
- inits a samr_GroupInfoAttributes structure.
-********************************************************************/
-
-void init_samr_group_info3(struct samr_GroupInfoAttributes *r,
-			   uint32_t attributes)
-{
-	DEBUG(5, ("init_samr_group_info3\n"));
-
-	r->attributes = attributes;
-}
-
-/*******************************************************************
- inits a lsa_String structure
-********************************************************************/
-
-void init_samr_group_info4(struct lsa_String *r, const char *description)
-{
-	DEBUG(5, ("init_samr_group_info4\n"));
-
-	init_lsa_String(r, description);
-}
-
-/*******************************************************************
- inits a samr_GroupInfoAll structure.
-********************************************************************/
-
-void init_samr_group_info5(struct samr_GroupInfoAll *r,
-			   const char *name,
-			   uint32_t attributes,
-			   uint32_t num_members,
-			   const char *description)
-{
-	DEBUG(5, ("init_samr_group_info5\n"));
-
-	init_lsa_String(&r->name, name);
-	r->attributes = attributes;
-	r->num_members = num_members;
-	init_lsa_String(&r->description, description);
-}
-
-/*******************************************************************
- inits a samr_AliasInfoAll structure.
-********************************************************************/
-
-void init_samr_alias_info1(struct samr_AliasInfoAll *r,
-			   const char *name,
-			   uint32_t num_members,
-			   const char *description)
-{
-	DEBUG(5, ("init_samr_alias_info1\n"));
-
-	init_lsa_String(&r->name, name);
-	r->num_members = num_members;
-	init_lsa_String(&r->description, description);
-}
-
-/*******************************************************************
-inits a lsa_String structure.
-********************************************************************/
-
-void init_samr_alias_info3(struct lsa_String *r,
-			   const char *description)
-{
-	DEBUG(5, ("init_samr_alias_info3\n"));
-
-	init_lsa_String(r, description);
-}
-
-/*******************************************************************
- inits a samr_UserInfo7 structure.
-********************************************************************/
-
-void init_samr_user_info7(struct samr_UserInfo7 *r,
-			  const char *account_name)
-{
-	DEBUG(5, ("init_samr_user_info7\n"));
-
-	init_lsa_String(&r->account_name, account_name);
-}
-
-/*******************************************************************
- inits a samr_UserInfo9 structure.
-********************************************************************/
-
-void init_samr_user_info9(struct samr_UserInfo9 *r,
-			  uint32_t primary_gid)
-{
-	DEBUG(5, ("init_samr_user_info9\n"));
-
-	r->primary_gid = primary_gid;
-}
-
-/*******************************************************************
- inits a SAM_USER_INFO_16 structure.
-********************************************************************/
-
-void init_samr_user_info16(struct samr_UserInfo16 *r,
-			   uint32_t acct_flags)
-{
-	DEBUG(5, ("init_samr_user_info16\n"));
-
-	r->acct_flags = acct_flags;
-}
-
-/*******************************************************************
- inits a samr_UserInfo18 structure.
-********************************************************************/
-
-void init_samr_user_info18(struct samr_UserInfo18 *r,
-			   const uint8 lm_pwd[16],
-			   const uint8 nt_pwd[16])
-{
-	DEBUG(5, ("init_samr_user_info18\n"));
-
-	r->lm_pwd_active =
-		memcpy(r->lm_pwd.hash, lm_pwd, sizeof(r->lm_pwd.hash)) ? true : false;
-	r->nt_pwd_active =
-		memcpy(r->nt_pwd.hash, nt_pwd, sizeof(r->nt_pwd.hash)) ? true : false;
-}
-
-/*******************************************************************
- inits a samr_UserInfo20 structure.
-********************************************************************/
-
-void init_samr_user_info20(struct samr_UserInfo20 *r,
-			   struct lsa_BinaryString *parameters)
-{
-	r->parameters = *parameters;
-}
-
-/*************************************************************************
- inits a samr_UserInfo21 structure
- *************************************************************************/
-
-void init_samr_user_info21(struct samr_UserInfo21 *r,
-			   NTTIME last_logon,
-			   NTTIME last_logoff,
-			   NTTIME last_password_change,
-			   NTTIME acct_expiry,
-			   NTTIME allow_password_change,
-			   NTTIME force_password_change,
-			   const char *account_name,
-			   const char *full_name,
-			   const char *home_directory,
-			   const char *home_drive,
-			   const char *logon_script,
-			   const char *profile_path,
-			   const char *description,
-			   const char *workstations,
-			   const char *comment,
-			   struct lsa_BinaryString *parameters,
-			   uint32_t rid,
-			   uint32_t primary_gid,
-			   uint32_t acct_flags,
-			   uint32_t fields_present,
-			   struct samr_LogonHours logon_hours,
-			   uint16_t bad_password_count,
-			   uint16_t logon_count,
-			   uint16_t country_code,
-			   uint16_t code_page,
-			   uint8_t nt_password_set,
-			   uint8_t lm_password_set,
-			   uint8_t password_expired)
-{
-	r->last_logon = last_logon;
-	r->last_logoff = last_logoff;
-	r->last_password_change = last_password_change;
-	r->acct_expiry = acct_expiry;
-	r->allow_password_change = allow_password_change;
-	r->force_password_change = force_password_change;
-	init_lsa_String(&r->account_name, account_name);
-	init_lsa_String(&r->full_name, full_name);
-	init_lsa_String(&r->home_directory, home_directory);
-	init_lsa_String(&r->home_drive, home_drive);
-	init_lsa_String(&r->logon_script, logon_script);
-	init_lsa_String(&r->profile_path, profile_path);
-	init_lsa_String(&r->description, description);
-	init_lsa_String(&r->workstations, workstations);
-	init_lsa_String(&r->comment, comment);
-	r->parameters = *parameters;
-	r->rid = rid;
-	r->primary_gid = primary_gid;
-	r->acct_flags = acct_flags;
-	r->fields_present = fields_present;
-	r->logon_hours = logon_hours;
-	r->bad_password_count = bad_password_count;
-	r->logon_count = logon_count;
-	r->country_code = country_code;
-	r->code_page = code_page;
-	r->nt_password_set = nt_password_set;
-	r->lm_password_set = lm_password_set;
-	r->password_expired = password_expired;
-}
-
-/*************************************************************************
- init_samr_user_info23
- *************************************************************************/
-
-void init_samr_user_info23(struct samr_UserInfo23 *r,
-			   NTTIME last_logon,
-			   NTTIME last_logoff,
-			   NTTIME last_password_change,
-			   NTTIME acct_expiry,
-			   NTTIME allow_password_change,
-			   NTTIME force_password_change,
-			   const char *account_name,
-			   const char *full_name,
-			   const char *home_directory,
-			   const char *home_drive,
-			   const char *logon_script,
-			   const char *profile_path,
-			   const char *description,
-			   const char *workstations,
-			   const char *comment,
-			   struct lsa_BinaryString *parameters,
-			   uint32_t rid,
-			   uint32_t primary_gid,
-			   uint32_t acct_flags,
-			   uint32_t fields_present,
-			   struct samr_LogonHours logon_hours,
-			   uint16_t bad_password_count,
-			   uint16_t logon_count,
-			   uint16_t country_code,
-			   uint16_t code_page,
-			   uint8_t nt_password_set,
-			   uint8_t lm_password_set,
-			   uint8_t password_expired,
-			   uint8_t data[516],
-			   uint8_t pw_len)
-{
-	init_samr_user_info21(&r->info,
-			      last_logon,
-			      last_logoff,
-			      last_password_change,
-			      acct_expiry,
-			      allow_password_change,
-			      force_password_change,
-			      account_name,
-			      full_name,
-			      home_directory,
-			      home_drive,
-			      logon_script,
-			      profile_path,
-			      description,
-			      workstations,
-			      comment,
-			      parameters,
-			      rid,
-			      primary_gid,
-			      acct_flags,
-			      fields_present,
-			      logon_hours,
-			      bad_password_count,
-			      logon_count,
-			      country_code,
-			      code_page,
-			      nt_password_set,
-			      lm_password_set,
-			      password_expired);
-
-	memcpy(r->password.data, data, sizeof(r->password.data));
-}
-
-/*************************************************************************
- init_samr_user_info24
- *************************************************************************/
-
-void init_samr_user_info24(struct samr_UserInfo24 *r,
-			   uint8_t data[516],
-			   uint8_t pw_len)
-{
-	DEBUG(10, ("init_samr_user_info24:\n"));
-
-	memcpy(r->password.data, data, sizeof(r->password.data));
-	r->pw_len = pw_len;
-}

Deleted: branches/samba/upstream/source/rpc_client/init_srvsvc.c
===================================================================
--- branches/samba/upstream/source/rpc_client/init_srvsvc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_client/init_srvsvc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,402 +0,0 @@
-/*
- *  Unix SMB/CIFS implementation.
- *  RPC Pipe client / server routines
- *  Copyright (C) Guenther Deschner                  2008.
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "includes.h"
-
-/*******************************************************************
- inits a srvsvc_NetSrvInfo102 structure
-********************************************************************/
-
-void init_srvsvc_NetSrvInfo102(struct srvsvc_NetSrvInfo102 *r,
-			       enum srvsvc_PlatformId platform_id,
-			       const char *server_name,
-			       uint32_t version_major,
-			       uint32_t version_minor,
-			       uint32_t server_type,
-			       const char *comment,
-			       uint32_t users,
-			       uint32_t disc,
-			       uint32_t hidden,
-			       uint32_t announce,
-			       uint32_t anndelta,
-			       uint32_t licenses,
-			       const char *userpath)
-{
-	r->platform_id = platform_id;
-	r->server_name = server_name;
-	r->version_major = version_major;
-	r->version_minor = version_minor;
-	r->server_type = server_type;
-	r->comment = comment;
-	r->users = users;
-	r->disc = disc;
-	r->hidden = hidden;
-	r->announce = announce;
-	r->anndelta = anndelta;
-	r->licenses = licenses;
-	r->userpath = userpath;
-}
-
-/*******************************************************************
- inits a srvsvc_NetSrvInfo101 structure
-********************************************************************/
-
-void init_srvsvc_NetSrvInfo101(struct srvsvc_NetSrvInfo101 *r,
-			       enum srvsvc_PlatformId platform_id,
-			       const char *server_name,
-			       uint32_t version_major,
-			       uint32_t version_minor,
-			       uint32_t server_type,
-			       const char *comment)
-{
-	r->platform_id = platform_id;
-	r->server_name = server_name;
-	r->version_major = version_major;
-	r->version_minor = version_minor;
-	r->server_type = server_type;
-	r->comment = comment;
-}
-
-/*******************************************************************
- inits a srvsvc_NetSrvInfo100 structure
-********************************************************************/
-
-void init_srvsvc_NetSrvInfo100(struct srvsvc_NetSrvInfo100 *r,
-			       enum srvsvc_PlatformId platform_id,
-			       const char *server_name)
-{
-	r->platform_id = platform_id;
-	r->server_name = server_name;
-}
-
-/*******************************************************************
- inits a srvsvc_NetShareInfo0 structure
-********************************************************************/
-
-void init_srvsvc_NetShareInfo0(struct srvsvc_NetShareInfo0 *r,
-			       const char *name)
-{
-	r->name = name;
-}
-
-/*******************************************************************
- inits a srvsvc_NetShareInfo1 structure
-********************************************************************/
-
-void init_srvsvc_NetShareInfo1(struct srvsvc_NetShareInfo1 *r,
-			       const char *name,
-			       enum srvsvc_ShareType type,
-			       const char *comment)
-{
-	r->name = name;
-	r->type = type;
-	r->comment = comment;
-}
-
-/*******************************************************************
- inits a srvsvc_NetShareInfo2 structure
-********************************************************************/
-
-void init_srvsvc_NetShareInfo2(struct srvsvc_NetShareInfo2 *r,
-			       const char *name,
-			       enum srvsvc_ShareType type,
-			       const char *comment,
-			       uint32_t permissions,
-			       uint32_t max_users,
-			       uint32_t current_users,
-			       const char *path,
-			       const char *password)
-{
-	r->name = name;
-	r->type = type;
-	r->comment = comment;
-	r->permissions = permissions;
-	r->max_users = max_users;
-	r->current_users = current_users;
-	r->path = path;
-	r->password = password;
-}
-
-/*******************************************************************
- inits a srvsvc_NetShareInfo501 structure
-********************************************************************/
-
-void init_srvsvc_NetShareInfo501(struct srvsvc_NetShareInfo501 *r,
-				 const char *name,
-				 enum srvsvc_ShareType type,
-				 const char *comment,
-				 uint32_t csc_policy)
-{
-	r->name = name;
-	r->type = type;
-	r->comment = comment;
-	r->csc_policy = csc_policy;
-}
-
-/*******************************************************************
- inits a srvsvc_NetShareInfo502 structure
-********************************************************************/
-
-void init_srvsvc_NetShareInfo502(struct srvsvc_NetShareInfo502 *r,
-				 const char *name,
-				 enum srvsvc_ShareType type,
-				 const char *comment,
-				 uint32_t permissions,
-				 uint32_t max_users,
-				 uint32_t current_users,
-				 const char *path,
-				 const char *password,
-				 struct sec_desc_buf *sd_buf)
-{
-	r->name = name;
-	r->type = type;
-	r->comment = comment;
-	r->permissions = permissions;
-	r->max_users = max_users;
-	r->current_users = current_users;
-	r->path = path;
-	r->password = password;
-	r->sd_buf = *sd_buf;
-}
-
-/*******************************************************************
- inits a srvsvc_NetShareInfo1004 structure
-********************************************************************/
-
-void init_srvsvc_NetShareInfo1004(struct srvsvc_NetShareInfo1004 *r,
-				  const char *comment)
-{
-	r->comment = comment;
-}
-
-/*******************************************************************
- inits a srvsvc_NetShareInfo1005 structure
-********************************************************************/
-
-void init_srvsvc_NetShareInfo1005(struct srvsvc_NetShareInfo1005 *r,
-				  uint32_t dfs_flags)
-{
-	r->dfs_flags = dfs_flags;
-}
-
-/*******************************************************************
- inits a srvsvc_NetShareInfo1006 structure
-********************************************************************/
-
-void init_srvsvc_NetShareInfo1006(struct srvsvc_NetShareInfo1006 *r,
-				  uint32_t max_users)
-{
-	r->max_users = max_users;
-}
-
-/*******************************************************************
- inits a srvsvc_NetShareInfo1007 structure
-********************************************************************/
-
-void init_srvsvc_NetShareInfo1007(struct srvsvc_NetShareInfo1007 *r,
-				  uint32_t flags,
-				  const char *alternate_directory_name)
-{
-	r->flags = flags;
-	r->alternate_directory_name = alternate_directory_name;
-}
-
-/*******************************************************************
- inits a srvsvc_NetRemoteTODInfo structure
- ********************************************************************/
-
-void init_srvsvc_NetRemoteTODInfo(struct srvsvc_NetRemoteTODInfo *r,
-				  uint32_t elapsed,
-				  uint32_t msecs,
-				  uint32_t hours,
-				  uint32_t mins,
-				  uint32_t secs,
-				  uint32_t hunds,
-				  int32_t ttimezone,
-				  uint32_t tinterval,
-				  uint32_t day,
-				  uint32_t month,
-				  uint32_t year,
-				  uint32_t weekday)
-{
-	r->elapsed = elapsed;
-	r->msecs = msecs;
-	r->hours = hours;
-	r->mins = mins;
-	r->secs = secs;
-	r->hunds = hunds;
-	r->timezone = ttimezone;
-	r->tinterval = tinterval;
-	r->day = day;
-	r->month = month;
-	r->year = year;
-	r->weekday = weekday;
-}
-
-/*******************************************************************
- inits a srvsvc_NetSessInfo0 structure
- ********************************************************************/
-
-void init_srvsvc_NetSessInfo0(struct srvsvc_NetSessInfo0 *r,
-			      const char *client)
-{
-	r->client = client;
-}
-
-/*******************************************************************
- inits a srvsvc_NetSessInfo1 structure
- ********************************************************************/
-
-void init_srvsvc_NetSessInfo1(struct srvsvc_NetSessInfo1 *r,
-			      const char *client,
-			      const char *user,
-			      uint32_t num_open,
-			      uint32_t _time,
-			      uint32_t idle_time,
-			      uint32_t user_flags)
-{
-	r->client = client;
-	r->user = user;
-	r->num_open = num_open;
-	r->time = _time;
-	r->idle_time = idle_time;
-	r->user_flags = user_flags;
-}
-
-/*******************************************************************
- inits a srvsvc_NetSessInfo2 structure
- ********************************************************************/
-
-void init_srvsvc_NetSessInfo2(struct srvsvc_NetSessInfo2 *r,
-			      const char *client,
-			      const char *user,
-			      uint32_t num_open,
-			      uint32_t _time,
-			      uint32_t idle_time,
-			      uint32_t user_flags,
-			      const char *client_type)
-{
-	r->client = client;
-	r->user = user;
-	r->num_open = num_open;
-	r->time = _time;
-	r->idle_time = idle_time;
-	r->user_flags = user_flags;
-	r->client_type = client_type;
-}
-
-/*******************************************************************
- inits a srvsvc_NetSessInfo10 structure
- ********************************************************************/
-
-void init_srvsvc_NetSessInfo10(struct srvsvc_NetSessInfo10 *r,
-			       const char *client,
-			       const char *user,
-			       uint32_t _time,
-			       uint32_t idle_time)
-{
-	r->client = client;
-	r->user = user;
-	r->time = _time;
-	r->idle_time = idle_time;
-}
-
-/*******************************************************************
- inits a srvsvc_NetSessInfo502 structure
- ********************************************************************/
-
-void init_srvsvc_NetSessInfo502(struct srvsvc_NetSessInfo502 *r,
-			       const char *client,
-			       const char *user,
-			       uint32_t num_open,
-			       uint32_t _time,
-			       uint32_t idle_time,
-			       uint32_t user_flags,
-			       const char *client_type,
-			       const char *transport)
-{
-	r->client = client;
-	r->user = user;
-	r->num_open = num_open;
-	r->time = _time;
-	r->idle_time = idle_time;
-	r->user_flags = user_flags;
-	r->client_type = client_type;
-	r->transport = transport;
-}
-
-/*******************************************************************
- inits a srvsvc_NetFileInfo2 structure
- ********************************************************************/
-
-void init_srvsvc_NetFileInfo2(struct srvsvc_NetFileInfo2 *r,
-			      uint32_t fid)
-{
-	r->fid = fid;
-}
-
-/*******************************************************************
- inits a srvsvc_NetFileInfo3 structure
- ********************************************************************/
-
-void init_srvsvc_NetFileInfo3(struct srvsvc_NetFileInfo3 *r,
-			      uint32_t fid,
-			      uint32_t permissions,
-			      uint32_t num_locks,
-			      const char *path,
-			      const char *user)
-{
-	r->fid = fid;
-	r->permissions = permissions;
-	r->num_locks = num_locks;
-	r->path = path;
-	r->user = user;
-}
-
-/*******************************************************************
- inits a srvsvc_NetConnInfo0 structure
- ********************************************************************/
-
-void init_srvsvc_NetConnInfo0(struct srvsvc_NetConnInfo0 *r,
-			      uint32_t conn_id)
-{
-	r->conn_id = conn_id;
-}
-
-/*******************************************************************
- inits a srvsvc_NetConnInfo1 structure
- ********************************************************************/
-
-void init_srvsvc_NetConnInfo1(struct srvsvc_NetConnInfo1 *r,
-			      uint32_t conn_id,
-			      uint32_t conn_type,
-			      uint32_t num_open,
-			      uint32_t num_users,
-			      uint32_t conn_time,
-			      const char *user,
-			      const char *share)
-{
-	r->conn_id = conn_id;
-	r->conn_type = conn_type;
-	r->num_open = num_open;
-	r->num_users = num_users;
-	r->conn_time = conn_time;
-	r->user = user;
-	r->share = share;
-}

Modified: branches/samba/upstream/source/rpc_client/ndr.c
===================================================================
--- branches/samba/upstream/source/rpc_client/ndr.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_client/ndr.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,38 +16,33 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
 
-NTSTATUS cli_do_rpc_ndr(struct rpc_pipe_client *cli,
-			TALLOC_CTX *mem_ctx, int p_idx,
-			const struct ndr_interface_table *table,
-			uint32 opnum, void *r)
+NTSTATUS cli_do_rpc_ndr(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, 
+			int p_idx, int opnum, void *data, 
+			ndr_pull_flags_fn_t pull_fn, ndr_push_flags_fn_t push_fn)
 {
 	prs_struct q_ps, r_ps;
-	const struct ndr_interface_call *call;
 	struct ndr_pull *pull;
 	DATA_BLOB blob;
 	struct ndr_push *push;
 	NTSTATUS status;
-	enum ndr_err_code ndr_err;
 
 	SMB_ASSERT(cli->pipe_idx == p_idx);
-	SMB_ASSERT(table->num_calls > opnum);
 
-	call = &table->calls[opnum];
-
 	push = ndr_push_init_ctx(mem_ctx);
 	if (!push) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	ndr_err = call->ndr_push(push, NDR_IN, r);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		return ndr_map_error2ntstatus(ndr_err);
+	status = push_fn(push, NDR_IN, data);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
 	}
 
 	blob = ndr_push_blob(push);
@@ -58,7 +53,10 @@
 
 	talloc_free(push);
 
-	prs_init_empty( &r_ps, mem_ctx, UNMARSHALL );
+	if (!prs_init( &r_ps, 0, mem_ctx, UNMARSHALL )) {
+		prs_mem_free( &q_ps );
+		return NT_STATUS_NO_MEMORY;
+	}
 	
 	status = rpc_api_pipe_req(cli, opnum, &q_ps, &r_ps); 
 
@@ -83,11 +81,11 @@
 
 	/* have the ndr parser alloc memory for us */
 	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
-	ndr_err = call->ndr_pull(pull, NDR_OUT, r);
+	status = pull_fn(pull, NDR_OUT, data);
 	talloc_free(pull);
 
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		return ndr_map_error2ntstatus(ndr_err);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
 	}
 
 	return NT_STATUS_OK;

Modified: branches/samba/upstream/source/rpc_parse/parse_buffer.c
===================================================================
--- branches/samba/upstream/source/rpc_parse/parse_buffer.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_parse/parse_buffer.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,7 +10,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -19,7 +19,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
  
 #include "includes.h"
@@ -34,17 +35,15 @@
 {
 	buffer->size = size;
 	buffer->string_at_end = size;
-	if (prs_init(&buffer->prs, size, ctx, MARSHALL))
-		buffer->struct_start = prs_offset(&buffer->prs);
-	else
-		buffer->struct_start = 0;
+	prs_init(&buffer->prs, size, ctx, MARSHALL);
+	buffer->struct_start = prs_offset(&buffer->prs);
 }
 
 /*******************************************************************
  Read/write a RPC_BUFFER struct.
 ********************************************************************/  
 
-bool prs_rpcbuffer(const char *desc, prs_struct *ps, int depth, RPC_BUFFER *buffer)
+BOOL prs_rpcbuffer(const char *desc, prs_struct *ps, int depth, RPC_BUFFER *buffer)
 {
 	prs_debug(ps, depth, desc, "prs_rpcbuffer");
 	depth++;
@@ -79,7 +78,7 @@
 		return True;
 	}
 	else {
-		bool ret = False;
+		BOOL ret = False;
 
 		if (!prs_uint32("size", ps, depth, &buffer->size))
 			goto out;
@@ -101,7 +100,7 @@
  Read/write an RPC_BUFFER* struct.(allocate memory if unmarshalling)
 ********************************************************************/  
 
-bool prs_rpcbuffer_p(const char *desc, prs_struct *ps, int depth, RPC_BUFFER **buffer)
+BOOL prs_rpcbuffer_p(const char *desc, prs_struct *ps, int depth, RPC_BUFFER **buffer)
 {
 	uint32 data_p;
 
@@ -134,7 +133,7 @@
  Allocate more memory for a RPC_BUFFER.
 ****************************************************************************/
 
-bool rpcbuf_alloc_size(RPC_BUFFER *buffer, uint32 buffer_size)
+BOOL rpcbuf_alloc_size(RPC_BUFFER *buffer, uint32 buffer_size)
 {
 	prs_struct *ps;
 	uint32 extra_space;
@@ -229,7 +228,7 @@
  *
  ********************************************************************/
 
-bool smb_io_relstr(const char *desc, RPC_BUFFER *buffer, int depth, UNISTR *string)
+BOOL smb_io_relstr(const char *desc, RPC_BUFFER *buffer, int depth, UNISTR *string)
 {
 	prs_struct *ps=&buffer->prs;
 	
@@ -291,7 +290,7 @@
  * used by 2 RPC structs
  ********************************************************************/
 
-bool smb_io_relarraystr(const char *desc, RPC_BUFFER *buffer, int depth, uint16 **string)
+BOOL smb_io_relarraystr(const char *desc, RPC_BUFFER *buffer, int depth, uint16 **string)
 {
 	UNISTR chaine;
 	
@@ -374,10 +373,8 @@
 			return False;
 	
 		do {
-			if (!smb_io_unistr(desc, &chaine, ps, depth)) {
-				SAFE_FREE(chaine2);
+			if (!smb_io_unistr(desc, &chaine, ps, depth))
 				return False;
-			}
 			
 			l_chaine=str_len_uni(&chaine);
 			
@@ -404,10 +401,10 @@
 		{
 			chaine2[l_chaine2] = '\0';
 			*string=(uint16 *)TALLOC_MEMDUP(prs_get_mem_context(ps),chaine2,realloc_size);
-			SAFE_FREE(chaine2);
 			if (!*string) {
 				return False;
 			}
+			SAFE_FREE(chaine2);
 		}
 
 		if(!prs_set_offset(ps, old_offset))
@@ -420,7 +417,7 @@
  Parse a DEVMODE structure and its relative pointer.
 ********************************************************************/
 
-bool smb_io_relsecdesc(const char *desc, RPC_BUFFER *buffer, int depth, SEC_DESC **secdesc)
+BOOL smb_io_relsecdesc(const char *desc, RPC_BUFFER *buffer, int depth, SEC_DESC **secdesc)
 {
 	prs_struct *ps= &buffer->prs;
 
@@ -439,7 +436,7 @@
 		}
 		
 		if (*secdesc != NULL) {
-			buffer->string_at_end -= ndr_size_security_descriptor(*secdesc, 0);
+			buffer->string_at_end -= sec_desc_size(*secdesc);
 
 			if(!prs_set_offset(ps, buffer->string_at_end))
 				return False;

Copied: branches/samba/upstream/source/rpc_parse/parse_dfs.c (from rev 1928, branches/samba/upstream/source/rpc_parse/parse_dfs.c)
===================================================================
--- branches/samba/upstream/source/rpc_parse/parse_dfs.c	                        (rev 0)
+++ branches/samba/upstream/source/rpc_parse/parse_dfs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,2705 @@
+/*
+ * Unix SMB/CIFS implementation.
+ * parser auto-generated by pidl. DO NOT MODIFY!
+ */
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_RPC_PARSE
+
+/* netdfs structures */
+BOOL init_netdfs_dfs_Info0(NETDFS_DFS_INFO0 *v)
+{
+	DEBUG(5,("init_netdfs_dfs_Info0\n"));
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_Info0_p(const char *desc, NETDFS_DFS_INFO0 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_Info0_p");
+	depth++;
+	return True;
+}
+
+BOOL netdfs_io_dfs_Info0_d(const char *desc, NETDFS_DFS_INFO0 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_Info0_d");
+	depth++;
+	return True;
+}
+
+BOOL init_netdfs_dfs_Info1(NETDFS_DFS_INFO1 *v, const char *path)
+{
+	DEBUG(5,("init_netdfs_dfs_Info1\n"));
+	
+	if (path) {
+		v->ptr0_path = 1;
+		init_unistr2(&v->path, path, UNI_FLAGS_NONE);
+	} else {
+		v->ptr0_path = 0;
+	}
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_Info1_p(const char *desc, NETDFS_DFS_INFO1 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_Info1_p");
+	depth++;
+	if (!prs_uint32("ptr0_path", ps, depth, &v->ptr0_path))
+		return False;
+	
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_Info1_d(const char *desc, NETDFS_DFS_INFO1 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_Info1_d");
+	depth++;
+	if (v->ptr0_path) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!smb_io_unistr2("path", &v->path, 1, ps, depth))
+			return False;
+	}
+	
+	return True;
+}
+
+BOOL init_netdfs_dfs_Info2(NETDFS_DFS_INFO2 *v, const char *path, const char *comment, uint32 state, uint32 num_stores)
+{
+	DEBUG(5,("init_netdfs_dfs_Info2\n"));
+	
+	if (path) {
+		v->ptr0_path = 1;
+		init_unistr2(&v->path, path, UNI_FLAGS_NONE);
+	} else {
+		v->ptr0_path = 0;
+	}
+	
+	if (comment) {
+		v->ptr0_comment = 1;
+		init_unistr2(&v->comment, comment, UNI_FLAGS_NONE);
+	} else {
+		v->ptr0_comment = 0;
+	}
+	
+	v->state = state;
+	
+	v->num_stores = num_stores;
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_Info2_p(const char *desc, NETDFS_DFS_INFO2 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_Info2_p");
+	depth++;
+	if (!prs_uint32("ptr0_path", ps, depth, &v->ptr0_path))
+		return False;
+	
+	
+	if (!prs_uint32("ptr0_comment", ps, depth, &v->ptr0_comment))
+		return False;
+	
+	
+	if (!prs_uint32("state", ps, depth, &v->state))
+		return False;
+	
+	if (!prs_uint32("num_stores", ps, depth, &v->num_stores))
+		return False;
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_Info2_d(const char *desc, NETDFS_DFS_INFO2 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_Info2_d");
+	depth++;
+	if (v->ptr0_path) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!smb_io_unistr2("path", &v->path, 1, ps, depth))
+			return False;
+	}
+	
+	if (v->ptr0_comment) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!smb_io_unistr2("comment", &v->comment, 1, ps, depth))
+			return False;
+	}
+	
+	
+	
+	return True;
+}
+
+BOOL init_netdfs_dfs_StorageInfo(NETDFS_DFS_STORAGEINFO *v, uint32 state, const char *server, const char *share)
+{
+	DEBUG(5,("init_netdfs_dfs_StorageInfo\n"));
+	
+	v->state = state;
+	
+	if (server) {
+		v->ptr0_server = 1;
+		init_unistr2(&v->server, server, UNI_FLAGS_NONE);
+	} else {
+		v->ptr0_server = 0;
+	}
+	
+	if (share) {
+		v->ptr0_share = 1;
+		init_unistr2(&v->share, share, UNI_FLAGS_NONE);
+	} else {
+		v->ptr0_share = 0;
+	}
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_StorageInfo_p(const char *desc, NETDFS_DFS_STORAGEINFO *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_StorageInfo_p");
+	depth++;
+	if (!prs_uint32("state", ps, depth, &v->state))
+		return False;
+	
+	if (!prs_uint32("ptr0_server", ps, depth, &v->ptr0_server))
+		return False;
+	
+	
+	if (!prs_uint32("ptr0_share", ps, depth, &v->ptr0_share))
+		return False;
+	
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_StorageInfo_d(const char *desc, NETDFS_DFS_STORAGEINFO *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_StorageInfo_d");
+	depth++;
+	
+	if (v->ptr0_server) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!smb_io_unistr2("server", &v->server, 1, ps, depth))
+			return False;
+	}
+	
+	if (v->ptr0_share) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!smb_io_unistr2("share", &v->share, 1, ps, depth))
+			return False;
+	}
+	
+	return True;
+}
+
+BOOL init_netdfs_dfs_Info3(NETDFS_DFS_INFO3 *v, const char *path, const char *comment, uint32 state, uint32 num_stores, NETDFS_DFS_STORAGEINFO **stores)
+{
+	DEBUG(5,("init_netdfs_dfs_Info3\n"));
+	
+	if (path) {
+		v->ptr0_path = 1;
+		init_unistr2(&v->path, path, UNI_FLAGS_NONE);
+	} else {
+		v->ptr0_path = 0;
+	}
+	
+	if (comment) {
+		v->ptr0_comment = 1;
+		init_unistr2(&v->comment, comment, UNI_FLAGS_NONE);
+	} else {
+		v->ptr0_comment = 0;
+	}
+	
+	v->state = state;
+	
+	v->num_stores = num_stores;
+	
+	if (stores) {
+		v->ptr0_stores = 1;
+		v->stores = *stores;
+	} else {
+		v->ptr0_stores = 0;
+	}
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_Info3_p(const char *desc, NETDFS_DFS_INFO3 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_Info3_p");
+	depth++;
+	if (!prs_uint32("ptr0_path", ps, depth, &v->ptr0_path))
+		return False;
+	
+	
+	if (!prs_uint32("ptr0_comment", ps, depth, &v->ptr0_comment))
+		return False;
+	
+	
+	if (!prs_uint32("state", ps, depth, &v->state))
+		return False;
+	
+	if (!prs_uint32("num_stores", ps, depth, &v->num_stores))
+		return False;
+	
+	if (!prs_uint32("ptr0_stores", ps, depth, &v->ptr0_stores))
+		return False;
+	
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_Info3_d(const char *desc, NETDFS_DFS_INFO3 *v, prs_struct *ps, int depth)
+{
+	uint32 i_stores_1;
+	
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_Info3_d");
+	depth++;
+	if (v->ptr0_path) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!smb_io_unistr2("path", &v->path, 1, ps, depth))
+			return False;
+	}
+	
+	if (v->ptr0_comment) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!smb_io_unistr2("comment", &v->comment, 1, ps, depth))
+			return False;
+	}
+	
+	
+	
+	if (v->ptr0_stores) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!prs_uint32("size_stores", ps, depth, &v->size_stores))
+			return False;
+		
+		if (UNMARSHALLING(ps)) {
+			if (v->num_stores) {
+				v->stores = PRS_ALLOC_MEM(ps,NETDFS_DFS_STORAGEINFO,v->num_stores);
+				if (!v->stores) {
+					return False;
+				}
+			} else {
+				v->stores = NULL;
+			}
+		}
+		for (i_stores_1=0; i_stores_1<v->num_stores;i_stores_1++) {
+			if (!netdfs_io_dfs_StorageInfo_p("stores", &v->stores[i_stores_1], ps, depth))
+				return False;
+		}
+		for (i_stores_1=0; i_stores_1<v->num_stores;i_stores_1++) {
+			if (!netdfs_io_dfs_StorageInfo_d("stores", &v->stores[i_stores_1], ps, depth))
+				return False;
+		}
+	}
+	
+	return True;
+}
+
+BOOL init_netdfs_dfs_Info4(NETDFS_DFS_INFO4 *v, const char *path, const char *comment, uint32 state, uint32 timeout, struct GUID guid, uint32 num_stores, NETDFS_DFS_STORAGEINFO **stores)
+{
+	DEBUG(5,("init_netdfs_dfs_Info4\n"));
+	
+	if (path) {
+		v->ptr0_path = 1;
+		init_unistr2(&v->path, path, UNI_FLAGS_NONE);
+	} else {
+		v->ptr0_path = 0;
+	}
+	
+	if (comment) {
+		v->ptr0_comment = 1;
+		init_unistr2(&v->comment, comment, UNI_FLAGS_NONE);
+	} else {
+		v->ptr0_comment = 0;
+	}
+	
+	v->state = state;
+	
+	v->timeout = timeout;
+	
+	
+	
+	v->num_stores = num_stores;
+	
+	if (stores) {
+		v->ptr0_stores = 1;
+		v->stores = *stores;
+	} else {
+		v->ptr0_stores = 0;
+	}
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_Info4_p(const char *desc, NETDFS_DFS_INFO4 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_Info4_p");
+	depth++;
+	if (!prs_uint32("ptr0_path", ps, depth, &v->ptr0_path))
+		return False;
+	
+	
+	if (!prs_uint32("ptr0_comment", ps, depth, &v->ptr0_comment))
+		return False;
+	
+	
+	if (!prs_uint32("state", ps, depth, &v->state))
+		return False;
+	
+	if (!prs_uint32("timeout", ps, depth, &v->timeout))
+		return False;
+	
+	if (!smb_io_uuid("guid", &v->guid, ps, depth))
+		return False;
+	
+	if (!prs_uint32("num_stores", ps, depth, &v->num_stores))
+		return False;
+	
+	if (!prs_uint32("ptr0_stores", ps, depth, &v->ptr0_stores))
+		return False;
+	
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_Info4_d(const char *desc, NETDFS_DFS_INFO4 *v, prs_struct *ps, int depth)
+{
+	uint32 i_stores_1;
+	
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_Info4_d");
+	depth++;
+	if (v->ptr0_path) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!smb_io_unistr2("path", &v->path, 1, ps, depth))
+			return False;
+	}
+	
+	if (v->ptr0_comment) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!smb_io_unistr2("comment", &v->comment, 1, ps, depth))
+			return False;
+	}
+	
+	
+	
+	
+	
+	if (v->ptr0_stores) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!prs_uint32("size_stores", ps, depth, &v->size_stores))
+			return False;
+		
+		if (UNMARSHALLING(ps)) {
+			if (v->num_stores) {
+				v->stores = PRS_ALLOC_MEM(ps,NETDFS_DFS_STORAGEINFO,v->num_stores);
+				if (!v->stores) {
+					return False;
+				}
+			} else {
+				v->stores = NULL;
+			}
+		}
+		for (i_stores_1=0; i_stores_1<v->num_stores;i_stores_1++) {
+			if (!netdfs_io_dfs_StorageInfo_p("stores", &v->stores[i_stores_1], ps, depth))
+				return False;
+		}
+		for (i_stores_1=0; i_stores_1<v->num_stores;i_stores_1++) {
+			if (!netdfs_io_dfs_StorageInfo_d("stores", &v->stores[i_stores_1], ps, depth))
+				return False;
+		}
+	}
+	
+	return True;
+}
+
+BOOL init_netdfs_dfs_Info100(NETDFS_DFS_INFO100 *v, const char *comment)
+{
+	DEBUG(5,("init_netdfs_dfs_Info100\n"));
+	
+	if (comment) {
+		v->ptr0_comment = 1;
+		init_unistr2(&v->comment, comment, UNI_FLAGS_NONE);
+	} else {
+		v->ptr0_comment = 0;
+	}
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_Info100_p(const char *desc, NETDFS_DFS_INFO100 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_Info100_p");
+	depth++;
+	if (!prs_uint32("ptr0_comment", ps, depth, &v->ptr0_comment))
+		return False;
+	
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_Info100_d(const char *desc, NETDFS_DFS_INFO100 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_Info100_d");
+	depth++;
+	if (v->ptr0_comment) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!smb_io_unistr2("comment", &v->comment, 1, ps, depth))
+			return False;
+	}
+	
+	return True;
+}
+
+BOOL init_netdfs_dfs_Info101(NETDFS_DFS_INFO101 *v, uint32 state)
+{
+	DEBUG(5,("init_netdfs_dfs_Info101\n"));
+	
+	v->state = state;
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_Info101_p(const char *desc, NETDFS_DFS_INFO101 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_Info101_p");
+	depth++;
+	if (!prs_uint32("state", ps, depth, &v->state))
+		return False;
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_Info101_d(const char *desc, NETDFS_DFS_INFO101 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_Info101_d");
+	depth++;
+	
+	return True;
+}
+
+BOOL init_netdfs_dfs_Info102(NETDFS_DFS_INFO102 *v, uint32 timeout)
+{
+	DEBUG(5,("init_netdfs_dfs_Info102\n"));
+	
+	v->timeout = timeout;
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_Info102_p(const char *desc, NETDFS_DFS_INFO102 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_Info102_p");
+	depth++;
+	if (!prs_uint32("timeout", ps, depth, &v->timeout))
+		return False;
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_Info102_d(const char *desc, NETDFS_DFS_INFO102 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_Info102_d");
+	depth++;
+	
+	return True;
+}
+
+BOOL init_netdfs_dfs_Info200(NETDFS_DFS_INFO200 *v, const char *dom_root)
+{
+	DEBUG(5,("init_netdfs_dfs_Info200\n"));
+	
+	if (dom_root) {
+		v->ptr0_dom_root = 1;
+		init_unistr2(&v->dom_root, dom_root, UNI_FLAGS_NONE);
+	} else {
+		v->ptr0_dom_root = 0;
+	}
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_Info200_p(const char *desc, NETDFS_DFS_INFO200 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_Info200_p");
+	depth++;
+	if (!prs_uint32("ptr0_dom_root", ps, depth, &v->ptr0_dom_root))
+		return False;
+	
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_Info200_d(const char *desc, NETDFS_DFS_INFO200 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_Info200_d");
+	depth++;
+	if (v->ptr0_dom_root) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!smb_io_unistr2("dom_root", &v->dom_root, 1, ps, depth))
+			return False;
+	}
+	
+	return True;
+}
+
+BOOL init_netdfs_dfs_Info300(NETDFS_DFS_INFO300 *v, uint32 flags, const char *dom_root)
+{
+	DEBUG(5,("init_netdfs_dfs_Info300\n"));
+	
+	v->flags = flags;
+	
+	if (dom_root) {
+		v->ptr0_dom_root = 1;
+		init_unistr2(&v->dom_root, dom_root, UNI_FLAGS_NONE);
+	} else {
+		v->ptr0_dom_root = 0;
+	}
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_Info300_p(const char *desc, NETDFS_DFS_INFO300 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_Info300_p");
+	depth++;
+	if (!prs_uint32("flags", ps, depth, &v->flags))
+		return False;
+	
+	if (!prs_uint32("ptr0_dom_root", ps, depth, &v->ptr0_dom_root))
+		return False;
+	
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_Info300_d(const char *desc, NETDFS_DFS_INFO300 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_Info300_d");
+	depth++;
+	
+	if (v->ptr0_dom_root) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!smb_io_unistr2("dom_root", &v->dom_root, 1, ps, depth))
+			return False;
+	}
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_Info_p(const char *desc, NETDFS_DFS_INFO_CTR* v, prs_struct *ps, int depth)
+{
+	if (!prs_uint32("switch_value", ps, depth, &v->switch_value))
+		return False;
+	
+	switch (v->switch_value) {
+		case 0:
+			depth++;
+			if (!prs_uint32("ptr0_info0", ps, depth, &v->ptr0))
+				return False;
+			
+			depth--;
+			break;
+		
+		case 1:
+			depth++;
+			if (!prs_uint32("ptr0_info1", ps, depth, &v->ptr0))
+				return False;
+			
+			depth--;
+			break;
+		
+		case 2:
+			depth++;
+			if (!prs_uint32("ptr0_info2", ps, depth, &v->ptr0))
+				return False;
+			
+			depth--;
+			break;
+		
+		case 3:
+			depth++;
+			if (!prs_uint32("ptr0_info3", ps, depth, &v->ptr0))
+				return False;
+			
+			depth--;
+			break;
+		
+		case 4:
+			depth++;
+			if (!prs_uint32("ptr0_info4", ps, depth, &v->ptr0))
+				return False;
+			
+			depth--;
+			break;
+		
+		case 100:
+			depth++;
+			if (!prs_uint32("ptr0_info100", ps, depth, &v->ptr0))
+				return False;
+			
+			depth--;
+			break;
+		
+		case 101:
+			depth++;
+			if (!prs_uint32("ptr0_info101", ps, depth, &v->ptr0))
+				return False;
+			
+			depth--;
+			break;
+		
+		case 102:
+			depth++;
+			if (!prs_uint32("ptr0_info102", ps, depth, &v->ptr0))
+				return False;
+			
+			depth--;
+			break;
+		
+		default:
+			return False;
+		
+	}
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_Info_d(const char *desc, NETDFS_DFS_INFO_CTR* v, prs_struct *ps, int depth)
+{
+	switch (v->switch_value) {
+		case 0:
+			depth++;
+			if (v->ptr0) {
+				if (!prs_align_custom(ps, 1))
+					return False;
+				
+				if (!netdfs_io_dfs_Info0_p("info0", &v->u.info0, ps, depth))
+					return False;
+				if (!netdfs_io_dfs_Info0_d("info0", &v->u.info0, ps, depth))
+					return False;
+			}
+			depth--;
+			break;
+		
+		case 1:
+			depth++;
+			if (v->ptr0) {
+				if (!prs_align_custom(ps, 4))
+					return False;
+				
+				if (!netdfs_io_dfs_Info1_p("info1", &v->u.info1, ps, depth))
+					return False;
+				if (!netdfs_io_dfs_Info1_d("info1", &v->u.info1, ps, depth))
+					return False;
+			}
+			depth--;
+			break;
+		
+		case 2:
+			depth++;
+			if (v->ptr0) {
+				if (!prs_align_custom(ps, 4))
+					return False;
+				
+				if (!netdfs_io_dfs_Info2_p("info2", &v->u.info2, ps, depth))
+					return False;
+				if (!netdfs_io_dfs_Info2_d("info2", &v->u.info2, ps, depth))
+					return False;
+			}
+			depth--;
+			break;
+		
+		case 3:
+			depth++;
+			if (v->ptr0) {
+				if (!prs_align_custom(ps, 4))
+					return False;
+				
+				if (!netdfs_io_dfs_Info3_p("info3", &v->u.info3, ps, depth))
+					return False;
+				if (!netdfs_io_dfs_Info3_d("info3", &v->u.info3, ps, depth))
+					return False;
+			}
+			depth--;
+			break;
+		
+		case 4:
+			depth++;
+			if (v->ptr0) {
+				if (!prs_align_custom(ps, 4))
+					return False;
+				
+				if (!netdfs_io_dfs_Info4_p("info4", &v->u.info4, ps, depth))
+					return False;
+				if (!netdfs_io_dfs_Info4_d("info4", &v->u.info4, ps, depth))
+					return False;
+			}
+			depth--;
+			break;
+		
+		case 100:
+			depth++;
+			if (v->ptr0) {
+				if (!prs_align_custom(ps, 4))
+					return False;
+				
+				if (!netdfs_io_dfs_Info100_p("info100", &v->u.info100, ps, depth))
+					return False;
+				if (!netdfs_io_dfs_Info100_d("info100", &v->u.info100, ps, depth))
+					return False;
+			}
+			depth--;
+			break;
+		
+		case 101:
+			depth++;
+			if (v->ptr0) {
+				if (!prs_align_custom(ps, 4))
+					return False;
+				
+				if (!netdfs_io_dfs_Info101_p("info101", &v->u.info101, ps, depth))
+					return False;
+				if (!netdfs_io_dfs_Info101_d("info101", &v->u.info101, ps, depth))
+					return False;
+			}
+			depth--;
+			break;
+		
+		case 102:
+			depth++;
+			if (v->ptr0) {
+				if (!prs_align_custom(ps, 4))
+					return False;
+				
+				if (!netdfs_io_dfs_Info102_p("info102", &v->u.info102, ps, depth))
+					return False;
+				if (!netdfs_io_dfs_Info102_d("info102", &v->u.info102, ps, depth))
+					return False;
+			}
+			depth--;
+			break;
+		
+	}
+	
+	return True;
+}
+BOOL init_netdfs_dfs_EnumArray1(NETDFS_DFS_ENUMARRAY1 *v, uint32 count, NETDFS_DFS_INFO1 **s)
+{
+	DEBUG(5,("init_netdfs_dfs_EnumArray1\n"));
+	
+	v->count = count;
+	
+	if (s) {
+		v->ptr0_s = 1;
+		v->s = *s;
+	} else {
+		v->ptr0_s = 0;
+	}
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_EnumArray1_p(const char *desc, NETDFS_DFS_ENUMARRAY1 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_EnumArray1_p");
+	depth++;
+	if (!prs_uint32("count", ps, depth, &v->count))
+		return False;
+	
+	if (!prs_uint32("ptr0_s", ps, depth, &v->ptr0_s))
+		return False;
+	
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_EnumArray1_d(const char *desc, NETDFS_DFS_ENUMARRAY1 *v, prs_struct *ps, int depth)
+{
+	uint32 i_s_1;
+	
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_EnumArray1_d");
+	depth++;
+	
+	if (v->ptr0_s) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!prs_uint32("size_s", ps, depth, &v->size_s))
+			return False;
+		
+		if (UNMARSHALLING(ps)) {
+			if (v->count) {
+				v->s = PRS_ALLOC_MEM(ps,NETDFS_DFS_INFO1,v->count);
+				if (!v->s) {
+					return False;
+				}
+			} else {
+				v->s = NULL;
+			}
+		}
+		for (i_s_1=0; i_s_1<v->count;i_s_1++) {
+			if (!netdfs_io_dfs_Info1_p("s", &v->s[i_s_1], ps, depth))
+				return False;
+		}
+		for (i_s_1=0; i_s_1<v->count;i_s_1++) {
+			if (!netdfs_io_dfs_Info1_d("s", &v->s[i_s_1], ps, depth))
+				return False;
+		}
+	}
+	
+	return True;
+}
+
+BOOL init_netdfs_dfs_EnumArray2(NETDFS_DFS_ENUMARRAY2 *v, uint32 count, NETDFS_DFS_INFO2 **s)
+{
+	DEBUG(5,("init_netdfs_dfs_EnumArray2\n"));
+	
+	v->count = count;
+	
+	if (s) {
+		v->ptr0_s = 1;
+		v->s = *s;
+	} else {
+		v->ptr0_s = 0;
+	}
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_EnumArray2_p(const char *desc, NETDFS_DFS_ENUMARRAY2 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_EnumArray2_p");
+	depth++;
+	if (!prs_uint32("count", ps, depth, &v->count))
+		return False;
+	
+	if (!prs_uint32("ptr0_s", ps, depth, &v->ptr0_s))
+		return False;
+	
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_EnumArray2_d(const char *desc, NETDFS_DFS_ENUMARRAY2 *v, prs_struct *ps, int depth)
+{
+	uint32 i_s_1;
+	
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_EnumArray2_d");
+	depth++;
+	
+	if (v->ptr0_s) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!prs_uint32("size_s", ps, depth, &v->size_s))
+			return False;
+		
+		if (UNMARSHALLING(ps)) {
+			if (v->count) {
+				v->s = PRS_ALLOC_MEM(ps,NETDFS_DFS_INFO2,v->count);
+				if (!v->s) {
+					return False;
+				}
+			} else {
+				v->s = NULL;
+			}
+		}
+		for (i_s_1=0; i_s_1<v->count;i_s_1++) {
+			if (!netdfs_io_dfs_Info2_p("s", &v->s[i_s_1], ps, depth))
+				return False;
+		}
+		for (i_s_1=0; i_s_1<v->count;i_s_1++) {
+			if (!netdfs_io_dfs_Info2_d("s", &v->s[i_s_1], ps, depth))
+				return False;
+		}
+	}
+	
+	return True;
+}
+
+BOOL init_netdfs_dfs_EnumArray3(NETDFS_DFS_ENUMARRAY3 *v, uint32 count, NETDFS_DFS_INFO3 **s)
+{
+	DEBUG(5,("init_netdfs_dfs_EnumArray3\n"));
+	
+	v->count = count;
+	
+	if (s) {
+		v->ptr0_s = 1;
+		v->s = *s;
+	} else {
+		v->ptr0_s = 0;
+	}
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_EnumArray3_p(const char *desc, NETDFS_DFS_ENUMARRAY3 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_EnumArray3_p");
+	depth++;
+	if (!prs_uint32("count", ps, depth, &v->count))
+		return False;
+	
+	if (!prs_uint32("ptr0_s", ps, depth, &v->ptr0_s))
+		return False;
+	
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_EnumArray3_d(const char *desc, NETDFS_DFS_ENUMARRAY3 *v, prs_struct *ps, int depth)
+{
+	uint32 i_s_1;
+	
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_EnumArray3_d");
+	depth++;
+	
+	if (v->ptr0_s) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!prs_uint32("size_s", ps, depth, &v->size_s))
+			return False;
+		
+		if (UNMARSHALLING(ps)) {
+			if (v->count) {
+				v->s = PRS_ALLOC_MEM(ps,NETDFS_DFS_INFO3,v->count);
+				if (!v->s) {
+					return False;
+				}
+			} else {
+				v->s = NULL;
+			}
+		}
+		for (i_s_1=0; i_s_1<v->count;i_s_1++) {
+			if (!netdfs_io_dfs_Info3_p("s", &v->s[i_s_1], ps, depth))
+				return False;
+		}
+		for (i_s_1=0; i_s_1<v->count;i_s_1++) {
+			if (!netdfs_io_dfs_Info3_d("s", &v->s[i_s_1], ps, depth))
+				return False;
+		}
+	}
+	
+	return True;
+}
+
+BOOL init_netdfs_dfs_EnumArray4(NETDFS_DFS_ENUMARRAY4 *v, uint32 count, NETDFS_DFS_INFO4 **s)
+{
+	DEBUG(5,("init_netdfs_dfs_EnumArray4\n"));
+	
+	v->count = count;
+	
+	if (s) {
+		v->ptr0_s = 1;
+		v->s = *s;
+	} else {
+		v->ptr0_s = 0;
+	}
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_EnumArray4_p(const char *desc, NETDFS_DFS_ENUMARRAY4 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_EnumArray4_p");
+	depth++;
+	if (!prs_uint32("count", ps, depth, &v->count))
+		return False;
+	
+	if (!prs_uint32("ptr0_s", ps, depth, &v->ptr0_s))
+		return False;
+	
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_EnumArray4_d(const char *desc, NETDFS_DFS_ENUMARRAY4 *v, prs_struct *ps, int depth)
+{
+	uint32 i_s_1;
+	
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_EnumArray4_d");
+	depth++;
+	
+	if (v->ptr0_s) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!prs_uint32("size_s", ps, depth, &v->size_s))
+			return False;
+		
+		if (UNMARSHALLING(ps)) {
+			if (v->count) {
+				v->s = PRS_ALLOC_MEM(ps,NETDFS_DFS_INFO4,v->count);
+				if (!v->s) {
+					return False;
+				}
+			} else {
+				v->s = NULL;
+			}
+		}
+		for (i_s_1=0; i_s_1<v->count;i_s_1++) {
+			if (!netdfs_io_dfs_Info4_p("s", &v->s[i_s_1], ps, depth))
+				return False;
+		}
+		for (i_s_1=0; i_s_1<v->count;i_s_1++) {
+			if (!netdfs_io_dfs_Info4_d("s", &v->s[i_s_1], ps, depth))
+				return False;
+		}
+	}
+	
+	return True;
+}
+
+BOOL init_netdfs_dfs_EnumArray200(NETDFS_DFS_ENUMARRAY200 *v, uint32 count, NETDFS_DFS_INFO200 **s)
+{
+	DEBUG(5,("init_netdfs_dfs_EnumArray200\n"));
+	
+	v->count = count;
+	
+	if (s) {
+		v->ptr0_s = 1;
+		v->s = *s;
+	} else {
+		v->ptr0_s = 0;
+	}
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_EnumArray200_p(const char *desc, NETDFS_DFS_ENUMARRAY200 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_EnumArray200_p");
+	depth++;
+	if (!prs_uint32("count", ps, depth, &v->count))
+		return False;
+	
+	if (!prs_uint32("ptr0_s", ps, depth, &v->ptr0_s))
+		return False;
+	
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_EnumArray200_d(const char *desc, NETDFS_DFS_ENUMARRAY200 *v, prs_struct *ps, int depth)
+{
+	uint32 i_s_1;
+	
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_EnumArray200_d");
+	depth++;
+	
+	if (v->ptr0_s) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!prs_uint32("size_s", ps, depth, &v->size_s))
+			return False;
+		
+		if (UNMARSHALLING(ps)) {
+			if (v->count) {
+				v->s = PRS_ALLOC_MEM(ps,NETDFS_DFS_INFO200,v->count);
+				if (!v->s) {
+					return False;
+				}
+			} else {
+				v->s = NULL;
+			}
+		}
+		for (i_s_1=0; i_s_1<v->count;i_s_1++) {
+			if (!netdfs_io_dfs_Info200_p("s", &v->s[i_s_1], ps, depth))
+				return False;
+		}
+		for (i_s_1=0; i_s_1<v->count;i_s_1++) {
+			if (!netdfs_io_dfs_Info200_d("s", &v->s[i_s_1], ps, depth))
+				return False;
+		}
+	}
+	
+	return True;
+}
+
+BOOL init_netdfs_dfs_EnumArray300(NETDFS_DFS_ENUMARRAY300 *v, uint32 count, NETDFS_DFS_INFO300 **s)
+{
+	DEBUG(5,("init_netdfs_dfs_EnumArray300\n"));
+	
+	v->count = count;
+	
+	if (s) {
+		v->ptr0_s = 1;
+		v->s = *s;
+	} else {
+		v->ptr0_s = 0;
+	}
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_EnumArray300_p(const char *desc, NETDFS_DFS_ENUMARRAY300 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_EnumArray300_p");
+	depth++;
+	if (!prs_uint32("count", ps, depth, &v->count))
+		return False;
+	
+	if (!prs_uint32("ptr0_s", ps, depth, &v->ptr0_s))
+		return False;
+	
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_EnumArray300_d(const char *desc, NETDFS_DFS_ENUMARRAY300 *v, prs_struct *ps, int depth)
+{
+	uint32 i_s_1;
+	
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_EnumArray300_d");
+	depth++;
+	
+	if (v->ptr0_s) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!prs_uint32("size_s", ps, depth, &v->size_s))
+			return False;
+		
+		if (UNMARSHALLING(ps)) {
+			if (v->count) {
+				v->s = PRS_ALLOC_MEM(ps,NETDFS_DFS_INFO300,v->count);
+				if (!v->s) {
+					return False;
+				}
+			} else {
+				v->s = NULL;
+			}
+		}
+		for (i_s_1=0; i_s_1<v->count;i_s_1++) {
+			if (!netdfs_io_dfs_Info300_p("s", &v->s[i_s_1], ps, depth))
+				return False;
+		}
+		for (i_s_1=0; i_s_1<v->count;i_s_1++) {
+			if (!netdfs_io_dfs_Info300_d("s", &v->s[i_s_1], ps, depth))
+				return False;
+		}
+	}
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_EnumInfo_p(const char *desc, NETDFS_DFS_ENUMINFO_CTR* v, prs_struct *ps, int depth)
+{
+	if (!prs_uint32("switch_value", ps, depth, &v->switch_value))
+		return False;
+	
+	switch (v->switch_value) {
+		case 1:
+			depth++;
+			if (!prs_uint32("ptr0_info1", ps, depth, &v->ptr0))
+				return False;
+			
+			depth--;
+			break;
+		
+		case 2:
+			depth++;
+			if (!prs_uint32("ptr0_info2", ps, depth, &v->ptr0))
+				return False;
+			
+			depth--;
+			break;
+		
+		case 3:
+			depth++;
+			if (!prs_uint32("ptr0_info3", ps, depth, &v->ptr0))
+				return False;
+			
+			depth--;
+			break;
+		
+		case 4:
+			depth++;
+			if (!prs_uint32("ptr0_info4", ps, depth, &v->ptr0))
+				return False;
+			
+			depth--;
+			break;
+		
+		case 200:
+			depth++;
+			if (!prs_uint32("ptr0_info200", ps, depth, &v->ptr0))
+				return False;
+			
+			depth--;
+			break;
+		
+		case 300:
+			depth++;
+			if (!prs_uint32("ptr0_info300", ps, depth, &v->ptr0))
+				return False;
+			
+			depth--;
+			break;
+		
+		default:
+			return False;
+		
+	}
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_EnumInfo_d(const char *desc, NETDFS_DFS_ENUMINFO_CTR* v, prs_struct *ps, int depth)
+{
+	switch (v->switch_value) {
+		case 1:
+			depth++;
+			if (v->ptr0) {
+				if (!prs_align_custom(ps, 4))
+					return False;
+				
+				if (!netdfs_io_dfs_EnumArray1_p("info1", &v->u.info1, ps, depth))
+					return False;
+				if (!netdfs_io_dfs_EnumArray1_d("info1", &v->u.info1, ps, depth))
+					return False;
+			}
+			depth--;
+			break;
+		
+		case 2:
+			depth++;
+			if (v->ptr0) {
+				if (!prs_align_custom(ps, 4))
+					return False;
+				
+				if (!netdfs_io_dfs_EnumArray2_p("info2", &v->u.info2, ps, depth))
+					return False;
+				if (!netdfs_io_dfs_EnumArray2_d("info2", &v->u.info2, ps, depth))
+					return False;
+			}
+			depth--;
+			break;
+		
+		case 3:
+			depth++;
+			if (v->ptr0) {
+				if (!prs_align_custom(ps, 4))
+					return False;
+				
+				if (!netdfs_io_dfs_EnumArray3_p("info3", &v->u.info3, ps, depth))
+					return False;
+				if (!netdfs_io_dfs_EnumArray3_d("info3", &v->u.info3, ps, depth))
+					return False;
+			}
+			depth--;
+			break;
+		
+		case 4:
+			depth++;
+			if (v->ptr0) {
+				if (!prs_align_custom(ps, 4))
+					return False;
+				
+				if (!netdfs_io_dfs_EnumArray4_p("info4", &v->u.info4, ps, depth))
+					return False;
+				if (!netdfs_io_dfs_EnumArray4_d("info4", &v->u.info4, ps, depth))
+					return False;
+			}
+			depth--;
+			break;
+		
+		case 200:
+			depth++;
+			if (v->ptr0) {
+				if (!prs_align_custom(ps, 4))
+					return False;
+				
+				if (!netdfs_io_dfs_EnumArray200_p("info200", &v->u.info200, ps, depth))
+					return False;
+				if (!netdfs_io_dfs_EnumArray200_d("info200", &v->u.info200, ps, depth))
+					return False;
+			}
+			depth--;
+			break;
+		
+		case 300:
+			depth++;
+			if (v->ptr0) {
+				if (!prs_align_custom(ps, 4))
+					return False;
+				
+				if (!netdfs_io_dfs_EnumArray300_p("info300", &v->u.info300, ps, depth))
+					return False;
+				if (!netdfs_io_dfs_EnumArray300_d("info300", &v->u.info300, ps, depth))
+					return False;
+			}
+			depth--;
+			break;
+		
+	}
+	
+	return True;
+}
+BOOL init_netdfs_dfs_EnumStruct(NETDFS_DFS_ENUMSTRUCT *v, uint32 level, NETDFS_DFS_ENUMINFO_CTR e)
+{
+	DEBUG(5,("init_netdfs_dfs_EnumStruct\n"));
+	
+	v->level = level;
+	
+	v->e = e;
+	v->e.switch_value = v->level;
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_EnumStruct_p(const char *desc, NETDFS_DFS_ENUMSTRUCT *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_EnumStruct_p");
+	depth++;
+	if (!prs_uint32("level", ps, depth, &v->level))
+		return False;
+	
+	if (!netdfs_io_dfs_EnumInfo_p("e", &v->e, ps, depth))
+		return False;
+	
+	return True;
+}
+
+BOOL netdfs_io_dfs_EnumStruct_d(const char *desc, NETDFS_DFS_ENUMSTRUCT *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_dfs_EnumStruct_d");
+	depth++;
+	
+	if (!prs_align_custom(ps, 4))
+		return False;
+	
+	if (!netdfs_io_dfs_EnumInfo_d("e", &v->e, ps, depth))
+		return False;
+	
+	return True;
+}
+
+/* netdfs functions */
+BOOL init_netdfs_q_dfs_GetManagerVersion(NETDFS_Q_DFS_GETMANAGERVERSION *v)
+{
+	DEBUG(5,("init_netdfs_q_dfs_GetManagerVersion\n"));
+	
+	return True;
+}
+
+BOOL netdfs_io_q_dfs_GetManagerVersion(const char *desc, NETDFS_Q_DFS_GETMANAGERVERSION *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_q_dfs_GetManagerVersion");
+	depth++;
+	return True;
+}
+
+BOOL init_netdfs_r_dfs_GetManagerVersion(NETDFS_R_DFS_GETMANAGERVERSION *v, uint32 *exist_flag)
+{
+	DEBUG(5,("init_netdfs_r_dfs_GetManagerVersion\n"));
+	
+	if (!exist_flag)
+		return False;
+	
+	v->exist_flag = *exist_flag;
+	
+	return True;
+}
+
+BOOL netdfs_io_r_dfs_GetManagerVersion(const char *desc, NETDFS_R_DFS_GETMANAGERVERSION *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_r_dfs_GetManagerVersion");
+	depth++;
+	if (!prs_uint32("exist_flag", ps, depth, &v->exist_flag))
+		return False;
+	
+	return True;
+}
+
+BOOL init_netdfs_q_dfs_Add(NETDFS_Q_DFS_ADD *v, const char *path, const char *server, const char *share, const char *comment, uint32 flags)
+{
+	DEBUG(5,("init_netdfs_q_dfs_Add\n"));
+	
+	if (!path)
+		return False;
+	
+	init_unistr2(&v->path, path, UNI_FLAGS_NONE);
+	
+	if (!server)
+		return False;
+	
+	init_unistr2(&v->server, server, UNI_FLAGS_NONE);
+	
+	if (share) {
+		v->ptr0_share = 1;
+		init_unistr2(&v->share, share, UNI_FLAGS_NONE);
+	} else {
+		v->ptr0_share = 0;
+	}
+	
+	if (comment) {
+		v->ptr0_comment = 1;
+		init_unistr2(&v->comment, comment, UNI_FLAGS_NONE);
+	} else {
+		v->ptr0_comment = 0;
+	}
+	
+	v->flags = flags;
+	
+	return True;
+}
+
+BOOL netdfs_io_q_dfs_Add(const char *desc, NETDFS_Q_DFS_ADD *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_q_dfs_Add");
+	depth++;
+	if (!prs_align_custom(ps, 4))
+		return False;
+	
+	if (!smb_io_unistr2("path", &v->path, 1, ps, depth))
+		return False;
+	
+	if (!prs_align_custom(ps, 4))
+		return False;
+	
+	if (!smb_io_unistr2("server", &v->server, 1, ps, depth))
+		return False;
+	
+	if (!prs_align_custom(ps, 4))
+		return False;
+	
+	if (!prs_uint32("ptr0_share", ps, depth, &v->ptr0_share))
+		return False;
+	
+	if (v->ptr0_share) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!smb_io_unistr2("share", &v->share, 1, ps, depth))
+			return False;
+	}
+	
+	if (!prs_align_custom(ps, 4))
+		return False;
+	
+	if (!prs_uint32("ptr0_comment", ps, depth, &v->ptr0_comment))
+		return False;
+	
+	if (v->ptr0_comment) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!smb_io_unistr2("comment", &v->comment, 1, ps, depth))
+			return False;
+	}
+	
+	if (!prs_align_custom(ps, 4))
+		return False;
+	
+	if (!prs_uint32("flags", ps, depth, &v->flags))
+		return False;
+	
+	return True;
+}
+
+BOOL init_netdfs_r_dfs_Add(NETDFS_R_DFS_ADD *v, const char *path, const char *server, const char *share, const char *comment, uint32 flags, WERROR status)
+{
+	DEBUG(5,("init_netdfs_r_dfs_Add\n"));
+	
+	v->status = status;
+	
+	return True;
+}
+
+BOOL netdfs_io_r_dfs_Add(const char *desc, NETDFS_R_DFS_ADD *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_r_dfs_Add");
+	depth++;
+	if (!prs_werror("status", ps, depth, &v->status))
+		return False;
+	
+	return True;
+}
+
+BOOL init_netdfs_q_dfs_Remove(NETDFS_Q_DFS_REMOVE *v, const char *path, const char *server, const char *share)
+{
+	DEBUG(5,("init_netdfs_q_dfs_Remove\n"));
+	
+	if (!path)
+		return False;
+	
+	init_unistr2(&v->path, path, UNI_FLAGS_NONE);
+	
+	if (server) {
+		v->ptr0_server = 1;
+		init_unistr2(&v->server, server, UNI_FLAGS_NONE);
+	} else {
+		v->ptr0_server = 0;
+	}
+	
+	if (share) {
+		v->ptr0_share = 1;
+		init_unistr2(&v->share, share, UNI_FLAGS_NONE);
+	} else {
+		v->ptr0_share = 0;
+	}
+	
+	return True;
+}
+
+BOOL netdfs_io_q_dfs_Remove(const char *desc, NETDFS_Q_DFS_REMOVE *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_q_dfs_Remove");
+	depth++;
+	if (!prs_align_custom(ps, 4))
+		return False;
+	
+	if (!smb_io_unistr2("path", &v->path, 1, ps, depth))
+		return False;
+	
+	if (!prs_align_custom(ps, 4))
+		return False;
+	
+	if (!prs_uint32("ptr0_server", ps, depth, &v->ptr0_server))
+		return False;
+	
+	if (v->ptr0_server) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!smb_io_unistr2("server", &v->server, 1, ps, depth))
+			return False;
+	}
+	
+	if (!prs_align_custom(ps, 4))
+		return False;
+	
+	if (!prs_uint32("ptr0_share", ps, depth, &v->ptr0_share))
+		return False;
+	
+	if (v->ptr0_share) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!smb_io_unistr2("share", &v->share, 1, ps, depth))
+			return False;
+	}
+	
+	return True;
+}
+
+BOOL init_netdfs_r_dfs_Remove(NETDFS_R_DFS_REMOVE *v, const char *path, const char *server, const char *share, WERROR status)
+{
+	DEBUG(5,("init_netdfs_r_dfs_Remove\n"));
+	
+	v->status = status;
+	
+	return True;
+}
+
+BOOL netdfs_io_r_dfs_Remove(const char *desc, NETDFS_R_DFS_REMOVE *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_r_dfs_Remove");
+	depth++;
+	if (!prs_werror("status", ps, depth, &v->status))
+		return False;
+	
+	return True;
+}
+
+BOOL init_netdfs_q_dfs_SetInfo(NETDFS_Q_DFS_SETINFO *v)
+{
+	DEBUG(5,("init_netdfs_q_dfs_SetInfo\n"));
+	
+	return True;
+}
+
+BOOL netdfs_io_q_dfs_SetInfo(const char *desc, NETDFS_Q_DFS_SETINFO *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_q_dfs_SetInfo");
+	depth++;
+	return True;
+}
+
+BOOL init_netdfs_r_dfs_SetInfo(NETDFS_R_DFS_SETINFO *v, WERROR status)
+{
+	DEBUG(5,("init_netdfs_r_dfs_SetInfo\n"));
+	
+	v->status = status;
+	
+	return True;
+}
+
+BOOL netdfs_io_r_dfs_SetInfo(const char *desc, NETDFS_R_DFS_SETINFO *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_r_dfs_SetInfo");
+	depth++;
+	if (!prs_werror("status", ps, depth, &v->status))
+		return False;
+	
+	return True;
+}
+
+BOOL init_netdfs_q_dfs_GetInfo(NETDFS_Q_DFS_GETINFO *v, const char *path, const char *server, const char *share, uint32 level)
+{
+	DEBUG(5,("init_netdfs_q_dfs_GetInfo\n"));
+	
+	if (!path)
+		return False;
+	
+	init_unistr2(&v->path, path, UNI_FLAGS_NONE);
+	
+	if (server) {
+		v->ptr0_server = 1;
+		init_unistr2(&v->server, server, UNI_FLAGS_NONE);
+	} else {
+		v->ptr0_server = 0;
+	}
+	
+	if (share) {
+		v->ptr0_share = 1;
+		init_unistr2(&v->share, share, UNI_FLAGS_NONE);
+	} else {
+		v->ptr0_share = 0;
+	}
+	
+	v->level = level;
+	
+	return True;
+}
+
+BOOL netdfs_io_q_dfs_GetInfo(const char *desc, NETDFS_Q_DFS_GETINFO *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_q_dfs_GetInfo");
+	depth++;
+	if (!prs_align_custom(ps, 4))
+		return False;
+	
+	if (!smb_io_unistr2("path", &v->path, 1, ps, depth))
+		return False;
+	
+	if (!prs_align_custom(ps, 4))
+		return False;
+	
+	if (!prs_uint32("ptr0_server", ps, depth, &v->ptr0_server))
+		return False;
+	
+	if (v->ptr0_server) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!smb_io_unistr2("server", &v->server, 1, ps, depth))
+			return False;
+	}
+	
+	if (!prs_align_custom(ps, 4))
+		return False;
+	
+	if (!prs_uint32("ptr0_share", ps, depth, &v->ptr0_share))
+		return False;
+	
+	if (v->ptr0_share) {
+		if (!prs_align_custom(ps, 4))
+			return False;
+		
+		if (!smb_io_unistr2("share", &v->share, 1, ps, depth))
+			return False;
+	}
+	
+	if (!prs_align_custom(ps, 4))
+		return False;
+	
+	if (!prs_uint32("level", ps, depth, &v->level))
+		return False;
+	
+	return True;
+}
+
+BOOL init_netdfs_r_dfs_GetInfo(NETDFS_R_DFS_GETINFO *v, const char *path, const char *server, const char *share, uint32 level, NETDFS_DFS_INFO_CTR *info, WERROR status)
+{
+	DEBUG(5,("init_netdfs_r_dfs_GetInfo\n"));
+	
+	if (!info)
+		return False;
+	
+	v->info = *info;
+	v->info.switch_value = level;
+	
+	v->status = status;
+	
+	return True;
+}
+
+BOOL netdfs_io_r_dfs_GetInfo(const char *desc, NETDFS_R_DFS_GETINFO *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_r_dfs_GetInfo");
+	depth++;
+	if (!netdfs_io_dfs_Info_p("info", &v->info, ps, depth))
+		return False;
+	if (!netdfs_io_dfs_Info_d("info", &v->info, ps, depth))
+		return False;
+	
+	if (!prs_align_custom(ps, 4))
+		return False;
+	
+	if (!prs_werror("status", ps, depth, &v->status))
+		return False;
+	
+	return True;
+}
+
+BOOL init_netdfs_q_dfs_Enum(NETDFS_Q_DFS_ENUM *v, uint32 level, uint32 bufsize, NETDFS_DFS_ENUMSTRUCT *info, uint32 *total)
+{
+	DEBUG(5,("init_netdfs_q_dfs_Enum\n"));
+	
+	v->level = level;
+	
+	v->bufsize = bufsize;
+	
+	if (info) {
+		v->ptr0_info = 1;
+		v->info = *info;
+	} else {
+		v->ptr0_info = 0;
+	}
+	
+	if (total) {
+		v->ptr0_total = 1;
+		v->total = *total;
+	} else {
+		v->ptr0_total = 0;
+	}
+	
+	return True;
+}
+
+BOOL netdfs_io_q_dfs_Enum(const char *desc, NETDFS_Q_DFS_ENUM *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_q_dfs_Enum");
+	depth++;
+	if (!prs_uint32("level", ps, depth, &v->level))
+		return False;
+	
+	if (!prs_uint32("bufsize", ps, depth, &v->bufsize))
+		return False;
+	
+	if (!prs_uint32("ptr0_info", ps, depth, &v->ptr0_info))
+		return False;
+	
+	if (v->ptr0_info) {
+		if (!netdfs_io_dfs_EnumStruct_p("info", &v->info, ps, depth))
+			return False;
+		if (!netdfs_io_dfs_EnumStruct_d("info", &v->info, ps, depth))
+			return False;
+	}
+	
+	if (!prs_align_custom(ps, 4))
+		return False;
+	
+	if (!prs_uint32("ptr0_total", ps, depth, &v->ptr0_total))
+		return False;
+	
+	if (v->ptr0_total) {
+		if (!prs_uint32("total", ps, depth, &v->total))
+			return False;
+	}
+	
+	return True;
+}
+
+BOOL init_netdfs_r_dfs_Enum(NETDFS_R_DFS_ENUM *v, uint32 level, uint32 bufsize, NETDFS_DFS_ENUMSTRUCT *info, uint32 *unknown, uint32 *total, WERROR status)
+{
+	DEBUG(5,("init_netdfs_r_dfs_Enum\n"));
+	
+	if (info) {
+		v->ptr0_info = 1;
+		v->info = *info;
+	} else {
+		v->ptr0_info = 0;
+	}
+	
+	if (total) {
+		v->ptr0_total = 1;
+		v->total = *total;
+	} else {
+		v->ptr0_total = 0;
+	}
+	
+	v->status = status;
+	
+	return True;
+}
+
+BOOL netdfs_io_r_dfs_Enum(const char *desc, NETDFS_R_DFS_ENUM *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_r_dfs_Enum");
+	depth++;
+	if (!prs_uint32("ptr0_info", ps, depth, &v->ptr0_info))
+		return False;
+	
+	if (v->ptr0_info) {
+		if (!netdfs_io_dfs_EnumStruct_p("info", &v->info, ps, depth))
+			return False;
+		if (!netdfs_io_dfs_EnumStruct_d("info", &v->info, ps, depth))
+			return False;
+	}
+	
+	if (!prs_align_custom(ps, 4))
+		return False;
+	
+	if (!prs_uint32("ptr0_total", ps, depth, &v->ptr0_total))
+		return False;
+	
+	if (v->ptr0_total) {
+		if (!prs_uint32("total", ps, depth, &v->total))
+			return False;
+	}
+	
+	if (!prs_align_custom(ps, 4))
+		return False;
+	
+	if (!prs_werror("status", ps, depth, &v->status))
+		return False;
+	
+	return True;
+}
+
+BOOL init_netdfs_q_dfs_Rename(NETDFS_Q_DFS_RENAME *v)
+{
+	DEBUG(5,("init_netdfs_q_dfs_Rename\n"));
+	
+	return True;
+}
+
+BOOL netdfs_io_q_dfs_Rename(const char *desc, NETDFS_Q_DFS_RENAME *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_q_dfs_Rename");
+	depth++;
+	return True;
+}
+
+BOOL init_netdfs_r_dfs_Rename(NETDFS_R_DFS_RENAME *v, WERROR status)
+{
+	DEBUG(5,("init_netdfs_r_dfs_Rename\n"));
+	
+	v->status = status;
+	
+	return True;
+}
+
+BOOL netdfs_io_r_dfs_Rename(const char *desc, NETDFS_R_DFS_RENAME *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_r_dfs_Rename");
+	depth++;
+	if (!prs_werror("status", ps, depth, &v->status))
+		return False;
+	
+	return True;
+}
+
+BOOL init_netdfs_q_dfs_Move(NETDFS_Q_DFS_MOVE *v)
+{
+	DEBUG(5,("init_netdfs_q_dfs_Move\n"));
+	
+	return True;
+}
+
+BOOL netdfs_io_q_dfs_Move(const char *desc, NETDFS_Q_DFS_MOVE *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_q_dfs_Move");
+	depth++;
+	return True;
+}
+
+BOOL init_netdfs_r_dfs_Move(NETDFS_R_DFS_MOVE *v, WERROR status)
+{
+	DEBUG(5,("init_netdfs_r_dfs_Move\n"));
+	
+	v->status = status;
+	
+	return True;
+}
+
+BOOL netdfs_io_r_dfs_Move(const char *desc, NETDFS_R_DFS_MOVE *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_r_dfs_Move");
+	depth++;
+	if (!prs_werror("status", ps, depth, &v->status))
+		return False;
+	
+	return True;
+}
+
+BOOL init_netdfs_q_dfs_ManagerGetConfigInfo(NETDFS_Q_DFS_MANAGERGETCONFIGINFO *v)
+{
+	DEBUG(5,("init_netdfs_q_dfs_ManagerGetConfigInfo\n"));
+	
+	return True;
+}
+
+BOOL netdfs_io_q_dfs_ManagerGetConfigInfo(const char *desc, NETDFS_Q_DFS_MANAGERGETCONFIGINFO *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_q_dfs_ManagerGetConfigInfo");
+	depth++;
+	return True;
+}
+
+BOOL init_netdfs_r_dfs_ManagerGetConfigInfo(NETDFS_R_DFS_MANAGERGETCONFIGINFO *v, WERROR status)
+{
+	DEBUG(5,("init_netdfs_r_dfs_ManagerGetConfigInfo\n"));
+	
+	v->status = status;
+	
+	return True;
+}
+
+BOOL netdfs_io_r_dfs_ManagerGetConfigInfo(const char *desc, NETDFS_R_DFS_MANAGERGETCONFIGINFO *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_r_dfs_ManagerGetConfigInfo");
+	depth++;
+	if (!prs_werror("status", ps, depth, &v->status))
+		return False;
+	
+	return True;
+}
+
+BOOL init_netdfs_q_dfs_ManagerSendSiteInfo(NETDFS_Q_DFS_MANAGERSENDSITEINFO *v)
+{
+	DEBUG(5,("init_netdfs_q_dfs_ManagerSendSiteInfo\n"));
+	
+	return True;
+}
+
+BOOL netdfs_io_q_dfs_ManagerSendSiteInfo(const char *desc, NETDFS_Q_DFS_MANAGERSENDSITEINFO *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_q_dfs_ManagerSendSiteInfo");
+	depth++;
+	return True;
+}
+
+BOOL init_netdfs_r_dfs_ManagerSendSiteInfo(NETDFS_R_DFS_MANAGERSENDSITEINFO *v, WERROR status)
+{
+	DEBUG(5,("init_netdfs_r_dfs_ManagerSendSiteInfo\n"));
+	
+	v->status = status;
+	
+	return True;
+}
+
+BOOL netdfs_io_r_dfs_ManagerSendSiteInfo(const char *desc, NETDFS_R_DFS_MANAGERSENDSITEINFO *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_r_dfs_ManagerSendSiteInfo");
+	depth++;
+	if (!prs_werror("status", ps, depth, &v->status))
+		return False;
+	
+	return True;
+}
+
+BOOL init_netdfs_q_dfs_AddFtRoot(NETDFS_Q_DFS_ADDFTROOT *v)
+{
+	DEBUG(5,("init_netdfs_q_dfs_AddFtRoot\n"));
+	
+	return True;
+}
+
+BOOL netdfs_io_q_dfs_AddFtRoot(const char *desc, NETDFS_Q_DFS_ADDFTROOT *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_q_dfs_AddFtRoot");
+	depth++;
+	return True;
+}
+
+BOOL init_netdfs_r_dfs_AddFtRoot(NETDFS_R_DFS_ADDFTROOT *v, WERROR status)
+{
+	DEBUG(5,("init_netdfs_r_dfs_AddFtRoot\n"));
+	
+	v->status = status;
+	
+	return True;
+}
+
+BOOL netdfs_io_r_dfs_AddFtRoot(const char *desc, NETDFS_R_DFS_ADDFTROOT *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_r_dfs_AddFtRoot");
+	depth++;
+	if (!prs_werror("status", ps, depth, &v->status))
+		return False;
+	
+	return True;
+}
+
+BOOL init_netdfs_q_dfs_RemoveFtRoot(NETDFS_Q_DFS_REMOVEFTROOT *v)
+{
+	DEBUG(5,("init_netdfs_q_dfs_RemoveFtRoot\n"));
+	
+	return True;
+}
+
+BOOL netdfs_io_q_dfs_RemoveFtRoot(const char *desc, NETDFS_Q_DFS_REMOVEFTROOT *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_q_dfs_RemoveFtRoot");
+	depth++;
+	return True;
+}
+
+BOOL init_netdfs_r_dfs_RemoveFtRoot(NETDFS_R_DFS_REMOVEFTROOT *v, WERROR status)
+{
+	DEBUG(5,("init_netdfs_r_dfs_RemoveFtRoot\n"));
+	
+	v->status = status;
+	
+	return True;
+}
+
+BOOL netdfs_io_r_dfs_RemoveFtRoot(const char *desc, NETDFS_R_DFS_REMOVEFTROOT *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_r_dfs_RemoveFtRoot");
+	depth++;
+	if (!prs_werror("status", ps, depth, &v->status))
+		return False;
+	
+	return True;
+}
+
+BOOL init_netdfs_q_dfs_AddStdRoot(NETDFS_Q_DFS_ADDSTDROOT *v)
+{
+	DEBUG(5,("init_netdfs_q_dfs_AddStdRoot\n"));
+	
+	return True;
+}
+
+BOOL netdfs_io_q_dfs_AddStdRoot(const char *desc, NETDFS_Q_DFS_ADDSTDROOT *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_q_dfs_AddStdRoot");
+	depth++;
+	return True;
+}
+
+BOOL init_netdfs_r_dfs_AddStdRoot(NETDFS_R_DFS_ADDSTDROOT *v, WERROR status)
+{
+	DEBUG(5,("init_netdfs_r_dfs_AddStdRoot\n"));
+	
+	v->status = status;
+	
+	return True;
+}
+
+BOOL netdfs_io_r_dfs_AddStdRoot(const char *desc, NETDFS_R_DFS_ADDSTDROOT *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_r_dfs_AddStdRoot");
+	depth++;
+	if (!prs_werror("status", ps, depth, &v->status))
+		return False;
+	
+	return True;
+}
+
+BOOL init_netdfs_q_dfs_RemoveStdRoot(NETDFS_Q_DFS_REMOVESTDROOT *v)
+{
+	DEBUG(5,("init_netdfs_q_dfs_RemoveStdRoot\n"));
+	
+	return True;
+}
+
+BOOL netdfs_io_q_dfs_RemoveStdRoot(const char *desc, NETDFS_Q_DFS_REMOVESTDROOT *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_q_dfs_RemoveStdRoot");
+	depth++;
+	return True;
+}
+
+BOOL init_netdfs_r_dfs_RemoveStdRoot(NETDFS_R_DFS_REMOVESTDROOT *v, WERROR status)
+{
+	DEBUG(5,("init_netdfs_r_dfs_RemoveStdRoot\n"));
+	
+	v->status = status;
+	
+	return True;
+}
+
+BOOL netdfs_io_r_dfs_RemoveStdRoot(const char *desc, NETDFS_R_DFS_REMOVESTDROOT *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_r_dfs_RemoveStdRoot");
+	depth++;
+	if (!prs_werror("status", ps, depth, &v->status))
+		return False;
+	
+	return True;
+}
+
+BOOL init_netdfs_q_dfs_ManagerInitialize(NETDFS_Q_DFS_MANAGERINITIALIZE *v)
+{
+	DEBUG(5,("init_netdfs_q_dfs_ManagerInitialize\n"));
+	
+	return True;
+}
+
+BOOL netdfs_io_q_dfs_ManagerInitialize(const char *desc, NETDFS_Q_DFS_MANAGERINITIALIZE *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_q_dfs_ManagerInitialize");
+	depth++;
+	return True;
+}
+
+BOOL init_netdfs_r_dfs_ManagerInitialize(NETDFS_R_DFS_MANAGERINITIALIZE *v, WERROR status)
+{
+	DEBUG(5,("init_netdfs_r_dfs_ManagerInitialize\n"));
+	
+	v->status = status;
+	
+	return True;
+}
+
+BOOL netdfs_io_r_dfs_ManagerInitialize(const char *desc, NETDFS_R_DFS_MANAGERINITIALIZE *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_r_dfs_ManagerInitialize");
+	depth++;
+	if (!prs_werror("status", ps, depth, &v->status))
+		return False;
+	
+	return True;
+}
+
+BOOL init_netdfs_q_dfs_AddStdRootForced(NETDFS_Q_DFS_ADDSTDROOTFORCED *v)
+{
+	DEBUG(5,("init_netdfs_q_dfs_AddStdRootForced\n"));
+	
+	return True;
+}
+
+BOOL netdfs_io_q_dfs_AddStdRootForced(const char *desc, NETDFS_Q_DFS_ADDSTDROOTFORCED *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_q_dfs_AddStdRootForced");
+	depth++;
+	return True;
+}
+
+BOOL init_netdfs_r_dfs_AddStdRootForced(NETDFS_R_DFS_ADDSTDROOTFORCED *v, WERROR status)
+{
+	DEBUG(5,("init_netdfs_r_dfs_AddStdRootForced\n"));
+	
+	v->status = status;
+	
+	return True;
+}
+
+BOOL netdfs_io_r_dfs_AddStdRootForced(const char *desc, NETDFS_R_DFS_ADDSTDROOTFORCED *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_r_dfs_AddStdRootForced");
+	depth++;
+	if (!prs_werror("status", ps, depth, &v->status))
+		return False;
+	
+	return True;
+}
+
+BOOL init_netdfs_q_dfs_GetDcAddress(NETDFS_Q_DFS_GETDCADDRESS *v)
+{
+	DEBUG(5,("init_netdfs_q_dfs_GetDcAddress\n"));
+	
+	return True;
+}
+
+BOOL netdfs_io_q_dfs_GetDcAddress(const char *desc, NETDFS_Q_DFS_GETDCADDRESS *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_q_dfs_GetDcAddress");
+	depth++;
+	return True;
+}
+
+BOOL init_netdfs_r_dfs_GetDcAddress(NETDFS_R_DFS_GETDCADDRESS *v, WERROR status)
+{
+	DEBUG(5,("init_netdfs_r_dfs_GetDcAddress\n"));
+	
+	v->status = status;
+	
+	return True;
+}
+
+BOOL netdfs_io_r_dfs_GetDcAddress(const char *desc, NETDFS_R_DFS_GETDCADDRESS *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_r_dfs_GetDcAddress");
+	depth++;
+	if (!prs_werror("status", ps, depth, &v->status))
+		return False;
+	
+	return True;
+}
+
+BOOL init_netdfs_q_dfs_SetDcAddress(NETDFS_Q_DFS_SETDCADDRESS *v)
+{
+	DEBUG(5,("init_netdfs_q_dfs_SetDcAddress\n"));
+	
+	return True;
+}
+
+BOOL netdfs_io_q_dfs_SetDcAddress(const char *desc, NETDFS_Q_DFS_SETDCADDRESS *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_q_dfs_SetDcAddress");
+	depth++;
+	return True;
+}
+
+BOOL init_netdfs_r_dfs_SetDcAddress(NETDFS_R_DFS_SETDCADDRESS *v, WERROR status)
+{
+	DEBUG(5,("init_netdfs_r_dfs_SetDcAddress\n"));
+	
+	v->status = status;
+	
+	return True;
+}
+
+BOOL netdfs_io_r_dfs_SetDcAddress(const char *desc, NETDFS_R_DFS_SETDCADDRESS *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_r_dfs_SetDcAddress");
+	depth++;
+	if (!prs_werror("status", ps, depth, &v->status))
+		return False;
+	
+	return True;
+}
+
+BOOL init_netdfs_q_dfs_FlushFtTable(NETDFS_Q_DFS_FLUSHFTTABLE *v)
+{
+	DEBUG(5,("init_netdfs_q_dfs_FlushFtTable\n"));
+	
+	return True;
+}
+
+BOOL netdfs_io_q_dfs_FlushFtTable(const char *desc, NETDFS_Q_DFS_FLUSHFTTABLE *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_q_dfs_FlushFtTable");
+	depth++;
+	return True;
+}
+
+BOOL init_netdfs_r_dfs_FlushFtTable(NETDFS_R_DFS_FLUSHFTTABLE *v, WERROR status)
+{
+	DEBUG(5,("init_netdfs_r_dfs_FlushFtTable\n"));
+	
+	v->status = status;
+	
+	return True;
+}
+
+BOOL netdfs_io_r_dfs_FlushFtTable(const char *desc, NETDFS_R_DFS_FLUSHFTTABLE *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_r_dfs_FlushFtTable");
+	depth++;
+	if (!prs_werror("status", ps, depth, &v->status))
+		return False;
+	
+	return True;
+}
+
+BOOL init_netdfs_q_dfs_Add2(NETDFS_Q_DFS_ADD2 *v)
+{
+	DEBUG(5,("init_netdfs_q_dfs_Add2\n"));
+	
+	return True;
+}
+
+BOOL netdfs_io_q_dfs_Add2(const char *desc, NETDFS_Q_DFS_ADD2 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_q_dfs_Add2");
+	depth++;
+	return True;
+}
+
+BOOL init_netdfs_r_dfs_Add2(NETDFS_R_DFS_ADD2 *v, WERROR status)
+{
+	DEBUG(5,("init_netdfs_r_dfs_Add2\n"));
+	
+	v->status = status;
+	
+	return True;
+}
+
+BOOL netdfs_io_r_dfs_Add2(const char *desc, NETDFS_R_DFS_ADD2 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_r_dfs_Add2");
+	depth++;
+	if (!prs_werror("status", ps, depth, &v->status))
+		return False;
+	
+	return True;
+}
+
+BOOL init_netdfs_q_dfs_Remove2(NETDFS_Q_DFS_REMOVE2 *v)
+{
+	DEBUG(5,("init_netdfs_q_dfs_Remove2\n"));
+	
+	return True;
+}
+
+BOOL netdfs_io_q_dfs_Remove2(const char *desc, NETDFS_Q_DFS_REMOVE2 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_q_dfs_Remove2");
+	depth++;
+	return True;
+}
+
+BOOL init_netdfs_r_dfs_Remove2(NETDFS_R_DFS_REMOVE2 *v, WERROR status)
+{
+	DEBUG(5,("init_netdfs_r_dfs_Remove2\n"));
+	
+	v->status = status;
+	
+	return True;
+}
+
+BOOL netdfs_io_r_dfs_Remove2(const char *desc, NETDFS_R_DFS_REMOVE2 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_r_dfs_Remove2");
+	depth++;
+	if (!prs_werror("status", ps, depth, &v->status))
+		return False;
+	
+	return True;
+}
+
+BOOL init_netdfs_q_dfs_EnumEx(NETDFS_Q_DFS_ENUMEX *v)
+{
+	DEBUG(5,("init_netdfs_q_dfs_EnumEx\n"));
+	
+	return True;
+}
+
+BOOL netdfs_io_q_dfs_EnumEx(const char *desc, NETDFS_Q_DFS_ENUMEX *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_q_dfs_EnumEx");
+	depth++;
+	return True;
+}
+
+BOOL init_netdfs_r_dfs_EnumEx(NETDFS_R_DFS_ENUMEX *v, WERROR status)
+{
+	DEBUG(5,("init_netdfs_r_dfs_EnumEx\n"));
+	
+	v->status = status;
+	
+	return True;
+}
+
+BOOL netdfs_io_r_dfs_EnumEx(const char *desc, NETDFS_R_DFS_ENUMEX *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_r_dfs_EnumEx");
+	depth++;
+	if (!prs_werror("status", ps, depth, &v->status))
+		return False;
+	
+	return True;
+}
+
+BOOL init_netdfs_q_dfs_SetInfo2(NETDFS_Q_DFS_SETINFO2 *v)
+{
+	DEBUG(5,("init_netdfs_q_dfs_SetInfo2\n"));
+	
+	return True;
+}
+
+BOOL netdfs_io_q_dfs_SetInfo2(const char *desc, NETDFS_Q_DFS_SETINFO2 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_q_dfs_SetInfo2");
+	depth++;
+	return True;
+}
+
+BOOL init_netdfs_r_dfs_SetInfo2(NETDFS_R_DFS_SETINFO2 *v, WERROR status)
+{
+	DEBUG(5,("init_netdfs_r_dfs_SetInfo2\n"));
+	
+	v->status = status;
+	
+	return True;
+}
+
+BOOL netdfs_io_r_dfs_SetInfo2(const char *desc, NETDFS_R_DFS_SETINFO2 *v, prs_struct *ps, int depth)
+{
+	if (v == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "netdfs_io_r_dfs_SetInfo2");
+	depth++;
+	if (!prs_werror("status", ps, depth, &v->status))
+		return False;
+	
+	return True;
+}
+

Copied: branches/samba/upstream/source/rpc_parse/parse_ds.c (from rev 1928, branches/samba/upstream/source/rpc_parse/parse_ds.c)
===================================================================
--- branches/samba/upstream/source/rpc_parse/parse_ds.c	                        (rev 0)
+++ branches/samba/upstream/source/rpc_parse/parse_ds.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,300 @@
+/* 
+ *  Unix SMB/CIFS implementation.
+ *  RPC Pipe client / server routines
+ 
+ *  Copyright (C) Gerald Carter				2002-2003
+ *  
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "includes.h"
+
+/************************************************************************
+************************************************************************/
+
+static BOOL ds_io_dominfobasic(const char *desc, DSROLE_PRIMARY_DOMAIN_INFO_BASIC **basic, prs_struct *ps, int depth)
+{
+	DSROLE_PRIMARY_DOMAIN_INFO_BASIC *p = *basic;
+	
+	if ( UNMARSHALLING(ps) ) {
+		p = *basic = PRS_ALLOC_MEM(ps, DSROLE_PRIMARY_DOMAIN_INFO_BASIC, 1);
+	}
+		
+	if ( !p )
+		return False;
+		
+	if ( !prs_uint16("machine_role", ps, depth, &p->machine_role) )
+		return False;
+	if ( !prs_align(ps) )
+		return False;
+
+	if ( !prs_uint32("flags", ps, depth, &p->flags) )
+		return False;
+
+	if ( !prs_uint32("netbios_ptr", ps, depth, &p->netbios_ptr) )
+		return False;
+	if ( !prs_uint32("dnsname_ptr", ps, depth, &p->dnsname_ptr) )
+		return False;
+	if ( !prs_uint32("forestname_ptr", ps, depth, &p->forestname_ptr) )
+		return False;
+		
+	if ( !smb_io_uuid("domain_guid", &p->domain_guid, ps, depth) )
+		return False;
+		
+	if ( !smb_io_unistr2( "netbios_domain", &p->netbios_domain, p->netbios_ptr, ps, depth) )
+		return False;
+	if ( !prs_align(ps) )
+		return False;
+	
+	if ( !smb_io_unistr2( "dns_domain", &p->dns_domain, p->dnsname_ptr, ps, depth) )
+		return False;
+	if ( !prs_align(ps) )
+		return False;
+	
+	if ( !smb_io_unistr2( "forest_domain", &p->forest_domain, p->forestname_ptr, ps, depth) )
+		return False;
+	if ( !prs_align(ps) )
+		return False;
+	
+		
+	return True;
+		
+}
+
+/************************************************************************
+************************************************************************/
+
+BOOL ds_io_q_getprimdominfo( const char *desc, DS_Q_GETPRIMDOMINFO *q_u, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "ds_io_q_getprimdominfo");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if ( !prs_uint16( "level", ps, depth, &q_u->level ) )
+		return False;
+		
+	return True;
+}
+
+/************************************************************************
+************************************************************************/
+
+BOOL ds_io_r_getprimdominfo( const char *desc, DS_R_GETPRIMDOMINFO *r_u, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "ds_io_r_getprimdominfo");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if ( !prs_uint32( "ptr", ps, depth, &r_u->ptr ) )
+		return False;
+		
+	if ( r_u->ptr )
+	{
+		if ( !prs_uint16( "level", ps, depth, &r_u->level ) )
+			return False;
+	
+		if ( !prs_uint16( "unknown0", ps, depth, &r_u->unknown0 ) )
+			return False;
+		
+		switch ( r_u->level )
+		{
+			case DsRolePrimaryDomainInfoBasic:
+				if ( !ds_io_dominfobasic( "dominfobasic", &r_u->info.basic, ps, depth) )
+					return False;
+				break;
+			default:
+				return False;
+		}
+	}
+
+	if ( !prs_align(ps) )
+		return False;
+	
+	if ( !prs_ntstatus("status", ps, depth, &r_u->status ) )
+		return False;		
+		
+	return True;
+}
+
+/************************************************************************
+ initialize a DS_ENUM_DOM_TRUSTS structure
+************************************************************************/
+
+BOOL init_q_ds_enum_domain_trusts( DS_Q_ENUM_DOM_TRUSTS *q, const char *server, uint32 flags )
+{
+	q->flags = flags;
+	
+	if ( server && *server )
+		q->server_ptr = 1;
+	else
+		q->server_ptr = 0;
+
+	init_unistr2( &q->server, server, UNI_STR_TERMINATE);
+		
+	return True;
+}
+
+/************************************************************************
+************************************************************************/
+
+static BOOL ds_io_domain_trusts( const char *desc, DS_DOMAIN_TRUSTS *trust, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "ds_io_dom_trusts_ctr");
+	depth++;
+
+	if ( !prs_uint32( "netbios_ptr", ps, depth, &trust->netbios_ptr ) )
+		return False;
+	
+	if ( !prs_uint32( "dns_ptr", ps, depth, &trust->dns_ptr ) )
+		return False;
+	
+	if ( !prs_uint32( "flags", ps, depth, &trust->flags ) )
+		return False;
+	
+	if ( !prs_uint32( "parent_index", ps, depth, &trust->parent_index ) )
+		return False;
+	
+	if ( !prs_uint32( "trust_type", ps, depth, &trust->trust_type ) )
+		return False;
+	
+	if ( !prs_uint32( "trust_attributes", ps, depth, &trust->trust_attributes ) )
+		return False;
+	
+	if ( !prs_uint32( "sid_ptr", ps, depth, &trust->sid_ptr ) )
+		return False;
+	
+	if ( !smb_io_uuid("guid", &trust->guid, ps, depth) )
+		return False;
+	
+	return True;	
+}
+
+/************************************************************************
+************************************************************************/
+
+static BOOL ds_io_dom_trusts_ctr( const char *desc, DS_DOMAIN_TRUSTS_CTR *ctr, prs_struct *ps, int depth)
+{
+	int i;
+
+	prs_debug(ps, depth, desc, "ds_io_dom_trusts_ctr");
+	depth++;
+	
+	if ( !prs_uint32( "ptr", ps, depth, &ctr->ptr ) )
+		return False;
+	
+	if ( !prs_uint32( "max_count", ps, depth, &ctr->max_count ) )
+		return False;
+	
+	/* are we done? */
+	
+	if ( ctr->max_count == 0 )
+		return True;
+	
+	/* allocate the domain trusts array are parse it */
+	
+	ctr->trusts = TALLOC_ARRAY(ps->mem_ctx, DS_DOMAIN_TRUSTS, ctr->max_count);
+	
+	if ( !ctr->trusts )
+		return False;
+	
+	/* this stinks; the static portion o fthe structure is read here and then
+	   we need another loop to read the UNISTR2's and SID's */
+	   
+	for ( i=0; i<ctr->max_count;i++ ) {
+		if ( !ds_io_domain_trusts("domain_trusts", &ctr->trusts[i], ps, depth) )
+			return False;
+	}
+
+	for ( i=0; i<ctr->max_count; i++ ) {
+	
+		if ( !smb_io_unistr2("netbios_domain", &ctr->trusts[i].netbios_domain, ctr->trusts[i].netbios_ptr, ps, depth) )
+			return False;
+
+		if(!prs_align(ps))
+			return False;
+		
+		if ( !smb_io_unistr2("dns_domain", &ctr->trusts[i].dns_domain, ctr->trusts[i].dns_ptr, ps, depth) )
+			return False;
+
+		if(!prs_align(ps))
+			return False;
+			
+		if ( ctr->trusts[i].sid_ptr ) {
+			if ( !smb_io_dom_sid2("sid", &ctr->trusts[i].sid, ps, depth ) )
+				return False;		
+		}
+	}
+	
+	return True;
+}
+
+/************************************************************************
+ initialize a DS_ENUM_DOM_TRUSTS request
+************************************************************************/
+
+BOOL ds_io_q_enum_domain_trusts( const char *desc, DS_Q_ENUM_DOM_TRUSTS *q_u, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "ds_io_q_enum_domain_trusts");
+	depth++;
+
+	if ( !prs_align(ps) )
+		return False;
+	
+	if ( !prs_uint32( "server_ptr", ps, depth, &q_u->server_ptr ) )
+		return False;
+	
+	if ( !smb_io_unistr2("server", &q_u->server, q_u->server_ptr, ps, depth) )
+			return False;
+	
+	if ( !prs_align(ps) )
+		return False;
+	
+	if ( !prs_uint32( "flags", ps, depth, &q_u->flags ) )
+		return False;
+	
+	return True;
+}
+
+/************************************************************************
+************************************************************************/
+
+BOOL ds_io_r_enum_domain_trusts( const char *desc, DS_R_ENUM_DOM_TRUSTS *r_u, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "ds_io_r_enum_domain_trusts");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if ( !prs_uint32( "num_domains", ps, depth, &r_u->num_domains ) )
+		return False;
+		
+	if ( r_u->num_domains ) {
+		if ( !ds_io_dom_trusts_ctr("domains", &r_u->domains, ps, depth) )
+			return False;
+	}
+		
+	if(!prs_align(ps))
+		return False;
+			
+	if ( !prs_ntstatus("status", ps, depth, &r_u->status ) )
+		return False;		
+		
+	return True;
+}

Copied: branches/samba/upstream/source/rpc_parse/parse_echo.c (from rev 1928, branches/samba/upstream/source/rpc_parse/parse_echo.c)
===================================================================
--- branches/samba/upstream/source/rpc_parse/parse_echo.c	                        (rev 0)
+++ branches/samba/upstream/source/rpc_parse/parse_echo.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,164 @@
+/* 
+ *  Unix SMB/CIFS implementation.
+ *
+ *  RPC Pipe client / server routines
+ *
+ *  Copyright (C) Tim Potter 2003
+ *  
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_RPC_PARSE
+
+void init_echo_q_add_one(ECHO_Q_ADD_ONE *q_d, uint32 request)
+{
+	q_d->request = request;
+}
+
+BOOL echo_io_q_add_one(const char *desc, ECHO_Q_ADD_ONE *q_d,
+		       prs_struct *ps, int depth)
+{
+	if (!prs_uint32("request", ps, 0, &q_d->request))
+		return False;
+
+	return True;
+}
+
+BOOL echo_io_r_add_one(const char *desc, ECHO_R_ADD_ONE *q_d,
+		       prs_struct *ps, int depth)
+{
+	if (!prs_uint32("response", ps, 0, &q_d->response))
+		return False;
+
+	return True;
+}
+
+
+void init_echo_q_echo_data(ECHO_Q_ECHO_DATA *q_d, uint32 size, char *data)
+{
+	q_d->size = size;
+	q_d->data = data;
+}
+
+BOOL echo_io_q_echo_data(const char *desc, ECHO_Q_ECHO_DATA *q_d,
+			  prs_struct *ps, int depth)
+{
+	if (!prs_uint32("size", ps, depth, &q_d->size))
+		return False;
+
+	if (!prs_uint32("size", ps, depth, &q_d->size))
+		return False;
+
+	if (UNMARSHALLING(ps)) {
+		q_d->data = PRS_ALLOC_MEM(ps, char, q_d->size);
+
+		if (!q_d->data)
+			return False;
+	}
+
+	if (!prs_uint8s(False, "data", ps, depth, (unsigned char *)q_d->data, q_d->size))
+		return False;
+
+	return True;
+}
+
+BOOL echo_io_r_echo_data(const char *desc, ECHO_R_ECHO_DATA *q_d,
+			  prs_struct *ps, int depth)
+{
+	if (!prs_uint32("size", ps, 0, &q_d->size))
+		return False;
+
+	if (UNMARSHALLING(ps)) {
+		q_d->data = PRS_ALLOC_MEM(ps, char, q_d->size);
+
+		if (!q_d->data)
+			return False;
+	}
+
+	if (!prs_uint8s(False, "data", ps, depth, (unsigned char *)q_d->data, q_d->size))
+		return False;
+
+	return True;
+}
+
+void init_echo_q_sink_data(ECHO_Q_SINK_DATA *q_d, uint32 size, char *data)
+{
+	q_d->size = size;
+	q_d->data = data;
+}
+
+BOOL echo_io_q_sink_data(const char *desc, ECHO_Q_SINK_DATA *q_d,
+			 prs_struct *ps, int depth)
+{
+	if (!prs_uint32("size", ps, depth, &q_d->size))
+		return False;
+
+	if (!prs_uint32("size", ps, depth, &q_d->size))
+		return False;
+
+	if (UNMARSHALLING(ps)) {
+		q_d->data = PRS_ALLOC_MEM(ps, char, q_d->size);
+
+		if (!q_d->data)
+			return False;
+	}
+
+	if (!prs_uint8s(False, "data", ps, depth, (unsigned char *)q_d->data, q_d->size))
+		return False;
+
+	return True;
+}
+
+BOOL echo_io_r_sink_data(const char *desc, ECHO_R_SINK_DATA *q_d,
+			 prs_struct *ps, int depth)
+{
+	return True;
+}
+
+void init_echo_q_source_data(ECHO_Q_SOURCE_DATA *q_d, uint32 size)
+{
+	q_d->size = size;
+}
+
+BOOL echo_io_q_source_data(const char *desc, ECHO_Q_SOURCE_DATA *q_d,
+			 prs_struct *ps, int depth)
+{
+	if (!prs_uint32("size", ps, depth, &q_d->size))
+		return False;
+
+	return True;
+}
+
+BOOL echo_io_r_source_data(const char *desc, ECHO_R_SOURCE_DATA *q_d,
+			   prs_struct *ps, int depth)
+{
+	if (!prs_uint32("size", ps, 0, &q_d->size))
+		return False;
+
+	if (UNMARSHALLING(ps)) {
+		q_d->data = PRS_ALLOC_MEM(ps, char, q_d->size);
+
+		if (!q_d->data)
+			return False;
+	}
+
+	if (!prs_uint8s(False, "data", ps, depth, (unsigned char *)q_d->data, q_d->size))
+		return False;
+
+	return True;
+}

Modified: branches/samba/upstream/source/rpc_parse/parse_eventlog.c
===================================================================
--- branches/samba/upstream/source/rpc_parse/parse_eventlog.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_parse/parse_eventlog.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
  
 #include "includes.h"
@@ -25,12 +26,199 @@
 /********************************************************************
 ********************************************************************/
 
-bool eventlog_io_q_read_eventlog(const char *desc, EVENTLOG_Q_READ_EVENTLOG *q_u,
+BOOL prs_ev_open_unknown0( const char *desc, prs_struct *ps, int depth, EVENTLOG_OPEN_UNKNOWN0 *u )
+{
+	if ( !u )
+		return False;
+	
+	if ( !prs_uint16("", ps, depth, &u->unknown1) )
+		return False;
+	if ( !prs_uint16("", ps, depth, &u->unknown2) )
+		return False;
+
+	return True;
+}
+
+/********************************************************************
+********************************************************************/
+
+BOOL eventlog_io_q_open_eventlog(const char *desc, EVENTLOG_Q_OPEN_EVENTLOG *q_u,
 				 prs_struct *ps, int depth)
 {
 	if(q_u == NULL)
 		return False;
+    
+	prs_debug(ps, depth, desc, "eventlog_io_q_open_eventlog");
+	depth++;
 
+	if(!prs_align(ps))
+		return False;
+
+	if ( !prs_pointer("", ps, depth, (void*)&q_u->unknown0, sizeof(EVENTLOG_OPEN_UNKNOWN0), (PRS_POINTER_CAST)prs_ev_open_unknown0))
+		return False;
+
+	if ( !prs_unistr4("logname", ps, depth, &q_u->logname) )
+		return False;
+	if ( !prs_align(ps) )
+		return False;
+
+	if ( !prs_unistr4("servername", ps, depth, &q_u->servername) )
+		return False;
+	if ( !prs_align(ps) )
+		return False;
+
+	if ( !prs_uint32("unknown1", ps, depth, &q_u->unknown1) )
+		return False;
+	if ( !prs_uint32("unknown2", ps, depth, &q_u->unknown2) )
+		return False;
+
+	return True;
+}
+
+BOOL eventlog_io_r_open_eventlog(const char *desc, EVENTLOG_R_OPEN_EVENTLOG *r_u,
+				 prs_struct *ps, int depth)
+{
+	if(r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "eventlog_io_r_open_eventlog");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!(smb_io_pol_hnd("log handle", &(r_u->handle), ps, depth)))
+		return False;
+
+	if(!(prs_ntstatus("status code", ps, depth, &r_u->status)))
+		return False;
+
+	return True;
+}
+
+BOOL eventlog_io_q_get_num_records(const char *desc, EVENTLOG_Q_GET_NUM_RECORDS *q_u,
+				   prs_struct *ps, int depth)
+{
+	if(q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "eventlog_io_q_get_num_records");
+	depth++;
+
+	if(!(prs_align(ps)))
+		return False;
+
+	if(!(smb_io_pol_hnd("log handle", &(q_u->handle), ps, depth)))
+		return False;
+    
+	return True;
+}
+
+BOOL eventlog_io_r_get_num_records(const char *desc, EVENTLOG_R_GET_NUM_RECORDS *r_u,
+				   prs_struct *ps, int depth)
+{
+	if(r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "eventlog_io_r_get_num_records");
+	depth++;
+
+	if(!(prs_align(ps)))
+		return False;
+
+	if(!(prs_uint32("num records", ps, depth, &(r_u->num_records))))
+		return False;
+
+	if(!(prs_ntstatus("status code", ps, depth, &r_u->status)))
+		return False;
+
+	return True;
+}
+
+BOOL eventlog_io_q_get_oldest_entry(const char *desc, EVENTLOG_Q_GET_OLDEST_ENTRY *q_u,
+				    prs_struct *ps, int depth)
+{
+	if(q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "eventlog_io_q_get_oldest_entry");
+	depth++;
+    
+	if(!(prs_align(ps)))
+		return False;
+
+	if(!(smb_io_pol_hnd("log handle", &(q_u->handle), ps, depth)))
+		return False;
+
+	return True;
+}
+
+BOOL eventlog_io_r_get_oldest_entry(const char *desc, EVENTLOG_R_GET_OLDEST_ENTRY *r_u,
+				    prs_struct *ps, int depth)
+{
+	if(r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "eventlog_io_r_get_oldest_entry");
+	depth++;
+
+	if(!(prs_align(ps)))
+		return False;
+
+	if(!(prs_uint32("oldest entry", ps, depth, &(r_u->oldest_entry))))
+		return False;
+
+	if(!(prs_ntstatus("status code", ps, depth, &r_u->status)))
+		return False;
+
+	return True;
+}
+
+BOOL eventlog_io_q_close_eventlog(const char *desc, EVENTLOG_Q_CLOSE_EVENTLOG *q_u,
+				  prs_struct *ps, int depth)
+{
+	if(q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "eventlog_io_q_close_eventlog");
+	depth++;
+    
+	if(!(prs_align(ps)))
+		return False;
+
+	if(!(smb_io_pol_hnd("log handle", &(q_u->handle), ps, depth)))
+		return False;
+
+	return True;
+}
+
+BOOL eventlog_io_r_close_eventlog(const char *desc, EVENTLOG_R_CLOSE_EVENTLOG *r_u,
+				  prs_struct *ps, int depth)
+{
+	if(r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "eventlog_io_r_close_eventlog");
+	depth++;
+
+	if(!(prs_align(ps)))
+		return False;
+
+	if(!(smb_io_pol_hnd("log handle", &(r_u->handle), ps, depth)))
+		return False;
+
+	if(!(prs_ntstatus("status code", ps, depth, &r_u->status)))
+		return False;
+
+	return True;
+}
+
+BOOL eventlog_io_q_read_eventlog(const char *desc, EVENTLOG_Q_READ_EVENTLOG *q_u,
+				 prs_struct *ps, int depth)
+{
+	if(q_u == NULL)
+		return False;
+
 	prs_debug(ps, depth, desc, "eventlog_io_q_read_eventlog");
 	depth++;
 
@@ -58,7 +246,7 @@
    DWORD sent_size -- sum of EVENTLOGRECORD lengths if records returned, 0 otherwise
    DWORD real_size -- 0 if records returned, otherwise length of next record to be returned
    WERROR status */
-bool eventlog_io_r_read_eventlog(const char *desc,
+BOOL eventlog_io_r_read_eventlog(const char *desc,
 				 EVENTLOG_Q_READ_EVENTLOG *q_u,
 				 EVENTLOG_R_READ_EVENTLOG *r_u,
 				 prs_struct *ps,
@@ -191,3 +379,55 @@
 
 	return True;
 }
+
+/** The windows client seems to be doing something funny with the file name
+   A call like
+      ClearEventLog(handle, "backup_file")
+   on the client side will result in the backup file name looking like this on the
+   server side:
+      \??\${CWD of client}\backup_file
+   If an absolute path gets specified, such as
+      ClearEventLog(handle, "C:\\temp\\backup_file")
+   then it is still mangled by the client into this:
+      \??\C:\temp\backup_file
+   when it is on the wire.
+   I'm not sure where the \?? is coming from, or why the ${CWD} of the client process
+   would be added in given that the backup file gets written on the server side. */
+
+BOOL eventlog_io_q_clear_eventlog(const char *desc, EVENTLOG_Q_CLEAR_EVENTLOG *q_u,
+				  prs_struct *ps, int depth)
+{
+	if(q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "eventlog_io_q_clear_eventlog");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	if(!(smb_io_pol_hnd("log handle", &(q_u->handle), ps, depth)))
+		return False;
+
+	if ( !prs_unistr4("backupfile", ps, depth, &q_u->backupfile) )
+		return False;
+
+	return True;
+
+}
+
+BOOL eventlog_io_r_clear_eventlog(const char *desc, EVENTLOG_R_CLEAR_EVENTLOG *r_u,
+				  prs_struct *ps, int depth)
+{
+	if(r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "eventlog_io_r_clear_eventlog");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	if(!(prs_ntstatus("status code", ps, depth, &r_u->status)))
+		return False;
+
+	return True;
+}

Copied: branches/samba/upstream/source/rpc_parse/parse_lsa.c (from rev 1928, branches/samba/upstream/source/rpc_parse/parse_lsa.c)
===================================================================
--- branches/samba/upstream/source/rpc_parse/parse_lsa.c	                        (rev 0)
+++ branches/samba/upstream/source/rpc_parse/parse_lsa.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,4222 @@
+/* 
+ *  Unix SMB/CIFS implementation.
+ *  RPC Pipe client / server routines
+ *  Copyright (C) Andrew Tridgell              1992-1997,
+ *  Copyright (C) Luke Kenneth Casson Leighton 1996-1997,
+ *  Copyright (C) Paul Ashton                       1997,
+ *  Copyright (C) Andrew Bartlett                   2002,
+ *  Copyright (C) Jim McDonough <jmcd at us.ibm.com>   2002.
+ *  Copyright (C) Gerald )Jerry) Carter             2005
+ *  
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_RPC_PARSE
+
+static BOOL lsa_io_trans_names(const char *desc, LSA_TRANS_NAME_ENUM *trn, prs_struct *ps, int depth);
+static BOOL lsa_io_trans_names2(const char *desc, LSA_TRANS_NAME_ENUM2 *trn, prs_struct *ps, int depth);
+
+/*******************************************************************
+ Inits a LSA_TRANS_NAME structure.
+********************************************************************/
+
+void init_lsa_trans_name(LSA_TRANS_NAME *trn, UNISTR2 *uni_name,
+			 uint16 sid_name_use, const char *name, uint32 idx)
+{
+	trn->sid_name_use = sid_name_use;
+	init_unistr2(uni_name, name, UNI_FLAGS_NONE);
+	init_uni_hdr(&trn->hdr_name, uni_name);
+	trn->domain_idx = idx;
+}
+
+/*******************************************************************
+ Reads or writes a LSA_TRANS_NAME structure.
+********************************************************************/
+
+static BOOL lsa_io_trans_name(const char *desc, LSA_TRANS_NAME *trn, prs_struct *ps, 
+			      int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_trans_name");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_uint16("sid_name_use", ps, depth, &trn->sid_name_use))
+		return False;
+	if(!prs_align(ps))
+		return False;
+	
+	if(!smb_io_unihdr ("hdr_name", &trn->hdr_name, ps, depth))
+		return False;
+	if(!prs_uint32("domain_idx  ", ps, depth, &trn->domain_idx))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a LSA_TRANS_NAME2 structure.
+********************************************************************/
+
+void init_lsa_trans_name2(LSA_TRANS_NAME2 *trn, UNISTR2 *uni_name,
+			 uint16 sid_name_use, const char *name, uint32 idx)
+{
+	trn->sid_name_use = sid_name_use;
+	init_unistr2(uni_name, name, UNI_FLAGS_NONE);
+	init_uni_hdr(&trn->hdr_name, uni_name);
+	trn->domain_idx = idx;
+	trn->unknown = 0;
+}
+
+/*******************************************************************
+ Reads or writes a LSA_TRANS_NAME2 structure.
+********************************************************************/
+
+static BOOL lsa_io_trans_name2(const char *desc, LSA_TRANS_NAME2 *trn, prs_struct *ps, 
+			      int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_trans_name2");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_uint16("sid_name_use", ps, depth, &trn->sid_name_use))
+		return False;
+	if(!prs_align(ps))
+		return False;
+	
+	if(!smb_io_unihdr ("hdr_name", &trn->hdr_name, ps, depth))
+		return False;
+	if(!prs_uint32("domain_idx  ", ps, depth, &trn->domain_idx))
+		return False;
+	if(!prs_uint32("unknown  ", ps, depth, &trn->unknown))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a DOM_R_REF structure.
+********************************************************************/
+
+static BOOL lsa_io_dom_r_ref(const char *desc, DOM_R_REF *dom, prs_struct *ps, int depth)
+{
+	unsigned int i;
+
+	prs_debug(ps, depth, desc, "lsa_io_dom_r_ref");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_uint32("num_ref_doms_1", ps, depth, &dom->num_ref_doms_1)) /* num referenced domains? */
+		return False;
+	if(!prs_uint32("ptr_ref_dom   ", ps, depth, &dom->ptr_ref_dom)) /* undocumented buffer pointer. */
+		return False;
+	if(!prs_uint32("max_entries   ", ps, depth, &dom->max_entries)) /* 32 - max number of entries */
+		return False;
+
+	SMB_ASSERT_ARRAY(dom->hdr_ref_dom, dom->num_ref_doms_1);
+
+	if (dom->ptr_ref_dom != 0) {
+
+		if(!prs_uint32("num_ref_doms_2", ps, depth, &dom->num_ref_doms_2)) /* 4 - num referenced domains? */
+			return False;
+
+		SMB_ASSERT_ARRAY(dom->ref_dom, dom->num_ref_doms_2);
+
+		for (i = 0; i < dom->num_ref_doms_1; i++) {
+			fstring t;
+
+			slprintf(t, sizeof(t) - 1, "dom_ref[%d] ", i);
+			if(!smb_io_unihdr(t, &dom->hdr_ref_dom[i].hdr_dom_name, ps, depth))
+				return False;
+
+			slprintf(t, sizeof(t) - 1, "sid_ptr[%d] ", i);
+			if(!prs_uint32(t, ps, depth, &dom->hdr_ref_dom[i].ptr_dom_sid))
+				return False;
+		}
+
+		for (i = 0; i < dom->num_ref_doms_2; i++) {
+			fstring t;
+
+			if (dom->hdr_ref_dom[i].hdr_dom_name.buffer != 0) {
+				slprintf(t, sizeof(t) - 1, "dom_ref[%d] ", i);
+				if(!smb_io_unistr2(t, &dom->ref_dom[i].uni_dom_name, True, ps, depth)) /* domain name unicode string */
+					return False;
+				if(!prs_align(ps))
+					return False;
+			}
+
+			if (dom->hdr_ref_dom[i].ptr_dom_sid != 0) {
+				slprintf(t, sizeof(t) - 1, "sid_ptr[%d] ", i);
+				if(!smb_io_dom_sid2(t, &dom->ref_dom[i].ref_dom, ps, depth)) /* referenced domain SIDs */
+					return False;
+			}
+		}
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ Inits an LSA_SEC_QOS structure.
+********************************************************************/
+
+void init_lsa_sec_qos(LSA_SEC_QOS *qos, uint16 imp_lev, uint8 ctxt, uint8 eff)
+{
+	DEBUG(5, ("init_lsa_sec_qos\n"));
+
+	qos->len = 0x0c; /* length of quality of service block, in bytes */
+	qos->sec_imp_level = imp_lev;
+	qos->sec_ctxt_mode = ctxt;
+	qos->effective_only = eff;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_SEC_QOS structure.
+********************************************************************/
+
+static BOOL lsa_io_sec_qos(const char *desc,  LSA_SEC_QOS *qos, prs_struct *ps, 
+			   int depth)
+{
+	uint32 start;
+
+	prs_debug(ps, depth, desc, "lsa_io_obj_qos");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	start = prs_offset(ps);
+
+	/* these pointers had _better_ be zero, because we don't know
+	   what they point to!
+	 */
+	if(!prs_uint32("len           ", ps, depth, &qos->len)) /* 0x18 - length (in bytes) inc. the length field. */
+		return False;
+	if(!prs_uint16("sec_imp_level ", ps, depth, &qos->sec_imp_level ))
+		return False;
+	if(!prs_uint8 ("sec_ctxt_mode ", ps, depth, &qos->sec_ctxt_mode ))
+		return False;
+	if(!prs_uint8 ("effective_only", ps, depth, &qos->effective_only))
+		return False;
+
+	if (qos->len != prs_offset(ps) - start) {
+		DEBUG(3,("lsa_io_sec_qos: length %x does not match size %x\n",
+		         qos->len, prs_offset(ps) - start));
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ Inits an LSA_OBJ_ATTR structure.
+********************************************************************/
+
+static void init_lsa_obj_attr(LSA_OBJ_ATTR *attr, uint32 attributes, LSA_SEC_QOS *qos)
+{
+	DEBUG(5, ("init_lsa_obj_attr\n"));
+
+	attr->len = 0x18; /* length of object attribute block, in bytes */
+	attr->ptr_root_dir = 0;
+	attr->ptr_obj_name = 0;
+	attr->attributes = attributes;
+	attr->ptr_sec_desc = 0;
+	
+	if (qos != NULL) {
+		attr->ptr_sec_qos = 1;
+		attr->sec_qos = qos;
+	} else {
+		attr->ptr_sec_qos = 0;
+		attr->sec_qos = NULL;
+	}
+}
+
+/*******************************************************************
+ Reads or writes an LSA_OBJ_ATTR structure.
+********************************************************************/
+
+static BOOL lsa_io_obj_attr(const char *desc, LSA_OBJ_ATTR *attr, prs_struct *ps, 
+			    int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_obj_attr");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	/* these pointers had _better_ be zero, because we don't know
+	   what they point to!
+	 */
+	if(!prs_uint32("len         ", ps, depth, &attr->len)) /* 0x18 - length (in bytes) inc. the length field. */
+		return False;
+	if(!prs_uint32("ptr_root_dir", ps, depth, &attr->ptr_root_dir)) /* 0 - root directory (pointer) */
+		return False;
+	if(!prs_uint32("ptr_obj_name", ps, depth, &attr->ptr_obj_name)) /* 0 - object name (pointer) */
+		return False;
+	if(!prs_uint32("attributes  ", ps, depth, &attr->attributes)) /* 0 - attributes (undocumented) */
+		return False;
+	if(!prs_uint32("ptr_sec_desc", ps, depth, &attr->ptr_sec_desc)) /* 0 - security descriptior (pointer) */
+		return False;
+	if(!prs_uint32("ptr_sec_qos ", ps, depth, &attr->ptr_sec_qos )) /* security quality of service (pointer) */
+		return False;
+
+	if (attr->ptr_sec_qos != 0) {
+		if (UNMARSHALLING(ps))
+			if (!(attr->sec_qos = PRS_ALLOC_MEM(ps,LSA_SEC_QOS,1)))
+				return False;
+
+		if(!lsa_io_sec_qos("sec_qos", attr->sec_qos, ps, depth))
+			return False;
+	}
+
+	return True;
+}
+
+
+/*******************************************************************
+ Inits an LSA_Q_OPEN_POL structure.
+********************************************************************/
+
+void init_q_open_pol(LSA_Q_OPEN_POL *in, uint16 system_name,
+		     uint32 attributes, uint32 desired_access,
+		     LSA_SEC_QOS *qos)
+{
+	DEBUG(5, ("init_open_pol: attr:%d da:%d\n", attributes, 
+		  desired_access));
+
+	in->ptr = 1; /* undocumented pointer */
+
+	in->des_access = desired_access;
+
+	in->system_name = system_name;
+	init_lsa_obj_attr(&in->attr, attributes, qos);
+}
+
+/*******************************************************************
+ Reads or writes an LSA_Q_OPEN_POL structure.
+********************************************************************/
+
+BOOL lsa_io_q_open_pol(const char *desc, LSA_Q_OPEN_POL *in, prs_struct *ps, 
+		       int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_open_pol");
+	depth++;
+
+	if(!prs_uint32("ptr       ", ps, depth, &in->ptr))
+		return False;
+	if(!prs_uint16("system_name", ps, depth, &in->system_name))
+		return False;
+	if(!prs_align( ps ))
+		return False;
+
+	if(!lsa_io_obj_attr("", &in->attr, ps, depth))
+		return False;
+
+	if(!prs_uint32("des_access", ps, depth, &in->des_access))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_R_OPEN_POL structure.
+********************************************************************/
+
+BOOL lsa_io_r_open_pol(const char *desc, LSA_R_OPEN_POL *out, prs_struct *ps, 
+		       int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_open_pol");
+	depth++;
+
+	if(!smb_io_pol_hnd("", &out->pol, ps, depth))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits an LSA_Q_OPEN_POL2 structure.
+********************************************************************/
+
+void init_q_open_pol2(LSA_Q_OPEN_POL2 *in, const char *server_name,
+			uint32 attributes, uint32 desired_access,
+			LSA_SEC_QOS *qos)
+{
+	DEBUG(5, ("init_q_open_pol2: attr:%d da:%d\n", attributes, 
+		  desired_access));
+
+	in->ptr = 1; /* undocumented pointer */
+
+	in->des_access = desired_access;
+
+	init_unistr2(&in->uni_server_name, server_name, UNI_STR_TERMINATE);
+
+	init_lsa_obj_attr(&in->attr, attributes, qos);
+}
+
+/*******************************************************************
+ Reads or writes an LSA_Q_OPEN_POL2 structure.
+********************************************************************/
+
+BOOL lsa_io_q_open_pol2(const char *desc, LSA_Q_OPEN_POL2 *in, prs_struct *ps, 
+			int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_open_pol2");
+	depth++;
+
+	if(!prs_uint32("ptr       ", ps, depth, &in->ptr))
+		return False;
+
+	if(!smb_io_unistr2 ("", &in->uni_server_name, in->ptr, ps, depth))
+		return False;
+	if(!lsa_io_obj_attr("", &in->attr, ps, depth))
+		return False;
+
+	if(!prs_uint32("des_access", ps, depth, &in->des_access))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_R_OPEN_POL2 structure.
+********************************************************************/
+
+BOOL lsa_io_r_open_pol2(const char *desc, LSA_R_OPEN_POL2 *out, prs_struct *ps, 
+			int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_open_pol2");
+	depth++;
+
+	if(!smb_io_pol_hnd("", &out->pol, ps, depth))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+makes an LSA_Q_QUERY_SEC_OBJ structure.
+********************************************************************/
+
+void init_q_query_sec_obj(LSA_Q_QUERY_SEC_OBJ *in, const POLICY_HND *hnd, 
+			  uint32 sec_info)
+{
+	DEBUG(5, ("init_q_query_sec_obj\n"));
+
+	in->pol = *hnd;
+	in->sec_info = sec_info;
+
+	return;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_Q_QUERY_SEC_OBJ structure.
+********************************************************************/
+
+BOOL lsa_io_q_query_sec_obj(const char *desc, LSA_Q_QUERY_SEC_OBJ *in, 
+			    prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_query_sec_obj");
+	depth++;
+
+	if (!smb_io_pol_hnd("", &in->pol, ps, depth))
+		return False;
+
+	if (!prs_uint32("sec_info", ps, depth, &in->sec_info))
+		return False;
+
+	return True;
+} 
+
+/*******************************************************************
+ Reads or writes a LSA_R_QUERY_SEC_OBJ structure.
+********************************************************************/
+
+BOOL lsa_io_r_query_sec_obj(const char *desc, LSA_R_QUERY_SEC_OBJ *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_query_sec_obj");
+	depth++;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("ptr", ps, depth, &out->ptr))
+		return False;
+
+	if (out->ptr != 0) {
+		if (!sec_io_desc_buf("sec", &out->buf, ps, depth))
+			return False;
+	}
+
+	if (!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits an LSA_Q_QUERY_INFO structure.
+********************************************************************/
+
+void init_q_query(LSA_Q_QUERY_INFO *in, POLICY_HND *hnd, uint16 info_class)
+{
+	DEBUG(5, ("init_q_query\n"));
+
+	memcpy(&in->pol, hnd, sizeof(in->pol));
+
+	in->info_class = info_class;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_Q_QUERY_INFO structure.
+********************************************************************/
+
+BOOL lsa_io_q_query(const char *desc, LSA_Q_QUERY_INFO *in, prs_struct *ps, 
+		    int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_query");
+	depth++;
+
+	if(!smb_io_pol_hnd("", &in->pol, ps, depth))
+		return False;
+
+	if(!prs_uint16("info_class", ps, depth, &in->info_class))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+makes an LSA_Q_ENUM_TRUST_DOM structure.
+********************************************************************/
+BOOL init_q_enum_trust_dom(LSA_Q_ENUM_TRUST_DOM * q_e, POLICY_HND *pol,
+			   uint32 enum_context, uint32 preferred_len)
+{
+	DEBUG(5, ("init_q_enum_trust_dom\n"));
+
+	q_e->pol = *pol;
+	q_e->enum_context = enum_context;
+	q_e->preferred_len = preferred_len;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_Q_ENUM_TRUST_DOM structure.
+********************************************************************/
+
+BOOL lsa_io_q_enum_trust_dom(const char *desc, LSA_Q_ENUM_TRUST_DOM *q_e, 
+			     prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_enum_trust_dom");
+	depth++;
+
+	if(!smb_io_pol_hnd("", &q_e->pol, ps, depth))
+		return False;
+
+	if(!prs_uint32("enum_context ", ps, depth, &q_e->enum_context))
+		return False;
+	if(!prs_uint32("preferred_len", ps, depth, &q_e->preferred_len))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits an LSA_R_ENUM_TRUST_DOM structure.
+********************************************************************/
+
+void init_r_enum_trust_dom(TALLOC_CTX *ctx, LSA_R_ENUM_TRUST_DOM *out,
+			   uint32 enum_context, uint32 num_domains,
+			   struct trustdom_info **td)
+{
+	unsigned int i;
+
+        DEBUG(5, ("init_r_enum_trust_dom\n"));
+	
+        out->enum_context  = enum_context;
+	out->count         = num_domains;
+			
+	if ( num_domains != 0 ) {
+	
+		/* allocate container memory */
+		
+		out->domlist = TALLOC_P( ctx, DOMAIN_LIST );
+
+		if ( !out->domlist ) {
+			out->status = NT_STATUS_NO_MEMORY;
+			return;
+		}
+
+		if (out->count) {
+			out->domlist->domains = TALLOC_ARRAY( ctx, DOMAIN_INFO,
+						      out->count );
+			if ( !out->domlist->domains ) {
+				out->status = NT_STATUS_NO_MEMORY;
+				return;
+			}
+		} else {		
+			out->domlist->domains = NULL;
+		}
+	
+		out->domlist->count = out->count;
+		
+		/* initialize the list of domains and their sid */
+		
+		for (i = 0; i < num_domains; i++) {	
+			smb_ucs2_t *name;
+			if ( !(out->domlist->domains[i].sid =
+			       TALLOC_P(ctx, DOM_SID2)) ) {
+				out->status = NT_STATUS_NO_MEMORY;
+				return;
+			}
+				
+			init_dom_sid2(out->domlist->domains[i].sid,
+				      &(td[i])->sid);
+			if (push_ucs2_talloc(ctx, &name, (td[i])->name) == (size_t)-1){
+				out->status = NT_STATUS_NO_MEMORY;
+				return;
+			}
+			init_unistr4_w(ctx, &out->domlist->domains[i].name,
+				       name);
+		}
+	}
+
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL lsa_io_domain_list( const char *desc, prs_struct *ps, int depth, DOMAIN_LIST *domlist )
+{
+	int i;
+	
+	prs_debug(ps, depth, desc, "lsa_io_domain_list");
+	depth++;
+
+	if(!prs_uint32("count", ps, depth, &domlist->count))
+		return False;
+
+	if ( domlist->count == 0 )
+		return True;
+		
+	if ( UNMARSHALLING(ps) ) {
+		if ( !(domlist->domains = PRS_ALLOC_MEM( ps, DOMAIN_INFO, domlist->count )) )
+			return False;
+	}
+	
+	/* headers */
+	
+	for ( i=0; i<domlist->count; i++ ) {
+		if ( !prs_unistr4_hdr("name_header", ps, depth, &domlist->domains[i].name) )
+			return False;
+		if ( !smb_io_dom_sid2_p("sid_header", ps, depth, &domlist->domains[i].sid) )
+			return False;
+	}
+
+	/* data */
+	
+	for ( i=0; i<domlist->count; i++ ) {
+		if ( !prs_unistr4_str("name", ps, depth, &domlist->domains[i].name) )
+			return False;
+		if( !smb_io_dom_sid2("sid", domlist->domains[i].sid, ps, depth) )
+			return False;
+	}
+	
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_R_ENUM_TRUST_DOM structure.
+********************************************************************/
+
+BOOL lsa_io_r_enum_trust_dom(const char *desc, LSA_R_ENUM_TRUST_DOM *out, 
+			     prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_enum_trust_dom");
+	depth++;
+
+	if(!prs_uint32("enum_context", ps, depth, &out->enum_context))
+		return False;
+
+	if(!prs_uint32("count", ps, depth, &out->count))
+		return False;
+
+	if ( !prs_pointer("trusted_domains", ps, depth, (void*)&out->domlist, sizeof(DOMAIN_LIST), (PRS_POINTER_CAST)lsa_io_domain_list))
+		return False;
+		
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL lsa_io_dom_query_1(const char *desc, DOM_QUERY_1 *d_q, prs_struct *ps, int depth)
+{
+	if (d_q == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "lsa_io_dom_query_1");
+	depth++;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("percent_full", ps, depth, &d_q->percent_full))
+		return False;
+	if (!prs_uint32("log_size", ps, depth, &d_q->log_size))
+		return False;
+	if (!smb_io_nttime("retention_time", ps, depth, &d_q->retention_time))
+		return False;
+	if (!prs_uint8("shutdown_in_progress", ps, depth, &d_q->shutdown_in_progress))
+		return False;
+	if (!smb_io_nttime("time_to_shutdown", ps, depth, &d_q->time_to_shutdown))
+		return False;
+	if (!prs_uint32("next_audit_record", ps, depth, &d_q->next_audit_record))
+		return False;
+	if (!prs_uint32("unknown", ps, depth, &d_q->unknown))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL lsa_io_dom_query_2(const char *desc, DOM_QUERY_2 *d_q, prs_struct *ps, int depth)
+{
+	if (d_q == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "lsa_io_dom_query_2");
+	depth++;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("auditing_enabled", ps, depth, &d_q->auditing_enabled))
+		return False;
+	if (!prs_uint32("ptr   ", ps, depth, &d_q->ptr))
+		return False;
+	if (!prs_uint32("count1", ps, depth, &d_q->count1))
+		return False;
+
+	if (d_q->ptr) {
+
+		if (!prs_uint32("count2", ps, depth, &d_q->count2))
+			return False;
+
+		if (d_q->count1 != d_q->count2)
+			return False;
+
+		if (UNMARSHALLING(ps)) {
+			if (d_q->count2) {
+				d_q->auditsettings = TALLOC_ZERO_ARRAY(ps->mem_ctx, uint32, d_q->count2);
+				if (!d_q->auditsettings) {
+					return False;
+				}
+			} else {
+				d_q->auditsettings = NULL;
+			}
+		}
+
+		if (!prs_uint32s(False, "auditsettings", ps, depth, d_q->auditsettings, d_q->count2))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a dom query structure.
+********************************************************************/
+
+static BOOL lsa_io_dom_query_3(const char *desc, DOM_QUERY_3 *d_q, prs_struct *ps, int depth)
+{
+	if (d_q == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "lsa_io_dom_query_3");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint16("uni_dom_max_len", ps, depth, &d_q->uni_dom_max_len)) /* domain name string length * 2 */
+		return False;
+	if(!prs_uint16("uni_dom_str_len", ps, depth, &d_q->uni_dom_str_len)) /* domain name string length * 2 */
+		return False;
+
+	if(!prs_uint32("buffer_dom_name", ps, depth, &d_q->buffer_dom_name)) /* undocumented domain name string buffer pointer */
+		return False;
+	if(!prs_uint32("buffer_dom_sid ", ps, depth, &d_q->buffer_dom_sid)) /* undocumented domain SID string buffer pointer */
+		return False;
+
+	if(!smb_io_unistr2("unistr2", &d_q->uni_domain_name, d_q->buffer_dom_name, ps, depth)) /* domain name (unicode string) */
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if (d_q->buffer_dom_sid != 0) {
+		if(!smb_io_dom_sid2("", &d_q->dom_sid, ps, depth)) /* domain SID */
+			return False;
+	} else {
+		memset((char *)&d_q->dom_sid, '\0', sizeof(d_q->dom_sid));
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a dom query structure.
+********************************************************************/
+
+static BOOL lsa_io_dom_query_5(const char *desc, DOM_QUERY_5 *d_q, prs_struct *ps, int depth)
+{
+	return lsa_io_dom_query_3("", d_q, ps, depth);
+}
+
+/*******************************************************************
+ Reads or writes a dom query structure.
+********************************************************************/
+
+static BOOL lsa_io_dom_query_6(const char *desc, DOM_QUERY_6 *d_q, prs_struct *ps, int depth)
+{
+	if (d_q == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "lsa_io_dom_query_6");
+	depth++;
+
+	if (!prs_uint16("server_role", ps, depth, &d_q->server_role))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a dom query structure.
+********************************************************************/
+
+static BOOL lsa_io_dom_query_10(const char *desc, DOM_QUERY_10 *d_q, prs_struct *ps, int depth)
+{
+	if (d_q == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "lsa_io_dom_query_10");
+	depth++;
+
+	if (!prs_uint8("shutdown_on_full", ps, depth, &d_q->shutdown_on_full))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a dom query structure.
+********************************************************************/
+
+static BOOL lsa_io_dom_query_11(const char *desc, DOM_QUERY_11 *d_q, prs_struct *ps, int depth)
+{
+	if (d_q == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "lsa_io_dom_query_11");
+	depth++;
+
+	if (!prs_uint16("unknown", ps, depth, &d_q->unknown))
+		return False;
+	if (!prs_uint8("shutdown_on_full", ps, depth, &d_q->shutdown_on_full))
+		return False;
+	if (!prs_uint8("log_is_full", ps, depth, &d_q->log_is_full))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_DNS_DOM_INFO structure.
+********************************************************************/
+
+BOOL lsa_io_dom_query_12(const char *desc, DOM_QUERY_12 *info, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_dom_query_12");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	if(!smb_io_unihdr("nb_name", &info->hdr_nb_dom_name, ps, depth))
+		return False;
+	if(!smb_io_unihdr("dns_name", &info->hdr_dns_dom_name, ps, depth))
+		return False;
+	if(!smb_io_unihdr("forest", &info->hdr_forest_name, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+	if ( !smb_io_uuid("dom_guid", &info->dom_guid, ps, depth) )
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("dom_sid", ps, depth, &info->ptr_dom_sid))
+		return False;
+
+	if(!smb_io_unistr2("nb_name", &info->uni_nb_dom_name,
+			   info->hdr_nb_dom_name.buffer, ps, depth))
+		return False;
+	if(!smb_io_unistr2("dns_name", &info->uni_dns_dom_name, 
+			   info->hdr_dns_dom_name.buffer, ps, depth))
+		return False;
+	if(!smb_io_unistr2("forest", &info->uni_forest_name, 
+			   info->hdr_forest_name.buffer, ps, depth))
+		return False;
+
+	if(!smb_io_dom_sid2("dom_sid", &info->dom_sid, ps, depth))
+		return False;
+
+	return True;
+	
+}
+
+/*******************************************************************
+ Inits an LSA_Q_QUERY_INFO structure.
+********************************************************************/
+
+void init_q_set(LSA_Q_SET_INFO *in, POLICY_HND *hnd, uint16 info_class, LSA_INFO_CTR ctr)
+{
+	DEBUG(5,("init_q_set\n"));
+
+	in->info_class = info_class;
+
+	in->pol = *hnd;
+
+	in->ctr = ctr;
+	in->ctr.info_class = info_class;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL lsa_io_query_info_ctr2(const char *desc, prs_struct *ps, int depth, LSA_INFO_CTR2 *ctr)
+{
+	prs_debug(ps, depth, desc, "lsa_io_query_info_ctr2");
+	depth++;
+
+	if(!prs_uint16("info_class", ps, depth, &ctr->info_class))
+		return False;
+
+	switch (ctr->info_class) {
+	case 1:
+		if(!lsa_io_dom_query_1("", &ctr->info.id1, ps, depth))
+			return False;
+		break;
+	case 2:
+		if(!lsa_io_dom_query_2("", &ctr->info.id2, ps, depth))
+			return False;
+		break;
+	case 3:
+		if(!lsa_io_dom_query_3("", &ctr->info.id3, ps, depth))
+			return False;
+		break;
+	case 5:
+		if(!lsa_io_dom_query_5("", &ctr->info.id5, ps, depth))
+			return False;
+		break;
+	case 6:
+		if(!lsa_io_dom_query_6("", &ctr->info.id6, ps, depth))
+			return False;
+		break;
+	case 10:
+		if(!lsa_io_dom_query_10("", &ctr->info.id10, ps, depth))
+			return False;
+		break;
+	case 11:
+		if(!lsa_io_dom_query_11("", &ctr->info.id11, ps, depth))
+			return False;
+		break;
+	case 12:
+		if(!lsa_io_dom_query_12("", &ctr->info.id12, ps, depth))
+			return False;
+		break;
+	default:
+		DEBUG(0,("invalid info_class: %d\n", ctr->info_class));
+		return False;
+		break;
+	}
+
+	return True;
+}
+
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL lsa_io_query_info_ctr(const char *desc, prs_struct *ps, int depth, LSA_INFO_CTR *ctr)
+{
+	prs_debug(ps, depth, desc, "lsa_io_query_info_ctr");
+	depth++;
+
+	if(!prs_uint16("info_class", ps, depth, &ctr->info_class))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	switch (ctr->info_class) {
+	case 1:
+		if(!lsa_io_dom_query_1("", &ctr->info.id1, ps, depth))
+			return False;
+		break;
+	case 2:
+		if(!lsa_io_dom_query_2("", &ctr->info.id2, ps, depth))
+			return False;
+		break;
+	case 3:
+		if(!lsa_io_dom_query_3("", &ctr->info.id3, ps, depth))
+			return False;
+		break;
+	case 5:
+		if(!lsa_io_dom_query_5("", &ctr->info.id5, ps, depth))
+			return False;
+		break;
+	case 6:
+		if(!lsa_io_dom_query_6("", &ctr->info.id6, ps, depth))
+			return False;
+		break;
+	case 10:
+		if(!lsa_io_dom_query_10("", &ctr->info.id10, ps, depth))
+			return False;
+		break;
+	case 11:
+		if(!lsa_io_dom_query_11("", &ctr->info.id11, ps, depth))
+			return False;
+		break;
+	default:
+		DEBUG(0,("invalid info_class: %d\n", ctr->info_class));
+		return False;
+		break;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_R_QUERY_INFO structure.
+********************************************************************/
+
+BOOL lsa_io_r_query(const char *desc, LSA_R_QUERY_INFO *out, prs_struct *ps, int depth)
+{
+
+	prs_debug(ps, depth, desc, "lsa_io_r_query");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("dom_ptr", ps, depth, &out->dom_ptr))
+		return False;
+
+	if (out->dom_ptr) {
+
+		if(!lsa_io_query_info_ctr("", ps, depth, &out->ctr))
+			return False;
+	}
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_Q_SET_INFO structure.
+********************************************************************/
+
+BOOL lsa_io_q_set(const char *desc, LSA_Q_SET_INFO *in, prs_struct *ps, 
+		  int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_set");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("", &in->pol, ps, depth))
+		return False;
+
+	if(!prs_uint16("info_class", ps, depth, &in->info_class))
+		return False;
+
+	if(!lsa_io_query_info_ctr("", ps, depth, &in->ctr))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_R_SET_INFO structure.
+********************************************************************/
+
+BOOL lsa_io_r_set(const char *desc, LSA_R_SET_INFO *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_set");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a LSA_SID_ENUM structure.
+********************************************************************/
+
+static void init_lsa_sid_enum(TALLOC_CTX *mem_ctx, LSA_SID_ENUM *sen, 
+		       int num_entries, const DOM_SID *sids)
+{
+	int i;
+
+	DEBUG(5, ("init_lsa_sid_enum\n"));
+
+	sen->num_entries  = num_entries;
+	sen->ptr_sid_enum = (num_entries != 0);
+	sen->num_entries2 = num_entries;
+
+	/* Allocate memory for sids and sid pointers */
+
+	if (num_entries) {
+		if ((sen->ptr_sid = TALLOC_ZERO_ARRAY(mem_ctx, uint32, num_entries )) == NULL) {
+			DEBUG(3, ("init_lsa_sid_enum(): out of memory for ptr_sid\n"));
+			return;
+		}
+
+		if ((sen->sid = TALLOC_ZERO_ARRAY(mem_ctx, DOM_SID2, num_entries)) == NULL) {
+			DEBUG(3, ("init_lsa_sid_enum(): out of memory for sids\n"));
+			return;
+		}
+	}
+
+	/* Copy across SIDs and SID pointers */
+
+	for (i = 0; i < num_entries; i++) {
+		sen->ptr_sid[i] = 1;
+		init_dom_sid2(&sen->sid[i], &sids[i]);
+	}
+}
+
+/*******************************************************************
+ Reads or writes a LSA_SID_ENUM structure.
+********************************************************************/
+
+static BOOL lsa_io_sid_enum(const char *desc, LSA_SID_ENUM *sen, prs_struct *ps, 
+			    int depth)
+{
+	unsigned int i;
+
+	prs_debug(ps, depth, desc, "lsa_io_sid_enum");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_uint32("num_entries ", ps, depth, &sen->num_entries))
+		return False;
+	if(!prs_uint32("ptr_sid_enum", ps, depth, &sen->ptr_sid_enum))
+		return False;
+
+	/*
+	   if the ptr is NULL, leave here. checked from a real w2k trace.
+	   JFM, 11/23/2001
+	 */
+	
+	if (sen->ptr_sid_enum==0)
+		return True;
+
+	if(!prs_uint32("num_entries2", ps, depth, &sen->num_entries2))
+		return False;
+
+	/* Mallocate memory if we're unpacking from the wire */
+
+	if (UNMARSHALLING(ps) && sen->num_entries) {
+		if ((sen->ptr_sid = PRS_ALLOC_MEM( ps, uint32, sen->num_entries)) == NULL) {
+			DEBUG(3, ("init_lsa_sid_enum(): out of memory for "
+				  "ptr_sid\n"));
+			return False;
+		}
+
+		if ((sen->sid = PRS_ALLOC_MEM( ps, DOM_SID2, sen->num_entries)) == NULL) {
+			DEBUG(3, ("init_lsa_sid_enum(): out of memory for "
+				  "sids\n"));
+			return False;
+		}
+	}
+
+	for (i = 0; i < sen->num_entries; i++) {	
+		fstring temp;
+
+		slprintf(temp, sizeof(temp) - 1, "ptr_sid[%d]", i);
+		if(!prs_uint32(temp, ps, depth, &sen->ptr_sid[i])) {
+			return False;
+		}
+	}
+
+	for (i = 0; i < sen->num_entries; i++) {
+		fstring temp;
+
+		slprintf(temp, sizeof(temp) - 1, "sid[%d]", i);
+		if(!smb_io_dom_sid2(temp, &sen->sid[i], ps, depth)) {
+			return False;
+		}
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ Inits an LSA_R_ENUM_TRUST_DOM structure.
+********************************************************************/
+
+void init_q_lookup_sids(TALLOC_CTX *mem_ctx, LSA_Q_LOOKUP_SIDS *q_l, 
+			POLICY_HND *hnd, int num_sids, const DOM_SID *sids,
+			uint16 level)
+{
+	DEBUG(5, ("init_q_lookup_sids\n"));
+
+	ZERO_STRUCTP(q_l);
+
+	memcpy(&q_l->pol, hnd, sizeof(q_l->pol));
+	init_lsa_sid_enum(mem_ctx, &q_l->sids, num_sids, sids);
+	
+	q_l->level = level;
+}
+
+/*******************************************************************
+ Reads or writes a LSA_Q_LOOKUP_SIDS structure.
+********************************************************************/
+
+BOOL lsa_io_q_lookup_sids(const char *desc, LSA_Q_LOOKUP_SIDS *q_s, prs_struct *ps,
+			  int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_lookup_sids");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!smb_io_pol_hnd("pol_hnd", &q_s->pol, ps, depth)) /* policy handle */
+		return False;
+	if(!lsa_io_sid_enum("sids   ", &q_s->sids, ps, depth)) /* sids to be looked up */
+		return False;
+	if(!lsa_io_trans_names("names  ", &q_s->names, ps, depth)) /* translated names */
+		return False;
+
+	if(!prs_uint16("level", ps, depth, &q_s->level)) /* lookup level */
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("mapped_count", ps, depth, &q_s->mapped_count))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a LSA_Q_LOOKUP_SIDS2 structure.
+********************************************************************/
+
+BOOL lsa_io_q_lookup_sids2(const char *desc, LSA_Q_LOOKUP_SIDS2 *q_s, prs_struct *ps,
+			  int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_lookup_sids2");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!smb_io_pol_hnd("pol_hnd", &q_s->pol, ps, depth)) /* policy handle */
+		return False;
+	if(!lsa_io_sid_enum("sids   ", &q_s->sids, ps, depth)) /* sids to be looked up */
+		return False;
+	if(!lsa_io_trans_names2("names  ", &q_s->names, ps, depth)) /* translated names */
+		return False;
+
+	if(!prs_uint16("level", ps, depth, &q_s->level)) /* lookup level */
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("mapped_count", ps, depth, &q_s->mapped_count))
+		return False;
+	if(!prs_uint32("unknown1", ps, depth, &q_s->unknown1))
+		return False;
+	if(!prs_uint32("unknown2", ps, depth, &q_s->unknown2))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a LSA_Q_LOOKUP_SIDS3 structure.
+********************************************************************/
+
+BOOL lsa_io_q_lookup_sids3(const char *desc, LSA_Q_LOOKUP_SIDS3 *q_s, prs_struct *ps,
+			  int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_lookup_sids3");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!lsa_io_sid_enum("sids   ", &q_s->sids, ps, depth)) /* sids to be looked up */
+		return False;
+	if(!lsa_io_trans_names2("names  ", &q_s->names, ps, depth)) /* translated names */
+		return False;
+
+	if(!prs_uint16("level", ps, depth, &q_s->level)) /* lookup level */
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("mapped_count", ps, depth, &q_s->mapped_count))
+		return False;
+	if(!prs_uint32("unknown1", ps, depth, &q_s->unknown1))
+		return False;
+	if(!prs_uint32("unknown2", ps, depth, &q_s->unknown2))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL lsa_io_trans_names(const char *desc, LSA_TRANS_NAME_ENUM *trn,
+                prs_struct *ps, int depth)
+{
+	unsigned int i;
+
+	prs_debug(ps, depth, desc, "lsa_io_trans_names");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+   
+	if(!prs_uint32("num_entries    ", ps, depth, &trn->num_entries))
+		return False;
+	if(!prs_uint32("ptr_trans_names", ps, depth, &trn->ptr_trans_names))
+		return False;
+
+	if (trn->ptr_trans_names != 0) {
+		if(!prs_uint32("num_entries2   ", ps, depth, 
+			       &trn->num_entries2))
+			return False;
+
+		if (trn->num_entries2 != trn->num_entries) {
+			/* RPC fault */
+			return False;
+		}
+
+		if (UNMARSHALLING(ps) && trn->num_entries2) {
+			if ((trn->name = PRS_ALLOC_MEM(ps, LSA_TRANS_NAME, trn->num_entries2)) == NULL) {
+				return False;
+			}
+
+			if ((trn->uni_name = PRS_ALLOC_MEM(ps, UNISTR2, trn->num_entries2)) == NULL) {
+				return False;
+			}
+		}
+
+		for (i = 0; i < trn->num_entries2; i++) {
+			fstring t;
+			slprintf(t, sizeof(t) - 1, "name[%d] ", i);
+
+			if(!lsa_io_trans_name(t, &trn->name[i], ps, depth)) /* translated name */
+				return False;
+		}
+
+		for (i = 0; i < trn->num_entries2; i++) {
+			fstring t;
+			slprintf(t, sizeof(t) - 1, "name[%d] ", i);
+
+			if(!smb_io_unistr2(t, &trn->uni_name[i], trn->name[i].hdr_name.buffer, ps, depth))
+				return False;
+			if(!prs_align(ps))
+				return False;
+		}
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL lsa_io_trans_names2(const char *desc, LSA_TRANS_NAME_ENUM2 *trn,
+                prs_struct *ps, int depth)
+{
+	unsigned int i;
+
+	prs_debug(ps, depth, desc, "lsa_io_trans_names2");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+   
+	if(!prs_uint32("num_entries    ", ps, depth, &trn->num_entries))
+		return False;
+	if(!prs_uint32("ptr_trans_names", ps, depth, &trn->ptr_trans_names))
+		return False;
+
+	if (trn->ptr_trans_names != 0) {
+		if(!prs_uint32("num_entries2   ", ps, depth, 
+			       &trn->num_entries2))
+			return False;
+
+		if (trn->num_entries2 != trn->num_entries) {
+			/* RPC fault */
+			return False;
+		}
+
+		if (UNMARSHALLING(ps) && trn->num_entries2) {
+			if ((trn->name = PRS_ALLOC_MEM(ps, LSA_TRANS_NAME2, trn->num_entries2)) == NULL) {
+				return False;
+			}
+
+			if ((trn->uni_name = PRS_ALLOC_MEM(ps, UNISTR2, trn->num_entries2)) == NULL) {
+				return False;
+			}
+		}
+
+		for (i = 0; i < trn->num_entries2; i++) {
+			fstring t;
+			slprintf(t, sizeof(t) - 1, "name[%d] ", i);
+
+			if(!lsa_io_trans_name2(t, &trn->name[i], ps, depth)) /* translated name */
+				return False;
+		}
+
+		for (i = 0; i < trn->num_entries2; i++) {
+			fstring t;
+			slprintf(t, sizeof(t) - 1, "name[%d] ", i);
+
+			if(!smb_io_unistr2(t, &trn->uni_name[i], trn->name[i].hdr_name.buffer, ps, depth))
+				return False;
+			if(!prs_align(ps))
+				return False;
+		}
+	}
+
+	return True;
+}
+
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL lsa_io_r_lookup_sids(const char *desc, LSA_R_LOOKUP_SIDS *r_s, 
+			  prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_lookup_sids");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_uint32("ptr_dom_ref", ps, depth, &r_s->ptr_dom_ref))
+		return False;
+
+	if (r_s->ptr_dom_ref != 0)
+		if(!lsa_io_dom_r_ref ("dom_ref", r_s->dom_ref, ps, depth)) /* domain reference info */
+			return False;
+
+	if(!lsa_io_trans_names("names  ", &r_s->names, ps, depth)) /* translated names */
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("mapped_count", ps, depth, &r_s->mapped_count))
+		return False;
+
+	if(!prs_ntstatus("status      ", ps, depth, &r_s->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL lsa_io_r_lookup_sids2(const char *desc, LSA_R_LOOKUP_SIDS2 *r_s, 
+			  prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_lookup_sids2");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_uint32("ptr_dom_ref", ps, depth, &r_s->ptr_dom_ref))
+		return False;
+
+	if (r_s->ptr_dom_ref != 0)
+		if(!lsa_io_dom_r_ref ("dom_ref", r_s->dom_ref, ps, depth)) /* domain reference info */
+			return False;
+
+	if(!lsa_io_trans_names2("names  ", &r_s->names, ps, depth)) /* translated names */
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("mapped_count", ps, depth, &r_s->mapped_count))
+		return False;
+
+	if(!prs_ntstatus("status      ", ps, depth, &r_s->status))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL lsa_io_r_lookup_sids3(const char *desc, LSA_R_LOOKUP_SIDS3 *r_s, 
+			  prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_lookup_sids3");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_uint32("ptr_dom_ref", ps, depth, &r_s->ptr_dom_ref))
+		return False;
+
+	if (r_s->ptr_dom_ref != 0)
+		if(!lsa_io_dom_r_ref ("dom_ref", r_s->dom_ref, ps, depth)) /* domain reference info */
+			return False;
+
+	if(!lsa_io_trans_names2("names  ", &r_s->names, ps, depth)) /* translated names */
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("mapped_count", ps, depth, &r_s->mapped_count))
+		return False;
+
+	if(!prs_ntstatus("status      ", ps, depth, &r_s->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+makes a structure.
+********************************************************************/
+
+void init_q_lookup_names(TALLOC_CTX *mem_ctx, LSA_Q_LOOKUP_NAMES *q_l, 
+			 POLICY_HND *hnd, int num_names, const char **names)
+{
+	unsigned int i;
+
+	DEBUG(5, ("init_q_lookup_names\n"));
+
+	ZERO_STRUCTP(q_l);
+
+	q_l->pol = *hnd;
+	q_l->num_entries = num_names;
+	q_l->num_entries2 = num_names;
+	q_l->lookup_level = 1;
+
+	if (num_names) {
+		if ((q_l->uni_name = TALLOC_ZERO_ARRAY(mem_ctx, UNISTR2, num_names)) == NULL) {
+			DEBUG(3, ("init_q_lookup_names(): out of memory\n"));
+			return;
+		}
+
+		if ((q_l->hdr_name = TALLOC_ZERO_ARRAY(mem_ctx, UNIHDR, num_names)) == NULL) {
+			DEBUG(3, ("init_q_lookup_names(): out of memory\n"));
+			return;
+		}
+	} else {
+		q_l->uni_name = NULL;
+		q_l->hdr_name = NULL;
+	}
+
+	for (i = 0; i < num_names; i++) {
+		init_unistr2(&q_l->uni_name[i], names[i], UNI_FLAGS_NONE);
+		init_uni_hdr(&q_l->hdr_name[i], &q_l->uni_name[i]);
+	}
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL lsa_io_q_lookup_names(const char *desc, LSA_Q_LOOKUP_NAMES *q_r, 
+			   prs_struct *ps, int depth)
+{
+	unsigned int i;
+
+	prs_debug(ps, depth, desc, "lsa_io_q_lookup_names");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("", &q_r->pol, ps, depth)) /* policy handle */
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("num_entries    ", ps, depth, &q_r->num_entries))
+		return False;
+	if(!prs_uint32("num_entries2   ", ps, depth, &q_r->num_entries2))
+		return False;
+
+	if (UNMARSHALLING(ps)) {
+		if (q_r->num_entries) {
+			if ((q_r->hdr_name = PRS_ALLOC_MEM(ps, UNIHDR, q_r->num_entries)) == NULL)
+				return False;
+			if ((q_r->uni_name = PRS_ALLOC_MEM(ps, UNISTR2, q_r->num_entries)) == NULL)
+				return False;
+		}
+	}
+
+	for (i = 0; i < q_r->num_entries; i++) {
+		if(!prs_align(ps))
+			return False;
+		if(!smb_io_unihdr("hdr_name", &q_r->hdr_name[i], ps, depth)) /* pointer names */
+			return False;
+	}
+
+	for (i = 0; i < q_r->num_entries; i++) {
+		if(!prs_align(ps))
+			return False;
+		if(!smb_io_unistr2("dom_name", &q_r->uni_name[i], q_r->hdr_name[i].buffer, ps, depth)) /* names to be looked up */
+			return False;
+	}
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("num_trans_entries ", ps, depth, &q_r->num_trans_entries))
+		return False;
+	if(!prs_uint32("ptr_trans_sids ", ps, depth, &q_r->ptr_trans_sids))
+		return False;
+	if(!prs_uint16("lookup_level   ", ps, depth, &q_r->lookup_level))
+		return False;
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("mapped_count   ", ps, depth, &q_r->mapped_count))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL lsa_io_r_lookup_names(const char *desc, LSA_R_LOOKUP_NAMES *out, prs_struct *ps, int depth)
+{
+	unsigned int i;
+
+	prs_debug(ps, depth, desc, "lsa_io_r_lookup_names");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_dom_ref", ps, depth, &out->ptr_dom_ref))
+		return False;
+
+	if (out->ptr_dom_ref != 0)
+		if(!lsa_io_dom_r_ref("", out->dom_ref, ps, depth))
+			return False;
+
+	if(!prs_uint32("num_entries", ps, depth, &out->num_entries))
+		return False;
+	if(!prs_uint32("ptr_entries", ps, depth, &out->ptr_entries))
+		return False;
+
+	if (out->ptr_entries != 0) {
+		if(!prs_uint32("num_entries2", ps, depth, &out->num_entries2))
+			return False;
+
+		if (out->num_entries2 != out->num_entries) {
+			/* RPC fault */
+			return False;
+		}
+
+		if (UNMARSHALLING(ps) && out->num_entries2) {
+			if ((out->dom_rid = PRS_ALLOC_MEM(ps, DOM_RID, out->num_entries2))
+			    == NULL) {
+				DEBUG(3, ("lsa_io_r_lookup_names(): out of memory\n"));
+				return False;
+			}
+		}
+
+		for (i = 0; i < out->num_entries2; i++)
+			if(!smb_io_dom_rid("", &out->dom_rid[i], ps, depth)) /* domain RIDs being looked up */
+				return False;
+	}
+
+	if(!prs_uint32("mapped_count", ps, depth, &out->mapped_count))
+		return False;
+
+	if(!prs_ntstatus("status      ", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL lsa_io_q_lookup_names2(const char *desc, LSA_Q_LOOKUP_NAMES2 *q_r, 
+			   prs_struct *ps, int depth)
+{
+	unsigned int i;
+
+	prs_debug(ps, depth, desc, "lsa_io_q_lookup_names2");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("", &q_r->pol, ps, depth)) /* policy handle */
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("num_entries    ", ps, depth, &q_r->num_entries))
+		return False;
+	if(!prs_uint32("num_entries2   ", ps, depth, &q_r->num_entries2))
+		return False;
+
+	if (UNMARSHALLING(ps)) {
+		if (q_r->num_entries) {
+			if ((q_r->hdr_name = PRS_ALLOC_MEM(ps, UNIHDR, q_r->num_entries)) == NULL)
+				return False;
+			if ((q_r->uni_name = PRS_ALLOC_MEM(ps, UNISTR2, q_r->num_entries)) == NULL)
+				return False;
+		}
+	}
+
+	for (i = 0; i < q_r->num_entries; i++) {
+		if(!prs_align(ps))
+			return False;
+		if(!smb_io_unihdr("hdr_name", &q_r->hdr_name[i], ps, depth)) /* pointer names */
+			return False;
+	}
+
+	for (i = 0; i < q_r->num_entries; i++) {
+		if(!prs_align(ps))
+			return False;
+		if(!smb_io_unistr2("dom_name", &q_r->uni_name[i], q_r->hdr_name[i].buffer, ps, depth)) /* names to be looked up */
+			return False;
+	}
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("num_trans_entries ", ps, depth, &q_r->num_trans_entries))
+		return False;
+	if(!prs_uint32("ptr_trans_sids ", ps, depth, &q_r->ptr_trans_sids))
+		return False;
+	if(!prs_uint16("lookup_level   ", ps, depth, &q_r->lookup_level))
+		return False;
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("mapped_count   ", ps, depth, &q_r->mapped_count))
+		return False;
+	if(!prs_uint32("unknown1   ", ps, depth, &q_r->unknown1))
+		return False;
+	if(!prs_uint32("unknown2   ", ps, depth, &q_r->unknown2))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL lsa_io_r_lookup_names2(const char *desc, LSA_R_LOOKUP_NAMES2 *out, prs_struct *ps, int depth)
+{
+	unsigned int i;
+
+	prs_debug(ps, depth, desc, "lsa_io_r_lookup_names2");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_dom_ref", ps, depth, &out->ptr_dom_ref))
+		return False;
+
+	if (out->ptr_dom_ref != 0)
+		if(!lsa_io_dom_r_ref("", out->dom_ref, ps, depth))
+			return False;
+
+	if(!prs_uint32("num_entries", ps, depth, &out->num_entries))
+		return False;
+	if(!prs_uint32("ptr_entries", ps, depth, &out->ptr_entries))
+		return False;
+
+	if (out->ptr_entries != 0) {
+		if(!prs_uint32("num_entries2", ps, depth, &out->num_entries2))
+			return False;
+
+		if (out->num_entries2 != out->num_entries) {
+			/* RPC fault */
+			return False;
+		}
+
+		if (UNMARSHALLING(ps) && out->num_entries2) {
+			if ((out->dom_rid = PRS_ALLOC_MEM(ps, DOM_RID2, out->num_entries2))
+			    == NULL) {
+				DEBUG(3, ("lsa_io_r_lookup_names2(): out of memory\n"));
+				return False;
+			}
+		}
+
+		for (i = 0; i < out->num_entries2; i++)
+			if(!smb_io_dom_rid2("", &out->dom_rid[i], ps, depth)) /* domain RIDs being looked up */
+				return False;
+	}
+
+	if(!prs_uint32("mapped_count", ps, depth, &out->mapped_count))
+		return False;
+
+	if(!prs_ntstatus("status      ", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Internal lsa data type io.
+ Following pass must read DOM_SID2 types.
+********************************************************************/
+
+BOOL smb_io_lsa_translated_sids3(const char *desc, LSA_TRANSLATED_SID3 *q_r, 
+			   prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "smb_io_lsa_translated_sids3");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint8 ("sid_type ", ps, depth, &q_r->sid_type ))
+		return False;
+	if(!prs_align(ps))
+		return False;
+	/* Second pass will read/write these. */
+	if (!smb_io_dom_sid2_p("sid_header", ps, depth, &q_r->sid2))
+		return False;
+	if(!prs_uint32("sid_idx ", ps, depth, &q_r->sid_idx ))
+		return False;
+	if(!prs_uint32("unknown ", ps, depth, &q_r->unknown ))
+		return False;
+	
+	return True;
+}
+
+/*******************************************************************
+ Identical to lsa_io_q_lookup_names2.
+********************************************************************/
+
+BOOL lsa_io_q_lookup_names3(const char *desc, LSA_Q_LOOKUP_NAMES3 *q_r, 
+			   prs_struct *ps, int depth)
+{
+	unsigned int i;
+
+	prs_debug(ps, depth, desc, "lsa_io_q_lookup_names3");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("", &q_r->pol, ps, depth)) /* policy handle */
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("num_entries    ", ps, depth, &q_r->num_entries))
+		return False;
+	if(!prs_uint32("num_entries2   ", ps, depth, &q_r->num_entries2))
+		return False;
+
+	if (UNMARSHALLING(ps)) {
+		if (q_r->num_entries) {
+			if ((q_r->hdr_name = PRS_ALLOC_MEM(ps, UNIHDR, q_r->num_entries)) == NULL)
+				return False;
+			if ((q_r->uni_name = PRS_ALLOC_MEM(ps, UNISTR2, q_r->num_entries)) == NULL)
+				return False;
+		}
+	}
+
+	for (i = 0; i < q_r->num_entries; i++) {
+		if(!prs_align(ps))
+			return False;
+		if(!smb_io_unihdr("hdr_name", &q_r->hdr_name[i], ps, depth)) /* pointer names */
+			return False;
+	}
+
+	for (i = 0; i < q_r->num_entries; i++) {
+		if(!prs_align(ps))
+			return False;
+		if(!smb_io_unistr2("dom_name", &q_r->uni_name[i], q_r->hdr_name[i].buffer, ps, depth)) /* names to be looked up */
+			return False;
+	}
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("num_trans_entries ", ps, depth, &q_r->num_trans_entries))
+		return False;
+	if(!prs_uint32("ptr_trans_sids ", ps, depth, &q_r->ptr_trans_sids))
+		return False;
+	if(!prs_uint16("lookup_level   ", ps, depth, &q_r->lookup_level))
+		return False;
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("mapped_count   ", ps, depth, &q_r->mapped_count))
+		return False;
+	if(!prs_uint32("unknown1   ", ps, depth, &q_r->unknown1))
+		return False;
+	if(!prs_uint32("unknown2   ", ps, depth, &q_r->unknown2))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL lsa_io_r_lookup_names3(const char *desc, LSA_R_LOOKUP_NAMES3 *out, prs_struct *ps, int depth)
+{
+	unsigned int i;
+
+	prs_debug(ps, depth, desc, "lsa_io_r_lookup_names3");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_dom_ref", ps, depth, &out->ptr_dom_ref))
+		return False;
+
+	if (out->ptr_dom_ref != 0)
+		if(!lsa_io_dom_r_ref("", out->dom_ref, ps, depth))
+			return False;
+
+	if(!prs_uint32("num_entries", ps, depth, &out->num_entries))
+		return False;
+	if(!prs_uint32("ptr_entries", ps, depth, &out->ptr_entries))
+		return False;
+
+	if (out->ptr_entries != 0) {
+		if(!prs_uint32("num_entries2", ps, depth, &out->num_entries2))
+			return False;
+
+		if (out->num_entries2 != out->num_entries) {
+			/* RPC fault */
+			return False;
+		}
+
+		if (UNMARSHALLING(ps) && out->num_entries2) {
+			if ((out->trans_sids = PRS_ALLOC_MEM(ps, LSA_TRANSLATED_SID3, out->num_entries2))
+			    == NULL) {
+				DEBUG(3, ("lsa_io_r_lookup_names3(): out of memory\n"));
+				return False;
+			}
+		}
+
+		for (i = 0; i < out->num_entries2; i++) {
+			if(!smb_io_lsa_translated_sids3("", &out->trans_sids[i], ps, depth)) {
+				return False;
+			}
+		}
+		/* Now process the DOM_SID2 entries. */
+		for (i = 0; i < out->num_entries2; i++) {
+			if (out->trans_sids[i].sid2) {
+				if( !smb_io_dom_sid2("sid2", out->trans_sids[i].sid2, ps, depth) ) {
+					return False;
+				}
+			}
+		}
+	}
+
+	if(!prs_uint32("mapped_count", ps, depth, &out->mapped_count))
+		return False;
+
+	if(!prs_ntstatus("status      ", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL lsa_io_q_lookup_names4(const char *desc, LSA_Q_LOOKUP_NAMES4 *q_r, 
+			   prs_struct *ps, int depth)
+{
+	unsigned int i;
+
+	prs_debug(ps, depth, desc, "lsa_io_q_lookup_names4");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("num_entries    ", ps, depth, &q_r->num_entries))
+		return False;
+	if(!prs_uint32("num_entries2   ", ps, depth, &q_r->num_entries2))
+		return False;
+
+	if (UNMARSHALLING(ps)) {
+		if (q_r->num_entries) {
+			if ((q_r->hdr_name = PRS_ALLOC_MEM(ps, UNIHDR, q_r->num_entries)) == NULL)
+				return False;
+			if ((q_r->uni_name = PRS_ALLOC_MEM(ps, UNISTR2, q_r->num_entries)) == NULL)
+				return False;
+		}
+	}
+
+	for (i = 0; i < q_r->num_entries; i++) {
+		if(!prs_align(ps))
+			return False;
+		if(!smb_io_unihdr("hdr_name", &q_r->hdr_name[i], ps, depth)) /* pointer names */
+			return False;
+	}
+
+	for (i = 0; i < q_r->num_entries; i++) {
+		if(!prs_align(ps))
+			return False;
+		if(!smb_io_unistr2("dom_name", &q_r->uni_name[i], q_r->hdr_name[i].buffer, ps, depth)) /* names to be looked up */
+			return False;
+	}
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("num_trans_entries ", ps, depth, &q_r->num_trans_entries))
+		return False;
+	if(!prs_uint32("ptr_trans_sids ", ps, depth, &q_r->ptr_trans_sids))
+		return False;
+	if(!prs_uint16("lookup_level   ", ps, depth, &q_r->lookup_level))
+		return False;
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("mapped_count   ", ps, depth, &q_r->mapped_count))
+		return False;
+	if(!prs_uint32("unknown1   ", ps, depth, &q_r->unknown1))
+		return False;
+	if(!prs_uint32("unknown2   ", ps, depth, &q_r->unknown2))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Identical to lsa_io_r_lookup_names3.
+********************************************************************/
+
+BOOL lsa_io_r_lookup_names4(const char *desc, LSA_R_LOOKUP_NAMES4 *out, prs_struct *ps, int depth)
+{
+	unsigned int i;
+
+	prs_debug(ps, depth, desc, "lsa_io_r_lookup_names4");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_dom_ref", ps, depth, &out->ptr_dom_ref))
+		return False;
+
+	if (out->ptr_dom_ref != 0)
+		if(!lsa_io_dom_r_ref("", out->dom_ref, ps, depth))
+			return False;
+
+	if(!prs_uint32("num_entries", ps, depth, &out->num_entries))
+		return False;
+	if(!prs_uint32("ptr_entries", ps, depth, &out->ptr_entries))
+		return False;
+
+	if (out->ptr_entries != 0) {
+		if(!prs_uint32("num_entries2", ps, depth, &out->num_entries2))
+			return False;
+
+		if (out->num_entries2 != out->num_entries) {
+			/* RPC fault */
+			return False;
+		}
+
+		if (UNMARSHALLING(ps) && out->num_entries2) {
+			if ((out->trans_sids = PRS_ALLOC_MEM(ps, LSA_TRANSLATED_SID3, out->num_entries2))
+			    == NULL) {
+				DEBUG(3, ("lsa_io_r_lookup_names4(): out of memory\n"));
+				return False;
+			}
+		}
+
+		for (i = 0; i < out->num_entries2; i++) {
+			if(!smb_io_lsa_translated_sids3("", &out->trans_sids[i], ps, depth)) {
+				return False;
+			}
+		}
+		/* Now process the DOM_SID2 entries. */
+		for (i = 0; i < out->num_entries2; i++) {
+			if (out->trans_sids[i].sid2) {
+				if( !smb_io_dom_sid2("sid2", out->trans_sids[i].sid2, ps, depth) ) {
+					return False;
+				}
+			}
+		}
+	}
+
+	if(!prs_uint32("mapped_count", ps, depth, &out->mapped_count))
+		return False;
+
+	if(!prs_ntstatus("status      ", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits an LSA_Q_CLOSE structure.
+********************************************************************/
+
+void init_lsa_q_close(LSA_Q_CLOSE *in, POLICY_HND *hnd)
+{
+	DEBUG(5, ("init_lsa_q_close\n"));
+
+	memcpy(&in->pol, hnd, sizeof(in->pol));
+}
+
+/*******************************************************************
+ Reads or writes an LSA_Q_CLOSE structure.
+********************************************************************/
+
+BOOL lsa_io_q_close(const char *desc, LSA_Q_CLOSE *in, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_close");
+	depth++;
+
+	if(!smb_io_pol_hnd("", &in->pol, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_R_CLOSE structure.
+********************************************************************/
+
+BOOL lsa_io_r_close(const char *desc,  LSA_R_CLOSE *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_close");
+	depth++;
+
+	if(!smb_io_pol_hnd("", &out->pol, ps, depth))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_Q_OPEN_SECRET structure.
+********************************************************************/
+
+BOOL lsa_io_q_open_secret(const char *desc, LSA_Q_OPEN_SECRET *in, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_open_secret");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("", &in->handle, ps, depth))
+		return False;
+
+	if(!prs_unistr4 ("secretname", ps, depth, &in->secretname))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("access", ps, depth, &in->access))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_R_OPEN_SECRET structure.
+********************************************************************/
+
+BOOL lsa_io_r_open_secret(const char *desc, LSA_R_OPEN_SECRET *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_open_secret");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+   
+	if(!smb_io_pol_hnd("", &out->handle, ps, depth))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits an LSA_Q_ENUM_PRIVS structure.
+********************************************************************/
+
+void init_q_enum_privs(LSA_Q_ENUM_PRIVS *in, POLICY_HND *hnd, uint32 enum_context, uint32 pref_max_length)
+{
+	DEBUG(5, ("init_q_enum_privs\n"));
+
+	memcpy(&in->pol, hnd, sizeof(in->pol));
+
+	in->enum_context = enum_context;
+	in->pref_max_length = pref_max_length;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+BOOL lsa_io_q_enum_privs(const char *desc, LSA_Q_ENUM_PRIVS *in, prs_struct *ps, int depth)
+{
+	if (in == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "lsa_io_q_enum_privs");
+	depth++;
+
+	if (!smb_io_pol_hnd("", &in->pol, ps, depth))
+		return False;
+
+	if(!prs_uint32("enum_context   ", ps, depth, &in->enum_context))
+		return False;
+	if(!prs_uint32("pref_max_length", ps, depth, &in->pref_max_length))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+static BOOL lsa_io_priv_entries(const char *desc, LSA_PRIV_ENTRY *entries, uint32 count, prs_struct *ps, int depth)
+{
+	uint32 i;
+
+	if (entries == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "lsa_io_priv_entries");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	for (i = 0; i < count; i++) {
+		if (!smb_io_unihdr("", &entries[i].hdr_name, ps, depth))
+			return False;
+		if(!prs_uint32("luid_low ", ps, depth, &entries[i].luid_low))
+			return False;
+		if(!prs_uint32("luid_high", ps, depth, &entries[i].luid_high))
+			return False;
+	}
+
+	for (i = 0; i < count; i++)
+		if (!smb_io_unistr2("", &entries[i].name, entries[i].hdr_name.buffer, ps, depth))
+			return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits an LSA_R_ENUM_PRIVS structure.
+********************************************************************/
+
+void init_lsa_r_enum_privs(LSA_R_ENUM_PRIVS *out, uint32 enum_context,
+			  uint32 count, LSA_PRIV_ENTRY *entries)
+{
+	DEBUG(5, ("init_lsa_r_enum_privs\n"));
+
+	out->enum_context=enum_context;
+	out->count=count;
+	
+	if (entries!=NULL) {
+		out->ptr=1;
+		out->count1=count;
+		out->privs=entries;
+	} else {
+		out->ptr=0;
+		out->count1=0;
+		out->privs=NULL;
+	}		
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+BOOL lsa_io_r_enum_privs(const char *desc, LSA_R_ENUM_PRIVS *out, prs_struct *ps, int depth)
+{
+	if (out == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "lsa_io_r_enum_privs");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("enum_context", ps, depth, &out->enum_context))
+		return False;
+	if(!prs_uint32("count", ps, depth, &out->count))
+		return False;
+	if(!prs_uint32("ptr", ps, depth, &out->ptr))
+		return False;
+
+	if (out->ptr) {
+		if(!prs_uint32("count1", ps, depth, &out->count1))
+			return False;
+
+		if (UNMARSHALLING(ps) && out->count1)
+			if (!(out->privs = PRS_ALLOC_MEM(ps, LSA_PRIV_ENTRY, out->count1)))
+				return False;
+
+		if (!lsa_io_priv_entries("", out->privs, out->count1, ps, depth))
+			return False;
+	}
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+void init_lsa_priv_get_dispname(LSA_Q_PRIV_GET_DISPNAME *trn, POLICY_HND *hnd, const char *name, uint16 lang_id, uint16 lang_id_sys)
+{
+	memcpy(&trn->pol, hnd, sizeof(trn->pol));
+
+	init_unistr2(&trn->name, name, UNI_FLAGS_NONE);
+	init_uni_hdr(&trn->hdr_name, &trn->name);
+	trn->lang_id = lang_id;
+	trn->lang_id_sys = lang_id_sys;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+BOOL lsa_io_q_priv_get_dispname(const char *desc, LSA_Q_PRIV_GET_DISPNAME *in, prs_struct *ps, int depth)
+{
+	if (in == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "lsa_io_q_priv_get_dispname");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if (!smb_io_pol_hnd("", &in->pol, ps, depth))
+		return False;
+
+	if (!smb_io_unihdr("hdr_name", &in->hdr_name, ps, depth))
+		return False;
+
+	if (!smb_io_unistr2("name", &in->name, in->hdr_name.buffer, ps, depth))
+		return False;
+
+	if(!prs_uint16("lang_id    ", ps, depth, &in->lang_id))
+		return False;
+	if(!prs_uint16("lang_id_sys", ps, depth, &in->lang_id_sys))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+BOOL lsa_io_r_priv_get_dispname(const char *desc, LSA_R_PRIV_GET_DISPNAME *out, prs_struct *ps, int depth)
+{
+	if (out == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "lsa_io_r_priv_get_dispname");
+	depth++;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("ptr_info", ps, depth, &out->ptr_info))
+		return False;
+
+	if (out->ptr_info){
+		if (!smb_io_unihdr("hdr_name", &out->hdr_desc, ps, depth))
+			return False;
+
+		if (!smb_io_unistr2("desc", &out->desc, out->hdr_desc.buffer, ps, depth))
+			return False;
+	}
+/*
+	if(!prs_align(ps))
+		return False;
+*/
+	if(!prs_uint16("lang_id", ps, depth, &out->lang_id))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+/*
+  initialise a LSA_Q_ENUM_ACCOUNTS structure
+*/
+void init_lsa_q_enum_accounts(LSA_Q_ENUM_ACCOUNTS *trn, POLICY_HND *hnd, uint32 enum_context, uint32 pref_max_length)
+{
+	memcpy(&trn->pol, hnd, sizeof(trn->pol));
+
+	trn->enum_context = enum_context;
+	trn->pref_max_length = pref_max_length;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+BOOL lsa_io_q_enum_accounts(const char *desc, LSA_Q_ENUM_ACCOUNTS *in, prs_struct *ps, int depth)
+{
+	if (in == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "lsa_io_q_enum_accounts");
+	depth++;
+
+	if (!smb_io_pol_hnd("", &in->pol, ps, depth))
+		return False;
+
+	if(!prs_uint32("enum_context   ", ps, depth, &in->enum_context))
+		return False;
+	if(!prs_uint32("pref_max_length", ps, depth, &in->pref_max_length))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+ Inits an LSA_R_ENUM_PRIVS structure.
+********************************************************************/
+
+void init_lsa_r_enum_accounts(LSA_R_ENUM_ACCOUNTS *out, uint32 enum_context)
+{
+	DEBUG(5, ("init_lsa_r_enum_accounts\n"));
+
+	out->enum_context=enum_context;
+	if (out->enum_context!=0) {
+		out->sids.num_entries=enum_context;
+		out->sids.ptr_sid_enum=1;
+		out->sids.num_entries2=enum_context;
+	} else {
+		out->sids.num_entries=0;
+		out->sids.ptr_sid_enum=0;
+		out->sids.num_entries2=0;
+	}
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+BOOL lsa_io_r_enum_accounts(const char *desc, LSA_R_ENUM_ACCOUNTS *out, prs_struct *ps, int depth)
+{
+	if (out == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "lsa_io_r_enum_accounts");
+	depth++;
+
+	if (!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("enum_context", ps, depth, &out->enum_context))
+		return False;
+
+	if (!lsa_io_sid_enum("sids", &out->sids, ps, depth))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+ Reads or writes an LSA_Q_UNK_GET_CONNUSER structure.
+********************************************************************/
+
+BOOL lsa_io_q_unk_get_connuser(const char *desc, LSA_Q_UNK_GET_CONNUSER *in, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_unk_get_connuser");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+   
+	if(!prs_uint32("ptr_srvname", ps, depth, &in->ptr_srvname))
+		return False;
+
+	if(!smb_io_unistr2("uni2_srvname", &in->uni2_srvname, in->ptr_srvname, ps, depth)) /* server name to be looked up */
+		return False;
+
+	if (!prs_align(ps))
+	  return False;
+
+	if(!prs_uint32("unk1", ps, depth, &in->unk1))
+		return False;
+	if(!prs_uint32("unk2", ps, depth, &in->unk2))
+		return False;
+	if(!prs_uint32("unk3", ps, depth, &in->unk3))
+		return False;
+
+	/* Don't bother to read or write at present... */
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_R_UNK_GET_CONNUSER structure.
+********************************************************************/
+
+BOOL lsa_io_r_unk_get_connuser(const char *desc, LSA_R_UNK_GET_CONNUSER *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_unk_get_connuser");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+   
+	if(!prs_uint32("ptr_user_name", ps, depth, &out->ptr_user_name))
+		return False;
+	if(!smb_io_unihdr("hdr_user_name", &out->hdr_user_name, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni2_user_name", &out->uni2_user_name, out->ptr_user_name, ps, depth))
+		return False;
+
+	if (!prs_align(ps))
+	  return False;
+	
+	if(!prs_uint32("unk1", ps, depth, &out->unk1))
+		return False;
+
+	if(!prs_uint32("ptr_dom_name", ps, depth, &out->ptr_dom_name))
+		return False;
+	if(!smb_io_unihdr("hdr_dom_name", &out->hdr_dom_name, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni2_dom_name", &out->uni2_dom_name, out->ptr_dom_name, ps, depth))
+		return False;
+
+	if (!prs_align(ps))
+	  return False;
+	
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+void init_lsa_q_create_account(LSA_Q_CREATEACCOUNT *trn, POLICY_HND *hnd, DOM_SID *sid, uint32 desired_access)
+{
+	memcpy(&trn->pol, hnd, sizeof(trn->pol));
+
+	init_dom_sid2(&trn->sid, sid);
+	trn->access = desired_access;
+}
+
+
+/*******************************************************************
+ Reads or writes an LSA_Q_CREATEACCOUNT structure.
+********************************************************************/
+
+BOOL lsa_io_q_create_account(const char *desc, LSA_Q_CREATEACCOUNT *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_create_account");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+ 
+	if(!smb_io_pol_hnd("pol", &out->pol, ps, depth))
+		return False;
+
+	if(!smb_io_dom_sid2("sid", &out->sid, ps, depth)) /* domain SID */
+		return False;
+
+ 	if(!prs_uint32("access", ps, depth, &out->access))
+		return False;
+  
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_R_CREATEACCOUNT structure.
+********************************************************************/
+
+BOOL lsa_io_r_create_account(const char *desc, LSA_R_CREATEACCOUNT  *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_open_account");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+ 
+	if(!smb_io_pol_hnd("pol", &out->pol, ps, depth))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+
+void init_lsa_q_open_account(LSA_Q_OPENACCOUNT *trn, POLICY_HND *hnd, DOM_SID *sid, uint32 desired_access)
+{
+	memcpy(&trn->pol, hnd, sizeof(trn->pol));
+
+	init_dom_sid2(&trn->sid, sid);
+	trn->access = desired_access;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_Q_OPENACCOUNT structure.
+********************************************************************/
+
+BOOL lsa_io_q_open_account(const char *desc, LSA_Q_OPENACCOUNT *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_open_account");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+ 
+	if(!smb_io_pol_hnd("pol", &out->pol, ps, depth))
+		return False;
+
+	if(!smb_io_dom_sid2("sid", &out->sid, ps, depth)) /* domain SID */
+		return False;
+
+ 	if(!prs_uint32("access", ps, depth, &out->access))
+		return False;
+  
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_R_OPENACCOUNT structure.
+********************************************************************/
+
+BOOL lsa_io_r_open_account(const char *desc, LSA_R_OPENACCOUNT  *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_open_account");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+ 
+	if(!smb_io_pol_hnd("pol", &out->pol, ps, depth))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+
+void init_lsa_q_enum_privsaccount(LSA_Q_ENUMPRIVSACCOUNT *trn, POLICY_HND *hnd)
+{
+	memcpy(&trn->pol, hnd, sizeof(trn->pol));
+
+}
+
+/*******************************************************************
+ Reads or writes an LSA_Q_ENUMPRIVSACCOUNT structure.
+********************************************************************/
+
+BOOL lsa_io_q_enum_privsaccount(const char *desc, LSA_Q_ENUMPRIVSACCOUNT *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_enum_privsaccount");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+ 
+	if(!smb_io_pol_hnd("pol", &out->pol, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LUID structure.
+********************************************************************/
+
+static BOOL lsa_io_luid(const char *desc, LUID *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_luid");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+ 
+	if(!prs_uint32("low", ps, depth, &out->low))
+		return False;
+
+	if(!prs_uint32("high", ps, depth, &out->high))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LUID_ATTR structure.
+********************************************************************/
+
+static BOOL lsa_io_luid_attr(const char *desc, LUID_ATTR *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_luid_attr");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+ 
+	if (!lsa_io_luid(desc, &out->luid, ps, depth))
+		return False;
+
+	if(!prs_uint32("attr", ps, depth, &out->attr))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an PRIVILEGE_SET structure.
+********************************************************************/
+
+static BOOL lsa_io_privilege_set(const char *desc, PRIVILEGE_SET *out, prs_struct *ps, int depth)
+{
+	uint32 i, dummy;
+
+	prs_debug(ps, depth, desc, "lsa_io_privilege_set");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+ 
+	if(!prs_uint32("count", ps, depth, &dummy))
+		return False;
+	if(!prs_uint32("control", ps, depth, &out->control))
+		return False;
+
+	for (i=0; i<out->count; i++) {
+		if (!lsa_io_luid_attr(desc, &out->set[i], ps, depth))
+			return False;
+	}
+	
+	return True;
+}
+
+NTSTATUS init_lsa_r_enum_privsaccount(TALLOC_CTX *mem_ctx, LSA_R_ENUMPRIVSACCOUNT *out, LUID_ATTR *set, uint32 count, uint32 control)
+{
+	NTSTATUS ret = NT_STATUS_OK;
+
+	out->ptr = 1;
+	out->count = count;
+
+	if ( !NT_STATUS_IS_OK(ret = privilege_set_init_by_ctx(mem_ctx, &(out->set))) )
+		return ret;
+	
+	out->set.count = count;
+	
+	if (!NT_STATUS_IS_OK(ret = dup_luid_attr(out->set.mem_ctx, &(out->set.set), set, count)))
+		return ret;
+
+	DEBUG(10,("init_lsa_r_enum_privsaccount: %d privileges\n", out->count));
+
+	return ret;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_R_ENUMPRIVSACCOUNT structure.
+********************************************************************/
+
+BOOL lsa_io_r_enum_privsaccount(const char *desc, LSA_R_ENUMPRIVSACCOUNT *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_enum_privsaccount");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+ 
+	if(!prs_uint32("ptr", ps, depth, &out->ptr))
+		return False;
+
+	if (out->ptr!=0) {
+		if(!prs_uint32("count", ps, depth, &out->count))
+			return False;
+
+		/* malloc memory if unmarshalling here */
+
+		if (UNMARSHALLING(ps) && out->count != 0) {
+			if (!NT_STATUS_IS_OK(privilege_set_init_by_ctx(ps->mem_ctx, &(out->set))))
+				return False;
+
+			if (!(out->set.set = PRS_ALLOC_MEM(ps,LUID_ATTR,out->count)))
+				return False;
+
+		}
+		
+		if(!lsa_io_privilege_set(desc, &out->set, ps, depth))
+			return False;
+	}
+
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+
+
+/*******************************************************************
+ Reads or writes an  LSA_Q_GETSYSTEMACCOUNTstructure.
+********************************************************************/
+
+BOOL lsa_io_q_getsystemaccount(const char *desc, LSA_Q_GETSYSTEMACCOUNT  *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_getsystemaccount");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+ 
+	if(!smb_io_pol_hnd("pol", &out->pol, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an  LSA_R_GETSYSTEMACCOUNTstructure.
+********************************************************************/
+
+BOOL lsa_io_r_getsystemaccount(const char *desc, LSA_R_GETSYSTEMACCOUNT  *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_getsystemaccount");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+ 
+	if(!prs_uint32("access", ps, depth, &out->access))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+ Reads or writes an LSA_Q_SETSYSTEMACCOUNT structure.
+********************************************************************/
+
+BOOL lsa_io_q_setsystemaccount(const char *desc, LSA_Q_SETSYSTEMACCOUNT  *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_setsystemaccount");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+ 
+	if(!smb_io_pol_hnd("pol", &out->pol, ps, depth))
+		return False;
+
+	if(!prs_uint32("access", ps, depth, &out->access))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_R_SETSYSTEMACCOUNT structure.
+********************************************************************/
+
+BOOL lsa_io_r_setsystemaccount(const char *desc, LSA_R_SETSYSTEMACCOUNT  *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_setsystemaccount");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+ 
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+
+void init_lsa_string( LSA_STRING *uni, const char *string )
+{
+	init_unistr2(&uni->unistring, string, UNI_FLAGS_NONE);
+	init_uni_hdr(&uni->hdr, &uni->unistring);
+}
+
+void init_lsa_q_lookup_priv_value(LSA_Q_LOOKUP_PRIV_VALUE *q_u, POLICY_HND *hnd, const char *name)
+{
+	memcpy(&q_u->pol, hnd, sizeof(q_u->pol));
+	init_lsa_string( &q_u->privname, name );
+}
+
+BOOL smb_io_lsa_string( const char *desc, LSA_STRING *string, prs_struct *ps, int depth )
+{
+	prs_debug(ps, depth, desc, "smb_io_lsa_string");
+	depth++;
+
+	if(!smb_io_unihdr ("hdr", &string->hdr, ps, depth))
+		return False;
+	if(!smb_io_unistr2("unistring", &string->unistring, string->hdr.buffer, ps, depth))
+		return False;
+	
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_Q_LOOKUP_PRIV_VALUE  structure.
+********************************************************************/
+
+BOOL lsa_io_q_lookup_priv_value(const char *desc, LSA_Q_LOOKUP_PRIV_VALUE  *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_lookup_priv_value");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+ 
+	if(!smb_io_pol_hnd("pol", &out->pol, ps, depth))
+		return False;
+	if(!smb_io_lsa_string("privname", &out->privname, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an  LSA_R_LOOKUP_PRIV_VALUE structure.
+********************************************************************/
+
+BOOL lsa_io_r_lookup_priv_value(const char *desc, LSA_R_LOOKUP_PRIV_VALUE  *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_lookup_priv_value");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+		
+	if(!lsa_io_luid("luid", &out->luid, ps, depth))
+		return False;
+ 
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+ Reads or writes an LSA_Q_ADDPRIVS structure.
+********************************************************************/
+
+BOOL lsa_io_q_addprivs(const char *desc, LSA_Q_ADDPRIVS *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_addprivs");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+ 
+	if(!smb_io_pol_hnd("pol", &out->pol, ps, depth))
+		return False;
+	
+	if(!prs_uint32("count", ps, depth, &out->count))
+		return False;
+
+	if (UNMARSHALLING(ps) && out->count!=0) {
+		if (!NT_STATUS_IS_OK(privilege_set_init_by_ctx(ps->mem_ctx, &(out->set))))
+			return False;
+		
+		if (!(out->set.set = PRS_ALLOC_MEM(ps, LUID_ATTR, out->count)))
+			return False;
+	}
+	
+	if(!lsa_io_privilege_set(desc, &out->set, ps, depth))
+		return False;
+	
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_R_ADDPRIVS structure.
+********************************************************************/
+
+BOOL lsa_io_r_addprivs(const char *desc, LSA_R_ADDPRIVS *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_addprivs");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+ 
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_Q_REMOVEPRIVS structure.
+********************************************************************/
+
+BOOL lsa_io_q_removeprivs(const char *desc, LSA_Q_REMOVEPRIVS *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_removeprivs");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+ 
+	if(!smb_io_pol_hnd("pol", &out->pol, ps, depth))
+		return False;
+	
+	if(!prs_uint32("allrights", ps, depth, &out->allrights))
+		return False;
+
+	if(!prs_uint32("ptr", ps, depth, &out->ptr))
+		return False;
+
+	/* 
+	 * JFM: I'm not sure at all if the count is inside the ptr
+	 * never seen one with ptr=0
+	 */
+
+	if (out->ptr!=0) {
+		if(!prs_uint32("count", ps, depth, &out->count))
+			return False;
+
+		if (UNMARSHALLING(ps) && out->count!=0) {
+			if (!NT_STATUS_IS_OK(privilege_set_init_by_ctx(ps->mem_ctx, &(out->set))))
+				return False;
+
+			if (!(out->set.set = PRS_ALLOC_MEM(ps, LUID_ATTR, out->count)))
+				return False;
+		}
+
+		if(!lsa_io_privilege_set(desc, &out->set, ps, depth))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_R_REMOVEPRIVS structure.
+********************************************************************/
+
+BOOL lsa_io_r_removeprivs(const char *desc, LSA_R_REMOVEPRIVS *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_removeprivs");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+ 
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+BOOL policy_handle_is_valid(const POLICY_HND *hnd)
+{
+	POLICY_HND zero_pol;
+
+	ZERO_STRUCT(zero_pol);
+	return ((memcmp(&zero_pol, hnd, sizeof(POLICY_HND)) == 0) ? False : True );
+}
+
+/*******************************************************************
+ Inits an LSA_Q_QUERY_INFO2 structure.
+********************************************************************/
+
+void init_q_query2(LSA_Q_QUERY_INFO2 *in, POLICY_HND *hnd, uint16 info_class)
+{
+	DEBUG(5, ("init_q_query2\n"));
+
+	memcpy(&in->pol, hnd, sizeof(in->pol));
+
+	in->info_class = info_class;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_Q_QUERY_DNSDOMINFO structure.
+********************************************************************/
+
+BOOL lsa_io_q_query_info2(const char *desc, LSA_Q_QUERY_INFO2 *in, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_query_info2");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+ 
+	if(!smb_io_pol_hnd("pol", &in->pol, ps, depth))
+		return False;
+	
+	if(!prs_uint16("info_class", ps, depth, &in->info_class))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_R_QUERY_DNSDOMINFO structure.
+********************************************************************/
+
+BOOL lsa_io_r_query_info2(const char *desc, LSA_R_QUERY_INFO2 *out,
+			  prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_query_info2");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("dom_ptr", ps, depth, &out->dom_ptr))
+		return False;
+
+	if (out->dom_ptr) {
+
+		if(!lsa_io_query_info_ctr2("", ps, depth, &out->ctr))
+			return False;
+	}
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits an LSA_Q_ENUM_ACCT_RIGHTS structure.
+********************************************************************/
+void init_q_enum_acct_rights(LSA_Q_ENUM_ACCT_RIGHTS *in, 
+			     POLICY_HND *hnd, 
+			     uint32 count, 
+			     DOM_SID *sid)
+{
+	DEBUG(5, ("init_q_enum_acct_rights\n"));
+
+	in->pol = *hnd;
+	init_dom_sid2(&in->sid, sid);
+}
+
+/*******************************************************************
+********************************************************************/
+NTSTATUS init_r_enum_acct_rights( LSA_R_ENUM_ACCT_RIGHTS *out, PRIVILEGE_SET *privileges )
+{
+	uint32 i;
+	char *privname;
+	const char **privname_array = NULL;
+	int num_priv = 0;
+
+	for ( i=0; i<privileges->count; i++ ) {
+		privname = luid_to_privilege_name( &privileges->set[i].luid );
+		if ( privname ) {
+			if ( !add_string_to_array( get_talloc_ctx(), privname, &privname_array, &num_priv ) ) 
+				return NT_STATUS_NO_MEMORY;
+		}
+	}
+
+	if ( num_priv ) {
+		out->rights = TALLOC_P( get_talloc_ctx(), UNISTR4_ARRAY );
+		if (!out->rights) {
+			return NT_STATUS_NO_MEMORY;
+		}
+
+		if ( !init_unistr4_array( out->rights, num_priv, privname_array ) ) 
+			return NT_STATUS_NO_MEMORY;
+
+		out->count = num_priv;
+	}
+
+	return NT_STATUS_OK;
+}
+
+/*******************************************************************
+reads or writes a LSA_Q_ENUM_ACCT_RIGHTS structure.
+********************************************************************/
+BOOL lsa_io_q_enum_acct_rights(const char *desc, LSA_Q_ENUM_ACCT_RIGHTS *in, prs_struct *ps, int depth)
+{
+	
+	if (in == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "lsa_io_q_enum_acct_rights");
+	depth++;
+
+	if (!smb_io_pol_hnd("", &in->pol, ps, depth))
+		return False;
+
+	if(!smb_io_dom_sid2("sid", &in->sid, ps, depth))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+reads or writes a LSA_R_ENUM_ACCT_RIGHTS structure.
+********************************************************************/
+BOOL lsa_io_r_enum_acct_rights(const char *desc, LSA_R_ENUM_ACCT_RIGHTS *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_enum_acct_rights");
+	depth++;
+
+	if(!prs_uint32("count   ", ps, depth, &out->count))
+		return False;
+
+	if ( !prs_pointer("rights", ps, depth, (void*)&out->rights, sizeof(UNISTR4_ARRAY), (PRS_POINTER_CAST)prs_unistr4_array) )
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+ Inits an LSA_Q_ADD_ACCT_RIGHTS structure.
+********************************************************************/
+void init_q_add_acct_rights( LSA_Q_ADD_ACCT_RIGHTS *in, POLICY_HND *hnd, 
+                             DOM_SID *sid, uint32 count, const char **rights )
+{
+	DEBUG(5, ("init_q_add_acct_rights\n"));
+
+	in->pol = *hnd;
+	init_dom_sid2(&in->sid, sid);
+	
+	in->rights = TALLOC_P( get_talloc_ctx(), UNISTR4_ARRAY );
+	if (!in->rights) {
+		smb_panic("init_q_add_acct_rights: talloc fail\n");
+		return;
+	}
+	init_unistr4_array( in->rights, count, rights );
+	
+	in->count = count;
+}
+
+
+/*******************************************************************
+reads or writes a LSA_Q_ADD_ACCT_RIGHTS structure.
+********************************************************************/
+BOOL lsa_io_q_add_acct_rights(const char *desc, LSA_Q_ADD_ACCT_RIGHTS *in, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_add_acct_rights");
+	depth++;
+
+	if (!smb_io_pol_hnd("", &in->pol, ps, depth))
+		return False;
+
+	if(!smb_io_dom_sid2("sid", &in->sid, ps, depth))
+		return False;
+
+	if(!prs_uint32("count", ps, depth, &in->count))
+		return False;
+
+	if ( !prs_pointer("rights", ps, depth, (void*)&in->rights, sizeof(UNISTR4_ARRAY), (PRS_POINTER_CAST)prs_unistr4_array) )
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a LSA_R_ENUM_ACCT_RIGHTS structure.
+********************************************************************/
+BOOL lsa_io_r_add_acct_rights(const char *desc, LSA_R_ADD_ACCT_RIGHTS *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_add_acct_rights");
+	depth++;
+
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits an LSA_Q_REMOVE_ACCT_RIGHTS structure.
+********************************************************************/
+
+void init_q_remove_acct_rights(LSA_Q_REMOVE_ACCT_RIGHTS *in, 
+			       POLICY_HND *hnd, 
+			       DOM_SID *sid,
+			       uint32 removeall,
+			       uint32 count, 
+			       const char **rights)
+{
+	DEBUG(5, ("init_q_remove_acct_rights\n"));
+
+	in->pol = *hnd;
+
+	init_dom_sid2(&in->sid, sid);
+
+	in->removeall = removeall;
+	in->count = count;
+
+	in->rights = TALLOC_P( get_talloc_ctx(), UNISTR4_ARRAY );
+	if (!in->rights) {
+		smb_panic("init_q_remove_acct_rights: talloc fail\n");
+		return;
+	}
+	init_unistr4_array( in->rights, count, rights );
+}
+
+/*******************************************************************
+reads or writes a LSA_Q_REMOVE_ACCT_RIGHTS structure.
+********************************************************************/
+
+BOOL lsa_io_q_remove_acct_rights(const char *desc, LSA_Q_REMOVE_ACCT_RIGHTS *in, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_remove_acct_rights");
+	depth++;
+
+	if (!smb_io_pol_hnd("", &in->pol, ps, depth))
+		return False;
+
+	if(!smb_io_dom_sid2("sid", &in->sid, ps, depth))
+		return False;
+
+	if(!prs_uint32("removeall", ps, depth, &in->removeall))
+		return False;
+
+	if(!prs_uint32("count", ps, depth, &in->count))
+		return False;
+
+	if ( !prs_pointer("rights", ps, depth, (void*)&in->rights, sizeof(UNISTR4_ARRAY), (PRS_POINTER_CAST)prs_unistr4_array) )
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a LSA_R_ENUM_ACCT_RIGHTS structure.
+********************************************************************/
+BOOL lsa_io_r_remove_acct_rights(const char *desc, LSA_R_REMOVE_ACCT_RIGHTS *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_remove_acct_rights");
+	depth++;
+
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits an LSA_Q_OPEN_TRUSTED_DOMAIN structure.
+********************************************************************/
+
+void init_lsa_q_open_trusted_domain(LSA_Q_OPEN_TRUSTED_DOMAIN *q, POLICY_HND *hnd, DOM_SID *sid, uint32 desired_access)
+{
+	memcpy(&q->pol, hnd, sizeof(q->pol));
+
+	init_dom_sid2(&q->sid, sid);
+	q->access_mask = desired_access;
+}
+
+/*******************************************************************
+********************************************************************/
+
+#if 0 /* jerry, I think this not correct - gd */
+BOOL lsa_io_q_open_trusted_domain(const char *desc, LSA_Q_OPEN_TRUSTED_DOMAIN *in, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_open_trusted_domain");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if (!smb_io_pol_hnd("", &in->handle, ps, depth))
+		return False;
+
+	if(!prs_uint32("count", ps, depth, &in->count))
+		return False;
+
+	if(!smb_io_dom_sid("sid", &in->sid, ps, depth))
+		return False;
+
+	return True;
+}
+#endif
+
+
+/*******************************************************************
+ Inits an LSA_Q_OPEN_TRUSTED_DOMAIN_BY_NAME structure.
+********************************************************************/
+
+void init_lsa_q_open_trusted_domain_by_name(LSA_Q_OPEN_TRUSTED_DOMAIN_BY_NAME *q, 
+					    POLICY_HND *hnd, 
+					    const char *name, 
+					    uint32 desired_access)
+{
+	memcpy(&q->pol, hnd, sizeof(q->pol));
+
+	init_lsa_string(&q->name, name);
+	q->access_mask = desired_access;
+}
+
+/*******************************************************************
+********************************************************************/
+
+
+/*******************************************************************
+ Reads or writes an LSA_Q_OPEN_TRUSTED_DOMAIN_BY_NAME structure.
+********************************************************************/
+
+BOOL lsa_io_q_open_trusted_domain_by_name(const char *desc, LSA_Q_OPEN_TRUSTED_DOMAIN_BY_NAME *q_o, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_open_trusted_domain_by_name");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+ 
+	if(!smb_io_pol_hnd("pol", &q_o->pol, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_lsa_string("name", &q_o->name, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+ 	if(!prs_uint32("access", ps, depth, &q_o->access_mask))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_R_OPEN_TRUSTED_DOMAIN_BY_NAME structure.
+********************************************************************/
+
+BOOL lsa_io_r_open_trusted_domain_by_name(const char *desc, LSA_R_OPEN_TRUSTED_DOMAIN_BY_NAME *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_open_trusted_domain_by_name");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if (!smb_io_pol_hnd("handle", &out->handle, ps, depth))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL lsa_io_q_open_trusted_domain(const char *desc, LSA_Q_OPEN_TRUSTED_DOMAIN *q_o, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_open_trusted_domain");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+ 
+	if(!smb_io_pol_hnd("pol", &q_o->pol, ps, depth))
+		return False;
+
+	if(!smb_io_dom_sid2("sid", &q_o->sid, ps, depth))
+		return False;
+
+ 	if(!prs_uint32("access", ps, depth, &q_o->access_mask))
+		return False;
+  
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_R_OPEN_TRUSTED_DOMAIN structure.
+********************************************************************/
+
+BOOL lsa_io_r_open_trusted_domain(const char *desc, LSA_R_OPEN_TRUSTED_DOMAIN *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_open_trusted_domain");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if (!smb_io_pol_hnd("handle", &out->handle, ps, depth))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL lsa_io_q_create_trusted_domain(const char *desc, LSA_Q_CREATE_TRUSTED_DOMAIN *in, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_create_trusted_domain");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("", &in->handle, ps, depth))
+		return False;
+
+	if(!prs_unistr4 ("secretname", ps, depth, &in->secretname))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("access", ps, depth, &in->access))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL lsa_io_r_create_trusted_domain(const char *desc, LSA_R_CREATE_TRUSTED_DOMAIN *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_create_trusted_domain");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if (!smb_io_pol_hnd("", &out->handle, ps, depth))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL lsa_io_q_create_secret(const char *desc, LSA_Q_CREATE_SECRET *in, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_create_secret");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("", &in->handle, ps, depth))
+		return False;
+
+	if(!prs_unistr4 ("secretname", ps, depth, &in->secretname))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("access", ps, depth, &in->access))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL lsa_io_r_create_secret(const char *desc, LSA_R_CREATE_SECRET *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_create_secret");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if (!smb_io_pol_hnd("", &out->handle, ps, depth))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+
+
+/*******************************************************************
+********************************************************************/
+
+static BOOL lsa_io_data_blob( const char *desc, prs_struct *ps, int depth, LSA_DATA_BLOB *blob )
+{
+	prs_debug(ps, depth, desc, "lsa_io_data_blob");
+	depth++;
+
+	if ( !prs_uint32("size", ps, depth, &blob->size) )
+		return False;
+	if ( !prs_uint32("size", ps, depth, &blob->size) )
+		return False;
+
+	if ( !prs_io_unistr2_p(desc, ps, depth, &blob->data) )
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL lsa_io_q_set_secret(const char *desc, LSA_Q_SET_SECRET *in, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_set_secret");
+	depth++;
+
+	if ( !prs_align(ps) )
+		return False;
+
+	if ( !smb_io_pol_hnd("", &in->handle, ps, depth) )
+		return False;
+
+	if ( !prs_pointer( "old_value", ps, depth, (void*)&in->old_value, sizeof(LSA_DATA_BLOB), (PRS_POINTER_CAST)lsa_io_data_blob ))
+		return False;
+
+	if( !prs_align(ps) )
+		return False;
+	if ( !prs_pointer( "old_value", ps, depth, (void*)&in->old_value, sizeof(LSA_DATA_BLOB), (PRS_POINTER_CAST)lsa_io_data_blob ))
+		return False;
+
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL lsa_io_r_set_secret(const char *desc, LSA_R_SET_SECRET *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_set_secret");
+	depth++;
+
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL lsa_io_q_delete_object(const char *desc, LSA_Q_DELETE_OBJECT *in, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_delete_object");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("", &in->handle, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL lsa_io_r_delete_object(const char *desc, LSA_R_DELETE_OBJECT *out, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_delete_object");
+	depth++;
+
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits an LSA_Q_QUERY_TRUSTED_DOMAIN_INFO structure.
+********************************************************************/
+
+void init_q_query_trusted_domain_info(LSA_Q_QUERY_TRUSTED_DOMAIN_INFO *q, 
+				      POLICY_HND *hnd, uint16 info_class) 
+{
+	DEBUG(5, ("init_q_query_trusted_domain_info\n"));
+	
+	q->pol = *hnd;
+	q->info_class = info_class;
+}
+
+/*******************************************************************
+ Inits an LSA_Q_QUERY_TRUSTED_DOMAIN_INFO_BY_NAME structure.
+********************************************************************/
+
+void init_q_query_trusted_domain_info_by_name(LSA_Q_QUERY_TRUSTED_DOMAIN_INFO_BY_NAME *q, 
+					      POLICY_HND *hnd, uint16 info_class, 
+					      const char *dom_name)
+{
+	DEBUG(5, ("init_q_query_trusted_domain_info_by_name\n"));
+	
+	q->pol = *hnd;
+	init_lsa_string(&q->domain_name, dom_name );
+	q->info_class = info_class;
+}
+
+/*******************************************************************
+ Inits an LSA_Q_QUERY_TRUSTED_DOMAIN_INFO_BY_SID structure.
+********************************************************************/
+
+void init_q_query_trusted_domain_info_by_sid(LSA_Q_QUERY_TRUSTED_DOMAIN_INFO_BY_SID *q, 
+					     POLICY_HND *hnd, uint16 info_class, 
+					     DOM_SID *dom_sid)
+{
+	DEBUG(5, ("init_q_query_trusted_domain_info_by_sid\n"));
+	
+	q->pol = *hnd;
+	init_dom_sid2(&q->dom_sid, dom_sid);
+	q->info_class = info_class;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_Q_QUERY_TRUSTED_DOMAIN_INFO structure.
+********************************************************************/
+
+BOOL lsa_io_q_query_trusted_domain_info(const char *desc, 
+					LSA_Q_QUERY_TRUSTED_DOMAIN_INFO *q_q,
+					prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_query_trusted_domain_info");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &q_q->pol, ps, depth))
+		return False;
+
+	if(!prs_uint16("info_class", ps, depth, &q_q->info_class))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+ Reads or writes an LSA_Q_QUERY_TRUSTED_DOMAIN_INFO_BY_SID structure.
+********************************************************************/
+
+BOOL lsa_io_q_query_trusted_domain_info_by_sid(const char *desc, 
+					       LSA_Q_QUERY_TRUSTED_DOMAIN_INFO_BY_SID *q_q,
+					       prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_query_trusted_domain_info_by_sid");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &q_q->pol, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_dom_sid2("dom_sid", &q_q->dom_sid, ps, depth))
+		return False;
+
+	if(!prs_uint16("info_class", ps, depth, &q_q->info_class))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_Q_QUERY_TRUSTED_DOMAIN_INFO_BY_NAME structure.
+********************************************************************/
+
+BOOL lsa_io_q_query_trusted_domain_info_by_name(const char *desc, 
+					        LSA_Q_QUERY_TRUSTED_DOMAIN_INFO_BY_NAME *q_q,
+					        prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_query_trusted_domain_info_by_name");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &q_q->pol, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_lsa_string("domain_name", &q_q->domain_name, ps, depth))
+		return False;
+
+	if(!prs_uint16("info_class", ps, depth, &q_q->info_class))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+static BOOL smb_io_lsa_data_buf_hdr(const char *desc, LSA_DATA_BUF_HDR *buf_hdr, 
+			  	    prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "smb_io_lsa_data_buf_hdr");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("length", ps, depth, &buf_hdr->length))
+		return False;
+	
+	if(!prs_uint32("size", ps, depth, &buf_hdr->size))
+		return False;
+
+	if (!prs_uint32("data_ptr", ps, depth, &buf_hdr->data_ptr))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+static BOOL smb_io_lsa_data_buf(const char *desc, LSA_DATA_BUF *buf, 
+				prs_struct *ps, int depth, int length, int size)
+{
+	prs_debug(ps, depth, desc, "smb_io_lsa_data_buf");
+	depth++;
+
+	if ( UNMARSHALLING(ps) && length ) {
+		if ( !(buf->data = PRS_ALLOC_MEM( ps, uint8, length )) )
+			return False;
+	}
+
+	if (!prs_uint32("size", ps, depth, &buf->size))
+		return False;
+
+	if (!prs_uint32("offset", ps, depth, &buf->offset))
+		return False;
+
+	if (!prs_uint32("length", ps, depth, &buf->length))
+		return False;
+
+	if(!prs_uint8s(False, "data", ps, depth, buf->data, length))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+static BOOL lsa_io_trustdom_query_1(const char *desc, TRUSTED_DOMAIN_INFO_NAME *name, 
+				    prs_struct *ps, int depth)
+{
+	if (!smb_io_lsa_string("netbios_name", &name->netbios_name, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+static BOOL lsa_io_trustdom_query_3(const char *desc, TRUSTED_DOMAIN_INFO_POSIX_OFFSET *posix, 
+				    prs_struct *ps, int depth)
+{
+	if(!prs_uint32("posix_offset", ps, depth, &posix->posix_offset))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+static BOOL lsa_io_trustdom_query_4(const char *desc, TRUSTED_DOMAIN_INFO_PASSWORD *password, 
+				    prs_struct *ps, int depth)
+{
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_uint32("ptr_password", ps, depth, &password->ptr_password))
+		return False;
+
+	if(!prs_uint32("ptr_old_password", ps, depth, &password->ptr_old_password))
+		return False;
+
+	if (&password->ptr_password) {
+	
+		if (!smb_io_lsa_data_buf_hdr("password_hdr", &password->password_hdr, ps, depth))
+			return False;
+
+		if (!smb_io_lsa_data_buf("password", &password->password, ps, depth, 
+					password->password_hdr.length, password->password_hdr.size))
+			return False;
+	}
+
+	if (&password->ptr_old_password) {
+
+		if (!smb_io_lsa_data_buf_hdr("old_password_hdr", &password->old_password_hdr, ps, depth))
+			return False;
+
+		if (!smb_io_lsa_data_buf("old_password", &password->old_password, ps, depth, 
+					password->old_password_hdr.length, password->old_password_hdr.size))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+static BOOL lsa_io_trustdom_query_6(const char *desc, TRUSTED_DOMAIN_INFO_EX *info_ex, 
+				    prs_struct *ps, int depth)
+{
+	uint32 dom_sid_ptr;
+	
+	if (!smb_io_unihdr("domain_name_hdr", &info_ex->domain_name.hdr, ps, depth))
+		return False;
+		
+	if (!smb_io_unihdr("netbios_name_hdr", &info_ex->netbios_name.hdr, ps, depth))
+		return False;
+
+	if (!prs_uint32("dom_sid_ptr", ps, depth, &dom_sid_ptr))
+		return False;
+
+	if (!prs_uint32("trust_direction", ps, depth, &info_ex->trust_direction))
+		return False;
+
+	if (!prs_uint32("trust_type", ps, depth, &info_ex->trust_type))
+		return False;
+
+	if (!prs_uint32("trust_attributes", ps, depth, &info_ex->trust_attributes))
+		return False;
+		
+	if (!smb_io_unistr2("domain_name_unistring", &info_ex->domain_name.unistring, info_ex->domain_name.hdr.buffer, ps, depth))
+		return False;
+		
+	if (!smb_io_unistr2("netbios_name_unistring", &info_ex->netbios_name.unistring, info_ex->netbios_name.hdr.buffer, ps, depth))
+		return False;
+
+	if (!smb_io_dom_sid2("sid", &info_ex->sid, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+static BOOL lsa_io_trustdom_query(const char *desc, prs_struct *ps, int depth, LSA_TRUSTED_DOMAIN_INFO *info)
+{
+	prs_debug(ps, depth, desc, "lsa_io_trustdom_query");
+	depth++;
+
+	if(!prs_uint16("info_class", ps, depth, &info->info_class))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	switch (info->info_class) {
+	case 1:
+		if(!lsa_io_trustdom_query_1("name", &info->name, ps, depth))
+			return False;
+		break;
+	case 3:
+		if(!lsa_io_trustdom_query_3("posix_offset", &info->posix_offset, ps, depth))
+			return False;
+		break;
+	case 4:
+		if(!lsa_io_trustdom_query_4("password", &info->password, ps, depth))
+			return False;
+		break;
+	case 6:
+		if(!lsa_io_trustdom_query_6("info_ex", &info->info_ex, ps, depth))
+			return False;
+		break;
+	default:
+		DEBUG(0,("unsupported info-level: %d\n", info->info_class));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_R_QUERY_TRUSTED_DOMAIN_INFO structure.
+********************************************************************/
+
+BOOL lsa_io_r_query_trusted_domain_info(const char *desc, 
+					LSA_R_QUERY_TRUSTED_DOMAIN_INFO *r_q, 
+					prs_struct *ps, int depth)
+{
+	if (r_q == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "lsa_io_r_query_trusted_domain_info");
+	depth++;
+
+	if (!prs_pointer("trustdom", ps, depth, (void*)&r_q->info, 
+			 sizeof(LSA_TRUSTED_DOMAIN_INFO), 
+			 (PRS_POINTER_CAST)lsa_io_trustdom_query) )
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_q->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits an LSA_Q_QUERY_DOM_INFO_POLICY structure.
+********************************************************************/
+
+void init_q_query_dom_info(LSA_Q_QUERY_DOM_INFO_POLICY *in, POLICY_HND *hnd, uint16 info_class)
+{
+	DEBUG(5, ("init_q_query_dom_info\n"));
+
+	memcpy(&in->pol, hnd, sizeof(in->pol));
+
+	in->info_class = info_class;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_Q_QUERY_DOM_INFO_POLICY structure.
+********************************************************************/
+
+BOOL lsa_io_q_query_dom_info(const char *desc, LSA_Q_QUERY_DOM_INFO_POLICY *in, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_q_query_dom_info");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+ 
+	if(!smb_io_pol_hnd("pol", &in->pol, ps, depth))
+		return False;
+	
+	if(!prs_uint16("info_class", ps, depth, &in->info_class))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an LSA_R_QUERY_DOM_INFO_POLICY structure.
+********************************************************************/
+
+static BOOL lsa_io_dominfo_query_3(const char *desc, LSA_DOM_INFO_POLICY_KERBEROS *krb_policy, 
+				   prs_struct *ps, int depth)
+{
+	if (!prs_align_uint64(ps))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("enforce_restrictions", ps, depth, &krb_policy->enforce_restrictions))
+		return False;
+
+	if (!prs_align_uint64(ps))
+		return False;
+
+	if (!smb_io_nttime("service_tkt_lifetime", ps, depth, &krb_policy->service_tkt_lifetime))
+		return False;
+
+	if (!prs_align_uint64(ps))
+		return False;
+	
+	if (!smb_io_nttime("user_tkt_lifetime", ps, depth, &krb_policy->user_tkt_lifetime))
+		return False;
+
+	if (!prs_align_uint64(ps))
+		return False;
+	
+	if (!smb_io_nttime("user_tkt_renewaltime", ps, depth, &krb_policy->user_tkt_renewaltime))
+		return False;
+
+	if (!prs_align_uint64(ps))
+		return False;
+	
+	if (!smb_io_nttime("clock_skew", ps, depth, &krb_policy->clock_skew))
+		return False;
+
+	if (!prs_align_uint64(ps))
+		return False;
+	
+	if (!smb_io_nttime("unknown6", ps, depth, &krb_policy->unknown6))
+		return False;
+
+	return True;
+}
+
+static BOOL lsa_io_dom_info_query(const char *desc, prs_struct *ps, int depth, LSA_DOM_INFO_UNION *info)
+{
+	prs_debug(ps, depth, desc, "lsa_io_dom_info_query");
+	depth++;
+
+	if(!prs_align_uint16(ps))
+		return False;
+
+	if(!prs_uint16("info_class", ps, depth, &info->info_class))
+		return False;
+
+	switch (info->info_class) {
+	case 3: 
+		if (!lsa_io_dominfo_query_3("krb_policy", &info->krb_policy, ps, depth))
+			return False;
+		break;
+	default:
+		DEBUG(0,("unsupported info-level: %d\n", info->info_class));
+		return False;
+		break;
+	}
+
+	return True;
+}
+
+
+BOOL lsa_io_r_query_dom_info(const char *desc, LSA_R_QUERY_DOM_INFO_POLICY *out,
+			     prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "lsa_io_r_query_dom_info");
+	depth++;
+
+	if (!prs_pointer("dominfo", ps, depth, (void*)&out->info, 
+			 sizeof(LSA_DOM_INFO_UNION), 
+			 (PRS_POINTER_CAST)lsa_io_dom_info_query) )
+		return False;
+	
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}

Modified: branches/samba/upstream/source/rpc_parse/parse_misc.c
===================================================================
--- branches/samba/upstream/source/rpc_parse/parse_misc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_parse/parse_misc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -25,11 +26,73 @@
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_PARSE
 
+/****************************************************************************
+ A temporary TALLOC context for things like unistrs, that is valid for
+ the life of a complete RPC call.
+****************************************************************************/
+
+static TALLOC_CTX *current_rpc_talloc = NULL;
+
+static TALLOC_CTX *get_current_rpc_talloc(void)
+{
+    return current_rpc_talloc;
+}
+
+void set_current_rpc_talloc( TALLOC_CTX *ctx)
+{
+	current_rpc_talloc = ctx;
+}
+
+static TALLOC_CTX *main_loop_talloc = NULL;
+
 /*******************************************************************
+free up temporary memory - called from the main loop
+********************************************************************/
+
+void main_loop_TALLOC_FREE(void)
+{
+    if (!main_loop_talloc)
+        return;
+    talloc_destroy(main_loop_talloc);
+    main_loop_talloc = NULL;
+}
+
+/*******************************************************************
+ Get a talloc context that is freed in the main loop...
+********************************************************************/
+
+TALLOC_CTX *main_loop_talloc_get(void)
+{
+    if (!main_loop_talloc) {
+        main_loop_talloc = talloc_init("main loop talloc (mainly parse_misc)");
+        if (!main_loop_talloc)
+            smb_panic("main_loop_talloc: malloc fail\n");
+    }
+
+    return main_loop_talloc;
+}
+
+/*******************************************************************
+ Try and get a talloc context. Get the rpc one if possible, else
+ get the main loop one. The main loop one is more dangerous as it
+ goes away between packets, the rpc one will stay around for as long
+ as a current RPC lasts.
+********************************************************************/ 
+
+TALLOC_CTX *get_talloc_ctx(void)
+{
+	TALLOC_CTX *tc = get_current_rpc_talloc();
+
+	if (tc)
+		return tc;
+	return main_loop_talloc_get();
+}
+
+/*******************************************************************
  Reads or writes a UTIME type.
 ********************************************************************/
 
-static bool smb_io_utime(const char *desc, UTIME *t, prs_struct *ps, int depth)
+static BOOL smb_io_utime(const char *desc, UTIME *t, prs_struct *ps, int depth)
 {
 	if (t == NULL)
 		return False;
@@ -50,7 +113,7 @@
  Reads or writes an NTTIME structure.
 ********************************************************************/
 
-bool smb_io_time(const char *desc, NTTIME *nttime, prs_struct *ps, int depth)
+BOOL smb_io_time(const char *desc, NTTIME *nttime, prs_struct *ps, int depth)
 {
 	uint32 low, high;
 	if (nttime == NULL)
@@ -83,7 +146,7 @@
  Reads or writes an NTTIME structure.
 ********************************************************************/
 
-bool smb_io_nttime(const char *desc, prs_struct *ps, int depth, NTTIME *nttime)
+BOOL smb_io_nttime(const char *desc, prs_struct *ps, int depth, NTTIME *nttime)
 {
 	return smb_io_time( desc, nttime, ps, depth );
 }
@@ -113,7 +176,7 @@
  Reads or writes an ENUM_HND structure.
 ********************************************************************/
 
-bool smb_io_enum_hnd(const char *desc, ENUM_HND *hnd, prs_struct *ps, int depth)
+BOOL smb_io_enum_hnd(const char *desc, ENUM_HND *hnd, prs_struct *ps, int depth)
 {
 	if (hnd == NULL)
 		return False;
@@ -139,7 +202,7 @@
  Reads or writes a DOM_SID structure.
 ********************************************************************/
 
-bool smb_io_dom_sid(const char *desc, DOM_SID *sid, prs_struct *ps, int depth)
+BOOL smb_io_dom_sid(const char *desc, DOM_SID *sid, prs_struct *ps, int depth)
 {
 	int i;
 
@@ -187,7 +250,7 @@
  Reads or writes a DOM_SID2 structure.
 ********************************************************************/
 
-bool smb_io_dom_sid2_p(const char *desc, prs_struct *ps, int depth, DOM_SID2 **sid2)
+BOOL smb_io_dom_sid2_p(const char *desc, prs_struct *ps, int depth, DOM_SID2 **sid2)
 {
 	uint32 data_p;
 
@@ -214,7 +277,7 @@
  Reads or writes a DOM_SID2 structure.
 ********************************************************************/
 
-bool smb_io_dom_sid2(const char *desc, DOM_SID2 *sid, prs_struct *ps, int depth)
+BOOL smb_io_dom_sid2(const char *desc, DOM_SID2 *sid, prs_struct *ps, int depth)
 {
 	if (sid == NULL)
 		return False;
@@ -238,7 +301,7 @@
  Reads or writes a struct GUID
 ********************************************************************/
 
-bool smb_io_uuid(const char *desc, struct GUID *uuid, 
+BOOL smb_io_uuid(const char *desc, struct GUID *uuid, 
 		 prs_struct *ps, int depth)
 {
 	if (uuid == NULL)
@@ -277,7 +340,7 @@
  Reads or writes a STRHDR structure.
 ********************************************************************/
 
-bool smb_io_strhdr(const char *desc,  STRHDR *hdr, prs_struct *ps, int depth)
+BOOL smb_io_strhdr(const char *desc,  STRHDR *hdr, prs_struct *ps, int depth)
 {
 	if (hdr == NULL)
 		return False;
@@ -285,8 +348,7 @@
 	prs_debug(ps, depth, desc, "smb_io_strhdr");
 	depth++;
 
-	if(!prs_align(ps))
-		return False;
+	prs_align(ps);
 	
 	if(!prs_uint16("str_str_len", ps, depth, &hdr->str_str_len))
 		return False;
@@ -313,7 +375,7 @@
  Reads or writes a UNIHDR structure.
 ********************************************************************/
 
-bool smb_io_unihdr(const char *desc, UNIHDR *hdr, prs_struct *ps, int depth)
+BOOL smb_io_unihdr(const char *desc, UNIHDR *hdr, prs_struct *ps, int depth)
 {
 	if (hdr == NULL)
 		return False;
@@ -349,7 +411,7 @@
  uint16 should be stored, or gets the size if reading.
  ********************************************************************/
 
-bool smb_io_hdrbuf_pre(const char *desc, BUFHDR *hdr, prs_struct *ps, int depth, uint32 *offset)
+BOOL smb_io_hdrbuf_pre(const char *desc, BUFHDR *hdr, prs_struct *ps, int depth, uint32 *offset)
 {
 	(*offset) = prs_offset(ps);
 	if (ps->io) {
@@ -375,7 +437,7 @@
  Does nothing on reading, as that is already handled by ...._pre()
  ********************************************************************/
 
-bool smb_io_hdrbuf_post(const char *desc, BUFHDR *hdr, prs_struct *ps, int depth, 
+BOOL smb_io_hdrbuf_post(const char *desc, BUFHDR *hdr, prs_struct *ps, int depth, 
 				uint32 ptr_hdrbuf, uint32 max_len, uint32 len)
 {
 	if (!ps->io) {
@@ -400,7 +462,7 @@
  Reads or writes a BUFHDR structure.
 ********************************************************************/
 
-bool smb_io_hdrbuf(const char *desc, BUFHDR *hdr, prs_struct *ps, int depth)
+BOOL smb_io_hdrbuf(const char *desc, BUFHDR *hdr, prs_struct *ps, int depth)
 {
 	if (hdr == NULL)
 		return False;
@@ -431,9 +493,16 @@
 		str->buffer = NULL;
 		return;
 	}
+		
+	len = strlen(buf) + 1;
 
-	len = rpcstr_push_talloc(talloc_tos(), &str->buffer, buf);
-	if (len == (size_t)-1) {
+	if (len) {
+		str->buffer = TALLOC_ZERO_ARRAY(get_talloc_ctx(), uint16, len);
+		if (str->buffer == NULL)
+			smb_panic("init_unistr: malloc fail\n");
+
+		rpcstr_push(str->buffer, buf, len*sizeof(uint16), STR_TERMINATE);
+	} else {
 		str->buffer = NULL;
 	}
 }
@@ -443,7 +512,7 @@
 XXXX NOTE: UNISTR structures NEED to be null-terminated.
 ********************************************************************/
 
-bool smb_io_unistr(const char *desc, UNISTR *uni, prs_struct *ps, int depth)
+BOOL smb_io_unistr(const char *desc, UNISTR *uni, prs_struct *ps, int depth)
 {
 	if (uni == NULL)
 		return False;
@@ -464,9 +533,9 @@
 static void create_rpc_blob(RPC_DATA_BLOB *str, size_t len)
 {
 	if (len) {
-		str->buffer = (uint8 *)TALLOC_ZERO(talloc_tos(), len);
+		str->buffer = (uint8 *)TALLOC_ZERO(get_talloc_ctx(), len);
 		if (str->buffer == NULL)
-			smb_panic("create_rpc_blob: talloc fail");
+			smb_panic("create_rpc_blob: talloc fail\n");
 		str->buf_len = len;
 	} else {
 		str->buffer = NULL;
@@ -510,10 +579,8 @@
 {
 	ZERO_STRUCTP(str);
 	if (buf && *buf) {
-		size_t len = strlen(buf);
-		create_rpc_blob(str, len);
-		str->buf_len = strhex_to_str((char *)str->buffer, str->buf_len,
-				buf, len);
+		create_rpc_blob(str, strlen(buf));
+		str->buf_len = strhex_to_str((char *)str->buffer, str->buf_len, buf);
 	}
 }
 
@@ -537,7 +604,7 @@
 reads or writes a BUFFER5 structure.
 the buf_len member tells you how large the buffer is.
 ********************************************************************/
-bool smb_io_buffer5(const char *desc, BUFFER5 *buf5, prs_struct *ps, int depth)
+BOOL smb_io_buffer5(const char *desc, BUFFER5 *buf5, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "smb_io_buffer5");
 	depth++;
@@ -572,10 +639,10 @@
 
 	if (buf != NULL) {
 		SMB_ASSERT(str->buf_max_len >= str->buf_len);
-		str->buffer = (uint16 *)TALLOC_ZERO(talloc_tos(),
+		str->buffer = (uint16 *)TALLOC_ZERO(get_talloc_ctx(),
 						    str->buf_max_len);
 		if (str->buffer == NULL)
-			smb_panic("init_regval_buffer: talloc fail");
+			smb_panic("init_regval_buffer: talloc fail\n");
 		memcpy(str->buffer, buf, str->buf_len);
 	}
 }
@@ -586,7 +653,7 @@
    the uni_str_len member tells you how much of the buffer is really used.
 ********************************************************************/
 
-bool smb_io_regval_buffer(const char *desc, prs_struct *ps, int depth, REGVAL_BUFFER *buf2)
+BOOL smb_io_regval_buffer(const char *desc, prs_struct *ps, int depth, REGVAL_BUFFER *buf2)
 {
 
 	prs_debug(ps, depth, desc, "smb_io_regval_buffer");
@@ -649,9 +716,9 @@
 	   reallocation of memory. */
 	if (str->buffer == NULL) {
 		if (str->uni_max_len) {
-			str->buffer = (uint16 *)TALLOC_ZERO_ARRAY(talloc_tos(), uint16, str->uni_max_len);
+	   		str->buffer = (uint16 *)TALLOC_ZERO_ARRAY(get_talloc_ctx(), uint16, str->uni_max_len);
 			if ((str->buffer == NULL)) {
-				smb_panic("copy_unistr2: talloc fail");
+				smb_panic("copy_unistr2: talloc fail\n");
 				return;
 			}
 			/* copy the string */
@@ -682,10 +749,10 @@
 
 	/* store the string */
 	if(str_len != 0) {
-		str->buffer = (uint8 *)TALLOC_ZERO(talloc_tos(),
+		str->buffer = (uint8 *)TALLOC_ZERO(get_talloc_ctx(),
 						   str->str_max_len);
 		if (str->buffer == NULL)
-			smb_panic("init_string2: malloc fail");
+			smb_panic("init_string2: malloc fail\n");
 		memcpy(str->buffer, buf, str_len);
 	}
 }
@@ -697,7 +764,7 @@
    the str_max_len member tells you how large the buffer is.
 ********************************************************************/
 
-bool smb_io_string2(const char *desc, STRING2 *str2, uint32 buffer, prs_struct *ps, int depth)
+BOOL smb_io_string2(const char *desc, STRING2 *str2, uint32 buffer, prs_struct *ps, int depth)
 {
 	if (str2 == NULL)
 		return False;
@@ -759,9 +826,9 @@
 	}
 	
 
-	str->buffer = TALLOC_ZERO_ARRAY(talloc_tos(), uint16, len);
+	str->buffer = TALLOC_ZERO_ARRAY(get_talloc_ctx(), uint16, len);
 	if (str->buffer == NULL) {
-		smb_panic("init_unistr2: malloc fail");
+		smb_panic("init_unistr2: malloc fail\n");
 		return;
 	}
 
@@ -795,9 +862,9 @@
 
 void init_unistr4(UNISTR4 *uni4, const char *buf, enum unistr2_term_codes flags)
 {
-	uni4->string = TALLOC_P( talloc_tos(), UNISTR2 );
+	uni4->string = TALLOC_P( get_talloc_ctx(), UNISTR2 );
 	if (!uni4->string) {
-		smb_panic("init_unistr4: talloc fail");
+		smb_panic("init_unistr4: talloc fail\n");
 		return;
 	}
 	init_unistr2( uni4->string, buf, flags );
@@ -810,7 +877,7 @@
 {
 	uni4->string = TALLOC_P( ctx, UNISTR2 );
 	if (!uni4->string) {
-		smb_panic("init_unistr4_w: talloc fail");
+		smb_panic("init_unistr4_w: talloc fail\n");
 		return;
 	}
 	init_unistr2_w( ctx, uni4->string, buf );
@@ -840,7 +907,7 @@
 	if (len + 1) {
 		str->buffer = TALLOC_ZERO_ARRAY(ctx, uint16, len + 1);
 		if (str->buffer == NULL) {
-			smb_panic("init_unistr2_w: talloc fail");
+			smb_panic("init_unistr2_w: talloc fail\n");
 			return;
 		}
 	} else {
@@ -866,7 +933,7 @@
  Inits a UNISTR2 structure from a UNISTR
 ********************************************************************/
 
-void init_unistr2_from_unistr(TALLOC_CTX *ctx, UNISTR2 *to, const UNISTR *from)
+void init_unistr2_from_unistr(UNISTR2 *to, const UNISTR *from)
 {
 	uint32 i;
 
@@ -894,9 +961,9 @@
 
 	/* allocate the space and copy the string buffer */
 	if (i) {
-		to->buffer = TALLOC_ZERO_ARRAY(ctx, uint16, i);
+		to->buffer = TALLOC_ZERO_ARRAY(get_talloc_ctx(), uint16, i);
 		if (to->buffer == NULL)
-			smb_panic("init_unistr2_from_unistr: talloc fail");
+			smb_panic("init_unistr2_from_unistr: malloc fail\n");
 		memcpy(to->buffer, from->buffer, i*sizeof(uint16));
 	} else {
 		to->buffer = NULL;
@@ -925,7 +992,7 @@
 		str->buffer = NULL;
 	}
 	if ((str->buffer == NULL) && (blob->length > 0)) {
-		smb_panic("init_unistr2_from_datablob: malloc fail");
+		smb_panic("init_unistr2_from_datablob: malloc fail\n");
 	}
 }
 
@@ -936,7 +1003,7 @@
  See SPOOL_USER_1 in include/rpc_spoolss.h for an example.
 ********************************************************************/
 
-bool prs_io_unistr2_p(const char *desc, prs_struct *ps, int depth, UNISTR2 **uni2)
+BOOL prs_io_unistr2_p(const char *desc, prs_struct *ps, int depth, UNISTR2 **uni2)
 {
 	uint32 data_p;
 
@@ -965,7 +1032,7 @@
  not UNISTR2.buffer) has been allocated previously by prs_unistr2_p()
 ********************************************************************/
 
-bool prs_io_unistr2(const char *desc, prs_struct *ps, int depth, UNISTR2 *uni2 )
+BOOL prs_io_unistr2(const char *desc, prs_struct *ps, int depth, UNISTR2 *uni2 )
 {
 	/* just return true if there is no pointer to deal with.
 	   the memory must have been previously allocated on unmarshalling
@@ -987,7 +1054,7 @@
    the uni_max_len member tells you how large the buffer is.
 ********************************************************************/
 
-bool smb_io_unistr2(const char *desc, UNISTR2 *uni2, uint32 buffer, prs_struct *ps, int depth)
+BOOL smb_io_unistr2(const char *desc, UNISTR2 *uni2, uint32 buffer, prs_struct *ps, int depth)
 {
 	if (uni2 == NULL)
 		return False;
@@ -1027,7 +1094,7 @@
  now read/write UNISTR4
 ********************************************************************/
 
-bool prs_unistr4(const char *desc, prs_struct *ps, int depth, UNISTR4 *uni4)
+BOOL prs_unistr4(const char *desc, prs_struct *ps, int depth, UNISTR4 *uni4)
 {
 	void *ptr;
 	prs_debug(ps, depth, desc, "prs_unistr4");
@@ -1052,7 +1119,7 @@
  now read/write UNISTR4 header
 ********************************************************************/
 
-bool prs_unistr4_hdr(const char *desc, prs_struct *ps, int depth, UNISTR4 *uni4)
+BOOL prs_unistr4_hdr(const char *desc, prs_struct *ps, int depth, UNISTR4 *uni4)
 {
 	prs_debug(ps, depth, desc, "prs_unistr4_hdr");
 	depth++;
@@ -1071,7 +1138,7 @@
  now read/write UNISTR4 string
 ********************************************************************/
 
-bool prs_unistr4_str(const char *desc, prs_struct *ps, int depth, UNISTR4 *uni4)
+BOOL prs_unistr4_str(const char *desc, prs_struct *ps, int depth, UNISTR4 *uni4)
 {
 	prs_debug(ps, depth, desc, "prs_unistr4_str");
 	depth++;
@@ -1086,7 +1153,7 @@
  Reads or writes a UNISTR4_ARRAY structure.
 ********************************************************************/
 
-bool prs_unistr4_array(const char *desc, prs_struct *ps, int depth, UNISTR4_ARRAY *array )
+BOOL prs_unistr4_array(const char *desc, prs_struct *ps, int depth, UNISTR4_ARRAY *array )
 {
 	unsigned int i;
 
@@ -1098,7 +1165,7 @@
 
 	if (UNMARSHALLING(ps)) {
 		if (array->count) {
-			if ( !(array->strings = TALLOC_ZERO_ARRAY( talloc_tos(), UNISTR4, array->count)) )
+			if ( !(array->strings = TALLOC_ZERO_ARRAY( get_talloc_ctx(), UNISTR4, array->count)) )
 				return False;
 		} else {
 			array->strings = NULL;
@@ -1124,7 +1191,7 @@
   initialise a UNISTR_ARRAY from a char**
 ********************************************************************/
 
-bool init_unistr4_array( UNISTR4_ARRAY *array, uint32 count, const char **strings )
+BOOL init_unistr4_array( UNISTR4_ARRAY *array, uint32 count, const char **strings )
 {
 	unsigned int i;
 
@@ -1133,7 +1200,7 @@
 	/* allocate memory for the array of UNISTR4 objects */
 
 	if (array->count) {
-		if ( !(array->strings = TALLOC_ZERO_ARRAY(talloc_tos(), UNISTR4, count )) )
+		if ( !(array->strings = TALLOC_ZERO_ARRAY(get_talloc_ctx(), UNISTR4, count )) )
 			return False;
 	} else {
 		array->strings = NULL;
@@ -1145,6 +1212,53 @@
 	return True;
 }
 
+BOOL smb_io_lockout_string_hdr(const char *desc, HDR_LOCKOUT_STRING *hdr_account_lockout, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "smb_io_lockout_string_hdr");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint16("size", ps, depth, &hdr_account_lockout->size))
+		return False;
+	if(!prs_uint16("length", ps, depth, &hdr_account_lockout->length))
+		return False;
+	if(!prs_uint32("buffer", ps, depth, &hdr_account_lockout->buffer))
+		return False;
+
+	return True;
+}
+
+BOOL smb_io_account_lockout_str(const char *desc, LOCKOUT_STRING *account_lockout, uint32 buffer, prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "smb_io_account_lockout_string");
+	depth++;
+
+	if(!prs_uint32("array_size", ps, depth, &account_lockout->array_size))
+		return False;
+
+	if(!prs_uint32("offset", ps, depth, &account_lockout->offset))
+		return False;
+	if(!prs_uint32("length", ps, depth, &account_lockout->length))
+		return False;
+
+	if (!prs_uint64("lockout_duration", ps, depth, &account_lockout->lockout_duration))
+		return False;
+	if (!prs_uint64("reset_count", ps, depth, &account_lockout->reset_count))
+		return False;
+	if (!prs_uint32("bad_attempt_lockout", ps, depth, &account_lockout->bad_attempt_lockout))
+		return False;
+	if (!prs_uint32("dummy", ps, depth, &account_lockout->dummy))
+		return False;
+#if 0
+	if(!prs_uint16s (False, "bindata", ps, depth, &account_lockout->bindata, length))
+		return False;
+#endif
+
+	return True;
+}
+
 /*******************************************************************
  Inits a DOM_RID structure.
 ********************************************************************/
@@ -1160,7 +1274,7 @@
  Reads or writes a DOM_RID structure.
 ********************************************************************/
 
-bool smb_io_dom_rid(const char *desc, DOM_RID *rid, prs_struct *ps, int depth)
+BOOL smb_io_dom_rid(const char *desc, DOM_RID *rid, prs_struct *ps, int depth)
 {
 	if (rid == NULL)
 		return False;
@@ -1187,7 +1301,7 @@
  Reads or writes a DOM_RID2 structure.
 ********************************************************************/
 
-bool smb_io_dom_rid2(const char *desc, DOM_RID2 *rid, prs_struct *ps, int depth)
+BOOL smb_io_dom_rid2(const char *desc, DOM_RID2 *rid, prs_struct *ps, int depth)
 {
 	if (rid == NULL)
 		return False;
@@ -1230,7 +1344,7 @@
 reads or writes a DOM_RID3 structure.
 ********************************************************************/
 
-bool smb_io_dom_rid3(const char *desc, DOM_RID3 *rid3, prs_struct *ps, int depth)
+BOOL smb_io_dom_rid3(const char *desc, DOM_RID3 *rid3, prs_struct *ps, int depth)
 {
 	if (rid3 == NULL)
 		return False;
@@ -1270,8 +1384,7 @@
  Inits a DOM_CLNT_SRV structure.
 ********************************************************************/
 
-void init_clnt_srv(DOM_CLNT_SRV *logcln, const char *logon_srv,
-		   const char *comp_name)
+static void init_clnt_srv(DOM_CLNT_SRV *logcln, const char *logon_srv, const char *comp_name)
 {
 	DEBUG(5,("init_clnt_srv: %d\n", __LINE__));
 
@@ -1294,7 +1407,7 @@
  Inits or writes a DOM_CLNT_SRV structure.
 ********************************************************************/
 
-bool smb_io_clnt_srv(const char *desc, DOM_CLNT_SRV *logcln, prs_struct *ps, int depth)
+BOOL smb_io_clnt_srv(const char *desc, DOM_CLNT_SRV *logcln, prs_struct *ps, int depth)
 {
 	if (logcln == NULL)
 		return False;
@@ -1350,7 +1463,7 @@
  Reads or writes a DOM_LOG_INFO structure.
 ********************************************************************/
 
-bool smb_io_log_info(const char *desc, DOM_LOG_INFO *loginfo, prs_struct *ps, int depth)
+BOOL smb_io_log_info(const char *desc, DOM_LOG_INFO *loginfo, prs_struct *ps, int depth)
 {
 	if (loginfo == NULL)
 		return False;
@@ -1382,7 +1495,7 @@
  Reads or writes a DOM_CHAL structure.
 ********************************************************************/
 
-bool smb_io_chal(const char *desc, DOM_CHAL *chal, prs_struct *ps, int depth)
+BOOL smb_io_chal(const char *desc, DOM_CHAL *chal, prs_struct *ps, int depth)
 {
 	if (chal == NULL)
 		return False;
@@ -1400,7 +1513,7 @@
  Reads or writes a DOM_CRED structure.
 ********************************************************************/
 
-bool smb_io_cred(const char *desc,  DOM_CRED *cred, prs_struct *ps, int depth)
+BOOL smb_io_cred(const char *desc,  DOM_CRED *cred, prs_struct *ps, int depth)
 {
 	if (cred == NULL)
 		return False;
@@ -1444,7 +1557,7 @@
  Reads or writes a DOM_CLNT_INFO2 structure.
 ********************************************************************/
 
-bool smb_io_clnt_info2(const char *desc, DOM_CLNT_INFO2 *clnt, prs_struct *ps, int depth)
+BOOL smb_io_clnt_info2(const char *desc, DOM_CLNT_INFO2 *clnt, prs_struct *ps, int depth)
 {
 	if (clnt == NULL)
 		return False;
@@ -1488,7 +1601,7 @@
  Reads or writes a DOM_CLNT_INFO structure.
 ********************************************************************/
 
-bool smb_io_clnt_info(const char *desc,  DOM_CLNT_INFO *clnt, prs_struct *ps, int depth)
+BOOL smb_io_clnt_info(const char *desc,  DOM_CLNT_INFO *clnt, prs_struct *ps, int depth)
 {
 	if (clnt == NULL)
 		return False;
@@ -1523,7 +1636,7 @@
  Reads or writes a DOM_LOGON_ID structure.
 ********************************************************************/
 
-bool smb_io_logon_id(const char *desc, DOM_LOGON_ID *logonid, prs_struct *ps, int depth)
+BOOL smb_io_logon_id(const char *desc, DOM_LOGON_ID *logonid, prs_struct *ps, int depth)
 {
 	if (logonid == NULL)
 		return False;
@@ -1560,7 +1673,7 @@
  Reads or writes an OWF_INFO structure.
 ********************************************************************/
 
-bool smb_io_owf_info(const char *desc, OWF_INFO *hash, prs_struct *ps, int depth)
+BOOL smb_io_owf_info(const char *desc, OWF_INFO *hash, prs_struct *ps, int depth)
 {
 	if (hash == NULL)
 		return False;
@@ -1581,7 +1694,7 @@
  Reads or writes a DOM_GID structure.
 ********************************************************************/
 
-bool smb_io_gid(const char *desc,  DOM_GID *gid, prs_struct *ps, int depth)
+BOOL smb_io_gid(const char *desc,  DOM_GID *gid, prs_struct *ps, int depth)
 {
 	if (gid == NULL)
 		return False;
@@ -1604,7 +1717,7 @@
  Reads or writes an POLICY_HND structure.
 ********************************************************************/
 
-bool smb_io_pol_hnd(const char *desc, POLICY_HND *pol, prs_struct *ps, int depth)
+BOOL smb_io_pol_hnd(const char *desc, POLICY_HND *pol, prs_struct *ps, int depth)
 {
 	if (pol == NULL)
 		return False;
@@ -1641,9 +1754,9 @@
 	str->uni_str_len = strlen(buf) + 1;
 
 	if (str->uni_str_len) {
-		str->str.buffer = TALLOC_ZERO_ARRAY(talloc_tos(), uint16, str->uni_str_len);
+		str->str.buffer = TALLOC_ZERO_ARRAY(get_talloc_ctx(), uint16, str->uni_str_len);
 		if (str->str.buffer == NULL)
-			smb_panic("init_unistr3: malloc fail");
+			smb_panic("init_unistr3: malloc fail\n");
 
 		rpcstr_push((char *)str->str.buffer, buf, str->uni_str_len * sizeof(uint16), STR_TERMINATE);
 	} else {
@@ -1655,7 +1768,7 @@
  Reads or writes a UNISTR3 structure.
 ********************************************************************/
 
-bool smb_io_unistr3(const char *desc, UNISTR3 *name, prs_struct *ps, int depth)
+BOOL smb_io_unistr3(const char *desc, UNISTR3 *name, prs_struct *ps, int depth)
 {
 	if (name == NULL)
 		return False;
@@ -1686,7 +1799,7 @@
 /*******************************************************************
  Stream a uint64_struct
  ********************************************************************/
-bool prs_uint64(const char *name, prs_struct *ps, int depth, uint64 *data64)
+BOOL prs_uint64(const char *name, prs_struct *ps, int depth, uint64 *data64)
 {
 	if (UNMARSHALLING(ps)) {
 		uint32 high, low;
@@ -1710,19 +1823,15 @@
 /*******************************************************************
 reads or writes a BUFHDR2 structure.
 ********************************************************************/
-bool smb_io_bufhdr2(const char *desc, BUFHDR2 *hdr, prs_struct *ps, int depth)
+BOOL smb_io_bufhdr2(const char *desc, BUFHDR2 *hdr, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "smb_io_bufhdr2");
 	depth++;
 
-	if (!prs_align(ps))
-		return False;
-	if (!prs_uint32("info_level", ps, depth, &(hdr->info_level)))
-		return False;
-	if (!prs_uint32("length    ", ps, depth, &(hdr->length    )))
-		return False;
-	if (!prs_uint32("buffer    ", ps, depth, &(hdr->buffer    )))
-		return False;
+	prs_align(ps);
+	prs_uint32("info_level", ps, depth, &(hdr->info_level));
+	prs_uint32("length    ", ps, depth, &(hdr->length    ));
+	prs_uint32("buffer    ", ps, depth, &(hdr->buffer    ));
 
 	return True;
 }
@@ -1730,17 +1839,14 @@
 /*******************************************************************
 reads or writes a BUFHDR4 structure.
 ********************************************************************/
-bool smb_io_bufhdr4(const char *desc, BUFHDR4 *hdr, prs_struct *ps, int depth)
+BOOL smb_io_bufhdr4(const char *desc, BUFHDR4 *hdr, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "smb_io_bufhdr4");
 	depth++;
 
-	if (!prs_align(ps))
-		return False;
-	if (!prs_uint32("size", ps, depth, &hdr->size))
-		return False;
-	if (!prs_uint32("buffer", ps, depth, &hdr->buffer))
-		return False;
+	prs_align(ps);
+	prs_uint32("size", ps, depth, &hdr->size);
+	prs_uint32("buffer", ps, depth, &hdr->buffer);
 
 	return True;
 }
@@ -1749,13 +1855,12 @@
 reads or writes a RPC_DATA_BLOB structure.
 ********************************************************************/
 
-bool smb_io_rpc_blob(const char *desc, RPC_DATA_BLOB *blob, prs_struct *ps, int depth)
+BOOL smb_io_rpc_blob(const char *desc, RPC_DATA_BLOB *blob, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "smb_io_rpc_blob");
 	depth++;
 
-	if (!prs_align(ps))
-		return False;
+	prs_align(ps);
 	if ( !prs_uint32("buf_len", ps, depth, &blob->buf_len) )
 		return False;
 
@@ -1779,7 +1884,7 @@
 creates a UNIHDR structure.
 ********************************************************************/
 
-bool make_uni_hdr(UNIHDR *hdr, int len)
+BOOL make_uni_hdr(UNIHDR *hdr, int len)
 {
 	if (hdr == NULL)
 	{
@@ -1795,7 +1900,7 @@
 /*******************************************************************
 creates a BUFHDR2 structure.
 ********************************************************************/
-bool make_bufhdr2(BUFHDR2 *hdr, uint32 info_level, uint32 length, uint32 buffer)
+BOOL make_bufhdr2(BUFHDR2 *hdr, uint32 info_level, uint32 length, uint32 buffer)
 {
 	hdr->info_level = info_level;
 	hdr->length     = length;
@@ -1821,14 +1926,4 @@
 	return i;
 }
 
-/*******************************************************************
- Verifies policy handle
-********************************************************************/
 
-bool policy_handle_is_valid(const POLICY_HND *hnd)
-{
-	POLICY_HND zero_pol;
-
-	ZERO_STRUCT(zero_pol);
-	return ((memcmp(&zero_pol, hnd, sizeof(POLICY_HND)) == 0) ? false : true );
-}

Copied: branches/samba/upstream/source/rpc_parse/parse_net.c (from rev 1928, branches/samba/upstream/source/rpc_parse/parse_net.c)
===================================================================
--- branches/samba/upstream/source/rpc_parse/parse_net.c	                        (rev 0)
+++ branches/samba/upstream/source/rpc_parse/parse_net.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,3823 @@
+/* 
+ *  Unix SMB/CIFS implementation.
+ *  RPC Pipe client / server routines
+ *  Copyright (C) Andrew Tridgell              1992-1997,
+ *  Copyright (C) Luke Kenneth Casson Leighton 1996-1997,
+ *  Copyright (C) Paul Ashton                       1997.
+ *  Copyright (C) Jean Francois Micouleau           2002.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_RPC_PARSE
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL net_io_neg_flags(const char *desc, NEG_FLAGS *neg, prs_struct *ps, int depth)
+{
+	if (neg == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_neg_flags");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_uint32("neg_flags", ps, depth, &neg->neg_flags))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a NETLOGON_INFO_3 structure.
+********************************************************************/
+
+static void init_netinfo_3(NETLOGON_INFO_3 *info, uint32 flags, uint32 logon_attempts)
+{
+	info->flags          = flags;
+	info->logon_attempts = logon_attempts;
+	info->reserved_1     = 0x0;
+	info->reserved_2     = 0x0;
+	info->reserved_3     = 0x0;
+	info->reserved_4     = 0x0;
+	info->reserved_5     = 0x0;
+}
+
+/*******************************************************************
+ Reads or writes a NETLOGON_INFO_3 structure.
+********************************************************************/
+
+static BOOL net_io_netinfo_3(const char *desc,  NETLOGON_INFO_3 *info, prs_struct *ps, int depth)
+{
+	if (info == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_netinfo_3");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("flags         ", ps, depth, &info->flags))
+		return False;
+	if(!prs_uint32("logon_attempts", ps, depth, &info->logon_attempts))
+		return False;
+	if(!prs_uint32("reserved_1    ", ps, depth, &info->reserved_1))
+		return False;
+	if(!prs_uint32("reserved_2    ", ps, depth, &info->reserved_2))
+		return False;
+	if(!prs_uint32("reserved_3    ", ps, depth, &info->reserved_3))
+		return False;
+	if(!prs_uint32("reserved_4    ", ps, depth, &info->reserved_4))
+		return False;
+	if(!prs_uint32("reserved_5    ", ps, depth, &info->reserved_5))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+ Inits a NETLOGON_INFO_1 structure.
+********************************************************************/
+
+static void init_netinfo_1(NETLOGON_INFO_1 *info, uint32 flags, uint32 pdc_status)
+{
+	info->flags      = flags;
+	info->pdc_status = pdc_status;
+}
+
+/*******************************************************************
+ Reads or writes a NETLOGON_INFO_1 structure.
+********************************************************************/
+
+static BOOL net_io_netinfo_1(const char *desc, NETLOGON_INFO_1 *info, prs_struct *ps, int depth)
+{
+	if (info == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_netinfo_1");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_uint32("flags     ", ps, depth, &info->flags))
+		return False;
+	if(!prs_uint32("pdc_status", ps, depth, &info->pdc_status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a NETLOGON_INFO_2 structure.
+********************************************************************/
+
+static void init_netinfo_2(NETLOGON_INFO_2 *info, uint32 flags, uint32 pdc_status,
+				uint32 tc_status, const char *trusted_dc_name)
+{
+	info->flags      = flags;
+	info->pdc_status = pdc_status;
+	info->ptr_trusted_dc_name = 1;
+	info->tc_status  = tc_status;
+
+	if (trusted_dc_name != NULL)
+		init_unistr2(&info->uni_trusted_dc_name, trusted_dc_name, UNI_STR_TERMINATE);
+	else
+		init_unistr2(&info->uni_trusted_dc_name, "", UNI_STR_TERMINATE);
+}
+
+/*******************************************************************
+ Reads or writes a NETLOGON_INFO_2 structure.
+********************************************************************/
+
+static BOOL net_io_netinfo_2(const char *desc, NETLOGON_INFO_2 *info, prs_struct *ps, int depth)
+{
+	if (info == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_netinfo_2");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_uint32("flags              ", ps, depth, &info->flags))
+		return False;
+	if(!prs_uint32("pdc_status         ", ps, depth, &info->pdc_status))
+		return False;
+	if(!prs_uint32("ptr_trusted_dc_name", ps, depth, &info->ptr_trusted_dc_name))
+		return False;
+	if(!prs_uint32("tc_status          ", ps, depth, &info->tc_status))
+		return False;
+
+	if (info->ptr_trusted_dc_name != 0) {
+		if(!smb_io_unistr2("unistr2", &info->uni_trusted_dc_name, info->ptr_trusted_dc_name, ps, depth))
+			return False;
+	}
+
+	if(!prs_align(ps))
+		return False;
+
+	return True;
+}
+
+static BOOL net_io_ctrl_data_info_5(const char *desc, CTRL_DATA_INFO_5 *info, prs_struct *ps, int depth)
+{
+	if (info == NULL)
+		return False;
+		
+	prs_debug(ps, depth, desc, "net_io_ctrl_data_info_5");
+	depth++;
+	
+	if ( !prs_uint32( "function_code", ps, depth, &info->function_code ) )
+		return False;
+	
+	if(!prs_uint32("ptr_domain", ps, depth, &info->ptr_domain))
+		return False;
+		
+	if ( info->ptr_domain ) {
+		if(!smb_io_unistr2("domain", &info->domain, info->ptr_domain, ps, depth))
+			return False;
+	}
+		
+	return True;
+}
+
+static BOOL net_io_ctrl_data_info_6(const char *desc, CTRL_DATA_INFO_6 *info, prs_struct *ps, int depth)
+{
+	if (info == NULL)
+		return False;
+		
+	prs_debug(ps, depth, desc, "net_io_ctrl_data_info_6");
+	depth++;
+	
+	if ( !prs_uint32( "function_code", ps, depth, &info->function_code ) )
+		return False;
+	
+	if(!prs_uint32("ptr_domain", ps, depth, &info->ptr_domain))
+		return False;
+		
+	if ( info->ptr_domain ) {
+		if(!smb_io_unistr2("domain", &info->domain, info->ptr_domain, ps, depth))
+			return False;
+	}
+		
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an NET_Q_LOGON_CTRL2 structure.
+********************************************************************/
+
+BOOL net_io_q_logon_ctrl2(const char *desc, NET_Q_LOGON_CTRL2 *q_l, prs_struct *ps, int depth)
+{
+	if (q_l == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_q_logon_ctrl2");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr          ", ps, depth, &q_l->ptr))
+		return False;
+
+	if(!smb_io_unistr2 ("", &q_l->uni_server_name, q_l->ptr, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("function_code", ps, depth, &q_l->function_code))
+		return False;
+	if(!prs_uint32("query_level  ", ps, depth, &q_l->query_level))
+		return False;
+	switch ( q_l->function_code ) {
+		case NETLOGON_CONTROL_REDISCOVER:
+			if ( !net_io_ctrl_data_info_5( "ctrl_data_info5", &q_l->info.info5, ps, depth) ) 
+				return False;
+			break;
+			
+		case NETLOGON_CONTROL_TC_QUERY:
+			if ( !net_io_ctrl_data_info_6( "ctrl_data_info6", &q_l->info.info6, ps, depth) ) 
+				return False;
+			break;
+
+		default:
+			DEBUG(0,("net_io_q_logon_ctrl2: unknown function_code [%d]\n",
+				q_l->function_code));
+			return False;
+	}
+	
+	return True;
+}
+
+/*******************************************************************
+ Inits an NET_Q_LOGON_CTRL2 structure.
+********************************************************************/
+
+void init_net_q_logon_ctrl2(NET_Q_LOGON_CTRL2 *q_l, const char *srv_name,
+			    uint32 query_level)
+{
+	DEBUG(5,("init_q_logon_ctrl2\n"));
+
+	q_l->function_code = 0x01;
+	q_l->query_level = query_level;
+
+	init_unistr2(&q_l->uni_server_name, srv_name, UNI_STR_TERMINATE);
+}
+
+/*******************************************************************
+ Inits an NET_R_LOGON_CTRL2 structure.
+********************************************************************/
+
+void init_net_r_logon_ctrl2(NET_R_LOGON_CTRL2 *r_l, uint32 query_level,
+			    uint32 flags, uint32 pdc_status, 
+			    uint32 logon_attempts, uint32 tc_status, 
+			    const char *trusted_domain_name)
+{
+	r_l->switch_value  = query_level; 
+
+	switch (query_level) {
+	case 1:
+		r_l->ptr = 1; /* undocumented pointer */
+		init_netinfo_1(&r_l->logon.info1, flags, pdc_status);	
+		r_l->status = NT_STATUS_OK;
+		break;
+	case 2:
+		r_l->ptr = 1; /* undocumented pointer */
+		init_netinfo_2(&r_l->logon.info2, flags, pdc_status,
+		               tc_status, trusted_domain_name);	
+		r_l->status = NT_STATUS_OK;
+		break;
+	case 3:
+		r_l->ptr = 1; /* undocumented pointer */
+		init_netinfo_3(&r_l->logon.info3, flags, logon_attempts);	
+		r_l->status = NT_STATUS_OK;
+		break;
+	default:
+		DEBUG(2,("init_r_logon_ctrl2: unsupported switch value %d\n",
+			r_l->switch_value));
+		r_l->ptr = 0; /* undocumented pointer */
+
+		/* take a guess at an error code... */
+		r_l->status = NT_STATUS_INVALID_INFO_CLASS;
+		break;
+	}
+}
+
+/*******************************************************************
+ Reads or writes an NET_R_LOGON_CTRL2 structure.
+********************************************************************/
+
+BOOL net_io_r_logon_ctrl2(const char *desc, NET_R_LOGON_CTRL2 *r_l, prs_struct *ps, int depth)
+{
+	if (r_l == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_r_logon_ctrl2");
+	depth++;
+
+	if(!prs_uint32("switch_value ", ps, depth, &r_l->switch_value))
+		return False;
+	if(!prs_uint32("ptr          ", ps, depth, &r_l->ptr))
+		return False;
+
+	if (r_l->ptr != 0) {
+		switch (r_l->switch_value) {
+		case 1:
+			if(!net_io_netinfo_1("", &r_l->logon.info1, ps, depth))
+				return False;
+			break;
+		case 2:
+			if(!net_io_netinfo_2("", &r_l->logon.info2, ps, depth))
+				return False;
+			break;
+		case 3:
+			if(!net_io_netinfo_3("", &r_l->logon.info3, ps, depth))
+				return False;
+			break;
+		default:
+			DEBUG(2,("net_io_r_logon_ctrl2: unsupported switch value %d\n",
+				r_l->switch_value));
+			break;
+		}
+	}
+
+	if(!prs_ntstatus("status       ", ps, depth, &r_l->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an NET_Q_LOGON_CTRL structure.
+********************************************************************/
+
+BOOL net_io_q_logon_ctrl(const char *desc, NET_Q_LOGON_CTRL *q_l, prs_struct *ps, 
+			 int depth)
+{
+	prs_debug(ps, depth, desc, "net_io_q_logon_ctrl");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr          ", ps, depth, &q_l->ptr))
+		return False;
+
+	if(!smb_io_unistr2 ("", &q_l->uni_server_name, q_l->ptr, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("function_code", ps, depth, &q_l->function_code))
+		return False;
+	if(!prs_uint32("query_level  ", ps, depth, &q_l->query_level))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits an NET_Q_LOGON_CTRL structure.
+********************************************************************/
+
+void init_net_q_logon_ctrl(NET_Q_LOGON_CTRL *q_l, const char *srv_name,
+			   uint32 query_level)
+{
+	DEBUG(5,("init_q_logon_ctrl\n"));
+
+	q_l->function_code = 0x01; /* ??? */
+	q_l->query_level = query_level;
+
+	init_unistr2(&q_l->uni_server_name, srv_name, UNI_STR_TERMINATE);
+}
+
+/*******************************************************************
+ Inits an NET_R_LOGON_CTRL structure.
+********************************************************************/
+
+void init_net_r_logon_ctrl(NET_R_LOGON_CTRL *r_l, uint32 query_level,
+			   uint32 flags, uint32 pdc_status)
+{
+	DEBUG(5,("init_r_logon_ctrl\n"));
+
+	r_l->switch_value  = query_level; /* should only be 0x1 */
+
+	switch (query_level) {
+	case 1:
+		r_l->ptr = 1; /* undocumented pointer */
+		init_netinfo_1(&r_l->logon.info1, flags, pdc_status);	
+		r_l->status = NT_STATUS_OK;
+		break;
+	default:
+		DEBUG(2,("init_r_logon_ctrl: unsupported switch value %d\n",
+			r_l->switch_value));
+		r_l->ptr = 0; /* undocumented pointer */
+
+		/* take a guess at an error code... */
+		r_l->status = NT_STATUS_INVALID_INFO_CLASS;
+		break;
+	}
+}
+
+/*******************************************************************
+ Reads or writes an NET_R_LOGON_CTRL structure.
+********************************************************************/
+
+BOOL net_io_r_logon_ctrl(const char *desc, NET_R_LOGON_CTRL *r_l, prs_struct *ps, 
+			 int depth)
+{
+	prs_debug(ps, depth, desc, "net_io_r_logon_ctrl");
+	depth++;
+
+	if(!prs_uint32("switch_value ", ps, depth, &r_l->switch_value))
+		return False;
+	if(!prs_uint32("ptr          ", ps, depth, &r_l->ptr))
+		return False;
+
+	if (r_l->ptr != 0) {
+		switch (r_l->switch_value) {
+		case 1:
+			if(!net_io_netinfo_1("", &r_l->logon.info1, ps, depth))
+				return False;
+			break;
+		default:
+			DEBUG(2,("net_io_r_logon_ctrl: unsupported switch value %d\n",
+				r_l->switch_value));
+			break;
+		}
+	}
+
+	if(!prs_ntstatus("status       ", ps, depth, &r_l->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits an NET_R_GETANYDCNAME structure.
+********************************************************************/
+void init_net_q_getanydcname(NET_Q_GETANYDCNAME *r_t, const char *logon_server,
+			     const char *domainname)
+{
+	DEBUG(5,("init_q_getanydcname\n"));
+
+	r_t->ptr_logon_server = (logon_server != NULL);
+	init_unistr2(&r_t->uni_logon_server, logon_server, UNI_STR_TERMINATE);
+	r_t->ptr_domainname = (domainname != NULL);
+	init_unistr2(&r_t->uni_domainname, domainname, UNI_STR_TERMINATE);
+}
+
+/*******************************************************************
+ Reads or writes an NET_Q_GETANYDCNAME structure.
+********************************************************************/
+
+BOOL net_io_q_getanydcname(const char *desc, NET_Q_GETANYDCNAME *r_t, prs_struct *ps,
+			   int depth)
+{
+	if (r_t == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_q_getanydcname");
+	depth++;
+
+	if (!prs_uint32("ptr_logon_server", ps, depth, &r_t->ptr_logon_server))
+		return False;
+
+	if (!smb_io_unistr2("logon_server", &r_t->uni_logon_server,
+			    r_t->ptr_logon_server, ps, depth))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("ptr_domainname", ps, depth, &r_t->ptr_domainname))
+		return False;
+
+	if (!smb_io_unistr2("domainname", &r_t->uni_domainname,
+			    r_t->ptr_domainname, ps, depth))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+ Inits an NET_R_GETANYDCNAME structure.
+********************************************************************/
+void init_net_r_getanydcname(NET_R_GETANYDCNAME *r_t, const char *dcname)
+{
+	DEBUG(5,("init_r_getanydcname\n"));
+
+	init_unistr2(&r_t->uni_dcname, dcname, UNI_STR_TERMINATE);
+}
+
+/*******************************************************************
+ Reads or writes an NET_R_GETANYDCNAME structure.
+********************************************************************/
+
+BOOL net_io_r_getanydcname(const char *desc, NET_R_GETANYDCNAME *r_t, prs_struct *ps,
+			   int depth)
+{
+	if (r_t == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_r_getanydcname");
+	depth++;
+
+	if (!prs_uint32("ptr_dcname", ps, depth, &r_t->ptr_dcname))
+		return False;
+
+	if (!smb_io_unistr2("dcname", &r_t->uni_dcname,
+			    r_t->ptr_dcname, ps, depth))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_werror("status", ps, depth, &r_t->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits an NET_R_TRUST_DOM_LIST structure.
+********************************************************************/
+
+void init_r_trust_dom(NET_R_TRUST_DOM_LIST *r_t,
+			uint32 num_doms, const char *dom_name)
+{
+	unsigned int i = 0;
+
+	DEBUG(5,("init_r_trust_dom\n"));
+
+	for (i = 0; i < MAX_TRUST_DOMS; i++) {
+		r_t->uni_trust_dom_name[i].uni_str_len = 0;
+		r_t->uni_trust_dom_name[i].uni_max_len = 0;
+	}
+	if (num_doms > MAX_TRUST_DOMS)
+		num_doms = MAX_TRUST_DOMS;
+
+	for (i = 0; i < num_doms; i++) {
+		fstring domain_name;
+		fstrcpy(domain_name, dom_name);
+		strupper_m(domain_name);
+		init_unistr2(&r_t->uni_trust_dom_name[i], domain_name, UNI_STR_TERMINATE);
+		/* the use of UNISTR2 here is non-standard. */
+		r_t->uni_trust_dom_name[i].offset = 0x1;
+	}
+	
+	r_t->status = NT_STATUS_OK;
+}
+
+/*******************************************************************
+ Reads or writes an NET_R_TRUST_DOM_LIST structure.
+********************************************************************/
+
+BOOL net_io_r_trust_dom(const char *desc, NET_R_TRUST_DOM_LIST *r_t, prs_struct *ps, int depth)
+{
+	uint32 value;
+
+	if (r_t == NULL)
+		 return False;
+
+	prs_debug(ps, depth, desc, "net_io_r_trust_dom");
+	depth++;
+
+	/* temporary code to give a valid response */
+	value=2;
+	if(!prs_uint32("status", ps, depth, &value))
+		 return False;
+
+	value=1;
+	if(!prs_uint32("status", ps, depth, &value))
+		 return False;
+	value=2;
+	if(!prs_uint32("status", ps, depth, &value))
+		 return False;
+
+	value=0;
+	if(!prs_uint32("status", ps, depth, &value))
+		 return False;
+
+	value=0;
+	if(!prs_uint32("status", ps, depth, &value))
+		 return False;
+
+/* old non working code */
+#if 0
+	int i;
+
+	for (i = 0; i < MAX_TRUST_DOMS; i++) {
+		if (r_t->uni_trust_dom_name[i].uni_str_len == 0)
+			break;
+		if(!smb_io_unistr2("", &r_t->uni_trust_dom_name[i], True, ps, depth))
+			 return False;
+	}
+
+	if(!prs_ntstatus("status", ps, depth, &r_t->status))
+		 return False;
+#endif
+	return True;
+}
+
+
+/*******************************************************************
+ Reads or writes an NET_Q_TRUST_DOM_LIST structure.
+********************************************************************/
+
+BOOL net_io_q_trust_dom(const char *desc, NET_Q_TRUST_DOM_LIST *q_l, prs_struct *ps, int depth)
+{
+	if (q_l == NULL)
+		 return False;
+
+	prs_debug(ps, depth, desc, "net_io_q_trust_dom");
+	depth++;
+
+	if(!prs_uint32("ptr          ", ps, depth, &q_l->ptr))
+		 return False;
+	if(!smb_io_unistr2 ("", &q_l->uni_server_name, q_l->ptr, ps, depth))
+		 return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits an NET_Q_REQ_CHAL structure.
+********************************************************************/
+
+void init_q_req_chal(NET_Q_REQ_CHAL *q_c,
+		     const char *logon_srv, const char *logon_clnt,
+		     const DOM_CHAL *clnt_chal)
+{
+	DEBUG(5,("init_q_req_chal: %d\n", __LINE__));
+
+	q_c->undoc_buffer = 1; /* don't know what this buffer is */
+
+	init_unistr2(&q_c->uni_logon_srv, logon_srv , UNI_STR_TERMINATE);
+	init_unistr2(&q_c->uni_logon_clnt, logon_clnt, UNI_STR_TERMINATE);
+
+	memcpy(q_c->clnt_chal.data, clnt_chal->data, sizeof(clnt_chal->data));
+
+	DEBUG(5,("init_q_req_chal: %d\n", __LINE__));
+}
+
+/*******************************************************************
+ Reads or writes an NET_Q_REQ_CHAL structure.
+********************************************************************/
+
+BOOL net_io_q_req_chal(const char *desc,  NET_Q_REQ_CHAL *q_c, prs_struct *ps, int depth)
+{
+	if (q_c == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_q_req_chal");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+    
+	if(!prs_uint32("undoc_buffer", ps, depth, &q_c->undoc_buffer))
+		return False;
+
+	if(!smb_io_unistr2("", &q_c->uni_logon_srv, True, ps, depth)) /* logon server unicode string */
+		return False;
+	if(!smb_io_unistr2("", &q_c->uni_logon_clnt, True, ps, depth)) /* logon client unicode string */
+		return False;
+
+	if(!smb_io_chal("", &q_c->clnt_chal, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL net_io_r_req_chal(const char *desc, NET_R_REQ_CHAL *r_c, prs_struct *ps, int depth)
+{
+	if (r_c == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_r_req_chal");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+    
+	if(!smb_io_chal("", &r_c->srv_chal, ps, depth)) /* server challenge */
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_c->status))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL net_io_q_auth(const char *desc, NET_Q_AUTH *q_a, prs_struct *ps, int depth)
+{
+	if (q_a == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_q_auth");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+    
+	if(!smb_io_log_info ("", &q_a->clnt_id, ps, depth)) /* client identification info */
+		return False;
+	if(!smb_io_chal("", &q_a->clnt_chal, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL net_io_r_auth(const char *desc, NET_R_AUTH *r_a, prs_struct *ps, int depth)
+{
+	if (r_a == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_r_auth");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+    
+	if(!smb_io_chal("", &r_a->srv_chal, ps, depth)) /* server challenge */
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_a->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a NET_Q_AUTH_2 struct.
+********************************************************************/
+
+void init_q_auth_2(NET_Q_AUTH_2 *q_a,
+		const char *logon_srv, const char *acct_name, uint16 sec_chan, const char *comp_name,
+		const DOM_CHAL *clnt_chal, uint32 clnt_flgs)
+{
+	DEBUG(5,("init_q_auth_2: %d\n", __LINE__));
+
+	init_log_info(&q_a->clnt_id, logon_srv, acct_name, sec_chan, comp_name);
+	memcpy(q_a->clnt_chal.data, clnt_chal->data, sizeof(clnt_chal->data));
+	q_a->clnt_flgs.neg_flags = clnt_flgs;
+
+	DEBUG(5,("init_q_auth_2: %d\n", __LINE__));
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL net_io_q_auth_2(const char *desc, NET_Q_AUTH_2 *q_a, prs_struct *ps, int depth)
+{
+	if (q_a == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_q_auth_2");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+    
+	if(!smb_io_log_info ("", &q_a->clnt_id, ps, depth)) /* client identification info */
+		return False;
+	if(!smb_io_chal("", &q_a->clnt_chal, ps, depth))
+		return False;
+	if(!net_io_neg_flags("", &q_a->clnt_flgs, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL net_io_r_auth_2(const char *desc, NET_R_AUTH_2 *r_a, prs_struct *ps, int depth)
+{
+	if (r_a == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_r_auth_2");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+    
+	if(!smb_io_chal("", &r_a->srv_chal, ps, depth)) /* server challenge */
+		return False;
+	if(!net_io_neg_flags("", &r_a->srv_flgs, ps, depth))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_a->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a NET_Q_AUTH_3 struct.
+********************************************************************/
+
+void init_q_auth_3(NET_Q_AUTH_3 *q_a,
+		const char *logon_srv, const char *acct_name, uint16 sec_chan, const char *comp_name,
+		const DOM_CHAL *clnt_chal, uint32 clnt_flgs)
+{
+	DEBUG(5,("init_q_auth_3: %d\n", __LINE__));
+
+	init_log_info(&q_a->clnt_id, logon_srv, acct_name, sec_chan, comp_name);
+	memcpy(q_a->clnt_chal.data, clnt_chal->data, sizeof(clnt_chal->data));
+	q_a->clnt_flgs.neg_flags = clnt_flgs;
+
+	DEBUG(5,("init_q_auth_3: %d\n", __LINE__));
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL net_io_q_auth_3(const char *desc, NET_Q_AUTH_3 *q_a, prs_struct *ps, int depth)
+{
+	if (q_a == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_q_auth_3");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+    
+	if(!smb_io_log_info ("", &q_a->clnt_id, ps, depth)) /* client identification info */
+		return False;
+	if(!smb_io_chal("", &q_a->clnt_chal, ps, depth))
+		return False;
+	if(!net_io_neg_flags("", &q_a->clnt_flgs, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL net_io_r_auth_3(const char *desc, NET_R_AUTH_3 *r_a, prs_struct *ps, int depth)
+{
+	if (r_a == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_r_auth_3");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+    
+	if(!smb_io_chal("srv_chal", &r_a->srv_chal, ps, depth)) /* server challenge */
+		return False;
+	if(!net_io_neg_flags("srv_flgs", &r_a->srv_flgs, ps, depth))
+		return False;
+	if (!prs_uint32("unknown", ps, depth, &r_a->unknown))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_a->status))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+ Inits a NET_Q_SRV_PWSET.
+********************************************************************/
+
+void init_q_srv_pwset(NET_Q_SRV_PWSET *q_s,
+		const char *logon_srv, const char *sess_key, const char *acct_name, 
+                uint16 sec_chan, const char *comp_name,
+		DOM_CRED *cred, const uchar hashed_mach_pwd[16])
+{
+	unsigned char nt_cypher[16];
+	
+	DEBUG(5,("init_q_srv_pwset\n"));
+	
+	/* Process the new password. */
+	cred_hash3( nt_cypher, hashed_mach_pwd, (const unsigned char *)sess_key, 1);
+
+	init_clnt_info(&q_s->clnt_id, logon_srv, acct_name, sec_chan, comp_name, cred);
+
+	memcpy(q_s->pwd, nt_cypher, sizeof(q_s->pwd)); 
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL net_io_q_srv_pwset(const char *desc, NET_Q_SRV_PWSET *q_s, prs_struct *ps, int depth)
+{
+	if (q_s == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_q_srv_pwset");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+    
+	if(!smb_io_clnt_info("", &q_s->clnt_id, ps, depth)) /* client identification/authentication info */
+		return False;
+	if(!prs_uint8s (False, "pwd", ps, depth, q_s->pwd, 16)) /* new password - undocumented */
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL net_io_r_srv_pwset(const char *desc, NET_R_SRV_PWSET *r_s, prs_struct *ps, int depth)
+{
+	if (r_s == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_r_srv_pwset");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+    
+	if(!smb_io_cred("", &r_s->srv_cred, ps, depth)) /* server challenge */
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_s->status))
+		return False;
+
+	return True;
+}
+
+/*************************************************************************
+ Init DOM_SID2 array from a string containing multiple sids
+ *************************************************************************/
+
+static int init_dom_sid2s(TALLOC_CTX *ctx, const char *sids_str, DOM_SID2 **ppsids)
+{
+	const char *ptr;
+	pstring s2;
+	int count = 0;
+
+	DEBUG(4,("init_dom_sid2s: %s\n", sids_str ? sids_str:""));
+
+	*ppsids = NULL;
+
+	if(sids_str) {
+		int number;
+		DOM_SID2 *sids;
+
+		/* Count the number of valid SIDs. */
+		for (count = 0, ptr = sids_str; next_token(&ptr, s2, NULL, sizeof(s2)); ) {
+			DOM_SID tmpsid;
+			if (string_to_sid(&tmpsid, s2))
+				count++;
+		}
+
+		/* Now allocate space for them. */
+		if (count) {
+			*ppsids = TALLOC_ZERO_ARRAY(ctx, DOM_SID2, count);
+			if (*ppsids == NULL)
+				return 0;
+		} else {
+			*ppsids = NULL;
+		}
+
+		sids = *ppsids;
+
+		for (number = 0, ptr = sids_str; next_token(&ptr, s2, NULL, sizeof(s2)); ) {
+			DOM_SID tmpsid;
+			if (string_to_sid(&tmpsid, s2)) {
+				/* count only valid sids */
+				init_dom_sid2(&sids[number], &tmpsid);
+				number++;
+			}
+		}
+	}
+
+	return count;
+}
+
+/*******************************************************************
+ Inits a NET_ID_INFO_1 structure.
+********************************************************************/
+
+void init_id_info1(NET_ID_INFO_1 *id, const char *domain_name,
+				uint32 param_ctrl, uint32 log_id_low, uint32 log_id_high,
+				const char *user_name, const char *wksta_name,
+				const char *sess_key,
+				unsigned char lm_cypher[16], unsigned char nt_cypher[16])
+{
+	unsigned char lm_owf[16];
+	unsigned char nt_owf[16];
+
+	DEBUG(5,("init_id_info1: %d\n", __LINE__));
+
+	id->ptr_id_info1 = 1;
+
+	id->param_ctrl = param_ctrl;
+	init_logon_id(&id->logon_id, log_id_low, log_id_high);
+
+
+	if (lm_cypher && nt_cypher) {
+		unsigned char key[16];
+#ifdef DEBUG_PASSWORD
+		DEBUG(100,("lm cypher:"));
+		dump_data(100, (char *)lm_cypher, 16);
+
+		DEBUG(100,("nt cypher:"));
+		dump_data(100, (char *)nt_cypher, 16);
+#endif
+
+		memset(key, 0, 16);
+		memcpy(key, sess_key, 8);
+
+		memcpy(lm_owf, lm_cypher, 16);
+		SamOEMhash(lm_owf, key, 16);
+		memcpy(nt_owf, nt_cypher, 16);
+		SamOEMhash(nt_owf, key, 16);
+
+#ifdef DEBUG_PASSWORD
+		DEBUG(100,("encrypt of lm owf password:"));
+		dump_data(100, (char *)lm_owf, 16);
+
+		DEBUG(100,("encrypt of nt owf password:"));
+		dump_data(100, (char *)nt_owf, 16);
+#endif
+		/* set up pointers to cypher blocks */
+		lm_cypher = lm_owf;
+		nt_cypher = nt_owf;
+	}
+
+	init_owf_info(&id->lm_owf, lm_cypher);
+	init_owf_info(&id->nt_owf, nt_cypher);
+
+	init_unistr2(&id->uni_domain_name, domain_name, UNI_FLAGS_NONE);
+	init_uni_hdr(&id->hdr_domain_name, &id->uni_domain_name);
+	init_unistr2(&id->uni_user_name, user_name, UNI_FLAGS_NONE);
+	init_uni_hdr(&id->hdr_user_name, &id->uni_user_name);
+	init_unistr2(&id->uni_wksta_name, wksta_name, UNI_FLAGS_NONE);
+	init_uni_hdr(&id->hdr_wksta_name, &id->uni_wksta_name);
+}
+
+/*******************************************************************
+ Reads or writes an NET_ID_INFO_1 structure.
+********************************************************************/
+
+static BOOL net_io_id_info1(const char *desc,  NET_ID_INFO_1 *id, prs_struct *ps, int depth)
+{
+	if (id == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_id_info1");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_uint32("ptr_id_info1", ps, depth, &id->ptr_id_info1))
+		return False;
+
+	if (id->ptr_id_info1 != 0) {
+		if(!smb_io_unihdr("unihdr", &id->hdr_domain_name, ps, depth))
+			return False;
+
+		if(!prs_uint32("param_ctrl", ps, depth, &id->param_ctrl))
+			return False;
+		if(!smb_io_logon_id("", &id->logon_id, ps, depth))
+			return False;
+
+		if(!smb_io_unihdr("unihdr", &id->hdr_user_name, ps, depth))
+			return False;
+		if(!smb_io_unihdr("unihdr", &id->hdr_wksta_name, ps, depth))
+			return False;
+
+		if(!smb_io_owf_info("", &id->lm_owf, ps, depth))
+			return False;
+		if(!smb_io_owf_info("", &id->nt_owf, ps, depth))
+			return False;
+
+		if(!smb_io_unistr2("unistr2", &id->uni_domain_name,
+				id->hdr_domain_name.buffer, ps, depth))
+			return False;
+		if(!smb_io_unistr2("unistr2", &id->uni_user_name,
+				id->hdr_user_name.buffer, ps, depth))
+			return False;
+		if(!smb_io_unistr2("unistr2", &id->uni_wksta_name,
+				id->hdr_wksta_name.buffer, ps, depth))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+Inits a NET_ID_INFO_2 structure.
+
+This is a network logon packet. The log_id parameters
+are what an NT server would generate for LUID once the
+user is logged on. I don't think we care about them.
+
+Note that this has no access to the NT and LM hashed passwords,
+so it forwards the challenge, and the NT and LM responses (24
+bytes each) over the secure channel to the Domain controller
+for it to say yea or nay. This is the preferred method of 
+checking for a logon as it doesn't export the password
+hashes to anyone who has compromised the secure channel. JRA.
+********************************************************************/
+
+void init_id_info2(NET_ID_INFO_2 * id, const char *domain_name,
+		   uint32 param_ctrl,
+		   uint32 log_id_low, uint32 log_id_high,
+		   const char *user_name, const char *wksta_name,
+		   const uchar lm_challenge[8],
+		   const uchar * lm_chal_resp, size_t lm_chal_resp_len,
+		   const uchar * nt_chal_resp, size_t nt_chal_resp_len)
+{
+
+	DEBUG(5,("init_id_info2: %d\n", __LINE__));
+
+	id->ptr_id_info2 = 1;
+
+	id->param_ctrl = param_ctrl;
+	init_logon_id(&id->logon_id, log_id_low, log_id_high);
+
+	memcpy(id->lm_chal, lm_challenge, sizeof(id->lm_chal));
+	init_str_hdr(&id->hdr_nt_chal_resp, nt_chal_resp_len, nt_chal_resp_len, (nt_chal_resp != NULL) ? 1 : 0);
+	init_str_hdr(&id->hdr_lm_chal_resp, lm_chal_resp_len, lm_chal_resp_len, (lm_chal_resp != NULL) ? 1 : 0);
+
+	init_unistr2(&id->uni_domain_name, domain_name, UNI_FLAGS_NONE);
+	init_uni_hdr(&id->hdr_domain_name, &id->uni_domain_name);
+	init_unistr2(&id->uni_user_name, user_name, UNI_FLAGS_NONE);
+	init_uni_hdr(&id->hdr_user_name, &id->uni_user_name);
+	init_unistr2(&id->uni_wksta_name, wksta_name, UNI_FLAGS_NONE);
+	init_uni_hdr(&id->hdr_wksta_name, &id->uni_wksta_name);
+
+	init_string2(&id->nt_chal_resp, (const char *)nt_chal_resp, nt_chal_resp_len, nt_chal_resp_len);
+	init_string2(&id->lm_chal_resp, (const char *)lm_chal_resp, lm_chal_resp_len, lm_chal_resp_len);
+
+}
+
+/*******************************************************************
+ Reads or writes an NET_ID_INFO_2 structure.
+********************************************************************/
+
+static BOOL net_io_id_info2(const char *desc,  NET_ID_INFO_2 *id, prs_struct *ps, int depth)
+{
+	if (id == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_id_info2");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_uint32("ptr_id_info2", ps, depth, &id->ptr_id_info2))
+		return False;
+
+	if (id->ptr_id_info2 != 0) {
+		if(!smb_io_unihdr("unihdr", &id->hdr_domain_name, ps, depth))
+			return False;
+
+		if(!prs_uint32("param_ctrl", ps, depth, &id->param_ctrl))
+			return False;
+		if(!smb_io_logon_id("", &id->logon_id, ps, depth))
+			return False;
+
+		if(!smb_io_unihdr("unihdr", &id->hdr_user_name, ps, depth))
+			return False;
+		if(!smb_io_unihdr("unihdr", &id->hdr_wksta_name, ps, depth))
+			return False;
+
+		if(!prs_uint8s (False, "lm_chal", ps, depth, id->lm_chal, 8)) /* lm 8 byte challenge */
+			return False;
+
+		if(!smb_io_strhdr("hdr_nt_chal_resp", &id->hdr_nt_chal_resp, ps, depth))
+			return False;
+		if(!smb_io_strhdr("hdr_lm_chal_resp", &id->hdr_lm_chal_resp, ps, depth))
+			return False;
+
+		if(!smb_io_unistr2("uni_domain_name", &id->uni_domain_name,
+				id->hdr_domain_name.buffer, ps, depth))
+			return False;
+		if(!smb_io_unistr2("uni_user_name  ", &id->uni_user_name,
+				id->hdr_user_name.buffer, ps, depth))
+			return False;
+		if(!smb_io_unistr2("uni_wksta_name ", &id->uni_wksta_name,
+				id->hdr_wksta_name.buffer, ps, depth))
+			return False;
+		if(!smb_io_string2("nt_chal_resp", &id->nt_chal_resp,
+				id->hdr_nt_chal_resp.buffer, ps, depth))
+			return False;
+		if(!smb_io_string2("lm_chal_resp", &id->lm_chal_resp,
+				id->hdr_lm_chal_resp.buffer, ps, depth))
+			return False;
+	}
+
+	return True;
+}
+
+
+/*******************************************************************
+ Inits a DOM_SAM_INFO structure.
+********************************************************************/
+
+void init_sam_info(DOM_SAM_INFO *sam,
+				const char *logon_srv, const char *comp_name,
+				DOM_CRED *clnt_cred,
+				DOM_CRED *rtn_cred, uint16 logon_level,
+				NET_ID_INFO_CTR *ctr)
+{
+	DEBUG(5,("init_sam_info: %d\n", __LINE__));
+
+	init_clnt_info2(&sam->client, logon_srv, comp_name, clnt_cred);
+
+	if (rtn_cred != NULL) {
+		sam->ptr_rtn_cred = 1;
+		memcpy(&sam->rtn_cred, rtn_cred, sizeof(sam->rtn_cred));
+	} else {
+		sam->ptr_rtn_cred = 0;
+	}
+
+	sam->logon_level  = logon_level;
+	sam->ctr          = ctr;
+}
+
+/*******************************************************************
+ Reads or writes a DOM_SAM_INFO structure.
+********************************************************************/
+
+static BOOL net_io_id_info_ctr(const char *desc, NET_ID_INFO_CTR **pp_ctr, prs_struct *ps, int depth)
+{
+	NET_ID_INFO_CTR *ctr = *pp_ctr;
+
+	prs_debug(ps, depth, desc, "smb_io_sam_info_ctr");
+	depth++;
+
+	if (UNMARSHALLING(ps)) {
+		ctr = *pp_ctr = PRS_ALLOC_MEM(ps, NET_ID_INFO_CTR, 1);
+		if (ctr == NULL)
+			return False;
+	}
+	
+	if (ctr == NULL)
+		return False;
+
+	/* don't 4-byte align here! */
+
+	if(!prs_uint16("switch_value ", ps, depth, &ctr->switch_value))
+		return False;
+
+	switch (ctr->switch_value) {
+	case 1:
+		if(!net_io_id_info1("", &ctr->auth.id1, ps, depth))
+			return False;
+		break;
+	case 2:
+		if(!net_io_id_info2("", &ctr->auth.id2, ps, depth))
+			return False;
+		break;
+	default:
+		/* PANIC! */
+		DEBUG(4,("smb_io_sam_info_ctr: unknown switch_value!\n"));
+		break;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a DOM_SAM_INFO structure.
+ ********************************************************************/
+
+static BOOL smb_io_sam_info(const char *desc, DOM_SAM_INFO *sam, prs_struct *ps, int depth)
+{
+	if (sam == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "smb_io_sam_info");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!smb_io_clnt_info2("", &sam->client, ps, depth))
+		return False;
+
+	if(!prs_uint32("ptr_rtn_cred ", ps, depth, &sam->ptr_rtn_cred))
+		return False;
+	if (sam->ptr_rtn_cred) {
+		if(!smb_io_cred("", &sam->rtn_cred, ps, depth))
+			return False;
+	}
+
+	if(!prs_uint16("logon_level  ", ps, depth, &sam->logon_level))
+		return False;
+
+	if (sam->logon_level != 0) {
+		if(!net_io_id_info_ctr("logon_info", &sam->ctr, ps, depth))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a DOM_SAM_INFO_EX structure.
+ ********************************************************************/
+
+static BOOL smb_io_sam_info_ex(const char *desc, DOM_SAM_INFO_EX *sam, prs_struct *ps, int depth)
+{
+	if (sam == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "smb_io_sam_info_ex");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!smb_io_clnt_srv("", &sam->client, ps, depth))
+		return False;
+
+	if(!prs_uint16("logon_level  ", ps, depth, &sam->logon_level))
+		return False;
+
+	if (sam->logon_level != 0) {
+		if(!net_io_id_info_ctr("logon_info", &sam->ctr, ps, depth))
+			return False;
+	}
+
+	return True;
+}
+
+/*************************************************************************
+ Inits a NET_USER_INFO_3 structure.
+
+ This is a network logon reply packet, and contains much information about
+ the user.  This information is passed as a (very long) paramater list
+ to avoid having to link in the PASSDB code to every program that deals 
+ with this file.
+ *************************************************************************/
+
+void init_net_user_info3(TALLOC_CTX *ctx, NET_USER_INFO_3 *usr, 
+			 uint32                user_rid,
+			 uint32                group_rid,
+
+			 const char*		user_name,
+			 const char*		full_name,
+			 const char*		home_dir,
+			 const char*		dir_drive,
+			 const char*		logon_script,
+			 const char*		profile_path,
+
+			 time_t unix_logon_time,
+			 time_t unix_logoff_time,
+			 time_t unix_kickoff_time,
+			 time_t unix_pass_last_set_time,
+			 time_t unix_pass_can_change_time,
+			 time_t unix_pass_must_change_time,
+			 
+			 uint16 logon_count, uint16 bad_pw_count,
+ 		 	 uint32 num_groups, const DOM_GID *gids,
+			 uint32 user_flgs, uint32 acct_flags,
+			 uchar user_session_key[16],
+			 uchar lm_session_key[8],
+ 			 const char *logon_srv, const char *logon_dom,
+			 const DOM_SID *dom_sid)
+{
+	/* only cope with one "other" sid, right now. */
+	/* need to count the number of space-delimited sids */
+	unsigned int i;
+	int num_other_sids = 0;
+	
+	NTTIME 		logon_time, logoff_time, kickoff_time,
+			pass_last_set_time, pass_can_change_time,
+			pass_must_change_time;
+
+	ZERO_STRUCTP(usr);
+
+	usr->ptr_user_info = 1; /* yes, we're bothering to put USER_INFO data here */
+
+	/* Create NTTIME structs */
+	unix_to_nt_time (&logon_time, 		 unix_logon_time);
+	unix_to_nt_time (&logoff_time, 		 unix_logoff_time);
+	unix_to_nt_time (&kickoff_time, 	 unix_kickoff_time);
+	unix_to_nt_time (&pass_last_set_time, 	 unix_pass_last_set_time);
+	unix_to_nt_time (&pass_can_change_time,	 unix_pass_can_change_time);
+	unix_to_nt_time (&pass_must_change_time, unix_pass_must_change_time);
+
+	usr->logon_time            = logon_time;
+	usr->logoff_time           = logoff_time;
+	usr->kickoff_time          = kickoff_time;
+	usr->pass_last_set_time    = pass_last_set_time;
+	usr->pass_can_change_time  = pass_can_change_time;
+	usr->pass_must_change_time = pass_must_change_time;
+
+	usr->logon_count = logon_count;
+	usr->bad_pw_count = bad_pw_count;
+
+	usr->user_rid = user_rid;
+	usr->group_rid = group_rid;
+	usr->num_groups = num_groups;
+
+	usr->buffer_groups = 1; /* indicates fill in groups, below, even if there are none */
+	usr->user_flgs = user_flgs;
+	usr->acct_flags = acct_flags;
+
+	if (user_session_key != NULL)
+		memcpy(usr->user_sess_key, user_session_key, sizeof(usr->user_sess_key));
+	else
+		memset((char *)usr->user_sess_key, '\0', sizeof(usr->user_sess_key));
+
+	usr->buffer_dom_id = dom_sid ? 1 : 0; /* yes, we're bothering to put a domain SID in */
+
+	memset((char *)usr->lm_sess_key, '\0', sizeof(usr->lm_sess_key));
+
+	for (i=0; i<7; i++) {
+		memset(&usr->unknown[i], '\0', sizeof(usr->unknown));
+	}
+
+	if (lm_session_key != NULL) {
+		memcpy(usr->lm_sess_key, lm_session_key, sizeof(usr->lm_sess_key));
+	}
+
+	num_other_sids = init_dom_sid2s(ctx, NULL, &usr->other_sids);
+
+	usr->num_other_sids = num_other_sids;
+	usr->buffer_other_sids = (num_other_sids != 0) ? 1 : 0; 
+	
+	init_unistr2(&usr->uni_user_name, user_name, UNI_FLAGS_NONE);
+	init_uni_hdr(&usr->hdr_user_name, &usr->uni_user_name);
+	init_unistr2(&usr->uni_full_name, full_name, UNI_FLAGS_NONE);
+	init_uni_hdr(&usr->hdr_full_name, &usr->uni_full_name);
+	init_unistr2(&usr->uni_logon_script, logon_script, UNI_FLAGS_NONE);
+	init_uni_hdr(&usr->hdr_logon_script, &usr->uni_logon_script);
+	init_unistr2(&usr->uni_profile_path, profile_path, UNI_FLAGS_NONE);
+	init_uni_hdr(&usr->hdr_profile_path, &usr->uni_profile_path);
+	init_unistr2(&usr->uni_home_dir, home_dir, UNI_FLAGS_NONE);
+	init_uni_hdr(&usr->hdr_home_dir, &usr->uni_home_dir);
+	init_unistr2(&usr->uni_dir_drive, dir_drive, UNI_FLAGS_NONE);
+	init_uni_hdr(&usr->hdr_dir_drive, &usr->uni_dir_drive);
+
+	usr->num_groups2 = num_groups;
+
+	if (num_groups) {
+		usr->gids = TALLOC_ZERO_ARRAY(ctx,DOM_GID,num_groups);
+		if (usr->gids == NULL)
+	 		return;
+	} else {
+		usr->gids = NULL;
+	}
+
+	for (i = 0; i < num_groups; i++) 
+		usr->gids[i] = gids[i];	
+		
+	init_unistr2(&usr->uni_logon_srv, logon_srv, UNI_FLAGS_NONE);
+	init_uni_hdr(&usr->hdr_logon_srv, &usr->uni_logon_srv);
+	init_unistr2(&usr->uni_logon_dom, logon_dom, UNI_FLAGS_NONE);
+	init_uni_hdr(&usr->hdr_logon_dom, &usr->uni_logon_dom);
+
+	init_dom_sid2(&usr->dom_sid, dom_sid);
+	/* "other" sids are set up above */
+}
+
+static void dump_acct_flags(uint32 acct_flags) {
+
+	int lvl = 10;
+	DEBUG(lvl,("dump_acct_flags\n"));
+	if (acct_flags & ACB_NORMAL) {
+		DEBUGADD(lvl,("\taccount has ACB_NORMAL\n"));
+	}
+	if (acct_flags & ACB_PWNOEXP) {
+		DEBUGADD(lvl,("\taccount has ACB_PWNOEXP\n"));
+	}
+	if (acct_flags & ACB_ENC_TXT_PWD_ALLOWED) {
+		DEBUGADD(lvl,("\taccount has ACB_ENC_TXT_PWD_ALLOWED\n"));
+	}
+	if (acct_flags & ACB_NOT_DELEGATED) {
+		DEBUGADD(lvl,("\taccount has ACB_NOT_DELEGATED\n"));
+	}
+	if (acct_flags & ACB_USE_DES_KEY_ONLY) {
+		DEBUGADD(lvl,("\taccount has ACB_USE_DES_KEY_ONLY set, sig verify wont work\n"));
+	}
+	if (acct_flags & ACB_NO_AUTH_DATA_REQD) {
+		DEBUGADD(lvl,("\taccount has ACB_NO_AUTH_DATA_REQD set\n"));
+	}
+	if (acct_flags & ACB_PWEXPIRED) {
+		DEBUGADD(lvl,("\taccount has ACB_PWEXPIRED set\n"));
+	}
+}
+
+static void dump_user_flgs(uint32 user_flags) {
+
+	int lvl = 10;
+	DEBUG(lvl,("dump_user_flgs\n"));
+	if (user_flags & LOGON_EXTRA_SIDS) {
+		DEBUGADD(lvl,("\taccount has LOGON_EXTRA_SIDS\n"));
+	}
+	if (user_flags & LOGON_RESOURCE_GROUPS) {
+		DEBUGADD(lvl,("\taccount has LOGON_RESOURCE_GROUPS\n"));
+	}
+	if (user_flags & LOGON_NTLMV2_ENABLED) {
+		DEBUGADD(lvl,("\taccount has LOGON_NTLMV2_ENABLED\n"));
+	}
+	if (user_flags & LOGON_CACHED_ACCOUNT) {
+		DEBUGADD(lvl,("\taccount has LOGON_CACHED_ACCOUNT\n"));
+	}
+	if (user_flags & LOGON_PROFILE_PATH_RETURNED) {
+		DEBUGADD(lvl,("\taccount has LOGON_PROFILE_PATH_RETURNED\n"));
+	}
+	if (user_flags & LOGON_SERVER_TRUST_ACCOUNT) {
+		DEBUGADD(lvl,("\taccount has LOGON_SERVER_TRUST_ACCOUNT\n"));
+	}
+
+
+}
+
+/*******************************************************************
+ This code has been modified to cope with a NET_USER_INFO_2 - which is
+ exactly the same as a NET_USER_INFO_3, minus the other sids parameters.
+ We use validation level to determine if we're marshalling a info 2 or
+ INFO_3 - be we always return an INFO_3. Based on code donated by Marc
+ Jacobsen at HP. JRA.
+********************************************************************/
+
+BOOL net_io_user_info3(const char *desc, NET_USER_INFO_3 *usr, prs_struct *ps, 
+		       int depth, uint16 validation_level, BOOL kerb_validation_level)
+{
+	unsigned int i;
+
+	if (usr == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_user_info3");
+	depth++;
+
+	if (UNMARSHALLING(ps))
+		ZERO_STRUCTP(usr);
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_uint32("ptr_user_info ", ps, depth, &usr->ptr_user_info))
+		return False;
+
+	if (usr->ptr_user_info == 0)
+		return True;
+
+	if(!smb_io_time("logon time", &usr->logon_time, ps, depth)) /* logon time */
+		return False;
+	if(!smb_io_time("logoff time", &usr->logoff_time, ps, depth)) /* logoff time */
+		return False;
+	if(!smb_io_time("kickoff time", &usr->kickoff_time, ps, depth)) /* kickoff time */
+		return False;
+	if(!smb_io_time("last set time", &usr->pass_last_set_time, ps, depth)) /* password last set time */
+		return False;
+	if(!smb_io_time("can change time", &usr->pass_can_change_time , ps, depth)) /* password can change time */
+		return False;
+	if(!smb_io_time("must change time", &usr->pass_must_change_time, ps, depth)) /* password must change time */
+		return False;
+
+	if(!smb_io_unihdr("hdr_user_name", &usr->hdr_user_name, ps, depth)) /* username unicode string header */
+		return False;
+	if(!smb_io_unihdr("hdr_full_name", &usr->hdr_full_name, ps, depth)) /* user's full name unicode string header */
+		return False;
+	if(!smb_io_unihdr("hdr_logon_script", &usr->hdr_logon_script, ps, depth)) /* logon script unicode string header */
+		return False;
+	if(!smb_io_unihdr("hdr_profile_path", &usr->hdr_profile_path, ps, depth)) /* profile path unicode string header */
+		return False;
+	if(!smb_io_unihdr("hdr_home_dir", &usr->hdr_home_dir, ps, depth)) /* home directory unicode string header */
+		return False;
+	if(!smb_io_unihdr("hdr_dir_drive", &usr->hdr_dir_drive, ps, depth)) /* home directory drive unicode string header */
+		return False;
+
+	if(!prs_uint16("logon_count   ", ps, depth, &usr->logon_count))  /* logon count */
+		return False;
+	if(!prs_uint16("bad_pw_count  ", ps, depth, &usr->bad_pw_count)) /* bad password count */
+		return False;
+
+	if(!prs_uint32("user_rid      ", ps, depth, &usr->user_rid))       /* User RID */
+		return False;
+	if(!prs_uint32("group_rid     ", ps, depth, &usr->group_rid))      /* Group RID */
+		return False;
+	if(!prs_uint32("num_groups    ", ps, depth, &usr->num_groups))    /* num groups */
+		return False;
+	if(!prs_uint32("buffer_groups ", ps, depth, &usr->buffer_groups)) /* undocumented buffer pointer to groups. */
+		return False;
+	if(!prs_uint32("user_flgs     ", ps, depth, &usr->user_flgs))     /* user flags */
+		return False;
+	dump_user_flgs(usr->user_flgs);
+	if(!prs_uint8s(False, "user_sess_key", ps, depth, usr->user_sess_key, 16)) /* user session key */
+		return False;
+
+	if(!smb_io_unihdr("hdr_logon_srv", &usr->hdr_logon_srv, ps, depth)) /* logon server unicode string header */
+		return False;
+	if(!smb_io_unihdr("hdr_logon_dom", &usr->hdr_logon_dom, ps, depth)) /* logon domain unicode string header */
+		return False;
+
+	if(!prs_uint32("buffer_dom_id ", ps, depth, &usr->buffer_dom_id)) /* undocumented logon domain id pointer */
+		return False;
+
+	if(!prs_uint8s(False, "lm_sess_key", ps, depth, usr->lm_sess_key, 8)) /* lm session key */
+		return False;
+
+	if(!prs_uint32("acct_flags ", ps, depth, &usr->acct_flags)) /* Account flags  */
+		return False;
+	dump_acct_flags(usr->acct_flags);
+	for (i = 0; i < 7; i++)
+	{
+		if (!prs_uint32("unkown", ps, depth, &usr->unknown[i])) /* unknown */
+                        return False;
+	}
+
+	if (validation_level == 3) {
+		if(!prs_uint32("num_other_sids", ps, depth, &usr->num_other_sids)) /* 0 - num_sids */
+			return False;
+		if(!prs_uint32("buffer_other_sids", ps, depth, &usr->buffer_other_sids)) /* NULL - undocumented pointer to SIDs. */
+			return False;
+	} else {
+		if (UNMARSHALLING(ps)) {
+			usr->num_other_sids = 0;
+			usr->buffer_other_sids = 0;
+		}
+	}
+		
+	/* get kerb validation info (not really part of user_info_3) - Guenther */
+
+	if (kerb_validation_level) {
+
+		if(!prs_uint32("ptr_res_group_dom_sid", ps, depth, &usr->ptr_res_group_dom_sid))
+			return False;
+		if(!prs_uint32("res_group_count", ps, depth, &usr->res_group_count))
+			return False;
+		if(!prs_uint32("ptr_res_groups", ps, depth, &usr->ptr_res_groups))
+			return False;
+	}
+
+	if(!smb_io_unistr2("uni_user_name", &usr->uni_user_name, usr->hdr_user_name.buffer, ps, depth)) /* username unicode string */
+		return False;
+	if(!smb_io_unistr2("uni_full_name", &usr->uni_full_name, usr->hdr_full_name.buffer, ps, depth)) /* user's full name unicode string */
+		return False;
+	if(!smb_io_unistr2("uni_logon_script", &usr->uni_logon_script, usr->hdr_logon_script.buffer, ps, depth)) /* logon script unicode string */
+		return False;
+	if(!smb_io_unistr2("uni_profile_path", &usr->uni_profile_path, usr->hdr_profile_path.buffer, ps, depth)) /* profile path unicode string */
+		return False;
+	if(!smb_io_unistr2("uni_home_dir", &usr->uni_home_dir, usr->hdr_home_dir.buffer, ps, depth)) /* home directory unicode string */
+		return False;
+	if(!smb_io_unistr2("uni_dir_drive", &usr->uni_dir_drive, usr->hdr_dir_drive.buffer, ps, depth)) /* home directory drive unicode string */
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("num_groups2   ", ps, depth, &usr->num_groups2))        /* num groups2 */
+		return False;
+
+	if (usr->num_groups != usr->num_groups2) {
+		DEBUG(3,("net_io_user_info3: num_groups mismatch! (%d != %d)\n", 
+			 usr->num_groups, usr->num_groups2));
+		return False;
+	}
+
+	if (UNMARSHALLING(ps)) {
+		if (usr->num_groups) {
+			usr->gids = PRS_ALLOC_MEM(ps, DOM_GID, usr->num_groups);
+			if (usr->gids == NULL)
+				return False;
+		} else {
+			usr->gids = NULL;
+		}
+	}
+
+	for (i = 0; i < usr->num_groups; i++) {
+		if(!smb_io_gid("", &usr->gids[i], ps, depth)) /* group info */
+			return False;
+	}
+
+	if(!smb_io_unistr2("uni_logon_srv", &usr->uni_logon_srv, usr->hdr_logon_srv.buffer, ps, depth)) /* logon server unicode string */
+		return False;
+	if(!smb_io_unistr2("uni_logon_dom", &usr->uni_logon_dom, usr->hdr_logon_dom.buffer, ps, depth)) /* logon domain unicode string */
+		return False;
+
+	if(!smb_io_dom_sid2("", &usr->dom_sid, ps, depth))           /* domain SID */
+		return False;
+
+	if (validation_level == 3 && usr->buffer_other_sids) {
+
+		uint32 num_other_sids = usr->num_other_sids;
+
+		if (!(usr->user_flgs & LOGON_EXTRA_SIDS)) {
+			DEBUG(10,("net_io_user_info3: user_flgs attribute does not have LOGON_EXTRA_SIDS\n"));
+			/* return False; */
+		}
+
+		if (!prs_uint32("num_other_sids", ps, depth,
+				&num_other_sids))
+			return False;
+
+		if (num_other_sids != usr->num_other_sids)
+			return False;
+
+		if (UNMARSHALLING(ps)) {
+			if (usr->num_other_sids) {
+				usr->other_sids = PRS_ALLOC_MEM(ps, DOM_SID2, usr->num_other_sids);
+				usr->other_sids_attrib =
+					PRS_ALLOC_MEM(ps, uint32, usr->num_other_sids);
+			} else {
+				usr->other_sids = NULL;
+				usr->other_sids_attrib = NULL;
+			}
+
+			if ((num_other_sids != 0) &&
+			    ((usr->other_sids == NULL) ||
+			     (usr->other_sids_attrib == NULL)))
+				return False;
+		}
+
+		/* First the pointers to the SIDS and attributes */
+
+		depth++;
+
+		for (i=0; i<usr->num_other_sids; i++) {
+			uint32 ptr = 1;
+
+			if (!prs_uint32("sid_ptr", ps, depth, &ptr))
+				return False;
+
+			if (UNMARSHALLING(ps) && (ptr == 0))
+				return False;
+
+			if (!prs_uint32("attribute", ps, depth,
+					&usr->other_sids_attrib[i]))
+				return False;
+		}
+	
+		for (i = 0; i < usr->num_other_sids; i++) {
+			if(!smb_io_dom_sid2("", &usr->other_sids[i], ps, depth)) /* other domain SIDs */
+				return False;
+		}
+
+		depth--;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL net_io_q_sam_logon(const char *desc, NET_Q_SAM_LOGON *q_l, prs_struct *ps, int depth)
+{
+	if (q_l == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_q_sam_logon");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!smb_io_sam_info("", &q_l->sam_id, ps, depth))
+		return False;
+
+	if(!prs_align_uint16(ps))
+		return False;
+
+	if(!prs_uint16("validation_level", ps, depth, &q_l->validation_level))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL net_io_r_sam_logon(const char *desc, NET_R_SAM_LOGON *r_l, prs_struct *ps, int depth)
+{
+	if (r_l == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_r_sam_logon");
+	depth++;
+
+	if(!prs_uint32("buffer_creds", ps, depth, &r_l->buffer_creds)) /* undocumented buffer pointer */
+		return False;
+	if (&r_l->buffer_creds) {
+		if(!smb_io_cred("", &r_l->srv_creds, ps, depth)) /* server credentials.  server time stamp appears to be ignored. */
+			return False;
+	}
+
+	if(!prs_uint16("switch_value", ps, depth, &r_l->switch_value))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+#if 1 /* W2k always needs this - even for bad passwd. JRA */
+	if(!net_io_user_info3("", r_l->user, ps, depth, r_l->switch_value, False))
+		return False;
+#else
+	if (r_l->switch_value != 0) {
+		if(!net_io_user_info3("", r_l->user, ps, depth, r_l->switch_value, False))
+			return False;
+	}
+#endif
+
+	if(!prs_uint32("auth_resp   ", ps, depth, &r_l->auth_resp)) /* 1 - Authoritative response; 0 - Non-Auth? */
+		return False;
+
+	if(!prs_ntstatus("status      ", ps, depth, &r_l->status))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL net_io_q_sam_logon_ex(const char *desc, NET_Q_SAM_LOGON_EX *q_l, prs_struct *ps, int depth)
+{
+	if (q_l == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_q_sam_logon_ex");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!smb_io_sam_info_ex("", &q_l->sam_id, ps, depth))
+		return False;
+
+	if(!prs_align_uint16(ps))
+		return False;
+
+	if(!prs_uint16("validation_level", ps, depth, &q_l->validation_level))
+		return False;
+
+	if(!prs_uint32("flags  ", ps, depth, &q_l->flags))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL net_io_r_sam_logon_ex(const char *desc, NET_R_SAM_LOGON_EX *r_l, prs_struct *ps, int depth)
+{
+	if (r_l == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_r_sam_logon_ex");
+	depth++;
+
+	if(!prs_uint16("switch_value", ps, depth, &r_l->switch_value))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+#if 1 /* W2k always needs this - even for bad passwd. JRA */
+	if(!net_io_user_info3("", r_l->user, ps, depth, r_l->switch_value, False))
+		return False;
+#else
+	if (r_l->switch_value != 0) {
+		if(!net_io_user_info3("", r_l->user, ps, depth, r_l->switch_value, False))
+			return False;
+	}
+#endif
+
+	if(!prs_uint32("auth_resp   ", ps, depth, &r_l->auth_resp)) /* 1 - Authoritative response; 0 - Non-Auth? */
+		return False;
+
+	if(!prs_uint32("flags   ", ps, depth, &r_l->flags))
+		return False;
+
+	if(!prs_ntstatus("status      ", ps, depth, &r_l->status))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL net_io_q_sam_logoff(const char *desc,  NET_Q_SAM_LOGOFF *q_l, prs_struct *ps, int depth)
+{
+	if (q_l == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_q_sam_logoff");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!smb_io_sam_info("", &q_l->sam_id, ps, depth))           /* domain SID */
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL net_io_r_sam_logoff(const char *desc, NET_R_SAM_LOGOFF *r_l, prs_struct *ps, int depth)
+{
+	if (r_l == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_r_sam_logoff");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_uint32("buffer_creds", ps, depth, &r_l->buffer_creds)) /* undocumented buffer pointer */
+		return False;
+	if(!smb_io_cred("", &r_l->srv_creds, ps, depth)) /* server credentials.  server time stamp appears to be ignored. */
+		return False;
+
+	if(!prs_ntstatus("status      ", ps, depth, &r_l->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+makes a NET_Q_SAM_SYNC structure.
+********************************************************************/
+BOOL init_net_q_sam_sync(NET_Q_SAM_SYNC * q_s, const char *srv_name,
+                         const char *cli_name, DOM_CRED *cli_creds, 
+                         DOM_CRED *ret_creds, uint32 database_id, 
+			 uint32 next_rid)
+{
+	DEBUG(5, ("init_q_sam_sync\n"));
+
+	init_unistr2(&q_s->uni_srv_name, srv_name, UNI_STR_TERMINATE);
+	init_unistr2(&q_s->uni_cli_name, cli_name, UNI_STR_TERMINATE);
+
+        if (cli_creds)
+                memcpy(&q_s->cli_creds, cli_creds, sizeof(q_s->cli_creds));
+
+	if (cli_creds)
+                memcpy(&q_s->ret_creds, ret_creds, sizeof(q_s->ret_creds));
+	else
+		memset(&q_s->ret_creds, 0, sizeof(q_s->ret_creds));
+
+	q_s->database_id = database_id;
+	q_s->restart_state = 0;
+	q_s->sync_context = next_rid;
+	q_s->max_size = 0xffff;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+BOOL net_io_q_sam_sync(const char *desc, NET_Q_SAM_SYNC * q_s, prs_struct *ps,
+		       int depth)
+{
+	prs_debug(ps, depth, desc, "net_io_q_sam_sync");
+	depth++;
+
+	if (!smb_io_unistr2("", &q_s->uni_srv_name, True, ps, depth))
+                return False;
+	if (!smb_io_unistr2("", &q_s->uni_cli_name, True, ps, depth))
+                return False;
+
+	if (!smb_io_cred("", &q_s->cli_creds, ps, depth))
+                return False;
+	if (!smb_io_cred("", &q_s->ret_creds, ps, depth))
+                return False;
+
+	if (!prs_uint32("database_id  ", ps, depth, &q_s->database_id))
+                return False;
+	if (!prs_uint32("restart_state", ps, depth, &q_s->restart_state))
+                return False;
+	if (!prs_uint32("sync_context ", ps, depth, &q_s->sync_context))
+                return False;
+
+	if (!prs_uint32("max_size", ps, depth, &q_s->max_size))
+                return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+static BOOL net_io_sam_delta_hdr(const char *desc, SAM_DELTA_HDR * delta,
+				 prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "net_io_sam_delta_hdr");
+	depth++;
+
+	if (!prs_uint16("type", ps, depth, &delta->type))
+                return False;
+	if (!prs_uint16("type2", ps, depth, &delta->type2))
+                return False;
+	if (!prs_uint32("target_rid", ps, depth, &delta->target_rid))
+                return False;
+
+	if (!prs_uint32("type3", ps, depth, &delta->type3))
+                return False;
+
+        /* Not sure why we need this but it seems to be necessary to get
+           sam deltas working. */
+
+        if (delta->type != 0x16) {
+                if (!prs_uint32("ptr_delta", ps, depth, &delta->ptr_delta))
+                        return False;
+        }
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+static BOOL net_io_sam_delta_mod_count(const char *desc, SAM_DELTA_MOD_COUNT *info,
+                                   prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "net_io_sam_delta_stamp");
+	depth++;
+
+        if (!prs_uint32("seqnum", ps, depth, &info->seqnum))
+                return False;
+        if (!prs_uint32("dom_mod_count_ptr", ps, depth, 
+                        &info->dom_mod_count_ptr))
+                return False;
+
+        if (info->dom_mod_count_ptr) {
+                if (!prs_uint64("dom_mod_count", ps, depth,
+                                &info->dom_mod_count))
+                        return False;
+        }
+
+        return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+static BOOL net_io_sam_domain_info(const char *desc, SAM_DOMAIN_INFO * info,
+				   prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "net_io_sam_domain_info");
+	depth++;
+
+	if (!smb_io_unihdr("hdr_dom_name", &info->hdr_dom_name, ps, depth))
+                return False;
+	if (!smb_io_unihdr("hdr_oem_info", &info->hdr_oem_info, ps, depth))
+                return False;
+
+        if (!prs_uint64("force_logoff", ps, depth, &info->force_logoff))
+                return False;
+	if (!prs_uint16("min_pwd_len", ps, depth, &info->min_pwd_len))
+                return False;
+	if (!prs_uint16("pwd_history_len", ps, depth, &info->pwd_history_len))
+                return False;
+	if (!prs_uint64("max_pwd_age", ps, depth, &info->max_pwd_age))
+                return False;
+	if (!prs_uint64("min_pwd_age", ps, depth, &info->min_pwd_age))
+                return False;
+	if (!prs_uint64("dom_mod_count", ps, depth, &info->dom_mod_count))
+                return False;
+	if (!smb_io_time("creation_time", &info->creation_time, ps, depth))
+                return False;
+	if (!prs_uint32("security_information", ps, depth, &info->security_information))
+		return False;
+	if (!smb_io_bufhdr4("hdr_sec_desc", &info->hdr_sec_desc, ps, depth))
+		return False;
+	if (!smb_io_lockout_string_hdr("hdr_account_lockout_string", &info->hdr_account_lockout, ps, depth))
+		return False;
+	if (!smb_io_unihdr("hdr_unknown2", &info->hdr_unknown2, ps, depth))
+		return False;
+	if (!smb_io_unihdr("hdr_unknown3", &info->hdr_unknown3, ps, depth))
+		return False;
+	if (!smb_io_unihdr("hdr_unknown4", &info->hdr_unknown4, ps, depth))
+		return False;
+	if (!prs_uint32("logon_chgpass", ps, depth, &info->logon_chgpass))
+		return False;
+	if (!prs_uint32("unknown6", ps, depth, &info->unknown6))
+		return False;
+	if (!prs_uint32("unknown7", ps, depth, &info->unknown7))
+		return False;
+	if (!prs_uint32("unknown8", ps, depth, &info->unknown8))
+		return False;
+
+	if (!smb_io_unistr2("uni_dom_name", &info->uni_dom_name,
+                            info->hdr_dom_name.buffer, ps, depth))
+                return False;
+	if (!smb_io_unistr2("buf_oem_info", &info->buf_oem_info,
+                            info->hdr_oem_info.buffer, ps, depth))
+                return False;
+
+	if (!smb_io_rpc_blob("buf_sec_desc", &info->buf_sec_desc, ps, depth))
+                return False;
+
+	if (!smb_io_account_lockout_str("account_lockout", &info->account_lockout, 
+					info->hdr_account_lockout.buffer, ps, depth))
+		return False;
+
+	if (!smb_io_unistr2("buf_unknown2", &info->buf_unknown2, 
+			    info->hdr_unknown2.buffer, ps, depth))
+		return False;
+	if (!smb_io_unistr2("buf_unknown3", &info->buf_unknown3, 
+			    info->hdr_unknown3.buffer, ps, depth))
+		return False;
+	if (!smb_io_unistr2("buf_unknown4", &info->buf_unknown4, 
+			    info->hdr_unknown4.buffer, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+static BOOL net_io_sam_group_info(const char *desc, SAM_GROUP_INFO * info,
+				  prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "net_io_sam_group_info");
+	depth++;
+
+	if (!smb_io_unihdr("hdr_grp_name", &info->hdr_grp_name, ps, depth))
+                return False;
+	if (!smb_io_gid("gid", &info->gid, ps, depth))
+                return False;
+	if (!smb_io_unihdr("hdr_grp_desc", &info->hdr_grp_desc, ps, depth))
+                return False;
+	if (!smb_io_bufhdr2("hdr_sec_desc", &info->hdr_sec_desc, ps, depth))
+                return False;
+
+        if (ps->data_offset + 48 > ps->buffer_size)
+                return False;
+	ps->data_offset += 48;
+
+	if (!smb_io_unistr2("uni_grp_name", &info->uni_grp_name,
+                            info->hdr_grp_name.buffer, ps, depth))
+                return False;
+	if (!smb_io_unistr2("uni_grp_desc", &info->uni_grp_desc,
+                            info->hdr_grp_desc.buffer, ps, depth))
+                return False;
+	if (!smb_io_rpc_blob("buf_sec_desc", &info->buf_sec_desc, ps, depth))
+                return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+static BOOL net_io_sam_passwd_info(const char *desc, SAM_PWD * pwd,
+				   prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "net_io_sam_passwd_info");
+	depth++;
+
+	if (!prs_uint32("unk_0 ", ps, depth, &pwd->unk_0))
+                return False;
+
+	if (!smb_io_unihdr("hdr_lm_pwd", &pwd->hdr_lm_pwd, ps, depth))
+                return False;
+	if (!prs_uint8s(False, "buf_lm_pwd", ps, depth, pwd->buf_lm_pwd, 16))
+                return False;
+
+	if (!smb_io_unihdr("hdr_nt_pwd", &pwd->hdr_nt_pwd, ps, depth))
+                return False;
+	if (!prs_uint8s(False, "buf_nt_pwd", ps, depth, pwd->buf_nt_pwd, 16))
+                return False;
+
+	if (!smb_io_unihdr("", &pwd->hdr_empty_lm, ps, depth))
+                return False;
+	if (!smb_io_unihdr("", &pwd->hdr_empty_nt, ps, depth))
+                return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+static BOOL net_io_sam_account_info(const char *desc, SAM_ACCOUNT_INFO *info,
+				prs_struct *ps, int depth)
+{
+	BUFHDR2 hdr_priv_data;
+	uint32 i;
+
+	prs_debug(ps, depth, desc, "net_io_sam_account_info");
+	depth++;
+
+	if (!smb_io_unihdr("hdr_acct_name", &info->hdr_acct_name, ps, depth))
+                return False;
+	if (!smb_io_unihdr("hdr_full_name", &info->hdr_full_name, ps, depth))
+                return False;
+
+	if (!prs_uint32("user_rid ", ps, depth, &info->user_rid))
+                return False;
+	if (!prs_uint32("group_rid", ps, depth, &info->group_rid))
+                return False;
+
+	if (!smb_io_unihdr("hdr_home_dir ", &info->hdr_home_dir, ps, depth))
+                return False;
+	if (!smb_io_unihdr("hdr_dir_drive", &info->hdr_dir_drive, ps, depth))
+                return False;
+	if (!smb_io_unihdr("hdr_logon_script", &info->hdr_logon_script, ps,
+                           depth))
+                return False;
+
+	if (!smb_io_unihdr("hdr_acct_desc", &info->hdr_acct_desc, ps, depth))
+                return False;
+	if (!smb_io_unihdr("hdr_workstations", &info->hdr_workstations, ps,
+                           depth))
+                return False;
+
+	if (!smb_io_time("logon_time", &info->logon_time, ps, depth))
+                return False;
+	if (!smb_io_time("logoff_time", &info->logoff_time, ps, depth))
+                return False;
+
+	if (!prs_uint32("logon_divs   ", ps, depth, &info->logon_divs))
+                return False;
+	if (!prs_uint32("ptr_logon_hrs", ps, depth, &info->ptr_logon_hrs))
+                return False;
+
+	if (!prs_uint16("bad_pwd_count", ps, depth, &info->bad_pwd_count))
+                return False;
+	if (!prs_uint16("logon_count", ps, depth, &info->logon_count))
+                return False;
+	if (!smb_io_time("pwd_last_set_time", &info->pwd_last_set_time, ps,
+                         depth))
+                return False;
+	if (!smb_io_time("acct_expiry_time", &info->acct_expiry_time, ps, 
+                         depth))
+                return False;
+
+	if (!prs_uint32("acb_info", ps, depth, &info->acb_info))
+                return False;
+	if (!prs_uint8s(False, "nt_pwd", ps, depth, info->nt_pwd, 16))
+                return False;
+	if (!prs_uint8s(False, "lm_pwd", ps, depth, info->lm_pwd, 16))
+                return False;
+	if (!prs_uint8("lm_pwd_present", ps, depth, &info->lm_pwd_present))
+                return False;
+	if (!prs_uint8("nt_pwd_present", ps, depth, &info->nt_pwd_present))
+                return False;
+	if (!prs_uint8("pwd_expired", ps, depth, &info->pwd_expired))
+                return False;
+
+	if (!smb_io_unihdr("hdr_comment", &info->hdr_comment, ps, depth))
+                return False;
+	if (!smb_io_unihdr("hdr_parameters", &info->hdr_parameters, ps, 
+                           depth))
+                return False;
+	if (!prs_uint16("country", ps, depth, &info->country))
+                return False;
+	if (!prs_uint16("codepage", ps, depth, &info->codepage))
+                return False;
+
+	if (!smb_io_bufhdr2("hdr_priv_data", &hdr_priv_data, ps, depth))
+                return False;
+	if (!smb_io_bufhdr2("hdr_sec_desc", &info->hdr_sec_desc, ps, depth))
+                return False;
+	if (!smb_io_unihdr("hdr_profile", &info->hdr_profile, ps, depth))
+                return False;
+
+	for (i = 0; i < 3; i++)
+	{
+		if (!smb_io_unihdr("hdr_reserved", &info->hdr_reserved[i], 
+                                   ps, depth))
+                        return False;                                          
+	}
+
+	for (i = 0; i < 4; i++)
+	{
+		if (!prs_uint32("dw_reserved", ps, depth, 
+                                &info->dw_reserved[i]))
+                        return False;
+	}
+
+	if (!smb_io_unistr2("uni_acct_name", &info->uni_acct_name,
+                            info->hdr_acct_name.buffer, ps, depth))
+                return False;
+	prs_align(ps);
+	if (!smb_io_unistr2("uni_full_name", &info->uni_full_name,
+                            info->hdr_full_name.buffer, ps, depth))
+                return False;
+	prs_align(ps);
+	if (!smb_io_unistr2("uni_home_dir ", &info->uni_home_dir,
+                            info->hdr_home_dir.buffer, ps, depth))
+                return False;
+	prs_align(ps);
+	if (!smb_io_unistr2("uni_dir_drive", &info->uni_dir_drive,
+                            info->hdr_dir_drive.buffer, ps, depth))
+                return False;
+	prs_align(ps);
+	if (!smb_io_unistr2("uni_logon_script", &info->uni_logon_script,
+                            info->hdr_logon_script.buffer, ps, depth))
+                return False;
+	prs_align(ps);
+	if (!smb_io_unistr2("uni_acct_desc", &info->uni_acct_desc,
+                            info->hdr_acct_desc.buffer, ps, depth))
+                return False;
+	prs_align(ps);
+	if (!smb_io_unistr2("uni_workstations", &info->uni_workstations,
+                            info->hdr_workstations.buffer, ps, depth))
+                return False;
+	prs_align(ps);
+
+	if (!prs_uint32("unknown1", ps, depth, &info->unknown1))
+                return False;
+	if (!prs_uint32("unknown2", ps, depth, &info->unknown2))
+                return False;
+
+	if (!smb_io_rpc_blob("buf_logon_hrs", &info->buf_logon_hrs, ps, depth))
+                return False;
+	prs_align(ps);
+	if (!smb_io_unistr2("uni_comment", &info->uni_comment,
+                            info->hdr_comment.buffer, ps, depth))
+                return False;
+	prs_align(ps);
+	if (!smb_io_unistr2("uni_parameters", &info->uni_parameters,
+                            info->hdr_parameters.buffer, ps, depth))
+                return False;
+	prs_align(ps);
+	if (hdr_priv_data.buffer != 0)
+	{
+		int old_offset = 0;
+		uint32 len = 0x44;
+		if (!prs_uint32("pwd_len", ps, depth, &len))
+                        return False;
+		old_offset = ps->data_offset;
+		if (len > 0)
+		{
+			if (ps->io)
+			{
+				/* reading */
+                                if (!prs_hash1(ps, ps->data_offset, len))
+                                        return False;
+			}
+			if (!net_io_sam_passwd_info("pass", &info->pass, 
+                                                    ps, depth))
+                                return False;
+
+			if (!ps->io)
+			{
+				/* writing */
+                                if (!prs_hash1(ps, old_offset, len))
+                                        return False;
+			}
+		}
+                if (old_offset + len > ps->buffer_size)
+                        return False;
+		ps->data_offset = old_offset + len;
+	}
+	if (!smb_io_rpc_blob("buf_sec_desc", &info->buf_sec_desc, ps, depth))
+                return False;
+	prs_align(ps);
+	if (!smb_io_unistr2("uni_profile", &info->uni_profile,
+                            info->hdr_profile.buffer, ps, depth))
+                return False;
+
+	prs_align(ps);
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+static BOOL net_io_sam_group_mem_info(const char *desc, SAM_GROUP_MEM_INFO * info,
+				      prs_struct *ps, int depth)
+{
+	uint32 i;
+	fstring tmp;
+
+	prs_debug(ps, depth, desc, "net_io_sam_group_mem_info");
+	depth++;
+
+	prs_align(ps);
+	if (!prs_uint32("ptr_rids   ", ps, depth, &info->ptr_rids))
+                return False;
+	if (!prs_uint32("ptr_attribs", ps, depth, &info->ptr_attribs))
+                return False;
+	if (!prs_uint32("num_members", ps, depth, &info->num_members))
+                return False;
+
+        if (ps->data_offset + 16 > ps->buffer_size)
+                return False;
+	ps->data_offset += 16;
+
+	if (info->ptr_rids != 0)
+	{
+		if (!prs_uint32("num_members2", ps, depth, 
+                                &info->num_members2))
+                        return False;
+
+		if (info->num_members2 != info->num_members)
+		{
+			/* RPC fault */
+			return False;
+		}
+
+		if (UNMARSHALLING(ps)) {
+			if (info->num_members2) {
+				info->rids = TALLOC_ARRAY(ps->mem_ctx, uint32, info->num_members2);
+
+				if (info->rids == NULL) {
+					DEBUG(0, ("out of memory allocating %d rids\n",
+						info->num_members2));
+					return False;
+				}
+			} else {
+				info->rids = NULL;
+			}
+		}
+
+		for (i = 0; i < info->num_members2; i++)
+		{
+			slprintf(tmp, sizeof(tmp) - 1, "rids[%02d]", i);
+			if (!prs_uint32(tmp, ps, depth, &info->rids[i]))
+                                return False;
+		}
+	}
+
+	if (info->ptr_attribs != 0)
+	{
+		if (!prs_uint32("num_members3", ps, depth, 
+                                &info->num_members3))
+                        return False;
+		if (info->num_members3 != info->num_members)
+		{
+			/* RPC fault */
+			return False;
+		}
+
+		if (UNMARSHALLING(ps)) {
+			if (info->num_members3) {
+				info->attribs = TALLOC_ARRAY(ps->mem_ctx, uint32, info->num_members3);
+
+				if (info->attribs == NULL) {
+					DEBUG(0, ("out of memory allocating %d attribs\n",
+						info->num_members3));
+					return False;
+				}
+			} else {
+				info->attribs = NULL;
+			}
+		}	
+
+		for (i = 0; i < info->num_members3; i++)
+		{
+			slprintf(tmp, sizeof(tmp) - 1, "attribs[%02d]", i);
+			if (!prs_uint32(tmp, ps, depth, &info->attribs[i]))
+                                return False;
+		}
+	}
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+static BOOL net_io_sam_alias_info(const char *desc, SAM_ALIAS_INFO * info,
+				  prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "net_io_sam_alias_info");
+	depth++;
+
+	if (!smb_io_unihdr("hdr_als_name", &info->hdr_als_name, ps, depth))
+                return False;
+	if (!prs_uint32("als_rid", ps, depth, &info->als_rid))
+                return False;
+	if (!smb_io_bufhdr2("hdr_sec_desc", &info->hdr_sec_desc, ps, depth))
+                return False;
+	if (!smb_io_unihdr("hdr_als_desc", &info->hdr_als_desc, ps, depth))
+                return False;
+
+        if (ps->data_offset + 40 > ps->buffer_size)
+                return False;
+	ps->data_offset += 40;
+
+	if (!smb_io_unistr2("uni_als_name", &info->uni_als_name,
+                            info->hdr_als_name.buffer, ps, depth))
+                return False;
+	if (!smb_io_rpc_blob("buf_sec_desc", &info->buf_sec_desc, ps, depth))
+                return False;
+
+	if (!smb_io_unistr2("uni_als_desc", &info->uni_als_desc,
+			    info->hdr_als_desc.buffer, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+static BOOL net_io_sam_alias_mem_info(const char *desc, SAM_ALIAS_MEM_INFO * info,
+				      prs_struct *ps, int depth)
+{
+	uint32 i;
+	fstring tmp;
+
+	prs_debug(ps, depth, desc, "net_io_sam_alias_mem_info");
+	depth++;
+
+	prs_align(ps);
+	if (!prs_uint32("num_members", ps, depth, &info->num_members))
+                return False;
+	if (!prs_uint32("ptr_members", ps, depth, &info->ptr_members))
+                return False;
+
+	if (ps->data_offset + 16 > ps->buffer_size)
+		return False;
+	ps->data_offset += 16;
+
+	if (info->ptr_members != 0)
+	{
+		if (!prs_uint32("num_sids", ps, depth, &info->num_sids))
+                        return False;
+		if (info->num_sids != info->num_members)
+		{
+			/* RPC fault */
+			return False;
+		}
+
+		if (UNMARSHALLING(ps)) {
+			if (info->num_sids) {
+				info->ptr_sids = TALLOC_ARRAY(ps->mem_ctx, uint32, info->num_sids);
+                
+				if (info->ptr_sids == NULL) {
+					DEBUG(0, ("out of memory allocating %d ptr_sids\n",
+						info->num_sids));
+					return False;
+				}
+			} else {
+				info->ptr_sids = NULL;
+			}
+		}
+
+		for (i = 0; i < info->num_sids; i++)
+		{
+			slprintf(tmp, sizeof(tmp) - 1, "ptr_sids[%02d]", i);
+			if (!prs_uint32(tmp, ps, depth, &info->ptr_sids[i]))
+                                return False;
+		}
+
+		if (UNMARSHALLING(ps)) {
+			if (info->num_sids) {
+				info->sids = TALLOC_ARRAY(ps->mem_ctx, DOM_SID2, info->num_sids);
+
+				if (info->sids == NULL) {
+					DEBUG(0, ("error allocating %d sids\n",
+						info->num_sids));
+					return False;
+				}
+			} else {
+				info->sids = NULL;
+			}
+		}
+
+		for (i = 0; i < info->num_sids; i++)
+		{
+			if (info->ptr_sids[i] != 0)
+			{
+				slprintf(tmp, sizeof(tmp) - 1, "sids[%02d]",
+					 i);
+				if (!smb_io_dom_sid2(tmp, &info->sids[i], 
+                                                     ps, depth))
+                                        return False;
+			}
+		}
+	}
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+static BOOL net_io_sam_policy_info(const char *desc, SAM_DELTA_POLICY *info,
+				      prs_struct *ps, int depth)
+{
+	unsigned int i;
+	prs_debug(ps, depth, desc, "net_io_sam_policy_info");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("max_log_size", ps, depth, &info->max_log_size))
+                return False;
+	if (!prs_uint64("audit_retention_period", ps, depth,
+			&info->audit_retention_period))
+                return False;
+	if (!prs_uint32("auditing_mode", ps, depth, &info->auditing_mode))
+                return False;
+	if (!prs_uint32("num_events", ps, depth, &info->num_events))
+                return False;
+	if (!prs_uint32("ptr_events", ps, depth, &info->ptr_events))
+                return False;
+
+	if (!smb_io_unihdr("hdr_dom_name", &info->hdr_dom_name, ps, depth))
+		return False;
+
+	if (!prs_uint32("sid_ptr", ps, depth, &info->sid_ptr))
+                return False;
+
+	if (!prs_uint32("paged_pool_limit", ps, depth, &info->paged_pool_limit))
+                return False;
+	if (!prs_uint32("non_paged_pool_limit", ps, depth,
+			&info->non_paged_pool_limit))
+                return False;
+	if (!prs_uint32("min_workset_size", ps, depth, &info->min_workset_size))
+                return False;
+	if (!prs_uint32("max_workset_size", ps, depth, &info->max_workset_size))
+                return False;
+	if (!prs_uint32("page_file_limit", ps, depth, &info->page_file_limit))
+                return False;
+	if (!prs_uint64("time_limit", ps, depth, &info->time_limit))
+                return False;
+	if (!smb_io_time("modify_time", &info->modify_time, ps, depth))
+                return False;
+	if (!smb_io_time("create_time", &info->create_time, ps, depth))
+                return False;
+	if (!smb_io_bufhdr2("hdr_sec_desc", &info->hdr_sec_desc, ps, depth))
+                return False;
+
+	for (i=0; i<4; i++) {
+		UNIHDR dummy;
+		if (!smb_io_unihdr("dummy", &dummy, ps, depth))
+			return False;
+	}
+
+	for (i=0; i<4; i++) {
+		uint32 reserved;
+		if (!prs_uint32("reserved", ps, depth, &reserved))
+			return False;
+	}
+
+	if (!prs_uint32("num_event_audit_options", ps, depth,
+			&info->num_event_audit_options))
+                return False;
+
+	for (i=0; i<info->num_event_audit_options; i++)
+		if (!prs_uint32("event_audit_option", ps, depth,
+				&info->event_audit_option))
+			return False;
+
+	if (!smb_io_unistr2("domain_name", &info->domain_name, True, ps, depth))
+                return False;
+
+	if(!smb_io_dom_sid2("domain_sid", &info->domain_sid, ps, depth))
+		return False;
+
+	if (!smb_io_rpc_blob("buf_sec_desc", &info->buf_sec_desc, ps, depth))
+
+		return False;
+
+	return True;
+}
+
+#if 0
+
+/* This function is pretty broken - see bug #334 */
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+static BOOL net_io_sam_trustdoms_info(const char *desc, SAM_DELTA_TRUSTDOMS *info,
+				      prs_struct *ps, int depth)
+{
+	int i;
+
+	prs_debug(ps, depth, desc, "net_io_sam_trustdoms_info");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("buf_size", ps, depth, &info->buf_size))
+                return False;
+
+	if(!sec_io_desc("sec_desc", &info->sec_desc, ps, depth))
+		return False;
+
+	if(!smb_io_dom_sid2("sid", &info->sid, ps, depth))
+		return False;
+
+	if(!smb_io_unihdr("hdr_domain", &info->hdr_domain, ps, depth))
+		return False;
+
+	if(!prs_uint32("unknown0", ps, depth, &info->unknown0))
+                return False;
+	if(!prs_uint32("unknown1", ps, depth, &info->unknown1))
+                return False;
+	if(!prs_uint32("unknown2", ps, depth, &info->unknown2))
+                return False;
+
+	if(!prs_uint32("buf_size2", ps, depth, &info->buf_size2))
+                return False;
+	if(!prs_uint32("ptr", ps, depth, &info->ptr))
+                return False;
+
+	for (i=0; i<12; i++)
+		if(!prs_uint32("unknown3", ps, depth, &info->unknown3))
+                	return False;
+
+	if (!smb_io_unistr2("domain", &info->domain, True, ps, depth))
+                return False;
+
+	return True;
+}
+
+#endif
+
+#if 0
+
+/* This function doesn't work - see bug #334 */
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+static BOOL net_io_sam_secret_info(const char *desc, SAM_DELTA_SECRET *info,
+				   prs_struct *ps, int depth)
+{
+	int i;
+
+	prs_debug(ps, depth, desc, "net_io_sam_secret_info");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("buf_size", ps, depth, &info->buf_size))
+                return False;
+
+	if(!sec_io_desc("sec_desc", &info->sec_desc, ps, depth))
+		return False;
+
+	if (!smb_io_unistr2("secret", &info->secret, True, ps, depth))
+                return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("count1", ps, depth, &info->count1))
+                return False;
+	if(!prs_uint32("count2", ps, depth, &info->count2))
+                return False;
+	if(!prs_uint32("ptr", ps, depth, &info->ptr))
+                return False;
+
+
+	if(!smb_io_time("time1", &info->time1, ps, depth)) /* logon time */
+		return False;
+	if(!prs_uint32("count3", ps, depth, &info->count3))
+                return False;
+	if(!prs_uint32("count4", ps, depth, &info->count4))
+                return False;
+	if(!prs_uint32("ptr2", ps, depth, &info->ptr2))
+                return False;
+	if(!smb_io_time("time2", &info->time2, ps, depth)) /* logon time */
+		return False;
+	if(!prs_uint32("unknow1", ps, depth, &info->unknow1))
+                return False;
+
+
+	if(!prs_uint32("buf_size2", ps, depth, &info->buf_size2))
+                return False;
+	if(!prs_uint32("ptr3", ps, depth, &info->ptr3))
+                return False;
+	for(i=0; i<12; i++)
+		if(!prs_uint32("unknow2", ps, depth, &info->unknow2))
+                	return False;
+
+	if(!prs_uint32("chal_len", ps, depth, &info->chal_len))
+                return False;
+	if(!prs_uint32("reserved1", ps, depth, &info->reserved1))
+                return False;
+	if(!prs_uint32("chal_len2", ps, depth, &info->chal_len2))
+                return False;
+
+	if(!prs_uint8s (False, "chal", ps, depth, info->chal, info->chal_len2))
+		return False;
+
+	if(!prs_uint32("key_len", ps, depth, &info->key_len))
+                return False;
+	if(!prs_uint32("reserved2", ps, depth, &info->reserved2))
+                return False;
+	if(!prs_uint32("key_len2", ps, depth, &info->key_len2))
+                return False;
+
+	if(!prs_uint8s (False, "key", ps, depth, info->key, info->key_len2))
+		return False;
+
+
+	if(!prs_uint32("buf_size3", ps, depth, &info->buf_size3))
+                return False;
+
+	if(!sec_io_desc("sec_desc2", &info->sec_desc2, ps, depth))
+		return False;
+
+
+	return True;
+}
+
+#endif
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+static BOOL net_io_sam_privs_info(const char *desc, SAM_DELTA_PRIVS *info,
+				      prs_struct *ps, int depth)
+{
+	unsigned int i;
+
+	prs_debug(ps, depth, desc, "net_io_sam_privs_info");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_dom_sid2("sid", &info->sid, ps, depth))
+		return False;
+
+	if(!prs_uint32("priv_count", ps, depth, &info->priv_count))
+                return False;
+	if(!prs_uint32("priv_control", ps, depth, &info->priv_control))
+                return False;
+
+	if(!prs_uint32("priv_attr_ptr", ps, depth, &info->priv_attr_ptr))
+                return False;
+	if(!prs_uint32("priv_name_ptr", ps, depth, &info->priv_name_ptr))
+                return False;
+
+	if (!prs_uint32("paged_pool_limit", ps, depth, &info->paged_pool_limit))
+                return False;
+	if (!prs_uint32("non_paged_pool_limit", ps, depth,
+			&info->non_paged_pool_limit))
+                return False;
+	if (!prs_uint32("min_workset_size", ps, depth, &info->min_workset_size))
+                return False;
+	if (!prs_uint32("max_workset_size", ps, depth, &info->max_workset_size))
+                return False;
+	if (!prs_uint32("page_file_limit", ps, depth, &info->page_file_limit))
+                return False;
+	if (!prs_uint64("time_limit", ps, depth, &info->time_limit))
+                return False;
+	if (!prs_uint32("system_flags", ps, depth, &info->system_flags))
+                return False;
+	if (!smb_io_bufhdr2("hdr_sec_desc", &info->hdr_sec_desc, ps, depth))
+                return False;
+
+	for (i=0; i<4; i++) {
+		UNIHDR dummy;
+		if (!smb_io_unihdr("dummy", &dummy, ps, depth))
+			return False;
+	}
+
+	for (i=0; i<4; i++) {
+		uint32 reserved;
+		if (!prs_uint32("reserved", ps, depth, &reserved))
+			return False;
+	}
+
+	if(!prs_uint32("attribute_count", ps, depth, &info->attribute_count))
+                return False;
+
+	if (UNMARSHALLING(ps)) {
+		if (info->attribute_count) {
+			info->attributes = TALLOC_ARRAY(ps->mem_ctx, uint32, info->attribute_count);
+			if (!info->attributes) {
+				return False;
+			}
+		} else {
+			info->attributes = NULL;
+		}
+	}
+
+	for (i=0; i<info->attribute_count; i++)
+		if(!prs_uint32("attributes", ps, depth, &info->attributes[i]))
+	                return False;
+
+	if(!prs_uint32("privlist_count", ps, depth, &info->privlist_count))
+                return False;
+
+	if (UNMARSHALLING(ps)) {
+		if (info->privlist_count) {
+			info->hdr_privslist = TALLOC_ARRAY(ps->mem_ctx, UNIHDR, info->privlist_count);
+			info->uni_privslist = TALLOC_ARRAY(ps->mem_ctx, UNISTR2, info->privlist_count);
+			if (!info->hdr_privslist) {
+				return False;
+			}
+			if (!info->uni_privslist) {
+				return False;
+			}
+		} else {
+			info->hdr_privslist = NULL;
+			info->uni_privslist = NULL;
+		}
+	}
+
+	for (i=0; i<info->privlist_count; i++)
+		if(!smb_io_unihdr("hdr_privslist", &info->hdr_privslist[i], ps, depth))
+			return False;
+
+	for (i=0; i<info->privlist_count; i++)
+		if (!smb_io_unistr2("uni_privslist", &info->uni_privslist[i], True, ps, depth))
+			return False;
+
+	if (!smb_io_rpc_blob("buf_sec_desc", &info->buf_sec_desc, ps, depth))
+                return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+static BOOL net_io_sam_delta_ctr(const char *desc,
+				 SAM_DELTA_CTR * delta, uint16 type,
+				 prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "net_io_sam_delta_ctr");
+	depth++;
+
+	switch (type) {
+                /* Seen in sam deltas */
+                case SAM_DELTA_MODIFIED_COUNT:
+                        if (!net_io_sam_delta_mod_count("", &delta->mod_count, ps, depth))
+                                return False;
+                        break;
+
+		case SAM_DELTA_DOMAIN_INFO:
+			if (!net_io_sam_domain_info("", &delta->domain_info, ps, depth))
+                                return False;
+			break;
+
+		case SAM_DELTA_GROUP_INFO:
+			if (!net_io_sam_group_info("", &delta->group_info, ps, depth))
+                                return False;
+			break;
+
+		case SAM_DELTA_ACCOUNT_INFO:
+			if (!net_io_sam_account_info("", &delta->account_info, ps, depth))
+                                return False;
+			break;
+
+		case SAM_DELTA_GROUP_MEM:
+			if (!net_io_sam_group_mem_info("", &delta->grp_mem_info, ps, depth))
+                                return False;
+			break;
+
+		case SAM_DELTA_ALIAS_INFO:
+                        if (!net_io_sam_alias_info("", &delta->alias_info, ps, depth))
+                                return False;
+			break;
+
+		case SAM_DELTA_POLICY_INFO:
+                        if (!net_io_sam_policy_info("", &delta->policy_info, ps, depth))
+                                return False;
+			break;
+
+		case SAM_DELTA_ALIAS_MEM:
+			if (!net_io_sam_alias_mem_info("", &delta->als_mem_info, ps, depth))
+                                return False;
+			break;
+
+		case SAM_DELTA_PRIVS_INFO:
+			if (!net_io_sam_privs_info("", &delta->privs_info, ps, depth))
+                                return False;
+			break;
+
+			/* These guys are implemented but broken */
+
+ 	        case SAM_DELTA_TRUST_DOMS:
+		case SAM_DELTA_SECRET_INFO:
+			break;
+
+			/* These guys are not implemented yet */
+
+  	        case SAM_DELTA_RENAME_GROUP:
+	        case SAM_DELTA_RENAME_USER:
+	        case SAM_DELTA_RENAME_ALIAS:
+	        case SAM_DELTA_DELETE_GROUP:
+	        case SAM_DELTA_DELETE_USER:
+		default:
+			DEBUG(0, ("Replication error: Unknown delta type 0x%x\n", type));
+			break;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+BOOL net_io_r_sam_sync(const char *desc,
+		       NET_R_SAM_SYNC * r_s, prs_struct *ps, int depth)
+{
+	uint32 i;
+
+	prs_debug(ps, depth, desc, "net_io_r_sam_sync");
+	depth++;
+
+	if (!smb_io_cred("srv_creds", &r_s->srv_creds, ps, depth))
+                return False;
+	if (!prs_uint32("sync_context", ps, depth, &r_s->sync_context))
+                return False;
+
+	if (!prs_uint32("ptr_deltas", ps, depth, &r_s->ptr_deltas))
+                return False;
+	if (r_s->ptr_deltas != 0)
+	{
+		if (!prs_uint32("num_deltas ", ps, depth, &r_s->num_deltas))
+                        return False;
+		if (!prs_uint32("ptr_deltas2", ps, depth, &r_s->ptr_deltas2))
+                        return False;
+		if (r_s->ptr_deltas2 != 0)
+		{
+			if (!prs_uint32("num_deltas2", ps, depth,
+                                        &r_s->num_deltas2))
+                                return False;
+
+			if (r_s->num_deltas2 != r_s->num_deltas)
+			{
+				/* RPC fault */
+				return False;
+			}
+
+			if (UNMARSHALLING(ps)) {
+	                        if (r_s->num_deltas2) {
+					r_s->hdr_deltas = TALLOC_ARRAY(ps->mem_ctx, SAM_DELTA_HDR, r_s->num_deltas2);
+					if (r_s->hdr_deltas == NULL) {
+						DEBUG(0, ("error tallocating memory "
+							"for %d delta headers\n", 
+							r_s->num_deltas2));
+						return False;
+					}
+				} else {
+					r_s->hdr_deltas = NULL;
+				}
+			}
+
+			for (i = 0; i < r_s->num_deltas2; i++)
+			{
+				if (!net_io_sam_delta_hdr("", 
+                                                          &r_s->hdr_deltas[i],
+                                                          ps, depth))
+                                        return False;
+			}
+
+			if (UNMARSHALLING(ps)) {
+				if (r_s->num_deltas2) {
+					r_s->deltas = TALLOC_ARRAY(ps->mem_ctx, SAM_DELTA_CTR, r_s->num_deltas2);
+					if (r_s->deltas == NULL) {
+						DEBUG(0, ("error tallocating memory "
+							"for %d deltas\n", 
+							r_s->num_deltas2));
+						return False;
+					}
+				} else {
+					r_s->deltas = NULL;
+				}
+			}
+
+			for (i = 0; i < r_s->num_deltas2; i++)
+			{
+				if (!net_io_sam_delta_ctr(
+                                        "", &r_s->deltas[i],
+                                        r_s->hdr_deltas[i].type3,
+                                        ps, depth)) {
+                                        DEBUG(0, ("hmm, failed on i=%d\n", i));
+                                        return False;
+                                }
+			}
+		}
+	}
+
+	prs_align(ps);
+	if (!prs_ntstatus("status", ps, depth, &(r_s->status)))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+makes a NET_Q_SAM_DELTAS structure.
+********************************************************************/
+BOOL init_net_q_sam_deltas(NET_Q_SAM_DELTAS *q_s, const char *srv_name, 
+                           const char *cli_name, DOM_CRED *cli_creds, 
+                           uint32 database_id, uint64 dom_mod_count)
+{
+	DEBUG(5, ("init_net_q_sam_deltas\n"));
+
+	init_unistr2(&q_s->uni_srv_name, srv_name, UNI_STR_TERMINATE);
+	init_unistr2(&q_s->uni_cli_name, cli_name, UNI_STR_TERMINATE);
+
+	memcpy(&q_s->cli_creds, cli_creds, sizeof(q_s->cli_creds));
+	memset(&q_s->ret_creds, 0, sizeof(q_s->ret_creds));
+
+	q_s->database_id = database_id;
+    q_s->dom_mod_count = dom_mod_count;
+	q_s->max_size = 0xffff;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+BOOL net_io_q_sam_deltas(const char *desc, NET_Q_SAM_DELTAS *q_s, prs_struct *ps,
+                         int depth)
+{
+	prs_debug(ps, depth, desc, "net_io_q_sam_deltas");
+	depth++;
+
+	if (!smb_io_unistr2("", &q_s->uni_srv_name, True, ps, depth))
+                return False;
+	if (!smb_io_unistr2("", &q_s->uni_cli_name, True, ps, depth))
+                return False;
+
+	if (!smb_io_cred("", &q_s->cli_creds, ps, depth))
+                return False;
+	if (!smb_io_cred("", &q_s->ret_creds, ps, depth))
+                return False;
+
+	if (!prs_uint32("database_id  ", ps, depth, &q_s->database_id))
+                return False;
+        if (!prs_uint64("dom_mod_count", ps, depth, &q_s->dom_mod_count))
+                return False;
+	if (!prs_uint32("max_size", ps, depth, &q_s->max_size))
+                return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+BOOL net_io_r_sam_deltas(const char *desc,
+                         NET_R_SAM_DELTAS *r_s, prs_struct *ps, int depth)
+{
+        unsigned int i;
+
+	prs_debug(ps, depth, desc, "net_io_r_sam_deltas");
+	depth++;
+
+	if (!smb_io_cred("srv_creds", &r_s->srv_creds, ps, depth))
+                return False;
+        if (!prs_uint64("dom_mod_count", ps, depth, &r_s->dom_mod_count))
+                return False;
+
+	if (!prs_uint32("ptr_deltas", ps, depth, &r_s->ptr_deltas))
+                return False;
+	if (!prs_uint32("num_deltas", ps, depth, &r_s->num_deltas))
+                return False;
+	if (!prs_uint32("ptr_deltas2", ps, depth, &r_s->num_deltas2))
+                return False;
+
+	if (r_s->num_deltas2 != 0)
+	{
+		if (!prs_uint32("num_deltas2 ", ps, depth, &r_s->num_deltas2))
+                        return False;
+
+		if (r_s->ptr_deltas != 0)
+		{
+			if (UNMARSHALLING(ps)) {
+	                        if (r_s->num_deltas) {
+					r_s->hdr_deltas = TALLOC_ARRAY(ps->mem_ctx, SAM_DELTA_HDR, r_s->num_deltas);
+					if (r_s->hdr_deltas == NULL) {
+						DEBUG(0, ("error tallocating memory "
+							"for %d delta headers\n", 
+							r_s->num_deltas));
+						return False;
+					}
+				} else {
+					r_s->hdr_deltas = NULL;
+				}
+			}
+
+			for (i = 0; i < r_s->num_deltas; i++)
+			{
+				net_io_sam_delta_hdr("", &r_s->hdr_deltas[i],
+                                                      ps, depth);
+			}
+                        
+			if (UNMARSHALLING(ps)) {
+				if (r_s->num_deltas) {
+					r_s->deltas = TALLOC_ARRAY(ps->mem_ctx, SAM_DELTA_CTR, r_s->num_deltas);
+					if (r_s->deltas == NULL) {
+						DEBUG(0, ("error tallocating memory "
+							"for %d deltas\n", 
+							r_s->num_deltas));
+						return False;
+					}
+				} else {
+					r_s->deltas = NULL;
+				}
+			}
+
+			for (i = 0; i < r_s->num_deltas; i++)
+			{
+				if (!net_io_sam_delta_ctr(
+                                        "",
+                                        &r_s->deltas[i],
+                                        r_s->hdr_deltas[i].type2,
+                                        ps, depth))
+                                        
+                                        return False;
+			}
+		}
+	}
+
+	prs_align(ps);
+	if (!prs_ntstatus("status", ps, depth, &r_s->status))
+                return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a NET_Q_DSR_GETDCNAME structure.
+********************************************************************/
+
+void init_net_q_dsr_getdcname(NET_Q_DSR_GETDCNAME *r_t, const char *server_unc,
+			      const char *domain_name,
+			      struct GUID *domain_guid,
+			      struct GUID *site_guid,
+			      uint32_t flags)
+{
+	DEBUG(5, ("init_net_q_dsr_getdcname\n"));
+
+	r_t->ptr_server_unc = (server_unc != NULL);
+	init_unistr2(&r_t->uni_server_unc, server_unc, UNI_STR_TERMINATE);
+
+	r_t->ptr_domain_name = (domain_name != NULL);
+	init_unistr2(&r_t->uni_domain_name, domain_name, UNI_STR_TERMINATE);
+
+	r_t->ptr_domain_guid = (domain_guid != NULL);
+	r_t->domain_guid = domain_guid;
+
+	r_t->ptr_site_guid = (site_guid != NULL);
+	r_t->site_guid = site_guid;
+
+	r_t->flags = flags;
+}
+
+/*******************************************************************
+ Inits a NET_Q_DSR_GETDCNAMEEX structure.
+********************************************************************/
+
+void init_net_q_dsr_getdcnameex(NET_Q_DSR_GETDCNAMEEX *r_t, const char *server_unc,
+				const char *domain_name,
+				struct GUID *domain_guid,
+				const char *site_name,
+				uint32_t flags)
+{
+	DEBUG(5, ("init_net_q_dsr_getdcnameex\n"));
+
+	r_t->ptr_server_unc = (server_unc != NULL);
+	init_unistr2(&r_t->uni_server_unc, server_unc, UNI_STR_TERMINATE);
+
+	r_t->ptr_domain_name = (domain_name != NULL);
+	init_unistr2(&r_t->uni_domain_name, domain_name, UNI_STR_TERMINATE);
+
+	r_t->ptr_domain_guid = (domain_guid != NULL);
+	r_t->domain_guid = domain_guid;
+
+	r_t->ptr_site_name = (site_name != NULL);
+	init_unistr2(&r_t->uni_site_name, site_name, UNI_STR_TERMINATE);
+
+	r_t->flags = flags;
+}
+
+/*******************************************************************
+ Inits a NET_Q_DSR_GETDCNAMEEX2 structure.
+********************************************************************/
+
+void init_net_q_dsr_getdcnameex2(NET_Q_DSR_GETDCNAMEEX2 *r_t, const char *server_unc,
+				 const char *domain_name,
+				 const char *client_account,
+				 uint32 mask,
+				 struct GUID *domain_guid,
+				 const char *site_name,
+				 uint32_t flags)
+{
+	DEBUG(5, ("init_net_q_dsr_getdcnameex2\n"));
+
+	r_t->ptr_server_unc = (server_unc != NULL);
+	init_unistr2(&r_t->uni_server_unc, server_unc, UNI_STR_TERMINATE);
+
+	r_t->ptr_client_account = (client_account != NULL);
+	init_unistr2(&r_t->uni_client_account, client_account, UNI_STR_TERMINATE);
+
+	r_t->mask = mask;
+
+	r_t->ptr_domain_name = (domain_name != NULL);
+	init_unistr2(&r_t->uni_domain_name, domain_name, UNI_STR_TERMINATE);
+
+	r_t->ptr_domain_guid = (domain_guid != NULL);
+	r_t->domain_guid = domain_guid;
+
+	r_t->ptr_site_name = (site_name != NULL);
+	init_unistr2(&r_t->uni_site_name, site_name, UNI_STR_TERMINATE);
+
+	r_t->flags = flags;
+}
+
+/*******************************************************************
+ Reads or writes an NET_Q_DSR_GETDCNAME structure.
+********************************************************************/
+
+BOOL net_io_q_dsr_getdcname(const char *desc, NET_Q_DSR_GETDCNAME *r_t,
+			    prs_struct *ps, int depth)
+{
+	if (r_t == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_q_dsr_getdcname");
+	depth++;
+
+	if (!prs_uint32("ptr_server_unc", ps, depth, &r_t->ptr_server_unc))
+		return False;
+
+	if (!smb_io_unistr2("server_unc", &r_t->uni_server_unc,
+			    r_t->ptr_server_unc, ps, depth))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("ptr_domain_name", ps, depth, &r_t->ptr_domain_name))
+		return False;
+
+	if (!smb_io_unistr2("domain_name", &r_t->uni_domain_name,
+			    r_t->ptr_domain_name, ps, depth))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("ptr_domain_guid", ps, depth, &r_t->ptr_domain_guid))
+		return False;
+
+	if (UNMARSHALLING(ps) && (r_t->ptr_domain_guid)) {
+		r_t->domain_guid = PRS_ALLOC_MEM(ps, struct GUID, 1);
+		if (r_t->domain_guid == NULL)
+			return False;
+	}
+
+	if ((r_t->ptr_domain_guid) &&
+	    (!smb_io_uuid("domain_guid", r_t->domain_guid, ps, depth)))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("ptr_site_guid", ps, depth, &r_t->ptr_site_guid))
+		return False;
+
+	if (UNMARSHALLING(ps) && (r_t->ptr_site_guid)) {
+		r_t->site_guid = PRS_ALLOC_MEM(ps, struct GUID, 1);
+		if (r_t->site_guid == NULL)
+			return False;
+	}
+
+	if ((r_t->ptr_site_guid) &&
+	    (!smb_io_uuid("site_guid", r_t->site_guid, ps, depth)))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("flags", ps, depth, &r_t->flags))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an NET_Q_DSR_GETDCNAMEEX structure.
+********************************************************************/
+
+BOOL net_io_q_dsr_getdcnameex(const char *desc, NET_Q_DSR_GETDCNAMEEX *r_t,
+			      prs_struct *ps, int depth)
+{
+	if (r_t == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_q_dsr_getdcnameex");
+	depth++;
+
+	if (!prs_uint32("ptr_server_unc", ps, depth, &r_t->ptr_server_unc))
+		return False;
+
+	if (!smb_io_unistr2("server_unc", &r_t->uni_server_unc,
+			    r_t->ptr_server_unc, ps, depth))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("ptr_domain_name", ps, depth, &r_t->ptr_domain_name))
+		return False;
+
+	if (!smb_io_unistr2("domain_name", &r_t->uni_domain_name,
+			    r_t->ptr_domain_name, ps, depth))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("ptr_domain_guid", ps, depth, &r_t->ptr_domain_guid))
+		return False;
+
+	if (UNMARSHALLING(ps) && (r_t->ptr_domain_guid)) {
+		r_t->domain_guid = PRS_ALLOC_MEM(ps, struct GUID, 1);
+		if (r_t->domain_guid == NULL)
+			return False;
+	}
+
+	if ((r_t->ptr_domain_guid) &&
+	    (!smb_io_uuid("domain_guid", r_t->domain_guid, ps, depth)))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("ptr_site_name", ps, depth, &r_t->ptr_site_name))
+		return False;
+
+	if (!smb_io_unistr2("site_name", &r_t->uni_site_name,
+			    r_t->ptr_site_name, ps, depth))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("flags", ps, depth, &r_t->flags))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an NET_Q_DSR_GETDCNAMEEX2 structure.
+********************************************************************/
+
+BOOL net_io_q_dsr_getdcnameex2(const char *desc, NET_Q_DSR_GETDCNAMEEX2 *r_t,
+			       prs_struct *ps, int depth)
+{
+	if (r_t == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_q_dsr_getdcnameex2");
+	depth++;
+
+	if (!prs_uint32("ptr_server_unc", ps, depth, &r_t->ptr_server_unc))
+		return False;
+
+	if (!smb_io_unistr2("server_unc", &r_t->uni_server_unc,
+			    r_t->ptr_server_unc, ps, depth))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("ptr_client_account", ps, depth, &r_t->ptr_client_account))
+		return False;
+
+	if (!smb_io_unistr2("client_account", &r_t->uni_client_account,
+			    r_t->ptr_client_account, ps, depth))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("mask", ps, depth, &r_t->mask))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("ptr_domain_name", ps, depth, &r_t->ptr_domain_name))
+		return False;
+
+	if (!smb_io_unistr2("domain_name", &r_t->uni_domain_name,
+			    r_t->ptr_domain_name, ps, depth))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("ptr_domain_guid", ps, depth, &r_t->ptr_domain_guid))
+		return False;
+
+	if (UNMARSHALLING(ps) && (r_t->ptr_domain_guid)) {
+		r_t->domain_guid = PRS_ALLOC_MEM(ps, struct GUID, 1);
+		if (r_t->domain_guid == NULL)
+			return False;
+	}
+
+	if ((r_t->ptr_domain_guid) &&
+	    (!smb_io_uuid("domain_guid", r_t->domain_guid, ps, depth)))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("ptr_site_name", ps, depth, &r_t->ptr_site_name))
+		return False;
+
+	if (!smb_io_unistr2("site_name", &r_t->uni_site_name,
+			    r_t->ptr_site_name, ps, depth))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("flags", ps, depth, &r_t->flags))
+		return False;
+
+	return True;
+}
+
+
+
+/*******************************************************************
+ Inits a NET_R_DSR_GETDCNAME structure.
+********************************************************************/
+void init_net_r_dsr_getdcname(NET_R_DSR_GETDCNAME *r_t, const char *dc_unc,
+			      const char *dc_address, int32 dc_address_type,
+			      struct GUID domain_guid, const char *domain_name,
+			      const char *forest_name, uint32 dc_flags,
+			      const char *dc_site_name,
+			      const char *client_site_name)
+{
+	DEBUG(5, ("init_net_q_dsr_getdcname\n"));
+
+	r_t->ptr_dc_unc = (dc_unc != NULL);
+	init_unistr2(&r_t->uni_dc_unc, dc_unc, UNI_STR_TERMINATE);
+
+	r_t->ptr_dc_address = (dc_address != NULL);
+	init_unistr2(&r_t->uni_dc_address, dc_address, UNI_STR_TERMINATE);
+
+	r_t->dc_address_type = dc_address_type;
+	r_t->domain_guid = domain_guid;
+
+	r_t->ptr_domain_name = (domain_name != NULL);
+	init_unistr2(&r_t->uni_domain_name, domain_name, UNI_STR_TERMINATE);
+
+	r_t->ptr_forest_name = (forest_name != NULL);
+	init_unistr2(&r_t->uni_forest_name, forest_name, UNI_STR_TERMINATE);
+
+	r_t->dc_flags = dc_flags;
+
+	r_t->ptr_dc_site_name = (dc_site_name != NULL);
+	init_unistr2(&r_t->uni_dc_site_name, dc_site_name, UNI_STR_TERMINATE);
+
+	r_t->ptr_client_site_name = (client_site_name != NULL);
+	init_unistr2(&r_t->uni_client_site_name, client_site_name,
+		     UNI_STR_TERMINATE);
+}
+
+/*******************************************************************
+ Reads or writes an NET_R_DSR_GETDCNAME structure.
+********************************************************************/
+
+BOOL net_io_r_dsr_getdcname(const char *desc, NET_R_DSR_GETDCNAME *r_t,
+			    prs_struct *ps, int depth)
+{
+	uint32 info_ptr = 1;
+
+	if (r_t == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_r_dsr_getdcname");
+	depth++;
+
+	/* The reply contains *just* an info struct, this is the ptr to it */
+	if (!prs_uint32("info_ptr", ps, depth, &info_ptr))
+		return False;
+
+	if (info_ptr == 0)
+		return False;
+
+	if (!prs_uint32("ptr_dc_unc", ps, depth, &r_t->ptr_dc_unc))
+		return False;
+
+	if (!prs_uint32("ptr_dc_address", ps, depth, &r_t->ptr_dc_address))
+		return False;
+
+	if (!prs_int32("dc_address_type", ps, depth, &r_t->dc_address_type))
+		return False;
+
+	if (!smb_io_uuid("domain_guid", &r_t->domain_guid, ps, depth))
+		return False;
+
+	if (!prs_uint32("ptr_domain_name", ps, depth, &r_t->ptr_domain_name))
+		return False;
+
+	if (!prs_uint32("ptr_forest_name", ps, depth, &r_t->ptr_forest_name))
+		return False;
+
+	if (!prs_uint32("dc_flags", ps, depth, &r_t->dc_flags))
+		return False;
+
+	if (!prs_uint32("ptr_dc_site_name", ps, depth, &r_t->ptr_dc_site_name))
+		return False;
+
+	if (!prs_uint32("ptr_client_site_name", ps, depth,
+			&r_t->ptr_client_site_name))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!smb_io_unistr2("dc_unc", &r_t->uni_dc_unc,
+			    r_t->ptr_dc_unc, ps, depth))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!smb_io_unistr2("dc_address", &r_t->uni_dc_address,
+			    r_t->ptr_dc_address, ps, depth))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!smb_io_unistr2("domain_name", &r_t->uni_domain_name,
+			    r_t->ptr_domain_name, ps, depth))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!smb_io_unistr2("forest_name", &r_t->uni_forest_name,
+			    r_t->ptr_forest_name, ps, depth))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!smb_io_unistr2("dc_site_name", &r_t->uni_dc_site_name,
+			    r_t->ptr_dc_site_name, ps, depth))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!smb_io_unistr2("client_site_name", &r_t->uni_client_site_name,
+			    r_t->ptr_client_site_name, ps, depth))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_werror("result", ps, depth, &r_t->result))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a NET_Q_DSR_GETSITENAME structure.
+********************************************************************/
+
+void init_net_q_dsr_getsitename(NET_Q_DSR_GETSITENAME *r_t, const char *computer_name)
+{
+	DEBUG(5, ("init_net_q_dsr_getsitename\n"));
+
+	r_t->ptr_computer_name = (computer_name != NULL);
+	init_unistr2(&r_t->uni_computer_name, computer_name, UNI_STR_TERMINATE);
+}
+
+/*******************************************************************
+ Reads or writes an NET_Q_DSR_GETSITENAME structure.
+********************************************************************/
+
+BOOL net_io_q_dsr_getsitename(const char *desc, NET_Q_DSR_GETSITENAME *r_t,
+			      prs_struct *ps, int depth)
+{
+	if (r_t == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_q_dsr_getsitename");
+	depth++;
+
+	if (!prs_uint32("ptr_computer_name", ps, depth, &r_t->ptr_computer_name))
+		return False;
+
+	if (!smb_io_unistr2("computer_name", &r_t->uni_computer_name,
+			    r_t->ptr_computer_name, ps, depth))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes an NET_R_DSR_GETSITENAME structure.
+********************************************************************/
+
+BOOL net_io_r_dsr_getsitename(const char *desc, NET_R_DSR_GETSITENAME *r_t,
+			      prs_struct *ps, int depth)
+{
+	if (r_t == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "net_io_r_dsr_getsitename");
+	depth++;
+
+	if (!prs_uint32("ptr_site_name", ps, depth, &r_t->ptr_site_name))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!smb_io_unistr2("site_name", &r_t->uni_site_name,
+			    r_t->ptr_site_name, ps, depth))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_werror("result", ps, depth, &r_t->result))
+		return False;
+
+	return True;
+}
+
+

Modified: branches/samba/upstream/source/rpc_parse/parse_ntsvcs.c
===================================================================
--- branches/samba/upstream/source/rpc_parse/parse_ntsvcs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_parse/parse_ntsvcs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -25,11 +26,101 @@
 /*******************************************************************
 ********************************************************************/
 
-bool ntsvcs_io_q_get_device_list(const char *desc, NTSVCS_Q_GET_DEVICE_LIST *q_u, prs_struct *ps, int depth)
+BOOL ntsvcs_io_q_get_version(const char *desc, NTSVCS_Q_GET_VERSION *q_u, prs_struct *ps, int depth)
 {
 	if (q_u == NULL)
 		return False;
 
+	prs_debug(ps, depth, desc, "ntsvcs_io_q_get_version");
+	depth++;
+
+	/* there is nothing to parse in this PDU */
+
+	return True;
+
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL ntsvcs_io_r_get_version(const char *desc, NTSVCS_R_GET_VERSION *r_u, prs_struct *ps, int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "ntsvcs_io_r_get_version");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+		
+	if(!prs_uint32("version", ps, depth, &r_u->version))
+		return False;
+		
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL ntsvcs_io_q_get_device_list_size(const char *desc, NTSVCS_Q_GET_DEVICE_LIST_SIZE *q_u, prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "ntsvcs_io_q_get_device_list_size");
+	depth++;
+	
+	if(!prs_align(ps))
+		return False;
+
+	if ( !prs_pointer("devicename", ps, depth, (void*)&q_u->devicename, sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2) )
+		return False;
+	if ( !prs_align(ps) )
+		return False;
+		
+	if ( !prs_uint32("flags", ps, depth, &q_u->flags) )
+		return False;
+	
+	return True;
+
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL ntsvcs_io_r_get_device_list_size(const char *desc, NTSVCS_R_GET_DEVICE_LIST_SIZE *r_u, prs_struct *ps, int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "ntsvcs_io_r_get_device_list_size");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+		
+	if(!prs_uint32("size", ps, depth, &r_u->size))
+		return False;
+		
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+********************************************************************/
+
+BOOL ntsvcs_io_q_get_device_list(const char *desc, NTSVCS_Q_GET_DEVICE_LIST *q_u, prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
 	prs_debug(ps, depth, desc, "ntsvcs_io_q_get_device_list");
 	depth++;
 	
@@ -53,7 +144,7 @@
 /*******************************************************************
 ********************************************************************/
 
-bool ntsvcs_io_r_get_device_list(const char *desc, NTSVCS_R_GET_DEVICE_LIST *r_u, prs_struct *ps, int depth)
+BOOL ntsvcs_io_r_get_device_list(const char *desc, NTSVCS_R_GET_DEVICE_LIST *r_u, prs_struct *ps, int depth)
 {
 	if ( !r_u )
 		return False;
@@ -81,11 +172,54 @@
 /*******************************************************************
 ********************************************************************/
 
-bool ntsvcs_io_q_get_device_reg_property(const char *desc, NTSVCS_Q_GET_DEVICE_REG_PROPERTY *q_u, prs_struct *ps, int depth)
+BOOL ntsvcs_io_q_validate_device_instance(const char *desc, NTSVCS_Q_VALIDATE_DEVICE_INSTANCE *q_u, prs_struct *ps, int depth)
 {
 	if (q_u == NULL)
 		return False;
 
+	prs_debug(ps, depth, desc, "ntsvcs_io_q_validate_device_instance");
+	depth++;
+	
+	if(!prs_align(ps))
+		return False;
+
+	if ( !prs_io_unistr2("devicepath", ps, depth, &q_u->devicepath) )
+		return False;
+	if( !prs_align(ps) )
+		return False;
+		
+	if ( !prs_uint32("flags", ps, depth, &q_u->flags) )
+		return False;
+	
+	return True;
+
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL ntsvcs_io_r_validate_device_instance(const char *desc, NTSVCS_R_VALIDATE_DEVICE_INSTANCE *r_u, prs_struct *ps, int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "ntsvcs_io_r_validate_device_instance");
+	depth++;
+
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL ntsvcs_io_q_get_device_reg_property(const char *desc, NTSVCS_Q_GET_DEVICE_REG_PROPERTY *q_u, prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
 	prs_debug(ps, depth, desc, "ntsvcs_io_q_get_device_reg_property");
 	depth++;
 	
@@ -115,7 +249,7 @@
 /*******************************************************************
 ********************************************************************/
 
-bool ntsvcs_io_r_get_device_reg_property(const char *desc, NTSVCS_R_GET_DEVICE_REG_PROPERTY *r_u, prs_struct *ps, int depth)
+BOOL ntsvcs_io_r_get_device_reg_property(const char *desc, NTSVCS_R_GET_DEVICE_REG_PROPERTY *r_u, prs_struct *ps, int depth)
 {
 	if ( !r_u )
 		return False;
@@ -145,3 +279,149 @@
 
 	return True;
 }
+
+/*******************************************************************
+********************************************************************/
+
+BOOL ntsvcs_io_q_get_hw_profile_info(const char *desc, NTSVCS_Q_GET_HW_PROFILE_INFO *q_u, prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "ntsvcs_io_q_get_hw_profile_info");
+	depth++;
+	
+	if(!prs_align(ps))
+		return False;
+
+	if ( !prs_uint32("index", ps, depth, &q_u->index) )
+		return False;
+
+	q_u->buffer_size = 0x000000a8;
+
+	if ( UNMARSHALLING(ps) ) {
+		q_u->buffer = TALLOC_ARRAY(get_talloc_ctx(), uint8, q_u->buffer_size );
+		if (!q_u->buffer) {
+			return False;
+		}
+	}
+
+	if ( !prs_uint8s(True, "buffer", ps, depth, q_u->buffer, q_u->buffer_size) )
+		return False;
+
+	if ( !prs_uint32("buffer_size", ps, depth, &q_u->buffer_size) )
+		return False;
+
+	if ( !prs_uint32("unknown1", ps, depth, &q_u->unknown1) )
+		return False;
+	
+	return True;
+
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL ntsvcs_io_r_get_hw_profile_info(const char *desc, NTSVCS_R_GET_HW_PROFILE_INFO *r_u, prs_struct *ps, int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "ntsvcs_io_r_get_device_reg_property");
+	depth++;
+
+	if ( !prs_align(ps) )
+		return False;
+
+	if ( UNMARSHALLING(ps) ) {
+		if (r_u->buffer_size) {
+			r_u->buffer = TALLOC_ARRAY(get_talloc_ctx(), uint8, r_u->buffer_size );
+			if (!r_u->buffer) {
+				return False;
+			}
+		} else {
+			r_u->buffer = NULL;
+		}
+	}
+
+	if ( !prs_uint8s(True, "buffer", ps, depth, r_u->buffer, r_u->buffer_size) )
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL ntsvcs_io_q_hw_profile_flags(const char *desc, NTSVCS_Q_HW_PROFILE_FLAGS *q_u, prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "ntsvcs_io_q_hw_profile_flags");
+	depth++;
+	
+	if(!prs_align(ps))
+		return False;
+
+	if ( !prs_uint32("unknown1", ps, depth, &q_u->unknown1) )
+		return False;
+		
+
+	if ( !prs_io_unistr2("devicepath", ps, depth, &q_u->devicepath) )
+		return False;
+	if( !prs_align(ps) )
+		return False;
+
+	if ( !prs_uint32("unknown2", ps, depth, &q_u->unknown2) )
+		return False;
+	if ( !prs_uint32("unknown3", ps, depth, &q_u->unknown3) )
+		return False;
+	if ( !prs_uint32("unknown4", ps, depth, &q_u->unknown4) )
+		return False;
+	if ( !prs_uint32("unknown5", ps, depth, &q_u->unknown5) )
+		return False;
+	if ( !prs_uint32("unknown6", ps, depth, &q_u->unknown6) )
+		return False;
+	if ( !prs_uint32("unknown7", ps, depth, &q_u->unknown7) )
+		return False;
+
+	if ( !prs_uint32("unknown1", ps, depth, &q_u->unknown1) )
+		return False;
+	
+	return True;
+
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL ntsvcs_io_r_hw_profile_flags(const char *desc, NTSVCS_R_HW_PROFILE_FLAGS *r_u, prs_struct *ps, int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "ntsvcs_io_r_hw_profile_flags");
+	depth++;
+
+	if ( !prs_align(ps) )
+		return False;
+
+	if ( !prs_uint32("unknown1", ps, depth, &r_u->unknown1) )
+		return False;
+	if ( !prs_uint32("unknown2", ps, depth, &r_u->unknown2) )
+		return False;
+	if ( !prs_uint32("unknown3", ps, depth, &r_u->unknown3) )
+		return False;
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+
+
+

Modified: branches/samba/upstream/source/rpc_parse/parse_prs.c
===================================================================
--- branches/samba/upstream/source/rpc_parse/parse_prs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_parse/parse_prs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -28,7 +29,7 @@
 /**
  * Dump a prs to a file: from the current location through to the end.
  **/
-void prs_dump(const char *name, int v, prs_struct *ps)
+void prs_dump(char *name, int v, prs_struct *ps)
 {
 	prs_dump_region(name, v, ps, ps->data_offset, ps->buffer_size);
 }
@@ -36,7 +37,7 @@
 /**
  * Dump from the start of the prs to the current location.
  **/
-void prs_dump_before(const char *name, int v, prs_struct *ps)
+void prs_dump_before(char *name, int v, prs_struct *ps)
 {
 	prs_dump_region(name, v, ps, 0, ps->data_offset);
 }
@@ -44,22 +45,18 @@
 /**
  * Dump everything from the start of the prs up to the current location.
  **/
-void prs_dump_region(const char *name, int v, prs_struct *ps,
+void prs_dump_region(char *name, int v, prs_struct *ps,
 		     int from_off, int to_off)
 {
 	int fd, i;
-	char *fname = NULL;
+	pstring fname;
 	ssize_t sz;
 	if (DEBUGLEVEL < 50) return;
 	for (i=1;i<100;i++) {
 		if (v != -1) {
-			if (asprintf(&fname,"/tmp/%s_%d.%d.prs", name, v, i) < 0) {
-				return;
-			}
+			slprintf(fname,sizeof(fname)-1, "/tmp/%s_%d.%d.prs", name, v, i);
 		} else {
-			if (asprintf(&fname,"/tmp/%s.%d.prs", name, i) < 0) {
-				return;
-			}
+			slprintf(fname,sizeof(fname)-1, "/tmp/%s.%d.prs", name, i);
 		}
 		fd = open(fname, O_WRONLY|O_CREAT|O_EXCL, 0644);
 		if (fd != -1 || errno != EEXIST) break;
@@ -73,7 +70,6 @@
 			DEBUG(0,("created %s\n", fname));
 		}
 	}
-	SAFE_FREE(fname);
 }
 
 /*******************************************************************
@@ -85,7 +81,7 @@
 
 void prs_debug(prs_struct *ps, int depth, const char *desc, const char *fn_name)
 {
-	DEBUG(5+depth, ("%s%06x %s %s\n", tab_depth(5+depth,depth), ps->data_offset, fn_name, desc));
+	DEBUG(5+depth, ("%s%06x %s %s\n", tab_depth(depth), ps->data_offset, fn_name, desc));
 }
 
 /**
@@ -97,7 +93,7 @@
  * @return False if allocation fails, otherwise True.
  **/
 
-bool prs_init(prs_struct *ps, uint32 size, TALLOC_CTX *ctx, bool io)
+BOOL prs_init(prs_struct *ps, uint32 size, TALLOC_CTX *ctx, BOOL io)
 {
 	ZERO_STRUCTP(ps);
 	ps->io = io;
@@ -127,10 +123,6 @@
 
 /*******************************************************************
  Delete the memory in a parse structure - if we own it.
-
- NOTE: Contrary to the somewhat confusing naming, this function is not
-       intended for freeing memory allocated by prs_alloc_mem().  That memory
-       is attached to the talloc context given by ps->mem_ctx.
  ********************************************************************/
 
 void prs_mem_free(prs_struct *ps)
@@ -166,7 +158,7 @@
 
 	if (size && count) {
 		/* We can't call the type-safe version here. */
-		ret = (char *)_talloc_zero_array(ps->mem_ctx, size, count,
+		ret = (char *)_talloc_zero_array_zeronull(ps->mem_ctx, size, count,
 						 "parse_prs");
 	}
 	return ret;
@@ -185,7 +177,7 @@
  Hand some already allocated memory to a prs_struct.
  ********************************************************************/
 
-void prs_give_memory(prs_struct *ps, char *buf, uint32 size, bool is_dynamic)
+void prs_give_memory(prs_struct *ps, char *buf, uint32 size, BOOL is_dynamic)
 {
 	ps->is_dynamic = is_dynamic;
 	ps->data_p = buf;
@@ -210,7 +202,7 @@
  Set a prs_struct to exactly a given size. Will grow or tuncate if neccessary.
  ********************************************************************/
 
-bool prs_set_buffer_size(prs_struct *ps, uint32 newsize)
+BOOL prs_set_buffer_size(prs_struct *ps, uint32 newsize)
 {
 	if (newsize > ps->buffer_size)
 		return prs_force_grow(ps, newsize - ps->buffer_size);
@@ -241,7 +233,7 @@
  Also depends on the data stream mode (io).
  ********************************************************************/
 
-bool prs_grow(prs_struct *ps, uint32 extra_space)
+BOOL prs_grow(prs_struct *ps, uint32 extra_space)
 {
 	uint32 new_size;
 
@@ -305,7 +297,7 @@
  when reading an rpc reply, before unmarshalling it.
  ********************************************************************/
 
-bool prs_force_grow(prs_struct *ps, uint32 extra_space)
+BOOL prs_force_grow(prs_struct *ps, uint32 extra_space)
 {
 	uint32 new_size = ps->buffer_size + extra_space;
 
@@ -359,7 +351,7 @@
  Set the current offset (external interface).
  ********************************************************************/
 
-bool prs_set_offset(prs_struct *ps, uint32 offset)
+BOOL prs_set_offset(prs_struct *ps, uint32 offset)
 {
 	if(offset <= ps->data_offset) {
 		ps->data_offset = offset;
@@ -377,7 +369,7 @@
  Append the data from one parse_struct into another.
  ********************************************************************/
 
-bool prs_append_prs_data(prs_struct *dst, prs_struct *src)
+BOOL prs_append_prs_data(prs_struct *dst, prs_struct *src)
 {
 	if (prs_offset(src) == 0)
 		return True;
@@ -395,7 +387,7 @@
  Append some data from one parse_struct into another.
  ********************************************************************/
 
-bool prs_append_some_prs_data(prs_struct *dst, prs_struct *src, int32 start, uint32 len)
+BOOL prs_append_some_prs_data(prs_struct *dst, prs_struct *src, int32 start, uint32 len)
 {	
 	if (len == 0)
 		return True;
@@ -413,7 +405,7 @@
  Append the data from a buffer into a parse_struct.
  ********************************************************************/
 
-bool prs_copy_data_in(prs_struct *dst, const char *src, uint32 len)
+BOOL prs_copy_data_in(prs_struct *dst, const char *src, uint32 len)
 {
 	if (len == 0)
 		return True;
@@ -431,7 +423,7 @@
  Copy some data from a parse_struct into a buffer.
  ********************************************************************/
 
-bool prs_copy_data_out(char *dst, prs_struct *src, uint32 len)
+BOOL prs_copy_data_out(char *dst, prs_struct *src, uint32 len)
 {
 	if (len == 0)
 		return True;
@@ -449,7 +441,7 @@
  Copy all the data from a parse_struct into a buffer.
  ********************************************************************/
 
-bool prs_copy_all_data_out(char *dst, prs_struct *src)
+BOOL prs_copy_all_data_out(char *dst, prs_struct *src)
 {
 	uint32 len = prs_offset(src);
 
@@ -464,7 +456,7 @@
  Set the data as X-endian (external interface).
  ********************************************************************/
 
-void prs_set_endian_data(prs_struct *ps, bool endian)
+void prs_set_endian_data(prs_struct *ps, BOOL endian)
 {
 	ps->bigendian_data = endian;
 }
@@ -474,7 +466,7 @@
  zeros.
  ********************************************************************/
 
-bool prs_align(prs_struct *ps)
+BOOL prs_align(prs_struct *ps)
 {
 	uint32 mod = ps->data_offset & (ps->align-1);
 
@@ -493,9 +485,9 @@
  Align on a 2 byte boundary
  *****************************************************************/
  
-bool prs_align_uint16(prs_struct *ps)
+BOOL prs_align_uint16(prs_struct *ps)
 {
-	bool ret;
+	BOOL ret;
 	uint8 old_align = ps->align;
 
 	ps->align = 2;
@@ -509,9 +501,9 @@
  Align on a 8 byte boundary
  *****************************************************************/
  
-bool prs_align_uint64(prs_struct *ps)
+BOOL prs_align_uint64(prs_struct *ps)
 {
-	bool ret;
+	BOOL ret;
 	uint8 old_align = ps->align;
 
 	ps->align = 8;
@@ -525,9 +517,9 @@
  Align on a specific byte boundary
  *****************************************************************/
  
-bool prs_align_custom(prs_struct *ps, uint8 boundary)
+BOOL prs_align_custom(prs_struct *ps, uint8 boundary)
 {
-	bool ret;
+	BOOL ret;
 	uint8 old_align = ps->align;
 
 	ps->align = boundary;
@@ -543,7 +535,7 @@
  Align only if required (for the unistr2 string mainly)
  ********************************************************************/
 
-bool prs_align_needed(prs_struct *ps, uint32 needed)
+BOOL prs_align_needed(prs_struct *ps, uint32 needed)
 {
 	if (needed==0)
 		return True;
@@ -582,7 +574,7 @@
  Change the struct type.
  ********************************************************************/
 
-void prs_switch_type(prs_struct *ps, bool io)
+void prs_switch_type(prs_struct *ps, BOOL io)
 {
 	if ((ps->io ^ io) == True)
 		ps->io=io;
@@ -610,7 +602,7 @@
  Stream a uint8.
  ********************************************************************/
 
-bool prs_uint8(const char *name, prs_struct *ps, int depth, uint8 *data8)
+BOOL prs_uint8(const char *name, prs_struct *ps, int depth, uint8 *data8)
 {
 	char *q = prs_mem_get(ps, 1);
 	if (q == NULL)
@@ -621,7 +613,7 @@
 	else
 		SCVAL(q,0,*data8);
 
-	DEBUG(5,("%s%04x %s: %02x\n", tab_depth(5,depth), ps->data_offset, name, *data8));
+	DEBUG(5,("%s%04x %s: %02x\n", tab_depth(depth), ps->data_offset, name, *data8));
 
 	ps->data_offset += 1;
 
@@ -632,9 +624,9 @@
  Stream a uint16* (allocate memory if unmarshalling)
  ********************************************************************/
 
-bool prs_pointer( const char *name, prs_struct *ps, int depth, 
+BOOL prs_pointer( const char *name, prs_struct *ps, int depth, 
                  void *dta, size_t data_size,
-                 bool (*prs_fn)(const char*, prs_struct*, int, void*) )
+                 BOOL(*prs_fn)(const char*, prs_struct*, int, void*) )
 {
 	void ** data = (void **)dta;
 	uint32 data_p;
@@ -668,7 +660,7 @@
  Stream a uint16.
  ********************************************************************/
 
-bool prs_uint16(const char *name, prs_struct *ps, int depth, uint16 *data16)
+BOOL prs_uint16(const char *name, prs_struct *ps, int depth, uint16 *data16)
 {
 	char *q = prs_mem_get(ps, sizeof(uint16));
 	if (q == NULL)
@@ -686,7 +678,7 @@
 			SSVAL(q,0,*data16);
 	}
 
-	DEBUG(5,("%s%04x %s: %04x\n", tab_depth(5,depth), ps->data_offset, name, *data16));
+	DEBUG(5,("%s%04x %s: %04x\n", tab_depth(depth), ps->data_offset, name, *data16));
 
 	ps->data_offset += sizeof(uint16);
 
@@ -697,7 +689,7 @@
  Stream a uint32.
  ********************************************************************/
 
-bool prs_uint32(const char *name, prs_struct *ps, int depth, uint32 *data32)
+BOOL prs_uint32(const char *name, prs_struct *ps, int depth, uint32 *data32)
 {
 	char *q = prs_mem_get(ps, sizeof(uint32));
 	if (q == NULL)
@@ -715,7 +707,7 @@
 			SIVAL(q,0,*data32);
 	}
 
-	DEBUG(5,("%s%04x %s: %08x\n", tab_depth(5,depth), ps->data_offset, name, *data32));
+	DEBUG(5,("%s%04x %s: %08x\n", tab_depth(depth), ps->data_offset, name, *data32));
 
 	ps->data_offset += sizeof(uint32);
 
@@ -726,7 +718,7 @@
  Stream an int32.
  ********************************************************************/
 
-bool prs_int32(const char *name, prs_struct *ps, int depth, int32 *data32)
+BOOL prs_int32(const char *name, prs_struct *ps, int depth, int32 *data32)
 {
 	char *q = prs_mem_get(ps, sizeof(int32));
 	if (q == NULL)
@@ -744,7 +736,7 @@
 			SIVALS(q,0,*data32);
 	}
 
-	DEBUG(5,("%s%04x %s: %08x\n", tab_depth(5,depth), ps->data_offset, name, *data32));
+	DEBUG(5,("%s%04x %s: %08x\n", tab_depth(depth), ps->data_offset, name, *data32));
 
 	ps->data_offset += sizeof(int32);
 
@@ -755,7 +747,7 @@
  Stream a NTSTATUS
  ********************************************************************/
 
-bool prs_ntstatus(const char *name, prs_struct *ps, int depth, NTSTATUS *status)
+BOOL prs_ntstatus(const char *name, prs_struct *ps, int depth, NTSTATUS *status)
 {
 	char *q = prs_mem_get(ps, sizeof(uint32));
 	if (q == NULL)
@@ -773,7 +765,7 @@
 			SIVAL(q,0,NT_STATUS_V(*status));
 	}
 
-	DEBUG(5,("%s%04x %s: %s\n", tab_depth(5,depth), ps->data_offset, name, 
+	DEBUG(5,("%s%04x %s: %s\n", tab_depth(depth), ps->data_offset, name, 
 		 nt_errstr(*status)));
 
 	ps->data_offset += sizeof(uint32);
@@ -785,7 +777,7 @@
  Stream a DCE error code
  ********************************************************************/
 
-bool prs_dcerpc_status(const char *name, prs_struct *ps, int depth, NTSTATUS *status)
+BOOL prs_dcerpc_status(const char *name, prs_struct *ps, int depth, NTSTATUS *status)
 {
 	char *q = prs_mem_get(ps, sizeof(uint32));
 	if (q == NULL)
@@ -803,7 +795,7 @@
 			SIVAL(q,0,NT_STATUS_V(*status));
 	}
 
-	DEBUG(5,("%s%04x %s: %s\n", tab_depth(5,depth), ps->data_offset, name, 
+	DEBUG(5,("%s%04x %s: %s\n", tab_depth(depth), ps->data_offset, name, 
 		 dcerpc_errstr(NT_STATUS_V(*status))));
 
 	ps->data_offset += sizeof(uint32);
@@ -816,7 +808,7 @@
  Stream a WERROR
  ********************************************************************/
 
-bool prs_werror(const char *name, prs_struct *ps, int depth, WERROR *status)
+BOOL prs_werror(const char *name, prs_struct *ps, int depth, WERROR *status)
 {
 	char *q = prs_mem_get(ps, sizeof(uint32));
 	if (q == NULL)
@@ -834,7 +826,7 @@
 			SIVAL(q,0,W_ERROR_V(*status));
 	}
 
-	DEBUG(5,("%s%04x %s: %s\n", tab_depth(5,depth), ps->data_offset, name, 
+	DEBUG(5,("%s%04x %s: %s\n", tab_depth(depth), ps->data_offset, name, 
 		 dos_errstr(*status)));
 
 	ps->data_offset += sizeof(uint32);
@@ -847,7 +839,7 @@
  Stream an array of uint8s. Length is number of uint8s.
  ********************************************************************/
 
-bool prs_uint8s(bool charmode, const char *name, prs_struct *ps, int depth, uint8 *data8s, int len)
+BOOL prs_uint8s(BOOL charmode, const char *name, prs_struct *ps, int depth, uint8 *data8s, int len)
 {
 	int i;
 	char *q = prs_mem_get(ps, len);
@@ -862,7 +854,7 @@
 			SCVAL(q, i, data8s[i]);
 	}
 
-	DEBUG(5,("%s%04x %s: ", tab_depth(5,depth), ps->data_offset ,name));
+	DEBUG(5,("%s%04x %s: ", tab_depth(depth), ps->data_offset ,name));
 	if (charmode)
 		print_asc(5, (unsigned char*)data8s, len);
 	else {
@@ -880,7 +872,7 @@
  Stream an array of uint16s. Length is number of uint16s.
  ********************************************************************/
 
-bool prs_uint16s(bool charmode, const char *name, prs_struct *ps, int depth, uint16 *data16s, int len)
+BOOL prs_uint16s(BOOL charmode, const char *name, prs_struct *ps, int depth, uint16 *data16s, int len)
 {
 	int i;
 	char *q = prs_mem_get(ps, len * sizeof(uint16));
@@ -905,7 +897,7 @@
 		}
 	}
 
-	DEBUG(5,("%s%04x %s: ", tab_depth(5,depth), ps->data_offset, name));
+	DEBUG(5,("%s%04x %s: ", tab_depth(depth), ps->data_offset, name));
 	if (charmode)
 		print_asc(5, (unsigned char*)data16s, 2*len);
 	else {
@@ -924,7 +916,7 @@
  output must be little-endian, if marshalling, input must be little-endian.
  ********************************************************************/
 
-static void dbg_rw_punival(bool charmode, const char *name, int depth, prs_struct *ps,
+static void dbg_rw_punival(BOOL charmode, const char *name, int depth, prs_struct *ps,
 							char *in_buf, char *out_buf, int len)
 {
 	int i;
@@ -947,7 +939,7 @@
 		}
 	}
 
-	DEBUG(5,("%s%04x %s: ", tab_depth(5,depth), ps->data_offset, name));
+	DEBUG(5,("%s%04x %s: ", tab_depth(depth), ps->data_offset, name));
 	if (charmode)
 		print_asc(5, (unsigned char*)out_buf, 2*len);
 	else {
@@ -961,7 +953,7 @@
  Stream a unistr. Always little endian.
  ********************************************************************/
 
-bool prs_uint16uni(bool charmode, const char *name, prs_struct *ps, int depth, uint16 *data16s, int len)
+BOOL prs_uint16uni(BOOL charmode, const char *name, prs_struct *ps, int depth, uint16 *data16s, int len)
 {
 	char *q = prs_mem_get(ps, len * sizeof(uint16));
 	if (q == NULL)
@@ -977,7 +969,7 @@
  Stream an array of uint32s. Length is number of uint32s.
  ********************************************************************/
 
-bool prs_uint32s(bool charmode, const char *name, prs_struct *ps, int depth, uint32 *data32s, int len)
+BOOL prs_uint32s(BOOL charmode, const char *name, prs_struct *ps, int depth, uint32 *data32s, int len)
 {
 	int i;
 	char *q = prs_mem_get(ps, len * sizeof(uint32));
@@ -1002,7 +994,7 @@
 		}
 	}
 
-	DEBUG(5,("%s%04x %s: ", tab_depth(5,depth), ps->data_offset, name));
+	DEBUG(5,("%s%04x %s: ", tab_depth(depth), ps->data_offset, name));
 	if (charmode)
 		print_asc(5, (unsigned char*)data32s, 4*len);
 	else {
@@ -1021,7 +1013,7 @@
  in uint16 chars. The unicode string is already in little-endian format.
  ********************************************************************/
 
-bool prs_buffer5(bool charmode, const char *name, prs_struct *ps, int depth, BUFFER5 *str)
+BOOL prs_buffer5(BOOL charmode, const char *name, prs_struct *ps, int depth, BUFFER5 *str)
 {
 	char *p;
 	char *q = prs_mem_get(ps, str->buf_len * sizeof(uint16));
@@ -1052,7 +1044,7 @@
  in byte chars. String is in little-endian format.
  ********************************************************************/
 
-bool prs_regval_buffer(bool charmode, const char *name, prs_struct *ps, int depth, REGVAL_BUFFER *buf)
+BOOL prs_regval_buffer(BOOL charmode, const char *name, prs_struct *ps, int depth, REGVAL_BUFFER *buf)
 {
 	char *p;
 	char *q = prs_mem_get(ps, buf->buf_len);
@@ -1085,7 +1077,7 @@
  in uint8 chars.
  ********************************************************************/
 
-bool prs_string2(bool charmode, const char *name, prs_struct *ps, int depth, STRING2 *str)
+BOOL prs_string2(BOOL charmode, const char *name, prs_struct *ps, int depth, STRING2 *str)
 {
 	unsigned int i;
 	char *q = prs_mem_get(ps, str->str_str_len);
@@ -1103,7 +1095,7 @@
 		} else {
 			str->buffer = NULL;
 			/* Return early to ensure Coverity isn't confused. */
-			DEBUG(5,("%s%04x %s: \n", tab_depth(5,depth), ps->data_offset, name));
+			DEBUG(5,("%s%04x %s: \n", tab_depth(depth), ps->data_offset, name));
 			return True;
 		}
 	}
@@ -1116,7 +1108,7 @@
 			SCVAL(q, i, str->buffer[i]);
 	}
 
-	DEBUG(5,("%s%04x %s: ", tab_depth(5,depth), ps->data_offset, name));
+	DEBUG(5,("%s%04x %s: ", tab_depth(depth), ps->data_offset, name));
 	if (charmode)
 		print_asc(5, (unsigned char*)str->buffer, str->str_str_len);
 	else {
@@ -1135,7 +1127,7 @@
  in uint16 chars. The unicode string is already in little-endian format.
  ********************************************************************/
 
-bool prs_unistr2(bool charmode, const char *name, prs_struct *ps, int depth, UNISTR2 *str)
+BOOL prs_unistr2(BOOL charmode, const char *name, prs_struct *ps, int depth, UNISTR2 *str)
 {
 	char *p;
 	char *q = prs_mem_get(ps, str->uni_str_len * sizeof(uint16));
@@ -1173,7 +1165,7 @@
  in uint16 chars. The unicode string is already in little-endian format.
  ********************************************************************/
 
-bool prs_unistr3(bool charmode, const char *name, UNISTR3 *str, prs_struct *ps, int depth)
+BOOL prs_unistr3(BOOL charmode, const char *name, UNISTR3 *str, prs_struct *ps, int depth)
 {
 	char *p;
 	char *q = prs_mem_get(ps, str->uni_str_len * sizeof(uint16));
@@ -1203,7 +1195,7 @@
  in little-endian format then do it as a stream of bytes.
  ********************************************************************/
 
-bool prs_unistr(const char *name, prs_struct *ps, int depth, UNISTR *str)
+BOOL prs_unistr(const char *name, prs_struct *ps, int depth, UNISTR *str)
 {
 	unsigned int len = 0;
 	unsigned char *p = (unsigned char *)str->buffer;
@@ -1252,7 +1244,7 @@
 
 		len++;
 
-		DEBUG(5,("%s%04x %s: ", tab_depth(5,depth), ps->data_offset, name));
+		DEBUG(5,("%s%04x %s: ", tab_depth(depth), ps->data_offset, name));
 		print_asc(5, (unsigned char*)start, 2*len);	
 		DEBUG(5, ("\n"));
 	}
@@ -1309,7 +1301,7 @@
 			str->buffer[len++] = '\0';
 		}
 
-		DEBUG(5,("%s%04x %s: ", tab_depth(5,depth), ps->data_offset, name));
+		DEBUG(5,("%s%04x %s: ", tab_depth(depth), ps->data_offset, name));
 		print_asc(5, (unsigned char*)str->buffer, 2*len);	
 		DEBUG(5, ("\n"));
 	}
@@ -1328,7 +1320,7 @@
  not include the null-termination character.
  ********************************************************************/
 
-bool prs_string(const char *name, prs_struct *ps, int depth, char *str, int max_buf_size)
+BOOL prs_string(const char *name, prs_struct *ps, int depth, char *str, int max_buf_size)
 {
 	char *q;
 	int i;
@@ -1361,12 +1353,12 @@
 
 	ps->data_offset += len+1;
 
-	dump_data(5+depth, (uint8 *)q, len);
+	dump_data(5+depth, q, len);
 
 	return True;
 }
 
-bool prs_string_alloc(const char *name, prs_struct *ps, int depth, const char **str)
+BOOL prs_string_alloc(const char *name, prs_struct *ps, int depth, const char **str)
 {
 	size_t len;
 	char *tmp_str;
@@ -1400,7 +1392,7 @@
  uint16 should be stored, or gets the size if reading.
  ********************************************************************/
 
-bool prs_uint16_pre(const char *name, prs_struct *ps, int depth, uint16 *data16, uint32 *offset)
+BOOL prs_uint16_pre(const char *name, prs_struct *ps, int depth, uint16 *data16, uint32 *offset)
 {
 	*offset = ps->data_offset;
 	if (UNMARSHALLING(ps)) {
@@ -1420,7 +1412,7 @@
  does nothing on reading, as that is already handled by ...._pre()
  ********************************************************************/
 
-bool prs_uint16_post(const char *name, prs_struct *ps, int depth, uint16 *data16,
+BOOL prs_uint16_post(const char *name, prs_struct *ps, int depth, uint16 *data16,
 				uint32 ptr_uint16, uint32 start_offset)
 {
 	if (MARSHALLING(ps)) {
@@ -1447,7 +1439,7 @@
  uint32 should be stored, or gets the size if reading.
  ********************************************************************/
 
-bool prs_uint32_pre(const char *name, prs_struct *ps, int depth, uint32 *data32, uint32 *offset)
+BOOL prs_uint32_pre(const char *name, prs_struct *ps, int depth, uint32 *data32, uint32 *offset)
 {
 	*offset = ps->data_offset;
 	if (UNMARSHALLING(ps) && (data32 != NULL)) {
@@ -1464,7 +1456,7 @@
  does nothing on reading, as that is already handled by ...._pre()
  ********************************************************************/
 
-bool prs_uint32_post(const char *name, prs_struct *ps, int depth, uint32 *data32,
+BOOL prs_uint32_post(const char *name, prs_struct *ps, int depth, uint32 *data32,
 				uint32 ptr_uint32, uint32 data_size)
 {
 	if (MARSHALLING(ps)) {
@@ -1483,26 +1475,30 @@
 }
 
 /* useful function to store a structure in rpc wire format */
-int tdb_prs_store(TDB_CONTEXT *tdb, TDB_DATA kbuf, prs_struct *ps)
+int tdb_prs_store(TDB_CONTEXT *tdb, char *keystr, prs_struct *ps)
 {
-	TDB_DATA dbuf;
-	dbuf.dptr = (uint8 *)ps->data_p;
+	TDB_DATA kbuf, dbuf;
+	kbuf.dptr = keystr;
+	kbuf.dsize = strlen(keystr)+1;
+	dbuf.dptr = ps->data_p;
 	dbuf.dsize = prs_offset(ps);
 	return tdb_trans_store(tdb, kbuf, dbuf, TDB_REPLACE);
 }
 
 /* useful function to fetch a structure into rpc wire format */
-int tdb_prs_fetch(TDB_CONTEXT *tdb, TDB_DATA kbuf, prs_struct *ps, TALLOC_CTX *mem_ctx)
+int tdb_prs_fetch(TDB_CONTEXT *tdb, char *keystr, prs_struct *ps, TALLOC_CTX *mem_ctx)
 {
-	TDB_DATA dbuf;
+	TDB_DATA kbuf, dbuf;
+	kbuf.dptr = keystr;
+	kbuf.dsize = strlen(keystr)+1;
 
-	prs_init_empty(ps, mem_ctx, UNMARSHALL);
+	prs_init(ps, 0, mem_ctx, UNMARSHALL);
 
 	dbuf = tdb_fetch(tdb, kbuf);
 	if (!dbuf.dptr)
 		return -1;
 
-	prs_give_memory(ps, (char *)dbuf.dptr, dbuf.dsize, True);
+	prs_give_memory(ps, dbuf.dptr, dbuf.dsize, True);
 
 	return 0;
 }
@@ -1511,7 +1507,7 @@
  hash a stream.
  ********************************************************************/
 
-bool prs_hash1(prs_struct *ps, uint32 offset, int len)
+BOOL prs_hash1(prs_struct *ps, uint32 offset, int len)
 {
 	char *q;
 
@@ -1520,13 +1516,13 @@
 
 #ifdef DEBUG_PASSWORD
 	DEBUG(100, ("prs_hash1\n"));
-	dump_data(100, (uint8 *)ps->sess_key, 16);
-	dump_data(100, (uint8 *)q, len);
+	dump_data(100, ps->sess_key, 16);
+	dump_data(100, q, len);
 #endif
 	SamOEMhash((uchar *) q, (const unsigned char *)ps->sess_key, len);
 
 #ifdef DEBUG_PASSWORD
-	dump_data(100, (uint8 *)q, len);
+	dump_data(100, q, len);
 #endif
 
 	return True;
@@ -1544,11 +1540,9 @@
 			  uchar digest_final[16]) 
 {
 	uchar whole_packet_digest[16];
-	uchar zeros[4];
+	static uchar zeros[4];
 	struct MD5Context ctx3;
-
-	ZERO_STRUCT(zeros);
-
+	
 	/* verfiy the signature on the packet by MD5 over various bits */
 	MD5Init(&ctx3);
 	/* use our sequence number, which ensures the packet is not
@@ -1575,13 +1569,11 @@
 				   RPC_AUTH_SCHANNEL_CHK *verf,
 				   uchar sealing_key[16]) 
 {
-	uchar zeros[4];
+	static uchar zeros[4];
 	uchar digest2[16];
 	uchar sess_kf0[16];
 	int i;
 
-	ZERO_STRUCT(zeros);
-
 	for (i = 0; i < sizeof(sess_kf0); i++) {
 		sess_kf0[i] = a->sess_key[i] ^ 0xf0;
 	}
@@ -1604,12 +1596,10 @@
 static void schannel_deal_with_seq_num(struct schannel_auth_struct *a,
 				     RPC_AUTH_SCHANNEL_CHK *verf)
 {
-	uchar zeros[4];
+	static uchar zeros[4];
 	uchar sequence_key[16];
 	uchar digest1[16];
 
-	ZERO_STRUCT(zeros);
-
 	hmac_md5(a->sess_key, zeros, sizeof(zeros), digest1);
 	dump_data_pw("(sequence key) digest1:\n", digest1, sizeof(digest1));
 
@@ -1626,7 +1616,7 @@
 creates an RPC_AUTH_SCHANNEL_CHK structure.
 ********************************************************************/
 
-static bool init_rpc_auth_schannel_chk(RPC_AUTH_SCHANNEL_CHK * chk,
+static BOOL init_rpc_auth_schannel_chk(RPC_AUTH_SCHANNEL_CHK * chk,
 			      const uchar sig[8],
 			      const uchar packet_digest[8],
 			      const uchar seq_num[8], const uchar confounder[8])
@@ -1728,7 +1718,7 @@
  as well as decode sealed messages
  ********************************************************************/
 
-bool schannel_decode(struct schannel_auth_struct *a, enum pipe_auth_level auth_level,
+BOOL schannel_decode(struct schannel_auth_struct *a, enum pipe_auth_level auth_level,
 		   enum schannel_direction direction, 
 		   RPC_AUTH_SCHANNEL_CHK * verf, char *data, size_t data_len)
 {
@@ -1777,9 +1767,9 @@
 		   checksum after the decode, below
 		*/
 		DEBUG(2, ("schannel_decode: FAILED: packet sequence number:\n"));
-		dump_data(2, verf->seq_num, sizeof(verf->seq_num));
+		dump_data(2, (const char*)verf->seq_num, sizeof(verf->seq_num));
 		DEBUG(2, ("should be:\n"));
-		dump_data(2, seq_num, sizeof(seq_num));
+		dump_data(2, (const char*)seq_num, sizeof(seq_num));
 
 		return False;
 	}
@@ -1787,9 +1777,9 @@
 	if (memcmp(verf->sig, schannel_sig, sizeof(verf->sig))) {
 		/* Validate that the other end sent the expected header */
 		DEBUG(2, ("schannel_decode: FAILED: packet header:\n"));
-		dump_data(2, verf->sig, sizeof(verf->sig));
+		dump_data(2, (const char*)verf->sig, sizeof(verf->sig));
 		DEBUG(2, ("should be:\n"));
-		dump_data(2, schannel_sig, sizeof(schannel_sig));
+		dump_data(2, (const char*)schannel_sig, sizeof(schannel_sig));
 		return False;
 	}
 
@@ -1830,7 +1820,7 @@
 /*******************************************************************
 creates a new prs_struct containing a DATA_BLOB
 ********************************************************************/
-bool prs_init_data_blob(prs_struct *prs, DATA_BLOB *blob, TALLOC_CTX *mem_ctx)
+BOOL prs_init_data_blob(prs_struct *prs, DATA_BLOB *blob, TALLOC_CTX *mem_ctx)
 {
 	if (!prs_init( prs, RPC_MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL ))
 		return False;
@@ -1845,7 +1835,7 @@
 /*******************************************************************
 return the contents of a prs_struct in a DATA_BLOB
 ********************************************************************/
-bool prs_data_blob(prs_struct *prs, DATA_BLOB *blob, TALLOC_CTX *mem_ctx)
+BOOL prs_data_blob(prs_struct *prs, DATA_BLOB *blob, TALLOC_CTX *mem_ctx)
 {
 	blob->length = prs_data_size(prs);
 	blob->data = (uint8 *)TALLOC_ZERO_SIZE(mem_ctx, blob->length);

Copied: branches/samba/upstream/source/rpc_parse/parse_reg.c (from rev 1928, branches/samba/upstream/source/rpc_parse/parse_reg.c)
===================================================================
--- branches/samba/upstream/source/rpc_parse/parse_reg.c	                        (rev 0)
+++ branches/samba/upstream/source/rpc_parse/parse_reg.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,1789 @@
+/*
+ *  Unix SMB/CIFS implementation.
+ *  RPC Pipe client / server routines
+ *  Copyright (C) Andrew Tridgell              1992-1997,
+ *  Copyright (C) Luke Kenneth Casson Leighton 1996-1997,
+ *  Copyright (C) Paul Ashton                       1997.
+ *  Copyright (C) Marc Jacobsen                     1999.
+ *  Copyright (C) Simo Sorce                        2000.
+ *  Copyright (C) Jeremy Cooper                     2004
+ *  Copyright (C) Gerald Carter                     2002-2005.
+ *  
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_RPC_PARSE
+
+/*******************************************************************
+ Fill in a REGVAL_BUFFER for the data given a REGISTRY_VALUE
+ *******************************************************************/
+
+uint32 reg_init_regval_buffer( REGVAL_BUFFER *buf2, REGISTRY_VALUE *val )
+{
+	uint32		real_size = 0;
+	
+	if ( !buf2 || !val )
+		return 0;
+		
+	real_size = regval_size(val);
+	init_regval_buffer( buf2, (unsigned char*)regval_data_p(val), real_size );
+
+	return real_size;
+}
+
+/*******************************************************************
+ Inits a hive connect request structure
+********************************************************************/
+
+void init_reg_q_open_hive( REG_Q_OPEN_HIVE *q_o, uint32 access_desired )
+{
+	
+	q_o->server = TALLOC_P( get_talloc_ctx(), uint16);
+	if (!q_o->server) {
+		smb_panic("init_reg_q_open_hive: talloc fail.\n");
+		return;
+	}
+	*q_o->server = 0x1;
+	
+	q_o->access = access_desired;
+}
+
+/*******************************************************************
+Marshalls a hive connect request
+********************************************************************/
+
+BOOL reg_io_q_open_hive(const char *desc, REG_Q_OPEN_HIVE *q_u,
+                        prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "reg_io_q_open_hive");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_pointer("server", ps, depth, (void**)&q_u->server, sizeof(uint16), (PRS_POINTER_CAST)prs_uint16))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("access", ps, depth, &q_u->access))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+Unmarshalls a hive connect response
+********************************************************************/
+
+BOOL reg_io_r_open_hive(const char *desc,  REG_R_OPEN_HIVE *r_u,
+                        prs_struct *ps, int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_r_open_hive");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!smb_io_pol_hnd("", &r_u->pol, ps, depth))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a structure.
+********************************************************************/
+
+void init_reg_q_flush_key(REG_Q_FLUSH_KEY *q_u, POLICY_HND *pol)
+{
+	memcpy(&q_u->pol, pol, sizeof(q_u->pol));
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_q_flush_key(const char *desc,  REG_Q_FLUSH_KEY *q_u, prs_struct *ps, int depth)
+{
+	if ( !q_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_q_flush_key");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!smb_io_pol_hnd("", &q_u->pol, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+Unmarshalls a registry key flush response
+********************************************************************/
+
+BOOL reg_io_r_flush_key(const char *desc,  REG_R_FLUSH_KEY *r_u,
+                        prs_struct *ps, int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_r_flush_key");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes SEC_DESC_BUF and SEC_DATA structures.
+********************************************************************/
+
+static BOOL reg_io_hdrbuf_sec(uint32 ptr, uint32 *ptr3, BUFHDR *hdr_sec,
+                              SEC_DESC_BUF *data, prs_struct *ps, int depth)
+{
+	if (ptr != 0) {
+		uint32 hdr_offset;
+		uint32 old_offset;
+		if(!smb_io_hdrbuf_pre("hdr_sec", hdr_sec, ps, depth,
+		                      &hdr_offset))
+			return False;
+
+		old_offset = prs_offset(ps);
+
+		if (ptr3 != NULL) {
+			if(!prs_uint32("ptr3", ps, depth, ptr3))
+				return False;
+		}
+
+		if (ptr3 == NULL || *ptr3 != 0) {
+ 			/* JRA - this next line is probably wrong... */
+			if(!sec_io_desc_buf("data   ", &data, ps, depth))
+				return False;
+		}
+
+		if(!smb_io_hdrbuf_post("hdr_sec", hdr_sec, ps, depth,
+		                       hdr_offset, data->max_len, data->len))
+				return False;
+		if(!prs_set_offset(ps, old_offset + data->len +
+		                       sizeof(uint32) * ((ptr3 != NULL) ? 5 : 3)))
+			return False;
+
+		if(!prs_align(ps))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a registry key create request
+********************************************************************/
+
+void init_reg_q_create_key_ex(REG_Q_CREATE_KEY_EX *q_c, POLICY_HND *hnd,
+                           char *name, char *key_class, uint32 access_desired,
+                           SEC_DESC_BUF *sec_buf)
+{
+	ZERO_STRUCTP(q_c);
+
+	memcpy(&q_c->handle, hnd, sizeof(q_c->handle));
+
+
+	init_unistr4( &q_c->name, name, UNI_STR_TERMINATE );
+	init_unistr4( &q_c->key_class, key_class, UNI_STR_TERMINATE );
+
+	q_c->access = access_desired;
+
+	q_c->sec_info = TALLOC_P( get_talloc_ctx(), uint32 );
+	if (!q_c->sec_info) {
+		smb_panic("init_reg_q_create_key_ex: talloc fail\n");
+		return;
+	}
+	*q_c->sec_info = DACL_SECURITY_INFORMATION | SACL_SECURITY_INFORMATION;
+
+	q_c->data = sec_buf;
+	q_c->ptr2 = 1;
+	init_buf_hdr(&q_c->hdr_sec, sec_buf->len, sec_buf->len);
+	q_c->ptr3 = 1;
+	q_c->disposition = TALLOC_P( get_talloc_ctx(), uint32 );
+	if (!q_c->disposition) {
+		smb_panic("init_reg_q_create_key_ex: talloc fail\n");
+		return;
+	}
+}
+
+/*******************************************************************
+Marshalls a registry key create request
+********************************************************************/
+
+BOOL reg_io_q_create_key_ex(const char *desc,  REG_Q_CREATE_KEY_EX *q_u,
+                         prs_struct *ps, int depth)
+{
+	if ( !q_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_q_create_key_ex");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!smb_io_pol_hnd("", &q_u->handle, ps, depth))
+		return False;
+
+	if(!prs_unistr4 ("name", ps, depth, &q_u->name))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_unistr4 ("key_class", ps, depth, &q_u->key_class))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("options", ps, depth, &q_u->options))
+		return False;
+	if(!prs_uint32("access", ps, depth, &q_u->access))
+		return False;
+
+	if(!prs_pointer("sec_info", ps, depth, (void**)&q_u->sec_info, sizeof(uint32), (PRS_POINTER_CAST)prs_uint32))
+		return False;
+
+	if ( q_u->sec_info ) {
+		if(!prs_uint32("ptr2", ps, depth, &q_u->ptr2))
+			return False;
+		if(!reg_io_hdrbuf_sec(q_u->ptr2, &q_u->ptr3, &q_u->hdr_sec, q_u->data, ps, depth))
+			return False;
+	}
+
+	if(!prs_pointer("disposition", ps, depth, (void**)&q_u->disposition, sizeof(uint32), (PRS_POINTER_CAST)prs_uint32))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+Unmarshalls a registry key create response
+********************************************************************/
+
+BOOL reg_io_r_create_key_ex(const char *desc,  REG_R_CREATE_KEY_EX *r_u,
+                         prs_struct *ps, int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_r_create_key_ex");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!smb_io_pol_hnd("", &r_u->handle, ps, depth))
+		return False;
+	if(!prs_uint32("disposition", ps, depth, &r_u->disposition))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+ Inits a structure.
+********************************************************************/
+
+void init_reg_q_delete_val(REG_Q_DELETE_VALUE *q_c, POLICY_HND *hnd,
+                           char *name)
+{
+	ZERO_STRUCTP(q_c);
+
+	memcpy(&q_c->handle, hnd, sizeof(q_c->handle));
+	init_unistr4(&q_c->name, name, UNI_STR_TERMINATE);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_q_delete_value(const char *desc, REG_Q_DELETE_VALUE *q_u,
+                         prs_struct *ps, int depth)
+{
+	if ( !q_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_q_delete_value");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!smb_io_pol_hnd("", &q_u->handle, ps, depth))
+		return False;
+
+	if(!prs_unistr4("name", ps, depth, &q_u->name))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_r_delete_value(const char *desc,  REG_R_DELETE_VALUE *r_u,
+                         prs_struct *ps, int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_r_delete_value");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a structure.
+********************************************************************/
+
+void init_reg_q_delete_key(REG_Q_DELETE_KEY *q_c, POLICY_HND *hnd,
+                           char *name)
+{
+	ZERO_STRUCTP(q_c);
+
+	memcpy(&q_c->handle, hnd, sizeof(q_c->handle));
+
+	init_unistr4(&q_c->name, name, UNI_STR_TERMINATE);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_q_delete_key(const char *desc,  REG_Q_DELETE_KEY *q_u,
+                         prs_struct *ps, int depth)
+{
+	if ( !q_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_q_delete_key");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!smb_io_pol_hnd("", &q_u->handle, ps, depth))
+		return False;
+
+	if(!prs_unistr4("", ps, depth, &q_u->name))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_r_delete_key(const char *desc,  REG_R_DELETE_KEY *r_u, prs_struct *ps, int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_r_delete_key");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a structure.
+********************************************************************/
+
+void init_reg_q_query_key(REG_Q_QUERY_KEY *q_o, POLICY_HND *hnd, const char *key_class)
+{
+	ZERO_STRUCTP(q_o);
+
+	memcpy(&q_o->pol, hnd, sizeof(q_o->pol));
+	init_unistr4(&q_o->key_class, key_class, UNI_STR_TERMINATE);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_q_query_key(const char *desc,  REG_Q_QUERY_KEY *q_u, prs_struct *ps, int depth)
+{
+	if ( !q_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_q_query_key");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!smb_io_pol_hnd("", &q_u->pol, ps, depth))
+		return False;
+	if(!prs_unistr4("key_class", ps, depth, &q_u->key_class))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_r_query_key(const char *desc,  REG_R_QUERY_KEY *r_u, prs_struct *ps, int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_r_query_key");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_unistr4("key_class", ps, depth, &r_u->key_class))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("num_subkeys   ", ps, depth, &r_u->num_subkeys))
+		return False;
+	if(!prs_uint32("max_subkeylen ", ps, depth, &r_u->max_subkeylen))
+		return False;
+	if(!prs_uint32("reserved      ", ps, depth, &r_u->reserved))
+		return False;
+	if(!prs_uint32("num_values    ", ps, depth, &r_u->num_values))
+		return False;
+	if(!prs_uint32("max_valnamelen", ps, depth, &r_u->max_valnamelen))
+		return False;
+	if(!prs_uint32("max_valbufsize", ps, depth, &r_u->max_valbufsize))
+		return False;
+	if(!prs_uint32("sec_desc      ", ps, depth, &r_u->sec_desc))
+		return False;
+	if(!smb_io_time("mod_time     ", &r_u->mod_time, ps, depth))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a structure.
+********************************************************************/
+
+void init_reg_q_getversion(REG_Q_GETVERSION *q_o, POLICY_HND *hnd)
+{
+	memcpy(&q_o->pol, hnd, sizeof(q_o->pol));
+}
+
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_q_getversion(const char *desc,  REG_Q_GETVERSION *q_u, prs_struct *ps, int depth)
+{
+	if ( !q_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_q_getversion");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("", &q_u->pol, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_r_getversion(const char *desc,  REG_R_GETVERSION *r_u, prs_struct *ps, int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_r_getversion");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("win_version", ps, depth, &r_u->win_version))
+		return False;
+	if(!prs_werror("status" , ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_q_restore_key(const char *desc,  REG_Q_RESTORE_KEY *q_u, prs_struct *ps, int depth)
+{
+	if ( !q_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_q_restore_key");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("", &q_u->pol, ps, depth))
+		return False;
+
+	if(!prs_unistr4("filename", ps, depth, &q_u->filename))
+		return False;
+
+	if(!prs_uint32("flags", ps, depth, &q_u->flags))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_r_restore_key(const char *desc,  REG_R_RESTORE_KEY *r_u, prs_struct *ps, int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_r_restore_key");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_werror("status" , ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+void init_q_reg_save_key( REG_Q_SAVE_KEY *q_u, POLICY_HND *handle, const char *fname )
+{
+	memcpy(&q_u->pol, handle, sizeof(q_u->pol));
+	init_unistr4( &q_u->filename, fname, UNI_STR_TERMINATE );
+	q_u->sec_attr = NULL;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_q_save_key(const char *desc,  REG_Q_SAVE_KEY *q_u, prs_struct *ps, int depth)
+{
+	if ( !q_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_q_save_key");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("", &q_u->pol, ps, depth))
+		return False;
+
+	if(!prs_unistr4("filename", ps, depth, &q_u->filename))
+		return False;
+
+#if 0	/* reg_io_sec_attr() */
+	if(!prs_uint32("unknown", ps, depth, &q_u->unknown))
+		return False;
+#endif
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_r_save_key(const char *desc,  REG_R_SAVE_KEY *r_u, prs_struct *ps, int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_r_save_key");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_werror("status" , ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits an REG_Q_CLOSE structure.
+********************************************************************/
+
+void init_reg_q_close(REG_Q_CLOSE *q_c, POLICY_HND *hnd)
+{
+	DEBUG(5,("init_reg_q_close\n"));
+
+	memcpy(&q_c->pol, hnd, sizeof(q_c->pol));
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_q_close(const char *desc,  REG_Q_CLOSE *q_u, prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_q_close");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("", &q_u->pol, ps, depth))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_r_close(const char *desc,  REG_R_CLOSE *r_u, prs_struct *ps, int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_r_close");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("", &r_u->pol, ps, depth))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+makes a structure.
+********************************************************************/
+
+void init_reg_q_set_key_sec(REG_Q_SET_KEY_SEC *q_u, POLICY_HND *pol,
+                            uint32 sec_info, SEC_DESC_BUF *sec_desc_buf)
+{
+	memcpy(&q_u->handle, pol, sizeof(q_u->handle));
+
+	q_u->sec_info = sec_info;
+
+	q_u->ptr = 1;
+	init_buf_hdr(&q_u->hdr_sec, sec_desc_buf->len, sec_desc_buf->len);
+	q_u->data = sec_desc_buf;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_q_set_key_sec(const char *desc,  REG_Q_SET_KEY_SEC *q_u, prs_struct *ps, int depth)
+{
+	if ( !q_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_q_set_key_sec");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!smb_io_pol_hnd("", &q_u->handle, ps, depth))
+		return False;
+
+	if(!prs_uint32("sec_info", ps, depth, &q_u->sec_info))
+		return False;
+	if(!prs_uint32("ptr    ", ps, depth, &q_u->ptr))
+		return False;
+
+	if(!reg_io_hdrbuf_sec(q_u->ptr, NULL, &q_u->hdr_sec, q_u->data, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_r_set_key_sec(const char *desc, REG_R_SET_KEY_SEC *q_u, prs_struct *ps, int depth)
+{
+	if ( !q_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_r_set_key_sec");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_werror("status", ps, depth, &q_u->status))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+makes a structure.
+********************************************************************/
+
+void init_reg_q_get_key_sec(REG_Q_GET_KEY_SEC *q_u, POLICY_HND *pol, 
+                            uint32 sec_info, uint32 sec_buf_size,
+                            SEC_DESC_BUF *psdb)
+{
+	memcpy(&q_u->handle, pol, sizeof(q_u->handle));
+
+	q_u->sec_info = sec_info;
+
+	q_u->ptr = psdb != NULL ? 1 : 0;
+	q_u->data = psdb;
+
+	init_buf_hdr(&q_u->hdr_sec, sec_buf_size, 0);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_q_get_key_sec(const char *desc,  REG_Q_GET_KEY_SEC *q_u, prs_struct *ps, int depth)
+{
+	if ( !q_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_q_get_key_sec");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!smb_io_pol_hnd("", &q_u->handle, ps, depth))
+		return False;
+
+	if(!prs_uint32("sec_info", ps, depth, &q_u->sec_info))
+		return False;
+	if(!prs_uint32("ptr     ", ps, depth, &q_u->ptr))
+		return False;
+
+	if(!reg_io_hdrbuf_sec(q_u->ptr, NULL, &q_u->hdr_sec, q_u->data, ps, depth))
+		return False;
+
+	return True;
+}
+
+#if 0
+/*******************************************************************
+makes a structure.
+********************************************************************/
+ void init_reg_r_get_key_sec(REG_R_GET_KEY_SEC *r_i, POLICY_HND *pol, 
+				uint32 buf_len, uint8 *buf,
+				NTSTATUS status)
+{
+	r_i->ptr = 1;
+	init_buf_hdr(&r_i->hdr_sec, buf_len, buf_len);
+	init_sec_desc_buf(r_i->data, buf_len, 1);
+
+	r_i->status = status; /* 0x0000 0000 or 0x0000 007a */
+}
+#endif 
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_r_get_key_sec(const char *desc,  REG_R_GET_KEY_SEC *q_u, prs_struct *ps, int depth)
+{
+	if ( !q_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_r_get_key_sec");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_uint32("ptr      ", ps, depth, &q_u->ptr))
+		return False;
+
+	if (q_u->ptr != 0) {
+		if(!smb_io_hdrbuf("", &q_u->hdr_sec, ps, depth))
+			return False;
+		if(!sec_io_desc_buf("", &q_u->data, ps, depth))
+			return False;
+		if(!prs_align(ps))
+			return False;
+	}
+
+	if(!prs_werror("status", ps, depth, &q_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+makes a structure.
+********************************************************************/
+
+BOOL init_reg_q_query_value(REG_Q_QUERY_VALUE *q_u, POLICY_HND *pol, const char *val_name,
+                     REGVAL_BUFFER *value_output)
+{
+        if (q_u == NULL)
+                return False;
+
+        q_u->pol = *pol;
+
+        init_unistr4(&q_u->name, val_name, UNI_STR_TERMINATE);
+
+        q_u->ptr_reserved = 1;
+        q_u->ptr_buf = 1;
+
+        q_u->ptr_bufsize = 1;
+        q_u->bufsize = value_output->buf_max_len;
+        q_u->buf_unk = 0;
+
+        q_u->unk1 = 0;
+        q_u->ptr_buflen = 1;
+        q_u->buflen = value_output->buf_max_len; 
+
+        q_u->ptr_buflen2 = 1;
+        q_u->buflen2 = 0;
+
+        return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_q_query_value(const char *desc,  REG_Q_QUERY_VALUE *q_u, prs_struct *ps, int depth)
+{
+	if ( !q_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_q_query_value");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!smb_io_pol_hnd("", &q_u->pol, ps, depth))
+		return False;
+	if(!prs_unistr4("name", ps, depth, &q_u->name))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_uint32("ptr_reserved", ps, depth, &(q_u->ptr_reserved)))
+		return False;
+
+	if(!prs_uint32("ptr_buf", ps, depth, &(q_u->ptr_buf)))
+		return False;
+
+	if(q_u->ptr_buf) {
+		if(!prs_uint32("ptr_bufsize", ps, depth, &(q_u->ptr_bufsize)))
+			return False;
+		if(!prs_uint32("bufsize", ps, depth, &(q_u->bufsize)))
+			return False;
+		if(!prs_uint32("buf_unk", ps, depth, &(q_u->buf_unk)))
+			return False;
+	}
+
+	if(!prs_uint32("unk1", ps, depth, &(q_u->unk1)))
+		return False;
+
+	if(!prs_uint32("ptr_buflen", ps, depth, &(q_u->ptr_buflen)))
+		return False;
+
+	if (q_u->ptr_buflen) {
+		if(!prs_uint32("buflen", ps, depth, &(q_u->buflen)))
+			return False;
+		if(!prs_uint32("ptr_buflen2", ps, depth, &(q_u->ptr_buflen2)))
+			return False;
+		if(!prs_uint32("buflen2", ps, depth, &(q_u->buflen2)))
+			return False;
+	}
+
+ 	return True;
+}
+
+/*******************************************************************
+ Inits a structure.
+ New version to replace older init_reg_r_query_value()
+********************************************************************/
+
+BOOL init_reg_r_query_value(uint32 include_keyval, REG_R_QUERY_VALUE *r_u,
+		     REGISTRY_VALUE *val, WERROR status)
+{
+	uint32			buf_len = 0;
+	REGVAL_BUFFER		buf2;
+		
+	if( !r_u || !val )
+		return False;
+	
+	r_u->type = TALLOC_P( get_talloc_ctx(), uint32 );
+	if (!r_u->type) {
+		return False;
+	}
+	*r_u->type = val->type;
+
+	buf_len = reg_init_regval_buffer( &buf2, val );
+	
+	r_u->buf_max_len = TALLOC_P( get_talloc_ctx(), uint32 );
+	if (!r_u->buf_max_len) {
+		return False;
+	}
+	*r_u->buf_max_len = buf_len;
+
+	r_u->buf_len = TALLOC_P( get_talloc_ctx(), uint32 );
+	if (!r_u->buf_len) {
+		return False;
+	}
+	*r_u->buf_len = buf_len;
+	
+	/* if include_keyval is not set, don't send the key value, just
+	   the buflen data. probably used by NT5 to allocate buffer space - SK */
+
+	if ( include_keyval ) {
+		r_u->value = TALLOC_P( get_talloc_ctx(), REGVAL_BUFFER );
+		if (!r_u->value) {
+			return False;
+		}
+		/* steal the memory */
+		*r_u->value = buf2;
+	}
+
+	r_u->status = status;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_r_query_value(const char *desc, REG_R_QUERY_VALUE *r_u, prs_struct *ps, int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_r_query_value");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if ( !prs_pointer("type", ps, depth, (void**)&r_u->type, sizeof(uint32), (PRS_POINTER_CAST)prs_uint32))
+		return False;
+
+	if ( !prs_pointer("value", ps, depth, (void**)&r_u->value, sizeof(REGVAL_BUFFER), (PRS_POINTER_CAST)smb_io_regval_buffer))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if ( !prs_pointer("buf_max_len", ps, depth, (void**)&r_u->buf_max_len, sizeof(uint32), (PRS_POINTER_CAST)prs_uint32))
+		return False;
+	if ( !prs_pointer("buf_len", ps, depth, (void**)&r_u->buf_len, sizeof(uint32), (PRS_POINTER_CAST)prs_uint32))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+ 	return True;
+}
+
+/*******************************************************************
+makes a structure.
+********************************************************************/
+
+void init_reg_q_enum_val(REG_Q_ENUM_VALUE *q_u, POLICY_HND *pol,
+				uint32 val_idx,
+				uint32 max_name_len, uint32 max_buf_len)
+{
+	ZERO_STRUCTP(q_u);
+
+	memcpy(&q_u->pol, pol, sizeof(q_u->pol));
+
+	q_u->val_index = val_idx;
+
+	q_u->name.size = max_name_len*2;
+	q_u->name.string = TALLOC_ZERO_P( get_talloc_ctx(), UNISTR2 );
+	if (!q_u->name.string) {
+		smb_panic("init_reg_q_enum_val: talloc fail\n");
+		return;
+	}
+	q_u->name.string->uni_max_len = max_name_len;
+	
+	q_u->type = TALLOC_P( get_talloc_ctx(), uint32 );
+	if (!q_u->type) {
+		smb_panic("init_reg_q_enum_val: talloc fail\n");
+		return;
+	}
+	*q_u->type = 0x0;
+
+	q_u->value = TALLOC_ZERO_P( get_talloc_ctx(), REGVAL_BUFFER );
+	if (!q_u->value) {
+		smb_panic("init_reg_q_enum_val: talloc fail\n");
+		return;
+	}
+		
+	q_u->value->buf_max_len = max_buf_len;
+
+	q_u->buffer_len = TALLOC_P( get_talloc_ctx(), uint32 );
+	if (!q_u->buffer_len) {
+		smb_panic("init_reg_q_enum_val: talloc fail\n");
+		return;
+	}
+	*q_u->buffer_len = max_buf_len;
+
+	q_u->name_len = TALLOC_P( get_talloc_ctx(), uint32 );
+	if (!q_u->name_len) {
+		smb_panic("init_reg_q_enum_val: talloc fail\n");
+		return;
+	}
+	*q_u->name_len = 0x0;
+}
+
+/*******************************************************************
+makes a structure.
+********************************************************************/
+
+void init_reg_r_enum_val(REG_R_ENUM_VALUE *r_u, REGISTRY_VALUE *val )
+{
+	uint32 real_size;
+	
+	ZERO_STRUCTP(r_u);
+
+	/* value name */
+
+	DEBUG(10,("init_reg_r_enum_val: Valuename => [%s]\n", val->valuename));
+	
+	init_unistr4( &r_u->name, val->valuename, UNI_STR_TERMINATE);
+		
+	/* type */
+	
+	r_u->type = TALLOC_P( get_talloc_ctx(), uint32 );
+	if (!r_u->type) {
+		smb_panic("init_reg_r_enum_val: talloc fail\n");
+		return;
+	}
+	*r_u->type = val->type;
+
+	/* REG_SZ & REG_MULTI_SZ must be converted to UNICODE */
+	
+	r_u->value = TALLOC_P( get_talloc_ctx(), REGVAL_BUFFER );
+	if (!r_u->value) {
+		smb_panic("init_reg_r_enum_val: talloc fail\n");
+		return;
+	}
+	real_size = reg_init_regval_buffer( r_u->value, val );
+	
+	/* lengths */
+
+	r_u->buffer_len1 = TALLOC_P( get_talloc_ctx(), uint32 );
+	if (!r_u->buffer_len1) {
+		smb_panic("init_reg_r_enum_val: talloc fail\n");
+		return;
+	}
+	*r_u->buffer_len1 = real_size;
+	r_u->buffer_len2 = TALLOC_P( get_talloc_ctx(), uint32 );
+	if (!r_u->buffer_len2) {
+		smb_panic("init_reg_r_enum_val: talloc fail\n");
+		return;
+	}
+	*r_u->buffer_len2 = real_size;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_q_enum_val(const char *desc,  REG_Q_ENUM_VALUE *q_u, prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_q_enum_val");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!smb_io_pol_hnd("", &q_u->pol, ps, depth))
+		return False;
+	
+	if(!prs_uint32("val_index", ps, depth, &q_u->val_index))
+		return False;
+		
+	if(!prs_unistr4("name", ps, depth, &q_u->name ))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_pointer("type", ps, depth, (void**)&q_u->type, sizeof(uint32), (PRS_POINTER_CAST)prs_uint32))
+		return False;
+
+	if ( !prs_pointer("value", ps, depth, (void**)&q_u->value, sizeof(REGVAL_BUFFER), (PRS_POINTER_CAST)smb_io_regval_buffer))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_pointer("buffer_len", ps, depth, (void**)&q_u->buffer_len, sizeof(uint32), (PRS_POINTER_CAST)prs_uint32))
+		return False;
+	if(!prs_pointer("name_len", ps, depth, (void**)&q_u->name_len, sizeof(uint32), (PRS_POINTER_CAST)prs_uint32))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_r_enum_val(const char *desc,  REG_R_ENUM_VALUE *r_u, prs_struct *ps, int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_r_enum_val");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_unistr4("name", ps, depth, &r_u->name ))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_pointer("type", ps, depth, (void**)&r_u->type, sizeof(uint32), (PRS_POINTER_CAST)prs_uint32))
+		return False;
+
+	if ( !prs_pointer("value", ps, depth, (void**)&r_u->value, sizeof(REGVAL_BUFFER), (PRS_POINTER_CAST)smb_io_regval_buffer))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_pointer("buffer_len1", ps, depth, (void**)&r_u->buffer_len1, sizeof(uint32), (PRS_POINTER_CAST)prs_uint32))
+		return False;
+	if(!prs_pointer("buffer_len2", ps, depth, (void**)&r_u->buffer_len2, sizeof(uint32), (PRS_POINTER_CAST)prs_uint32))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+makes a structure.
+********************************************************************/
+
+void init_reg_q_set_val(REG_Q_SET_VALUE *q_u, POLICY_HND *pol,
+				char *val_name, uint32 type,
+				RPC_DATA_BLOB *val)
+{
+	ZERO_STRUCTP(q_u);
+
+	memcpy(&q_u->handle, pol, sizeof(q_u->handle));
+
+	init_unistr4(&q_u->name, val_name, UNI_STR_TERMINATE);
+	
+	q_u->type      = type;
+	q_u->value     = *val;
+	q_u->size      = val->buf_len;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_q_set_value(const char *desc,  REG_Q_SET_VALUE *q_u, prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_q_set_value");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!smb_io_pol_hnd("", &q_u->handle, ps, depth))
+		return False;
+	
+	if(!prs_unistr4("name", ps, depth, &q_u->name ))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("type", ps, depth, &q_u->type))
+		return False;
+
+	if(!smb_io_rpc_blob("value", &q_u->value, ps, depth ))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("size", ps, depth, &q_u->size))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_r_set_value(const char *desc,  REG_R_SET_VALUE *q_u, prs_struct *ps, int depth)
+{
+	if ( !q_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_r_set_value");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_werror("status", ps, depth, &q_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+makes a structure.
+********************************************************************/
+
+void init_reg_q_enum_key(REG_Q_ENUM_KEY *q_u, POLICY_HND *pol, uint32 key_idx)
+{
+	memcpy(&q_u->pol, pol, sizeof(q_u->pol));
+
+	q_u->key_index = key_idx;
+	q_u->key_name_len = 0;
+	q_u->unknown_1 = 0x0414;
+
+	q_u->ptr1 = 1;
+	q_u->unknown_2 = 0x0000020A;
+	memset(q_u->pad1, 0, sizeof(q_u->pad1));
+
+	q_u->ptr2 = 1;
+	memset(q_u->pad2, 0, sizeof(q_u->pad2));
+
+	q_u->ptr3 = 1;
+	unix_to_nt_time(&q_u->time, 0);            /* current time? */
+}
+
+/*******************************************************************
+makes a reply structure.
+********************************************************************/
+
+void init_reg_r_enum_key(REG_R_ENUM_KEY *r_u, char *subkey )
+{
+	if ( !r_u )
+		return;
+		
+	init_unistr4( &r_u->keyname, subkey, UNI_STR_TERMINATE );
+	r_u->classname = TALLOC_ZERO_P( get_talloc_ctx(), UNISTR4 );
+	if (!r_u->classname) {
+		smb_panic("init_reg_r_enum_key: talloc fail\n");
+		return;
+	}
+	r_u->time = TALLOC_ZERO_P( get_talloc_ctx(), NTTIME );
+	if (!r_u->time) {
+		smb_panic("init_reg_r_enum_key: talloc fail\n");
+		return;
+	}
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_q_enum_key(const char *desc,  REG_Q_ENUM_KEY *q_u, prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_q_enum_key");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!smb_io_pol_hnd("", &q_u->pol, ps, depth))
+		return False;
+	
+	if(!prs_uint32("key_index", ps, depth, &q_u->key_index))
+		return False;
+	if(!prs_uint16("key_name_len", ps, depth, &q_u->key_name_len))
+		return False;
+	if(!prs_uint16("unknown_1", ps, depth, &q_u->unknown_1))
+		return False;
+
+	if(!prs_uint32("ptr1", ps, depth, &q_u->ptr1))
+		return False;
+
+	if (q_u->ptr1 != 0) {
+		if(!prs_uint32("unknown_2", ps, depth, &q_u->unknown_2))
+			return False;
+		if(!prs_uint8s(False, "pad1", ps, depth, q_u->pad1, sizeof(q_u->pad1)))
+			return False;
+	}
+
+	if(!prs_uint32("ptr2", ps, depth, &q_u->ptr2))
+		return False;
+
+	if (q_u->ptr2 != 0) {
+		if(!prs_uint8s(False, "pad2", ps, depth, q_u->pad2, sizeof(q_u->pad2)))
+			return False;
+	}
+
+	if(!prs_uint32("ptr3", ps, depth, &q_u->ptr3))
+		return False;
+
+	if (q_u->ptr3 != 0) {
+		if(!smb_io_time("", &q_u->time, ps, depth))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_r_enum_key(const char *desc,  REG_R_ENUM_KEY *q_u, prs_struct *ps, int depth)
+{
+	if ( !q_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_r_enum_key");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	if ( !prs_unistr4( "keyname", ps, depth, &q_u->keyname ) )
+		return False;
+	
+	if(!prs_align(ps))
+		return False;
+	if (!prs_pointer("class", ps, depth, (void**)&q_u->classname, sizeof(UNISTR4), (PRS_POINTER_CAST)prs_unistr4))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+	if (!prs_pointer("time", ps, depth, (void**)&q_u->time, sizeof(NTTIME), (PRS_POINTER_CAST)smb_io_nttime))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_werror("status", ps, depth, &q_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+makes a structure.
+********************************************************************/
+
+void init_reg_q_open_entry(REG_Q_OPEN_ENTRY *q_u, POLICY_HND *pol,
+				char *key_name, uint32 access_desired)
+{
+	memcpy(&q_u->pol, pol, sizeof(q_u->pol));
+
+	init_unistr4(&q_u->name, key_name, UNI_STR_TERMINATE);
+
+	q_u->unknown_0 = 0x00000000;
+	q_u->access = access_desired;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_q_open_entry(const char *desc,  REG_Q_OPEN_ENTRY *q_u, prs_struct *ps, int depth)
+{
+	if ( !q_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_q_open_entry");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!smb_io_pol_hnd("", &q_u->pol, ps, depth))
+		return False;
+	if(!prs_unistr4("name", ps, depth, &q_u->name))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_uint32("unknown_0        ", ps, depth, &q_u->unknown_0))
+		return False;
+	if(!prs_uint32("access", ps, depth, &q_u->access))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_r_open_entry(const char *desc,  REG_R_OPEN_ENTRY *r_u, prs_struct *ps, int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_r_open_entry");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!smb_io_pol_hnd("handle", &r_u->handle, ps, depth))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+Inits a structure.
+********************************************************************/
+
+void init_reg_q_shutdown(REG_Q_SHUTDOWN *q_u, const char *msg,
+			uint32 timeout, BOOL do_reboot, BOOL force)
+{
+	q_u->server = TALLOC_P( get_talloc_ctx(), uint16 );
+	if (!q_u->server) {
+		smb_panic("init_reg_q_shutdown: talloc fail\n");
+		return;
+	}
+	*q_u->server = 0x1;
+
+	q_u->message = TALLOC_ZERO_P( get_talloc_ctx(), UNISTR4 );
+	if (!q_u->message) {
+		smb_panic("init_reg_q_shutdown: talloc fail\n");
+		return;
+	}
+
+	if ( msg && *msg ) { 
+		init_unistr4( q_u->message, msg, UNI_FLAGS_NONE );
+
+		/* Win2000 is apparently very sensitive to these lengths */
+		/* do a special case here */
+
+		q_u->message->string->uni_max_len++;
+		q_u->message->size += 2;
+
+	}
+
+	q_u->timeout = timeout;
+
+	q_u->reboot = do_reboot ? 1 : 0;
+	q_u->force = force ? 1 : 0;
+}
+
+/*******************************************************************
+Inits a REG_Q_SHUTDOWN_EX structure.
+********************************************************************/
+
+void init_reg_q_shutdown_ex(REG_Q_SHUTDOWN_EX * q_u_ex, const char *msg,
+			uint32 timeout, BOOL do_reboot, BOOL force, uint32 reason)
+{
+	REG_Q_SHUTDOWN q_u;
+	
+	ZERO_STRUCT( q_u );
+	
+	init_reg_q_shutdown( &q_u, msg, timeout, do_reboot, force );
+	
+	/* steal memory */
+	
+	q_u_ex->server  = q_u.server;
+	q_u_ex->message = q_u.message;
+	
+	q_u_ex->reboot  = q_u.reboot;
+	q_u_ex->force   = q_u.force;
+	
+	q_u_ex->reason = reason;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_q_shutdown(const char *desc, REG_Q_SHUTDOWN *q_u, prs_struct *ps,
+		       int depth)
+{
+	if ( !q_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_q_shutdown");
+	depth++;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_pointer("server", ps, depth, (void**)&q_u->server, sizeof(uint16), (PRS_POINTER_CAST)prs_uint16))
+		return False;
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_pointer("message", ps, depth, (void**)&q_u->message, sizeof(UNISTR4), (PRS_POINTER_CAST)prs_unistr4))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("timeout", ps, depth, &(q_u->timeout)))
+		return False;
+
+	if (!prs_uint8("force  ", ps, depth, &(q_u->force)))
+		return False;
+	if (!prs_uint8("reboot ", ps, depth, &(q_u->reboot)))
+		return False;
+
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+BOOL reg_io_r_shutdown(const char *desc, REG_R_SHUTDOWN *r_u, prs_struct *ps,
+		       int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_r_shutdown");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a REG_Q_SHUTDOWN_EX structure.
+********************************************************************/
+
+BOOL reg_io_q_shutdown_ex(const char *desc, REG_Q_SHUTDOWN_EX *q_u, prs_struct *ps,
+		       int depth)
+{
+	if ( !q_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_q_shutdown_ex");
+	depth++;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_pointer("server", ps, depth, (void**)&q_u->server, sizeof(uint16), (PRS_POINTER_CAST)prs_uint16))
+		return False;
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_pointer("message", ps, depth, (void**)&q_u->message, sizeof(UNISTR4), (PRS_POINTER_CAST)prs_unistr4))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("timeout", ps, depth, &(q_u->timeout)))
+		return False;
+
+	if (!prs_uint8("force  ", ps, depth, &(q_u->force)))
+		return False;
+	if (!prs_uint8("reboot ", ps, depth, &(q_u->reboot)))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+	if (!prs_uint32("reason", ps, depth, &(q_u->reason)))
+		return False;
+
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a REG_R_SHUTDOWN_EX structure.
+********************************************************************/
+BOOL reg_io_r_shutdown_ex(const char *desc, REG_R_SHUTDOWN_EX *r_u, prs_struct *ps,
+		       int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_r_shutdown_ex");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+Inits a structure.
+********************************************************************/
+
+void init_reg_q_abort_shutdown(REG_Q_ABORT_SHUTDOWN *q_u)
+{
+	q_u->server = TALLOC_P( get_talloc_ctx(), uint16 );
+	if (!q_u->server) {
+		smb_panic("init_reg_q_abort_shutdown: talloc fail\n");
+		return;
+	}
+	*q_u->server = 0x1;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL reg_io_q_abort_shutdown(const char *desc, REG_Q_ABORT_SHUTDOWN *q_u,
+			     prs_struct *ps, int depth)
+{
+	if ( !q_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_q_abort_shutdown");
+	depth++;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_pointer("server", ps, depth, (void**)&q_u->server, sizeof(uint16), (PRS_POINTER_CAST)prs_uint16))
+		return False;
+	if (!prs_align(ps))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+BOOL reg_io_r_abort_shutdown(const char *desc, REG_R_ABORT_SHUTDOWN *r_u,
+			     prs_struct *ps, int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "reg_io_r_abort_shutdown");
+	depth++;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}

Modified: branches/samba/upstream/source/rpc_parse/parse_rpc.c
===================================================================
--- branches/samba/upstream/source/rpc_parse/parse_rpc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_parse/parse_rpc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -258,7 +259,7 @@
  Reads or writes an RPC_HDR structure.
 ********************************************************************/
 
-bool smb_io_rpc_hdr(const char *desc,  RPC_HDR *rpc, prs_struct *ps, int depth)
+BOOL smb_io_rpc_hdr(const char *desc,  RPC_HDR *rpc, prs_struct *ps, int depth)
 {
 	if (rpc == NULL)
 		return False;
@@ -312,7 +313,7 @@
  Reads or writes an RPC_IFACE structure.
 ********************************************************************/
 
-static bool smb_io_rpc_iface(const char *desc, RPC_IFACE *ifc, prs_struct *ps, int depth)
+static BOOL smb_io_rpc_iface(const char *desc, RPC_IFACE *ifc, prs_struct *ps, int depth)
 {
 	if (ifc == NULL)
 		return False;
@@ -346,7 +347,7 @@
  Reads or writes an RPC_ADDR_STR structure.
 ********************************************************************/
 
-static bool smb_io_rpc_addr_str(const char *desc,  RPC_ADDR_STR *str, prs_struct *ps, int depth)
+static BOOL smb_io_rpc_addr_str(const char *desc,  RPC_ADDR_STR *str, prs_struct *ps, int depth)
 {
 	if (str == NULL)
 		return False;
@@ -378,7 +379,7 @@
  Reads or writes an RPC_HDR_BBA structure.
 ********************************************************************/
 
-static bool smb_io_rpc_hdr_bba(const char *desc,  RPC_HDR_BBA *rpc, prs_struct *ps, int depth)
+static BOOL smb_io_rpc_hdr_bba(const char *desc,  RPC_HDR_BBA *rpc, prs_struct *ps, int depth)
 {
 	if (rpc == NULL)
 		return False;
@@ -409,7 +410,7 @@
 	rpc_ctx->abstract = *abstract;
 
 	/* vers. of interface to use for replies */
-	rpc_ctx->transfer = CONST_DISCARD(RPC_IFACE *, transfer);
+	rpc_ctx->transfer = transfer;
 }
 
 /*******************************************************************
@@ -431,7 +432,7 @@
  Reads or writes an RPC_CONTEXT structure.
 ********************************************************************/
 
-bool smb_io_rpc_context(const char *desc, RPC_CONTEXT *rpc_ctx, prs_struct *ps, int depth)
+BOOL smb_io_rpc_context(const char *desc, RPC_CONTEXT *rpc_ctx, prs_struct *ps, int depth)
 {
 	int i;
 
@@ -469,7 +470,7 @@
  Reads or writes an RPC_HDR_RB structure.
 ********************************************************************/
 
-bool smb_io_rpc_hdr_rb(const char *desc, RPC_HDR_RB *rpc, prs_struct *ps, int depth)
+BOOL smb_io_rpc_hdr_rb(const char *desc, RPC_HDR_RB *rpc, prs_struct *ps, int depth)
 {
 	int i;
 	
@@ -525,7 +526,7 @@
  lkclXXXX only one reason at the moment!
 ********************************************************************/
 
-static bool smb_io_rpc_results(const char *desc, RPC_RESULTS *res, prs_struct *ps, int depth)
+static BOOL smb_io_rpc_results(const char *desc, RPC_RESULTS *res, prs_struct *ps, int depth)
 {
 	if (res == NULL)
 		return False;
@@ -574,7 +575,7 @@
  Reads or writes an RPC_HDR_BA structure.
 ********************************************************************/
 
-bool smb_io_rpc_hdr_ba(const char *desc, RPC_HDR_BA *rpc, prs_struct *ps, int depth)
+BOOL smb_io_rpc_hdr_ba(const char *desc, RPC_HDR_BA *rpc, prs_struct *ps, int depth)
 {
 	if (rpc == NULL)
 		return False;
@@ -608,7 +609,7 @@
  Reads or writes an RPC_HDR_REQ structure.
 ********************************************************************/
 
-bool smb_io_rpc_hdr_req(const char *desc, RPC_HDR_REQ *rpc, prs_struct *ps, int depth)
+BOOL smb_io_rpc_hdr_req(const char *desc, RPC_HDR_REQ *rpc, prs_struct *ps, int depth)
 {
 	if (rpc == NULL)
 		return False;
@@ -629,7 +630,7 @@
  Reads or writes an RPC_HDR_RESP structure.
 ********************************************************************/
 
-bool smb_io_rpc_hdr_resp(const char *desc, RPC_HDR_RESP *rpc, prs_struct *ps, int depth)
+BOOL smb_io_rpc_hdr_resp(const char *desc, RPC_HDR_RESP *rpc, prs_struct *ps, int depth)
 {
 	if (rpc == NULL)
 		return False;
@@ -652,7 +653,7 @@
  Reads or writes an RPC_HDR_FAULT structure.
 ********************************************************************/
 
-bool smb_io_rpc_hdr_fault(const char *desc, RPC_HDR_FAULT *rpc, prs_struct *ps, int depth)
+BOOL smb_io_rpc_hdr_fault(const char *desc, RPC_HDR_FAULT *rpc, prs_struct *ps, int depth)
 {
 	if (rpc == NULL)
 		return False;
@@ -688,7 +689,7 @@
  Reads or writes an RPC_HDR_AUTH structure.
 ********************************************************************/
 
-bool smb_io_rpc_hdr_auth(const char *desc, RPC_HDR_AUTH *rai, prs_struct *ps, int depth)
+BOOL smb_io_rpc_hdr_auth(const char *desc, RPC_HDR_AUTH *rai, prs_struct *ps, int depth)
 {
 	if (rai == NULL)
 		return False;
@@ -717,7 +718,7 @@
  Checks an RPC_AUTH_VERIFIER structure.
 ********************************************************************/
 
-bool rpc_auth_verifier_chk(RPC_AUTH_VERIFIER *rav,
+BOOL rpc_auth_verifier_chk(RPC_AUTH_VERIFIER *rav,
 				const char *signature, uint32 msg_type)
 {
 	return (strequal(rav->signature, signature) && rav->msg_type == msg_type);
@@ -738,7 +739,7 @@
  Reads or writes an RPC_AUTH_VERIFIER structure.
 ********************************************************************/
 
-bool smb_io_rpc_auth_verifier(const char *desc, RPC_AUTH_VERIFIER *rav, prs_struct *ps, int depth)
+BOOL smb_io_rpc_auth_verifier(const char *desc, RPC_AUTH_VERIFIER *rav, prs_struct *ps, int depth)
 {
 	if (rav == NULL)
 		return False;
@@ -760,7 +761,7 @@
  This parses an RPC_AUTH_VERIFIER for schannel. I think
 ********************************************************************/
 
-bool smb_io_rpc_schannel_verifier(const char *desc, RPC_AUTH_VERIFIER *rav, prs_struct *ps, int depth)
+BOOL smb_io_rpc_schannel_verifier(const char *desc, RPC_AUTH_VERIFIER *rav, prs_struct *ps, int depth)
 {
 	if (rav == NULL)
 		return False;
@@ -793,7 +794,7 @@
  Reads or writes an RPC_AUTH_SCHANNEL_NEG structure.
 ********************************************************************/
 
-bool smb_io_rpc_auth_schannel_neg(const char *desc, RPC_AUTH_SCHANNEL_NEG *neg,
+BOOL smb_io_rpc_auth_schannel_neg(const char *desc, RPC_AUTH_SCHANNEL_NEG *neg,
 				prs_struct *ps, int depth)
 {
 	if (neg == NULL)
@@ -821,7 +822,7 @@
 reads or writes an RPC_AUTH_SCHANNEL_CHK structure.
 ********************************************************************/
 
-bool smb_io_rpc_auth_schannel_chk(const char *desc, int auth_len, 
+BOOL smb_io_rpc_auth_schannel_chk(const char *desc, int auth_len, 
                                 RPC_AUTH_SCHANNEL_CHK * chk,
 				prs_struct *ps, int depth)
 {

Copied: branches/samba/upstream/source/rpc_parse/parse_samr.c (from rev 1928, branches/samba/upstream/source/rpc_parse/parse_samr.c)
===================================================================
--- branches/samba/upstream/source/rpc_parse/parse_samr.c	                        (rev 0)
+++ branches/samba/upstream/source/rpc_parse/parse_samr.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,8154 @@
+/* 
+ *  Unix SMB/CIFS implementation.
+ *  RPC Pipe client / server routines
+ *  Copyright (C) Andrew Tridgell              1992-2000,
+ *  Copyright (C) Luke Kenneth Casson Leighton 1996-2000,
+ *  Copyright (C) Paul Ashton                  1997-2000,
+ *  Copyright (C) Elrond                            2000,
+ *  Copyright (C) Jeremy Allison                    2001,
+ *  Copyright (C) Jean François Micouleau      1998-2001,
+ *  Copyright (C) Jim McDonough <jmcd at us.ibm.com>   2002.
+ *  
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_RPC_PARSE
+
+/*******************************************************************
+inits a SAMR_Q_CLOSE_HND structure.
+********************************************************************/
+
+void init_samr_q_close_hnd(SAMR_Q_CLOSE_HND * q_c, POLICY_HND *hnd)
+{
+	DEBUG(5, ("init_samr_q_close_hnd\n"));
+	
+	q_c->pol = *hnd;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_close_hnd(const char *desc, SAMR_Q_CLOSE_HND * q_u,
+			 prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_close_hnd");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	return smb_io_pol_hnd("pol", &q_u->pol, ps, depth);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_close_hnd(const char *desc, SAMR_R_CLOSE_HND * r_u,
+			 prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_close_hnd");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &r_u->pol, ps, depth))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_LOOKUP_DOMAIN structure.
+********************************************************************/
+
+void init_samr_q_lookup_domain(SAMR_Q_LOOKUP_DOMAIN * q_u,
+			       POLICY_HND *pol, char *dom_name)
+{
+	DEBUG(5, ("init_samr_q_lookup_domain\n"));
+
+	q_u->connect_pol = *pol;
+
+	init_unistr2(&q_u->uni_domain, dom_name, UNI_FLAGS_NONE);
+	init_uni_hdr(&q_u->hdr_domain, &q_u->uni_domain);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+BOOL samr_io_q_lookup_domain(const char *desc, SAMR_Q_LOOKUP_DOMAIN * q_u,
+			     prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_lookup_domain");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("connect_pol", &q_u->connect_pol, ps, depth))
+		return False;
+
+	if(!smb_io_unihdr("hdr_domain", &q_u->hdr_domain, ps, depth))
+		return False;
+
+	if(!smb_io_unistr2("uni_domain", &q_u->uni_domain, q_u->hdr_domain.buffer, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_R_LOOKUP_DOMAIN structure.
+********************************************************************/
+
+void init_samr_r_lookup_domain(SAMR_R_LOOKUP_DOMAIN * r_u,
+			       DOM_SID *dom_sid, NTSTATUS status)
+{
+	DEBUG(5, ("init_samr_r_lookup_domain\n"));
+
+	r_u->status = status;
+	r_u->ptr_sid = 0;
+	if (NT_STATUS_IS_OK(status)) {
+		r_u->ptr_sid = 1;
+		init_dom_sid2(&r_u->dom_sid, dom_sid);
+	}
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_lookup_domain(const char *desc, SAMR_R_LOOKUP_DOMAIN * r_u,
+			     prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_lookup_domain");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr", ps, depth, &r_u->ptr_sid))
+		return False;
+
+	if (r_u->ptr_sid != 0) {
+		if(!smb_io_dom_sid2("sid", &r_u->dom_sid, ps, depth))
+			return False;
+		if(!prs_align(ps))
+			return False;
+	}
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+void init_samr_q_remove_sid_foreign_domain(SAMR_Q_REMOVE_SID_FOREIGN_DOMAIN * q_u, POLICY_HND *dom_pol, DOM_SID *sid)
+{
+	DEBUG(5, ("samr_init_samr_q_remove_sid_foreign_domain\n"));
+
+	q_u->dom_pol = *dom_pol;
+	init_dom_sid2(&q_u->sid, sid);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_remove_sid_foreign_domain(const char *desc, SAMR_Q_REMOVE_SID_FOREIGN_DOMAIN * q_u,
+			  prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_remove_sid_foreign_domain");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("domain_pol", &q_u->dom_pol, ps, depth))
+		return False;
+
+	if(!smb_io_dom_sid2("sid", &q_u->sid, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_remove_sid_foreign_domain(const char *desc, SAMR_R_REMOVE_SID_FOREIGN_DOMAIN * r_u,
+			  prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_remove_sid_foreign_domain");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+void init_samr_q_open_domain(SAMR_Q_OPEN_DOMAIN * q_u,
+			     POLICY_HND *pol, uint32 flags,
+			     const DOM_SID *sid)
+{
+	DEBUG(5, ("samr_init_samr_q_open_domain\n"));
+
+	q_u->pol = *pol;
+	q_u->flags = flags;
+	init_dom_sid2(&q_u->dom_sid, sid);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_open_domain(const char *desc, SAMR_Q_OPEN_DOMAIN * q_u,
+			   prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_open_domain");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &q_u->pol, ps, depth))
+		return False;
+
+	if(!prs_uint32("flags", ps, depth, &q_u->flags))
+		return False;
+
+	if(!smb_io_dom_sid2("sid", &q_u->dom_sid, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_open_domain(const char *desc, SAMR_R_OPEN_DOMAIN * r_u,
+			   prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_open_domain");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("domain_pol", &r_u->domain_pol, ps, depth))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+void init_samr_q_get_usrdom_pwinfo(SAMR_Q_GET_USRDOM_PWINFO * q_u,
+				   POLICY_HND *user_pol)
+{
+	DEBUG(5, ("samr_init_samr_q_get_usrdom_pwinfo\n"));
+
+	q_u->user_pol = *user_pol;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_get_usrdom_pwinfo(const char *desc, SAMR_Q_GET_USRDOM_PWINFO * q_u,
+				 prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_get_usrdom_pwinfo");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	return smb_io_pol_hnd("user_pol", &q_u->user_pol, ps, depth);
+}
+
+/*******************************************************************
+ Init.
+********************************************************************/
+
+void init_samr_r_get_usrdom_pwinfo(SAMR_R_GET_USRDOM_PWINFO *r_u, NTSTATUS status)
+{
+	DEBUG(5, ("init_samr_r_get_usrdom_pwinfo\n"));
+	
+	r_u->min_pwd_length = 0x0000;
+
+	/*
+	 * used to be 	
+	 * r_u->unknown_1 = 0x0015;
+	 * but for trusts.
+	 */
+	r_u->unknown_1 = 0x01D1;
+	r_u->unknown_1 = 0x0015;
+
+	r_u->password_properties = 0x00000000;
+
+	r_u->status = status;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_get_usrdom_pwinfo(const char *desc, SAMR_R_GET_USRDOM_PWINFO * r_u,
+				 prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_get_usrdom_pwinfo");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint16("min_pwd_length", ps, depth, &r_u->min_pwd_length))
+		return False;
+	if(!prs_uint16("unknown_1", ps, depth, &r_u->unknown_1))
+		return False;
+	if(!prs_uint32("password_properties", ps, depth, &r_u->password_properties))
+		return False;
+
+	if(!prs_ntstatus("status   ", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_set_sec_obj(const char *desc, SAMR_Q_SET_SEC_OBJ * q_u,
+			     prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_set_sec_obj");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &q_u->pol, ps, depth))
+		return False;
+
+	if(!prs_uint32("sec_info", ps, depth, &q_u->sec_info))
+		return False;
+		
+	if(!sec_io_desc_buf("sec_desc", &q_u->buf, ps, depth))
+		return False;
+	
+	return True;
+}
+
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+void init_samr_q_query_sec_obj(SAMR_Q_QUERY_SEC_OBJ * q_u,
+			       POLICY_HND *user_pol, uint32 sec_info)
+{
+	DEBUG(5, ("samr_init_samr_q_query_sec_obj\n"));
+
+	q_u->user_pol = *user_pol;
+	q_u->sec_info = sec_info;
+}
+
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_query_sec_obj(const char *desc, SAMR_Q_QUERY_SEC_OBJ * q_u,
+			     prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_query_sec_obj");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("user_pol", &q_u->user_pol, ps, depth))
+		return False;
+
+	if(!prs_uint32("sec_info", ps, depth, &q_u->sec_info))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+void init_samr_q_query_domain_info(SAMR_Q_QUERY_DOMAIN_INFO * q_u,
+				   POLICY_HND *domain_pol, uint16 switch_value)
+{
+	DEBUG(5, ("samr_init_samr_q_query_domain_info\n"));
+
+	q_u->domain_pol = *domain_pol;
+	q_u->switch_value = switch_value;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_query_domain_info(const char *desc, SAMR_Q_QUERY_DOMAIN_INFO * q_u,
+				 prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_query_domain_info");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("domain_pol", &q_u->domain_pol, ps, depth))
+		return False;
+
+	if(!prs_uint16("switch_value", ps, depth, &q_u->switch_value))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a structure.
+********************************************************************/
+
+void init_unk_info1(SAM_UNK_INFO_1 *u_1, uint16 min_pass_len, uint16 pass_hist, 
+		    uint32 password_properties, NTTIME nt_expire, NTTIME nt_min_age)
+{
+	u_1->min_length_password = min_pass_len;
+	u_1->password_history = pass_hist;
+	
+	if (lp_check_password_script() && *lp_check_password_script()) {
+		password_properties |= DOMAIN_PASSWORD_COMPLEX;
+	}
+	u_1->password_properties = password_properties;
+
+	/* password never expire */
+	u_1->expire = nt_expire;
+
+	/* can change the password now */
+	u_1->min_passwordage = nt_min_age;
+	
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_unk_info1(const char *desc, SAM_UNK_INFO_1 * u_1,
+			     prs_struct *ps, int depth)
+{
+	if (u_1 == NULL)
+	  return False;
+
+	prs_debug(ps, depth, desc, "sam_io_unk_info1");
+	depth++;
+
+	if(!prs_uint16("min_length_password", ps, depth, &u_1->min_length_password))
+		return False;
+	if(!prs_uint16("password_history", ps, depth, &u_1->password_history))
+		return False;
+	if(!prs_uint32("password_properties", ps, depth, &u_1->password_properties))
+		return False;
+	if(!smb_io_time("expire", &u_1->expire, ps, depth))
+		return False;
+	if(!smb_io_time("min_passwordage", &u_1->min_passwordage, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a structure.
+********************************************************************/
+
+void init_unk_info2(SAM_UNK_INFO_2 * u_2,
+			const char *comment, const char *domain, const char *server,
+			uint32 seq_num, uint32 num_users, uint32 num_groups, uint32 num_alias, NTTIME nt_logout, uint32 server_role)
+{
+	u_2->logout = nt_logout;
+
+	u_2->seq_num = seq_num;
+
+	
+	u_2->unknown_4 = 0x00000001;
+	u_2->server_role = server_role;
+	u_2->unknown_6 = 0x00000001;
+	u_2->num_domain_usrs = num_users;
+	u_2->num_domain_grps = num_groups;
+	u_2->num_local_grps = num_alias;
+
+	init_unistr2(&u_2->uni_comment, comment, UNI_FLAGS_NONE);
+	init_uni_hdr(&u_2->hdr_comment, &u_2->uni_comment);
+	init_unistr2(&u_2->uni_domain, domain, UNI_FLAGS_NONE);
+	init_uni_hdr(&u_2->hdr_domain, &u_2->uni_domain);
+	init_unistr2(&u_2->uni_server, server, UNI_FLAGS_NONE);
+	init_uni_hdr(&u_2->hdr_server, &u_2->uni_server);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_unk_info2(const char *desc, SAM_UNK_INFO_2 * u_2,
+			     prs_struct *ps, int depth)
+{
+	if (u_2 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_unk_info2");
+	depth++;
+
+	if(!smb_io_time("logout", &u_2->logout, ps, depth))
+		return False;
+	if(!smb_io_unihdr("hdr_comment", &u_2->hdr_comment, ps, depth))
+		return False;
+	if(!smb_io_unihdr("hdr_domain", &u_2->hdr_domain, ps, depth))
+		return False;
+	if(!smb_io_unihdr("hdr_server", &u_2->hdr_server, ps, depth))
+		return False;
+
+	/* put all the data in here, at the moment, including what the above
+	   pointer is referring to
+	 */
+
+	if(!prs_uint64("seq_num ", ps, depth, &u_2->seq_num))
+		return False;
+
+	if(!prs_uint32("unknown_4 ", ps, depth, &u_2->unknown_4)) /* 0x0000 0001 */
+		return False;
+	if(!prs_uint32("server_role ", ps, depth, &u_2->server_role))
+		return False;
+	if(!prs_uint32("unknown_6 ", ps, depth, &u_2->unknown_6)) /* 0x0000 0001 */
+		return False;
+	if(!prs_uint32("num_domain_usrs ", ps, depth, &u_2->num_domain_usrs))
+		return False;
+	if(!prs_uint32("num_domain_grps", ps, depth, &u_2->num_domain_grps))
+		return False;
+	if(!prs_uint32("num_local_grps", ps, depth, &u_2->num_local_grps))
+		return False;
+
+	if(!smb_io_unistr2("uni_comment", &u_2->uni_comment, u_2->hdr_comment.buffer, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni_domain", &u_2->uni_domain, u_2->hdr_domain.buffer, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni_server", &u_2->uni_server, u_2->hdr_server.buffer, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a structure.
+********************************************************************/
+
+void init_unk_info3(SAM_UNK_INFO_3 *u_3, NTTIME nt_logout)
+{
+	u_3->logout = nt_logout;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_unk_info3(const char *desc, SAM_UNK_INFO_3 * u_3,
+			     prs_struct *ps, int depth)
+{
+	if (u_3 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_unk_info3");
+	depth++;
+
+	if(!smb_io_time("logout", &u_3->logout, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a structure.
+********************************************************************/
+
+void init_unk_info4(SAM_UNK_INFO_4 * u_4,const char *comment)
+{
+	init_unistr2(&u_4->uni_comment, comment, UNI_FLAGS_NONE);
+	init_uni_hdr(&u_4->hdr_comment, &u_4->uni_comment);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_unk_info4(const char *desc, SAM_UNK_INFO_4 * u_4,
+			     prs_struct *ps, int depth)
+{
+	if (u_4 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_unk_info4");
+	depth++;
+
+	if(!smb_io_unihdr("hdr_comment", &u_4->hdr_comment, ps, depth))
+		return False;
+
+	if(!smb_io_unistr2("uni_comment", &u_4->uni_comment, u_4->hdr_comment.buffer, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a structure.
+********************************************************************/
+
+void init_unk_info5(SAM_UNK_INFO_5 * u_5,const char *domain)
+{
+	init_unistr2(&u_5->uni_domain, domain, UNI_FLAGS_NONE);
+	init_uni_hdr(&u_5->hdr_domain, &u_5->uni_domain);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_unk_info5(const char *desc, SAM_UNK_INFO_5 * u_5,
+			     prs_struct *ps, int depth)
+{
+	if (u_5 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_unk_info5");
+	depth++;
+
+	if(!smb_io_unihdr("hdr_domain", &u_5->hdr_domain, ps, depth))
+		return False;
+
+	if(!smb_io_unistr2("uni_domain", &u_5->uni_domain, u_5->hdr_domain.buffer, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a structure.
+********************************************************************/
+
+void init_unk_info6(SAM_UNK_INFO_6 * u_6, const char *server)
+{
+	init_unistr2(&u_6->uni_server, server, UNI_FLAGS_NONE);
+	init_uni_hdr(&u_6->hdr_server, &u_6->uni_server);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_unk_info6(const char *desc, SAM_UNK_INFO_6 * u_6,
+			     prs_struct *ps, int depth)
+{
+	if (u_6 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_unk_info6");
+	depth++;
+
+	if(!smb_io_unihdr("hdr_server", &u_6->hdr_server, ps, depth))
+		return False;
+
+	if(!smb_io_unistr2("uni_server", &u_6->uni_server, u_6->hdr_server.buffer, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a structure.
+********************************************************************/
+
+void init_unk_info7(SAM_UNK_INFO_7 * u_7, uint32 server_role)
+{
+	u_7->server_role = server_role;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_unk_info7(const char *desc, SAM_UNK_INFO_7 * u_7,
+			     prs_struct *ps, int depth)
+{
+	if (u_7 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_unk_info7");
+	depth++;
+
+	if(!prs_uint16("server_role", ps, depth, &u_7->server_role))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a structure.
+********************************************************************/
+
+void init_unk_info8(SAM_UNK_INFO_8 * u_8, uint32 seq_num)
+{
+	unix_to_nt_time(&u_8->domain_create_time, 0);
+	u_8->seq_num = seq_num;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_unk_info8(const char *desc, SAM_UNK_INFO_8 * u_8,
+			     prs_struct *ps, int depth)
+{
+	if (u_8 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_unk_info8");
+	depth++;
+
+	if (!prs_uint64("seq_num", ps, depth, &u_8->seq_num))
+		return False;
+
+	if(!smb_io_time("domain_create_time", &u_8->domain_create_time, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a structure.
+********************************************************************/
+
+void init_unk_info9(SAM_UNK_INFO_9 * u_9, uint32 unknown)
+{
+	u_9->unknown = unknown;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_unk_info9(const char *desc, SAM_UNK_INFO_9 * u_9,
+			     prs_struct *ps, int depth)
+{
+	if (u_9 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_unk_info9");
+	depth++;
+
+	if (!prs_uint32("unknown", ps, depth, &u_9->unknown))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a structure.
+********************************************************************/
+
+void init_unk_info12(SAM_UNK_INFO_12 * u_12, NTTIME nt_lock_duration, NTTIME nt_reset_time, uint16 lockout)
+{
+	u_12->duration = nt_lock_duration;
+	u_12->reset_count = nt_reset_time;
+
+	u_12->bad_attempt_lockout = lockout;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_unk_info12(const char *desc, SAM_UNK_INFO_12 * u_12,
+			      prs_struct *ps, int depth)
+{
+	if (u_12 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_unk_info12");
+	depth++;
+
+	if(!smb_io_time("duration", &u_12->duration, ps, depth))
+		return False;
+	if(!smb_io_time("reset_count", &u_12->reset_count, ps, depth))
+		return False;
+	if(!prs_uint16("bad_attempt_lockout", ps, depth, &u_12->bad_attempt_lockout))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a structure.
+********************************************************************/
+
+void init_unk_info13(SAM_UNK_INFO_13 * u_13, uint32 seq_num)
+{
+	unix_to_nt_time(&u_13->domain_create_time, 0);
+	u_13->seq_num = seq_num;
+	u_13->unknown1 = 0;
+	u_13->unknown2 = 0;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_unk_info13(const char *desc, SAM_UNK_INFO_13 * u_13,
+			     prs_struct *ps, int depth)
+{
+	if (u_13 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_unk_info13");
+	depth++;
+
+	if (!prs_uint64("seq_num", ps, depth, &u_13->seq_num))
+		return False;
+
+	if(!smb_io_time("domain_create_time", &u_13->domain_create_time, ps, depth))
+		return False;
+
+	if (!prs_uint32("unknown1", ps, depth, &u_13->unknown1))
+		return False;
+	if (!prs_uint32("unknown2", ps, depth, &u_13->unknown2))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_R_QUERY_DOMAIN_INFO structure.
+********************************************************************/
+
+void init_samr_r_query_domain_info(SAMR_R_QUERY_DOMAIN_INFO * r_u,
+				   uint16 switch_value, SAM_UNK_CTR * ctr,
+				   NTSTATUS status)
+{
+	DEBUG(5, ("init_samr_r_query_domain_info\n"));
+
+	r_u->ptr_0 = 0;
+	r_u->switch_value = 0;
+	r_u->status = status;	/* return status */
+
+	if (NT_STATUS_IS_OK(status)) {
+		r_u->switch_value = switch_value;
+		r_u->ptr_0 = 1;
+		r_u->ctr = ctr;
+	}
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_query_domain_info(const char *desc, SAMR_R_QUERY_DOMAIN_INFO * r_u,
+				 prs_struct *ps, int depth)
+{
+        if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_query_domain_info");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_0 ", ps, depth, &r_u->ptr_0))
+		return False;
+
+	if (r_u->ptr_0 != 0 && r_u->ctr != NULL) {
+		if(!prs_uint16("switch_value", ps, depth, &r_u->switch_value))
+			return False;
+		if(!prs_align(ps))
+			return False;
+
+		switch (r_u->switch_value) {
+		case 0x0d:
+			if(!sam_io_unk_info13("unk_inf13", &r_u->ctr->info.inf13, ps, depth))
+				return False;
+			break;
+		case 0x0c:
+			if(!sam_io_unk_info12("unk_inf12", &r_u->ctr->info.inf12, ps, depth))
+				return False;
+			break;
+		case 0x09:
+			if(!sam_io_unk_info9("unk_inf9",&r_u->ctr->info.inf9, ps,depth))
+				return False;
+			break;
+		case 0x08:
+			if(!sam_io_unk_info8("unk_inf8",&r_u->ctr->info.inf8, ps,depth))
+				return False;
+			break;
+		case 0x07:
+			if(!sam_io_unk_info7("unk_inf7",&r_u->ctr->info.inf7, ps,depth))
+				return False;
+			break;
+		case 0x06:
+			if(!sam_io_unk_info6("unk_inf6",&r_u->ctr->info.inf6, ps,depth))
+				return False;
+			break;
+		case 0x05:
+			if(!sam_io_unk_info5("unk_inf5",&r_u->ctr->info.inf5, ps,depth))
+				return False;
+			break;
+		case 0x04:
+			if(!sam_io_unk_info4("unk_inf4",&r_u->ctr->info.inf4, ps,depth))
+				return False;
+			break;
+		case 0x03:
+			if(!sam_io_unk_info3("unk_inf3",&r_u->ctr->info.inf3, ps,depth))
+				return False;
+			break;
+		case 0x02:
+			if(!sam_io_unk_info2("unk_inf2",&r_u->ctr->info.inf2, ps,depth))
+				return False;
+			break;
+		case 0x01:
+			if(!sam_io_unk_info1("unk_inf1",&r_u->ctr->info.inf1, ps,depth))
+				return False;
+			break;
+		default:
+			DEBUG(0, ("samr_io_r_query_domain_info: unknown switch level 0x%x\n",
+				r_u->switch_value));
+			r_u->status = NT_STATUS_INVALID_INFO_CLASS;
+			return False;
+		}
+	}
+	
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+	
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+void init_samr_q_set_sec_obj(SAMR_Q_SET_SEC_OBJ * q_u,
+			     POLICY_HND *pol, uint32 sec_info, SEC_DESC_BUF *buf)
+{
+	DEBUG(5, ("samr_init_samr_q_set_sec_obj\n"));
+
+	q_u->pol = *pol;
+	q_u->sec_info = sec_info;
+	q_u->buf = buf;
+}
+
+
+/*******************************************************************
+reads or writes a SAMR_R_SET_SEC_OBJ structure.
+********************************************************************/
+
+BOOL samr_io_r_set_sec_obj(const char *desc, SAMR_R_SET_SEC_OBJ * r_u,
+			     prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+  
+	prs_debug(ps, depth, desc, "samr_io_r_set_sec_obj");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a SAMR_R_QUERY_SEC_OBJ structure.
+********************************************************************/
+
+BOOL samr_io_r_query_sec_obj(const char *desc, SAMR_R_QUERY_SEC_OBJ * r_u,
+			     prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+  
+	prs_debug(ps, depth, desc, "samr_io_r_query_sec_obj");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr", ps, depth, &r_u->ptr))
+		return False;
+	if (r_u->ptr != 0) {
+		if(!sec_io_desc_buf("sec", &r_u->buf, ps, depth))
+			return False;
+	}
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a SAM_STR1 structure.
+********************************************************************/
+
+static BOOL sam_io_sam_str1(const char *desc, SAM_STR1 * sam, uint32 acct_buf,
+			    uint32 name_buf, uint32 desc_buf,
+			    prs_struct *ps, int depth)
+{
+	if (sam == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_sam_str1");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	if (!smb_io_unistr2("name", &sam->uni_acct_name, acct_buf, ps, depth))
+		return False;
+
+	if (!smb_io_unistr2("desc", &sam->uni_acct_desc, desc_buf, ps, depth))
+		return False;
+
+	if (!smb_io_unistr2("full", &sam->uni_full_name, name_buf, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAM_ENTRY1 structure.
+********************************************************************/
+
+static void init_sam_entry1(SAM_ENTRY1 *sam, uint32 user_idx,
+			    UNISTR2 *sam_name, UNISTR2 *sam_full,
+			    UNISTR2 *sam_desc, uint32 rid_user,
+			    uint32 acb_info)
+{
+	DEBUG(5, ("init_sam_entry1\n"));
+
+	ZERO_STRUCTP(sam);
+
+	sam->user_idx = user_idx;
+	sam->rid_user = rid_user;
+	sam->acb_info = acb_info;
+
+	init_uni_hdr(&sam->hdr_acct_name, sam_name);
+	init_uni_hdr(&sam->hdr_user_name, sam_full);
+	init_uni_hdr(&sam->hdr_user_desc, sam_desc);
+}
+
+/*******************************************************************
+reads or writes a SAM_ENTRY1 structure.
+********************************************************************/
+
+static BOOL sam_io_sam_entry1(const char *desc, SAM_ENTRY1 * sam,
+			      prs_struct *ps, int depth)
+{
+	if (sam == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_sam_entry1");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("user_idx ", ps, depth, &sam->user_idx))
+		return False;
+
+	if(!prs_uint32("rid_user ", ps, depth, &sam->rid_user))
+		return False;
+	if(!prs_uint32("acb_info ", ps, depth, &sam->acb_info))
+		return False;
+
+	if (!smb_io_unihdr("hdr_acct_name", &sam->hdr_acct_name, ps, depth))
+		return False;
+	if (!smb_io_unihdr("hdr_user_desc", &sam->hdr_user_desc, ps, depth))
+		return False;
+	if (!smb_io_unihdr("hdr_user_name", &sam->hdr_user_name, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a SAM_STR2 structure.
+********************************************************************/
+
+static BOOL sam_io_sam_str2(const char *desc, SAM_STR2 * sam, uint32 acct_buf,
+			    uint32 desc_buf, prs_struct *ps, int depth)
+{
+	if (sam == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_sam_str2");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_unistr2("uni_srv_name", &sam->uni_srv_name, acct_buf, ps, depth)) /* account name unicode string */
+		return False;
+	if(!smb_io_unistr2("uni_srv_desc", &sam->uni_srv_desc, desc_buf, ps, depth))	/* account desc unicode string */
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAM_ENTRY2 structure.
+********************************************************************/
+static void init_sam_entry2(SAM_ENTRY2 * sam, uint32 user_idx,
+			    UNISTR2 *sam_name, UNISTR2 *sam_desc,
+			    uint32 rid_user, uint32 acb_info)
+{
+	DEBUG(5, ("init_sam_entry2\n"));
+
+	sam->user_idx = user_idx;
+	sam->rid_user = rid_user;
+	sam->acb_info = acb_info;
+
+	init_uni_hdr(&sam->hdr_srv_name, sam_name);
+	init_uni_hdr(&sam->hdr_srv_desc, sam_desc);
+}
+
+/*******************************************************************
+reads or writes a SAM_ENTRY2 structure.
+********************************************************************/
+
+static BOOL sam_io_sam_entry2(const char *desc, SAM_ENTRY2 * sam,
+			      prs_struct *ps, int depth)
+{
+	if (sam == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_sam_entry2");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("user_idx ", ps, depth, &sam->user_idx))
+		return False;
+
+	if(!prs_uint32("rid_user ", ps, depth, &sam->rid_user))
+		return False;
+	if(!prs_uint32("acb_info ", ps, depth, &sam->acb_info))
+		return False;
+
+	if(!smb_io_unihdr("unihdr", &sam->hdr_srv_name, ps, depth))	/* account name unicode string header */
+		return False;
+	if(!smb_io_unihdr("unihdr", &sam->hdr_srv_desc, ps, depth))	/* account name unicode string header */
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a SAM_STR3 structure.
+********************************************************************/
+
+static BOOL sam_io_sam_str3(const char *desc, SAM_STR3 * sam, uint32 acct_buf,
+			    uint32 desc_buf, prs_struct *ps, int depth)
+{
+	if (sam == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_sam_str3");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_unistr2("uni_grp_name", &sam->uni_grp_name, acct_buf, ps, depth))	/* account name unicode string */
+		return False;
+	if(!smb_io_unistr2("uni_grp_desc", &sam->uni_grp_desc, desc_buf, ps, depth))	/* account desc unicode string */
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAM_ENTRY3 structure.
+********************************************************************/
+
+static void init_sam_entry3(SAM_ENTRY3 * sam, uint32 grp_idx,
+			    UNISTR2 *grp_name, UNISTR2 *grp_desc,
+			    uint32 rid_grp)
+{
+	DEBUG(5, ("init_sam_entry3\n"));
+
+	sam->grp_idx = grp_idx;
+	sam->rid_grp = rid_grp;
+	sam->attr = 0x07;	/* group rid attributes - gets ignored by nt 4.0 */
+
+	init_uni_hdr(&sam->hdr_grp_name, grp_name);
+	init_uni_hdr(&sam->hdr_grp_desc, grp_desc);
+}
+
+/*******************************************************************
+reads or writes a SAM_ENTRY3 structure.
+********************************************************************/
+
+static BOOL sam_io_sam_entry3(const char *desc, SAM_ENTRY3 * sam,
+			      prs_struct *ps, int depth)
+{
+	if (sam == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_sam_entry3");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("grp_idx", ps, depth, &sam->grp_idx))
+		return False;
+
+	if(!prs_uint32("rid_grp", ps, depth, &sam->rid_grp))
+		return False;
+	if(!prs_uint32("attr   ", ps, depth, &sam->attr))
+		return False;
+
+	if(!smb_io_unihdr("unihdr", &sam->hdr_grp_name, ps, depth))	/* account name unicode string header */
+		return False;
+	if(!smb_io_unihdr("unihdr", &sam->hdr_grp_desc, ps, depth))	/* account name unicode string header */
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAM_ENTRY4 structure.
+********************************************************************/
+
+static void init_sam_entry4(SAM_ENTRY4 * sam, uint32 user_idx,
+			    uint32 len_acct_name)
+{
+	DEBUG(5, ("init_sam_entry4\n"));
+
+	sam->user_idx = user_idx;
+	init_str_hdr(&sam->hdr_acct_name, len_acct_name+1, len_acct_name, len_acct_name != 0);
+}
+
+/*******************************************************************
+reads or writes a SAM_ENTRY4 structure.
+********************************************************************/
+
+static BOOL sam_io_sam_entry4(const char *desc, SAM_ENTRY4 * sam,
+			      prs_struct *ps, int depth)
+{
+	if (sam == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_sam_entry4");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("user_idx", ps, depth, &sam->user_idx))
+		return False;
+	if(!smb_io_strhdr("strhdr", &sam->hdr_acct_name, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAM_ENTRY5 structure.
+********************************************************************/
+
+static void init_sam_entry5(SAM_ENTRY5 * sam, uint32 grp_idx,
+			    uint32 len_grp_name)
+{
+	DEBUG(5, ("init_sam_entry5\n"));
+
+	sam->grp_idx = grp_idx;
+	init_str_hdr(&sam->hdr_grp_name, len_grp_name, len_grp_name,
+		     len_grp_name != 0);
+}
+
+/*******************************************************************
+reads or writes a SAM_ENTRY5 structure.
+********************************************************************/
+
+static BOOL sam_io_sam_entry5(const char *desc, SAM_ENTRY5 * sam,
+			      prs_struct *ps, int depth)
+{
+	if (sam == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_sam_entry5");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("grp_idx", ps, depth, &sam->grp_idx))
+		return False;
+	if(!smb_io_strhdr("strhdr", &sam->hdr_grp_name, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAM_ENTRY structure.
+********************************************************************/
+
+void init_sam_entry(SAM_ENTRY *sam, UNISTR2 *uni2, uint32 rid)
+{
+	DEBUG(10, ("init_sam_entry: %d\n", rid));
+
+	sam->rid = rid;
+	init_uni_hdr(&sam->hdr_name, uni2);
+}
+
+/*******************************************************************
+reads or writes a SAM_ENTRY structure.
+********************************************************************/
+
+static BOOL sam_io_sam_entry(const char *desc, SAM_ENTRY * sam,
+			     prs_struct *ps, int depth)
+{
+	if (sam == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_sam_entry");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("rid", ps, depth, &sam->rid))
+		return False;
+	if(!smb_io_unihdr("unihdr", &sam->hdr_name, ps, depth))	/* account name unicode string header */
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_ENUM_DOM_USERS structure.
+********************************************************************/
+
+void init_samr_q_enum_dom_users(SAMR_Q_ENUM_DOM_USERS * q_e, POLICY_HND *pol,
+				uint32 start_idx,
+				uint32 acb_mask, uint32 size)
+{
+	DEBUG(5, ("init_samr_q_enum_dom_users\n"));
+
+	q_e->pol = *pol;
+
+	q_e->start_idx = start_idx;	/* zero indicates lots */
+	q_e->acb_mask = acb_mask;
+	q_e->max_size = size;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_enum_dom_users(const char *desc, SAMR_Q_ENUM_DOM_USERS * q_e,
+			      prs_struct *ps, int depth)
+{
+	if (q_e == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_enum_dom_users");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("domain_pol", &q_e->pol, ps, depth))
+		return False;
+
+	if(!prs_uint32("start_idx", ps, depth, &q_e->start_idx))
+		return False;
+	if(!prs_uint32("acb_mask ", ps, depth, &q_e->acb_mask))
+		return False;
+
+	if(!prs_uint32("max_size ", ps, depth, &q_e->max_size))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+inits a SAMR_R_ENUM_DOM_USERS structure.
+********************************************************************/
+
+void init_samr_r_enum_dom_users(SAMR_R_ENUM_DOM_USERS * r_u,
+				uint32 next_idx, uint32 num_sam_entries)
+{
+	DEBUG(5, ("init_samr_r_enum_dom_users\n"));
+
+	r_u->next_idx = next_idx;
+
+	if (num_sam_entries != 0) {
+		r_u->ptr_entries1 = 1;
+		r_u->ptr_entries2 = 1;
+		r_u->num_entries2 = num_sam_entries;
+		r_u->num_entries3 = num_sam_entries;
+
+		r_u->num_entries4 = num_sam_entries;
+	} else {
+		r_u->ptr_entries1 = 0;
+		r_u->num_entries2 = num_sam_entries;
+		r_u->ptr_entries2 = 1;
+	}
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_enum_dom_users(const char *desc, SAMR_R_ENUM_DOM_USERS * r_u,
+			      prs_struct *ps, int depth)
+{
+	uint32 i;
+
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_enum_dom_users");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("next_idx    ", ps, depth, &r_u->next_idx))
+		return False;
+	if(!prs_uint32("ptr_entries1", ps, depth, &r_u->ptr_entries1))
+		return False;
+
+	if (r_u->ptr_entries1 != 0) {
+		if(!prs_uint32("num_entries2", ps, depth, &r_u->num_entries2))
+			return False;
+		if(!prs_uint32("ptr_entries2", ps, depth, &r_u->ptr_entries2))
+			return False;
+		if(!prs_uint32("num_entries3", ps, depth, &r_u->num_entries3))
+			return False;
+
+		if (UNMARSHALLING(ps) && (r_u->num_entries2 != 0)) {
+			r_u->sam = PRS_ALLOC_MEM(ps,SAM_ENTRY, r_u->num_entries2);
+			r_u->uni_acct_name = PRS_ALLOC_MEM(ps,UNISTR2, r_u->num_entries2);
+		}
+
+		if ((r_u->sam == NULL || r_u->uni_acct_name == NULL) && r_u->num_entries2 != 0) {
+			DEBUG(0,("NULL pointers in SAMR_R_ENUM_DOM_USERS\n"));
+			r_u->num_entries4 = 0;
+			r_u->status = NT_STATUS_MEMORY_NOT_ALLOCATED;
+			return False;
+		}
+
+		for (i = 0; i < r_u->num_entries2; i++) {
+			if(!sam_io_sam_entry("", &r_u->sam[i], ps, depth))
+				return False;
+		}
+
+		for (i = 0; i < r_u->num_entries2; i++) {
+			if(!smb_io_unistr2("", &r_u->uni_acct_name[i],r_u->sam[i].hdr_name.buffer, ps,depth))
+				return False;
+		}
+
+	}
+
+	if(!prs_align(ps))
+		return False;
+		
+	if(!prs_uint32("num_entries4", ps, depth, &r_u->num_entries4))
+		return False;
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_QUERY_DISPINFO structure.
+********************************************************************/
+
+void init_samr_q_query_dispinfo(SAMR_Q_QUERY_DISPINFO * q_e, POLICY_HND *pol,
+				uint16 switch_level, uint32 start_idx,
+				uint32 max_entries, uint32 max_size)
+{
+	DEBUG(5, ("init_samr_q_query_dispinfo\n"));
+
+	q_e->domain_pol = *pol;
+
+	q_e->switch_level = switch_level;
+
+	q_e->start_idx = start_idx;
+	q_e->max_entries = max_entries;
+	q_e->max_size = max_size;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_query_dispinfo(const char *desc, SAMR_Q_QUERY_DISPINFO * q_e,
+			      prs_struct *ps, int depth)
+{
+	if (q_e == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_query_dispinfo");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("domain_pol", &q_e->domain_pol, ps, depth))
+		return False;
+
+	if(!prs_uint16("switch_level", ps, depth, &q_e->switch_level))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("start_idx   ", ps, depth, &q_e->start_idx))
+		return False;
+	if(!prs_uint32("max_entries ", ps, depth, &q_e->max_entries))
+		return False;
+	if(!prs_uint32("max_size    ", ps, depth, &q_e->max_size))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAM_DISPINFO_1 structure.
+********************************************************************/
+
+NTSTATUS init_sam_dispinfo_1(TALLOC_CTX *ctx, SAM_DISPINFO_1 **sam,
+			     uint32 num_entries, uint32 start_idx,
+			     struct samr_displayentry *entries)
+{
+	uint32 i;
+
+	DEBUG(10, ("init_sam_dispinfo_1: num_entries: %d\n", num_entries));
+
+	if (num_entries==0)
+		return NT_STATUS_OK;
+
+	*sam = TALLOC_ZERO_ARRAY(ctx, SAM_DISPINFO_1, num_entries);
+	if (*sam == NULL)
+		return NT_STATUS_NO_MEMORY;
+
+	(*sam)->sam=TALLOC_ARRAY(ctx, SAM_ENTRY1, num_entries);
+	if ((*sam)->sam == NULL)
+		return NT_STATUS_NO_MEMORY;
+
+	(*sam)->str=TALLOC_ARRAY(ctx, SAM_STR1, num_entries);
+	if ((*sam)->str == NULL)
+		return NT_STATUS_NO_MEMORY;
+
+	for (i = 0; i < num_entries ; i++) {
+		init_unistr2(&(*sam)->str[i].uni_acct_name,
+			     entries[i].account_name, UNI_FLAGS_NONE);
+		init_unistr2(&(*sam)->str[i].uni_full_name,
+			     entries[i].fullname, UNI_FLAGS_NONE);
+		init_unistr2(&(*sam)->str[i].uni_acct_desc,
+			     entries[i].description, UNI_FLAGS_NONE);
+
+		init_sam_entry1(&(*sam)->sam[i], start_idx+i+1,
+				&(*sam)->str[i].uni_acct_name,
+				&(*sam)->str[i].uni_full_name,
+				&(*sam)->str[i].uni_acct_desc,
+				entries[i].rid, entries[i].acct_flags);
+	}
+
+	return NT_STATUS_OK;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_sam_dispinfo_1(const char *desc, SAM_DISPINFO_1 * sam,
+				  uint32 num_entries,
+				  prs_struct *ps, int depth)
+{
+	uint32 i;
+
+	prs_debug(ps, depth, desc, "sam_io_sam_dispinfo_1");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if (UNMARSHALLING(ps) && num_entries > 0) {
+
+		if ((sam->sam = PRS_ALLOC_MEM(ps, SAM_ENTRY1, num_entries)) == NULL) {
+			DEBUG(0, ("out of memory allocating SAM_ENTRY1\n"));
+			return False;
+		}
+
+		if ((sam->str = PRS_ALLOC_MEM(ps, SAM_STR1, num_entries)) == NULL) {
+			DEBUG(0, ("out of memory allocating SAM_STR1\n"));
+			return False;
+		}
+	}
+
+	for (i = 0; i < num_entries; i++) {
+		if(!sam_io_sam_entry1("", &sam->sam[i], ps, depth))
+			return False;
+	}
+
+	for (i = 0; i < num_entries; i++) {
+		if(!sam_io_sam_str1("", &sam->str[i],
+			      sam->sam[i].hdr_acct_name.buffer,
+			      sam->sam[i].hdr_user_name.buffer,
+			      sam->sam[i].hdr_user_desc.buffer, ps, depth))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAM_DISPINFO_2 structure.
+********************************************************************/
+
+NTSTATUS init_sam_dispinfo_2(TALLOC_CTX *ctx, SAM_DISPINFO_2 **sam,
+			     uint32 num_entries, uint32 start_idx,
+			     struct samr_displayentry *entries)
+{
+	uint32 i;
+
+	DEBUG(10, ("init_sam_dispinfo_2: num_entries: %d\n", num_entries));
+
+	if (num_entries==0)
+		return NT_STATUS_OK;
+
+	*sam = TALLOC_ZERO_ARRAY(ctx, SAM_DISPINFO_2, num_entries);
+	if (*sam == NULL)
+		return NT_STATUS_NO_MEMORY;
+
+	(*sam)->sam = TALLOC_ARRAY(ctx, SAM_ENTRY2, num_entries);
+	if ((*sam)->sam == NULL)
+		return NT_STATUS_NO_MEMORY;
+
+	(*sam)->str=TALLOC_ARRAY(ctx, SAM_STR2, num_entries);
+	if ((*sam)->str == NULL)
+		return NT_STATUS_NO_MEMORY;
+
+	for (i = 0; i < num_entries; i++) {
+		init_unistr2(&(*sam)->str[i].uni_srv_name,
+			     entries[i].account_name, UNI_FLAGS_NONE);
+		init_unistr2(&(*sam)->str[i].uni_srv_desc,
+			     entries[i].description, UNI_FLAGS_NONE);
+
+		init_sam_entry2(&(*sam)->sam[i], start_idx + i + 1,
+				&(*sam)->str[i].uni_srv_name,
+				&(*sam)->str[i].uni_srv_desc,
+				entries[i].rid, entries[i].acct_flags);
+	}
+
+	return NT_STATUS_OK;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_sam_dispinfo_2(const char *desc, SAM_DISPINFO_2 * sam,
+				  uint32 num_entries,
+				  prs_struct *ps, int depth)
+{
+	uint32 i;
+
+	if (sam == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_sam_dispinfo_2");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if (UNMARSHALLING(ps) && num_entries > 0) {
+
+		if ((sam->sam = PRS_ALLOC_MEM(ps, SAM_ENTRY2, num_entries)) == NULL) {
+			DEBUG(0, ("out of memory allocating SAM_ENTRY2\n"));
+			return False;
+		}
+
+		if ((sam->str = PRS_ALLOC_MEM(ps, SAM_STR2, num_entries)) == NULL) {
+			DEBUG(0, ("out of memory allocating SAM_STR2\n"));
+			return False;
+		}
+	}
+
+	for (i = 0; i < num_entries; i++) {
+		if(!sam_io_sam_entry2("", &sam->sam[i], ps, depth))
+			return False;
+	}
+
+	for (i = 0; i < num_entries; i++) {
+		if(!sam_io_sam_str2("", &sam->str[i],
+			      sam->sam[i].hdr_srv_name.buffer,
+			      sam->sam[i].hdr_srv_desc.buffer, ps, depth))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAM_DISPINFO_3 structure.
+********************************************************************/
+
+NTSTATUS init_sam_dispinfo_3(TALLOC_CTX *ctx, SAM_DISPINFO_3 **sam,
+			     uint32 num_entries, uint32 start_idx,
+			     struct samr_displayentry *entries)
+{
+	uint32 i;
+
+	DEBUG(5, ("init_sam_dispinfo_3: num_entries: %d\n", num_entries));
+
+	if (num_entries==0)
+		return NT_STATUS_OK;
+
+	*sam = TALLOC_ZERO_ARRAY(ctx, SAM_DISPINFO_3, num_entries);
+	if (*sam == NULL)
+		return NT_STATUS_NO_MEMORY;
+
+	if (!((*sam)->sam=TALLOC_ARRAY(ctx, SAM_ENTRY3, num_entries)))
+		return NT_STATUS_NO_MEMORY;
+
+	if (!((*sam)->str=TALLOC_ARRAY(ctx, SAM_STR3, num_entries)))
+		return NT_STATUS_NO_MEMORY;
+
+	for (i = 0; i < num_entries; i++) {
+		DEBUG(11, ("init_sam_dispinfo_3: entry: %d\n",i));
+
+		init_unistr2(&(*sam)->str[i].uni_grp_name,
+			     entries[i].account_name, UNI_FLAGS_NONE);
+		init_unistr2(&(*sam)->str[i].uni_grp_desc,
+			     entries[i].description, UNI_FLAGS_NONE);
+
+		init_sam_entry3(&(*sam)->sam[i], start_idx+i+1,
+				&(*sam)->str[i].uni_grp_name,
+				&(*sam)->str[i].uni_grp_desc,
+				entries[i].rid);
+	}
+
+	return NT_STATUS_OK;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_sam_dispinfo_3(const char *desc, SAM_DISPINFO_3 * sam,
+				  uint32 num_entries,
+				  prs_struct *ps, int depth)
+{
+	uint32 i;
+
+	if (sam == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_sam_dispinfo_3");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if (UNMARSHALLING(ps) && num_entries > 0) {
+
+		if ((sam->sam = PRS_ALLOC_MEM(ps, SAM_ENTRY3, num_entries)) == NULL) {
+			DEBUG(0, ("out of memory allocating SAM_ENTRY3\n"));
+			return False;
+		}
+
+		if ((sam->str = PRS_ALLOC_MEM(ps, SAM_STR3, num_entries)) == NULL) {
+			DEBUG(0, ("out of memory allocating SAM_STR3\n"));
+			return False;
+		}
+	}
+
+	for (i = 0; i < num_entries; i++) {
+		if(!sam_io_sam_entry3("", &sam->sam[i], ps, depth))
+			return False;
+	}
+
+	for (i = 0; i < num_entries; i++) {
+		if(!sam_io_sam_str3("", &sam->str[i],
+			      sam->sam[i].hdr_grp_name.buffer,
+			      sam->sam[i].hdr_grp_desc.buffer, ps, depth))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAM_DISPINFO_4 structure.
+********************************************************************/
+
+NTSTATUS init_sam_dispinfo_4(TALLOC_CTX *ctx, SAM_DISPINFO_4 **sam,
+			     uint32 num_entries, uint32 start_idx,
+			     struct samr_displayentry *entries)
+{
+	uint32 i;
+
+	DEBUG(5, ("init_sam_dispinfo_4: num_entries: %d\n", num_entries));
+
+	if (num_entries==0)
+		return NT_STATUS_OK;
+
+	*sam = TALLOC_ZERO_ARRAY(ctx, SAM_DISPINFO_4, num_entries);
+	if (*sam == NULL)
+		return NT_STATUS_NO_MEMORY;
+
+	(*sam)->sam = TALLOC_ARRAY(ctx, SAM_ENTRY4, num_entries);
+	if ((*sam)->sam == NULL)
+		return NT_STATUS_NO_MEMORY;
+
+	(*sam)->str=TALLOC_ARRAY(ctx, SAM_STR4, num_entries);
+	if ((*sam)->str == NULL)
+		return NT_STATUS_NO_MEMORY;
+
+	for (i = 0; i < num_entries; i++) {
+		size_t len_sam_name = strlen(entries[i].account_name);
+
+		DEBUG(11, ("init_sam_dispinfo_2: entry: %d\n",i));
+	  
+		init_sam_entry4(&(*sam)->sam[i], start_idx + i + 1,
+				len_sam_name);
+
+		init_string2(&(*sam)->str[i].acct_name,
+			     entries[i].account_name, len_sam_name+1,
+			     len_sam_name);
+	}
+	
+	return NT_STATUS_OK;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_sam_dispinfo_4(const char *desc, SAM_DISPINFO_4 * sam,
+				  uint32 num_entries,
+				  prs_struct *ps, int depth)
+{
+	uint32 i;
+
+	if (sam == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_sam_dispinfo_4");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if (UNMARSHALLING(ps) && num_entries > 0) {
+
+		if ((sam->sam = PRS_ALLOC_MEM(ps, SAM_ENTRY4, num_entries)) == NULL) {
+			DEBUG(0, ("out of memory allocating SAM_ENTRY4\n"));
+			return False;
+		}
+
+		if ((sam->str = PRS_ALLOC_MEM(ps, SAM_STR4, num_entries)) == NULL) {
+			DEBUG(0, ("out of memory allocating SAM_STR4\n"));
+			return False;
+		}
+	}
+
+	for (i = 0; i < num_entries; i++) {
+		if(!sam_io_sam_entry4("", &sam->sam[i], ps, depth))
+			return False;
+	}
+
+	for (i = 0; i < num_entries; i++) {
+		if(!smb_io_string2("acct_name", &sam->str[i].acct_name,
+			     sam->sam[i].hdr_acct_name.buffer, ps, depth))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAM_DISPINFO_5 structure.
+********************************************************************/
+
+NTSTATUS init_sam_dispinfo_5(TALLOC_CTX *ctx, SAM_DISPINFO_5 **sam,
+			     uint32 num_entries, uint32 start_idx,
+			     struct samr_displayentry *entries)
+{
+	uint32 len_sam_name;
+	uint32 i;
+
+	DEBUG(5, ("init_sam_dispinfo_5: num_entries: %d\n", num_entries));
+
+	if (num_entries==0)
+		return NT_STATUS_OK;
+
+	*sam = TALLOC_ZERO_ARRAY(ctx, SAM_DISPINFO_5, num_entries);
+	if (*sam == NULL)
+		return NT_STATUS_NO_MEMORY;
+
+	if (!((*sam)->sam=TALLOC_ARRAY(ctx, SAM_ENTRY5, num_entries)))
+		return NT_STATUS_NO_MEMORY;
+
+	if (!((*sam)->str=TALLOC_ARRAY(ctx, SAM_STR5, num_entries)))
+		return NT_STATUS_NO_MEMORY;
+
+	for (i = 0; i < num_entries; i++) {
+		DEBUG(11, ("init_sam_dispinfo_5: entry: %d\n",i));
+
+		len_sam_name = strlen(entries[i].account_name);
+	  
+		init_sam_entry5(&(*sam)->sam[i], start_idx+i+1, len_sam_name);
+		init_string2(&(*sam)->str[i].grp_name, entries[i].account_name,
+			     len_sam_name+1, len_sam_name);
+	}
+
+	return NT_STATUS_OK;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_sam_dispinfo_5(const char *desc, SAM_DISPINFO_5 * sam,
+				  uint32 num_entries,
+				  prs_struct *ps, int depth)
+{
+	uint32 i;
+
+	if (sam == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_sam_dispinfo_5");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if (UNMARSHALLING(ps) && num_entries > 0) {
+
+		if ((sam->sam = PRS_ALLOC_MEM(ps, SAM_ENTRY5, num_entries)) == NULL) {
+			DEBUG(0, ("out of memory allocating SAM_ENTRY5\n"));
+			return False;
+		}
+
+		if ((sam->str = PRS_ALLOC_MEM(ps, SAM_STR5, num_entries)) == NULL) {
+			DEBUG(0, ("out of memory allocating SAM_STR5\n"));
+			return False;
+		}
+	}
+
+	for (i = 0; i < num_entries; i++) {
+		if(!sam_io_sam_entry5("", &sam->sam[i], ps, depth))
+			return False;
+	}
+
+	for (i = 0; i < num_entries; i++) {
+		if(!smb_io_string2("grp_name", &sam->str[i].grp_name,
+			     sam->sam[i].hdr_grp_name.buffer, ps, depth))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_R_QUERY_DISPINFO structure.
+********************************************************************/
+
+void init_samr_r_query_dispinfo(SAMR_R_QUERY_DISPINFO * r_u,
+				uint32 num_entries, uint32 total_size, uint32 data_size,
+				uint16 switch_level, SAM_DISPINFO_CTR * ctr,
+				NTSTATUS status)
+{
+	DEBUG(5, ("init_samr_r_query_dispinfo: level %d\n", switch_level));
+
+	r_u->total_size = total_size;
+
+	r_u->data_size = data_size;
+
+	r_u->switch_level = switch_level;
+	r_u->num_entries = num_entries;
+
+	if (num_entries==0)
+		r_u->ptr_entries = 0;
+	else
+		r_u->ptr_entries = 1;
+
+	r_u->num_entries2 = num_entries;
+	r_u->ctr = ctr;
+
+	r_u->status = status;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_query_dispinfo(const char *desc, SAMR_R_QUERY_DISPINFO * r_u,
+			      prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_query_dispinfo");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("total_size  ", ps, depth, &r_u->total_size))
+		return False;
+	if(!prs_uint32("data_size   ", ps, depth, &r_u->data_size))
+		return False;
+	if(!prs_uint16("switch_level", ps, depth, &r_u->switch_level))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("num_entries ", ps, depth, &r_u->num_entries))
+		return False;
+	if(!prs_uint32("ptr_entries ", ps, depth, &r_u->ptr_entries))
+		return False;
+
+	if (r_u->ptr_entries==0) {
+		if(!prs_align(ps))
+			return False;
+		if(!prs_ntstatus("status", ps, depth, &r_u->status))
+			return False;
+
+		return True;
+	}
+
+	if(!prs_uint32("num_entries2", ps, depth, &r_u->num_entries2))
+		return False;
+
+	switch (r_u->switch_level) {
+	case 0x1:
+		if(!sam_io_sam_dispinfo_1("users", r_u->ctr->sam.info1,
+				r_u->num_entries, ps, depth))
+			return False;
+		break;
+	case 0x2:
+		if(!sam_io_sam_dispinfo_2("servers", r_u->ctr->sam.info2,
+				r_u->num_entries, ps, depth))
+			return False;
+		break;
+	case 0x3:
+		if(!sam_io_sam_dispinfo_3("groups", r_u->ctr->sam.info3,
+				    r_u->num_entries, ps, depth))
+			return False;
+		break;
+	case 0x4:
+		if(!sam_io_sam_dispinfo_4("user list",
+				    r_u->ctr->sam.info4,
+				    r_u->num_entries, ps, depth))
+			return False;
+		break;
+	case 0x5:
+		if(!sam_io_sam_dispinfo_5("group list",
+				    r_u->ctr->sam.info5,
+				    r_u->num_entries, ps, depth))
+			return False;
+		break;
+	default:
+		DEBUG(0,("samr_io_r_query_dispinfo: unknown switch value\n"));
+		break;
+	}
+	
+	if(!prs_align(ps))
+		return False;
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_GET_DISPENUM_INDEX structure.
+********************************************************************/
+
+void init_samr_q_get_dispenum_index(SAMR_Q_GET_DISPENUM_INDEX * q_e, POLICY_HND *pol,
+				    uint16 switch_level, const char *name)
+{
+	DEBUG(5, ("init_samr_q_get_dispenum_index\n"));
+
+	q_e->domain_pol = *pol;
+
+	q_e->switch_level = switch_level;
+
+	init_lsa_string(&q_e->name, name);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_get_dispenum_index(const char *desc, SAMR_Q_GET_DISPENUM_INDEX * q_e,
+				  prs_struct *ps, int depth)
+{
+	if (q_e == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_get_dispenum_index");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("domain_pol", &q_e->domain_pol, ps, depth))
+		return False;
+
+	if(!prs_uint16("switch_level", ps, depth, &q_e->switch_level))
+		return False;
+
+	if (!smb_io_lsa_string("name", &q_e->name, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_get_dispenum_index(const char *desc, SAMR_R_GET_DISPENUM_INDEX * r_u,
+				  prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_get_dispenum_index");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("idx", ps, depth, &r_u->idx))
+		return False;
+	
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+inits a SAMR_Q_OPEN_GROUP structure.
+********************************************************************/
+
+void init_samr_q_open_group(SAMR_Q_OPEN_GROUP * q_c,
+			    POLICY_HND *hnd,
+			    uint32 access_mask, uint32 rid)
+{
+	DEBUG(5, ("init_samr_q_open_group\n"));
+
+	q_c->domain_pol = *hnd;
+	q_c->access_mask = access_mask;
+	q_c->rid_group = rid;
+}
+
+/*******************************************************************
+inits a SAMR_R_GET_DISPENUM_INDEX structure.
+********************************************************************/
+
+void init_samr_r_get_dispenum_index(SAMR_R_GET_DISPENUM_INDEX * q_e, uint32 idx)
+{
+	DEBUG(5, ("init_samr_r_get_dispenum_index\n"));
+
+	q_e->idx = idx;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_open_group(const char *desc, SAMR_Q_OPEN_GROUP * q_u,
+			  prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_open_group");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("domain_pol", &q_u->domain_pol, ps, depth))
+		return False;
+
+	if(!prs_uint32("access_mask", ps, depth, &q_u->access_mask))
+		return False;
+	if(!prs_uint32("rid_group", ps, depth, &q_u->rid_group))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_open_group(const char *desc, SAMR_R_OPEN_GROUP * r_u,
+			  prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_open_group");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &r_u->pol, ps, depth))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a GROUP_INFO1 structure.
+********************************************************************/
+
+void init_samr_group_info1(GROUP_INFO1 * gr1,
+			   char *acct_name, char *acct_desc,
+			   uint32 num_members)
+{
+	DEBUG(5, ("init_samr_group_info1\n"));
+
+	gr1->group_attr = (SE_GROUP_MANDATORY|SE_GROUP_ENABLED_BY_DEFAULT); /* why not | SE_GROUP_ENABLED ? */
+	gr1->num_members = num_members;
+
+	init_unistr2(&gr1->uni_acct_name, acct_name, UNI_FLAGS_NONE);
+	init_uni_hdr(&gr1->hdr_acct_name, &gr1->uni_acct_name);
+	init_unistr2(&gr1->uni_acct_desc, acct_desc, UNI_FLAGS_NONE);
+	init_uni_hdr(&gr1->hdr_acct_desc, &gr1->uni_acct_desc);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_group_info1(const char *desc, GROUP_INFO1 * gr1,
+			 prs_struct *ps, int depth)
+{
+	uint16 dummy = 1;
+
+	if (gr1 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_group_info1");
+	depth++;
+
+	if(!prs_uint16("level", ps, depth, &dummy))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_unihdr("hdr_acct_name", &gr1->hdr_acct_name, ps, depth))
+		return False;
+
+	if(!prs_uint32("group_attr", ps, depth, &gr1->group_attr))
+		return False;
+	if(!prs_uint32("num_members", ps, depth, &gr1->num_members))
+		return False;
+
+	if(!smb_io_unihdr("hdr_acct_desc", &gr1->hdr_acct_desc, ps, depth))
+		return False;
+
+	if(!smb_io_unistr2("uni_acct_name", &gr1->uni_acct_name,
+			   gr1->hdr_acct_name.buffer, ps, depth))
+		return False;
+
+	if(!smb_io_unistr2("uni_acct_desc", &gr1->uni_acct_desc,
+			   gr1->hdr_acct_desc.buffer, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a GROUP_INFO2 structure.
+********************************************************************/
+
+void init_samr_group_info2(GROUP_INFO2 * gr2, const char *acct_name)
+{
+	DEBUG(5, ("init_samr_group_info2\n"));
+
+	gr2->level = 2;
+	init_unistr2(&gr2->uni_acct_name, acct_name, UNI_FLAGS_NONE);
+	init_uni_hdr(&gr2->hdr_acct_name, &gr2->uni_acct_name);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_group_info2(const char *desc, GROUP_INFO2 *gr2, prs_struct *ps, int depth)
+{
+	if (gr2 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_group_info2");
+	depth++;
+
+	if(!prs_uint16("hdr_level", ps, depth, &gr2->level))
+		return False;
+
+	if(!smb_io_unihdr("hdr_acct_name", &gr2->hdr_acct_name, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni_acct_name", &gr2->uni_acct_name,
+			   gr2->hdr_acct_name.buffer, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a GROUP_INFO3 structure.
+********************************************************************/
+
+void init_samr_group_info3(GROUP_INFO3 *gr3)
+{
+	DEBUG(5, ("init_samr_group_info3\n"));
+
+	gr3->group_attr = (SE_GROUP_MANDATORY|SE_GROUP_ENABLED_BY_DEFAULT); /* why not | SE_GROUP_ENABLED ? */
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_group_info3(const char *desc, GROUP_INFO3 *gr3, prs_struct *ps, int depth)
+{
+	if (gr3 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_group_info3");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("group_attr", ps, depth, &gr3->group_attr))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a GROUP_INFO4 structure.
+********************************************************************/
+
+void init_samr_group_info4(GROUP_INFO4 * gr4, const char *acct_desc)
+{
+	DEBUG(5, ("init_samr_group_info4\n"));
+
+	gr4->level = 4;
+	init_unistr2(&gr4->uni_acct_desc, acct_desc, UNI_FLAGS_NONE);
+	init_uni_hdr(&gr4->hdr_acct_desc, &gr4->uni_acct_desc);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_group_info4(const char *desc, GROUP_INFO4 * gr4,
+			 prs_struct *ps, int depth)
+{
+	if (gr4 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_group_info4");
+	depth++;
+
+	if(!prs_uint16("hdr_level", ps, depth, &gr4->level))
+		return False;
+	if(!smb_io_unihdr("hdr_acct_desc", &gr4->hdr_acct_desc, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni_acct_desc", &gr4->uni_acct_desc,
+			   gr4->hdr_acct_desc.buffer, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a GROUP_INFO5 structure.
+********************************************************************/
+
+void init_samr_group_info5(GROUP_INFO5 * gr5,
+			   char *acct_name, char *acct_desc,
+			   uint32 num_members)
+{
+	DEBUG(5, ("init_samr_group_info5\n"));
+
+	gr5->group_attr = (SE_GROUP_MANDATORY|SE_GROUP_ENABLED_BY_DEFAULT); /* why not | SE_GROUP_ENABLED ? */
+	gr5->num_members = num_members;
+
+	init_unistr2(&gr5->uni_acct_name, acct_name, UNI_FLAGS_NONE);
+	init_uni_hdr(&gr5->hdr_acct_name, &gr5->uni_acct_name);
+	init_unistr2(&gr5->uni_acct_desc, acct_desc, UNI_FLAGS_NONE);
+	init_uni_hdr(&gr5->hdr_acct_desc, &gr5->uni_acct_desc);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_group_info5(const char *desc, GROUP_INFO5 * gr5,
+			 prs_struct *ps, int depth)
+{
+	uint16 dummy = 1;
+
+	if (gr5 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_group_info5");
+	depth++;
+
+	if(!prs_uint16("level", ps, depth, &dummy))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_unihdr("hdr_acct_name", &gr5->hdr_acct_name, ps, depth))
+		return False;
+
+	if(!prs_uint32("group_attr", ps, depth, &gr5->group_attr))
+		return False;
+	if(!prs_uint32("num_members", ps, depth, &gr5->num_members))
+		return False;
+
+	if(!smb_io_unihdr("hdr_acct_desc", &gr5->hdr_acct_desc, ps, depth))
+		return False;
+
+	if(!smb_io_unistr2("uni_acct_name", &gr5->uni_acct_name,
+			   gr5->hdr_acct_name.buffer, ps, depth))
+		return False;
+
+	if(!smb_io_unistr2("uni_acct_desc", &gr5->uni_acct_desc,
+			   gr5->hdr_acct_desc.buffer, ps, depth))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL samr_group_info_ctr(const char *desc, GROUP_INFO_CTR **ctr,
+				prs_struct *ps, int depth)
+{
+	if (UNMARSHALLING(ps))
+		*ctr = PRS_ALLOC_MEM(ps,GROUP_INFO_CTR,1);
+
+	if (*ctr == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_group_info_ctr");
+	depth++;
+
+	if(!prs_uint16("switch_value1", ps, depth, &(*ctr)->switch_value1))
+		return False;
+
+	switch ((*ctr)->switch_value1) {
+	case 1:
+		if(!samr_io_group_info1("group_info1", &(*ctr)->group.info1, ps, depth))
+			return False;
+		break;
+	case 2:
+		if(!samr_io_group_info2("group_info2", &(*ctr)->group.info2, ps, depth))
+			return False;
+		break;
+	case 3:
+		if(!samr_io_group_info3("group_info3", &(*ctr)->group.info3, ps, depth))
+			return False;
+		break;
+	case 4:
+		if(!samr_io_group_info4("group_info4", &(*ctr)->group.info4, ps, depth))
+			return False;
+		break;
+	case 5:
+		if(!samr_io_group_info5("group_info5", &(*ctr)->group.info5, ps, depth))
+			return False;
+		break;
+	default:
+		DEBUG(0,("samr_group_info_ctr: unsupported switch level\n"));
+		break;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_CREATE_DOM_GROUP structure.
+********************************************************************/
+
+void init_samr_q_create_dom_group(SAMR_Q_CREATE_DOM_GROUP * q_e,
+				  POLICY_HND *pol, const char *acct_desc,
+				  uint32 access_mask)
+{
+	DEBUG(5, ("init_samr_q_create_dom_group\n"));
+
+	q_e->pol = *pol;
+
+	init_unistr2(&q_e->uni_acct_desc, acct_desc, UNI_FLAGS_NONE);
+	init_uni_hdr(&q_e->hdr_acct_desc, &q_e->uni_acct_desc);
+
+	q_e->access_mask = access_mask;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_create_dom_group(const char *desc, SAMR_Q_CREATE_DOM_GROUP * q_e,
+				prs_struct *ps, int depth)
+{
+	if (q_e == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_create_dom_group");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &q_e->pol, ps, depth))
+		return False;
+
+	if(!smb_io_unihdr("hdr_acct_desc", &q_e->hdr_acct_desc, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni_acct_desc", &q_e->uni_acct_desc,
+		       q_e->hdr_acct_desc.buffer, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("access", ps, depth, &q_e->access_mask))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_create_dom_group(const char *desc, SAMR_R_CREATE_DOM_GROUP * r_u,
+				prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_create_dom_group");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &r_u->pol, ps, depth))
+		return False;
+
+	if(!prs_uint32("rid   ", ps, depth, &r_u->rid))
+		return False;
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_DELETE_DOM_GROUP structure.
+********************************************************************/
+
+void init_samr_q_delete_dom_group(SAMR_Q_DELETE_DOM_GROUP * q_c,
+				  POLICY_HND *hnd)
+{
+	DEBUG(5, ("init_samr_q_delete_dom_group\n"));
+
+	q_c->group_pol = *hnd;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_delete_dom_group(const char *desc, SAMR_Q_DELETE_DOM_GROUP * q_u,
+				prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_delete_dom_group");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("group_pol", &q_u->group_pol, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_delete_dom_group(const char *desc, SAMR_R_DELETE_DOM_GROUP * r_u,
+				prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_delete_dom_group");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &r_u->pol, ps, depth))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_DEL_GROUPMEM structure.
+********************************************************************/
+
+void init_samr_q_del_groupmem(SAMR_Q_DEL_GROUPMEM * q_e,
+			      POLICY_HND *pol, uint32 rid)
+{
+	DEBUG(5, ("init_samr_q_del_groupmem\n"));
+
+	q_e->pol = *pol;
+	q_e->rid = rid;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_del_groupmem(const char *desc, SAMR_Q_DEL_GROUPMEM * q_e,
+			    prs_struct *ps, int depth)
+{
+	if (q_e == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_del_groupmem");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &q_e->pol, ps, depth))
+		return False;
+
+	if(!prs_uint32("rid", ps, depth, &q_e->rid))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_R_DEL_GROUPMEM structure.
+********************************************************************/
+
+void init_samr_r_del_groupmem(SAMR_R_DEL_GROUPMEM * r_u, POLICY_HND *pol,
+			      NTSTATUS status)
+{
+	DEBUG(5, ("init_samr_r_del_groupmem\n"));
+
+	r_u->status = status;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_del_groupmem(const char *desc, SAMR_R_DEL_GROUPMEM * r_u,
+			    prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_del_groupmem");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_ADD_GROUPMEM structure.
+********************************************************************/
+
+void init_samr_q_add_groupmem(SAMR_Q_ADD_GROUPMEM * q_e,
+			      POLICY_HND *pol, uint32 rid)
+{
+	DEBUG(5, ("init_samr_q_add_groupmem\n"));
+
+	q_e->pol = *pol;
+	q_e->rid = rid;
+	q_e->unknown = 0x0005;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_add_groupmem(const char *desc, SAMR_Q_ADD_GROUPMEM * q_e,
+			    prs_struct *ps, int depth)
+{
+	if (q_e == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_add_groupmem");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &q_e->pol, ps, depth))
+		return False;
+
+	if(!prs_uint32("rid    ", ps, depth, &q_e->rid))
+		return False;
+	if(!prs_uint32("unknown", ps, depth, &q_e->unknown))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_R_ADD_GROUPMEM structure.
+********************************************************************/
+
+void init_samr_r_add_groupmem(SAMR_R_ADD_GROUPMEM * r_u, POLICY_HND *pol,
+			      NTSTATUS status)
+{
+	DEBUG(5, ("init_samr_r_add_groupmem\n"));
+
+	r_u->status = status;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_add_groupmem(const char *desc, SAMR_R_ADD_GROUPMEM * r_u,
+			    prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_add_groupmem");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_SET_GROUPINFO structure.
+********************************************************************/
+
+void init_samr_q_set_groupinfo(SAMR_Q_SET_GROUPINFO * q_e,
+			       POLICY_HND *pol, GROUP_INFO_CTR * ctr)
+{
+	DEBUG(5, ("init_samr_q_set_groupinfo\n"));
+
+	q_e->pol = *pol;
+	q_e->ctr = ctr;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_set_groupinfo(const char *desc, SAMR_Q_SET_GROUPINFO * q_e,
+			     prs_struct *ps, int depth)
+{
+	if (q_e == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_set_groupinfo");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &q_e->pol, ps, depth))
+		return False;
+	
+	if(!samr_group_info_ctr("ctr", &q_e->ctr, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_R_SET_GROUPINFO structure.
+********************************************************************/
+
+void init_samr_r_set_groupinfo(SAMR_R_SET_GROUPINFO * r_u, NTSTATUS status)
+{
+	DEBUG(5, ("init_samr_r_set_groupinfo\n"));
+
+	r_u->status = status;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_set_groupinfo(const char *desc, SAMR_R_SET_GROUPINFO * r_u,
+			     prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_set_groupinfo");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_QUERY_GROUPINFO structure.
+********************************************************************/
+
+void init_samr_q_query_groupinfo(SAMR_Q_QUERY_GROUPINFO * q_e,
+				 POLICY_HND *pol, uint16 switch_level)
+{
+	DEBUG(5, ("init_samr_q_query_groupinfo\n"));
+
+	q_e->pol = *pol;
+
+	q_e->switch_level = switch_level;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_query_groupinfo(const char *desc, SAMR_Q_QUERY_GROUPINFO * q_e,
+			       prs_struct *ps, int depth)
+{
+	if (q_e == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_query_groupinfo");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &q_e->pol, ps, depth))
+		return False;
+
+	if(!prs_uint16("switch_level", ps, depth, &q_e->switch_level))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_R_QUERY_GROUPINFO structure.
+********************************************************************/
+
+void init_samr_r_query_groupinfo(SAMR_R_QUERY_GROUPINFO * r_u,
+				 GROUP_INFO_CTR * ctr, NTSTATUS status)
+{
+	DEBUG(5, ("init_samr_r_query_groupinfo\n"));
+
+	r_u->ptr = (NT_STATUS_IS_OK(status) && ctr != NULL) ? 1 : 0;
+	r_u->ctr = ctr;
+	r_u->status = status;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_query_groupinfo(const char *desc, SAMR_R_QUERY_GROUPINFO * r_u,
+			       prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_query_groupinfo");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr", ps, depth, &r_u->ptr))
+		return False;
+
+	if (r_u->ptr != 0) {
+		if(!samr_group_info_ctr("ctr", &r_u->ctr, ps, depth))
+			return False;
+	}
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_QUERY_GROUPMEM structure.
+********************************************************************/
+
+void init_samr_q_query_groupmem(SAMR_Q_QUERY_GROUPMEM * q_c, POLICY_HND *hnd)
+{
+	DEBUG(5, ("init_samr_q_query_groupmem\n"));
+
+	q_c->group_pol = *hnd;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_query_groupmem(const char *desc, SAMR_Q_QUERY_GROUPMEM * q_u,
+			      prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_query_groupmem");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("group_pol", &q_u->group_pol, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_R_QUERY_GROUPMEM structure.
+********************************************************************/
+
+void init_samr_r_query_groupmem(SAMR_R_QUERY_GROUPMEM * r_u,
+				uint32 num_entries, uint32 *rid,
+				uint32 *attr, NTSTATUS status)
+{
+	DEBUG(5, ("init_samr_r_query_groupmem\n"));
+
+	if (NT_STATUS_IS_OK(status)) {
+		r_u->ptr = 1;
+		r_u->num_entries = num_entries;
+
+		r_u->ptr_attrs = attr != NULL ? 1 : 0;
+		r_u->ptr_rids = rid != NULL ? 1 : 0;
+
+		r_u->num_rids = num_entries;
+		r_u->rid = rid;
+
+		r_u->num_attrs = num_entries;
+		r_u->attr = attr;
+	} else {
+		r_u->ptr = 0;
+		r_u->num_entries = 0;
+	}
+
+	r_u->status = status;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_query_groupmem(const char *desc, SAMR_R_QUERY_GROUPMEM * r_u,
+			      prs_struct *ps, int depth)
+{
+	uint32 i;
+
+	if (r_u == NULL)
+		return False;
+
+	if (UNMARSHALLING(ps))
+		ZERO_STRUCTP(r_u);
+
+	prs_debug(ps, depth, desc, "samr_io_r_query_groupmem");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr", ps, depth, &r_u->ptr))
+		return False;
+	if(!prs_uint32("num_entries ", ps, depth, &r_u->num_entries))
+		return False;
+
+	if (r_u->ptr != 0) {
+		if(!prs_uint32("ptr_rids ", ps, depth, &r_u->ptr_rids))
+			return False;
+		if(!prs_uint32("ptr_attrs", ps, depth, &r_u->ptr_attrs))
+			return False;
+
+		if (r_u->ptr_rids != 0)	{
+			if(!prs_uint32("num_rids", ps, depth, &r_u->num_rids))
+				return False;
+			if (UNMARSHALLING(ps) && r_u->num_rids != 0) {
+				r_u->rid = PRS_ALLOC_MEM(ps,uint32,r_u->num_rids);
+				if (r_u->rid == NULL)
+					return False;
+			}
+
+			for (i = 0; i < r_u->num_rids; i++) {
+				if(!prs_uint32("", ps, depth, &r_u->rid[i]))
+					return False;
+			}
+		}
+
+		if (r_u->ptr_attrs != 0) {
+			if(!prs_uint32("num_attrs", ps, depth, &r_u->num_attrs))
+				return False;
+
+			if (UNMARSHALLING(ps) && r_u->num_attrs != 0) {
+				r_u->attr = PRS_ALLOC_MEM(ps,uint32,r_u->num_attrs);
+				if (r_u->attr == NULL)
+					return False;
+			}
+
+			for (i = 0; i < r_u->num_attrs; i++) {
+				if(!prs_uint32("", ps, depth, &r_u->attr[i]))
+					return False;
+			}
+		}
+	}
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_QUERY_USERGROUPS structure.
+********************************************************************/
+
+void init_samr_q_query_usergroups(SAMR_Q_QUERY_USERGROUPS * q_u,
+				  POLICY_HND *hnd)
+{
+	DEBUG(5, ("init_samr_q_query_usergroups\n"));
+
+	q_u->pol = *hnd;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_query_usergroups(const char *desc, SAMR_Q_QUERY_USERGROUPS * q_u,
+				prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_query_usergroups");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &q_u->pol, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_R_QUERY_USERGROUPS structure.
+********************************************************************/
+
+void init_samr_r_query_usergroups(SAMR_R_QUERY_USERGROUPS * r_u,
+				  uint32 num_gids, DOM_GID * gid,
+				  NTSTATUS status)
+{
+	DEBUG(5, ("init_samr_r_query_usergroups\n"));
+
+	if (NT_STATUS_IS_OK(status)) {
+		r_u->ptr_0 = 1;
+		r_u->num_entries = num_gids;
+		r_u->ptr_1 = (num_gids != 0) ? 1 : 0;
+		r_u->num_entries2 = num_gids;
+
+		r_u->gid = gid;
+	} else {
+		r_u->ptr_0 = 0;
+		r_u->num_entries = 0;
+		r_u->ptr_1 = 0;
+		r_u->gid = NULL;
+	}
+
+	r_u->status = status;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_gids(const char *desc, uint32 *num_gids, DOM_GID ** gid,
+		  prs_struct *ps, int depth)
+{
+	uint32 i;
+	if (gid == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_gids");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("num_gids", ps, depth, num_gids))
+		return False;
+
+	if ((*num_gids) != 0) {
+		if (UNMARSHALLING(ps)) {
+			(*gid) = PRS_ALLOC_MEM(ps,DOM_GID,*num_gids);
+		}
+
+		if ((*gid) == NULL) {
+			return False;
+		}
+
+		for (i = 0; i < (*num_gids); i++) {
+			if(!smb_io_gid("gids", &(*gid)[i], ps, depth))
+				return False;
+		}
+	}
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_query_usergroups(const char *desc, SAMR_R_QUERY_USERGROUPS * r_u,
+				prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_query_usergroups");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_0       ", ps, depth, &r_u->ptr_0))
+		return False;
+
+	if (r_u->ptr_0 != 0) {
+		if(!prs_uint32("num_entries ", ps, depth, &r_u->num_entries))
+			return False;
+		if(!prs_uint32("ptr_1       ", ps, depth, &r_u->ptr_1))
+			return False;
+
+		if (r_u->num_entries != 0 && r_u->ptr_1 != 0) {
+			if(!samr_io_gids("gids", &r_u->num_entries2, &r_u->gid, ps, depth))
+				return False;
+		}
+	}
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+	  return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_ENUM_DOMAINS structure.
+********************************************************************/
+
+void init_samr_q_enum_domains(SAMR_Q_ENUM_DOMAINS * q_e,
+			      POLICY_HND *pol,
+			      uint32 start_idx, uint32 size)
+{
+	DEBUG(5, ("init_samr_q_enum_domains\n"));
+
+	q_e->pol = *pol;
+
+	q_e->start_idx = start_idx;
+	q_e->max_size = size;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_enum_domains(const char *desc, SAMR_Q_ENUM_DOMAINS * q_e,
+			    prs_struct *ps, int depth)
+{
+	if (q_e == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_enum_domains");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &q_e->pol, ps, depth))
+		return False;
+
+	if(!prs_uint32("start_idx", ps, depth, &q_e->start_idx))
+		return False;
+	if(!prs_uint32("max_size ", ps, depth, &q_e->max_size))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_R_ENUM_DOMAINS structure.
+********************************************************************/
+
+void init_samr_r_enum_domains(SAMR_R_ENUM_DOMAINS * r_u,
+			      uint32 next_idx, uint32 num_sam_entries)
+{
+	DEBUG(5, ("init_samr_r_enum_domains\n"));
+
+	r_u->next_idx = next_idx;
+
+	if (num_sam_entries != 0) {
+		r_u->ptr_entries1 = 1;
+		r_u->ptr_entries2 = 1;
+		r_u->num_entries2 = num_sam_entries;
+		r_u->num_entries3 = num_sam_entries;
+
+		r_u->num_entries4 = num_sam_entries;
+	} else {
+		r_u->ptr_entries1 = 0;
+		r_u->num_entries2 = num_sam_entries;
+		r_u->ptr_entries2 = 1;
+	}
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_enum_domains(const char *desc, SAMR_R_ENUM_DOMAINS * r_u,
+			    prs_struct *ps, int depth)
+{
+	uint32 i;
+
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_enum_domains");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("next_idx    ", ps, depth, &r_u->next_idx))
+		return False;
+	if(!prs_uint32("ptr_entries1", ps, depth, &r_u->ptr_entries1))
+		return False;
+
+	if (r_u->ptr_entries1 != 0) {
+		if(!prs_uint32("num_entries2", ps, depth, &r_u->num_entries2))
+			return False;
+		if(!prs_uint32("ptr_entries2", ps, depth, &r_u->ptr_entries2))
+			return False;
+		if(!prs_uint32("num_entries3", ps, depth, &r_u->num_entries3))
+			return False;
+
+		if (UNMARSHALLING(ps) && r_u->num_entries2) {
+			r_u->sam = PRS_ALLOC_MEM(ps,SAM_ENTRY,r_u->num_entries2);
+			r_u->uni_dom_name = PRS_ALLOC_MEM(ps,UNISTR2,r_u->num_entries2);
+		}
+
+		if ((r_u->sam == NULL || r_u->uni_dom_name == NULL) && r_u->num_entries2 != 0) {
+			DEBUG(0, ("NULL pointers in SAMR_R_ENUM_DOMAINS\n"));
+			r_u->num_entries4 = 0;
+			r_u->status = NT_STATUS_MEMORY_NOT_ALLOCATED;
+			return False;
+		}
+
+		for (i = 0; i < r_u->num_entries2; i++)	{
+			fstring tmp;
+			slprintf(tmp, sizeof(tmp) - 1, "dom[%d]", i);
+			if(!sam_io_sam_entry(tmp, &r_u->sam[i], ps, depth))
+				return False;
+		}
+
+		for (i = 0; i < r_u->num_entries2; i++)	{
+			fstring tmp;
+			slprintf(tmp, sizeof(tmp) - 1, "dom[%d]", i);
+			if(!smb_io_unistr2(tmp, &r_u->uni_dom_name[i],
+				       r_u->sam[i].hdr_name.buffer, ps,
+				       depth))
+				return False;
+		}
+
+	}
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("num_entries4", ps, depth, &r_u->num_entries4))
+		return False;
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_ENUM_DOM_GROUPS structure.
+********************************************************************/
+
+void init_samr_q_enum_dom_groups(SAMR_Q_ENUM_DOM_GROUPS * q_e,
+				 POLICY_HND *pol,
+				 uint32 start_idx, uint32 size)
+{
+	DEBUG(5, ("init_samr_q_enum_dom_groups\n"));
+
+	q_e->pol = *pol;
+
+	q_e->start_idx = start_idx;
+	q_e->max_size = size;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_enum_dom_groups(const char *desc, SAMR_Q_ENUM_DOM_GROUPS * q_e,
+			       prs_struct *ps, int depth)
+{
+	if (q_e == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_enum_dom_groups");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &(q_e->pol), ps, depth))
+		return False;
+
+	if(!prs_uint32("start_idx", ps, depth, &q_e->start_idx))
+		return False;
+	if(!prs_uint32("max_size ", ps, depth, &q_e->max_size))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_R_ENUM_DOM_GROUPS structure.
+********************************************************************/
+
+void init_samr_r_enum_dom_groups(SAMR_R_ENUM_DOM_GROUPS * r_u,
+				 uint32 next_idx, uint32 num_sam_entries)
+{
+	DEBUG(5, ("init_samr_r_enum_dom_groups\n"));
+
+	r_u->next_idx = next_idx;
+
+	if (num_sam_entries != 0) {
+		r_u->ptr_entries1 = 1;
+		r_u->ptr_entries2 = 1;
+		r_u->num_entries2 = num_sam_entries;
+		r_u->num_entries3 = num_sam_entries;
+
+		r_u->num_entries4 = num_sam_entries;
+	} else {
+		r_u->ptr_entries1 = 0;
+		r_u->num_entries2 = num_sam_entries;
+		r_u->ptr_entries2 = 1;
+	}
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_enum_dom_groups(const char *desc, SAMR_R_ENUM_DOM_GROUPS * r_u,
+			       prs_struct *ps, int depth)
+{
+	uint32 i;
+
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_enum_dom_groups");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("next_idx    ", ps, depth, &r_u->next_idx))
+		return False;
+	if(!prs_uint32("ptr_entries1", ps, depth, &r_u->ptr_entries1))
+		return False;
+
+	if (r_u->ptr_entries1 != 0) {
+		if(!prs_uint32("num_entries2", ps, depth, &r_u->num_entries2))
+			return False;
+		if(!prs_uint32("ptr_entries2", ps, depth, &r_u->ptr_entries2))
+			return False;
+		if(!prs_uint32("num_entries3", ps, depth, &r_u->num_entries3))
+			return False;
+
+		if (UNMARSHALLING(ps) && r_u->num_entries2) {
+			r_u->sam = PRS_ALLOC_MEM(ps,SAM_ENTRY,r_u->num_entries2);
+			r_u->uni_grp_name = PRS_ALLOC_MEM(ps,UNISTR2,r_u->num_entries2);
+		}
+
+		if ((r_u->sam == NULL || r_u->uni_grp_name == NULL) && r_u->num_entries2 != 0) {
+			DEBUG(0,
+			      ("NULL pointers in SAMR_R_ENUM_DOM_GROUPS\n"));
+			r_u->num_entries4 = 0;
+			r_u->status = NT_STATUS_MEMORY_NOT_ALLOCATED;
+			return False;
+		}
+
+		for (i = 0; i < r_u->num_entries2; i++)	{
+			if(!sam_io_sam_entry("", &r_u->sam[i], ps, depth))
+				return False;
+		}
+
+		for (i = 0; i < r_u->num_entries2; i++)	{
+			if(!smb_io_unistr2("", &r_u->uni_grp_name[i],
+				       r_u->sam[i].hdr_name.buffer, ps, depth))
+				return False;
+		}
+	}
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("num_entries4", ps, depth, &r_u->num_entries4))
+		return False;
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_ENUM_DOM_ALIASES structure.
+********************************************************************/
+
+void init_samr_q_enum_dom_aliases(SAMR_Q_ENUM_DOM_ALIASES * q_e,
+				  POLICY_HND *pol, uint32 start_idx,
+				  uint32 size)
+{
+	DEBUG(5, ("init_samr_q_enum_dom_aliases\n"));
+
+	q_e->pol = *pol;
+
+	q_e->start_idx = start_idx;
+	q_e->max_size = size;
+}
+
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_enum_dom_aliases(const char *desc, SAMR_Q_ENUM_DOM_ALIASES * q_e,
+				prs_struct *ps, int depth)
+{
+	if (q_e == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_enum_dom_aliases");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &q_e->pol, ps, depth))
+		return False;
+
+	if(!prs_uint32("start_idx", ps, depth, &q_e->start_idx))
+		return False;
+	if(!prs_uint32("max_size ", ps, depth, &q_e->max_size))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_R_ENUM_DOM_ALIASES structure.
+********************************************************************/
+
+void init_samr_r_enum_dom_aliases(SAMR_R_ENUM_DOM_ALIASES *r_u, uint32 next_idx, uint32 num_sam_entries)
+{
+	DEBUG(5, ("init_samr_r_enum_dom_aliases\n"));
+
+	r_u->next_idx = next_idx;
+
+	if (num_sam_entries != 0) {
+		r_u->ptr_entries1 = 1;
+		r_u->ptr_entries2 = 1;
+		r_u->num_entries2 = num_sam_entries;
+		r_u->num_entries3 = num_sam_entries;
+
+		r_u->num_entries4 = num_sam_entries;
+	} else {
+		r_u->ptr_entries1 = 0;
+		r_u->num_entries2 = num_sam_entries;
+		r_u->ptr_entries2 = 1;
+	}
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_enum_dom_aliases(const char *desc, SAMR_R_ENUM_DOM_ALIASES * r_u,
+				prs_struct *ps, int depth)
+{
+	uint32 i;
+
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_enum_dom_aliases");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("next_idx    ", ps, depth, &r_u->next_idx))
+		return False;
+	if(!prs_uint32("ptr_entries1", ps, depth, &r_u->ptr_entries1))
+		return False;
+
+	if (r_u->ptr_entries1 != 0) {
+		if(!prs_uint32("num_entries2", ps, depth, &r_u->num_entries2))
+			return False;
+		if(!prs_uint32("ptr_entries2", ps, depth, &r_u->ptr_entries2))
+			return False;
+		if(!prs_uint32("num_entries3", ps, depth, &r_u->num_entries3))
+			return False;
+
+		if (UNMARSHALLING(ps) && (r_u->num_entries2 > 0)) {
+			r_u->sam = PRS_ALLOC_MEM(ps,SAM_ENTRY,r_u->num_entries2);
+			r_u->uni_grp_name = PRS_ALLOC_MEM(ps,UNISTR2,r_u->num_entries2);
+		}
+
+		if (r_u->num_entries2 != 0 && 
+		    (r_u->sam == NULL || r_u->uni_grp_name == NULL)) {
+			DEBUG(0,("NULL pointers in SAMR_R_ENUM_DOM_ALIASES\n"));
+			r_u->num_entries4 = 0;
+			r_u->status = NT_STATUS_MEMORY_NOT_ALLOCATED;
+			return False;
+		}
+
+		for (i = 0; i < r_u->num_entries2; i++) {
+			if(!sam_io_sam_entry("", &r_u->sam[i], ps, depth))
+				return False;
+		}
+
+		for (i = 0; i < r_u->num_entries2; i++) {
+			if(!smb_io_unistr2("", &r_u->uni_grp_name[i],
+				       r_u->sam[i].hdr_name.buffer, ps,
+				       depth))
+				return False;
+		}
+	}
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("num_entries4", ps, depth, &r_u->num_entries4))
+		return False;
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a ALIAS_INFO1 structure.
+********************************************************************/
+
+void init_samr_alias_info1(ALIAS_INFO1 * al1, char *acct_name, uint32 num_member, char *acct_desc)
+{
+	DEBUG(5, ("init_samr_alias_info1\n"));
+
+	init_unistr4(&al1->name, acct_name, UNI_FLAGS_NONE);
+	al1->num_member = num_member;
+	init_unistr4(&al1->description, acct_desc, UNI_FLAGS_NONE);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_alias_info1(const char *desc, ALIAS_INFO1 * al1,
+			 prs_struct *ps, int depth)
+{
+	if (al1 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_alias_info1");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if ( !prs_unistr4_hdr("name", ps, depth, &al1->name) )
+		return False;
+	if ( !prs_uint32("num_member", ps, depth, &al1->num_member) )
+		return False;
+	if ( !prs_unistr4_hdr("description", ps, depth, &al1->description) )
+		return False;
+
+	if ( !prs_unistr4_str("name", ps, depth, &al1->name) )
+		return False;
+	if ( !prs_align(ps) )
+		return False;
+	if ( !prs_unistr4_str("description", ps, depth, &al1->description) )
+		return False;
+	if ( !prs_align(ps) )
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a ALIAS_INFO3 structure.
+********************************************************************/
+
+void init_samr_alias_info3(ALIAS_INFO3 * al3, const char *acct_desc)
+{
+	DEBUG(5, ("init_samr_alias_info3\n"));
+
+	init_unistr4(&al3->description, acct_desc, UNI_FLAGS_NONE);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_alias_info3(const char *desc, ALIAS_INFO3 *al3,
+			 prs_struct *ps, int depth)
+{
+	if (al3 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_alias_info3");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if (!prs_unistr4("description", ps, depth, &al3->description))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_alias_info2(const char *desc, ALIAS_INFO2 *al2,
+			 prs_struct *ps, int depth)
+{
+	if (al2 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_alias_info2");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if (!prs_unistr4("name", ps, depth, &al2->name))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_alias_info_ctr(const char *desc, prs_struct *ps, int depth, ALIAS_INFO_CTR * ctr)
+{
+	if ( !ctr )
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_alias_info_ctr");
+	depth++;
+
+	if ( !prs_uint16("level", ps, depth, &ctr->level) )
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+	switch (ctr->level) {
+	case 1: 
+		if(!samr_io_alias_info1("alias_info1", &ctr->alias.info1, ps, depth))
+			return False;
+		break;
+	case 2: 
+		if(!samr_io_alias_info2("alias_info2", &ctr->alias.info2, ps, depth))
+			return False;
+		break;
+	case 3: 
+		if(!samr_io_alias_info3("alias_info3", &ctr->alias.info3, ps, depth))
+			return False;
+		break;
+	default:
+		DEBUG(0,("samr_alias_info_ctr: unsupported switch level\n"));
+		break;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_QUERY_ALIASINFO structure.
+********************************************************************/
+
+void init_samr_q_query_aliasinfo(SAMR_Q_QUERY_ALIASINFO * q_e,
+				 POLICY_HND *pol, uint32 switch_level)
+{
+	DEBUG(5, ("init_samr_q_query_aliasinfo\n"));
+
+	q_e->pol = *pol;
+	q_e->level = switch_level;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_query_aliasinfo(const char *desc, SAMR_Q_QUERY_ALIASINFO *in,
+			       prs_struct *ps, int depth)
+{
+	if ( !in )
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_query_aliasinfo");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if ( !smb_io_pol_hnd("pol", &(in->pol), ps, depth) )
+		return False;
+
+	if ( !prs_uint16("level", ps, depth, &in->level) )
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_R_QUERY_ALIASINFO structure.
+********************************************************************/
+
+void init_samr_r_query_aliasinfo(SAMR_R_QUERY_ALIASINFO *out,
+				 ALIAS_INFO_CTR * ctr, NTSTATUS status)
+{
+	DEBUG(5, ("init_samr_r_query_aliasinfo\n"));
+
+	out->ctr = ctr;
+	out->status = status;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_query_aliasinfo(const char *desc, SAMR_R_QUERY_ALIASINFO *out,
+			       prs_struct *ps, int depth)
+{
+	if ( !out )
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_query_aliasinfo");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if ( !prs_pointer("alias", ps, depth, (void*)&out->ctr, sizeof(ALIAS_INFO_CTR), (PRS_POINTER_CAST)samr_alias_info_ctr))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &out->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_SET_ALIASINFO structure.
+********************************************************************/
+
+void init_samr_q_set_aliasinfo(SAMR_Q_SET_ALIASINFO * q_u,
+			       POLICY_HND *hnd, ALIAS_INFO_CTR * ctr)
+{
+	DEBUG(5, ("init_samr_q_set_aliasinfo\n"));
+
+	q_u->alias_pol = *hnd;
+	q_u->ctr = *ctr;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_set_aliasinfo(const char *desc, SAMR_Q_SET_ALIASINFO * q_u,
+			     prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_set_aliasinfo");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("alias_pol", &q_u->alias_pol, ps, depth))
+		return False;
+	if(!samr_alias_info_ctr("ctr", ps, depth, &q_u->ctr))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_set_aliasinfo(const char *desc, SAMR_R_SET_ALIASINFO * r_u,
+			     prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_set_aliasinfo");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_QUERY_USERALIASES structure.
+********************************************************************/
+
+void init_samr_q_query_useraliases(SAMR_Q_QUERY_USERALIASES * q_u,
+				   POLICY_HND *hnd,
+				   uint32 num_sids,
+				   uint32 *ptr_sid, DOM_SID2 * sid)
+{
+	DEBUG(5, ("init_samr_q_query_useraliases\n"));
+
+	q_u->pol = *hnd;
+
+	q_u->num_sids1 = num_sids;
+	q_u->ptr = 1;
+	q_u->num_sids2 = num_sids;
+
+	q_u->ptr_sid = ptr_sid;
+	q_u->sid = sid;
+}
+
+/*******************************************************************
+reads or writes a SAMR_Q_QUERY_USERALIASES structure.
+********************************************************************/
+
+BOOL samr_io_q_query_useraliases(const char *desc, SAMR_Q_QUERY_USERALIASES * q_u,
+				 prs_struct *ps, int depth)
+{
+	fstring tmp;
+	uint32 i;
+
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_query_useraliases");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &q_u->pol, ps, depth))
+		return False;
+
+	if(!prs_uint32("num_sids1", ps, depth, &q_u->num_sids1))
+		return False;
+	if(!prs_uint32("ptr      ", ps, depth, &q_u->ptr))
+		return False;
+
+	if (q_u->ptr==0)
+		return True;
+
+	if(!prs_uint32("num_sids2", ps, depth, &q_u->num_sids2))
+		return False;
+
+	if (UNMARSHALLING(ps) && (q_u->num_sids2 != 0)) {
+		q_u->ptr_sid = PRS_ALLOC_MEM(ps,uint32,q_u->num_sids2);
+		if (q_u->ptr_sid == NULL)
+			return False;
+
+		q_u->sid = PRS_ALLOC_MEM(ps, DOM_SID2, q_u->num_sids2);
+		if (q_u->sid == NULL)
+			return False;
+	}
+
+	for (i = 0; i < q_u->num_sids2; i++) {
+		slprintf(tmp, sizeof(tmp) - 1, "ptr[%02d]", i);
+		if(!prs_uint32(tmp, ps, depth, &q_u->ptr_sid[i]))
+			return False;
+	}
+
+	for (i = 0; i < q_u->num_sids2; i++) {
+		if (q_u->ptr_sid[i] != 0) {
+			slprintf(tmp, sizeof(tmp) - 1, "sid[%02d]", i);
+			if(!smb_io_dom_sid2(tmp, &q_u->sid[i], ps, depth))
+				return False;
+		}
+	}
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_R_QUERY_USERALIASES structure.
+********************************************************************/
+
+void init_samr_r_query_useraliases(SAMR_R_QUERY_USERALIASES * r_u,
+				   uint32 num_rids, uint32 *rid,
+				   NTSTATUS status)
+{
+	DEBUG(5, ("init_samr_r_query_useraliases\n"));
+
+	if (NT_STATUS_IS_OK(status)) {
+		r_u->num_entries = num_rids;
+		r_u->ptr = 1;
+		r_u->num_entries2 = num_rids;
+
+		r_u->rid = rid;
+	} else {
+		r_u->num_entries = 0;
+		r_u->ptr = 0;
+		r_u->num_entries2 = 0;
+	}
+
+	r_u->status = status;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_rids(const char *desc, uint32 *num_rids, uint32 **rid,
+		  prs_struct *ps, int depth)
+{
+	fstring tmp;
+	uint32 i;
+	if (rid == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_rids");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("num_rids", ps, depth, num_rids))
+		return False;
+
+	if ((*num_rids) != 0) {
+		if (UNMARSHALLING(ps)) {
+			/* reading */
+			(*rid) = PRS_ALLOC_MEM(ps,uint32, *num_rids);
+		}
+		if ((*rid) == NULL)
+			return False;
+
+		for (i = 0; i < (*num_rids); i++) {
+			slprintf(tmp, sizeof(tmp) - 1, "rid[%02d]", i);
+			if(!prs_uint32(tmp, ps, depth, &((*rid)[i])))
+				return False;
+		}
+	}
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_query_useraliases(const char *desc, SAMR_R_QUERY_USERALIASES * r_u,
+				 prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_query_useraliases");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("num_entries", ps, depth, &r_u->num_entries))
+		return False;
+	if(!prs_uint32("ptr        ", ps, depth, &r_u->ptr))
+		return False;
+
+	if (r_u->ptr != 0) {
+		if(!samr_io_rids("rids", &r_u->num_entries2, &r_u->rid, ps, depth))
+			return False;
+	}
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_OPEN_ALIAS structure.
+********************************************************************/
+
+void init_samr_q_open_alias(SAMR_Q_OPEN_ALIAS * q_u, POLICY_HND *pol,
+			    uint32 access_mask, uint32 rid)
+{
+	DEBUG(5, ("init_samr_q_open_alias\n"));
+
+	q_u->dom_pol = *pol;
+	q_u->access_mask = access_mask;
+	q_u->rid_alias = rid;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_open_alias(const char *desc, SAMR_Q_OPEN_ALIAS * q_u,
+			  prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_open_alias");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("domain_pol", &q_u->dom_pol, ps, depth))
+		return False;
+
+	if(!prs_uint32("access_mask", ps, depth, &q_u->access_mask))
+		return False;
+	if(!prs_uint32("rid_alias", ps, depth, &q_u->rid_alias))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_open_alias(const char *desc, SAMR_R_OPEN_ALIAS * r_u,
+			  prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_open_alias");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &r_u->pol, ps, depth))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_LOOKUP_RIDS structure.
+********************************************************************/
+
+void init_samr_q_lookup_rids(TALLOC_CTX *ctx, SAMR_Q_LOOKUP_RIDS * q_u,
+			     POLICY_HND *pol, uint32 flags,
+			     uint32 num_rids, uint32 *rid)
+{
+	DEBUG(5, ("init_samr_q_lookup_rids\n"));
+
+	q_u->pol = *pol;
+
+	q_u->num_rids1 = num_rids;
+	q_u->flags = flags;
+	q_u->ptr = 0;
+	q_u->num_rids2 = num_rids;
+	if (num_rids) {
+		q_u->rid = TALLOC_ZERO_ARRAY(ctx, uint32, num_rids );
+	} else {
+		q_u->rid = NULL;
+	}
+	if (q_u->rid == NULL) {
+		q_u->num_rids1 = 0;
+		q_u->num_rids2 = 0;
+	} else {
+		memcpy(q_u->rid, rid, num_rids * sizeof(q_u->rid[0]));
+	}
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_lookup_rids(const char *desc, SAMR_Q_LOOKUP_RIDS * q_u,
+			   prs_struct *ps, int depth)
+{
+	uint32 i;
+	fstring tmp;
+
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_lookup_rids");
+	depth++;
+
+	if (UNMARSHALLING(ps))
+		ZERO_STRUCTP(q_u);
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &q_u->pol, ps, depth))
+		return False;
+
+	if(!prs_uint32("num_rids1", ps, depth, &q_u->num_rids1))
+		return False;
+	if(!prs_uint32("flags    ", ps, depth, &q_u->flags))
+		return False;
+	if(!prs_uint32("ptr      ", ps, depth, &q_u->ptr))
+		return False;
+	if(!prs_uint32("num_rids2", ps, depth, &q_u->num_rids2))
+		return False;
+
+	if (UNMARSHALLING(ps) && (q_u->num_rids2 != 0)) {
+		q_u->rid = PRS_ALLOC_MEM(ps, uint32, q_u->num_rids2);
+		if (q_u->rid == NULL)
+			return False;
+	}
+
+	for (i = 0; i < q_u->num_rids2; i++) {
+		slprintf(tmp, sizeof(tmp) - 1, "rid[%02d]  ", i);
+		if(!prs_uint32(tmp, ps, depth, &q_u->rid[i]))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_R_LOOKUP_RIDS structure.
+********************************************************************/
+
+void init_samr_r_lookup_rids(SAMR_R_LOOKUP_RIDS * r_u,
+			     uint32 num_names, UNIHDR * hdr_name,
+			     UNISTR2 *uni_name, uint32 *type)
+{
+	DEBUG(5, ("init_samr_r_lookup_rids\n"));
+
+	r_u->hdr_name = NULL;
+	r_u->uni_name = NULL;
+	r_u->type = NULL;
+
+	if (num_names != 0) {
+		r_u->num_names1 = num_names;
+		r_u->ptr_names = 1;
+		r_u->num_names2 = num_names;
+
+		r_u->num_types1 = num_names;
+		r_u->ptr_types = 1;
+		r_u->num_types2 = num_names;
+
+		r_u->hdr_name = hdr_name;
+		r_u->uni_name = uni_name;
+		r_u->type = type;
+	} else {
+		r_u->num_names1 = num_names;
+		r_u->ptr_names = 0;
+		r_u->num_names2 = num_names;
+
+		r_u->num_types1 = num_names;
+		r_u->ptr_types = 0;
+		r_u->num_types2 = num_names;
+	}
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_lookup_rids(const char *desc, SAMR_R_LOOKUP_RIDS * r_u,
+			   prs_struct *ps, int depth)
+{
+	uint32 i;
+	fstring tmp;
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_lookup_rids");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("num_names1", ps, depth, &r_u->num_names1))
+		return False;
+	if(!prs_uint32("ptr_names ", ps, depth, &r_u->ptr_names))
+		return False;
+
+	if (r_u->ptr_names != 0) {
+
+		if(!prs_uint32("num_names2", ps, depth, &r_u->num_names2))
+			return False;
+
+
+		if (UNMARSHALLING(ps) && (r_u->num_names2 != 0)) {
+			r_u->hdr_name = PRS_ALLOC_MEM(ps, UNIHDR, r_u->num_names2);
+			if (r_u->hdr_name == NULL)
+				return False;
+
+			r_u->uni_name = PRS_ALLOC_MEM(ps, UNISTR2, r_u->num_names2);
+			if (r_u->uni_name == NULL)
+				return False;
+		}
+		
+		for (i = 0; i < r_u->num_names2; i++) {
+			slprintf(tmp, sizeof(tmp) - 1, "hdr[%02d]  ", i);
+			if(!smb_io_unihdr("", &r_u->hdr_name[i], ps, depth))
+				return False;
+		}
+		for (i = 0; i < r_u->num_names2; i++) {
+			slprintf(tmp, sizeof(tmp) - 1, "str[%02d]  ", i);
+			if(!smb_io_unistr2("", &r_u->uni_name[i], r_u->hdr_name[i].buffer, ps, depth))
+				return False;
+		}
+
+	}
+	
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("num_types1", ps, depth, &r_u->num_types1))
+		return False;
+	if(!prs_uint32("ptr_types ", ps, depth, &r_u->ptr_types))
+		return False;
+
+	if (r_u->ptr_types != 0) {
+
+		if(!prs_uint32("num_types2", ps, depth, &r_u->num_types2))
+			return False;
+
+		if (UNMARSHALLING(ps) && (r_u->num_types2 != 0)) {
+			r_u->type = PRS_ALLOC_MEM(ps, uint32, r_u->num_types2);
+			if (r_u->type == NULL)
+				return False;
+		}
+
+		for (i = 0; i < r_u->num_types2; i++) {
+			slprintf(tmp, sizeof(tmp) - 1, "type[%02d]  ", i);
+			if(!prs_uint32(tmp, ps, depth, &r_u->type[i]))
+				return False;
+		}
+	}
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_OPEN_ALIAS structure.
+********************************************************************/
+
+void init_samr_q_delete_alias(SAMR_Q_DELETE_DOM_ALIAS * q_u, POLICY_HND *hnd)
+{
+	DEBUG(5, ("init_samr_q_delete_alias\n"));
+
+	q_u->alias_pol = *hnd;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_delete_alias(const char *desc, SAMR_Q_DELETE_DOM_ALIAS * q_u,
+			    prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_delete_alias");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("alias_pol", &q_u->alias_pol, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_delete_alias(const char *desc, SAMR_R_DELETE_DOM_ALIAS * r_u,
+			    prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_delete_alias");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &r_u->pol, ps, depth))
+		return False;
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_CREATE_DOM_ALIAS structure.
+********************************************************************/
+
+void init_samr_q_create_dom_alias(SAMR_Q_CREATE_DOM_ALIAS * q_u,
+				  POLICY_HND *hnd, const char *acct_desc)
+{
+	DEBUG(5, ("init_samr_q_create_dom_alias\n"));
+
+	q_u->dom_pol = *hnd;
+
+	init_unistr2(&q_u->uni_acct_desc, acct_desc, UNI_FLAGS_NONE);
+	init_uni_hdr(&q_u->hdr_acct_desc, &q_u->uni_acct_desc);
+
+	q_u->access_mask = MAXIMUM_ALLOWED_ACCESS;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_create_dom_alias(const char *desc, SAMR_Q_CREATE_DOM_ALIAS * q_u,
+				prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_create_dom_alias");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("dom_pol", &q_u->dom_pol, ps, depth))
+		return False;
+
+	if(!smb_io_unihdr("hdr_acct_desc", &q_u->hdr_acct_desc, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni_acct_desc", &q_u->uni_acct_desc,
+		       q_u->hdr_acct_desc.buffer, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("access_mask", ps, depth, &q_u->access_mask))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_create_dom_alias(const char *desc, SAMR_R_CREATE_DOM_ALIAS * r_u,
+				prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_create_dom_alias");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("alias_pol", &r_u->alias_pol, ps, depth))
+		return False;
+
+	if(!prs_uint32("rid", ps, depth, &r_u->rid))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_ADD_ALIASMEM structure.
+********************************************************************/
+
+void init_samr_q_add_aliasmem(SAMR_Q_ADD_ALIASMEM * q_u, POLICY_HND *hnd,
+			      DOM_SID *sid)
+{
+	DEBUG(5, ("init_samr_q_add_aliasmem\n"));
+
+	q_u->alias_pol = *hnd;
+	init_dom_sid2(&q_u->sid, sid);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_add_aliasmem(const char *desc, SAMR_Q_ADD_ALIASMEM * q_u,
+			    prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_add_aliasmem");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("alias_pol", &q_u->alias_pol, ps, depth))
+		return False;
+	if(!smb_io_dom_sid2("sid      ", &q_u->sid, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_add_aliasmem(const char *desc, SAMR_R_ADD_ALIASMEM * r_u,
+			    prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_add_aliasmem");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_DEL_ALIASMEM structure.
+********************************************************************/
+
+void init_samr_q_del_aliasmem(SAMR_Q_DEL_ALIASMEM * q_u, POLICY_HND *hnd,
+			      DOM_SID *sid)
+{
+	DEBUG(5, ("init_samr_q_del_aliasmem\n"));
+
+	q_u->alias_pol = *hnd;
+	init_dom_sid2(&q_u->sid, sid);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_del_aliasmem(const char *desc, SAMR_Q_DEL_ALIASMEM * q_u,
+			    prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_del_aliasmem");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("alias_pol", &q_u->alias_pol, ps, depth))
+		return False;
+	if(!smb_io_dom_sid2("sid      ", &q_u->sid, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_del_aliasmem(const char *desc, SAMR_R_DEL_ALIASMEM * r_u,
+			    prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_del_aliasmem");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_DELETE_DOM_ALIAS structure.
+********************************************************************/
+
+void init_samr_q_delete_dom_alias(SAMR_Q_DELETE_DOM_ALIAS * q_c,
+				  POLICY_HND *hnd)
+{
+	DEBUG(5, ("init_samr_q_delete_dom_alias\n"));
+
+	q_c->alias_pol = *hnd;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_delete_dom_alias(const char *desc, SAMR_Q_DELETE_DOM_ALIAS * q_u,
+				prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_delete_dom_alias");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("alias_pol", &q_u->alias_pol, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_R_DELETE_DOM_ALIAS structure.
+********************************************************************/
+
+void init_samr_r_delete_dom_alias(SAMR_R_DELETE_DOM_ALIAS * r_u,
+				  NTSTATUS status)
+{
+	DEBUG(5, ("init_samr_r_delete_dom_alias\n"));
+
+	r_u->status = status;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_delete_dom_alias(const char *desc, SAMR_R_DELETE_DOM_ALIAS * r_u,
+				prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_delete_dom_alias");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &r_u->pol, ps, depth))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_QUERY_ALIASMEM structure.
+********************************************************************/
+
+void init_samr_q_query_aliasmem(SAMR_Q_QUERY_ALIASMEM * q_c,
+				POLICY_HND *hnd)
+{
+	DEBUG(5, ("init_samr_q_query_aliasmem\n"));
+
+	q_c->alias_pol = *hnd;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_query_aliasmem(const char *desc, SAMR_Q_QUERY_ALIASMEM * q_u,
+			      prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_query_aliasmem");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("alias_pol", &q_u->alias_pol, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_R_QUERY_ALIASMEM structure.
+********************************************************************/
+
+void init_samr_r_query_aliasmem(SAMR_R_QUERY_ALIASMEM * r_u,
+				uint32 num_sids, DOM_SID2 * sid,
+				NTSTATUS status)
+{
+	DEBUG(5, ("init_samr_r_query_aliasmem\n"));
+
+	if (NT_STATUS_IS_OK(status)) {
+		r_u->num_sids = num_sids;
+		r_u->ptr = (num_sids != 0) ? 1 : 0;
+		r_u->num_sids1 = num_sids;
+
+		r_u->sid = sid;
+	} else {
+		r_u->ptr = 0;
+		r_u->num_sids = 0;
+	}
+
+	r_u->status = status;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_query_aliasmem(const char *desc, SAMR_R_QUERY_ALIASMEM * r_u,
+			      prs_struct *ps, int depth)
+{
+	uint32 i;
+
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_query_aliasmem");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("num_sids ", ps, depth, &r_u->num_sids))
+		return False;
+	if(!prs_uint32("ptr", ps, depth, &r_u->ptr))
+		return False;
+
+	if (r_u->ptr != 0 && r_u->num_sids != 0) {
+		uint32 *ptr_sid = NULL;
+
+		if(!prs_uint32("num_sids1", ps, depth, &r_u->num_sids1))
+			return False;
+
+		/* We must always use talloc here even when marshalling. */
+		if (r_u->num_sids1) {
+			ptr_sid = TALLOC_ARRAY(ps->mem_ctx, uint32, r_u->num_sids1);
+			if (!ptr_sid) {
+				return False;
+			}
+		} else {
+			ptr_sid = NULL;
+		}
+		
+		for (i = 0; i < r_u->num_sids1; i++) {
+			ptr_sid[i] = 1;
+			if(!prs_uint32("ptr_sid", ps, depth, &ptr_sid[i]))
+				return False;
+		}
+		
+		if (UNMARSHALLING(ps)) {
+			if (r_u->num_sids1) {
+				r_u->sid = TALLOC_ARRAY(ps->mem_ctx, DOM_SID2, r_u->num_sids1);
+				if (!r_u->sid) {
+					return False;
+				}
+			} else {
+				r_u->sid = NULL;
+			}
+		}
+		
+		for (i = 0; i < r_u->num_sids1; i++) {
+			if (ptr_sid[i] != 0) {
+				if(!smb_io_dom_sid2("sid", &r_u->sid[i], ps, depth))
+					return False;
+			}
+		}
+	}
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_LOOKUP_NAMES structure.
+********************************************************************/
+
+NTSTATUS init_samr_q_lookup_names(TALLOC_CTX *ctx, SAMR_Q_LOOKUP_NAMES * q_u,
+			      POLICY_HND *pol, uint32 flags,
+			      uint32 num_names, const char **name)
+{
+	uint32 i;
+
+	DEBUG(5, ("init_samr_q_lookup_names\n"));
+
+	q_u->pol = *pol;
+
+	q_u->num_names1 = num_names;
+	q_u->flags = flags;
+	q_u->ptr = 0;
+	q_u->num_names2 = num_names;
+
+	if (num_names) {
+		if (!(q_u->hdr_name = TALLOC_ZERO_ARRAY(ctx, UNIHDR, num_names)))
+			return NT_STATUS_NO_MEMORY;
+
+		if (!(q_u->uni_name = TALLOC_ZERO_ARRAY(ctx, UNISTR2, num_names)))
+			return NT_STATUS_NO_MEMORY;
+	} else {
+		q_u->hdr_name = NULL;
+		q_u->uni_name = NULL;
+	}
+
+	for (i = 0; i < num_names; i++) {
+		init_unistr2(&q_u->uni_name[i], name[i], UNI_FLAGS_NONE);	/* unicode string for machine account */
+		init_uni_hdr(&q_u->hdr_name[i], &q_u->uni_name[i]);	/* unicode header for user_name */
+	}
+
+	return NT_STATUS_OK;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_lookup_names(const char *desc, SAMR_Q_LOOKUP_NAMES * q_u,
+			    prs_struct *ps, int depth)
+{
+	uint32 i;
+
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_lookup_names");
+	depth++;
+
+	if (UNMARSHALLING(ps))
+		ZERO_STRUCTP(q_u);
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &q_u->pol, ps, depth))
+		return False;
+
+	if(!prs_uint32("num_names1", ps, depth, &q_u->num_names1))
+		return False;
+	if(!prs_uint32("flags     ", ps, depth, &q_u->flags))
+		return False;
+	if(!prs_uint32("ptr       ", ps, depth, &q_u->ptr))
+		return False;
+	if(!prs_uint32("num_names2", ps, depth, &q_u->num_names2))
+		return False;
+
+	if (UNMARSHALLING(ps) && (q_u->num_names2 != 0)) {
+		q_u->hdr_name = PRS_ALLOC_MEM(ps, UNIHDR, q_u->num_names2);
+		q_u->uni_name = PRS_ALLOC_MEM(ps, UNISTR2, q_u->num_names2);
+		if (!q_u->hdr_name || !q_u->uni_name)
+			return False;
+	}
+
+	for (i = 0; i < q_u->num_names2; i++) {
+		if(!smb_io_unihdr("", &q_u->hdr_name[i], ps, depth))
+			return False;
+	}
+
+	for (i = 0; i < q_u->num_names2; i++) {
+		if(!smb_io_unistr2("", &q_u->uni_name[i], q_u->hdr_name[i].buffer, ps, depth))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_R_LOOKUP_NAMES structure.
+********************************************************************/
+
+NTSTATUS init_samr_r_lookup_names(TALLOC_CTX *ctx, SAMR_R_LOOKUP_NAMES * r_u,
+			      uint32 num_rids,
+			      uint32 *rid, enum lsa_SidType *type,
+			      NTSTATUS status)
+{
+	DEBUG(5, ("init_samr_r_lookup_names\n"));
+
+	if (NT_STATUS_IS_OK(status) && (num_rids != 0))	{
+		uint32 i;
+
+		r_u->num_types1 = num_rids;
+		r_u->ptr_types = 1;
+		r_u->num_types2 = num_rids;
+
+		r_u->num_rids1 = num_rids;
+		r_u->ptr_rids = 1;
+		r_u->num_rids2 = num_rids;
+
+		if (num_rids) {
+			if (!(r_u->rids = TALLOC_ZERO_ARRAY(ctx, uint32, num_rids)))
+				return NT_STATUS_NO_MEMORY;
+			if (!(r_u->types = TALLOC_ZERO_ARRAY(ctx, uint32, num_rids)))
+				return NT_STATUS_NO_MEMORY;
+		} else {
+			r_u->rids = NULL;
+			r_u->types = NULL;
+		}
+
+		if (!r_u->rids || !r_u->types)
+			goto empty;
+
+		for (i = 0; i < num_rids; i++) {
+			r_u->rids[i] = rid[i];
+			r_u->types[i] = type[i];
+		}
+	} else {
+
+  empty:
+		r_u->num_types1 = 0;
+		r_u->ptr_types = 0;
+		r_u->num_types2 = 0;
+
+		r_u->num_rids1 = 0;
+		r_u->ptr_rids = 0;
+		r_u->num_rids2 = 0;
+
+		r_u->rids = NULL;
+		r_u->types = NULL;
+	}
+
+	r_u->status = status;
+
+	return NT_STATUS_OK;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_lookup_names(const char *desc, SAMR_R_LOOKUP_NAMES * r_u,
+			    prs_struct *ps, int depth)
+{
+	uint32 i;
+	fstring tmp;
+
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_lookup_names");
+	depth++;
+
+	if (UNMARSHALLING(ps))
+		ZERO_STRUCTP(r_u);
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("num_rids1", ps, depth, &r_u->num_rids1))
+		return False;
+	if(!prs_uint32("ptr_rids ", ps, depth, &r_u->ptr_rids))
+		return False;
+
+	if (r_u->ptr_rids != 0)	{
+		if(!prs_uint32("num_rids2", ps, depth, &r_u->num_rids2))
+			return False;
+
+		if (r_u->num_rids2 != r_u->num_rids1) {
+			/* RPC fault */
+			return False;
+		}
+
+		if (UNMARSHALLING(ps) && r_u->num_rids2) {
+			r_u->rids = PRS_ALLOC_MEM(ps, uint32, r_u->num_rids2);
+
+			if (!r_u->rids) {
+				DEBUG(0, ("NULL rids in samr_io_r_lookup_names\n"));
+				return False;
+			}
+		}
+
+		for (i = 0; i < r_u->num_rids2; i++) {
+			slprintf(tmp, sizeof(tmp) - 1, "rid[%02d]  ", i);
+			if(!prs_uint32(tmp, ps, depth, &r_u->rids[i]))
+				return False;
+		}
+	}
+
+	if(!prs_uint32("num_types1", ps, depth, &r_u->num_types1))
+		return False;
+	if(!prs_uint32("ptr_types ", ps, depth, &r_u->ptr_types))
+		return False;
+
+	if (r_u->ptr_types != 0) {
+		if(!prs_uint32("num_types2", ps, depth, &r_u->num_types2))
+			return False;
+
+		if (r_u->num_types2 != r_u->num_types1) {
+			/* RPC fault */
+			return False;
+		}
+
+		if (UNMARSHALLING(ps) && r_u->num_types2) {
+			r_u->types = PRS_ALLOC_MEM(ps, uint32, r_u->num_types2);
+
+			if (!r_u->types) {
+				DEBUG(0, ("NULL types in samr_io_r_lookup_names\n"));
+				return False;
+			}
+		}
+
+		for (i = 0; i < r_u->num_types2; i++) {
+			slprintf(tmp, sizeof(tmp) - 1, "type[%02d]  ", i);
+			if(!prs_uint32(tmp, ps, depth, &r_u->types[i]))
+				return False;
+		}
+	}
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_DELETE_DOM_USER structure.
+********************************************************************/
+
+void init_samr_q_delete_dom_user(SAMR_Q_DELETE_DOM_USER * q_c,
+				 POLICY_HND *hnd)
+{
+	DEBUG(5, ("init_samr_q_delete_dom_user\n"));
+
+	q_c->user_pol = *hnd;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_delete_dom_user(const char *desc, SAMR_Q_DELETE_DOM_USER * q_u,
+			       prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_delete_dom_user");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("user_pol", &q_u->user_pol, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_delete_dom_user(const char *desc, SAMR_R_DELETE_DOM_USER * r_u,
+			       prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_delete_dom_user");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &r_u->pol, ps, depth))
+		return False;
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+void init_samr_q_open_user(SAMR_Q_OPEN_USER * q_u,
+			   POLICY_HND *pol,
+			   uint32 access_mask, uint32 rid)
+{
+	DEBUG(5, ("samr_init_samr_q_open_user\n"));
+
+	q_u->domain_pol = *pol;
+	q_u->access_mask = access_mask;
+	q_u->user_rid = rid;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_open_user(const char *desc, SAMR_Q_OPEN_USER * q_u,
+			 prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_open_user");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("domain_pol", &q_u->domain_pol, ps, depth))
+		return False;
+
+	if(!prs_uint32("access_mask", ps, depth, &q_u->access_mask))
+		return False;
+	if(!prs_uint32("user_rid ", ps, depth, &q_u->user_rid))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_open_user(const char *desc, SAMR_R_OPEN_USER * r_u,
+			 prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_open_user");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("user_pol", &r_u->user_pol, ps, depth))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+void init_samr_q_create_user(SAMR_Q_CREATE_USER * q_u,
+			     POLICY_HND *pol,
+			     const char *name,
+			     uint32 acb_info, uint32 acct_flags)
+{
+	DEBUG(5, ("samr_init_samr_q_create_user\n"));
+
+	q_u->domain_pol = *pol;
+
+	init_unistr2(&q_u->uni_name, name, UNI_FLAGS_NONE);
+	init_uni_hdr(&q_u->hdr_name, &q_u->uni_name);
+
+	q_u->acb_info = acb_info;
+	q_u->acct_flags = acct_flags;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_create_user(const char *desc, SAMR_Q_CREATE_USER * q_u,
+			   prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_create_user");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("domain_pol", &q_u->domain_pol, ps, depth))
+		return False;
+
+	if(!smb_io_unihdr("hdr_name", &q_u->hdr_name, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni_name", &q_u->uni_name, q_u->hdr_name.buffer, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("acb_info   ", ps, depth, &q_u->acb_info))
+		return False;
+	if(!prs_uint32("acct_flags", ps, depth, &q_u->acct_flags))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_create_user(const char *desc, SAMR_R_CREATE_USER * r_u,
+			   prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_create_user");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("user_pol", &r_u->user_pol, ps, depth))
+		return False;
+
+	if(!prs_uint32("access_granted", ps, depth, &r_u->access_granted))
+		return False;
+	if(!prs_uint32("user_rid ", ps, depth, &r_u->user_rid))
+		return False;
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_QUERY_USERINFO structure.
+********************************************************************/
+
+void init_samr_q_query_userinfo(SAMR_Q_QUERY_USERINFO * q_u,
+				const POLICY_HND *hnd, uint16 switch_value)
+{
+	DEBUG(5, ("init_samr_q_query_userinfo\n"));
+
+	q_u->pol = *hnd;
+	q_u->switch_value = switch_value;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_query_userinfo(const char *desc, SAMR_Q_QUERY_USERINFO * q_u,
+			      prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_query_userinfo");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &q_u->pol, ps, depth))
+		return False;
+
+	if(!prs_uint16("switch_value", ps, depth, &q_u->switch_value)) /* 0x0015 or 0x0011 */
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a LOGON_HRS structure.
+********************************************************************/
+
+static BOOL sam_io_logon_hrs(const char *desc, LOGON_HRS * hrs,
+			     prs_struct *ps, int depth)
+{
+	if (hrs == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_logon_hrs");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("maxlen", ps, depth, &hrs->max_len))
+		return False;
+
+	if(!prs_uint32("offset", ps, depth, &hrs->offset))
+		return False;
+
+	if(!prs_uint32("len  ", ps, depth, &hrs->len))
+		return False;
+
+	if (hrs->len > sizeof(hrs->hours)) {
+		DEBUG(3, ("sam_io_logon_hrs: truncating length from %d\n", hrs->len));
+		hrs->len = sizeof(hrs->hours);
+	}
+
+	if(!prs_uint8s(False, "hours", ps, depth, hrs->hours, hrs->len))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAM_USER_INFO_18 structure.
+********************************************************************/
+
+void init_sam_user_info18(SAM_USER_INFO_18 * usr,
+			  const uint8 lm_pwd[16], const uint8 nt_pwd[16])
+{
+	DEBUG(5, ("init_sam_user_info18\n"));
+
+	usr->lm_pwd_active =
+		memcpy(usr->lm_pwd, lm_pwd, sizeof(usr->lm_pwd)) ? 1 : 0;
+	usr->nt_pwd_active =
+		memcpy(usr->nt_pwd, nt_pwd, sizeof(usr->nt_pwd)) ? 1 : 0;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_user_info18(const char *desc, SAM_USER_INFO_18 * u,
+			prs_struct *ps, int depth)
+{
+	if (u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_user_info18");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint8s(False, "lm_pwd", ps, depth, u->lm_pwd, sizeof(u->lm_pwd)))
+		return False;
+	if(!prs_uint8s(False, "nt_pwd", ps, depth, u->nt_pwd, sizeof(u->nt_pwd)))
+		return False;
+
+	if(!prs_uint8("lm_pwd_active", ps, depth, &u->lm_pwd_active))
+		return False;
+	if(!prs_uint8("nt_pwd_active", ps, depth, &u->nt_pwd_active))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAM_USER_INFO_7 structure.
+********************************************************************/
+
+void init_sam_user_info7(SAM_USER_INFO_7 * usr, const char *name)
+{
+	DEBUG(5, ("init_sam_user_info7\n"));
+
+	init_unistr2(&usr->uni_name, name, UNI_FLAGS_NONE);	/* unicode string for name */
+	init_uni_hdr(&usr->hdr_name, &usr->uni_name);		/* unicode header for name */
+
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_user_info7(const char *desc, SAM_USER_INFO_7 * usr,
+			prs_struct *ps, int depth)
+{
+	if (usr == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_user_info7");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_unihdr("unihdr", &usr->hdr_name, ps, depth))
+		return False;
+
+	if(!smb_io_unistr2("unistr2", &usr->uni_name, True, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAM_USER_INFO_9 structure.
+********************************************************************/
+
+void init_sam_user_info9(SAM_USER_INFO_9 * usr, uint32 rid_group)
+{
+	DEBUG(5, ("init_sam_user_info9\n"));
+
+	usr->rid_group = rid_group;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_user_info9(const char *desc, SAM_USER_INFO_9 * usr,
+			prs_struct *ps, int depth)
+{
+	if (usr == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_user_info9");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("rid_group", ps, depth, &usr->rid_group))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAM_USER_INFO_16 structure.
+********************************************************************/
+
+void init_sam_user_info16(SAM_USER_INFO_16 * usr, uint32 acb_info)
+{
+	DEBUG(5, ("init_sam_user_info16\n"));
+
+	usr->acb_info = acb_info;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_user_info16(const char *desc, SAM_USER_INFO_16 * usr,
+			prs_struct *ps, int depth)
+{
+	if (usr == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_user_info16");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("acb_info", ps, depth, &usr->acb_info))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAM_USER_INFO_17 structure.
+********************************************************************/
+
+void init_sam_user_info17(SAM_USER_INFO_17 * usr,
+			  NTTIME * expiry,
+			  char *mach_acct,
+			  uint32 rid_user, uint32 rid_group, uint16 acct_ctrl)
+{
+	DEBUG(5, ("init_sam_user_info17\n"));
+
+	memcpy(&usr->expiry, expiry, sizeof(usr->expiry));	/* expiry time or something? */
+	ZERO_STRUCT(usr->padding_1);	/* 0 - padding 24 bytes */
+
+	usr->padding_2 = 0;	/* 0 - padding 4 bytes */
+
+	usr->ptr_1 = 1;		/* pointer */
+	ZERO_STRUCT(usr->padding_3);	/* 0 - padding 32 bytes */
+	usr->padding_4 = 0;	/* 0 - padding 4 bytes */
+
+	usr->ptr_2 = 1;		/* pointer */
+	usr->padding_5 = 0;	/* 0 - padding 4 bytes */
+
+	usr->ptr_3 = 1;		/* pointer */
+	ZERO_STRUCT(usr->padding_6);	/* 0 - padding 32 bytes */
+
+	usr->rid_user = rid_user;
+	usr->rid_group = rid_group;
+
+	usr->acct_ctrl = acct_ctrl;
+	usr->unknown_3 = 0x0000;
+
+	usr->unknown_4 = 0x003f;	/* 0x003f      - 16 bit unknown */
+	usr->unknown_5 = 0x003c;	/* 0x003c      - 16 bit unknown */
+
+	ZERO_STRUCT(usr->padding_7);	/* 0 - padding 16 bytes */
+	usr->padding_8 = 0;	/* 0 - padding 4 bytes */
+
+	init_unistr2(&usr->uni_mach_acct, mach_acct, UNI_FLAGS_NONE);	/* unicode string for machine account */
+	init_uni_hdr(&usr->hdr_mach_acct, &usr->uni_mach_acct);	/* unicode header for machine account */
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_user_info17(const char *desc, SAM_USER_INFO_17 * usr,
+			prs_struct *ps, int depth)
+{
+	if (usr == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_unknown_17");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint8s(False, "padding_0", ps, depth, usr->padding_0, sizeof(usr->padding_0)))
+		return False;
+
+	if(!smb_io_time("time", &usr->expiry, ps, depth))
+		return False;
+
+	if(!prs_uint8s(False, "padding_1", ps, depth, usr->padding_1, sizeof(usr->padding_1)))
+		return False;
+
+	if(!smb_io_unihdr("unihdr", &usr->hdr_mach_acct, ps, depth))
+		return False;
+
+	if(!prs_uint32("padding_2", ps, depth, &usr->padding_2))
+		return False;
+
+	if(!prs_uint32("ptr_1    ", ps, depth, &usr->ptr_1))
+		return False;
+	if(!prs_uint8s(False, "padding_3", ps, depth, usr->padding_3, sizeof(usr->padding_3)))
+		return False;
+
+	if(!prs_uint32("padding_4", ps, depth, &usr->padding_4))
+		return False;
+
+	if(!prs_uint32("ptr_2    ", ps, depth, &usr->ptr_2))
+		return False;
+	if(!prs_uint32("padding_5", ps, depth, &usr->padding_5))
+		return False;
+
+	if(!prs_uint32("ptr_3    ", ps, depth, &usr->ptr_3))
+		return False;
+	if(!prs_uint8s(False, "padding_6", ps, depth, usr->padding_6,sizeof(usr->padding_6)))
+		return False;
+
+	if(!prs_uint32("rid_user ", ps, depth, &usr->rid_user))
+		return False;
+	if(!prs_uint32("rid_group", ps, depth, &usr->rid_group))
+		return False;
+	if(!prs_uint16("acct_ctrl", ps, depth, &usr->acct_ctrl))
+		return False;
+	if(!prs_uint16("unknown_3", ps, depth, &usr->unknown_3))
+		return False;
+	if(!prs_uint16("unknown_4", ps, depth, &usr->unknown_4))
+		return False;
+	if(!prs_uint16("unknown_5", ps, depth, &usr->unknown_5))
+		return False;
+
+	if(!prs_uint8s(False, "padding_7", ps, depth, usr->padding_7, sizeof(usr->padding_7)))
+		return False;
+
+	if(!prs_uint32("padding_8", ps, depth, &(usr->padding_8)))
+		return False;
+
+	if(!smb_io_unistr2("unistr2", &usr->uni_mach_acct, True, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint8s(False, "padding_9", ps, depth, usr->padding_9, sizeof(usr->padding_9)))
+		return False;
+
+	return True;
+}
+
+/*************************************************************************
+ init_sam_user_info24
+ *************************************************************************/
+
+void init_sam_user_info24(SAM_USER_INFO_24 * usr, char newpass[516],
+			  uint8 pw_len)
+{
+	DEBUG(10, ("init_sam_user_info24:\n"));
+	memcpy(usr->pass, newpass, sizeof(usr->pass));
+	usr->pw_len = pw_len;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_user_info24(const char *desc, SAM_USER_INFO_24 * usr,
+			       prs_struct *ps, int depth)
+{
+	if (usr == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_user_info24");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint8s(False, "password", ps, depth, usr->pass, 
+		       sizeof(usr->pass)))
+		return False;
+	
+	if (MARSHALLING(ps) && (usr->pw_len != 0)) {
+		if (!prs_uint8("pw_len", ps, depth, &usr->pw_len))
+			return False;
+	} else if (UNMARSHALLING(ps)) {
+		if (!prs_uint8("pw_len", ps, depth, &usr->pw_len))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_user_info26(const char *desc, SAM_USER_INFO_26 * usr,
+			       prs_struct *ps, int depth)
+{
+	if (usr == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_user_info26");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint8s(False, "password", ps, depth, usr->pass, 
+		       sizeof(usr->pass)))
+		return False;
+	
+	if (!prs_uint8("pw_len", ps, depth, &usr->pw_len))
+		return False;
+
+	return True;
+}
+
+
+/*************************************************************************
+ init_sam_user_info23
+
+ unknown_6 = 0x0000 04ec 
+
+ *************************************************************************/
+
+void init_sam_user_info23W(SAM_USER_INFO_23 * usr, NTTIME * logon_time,	/* all zeros */
+			NTTIME * logoff_time,	/* all zeros */
+			NTTIME * kickoff_time,	/* all zeros */
+			NTTIME * pass_last_set_time,	/* all zeros */
+			NTTIME * pass_can_change_time,	/* all zeros */
+			NTTIME * pass_must_change_time,	/* all zeros */
+			UNISTR2 *user_name,
+			UNISTR2 *full_name,
+			UNISTR2 *home_dir,
+			UNISTR2 *dir_drive,
+			UNISTR2 *log_scr,
+			UNISTR2 *prof_path,
+			UNISTR2 *desc,
+			UNISTR2 *wkstas,
+			UNISTR2 *unk_str,
+			UNISTR2 *mung_dial,
+			uint32 user_rid,	/* 0x0000 0000 */
+			uint32 group_rid,
+			uint32 acb_info,
+			uint32 fields_present,
+			uint16 logon_divs,
+			LOGON_HRS * hrs,
+			uint16 bad_password_count,
+			uint16 logon_count,
+			char newpass[516])
+{
+	usr->logon_time = *logon_time;	/* all zeros */
+	usr->logoff_time = *logoff_time;	/* all zeros */
+	usr->kickoff_time = *kickoff_time;	/* all zeros */
+	usr->pass_last_set_time = *pass_last_set_time;	/* all zeros */
+	usr->pass_can_change_time = *pass_can_change_time;	/* all zeros */
+	usr->pass_must_change_time = *pass_must_change_time;	/* all zeros */
+
+	ZERO_STRUCT(usr->nt_pwd);
+	ZERO_STRUCT(usr->lm_pwd);
+
+	usr->user_rid = user_rid;	/* 0x0000 0000 */
+	usr->group_rid = group_rid;
+	usr->acb_info = acb_info;
+	usr->fields_present = fields_present;	/* 09f8 27fa */
+
+	usr->logon_divs = logon_divs;	/* should be 168 (hours/week) */
+	usr->ptr_logon_hrs = hrs ? 1 : 0;
+
+	if (nt_time_is_zero(pass_must_change_time)) {
+		usr->passmustchange=PASS_MUST_CHANGE_AT_NEXT_LOGON;
+	} else {
+		usr->passmustchange=0;
+	}
+
+	ZERO_STRUCT(usr->padding1);
+	ZERO_STRUCT(usr->padding2);
+
+	usr->bad_password_count = bad_password_count;
+	usr->logon_count = logon_count;
+
+	memcpy(usr->pass, newpass, sizeof(usr->pass));
+
+	copy_unistr2(&usr->uni_user_name, user_name);
+	init_uni_hdr(&usr->hdr_user_name, &usr->uni_user_name);
+
+	copy_unistr2(&usr->uni_full_name, full_name);
+	init_uni_hdr(&usr->hdr_full_name, &usr->uni_full_name);
+
+	copy_unistr2(&usr->uni_home_dir, home_dir);
+	init_uni_hdr(&usr->hdr_home_dir, &usr->uni_home_dir);
+
+	copy_unistr2(&usr->uni_dir_drive, dir_drive);
+	init_uni_hdr(&usr->hdr_dir_drive, &usr->uni_dir_drive);
+
+	copy_unistr2(&usr->uni_logon_script, log_scr);
+	init_uni_hdr(&usr->hdr_logon_script, &usr->uni_logon_script);
+
+	copy_unistr2(&usr->uni_profile_path, prof_path);
+	init_uni_hdr(&usr->hdr_profile_path, &usr->uni_profile_path);
+
+	copy_unistr2(&usr->uni_acct_desc, desc);
+	init_uni_hdr(&usr->hdr_acct_desc, &usr->uni_acct_desc);
+
+	copy_unistr2(&usr->uni_workstations, wkstas);
+	init_uni_hdr(&usr->hdr_workstations, &usr->uni_workstations);
+
+	copy_unistr2(&usr->uni_comment, unk_str);
+	init_uni_hdr(&usr->hdr_comment, &usr->uni_comment);
+
+	copy_unistr2(&usr->uni_munged_dial, mung_dial);
+	init_uni_hdr(&usr->hdr_munged_dial, &usr->uni_munged_dial);
+
+	if (hrs) {
+		memcpy(&usr->logon_hrs, hrs, sizeof(usr->logon_hrs));
+	} else {
+		ZERO_STRUCT(usr->logon_hrs);
+	}
+}
+
+/*************************************************************************
+ init_sam_user_info23
+
+ unknown_6 = 0x0000 04ec 
+
+ *************************************************************************/
+
+void init_sam_user_info23A(SAM_USER_INFO_23 * usr, NTTIME * logon_time,	/* all zeros */
+			   NTTIME * logoff_time,	/* all zeros */
+			   NTTIME * kickoff_time,	/* all zeros */
+			   NTTIME * pass_last_set_time,	/* all zeros */
+			   NTTIME * pass_can_change_time,	/* all zeros */
+			   NTTIME * pass_must_change_time,	/* all zeros */
+			   char *user_name,	/* NULL */
+			   char *full_name,
+			   char *home_dir, char *dir_drive, char *log_scr,
+			   char *prof_path, const char *desc, char *wkstas,
+			   char *unk_str, char *mung_dial, uint32 user_rid,	/* 0x0000 0000 */
+			   uint32 group_rid, uint32 acb_info,
+			   uint32 fields_present, uint16 logon_divs,
+			   LOGON_HRS * hrs, uint16 bad_password_count, uint16 logon_count,
+			   char newpass[516])
+{
+	DATA_BLOB blob = base64_decode_data_blob(mung_dial);
+	
+	usr->logon_time = *logon_time;	/* all zeros */
+	usr->logoff_time = *logoff_time;	/* all zeros */
+	usr->kickoff_time = *kickoff_time;	/* all zeros */
+	usr->pass_last_set_time = *pass_last_set_time;	/* all zeros */
+	usr->pass_can_change_time = *pass_can_change_time;	/* all zeros */
+	usr->pass_must_change_time = *pass_must_change_time;	/* all zeros */
+
+	ZERO_STRUCT(usr->nt_pwd);
+	ZERO_STRUCT(usr->lm_pwd);
+
+	usr->user_rid = user_rid;	/* 0x0000 0000 */
+	usr->group_rid = group_rid;
+	usr->acb_info = acb_info;
+	usr->fields_present = fields_present;	/* 09f8 27fa */
+
+	usr->logon_divs = logon_divs;	/* should be 168 (hours/week) */
+	usr->ptr_logon_hrs = hrs ? 1 : 0;
+
+	if (nt_time_is_zero(pass_must_change_time)) {
+		usr->passmustchange=PASS_MUST_CHANGE_AT_NEXT_LOGON;
+	} else {
+		usr->passmustchange=0;
+	}
+
+	ZERO_STRUCT(usr->padding1);
+	ZERO_STRUCT(usr->padding2);
+
+	usr->bad_password_count = bad_password_count;
+	usr->logon_count = logon_count;
+
+	memcpy(usr->pass, newpass, sizeof(usr->pass));
+
+	init_unistr2(&usr->uni_user_name, user_name, UNI_FLAGS_NONE);
+	init_uni_hdr(&usr->hdr_user_name, &usr->uni_user_name);
+
+	init_unistr2(&usr->uni_full_name, full_name, UNI_FLAGS_NONE);
+	init_uni_hdr(&usr->hdr_full_name, &usr->uni_full_name);
+
+	init_unistr2(&usr->uni_home_dir, home_dir, UNI_FLAGS_NONE);
+	init_uni_hdr(&usr->hdr_home_dir, &usr->uni_home_dir);
+
+	init_unistr2(&usr->uni_dir_drive, dir_drive, UNI_FLAGS_NONE);
+	init_uni_hdr(&usr->hdr_dir_drive, &usr->uni_dir_drive);
+
+	init_unistr2(&usr->uni_logon_script, log_scr, UNI_FLAGS_NONE);
+	init_uni_hdr(&usr->hdr_logon_script, &usr->uni_logon_script);
+
+	init_unistr2(&usr->uni_profile_path, prof_path, UNI_FLAGS_NONE);
+	init_uni_hdr(&usr->hdr_profile_path, &usr->uni_profile_path);
+
+	init_unistr2(&usr->uni_acct_desc, desc, UNI_FLAGS_NONE);
+	init_uni_hdr(&usr->hdr_acct_desc, &usr->uni_acct_desc);
+
+	init_unistr2(&usr->uni_workstations, wkstas, UNI_FLAGS_NONE);
+	init_uni_hdr(&usr->hdr_workstations, &usr->uni_workstations);
+
+	init_unistr2(&usr->uni_comment, unk_str, UNI_FLAGS_NONE);
+	init_uni_hdr(&usr->hdr_comment, &usr->uni_comment);
+
+	init_unistr2_from_datablob(&usr->uni_munged_dial, &blob);
+	init_uni_hdr(&usr->hdr_munged_dial, &usr->uni_munged_dial);
+
+	data_blob_free(&blob);
+	
+	if (hrs) {
+		memcpy(&usr->logon_hrs, hrs, sizeof(usr->logon_hrs));
+	} else {
+		ZERO_STRUCT(usr->logon_hrs);
+	}
+}
+
+
+/*************************************************************************
+ init_samr_user_info25P
+ fields_present = ACCT_NT_PWD_SET | ACCT_LM_PWD_SET | ACCT_FLAGS
+*************************************************************************/
+
+void init_sam_user_info25P(SAM_USER_INFO_25 * usr,
+			   uint32 fields_present, uint32 acb_info,
+			   char newpass[532])
+{
+	usr->fields_present = fields_present;
+	ZERO_STRUCT(usr->padding1);
+	ZERO_STRUCT(usr->padding2);
+
+	usr->acb_info = acb_info;
+	memcpy(usr->pass, newpass, sizeof(usr->pass));
+}
+
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_user_info23(const char *desc, SAM_USER_INFO_23 * usr,
+			       prs_struct *ps, int depth)
+{
+	if (usr == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_user_info23");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_time("logon_time           ", &usr->logon_time, ps, depth))
+		return False;
+	if(!smb_io_time("logoff_time          ", &usr->logoff_time, ps, depth))
+		return False;
+	if(!smb_io_time("kickoff_time         ", &usr->kickoff_time, ps, depth))
+		return False;
+	if(!smb_io_time("pass_last_set_time   ", &usr->pass_last_set_time, ps, depth))
+		return False;
+	if(!smb_io_time("pass_can_change_time ", &usr->pass_can_change_time, ps, depth))
+		return False;
+	if(!smb_io_time("pass_must_change_time", &usr->pass_must_change_time, ps, depth))
+		return False;
+
+	if(!smb_io_unihdr("hdr_user_name   ", &usr->hdr_user_name, ps, depth))	/* username unicode string header */
+		return False;
+	if(!smb_io_unihdr("hdr_full_name   ", &usr->hdr_full_name, ps, depth))	/* user's full name unicode string header */
+		return False;
+	if(!smb_io_unihdr("hdr_home_dir    ", &usr->hdr_home_dir, ps, depth))	/* home directory unicode string header */
+		return False;
+	if(!smb_io_unihdr("hdr_dir_drive   ", &usr->hdr_dir_drive, ps, depth))	/* home directory drive */
+		return False;
+	if(!smb_io_unihdr("hdr_logon_script", &usr->hdr_logon_script, ps, depth))	/* logon script unicode string header */
+		return False;
+	if(!smb_io_unihdr("hdr_profile_path", &usr->hdr_profile_path, ps, depth))	/* profile path unicode string header */
+		return False;
+	if(!smb_io_unihdr("hdr_acct_desc   ", &usr->hdr_acct_desc, ps, depth))	/* account desc */
+		return False;
+	if(!smb_io_unihdr("hdr_workstations", &usr->hdr_workstations, ps, depth))	/* wkstas user can log on from */
+		return False;
+	if(!smb_io_unihdr("hdr_comment ", &usr->hdr_comment, ps, depth))	/* unknown string */
+		return False;
+	if(!smb_io_unihdr("hdr_munged_dial ", &usr->hdr_munged_dial, ps, depth))	/* wkstas user can log on from */
+		return False;
+
+	if(!prs_uint8s(False, "lm_pwd        ", ps, depth, usr->lm_pwd, sizeof(usr->lm_pwd)))
+		return False;
+	if(!prs_uint8s(False, "nt_pwd        ", ps, depth, usr->nt_pwd, sizeof(usr->nt_pwd)))
+		return False;
+
+	if(!prs_uint32("user_rid      ", ps, depth, &usr->user_rid))	/* User ID */
+		return False;
+	if(!prs_uint32("group_rid     ", ps, depth, &usr->group_rid))	/* Group ID */
+		return False;
+	if(!prs_uint32("acb_info      ", ps, depth, &usr->acb_info))
+		return False;
+
+	if(!prs_uint32("fields_present ", ps, depth, &usr->fields_present))
+		return False;
+	if(!prs_uint16("logon_divs    ", ps, depth, &usr->logon_divs))	/* logon divisions per week */
+		return False;
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("ptr_logon_hrs ", ps, depth, &usr->ptr_logon_hrs))
+		return False;
+
+	if(!prs_uint16("bad_password_count     ", ps, depth, &usr->bad_password_count))
+		return False;
+	if(!prs_uint16("logon_count     ", ps, depth, &usr->logon_count))
+		return False;
+
+	if(!prs_uint8s(False, "padding1      ", ps, depth, usr->padding1, sizeof(usr->padding1)))
+		return False;
+	if(!prs_uint8("passmustchange ", ps, depth, &usr->passmustchange))
+		return False;
+	if(!prs_uint8("padding2       ", ps, depth, &usr->padding2))
+		return False;
+
+
+	if(!prs_uint8s(False, "password      ", ps, depth, usr->pass, sizeof(usr->pass)))
+		return False;
+
+	/* here begins pointed-to data */
+
+	if(!smb_io_unistr2("uni_user_name   ", &usr->uni_user_name, usr->hdr_user_name.buffer, ps, depth))	/* username unicode string */
+		return False;
+
+	if(!smb_io_unistr2("uni_full_name   ", &usr->uni_full_name, usr->hdr_full_name.buffer, ps, depth))	/* user's full name unicode string */
+		return False;
+
+	if(!smb_io_unistr2("uni_home_dir    ", &usr->uni_home_dir, usr->hdr_home_dir.buffer, ps, depth))	/* home directory unicode string */
+		return False;
+
+	if(!smb_io_unistr2("uni_dir_drive   ", &usr->uni_dir_drive, usr->hdr_dir_drive.buffer, ps, depth))	/* home directory drive unicode string */
+		return False;
+
+	if(!smb_io_unistr2("uni_logon_script", &usr->uni_logon_script, usr->hdr_logon_script.buffer, ps, depth))	/* logon script unicode string */
+		return False;
+
+	if(!smb_io_unistr2("uni_profile_path", &usr->uni_profile_path, usr->hdr_profile_path.buffer, ps, depth))	/* profile path unicode string */
+		return False;
+
+	if(!smb_io_unistr2("uni_acct_desc   ", &usr->uni_acct_desc, usr->hdr_acct_desc.buffer, ps, depth))	/* user desc unicode string */
+		return False;
+
+	if(!smb_io_unistr2("uni_workstations", &usr->uni_workstations, usr->hdr_workstations.buffer, ps, depth))	/* worksations user can log on from */
+		return False;
+
+	if(!smb_io_unistr2("uni_comment ", &usr->uni_comment, usr->hdr_comment.buffer, ps, depth))	/* unknown string */
+		return False;
+
+	if(!smb_io_unistr2("uni_munged_dial ", &usr->uni_munged_dial, usr->hdr_munged_dial.buffer, ps, depth))
+		return False;
+
+	/* ok, this is only guess-work (as usual) */
+	if (usr->ptr_logon_hrs) {
+		if(!sam_io_logon_hrs("logon_hrs", &usr->logon_hrs, ps, depth))
+			return False;
+	} 
+
+	return True;
+}
+
+/*******************************************************************
+ reads or writes a structure.
+ NB. This structure is *definately* incorrect. It's my best guess
+ currently for W2K SP2. The password field is encrypted in a different
+ way than normal... And there are definately other problems. JRA.
+********************************************************************/
+
+static BOOL sam_io_user_info25(const char *desc, SAM_USER_INFO_25 * usr, prs_struct *ps, int depth)
+{
+	if (usr == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_user_info25");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_time("logon_time           ", &usr->logon_time, ps, depth))
+		return False;
+	if(!smb_io_time("logoff_time          ", &usr->logoff_time, ps, depth))
+		return False;
+	if(!smb_io_time("kickoff_time         ", &usr->kickoff_time, ps, depth))
+		return False;
+	if(!smb_io_time("pass_last_set_time   ", &usr->pass_last_set_time, ps, depth))
+		return False;
+	if(!smb_io_time("pass_can_change_time ", &usr->pass_can_change_time, ps, depth))
+		return False;
+	if(!smb_io_time("pass_must_change_time", &usr->pass_must_change_time, ps, depth))
+		return False;
+
+	if(!smb_io_unihdr("hdr_user_name   ", &usr->hdr_user_name, ps, depth))	/* username unicode string header */
+		return False;
+	if(!smb_io_unihdr("hdr_full_name   ", &usr->hdr_full_name, ps, depth))	/* user's full name unicode string header */
+		return False;
+	if(!smb_io_unihdr("hdr_home_dir    ", &usr->hdr_home_dir, ps, depth))	/* home directory unicode string header */
+		return False;
+	if(!smb_io_unihdr("hdr_dir_drive   ", &usr->hdr_dir_drive, ps, depth))	/* home directory drive */
+		return False;
+	if(!smb_io_unihdr("hdr_logon_script", &usr->hdr_logon_script, ps, depth))	/* logon script unicode string header */
+		return False;
+	if(!smb_io_unihdr("hdr_profile_path", &usr->hdr_profile_path, ps, depth))	/* profile path unicode string header */
+		return False;
+	if(!smb_io_unihdr("hdr_acct_desc   ", &usr->hdr_acct_desc, ps, depth))	/* account desc */
+		return False;
+	if(!smb_io_unihdr("hdr_workstations", &usr->hdr_workstations, ps, depth))	/* wkstas user can log on from */
+		return False;
+	if(!smb_io_unihdr("hdr_comment ", &usr->hdr_comment, ps, depth))	/* unknown string */
+		return False;
+	if(!smb_io_unihdr("hdr_munged_dial ", &usr->hdr_munged_dial, ps, depth))	/* wkstas user can log on from */
+		return False;
+
+	if(!prs_uint8s(False, "lm_pwd        ", ps, depth, usr->lm_pwd, sizeof(usr->lm_pwd)))
+		return False;
+	if(!prs_uint8s(False, "nt_pwd        ", ps, depth, usr->nt_pwd, sizeof(usr->nt_pwd)))
+		return False;
+
+	if(!prs_uint32("user_rid      ", ps, depth, &usr->user_rid))	/* User ID */
+		return False;
+	if(!prs_uint32("group_rid     ", ps, depth, &usr->group_rid))	/* Group ID */
+		return False;
+	if(!prs_uint32("acb_info      ", ps, depth, &usr->acb_info))
+		return False;
+	if(!prs_uint32("fields_present ", ps, depth, &usr->fields_present))
+		return False;
+
+	if(!prs_uint16("logon_divs    ", ps, depth, &usr->logon_divs))	/* logon divisions per week */
+		return False;
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("ptr_logon_hrs ", ps, depth, &usr->ptr_logon_hrs))
+		return False;
+
+	if(!prs_uint16("bad_password_count     ", ps, depth, &usr->bad_password_count))
+		return False;
+	if(!prs_uint16("logon_count     ", ps, depth, &usr->logon_count))
+		return False;
+
+	if(!prs_uint8s(False, "padding1      ", ps, depth, usr->padding1, sizeof(usr->padding1)))
+		return False;
+	if(!prs_uint8("passmustchange ", ps, depth, &usr->passmustchange))
+		return False;
+	if(!prs_uint8("padding2       ", ps, depth, &usr->padding2))
+		return False;
+
+
+	if(!prs_uint8s(False, "password      ", ps, depth, usr->pass, sizeof(usr->pass)))
+		return False;
+
+	/* here begins pointed-to data */
+
+	if(!smb_io_unistr2("uni_user_name   ", &usr->uni_user_name, usr->hdr_user_name.buffer, ps, depth))	/* username unicode string */
+		return False;
+
+	if(!smb_io_unistr2("uni_full_name   ", &usr->uni_full_name, usr->hdr_full_name.buffer, ps, depth))	/* user's full name unicode string */
+		return False;
+
+	if(!smb_io_unistr2("uni_home_dir    ", &usr->uni_home_dir, usr->hdr_home_dir.buffer, ps, depth))	/* home directory unicode string */
+		return False;
+
+	if(!smb_io_unistr2("uni_dir_drive   ", &usr->uni_dir_drive, usr->hdr_dir_drive.buffer, ps, depth))	/* home directory drive unicode string */
+		return False;
+
+	if(!smb_io_unistr2("uni_logon_script", &usr->uni_logon_script, usr->hdr_logon_script.buffer, ps, depth))	/* logon script unicode string */
+		return False;
+
+	if(!smb_io_unistr2("uni_profile_path", &usr->uni_profile_path, usr->hdr_profile_path.buffer, ps, depth))	/* profile path unicode string */
+		return False;
+
+	if(!smb_io_unistr2("uni_acct_desc   ", &usr->uni_acct_desc, usr->hdr_acct_desc.buffer, ps, depth))	/* user desc unicode string */
+		return False;
+
+	if(!smb_io_unistr2("uni_workstations", &usr->uni_workstations, usr->hdr_workstations.buffer, ps, depth))	/* worksations user can log on from */
+		return False;
+
+	if(!smb_io_unistr2("uni_comment ", &usr->uni_comment, usr->hdr_comment.buffer, ps, depth))	/* unknown string */
+		return False;
+
+	if(!smb_io_unistr2("uni_munged_dial ", &usr->uni_munged_dial, usr->hdr_munged_dial.buffer, ps, depth))
+		return False;
+
+	/* ok, this is only guess-work (as usual) */
+	if (usr->ptr_logon_hrs) {
+		if(!sam_io_logon_hrs("logon_hrs", &usr->logon_hrs, ps, depth))
+			return False;
+	} 
+
+	return True;
+}
+
+
+/*************************************************************************
+ init_sam_user_info21W
+
+ unknown_6 = 0x0000 04ec 
+
+ *************************************************************************/
+
+void init_sam_user_info21W(SAM_USER_INFO_21 * usr,
+			   NTTIME * logon_time,
+			   NTTIME * logoff_time,
+			   NTTIME * kickoff_time,
+			   NTTIME * pass_last_set_time,
+			   NTTIME * pass_can_change_time,
+			   NTTIME * pass_must_change_time,
+			   UNISTR2 *user_name,
+			   UNISTR2 *full_name,
+			   UNISTR2 *home_dir,
+			   UNISTR2 *dir_drive,
+			   UNISTR2 *log_scr,
+			   UNISTR2 *prof_path,
+			   UNISTR2 *desc,
+			   UNISTR2 *wkstas,
+			   UNISTR2 *unk_str,
+			   UNISTR2 *mung_dial,
+			   uchar lm_pwd[16],
+			   uchar nt_pwd[16],
+			   uint32 user_rid,
+			   uint32 group_rid,
+			   uint32 acb_info,
+			   uint32 fields_present,
+			   uint16 logon_divs,
+			   LOGON_HRS * hrs,
+			   uint16 bad_password_count,
+			   uint16 logon_count)
+{
+	usr->logon_time = *logon_time;
+	usr->logoff_time = *logoff_time;
+	usr->kickoff_time = *kickoff_time;
+	usr->pass_last_set_time = *pass_last_set_time;
+	usr->pass_can_change_time = *pass_can_change_time;
+	usr->pass_must_change_time = *pass_must_change_time;
+
+	memcpy(usr->lm_pwd, lm_pwd, sizeof(usr->lm_pwd));
+	memcpy(usr->nt_pwd, nt_pwd, sizeof(usr->nt_pwd));
+
+	usr->user_rid = user_rid;
+	usr->group_rid = group_rid;
+	usr->acb_info = acb_info;
+	usr->fields_present = fields_present;	/* 0x00ff ffff */
+
+	usr->logon_divs = logon_divs;	/* should be 168 (hours/week) */
+	usr->ptr_logon_hrs = hrs ? 1 : 0;
+	usr->bad_password_count = bad_password_count;
+	usr->logon_count = logon_count;
+
+	if (nt_time_is_zero(pass_must_change_time)) {
+		usr->passmustchange=PASS_MUST_CHANGE_AT_NEXT_LOGON;
+	} else {
+		usr->passmustchange=0;
+	}
+
+	ZERO_STRUCT(usr->padding1);
+	ZERO_STRUCT(usr->padding2);
+
+	copy_unistr2(&usr->uni_user_name, user_name);
+	init_uni_hdr(&usr->hdr_user_name, &usr->uni_user_name);
+
+	copy_unistr2(&usr->uni_full_name, full_name);
+	init_uni_hdr(&usr->hdr_full_name, &usr->uni_full_name);
+
+	copy_unistr2(&usr->uni_home_dir, home_dir);
+	init_uni_hdr(&usr->hdr_home_dir, &usr->uni_home_dir);
+
+	copy_unistr2(&usr->uni_dir_drive, dir_drive);
+	init_uni_hdr(&usr->hdr_dir_drive, &usr->uni_dir_drive);
+
+	copy_unistr2(&usr->uni_logon_script, log_scr);
+	init_uni_hdr(&usr->hdr_logon_script, &usr->uni_logon_script);
+
+	copy_unistr2(&usr->uni_profile_path, prof_path);
+	init_uni_hdr(&usr->hdr_profile_path, &usr->uni_profile_path);
+
+	copy_unistr2(&usr->uni_acct_desc, desc);
+	init_uni_hdr(&usr->hdr_acct_desc, &usr->uni_acct_desc);
+
+	copy_unistr2(&usr->uni_workstations, wkstas);
+	init_uni_hdr(&usr->hdr_workstations, &usr->uni_workstations);
+
+	copy_unistr2(&usr->uni_comment, unk_str);
+	init_uni_hdr(&usr->hdr_comment, &usr->uni_comment);
+
+	copy_unistr2(&usr->uni_munged_dial, mung_dial);
+	init_uni_hdr(&usr->hdr_munged_dial, &usr->uni_munged_dial);
+
+	if (hrs) {
+		memcpy(&usr->logon_hrs, hrs, sizeof(usr->logon_hrs));
+	} else {
+		ZERO_STRUCT(usr->logon_hrs);
+	}
+}
+
+/*************************************************************************
+ init_sam_user_info21
+
+ unknown_6 = 0x0000 04ec 
+
+ *************************************************************************/
+
+NTSTATUS init_sam_user_info21A(SAM_USER_INFO_21 *usr, struct samu *pw, DOM_SID *domain_sid)
+{
+	NTTIME 		logon_time, logoff_time, kickoff_time,
+			pass_last_set_time, pass_can_change_time,
+			pass_must_change_time;
+			
+	time_t must_change_time;
+	const char*		user_name = pdb_get_username(pw);
+	const char*		full_name = pdb_get_fullname(pw);
+	const char*		home_dir  = pdb_get_homedir(pw);
+	const char*		dir_drive = pdb_get_dir_drive(pw);
+	const char*		logon_script = pdb_get_logon_script(pw);
+	const char*		profile_path = pdb_get_profile_path(pw);
+	const char*		description = pdb_get_acct_desc(pw);
+	const char*		workstations = pdb_get_workstations(pw);
+	const char*		munged_dial = pdb_get_munged_dial(pw);
+	DATA_BLOB 		munged_dial_blob;
+
+	uint32 user_rid;
+	const DOM_SID *user_sid;
+
+	uint32 group_rid;
+	const DOM_SID *group_sid;
+
+	if (munged_dial) {
+		munged_dial_blob = base64_decode_data_blob(munged_dial);
+	} else {
+		munged_dial_blob = data_blob(NULL, 0);
+	}
+
+	/* Create NTTIME structs */
+	unix_to_nt_time (&logon_time,	        pdb_get_logon_time(pw));
+	unix_to_nt_time (&logoff_time,	pdb_get_logoff_time(pw));
+	unix_to_nt_time (&kickoff_time, 	pdb_get_kickoff_time(pw));
+	unix_to_nt_time (&pass_last_set_time, pdb_get_pass_last_set_time(pw));
+	unix_to_nt_time (&pass_can_change_time,pdb_get_pass_can_change_time(pw));
+	must_change_time = pdb_get_pass_must_change_time(pw);
+	if (must_change_time == get_time_t_max())
+		unix_to_nt_time_abs(&pass_must_change_time, must_change_time);
+	else
+		unix_to_nt_time(&pass_must_change_time, must_change_time);
+	
+	/* structure assignment */
+	usr->logon_time            = logon_time;
+	usr->logoff_time           = logoff_time;
+	usr->kickoff_time          = kickoff_time;
+	usr->pass_last_set_time    = pass_last_set_time;
+	usr->pass_can_change_time  = pass_can_change_time;
+	usr->pass_must_change_time = pass_must_change_time;
+
+	ZERO_STRUCT(usr->nt_pwd);
+	ZERO_STRUCT(usr->lm_pwd);
+
+	user_sid = pdb_get_user_sid(pw);
+	
+	if (!sid_peek_check_rid(domain_sid, user_sid, &user_rid)) {
+		fstring user_sid_string;
+		fstring domain_sid_string;
+		DEBUG(0, ("init_sam_user_info_21A: User %s has SID %s, \nwhich conflicts with "
+			  "the domain sid %s.  Failing operation.\n", 
+			  user_name, 
+			  sid_to_string(user_sid_string, user_sid),
+			  sid_to_string(domain_sid_string, domain_sid)));
+		data_blob_free(&munged_dial_blob);
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	become_root();	
+	group_sid = pdb_get_group_sid(pw);
+	unbecome_root();
+
+	if (!sid_peek_check_rid(domain_sid, group_sid, &group_rid)) {
+		fstring group_sid_string;
+		fstring domain_sid_string;
+		DEBUG(0, ("init_sam_user_info_21A: User %s has Primary Group SID %s, \n"
+			  "which conflicts with the domain sid %s.  Failing operation.\n", 
+			  user_name, 
+			  sid_to_string(group_sid_string, group_sid),
+			  sid_to_string(domain_sid_string, domain_sid)));
+		data_blob_free(&munged_dial_blob);
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	usr->user_rid  = user_rid;
+	usr->group_rid = group_rid;
+	usr->acb_info  = pdb_get_acct_ctrl(pw);
+
+	/*
+	  Look at a user on a real NT4 PDC with usrmgr, press
+	  'ok'. Then you will see that fields_present is set to
+	  0x08f827fa. Look at the user immediately after that again,
+	  and you will see that 0x00fffff is returned. This solves
+	  the problem that you get access denied after having looked
+	  at the user.
+	  -- Volker
+	*/
+	usr->fields_present = pdb_build_fields_present(pw);
+
+	usr->logon_divs = pdb_get_logon_divs(pw); 
+	usr->ptr_logon_hrs = pdb_get_hours(pw) ? 1 : 0;
+	usr->bad_password_count = pdb_get_bad_password_count(pw);
+	usr->logon_count = pdb_get_logon_count(pw);
+
+	if (pdb_get_pass_must_change_time(pw) == 0) {
+		usr->passmustchange=PASS_MUST_CHANGE_AT_NEXT_LOGON;
+	} else {
+		usr->passmustchange=0;
+	}
+
+	ZERO_STRUCT(usr->padding1);
+	ZERO_STRUCT(usr->padding2);
+
+	init_unistr2(&usr->uni_user_name, user_name, UNI_STR_TERMINATE);
+	init_uni_hdr(&usr->hdr_user_name, &usr->uni_user_name);
+
+	init_unistr2(&usr->uni_full_name, full_name, UNI_STR_TERMINATE);
+	init_uni_hdr(&usr->hdr_full_name, &usr->uni_full_name);
+
+	init_unistr2(&usr->uni_home_dir, home_dir, UNI_STR_TERMINATE);
+	init_uni_hdr(&usr->hdr_home_dir, &usr->uni_home_dir);
+
+	init_unistr2(&usr->uni_dir_drive, dir_drive, UNI_STR_TERMINATE);
+	init_uni_hdr(&usr->hdr_dir_drive, &usr->uni_dir_drive);
+
+	init_unistr2(&usr->uni_logon_script, logon_script, UNI_STR_TERMINATE);
+	init_uni_hdr(&usr->hdr_logon_script, &usr->uni_logon_script);
+
+	init_unistr2(&usr->uni_profile_path, profile_path, UNI_STR_TERMINATE);
+	init_uni_hdr(&usr->hdr_profile_path, &usr->uni_profile_path);
+
+	init_unistr2(&usr->uni_acct_desc, description, UNI_STR_TERMINATE);
+	init_uni_hdr(&usr->hdr_acct_desc, &usr->uni_acct_desc);
+
+	init_unistr2(&usr->uni_workstations, workstations, UNI_STR_TERMINATE);
+	init_uni_hdr(&usr->hdr_workstations, &usr->uni_workstations);
+
+	init_unistr2(&usr->uni_comment, NULL, UNI_STR_TERMINATE);
+	init_uni_hdr(&usr->hdr_comment, &usr->uni_comment);
+
+	init_unistr2_from_datablob(&usr->uni_munged_dial, &munged_dial_blob);
+	init_uni_hdr(&usr->hdr_munged_dial, &usr->uni_munged_dial);
+	data_blob_free(&munged_dial_blob);
+
+	if (pdb_get_hours(pw)) {
+		usr->logon_hrs.max_len = 1260;
+		usr->logon_hrs.offset = 0;
+		usr->logon_hrs.len = pdb_get_hours_len(pw);
+		memcpy(&usr->logon_hrs.hours, pdb_get_hours(pw), MAX_HOURS_LEN);
+	} else {
+		usr->logon_hrs.max_len = 1260;
+		usr->logon_hrs.offset = 0;
+		usr->logon_hrs.len = 0;
+		memset(&usr->logon_hrs, 0xff, sizeof(usr->logon_hrs));
+	}
+
+	return NT_STATUS_OK;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_user_info21(const char *desc, SAM_USER_INFO_21 * usr,
+			prs_struct *ps, int depth)
+{
+	if (usr == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_user_info21");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_time("logon_time           ", &usr->logon_time, ps, depth))
+		return False;
+	if(!smb_io_time("logoff_time          ", &usr->logoff_time, ps, depth))
+		return False;
+	if(!smb_io_time("pass_last_set_time   ", &usr->pass_last_set_time, ps,depth))
+		return False;
+	if(!smb_io_time("kickoff_time         ", &usr->kickoff_time, ps, depth))
+		return False;
+	if(!smb_io_time("pass_can_change_time ", &usr->pass_can_change_time, ps,depth))
+		return False;
+	if(!smb_io_time("pass_must_change_time", &usr->pass_must_change_time,  ps, depth))
+		return False;
+
+	if(!smb_io_unihdr("hdr_user_name   ", &usr->hdr_user_name, ps, depth))	/* username unicode string header */
+		return False;
+	if(!smb_io_unihdr("hdr_full_name   ", &usr->hdr_full_name, ps, depth))	/* user's full name unicode string header */
+		return False;
+	if(!smb_io_unihdr("hdr_home_dir    ", &usr->hdr_home_dir, ps, depth))	/* home directory unicode string header */
+		return False;
+	if(!smb_io_unihdr("hdr_dir_drive   ", &usr->hdr_dir_drive, ps, depth))	/* home directory drive */
+		return False;
+	if(!smb_io_unihdr("hdr_logon_script", &usr->hdr_logon_script, ps, depth))	/* logon script unicode string header */
+		return False;
+	if(!smb_io_unihdr("hdr_profile_path", &usr->hdr_profile_path, ps, depth))	/* profile path unicode string header */
+		return False;
+	if(!smb_io_unihdr("hdr_acct_desc   ", &usr->hdr_acct_desc, ps, depth))	/* account desc */
+		return False;
+	if(!smb_io_unihdr("hdr_workstations", &usr->hdr_workstations, ps, depth))	/* wkstas user can log on from */
+		return False;
+	if(!smb_io_unihdr("hdr_comment ", &usr->hdr_comment, ps, depth))	/* unknown string */
+		return False;
+	if(!smb_io_unihdr("hdr_munged_dial ", &usr->hdr_munged_dial, ps, depth))	/* wkstas user can log on from */
+		return False;
+
+	if(!prs_uint8s(False, "lm_pwd        ", ps, depth, usr->lm_pwd, sizeof(usr->lm_pwd)))
+		return False;
+	if(!prs_uint8s(False, "nt_pwd        ", ps, depth, usr->nt_pwd, sizeof(usr->nt_pwd)))
+		return False;
+
+	if(!prs_uint32("user_rid      ", ps, depth, &usr->user_rid))	/* User ID */
+		return False;
+	if(!prs_uint32("group_rid     ", ps, depth, &usr->group_rid))	/* Group ID */
+		return False;
+	if(!prs_uint32("acb_info      ", ps, depth, &usr->acb_info))
+		return False;
+
+	if(!prs_uint32("fields_present ", ps, depth, &usr->fields_present))
+		return False;
+	if(!prs_uint16("logon_divs    ", ps, depth, &usr->logon_divs))	/* logon divisions per week */
+		return False;
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("ptr_logon_hrs ", ps, depth, &usr->ptr_logon_hrs))
+		return False;
+
+	if(!prs_uint16("bad_password_count     ", ps, depth, &usr->bad_password_count))
+		return False;
+	if(!prs_uint16("logon_count     ", ps, depth, &usr->logon_count))
+		return False;
+
+	if(!prs_uint8s(False, "padding1      ", ps, depth, usr->padding1, sizeof(usr->padding1)))
+		return False;
+	if(!prs_uint8("passmustchange ", ps, depth, &usr->passmustchange))
+		return False;
+	if(!prs_uint8("padding2       ", ps, depth, &usr->padding2))
+		return False;
+
+	/* here begins pointed-to data */
+
+	if(!smb_io_unistr2("uni_user_name   ", &usr->uni_user_name,usr->hdr_user_name.buffer, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni_full_name   ", &usr->uni_full_name, usr->hdr_full_name.buffer, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni_home_dir    ", &usr->uni_home_dir, usr->hdr_home_dir.buffer, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni_dir_drive   ", &usr->uni_dir_drive, usr->hdr_dir_drive.buffer, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni_logon_script", &usr->uni_logon_script, usr->hdr_logon_script.buffer, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni_profile_path", &usr->uni_profile_path, usr->hdr_profile_path.buffer, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni_acct_desc   ", &usr->uni_acct_desc, usr->hdr_acct_desc.buffer, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni_workstations", &usr->uni_workstations, usr->hdr_workstations.buffer, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni_comment", &usr->uni_comment, usr->hdr_comment.buffer, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni_munged_dial ", &usr->uni_munged_dial,usr->hdr_munged_dial.buffer, ps, depth))
+		return False;
+
+	/* ok, this is only guess-work (as usual) */
+	if (usr->ptr_logon_hrs) {
+		if(!sam_io_logon_hrs("logon_hrs", &usr->logon_hrs, ps, depth))
+			return False;
+	}
+
+	return True;
+}
+
+void init_sam_user_info20A(SAM_USER_INFO_20 *usr, struct samu *pw)
+{
+	const char *munged_dial = pdb_get_munged_dial(pw);
+	DATA_BLOB blob;
+
+	if (munged_dial) {
+		blob = base64_decode_data_blob(munged_dial);
+	} else {
+		blob = data_blob(NULL, 0);
+	}
+
+	init_unistr2_from_datablob(&usr->uni_munged_dial, &blob);
+	init_uni_hdr(&usr->hdr_munged_dial, &usr->uni_munged_dial);
+	data_blob_free(&blob);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL sam_io_user_info20(const char *desc, SAM_USER_INFO_20 *usr,
+			prs_struct *ps, int depth)
+{
+	if (usr == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "sam_io_user_info20");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_unihdr("hdr_munged_dial ", &usr->hdr_munged_dial, ps, depth))	/* wkstas user can log on from */
+		return False;
+
+	if(!smb_io_unistr2("uni_munged_dial ", &usr->uni_munged_dial,usr->hdr_munged_dial.buffer, ps, depth))	/* worksations user can log on from */
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAM_USERINFO_CTR structure.
+********************************************************************/
+
+NTSTATUS make_samr_userinfo_ctr_usr21(TALLOC_CTX *ctx, SAM_USERINFO_CTR * ctr,
+				    uint16 switch_value,
+				    SAM_USER_INFO_21 * usr)
+{
+	DEBUG(5, ("make_samr_userinfo_ctr_usr21\n"));
+
+	ctr->switch_value = switch_value;
+	ctr->info.id = NULL;
+
+	switch (switch_value) {
+	case 16:
+		ctr->info.id16 = TALLOC_ZERO_P(ctx,SAM_USER_INFO_16);
+		if (ctr->info.id16 == NULL)
+			return NT_STATUS_NO_MEMORY;
+
+		init_sam_user_info16(ctr->info.id16, usr->acb_info);
+		break;
+#if 0
+/* whoops - got this wrong.  i think.  or don't understand what's happening. */
+	case 17:
+		{
+			NTTIME expire;
+			info = (void *)&id11;
+
+			expire.low = 0xffffffff;
+			expire.high = 0x7fffffff;
+
+			ctr->info.id = TALLOC_ZERO_P(ctx,SAM_USER_INFO_17);
+			init_sam_user_info11(ctr->info.id17, &expire,
+					     "BROOKFIELDS$",	/* name */
+					     0x03ef,	/* user rid */
+					     0x201,	/* group rid */
+					     0x0080);	/* acb info */
+
+			break;
+		}
+#endif
+	case 18:
+		ctr->info.id18 = TALLOC_ZERO_P(ctx,SAM_USER_INFO_18);
+		if (ctr->info.id18 == NULL)
+			return NT_STATUS_NO_MEMORY;
+
+		init_sam_user_info18(ctr->info.id18, usr->lm_pwd, usr->nt_pwd);
+		break;
+	case 21:
+		{
+			SAM_USER_INFO_21 *cusr;
+			cusr = TALLOC_ZERO_P(ctx,SAM_USER_INFO_21);
+			ctr->info.id21 = cusr;
+			if (ctr->info.id21 == NULL)
+				return NT_STATUS_NO_MEMORY;
+			memcpy(cusr, usr, sizeof(*usr));
+			memset(cusr->lm_pwd, 0, sizeof(cusr->lm_pwd));
+			memset(cusr->nt_pwd, 0, sizeof(cusr->nt_pwd));
+			break;
+		}
+	default:
+		DEBUG(4,("make_samr_userinfo_ctr: unsupported info\n"));
+		return NT_STATUS_INVALID_INFO_CLASS;
+	}
+
+	return NT_STATUS_OK;
+}
+
+/*******************************************************************
+inits a SAM_USERINFO_CTR structure.
+********************************************************************/
+
+static void init_samr_userinfo_ctr(SAM_USERINFO_CTR * ctr, DATA_BLOB *sess_key,
+				   uint16 switch_value, void *info)
+{
+	DEBUG(5, ("init_samr_userinfo_ctr\n"));
+
+	ctr->switch_value = switch_value;
+	ctr->info.id = info;
+
+	switch (switch_value) {
+	case 0x18:
+		SamOEMhashBlob(ctr->info.id24->pass, 516, sess_key);
+		dump_data(100, (char *)sess_key->data, sess_key->length);
+		dump_data(100, (char *)ctr->info.id24->pass, 516);
+		break;
+	case 0x17:
+		SamOEMhashBlob(ctr->info.id23->pass, 516, sess_key);
+		dump_data(100, (char *)sess_key->data, sess_key->length);
+		dump_data(100, (char *)ctr->info.id23->pass, 516);
+		break;
+	case 0x07:
+		break;
+	default:
+		DEBUG(4,("init_samr_userinfo_ctr: unsupported switch level: %d\n", switch_value));
+	}
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+static BOOL samr_io_userinfo_ctr(const char *desc, SAM_USERINFO_CTR **ppctr,
+				 prs_struct *ps, int depth)
+{
+	BOOL ret;
+	SAM_USERINFO_CTR *ctr;
+
+	prs_debug(ps, depth, desc, "samr_io_userinfo_ctr");
+	depth++;
+
+	if (UNMARSHALLING(ps)) {
+		ctr = PRS_ALLOC_MEM(ps,SAM_USERINFO_CTR,1);
+		if (ctr == NULL)
+			return False;
+		*ppctr = ctr;
+	} else {
+		ctr = *ppctr;
+	}
+
+	/* lkclXXXX DO NOT ALIGN BEFORE READING SWITCH VALUE! */
+
+	if(!prs_uint16("switch_value", ps, depth, &ctr->switch_value))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	ret = False;
+
+	switch (ctr->switch_value) {
+	case 7:
+		if (UNMARSHALLING(ps))
+			ctr->info.id7 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_7,1);
+		if (ctr->info.id7 == NULL) {
+			DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n"));
+			return False;
+		}
+		ret = sam_io_user_info7("", ctr->info.id7, ps, depth);
+		break;
+	case 9:
+		if (UNMARSHALLING(ps))
+			ctr->info.id9 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_9,1);
+		if (ctr->info.id9 == NULL) {
+			DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n"));
+			return False;
+		}
+		ret = sam_io_user_info9("", ctr->info.id9, ps, depth);
+		break;
+	case 16:
+		if (UNMARSHALLING(ps))
+			ctr->info.id16 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_16,1);
+		if (ctr->info.id16 == NULL) {
+			DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n"));
+			return False;
+		}
+		ret = sam_io_user_info16("", ctr->info.id16, ps, depth);
+		break;
+	case 17:
+		if (UNMARSHALLING(ps))
+			ctr->info.id17 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_17,1);
+
+		if (ctr->info.id17 == NULL) {
+			DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n"));
+			return False;
+		}
+		ret = sam_io_user_info17("", ctr->info.id17, ps, depth);
+		break;
+	case 18:
+		if (UNMARSHALLING(ps))
+			ctr->info.id18 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_18,1);
+
+		if (ctr->info.id18 == NULL) {
+			DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n"));
+			return False;
+		}
+		ret = sam_io_user_info18("", ctr->info.id18, ps, depth);
+		break;
+	case 20:
+		if (UNMARSHALLING(ps))
+			ctr->info.id20 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_20,1);
+
+		if (ctr->info.id20 == NULL) {
+			DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n"));
+			return False;
+		}
+		ret = sam_io_user_info20("", ctr->info.id20, ps, depth);
+		break;
+	case 21:
+		if (UNMARSHALLING(ps))
+			ctr->info.id21 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_21,1);
+
+		if (ctr->info.id21 == NULL) {
+			DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n"));
+			return False;
+		}
+		ret = sam_io_user_info21("", ctr->info.id21, ps, depth);
+		break;
+	case 23:
+		if (UNMARSHALLING(ps))
+			ctr->info.id23 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_23,1);
+
+		if (ctr->info.id23 == NULL) {
+			DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n"));
+			return False;
+		}
+		ret = sam_io_user_info23("", ctr->info.id23, ps, depth);
+		break;
+	case 24:
+		if (UNMARSHALLING(ps))
+			ctr->info.id24 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_24,1);
+
+		if (ctr->info.id24 == NULL) {
+			DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n"));
+			return False;
+		}
+		ret = sam_io_user_info24("", ctr->info.id24, ps,  depth);
+		break;
+	case 25:
+		if (UNMARSHALLING(ps))
+			ctr->info.id25 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_25,1);
+
+		if (ctr->info.id25 == NULL) {
+			DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n"));
+			return False;
+		}
+		ret = sam_io_user_info25("", ctr->info.id25, ps, depth);
+		break;
+	case 26:
+		if (UNMARSHALLING(ps))
+			ctr->info.id26 = PRS_ALLOC_MEM(ps,SAM_USER_INFO_26,1);
+
+		if (ctr->info.id26 == NULL) {
+			DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n"));
+			return False;
+		}
+		ret = sam_io_user_info26("", ctr->info.id26, ps,  depth);
+		break;
+	default:
+		DEBUG(2, ("samr_io_userinfo_ctr: unknown switch level 0x%x\n", ctr->switch_value));
+		ret = False;
+		break;
+	}
+
+	return ret;
+}
+
+/*******************************************************************
+inits a SAMR_R_QUERY_USERINFO structure.
+********************************************************************/
+
+void init_samr_r_query_userinfo(SAMR_R_QUERY_USERINFO * r_u,
+				SAM_USERINFO_CTR * ctr, NTSTATUS status)
+{
+	DEBUG(5, ("init_samr_r_query_userinfo\n"));
+
+	r_u->ptr = 0;
+	r_u->ctr = NULL;
+
+	if (NT_STATUS_IS_OK(status)) {
+		r_u->ptr = 1;
+		r_u->ctr = ctr;
+	}
+
+	r_u->status = status;	/* return status */
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_query_userinfo(const char *desc, SAMR_R_QUERY_USERINFO * r_u,
+			      prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_query_userinfo");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr", ps, depth, &r_u->ptr))
+		return False;
+
+	if (r_u->ptr != 0) {
+		if(!samr_io_userinfo_ctr("ctr", &r_u->ctr, ps, depth))
+			return False;
+	}
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_SET_USERINFO structure.
+********************************************************************/
+
+void init_samr_q_set_userinfo(SAMR_Q_SET_USERINFO * q_u,
+			      const POLICY_HND *hnd, DATA_BLOB *sess_key,
+			      uint16 switch_value, void *info)
+{
+	DEBUG(5, ("init_samr_q_set_userinfo\n"));
+
+	q_u->pol = *hnd;
+	q_u->switch_value = switch_value;
+	init_samr_userinfo_ctr(q_u->ctr, sess_key, switch_value, info);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_set_userinfo(const char *desc, SAMR_Q_SET_USERINFO * q_u,
+			    prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_set_userinfo");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	smb_io_pol_hnd("pol", &(q_u->pol), ps, depth);
+
+	if(!prs_uint16("switch_value", ps, depth, &q_u->switch_value))
+		return False;
+	if(!samr_io_userinfo_ctr("ctr", &q_u->ctr, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_R_SET_USERINFO structure.
+********************************************************************/
+
+void init_samr_r_set_userinfo(SAMR_R_SET_USERINFO * r_u, NTSTATUS status)
+{
+	DEBUG(5, ("init_samr_r_set_userinfo\n"));
+
+	r_u->status = status;	/* return status */
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_set_userinfo(const char *desc, SAMR_R_SET_USERINFO * r_u,
+			    prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_set_userinfo");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_SET_USERINFO2 structure.
+********************************************************************/
+
+void init_samr_q_set_userinfo2(SAMR_Q_SET_USERINFO2 * q_u,
+			       const POLICY_HND *hnd, DATA_BLOB *sess_key,
+			       uint16 switch_value, SAM_USERINFO_CTR * ctr)
+{
+	DEBUG(5, ("init_samr_q_set_userinfo2\n"));
+
+	q_u->pol = *hnd;
+	q_u->switch_value = switch_value;
+	q_u->ctr = ctr;
+
+	q_u->ctr->switch_value = switch_value;
+
+	switch (switch_value) {
+	case 18:
+		SamOEMhashBlob(ctr->info.id18->lm_pwd, 16, sess_key);
+		SamOEMhashBlob(ctr->info.id18->nt_pwd, 16, sess_key);
+		dump_data(100, (char *)sess_key->data, sess_key->length);
+		dump_data(100, (char *)ctr->info.id18->lm_pwd, 16);
+		dump_data(100, (char *)ctr->info.id18->nt_pwd, 16);
+		break;
+	}
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_set_userinfo2(const char *desc, SAMR_Q_SET_USERINFO2 * q_u,
+			     prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_set_userinfo2");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("pol", &q_u->pol, ps, depth))
+		return False;
+
+	if(!prs_uint16("switch_value", ps, depth, &q_u->switch_value))
+		return False;
+	if(!samr_io_userinfo_ctr("ctr", &q_u->ctr, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_R_SET_USERINFO2 structure.
+********************************************************************/
+
+void init_samr_r_set_userinfo2(SAMR_R_SET_USERINFO2 * r_u, NTSTATUS status)
+{
+	DEBUG(5, ("init_samr_r_set_userinfo2\n"));
+
+	r_u->status = status;	/* return status */
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_set_userinfo2(const char *desc, SAMR_R_SET_USERINFO2 * r_u,
+			     prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_set_userinfo2");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_CONNECT structure.
+********************************************************************/
+
+void init_samr_q_connect(SAMR_Q_CONNECT * q_u,
+			 char *srv_name, uint32 access_mask)
+{
+	DEBUG(5, ("init_samr_q_connect\n"));
+
+	/* make PDC server name \\server */
+	q_u->ptr_srv_name = (srv_name != NULL && *srv_name) ? 1 : 0;
+	init_unistr2(&q_u->uni_srv_name, srv_name, UNI_STR_TERMINATE);
+
+	/* example values: 0x0000 0002 */
+	q_u->access_mask = access_mask;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_connect(const char *desc, SAMR_Q_CONNECT * q_u,
+		       prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_connect");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_srv_name", ps, depth, &q_u->ptr_srv_name))
+		return False;
+	if(!smb_io_unistr2("", &q_u->uni_srv_name, q_u->ptr_srv_name, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("access_mask", ps, depth, &q_u->access_mask))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_connect(const char *desc, SAMR_R_CONNECT * r_u,
+		       prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_connect");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("connect_pol", &r_u->connect_pol, ps, depth))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_CONNECT4 structure.
+********************************************************************/
+
+void init_samr_q_connect4(SAMR_Q_CONNECT4 * q_u,
+			  char *srv_name, uint32 access_mask)
+{
+	DEBUG(5, ("init_samr_q_connect4\n"));
+
+	/* make PDC server name \\server */
+	q_u->ptr_srv_name = (srv_name != NULL && *srv_name) ? 1 : 0;
+	init_unistr2(&q_u->uni_srv_name, srv_name, UNI_STR_TERMINATE);
+
+	/* Only value we've seen, possibly an address type ? */
+	q_u->unk_0 = 2;
+
+	/* example values: 0x0000 0002 */
+	q_u->access_mask = access_mask;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_connect4(const char *desc, SAMR_Q_CONNECT4 * q_u,
+			prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_connect4");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_srv_name", ps, depth, &q_u->ptr_srv_name))
+		return False;
+	if(!smb_io_unistr2("", &q_u->uni_srv_name, q_u->ptr_srv_name, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("unk_0", ps, depth, &q_u->unk_0))
+		return False;
+	if(!prs_uint32("access_mask", ps, depth, &q_u->access_mask))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_connect4(const char *desc, SAMR_R_CONNECT4 * r_u,
+			prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_connect4");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("connect_pol", &r_u->connect_pol, ps, depth))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_CONNECT5 structure.
+********************************************************************/
+
+void init_samr_q_connect5(SAMR_Q_CONNECT5 * q_u,
+			  char *srv_name, uint32 access_mask)
+{
+	DEBUG(5, ("init_samr_q_connect5\n"));
+
+	/* make PDC server name \\server */
+	q_u->ptr_srv_name = (srv_name != NULL && *srv_name) ? 1 : 0;
+	init_unistr2(&q_u->uni_srv_name, srv_name, UNI_STR_TERMINATE);
+
+	/* example values: 0x0000 0002 */
+	q_u->access_mask = access_mask;
+
+	q_u->level = 1;
+	q_u->info1_unk1 = 3;
+	q_u->info1_unk2 = 0;
+}
+
+/*******************************************************************
+inits a SAMR_R_CONNECT5 structure.
+********************************************************************/
+
+void init_samr_r_connect5(SAMR_R_CONNECT5 * r_u, POLICY_HND *pol, NTSTATUS status)
+{
+	DEBUG(5, ("init_samr_q_connect5\n"));
+
+	r_u->level = 1;
+	r_u->info1_unk1 = 3;
+	r_u->info1_unk2 = 0;
+
+	r_u->connect_pol = *pol;
+	r_u->status = status;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_connect5(const char *desc, SAMR_Q_CONNECT5 * q_u,
+			prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_connect5");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_srv_name", ps, depth, &q_u->ptr_srv_name))
+		return False;
+	if(!smb_io_unistr2("", &q_u->uni_srv_name, q_u->ptr_srv_name, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("access_mask", ps, depth, &q_u->access_mask))
+		return False;
+
+	if(!prs_uint32("level", ps, depth, &q_u->level))
+		return False;
+	if(!prs_uint32("level", ps, depth, &q_u->level))
+		return False;
+	
+	if(!prs_uint32("info1_unk1", ps, depth, &q_u->info1_unk1))
+		return False;
+	if(!prs_uint32("info1_unk2", ps, depth, &q_u->info1_unk2))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_connect5(const char *desc, SAMR_R_CONNECT5 * r_u,
+			prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_connect5");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("level", ps, depth, &r_u->level))
+		return False;
+	if(!prs_uint32("level", ps, depth, &r_u->level))
+		return False;
+	if(!prs_uint32("info1_unk1", ps, depth, &r_u->info1_unk1))
+		return False;
+	if(!prs_uint32("info1_unk2", ps, depth, &r_u->info1_unk2))
+		return False;
+
+	if(!smb_io_pol_hnd("connect_pol", &r_u->connect_pol, ps, depth))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_CONNECT_ANON structure.
+********************************************************************/
+
+void init_samr_q_connect_anon(SAMR_Q_CONNECT_ANON * q_u)
+{
+	DEBUG(5, ("init_samr_q_connect_anon\n"));
+
+	q_u->ptr = 1;
+	q_u->unknown_0 = 0x5c;	/* server name (?!!) */
+	q_u->access_mask = MAXIMUM_ALLOWED_ACCESS;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_connect_anon(const char *desc, SAMR_Q_CONNECT_ANON * q_u,
+			    prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_connect_anon");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr      ", ps, depth, &q_u->ptr))
+		return False;
+	if (q_u->ptr) {
+		if(!prs_uint16("unknown_0", ps, depth, &q_u->unknown_0))
+			return False;
+	}
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("access_mask", ps, depth, &q_u->access_mask))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_connect_anon(const char *desc, SAMR_R_CONNECT_ANON * r_u,
+			    prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_connect_anon");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("connect_pol", &r_u->connect_pol, ps, depth))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_GET_DOM_PWINFO structure.
+********************************************************************/
+
+void init_samr_q_get_dom_pwinfo(SAMR_Q_GET_DOM_PWINFO * q_u,
+				char *srv_name)
+{
+	DEBUG(5, ("init_samr_q_get_dom_pwinfo\n"));
+
+	q_u->ptr = 1;
+	init_unistr2(&q_u->uni_srv_name, srv_name, UNI_FLAGS_NONE);
+	init_uni_hdr(&q_u->hdr_srv_name, &q_u->uni_srv_name);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_get_dom_pwinfo(const char *desc, SAMR_Q_GET_DOM_PWINFO * q_u,
+			      prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_get_dom_pwinfo");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr", ps, depth, &q_u->ptr))
+		return False;
+	if (q_u->ptr != 0) {
+		if(!smb_io_unihdr("", &q_u->hdr_srv_name, ps, depth))
+			return False;
+		if(!smb_io_unistr2("", &q_u->uni_srv_name, q_u->hdr_srv_name.buffer, ps, depth))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_get_dom_pwinfo(const char *desc, SAMR_R_GET_DOM_PWINFO * r_u,
+			      prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_get_dom_pwinfo");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint16("min_pwd_length", ps, depth, &r_u->min_pwd_length))
+		return False;
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("password_properties", ps, depth, &r_u->password_properties))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+make a SAMR_ENC_PASSWD structure.
+********************************************************************/
+
+void init_enc_passwd(SAMR_ENC_PASSWD * pwd, const char pass[512])
+{
+	ZERO_STRUCTP(pwd);
+
+	if (pass == NULL) {
+		pwd->ptr = 0;
+	} else {
+		pwd->ptr = 1;
+		memcpy(pwd->pass, pass, sizeof(pwd->pass));
+	}
+}
+
+/*******************************************************************
+reads or writes a SAMR_ENC_PASSWD structure.
+********************************************************************/
+
+BOOL samr_io_enc_passwd(const char *desc, SAMR_ENC_PASSWD * pwd,
+			prs_struct *ps, int depth)
+{
+	if (pwd == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_enc_passwd");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr", ps, depth, &pwd->ptr))
+		return False;
+
+	if (pwd->ptr != 0) {
+		if(!prs_uint8s(False, "pwd", ps, depth, pwd->pass, sizeof(pwd->pass)))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_ENC_HASH structure.
+********************************************************************/
+
+void init_enc_hash(SAMR_ENC_HASH * hsh, const uchar hash[16])
+{
+	ZERO_STRUCTP(hsh);
+
+	if (hash == NULL) {
+		hsh->ptr = 0;
+	} else {
+		hsh->ptr = 1;
+		memcpy(hsh->hash, hash, sizeof(hsh->hash));
+	}
+}
+
+/*******************************************************************
+reads or writes a SAMR_ENC_HASH structure.
+********************************************************************/
+
+BOOL samr_io_enc_hash(const char *desc, SAMR_ENC_HASH * hsh,
+		      prs_struct *ps, int depth)
+{
+	if (hsh == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_enc_hash");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr ", ps, depth, &hsh->ptr))
+		return False;
+	if (hsh->ptr != 0) {
+		if(!prs_uint8s(False, "hash", ps, depth, hsh->hash,sizeof(hsh->hash)))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_CHGPASSWD_USER structure.
+********************************************************************/
+
+void init_samr_q_chgpasswd_user(SAMR_Q_CHGPASSWD_USER * q_u,
+				const char *dest_host, const char *user_name,
+				const uchar nt_newpass[516],
+				const uchar nt_oldhash[16],
+				const uchar lm_newpass[516],
+				const uchar lm_oldhash[16])
+{
+	DEBUG(5, ("init_samr_q_chgpasswd_user\n"));
+
+	q_u->ptr_0 = 1;
+	init_unistr2(&q_u->uni_dest_host, dest_host, UNI_FLAGS_NONE);
+	init_uni_hdr(&q_u->hdr_dest_host, &q_u->uni_dest_host);
+
+	init_unistr2(&q_u->uni_user_name, user_name, UNI_FLAGS_NONE);
+	init_uni_hdr(&q_u->hdr_user_name, &q_u->uni_user_name);
+
+	init_enc_passwd(&q_u->nt_newpass, (const char *)nt_newpass);
+	init_enc_hash(&q_u->nt_oldhash, nt_oldhash);
+
+	q_u->unknown = 0x01;
+
+	init_enc_passwd(&q_u->lm_newpass, (const char *)lm_newpass);
+	init_enc_hash(&q_u->lm_oldhash, lm_oldhash);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_chgpasswd_user(const char *desc, SAMR_Q_CHGPASSWD_USER * q_u,
+			      prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_chgpasswd_user");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_0", ps, depth, &q_u->ptr_0))
+		return False;
+
+	if(!smb_io_unihdr("", &q_u->hdr_dest_host, ps, depth))
+		return False;
+	if(!smb_io_unistr2("", &q_u->uni_dest_host, q_u->hdr_dest_host.buffer, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+	if(!smb_io_unihdr("", &q_u->hdr_user_name, ps, depth))
+		return False;
+	if(!smb_io_unistr2("", &q_u->uni_user_name, q_u->hdr_user_name.buffer,ps, depth))
+		return False;
+
+	if(!samr_io_enc_passwd("nt_newpass", &q_u->nt_newpass, ps, depth))
+		return False;
+	if(!samr_io_enc_hash("nt_oldhash", &q_u->nt_oldhash, ps, depth))
+		return False;
+
+	if(!prs_uint32("unknown", ps, depth, &q_u->unknown))
+		return False;
+
+	if(!samr_io_enc_passwd("lm_newpass", &q_u->lm_newpass, ps, depth))
+		return False;
+	if(!samr_io_enc_hash("lm_oldhash", &q_u->lm_oldhash, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_R_CHGPASSWD_USER structure.
+********************************************************************/
+
+void init_samr_r_chgpasswd_user(SAMR_R_CHGPASSWD_USER * r_u, NTSTATUS status)
+{
+	DEBUG(5, ("init_samr_r_chgpasswd_user\n"));
+
+	r_u->status = status;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_chgpasswd_user(const char *desc, SAMR_R_CHGPASSWD_USER * r_u,
+			      prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_chgpasswd_user");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_Q_CHGPASSWD3 structure.
+********************************************************************/
+
+void init_samr_q_chgpasswd_user3(SAMR_Q_CHGPASSWD_USER3 * q_u,
+				 const char *dest_host, const char *user_name,
+				 const uchar nt_newpass[516],
+				 const uchar nt_oldhash[16],
+				 const uchar lm_newpass[516],
+				 const uchar lm_oldhash[16])
+{
+	DEBUG(5, ("init_samr_q_chgpasswd_user3\n"));
+
+	q_u->ptr_0 = 1;
+	init_unistr2(&q_u->uni_dest_host, dest_host, UNI_FLAGS_NONE);
+	init_uni_hdr(&q_u->hdr_dest_host, &q_u->uni_dest_host);
+
+	init_unistr2(&q_u->uni_user_name, user_name, UNI_FLAGS_NONE);
+	init_uni_hdr(&q_u->hdr_user_name, &q_u->uni_user_name);
+
+	init_enc_passwd(&q_u->nt_newpass, (const char *)nt_newpass);
+	init_enc_hash(&q_u->nt_oldhash, nt_oldhash);
+
+	q_u->lm_change = 0x01;
+
+	init_enc_passwd(&q_u->lm_newpass, (const char *)lm_newpass);
+	init_enc_hash(&q_u->lm_oldhash, lm_oldhash);
+
+	init_enc_passwd(&q_u->password3, NULL);
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_chgpasswd_user3(const char *desc, SAMR_Q_CHGPASSWD_USER3 * q_u,
+			       prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_chgpasswd_user3");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_0", ps, depth, &q_u->ptr_0))
+		return False;
+
+	if(!smb_io_unihdr("", &q_u->hdr_dest_host, ps, depth))
+		return False;
+	if(!smb_io_unistr2("", &q_u->uni_dest_host, q_u->hdr_dest_host.buffer, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+	if(!smb_io_unihdr("", &q_u->hdr_user_name, ps, depth))
+		return False;
+	if(!smb_io_unistr2("", &q_u->uni_user_name, q_u->hdr_user_name.buffer,ps, depth))
+		return False;
+
+	if(!samr_io_enc_passwd("nt_newpass", &q_u->nt_newpass, ps, depth))
+		return False;
+	if(!samr_io_enc_hash("nt_oldhash", &q_u->nt_oldhash, ps, depth))
+		return False;
+
+	if(!prs_uint32("lm_change", ps, depth, &q_u->lm_change))
+		return False;
+
+	if(!samr_io_enc_passwd("lm_newpass", &q_u->lm_newpass, ps, depth))
+		return False;
+	if(!samr_io_enc_hash("lm_oldhash", &q_u->lm_oldhash, ps, depth))
+		return False;
+
+	if(!samr_io_enc_passwd("password3", &q_u->password3, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_R_CHGPASSWD_USER3 structure.
+********************************************************************/
+
+void init_samr_r_chgpasswd_user3(SAMR_R_CHGPASSWD_USER3 *r_u, NTSTATUS status, 
+				 SAMR_CHANGE_REJECT *reject, SAM_UNK_INFO_1 *info)
+{
+	DEBUG(5, ("init_samr_r_chgpasswd_user3\n"));
+
+	r_u->status = status;
+	r_u->info = 0;
+	r_u->ptr_info = 0;
+	r_u->reject = 0;
+	r_u->ptr_reject = 0;
+
+	if (info) {
+		r_u->info = info;
+		r_u->ptr_info = 1;
+	}
+	if (reject && (reject->reject_reason != Undefined)) {
+		r_u->reject = reject;
+		r_u->ptr_reject = 1;
+	}
+}
+
+/*******************************************************************
+ Reads or writes an SAMR_CHANGE_REJECT structure.
+********************************************************************/
+
+BOOL samr_io_change_reject(const char *desc, SAMR_CHANGE_REJECT *reject, prs_struct *ps, int depth)
+{
+	if (reject == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_change_reject");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(UNMARSHALLING(ps))
+		ZERO_STRUCTP(reject);
+	
+	if (!prs_uint32("reject_reason", ps, depth, &reject->reject_reason))
+		return False;
+		
+	if (!prs_uint32("unknown1", ps, depth, &reject->unknown1))
+		return False;
+
+	if (!prs_uint32("unknown2", ps, depth, &reject->unknown2))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_chgpasswd_user3(const char *desc, SAMR_R_CHGPASSWD_USER3 *r_u,
+			       prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_chgpasswd_user3");
+	depth++;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("ptr_info", ps, depth, &r_u->ptr_info))
+		return False;
+
+	/* special case: Windows 2000 can return stub data here saying
+	   NT_STATUS_NOT_SUPPORTED */
+
+	if ( NT_STATUS_EQUAL( NT_STATUS_NOT_SUPPORTED, NT_STATUS(r_u->ptr_info)) ) {
+		r_u->status = NT_STATUS_NOT_SUPPORTED;
+		return True;
+	}
+
+	if (r_u->ptr_info && r_u->info != NULL) {
+		/* SAM_UNK_INFO_1 */
+		if (!sam_io_unk_info1("info", r_u->info, ps, depth))
+			return False;
+	}
+
+	if (!prs_uint32("ptr_reject", ps, depth, &r_u->ptr_reject))
+		return False;
+			     
+	if (r_u->ptr_reject && r_u->reject != NULL) {
+		/* SAMR_CHANGE_REJECT */
+		if (!samr_io_change_reject("reject", r_u->reject, ps, depth))
+			return False;
+	}
+
+	if (!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+void init_samr_q_query_domain_info2(SAMR_Q_QUERY_DOMAIN_INFO2 *q_u,
+				POLICY_HND *domain_pol, uint16 switch_value)
+{
+	DEBUG(5, ("init_samr_q_query_domain_info2\n"));
+
+	q_u->domain_pol = *domain_pol;
+	q_u->switch_value = switch_value;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_query_domain_info2(const char *desc, SAMR_Q_QUERY_DOMAIN_INFO2 *q_u,
+			      prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_query_domain_info2");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("domain_pol", &q_u->domain_pol, ps, depth))
+		return False;
+
+	if(!prs_uint16("switch_value", ps, depth, &q_u->switch_value))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_R_QUERY_DOMAIN_INFO structure.
+********************************************************************/
+
+void init_samr_r_query_domain_info2(SAMR_R_QUERY_DOMAIN_INFO2 * r_u,
+				    uint16 switch_value, SAM_UNK_CTR * ctr,
+				    NTSTATUS status)
+{
+	DEBUG(5, ("init_samr_r_query_domain_info2\n"));
+
+	r_u->ptr_0 = 0;
+	r_u->switch_value = 0;
+	r_u->status = status;	/* return status */
+
+	if (NT_STATUS_IS_OK(status)) {
+		r_u->switch_value = switch_value;
+		r_u->ptr_0 = 1;
+		r_u->ctr = ctr;
+	}
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_query_domain_info2(const char *desc, SAMR_R_QUERY_DOMAIN_INFO2 * r_u,
+				  prs_struct *ps, int depth)
+{
+        if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_query_domain_info2");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_0 ", ps, depth, &r_u->ptr_0))
+		return False;
+
+	if (r_u->ptr_0 != 0 && r_u->ctr != NULL) {
+		if(!prs_uint16("switch_value", ps, depth, &r_u->switch_value))
+			return False;
+		if(!prs_align(ps))
+			return False;
+
+		switch (r_u->switch_value) {
+		case 0x0d:
+			if(!sam_io_unk_info13("unk_inf13", &r_u->ctr->info.inf13, ps, depth))
+				return False;
+			break;
+		case 0x0c:
+			if(!sam_io_unk_info12("unk_inf12", &r_u->ctr->info.inf12, ps, depth))
+				return False;
+			break;
+		case 0x09:
+			if(!sam_io_unk_info9("unk_inf9",&r_u->ctr->info.inf9, ps,depth))
+				return False;
+			break;
+		case 0x08:
+			if(!sam_io_unk_info8("unk_inf8",&r_u->ctr->info.inf8, ps,depth))
+				return False;
+			break;
+		case 0x07:
+			if(!sam_io_unk_info7("unk_inf7",&r_u->ctr->info.inf7, ps,depth))
+				return False;
+			break;
+		case 0x06:
+			if(!sam_io_unk_info6("unk_inf6",&r_u->ctr->info.inf6, ps,depth))
+				return False;
+			break;
+		case 0x05:
+			if(!sam_io_unk_info5("unk_inf5",&r_u->ctr->info.inf5, ps,depth))
+				return False;
+			break;
+		case 0x04:
+			if(!sam_io_unk_info4("unk_inf4",&r_u->ctr->info.inf4, ps,depth))
+				return False;
+			break;
+		case 0x03:
+			if(!sam_io_unk_info3("unk_inf3",&r_u->ctr->info.inf3, ps,depth))
+				return False;
+			break;
+		case 0x02:
+			if(!sam_io_unk_info2("unk_inf2",&r_u->ctr->info.inf2, ps,depth))
+				return False;
+			break;
+		case 0x01:
+			if(!sam_io_unk_info1("unk_inf1",&r_u->ctr->info.inf1, ps,depth))
+				return False;
+			break;
+		default:
+			DEBUG(0, ("samr_io_r_query_domain_info2: unknown switch level 0x%x\n",
+				r_u->switch_value));
+			r_u->status = NT_STATUS_INVALID_INFO_CLASS;
+			return False;
+		}
+	}
+	
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+	
+	return True;
+}
+
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+void init_samr_q_set_domain_info(SAMR_Q_SET_DOMAIN_INFO *q_u,
+				POLICY_HND *domain_pol, uint16 switch_value, SAM_UNK_CTR *ctr)
+{
+	DEBUG(5, ("init_samr_q_set_domain_info\n"));
+
+	q_u->domain_pol = *domain_pol;
+	q_u->switch_value0 = switch_value;
+
+	q_u->switch_value = switch_value;
+	q_u->ctr = ctr;
+	
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_q_set_domain_info(const char *desc, SAMR_Q_SET_DOMAIN_INFO *q_u,
+			      prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_q_set_domain_info");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("domain_pol", &q_u->domain_pol, ps, depth))
+		return False;
+
+	if(!prs_uint16("switch_value0", ps, depth, &q_u->switch_value0))
+		return False;
+
+	if(!prs_uint16("switch_value", ps, depth, &q_u->switch_value))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if (UNMARSHALLING(ps)) {
+		if ((q_u->ctr = PRS_ALLOC_MEM(ps, SAM_UNK_CTR, 1)) == NULL)
+			return False;
+	}
+	
+	switch (q_u->switch_value) {
+
+	case 0x0c:
+		if(!sam_io_unk_info12("unk_inf12", &q_u->ctr->info.inf12, ps, depth))
+			return False;
+		break;
+	case 0x07:
+		if(!sam_io_unk_info7("unk_inf7",&q_u->ctr->info.inf7, ps,depth))
+			return False;
+		break;
+	case 0x06:
+		if(!sam_io_unk_info6("unk_inf6",&q_u->ctr->info.inf6, ps,depth))
+			return False;
+		break;
+	case 0x05:
+		if(!sam_io_unk_info5("unk_inf5",&q_u->ctr->info.inf5, ps,depth))
+			return False;
+		break;
+	case 0x03:
+		if(!sam_io_unk_info3("unk_inf3",&q_u->ctr->info.inf3, ps,depth))
+			return False;
+		break;
+	case 0x02:
+		if(!sam_io_unk_info2("unk_inf2",&q_u->ctr->info.inf2, ps,depth))
+			return False;
+		break;
+	case 0x01:
+		if(!sam_io_unk_info1("unk_inf1",&q_u->ctr->info.inf1, ps,depth))
+			return False;
+		break;
+	default:
+		DEBUG(0, ("samr_io_r_samr_unknown_2e: unknown switch level 0x%x\n",
+			q_u->switch_value));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+inits a SAMR_R_QUERY_DOMAIN_INFO structure.
+********************************************************************/
+
+void init_samr_r_set_domain_info(SAMR_R_SET_DOMAIN_INFO * r_u, NTSTATUS status)
+{
+	DEBUG(5, ("init_samr_r_set_domain_info\n"));
+
+	r_u->status = status;	/* return status */
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL samr_io_r_set_domain_info(const char *desc, SAMR_R_SET_DOMAIN_INFO * r_u,
+			      prs_struct *ps, int depth)
+{
+        if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_r_samr_unknown_2e");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_ntstatus("status", ps, depth, &r_u->status))
+		return False;
+	
+	return True;
+}

Modified: branches/samba/upstream/source/rpc_parse/parse_sec.c
===================================================================
--- branches/samba/upstream/source/rpc_parse/parse_sec.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_parse/parse_sec.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -30,12 +31,10 @@
  Reads or writes a SEC_ACE structure.
 ********************************************************************/
 
-static bool sec_io_ace(const char *desc, SEC_ACE *psa, prs_struct *ps,
-		       int depth)
+BOOL sec_io_ace(const char *desc, SEC_ACE *psa, prs_struct *ps, int depth)
 {
 	uint32 old_offset;
 	uint32 offset_ace_size;
-	uint8 type;
 
 	if (psa == NULL)
 		return False;
@@ -45,24 +44,16 @@
 	
 	old_offset = prs_offset(ps);
 
-	if (MARSHALLING(ps)) {
-		type = (uint8)psa->type;
-	}
-
-	if(!prs_uint8("type ", ps, depth, &type))
+	if(!prs_uint8("type ", ps, depth, &psa->type))
 		return False;
 
-	if (UNMARSHALLING(ps)) {
-		psa->type = (enum security_ace_type)type;
-	}
-
 	if(!prs_uint8("flags", ps, depth, &psa->flags))
 		return False;
 
 	if(!prs_uint16_pre("size ", ps, depth, &psa->size, &offset_ace_size))
 		return False;
 
-	if(!prs_uint32("access_mask", ps, depth, &psa->access_mask))
+	if (!prs_uint32("access_mask", ps, depth, &psa->access_mask))
 		return False;
 
 	/* check whether object access is present */
@@ -70,15 +61,15 @@
 		if (!smb_io_dom_sid("trustee  ", &psa->trustee , ps, depth))
 			return False;
 	} else {
-		if (!prs_uint32("obj_flags", ps, depth, &psa->object.object.flags))
+		if (!prs_uint32("obj_flags", ps, depth, &psa->obj_flags))
 			return False;
 
-		if (psa->object.object.flags & SEC_ACE_OBJECT_PRESENT)
-			if (!smb_io_uuid("obj_guid", &psa->object.object.type.type, ps,depth))
+		if (psa->obj_flags & SEC_ACE_OBJECT_PRESENT)
+			if (!smb_io_uuid("obj_guid", &psa->obj_guid, ps,depth))
 				return False;
 
-		if (psa->object.object.flags & SEC_ACE_OBJECT_INHERITED_PRESENT)
-			if (!smb_io_uuid("inh_guid", &psa->object.object.inherited_type.inherited_type, ps,depth))
+		if (psa->obj_flags & SEC_ACE_OBJECT_INHERITED_PRESENT)
+			if (!smb_io_uuid("inh_guid", &psa->inh_guid, ps,depth))
 				return False;
 
 		if(!smb_io_dom_sid("trustee  ", &psa->trustee , ps, depth))
@@ -113,14 +104,12 @@
  for you as it reads them.
 ********************************************************************/
 
-static bool sec_io_acl(const char *desc, SEC_ACL **ppsa, prs_struct *ps,
-		       int depth)
+BOOL sec_io_acl(const char *desc, SEC_ACL **ppsa, prs_struct *ps, int depth)
 {
 	unsigned int i;
 	uint32 old_offset;
 	uint32 offset_acl_size;
 	SEC_ACL *psa;
-	uint16 revision;
 
 	/*
 	 * Note that the size is always a multiple of 4 bytes due to the
@@ -148,17 +137,9 @@
 	
 	old_offset = prs_offset(ps);
 
-	if (MARSHALLING(ps)) {
-		revision = (uint16)psa->revision;
-	}
-
-	if(!prs_uint16("revision", ps, depth, &revision))
+	if(!prs_uint16("revision", ps, depth, &psa->revision))
 		return False;
 
-	if (UNMARSHALLING(ps)) {
-		psa->revision = (enum security_acl_revision)revision;
-	}
-
 	if(!prs_uint16_pre("size     ", ps, depth, &psa->size, &offset_acl_size))
 		return False;
 
@@ -206,13 +187,11 @@
  If reading and the *ppsd = NULL, allocates the structure.
 ********************************************************************/
 
-bool sec_io_desc(const char *desc, SEC_DESC **ppsd, prs_struct *ps, int depth)
+BOOL sec_io_desc(const char *desc, SEC_DESC **ppsd, prs_struct *ps, int depth)
 {
 	uint32 old_offset;
 	uint32 max_offset = 0; /* after we're done, move offset to end */
 	uint32 tmp_offset = 0;
-	uint32 off_sacl, off_dacl, off_owner_sid, off_grp_sid;
-	uint16 revision;
 
 	SEC_DESC *psd;
 
@@ -238,17 +217,9 @@
 	/* start of security descriptor stored for back-calc offset purposes */
 	old_offset = prs_offset(ps);
 
-	if (MARSHALLING(ps)) {
-		revision = (uint16)psd->revision;
-	}
-
-	if(!prs_uint16("revision", ps, depth, &revision))
+	if(!prs_uint16("revision ", ps, depth, &psd->revision))
 		return False;
 
-	if (UNMARSHALLING(ps)) {
-		psd->revision = (enum security_descriptor_revision)revision;
-	}
-
 	if(!prs_uint16("type     ", ps, depth, &psd->type))
 		return False;
 
@@ -260,52 +231,52 @@
 		 */
 
 		if (psd->sacl != NULL) {
-			off_sacl = offset;
+			psd->off_sacl = offset;
 			offset += psd->sacl->size;
 		} else {
-			off_sacl = 0;
+			psd->off_sacl = 0;
 		}
 
 		if (psd->dacl != NULL) {
-			off_dacl = offset;
+			psd->off_dacl = offset;
 			offset += psd->dacl->size;
 		} else {
-			off_dacl = 0;
+			psd->off_dacl = 0;
 		}
 
 		if (psd->owner_sid != NULL) {
-			off_owner_sid = offset;
-			offset += ndr_size_dom_sid(psd->owner_sid, 0);
+			psd->off_owner_sid = offset;
+			offset += sid_size(psd->owner_sid);
 		} else {
-			off_owner_sid = 0;
+			psd->off_owner_sid = 0;
 		}
 
 		if (psd->group_sid != NULL) {
-			off_grp_sid = offset;
-			offset += ndr_size_dom_sid(psd->group_sid, 0);
+			psd->off_grp_sid = offset;
+			offset += sid_size(psd->group_sid);
 		} else {
-			off_grp_sid = 0;
+			psd->off_grp_sid = 0;
 		}
 	}
 
-	if(!prs_uint32("off_owner_sid", ps, depth, &off_owner_sid))
+	if(!prs_uint32("off_owner_sid", ps, depth, &psd->off_owner_sid))
 		return False;
 
-	if(!prs_uint32("off_grp_sid  ", ps, depth, &off_grp_sid))
+	if(!prs_uint32("off_grp_sid  ", ps, depth, &psd->off_grp_sid))
 		return False;
 
-	if(!prs_uint32("off_sacl     ", ps, depth, &off_sacl))
+	if(!prs_uint32("off_sacl     ", ps, depth, &psd->off_sacl))
 		return False;
 
-	if(!prs_uint32("off_dacl     ", ps, depth, &off_dacl))
+	if(!prs_uint32("off_dacl     ", ps, depth, &psd->off_dacl))
 		return False;
 
 	max_offset = MAX(max_offset, prs_offset(ps));
 
-	if (off_owner_sid != 0) {
+	if (psd->off_owner_sid != 0) {
 
 		tmp_offset = prs_offset(ps);
-		if(!prs_set_offset(ps, old_offset + off_owner_sid))
+		if(!prs_set_offset(ps, old_offset + psd->off_owner_sid))
 			return False;
 
 		if (UNMARSHALLING(ps)) {
@@ -323,10 +294,10 @@
 			return False;
 	}
 
-	if (psd->group_sid != 0) {
+	if (psd->off_grp_sid != 0) {
 
 		tmp_offset = prs_offset(ps);
-		if(!prs_set_offset(ps, old_offset + off_grp_sid))
+		if(!prs_set_offset(ps, old_offset + psd->off_grp_sid))
 			return False;
 
 		if (UNMARSHALLING(ps)) {
@@ -335,7 +306,7 @@
 				return False;
 		}
 
-		if(!smb_io_dom_sid("grp_sid", psd->group_sid, ps, depth))
+		if(!smb_io_dom_sid("group_sid", psd->group_sid, ps, depth))
 			return False;
 			
 		max_offset = MAX(max_offset, prs_offset(ps));
@@ -344,9 +315,9 @@
 			return False;
 	}
 
-	if ((psd->type & SEC_DESC_SACL_PRESENT) && off_sacl) {
+	if ((psd->type & SEC_DESC_SACL_PRESENT) && psd->off_sacl) {
 		tmp_offset = prs_offset(ps);
-		if(!prs_set_offset(ps, old_offset + off_sacl))
+		if(!prs_set_offset(ps, old_offset + psd->off_sacl))
 			return False;
 		if(!sec_io_acl("sacl", &psd->sacl, ps, depth))
 			return False;
@@ -355,9 +326,9 @@
 			return False;
 	}
 
-	if ((psd->type & SEC_DESC_DACL_PRESENT) && off_dacl != 0) {
+	if ((psd->type & SEC_DESC_DACL_PRESENT) && psd->off_dacl != 0) {
 		tmp_offset = prs_offset(ps);
-		if(!prs_set_offset(ps, old_offset + off_dacl))
+		if(!prs_set_offset(ps, old_offset + psd->off_dacl))
 			return False;
 		if(!sec_io_acl("dacl", &psd->dacl, ps, depth))
 			return False;
@@ -376,15 +347,13 @@
  Reads or writes a SEC_DESC_BUF structure.
 ********************************************************************/
 
-bool sec_io_desc_buf(const char *desc, SEC_DESC_BUF **ppsdb, prs_struct *ps, int depth)
+BOOL sec_io_desc_buf(const char *desc, SEC_DESC_BUF **ppsdb, prs_struct *ps, int depth)
 {
 	uint32 off_len;
 	uint32 off_max_len;
 	uint32 old_offset;
 	uint32 size;
-	uint32 len;
 	SEC_DESC_BUF *psdb;
-	uint32 ptr;
 
 	if (ppsdb == NULL)
 		return False;
@@ -403,22 +372,20 @@
 	if(!prs_align(ps))
 		return False;
 	
-	if(!prs_uint32_pre("max_len", ps, depth, &psdb->sd_size, &off_max_len))
+	if(!prs_uint32_pre("max_len", ps, depth, &psdb->max_len, &off_max_len))
 		return False;
 
-	ptr = 1;
-	if(!prs_uint32    ("ptr  ", ps, depth, &ptr))
+	if(!prs_uint32    ("ptr  ", ps, depth, &psdb->ptr))
 		return False;
 
-	len = ndr_size_security_descriptor(psdb->sd, 0);
-	if(!prs_uint32_pre("len    ", ps, depth, &len, &off_len))
+	if(!prs_uint32_pre("len    ", ps, depth, &psdb->len, &off_len))
 		return False;
 
 	old_offset = prs_offset(ps);
 
 	/* reading, length is non-zero; writing, descriptor is non-NULL */
-	if ((UNMARSHALLING(ps) && psdb->sd_size != 0) || (MARSHALLING(ps) && psdb->sd != NULL)) {
-		if(!sec_io_desc("sec   ", &psdb->sd, ps, depth))
+	if ((UNMARSHALLING(ps) && psdb->len != 0) || (MARSHALLING(ps) && psdb->sec != NULL)) {
+		if(!sec_io_desc("sec   ", &psdb->sec, ps, depth))
 			return False;
 	}
 
@@ -426,10 +393,10 @@
 		return False;
 	
 	size = prs_offset(ps) - old_offset;
-	if(!prs_uint32_post("max_len", ps, depth, &psdb->sd_size, off_max_len, size == 0 ? psdb->sd_size : size))
+	if(!prs_uint32_post("max_len", ps, depth, &psdb->max_len, off_max_len, size == 0 ? psdb->max_len : size))
 		return False;
 
-	if(!prs_uint32_post("len    ", ps, depth, &len, off_len, size))
+	if(!prs_uint32_post("len    ", ps, depth, &psdb->len, off_len, size))
 		return False;
 
 	return True;

Copied: branches/samba/upstream/source/rpc_parse/parse_shutdown.c (from rev 1928, branches/samba/upstream/source/rpc_parse/parse_shutdown.c)
===================================================================
--- branches/samba/upstream/source/rpc_parse/parse_shutdown.c	                        (rev 0)
+++ branches/samba/upstream/source/rpc_parse/parse_shutdown.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,268 @@
+/*
+ *  Unix SMB/CIFS implementation.
+ *  RPC Pipe client / server routines
+ *  Copyright (C) Jim McDonough (jmcd at us.ibm.com)   2003.
+ *  Copyright (C) Gerald (Jerry) Carter             2002-2005.
+ *  
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_RPC_PARSE
+
+/*******************************************************************
+Inits a structure.
+********************************************************************/
+
+void init_shutdown_q_init(SHUTDOWN_Q_INIT *q_s, const char *msg,
+			uint32 timeout, BOOL do_reboot, BOOL force)
+{
+	q_s->server = TALLOC_P( get_talloc_ctx(), uint16 );
+	if (!q_s->server) {
+		smb_panic("init_shutdown_q_init: talloc fail.\n");
+		return;
+	}
+
+	*q_s->server = 0x1;
+
+	q_s->message = TALLOC_ZERO_P( get_talloc_ctx(), UNISTR4 );
+	if (!q_s->message) {
+		smb_panic("init_shutdown_q_init: talloc fail.\n");
+		return;
+	}
+
+	if ( msg && *msg ) {
+		init_unistr4( q_s->message, msg, UNI_FLAGS_NONE );
+
+		/* Win2000 is apparently very sensitive to these lengths */
+		/* do a special case here */
+
+		q_s->message->string->uni_max_len++;
+		q_s->message->size += 2;
+	}
+
+	q_s->timeout = timeout;
+
+	q_s->reboot = do_reboot ? 1 : 0;
+	q_s->force = force ? 1 : 0;
+}
+
+/*******************************************************************
+********************************************************************/
+
+void init_shutdown_q_init_ex(SHUTDOWN_Q_INIT_EX * q_u_ex, const char *msg,
+			uint32 timeout, BOOL do_reboot, BOOL force, uint32 reason)
+{
+	SHUTDOWN_Q_INIT q_u;
+	
+	ZERO_STRUCT( q_u );
+	
+	init_shutdown_q_init( &q_u, msg, timeout, do_reboot, force );
+	
+	/* steal memory */
+	
+	q_u_ex->server  = q_u.server;
+	q_u_ex->message = q_u.message;
+	
+	q_u_ex->reboot  = q_u.reboot;
+	q_u_ex->force   = q_u.force;
+	
+	q_u_ex->reason = reason;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
+BOOL shutdown_io_q_init(const char *desc, SHUTDOWN_Q_INIT *q_s, prs_struct *ps,
+			int depth)
+{
+	if (q_s == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "shutdown_io_q_init");
+	depth++;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_pointer("server", ps, depth, (void**)&q_s->server, sizeof(uint16), (PRS_POINTER_CAST)prs_uint16))
+		return False;
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_pointer("message", ps, depth, (void**)&q_s->message, sizeof(UNISTR4), (PRS_POINTER_CAST)prs_unistr4))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("timeout", ps, depth, &(q_s->timeout)))
+		return False;
+
+	if (!prs_uint8("force  ", ps, depth, &(q_s->force)))
+		return False;
+	if (!prs_uint8("reboot ", ps, depth, &(q_s->reboot)))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+BOOL shutdown_io_r_init(const char *desc, SHUTDOWN_R_INIT* r_s, prs_struct *ps,
+			int depth)
+{
+	if (r_s == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "shutdown_io_r_init");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_s->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a REG_Q_SHUTDOWN_EX structure.
+********************************************************************/
+
+BOOL shutdown_io_q_init_ex(const char *desc, SHUTDOWN_Q_INIT_EX * q_s, prs_struct *ps,
+		       int depth)
+{
+	if (q_s == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "shutdown_io_q_init_ex");
+	depth++;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_pointer("server", ps, depth, (void**)&q_s->server, sizeof(uint16), (PRS_POINTER_CAST)prs_uint16))
+		return False;
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_pointer("message", ps, depth, (void**)&q_s->message, sizeof(UNISTR4), (PRS_POINTER_CAST)prs_unistr4))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("timeout", ps, depth, &(q_s->timeout)))
+		return False;
+
+	if (!prs_uint8("force  ", ps, depth, &(q_s->force)))
+		return False;
+	if (!prs_uint8("reboot ", ps, depth, &(q_s->reboot)))
+		return False;
+
+	if (!prs_align(ps))
+		return False;
+	if (!prs_uint32("reason", ps, depth, &(q_s->reason)))
+		return False;
+
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a REG_R_SHUTDOWN_EX structure.
+********************************************************************/
+BOOL shutdown_io_r_init_ex(const char *desc, SHUTDOWN_R_INIT_EX * r_s, prs_struct *ps,
+		       int depth)
+{
+	if (r_s == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "shutdown_io_r_init_ex");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_s->status))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+Inits a structure.
+********************************************************************/
+void init_shutdown_q_abort(SHUTDOWN_Q_ABORT *q_s)
+{
+	q_s->server = TALLOC_P( get_talloc_ctx(), uint16 );
+	if (!q_s->server) {
+		smb_panic("init_shutdown_q_abort: talloc fail.\n");
+		return;
+	}
+		
+	*q_s->server = 0x1;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+BOOL shutdown_io_q_abort(const char *desc, SHUTDOWN_Q_ABORT *q_s,
+			 prs_struct *ps, int depth)
+{
+	if (q_s == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "shutdown_io_q_abort");
+	depth++;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_pointer("server", ps, depth, (void**)&q_s->server, sizeof(uint16), (PRS_POINTER_CAST)prs_uint16))
+		return False;
+	if (!prs_align(ps))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+BOOL shutdown_io_r_abort(const char *desc, SHUTDOWN_R_ABORT *r_s,
+			 prs_struct *ps, int depth)
+{
+	if (r_s == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "shutdown_io_r_abort");
+	depth++;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_werror("status", ps, depth, &r_s->status))
+		return False;
+
+	return True;
+}

Modified: branches/samba/upstream/source/rpc_parse/parse_spoolss.c
===================================================================
--- branches/samba/upstream/source/rpc_parse/parse_spoolss.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_parse/parse_spoolss.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,13 +3,13 @@
  *  RPC Pipe client / server routines
  *  Copyright (C) Andrew Tridgell              1992-2000,
  *  Copyright (C) Luke Kenneth Casson Leighton 1996-2000,
- *  Copyright (C) Jean François Micouleau      1998-2000,
+ *  Copyright (C) Jean François Micouleau      1998-2000,
  *  Copyright (C) Gerald Carter                2000-2002,
  *  Copyright (C) Tim Potter		       2001-2002.
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -31,7 +32,7 @@
 This should be moved in a more generic lib.
 ********************************************************************/  
 
-bool spoolss_io_system_time(const char *desc, prs_struct *ps, int depth, SYSTEMTIME *systime)
+BOOL spoolss_io_system_time(const char *desc, prs_struct *ps, int depth, SYSTEMTIME *systime)
 {
 	if(!prs_uint16("year", ps, depth, &systime->year))
 		return False;
@@ -56,7 +57,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool make_systemtime(SYSTEMTIME *systime, struct tm *unixtime)
+BOOL make_systemtime(SYSTEMTIME *systime, struct tm *unixtime)
 {
 	systime->year=unixtime->tm_year+1900;
 	systime->month=unixtime->tm_mon+1;
@@ -74,7 +75,7 @@
 reads or writes an DOC_INFO structure.
 ********************************************************************/  
 
-static bool smb_io_doc_info_1(const char *desc, DOC_INFO_1 *info_1, prs_struct *ps, int depth)
+static BOOL smb_io_doc_info_1(const char *desc, DOC_INFO_1 *info_1, prs_struct *ps, int depth)
 {
 	if (info_1 == NULL) return False;
 
@@ -105,7 +106,7 @@
 reads or writes an DOC_INFO structure.
 ********************************************************************/  
 
-static bool smb_io_doc_info(const char *desc, DOC_INFO *info, prs_struct *ps, int depth)
+static BOOL smb_io_doc_info(const char *desc, DOC_INFO *info, prs_struct *ps, int depth)
 {
 	uint32 useless_ptr=0;
 	
@@ -154,7 +155,7 @@
 reads or writes an DOC_INFO_CONTAINER structure.
 ********************************************************************/  
 
-static bool smb_io_doc_info_container(const char *desc, DOC_INFO_CONTAINER *cont, prs_struct *ps, int depth)
+static BOOL smb_io_doc_info_container(const char *desc, DOC_INFO_CONTAINER *cont, prs_struct *ps, int depth)
 {
 	if (cont == NULL) return False;
 
@@ -181,7 +182,7 @@
    structure.  The _TYPE structure is really the deferred referrants (i.e
    the notify fields array) of the _TYPE structure. -tpot */
 
-static bool smb_io_notify_option_type(const char *desc, SPOOL_NOTIFY_OPTION_TYPE *type, prs_struct *ps, int depth)
+static BOOL smb_io_notify_option_type(const char *desc, SPOOL_NOTIFY_OPTION_TYPE *type, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "smb_io_notify_option_type");
 	depth++;
@@ -209,7 +210,7 @@
 reads or writes an NOTIFY OPTION TYPE DATA.
 ********************************************************************/  
 
-static bool smb_io_notify_option_type_data(const char *desc, SPOOL_NOTIFY_OPTION_TYPE *type, prs_struct *ps, int depth)
+static BOOL smb_io_notify_option_type_data(const char *desc, SPOOL_NOTIFY_OPTION_TYPE *type, prs_struct *ps, int depth)
 {
 	int i;
 
@@ -244,7 +245,7 @@
 reads or writes an NOTIFY OPTION structure.
 ********************************************************************/  
 
-static bool smb_io_notify_option_type_ctr(const char *desc, SPOOL_NOTIFY_OPTION_TYPE_CTR *ctr , prs_struct *ps, int depth)
+static BOOL smb_io_notify_option_type_ctr(const char *desc, SPOOL_NOTIFY_OPTION_TYPE_CTR *ctr , prs_struct *ps, int depth)
 {		
 	int i;
 	
@@ -276,7 +277,7 @@
 reads or writes an NOTIFY OPTION structure.
 ********************************************************************/  
 
-static bool smb_io_notify_option(const char *desc, SPOOL_NOTIFY_OPTION *option, prs_struct *ps, int depth)
+static BOOL smb_io_notify_option(const char *desc, SPOOL_NOTIFY_OPTION *option, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "smb_io_notify_option");
 	depth++;
@@ -307,7 +308,7 @@
 reads or writes an NOTIFY INFO DATA structure.
 ********************************************************************/  
 
-static bool smb_io_notify_info_data(const char *desc,SPOOL_NOTIFY_INFO_DATA *data, prs_struct *ps, int depth)
+static BOOL smb_io_notify_info_data(const char *desc,SPOOL_NOTIFY_INFO_DATA *data, prs_struct *ps, int depth)
 {
 	uint32 useless_ptr=0x0FF0ADDE;
 
@@ -386,7 +387,7 @@
 reads or writes an NOTIFY INFO DATA structure.
 ********************************************************************/  
 
-bool smb_io_notify_info_data_strings(const char *desc,SPOOL_NOTIFY_INFO_DATA *data,
+BOOL smb_io_notify_info_data_strings(const char *desc,SPOOL_NOTIFY_INFO_DATA *data,
                                      prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "smb_io_notify_info_data_strings");
@@ -521,7 +522,7 @@
 reads or writes an NOTIFY INFO structure.
 ********************************************************************/  
 
-static bool smb_io_notify_info(const char *desc, SPOOL_NOTIFY_INFO *info, prs_struct *ps, int depth)
+static BOOL smb_io_notify_info(const char *desc, SPOOL_NOTIFY_INFO *info, prs_struct *ps, int depth)
 {
 	int i;
 
@@ -557,7 +558,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spool_io_user_level_1( const char *desc, prs_struct *ps, int depth, SPOOL_USER_1 *q_u )
+BOOL spool_io_user_level_1( const char *desc, prs_struct *ps, int depth, SPOOL_USER_1 *q_u )
 {
 	prs_debug(ps, depth, desc, "");
 	depth++;
@@ -596,7 +597,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-static bool spool_io_user_level(const char *desc, SPOOL_USER_CTR *q_u, prs_struct *ps, int depth)
+static BOOL spool_io_user_level(const char *desc, SPOOL_USER_CTR *q_u, prs_struct *ps, int depth)
 {
 	if (q_u==NULL)
 		return False;
@@ -633,7 +634,7 @@
 
 #define DM_NUM_OPTIONAL_FIELDS 		8
 
-bool spoolss_io_devmode(const char *desc, prs_struct *ps, int depth, DEVICEMODE *devmode)
+BOOL spoolss_io_devmode(const char *desc, prs_struct *ps, int depth, DEVICEMODE *devmode)
 {
 	int available_space;		/* size of the device mode left to parse */
 					/* only important on unmarshalling       */
@@ -818,7 +819,7 @@
  Read or write a DEVICEMODE container
 ********************************************************************/  
 
-static bool spoolss_io_devmode_cont(const char *desc, DEVMODE_CTR *dm_c, prs_struct *ps, int depth)
+static BOOL spoolss_io_devmode_cont(const char *desc, DEVMODE_CTR *dm_c, prs_struct *ps, int depth)
 {
 	if (dm_c==NULL)
 		return False;
@@ -863,7 +864,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-static bool spoolss_io_printer_default(const char *desc, PRINTER_DEFAULT *pd, prs_struct *ps, int depth)
+static BOOL spoolss_io_printer_default(const char *desc, PRINTER_DEFAULT *pd, prs_struct *ps, int depth)
 {
 	if (pd==NULL)
 		return False;
@@ -896,7 +897,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_open_printer_ex(SPOOL_Q_OPEN_PRINTER_EX *q_u,
+BOOL make_spoolss_q_open_printer_ex(SPOOL_Q_OPEN_PRINTER_EX *q_u,
 		const fstring printername, 
 		const fstring datatype, 
 		uint32 access_required,
@@ -905,7 +906,7 @@
 {
 	DEBUG(5,("make_spoolss_q_open_printer_ex\n"));
 
-	q_u->printername = TALLOC_P( talloc_tos(), UNISTR2 );
+	q_u->printername = TALLOC_P( get_talloc_ctx(), UNISTR2 );
 	if (!q_u->printername) {
 		return False;
 	}
@@ -921,7 +922,7 @@
 	q_u->user_switch = 1;
 	
 	q_u->user_ctr.level                 = 1;
-	q_u->user_ctr.user.user1            = TALLOC_P( talloc_tos(), SPOOL_USER_1 );
+	q_u->user_ctr.user.user1            = TALLOC_P( get_talloc_ctx(), SPOOL_USER_1 );
 	if (!q_u->user_ctr.user.user1) {
 		return False;
 	}
@@ -931,11 +932,11 @@
 	q_u->user_ctr.user.user1->minor     = 0;
 	q_u->user_ctr.user.user1->processor = 0;
 
-	q_u->user_ctr.user.user1->client_name = TALLOC_P( talloc_tos(), UNISTR2 );
+	q_u->user_ctr.user.user1->client_name = TALLOC_P( get_talloc_ctx(), UNISTR2 );
 	if (!q_u->user_ctr.user.user1->client_name) {
 		return False;
 	}
-	q_u->user_ctr.user.user1->user_name   = TALLOC_P( talloc_tos(), UNISTR2 );
+	q_u->user_ctr.user.user1->user_name   = TALLOC_P( get_talloc_ctx(), UNISTR2 );
 	if (!q_u->user_ctr.user.user1->user_name) {
 		return False;
 	}
@@ -950,7 +951,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_addprinterex( TALLOC_CTX *mem_ctx, SPOOL_Q_ADDPRINTEREX *q_u, 
+BOOL make_spoolss_q_addprinterex( TALLOC_CTX *mem_ctx, SPOOL_Q_ADDPRINTEREX *q_u, 
 	const char *srv_name, const char* clientname, const char* user_name,
 	uint32 level, PRINTER_INFO_CTR *ctr)
 {
@@ -986,7 +987,7 @@
 	q_u->user_switch=1;
 
 	q_u->user_ctr.level		    = 1;
-	q_u->user_ctr.user.user1            = TALLOC_P( talloc_tos(), SPOOL_USER_1 );
+	q_u->user_ctr.user.user1            = TALLOC_P( get_talloc_ctx(), SPOOL_USER_1 );
 	if (!q_u->user_ctr.user.user1) {
 		return False;
 	}
@@ -1016,18 +1017,18 @@
 create a SPOOL_PRINTER_INFO_2 stuct from a PRINTER_INFO_2 struct
 *******************************************************************/
 
-bool make_spoolss_printer_info_2(TALLOC_CTX *ctx, SPOOL_PRINTER_INFO_LEVEL_2 **spool_info2, 
+BOOL make_spoolss_printer_info_2(TALLOC_CTX *mem_ctx, SPOOL_PRINTER_INFO_LEVEL_2 **spool_info2, 
 				PRINTER_INFO_2 *info)
 {
 
 	SPOOL_PRINTER_INFO_LEVEL_2 *inf;
 
 	/* allocate the necessary memory */
-	if (!(inf=TALLOC_P(ctx, SPOOL_PRINTER_INFO_LEVEL_2))) {
+	if (!(inf=TALLOC_P(mem_ctx, SPOOL_PRINTER_INFO_LEVEL_2))) {
 		DEBUG(0,("make_spoolss_printer_info_2: Unable to allocate SPOOL_PRINTER_INFO_LEVEL_2 sruct!\n"));
 		return False;
 	}
-
+	
 	inf->servername_ptr 	= (info->servername.buffer!=NULL)?1:0;
 	inf->printername_ptr 	= (info->printername.buffer!=NULL)?1:0;
 	inf->sharename_ptr 	= (info->sharename.buffer!=NULL)?1:0;
@@ -1048,18 +1049,18 @@
 	inf->untiltime		= info->untiltime;
 	inf->cjobs		= info->cjobs;
 	inf->averageppm	= info->averageppm;
-	init_unistr2_from_unistr(inf, &inf->servername,	&info->servername);
-	init_unistr2_from_unistr(inf, &inf->printername, &info->printername);
-	init_unistr2_from_unistr(inf, &inf->sharename, &info->sharename);
-	init_unistr2_from_unistr(inf, &inf->portname, &info->portname);
-	init_unistr2_from_unistr(inf, &inf->drivername, &info->drivername);
-	init_unistr2_from_unistr(inf, &inf->comment, &info->comment);
-	init_unistr2_from_unistr(inf, &inf->location, &info->location);
-	init_unistr2_from_unistr(inf, &inf->sepfile, &info->sepfile);
-	init_unistr2_from_unistr(inf, &inf->printprocessor, &info->printprocessor);
-	init_unistr2_from_unistr(inf, &inf->datatype, &info->datatype);
-	init_unistr2_from_unistr(inf, &inf->parameters, &info->parameters);
-	init_unistr2_from_unistr(inf, &inf->datatype, &info->datatype);
+	init_unistr2_from_unistr(&inf->servername, 	&info->servername);
+	init_unistr2_from_unistr(&inf->printername, 	&info->printername);
+	init_unistr2_from_unistr(&inf->sharename, 	&info->sharename);
+	init_unistr2_from_unistr(&inf->portname, 	&info->portname);
+	init_unistr2_from_unistr(&inf->drivername, 	&info->drivername);
+	init_unistr2_from_unistr(&inf->comment, 	&info->comment);
+	init_unistr2_from_unistr(&inf->location, 	&info->location);
+	init_unistr2_from_unistr(&inf->sepfile, 	&info->sepfile);
+	init_unistr2_from_unistr(&inf->printprocessor,	&info->printprocessor);
+	init_unistr2_from_unistr(&inf->datatype, 	&info->datatype);
+	init_unistr2_from_unistr(&inf->parameters, 	&info->parameters);
+	init_unistr2_from_unistr(&inf->datatype, 	&info->datatype);
 
 	*spool_info2 = inf;
 
@@ -1070,7 +1071,7 @@
 create a SPOOL_PRINTER_INFO_3 struct from a PRINTER_INFO_3 struct
 *******************************************************************/
 
-bool make_spoolss_printer_info_3(TALLOC_CTX *mem_ctx, SPOOL_PRINTER_INFO_LEVEL_3 **spool_info3, 
+BOOL make_spoolss_printer_info_3(TALLOC_CTX *mem_ctx, SPOOL_PRINTER_INFO_LEVEL_3 **spool_info3, 
 				PRINTER_INFO_3 *info)
 {
 
@@ -1093,7 +1094,7 @@
 create a SPOOL_PRINTER_INFO_7 struct from a PRINTER_INFO_7 struct
 *******************************************************************/
 
-bool make_spoolss_printer_info_7(TALLOC_CTX *mem_ctx, SPOOL_PRINTER_INFO_LEVEL_7 **spool_info7, 
+BOOL make_spoolss_printer_info_7(TALLOC_CTX *mem_ctx, SPOOL_PRINTER_INFO_LEVEL_7 **spool_info7, 
 				PRINTER_INFO_7 *info)
 {
 
@@ -1105,9 +1106,9 @@
 		return False;
 	}
 
-	inf->guid_ptr = (info->guid.buffer!=NULL)?1:0;
-	inf->action = info->action;
-	init_unistr2_from_unistr(inf, &inf->guid, &info->guid);
+	inf->guid_ptr	 	= (info->guid.buffer!=NULL)?1:0;
+	inf->action		= info->action;
+	init_unistr2_from_unistr(&inf->guid,	 	&info->guid);
 
 	*spool_info7 = inf;
 
@@ -1120,7 +1121,7 @@
  * called from spoolss_q_open_printer_ex (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_q_open_printer(const char *desc, SPOOL_Q_OPEN_PRINTER *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_open_printer(const char *desc, SPOOL_Q_OPEN_PRINTER *q_u, prs_struct *ps, int depth)
 {
 	if (q_u == NULL)
 		return False;
@@ -1151,7 +1152,7 @@
  * called from spoolss_open_printer_ex (cli_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_r_open_printer(const char *desc, SPOOL_R_OPEN_PRINTER *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_open_printer(const char *desc, SPOOL_R_OPEN_PRINTER *r_u, prs_struct *ps, int depth)
 {
 	if (r_u == NULL) return False;
 
@@ -1176,7 +1177,7 @@
  * called from spoolss_q_open_printer_ex (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_q_open_printer_ex(const char *desc, SPOOL_Q_OPEN_PRINTER_EX *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_open_printer_ex(const char *desc, SPOOL_Q_OPEN_PRINTER_EX *q_u, prs_struct *ps, int depth)
 {
 	if (q_u == NULL)
 		return False;
@@ -1212,7 +1213,7 @@
  * called from spoolss_open_printer_ex (cli_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_r_open_printer_ex(const char *desc, SPOOL_R_OPEN_PRINTER_EX *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_open_printer_ex(const char *desc, SPOOL_R_OPEN_PRINTER_EX *r_u, prs_struct *ps, int depth)
 {
 	if (r_u == NULL) return False;
 
@@ -1234,7 +1235,7 @@
 /*******************************************************************
  * init a structure.
  ********************************************************************/
-bool make_spoolss_q_deleteprinterdriverex( TALLOC_CTX *mem_ctx,
+BOOL make_spoolss_q_deleteprinterdriverex( TALLOC_CTX *mem_ctx,
                                            SPOOL_Q_DELETEPRINTERDRIVEREX *q_u, 
                                            const char *server,
                                            const char* arch, 
@@ -1264,7 +1265,7 @@
 /*******************************************************************
  * init a structure.
  ********************************************************************/
-bool make_spoolss_q_deleteprinterdriver(
+BOOL make_spoolss_q_deleteprinterdriver(
 	TALLOC_CTX *mem_ctx,
 	SPOOL_Q_DELETEPRINTERDRIVER *q_u, 
 	const char *server,
@@ -1289,7 +1290,7 @@
  * make a structure.
  ********************************************************************/
 
-bool make_spoolss_q_getprinterdata(SPOOL_Q_GETPRINTERDATA *q_u,
+BOOL make_spoolss_q_getprinterdata(SPOOL_Q_GETPRINTERDATA *q_u,
 				   const POLICY_HND *handle,
 				   const char *valuename, uint32 size)
 {
@@ -1308,7 +1309,7 @@
  * make a structure.
  ********************************************************************/
 
-bool make_spoolss_q_getprinterdataex(SPOOL_Q_GETPRINTERDATAEX *q_u,
+BOOL make_spoolss_q_getprinterdataex(SPOOL_Q_GETPRINTERDATAEX *q_u,
 				     const POLICY_HND *handle,
 				     const char *keyname, 
 				     const char *valuename, uint32 size)
@@ -1330,7 +1331,7 @@
  * called from spoolss_q_getprinterdata (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_q_getprinterdata(const char *desc, SPOOL_Q_GETPRINTERDATA *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_getprinterdata(const char *desc, SPOOL_Q_GETPRINTERDATA *q_u, prs_struct *ps, int depth)
 {
 	if (q_u == NULL)
 		return False;
@@ -1359,7 +1360,7 @@
  * called from spoolss_q_deleteprinterdata (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_q_deleteprinterdata(const char *desc, SPOOL_Q_DELETEPRINTERDATA *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_deleteprinterdata(const char *desc, SPOOL_Q_DELETEPRINTERDATA *q_u, prs_struct *ps, int depth)
 {
 	if (q_u == NULL)
 		return False;
@@ -1384,7 +1385,7 @@
  * called from spoolss_r_deleteprinterdata (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_r_deleteprinterdata(const char *desc, SPOOL_R_DELETEPRINTERDATA *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_deleteprinterdata(const char *desc, SPOOL_R_DELETEPRINTERDATA *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_deleteprinterdata");
 	depth++;
@@ -1399,7 +1400,7 @@
  * called from spoolss_q_deleteprinterdataex (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_q_deleteprinterdataex(const char *desc, SPOOL_Q_DELETEPRINTERDATAEX *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_deleteprinterdataex(const char *desc, SPOOL_Q_DELETEPRINTERDATAEX *q_u, prs_struct *ps, int depth)
 {
 	if (q_u == NULL)
 		return False;
@@ -1425,7 +1426,7 @@
  * called from spoolss_r_deleteprinterdataex (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_r_deleteprinterdataex(const char *desc, SPOOL_R_DELETEPRINTERDATAEX *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_deleteprinterdataex(const char *desc, SPOOL_R_DELETEPRINTERDATAEX *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_deleteprinterdataex");
 	depth++;
@@ -1441,7 +1442,7 @@
  * called from spoolss_r_getprinterdata (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_r_getprinterdata(const char *desc, SPOOL_R_GETPRINTERDATA *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_getprinterdata(const char *desc, SPOOL_R_GETPRINTERDATA *r_u, prs_struct *ps, int depth)
 {
 	if (r_u == NULL)
 		return False;
@@ -1480,7 +1481,7 @@
  * make a structure.
  ********************************************************************/
 
-bool make_spoolss_q_closeprinter(SPOOL_Q_CLOSEPRINTER *q_u, POLICY_HND *hnd)
+BOOL make_spoolss_q_closeprinter(SPOOL_Q_CLOSEPRINTER *q_u, POLICY_HND *hnd)
 {
 	if (q_u == NULL) return False;
 
@@ -1497,7 +1498,7 @@
  * called from spoolss_abortprinter (cli_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_q_abortprinter(const char *desc, SPOOL_Q_ABORTPRINTER *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_abortprinter(const char *desc, SPOOL_Q_ABORTPRINTER *q_u, prs_struct *ps, int depth)
 {
 	if (q_u == NULL) return False;
 
@@ -1518,7 +1519,7 @@
  * called from spoolss_r_abortprinter (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_r_abortprinter(const char *desc, SPOOL_R_ABORTPRINTER *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_abortprinter(const char *desc, SPOOL_R_ABORTPRINTER *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_abortprinter");
 	depth++;
@@ -1534,7 +1535,7 @@
  * called from spoolss_deleteprinter (cli_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_q_deleteprinter(const char *desc, SPOOL_Q_DELETEPRINTER *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_deleteprinter(const char *desc, SPOOL_Q_DELETEPRINTER *q_u, prs_struct *ps, int depth)
 {
 	if (q_u == NULL) return False;
 
@@ -1556,7 +1557,7 @@
  * called from spoolss_deleteprinter (cli_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_r_deleteprinter(const char *desc, SPOOL_R_DELETEPRINTER *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_deleteprinter(const char *desc, SPOOL_R_DELETEPRINTER *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_deleteprinter");
 	depth++;
@@ -1579,7 +1580,7 @@
  * called from spoolss_deleteprinterdriver (cli_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_q_deleteprinterdriver(const char *desc, SPOOL_Q_DELETEPRINTERDRIVER *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_deleteprinterdriver(const char *desc, SPOOL_Q_DELETEPRINTERDRIVER *q_u, prs_struct *ps, int depth)
 {
 	if (q_u == NULL) return False;
 
@@ -1606,7 +1607,7 @@
 /*******************************************************************
  * write a structure.
  ********************************************************************/
-bool spoolss_io_r_deleteprinterdriver(const char *desc, SPOOL_R_DELETEPRINTERDRIVER *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_deleteprinterdriver(const char *desc, SPOOL_R_DELETEPRINTERDRIVER *r_u, prs_struct *ps, int depth)
 {
 	if (r_u == NULL) return False;
 
@@ -1629,7 +1630,7 @@
  * called from spoolss_deleteprinterdriver (cli_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_q_deleteprinterdriverex(const char *desc, SPOOL_Q_DELETEPRINTERDRIVEREX *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_deleteprinterdriverex(const char *desc, SPOOL_Q_DELETEPRINTERDRIVEREX *q_u, prs_struct *ps, int depth)
 {
 	if (q_u == NULL) return False;
 
@@ -1664,7 +1665,7 @@
 /*******************************************************************
  * write a structure.
  ********************************************************************/
-bool spoolss_io_r_deleteprinterdriverex(const char *desc, SPOOL_R_DELETEPRINTERDRIVEREX *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_deleteprinterdriverex(const char *desc, SPOOL_R_DELETEPRINTERDRIVEREX *r_u, prs_struct *ps, int depth)
 {
 	if (r_u == NULL) return False;
 
@@ -1688,7 +1689,7 @@
  * called from spoolss_closeprinter (cli_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_q_closeprinter(const char *desc, SPOOL_Q_CLOSEPRINTER *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_closeprinter(const char *desc, SPOOL_Q_CLOSEPRINTER *q_u, prs_struct *ps, int depth)
 {
 	if (q_u == NULL) return False;
 
@@ -1710,7 +1711,7 @@
  * called from spoolss_closeprinter (cli_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_r_closeprinter(const char *desc, SPOOL_R_CLOSEPRINTER *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_closeprinter(const char *desc, SPOOL_R_CLOSEPRINTER *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_closeprinter");
 	depth++;
@@ -1731,7 +1732,7 @@
  * called from spoolss_q_startdocprinter (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_q_startdocprinter(const char *desc, SPOOL_Q_STARTDOCPRINTER *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_startdocprinter(const char *desc, SPOOL_Q_STARTDOCPRINTER *q_u, prs_struct *ps, int depth)
 {
 	if (q_u == NULL) return False;
 
@@ -1755,7 +1756,7 @@
  * called from spoolss_r_startdocprinter (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_r_startdocprinter(const char *desc, SPOOL_R_STARTDOCPRINTER *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_startdocprinter(const char *desc, SPOOL_R_STARTDOCPRINTER *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_startdocprinter");
 	depth++;
@@ -1772,7 +1773,7 @@
  * called from spoolss_q_enddocprinter (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_q_enddocprinter(const char *desc, SPOOL_Q_ENDDOCPRINTER *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_enddocprinter(const char *desc, SPOOL_Q_ENDDOCPRINTER *q_u, prs_struct *ps, int depth)
 {
 	if (q_u == NULL) return False;
 
@@ -1793,7 +1794,7 @@
  * called from spoolss_r_enddocprinter (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_r_enddocprinter(const char *desc, SPOOL_R_ENDDOCPRINTER *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_enddocprinter(const char *desc, SPOOL_R_ENDDOCPRINTER *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_enddocprinter");
 	depth++;
@@ -1808,7 +1809,7 @@
  * called from spoolss_q_startpageprinter (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_q_startpageprinter(const char *desc, SPOOL_Q_STARTPAGEPRINTER *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_startpageprinter(const char *desc, SPOOL_Q_STARTPAGEPRINTER *q_u, prs_struct *ps, int depth)
 {
 	if (q_u == NULL) return False;
 
@@ -1829,7 +1830,7 @@
  * called from spoolss_r_startpageprinter (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_r_startpageprinter(const char *desc, SPOOL_R_STARTPAGEPRINTER *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_startpageprinter(const char *desc, SPOOL_R_STARTPAGEPRINTER *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_startpageprinter");
 	depth++;
@@ -1844,7 +1845,7 @@
  * called from spoolss_q_endpageprinter (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_q_endpageprinter(const char *desc, SPOOL_Q_ENDPAGEPRINTER *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_endpageprinter(const char *desc, SPOOL_Q_ENDPAGEPRINTER *q_u, prs_struct *ps, int depth)
 {
 	if (q_u == NULL) return False;
 
@@ -1865,7 +1866,7 @@
  * called from spoolss_r_endpageprinter (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_r_endpageprinter(const char *desc, SPOOL_R_ENDPAGEPRINTER *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_endpageprinter(const char *desc, SPOOL_R_ENDPAGEPRINTER *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_endpageprinter");
 	depth++;
@@ -1880,7 +1881,7 @@
  * called from spoolss_q_writeprinter (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_q_writeprinter(const char *desc, SPOOL_Q_WRITEPRINTER *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_writeprinter(const char *desc, SPOOL_Q_WRITEPRINTER *q_u, prs_struct *ps, int depth)
 {
 	if (q_u == NULL) return False;
 
@@ -1917,7 +1918,7 @@
  * called from spoolss_r_writeprinter (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_r_writeprinter(const char *desc, SPOOL_R_WRITEPRINTER *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_writeprinter(const char *desc, SPOOL_R_WRITEPRINTER *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_writeprinter");
 	depth++;
@@ -1934,7 +1935,7 @@
  * called from spoolss_q_rffpcnex (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_q_rffpcnex(const char *desc, SPOOL_Q_RFFPCNEX *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_rffpcnex(const char *desc, SPOOL_Q_RFFPCNEX *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_rffpcnex");
 	depth++;
@@ -1980,7 +1981,7 @@
  * called from spoolss_r_rffpcnex (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_r_rffpcnex(const char *desc, SPOOL_R_RFFPCNEX *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_rffpcnex(const char *desc, SPOOL_R_RFFPCNEX *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_rffpcnex");
 	depth++;
@@ -1996,7 +1997,7 @@
  * called from spoolss_q_rfnpcnex (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_q_rfnpcnex(const char *desc, SPOOL_Q_RFNPCNEX *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_rfnpcnex(const char *desc, SPOOL_Q_RFNPCNEX *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_rfnpcnex");
 	depth++;
@@ -2031,7 +2032,7 @@
  * called from spoolss_r_rfnpcnex (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_r_rfnpcnex(const char *desc, SPOOL_R_RFNPCNEX *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_rfnpcnex(const char *desc, SPOOL_R_RFNPCNEX *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_rfnpcnex");
 	depth++;
@@ -2108,7 +2109,7 @@
  Parse a DEVMODE structure and its relative pointer.
 ********************************************************************/
 
-static bool smb_io_reldevmode(const char *desc, RPC_BUFFER *buffer, int depth, DEVICEMODE **devmode)
+static BOOL smb_io_reldevmode(const char *desc, RPC_BUFFER *buffer, int depth, DEVICEMODE **devmode)
 {
 	prs_struct *ps=&buffer->prs;
 
@@ -2181,7 +2182,7 @@
  Parse a PRINTER_INFO_0 structure.
 ********************************************************************/  
 
-bool smb_io_printer_info_0(const char *desc, RPC_BUFFER *buffer, PRINTER_INFO_0 *info, int depth)
+BOOL smb_io_printer_info_0(const char *desc, RPC_BUFFER *buffer, PRINTER_INFO_0 *info, int depth)
 {
 	prs_struct *ps=&buffer->prs;
 
@@ -2282,7 +2283,7 @@
  Parse a PRINTER_INFO_1 structure.
 ********************************************************************/  
 
-bool smb_io_printer_info_1(const char *desc, RPC_BUFFER *buffer, PRINTER_INFO_1 *info, int depth)
+BOOL smb_io_printer_info_1(const char *desc, RPC_BUFFER *buffer, PRINTER_INFO_1 *info, int depth)
 {
 	prs_struct *ps=&buffer->prs;
 
@@ -2307,7 +2308,7 @@
  Parse a PRINTER_INFO_2 structure.
 ********************************************************************/  
 
-bool smb_io_printer_info_2(const char *desc, RPC_BUFFER *buffer, PRINTER_INFO_2 *info, int depth)
+BOOL smb_io_printer_info_2(const char *desc, RPC_BUFFER *buffer, PRINTER_INFO_2 *info, int depth)
 {
 	prs_struct *ps=&buffer->prs;
 	uint32 dm_offset, sd_offset, current_offset;
@@ -2398,7 +2399,7 @@
  Parse a PRINTER_INFO_3 structure.
 ********************************************************************/  
 
-bool smb_io_printer_info_3(const char *desc, RPC_BUFFER *buffer, PRINTER_INFO_3 *info, int depth)
+BOOL smb_io_printer_info_3(const char *desc, RPC_BUFFER *buffer, PRINTER_INFO_3 *info, int depth)
 {
 	uint32 offset = 0;
 	prs_struct *ps=&buffer->prs;
@@ -2410,8 +2411,8 @@
 	
 	if (MARSHALLING(ps)) {
 		/* Ensure the SD is 8 byte aligned in the buffer. */
-		uint32 start = prs_offset(ps); /* Remember the start position. */
-		uint32 off_val = 0;
+		uint start = prs_offset(ps); /* Remember the start position. */
+		uint off_val = 0;
 
 		/* Write a dummy value. */
 		if (!prs_uint32("offset", ps, depth, &off_val))
@@ -2453,7 +2454,7 @@
  Parse a PRINTER_INFO_4 structure.
 ********************************************************************/  
 
-bool smb_io_printer_info_4(const char *desc, RPC_BUFFER *buffer, PRINTER_INFO_4 *info, int depth)
+BOOL smb_io_printer_info_4(const char *desc, RPC_BUFFER *buffer, PRINTER_INFO_4 *info, int depth)
 {
 	prs_struct *ps=&buffer->prs;
 
@@ -2475,7 +2476,7 @@
  Parse a PRINTER_INFO_5 structure.
 ********************************************************************/  
 
-bool smb_io_printer_info_5(const char *desc, RPC_BUFFER *buffer, PRINTER_INFO_5 *info, int depth)
+BOOL smb_io_printer_info_5(const char *desc, RPC_BUFFER *buffer, PRINTER_INFO_5 *info, int depth)
 {
 	prs_struct *ps=&buffer->prs;
 
@@ -2501,7 +2502,7 @@
  Parse a PRINTER_INFO_6 structure.
 ********************************************************************/  
 
-bool smb_io_printer_info_6(const char *desc, RPC_BUFFER *buffer,
+BOOL smb_io_printer_info_6(const char *desc, RPC_BUFFER *buffer,
 			   PRINTER_INFO_6 *info, int depth)
 {
 	prs_struct *ps=&buffer->prs;
@@ -2519,7 +2520,7 @@
  Parse a PRINTER_INFO_7 structure.
 ********************************************************************/  
 
-bool smb_io_printer_info_7(const char *desc, RPC_BUFFER *buffer, PRINTER_INFO_7 *info, int depth)
+BOOL smb_io_printer_info_7(const char *desc, RPC_BUFFER *buffer, PRINTER_INFO_7 *info, int depth)
 {
 	prs_struct *ps=&buffer->prs;
 
@@ -2539,7 +2540,7 @@
  Parse a PORT_INFO_1 structure.
 ********************************************************************/  
 
-bool smb_io_port_info_1(const char *desc, RPC_BUFFER *buffer, PORT_INFO_1 *info, int depth)
+BOOL smb_io_port_info_1(const char *desc, RPC_BUFFER *buffer, PORT_INFO_1 *info, int depth)
 {
 	prs_struct *ps=&buffer->prs;
 
@@ -2558,7 +2559,7 @@
  Parse a PORT_INFO_2 structure.
 ********************************************************************/  
 
-bool smb_io_port_info_2(const char *desc, RPC_BUFFER *buffer, PORT_INFO_2 *info, int depth)
+BOOL smb_io_port_info_2(const char *desc, RPC_BUFFER *buffer, PORT_INFO_2 *info, int depth)
 {
 	prs_struct *ps=&buffer->prs;
 
@@ -2585,7 +2586,7 @@
  Parse a DRIVER_INFO_1 structure.
 ********************************************************************/
 
-bool smb_io_printer_driver_info_1(const char *desc, RPC_BUFFER *buffer, DRIVER_INFO_1 *info, int depth) 
+BOOL smb_io_printer_driver_info_1(const char *desc, RPC_BUFFER *buffer, DRIVER_INFO_1 *info, int depth) 
 {
 	prs_struct *ps=&buffer->prs;
 
@@ -2604,7 +2605,7 @@
  Parse a DRIVER_INFO_2 structure.
 ********************************************************************/
 
-bool smb_io_printer_driver_info_2(const char *desc, RPC_BUFFER *buffer, DRIVER_INFO_2 *info, int depth) 
+BOOL smb_io_printer_driver_info_2(const char *desc, RPC_BUFFER *buffer, DRIVER_INFO_2 *info, int depth) 
 {
 	prs_struct *ps=&buffer->prs;
 
@@ -2633,7 +2634,7 @@
  Parse a DRIVER_INFO_3 structure.
 ********************************************************************/
 
-bool smb_io_printer_driver_info_3(const char *desc, RPC_BUFFER *buffer, DRIVER_INFO_3 *info, int depth)
+BOOL smb_io_printer_driver_info_3(const char *desc, RPC_BUFFER *buffer, DRIVER_INFO_3 *info, int depth)
 {
 	prs_struct *ps=&buffer->prs;
 
@@ -2672,7 +2673,7 @@
  Parse a DRIVER_INFO_6 structure.
 ********************************************************************/
 
-bool smb_io_printer_driver_info_6(const char *desc, RPC_BUFFER *buffer, DRIVER_INFO_6 *info, int depth)
+BOOL smb_io_printer_driver_info_6(const char *desc, RPC_BUFFER *buffer, DRIVER_INFO_6 *info, int depth)
 {
 	prs_struct *ps=&buffer->prs;
 
@@ -2735,7 +2736,7 @@
  Parse a JOB_INFO_1 structure.
 ********************************************************************/  
 
-bool smb_io_job_info_1(const char *desc, RPC_BUFFER *buffer, JOB_INFO_1 *info, int depth)
+BOOL smb_io_job_info_1(const char *desc, RPC_BUFFER *buffer, JOB_INFO_1 *info, int depth)
 {
 	prs_struct *ps=&buffer->prs;
 
@@ -2778,7 +2779,7 @@
  Parse a JOB_INFO_2 structure.
 ********************************************************************/  
 
-bool smb_io_job_info_2(const char *desc, RPC_BUFFER *buffer, JOB_INFO_2 *info, int depth)
+BOOL smb_io_job_info_2(const char *desc, RPC_BUFFER *buffer, JOB_INFO_2 *info, int depth)
 {	
 	uint32 pipo=0;
 	prs_struct *ps=&buffer->prs;
@@ -2845,7 +2846,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool smb_io_form_1(const char *desc, RPC_BUFFER *buffer, FORM_1 *info, int depth)
+BOOL smb_io_form_1(const char *desc, RPC_BUFFER *buffer, FORM_1 *info, int depth)
 {
 	prs_struct *ps=&buffer->prs;
 	
@@ -2882,7 +2883,7 @@
  Parse a DRIVER_DIRECTORY_1 structure.
 ********************************************************************/  
 
-bool smb_io_driverdir_1(const char *desc, RPC_BUFFER *buffer, DRIVER_DIRECTORY_1 *info, int depth)
+BOOL smb_io_driverdir_1(const char *desc, RPC_BUFFER *buffer, DRIVER_DIRECTORY_1 *info, int depth)
 {
 	prs_struct *ps=&buffer->prs;
 
@@ -2901,7 +2902,7 @@
  Parse a PORT_INFO_1 structure.
 ********************************************************************/  
 
-bool smb_io_port_1(const char *desc, RPC_BUFFER *buffer, PORT_INFO_1 *info, int depth)
+BOOL smb_io_port_1(const char *desc, RPC_BUFFER *buffer, PORT_INFO_1 *info, int depth)
 {
 	prs_struct *ps=&buffer->prs;
 
@@ -2920,7 +2921,7 @@
  Parse a PORT_INFO_2 structure.
 ********************************************************************/  
 
-bool smb_io_port_2(const char *desc, RPC_BUFFER *buffer, PORT_INFO_2 *info, int depth)
+BOOL smb_io_port_2(const char *desc, RPC_BUFFER *buffer, PORT_INFO_2 *info, int depth)
 {
 	prs_struct *ps=&buffer->prs;
 
@@ -2946,7 +2947,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool smb_io_printprocessor_info_1(const char *desc, RPC_BUFFER *buffer, PRINTPROCESSOR_1 *info, int depth)
+BOOL smb_io_printprocessor_info_1(const char *desc, RPC_BUFFER *buffer, PRINTPROCESSOR_1 *info, int depth)
 {
 	prs_struct *ps=&buffer->prs;
 
@@ -2964,7 +2965,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool smb_io_printprocdatatype_info_1(const char *desc, RPC_BUFFER *buffer, PRINTPROCDATATYPE_1 *info, int depth)
+BOOL smb_io_printprocdatatype_info_1(const char *desc, RPC_BUFFER *buffer, PRINTPROCDATATYPE_1 *info, int depth)
 {
 	prs_struct *ps=&buffer->prs;
 
@@ -2982,7 +2983,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool smb_io_printmonitor_info_1(const char *desc, RPC_BUFFER *buffer, PRINTMONITOR_1 *info, int depth)
+BOOL smb_io_printmonitor_info_1(const char *desc, RPC_BUFFER *buffer, PRINTMONITOR_1 *info, int depth)
 {
 	prs_struct *ps=&buffer->prs;
 
@@ -3000,7 +3001,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool smb_io_printmonitor_info_2(const char *desc, RPC_BUFFER *buffer, PRINTMONITOR_2 *info, int depth)
+BOOL smb_io_printmonitor_info_2(const char *desc, RPC_BUFFER *buffer, PRINTMONITOR_2 *info, int depth)
 {
 	prs_struct *ps=&buffer->prs;
 
@@ -3103,7 +3104,7 @@
 		
 	size += 4;
 	
-	size += ndr_size_security_descriptor( info->secdesc, 0 );
+	size += sec_desc_size( info->secdesc );
 
 	size+=size_of_device_mode( info->devmode );
 	
@@ -3190,7 +3191,7 @@
 uint32 spoolss_size_printer_info_3(PRINTER_INFO_3 *info)
 {
 	/* The 8 is for the self relative pointer - 8 byte aligned.. */
-	return 8 + (uint32)ndr_size_security_descriptor( info->secdesc, 0 );
+	return 8 + (uint32)sec_desc_size( info->secdesc );
 }
 
 /*******************************************************************
@@ -3526,7 +3527,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_getprinterdriver2(SPOOL_Q_GETPRINTERDRIVER2 *q_u, 
+BOOL make_spoolss_q_getprinterdriver2(SPOOL_Q_GETPRINTERDRIVER2 *q_u, 
 			       const POLICY_HND *hnd,
 			       const fstring architecture,
 			       uint32 level, uint32 clientmajor, uint32 clientminor,
@@ -3554,7 +3555,7 @@
  * called from spoolss_getprinterdriver2 (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_q_getprinterdriver2(const char *desc, SPOOL_Q_GETPRINTERDRIVER2 *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_getprinterdriver2(const char *desc, SPOOL_Q_GETPRINTERDRIVER2 *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_getprinterdriver2");
 	depth++;
@@ -3596,7 +3597,7 @@
  * called from spoolss_getprinterdriver2 (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_r_getprinterdriver2(const char *desc, SPOOL_R_GETPRINTERDRIVER2 *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_getprinterdriver2(const char *desc, SPOOL_R_GETPRINTERDRIVER2 *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_getprinterdriver2");
 	depth++;
@@ -3625,7 +3626,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_enumprinters(
+BOOL make_spoolss_q_enumprinters(
 	SPOOL_Q_ENUMPRINTERS *q_u, 
 	uint32 flags, 
 	char *servername, 
@@ -3650,7 +3651,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_enumports(SPOOL_Q_ENUMPORTS *q_u, 
+BOOL make_spoolss_q_enumports(SPOOL_Q_ENUMPORTS *q_u, 
 				fstring servername, uint32 level, 
 				RPC_BUFFER *buffer, uint32 offered)
 {
@@ -3669,7 +3670,7 @@
  * called from spoolss_enumprinters (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_q_enumprinters(const char *desc, SPOOL_Q_ENUMPRINTERS *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_enumprinters(const char *desc, SPOOL_Q_ENUMPRINTERS *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_enumprinters");
 	depth++;
@@ -3705,7 +3706,7 @@
  Parse a SPOOL_R_ENUMPRINTERS structure.
  ********************************************************************/
 
-bool spoolss_io_r_enumprinters(const char *desc, SPOOL_R_ENUMPRINTERS *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_enumprinters(const char *desc, SPOOL_R_ENUMPRINTERS *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_enumprinters");
 	depth++;
@@ -3737,7 +3738,7 @@
  *
  ********************************************************************/
 
-bool spoolss_io_r_getprinter(const char *desc, SPOOL_R_GETPRINTER *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_getprinter(const char *desc, SPOOL_R_GETPRINTER *r_u, prs_struct *ps, int depth)
 {	
 	prs_debug(ps, depth, desc, "spoolss_io_r_getprinter");
 	depth++;
@@ -3765,7 +3766,7 @@
  * called from spoolss_getprinter (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_q_getprinter(const char *desc, SPOOL_Q_GETPRINTER *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_getprinter(const char *desc, SPOOL_Q_GETPRINTER *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_getprinter");
 	depth++;
@@ -3793,7 +3794,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_getprinter(
+BOOL make_spoolss_q_getprinter(
 	TALLOC_CTX *mem_ctx,
 	SPOOL_Q_GETPRINTER *q_u, 
 	const POLICY_HND *hnd, 
@@ -3818,7 +3819,7 @@
 /*******************************************************************
  * init a structure.
  ********************************************************************/
-bool make_spoolss_q_setprinter(TALLOC_CTX *mem_ctx, SPOOL_Q_SETPRINTER *q_u, 
+BOOL make_spoolss_q_setprinter(TALLOC_CTX *mem_ctx, SPOOL_Q_SETPRINTER *q_u, 
 				const POLICY_HND *hnd, uint32 level, PRINTER_INFO_CTR *info, 
 				uint32 command)
 {
@@ -3846,8 +3847,10 @@
 		q_u->secdesc_ctr = SMB_MALLOC_P(SEC_DESC_BUF);
 		if (!q_u->secdesc_ctr)
 			return False;
-		q_u->secdesc_ctr->sd = secdesc;
-		q_u->secdesc_ctr->sd_size = (secdesc) ? sizeof(SEC_DESC) + (2*sizeof(uint32)) : 0;
+		q_u->secdesc_ctr->ptr = (secdesc != NULL) ? 1: 0;
+		q_u->secdesc_ctr->max_len = (secdesc) ? sizeof(SEC_DESC) + (2*sizeof(uint32)) : 0;
+		q_u->secdesc_ctr->len = (secdesc) ? sizeof(SEC_DESC) + (2*sizeof(uint32)) : 0;
+		q_u->secdesc_ctr->sec = secdesc;
 
 		q_u->devmode_ctr.devmode_ptr = (devmode != NULL) ? 1 : 0;
 		q_u->devmode_ctr.size = (devmode != NULL) ? sizeof(DEVICEMODE) + (3*sizeof(uint32)) : 0;
@@ -3868,8 +3871,10 @@
 		q_u->secdesc_ctr = SMB_MALLOC_P(SEC_DESC_BUF);
 		if (!q_u->secdesc_ctr)
 			return False;
-		q_u->secdesc_ctr->sd_size = (secdesc) ? sizeof(SEC_DESC) + (2*sizeof(uint32)) : 0;
-		q_u->secdesc_ctr->sd = secdesc;
+		q_u->secdesc_ctr->ptr = (secdesc != NULL) ? 1: 0;
+		q_u->secdesc_ctr->max_len = (secdesc) ? sizeof(SEC_DESC) + (2*sizeof(uint32)) : 0;
+		q_u->secdesc_ctr->len = (secdesc) ? sizeof(SEC_DESC) + (2*sizeof(uint32)) : 0;
+		q_u->secdesc_ctr->sec = secdesc;
 
 		break;
 	case 7:
@@ -3891,7 +3896,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_r_setprinter(const char *desc, SPOOL_R_SETPRINTER *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_setprinter(const char *desc, SPOOL_R_SETPRINTER *r_u, prs_struct *ps, int depth)
 {		
 	prs_debug(ps, depth, desc, "spoolss_io_r_setprinter");
 	depth++;
@@ -3909,7 +3914,7 @@
  Marshall/unmarshall a SPOOL_Q_SETPRINTER struct.
 ********************************************************************/  
 
-bool spoolss_io_q_setprinter(const char *desc, SPOOL_Q_SETPRINTER *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_setprinter(const char *desc, SPOOL_Q_SETPRINTER *q_u, prs_struct *ps, int depth)
 {
 	uint32 ptr_sec_desc = 0;
 
@@ -3997,7 +4002,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_r_fcpn(const char *desc, SPOOL_R_FCPN *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_fcpn(const char *desc, SPOOL_R_FCPN *r_u, prs_struct *ps, int depth)
 {		
 	prs_debug(ps, depth, desc, "spoolss_io_r_fcpn");
 	depth++;
@@ -4014,7 +4019,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_q_fcpn(const char *desc, SPOOL_Q_FCPN *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_fcpn(const char *desc, SPOOL_Q_FCPN *q_u, prs_struct *ps, int depth)
 {
 
 	prs_debug(ps, depth, desc, "spoolss_io_q_fcpn");
@@ -4033,7 +4038,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_r_addjob(const char *desc, SPOOL_R_ADDJOB *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_addjob(const char *desc, SPOOL_R_ADDJOB *r_u, prs_struct *ps, int depth)
 {		
 	prs_debug(ps, depth, desc, "");
 	depth++;
@@ -4059,7 +4064,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_q_addjob(const char *desc, SPOOL_Q_ADDJOB *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_addjob(const char *desc, SPOOL_Q_ADDJOB *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "");
 	depth++;
@@ -4087,7 +4092,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_r_enumjobs(const char *desc, SPOOL_R_ENUMJOBS *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_enumjobs(const char *desc, SPOOL_R_ENUMJOBS *r_u, prs_struct *ps, int depth)
 {		
 	prs_debug(ps, depth, desc, "spoolss_io_r_enumjobs");
 	depth++;
@@ -4116,7 +4121,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool make_spoolss_q_enumjobs(SPOOL_Q_ENUMJOBS *q_u, const POLICY_HND *hnd,
+BOOL make_spoolss_q_enumjobs(SPOOL_Q_ENUMJOBS *q_u, const POLICY_HND *hnd,
 				uint32 firstjob,
 				uint32 numofjobs,
 				uint32 level,
@@ -4139,7 +4144,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_q_enumjobs(const char *desc, SPOOL_Q_ENUMJOBS *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_enumjobs(const char *desc, SPOOL_Q_ENUMJOBS *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_enumjobs");
 	depth++;
@@ -4172,7 +4177,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_r_schedulejob(const char *desc, SPOOL_R_SCHEDULEJOB *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_schedulejob(const char *desc, SPOOL_R_SCHEDULEJOB *r_u, prs_struct *ps, int depth)
 {		
 	prs_debug(ps, depth, desc, "spoolss_io_r_schedulejob");
 	depth++;
@@ -4189,7 +4194,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_q_schedulejob(const char *desc, SPOOL_Q_SCHEDULEJOB *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_schedulejob(const char *desc, SPOOL_Q_SCHEDULEJOB *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_schedulejob");
 	depth++;
@@ -4208,7 +4213,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_r_setjob(const char *desc, SPOOL_R_SETJOB *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_setjob(const char *desc, SPOOL_R_SETJOB *r_u, prs_struct *ps, int depth)
 {		
 	prs_debug(ps, depth, desc, "spoolss_io_r_setjob");
 	depth++;
@@ -4225,7 +4230,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_q_setjob(const char *desc, SPOOL_Q_SETJOB *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_setjob(const char *desc, SPOOL_Q_SETJOB *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_setjob");
 	depth++;
@@ -4253,7 +4258,7 @@
  Parse a SPOOL_R_ENUMPRINTERDRIVERS structure.
 ********************************************************************/  
 
-bool spoolss_io_r_enumprinterdrivers(const char *desc, SPOOL_R_ENUMPRINTERDRIVERS *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_enumprinterdrivers(const char *desc, SPOOL_R_ENUMPRINTERDRIVERS *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_enumprinterdrivers");
 	depth++;
@@ -4283,7 +4288,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_enumprinterdrivers(SPOOL_Q_ENUMPRINTERDRIVERS *q_u,
+BOOL make_spoolss_q_enumprinterdrivers(SPOOL_Q_ENUMPRINTERDRIVERS *q_u,
                                 const char *name,
                                 const char *environment,
                                 uint32 level,
@@ -4303,7 +4308,7 @@
  Parse a SPOOL_Q_ENUMPRINTERDRIVERS structure.
 ********************************************************************/  
 
-bool spoolss_io_q_enumprinterdrivers(const char *desc, SPOOL_Q_ENUMPRINTERDRIVERS *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_enumprinterdrivers(const char *desc, SPOOL_Q_ENUMPRINTERDRIVERS *q_u, prs_struct *ps, int depth)
 {
 
 	prs_debug(ps, depth, desc, "spoolss_io_q_enumprinterdrivers");
@@ -4344,7 +4349,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_q_enumforms(const char *desc, SPOOL_Q_ENUMFORMS *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_enumforms(const char *desc, SPOOL_Q_ENUMFORMS *q_u, prs_struct *ps, int depth)
 {
 
 	prs_debug(ps, depth, desc, "spoolss_io_q_enumforms");
@@ -4371,7 +4376,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_r_enumforms(const char *desc, SPOOL_R_ENUMFORMS *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_enumforms(const char *desc, SPOOL_R_ENUMFORMS *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_enumforms");
 	depth++;
@@ -4400,7 +4405,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_q_getform(const char *desc, SPOOL_Q_GETFORM *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_getform(const char *desc, SPOOL_Q_GETFORM *q_u, prs_struct *ps, int depth)
 {
 
 	prs_debug(ps, depth, desc, "spoolss_io_q_getform");
@@ -4433,7 +4438,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_r_getform(const char *desc, SPOOL_R_GETFORM *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_getform(const char *desc, SPOOL_R_GETFORM *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_getform");
 	depth++;
@@ -4460,7 +4465,7 @@
  Parse a SPOOL_R_ENUMPORTS structure.
 ********************************************************************/  
 
-bool spoolss_io_r_enumports(const char *desc, SPOOL_R_ENUMPORTS *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_enumports(const char *desc, SPOOL_R_ENUMPORTS *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_enumports");
 	depth++;
@@ -4489,7 +4494,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_q_enumports(const char *desc, SPOOL_Q_ENUMPORTS *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_enumports(const char *desc, SPOOL_Q_ENUMPORTS *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "");
 	depth++;
@@ -4522,7 +4527,7 @@
  Parse a SPOOL_PRINTER_INFO_LEVEL_1 structure.
 ********************************************************************/  
 
-bool spool_io_printer_info_level_1(const char *desc, SPOOL_PRINTER_INFO_LEVEL_1 *il, prs_struct *ps, int depth)
+BOOL spool_io_printer_info_level_1(const char *desc, SPOOL_PRINTER_INFO_LEVEL_1 *il, prs_struct *ps, int depth)
 {	
 	prs_debug(ps, depth, desc, "spool_io_printer_info_level_1");
 	depth++;
@@ -4553,7 +4558,7 @@
  Parse a SPOOL_PRINTER_INFO_LEVEL_3 structure.
 ********************************************************************/  
 
-bool spool_io_printer_info_level_3(const char *desc, SPOOL_PRINTER_INFO_LEVEL_3 *il, prs_struct *ps, int depth)
+BOOL spool_io_printer_info_level_3(const char *desc, SPOOL_PRINTER_INFO_LEVEL_3 *il, prs_struct *ps, int depth)
 {	
 	prs_debug(ps, depth, desc, "spool_io_printer_info_level_3");
 	depth++;
@@ -4571,7 +4576,7 @@
  Parse a SPOOL_PRINTER_INFO_LEVEL_2 structure.
 ********************************************************************/  
 
-bool spool_io_printer_info_level_2(const char *desc, SPOOL_PRINTER_INFO_LEVEL_2 *il, prs_struct *ps, int depth)
+BOOL spool_io_printer_info_level_2(const char *desc, SPOOL_PRINTER_INFO_LEVEL_2 *il, prs_struct *ps, int depth)
 {	
 	prs_debug(ps, depth, desc, "spool_io_printer_info_level_2");
 	depth++;
@@ -4650,7 +4655,7 @@
 	return True;
 }
 
-bool spool_io_printer_info_level_7(const char *desc, SPOOL_PRINTER_INFO_LEVEL_7 *il, prs_struct *ps, int depth)
+BOOL spool_io_printer_info_level_7(const char *desc, SPOOL_PRINTER_INFO_LEVEL_7 *il, prs_struct *ps, int depth)
 {	
 	prs_debug(ps, depth, desc, "spool_io_printer_info_level_7");
 	depth++;
@@ -4671,7 +4676,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spool_io_printer_info_level(const char *desc, SPOOL_PRINTER_INFO_LEVEL *il, prs_struct *ps, int depth)
+BOOL spool_io_printer_info_level(const char *desc, SPOOL_PRINTER_INFO_LEVEL *il, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spool_io_printer_info_level");
 	depth++;
@@ -4748,7 +4753,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_q_addprinterex(const char *desc, SPOOL_Q_ADDPRINTEREX *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_addprinterex(const char *desc, SPOOL_Q_ADDPRINTEREX *q_u, prs_struct *ps, int depth)
 {
 	uint32 ptr_sec_desc = 0;
 
@@ -4790,7 +4795,7 @@
 		if (!sec_io_desc_buf(desc, &q_u->secdesc_ctr, ps, depth))
 			return False;
 	} else {
-		uint32 dummy = 0;
+		uint32 dummy;
 
 		/* Parse a NULL security descriptor.  This should really
 			happen inside the sec_io_desc_buf() function. */
@@ -4813,7 +4818,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_r_addprinterex(const char *desc, SPOOL_R_ADDPRINTEREX *r_u, 
+BOOL spoolss_io_r_addprinterex(const char *desc, SPOOL_R_ADDPRINTEREX *r_u, 
 			       prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_addprinterex");
@@ -4831,7 +4836,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spool_io_printer_driver_info_level_3(const char *desc, SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 **q_u, 
+BOOL spool_io_printer_driver_info_level_3(const char *desc, SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 **q_u, 
                                           prs_struct *ps, int depth)
 {	
 	SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 *il;
@@ -4909,7 +4914,7 @@
 parse a SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 structure
 ********************************************************************/  
 
-bool spool_io_printer_driver_info_level_6(const char *desc, SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 **q_u, 
+BOOL spool_io_printer_driver_info_level_6(const char *desc, SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 **q_u, 
                                           prs_struct *ps, int depth)
 {	
 	SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 *il;
@@ -5064,7 +5069,7 @@
  
 ********************************************************************/  
 
-static bool uniarray_2_dosarray(BUFFER5 *buf5, fstring **ar)
+static BOOL uniarray_2_dosarray(BUFFER5 *buf5, fstring **ar)
 {
 	fstring f;
 	int n = 0;
@@ -5101,7 +5106,7 @@
  and size of array at beginning
 ********************************************************************/  
 
-bool smb_io_unibuffer(const char *desc, UNISTR2 *buffer, prs_struct *ps, int depth)
+BOOL smb_io_unibuffer(const char *desc, UNISTR2 *buffer, prs_struct *ps, int depth)
 {
 	if (buffer==NULL) return False;
 
@@ -5120,7 +5125,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spool_io_printer_driver_info_level(const char *desc, SPOOL_PRINTER_DRIVER_INFO_LEVEL *il, prs_struct *ps, int depth)
+BOOL spool_io_printer_driver_info_level(const char *desc, SPOOL_PRINTER_DRIVER_INFO_LEVEL *il, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spool_io_printer_driver_info_level");
 	depth++;
@@ -5155,7 +5160,7 @@
  init a SPOOL_Q_ADDPRINTERDRIVER struct
  ******************************************************************/
 
-bool make_spoolss_q_addprinterdriver(TALLOC_CTX *mem_ctx,
+BOOL make_spoolss_q_addprinterdriver(TALLOC_CTX *mem_ctx,
 				SPOOL_Q_ADDPRINTERDRIVER *q_u, const char* srv_name, 
 				uint32 level, PRINTER_DRIVER_CTR *info)
 {
@@ -5187,7 +5192,7 @@
 	return True;
 }
 
-bool make_spoolss_driver_info_3(TALLOC_CTX *mem_ctx,
+BOOL make_spoolss_driver_info_3(TALLOC_CTX *mem_ctx, 
 	SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 **spool_drv_info,
 				DRIVER_INFO_3 *info3)
 {
@@ -5196,7 +5201,7 @@
 
 	if (!(inf=TALLOC_ZERO_P(mem_ctx, SPOOL_PRINTER_DRIVER_INFO_LEVEL_3)))
 		return False;
-
+	
 	inf->cversion	= info3->version;
 	inf->name_ptr	= (info3->name.buffer!=NULL)?1:0;
 	inf->environment_ptr	= (info3->architecture.buffer!=NULL)?1:0;
@@ -5207,24 +5212,24 @@
 	inf->monitorname_ptr	= (info3->monitorname.buffer!=NULL)?1:0;
 	inf->defaultdatatype_ptr	= (info3->defaultdatatype.buffer!=NULL)?1:0;
 
-	init_unistr2_from_unistr(inf, &inf->name, &info3->name);
-	init_unistr2_from_unistr(inf, &inf->environment, &info3->architecture);
-	init_unistr2_from_unistr(inf, &inf->driverpath, &info3->driverpath);
-	init_unistr2_from_unistr(inf, &inf->datafile, &info3->datafile);
-	init_unistr2_from_unistr(inf, &inf->configfile, &info3->configfile);
-	init_unistr2_from_unistr(inf, &inf->helpfile, &info3->helpfile);
-	init_unistr2_from_unistr(inf, &inf->monitorname, &info3->monitorname);
-	init_unistr2_from_unistr(inf, &inf->defaultdatatype, &info3->defaultdatatype);
+	init_unistr2_from_unistr(&inf->name, &info3->name);
+	init_unistr2_from_unistr(&inf->environment, &info3->architecture);
+	init_unistr2_from_unistr(&inf->driverpath, &info3->driverpath);
+	init_unistr2_from_unistr(&inf->datafile, &info3->datafile);
+	init_unistr2_from_unistr(&inf->configfile, &info3->configfile);
+	init_unistr2_from_unistr(&inf->helpfile, &info3->helpfile);
+	init_unistr2_from_unistr(&inf->monitorname, &info3->monitorname);
+	init_unistr2_from_unistr(&inf->defaultdatatype, &info3->defaultdatatype);
 
 	if (info3->dependentfiles) {
-		bool done = False;
-		bool null_char = False;
+		BOOL done = False;
+		BOOL null_char = False;
 		uint16 *ptr = info3->dependentfiles;
 
 		while (!done) {
 			switch (*ptr) {
 				case 0:
-					/* the null_char bool is used to help locate
+					/* the null_char BOOL is used to help locate
 					   two '\0's back to back */
 					if (null_char) {
 						done = True;
@@ -5258,7 +5263,7 @@
  make a BUFFER5 struct from a uint16*
  ******************************************************************/
 
-bool make_spoolss_buffer5(TALLOC_CTX *mem_ctx, BUFFER5 *buf5, uint32 len, uint16 *src)
+BOOL make_spoolss_buffer5(TALLOC_CTX *mem_ctx, BUFFER5 *buf5, uint32 len, uint16 *src)
 {
 
 	buf5->buf_len = len;
@@ -5282,7 +5287,7 @@
  fill in the prs_struct for a ADDPRINTERDRIVER request PDU
  ********************************************************************/  
 
-bool spoolss_io_q_addprinterdriver(const char *desc, SPOOL_Q_ADDPRINTERDRIVER *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_addprinterdriver(const char *desc, SPOOL_Q_ADDPRINTERDRIVER *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_addprinterdriver");
 	depth++;
@@ -5309,7 +5314,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_r_addprinterdriver(const char *desc, SPOOL_R_ADDPRINTERDRIVER *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_addprinterdriver(const char *desc, SPOOL_R_ADDPRINTERDRIVER *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_addprinterdriver");
 	depth++;
@@ -5324,7 +5329,7 @@
  fill in the prs_struct for a ADDPRINTERDRIVER request PDU
  ********************************************************************/  
 
-bool spoolss_io_q_addprinterdriverex(const char *desc, SPOOL_Q_ADDPRINTERDRIVEREX *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_addprinterdriverex(const char *desc, SPOOL_Q_ADDPRINTERDRIVEREX *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_addprinterdriverex");
 	depth++;
@@ -5356,7 +5361,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_r_addprinterdriverex(const char *desc, SPOOL_R_ADDPRINTERDRIVEREX *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_addprinterdriverex(const char *desc, SPOOL_R_ADDPRINTERDRIVEREX *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_addprinterdriverex");
 	depth++;
@@ -5370,7 +5375,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool uni_2_asc_printer_driver_3(SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 *uni,
+BOOL uni_2_asc_printer_driver_3(SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 *uni,
                                 NT_PRINTER_DRIVER_INFO_LEVEL_3 **asc)
 {
 	NT_PRINTER_DRIVER_INFO_LEVEL_3 *d;
@@ -5389,14 +5394,14 @@
 
 	d->cversion=uni->cversion;
 
-	unistr2_to_ascii(d->name,            &uni->name,            sizeof(d->name));
-	unistr2_to_ascii(d->environment,     &uni->environment,     sizeof(d->environment));
-	unistr2_to_ascii(d->driverpath,      &uni->driverpath,      sizeof(d->driverpath));
-	unistr2_to_ascii(d->datafile,        &uni->datafile,        sizeof(d->datafile));
-	unistr2_to_ascii(d->configfile,      &uni->configfile,      sizeof(d->configfile));
-	unistr2_to_ascii(d->helpfile,        &uni->helpfile,        sizeof(d->helpfile));
-	unistr2_to_ascii(d->monitorname,     &uni->monitorname,     sizeof(d->monitorname));
-	unistr2_to_ascii(d->defaultdatatype, &uni->defaultdatatype, sizeof(d->defaultdatatype));
+	unistr2_to_ascii(d->name,            &uni->name,            sizeof(d->name)-1);
+	unistr2_to_ascii(d->environment,     &uni->environment,     sizeof(d->environment)-1);
+	unistr2_to_ascii(d->driverpath,      &uni->driverpath,      sizeof(d->driverpath)-1);
+	unistr2_to_ascii(d->datafile,        &uni->datafile,        sizeof(d->datafile)-1);
+	unistr2_to_ascii(d->configfile,      &uni->configfile,      sizeof(d->configfile)-1);
+	unistr2_to_ascii(d->helpfile,        &uni->helpfile,        sizeof(d->helpfile)-1);
+	unistr2_to_ascii(d->monitorname,     &uni->monitorname,     sizeof(d->monitorname)-1);
+	unistr2_to_ascii(d->defaultdatatype, &uni->defaultdatatype, sizeof(d->defaultdatatype)-1);
 
 	DEBUGADD(8,( "version:         %d\n", d->cversion));
 	DEBUGADD(8,( "name:            %s\n", d->name));
@@ -5417,7 +5422,7 @@
 
 /*******************************************************************
 ********************************************************************/  
-bool uni_2_asc_printer_driver_6(SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 *uni,
+BOOL uni_2_asc_printer_driver_6(SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 *uni,
                                 NT_PRINTER_DRIVER_INFO_LEVEL_6 **asc)
 {
 	NT_PRINTER_DRIVER_INFO_LEVEL_6 *d;
@@ -5436,14 +5441,14 @@
 
 	d->version=uni->version;
 
-	unistr2_to_ascii(d->name,            &uni->name,            sizeof(d->name));
-	unistr2_to_ascii(d->environment,     &uni->environment,     sizeof(d->environment));
-	unistr2_to_ascii(d->driverpath,      &uni->driverpath,      sizeof(d->driverpath));
-	unistr2_to_ascii(d->datafile,        &uni->datafile,        sizeof(d->datafile));
-	unistr2_to_ascii(d->configfile,      &uni->configfile,      sizeof(d->configfile));
-	unistr2_to_ascii(d->helpfile,        &uni->helpfile,        sizeof(d->helpfile));
-	unistr2_to_ascii(d->monitorname,     &uni->monitorname,     sizeof(d->monitorname));
-	unistr2_to_ascii(d->defaultdatatype, &uni->defaultdatatype, sizeof(d->defaultdatatype));
+	unistr2_to_ascii(d->name,            &uni->name,            sizeof(d->name)-1);
+	unistr2_to_ascii(d->environment,     &uni->environment,     sizeof(d->environment)-1);
+	unistr2_to_ascii(d->driverpath,      &uni->driverpath,      sizeof(d->driverpath)-1);
+	unistr2_to_ascii(d->datafile,        &uni->datafile,        sizeof(d->datafile)-1);
+	unistr2_to_ascii(d->configfile,      &uni->configfile,      sizeof(d->configfile)-1);
+	unistr2_to_ascii(d->helpfile,        &uni->helpfile,        sizeof(d->helpfile)-1);
+	unistr2_to_ascii(d->monitorname,     &uni->monitorname,     sizeof(d->monitorname)-1);
+	unistr2_to_ascii(d->defaultdatatype, &uni->defaultdatatype, sizeof(d->defaultdatatype)-1);
 
 	DEBUGADD(8,( "version:         %d\n", d->version));
 	DEBUGADD(8,( "name:            %s\n", d->name));
@@ -5467,7 +5472,7 @@
 	return False;
 }
 
-bool uni_2_asc_printer_info_2(const SPOOL_PRINTER_INFO_LEVEL_2 *uni,
+BOOL uni_2_asc_printer_info_2(const SPOOL_PRINTER_INFO_LEVEL_2 *uni,
                               NT_PRINTER_INFO_LEVEL_2  *d)
 {
 	DEBUG(7,("Converting from UNICODE to ASCII\n"));
@@ -5480,17 +5485,17 @@
 	d->status=uni->status;
 	d->cjobs=uni->cjobs;
 	
-	unistr2_to_ascii(d->servername, &uni->servername, sizeof(d->servername));
-	unistr2_to_ascii(d->printername, &uni->printername, sizeof(d->printername));
-	unistr2_to_ascii(d->sharename, &uni->sharename, sizeof(d->sharename));
-	unistr2_to_ascii(d->portname, &uni->portname, sizeof(d->portname));
-	unistr2_to_ascii(d->drivername, &uni->drivername, sizeof(d->drivername));
-	unistr2_to_ascii(d->comment, &uni->comment, sizeof(d->comment));
-	unistr2_to_ascii(d->location, &uni->location, sizeof(d->location));
-	unistr2_to_ascii(d->sepfile, &uni->sepfile, sizeof(d->sepfile));
-	unistr2_to_ascii(d->printprocessor, &uni->printprocessor, sizeof(d->printprocessor));
-	unistr2_to_ascii(d->datatype, &uni->datatype, sizeof(d->datatype));
-	unistr2_to_ascii(d->parameters, &uni->parameters, sizeof(d->parameters));
+	unistr2_to_ascii(d->servername, &uni->servername, sizeof(d->servername)-1);
+	unistr2_to_ascii(d->printername, &uni->printername, sizeof(d->printername)-1);
+	unistr2_to_ascii(d->sharename, &uni->sharename, sizeof(d->sharename)-1);
+	unistr2_to_ascii(d->portname, &uni->portname, sizeof(d->portname)-1);
+	unistr2_to_ascii(d->drivername, &uni->drivername, sizeof(d->drivername)-1);
+	unistr2_to_ascii(d->comment, &uni->comment, sizeof(d->comment)-1);
+	unistr2_to_ascii(d->location, &uni->location, sizeof(d->location)-1);
+	unistr2_to_ascii(d->sepfile, &uni->sepfile, sizeof(d->sepfile)-1);
+	unistr2_to_ascii(d->printprocessor, &uni->printprocessor, sizeof(d->printprocessor)-1);
+	unistr2_to_ascii(d->datatype, &uni->datatype, sizeof(d->datatype)-1);
+	unistr2_to_ascii(d->parameters, &uni->parameters, sizeof(d->parameters)-1);
 
 	return True;
 }
@@ -5499,7 +5504,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_getprinterdriverdir(SPOOL_Q_GETPRINTERDRIVERDIR *q_u,
+BOOL make_spoolss_q_getprinterdriverdir(SPOOL_Q_GETPRINTERDRIVERDIR *q_u,
                                 fstring servername, fstring env_name, uint32 level,
                                 RPC_BUFFER *buffer, uint32 offered)
 {
@@ -5517,7 +5522,7 @@
  Parse a SPOOL_Q_GETPRINTERDRIVERDIR structure.
 ********************************************************************/  
 
-bool spoolss_io_q_getprinterdriverdir(const char *desc, SPOOL_Q_GETPRINTERDRIVERDIR *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_getprinterdriverdir(const char *desc, SPOOL_Q_GETPRINTERDRIVERDIR *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_getprinterdriverdir");
 	depth++;
@@ -5559,7 +5564,7 @@
  Parse a SPOOL_R_GETPRINTERDRIVERDIR structure.
 ********************************************************************/  
 
-bool spoolss_io_r_getprinterdriverdir(const char *desc, SPOOL_R_GETPRINTERDRIVERDIR *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_getprinterdriverdir(const char *desc, SPOOL_R_GETPRINTERDRIVERDIR *r_u, prs_struct *ps, int depth)
 {		
 	prs_debug(ps, depth, desc, "spoolss_io_r_getprinterdriverdir");
 	depth++;
@@ -5585,7 +5590,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_r_enumprintprocessors(const char *desc, SPOOL_R_ENUMPRINTPROCESSORS *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_enumprintprocessors(const char *desc, SPOOL_R_ENUMPRINTPROCESSORS *r_u, prs_struct *ps, int depth)
 {		
 	prs_debug(ps, depth, desc, "spoolss_io_r_enumprintprocessors");
 	depth++;
@@ -5614,7 +5619,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_q_enumprintprocessors(const char *desc, SPOOL_Q_ENUMPRINTPROCESSORS *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_enumprintprocessors(const char *desc, SPOOL_Q_ENUMPRINTPROCESSORS *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_enumprintprocessors");
 	depth++;
@@ -5656,7 +5661,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_q_addprintprocessor(const char *desc, SPOOL_Q_ADDPRINTPROCESSOR *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_addprintprocessor(const char *desc, SPOOL_Q_ADDPRINTPROCESSOR *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_addprintprocessor");
 	depth++;
@@ -5690,7 +5695,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_r_addprintprocessor(const char *desc, SPOOL_R_ADDPRINTPROCESSOR *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_addprintprocessor(const char *desc, SPOOL_R_ADDPRINTPROCESSOR *r_u, prs_struct *ps, int depth)
 {		
 	prs_debug(ps, depth, desc, "spoolss_io_r_addprintproicessor");
 	depth++;
@@ -5707,7 +5712,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_r_enumprintprocdatatypes(const char *desc, SPOOL_R_ENUMPRINTPROCDATATYPES *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_enumprintprocdatatypes(const char *desc, SPOOL_R_ENUMPRINTPROCDATATYPES *r_u, prs_struct *ps, int depth)
 {		
 	prs_debug(ps, depth, desc, "spoolss_io_r_enumprintprocdatatypes");
 	depth++;
@@ -5736,7 +5741,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_q_enumprintprocdatatypes(const char *desc, SPOOL_Q_ENUMPRINTPROCDATATYPES *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_enumprintprocdatatypes(const char *desc, SPOOL_Q_ENUMPRINTPROCDATATYPES *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_enumprintprocdatatypes");
 	depth++;
@@ -5779,7 +5784,7 @@
  Parse a SPOOL_Q_ENUMPRINTMONITORS structure.
 ********************************************************************/  
 
-bool spoolss_io_q_enumprintmonitors(const char *desc, SPOOL_Q_ENUMPRINTMONITORS *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_enumprintmonitors(const char *desc, SPOOL_Q_ENUMPRINTMONITORS *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_enumprintmonitors");
 	depth++;
@@ -5813,7 +5818,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_r_enumprintmonitors(const char *desc, SPOOL_R_ENUMPRINTMONITORS *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_enumprintmonitors(const char *desc, SPOOL_R_ENUMPRINTMONITORS *r_u, prs_struct *ps, int depth)
 {		
 	prs_debug(ps, depth, desc, "spoolss_io_r_enumprintmonitors");
 	depth++;
@@ -5842,7 +5847,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_r_enumprinterdata(const char *desc, SPOOL_R_ENUMPRINTERDATA *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_enumprinterdata(const char *desc, SPOOL_R_ENUMPRINTERDATA *r_u, prs_struct *ps, int depth)
 {	
 	prs_debug(ps, depth, desc, "spoolss_io_r_enumprinterdata");
 	depth++;
@@ -5899,7 +5904,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_q_enumprinterdata(const char *desc, SPOOL_Q_ENUMPRINTERDATA *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_enumprinterdata(const char *desc, SPOOL_Q_ENUMPRINTERDATA *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_enumprinterdata");
 	depth++;
@@ -5921,7 +5926,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool make_spoolss_q_enumprinterdata(SPOOL_Q_ENUMPRINTERDATA *q_u,
+BOOL make_spoolss_q_enumprinterdata(SPOOL_Q_ENUMPRINTERDATA *q_u,
 		const POLICY_HND *hnd,
 		uint32 idx, uint32 valuelen, uint32 datalen)
 {
@@ -5936,7 +5941,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool make_spoolss_q_enumprinterdataex(SPOOL_Q_ENUMPRINTERDATAEX *q_u,
+BOOL make_spoolss_q_enumprinterdataex(SPOOL_Q_ENUMPRINTERDATAEX *q_u,
 				      const POLICY_HND *hnd, const char *key,
 				      uint32 size)
 {
@@ -5949,7 +5954,7 @@
 
 /*******************************************************************
 ********************************************************************/  
-bool make_spoolss_q_setprinterdata(SPOOL_Q_SETPRINTERDATA *q_u, const POLICY_HND *hnd,
+BOOL make_spoolss_q_setprinterdata(SPOOL_Q_SETPRINTERDATA *q_u, const POLICY_HND *hnd,
 				   char* value, uint32 data_type, char* data, uint32 data_size)
 {
 	memcpy(&q_u->handle, hnd, sizeof(q_u->handle));
@@ -5964,7 +5969,7 @@
 
 /*******************************************************************
 ********************************************************************/  
-bool make_spoolss_q_setprinterdataex(SPOOL_Q_SETPRINTERDATAEX *q_u, const POLICY_HND *hnd,
+BOOL make_spoolss_q_setprinterdataex(SPOOL_Q_SETPRINTERDATAEX *q_u, const POLICY_HND *hnd,
 				     char *key, char* value, uint32 data_type, char* data, 
 				     uint32 data_size)
 {
@@ -5982,7 +5987,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_q_setprinterdata(const char *desc, SPOOL_Q_SETPRINTERDATA *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_setprinterdata(const char *desc, SPOOL_Q_SETPRINTERDATA *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_setprinterdata");
 	depth++;
@@ -6031,7 +6036,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_r_setprinterdata(const char *desc, SPOOL_R_SETPRINTERDATA *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_setprinterdata(const char *desc, SPOOL_R_SETPRINTERDATA *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_setprinterdata");
 	depth++;
@@ -6046,7 +6051,7 @@
 
 /*******************************************************************
 ********************************************************************/  
-bool spoolss_io_q_resetprinter(const char *desc, SPOOL_Q_RESETPRINTER *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_resetprinter(const char *desc, SPOOL_Q_RESETPRINTER *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_resetprinter");
 	depth++;
@@ -6073,7 +6078,7 @@
 
 /*******************************************************************
 ********************************************************************/  
-bool spoolss_io_r_resetprinter(const char *desc, SPOOL_R_RESETPRINTER *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_resetprinter(const char *desc, SPOOL_R_RESETPRINTER *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_resetprinter");
 	depth++;
@@ -6089,7 +6094,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-static bool spoolss_io_addform(const char *desc, FORM *f, uint32 ptr, prs_struct *ps, int depth)
+static BOOL spoolss_io_addform(const char *desc, FORM *f, uint32 ptr, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_addform");
 	depth++;
@@ -6125,7 +6130,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_q_deleteform(const char *desc, SPOOL_Q_DELETEFORM *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_deleteform(const char *desc, SPOOL_Q_DELETEFORM *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_deleteform");
 	depth++;
@@ -6143,7 +6148,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_r_deleteform(const char *desc, SPOOL_R_DELETEFORM *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_deleteform(const char *desc, SPOOL_R_DELETEFORM *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_deleteform");
 	depth++;
@@ -6159,7 +6164,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_q_addform(const char *desc, SPOOL_Q_ADDFORM *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_addform(const char *desc, SPOOL_Q_ADDFORM *q_u, prs_struct *ps, int depth)
 {
 	uint32 useless_ptr=1;
 	prs_debug(ps, depth, desc, "spoolss_io_q_addform");
@@ -6188,7 +6193,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_r_addform(const char *desc, SPOOL_R_ADDFORM *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_addform(const char *desc, SPOOL_R_ADDFORM *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_addform");
 	depth++;
@@ -6204,7 +6209,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_q_setform(const char *desc, SPOOL_Q_SETFORM *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_setform(const char *desc, SPOOL_Q_SETFORM *q_u, prs_struct *ps, int depth)
 {
 	uint32 useless_ptr=1;
 	prs_debug(ps, depth, desc, "spoolss_io_q_setform");
@@ -6239,7 +6244,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-bool spoolss_io_r_setform(const char *desc, SPOOL_R_SETFORM *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_setform(const char *desc, SPOOL_R_SETFORM *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_setform");
 	depth++;
@@ -6256,7 +6261,7 @@
  Parse a SPOOL_R_GETJOB structure.
 ********************************************************************/  
 
-bool spoolss_io_r_getjob(const char *desc, SPOOL_R_GETJOB *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_getjob(const char *desc, SPOOL_R_GETJOB *r_u, prs_struct *ps, int depth)
 {		
 	prs_debug(ps, depth, desc, "spoolss_io_r_getjob");
 	depth++;
@@ -6283,7 +6288,7 @@
  Parse a SPOOL_Q_GETJOB structure.
 ********************************************************************/  
 
-bool spoolss_io_q_getjob(const char *desc, SPOOL_Q_GETJOB *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_getjob(const char *desc, SPOOL_Q_GETJOB *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "");
 	depth++;
@@ -6367,7 +6372,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_replyopenprinter(SPOOL_Q_REPLYOPENPRINTER *q_u, 
+BOOL make_spoolss_q_replyopenprinter(SPOOL_Q_REPLYOPENPRINTER *q_u, 
 			       const fstring string, uint32 printer, uint32 type)
 {      
 	if (q_u == NULL)
@@ -6388,7 +6393,7 @@
  Parse a SPOOL_Q_REPLYOPENPRINTER structure.
 ********************************************************************/  
 
-bool spoolss_io_q_replyopenprinter(const char *desc, SPOOL_Q_REPLYOPENPRINTER *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_replyopenprinter(const char *desc, SPOOL_Q_REPLYOPENPRINTER *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_replyopenprinter");
 	depth++;
@@ -6419,7 +6424,7 @@
  Parse a SPOOL_R_REPLYOPENPRINTER structure.
 ********************************************************************/  
 
-bool spoolss_io_r_replyopenprinter(const char *desc, SPOOL_R_REPLYOPENPRINTER *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_replyopenprinter(const char *desc, SPOOL_R_REPLYOPENPRINTER *r_u, prs_struct *ps, int depth)
 {		
 	prs_debug(ps, depth, desc, "spoolss_io_r_replyopenprinter");
 	depth++;
@@ -6439,7 +6444,7 @@
 /*******************************************************************
  * init a structure.
  ********************************************************************/
-bool make_spoolss_q_routerreplyprinter(SPOOL_Q_ROUTERREPLYPRINTER *q_u, POLICY_HND *hnd, 
+BOOL make_spoolss_q_routerreplyprinter(SPOOL_Q_ROUTERREPLYPRINTER *q_u, POLICY_HND *hnd, 
 					uint32 condition, uint32 change_id)
 {
 
@@ -6459,7 +6464,7 @@
 /*******************************************************************
  Parse a SPOOL_Q_ROUTERREPLYPRINTER structure.
 ********************************************************************/
-bool spoolss_io_q_routerreplyprinter (const char *desc, SPOOL_Q_ROUTERREPLYPRINTER *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_routerreplyprinter (const char *desc, SPOOL_Q_ROUTERREPLYPRINTER *q_u, prs_struct *ps, int depth)
 {
 
 	prs_debug(ps, depth, desc, "spoolss_io_q_routerreplyprinter");
@@ -6489,7 +6494,7 @@
 /*******************************************************************
  Parse a SPOOL_R_ROUTERREPLYPRINTER structure.
 ********************************************************************/
-bool spoolss_io_r_routerreplyprinter (const char *desc, SPOOL_R_ROUTERREPLYPRINTER *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_routerreplyprinter (const char *desc, SPOOL_R_ROUTERREPLYPRINTER *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_routerreplyprinter");
 	depth++;
@@ -6507,7 +6512,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_reply_closeprinter(SPOOL_Q_REPLYCLOSEPRINTER *q_u, POLICY_HND *hnd)
+BOOL make_spoolss_q_reply_closeprinter(SPOOL_Q_REPLYCLOSEPRINTER *q_u, POLICY_HND *hnd)
 {      
 	if (q_u == NULL)
 		return False;
@@ -6521,7 +6526,7 @@
  Parse a SPOOL_Q_REPLYCLOSEPRINTER structure.
 ********************************************************************/  
 
-bool spoolss_io_q_replycloseprinter(const char *desc, SPOOL_Q_REPLYCLOSEPRINTER *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_replycloseprinter(const char *desc, SPOOL_Q_REPLYCLOSEPRINTER *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_replycloseprinter");
 	depth++;
@@ -6539,7 +6544,7 @@
  Parse a SPOOL_R_REPLYCLOSEPRINTER structure.
 ********************************************************************/  
 
-bool spoolss_io_r_replycloseprinter(const char *desc, SPOOL_R_REPLYCLOSEPRINTER *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_replycloseprinter(const char *desc, SPOOL_R_REPLYCLOSEPRINTER *r_u, prs_struct *ps, int depth)
 {		
 	prs_debug(ps, depth, desc, "spoolss_io_r_replycloseprinter");
 	depth++;
@@ -6561,7 +6566,7 @@
 /*******************************************************************
  Deep copy a SPOOL_NOTIFY_INFO_DATA structure
  ******************************************************************/
-static bool copy_spool_notify_info_data(SPOOL_NOTIFY_INFO_DATA *dst, 
+static BOOL copy_spool_notify_info_data(SPOOL_NOTIFY_INFO_DATA *dst, 
 				SPOOL_NOTIFY_INFO_DATA *src, int n)
 {
 	int i;
@@ -6591,7 +6596,7 @@
 /*******************************************************************
  Deep copy a SPOOL_NOTIFY_INFO structure
  ******************************************************************/
-static bool copy_spool_notify_info(SPOOL_NOTIFY_INFO *dst, SPOOL_NOTIFY_INFO *src)
+static BOOL copy_spool_notify_info(SPOOL_NOTIFY_INFO *dst, SPOOL_NOTIFY_INFO *src)
 {
 	if (!dst) {
 		DEBUG(0,("copy_spool_notify_info: NULL destination pointer!\n"));
@@ -6626,7 +6631,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_reply_rrpcn(SPOOL_Q_REPLY_RRPCN *q_u, POLICY_HND *hnd,
+BOOL make_spoolss_q_reply_rrpcn(SPOOL_Q_REPLY_RRPCN *q_u, POLICY_HND *hnd,
 			        uint32 change_low, uint32 change_high,
 				SPOOL_NOTIFY_INFO *info)
 {      
@@ -6666,7 +6671,7 @@
  Parse a SPOOL_Q_REPLY_RRPCN structure.
 ********************************************************************/  
 
-bool spoolss_io_q_reply_rrpcn(const char *desc, SPOOL_Q_REPLY_RRPCN *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_reply_rrpcn(const char *desc, SPOOL_Q_REPLY_RRPCN *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_reply_rrpcn");
 	depth++;
@@ -6703,7 +6708,7 @@
  Parse a SPOOL_R_REPLY_RRPCN structure.
 ********************************************************************/  
 
-bool spoolss_io_r_reply_rrpcn(const char *desc, SPOOL_R_REPLY_RRPCN *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_reply_rrpcn(const char *desc, SPOOL_R_REPLY_RRPCN *r_u, prs_struct *ps, int depth)
 {		
 	prs_debug(ps, depth, desc, "spoolss_io_r_reply_rrpcn");
 	depth++;
@@ -6725,7 +6730,7 @@
  * called from spoolss_q_getprinterdataex (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_q_getprinterdataex(const char *desc, SPOOL_Q_GETPRINTERDATAEX *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_getprinterdataex(const char *desc, SPOOL_Q_GETPRINTERDATAEX *q_u, prs_struct *ps, int depth)
 {
 	if (q_u == NULL)
 		return False;
@@ -6758,7 +6763,7 @@
  * called from spoolss_r_getprinterdataex (srv_spoolss.c)
  ********************************************************************/
 
-bool spoolss_io_r_getprinterdataex(const char *desc, SPOOL_R_GETPRINTERDATAEX *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_getprinterdataex(const char *desc, SPOOL_R_GETPRINTERDATAEX *r_u, prs_struct *ps, int depth)
 {
 	if (r_u == NULL)
 		return False;
@@ -6797,7 +6802,7 @@
  * read a structure.
  ********************************************************************/  
 
-bool spoolss_io_q_setprinterdataex(const char *desc, SPOOL_Q_SETPRINTERDATAEX *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_setprinterdataex(const char *desc, SPOOL_Q_SETPRINTERDATAEX *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_setprinterdataex");
 	depth++;
@@ -6853,7 +6858,7 @@
  * write a structure.
  ********************************************************************/  
 
-bool spoolss_io_r_setprinterdataex(const char *desc, SPOOL_R_SETPRINTERDATAEX *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_setprinterdataex(const char *desc, SPOOL_R_SETPRINTERDATAEX *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_setprinterdataex");
 	depth++;
@@ -6869,7 +6874,7 @@
 /*******************************************************************
  * read a structure.
  ********************************************************************/  
-bool make_spoolss_q_enumprinterkey(SPOOL_Q_ENUMPRINTERKEY *q_u, 
+BOOL make_spoolss_q_enumprinterkey(SPOOL_Q_ENUMPRINTERKEY *q_u, 
 				   POLICY_HND *hnd, const char *key, 
 				   uint32 size)
 {
@@ -6886,7 +6891,7 @@
  * read a structure.
  ********************************************************************/  
 
-bool spoolss_io_q_enumprinterkey(const char *desc, SPOOL_Q_ENUMPRINTERKEY *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_enumprinterkey(const char *desc, SPOOL_Q_ENUMPRINTERKEY *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_enumprinterkey");
 	depth++;
@@ -6912,7 +6917,7 @@
  * write a structure.
  ********************************************************************/  
 
-bool spoolss_io_r_enumprinterkey(const char *desc, SPOOL_R_ENUMPRINTERKEY *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_enumprinterkey(const char *desc, SPOOL_R_ENUMPRINTERKEY *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_enumprinterkey");
 	depth++;
@@ -6939,7 +6944,7 @@
  * read a structure.
  ********************************************************************/  
 
-bool make_spoolss_q_deleteprinterkey(SPOOL_Q_DELETEPRINTERKEY *q_u, 
+BOOL make_spoolss_q_deleteprinterkey(SPOOL_Q_DELETEPRINTERKEY *q_u, 
 				     POLICY_HND *hnd, char *keyname)
 {
 	DEBUG(5,("make_spoolss_q_deleteprinterkey\n"));
@@ -6954,7 +6959,7 @@
  * read a structure.
  ********************************************************************/  
 
-bool spoolss_io_q_deleteprinterkey(const char *desc, SPOOL_Q_DELETEPRINTERKEY *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_deleteprinterkey(const char *desc, SPOOL_Q_DELETEPRINTERKEY *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_deleteprinterkey");
 	depth++;
@@ -6974,7 +6979,7 @@
  * write a structure.
  ********************************************************************/  
 
-bool spoolss_io_r_deleteprinterkey(const char *desc, SPOOL_R_DELETEPRINTERKEY *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_deleteprinterkey(const char *desc, SPOOL_R_DELETEPRINTERKEY *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_deleteprinterkey");
 	depth++;
@@ -6993,7 +6998,7 @@
  * read a structure.
  ********************************************************************/  
 
-bool spoolss_io_q_enumprinterdataex(const char *desc, SPOOL_Q_ENUMPRINTERDATAEX *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_enumprinterdataex(const char *desc, SPOOL_Q_ENUMPRINTERDATAEX *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_enumprinterdataex");
 	depth++;
@@ -7018,7 +7023,7 @@
 /*******************************************************************
 ********************************************************************/  
 
-static bool spoolss_io_printer_enum_values_ctr(const char *desc, prs_struct *ps, 
+static BOOL spoolss_io_printer_enum_values_ctr(const char *desc, prs_struct *ps, 
 				PRINTER_ENUM_VALUES_CTR *ctr, int depth)
 {
 	int 	i;
@@ -7131,7 +7136,7 @@
  * write a structure.
  ********************************************************************/  
 
-bool spoolss_io_r_enumprinterdataex(const char *desc, SPOOL_R_ENUMPRINTERDATAEX *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_enumprinterdataex(const char *desc, SPOOL_R_ENUMPRINTERDATAEX *r_u, prs_struct *ps, int depth)
 {
 	uint32 data_offset, end_offset;
 	prs_debug(ps, depth, desc, "spoolss_io_r_enumprinterdataex");
@@ -7193,7 +7198,7 @@
 
 */
 
-bool make_spoolss_q_getprintprocessordirectory(SPOOL_Q_GETPRINTPROCESSORDIRECTORY *q_u, const char *name, char *environment, int level, RPC_BUFFER *buffer, uint32 offered)
+BOOL make_spoolss_q_getprintprocessordirectory(SPOOL_Q_GETPRINTPROCESSORDIRECTORY *q_u, const char *name, char *environment, int level, RPC_BUFFER *buffer, uint32 offered)
 {
 	DEBUG(5,("make_spoolss_q_getprintprocessordirectory\n"));
 
@@ -7208,9 +7213,9 @@
 	return True;
 }
 
-bool spoolss_io_q_getprintprocessordirectory(const char *desc, SPOOL_Q_GETPRINTPROCESSORDIRECTORY *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_getprintprocessordirectory(const char *desc, SPOOL_Q_GETPRINTPROCESSORDIRECTORY *q_u, prs_struct *ps, int depth)
 {
-	uint32 ptr = 0;
+	uint32 ptr;
 
 	prs_debug(ps, depth, desc, "spoolss_io_q_getprintprocessordirectory");
 	depth++;
@@ -7260,7 +7265,7 @@
  * write a structure.
  ********************************************************************/  
 
-bool spoolss_io_r_getprintprocessordirectory(const char *desc, SPOOL_R_GETPRINTPROCESSORDIRECTORY *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_getprintprocessordirectory(const char *desc, SPOOL_R_GETPRINTPROCESSORDIRECTORY *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_getprintprocessordirectory");
 	depth++;
@@ -7283,7 +7288,7 @@
 	return True;
 }
 
-bool smb_io_printprocessordirectory_1(const char *desc, RPC_BUFFER *buffer, PRINTPROCESSOR_DIRECTORY_1 *info, int depth)
+BOOL smb_io_printprocessordirectory_1(const char *desc, RPC_BUFFER *buffer, PRINTPROCESSOR_DIRECTORY_1 *info, int depth)
 {
 	prs_struct *ps=&buffer->prs;
 
@@ -7302,7 +7307,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_addform(SPOOL_Q_ADDFORM *q_u, POLICY_HND *handle, 
+BOOL make_spoolss_q_addform(SPOOL_Q_ADDFORM *q_u, POLICY_HND *handle, 
 			    int level, FORM *form)
 {
 	memcpy(&q_u->handle, handle, sizeof(POLICY_HND));
@@ -7317,7 +7322,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_setform(SPOOL_Q_SETFORM *q_u, POLICY_HND *handle, 
+BOOL make_spoolss_q_setform(SPOOL_Q_SETFORM *q_u, POLICY_HND *handle, 
 			    int level, const char *form_name, FORM *form)
 {
 	memcpy(&q_u->handle, handle, sizeof(POLICY_HND));
@@ -7333,7 +7338,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_deleteform(SPOOL_Q_DELETEFORM *q_u, POLICY_HND *handle, 
+BOOL make_spoolss_q_deleteform(SPOOL_Q_DELETEFORM *q_u, POLICY_HND *handle, 
 			       const char *form)
 {
 	memcpy(&q_u->handle, handle, sizeof(POLICY_HND));
@@ -7345,7 +7350,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_getform(SPOOL_Q_GETFORM *q_u, POLICY_HND *handle, 
+BOOL make_spoolss_q_getform(SPOOL_Q_GETFORM *q_u, POLICY_HND *handle, 
                             const char *formname, uint32 level, 
 			    RPC_BUFFER *buffer, uint32 offered)
 {
@@ -7362,7 +7367,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_enumforms(SPOOL_Q_ENUMFORMS *q_u, POLICY_HND *handle, 
+BOOL make_spoolss_q_enumforms(SPOOL_Q_ENUMFORMS *q_u, POLICY_HND *handle, 
 			      uint32 level, RPC_BUFFER *buffer,
 			      uint32 offered)
 {
@@ -7378,7 +7383,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_setjob(SPOOL_Q_SETJOB *q_u, POLICY_HND *handle, 
+BOOL make_spoolss_q_setjob(SPOOL_Q_SETJOB *q_u, POLICY_HND *handle, 
 			   uint32 jobid, uint32 level, uint32 command)
 {
         memcpy(&q_u->handle, handle, sizeof(POLICY_HND));
@@ -7397,7 +7402,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_getjob(SPOOL_Q_GETJOB *q_u, POLICY_HND *handle, 
+BOOL make_spoolss_q_getjob(SPOOL_Q_GETJOB *q_u, POLICY_HND *handle, 
 			   uint32 jobid, uint32 level, RPC_BUFFER *buffer,
 			   uint32 offered)
 {
@@ -7414,7 +7419,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_startpageprinter(SPOOL_Q_STARTPAGEPRINTER *q_u, 
+BOOL make_spoolss_q_startpageprinter(SPOOL_Q_STARTPAGEPRINTER *q_u, 
 				     POLICY_HND *handle)
 {
         memcpy(&q_u->handle, handle, sizeof(POLICY_HND));
@@ -7426,7 +7431,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_endpageprinter(SPOOL_Q_ENDPAGEPRINTER *q_u, 
+BOOL make_spoolss_q_endpageprinter(SPOOL_Q_ENDPAGEPRINTER *q_u, 
 				   POLICY_HND *handle)
 {
         memcpy(&q_u->handle, handle, sizeof(POLICY_HND));
@@ -7438,7 +7443,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_startdocprinter(SPOOL_Q_STARTDOCPRINTER *q_u, 
+BOOL make_spoolss_q_startdocprinter(SPOOL_Q_STARTDOCPRINTER *q_u, 
 				    POLICY_HND *handle, uint32 level,
 				    char *docname, char *outputfile,
 				    char *datatype)
@@ -7478,7 +7483,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_enddocprinter(SPOOL_Q_ENDDOCPRINTER *q_u, 
+BOOL make_spoolss_q_enddocprinter(SPOOL_Q_ENDDOCPRINTER *q_u, 
 				  POLICY_HND *handle)
 {
         memcpy(&q_u->handle, handle, sizeof(POLICY_HND));
@@ -7490,7 +7495,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_writeprinter(SPOOL_Q_WRITEPRINTER *q_u, 
+BOOL make_spoolss_q_writeprinter(SPOOL_Q_WRITEPRINTER *q_u, 
 				 POLICY_HND *handle, uint32 data_size,
 				 char *data)
 {
@@ -7504,7 +7509,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_deleteprinterdata(SPOOL_Q_DELETEPRINTERDATA *q_u, 
+BOOL make_spoolss_q_deleteprinterdata(SPOOL_Q_DELETEPRINTERDATA *q_u, 
 				 POLICY_HND *handle, char *valuename)
 {
         memcpy(&q_u->handle, handle, sizeof(POLICY_HND));
@@ -7517,7 +7522,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_deleteprinterdataex(SPOOL_Q_DELETEPRINTERDATAEX *q_u, 
+BOOL make_spoolss_q_deleteprinterdataex(SPOOL_Q_DELETEPRINTERDATAEX *q_u, 
 					POLICY_HND *handle, char *key,
 					char *value)
 {
@@ -7532,7 +7537,7 @@
  * init a structure.
  ********************************************************************/
 
-bool make_spoolss_q_rffpcnex(SPOOL_Q_RFFPCNEX *q_u, POLICY_HND *handle,
+BOOL make_spoolss_q_rffpcnex(SPOOL_Q_RFFPCNEX *q_u, POLICY_HND *handle,
 			     uint32 flags, uint32 options, const char *localmachine,
 			     uint32 printerlocal, SPOOL_NOTIFY_OPTION *option)
 {
@@ -7559,7 +7564,7 @@
 /*******************************************************************
  ********************************************************************/  
 
-bool spoolss_io_q_xcvdataport(const char *desc, SPOOL_Q_XCVDATAPORT *q_u, prs_struct *ps, int depth)
+BOOL spoolss_io_q_xcvdataport(const char *desc, SPOOL_Q_XCVDATAPORT *q_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_q_xcvdataport");
 	depth++;
@@ -7595,7 +7600,7 @@
 /*******************************************************************
  ********************************************************************/  
 
-bool spoolss_io_r_xcvdataport(const char *desc, SPOOL_R_XCVDATAPORT *r_u, prs_struct *ps, int depth)
+BOOL spoolss_io_r_xcvdataport(const char *desc, SPOOL_R_XCVDATAPORT *r_u, prs_struct *ps, int depth)
 {
 	prs_debug(ps, depth, desc, "spoolss_io_r_xcvdataport");
 	depth++;
@@ -7622,7 +7627,7 @@
 /*******************************************************************
  ********************************************************************/  
 
-bool make_monitorui_buf( RPC_BUFFER *buf, const char *dllname )
+BOOL make_monitorui_buf( RPC_BUFFER *buf, const char *dllname )
 {
 	UNISTR string;
 	
@@ -7642,7 +7647,7 @@
  
 #define PORT_DATA_1_PAD    540
 
-static bool smb_io_port_data_1( const char *desc, RPC_BUFFER *buf, int depth, SPOOL_PORT_DATA_1 *p1 )
+static BOOL smb_io_port_data_1( const char *desc, RPC_BUFFER *buf, int depth, SPOOL_PORT_DATA_1 *p1 )
 {
 	prs_struct *ps = &buf->prs;
 	uint8 padding[PORT_DATA_1_PAD];
@@ -7694,7 +7699,7 @@
 /*******************************************************************
  ********************************************************************/  
 
-bool convert_port_data_1( NT_PORT_DATA_1 *port1, RPC_BUFFER *buf ) 
+BOOL convert_port_data_1( NT_PORT_DATA_1 *port1, RPC_BUFFER *buf ) 
 {
 	SPOOL_PORT_DATA_1 spdata_1;
 	

Copied: branches/samba/upstream/source/rpc_parse/parse_srv.c (from rev 1928, branches/samba/upstream/source/rpc_parse/parse_srv.c)
===================================================================
--- branches/samba/upstream/source/rpc_parse/parse_srv.c	                        (rev 0)
+++ branches/samba/upstream/source/rpc_parse/parse_srv.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,3557 @@
+/* 
+ *  Unix SMB/CIFS implementation.
+ *  RPC Pipe client / server routines
+ *  Copyright (C) Andrew Tridgell              1992-1997,
+ *  Copyright (C) Luke Kenneth Casson Leighton 1996-1997,
+ *  Copyright (C) Paul Ashton                       1997,
+ *  Copyright (C) Jeremy Allison		    1999,
+ *  Copyright (C) Nigel Williams		    2001,
+ *  Copyright (C) Jim McDonough (jmcd at us.ibm.com)   2002.
+ *  Copyright (C) Gerald (Jerry) Carter             2006.
+ *  
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_RPC_PARSE
+
+/*******************************************************************
+ Inits a SH_INFO_0_STR structure
+********************************************************************/
+
+void init_srv_share_info0_str(SH_INFO_0_STR *sh0, const char *net_name)
+{
+	DEBUG(5,("init_srv_share_info0_str\n"));
+
+	init_unistr2(&sh0->uni_netname, net_name, UNI_STR_TERMINATE);
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_share_info0_str(const char *desc, SH_INFO_0_STR *sh0, prs_struct *ps, int depth)
+{
+	if (sh0 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_share_info0_str");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	if(sh0->ptrs->ptr_netname)
+		if(!smb_io_unistr2("", &sh0->uni_netname, True, ps, depth))
+			return False;
+
+	return True;
+}
+
+/*******************************************************************
+ makes a SH_INFO_0 structure
+********************************************************************/
+
+void init_srv_share_info0(SH_INFO_0 *sh0, const char *net_name)
+{
+	DEBUG(5,("init_srv_share_info0: %s\n", net_name));
+
+	sh0->ptr_netname = (net_name != NULL) ? 1 : 0;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_share_info0(const char *desc, SH_INFO_0 *sh0, prs_struct *ps, int depth)
+{
+	if (sh0 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_share_info0");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_netname", ps, depth, &sh0->ptr_netname))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a SH_INFO_1_STR structure
+********************************************************************/
+
+void init_srv_share_info1_str(SH_INFO_1_STR *sh1, const char *net_name, const char *remark)
+{
+	DEBUG(5,("init_srv_share_info1_str\n"));
+
+	init_unistr2(&sh1->uni_netname, net_name, UNI_STR_TERMINATE);
+	init_unistr2(&sh1->uni_remark, remark, UNI_STR_TERMINATE);
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_share_info1_str(const char *desc, SH_INFO_1_STR *sh1, prs_struct *ps, int depth)
+{
+	if (sh1 == NULL)
+		return False;
+	
+	prs_debug(ps, depth, desc, "srv_io_share_info1_str");
+	depth++;
+	
+	if(!prs_align(ps))
+		return False;
+
+	if(sh1->ptrs->ptr_netname)
+		if(!smb_io_unistr2("", &sh1->uni_netname, True, ps, depth))
+			return False;
+	
+	if(!prs_align(ps))
+		return False;
+	
+	if(sh1->ptrs->ptr_remark)
+		if(!smb_io_unistr2("", &sh1->uni_remark, True, ps, depth))
+			return False;
+	
+	return True;
+}
+
+/*******************************************************************
+ makes a SH_INFO_1 structure
+********************************************************************/
+
+void init_srv_share_info1(SH_INFO_1 *sh1, const char *net_name, uint32 type, const char *remark)
+{
+	DEBUG(5,("init_srv_share_info1: %s %8x %s\n", net_name, type, remark));
+	
+	sh1->ptr_netname = (net_name != NULL) ? 1 : 0;
+	sh1->type        = type;
+	sh1->ptr_remark  = (remark != NULL) ? 1 : 0;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_share_info1(const char *desc, SH_INFO_1 *sh1, prs_struct *ps, int depth)
+{
+	if (sh1 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_share_info1");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_netname", ps, depth, &sh1->ptr_netname))
+		return False;
+	if(!prs_uint32("type       ", ps, depth, &sh1->type))
+		return False;
+	if(!prs_uint32("ptr_remark ", ps, depth, &sh1->ptr_remark))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a SH_INFO_2_STR structure
+********************************************************************/
+
+void init_srv_share_info2_str(SH_INFO_2_STR *sh2,
+				const char *net_name, const char *remark,
+				const char *path, const char *passwd)
+{
+	DEBUG(5,("init_srv_share_info2_str\n"));
+
+	init_unistr2(&sh2->uni_netname, net_name, UNI_STR_TERMINATE);
+	init_unistr2(&sh2->uni_remark, remark, UNI_STR_TERMINATE);
+	init_unistr2(&sh2->uni_path, path, UNI_STR_TERMINATE);
+	init_unistr2(&sh2->uni_passwd, passwd, UNI_STR_TERMINATE);
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_share_info2_str(const char *desc, SH_INFO_2 *sh, SH_INFO_2_STR *sh2, prs_struct *ps, int depth)
+{
+	if (sh2 == NULL)
+		return False;
+
+	if (UNMARSHALLING(ps))
+		ZERO_STRUCTP(sh2);
+
+	prs_debug(ps, depth, desc, "srv_io_share_info2_str");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if (sh->ptr_netname)
+		if(!smb_io_unistr2("", &sh2->uni_netname, True, ps, depth))
+			return False;
+
+	if (sh->ptr_remark)
+		if(!smb_io_unistr2("", &sh2->uni_remark, True, ps, depth))
+			return False;
+
+	if (sh->ptr_netname)
+		if(!smb_io_unistr2("", &sh2->uni_path, True, ps, depth))
+			return False;
+
+	if (sh->ptr_passwd)
+		if(!smb_io_unistr2("", &sh2->uni_passwd, True, ps, depth))
+			return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a SH_INFO_2 structure
+********************************************************************/
+
+void init_srv_share_info2(SH_INFO_2 *sh2,
+				const char *net_name, uint32 type, const char *remark,
+				uint32 perms, uint32 max_uses, uint32 num_uses,
+				const char *path, const char *passwd)
+{
+	DEBUG(5,("init_srv_share_info2: %s %8x %s\n", net_name, type, remark));
+
+	sh2->ptr_netname = (net_name != NULL) ? 1 : 0;
+	sh2->type        = type;
+	sh2->ptr_remark  = (remark != NULL) ? 1 : 0;
+	sh2->perms       = perms;
+	sh2->max_uses    = max_uses;
+	sh2->num_uses    = num_uses;
+	sh2->ptr_path    = (path != NULL) ? 1 : 0;
+	sh2->ptr_passwd  = (passwd != NULL) ? 1 : 0;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_share_info2(const char *desc, SH_INFO_2 *sh2, prs_struct *ps, int depth)
+{
+	if (sh2 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_share_info2");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_netname", ps, depth, &sh2->ptr_netname))
+		return False;
+	if(!prs_uint32("type       ", ps, depth, &sh2->type))
+		return False;
+	if(!prs_uint32("ptr_remark ", ps, depth, &sh2->ptr_remark))
+		return False;
+	if(!prs_uint32("perms      ", ps, depth, &sh2->perms))
+		return False;
+	if(!prs_uint32("max_uses   ", ps, depth, &sh2->max_uses))
+		return False;
+	if(!prs_uint32("num_uses   ", ps, depth, &sh2->num_uses))
+		return False;
+	if(!prs_uint32("ptr_path   ", ps, depth, &sh2->ptr_path))
+		return False;
+	if(!prs_uint32("ptr_passwd ", ps, depth, &sh2->ptr_passwd))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a SH_INFO_501_STR structure
+********************************************************************/
+
+void init_srv_share_info501_str(SH_INFO_501_STR *sh501,
+				const char *net_name, const char *remark)
+{
+	DEBUG(5,("init_srv_share_info501_str\n"));
+
+	init_unistr2(&sh501->uni_netname, net_name, UNI_STR_TERMINATE);
+	init_unistr2(&sh501->uni_remark, remark, UNI_STR_TERMINATE);
+}
+
+/*******************************************************************
+ Inits a SH_INFO_2 structure
+*******************************************************************/
+
+void init_srv_share_info501(SH_INFO_501 *sh501, const char *net_name, uint32 type, const char *remark, uint32 csc_policy)
+{
+	DEBUG(5,("init_srv_share_info501: %s %8x %s %08x\n", net_name, type,
+		remark, csc_policy));
+
+	ZERO_STRUCTP(sh501);
+
+	sh501->ptr_netname = (net_name != NULL) ? 1 : 0;
+	sh501->type = type;
+	sh501->ptr_remark = (remark != NULL) ? 1 : 0;
+	sh501->csc_policy = csc_policy;
+}
+
+/*******************************************************************
+ Reads of writes a structure.
+*******************************************************************/
+
+static BOOL srv_io_share_info501(const char *desc, SH_INFO_501 *sh501, prs_struct *ps, int depth)
+{
+	if (sh501 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_share_info501");
+	depth++;
+
+	if (!prs_align(ps))
+		return False;
+
+	if (!prs_uint32("ptr_netname", ps, depth, &sh501->ptr_netname))
+		return False;
+	if (!prs_uint32("type     ", ps, depth, &sh501->type))
+		return False;
+	if (!prs_uint32("ptr_remark ", ps, depth, &sh501->ptr_remark))
+		return False;
+	if (!prs_uint32("csc_policy ", ps, depth, &sh501->csc_policy))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_share_info501_str(const char *desc, SH_INFO_501_STR *sh501, prs_struct *ps, int depth)
+{
+	if (sh501 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_share_info501_str");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	if(!smb_io_unistr2("", &sh501->uni_netname, True, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+	if(!smb_io_unistr2("", &sh501->uni_remark, True, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a SH_INFO_502 structure
+********************************************************************/
+
+void init_srv_share_info502(SH_INFO_502 *sh502,
+				const char *net_name, uint32 type, const char *remark,
+				uint32 perms, uint32 max_uses, uint32 num_uses,
+				const char *path, const char *passwd, SEC_DESC *psd, size_t sd_size)
+{
+	DEBUG(5,("init_srv_share_info502: %s %8x %s\n", net_name, type, remark));
+
+	ZERO_STRUCTP(sh502);
+
+	sh502->ptr_netname = (net_name != NULL) ? 1 : 0;
+	sh502->type        = type;
+	sh502->ptr_remark  = (remark != NULL) ? 1 : 0;
+	sh502->perms       = perms;
+	sh502->max_uses    = max_uses;
+	sh502->num_uses    = num_uses;
+	sh502->ptr_path    = (path != NULL) ? 1 : 0;
+	sh502->ptr_passwd  = (passwd != NULL) ? 1 : 0;
+	sh502->reserved    = 0;  /* actual size within rpc */
+	sh502->sd_size     = (uint32)sd_size;
+	sh502->ptr_sd      = (psd != NULL) ? 1 : 0;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_share_info502(const char *desc, SH_INFO_502 *sh502, prs_struct *ps, int depth)
+{
+	if (sh502 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_share_info502");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_netname", ps, depth, &sh502->ptr_netname))
+		return False;
+	if(!prs_uint32("type       ", ps, depth, &sh502->type))
+		return False;
+	if(!prs_uint32("ptr_remark ", ps, depth, &sh502->ptr_remark))
+		return False;
+	if(!prs_uint32("perms      ", ps, depth, &sh502->perms))
+		return False;
+	if(!prs_uint32("max_uses   ", ps, depth, &sh502->max_uses))
+		return False;
+	if(!prs_uint32("num_uses   ", ps, depth, &sh502->num_uses))
+		return False;
+	if(!prs_uint32("ptr_path   ", ps, depth, &sh502->ptr_path))
+		return False;
+	if(!prs_uint32("ptr_passwd ", ps, depth, &sh502->ptr_passwd))
+		return False;
+	if(!prs_uint32_pre("reserved   ", ps, depth, &sh502->reserved, &sh502->reserved_offset))
+		return False;
+	if(!prs_uint32("ptr_sd     ", ps, depth, &sh502->ptr_sd))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a SH_INFO_502_STR structure
+********************************************************************/
+
+void init_srv_share_info502_str(SH_INFO_502_STR *sh502str,
+				const char *net_name, const char *remark,
+				const char *path, const char *passwd, SEC_DESC *psd, size_t sd_size)
+{
+	DEBUG(5,("init_srv_share_info502_str\n"));
+
+	init_unistr2(&sh502str->uni_netname, net_name, UNI_STR_TERMINATE);
+	init_unistr2(&sh502str->uni_remark, remark, UNI_STR_TERMINATE);
+	init_unistr2(&sh502str->uni_path, path, UNI_STR_TERMINATE);
+	init_unistr2(&sh502str->uni_passwd, passwd, UNI_STR_TERMINATE);
+	sh502str->sd = psd;
+	sh502str->reserved = 0;
+	sh502str->sd_size = sd_size;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_share_info502_str(const char *desc, SH_INFO_502_STR *sh502, prs_struct *ps, int depth)
+{
+	if (sh502 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_share_info502_str");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(sh502->ptrs->ptr_netname) {
+		if(!smb_io_unistr2("", &sh502->uni_netname, True, ps, depth))
+			return False;
+	}
+
+	if(!prs_align(ps))
+		return False;
+
+	if(sh502->ptrs->ptr_remark) {
+		if(!smb_io_unistr2("", &sh502->uni_remark, True, ps, depth))
+			return False;
+	}
+
+	if(!prs_align(ps))
+		return False;
+
+	if(sh502->ptrs->ptr_path) {
+		if(!smb_io_unistr2("", &sh502->uni_path, True, ps, depth))
+			return False;
+	}
+
+	if(!prs_align(ps))
+		return False;
+
+	if(sh502->ptrs->ptr_passwd) {
+		if(!smb_io_unistr2("", &sh502->uni_passwd, True, ps, depth))
+			return False;
+	}
+
+	if(!prs_align(ps))
+		return False;
+
+	if(sh502->ptrs->ptr_sd) {
+		uint32 old_offset;
+		uint32 reserved_offset;
+
+		if(!prs_uint32_pre("reserved ", ps, depth, &sh502->reserved, &reserved_offset))
+			return False;
+	  
+		old_offset = prs_offset(ps);
+	  
+		if (!sec_io_desc(desc, &sh502->sd, ps, depth))
+			return False;
+
+		if(UNMARSHALLING(ps)) {
+
+			sh502->ptrs->sd_size = sh502->sd_size = sec_desc_size(sh502->sd);
+
+			prs_set_offset(ps, old_offset + sh502->reserved);
+		}
+
+		prs_align(ps);
+
+		if(MARSHALLING(ps)) {
+
+			sh502->ptrs->reserved = sh502->reserved = prs_offset(ps) - old_offset;
+		}
+	    
+		if(!prs_uint32_post("reserved ", ps, depth, 
+				    &sh502->reserved, reserved_offset, sh502->reserved))
+			return False;
+		if(!prs_uint32_post("reserved ", ps, depth, 
+				    &sh502->ptrs->reserved, sh502->ptrs->reserved_offset, sh502->ptrs->reserved))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a SH_INFO_1004_STR structure
+********************************************************************/
+
+void init_srv_share_info1004_str(SH_INFO_1004_STR *sh1004, const char *remark)
+{
+	DEBUG(5,("init_srv_share_info1004_str\n"));
+
+	init_unistr2(&sh1004->uni_remark, remark, UNI_STR_TERMINATE);
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_share_info1004_str(const char *desc, SH_INFO_1004_STR *sh1004, prs_struct *ps, int depth)
+{
+	if (sh1004 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_share_info1004_str");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	if(sh1004->ptrs->ptr_remark)
+		if(!smb_io_unistr2("", &sh1004->uni_remark, True, ps, depth))
+			return False;
+
+	return True;
+}
+
+/*******************************************************************
+ makes a SH_INFO_1004 structure
+********************************************************************/
+
+void init_srv_share_info1004(SH_INFO_1004 *sh1004, const char *remark)
+{
+	DEBUG(5,("init_srv_share_info1004: %s\n", remark));
+
+	sh1004->ptr_remark = (remark != NULL) ? 1 : 0;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_share_info1004(const char *desc, SH_INFO_1004 *sh1004, prs_struct *ps, int depth)
+{
+	if (sh1004 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_share_info1004");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_remark", ps, depth, &sh1004->ptr_remark))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_share_info1005(const char* desc, SRV_SHARE_INFO_1005* sh1005, prs_struct* ps, int depth)
+{
+	if(sh1005 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_share_info1005");
+		depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("share_info_flags", ps, depth, 
+		       &sh1005->share_info_flags))
+		return False;
+
+	return True;
+}   
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_share_info1006(const char* desc, SRV_SHARE_INFO_1006* sh1006, prs_struct* ps, int depth)
+{
+	if(sh1006 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_share_info1006");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("max uses     ", ps, depth, &sh1006->max_uses))
+		return False;
+
+	return True;
+}   
+
+/*******************************************************************
+ Inits a SH_INFO_1007_STR structure
+********************************************************************/
+
+void init_srv_share_info1007_str(SH_INFO_1007_STR *sh1007, const char *alternate_directory_name)
+{
+	DEBUG(5,("init_srv_share_info1007_str\n"));
+
+	init_unistr2(&sh1007->uni_AlternateDirectoryName, alternate_directory_name, UNI_STR_TERMINATE);
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_share_info1007_str(const char *desc, SH_INFO_1007_STR *sh1007, prs_struct *ps, int depth)
+{
+	if (sh1007 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_share_info1007_str");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	if(sh1007->ptrs->ptr_AlternateDirectoryName)
+		if(!smb_io_unistr2("", &sh1007->uni_AlternateDirectoryName, True, ps, depth))
+			return False;
+
+	return True;
+}
+
+/*******************************************************************
+ makes a SH_INFO_1007 structure
+********************************************************************/
+
+void init_srv_share_info1007(SH_INFO_1007 *sh1007, uint32 flags, const char *alternate_directory_name)
+{
+	DEBUG(5,("init_srv_share_info1007: %s\n", alternate_directory_name));
+
+	sh1007->flags                      = flags;
+	sh1007->ptr_AlternateDirectoryName = (alternate_directory_name != NULL) ? 1 : 0;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_share_info1007(const char *desc, SH_INFO_1007 *sh1007, prs_struct *ps, int depth)
+{
+	if (sh1007 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_share_info1007");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("flags      ", ps, depth, &sh1007->flags))
+		return False;
+	if(!prs_uint32("ptr_Alter..", ps, depth, &sh1007->ptr_AlternateDirectoryName))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_share_info1501(const char* desc, SRV_SHARE_INFO_1501* sh1501,
+				  prs_struct* ps, int depth)
+{
+	if(sh1501 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_share_info1501");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if (!sec_io_desc_buf(desc, &sh1501->sdb, ps, depth))
+		return False;
+
+	return True;
+}   
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_srv_share_ctr(const char *desc, SRV_SHARE_INFO_CTR *ctr, prs_struct *ps, int depth)
+{
+	if (ctr == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_srv_share_ctr");
+	depth++;
+
+	if (UNMARSHALLING(ps)) {
+		memset(ctr, '\0', sizeof(SRV_SHARE_INFO_CTR));
+	}
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("info_level", ps, depth, &ctr->info_level))
+		return False;
+
+	if(!prs_uint32("switch_value", ps, depth, &ctr->switch_value))
+		return False;
+	if(!prs_uint32("ptr_share_info", ps, depth, &ctr->ptr_share_info))
+		return False;
+
+	if (ctr->ptr_share_info == 0)
+		return True;
+
+	if(!prs_uint32("num_entries", ps, depth, &ctr->num_entries))
+		return False;
+	if(!prs_uint32("ptr_entries", ps, depth, &ctr->ptr_entries))
+		return False;
+
+	if (ctr->ptr_entries == 0) {
+		if (ctr->num_entries == 0)
+			return True;
+		else
+			return False;
+	}
+
+	if(!prs_uint32("num_entries2", ps, depth, &ctr->num_entries2))
+		return False;
+
+	if (ctr->num_entries2 != ctr->num_entries)
+		return False;
+
+	switch (ctr->switch_value) {
+
+	case 0:
+	{
+		SRV_SHARE_INFO_0 *info0 = ctr->share.info0;
+		int num_entries = ctr->num_entries;
+		int i;
+
+		if (UNMARSHALLING(ps) && num_entries) {
+			if (!(info0 = PRS_ALLOC_MEM(ps, SRV_SHARE_INFO_0, num_entries)))
+				return False;
+			ctr->share.info0 = info0;
+		}
+
+		for (i = 0; i < num_entries; i++) {
+			if(!srv_io_share_info0("", &info0[i].info_0, ps, depth))
+				return False;
+		}
+
+		for (i = 0; i < num_entries; i++) {
+			info0[i].info_0_str.ptrs = &info0[i].info_0;
+			if(!srv_io_share_info0_str("", &info0[i].info_0_str, ps, depth))
+				return False;
+		}
+
+		break;
+	}
+
+	case 1:
+	{
+		SRV_SHARE_INFO_1 *info1 = ctr->share.info1;
+		int num_entries = ctr->num_entries;
+		int i;
+
+		if (UNMARSHALLING(ps) && num_entries) {
+			if (!(info1 = PRS_ALLOC_MEM(ps, SRV_SHARE_INFO_1, num_entries)))
+				return False;
+			ctr->share.info1 = info1;
+		}
+
+		for (i = 0; i < num_entries; i++) {
+			if(!srv_io_share_info1("", &info1[i].info_1, ps, depth))
+				return False;
+		}
+
+		for (i = 0; i < num_entries; i++) {
+			info1[i].info_1_str.ptrs = &info1[i].info_1;
+			if(!srv_io_share_info1_str("", &info1[i].info_1_str, ps, depth))
+				return False;
+		}
+
+		break;
+	}
+
+	case 2:
+	{
+		SRV_SHARE_INFO_2 *info2 = ctr->share.info2;
+		int num_entries = ctr->num_entries;
+		int i;
+
+		if (UNMARSHALLING(ps) && num_entries) {
+			if (!(info2 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_2,num_entries)))
+				return False;
+			ctr->share.info2 = info2;
+		}
+
+		for (i = 0; i < num_entries; i++) {
+			if(!srv_io_share_info2("", &info2[i].info_2, ps, depth))
+				return False;
+		}
+
+		for (i = 0; i < num_entries; i++) {
+			if(!srv_io_share_info2_str("", &info2[i].info_2, &info2[i].info_2_str, ps, depth))
+				return False;
+		}
+
+		break;
+	}
+
+	case 501:
+	{
+		SRV_SHARE_INFO_501 *info501 = ctr->share.info501;
+		int num_entries = ctr->num_entries;
+		int i;
+
+		if (UNMARSHALLING(ps) && num_entries) {
+			if (!(info501 = PRS_ALLOC_MEM(ps, SRV_SHARE_INFO_501, num_entries)))
+				return False;
+			ctr->share.info501 = info501;
+		}
+
+		for (i = 0; i < num_entries; i++) {
+			if (!srv_io_share_info501("", &info501[i].info_501, ps, depth))
+				return False;
+		}
+
+		for (i = 0; i < num_entries; i++) {
+			if (!srv_io_share_info501_str("", &info501[i].info_501_str, ps, depth))
+				return False;
+		}
+
+		break;
+	}
+
+	case 502:
+	{
+		SRV_SHARE_INFO_502 *info502 = ctr->share.info502;
+		int num_entries = ctr->num_entries;
+		int i;
+
+		if (UNMARSHALLING(ps) && num_entries) {
+			if (!(info502 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_502,num_entries)))
+				return False;
+			ctr->share.info502 = info502;
+		}
+
+		for (i = 0; i < num_entries; i++) {
+			if(!srv_io_share_info502("", &info502[i].info_502, ps, depth))
+				return False;
+	}
+		
+		for (i = 0; i < num_entries; i++) {
+			info502[i].info_502_str.ptrs = &info502[i].info_502;
+			if(!srv_io_share_info502_str("", &info502[i].info_502_str, ps, depth))
+				return False;
+		}
+
+		break;
+	}
+
+	case 1004:
+	{
+		SRV_SHARE_INFO_1004 *info1004 = ctr->share.info1004;
+		int num_entries = ctr->num_entries;
+		int i;
+
+		if (UNMARSHALLING(ps) && num_entries) {
+			if (!(info1004 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1004,num_entries)))
+				return False;
+			ctr->share.info1004 = info1004;
+		}
+
+		for (i = 0; i < num_entries; i++) {
+			if(!srv_io_share_info1004("", &info1004[i].info_1004, ps, depth))
+				return False;
+		}
+
+		for (i = 0; i < num_entries; i++) {
+			info1004[i].info_1004_str.ptrs = &info1004[i].info_1004;
+			if(!srv_io_share_info1004_str("", &info1004[i].info_1004_str, ps, depth))
+				return False;
+		}
+
+		break;
+	}
+
+	case 1005:
+	{
+		SRV_SHARE_INFO_1005 *info1005 = ctr->share.info1005;
+		int num_entries = ctr->num_entries;
+		int i;
+
+		if (UNMARSHALLING(ps) && num_entries) {
+			if (!(info1005 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1005,num_entries)))
+				return False;
+			ctr->share.info1005 = info1005;
+		}
+
+		for (i = 0; i < num_entries; i++) {
+			if(!srv_io_share_info1005("", &info1005[i], ps, depth))
+				return False;
+		}
+
+		break;
+	}
+
+	case 1006:
+	{
+		SRV_SHARE_INFO_1006 *info1006 = ctr->share.info1006;
+		int num_entries = ctr->num_entries;
+		int i;
+
+		if (UNMARSHALLING(ps) && num_entries) {
+			if (!(info1006 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1006,num_entries)))
+				return False;
+			ctr->share.info1006 = info1006;
+		}
+
+		for (i = 0; i < num_entries; i++) {
+			if(!srv_io_share_info1006("", &info1006[i], ps, depth))
+				return False;
+		}
+
+		break;
+	}
+
+	case 1007:
+	{
+		SRV_SHARE_INFO_1007 *info1007 = ctr->share.info1007;
+		int num_entries = ctr->num_entries;
+		int i;
+
+		if (UNMARSHALLING(ps) && num_entries) {
+			if (!(info1007 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1007,num_entries)))
+				return False;
+			ctr->share.info1007 = info1007;
+		}
+
+		for (i = 0; i < num_entries; i++) {
+			if(!srv_io_share_info1007("", &info1007[i].info_1007, ps, depth))
+				return False;
+		}
+
+		for (i = 0; i < num_entries; i++) {
+			info1007[i].info_1007_str.ptrs = &info1007[i].info_1007;
+			if(!srv_io_share_info1007_str("", &info1007[i].info_1007_str, ps, depth))
+				return False;
+		}
+
+		break;
+	}
+
+	case 1501:
+	{
+		SRV_SHARE_INFO_1501 *info1501 = ctr->share.info1501;
+		int num_entries = ctr->num_entries;
+		int i;
+
+		if (UNMARSHALLING(ps) && num_entries) {
+			if (!(info1501 = PRS_ALLOC_MEM(ps,SRV_SHARE_INFO_1501,num_entries)))
+				return False;
+			ctr->share.info1501 = info1501;
+		}
+
+		for (i = 0; i < num_entries; i++) {
+			if(!srv_io_share_info1501("", &info1501[i], ps, depth))
+				return False;
+		}
+
+		break;
+	}
+
+	default:
+		DEBUG(5,("%s no share info at switch_value %d\n",
+			 tab_depth(depth), ctr->switch_value));
+		break;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a SRV_Q_NET_SHARE_ENUM structure.
+********************************************************************/
+
+void init_srv_q_net_share_enum(SRV_Q_NET_SHARE_ENUM *q_n, 
+				const char *srv_name, uint32 info_level,
+				uint32 preferred_len, ENUM_HND *hnd)
+{
+
+	DEBUG(5,("init_q_net_share_enum\n"));
+
+	init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name);
+
+	q_n->ctr.info_level = q_n->ctr.switch_value = info_level;
+	q_n->ctr.ptr_share_info = 1;
+	q_n->ctr.num_entries  = 0;
+	q_n->ctr.ptr_entries  = 0;
+	q_n->ctr.num_entries2 = 0;
+	q_n->preferred_len = preferred_len;
+
+	memcpy(&q_n->enum_hnd, hnd, sizeof(*hnd));
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_q_net_share_enum(const char *desc, SRV_Q_NET_SHARE_ENUM *q_n, prs_struct *ps, int depth)
+{
+	if (q_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_q_net_share_enum");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
+		return False;
+	if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
+		return False;
+
+	if(!srv_io_srv_share_ctr("share_ctr", &q_n->ctr, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("preferred_len", ps, depth, &q_n->preferred_len))
+		return False;
+
+	if(!smb_io_enum_hnd("enum_hnd", &q_n->enum_hnd, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_r_net_share_enum(const char *desc, SRV_R_NET_SHARE_ENUM *r_n, prs_struct *ps, int depth)
+{
+	if (r_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_r_net_share_enum");
+	depth++;
+
+	if(!srv_io_srv_share_ctr("share_ctr", &r_n->ctr, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("total_entries", ps, depth, &r_n->total_entries))
+		return False;
+
+	if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_n->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ initialises a structure.
+********************************************************************/
+
+BOOL init_srv_q_net_share_get_info(SRV_Q_NET_SHARE_GET_INFO *q_n, const char *srv_name, const char *share_name, uint32 info_level)
+{
+
+	uint32 ptr_share_name;
+
+	DEBUG(5,("init_srv_q_net_share_get_info\n"));
+
+	init_buf_unistr2(&q_n->uni_srv_name,   &q_n->ptr_srv_name, srv_name);
+	init_buf_unistr2(&q_n->uni_share_name, &ptr_share_name,    share_name);
+
+	q_n->info_level = info_level;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_q_net_share_get_info(const char *desc, SRV_Q_NET_SHARE_GET_INFO *q_n, prs_struct *ps, int depth)
+{
+	if (q_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_q_net_share_get_info");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
+		return False;
+	if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
+		return False;
+
+	if(!smb_io_unistr2("", &q_n->uni_share_name, True, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("info_level", ps, depth, &q_n->info_level))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_srv_share_info(const char *desc, prs_struct *ps, int depth, SRV_SHARE_INFO *r_n)
+{
+	if (r_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_srv_share_info");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("switch_value ", ps, depth, &r_n->switch_value ))
+		return False;
+
+	if(!prs_uint32("ptr_share_ctr", ps, depth, &r_n->ptr_share_ctr))
+		return False;
+
+	if (r_n->ptr_share_ctr != 0) {
+		switch (r_n->switch_value) {
+		case 0:
+			if(!srv_io_share_info0("", &r_n->share.info0.info_0, ps, depth))
+				return False;
+
+			/* allow access to pointers in the str part. */
+			r_n->share.info0.info_0_str.ptrs = &r_n->share.info0.info_0;
+
+			if(!srv_io_share_info0_str("", &r_n->share.info0.info_0_str, ps, depth))
+				return False;
+
+			break;
+		case 1:
+			if(!srv_io_share_info1("", &r_n->share.info1.info_1, ps, depth))
+				return False;
+
+			/* allow access to pointers in the str part. */
+			r_n->share.info1.info_1_str.ptrs = &r_n->share.info1.info_1;
+
+			if(!srv_io_share_info1_str("", &r_n->share.info1.info_1_str, ps, depth))
+				return False;
+
+			break;
+		case 2:
+			if(!srv_io_share_info2("", &r_n->share.info2.info_2, ps, depth))
+				return False;
+
+			if(!srv_io_share_info2_str("", &r_n->share.info2.info_2, &r_n->share.info2.info_2_str, ps, depth))
+				return False;
+
+			break;
+		case 501:
+			if (!srv_io_share_info501("", &r_n->share.info501.info_501, ps, depth))
+				return False;
+			if (!srv_io_share_info501_str("", &r_n->share.info501.info_501_str, ps, depth))
+				return False;
+			break;
+
+		case 502:
+			if(!srv_io_share_info502("", &r_n->share.info502.info_502, ps, depth))
+				return False;
+
+			/* allow access to pointers in the str part. */
+			r_n->share.info502.info_502_str.ptrs = &r_n->share.info502.info_502;
+
+			if(!srv_io_share_info502_str("", &r_n->share.info502.info_502_str, ps, depth))
+				return False;
+			break;
+		case 1004:
+			if(!srv_io_share_info1004("", &r_n->share.info1004.info_1004, ps, depth))
+				return False;
+
+			/* allow access to pointers in the str part. */
+			r_n->share.info1004.info_1004_str.ptrs = &r_n->share.info1004.info_1004;
+
+			if(!srv_io_share_info1004_str("", &r_n->share.info1004.info_1004_str, ps, depth))
+				return False;
+			break;
+		case 1005:
+			if(!srv_io_share_info1005("", &r_n->share.info1005, ps, depth))
+				return False;  		
+			break;
+		case 1006:
+			if(!srv_io_share_info1006("", &r_n->share.info1006, ps, depth))
+				return False;  		
+			break;
+		case 1007:
+			if(!srv_io_share_info1007("", &r_n->share.info1007.info_1007, ps, depth))
+				return False;
+
+			/* allow access to pointers in the str part. */
+			r_n->share.info1007.info_1007_str.ptrs = &r_n->share.info1007.info_1007;
+
+			if(!srv_io_share_info1007_str("", &r_n->share.info1007.info_1007_str, ps, depth))
+				return False;
+			break;
+		case 1501:
+			if (!srv_io_share_info1501("", &r_n->share.info1501, ps, depth))
+				return False;
+		default:
+		        DEBUG(5,("%s no share info at switch_value %d\n",
+			         tab_depth(depth), r_n->switch_value));
+			break;
+		}
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_r_net_share_get_info(const char *desc, SRV_R_NET_SHARE_GET_INFO *r_n, prs_struct *ps, int depth)
+{
+	if (r_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_r_net_share_get_info");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!srv_io_srv_share_info("info  ", ps, depth, &r_n->info))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_n->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ intialises a structure.
+********************************************************************/
+
+BOOL init_srv_q_net_share_set_info(SRV_Q_NET_SHARE_SET_INFO *q_n, 
+				   const char *srv_name, 
+				   const char *share_name, 
+				   uint32 info_level, 
+				   const SRV_SHARE_INFO *info) 
+{
+
+	uint32 ptr_share_name;
+
+	DEBUG(5,("init_srv_q_net_share_set_info\n"));
+
+	init_buf_unistr2(&q_n->uni_srv_name,   &q_n->ptr_srv_name, srv_name);
+	init_buf_unistr2(&q_n->uni_share_name, &ptr_share_name,    share_name);
+
+	q_n->info_level = info_level;
+  
+	q_n->info = *info;
+
+	q_n->ptr_parm_error = 1;
+	q_n->parm_error     = 0;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_q_net_share_set_info(const char *desc, SRV_Q_NET_SHARE_SET_INFO *q_n, prs_struct *ps, int depth)
+{
+	if (q_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_q_net_share_set_info");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
+		return False;
+	if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
+		return False;
+
+	if(!smb_io_unistr2("", &q_n->uni_share_name, True, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("info_level", ps, depth, &q_n->info_level))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!srv_io_srv_share_info("info  ", ps, depth, &q_n->info))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("ptr_parm_error", ps, depth, &q_n->ptr_parm_error))
+		return False;
+	if(q_n->ptr_parm_error!=0) {
+		if(!prs_uint32("parm_error", ps, depth, &q_n->parm_error))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_r_net_share_set_info(const char *desc, SRV_R_NET_SHARE_SET_INFO *r_n, prs_struct *ps, int depth)
+{
+	if (r_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_r_net_share_set_info");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_parm_error  ", ps, depth, &r_n->ptr_parm_error))
+		return False;
+
+	if(r_n->ptr_parm_error) {
+
+		if(!prs_uint32("parm_error  ", ps, depth, &r_n->parm_error))
+			return False;
+	}
+
+	if(!prs_werror("status", ps, depth, &r_n->status))
+		return False;
+
+	return True;
+}	
+
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_q_net_share_add(const char *desc, SRV_Q_NET_SHARE_ADD *q_n, prs_struct *ps, int depth)
+{
+	if (q_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_q_net_share_add");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
+		return False;
+	if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("info_level", ps, depth, &q_n->info_level))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!srv_io_srv_share_info("info  ", ps, depth, &q_n->info))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_err_index", ps, depth, &q_n->ptr_err_index))
+		return False;
+	if (q_n->ptr_err_index)
+		if (!prs_uint32("err_index", ps, depth, &q_n->err_index))
+			return False;
+
+	return True;
+}
+
+void init_srv_q_net_share_add(SRV_Q_NET_SHARE_ADD *q, const char *srvname,
+			      const char *netname, uint32 type, const char *remark, 
+			      uint32 perms, uint32 max_uses, uint32 num_uses,
+			      const char *path, const char *passwd, 
+			      int level, SEC_DESC *sd)
+{
+	switch(level) {
+	case 502: {
+		size_t sd_size = sec_desc_size(sd);
+		q->ptr_srv_name = 1;
+		init_unistr2(&q->uni_srv_name, srvname, UNI_STR_TERMINATE);
+		q->info.switch_value = q->info_level = level;
+		q->info.ptr_share_ctr = 1;
+		init_srv_share_info502(&q->info.share.info502.info_502, netname, type,
+				     remark, perms, max_uses, num_uses, path, passwd, sd, sd_size);
+		init_srv_share_info502_str(&q->info.share.info502.info_502_str, netname,
+					 remark, path, passwd, sd, sd_size);
+		q->ptr_err_index = 1;
+		q->err_index = 0;
+		}
+		break;
+	case 2:
+	default:
+		q->ptr_srv_name = 1;
+		init_unistr2(&q->uni_srv_name, srvname, UNI_STR_TERMINATE);
+		q->info.switch_value = q->info_level = level;
+		q->info.ptr_share_ctr = 1;
+		init_srv_share_info2(&q->info.share.info2.info_2, netname, type,
+				     remark, perms, max_uses, num_uses, path, passwd);
+		init_srv_share_info2_str(&q->info.share.info2.info_2_str, netname,
+					 remark, path, passwd);
+		q->ptr_err_index = 1;
+		q->err_index = 0;
+		break;
+	}
+}
+
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_r_net_share_add(const char *desc, SRV_R_NET_SHARE_ADD *r_n, prs_struct *ps, int depth)
+{
+	if (r_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_r_net_share_add");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_parm_error", ps, depth, &r_n->ptr_parm_error))
+		return False;
+
+	if(r_n->ptr_parm_error) {
+	  
+		if(!prs_uint32("parm_error", ps, depth, &r_n->parm_error))
+			return False;
+	}
+
+	if(!prs_werror("status", ps, depth, &r_n->status))
+		return False;
+
+	return True;
+}	
+
+/*******************************************************************
+ initialises a structure.
+********************************************************************/
+
+void init_srv_q_net_share_del(SRV_Q_NET_SHARE_DEL *del, const char *srvname,
+			      const char *sharename)
+{
+	del->ptr_srv_name = 1;
+	init_unistr2(&del->uni_srv_name, srvname, UNI_STR_TERMINATE);
+	init_unistr2(&del->uni_share_name, sharename, UNI_STR_TERMINATE);
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_q_net_share_del(const char *desc, SRV_Q_NET_SHARE_DEL *q_n, prs_struct *ps, int depth)
+{
+	if (q_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_q_net_share_del");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
+		return False;
+	if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
+		return False;
+
+	if(!smb_io_unistr2("", &q_n->uni_share_name, True, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("reserved", ps, depth, &q_n->reserved))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_r_net_share_del(const char *desc, SRV_R_NET_SHARE_DEL *q_n, prs_struct *ps, int depth)
+{
+	if (q_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_r_net_share_del");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &q_n->status))
+		return False;
+
+	return True;
+}	
+
+/*******************************************************************
+ Inits a SESS_INFO_0_STR structure
+********************************************************************/
+
+void init_srv_sess_info0( SESS_INFO_0 *ss0, const char *name )
+{
+	ZERO_STRUCTP( ss0 );
+
+	if ( name ) {
+		if ( (ss0->sharename = TALLOC_P( get_talloc_ctx(), UNISTR2 )) == NULL ) {
+			DEBUG(0,("init_srv_sess_info0: talloc failed!\n"));
+			return;
+		}
+		init_unistr2( ss0->sharename, name, UNI_STR_TERMINATE );
+	}
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_srv_sess_info_0(const char *desc, SRV_SESS_INFO_0 *ss0, prs_struct *ps, int depth)
+{
+	if (ss0 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_srv_sess_info_0");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("num_entries_read", ps, depth, &ss0->num_entries_read))
+		return False;
+	if(!prs_uint32("ptr_sess_info", ps, depth, &ss0->ptr_sess_info))
+		return False;
+
+	if (ss0->ptr_sess_info != 0) {
+		uint32 i;
+		uint32 num_entries = ss0->num_entries_read;
+
+		if (num_entries > MAX_SESS_ENTRIES) {
+			num_entries = MAX_SESS_ENTRIES; /* report this! */
+		}
+
+		if(!prs_uint32("num_entries_read2", ps, depth, &ss0->num_entries_read2))
+			return False;
+
+		SMB_ASSERT_ARRAY(ss0->info_0, num_entries);
+
+		/* first the pointers */
+		for (i = 0; i < num_entries; i++) {
+			if ( !prs_io_unistr2_p("", ps, depth, &ss0->info_0[i].sharename ) )
+				return False;
+		}
+
+		/* now the strings */
+		for (i = 0; i < num_entries; i++) {
+			if ( !prs_io_unistr2("sharename", ps, depth, ss0->info_0[i].sharename ))
+				return False;
+		}
+
+		if(!prs_align(ps))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a SESS_INFO_1 structure
+********************************************************************/
+
+void init_srv_sess_info1( SESS_INFO_1 *ss1, const char *name, const char *user,
+                          uint32 num_opens, uint32 open_time, uint32 idle_time,
+                          uint32 user_flags)
+{
+	DEBUG(5,("init_srv_sess_info1: %s\n", name));
+
+	ZERO_STRUCTP( ss1 );
+
+	if ( name ) {
+		if ( (ss1->sharename = TALLOC_P( get_talloc_ctx(), UNISTR2 )) == NULL ) {
+			DEBUG(0,("init_srv_sess_info0: talloc failed!\n"));
+			return;
+		}
+		init_unistr2( ss1->sharename, name, UNI_STR_TERMINATE );
+	}
+
+	if ( user ) {
+		if ( (ss1->username = TALLOC_P( get_talloc_ctx(), UNISTR2 )) == NULL ) {
+			DEBUG(0,("init_srv_sess_info0: talloc failed!\n"));
+			return;
+		}
+		init_unistr2( ss1->username, user, UNI_STR_TERMINATE );
+	}
+
+	ss1->num_opens  = num_opens;
+	ss1->open_time  = open_time;
+	ss1->idle_time  = idle_time;
+	ss1->user_flags = user_flags;
+}
+
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_srv_sess_info_1(const char *desc, SRV_SESS_INFO_1 *ss1, prs_struct *ps, int depth)
+{
+	if (ss1 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_srv_sess_info_1");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("num_entries_read", ps, depth, &ss1->num_entries_read))
+		return False;
+	if(!prs_uint32("ptr_sess_info", ps, depth, &ss1->ptr_sess_info))
+		return False;
+
+	if (ss1->ptr_sess_info != 0) {
+		uint32 i;
+		uint32 num_entries = ss1->num_entries_read;
+
+		if (num_entries > MAX_SESS_ENTRIES) {
+			num_entries = MAX_SESS_ENTRIES; /* report this! */
+		}
+
+		if(!prs_uint32("num_entries_read2", ps, depth, &ss1->num_entries_read2))
+			return False;
+
+		SMB_ASSERT_ARRAY(ss1->info_1, num_entries);
+
+		/* first the pointers and flags */
+
+		for (i = 0; i < num_entries; i++) {
+
+			if ( !prs_io_unistr2_p("", ps, depth, &ss1->info_1[i].sharename ))
+				return False;
+			if ( !prs_io_unistr2_p("", ps, depth, &ss1->info_1[i].username ))
+				return False;
+
+			if(!prs_uint32("num_opens ", ps, depth, &ss1->info_1[i].num_opens))
+				return False;
+			if(!prs_uint32("open_time ", ps, depth, &ss1->info_1[i].open_time))
+				return False;
+			if(!prs_uint32("idle_time ", ps, depth, &ss1->info_1[i].idle_time))
+				return False;
+			if(!prs_uint32("user_flags", ps, depth, &ss1->info_1[i].user_flags))
+				return False;
+		}
+
+		/* now the strings */
+
+		for (i = 0; i < num_entries; i++) {
+			if ( !prs_io_unistr2("", ps, depth, ss1->info_1[i].sharename ))
+				return False;
+			if ( !prs_io_unistr2("", ps, depth, ss1->info_1[i].username ))
+				return False;
+		}
+
+		if(!prs_align(ps))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_srv_sess_ctr(const char *desc, SRV_SESS_INFO_CTR **pp_ctr, prs_struct *ps, int depth)
+{
+	SRV_SESS_INFO_CTR *ctr = *pp_ctr;
+
+	prs_debug(ps, depth, desc, "srv_io_srv_sess_ctr");
+	depth++;
+
+	if(UNMARSHALLING(ps)) {
+		ctr = *pp_ctr = PRS_ALLOC_MEM(ps, SRV_SESS_INFO_CTR, 1);
+		if (ctr == NULL)
+			return False;
+	}
+
+	if (ctr == NULL)
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("switch_value", ps, depth, &ctr->switch_value))
+		return False;
+	if(!prs_uint32("ptr_sess_ctr", ps, depth, &ctr->ptr_sess_ctr))
+		return False;
+
+	if (ctr->ptr_sess_ctr != 0) {
+		switch (ctr->switch_value) {
+		case 0:
+			if(!srv_io_srv_sess_info_0("", &ctr->sess.info0, ps, depth))
+				return False;
+			break;
+		case 1:
+			if(!srv_io_srv_sess_info_1("", &ctr->sess.info1, ps, depth))
+				return False;
+			break;
+		default:
+			DEBUG(5,("%s no session info at switch_value %d\n",
+			         tab_depth(depth), ctr->switch_value));
+			break;
+		}
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_q_net_sess_enum(const char *desc, SRV_Q_NET_SESS_ENUM *q_u, prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_q_net_sess_enum");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_pointer("servername", ps, depth, (void**)&q_u->servername, sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_pointer("qualifier", ps, depth, (void**)&q_u->qualifier, sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_pointer("username", ps, depth, (void**)&q_u->username, sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("sess_level", ps, depth, &q_u->sess_level))
+		return False;
+	
+	if (q_u->sess_level != (uint32)-1) {
+		if(!srv_io_srv_sess_ctr("sess_ctr", &q_u->ctr, ps, depth))
+			return False;
+	}
+
+	if(!prs_uint32("preferred_len", ps, depth, &q_u->preferred_len))
+		return False;
+
+	if(!smb_io_enum_hnd("enum_hnd", &q_u->enum_hnd, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_r_net_sess_enum(const char *desc, SRV_R_NET_SESS_ENUM *r_n, prs_struct *ps, int depth)
+{
+	if (r_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_r_net_sess_enum");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("sess_level", ps, depth, &r_n->sess_level))
+		return False;
+
+	if (r_n->sess_level != (uint32)-1) {
+		if(!srv_io_srv_sess_ctr("sess_ctr", &r_n->ctr, ps, depth))
+			return False;
+	}
+
+	if(!prs_uint32("total_entries", ps, depth, &r_n->total_entries))
+		return False;
+	if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth))
+		return False;
+	if(!prs_werror("status", ps, depth, &r_n->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a SRV_Q_NET_SESS_DEL structure.
+********************************************************************/
+
+void init_srv_q_net_sess_del(SRV_Q_NET_SESS_DEL *q_n, const char *srv_name,
+			      const char *cli_name, const char *user_name)
+{
+	DEBUG(5,("init_q_net_sess_enum\n"));
+
+	init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name);
+	init_buf_unistr2(&q_n->uni_cli_name, &q_n->ptr_cli_name, cli_name);
+	init_buf_unistr2(&q_n->uni_user_name, &q_n->ptr_user_name, user_name);
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_q_net_sess_del(const char *desc, SRV_Q_NET_SESS_DEL *q_n, prs_struct *ps, int depth)
+{
+	if (q_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_q_net_sess_del");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
+		return False;
+	if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_cli_name", ps, depth, &q_n->ptr_cli_name))
+		return False;
+	if(!smb_io_unistr2("", &q_n->uni_cli_name, q_n->ptr_cli_name, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+	if(!prs_uint32("ptr_user_name", ps, depth, &q_n->ptr_user_name))
+		return False;
+	if(!smb_io_unistr2("", &q_n->uni_user_name, q_n->ptr_user_name, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_r_net_sess_del(const char *desc, SRV_R_NET_SESS_DEL *r_n, prs_struct *ps, int depth)
+{
+	if (r_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_r_net_sess_del");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_n->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a CONN_INFO_0 structure
+********************************************************************/
+
+void init_srv_conn_info0(CONN_INFO_0 *ss0, uint32 id)
+{
+	DEBUG(5,("init_srv_conn_info0\n"));
+
+	ss0->id = id;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_conn_info0(const char *desc, CONN_INFO_0 *ss0, prs_struct *ps, int depth)
+{
+	if (ss0 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_conn_info0");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("id", ps, depth, &ss0->id))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_srv_conn_info_0(const char *desc, SRV_CONN_INFO_0 *ss0, prs_struct *ps, int depth)
+{
+	if (ss0 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_srv_conn_info_0");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("num_entries_read", ps, depth, &ss0->num_entries_read))
+		return False;
+	if(!prs_uint32("ptr_conn_info", ps, depth, &ss0->ptr_conn_info))
+		return False;
+
+	if (ss0->ptr_conn_info != 0) {
+		int i;
+		int num_entries = ss0->num_entries_read;
+
+		if (num_entries > MAX_CONN_ENTRIES) {
+			num_entries = MAX_CONN_ENTRIES; /* report this! */
+		}
+
+		if(!prs_uint32("num_entries_read2", ps, depth, &ss0->num_entries_read2))
+			return False;
+
+		for (i = 0; i < num_entries; i++) {
+			if(!srv_io_conn_info0("", &ss0->info_0[i], ps, depth))
+				return False;
+		}
+
+		if(!prs_align(ps))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a CONN_INFO_1_STR structure
+********************************************************************/
+
+void init_srv_conn_info1_str(CONN_INFO_1_STR *ss1, const char *usr_name, const char *net_name)
+{
+	DEBUG(5,("init_srv_conn_info1_str\n"));
+
+	init_unistr2(&ss1->uni_usr_name, usr_name, UNI_STR_TERMINATE);
+	init_unistr2(&ss1->uni_net_name, net_name, UNI_STR_TERMINATE);
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_conn_info1_str(const char *desc, CONN_INFO_1_STR *ss1, prs_struct *ps, int depth)
+{
+	if (ss1 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_conn_info1_str");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_unistr2("", &ss1->uni_usr_name, True, ps, depth))
+		return False;
+	if(!smb_io_unistr2("", &ss1->uni_net_name, True, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a CONN_INFO_1 structure
+********************************************************************/
+
+void init_srv_conn_info1(CONN_INFO_1 *ss1, 
+				uint32 id, uint32 type,
+				uint32 num_opens, uint32 num_users, uint32 open_time,
+				const char *usr_name, const char *net_name)
+{
+	DEBUG(5,("init_srv_conn_info1: %s %s\n", usr_name, net_name));
+
+	ss1->id        = id       ;
+	ss1->type      = type     ;
+	ss1->num_opens = num_opens ;
+	ss1->num_users = num_users;
+	ss1->open_time = open_time;
+
+	ss1->ptr_usr_name = (usr_name != NULL) ? 1 : 0;
+	ss1->ptr_net_name = (net_name != NULL) ? 1 : 0;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_conn_info1(const char *desc, CONN_INFO_1 *ss1, prs_struct *ps, int depth)
+{
+	if (ss1 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_conn_info1");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("id          ", ps, depth, &ss1->id))
+		return False;
+	if(!prs_uint32("type        ", ps, depth, &ss1->type))
+		return False;
+	if(!prs_uint32("num_opens   ", ps, depth, &ss1->num_opens))
+		return False;
+	if(!prs_uint32("num_users   ", ps, depth, &ss1->num_users))
+		return False;
+	if(!prs_uint32("open_time   ", ps, depth, &ss1->open_time))
+		return False;
+
+	if(!prs_uint32("ptr_usr_name", ps, depth, &ss1->ptr_usr_name))
+		return False;
+	if(!prs_uint32("ptr_net_name", ps, depth, &ss1->ptr_net_name))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_srv_conn_info_1(const char *desc, SRV_CONN_INFO_1 *ss1, prs_struct *ps, int depth)
+{
+	if (ss1 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_srv_conn_info_1");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("num_entries_read", ps, depth, &ss1->num_entries_read))
+		return False;
+	if(!prs_uint32("ptr_conn_info", ps, depth, &ss1->ptr_conn_info))
+		return False;
+
+	if (ss1->ptr_conn_info != 0) {
+		int i;
+		int num_entries = ss1->num_entries_read;
+
+		if (num_entries > MAX_CONN_ENTRIES) {
+			num_entries = MAX_CONN_ENTRIES; /* report this! */
+		}
+
+		if(!prs_uint32("num_entries_read2", ps, depth, &ss1->num_entries_read2))
+			return False;
+
+		for (i = 0; i < num_entries; i++) {
+			if(!srv_io_conn_info1("", &ss1->info_1[i], ps, depth))
+				return False;
+		}
+
+		for (i = 0; i < num_entries; i++) {
+			if(!srv_io_conn_info1_str("", &ss1->info_1_str[i], ps, depth))
+				return False;
+		}
+
+		if(!prs_align(ps))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_srv_conn_ctr(const char *desc, SRV_CONN_INFO_CTR **pp_ctr, prs_struct *ps, int depth)
+{
+	SRV_CONN_INFO_CTR *ctr = *pp_ctr;
+
+	prs_debug(ps, depth, desc, "srv_io_srv_conn_ctr");
+	depth++;
+
+	if (UNMARSHALLING(ps)) {
+		ctr = *pp_ctr = PRS_ALLOC_MEM(ps, SRV_CONN_INFO_CTR, 1);
+		if (ctr == NULL)
+			return False;
+	}
+		
+	if (ctr == NULL)
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("switch_value", ps, depth, &ctr->switch_value))
+		return False;
+	if(!prs_uint32("ptr_conn_ctr", ps, depth, &ctr->ptr_conn_ctr))
+		return False;
+
+	if (ctr->ptr_conn_ctr != 0) {
+		switch (ctr->switch_value) {
+		case 0:
+			if(!srv_io_srv_conn_info_0("", &ctr->conn.info0, ps, depth))
+				return False;
+			break;
+		case 1:
+			if(!srv_io_srv_conn_info_1("", &ctr->conn.info1, ps, depth))
+				return False;
+			break;
+		default:
+			DEBUG(5,("%s no connection info at switch_value %d\n",
+			         tab_depth(depth), ctr->switch_value));
+			break;
+		}
+	}
+
+	return True;
+}
+
+/*******************************************************************
+  Reads or writes a structure.
+********************************************************************/
+
+void init_srv_q_net_conn_enum(SRV_Q_NET_CONN_ENUM *q_n, 
+				const char *srv_name, const char *qual_name,
+				uint32 conn_level, SRV_CONN_INFO_CTR *ctr,
+				uint32 preferred_len,
+				ENUM_HND *hnd)
+{
+	DEBUG(5,("init_q_net_conn_enum\n"));
+
+	q_n->ctr = ctr;
+
+	init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name );
+	init_buf_unistr2(&q_n->uni_qual_name, &q_n->ptr_qual_name, qual_name);
+
+	q_n->conn_level    = conn_level;
+	q_n->preferred_len = preferred_len;
+
+	memcpy(&q_n->enum_hnd, hnd, sizeof(*hnd));
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_q_net_conn_enum(const char *desc, SRV_Q_NET_CONN_ENUM *q_n, prs_struct *ps, int depth)
+{
+	if (q_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_q_net_conn_enum");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_srv_name ", ps, depth, &q_n->ptr_srv_name))
+		return False;
+	if(!smb_io_unistr2("", &q_n->uni_srv_name, q_n->ptr_srv_name, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_qual_name", ps, depth, &q_n->ptr_qual_name))
+		return False;
+	if(!smb_io_unistr2("", &q_n->uni_qual_name, q_n->ptr_qual_name, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("conn_level", ps, depth, &q_n->conn_level))
+		return False;
+	
+	if (q_n->conn_level != (uint32)-1) {
+		if(!srv_io_srv_conn_ctr("conn_ctr", &q_n->ctr, ps, depth))
+			return False;
+	}
+
+	if(!prs_uint32("preferred_len", ps, depth, &q_n->preferred_len))
+		return False;
+
+	if(!smb_io_enum_hnd("enum_hnd", &q_n->enum_hnd, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_r_net_conn_enum(const char *desc,  SRV_R_NET_CONN_ENUM *r_n, prs_struct *ps, int depth)
+{
+	if (r_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_r_net_conn_enum");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("conn_level", ps, depth, &r_n->conn_level))
+		return False;
+
+	if (r_n->conn_level != (uint32)-1) {
+		if(!srv_io_srv_conn_ctr("conn_ctr", &r_n->ctr, ps, depth))
+			return False;
+	}
+
+	if(!prs_uint32("total_entries", ps, depth, &r_n->total_entries))
+		return False;
+	if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth))
+		return False;
+	if(!prs_werror("status", ps, depth, &r_n->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_file_info3_str(const char *desc, FILE_INFO_3 *sh1, prs_struct *ps, int depth)
+{
+	if (sh1 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_file_info3_str");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if ( sh1->path ) {
+		if(!smb_io_unistr2("", sh1->path, True, ps, depth))
+			return False;
+	}
+
+	if ( sh1->user ) {
+		if(!smb_io_unistr2("", sh1->user, True, ps, depth))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a FILE_INFO_3 structure
+********************************************************************/
+
+void init_srv_file_info3( FILE_INFO_3 *fl3, uint32 id, uint32 perms, uint32 num_locks,
+                          const char *user_name, const char *path_name )
+{
+	fl3->id        = id;	
+	fl3->perms     = perms;
+	fl3->num_locks = num_locks;
+
+        if ( path_name ) {
+                if ( (fl3->path = TALLOC_P( get_talloc_ctx(), UNISTR2 )) == NULL )
+                        return;
+                init_unistr2(fl3->path, path_name, UNI_STR_TERMINATE);
+        }
+
+        if ( user_name ) {
+                if ( (fl3->user = TALLOC_P( get_talloc_ctx(), UNISTR2 )) == NULL )
+                        return;
+                init_unistr2(fl3->user, user_name, UNI_STR_TERMINATE);
+        }
+
+	return;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_file_info3(const char *desc, FILE_INFO_3 *fl3, prs_struct *ps, int depth)
+{
+	uint32 uni_p;
+
+	if (fl3 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_file_info3");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("id           ", ps, depth, &fl3->id))
+		return False;
+	if(!prs_uint32("perms        ", ps, depth, &fl3->perms))
+		return False;
+	if(!prs_uint32("num_locks    ", ps, depth, &fl3->num_locks))
+		return False;
+
+	uni_p = fl3->path ? 1 : 0;
+	if(!prs_uint32("ptr", ps, depth, &uni_p))
+		return False;
+	if (UNMARSHALLING(ps)) {
+		if ( (fl3->path = PRS_ALLOC_MEM( ps, UNISTR2, 1)) == NULL ) {
+			return False;
+		}
+	}
+
+	uni_p = fl3->user ? 1 : 0;
+	if(!prs_uint32("ptr", ps, depth, &uni_p))
+		return False;
+	if (UNMARSHALLING(ps)) {
+		if ( (fl3->user = PRS_ALLOC_MEM( ps, UNISTR2, 1)) == NULL ) {
+			return False;
+		}
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+static BOOL srv_io_srv_file_ctr(const char *desc, SRV_FILE_INFO_CTR *ctr, prs_struct *ps, int depth)
+{
+	if (ctr == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_srv_file_ctr");
+	depth++;
+
+	if (UNMARSHALLING(ps)) {
+		ZERO_STRUCTP(ctr);
+	}
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("level", ps, depth, &ctr->level))
+		return False;
+
+	if(!prs_uint32("ptr_file_info", ps, depth, &ctr->ptr_file_info))
+		return False;
+	if(!prs_uint32("num_entries", ps, depth, &ctr->num_entries))
+		return False;
+	if(!prs_uint32("ptr_entries", ps, depth, &ctr->ptr_entries))
+		return False;
+
+	if (ctr->ptr_entries == 0)
+		return True;
+
+	if(!prs_uint32("num_entries2", ps, depth, &ctr->num_entries2))
+		return False;
+
+	switch (ctr->level) {
+	case 3: {
+		FILE_INFO_3 *info3 = ctr->file.info3;
+		int num_entries = ctr->num_entries;
+		int i;
+
+		if (UNMARSHALLING(ps) && num_entries) {
+			if (!(info3 = PRS_ALLOC_MEM(ps, FILE_INFO_3, num_entries)))
+				return False;
+			ctr->file.info3 = info3;
+		}
+
+		for (i = 0; i < num_entries; i++) {
+			if(!srv_io_file_info3("", &ctr->file.info3[i], ps, depth)) 
+				return False;
+		}
+
+		for (i = 0; i < num_entries; i++) {
+			if(!srv_io_file_info3_str("", &ctr->file.info3[i], ps, depth))
+				return False;
+		}
+		break;
+	}
+	default:
+		DEBUG(5,("%s no file info at switch_value %d\n", tab_depth(depth), ctr->level));
+		break;
+	}
+			
+	return True;
+}
+
+/*******************************************************************
+ Inits a SRV_Q_NET_FILE_ENUM structure.
+********************************************************************/
+
+void init_srv_q_net_file_enum(SRV_Q_NET_FILE_ENUM *q_n, 
+			      const char *srv_name, const char *qual_name, 
+			      const char *user_name,
+			      uint32 file_level, SRV_FILE_INFO_CTR *ctr,
+			      uint32 preferred_len,
+			      ENUM_HND *hnd)
+{
+	uint32 ptr;
+
+	if ( srv_name ) {
+		if ( (q_n->servername = TALLOC_P( get_talloc_ctx(), UNISTR2 )) == NULL )
+			return;
+		init_buf_unistr2(q_n->servername, &ptr, srv_name);
+	}
+
+	if ( qual_name ) {
+		if ( (q_n->qualifier = TALLOC_P( get_talloc_ctx(), UNISTR2 )) == NULL )
+			return;
+		init_buf_unistr2(q_n->qualifier,  &ptr, qual_name);
+	}
+
+	if ( user_name ) {
+		if ( (q_n->username = TALLOC_P( get_talloc_ctx(), UNISTR2 )) == NULL )
+			return;
+		init_buf_unistr2(q_n->username,   &ptr, user_name);
+	}
+
+	q_n->level = q_n->ctr.level = file_level;
+
+	q_n->preferred_len = preferred_len;
+	q_n->ctr.ptr_file_info = 1;
+	q_n->ctr.num_entries = 0;
+	q_n->ctr.num_entries2 = 0;
+
+	memcpy(&q_n->enum_hnd, hnd, sizeof(*hnd));
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_q_net_file_enum(const char *desc, SRV_Q_NET_FILE_ENUM *q_u, prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_q_net_file_enum");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_pointer("servername", ps, depth, (void**)&q_u->servername, sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_pointer("qualifier", ps, depth, (void**)&q_u->qualifier, sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_pointer("username", ps, depth, (void**)&q_u->username, sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("level", ps, depth, &q_u->level))
+		return False;
+
+	if (q_u->level != (uint32)-1) {
+		if(!srv_io_srv_file_ctr("file_ctr", &q_u->ctr, ps, depth))
+			return False;
+	}
+
+	if(!prs_uint32("preferred_len", ps, depth, &q_u->preferred_len))
+		return False;
+
+	if(!smb_io_enum_hnd("enum_hnd", &q_u->enum_hnd, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_r_net_file_enum(const char *desc, SRV_R_NET_FILE_ENUM *r_n, prs_struct *ps, int depth)
+{
+	if (r_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_r_net_file_enum");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("level", ps, depth, &r_n->level))
+		return False;
+
+	if (r_n->level != 0) {
+		if(!srv_io_srv_file_ctr("file_ctr", &r_n->ctr, ps, depth))
+			return False;
+	}
+
+	if(!prs_uint32("total_entries", ps, depth, &r_n->total_entries))
+		return False;
+	if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth))
+		return False;
+	if(!prs_werror("status", ps, depth, &r_n->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Initialize a net file close request
+********************************************************************/
+void init_srv_q_net_file_close(SRV_Q_NET_FILE_CLOSE *q_n, const char *server,
+			       uint32 file_id)
+{
+	if ( server ) {
+		if ( (q_n->servername = TALLOC_P( get_talloc_ctx(), UNISTR2 )) == NULL ) {
+			return;
+		}
+		init_unistr2(q_n->servername, server, UNI_STR_TERMINATE);
+	}
+
+	q_n->file_id = file_id;
+}
+
+/*******************************************************************
+ Inits a SRV_INFO_100 structure.
+ ********************************************************************/
+
+void init_srv_info_100(SRV_INFO_100 *sv100, uint32 platform_id, const char *name)
+{
+	DEBUG(5,("init_srv_info_100\n"));
+
+	sv100->platform_id  = platform_id;
+	init_buf_unistr2(&sv100->uni_name, &sv100->ptr_name, name);
+}
+
+/*******************************************************************
+ Reads or writes a SRV_INFO_101 structure.
+ ********************************************************************/
+
+static BOOL srv_io_info_100(const char *desc, SRV_INFO_100 *sv100, prs_struct *ps, int depth)
+{
+	if (sv100 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_info_100");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("platform_id ", ps, depth, &sv100->platform_id))
+		return False;
+	if(!prs_uint32("ptr_name    ", ps, depth, &sv100->ptr_name))
+		return False;
+
+	if(!smb_io_unistr2("uni_name    ", &sv100->uni_name, True, ps, depth))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+ Inits a SRV_INFO_101 structure.
+ ********************************************************************/
+
+void init_srv_info_101(SRV_INFO_101 *sv101, uint32 platform_id, const char *name,
+				uint32 ver_major, uint32 ver_minor,
+				uint32 srv_type, const char *comment)
+{
+	DEBUG(5,("init_srv_info_101\n"));
+
+	sv101->platform_id  = platform_id;
+	init_buf_unistr2(&sv101->uni_name, &sv101->ptr_name, name);
+	sv101->ver_major    = ver_major;
+	sv101->ver_minor    = ver_minor;
+	sv101->srv_type     = srv_type;
+	init_buf_unistr2(&sv101->uni_comment, &sv101->ptr_comment, comment);
+}
+
+/*******************************************************************
+ Reads or writes a SRV_INFO_101 structure.
+ ********************************************************************/
+
+static BOOL srv_io_info_101(const char *desc, SRV_INFO_101 *sv101, prs_struct *ps, int depth)
+{
+	if (sv101 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_info_101");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("platform_id ", ps, depth, &sv101->platform_id))
+		return False;
+	if(!prs_uint32("ptr_name    ", ps, depth, &sv101->ptr_name))
+		return False;
+	if(!prs_uint32("ver_major   ", ps, depth, &sv101->ver_major))
+		return False;
+	if(!prs_uint32("ver_minor   ", ps, depth, &sv101->ver_minor))
+		return False;
+	if(!prs_uint32("srv_type    ", ps, depth, &sv101->srv_type))
+		return False;
+	if(!prs_uint32("ptr_comment ", ps, depth, &sv101->ptr_comment))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_unistr2("uni_name    ", &sv101->uni_name, True, ps, depth))
+		return False;
+	if(!smb_io_unistr2("uni_comment ", &sv101->uni_comment, True, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a SRV_INFO_102 structure.
+ ********************************************************************/
+
+void init_srv_info_102(SRV_INFO_102 *sv102, uint32 platform_id, const char *name,
+				const char *comment, uint32 ver_major, uint32 ver_minor,
+				uint32 srv_type, uint32 users, uint32 disc, uint32 hidden,
+				uint32 announce, uint32 ann_delta, uint32 licenses,
+				const char *usr_path)
+{
+	DEBUG(5,("init_srv_info_102\n"));
+
+	sv102->platform_id  = platform_id;
+	init_buf_unistr2(&sv102->uni_name, &sv102->ptr_name, name);
+	sv102->ver_major    = ver_major;
+	sv102->ver_minor    = ver_minor;
+	sv102->srv_type     = srv_type;
+	init_buf_unistr2(&sv102->uni_comment, &sv102->ptr_comment, comment);
+
+	/* same as 101 up to here */
+
+	sv102->users        = users;
+	sv102->disc         = disc;
+	sv102->hidden       = hidden;
+	sv102->announce     = announce;
+	sv102->ann_delta    = ann_delta;
+	sv102->licenses     = licenses;
+	init_buf_unistr2(&sv102->uni_usr_path, &sv102->ptr_usr_path, usr_path);
+}
+
+
+/*******************************************************************
+ Reads or writes a SRV_INFO_102 structure.
+ ********************************************************************/
+
+static BOOL srv_io_info_102(const char *desc, SRV_INFO_102 *sv102, prs_struct *ps, int depth)
+{
+	if (sv102 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_info102");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("platform_id ", ps, depth, &sv102->platform_id))
+		return False;
+	if(!prs_uint32("ptr_name    ", ps, depth, &sv102->ptr_name))
+		return False;
+	if(!prs_uint32("ver_major   ", ps, depth, &sv102->ver_major))
+		return False;
+	if(!prs_uint32("ver_minor   ", ps, depth, &sv102->ver_minor))
+		return False;
+	if(!prs_uint32("srv_type    ", ps, depth, &sv102->srv_type))
+		return False;
+	if(!prs_uint32("ptr_comment ", ps, depth, &sv102->ptr_comment))
+		return False;
+
+	/* same as 101 up to here */
+
+	if(!prs_uint32("users       ", ps, depth, &sv102->users))
+		return False;
+	if(!prs_uint32("disc        ", ps, depth, &sv102->disc))
+		return False;
+	if(!prs_uint32("hidden      ", ps, depth, &sv102->hidden))
+		return False;
+	if(!prs_uint32("announce    ", ps, depth, &sv102->announce))
+		return False;
+	if(!prs_uint32("ann_delta   ", ps, depth, &sv102->ann_delta))
+		return False;
+	if(!prs_uint32("licenses    ", ps, depth, &sv102->licenses))
+		return False;
+	if(!prs_uint32("ptr_usr_path", ps, depth, &sv102->ptr_usr_path))
+		return False;
+
+	if(!smb_io_unistr2("uni_name    ", &sv102->uni_name, True, ps, depth))
+		return False;
+	if(!prs_align(ps))
+		return False;
+	if(!smb_io_unistr2("uni_comment ", &sv102->uni_comment, True, ps, depth))
+		return False;
+	if(!prs_align(ps))
+		return False;
+	if(!smb_io_unistr2("uni_usr_path", &sv102->uni_usr_path, True, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a SRV_INFO_102 structure.
+ ********************************************************************/
+
+static BOOL srv_io_info_ctr(const char *desc, SRV_INFO_CTR *ctr, prs_struct *ps, int depth)
+{
+	if (ctr == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_info_ctr");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("switch_value", ps, depth, &ctr->switch_value))
+		return False;
+	if(!prs_uint32("ptr_srv_ctr ", ps, depth, &ctr->ptr_srv_ctr))
+		return False;
+
+	if (ctr->ptr_srv_ctr != 0 && ctr->switch_value != 0 && ctr != NULL) {
+		switch (ctr->switch_value) {
+		case 100:
+			if(!srv_io_info_100("sv100", &ctr->srv.sv100, ps, depth))
+				return False;
+			break;
+		case 101:
+			if(!srv_io_info_101("sv101", &ctr->srv.sv101, ps, depth))
+				return False;
+			break;
+		case 102:
+			if(!srv_io_info_102("sv102", &ctr->srv.sv102, ps, depth))
+				return False;
+			break;
+		default:
+			DEBUG(5,("%s no server info at switch_value %d\n",
+					 tab_depth(depth), ctr->switch_value));
+			break;
+		}
+		if(!prs_align(ps))
+			return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a SRV_Q_NET_SRV_GET_INFO structure.
+ ********************************************************************/
+
+void init_srv_q_net_srv_get_info(SRV_Q_NET_SRV_GET_INFO *srv,
+				const char *server_name, uint32 switch_value)
+{
+	DEBUG(5,("init_srv_q_net_srv_get_info\n"));
+
+	init_buf_unistr2(&srv->uni_srv_name, &srv->ptr_srv_name, server_name);
+
+	srv->switch_value = switch_value;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_q_net_srv_get_info(const char *desc, SRV_Q_NET_SRV_GET_INFO *q_n, prs_struct *ps, int depth)
+{
+	if (q_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_q_net_srv_get_info");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_srv_name  ", ps, depth, &q_n->ptr_srv_name))
+		return False;
+	if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("switch_value  ", ps, depth, &q_n->switch_value))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a SRV_R_NET_SRV_GET_INFO structure.
+ ********************************************************************/
+
+void init_srv_r_net_srv_get_info(SRV_R_NET_SRV_GET_INFO *srv,
+				uint32 switch_value, SRV_INFO_CTR *ctr, WERROR status)
+{
+	DEBUG(5,("init_srv_r_net_srv_get_info\n"));
+
+	srv->ctr = ctr;
+
+	if (W_ERROR_IS_OK(status)) {
+		srv->ctr->switch_value = switch_value;
+		srv->ctr->ptr_srv_ctr  = 1;
+	} else {
+		srv->ctr->switch_value = 0;
+		srv->ctr->ptr_srv_ctr  = 0;
+	}
+
+	srv->status = status;
+}
+
+/*******************************************************************
+ Inits a SRV_R_NET_SRV_SET_INFO structure.
+ ********************************************************************/
+
+void init_srv_r_net_srv_set_info(SRV_R_NET_SRV_SET_INFO *srv,
+				 uint32 switch_value, WERROR status)
+{
+	DEBUG(5,("init_srv_r_net_srv_set_info\n"));
+
+	srv->switch_value = switch_value;
+	srv->status = status;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_q_net_srv_set_info(const char *desc, SRV_Q_NET_SRV_SET_INFO *q_n, 
+			       prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "srv_io_q_net_srv_set_info");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_srv_name  ", ps, depth, &q_n->ptr_srv_name))
+		return False;
+	if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("switch_value  ", ps, depth, &q_n->switch_value))
+		return False;
+
+	if (UNMARSHALLING(ps)) {
+		q_n->ctr = PRS_ALLOC_MEM(ps, SRV_INFO_CTR, 1);
+
+		if (!q_n->ctr)
+			return False;
+	}
+
+	if(!srv_io_info_ctr("ctr", q_n->ctr, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+ ********************************************************************/
+
+BOOL srv_io_r_net_srv_get_info(const char *desc, SRV_R_NET_SRV_GET_INFO *r_n, prs_struct *ps, int depth)
+{
+	if (r_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_r_net_srv_get_info");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!srv_io_info_ctr("ctr", r_n->ctr, ps, depth))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_n->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+ ********************************************************************/
+
+BOOL srv_io_r_net_srv_set_info(const char *desc, SRV_R_NET_SRV_SET_INFO *r_n, 
+			       prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "srv_io_r_net_srv_set_info");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("switch value ", ps, depth, &r_n->switch_value))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_n->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+ ********************************************************************/
+
+BOOL srv_io_q_net_remote_tod(const char *desc, SRV_Q_NET_REMOTE_TOD *q_n, prs_struct *ps, int depth)
+{
+	if (q_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_q_net_remote_tod");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_srv_name  ", ps, depth, &q_n->ptr_srv_name))
+		return False;
+	if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a TIME_OF_DAY_INFO structure.
+ ********************************************************************/
+
+static BOOL srv_io_time_of_day_info(const char *desc, TIME_OF_DAY_INFO *tod, prs_struct *ps, int depth)
+{
+	if (tod == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_time_of_day_info");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_uint32("elapsedt   ", ps, depth, &tod->elapsedt))
+		return False;
+	if(!prs_uint32("msecs      ", ps, depth, &tod->msecs))
+		return False;
+	if(!prs_uint32("hours      ", ps, depth, &tod->hours))
+		return False;
+	if(!prs_uint32("mins       ", ps, depth, &tod->mins))
+		return False;
+	if(!prs_uint32("secs       ", ps, depth, &tod->secs))
+		return False;
+	if(!prs_uint32("hunds      ", ps, depth, &tod->hunds))
+		return False;
+	if(!prs_uint32("timezone   ", ps, depth, &tod->zone))
+		return False;
+	if(!prs_uint32("tintervals ", ps, depth, &tod->tintervals))
+		return False;
+	if(!prs_uint32("day        ", ps, depth, &tod->day))
+		return False;
+	if(!prs_uint32("month      ", ps, depth, &tod->month))
+		return False;
+	if(!prs_uint32("year       ", ps, depth, &tod->year))
+		return False;
+	if(!prs_uint32("weekday    ", ps, depth, &tod->weekday))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a TIME_OF_DAY_INFO structure.
+ ********************************************************************/
+
+void init_time_of_day_info(TIME_OF_DAY_INFO *tod, uint32 elapsedt, uint32 msecs,
+                           uint32 hours, uint32 mins, uint32 secs, uint32 hunds,
+			   uint32 zone, uint32 tintervals, uint32 day,
+			   uint32 month, uint32 year, uint32 weekday)
+{
+	DEBUG(5,("init_time_of_day_info\n"));
+
+	tod->elapsedt	= elapsedt;
+	tod->msecs	= msecs;
+	tod->hours	= hours;
+	tod->mins	= mins;
+	tod->secs	= secs;
+	tod->hunds	= hunds;
+	tod->zone	= zone;
+	tod->tintervals	= tintervals;
+	tod->day	= day;
+	tod->month	= month;
+	tod->year	= year;
+	tod->weekday	= weekday;
+}
+
+
+/*******************************************************************
+ Reads or writes a structure.
+ ********************************************************************/
+
+BOOL srv_io_r_net_remote_tod(const char *desc, SRV_R_NET_REMOTE_TOD *r_n, prs_struct *ps, int depth)
+{
+	if (r_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_r_net_remote_tod");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+	
+	if(!prs_uint32("ptr_srv_tod ", ps, depth, &r_n->ptr_srv_tod))
+		return False;
+
+	if(!srv_io_time_of_day_info("tod", r_n->tod, ps, depth))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_n->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ initialises a structure.
+ ********************************************************************/
+
+BOOL init_srv_q_net_disk_enum(SRV_Q_NET_DISK_ENUM *q_n,
+			      const char *srv_name,
+			      uint32 preferred_len,
+			      ENUM_HND *enum_hnd
+	) 
+{
+  
+
+	DEBUG(5,("init_srv_q_net_srv_disk_enum\n"));
+
+	init_buf_unistr2(&q_n->uni_srv_name, &q_n->ptr_srv_name, srv_name);
+
+	q_n->disk_enum_ctr.level = 0;
+	q_n->disk_enum_ctr.disk_info_ptr   = 0;
+  
+	q_n->preferred_len = preferred_len;
+	memcpy(&q_n->enum_hnd, enum_hnd, sizeof(*enum_hnd));
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+ ********************************************************************/
+
+BOOL srv_io_q_net_disk_enum(const char *desc, SRV_Q_NET_DISK_ENUM *q_n, prs_struct *ps, int depth)
+{
+	if (q_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_q_net_disk_enum");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
+		return False;
+
+	if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("level", ps, depth, &q_n->disk_enum_ctr.level))
+		return False;
+
+	if(!prs_uint32("entries_read", ps, depth, &q_n->disk_enum_ctr.entries_read))
+		return False;
+
+	if(!prs_uint32("buffer", ps, depth, &q_n->disk_enum_ctr.disk_info_ptr))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("preferred_len", ps, depth, &q_n->preferred_len))
+		return False;
+	if(!smb_io_enum_hnd("enum_hnd", &q_n->enum_hnd, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+ ********************************************************************/
+
+BOOL srv_io_r_net_disk_enum(const char *desc, SRV_R_NET_DISK_ENUM *r_n, prs_struct *ps, int depth)
+{
+
+	unsigned int i;
+	uint32 entries_read, entries_read2, entries_read3;
+
+	if (r_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_r_net_disk_enum");
+	depth++;
+
+	entries_read = entries_read2 = entries_read3 = r_n->disk_enum_ctr.entries_read;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("entries_read", ps, depth, &entries_read))
+		return False;
+	if(!prs_uint32("ptr_disk_info", ps, depth, &r_n->disk_enum_ctr.disk_info_ptr))
+		return False;
+
+	/*this may be max, unknown, actual?*/
+
+	if(!prs_uint32("max_elements", ps, depth, &entries_read2))
+		return False;
+	if(!prs_uint32("unknown", ps, depth, &r_n->disk_enum_ctr.unknown))
+		return False;
+	if(!prs_uint32("actual_elements", ps, depth, &entries_read3))
+		return False;
+
+	r_n->disk_enum_ctr.entries_read = entries_read3;
+
+	if(UNMARSHALLING(ps) && entries_read3) {
+
+		DISK_INFO *dinfo;
+
+		if(!(dinfo = PRS_ALLOC_MEM(ps, DISK_INFO, entries_read3)))
+			return False;
+		r_n->disk_enum_ctr.disk_info = dinfo;
+	}
+
+	for(i=0; i < entries_read3; i++) {
+
+		if(!prs_uint32("unknown", ps, depth, &r_n->disk_enum_ctr.disk_info[i].unknown))
+			return False;
+   
+		if(!smb_io_unistr3("disk_name", &r_n->disk_enum_ctr.disk_info[i].disk_name, ps, depth))
+			return False;
+
+		if(!prs_align(ps))
+			return False;
+	}
+
+	if(!prs_uint32("total_entries", ps, depth, &r_n->total_entries))
+		return False;
+
+	if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_n->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+ ********************************************************************/
+
+BOOL srv_io_q_net_name_validate(const char *desc, SRV_Q_NET_NAME_VALIDATE *q_n, prs_struct *ps, int depth)
+{
+	if (q_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_q_net_name_validate");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_pointer("servername", ps, depth, (void**)&q_n->servername, sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_unistr2("", &q_n->sharename, True, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("type", ps, depth, &q_n->type))
+		return False;
+
+	if(!prs_uint32("flags", ps, depth, &q_n->flags))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+ ********************************************************************/
+
+BOOL srv_io_r_net_name_validate(const char *desc, SRV_R_NET_NAME_VALIDATE *r_n, prs_struct *ps, int depth)
+{
+	if (r_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_r_net_name_validate");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_n->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_q_net_file_query_secdesc(const char *desc, SRV_Q_NET_FILE_QUERY_SECDESC *q_n, prs_struct *ps, int depth)
+{
+	if (q_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_q_net_file_query_secdesc");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
+		return False;
+
+	if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_qual_name", ps, depth, &q_n->ptr_qual_name))
+		return False;
+
+	if(!smb_io_unistr2("", &q_n->uni_qual_name, True, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_unistr2("", &q_n->uni_file_name, True, ps, depth))
+		return False;
+
+	if(!prs_uint32("unknown1", ps, depth, &q_n->unknown1))
+		return False;
+
+	if(!prs_uint32("unknown2", ps, depth, &q_n->unknown2))
+		return False;
+
+	if(!prs_uint32("unknown3", ps, depth, &q_n->unknown3))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_r_net_file_query_secdesc(const char *desc, SRV_R_NET_FILE_QUERY_SECDESC *r_n, prs_struct *ps, int depth)
+{
+	if (r_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_r_net_file_query_secdesc");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_response", ps, depth, &r_n->ptr_response))
+		return False;
+
+	if(!prs_uint32("size_response", ps, depth, &r_n->size_response))
+		return False;
+
+	if(!prs_uint32("ptr_secdesc", ps, depth, &r_n->ptr_secdesc))
+		return False;
+
+	if(!prs_uint32("size_secdesc", ps, depth, &r_n->size_secdesc))
+		return False;
+
+	if(!sec_io_desc("sec_desc", &r_n->sec_desc, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_n->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_q_net_file_set_secdesc(const char *desc, SRV_Q_NET_FILE_SET_SECDESC *q_n, prs_struct *ps, int depth)
+{
+	if (q_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_q_net_file_set_secdesc");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
+		return False;
+
+	if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("ptr_qual_name", ps, depth, &q_n->ptr_qual_name))
+		return False;
+
+	if(!smb_io_unistr2("", &q_n->uni_qual_name, True, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_unistr2("", &q_n->uni_file_name, True, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("sec_info", ps, depth, &q_n->sec_info))
+		return False;
+
+	if(!prs_uint32("size_set", ps, depth, &q_n->size_set))
+		return False;
+
+	if(!prs_uint32("ptr_secdesc", ps, depth, &q_n->ptr_secdesc))
+		return False;
+
+	if(!prs_uint32("size_secdesc", ps, depth, &q_n->size_secdesc))
+		return False;
+
+	if(!sec_io_desc("sec_desc", &q_n->sec_desc, ps, depth))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_r_net_file_set_secdesc(const char *desc, SRV_R_NET_FILE_SET_SECDESC *r_n, prs_struct *ps, int depth)
+{
+	if (r_n == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_r_net_file_set_secdesc");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_n->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Inits a structure
+********************************************************************/
+
+void init_srv_q_net_remote_tod(SRV_Q_NET_REMOTE_TOD *q_u, const char *server)
+{
+	q_u->ptr_srv_name = 1;
+	init_unistr2(&q_u->uni_srv_name, server, UNI_STR_TERMINATE);
+}
+
+
+/*******************************************************************
+ Reads or writes a structure.
+********************************************************************/
+
+BOOL srv_io_q_net_file_close(const char *desc, SRV_Q_NET_FILE_CLOSE *q_u, prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "srv_io_q_net_file_close");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_pointer("servername", ps, depth, (void**)&q_u->servername, sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("file_id", ps, depth, &q_u->file_id))
+		return False;
+		
+	return True;
+}
+
+/*******************************************************************
+ ********************************************************************/
+
+BOOL srv_io_r_net_file_close(const char *desc, SRV_R_NET_FILE_CLOSE *r_n, 
+			       prs_struct *ps, int depth)
+{
+	prs_debug(ps, depth, desc, "srv_io_r_net_file_close");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_n->status))
+		return False;
+
+	return True;
+}

Modified: branches/samba/upstream/source/rpc_parse/parse_svcctl.c
===================================================================
--- branches/samba/upstream/source/rpc_parse/parse_svcctl.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_parse/parse_svcctl.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -25,7 +26,7 @@
 /*******************************************************************
 ********************************************************************/
 
-static bool svcctl_io_service_status( const char *desc, SERVICE_STATUS *status, prs_struct *ps, int depth )
+static BOOL svcctl_io_service_status( const char *desc, SERVICE_STATUS *status, prs_struct *ps, int depth )
 {
 
 	prs_debug(ps, depth, desc, "svcctl_io_service_status");
@@ -58,7 +59,7 @@
 /*******************************************************************
 ********************************************************************/
 
-static bool svcctl_io_service_config( const char *desc, SERVICE_CONFIG *config, prs_struct *ps, int depth )
+static BOOL svcctl_io_service_config( const char *desc, SERVICE_CONFIG *config, prs_struct *ps, int depth )
 {
 
 	prs_debug(ps, depth, desc, "svcctl_io_service_config");
@@ -103,7 +104,7 @@
 /*******************************************************************
 ********************************************************************/
 
-bool svcctl_io_enum_services_status( const char *desc, ENUM_SERVICES_STATUS *enum_status, RPC_BUFFER *buffer, int depth )
+BOOL svcctl_io_enum_services_status( const char *desc, ENUM_SERVICES_STATUS *enum_status, RPC_BUFFER *buffer, int depth )
 {
 	prs_struct *ps=&buffer->prs;
 	
@@ -124,7 +125,7 @@
 /*******************************************************************
 ********************************************************************/
 
-bool svcctl_io_service_status_process( const char *desc, SERVICE_STATUS_PROCESS *status, RPC_BUFFER *buffer, int depth )
+BOOL svcctl_io_service_status_process( const char *desc, SERVICE_STATUS_PROCESS *status, RPC_BUFFER *buffer, int depth )
 {
 	prs_struct *ps=&buffer->prs;
 
@@ -195,14 +196,280 @@
 	return size;
 }
 
+
+
 /*******************************************************************
 ********************************************************************/
 
-bool svcctl_io_q_enum_services_status(const char *desc, SVCCTL_Q_ENUM_SERVICES_STATUS *q_u, prs_struct *ps, int depth)
+BOOL svcctl_io_q_close_service(const char *desc, SVCCTL_Q_CLOSE_SERVICE *q_u, prs_struct *ps, int depth)
 {
+        
 	if (q_u == NULL)
 		return False;
 
+	prs_debug(ps, depth, desc, "svcctl_io_q_close_service");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("scm_pol", &q_u->handle, ps, depth))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+********************************************************************/
+
+BOOL svcctl_io_r_close_service(const char *desc, SVCCTL_R_CLOSE_SERVICE *r_u, prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "svcctl_io_r_close_service");
+	depth++;
+
+	if(!prs_align(ps))
+	    return False;
+
+	if(!smb_io_pol_hnd("pol_handle", &r_u->handle, ps, depth))
+	   return False; 
+
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL svcctl_io_q_open_scmanager(const char *desc, SVCCTL_Q_OPEN_SCMANAGER *q_u, prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "svcctl_io_q_open_scmanager");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_pointer("servername", ps, depth, (void*)&q_u->servername, sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_pointer("database", ps, depth, (void*)&q_u->database, sizeof(UNISTR2), (PRS_POINTER_CAST)prs_io_unistr2))
+		return False;
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("access", ps, depth, &q_u->access))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL svcctl_io_r_open_scmanager(const char *desc, SVCCTL_R_OPEN_SCMANAGER *r_u, prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "svcctl_io_r_open_scmanager");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("scm_pol", &r_u->handle, ps, depth))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL svcctl_io_q_get_display_name(const char *desc, SVCCTL_Q_GET_DISPLAY_NAME *q_u, prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "svcctl_io_q_get_display_name");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("scm_pol", &q_u->handle, ps, depth))
+		return False;
+
+	if(!smb_io_unistr2("servicename", &q_u->servicename, 1, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("display_name_len", ps, depth, &q_u->display_name_len))
+		return False;
+	
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL init_svcctl_r_get_display_name( SVCCTL_R_GET_DISPLAY_NAME *r_u, const char *displayname )
+{
+	r_u->display_name_len = strlen(displayname);
+	init_unistr2( &r_u->displayname, displayname, UNI_STR_TERMINATE );
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL svcctl_io_r_get_display_name(const char *desc, SVCCTL_R_GET_DISPLAY_NAME *r_u, prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "svcctl_io_r_get_display_name");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	
+	if(!smb_io_unistr2("displayname", &r_u->displayname, 1, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("display_name_len", ps, depth, &r_u->display_name_len))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+********************************************************************/
+
+BOOL svcctl_io_q_open_service(const char *desc, SVCCTL_Q_OPEN_SERVICE *q_u, prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "svcctl_io_q_open_service");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("scm_pol", &q_u->handle, ps, depth))
+		return False;
+
+	if(!smb_io_unistr2("servicename", &q_u->servicename, 1, ps, depth))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("access", ps, depth, &q_u->access))
+		return False;
+	
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL svcctl_io_r_open_service(const char *desc, SVCCTL_R_OPEN_SERVICE *r_u, prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "svcctl_io_r_open_service");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("service_pol", &r_u->handle, ps, depth))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL svcctl_io_q_query_status(const char *desc, SVCCTL_Q_QUERY_STATUS *q_u, prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "svcctl_io_q_query_status");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("service_pol", &q_u->handle, ps, depth))
+		return False;
+	
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL svcctl_io_r_query_status(const char *desc, SVCCTL_R_QUERY_STATUS *r_u, prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "svcctl_io_r_query_status");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!svcctl_io_service_status("service_status", &r_u->svc_status, ps, depth))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL svcctl_io_q_enum_services_status(const char *desc, SVCCTL_Q_ENUM_SERVICES_STATUS *q_u, prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
 	prs_debug(ps, depth, desc, "svcctl_io_q_enum_services_status");
 	depth++;
 
@@ -228,7 +495,7 @@
 /*******************************************************************
 ********************************************************************/
 
-bool svcctl_io_r_enum_services_status(const char *desc, SVCCTL_R_ENUM_SERVICES_STATUS *r_u, prs_struct *ps, int depth)
+BOOL svcctl_io_r_enum_services_status(const char *desc, SVCCTL_R_ENUM_SERVICES_STATUS *r_u, prs_struct *ps, int depth)
 {
 	if (r_u == NULL)
 		return False;
@@ -262,11 +529,55 @@
 /*******************************************************************
 ********************************************************************/
 
-bool svcctl_io_q_enum_dependent_services(const char *desc, SVCCTL_Q_ENUM_DEPENDENT_SERVICES *q_u, prs_struct *ps, int depth)
+BOOL svcctl_io_q_start_service(const char *desc, SVCCTL_Q_START_SERVICE *q_u, prs_struct *ps, int depth)
 {
 	if (q_u == NULL)
 		return False;
 
+	prs_debug(ps, depth, desc, "svcctl_io_q_start_service");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("service_pol", &q_u->handle, ps, depth))
+		return False;
+
+	if(!prs_uint32("parmcount", ps, depth, &q_u->parmcount))
+		return False;
+
+	if ( !prs_pointer("rights", ps, depth, (void*)&q_u->parameters, sizeof(UNISTR4_ARRAY), (PRS_POINTER_CAST)prs_unistr4_array) )
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL svcctl_io_r_start_service(const char *desc, SVCCTL_R_START_SERVICE *r_u, prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "svcctl_io_r_start_service");
+	depth++;
+
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+********************************************************************/
+
+BOOL svcctl_io_q_enum_dependent_services(const char *desc, SVCCTL_Q_ENUM_DEPENDENT_SERVICES *q_u, prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
 	prs_debug(ps, depth, desc, "svcctl_io_q_enum_dependent_services");
 	depth++;
 
@@ -287,7 +598,7 @@
 /*******************************************************************
 ********************************************************************/
 
-bool svcctl_io_r_enum_dependent_services(const char *desc, SVCCTL_R_ENUM_DEPENDENT_SERVICES *r_u, prs_struct *ps, int depth)
+BOOL svcctl_io_r_enum_dependent_services(const char *desc, SVCCTL_R_ENUM_DEPENDENT_SERVICES *r_u, prs_struct *ps, int depth)
 {
 	if (r_u == NULL)
 		return False;
@@ -318,11 +629,58 @@
 /*******************************************************************
 ********************************************************************/
 
-bool svcctl_io_q_query_service_config(const char *desc, SVCCTL_Q_QUERY_SERVICE_CONFIG *q_u, prs_struct *ps, int depth)
+BOOL svcctl_io_q_control_service(const char *desc, SVCCTL_Q_CONTROL_SERVICE *q_u, prs_struct *ps, int depth)
 {
 	if (q_u == NULL)
 		return False;
 
+	prs_debug(ps, depth, desc, "svcctl_io_q_control_service");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("service_pol", &q_u->handle, ps, depth))
+		return False;
+
+	if(!prs_uint32("control", ps, depth, &q_u->control))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL svcctl_io_r_control_service(const char *desc, SVCCTL_R_CONTROL_SERVICE *r_u, prs_struct *ps, int depth)
+{
+	if (r_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "svcctl_io_r_control_service");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!svcctl_io_service_status("service_status", &r_u->svc_status, ps, depth))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+********************************************************************/
+
+BOOL svcctl_io_q_query_service_config(const char *desc, SVCCTL_Q_QUERY_SERVICE_CONFIG *q_u, prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
 	prs_debug(ps, depth, desc, "svcctl_io_q_query_service_config");
 	depth++;
 
@@ -341,7 +699,7 @@
 /*******************************************************************
 ********************************************************************/
 
-bool svcctl_io_r_query_service_config(const char *desc, SVCCTL_R_QUERY_SERVICE_CONFIG *r_u, prs_struct *ps, int depth)
+BOOL svcctl_io_r_query_service_config(const char *desc, SVCCTL_R_QUERY_SERVICE_CONFIG *r_u, prs_struct *ps, int depth)
 {
 	if (r_u == NULL)
 		return False;
@@ -369,7 +727,7 @@
 /*******************************************************************
 ********************************************************************/
 
-bool svcctl_io_q_query_service_config2(const char *desc, SVCCTL_Q_QUERY_SERVICE_CONFIG2 *q_u, prs_struct *ps, int depth)
+BOOL svcctl_io_q_query_service_config2(const char *desc, SVCCTL_Q_QUERY_SERVICE_CONFIG2 *q_u, prs_struct *ps, int depth)
 {
 	if (q_u == NULL)
 		return False;
@@ -405,7 +763,7 @@
 /*******************************************************************
 ********************************************************************/
 
-bool svcctl_io_service_description( const char *desc, SERVICE_DESCRIPTION *description, RPC_BUFFER *buffer, int depth )
+BOOL svcctl_io_service_description( const char *desc, SERVICE_DESCRIPTION *description, RPC_BUFFER *buffer, int depth )
 {
         prs_struct *ps = &buffer->prs;
 
@@ -435,7 +793,7 @@
 /*******************************************************************
 ********************************************************************/
 
-static bool svcctl_io_action( const char *desc, SC_ACTION *action, prs_struct *ps, int depth )
+static BOOL svcctl_io_action( const char *desc, SC_ACTION *action, prs_struct *ps, int depth )
 {
 
 	prs_debug(ps, depth, desc, "svcctl_io_action");
@@ -452,7 +810,7 @@
 /*******************************************************************
 ********************************************************************/
 
-bool svcctl_io_service_fa( const char *desc, SERVICE_FAILURE_ACTIONS *fa, RPC_BUFFER *buffer, int depth )
+BOOL svcctl_io_service_fa( const char *desc, SERVICE_FAILURE_ACTIONS *fa, RPC_BUFFER *buffer, int depth )
 {
         prs_struct *ps = &buffer->prs;
 	int i;
@@ -473,7 +831,7 @@
 
 	if ( UNMARSHALLING(ps)) {
 		if (fa->num_actions) {
-			if ( !(fa->actions = TALLOC_ARRAY( talloc_tos(), SC_ACTION, fa->num_actions )) ) {
+			if ( !(fa->actions = TALLOC_ARRAY( get_talloc_ctx(), SC_ACTION, fa->num_actions )) ) {
 				DEBUG(0,("svcctl_io_service_fa: talloc() failure!\n"));
 				return False;
 			}
@@ -511,7 +869,7 @@
 /*******************************************************************
 ********************************************************************/
 
-bool svcctl_io_r_query_service_config2(const char *desc, SVCCTL_R_QUERY_SERVICE_CONFIG2 *r_u, prs_struct *ps, int depth)
+BOOL svcctl_io_r_query_service_config2(const char *desc, SVCCTL_R_QUERY_SERVICE_CONFIG2 *r_u, prs_struct *ps, int depth)
 {
 	if ( !r_u )
 		return False;
@@ -540,7 +898,7 @@
 /*******************************************************************
 ********************************************************************/
 
-bool svcctl_io_q_query_service_status_ex(const char *desc, SVCCTL_Q_QUERY_SERVICE_STATUSEX *q_u, prs_struct *ps, int depth)
+BOOL svcctl_io_q_query_service_status_ex(const char *desc, SVCCTL_Q_QUERY_SERVICE_STATUSEX *q_u, prs_struct *ps, int depth)
 {
 	if (q_u == NULL)
 		return False;
@@ -567,7 +925,7 @@
 /*******************************************************************
 ********************************************************************/
 
-bool svcctl_io_r_query_service_status_ex(const char *desc, SVCCTL_R_QUERY_SERVICE_STATUSEX *r_u, prs_struct *ps, int depth)
+BOOL svcctl_io_r_query_service_status_ex(const char *desc, SVCCTL_R_QUERY_SERVICE_STATUSEX *r_u, prs_struct *ps, int depth)
 {
 	if ( !r_u )
 		return False;
@@ -589,3 +947,195 @@
 
 	return True;
 }
+
+/*******************************************************************
+********************************************************************/
+
+BOOL svcctl_io_q_lock_service_db(const char *desc, SVCCTL_Q_LOCK_SERVICE_DB *q_u, prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "svcctl_io_q_lock_service_db");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("scm_handle", &q_u->handle, ps, depth))
+		return False;
+
+	return True;
+
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL svcctl_io_r_lock_service_db(const char *desc, SVCCTL_R_LOCK_SERVICE_DB *r_u, prs_struct *ps, int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "svcctl_io_r_lock_service_db");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("lock_handle", &r_u->h_lock, ps, depth))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL svcctl_io_q_unlock_service_db(const char *desc, SVCCTL_Q_UNLOCK_SERVICE_DB *q_u, prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "svcctl_io_q_unlock_service_db");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("h_lock", &q_u->h_lock, ps, depth))
+		return False;
+
+	return True;
+
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL svcctl_io_r_unlock_service_db(const char *desc, SVCCTL_R_UNLOCK_SERVICE_DB *r_u, prs_struct *ps, int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "svcctl_io_r_unlock_service_db");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL svcctl_io_q_query_service_sec(const char *desc, SVCCTL_Q_QUERY_SERVICE_SEC *q_u, prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "svcctl_io_q_query_service_sec");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("handle", &q_u->handle, ps, depth))
+		return False;
+	if(!prs_uint32("security_flags", ps, depth, &q_u->security_flags))
+		return False;
+	if(!prs_uint32("buffer_size", ps, depth, &q_u->buffer_size))
+		return False;
+
+	return True;
+
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL svcctl_io_r_query_service_sec(const char *desc, SVCCTL_R_QUERY_SERVICE_SEC *r_u, prs_struct *ps, int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "svcctl_io_r_query_service_sec");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if (!prs_rpcbuffer("buffer", ps, depth, &r_u->buffer))
+		return False;
+
+	if(!prs_uint32("needed", ps, depth, &r_u->needed))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL svcctl_io_q_set_service_sec(const char *desc, SVCCTL_Q_SET_SERVICE_SEC *q_u, prs_struct *ps, int depth)
+{
+	if (q_u == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "svcctl_io_q_set_service_sec");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_pol_hnd("handle", &q_u->handle, ps, depth))
+		return False;
+	if(!prs_uint32("security_flags", ps, depth, &q_u->security_flags))
+		return False;
+
+	if (!prs_rpcbuffer("buffer", ps, depth, &q_u->buffer))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_uint32("buffer_size", ps, depth, &q_u->buffer_size))
+		return False;
+
+	return True;
+
+}
+
+/*******************************************************************
+********************************************************************/
+
+BOOL svcctl_io_r_set_service_sec(const char *desc, SVCCTL_R_SET_SERVICE_SEC *r_u, prs_struct *ps, int depth)
+{
+	if ( !r_u )
+		return False;
+
+	prs_debug(ps, depth, desc, "svcctl_io_r_set_service_sec");
+	depth++;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!prs_werror("status", ps, depth, &r_u->status))
+		return False;
+
+	return True;
+}
+
+
+
+

Copied: branches/samba/upstream/source/rpc_server/srv_dfs.c (from rev 1928, branches/samba/upstream/source/rpc_server/srv_dfs.c)
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_dfs.c	                        (rev 0)
+++ branches/samba/upstream/source/rpc_server/srv_dfs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,602 @@
+/*
+ * Unix SMB/CIFS implementation.
+ * server auto-generated by pidl. DO NOT MODIFY!
+ */
+
+#include "includes.h"
+#include "nterr.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_RPC
+
+/******************************************************************
+ api_dfs_GetManagerVersion
+ *****************************************************************/
+
+static BOOL api_dfs_GetManagerVersion(pipes_struct *p)
+{
+	NETDFS_Q_DFS_GETMANAGERVERSION q_u;
+	NETDFS_R_DFS_GETMANAGERVERSION r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if (!netdfs_io_q_dfs_GetManagerVersion("", &q_u, data, 0))
+		return False;
+	
+	_dfs_GetManagerVersion(p, &q_u, &r_u);
+	
+	if (!netdfs_io_r_dfs_GetManagerVersion("", &r_u, rdata, 0))
+		return False;
+	
+	return True;
+}
+/******************************************************************
+ api_dfs_Add
+ *****************************************************************/
+
+static BOOL api_dfs_Add(pipes_struct *p)
+{
+	NETDFS_Q_DFS_ADD q_u;
+	NETDFS_R_DFS_ADD r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if (!netdfs_io_q_dfs_Add("", &q_u, data, 0))
+		return False;
+	
+	r_u.status = _dfs_Add(p, &q_u, &r_u);
+	
+	if (!netdfs_io_r_dfs_Add("", &r_u, rdata, 0))
+		return False;
+	
+	return True;
+}
+/******************************************************************
+ api_dfs_Remove
+ *****************************************************************/
+
+static BOOL api_dfs_Remove(pipes_struct *p)
+{
+	NETDFS_Q_DFS_REMOVE q_u;
+	NETDFS_R_DFS_REMOVE r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if (!netdfs_io_q_dfs_Remove("", &q_u, data, 0))
+		return False;
+	
+	r_u.status = _dfs_Remove(p, &q_u, &r_u);
+	
+	if (!netdfs_io_r_dfs_Remove("", &r_u, rdata, 0))
+		return False;
+	
+	return True;
+}
+/******************************************************************
+ api_dfs_SetInfo
+ *****************************************************************/
+
+static BOOL api_dfs_SetInfo(pipes_struct *p)
+{
+	NETDFS_Q_DFS_SETINFO q_u;
+	NETDFS_R_DFS_SETINFO r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if (!netdfs_io_q_dfs_SetInfo("", &q_u, data, 0))
+		return False;
+	
+	r_u.status = _dfs_SetInfo(p, &q_u, &r_u);
+	
+	if (!netdfs_io_r_dfs_SetInfo("", &r_u, rdata, 0))
+		return False;
+	
+	return True;
+}
+/******************************************************************
+ api_dfs_GetInfo
+ *****************************************************************/
+
+static BOOL api_dfs_GetInfo(pipes_struct *p)
+{
+	NETDFS_Q_DFS_GETINFO q_u;
+	NETDFS_R_DFS_GETINFO r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if (!netdfs_io_q_dfs_GetInfo("", &q_u, data, 0))
+		return False;
+	
+	r_u.status = _dfs_GetInfo(p, &q_u, &r_u);
+	
+	if (!netdfs_io_r_dfs_GetInfo("", &r_u, rdata, 0))
+		return False;
+	
+	return True;
+}
+/******************************************************************
+ api_dfs_Enum
+ *****************************************************************/
+
+static BOOL api_dfs_Enum(pipes_struct *p)
+{
+	NETDFS_Q_DFS_ENUM q_u;
+	NETDFS_R_DFS_ENUM r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if (!netdfs_io_q_dfs_Enum("", &q_u, data, 0))
+		return False;
+	
+	r_u.status = _dfs_Enum(p, &q_u, &r_u);
+	
+	if (!netdfs_io_r_dfs_Enum("", &r_u, rdata, 0))
+		return False;
+	
+	return True;
+}
+/******************************************************************
+ api_dfs_Rename
+ *****************************************************************/
+
+static BOOL api_dfs_Rename(pipes_struct *p)
+{
+	NETDFS_Q_DFS_RENAME q_u;
+	NETDFS_R_DFS_RENAME r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if (!netdfs_io_q_dfs_Rename("", &q_u, data, 0))
+		return False;
+	
+	r_u.status = _dfs_Rename(p, &q_u, &r_u);
+	
+	if (!netdfs_io_r_dfs_Rename("", &r_u, rdata, 0))
+		return False;
+	
+	return True;
+}
+/******************************************************************
+ api_dfs_Move
+ *****************************************************************/
+
+static BOOL api_dfs_Move(pipes_struct *p)
+{
+	NETDFS_Q_DFS_MOVE q_u;
+	NETDFS_R_DFS_MOVE r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if (!netdfs_io_q_dfs_Move("", &q_u, data, 0))
+		return False;
+	
+	r_u.status = _dfs_Move(p, &q_u, &r_u);
+	
+	if (!netdfs_io_r_dfs_Move("", &r_u, rdata, 0))
+		return False;
+	
+	return True;
+}
+/******************************************************************
+ api_dfs_ManagerGetConfigInfo
+ *****************************************************************/
+
+static BOOL api_dfs_ManagerGetConfigInfo(pipes_struct *p)
+{
+	NETDFS_Q_DFS_MANAGERGETCONFIGINFO q_u;
+	NETDFS_R_DFS_MANAGERGETCONFIGINFO r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if (!netdfs_io_q_dfs_ManagerGetConfigInfo("", &q_u, data, 0))
+		return False;
+	
+	r_u.status = _dfs_ManagerGetConfigInfo(p, &q_u, &r_u);
+	
+	if (!netdfs_io_r_dfs_ManagerGetConfigInfo("", &r_u, rdata, 0))
+		return False;
+	
+	return True;
+}
+/******************************************************************
+ api_dfs_ManagerSendSiteInfo
+ *****************************************************************/
+
+static BOOL api_dfs_ManagerSendSiteInfo(pipes_struct *p)
+{
+	NETDFS_Q_DFS_MANAGERSENDSITEINFO q_u;
+	NETDFS_R_DFS_MANAGERSENDSITEINFO r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if (!netdfs_io_q_dfs_ManagerSendSiteInfo("", &q_u, data, 0))
+		return False;
+	
+	r_u.status = _dfs_ManagerSendSiteInfo(p, &q_u, &r_u);
+	
+	if (!netdfs_io_r_dfs_ManagerSendSiteInfo("", &r_u, rdata, 0))
+		return False;
+	
+	return True;
+}
+/******************************************************************
+ api_dfs_AddFtRoot
+ *****************************************************************/
+
+static BOOL api_dfs_AddFtRoot(pipes_struct *p)
+{
+	NETDFS_Q_DFS_ADDFTROOT q_u;
+	NETDFS_R_DFS_ADDFTROOT r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if (!netdfs_io_q_dfs_AddFtRoot("", &q_u, data, 0))
+		return False;
+	
+	r_u.status = _dfs_AddFtRoot(p, &q_u, &r_u);
+	
+	if (!netdfs_io_r_dfs_AddFtRoot("", &r_u, rdata, 0))
+		return False;
+	
+	return True;
+}
+/******************************************************************
+ api_dfs_RemoveFtRoot
+ *****************************************************************/
+
+static BOOL api_dfs_RemoveFtRoot(pipes_struct *p)
+{
+	NETDFS_Q_DFS_REMOVEFTROOT q_u;
+	NETDFS_R_DFS_REMOVEFTROOT r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if (!netdfs_io_q_dfs_RemoveFtRoot("", &q_u, data, 0))
+		return False;
+	
+	r_u.status = _dfs_RemoveFtRoot(p, &q_u, &r_u);
+	
+	if (!netdfs_io_r_dfs_RemoveFtRoot("", &r_u, rdata, 0))
+		return False;
+	
+	return True;
+}
+/******************************************************************
+ api_dfs_AddStdRoot
+ *****************************************************************/
+
+static BOOL api_dfs_AddStdRoot(pipes_struct *p)
+{
+	NETDFS_Q_DFS_ADDSTDROOT q_u;
+	NETDFS_R_DFS_ADDSTDROOT r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if (!netdfs_io_q_dfs_AddStdRoot("", &q_u, data, 0))
+		return False;
+	
+	r_u.status = _dfs_AddStdRoot(p, &q_u, &r_u);
+	
+	if (!netdfs_io_r_dfs_AddStdRoot("", &r_u, rdata, 0))
+		return False;
+	
+	return True;
+}
+/******************************************************************
+ api_dfs_RemoveStdRoot
+ *****************************************************************/
+
+static BOOL api_dfs_RemoveStdRoot(pipes_struct *p)
+{
+	NETDFS_Q_DFS_REMOVESTDROOT q_u;
+	NETDFS_R_DFS_REMOVESTDROOT r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if (!netdfs_io_q_dfs_RemoveStdRoot("", &q_u, data, 0))
+		return False;
+	
+	r_u.status = _dfs_RemoveStdRoot(p, &q_u, &r_u);
+	
+	if (!netdfs_io_r_dfs_RemoveStdRoot("", &r_u, rdata, 0))
+		return False;
+	
+	return True;
+}
+/******************************************************************
+ api_dfs_ManagerInitialize
+ *****************************************************************/
+
+static BOOL api_dfs_ManagerInitialize(pipes_struct *p)
+{
+	NETDFS_Q_DFS_MANAGERINITIALIZE q_u;
+	NETDFS_R_DFS_MANAGERINITIALIZE r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if (!netdfs_io_q_dfs_ManagerInitialize("", &q_u, data, 0))
+		return False;
+	
+	r_u.status = _dfs_ManagerInitialize(p, &q_u, &r_u);
+	
+	if (!netdfs_io_r_dfs_ManagerInitialize("", &r_u, rdata, 0))
+		return False;
+	
+	return True;
+}
+/******************************************************************
+ api_dfs_AddStdRootForced
+ *****************************************************************/
+
+static BOOL api_dfs_AddStdRootForced(pipes_struct *p)
+{
+	NETDFS_Q_DFS_ADDSTDROOTFORCED q_u;
+	NETDFS_R_DFS_ADDSTDROOTFORCED r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if (!netdfs_io_q_dfs_AddStdRootForced("", &q_u, data, 0))
+		return False;
+	
+	r_u.status = _dfs_AddStdRootForced(p, &q_u, &r_u);
+	
+	if (!netdfs_io_r_dfs_AddStdRootForced("", &r_u, rdata, 0))
+		return False;
+	
+	return True;
+}
+/******************************************************************
+ api_dfs_GetDcAddress
+ *****************************************************************/
+
+static BOOL api_dfs_GetDcAddress(pipes_struct *p)
+{
+	NETDFS_Q_DFS_GETDCADDRESS q_u;
+	NETDFS_R_DFS_GETDCADDRESS r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if (!netdfs_io_q_dfs_GetDcAddress("", &q_u, data, 0))
+		return False;
+	
+	r_u.status = _dfs_GetDcAddress(p, &q_u, &r_u);
+	
+	if (!netdfs_io_r_dfs_GetDcAddress("", &r_u, rdata, 0))
+		return False;
+	
+	return True;
+}
+/******************************************************************
+ api_dfs_SetDcAddress
+ *****************************************************************/
+
+static BOOL api_dfs_SetDcAddress(pipes_struct *p)
+{
+	NETDFS_Q_DFS_SETDCADDRESS q_u;
+	NETDFS_R_DFS_SETDCADDRESS r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if (!netdfs_io_q_dfs_SetDcAddress("", &q_u, data, 0))
+		return False;
+	
+	r_u.status = _dfs_SetDcAddress(p, &q_u, &r_u);
+	
+	if (!netdfs_io_r_dfs_SetDcAddress("", &r_u, rdata, 0))
+		return False;
+	
+	return True;
+}
+/******************************************************************
+ api_dfs_FlushFtTable
+ *****************************************************************/
+
+static BOOL api_dfs_FlushFtTable(pipes_struct *p)
+{
+	NETDFS_Q_DFS_FLUSHFTTABLE q_u;
+	NETDFS_R_DFS_FLUSHFTTABLE r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if (!netdfs_io_q_dfs_FlushFtTable("", &q_u, data, 0))
+		return False;
+	
+	r_u.status = _dfs_FlushFtTable(p, &q_u, &r_u);
+	
+	if (!netdfs_io_r_dfs_FlushFtTable("", &r_u, rdata, 0))
+		return False;
+	
+	return True;
+}
+/******************************************************************
+ api_dfs_Add2
+ *****************************************************************/
+
+static BOOL api_dfs_Add2(pipes_struct *p)
+{
+	NETDFS_Q_DFS_ADD2 q_u;
+	NETDFS_R_DFS_ADD2 r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if (!netdfs_io_q_dfs_Add2("", &q_u, data, 0))
+		return False;
+	
+	r_u.status = _dfs_Add2(p, &q_u, &r_u);
+	
+	if (!netdfs_io_r_dfs_Add2("", &r_u, rdata, 0))
+		return False;
+	
+	return True;
+}
+/******************************************************************
+ api_dfs_Remove2
+ *****************************************************************/
+
+static BOOL api_dfs_Remove2(pipes_struct *p)
+{
+	NETDFS_Q_DFS_REMOVE2 q_u;
+	NETDFS_R_DFS_REMOVE2 r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if (!netdfs_io_q_dfs_Remove2("", &q_u, data, 0))
+		return False;
+	
+	r_u.status = _dfs_Remove2(p, &q_u, &r_u);
+	
+	if (!netdfs_io_r_dfs_Remove2("", &r_u, rdata, 0))
+		return False;
+	
+	return True;
+}
+/******************************************************************
+ api_dfs_EnumEx
+ *****************************************************************/
+
+static BOOL api_dfs_EnumEx(pipes_struct *p)
+{
+	NETDFS_Q_DFS_ENUMEX q_u;
+	NETDFS_R_DFS_ENUMEX r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if (!netdfs_io_q_dfs_EnumEx("", &q_u, data, 0))
+		return False;
+	
+	r_u.status = _dfs_EnumEx(p, &q_u, &r_u);
+	
+	if (!netdfs_io_r_dfs_EnumEx("", &r_u, rdata, 0))
+		return False;
+	
+	return True;
+}
+/******************************************************************
+ api_dfs_SetInfo2
+ *****************************************************************/
+
+static BOOL api_dfs_SetInfo2(pipes_struct *p)
+{
+	NETDFS_Q_DFS_SETINFO2 q_u;
+	NETDFS_R_DFS_SETINFO2 r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if (!netdfs_io_q_dfs_SetInfo2("", &q_u, data, 0))
+		return False;
+	
+	r_u.status = _dfs_SetInfo2(p, &q_u, &r_u);
+	
+	if (!netdfs_io_r_dfs_SetInfo2("", &r_u, rdata, 0))
+		return False;
+	
+	return True;
+}
+
+/* Tables */
+static struct api_struct api_netdfs_cmds[] = 
+{
+	{"DFS_GETMANAGERVERSION", DFS_GETMANAGERVERSION, api_dfs_GetManagerVersion},
+	{"DFS_ADD", DFS_ADD, api_dfs_Add},
+	{"DFS_REMOVE", DFS_REMOVE, api_dfs_Remove},
+	{"DFS_SETINFO", DFS_SETINFO, api_dfs_SetInfo},
+	{"DFS_GETINFO", DFS_GETINFO, api_dfs_GetInfo},
+	{"DFS_ENUM", DFS_ENUM, api_dfs_Enum},
+	{"DFS_RENAME", DFS_RENAME, api_dfs_Rename},
+	{"DFS_MOVE", DFS_MOVE, api_dfs_Move},
+	{"DFS_MANAGERGETCONFIGINFO", DFS_MANAGERGETCONFIGINFO, api_dfs_ManagerGetConfigInfo},
+	{"DFS_MANAGERSENDSITEINFO", DFS_MANAGERSENDSITEINFO, api_dfs_ManagerSendSiteInfo},
+	{"DFS_ADDFTROOT", DFS_ADDFTROOT, api_dfs_AddFtRoot},
+	{"DFS_REMOVEFTROOT", DFS_REMOVEFTROOT, api_dfs_RemoveFtRoot},
+	{"DFS_ADDSTDROOT", DFS_ADDSTDROOT, api_dfs_AddStdRoot},
+	{"DFS_REMOVESTDROOT", DFS_REMOVESTDROOT, api_dfs_RemoveStdRoot},
+	{"DFS_MANAGERINITIALIZE", DFS_MANAGERINITIALIZE, api_dfs_ManagerInitialize},
+	{"DFS_ADDSTDROOTFORCED", DFS_ADDSTDROOTFORCED, api_dfs_AddStdRootForced},
+	{"DFS_GETDCADDRESS", DFS_GETDCADDRESS, api_dfs_GetDcAddress},
+	{"DFS_SETDCADDRESS", DFS_SETDCADDRESS, api_dfs_SetDcAddress},
+	{"DFS_FLUSHFTTABLE", DFS_FLUSHFTTABLE, api_dfs_FlushFtTable},
+	{"DFS_ADD2", DFS_ADD2, api_dfs_Add2},
+	{"DFS_REMOVE2", DFS_REMOVE2, api_dfs_Remove2},
+	{"DFS_ENUMEX", DFS_ENUMEX, api_dfs_EnumEx},
+	{"DFS_SETINFO2", DFS_SETINFO2, api_dfs_SetInfo2},
+};
+
+void netdfs_get_pipe_fns(struct api_struct **fns, int *n_fns)
+{
+	*fns = api_netdfs_cmds;
+	*n_fns = sizeof(api_netdfs_cmds) / sizeof(struct api_struct);
+}
+
+NTSTATUS rpc_netdfs_init(void)
+{
+	return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "netdfs", "netdfs", api_netdfs_cmds, sizeof(api_netdfs_cmds) / sizeof(struct api_struct));
+}

Modified: branches/samba/upstream/source/rpc_server/srv_dfs_nt.c
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_dfs_nt.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_server/srv_dfs_nt.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,22 +1,23 @@
-/*
+/* 
  *  Unix SMB/CIFS implementation.
  *  RPC Pipe client / server routines for Dfs
  *  Copyright (C) Shirish Kalele	2000.
- *  Copyright (C) Jeremy Allison	2001-2007.
- *  Copyright (C) Jelmer Vernooij	2005-2006.
- *
+ *  Copyright (C) Jeremy Allison	2001.
+ *  Copyright (C) Jelmer Vernooij	2005.
+ *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
- *
+ *  
  *  This program is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
- *
+ *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 /* This is the implementation of the dfs pipe. */
@@ -29,79 +30,71 @@
 /* This function does not return a WERROR or NTSTATUS code but rather 1 if
    dfs exists, or 0 otherwise. */
 
-void _dfs_GetManagerVersion(pipes_struct *p, struct dfs_GetManagerVersion *r)
+uint32 _dfs_GetManagerVersion(pipes_struct *p, NETDFS_Q_DFS_GETMANAGERVERSION *q_u, NETDFS_R_DFS_GETMANAGERVERSION *r_u)
 {
-	if (lp_host_msdfs()) {
-		*r->out.version = DFS_MANAGER_VERSION_NT4;
-	} else {
-		*r->out.version = (enum dfs_ManagerVersion)0;
-	}
+	if(lp_host_msdfs()) 
+		return 1;
+	else
+		return 0;
 }
 
-WERROR _dfs_Add(pipes_struct *p, struct dfs_Add *r)
+WERROR _dfs_Add(pipes_struct *p, NETDFS_Q_DFS_ADD* q_u, NETDFS_R_DFS_ADD *r_u)
 {
-	struct junction_map *jn = NULL;
-	struct referral *old_referral_list = NULL;
-	bool self_ref = False;
+	struct current_user user;
+	struct junction_map jn;
+	struct referral* old_referral_list = NULL;
+	BOOL self_ref = False;
 	int consumedcnt = 0;
-	bool exists = False;
-	char *altpath = NULL;
-	NTSTATUS status;
-	TALLOC_CTX *ctx = talloc_tos();
+	BOOL exists = False;
 
-	if (p->pipe_user.ut.uid != 0) {
+	pstring dfspath, servername, sharename;
+	pstring altpath;
+
+	get_current_user(&user,p);
+
+	if (user.ut.uid != 0) {
 		DEBUG(10,("_dfs_add: uid != 0. Access denied.\n"));
 		return WERR_ACCESS_DENIED;
 	}
 
-	jn = TALLOC_ZERO_P(ctx, struct junction_map);
-	if (!jn) {
-		return WERR_NOMEM;
-	}
+	unistr2_to_ascii(dfspath, &q_u->path, sizeof(dfspath)-1);
+	unistr2_to_ascii(servername, &q_u->server, sizeof(servername)-1);
+	unistr2_to_ascii(sharename, &q_u->share, sizeof(sharename)-1);
 
 	DEBUG(5,("init_reply_dfs_add: Request to add %s -> %s\\%s.\n",
-		r->in.path, r->in.server, r->in.share));
+		dfspath, servername, sharename));
 
-	altpath = talloc_asprintf(ctx, "%s\\%s",
-			r->in.server,
-			r->in.share);
-	if (!altpath) {
-		return WERR_NOMEM;
-	}
+	pstrcpy(altpath, servername);
+	pstrcat(altpath, "\\");
+	pstrcat(altpath, sharename);
 
 	/* The following call can change the cwd. */
-	status = get_referred_path(ctx, r->in.path, jn,
-			&consumedcnt, &self_ref);
-	if(!NT_STATUS_IS_OK(status)) {
-		return ntstatus_to_werror(status);
+	if(NT_STATUS_IS_OK(get_referred_path(p->mem_ctx, dfspath, &jn, &consumedcnt, &self_ref))) {
+		exists = True;
+		jn.referral_count += 1;
+		old_referral_list = jn.referral_list;
+	} else {
+		jn.referral_count = 1;
 	}
 
-	exists = True;
-	jn->referral_count += 1;
-	old_referral_list = jn->referral_list;
-
 	vfs_ChDir(p->conn,p->conn->connectpath);
 
-	if (jn->referral_count < 1) {
-		return WERR_NOMEM;
-	}
-
-	jn->referral_list = TALLOC_ARRAY(ctx, struct referral, jn->referral_count);
-	if(jn->referral_list == NULL) {
+	jn.referral_list = TALLOC_ARRAY(p->mem_ctx, struct referral, jn.referral_count);
+	if(jn.referral_list == NULL) {
 		DEBUG(0,("init_reply_dfs_add: talloc failed for referral list!\n"));
 		return WERR_DFS_INTERNAL_ERROR;
 	}
 
-	if(old_referral_list && jn->referral_list) {
-		memcpy(jn->referral_list, old_referral_list,
-				sizeof(struct referral)*jn->referral_count-1);
+	if(old_referral_list) {
+		memcpy(jn.referral_list, old_referral_list, sizeof(struct referral)*jn.referral_count-1);
 	}
+  
+	jn.referral_list[jn.referral_count-1].proximity = 0;
+	jn.referral_list[jn.referral_count-1].ttl = REFERRAL_TTL;
 
-	jn->referral_list[jn->referral_count-1].proximity = 0;
-	jn->referral_list[jn->referral_count-1].ttl = REFERRAL_TTL;
-	jn->referral_list[jn->referral_count-1].alternate_path = altpath;
-
-	if(!create_msdfs_link(jn, exists)) {
+	pstrcpy(jn.referral_list[jn.referral_count-1].alternate_path, altpath);
+  
+	if(!create_msdfs_link(&jn, exists)) {
 		vfs_ChDir(p->conn,p->conn->connectpath);
 		return WERR_DFS_CANT_CREATE_JUNCT;
 	}
@@ -110,45 +103,51 @@
 	return WERR_OK;
 }
 
-WERROR _dfs_Remove(pipes_struct *p, struct dfs_Remove *r)
+WERROR _dfs_Remove(pipes_struct *p, NETDFS_Q_DFS_REMOVE *q_u, 
+                   NETDFS_R_DFS_REMOVE *r_u)
 {
-	struct junction_map *jn = NULL;
-	bool self_ref = False;
+	struct current_user user;
+	struct junction_map jn;
+	BOOL self_ref = False;
 	int consumedcnt = 0;
-	bool found = False;
-	TALLOC_CTX *ctx = talloc_tos();
-	char *altpath = NULL;
+	BOOL found = False;
 
-	if (p->pipe_user.ut.uid != 0) {
+	pstring dfspath, servername, sharename;
+	pstring altpath;
+
+	get_current_user(&user,p);
+
+	if (user.ut.uid != 0) {
 		DEBUG(10,("_dfs_remove: uid != 0. Access denied.\n"));
 		return WERR_ACCESS_DENIED;
 	}
 
-	jn = TALLOC_ZERO_P(ctx, struct junction_map);
-	if (!jn) {
-		return WERR_NOMEM;
+	unistr2_to_ascii(dfspath, &q_u->path, sizeof(dfspath)-1);
+	if(q_u->ptr0_server) {
+		unistr2_to_ascii(servername, &q_u->server, sizeof(servername)-1);
 	}
 
-	if (r->in.servername && r->in.sharename) {
-		altpath = talloc_asprintf(ctx, "%s\\%s",
-			r->in.servername,
-			r->in.sharename);
-		if (!altpath) {
-			return WERR_NOMEM;
-		}
+	if(q_u->ptr0_share) {
+		unistr2_to_ascii(sharename, &q_u->share, sizeof(sharename)-1);
+	}
+
+	if(q_u->ptr0_server && q_u->ptr0_share) {
+		pstrcpy(altpath, servername);
+		pstrcat(altpath, "\\");
+		pstrcat(altpath, sharename);
 		strlower_m(altpath);
-		DEBUG(5,("init_reply_dfs_remove: Request to remove %s -> %s\\%s.\n",
-			r->in.dfs_entry_path, r->in.servername, r->in.sharename));
 	}
 
-	if(!NT_STATUS_IS_OK(get_referred_path(ctx, r->in.dfs_entry_path, jn,
-				&consumedcnt, &self_ref))) {
+	DEBUG(5,("init_reply_dfs_remove: Request to remove %s -> %s\\%s.\n",
+		dfspath, servername, sharename));
+
+	if(!NT_STATUS_IS_OK(get_referred_path(p->mem_ctx, dfspath, &jn, &consumedcnt, &self_ref))) {
 		return WERR_DFS_NO_SUCH_VOL;
 	}
 
 	/* if no server-share pair given, remove the msdfs link completely */
-	if(!r->in.servername && !r->in.sharename) {
-		if(!remove_msdfs_link(jn)) {
+	if(!q_u->ptr0_server && !q_u->ptr0_share) {
+		if(!remove_msdfs_link(&jn)) {
 			vfs_ChDir(p->conn,p->conn->connectpath);
 			return WERR_DFS_NO_SUCH_VOL;
 		}
@@ -156,17 +155,14 @@
 	} else {
 		int i=0;
 		/* compare each referral in the list with the one to remove */
-		DEBUG(10,("altpath: .%s. refcnt: %d\n", altpath, jn->referral_count));
-		for(i=0;i<jn->referral_count;i++) {
-			char *refpath = talloc_strdup(ctx,
-					jn->referral_list[i].alternate_path);
-			if (!refpath) {
-				return WERR_NOMEM;
-			}
+		DEBUG(10,("altpath: .%s. refcnt: %d\n", altpath, jn.referral_count));
+		for(i=0;i<jn.referral_count;i++) {
+			pstring refpath;
+			pstrcpy(refpath,jn.referral_list[i].alternate_path);
 			trim_char(refpath, '\\', '\\');
 			DEBUG(10,("_dfs_remove:  refpath: .%s.\n", refpath));
 			if(strequal(refpath, altpath)) {
-				*(jn->referral_list[i].alternate_path)='\0';
+				*(jn.referral_list[i].alternate_path)='\0';
 				DEBUG(10,("_dfs_remove: Removal request matches referral %s\n",
 					refpath));
 				found = True;
@@ -178,13 +174,13 @@
 		}
 
 		/* Only one referral, remove it */
-		if(jn->referral_count == 1) {
-			if(!remove_msdfs_link(jn)) {
+		if(jn.referral_count == 1) {
+			if(!remove_msdfs_link(&jn)) {
 				vfs_ChDir(p->conn,p->conn->connectpath);
 				return WERR_DFS_NO_SUCH_VOL;
 			}
 		} else {
-			if(!create_msdfs_link(jn, True)) {
+			if(!create_msdfs_link(&jn, True)) { 
 				vfs_ChDir(p->conn,p->conn->connectpath);
 				return WERR_DFS_CANT_CREATE_JUNCT;
 			}
@@ -195,67 +191,68 @@
 	return WERR_OK;
 }
 
-static bool init_reply_dfs_info_1(TALLOC_CTX *mem_ctx, struct junction_map* j,struct dfs_Info1* dfs1)
+static BOOL init_reply_dfs_info_1(struct junction_map* j, NETDFS_DFS_INFO1* dfs1)
 {
-	dfs1->path = talloc_asprintf(mem_ctx,
-				"\\\\%s\\%s\\%s", global_myname(),
-				j->service_name, j->volume_name);
-	if (dfs1->path == NULL)
-		return False;
-
-	DEBUG(5,("init_reply_dfs_info_1: initing entrypath: %s\n",dfs1->path));
+	pstring str;
+	dfs1->ptr0_path = 1;
+	slprintf(str, sizeof(pstring)-1, "\\\\%s\\%s\\%s", global_myname(), 
+		j->service_name, j->volume_name);
+	DEBUG(5,("init_reply_dfs_info_1: initing entrypath: %s\n",str));
+	init_unistr2(&dfs1->path,str,UNI_STR_TERMINATE);
 	return True;
 }
 
-static bool init_reply_dfs_info_2(TALLOC_CTX *mem_ctx, struct junction_map* j, struct dfs_Info2* dfs2)
+static BOOL init_reply_dfs_info_2(struct junction_map* j, NETDFS_DFS_INFO2* dfs2)
 {
-	dfs2->path = talloc_asprintf(mem_ctx,
-			"\\\\%s\\%s\\%s", global_myname(), j->service_name, j->volume_name);
-	if (dfs2->path == NULL)
-		return False;
-	dfs2->comment = talloc_strdup(mem_ctx, j->comment);
+	pstring str;
+	dfs2->ptr0_path = 1;
+	slprintf(str, sizeof(pstring)-1, "\\\\%s\\%s\\%s", global_myname(),
+		j->service_name, j->volume_name);
+	init_unistr2(&dfs2->path, str, UNI_STR_TERMINATE);
+	dfs2->ptr0_comment = 0;
+	init_unistr2(&dfs2->comment, j->comment, UNI_STR_TERMINATE);
 	dfs2->state = 1; /* set up state of dfs junction as OK */
 	dfs2->num_stores = j->referral_count;
 	return True;
 }
 
-static bool init_reply_dfs_info_3(TALLOC_CTX *mem_ctx, struct junction_map* j, struct dfs_Info3* dfs3)
+static BOOL init_reply_dfs_info_3(TALLOC_CTX *ctx, struct junction_map* j, NETDFS_DFS_INFO3* dfs3)
 {
 	int ii;
+	pstring str;
+	dfs3->ptr0_path = 1;
 	if (j->volume_name[0] == '\0')
-		dfs3->path = talloc_asprintf(mem_ctx, "\\\\%s\\%s",
+		slprintf(str, sizeof(pstring)-1, "\\\\%s\\%s",
 			global_myname(), j->service_name);
 	else
-		dfs3->path = talloc_asprintf(mem_ctx, "\\\\%s\\%s\\%s", global_myname(),
+		slprintf(str, sizeof(pstring)-1, "\\\\%s\\%s\\%s", global_myname(),
 			j->service_name, j->volume_name);
 
-	if (dfs3->path == NULL)
-		return False;
-
-	dfs3->comment = talloc_strdup(mem_ctx, j->comment);
+	init_unistr2(&dfs3->path, str, UNI_STR_TERMINATE);
+	dfs3->ptr0_comment = 1;
+	init_unistr2(&dfs3->comment, j->comment, UNI_STR_TERMINATE);
 	dfs3->state = 1;
-	dfs3->num_stores = j->referral_count;
-
+	dfs3->num_stores = dfs3->size_stores = j->referral_count;
+    
 	/* also enumerate the stores */
 	if (j->referral_count) {
-		dfs3->stores = TALLOC_ARRAY(mem_ctx, struct dfs_StorageInfo, j->referral_count);
+		dfs3->stores = TALLOC_ARRAY(ctx, NETDFS_DFS_STORAGEINFO, j->referral_count);
 		if (!dfs3->stores)
 			return False;
-		memset(dfs3->stores, '\0', j->referral_count * sizeof(struct dfs_StorageInfo));
+		memset(dfs3->stores, '\0', j->referral_count * sizeof(NETDFS_DFS_STORAGEINFO));
+		dfs3->ptr0_stores = 1;
 	} else {
 		dfs3->stores = NULL;
+		dfs3->ptr0_stores = 0;
 	}
 
 	for(ii=0;ii<j->referral_count;ii++) {
-		char* p;
-		char *path = NULL;
- 		struct dfs_StorageInfo* stor = &(dfs3->stores[ii]);
+		char* p; 
+		pstring path;
+		NETDFS_DFS_STORAGEINFO* stor = &(dfs3->stores[ii]);
 		struct referral* ref = &(j->referral_list[ii]);
-
-		path = talloc_strdup(mem_ctx, ref->alternate_path);
-		if (!path) {
-			return False;
-		}
+  
+		pstrcpy(path, ref->alternate_path);
 		trim_char(path,'\\','\0');
 		p = strrchr_m(path,'\\');
 		if(p==NULL) {
@@ -265,281 +262,245 @@
 		*p = '\0';
 		DEBUG(5,("storage %d: %s.%s\n",ii,path,p+1));
 		stor->state = 2; /* set all stores as ONLINE */
-		stor->server = talloc_strdup(mem_ctx, path);
-		stor->share = talloc_strdup(mem_ctx, p+1);
+		init_unistr2(&stor->server, path, UNI_STR_TERMINATE);
+		init_unistr2(&stor->share,  p+1, UNI_STR_TERMINATE);
+		stor->ptr0_server = stor->ptr0_share = 1;
 	}
 	return True;
 }
 
-static bool init_reply_dfs_info_100(TALLOC_CTX *mem_ctx, struct junction_map* j, struct dfs_Info100* dfs100)
+static BOOL init_reply_dfs_info_100(struct junction_map* j, NETDFS_DFS_INFO100* dfs100)
 {
-	dfs100->comment = talloc_strdup(mem_ctx, j->comment);
+	dfs100->ptr0_comment = 1;
+	init_unistr2(&dfs100->comment, j->comment, UNI_STR_TERMINATE);
 	return True;
 }
 
-WERROR _dfs_Enum(pipes_struct *p, struct dfs_Enum *r)
+
+WERROR _dfs_Enum(pipes_struct *p, NETDFS_Q_DFS_ENUM *q_u, NETDFS_R_DFS_ENUM *r_u)
 {
-	struct junction_map *jn = NULL;
-	size_t num_jn = 0;
-	size_t i;
-	TALLOC_CTX *ctx = talloc_tos();
+	uint32 level = q_u->level;
+	struct junction_map jn[MAX_MSDFS_JUNCTIONS];
+	int num_jn = 0;
+	int i;
 
-	jn = enum_msdfs_links(ctx, &num_jn);
-	if (!jn || num_jn == 0) {
-		num_jn = 0;
-		jn = NULL;
-	}
+	num_jn = enum_msdfs_links(p->mem_ctx, jn, ARRAY_SIZE(jn));
 	vfs_ChDir(p->conn,p->conn->connectpath);
+    
+	DEBUG(5,("_dfs_Enum: %d junctions found in Dfs, doing level %d\n", num_jn, level));
 
-	DEBUG(5,("_dfs_Enum: %u junctions found in Dfs, doing level %d\n",
-				(unsigned int)num_jn, r->in.level));
+	r_u->ptr0_info = q_u->ptr0_info;
+	r_u->ptr0_total = q_u->ptr0_total;
+	r_u->total = num_jn;
 
-	*r->out.total = num_jn;
+	r_u->info = q_u->info;
 
 	/* Create the return array */
-	switch (r->in.level) {
+	switch (level) {
 	case 1:
+		r_u->info.e.u.info1.count = num_jn;
 		if (num_jn) {
-			if ((r->out.info->e.info1->s = TALLOC_ARRAY(ctx, struct dfs_Info1, num_jn)) == NULL) {
+			if ((r_u->info.e.u.info1.s = TALLOC_ARRAY(p->mem_ctx, NETDFS_DFS_INFO1, num_jn)) == NULL) {
 				return WERR_NOMEM;
 			}
-		} else {
-			r->out.info->e.info1->s = NULL;
+			r_u->info.e.u.info1.ptr0_s = 1;
+			r_u->info.e.u.info1.size_s = num_jn;
 		}
-		r->out.info->e.info1->count = num_jn;
 		break;
 	case 2:
+		r_u->info.e.u.info2.count = num_jn;
 		if (num_jn) {
-			if ((r->out.info->e.info2->s = TALLOC_ARRAY(ctx, struct dfs_Info2, num_jn)) == NULL) {
+			if ((r_u->info.e.u.info2.s = TALLOC_ARRAY(p->mem_ctx, NETDFS_DFS_INFO2, num_jn)) == NULL) {
 				return WERR_NOMEM;
 			}
-		} else {
-			r->out.info->e.info2->s = NULL;
+			r_u->info.e.u.info2.ptr0_s = 1;
+			r_u->info.e.u.info2.size_s = num_jn;
 		}
-		r->out.info->e.info2->count = num_jn;
 		break;
 	case 3:
+		r_u->info.e.u.info3.count = num_jn;
 		if (num_jn) {
-			if ((r->out.info->e.info3->s = TALLOC_ARRAY(ctx, struct dfs_Info3, num_jn)) == NULL) {
+			if ((r_u->info.e.u.info3.s = TALLOC_ARRAY(p->mem_ctx, NETDFS_DFS_INFO3, num_jn)) == NULL) {
 				return WERR_NOMEM;
 			}
-		} else {
-			r->out.info->e.info3->s = NULL;
+			r_u->info.e.u.info3.ptr0_s = 1;
+			r_u->info.e.u.info3.size_s = num_jn;
 		}
-		r->out.info->e.info3->count = num_jn;
 		break;
 	default:
 		return WERR_INVALID_PARAM;
 	}
 
 	for (i = 0; i < num_jn; i++) {
-		switch (r->in.level) {
-		case 1:
-			init_reply_dfs_info_1(ctx, &jn[i], &r->out.info->e.info1->s[i]);
+		switch (level) {
+		case 1: 
+			init_reply_dfs_info_1(&jn[i], &r_u->info.e.u.info1.s[i]);
 			break;
 		case 2:
-			init_reply_dfs_info_2(ctx, &jn[i], &r->out.info->e.info2->s[i]);
+			init_reply_dfs_info_2(&jn[i], &r_u->info.e.u.info2.s[i]);
 			break;
 		case 3:
-			init_reply_dfs_info_3(ctx, &jn[i], &r->out.info->e.info3->s[i]);
+			init_reply_dfs_info_3(p->mem_ctx, &jn[i], &r_u->info.e.u.info3.s[i]);
 			break;
 		default:
 			return WERR_INVALID_PARAM;
 		}
 	}
+  
+	r_u->status = WERR_OK;
 
-	return WERR_OK;
+	return r_u->status;
 }
-
-WERROR _dfs_GetInfo(pipes_struct *p, struct dfs_GetInfo *r)
+      
+WERROR _dfs_GetInfo(pipes_struct *p, NETDFS_Q_DFS_GETINFO *q_u, 
+                     NETDFS_R_DFS_GETINFO *r_u)
 {
-	int consumedcnt = strlen(r->in.dfs_entry_path);
-	struct junction_map *jn = NULL;
-	bool self_ref = False;
-	TALLOC_CTX *ctx = talloc_tos();
-	bool ret;
+	UNISTR2* uni_path = &q_u->path;
+	uint32 level = q_u->level;
+	int consumedcnt = sizeof(pstring);
+	pstring path;
+	BOOL ret = False;
+	BOOL self_ref = False;
+	struct junction_map jn;
 
-	jn = TALLOC_ZERO_P(ctx, struct junction_map);
-	if (!jn) {
-		return WERR_NOMEM;
-	}
-
-	if(!create_junction(ctx, r->in.dfs_entry_path, jn)) {
+	unistr2_to_ascii(path, uni_path, sizeof(path)-1);
+	if(!create_junction(path, &jn))
 		return WERR_DFS_NO_SUCH_SERVER;
-	}
-
+  
 	/* The following call can change the cwd. */
-	if(!NT_STATUS_IS_OK(get_referred_path(ctx, r->in.dfs_entry_path,
-					jn, &consumedcnt, &self_ref)) ||
-			consumedcnt < strlen(r->in.dfs_entry_path)) {
+	if(!NT_STATUS_IS_OK(get_referred_path(p->mem_ctx, path, &jn, &consumedcnt, &self_ref)) || consumedcnt < strlen(path)) {
 		vfs_ChDir(p->conn,p->conn->connectpath);
 		return WERR_DFS_NO_SUCH_VOL;
 	}
 
 	vfs_ChDir(p->conn,p->conn->connectpath);
+	r_u->info.switch_value = level;
+	r_u->info.ptr0 = 1;
+	r_u->status = WERR_OK;
 
-	switch (r->in.level) {
-		case 1:
-			r->out.info->info1 = TALLOC_ZERO_P(ctx,struct dfs_Info1);
-			if (!r->out.info->info1) {
-				return WERR_NOMEM;
-			}
-			ret = init_reply_dfs_info_1(ctx, jn, r->out.info->info1);
-			break;
-		case 2:
-			r->out.info->info2 = TALLOC_ZERO_P(ctx,struct dfs_Info2);
-			if (!r->out.info->info2) {
-				return WERR_NOMEM;
-			}
-			ret = init_reply_dfs_info_2(ctx, jn, r->out.info->info2);
-			break;
-		case 3:
-			r->out.info->info3 = TALLOC_ZERO_P(ctx,struct dfs_Info3);
-			if (!r->out.info->info3) {
-				return WERR_NOMEM;
-			}
-			ret = init_reply_dfs_info_3(ctx, jn, r->out.info->info3);
-			break;
-		case 100:
-			r->out.info->info100 = TALLOC_ZERO_P(ctx,struct dfs_Info100);
-			if (!r->out.info->info100) {
-				return WERR_NOMEM;
-			}
-			ret = init_reply_dfs_info_100(ctx, jn, r->out.info->info100);
-			break;
+	switch (level) {
+		case 1: ret = init_reply_dfs_info_1(&jn, &r_u->info.u.info1); break;
+		case 2: ret = init_reply_dfs_info_2(&jn, &r_u->info.u.info2); break;
+		case 3: ret = init_reply_dfs_info_3(p->mem_ctx, &jn, &r_u->info.u.info3); break;
+		case 100: ret = init_reply_dfs_info_100(&jn, &r_u->info.u.info100); break;
 		default:
-			r->out.info->info1 = NULL;
-			return WERR_INVALID_PARAM;
+			r_u->info.ptr0 = 1;
+			r_u->info.switch_value = 0;
+			r_u->status = WERR_OK;
+			ret = True;
+			break;
 	}
 
-	if (!ret)
-		return WERR_INVALID_PARAM;
-
-	return WERR_OK;
+	if (!ret) 
+		r_u->status = WERR_INVALID_PARAM;
+  
+	return r_u->status;
 }
 
-WERROR _dfs_SetInfo(pipes_struct *p, struct dfs_SetInfo *r)
+WERROR _dfs_SetInfo(pipes_struct *p, NETDFS_Q_DFS_SETINFO *q_u, NETDFS_R_DFS_SETINFO *r_u)
 {
 	/* FIXME: Implement your code here */
-	p->rng_fault_state = True;
 	return WERR_NOT_SUPPORTED;
 }
 
-WERROR _dfs_Rename(pipes_struct *p, struct dfs_Rename *r)
+WERROR _dfs_Rename(pipes_struct *p, NETDFS_Q_DFS_RENAME *q_u, NETDFS_R_DFS_RENAME *r_u)
 {
 	/* FIXME: Implement your code here */
-	p->rng_fault_state = True;
 	return WERR_NOT_SUPPORTED;
 }
 
-WERROR _dfs_Move(pipes_struct *p, struct dfs_Move *r)
+WERROR _dfs_Move(pipes_struct *p, NETDFS_Q_DFS_MOVE *q_u, NETDFS_R_DFS_MOVE *r_u)
 {
 	/* FIXME: Implement your code here */
-	p->rng_fault_state = True;
 	return WERR_NOT_SUPPORTED;
 }
 
-WERROR _dfs_ManagerGetConfigInfo(pipes_struct *p, struct dfs_ManagerGetConfigInfo *r)
+WERROR _dfs_ManagerGetConfigInfo(pipes_struct *p, NETDFS_Q_DFS_MANAGERGETCONFIGINFO *q_u, NETDFS_R_DFS_MANAGERGETCONFIGINFO *r_u)
 {
 	/* FIXME: Implement your code here */
-	p->rng_fault_state = True;
 	return WERR_NOT_SUPPORTED;
 }
 
-WERROR _dfs_ManagerSendSiteInfo(pipes_struct *p, struct dfs_ManagerSendSiteInfo *r)
+WERROR _dfs_ManagerSendSiteInfo(pipes_struct *p, NETDFS_Q_DFS_MANAGERSENDSITEINFO *q_u, NETDFS_R_DFS_MANAGERSENDSITEINFO *r_u)
 {
 	/* FIXME: Implement your code here */
-	p->rng_fault_state = True;
 	return WERR_NOT_SUPPORTED;
 }
 
-WERROR _dfs_AddFtRoot(pipes_struct *p, struct dfs_AddFtRoot *r)
+WERROR _dfs_AddFtRoot(pipes_struct *p, NETDFS_Q_DFS_ADDFTROOT *q_u, NETDFS_R_DFS_ADDFTROOT *r_u)
 {
 	/* FIXME: Implement your code here */
-	p->rng_fault_state = True;
 	return WERR_NOT_SUPPORTED;
 }
 
-WERROR _dfs_RemoveFtRoot(pipes_struct *p, struct dfs_RemoveFtRoot *r)
+WERROR _dfs_RemoveFtRoot(pipes_struct *p, NETDFS_Q_DFS_REMOVEFTROOT *q_u, NETDFS_R_DFS_REMOVEFTROOT *r_u)
 {
 	/* FIXME: Implement your code here */
-	p->rng_fault_state = True;
 	return WERR_NOT_SUPPORTED;
 }
 
-WERROR _dfs_AddStdRoot(pipes_struct *p, struct dfs_AddStdRoot *r)
+WERROR _dfs_AddStdRoot(pipes_struct *p, NETDFS_Q_DFS_ADDSTDROOT *q_u, NETDFS_R_DFS_ADDSTDROOT *r_u)
 {
 	/* FIXME: Implement your code here */
-	p->rng_fault_state = True;
 	return WERR_NOT_SUPPORTED;
 }
 
-WERROR _dfs_RemoveStdRoot(pipes_struct *p, struct dfs_RemoveStdRoot *r)
+WERROR _dfs_RemoveStdRoot(pipes_struct *p, NETDFS_Q_DFS_REMOVESTDROOT *q_u, NETDFS_R_DFS_REMOVESTDROOT *r_u)
 {
 	/* FIXME: Implement your code here */
-	p->rng_fault_state = True;
 	return WERR_NOT_SUPPORTED;
 }
 
-WERROR _dfs_ManagerInitialize(pipes_struct *p, struct dfs_ManagerInitialize *r)
+WERROR _dfs_ManagerInitialize(pipes_struct *p, NETDFS_Q_DFS_MANAGERINITIALIZE *q_u, NETDFS_R_DFS_MANAGERINITIALIZE *r_u)
 {
 	/* FIXME: Implement your code here */
-	p->rng_fault_state = True;
 	return WERR_NOT_SUPPORTED;
 }
 
-WERROR _dfs_AddStdRootForced(pipes_struct *p, struct dfs_AddStdRootForced *r)
+WERROR _dfs_AddStdRootForced(pipes_struct *p, NETDFS_Q_DFS_ADDSTDROOTFORCED *q_u, NETDFS_R_DFS_ADDSTDROOTFORCED *r_u)
 {
 	/* FIXME: Implement your code here */
-	p->rng_fault_state = True;
 	return WERR_NOT_SUPPORTED;
 }
 
-WERROR _dfs_GetDcAddress(pipes_struct *p, struct dfs_GetDcAddress *r)
+WERROR _dfs_GetDcAddress(pipes_struct *p, NETDFS_Q_DFS_GETDCADDRESS *q_u, NETDFS_R_DFS_GETDCADDRESS *r_u)
 {
 	/* FIXME: Implement your code here */
-	p->rng_fault_state = True;
 	return WERR_NOT_SUPPORTED;
 }
 
-WERROR _dfs_SetDcAddress(pipes_struct *p, struct dfs_SetDcAddress *r)
+WERROR _dfs_SetDcAddress(pipes_struct *p, NETDFS_Q_DFS_SETDCADDRESS *q_u, NETDFS_R_DFS_SETDCADDRESS *r_u)
 {
 	/* FIXME: Implement your code here */
-	p->rng_fault_state = True;
 	return WERR_NOT_SUPPORTED;
 }
 
-WERROR _dfs_FlushFtTable(pipes_struct *p, struct dfs_FlushFtTable *r)
+WERROR _dfs_FlushFtTable(pipes_struct *p, NETDFS_Q_DFS_FLUSHFTTABLE *q_u, NETDFS_R_DFS_FLUSHFTTABLE *r_u)
 {
 	/* FIXME: Implement your code here */
-	p->rng_fault_state = True;
 	return WERR_NOT_SUPPORTED;
 }
 
-WERROR _dfs_Add2(pipes_struct *p, struct dfs_Add2 *r)
+WERROR _dfs_Add2(pipes_struct *p, NETDFS_Q_DFS_ADD2 *q_u, NETDFS_R_DFS_ADD2 *r_u)
 {
 	/* FIXME: Implement your code here */
-	p->rng_fault_state = True;
 	return WERR_NOT_SUPPORTED;
 }
 
-WERROR _dfs_Remove2(pipes_struct *p, struct dfs_Remove2 *r)
+WERROR _dfs_Remove2(pipes_struct *p, NETDFS_Q_DFS_REMOVE2 *q_u, NETDFS_R_DFS_REMOVE2 *r_u)
 {
 	/* FIXME: Implement your code here */
-	p->rng_fault_state = True;
 	return WERR_NOT_SUPPORTED;
 }
 
-WERROR _dfs_EnumEx(pipes_struct *p, struct dfs_EnumEx *r)
+WERROR _dfs_EnumEx(pipes_struct *p, NETDFS_Q_DFS_ENUMEX *q_u, NETDFS_R_DFS_ENUMEX *r_u)
 {
 	/* FIXME: Implement your code here */
-	p->rng_fault_state = True;
 	return WERR_NOT_SUPPORTED;
 }
 
-WERROR _dfs_SetInfo2(pipes_struct *p, struct dfs_SetInfo2 *r)
+WERROR _dfs_SetInfo2(pipes_struct *p, NETDFS_Q_DFS_SETINFO2 *q_u, NETDFS_R_DFS_SETINFO2 *r_u)
 {
 	/* FIXME: Implement your code here */
-	p->rng_fault_state = True;
 	return WERR_NOT_SUPPORTED;
 }

Deleted: branches/samba/upstream/source/rpc_server/srv_dssetup_nt.c
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_dssetup_nt.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_server/srv_dssetup_nt.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,223 +0,0 @@
-/*
- *  Unix SMB/CIFS implementation.
- *  RPC Pipe client / server routines
- *  Copyright (C) Andrew Tridgell               1992-1997.
- *  Copyright (C) Luke Kenneth Casson Leighton  1996-1997.
- *  Copyright (C) Paul Ashton                        1997.
- *  Copyright (C) Jeremy Allison                     2001.
- *  Copyright (C) Gerald Carter                      2002.
- *  Copyright (C) Guenther Deschner                  2008.
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "includes.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_RPC_SRV
-
-/********************************************************************
- Fill in a dssetup_DsRolePrimaryDomInfoBasic structure
- ********************************************************************/
-
-static WERROR fill_dsrole_dominfo_basic(TALLOC_CTX *ctx,
-					struct dssetup_DsRolePrimaryDomInfoBasic **info)
-{
-	struct dssetup_DsRolePrimaryDomInfoBasic *basic = NULL;
-	char *dnsdomain = NULL;
-
-	DEBUG(10,("fill_dsrole_dominfo_basic: enter\n"));
-
-	basic = TALLOC_ZERO_P(ctx, struct dssetup_DsRolePrimaryDomInfoBasic);
-	if (!basic) {
-		DEBUG(0,("fill_dsrole_dominfo_basic: out of memory\n"));
-		return WERR_NOMEM;
-	}
-
-	switch (lp_server_role()) {
-		case ROLE_STANDALONE:
-			basic->role = DS_ROLE_STANDALONE_SERVER;
-			basic->domain = get_global_sam_name();
-			break;
-		case ROLE_DOMAIN_MEMBER:
-			basic->role = DS_ROLE_MEMBER_SERVER;
-			basic->domain = lp_workgroup();
-			break;
-		case ROLE_DOMAIN_BDC:
-			basic->role = DS_ROLE_BACKUP_DC;
-			basic->domain = get_global_sam_name();
-			break;
-		case ROLE_DOMAIN_PDC:
-			basic->role = DS_ROLE_PRIMARY_DC;
-			basic->domain = get_global_sam_name();
-			break;
-	}
-
-	if (secrets_fetch_domain_guid(lp_workgroup(), &basic->domain_guid)) {
-		basic->flags |= DS_ROLE_PRIMARY_DOMAIN_GUID_PRESENT;
-	}
-
-	/* fill in some additional fields if we are a member of an AD domain */
-
-	if (lp_security() == SEC_ADS) {
-		dnsdomain = talloc_strdup(ctx, lp_realm());
-		if (!dnsdomain) {
-			return WERR_NOMEM;
-		}
-		strlower_m(dnsdomain);
-		basic->dns_domain = dnsdomain;
-
-		/* FIXME!! We really should fill in the correct forest
-		   name.  Should get this information from winbindd.  */
-		basic->forest = dnsdomain;
-	} else {
-		/* security = domain should not fill in the dns or
-		   forest name */
-		basic->dns_domain = NULL;
-		basic->forest = NULL;
-	}
-
-	*info = basic;
-
-	return WERR_OK;
-}
-
-/********************************************************************
- Implement the _dssetup_DsRoleGetPrimaryDomainInformation() call
- ********************************************************************/
-
-WERROR _dssetup_DsRoleGetPrimaryDomainInformation(pipes_struct *p,
-						  struct dssetup_DsRoleGetPrimaryDomainInformation *r)
-{
-	WERROR werr = WERR_OK;
-
-	switch (r->in.level) {
-
-		case DS_ROLE_BASIC_INFORMATION: {
-			struct dssetup_DsRolePrimaryDomInfoBasic *basic = NULL;
-			werr = fill_dsrole_dominfo_basic(p->mem_ctx, &basic);
-			if (W_ERROR_IS_OK(werr)) {
-				r->out.info->basic = *basic;
-			}
-			break;
-		}
-		default:
-			DEBUG(0,("_dssetup_DsRoleGetPrimaryDomainInformation: "
-				"Unknown info level [%d]!\n", r->in.level));
-			werr = WERR_UNKNOWN_LEVEL;
-	}
-
-	return werr;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _dssetup_DsRoleDnsNameToFlatName(pipes_struct *p,
-					struct dssetup_DsRoleDnsNameToFlatName *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _dssetup_DsRoleDcAsDc(pipes_struct *p,
-			     struct dssetup_DsRoleDcAsDc *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _dssetup_DsRoleDcAsReplica(pipes_struct *p,
-				  struct dssetup_DsRoleDcAsReplica *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _dssetup_DsRoleDemoteDc(pipes_struct *p,
-			       struct dssetup_DsRoleDemoteDc *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _dssetup_DsRoleGetDcOperationProgress(pipes_struct *p,
-					     struct dssetup_DsRoleGetDcOperationProgress *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _dssetup_DsRoleGetDcOperationResults(pipes_struct *p,
-					    struct dssetup_DsRoleGetDcOperationResults *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _dssetup_DsRoleCancel(pipes_struct *p,
-			     struct dssetup_DsRoleCancel *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _dssetup_DsRoleServerSaveStateForUpgrade(pipes_struct *p,
-						struct dssetup_DsRoleServerSaveStateForUpgrade *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _dssetup_DsRoleUpgradeDownlevelServer(pipes_struct *p,
-					     struct dssetup_DsRoleUpgradeDownlevelServer *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _dssetup_DsRoleAbortDownlevelServerUpgrade(pipes_struct *p,
-						  struct dssetup_DsRoleAbortDownlevelServerUpgrade *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-

Copied: branches/samba/upstream/source/rpc_server/srv_echo.c (from rev 1928, branches/samba/upstream/source/rpc_server/srv_echo.c)
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_echo.c	                        (rev 0)
+++ branches/samba/upstream/source/rpc_server/srv_echo.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,150 @@
+/* 
+ *  Unix SMB/CIFS implementation.
+ *  RPC Pipe client / server routines for rpcecho
+ *  Copyright (C) Tim Potter                   2003.
+ *  
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/* This is the interface to the rpcecho pipe. */
+
+#include "includes.h"
+#include "nterr.h"
+
+#ifdef DEVELOPER
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_RPC_SRV
+
+static BOOL api_add_one(pipes_struct *p)
+{
+	ECHO_Q_ADD_ONE q_u;
+	ECHO_R_ADD_ONE r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if(!echo_io_q_add_one("", &q_u, data, 0))
+		return False;
+	
+	_echo_add_one(p, &q_u, &r_u);
+	
+	if(!echo_io_r_add_one("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+static BOOL api_echo_data(pipes_struct *p)
+{
+	ECHO_Q_ECHO_DATA q_u;
+	ECHO_R_ECHO_DATA r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if(!echo_io_q_echo_data("", &q_u, data, 0))
+		return False;
+	
+	_echo_data(p, &q_u, &r_u);
+	
+	if(!echo_io_r_echo_data("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+static BOOL api_source_data(pipes_struct *p)
+{
+	ECHO_Q_SOURCE_DATA q_u;
+	ECHO_R_SOURCE_DATA r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if(!echo_io_q_source_data("", &q_u, data, 0))
+		return False;
+	
+	_source_data(p, &q_u, &r_u);
+	
+	if(!echo_io_r_source_data("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+static BOOL api_sink_data(pipes_struct *p)
+{
+	ECHO_Q_SINK_DATA q_u;
+	ECHO_R_SINK_DATA r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if(!echo_io_q_sink_data("", &q_u, data, 0))
+		return False;
+	
+	_sink_data(p, &q_u, &r_u);
+	
+	if(!echo_io_r_sink_data("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+\pipe\rpcecho commands
+********************************************************************/
+
+struct api_struct api_echo_cmds[] = {
+	{"ADD_ONE",       ECHO_ADD_ONE,     api_add_one },
+	{"ECHO_DATA",     ECHO_DATA,        api_echo_data },
+	{"SOURCE_DATA",   ECHO_SOURCE_DATA, api_source_data },
+	{"SINK_DATA",     ECHO_SINK_DATA,   api_sink_data },
+};
+
+
+void echo_get_pipe_fns( struct api_struct **fns, int *n_fns )
+{
+	*fns = api_echo_cmds;
+	*n_fns = sizeof(api_echo_cmds) / sizeof(struct api_struct);
+}
+
+NTSTATUS rpc_echo_init(void)
+{
+	return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION,
+		"rpcecho", "rpcecho", api_echo_cmds,
+		sizeof(api_echo_cmds) / sizeof(struct api_struct));
+}
+
+#else /* DEVELOPER */
+
+NTSTATUS rpc_echo_init(void)
+{
+	return NT_STATUS_OK;
+}
+#endif /* DEVELOPER */

Modified: branches/samba/upstream/source/rpc_server/srv_echo_nt.c
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_echo_nt.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_server/srv_echo_nt.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,13 +1,11 @@
 /* 
  *  Unix SMB/CIFS implementation.
  *  RPC Pipe client / server routines for rpcecho
- *  Copyright (C) Tim Potter                   2003
- *  Copyright (C) Jelmer Vernooij              2006
- *  Copyright (C) Gerald (Jerry) Carter        2007
+ *  Copyright (C) Tim Potter                   2003.
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -16,7 +14,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 /* This is the interface to the rpcecho pipe. */
@@ -31,95 +30,59 @@
 
 /* Add one to the input and return it */
 
-void _echo_AddOne(pipes_struct *p, struct echo_AddOne *r )
+void _echo_add_one(pipes_struct *p, ECHO_Q_ADD_ONE *q_u, ECHO_R_ADD_ONE *r_u)
 {
-	DEBUG(10, ("_echo_AddOne\n"));
+	DEBUG(10, ("_echo_add_one\n"));
 
-	*r->out.out_data = r->in.in_data + 1;	
+	r_u->response = q_u->request + 1;
 }
 
 /* Echo back an array of data */
 
-void _echo_EchoData(pipes_struct *p, struct echo_EchoData *r)
+void _echo_data(pipes_struct *p, ECHO_Q_ECHO_DATA *q_u, 
+		ECHO_R_ECHO_DATA *r_u)
 {
-	DEBUG(10, ("_echo_EchoData\n"));
+	DEBUG(10, ("_echo_data\n"));
 
-	if ( r->in.len == 0 ) {		
-		r->out.out_data = NULL;
+	if (q_u->size == 0) {
+		r_u->data = NULL;
+		r_u->size = 0;
 		return;
 	}
-
-	r->out.out_data = TALLOC_ARRAY(p->mem_ctx, uint8, r->in.len);
-	memcpy( r->out.out_data, r->in.in_data, r->in.len );
-	return;	
+	r_u->data = TALLOC(p->mem_ctx, q_u->size);
+	r_u->size = q_u->size;
+	memcpy(r_u->data, q_u->data, q_u->size);
 }
 
 /* Sink an array of data */
 
-void _echo_SinkData(pipes_struct *p, struct echo_SinkData *r)
+void _sink_data(pipes_struct *p, ECHO_Q_SINK_DATA *q_u, 
+		ECHO_R_SINK_DATA *r_u)
 {
-	DEBUG(10, ("_echo_SinkData\n"));
+	DEBUG(10, ("_sink_data\n"));
 
 	/* My that was some yummy data! */
-	return;	
 }
 
 /* Source an array of data */
 
-void _echo_SourceData(pipes_struct *p, struct echo_SourceData *r)
+void _source_data(pipes_struct *p, ECHO_Q_SOURCE_DATA *q_u, 
+		  ECHO_R_SOURCE_DATA *r_u)
 {
 	uint32 i;
 
-	DEBUG(10, ("_echo_SourceData\n"));
+	DEBUG(10, ("_source_data\n"));
 
-	if ( r->in.len == 0 ) {
-		r->out.data = NULL;		
+	if (q_u->size == 0) {
+		r_u->data = NULL;
+		r_u->size = 0;
 		return;
 	}
+	r_u->data = TALLOC(p->mem_ctx, q_u->size);
+	r_u->size = q_u->size;
 
-	r->out.data = TALLOC_ARRAY(p->mem_ctx, uint8, r->in.len );
-
-	for (i = 0; i < r->in.len; i++ ) {		
-		r->out.data[i] = i & 0xff;
-	}
-	
-	return;	
+	for (i = 0; i < r_u->size; i++)
+		r_u->data[i] = i & 0xff;
 }
 
-void _echo_TestCall(pipes_struct *p, struct echo_TestCall *r)
-{
-	p->rng_fault_state = True;
-	return;
-}
-
-NTSTATUS _echo_TestCall2(pipes_struct *p, struct echo_TestCall2 *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_OK;
-}
-
-uint32 _echo_TestSleep(pipes_struct *p, struct echo_TestSleep *r)
-{
-	p->rng_fault_state = True;
-	return 0;
-}
-
-void _echo_TestEnum(pipes_struct *p, struct echo_TestEnum *r)
-{
-	p->rng_fault_state = True;
-	return;
-}
-
-void _echo_TestSurrounding(pipes_struct *p, struct echo_TestSurrounding *r)
-{
-	p->rng_fault_state = True;
-	return;
-}
-
-uint16 _echo_TestDoublePointer(pipes_struct *p, struct echo_TestDoublePointer *r)
-{
-	p->rng_fault_state = True;
-	return 0;
-}
-
 #endif /* DEVELOPER */

Modified: branches/samba/upstream/source/rpc_server/srv_eventlog.c
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_eventlog.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_server/srv_eventlog.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,12 +1,11 @@
 /* 
  *  Unix SMB/CIFS implementation.
  *  RPC Pipe client / server routines
- *  Copyright (C) Marcin Krzysztof Porwit         2005.
- *  Copyright (C) Gerald Carter                   2005 - 2007
+ *  Copyright (C) Marcin Krzysztof Porwit    2005.
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -15,7 +14,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
  
 #include "includes.h"
@@ -23,44 +23,107 @@
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_SRV
 
-static bool proxy_eventlog_call(pipes_struct *p, uint8 opnum)
+static BOOL api_eventlog_open_eventlog(pipes_struct *p)
 {
-	struct api_struct *fns;
-	int n_fns;
+	EVENTLOG_Q_OPEN_EVENTLOG q_u;
+	EVENTLOG_R_OPEN_EVENTLOG r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
 
-	eventlog_get_pipe_fns(&fns, &n_fns);
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
 
-	if (opnum >= n_fns)
+	if (!(eventlog_io_q_open_eventlog("", &q_u, data, 0))) {
+		DEBUG(0, ("eventlog_io_q_open_eventlog: unable to unmarshall EVENTLOG_Q_OPEN_EVENTLOG.\n"));
 		return False;
+	}
+	
+	r_u.status = _eventlog_open_eventlog(p, &q_u, &r_u);
 
-	if (fns[opnum].opnum != opnum) {
-		smb_panic("EVENTLOG function table not sorted\n");
+	if (!(eventlog_io_r_open_eventlog("", &r_u, rdata, 0))) {
+		DEBUG(0, ("eventlog_io_r_open_eventlog: unable to marshall EVENTLOG_R_OPEN_EVENTLOG.\n"));
+		return False;
 	}
 
-	return fns[opnum].fn(p);
+	return True;
 }
 
-static bool api_eventlog_open_eventlog(pipes_struct *p)
+static BOOL api_eventlog_close_eventlog(pipes_struct *p)
 {
-	return proxy_eventlog_call(p, NDR_EVENTLOG_OPENEVENTLOGW);
+	EVENTLOG_Q_CLOSE_EVENTLOG q_u;
+	EVENTLOG_R_CLOSE_EVENTLOG r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!(eventlog_io_q_close_eventlog("", &q_u, data, 0))) {
+		DEBUG(0, ("eventlog_io_q_close_eventlog: unable to unmarshall EVENTLOG_Q_CLOSE_EVENTLOG.\n"));
+		return False;
+	}
+
+	r_u.status = _eventlog_close_eventlog(p, &q_u, &r_u);
+
+	if (!(eventlog_io_r_close_eventlog("", &r_u, rdata, 0))) {
+		DEBUG(0, ("eventlog_io_r_close_eventlog: unable to marshall EVENTLOG_R_CLOSE_EVENTLOG.\n"));
+		return False;
+	}
+
+	return True;
 }
 
-static bool api_eventlog_close_eventlog(pipes_struct *p)
+static BOOL api_eventlog_get_num_records(pipes_struct *p)
 {
-	return proxy_eventlog_call( p, NDR_EVENTLOG_CLOSEEVENTLOG );	
+	EVENTLOG_Q_GET_NUM_RECORDS q_u;
+	EVENTLOG_R_GET_NUM_RECORDS r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!(eventlog_io_q_get_num_records("", &q_u, data, 0))) {
+		DEBUG(0, ("eventlog_io_q_get_num_records: unable to unmarshall EVENTLOG_Q_GET_NUM_RECORDS.\n"));
+		return False;
+	}
+    
+	r_u.status = _eventlog_get_num_records(p, &q_u, &r_u);
+    
+	if (!(eventlog_io_r_get_num_records("", &r_u, rdata, 0))) {
+		DEBUG(0, ("eventlog_io_r_get_num_records: unable to marshall EVENTLOG_R_GET_NUM_RECORDS.\n"));
+		return False;
+	}
+
+	return True;
 }
 
-static bool api_eventlog_get_num_records(pipes_struct *p)
+static BOOL api_eventlog_get_oldest_entry(pipes_struct *p)
 {
-	return proxy_eventlog_call(p, NDR_EVENTLOG_GETNUMRECORDS);
-}
+	EVENTLOG_Q_GET_OLDEST_ENTRY q_u;
+	EVENTLOG_R_GET_OLDEST_ENTRY r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
 
-static bool api_eventlog_get_oldest_entry(pipes_struct *p)
-{
-	return proxy_eventlog_call(p, NDR_EVENTLOG_GETOLDESTRECORD);
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!(eventlog_io_q_get_oldest_entry("", &q_u, data, 0))) {
+		DEBUG(0, ("eventlog_io_q_get_oldest_entry: unable to unmarshall EVENTLOG_Q_GET_OLDEST_ENTRY.\n"));
+		return False;
+	}
+
+	r_u.status = _eventlog_get_oldest_entry(p, &q_u, &r_u);
+    
+	if (!(eventlog_io_r_get_oldest_entry("", &r_u, rdata, 0))) {
+		DEBUG(0, ("eventlog_io_r_get_oldest_entry: unable to marshall EVENTLOG_R_GET_OLDEST_ENTRY.\n"));
+		return False;
+	}
+    
+	return True;
 }
 
-static bool api_eventlog_read_eventlog(pipes_struct *p)
+static BOOL api_eventlog_read_eventlog(pipes_struct *p)
 {
 	EVENTLOG_Q_READ_EVENTLOG q_u;
 	EVENTLOG_R_READ_EVENTLOG r_u;
@@ -85,9 +148,29 @@
 	return True;
 }
 
-static bool api_eventlog_clear_eventlog(pipes_struct *p)
+static BOOL api_eventlog_clear_eventlog(pipes_struct *p)
 {
-	return proxy_eventlog_call(p, NDR_EVENTLOG_CLEAREVENTLOGW);
+	EVENTLOG_Q_CLEAR_EVENTLOG q_u;
+	EVENTLOG_R_CLEAR_EVENTLOG r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!(eventlog_io_q_clear_eventlog("", &q_u, data, 0))) {
+		DEBUG(0, ("eventlog_io_q_clear_eventlog: unable to unmarshall EVENTLOG_Q_CLEAR_EVENTLOG.\n"));
+		return False;
+	}
+
+	r_u.status = _eventlog_clear_eventlog(p, &q_u, &r_u);
+
+	if (!(eventlog_io_r_clear_eventlog("", &r_u, rdata, 0))) {
+		DEBUG(0, ("eventlog_io_q_clear_eventlog: unable to marshall EVENTLOG_Q_CLEAR_EVENTLOG.\n"));
+		return False;
+	}
+
+	return True;
 }
 
 /*
@@ -103,14 +186,14 @@
 	{"EVENTLOG_CLEAREVENTLOG", 	EVENTLOG_CLEAREVENTLOG, 	api_eventlog_clear_eventlog   }
 };
 
-NTSTATUS rpc_eventlog2_init(void)
+NTSTATUS rpc_eventlog_init(void)
 {
 	return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, 
 		"eventlog", "eventlog", api_eventlog_cmds,
 		sizeof(api_eventlog_cmds)/sizeof(struct api_struct));
 }
 
-void eventlog2_get_pipe_fns(struct api_struct **fns, int *n_fns)
+void eventlog_get_pipe_fns(struct api_struct **fns, int *n_fns)
 {
 	*fns = api_eventlog_cmds;
 	*n_fns = sizeof(api_eventlog_cmds) / sizeof(struct api_struct);

Modified: branches/samba/upstream/source/rpc_server/srv_eventlog_lib.c
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_eventlog_lib.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_server/srv_eventlog_lib.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -62,16 +63,17 @@
  and size. Caller must free memory.
 ********************************************************************/
 
-char *elog_tdbname(TALLOC_CTX *ctx, const char *name )
+char *elog_tdbname( const char *name )
 {
-	char *path = talloc_asprintf(ctx, "%s/%s.tdb",
-			state_path("eventlog"),
-			name);
-	if (!path) {
-		return NULL;
-	}
-	strlower_m(path);
-	return path;
+	fstring path;
+	char *tdb_fullpath;
+	char *eventlogdir = lock_path( "eventlog" );
+	
+	pstr_sprintf( path, "%s/%s.tdb", eventlogdir, name );
+	strlower_m( path );
+	tdb_fullpath = SMB_STRDUP( path );
+	
+	return tdb_fullpath;
 }
 
 
@@ -88,7 +90,7 @@
 static int eventlog_tdb_size_fn( TDB_CONTEXT * tdb, TDB_DATA key, TDB_DATA data,
 			  void *state )
 {
-	struct trav_size_struct	 *tsize = (struct trav_size_struct *)state;
+	struct trav_size_struct	 *tsize = state;
 	
 	tsize->size += data.dsize;
 	tsize->rec_count++;
@@ -140,14 +142,15 @@
  return True if we made enough room to accommodate needed bytes
 ********************************************************************/
 
-static bool make_way_for_eventlogs( TDB_CONTEXT * the_tdb, int32 needed,
-				    bool whack_by_date )
+BOOL make_way_for_eventlogs( TDB_CONTEXT * the_tdb, int32 needed,
+			     BOOL whack_by_date )
 {
 	int start_record, i, new_start;
 	int end_record;
 	int nbytes, reclen, len, Retention, MaxSize;
 	int tresv1, trecnum, timegen, timewr;
 	TDB_DATA key, ret;
+	TALLOC_CTX *mem_ctx = NULL;
 	time_t current_time, exp_time;
 
 	/* discard some eventlogs */
@@ -155,7 +158,10 @@
 	/* read eventlogs from oldest_entry -- there can't be any discontinuity in recnos,
 	   although records not necessarily guaranteed to have successive times */
 	/* */
+	mem_ctx = talloc_init( "make_way_for_eventlogs" );	/* Homage to BPG */
 
+	if ( mem_ctx == NULL )
+		return False;	/* can't allocate memory indicates bigger problems */
 	/* lock */
 	tdb_lock_bystring_with_timeout( the_tdb, EVT_NEXT_RECORD, 1 );
 	/* read */
@@ -182,7 +188,7 @@
 	for ( i = start_record; i < end_record; i++ ) {
 		/* read a record, add the amt to nbytes */
 		key.dsize = sizeof( int32 );
-		key.dptr = ( uint8 * ) ( int32 * ) & i;
+		key.dptr = ( char * ) ( int32 * ) & i;
 		ret = tdb_fetch( the_tdb, key );
 		if ( ret.dsize == 0 ) {
 			DEBUG( 8,
@@ -227,7 +233,7 @@
 	if ( start_record != new_start ) {
 		for ( i = start_record; i < new_start; i++ ) {
 			key.dsize = sizeof( int32 );
-			key.dptr = ( uint8 * ) ( int32 * ) & i;
+			key.dptr = ( char * ) ( int32 * ) & i;
 			tdb_delete( the_tdb, key );
 		}
 
@@ -242,7 +248,7 @@
   calculate how many bytes we need to remove                   
 ********************************************************************/
 
-bool prune_eventlog( TDB_CONTEXT * tdb )
+BOOL prune_eventlog( TDB_CONTEXT * tdb )
 {
 	int MaxSize, Retention, CalcdSize;
 
@@ -267,7 +273,7 @@
 /********************************************************************
 ********************************************************************/
 
-bool can_write_to_eventlog( TDB_CONTEXT * tdb, int32 needed )
+BOOL can_write_to_eventlog( TDB_CONTEXT * tdb, int32 needed )
 {
 	int calcd_size;
 	int MaxSize, Retention;
@@ -310,18 +316,18 @@
 /*******************************************************************
 *******************************************************************/
 
-ELOG_TDB *elog_open_tdb( char *logname, bool force_clear )
+ELOG_TDB *elog_open_tdb( char *logname, BOOL force_clear )
 {
 	TDB_CONTEXT *tdb = NULL;
 	uint32 vers_id;
 	ELOG_TDB *ptr;
-	char *tdbpath = NULL;
+	char *tdbfilename;
+	pstring tdbpath;
 	ELOG_TDB *tdb_node = NULL;
 	char *eventlogdir;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	/* first see if we have an open context */
-
+	
 	for ( ptr=open_elog_list; ptr; ptr=ptr->next ) {
 		if ( strequal( ptr->name, logname ) ) {
 			ptr->ref_count++;
@@ -340,28 +346,27 @@
 				return ptr;
 		}
 	}
-
+	
 	/* make sure that the eventlog dir exists */
-
-	eventlogdir = state_path( "eventlog" );
+	
+	eventlogdir = lock_path( "eventlog" );
 	if ( !directory_exist( eventlogdir, NULL ) )
-		mkdir( eventlogdir, 0755 );
-
+		mkdir( eventlogdir, 0755 );	
+	
 	/* get the path on disk */
+	
+	tdbfilename = elog_tdbname( logname );
+	pstrcpy( tdbpath, tdbfilename );
+	SAFE_FREE( tdbfilename );
 
-	tdbpath = elog_tdbname(ctx, logname);
-	if (!tdbpath) {
-		return NULL;
-	}
-
-	DEBUG(7,("elog_open_tdb: Opening %s...(force_clear == %s)\n",
+	DEBUG(7,("elog_open_tdb: Opening %s...(force_clear == %s)\n", 
 		tdbpath, force_clear?"True":"False" ));
-
+		
 	/* the tdb wasn't already open or this is a forced clear open */
 
 	if ( !force_clear ) {
 
-		tdb = tdb_open_log( tdbpath, 0, TDB_DEFAULT, O_RDWR , 0 );
+		tdb = tdb_open_log( tdbpath, 0, TDB_DEFAULT, O_RDWR , 0 );	
 		if ( tdb ) {
 			vers_id = tdb_fetch_int32( tdb, EVT_VERSION );
 
@@ -408,7 +413,7 @@
  Wrapper to handle reference counts to the tdb
 *******************************************************************/
 
-int elog_close_tdb( ELOG_TDB *etdb, bool force_close )
+int elog_close_tdb( ELOG_TDB *etdb, BOOL force_close )
 {
 	TDB_CONTEXT *tdb;
 
@@ -464,6 +469,8 @@
 	if ( mem_ctx == NULL )
 		return 0;
 
+	if ( !ee )
+		return 0;
 	/* discard any entries that have bogus time, which usually indicates a bogus entry as well. */
 	if ( ee->record.time_generated == 0 )
 		return 0;
@@ -493,7 +500,7 @@
 	next_record = tdb_fetch_int32( the_tdb, EVT_NEXT_RECORD );
 
 	n_packed =
-		tdb_pack( (uint8 *)packed_ee, ee->record.length + MARGIN,
+		tdb_pack( (char *)packed_ee, ee->record.length + MARGIN,
 			  "ddddddwwwwddddddBBdBBBd", ee->record.length,
 			  ee->record.reserved1, next_record,
 			  ee->record.time_generated, ee->record.time_written,
@@ -522,10 +529,10 @@
 	/* increment the record count */
 
 	kbuf.dsize = sizeof( int32 );
-	kbuf.dptr = (uint8 * ) & next_record;
+	kbuf.dptr = (char * ) & next_record;
 
 	ebuf.dsize = n_packed;
-	ebuf.dptr = (uint8 *)packed_ee;
+	ebuf.dptr = (char *)packed_ee;
 
 	if ( tdb_store( the_tdb, kbuf, ebuf, 0 ) ) {
 		/* DEBUG(1,("write_eventlog_tdb: Can't write record %d to eventlog\n",next_record)); */
@@ -585,10 +592,11 @@
  going in.
 ********************************************************************/
 
-bool parse_logentry( char *line, Eventlog_entry * entry, bool * eor )
+BOOL parse_logentry( char *line, Eventlog_entry * entry, BOOL * eor )
 {
-	TALLOC_CTX *ctx = talloc_tos();
 	char *start = NULL, *stop = NULL;
+	pstring temp;
+	int temp_len = 0;
 
 	start = line;
 
@@ -654,69 +662,62 @@
 	} else if ( 0 == strncmp( start, "USL", stop - start ) ) {
 		entry->record.user_sid_length = atoi( stop + 1 );
 	} else if ( 0 == strncmp( start, "SRC", stop - start ) ) {
+		memset( temp, 0, sizeof( temp ) );
 		stop++;
 		while ( isspace( stop[0] ) ) {
 			stop++;
 		}
-		entry->data_record.source_name_len = rpcstr_push_talloc(ctx,
-				&entry->data_record.source_name,
-				stop);
-		if (entry->data_record.source_name_len == (uint32_t)-1 ||
-				entry->data_record.source_name == NULL) {
-			return false;
-		}
+		temp_len = strlen( stop );
+		strncpy( temp, stop, temp_len );
+		rpcstr_push( ( void * ) ( entry->data_record.source_name ),
+			     temp, sizeof( entry->data_record.source_name ),
+			     STR_TERMINATE );
+		entry->data_record.source_name_len =
+			( strlen_w( entry->data_record.source_name ) * 2 ) +
+			2;
 	} else if ( 0 == strncmp( start, "SRN", stop - start ) ) {
+		memset( temp, 0, sizeof( temp ) );
 		stop++;
 		while ( isspace( stop[0] ) ) {
 			stop++;
 		}
-		entry->data_record.computer_name_len = rpcstr_push_talloc(ctx,
-				&entry->data_record.computer_name,
-				stop);
-		if (entry->data_record.computer_name_len == (uint32_t)-1 ||
-				entry->data_record.computer_name == NULL) {
-			return false;
-		}
+		temp_len = strlen( stop );
+		strncpy( temp, stop, temp_len );
+		rpcstr_push( ( void * ) ( entry->data_record.computer_name ),
+			     temp, sizeof( entry->data_record.computer_name ),
+			     STR_TERMINATE );
+		entry->data_record.computer_name_len =
+			( strlen_w( entry->data_record.computer_name ) * 2 ) +
+			2;
 	} else if ( 0 == strncmp( start, "SID", stop - start ) ) {
+		memset( temp, 0, sizeof( temp ) );
 		stop++;
 		while ( isspace( stop[0] ) ) {
 			stop++;
 		}
-		entry->record.user_sid_length = rpcstr_push_talloc(ctx,
-				&entry->data_record.sid,
-				stop);
-		if (entry->record.user_sid_length == (uint32_t)-1 ||
-				entry->data_record.sid == NULL) {
-			return false;
-		}
+		temp_len = strlen( stop );
+		strncpy( temp, stop, temp_len );
+		rpcstr_push( ( void * ) ( entry->data_record.sid ), temp,
+			     sizeof( entry->data_record.sid ),
+			     STR_TERMINATE );
+		entry->record.user_sid_length =
+			( strlen_w( entry->data_record.sid ) * 2 ) + 2;
 	} else if ( 0 == strncmp( start, "STR", stop - start ) ) {
-		smb_ucs2_t *temp = NULL;
-		size_t tmp_len;
-		uint32_t old_len;
 		/* skip past initial ":" */
 		stop++;
 		/* now skip any other leading whitespace */
-		while ( isspace(stop[0])) {
+		while ( isspace( stop[0] ) ) {
 			stop++;
 		}
-		tmp_len = rpcstr_push_talloc(ctx,
-						&temp,
-						stop);
-		if (tmp_len == (size_t)-1 || !temp) {
-			return false;
-		}
-		old_len = entry->data_record.strings_len;
-		entry->data_record.strings = (smb_ucs2_t *)TALLOC_REALLOC_ARRAY(ctx,
-						entry->data_record.strings,
-						char,
-						old_len + tmp_len);
-		if (!entry->data_record.strings) {
-			return false;
-		}
-		memcpy(entry->data_record.strings + old_len,
-				temp,
-				tmp_len);
-		entry->data_record.strings_len += tmp_len;
+		temp_len = strlen( stop );
+		memset( temp, 0, sizeof( temp ) );
+		strncpy( temp, stop, temp_len );
+		rpcstr_push( ( void * ) ( entry->data_record.strings +
+					  ( entry->data_record.strings_len / 2 ) ),
+			     temp,
+			     sizeof( entry->data_record.strings ) -
+			     ( entry->data_record.strings_len / 2 ), STR_TERMINATE );
+		entry->data_record.strings_len += ( temp_len * 2 ) + 2;
 		entry->record.num_strings++;
 	} else if ( 0 == strncmp( start, "DAT", stop - start ) ) {
 		/* skip past initial ":" */
@@ -725,18 +726,25 @@
 		while ( isspace( stop[0] ) ) {
 			stop++;
 		}
-		entry->data_record.user_data_len = strlen(stop);
-		entry->data_record.user_data = talloc_strdup(ctx,
-						stop);
-		if (!entry->data_record.user_data) {
-			return false;
+		entry->data_record.user_data_len = strlen( stop );
+		memset( entry->data_record.user_data, 0,
+			sizeof( entry->data_record.user_data ) );
+		if ( entry->data_record.user_data_len > 0 ) {
+			/* copy no more than the first 1024 bytes */
+			if ( entry->data_record.user_data_len >
+			     sizeof( entry->data_record.user_data ) )
+				entry->data_record.user_data_len =
+					sizeof( entry->data_record.
+						user_data );
+			memcpy( entry->data_record.user_data, stop,
+				entry->data_record.user_data_len );
 		}
 	} else {
 		/* some other eventlog entry -- not implemented, so dropping on the floor */
 		DEBUG( 10, ( "Unknown entry [%s]. Ignoring.\n", line ) );
 		/* For now return true so that we can keep on parsing this mess. Eventually
 		   we will return False here. */
-		return true;
+		return True;
 	}
-	return true;
+	return True;
 }

Modified: branches/samba/upstream/source/rpc_server/srv_eventlog_nt.c
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_eventlog_nt.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_server/srv_eventlog_nt.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -67,11 +68,11 @@
 /********************************************************************
 ********************************************************************/
 
-static bool elog_check_access( EVENTLOG_INFO *info, NT_USER_TOKEN *token )
+static BOOL elog_check_access( EVENTLOG_INFO *info, NT_USER_TOKEN *token )
 {
-	char *tdbname = elog_tdbname(talloc_tos(), info->logname );
+	char *tdbname = elog_tdbname( info->logname );
 	SEC_DESC *sec_desc;
-	bool ret;
+	BOOL ret;
 	NTSTATUS ntstatus;
 	
 	if ( !tdbname ) 
@@ -117,7 +118,7 @@
 /********************************************************************
  ********************************************************************/
 
-static bool elog_validate_logname( const char *name )
+static BOOL elog_validate_logname( const char *name )
 {
 	int i;
 	const char **elogs = lp_eventlog_list();
@@ -137,7 +138,7 @@
 /********************************************************************
 ********************************************************************/
 
-static bool get_num_records_hook( EVENTLOG_INFO * info )
+static BOOL get_num_records_hook( EVENTLOG_INFO * info )
 {
 	int next_record;
 	int oldest_record;
@@ -167,7 +168,7 @@
 /********************************************************************
  ********************************************************************/
 
-static bool get_oldest_entry_hook( EVENTLOG_INFO * info )
+static BOOL get_oldest_entry_hook( EVENTLOG_INFO * info )
 {
 	/* it's the same thing */
 	return get_num_records_hook( info );
@@ -280,31 +281,25 @@
 }
 
 /********************************************************************
-  For the given tdb, get the next eventlog record into the passed
+  For the given tdb, get the next eventlog record into the passed 
   Eventlog_entry.  returns NULL if it can't get the record for some reason.
  ********************************************************************/
 
-static Eventlog_entry *get_eventlog_record(prs_struct *ps,
-				TDB_CONTEXT *tdb,
-				int recno)
+static Eventlog_entry *get_eventlog_record( prs_struct * ps, TDB_CONTEXT * tdb,
+				     int recno, Eventlog_entry * ee )
 {
-	Eventlog_entry *ee = NULL;
 	TDB_DATA ret, key;
 
 	int srecno;
 	int reclen;
 	int len;
 
-	char *wpsource = NULL;
-	char *wpcomputer = NULL;
-	char *wpsid = NULL;
-	char *wpstrs = NULL;
-	char *puserdata = NULL;
+	pstring *wpsource, *wpcomputer, *wpsid, *wpstrs, *puserdata;
 
-	key.dsize = sizeof(int32);
+	key.dsize = sizeof( int32 );
 
 	srecno = recno;
-	key.dptr = ( uint8 * ) &srecno;
+	key.dptr = ( char * ) &srecno;
 
 	ret = tdb_fetch( tdb, key );
 
@@ -322,11 +317,10 @@
 	if ( !len )
 		return NULL;
 
-	ee = TALLOC_ARRAY(ps->mem_ctx, Eventlog_entry, 1);
-	if (!ee) {
+	/* ee = PRS_ALLOC_MEM(ps, Eventlog_entry, 1); */
+
+	if ( !ee )
 		return NULL;
-	}
-	ZERO_STRUCTP(ee);
 
 	len = tdb_unpack( ret.dptr, ret.dsize, "ddddddwwwwddddddBBdBBBd",
 			  &ee->record.length, &ee->record.reserved1,
@@ -354,62 +348,36 @@
 	/* have to do the following because the tdb_unpack allocs a buff, stuffs a pointer to the buff
 	   into it's 2nd argment for 'B' */
 
-	if (wpcomputer) {
-		ee->data_record.computer_name = (smb_ucs2_t *)TALLOC_MEMDUP(
-			ee, wpcomputer, ee->data_record.computer_name_len);
-		if (!ee->data_record.computer_name) {
-			TALLOC_FREE(ee);
-			goto out;
-		}
-	}
-	if (wpsource) {
-		ee->data_record.source_name = (smb_ucs2_t *)TALLOC_MEMDUP(
-			ee, wpsource, ee->data_record.source_name_len);
-		if (!ee->data_record.source_name) {
-			TALLOC_FREE(ee);
-			goto out;
-		}
-	}
+	if ( wpcomputer )
+		memcpy( ee->data_record.computer_name, wpcomputer,
+			ee->data_record.computer_name_len );
+	if ( wpsource )
+		memcpy( ee->data_record.source_name, wpsource,
+			ee->data_record.source_name_len );
 
-	if (wpsid) {
-		ee->data_record.sid = (smb_ucs2_t *)TALLOC_MEMDUP(
-			ee, wpsid, ee->record.user_sid_length);
-		if (!ee->data_record.sid) {
-			TALLOC_FREE(ee);
-			goto out;
-		}
-	}
-	if (wpstrs) {
-		ee->data_record.strings = (smb_ucs2_t *)TALLOC_MEMDUP(
-			ee, wpstrs, ee->data_record.strings_len);
-		if (!ee->data_record.strings) {
-			TALLOC_FREE(ee);
-			goto out;
-		}
-	}
+	if ( wpsid )
+		memcpy( ee->data_record.sid, wpsid,
+			ee->record.user_sid_length );
+	if ( wpstrs )
+		memcpy( ee->data_record.strings, wpstrs,
+			ee->data_record.strings_len );
 
-	if (puserdata) {
-		ee->data_record.user_data = (char *)TALLOC_MEMDUP(
-			ee, puserdata, ee->data_record.user_data_len);
-		if (!ee->data_record.user_data) {
-			TALLOC_FREE(ee);
-			goto out;
-		}
-	}
+	/* note that userdata is a pstring */
+	if ( puserdata )
+		memcpy( ee->data_record.user_data, puserdata,
+			ee->data_record.user_data_len );
 
-  out:
+	SAFE_FREE( wpcomputer );
+	SAFE_FREE( wpsource );
+	SAFE_FREE( wpsid );
+	SAFE_FREE( wpstrs );
+	SAFE_FREE( puserdata );
 
-	SAFE_FREE(wpcomputer);
-	SAFE_FREE(wpsource);
-	SAFE_FREE(wpsid);
-	SAFE_FREE(wpstrs);
-	SAFE_FREE(puserdata);
-
 	DEBUG( 10, ( "get_eventlog_record: read back %d\n", len ) );
 	DEBUG( 10,
 	       ( "get_eventlog_record: computer_name %d is ",
 		 ee->data_record.computer_name_len ) );
-	SAFE_FREE(ret.dptr);
+	SAFE_FREE( ret.dptr );
 	return ee;
 }
 
@@ -418,17 +386,16 @@
  since it uses the table to find the tdb handle
  ********************************************************************/
 
-static bool sync_eventlog_params( EVENTLOG_INFO *info )
+static BOOL sync_eventlog_params( EVENTLOG_INFO *info )
 {
-	char *path = NULL;
+	pstring path;
 	uint32 uiMaxSize;
 	uint32 uiRetention;
-	struct registry_key *key;
-	struct registry_value *value;
+	REGISTRY_KEY *keyinfo;
+	REGISTRY_VALUE *val;
+	REGVAL_CTR *values;
 	WERROR wresult;
 	char *elogname = info->logname;
-	TALLOC_CTX *ctx = talloc_tos();
-	bool ret = false;
 
 	DEBUG( 4, ( "sync_eventlog_params with %s\n", elogname ) );
 
@@ -442,57 +409,51 @@
 	uiRetention = 604800;
 
 	/* the general idea is to internally open the registry 
-	   key and retrieve the values.  That way we can continue 
+	   key and retreive the values.  That way we can continue 
 	   to use the same fetch/store api that we use in 
 	   srv_reg_nt.c */
 
-	path = talloc_asprintf(ctx, "%s/%s", KEY_EVENTLOG, elogname );
-	if (!path) {
-		return false;
-	}
+	pstr_sprintf( path, "%s/%s", KEY_EVENTLOG, elogname );
 
-	wresult = reg_open_path(ctx, path, REG_KEY_READ, get_root_nt_token(),
-				&key);
+	wresult =
+		regkey_open_internal( &keyinfo, path, get_root_nt_token(  ),
+				      REG_KEY_READ );
 
 	if ( !W_ERROR_IS_OK( wresult ) ) {
 		DEBUG( 4,
 		       ( "sync_eventlog_params: Failed to open key [%s] (%s)\n",
 			 path, dos_errstr( wresult ) ) );
-		return false;
+		return False;
 	}
 
-	wresult = reg_queryvalue(key, key, "Retention", &value);
-	if (!W_ERROR_IS_OK(wresult)) {
-		DEBUG(4, ("Failed to query value \"Retention\": %s\n",
-			  dos_errstr(wresult)));
-		ret = false;
-		goto done;
-	}
-	uiRetention = value->v.dword;
+	if ( !( values = TALLOC_ZERO_P( keyinfo, REGVAL_CTR ) ) ) {
+		TALLOC_FREE( keyinfo );
+		DEBUG( 0, ( "control_eventlog_hook: talloc() failed!\n" ) );
 
-	wresult = reg_queryvalue(key, key, "MaxSize", &value);
-	if (!W_ERROR_IS_OK(wresult)) {
-		DEBUG(4, ("Failed to query value \"MaxSize\": %s\n",
-			  dos_errstr(wresult)));
-		ret = false;
-		goto done;
+		return False;
 	}
-	uiMaxSize = value->v.dword;
+	fetch_reg_values( keyinfo, values );
 
+	if ( ( val = regval_ctr_getvalue( values, "Retention" ) ) != NULL )
+		uiRetention = IVAL( regval_data_p( val ), 0 );
+
+	if ( ( val = regval_ctr_getvalue( values, "MaxSize" ) ) != NULL )
+		uiMaxSize = IVAL( regval_data_p( val ), 0 );
+
+	regkey_close_internal( keyinfo );
+
 	tdb_store_int32( ELOG_TDB_CTX(info->etdb), EVT_MAXSIZE, uiMaxSize );
 	tdb_store_int32( ELOG_TDB_CTX(info->etdb), EVT_RETENTION, uiRetention );
 
-	ret = true;
-
-done:
-	TALLOC_FREE(ctx);
-	return ret;
+	return True;
 }
 
 /********************************************************************
  ********************************************************************/
 
 static Eventlog_entry *read_package_entry( prs_struct * ps,
+					   EVENTLOG_Q_READ_EVENTLOG * q_u,
+					   EVENTLOG_R_READ_EVENTLOG * r_u,
 					   Eventlog_entry * entry )
 {
 	uint8 *offset;
@@ -584,7 +545,7 @@
 /********************************************************************
  ********************************************************************/
 
-static bool add_record_to_resp( EVENTLOG_R_READ_EVENTLOG * r_u,
+static BOOL add_record_to_resp( EVENTLOG_R_READ_EVENTLOG * r_u,
 				Eventlog_entry * ee_new )
 {
 	Eventlog_entry *insert_point;
@@ -608,23 +569,28 @@
 }
 
 /********************************************************************
- _eventlog_OpenEventLogW
  ********************************************************************/
 
-NTSTATUS _eventlog_OpenEventLogW(pipes_struct *p,
-				 struct eventlog_OpenEventLogW *r)
+NTSTATUS _eventlog_open_eventlog( pipes_struct * p,
+				EVENTLOG_Q_OPEN_EVENTLOG * q_u,
+				EVENTLOG_R_OPEN_EVENTLOG * r_u )
 {
-	const char *servername = "";
-	const char *logname = "";
+	fstring servername, logname;
 	EVENTLOG_INFO *info;
 	NTSTATUS result;
 
-	if (r->in.servername->string) {
-		servername = r->in.servername->string;
+	fstrcpy( servername, "" );
+	if ( q_u->servername.string ) {
+		rpcstr_pull( servername, q_u->servername.string->buffer,
+			     sizeof( servername ),
+			     q_u->servername.string->uni_str_len * 2, 0 );
 	}
 
-	if (r->in.logname->string) {
-		logname = r->in.logname->string;
+	fstrcpy( logname, "" );
+	if ( q_u->logname.string ) {
+		rpcstr_pull( logname, q_u->logname.string->buffer,
+			     sizeof( logname ),
+			     q_u->logname.string->uni_str_len * 2, 0 );
 	}
 	
 	DEBUG( 10,("_eventlog_open_eventlog: Server [%s], Log [%s]\n",
@@ -633,13 +599,13 @@
 	/* according to MSDN, if the logfile cannot be found, we should
 	  default to the "Application" log */
 	  
-	if ( !NT_STATUS_IS_OK( result = elog_open( p, logname, r->out.handle )) )
+	if ( !NT_STATUS_IS_OK( result = elog_open( p, logname, &r_u->handle )) )
 		return result;
 
-	if ( !(info = find_eventlog_info_by_hnd( p, r->out.handle )) ) {
+	if ( !(info = find_eventlog_info_by_hnd( p, &r_u->handle )) ) {
 		DEBUG(0,("_eventlog_open_eventlog: eventlog (%s) opened but unable to find handle!\n",
 			logname ));
-		elog_close( p, r->out.handle );
+		elog_close( p, &r_u->handle );
 		return NT_STATUS_INVALID_HANDLE;
 	}
 
@@ -652,36 +618,25 @@
 }
 
 /********************************************************************
- _eventlog_ClearEventLogW
  This call still needs some work
  ********************************************************************/
-/** The windows client seems to be doing something funny with the file name
-   A call like
-      ClearEventLog(handle, "backup_file")
-   on the client side will result in the backup file name looking like this on the
-   server side:
-      \??\${CWD of client}\backup_file
-   If an absolute path gets specified, such as
-      ClearEventLog(handle, "C:\\temp\\backup_file")
-   then it is still mangled by the client into this:
-      \??\C:\temp\backup_file
-   when it is on the wire.
-   I'm not sure where the \?? is coming from, or why the ${CWD} of the client process
-   would be added in given that the backup file gets written on the server side. */
 
-NTSTATUS _eventlog_ClearEventLogW(pipes_struct *p,
-				  struct eventlog_ClearEventLogW *r)
+NTSTATUS _eventlog_clear_eventlog( pipes_struct * p,
+				 EVENTLOG_Q_CLEAR_EVENTLOG * q_u,
+				 EVENTLOG_R_CLEAR_EVENTLOG * r_u )
 {
-	EVENTLOG_INFO *info = find_eventlog_info_by_hnd( p, r->in.handle );
-	const char *backup_file_name = NULL;
+	EVENTLOG_INFO *info = find_eventlog_info_by_hnd( p, &q_u->handle );
+	pstring backup_file_name;
 
 	if ( !info )
 		return NT_STATUS_INVALID_HANDLE;
 
-	if (r->in.backupfile && r->in.backupfile->string) {
+	pstrcpy( backup_file_name, "" );
+	if ( q_u->backupfile.string ) {
+		rpcstr_pull( backup_file_name, q_u->backupfile.string->buffer,
+			     sizeof( backup_file_name ),
+			     q_u->backupfile.string->uni_str_len * 2, 0 );
 
-		backup_file_name = r->in.backupfile->string;
-
 		DEBUG(8,( "_eventlog_clear_eventlog: Using [%s] as the backup "
 			"file name for log [%s].",
 			 backup_file_name, info->logname ) );
@@ -694,7 +649,7 @@
 
 	/* Force a close and reopen */
 
-	elog_close_tdb( info->etdb, True );
+	elog_close_tdb( info->etdb, True ); 
 	become_root();
 	info->etdb = elog_open_tdb( info->logname, True );
 	unbecome_root();
@@ -708,9 +663,11 @@
 /********************************************************************
  ********************************************************************/
 
-NTSTATUS _eventlog_CloseEventLog( pipes_struct * p, struct eventlog_CloseEventLog *r )
+NTSTATUS _eventlog_close_eventlog( pipes_struct * p,
+				 EVENTLOG_Q_CLOSE_EVENTLOG * q_u,
+				 EVENTLOG_R_CLOSE_EVENTLOG * r_u )
 {
-	return elog_close( p, r->in.handle );
+	return elog_close( p, &q_u->handle );
 }
 
 /********************************************************************
@@ -721,7 +678,7 @@
 				EVENTLOG_R_READ_EVENTLOG * r_u )
 {
 	EVENTLOG_INFO *info = find_eventlog_info_by_hnd( p, &q_u->handle );
-	Eventlog_entry *entry = NULL, *ee_new = NULL;
+	Eventlog_entry entry, *ee_new;
 	uint32 num_records_read = 0;
 	prs_struct *ps;
 	int bytes_left, record_number;
@@ -736,9 +693,9 @@
 
 	bytes_left = q_u->max_read_size;
 
-	if ( !info->etdb )
+	if ( !info->etdb ) 
 		return NT_STATUS_ACCESS_DENIED;
-
+		
 	/* check for valid flags.  Can't use the sequential and seek flags together */
 
 	elog_read_type = q_u->flags & (EVENTLOG_SEQUENTIAL_READ|EVENTLOG_SEEK_READ);
@@ -755,39 +712,37 @@
 
 	if ( elog_read_type & EVENTLOG_SEQUENTIAL_READ )
 		record_number = info->current_record;
-	else
+	else 
 		record_number = q_u->offset;
 
 	while ( bytes_left > 0 ) {
 
 		/* assume that when the record fetch fails, that we are done */
 
-		entry = get_eventlog_record (ps, ELOG_TDB_CTX(info->etdb), record_number);
-		if (!entry) {
+		if ( !get_eventlog_record ( ps, ELOG_TDB_CTX(info->etdb), record_number, &entry ) ) 
 			break;
-		}
 
 		DEBUG( 8, ( "Retrieved record %d\n", record_number ) );
-
+			       
 		/* Now see if there is enough room to add */
 
-		if ( !(ee_new = read_package_entry( ps, entry )) )
+		if ( !(ee_new = read_package_entry( ps, q_u, r_u,&entry )) )
 			return NT_STATUS_NO_MEMORY;
 
 		if ( r_u->num_bytes_in_resp + ee_new->record.length > q_u->max_read_size ) {
 			r_u->bytes_in_next_record = ee_new->record.length;
 
 			/* response would be too big to fit in client-size buffer */
-
+				
 			bytes_left = 0;
 			break;
 		}
-
+			
 		add_record_to_resp( r_u, ee_new );
 		bytes_left -= ee_new->record.length;
-		TALLOC_FREE(entry);
+		ZERO_STRUCT( entry );
 		num_records_read = r_u->num_records - num_records_read;
-
+				
 		DEBUG( 10, ( "_eventlog_read_eventlog: read [%d] records for a total "
 			"of [%d] records using [%d] bytes out of a max of [%d].\n",
 			 num_records_read, r_u->num_records,
@@ -798,26 +753,26 @@
 			record_number++;
 		else
 			record_number--;
-
+		
 		/* update the eventlog record pointer */
-
+		
 		info->current_record = record_number;
 	}
 
-	/* crazy by WinXP uses NT_STATUS_BUFFER_TOO_SMALL to
+	/* crazy by WinXP uses NT_STATUS_BUFFER_TOO_SMALL to 
 	   say when there are no more records */
 
 	return (num_records_read ? NT_STATUS_OK : NT_STATUS_BUFFER_TOO_SMALL);
 }
 
 /********************************************************************
- _eventlog_GetOldestRecord
  ********************************************************************/
 
-NTSTATUS _eventlog_GetOldestRecord(pipes_struct *p,
-				   struct eventlog_GetOldestRecord *r)
+NTSTATUS _eventlog_get_oldest_entry( pipes_struct * p,
+				   EVENTLOG_Q_GET_OLDEST_ENTRY * q_u,
+				   EVENTLOG_R_GET_OLDEST_ENTRY * r_u )
 {
-	EVENTLOG_INFO *info = find_eventlog_info_by_hnd( p, r->in.handle );
+	EVENTLOG_INFO *info = find_eventlog_info_by_hnd( p, &q_u->handle );
 
 	if (info == NULL) {
 		return NT_STATUS_INVALID_HANDLE;
@@ -826,19 +781,19 @@
 	if ( !( get_oldest_entry_hook( info ) ) )
 		return NT_STATUS_ACCESS_DENIED;
 
-	*r->out.oldest_entry = info->oldest_entry;
+	r_u->oldest_entry = info->oldest_entry;
 
 	return NT_STATUS_OK;
 }
 
 /********************************************************************
-_eventlog_GetNumRecords
  ********************************************************************/
 
-NTSTATUS _eventlog_GetNumRecords(pipes_struct *p,
-				 struct eventlog_GetNumRecords *r)
+NTSTATUS _eventlog_get_num_records( pipes_struct * p,
+				  EVENTLOG_Q_GET_NUM_RECORDS * q_u,
+				  EVENTLOG_R_GET_NUM_RECORDS * r_u )
 {
-	EVENTLOG_INFO *info = find_eventlog_info_by_hnd( p, r->in.handle );
+	EVENTLOG_INFO *info = find_eventlog_info_by_hnd( p, &q_u->handle );
 
 	if (info == NULL) {
 		return NT_STATUS_INVALID_HANDLE;
@@ -847,122 +802,7 @@
 	if ( !( get_num_records_hook( info ) ) )
 		return NT_STATUS_ACCESS_DENIED;
 
-	*r->out.number = info->num_records;
+	r_u->num_records = info->num_records;
 
 	return NT_STATUS_OK;
 }
-
-NTSTATUS _eventlog_BackupEventLogW(pipes_struct *p, struct eventlog_BackupEventLogW *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _eventlog_DeregisterEventSource(pipes_struct *p, struct eventlog_DeregisterEventSource *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _eventlog_ChangeNotify(pipes_struct *p, struct eventlog_ChangeNotify *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _eventlog_RegisterEventSourceW(pipes_struct *p, struct eventlog_RegisterEventSourceW *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _eventlog_OpenBackupEventLogW(pipes_struct *p, struct eventlog_OpenBackupEventLogW *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _eventlog_ReadEventLogW(pipes_struct *p, struct eventlog_ReadEventLogW *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _eventlog_ReportEventW(pipes_struct *p, struct eventlog_ReportEventW *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _eventlog_ClearEventLogA(pipes_struct *p, struct eventlog_ClearEventLogA *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _eventlog_BackupEventLogA(pipes_struct *p, struct eventlog_BackupEventLogA *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _eventlog_OpenEventLogA(pipes_struct *p, struct eventlog_OpenEventLogA *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _eventlog_RegisterEventSourceA(pipes_struct *p, struct eventlog_RegisterEventSourceA *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _eventlog_OpenBackupEventLogA(pipes_struct *p, struct eventlog_OpenBackupEventLogA *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _eventlog_ReadEventLogA(pipes_struct *p, struct eventlog_ReadEventLogA *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _eventlog_ReportEventA(pipes_struct *p, struct eventlog_ReportEventA *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _eventlog_RegisterClusterSvc(pipes_struct *p, struct eventlog_RegisterClusterSvc *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _eventlog_DeregisterClusterSvc(pipes_struct *p, struct eventlog_DeregisterClusterSvc *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _eventlog_WriteClusterEvents(pipes_struct *p, struct eventlog_WriteClusterEvents *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _eventlog_GetLogIntormation(pipes_struct *p, struct eventlog_GetLogIntormation *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _eventlog_FlushEventLog(pipes_struct *p, struct eventlog_FlushEventLog *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-

Deleted: branches/samba/upstream/source/rpc_server/srv_initshutdown_nt.c
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_initshutdown_nt.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_server/srv_initshutdown_nt.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,77 +0,0 @@
-/* 
- *  Unix SMB/CIFS implementation.
- *  RPC Pipe client / server routines
- *  Copyright (C) Andrew Tridgell               1992-1997.
- *  Copyright (C) Gerald Carter                 2006.
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *  
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *  
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-/* Implementation of registry functions. */
-
-#include "includes.h"
-#include "regfio.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_RPC_SRV
-
-
-/*******************************************************************
- ********************************************************************/
-WERROR _initshutdown_Init(pipes_struct *p, struct initshutdown_Init *r)
-{
-	struct winreg_InitiateSystemShutdownEx s;
-
-	s.in.hostname = r->in.hostname;
-	s.in.message = r->in.message;
-	s.in.timeout = r->in.timeout;
-	s.in.force_apps = r->in.force_apps;
-	s.in.reboot = r->in.reboot;
-	s.in.reason = 0;
-
-	/* thunk down to _winreg_InitiateSystemShutdownEx() 
-	   (just returns a status) */
-	
-	return _winreg_InitiateSystemShutdownEx( p, &s );
-}
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _initshutdown_InitEx(pipes_struct *p, struct initshutdown_InitEx *r)
-{
-	struct winreg_InitiateSystemShutdownEx s;
-	s.in.hostname = r->in.hostname;
-	s.in.message = r->in.message;
-	s.in.timeout = r->in.timeout;
-	s.in.force_apps = r->in.force_apps;
-	s.in.reboot = r->in.reboot;
-	s.in.reason = r->in.reason;
-
-	return _winreg_InitiateSystemShutdownEx( p, &s);
-}
-
-
-
-
-/*******************************************************************
- reg_abort_shutdwon
- ********************************************************************/
-
-WERROR _initshutdown_Abort(pipes_struct *p, struct initshutdown_Abort *r)
-{
-	struct winreg_AbortSystemShutdown s;
-	s.in.server = r->in.server;
-	return _winreg_AbortSystemShutdown( p, &s );
-}

Copied: branches/samba/upstream/source/rpc_server/srv_lsa.c (from rev 1928, branches/samba/upstream/source/rpc_server/srv_lsa.c)
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_lsa.c	                        (rev 0)
+++ branches/samba/upstream/source/rpc_server/srv_lsa.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,1183 @@
+/* 
+ *  Unix SMB/CIFS implementation.
+ *  RPC Pipe client / server routines
+ *  Copyright (C) Andrew Tridgell              1992-1997,
+ *  Copyright (C) Luke Kenneth Casson Leighton 1996-1997,
+ *  Copyright (C) Paul Ashton                       1997,
+ *  Copyright (C) Jeremy Allison                    2001,
+ *  Copyright (C) Jim McDonough <jmcd at us.ibm.com> 2002-2003.
+ *  Copyright (C) Gerald (Jerry) Carter             2005
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/* This is the interface to the lsa server code. */
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_RPC_SRV
+
+/***************************************************************************
+ api_lsa_open_policy2
+ ***************************************************************************/
+
+static BOOL api_lsa_open_policy2(pipes_struct *p)
+{
+	LSA_Q_OPEN_POL2 q_u;
+	LSA_R_OPEN_POL2 r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the server, object attributes and desired access flag...*/
+	if(!lsa_io_q_open_pol2("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_open_policy2: unable to unmarshall LSA_Q_OPEN_POL2.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_open_policy2(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_open_pol2("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_open_policy2: unable to marshall LSA_R_OPEN_POL2.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+api_lsa_open_policy
+ ***************************************************************************/
+
+static BOOL api_lsa_open_policy(pipes_struct *p)
+{
+	LSA_Q_OPEN_POL q_u;
+	LSA_R_OPEN_POL r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the server, object attributes and desired access flag...*/
+	if(!lsa_io_q_open_pol("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_open_policy: unable to unmarshall LSA_Q_OPEN_POL.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_open_policy(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_open_pol("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_open_policy: unable to marshall LSA_R_OPEN_POL.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_enum_trust_dom
+ ***************************************************************************/
+
+static BOOL api_lsa_enum_trust_dom(pipes_struct *p)
+{
+	LSA_Q_ENUM_TRUST_DOM q_u;
+	LSA_R_ENUM_TRUST_DOM r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the enum trust domain context etc. */
+	if(!lsa_io_q_enum_trust_dom("", &q_u, data, 0))
+		return False;
+
+	/* get required trusted domains information */
+	r_u.status = _lsa_enum_trust_dom(p, &q_u, &r_u);
+
+	/* prepare the response */
+	if(!lsa_io_r_enum_trust_dom("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_query_info
+ ***************************************************************************/
+
+static BOOL api_lsa_query_info(pipes_struct *p)
+{
+	LSA_Q_QUERY_INFO q_u;
+	LSA_R_QUERY_INFO r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the info class and policy handle */
+	if(!lsa_io_q_query("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_query_info: failed to unmarshall LSA_Q_QUERY_INFO.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_query_info(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_query("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_query_info: failed to marshall LSA_R_QUERY_INFO.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_lookup_sids
+ ***************************************************************************/
+
+static BOOL api_lsa_lookup_sids(pipes_struct *p)
+{
+	LSA_Q_LOOKUP_SIDS q_u;
+	LSA_R_LOOKUP_SIDS r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the info class and policy handle */
+	if(!lsa_io_q_lookup_sids("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_lookup_sids: failed to unmarshall LSA_Q_LOOKUP_SIDS.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_lookup_sids(p, &q_u, &r_u);
+
+	if(!lsa_io_r_lookup_sids("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_lookup_sids: Failed to marshall LSA_R_LOOKUP_SIDS.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_lookup_names
+ ***************************************************************************/
+
+static BOOL api_lsa_lookup_names(pipes_struct *p)
+{
+	LSA_Q_LOOKUP_NAMES q_u;
+	LSA_R_LOOKUP_NAMES r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the info class and policy handle */
+	if(!lsa_io_q_lookup_names("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_lookup_names: failed to unmarshall LSA_Q_LOOKUP_NAMES.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_lookup_names(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_lookup_names("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_lookup_names: Failed to marshall LSA_R_LOOKUP_NAMES.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_close.
+ ***************************************************************************/
+
+static BOOL api_lsa_close(pipes_struct *p)
+{
+	LSA_Q_CLOSE q_u;
+	LSA_R_CLOSE r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!lsa_io_q_close("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_close: lsa_io_q_close failed.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_close(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if (!lsa_io_r_close("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_close: lsa_io_r_close failed.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_open_secret.
+ ***************************************************************************/
+
+static BOOL api_lsa_open_secret(pipes_struct *p)
+{
+	LSA_Q_OPEN_SECRET q_u;
+	LSA_R_OPEN_SECRET r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!lsa_io_q_open_secret("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_open_secret: failed to unmarshall LSA_Q_OPEN_SECRET.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_open_secret(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_open_secret("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_open_secret: Failed to marshall LSA_R_OPEN_SECRET.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_open_secret.
+ ***************************************************************************/
+
+static BOOL api_lsa_enum_privs(pipes_struct *p)
+{
+	LSA_Q_ENUM_PRIVS q_u;
+	LSA_R_ENUM_PRIVS r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!lsa_io_q_enum_privs("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_enum_privs: failed to unmarshall LSA_Q_ENUM_PRIVS.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_enum_privs(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_enum_privs("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_enum_privs: Failed to marshall LSA_R_ENUM_PRIVS.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_open_secret.
+ ***************************************************************************/
+
+static BOOL api_lsa_priv_get_dispname(pipes_struct *p)
+{
+	LSA_Q_PRIV_GET_DISPNAME q_u;
+	LSA_R_PRIV_GET_DISPNAME r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!lsa_io_q_priv_get_dispname("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_priv_get_dispname: failed to unmarshall LSA_Q_PRIV_GET_DISPNAME.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_priv_get_dispname(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_priv_get_dispname("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_priv_get_dispname: Failed to marshall LSA_R_PRIV_GET_DISPNAME.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_open_secret.
+ ***************************************************************************/
+
+static BOOL api_lsa_enum_accounts(pipes_struct *p)
+{
+	LSA_Q_ENUM_ACCOUNTS q_u;
+	LSA_R_ENUM_ACCOUNTS r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!lsa_io_q_enum_accounts("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_enum_accounts: failed to unmarshall LSA_Q_ENUM_ACCOUNTS.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_enum_accounts(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_enum_accounts("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_enum_accounts: Failed to marshall LSA_R_ENUM_ACCOUNTS.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_UNK_GET_CONNUSER
+ ***************************************************************************/
+
+static BOOL api_lsa_unk_get_connuser(pipes_struct *p)
+{
+	LSA_Q_UNK_GET_CONNUSER q_u;
+	LSA_R_UNK_GET_CONNUSER r_u;
+	
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!lsa_io_q_unk_get_connuser("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_unk_get_connuser: failed to unmarshall LSA_Q_UNK_GET_CONNUSER.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_unk_get_connuser(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_unk_get_connuser("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_unk_get_connuser: Failed to marshall LSA_R_UNK_GET_CONNUSER.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_create_user
+ ***************************************************************************/
+
+static BOOL api_lsa_create_account(pipes_struct *p)
+{
+	LSA_Q_CREATEACCOUNT q_u;
+	LSA_R_CREATEACCOUNT r_u;
+	
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!lsa_io_q_create_account("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_create_account: failed to unmarshall LSA_Q_CREATEACCOUNT.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_create_account(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_create_account("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_create_account: Failed to marshall LSA_R_CREATEACCOUNT.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_open_user
+ ***************************************************************************/
+
+static BOOL api_lsa_open_account(pipes_struct *p)
+{
+	LSA_Q_OPENACCOUNT q_u;
+	LSA_R_OPENACCOUNT r_u;
+	
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!lsa_io_q_open_account("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_open_account: failed to unmarshall LSA_Q_OPENACCOUNT.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_open_account(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_open_account("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_open_account: Failed to marshall LSA_R_OPENACCOUNT.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_get_privs
+ ***************************************************************************/
+
+static BOOL api_lsa_enum_privsaccount(pipes_struct *p)
+{
+	LSA_Q_ENUMPRIVSACCOUNT q_u;
+	LSA_R_ENUMPRIVSACCOUNT r_u;
+	
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!lsa_io_q_enum_privsaccount("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_enum_privsaccount: failed to unmarshall LSA_Q_ENUMPRIVSACCOUNT.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_enum_privsaccount(p, rdata, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_enum_privsaccount("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_enum_privsaccount: Failed to marshall LSA_R_ENUMPRIVSACCOUNT.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_getsystemaccount
+ ***************************************************************************/
+
+static BOOL api_lsa_getsystemaccount(pipes_struct *p)
+{
+	LSA_Q_GETSYSTEMACCOUNT q_u;
+	LSA_R_GETSYSTEMACCOUNT r_u;
+	
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!lsa_io_q_getsystemaccount("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_getsystemaccount: failed to unmarshall LSA_Q_GETSYSTEMACCOUNT.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_getsystemaccount(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_getsystemaccount("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_getsystemaccount: Failed to marshall LSA_R_GETSYSTEMACCOUNT.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+
+/***************************************************************************
+ api_lsa_setsystemaccount
+ ***************************************************************************/
+
+static BOOL api_lsa_setsystemaccount(pipes_struct *p)
+{
+	LSA_Q_SETSYSTEMACCOUNT q_u;
+	LSA_R_SETSYSTEMACCOUNT r_u;
+	
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!lsa_io_q_setsystemaccount("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_setsystemaccount: failed to unmarshall LSA_Q_SETSYSTEMACCOUNT.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_setsystemaccount(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_setsystemaccount("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_setsystemaccount: Failed to marshall LSA_R_SETSYSTEMACCOUNT.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_addprivs
+ ***************************************************************************/
+
+static BOOL api_lsa_addprivs(pipes_struct *p)
+{
+	LSA_Q_ADDPRIVS q_u;
+	LSA_R_ADDPRIVS r_u;
+	
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!lsa_io_q_addprivs("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_addprivs: failed to unmarshall LSA_Q_ADDPRIVS.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_addprivs(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_addprivs("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_addprivs: Failed to marshall LSA_R_ADDPRIVS.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_removeprivs
+ ***************************************************************************/
+
+static BOOL api_lsa_removeprivs(pipes_struct *p)
+{
+	LSA_Q_REMOVEPRIVS q_u;
+	LSA_R_REMOVEPRIVS r_u;
+	
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!lsa_io_q_removeprivs("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_removeprivs: failed to unmarshall LSA_Q_REMOVEPRIVS.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_removeprivs(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_removeprivs("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_removeprivs: Failed to marshall LSA_R_REMOVEPRIVS.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_query_secobj
+ ***************************************************************************/
+
+static BOOL api_lsa_query_secobj(pipes_struct *p)
+{
+	LSA_Q_QUERY_SEC_OBJ q_u;
+	LSA_R_QUERY_SEC_OBJ r_u;
+	
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!lsa_io_q_query_sec_obj("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_query_secobj: failed to unmarshall LSA_Q_QUERY_SEC_OBJ.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_query_secobj(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_query_sec_obj("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_query_secobj: Failed to marshall LSA_R_QUERY_SEC_OBJ.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_add_acct_rights
+ ***************************************************************************/
+
+static BOOL api_lsa_add_acct_rights(pipes_struct *p)
+{
+	LSA_Q_ADD_ACCT_RIGHTS q_u;
+	LSA_R_ADD_ACCT_RIGHTS r_u;
+	
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!lsa_io_q_add_acct_rights("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_add_acct_rights: failed to unmarshall LSA_Q_ADD_ACCT_RIGHTS.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_add_acct_rights(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_add_acct_rights("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_add_acct_rights: Failed to marshall LSA_R_ADD_ACCT_RIGHTS.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_remove_acct_rights
+ ***************************************************************************/
+
+static BOOL api_lsa_remove_acct_rights(pipes_struct *p)
+{
+	LSA_Q_REMOVE_ACCT_RIGHTS q_u;
+	LSA_R_REMOVE_ACCT_RIGHTS r_u;
+	
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!lsa_io_q_remove_acct_rights("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_remove_acct_rights: failed to unmarshall LSA_Q_REMOVE_ACCT_RIGHTS.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_remove_acct_rights(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_remove_acct_rights("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_remove_acct_rights: Failed to marshall LSA_R_REMOVE_ACCT_RIGHTS.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_enum_acct_rights
+ ***************************************************************************/
+
+static BOOL api_lsa_enum_acct_rights(pipes_struct *p)
+{
+	LSA_Q_ENUM_ACCT_RIGHTS q_u;
+	LSA_R_ENUM_ACCT_RIGHTS r_u;
+	
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!lsa_io_q_enum_acct_rights("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_enum_acct_rights: failed to unmarshall LSA_Q_ENUM_ACCT_RIGHTS.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_enum_acct_rights(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_enum_acct_rights("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_enum_acct_rights: Failed to marshall LSA_R_ENUM_ACCT_RIGHTS.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_lookup_priv_value
+ ***************************************************************************/
+
+static BOOL api_lsa_lookup_priv_value(pipes_struct *p)
+{
+	LSA_Q_LOOKUP_PRIV_VALUE q_u;
+	LSA_R_LOOKUP_PRIV_VALUE r_u;
+	
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!lsa_io_q_lookup_priv_value("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_lookup_priv_value: failed to unmarshall LSA_Q_LOOKUP_PRIV_VALUE .\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_lookup_priv_value(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_lookup_priv_value("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_lookup_priv_value: Failed to marshall LSA_R_LOOKUP_PRIV_VALUE.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ ***************************************************************************/
+
+static BOOL api_lsa_open_trust_dom(pipes_struct *p)
+{
+	LSA_Q_OPEN_TRUSTED_DOMAIN q_u;
+	LSA_R_OPEN_TRUSTED_DOMAIN r_u;
+	
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!lsa_io_q_open_trusted_domain("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_open_trust_dom: failed to unmarshall LSA_Q_OPEN_TRUSTED_DOMAIN .\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_open_trusted_domain(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_open_trusted_domain("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_open_trust_dom: Failed to marshall LSA_R_OPEN_TRUSTED_DOMAIN.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ ***************************************************************************/
+
+static BOOL api_lsa_create_trust_dom(pipes_struct *p)
+{
+	LSA_Q_CREATE_TRUSTED_DOMAIN q_u;
+	LSA_R_CREATE_TRUSTED_DOMAIN r_u;
+	
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!lsa_io_q_create_trusted_domain("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_create_trust_dom: failed to unmarshall LSA_Q_CREATE_TRUSTED_DOMAIN .\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_create_trusted_domain(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_create_trusted_domain("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_create_trust_dom: Failed to marshall LSA_R_CREATE_TRUSTED_DOMAIN.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ ***************************************************************************/
+
+static BOOL api_lsa_create_secret(pipes_struct *p)
+{
+	LSA_Q_CREATE_SECRET q_u;
+	LSA_R_CREATE_SECRET r_u;
+	
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!lsa_io_q_create_secret("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_create_secret: failed to unmarshall LSA_Q_CREATE_SECRET.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_create_secret(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_create_secret("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_create_secret: Failed to marshall LSA_R_CREATE_SECRET.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ ***************************************************************************/
+
+static BOOL api_lsa_set_secret(pipes_struct *p)
+{
+	LSA_Q_SET_SECRET q_u;
+	LSA_R_SET_SECRET r_u;
+	
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!lsa_io_q_set_secret("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_set_secret: failed to unmarshall LSA_Q_SET_SECRET.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_set_secret(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_set_secret("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_set_secret: Failed to marshall LSA_R_SET_SECRET.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ ***************************************************************************/
+
+static BOOL api_lsa_delete_object(pipes_struct *p)
+{
+	LSA_Q_DELETE_OBJECT q_u;
+	LSA_R_DELETE_OBJECT r_u;
+	
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!lsa_io_q_delete_object("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_delete_object: failed to unmarshall LSA_Q_DELETE_OBJECT.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_delete_object(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_delete_object("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_delete_object: Failed to marshall LSA_R_DELETE_OBJECT.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_lookup_sids2
+ ***************************************************************************/
+
+static BOOL api_lsa_lookup_sids2(pipes_struct *p)
+{
+	LSA_Q_LOOKUP_SIDS2 q_u;
+	LSA_R_LOOKUP_SIDS2 r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the info class and policy handle */
+	if(!lsa_io_q_lookup_sids2("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_lookup_sids2: failed to unmarshall LSA_Q_LOOKUP_SIDS2.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_lookup_sids2(p, &q_u, &r_u);
+
+	if(!lsa_io_r_lookup_sids2("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_lookup_sids2: Failed to marshall LSA_R_LOOKUP_SIDS2.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_lookup_sids3
+ ***************************************************************************/
+
+static BOOL api_lsa_lookup_sids3(pipes_struct *p)
+{
+	LSA_Q_LOOKUP_SIDS3 q_u;
+	LSA_R_LOOKUP_SIDS3 r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the info class and policy handle */
+	if(!lsa_io_q_lookup_sids3("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_lookup_sids3: failed to unmarshall LSA_Q_LOOKUP_SIDS3.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_lookup_sids3(p, &q_u, &r_u);
+
+	if(!lsa_io_r_lookup_sids3("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_lookup_sids3: Failed to marshall LSA_R_LOOKUP_SIDS3.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_lookup_names2
+ ***************************************************************************/
+
+static BOOL api_lsa_lookup_names2(pipes_struct *p)
+{
+	LSA_Q_LOOKUP_NAMES2 q_u;
+	LSA_R_LOOKUP_NAMES2 r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the info class and policy handle */
+	if(!lsa_io_q_lookup_names2("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_lookup_names2: failed to unmarshall LSA_Q_LOOKUP_NAMES2.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_lookup_names2(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_lookup_names2("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_lookup_names2: Failed to marshall LSA_R_LOOKUP_NAMES2.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_lookup_names3
+ ***************************************************************************/
+
+static BOOL api_lsa_lookup_names3(pipes_struct *p)
+{
+	LSA_Q_LOOKUP_NAMES3 q_u;
+	LSA_R_LOOKUP_NAMES3 r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the info class and policy handle */
+	if(!lsa_io_q_lookup_names3("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_lookup_names3: failed to unmarshall LSA_Q_LOOKUP_NAMES3.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_lookup_names3(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_lookup_names3("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_lookup_names3: Failed to marshall LSA_R_LOOKUP_NAMES3.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/***************************************************************************
+ api_lsa_lookup_names4
+ ***************************************************************************/
+
+static BOOL api_lsa_lookup_names4(pipes_struct *p)
+{
+	LSA_Q_LOOKUP_NAMES4 q_u;
+	LSA_R_LOOKUP_NAMES4 r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the info class and policy handle */
+	if(!lsa_io_q_lookup_names4("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_lookup_names4: failed to unmarshall LSA_Q_LOOKUP_NAMES4.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_lookup_names4(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!lsa_io_r_lookup_names4("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_lookup_names4: Failed to marshall LSA_R_LOOKUP_NAMES4.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+#if 0	/* AD DC work in ongoing in Samba 4 */
+
+/***************************************************************************
+ api_lsa_query_info2
+ ***************************************************************************/
+
+static BOOL api_lsa_query_info2(pipes_struct *p)
+{
+	LSA_Q_QUERY_INFO2 q_u;
+	LSA_R_QUERY_INFO2 r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!lsa_io_q_query_info2("", &q_u, data, 0)) {
+		DEBUG(0,("api_lsa_query_info2: failed to unmarshall LSA_Q_QUERY_INFO2.\n"));
+		return False;
+	}
+
+	r_u.status = _lsa_query_info2(p, &q_u, &r_u);
+
+	if (!lsa_io_r_query_info2("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_lsa_query_info2: failed to marshall LSA_R_QUERY_INFO2.\n"));
+		return False;
+	}
+
+	return True;
+}
+#endif	/* AD DC work in ongoing in Samba 4 */
+
+/***************************************************************************
+ \PIPE\ntlsa commands
+ ***************************************************************************/
+ 
+static struct api_struct api_lsa_cmds[] =
+{
+	{ "LSA_OPENPOLICY2"     , LSA_OPENPOLICY2     , api_lsa_open_policy2     },
+	{ "LSA_OPENPOLICY"      , LSA_OPENPOLICY      , api_lsa_open_policy      },
+	{ "LSA_QUERYINFOPOLICY" , LSA_QUERYINFOPOLICY , api_lsa_query_info       },
+	{ "LSA_ENUMTRUSTDOM"    , LSA_ENUMTRUSTDOM    , api_lsa_enum_trust_dom   },
+	{ "LSA_CLOSE"           , LSA_CLOSE           , api_lsa_close            },
+	{ "LSA_OPENSECRET"      , LSA_OPENSECRET      , api_lsa_open_secret      },
+	{ "LSA_LOOKUPSIDS"      , LSA_LOOKUPSIDS      , api_lsa_lookup_sids      },
+	{ "LSA_LOOKUPNAMES"     , LSA_LOOKUPNAMES     , api_lsa_lookup_names     },
+	{ "LSA_ENUM_PRIVS"      , LSA_ENUM_PRIVS      , api_lsa_enum_privs       },
+	{ "LSA_PRIV_GET_DISPNAME",LSA_PRIV_GET_DISPNAME,api_lsa_priv_get_dispname},
+	{ "LSA_ENUM_ACCOUNTS"   , LSA_ENUM_ACCOUNTS   , api_lsa_enum_accounts    },
+	{ "LSA_UNK_GET_CONNUSER", LSA_UNK_GET_CONNUSER, api_lsa_unk_get_connuser },
+	{ "LSA_CREATEACCOUNT"   , LSA_CREATEACCOUNT   , api_lsa_create_account   },
+	{ "LSA_OPENACCOUNT"     , LSA_OPENACCOUNT     , api_lsa_open_account     },
+	{ "LSA_ENUMPRIVSACCOUNT", LSA_ENUMPRIVSACCOUNT, api_lsa_enum_privsaccount},
+	{ "LSA_GETSYSTEMACCOUNT", LSA_GETSYSTEMACCOUNT, api_lsa_getsystemaccount },
+	{ "LSA_SETSYSTEMACCOUNT", LSA_SETSYSTEMACCOUNT, api_lsa_setsystemaccount },
+	{ "LSA_ADDPRIVS"        , LSA_ADDPRIVS        , api_lsa_addprivs         },
+	{ "LSA_REMOVEPRIVS"     , LSA_REMOVEPRIVS     , api_lsa_removeprivs      },
+	{ "LSA_ADDACCTRIGHTS"   , LSA_ADDACCTRIGHTS   , api_lsa_add_acct_rights    },
+	{ "LSA_REMOVEACCTRIGHTS", LSA_REMOVEACCTRIGHTS, api_lsa_remove_acct_rights },
+	{ "LSA_ENUMACCTRIGHTS"  , LSA_ENUMACCTRIGHTS  , api_lsa_enum_acct_rights },
+	{ "LSA_QUERYSECOBJ"     , LSA_QUERYSECOBJ     , api_lsa_query_secobj     },
+	{ "LSA_LOOKUPPRIVVALUE" , LSA_LOOKUPPRIVVALUE , api_lsa_lookup_priv_value },
+	{ "LSA_OPENTRUSTDOM"    , LSA_OPENTRUSTDOM    , api_lsa_open_trust_dom },
+	{ "LSA_OPENSECRET"      , LSA_OPENSECRET      , api_lsa_open_secret },
+	{ "LSA_CREATETRUSTDOM"  , LSA_CREATETRUSTDOM  , api_lsa_create_trust_dom },
+	{ "LSA_CREATSECRET"     , LSA_CREATESECRET    , api_lsa_create_secret },
+	{ "LSA_SETSECRET"       , LSA_SETSECRET       , api_lsa_set_secret },
+	{ "LSA_DELETEOBJECT"    , LSA_DELETEOBJECT    , api_lsa_delete_object },
+	{ "LSA_LOOKUPSIDS2"     , LSA_LOOKUPSIDS2     , api_lsa_lookup_sids2 },
+	{ "LSA_LOOKUPNAMES2"	, LSA_LOOKUPNAMES2    , api_lsa_lookup_names2 },
+	{ "LSA_LOOKUPNAMES3"	, LSA_LOOKUPNAMES3    , api_lsa_lookup_names3 },
+	{ "LSA_LOOKUPSIDS3"     , LSA_LOOKUPSIDS3     , api_lsa_lookup_sids3 },
+	{ "LSA_LOOKUPNAMES4"	, LSA_LOOKUPNAMES4    , api_lsa_lookup_names4 }
+#if 0	/* AD DC work in ongoing in Samba 4 */
+	/* be careful of the adding of new RPC's.  See commentrs below about
+	   ADS DC capabilities                                               */
+	{ "LSA_QUERYINFO2"      , LSA_QUERYINFO2      , api_lsa_query_info2      }
+#endif	/* AD DC work in ongoing in Samba 4 */
+};
+
+static int count_fns(void)
+{
+	int funcs = sizeof(api_lsa_cmds) / sizeof(struct api_struct);
+	
+#if 0	/* AD DC work is on going in Samba 4 */
+	/*
+	 * NOTE: Certain calls can not be enabled if we aren't an ADS DC.  Make sure
+	 * these calls are always last and that you decrement by the amount of calls
+	 * to disable.
+	 */
+	if (!(SEC_ADS == lp_security() && ROLE_DOMAIN_PDC == lp_server_role())) {
+		funcs -= 1;
+	}
+#endif	/* AD DC work in ongoing in Samba 4 */
+
+	return funcs;
+}
+void lsa_get_pipe_fns( struct api_struct **fns, int *n_fns )
+{
+	*fns = api_lsa_cmds;
+	*n_fns = count_fns();
+}
+
+
+NTSTATUS rpc_lsa_init(void)
+{
+	int funcs = count_fns();
+
+	return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "lsarpc", "lsass", api_lsa_cmds, 
+		funcs);
+}

Copied: branches/samba/upstream/source/rpc_server/srv_lsa_ds.c (from rev 1928, branches/samba/upstream/source/rpc_server/srv_lsa_ds.c)
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_lsa_ds.c	                        (rev 0)
+++ branches/samba/upstream/source/rpc_server/srv_lsa_ds.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,86 @@
+/*
+ *  Unix SMB/CIFS implementation.
+ *  RPC Pipe client / server routines
+ *  Copyright (C) Gerald Carter		2003
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/* This is the interface for the registry functions. */
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_RPC_SRV
+
+/*******************************************************************
+ ********************************************************************/
+
+static BOOL api_dsrole_get_primary_dominfo(pipes_struct *p)
+{
+	DS_Q_GETPRIMDOMINFO q_u;
+	DS_R_GETPRIMDOMINFO r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the request */
+	if ( !ds_io_q_getprimdominfo("", &q_u, data, 0) )
+		return False;
+
+	/* construct reply. */
+	r_u.status = _dsrole_get_primary_dominfo( p, &q_u, &r_u );
+
+	if ( !ds_io_r_getprimdominfo("", &r_u, rdata, 0) )
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ stub functions for unimplemented RPC
+*******************************************************************/
+
+static BOOL api_dsrole_stub( pipes_struct *p )
+{
+	DEBUG(0,("api_dsrole_stub:  Hmmm....didn't know this RPC existed...\n"));
+
+	return False;
+}
+
+
+/*******************************************************************
+ array of \PIPE\lsass (new windows 2000 UUID)  operations
+********************************************************************/
+static struct api_struct api_lsa_ds_cmds[] = {
+	{ "DS_NOP", 			DS_NOP, 		api_dsrole_stub },
+	{ "DS_GETPRIMDOMINFO", 		DS_GETPRIMDOMINFO, 	api_dsrole_get_primary_dominfo	}
+
+};
+
+void lsa_ds_get_pipe_fns( struct api_struct **fns, int *n_fns )
+{
+	*fns = api_lsa_ds_cmds;
+	*n_fns = sizeof(api_lsa_ds_cmds) / sizeof(struct api_struct);
+}
+
+
+NTSTATUS rpc_lsa_ds_init(void)
+{
+	return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "lsa_ds", "lsa_ds", api_lsa_ds_cmds,
+		sizeof(api_lsa_ds_cmds) / sizeof(struct api_struct));
+}

Copied: branches/samba/upstream/source/rpc_server/srv_lsa_ds_nt.c (from rev 1928, branches/samba/upstream/source/rpc_server/srv_lsa_ds_nt.c)
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_lsa_ds_nt.c	                        (rev 0)
+++ branches/samba/upstream/source/rpc_server/srv_lsa_ds_nt.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,131 @@
+/* 
+ *  Unix SMB/CIFS implementation.
+ *  RPC Pipe client / server routines
+ *  Copyright (C) Andrew Tridgell               1992-1997.
+ *  Copyright (C) Luke Kenneth Casson Leighton  1996-1997.
+ *  Copyright (C) Paul Ashton                        1997.
+ *  Copyright (C) Jeremy Allison                     2001.
+ *  Copyright (C) Gerald Carter                      2002.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/* Implementation of registry functions. */
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_RPC_SRV
+
+/********************************************************************
+ Fill in a DS_DOMINFO_CTR structure
+ ********************************************************************/
+
+static NTSTATUS fill_dsrole_dominfo_basic(TALLOC_CTX *ctx, DSROLE_PRIMARY_DOMAIN_INFO_BASIC **info) 
+{
+	DSROLE_PRIMARY_DOMAIN_INFO_BASIC *basic;
+	const char *netbios_domain = "";
+	fstring dnsdomain;
+
+	DEBUG(10,("fill_dsrole_dominfo_basic: enter\n"));
+
+	if ( !(basic = TALLOC_ZERO_P(ctx, DSROLE_PRIMARY_DOMAIN_INFO_BASIC)) ) {
+		DEBUG(0,("fill_dsrole_dominfo_basic: FATAL error!  talloc_xero() failed\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	switch ( lp_server_role() ) {
+		case ROLE_STANDALONE:
+			basic->machine_role = DSROLE_STANDALONE_SRV;
+			basic->netbios_ptr = 1;
+			netbios_domain = get_global_sam_name();
+			break;
+		case ROLE_DOMAIN_MEMBER:
+			basic->netbios_ptr = 1;
+			netbios_domain = lp_workgroup();
+			basic->machine_role = DSROLE_DOMAIN_MEMBER_SRV;
+			break;
+		case ROLE_DOMAIN_BDC:
+			basic->netbios_ptr = 1;
+			netbios_domain = get_global_sam_name();
+			basic->machine_role = DSROLE_BDC;
+			break;
+		case ROLE_DOMAIN_PDC:
+			basic->netbios_ptr = 1;
+			netbios_domain = get_global_sam_name();
+			basic->machine_role = DSROLE_PDC;
+			break;
+	}
+
+	/* always set netbios name */
+
+	init_unistr2( &basic->netbios_domain, netbios_domain, UNI_STR_TERMINATE);
+
+	if ( secrets_fetch_domain_guid( lp_workgroup(), &basic->domain_guid ) )
+		basic->flags |= DSROLE_PRIMARY_DOMAIN_GUID_PRESENT;
+
+	/* fill in some additional fields if we are a member of an AD domain */
+
+	if ( lp_security() == SEC_ADS ) {
+		fstrcpy( dnsdomain, lp_realm() );
+		strlower_m( dnsdomain );
+		
+		basic->dnsname_ptr = 1;
+		init_unistr2( &basic->dns_domain, dnsdomain, UNI_STR_TERMINATE);
+
+		/* FIXME!! We really should fill in the correct forest
+		   name.  Should get this information from winbindd.  */
+		basic->forestname_ptr = 1;
+		init_unistr2( &basic->forest_domain, dnsdomain, UNI_STR_TERMINATE);
+	} else {
+		/* security = domain should not fill in the dns or
+		   forest name */
+		basic->dnsname_ptr = 0;
+		basic->forestname_ptr = 0;
+	}
+
+	*info = basic;
+
+	return NT_STATUS_OK;
+}
+
+/********************************************************************
+ Implement the DsroleGetPrimaryDomainInfo() call
+ ********************************************************************/
+
+NTSTATUS _dsrole_get_primary_dominfo(pipes_struct *p, DS_Q_GETPRIMDOMINFO *q_u, DS_R_GETPRIMDOMINFO *r_u)
+{
+	NTSTATUS result = NT_STATUS_OK;
+	uint32 level = q_u->level;
+
+	switch ( level ) {
+
+		case DsRolePrimaryDomainInfoBasic:
+			r_u->level = DsRolePrimaryDomainInfoBasic;
+			r_u->ptr = 1;
+			result = fill_dsrole_dominfo_basic( p->mem_ctx, &r_u->info.basic );
+			break;
+
+		default:
+			DEBUG(0,("_dsrole_get_primary_dominfo: Unsupported info level [%d]!\n",
+				level));
+			result = NT_STATUS_INVALID_LEVEL;
+	}
+
+	return result;
+}
+
+
+

Modified: branches/samba/upstream/source/rpc_server/srv_lsa_hnd.c
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_lsa_hnd.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_server/srv_lsa_hnd.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -34,7 +35,7 @@
  pipe is open. JRA.
 ****************************************************************************/
 
-static bool is_samr_lsa_pipe(const char *pipe_name)
+static BOOL is_samr_lsa_pipe(const char *pipe_name)
 {
 	return (strstr(pipe_name, "samr") || strstr(pipe_name, "lsa"));
 }
@@ -44,7 +45,7 @@
  pipes of the same name.
 ****************************************************************************/
 
-bool init_pipe_handle_list(pipes_struct *p, const char *pipe_name)
+BOOL init_pipe_handle_list(pipes_struct *p, char *pipe_name)
 {
 	pipes_struct *plist = get_first_internal_pipe();
 	struct handle_list *hl = NULL;
@@ -53,10 +54,9 @@
 		if (strequal( plist->name, pipe_name) ||
 				(is_samr_lsa_pipe(plist->name) && is_samr_lsa_pipe(pipe_name))) {
 			if (!plist->pipe_handles) {
-				char *msg;
-				asprintf(&msg, "init_pipe_handles: NULL "
-					 "pipe_handle pointer in pipe %s",
-					 pipe_name);
+				pstring msg;
+				slprintf(msg, sizeof(msg)-1, "init_pipe_handles: NULL pipe_handle pointer in pipe %s",
+						pipe_name );
 				smb_panic(msg);
 			}
 			hl = plist->pipe_handles;
@@ -99,7 +99,7 @@
   find first available policy slot.  creates a policy handle for you.
 ****************************************************************************/
 
-bool create_policy_hnd(pipes_struct *p, POLICY_HND *hnd, void (*free_fn)(void *), void *data_ptr)
+BOOL create_policy_hnd(pipes_struct *p, POLICY_HND *hnd, void (*free_fn)(void *), void *data_ptr)
 {
 	static uint32 pol_hnd_low  = 0;
 	static uint32 pol_hnd_high = 0;
@@ -146,7 +146,7 @@
 	*hnd = pol->pol_hnd;
 	
 	DEBUG(4,("Opened policy hnd[%d] ", (int)p->pipe_handles->count));
-	dump_data(4, (uint8 *)hnd, sizeof(*hnd));
+	dump_data(4, (char *)hnd, sizeof(*hnd));
 
 	return True;
 }
@@ -166,7 +166,7 @@
 	for (i = 0, pol=p->pipe_handles->Policy;pol;pol=pol->next, i++) {
 		if (memcmp(&pol->pol_hnd, hnd, sizeof(*hnd)) == 0) {
 			DEBUG(4,("Found policy hnd[%d] ", (int)i));
-			dump_data(4, (uint8 *)hnd, sizeof(*hnd));
+			dump_data(4, (char *)hnd, sizeof(*hnd));
 			if (data_p)
 				*data_p = pol->data_ptr;
 			return pol;
@@ -174,7 +174,7 @@
 	}
 
 	DEBUG(4,("Policy not found: "));
-	dump_data(4, (uint8 *)hnd, sizeof(*hnd));
+	dump_data(4, (char *)hnd, sizeof(*hnd));
 
 	p->bad_handle_fault_state = True;
 
@@ -185,7 +185,7 @@
   find policy by handle
 ****************************************************************************/
 
-bool find_policy_by_hnd(pipes_struct *p, POLICY_HND *hnd, void **data_p)
+BOOL find_policy_by_hnd(pipes_struct *p, POLICY_HND *hnd, void **data_p)
 {
 	return find_policy_by_hnd_internal(p, hnd, data_p) == NULL ? False : True;
 }
@@ -194,7 +194,7 @@
   Close a policy.
 ****************************************************************************/
 
-bool close_policy_hnd(pipes_struct *p, POLICY_HND *hnd)
+BOOL close_policy_hnd(pipes_struct *p, POLICY_HND *hnd)
 {
 	struct policy *pol = find_policy_by_hnd_internal(p, hnd, NULL);
 
@@ -250,7 +250,7 @@
 token has enough access to access the pipe.
 ********************************************************************/
 
-bool pipe_access_check(pipes_struct *p)
+BOOL pipe_access_check(pipes_struct *p)
 {
 	/* Don't let anonymous users access this RPC if restrict
 	   anonymous > 0 */

Modified: branches/samba/upstream/source/rpc_server/srv_lsa_nt.c
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_lsa_nt.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_server/srv_lsa_nt.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,20 +10,20 @@
  *  Copyright (C) Simo Sorce                        2003.
  *  Copyright (C) Gerald (Jerry) Carter             2005.
  *  Copyright (C) Volker Lendecke                   2005.
- *  Copyright (C) Guenther Deschner		    2008.
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
- *
+ *  
  *  This program is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
- *
+ *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 /* This is the implementation of the lsa server code. */
@@ -40,32 +40,83 @@
 	uint32 access;
 };
 
-const struct generic_mapping lsa_generic_mapping = {
-	LSA_POLICY_READ,
-	LSA_POLICY_WRITE,
-	LSA_POLICY_EXECUTE,
-	LSA_POLICY_ALL_ACCESS
+struct generic_mapping lsa_generic_mapping = {
+	POLICY_READ,
+	POLICY_WRITE,
+	POLICY_EXECUTE,
+	POLICY_ALL_ACCESS
 };
 
+/*******************************************************************
+ Function to free the per handle data.
+ ********************************************************************/
+
+static void free_lsa_info(void *ptr)
+{
+	struct lsa_info *lsa = (struct lsa_info *)ptr;
+
+	SAFE_FREE(lsa);
+}
+
 /***************************************************************************
- init_lsa_ref_domain_list - adds a domain if it's not already in, returns the index.
+Init dom_query
+ ***************************************************************************/
+
+static void init_dom_query_3(DOM_QUERY_3 *d_q, const char *dom_name, DOM_SID *dom_sid)
+{
+	d_q->buffer_dom_name = (dom_name != NULL) ? 1 : 0; /* domain buffer pointer */
+	d_q->buffer_dom_sid = (dom_sid != NULL) ? 1 : 0;  /* domain sid pointer */
+
+	/* this string is supposed to be non-null terminated. */
+	/* But the maxlen in this UNISTR2 must include the terminating null. */
+	init_unistr2(&d_q->uni_domain_name, dom_name, UNI_BROKEN_NON_NULL);
+
+	/*
+	 * I'm not sure why this really odd combination of length
+	 * values works, but it does appear to. I need to look at
+	 * this *much* more closely - but at the moment leave alone
+	 * until it's understood. This allows a W2k client to join
+	 * a domain with both odd and even length names... JRA.
+	 */
+
+	/*
+	 * IMPORTANT NOTE !!!!
+	 * The two fields below probably are reversed in meaning, ie.
+	 * the first field is probably the str_len, the second the max
+	 * len. Both are measured in bytes anyway.
+	 */
+
+	d_q->uni_dom_str_len = d_q->uni_domain_name.uni_max_len * 2;
+	d_q->uni_dom_max_len = d_q->uni_domain_name.uni_str_len * 2;
+
+	if (dom_sid != NULL)
+		init_dom_sid2(&d_q->dom_sid, dom_sid);
+}
+
+/***************************************************************************
+Init dom_query
+ ***************************************************************************/
+
+static void init_dom_query_5(DOM_QUERY_5 *d_q, const char *dom_name, DOM_SID *dom_sid)
+{
+	init_dom_query_3(d_q, dom_name, dom_sid);
+}
+
+/***************************************************************************
+ init_dom_ref - adds a domain if it's not already in, returns the index.
 ***************************************************************************/
 
-static int init_lsa_ref_domain_list(TALLOC_CTX *mem_ctx,
-				    struct lsa_RefDomainList *ref,
-				    const char *dom_name,
-				    DOM_SID *dom_sid)
+static int init_dom_ref(DOM_R_REF *ref, const char *dom_name, DOM_SID *dom_sid)
 {
 	int num = 0;
 
 	if (dom_name != NULL) {
-		for (num = 0; num < ref->count; num++) {
-			if (sid_equal(dom_sid, ref->domains[num].sid)) {
+		for (num = 0; num < ref->num_ref_doms_1; num++) {
+			if (sid_equal(dom_sid, &ref->ref_dom[num].ref_dom.sid))
 				return num;
-			}
 		}
 	} else {
-		num = ref->count;
+		num = ref->num_ref_doms_1;
 	}
 
 	if (num >= MAX_REF_DOMAINS) {
@@ -73,73 +124,32 @@
 		return -1;
 	}
 
-	ref->count = num + 1;
-	ref->max_size = MAX_REF_DOMAINS;
+	ref->num_ref_doms_1 = num+1;
+	ref->ptr_ref_dom  = 1;
+	ref->max_entries = MAX_REF_DOMAINS;
+	ref->num_ref_doms_2 = num+1;
 
-	ref->domains = TALLOC_REALLOC_ARRAY(mem_ctx, ref->domains,
-					    struct lsa_DomainInfo, ref->count);
-	if (!ref->domains) {
-		return -1;
-	}
+	ref->hdr_ref_dom[num].ptr_dom_sid = 1; /* dom sid cannot be NULL. */
 
-	ZERO_STRUCT(ref->domains[num]);
+	init_unistr2(&ref->ref_dom[num].uni_dom_name, dom_name, UNI_FLAGS_NONE);
+	init_uni_hdr(&ref->hdr_ref_dom[num].hdr_dom_name, &ref->ref_dom[num].uni_dom_name);
 
-	init_lsa_StringLarge(&ref->domains[num].name, dom_name);
-	ref->domains[num].sid = sid_dup_talloc(mem_ctx, dom_sid);
-	if (!ref->domains[num].sid) {
-		return -1;
-	}
+	init_dom_sid2(&ref->ref_dom[num].ref_dom, dom_sid );
 
 	return num;
 }
 
-
-/*******************************************************************
- Function to free the per handle data.
- ********************************************************************/
-
-static void free_lsa_info(void *ptr)
-{
-	struct lsa_info *lsa = (struct lsa_info *)ptr;
-
-	SAFE_FREE(lsa);
-}
-
 /***************************************************************************
- initialize a lsa_DomainInfo structure.
- ***************************************************************************/
-
-static void init_dom_query_3(struct lsa_DomainInfo *r,
-			     const char *name,
-			     DOM_SID *sid)
-{
-	init_lsa_StringLarge(&r->name, name);
-	r->sid = sid;
-}
-
-/***************************************************************************
- initialize a lsa_DomainInfo structure.
- ***************************************************************************/
-
-static void init_dom_query_5(struct lsa_DomainInfo *r,
-			     const char *name,
-			     DOM_SID *sid)
-{
-	init_lsa_StringLarge(&r->name, name);
-	r->sid = sid;
-}
-
-/***************************************************************************
  lookup_lsa_rids. Must be called as root for lookup_name to work.
  ***************************************************************************/
 
 static NTSTATUS lookup_lsa_rids(TALLOC_CTX *mem_ctx,
-				struct lsa_RefDomainList *ref,
-				struct lsa_TranslatedSid *prid,
-				uint32_t num_entries,
-				struct lsa_String *name,
-				int flags,
-				uint32_t *pmapped_count)
+			DOM_R_REF *ref,
+			DOM_RID *prid,
+			uint32 num_entries,
+			const UNISTR2 *name,
+			int flags,
+			uint32 *pmapped_count)
 {
 	uint32 mapped_count, i;
 
@@ -152,14 +162,15 @@
 		DOM_SID sid;
 		uint32 rid;
 		int dom_idx;
-		const char *full_name;
+		char *full_name;
 		const char *domain;
 		enum lsa_SidType type = SID_NAME_UNKNOWN;
 
 		/* Split name into domain and user component */
 
-		full_name = name[i].string;
+		full_name = rpcstr_pull_unistr2_talloc(mem_ctx, &name[i]);
 		if (full_name == NULL) {
+			DEBUG(0, ("pull_ucs2_talloc failed\n"));
 			return NT_STATUS_NO_MEMORY;
 		}
 
@@ -192,11 +203,11 @@
 
 		if (type != SID_NAME_UNKNOWN) {
 			sid_split_rid(&sid, &rid);
-			dom_idx = init_lsa_ref_domain_list(mem_ctx, ref, domain, &sid);
+			dom_idx = init_dom_ref(ref, domain, &sid);
 			mapped_count++;
 		}
 
-		init_lsa_translated_sid(&prid[i], type, rid, dom_idx);
+		init_dom_rid(&prid[i], rid, type, dom_idx);
 	}
 
 	*pmapped_count = mapped_count;
@@ -208,12 +219,12 @@
  ***************************************************************************/
 
 static NTSTATUS lookup_lsa_sids(TALLOC_CTX *mem_ctx,
-				struct lsa_RefDomainList *ref,
-				struct lsa_TranslatedSid3 *trans_sids,
-				uint32_t num_entries,
-				struct lsa_String *name,
-				int flags,
-				uint32 *pmapped_count)
+			DOM_R_REF *ref,
+			LSA_TRANSLATED_SID3 *trans_sids,
+			uint32 num_entries,
+			const UNISTR2 *name,
+			int flags,
+			uint32 *pmapped_count)
 {
 	uint32 mapped_count, i;
 
@@ -226,16 +237,15 @@
 		DOM_SID sid;
 		uint32 rid;
 		int dom_idx;
-		const char *full_name;
+		char *full_name;
 		const char *domain;
 		enum lsa_SidType type = SID_NAME_UNKNOWN;
 
-		ZERO_STRUCT(sid);
-
 		/* Split name into domain and user component */
 
-		full_name = name[i].string;
+		full_name = rpcstr_pull_unistr2_talloc(mem_ctx, &name[i]);
 		if (full_name == NULL) {
+			DEBUG(0, ("pull_ucs2_talloc failed\n"));
 			return NT_STATUS_NO_MEMORY;
 		}
 
@@ -270,20 +280,164 @@
 			DOM_SID domain_sid;
 			sid_copy(&domain_sid, &sid);
 			sid_split_rid(&domain_sid, &rid);
-			dom_idx = init_lsa_ref_domain_list(mem_ctx, ref, domain, &domain_sid);
+			dom_idx = init_dom_ref(ref, domain, &domain_sid);
 			mapped_count++;
 		}
 
-		/* Initialize the lsa_TranslatedSid3 return. */
+		/* Initialize the LSA_TRANSLATED_SID3 return. */
 		trans_sids[i].sid_type = type;
-		trans_sids[i].sid = sid_dup_talloc(mem_ctx, &sid);
-		trans_sids[i].sid_index = dom_idx;
+		trans_sids[i].sid2 = TALLOC_P(mem_ctx, DOM_SID2);
+		if (trans_sids[i].sid2 == NULL) {
+			return NT_STATUS_NO_MEMORY;
+		}
+		init_dom_sid2(trans_sids[i].sid2, &sid);
+		trans_sids[i].sid_idx = dom_idx;
 	}
 
 	*pmapped_count = mapped_count;
 	return NT_STATUS_OK;
 }
 
+/***************************************************************************
+ init_reply_lookup_names
+ ***************************************************************************/
+
+static void init_reply_lookup_names(LSA_R_LOOKUP_NAMES *r_l,
+                DOM_R_REF *ref, uint32 num_entries,
+                DOM_RID *rid, uint32 mapped_count)
+{
+	r_l->ptr_dom_ref  = 1;
+	r_l->dom_ref      = ref;
+
+	r_l->num_entries  = num_entries;
+	r_l->ptr_entries  = 1;
+	r_l->num_entries2 = num_entries;
+	r_l->dom_rid      = rid;
+
+	r_l->mapped_count = mapped_count;
+}
+
+/***************************************************************************
+ init_reply_lookup_names2
+ ***************************************************************************/
+
+static void init_reply_lookup_names2(LSA_R_LOOKUP_NAMES2 *r_l,
+                DOM_R_REF *ref, uint32 num_entries,
+                DOM_RID2 *rid, uint32 mapped_count)
+{
+	r_l->ptr_dom_ref  = 1;
+	r_l->dom_ref      = ref;
+
+	r_l->num_entries  = num_entries;
+	r_l->ptr_entries  = 1;
+	r_l->num_entries2 = num_entries;
+	r_l->dom_rid      = rid;
+
+	r_l->mapped_count = mapped_count;
+}
+
+/***************************************************************************
+ init_reply_lookup_names3
+ ***************************************************************************/
+
+static void init_reply_lookup_names3(LSA_R_LOOKUP_NAMES3 *r_l,
+                DOM_R_REF *ref, uint32 num_entries,
+                LSA_TRANSLATED_SID3 *trans_sids, uint32 mapped_count)
+{
+	r_l->ptr_dom_ref  = 1;
+	r_l->dom_ref      = ref;
+
+	r_l->num_entries  = num_entries;
+	r_l->ptr_entries  = 1;
+	r_l->num_entries2 = num_entries;
+	r_l->trans_sids   = trans_sids;
+
+	r_l->mapped_count = mapped_count;
+}
+
+/***************************************************************************
+ init_reply_lookup_names4
+ ***************************************************************************/
+
+static void init_reply_lookup_names4(LSA_R_LOOKUP_NAMES4 *r_l,
+                DOM_R_REF *ref, uint32 num_entries,
+                LSA_TRANSLATED_SID3 *trans_sids, uint32 mapped_count)
+{
+	r_l->ptr_dom_ref  = 1;
+	r_l->dom_ref      = ref;
+
+	r_l->num_entries  = num_entries;
+	r_l->ptr_entries  = 1;
+	r_l->num_entries2 = num_entries;
+	r_l->trans_sids   = trans_sids;
+
+	r_l->mapped_count = mapped_count;
+}
+
+/***************************************************************************
+ Init_reply_lookup_sids.
+ ***************************************************************************/
+
+static void init_reply_lookup_sids2(LSA_R_LOOKUP_SIDS2 *r_l,
+				DOM_R_REF *ref,
+				uint32 mapped_count)
+{
+	r_l->ptr_dom_ref  = ref ? 1 : 0;
+	r_l->dom_ref      = ref;
+	r_l->mapped_count = mapped_count;
+}
+
+/***************************************************************************
+ Init_reply_lookup_sids.
+ ***************************************************************************/
+
+static void init_reply_lookup_sids3(LSA_R_LOOKUP_SIDS3 *r_l,
+				DOM_R_REF *ref,
+				uint32 mapped_count)
+{
+	r_l->ptr_dom_ref  = ref ? 1 : 0;
+	r_l->dom_ref      = ref;
+	r_l->mapped_count = mapped_count;
+}
+
+/***************************************************************************
+ Init_reply_lookup_sids.
+ ***************************************************************************/
+
+static NTSTATUS init_reply_lookup_sids(TALLOC_CTX *mem_ctx,
+				LSA_R_LOOKUP_SIDS *r_l,
+				DOM_R_REF *ref,
+				LSA_TRANS_NAME_ENUM2 *names,
+				uint32 mapped_count)
+{
+	LSA_TRANS_NAME_ENUM *oldnames = &r_l->names;
+
+	oldnames->num_entries = names->num_entries;
+	oldnames->ptr_trans_names = names->ptr_trans_names;
+	oldnames->num_entries2 = names->num_entries2;
+	oldnames->uni_name = names->uni_name;
+
+	if (names->num_entries) {
+		int i;
+
+		oldnames->name = TALLOC_ARRAY(mem_ctx, LSA_TRANS_NAME, names->num_entries);
+
+		if (!oldnames->name) {
+			return NT_STATUS_NO_MEMORY;
+		}
+		for (i = 0; i < names->num_entries; i++) {
+			oldnames->name[i].sid_name_use = names->name[i].sid_name_use;
+			oldnames->name[i].hdr_name = names->name[i].hdr_name;
+			oldnames->name[i].domain_idx = names->name[i].domain_idx;
+		}
+	}
+
+	r_l->ptr_dom_ref  = ref ? 1 : 0;
+	r_l->dom_ref      = ref;
+	r_l->mapped_count = mapped_count;
+	return NT_STATUS_OK;
+}
+
 static NTSTATUS lsa_get_generic_sd(TALLOC_CTX *mem_ctx, SEC_DESC **sd, size_t *sd_size)
 {
 	DOM_SID local_adm_sid;
@@ -294,25 +448,23 @@
 
 	SEC_ACL *psa = NULL;
 
-	init_sec_access(&mask, LSA_POLICY_EXECUTE);
+	init_sec_access(&mask, POLICY_EXECUTE);
 	init_sec_ace(&ace[0], &global_sid_World, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0);
 
 	sid_copy(&adm_sid, get_global_sam_sid());
 	sid_append_rid(&adm_sid, DOMAIN_GROUP_RID_ADMINS);
-	init_sec_access(&mask, LSA_POLICY_ALL_ACCESS);
+	init_sec_access(&mask, POLICY_ALL_ACCESS);
 	init_sec_ace(&ace[1], &adm_sid, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0);
 
 	sid_copy(&local_adm_sid, &global_sid_Builtin);
 	sid_append_rid(&local_adm_sid, BUILTIN_ALIAS_RID_ADMINS);
-	init_sec_access(&mask, LSA_POLICY_ALL_ACCESS);
+	init_sec_access(&mask, POLICY_ALL_ACCESS);
 	init_sec_ace(&ace[2], &local_adm_sid, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0);
 
 	if((psa = make_sec_acl(mem_ctx, NT4_ACL_REVISION, 3, ace)) == NULL)
 		return NT_STATUS_NO_MEMORY;
 
-	if((*sd = make_sec_desc(mem_ctx, SECURITY_DESCRIPTOR_REVISION_1,
-				SEC_DESC_SELF_RELATIVE, &adm_sid, NULL, NULL,
-				psa, sd_size)) == NULL)
+	if((*sd = make_sec_desc(mem_ctx, SEC_DESC_REVISION, SEC_DESC_SELF_RELATIVE, &adm_sid, NULL, NULL, psa, sd_size)) == NULL)
 		return NT_STATUS_NO_MEMORY;
 
 	return NT_STATUS_OK;
@@ -334,7 +486,7 @@
 		r_l->hdr_nb_dom_name.uni_max_len += 2;
 		r_l->uni_nb_dom_name.uni_max_len += 1;
 	}
-
+	
 	if (dns_name && *dns_name) {
 		init_unistr2(&r_l->uni_dns_dom_name, dns_name, UNI_FLAGS_NONE);
 		init_uni_hdr(&r_l->hdr_dns_dom_name, &r_l->uni_dns_dom_name);
@@ -353,7 +505,7 @@
 	if (dom_guid) {
 		memcpy(&r_l->dom_guid, dom_guid, sizeof(struct GUID));
 	}
-
+	
 	if (dom_sid) {
 		r_l->ptr_dom_sid = 1;
 		init_dom_sid2(&r_l->dom_sid, dom_sid);
@@ -363,16 +515,15 @@
 
 
 /***************************************************************************
- _lsa_OpenPolicy2
+ _lsa_open_policy2.
  ***************************************************************************/
 
-NTSTATUS _lsa_OpenPolicy2(pipes_struct *p,
-			  struct lsa_OpenPolicy2 *r)
+NTSTATUS _lsa_open_policy2(pipes_struct *p, LSA_Q_OPEN_POL2 *q_u, LSA_R_OPEN_POL2 *r_u)
 {
 	struct lsa_info *info;
 	SEC_DESC *psd = NULL;
 	size_t sd_size;
-	uint32 des_access = r->in.access_mask;
+	uint32 des_access=q_u->des_access;
 	uint32 acc_granted;
 	NTSTATUS status;
 
@@ -384,7 +535,7 @@
 	lsa_get_generic_sd(p->mem_ctx, &psd, &sd_size);
 
 	if(!se_access_check(psd, p->pipe_user.nt_user_token, des_access, &acc_granted, &status)) {
-		if (p->pipe_user.ut.uid != sec_initial_uid()) {
+		if (geteuid() != 0) {
 			return status;
 		}
 		DEBUG(4,("ACCESS should be DENIED (granted: %#010x;  required: %#010x)\n",
@@ -394,8 +545,8 @@
 
 	/* This is needed for lsa_open_account and rpcclient .... :-) */
 
-	if (p->pipe_user.ut.uid == sec_initial_uid())
-		acc_granted = LSA_POLICY_ALL_ACCESS;
+	if (geteuid() == 0)
+		acc_granted = POLICY_ALL_ACCESS;
 
 	/* associate the domain SID with the (unique) handle. */
 	if ((info = SMB_MALLOC_P(struct lsa_info)) == NULL)
@@ -406,23 +557,22 @@
 	info->access = acc_granted;
 
 	/* set up the LSA QUERY INFO response */
-	if (!create_policy_hnd(p, r->out.handle, free_lsa_info, (void *)info))
+	if (!create_policy_hnd(p, &r_u->pol, free_lsa_info, (void *)info))
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
 	return NT_STATUS_OK;
 }
 
 /***************************************************************************
- _lsa_OpenPolicy
+ _lsa_open_policy
  ***************************************************************************/
 
-NTSTATUS _lsa_OpenPolicy(pipes_struct *p,
-			 struct lsa_OpenPolicy *r)
+NTSTATUS _lsa_open_policy(pipes_struct *p, LSA_Q_OPEN_POL *q_u, LSA_R_OPEN_POL *r_u)
 {
 	struct lsa_info *info;
 	SEC_DESC *psd = NULL;
 	size_t sd_size;
-	uint32 des_access= r->in.access_mask;
+	uint32 des_access=q_u->des_access;
 	uint32 acc_granted;
 	NTSTATUS status;
 
@@ -452,25 +602,23 @@
 	info->access = acc_granted;
 
 	/* set up the LSA QUERY INFO response */
-	if (!create_policy_hnd(p, r->out.handle, free_lsa_info, (void *)info))
+	if (!create_policy_hnd(p, &r_u->pol, free_lsa_info, (void *)info))
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
 	return NT_STATUS_OK;
 }
 
 /***************************************************************************
- _lsa_EnumTrustDom - this needs fixing to do more than return NULL ! JRA.
+ _lsa_enum_trust_dom - this needs fixing to do more than return NULL ! JRA.
  ufff, done :)  mimir
  ***************************************************************************/
 
-NTSTATUS _lsa_EnumTrustDom(pipes_struct *p,
-			   struct lsa_EnumTrustDom *r)
+NTSTATUS _lsa_enum_trust_dom(pipes_struct *p, LSA_Q_ENUM_TRUST_DOM *q_u,
+			     LSA_R_ENUM_TRUST_DOM *r_u)
 {
 	struct lsa_info *info;
 	uint32 next_idx;
 	struct trustdom_info **domains;
-	struct lsa_DomainInfo *lsa_domains = NULL;
-	int i;
 
 	/*
 	 * preferred length is set to 5 as a "our" preferred length
@@ -479,123 +627,100 @@
 	 * it needs further investigation how to optimally choose this value
 	 */
 	uint32 max_num_domains =
-		r->in.max_size < 5 ? r->in.max_size : 10;
+		q_u->preferred_len < 5 ? q_u->preferred_len : 10;
 	uint32 num_domains;
 	NTSTATUS nt_status;
 	uint32 num_thistime;
 
-	if (!find_policy_by_hnd(p, r->in.handle, (void **)(void *)&info))
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&info))
 		return NT_STATUS_INVALID_HANDLE;
 
 	/* check if the user have enough rights */
-	if (!(info->access & LSA_POLICY_VIEW_LOCAL_INFORMATION))
+	if (!(info->access & POLICY_VIEW_LOCAL_INFORMATION))
 		return NT_STATUS_ACCESS_DENIED;
 
-	nt_status = pdb_enum_trusteddoms(p->mem_ctx, &num_domains, &domains);
+	nt_status = secrets_trusted_domains(p->mem_ctx, &num_domains,
+					    &domains);
 
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		return nt_status;
 	}
 
-	if (*r->in.resume_handle < num_domains) {
+	if (q_u->enum_context < num_domains) {
 		num_thistime = MIN(num_domains, max_num_domains);
 
-		nt_status = STATUS_MORE_ENTRIES;
+		r_u->status = STATUS_MORE_ENTRIES;
 
-		if (*r->in.resume_handle + num_thistime > num_domains) {
-			num_thistime = num_domains - *r->in.resume_handle;
-			nt_status = NT_STATUS_OK;
+		if (q_u->enum_context + num_thistime > num_domains) {
+			num_thistime = num_domains - q_u->enum_context;
+			r_u->status = NT_STATUS_OK;
 		}
 
-		next_idx = *r->in.resume_handle + num_thistime;
+		next_idx = q_u->enum_context + num_thistime;
 	} else {
 		num_thistime = 0;
 		next_idx = 0xffffffff;
-		nt_status = NT_STATUS_NO_MORE_ENTRIES;
+		r_u->status = NT_STATUS_NO_MORE_ENTRIES;
 	}
-
+		
 	/* set up the lsa_enum_trust_dom response */
 
-	lsa_domains = TALLOC_ZERO_ARRAY(p->mem_ctx, struct lsa_DomainInfo,
-					num_thistime);
-	if (!lsa_domains) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	init_r_enum_trust_dom(p->mem_ctx, r_u, next_idx,
+			      num_thistime, domains+q_u->enum_context);
 
-	for (i=0; i<num_thistime; i++) {
-		init_lsa_StringLarge(&lsa_domains[i].name, domains[i]->name);
-		lsa_domains[i].sid = &domains[i]->sid;
-	}
-
-	*r->out.resume_handle = next_idx;
-	r->out.domains->count = num_thistime;
-	r->out.domains->domains = lsa_domains;
-
-	return nt_status;
+	return r_u->status;
 }
 
-#define LSA_AUDIT_NUM_CATEGORIES_NT4	7
-#define LSA_AUDIT_NUM_CATEGORIES_WIN2K	9
-#define LSA_AUDIT_NUM_CATEGORIES LSA_AUDIT_NUM_CATEGORIES_NT4
-
 /***************************************************************************
- _lsa_QueryInfoPolicy
+ _lsa_query_info. See the POLICY_INFOMATION_CLASS docs at msdn.
  ***************************************************************************/
 
-NTSTATUS _lsa_QueryInfoPolicy(pipes_struct *p,
-			      struct lsa_QueryInfoPolicy *r)
+NTSTATUS _lsa_query_info(pipes_struct *p, LSA_Q_QUERY_INFO *q_u, LSA_R_QUERY_INFO *r_u)
 {
-	NTSTATUS status = NT_STATUS_OK;
 	struct lsa_info *handle;
+	LSA_INFO_CTR *ctr = &r_u->ctr;
 	DOM_SID domain_sid;
 	const char *name;
 	DOM_SID *sid = NULL;
-	union lsa_PolicyInformation *info = NULL;
 
-	if (!find_policy_by_hnd(p, r->in.handle, (void **)(void *)&handle))
+	r_u->status = NT_STATUS_OK;
+
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&handle))
 		return NT_STATUS_INVALID_HANDLE;
 
-	info = TALLOC_ZERO_P(p->mem_ctx, union lsa_PolicyInformation);
-	if (!info) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	switch (r->in.level) {
+	switch (q_u->info_class) {
 	case 0x02:
 		{
 
 		uint32 policy_def = LSA_AUDIT_POLICY_ALL;
-
+		
 		/* check if the user have enough rights */
-		if (!(handle->access & LSA_POLICY_VIEW_AUDIT_INFORMATION)) {
-			DEBUG(10,("_lsa_QueryInfoPolicy: insufficient access rights\n"));
+		if (!(handle->access & POLICY_VIEW_AUDIT_INFORMATION)) {
+			DEBUG(10,("_lsa_query_info: insufficient access rights\n"));
 			return NT_STATUS_ACCESS_DENIED;
 		}
 
 		/* fake info: We audit everything. ;) */
+		ctr->info.id2.ptr = 1;
+		ctr->info.id2.auditing_enabled = True;
+		ctr->info.id2.count1 = ctr->info.id2.count2 = LSA_AUDIT_NUM_CATEGORIES;
 
-		info->audit_events.auditing_mode = true;
-		info->audit_events.count = LSA_AUDIT_NUM_CATEGORIES;
-		info->audit_events.settings = TALLOC_ZERO_ARRAY(p->mem_ctx,
-								enum lsa_PolicyAuditPolicy,
-								info->audit_events.count);
-		if (!info->audit_events.settings) {
+		if ((ctr->info.id2.auditsettings = TALLOC_ZERO_ARRAY(p->mem_ctx, uint32, LSA_AUDIT_NUM_CATEGORIES)) == NULL)
 			return NT_STATUS_NO_MEMORY;
-		}
 
-		info->audit_events.settings[LSA_AUDIT_CATEGORY_ACCOUNT_MANAGEMENT] = policy_def;
-		info->audit_events.settings[LSA_AUDIT_CATEGORY_FILE_AND_OBJECT_ACCESS] = policy_def;
-		info->audit_events.settings[LSA_AUDIT_CATEGORY_LOGON] = policy_def;
-		info->audit_events.settings[LSA_AUDIT_CATEGORY_PROCCESS_TRACKING] = policy_def;
-		info->audit_events.settings[LSA_AUDIT_CATEGORY_SECURITY_POLICY_CHANGES] = policy_def;
-		info->audit_events.settings[LSA_AUDIT_CATEGORY_SYSTEM] = policy_def;
-		info->audit_events.settings[LSA_AUDIT_CATEGORY_USE_OF_USER_RIGHTS] = policy_def;
+		ctr->info.id2.auditsettings[LSA_AUDIT_CATEGORY_ACCOUNT_MANAGEMENT] = policy_def;
+		ctr->info.id2.auditsettings[LSA_AUDIT_CATEGORY_FILE_AND_OBJECT_ACCESS] = policy_def; 
+		ctr->info.id2.auditsettings[LSA_AUDIT_CATEGORY_LOGON] = policy_def; 
+		ctr->info.id2.auditsettings[LSA_AUDIT_CATEGORY_PROCCESS_TRACKING] = policy_def; 
+		ctr->info.id2.auditsettings[LSA_AUDIT_CATEGORY_SECURITY_POLICY_CHANGES] = policy_def;
+		ctr->info.id2.auditsettings[LSA_AUDIT_CATEGORY_SYSTEM] = policy_def;
+		ctr->info.id2.auditsettings[LSA_AUDIT_CATEGORY_USE_OF_USER_RIGHTS] = policy_def; 
 
 		break;
 		}
 	case 0x03:
 		/* check if the user have enough rights */
-		if (!(handle->access & LSA_POLICY_VIEW_LOCAL_INFORMATION))
+		if (!(handle->access & POLICY_VIEW_LOCAL_INFORMATION))
 			return NT_STATUS_ACCESS_DENIED;
 
 		/* Request PolicyPrimaryDomainInformation. */
@@ -603,22 +728,15 @@
 			case ROLE_DOMAIN_PDC:
 			case ROLE_DOMAIN_BDC:
 				name = get_global_sam_name();
-				sid = sid_dup_talloc(p->mem_ctx, get_global_sam_sid());
-				if (!sid) {
-					return NT_STATUS_NO_MEMORY;
-				}
+				sid = get_global_sam_sid();
 				break;
 			case ROLE_DOMAIN_MEMBER:
 				name = lp_workgroup();
 				/* We need to return the Domain SID here. */
-				if (secrets_fetch_domain_sid(lp_workgroup(), &domain_sid)) {
-					sid = sid_dup_talloc(p->mem_ctx, &domain_sid);
-					if (!sid) {
-						return NT_STATUS_NO_MEMORY;
-					}
-				} else {
+				if (secrets_fetch_domain_sid(lp_workgroup(), &domain_sid))
+					sid = &domain_sid;
+				else
 					return NT_STATUS_CANT_ACCESS_DOMAIN_INFO;
-				}
 				break;
 			case ROLE_STANDALONE:
 				name = lp_workgroup();
@@ -627,22 +745,21 @@
 			default:
 				return NT_STATUS_CANT_ACCESS_DOMAIN_INFO;
 		}
-		init_dom_query_3(&info->domain, name, sid);
+		init_dom_query_3(&r_u->ctr.info.id3, name, sid);
 		break;
 	case 0x05:
 		/* check if the user have enough rights */
-		if (!(handle->access & LSA_POLICY_VIEW_LOCAL_INFORMATION))
+		if (!(handle->access & POLICY_VIEW_LOCAL_INFORMATION))
 			return NT_STATUS_ACCESS_DENIED;
 
 		/* Request PolicyAccountDomainInformation. */
 		name = get_global_sam_name();
 		sid = get_global_sam_sid();
-
-		init_dom_query_5(&info->account_domain, name, sid);
+		init_dom_query_5(&r_u->ctr.info.id5, name, sid);
 		break;
 	case 0x06:
 		/* check if the user have enough rights */
-		if (!(handle->access & LSA_POLICY_VIEW_LOCAL_INFORMATION))
+		if (!(handle->access & POLICY_VIEW_LOCAL_INFORMATION))
 			return NT_STATUS_ACCESS_DENIED;
 
 		switch (lp_server_role()) {
@@ -651,27 +768,29 @@
 				 * only a BDC is a backup controller
 				 * of the domain, it controls.
 				 */
-				info->role.role = 2;
+				ctr->info.id6.server_role = 2;
 				break;
 			default:
 				/*
 				 * any other role is a primary
 				 * of the domain, it controls.
 				 */
-				info->role.role = 3;
-				break;
+				ctr->info.id6.server_role = 3;
+				break; 
 		}
 		break;
 	default:
-		DEBUG(0,("_lsa_QueryInfoPolicy: unknown info level in Lsa Query: %d\n",
-			r->in.level));
-		status = NT_STATUS_INVALID_INFO_CLASS;
+		DEBUG(0,("_lsa_query_info: unknown info level in Lsa Query: %d\n", q_u->info_class));
+		r_u->status = NT_STATUS_INVALID_INFO_CLASS;
 		break;
 	}
 
-	*r->out.info = info;
+	if (NT_STATUS_IS_OK(r_u->status)) {
+		r_u->dom_ptr = 0x22000000; /* bizarre */
+		ctr->info_class = q_u->info_class;
+	}
 
-	return status;
+	return r_u->status;
 }
 
 /***************************************************************************
@@ -679,40 +798,38 @@
  ***************************************************************************/
 
 static NTSTATUS _lsa_lookup_sids_internal(pipes_struct *p,
-					  TALLOC_CTX *mem_ctx,
-					  uint16_t level,			/* input */
-					  int num_sids,				/* input */
-					  struct lsa_SidPtr *sid,		/* input */
-					  struct lsa_RefDomainList **pp_ref,	/* input/output */
-					  struct lsa_TranslatedName2 **pp_names,/* input/output */
-					  uint32_t *pp_mapped_count)		/* input/output */
+				uint16 level,				/* input */
+				int num_sids,				/* input */
+				const DOM_SID2 *sid,			/* input */
+				DOM_R_REF **pp_ref,			/* output */
+				LSA_TRANS_NAME_ENUM2 *names,		/* input/output */
+				uint32 *pp_mapped_count)
 {
 	NTSTATUS status;
 	int i;
 	const DOM_SID **sids = NULL;
-	struct lsa_RefDomainList *ref = NULL;
+	DOM_R_REF *ref = NULL;
 	uint32 mapped_count = 0;
 	struct lsa_dom_info *dom_infos = NULL;
 	struct lsa_name_info *name_infos = NULL;
-	struct lsa_TranslatedName2 *names = NULL;
 
 	*pp_mapped_count = 0;
-	*pp_names = NULL;
 	*pp_ref = NULL;
+	ZERO_STRUCTP(names);
 
 	if (num_sids == 0) {
 		return NT_STATUS_OK;
 	}
 
 	sids = TALLOC_ARRAY(p->mem_ctx, const DOM_SID *, num_sids);
-	ref = TALLOC_ZERO_P(p->mem_ctx, struct lsa_RefDomainList);
+	ref = TALLOC_ZERO_P(p->mem_ctx, DOM_R_REF);
 
 	if (sids == NULL || ref == NULL) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
 	for (i=0; i<num_sids; i++) {
-		sids[i] = sid[i].sid;
+		sids[i] = &sid[i].sid;
 	}
 
 	status = lookup_sids(p->mem_ctx, num_sids, sids, level,
@@ -722,8 +839,9 @@
 		return status;
 	}
 
-	names = TALLOC_ARRAY(p->mem_ctx, struct lsa_TranslatedName2, num_sids);
-	if (names == NULL) {
+	names->name = TALLOC_ARRAY(p->mem_ctx, LSA_TRANS_NAME2, num_sids);
+	names->uni_name = TALLOC_ARRAY(p->mem_ctx, UNISTR2, num_sids);
+	if ((names->name == NULL) || (names->uni_name == NULL)) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
@@ -733,9 +851,8 @@
 			break;
 		}
 
-		if (init_lsa_ref_domain_list(mem_ctx, ref,
-					     dom_infos[i].name,
-					     &dom_infos[i].sid) != i) {
+		if (init_dom_ref(ref, dom_infos[i].name,
+				 &dom_infos[i].sid) != i) {
 			DEBUG(0, ("Domain %s mentioned twice??\n",
 				  dom_infos[i].name));
 			return NT_STATUS_INTERNAL_ERROR;
@@ -746,28 +863,24 @@
 		struct lsa_name_info *name = &name_infos[i];
 
 		if (name->type == SID_NAME_UNKNOWN) {
-			fstring tmp;
 			name->dom_idx = -1;
-			/* Unknown sids should return the string
-			 * representation of the SID. Windows 2003 behaves
-			 * rather erratic here, in many cases it returns the
-			 * RID as 8 bytes hex, in others it returns the full
-			 * SID. We (Jerry/VL) could not figure out which the
-			 * hard cases are, so leave it with the SID.  */
-			name->name = talloc_asprintf(p->mem_ctx, "%s",
-			                             sid_to_fstring(tmp,
-								    sids[i]));
+			/* unknown sids should return the string representation of the SID */
+			name->name = talloc_asprintf(p->mem_ctx, "%s", 
+			                             sid_string_static(sids[i]));
 			if (name->name == NULL) {
 				return NT_STATUS_NO_MEMORY;
 			}
 		} else {
 			mapped_count += 1;
 		}
-
-		init_lsa_translated_name2(&names[i], name->type,
-					  name->name, name->dom_idx, 0);
+		init_lsa_trans_name2(&names->name[i], &names->uni_name[i],
+				    name->type, name->name, name->dom_idx);
 	}
 
+	names->num_entries = num_sids;
+	names->ptr_trans_names = 1;
+	names->num_entries2 = num_sids;
+
 	status = NT_STATUS_NONE_MAPPED;
 	if (mapped_count > 0) {
 		status = (mapped_count < num_sids) ?
@@ -778,173 +891,147 @@
 		   num_sids, mapped_count, nt_errstr(status)));
 
 	*pp_mapped_count = mapped_count;
-	*pp_names = names;
 	*pp_ref = ref;
 
 	return status;
 }
 
 /***************************************************************************
- _lsa_LookupSids
+ _lsa_lookup_sids
  ***************************************************************************/
 
-NTSTATUS _lsa_LookupSids(pipes_struct *p,
-			 struct lsa_LookupSids *r)
+NTSTATUS _lsa_lookup_sids(pipes_struct *p,
+			  LSA_Q_LOOKUP_SIDS *q_u,
+			  LSA_R_LOOKUP_SIDS *r_u)
 {
-	NTSTATUS status;
 	struct lsa_info *handle;
-	int num_sids = r->in.sids->num_sids;
+	int num_sids = q_u->sids.num_entries;
 	uint32 mapped_count = 0;
-	struct lsa_RefDomainList *domains = NULL;
-	struct lsa_TranslatedName *names_out = NULL;
-	struct lsa_TranslatedName2 *names = NULL;
-	int i;
+	DOM_R_REF *ref = NULL;
+	LSA_TRANS_NAME_ENUM2 names;
+	NTSTATUS status;
 
-	if ((r->in.level < 1) || (r->in.level > 6)) {
+	if ((q_u->level < 1) || (q_u->level > 6)) {
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-	if (!find_policy_by_hnd(p, r->in.handle, (void **)(void *)&handle)) {
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&handle)) {
 		return NT_STATUS_INVALID_HANDLE;
 	}
 
 	/* check if the user has enough rights */
-	if (!(handle->access & LSA_POLICY_LOOKUP_NAMES)) {
+	if (!(handle->access & POLICY_LOOKUP_NAMES)) {
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
 	if (num_sids >  MAX_LOOKUP_SIDS) {
-		DEBUG(5,("_lsa_LookupSids: limit of %d exceeded, requested %d\n",
+		DEBUG(5,("_lsa_lookup_sids: limit of %d exceeded, requested %d\n",
 			 MAX_LOOKUP_SIDS, num_sids));
 		return NT_STATUS_NONE_MAPPED;
 	}
 
-	status = _lsa_lookup_sids_internal(p,
-					   p->mem_ctx,
-					   r->in.level,
-					   num_sids,
-					   r->in.sids->sids,
-					   &domains,
-					   &names,
-					   &mapped_count);
+	r_u->status = _lsa_lookup_sids_internal(p,
+						q_u->level,
+						num_sids, 
+						q_u->sids.sid,
+						&ref,
+						&names,
+						&mapped_count);
 
-	/* Convert from lsa_TranslatedName2 to lsa_TranslatedName */
-	names_out = TALLOC_ARRAY(p->mem_ctx, struct lsa_TranslatedName,
-				 num_sids);
-	if (!names_out) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	/* Convert from LSA_TRANS_NAME_ENUM2 to LSA_TRANS_NAME_ENUM */
 
-	for (i=0; i<num_sids; i++) {
-		names_out[i].sid_type = names[i].sid_type;
-		names_out[i].name = names[i].name;
-		names_out[i].sid_index = names[i].sid_index;
+	status = init_reply_lookup_sids(p->mem_ctx, r_u, ref, &names, mapped_count);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
 	}
-
-	*r->out.domains = domains;
-	r->out.names->count = num_sids;
-	r->out.names->names = names_out;
-	*r->out.count = mapped_count;
-
-	return status;
+	return r_u->status;
 }
 
 /***************************************************************************
- _lsa_LookupSids2
+ _lsa_lookup_sids2
  ***************************************************************************/
 
-NTSTATUS _lsa_LookupSids2(pipes_struct *p,
-			  struct lsa_LookupSids2 *r)
+NTSTATUS _lsa_lookup_sids2(pipes_struct *p,
+			  LSA_Q_LOOKUP_SIDS2 *q_u,
+			  LSA_R_LOOKUP_SIDS2 *r_u)
 {
-	NTSTATUS status;
 	struct lsa_info *handle;
-	int num_sids = r->in.sids->num_sids;
+	int num_sids = q_u->sids.num_entries;
 	uint32 mapped_count = 0;
-	struct lsa_RefDomainList *domains = NULL;
-	struct lsa_TranslatedName2 *names = NULL;
-	bool check_policy = true;
+	DOM_R_REF *ref = NULL;
 
-	switch (p->hdr_req.opnum) {
-		case NDR_LSA_LOOKUPSIDS3:
-			check_policy = false;
-			break;
-		case NDR_LSA_LOOKUPSIDS2:
-		default:
-			check_policy = true;
+	if ((q_u->level < 1) || (q_u->level > 6)) {
+		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-	if ((r->in.level < 1) || (r->in.level > 6)) {
-		return NT_STATUS_INVALID_PARAMETER;
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&handle)) {
+		return NT_STATUS_INVALID_HANDLE;
 	}
 
-	if (check_policy) {
-		if (!find_policy_by_hnd(p, r->in.handle, (void **)(void *)&handle)) {
-			return NT_STATUS_INVALID_HANDLE;
-		}
-
-		/* check if the user have enough rights */
-		if (!(handle->access & LSA_POLICY_LOOKUP_NAMES)) {
-			return NT_STATUS_ACCESS_DENIED;
-		}
+	/* check if the user have enough rights */
+	if (!(handle->access & POLICY_LOOKUP_NAMES)) {
+		return NT_STATUS_ACCESS_DENIED;
 	}
 
 	if (num_sids >  MAX_LOOKUP_SIDS) {
-		DEBUG(5,("_lsa_LookupSids2: limit of %d exceeded, requested %d\n",
+		DEBUG(5,("_lsa_lookup_sids2: limit of %d exceeded, requested %d\n",
 			 MAX_LOOKUP_SIDS, num_sids));
 		return NT_STATUS_NONE_MAPPED;
 	}
 
-	status = _lsa_lookup_sids_internal(p,
-					   p->mem_ctx,
-					   r->in.level,
-					   num_sids,
-					   r->in.sids->sids,
-					   &domains,
-					   &names,
-					   &mapped_count);
+	r_u->status = _lsa_lookup_sids_internal(p,
+						q_u->level,
+						num_sids, 
+						q_u->sids.sid,
+						&ref,
+						&r_u->names,
+						&mapped_count);
 
-	*r->out.domains = domains;
-	r->out.names->count = num_sids;
-	r->out.names->names = names;
-	*r->out.count = mapped_count;
-
-	return status;
+	init_reply_lookup_sids2(r_u, ref, mapped_count);
+	return r_u->status;
 }
 
 /***************************************************************************
- _lsa_LookupSids3
+ _lsa_lookup_sida3
  ***************************************************************************/
 
-NTSTATUS _lsa_LookupSids3(pipes_struct *p,
-			  struct lsa_LookupSids3 *r)
+NTSTATUS _lsa_lookup_sids3(pipes_struct *p,
+			  LSA_Q_LOOKUP_SIDS3 *q_u,
+			  LSA_R_LOOKUP_SIDS3 *r_u)
 {
-	struct lsa_LookupSids2 q;
+	int num_sids = q_u->sids.num_entries;
+	uint32 mapped_count = 0;
+	DOM_R_REF *ref = NULL;
 
+	if ((q_u->level < 1) || (q_u->level > 6)) {
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
 	/* No policy handle on this call. Restrict to crypto connections. */
 	if (p->auth.auth_type != PIPE_AUTH_TYPE_SCHANNEL) {
-		DEBUG(0,("_lsa_LookupSids3: client %s not using schannel for netlogon\n",
+		DEBUG(0,("_lsa_lookup_sids3: client %s not using schannel for netlogon\n",
 			get_remote_machine_name() ));
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-	q.in.handle		= NULL;
-	q.in.sids		= r->in.sids;
-	q.in.level		= r->in.level;
-	q.in.unknown1		= r->in.unknown1;
-	q.in.unknown2		= r->in.unknown2;
-	q.in.names		= r->in.names;
-	q.in.count		= r->in.count;
+	if (num_sids >  MAX_LOOKUP_SIDS) {
+		DEBUG(5,("_lsa_lookup_sids3: limit of %d exceeded, requested %d\n",
+			 MAX_LOOKUP_SIDS, num_sids));
+		return NT_STATUS_NONE_MAPPED;
+	}
 
-	q.out.domains		= r->out.domains;
-	q.out.names		= r->out.names;
-	q.out.count		= r->out.count;
+	r_u->status = _lsa_lookup_sids_internal(p,
+						q_u->level,
+						num_sids, 
+						q_u->sids.sid,
+						&ref,
+						&r_u->names,
+						&mapped_count);
 
-	return _lsa_LookupSids2(p, &q);
+	init_reply_lookup_sids3(r_u, ref, mapped_count);
+	return r_u->status;
 }
 
-/***************************************************************************
- ***************************************************************************/
-
 static int lsa_lookup_level_to_flags(uint16 level)
 {
 	int flags;
@@ -971,37 +1058,33 @@
 }
 
 /***************************************************************************
- _lsa_LookupNames
+lsa_reply_lookup_names
  ***************************************************************************/
 
-NTSTATUS _lsa_LookupNames(pipes_struct *p,
-			  struct lsa_LookupNames *r)
+NTSTATUS _lsa_lookup_names(pipes_struct *p,LSA_Q_LOOKUP_NAMES *q_u, LSA_R_LOOKUP_NAMES *r_u)
 {
-	NTSTATUS status = NT_STATUS_NONE_MAPPED;
 	struct lsa_info *handle;
-	struct lsa_String *names = r->in.names;
-	uint32 num_entries = r->in.num_names;
-	struct lsa_RefDomainList *domains = NULL;
-	struct lsa_TranslatedSid *rids = NULL;
+	UNISTR2 *names = q_u->uni_name;
+	uint32 num_entries = q_u->num_entries;
+	DOM_R_REF *ref;
+	DOM_RID *rids;
 	uint32 mapped_count = 0;
 	int flags = 0;
 
 	if (num_entries >  MAX_LOOKUP_SIDS) {
 		num_entries = MAX_LOOKUP_SIDS;
-		DEBUG(5,("_lsa_LookupNames: truncating name lookup list to %d\n",
-			num_entries));
+		DEBUG(5,("_lsa_lookup_names: truncating name lookup list to %d\n", num_entries));
 	}
+		
+	flags = lsa_lookup_level_to_flags(q_u->lookup_level);
 
-	flags = lsa_lookup_level_to_flags(r->in.level);
-
-	domains = TALLOC_ZERO_P(p->mem_ctx, struct lsa_RefDomainList);
-	if (!domains) {
+	ref = TALLOC_ZERO_P(p->mem_ctx, DOM_R_REF);
+	if (!ref) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
 	if (num_entries) {
-		rids = TALLOC_ZERO_ARRAY(p->mem_ctx, struct lsa_TranslatedSid,
-					 num_entries);
+		rids = TALLOC_ZERO_ARRAY(p->mem_ctx, DOM_RID, num_entries);
 		if (!rids) {
 			return NT_STATUS_NO_MEMORY;
 		}
@@ -1009,136 +1092,146 @@
 		rids = NULL;
 	}
 
-	if (!find_policy_by_hnd(p, r->in.handle, (void **)(void *)&handle)) {
-		status = NT_STATUS_INVALID_HANDLE;
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&handle)) {
+		r_u->status = NT_STATUS_INVALID_HANDLE;
 		goto done;
 	}
 
 	/* check if the user have enough rights */
-	if (!(handle->access & LSA_POLICY_LOOKUP_NAMES)) {
-		status = NT_STATUS_ACCESS_DENIED;
+	if (!(handle->access & POLICY_LOOKUP_NAMES)) {
+		r_u->status = NT_STATUS_ACCESS_DENIED;
 		goto done;
 	}
 
 	/* set up the LSA Lookup RIDs response */
 	become_root(); /* lookup_name can require root privs */
-	status = lookup_lsa_rids(p->mem_ctx, domains, rids, num_entries,
-				 names, flags, &mapped_count);
+	r_u->status = lookup_lsa_rids(p->mem_ctx, ref, rids, num_entries,
+				      names, flags, &mapped_count);
 	unbecome_root();
 
 done:
 
-	if (NT_STATUS_IS_OK(status) && (num_entries != 0) ) {
-		if (mapped_count == 0) {
-			status = NT_STATUS_NONE_MAPPED;
-		} else if (mapped_count != num_entries) {
-			status = STATUS_SOME_UNMAPPED;
-		}
+	if (NT_STATUS_IS_OK(r_u->status) && (num_entries != 0) ) {
+		if (mapped_count == 0)
+			r_u->status = NT_STATUS_NONE_MAPPED;
+		else if (mapped_count != num_entries)
+			r_u->status = STATUS_SOME_UNMAPPED;
 	}
 
-	*r->out.count = mapped_count;
-	*r->out.domains = domains;
-	r->out.sids->sids = rids;
-	r->out.sids->count = num_entries;
-
-	return status;
+	init_reply_lookup_names(r_u, ref, num_entries, rids, mapped_count);
+	return r_u->status;
 }
 
 /***************************************************************************
- _lsa_LookupNames2
+lsa_reply_lookup_names2
  ***************************************************************************/
 
-NTSTATUS _lsa_LookupNames2(pipes_struct *p,
-			   struct lsa_LookupNames2 *r)
+NTSTATUS _lsa_lookup_names2(pipes_struct *p, LSA_Q_LOOKUP_NAMES2 *q_u, LSA_R_LOOKUP_NAMES2 *r_u)
 {
-	NTSTATUS status;
-	struct lsa_LookupNames q;
-	struct lsa_TransSidArray2 *sid_array2 = r->in.sids;
-	struct lsa_TransSidArray *sid_array = NULL;
-	uint32_t i;
+	struct lsa_info *handle;
+	UNISTR2 *names = q_u->uni_name;
+	uint32 num_entries = q_u->num_entries;
+	DOM_R_REF *ref;
+	DOM_RID *rids;
+	DOM_RID2 *rids2;
+	int i;
+	uint32 mapped_count = 0;
+	int flags = 0;
 
-	sid_array = TALLOC_ZERO_P(p->mem_ctx, struct lsa_TransSidArray);
-	if (!sid_array) {
-		return NT_STATUS_NO_MEMORY;
+	if (num_entries >  MAX_LOOKUP_SIDS) {
+		num_entries = MAX_LOOKUP_SIDS;
+		DEBUG(5,("_lsa_lookup_names2: truncating name lookup list to %d\n", num_entries));
 	}
 
-	q.in.handle		= r->in.handle;
-	q.in.num_names		= r->in.num_names;
-	q.in.names		= r->in.names;
-	q.in.level		= r->in.level;
-	q.in.sids		= sid_array;
-	q.in.count		= r->in.count;
-	/* we do not know what this is for */
-	/*			= r->in.unknown1; */
-	/*			= r->in.unknown2; */
+	flags = lsa_lookup_level_to_flags(q_u->lookup_level);
 
-	q.out.domains		= r->out.domains;
-	q.out.sids		= sid_array;
-	q.out.count		= r->out.count;
+	ref = TALLOC_ZERO_P(p->mem_ctx, DOM_R_REF);
+	if (ref == NULL) {
+		r_u->status = NT_STATUS_NO_MEMORY;
+		return NT_STATUS_NO_MEMORY;
+	}
 
-	status = _lsa_LookupNames(p, &q);
+	if (num_entries) {
+		rids = TALLOC_ZERO_ARRAY(p->mem_ctx, DOM_RID, num_entries);
+		rids2 = TALLOC_ZERO_ARRAY(p->mem_ctx, DOM_RID2, num_entries);
+		if ((rids == NULL) || (rids2 == NULL)) {
+			r_u->status = NT_STATUS_NO_MEMORY;
+			return NT_STATUS_NO_MEMORY;
+		}
+	} else {
+		rids = NULL;
+		rids2 = NULL;
+	}
 
-	sid_array2->sids = TALLOC_ARRAY(p->mem_ctx, struct lsa_TranslatedSid2, sid_array->count);
-	if (!sid_array2->sids) {
-		return NT_STATUS_NO_MEMORY;
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&handle)) {
+		r_u->status = NT_STATUS_INVALID_HANDLE;
+		goto done;
 	}
 
-	for (i=0; i<sid_array->count; i++) {
-		sid_array2->sids[i].sid_type  = sid_array->sids[i].sid_type;
-		sid_array2->sids[i].rid       = sid_array->sids[i].rid;
-		sid_array2->sids[i].sid_index = sid_array->sids[i].sid_index;
-		sid_array2->sids[i].unknown   = 0;
+	/* check if the user have enough rights */
+	if (!(handle->access & POLICY_LOOKUP_NAMES)) {
+		r_u->status = NT_STATUS_ACCESS_DENIED;
+		goto done;
 	}
 
-	r->out.sids = sid_array2;
+	/* set up the LSA Lookup RIDs response */
+	become_root(); /* lookup_name can require root privs */
+	r_u->status = lookup_lsa_rids(p->mem_ctx, ref, rids, num_entries,
+				      names, flags, &mapped_count);
+	unbecome_root();
 
-	return status;
+done:
+
+	if (NT_STATUS_IS_OK(r_u->status)) {
+		if (mapped_count == 0) {
+			r_u->status = NT_STATUS_NONE_MAPPED;
+		} else if (mapped_count != num_entries) {
+			r_u->status = STATUS_SOME_UNMAPPED;
+		}
+	}
+
+	/* Convert the rids array to rids2. */
+	for (i = 0; i < num_entries; i++) {
+		rids2[i].type = rids[i].type;
+		rids2[i].rid = rids[i].rid;
+		rids2[i].rid_idx = rids[i].rid_idx;
+		rids2[i].unknown = 0;
+	}
+
+	init_reply_lookup_names2(r_u, ref, num_entries, rids2, mapped_count);
+	return r_u->status;
 }
 
 /***************************************************************************
- _lsa_LookupNames3
+lsa_reply_lookup_names3.
  ***************************************************************************/
 
-NTSTATUS _lsa_LookupNames3(pipes_struct *p,
-			   struct lsa_LookupNames3 *r)
+NTSTATUS _lsa_lookup_names3(pipes_struct *p, LSA_Q_LOOKUP_NAMES3 *q_u, LSA_R_LOOKUP_NAMES3 *r_u)
 {
-	NTSTATUS status;
 	struct lsa_info *handle;
-	struct lsa_String *names = r->in.names;
-	uint32 num_entries = r->in.num_names;
-	struct lsa_RefDomainList *domains = NULL;
-	struct lsa_TranslatedSid3 *trans_sids = NULL;
+	UNISTR2 *names = q_u->uni_name;
+	uint32 num_entries = q_u->num_entries;
+	DOM_R_REF *ref = NULL;
+	LSA_TRANSLATED_SID3 *trans_sids = NULL;
 	uint32 mapped_count = 0;
 	int flags = 0;
-	bool check_policy = true;
 
-	switch (p->hdr_req.opnum) {
-		case NDR_LSA_LOOKUPNAMES4:
-			check_policy = false;
-			break;
-		case NDR_LSA_LOOKUPNAMES3:
-		default:
-			check_policy = true;
-	}
-
 	if (num_entries >  MAX_LOOKUP_SIDS) {
 		num_entries = MAX_LOOKUP_SIDS;
-		DEBUG(5,("_lsa_LookupNames3: truncating name lookup list to %d\n", num_entries));
+		DEBUG(5,("_lsa_lookup_names3: truncating name lookup list to %d\n", num_entries));
 	}
-
+		
 	/* Probably the lookup_level is some sort of bitmask. */
-	if (r->in.level == 1) {
+	if (q_u->lookup_level == 1) {
 		flags = LOOKUP_NAME_ALL;
 	}
 
-	domains = TALLOC_ZERO_P(p->mem_ctx, struct lsa_RefDomainList);
-	if (!domains) {
+	ref = TALLOC_ZERO_P(p->mem_ctx, DOM_R_REF);
+	if (ref == NULL) {
 		return NT_STATUS_NO_MEMORY;
 	}
-
 	if (num_entries) {
-		trans_sids = TALLOC_ZERO_ARRAY(p->mem_ctx, struct lsa_TranslatedSid3,
-					       num_entries);
+		trans_sids = TALLOC_ZERO_ARRAY(p->mem_ctx, LSA_TRANSLATED_SID3, num_entries);
 		if (!trans_sids) {
 			return NT_STATUS_NO_MEMORY;
 		}
@@ -1146,53 +1239,60 @@
 		trans_sids = NULL;
 	}
 
-	if (check_policy) {
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&handle)) {
+		r_u->status = NT_STATUS_INVALID_HANDLE;
+		goto done;
+	}
 
-		if (!find_policy_by_hnd(p, r->in.handle, (void **)(void *)&handle)) {
-			status = NT_STATUS_INVALID_HANDLE;
-			goto done;
-		}
-
-		/* check if the user have enough rights */
-		if (!(handle->access & LSA_POLICY_LOOKUP_NAMES)) {
-			status = NT_STATUS_ACCESS_DENIED;
-			goto done;
-		}
+	/* check if the user have enough rights */
+	if (!(handle->access & POLICY_LOOKUP_NAMES)) {
+		r_u->status = NT_STATUS_ACCESS_DENIED;
+		goto done;
 	}
 
 	/* set up the LSA Lookup SIDs response */
 	become_root(); /* lookup_name can require root privs */
-	status = lookup_lsa_sids(p->mem_ctx, domains, trans_sids, num_entries,
-				 names, flags, &mapped_count);
+	r_u->status = lookup_lsa_sids(p->mem_ctx, ref, trans_sids, num_entries,
+				      names, flags, &mapped_count);
 	unbecome_root();
 
 done:
 
-	if (NT_STATUS_IS_OK(status)) {
+	if (NT_STATUS_IS_OK(r_u->status)) {
 		if (mapped_count == 0) {
-			status = NT_STATUS_NONE_MAPPED;
+			r_u->status = NT_STATUS_NONE_MAPPED;
 		} else if (mapped_count != num_entries) {
-			status = STATUS_SOME_UNMAPPED;
+			r_u->status = STATUS_SOME_UNMAPPED;
 		}
 	}
 
-	*r->out.count = mapped_count;
-	*r->out.domains = domains;
-	r->out.sids->sids = trans_sids;
-	r->out.sids->count = num_entries;
-
-	return status;
+	init_reply_lookup_names3(r_u, ref, num_entries, trans_sids, mapped_count);
+	return r_u->status;
 }
 
 /***************************************************************************
- _lsa_LookupNames4
+lsa_reply_lookup_names4.
  ***************************************************************************/
 
-NTSTATUS _lsa_LookupNames4(pipes_struct *p,
-			   struct lsa_LookupNames4 *r)
+NTSTATUS _lsa_lookup_names4(pipes_struct *p, LSA_Q_LOOKUP_NAMES4 *q_u, LSA_R_LOOKUP_NAMES4 *r_u)
 {
-	struct lsa_LookupNames3 q;
+	UNISTR2 *names = q_u->uni_name;
+	uint32 num_entries = q_u->num_entries;
+	DOM_R_REF *ref = NULL;
+	LSA_TRANSLATED_SID3 *trans_sids = NULL;
+	uint32 mapped_count = 0;
+	int flags = 0;
 
+	if (num_entries >  MAX_LOOKUP_SIDS) {
+		num_entries = MAX_LOOKUP_SIDS;
+		DEBUG(5,("_lsa_lookup_names4: truncating name lookup list to %d\n", num_entries));
+	}
+		
+	/* Probably the lookup_level is some sort of bitmask. */
+	if (q_u->lookup_level == 1) {
+		flags = LOOKUP_NAME_ALL;
+	}
+
 	/* No policy handle on this call. Restrict to crypto connections. */
 	if (p->auth.auth_type != PIPE_AUTH_TYPE_SCHANNEL) {
 		DEBUG(0,("_lsa_lookup_names4: client %s not using schannel for netlogon\n",
@@ -1200,41 +1300,56 @@
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-	q.in.handle		= NULL;
-	q.in.num_names		= r->in.num_names;
-	q.in.names		= r->in.names;
-	q.in.level		= r->in.level;
-	q.in.unknown1		= r->in.unknown1;
-	q.in.unknown2		= r->in.unknown2;
-	q.in.sids		= r->in.sids;
-	q.in.count		= r->in.count;
+	ref = TALLOC_ZERO_P(p->mem_ctx, DOM_R_REF);
+	if (!ref) {
+		return NT_STATUS_NO_MEMORY;
+	}
 
-	q.out.domains		= r->out.domains;
-	q.out.sids		= r->out.sids;
-	q.out.count		= r->out.count;
+	if (num_entries) {
+		trans_sids = TALLOC_ZERO_ARRAY(p->mem_ctx, LSA_TRANSLATED_SID3, num_entries);
+		if (!trans_sids) {
+			return NT_STATUS_NO_MEMORY;
+		}
+	} else {
+		trans_sids = NULL;
+	}
 
-	return _lsa_LookupNames3(p, &q);
+	/* set up the LSA Lookup SIDs response */
+	become_root(); /* lookup_name can require root privs */
+	r_u->status = lookup_lsa_sids(p->mem_ctx, ref, trans_sids, num_entries,
+				      names, flags, &mapped_count);
+	unbecome_root();
+
+	if (NT_STATUS_IS_OK(r_u->status)) {
+		if (mapped_count == 0) {
+			r_u->status = NT_STATUS_NONE_MAPPED;
+		} else if (mapped_count != num_entries) {
+			r_u->status = STATUS_SOME_UNMAPPED;
+		}
+	}
+
+	init_reply_lookup_names4(r_u, ref, num_entries, trans_sids, mapped_count);
+	return r_u->status;
 }
 
 /***************************************************************************
  _lsa_close. Also weird - needs to check if lsa handle is correct. JRA.
  ***************************************************************************/
 
-NTSTATUS _lsa_Close(pipes_struct *p, struct lsa_Close *r)
+NTSTATUS _lsa_close(pipes_struct *p, LSA_Q_CLOSE *q_u, LSA_R_CLOSE *r_u)
 {
-	if (!find_policy_by_hnd(p, r->in.handle, NULL)) {
+	if (!find_policy_by_hnd(p, &q_u->pol, NULL)) {
 		return NT_STATUS_INVALID_HANDLE;
 	}
 
-	close_policy_hnd(p, r->in.handle);
-	ZERO_STRUCTP(r->out.handle);
+	close_policy_hnd(p, &q_u->pol);
 	return NT_STATUS_OK;
 }
 
 /***************************************************************************
  ***************************************************************************/
 
-NTSTATUS _lsa_OpenSecret(pipes_struct *p, struct lsa_OpenSecret *r)
+NTSTATUS _lsa_open_secret(pipes_struct *p, LSA_Q_OPEN_SECRET *q_u, LSA_R_OPEN_SECRET *r_u)
 {
 	return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 }
@@ -1242,7 +1357,7 @@
 /***************************************************************************
  ***************************************************************************/
 
-NTSTATUS _lsa_OpenTrustedDomain(pipes_struct *p, struct lsa_OpenTrustedDomain *r)
+NTSTATUS _lsa_open_trusted_domain(pipes_struct *p, LSA_Q_OPEN_TRUSTED_DOMAIN *q_u, LSA_R_OPEN_TRUSTED_DOMAIN *r_u)
 {
 	return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 }
@@ -1250,7 +1365,7 @@
 /***************************************************************************
  ***************************************************************************/
 
-NTSTATUS _lsa_CreateTrustedDomain(pipes_struct *p, struct lsa_CreateTrustedDomain *r)
+NTSTATUS _lsa_create_trusted_domain(pipes_struct *p, LSA_Q_CREATE_TRUSTED_DOMAIN *q_u, LSA_R_CREATE_TRUSTED_DOMAIN *r_u)
 {
 	return NT_STATUS_ACCESS_DENIED;
 }
@@ -1258,7 +1373,7 @@
 /***************************************************************************
  ***************************************************************************/
 
-NTSTATUS _lsa_CreateSecret(pipes_struct *p, struct lsa_CreateSecret *r)
+NTSTATUS _lsa_create_secret(pipes_struct *p, LSA_Q_CREATE_SECRET *q_u, LSA_R_CREATE_SECRET *r_u)
 {
 	return NT_STATUS_ACCESS_DENIED;
 }
@@ -1266,100 +1381,92 @@
 /***************************************************************************
  ***************************************************************************/
 
-NTSTATUS _lsa_SetSecret(pipes_struct *p, struct lsa_SetSecret *r)
+NTSTATUS _lsa_set_secret(pipes_struct *p, LSA_Q_SET_SECRET *q_u, LSA_R_SET_SECRET *r_u)
 {
 	return NT_STATUS_ACCESS_DENIED;
 }
 
 /***************************************************************************
- _lsa_DeleteObject
  ***************************************************************************/
 
-NTSTATUS _lsa_DeleteObject(pipes_struct *p,
-			   struct lsa_DeleteObject *r)
+NTSTATUS _lsa_delete_object(pipes_struct *p, LSA_Q_DELETE_OBJECT *q_u, LSA_R_DELETE_OBJECT *r_u)
 {
 	return NT_STATUS_ACCESS_DENIED;
 }
 
 /***************************************************************************
- _lsa_EnumPrivs
+_lsa_enum_privs.
  ***************************************************************************/
 
-NTSTATUS _lsa_EnumPrivs(pipes_struct *p,
-			struct lsa_EnumPrivs *r)
+NTSTATUS _lsa_enum_privs(pipes_struct *p, LSA_Q_ENUM_PRIVS *q_u, LSA_R_ENUM_PRIVS *r_u)
 {
 	struct lsa_info *handle;
 	uint32 i;
-	uint32 enum_context = *r->in.resume_handle;
+	uint32 enum_context = q_u->enum_context;
 	int num_privs = count_all_privileges();
-	struct lsa_PrivEntry *entries = NULL;
+	LSA_PRIV_ENTRY *entries = NULL;
 	LUID_ATTR luid;
 
 	/* remember that the enum_context starts at 0 and not 1 */
 
 	if ( enum_context >= num_privs )
 		return NT_STATUS_NO_MORE_ENTRIES;
-
-	DEBUG(10,("_lsa_EnumPrivs: enum_context:%d total entries:%d\n",
+		
+	DEBUG(10,("_lsa_enum_privs: enum_context:%d total entries:%d\n", 
 		enum_context, num_privs));
-
-	if (!find_policy_by_hnd(p, r->in.handle, (void **)(void *)&handle))
+	
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&handle))
 		return NT_STATUS_INVALID_HANDLE;
 
 	/* check if the user have enough rights
 	   I don't know if it's the right one. not documented.  */
 
-	if (!(handle->access & LSA_POLICY_VIEW_LOCAL_INFORMATION))
+	if (!(handle->access & POLICY_VIEW_LOCAL_INFORMATION))
 		return NT_STATUS_ACCESS_DENIED;
 
 	if (num_privs) {
-		entries = TALLOC_ZERO_ARRAY(p->mem_ctx, struct lsa_PrivEntry, num_privs);
-		if (!entries) {
+		if ( !(entries = TALLOC_ZERO_ARRAY(p->mem_ctx, LSA_PRIV_ENTRY, num_privs )) )
 			return NT_STATUS_NO_MEMORY;
-		}
 	} else {
 		entries = NULL;
 	}
 
 	for (i = 0; i < num_privs; i++) {
 		if( i < enum_context) {
-
-			init_lsa_StringLarge(&entries[i].name, NULL);
-
-			entries[i].luid.low = 0;
-			entries[i].luid.high = 0;
+			init_unistr2(&entries[i].name, NULL, UNI_FLAGS_NONE);
+			init_uni_hdr(&entries[i].hdr_name, &entries[i].name);
+			
+			entries[i].luid_low = 0;
+			entries[i].luid_high = 0;
 		} else {
-
-			init_lsa_StringLarge(&entries[i].name, privs[i].name);
-
+			init_unistr2(&entries[i].name, privs[i].name, UNI_FLAGS_NONE);
+			init_uni_hdr(&entries[i].hdr_name, &entries[i].name);
+			
 			luid = get_privilege_luid( &privs[i].se_priv );
-
-			entries[i].luid.low = luid.luid.low;
-			entries[i].luid.high = luid.luid.high;
+			
+			entries[i].luid_low = luid.luid.low;
+			entries[i].luid_high = luid.luid.high;
 		}
 	}
 
 	enum_context = num_privs;
+	
+	init_lsa_r_enum_privs(r_u, enum_context, num_privs, entries);
 
-	*r->out.resume_handle = enum_context;
-	r->out.privs->count = num_privs;
-	r->out.privs->privs = entries;
-
 	return NT_STATUS_OK;
 }
 
 /***************************************************************************
- _lsa_LookupPrivDisplayName
+_lsa_priv_get_dispname.
  ***************************************************************************/
 
-NTSTATUS _lsa_LookupPrivDisplayName(pipes_struct *p,
-				    struct lsa_LookupPrivDisplayName *r)
+NTSTATUS _lsa_priv_get_dispname(pipes_struct *p, LSA_Q_PRIV_GET_DISPNAME *q_u, LSA_R_PRIV_GET_DISPNAME *r_u)
 {
 	struct lsa_info *handle;
+	fstring name_asc;
 	const char *description;
-	struct lsa_StringLarge *lsa_name;
 
-	if (!find_policy_by_hnd(p, r->in.handle, (void **)(void *)&handle))
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&handle))
 		return NT_STATUS_INVALID_HANDLE;
 
 	/* check if the user have enough rights */
@@ -1367,49 +1474,50 @@
 	/*
 	 * I don't know if it's the right one. not documented.
 	 */
-	if (!(handle->access & LSA_POLICY_VIEW_LOCAL_INFORMATION))
+	if (!(handle->access & POLICY_VIEW_LOCAL_INFORMATION))
 		return NT_STATUS_ACCESS_DENIED;
 
-	DEBUG(10,("_lsa_LookupPrivDisplayName: name = %s\n", r->in.name->string));
+	unistr2_to_ascii(name_asc, &q_u->name, sizeof(name_asc));
 
-	description = get_privilege_dispname(r->in.name->string);
-	if (!description) {
-		DEBUG(10,("_lsa_LookupPrivDisplayName: doesn't exist\n"));
-		return NT_STATUS_NO_SUCH_PRIVILEGE;
-	}
+	DEBUG(10,("_lsa_priv_get_dispname: name = %s\n", name_asc));
 
-	DEBUG(10,("_lsa_LookupPrivDisplayName: display name = %s\n", description));
+	description = get_privilege_dispname( name_asc );
+	
+	if ( description ) {
+		DEBUG(10,("_lsa_priv_get_dispname: display name = %s\n", description));
+		
+		init_unistr2(&r_u->desc, description, UNI_FLAGS_NONE);
+		init_uni_hdr(&r_u->hdr_desc, &r_u->desc);
 
-	lsa_name = TALLOC_ZERO_P(p->mem_ctx, struct lsa_StringLarge);
-	if (!lsa_name) {
-		return NT_STATUS_NO_MEMORY;
+		r_u->ptr_info = 0xdeadbeef;
+		r_u->lang_id = q_u->lang_id;
+		
+		return NT_STATUS_OK;
+	} else {
+		DEBUG(10,("_lsa_priv_get_dispname: doesn't exist\n"));
+		
+		r_u->ptr_info = 0;
+		
+		return NT_STATUS_NO_SUCH_PRIVILEGE;
 	}
-
-	init_lsa_StringLarge(lsa_name, description);
-
-	*r->out.returned_language_id = r->in.language_id;
-	*r->out.disp_name = lsa_name;
-
-	return NT_STATUS_OK;
 }
 
 /***************************************************************************
- _lsa_EnumAccounts
+_lsa_enum_accounts.
  ***************************************************************************/
 
-NTSTATUS _lsa_EnumAccounts(pipes_struct *p,
-			   struct lsa_EnumAccounts *r)
+NTSTATUS _lsa_enum_accounts(pipes_struct *p, LSA_Q_ENUM_ACCOUNTS *q_u, LSA_R_ENUM_ACCOUNTS *r_u)
 {
 	struct lsa_info *handle;
 	DOM_SID *sid_list;
 	int i, j, num_entries;
-	NTSTATUS status;
-	struct lsa_SidPtr *sids = NULL;
+	LSA_SID_ENUM *sids=&r_u->sids;
+	NTSTATUS ret;
 
-	if (!find_policy_by_hnd(p, r->in.handle, (void **)(void *)&handle))
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&handle))
 		return NT_STATUS_INVALID_HANDLE;
 
-	if (!(handle->access & LSA_POLICY_VIEW_LOCAL_INFORMATION))
+	if (!(handle->access & POLICY_VIEW_LOCAL_INFORMATION))
 		return NT_STATUS_ACCESS_DENIED;
 
 	sid_list = NULL;
@@ -1418,102 +1526,76 @@
 	/* The only way we can currently find out all the SIDs that have been
 	   privileged is to scan all privileges */
 
-	status = privilege_enumerate_accounts(&sid_list, &num_entries);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+	if (!NT_STATUS_IS_OK(ret = privilege_enumerate_accounts(&sid_list, &num_entries))) {
+		return ret;
 	}
 
-	if (*r->in.resume_handle >= num_entries) {
+	if (q_u->enum_context >= num_entries)
 		return NT_STATUS_NO_MORE_ENTRIES;
-	}
 
-	if (num_entries - *r->in.resume_handle) {
-		sids = TALLOC_ZERO_ARRAY(p->mem_ctx, struct lsa_SidPtr,
-					 num_entries - *r->in.resume_handle);
-		if (!sids) {
+	if (num_entries-q_u->enum_context) {
+		sids->ptr_sid = TALLOC_ZERO_ARRAY(p->mem_ctx, uint32, num_entries-q_u->enum_context);
+		sids->sid = TALLOC_ZERO_ARRAY(p->mem_ctx, DOM_SID2, num_entries-q_u->enum_context);
+
+		if (sids->ptr_sid==NULL || sids->sid==NULL) {
 			SAFE_FREE(sid_list);
 			return NT_STATUS_NO_MEMORY;
 		}
+	} else {
+		sids->ptr_sid = NULL;
+		sids->sid = NULL;
+	}
 
-		for (i = *r->in.resume_handle, j = 0; i < num_entries; i++, j++) {
-			sids[j].sid = sid_dup_talloc(p->mem_ctx, &sid_list[i]);
-			if (!sids[j].sid) {
-				SAFE_FREE(sid_list);
-				return NT_STATUS_NO_MEMORY;
-			}
-		}
+	for (i = q_u->enum_context, j = 0; i < num_entries; i++, j++) {
+		init_dom_sid2(&(*sids).sid[j], &sid_list[i]);
+		(*sids).ptr_sid[j] = 1;
 	}
 
 	talloc_free(sid_list);
 
-	*r->out.resume_handle = num_entries;
-	r->out.sids->num_sids = num_entries;
-	r->out.sids->sids = sids;
+	init_lsa_r_enum_accounts(r_u, num_entries);
 
 	return NT_STATUS_OK;
 }
 
-/***************************************************************************
- _lsa_GetUserName
- ***************************************************************************/
 
-NTSTATUS _lsa_GetUserName(pipes_struct *p,
-			  struct lsa_GetUserName *r)
+NTSTATUS _lsa_unk_get_connuser(pipes_struct *p, LSA_Q_UNK_GET_CONNUSER *q_u, LSA_R_UNK_GET_CONNUSER *r_u)
 {
-	const char *username, *domname;
+	fstring username, domname;
 	user_struct *vuser = get_valid_user_struct(p->vuid);
-	struct lsa_String *account_name = NULL;
-	struct lsa_String *authority_name = NULL;
-
+  
 	if (vuser == NULL)
 		return NT_STATUS_CANT_ACCESS_DOMAIN_INFO;
+  
+	fstrcpy(username, vuser->user.smb_name);
+	fstrcpy(domname, vuser->user.domain);
+  
+	r_u->ptr_user_name = 1;
+	init_unistr2(&r_u->uni2_user_name, username, UNI_STR_TERMINATE);
+	init_uni_hdr(&r_u->hdr_user_name, &r_u->uni2_user_name);
 
-	if (vuser->guest) {
-		/*
-		 * I'm 99% sure this is not the right place to do this,
-		 * global_sid_Anonymous should probably be put into the token
-		 * instead of the guest id -- vl
-		 */
-		if (!lookup_sid(p->mem_ctx, &global_sid_Anonymous,
-				&domname, &username, NULL)) {
-			return NT_STATUS_NO_MEMORY;
-		}
-	} else {
-		username = vuser->user.smb_name;
-		domname = vuser->user.domain;
-	}
+	r_u->unk1 = 1;
+  
+	r_u->ptr_dom_name = 1;
+	init_unistr2(&r_u->uni2_dom_name, domname,  UNI_STR_TERMINATE);
+	init_uni_hdr(&r_u->hdr_dom_name, &r_u->uni2_dom_name);
 
-	account_name = TALLOC_ZERO_P(p->mem_ctx, struct lsa_String);
-	if (!account_name) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	authority_name = TALLOC_ZERO_P(p->mem_ctx, struct lsa_String);
-	if (!authority_name) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	init_lsa_String(account_name, username);
-	init_lsa_String(authority_name, domname);
-
-	*r->out.account_name = account_name;
-	*r->out.authority_name = authority_name;
-
-	return NT_STATUS_OK;
+	r_u->status = NT_STATUS_OK;
+  
+	return r_u->status;
 }
 
 /***************************************************************************
- _lsa_CreateAccount
+ Lsa Create Account 
  ***************************************************************************/
 
-NTSTATUS _lsa_CreateAccount(pipes_struct *p,
-			    struct lsa_CreateAccount *r)
+NTSTATUS _lsa_create_account(pipes_struct *p, LSA_Q_CREATEACCOUNT *q_u, LSA_R_CREATEACCOUNT *r_u)
 {
 	struct lsa_info *handle;
 	struct lsa_info *info;
 
 	/* find the connection policy handle. */
-	if (!find_policy_by_hnd(p, r->in.handle, (void **)(void *)&handle))
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&handle))
 		return NT_STATUS_INVALID_HANDLE;
 
 	/* check if the user have enough rights */
@@ -1522,29 +1604,29 @@
 	 * I don't know if it's the right one. not documented.
 	 * but guessed with rpcclient.
 	 */
-	if (!(handle->access & LSA_POLICY_GET_PRIVATE_INFORMATION))
+	if (!(handle->access & POLICY_GET_PRIVATE_INFORMATION))
 		return NT_STATUS_ACCESS_DENIED;
 
-	/* check to see if the pipe_user is a Domain Admin since
+	/* check to see if the pipe_user is a Domain Admin since 
 	   account_pol.tdb was already opened as root, this is all we have */
-
+	   
 	if ( !nt_token_check_domain_rid( p->pipe_user.nt_user_token, DOMAIN_GROUP_RID_ADMINS ) )
 		return NT_STATUS_ACCESS_DENIED;
-
-	if ( is_privileged_sid( r->in.sid ) )
+		
+	if ( is_privileged_sid( &q_u->sid.sid ) )
 		return NT_STATUS_OBJECT_NAME_COLLISION;
 
 	/* associate the user/group SID with the (unique) handle. */
-
+	
 	if ((info = SMB_MALLOC_P(struct lsa_info)) == NULL)
 		return NT_STATUS_NO_MEMORY;
 
 	ZERO_STRUCTP(info);
-	info->sid = *r->in.sid;
-	info->access = r->in.access_mask;
+	info->sid = q_u->sid.sid;
+	info->access = q_u->access;
 
 	/* get a (unique) handle.  open a policy on it. */
-	if (!create_policy_hnd(p, r->out.acct_handle, free_lsa_info, (void *)info))
+	if (!create_policy_hnd(p, &r_u->pol, free_lsa_info, (void *)info))
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
 	return privilege_create_account( &info->sid );
@@ -1552,17 +1634,16 @@
 
 
 /***************************************************************************
- _lsa_OpenAccount
+ Lsa Open Account
  ***************************************************************************/
 
-NTSTATUS _lsa_OpenAccount(pipes_struct *p,
-			  struct lsa_OpenAccount *r)
+NTSTATUS _lsa_open_account(pipes_struct *p, LSA_Q_OPENACCOUNT *q_u, LSA_R_OPENACCOUNT *r_u)
 {
 	struct lsa_info *handle;
 	struct lsa_info *info;
 
 	/* find the connection policy handle. */
-	if (!find_policy_by_hnd(p, r->in.handle, (void **)(void *)&handle))
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&handle))
 		return NT_STATUS_INVALID_HANDLE;
 
 	/* check if the user have enough rights */
@@ -1571,7 +1652,7 @@
 	 * I don't know if it's the right one. not documented.
 	 * but guessed with rpcclient.
 	 */
-	if (!(handle->access & LSA_POLICY_GET_PRIVATE_INFORMATION))
+	if (!(handle->access & POLICY_GET_PRIVATE_INFORMATION))
 		return NT_STATUS_ACCESS_DENIED;
 
 	/* TODO: Fis the parsing routine before reenabling this check! */
@@ -1584,94 +1665,61 @@
 		return NT_STATUS_NO_MEMORY;
 
 	ZERO_STRUCTP(info);
-	info->sid = *r->in.sid;
-	info->access = r->in.access_mask;
+	info->sid = q_u->sid.sid;
+	info->access = q_u->access;
 
 	/* get a (unique) handle.  open a policy on it. */
-	if (!create_policy_hnd(p, r->out.acct_handle, free_lsa_info, (void *)info))
+	if (!create_policy_hnd(p, &r_u->pol, free_lsa_info, (void *)info))
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
 	return NT_STATUS_OK;
 }
 
 /***************************************************************************
- _lsa_EnumPrivsAccount
  For a given SID, enumerate all the privilege this account has.
  ***************************************************************************/
 
-NTSTATUS _lsa_EnumPrivsAccount(pipes_struct *p,
-			       struct lsa_EnumPrivsAccount *r)
+NTSTATUS _lsa_enum_privsaccount(pipes_struct *p, prs_struct *ps, LSA_Q_ENUMPRIVSACCOUNT *q_u, LSA_R_ENUMPRIVSACCOUNT *r_u)
 {
-	NTSTATUS status = NT_STATUS_OK;
 	struct lsa_info *info=NULL;
 	SE_PRIV mask;
 	PRIVILEGE_SET privileges;
-	struct lsa_PrivilegeSet *priv_set = NULL;
-	struct lsa_LUIDAttribute *luid_attrs = NULL;
-	int i;
 
 	/* find the connection policy handle. */
-	if (!find_policy_by_hnd(p, r->in.handle, (void **)(void *)&info))
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&info))
 		return NT_STATUS_INVALID_HANDLE;
 
-	if ( !get_privileges_for_sids( &mask, &info->sid, 1 ) )
+	if ( !get_privileges_for_sids( &mask, &info->sid, 1 ) ) 
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
 	privilege_set_init( &privileges );
 
 	if ( se_priv_to_privilege_set( &privileges, &mask ) ) {
 
-		DEBUG(10,("_lsa_EnumPrivsAccount: %s has %d privileges\n",
-			  sid_string_dbg(&info->sid),
-			  privileges.count));
+		DEBUG(10,("_lsa_enum_privsaccount: %s has %d privileges\n", 
+			sid_string_static(&info->sid), privileges.count));
 
-		priv_set = TALLOC_ZERO_P(p->mem_ctx, struct lsa_PrivilegeSet);
-		if (!priv_set) {
-			status = NT_STATUS_NO_MEMORY;
-			goto done;
-		}
-
-		luid_attrs = TALLOC_ZERO_ARRAY(p->mem_ctx,
-					       struct lsa_LUIDAttribute,
-					       privileges.count);
-		if (!luid_attrs) {
-			status = NT_STATUS_NO_MEMORY;
-			goto done;
-		}
-
-		for (i=0; i<privileges.count; i++) {
-			luid_attrs[i].luid.low = privileges.set[i].luid.low;
-			luid_attrs[i].luid.high = privileges.set[i].luid.high;
-			luid_attrs[i].attribute = privileges.set[i].attr;
-		}
-
-		priv_set->count = privileges.count;
-		priv_set->unknown = 0;
-		priv_set->set = luid_attrs;
-
-		*r->out.privs = priv_set;
-	} else {
-		status = NT_STATUS_NO_SUCH_PRIVILEGE;
+		r_u->status = init_lsa_r_enum_privsaccount(ps->mem_ctx, r_u, privileges.set, privileges.count, 0);
 	}
+	else
+		r_u->status = NT_STATUS_NO_SUCH_PRIVILEGE;
 
- done:
 	privilege_set_free( &privileges );
 
-	return status;
+	return r_u->status;
 }
 
 /***************************************************************************
- _lsa_GetSystemAccessAccount
+ 
  ***************************************************************************/
 
-NTSTATUS _lsa_GetSystemAccessAccount(pipes_struct *p,
-				     struct lsa_GetSystemAccessAccount *r)
+NTSTATUS _lsa_getsystemaccount(pipes_struct *p, LSA_Q_GETSYSTEMACCOUNT *q_u, LSA_R_GETSYSTEMACCOUNT *r_u)
 {
 	struct lsa_info *info=NULL;
 
 	/* find the connection policy handle. */
 
-	if (!find_policy_by_hnd(p, r->in.handle, (void **)(void *)&info))
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&info))
 		return NT_STATUS_INVALID_HANDLE;
 
 	if (!lookup_sid(p->mem_ctx, &info->sid, NULL, NULL, NULL))
@@ -1682,11 +1730,11 @@
 	  0x02 -> Access this computer from network
 	  0x04 -> Log on as a batch job
 	  0x10 -> Log on as a service
-
+	  
 	  they can be ORed together
 	*/
 
-	*r->out.access_mask = PR_LOG_ON_LOCALLY | PR_ACCESS_FROM_NETWORK;
+	r_u->access = PR_LOG_ON_LOCALLY | PR_ACCESS_FROM_NETWORK;
 
 	return NT_STATUS_OK;
 }
@@ -1695,19 +1743,19 @@
   update the systemaccount information
  ***************************************************************************/
 
-NTSTATUS _lsa_SetSystemAccessAccount(pipes_struct *p,
-				     struct lsa_SetSystemAccessAccount *r)
+NTSTATUS _lsa_setsystemaccount(pipes_struct *p, LSA_Q_SETSYSTEMACCOUNT *q_u, LSA_R_SETSYSTEMACCOUNT *r_u)
 {
 	struct lsa_info *info=NULL;
 	GROUP_MAP map;
+	r_u->status = NT_STATUS_OK;
 
 	/* find the connection policy handle. */
-	if (!find_policy_by_hnd(p, r->in.handle, (void **)(void *)&info))
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&info))
 		return NT_STATUS_INVALID_HANDLE;
 
-	/* check to see if the pipe_user is a Domain Admin since
+	/* check to see if the pipe_user is a Domain Admin since 
 	   account_pol.tdb was already opened as root, this is all we have */
-
+	   
 	if ( !nt_token_check_domain_rid( p->pipe_user.nt_user_token, DOMAIN_GROUP_RID_ADMINS ) )
 		return NT_STATUS_ACCESS_DENIED;
 
@@ -1718,37 +1766,38 @@
 }
 
 /***************************************************************************
- _lsa_AddPrivilegesToAccount
  For a given SID, add some privileges.
  ***************************************************************************/
 
-NTSTATUS _lsa_AddPrivilegesToAccount(pipes_struct *p,
-				     struct lsa_AddPrivilegesToAccount *r)
+NTSTATUS _lsa_addprivs(pipes_struct *p, LSA_Q_ADDPRIVS *q_u, LSA_R_ADDPRIVS *r_u)
 {
 	struct lsa_info *info = NULL;
 	SE_PRIV mask;
-	struct lsa_PrivilegeSet *set = NULL;
+	PRIVILEGE_SET *set = NULL;
+	struct current_user user;
 
 	/* find the connection policy handle. */
-	if (!find_policy_by_hnd(p, r->in.handle, (void **)(void *)&info))
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&info))
 		return NT_STATUS_INVALID_HANDLE;
-
-	/* check to see if the pipe_user is root or a Domain Admin since
+		
+	/* check to see if the pipe_user is root or a Domain Admin since 
 	   account_pol.tdb was already opened as root, this is all we have */
-
-	if ( p->pipe_user.ut.uid != sec_initial_uid()
+	   
+	get_current_user( &user, p );
+	if ( user.ut.uid != sec_initial_uid() 
 		&& !nt_token_check_domain_rid( p->pipe_user.nt_user_token, DOMAIN_GROUP_RID_ADMINS ) )
 	{
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	set = r->in.privs;
+	set = &q_u->set;
+
 	if ( !privilege_set_to_se_priv( &mask, set ) )
 		return NT_STATUS_NO_SUCH_PRIVILEGE;
 
 	if ( !grant_privilege( &info->sid, &mask ) ) {
-		DEBUG(3,("_lsa_AddPrivilegesToAccount: grant_privilege(%s) failed!\n",
-			 sid_string_dbg(&info->sid) ));
+		DEBUG(3,("_lsa_addprivs: grant_privilege(%s) failed!\n",
+			sid_string_static(&info->sid) ));
 		DEBUG(3,("Privilege mask:\n"));
 		dump_se_priv( DBGC_ALL, 3, &mask );
 		return NT_STATUS_NO_SUCH_PRIVILEGE;
@@ -1758,38 +1807,38 @@
 }
 
 /***************************************************************************
- _lsa_RemovePrivilegesFromAccount
  For a given SID, remove some privileges.
  ***************************************************************************/
 
-NTSTATUS _lsa_RemovePrivilegesFromAccount(pipes_struct *p,
-					  struct lsa_RemovePrivilegesFromAccount *r)
+NTSTATUS _lsa_removeprivs(pipes_struct *p, LSA_Q_REMOVEPRIVS *q_u, LSA_R_REMOVEPRIVS *r_u)
 {
 	struct lsa_info *info = NULL;
 	SE_PRIV mask;
-	struct lsa_PrivilegeSet *set = NULL;
+	PRIVILEGE_SET *set = NULL;
+	struct current_user user;
 
 	/* find the connection policy handle. */
-	if (!find_policy_by_hnd(p, r->in.handle, (void **)(void *)&info))
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&info))
 		return NT_STATUS_INVALID_HANDLE;
 
-	/* check to see if the pipe_user is root or a Domain Admin since
+	/* check to see if the pipe_user is root or a Domain Admin since 
 	   account_pol.tdb was already opened as root, this is all we have */
-
-	if ( p->pipe_user.ut.uid != sec_initial_uid()
-		&& !nt_token_check_domain_rid( p->pipe_user.nt_user_token, DOMAIN_GROUP_RID_ADMINS ) )
+	   
+	get_current_user( &user, p );
+	if ( user.ut.uid != sec_initial_uid()
+		&& !nt_token_check_domain_rid( p->pipe_user.nt_user_token, DOMAIN_GROUP_RID_ADMINS ) ) 
 	{
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	set = r->in.privs;
+	set = &q_u->set;
 
 	if ( !privilege_set_to_se_priv( &mask, set ) )
 		return NT_STATUS_NO_SUCH_PRIVILEGE;
 
 	if ( !revoke_privilege( &info->sid, &mask ) ) {
-		DEBUG(3,("_lsa_RemovePrivilegesFromAccount: revoke_privilege(%s) failed!\n",
-			 sid_string_dbg(&info->sid) ));
+		DEBUG(3,("_lsa_removeprivs: revoke_privilege(%s) failed!\n",
+			sid_string_static(&info->sid) ));
 		DEBUG(3,("Privilege mask:\n"));
 		dump_se_priv( DBGC_ALL, 3, &mask );
 		return NT_STATUS_NO_SUCH_PRIVILEGE;
@@ -1799,27 +1848,28 @@
 }
 
 /***************************************************************************
- _lsa_QuerySecurity
+ For a given SID, remove some privileges.
  ***************************************************************************/
 
-NTSTATUS _lsa_QuerySecurity(pipes_struct *p,
-			    struct lsa_QuerySecurity *r)
+NTSTATUS _lsa_query_secobj(pipes_struct *p, LSA_Q_QUERY_SEC_OBJ *q_u, LSA_R_QUERY_SEC_OBJ *r_u)
 {
 	struct lsa_info *handle=NULL;
 	SEC_DESC *psd = NULL;
 	size_t sd_size;
 	NTSTATUS status;
 
+	r_u->status = NT_STATUS_OK;
+
 	/* find the connection policy handle. */
-	if (!find_policy_by_hnd(p, r->in.handle, (void **)(void *)&handle))
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&handle))
 		return NT_STATUS_INVALID_HANDLE;
 
 	/* check if the user have enough rights */
-	if (!(handle->access & LSA_POLICY_VIEW_LOCAL_INFORMATION))
+	if (!(handle->access & POLICY_VIEW_LOCAL_INFORMATION))
 		return NT_STATUS_ACCESS_DENIED;
 
 
-	switch (r->in.sec_info) {
+	switch (q_u->sec_info) {
 	case 1:
 		/* SD contains only the owner */
 
@@ -1828,7 +1878,7 @@
 			return NT_STATUS_NO_MEMORY;
 
 
-		if((*r->out.sdbuf = make_sec_desc_buf(p->mem_ctx, sd_size, psd)) == NULL)
+		if((r_u->buf = make_sec_desc_buf(p->mem_ctx, sd_size, psd)) == NULL)
 			return NT_STATUS_NO_MEMORY;
 		break;
 	case 4:
@@ -1838,14 +1888,16 @@
 		if(!NT_STATUS_IS_OK(status))
 			return NT_STATUS_NO_MEMORY;
 
-		if((*r->out.sdbuf = make_sec_desc_buf(p->mem_ctx, sd_size, psd)) == NULL)
+		if((r_u->buf = make_sec_desc_buf(p->mem_ctx, sd_size, psd)) == NULL)
 			return NT_STATUS_NO_MEMORY;
 		break;
 	default:
 		return NT_STATUS_INVALID_LEVEL;
 	}
 
-	return status;
+	r_u->ptr=1;
+
+	return r_u->status;
 }
 
 #if 0 	/* AD DC work in ongoing in Samba 4 */
@@ -1853,7 +1905,7 @@
 /***************************************************************************
  ***************************************************************************/
 
- NTSTATUS _lsa_query_info2(pipes_struct *p, LSA_Q_QUERY_INFO2 *q_u, LSA_R_QUERY_INFO2 *r_u)
+NTSTATUS _lsa_query_info2(pipes_struct *p, LSA_Q_QUERY_INFO2 *q_u, LSA_R_QUERY_INFO2 *r_u)
 {
 	struct lsa_info *handle;
 	const char *nb_name;
@@ -1872,7 +1924,7 @@
 	switch (q_u->info_class) {
 	case 0x0c:
 		/* check if the user have enough rights */
-		if (!(handle->access & LSA_POLICY_VIEW_LOCAL_INFORMATION))
+		if (!(handle->access & POLICY_VIEW_LOCAL_INFORMATION))
 			return NT_STATUS_ACCESS_DENIED;
 
 		/* Request PolicyPrimaryDomainInformation. */
@@ -1883,12 +1935,10 @@
 				/* ugly temp hack for these next two */
 
 				/* This should be a 'netbios domain -> DNS domain' mapping */
-				dnsdomname = get_mydnsdomname(p->mem_ctx);
-				if (!dnsdomname || !*dnsdomname) {
-					return NT_STATUS_CANT_ACCESS_DOMAIN_INFO;
-				}
+				dnsdomname[0] = '\0';
+				get_mydnsdomname(dnsdomname);
 				strlower_m(dnsdomname);
-
+				
 				dns_name = dnsdomname;
 				forest_name = dnsdomname;
 
@@ -1898,7 +1948,7 @@
 			default:
 				return NT_STATUS_CANT_ACCESS_DOMAIN_INFO;
 		}
-		init_dns_dom_info(&r_u->info.dns_dom_info, nb_name, dns_name,
+		init_dns_dom_info(&r_u->info.dns_dom_info, nb_name, dns_name, 
 				  forest_name,&guid,sid);
 		break;
 	default:
@@ -1917,46 +1967,56 @@
 #endif	/* AD DC work in ongoing in Samba 4 */
 
 /***************************************************************************
- _lsa_AddAccountRights
  ***************************************************************************/
 
-NTSTATUS _lsa_AddAccountRights(pipes_struct *p,
-			       struct lsa_AddAccountRights *r)
+NTSTATUS _lsa_add_acct_rights(pipes_struct *p, LSA_Q_ADD_ACCT_RIGHTS *q_u, LSA_R_ADD_ACCT_RIGHTS *r_u)
 {
 	struct lsa_info *info = NULL;
 	int i = 0;
 	DOM_SID sid;
+	fstring privname;
+	UNISTR4_ARRAY *uni_privnames = q_u->rights;
+	struct current_user user;
+	
 
 	/* find the connection policy handle. */
-	if (!find_policy_by_hnd(p, r->in.handle, (void **)(void *)&info))
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&info))
 		return NT_STATUS_INVALID_HANDLE;
-
-	/* check to see if the pipe_user is a Domain Admin since
+		
+	/* check to see if the pipe_user is a Domain Admin since 
 	   account_pol.tdb was already opened as root, this is all we have */
-
-	if ( p->pipe_user.ut.uid != sec_initial_uid()
-		&& !nt_token_check_domain_rid( p->pipe_user.nt_user_token, DOMAIN_GROUP_RID_ADMINS ) )
+	   
+	get_current_user( &user, p );
+	if ( user.ut.uid != sec_initial_uid()
+		&& !nt_token_check_domain_rid( p->pipe_user.nt_user_token, DOMAIN_GROUP_RID_ADMINS ) ) 
 	{
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
 	/* according to an NT4 PDC, you can add privileges to SIDs even without
 	   call_lsa_create_account() first.  And you can use any arbitrary SID. */
+	   
+	sid_copy( &sid, &q_u->sid.sid );
+	
+	/* just a little sanity check */
+	
+	if ( q_u->count != uni_privnames->count ) {
+		DEBUG(0,("_lsa_add_acct_rights: count != number of UNISTR2 elements!\n"));
+		return NT_STATUS_INVALID_HANDLE;	
+	}
+		
+	for ( i=0; i<q_u->count; i++ ) {
+		UNISTR4 *uni4_str = &uni_privnames->strings[i];
 
-	sid_copy( &sid, r->in.sid );
-
-	for ( i=0; i < r->in.rights->count; i++ ) {
-
-		const char *privname = r->in.rights->names[i].string;
-
 		/* only try to add non-null strings */
 
-		if ( !privname )
+		if ( !uni4_str->string )
 			continue;
 
+		rpcstr_pull( privname, uni4_str->string->buffer, sizeof(privname), -1, STR_TERMINATE );
+		
 		if ( !grant_privilege_by_name( &sid, privname ) ) {
-			DEBUG(2,("_lsa_AddAccountRights: Failed to add privilege [%s]\n",
-				privname ));
+			DEBUG(2,("_lsa_add_acct_rights: Failed to add privilege [%s]\n", privname ));
 			return NT_STATUS_NO_SUCH_PRIVILEGE;
 		}
 	}
@@ -1965,51 +2025,60 @@
 }
 
 /***************************************************************************
- _lsa_RemoveAccountRights
  ***************************************************************************/
 
-NTSTATUS _lsa_RemoveAccountRights(pipes_struct *p,
-				  struct lsa_RemoveAccountRights *r)
+NTSTATUS _lsa_remove_acct_rights(pipes_struct *p, LSA_Q_REMOVE_ACCT_RIGHTS *q_u, LSA_R_REMOVE_ACCT_RIGHTS *r_u)
 {
 	struct lsa_info *info = NULL;
 	int i = 0;
 	DOM_SID sid;
-	const char *privname = NULL;
+	fstring privname;
+	UNISTR4_ARRAY *uni_privnames = q_u->rights;
+	struct current_user user;
+	
 
 	/* find the connection policy handle. */
-	if (!find_policy_by_hnd(p, r->in.handle, (void **)(void *)&info))
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&info))
 		return NT_STATUS_INVALID_HANDLE;
-
-	/* check to see if the pipe_user is a Domain Admin since
+		
+	/* check to see if the pipe_user is a Domain Admin since 
 	   account_pol.tdb was already opened as root, this is all we have */
-
-	if ( p->pipe_user.ut.uid != sec_initial_uid()
+	   
+	get_current_user( &user, p );
+	if ( user.ut.uid != sec_initial_uid()
 		&& !nt_token_check_domain_rid( p->pipe_user.nt_user_token, DOMAIN_GROUP_RID_ADMINS ) )
 	{
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	sid_copy( &sid, r->in.sid );
+	sid_copy( &sid, &q_u->sid.sid );
 
-	if ( r->in.remove_all ) {
-		if ( !revoke_all_privileges( &sid ) )
+	if ( q_u->removeall ) {
+		if ( !revoke_all_privileges( &sid ) ) 
 			return NT_STATUS_ACCESS_DENIED;
-
+	
 		return NT_STATUS_OK;
 	}
+	
+	/* just a little sanity check */
+	
+	if ( q_u->count != uni_privnames->count ) {
+		DEBUG(0,("_lsa_add_acct_rights: count != number of UNISTR2 elements!\n"));
+		return NT_STATUS_INVALID_HANDLE;	
+	}
+		
+	for ( i=0; i<q_u->count; i++ ) {
+		UNISTR4 *uni4_str = &uni_privnames->strings[i];
 
-	for ( i=0; i < r->in.rights->count; i++ ) {
-
-		privname = r->in.rights->names[i].string;
-
 		/* only try to add non-null strings */
 
-		if ( !privname )
+		if ( !uni4_str->string )
 			continue;
 
+		rpcstr_pull( privname, uni4_str->string->buffer, sizeof(privname), -1, STR_TERMINATE );
+		
 		if ( !revoke_privilege_by_name( &sid, privname ) ) {
-			DEBUG(2,("_lsa_RemoveAccountRights: Failed to revoke privilege [%s]\n",
-				privname ));
+			DEBUG(2,("_lsa_remove_acct_rights: Failed to revoke privilege [%s]\n", privname ));
 			return NT_STATUS_NO_SUCH_PRIVILEGE;
 		}
 	}
@@ -2017,70 +2086,28 @@
 	return NT_STATUS_OK;
 }
 
-/*******************************************************************
-********************************************************************/
 
-static NTSTATUS init_lsa_right_set(TALLOC_CTX *mem_ctx,
-				   struct lsa_RightSet *r,
-				   PRIVILEGE_SET *privileges)
-{
-	uint32 i;
-	const char *privname;
-	const char **privname_array = NULL;
-	int num_priv = 0;
-
-	for (i=0; i<privileges->count; i++) {
-
-		privname = luid_to_privilege_name(&privileges->set[i].luid);
-		if (privname) {
-			if (!add_string_to_array(mem_ctx, privname,
-						 &privname_array, &num_priv)) {
-				return NT_STATUS_NO_MEMORY;
-			}
-		}
-	}
-
-	if (num_priv) {
-
-		r->names = TALLOC_ZERO_ARRAY(mem_ctx, struct lsa_StringLarge,
-					     num_priv);
-		if (!r->names) {
-			return NT_STATUS_NO_MEMORY;
-		}
-
-		for (i=0; i<num_priv; i++) {
-			init_lsa_StringLarge(&r->names[i], privname_array[i]);
-		}
-
-		r->count = num_priv;
-	}
-
-	return NT_STATUS_OK;
-}
-
 /***************************************************************************
- _lsa_EnumAccountRights
  ***************************************************************************/
 
-NTSTATUS _lsa_EnumAccountRights(pipes_struct *p,
-				struct lsa_EnumAccountRights *r)
+NTSTATUS _lsa_enum_acct_rights(pipes_struct *p, LSA_Q_ENUM_ACCT_RIGHTS *q_u, LSA_R_ENUM_ACCT_RIGHTS *r_u)
 {
-	NTSTATUS status;
 	struct lsa_info *info = NULL;
 	DOM_SID sid;
 	PRIVILEGE_SET privileges;
 	SE_PRIV mask;
+	
 
 	/* find the connection policy handle. */
-
-	if (!find_policy_by_hnd(p, r->in.handle, (void **)(void *)&info))
+	
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&info))
 		return NT_STATUS_INVALID_HANDLE;
-
+		
 	/* according to an NT4 PDC, you can add privileges to SIDs even without
 	   call_lsa_create_account() first.  And you can use any arbitrary SID. */
-
-	sid_copy( &sid, r->in.sid );
-
+	   
+	sid_copy( &sid, &q_u->sid.sid );
+	
 	if ( !get_privileges_for_sids( &mask, &sid, 1 ) )
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
@@ -2088,38 +2115,37 @@
 
 	if ( se_priv_to_privilege_set( &privileges, &mask ) ) {
 
-		DEBUG(10,("_lsa_EnumAccountRights: %s has %d privileges\n",
-			  sid_string_dbg(&sid), privileges.count));
+		DEBUG(10,("_lsa_enum_acct_rights: %s has %d privileges\n", 
+			sid_string_static(&sid), privileges.count));
 
-		status = init_lsa_right_set(p->mem_ctx, r->out.rights, &privileges);
-	} else {
-		status = NT_STATUS_NO_SUCH_PRIVILEGE;
+		r_u->status = init_r_enum_acct_rights( r_u, &privileges );
 	}
+	else 
+		r_u->status = NT_STATUS_NO_SUCH_PRIVILEGE;
 
 	privilege_set_free( &privileges );
 
-	return status;
+	return r_u->status;
 }
 
+
 /***************************************************************************
- _lsa_LookupPrivValue
  ***************************************************************************/
 
-NTSTATUS _lsa_LookupPrivValue(pipes_struct *p,
-			      struct lsa_LookupPrivValue *r)
+NTSTATUS _lsa_lookup_priv_value(pipes_struct *p, LSA_Q_LOOKUP_PRIV_VALUE *q_u, LSA_R_LOOKUP_PRIV_VALUE *r_u)
 {
 	struct lsa_info *info = NULL;
-	const char *name = NULL;
+	fstring name;
 	LUID_ATTR priv_luid;
 	SE_PRIV mask;
-
+	
 	/* find the connection policy handle. */
-
-	if (!find_policy_by_hnd(p, r->in.handle, (void **)(void *)&info))
+	
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&info))
 		return NT_STATUS_INVALID_HANDLE;
-
-	name = r->in.name->string;
-
+		
+	unistr2_to_ascii(name, &q_u->privname.unistring, sizeof(name));
+	
 	DEBUG(10,("_lsa_lookup_priv_value: name = %s\n", name));
 
 	if ( !se_priv_from_name( name, &mask ) )
@@ -2127,302 +2153,9 @@
 
 	priv_luid = get_privilege_luid( &mask );
 
-	r->out.luid->low = priv_luid.luid.low;
-	r->out.luid->high = priv_luid.luid.high;
+	r_u->luid.low  = priv_luid.luid.low;
+	r_u->luid.high = priv_luid.luid.high;
+		
 
 	return NT_STATUS_OK;
 }
-
-/*
- * From here on the server routines are just dummy ones to make smbd link with
- * librpc/gen_ndr/srv_lsa.c. These routines are actually never called, we are
- * pulling the server stubs across one by one.
- */
-
-NTSTATUS _lsa_Delete(pipes_struct *p, struct lsa_Delete *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_SetSecObj(pipes_struct *p, struct lsa_SetSecObj *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_ChangePassword(pipes_struct *p, struct lsa_ChangePassword *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_SetInfoPolicy(pipes_struct *p, struct lsa_SetInfoPolicy *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_ClearAuditLog(pipes_struct *p, struct lsa_ClearAuditLog *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_GetQuotasForAccount(pipes_struct *p, struct lsa_GetQuotasForAccount *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_SetQuotasForAccount(pipes_struct *p, struct lsa_SetQuotasForAccount *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_QueryTrustedDomainInfo(pipes_struct *p, struct lsa_QueryTrustedDomainInfo *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_SetInformationTrustedDomain(pipes_struct *p, struct lsa_SetInformationTrustedDomain *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_QuerySecret(pipes_struct *p, struct lsa_QuerySecret *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_LookupPrivName(pipes_struct *p, struct lsa_LookupPrivName *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_EnumAccountsWithUserRight(pipes_struct *p, struct lsa_EnumAccountsWithUserRight *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_QueryTrustedDomainInfoBySid(pipes_struct *p, struct lsa_QueryTrustedDomainInfoBySid *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_SetTrustedDomainInfo(pipes_struct *p, struct lsa_SetTrustedDomainInfo *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_DeleteTrustedDomain(pipes_struct *p, struct lsa_DeleteTrustedDomain *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_StorePrivateData(pipes_struct *p, struct lsa_StorePrivateData *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_RetrievePrivateData(pipes_struct *p, struct lsa_RetrievePrivateData *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_QueryInfoPolicy2(pipes_struct *p, struct lsa_QueryInfoPolicy2 *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_SetInfoPolicy2(pipes_struct *p, struct lsa_SetInfoPolicy2 *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_QueryTrustedDomainInfoByName(pipes_struct *p, struct lsa_QueryTrustedDomainInfoByName *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_SetTrustedDomainInfoByName(pipes_struct *p, struct lsa_SetTrustedDomainInfoByName *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_EnumTrustedDomainsEx(pipes_struct *p, struct lsa_EnumTrustedDomainsEx *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_CreateTrustedDomainEx(pipes_struct *p, struct lsa_CreateTrustedDomainEx *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_CloseTrustedDomainEx(pipes_struct *p, struct lsa_CloseTrustedDomainEx *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_QueryDomainInformationPolicy(pipes_struct *p, struct lsa_QueryDomainInformationPolicy *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_SetDomainInformationPolicy(pipes_struct *p, struct lsa_SetDomainInformationPolicy *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_OpenTrustedDomainByName(pipes_struct *p, struct lsa_OpenTrustedDomainByName *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_TestCall(pipes_struct *p, struct lsa_TestCall *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_CreateTrustedDomainEx2(pipes_struct *p, struct lsa_CreateTrustedDomainEx2 *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_CREDRWRITE(pipes_struct *p, struct lsa_CREDRWRITE *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_CREDRREAD(pipes_struct *p, struct lsa_CREDRREAD *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_CREDRENUMERATE(pipes_struct *p, struct lsa_CREDRENUMERATE *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_CREDRWRITEDOMAINCREDENTIALS(pipes_struct *p, struct lsa_CREDRWRITEDOMAINCREDENTIALS *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_CREDRREADDOMAINCREDENTIALS(pipes_struct *p, struct lsa_CREDRREADDOMAINCREDENTIALS *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_CREDRDELETE(pipes_struct *p, struct lsa_CREDRDELETE *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_CREDRGETTARGETINFO(pipes_struct *p, struct lsa_CREDRGETTARGETINFO *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_CREDRPROFILELOADED(pipes_struct *p, struct lsa_CREDRPROFILELOADED *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_CREDRGETSESSIONTYPES(pipes_struct *p, struct lsa_CREDRGETSESSIONTYPES *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_LSARREGISTERAUDITEVENT(pipes_struct *p, struct lsa_LSARREGISTERAUDITEVENT *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_LSARGENAUDITEVENT(pipes_struct *p, struct lsa_LSARGENAUDITEVENT *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_LSARUNREGISTERAUDITEVENT(pipes_struct *p, struct lsa_LSARUNREGISTERAUDITEVENT *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_lsaRQueryForestTrustInformation(pipes_struct *p, struct lsa_lsaRQueryForestTrustInformation *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_LSARSETFORESTTRUSTINFORMATION(pipes_struct *p, struct lsa_LSARSETFORESTTRUSTINFORMATION *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_CREDRRENAME(pipes_struct *p, struct lsa_CREDRRENAME *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_LSAROPENPOLICYSCE(pipes_struct *p, struct lsa_LSAROPENPOLICYSCE *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_LSARADTREGISTERSECURITYEVENTSOURCE(pipes_struct *p, struct lsa_LSARADTREGISTERSECURITYEVENTSOURCE *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE(pipes_struct *p, struct lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS _lsa_LSARADTREPORTSECURITYEVENT(pipes_struct *p, struct lsa_LSARADTREPORTSECURITYEVENT *r)
-{
-	p->rng_fault_state = True;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}

Copied: branches/samba/upstream/source/rpc_server/srv_netlog.c (from rev 1928, branches/samba/upstream/source/rpc_server/srv_netlog.c)
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_netlog.c	                        (rev 0)
+++ branches/samba/upstream/source/rpc_server/srv_netlog.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,406 @@
+/* 
+ *  Unix SMB/CIFS implementation.
+ *  RPC Pipe client / server routines
+ *  Copyright (C) Andrew Tridgell              1992-1997,
+ *  Copyright (C) Luke Kenneth Casson Leighton 1996-1997,
+ *  Copyright (C) Paul Ashton                       1997,
+ *  Copyright (C) Jeremy Allison               1998-2001,
+ *  Copyright (C) Jim McDonough <jmcd at us.ibm.com>   2003.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/* This is the interface to the netlogon pipe. */
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_RPC_SRV
+
+/*************************************************************************
+ api_net_req_chal:
+ *************************************************************************/
+
+static BOOL api_net_req_chal(pipes_struct *p)
+{
+	NET_Q_REQ_CHAL q_u;
+	NET_R_REQ_CHAL r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the challenge... */
+	if(!net_io_q_req_chal("", &q_u, data, 0)) {
+		DEBUG(0,("api_net_req_chal: Failed to unmarshall NET_Q_REQ_CHAL.\n"));
+		return False;
+	}
+
+	r_u.status = _net_req_chal(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!net_io_r_req_chal("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_net_req_chal: Failed to marshall NET_R_REQ_CHAL.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*************************************************************************
+ api_net_auth:
+ *************************************************************************/
+
+static BOOL api_net_auth(pipes_struct *p)
+{
+	NET_Q_AUTH q_u;
+	NET_R_AUTH r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the challenge... */
+	if(!net_io_q_auth("", &q_u, data, 0)) {
+		DEBUG(0,("api_net_auth: Failed to unmarshall NET_Q_AUTH.\n"));
+		return False;
+	}
+
+	r_u.status = _net_auth(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!net_io_r_auth("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_net_auth: Failed to marshall NET_R_AUTH.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*************************************************************************
+ api_net_auth_2:
+ *************************************************************************/
+
+static BOOL api_net_auth_2(pipes_struct *p)
+{
+	NET_Q_AUTH_2 q_u;
+	NET_R_AUTH_2 r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the challenge... */
+	if(!net_io_q_auth_2("", &q_u, data, 0)) {
+		DEBUG(0,("api_net_auth_2: Failed to unmarshall NET_Q_AUTH_2.\n"));
+		return False;
+	}
+
+	r_u.status = _net_auth_2(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!net_io_r_auth_2("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_net_auth_2: Failed to marshall NET_R_AUTH_2.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*************************************************************************
+ api_net_srv_pwset:
+ *************************************************************************/
+
+static BOOL api_net_srv_pwset(pipes_struct *p)
+{
+	NET_Q_SRV_PWSET q_u;
+	NET_R_SRV_PWSET r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the challenge and encrypted password ... */
+	if(!net_io_q_srv_pwset("", &q_u, data, 0)) {
+		DEBUG(0,("api_net_srv_pwset: Failed to unmarshall NET_Q_SRV_PWSET.\n"));
+		return False;
+	}
+
+	r_u.status = _net_srv_pwset(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!net_io_r_srv_pwset("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_net_srv_pwset: Failed to marshall NET_R_SRV_PWSET.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*************************************************************************
+ api_net_sam_logoff:
+ *************************************************************************/
+
+static BOOL api_net_sam_logoff(pipes_struct *p)
+{
+	NET_Q_SAM_LOGOFF q_u;
+	NET_R_SAM_LOGOFF r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!net_io_q_sam_logoff("", &q_u, data, 0)) {
+		DEBUG(0,("api_net_sam_logoff: Failed to unmarshall NET_Q_SAM_LOGOFF.\n"));
+		return False;
+	}
+
+	r_u.status = _net_sam_logoff(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!net_io_r_sam_logoff("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_net_sam_logoff: Failed to marshall NET_R_SAM_LOGOFF.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*************************************************************************
+ api_net_sam_logon:
+ *************************************************************************/
+
+static BOOL api_net_sam_logon(pipes_struct *p)
+{
+	NET_Q_SAM_LOGON q_u;
+	NET_R_SAM_LOGON r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+    
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!net_io_q_sam_logon("", &q_u, data, 0)) {
+		DEBUG(0, ("api_net_sam_logon: Failed to unmarshall NET_Q_SAM_LOGON.\n"));
+		return False;
+	}
+   
+	r_u.status = _net_sam_logon(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!net_io_r_sam_logon("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_net_sam_logon: Failed to marshall NET_R_SAM_LOGON.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*************************************************************************
+ api_net_trust_dom_list:
+ *************************************************************************/
+
+static BOOL api_net_trust_dom_list(pipes_struct *p)
+{
+	NET_Q_TRUST_DOM_LIST q_u;
+	NET_R_TRUST_DOM_LIST r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the lsa trusted domain list query... */
+	if(!net_io_q_trust_dom("", &q_u, data, 0)) {
+		DEBUG(0,("api_net_trust_dom_list: Failed to unmarshall NET_Q_TRUST_DOM_LIST.\n"));
+		return False;
+	}
+
+	/* construct reply. */
+	r_u.status = _net_trust_dom_list(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!net_io_r_trust_dom("", &r_u, rdata, 0)) {
+		DEBUG(0,("net_reply_trust_dom_list: Failed to marshall NET_R_TRUST_DOM_LIST.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*************************************************************************
+ api_net_logon_ctrl2:
+ *************************************************************************/
+
+static BOOL api_net_logon_ctrl2(pipes_struct *p)
+{
+	NET_Q_LOGON_CTRL2 q_u;
+	NET_R_LOGON_CTRL2 r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+
+	/* grab the lsa netlogon ctrl2 query... */
+	if(!net_io_q_logon_ctrl2("", &q_u, data, 0)) {
+		DEBUG(0,("api_net_logon_ctrl2: Failed to unmarshall NET_Q_LOGON_CTRL2.\n"));
+		return False;
+	}
+
+	r_u.status = _net_logon_ctrl2(p, &q_u, &r_u);
+
+	if(!net_io_r_logon_ctrl2("", &r_u, rdata, 0)) {
+		DEBUG(0,("net_reply_logon_ctrl2: Failed to marshall NET_R_LOGON_CTRL2.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*************************************************************************
+ api_net_logon_ctrl:
+ *************************************************************************/
+
+static BOOL api_net_logon_ctrl(pipes_struct *p)
+{
+	NET_Q_LOGON_CTRL q_u;
+	NET_R_LOGON_CTRL r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the lsa netlogon ctrl query... */
+	if(!net_io_q_logon_ctrl("", &q_u, data, 0)) {
+		DEBUG(0,("api_net_logon_ctrl: Failed to unmarshall NET_Q_LOGON_CTRL.\n"));
+		return False;
+	}
+
+	r_u.status = _net_logon_ctrl(p, &q_u, &r_u);
+
+	if(!net_io_r_logon_ctrl("", &r_u, rdata, 0)) {
+		DEBUG(0,("net_reply_logon_ctrl2: Failed to marshall NET_R_LOGON_CTRL.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*************************************************************************
+ api_net_sam_logon_ex:
+ *************************************************************************/
+
+static BOOL api_net_sam_logon_ex(pipes_struct *p)
+{
+	NET_Q_SAM_LOGON_EX q_u;
+	NET_R_SAM_LOGON_EX r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+    
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!net_io_q_sam_logon_ex("", &q_u, data, 0)) {
+		DEBUG(0, ("api_net_sam_logon_ex: Failed to unmarshall NET_Q_SAM_LOGON_EX.\n"));
+		return False;
+	}
+   
+	r_u.status = _net_sam_logon_ex(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!net_io_r_sam_logon_ex("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_net_sam_logon_ex: Failed to marshall NET_R_SAM_LOGON_EX.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+
+/*************************************************************************
+ api_ds_enum_dom_trusts:
+ *************************************************************************/
+
+#if 0 	/* JERRY */
+static BOOL api_ds_enum_dom_trusts(pipes_struct *p)
+{
+	DS_Q_ENUM_DOM_TRUSTS q_u;
+	DS_R_ENUM_DOM_TRUSTS r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	DEBUG(6,("api_ds_enum_dom_trusts\n"));
+
+	if ( !ds_io_q_enum_domain_trusts("", data, 0, &q_u) ) {
+		DEBUG(0,("api_ds_enum_domain_trusts: Failed to unmarshall DS_Q_ENUM_DOM_TRUSTS.\n"));
+		return False;
+	}
+
+	r_u.status = _ds_enum_dom_trusts(p, &q_u, &r_u);
+
+	if ( !ds_io_r_enum_domain_trusts("", rdata, 0, &r_u) ) {
+		DEBUG(0,("api_ds_enum_domain_trusts: Failed to marshall DS_R_ENUM_DOM_TRUSTS.\n"));
+		return False;
+	}
+
+	DEBUG(6,("api_ds_enum_dom_trusts\n"));
+
+	return True;
+}
+#endif	/* JERRY */
+
+/*******************************************************************
+ array of \PIPE\NETLOGON operations
+ ********************************************************************/
+static struct api_struct api_net_cmds [] =
+    {
+      { "NET_REQCHAL"       , NET_REQCHAL       , api_net_req_chal       }, 
+      { "NET_AUTH"          , NET_AUTH          , api_net_auth           }, 
+      { "NET_AUTH2"         , NET_AUTH2         , api_net_auth_2         }, 
+      { "NET_SRVPWSET"      , NET_SRVPWSET      , api_net_srv_pwset      }, 
+      { "NET_SAMLOGON"      , NET_SAMLOGON      , api_net_sam_logon      }, 
+      { "NET_SAMLOGOFF"     , NET_SAMLOGOFF     , api_net_sam_logoff     }, 
+      { "NET_LOGON_CTRL2"   , NET_LOGON_CTRL2   , api_net_logon_ctrl2    }, 
+      { "NET_TRUST_DOM_LIST", NET_TRUST_DOM_LIST, api_net_trust_dom_list },
+      { "NET_LOGON_CTRL"    , NET_LOGON_CTRL    , api_net_logon_ctrl     },
+      { "NET_SAMLOGON_EX"   , NET_SAMLOGON_EX   , api_net_sam_logon_ex   },
+#if 0	/* JERRY */
+      { "DS_ENUM_DOM_TRUSTS", DS_ENUM_DOM_TRUSTS, api_ds_enum_dom_trusts }
+#endif	/* JERRY */
+    };
+
+void netlog_get_pipe_fns( struct api_struct **fns, int *n_fns )
+{
+	*fns = api_net_cmds;
+	*n_fns = sizeof(api_net_cmds) / sizeof(struct api_struct);
+}
+
+NTSTATUS rpc_net_init(void)
+{
+  return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "NETLOGON", "lsass", api_net_cmds,
+				    sizeof(api_net_cmds) / sizeof(struct api_struct));
+}

Modified: branches/samba/upstream/source/rpc_server/srv_netlog_nt.c
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_netlog_nt.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_server/srv_netlog_nt.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-/*
+/* 
  *  Unix SMB/CIFS implementation.
  *  RPC Pipe client / server routines
  *  Copyright (C) Andrew Tridgell              1992-1997,
@@ -6,20 +6,20 @@
  *  Copyright (C) Paul Ashton                       1997.
  *  Copyright (C) Jeremy Allison               1998-2001.
  *  Copyright (C) Andrew Bartlett                   2001.
- *  Copyright (C) Guenther Deschner		    2008.
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
- *
+ *  
  *  This program is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
- *
+ *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 /* This is the implementation of the netlogon pipe. */
@@ -35,83 +35,38 @@
  init_net_r_req_chal:
  *************************************************************************/
 
-static void init_net_r_req_chal(struct netr_Credential *r,
-				struct netr_Credential *srv_chal)
+static void init_net_r_req_chal(NET_R_REQ_CHAL *r_c,
+                                DOM_CHAL *srv_chal, NTSTATUS status)
 {
 	DEBUG(6,("init_net_r_req_chal: %d\n", __LINE__));
-
-	memcpy(r->data, srv_chal->data, sizeof(r->data));
+	memcpy(r_c->srv_chal.data, srv_chal->data, sizeof(srv_chal->data));
+	r_c->status = status;
 }
 
-/*******************************************************************
- Inits a netr_NETLOGON_INFO_1 structure.
-********************************************************************/
+/*************************************************************************
+ error messages cropping up when using nltest.exe...
+ *************************************************************************/
 
-static void init_netlogon_info1(struct netr_NETLOGON_INFO_1 *r,
-				uint32_t flags,
-				uint32_t pdc_connection_status)
-{
-	r->flags = flags;
-	r->pdc_connection_status = pdc_connection_status;
-}
+#define ERROR_NO_SUCH_DOMAIN   0x54b
+#define ERROR_NO_LOGON_SERVERS 0x51f
+#define NO_ERROR               0x0
 
-/*******************************************************************
- Inits a netr_NETLOGON_INFO_2 structure.
-********************************************************************/
-
-static void init_netlogon_info2(struct netr_NETLOGON_INFO_2 *r,
-				uint32_t flags,
-				uint32_t pdc_connection_status,
-				const char *trusted_dc_name,
-				uint32_t tc_connection_status)
-{
-	r->flags = flags;
-	r->pdc_connection_status = pdc_connection_status;
-	r->trusted_dc_name = trusted_dc_name;
-	r->tc_connection_status = tc_connection_status;
-}
-
-/*******************************************************************
- Inits a netr_NETLOGON_INFO_3 structure.
-********************************************************************/
-
-static void init_netlogon_info3(struct netr_NETLOGON_INFO_3 *r,
-				uint32_t flags,
-				uint32_t logon_attempts)
-{
-	r->flags = flags;
-	r->logon_attempts = logon_attempts;
-}
-
 /*************************************************************************
- _netr_LogonControl
+ net_reply_logon_ctrl:
  *************************************************************************/
 
-WERROR _netr_LogonControl(pipes_struct *p,
-			  struct netr_LogonControl *r)
+NTSTATUS _net_logon_ctrl(pipes_struct *p, NET_Q_LOGON_CTRL *q_u, 
+		       NET_R_LOGON_CTRL *r_u)
 {
-	struct netr_NETLOGON_INFO_1 *info1;
-	uint32_t flags = 0x0;
-	uint32_t pdc_connection_status = W_ERROR_V(WERR_OK);
-
+	uint32 flags = 0x0;
+	uint32 pdc_connection_status = 0x00; /* Maybe a win32 error code? */
+	
 	/* Setup the Logon Control response */
 
-	switch (r->in.level) {
-		case 1:
-			info1 = TALLOC_ZERO_P(p->mem_ctx, struct netr_NETLOGON_INFO_1);
-			if (!info1) {
-				return WERR_NOMEM;
-			}
-			init_netlogon_info1(info1,
-					    flags,
-					    pdc_connection_status);
-			r->out.info->info1 = info1;
-			break;
-		default:
-			return WERR_UNKNOWN_LEVEL;
-	}
+	init_net_r_logon_ctrl(r_u, q_u->query_level, flags, 
+			      pdc_connection_status);
 
-	return WERR_OK;
+	return r_u->status;
 }
 
 /****************************************************************************
@@ -120,165 +75,146 @@
 
 static void send_sync_message(void)
 {
+        TDB_CONTEXT *tdb;
+
+        tdb = tdb_open_log(lock_path("connections.tdb"), 0,
+                           TDB_DEFAULT, O_RDONLY, 0);
+
+        if (!tdb) {
+                DEBUG(3, ("send_sync_message(): failed to open connections "
+                          "database\n"));
+                return;
+        }
+
         DEBUG(3, ("sending sam synchronisation message\n"));
-        message_send_all(smbd_messaging_context(), MSG_SMB_SAM_SYNC, NULL, 0,
-			 NULL);
+        
+        message_send_all(tdb, MSG_SMB_SAM_SYNC, NULL, 0, False, NULL);
+
+        tdb_close(tdb);
 }
 
 /*************************************************************************
- _netr_LogonControl2
+ net_reply_logon_ctrl2:
  *************************************************************************/
 
-WERROR _netr_LogonControl2(pipes_struct *p,
-			   struct netr_LogonControl2 *r)
+NTSTATUS _net_logon_ctrl2(pipes_struct *p, NET_Q_LOGON_CTRL2 *q_u, NET_R_LOGON_CTRL2 *r_u)
 {
         uint32 flags = 0x0;
         uint32 pdc_connection_status = 0x0;
         uint32 logon_attempts = 0x0;
         uint32 tc_status;
-	fstring dc_name2;
-	const char *dc_name = NULL;
-	struct sockaddr_storage dc_ss;
-	const char *domain = NULL;
-	struct netr_NETLOGON_INFO_1 *info1;
-	struct netr_NETLOGON_INFO_2 *info2;
-	struct netr_NETLOGON_INFO_3 *info3;
+	fstring servername, domain, dc_name, dc_name2;
+	struct in_addr dc_ip;
 
-	tc_status = W_ERROR_V(WERR_NO_SUCH_DOMAIN);
+	/* this should be \\global_myname() */
+	unistr2_to_ascii(servername, &q_u->uni_server_name, sizeof(servername));
 
-	switch (r->in.function_code) {
+	r_u->status = NT_STATUS_OK;
+	
+	tc_status = ERROR_NO_SUCH_DOMAIN;
+	fstrcpy( dc_name, "" );
+	
+	switch ( q_u->function_code ) {
 		case NETLOGON_CONTROL_TC_QUERY:
-			domain = r->in.data->domain;
-
+			unistr2_to_ascii(domain, &q_u->info.info6.domain, sizeof(domain));
+				
 			if ( !is_trusted_domain( domain ) )
 				break;
-
-			if ( !get_dc_name( domain, NULL, dc_name2, &dc_ss ) ) {
-				tc_status = W_ERROR_V(WERR_NO_LOGON_SERVERS);
+				
+			if ( !get_dc_name( domain, NULL, dc_name2, &dc_ip ) ) {
+				tc_status = ERROR_NO_LOGON_SERVERS;
 				break;
 			}
 
-			dc_name = talloc_asprintf(p->mem_ctx, "\\\\%s", dc_name2);
-			if (!dc_name) {
-				return WERR_NOMEM;
-			}
-
-			tc_status = W_ERROR_V(WERR_OK);
-
+			fstr_sprintf( dc_name, "\\\\%s", dc_name2 );
+				
+			tc_status = NO_ERROR;
+			
 			break;
-
+			
 		case NETLOGON_CONTROL_REDISCOVER:
-			domain = r->in.data->domain;
-
+			unistr2_to_ascii(domain, &q_u->info.info6.domain, sizeof(domain));
+				
 			if ( !is_trusted_domain( domain ) )
 				break;
-
-			if ( !get_dc_name( domain, NULL, dc_name2, &dc_ss ) ) {
-				tc_status = W_ERROR_V(WERR_NO_LOGON_SERVERS);
+				
+			if ( !get_dc_name( domain, NULL, dc_name2, &dc_ip ) ) {
+				tc_status = ERROR_NO_LOGON_SERVERS;
 				break;
 			}
 
-			dc_name = talloc_asprintf(p->mem_ctx, "\\\\%s", dc_name2);
-			if (!dc_name) {
-				return WERR_NOMEM;
-			}
-
-			tc_status = W_ERROR_V(WERR_OK);
-
+			fstr_sprintf( dc_name, "\\\\%s", dc_name2 );
+				
+			tc_status = NO_ERROR;
+			
 			break;
-
+			
 		default:
 			/* no idea what this should be */
-			DEBUG(0,("_netr_LogonControl2: unimplemented function level [%d]\n",
-				r->in.function_code));
-			return WERR_UNKNOWN_LEVEL;
+			DEBUG(0,("_net_logon_ctrl2: unimplemented function level [%d]\n",
+				q_u->function_code));
 	}
-
+	
 	/* prepare the response */
+	
+	init_net_r_logon_ctrl2( r_u, q_u->query_level, flags, 
+		pdc_connection_status, logon_attempts, tc_status, dc_name );
 
-	switch (r->in.level) {
-		case 1:
-			info1 = TALLOC_ZERO_P(p->mem_ctx, struct netr_NETLOGON_INFO_1);
-			W_ERROR_HAVE_NO_MEMORY(info1);
-
-			init_netlogon_info1(info1,
-					    flags,
-					    pdc_connection_status);
-			r->out.query->info1 = info1;
-			break;
-		case 2:
-			info2 = TALLOC_ZERO_P(p->mem_ctx, struct netr_NETLOGON_INFO_2);
-			W_ERROR_HAVE_NO_MEMORY(info2);
-
-			init_netlogon_info2(info2,
-					    flags,
-					    pdc_connection_status,
-					    dc_name,
-					    tc_status);
-			r->out.query->info2 = info2;
-			break;
-		case 3:
-			info3 = TALLOC_ZERO_P(p->mem_ctx, struct netr_NETLOGON_INFO_3);
-			W_ERROR_HAVE_NO_MEMORY(info3);
-
-			init_netlogon_info3(info3,
-					    flags,
-					    logon_attempts);
-			r->out.query->info3 = info3;
-			break;
-		default:
-			return WERR_UNKNOWN_LEVEL;
-	}
-
-        if (lp_server_role() == ROLE_DOMAIN_BDC) {
+        if (lp_server_role() == ROLE_DOMAIN_BDC)
                 send_sync_message();
-	}
 
-	return WERR_OK;
+	return r_u->status;
 }
 
 /*************************************************************************
- _netr_NetrEnumerateTrustedDomains
+ net_reply_trust_dom_list:
  *************************************************************************/
 
-WERROR _netr_NetrEnumerateTrustedDomains(pipes_struct *p,
-					 struct netr_NetrEnumerateTrustedDomains *r)
+NTSTATUS _net_trust_dom_list(pipes_struct *p, NET_Q_TRUST_DOM_LIST *q_u, NET_R_TRUST_DOM_LIST *r_u)
 {
-	struct netr_Blob trusted_domains_blob;
-	DATA_BLOB blob;
+	const char *trusted_domain = "test_domain";
+	uint32 num_trust_domains = 1;
 
-	DEBUG(6,("_netr_NetrEnumerateTrustedDomains: %d\n", __LINE__));
+	DEBUG(6,("_net_trust_dom_list: %d\n", __LINE__));
 
 	/* set up the Trusted Domain List response */
+	init_r_trust_dom(r_u, num_trust_domains, trusted_domain);
 
-	blob = data_blob_talloc_zero(p->mem_ctx, 2);
-	trusted_domains_blob.data = blob.data;
-	trusted_domains_blob.length = blob.length;
+	DEBUG(6,("_net_trust_dom_list: %d\n", __LINE__));
 
-	DEBUG(6,("_netr_NetrEnumerateTrustedDomains: %d\n", __LINE__));
+	return r_u->status;
+}
 
-	*r->out.trusted_domains_blob = trusted_domains_blob;
+/***********************************************************************************
+ init_net_r_srv_pwset:
+ ***********************************************************************************/
 
-	return WERR_OK;
+static void init_net_r_srv_pwset(NET_R_SRV_PWSET *r_s,
+				 DOM_CRED *srv_cred, NTSTATUS status)  
+{
+	DEBUG(5,("init_net_r_srv_pwset: %d\n", __LINE__));
+
+	memcpy(&r_s->srv_cred, srv_cred, sizeof(r_s->srv_cred));
+	r_s->status = status;
+
+	DEBUG(5,("init_net_r_srv_pwset: %d\n", __LINE__));
 }
 
 /******************************************************************
  gets a machine password entry.  checks access rights of the host.
  ******************************************************************/
 
-static NTSTATUS get_md4pw(char *md4pw, const char *mach_acct, uint16 sec_chan_type)
+static NTSTATUS get_md4pw(char *md4pw, char *mach_acct, uint16 sec_chan_type)
 {
 	struct samu *sampass = NULL;
 	const uint8 *pass;
-	bool ret;
+	BOOL ret;
 	uint32 acct_ctrl;
 
 #if 0
-	char addr[INET6_ADDRSTRLEN];
-
     /*
      * Currently this code is redundent as we already have a filter
-     * by hostname list. What this code really needs to do is to
+     * by hostname list. What this code really needs to do is to 
      * get a hosts allowed/hosts denied list from the SAM database
      * on a per user basis, and make the access decision there.
      * I will leave this code here for now as a reminder to implement
@@ -286,8 +222,8 @@
      */
 
 	if (!allow_access(lp_domain_hostsdeny(), lp_domain_hostsallow(),
-			client_name(get_client_fd()),
-			client_addr(get_client_fd(),addr,sizeof(addr)))) {
+	                  client_name(), client_addr()))
+	{
 		DEBUG(0,("get_md4pw: Workstation %s denied access to domain\n", mach_acct));
 		return False;
 	}
@@ -301,7 +237,7 @@
 	become_root();
 	ret = pdb_getsampwnam(sampass, mach_acct);
 	unbecome_root();
-
+ 
  	if (!ret) {
  		DEBUG(0,("get_md4pw: Workstation %s: no account in domain\n", mach_acct));
 		TALLOC_FREE(sampass);
@@ -317,7 +253,7 @@
 
 	if (!(acct_ctrl & ACB_SVRTRUST) &&
 	    !(acct_ctrl & ACB_WSTRUST) &&
-	    !(acct_ctrl & ACB_DOMTRUST))
+	    !(acct_ctrl & ACB_DOMTRUST)) 
 	{
 		DEBUG(0,("get_md4pw: Workstation %s: account is not a trust account\n", mach_acct));
 		TALLOC_FREE(sampass);
@@ -360,21 +296,20 @@
 	}
 
 	memcpy(md4pw, pass, 16);
-	dump_data(5, (uint8 *)md4pw, 16);
+	dump_data(5, md4pw, 16);
 
 	TALLOC_FREE(sampass);
-
+	
 	return NT_STATUS_OK;
+ 	
 
-
 }
 
 /*************************************************************************
- _netr_ServerReqChallenge
+ _net_req_chal
  *************************************************************************/
 
-NTSTATUS _netr_ServerReqChallenge(pipes_struct *p,
-				  struct netr_ServerReqChallenge *r)
+NTSTATUS _net_req_chal(pipes_struct *p, NET_Q_REQ_CHAL *q_u, NET_R_REQ_CHAL *r_u)
 {
 	if (!p->dc) {
 		p->dc = TALLOC_ZERO_P(p->pipe_state_mem_ctx, struct dcinfo);
@@ -382,53 +317,65 @@
 			return NT_STATUS_NO_MEMORY;
 		}
 	} else {
-		DEBUG(10,("_netr_ServerReqChallenge: new challenge requested. Clearing old state.\n"));
+		DEBUG(10,("_net_req_chal: new challenge requested. Clearing old state.\n"));
 		ZERO_STRUCTP(p->dc);
 	}
 
-	fstrcpy(p->dc->remote_machine, r->in.computer_name);
+	rpcstr_pull(p->dc->remote_machine,
+			q_u->uni_logon_clnt.buffer,
+			sizeof(fstring),q_u->uni_logon_clnt.uni_str_len*2,0);
 
 	/* Save the client challenge to the server. */
-	memcpy(p->dc->clnt_chal.data, r->in.credentials->data,
-		sizeof(r->in.credentials->data));
+	memcpy(p->dc->clnt_chal.data, q_u->clnt_chal.data, sizeof(q_u->clnt_chal.data));
 
 	/* Create a server challenge for the client */
 	/* Set this to a random value. */
 	generate_random_buffer(p->dc->srv_chal.data, 8);
-
+	
 	/* set up the LSA REQUEST CHALLENGE response */
-	init_net_r_req_chal(r->out.return_credentials, &p->dc->srv_chal);
-
+	init_net_r_req_chal(r_u, &p->dc->srv_chal, NT_STATUS_OK);
+	
 	p->dc->challenge_sent = True;
 
 	return NT_STATUS_OK;
 }
 
 /*************************************************************************
- _netr_ServerAuthenticate
- Create the initial credentials.
+ init_net_r_auth:
  *************************************************************************/
 
-NTSTATUS _netr_ServerAuthenticate(pipes_struct *p,
-				  struct netr_ServerAuthenticate *r)
+static void init_net_r_auth(NET_R_AUTH *r_a, DOM_CHAL *resp_cred, NTSTATUS status)
 {
+	memcpy(r_a->srv_chal.data, resp_cred->data, sizeof(resp_cred->data));
+	r_a->status = status;
+}
+
+/*************************************************************************
+ _net_auth. Create the initial credentials.
+ *************************************************************************/
+
+NTSTATUS _net_auth(pipes_struct *p, NET_Q_AUTH *q_u, NET_R_AUTH *r_u)
+{
 	NTSTATUS status;
-	struct netr_Credential srv_chal_out;
+	fstring mach_acct;
+	fstring remote_machine;
+	DOM_CHAL srv_chal_out;
 
 	if (!p->dc || !p->dc->challenge_sent) {
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	status = get_md4pw((char *)p->dc->mach_pw,
-			   r->in.account_name,
-			   r->in.secure_channel_type);
+	rpcstr_pull(mach_acct, q_u->clnt_id.uni_acct_name.buffer,sizeof(fstring),
+				q_u->clnt_id.uni_acct_name.uni_str_len*2,0);
+	rpcstr_pull(remote_machine, q_u->clnt_id.uni_comp_name.buffer,sizeof(fstring),
+				q_u->clnt_id.uni_comp_name.uni_str_len*2,0);
+
+	status = get_md4pw((char *)p->dc->mach_pw, mach_acct, q_u->clnt_id.sec_chan);
 	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0,("_netr_ServerAuthenticate: get_md4pw failed. Failed to "
+		DEBUG(0,("_net_auth: creds_server_check failed. Failed to "
 			"get password for machine account %s "
 			"from client %s: %s\n",
-			r->in.account_name,
-			r->in.computer_name,
-			nt_errstr(status) ));
+			mach_acct, remote_machine, nt_errstr(status) ));
 		/* always return NT_STATUS_ACCESS_DENIED */
 		return NT_STATUS_ACCESS_DENIED;
 	}
@@ -439,101 +386,110 @@
 			&p->dc->clnt_chal,	/* Stored client chal. */
 			&p->dc->srv_chal,	/* Stored server chal. */
 			p->dc->mach_pw,
-			&srv_chal_out);
+			&srv_chal_out);	
 
 	/* Check client credentials are valid. */
-	if (!netlogon_creds_server_check(p->dc, r->in.credentials)) {
-		DEBUG(0,("_netr_ServerAuthenticate: netlogon_creds_server_check failed. Rejecting auth "
+	if (!creds_server_check(p->dc, &q_u->clnt_chal)) {
+		DEBUG(0,("_net_auth: creds_server_check failed. Rejecting auth "
 			"request from client %s machine account %s\n",
-			r->in.computer_name,
-			r->in.account_name));
+			remote_machine, mach_acct ));
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	fstrcpy(p->dc->mach_acct, r->in.account_name);
-	fstrcpy(p->dc->remote_machine, r->in.computer_name);
+	fstrcpy(p->dc->mach_acct, mach_acct);
+	fstrcpy(p->dc->remote_machine, remote_machine);
 	p->dc->authenticated = True;
 
 	/* set up the LSA AUTH response */
 	/* Return the server credentials. */
+	init_net_r_auth(r_u, &srv_chal_out, NT_STATUS_OK);
 
-	memcpy(r->out.return_credentials->data, &srv_chal_out.data,
-	       sizeof(r->out.return_credentials->data));
+	return r_u->status;
+}
 
-	return NT_STATUS_OK;
+/*************************************************************************
+ init_net_r_auth_2:
+ *************************************************************************/
+
+static void init_net_r_auth_2(NET_R_AUTH_2 *r_a,
+                              DOM_CHAL *resp_cred, NEG_FLAGS *flgs, NTSTATUS status)
+{
+	memcpy(r_a->srv_chal.data, resp_cred->data, sizeof(resp_cred->data));
+	memcpy(&r_a->srv_flgs, flgs, sizeof(r_a->srv_flgs));
+	r_a->status = status;
 }
 
 /*************************************************************************
- _netr_ServerAuthenticate2
+ _net_auth_2
  *************************************************************************/
 
-NTSTATUS _netr_ServerAuthenticate2(pipes_struct *p,
-				   struct netr_ServerAuthenticate2 *r)
+NTSTATUS _net_auth_2(pipes_struct *p, NET_Q_AUTH_2 *q_u, NET_R_AUTH_2 *r_u)
 {
 	NTSTATUS status;
-	uint32_t srv_flgs;
-	struct netr_Credential srv_chal_out;
+	NEG_FLAGS srv_flgs;
+	fstring mach_acct;
+	fstring remote_machine;
+	DOM_CHAL srv_chal_out;
 
-	/* We use this as the key to store the creds: */
-	/* r->in.computer_name */
+	rpcstr_pull(mach_acct, q_u->clnt_id.uni_acct_name.buffer,sizeof(fstring),
+				q_u->clnt_id.uni_acct_name.uni_str_len*2,0);
 
+	/* We use this as the key to store the creds. */
+	rpcstr_pull(remote_machine, q_u->clnt_id.uni_comp_name.buffer,sizeof(fstring),
+				q_u->clnt_id.uni_comp_name.uni_str_len*2,0);
+
 	if (!p->dc || !p->dc->challenge_sent) {
-		DEBUG(0,("_netr_ServerAuthenticate2: no challenge sent to client %s\n",
-			r->in.computer_name));
+		DEBUG(0,("_net_auth2: no challenge sent to client %s\n",
+			remote_machine ));
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	if ( (lp_server_schannel() == true) &&
-	     ((*r->in.negotiate_flags & NETLOGON_NEG_SCHANNEL) == 0) ) {
+	if ( (lp_server_schannel() == True) &&
+	     ((q_u->clnt_flgs.neg_flags & NETLOGON_NEG_SCHANNEL) == 0) ) {
 
 		/* schannel must be used, but client did not offer it. */
-		DEBUG(0,("_netr_ServerAuthenticate2: schannel required but client failed "
+		DEBUG(0,("_net_auth2: schannel required but client failed "
 			"to offer it. Client was %s\n",
-			r->in.account_name));
+			mach_acct ));
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	status = get_md4pw((char *)p->dc->mach_pw,
-			   r->in.account_name,
-			   r->in.secure_channel_type);
+	status = get_md4pw((char *)p->dc->mach_pw, mach_acct, q_u->clnt_id.sec_chan);
 	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0,("_netr_ServerAuthenticate2: failed to get machine password for "
+		DEBUG(0,("_net_auth2: failed to get machine password for "
 			"account %s: %s\n",
-			r->in.account_name, nt_errstr(status) ));
+			mach_acct, nt_errstr(status) ));
 		/* always return NT_STATUS_ACCESS_DENIED */
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
 	/* From the client / server challenges and md4 password, generate sess key */
-	creds_server_init(*r->in.negotiate_flags,
+	creds_server_init(q_u->clnt_flgs.neg_flags,
 			p->dc,
 			&p->dc->clnt_chal,	/* Stored client chal. */
 			&p->dc->srv_chal,	/* Stored server chal. */
 			p->dc->mach_pw,
-			&srv_chal_out);
+			&srv_chal_out);	
 
 	/* Check client credentials are valid. */
-	if (!netlogon_creds_server_check(p->dc, r->in.credentials)) {
-		DEBUG(0,("_netr_ServerAuthenticate2: netlogon_creds_server_check failed. Rejecting auth "
+	if (!creds_server_check(p->dc, &q_u->clnt_chal)) {
+		DEBUG(0,("_net_auth2: creds_server_check failed. Rejecting auth "
 			"request from client %s machine account %s\n",
-			r->in.computer_name,
-			r->in.account_name));
+			remote_machine, mach_acct ));
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	srv_flgs = 0x000001ff;
+	srv_flgs.neg_flags = 0x000001ff;
 
-	if (lp_server_schannel() != false) {
-		srv_flgs |= NETLOGON_NEG_SCHANNEL;
+	if (lp_server_schannel() != False) {
+		srv_flgs.neg_flags |= NETLOGON_NEG_SCHANNEL;
 	}
 
 	/* set up the LSA AUTH 2 response */
-	memcpy(r->out.return_credentials->data, &srv_chal_out.data,
-	       sizeof(r->out.return_credentials->data));
-	*r->out.negotiate_flags = srv_flgs;
+	init_net_r_auth_2(r_u, &srv_chal_out, &srv_flgs, NT_STATUS_OK);
 
-	fstrcpy(p->dc->mach_acct, r->in.account_name);
-	fstrcpy(p->dc->remote_machine, r->in.computer_name);
+	fstrcpy(p->dc->mach_acct, mach_acct);
+	fstrcpy(p->dc->remote_machine, remote_machine);
 	fstrcpy(p->dc->domain, lp_workgroup() );
 
 	p->dc->authenticated = True;
@@ -541,40 +497,39 @@
 	/* Store off the state so we can continue after client disconnect. */
 	become_root();
 	secrets_store_schannel_session_info(p->mem_ctx,
-					    r->in.computer_name,
-					    p->dc);
+					remote_machine,
+					p->dc);
 	unbecome_root();
 
-	return NT_STATUS_OK;
+	return r_u->status;
 }
 
 /*************************************************************************
- _netr_ServerPasswordSet
+ _net_srv_pwset
  *************************************************************************/
 
-NTSTATUS _netr_ServerPasswordSet(pipes_struct *p,
-				 struct netr_ServerPasswordSet *r)
+NTSTATUS _net_srv_pwset(pipes_struct *p, NET_Q_SRV_PWSET *q_u, NET_R_SRV_PWSET *r_u)
 {
-	NTSTATUS status = NT_STATUS_OK;
 	fstring remote_machine;
 	struct samu *sampass=NULL;
-	bool ret = False;
+	BOOL ret = False;
 	unsigned char pwd[16];
 	int i;
 	uint32 acct_ctrl;
-	struct netr_Authenticator cred_out;
+	DOM_CRED cred_out;
 	const uchar *old_pw;
 
-	DEBUG(5,("_netr_ServerPasswordSet: %d\n", __LINE__));
+	DEBUG(5,("_net_srv_pwset: %d\n", __LINE__));
 
 	/* We need the remote machine name for the creds lookup. */
-	fstrcpy(remote_machine, r->in.computer_name);
+	rpcstr_pull(remote_machine,q_u->clnt_id.login.uni_comp_name.buffer,
+		    sizeof(remote_machine),q_u->clnt_id.login.uni_comp_name.uni_str_len*2,0);
 
 	if ( (lp_server_schannel() == True) && (p->auth.auth_type != PIPE_AUTH_TYPE_SCHANNEL) ) {
 		/* 'server schannel = yes' should enforce use of
 		   schannel, the client did offer it in auth2, but
 		   obviously did not use it. */
-		DEBUG(0,("_netr_ServerPasswordSet: client %s not using schannel for netlogon\n",
+		DEBUG(0,("_net_srv_pwset: client %s not using schannel for netlogon\n",
 			remote_machine ));
 		return NT_STATUS_ACCESS_DENIED;
 	}
@@ -595,12 +550,12 @@
 		return NT_STATUS_INVALID_HANDLE;
 	}
 
-	DEBUG(3,("_netr_ServerPasswordSet: Server Password Set by remote machine:[%s] on account [%s]\n",
+	DEBUG(3,("_net_srv_pwset: Server Password Set by remote machine:[%s] on account [%s]\n",
 			remote_machine, p->dc->mach_acct));
-
+	
 	/* Step the creds chain forward. */
-	if (!netlogon_creds_server_step(p->dc, r->in.credential, &cred_out)) {
-		DEBUG(2,("_netr_ServerPasswordSet: netlogon_creds_server_step failed. Rejecting auth "
+	if (!creds_server_step(p->dc, &q_u->clnt_id.cred, &cred_out)) {
+		DEBUG(2,("_net_srv_pwset: creds_server_step failed. Rejecting auth "
 			"request from client %s machine account %s\n",
 			remote_machine, p->dc->mach_acct ));
 		return NT_STATUS_INVALID_PARAMETER;
@@ -625,7 +580,7 @@
 	}
 
 	/* Ensure the account exists and is a machine account. */
-
+	
 	acct_ctrl = pdb_get_acct_ctrl(sampass);
 
 	if (!(acct_ctrl & ACB_WSTRUST ||
@@ -634,16 +589,16 @@
 		TALLOC_FREE(sampass);
 		return NT_STATUS_NO_SUCH_USER;
 	}
-
+	
 	if (pdb_get_acct_ctrl(sampass) & ACB_DISABLED) {
 		TALLOC_FREE(sampass);
 		return NT_STATUS_ACCOUNT_DISABLED;
 	}
 
 	/* Woah - what does this to to the credential chain ? JRA */
-	cred_hash3(pwd, r->in.new_password->hash, p->dc->sess_key, 0);
+	cred_hash3( pwd, q_u->pwd, p->dc->sess_key, 0);
 
-	DEBUG(100,("_netr_ServerPasswordSet: new given value was :\n"));
+	DEBUG(100,("Server password set : new given value was :\n"));
 	for(i = 0; i < sizeof(pwd); i++)
 		DEBUG(100,("%02X ", pwd[i]));
 	DEBUG(100,("\n"));
@@ -651,7 +606,7 @@
 	old_pw = pdb_get_nt_passwd(sampass);
 
 	if (old_pw && memcmp(pwd, old_pw, 16) == 0) {
-		/* Avoid backend modificiations and other fun if the
+		/* Avoid backend modificiations and other fun if the 
 		   client changed the password to the *same thing* */
 
 		ret = True;
@@ -662,44 +617,43 @@
 			TALLOC_FREE(sampass);
 			return NT_STATUS_NO_MEMORY;
 		}
-
+		
 		if (!pdb_set_nt_passwd(sampass, pwd, PDB_CHANGED)) {
 			TALLOC_FREE(sampass);
 			return NT_STATUS_NO_MEMORY;
 		}
-
+		
 		if (!pdb_set_pass_last_set_time(sampass, time(NULL), PDB_CHANGED)) {
 			TALLOC_FREE(sampass);
 			/* Not quite sure what this one qualifies as, but this will do */
-			return NT_STATUS_UNSUCCESSFUL;
+			return NT_STATUS_UNSUCCESSFUL; 
 		}
-
+		
 		become_root();
-		status = pdb_update_sam_account(sampass);
+		r_u->status = pdb_update_sam_account(sampass);
 		unbecome_root();
 	}
 
 	/* set up the LSA Server Password Set response */
+	init_net_r_srv_pwset(r_u, &cred_out, r_u->status);
 
-	memcpy(r->out.return_authenticator, &cred_out,
-	       sizeof(r->out.return_authenticator));
-
 	TALLOC_FREE(sampass);
-	return status;
+	return r_u->status;
 }
 
 /*************************************************************************
- _netr_LogonSamLogoff
+ _net_sam_logoff:
  *************************************************************************/
 
-NTSTATUS _netr_LogonSamLogoff(pipes_struct *p,
-			      struct netr_LogonSamLogoff *r)
+NTSTATUS _net_sam_logoff(pipes_struct *p, NET_Q_SAM_LOGOFF *q_u, NET_R_SAM_LOGOFF *r_u)
 {
+	fstring remote_machine;
+
 	if ( (lp_server_schannel() == True) && (p->auth.auth_type != PIPE_AUTH_TYPE_SCHANNEL) ) {
 		/* 'server schannel = yes' should enforce use of
 		   schannel, the client did offer it in auth2, but
 		   obviously did not use it. */
-		DEBUG(0,("_netr_LogonSamLogoff: client %s not using schannel for netlogon\n",
+		DEBUG(0,("_net_sam_logoff: client %s not using schannel for netlogon\n",
 			get_remote_machine_name() ));
 		return NT_STATUS_ACCESS_DENIED;
 	}
@@ -708,17 +662,18 @@
 	if (!get_valid_user_struct(p->vuid))
 		return NT_STATUS_NO_SUCH_USER;
 
-	/* Using the remote machine name for the creds store: */
-	/* r->in.computer_name */
+	/* Get the remote machine name for the creds store. */
+	rpcstr_pull(remote_machine,q_u->sam_id.client.login.uni_comp_name.buffer,
+		    sizeof(remote_machine),q_u->sam_id.client.login.uni_comp_name.uni_str_len*2,0);
 
 	if (!p->dc) {
 		/* Restore the saved state of the netlogon creds. */
-		bool ret;
+		BOOL ret;
 
 		become_root();
 		ret = secrets_restore_schannel_session_info(p->pipe_state_mem_ctx,
-							    r->in.computer_name,
-							    &p->dc);
+						remote_machine,
+						&p->dc);
 		unbecome_root();
 		if (!ret) {
 			return NT_STATUS_INVALID_HANDLE;
@@ -729,22 +684,25 @@
 		return NT_STATUS_INVALID_HANDLE;
 	}
 
+	r_u->buffer_creds = 1; /* yes, we have valid server credentials */
+
 	/* checks and updates credentials.  creates reply credentials */
-	if (!netlogon_creds_server_step(p->dc, r->in.credential, r->out.return_authenticator)) {
-		DEBUG(2,("_netr_LogonSamLogoff: netlogon_creds_server_step failed. Rejecting auth "
+	if (!creds_server_step(p->dc, &q_u->sam_id.client.cred, &r_u->srv_creds)) {
+		DEBUG(2,("_net_sam_logoff: creds_server_step failed. Rejecting auth "
 			"request from client %s machine account %s\n",
-			r->in.computer_name, p->dc->mach_acct ));
+			remote_machine, p->dc->mach_acct ));
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
 	/* We must store the creds state after an update. */
 	become_root();
 	secrets_store_schannel_session_info(p->pipe_state_mem_ctx,
-					    r->in.computer_name,
-					    p->dc);
+					remote_machine,
+					p->dc);
 	unbecome_root();
 
-	return NT_STATUS_OK;
+	r_u->status = NT_STATUS_OK;
+	return r_u->status;
 }
 
 /*******************************************************************
@@ -755,7 +713,7 @@
 				       const DOM_SID *domain_sid,
 				       size_t num_sids,
 				       const DOM_SID *sids,
-				       int *numgroups, DOM_GID **pgids)
+				       int *numgroups, DOM_GID **pgids) 
 {
 	int i;
 
@@ -778,54 +736,53 @@
 }
 
 /*************************************************************************
- _netr_LogonSamLogon
+ _net_sam_logon
  *************************************************************************/
 
-NTSTATUS _netr_LogonSamLogon(pipes_struct *p,
-			     struct netr_LogonSamLogon *r)
+static NTSTATUS _net_sam_logon_internal(pipes_struct *p,
+					NET_Q_SAM_LOGON *q_u,
+					NET_R_SAM_LOGON *r_u,
+					BOOL process_creds)
 {
 	NTSTATUS status = NT_STATUS_OK;
-	struct netr_SamInfo3 *sam3 = NULL;
-	union netr_LogonInfo *logon = r->in.logon;
+	NET_USER_INFO_3 *usr_info = NULL;
+	NET_ID_INFO_CTR *ctr = q_u->sam_id.ctr;
+	UNISTR2 *uni_samlogon_user = NULL;
+	UNISTR2 *uni_samlogon_domain = NULL;
+	UNISTR2 *uni_samlogon_workstation = NULL;
 	fstring nt_username, nt_domain, nt_workstation;
 	auth_usersupplied_info *user_info = NULL;
 	auth_serversupplied_info *server_info = NULL;
 	struct samu *sampw;
 	struct auth_context *auth_context = NULL;
-	bool process_creds = true;
-
-	switch (p->hdr_req.opnum) {
-		case NDR_NETR_LOGONSAMLOGON:
-			process_creds = true;
-			break;
-		case NDR_NETR_LOGONSAMLOGONEX:
-		default:
-			process_creds = false;
-	}
-
+	 
 	if ( (lp_server_schannel() == True) && (p->auth.auth_type != PIPE_AUTH_TYPE_SCHANNEL) ) {
 		/* 'server schannel = yes' should enforce use of
 		   schannel, the client did offer it in auth2, but
 		   obviously did not use it. */
-		DEBUG(0,("_netr_LogonSamLogon: client %s not using schannel for netlogon\n",
+		DEBUG(0,("_net_sam_logon_internal: client %s not using schannel for netlogon\n",
 			get_remote_machine_name() ));
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	sam3 = TALLOC_ZERO_P(p->mem_ctx, struct netr_SamInfo3);
-	if (!sam3) {
+	usr_info = TALLOC_P(p->mem_ctx, NET_USER_INFO_3);
+	if (!usr_info) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
+	ZERO_STRUCTP(usr_info);
+
  	/* store the user information, if there is any. */
-	r->out.validation->sam3 = sam3;
-	*r->out.authoritative = true; /* authoritative response */
-	if (r->in.validation_level != 2 && r->in.validation_level != 3) {
-		DEBUG(0,("_netr_LogonSamLogon: bad validation_level value %d.\n",
-			(int)r->in.validation_level));
+	r_u->user = usr_info;
+	r_u->auth_resp = 1; /* authoritative response */
+	if (q_u->validation_level != 2 && q_u->validation_level != 3) {
+		DEBUG(0,("_net_sam_logon: bad validation_level value %d.\n", (int)q_u->validation_level ));
 		return NT_STATUS_ACCESS_DENIED;
 	}
-
+	/* We handle the return of USER_INFO_2 instead of 3 in the parse return. Sucks, I know... */
+	r_u->switch_value = q_u->validation_level; /* indicates type of validation user info */
+	r_u->buffer_creds = 1; /* Ensure we always return server creds. */
+ 
 	if (!get_valid_user_struct(p->vuid))
 		return NT_STATUS_NO_SUCH_USER;
 
@@ -836,12 +793,12 @@
 		/* Note this is the remote machine this request is coming from (member server),
 		   not neccessarily the workstation name the user is logging onto.
 		*/
+		rpcstr_pull(remote_machine,q_u->sam_id.client.login.uni_comp_name.buffer,
+		    sizeof(remote_machine),q_u->sam_id.client.login.uni_comp_name.uni_str_len*2,0);
 
-		fstrcpy(remote_machine, r->in.computer_name);
-
 		if (!p->dc) {
 			/* Restore the saved state of the netlogon creds. */
-			bool ret;
+			BOOL ret;
 
 			become_root();
 			ret = secrets_restore_schannel_session_info(p->pipe_state_mem_ctx,
@@ -858,8 +815,8 @@
 		}
 
 		/* checks and updates credentials.  creates reply credentials */
-		if (!netlogon_creds_server_step(p->dc, r->in.credential,  r->out.return_authenticator)) {
-			DEBUG(2,("_netr_LogonSamLogon: creds_server_step failed. Rejecting auth "
+		if (!creds_server_step(p->dc, &q_u->sam_id.client.cred,  &r_u->srv_creds)) {
+			DEBUG(2,("_net_sam_logon: creds_server_step failed. Rejecting auth "
 				"request from client %s machine account %s\n",
 				remote_machine, p->dc->mach_acct ));
 			return NT_STATUS_INVALID_PARAMETER;
@@ -873,25 +830,20 @@
 		unbecome_root();
 	}
 
-	switch (r->in.logon_level) {
+	switch (q_u->sam_id.logon_level) {
 	case INTERACTIVE_LOGON_TYPE:
-		fstrcpy(nt_username,
-			logon->password->identity_info.account_name.string);
-		fstrcpy(nt_domain,
-			logon->password->identity_info.domain_name.string);
-		fstrcpy(nt_workstation,
-			logon->password->identity_info.workstation.string);
+		uni_samlogon_user = &ctr->auth.id1.uni_user_name;
+ 		uni_samlogon_domain = &ctr->auth.id1.uni_domain_name;
 
+                uni_samlogon_workstation = &ctr->auth.id1.uni_wksta_name;
+            
 		DEBUG(3,("SAM Logon (Interactive). Domain:[%s].  ", lp_workgroup()));
 		break;
 	case NET_LOGON_TYPE:
-		fstrcpy(nt_username,
-			logon->network->identity_info.account_name.string);
-		fstrcpy(nt_domain,
-			logon->network->identity_info.domain_name.string);
-		fstrcpy(nt_workstation,
-			logon->network->identity_info.workstation.string);
-
+		uni_samlogon_user = &ctr->auth.id2.uni_user_name;
+		uni_samlogon_domain = &ctr->auth.id2.uni_domain_name;
+		uni_samlogon_workstation = &ctr->auth.id2.uni_wksta_name;
+            
 		DEBUG(3,("SAM Logon (Network). Domain:[%s].  ", lp_workgroup()));
 		break;
 	default:
@@ -899,23 +851,24 @@
 		return NT_STATUS_INVALID_INFO_CLASS;
 	} /* end switch */
 
+	rpcstr_pull(nt_username,uni_samlogon_user->buffer,sizeof(nt_username),uni_samlogon_user->uni_str_len*2,0);
+	rpcstr_pull(nt_domain,uni_samlogon_domain->buffer,sizeof(nt_domain),uni_samlogon_domain->uni_str_len*2,0);
+	rpcstr_pull(nt_workstation,uni_samlogon_workstation->buffer,sizeof(nt_workstation),uni_samlogon_workstation->uni_str_len*2,0);
+
 	DEBUG(3,("User:[%s@%s] Requested Domain:[%s]\n", nt_username, nt_workstation, nt_domain));
 	fstrcpy(current_user_info.smb_name, nt_username);
 	sub_set_smb_name(nt_username);
+     
+	DEBUG(5,("Attempting validation level %d for unmapped username %s.\n", q_u->sam_id.ctr->switch_value, nt_username));
 
-	DEBUG(5,("Attempting validation level %d for unmapped username %s.\n",
-		r->in.validation_level, nt_username));
-
 	status = NT_STATUS_OK;
-
-	switch (r->in.logon_level) {
+	
+	switch (ctr->switch_value) {
 	case NET_LOGON_TYPE:
 	{
 		const char *wksname = nt_workstation;
-
-		status = make_auth_context_fixed(&auth_context,
-						 logon->network->challenge);
-		if (!NT_STATUS_IS_OK(status)) {
+		
+		if (!NT_STATUS_IS_OK(status = make_auth_context_fixed(&auth_context, ctr->auth.id2.lm_chal))) {
 			return status;
 		}
 
@@ -926,16 +879,16 @@
 		if (*wksname == '\\') wksname++;
 
 		/* Standard challenge/response authenticaion */
-		if (!make_user_info_netlogon_network(&user_info,
-						     nt_username, nt_domain,
+		if (!make_user_info_netlogon_network(&user_info, 
+						     nt_username, nt_domain, 
 						     wksname,
-						     logon->network->identity_info.parameter_control,
-						     logon->network->lm.data,
-						     logon->network->lm.length,
-						     logon->network->nt.data,
-						     logon->network->nt.length)) {
+						     ctr->auth.id2.param_ctrl,
+						     ctr->auth.id2.lm_chal_resp.buffer,
+						     ctr->auth.id2.lm_chal_resp.str_str_len,
+						     ctr->auth.id2.nt_chal_resp.buffer,
+						     ctr->auth.id2.nt_chal_resp.str_str_len)) {
 			status = NT_STATUS_NO_MEMORY;
-		}
+		}	
 		break;
 	}
 	case INTERACTIVE_LOGON_TYPE:
@@ -945,20 +898,20 @@
 		   on */
 	{
 		const uint8 *chal;
-
+		
 		if (!NT_STATUS_IS_OK(status = make_auth_context_subsystem(&auth_context))) {
 			return status;
 		}
-
+		
 		chal = auth_context->get_ntlm_challenge(auth_context);
 
-		if (!make_user_info_netlogon_interactive(&user_info,
-							 nt_username, nt_domain,
-							 nt_workstation,
-							 logon->password->identity_info.parameter_control,
+		if (!make_user_info_netlogon_interactive(&user_info, 
+							 nt_username, nt_domain, 
+							 nt_workstation, 
+							 ctr->auth.id1.param_ctrl,
 							 chal,
-							 logon->password->lmpassword.hash,
-							 logon->password->ntpassword.hash,
+							 ctr->auth.id1.lm_owf.data, 
+							 ctr->auth.id1.nt_owf.data, 
 							 p->dc->sess_key)) {
 			status = NT_STATUS_NO_MEMORY;
 		}
@@ -968,29 +921,29 @@
 		DEBUG(2,("SAM Logon: unsupported switch value\n"));
 		return NT_STATUS_INVALID_INFO_CLASS;
 	} /* end switch */
-
+	
 	if ( NT_STATUS_IS_OK(status) ) {
-		status = auth_context->check_ntlm_password(auth_context,
+		status = auth_context->check_ntlm_password(auth_context, 
 			user_info, &server_info);
 	}
 
-	(auth_context->free)(&auth_context);
+	(auth_context->free)(&auth_context);	
 	free_user_info(&user_info);
-
-	DEBUG(5,("_netr_LogonSamLogon: check_password returned status %s\n",
+	
+	DEBUG(5, ("_net_sam_logon: check_password returned status %s\n", 
 		  nt_errstr(status)));
 
 	/* Check account and password */
-
+    
 	if (!NT_STATUS_IS_OK(status)) {
-		/* If we don't know what this domain is, we need to
-		   indicate that we are not authoritative.  This
-		   allows the client to decide if it needs to try
+		/* If we don't know what this domain is, we need to 
+		   indicate that we are not authoritative.  This 
+		   allows the client to decide if it needs to try 
 		   a local user.  Fix by jpjanosi at us.ibm.com, #2976 */
-                if ( NT_STATUS_EQUAL(status, NT_STATUS_NO_SUCH_USER)
+                if ( NT_STATUS_EQUAL(status, NT_STATUS_NO_SUCH_USER) 
 		     && !strequal(nt_domain, get_global_sam_name())
 		     && !is_trusted_domain(nt_domain) )
-			*r->out.authoritative = false; /* We are not authoritative */
+			r_u->auth_resp = 0; /* We are not authoritative */
 
 		TALLOC_FREE(server_info);
 		return status;
@@ -998,7 +951,7 @@
 
 	if (server_info->guest) {
 		/* We don't like guest domain logons... */
-		DEBUG(5,("_netr_LogonSamLogon: Attempted domain logon as GUEST "
+		DEBUG(5,("_net_sam_logon: Attempted domain logon as GUEST "
 			 "denied.\n"));
 		TALLOC_FREE(server_info);
 		return NT_STATUS_LOGON_FAILURE;
@@ -1007,64 +960,56 @@
 	/* This is the point at which, if the login was successful, that
            the SAM Local Security Authority should record that the user is
            logged in to the domain.  */
-
+    
 	{
 		DOM_GID *gids = NULL;
 		const DOM_SID *user_sid = NULL;
 		const DOM_SID *group_sid = NULL;
 		DOM_SID domain_sid;
-		uint32 user_rid, group_rid;
+		uint32 user_rid, group_rid; 
 
 		int num_gids = 0;
-		const char *my_name;
-
-		struct netr_UserSessionKey user_session_key;
-		struct netr_LMSessionKey lm_session_key;
+		pstring my_name;
+		fstring user_sid_string;
+		fstring group_sid_string;
+		unsigned char user_session_key[16];
+		unsigned char lm_session_key[8];
 		unsigned char pipe_session_key[16];
 
-		NTTIME last_logon, last_logoff, acct_expiry, last_password_change;
-		NTTIME allow_password_change, force_password_change;
-		struct samr_RidWithAttributeArray groups;
-		int i;
-		struct dom_sid2 *sid = NULL;
-
-		ZERO_STRUCT(user_session_key);
-		ZERO_STRUCT(lm_session_key);
-
 		sampw = server_info->sam_account;
 
+		/* set up pointer indicating user/password failed to be
+		 * found */
+		usr_info->ptr_user_info = 0;
+
 		user_sid = pdb_get_user_sid(sampw);
 		group_sid = pdb_get_group_sid(sampw);
 
 		if ((user_sid == NULL) || (group_sid == NULL)) {
-			DEBUG(1, ("_netr_LogonSamLogon: User without group or user SID\n"));
+			DEBUG(1, ("_net_sam_logon: User without group or user SID\n"));
 			return NT_STATUS_UNSUCCESSFUL;
 		}
 
 		sid_copy(&domain_sid, user_sid);
 		sid_split_rid(&domain_sid, &user_rid);
 
-		sid = sid_dup_talloc(p->mem_ctx, &domain_sid);
-		if (!sid) {
-			return NT_STATUS_NO_MEMORY;
-		}
-
 		if (!sid_peek_check_rid(&domain_sid, group_sid, &group_rid)) {
-			DEBUG(1, ("_netr_LogonSamLogon: user %s\\%s has user sid "
+			DEBUG(1, ("_net_sam_logon: user %s\\%s has user sid "
 				  "%s\n but group sid %s.\n"
 				  "The conflicting domain portions are not "
-				  "supported for NETLOGON calls\n",
+				  "supported for NETLOGON calls\n", 	    
 				  pdb_get_domain(sampw),
 				  pdb_get_username(sampw),
-				  sid_string_dbg(user_sid),
-				  sid_string_dbg(group_sid)));
+				  sid_to_string(user_sid_string, user_sid),
+				  sid_to_string(group_sid_string, group_sid)));
 			return NT_STATUS_UNSUCCESSFUL;
 		}
-
+		
+		
 		if(server_info->login_server) {
-		        my_name = server_info->login_server;
+		        pstrcpy(my_name, server_info->login_server);
 		} else {
-		        my_name = global_myname();
+		        pstrcpy(my_name, global_myname());
 		}
 
 		status = nt_token_to_group_list(p->mem_ctx, &domain_sid,
@@ -1077,9 +1022,9 @@
 		}
 
 		if (server_info->user_session_key.length) {
-			memcpy(user_session_key.key,
-			       server_info->user_session_key.data,
-			       MIN(sizeof(user_session_key.key),
+			memcpy(user_session_key,
+			       server_info->user_session_key.data, 
+			       MIN(sizeof(user_session_key),
 				   server_info->user_session_key.length));
 			if (process_creds) {
 				/* Get the pipe session key from the creds. */
@@ -1091,13 +1036,13 @@
 				}
 				memcpy(pipe_session_key, p->auth.a_u.schannel_auth->sess_key, 16);
 			}
-			SamOEMhash(user_session_key.key, pipe_session_key, 16);
+			SamOEMhash(user_session_key, pipe_session_key, 16);
 			memset(pipe_session_key, '\0', 16);
 		}
 		if (server_info->lm_session_key.length) {
-			memcpy(lm_session_key.key,
-			       server_info->lm_session_key.data,
-			       MIN(sizeof(lm_session_key.key),
+			memcpy(lm_session_key,
+			       server_info->lm_session_key.data, 
+			       MIN(sizeof(lm_session_key),
 				   server_info->lm_session_key.length));
 			if (process_creds) {
 				/* Get the pipe session key from the creds. */
@@ -1109,56 +1054,36 @@
 				}
 				memcpy(pipe_session_key, p->auth.a_u.schannel_auth->sess_key, 16);
 			}
-			SamOEMhash(lm_session_key.key, pipe_session_key, 8);
+			SamOEMhash(lm_session_key, pipe_session_key, 8);
 			memset(pipe_session_key, '\0', 16);
 		}
-
-		groups.count = num_gids;
-		groups.rids = TALLOC_ARRAY(p->mem_ctx, struct samr_RidWithAttribute,
-					   groups.count);
-		if (!groups.rids) {
-			return NT_STATUS_NO_MEMORY;
-		}
-
-		for (i=0; i < groups.count; i++) {
-			groups.rids[i].rid = gids[i].g_rid;
-			groups.rids[i].attributes = gids[i].attr;
-		}
-
-		unix_to_nt_time(&last_logon, pdb_get_logon_time(sampw));
-		unix_to_nt_time(&last_logoff, get_time_t_max());
-		unix_to_nt_time(&acct_expiry, get_time_t_max());
-		unix_to_nt_time(&last_password_change, pdb_get_pass_last_set_time(sampw));
-		unix_to_nt_time(&allow_password_change, pdb_get_pass_can_change_time(sampw));
-		unix_to_nt_time(&force_password_change, pdb_get_pass_must_change_time(sampw));
-
-		init_netr_SamInfo3(sam3,
-				   last_logon,
-				   last_logoff,
-				   acct_expiry,
-				   last_password_change,
-				   allow_password_change,
-				   force_password_change,
-				   talloc_strdup(p->mem_ctx, pdb_get_username(sampw)),
-				   talloc_strdup(p->mem_ctx, pdb_get_fullname(sampw)),
-				   talloc_strdup(p->mem_ctx, pdb_get_logon_script(sampw)),
-				   talloc_strdup(p->mem_ctx, pdb_get_profile_path(sampw)),
-				   talloc_strdup(p->mem_ctx, pdb_get_homedir(sampw)),
-				   talloc_strdup(p->mem_ctx, pdb_get_dir_drive(sampw)),
-				   0, /* logon_count */
-				   0, /* bad_password_count */
-				   user_rid,
-				   group_rid,
-				   groups,
-				   NETLOGON_EXTRA_SIDS,
-				   user_session_key,
-				   my_name,
-				   talloc_strdup(p->mem_ctx, pdb_get_domain(sampw)),
-				   sid,
-				   lm_session_key,
-				   pdb_get_acct_ctrl(sampw),
-				   0, /* sidcount */
-				   NULL); /* struct netr_SidAttr *sids */
+		
+		init_net_user_info3(p->mem_ctx, usr_info, 
+				    user_rid,
+				    group_rid,   
+				    pdb_get_username(sampw),
+				    pdb_get_fullname(sampw),
+				    pdb_get_homedir(sampw),
+				    pdb_get_dir_drive(sampw),
+				    pdb_get_logon_script(sampw),
+				    pdb_get_profile_path(sampw),
+				    pdb_get_logon_time(sampw),
+				    get_time_t_max(),
+				    get_time_t_max(),
+				    pdb_get_pass_last_set_time(sampw),
+				    pdb_get_pass_can_change_time(sampw),
+				    pdb_get_pass_must_change_time(sampw),
+				    0, /* logon_count */
+				    0, /* bad_pw_count */
+				    num_gids,    /* uint32 num_groups */
+				    gids    , /* DOM_GID *gids */
+				    LOGON_EXTRA_SIDS, /* uint32 user_flgs (?) */
+				    pdb_get_acct_ctrl(sampw),
+				    server_info->user_session_key.length ? user_session_key : NULL,
+				    server_info->lm_session_key.length ? lm_session_key : NULL,
+				    my_name     , /* char *logon_srv */
+				    pdb_get_domain(sampw),
+				    &domain_sid);     /* DOM_SID *dom_sid */  
 		ZERO_STRUCT(user_session_key);
 		ZERO_STRUCT(lm_session_key);
 	}
@@ -1167,15 +1092,26 @@
 }
 
 /*************************************************************************
- _netr_LogonSamLogonEx
- - no credential chaining. Map into net sam logon.
+ _net_sam_logon
  *************************************************************************/
 
-NTSTATUS _netr_LogonSamLogonEx(pipes_struct *p,
-			       struct netr_LogonSamLogonEx *r)
+NTSTATUS _net_sam_logon(pipes_struct *p, NET_Q_SAM_LOGON *q_u, NET_R_SAM_LOGON *r_u)
 {
-	struct netr_LogonSamLogon q;
+	return _net_sam_logon_internal(p, q_u, r_u, True);
+}
+ 
+/*************************************************************************
+ _net_sam_logon_ex - no credential chaining. Map into net sam logon.
+ *************************************************************************/
 
+NTSTATUS _net_sam_logon_ex(pipes_struct *p, NET_Q_SAM_LOGON_EX *q_u, NET_R_SAM_LOGON_EX *r_u)
+{
+	NET_Q_SAM_LOGON q;
+	NET_R_SAM_LOGON r;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
 	/* Only allow this if the pipe is protected. */
 	if (p->auth.auth_type != PIPE_AUTH_TYPE_SCHANNEL) {
 		DEBUG(0,("_net_sam_logon_ex: client %s not using schannel for netlogon\n",
@@ -1183,409 +1119,43 @@
 		return NT_STATUS_INVALID_PARAMETER;
         }
 
-	q.in.server_name 	= r->in.server_name;
-	q.in.computer_name	= r->in.computer_name;
-	q.in.logon_level	= r->in.logon_level;
-	q.in.logon		= r->in.logon;
-	q.in.validation_level	= r->in.validation_level;
-	/* we do not handle the flags */
-	/*			= r->in.flags; */
+	/* Map a NET_Q_SAM_LOGON_EX to NET_Q_SAM_LOGON. */
+	q.validation_level = q_u->validation_level;
 
-	q.out.validation	= r->out.validation;
-	q.out.authoritative	= r->out.authoritative;
-	/* we do not handle the flags */
-	/*			= r->out.flags; */
+ 	/* Map a DOM_SAM_INFO_EX into a DOM_SAM_INFO with no creds. */
+	q.sam_id.client.login = q_u->sam_id.client;
+	q.sam_id.logon_level = q_u->sam_id.logon_level;
+	q.sam_id.ctr = q_u->sam_id.ctr;
 
-	return _netr_LogonSamLogon(p, &q);
+	r_u->status = _net_sam_logon_internal(p, &q, &r, False);
+
+	if (!NT_STATUS_IS_OK(r_u->status)) {
+		return r_u->status;
+	}
+
+	/* Map the NET_R_SAM_LOGON to NET_R_SAM_LOGON_EX. */
+	r_u->switch_value = r.switch_value;
+	r_u->user = r.user;
+	r_u->auth_resp = r.auth_resp;
+	r_u->flags = 0; /* FIXME ! */
+	return r_u->status;
 }
 
 /*************************************************************************
  _ds_enum_dom_trusts
  *************************************************************************/
 #if 0	/* JERRY -- not correct */
- NTSTATUS _ds_enum_dom_trusts(pipes_struct *p, DS_Q_ENUM_DOM_TRUSTS *q_u,
+NTSTATUS _ds_enum_dom_trusts(pipes_struct *p, DS_Q_ENUM_DOM_TRUSTS *q_u,
 			     DS_R_ENUM_DOM_TRUSTS *r_u)
 {
 	NTSTATUS status = NT_STATUS_OK;
 
-	/* TODO: According to MSDN, the can only be executed against a
+	/* TODO: According to MSDN, the can only be executed against a 
 	   DC or domain member running Windows 2000 or later.  Need
-	   to test against a standalone 2k server and see what it
-	   does.  A windows 2000 DC includes its own domain in the
+	   to test against a standalone 2k server and see what it 
+	   does.  A windows 2000 DC includes its own domain in the 
 	   list.  --jerry */
 
 	return status;
 }
 #endif	/* JERRY */
-
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_LogonUasLogon(pipes_struct *p,
-			   struct netr_LogonUasLogon *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_LogonUasLogoff(pipes_struct *p,
-			    struct netr_LogonUasLogoff *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _netr_DatabaseDeltas(pipes_struct *p,
-			      struct netr_DatabaseDeltas *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _netr_DatabaseSync(pipes_struct *p,
-			    struct netr_DatabaseSync *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _netr_AccountDeltas(pipes_struct *p,
-			     struct netr_AccountDeltas *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _netr_AccountSync(pipes_struct *p,
-			   struct netr_AccountSync *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_GetDcName(pipes_struct *p,
-		       struct netr_GetDcName *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_GetAnyDCName(pipes_struct *p,
-			  struct netr_GetAnyDCName *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _netr_DatabaseSync2(pipes_struct *p,
-			     struct netr_DatabaseSync2 *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _netr_DatabaseRedo(pipes_struct *p,
-			    struct netr_DatabaseRedo *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_LogonControl2Ex(pipes_struct *p,
-			     struct netr_LogonControl2Ex *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_DsRGetDCName(pipes_struct *p,
-			  struct netr_DsRGetDCName *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_NETRLOGONDUMMYROUTINE1(pipes_struct *p,
-				    struct netr_NETRLOGONDUMMYROUTINE1 *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_NETRLOGONSETSERVICEBITS(pipes_struct *p,
-				     struct netr_NETRLOGONSETSERVICEBITS *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_LogonGetTrustRid(pipes_struct *p,
-			      struct netr_LogonGetTrustRid *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_NETRLOGONCOMPUTESERVERDIGEST(pipes_struct *p,
-					  struct netr_NETRLOGONCOMPUTESERVERDIGEST *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_NETRLOGONCOMPUTECLIENTDIGEST(pipes_struct *p,
-					  struct netr_NETRLOGONCOMPUTECLIENTDIGEST *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _netr_ServerAuthenticate3(pipes_struct *p,
-				   struct netr_ServerAuthenticate3 *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_DsRGetDCNameEx(pipes_struct *p,
-			    struct netr_DsRGetDCNameEx *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_DsRGetSiteName(pipes_struct *p,
-			    struct netr_DsRGetSiteName *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _netr_LogonGetDomainInfo(pipes_struct *p,
-				  struct netr_LogonGetDomainInfo *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _netr_ServerPasswordSet2(pipes_struct *p,
-				  struct netr_ServerPasswordSet2 *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_ServerPasswordGet(pipes_struct *p,
-			       struct netr_ServerPasswordGet *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_NETRLOGONSENDTOSAM(pipes_struct *p,
-				struct netr_NETRLOGONSENDTOSAM *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_DsRAddressToSitenamesW(pipes_struct *p,
-				    struct netr_DsRAddressToSitenamesW *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_DsRGetDCNameEx2(pipes_struct *p,
-			     struct netr_DsRGetDCNameEx2 *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN(pipes_struct *p,
-						 struct netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_NetrEnumerateTrustedDomainsEx(pipes_struct *p,
-					   struct netr_NetrEnumerateTrustedDomainsEx *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_DsRAddressToSitenamesExW(pipes_struct *p,
-				      struct netr_DsRAddressToSitenamesExW *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_DsrGetDcSiteCoverageW(pipes_struct *p,
-				   struct netr_DsrGetDcSiteCoverageW *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_DsrEnumerateDomainTrusts(pipes_struct *p,
-				      struct netr_DsrEnumerateDomainTrusts *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_DsrDeregisterDNSHostRecords(pipes_struct *p,
-					 struct netr_DsrDeregisterDNSHostRecords *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _netr_ServerTrustPasswordsGet(pipes_struct *p,
-				       struct netr_ServerTrustPasswordsGet *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_DsRGetForestTrustInformation(pipes_struct *p,
-					  struct netr_DsRGetForestTrustInformation *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_GetForestTrustInformation(pipes_struct *p,
-				       struct netr_GetForestTrustInformation *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _netr_LogonSamLogonWithFlags(pipes_struct *p,
-				      struct netr_LogonSamLogonWithFlags *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _netr_NETRSERVERGETTRUSTINFO(pipes_struct *p,
-				    struct netr_NETRSERVERGETTRUSTINFO *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-

Modified: branches/samba/upstream/source/rpc_server/srv_ntsvcs.c
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_ntsvcs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_server/srv_ntsvcs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -25,44 +26,55 @@
 /*******************************************************************
  ********************************************************************/
 
-static bool proxy_ntsvcs_call(pipes_struct *p, uint8_t opnum)
+static BOOL api_ntsvcs_get_version(pipes_struct *p)
 {
-	struct api_struct *fns;
-	int n_fns;
+	NTSVCS_Q_GET_VERSION q_u;
+	NTSVCS_R_GET_VERSION r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
 
-	ntsvcs_get_pipe_fns(&fns, &n_fns);
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
 
-	if (opnum >= n_fns) {
-		return false;
-	}
+	if(!ntsvcs_io_q_get_version("", &q_u, data, 0))
+		return False;
 
-	if (fns[opnum].opnum != opnum) {
-		smb_panic("NTSVCS function table not sorted");
-	}
+	r_u.status = _ntsvcs_get_version(p, &q_u, &r_u);
 
-	return fns[opnum].fn(p);
+	if(!ntsvcs_io_r_get_version("", &r_u, rdata, 0))
+		return False;
+
+	return True;
 }
 
 /*******************************************************************
  ********************************************************************/
 
-static bool api_ntsvcs_get_version(pipes_struct *p)
+static BOOL api_ntsvcs_get_device_list_size(pipes_struct *p)
 {
-	return proxy_ntsvcs_call(p, NDR_PNP_GETVERSION);
-}
+	NTSVCS_Q_GET_DEVICE_LIST_SIZE q_u;
+	NTSVCS_R_GET_DEVICE_LIST_SIZE r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
 
-/*******************************************************************
- ********************************************************************/
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
 
-static bool api_ntsvcs_get_device_list_size(pipes_struct *p)
-{
-	return proxy_ntsvcs_call(p, NDR_PNP_GETDEVICELISTSIZE);
+	if(!ntsvcs_io_q_get_device_list_size("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _ntsvcs_get_device_list_size(p, &q_u, &r_u);
+
+	if(!ntsvcs_io_r_get_device_list_size("", &r_u, rdata, 0))
+		return False;
+
+	return True;
 }
 
 /*******************************************************************
  ********************************************************************/
 
-static bool api_ntsvcs_get_device_list(pipes_struct *p)
+static BOOL api_ntsvcs_get_device_list(pipes_struct *p)
 {
 	NTSVCS_Q_GET_DEVICE_LIST q_u;
 	NTSVCS_R_GET_DEVICE_LIST r_u;
@@ -86,15 +98,31 @@
 /*******************************************************************
  ********************************************************************/
 
-static bool api_ntsvcs_validate_device_instance(pipes_struct *p)
+static BOOL api_ntsvcs_validate_device_instance(pipes_struct *p)
 {
-	return proxy_ntsvcs_call(p, NDR_PNP_VALIDATEDEVICEINSTANCE);
+	NTSVCS_Q_VALIDATE_DEVICE_INSTANCE q_u;
+	NTSVCS_R_VALIDATE_DEVICE_INSTANCE r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!ntsvcs_io_q_validate_device_instance("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _ntsvcs_validate_device_instance(p, &q_u, &r_u);
+
+	if(!ntsvcs_io_r_validate_device_instance("", &r_u, rdata, 0))
+		return False;
+
+	return True;
 }
 
 /*******************************************************************
  ********************************************************************/
 
-static bool api_ntsvcs_get_device_reg_property(pipes_struct *p)
+static BOOL api_ntsvcs_get_device_reg_property(pipes_struct *p)
 {
 	NTSVCS_Q_GET_DEVICE_REG_PROPERTY q_u;
 	NTSVCS_R_GET_DEVICE_REG_PROPERTY r_u;
@@ -118,17 +146,49 @@
 /*******************************************************************
  ********************************************************************/
 
-static bool api_ntsvcs_get_hw_profile_info(pipes_struct *p)
+static BOOL api_ntsvcs_get_hw_profile_info(pipes_struct *p)
 {
-	return proxy_ntsvcs_call(p, NDR_PNP_GETHWPROFINFO);
+	NTSVCS_Q_GET_HW_PROFILE_INFO q_u;
+	NTSVCS_R_GET_HW_PROFILE_INFO r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!ntsvcs_io_q_get_hw_profile_info("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _ntsvcs_get_hw_profile_info(p, &q_u, &r_u);
+
+	if(!ntsvcs_io_r_get_hw_profile_info("", &r_u, rdata, 0))
+		return False;
+
+	return True;
 }
 
 /*******************************************************************
  ********************************************************************/
 
-static bool api_ntsvcs_hw_profile_flags(pipes_struct *p)
+static BOOL api_ntsvcs_hw_profile_flags(pipes_struct *p)
 {
-	return proxy_ntsvcs_call(p, NDR_PNP_HWPROFFLAGS);
+	NTSVCS_Q_HW_PROFILE_FLAGS q_u;
+	NTSVCS_R_HW_PROFILE_FLAGS r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!ntsvcs_io_q_hw_profile_flags("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _ntsvcs_hw_profile_flags(p, &q_u, &r_u);
+
+	if(!ntsvcs_io_r_hw_profile_flags("", &r_u, rdata, 0))
+		return False;
+
+	return True;
 }
 
 /*******************************************************************
@@ -147,13 +207,13 @@
 };
 
 
-void ntsvcs2_get_pipe_fns( struct api_struct **fns, int *n_fns )
+void ntsvcs_get_pipe_fns( struct api_struct **fns, int *n_fns )
 {
 	*fns = api_ntsvcs_cmds;
 	*n_fns = sizeof(api_ntsvcs_cmds) / sizeof(struct api_struct);
 }
 
-NTSTATUS rpc_ntsvcs2_init(void)
+NTSTATUS rpc_ntsvcs_init(void)
 {
   return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "ntsvcs", "ntsvcs", api_ntsvcs_cmds,
 				    sizeof(api_ntsvcs_cmds) / sizeof(struct api_struct));

Modified: branches/samba/upstream/source/rpc_server/srv_ntsvcs_nt.c
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_ntsvcs_nt.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_server/srv_ntsvcs_nt.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,21 +1,22 @@
-/*
+/* 
  *  Unix SMB/CIFS implementation.
  *  RPC Pipe client / server routines
  *
  *  Copyright (C) Gerald (Jerry) Carter             2005.
- *
+ *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
- *
+ *  
  *  This program is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
- *
+ *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -26,42 +27,41 @@
 /********************************************************************
 ********************************************************************/
 
-static char* get_device_path(TALLOC_CTX *mem_ctx, const char *device )
+static char* get_device_path( const char *device )
 {
-	return talloc_asprintf(mem_ctx, "ROOT\\Legacy_%s\\0000", device);
+	static pstring path;
+
+	pstr_sprintf( path, "ROOT\\Legacy_%s\\0000", device );
+
+	return path;
 }
 
 /********************************************************************
 ********************************************************************/
 
-WERROR _PNP_GetVersion(pipes_struct *p,
-		       struct PNP_GetVersion *r)
+WERROR _ntsvcs_get_version( pipes_struct *p, NTSVCS_Q_GET_VERSION *q_u, NTSVCS_R_GET_VERSION *r_u )
 {
-	*r->out.version = 0x0400;      /* no idea what this means */
-
+	r_u->version = 0x00000400;	/* no idea what this means */
+		
 	return WERR_OK;
 }
 
 /********************************************************************
 ********************************************************************/
 
-WERROR _PNP_GetDeviceListSize(pipes_struct *p,
-			      struct PNP_GetDeviceListSize *r)
+WERROR _ntsvcs_get_device_list_size( pipes_struct *p, NTSVCS_Q_GET_DEVICE_LIST_SIZE *q_u, NTSVCS_R_GET_DEVICE_LIST_SIZE *r_u )
 {
-	char *devicepath;
+	fstring device;
+	const char *devicepath;
 
-	if (!r->in.devicename) {
+	if ( !q_u->devicename )
 		return WERR_ACCESS_DENIED;
-	}
 
-	if (!(devicepath = get_device_path(p->mem_ctx, r->in.devicename))) {
-		return WERR_NOMEM;
-	}
+	rpcstr_pull(device, q_u->devicename->buffer, sizeof(device), q_u->devicename->uni_str_len*2, 0);
+	devicepath = get_device_path( device );
 
-	*r->out.size = strlen(devicepath) + 2;
+	r_u->size = strlen(devicepath) + 2;
 
-	TALLOC_FREE(devicepath);
-
 	return WERR_OK;
 }
 
@@ -72,21 +72,17 @@
 WERROR _ntsvcs_get_device_list( pipes_struct *p, NTSVCS_Q_GET_DEVICE_LIST *q_u, NTSVCS_R_GET_DEVICE_LIST *r_u )
 {
 	fstring device;
-	char *devicepath;
+	const char *devicepath;
 
 	if ( !q_u->devicename )
 		return WERR_ACCESS_DENIED;
 
 	rpcstr_pull(device, q_u->devicename->buffer, sizeof(device), q_u->devicename->uni_str_len*2, 0);
+	devicepath = get_device_path( device );
 
-	if (!(devicepath = get_device_path(p->mem_ctx, device))) {
-		return WERR_NOMEM;
-	}
-
 	/* This has to be DOUBLE NULL terminated */
 
 	init_unistr2( &r_u->devicepath, devicepath, UNI_STR_DBLTERMINATE );
-	TALLOC_FREE(devicepath);
 	r_u->needed = r_u->devicepath.uni_str_len;
 
 	return WERR_OK;
@@ -106,24 +102,24 @@
 
 	switch( q_u->property ) {
 	case DEV_REGPROP_DESC:
-		/* just parse the service name from the device path and then
+		/* just parse the service name from the device path and then 
 		   lookup the display name */
 		if ( !(ptr = strrchr_m( devicepath, '\\' )) )
-			return WERR_GENERAL_FAILURE;
+			return WERR_GENERAL_FAILURE;	
 		*ptr = '\0';
-
+		
 		if ( !(ptr = strrchr_m( devicepath, '_' )) )
-			return WERR_GENERAL_FAILURE;
+			return WERR_GENERAL_FAILURE;	
 		ptr++;
-
+		
 		if ( !(values = svcctl_fetch_regvalues( ptr, p->pipe_user.nt_user_token )) )
-			return WERR_GENERAL_FAILURE;
-
+			return WERR_GENERAL_FAILURE;	
+		
 		if ( !(val = regval_ctr_getvalue( values, "DisplayName" )) ) {
 			TALLOC_FREE( values );
 			return WERR_GENERAL_FAILURE;
 		}
-
+		
 		r_u->unknown1 = 0x1;	/* always 1...tested using a remove device manager connection */
 		r_u->size = reg_init_regval_buffer( &r_u->value, val );
 		r_u->needed = r_u->size;
@@ -131,7 +127,7 @@
 		TALLOC_FREE(values);
 
 		break;
-
+		
 	default:
 		r_u->unknown1 = 0x00437c98;
 		return WERR_CM_NO_SUCH_VALUE;
@@ -143,8 +139,7 @@
 /********************************************************************
 ********************************************************************/
 
-WERROR _PNP_ValidateDeviceInstance(pipes_struct *p,
-				   struct PNP_ValidateDeviceInstance *r)
+WERROR _ntsvcs_validate_device_instance( pipes_struct *p, NTSVCS_Q_VALIDATE_DEVICE_INSTANCE *q_u, NTSVCS_R_VALIDATE_DEVICE_INSTANCE *r_u )
 {
 	/* whatever dude */
 	return WERR_OK;
@@ -153,12 +148,12 @@
 /********************************************************************
 ********************************************************************/
 
-WERROR _PNP_GetHwProfInfo(pipes_struct *p,
-			  struct PNP_GetHwProfInfo *r)
+WERROR _ntsvcs_get_hw_profile_info( pipes_struct *p, NTSVCS_Q_GET_HW_PROFILE_INFO *q_u, NTSVCS_R_GET_HW_PROFILE_INFO *r_u )
 {
 	/* steal the incoming buffer */
 
-	r->out.info = r->in.info;
+	r_u->buffer_size = q_u->buffer_size;
+	r_u->buffer = q_u->buffer;
 
 	/* Take the 5th Ammentment */
 
@@ -168,611 +163,10 @@
 /********************************************************************
 ********************************************************************/
 
-WERROR _PNP_HwProfFlags(pipes_struct *p,
-			struct PNP_HwProfFlags *r)
-{
+WERROR _ntsvcs_hw_profile_flags( pipes_struct *p, NTSVCS_Q_HW_PROFILE_FLAGS *q_u, NTSVCS_R_HW_PROFILE_FLAGS *r_u )
+{	
 	/* just nod your head */
-
+	
 	return WERR_OK;
 }
 
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_Disconnect(pipes_struct *p,
-		       struct PNP_Disconnect *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_Connect(pipes_struct *p,
-		    struct PNP_Connect *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_GetGlobalState(pipes_struct *p,
-			   struct PNP_GetGlobalState *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_InitDetection(pipes_struct *p,
-			  struct PNP_InitDetection *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_ReportLogOn(pipes_struct *p,
-			struct PNP_ReportLogOn *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_GetRootDeviceInstance(pipes_struct *p,
-				  struct PNP_GetRootDeviceInstance *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_GetRelatedDeviceInstance(pipes_struct *p,
-				     struct PNP_GetRelatedDeviceInstance *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_EnumerateSubKeys(pipes_struct *p,
-			     struct PNP_EnumerateSubKeys *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_GetDeviceList(pipes_struct *p,
-			  struct PNP_GetDeviceList *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_GetDepth(pipes_struct *p,
-		     struct PNP_GetDepth *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_GetDeviceRegProp(pipes_struct *p,
-			     struct PNP_GetDeviceRegProp *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_SetDeviceRegProp(pipes_struct *p,
-			     struct PNP_SetDeviceRegProp *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_GetClassInstance(pipes_struct *p,
-			     struct PNP_GetClassInstance *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_CreateKey(pipes_struct *p,
-		      struct PNP_CreateKey *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_DeleteRegistryKey(pipes_struct *p,
-			      struct PNP_DeleteRegistryKey *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_GetClassCount(pipes_struct *p,
-			  struct PNP_GetClassCount *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_GetClassName(pipes_struct *p,
-			 struct PNP_GetClassName *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_DeleteClassKey(pipes_struct *p,
-			   struct PNP_DeleteClassKey *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_GetInterfaceDeviceAlias(pipes_struct *p,
-				    struct PNP_GetInterfaceDeviceAlias *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_GetInterfaceDeviceList(pipes_struct *p,
-				   struct PNP_GetInterfaceDeviceList *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_GetInterfaceDeviceListSize(pipes_struct *p,
-				       struct PNP_GetInterfaceDeviceListSize *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_RegisterDeviceClassAssociation(pipes_struct *p,
-					   struct PNP_RegisterDeviceClassAssociation *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_UnregisterDeviceClassAssociation(pipes_struct *p,
-					     struct PNP_UnregisterDeviceClassAssociation *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_GetClassRegProp(pipes_struct *p,
-			    struct PNP_GetClassRegProp *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_SetClassRegProp(pipes_struct *p,
-			    struct PNP_SetClassRegProp *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_CreateDevInst(pipes_struct *p,
-			  struct PNP_CreateDevInst *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_DeviceInstanceAction(pipes_struct *p,
-				 struct PNP_DeviceInstanceAction *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_GetDeviceStatus(pipes_struct *p,
-			    struct PNP_GetDeviceStatus *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_SetDeviceProblem(pipes_struct *p,
-			     struct PNP_SetDeviceProblem *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_DisableDevInst(pipes_struct *p,
-			   struct PNP_DisableDevInst *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_UninstallDevInst(pipes_struct *p,
-			     struct PNP_UninstallDevInst *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_AddID(pipes_struct *p,
-		  struct PNP_AddID *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_RegisterDriver(pipes_struct *p,
-			   struct PNP_RegisterDriver *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_QueryRemove(pipes_struct *p,
-			struct PNP_QueryRemove *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_RequestDeviceEject(pipes_struct *p,
-			       struct PNP_RequestDeviceEject *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_IsDockStationPresent(pipes_struct *p,
-				 struct PNP_IsDockStationPresent *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_RequestEjectPC(pipes_struct *p,
-			   struct PNP_RequestEjectPC *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_AddEmptyLogConf(pipes_struct *p,
-			    struct PNP_AddEmptyLogConf *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_FreeLogConf(pipes_struct *p,
-			struct PNP_FreeLogConf *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_GetFirstLogConf(pipes_struct *p,
-			    struct PNP_GetFirstLogConf *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_GetNextLogConf(pipes_struct *p,
-			   struct PNP_GetNextLogConf *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_GetLogConfPriority(pipes_struct *p,
-			       struct PNP_GetLogConfPriority *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_AddResDes(pipes_struct *p,
-		      struct PNP_AddResDes *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_FreeResDes(pipes_struct *p,
-		       struct PNP_FreeResDes *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_GetNextResDes(pipes_struct *p,
-			  struct PNP_GetNextResDes *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_GetResDesData(pipes_struct *p,
-			  struct PNP_GetResDesData *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_GetResDesDataSize(pipes_struct *p,
-			      struct PNP_GetResDesDataSize *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_ModifyResDes(pipes_struct *p,
-			 struct PNP_ModifyResDes *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_DetectResourceLimit(pipes_struct *p,
-				struct PNP_DetectResourceLimit *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_QueryResConfList(pipes_struct *p,
-			     struct PNP_QueryResConfList *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_SetHwProf(pipes_struct *p,
-		      struct PNP_SetHwProf *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_QueryArbitratorFreeData(pipes_struct *p,
-				    struct PNP_QueryArbitratorFreeData *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_QueryArbitratorFreeSize(pipes_struct *p,
-				    struct PNP_QueryArbitratorFreeSize *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_RunDetection(pipes_struct *p,
-			 struct PNP_RunDetection *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_RegisterNotification(pipes_struct *p,
-				 struct PNP_RegisterNotification *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_UnregisterNotification(pipes_struct *p,
-				   struct PNP_UnregisterNotification *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_GetCustomDevProp(pipes_struct *p,
-			     struct PNP_GetCustomDevProp *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_GetVersionInternal(pipes_struct *p,
-			       struct PNP_GetVersionInternal *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_GetBlockedDriverInfo(pipes_struct *p,
-				 struct PNP_GetBlockedDriverInfo *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-WERROR _PNP_GetServerSideDeviceInstallFlags(pipes_struct *p,
-					    struct PNP_GetServerSideDeviceInstallFlags *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-

Modified: branches/samba/upstream/source/rpc_server/srv_pipe.c
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_pipe.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_server/srv_pipe.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 /*  this module apparently provides an implementation of DCE/RPC over a
@@ -45,17 +46,12 @@
 	auth->a_u.auth_ntlmssp_state = NULL;
 }
 
-static DATA_BLOB generic_session_key(void)
-{
-	return data_blob("SystemLibraryDTC", 16);
-}
-
 /*******************************************************************
  Generate the next PDU to be returned from the data in p->rdata. 
  Handle NTLMSSP.
  ********************************************************************/
 
-static bool create_next_pdu_ntlmssp(pipes_struct *p)
+static BOOL create_next_pdu_ntlmssp(pipes_struct *p)
 {
 	RPC_HDR_RESP hdr_resp;
 	uint32 ss_padding_len = 0;
@@ -151,7 +147,7 @@
 	 * data.
 	 */
 
-	prs_init_empty( &outgoing_pdu, p->mem_ctx, MARSHALL);
+	prs_init( &outgoing_pdu, 0, p->mem_ctx, MARSHALL);
 	prs_give_memory( &outgoing_pdu, (char *)p->out_data.current_pdu, sizeof(p->out_data.current_pdu), False);
 
 	/* Store the header in the data stream. */
@@ -272,7 +268,7 @@
  Return an schannel authenticated fragment.
  ********************************************************************/
 
-static bool create_next_pdu_schannel(pipes_struct *p)
+static BOOL create_next_pdu_schannel(pipes_struct *p)
 {
 	RPC_HDR_RESP hdr_resp;
 	uint32 ss_padding_len = 0;
@@ -358,7 +354,7 @@
 	 * data.
 	 */
 
-	prs_init_empty( &outgoing_pdu, p->mem_ctx, MARSHALL);
+	prs_init( &outgoing_pdu, 0, p->mem_ctx, MARSHALL);
 	prs_give_memory( &outgoing_pdu, (char *)p->out_data.current_pdu, sizeof(p->out_data.current_pdu), False);
 
 	/* Store the header in the data stream. */
@@ -450,7 +446,7 @@
  No authentication done.
 ********************************************************************/
 
-static bool create_next_pdu_noauth(pipes_struct *p)
+static BOOL create_next_pdu_noauth(pipes_struct *p)
 {
 	RPC_HDR_RESP hdr_resp;
 	uint32 data_len;
@@ -531,7 +527,7 @@
 	 * data.
 	 */
 
-	prs_init_empty( &outgoing_pdu, p->mem_ctx, MARSHALL);
+	prs_init( &outgoing_pdu, 0, p->mem_ctx, MARSHALL);
 	prs_give_memory( &outgoing_pdu, (char *)p->out_data.current_pdu, sizeof(p->out_data.current_pdu), False);
 
 	/* Store the header in the data stream. */
@@ -571,7 +567,7 @@
  Generate the next PDU to be returned from the data in p->rdata. 
 ********************************************************************/
 
-bool create_next_pdu(pipes_struct *p)
+BOOL create_next_pdu(pipes_struct *p)
 {
 	switch(p->auth.auth_level) {
 		case PIPE_AUTH_LEVEL_NONE:
@@ -604,7 +600,7 @@
  the pipe struct.
 *******************************************************************/
 
-static bool pipe_ntlmssp_verify_final(pipes_struct *p, DATA_BLOB *p_resp_blob)
+static BOOL pipe_ntlmssp_verify_final(pipes_struct *p, DATA_BLOB *p_resp_blob)
 {
 	DATA_BLOB reply;
 	NTSTATUS status;
@@ -673,20 +669,18 @@
 	p->pipe_user.ut.gid = a->server_info->gid;
 	
 	/*
-	 * We're an authenticated bind over smbd, so the session key needs to
-	 * be set to "SystemLibraryDTC". Weird, but this is what Windows
-	 * does. See the RPC-SAMBA3SESSIONKEY.
+	 * Copy the session key from the ntlmssp state.
 	 */
 
 	data_blob_free(&p->session_key);
-	p->session_key = generic_session_key();
+	p->session_key = data_blob(a->ntlmssp_state->session_key.data, a->ntlmssp_state->session_key.length);
 	if (!p->session_key.data) {
 		return False;
 	}
 
 	p->pipe_user.ut.ngroups = a->server_info->n_groups;
 	if (p->pipe_user.ut.ngroups) {
-		if (!(p->pipe_user.ut.groups = (gid_t *)memdup(a->server_info->groups,
+		if (!(p->pipe_user.ut.groups = memdup(a->server_info->groups,
 						sizeof(gid_t) * p->pipe_user.ut.ngroups))) {
 			DEBUG(0,("failed to memdup group list to p->pipe_user.groups\n"));
 			return False;
@@ -714,7 +708,7 @@
 		const char *clnt;
 		const char *srv;
 	} pipe;
-	const struct api_struct *cmds;
+	struct api_struct *cmds;
 	int n_cmds;
 };
 
@@ -725,7 +719,7 @@
  This is the "stage3" NTLMSSP response after a bind request and reply.
 *******************************************************************/
 
-bool api_pipe_bind_auth3(pipes_struct *p, prs_struct *rpc_in_p)
+BOOL api_pipe_bind_auth3(pipes_struct *p, prs_struct *rpc_in_p)
 {
 	RPC_HDR_AUTH auth_info;
 	uint32 pad;
@@ -797,7 +791,7 @@
  Marshall a bind_nak pdu.
 *******************************************************************/
 
-static bool setup_bind_nak(pipes_struct *p)
+static BOOL setup_bind_nak(pipes_struct *p)
 {
 	prs_struct outgoing_rpc;
 	RPC_HDR nak_hdr;
@@ -812,7 +806,7 @@
 	 * header and are never sending more than one PDU here.
 	 */
 
-	prs_init_empty( &outgoing_rpc, p->mem_ctx, MARSHALL);
+	prs_init( &outgoing_rpc, 0, p->mem_ctx, MARSHALL);
 	prs_give_memory( &outgoing_rpc, (char *)p->out_data.current_pdu, sizeof(p->out_data.current_pdu), False);
 
 	/*
@@ -859,7 +853,7 @@
  Marshall a fault pdu.
 *******************************************************************/
 
-bool setup_fault_pdu(pipes_struct *p, NTSTATUS status)
+BOOL setup_fault_pdu(pipes_struct *p, NTSTATUS status)
 {
 	prs_struct outgoing_pdu;
 	RPC_HDR fault_hdr;
@@ -875,7 +869,7 @@
 	 * header and are never sending more than one PDU here.
 	 */
 
-	prs_init_empty( &outgoing_pdu, p->mem_ctx, MARSHALL);
+	prs_init( &outgoing_pdu, 0, p->mem_ctx, MARSHALL);
 	prs_give_memory( &outgoing_pdu, (char *)p->out_data.current_pdu, sizeof(p->out_data.current_pdu), False);
 
 	/*
@@ -930,7 +924,7 @@
  We should probably check the auth-verifier here.
 *******************************************************************/
 
-bool setup_cancel_ack_reply(pipes_struct *p, prs_struct *rpc_in_p)
+BOOL setup_cancel_ack_reply(pipes_struct *p, prs_struct *rpc_in_p)
 {
 	prs_struct outgoing_pdu;
 	RPC_HDR ack_reply_hdr;
@@ -944,7 +938,7 @@
 	 * header and are never sending more than one PDU here.
 	 */
 
-	prs_init_empty( &outgoing_pdu, p->mem_ctx, MARSHALL);
+	prs_init( &outgoing_pdu, 0, p->mem_ctx, MARSHALL);
 	prs_give_memory( &outgoing_pdu, (char *)p->out_data.current_pdu, sizeof(p->out_data.current_pdu), False);
 
 	/*
@@ -978,7 +972,7 @@
  Used to reject unknown binds from Win2k.
 *******************************************************************/
 
-bool check_bind_req(struct pipes_struct *p, RPC_IFACE* abstract,
+BOOL check_bind_req(struct pipes_struct *p, RPC_IFACE* abstract,
                     RPC_IFACE* transfer, uint32 context_id)
 {
 	char *pipe_name = p->name;
@@ -993,7 +987,7 @@
 	/* we have to check all now since win2k introduced a new UUID on the lsaprpc pipe */
 		
 	for ( i=0; pipe_names[i].client_pipe; i++ ) {
-		DEBUGADD(10,("checking %s\n", pipe_names[i].client_pipe));
+		DEBUG(10,("checking %s\n", pipe_names[i].client_pipe));
 		if ( strequal(pipe_names[i].client_pipe, pname)
 			&& (abstract->version == pipe_names[i].abstr_syntax.version) 
 			&& (memcmp(&abstract->uuid, &pipe_names[i].abstr_syntax.uuid, sizeof(struct GUID)) == 0)
@@ -1075,8 +1069,12 @@
         ZERO_STRUCTP(rpc_entry);
         rpc_entry->pipe.clnt = SMB_STRDUP(clnt);
         rpc_entry->pipe.srv = SMB_STRDUP(srv);
-        rpc_entry->cmds = cmds;
-        rpc_entry->n_cmds = size;
+        rpc_entry->cmds = SMB_REALLOC_ARRAY(rpc_entry->cmds, struct api_struct, rpc_entry->n_cmds + size);
+	if (!rpc_entry->cmds) {
+		return NT_STATUS_NO_MEMORY;
+	}
+        memcpy(rpc_entry->cmds + rpc_entry->n_cmds, cmds, size * sizeof(struct api_struct));
+        rpc_entry->n_cmds += size;
         
         return NT_STATUS_OK;
 }
@@ -1085,7 +1083,7 @@
  Handle a SPNEGO krb5 bind auth.
 *******************************************************************/
 
-static bool pipe_spnego_auth_bind_kerberos(pipes_struct *p, prs_struct *rpc_in_p, RPC_HDR_AUTH *pauth_info,
+static BOOL pipe_spnego_auth_bind_kerberos(pipes_struct *p, prs_struct *rpc_in_p, RPC_HDR_AUTH *pauth_info,
 		DATA_BLOB *psecblob, prs_struct *pout_auth)
 {
 	return False;
@@ -1095,7 +1093,7 @@
  Handle the first part of a SPNEGO bind auth.
 *******************************************************************/
 
-static bool pipe_spnego_auth_bind_negotiate(pipes_struct *p, prs_struct *rpc_in_p,
+static BOOL pipe_spnego_auth_bind_negotiate(pipes_struct *p, prs_struct *rpc_in_p,
 					RPC_HDR_AUTH *pauth_info, prs_struct *pout_auth)
 {
 	DATA_BLOB blob;
@@ -1105,7 +1103,7 @@
 	char *OIDs[ASN1_MAX_OIDS];
         int i;
 	NTSTATUS status;
-        bool got_kerberos_mechanism = false;
+        BOOL got_kerberos_mechanism = False;
 	AUTH_NTLMSSP_STATE *a = NULL;
 	RPC_HDR_AUTH auth_info;
 
@@ -1133,7 +1131,7 @@
         }
 
 	if (strcmp(OID_KERBEROS5, OIDs[0]) == 0 || strcmp(OID_KERBEROS5_OLD, OIDs[0]) == 0) {
-		got_kerberos_mechanism = true;
+		got_kerberos_mechanism = True;
 	}
 
 	for (i=0;OIDs[i];i++) {
@@ -1143,7 +1141,7 @@
 	DEBUG(3,("pipe_spnego_auth_bind_negotiate: Got secblob of size %lu\n", (unsigned long)secblob.length));
 
 	if ( got_kerberos_mechanism && ((lp_security()==SEC_ADS) || lp_use_kerberos_keytab()) ) {
-		bool ret = pipe_spnego_auth_bind_kerberos(p, rpc_in_p, pauth_info, &secblob, pout_auth);
+		BOOL ret = pipe_spnego_auth_bind_kerberos(p, rpc_in_p, pauth_info, &secblob, pout_auth);
 		data_blob_free(&secblob);
 		data_blob_free(&blob);
 		return ret;
@@ -1154,39 +1152,28 @@
 		free_pipe_ntlmssp_auth_data(&p->auth);
 	}
 
-	if (!got_kerberos_mechanism) {
-		/* Initialize the NTLM engine. */
-		status = auth_ntlmssp_start(&a);
-		if (!NT_STATUS_IS_OK(status)) {
-			goto err;
-		}
+	/* Initialize the NTLM engine. */
+	status = auth_ntlmssp_start(&a);
+	if (!NT_STATUS_IS_OK(status)) {
+		goto err;
+	}
 
-		/*
-		 * Pass the first security blob of data to it.
-		 * This can return an error or NT_STATUS_MORE_PROCESSING_REQUIRED
-		 * which means we need another packet to complete the bind.
-		 */
+	/*
+	 * Pass the first security blob of data to it.
+	 * This can return an error or NT_STATUS_MORE_PROCESSING_REQUIRED
+	 * which means we need another packet to complete the bind.
+	 */
 
-		status = auth_ntlmssp_update(a, secblob, &chal);
+        status = auth_ntlmssp_update(a, secblob, &chal);
 
-		if (!NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
-			DEBUG(3,("pipe_spnego_auth_bind_negotiate: auth_ntlmssp_update failed.\n"));
-			goto err;
-		}
-
-		/* Generate the response blob we need for step 2 of the bind. */
-		response = spnego_gen_auth_response(&chal, status, OID_NTLMSSP);
-	} else {
-		/*
-		 * SPNEGO negotiate down to NTLMSSP. The subsequent
-		 * code to process follow-up packets is not complete
-		 * yet. JRA.
-		 */
-		response = spnego_gen_auth_response(NULL,
-					NT_STATUS_MORE_PROCESSING_REQUIRED,
-					OID_NTLMSSP);
+	if (!NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
+		DEBUG(3,("pipe_spnego_auth_bind_negotiate: auth_ntlmssp_update failed.\n"));
+		goto err;
 	}
 
+	/* Generate the response blob we need for step 2 of the bind. */
+	response = spnego_gen_auth_response(&chal, status, OID_NTLMSSP);
+
 	/* Copy the blob into the pout_auth parse struct */
 	init_rpc_hdr_auth(&auth_info, RPC_SPNEGO_AUTH_TYPE, pauth_info->auth_level, RPC_HDR_AUTH_LEN, 1);
 	if(!smb_io_rpc_hdr_auth("", &auth_info, pout_auth, 0)) {
@@ -1227,7 +1214,7 @@
  Handle the second part of a SPNEGO bind auth.
 *******************************************************************/
 
-static bool pipe_spnego_auth_bind_continue(pipes_struct *p, prs_struct *rpc_in_p,
+static BOOL pipe_spnego_auth_bind_continue(pipes_struct *p, prs_struct *rpc_in_p,
 					RPC_HDR_AUTH *pauth_info, prs_struct *pout_auth)
 {
 	RPC_HDR_AUTH auth_info;
@@ -1242,10 +1229,6 @@
 	ZERO_STRUCT(auth_reply);
 	ZERO_STRUCT(response);
 
-	/*
-	 * NB. If we've negotiated down from krb5 to NTLMSSP we'll currently
-	 * fail here as 'a' == NULL.
-	 */
 	if (p->auth.auth_type != PIPE_AUTH_TYPE_SPNEGO_NTLMSSP || !a) {
 		DEBUG(0,("pipe_spnego_auth_bind_continue: not in NTLMSSP auth state.\n"));
 		goto err;
@@ -1274,7 +1257,7 @@
 	 * The following call actually checks the challenge/response data.
 	 * for correctness against the given DOMAIN\user name.
 	 */
-
+	
 	if (!pipe_ntlmssp_verify_final(p, &auth_blob)) {
 		goto err;
 	}
@@ -1321,13 +1304,13 @@
  Handle an schannel bind auth.
 *******************************************************************/
 
-static bool pipe_schannel_auth_bind(pipes_struct *p, prs_struct *rpc_in_p,
+static BOOL pipe_schannel_auth_bind(pipes_struct *p, prs_struct *rpc_in_p,
 					RPC_HDR_AUTH *pauth_info, prs_struct *pout_auth)
 {
 	RPC_HDR_AUTH auth_info;
 	RPC_AUTH_SCHANNEL_NEG neg;
 	RPC_AUTH_VERIFIER auth_verifier;
-	bool ret;
+	BOOL ret;
 	struct dcinfo *pdcinfo;
 	uint32 flags;
 
@@ -1369,21 +1352,8 @@
 	 * JRA. Should we also copy the schannel session key into the pipe session key p->session_key
 	 * here ? We do that for NTLMSSP, but the session key is already set up from the vuser
 	 * struct of the person who opened the pipe. I need to test this further. JRA.
-	 *
-	 * VL. As we are mapping this to guest set the generic key
-	 * "SystemLibraryDTC" key here. It's a bit difficult to test against
-	 * W2k3, as it does not allow schannel binds against SAMR and LSA
-	 * anymore.
 	 */
 
-	data_blob_free(&p->session_key);
-	p->session_key = generic_session_key();
-	if (p->session_key.data == NULL) {
-		DEBUG(0, ("pipe_schannel_auth_bind: Could not alloc session"
-			  " key\n"));
-		return False;
-	}
-
 	init_rpc_hdr_auth(&auth_info, RPC_SCHANNEL_AUTH_TYPE, pauth_info->auth_level, RPC_HDR_AUTH_LEN, 1);
 	if(!smb_io_rpc_hdr_auth("", &auth_info, pout_auth, 0)) {
 		DEBUG(0,("pipe_schannel_auth_bind: marshalling of RPC_HDR_AUTH failed.\n"));
@@ -1421,7 +1391,7 @@
  Handle an NTLMSSP bind auth.
 *******************************************************************/
 
-static bool pipe_ntlmssp_auth_bind(pipes_struct *p, prs_struct *rpc_in_p,
+static BOOL pipe_ntlmssp_auth_bind(pipes_struct *p, prs_struct *rpc_in_p,
 					RPC_HDR_AUTH *pauth_info, prs_struct *pout_auth)
 {
 	RPC_HDR_AUTH auth_info;
@@ -1502,7 +1472,7 @@
  Respond to a pipe bind request.
 *******************************************************************/
 
-bool api_pipe_bind_req(pipes_struct *p, prs_struct *rpc_in_p)
+BOOL api_pipe_bind_req(pipes_struct *p, prs_struct *rpc_in_p)
 {
 	RPC_HDR_BA hdr_ba;
 	RPC_HDR_RB hdr_rb;
@@ -1522,7 +1492,7 @@
 		return setup_bind_nak(p);
 	}
 
-	prs_init_empty( &outgoing_rpc, p->mem_ctx, MARSHALL);
+	prs_init( &outgoing_rpc, 0, p->mem_ctx, MARSHALL);
 
 	/* 
 	 * Marshall directly into the outgoing PDU space. We
@@ -1593,8 +1563,6 @@
 		}
 	}
 
-	ZERO_STRUCT(hdr_rb);
-
 	/* decode the bind request */
 	if(!smb_io_rpc_hdr_rb("", &hdr_rb, rpc_in_p, 0))  {
 		DEBUG(0,("api_pipe_bind_req: unable to unmarshall RPC_HDR_RB struct.\n"));
@@ -1664,18 +1632,11 @@
 
 		case RPC_ANONYMOUS_AUTH_TYPE:
 			/* Unauthenticated bind request. */
-			/* Get the authenticated pipe user from current_user */
-			if (!copy_current_user(&p->pipe_user, &current_user)) {
-				DEBUG(10, ("Could not copy current user\n"));
-				goto err_exit;
-			}
 			/* We're finished - no more packets. */
 			p->auth.auth_type = PIPE_AUTH_TYPE_NONE;
 			/* We must set the pipe auth_level here also. */
 			p->auth.auth_level = PIPE_AUTH_LEVEL_NONE;
 			p->pipe_bound = True;
-			/* The session key was initialized from the SMB
-			 * session in make_internal_rpc_pipe_p */
 			break;
 
 		default:
@@ -1784,7 +1745,7 @@
  SPNEGO calls.
 ****************************************************************************/
 
-bool api_pipe_alter_context(pipes_struct *p, prs_struct *rpc_in_p)
+BOOL api_pipe_alter_context(pipes_struct *p, prs_struct *rpc_in_p)
 {
 	RPC_HDR_BA hdr_ba;
 	RPC_HDR_RB hdr_rb;
@@ -1796,7 +1757,7 @@
 	prs_struct outgoing_rpc;
 	int auth_len = 0;
 
-	prs_init_empty( &outgoing_rpc, p->mem_ctx, MARSHALL);
+	prs_init( &outgoing_rpc, 0, p->mem_ctx, MARSHALL);
 
 	/* 
 	 * Marshall directly into the outgoing PDU space. We
@@ -1975,7 +1936,7 @@
  Deal with NTLMSSP sign & seal processing on an RPC request.
 ****************************************************************************/
 
-bool api_pipe_ntlmssp_auth_process(pipes_struct *p, prs_struct *rpc_in,
+BOOL api_pipe_ntlmssp_auth_process(pipes_struct *p, prs_struct *rpc_in,
 					uint32 *p_ss_padding_len, NTSTATUS *pstatus)
 {
 	RPC_HDR_AUTH auth_info;
@@ -2091,7 +2052,7 @@
  Deal with schannel processing on an RPC request.
 ****************************************************************************/
 
-bool api_pipe_schannel_process(pipes_struct *p, prs_struct *rpc_in, uint32 *p_ss_padding_len)
+BOOL api_pipe_schannel_process(pipes_struct *p, prs_struct *rpc_in, uint32 *p_ss_padding_len)
 {
 	uint32 data_len;
 	uint32 auth_len;
@@ -2243,10 +2204,10 @@
  before doing the call.
 ****************************************************************************/
 
-bool api_pipe_request(pipes_struct *p)
+BOOL api_pipe_request(pipes_struct *p)
 {
-	bool ret = False;
-	bool changed_user = False;
+	BOOL ret = False;
+	BOOL changed_user = False;
 	PIPE_RPC_FNS *pipe_fns;
 	
 	if (p->pipe_bound &&
@@ -2266,9 +2227,9 @@
 	pipe_fns = find_pipe_fns_by_context(p->contexts, p->hdr_req.context_id);
 	
 	if ( pipe_fns ) {
-		TALLOC_CTX *frame = talloc_stackframe();
+		set_current_rpc_talloc(p->mem_ctx);
 		ret = api_rpcTNP(p, p->name, pipe_fns->cmds, pipe_fns->n_cmds);
-		TALLOC_FREE(frame);
+		set_current_rpc_talloc(NULL);	
 	}
 	else {
 		DEBUG(0,("api_pipe_request: No rpc function table associated with context [%d] on pipe [%s]\n",
@@ -2286,7 +2247,7 @@
  Calls the underlying RPC function for a named pipe.
  ********************************************************************/
 
-bool api_rpcTNP(pipes_struct *p, const char *rpc_name, 
+BOOL api_rpcTNP(pipes_struct *p, const char *rpc_name, 
 		const struct api_struct *api_rpc_cmds, int n_cmds)
 {
 	int fn_num;
@@ -2335,13 +2296,6 @@
 		return True;
 	}
 
-	if (p->rng_fault_state) {
-		DEBUG(4, ("api_rpcTNP: rng fault return\n"));
-		p->rng_fault_state = False;
-		setup_fault_pdu(p, NT_STATUS(DCERPC_FAULT_OP_RNG_ERROR));
-		return True;
-	}
-
 	slprintf(name, sizeof(name)-1, "out_%s", rpc_name);
 	offset2 = prs_offset(&p->out_data.rdata);
 	prs_set_offset(&p->out_data.rdata, offset1);
@@ -2355,7 +2309,7 @@
 	if ((DEBUGLEVEL >= 10) && 
 	    (prs_offset(&p->in_data.data) != prs_data_size(&p->in_data.data))) {
 		size_t data_len = prs_data_size(&p->in_data.data) - prs_offset(&p->in_data.data);
-		char *data = (char *)SMB_MALLOC(data_len);
+		char *data = SMB_MALLOC(data_len);
 
 		DEBUG(10, ("api_rpcTNP: rpc input buffer underflow (parse error?)\n"));
 		if (data) {
@@ -2378,16 +2332,16 @@
 
 	switch ( idx ) {
 		case PI_LSARPC:
-			lsarpc_get_pipe_fns( &cmds, &n_cmds );
+			lsa_get_pipe_fns( &cmds, &n_cmds );
 			break;
-		case PI_DSSETUP:
-			dssetup_get_pipe_fns( &cmds, &n_cmds );
+		case PI_LSARPC_DS:
+			lsa_ds_get_pipe_fns( &cmds, &n_cmds );
 			break;
 		case PI_SAMR:
 			samr_get_pipe_fns( &cmds, &n_cmds );
 			break;
 		case PI_NETLOGON:
-			netlogon_get_pipe_fns( &cmds, &n_cmds );
+			netlog_get_pipe_fns( &cmds, &n_cmds );
 			break;
 		case PI_SRVSVC:
 			srvsvc_get_pipe_fns( &cmds, &n_cmds );
@@ -2396,7 +2350,7 @@
 			wkssvc_get_pipe_fns( &cmds, &n_cmds );
 			break;
 		case PI_WINREG:
-			winreg_get_pipe_fns( &cmds, &n_cmds );
+			reg_get_pipe_fns( &cmds, &n_cmds );
 			break;
 		case PI_SPOOLSS:
 			spoolss_get_pipe_fns( &cmds, &n_cmds );
@@ -2405,17 +2359,17 @@
 			netdfs_get_pipe_fns( &cmds, &n_cmds );
 			break;
 		case PI_SVCCTL:
-			svcctl2_get_pipe_fns( &cmds, &n_cmds );
+			svcctl_get_pipe_fns( &cmds, &n_cmds );
 			break;
 	        case PI_EVENTLOG:
-			eventlog2_get_pipe_fns( &cmds, &n_cmds );
+			eventlog_get_pipe_fns( &cmds, &n_cmds );
 			break;
 		case PI_NTSVCS:
-			ntsvcs2_get_pipe_fns( &cmds, &n_cmds );
+			ntsvcs_get_pipe_fns( &cmds, &n_cmds );
 			break;
 #ifdef DEVELOPER
-		case PI_RPCECHO:
-			rpcecho_get_pipe_fns( &cmds, &n_cmds );
+		case PI_ECHO:
+			echo_get_pipe_fns( &cmds, &n_cmds );
 			break;
 #endif
 		default:

Modified: branches/samba/upstream/source/rpc_server/srv_pipe_hnd.c
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_pipe_hnd.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_server/srv_pipe_hnd.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -62,13 +63,27 @@
  */
 
 static ssize_t read_from_internal_pipe(void *np_conn, char *data, size_t n,
-		bool *is_data_outstanding);
+		BOOL *is_data_outstanding);
 static ssize_t write_to_internal_pipe(void *np_conn, char *data, size_t n);
-static bool close_internal_rpc_pipe_hnd(void *np_conn);
-static void *make_internal_rpc_pipe_p(const char *pipe_name, 
+static BOOL close_internal_rpc_pipe_hnd(void *np_conn);
+static void *make_internal_rpc_pipe_p(char *pipe_name, 
 			      connection_struct *conn, uint16 vuid);
 
 /****************************************************************************
+ Pipe iterator functions.
+****************************************************************************/
+
+smb_np_struct *get_first_pipe(void)
+{
+	return Pipes;
+}
+
+smb_np_struct *get_next_pipe(smb_np_struct *p)
+{
+	return p->next;
+}
+
+/****************************************************************************
  Internal Pipe iterator functions.
 ****************************************************************************/
 
@@ -123,7 +138,7 @@
  Initialise an outgoing packet.
 ****************************************************************************/
 
-static bool pipe_init_outgoing_data(pipes_struct *p)
+static BOOL pipe_init_outgoing_data(pipes_struct *p)
 {
 	output_data *o_data = &p->out_data;
 
@@ -153,13 +168,13 @@
  Find first available pipe slot.
 ****************************************************************************/
 
-smb_np_struct *open_rpc_pipe_p(const char *pipe_name, 
+smb_np_struct *open_rpc_pipe_p(char *pipe_name, 
 			      connection_struct *conn, uint16 vuid)
 {
 	int i;
 	smb_np_struct *p, *p_it;
 	static int next_pipe;
-	bool is_spoolss_pipe = False;
+	BOOL is_spoolss_pipe = False;
 
 	DEBUG(4,("Open pipe requested %s (pipes_open=%d)\n",
 		 pipe_name, pipes_open));
@@ -195,21 +210,14 @@
 		DEBUG(5,("open_rpc_pipe_p: name %s pnum=%x\n", p->name, p->pnum));  
 	}
 
-	p = talloc(NULL, smb_np_struct);
+	p = SMB_MALLOC_P(smb_np_struct);
 	if (!p) {
-		DEBUG(0,("ERROR! no memory for smb_np_struct!\n"));
+		DEBUG(0,("ERROR! no memory for pipes_struct!\n"));
 		return NULL;
 	}
 
 	ZERO_STRUCTP(p);
 
-	p->name = talloc_strdup(p, pipe_name);
-	if (p->name == NULL) {
-		TALLOC_FREE(p);
-		DEBUG(0,("ERROR! no memory for pipe name!\n"));
-		return NULL;
-	}
-
 	/* add a dso mechanism instead of this, here */
 
 	p->namedpipe_create = make_internal_rpc_pipe_p;
@@ -248,7 +256,9 @@
 	p->vuid  = vuid;
 
 	p->max_trans_reply = 0;
-
+	
+	fstrcpy(p->name, pipe_name);
+	
 	DEBUG(4,("Opened pipe %s with handle %x (pipes_open=%d)\n",
 		 pipe_name, i, pipes_open));
 	
@@ -266,7 +276,7 @@
  Make an internal namedpipes structure
 ****************************************************************************/
 
-static void *make_internal_rpc_pipe_p(const char *pipe_name, 
+static void *make_internal_rpc_pipe_p(char *pipe_name, 
 			      connection_struct *conn, uint16 vuid)
 {
 	pipes_struct *p;
@@ -348,7 +358,7 @@
 	/*
 	 * Initialize the outgoing RPC data buffer with no memory.
 	 */	
-	prs_init_empty(&p->out_data.rdata, p->mem_ctx, MARSHALL);
+	prs_init(&p->out_data.rdata, 0, p->mem_ctx, MARSHALL);
 	
 	fstrcpy(p->name, pipe_name);
 	
@@ -408,7 +418,7 @@
 		return -1;
 	}
 
-	prs_init_empty( &rpc_in, p->mem_ctx, UNMARSHALL);
+	prs_init( &rpc_in, 0, p->mem_ctx, UNMARSHALL);
 	prs_set_endian_data( &rpc_in, p->endian);
 
 	prs_give_memory( &rpc_in, (char *)&p->in_data.current_in_pdu[0],
@@ -531,7 +541,7 @@
  appends the data into the complete stream if the LAST flag is not set.
 ****************************************************************************/
 
-static bool process_request_pdu(pipes_struct *p, prs_struct *rpc_in_p)
+static BOOL process_request_pdu(pipes_struct *p, prs_struct *rpc_in_p)
 {
 	uint32 ss_padding_len = 0;
 	size_t data_len = p->hdr.frag_len - RPC_HEADER_LEN - RPC_HDR_REQ_LEN -
@@ -620,7 +630,7 @@
 	}
 
 	if(p->hdr.flags & RPC_FLG_LAST) {
-		bool ret = False;
+		BOOL ret = False;
 		/*
 		 * Ok - we finally have a complete RPC stream.
 		 * Call the rpc command to process it.
@@ -683,7 +693,7 @@
 	prs_struct rpc_in;
 	size_t data_len = p->in_data.pdu_received_len - RPC_HEADER_LEN;
 	char *data_p = (char *)&p->in_data.current_in_pdu[RPC_HEADER_LEN];
-	bool reply = False;
+	BOOL reply = False;
 
 	if(p->fault_state) {
 		DEBUG(10,("process_complete_pdu: pipe %s in fault state.\n",
@@ -693,7 +703,7 @@
 		return;
 	}
 
-	prs_init_empty( &rpc_in, p->mem_ctx, UNMARSHALL);
+	prs_init( &rpc_in, 0, p->mem_ctx, UNMARSHALL);
 
 	/*
 	 * Ensure we're using the corrent endianness for both the 
@@ -929,7 +939,7 @@
 	DEBUG(6,(" name: %s open: %s len: %d\n",
 		 p->name, BOOLSTR(p->open), (int)n));
 
-	dump_data(50, (uint8 *)data, n);
+	dump_data(50, data, n);
 
 	return p->namedpipe_write(p->np_state, data, n);
 }
@@ -975,7 +985,7 @@
 ****************************************************************************/
 
 ssize_t read_from_pipe(smb_np_struct *p, char *data, size_t n,
-		bool *is_data_outstanding)
+		BOOL *is_data_outstanding)
 {
 	if (!p || !p->open) {
 		DEBUG(0,("read_from_pipe: pipe not open\n"));
@@ -999,7 +1009,7 @@
 ****************************************************************************/
 
 static ssize_t read_from_internal_pipe(void *np_conn, char *data, size_t n,
-		bool *is_data_outstanding)
+		BOOL *is_data_outstanding)
 {
 	pipes_struct *p = (pipes_struct*)np_conn;
 	uint32 pdu_remaining = 0;
@@ -1026,7 +1036,6 @@
 	if(n > RPC_MAX_PDU_FRAG_LEN) {
                 DEBUG(5,("read_from_pipe: too large read (%u) requested on \
 pipe %s. We can only service %d sized reads.\n", (unsigned int)n, p->name, RPC_MAX_PDU_FRAG_LEN ));
-		n = RPC_MAX_PDU_FRAG_LEN;
 	}
 
 	/*
@@ -1093,7 +1102,7 @@
  Wait device state on a pipe. Exactly what this is for is unknown...
 ****************************************************************************/
 
-bool wait_rpc_pipe_hnd_state(smb_np_struct *p, uint16 priority)
+BOOL wait_rpc_pipe_hnd_state(smb_np_struct *p, uint16 priority)
 {
 	if (p == NULL) {
 		return False;
@@ -1118,7 +1127,7 @@
  Set device state on a pipe. Exactly what this is for is unknown...
 ****************************************************************************/
 
-bool set_rpc_pipe_hnd_state(smb_np_struct *p, uint16 device_state)
+BOOL set_rpc_pipe_hnd_state(smb_np_struct *p, uint16 device_state)
 {
 	if (p == NULL) {
 		return False;
@@ -1143,7 +1152,7 @@
  Close an rpc pipe.
 ****************************************************************************/
 
-bool close_rpc_pipe_hnd(smb_np_struct *p)
+BOOL close_rpc_pipe_hnd(smb_np_struct *p)
 {
 	if (!p) {
 		DEBUG(0,("Invalid pipe in close_rpc_pipe_hnd\n"));
@@ -1161,15 +1170,17 @@
 
 	DLIST_REMOVE(Pipes, p);
 	
-	/* TODO: Remove from pipe open db */
+	/* Remove from pipe open db */
 	
 	if ( !delete_pipe_opendb( p ) ) {
 		DEBUG(3,("close_rpc_pipe_hnd: failed to delete %s "
 			"pipe from open db.\n", p->name));
 	}
 
-	TALLOC_FREE(p);
+	ZERO_STRUCTP(p);
 
+	SAFE_FREE(p);
+
 	return True;
 }
 
@@ -1193,7 +1204,7 @@
  Close an rpc pipe.
 ****************************************************************************/
 
-static bool close_internal_rpc_pipe_hnd(void *np_conn)
+static BOOL close_internal_rpc_pipe_hnd(void *np_conn)
 {
 	pipes_struct *p = (pipes_struct *)np_conn;
 	if (!p) {
@@ -1238,8 +1249,10 @@
  Find an rpc pipe given a pipe handle in a buffer and an offset.
 ****************************************************************************/
 
-smb_np_struct *get_rpc_pipe_p(uint16 pnum)
+smb_np_struct *get_rpc_pipe_p(char *buf, int where)
 {
+	int pnum = SVAL(buf,where);
+
 	if (chain_p) {
 		return chain_p;
 	}

Copied: branches/samba/upstream/source/rpc_server/srv_reg.c (from rev 1928, branches/samba/upstream/source/rpc_server/srv_reg.c)
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_reg.c	                        (rev 0)
+++ branches/samba/upstream/source/rpc_server/srv_reg.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,659 @@
+/*
+ *  Unix SMB/CIFS implementation.
+ *  RPC Pipe client / server routines
+ *  Copyright (C) Andrew Tridgell              1992-1997,
+ *  Copyright (C) Luke Kenneth Casson Leighton 1996-1997,
+ *  Copyright (C) Paul Ashton                       1997,
+ *  Copyright (C) Marc Jacobsen	   		    2000,
+ *  Copyright (C) Jeremy Allison		    2001,
+ *  Copyright (C) Gerald Carter 		    2002,
+ *  Copyright (C) Jim McDonough <jmcd at us.ibm.com>   2003.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/* This is the interface for the registry functions. */
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_RPC_SRV
+
+/*******************************************************************
+ api_reg_close
+ ********************************************************************/
+
+static BOOL api_reg_close(pipes_struct *p)
+{
+	REG_Q_CLOSE q_u;
+	REG_R_CLOSE r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the reg unknown 1 */
+	if(!reg_io_q_close("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _reg_close(p, &q_u, &r_u);
+
+	if(!reg_io_r_close("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ api_reg_open_khlm
+ ********************************************************************/
+
+static BOOL api_reg_open_hklm(pipes_struct *p)
+{
+	REG_Q_OPEN_HIVE q_u;
+	REG_R_OPEN_HIVE r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the reg open */
+	if(!reg_io_q_open_hive("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _reg_open_hklm(p, &q_u, &r_u);
+
+	if(!reg_io_r_open_hive("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ api_reg_open_khu
+ ********************************************************************/
+
+static BOOL api_reg_open_hku(pipes_struct *p)
+{
+	REG_Q_OPEN_HIVE q_u;
+	REG_R_OPEN_HIVE r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the reg open */
+	if(!reg_io_q_open_hive("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _reg_open_hku(p, &q_u, &r_u);
+
+	if(!reg_io_r_open_hive("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ api_reg_open_khcr
+ ********************************************************************/
+
+static BOOL api_reg_open_hkcr(pipes_struct *p)
+{
+	REG_Q_OPEN_HIVE q_u;
+	REG_R_OPEN_HIVE r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the reg open */
+	if(!reg_io_q_open_hive("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _reg_open_hkcr(p, &q_u, &r_u);
+
+	if(!reg_io_r_open_hive("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+ api_reg_open_entry
+ ********************************************************************/
+
+static BOOL api_reg_open_entry(pipes_struct *p)
+{
+	REG_Q_OPEN_ENTRY q_u;
+	REG_R_OPEN_ENTRY r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the reg open entry */
+	if(!reg_io_q_open_entry("", &q_u, data, 0))
+		return False;
+
+	/* construct reply. */
+	r_u.status = _reg_open_entry(p, &q_u, &r_u);
+
+	if(!reg_io_r_open_entry("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ api_reg_query_value
+ ********************************************************************/
+
+static BOOL api_reg_query_value(pipes_struct *p)
+{
+	REG_Q_QUERY_VALUE q_u;
+	REG_R_QUERY_VALUE r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the reg unknown 0x11*/
+	if(!reg_io_q_query_value("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _reg_query_value(p, &q_u, &r_u);
+
+	if(!reg_io_r_query_value("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ api_reg_shutdown
+ ********************************************************************/
+
+static BOOL api_reg_shutdown(pipes_struct *p)
+{
+	REG_Q_SHUTDOWN q_u;
+	REG_R_SHUTDOWN r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the reg shutdown */
+	if(!reg_io_q_shutdown("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _reg_shutdown(p, &q_u, &r_u);
+
+	if(!reg_io_r_shutdown("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ api_reg_shutdown_ex
+ ********************************************************************/
+
+static BOOL api_reg_shutdown_ex(pipes_struct *p)
+{
+	REG_Q_SHUTDOWN_EX q_u;
+	REG_R_SHUTDOWN_EX r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the reg shutdown ex */
+	if(!reg_io_q_shutdown_ex("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _reg_shutdown_ex(p, &q_u, &r_u);
+
+	if(!reg_io_r_shutdown_ex("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ api_reg_abort_shutdown
+ ********************************************************************/
+
+static BOOL api_reg_abort_shutdown(pipes_struct *p)
+{
+	REG_Q_ABORT_SHUTDOWN q_u;
+	REG_R_ABORT_SHUTDOWN r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the reg shutdown */
+	if(!reg_io_q_abort_shutdown("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _reg_abort_shutdown(p, &q_u, &r_u);
+
+	if(!reg_io_r_abort_shutdown("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+ api_reg_query_key
+ ********************************************************************/
+
+static BOOL api_reg_query_key(pipes_struct *p)
+{
+	REG_Q_QUERY_KEY q_u;
+	REG_R_QUERY_KEY r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!reg_io_q_query_key("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _reg_query_key(p, &q_u, &r_u);
+
+	if(!reg_io_r_query_key("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ api_reg_getversion
+ ********************************************************************/
+
+static BOOL api_reg_getversion(pipes_struct *p)
+{
+	REG_Q_GETVERSION q_u;
+	REG_R_GETVERSION r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!reg_io_q_getversion("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _reg_getversion(p, &q_u, &r_u);
+
+	if(!reg_io_r_getversion("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ api_reg_enum_key
+ ********************************************************************/
+
+static BOOL api_reg_enum_key(pipes_struct *p)
+{
+	REG_Q_ENUM_KEY q_u;
+	REG_R_ENUM_KEY r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!reg_io_q_enum_key("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _reg_enum_key(p, &q_u, &r_u);
+
+	if(!reg_io_r_enum_key("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ api_reg_enum_value
+ ********************************************************************/
+
+static BOOL api_reg_enum_value(pipes_struct *p)
+{
+	REG_Q_ENUM_VALUE q_u;
+	REG_R_ENUM_VALUE r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!reg_io_q_enum_val("", &q_u, data, 0))
+		return False;
+		
+	r_u.status = _reg_enum_value(p, &q_u, &r_u);
+
+	if(!reg_io_r_enum_val("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ ******************************************************************/
+
+static BOOL api_reg_restore_key(pipes_struct *p)
+{
+	REG_Q_RESTORE_KEY q_u;
+	REG_R_RESTORE_KEY r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!reg_io_q_restore_key("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _reg_restore_key(p, &q_u, &r_u);
+
+	if(!reg_io_r_restore_key("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ ********************************************************************/
+
+static BOOL api_reg_save_key(pipes_struct *p)
+{
+	REG_Q_SAVE_KEY q_u;
+	REG_R_SAVE_KEY r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!reg_io_q_save_key("", &q_u, data, 0))
+		return False;
+		
+	r_u.status = _reg_save_key(p, &q_u, &r_u);
+
+	if(!reg_io_r_save_key("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ api_reg_open_hkpd
+ ********************************************************************/
+
+static BOOL api_reg_open_hkpd(pipes_struct *p)
+{
+	REG_Q_OPEN_HIVE q_u;
+	REG_R_OPEN_HIVE r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the reg open */
+	if(!reg_io_q_open_hive("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _reg_open_hkpd(p, &q_u, &r_u);
+
+	if(!reg_io_r_open_hive("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ api_reg_open_hkpd
+ ********************************************************************/
+static BOOL api_reg_open_hkpt(pipes_struct *p)
+{
+	REG_Q_OPEN_HIVE q_u;
+	REG_R_OPEN_HIVE r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the reg open */
+	if(!reg_io_q_open_hive("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _reg_open_hkpt(p, &q_u, &r_u);
+
+	if(!reg_io_r_open_hive("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ ******************************************************************/
+
+static BOOL api_reg_create_key_ex(pipes_struct *p)
+{
+	REG_Q_CREATE_KEY_EX q_u;
+	REG_R_CREATE_KEY_EX r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!reg_io_q_create_key_ex("", &q_u, data, 0))
+		return False;
+		
+	r_u.status = _reg_create_key_ex(p, &q_u, &r_u);
+
+	if(!reg_io_r_create_key_ex("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ ******************************************************************/
+
+static BOOL api_reg_set_value(pipes_struct *p)
+{
+	REG_Q_SET_VALUE q_u;
+	REG_R_SET_VALUE r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!reg_io_q_set_value("", &q_u, data, 0))
+		return False;
+		
+	r_u.status = _reg_set_value(p, &q_u, &r_u);
+
+	if(!reg_io_r_set_value("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ ******************************************************************/
+
+static BOOL api_reg_delete_key(pipes_struct *p)
+{
+	REG_Q_DELETE_KEY q_u;
+	REG_R_DELETE_KEY r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!reg_io_q_delete_key("", &q_u, data, 0))
+		return False;
+		
+	r_u.status = _reg_delete_key(p, &q_u, &r_u);
+
+	if(!reg_io_r_delete_key("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ ******************************************************************/
+
+static BOOL api_reg_delete_value(pipes_struct *p)
+{
+	REG_Q_DELETE_VALUE q_u;
+	REG_R_DELETE_VALUE r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!reg_io_q_delete_value("", &q_u, data, 0))
+		return False;
+		
+	r_u.status = _reg_delete_value(p, &q_u, &r_u);
+
+	if(!reg_io_r_delete_value("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+ ******************************************************************/
+
+static BOOL api_reg_get_key_sec(pipes_struct *p)
+{
+	REG_Q_GET_KEY_SEC q_u;
+	REG_R_GET_KEY_SEC r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!reg_io_q_get_key_sec("", &q_u, data, 0))
+		return False;
+		
+	r_u.status = _reg_get_key_sec(p, &q_u, &r_u);
+
+	if(!reg_io_r_get_key_sec("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+ ******************************************************************/
+
+static BOOL api_reg_set_key_sec(pipes_struct *p)
+{
+	REG_Q_SET_KEY_SEC q_u;
+	REG_R_SET_KEY_SEC r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!reg_io_q_set_key_sec("", &q_u, data, 0))
+		return False;
+		
+	r_u.status = _reg_set_key_sec(p, &q_u, &r_u);
+
+	if(!reg_io_r_set_key_sec("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+ array of \PIPE\reg operations
+ ********************************************************************/
+
+static struct api_struct api_reg_cmds[] =
+{
+      { "REG_CLOSE"              , REG_CLOSE              , api_reg_close            },
+      { "REG_OPEN_ENTRY"         , REG_OPEN_ENTRY         , api_reg_open_entry       },
+      { "REG_OPEN_HKCR"          , REG_OPEN_HKCR          , api_reg_open_hkcr        },
+      { "REG_OPEN_HKLM"          , REG_OPEN_HKLM          , api_reg_open_hklm        },
+      { "REG_OPEN_HKPD"          , REG_OPEN_HKPD          , api_reg_open_hkpd        },
+      { "REG_OPEN_HKPT"          , REG_OPEN_HKPT          , api_reg_open_hkpt        },
+      { "REG_OPEN_HKU"           , REG_OPEN_HKU           , api_reg_open_hku         },
+      { "REG_ENUM_KEY"           , REG_ENUM_KEY           , api_reg_enum_key         },
+      { "REG_ENUM_VALUE"         , REG_ENUM_VALUE         , api_reg_enum_value       },
+      { "REG_QUERY_KEY"          , REG_QUERY_KEY          , api_reg_query_key        },
+      { "REG_QUERY_VALUE"        , REG_QUERY_VALUE        , api_reg_query_value      },
+      { "REG_SHUTDOWN"           , REG_SHUTDOWN           , api_reg_shutdown         },
+      { "REG_SHUTDOWN_EX"        , REG_SHUTDOWN_EX        , api_reg_shutdown_ex      },
+      { "REG_ABORT_SHUTDOWN"     , REG_ABORT_SHUTDOWN     , api_reg_abort_shutdown   },
+      { "REG_GETVERSION"         , REG_GETVERSION         , api_reg_getversion       },
+      { "REG_SAVE_KEY"           , REG_SAVE_KEY           , api_reg_save_key         },
+      { "REG_RESTORE_KEY"        , REG_RESTORE_KEY        , api_reg_restore_key      },
+      { "REG_CREATE_KEY_EX"      , REG_CREATE_KEY_EX      , api_reg_create_key_ex    },
+      { "REG_SET_VALUE"          , REG_SET_VALUE          , api_reg_set_value        },
+      { "REG_DELETE_KEY"         , REG_DELETE_KEY         , api_reg_delete_key       },
+      { "REG_DELETE_VALUE"       , REG_DELETE_VALUE       , api_reg_delete_value     },
+      { "REG_GET_KEY_SEC"        , REG_GET_KEY_SEC        , api_reg_get_key_sec      },
+      { "REG_SET_KEY_SEC"        , REG_SET_KEY_SEC        , api_reg_set_key_sec      }
+};
+
+void reg_get_pipe_fns( struct api_struct **fns, int *n_fns )
+{
+	*fns = api_reg_cmds;
+	*n_fns = sizeof(api_reg_cmds) / sizeof(struct api_struct);
+}
+    
+NTSTATUS rpc_reg_init(void)
+{
+
+  return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "winreg", "winreg", api_reg_cmds,
+				    sizeof(api_reg_cmds) / sizeof(struct api_struct));
+}

Copied: branches/samba/upstream/source/rpc_server/srv_reg_nt.c (from rev 1928, branches/samba/upstream/source/rpc_server/srv_reg_nt.c)
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_reg_nt.c	                        (rev 0)
+++ branches/samba/upstream/source/rpc_server/srv_reg_nt.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,1352 @@
+/* 
+ *  Unix SMB/CIFS implementation.
+ *  RPC Pipe client / server routines
+ *  Copyright (C) Andrew Tridgell               1992-1997.
+ *  Copyright (C) Luke Kenneth Casson Leighton  1996-1997.
+ *  Copyright (C) Paul Ashton                        1997.
+ *  Copyright (C) Jeremy Allison                     2001.
+ *  Copyright (C) Gerald Carter                      2002-2005.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/* Implementation of registry functions. */
+
+#include "includes.h"
+#include "regfio.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_RPC_SRV
+
+static struct generic_mapping reg_generic_map = 
+	{ REG_KEY_READ, REG_KEY_WRITE, REG_KEY_EXECUTE, REG_KEY_ALL };
+
+
+/******************************************************************
+ free() function for REGISTRY_KEY
+ *****************************************************************/
+ 
+static void free_regkey_info(void *ptr)
+{
+	regkey_close_internal( (REGISTRY_KEY*)ptr );
+}
+
+/******************************************************************
+ Find a registry key handle and return a REGISTRY_KEY
+ *****************************************************************/
+
+static REGISTRY_KEY *find_regkey_index_by_hnd(pipes_struct *p, POLICY_HND *hnd)
+{
+	REGISTRY_KEY *regkey = NULL;
+
+	if(!find_policy_by_hnd(p,hnd,(void **)(void *)&regkey)) {
+		DEBUG(2,("find_regkey_index_by_hnd: Registry Key not found: "));
+		return NULL;
+	}
+
+	return regkey;
+}
+
+
+/*******************************************************************
+ Function for open a new registry handle and creating a handle 
+ Note that P should be valid & hnd should already have space
+ 
+ When we open a key, we store the full path to the key as 
+ HK[LM|U]\<key>\<key>\...
+ *******************************************************************/
+ 
+static WERROR open_registry_key( pipes_struct *p, POLICY_HND *hnd, 
+                                 REGISTRY_KEY **keyinfo, REGISTRY_KEY *parent,
+				 const char *subkeyname, uint32 access_desired  )
+{
+	pstring         keypath;
+	int		path_len;
+	WERROR     	result = WERR_OK;
+
+	/* create a full registry path and strip any trailing '\' 
+	   characters */
+	   
+	pstr_sprintf( keypath, "%s%s%s", 
+		parent ? parent->name : "",
+		parent ? "\\" : "", 
+		subkeyname );
+	
+	path_len = strlen( keypath );
+	if ( path_len && keypath[path_len-1] == '\\' )
+		keypath[path_len-1] = '\0';
+	
+	/* now do the internal open */
+		
+	result = regkey_open_internal( keyinfo, keypath, p->pipe_user.nt_user_token, access_desired );
+	if ( !W_ERROR_IS_OK(result) )
+		return result;
+	
+	if ( !create_policy_hnd( p, hnd, free_regkey_info, *keyinfo ) ) {
+		result = WERR_BADFILE; 
+		regkey_close_internal( *keyinfo );
+	}
+	
+	return result;
+}
+
+/*******************************************************************
+ Function for open a new registry handle and creating a handle 
+ Note that P should be valid & hnd should already have space
+ *******************************************************************/
+
+static BOOL close_registry_key(pipes_struct *p, POLICY_HND *hnd)
+{
+	REGISTRY_KEY *regkey = find_regkey_index_by_hnd(p, hnd);
+	
+	if ( !regkey ) {
+		DEBUG(2,("close_registry_key: Invalid handle (%s:%u:%u)\n", OUR_HANDLE(hnd)));
+		return False;
+	}
+	
+	close_policy_hnd(p, hnd);
+	
+	return True;
+}
+
+/********************************************************************
+ retrieve information about the subkeys
+ *******************************************************************/
+ 
+static BOOL get_subkey_information( REGISTRY_KEY *key, uint32 *maxnum, uint32 *maxlen )
+{
+	int 		num_subkeys, i;
+	uint32 		max_len;
+	REGSUBKEY_CTR 	*subkeys;
+	uint32 		len;
+	
+	if ( !key )
+		return False;
+
+	if ( !(subkeys = TALLOC_ZERO_P( NULL, REGSUBKEY_CTR )) )
+		return False;
+
+	if ( fetch_reg_keys( key, subkeys ) == -1 )
+		return False;
+
+	/* find the longest string */
+	
+	max_len = 0;
+	num_subkeys = regsubkey_ctr_numkeys( subkeys );
+	
+	for ( i=0; i<num_subkeys; i++ ) {
+		len = strlen( regsubkey_ctr_specific_key(subkeys, i) );
+		max_len = MAX(max_len, len);
+	}
+
+	*maxnum = num_subkeys;
+	*maxlen = max_len*2;
+	
+	TALLOC_FREE( subkeys );
+	
+	return True;
+}
+
+/********************************************************************
+ retrieve information about the values.  
+ *******************************************************************/
+ 
+static BOOL get_value_information( REGISTRY_KEY *key, uint32 *maxnum, 
+                                    uint32 *maxlen, uint32 *maxsize )
+{
+	REGVAL_CTR 	*values;
+	REGISTRY_VALUE	*val;
+	uint32 		sizemax, lenmax;
+	int 		i, num_values;
+	
+	if ( !key )
+		return False;
+
+	if ( !(values = TALLOC_ZERO_P( NULL, REGVAL_CTR )) )
+		return False;
+	
+	if ( fetch_reg_values( key, values ) == -1 )
+		return False;
+	
+	lenmax = sizemax = 0;
+	num_values = regval_ctr_numvals( values );
+	
+	val = regval_ctr_specific_value( values, 0 );
+	
+	for ( i=0; i<num_values && val; i++ ) 
+	{
+		lenmax  = MAX(lenmax,  val->valuename ? strlen(val->valuename)+1 : 0 );
+		sizemax = MAX(sizemax, val->size );
+		
+		val = regval_ctr_specific_value( values, i );
+	}
+
+	*maxnum   = num_values;
+	*maxlen   = lenmax;
+	*maxsize  = sizemax;
+	
+	TALLOC_FREE( values );
+	
+	return True;
+}
+
+
+/********************************************************************
+ reg_close
+ ********************************************************************/
+
+WERROR _reg_close(pipes_struct *p, REG_Q_CLOSE *q_u, REG_R_CLOSE *r_u)
+{
+	/* close the policy handle */
+
+	if (!close_registry_key(p, &q_u->pol))
+		return WERR_BADFID; 
+
+	return WERR_OK;
+}
+
+/*******************************************************************
+ ********************************************************************/
+
+WERROR _reg_open_hklm(pipes_struct *p, REG_Q_OPEN_HIVE *q_u, REG_R_OPEN_HIVE *r_u)
+{
+	REGISTRY_KEY *keyinfo;
+	
+	return open_registry_key( p, &r_u->pol, &keyinfo, NULL, KEY_HKLM, q_u->access );
+}
+
+/*******************************************************************
+ ********************************************************************/
+
+WERROR _reg_open_hkpd(pipes_struct *p, REG_Q_OPEN_HIVE *q_u, REG_R_OPEN_HIVE *r_u)
+{
+	REGISTRY_KEY *keyinfo;
+	
+	return open_registry_key( p, &r_u->pol, &keyinfo, NULL, KEY_HKPD, q_u->access );
+}
+
+/*******************************************************************
+ ********************************************************************/
+
+WERROR _reg_open_hkpt(pipes_struct *p, REG_Q_OPEN_HIVE *q_u, REG_R_OPEN_HIVE *r_u)
+{
+	REGISTRY_KEY *keyinfo;
+	
+	return open_registry_key( p, &r_u->pol, &keyinfo, NULL, KEY_HKPT, q_u->access );
+}
+
+/*******************************************************************
+ ********************************************************************/
+
+WERROR _reg_open_hkcr(pipes_struct *p, REG_Q_OPEN_HIVE *q_u, REG_R_OPEN_HIVE *r_u)
+{
+	REGISTRY_KEY *keyinfo;
+	
+	return open_registry_key( p, &r_u->pol, &keyinfo, NULL, KEY_HKCR, q_u->access );
+}
+
+/*******************************************************************
+ ********************************************************************/
+
+WERROR _reg_open_hku(pipes_struct *p, REG_Q_OPEN_HIVE *q_u, REG_R_OPEN_HIVE *r_u)
+{
+	REGISTRY_KEY *keyinfo;
+	
+	return open_registry_key( p, &r_u->pol, &keyinfo, NULL, KEY_HKU, q_u->access );
+}
+
+/*******************************************************************
+ reg_reply_open_entry
+ ********************************************************************/
+
+WERROR _reg_open_entry(pipes_struct *p, REG_Q_OPEN_ENTRY *q_u, REG_R_OPEN_ENTRY *r_u)
+{
+	fstring name;
+	REGISTRY_KEY *parent = find_regkey_index_by_hnd(p, &q_u->pol);
+	REGISTRY_KEY *newkey = NULL;
+	uint32 check_rights;
+
+	if ( !parent )
+		return WERR_BADFID;
+
+	rpcstr_pull( name, q_u->name.string->buffer, sizeof(name), q_u->name.string->uni_str_len*2, 0 );
+	
+	/* check granted access first; what is the correct mask here? */
+
+	check_rights = ( SEC_RIGHTS_ENUM_SUBKEYS|
+                         SEC_RIGHTS_CREATE_SUBKEY|
+			 SEC_RIGHTS_QUERY_VALUE|
+			 SEC_RIGHTS_SET_VALUE);
+
+	if ( !(parent->access_granted & check_rights) ) {
+	        DEBUG(8,("Rights check failed, parent had %04x, check_rights %04x\n",parent->access_granted, check_rights));
+		return WERR_ACCESS_DENIED;
+	}
+	
+	/* 
+	 * very crazy, but regedit.exe on Win2k will attempt to call 
+	 * REG_OPEN_ENTRY with a keyname of "".  We should return a new 
+	 * (second) handle here on the key->name.  regedt32.exe does 
+	 * not do this stupidity.   --jerry
+	 */
+	 
+	return open_registry_key( p, &r_u->handle, &newkey, parent, name, q_u->access );
+}
+
+/*******************************************************************
+ reg_reply_info
+ ********************************************************************/
+
+WERROR _reg_query_value(pipes_struct *p, REG_Q_QUERY_VALUE *q_u, REG_R_QUERY_VALUE *r_u)
+{
+	WERROR			status = WERR_BADFILE;
+	fstring 		name;
+	REGISTRY_KEY 		*regkey = find_regkey_index_by_hnd( p, &q_u->pol );
+	REGISTRY_VALUE		*val = NULL;
+	REGVAL_CTR		*regvals;
+	int			i;
+
+	if ( !regkey )
+		return WERR_BADFID;
+		
+	DEBUG(7,("_reg_info: policy key name = [%s]\n", regkey->name));
+	DEBUG(7,("_reg_info: policy key type = [%08x]\n", regkey->type));
+	
+	rpcstr_pull(name, q_u->name.string->buffer, sizeof(name), q_u->name.string->uni_str_len*2, 0);
+
+	DEBUG(5,("_reg_info: looking up value: [%s]\n", name));
+
+	if ( !(regvals = TALLOC_ZERO_P( p->mem_ctx, REGVAL_CTR )) ) 
+		return WERR_NOMEM;
+	
+	/* Handle QueryValue calls on HKEY_PERFORMANCE_DATA */
+	if(regkey->type == REG_KEY_HKPD) 
+	{
+		if(strequal(name, "Global"))
+		{
+			uint32 outbuf_len;
+			prs_struct prs_hkpd;
+			prs_init(&prs_hkpd, q_u->bufsize, p->mem_ctx, MARSHALL);
+			status = reg_perfcount_get_hkpd(&prs_hkpd, q_u->bufsize, &outbuf_len, NULL);
+			regval_ctr_addvalue(regvals, "HKPD", REG_BINARY,
+					    prs_hkpd.data_p, outbuf_len);
+			val = dup_registry_value(regval_ctr_specific_value(regvals, 0));
+			prs_mem_free(&prs_hkpd);
+		}
+		else if(strequal(name, "Counter 009"))
+		{
+			uint32 base_index;
+			uint32 buffer_size;
+			char *buffer;
+			
+			buffer = NULL;
+			base_index = reg_perfcount_get_base_index();
+			buffer_size = reg_perfcount_get_counter_names(base_index, &buffer);
+			regval_ctr_addvalue(regvals, "Counter 009", 
+					    REG_MULTI_SZ, buffer, buffer_size);
+			
+			val = dup_registry_value(regval_ctr_specific_value(regvals, 0));
+			
+			if(buffer_size > 0)
+			{
+				SAFE_FREE(buffer);
+				status = WERR_OK;
+			}
+		}
+		else if(strequal(name, "Explain 009"))
+		{		
+			uint32 base_index;
+			uint32 buffer_size;
+			char *buffer;
+			
+			buffer = NULL;
+			base_index = reg_perfcount_get_base_index();
+			buffer_size = reg_perfcount_get_counter_help(base_index, &buffer);
+			regval_ctr_addvalue(regvals, "Explain 009", 
+					    REG_MULTI_SZ, buffer, buffer_size);
+			
+			val = dup_registry_value(regval_ctr_specific_value(regvals, 0));
+			
+			if(buffer_size > 0)
+			{
+				SAFE_FREE(buffer);
+				status = WERR_OK;
+			}
+		}
+		else if(isdigit(name[0]))
+		{
+			/* we probably have a request for a specific object here */
+			uint32 outbuf_len;
+			prs_struct prs_hkpd;
+			prs_init(&prs_hkpd, q_u->bufsize, p->mem_ctx, MARSHALL);
+			status = reg_perfcount_get_hkpd(&prs_hkpd, q_u->bufsize, &outbuf_len, name);
+			regval_ctr_addvalue(regvals, "HKPD", REG_BINARY,
+					    prs_hkpd.data_p, outbuf_len);
+			
+			val = dup_registry_value(regval_ctr_specific_value(regvals, 0));
+			prs_mem_free(&prs_hkpd);
+		}
+		else
+		{
+			DEBUG(3,("Unsupported key name [%s] for HKPD.\n", name));
+			return WERR_BADFILE;
+		}
+	}
+	/* HKPT calls can be handled out of reg_dynamic.c with the hkpt_params handler */
+	else
+	{
+	    for ( i=0; fetch_reg_values_specific(regkey, &val, i); i++ ) 
+	    {
+		DEBUG(10,("_reg_info: Testing value [%s]\n", val->valuename));
+		if ( strequal( val->valuename, name ) ) {
+			DEBUG(10,("_reg_info: Found match for value [%s]\n", name));
+			status = WERR_OK;
+			break;
+		}
+		
+		free_registry_value( val );
+	    }
+	}
+
+	init_reg_r_query_value(q_u->ptr_buf, r_u, val, status);
+	
+	TALLOC_FREE( regvals );
+	free_registry_value( val );
+
+	return status;
+}
+
+/*****************************************************************************
+ Implementation of REG_QUERY_KEY
+ ****************************************************************************/
+ 
+WERROR _reg_query_key(pipes_struct *p, REG_Q_QUERY_KEY *q_u, REG_R_QUERY_KEY *r_u)
+{
+	WERROR 	status = WERR_OK;
+	REGISTRY_KEY	*regkey = find_regkey_index_by_hnd( p, &q_u->pol );
+	
+	if ( !regkey )
+		return WERR_BADFID; 
+	
+	if ( !get_subkey_information( regkey, &r_u->num_subkeys, &r_u->max_subkeylen ) ) {
+		DEBUG(0,("_reg_query_key: get_subkey_information() failed!\n"));
+		return WERR_ACCESS_DENIED;
+	}
+		
+	if ( !get_value_information( regkey, &r_u->num_values, &r_u->max_valnamelen, &r_u->max_valbufsize ) ) {
+		DEBUG(0,("_reg_query_key: get_value_information() failed!\n"));
+		return WERR_ACCESS_DENIED;	
+	}
+
+		
+	r_u->sec_desc = 0x00000078;	/* size for key's sec_desc */
+	
+	/* Win9x set this to 0x0 since it does not keep timestamps.
+	   Doing the same here for simplicity   --jerry */
+	   
+	ZERO_STRUCT(r_u->mod_time);	
+
+	return status;
+}
+
+
+/*****************************************************************************
+ Implementation of REG_GETVERSION
+ ****************************************************************************/
+ 
+WERROR _reg_getversion(pipes_struct *p, REG_Q_GETVERSION *q_u, REG_R_GETVERSION *r_u)
+{
+	WERROR 	status = WERR_OK;
+	REGISTRY_KEY	*regkey = find_regkey_index_by_hnd( p, &q_u->pol );
+	
+	if ( !regkey )
+		return WERR_BADFID;
+	
+	r_u->win_version = 0x00000005;	/* Windows 2000 registry API version */
+	
+	return status;
+}
+
+
+/*****************************************************************************
+ Implementation of REG_ENUM_KEY
+ ****************************************************************************/
+ 
+WERROR _reg_enum_key(pipes_struct *p, REG_Q_ENUM_KEY *q_u, REG_R_ENUM_KEY *r_u)
+{
+	WERROR 	status = WERR_OK;
+	REGISTRY_KEY	*regkey = find_regkey_index_by_hnd( p, &q_u->pol );
+	char		*subkey = NULL;
+	
+	
+	if ( !regkey )
+		return WERR_BADFID; 
+
+	DEBUG(8,("_reg_enum_key: enumerating key [%s]\n", regkey->name));
+	
+	if ( !fetch_reg_keys_specific( regkey, &subkey, q_u->key_index ) )
+	{
+		status = WERR_NO_MORE_ITEMS;
+		goto done;
+	}
+	
+	DEBUG(10,("_reg_enum_key: retrieved subkey named [%s]\n", subkey));
+	
+	/* subkey has the string name now */
+	
+	init_reg_r_enum_key( r_u, subkey );
+	
+done:	
+	SAFE_FREE( subkey );
+	return status;
+}
+
+/*****************************************************************************
+ Implementation of REG_ENUM_VALUE
+ ****************************************************************************/
+ 
+WERROR _reg_enum_value(pipes_struct *p, REG_Q_ENUM_VALUE *q_u, REG_R_ENUM_VALUE *r_u)
+{
+	WERROR 	status = WERR_OK;
+	REGISTRY_KEY	*regkey = find_regkey_index_by_hnd( p, &q_u->pol );
+	REGISTRY_VALUE	*val;
+	
+	
+	if ( !regkey )
+		return WERR_BADFID; 
+
+	DEBUG(8,("_reg_enum_value: enumerating values for key [%s]\n", regkey->name));
+
+	if ( !fetch_reg_values_specific( regkey, &val, q_u->val_index ) ) {
+		status = WERR_NO_MORE_ITEMS;
+		goto done;
+	}
+
+#if 0	/* JERRY TEST CODE */
+	if ( val->type == REG_MULTI_SZ ) {
+		char **str;
+		int num_strings = regval_convert_multi_sz( (uint16*)regval_data_p(val), regval_size(val), &str );
+		uint16 *buffer;
+		size_t buf_size;
+		
+		
+		if ( num_strings )
+			buf_size = regval_build_multi_sz( str, &buffer );
+		
+		TALLOC_FREE( str );
+		TALLOC_FREE( buffer );
+	}
+#endif
+	
+	DEBUG(10,("_reg_enum_value: retrieved value named  [%s]\n", val->valuename));
+	
+	/* subkey has the string name now */
+	
+	init_reg_r_enum_val( r_u, val );
+
+done:	
+	free_registry_value( val );
+	
+	return status;
+}
+
+
+/*******************************************************************
+ reg_shutdwon
+ ********************************************************************/
+
+WERROR _reg_shutdown(pipes_struct *p, REG_Q_SHUTDOWN *q_u, REG_R_SHUTDOWN *r_u)
+{
+	REG_Q_SHUTDOWN_EX q_u_ex;
+	REG_R_SHUTDOWN_EX r_u_ex;
+	
+	/* copy fields (including stealing memory) */
+	
+	q_u_ex.server  = q_u->server;
+	q_u_ex.message = q_u->message;
+	q_u_ex.timeout = q_u->timeout;
+	q_u_ex.force   = q_u->force;
+	q_u_ex.reboot  = q_u->reboot;
+	q_u_ex.reason  = 0x0; 	/* don't care for now */
+	
+	/* thunk down to _reg_shutdown_ex() (just returns a status) */
+	
+	return _reg_shutdown_ex( p, &q_u_ex, &r_u_ex );
+}
+
+/*******************************************************************
+ reg_shutdown_ex
+ ********************************************************************/
+
+#define SHUTDOWN_R_STRING "-r"
+#define SHUTDOWN_F_STRING "-f"
+
+
+WERROR _reg_shutdown_ex(pipes_struct *p, REG_Q_SHUTDOWN_EX *q_u, REG_R_SHUTDOWN_EX *r_u)
+{
+	pstring shutdown_script;
+	pstring message;
+	pstring chkmsg;
+	fstring timeout;
+	fstring reason;
+	fstring r;
+	fstring f;
+	int ret;
+	BOOL can_shutdown;
+	
+
+ 	pstrcpy(shutdown_script, lp_shutdown_script());
+	
+	if ( !*shutdown_script )
+		return WERR_ACCESS_DENIED;
+
+	/* pull the message string and perform necessary sanity checks on it */
+
+	pstrcpy( message, "" );
+	if ( q_u->message ) {
+		UNISTR2 *msg_string = q_u->message->string;
+		
+		rpcstr_pull( message, msg_string->buffer, sizeof(message), msg_string->uni_str_len*2, 0 );
+	}
+	alpha_strcpy (chkmsg, message, NULL, sizeof(message));
+		
+	fstr_sprintf(timeout, "%d", q_u->timeout);
+	fstr_sprintf(r, (q_u->reboot) ? SHUTDOWN_R_STRING : "");
+	fstr_sprintf(f, (q_u->force) ? SHUTDOWN_F_STRING : "");
+	fstr_sprintf( reason, "%d", q_u->reason );
+
+	all_string_sub( shutdown_script, "%z", chkmsg, sizeof(shutdown_script) );
+	all_string_sub( shutdown_script, "%t", timeout, sizeof(shutdown_script) );
+	all_string_sub( shutdown_script, "%r", r, sizeof(shutdown_script) );
+	all_string_sub( shutdown_script, "%f", f, sizeof(shutdown_script) );
+	all_string_sub( shutdown_script, "%x", reason, sizeof(shutdown_script) );
+
+	can_shutdown = user_has_privileges( p->pipe_user.nt_user_token, &se_remote_shutdown );
+		
+	/* IF someone has privs, run the shutdown script as root. OTHERWISE run it as not root
+	   Take the error return from the script and provide it as the Windows return code. */
+	   
+	/********** BEGIN SeRemoteShutdownPrivilege BLOCK **********/
+	
+	if ( can_shutdown ) 
+		become_root();
+
+	ret = smbrun( shutdown_script, NULL );
+		
+	if ( can_shutdown )
+		unbecome_root();
+
+	/********** END SeRemoteShutdownPrivilege BLOCK **********/
+	
+	DEBUG(3,("_reg_shutdown_ex: Running the command `%s' gave %d\n",
+		shutdown_script, ret));
+		
+
+	return (ret == 0) ? WERR_OK : WERR_ACCESS_DENIED;
+}
+
+
+
+
+/*******************************************************************
+ reg_abort_shutdwon
+ ********************************************************************/
+
+WERROR _reg_abort_shutdown(pipes_struct *p, REG_Q_ABORT_SHUTDOWN *q_u, REG_R_ABORT_SHUTDOWN *r_u)
+{
+	pstring abort_shutdown_script;
+	int ret;
+	BOOL can_shutdown;
+
+	pstrcpy(abort_shutdown_script, lp_abort_shutdown_script());
+
+	if ( !*abort_shutdown_script )
+		return WERR_ACCESS_DENIED;
+		
+	can_shutdown = user_has_privileges( p->pipe_user.nt_user_token, &se_remote_shutdown );
+		
+	/********** BEGIN SeRemoteShutdownPrivilege BLOCK **********/
+	
+	if ( can_shutdown )
+		become_root();
+		
+	ret = smbrun( abort_shutdown_script, NULL );
+	
+	if ( can_shutdown )
+		unbecome_root();
+		
+	/********** END SeRemoteShutdownPrivilege BLOCK **********/
+
+	DEBUG(3,("_reg_abort_shutdown: Running the command `%s' gave %d\n",
+		abort_shutdown_script, ret));
+		
+
+	return (ret == 0) ? WERR_OK : WERR_ACCESS_DENIED;
+}
+
+/*******************************************************************
+ ********************************************************************/
+
+static int validate_reg_filename( pstring fname )
+{
+	char *p;
+	int num_services = lp_numservices();
+	int snum;
+	pstring share_path;
+	pstring unix_fname;
+	
+	/* convert to a unix path, stripping the C:\ along the way */
+	
+	if ( !(p = valid_share_pathname( fname ) ))
+		return -1;
+
+	/* has to exist within a valid file share */
+			
+	for ( snum=0; snum<num_services; snum++ ) {
+	
+		if ( !lp_snum_ok(snum) || lp_print_ok(snum) )
+			continue;
+		
+		pstrcpy( share_path, lp_pathname(snum) );
+
+		/* make sure we have a path (e.g. [homes] ) */
+
+		if ( strlen( share_path ) == 0 )
+			continue;
+
+		if ( strncmp( share_path, p, strlen( share_path )) == 0 )
+			break;
+	}
+	
+	/* p and fname are overlapping memory so copy out and back in again */
+	
+	pstrcpy( unix_fname, p );
+	pstrcpy( fname, unix_fname );
+	
+	return (snum < num_services) ? snum : -1;
+}
+
+/*******************************************************************
+ Note: topkeypat is the *full* path that this *key will be 
+ loaded into (including the name of the key)
+ ********************************************************************/
+
+static WERROR reg_load_tree( REGF_FILE *regfile, const char *topkeypath,
+                             REGF_NK_REC *key )
+{
+	REGF_NK_REC *subkey;
+	REGISTRY_KEY registry_key;
+	REGVAL_CTR *values;
+	REGSUBKEY_CTR *subkeys;
+	int i;
+	pstring path;
+	WERROR result = WERR_OK;
+	
+	/* initialize the REGISTRY_KEY structure */
+	
+	if ( !(registry_key.hook = reghook_cache_find(topkeypath)) ) {
+		DEBUG(0,("reg_load_tree: Failed to assigned a REGISTRY_HOOK to [%s]\n",
+			topkeypath ));
+		return WERR_BADFILE;
+	}
+	pstrcpy( registry_key.name, topkeypath );
+	
+	/* now start parsing the values and subkeys */
+
+	if ( !(subkeys = TALLOC_ZERO_P( regfile->mem_ctx, REGSUBKEY_CTR )) )
+		return WERR_NOMEM;
+	
+	if ( !(values = TALLOC_ZERO_P( subkeys, REGVAL_CTR )) )
+		return WERR_NOMEM;
+
+	/* copy values into the REGVAL_CTR */
+	
+	for ( i=0; i<key->num_values; i++ ) {
+		regval_ctr_addvalue( values, key->values[i].valuename, key->values[i].type,
+			(char*)key->values[i].data, (key->values[i].data_size & ~VK_DATA_IN_OFFSET) );
+	}
+
+	/* copy subkeys into the REGSUBKEY_CTR */
+	
+	key->subkey_index = 0;
+	while ( (subkey = regfio_fetch_subkey( regfile, key )) ) {
+		regsubkey_ctr_addkey( subkeys, subkey->keyname );
+	}
+	
+	/* write this key and values out */
+	
+	if ( !store_reg_values( &registry_key, values ) 
+		|| !store_reg_keys( &registry_key, subkeys ) )
+	{
+		DEBUG(0,("reg_load_tree: Failed to load %s!\n", topkeypath));
+		result = WERR_REG_IO_FAILURE;
+	}
+	
+	TALLOC_FREE( subkeys );
+	
+	if ( !W_ERROR_IS_OK(result) )
+		return result;
+	
+	/* now continue to load each subkey registry tree */
+
+	key->subkey_index = 0;
+	while ( (subkey = regfio_fetch_subkey( regfile, key )) ) {
+		pstr_sprintf( path, "%s%s%s", topkeypath, "\\", subkey->keyname );
+		result = reg_load_tree( regfile, path, subkey );
+		if ( !W_ERROR_IS_OK(result) )
+			break;
+	}
+
+	return result;
+}
+
+/*******************************************************************
+ ********************************************************************/
+
+static WERROR restore_registry_key ( REGISTRY_KEY *krecord, const char *fname )
+{
+	REGF_FILE *regfile;
+	REGF_NK_REC *rootkey;
+	WERROR result;
+		
+	/* open the registry file....fail if the file already exists */
+	
+	if ( !(regfile = regfio_open( fname, (O_RDONLY), 0 )) ) {
+                DEBUG(0,("backup_registry_key: failed to open \"%s\" (%s)\n", 
+			fname, strerror(errno) ));
+		return ( ntstatus_to_werror(map_nt_error_from_unix( errno )) );
+        }
+	
+	/* get the rootkey from the regf file and then load the tree
+	   via recursive calls */
+	   
+	if ( !(rootkey = regfio_rootkey( regfile )) ) {
+		regfio_close( regfile );
+		return WERR_REG_FILE_INVALID;
+	}
+	
+	result = reg_load_tree( regfile, krecord->name, rootkey );
+		
+	/* cleanup */
+	
+	regfio_close( regfile );
+	
+	return result;
+}
+
+/*******************************************************************
+ ********************************************************************/
+
+WERROR _reg_restore_key(pipes_struct *p, REG_Q_RESTORE_KEY  *q_u, REG_R_RESTORE_KEY *r_u)
+{
+	REGISTRY_KEY	*regkey = find_regkey_index_by_hnd( p, &q_u->pol );
+	pstring         filename;
+	int             snum;
+	
+	if ( !regkey )
+		return WERR_BADFID; 
+
+	rpcstr_pull(filename, q_u->filename.string->buffer, sizeof(filename), q_u->filename.string->uni_str_len*2, STR_TERMINATE);
+
+	DEBUG(8,("_reg_restore_key: verifying restore of key [%s] from \"%s\"\n", regkey->name, filename));
+
+	if ( (snum = validate_reg_filename( filename )) == -1 )
+		return WERR_OBJECT_PATH_INVALID;
+		
+	/* user must posses SeRestorePrivilege for this this proceed */
+	
+	if ( !user_has_privileges( p->pipe_user.nt_user_token, &se_restore ) )
+		return WERR_ACCESS_DENIED;
+		
+	DEBUG(2,("_reg_restore_key: Restoring [%s] from %s in share %s\n", regkey->name, filename, lp_servicename(snum) ));
+
+	return restore_registry_key( regkey, filename );
+}
+
+/********************************************************************
+********************************************************************/
+
+static WERROR reg_write_tree( REGF_FILE *regfile, const char *keypath,
+                              REGF_NK_REC *parent, SEC_DESC *sec_desc )
+{
+	REGF_NK_REC *key;
+	REGVAL_CTR *values;
+	REGSUBKEY_CTR *subkeys;
+	int i, num_subkeys;
+	pstring key_tmp;
+	char *keyname, *parentpath;
+	pstring subkeypath;
+	char *subkeyname;
+	REGISTRY_KEY registry_key;
+	WERROR result = WERR_OK;
+	
+	if ( !regfile )
+		return WERR_GENERAL_FAILURE;
+		
+	if ( !keypath )
+		return WERR_OBJECT_PATH_INVALID;
+		
+	/* split up the registry key path */
+	
+	pstrcpy( key_tmp, keypath );
+	if ( !reg_split_key( key_tmp, &parentpath, &keyname ) )
+		return WERR_OBJECT_PATH_INVALID;
+
+	if ( !keyname )
+		keyname = parentpath;
+
+	/* we need a REGISTRY_KEY object here to enumerate subkeys and values */
+	
+	ZERO_STRUCT( registry_key );
+	pstrcpy( registry_key.name, keypath );
+	if ( !(registry_key.hook = reghook_cache_find( registry_key.name )) )
+		return WERR_BADFILE;
+
+	
+	/* lookup the values and subkeys */
+	
+	if ( !(subkeys = TALLOC_ZERO_P( regfile->mem_ctx, REGSUBKEY_CTR )) )
+		return WERR_NOMEM;
+
+	if ( !(values = TALLOC_ZERO_P( subkeys, REGVAL_CTR )) )
+		return WERR_NOMEM;
+
+	fetch_reg_keys( &registry_key, subkeys );
+	fetch_reg_values( &registry_key, values );
+
+	/* write out this key */
+		
+	if ( !(key = regfio_write_key( regfile, keyname, values, subkeys, sec_desc, parent )) ) {
+		result = WERR_CAN_NOT_COMPLETE;
+		goto done;
+	}
+
+	/* write each one of the subkeys out */
+
+	num_subkeys = regsubkey_ctr_numkeys( subkeys );
+	for ( i=0; i<num_subkeys; i++ ) {
+		subkeyname = regsubkey_ctr_specific_key( subkeys, i );
+		pstr_sprintf( subkeypath, "%s\\%s", keypath, subkeyname );
+		result = reg_write_tree( regfile, subkeypath, key, sec_desc );
+		if ( !W_ERROR_IS_OK(result) )
+			goto done;
+	}
+
+	DEBUG(6,("reg_write_tree: wrote key [%s]\n", keypath ));
+
+done:
+	TALLOC_FREE( subkeys );
+
+	return result;
+}
+
+/*******************************************************************
+ ********************************************************************/
+
+static WERROR make_default_reg_sd( TALLOC_CTX *ctx, SEC_DESC **psd )
+{
+	DOM_SID adm_sid, owner_sid;
+	SEC_ACE ace[2];         /* at most 2 entries */
+	SEC_ACCESS mask;
+	SEC_ACL *psa = NULL;
+	size_t sd_size;
+
+	/* set the owner to BUILTIN\Administrator */
+
+	sid_copy(&owner_sid, &global_sid_Builtin);
+	sid_append_rid(&owner_sid, DOMAIN_USER_RID_ADMIN );
+	
+
+	/* basic access for Everyone */
+
+	init_sec_access(&mask, reg_generic_map.generic_execute | reg_generic_map.generic_read );
+	init_sec_ace(&ace[0], &global_sid_World, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0);
+
+	/* add Full Access 'BUILTIN\Administrators' */
+
+	init_sec_access(&mask, reg_generic_map.generic_all);
+	sid_copy(&adm_sid, &global_sid_Builtin);
+	sid_append_rid(&adm_sid, BUILTIN_ALIAS_RID_ADMINS);
+	init_sec_ace(&ace[1], &adm_sid, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0);
+
+        /* create the security descriptor */
+
+        if ((psa = make_sec_acl(ctx, NT4_ACL_REVISION, 2, ace)) == NULL)
+                return WERR_NOMEM;
+
+        if ((*psd = make_sec_desc(ctx, SEC_DESC_REVISION, SEC_DESC_SELF_RELATIVE, &owner_sid, NULL, NULL, psa, &sd_size)) == NULL)
+                return WERR_NOMEM;
+
+	return WERR_OK;
+}
+
+/*******************************************************************
+ ********************************************************************/
+
+static WERROR backup_registry_key ( REGISTRY_KEY *krecord, const char *fname )
+{
+	REGF_FILE *regfile;
+	WERROR result;
+	SEC_DESC *sd = NULL;
+	
+	/* open the registry file....fail if the file already exists */
+	
+	if ( !(regfile = regfio_open( fname, (O_RDWR|O_CREAT|O_EXCL), (S_IREAD|S_IWRITE) )) ) {
+                DEBUG(0,("backup_registry_key: failed to open \"%s\" (%s)\n", 
+			fname, strerror(errno) ));
+		return ( ntstatus_to_werror(map_nt_error_from_unix( errno )) );
+        }
+	
+	if ( !W_ERROR_IS_OK(result = make_default_reg_sd( regfile->mem_ctx, &sd )) ) {
+		regfio_close( regfile );
+		return result;
+	}
+		
+	/* write the registry tree to the file  */
+	
+	result = reg_write_tree( regfile, krecord->name, NULL, sd );
+		
+	/* cleanup */
+	
+	regfio_close( regfile );
+	
+	return result;
+}
+
+/*******************************************************************
+ ********************************************************************/
+
+WERROR _reg_save_key(pipes_struct *p, REG_Q_SAVE_KEY  *q_u, REG_R_SAVE_KEY *r_u)
+{
+	REGISTRY_KEY	*regkey = find_regkey_index_by_hnd( p, &q_u->pol );
+	pstring         filename;
+	int             snum;
+	
+	if ( !regkey )
+		return WERR_BADFID; 
+
+	rpcstr_pull(filename, q_u->filename.string->buffer, sizeof(filename), q_u->filename.string->uni_str_len*2, STR_TERMINATE);
+
+	DEBUG(8,("_reg_save_key: verifying backup of key [%s] to \"%s\"\n", regkey->name, filename));
+	
+	if ( (snum = validate_reg_filename( filename )) == -1 )
+		return WERR_OBJECT_PATH_INVALID;
+		
+	DEBUG(2,("_reg_save_key: Saving [%s] to %s in share %s\n", regkey->name, filename, lp_servicename(snum) ));
+		
+	return backup_registry_key( regkey, filename );
+}
+
+/*******************************************************************
+ ********************************************************************/
+
+WERROR _reg_create_key_ex(pipes_struct *p, REG_Q_CREATE_KEY_EX *q_u, REG_R_CREATE_KEY_EX *r_u)
+{
+	REGISTRY_KEY *parent = find_regkey_index_by_hnd(p, &q_u->handle);
+	REGISTRY_KEY *newparentinfo, *keyinfo;
+	POLICY_HND newparent_handle;
+	REGSUBKEY_CTR *subkeys;
+	BOOL write_result;
+	pstring name;
+	WERROR result;
+
+	if ( !parent )
+		return WERR_BADFID;
+		
+	rpcstr_pull( name, q_u->name.string->buffer, sizeof(name), q_u->name.string->uni_str_len*2, 0 );
+	
+	/* ok.  Here's what we do.  */
+
+	if ( strrchr( name, '\\' ) ) {
+		pstring newkeyname;
+		char *ptr;
+		
+		/* (1) check for enumerate rights on the parent handle.  CLients can try 
+		       create things like 'SOFTWARE\Samba' on the HKLM handle. 
+		   (2) open the path to the child parent key if necessary */
+	
+		if ( !(parent->access_granted & SEC_RIGHTS_ENUM_SUBKEYS) )
+			return WERR_ACCESS_DENIED;
+		
+		pstrcpy( newkeyname, name );
+		ptr = strrchr( newkeyname, '\\' );
+		*ptr = '\0';
+
+		result = open_registry_key( p, &newparent_handle, &newparentinfo, 
+			parent, newkeyname, (REG_KEY_READ|REG_KEY_WRITE) );
+			
+		if ( !W_ERROR_IS_OK(result) )
+			return result;
+
+		/* copy the new key name (just the lower most keyname) */
+
+		pstrcpy( name, ptr+1 );
+	}
+	else {
+		/* use the existing open key information */
+		newparentinfo = parent;
+		memcpy( &newparent_handle, &q_u->handle, sizeof(POLICY_HND) );
+	}
+	
+	/* (3) check for create subkey rights on the correct parent */
+	
+	if ( !(newparentinfo->access_granted & SEC_RIGHTS_CREATE_SUBKEY) ) {
+		result = WERR_ACCESS_DENIED;
+		goto done;
+	}	
+		
+	if ( !(subkeys = TALLOC_ZERO_P( p->mem_ctx, REGSUBKEY_CTR )) ) {
+		result = WERR_NOMEM;
+		goto done;
+	}
+
+	/* (4) lookup the current keys and add the new one */
+	
+	fetch_reg_keys( newparentinfo, subkeys );
+	regsubkey_ctr_addkey( subkeys, name );
+	
+	/* now write to the registry backend */
+	
+	write_result = store_reg_keys( newparentinfo, subkeys );
+	
+	TALLOC_FREE( subkeys );
+
+	if ( !write_result )
+		return WERR_REG_IO_FAILURE;
+		
+	/* (5) open the new key and return the handle.  Note that it is probably 
+	   not correct to grant full access on this open handle. */
+	
+	result = open_registry_key( p, &r_u->handle, &keyinfo, newparentinfo, name, REG_KEY_READ );
+	keyinfo->access_granted = REG_KEY_ALL;
+
+done:
+	/* close any intermediate key handles */
+	
+	if ( newparentinfo != parent )
+		close_registry_key( p, &newparent_handle );
+		
+	return result;
+}
+
+
+/*******************************************************************
+ ********************************************************************/
+
+WERROR _reg_set_value(pipes_struct *p, REG_Q_SET_VALUE  *q_u, REG_R_SET_VALUE *r_u)
+{
+	REGISTRY_KEY *key = find_regkey_index_by_hnd(p, &q_u->handle);
+	REGVAL_CTR *values;
+	BOOL write_result;
+	fstring valuename;
+
+	if ( !key )
+		return WERR_BADFID;
+		
+	/* access checks first */
+	
+	if ( !(key->access_granted & SEC_RIGHTS_SET_VALUE) )
+		return WERR_ACCESS_DENIED;
+		
+	rpcstr_pull( valuename, q_u->name.string->buffer, sizeof(valuename), q_u->name.string->uni_str_len*2, 0 );
+
+	/* verify the name */
+
+	if ( !*valuename )
+		return WERR_INVALID_PARAM;
+
+	DEBUG(8,("_reg_set_value: Setting value for [%s:%s]\n", key->name, valuename));
+		
+	if ( !(values = TALLOC_ZERO_P( p->mem_ctx, REGVAL_CTR )) )
+		return WERR_NOMEM; 
+	
+	/* lookup the current values and add the new one */
+	
+	fetch_reg_values( key, values );
+	
+	regval_ctr_addvalue( values, valuename, q_u->type, (char*)q_u->value.buffer, q_u->value.buf_len );
+	
+	/* now write to the registry backend */
+	
+	write_result = store_reg_values( key, values );
+	
+	TALLOC_FREE( values );
+	
+	if ( !write_result )
+		return WERR_REG_IO_FAILURE;
+		
+	return WERR_OK;
+}
+
+/*******************************************************************
+ ********************************************************************/
+
+WERROR _reg_delete_key(pipes_struct *p, REG_Q_DELETE_KEY  *q_u, REG_R_DELETE_KEY *r_u)
+{
+	REGISTRY_KEY *parent = find_regkey_index_by_hnd(p, &q_u->handle);
+	REGISTRY_KEY *newparentinfo = NULL;
+	POLICY_HND newparent_handle;
+	REGSUBKEY_CTR *subkeys;
+	BOOL write_result;
+	pstring name;
+	WERROR result;
+
+	if ( !parent )
+		return WERR_BADFID;
+
+	/* MSDN says parent the handle must have been opened with DELETE access */
+
+	/* (1) check for delete rights on the parent */
+	
+	if ( !(parent->access_granted & STD_RIGHT_DELETE_ACCESS) ) {
+		result = WERR_ACCESS_DENIED;
+		goto done;
+	}
+		
+	rpcstr_pull( name, q_u->name.string->buffer, sizeof(name), q_u->name.string->uni_str_len*2, 0 );
+		
+	/* ok.  Here's what we do.  */
+
+	if ( strrchr( name, '\\' ) ) {
+		pstring newkeyname;
+		char *ptr;
+		
+		/* (2) open the path to the child parent key if necessary */
+		/* split the registry path and save the subkeyname */
+	
+		pstrcpy( newkeyname, name );
+		ptr = strrchr( newkeyname, '\\' );
+		*ptr = '\0';
+		pstrcpy( name, ptr+1 );
+
+		result = open_registry_key( p, &newparent_handle, &newparentinfo, parent, newkeyname, (REG_KEY_READ|REG_KEY_WRITE) );
+		if ( !W_ERROR_IS_OK(result) )
+			return result;
+	}
+	else {
+		/* use the existing open key information */
+		newparentinfo = parent;
+	}
+	
+	if ( !(subkeys = TALLOC_ZERO_P( p->mem_ctx, REGSUBKEY_CTR )) ) {
+		result = WERR_NOMEM;
+		goto done;
+	}
+	
+	/* lookup the current keys and delete the new one */
+	
+	fetch_reg_keys( newparentinfo, subkeys );
+	
+	regsubkey_ctr_delkey( subkeys, name );
+	
+	/* now write to the registry backend */
+	
+	write_result = store_reg_keys( newparentinfo, subkeys );
+	
+	TALLOC_FREE( subkeys );
+
+	result = write_result ? WERR_OK : WERR_REG_IO_FAILURE;
+	
+done:
+	/* close any intermediate key handles */
+	
+	if ( newparentinfo != parent )
+		close_registry_key( p, &newparent_handle );
+
+	return result;
+}
+
+
+/*******************************************************************
+ ********************************************************************/
+
+WERROR _reg_delete_value(pipes_struct *p, REG_Q_DELETE_VALUE  *q_u, REG_R_DELETE_VALUE *r_u)
+{
+	REGISTRY_KEY *key = find_regkey_index_by_hnd(p, &q_u->handle);
+	REGVAL_CTR *values;
+	BOOL write_result;
+	fstring valuename;
+	
+	if ( !key )
+		return WERR_BADFID;
+		
+	/* access checks first */
+	
+	if ( !(key->access_granted & SEC_RIGHTS_SET_VALUE) )
+		return WERR_ACCESS_DENIED;
+
+	rpcstr_pull( valuename, q_u->name.string->buffer, sizeof(valuename), q_u->name.string->uni_str_len*2, 0 );
+
+	if ( !*valuename )
+		return WERR_INVALID_PARAM;
+
+	DEBUG(8,("_reg_delete_value: Setting value for [%s:%s]\n", key->name, valuename));
+
+	if ( !(values = TALLOC_ZERO_P( p->mem_ctx, REGVAL_CTR )) )
+		return WERR_NOMEM;
+	
+	/* lookup the current values and add the new one */
+	
+	fetch_reg_values( key, values );
+	
+	regval_ctr_delvalue( values, valuename );
+	
+	/* now write to the registry backend */
+	
+	write_result = store_reg_values( key, values );
+	
+	TALLOC_FREE( values );
+	
+	if ( !write_result )
+		return WERR_REG_IO_FAILURE;
+		
+	return WERR_OK;
+}
+
+/*******************************************************************
+ ********************************************************************/
+
+WERROR _reg_get_key_sec(pipes_struct *p, REG_Q_GET_KEY_SEC  *q_u, REG_R_GET_KEY_SEC *r_u)
+{
+	REGISTRY_KEY *key = find_regkey_index_by_hnd(p, &q_u->handle);
+
+	if ( !key )
+		return WERR_BADFID;
+		
+	/* access checks first */
+	
+	if ( !(key->access_granted & STD_RIGHT_READ_CONTROL_ACCESS) )
+		return WERR_ACCESS_DENIED;
+		
+	return WERR_ACCESS_DENIED;
+}
+
+/*******************************************************************
+ ********************************************************************/
+
+WERROR _reg_set_key_sec(pipes_struct *p, REG_Q_SET_KEY_SEC  *q_u, REG_R_SET_KEY_SEC *r_u)
+{
+	REGISTRY_KEY *key = find_regkey_index_by_hnd(p, &q_u->handle);
+
+	if ( !key )
+		return WERR_BADFID;
+		
+	/* access checks first */
+	
+	if ( !(key->access_granted & STD_RIGHT_WRITE_DAC_ACCESS) )
+		return WERR_ACCESS_DENIED;
+		
+	return WERR_ACCESS_DENIED;
+}

Copied: branches/samba/upstream/source/rpc_server/srv_samr.c (from rev 1928, branches/samba/upstream/source/rpc_server/srv_samr.c)
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_samr.c	                        (rev 0)
+++ branches/samba/upstream/source/rpc_server/srv_samr.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,1605 @@
+/* 
+ *  Unix SMB/CIFS implementation.
+ *  RPC Pipe client / server routines
+ *  Copyright (C) Andrew Tridgell              1992-1997,
+ *  Copyright (C) Luke Kenneth Casson Leighton 1996-1997,
+ *  Copyright (C) Paul Ashton                       1997,
+ *  Copyright (C) Marc Jacobsen			    1999,
+ *  Copyright (C) Jean François Micouleau      1998-2001,
+ *  Copyright (C) Jim McDonough <jmcd at us.ibm.com> 2002-2003.
+ *	
+ * 	Split into interface and implementation modules by, 
+ *
+ *  Copyright (C) Jeremy Allison                    2001.
+ *  
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/*
+ * This is the interface to the SAMR code.
+ */
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_RPC_SRV
+
+/*******************************************************************
+ api_samr_close_hnd
+ ********************************************************************/
+
+static BOOL api_samr_close_hnd(pipes_struct *p)
+{
+	SAMR_Q_CLOSE_HND q_u;
+	SAMR_R_CLOSE_HND r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!samr_io_q_close_hnd("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_close_hnd: unable to unmarshall SAMR_Q_CLOSE_HND.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_close_hnd(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!samr_io_r_close_hnd("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_close_hnd: unable to marshall SAMR_R_CLOSE_HND.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_open_domain
+ ********************************************************************/
+
+static BOOL api_samr_open_domain(pipes_struct *p)
+{
+	SAMR_Q_OPEN_DOMAIN q_u;
+	SAMR_R_OPEN_DOMAIN r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!samr_io_q_open_domain("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_open_domain: unable to unmarshall SAMR_Q_OPEN_DOMAIN.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_open_domain(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!samr_io_r_open_domain("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_open_domain: unable to marshall SAMR_R_OPEN_DOMAIN.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_get_usrdom_pwinfo
+ ********************************************************************/
+
+static BOOL api_samr_get_usrdom_pwinfo(pipes_struct *p)
+{
+	SAMR_Q_GET_USRDOM_PWINFO q_u;
+	SAMR_R_GET_USRDOM_PWINFO r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!samr_io_q_get_usrdom_pwinfo("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_get_usrdom_pwinfo: unable to unmarshall SAMR_Q_GET_USRDOM_PWINFO.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_get_usrdom_pwinfo(p, &q_u, &r_u);
+
+	if(!samr_io_r_get_usrdom_pwinfo("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_get_usrdom_pwinfo: unable to marshall SAMR_R_GET_USRDOM_PWINFO.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_set_sec_obj
+ ********************************************************************/
+
+static BOOL api_samr_set_sec_obj(pipes_struct *p)
+{
+	SAMR_Q_SET_SEC_OBJ q_u;
+	SAMR_R_SET_SEC_OBJ r_u;
+	
+	prs_struct *data  = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+	
+	if(!samr_io_q_set_sec_obj("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_set_sec_obj: unable to unmarshall SAMR_Q_SET_SEC_OBJ.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_set_sec_obj(p, &q_u, &r_u);
+
+	if(!samr_io_r_set_sec_obj("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_set_sec_obj: unable to marshall SAMR_R_SET_SEC_OBJ.\n"));
+		return False;
+	}
+	
+	return True;
+}
+
+/*******************************************************************
+ api_samr_query_sec_obj
+ ********************************************************************/
+
+static BOOL api_samr_query_sec_obj(pipes_struct *p)
+{
+	SAMR_Q_QUERY_SEC_OBJ q_u;
+	SAMR_R_QUERY_SEC_OBJ r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!samr_io_q_query_sec_obj("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_query_sec_obj: unable to unmarshall SAMR_Q_QUERY_SEC_OBJ.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_query_sec_obj(p, &q_u, &r_u);
+
+	if(!samr_io_r_query_sec_obj("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_query_sec_obj: unable to marshall SAMR_R_QUERY_SEC_OBJ.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_enum_dom_users
+ ********************************************************************/
+
+static BOOL api_samr_enum_dom_users(pipes_struct *p)
+{
+	SAMR_Q_ENUM_DOM_USERS q_u;
+	SAMR_R_ENUM_DOM_USERS r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the samr open */
+	if(!samr_io_q_enum_dom_users("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_enum_dom_users: unable to unmarshall SAMR_Q_ENUM_DOM_USERS.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_enum_dom_users(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!samr_io_r_enum_dom_users("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_enum_dom_users: unable to marshall SAMR_R_ENUM_DOM_USERS.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_enum_dom_groups
+ ********************************************************************/
+
+static BOOL api_samr_enum_dom_groups(pipes_struct *p)
+{
+	SAMR_Q_ENUM_DOM_GROUPS q_u;
+	SAMR_R_ENUM_DOM_GROUPS r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the samr open */
+	if(!samr_io_q_enum_dom_groups("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_enum_dom_groups: unable to unmarshall SAMR_Q_ENUM_DOM_GROUPS.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_enum_dom_groups(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!samr_io_r_enum_dom_groups("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_enum_dom_groups: unable to marshall SAMR_R_ENUM_DOM_GROUPS.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_enum_dom_aliases
+ ********************************************************************/
+
+static BOOL api_samr_enum_dom_aliases(pipes_struct *p)
+{
+	SAMR_Q_ENUM_DOM_ALIASES q_u;
+	SAMR_R_ENUM_DOM_ALIASES r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+	
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the samr open */
+	if(!samr_io_q_enum_dom_aliases("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_enum_dom_aliases: unable to unmarshall SAMR_Q_ENUM_DOM_ALIASES.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_enum_dom_aliases(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!samr_io_r_enum_dom_aliases("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_enum_dom_aliases: unable to marshall SAMR_R_ENUM_DOM_ALIASES.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_query_dispinfo
+ ********************************************************************/
+
+static BOOL api_samr_query_dispinfo(pipes_struct *p)
+{
+	SAMR_Q_QUERY_DISPINFO q_u;
+	SAMR_R_QUERY_DISPINFO r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!samr_io_q_query_dispinfo("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_query_dispinfo: unable to unmarshall SAMR_Q_QUERY_DISPINFO.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_query_dispinfo(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!samr_io_r_query_dispinfo("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_query_dispinfo: unable to marshall SAMR_R_QUERY_DISPINFO.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_query_aliasinfo
+ ********************************************************************/
+
+static BOOL api_samr_query_aliasinfo(pipes_struct *p)
+{
+	SAMR_Q_QUERY_ALIASINFO q_u;
+	SAMR_R_QUERY_ALIASINFO r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the samr open */
+	if(!samr_io_q_query_aliasinfo("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_query_aliasinfo: unable to unmarshall SAMR_Q_QUERY_ALIASINFO.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_query_aliasinfo(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!samr_io_r_query_aliasinfo("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_query_aliasinfo: unable to marshall SAMR_R_QUERY_ALIASINFO.\n"));
+		return False;
+	}
+  
+	return True;
+}
+
+/*******************************************************************
+ api_samr_lookup_names
+ ********************************************************************/
+
+static BOOL api_samr_lookup_names(pipes_struct *p)
+{
+	SAMR_Q_LOOKUP_NAMES q_u;
+	SAMR_R_LOOKUP_NAMES r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the samr lookup names */
+	if(!samr_io_q_lookup_names("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_lookup_names: unable to unmarshall SAMR_Q_LOOKUP_NAMES.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_lookup_names(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!samr_io_r_lookup_names("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_lookup_names: unable to marshall SAMR_R_LOOKUP_NAMES.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_chgpasswd_user
+ ********************************************************************/
+
+static BOOL api_samr_chgpasswd_user(pipes_struct *p)
+{
+	SAMR_Q_CHGPASSWD_USER q_u;
+	SAMR_R_CHGPASSWD_USER r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* change password request */
+	if (!samr_io_q_chgpasswd_user("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_chgpasswd_user: Failed to unmarshall SAMR_Q_CHGPASSWD_USER.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_chgpasswd_user(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!samr_io_r_chgpasswd_user("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_chgpasswd_user: Failed to marshall SAMR_R_CHGPASSWD_USER.\n" ));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_lookup_rids
+ ********************************************************************/
+
+static BOOL api_samr_lookup_rids(pipes_struct *p)
+{
+	SAMR_Q_LOOKUP_RIDS q_u;
+	SAMR_R_LOOKUP_RIDS r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the samr lookup names */
+	if(!samr_io_q_lookup_rids("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_lookup_rids: unable to unmarshall SAMR_Q_LOOKUP_RIDS.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_lookup_rids(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!samr_io_r_lookup_rids("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_lookup_rids: unable to marshall SAMR_R_LOOKUP_RIDS.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_open_user
+ ********************************************************************/
+
+static BOOL api_samr_open_user(pipes_struct *p)
+{
+	SAMR_Q_OPEN_USER q_u;
+	SAMR_R_OPEN_USER r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!samr_io_q_open_user("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_open_user: unable to unmarshall SAMR_Q_OPEN_USER.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_open_user(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!samr_io_r_open_user("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_open_user: unable to marshall SAMR_R_OPEN_USER.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_query_userinfo
+ ********************************************************************/
+
+static BOOL api_samr_query_userinfo(pipes_struct *p)
+{
+	SAMR_Q_QUERY_USERINFO q_u;
+	SAMR_R_QUERY_USERINFO r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!samr_io_q_query_userinfo("", &q_u, data, 0)){
+		DEBUG(0,("api_samr_query_userinfo: unable to unmarshall SAMR_Q_QUERY_USERINFO.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_query_userinfo(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!samr_io_r_query_userinfo("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_query_userinfo: unable to marshall SAMR_R_QUERY_USERINFO.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_query_usergroups
+ ********************************************************************/
+
+static BOOL api_samr_query_usergroups(pipes_struct *p)
+{
+	SAMR_Q_QUERY_USERGROUPS q_u;
+	SAMR_R_QUERY_USERGROUPS r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!samr_io_q_query_usergroups("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_query_usergroups: unable to unmarshall SAMR_Q_QUERY_USERGROUPS.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_query_usergroups(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!samr_io_r_query_usergroups("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_query_usergroups: unable to marshall SAMR_R_QUERY_USERGROUPS.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_query_domain_info
+ ********************************************************************/
+
+static BOOL api_samr_query_domain_info(pipes_struct *p)
+{
+	SAMR_Q_QUERY_DOMAIN_INFO q_u;
+	SAMR_R_QUERY_DOMAIN_INFO r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!samr_io_q_query_domain_info("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_query_domain_info: unable to unmarshall SAMR_Q_QUERY_DOMAIN_INFO.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_query_domain_info(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!samr_io_r_query_domain_info("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_query_domain_info: unable to marshall SAMR_R_QUERY_DOMAIN_INFO.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_create_user
+ ********************************************************************/
+
+static BOOL api_samr_create_user(pipes_struct *p)
+{
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	SAMR_Q_CREATE_USER q_u;
+	SAMR_R_CREATE_USER r_u;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the samr create user */
+	if (!samr_io_q_create_user("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_create_user: Unable to unmarshall SAMR_Q_CREATE_USER.\n"));
+		return False;
+	}
+
+	r_u.status=_samr_create_user(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!samr_io_r_create_user("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_create_user: Unable to marshall SAMR_R_CREATE_USER.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_connect_anon
+ ********************************************************************/
+
+static BOOL api_samr_connect_anon(pipes_struct *p)
+{
+	SAMR_Q_CONNECT_ANON q_u;
+	SAMR_R_CONNECT_ANON r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the samr open policy */
+	if(!samr_io_q_connect_anon("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_connect_anon: unable to unmarshall SAMR_Q_CONNECT_ANON.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_connect_anon(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!samr_io_r_connect_anon("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_connect_anon: unable to marshall SAMR_R_CONNECT_ANON.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_connect
+ ********************************************************************/
+
+static BOOL api_samr_connect(pipes_struct *p)
+{
+	SAMR_Q_CONNECT q_u;
+	SAMR_R_CONNECT r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the samr open policy */
+	if(!samr_io_q_connect("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_connect: unable to unmarshall SAMR_Q_CONNECT.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_connect(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!samr_io_r_connect("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_connect: unable to marshall SAMR_R_CONNECT.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_connect4
+ ********************************************************************/
+
+static BOOL api_samr_connect4(pipes_struct *p)
+{
+	SAMR_Q_CONNECT4 q_u;
+	SAMR_R_CONNECT4 r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the samr open policy */
+	if(!samr_io_q_connect4("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_connect4: unable to unmarshall SAMR_Q_CONNECT4.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_connect4(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!samr_io_r_connect4("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_connect4: unable to marshall SAMR_R_CONNECT4.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_chgpasswd_user3
+ ********************************************************************/
+
+static BOOL api_samr_chgpasswd_user3(pipes_struct *p)
+{
+	SAMR_Q_CHGPASSWD_USER3 q_u;
+	SAMR_R_CHGPASSWD_USER3 r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* change password request */
+	if (!samr_io_q_chgpasswd_user3("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_chgpasswd_user3: Failed to unmarshall SAMR_Q_CHGPASSWD_USER3.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_chgpasswd_user3(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!samr_io_r_chgpasswd_user3("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_chgpasswd_user3: Failed to marshall SAMR_R_CHGPASSWD_USER3.\n" ));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_connect5
+ ********************************************************************/
+
+static BOOL api_samr_connect5(pipes_struct *p)
+{
+	SAMR_Q_CONNECT5 q_u;
+	SAMR_R_CONNECT5 r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the samr open policy */
+	if(!samr_io_q_connect5("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_connect5: unable to unmarshall SAMR_Q_CONNECT5.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_connect5(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!samr_io_r_connect5("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_connect5: unable to marshall SAMR_R_CONNECT5.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/**********************************************************************
+ api_samr_lookup_domain
+ **********************************************************************/
+
+static BOOL api_samr_lookup_domain(pipes_struct *p)
+{
+	SAMR_Q_LOOKUP_DOMAIN q_u;
+	SAMR_R_LOOKUP_DOMAIN r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+  
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!samr_io_q_lookup_domain("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_lookup_domain: Unable to unmarshall SAMR_Q_LOOKUP_DOMAIN.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_lookup_domain(p, &q_u, &r_u);
+	
+	if(!samr_io_r_lookup_domain("", &r_u, rdata, 0)){
+		DEBUG(0,("api_samr_lookup_domain: Unable to marshall SAMR_R_LOOKUP_DOMAIN.\n"));
+		return False;
+	}
+	
+	return True;
+}
+
+/**********************************************************************
+ api_samr_enum_domains
+ **********************************************************************/
+
+static BOOL api_samr_enum_domains(pipes_struct *p)
+{
+	SAMR_Q_ENUM_DOMAINS q_u;
+	SAMR_R_ENUM_DOMAINS r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+  
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!samr_io_q_enum_domains("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_enum_domains: Unable to unmarshall SAMR_Q_ENUM_DOMAINS.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_enum_domains(p, &q_u, &r_u);
+
+	if(!samr_io_r_enum_domains("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_enum_domains: Unable to marshall SAMR_R_ENUM_DOMAINS.\n"));
+		return False;
+	}
+	
+	return True;
+}
+
+/*******************************************************************
+ api_samr_open_alias
+ ********************************************************************/
+
+static BOOL api_samr_open_alias(pipes_struct *p)
+{
+	SAMR_Q_OPEN_ALIAS q_u;
+	SAMR_R_OPEN_ALIAS r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the samr open policy */
+	if(!samr_io_q_open_alias("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_open_alias: Unable to unmarshall SAMR_Q_OPEN_ALIAS.\n"));
+		return False;
+	}
+
+	r_u.status=_samr_open_alias(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!samr_io_r_open_alias("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_open_alias: Unable to marshall SAMR_R_OPEN_ALIAS.\n"));
+		return False;
+	}
+	
+	return True;
+}
+
+/*******************************************************************
+ api_samr_set_userinfo
+ ********************************************************************/
+
+static BOOL api_samr_set_userinfo(pipes_struct *p)
+{
+	SAMR_Q_SET_USERINFO q_u;
+	SAMR_R_SET_USERINFO r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!samr_io_q_set_userinfo("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_set_userinfo: Unable to unmarshall SAMR_Q_SET_USERINFO.\n"));
+		/* Fix for W2K SP2 */
+		/* what is that status-code ? - gd */
+		if (q_u.switch_value == 0x1a) {
+			setup_fault_pdu(p, NT_STATUS(DCERPC_FAULT_INVALID_TAG));
+			return True;
+		}
+		return False;
+	}
+
+	r_u.status = _samr_set_userinfo(p, &q_u, &r_u);
+
+	if(!samr_io_r_set_userinfo("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_set_userinfo: Unable to marshall SAMR_R_SET_USERINFO.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_set_userinfo2
+ ********************************************************************/
+
+static BOOL api_samr_set_userinfo2(pipes_struct *p)
+{
+	SAMR_Q_SET_USERINFO2 q_u;
+	SAMR_R_SET_USERINFO2 r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!samr_io_q_set_userinfo2("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_set_userinfo2: Unable to unmarshall SAMR_Q_SET_USERINFO2.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_set_userinfo2(p, &q_u, &r_u);
+
+	if(!samr_io_r_set_userinfo2("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_set_userinfo2: Unable to marshall SAMR_R_SET_USERINFO2.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_query_useraliases
+ ********************************************************************/
+
+static BOOL api_samr_query_useraliases(pipes_struct *p)
+{
+	SAMR_Q_QUERY_USERALIASES q_u;
+	SAMR_R_QUERY_USERALIASES r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!samr_io_q_query_useraliases("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_query_useraliases:  Unable to unmarshall SAMR_Q_QUERY_USERALIASES.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_query_useraliases(p, &q_u, &r_u);
+
+	if (! samr_io_r_query_useraliases("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_query_useraliases:  Unable to nmarshall SAMR_R_QUERY_USERALIASES.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_query_aliasmem
+ ********************************************************************/
+
+static BOOL api_samr_query_aliasmem(pipes_struct *p)
+{
+	SAMR_Q_QUERY_ALIASMEM q_u;
+	SAMR_R_QUERY_ALIASMEM r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!samr_io_q_query_aliasmem("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_query_aliasmem: unable to unmarshall SAMR_Q_QUERY_ALIASMEM.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_query_aliasmem(p, &q_u, &r_u);
+
+	if (!samr_io_r_query_aliasmem("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_query_aliasmem: unable to marshall SAMR_R_QUERY_ALIASMEM.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_query_groupmem
+ ********************************************************************/
+
+static BOOL api_samr_query_groupmem(pipes_struct *p)
+{
+	SAMR_Q_QUERY_GROUPMEM q_u;
+	SAMR_R_QUERY_GROUPMEM r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!samr_io_q_query_groupmem("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_query_groupmem: unable to unmarshall SAMR_Q_QUERY_GROUPMEM.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_query_groupmem(p, &q_u, &r_u);
+
+	if (!samr_io_r_query_groupmem("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_query_groupmem: unable to marshall SAMR_R_QUERY_GROUPMEM.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_add_aliasmem
+ ********************************************************************/
+
+static BOOL api_samr_add_aliasmem(pipes_struct *p)
+{
+	SAMR_Q_ADD_ALIASMEM q_u;
+	SAMR_R_ADD_ALIASMEM r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!samr_io_q_add_aliasmem("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_add_aliasmem: unable to unmarshall SAMR_Q_ADD_ALIASMEM.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_add_aliasmem(p, &q_u, &r_u);
+
+	if (!samr_io_r_add_aliasmem("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_add_aliasmem: unable to marshall SAMR_R_ADD_ALIASMEM.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_del_aliasmem
+ ********************************************************************/
+
+static BOOL api_samr_del_aliasmem(pipes_struct *p)
+{
+	SAMR_Q_DEL_ALIASMEM q_u;
+	SAMR_R_DEL_ALIASMEM r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!samr_io_q_del_aliasmem("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_del_aliasmem: unable to unmarshall SAMR_Q_DEL_ALIASMEM.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_del_aliasmem(p, &q_u, &r_u);
+
+	if (!samr_io_r_del_aliasmem("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_del_aliasmem: unable to marshall SAMR_R_DEL_ALIASMEM.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_add_groupmem
+ ********************************************************************/
+
+static BOOL api_samr_add_groupmem(pipes_struct *p)
+{
+	SAMR_Q_ADD_GROUPMEM q_u;
+	SAMR_R_ADD_GROUPMEM r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!samr_io_q_add_groupmem("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_add_groupmem: unable to unmarshall SAMR_Q_ADD_GROUPMEM.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_add_groupmem(p, &q_u, &r_u);
+
+	if (!samr_io_r_add_groupmem("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_add_groupmem: unable to marshall SAMR_R_ADD_GROUPMEM.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_del_groupmem
+ ********************************************************************/
+
+static BOOL api_samr_del_groupmem(pipes_struct *p)
+{
+	SAMR_Q_DEL_GROUPMEM q_u;
+	SAMR_R_DEL_GROUPMEM r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!samr_io_q_del_groupmem("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_del_groupmem: unable to unmarshall SAMR_Q_DEL_GROUPMEM.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_del_groupmem(p, &q_u, &r_u);
+
+	if (!samr_io_r_del_groupmem("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_del_groupmem: unable to marshall SAMR_R_DEL_GROUPMEM.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_delete_dom_user
+ ********************************************************************/
+
+static BOOL api_samr_delete_dom_user(pipes_struct *p)
+{
+	SAMR_Q_DELETE_DOM_USER q_u;
+	SAMR_R_DELETE_DOM_USER r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!samr_io_q_delete_dom_user("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_delete_dom_user: unable to unmarshall SAMR_Q_DELETE_DOM_USER.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_delete_dom_user(p, &q_u, &r_u);
+
+	if (!samr_io_r_delete_dom_user("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_delete_dom_user: unable to marshall SAMR_R_DELETE_DOM_USER.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_delete_dom_group
+ ********************************************************************/
+
+static BOOL api_samr_delete_dom_group(pipes_struct *p)
+{
+	SAMR_Q_DELETE_DOM_GROUP q_u;
+	SAMR_R_DELETE_DOM_GROUP r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!samr_io_q_delete_dom_group("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_delete_dom_group: unable to unmarshall SAMR_Q_DELETE_DOM_GROUP.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_delete_dom_group(p, &q_u, &r_u);
+
+	if (!samr_io_r_delete_dom_group("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_delete_dom_group: unable to marshall SAMR_R_DELETE_DOM_GROUP.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_delete_dom_alias
+ ********************************************************************/
+
+static BOOL api_samr_delete_dom_alias(pipes_struct *p)
+{
+	SAMR_Q_DELETE_DOM_ALIAS q_u;
+	SAMR_R_DELETE_DOM_ALIAS r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!samr_io_q_delete_dom_alias("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_delete_dom_alias: unable to unmarshall SAMR_Q_DELETE_DOM_ALIAS.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_delete_dom_alias(p, &q_u, &r_u);
+
+	if (!samr_io_r_delete_dom_alias("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_delete_dom_alias: unable to marshall SAMR_R_DELETE_DOM_ALIAS.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_create_dom_group
+ ********************************************************************/
+
+static BOOL api_samr_create_dom_group(pipes_struct *p)
+{
+	SAMR_Q_CREATE_DOM_GROUP q_u;
+	SAMR_R_CREATE_DOM_GROUP r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!samr_io_q_create_dom_group("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_create_dom_group: unable to unmarshall SAMR_Q_CREATE_DOM_GROUP.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_create_dom_group(p, &q_u, &r_u);
+
+	if (!samr_io_r_create_dom_group("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_create_dom_group: unable to marshall SAMR_R_CREATE_DOM_GROUP.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_create_dom_alias
+ ********************************************************************/
+
+static BOOL api_samr_create_dom_alias(pipes_struct *p)
+{
+	SAMR_Q_CREATE_DOM_ALIAS q_u;
+	SAMR_R_CREATE_DOM_ALIAS r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!samr_io_q_create_dom_alias("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_create_dom_alias: unable to unmarshall SAMR_Q_CREATE_DOM_ALIAS.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_create_dom_alias(p, &q_u, &r_u);
+
+	if (!samr_io_r_create_dom_alias("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_create_dom_alias: unable to marshall SAMR_R_CREATE_DOM_ALIAS.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_query_groupinfo
+ ********************************************************************/
+
+static BOOL api_samr_query_groupinfo(pipes_struct *p)
+{
+	SAMR_Q_QUERY_GROUPINFO q_u;
+	SAMR_R_QUERY_GROUPINFO r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!samr_io_q_query_groupinfo("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_query_groupinfo: unable to unmarshall SAMR_Q_QUERY_GROUPINFO.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_query_groupinfo(p, &q_u, &r_u);
+
+	if (!samr_io_r_query_groupinfo("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_query_groupinfo: unable to marshall SAMR_R_QUERY_GROUPINFO.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_set_groupinfo
+ ********************************************************************/
+
+static BOOL api_samr_set_groupinfo(pipes_struct *p)
+{
+	SAMR_Q_SET_GROUPINFO q_u;
+	SAMR_R_SET_GROUPINFO r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!samr_io_q_set_groupinfo("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_set_groupinfo: unable to unmarshall SAMR_Q_SET_GROUPINFO.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_set_groupinfo(p, &q_u, &r_u);
+
+	if (!samr_io_r_set_groupinfo("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_set_groupinfo: unable to marshall SAMR_R_SET_GROUPINFO.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_set_aliasinfo
+ ********************************************************************/
+
+static BOOL api_samr_set_aliasinfo(pipes_struct *p)
+{
+	SAMR_Q_SET_ALIASINFO q_u;
+	SAMR_R_SET_ALIASINFO r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!samr_io_q_set_aliasinfo("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_set_aliasinfo: unable to unmarshall SAMR_Q_SET_ALIASINFO.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_set_aliasinfo(p, &q_u, &r_u);
+
+	if (!samr_io_r_set_aliasinfo("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_set_aliasinfo: unable to marshall SAMR_R_SET_ALIASINFO.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_get_dom_pwinfo
+ ********************************************************************/
+
+static BOOL api_samr_get_dom_pwinfo(pipes_struct *p)
+{
+	SAMR_Q_GET_DOM_PWINFO q_u;
+	SAMR_R_GET_DOM_PWINFO r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!samr_io_q_get_dom_pwinfo("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_get_dom_pwinfo: unable to unmarshall SAMR_Q_GET_DOM_PWINFO.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_get_dom_pwinfo(p, &q_u, &r_u);
+
+	if (!samr_io_r_get_dom_pwinfo("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_get_dom_pwinfo: unable to marshall SAMR_R_GET_DOM_PWINFO.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_open_group
+ ********************************************************************/
+
+static BOOL api_samr_open_group(pipes_struct *p)
+{
+	SAMR_Q_OPEN_GROUP q_u;
+	SAMR_R_OPEN_GROUP r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!samr_io_q_open_group("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_open_group: unable to unmarshall SAMR_Q_OPEN_GROUP.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_open_group(p, &q_u, &r_u);
+
+	if (!samr_io_r_open_group("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_open_group: unable to marshall SAMR_R_OPEN_GROUP.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_remove_sid_foreign_domain
+ ********************************************************************/
+
+static BOOL api_samr_remove_sid_foreign_domain(pipes_struct *p)
+{
+	SAMR_Q_REMOVE_SID_FOREIGN_DOMAIN q_u;
+	SAMR_R_REMOVE_SID_FOREIGN_DOMAIN r_u;
+
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if (!samr_io_q_remove_sid_foreign_domain("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_remove_sid_foreign_domain: unable to unmarshall SAMR_Q_REMOVE_SID_FOREIGN_DOMAIN.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_remove_sid_foreign_domain(p, &q_u, &r_u);
+
+	if (!samr_io_r_remove_sid_foreign_domain("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_remove_sid_foreign_domain: unable to marshall SAMR_R_REMOVE_SID_FOREIGN_DOMAIN.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_query_dom_info2
+ ********************************************************************/
+
+static BOOL api_samr_query_domain_info2(pipes_struct *p)
+{
+	SAMR_Q_QUERY_DOMAIN_INFO2 q_u;
+	SAMR_R_QUERY_DOMAIN_INFO2 r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!samr_io_q_query_domain_info2("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_query_domain_info2: unable to unmarshall SAMR_Q_QUERY_DOMAIN_INFO2.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_query_domain_info2(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!samr_io_r_query_domain_info2("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_query_domain_info2: unable to marshall SAMR_R_QUERY_DOMAIN_INFO2.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_set_dom_info
+ ********************************************************************/
+
+static BOOL api_samr_set_dom_info(pipes_struct *p)
+{
+	SAMR_Q_SET_DOMAIN_INFO q_u;
+	SAMR_R_SET_DOMAIN_INFO r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!samr_io_q_set_domain_info("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_set_dom_info: unable to unmarshall SAMR_Q_SET_DOMAIN_INFO.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_set_dom_info(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!samr_io_r_set_domain_info("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_set_dom_info: unable to marshall SAMR_R_SET_DOMAIN_INFO.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_samr_get_dispenum_index
+ ********************************************************************/
+
+static BOOL api_samr_get_dispenum_index(pipes_struct *p)
+{
+	SAMR_Q_GET_DISPENUM_INDEX q_u;
+	SAMR_R_GET_DISPENUM_INDEX r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!samr_io_q_get_dispenum_index("", &q_u, data, 0)) {
+		DEBUG(0,("api_samr_get_dispenum_index: unable to unmarshall SAMR_Q_GET_DISPENUM_INDEX.\n"));
+		return False;
+	}
+
+	r_u.status = _samr_get_dispenum_index(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!samr_io_r_get_dispenum_index("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_samr_get_dispenum_index: unable to marshall SAMR_R_GET_DISPENUM_INDEX.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+
+/*******************************************************************
+ array of \PIPE\samr operations
+ ********************************************************************/
+
+static struct api_struct api_samr_cmds [] =
+{
+      {"SAMR_CLOSE_HND"         , SAMR_CLOSE_HND        , api_samr_close_hnd        },
+      {"SAMR_CONNECT"           , SAMR_CONNECT          , api_samr_connect          },
+      {"SAMR_CONNECT_ANON"      , SAMR_CONNECT_ANON     , api_samr_connect_anon     },
+      {"SAMR_ENUM_DOMAINS"      , SAMR_ENUM_DOMAINS     , api_samr_enum_domains     },
+      {"SAMR_ENUM_DOM_USERS"    , SAMR_ENUM_DOM_USERS   , api_samr_enum_dom_users   },
+      
+      {"SAMR_ENUM_DOM_GROUPS"   , SAMR_ENUM_DOM_GROUPS  , api_samr_enum_dom_groups  },
+      {"SAMR_ENUM_DOM_ALIASES"  , SAMR_ENUM_DOM_ALIASES , api_samr_enum_dom_aliases },
+      {"SAMR_QUERY_USERALIASES" , SAMR_QUERY_USERALIASES, api_samr_query_useraliases},
+      {"SAMR_QUERY_ALIASMEM"    , SAMR_QUERY_ALIASMEM   , api_samr_query_aliasmem   },
+      {"SAMR_QUERY_GROUPMEM"    , SAMR_QUERY_GROUPMEM   , api_samr_query_groupmem   },
+      {"SAMR_ADD_ALIASMEM"      , SAMR_ADD_ALIASMEM     , api_samr_add_aliasmem     },
+      {"SAMR_DEL_ALIASMEM"      , SAMR_DEL_ALIASMEM     , api_samr_del_aliasmem     },
+      {"SAMR_ADD_GROUPMEM"      , SAMR_ADD_GROUPMEM     , api_samr_add_groupmem     },
+      {"SAMR_DEL_GROUPMEM"      , SAMR_DEL_GROUPMEM     , api_samr_del_groupmem     },
+      
+      {"SAMR_DELETE_DOM_USER"   , SAMR_DELETE_DOM_USER  , api_samr_delete_dom_user  },
+      {"SAMR_DELETE_DOM_GROUP"  , SAMR_DELETE_DOM_GROUP , api_samr_delete_dom_group },
+      {"SAMR_DELETE_DOM_ALIAS"  , SAMR_DELETE_DOM_ALIAS , api_samr_delete_dom_alias },
+      {"SAMR_CREATE_DOM_GROUP"  , SAMR_CREATE_DOM_GROUP , api_samr_create_dom_group },
+      {"SAMR_CREATE_DOM_ALIAS"  , SAMR_CREATE_DOM_ALIAS , api_samr_create_dom_alias },
+      {"SAMR_LOOKUP_NAMES"      , SAMR_LOOKUP_NAMES     , api_samr_lookup_names     },
+      {"SAMR_OPEN_USER"         , SAMR_OPEN_USER        , api_samr_open_user        },
+      {"SAMR_QUERY_USERINFO"    , SAMR_QUERY_USERINFO   , api_samr_query_userinfo   },
+      {"SAMR_SET_USERINFO"      , SAMR_SET_USERINFO     , api_samr_set_userinfo     },
+      {"SAMR_SET_USERINFO2"     , SAMR_SET_USERINFO2    , api_samr_set_userinfo2    },
+      
+      {"SAMR_QUERY_DOMAIN_INFO" , SAMR_QUERY_DOMAIN_INFO, api_samr_query_domain_info},
+      {"SAMR_QUERY_USERGROUPS"  , SAMR_QUERY_USERGROUPS , api_samr_query_usergroups },
+      {"SAMR_QUERY_DISPINFO"    , SAMR_QUERY_DISPINFO   , api_samr_query_dispinfo   },
+      {"SAMR_QUERY_DISPINFO3"   , SAMR_QUERY_DISPINFO3  , api_samr_query_dispinfo   },
+      {"SAMR_QUERY_DISPINFO4"   , SAMR_QUERY_DISPINFO4  , api_samr_query_dispinfo   },
+      
+      {"SAMR_QUERY_ALIASINFO"   , SAMR_QUERY_ALIASINFO  , api_samr_query_aliasinfo  },
+      {"SAMR_QUERY_GROUPINFO"   , SAMR_QUERY_GROUPINFO  , api_samr_query_groupinfo  },
+      {"SAMR_SET_GROUPINFO"     , SAMR_SET_GROUPINFO    , api_samr_set_groupinfo    },
+      {"SAMR_SET_ALIASINFO"     , SAMR_SET_ALIASINFO    , api_samr_set_aliasinfo    },
+      {"SAMR_CREATE_USER"       , SAMR_CREATE_USER      , api_samr_create_user      },
+      {"SAMR_LOOKUP_RIDS"       , SAMR_LOOKUP_RIDS      , api_samr_lookup_rids      },
+      {"SAMR_GET_DOM_PWINFO"    , SAMR_GET_DOM_PWINFO   , api_samr_get_dom_pwinfo   },
+      {"SAMR_CHGPASSWD_USER"    , SAMR_CHGPASSWD_USER   , api_samr_chgpasswd_user   },
+      {"SAMR_OPEN_ALIAS"        , SAMR_OPEN_ALIAS       , api_samr_open_alias       },
+      {"SAMR_OPEN_GROUP"        , SAMR_OPEN_GROUP       , api_samr_open_group       },
+      {"SAMR_OPEN_DOMAIN"       , SAMR_OPEN_DOMAIN      , api_samr_open_domain      },
+      {"SAMR_REMOVE_SID_FOREIGN_DOMAIN"       , SAMR_REMOVE_SID_FOREIGN_DOMAIN      , api_samr_remove_sid_foreign_domain      },
+      {"SAMR_LOOKUP_DOMAIN"     , SAMR_LOOKUP_DOMAIN    , api_samr_lookup_domain    },
+      
+      {"SAMR_QUERY_SEC_OBJECT"  , SAMR_QUERY_SEC_OBJECT , api_samr_query_sec_obj    },
+      {"SAMR_SET_SEC_OBJECT"    , SAMR_SET_SEC_OBJECT   , api_samr_set_sec_obj      },
+      {"SAMR_GET_USRDOM_PWINFO" , SAMR_GET_USRDOM_PWINFO, api_samr_get_usrdom_pwinfo},
+      {"SAMR_QUERY_DOMAIN_INFO2", SAMR_QUERY_DOMAIN_INFO2, api_samr_query_domain_info2},
+      {"SAMR_SET_DOMAIN_INFO"   , SAMR_SET_DOMAIN_INFO  , api_samr_set_dom_info     },
+      {"SAMR_CONNECT4"          , SAMR_CONNECT4         , api_samr_connect4         },
+      {"SAMR_CHGPASSWD_USER3"   , SAMR_CHGPASSWD_USER3  , api_samr_chgpasswd_user3  },
+      {"SAMR_CONNECT5"          , SAMR_CONNECT5         , api_samr_connect5         },
+      {"SAMR_GET_DISPENUM_INDEX", SAMR_GET_DISPENUM_INDEX, api_samr_get_dispenum_index },
+      {"SAMR_GET_DISPENUM_INDEX2",SAMR_GET_DISPENUM_INDEX2, api_samr_get_dispenum_index }
+};
+
+void samr_get_pipe_fns( struct api_struct **fns, int *n_fns )
+{
+	*fns = api_samr_cmds;
+	*n_fns = sizeof(api_samr_cmds) / sizeof(struct api_struct);
+}
+
+
+NTSTATUS rpc_samr_init(void)
+{
+  return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "samr", "lsass", api_samr_cmds,
+				    sizeof(api_samr_cmds) / sizeof(struct api_struct));
+}

Modified: branches/samba/upstream/source/rpc_server/srv_samr_nt.c
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_samr_nt.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_server/srv_samr_nt.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -11,11 +11,10 @@
  *  Copyright (C) Gerald (Jerry) Carter             2003-2004,
  *  Copyright (C) Simo Sorce                        2003.
  *  Copyright (C) Volker Lendecke		    2005.
- *  Copyright (C) Guenther Deschner		    2008.
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -24,7 +23,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 /*
@@ -47,7 +47,7 @@
 
 typedef struct disp_info {
 	DOM_SID sid; /* identify which domain this is. */
-	bool builtin_domain; /* Quick flag to check if this is the builtin domain. */
+	BOOL builtin_domain; /* Quick flag to check if this is the builtin domain. */
 	struct pdb_search *users; /* querydispinfo 1 and 4 */
 	struct pdb_search *machines; /* querydispinfo 2 */
 	struct pdb_search *groups; /* querydispinfo 3 and 5, enumgroups */
@@ -56,8 +56,8 @@
 	uint16 enum_acb_mask;
 	struct pdb_search *enum_users; /* enumusers with a mask */
 
-	struct timed_event *cache_timeout_event; /* cache idle timeout
-						  * handler. */
+
+	smb_event_id_t di_cache_timeout_event; /* cache idle timeout handler. */
 } DISP_INFO;
 
 /* We keep a static list of these by SID as modern clients close down
@@ -66,39 +66,39 @@
 struct samr_info {
 	/* for use by the \PIPE\samr policy */
 	DOM_SID sid;
-	bool builtin_domain; /* Quick flag to check if this is the builtin domain. */
+	BOOL builtin_domain; /* Quick flag to check if this is the builtin domain. */
 	uint32 status; /* some sort of flag.  best to record it.  comes from opnum 0x39 */
 	uint32 acc_granted;
 	DISP_INFO *disp_info;
 	TALLOC_CTX *mem_ctx;
 };
 
-static const struct generic_mapping sam_generic_mapping = {
+static struct generic_mapping sam_generic_mapping = {
 	GENERIC_RIGHTS_SAM_READ,
 	GENERIC_RIGHTS_SAM_WRITE,
 	GENERIC_RIGHTS_SAM_EXECUTE,
 	GENERIC_RIGHTS_SAM_ALL_ACCESS};
-static const struct generic_mapping dom_generic_mapping = {
+static struct generic_mapping dom_generic_mapping = {
 	GENERIC_RIGHTS_DOMAIN_READ,
 	GENERIC_RIGHTS_DOMAIN_WRITE,
 	GENERIC_RIGHTS_DOMAIN_EXECUTE,
 	GENERIC_RIGHTS_DOMAIN_ALL_ACCESS};
-static const struct generic_mapping usr_generic_mapping = {
+static struct generic_mapping usr_generic_mapping = {
 	GENERIC_RIGHTS_USER_READ,
 	GENERIC_RIGHTS_USER_WRITE,
 	GENERIC_RIGHTS_USER_EXECUTE,
 	GENERIC_RIGHTS_USER_ALL_ACCESS};
-static const struct generic_mapping usr_nopwchange_generic_mapping = {
+static struct generic_mapping usr_nopwchange_generic_mapping = {
 	GENERIC_RIGHTS_USER_READ,
 	GENERIC_RIGHTS_USER_WRITE,
 	GENERIC_RIGHTS_USER_EXECUTE & ~SA_RIGHT_USER_CHANGE_PASSWORD,
 	GENERIC_RIGHTS_USER_ALL_ACCESS};
-static const struct generic_mapping grp_generic_mapping = {
+static struct generic_mapping grp_generic_mapping = {
 	GENERIC_RIGHTS_GROUP_READ,
 	GENERIC_RIGHTS_GROUP_WRITE,
 	GENERIC_RIGHTS_GROUP_EXECUTE,
 	GENERIC_RIGHTS_GROUP_ALL_ACCESS};
-static const struct generic_mapping ali_generic_mapping = {
+static struct generic_mapping ali_generic_mapping = {
 	GENERIC_RIGHTS_ALIAS_READ,
 	GENERIC_RIGHTS_ALIAS_WRITE,
 	GENERIC_RIGHTS_ALIAS_EXECUTE,
@@ -108,7 +108,7 @@
 *******************************************************************/
 
 static NTSTATUS make_samr_object_sd( TALLOC_CTX *ctx, SEC_DESC **psd, size_t *sd_size,
-                                     const struct generic_mapping *map,
+                                     struct generic_mapping *map,
 				     DOM_SID *sid, uint32 sid_access )
 {
 	DOM_SID domadmin_sid;
@@ -126,12 +126,12 @@
 	/* add Full Access 'BUILTIN\Administrators' and 'BUILTIN\Account Operators */
 
 	init_sec_access(&mask, map->generic_all);
-
+	
 	init_sec_ace(&ace[i++], &global_sid_Builtin_Administrators, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0);
 	init_sec_ace(&ace[i++], &global_sid_Builtin_Account_Operators, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0);
 
 	/* Add Full Access for Domain Admins if we are a DC */
-
+	
 	if ( IS_DC ) {
 		sid_copy( &domadmin_sid, get_global_sam_sid() );
 		sid_append_rid( &domadmin_sid, DOMAIN_GROUP_RID_ADMINS );
@@ -150,9 +150,7 @@
 	if ((psa = make_sec_acl(ctx, NT4_ACL_REVISION, i, ace)) == NULL)
 		return NT_STATUS_NO_MEMORY;
 
-	if ((*psd = make_sec_desc(ctx, SECURITY_DESCRIPTOR_REVISION_1,
-				  SEC_DESC_SELF_RELATIVE, NULL, NULL, NULL,
-				  psa, sd_size)) == NULL)
+	if ((*psd = make_sec_desc(ctx, SEC_DESC_REVISION, SEC_DESC_SELF_RELATIVE, NULL, NULL, NULL, psa, sd_size)) == NULL)
 		return NT_STATUS_NO_MEMORY;
 
 	return NT_STATUS_OK;
@@ -163,57 +161,57 @@
  level of access for further checks.
 ********************************************************************/
 
-static NTSTATUS access_check_samr_object( SEC_DESC *psd, NT_USER_TOKEN *token,
+static NTSTATUS access_check_samr_object( SEC_DESC *psd, NT_USER_TOKEN *token, 
                                           SE_PRIV *rights, uint32 rights_mask,
-                                          uint32 des_access, uint32 *acc_granted,
+                                          uint32 des_access, uint32 *acc_granted, 
 					  const char *debug )
 {
 	NTSTATUS status = NT_STATUS_ACCESS_DENIED;
 	uint32 saved_mask = 0;
 
-	/* check privileges; certain SAM access bits should be overridden
-	   by privileges (mostly having to do with creating/modifying/deleting
+	/* check privileges; certain SAM access bits should be overridden 
+	   by privileges (mostly having to do with creating/modifying/deleting 
 	   users and groups) */
-
+	
 	if ( rights && user_has_any_privilege( token, rights ) ) {
-
+	
 		saved_mask = (des_access & rights_mask);
 		des_access &= ~saved_mask;
-
+		
 		DEBUG(4,("access_check_samr_object: user rights access mask [0x%x]\n",
 			rights_mask));
 	}
-
-
+		
+	
 	/* check the security descriptor first */
-
+	
 	if ( se_access_check(psd, token, des_access, acc_granted, &status) )
 		goto done;
-
+	
 	/* give root a free pass */
-
+	
 	if ( geteuid() == sec_initial_uid() ) {
-
+	
 		DEBUG(4,("%s: ACCESS should be DENIED  (requested: %#010x)\n", debug, des_access));
 		DEBUGADD(4,("but overritten by euid == sec_initial_uid()\n"));
-
+		
 		*acc_granted = des_access;
-
+		
 		status = NT_STATUS_OK;
 		goto done;
 	}
-
-
+	
+	
 done:
-	/* add in any bits saved during the privilege check (only
+	/* add in any bits saved during the privilege check (only 
 	   matters is status is ok) */
-
+	
 	*acc_granted |= rights_mask;
 
-	DEBUG(4,("%s: access %s (requested: 0x%08x, granted: 0x%08x)\n",
-		debug, NT_STATUS_IS_OK(status) ? "GRANTED" : "DENIED",
+	DEBUG(4,("%s: access %s (requested: 0x%08x, granted: 0x%08x)\n", 
+		debug, NT_STATUS_IS_OK(status) ? "GRANTED" : "DENIED", 
 		des_access, *acc_granted));
-
+	
 	return status;
 }
 
@@ -223,28 +221,28 @@
 
 static NTSTATUS access_check_samr_function(uint32 acc_granted, uint32 acc_required, const char *debug)
 {
-	DEBUG(5,("%s: access check ((granted: %#010x;  required: %#010x)\n",
+	DEBUG(5,("%s: access check ((granted: %#010x;  required: %#010x)\n",  
 		debug, acc_granted, acc_required));
 
 	/* check the security descriptor first */
-
+	
 	if ( (acc_granted&acc_required) == acc_required )
 		return NT_STATUS_OK;
-
+		
 	/* give root a free pass */
 
 	if (geteuid() == sec_initial_uid()) {
-
+	
 		DEBUG(4,("%s: ACCESS should be DENIED (granted: %#010x;  required: %#010x)\n",
 			debug, acc_granted, acc_required));
 		DEBUGADD(4,("but overwritten by euid == 0\n"));
-
+		
 		return NT_STATUS_OK;
 	}
-
-	DEBUG(2,("%s: ACCESS DENIED (granted: %#010x;  required: %#010x)\n",
+	
+	DEBUG(2,("%s: ACCESS DENIED (granted: %#010x;  required: %#010x)\n", 
 		debug, acc_granted, acc_required));
-
+		
 	return NT_STATUS_ACCESS_DENIED;
 }
 
@@ -279,7 +277,7 @@
 
 	/* There are two cases to consider here:
 	   1) The SID is a domain SID and we look for an equality match, or
-	   2) This is an account SID and so we return the DISP_INFO* for our
+	   2) This is an account SID and so we return the DISP_INFO* for our 
 	      domain */
 
 	if (psid == NULL) {
@@ -294,7 +292,7 @@
 
 		return &builtin_dispinfo;
 	}
-
+		
 	if (sid_check_is_domain(psid) || sid_check_is_in_our_domain(psid)) {
 		/*
 		 * Necessary only once, but it does not really hurt.
@@ -316,9 +314,9 @@
 	struct samr_info *info;
 	fstring sid_str;
 	TALLOC_CTX *mem_ctx;
-
+	
 	if (psid) {
-		sid_to_fstring(sid_str, psid);
+		sid_to_string(sid_str, psid);
 	} else {
 		fstrcpy(sid_str,"(NULL)");
 	}
@@ -347,10 +345,9 @@
  Function to free the per SID data.
  ********************************************************************/
 
-static void free_samr_cache(DISP_INFO *disp_info)
+static void free_samr_cache(DISP_INFO *disp_info, const char *sid_str)
 {
-	DEBUG(10, ("free_samr_cache: deleting cache for SID %s\n",
-		   sid_string_dbg(&disp_info->sid)));
+	DEBUG(10,("free_samr_cache: deleting cache for SID %s\n", sid_str));
 
 	/* We need to become root here because the paged search might have to
 	 * tell the LDAP server we're not interested in the rest anymore. */
@@ -398,8 +395,10 @@
 	/* Only free the dispinfo cache if no one bothered to set up
 	   a timeout. */
 
-	if (info->disp_info && info->disp_info->cache_timeout_event == NULL) {
-		free_samr_cache(info->disp_info);
+	if (info->disp_info && info->disp_info->di_cache_timeout_event == (smb_event_id_t)0) {
+		fstring sid_str;
+		sid_to_string(sid_str, &info->disp_info->sid);
+		free_samr_cache(info->disp_info, sid_str);
 	}
 
 	talloc_destroy(info->mem_ctx);
@@ -409,18 +408,23 @@
  Idle event handler. Throw away the disp info cache.
  ********************************************************************/
 
-static void disp_info_cache_idle_timeout_handler(struct event_context *ev_ctx,
-						 struct timed_event *te,
-						 const struct timeval *now,
-						 void *private_data)
+static void disp_info_cache_idle_timeout_handler(void **private_data,
+					time_t *ev_interval,
+					time_t ev_now)
 {
-	DISP_INFO *disp_info = (DISP_INFO *)private_data;
+	fstring sid_str;
+	DISP_INFO *disp_info = (DISP_INFO *)(*private_data);
 
-	TALLOC_FREE(disp_info->cache_timeout_event);
+	sid_to_string(sid_str, &disp_info->sid);
 
-	DEBUG(10, ("disp_info_cache_idle_timeout_handler: caching timed "
-		   "out\n"));
-	free_samr_cache(disp_info);
+	free_samr_cache(disp_info, sid_str);
+
+	/* Remove the event. */
+	smb_unregister_idle_event(disp_info->di_cache_timeout_event);
+	disp_info->di_cache_timeout_event = (smb_event_id_t)0;
+
+	DEBUG(10,("disp_info_cache_idle_timeout_handler: caching timed out for SID %s at %u\n",
+		sid_str, (unsigned int)ev_now));
 }
 
 /*******************************************************************
@@ -429,19 +433,24 @@
 
 static void set_disp_info_cache_timeout(DISP_INFO *disp_info, time_t secs_fromnow)
 {
+	fstring sid_str;
+
+	sid_to_string(sid_str, &disp_info->sid);
+
 	/* Remove any pending timeout and update. */
 
-	TALLOC_FREE(disp_info->cache_timeout_event);
+	if (disp_info->di_cache_timeout_event) {
+		smb_unregister_idle_event(disp_info->di_cache_timeout_event);
+		disp_info->di_cache_timeout_event = (smb_event_id_t)0;
+	}
 
-	DEBUG(10,("set_disp_info_cache_timeout: caching enumeration for "
-		  "SID %s for %u seconds\n", sid_string_dbg(&disp_info->sid),
-		  (unsigned int)secs_fromnow ));
+	DEBUG(10,("set_disp_info_cache_timeout: caching enumeration for SID %s for %u seconds\n",
+		sid_str, (unsigned int)secs_fromnow ));
 
-	disp_info->cache_timeout_event = event_add_timed(
-		smbd_event_context(), NULL,
-		timeval_current_ofs(secs_fromnow, 0),
-		"disp_info_cache_idle_timeout_handler",
-		disp_info_cache_idle_timeout_handler, (void *)disp_info);
+	disp_info->di_cache_timeout_event =
+		smb_register_idle_event(disp_info_cache_idle_timeout_handler,
+					disp_info,
+					secs_fromnow);
 }
 
 /*******************************************************************
@@ -451,13 +460,18 @@
 
 static void force_flush_samr_cache(DISP_INFO *disp_info)
 {
-	if ((disp_info == NULL) || (disp_info->cache_timeout_event == NULL)) {
-		return;
-	}
+	if (disp_info) {
+		fstring sid_str;
 
-	DEBUG(10,("force_flush_samr_cache: clearing idle event\n"));
-	TALLOC_FREE(disp_info->cache_timeout_event);
-	free_samr_cache(disp_info);
+		sid_to_string(sid_str, &disp_info->sid);
+		if (disp_info->di_cache_timeout_event) {
+			smb_unregister_idle_event(disp_info->di_cache_timeout_event);
+			disp_info->di_cache_timeout_event = (smb_event_id_t)0;
+			DEBUG(10,("force_flush_samr_cache: clearing idle event for SID %s\n",
+				sid_str));
+		}
+		free_samr_cache(disp_info, sid_str);
+	}
 }
 
 /*******************************************************************
@@ -466,7 +480,7 @@
 
 static void samr_clear_sam_passwd(struct samu *sam_pass)
 {
-
+	
 	if (!sam_pass)
 		return;
 
@@ -544,150 +558,116 @@
 }
 
 /*******************************************************************
- _samr_Close
+ _samr_close_hnd
  ********************************************************************/
 
-NTSTATUS _samr_Close(pipes_struct *p, struct samr_Close *r)
+NTSTATUS _samr_close_hnd(pipes_struct *p, SAMR_Q_CLOSE_HND *q_u, SAMR_R_CLOSE_HND *r_u)
 {
-	if (!close_policy_hnd(p, r->in.handle)) {
-		return NT_STATUS_INVALID_HANDLE;
-	}
+	r_u->status = NT_STATUS_OK;
 
-	ZERO_STRUCTP(r->out.handle);
+	/* close the policy handle */
+	if (!close_policy_hnd(p, &q_u->pol))
+		return NT_STATUS_OBJECT_NAME_INVALID;
 
-	return NT_STATUS_OK;
+	DEBUG(5,("samr_reply_close_hnd: %d\n", __LINE__));
+
+	return r_u->status;
 }
 
 /*******************************************************************
- _samr_OpenDomain
+ samr_reply_open_domain
  ********************************************************************/
 
-NTSTATUS _samr_OpenDomain(pipes_struct *p,
-			  struct samr_OpenDomain *r)
+NTSTATUS _samr_open_domain(pipes_struct *p, SAMR_Q_OPEN_DOMAIN *q_u, SAMR_R_OPEN_DOMAIN *r_u)
 {
 	struct    samr_info *info;
 	SEC_DESC *psd = NULL;
 	uint32    acc_granted;
-	uint32    des_access = r->in.access_mask;
+	uint32    des_access = q_u->flags;
 	NTSTATUS  status;
 	size_t    sd_size;
 	SE_PRIV se_rights;
 
-	/* find the connection policy handle. */
+	r_u->status = NT_STATUS_OK;
 
-	if ( !find_policy_by_hnd(p, r->in.connect_handle, (void**)(void *)&info) )
+	/* find the connection policy handle. */
+	
+	if ( !find_policy_by_hnd(p, &q_u->pol, (void**)(void *)&info) )
 		return NT_STATUS_INVALID_HANDLE;
 
-	status = access_check_samr_function(info->acc_granted,
-					    SA_RIGHT_SAM_OPEN_DOMAIN,
-					    "_samr_OpenDomain" );
-
+	status = access_check_samr_function( info->acc_granted, 
+		SA_RIGHT_SAM_OPEN_DOMAIN, "_samr_open_domain" );
+		
 	if ( !NT_STATUS_IS_OK(status) )
 		return status;
 
 	/*check if access can be granted as requested by client. */
-
+	
 	make_samr_object_sd( p->mem_ctx, &psd, &sd_size, &dom_generic_mapping, NULL, 0 );
 	se_map_generic( &des_access, &dom_generic_mapping );
-
+	
 	se_priv_copy( &se_rights, &se_machine_account );
 	se_priv_add( &se_rights, &se_add_users );
 
-	status = access_check_samr_object( psd, p->pipe_user.nt_user_token,
-		&se_rights, GENERIC_RIGHTS_DOMAIN_WRITE, des_access,
-		&acc_granted, "_samr_OpenDomain" );
-
+	status = access_check_samr_object( psd, p->pipe_user.nt_user_token, 
+		&se_rights, GENERIC_RIGHTS_DOMAIN_WRITE, des_access, 
+		&acc_granted, "_samr_open_domain" );
+		
 	if ( !NT_STATUS_IS_OK(status) )
 		return status;
 
-	if (!sid_check_is_domain(r->in.sid) &&
-	    !sid_check_is_builtin(r->in.sid)) {
+	if (!sid_check_is_domain(&q_u->dom_sid.sid) &&
+	    !sid_check_is_builtin(&q_u->dom_sid.sid)) {
 		return NT_STATUS_NO_SUCH_DOMAIN;
 	}
 
 	/* associate the domain SID with the (unique) handle. */
-	if ((info = get_samr_info_by_sid(r->in.sid))==NULL)
+	if ((info = get_samr_info_by_sid(&q_u->dom_sid.sid))==NULL)
 		return NT_STATUS_NO_MEMORY;
 	info->acc_granted = acc_granted;
 
 	/* get a (unique) handle.  open a policy on it. */
-	if (!create_policy_hnd(p, r->out.domain_handle, free_samr_info, (void *)info))
+	if (!create_policy_hnd(p, &r_u->domain_pol, free_samr_info, (void *)info))
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
-	DEBUG(5,("_samr_OpenDomain: %d\n", __LINE__));
+	DEBUG(5,("samr_open_domain: %d\n", __LINE__));
 
-	return NT_STATUS_OK;
+	return r_u->status;
 }
 
 /*******************************************************************
- _samr_GetUserPwInfo
+ _samr_get_usrdom_pwinfo
  ********************************************************************/
 
-NTSTATUS _samr_GetUserPwInfo(pipes_struct *p,
-			     struct samr_GetUserPwInfo *r)
+NTSTATUS _samr_get_usrdom_pwinfo(pipes_struct *p, SAMR_Q_GET_USRDOM_PWINFO *q_u, SAMR_R_GET_USRDOM_PWINFO *r_u)
 {
 	struct samr_info *info = NULL;
-	enum lsa_SidType sid_type;
-	uint32_t min_password_length = 0;
-	uint32_t password_properties = 0;
-	bool ret = false;
-	NTSTATUS status;
 
-	DEBUG(5,("_samr_GetUserPwInfo: %d\n", __LINE__));
+	r_u->status = NT_STATUS_OK;
 
 	/* find the policy handle.  open a policy on it. */
-	if (!find_policy_by_hnd(p, r->in.user_handle, (void **)(void *)&info)) {
+	if (!find_policy_by_hnd(p, &q_u->user_pol, (void **)(void *)&info))
 		return NT_STATUS_INVALID_HANDLE;
-	}
 
-	status = access_check_samr_function(info->acc_granted,
-					    SAMR_USER_ACCESS_GET_ATTRIBUTES,
-					    "_samr_GetUserPwInfo" );
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (!sid_check_is_in_our_domain(&info->sid)) {
+	if (!sid_check_is_in_our_domain(&info->sid))
 		return NT_STATUS_OBJECT_TYPE_MISMATCH;
-	}
 
-	become_root();
-	ret = lookup_sid(p->mem_ctx, &info->sid, NULL, NULL, &sid_type);
-	unbecome_root();
-	if (ret == false) {
-		return NT_STATUS_NO_SUCH_USER;
-	}
+	init_samr_r_get_usrdom_pwinfo(r_u, NT_STATUS_OK);
 
-	switch (sid_type) {
-		case SID_NAME_USER:
-			become_root();
-			pdb_get_account_policy(AP_MIN_PASSWORD_LEN,
-					       &min_password_length);
-			pdb_get_account_policy(AP_USER_MUST_LOGON_TO_CHG_PASS,
-					       &password_properties);
-			unbecome_root();
+	DEBUG(5,("_samr_get_usrdom_pwinfo: %d\n", __LINE__));
 
-			if (lp_check_password_script() && *lp_check_password_script()) {
-				password_properties |= DOMAIN_PASSWORD_COMPLEX;
-			}
+	/* 
+	 * NT sometimes return NT_STATUS_ACCESS_DENIED
+	 * I don't know yet why.
+	 */
 
-			break;
-		default:
-			break;
-	}
-
-	r->out.info->min_password_length = min_password_length;
-	r->out.info->password_properties = password_properties;
-
-	DEBUG(5,("_samr_GetUserPwInfo: %d\n", __LINE__));
-
-	return NT_STATUS_OK;
+	return r_u->status;
 }
 
 /*******************************************************************
 ********************************************************************/
 
-static bool get_lsa_policy_samr_sid( pipes_struct *p, POLICY_HND *pol,
+static BOOL get_lsa_policy_samr_sid( pipes_struct *p, POLICY_HND *pol, 
 					DOM_SID *sid, uint32 *acc_granted,
 					DISP_INFO **ppdisp_info)
 {
@@ -710,20 +690,21 @@
 }
 
 /*******************************************************************
- _samr_SetSecurity
+ _samr_set_sec_obj
  ********************************************************************/
 
-NTSTATUS _samr_SetSecurity(pipes_struct *p,
-			   struct samr_SetSecurity *r)
+NTSTATUS _samr_set_sec_obj(pipes_struct *p, SAMR_Q_SET_SEC_OBJ *q_u, SAMR_R_SET_SEC_OBJ *r_u)
 {
 	DOM_SID pol_sid;
 	uint32 acc_granted, i;
 	SEC_ACL *dacl;
-	bool ret;
+	BOOL ret;
 	struct samu *sampass=NULL;
 	NTSTATUS status;
 
-	if (!get_lsa_policy_samr_sid(p, r->in.handle, &pol_sid, &acc_granted, NULL))
+	r_u->status = NT_STATUS_OK;
+
+	if (!get_lsa_policy_samr_sid(p, &q_u->pol, &pol_sid, &acc_granted, NULL))
 		return NT_STATUS_INVALID_HANDLE;
 
 	if (!(sampass = samu_new( p->mem_ctx))) {
@@ -737,17 +718,17 @@
 	unbecome_root();
 
 	if (!ret) {
-		DEBUG(4, ("User %s not found\n", sid_string_dbg(&pol_sid)));
+		DEBUG(4, ("User %s not found\n", sid_string_static(&pol_sid)));
 		TALLOC_FREE(sampass);
 		return NT_STATUS_INVALID_HANDLE;
 	}
 
-	dacl = r->in.sdbuf->sd->dacl;
+	dacl = q_u->buf->sec->dacl;
 	for (i=0; i < dacl->num_aces; i++) {
 		if (sid_equal(&pol_sid, &dacl->aces[i].trustee)) {
-			ret = pdb_set_pass_can_change(sampass,
-				(dacl->aces[i].access_mask &
-				 SA_RIGHT_USER_CHANGE_PASSWORD) ?
+			ret = pdb_set_pass_can_change(sampass, 
+				(dacl->aces[i].access_mask & 
+				 SA_RIGHT_USER_CHANGE_PASSWORD) ? 
 						      True: False);
 			break;
 		}
@@ -758,9 +739,7 @@
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	status = access_check_samr_function(acc_granted,
-					    SA_RIGHT_USER_SET_ATTRIBUTES,
-					    "_samr_SetSecurity");
+	status = access_check_samr_function(acc_granted, SA_RIGHT_USER_SET_ATTRIBUTES, "_samr_set_sec_obj");
 	if (NT_STATUS_IS_OK(status)) {
 		become_root();
 		status = pdb_update_sam_account(sampass);
@@ -775,10 +754,10 @@
 /*******************************************************************
   build correct perms based on policies and password times for _samr_query_sec_obj
 *******************************************************************/
-static bool check_change_pw_access(TALLOC_CTX *mem_ctx, DOM_SID *user_sid)
+static BOOL check_change_pw_access(TALLOC_CTX *mem_ctx, DOM_SID *user_sid)
 {
 	struct samu *sampass=NULL;
-	bool ret;
+	BOOL ret;
 
 	if ( !(sampass = samu_new( mem_ctx )) ) {
 		DEBUG(0,("No memory!\n"));
@@ -790,7 +769,7 @@
 	unbecome_root();
 
 	if (ret == False) {
-		DEBUG(4,("User %s not found\n", sid_string_dbg(user_sid)));
+		DEBUG(4,("User %s not found\n", sid_string_static(user_sid)));
 		TALLOC_FREE(sampass);
 		return False;
 	}
@@ -807,92 +786,95 @@
 
 
 /*******************************************************************
- _samr_QuerySecurity
+ _samr_query_sec_obj
  ********************************************************************/
 
-NTSTATUS _samr_QuerySecurity(pipes_struct *p,
-			     struct samr_QuerySecurity *r)
+NTSTATUS _samr_query_sec_obj(pipes_struct *p, SAMR_Q_QUERY_SEC_OBJ *q_u, SAMR_R_QUERY_SEC_OBJ *r_u)
 {
-	NTSTATUS status;
 	DOM_SID pol_sid;
+	fstring str_sid;
 	SEC_DESC * psd = NULL;
 	uint32 acc_granted;
 	size_t sd_size;
 
+	r_u->status = NT_STATUS_OK;
+
 	/* Get the SID. */
-	if (!get_lsa_policy_samr_sid(p, r->in.handle, &pol_sid, &acc_granted, NULL))
+	if (!get_lsa_policy_samr_sid(p, &q_u->user_pol, &pol_sid, &acc_granted, NULL))
 		return NT_STATUS_INVALID_HANDLE;
 
-	DEBUG(10,("_samr_QuerySecurity: querying security on SID: %s\n",
-		  sid_string_dbg(&pol_sid)));
+	DEBUG(10,("_samr_query_sec_obj: querying security on SID: %s\n", sid_to_string(str_sid, &pol_sid)));
 
 	/* Check what typ of SID is beeing queried (e.g Domain SID, User SID, Group SID) */
 
 	/* To query the security of the SAM it self an invalid SID with S-0-0 is passed to this function */
 	if (pol_sid.sid_rev_num == 0) {
-		DEBUG(5,("_samr_QuerySecurity: querying security on SAM\n"));
-		status = make_samr_object_sd(p->mem_ctx, &psd, &sd_size, &sam_generic_mapping, NULL, 0);
-	} else if (sid_equal(&pol_sid,get_global_sam_sid())) {
+		DEBUG(5,("_samr_query_sec_obj: querying security on SAM\n"));
+		r_u->status = make_samr_object_sd(p->mem_ctx, &psd, &sd_size, &sam_generic_mapping, NULL, 0);
+	} else if (sid_equal(&pol_sid,get_global_sam_sid())) { 
 		/* check if it is our domain SID */
-		DEBUG(5,("_samr_QuerySecurity: querying security on Domain "
-			 "with SID: %s\n", sid_string_dbg(&pol_sid)));
-		status = make_samr_object_sd(p->mem_ctx, &psd, &sd_size, &dom_generic_mapping, NULL, 0);
+		DEBUG(5,("_samr_query_sec_obj: querying security on Domain with SID: %s\n", sid_to_string(str_sid, &pol_sid)));
+		r_u->status = make_samr_object_sd(p->mem_ctx, &psd, &sd_size, &dom_generic_mapping, NULL, 0);
 	} else if (sid_equal(&pol_sid,&global_sid_Builtin)) {
 		/* check if it is the Builtin  Domain */
 		/* TODO: Builtin probably needs a different SD with restricted write access*/
-		DEBUG(5,("_samr_QuerySecurity: querying security on Builtin "
-			 "Domain with SID: %s\n", sid_string_dbg(&pol_sid)));
-		status = make_samr_object_sd(p->mem_ctx, &psd, &sd_size, &dom_generic_mapping, NULL, 0);
+		DEBUG(5,("_samr_query_sec_obj: querying security on Builtin Domain with SID: %s\n", sid_to_string(str_sid, &pol_sid)));
+		r_u->status = make_samr_object_sd(p->mem_ctx, &psd, &sd_size, &dom_generic_mapping, NULL, 0);
 	} else if (sid_check_is_in_our_domain(&pol_sid) ||
 	    	 sid_check_is_in_builtin(&pol_sid)) {
 		/* TODO: different SDs have to be generated for aliases groups and users.
 		         Currently all three get a default user SD  */
-		DEBUG(10,("_samr_QuerySecurity: querying security on Object "
-			  "with SID: %s\n", sid_string_dbg(&pol_sid)));
+		DEBUG(10,("_samr_query_sec_obj: querying security on Object with SID: %s\n", sid_to_string(str_sid, &pol_sid)));
 		if (check_change_pw_access(p->mem_ctx, &pol_sid)) {
-			status = make_samr_object_sd(p->mem_ctx, &psd, &sd_size, &usr_generic_mapping,
+			r_u->status = make_samr_object_sd(p->mem_ctx, &psd, &sd_size, &usr_generic_mapping, 
 							  &pol_sid, SAMR_USR_RIGHTS_WRITE_PW);
 		} else {
-			status = make_samr_object_sd(p->mem_ctx, &psd, &sd_size, &usr_nopwchange_generic_mapping,
+			r_u->status = make_samr_object_sd(p->mem_ctx, &psd, &sd_size, &usr_nopwchange_generic_mapping, 
 							  &pol_sid, SAMR_USR_RIGHTS_CANT_WRITE_PW);
 		}
 	} else {
 		return NT_STATUS_OBJECT_TYPE_MISMATCH;
 	}
 
-	if ((*r->out.sdbuf = make_sec_desc_buf(p->mem_ctx, sd_size, psd)) == NULL)
+	if ((r_u->buf = make_sec_desc_buf(p->mem_ctx, sd_size, psd)) == NULL)
 		return NT_STATUS_NO_MEMORY;
 
-	return status;
+	if (NT_STATUS_IS_OK(r_u->status))
+		r_u->ptr = 1;
+
+	return r_u->status;
 }
 
 /*******************************************************************
 makes a SAM_ENTRY / UNISTR2* structure from a user list.
 ********************************************************************/
 
-static NTSTATUS make_user_sam_entry_list(TALLOC_CTX *ctx,
-					 struct samr_SamEntry **sam_pp,
-					 uint32_t num_entries,
-					 uint32_t start_idx,
+static NTSTATUS make_user_sam_entry_list(TALLOC_CTX *ctx, SAM_ENTRY **sam_pp,
+					 UNISTR2 **uni_name_pp,
+					 uint32 num_entries, uint32 start_idx,
 					 struct samr_displayentry *entries)
 {
-	uint32_t i;
-	struct samr_SamEntry *sam;
-
+	uint32 i;
+	SAM_ENTRY *sam;
+	UNISTR2 *uni_name;
+	
 	*sam_pp = NULL;
+	*uni_name_pp = NULL;
 
-	if (num_entries == 0) {
+	if (num_entries == 0)
 		return NT_STATUS_OK;
-	}
 
-	sam = TALLOC_ZERO_ARRAY(ctx, struct samr_SamEntry, num_entries);
-	if (sam == NULL) {
+	sam = TALLOC_ZERO_ARRAY(ctx, SAM_ENTRY, num_entries);
+
+	uni_name = TALLOC_ZERO_ARRAY(ctx, UNISTR2, num_entries);
+
+	if (sam == NULL || uni_name == NULL) {
 		DEBUG(0, ("make_user_sam_entry_list: TALLOC_ZERO failed!\n"));
 		return NT_STATUS_NO_MEMORY;
 	}
 
 	for (i = 0; i < num_entries; i++) {
-#if 0
+		UNISTR2 uni_temp_name;
 		/*
 		 * usrmgr expects a non-NULL terminated string with
 		 * trust relationships
@@ -904,74 +886,65 @@
 			init_unistr2(&uni_temp_name, entries[i].account_name,
 				     UNI_STR_TERMINATE);
 		}
-#endif
-		init_lsa_String(&sam[i].name, entries[i].account_name);
-		sam[i].idx = entries[i].rid;
+
+		init_sam_entry(&sam[i], &uni_temp_name, entries[i].rid);
+		copy_unistr2(&uni_name[i], &uni_temp_name);
 	}
 
 	*sam_pp = sam;
-
+	*uni_name_pp = uni_name;
 	return NT_STATUS_OK;
 }
 
-#define MAX_SAM_ENTRIES MAX_SAM_ENTRIES_W2K
-
 /*******************************************************************
- _samr_EnumDomainUsers
+ samr_reply_enum_dom_users
  ********************************************************************/
 
-NTSTATUS _samr_EnumDomainUsers(pipes_struct *p,
-			       struct samr_EnumDomainUsers *r)
+NTSTATUS _samr_enum_dom_users(pipes_struct *p, SAMR_Q_ENUM_DOM_USERS *q_u, 
+			      SAMR_R_ENUM_DOM_USERS *r_u)
 {
-	NTSTATUS status;
 	struct samr_info *info = NULL;
 	int num_account;
-	uint32 enum_context = *r->in.resume_handle;
+	uint32 enum_context=q_u->start_idx;
 	enum remote_arch_types ra_type = get_remote_arch();
 	int max_sam_entries = (ra_type == RA_WIN95) ? MAX_SAM_ENTRIES_W95 : MAX_SAM_ENTRIES_W2K;
 	uint32 max_entries = max_sam_entries;
 	struct samr_displayentry *entries = NULL;
-	struct samr_SamArray *samr_array = NULL;
-	struct samr_SamEntry *samr_entries = NULL;
+	
+	r_u->status = NT_STATUS_OK;
 
 	/* find the policy handle.  open a policy on it. */
-	if (!find_policy_by_hnd(p, r->in.domain_handle, (void **)(void *)&info))
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&info))
 		return NT_STATUS_INVALID_HANDLE;
 
-	status = access_check_samr_function(info->acc_granted,
-					    SA_RIGHT_DOMAIN_ENUM_ACCOUNTS,
-					    "_samr_EnumDomainUsers");
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+ 	if (!NT_STATUS_IS_OK(r_u->status = access_check_samr_function(info->acc_granted, 
+					SA_RIGHT_DOMAIN_ENUM_ACCOUNTS, 
+					"_samr_enum_dom_users"))) {
+ 		return r_u->status;
 	}
+ 	
+	DEBUG(5,("_samr_enum_dom_users: %d\n", __LINE__));
 
-	DEBUG(5,("_samr_EnumDomainUsers: %d\n", __LINE__));
-
 	if (info->builtin_domain) {
 		/* No users in builtin. */
-		*r->out.resume_handle = *r->in.resume_handle;
-		DEBUG(5,("_samr_EnumDomainUsers: No users in BUILTIN\n"));
-		return status;
+		init_samr_r_enum_dom_users(r_u, q_u->start_idx, 0);
+		DEBUG(5,("_samr_enum_dom_users: No users in BUILTIN\n"));
+		return r_u->status;
 	}
 
-	samr_array = TALLOC_ZERO_P(p->mem_ctx, struct samr_SamArray);
-	if (!samr_array) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
 	become_root();
 
 	/* AS ROOT !!!! */
 
 	if ((info->disp_info->enum_users != NULL) &&
-	    (info->disp_info->enum_acb_mask != r->in.acct_flags)) {
+	    (info->disp_info->enum_acb_mask != q_u->acb_mask)) {
 		pdb_search_destroy(info->disp_info->enum_users);
 		info->disp_info->enum_users = NULL;
 	}
 
 	if (info->disp_info->enum_users == NULL) {
-		info->disp_info->enum_users = pdb_search_users(r->in.acct_flags);
-		info->disp_info->enum_acb_mask = r->in.acct_flags;
+		info->disp_info->enum_users = pdb_search_users(q_u->acb_mask);
+		info->disp_info->enum_acb_mask = q_u->acb_mask;
 	}
 
 	if (info->disp_info->enum_users == NULL) {
@@ -989,62 +962,63 @@
 	unbecome_root();
 
 	if (num_account == 0) {
-		DEBUG(5, ("_samr_EnumDomainUsers: enumeration handle over "
+		DEBUG(5, ("_samr_enum_dom_users: enumeration handle over "
 			  "total entries\n"));
-		*r->out.resume_handle = *r->in.resume_handle;
+		init_samr_r_enum_dom_users(r_u, q_u->start_idx, 0);
 		return NT_STATUS_OK;
 	}
 
-	status = make_user_sam_entry_list(p->mem_ctx, &samr_entries,
-					  num_account, enum_context,
-					  entries);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
+	r_u->status = make_user_sam_entry_list(p->mem_ctx, &r_u->sam,
+					       &r_u->uni_acct_name, 
+					       num_account, enum_context,
+					       entries);
 
+	if (!NT_STATUS_IS_OK(r_u->status))
+		return r_u->status;
+
 	if (max_entries <= num_account) {
-		status = STATUS_MORE_ENTRIES;
+		r_u->status = STATUS_MORE_ENTRIES;
 	} else {
-		status = NT_STATUS_OK;
+		r_u->status = NT_STATUS_OK;
 	}
 
 	/* Ensure we cache this enumeration. */
 	set_disp_info_cache_timeout(info->disp_info, DISP_INFO_CACHE_TIMEOUT);
 
-	DEBUG(5, ("_samr_EnumDomainUsers: %d\n", __LINE__));
+	DEBUG(5, ("_samr_enum_dom_users: %d\n", __LINE__));
 
-	samr_array->count = num_account;
-	samr_array->entries = samr_entries;
+	init_samr_r_enum_dom_users(r_u, q_u->start_idx + num_account,
+				   num_account);
 
-	*r->out.resume_handle = *r->in.resume_handle + num_account;
-	*r->out.sam = samr_array;
-	*r->out.num_entries = num_account;
+	DEBUG(5,("_samr_enum_dom_users: %d\n", __LINE__));
 
-	DEBUG(5,("_samr_EnumDomainUsers: %d\n", __LINE__));
-
-	return status;
+	return r_u->status;
 }
 
 /*******************************************************************
 makes a SAM_ENTRY / UNISTR2* structure from a group list.
 ********************************************************************/
 
-static void make_group_sam_entry_list(TALLOC_CTX *ctx,
-				      struct samr_SamEntry **sam_pp,
-				      uint32_t num_sam_entries,
+static void make_group_sam_entry_list(TALLOC_CTX *ctx, SAM_ENTRY **sam_pp,
+				      UNISTR2 **uni_name_pp,
+				      uint32 num_sam_entries,
 				      struct samr_displayentry *entries)
 {
-	struct samr_SamEntry *sam;
-	uint32_t i;
+	uint32 i;
+	SAM_ENTRY *sam;
+	UNISTR2 *uni_name;
 
 	*sam_pp = NULL;
+	*uni_name_pp = NULL;
 
-	if (num_sam_entries == 0) {
+	if (num_sam_entries == 0)
 		return;
-	}
 
-	sam = TALLOC_ZERO_ARRAY(ctx, struct samr_SamEntry, num_sam_entries);
-	if (sam == NULL) {
+	sam = TALLOC_ZERO_ARRAY(ctx, SAM_ENTRY, num_sam_entries);
+	uni_name = TALLOC_ZERO_ARRAY(ctx, UNISTR2, num_sam_entries);
+
+	if (sam == NULL || uni_name == NULL) {
+		DEBUG(0, ("NULL pointers in SAMR_R_QUERY_DISPINFO\n"));
 		return;
 	}
 
@@ -1052,52 +1026,46 @@
 		/*
 		 * JRA. I think this should include the null. TNG does not.
 		 */
-		init_lsa_String(&sam[i].name, entries[i].account_name);
-		sam[i].idx = entries[i].rid;
+		init_unistr2(&uni_name[i], entries[i].account_name,
+			     UNI_STR_TERMINATE);
+		init_sam_entry(&sam[i], &uni_name[i], entries[i].rid);
 	}
 
 	*sam_pp = sam;
+	*uni_name_pp = uni_name;
 }
 
 /*******************************************************************
- _samr_EnumDomainGroups
+ samr_reply_enum_dom_groups
  ********************************************************************/
 
-NTSTATUS _samr_EnumDomainGroups(pipes_struct *p,
-				struct samr_EnumDomainGroups *r)
+NTSTATUS _samr_enum_dom_groups(pipes_struct *p, SAMR_Q_ENUM_DOM_GROUPS *q_u, SAMR_R_ENUM_DOM_GROUPS *r_u)
 {
-	NTSTATUS status;
 	struct samr_info *info = NULL;
 	struct samr_displayentry *groups;
 	uint32 num_groups;
-	struct samr_SamArray *samr_array = NULL;
-	struct samr_SamEntry *samr_entries = NULL;
 
+	r_u->status = NT_STATUS_OK;
+
 	/* find the policy handle.  open a policy on it. */
-	if (!find_policy_by_hnd(p, r->in.domain_handle, (void **)(void *)&info))
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&info))
 		return NT_STATUS_INVALID_HANDLE;
 
-	status = access_check_samr_function(info->acc_granted,
-					    SA_RIGHT_DOMAIN_ENUM_ACCOUNTS,
-					    "_samr_EnumDomainGroups");
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
+	r_u->status = access_check_samr_function(info->acc_granted,
+						 SA_RIGHT_DOMAIN_ENUM_ACCOUNTS,
+						 "_samr_enum_dom_groups");
+	if (!NT_STATUS_IS_OK(r_u->status))
+		return r_u->status;
 
-	DEBUG(5,("_samr_EnumDomainGroups: %d\n", __LINE__));
+	DEBUG(5,("samr_reply_enum_dom_groups: %d\n", __LINE__));
 
 	if (info->builtin_domain) {
 		/* No groups in builtin. */
-		*r->out.resume_handle = *r->in.resume_handle;
-		DEBUG(5,("_samr_EnumDomainGroups: No groups in BUILTIN\n"));
-		return status;
+		init_samr_r_enum_dom_groups(r_u, q_u->start_idx, 0);
+		DEBUG(5,("_samr_enum_dom_users: No groups in BUILTIN\n"));
+		return r_u->status;
 	}
 
-	samr_array = TALLOC_ZERO_P(p->mem_ctx, struct samr_SamArray);
-	if (!samr_array) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
 	/* the domain group array is being allocated in the function below */
 
 	become_root();
@@ -1111,64 +1079,46 @@
 		}
 	}
 
-	num_groups = pdb_search_entries(info->disp_info->groups,
-					*r->in.resume_handle,
+	num_groups = pdb_search_entries(info->disp_info->groups, q_u->start_idx,
 					MAX_SAM_ENTRIES, &groups);
 	unbecome_root();
-
+	
 	/* Ensure we cache this enumeration. */
 	set_disp_info_cache_timeout(info->disp_info, DISP_INFO_CACHE_TIMEOUT);
 
-	make_group_sam_entry_list(p->mem_ctx, &samr_entries,
+	make_group_sam_entry_list(p->mem_ctx, &r_u->sam, &r_u->uni_grp_name,
 				  num_groups, groups);
 
-	samr_array->count = num_groups;
-	samr_array->entries = samr_entries;
+	init_samr_r_enum_dom_groups(r_u, q_u->start_idx, num_groups);
 
-	*r->out.sam = samr_array;
-	*r->out.num_entries = num_groups;
-	/* this was missing, IMHO:
-	*r->out.resume_handle = num_groups + *r->in.resume_handle;
-	*/
+	DEBUG(5,("samr_enum_dom_groups: %d\n", __LINE__));
 
-	DEBUG(5,("_samr_EnumDomainGroups: %d\n", __LINE__));
-
-	return status;
+	return r_u->status;
 }
 
 /*******************************************************************
- _samr_EnumDomainAliases
+ samr_reply_enum_dom_aliases
  ********************************************************************/
 
-NTSTATUS _samr_EnumDomainAliases(pipes_struct *p,
-				 struct samr_EnumDomainAliases *r)
+NTSTATUS _samr_enum_dom_aliases(pipes_struct *p, SAMR_Q_ENUM_DOM_ALIASES *q_u, SAMR_R_ENUM_DOM_ALIASES *r_u)
 {
-	NTSTATUS status;
 	struct samr_info *info;
 	struct samr_displayentry *aliases;
 	uint32 num_aliases = 0;
-	struct samr_SamArray *samr_array = NULL;
-	struct samr_SamEntry *samr_entries = NULL;
 
 	/* find the policy handle.  open a policy on it. */
-	if (!find_policy_by_hnd(p, r->in.domain_handle, (void **)(void *)&info))
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&info))
 		return NT_STATUS_INVALID_HANDLE;
 
-	status = access_check_samr_function(info->acc_granted,
-					    SA_RIGHT_DOMAIN_ENUM_ACCOUNTS,
-					    "_samr_EnumDomainAliases");
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
+	r_u->status = access_check_samr_function(info->acc_granted,
+						 SA_RIGHT_DOMAIN_ENUM_ACCOUNTS,
+						 "_samr_enum_dom_aliases");
+	if (!NT_STATUS_IS_OK(r_u->status))
+		return r_u->status;
 
-	DEBUG(5,("_samr_EnumDomainAliases: sid %s\n",
-		 sid_string_dbg(&info->sid)));
+	DEBUG(5,("samr_reply_enum_dom_aliases: sid %s\n",
+		 sid_string_static(&info->sid)));
 
-	samr_array = TALLOC_ZERO_P(p->mem_ctx, struct samr_SamArray);
-	if (!samr_array) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
 	become_root();
 
 	if (info->disp_info->aliases == NULL) {
@@ -1179,244 +1129,39 @@
 		}
 	}
 
-	num_aliases = pdb_search_entries(info->disp_info->aliases,
-					 *r->in.resume_handle,
+	num_aliases = pdb_search_entries(info->disp_info->aliases, q_u->start_idx,
 					 MAX_SAM_ENTRIES, &aliases);
 	unbecome_root();
-
+	
 	/* Ensure we cache this enumeration. */
 	set_disp_info_cache_timeout(info->disp_info, DISP_INFO_CACHE_TIMEOUT);
 
-	make_group_sam_entry_list(p->mem_ctx, &samr_entries,
+	make_group_sam_entry_list(p->mem_ctx, &r_u->sam, &r_u->uni_grp_name,
 				  num_aliases, aliases);
 
-	DEBUG(5,("_samr_EnumDomainAliases: %d\n", __LINE__));
+	init_samr_r_enum_dom_aliases(r_u, q_u->start_idx + num_aliases,
+				     num_aliases);
 
-	samr_array->count = num_aliases;
-	samr_array->entries = samr_entries;
+	DEBUG(5,("samr_enum_dom_aliases: %d\n", __LINE__));
 
-	*r->out.sam = samr_array;
-	*r->out.num_entries = num_aliases;
-	*r->out.resume_handle = num_aliases + *r->in.resume_handle;
-
-	return status;
+	return r_u->status;
 }
 
 /*******************************************************************
- inits a samr_DispInfoGeneral structure.
-********************************************************************/
-
-static NTSTATUS init_samr_dispinfo_1(TALLOC_CTX *ctx,
-				     struct samr_DispInfoGeneral *r,
-				     uint32_t num_entries,
-				     uint32_t start_idx,
-				     struct samr_displayentry *entries)
-{
-	uint32 i;
-
-	DEBUG(10, ("init_samr_dispinfo_1: num_entries: %d\n", num_entries));
-
-	if (num_entries == 0) {
-		return NT_STATUS_OK;
-	}
-
-	r->count = num_entries;
-
-	r->entries = TALLOC_ZERO_ARRAY(ctx, struct samr_DispEntryGeneral, num_entries);
-	if (!r->entries) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	for (i = 0; i < num_entries ; i++) {
-
-		init_lsa_String(&r->entries[i].account_name,
-				entries[i].account_name);
-
-		init_lsa_String(&r->entries[i].description,
-				entries[i].description);
-
-		init_lsa_String(&r->entries[i].full_name,
-				entries[i].fullname);
-
-		r->entries[i].rid = entries[i].rid;
-		r->entries[i].acct_flags = entries[i].acct_flags;
-		r->entries[i].idx = start_idx+i+1;
-	}
-
-	return NT_STATUS_OK;
-}
-
-/*******************************************************************
- inits a samr_DispInfoFull structure.
-********************************************************************/
-
-static NTSTATUS init_samr_dispinfo_2(TALLOC_CTX *ctx,
-				     struct samr_DispInfoFull *r,
-				     uint32_t num_entries,
-				     uint32_t start_idx,
-				     struct samr_displayentry *entries)
-{
-	uint32_t i;
-
-	DEBUG(10, ("init_samr_dispinfo_2: num_entries: %d\n", num_entries));
-
-	if (num_entries == 0) {
-		return NT_STATUS_OK;
-	}
-
-	r->count = num_entries;
-
-	r->entries = TALLOC_ZERO_ARRAY(ctx, struct samr_DispEntryFull, num_entries);
-	if (!r->entries) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	for (i = 0; i < num_entries ; i++) {
-
-		init_lsa_String(&r->entries[i].account_name,
-				entries[i].account_name);
-
-		init_lsa_String(&r->entries[i].description,
-				entries[i].description);
-
-		r->entries[i].rid = entries[i].rid;
-		r->entries[i].acct_flags = entries[i].acct_flags;
-		r->entries[i].idx = start_idx+i+1;
-	}
-
-	return NT_STATUS_OK;
-}
-
-/*******************************************************************
- inits a samr_DispInfoFullGroups structure.
-********************************************************************/
-
-static NTSTATUS init_samr_dispinfo_3(TALLOC_CTX *ctx,
-				     struct samr_DispInfoFullGroups *r,
-				     uint32_t num_entries,
-				     uint32_t start_idx,
-				     struct samr_displayentry *entries)
-{
-	uint32_t i;
-
-	DEBUG(5, ("init_samr_dispinfo_3: num_entries: %d\n", num_entries));
-
-	if (num_entries == 0) {
-		return NT_STATUS_OK;
-	}
-
-	r->count = num_entries;
-
-	r->entries = TALLOC_ZERO_ARRAY(ctx, struct samr_DispEntryFullGroup, num_entries);
-	if (!r->entries) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	for (i = 0; i < num_entries ; i++) {
-
-		init_lsa_String(&r->entries[i].account_name,
-				entries[i].account_name);
-
-		init_lsa_String(&r->entries[i].description,
-				entries[i].description);
-
-		r->entries[i].rid = entries[i].rid;
-		r->entries[i].acct_flags = entries[i].acct_flags;
-		r->entries[i].idx = start_idx+i+1;
-	}
-
-	return NT_STATUS_OK;
-}
-
-/*******************************************************************
- inits a samr_DispInfoAscii structure.
-********************************************************************/
-
-static NTSTATUS init_samr_dispinfo_4(TALLOC_CTX *ctx,
-				     struct samr_DispInfoAscii *r,
-				     uint32_t num_entries,
-				     uint32_t start_idx,
-				     struct samr_displayentry *entries)
-{
-	uint32_t i;
-
-	DEBUG(5, ("init_samr_dispinfo_4: num_entries: %d\n", num_entries));
-
-	if (num_entries == 0) {
-		return NT_STATUS_OK;
-	}
-
-	r->count = num_entries;
-
-	r->entries = TALLOC_ZERO_ARRAY(ctx, struct samr_DispEntryAscii, num_entries);
-	if (!r->entries) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	for (i = 0; i < num_entries ; i++) {
-
-		init_lsa_AsciiStringLarge(&r->entries[i].account_name,
-					  entries[i].account_name);
-
-		r->entries[i].idx = start_idx+i+1;
-	}
-
-	return NT_STATUS_OK;
-}
-
-/*******************************************************************
- inits a samr_DispInfoAscii structure.
-********************************************************************/
-
-static NTSTATUS init_samr_dispinfo_5(TALLOC_CTX *ctx,
-				     struct samr_DispInfoAscii *r,
-				     uint32_t num_entries,
-				     uint32_t start_idx,
-				     struct samr_displayentry *entries)
-{
-	uint32_t i;
-
-	DEBUG(5, ("init_samr_dispinfo_5: num_entries: %d\n", num_entries));
-
-	if (num_entries == 0) {
-		return NT_STATUS_OK;
-	}
-
-	r->count = num_entries;
-
-	r->entries = TALLOC_ZERO_ARRAY(ctx, struct samr_DispEntryAscii, num_entries);
-	if (!r->entries) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	for (i = 0; i < num_entries ; i++) {
-
-		init_lsa_AsciiStringLarge(&r->entries[i].account_name,
-					  entries[i].account_name);
-
-		r->entries[i].idx = start_idx+i+1;
-	}
-
-	return NT_STATUS_OK;
-}
-
-/*******************************************************************
- _samr_QueryDisplayInfo
+ samr_reply_query_dispinfo
  ********************************************************************/
 
-NTSTATUS _samr_QueryDisplayInfo(pipes_struct *p,
-				struct samr_QueryDisplayInfo *r)
+NTSTATUS _samr_query_dispinfo(pipes_struct *p, SAMR_Q_QUERY_DISPINFO *q_u, 
+			      SAMR_R_QUERY_DISPINFO *r_u)
 {
-	NTSTATUS status;
 	struct samr_info *info = NULL;
 	uint32 struct_size=0x20; /* W2K always reply that, client doesn't care */
+	
+	uint32 max_entries=q_u->max_entries;
+	uint32 enum_context=q_u->start_idx;
+	uint32 max_size=q_u->max_size;
 
-	uint32 max_entries = r->in.max_entries;
-	uint32 enum_context = r->in.start_idx;
-	uint32 max_size = r->in.buf_size;
-
-	union samr_DispInfo *disp_info = r->out.info;
-
+	SAM_DISPINFO_CTR *ctr;
 	uint32 temp_size=0, total_data_size=0;
 	NTSTATUS disp_ret = NT_STATUS_UNSUCCESSFUL;
 	uint32 num_account = 0;
@@ -1424,15 +1169,16 @@
 	int max_sam_entries = (ra_type == RA_WIN95) ? MAX_SAM_ENTRIES_W95 : MAX_SAM_ENTRIES_W2K;
 	struct samr_displayentry *entries = NULL;
 
-	DEBUG(5,("_samr_QueryDisplayInfo: %d\n", __LINE__));
+	DEBUG(5, ("samr_reply_query_dispinfo: %d\n", __LINE__));
+	r_u->status = NT_STATUS_UNSUCCESSFUL;
 
 	/* find the policy handle.  open a policy on it. */
-	if (!find_policy_by_hnd(p, r->in.domain_handle, (void **)(void *)&info))
+	if (!find_policy_by_hnd(p, &q_u->domain_pol, (void **)(void *)&info))
 		return NT_STATUS_INVALID_HANDLE;
 
 	/*
 	 * calculate how many entries we will return.
-	 * based on
+	 * based on 
 	 * - the number of entries the client asked
 	 * - our limit on that
 	 * - the starting point (enumeration context)
@@ -1458,15 +1204,15 @@
 	 * JFM, 12/20/2001
 	 */
 
-	if ((r->in.level < 1) || (r->in.level > 5)) {
-		DEBUG(0,("_samr_QueryDisplayInfo: Unknown info level (%u)\n",
-			 (unsigned int)r->in.level ));
+	if ((q_u->switch_level < 1) || (q_u->switch_level > 5)) {
+		DEBUG(0,("_samr_query_dispinfo: Unknown info level (%u)\n",
+			 (unsigned int)q_u->switch_level ));
 		return NT_STATUS_INVALID_INFO_CLASS;
 	}
 
 	/* first limit the number of entries we will return */
 	if(max_entries > max_sam_entries) {
-		DEBUG(5, ("_samr_QueryDisplayInfo: client requested %d "
+		DEBUG(5, ("samr_reply_query_dispinfo: client requested %d "
 			  "entries, limiting to %d\n", max_entries,
 			  max_sam_entries));
 		max_entries = max_sam_entries;
@@ -1476,18 +1222,23 @@
 	 * return */
 
 	temp_size=max_entries*struct_size;
-
+	
 	if (temp_size>max_size) {
 		max_entries=MIN((max_size/struct_size),max_entries);;
-		DEBUG(5, ("_samr_QueryDisplayInfo: buffer size limits to "
+		DEBUG(5, ("samr_reply_query_dispinfo: buffer size limits to "
 			  "only %d entries\n", max_entries));
 	}
 
+	if (!(ctr = TALLOC_ZERO_P(p->mem_ctx,SAM_DISPINFO_CTR)))
+		return NT_STATUS_NO_MEMORY;
+
+	ZERO_STRUCTP(ctr);
+
 	become_root();
 
 	/* THe following done as ROOT. Don't return without unbecome_root(). */
 
-	switch (r->in.level) {
+	switch (q_u->switch_level) {
 	case 0x1:
 	case 0x4:
 		if (info->disp_info->users == NULL) {
@@ -1496,10 +1247,10 @@
 				unbecome_root();
 				return NT_STATUS_ACCESS_DENIED;
 			}
-			DEBUG(10,("_samr_QueryDisplayInfo: starting user enumeration at index %u\n",
+			DEBUG(10,("samr_reply_query_dispinfo: starting user enumeration at index %u\n",
 				(unsigned  int)enum_context ));
 		} else {
-			DEBUG(10,("_samr_QueryDisplayInfo: using cached user enumeration at index %u\n",
+			DEBUG(10,("samr_reply_query_dispinfo: using cached user enumeration at index %u\n",
 				(unsigned  int)enum_context ));
 		}
 
@@ -1515,10 +1266,10 @@
 				unbecome_root();
 				return NT_STATUS_ACCESS_DENIED;
 			}
-			DEBUG(10,("_samr_QueryDisplayInfo: starting machine enumeration at index %u\n",
+			DEBUG(10,("samr_reply_query_dispinfo: starting machine enumeration at index %u\n",
 				(unsigned  int)enum_context ));
 		} else {
-			DEBUG(10,("_samr_QueryDisplayInfo: using cached machine enumeration at index %u\n",
+			DEBUG(10,("samr_reply_query_dispinfo: using cached machine enumeration at index %u\n",
 				(unsigned  int)enum_context ));
 		}
 
@@ -1534,10 +1285,10 @@
 				unbecome_root();
 				return NT_STATUS_ACCESS_DENIED;
 			}
-			DEBUG(10,("_samr_QueryDisplayInfo: starting group enumeration at index %u\n",
+			DEBUG(10,("samr_reply_query_dispinfo: starting group enumeration at index %u\n",
 				(unsigned  int)enum_context ));
 		} else {
-			DEBUG(10,("_samr_QueryDisplayInfo: using cached group enumeration at index %u\n",
+			DEBUG(10,("samr_reply_query_dispinfo: using cached group enumeration at index %u\n",
 				(unsigned  int)enum_context ));
 		}
 
@@ -1552,33 +1303,32 @@
 	}
 	unbecome_root();
 
-
 	/* Now create reply structure */
-	switch (r->in.level) {
+	switch (q_u->switch_level) {
 	case 0x1:
-		disp_ret = init_samr_dispinfo_1(p->mem_ctx, &disp_info->info1,
-						num_account, enum_context,
-						entries);
+		disp_ret = init_sam_dispinfo_1(p->mem_ctx, &ctr->sam.info1,
+					       num_account, enum_context,
+					       entries);
 		break;
 	case 0x2:
-		disp_ret = init_samr_dispinfo_2(p->mem_ctx, &disp_info->info2,
-						num_account, enum_context,
-						entries);
+		disp_ret = init_sam_dispinfo_2(p->mem_ctx, &ctr->sam.info2,
+					       num_account, enum_context,
+					       entries);
 		break;
 	case 0x3:
-		disp_ret = init_samr_dispinfo_3(p->mem_ctx, &disp_info->info3,
-						num_account, enum_context,
-						entries);
+		disp_ret = init_sam_dispinfo_3(p->mem_ctx, &ctr->sam.info3,
+					       num_account, enum_context,
+					       entries);
 		break;
 	case 0x4:
-		disp_ret = init_samr_dispinfo_4(p->mem_ctx, &disp_info->info4,
-						num_account, enum_context,
-						entries);
+		disp_ret = init_sam_dispinfo_4(p->mem_ctx, &ctr->sam.info4,
+					       num_account, enum_context,
+					       entries);
 		break;
 	case 0x5:
-		disp_ret = init_samr_dispinfo_5(p->mem_ctx, &disp_info->info5,
-						num_account, enum_context,
-						entries);
+		disp_ret = init_sam_dispinfo_5(p->mem_ctx, &ctr->sam.info5,
+					       num_account, enum_context,
+					       entries);
 		break;
 	default:
 		smb_panic("info class changed");
@@ -1588,134 +1338,80 @@
 	if (!NT_STATUS_IS_OK(disp_ret))
 		return disp_ret;
 
-	/* calculate the total size */
-	total_data_size=num_account*struct_size;
+	temp_size = num_account * struct_size;
 
 	if (num_account) {
-		status = STATUS_MORE_ENTRIES;
+		r_u->status = STATUS_MORE_ENTRIES;
 	} else {
-		status = NT_STATUS_OK;
+		r_u->status = NT_STATUS_OK;
 	}
 
+	if (num_account < max_entries) {
+		r_u->status = NT_STATUS_OK;
+	}
+
 	/* Ensure we cache this enumeration. */
 	set_disp_info_cache_timeout(info->disp_info, DISP_INFO_CACHE_TIMEOUT);
 
-	DEBUG(5, ("_samr_QueryDisplayInfo: %d\n", __LINE__));
+	DEBUG(5, ("_samr_query_dispinfo: %d\n", __LINE__));
 
-	*r->out.total_size = total_data_size;
-	*r->out.returned_size = temp_size;
+	init_samr_r_query_dispinfo(r_u, num_account, total_data_size,
+				   temp_size, q_u->switch_level, ctr,
+				   r_u->status);
 
-	return status;
-}
+	return r_u->status;
 
-/****************************************************************
- _samr_QueryDisplayInfo2
-****************************************************************/
-
-NTSTATUS _samr_QueryDisplayInfo2(pipes_struct *p,
-				 struct samr_QueryDisplayInfo2 *r)
-{
-	struct samr_QueryDisplayInfo q;
-
-	q.in.domain_handle	= r->in.domain_handle;
-	q.in.level		= r->in.level;
-	q.in.start_idx		= r->in.start_idx;
-	q.in.max_entries	= r->in.max_entries;
-	q.in.buf_size		= r->in.buf_size;
-
-	q.out.total_size	= r->out.total_size;
-	q.out.returned_size	= r->out.returned_size;
-	q.out.info		= r->out.info;
-
-	return _samr_QueryDisplayInfo(p, &q);
 }
 
-/****************************************************************
- _samr_QueryDisplayInfo3
-****************************************************************/
-
-NTSTATUS _samr_QueryDisplayInfo3(pipes_struct *p,
-				 struct samr_QueryDisplayInfo3 *r)
-{
-	struct samr_QueryDisplayInfo q;
-
-	q.in.domain_handle	= r->in.domain_handle;
-	q.in.level		= r->in.level;
-	q.in.start_idx		= r->in.start_idx;
-	q.in.max_entries	= r->in.max_entries;
-	q.in.buf_size		= r->in.buf_size;
-
-	q.out.total_size	= r->out.total_size;
-	q.out.returned_size	= r->out.returned_size;
-	q.out.info		= r->out.info;
-
-	return _samr_QueryDisplayInfo(p, &q);
-}
-
 /*******************************************************************
- _samr_QueryAliasInfo
+ samr_reply_query_aliasinfo
  ********************************************************************/
 
-NTSTATUS _samr_QueryAliasInfo(pipes_struct *p,
-			      struct samr_QueryAliasInfo *r)
+NTSTATUS _samr_query_aliasinfo(pipes_struct *p, SAMR_Q_QUERY_ALIASINFO *q_u, SAMR_R_QUERY_ALIASINFO *r_u)
 {
 	DOM_SID   sid;
 	struct acct_info info;
 	uint32    acc_granted;
-	NTSTATUS status;
-	union samr_AliasInfo *alias_info = NULL;
-	const char *alias_name = NULL;
-	const char *alias_description = NULL;
+	BOOL ret;
 
-	DEBUG(5,("_samr_QueryAliasInfo: %d\n", __LINE__));
+	r_u->status = NT_STATUS_OK;
 
-	alias_info = TALLOC_ZERO_P(p->mem_ctx, union samr_AliasInfo);
-	if (!alias_info) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	DEBUG(5,("_samr_query_aliasinfo: %d\n", __LINE__));
 
 	/* find the policy handle.  open a policy on it. */
-	if (!get_lsa_policy_samr_sid(p, r->in.alias_handle, &sid, &acc_granted, NULL))
+	if (!get_lsa_policy_samr_sid(p, &q_u->pol, &sid, &acc_granted, NULL))
 		return NT_STATUS_INVALID_HANDLE;
-
-	status = access_check_samr_function(acc_granted,
-					    SA_RIGHT_ALIAS_LOOKUP_INFO,
-					    "_samr_QueryAliasInfo");
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+	if (!NT_STATUS_IS_OK(r_u->status = access_check_samr_function(acc_granted, SA_RIGHT_ALIAS_LOOKUP_INFO, "_samr_query_aliasinfo"))) {
+		return r_u->status;
 	}
 
 	become_root();
-	status = pdb_get_aliasinfo(&sid, &info);
+	ret = pdb_get_aliasinfo(&sid, &info);
 	unbecome_root();
+	
+	if ( !ret )
+		return NT_STATUS_NO_SUCH_ALIAS;
 
-	if ( !NT_STATUS_IS_OK(status))
-		return status;
+	if ( !(r_u->ctr = TALLOC_ZERO_P( p->mem_ctx, ALIAS_INFO_CTR )) ) 
+		return NT_STATUS_NO_MEMORY;
 
-	/* FIXME: info contains fstrings */
-	alias_name = talloc_strdup(r, info.acct_name);
-	alias_description = talloc_strdup(r, info.acct_desc);
 
-	switch (r->in.level) {
-	case ALIASINFOALL:
-		init_samr_alias_info1(&alias_info->all,
-				      alias_name,
-				      1,
-				      alias_description);
+	switch (q_u->level ) {
+	case 1:
+		r_u->ctr->level = 1;
+		init_samr_alias_info1(&r_u->ctr->alias.info1, info.acct_name, 1, info.acct_desc);
 		break;
-	case ALIASINFODESCRIPTION:
-		init_samr_alias_info3(&alias_info->description,
-				      alias_description);
+	case 3:
+		r_u->ctr->level = 3;
+		init_samr_alias_info3(&r_u->ctr->alias.info3, info.acct_desc);
 		break;
 	default:
 		return NT_STATUS_INVALID_INFO_CLASS;
 	}
 
-	*r->out.info = alias_info;
+	DEBUG(5,("_samr_query_aliasinfo: %d\n", __LINE__));
 
-	DEBUG(5,("_samr_QueryAliasInfo: %d\n", __LINE__));
-
-	return NT_STATUS_OK;
+	return r_u->status;
 }
 
 #if 0
@@ -1779,187 +1475,170 @@
 #endif
 
 /*******************************************************************
- _samr_LookupNames
+ _samr_lookup_names
  ********************************************************************/
 
-NTSTATUS _samr_LookupNames(pipes_struct *p,
-			   struct samr_LookupNames *r)
+NTSTATUS _samr_lookup_names(pipes_struct *p, SAMR_Q_LOOKUP_NAMES *q_u, SAMR_R_LOOKUP_NAMES *r_u)
 {
-	NTSTATUS status;
-	uint32 *rid;
-	enum lsa_SidType *type;
+	uint32 rid[MAX_SAM_ENTRIES];
+	enum lsa_SidType type[MAX_SAM_ENTRIES];
 	int i;
-	int num_rids = r->in.num_names;
+	int num_rids = q_u->num_names2;
 	DOM_SID pol_sid;
+	fstring sid_str;
 	uint32  acc_granted;
-	struct samr_Ids rids, types;
 
-	DEBUG(5,("_samr_LookupNames: %d\n", __LINE__));
+	r_u->status = NT_STATUS_OK;
 
-	if (!get_lsa_policy_samr_sid(p, r->in.domain_handle, &pol_sid, &acc_granted, NULL)) {
-		return NT_STATUS_OBJECT_TYPE_MISMATCH;
-	}
+	DEBUG(5,("_samr_lookup_names: %d\n", __LINE__));
 
-	status = access_check_samr_function(acc_granted,
-					    0, /* Don't know the acc_bits yet */
-					    "_samr_LookupNames");
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+	ZERO_ARRAY(rid);
+	ZERO_ARRAY(type);
+
+	if (!get_lsa_policy_samr_sid(p, &q_u->pol, &pol_sid, &acc_granted, NULL)) {
+		init_samr_r_lookup_names(p->mem_ctx, r_u, 0, NULL, NULL, NT_STATUS_OBJECT_TYPE_MISMATCH);
+		return r_u->status;
 	}
+	
+	if (!NT_STATUS_IS_OK(r_u->status = access_check_samr_function(acc_granted, 0, "_samr_lookup_names"))) { /* Don't know the acc_bits yet */
+		return r_u->status;
+	}
 
 	if (num_rids > MAX_SAM_ENTRIES) {
 		num_rids = MAX_SAM_ENTRIES;
-		DEBUG(5,("_samr_LookupNames: truncating entries to %d\n", num_rids));
+		DEBUG(5,("_samr_lookup_names: truncating entries to %d\n", num_rids));
 	}
 
-	rid = talloc_array(p->mem_ctx, uint32, num_rids);
-	NT_STATUS_HAVE_NO_MEMORY(rid);
-
-	type = talloc_array(p->mem_ctx, enum lsa_SidType, num_rids);
-	NT_STATUS_HAVE_NO_MEMORY(type);
-
-	DEBUG(5,("_samr_LookupNames: looking name on SID %s\n",
-		 sid_string_dbg(&pol_sid)));
-
+	DEBUG(5,("_samr_lookup_names: looking name on SID %s\n", sid_to_string(sid_str, &pol_sid)));
+	
 	for (i = 0; i < num_rids; i++) {
+		fstring name;
+            	int ret;
 
-		status = NT_STATUS_NONE_MAPPED;
+	        r_u->status = NT_STATUS_NONE_MAPPED;
 	        type[i] = SID_NAME_UNKNOWN;
 
-		rid[i] = 0xffffffff;
+	        rid [i] = 0xffffffff;
 
+		ret = rpcstr_pull(name, q_u->uni_name[i].buffer, sizeof(name), q_u->uni_name[i].uni_str_len*2, 0);
+
+		if (ret <= 0) {
+			continue;
+		}
+
 		if (sid_check_is_builtin(&pol_sid)) {
-			if (lookup_builtin_name(r->in.names[i].string,
-						&rid[i]))
-			{
+			if (lookup_builtin_name(name, &rid[i])) {
 				type[i] = SID_NAME_ALIAS;
 			}
 		} else {
-			lookup_global_sam_name(r->in.names[i].string, 0,
-					       &rid[i], &type[i]);
+			lookup_global_sam_name(name, 0, &rid[i], &type[i]);
 		}
 
 		if (type[i] != SID_NAME_UNKNOWN) {
-			status = NT_STATUS_OK;
+			r_u->status = NT_STATUS_OK;
 		}
 	}
 
-	rids.count = num_rids;
-	rids.ids = rid;
+	init_samr_r_lookup_names(p->mem_ctx, r_u, num_rids, rid, type, r_u->status);
 
-	types.count = num_rids;
-	types.ids = type;
+	DEBUG(5,("_samr_lookup_names: %d\n", __LINE__));
 
-	*r->out.rids = rids;
-	*r->out.types = types;
-
-	DEBUG(5,("_samr_LookupNames: %d\n", __LINE__));
-
-	return status;
+	return r_u->status;
 }
 
 /*******************************************************************
- _samr_ChangePasswordUser2
+ _samr_chgpasswd_user
  ********************************************************************/
 
-NTSTATUS _samr_ChangePasswordUser2(pipes_struct *p,
-				   struct samr_ChangePasswordUser2 *r)
+NTSTATUS _samr_chgpasswd_user(pipes_struct *p, SAMR_Q_CHGPASSWD_USER *q_u, SAMR_R_CHGPASSWD_USER *r_u)
 {
-	NTSTATUS status;
 	fstring user_name;
 	fstring wks;
 
-	DEBUG(5,("_samr_ChangePasswordUser2: %d\n", __LINE__));
+	DEBUG(5,("_samr_chgpasswd_user: %d\n", __LINE__));
 
-	fstrcpy(user_name, r->in.account->string);
-	fstrcpy(wks, r->in.server->string);
+	r_u->status = NT_STATUS_OK;
 
-	DEBUG(5,("_samr_ChangePasswordUser2: user: %s wks: %s\n", user_name, wks));
+	rpcstr_pull(user_name, q_u->uni_user_name.buffer, sizeof(user_name), q_u->uni_user_name.uni_str_len*2, 0);
+	rpcstr_pull(wks, q_u->uni_dest_host.buffer, sizeof(wks), q_u->uni_dest_host.uni_str_len*2,0);
 
+	DEBUG(5,("samr_chgpasswd_user: user: %s wks: %s\n", user_name, wks));
+
 	/*
 	 * Pass the user through the NT -> unix user mapping
 	 * function.
 	 */
-
+ 
 	(void)map_username(user_name);
-
+ 
 	/*
-	 * UNIX username case mangling not required, pass_oem_change
+	 * UNIX username case mangling not required, pass_oem_change 
 	 * is case insensitive.
 	 */
 
-	status = pass_oem_change(user_name,
-				 r->in.lm_password->data,
-				 r->in.lm_verifier->hash,
-				 r->in.nt_password->data,
-				 r->in.nt_verifier->hash,
-				 NULL);
+	r_u->status = pass_oem_change(user_name, q_u->lm_newpass.pass, q_u->lm_oldhash.hash,
+				q_u->nt_newpass.pass, q_u->nt_oldhash.hash, NULL);
 
-	DEBUG(5,("_samr_ChangePasswordUser2: %d\n", __LINE__));
+	init_samr_r_chgpasswd_user(r_u, r_u->status);
 
-	return status;
+	DEBUG(5,("_samr_chgpasswd_user: %d\n", __LINE__));
+
+	return r_u->status;
 }
 
 /*******************************************************************
- _samr_ChangePasswordUser3
+ _samr_chgpasswd_user3
  ********************************************************************/
 
-NTSTATUS _samr_ChangePasswordUser3(pipes_struct *p,
-				   struct samr_ChangePasswordUser3 *r)
+NTSTATUS _samr_chgpasswd_user3(pipes_struct *p, SAMR_Q_CHGPASSWD_USER3 *q_u, SAMR_R_CHGPASSWD_USER3 *r_u)
 {
-	NTSTATUS status;
 	fstring user_name;
-	const char *wks = NULL;
+	fstring wks;
 	uint32 reject_reason;
-	struct samr_DomInfo1 *dominfo = NULL;
-	struct samr_ChangeReject *reject = NULL;
+	SAM_UNK_INFO_1 *info = NULL;
+	SAMR_CHANGE_REJECT *reject = NULL;
 
-	DEBUG(5,("_samr_ChangePasswordUser3: %d\n", __LINE__));
+	DEBUG(5,("_samr_chgpasswd_user3: %d\n", __LINE__));
 
-	fstrcpy(user_name, r->in.account->string);
-	if (r->in.server && r->in.server->string) {
-		wks = r->in.server->string;
-	}
+	rpcstr_pull(user_name, q_u->uni_user_name.buffer, sizeof(user_name), q_u->uni_user_name.uni_str_len*2, 0);
+	rpcstr_pull(wks, q_u->uni_dest_host.buffer, sizeof(wks), q_u->uni_dest_host.uni_str_len*2,0);
 
-	DEBUG(5,("_samr_ChangePasswordUser3: user: %s wks: %s\n", user_name, wks));
+	DEBUG(5,("_samr_chgpasswd_user3: user: %s wks: %s\n", user_name, wks));
 
 	/*
 	 * Pass the user through the NT -> unix user mapping
 	 * function.
 	 */
-
+ 
 	(void)map_username(user_name);
-
+ 
 	/*
-	 * UNIX username case mangling not required, pass_oem_change
+	 * UNIX username case mangling not required, pass_oem_change 
 	 * is case insensitive.
 	 */
 
-	status = pass_oem_change(user_name,
-				 r->in.lm_password->data,
-				 r->in.lm_verifier->hash,
-				 r->in.nt_password->data,
-				 r->in.nt_verifier->hash,
-				 &reject_reason);
+	r_u->status = pass_oem_change(user_name, q_u->lm_newpass.pass, q_u->lm_oldhash.hash,
+				      q_u->nt_newpass.pass, q_u->nt_oldhash.hash, &reject_reason);
 
-	if (NT_STATUS_EQUAL(status, NT_STATUS_PASSWORD_RESTRICTION) ||
-	    NT_STATUS_EQUAL(status, NT_STATUS_ACCOUNT_RESTRICTION)) {
+	if (NT_STATUS_EQUAL(r_u->status, NT_STATUS_PASSWORD_RESTRICTION) || 
+	    NT_STATUS_EQUAL(r_u->status, NT_STATUS_ACCOUNT_RESTRICTION)) {
 
 		uint32 min_pass_len,pass_hist,password_properties;
 		time_t u_expire, u_min_age;
 		NTTIME nt_expire, nt_min_age;
 		uint32 account_policy_temp;
 
-		dominfo = TALLOC_ZERO_P(p->mem_ctx, struct samr_DomInfo1);
-		if (!dominfo) {
+		if ((info = TALLOC_ZERO_P(p->mem_ctx, SAM_UNK_INFO_1)) == NULL) {
 			return NT_STATUS_NO_MEMORY;
 		}
 
-		reject = TALLOC_ZERO_P(p->mem_ctx, struct samr_ChangeReject);
-		if (!reject) {
+		if ((reject = TALLOC_ZERO_P(p->mem_ctx, SAMR_CHANGE_REJECT)) == NULL) {
 			return NT_STATUS_NO_MEMORY;
 		}
 
+		ZERO_STRUCTP(info);
+		ZERO_STRUCTP(reject);
+
 		become_root();
 
 		/* AS ROOT !!! */
@@ -1980,87 +1659,84 @@
 		u_min_age = account_policy_temp;
 
 		/* !AS ROOT */
-
+		
 		unbecome_root();
 
 		unix_to_nt_time_abs(&nt_expire, u_expire);
 		unix_to_nt_time_abs(&nt_min_age, u_min_age);
 
-		if (lp_check_password_script() && *lp_check_password_script()) {
-			password_properties |= DOMAIN_PASSWORD_COMPLEX;
-		}
+		init_unk_info1(info, (uint16)min_pass_len, (uint16)pass_hist, 
+		               password_properties, nt_expire, nt_min_age);
 
-		init_samr_DomInfo1(dominfo,
-				   min_pass_len,
-				   pass_hist,
-				   password_properties,
-				   u_expire,
-				   u_min_age);
-
-		reject->reason = reject_reason;
-
-		*r->out.dominfo = dominfo;
-		*r->out.reject = reject;
+		reject->reject_reason = reject_reason;
 	}
+	
+	init_samr_r_chgpasswd_user3(r_u, r_u->status, reject, info);
 
-	DEBUG(5,("_samr_ChangePasswordUser3: %d\n", __LINE__));
+	DEBUG(5,("_samr_chgpasswd_user3: %d\n", __LINE__));
 
-	return status;
+	return r_u->status;
 }
 
 /*******************************************************************
 makes a SAMR_R_LOOKUP_RIDS structure.
 ********************************************************************/
 
-static bool make_samr_lookup_rids(TALLOC_CTX *ctx, uint32 num_names,
-				  const char **names,
-				  struct lsa_String **lsa_name_array_p)
+static BOOL make_samr_lookup_rids(TALLOC_CTX *ctx, uint32 num_names,
+				  const char **names, UNIHDR **pp_hdr_name,
+				  UNISTR2 **pp_uni_name)
 {
-	struct lsa_String *lsa_name_array = NULL;
-	uint32_t i;
+	uint32 i;
+	UNIHDR *hdr_name=NULL;
+	UNISTR2 *uni_name=NULL;
 
-	*lsa_name_array_p = NULL;
+	*pp_uni_name = NULL;
+	*pp_hdr_name = NULL;
 
 	if (num_names != 0) {
-		lsa_name_array = TALLOC_ZERO_ARRAY(ctx, struct lsa_String, num_names);
-		if (!lsa_name_array) {
-			return false;
-		}
+		hdr_name = TALLOC_ZERO_ARRAY(ctx, UNIHDR, num_names);
+		if (hdr_name == NULL)
+			return False;
+
+		uni_name = TALLOC_ZERO_ARRAY(ctx,UNISTR2, num_names);
+		if (uni_name == NULL)
+			return False;
 	}
 
 	for (i = 0; i < num_names; i++) {
 		DEBUG(10, ("names[%d]:%s\n", i, names[i] && *names[i] ? names[i] : ""));
-		init_lsa_String(&lsa_name_array[i], names[i]);
+		init_unistr2(&uni_name[i], names[i], UNI_FLAGS_NONE);
+		init_uni_hdr(&hdr_name[i], &uni_name[i]);
 	}
 
-	*lsa_name_array_p = lsa_name_array;
+	*pp_uni_name = uni_name;
+	*pp_hdr_name = hdr_name;
 
-	return true;
+	return True;
 }
 
 /*******************************************************************
- _samr_LookupRids
+ _samr_lookup_rids
  ********************************************************************/
 
-NTSTATUS _samr_LookupRids(pipes_struct *p,
-			  struct samr_LookupRids *r)
+NTSTATUS _samr_lookup_rids(pipes_struct *p, SAMR_Q_LOOKUP_RIDS *q_u, SAMR_R_LOOKUP_RIDS *r_u)
 {
-	NTSTATUS status;
 	const char **names;
 	enum lsa_SidType *attrs = NULL;
 	uint32 *wire_attrs = NULL;
+	UNIHDR *hdr_name = NULL;
+	UNISTR2 *uni_name = NULL;
 	DOM_SID pol_sid;
-	int num_rids = (int)r->in.num_rids;
+	int num_rids = (int)q_u->num_rids1;
 	uint32 acc_granted;
 	int i;
-	struct lsa_Strings names_array;
-	struct samr_Ids types_array;
-	struct lsa_String *lsa_names = NULL;
+	
+	r_u->status = NT_STATUS_OK;
 
-	DEBUG(5,("_samr_LookupRids: %d\n", __LINE__));
+	DEBUG(5,("_samr_lookup_rids: %d\n", __LINE__));
 
 	/* find the policy handle.  open a policy on it. */
-	if (!get_lsa_policy_samr_sid(p, r->in.domain_handle, &pol_sid, &acc_granted, NULL))
+	if (!get_lsa_policy_samr_sid(p, &q_u->pol, &pol_sid, &acc_granted, NULL))
 		return NT_STATUS_INVALID_HANDLE;
 
 	if (num_rids > 1000) {
@@ -2083,67 +1759,59 @@
 	}
 
 	become_root();  /* lookup_sid can require root privs */
-	status = pdb_lookup_rids(&pol_sid, num_rids, r->in.rids,
-				 names, attrs);
+	r_u->status = pdb_lookup_rids(&pol_sid, num_rids, q_u->rid,
+				      names, attrs);
 	unbecome_root();
 
-	if (NT_STATUS_EQUAL(status, NT_STATUS_NONE_MAPPED) && (num_rids == 0)) {
-		status = NT_STATUS_OK;
+	if ( NT_STATUS_EQUAL(r_u->status, NT_STATUS_NONE_MAPPED) && (num_rids == 0) ) {
+		r_u->status = NT_STATUS_OK;
 	}
 
-	if (!make_samr_lookup_rids(p->mem_ctx, num_rids, names,
-				   &lsa_names)) {
+	if(!make_samr_lookup_rids(p->mem_ctx, num_rids, names,
+				  &hdr_name, &uni_name))
 		return NT_STATUS_NO_MEMORY;
-	}
 
 	/* Convert from enum lsa_SidType to uint32 for wire format. */
 	for (i = 0; i < num_rids; i++) {
 		wire_attrs[i] = (uint32)attrs[i];
 	}
 
-	names_array.count = num_rids;
-	names_array.names = lsa_names;
+	init_samr_r_lookup_rids(r_u, num_rids, hdr_name, uni_name, wire_attrs);
 
-	types_array.count = num_rids;
-	types_array.ids = wire_attrs;
+	DEBUG(5,("_samr_lookup_rids: %d\n", __LINE__));
 
-	*r->out.names = names_array;
-	*r->out.types = types_array;
-
-	DEBUG(5,("_samr_LookupRids: %d\n", __LINE__));
-
-	return status;
+	return r_u->status;
 }
 
 /*******************************************************************
- _samr_OpenUser
-********************************************************************/
+ _samr_open_user. Safe - gives out no passwd info.
+ ********************************************************************/
 
-NTSTATUS _samr_OpenUser(pipes_struct *p,
-			struct samr_OpenUser *r)
+NTSTATUS _samr_open_user(pipes_struct *p, SAMR_Q_OPEN_USER *q_u, SAMR_R_OPEN_USER *r_u)
 {
 	struct samu *sampass=NULL;
 	DOM_SID sid;
-	POLICY_HND domain_pol = *r->in.domain_handle;
-	POLICY_HND *user_pol = r->out.user_handle;
+	POLICY_HND domain_pol = q_u->domain_pol;
+	POLICY_HND *user_pol = &r_u->user_pol;
 	struct samr_info *info = NULL;
 	SEC_DESC *psd = NULL;
 	uint32    acc_granted;
-	uint32    des_access = r->in.access_mask;
+	uint32    des_access = q_u->access_mask;
 	size_t    sd_size;
-	bool ret;
+	BOOL ret;
 	NTSTATUS nt_status;
 	SE_PRIV se_rights;
 
-	/* find the domain policy handle and get domain SID / access bits in the domain policy. */
+	r_u->status = NT_STATUS_OK;
 
+	/* find the domain policy handle and get domain SID / access bits in the domain policy. */
+	
 	if ( !get_lsa_policy_samr_sid(p, &domain_pol, &sid, &acc_granted, NULL) )
 		return NT_STATUS_INVALID_HANDLE;
-
-	nt_status = access_check_samr_function(acc_granted,
-					       SA_RIGHT_DOMAIN_OPEN_ACCOUNT,
-					       "_samr_OpenUser" );
-
+	
+	nt_status = access_check_samr_function( acc_granted, 
+		SA_RIGHT_DOMAIN_OPEN_ACCOUNT, "_samr_open_user" );
+		
 	if ( !NT_STATUS_IS_OK(nt_status) )
 		return nt_status;
 
@@ -2152,22 +1820,22 @@
 	}
 
 	/* append the user's RID to it */
-
-	if (!sid_append_rid(&sid, r->in.rid))
+	
+	if (!sid_append_rid(&sid, q_u->user_rid))
 		return NT_STATUS_NO_SUCH_USER;
-
+	
 	/* check if access can be granted as requested by client. */
-
+	
 	make_samr_object_sd(p->mem_ctx, &psd, &sd_size, &usr_generic_mapping, &sid, SAMR_USR_RIGHTS_WRITE_PW);
 	se_map_generic(&des_access, &usr_generic_mapping);
-
+	
 	se_priv_copy( &se_rights, &se_machine_account );
 	se_priv_add( &se_rights, &se_add_users );
-
-	nt_status = access_check_samr_object(psd, p->pipe_user.nt_user_token,
-		&se_rights, GENERIC_RIGHTS_USER_WRITE, des_access,
-		&acc_granted, "_samr_OpenUser");
-
+	
+	nt_status = access_check_samr_object(psd, p->pipe_user.nt_user_token, 
+		&se_rights, GENERIC_RIGHTS_USER_WRITE, des_access, 
+		&acc_granted, "_samr_open_user");
+		
 	if ( !NT_STATUS_IS_OK(nt_status) )
 		return nt_status;
 
@@ -2191,81 +1859,37 @@
 	if (!create_policy_hnd(p, user_pol, free_samr_info, (void *)info))
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
-	return NT_STATUS_OK;
+	return r_u->status;
 }
 
 /*************************************************************************
- *************************************************************************/
-
-static NTSTATUS init_samr_parameters_string(TALLOC_CTX *mem_ctx,
-					    DATA_BLOB *blob,
-					    struct lsa_BinaryString **_r)
-{
-	struct lsa_BinaryString *r;
-
-	if (!blob || !_r) {
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	r = TALLOC_ZERO_P(mem_ctx, struct lsa_BinaryString);
-	if (!r) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	r->array = TALLOC_ZERO_ARRAY(mem_ctx, uint16_t, blob->length/2);
-	if (!r->array) {
-		return NT_STATUS_NO_MEMORY;
-	}
-	memcpy(r->array, blob->data, blob->length);
-	r->size = blob->length;
-	r->length = blob->length;
-
-	if (!r->array) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	*_r = r;
-
-	return NT_STATUS_OK;
-}
-
-/*************************************************************************
  get_user_info_7. Safe. Only gives out account_name.
  *************************************************************************/
 
-static NTSTATUS get_user_info_7(TALLOC_CTX *mem_ctx,
-				struct samr_UserInfo7 *r,
-				DOM_SID *user_sid)
+static NTSTATUS get_user_info_7(TALLOC_CTX *mem_ctx, SAM_USER_INFO_7 *id7, DOM_SID *user_sid)
 {
 	struct samu *smbpass=NULL;
-	bool ret;
-	const char *account_name = NULL;
+	BOOL ret;
 
-	ZERO_STRUCTP(r);
-
 	if ( !(smbpass = samu_new( mem_ctx )) ) {
 		return NT_STATUS_NO_MEMORY;
 	}
-
+	
 	become_root();
 	ret = pdb_getsampwsid(smbpass, user_sid);
 	unbecome_root();
 
 	if ( !ret ) {
-		DEBUG(4,("User %s not found\n", sid_string_dbg(user_sid)));
+		DEBUG(4,("User %s not found\n", sid_string_static(user_sid)));
 		return NT_STATUS_NO_SUCH_USER;
 	}
 
-	account_name = talloc_strdup(mem_ctx, pdb_get_username(smbpass));
-	if (!account_name) {
-		TALLOC_FREE(smbpass);
-		return NT_STATUS_NO_MEMORY;
-	}
-	TALLOC_FREE(smbpass);
+	DEBUG(3,("User:[%s]\n", pdb_get_username(smbpass) ));
 
-	DEBUG(3,("User:[%s]\n", account_name));
+	ZERO_STRUCTP(id7);
+	init_sam_user_info7(id7, pdb_get_username(smbpass) );
 
-	init_samr_user_info7(r, account_name);
+	TALLOC_FREE(smbpass);
 
 	return NT_STATUS_OK;
 }
@@ -2273,16 +1897,11 @@
 /*************************************************************************
  get_user_info_9. Only gives out primary group SID.
  *************************************************************************/
-
-static NTSTATUS get_user_info_9(TALLOC_CTX *mem_ctx,
-				struct samr_UserInfo9 *r,
-				DOM_SID *user_sid)
+static NTSTATUS get_user_info_9(TALLOC_CTX *mem_ctx, SAM_USER_INFO_9 * id9, DOM_SID *user_sid)
 {
 	struct samu *smbpass=NULL;
-	bool ret;
+	BOOL ret;
 
-	ZERO_STRUCTP(r);
-
 	if ( !(smbpass = samu_new( mem_ctx )) ) {
 		return NT_STATUS_NO_MEMORY;
 	}
@@ -2292,14 +1911,14 @@
 	unbecome_root();
 
 	if (ret==False) {
-		DEBUG(4,("User %s not found\n", sid_string_dbg(user_sid)));
-		TALLOC_FREE(smbpass);
+		DEBUG(4,("User %s not found\n", sid_string_static(user_sid)));
 		return NT_STATUS_NO_SUCH_USER;
 	}
 
 	DEBUG(3,("User:[%s]\n", pdb_get_username(smbpass) ));
 
-	init_samr_user_info9(r, pdb_get_group_rid(smbpass));
+	ZERO_STRUCTP(id9);
+	init_sam_user_info9(id9, pdb_get_group_rid(smbpass) );
 
 	TALLOC_FREE(smbpass);
 
@@ -2310,15 +1929,11 @@
  get_user_info_16. Safe. Only gives out acb bits.
  *************************************************************************/
 
-static NTSTATUS get_user_info_16(TALLOC_CTX *mem_ctx,
-				 struct samr_UserInfo16 *r,
-				 DOM_SID *user_sid)
+static NTSTATUS get_user_info_16(TALLOC_CTX *mem_ctx, SAM_USER_INFO_16 *id16, DOM_SID *user_sid)
 {
 	struct samu *smbpass=NULL;
-	bool ret;
+	BOOL ret;
 
-	ZERO_STRUCTP(r);
-
 	if ( !(smbpass = samu_new( mem_ctx )) ) {
 		return NT_STATUS_NO_MEMORY;
 	}
@@ -2328,14 +1943,14 @@
 	unbecome_root();
 
 	if (ret==False) {
-		DEBUG(4,("User %s not found\n", sid_string_dbg(user_sid)));
-		TALLOC_FREE(smbpass);
+		DEBUG(4,("User %s not found\n", sid_string_static(user_sid)));
 		return NT_STATUS_NO_SUCH_USER;
 	}
 
 	DEBUG(3,("User:[%s]\n", pdb_get_username(smbpass) ));
 
-	init_samr_user_info16(r, pdb_get_acct_ctrl(smbpass));
+	ZERO_STRUCTP(id16);
+	init_sam_user_info16(id16, pdb_get_acct_ctrl(smbpass) );
 
 	TALLOC_FREE(smbpass);
 
@@ -2345,19 +1960,14 @@
 /*************************************************************************
  get_user_info_18. OK - this is the killer as it gives out password info.
  Ensure that this is only allowed on an encrypted connection with a root
- user. JRA.
+ user. JRA. 
  *************************************************************************/
 
-static NTSTATUS get_user_info_18(pipes_struct *p,
-				 TALLOC_CTX *mem_ctx,
-				 struct samr_UserInfo18 *r,
-				 DOM_SID *user_sid)
+static NTSTATUS get_user_info_18(pipes_struct *p, TALLOC_CTX *mem_ctx, SAM_USER_INFO_18 * id18, DOM_SID *user_sid)
 {
 	struct samu *smbpass=NULL;
-	bool ret;
+	BOOL ret;
 
-	ZERO_STRUCTP(r);
-
 	if (p->auth.auth_type != PIPE_AUTH_TYPE_NTLMSSP || p->auth.auth_type != PIPE_AUTH_TYPE_SPNEGO_NTLMSSP) {
 		return NT_STATUS_ACCESS_DENIED;
 	}
@@ -2377,7 +1987,7 @@
 	ret = pdb_getsampwsid(smbpass, user_sid);
 
 	if (ret == False) {
-		DEBUG(4, ("User %s not found\n", sid_string_dbg(user_sid)));
+		DEBUG(4, ("User %s not found\n", sid_string_static(user_sid)));
 		TALLOC_FREE(smbpass);
 		return (geteuid() == (uid_t)0) ? NT_STATUS_NO_SUCH_USER : NT_STATUS_ACCESS_DENIED;
 	}
@@ -2389,9 +1999,9 @@
 		return NT_STATUS_ACCOUNT_DISABLED;
 	}
 
-	init_samr_user_info18(r, pdb_get_lanman_passwd(smbpass),
-			      pdb_get_nt_passwd(smbpass));
-
+	ZERO_STRUCTP(id18);
+	init_sam_user_info18(id18, pdb_get_lanman_passwd(smbpass), pdb_get_nt_passwd(smbpass));
+	
 	TALLOC_FREE(smbpass);
 
 	return NT_STATUS_OK;
@@ -2401,19 +2011,11 @@
  get_user_info_20
  *************************************************************************/
 
-static NTSTATUS get_user_info_20(TALLOC_CTX *mem_ctx,
-				 struct samr_UserInfo20 *r,
-				 DOM_SID *user_sid)
+static NTSTATUS get_user_info_20(TALLOC_CTX *mem_ctx, SAM_USER_INFO_20 *id20, DOM_SID *user_sid)
 {
 	struct samu *sampass=NULL;
-	bool ret;
-	const char *munged_dial = NULL;
-	DATA_BLOB blob;
-	NTSTATUS status;
-	struct lsa_BinaryString *parameters = NULL;
+	BOOL ret;
 
-	ZERO_STRUCTP(r);
-
 	if ( !(sampass = samu_new( mem_ctx )) ) {
 		return NT_STATUS_NO_MEMORY;
 	}
@@ -2423,214 +2025,73 @@
 	unbecome_root();
 
 	if (ret == False) {
-		DEBUG(4,("User %s not found\n", sid_string_dbg(user_sid)));
-		TALLOC_FREE(sampass);
+		DEBUG(4,("User %s not found\n", sid_string_static(user_sid)));
 		return NT_STATUS_NO_SUCH_USER;
 	}
 
-	munged_dial = pdb_get_munged_dial(sampass);
-
 	samr_clear_sam_passwd(sampass);
 
-	DEBUG(3,("User:[%s] has [%s] (length: %d)\n", pdb_get_username(sampass),
-		munged_dial, (int)strlen(munged_dial)));
+	DEBUG(3,("User:[%s]\n",  pdb_get_username(sampass) ));
 
-	if (munged_dial) {
-		blob = base64_decode_data_blob(munged_dial);
-	} else {
-		blob = data_blob_string_const("");
-	}
-
-	status = init_samr_parameters_string(mem_ctx, &blob, &parameters);
-	data_blob_free(&blob);
+	ZERO_STRUCTP(id20);
+	init_sam_user_info20A(id20, sampass);
+	
 	TALLOC_FREE(sampass);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
 
-	init_samr_user_info20(r, parameters);
-
 	return NT_STATUS_OK;
 }
 
-
 /*************************************************************************
  get_user_info_21
  *************************************************************************/
 
-static NTSTATUS get_user_info_21(TALLOC_CTX *mem_ctx,
-				 struct samr_UserInfo21 *r,
-				 DOM_SID *user_sid,
-				 DOM_SID *domain_sid)
+static NTSTATUS get_user_info_21(TALLOC_CTX *mem_ctx, SAM_USER_INFO_21 *id21, 
+				 DOM_SID *user_sid, DOM_SID *domain_sid)
 {
-	NTSTATUS status;
-	struct samu *pw = NULL;
-	bool ret;
-	const DOM_SID *sid_user, *sid_group;
-	uint32_t rid, primary_gid;
-	NTTIME last_logon, last_logoff, last_password_change,
-	       acct_expiry, allow_password_change, force_password_change;
-	time_t must_change_time;
-	uint8_t password_expired;
-	const char *account_name, *full_name, *home_directory, *home_drive,
-		   *logon_script, *profile_path, *description,
-		   *workstations, *comment;
-	struct samr_LogonHours logon_hours;
-	struct lsa_BinaryString *parameters = NULL;
-	const char *munged_dial = NULL;
-	DATA_BLOB blob;
+	struct samu *sampass=NULL;
+	BOOL ret;
+	NTSTATUS nt_status;
 
-	ZERO_STRUCTP(r);
-
-	if (!(pw = samu_new(mem_ctx))) {
+	if ( !(sampass = samu_new( mem_ctx )) ) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
 	become_root();
-	ret = pdb_getsampwsid(pw, user_sid);
+	ret = pdb_getsampwsid(sampass, user_sid);
 	unbecome_root();
 
 	if (ret == False) {
-		DEBUG(4,("User %s not found\n", sid_string_dbg(user_sid)));
-		TALLOC_FREE(pw);
+		DEBUG(4,("User %s not found\n", sid_string_static(user_sid)));
 		return NT_STATUS_NO_SUCH_USER;
 	}
 
-	samr_clear_sam_passwd(pw);
+	samr_clear_sam_passwd(sampass);
 
-	DEBUG(3,("User:[%s]\n", pdb_get_username(pw)));
+	DEBUG(3,("User:[%s]\n",  pdb_get_username(sampass) ));
 
-	sid_user = pdb_get_user_sid(pw);
+	ZERO_STRUCTP(id21);
+	nt_status = init_sam_user_info21A(id21, sampass, domain_sid);
+	
+	TALLOC_FREE(sampass);
 
-	if (!sid_peek_check_rid(domain_sid, sid_user, &rid)) {
-		DEBUG(0, ("get_user_info_21: User %s has SID %s, \nwhich conflicts with "
-			  "the domain sid %s.  Failing operation.\n",
-			  pdb_get_username(pw), sid_string_dbg(sid_user),
-			  sid_string_dbg(domain_sid)));
-		TALLOC_FREE(pw);
-		return NT_STATUS_UNSUCCESSFUL;
-	}
-
-	become_root();
-	sid_group = pdb_get_group_sid(pw);
-	unbecome_root();
-
-	if (!sid_peek_check_rid(domain_sid, sid_group, &primary_gid)) {
-		DEBUG(0, ("get_user_info_21: User %s has Primary Group SID %s, \n"
-			  "which conflicts with the domain sid %s.  Failing operation.\n",
-			  pdb_get_username(pw), sid_string_dbg(sid_group),
-			  sid_string_dbg(domain_sid)));
-		TALLOC_FREE(pw);
-		return NT_STATUS_UNSUCCESSFUL;
-	}
-
-	unix_to_nt_time(&last_logon, pdb_get_logon_time(pw));
-	unix_to_nt_time(&last_logoff, pdb_get_logoff_time(pw));
-	unix_to_nt_time(&acct_expiry, pdb_get_kickoff_time(pw));
-	unix_to_nt_time(&last_password_change, pdb_get_pass_last_set_time(pw));
-	unix_to_nt_time(&allow_password_change, pdb_get_pass_can_change_time(pw));
-
-	must_change_time = pdb_get_pass_must_change_time(pw);
-	if (must_change_time == get_time_t_max()) {
-		unix_to_nt_time_abs(&force_password_change, must_change_time);
-	} else {
-		unix_to_nt_time(&force_password_change, must_change_time);
-	}
-
-	if (pdb_get_pass_must_change_time(pw) == 0) {
-		password_expired = PASS_MUST_CHANGE_AT_NEXT_LOGON;
-	} else {
-		password_expired = 0;
-	}
-
-	munged_dial = pdb_get_munged_dial(pw);
-	if (munged_dial) {
-		blob = base64_decode_data_blob(munged_dial);
-	} else {
-		blob = data_blob_string_const("");
-	}
-
-	status = init_samr_parameters_string(mem_ctx, &blob, &parameters);
-	data_blob_free(&blob);
-	if (!NT_STATUS_IS_OK(status)) {
-		TALLOC_FREE(pw);
-		return status;
-	}
-
-	account_name = talloc_strdup(mem_ctx, pdb_get_username(pw));
-	full_name = talloc_strdup(mem_ctx, pdb_get_fullname(pw));
-	home_directory = talloc_strdup(mem_ctx, pdb_get_homedir(pw));
-	home_drive = talloc_strdup(mem_ctx, pdb_get_dir_drive(pw));
-	logon_script = talloc_strdup(mem_ctx, pdb_get_logon_script(pw));
-	profile_path = talloc_strdup(mem_ctx, pdb_get_profile_path(pw));
-	description = talloc_strdup(mem_ctx, pdb_get_acct_desc(pw));
-	workstations = talloc_strdup(mem_ctx, pdb_get_workstations(pw));
-	comment = talloc_strdup(mem_ctx, pdb_get_comment(pw));
-
-	logon_hours = get_logon_hours_from_pdb(mem_ctx, pw);
-#if 0
-
-	/*
-	  Look at a user on a real NT4 PDC with usrmgr, press
-	  'ok'. Then you will see that fields_present is set to
-	  0x08f827fa. Look at the user immediately after that again,
-	  and you will see that 0x00fffff is returned. This solves
-	  the problem that you get access denied after having looked
-	  at the user.
-	  -- Volker
-	*/
-
-#endif
-
-	init_samr_user_info21(r,
-			      last_logon,
-			      last_logoff,
-			      last_password_change,
-			      acct_expiry,
-			      allow_password_change,
-			      force_password_change,
-			      account_name,
-			      full_name,
-			      home_directory,
-			      home_drive,
-			      logon_script,
-			      profile_path,
-			      description,
-			      workstations,
-			      comment,
-			      parameters,
-			      rid,
-			      primary_gid,
-			      pdb_get_acct_ctrl(pw),
-			      pdb_build_fields_present(pw),
-			      logon_hours,
-			      pdb_get_bad_password_count(pw),
-			      pdb_get_logon_count(pw),
-			      0, /* country_code */
-			      0, /* code_page */
-			      0, /* nt_password_set */
-			      0, /* lm_password_set */
-			      password_expired);
-	TALLOC_FREE(pw);
-
-	return NT_STATUS_OK;
+	return nt_status;
 }
 
 /*******************************************************************
- _samr_QueryUserInfo
+ _samr_query_userinfo
  ********************************************************************/
 
-NTSTATUS _samr_QueryUserInfo(pipes_struct *p,
-			     struct samr_QueryUserInfo *r)
+NTSTATUS _samr_query_userinfo(pipes_struct *p, SAMR_Q_QUERY_USERINFO *q_u, SAMR_R_QUERY_USERINFO *r_u)
 {
-	NTSTATUS status;
-	union samr_UserInfo *user_info = NULL;
+	SAM_USERINFO_CTR *ctr;
 	struct samr_info *info = NULL;
 	DOM_SID domain_sid;
 	uint32 rid;
+	
+	r_u->status=NT_STATUS_OK;
 
 	/* search for the handle */
-	if (!find_policy_by_hnd(p, r->in.user_handle, (void **)(void *)&info))
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&info))
 		return NT_STATUS_INVALID_HANDLE;
 
 	domain_sid = info->sid;
@@ -2640,92 +2101,102 @@
 	if (!sid_check_is_in_our_domain(&info->sid))
 		return NT_STATUS_OBJECT_TYPE_MISMATCH;
 
-	DEBUG(5,("_samr_QueryUserInfo: sid:%s\n",
-		 sid_string_dbg(&info->sid)));
+	DEBUG(5,("_samr_query_userinfo: sid:%s\n", sid_string_static(&info->sid)));
 
-	user_info = TALLOC_ZERO_P(p->mem_ctx, union samr_UserInfo);
-	if (!user_info) {
+	ctr = TALLOC_ZERO_P(p->mem_ctx, SAM_USERINFO_CTR);
+	if (!ctr)
 		return NT_STATUS_NO_MEMORY;
-	}
 
-	DEBUG(5,("_samr_QueryUserInfo: user info level: %d\n", r->in.level));
+	ZERO_STRUCTP(ctr);
 
-	switch (r->in.level) {
+	/* ok!  user info levels (lots: see MSDEV help), off we go... */
+	ctr->switch_value = q_u->switch_value;
+
+	DEBUG(5,("_samr_query_userinfo: user info level: %d\n", q_u->switch_value));
+
+	switch (q_u->switch_value) {
 	case 7:
-		status = get_user_info_7(p->mem_ctx, &user_info->info7, &info->sid);
-		if (!NT_STATUS_IS_OK(status)) {
-			return status;
-		}
+		ctr->info.id7 = TALLOC_ZERO_P(p->mem_ctx, SAM_USER_INFO_7);
+		if (ctr->info.id7 == NULL)
+			return NT_STATUS_NO_MEMORY;
+
+		if (!NT_STATUS_IS_OK(r_u->status = get_user_info_7(p->mem_ctx, ctr->info.id7, &info->sid)))
+			return r_u->status;
 		break;
 	case 9:
-		status = get_user_info_9(p->mem_ctx, &user_info->info9, &info->sid);
-		if (!NT_STATUS_IS_OK(status)) {
-			return status;
-		}
+		ctr->info.id9 = TALLOC_ZERO_P(p->mem_ctx, SAM_USER_INFO_9);
+		if (ctr->info.id9 == NULL)
+			return NT_STATUS_NO_MEMORY;
+
+		if (!NT_STATUS_IS_OK(r_u->status = get_user_info_9(p->mem_ctx, ctr->info.id9, &info->sid)))
+			return r_u->status;
 		break;
 	case 16:
-		status = get_user_info_16(p->mem_ctx, &user_info->info16, &info->sid);
-		if (!NT_STATUS_IS_OK(status)) {
-			return status;
-		}
+		ctr->info.id16 = TALLOC_ZERO_P(p->mem_ctx, SAM_USER_INFO_16);
+		if (ctr->info.id16 == NULL)
+			return NT_STATUS_NO_MEMORY;
+
+		if (!NT_STATUS_IS_OK(r_u->status = get_user_info_16(p->mem_ctx, ctr->info.id16, &info->sid)))
+			return r_u->status;
 		break;
 
 	case 18:
-		status = get_user_info_18(p, p->mem_ctx, &user_info->info18, &info->sid);
-		if (!NT_STATUS_IS_OK(status)) {
-			return status;
-		}
-		break;
+		ctr->info.id18 = TALLOC_ZERO_P(p->mem_ctx, SAM_USER_INFO_18);
+		if (ctr->info.id18 == NULL)
+			return NT_STATUS_NO_MEMORY;
 
+		if (!NT_STATUS_IS_OK(r_u->status = get_user_info_18(p, p->mem_ctx, ctr->info.id18, &info->sid)))
+			return r_u->status;
+		break;
+		
 	case 20:
-		status = get_user_info_20(p->mem_ctx, &user_info->info20, &info->sid);
-		if (!NT_STATUS_IS_OK(status)) {
-			return status;
-		}
+		ctr->info.id20 = TALLOC_ZERO_P(p->mem_ctx,SAM_USER_INFO_20);
+		if (ctr->info.id20 == NULL)
+			return NT_STATUS_NO_MEMORY;
+		if (!NT_STATUS_IS_OK(r_u->status = get_user_info_20(p->mem_ctx, ctr->info.id20, &info->sid)))
+			return r_u->status;
 		break;
 
 	case 21:
-		status = get_user_info_21(p->mem_ctx, &user_info->info21,
-					  &info->sid, &domain_sid);
-		if (!NT_STATUS_IS_OK(status)) {
-			return status;
-		}
+		ctr->info.id21 = TALLOC_ZERO_P(p->mem_ctx,SAM_USER_INFO_21);
+		if (ctr->info.id21 == NULL)
+			return NT_STATUS_NO_MEMORY;
+		if (!NT_STATUS_IS_OK(r_u->status = get_user_info_21(p->mem_ctx, ctr->info.id21, 
+								    &info->sid, &domain_sid)))
+			return r_u->status;
 		break;
 
 	default:
 		return NT_STATUS_INVALID_INFO_CLASS;
 	}
 
-	*r->out.info = user_info;
+	init_samr_r_query_userinfo(r_u, ctr, r_u->status);
 
-	DEBUG(5,("_samr_QueryUserInfo: %d\n", __LINE__));
-
-	return status;
+	DEBUG(5,("_samr_query_userinfo: %d\n", __LINE__));
+	
+	return r_u->status;
 }
 
 /*******************************************************************
- _samr_GetGroupsForUser
+ samr_reply_query_usergroups
  ********************************************************************/
 
-NTSTATUS _samr_GetGroupsForUser(pipes_struct *p,
-				struct samr_GetGroupsForUser *r)
+NTSTATUS _samr_query_usergroups(pipes_struct *p, SAMR_Q_QUERY_USERGROUPS *q_u, SAMR_R_QUERY_USERGROUPS *r_u)
 {
 	struct samu *sam_pass=NULL;
 	DOM_SID  sid;
 	DOM_SID *sids;
-	struct samr_RidWithAttribute dom_gid;
-	struct samr_RidWithAttribute *gids = NULL;
+	DOM_GID dom_gid;
+	DOM_GID *gids = NULL;
 	uint32 primary_group_rid;
 	size_t num_groups = 0;
 	gid_t *unix_gids;
 	size_t i, num_gids;
 	uint32 acc_granted;
-	bool ret;
+	BOOL ret;
 	NTSTATUS result;
-	bool success = False;
+	BOOL success = False;
 
-	struct samr_RidWithAttributeArray *rids = NULL;
-
 	/*
 	 * from the SID in the request:
 	 * we should send back the list of DOMAIN GROUPS
@@ -2738,22 +2209,16 @@
 	 * JFM, 12/2/2001
 	 */
 
-	DEBUG(5,("_samr_GetGroupsForUser: %d\n", __LINE__));
+	r_u->status = NT_STATUS_OK;
 
-	rids = TALLOC_ZERO_P(p->mem_ctx, struct samr_RidWithAttributeArray);
-	if (!rids) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	DEBUG(5,("_samr_query_usergroups: %d\n", __LINE__));
 
 	/* find the policy handle.  open a policy on it. */
-	if (!get_lsa_policy_samr_sid(p, r->in.user_handle, &sid, &acc_granted, NULL))
+	if (!get_lsa_policy_samr_sid(p, &q_u->pol, &sid, &acc_granted, NULL))
 		return NT_STATUS_INVALID_HANDLE;
-
-	result = access_check_samr_function(acc_granted,
-					    SA_RIGHT_USER_GET_GROUPS,
-					    "_samr_GetGroupsForUser");
-	if (!NT_STATUS_IS_OK(result)) {
-		return result;
+	
+	if (!NT_STATUS_IS_OK(r_u->status = access_check_samr_function(acc_granted, SA_RIGHT_USER_GET_GROUPS, "_samr_query_usergroups"))) {
+		return r_u->status;
 	}
 
 	if (!sid_check_is_in_our_domain(&sid))
@@ -2769,7 +2234,7 @@
 
 	if (!ret) {
 		DEBUG(10, ("pdb_getsampwsid failed for %s\n",
-			   sid_string_dbg(&sid)));
+			   sid_string_static(&sid)));
 		return NT_STATUS_NO_SUCH_USER;
 	}
 
@@ -2780,7 +2245,7 @@
 	result = pdb_enum_group_memberships(p->mem_ctx, sam_pass,
 					    &sids, &unix_gids, &num_groups);
 	if ( NT_STATUS_IS_OK(result) ) {
-		success = sid_peek_check_rid(get_global_sam_sid(),
+		success = sid_peek_check_rid(get_global_sam_sid(), 
 					     pdb_get_group_sid(sam_pass),
 					     &primary_group_rid);
 	}
@@ -2788,13 +2253,13 @@
 
 	if (!NT_STATUS_IS_OK(result)) {
 		DEBUG(10, ("pdb_enum_group_memberships failed for %s\n",
-			   sid_string_dbg(&sid)));
+			   sid_string_static(&sid)));
 		return result;
 	}
 
 	if ( !success ) {
 		DEBUG(5, ("Group sid %s for user %s not in our domain\n",
-			  sid_string_dbg(pdb_get_group_sid(sam_pass)),
+			  sid_string_static(pdb_get_group_sid(sam_pass)),
 			  pdb_get_username(sam_pass)));
 		TALLOC_FREE(sam_pass);
 		return NT_STATUS_INTERNAL_DB_CORRUPTION;
@@ -2803,53 +2268,48 @@
 	gids = NULL;
 	num_gids = 0;
 
-	dom_gid.attributes = (SE_GROUP_MANDATORY|SE_GROUP_ENABLED_BY_DEFAULT|
-			      SE_GROUP_ENABLED);
-	dom_gid.rid = primary_group_rid;
-	ADD_TO_ARRAY(p->mem_ctx, struct samr_RidWithAttribute, dom_gid, &gids, &num_gids);
+	dom_gid.attr = (SE_GROUP_MANDATORY|SE_GROUP_ENABLED_BY_DEFAULT|
+			SE_GROUP_ENABLED);
+	dom_gid.g_rid = primary_group_rid;
+	ADD_TO_ARRAY(p->mem_ctx, DOM_GID, dom_gid, &gids, &num_gids);
 
 	for (i=0; i<num_groups; i++) {
 
 		if (!sid_peek_check_rid(get_global_sam_sid(),
-					&(sids[i]), &dom_gid.rid)) {
+					&(sids[i]), &dom_gid.g_rid)) {
 			DEBUG(10, ("Found sid %s not in our domain\n",
-				   sid_string_dbg(&sids[i])));
+				   sid_string_static(&sids[i])));
 			continue;
 		}
 
-		if (dom_gid.rid == primary_group_rid) {
+		if (dom_gid.g_rid == primary_group_rid) {
 			/* We added the primary group directly from the
 			 * sam_account. The other SIDs are unique from
 			 * enum_group_memberships */
 			continue;
 		}
 
-		ADD_TO_ARRAY(p->mem_ctx, struct samr_RidWithAttribute, dom_gid, &gids, &num_gids);
+		ADD_TO_ARRAY(p->mem_ctx, DOM_GID, dom_gid, &gids, &num_gids);
 	}
-
-	rids->count = num_gids;
-	rids->rids = gids;
-
-	*r->out.rids = rids;
-
-	DEBUG(5,("_samr_GetGroupsForUser: %d\n", __LINE__));
-
-	return result;
+	
+	/* construct the response.  lkclXXXX: gids are not copied! */
+	init_samr_r_query_usergroups(r_u, num_gids, gids, r_u->status);
+	
+	DEBUG(5,("_samr_query_usergroups: %d\n", __LINE__));
+	
+	return r_u->status;
 }
 
 /*******************************************************************
- samr_QueryDomainInfo_internal
+ _samr_query_domain_info
  ********************************************************************/
 
-static NTSTATUS samr_QueryDomainInfo_internal(const char *fn_name,
-					      pipes_struct *p,
-					      struct policy_handle *handle,
-					      uint32_t level,
-					      union samr_DomainInfo **dom_info_ptr)
+NTSTATUS _samr_query_domain_info(pipes_struct *p, 
+				 SAMR_Q_QUERY_DOMAIN_INFO *q_u, 
+				 SAMR_R_QUERY_DOMAIN_INFO *r_u)
 {
-	NTSTATUS status = NT_STATUS_OK;
 	struct samr_info *info = NULL;
-	union samr_DomainInfo *dom_info;
+	SAM_UNK_CTR *ctr;
 	uint32 min_pass_len,pass_hist,password_properties;
 	time_t u_expire, u_min_age;
 	NTTIME nt_expire, nt_min_age;
@@ -2867,23 +2327,24 @@
 
 	uint32 num_users=0, num_groups=0, num_aliases=0;
 
-	DEBUG(5,("%s: %d\n", fn_name, __LINE__));
-
-	dom_info = TALLOC_ZERO_P(p->mem_ctx, union samr_DomainInfo);
-	if (!dom_info) {
+	if ((ctr = TALLOC_ZERO_P(p->mem_ctx, SAM_UNK_CTR)) == NULL) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	*dom_info_ptr = dom_info;
+	ZERO_STRUCTP(ctr);
 
+	r_u->status = NT_STATUS_OK;
+	
+	DEBUG(5,("_samr_query_domain_info: %d\n", __LINE__));
+	
 	/* find the policy handle.  open a policy on it. */
-	if (!find_policy_by_hnd(p, handle, (void **)(void *)&info)) {
+	if (!find_policy_by_hnd(p, &q_u->domain_pol, (void **)(void *)&info)) {
 		return NT_STATUS_INVALID_HANDLE;
 	}
-
-	switch (level) {
+	
+	switch (q_u->switch_value) {
 		case 0x01:
-
+			
 			become_root();
 
 			/* AS ROOT !!! */
@@ -2904,18 +2365,14 @@
 			u_min_age = account_policy_temp;
 
 			/* !AS ROOT */
-
+			
 			unbecome_root();
 
 			unix_to_nt_time_abs(&nt_expire, u_expire);
 			unix_to_nt_time_abs(&nt_min_age, u_min_age);
 
-			init_samr_DomInfo1(&dom_info->info1,
-					   (uint16)min_pass_len,
-					   (uint16)pass_hist,
-					   password_properties,
-					   nt_expire,
-					   nt_min_age);
+			init_unk_info1(&ctr->info.inf1, (uint16)min_pass_len, (uint16)pass_hist, 
+			               password_properties, nt_expire, nt_min_age);
 			break;
 		case 0x02:
 
@@ -2936,25 +2393,15 @@
 				seq_num = time(NULL);
 
 			/* !AS ROOT */
-
+			
 			unbecome_root();
 
 			server_role = ROLE_DOMAIN_PDC;
 			if (lp_server_role() == ROLE_DOMAIN_BDC)
 				server_role = ROLE_DOMAIN_BDC;
 
-			init_samr_DomInfo2(&dom_info->info2,
-					   nt_logout,
-					   lp_serverstring(),
-					   lp_workgroup(),
-					   global_myname(),
-					   seq_num,
-					   1,
-					   server_role,
-					   1,
-					   num_users,
-					   num_groups,
-					   num_aliases);
+			init_unk_info2(&ctr->info.inf2, lp_serverstring(), lp_workgroup(), global_myname(), seq_num, 
+				       num_users, num_groups, num_aliases, nt_logout, server_role);
 			break;
 		case 0x03:
 
@@ -2969,37 +2416,31 @@
 			}
 
 			/* !AS ROOT */
-
+			
 			unbecome_root();
 
 			unix_to_nt_time_abs(&nt_logout, u_logout);
-
-			init_samr_DomInfo3(&dom_info->info3,
-					   nt_logout);
-
+			
+			init_unk_info3(&ctr->info.inf3, nt_logout);
 			break;
 		case 0x04:
-			init_samr_DomInfo4(&dom_info->info4,
-					   lp_serverstring());
+			init_unk_info4(&ctr->info.inf4, lp_serverstring());
 			break;
 		case 0x05:
-			init_samr_DomInfo5(&dom_info->info5,
-					   get_global_sam_name());
+			init_unk_info5(&ctr->info.inf5, get_global_sam_name());
 			break;
 		case 0x06:
 			/* NT returns its own name when a PDC. win2k and later
 			 * only the name of the PDC if itself is a BDC (samba4
 			 * idl) */
-			init_samr_DomInfo6(&dom_info->info6,
-					   global_myname());
+			init_unk_info6(&ctr->info.inf6, global_myname());
 			break;
 		case 0x07:
 			server_role = ROLE_DOMAIN_PDC;
 			if (lp_server_role() == ROLE_DOMAIN_BDC)
 				server_role = ROLE_DOMAIN_BDC;
 
-			init_samr_DomInfo7(&dom_info->info7,
-					   server_role);
+			init_unk_info7(&ctr->info.inf7, server_role);
 			break;
 		case 0x08:
 
@@ -3012,12 +2453,10 @@
 			}
 
 			/* !AS ROOT */
-
+			
 			unbecome_root();
 
-			init_samr_DomInfo8(&dom_info->info8,
-					   seq_num,
-					   0);
+			init_unk_info8(&ctr->info.inf8, (uint32) seq_num);
 			break;
 		case 0x0c:
 
@@ -3038,40 +2477,26 @@
 			lockout = account_policy_temp;
 
 			/* !AS ROOT */
-
+			
 			unbecome_root();
 
 			unix_to_nt_time_abs(&nt_lock_duration, u_lock_duration);
 			unix_to_nt_time_abs(&nt_reset_time, u_reset_time);
-
-			init_samr_DomInfo12(&dom_info->info12,
-					    nt_lock_duration,
-					    nt_reset_time,
-					    (uint16)lockout);
+	
+            		init_unk_info12(&ctr->info.inf12, nt_lock_duration, nt_reset_time, (uint16)lockout);
             		break;
         	default:
             		return NT_STATUS_INVALID_INFO_CLASS;
-	}
+		}
+	
 
-	DEBUG(5,("%s: %d\n", fn_name, __LINE__));
-
-	return status;
+	init_samr_r_query_domain_info(r_u, q_u->switch_value, ctr, NT_STATUS_OK);
+	
+	DEBUG(5,("_samr_query_domain_info: %d\n", __LINE__));
+	
+	return r_u->status;
 }
 
-/*******************************************************************
- _samr_QueryDomainInfo
- ********************************************************************/
-
-NTSTATUS _samr_QueryDomainInfo(pipes_struct *p,
-			       struct samr_QueryDomainInfo *r)
-{
-	return samr_QueryDomainInfo_internal("_samr_QueryDomainInfo",
-					     p,
-					     r->in.domain_handle,
-					     r->in.level,
-					     r->out.info);
-}
-
 /* W2k3 seems to use the same check for all 3 objects that can be created via
  * SAMR, if you try to create for example "Dialup" as an alias it says
  * "NT_STATUS_USER_EXISTS". This is racy, but we can't really lock the user
@@ -3080,7 +2505,7 @@
 static NTSTATUS can_create(TALLOC_CTX *mem_ctx, const char *new_name)
 {
 	enum lsa_SidType type;
-	bool result;
+	BOOL result;
 
 	DEBUG(10, ("Checking whether [%s] can be created\n", new_name));
 
@@ -3111,17 +2536,19 @@
 }
 
 /*******************************************************************
- _samr_CreateUser2
+ _samr_create_user
+ Create an account, can be either a normal user or a machine.
+ This funcion will need to be updated for bdc/domain trusts.
  ********************************************************************/
 
-NTSTATUS _samr_CreateUser2(pipes_struct *p,
-			   struct samr_CreateUser2 *r)
+NTSTATUS _samr_create_user(pipes_struct *p, SAMR_Q_CREATE_USER *q_u,
+			   SAMR_R_CREATE_USER *r_u)
 {
-	const char *account = NULL;
+	char *account;
 	DOM_SID sid;
-	POLICY_HND dom_pol = *r->in.domain_handle;
-	uint32_t acb_info = r->in.acct_flags;
-	POLICY_HND *user_pol = r->out.user_handle;
+	POLICY_HND dom_pol = q_u->domain_pol;
+	uint16 acb_info = q_u->acb_info;
+	POLICY_HND *user_pol = &r_u->user_pol;
 	struct samr_info *info = NULL;
 	NTSTATUS nt_status;
 	uint32 acc_granted;
@@ -3129,7 +2556,7 @@
 	size_t    sd_size;
 	/* check this, when giving away 'add computer to domain' privs */
 	uint32    des_access = GENERIC_RIGHTS_USER_ALL_ACCESS;
-	bool can_add_account = False;
+	BOOL can_add_account = False;
 	SE_PRIV se_rights;
 	DISP_INFO *disp_info = NULL;
 
@@ -3140,19 +2567,19 @@
 
 	nt_status = access_check_samr_function(acc_granted,
 					       SA_RIGHT_DOMAIN_CREATE_USER,
-					       "_samr_CreateUser2");
+					       "_samr_create_user");
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		return nt_status;
 	}
 
 	if (!(acb_info == ACB_NORMAL || acb_info == ACB_DOMTRUST ||
-	      acb_info == ACB_WSTRUST || acb_info == ACB_SVRTRUST)) {
-		/* Match Win2k, and return NT_STATUS_INVALID_PARAMETER if
+	      acb_info == ACB_WSTRUST || acb_info == ACB_SVRTRUST)) { 
+		/* Match Win2k, and return NT_STATUS_INVALID_PARAMETER if 
 		   this parameter is not an account type */
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-	account = r->in.account_name->string;
+	account = rpcstr_pull_unistr2_talloc(p->mem_ctx, &q_u->uni_name);
 	if (account == NULL) {
 		return NT_STATUS_NO_MEMORY;
 	}
@@ -3163,14 +2590,14 @@
 	}
 
 	/* determine which user right we need to check based on the acb_info */
-
+	
 	if ( acb_info & ACB_WSTRUST )
 	{
 		se_priv_copy( &se_rights, &se_machine_account );
 		can_add_account = user_has_privileges(
 			p->pipe_user.nt_user_token, &se_rights );
-	}
-	/* usrmgr.exe (and net rpc trustdom grant) creates a normal user
+	} 
+	/* usrmgr.exe (and net rpc trustdom grant) creates a normal user 
 	   account for domain trusts and changes the ACB flags later */
 	else if ( acb_info & ACB_NORMAL &&
 		  (account[strlen(account)-1] != '$') )
@@ -3178,7 +2605,7 @@
 		se_priv_copy( &se_rights, &se_add_users );
 		can_add_account = user_has_privileges(
 			p->pipe_user.nt_user_token, &se_rights );
-	}
+	} 
 	else 	/* implicit assumption of a BDC or domain trust account here
 		 * (we already check the flags earlier) */
 	{
@@ -3190,41 +2617,41 @@
 				DOMAIN_GROUP_RID_ADMINS );
 		}
 	}
-
-	DEBUG(5, ("_samr_CreateUser2: %s can add this account : %s\n",
+		
+	DEBUG(5, ("_samr_create_user: %s can add this account : %s\n",
 		  uidtoname(p->pipe_user.ut.uid),
 		  can_add_account ? "True":"False" ));
-
+		
 	/********** BEGIN Admin BLOCK **********/
 
 	if ( can_add_account )
 		become_root();
 
 	nt_status = pdb_create_user(p->mem_ctx, account, acb_info,
-				    r->out.rid);
+				    &r_u->user_rid);
 
 	if ( can_add_account )
 		unbecome_root();
 
 	/********** END Admin BLOCK **********/
-
+	
 	/* now check for failure */
-
+	
 	if ( !NT_STATUS_IS_OK(nt_status) )
 		return nt_status;
-
+			
 	/* Get the user's SID */
 
-	sid_compose(&sid, get_global_sam_sid(), *r->out.rid);
-
+	sid_compose(&sid, get_global_sam_sid(), r_u->user_rid);
+	
 	make_samr_object_sd(p->mem_ctx, &psd, &sd_size, &usr_generic_mapping,
 			    &sid, SAMR_USR_RIGHTS_WRITE_PW);
 	se_map_generic(&des_access, &usr_generic_mapping);
-
-	nt_status = access_check_samr_object(psd, p->pipe_user.nt_user_token,
-		&se_rights, GENERIC_RIGHTS_USER_WRITE, des_access,
-		&acc_granted, "_samr_CreateUser2");
-
+	
+	nt_status = access_check_samr_object(psd, p->pipe_user.nt_user_token, 
+		&se_rights, GENERIC_RIGHTS_USER_WRITE, des_access, 
+		&acc_granted, "_samr_create_user");
+		
 	if ( !NT_STATUS_IS_OK(nt_status) ) {
 		return nt_status;
 	}
@@ -3246,38 +2673,40 @@
 	/* After a "set" ensure we have no cached display info. */
 	force_flush_samr_cache(info->disp_info);
 
-	*r->out.access_granted = acc_granted;
+	r_u->access_granted = acc_granted;
 
 	return NT_STATUS_OK;
 }
 
 /*******************************************************************
- _samr_Connect
+ samr_reply_connect_anon
  ********************************************************************/
 
-NTSTATUS _samr_Connect(pipes_struct *p,
-		       struct samr_Connect *r)
+NTSTATUS _samr_connect_anon(pipes_struct *p, SAMR_Q_CONNECT_ANON *q_u, SAMR_R_CONNECT_ANON *r_u)
 {
 	struct samr_info *info = NULL;
-	uint32    des_access = r->in.access_mask;
+	uint32    des_access = q_u->access_mask;
 
 	/* Access check */
 
 	if (!pipe_access_check(p)) {
-		DEBUG(3, ("access denied to _samr_Connect\n"));
-		return NT_STATUS_ACCESS_DENIED;
+		DEBUG(3, ("access denied to samr_connect_anon\n"));
+		r_u->status = NT_STATUS_ACCESS_DENIED;
+		return r_u->status;
 	}
 
 	/* set up the SAMR connect_anon response */
 
+	r_u->status = NT_STATUS_OK;
+
 	/* associate the user's SID with the new handle. */
 	if ((info = get_samr_info_by_sid(NULL)) == NULL)
 		return NT_STATUS_NO_MEMORY;
 
 	/* don't give away the farm but this is probably ok.  The SA_RIGHT_SAM_ENUM_DOMAINS
-	   was observed from a win98 client trying to enumerate users (when configured
+	   was observed from a win98 client trying to enumerate users (when configured  
 	   user level access control on shares)   --jerry */
-
+	   
 	if (des_access == MAXIMUM_ALLOWED_ACCESS) {
 		/* Map to max possible knowing we're filtered below. */
 		des_access = GENERIC_ALL_ACCESS;
@@ -3285,143 +2714,152 @@
 
 	se_map_generic( &des_access, &sam_generic_mapping );
 	info->acc_granted = des_access & (SA_RIGHT_SAM_ENUM_DOMAINS|SA_RIGHT_SAM_OPEN_DOMAIN);
+	
+	info->status = q_u->unknown_0;
 
 	/* get a (unique) handle.  open a policy on it. */
-	if (!create_policy_hnd(p, r->out.connect_handle, free_samr_info, (void *)info))
+	if (!create_policy_hnd(p, &r_u->connect_pol, free_samr_info, (void *)info))
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
-	return NT_STATUS_OK;
+	return r_u->status;
 }
 
 /*******************************************************************
- _samr_Connect2
+ samr_reply_connect
  ********************************************************************/
 
-NTSTATUS _samr_Connect2(pipes_struct *p,
-			struct samr_Connect2 *r)
+NTSTATUS _samr_connect(pipes_struct *p, SAMR_Q_CONNECT *q_u, SAMR_R_CONNECT *r_u)
 {
 	struct samr_info *info = NULL;
 	SEC_DESC *psd = NULL;
 	uint32    acc_granted;
-	uint32    des_access = r->in.access_mask;
+	uint32    des_access = q_u->access_mask;
 	NTSTATUS  nt_status;
 	size_t    sd_size;
 
 
-	DEBUG(5,("_samr_Connect2: %d\n", __LINE__));
+	DEBUG(5,("_samr_connect: %d\n", __LINE__));
 
 	/* Access check */
 
 	if (!pipe_access_check(p)) {
-		DEBUG(3, ("access denied to _samr_Connect2\n"));
-		return NT_STATUS_ACCESS_DENIED;
+		DEBUG(3, ("access denied to samr_connect\n"));
+		r_u->status = NT_STATUS_ACCESS_DENIED;
+		return r_u->status;
 	}
 
 	make_samr_object_sd(p->mem_ctx, &psd, &sd_size, &sam_generic_mapping, NULL, 0);
 	se_map_generic(&des_access, &sam_generic_mapping);
-
-	nt_status = access_check_samr_object(psd, p->pipe_user.nt_user_token,
-		NULL, 0, des_access, &acc_granted, "_samr_Connect2");
-
-	if ( !NT_STATUS_IS_OK(nt_status) )
+	
+	nt_status = access_check_samr_object(psd, p->pipe_user.nt_user_token, 
+		NULL, 0, des_access, &acc_granted, "_samr_connect");
+	
+	if ( !NT_STATUS_IS_OK(nt_status) ) 
 		return nt_status;
 
+	r_u->status = NT_STATUS_OK;
+
 	/* associate the user's SID and access granted with the new handle. */
 	if ((info = get_samr_info_by_sid(NULL)) == NULL)
 		return NT_STATUS_NO_MEMORY;
 
 	info->acc_granted = acc_granted;
-	info->status = r->in.access_mask; /* this looks so wrong... - gd */
+	info->status = q_u->access_mask;
 
 	/* get a (unique) handle.  open a policy on it. */
-	if (!create_policy_hnd(p, r->out.connect_handle, free_samr_info, (void *)info))
+	if (!create_policy_hnd(p, &r_u->connect_pol, free_samr_info, (void *)info))
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
-	DEBUG(5,("_samr_Connect2: %d\n", __LINE__));
+	DEBUG(5,("_samr_connect: %d\n", __LINE__));
 
-	return nt_status;
+	return r_u->status;
 }
 
 /*******************************************************************
- _samr_Connect4
+ samr_connect4
  ********************************************************************/
 
-NTSTATUS _samr_Connect4(pipes_struct *p,
-			struct samr_Connect4 *r)
+NTSTATUS _samr_connect4(pipes_struct *p, SAMR_Q_CONNECT4 *q_u, SAMR_R_CONNECT4 *r_u)
 {
 	struct samr_info *info = NULL;
 	SEC_DESC *psd = NULL;
 	uint32    acc_granted;
-	uint32    des_access = r->in.access_mask;
+	uint32    des_access = q_u->access_mask;
 	NTSTATUS  nt_status;
 	size_t    sd_size;
 
 
-	DEBUG(5,("_samr_Connect4: %d\n", __LINE__));
+	DEBUG(5,("_samr_connect4: %d\n", __LINE__));
 
 	/* Access check */
 
 	if (!pipe_access_check(p)) {
-		DEBUG(3, ("access denied to samr_Connect4\n"));
-		return NT_STATUS_ACCESS_DENIED;
+		DEBUG(3, ("access denied to samr_connect4\n"));
+		r_u->status = NT_STATUS_ACCESS_DENIED;
+		return r_u->status;
 	}
 
 	make_samr_object_sd(p->mem_ctx, &psd, &sd_size, &sam_generic_mapping, NULL, 0);
 	se_map_generic(&des_access, &sam_generic_mapping);
-
-	nt_status = access_check_samr_object(psd, p->pipe_user.nt_user_token,
-		NULL, 0, des_access, &acc_granted, "_samr_Connect4");
-
-	if ( !NT_STATUS_IS_OK(nt_status) )
+	
+	nt_status = access_check_samr_object(psd, p->pipe_user.nt_user_token, 
+		NULL, 0, des_access, &acc_granted, "_samr_connect4");
+	
+	if ( !NT_STATUS_IS_OK(nt_status) ) 
 		return nt_status;
 
+	r_u->status = NT_STATUS_OK;
+
 	/* associate the user's SID and access granted with the new handle. */
 	if ((info = get_samr_info_by_sid(NULL)) == NULL)
 		return NT_STATUS_NO_MEMORY;
 
 	info->acc_granted = acc_granted;
-	info->status = r->in.access_mask; /* ??? */
+	info->status = q_u->access_mask;
 
 	/* get a (unique) handle.  open a policy on it. */
-	if (!create_policy_hnd(p, r->out.connect_handle, free_samr_info, (void *)info))
+	if (!create_policy_hnd(p, &r_u->connect_pol, free_samr_info, (void *)info))
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
-	DEBUG(5,("_samr_Connect4: %d\n", __LINE__));
+	DEBUG(5,("_samr_connect: %d\n", __LINE__));
 
-	return NT_STATUS_OK;
+	return r_u->status;
 }
 
 /*******************************************************************
- _samr_Connect5
+ samr_connect5
  ********************************************************************/
 
-NTSTATUS _samr_Connect5(pipes_struct *p,
-			struct samr_Connect5 *r)
+NTSTATUS _samr_connect5(pipes_struct *p, SAMR_Q_CONNECT5 *q_u, SAMR_R_CONNECT5 *r_u)
 {
 	struct samr_info *info = NULL;
 	SEC_DESC *psd = NULL;
 	uint32    acc_granted;
-	uint32    des_access = r->in.access_mask;
+	uint32    des_access = q_u->access_mask;
 	NTSTATUS  nt_status;
+	POLICY_HND pol;
 	size_t    sd_size;
-	struct samr_ConnectInfo1 info1;
 
-	DEBUG(5,("_samr_Connect5: %d\n", __LINE__));
 
+	DEBUG(5,("_samr_connect5: %d\n", __LINE__));
+
+	ZERO_STRUCTP(r_u);
+
 	/* Access check */
 
 	if (!pipe_access_check(p)) {
-		DEBUG(3, ("access denied to samr_Connect5\n"));
-		return NT_STATUS_ACCESS_DENIED;
+		DEBUG(3, ("access denied to samr_connect5\n"));
+		r_u->status = NT_STATUS_ACCESS_DENIED;
+		return r_u->status;
 	}
 
 	make_samr_object_sd(p->mem_ctx, &psd, &sd_size, &sam_generic_mapping, NULL, 0);
 	se_map_generic(&des_access, &sam_generic_mapping);
-
-	nt_status = access_check_samr_object(psd, p->pipe_user.nt_user_token,
-		NULL, 0, des_access, &acc_granted, "_samr_Connect5");
-
-	if ( !NT_STATUS_IS_OK(nt_status) )
+	
+	nt_status = access_check_samr_object(psd, p->pipe_user.nt_user_token, 
+		NULL, 0, des_access, &acc_granted, "_samr_connect5");
+	
+	if ( !NT_STATUS_IS_OK(nt_status) ) 
 		return nt_status;
 
 	/* associate the user's SID and access granted with the new handle. */
@@ -3429,176 +2867,187 @@
 		return NT_STATUS_NO_MEMORY;
 
 	info->acc_granted = acc_granted;
-	info->status = r->in.access_mask; /* ??? */
+	info->status = q_u->access_mask;
 
 	/* get a (unique) handle.  open a policy on it. */
-	if (!create_policy_hnd(p, r->out.connect_handle, free_samr_info, (void *)info))
+	if (!create_policy_hnd(p, &pol, free_samr_info, (void *)info))
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
-	DEBUG(5,("_samr_Connect5: %d\n", __LINE__));
+	DEBUG(5,("_samr_connect: %d\n", __LINE__));
 
-	info1.client_version = SAMR_CONNECT_AFTER_W2K;
-	info1.unknown2 = 0;
+	init_samr_r_connect5(r_u, &pol, NT_STATUS_OK);
 
-	*r->out.level_out = 1;
-	r->out.info_out->info1 = info1;
-
-	return NT_STATUS_OK;
+	return r_u->status;
 }
 
 /**********************************************************************
- _samr_LookupDomain
+ api_samr_lookup_domain
  **********************************************************************/
 
-NTSTATUS _samr_LookupDomain(pipes_struct *p,
-			    struct samr_LookupDomain *r)
+NTSTATUS _samr_lookup_domain(pipes_struct *p, SAMR_Q_LOOKUP_DOMAIN *q_u, SAMR_R_LOOKUP_DOMAIN *r_u)
 {
-	NTSTATUS status = NT_STATUS_OK;
 	struct samr_info *info;
-	const char *domain_name;
-	DOM_SID *sid = NULL;
+	fstring domain_name;
+	DOM_SID sid;
 
-	if (!find_policy_by_hnd(p, r->in.connect_handle, (void**)(void *)&info))
+	r_u->status = NT_STATUS_OK;
+
+	if (!find_policy_by_hnd(p, &q_u->connect_pol, (void**)(void *)&info))
 		return NT_STATUS_INVALID_HANDLE;
 
-	/* win9x user manager likes to use SA_RIGHT_SAM_ENUM_DOMAINS here.
+	/* win9x user manager likes to use SA_RIGHT_SAM_ENUM_DOMAINS here.  
 	   Reverted that change so we will work with RAS servers again */
 
-	status = access_check_samr_function(info->acc_granted,
-					    SA_RIGHT_SAM_OPEN_DOMAIN,
-					    "_samr_LookupDomain");
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+	if (!NT_STATUS_IS_OK(r_u->status = access_check_samr_function(info->acc_granted, 
+		SA_RIGHT_SAM_OPEN_DOMAIN, "_samr_lookup_domain"))) 
+	{
+		return r_u->status;
 	}
 
-	domain_name = r->in.domain_name->string;
+	rpcstr_pull(domain_name, q_u->uni_domain.buffer, sizeof(domain_name), q_u->uni_domain.uni_str_len*2, 0);
 
-	sid = TALLOC_ZERO_P(p->mem_ctx, struct dom_sid2);
-	if (!sid) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	ZERO_STRUCT(sid);
 
 	if (strequal(domain_name, builtin_domain_name())) {
-		sid_copy(sid, &global_sid_Builtin);
+		sid_copy(&sid, &global_sid_Builtin);
 	} else {
-		if (!secrets_fetch_domain_sid(domain_name, sid)) {
-			status = NT_STATUS_NO_SUCH_DOMAIN;
+		if (!secrets_fetch_domain_sid(domain_name, &sid)) {
+			r_u->status = NT_STATUS_NO_SUCH_DOMAIN;
 		}
 	}
 
-	DEBUG(2,("Returning domain sid for domain %s -> %s\n", domain_name,
-		 sid_string_dbg(sid)));
+	DEBUG(2,("Returning domain sid for domain %s -> %s\n", domain_name, sid_string_static(&sid)));
 
-	*r->out.sid = sid;
+	init_samr_r_lookup_domain(r_u, &sid, r_u->status);
 
-	return status;
+	return r_u->status;
 }
 
+/******************************************************************
+makes a SAMR_R_ENUM_DOMAINS structure.
+********************************************************************/
+
+static BOOL make_enum_domains(TALLOC_CTX *ctx, SAM_ENTRY **pp_sam,
+			UNISTR2 **pp_uni_name, uint32 num_sam_entries, fstring doms[])
+{
+	uint32 i;
+	SAM_ENTRY *sam;
+	UNISTR2 *uni_name;
+
+	DEBUG(5, ("make_enum_domains\n"));
+
+	*pp_sam = NULL;
+	*pp_uni_name = NULL;
+
+	if (num_sam_entries == 0)
+		return True;
+
+	sam = TALLOC_ZERO_ARRAY(ctx, SAM_ENTRY, num_sam_entries);
+	uni_name = TALLOC_ZERO_ARRAY(ctx, UNISTR2, num_sam_entries);
+
+	if (sam == NULL || uni_name == NULL)
+		return False;
+
+	for (i = 0; i < num_sam_entries; i++) {
+		init_unistr2(&uni_name[i], doms[i], UNI_FLAGS_NONE);
+		init_sam_entry(&sam[i], &uni_name[i], 0);
+	}
+
+	*pp_sam = sam;
+	*pp_uni_name = uni_name;
+
+	return True;
+}
+
 /**********************************************************************
- _samr_EnumDomains
+ api_samr_enum_domains
  **********************************************************************/
 
-NTSTATUS _samr_EnumDomains(pipes_struct *p,
-			   struct samr_EnumDomains *r)
+NTSTATUS _samr_enum_domains(pipes_struct *p, SAMR_Q_ENUM_DOMAINS *q_u, SAMR_R_ENUM_DOMAINS *r_u)
 {
-	NTSTATUS status;
 	struct samr_info *info;
-	uint32_t num_entries = 2;
-	struct samr_SamEntry *entry_array = NULL;
-	struct samr_SamArray *sam;
+	uint32 num_entries = 2;
+	fstring dom[2];
+	const char *name;
 
-	if (!find_policy_by_hnd(p, r->in.connect_handle, (void**)(void *)&info))
+	r_u->status = NT_STATUS_OK;
+	
+	if (!find_policy_by_hnd(p, &q_u->pol, (void**)(void *)&info))
 		return NT_STATUS_INVALID_HANDLE;
-
-	status = access_check_samr_function(info->acc_granted,
-					    SA_RIGHT_SAM_ENUM_DOMAINS,
-					    "_samr_EnumDomains");
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+	
+	if (!NT_STATUS_IS_OK(r_u->status = access_check_samr_function(info->acc_granted, SA_RIGHT_SAM_ENUM_DOMAINS, "_samr_enum_domains"))) {
+		return r_u->status;
 	}
 
-	sam = TALLOC_ZERO_P(p->mem_ctx, struct samr_SamArray);
-	if (!sam) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	name = get_global_sam_name();
 
-	entry_array = TALLOC_ZERO_ARRAY(p->mem_ctx,
-					struct samr_SamEntry,
-					num_entries);
-	if (!entry_array) {
+	fstrcpy(dom[0],name);
+	strupper_m(dom[0]);
+	fstrcpy(dom[1],"Builtin");
+
+	if (!make_enum_domains(p->mem_ctx, &r_u->sam, &r_u->uni_dom_name, num_entries, dom))
 		return NT_STATUS_NO_MEMORY;
-	}
 
-	entry_array[0].idx = 0;
-	init_lsa_String(&entry_array[0].name, get_global_sam_name());
+	init_samr_r_enum_domains(r_u, q_u->start_idx + num_entries, num_entries);
 
-	entry_array[1].idx = 1;
-	init_lsa_String(&entry_array[1].name, "Builtin");
-
-	sam->count = num_entries;
-	sam->entries = entry_array;
-
-	*r->out.sam = sam;
-	*r->out.num_entries = num_entries;
-
-	return status;
+	return r_u->status;
 }
 
 /*******************************************************************
- _samr_OpenAlias
+ api_samr_open_alias
  ********************************************************************/
 
-NTSTATUS _samr_OpenAlias(pipes_struct *p,
-			 struct samr_OpenAlias *r)
+NTSTATUS _samr_open_alias(pipes_struct *p, SAMR_Q_OPEN_ALIAS *q_u, SAMR_R_OPEN_ALIAS *r_u)
 {
 	DOM_SID sid;
-	POLICY_HND domain_pol = *r->in.domain_handle;
-	uint32 alias_rid = r->in.rid;
-	POLICY_HND *alias_pol = r->out.alias_handle;
+	POLICY_HND domain_pol = q_u->dom_pol;
+	uint32 alias_rid = q_u->rid_alias;
+	POLICY_HND *alias_pol = &r_u->pol;
 	struct    samr_info *info = NULL;
 	SEC_DESC *psd = NULL;
 	uint32    acc_granted;
-	uint32    des_access = r->in.access_mask;
+	uint32    des_access = q_u->access_mask;
 	size_t    sd_size;
 	NTSTATUS  status;
 	SE_PRIV se_rights;
 
-	/* find the domain policy and get the SID / access bits stored in the domain policy */
+	r_u->status = NT_STATUS_OK;
 
+	/* find the domain policy and get the SID / access bits stored in the domain policy */
+	
 	if ( !get_lsa_policy_samr_sid(p, &domain_pol, &sid, &acc_granted, NULL) )
 		return NT_STATUS_INVALID_HANDLE;
-
-	status = access_check_samr_function(acc_granted,
-					    SA_RIGHT_DOMAIN_OPEN_ACCOUNT,
-					    "_samr_OpenAlias");
-
-	if ( !NT_STATUS_IS_OK(status) )
+	
+	status = access_check_samr_function(acc_granted, 
+		SA_RIGHT_DOMAIN_OPEN_ACCOUNT, "_samr_open_alias");
+		
+	if ( !NT_STATUS_IS_OK(status) ) 
 		return status;
 
 	/* append the alias' RID to it */
-
+	
 	if (!sid_append_rid(&sid, alias_rid))
 		return NT_STATUS_NO_SUCH_ALIAS;
-
+		
 	/*check if access can be granted as requested by client. */
-
+	
 	make_samr_object_sd(p->mem_ctx, &psd, &sd_size, &ali_generic_mapping, NULL, 0);
 	se_map_generic(&des_access,&ali_generic_mapping);
-
+	
 	se_priv_copy( &se_rights, &se_add_users );
-
-
-	status = access_check_samr_object(psd, p->pipe_user.nt_user_token,
-		&se_rights, GENERIC_RIGHTS_ALIAS_WRITE, des_access,
-		&acc_granted, "_samr_OpenAlias");
-
+	
+	
+	status = access_check_samr_object(psd, p->pipe_user.nt_user_token, 
+		&se_rights, GENERIC_RIGHTS_ALIAS_WRITE, des_access, 
+		&acc_granted, "_samr_open_alias");
+		
 	if ( !NT_STATUS_IS_OK(status) )
 		return status;
 
 	{
 		/* Check we actually have the requested alias */
 		enum lsa_SidType type;
-		bool result;
+		BOOL result;
 		gid_t gid;
 
 		become_root();
@@ -3610,7 +3059,7 @@
 		}
 
 		/* make sure there is a mapping */
-
+		
 		if ( !sid_to_gid( &sid, &gid ) ) {
 			return NT_STATUS_NO_SUCH_ALIAS;
 		}
@@ -3620,24 +3069,23 @@
 	/* associate the alias SID with the new handle. */
 	if ((info = get_samr_info_by_sid(&sid)) == NULL)
 		return NT_STATUS_NO_MEMORY;
-
+		
 	info->acc_granted = acc_granted;
 
 	/* get a (unique) handle.  open a policy on it. */
 	if (!create_policy_hnd(p, alias_pol, free_samr_info, (void *)info))
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
-	return NT_STATUS_OK;
+	return r_u->status;
 }
 
 /*******************************************************************
  set_user_info_7
  ********************************************************************/
-
 static NTSTATUS set_user_info_7(TALLOC_CTX *mem_ctx,
-				struct samr_UserInfo7 *id7,
-				struct samu *pwd)
+				const SAM_USER_INFO_7 *id7, struct samu *pwd)
 {
+	fstring new_name;
 	NTSTATUS rc;
 
 	if (id7 == NULL) {
@@ -3646,14 +3094,14 @@
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	if (!id7->account_name.string) {
+	if(!rpcstr_pull(new_name, id7->uni_name.buffer, sizeof(new_name), id7->uni_name.uni_str_len*2, 0)) {
 	        DEBUG(5, ("set_user_info_7: failed to get new username\n"));
 		TALLOC_FREE(pwd);
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
 	/* check to see if the new username already exists.  Note: we can't
-	   reliably lock all backends, so there is potentially the
+	   reliably lock all backends, so there is potentially the 
 	   possibility that a user can be created in between this check and
 	   the rename.  The rename should fail, but may not get the
 	   exact same failure status code.  I think this is small enough
@@ -3661,12 +3109,12 @@
 	   simply that the rename fails with a slightly different status
 	   code (like UNSUCCESSFUL instead of ALREADY_EXISTS). */
 
-	rc = can_create(mem_ctx, id7->account_name.string);
+	rc = can_create(mem_ctx, new_name);
 	if (!NT_STATUS_IS_OK(rc)) {
 		return rc;
 	}
 
-	rc = pdb_rename_sam_account(pwd, id7->account_name.string);
+	rc = pdb_rename_sam_account(pwd, new_name);
 
 	TALLOC_FREE(pwd);
 	return rc;
@@ -3676,17 +3124,16 @@
  set_user_info_16
  ********************************************************************/
 
-static bool set_user_info_16(struct samr_UserInfo16 *id16,
-			     struct samu *pwd)
+static BOOL set_user_info_16(const SAM_USER_INFO_16 *id16, struct samu *pwd)
 {
 	if (id16 == NULL) {
 		DEBUG(5, ("set_user_info_16: NULL id16\n"));
 		TALLOC_FREE(pwd);
 		return False;
 	}
-
+	
 	/* FIX ME: check if the value is really changed --metze */
-	if (!pdb_set_acct_ctrl(pwd, id16->acct_flags, PDB_CHANGED)) {
+	if (!pdb_set_acct_ctrl(pwd, id16->acb_info, PDB_CHANGED)) {
 		TALLOC_FREE(pwd);
 		return False;
 	}
@@ -3705,28 +3152,28 @@
  set_user_info_18
  ********************************************************************/
 
-static bool set_user_info_18(struct samr_UserInfo18 *id18,
-			     struct samu *pwd)
+static BOOL set_user_info_18(SAM_USER_INFO_18 *id18, struct samu *pwd)
 {
+
 	if (id18 == NULL) {
 		DEBUG(2, ("set_user_info_18: id18 is NULL\n"));
 		TALLOC_FREE(pwd);
 		return False;
 	}
-
-	if (!pdb_set_lanman_passwd (pwd, id18->lm_pwd.hash, PDB_CHANGED)) {
+ 
+	if (!pdb_set_lanman_passwd (pwd, id18->lm_pwd, PDB_CHANGED)) {
 		TALLOC_FREE(pwd);
 		return False;
 	}
-	if (!pdb_set_nt_passwd     (pwd, id18->nt_pwd.hash, PDB_CHANGED)) {
+	if (!pdb_set_nt_passwd     (pwd, id18->nt_pwd, PDB_CHANGED)) {
 		TALLOC_FREE(pwd);
 		return False;
 	}
  	if (!pdb_set_pass_last_set_time (pwd, time(NULL), PDB_CHANGED)) {
 		TALLOC_FREE(pwd);
-		return False;
+		return False; 
 	}
-
+ 
 	if(!NT_STATUS_IS_OK(pdb_update_sam_account(pwd))) {
 		TALLOC_FREE(pwd);
 		return False;
@@ -3740,14 +3187,13 @@
  set_user_info_20
  ********************************************************************/
 
-static bool set_user_info_20(struct samr_UserInfo20 *id20,
-			     struct samu *pwd)
+static BOOL set_user_info_20(SAM_USER_INFO_20 *id20, struct samu *pwd)
 {
 	if (id20 == NULL) {
 		DEBUG(5, ("set_user_info_20: NULL id20\n"));
 		return False;
 	}
-
+ 
 	copy_id20_to_sam_passwd(pwd, id20);
 
 	/* write the change out */
@@ -3760,30 +3206,30 @@
 
 	return True;
 }
-
 /*******************************************************************
  set_user_info_21
  ********************************************************************/
 
-static NTSTATUS set_user_info_21(TALLOC_CTX *mem_ctx,
-				 struct samr_UserInfo21 *id21,
+static NTSTATUS set_user_info_21(TALLOC_CTX *mem_ctx, SAM_USER_INFO_21 *id21,
 				 struct samu *pwd)
 {
+	fstring new_name;
 	NTSTATUS status;
-
+	
 	if (id21 == NULL) {
 		DEBUG(5, ("set_user_info_21: NULL id21\n"));
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
 	/* we need to separately check for an account rename first */
-
-	if (id21->account_name.string &&
-	    (!strequal(id21->account_name.string, pdb_get_username(pwd))))
+	
+	if (rpcstr_pull(new_name, id21->uni_user_name.buffer, 
+		sizeof(new_name), id21->uni_user_name.uni_str_len*2, 0) 
+		&& (!strequal(new_name, pdb_get_username(pwd)))) 
 	{
 
 		/* check to see if the new username already exists.  Note: we can't
-		   reliably lock all backends, so there is potentially the
+		   reliably lock all backends, so there is potentially the 
 		   possibility that a user can be created in between this check and
 		   the rename.  The rename should fail, but may not get the
 		   exact same failure status code.  I think this is small enough
@@ -3791,43 +3237,43 @@
 		   simply that the rename fails with a slightly different status
 		   code (like UNSUCCESSFUL instead of ALREADY_EXISTS). */
 
-		status = can_create(mem_ctx, id21->account_name.string);
+		status = can_create(mem_ctx, new_name);
 		if (!NT_STATUS_IS_OK(status)) {
 			return status;
 		}
 
-		status = pdb_rename_sam_account(pwd, id21->account_name.string);
+		status = pdb_rename_sam_account(pwd, new_name);
 
 		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(0,("set_user_info_21: failed to rename account: %s\n",
+			DEBUG(0,("set_user_info_21: failed to rename account: %s\n", 
 				nt_errstr(status)));
 			TALLOC_FREE(pwd);
 			return status;
 		}
 
-		/* set the new username so that later
+		/* set the new username so that later 
 		   functions can work on the new account */
-		pdb_set_username(pwd, id21->account_name.string, PDB_SET);
+		pdb_set_username(pwd, new_name, PDB_SET);
 	}
 
-	copy_id21_to_sam_passwd("INFO_21", pwd, id21);
-
+	copy_id21_to_sam_passwd(pwd, id21);
+ 
 	/*
 	 * The funny part about the previous two calls is
 	 * that pwd still has the password hashes from the
 	 * passdb entry.  These have not been updated from
 	 * id21.  I don't know if they need to be set.    --jerry
 	 */
-
+ 
 	if ( IS_SAM_CHANGED(pwd, PDB_GROUPSID) ) {
 		status = pdb_set_unix_primary_group(mem_ctx, pwd);
 		if ( !NT_STATUS_IS_OK(status) ) {
 			return status;
 		}
 	}
-
+	
 	/* Don't worry about writing out the user account since the
-	   primary group SID is generated solely from the user's Unix
+	   primary group SID is generated solely from the user's Unix 
 	   primary group. */
 
 	/* write the change out */
@@ -3845,41 +3291,36 @@
  set_user_info_23
  ********************************************************************/
 
-static NTSTATUS set_user_info_23(TALLOC_CTX *mem_ctx,
-				 struct samr_UserInfo23 *id23,
+static NTSTATUS set_user_info_23(TALLOC_CTX *mem_ctx, SAM_USER_INFO_23 *id23,
 				 struct samu *pwd)
 {
-	char *plaintext_buf = NULL;
-	uint32 len = 0;
+	pstring plaintext_buf;
+	uint32 len;
 	uint16 acct_ctrl;
 	NTSTATUS status;
-
+ 
 	if (id23 == NULL) {
 		DEBUG(5, ("set_user_info_23: NULL id23\n"));
 		return NT_STATUS_INVALID_PARAMETER;
 	}
-
+ 
 	DEBUG(5, ("Attempting administrator password change (level 23) for user %s\n",
 		  pdb_get_username(pwd)));
 
 	acct_ctrl = pdb_get_acct_ctrl(pwd);
 
-	if (!decode_pw_buffer(mem_ctx,
-				id23->password.data,
-				&plaintext_buf,
-				&len,
-				STR_UNICODE)) {
+	if (!decode_pw_buffer(id23->pass, plaintext_buf, 256, &len, STR_UNICODE)) {
 		TALLOC_FREE(pwd);
 		return NT_STATUS_INVALID_PARAMETER;
  	}
-
+  
 	if (!pdb_set_plaintext_passwd (pwd, plaintext_buf)) {
 		TALLOC_FREE(pwd);
 		return NT_STATUS_ACCESS_DENIED;
 	}
-
+ 
 	copy_id23_to_sam_passwd(pwd, id23);
-
+ 
 	/* if it's a trust account, don't update /etc/passwd */
 	if (    ( (acct_ctrl &  ACB_DOMTRUST) == ACB_DOMTRUST ) ||
 		( (acct_ctrl &  ACB_WSTRUST) ==  ACB_WSTRUST) ||
@@ -3895,21 +3336,19 @@
 				return NT_STATUS_ACCESS_DENIED;
 			}
 
-			passwd = Get_Pwnam_alloc(pwd, pdb_get_username(pwd));
-			if (passwd == NULL) {
+			if ((passwd = Get_Pwnam(pdb_get_username(pwd))) == NULL) {
 				DEBUG(1, ("chgpasswd: Username does not exist in system !?!\n"));
 			}
-
+			
 			if(!chgpasswd(pdb_get_username(pwd), passwd, "", plaintext_buf, True)) {
 				TALLOC_FREE(pwd);
 				return NT_STATUS_ACCESS_DENIED;
 			}
-			TALLOC_FREE(passwd);
 		}
 	}
-
-	memset(plaintext_buf, '\0', strlen(plaintext_buf));
-
+ 
+	ZERO_STRUCT(plaintext_buf);
+ 
 	if (IS_SAM_CHANGED(pwd, PDB_GROUPSID) &&
 	    (!NT_STATUS_IS_OK(status =  pdb_set_unix_primary_group(mem_ctx,
 								   pwd)))) {
@@ -3921,7 +3360,7 @@
 		TALLOC_FREE(pwd);
 		return status;
 	}
-
+ 
 	TALLOC_FREE(pwd);
 
 	return NT_STATUS_OK;
@@ -3931,15 +3370,15 @@
  set_user_info_pw
  ********************************************************************/
 
-static bool set_user_info_pw(uint8 *pass, struct samu *pwd,
-			     int level)
+static BOOL set_user_info_pw(uint8 *pass, struct samu *pwd,
+			    int level)
 {
-	uint32 len = 0;
-	char *plaintext_buf = NULL;
+	uint32 len;
+	pstring plaintext_buf;
 	uint32 acct_ctrl;
 	time_t last_set_time;
 	enum pdb_value_state last_set_state;
-
+ 
 	DEBUG(5, ("Attempting administrator password change for user %s\n",
 		  pdb_get_username(pwd)));
 
@@ -3949,11 +3388,9 @@
 	last_set_state = pdb_get_init_flags(pwd, PDB_PASSLASTSET);
 	last_set_time = pdb_get_pass_last_set_time(pwd);
 
-	if (!decode_pw_buffer(talloc_tos(),
-				pass,
-				&plaintext_buf,
-				&len,
-				STR_UNICODE)) {
+	ZERO_STRUCT(plaintext_buf);
+ 
+	if (!decode_pw_buffer(pass, plaintext_buf, 256, &len, STR_UNICODE)) {
 		TALLOC_FREE(pwd);
 		return False;
  	}
@@ -3962,7 +3399,7 @@
 		TALLOC_FREE(pwd);
 		return False;
 	}
-
+ 
 	/* if it's a trust account, don't update /etc/passwd */
 	if ( ( (acct_ctrl &  ACB_DOMTRUST) == ACB_DOMTRUST ) ||
 		( (acct_ctrl &  ACB_WSTRUST) ==  ACB_WSTRUST) ||
@@ -3979,21 +3416,19 @@
 				return False;
 			}
 
-			passwd = Get_Pwnam_alloc(pwd, pdb_get_username(pwd));
-			if (passwd == NULL) {
+			if ((passwd = Get_Pwnam(pdb_get_username(pwd))) == NULL) {
 				DEBUG(1, ("chgpasswd: Username does not exist in system !?!\n"));
 			}
-
+			
 			if(!chgpasswd(pdb_get_username(pwd), passwd, "", plaintext_buf, True)) {
 				TALLOC_FREE(pwd);
 				return False;
 			}
-			TALLOC_FREE(passwd);
 		}
 	}
+ 
+	ZERO_STRUCT(plaintext_buf);
 
-	memset(plaintext_buf, '\0', strlen(plaintext_buf));
-
 	/*
 	 * A level 25 change does reset the pwdlastset field, a level 24
 	 * change does not. I know this is probably not the full story, but
@@ -4008,9 +3443,9 @@
 		pdb_set_pass_last_set_time (pwd, last_set_time,
 					    last_set_state);
 	}
-
+ 
 	DEBUG(5,("set_user_info_pw: pdb_update_pwd()\n"));
-
+ 
 	/* update the SAMBA password */
 	if(!NT_STATUS_IS_OK(pdb_update_sam_account(pwd))) {
 		TALLOC_FREE(pwd);
@@ -4026,19 +3461,18 @@
  set_user_info_25
  ********************************************************************/
 
-static NTSTATUS set_user_info_25(TALLOC_CTX *mem_ctx,
-				 struct samr_UserInfo25 *id25,
+static NTSTATUS set_user_info_25(TALLOC_CTX *mem_ctx, SAM_USER_INFO_25 *id25,
 				 struct samu *pwd)
 {
 	NTSTATUS status;
-
+	
 	if (id25 == NULL) {
 		DEBUG(5, ("set_user_info_25: NULL id25\n"));
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
 	copy_id25_to_sam_passwd(pwd, id25);
-
+ 
 	/* write the change out */
 	if(!NT_STATUS_IS_OK(status = pdb_update_sam_account(pwd))) {
 		TALLOC_FREE(pwd);
@@ -4052,14 +3486,14 @@
 	 * the delete explicit / add explicit, which would then fail to find
 	 * the previous primaryGroupSid value.
 	 */
-
+ 
 	if ( IS_SAM_CHANGED(pwd, PDB_GROUPSID) ) {
 		status = pdb_set_unix_primary_group(mem_ctx, pwd);
 		if ( !NT_STATUS_IS_OK(status) ) {
 			return status;
 		}
 	}
-
+	
 	/* WARNING: No TALLOC_FREE(pwd), we are about to set the password
 	 * hereafter! */
 
@@ -4067,41 +3501,38 @@
 }
 
 /*******************************************************************
- samr_SetUserInfo_internal
+ samr_reply_set_userinfo
  ********************************************************************/
 
-static NTSTATUS samr_SetUserInfo_internal(const char *fn_name,
-					  pipes_struct *p,
-					  struct policy_handle *user_handle,
-					  uint16_t level,
-					  union samr_UserInfo *info)
+NTSTATUS _samr_set_userinfo(pipes_struct *p, SAMR_Q_SET_USERINFO *q_u, SAMR_R_SET_USERINFO *r_u)
 {
-	NTSTATUS status;
 	struct samu *pwd = NULL;
 	DOM_SID sid;
-	POLICY_HND *pol = user_handle;
-	uint16_t switch_value = level;
-	uint32_t acc_granted;
-	uint32_t acc_required;
-	bool ret;
-	bool has_enough_rights = False;
-	uint32_t acb_info;
+	POLICY_HND *pol = &q_u->pol;
+	uint16 switch_value = q_u->switch_value;
+	SAM_USERINFO_CTR *ctr = q_u->ctr;
+	uint32 acc_granted;
+	uint32 acc_required;
+	BOOL ret;
+	BOOL has_enough_rights = False;
+	uint32 acb_info;
 	DISP_INFO *disp_info = NULL;
 
-	DEBUG(5,("%s: %d\n", fn_name, __LINE__));
+	DEBUG(5, ("_samr_set_userinfo: %d\n", __LINE__));
 
+	r_u->status = NT_STATUS_OK;
+
 	/* find the policy handle.  open a policy on it. */
-	if (!get_lsa_policy_samr_sid(p, pol, &sid, &acc_granted, &disp_info)) {
+	if (!get_lsa_policy_samr_sid(p, pol, &sid, &acc_granted, &disp_info))
 		return NT_STATUS_INVALID_HANDLE;
-	}
 
-	/* This is tricky.  A WinXP domain join sets
+	/* This is tricky.  A WinXP domain join sets 
 	  (SA_RIGHT_USER_SET_PASSWORD|SA_RIGHT_USER_SET_ATTRIBUTES|SA_RIGHT_USER_ACCT_FLAGS_EXPIRY)
-	  The MMC lusrmgr plugin includes these perms and more in the SamrOpenUser().  But the
-	  standard Win32 API calls just ask for SA_RIGHT_USER_SET_PASSWORD in the SamrOpenUser().
-	  This should be enough for levels 18, 24, 25,& 26.  Info level 23 can set more so
+	  The MMC lusrmgr plugin includes these perms and more in the SamrOpenUser().  But the 
+	  standard Win32 API calls just ask for SA_RIGHT_USER_SET_PASSWORD in the SamrOpenUser().  
+	  This should be enough for levels 18, 24, 25,& 26.  Info level 23 can set more so 
 	  we'll use the set from the WinXP join as the basis. */
-
+	
 	switch (switch_value) {
 	case 18:
 	case 24:
@@ -4110,255 +3541,321 @@
 		acc_required = SA_RIGHT_USER_SET_PASSWORD;
 		break;
 	default:
-		acc_required = SA_RIGHT_USER_SET_PASSWORD |
-			       SA_RIGHT_USER_SET_ATTRIBUTES |
-			       SA_RIGHT_USER_ACCT_FLAGS_EXPIRY;
+		acc_required = SA_RIGHT_USER_SET_PASSWORD | SA_RIGHT_USER_SET_ATTRIBUTES | SA_RIGHT_USER_ACCT_FLAGS_EXPIRY;
 		break;
 	}
-
-	status = access_check_samr_function(acc_granted,
-					    acc_required,
-					    fn_name);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+	
+	if (!NT_STATUS_IS_OK(r_u->status = access_check_samr_function(acc_granted, acc_required, "_samr_set_userinfo"))) {
+		return r_u->status;
 	}
 
-	DEBUG(5, ("%s: sid:%s, level:%d\n",
-		  fn_name, sid_string_dbg(&sid), switch_value));
+	DEBUG(5, ("_samr_set_userinfo: sid:%s, level:%d\n", sid_string_static(&sid), switch_value));
 
-	if (info == NULL) {
-		DEBUG(5, ("%s: NULL info level\n", fn_name));
+	if (ctr == NULL) {
+		DEBUG(5, ("_samr_set_userinfo: NULL info level\n"));
 		return NT_STATUS_INVALID_INFO_CLASS;
 	}
-
-	if (!(pwd = samu_new(NULL))) {
+	
+ 	if ( !(pwd = samu_new( NULL )) ) {
 		return NT_STATUS_NO_MEMORY;
 	}
-
+	
 	become_root();
 	ret = pdb_getsampwsid(pwd, &sid);
 	unbecome_root();
-
-	if (!ret) {
+	
+	if ( !ret ) {
 		TALLOC_FREE(pwd);
 		return NT_STATUS_NO_SUCH_USER;
  	}
-
+	
 	/* deal with machine password changes differently from userinfo changes */
 	/* check to see if we have the sufficient rights */
-
+	
 	acb_info = pdb_get_acct_ctrl(pwd);
-	if (acb_info & ACB_WSTRUST)
-		has_enough_rights = user_has_privileges(p->pipe_user.nt_user_token,
-							&se_machine_account);
-	else if (acb_info & ACB_NORMAL)
-		has_enough_rights = user_has_privileges(p->pipe_user.nt_user_token,
-							&se_add_users);
-	else if (acb_info & (ACB_SVRTRUST|ACB_DOMTRUST)) {
-		if (lp_enable_privileges()) {
-			has_enough_rights = nt_token_check_domain_rid(p->pipe_user.nt_user_token,
-								      DOMAIN_GROUP_RID_ADMINS);
-		}
+	if ( acb_info & ACB_WSTRUST ) 
+		has_enough_rights = user_has_privileges( p->pipe_user.nt_user_token, &se_machine_account);
+	else if ( acb_info & ACB_NORMAL )
+		has_enough_rights = user_has_privileges( p->pipe_user.nt_user_token, &se_add_users );
+	else if ( acb_info & (ACB_SVRTRUST|ACB_DOMTRUST) ) {
+		if ( lp_enable_privileges() )
+			has_enough_rights = nt_token_check_domain_rid( p->pipe_user.nt_user_token, DOMAIN_GROUP_RID_ADMINS );
 	}
-
-	DEBUG(5, ("%s: %s does%s possess sufficient rights\n",
-		  fn_name,
+	
+	DEBUG(5, ("_samr_set_userinfo: %s does%s possess sufficient rights\n",
 		  uidtoname(p->pipe_user.ut.uid),
 		  has_enough_rights ? "" : " not"));
 
 	/* ================ BEGIN SeMachineAccountPrivilege BLOCK ================ */
-
-	if (has_enough_rights) {
-		become_root();
-	}
-
+	
+	if ( has_enough_rights )				
+		become_root(); 
+	
 	/* ok!  user info levels (lots: see MSDEV help), off we go... */
 
 	switch (switch_value) {
-
-		case 7:
-			status = set_user_info_7(p->mem_ctx,
-						 &info->info7, pwd);
-			break;
-
-		case 16:
-			if (!set_user_info_16(&info->info16, pwd)) {
-				status = NT_STATUS_ACCESS_DENIED;
-			}
-			break;
-
 		case 18:
-			/* Used by AS/U JRA. */
-			if (!set_user_info_18(&info->info18, pwd)) {
-				status = NT_STATUS_ACCESS_DENIED;
-			}
+			if (!set_user_info_18(ctr->info.id18, pwd))
+				r_u->status = NT_STATUS_ACCESS_DENIED;
 			break;
 
-		case 20:
-			if (!set_user_info_20(&info->info20, pwd)) {
-				status = NT_STATUS_ACCESS_DENIED;
-			}
-			break;
-
-		case 21:
-			status = set_user_info_21(p->mem_ctx,
-						  &info->info21, pwd);
-			break;
-
-		case 23:
+		case 24:
 			if (!p->session_key.length) {
-				status = NT_STATUS_NO_USER_SESSION_KEY;
+				r_u->status = NT_STATUS_NO_USER_SESSION_KEY;
 			}
-			SamOEMhashBlob(info->info23.password.data, 516,
-				       &p->session_key);
+			SamOEMhashBlob(ctr->info.id24->pass, 516, &p->session_key);
 
-			dump_data(100, info->info23.password.data, 516);
+			dump_data(100, (char *)ctr->info.id24->pass, 516);
 
-			status = set_user_info_23(p->mem_ctx,
-						  &info->info23, pwd);
+			if (!set_user_info_pw(ctr->info.id24->pass, pwd, 
+					      switch_value))
+				r_u->status = NT_STATUS_ACCESS_DENIED;
 			break;
 
-		case 24:
+		case 25:
 			if (!p->session_key.length) {
-				status = NT_STATUS_NO_USER_SESSION_KEY;
+				r_u->status = NT_STATUS_NO_USER_SESSION_KEY;
 			}
-			SamOEMhashBlob(info->info24.password.data,
-				       516,
-				       &p->session_key);
+			encode_or_decode_arc4_passwd_buffer(ctr->info.id25->pass, &p->session_key);
 
-			dump_data(100, info->info24.password.data, 516);
+			dump_data(100, (char *)ctr->info.id25->pass, 532);
 
-			if (!set_user_info_pw(info->info24.password.data, pwd,
-					      switch_value)) {
-				status = NT_STATUS_ACCESS_DENIED;
+			r_u->status = set_user_info_25(p->mem_ctx,
+						       ctr->info.id25, pwd);
+			if (!NT_STATUS_IS_OK(r_u->status)) {
+				goto done;
 			}
+			if (!set_user_info_pw(ctr->info.id25->pass, pwd,
+					      switch_value))
+				r_u->status = NT_STATUS_ACCESS_DENIED;
 			break;
 
-		case 25:
+		case 26:
 			if (!p->session_key.length) {
-				status = NT_STATUS_NO_USER_SESSION_KEY;
+				r_u->status = NT_STATUS_NO_USER_SESSION_KEY;
 			}
-			encode_or_decode_arc4_passwd_buffer(info->info25.password.data,
-							    &p->session_key);
+			encode_or_decode_arc4_passwd_buffer(ctr->info.id26->pass, &p->session_key);
 
-			dump_data(100, info->info25.password.data, 532);
+			dump_data(100, (char *)ctr->info.id26->pass, 516);
 
-			status = set_user_info_25(p->mem_ctx,
-						  &info->info25, pwd);
-			if (!NT_STATUS_IS_OK(status)) {
-				goto done;
-			}
-			if (!set_user_info_pw(info->info25.password.data, pwd,
-					      switch_value)) {
-				status = NT_STATUS_ACCESS_DENIED;
-			}
+			if (!set_user_info_pw(ctr->info.id26->pass, pwd,
+					      switch_value))
+				r_u->status = NT_STATUS_ACCESS_DENIED;
 			break;
 
-		case 26:
+		case 23:
 			if (!p->session_key.length) {
-				status = NT_STATUS_NO_USER_SESSION_KEY;
+				r_u->status = NT_STATUS_NO_USER_SESSION_KEY;
 			}
-			encode_or_decode_arc4_passwd_buffer(info->info26.password.data,
-							    &p->session_key);
+			SamOEMhashBlob(ctr->info.id23->pass, 516, &p->session_key);
 
-			dump_data(100, info->info26.password.data, 516);
+			dump_data(100, (char *)ctr->info.id23->pass, 516);
 
-			if (!set_user_info_pw(info->info26.password.data, pwd,
-					      switch_value)) {
-				status = NT_STATUS_ACCESS_DENIED;
-			}
+			r_u->status = set_user_info_23(p->mem_ctx,
+						       ctr->info.id23, pwd);
 			break;
 
 		default:
-			status = NT_STATUS_INVALID_INFO_CLASS;
+			r_u->status = NT_STATUS_INVALID_INFO_CLASS;
 	}
 
  done:
-
-	if (has_enough_rights) {
+	
+	if ( has_enough_rights )				
 		unbecome_root();
-	}
-
+		
 	/* ================ END SeMachineAccountPrivilege BLOCK ================ */
 
-	if (NT_STATUS_IS_OK(status)) {
+	if (NT_STATUS_IS_OK(r_u->status)) {
 		force_flush_samr_cache(disp_info);
 	}
 
-	return status;
+	return r_u->status;
 }
 
 /*******************************************************************
- _samr_SetUserInfo
+ samr_reply_set_userinfo2
  ********************************************************************/
 
-NTSTATUS _samr_SetUserInfo(pipes_struct *p,
-			   struct samr_SetUserInfo *r)
+NTSTATUS _samr_set_userinfo2(pipes_struct *p, SAMR_Q_SET_USERINFO2 *q_u, SAMR_R_SET_USERINFO2 *r_u)
 {
-	return samr_SetUserInfo_internal("_samr_SetUserInfo",
-					 p,
-					 r->in.user_handle,
-					 r->in.level,
-					 r->in.info);
-}
+	struct samu *pwd = NULL;
+	DOM_SID sid;
+	SAM_USERINFO_CTR *ctr = q_u->ctr;
+	POLICY_HND *pol = &q_u->pol;
+	uint16 switch_value = q_u->switch_value;
+	uint32 acc_granted;
+	uint32 acc_required;
+	BOOL ret;
+	BOOL has_enough_rights = False;
+	uint32 acb_info;
+	DISP_INFO *disp_info = NULL;
 
-/*******************************************************************
- _samr_SetUserInfo2
- ********************************************************************/
+	DEBUG(5, ("samr_reply_set_userinfo2: %d\n", __LINE__));
 
-NTSTATUS _samr_SetUserInfo2(pipes_struct *p,
-			    struct samr_SetUserInfo2 *r)
-{
-	return samr_SetUserInfo_internal("_samr_SetUserInfo2",
-					 p,
-					 r->in.user_handle,
-					 r->in.level,
-					 r->in.info);
+	r_u->status = NT_STATUS_OK;
+
+	/* find the policy handle.  open a policy on it. */
+	if (!get_lsa_policy_samr_sid(p, pol, &sid, &acc_granted, &disp_info))
+		return NT_STATUS_INVALID_HANDLE;
+
+		
+#if 0 	/* this really should be applied on a per info level basis   --jerry */
+
+	/* observed when joining XP client to Samba domain */
+	acc_required = SA_RIGHT_USER_SET_PASSWORD | SA_RIGHT_USER_SET_ATTRIBUTES | SA_RIGHT_USER_ACCT_FLAGS_EXPIRY;
+#else
+	acc_required = SA_RIGHT_USER_SET_ATTRIBUTES;
+#endif
+	
+	if (!NT_STATUS_IS_OK(r_u->status = access_check_samr_function(acc_granted, acc_required, "_samr_set_userinfo2"))) {
+		return r_u->status;
+	}
+
+	DEBUG(5, ("samr_reply_set_userinfo2: sid:%s\n", sid_string_static(&sid)));
+
+	if (ctr == NULL) {
+		DEBUG(5, ("samr_reply_set_userinfo2: NULL info level\n"));
+		return NT_STATUS_INVALID_INFO_CLASS;
+	}
+
+	switch_value=ctr->switch_value;
+
+	if ( !(pwd = samu_new( NULL )) ) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	become_root();
+	ret = pdb_getsampwsid(pwd, &sid);
+	unbecome_root();
+	
+	if ( !ret ) {
+		TALLOC_FREE(pwd);
+		return NT_STATUS_NO_SUCH_USER;
+ 	}
+	
+	acb_info = pdb_get_acct_ctrl(pwd);
+	if ( acb_info & ACB_WSTRUST ) 
+		has_enough_rights = user_has_privileges( p->pipe_user.nt_user_token, &se_machine_account);
+	else if ( acb_info & ACB_NORMAL )
+		has_enough_rights = user_has_privileges( p->pipe_user.nt_user_token, &se_add_users );
+	else if ( acb_info & (ACB_SVRTRUST|ACB_DOMTRUST) ) {
+		if ( lp_enable_privileges() )
+			has_enough_rights = nt_token_check_domain_rid( p->pipe_user.nt_user_token, DOMAIN_GROUP_RID_ADMINS );
+	}
+	
+	DEBUG(5, ("_samr_set_userinfo2: %s does%s possess sufficient rights\n",
+		  uidtoname(p->pipe_user.ut.uid),
+		  has_enough_rights ? "" : " not"));
+
+	/* ================ BEGIN SeMachineAccountPrivilege BLOCK ================ */
+	
+	if ( has_enough_rights )				
+		become_root(); 
+	
+	/* ok!  user info levels (lots: see MSDEV help), off we go... */
+	
+	switch (switch_value) {
+		case 7:
+			r_u->status = set_user_info_7(p->mem_ctx,
+						      ctr->info.id7, pwd);
+			break;
+		case 16:
+			if (!set_user_info_16(ctr->info.id16, pwd))
+				r_u->status = NT_STATUS_ACCESS_DENIED;
+			break;
+		case 18:
+			/* Used by AS/U JRA. */
+			if (!set_user_info_18(ctr->info.id18, pwd))
+				r_u->status = NT_STATUS_ACCESS_DENIED;
+			break;
+		case 20:
+			if (!set_user_info_20(ctr->info.id20, pwd))
+				r_u->status = NT_STATUS_ACCESS_DENIED;
+			break;
+		case 21:
+			r_u->status = set_user_info_21(p->mem_ctx,
+						       ctr->info.id21, pwd);
+			break;
+		case 23:
+			if (!p->session_key.length) {
+				r_u->status = NT_STATUS_NO_USER_SESSION_KEY;
+			}
+			SamOEMhashBlob(ctr->info.id23->pass, 516, &p->session_key);
+
+			dump_data(100, (char *)ctr->info.id23->pass, 516);
+
+			r_u->status = set_user_info_23(p->mem_ctx,
+						       ctr->info.id23, pwd);
+			break;
+		case 26:
+			if (!p->session_key.length) {
+				r_u->status = NT_STATUS_NO_USER_SESSION_KEY;
+			}
+			encode_or_decode_arc4_passwd_buffer(ctr->info.id26->pass, &p->session_key);
+
+			dump_data(100, (char *)ctr->info.id26->pass, 516);
+
+			if (!set_user_info_pw(ctr->info.id26->pass, pwd,
+					      switch_value))
+				r_u->status = NT_STATUS_ACCESS_DENIED;
+			break;
+		default:
+			r_u->status = NT_STATUS_INVALID_INFO_CLASS;
+	}
+
+	if ( has_enough_rights )				
+		unbecome_root();
+		
+	/* ================ END SeMachineAccountPrivilege BLOCK ================ */
+
+	if (NT_STATUS_IS_OK(r_u->status)) {
+		force_flush_samr_cache(disp_info);
+	}
+
+	return r_u->status;
 }
 
 /*********************************************************************
- _samr_GetAliasMembership
+ _samr_query_aliasmem
 *********************************************************************/
 
-NTSTATUS _samr_GetAliasMembership(pipes_struct *p,
-				  struct samr_GetAliasMembership *r)
+NTSTATUS _samr_query_useraliases(pipes_struct *p, SAMR_Q_QUERY_USERALIASES *q_u, SAMR_R_QUERY_USERALIASES *r_u)
 {
 	size_t num_alias_rids;
 	uint32 *alias_rids;
 	struct samr_info *info = NULL;
 	size_t i;
-
+		
 	NTSTATUS ntstatus1;
 	NTSTATUS ntstatus2;
 
 	DOM_SID *members;
 
-	DEBUG(5,("_samr_GetAliasMembership: %d\n", __LINE__));
+	r_u->status = NT_STATUS_OK;
 
+	DEBUG(5,("_samr_query_useraliases: %d\n", __LINE__));
+
 	/* find the policy handle.  open a policy on it. */
-	if (!find_policy_by_hnd(p, r->in.domain_handle, (void **)(void *)&info))
+	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&info))
 		return NT_STATUS_INVALID_HANDLE;
-
-	ntstatus1 = access_check_samr_function(info->acc_granted,
-					       SA_RIGHT_DOMAIN_LOOKUP_ALIAS_BY_MEM,
-					       "_samr_GetAliasMembership");
-	ntstatus2 = access_check_samr_function(info->acc_granted,
-					       SA_RIGHT_DOMAIN_OPEN_ACCOUNT,
-					       "_samr_GetAliasMembership");
-
+		
+	ntstatus1 = access_check_samr_function(info->acc_granted, SA_RIGHT_DOMAIN_LOOKUP_ALIAS_BY_MEM, "_samr_query_useraliases");
+	ntstatus2 = access_check_samr_function(info->acc_granted, SA_RIGHT_DOMAIN_OPEN_ACCOUNT, "_samr_query_useraliases");
+	
 	if (!NT_STATUS_IS_OK(ntstatus1) || !NT_STATUS_IS_OK(ntstatus2)) {
 		if (!(NT_STATUS_EQUAL(ntstatus1,NT_STATUS_ACCESS_DENIED) && NT_STATUS_IS_OK(ntstatus2)) &&
 		    !(NT_STATUS_EQUAL(ntstatus1,NT_STATUS_ACCESS_DENIED) && NT_STATUS_IS_OK(ntstatus1))) {
 			return (NT_STATUS_IS_OK(ntstatus1)) ? ntstatus2 : ntstatus1;
 		}
-	}
+	}		
 
 	if (!sid_check_is_domain(&info->sid) &&
 	    !sid_check_is_builtin(&info->sid))
 		return NT_STATUS_OBJECT_TYPE_MISMATCH;
 
-	if (r->in.sids->num_sids) {
-		members = TALLOC_ARRAY(p->mem_ctx, DOM_SID, r->in.sids->num_sids);
+	if (q_u->num_sids1) {
+		members = TALLOC_ARRAY(p->mem_ctx, DOM_SID, q_u->num_sids1);
 
 		if (members == NULL)
 			return NT_STATUS_NO_MEMORY;
@@ -4366,15 +3863,15 @@
 		members = NULL;
 	}
 
-	for (i=0; i<r->in.sids->num_sids; i++)
-		sid_copy(&members[i], r->in.sids->sids[i].sid);
+	for (i=0; i<q_u->num_sids1; i++)
+		sid_copy(&members[i], &q_u->sid[i].sid);
 
 	alias_rids = NULL;
 	num_alias_rids = 0;
 
 	become_root();
 	ntstatus1 = pdb_enum_alias_memberships(p->mem_ctx, &info->sid, members,
-					       r->in.sids->num_sids,
+					       q_u->num_sids1,
 					       &alias_rids, &num_alias_rids);
 	unbecome_root();
 
@@ -4382,44 +3879,40 @@
 		return ntstatus1;
 	}
 
-	r->out.rids->count = num_alias_rids;
-	r->out.rids->ids = alias_rids;
-
+	init_samr_r_query_useraliases(r_u, num_alias_rids, alias_rids,
+				      NT_STATUS_OK);
 	return NT_STATUS_OK;
 }
 
 /*********************************************************************
- _samr_GetMembersInAlias
+ _samr_query_aliasmem
 *********************************************************************/
 
-NTSTATUS _samr_GetMembersInAlias(pipes_struct *p,
-				 struct samr_GetMembersInAlias *r)
+NTSTATUS _samr_query_aliasmem(pipes_struct *p, SAMR_Q_QUERY_ALIASMEM *q_u, SAMR_R_QUERY_ALIASMEM *r_u)
 {
 	NTSTATUS status;
 	size_t i;
 	size_t num_sids = 0;
-	struct lsa_SidPtr *sids = NULL;
-	DOM_SID *pdb_sids = NULL;
+	DOM_SID2 *sid;
+	DOM_SID *sids=NULL;
 
 	DOM_SID alias_sid;
 
 	uint32 acc_granted;
 
 	/* find the policy handle.  open a policy on it. */
-	if (!get_lsa_policy_samr_sid(p, r->in.alias_handle, &alias_sid, &acc_granted, NULL))
+	if (!get_lsa_policy_samr_sid(p, &q_u->alias_pol, &alias_sid, &acc_granted, NULL)) 
 		return NT_STATUS_INVALID_HANDLE;
-
-	status = access_check_samr_function(acc_granted,
-					    SA_RIGHT_ALIAS_GET_MEMBERS,
-					    "_samr_GetMembersInAlias");
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+	
+	if (!NT_STATUS_IS_OK(r_u->status = 
+		access_check_samr_function(acc_granted, SA_RIGHT_ALIAS_GET_MEMBERS, "_samr_query_aliasmem"))) {
+		return r_u->status;
 	}
 
-	DEBUG(10, ("sid is %s\n", sid_string_dbg(&alias_sid)));
+	DEBUG(10, ("sid is %s\n", sid_string_static(&alias_sid)));
 
 	become_root();
-	status = pdb_enum_aliasmem(&alias_sid, &pdb_sids, &num_sids);
+	status = pdb_enum_aliasmem(&alias_sid, &sids, &num_sids);
 	unbecome_root();
 
 	if (!NT_STATUS_IS_OK(status)) {
@@ -4427,37 +3920,34 @@
 	}
 
 	if (num_sids) {
-		sids = TALLOC_ZERO_ARRAY(p->mem_ctx, struct lsa_SidPtr, num_sids);
-		if (sids == NULL) {
-			TALLOC_FREE(pdb_sids);
+		sid = TALLOC_ZERO_ARRAY(p->mem_ctx, DOM_SID2, num_sids);	
+		if (sid == NULL) {
+			SAFE_FREE(sids);
 			return NT_STATUS_NO_MEMORY;
 		}
+	} else {
+		sid = NULL;
 	}
 
 	for (i = 0; i < num_sids; i++) {
-		sids[i].sid = sid_dup_talloc(p->mem_ctx, &pdb_sids[i]);
-		if (!sids[i].sid) {
-			TALLOC_FREE(pdb_sids);
-			return NT_STATUS_NO_MEMORY;
-		}
+		init_dom_sid2(&sid[i], &sids[i]);
 	}
 
-	r->out.sids->num_sids = num_sids;
-	r->out.sids->sids = sids;
+	init_samr_r_query_aliasmem(r_u, num_sids, sid, NT_STATUS_OK);
 
-	TALLOC_FREE(pdb_sids);
+	TALLOC_FREE(sids);
 
 	return NT_STATUS_OK;
 }
 
 /*********************************************************************
- _samr_QueryGroupMember
+ _samr_query_groupmem
 *********************************************************************/
 
-NTSTATUS _samr_QueryGroupMember(pipes_struct *p,
-				struct samr_QueryGroupMember *r)
+NTSTATUS _samr_query_groupmem(pipes_struct *p, SAMR_Q_QUERY_GROUPMEM *q_u, SAMR_R_QUERY_GROUPMEM *r_u)
 {
 	DOM_SID group_sid;
+	fstring group_sid_str;
 	size_t i, num_members;
 
 	uint32 *rid=NULL;
@@ -4465,42 +3955,33 @@
 
 	uint32 acc_granted;
 
-	NTSTATUS status;
-	struct samr_RidTypeArray *rids = NULL;
+	NTSTATUS result;
 
-	rids = TALLOC_ZERO_P(p->mem_ctx, struct samr_RidTypeArray);
-	if (!rids) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
 	/* find the policy handle.  open a policy on it. */
-	if (!get_lsa_policy_samr_sid(p, r->in.group_handle, &group_sid, &acc_granted, NULL))
+	if (!get_lsa_policy_samr_sid(p, &q_u->group_pol, &group_sid, &acc_granted, NULL)) 
 		return NT_STATUS_INVALID_HANDLE;
-
-	status = access_check_samr_function(acc_granted,
-					    SA_RIGHT_GROUP_GET_MEMBERS,
-					    "_samr_QueryGroupMember");
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+		
+	if (!NT_STATUS_IS_OK(r_u->status = access_check_samr_function(acc_granted, SA_RIGHT_GROUP_GET_MEMBERS, "_samr_query_groupmem"))) {
+		return r_u->status;
 	}
+		
+	sid_to_string(group_sid_str, &group_sid);
+	DEBUG(10, ("sid is %s\n", group_sid_str));
 
-	DEBUG(10, ("sid is %s\n", sid_string_dbg(&group_sid)));
-
 	if (!sid_check_is_in_our_domain(&group_sid)) {
-		DEBUG(3, ("sid %s is not in our domain\n",
-			  sid_string_dbg(&group_sid)));
+		DEBUG(3, ("sid %s is not in our domain\n", group_sid_str));
 		return NT_STATUS_NO_SUCH_GROUP;
 	}
 
 	DEBUG(10, ("lookup on Domain SID\n"));
 
 	become_root();
-	status = pdb_enum_group_members(p->mem_ctx, &group_sid,
+	result = pdb_enum_group_members(p->mem_ctx, &group_sid,
 					&rid, &num_members);
 	unbecome_root();
 
-	if (!NT_STATUS_IS_OK(status))
-		return status;
+	if (!NT_STATUS_IS_OK(result))
+		return result;
 
 	if (num_members) {
 		attr=TALLOC_ZERO_ARRAY(p->mem_ctx, uint32, num_members);
@@ -4510,145 +3991,128 @@
 	} else {
 		attr = NULL;
 	}
-
+	
 	for (i=0; i<num_members; i++)
 		attr[i] = SID_NAME_USER;
 
-	rids->count = num_members;
-	rids->types = attr;
-	rids->rids = rid;
+	init_samr_r_query_groupmem(r_u, num_members, rid, attr, NT_STATUS_OK);
 
-	*r->out.rids = rids;
-
 	return NT_STATUS_OK;
 }
 
 /*********************************************************************
- _samr_AddAliasMember
+ _samr_add_aliasmem
 *********************************************************************/
 
-NTSTATUS _samr_AddAliasMember(pipes_struct *p,
-			      struct samr_AddAliasMember *r)
+NTSTATUS _samr_add_aliasmem(pipes_struct *p, SAMR_Q_ADD_ALIASMEM *q_u, SAMR_R_ADD_ALIASMEM *r_u)
 {
 	DOM_SID alias_sid;
 	uint32 acc_granted;
 	SE_PRIV se_rights;
-	bool can_add_accounts;
-	NTSTATUS status;
+	BOOL can_add_accounts;
+	NTSTATUS ret;
 	DISP_INFO *disp_info = NULL;
 
 	/* Find the policy handle. Open a policy on it. */
-	if (!get_lsa_policy_samr_sid(p, r->in.alias_handle, &alias_sid, &acc_granted, &disp_info))
+	if (!get_lsa_policy_samr_sid(p, &q_u->alias_pol, &alias_sid, &acc_granted, &disp_info)) 
 		return NT_STATUS_INVALID_HANDLE;
-
-	status = access_check_samr_function(acc_granted,
-					    SA_RIGHT_ALIAS_ADD_MEMBER,
-					    "_samr_AddAliasMember");
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+	
+	if (!NT_STATUS_IS_OK(r_u->status = access_check_samr_function(acc_granted, SA_RIGHT_ALIAS_ADD_MEMBER, "_samr_add_aliasmem"))) {
+		return r_u->status;
 	}
-
-	DEBUG(10, ("sid is %s\n", sid_string_dbg(&alias_sid)));
-
+		
+	DEBUG(10, ("sid is %s\n", sid_string_static(&alias_sid)));
+	
 	se_priv_copy( &se_rights, &se_add_users );
 	can_add_accounts = user_has_privileges( p->pipe_user.nt_user_token, &se_rights );
 
 	/******** BEGIN SeAddUsers BLOCK *********/
-
+	
 	if ( can_add_accounts )
 		become_root();
-
-	status = pdb_add_aliasmem(&alias_sid, r->in.sid);
-
+	
+	ret = pdb_add_aliasmem(&alias_sid, &q_u->sid.sid);
+	
 	if ( can_add_accounts )
 		unbecome_root();
-
+		
 	/******** END SeAddUsers BLOCK *********/
-
-	if (NT_STATUS_IS_OK(status)) {
+	
+	if (NT_STATUS_IS_OK(ret)) {
 		force_flush_samr_cache(disp_info);
 	}
 
-	return status;
+	return ret;
 }
 
 /*********************************************************************
- _samr_DeleteAliasMember
+ _samr_del_aliasmem
 *********************************************************************/
 
-NTSTATUS _samr_DeleteAliasMember(pipes_struct *p,
-				 struct samr_DeleteAliasMember *r)
+NTSTATUS _samr_del_aliasmem(pipes_struct *p, SAMR_Q_DEL_ALIASMEM *q_u, SAMR_R_DEL_ALIASMEM *r_u)
 {
 	DOM_SID alias_sid;
 	uint32 acc_granted;
 	SE_PRIV se_rights;
-	bool can_add_accounts;
-	NTSTATUS status;
+	BOOL can_add_accounts;
+	NTSTATUS ret;
 	DISP_INFO *disp_info = NULL;
 
 	/* Find the policy handle. Open a policy on it. */
-	if (!get_lsa_policy_samr_sid(p, r->in.alias_handle, &alias_sid, &acc_granted, &disp_info))
+	if (!get_lsa_policy_samr_sid(p, &q_u->alias_pol, &alias_sid, &acc_granted, &disp_info)) 
 		return NT_STATUS_INVALID_HANDLE;
-
-	status = access_check_samr_function(acc_granted,
-					    SA_RIGHT_ALIAS_REMOVE_MEMBER,
-					    "_samr_DeleteAliasMember");
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+	
+	if (!NT_STATUS_IS_OK(r_u->status = access_check_samr_function(acc_granted, SA_RIGHT_ALIAS_REMOVE_MEMBER, "_samr_del_aliasmem"))) {
+		return r_u->status;
 	}
-
+	
 	DEBUG(10, ("_samr_del_aliasmem:sid is %s\n",
-		   sid_string_dbg(&alias_sid)));
+		   sid_string_static(&alias_sid)));
 
 	se_priv_copy( &se_rights, &se_add_users );
 	can_add_accounts = user_has_privileges( p->pipe_user.nt_user_token, &se_rights );
 
 	/******** BEGIN SeAddUsers BLOCK *********/
-
+	
 	if ( can_add_accounts )
 		become_root();
 
-	status = pdb_del_aliasmem(&alias_sid, r->in.sid);
-
+	ret = pdb_del_aliasmem(&alias_sid, &q_u->sid.sid);
+	
 	if ( can_add_accounts )
 		unbecome_root();
-
+		
 	/******** END SeAddUsers BLOCK *********/
-
-	if (NT_STATUS_IS_OK(status)) {
+	
+	if (NT_STATUS_IS_OK(ret)) {
 		force_flush_samr_cache(disp_info);
 	}
 
-	return status;
+	return ret;
 }
 
 /*********************************************************************
- _samr_AddGroupMember
+ _samr_add_groupmem
 *********************************************************************/
 
-NTSTATUS _samr_AddGroupMember(pipes_struct *p,
-			      struct samr_AddGroupMember *r)
+NTSTATUS _samr_add_groupmem(pipes_struct *p, SAMR_Q_ADD_GROUPMEM *q_u, SAMR_R_ADD_GROUPMEM *r_u)
 {
-	NTSTATUS status;
 	DOM_SID group_sid;
 	uint32 group_rid;
 	uint32 acc_granted;
 	SE_PRIV se_rights;
-	bool can_add_accounts;
+	BOOL can_add_accounts;
 	DISP_INFO *disp_info = NULL;
 
 	/* Find the policy handle. Open a policy on it. */
-	if (!get_lsa_policy_samr_sid(p, r->in.group_handle, &group_sid, &acc_granted, &disp_info))
+	if (!get_lsa_policy_samr_sid(p, &q_u->pol, &group_sid, &acc_granted, &disp_info)) 
 		return NT_STATUS_INVALID_HANDLE;
-
-	status = access_check_samr_function(acc_granted,
-					    SA_RIGHT_GROUP_ADD_MEMBER,
-					    "_samr_AddGroupMember");
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+	
+	if (!NT_STATUS_IS_OK(r_u->status = access_check_samr_function(acc_granted, SA_RIGHT_GROUP_ADD_MEMBER, "_samr_add_groupmem"))) {
+		return r_u->status;
 	}
 
-	DEBUG(10, ("sid is %s\n", sid_string_dbg(&group_sid)));
+	DEBUG(10, ("sid is %s\n", sid_string_static(&group_sid)));
 
 	if (!sid_peek_check_rid(get_global_sam_sid(), &group_sid,
 				&group_rid)) {
@@ -4659,53 +4123,47 @@
 	can_add_accounts = user_has_privileges( p->pipe_user.nt_user_token, &se_rights );
 
 	/******** BEGIN SeAddUsers BLOCK *********/
-
+	
 	if ( can_add_accounts )
 		become_root();
 
-	status = pdb_add_groupmem(p->mem_ctx, group_rid, r->in.rid);
-
+	r_u->status = pdb_add_groupmem(p->mem_ctx, group_rid, q_u->rid);
+		
 	if ( can_add_accounts )
 		unbecome_root();
-
+		
 	/******** END SeAddUsers BLOCK *********/
-
+	
 	force_flush_samr_cache(disp_info);
 
-	return status;
+	return r_u->status;
 }
 
 /*********************************************************************
- _samr_DeleteGroupMember
+ _samr_del_groupmem
 *********************************************************************/
 
-NTSTATUS _samr_DeleteGroupMember(pipes_struct *p,
-				 struct samr_DeleteGroupMember *r)
-
+NTSTATUS _samr_del_groupmem(pipes_struct *p, SAMR_Q_DEL_GROUPMEM *q_u, SAMR_R_DEL_GROUPMEM *r_u)
 {
-	NTSTATUS status;
 	DOM_SID group_sid;
 	uint32 group_rid;
 	uint32 acc_granted;
 	SE_PRIV se_rights;
-	bool can_add_accounts;
+	BOOL can_add_accounts;
 	DISP_INFO *disp_info = NULL;
 
 	/*
-	 * delete the group member named r->in.rid
+	 * delete the group member named q_u->rid
 	 * who is a member of the sid associated with the handle
 	 * the rid is a user's rid as the group is a domain group.
 	 */
 
 	/* Find the policy handle. Open a policy on it. */
-	if (!get_lsa_policy_samr_sid(p, r->in.group_handle, &group_sid, &acc_granted, &disp_info))
+	if (!get_lsa_policy_samr_sid(p, &q_u->pol, &group_sid, &acc_granted, &disp_info)) 
 		return NT_STATUS_INVALID_HANDLE;
-
-	status = access_check_samr_function(acc_granted,
-					    SA_RIGHT_GROUP_REMOVE_MEMBER,
-					    "_samr_DeleteGroupMember");
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+	
+	if (!NT_STATUS_IS_OK(r_u->status = access_check_samr_function(acc_granted, SA_RIGHT_GROUP_REMOVE_MEMBER, "_samr_del_groupmem"))) {
+		return r_u->status;
 	}
 
 	if (!sid_peek_check_rid(get_global_sam_sid(), &group_sid,
@@ -4717,51 +4175,46 @@
 	can_add_accounts = user_has_privileges( p->pipe_user.nt_user_token, &se_rights );
 
 	/******** BEGIN SeAddUsers BLOCK *********/
-
+	
 	if ( can_add_accounts )
 		become_root();
+		
+	r_u->status = pdb_del_groupmem(p->mem_ctx, group_rid, q_u->rid);
 
-	status = pdb_del_groupmem(p->mem_ctx, group_rid, r->in.rid);
-
 	if ( can_add_accounts )
 		unbecome_root();
-
+		
 	/******** END SeAddUsers BLOCK *********/
-
+	
 	force_flush_samr_cache(disp_info);
 
-	return status;
+	return r_u->status;
 }
 
 /*********************************************************************
- _samr_DeleteUser
+ _samr_delete_dom_user
 *********************************************************************/
 
-NTSTATUS _samr_DeleteUser(pipes_struct *p,
-			  struct samr_DeleteUser *r)
+NTSTATUS _samr_delete_dom_user(pipes_struct *p, SAMR_Q_DELETE_DOM_USER *q_u, SAMR_R_DELETE_DOM_USER *r_u )
 {
-	NTSTATUS status;
 	DOM_SID user_sid;
 	struct samu *sam_pass=NULL;
 	uint32 acc_granted;
-	bool can_add_accounts;
+	BOOL can_add_accounts;
 	uint32 acb_info;
 	DISP_INFO *disp_info = NULL;
-	bool ret;
+	BOOL ret;
 
-	DEBUG(5, ("_samr_DeleteUser: %d\n", __LINE__));
+	DEBUG(5, ("_samr_delete_dom_user: %d\n", __LINE__));
 
 	/* Find the policy handle. Open a policy on it. */
-	if (!get_lsa_policy_samr_sid(p, r->in.user_handle, &user_sid, &acc_granted, &disp_info))
+	if (!get_lsa_policy_samr_sid(p, &q_u->user_pol, &user_sid, &acc_granted, &disp_info)) 
 		return NT_STATUS_INVALID_HANDLE;
-
-	status = access_check_samr_function(acc_granted,
-					    STD_RIGHT_DELETE_ACCESS,
-					    "_samr_DeleteUser");
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+		
+	if (!NT_STATUS_IS_OK(r_u->status = access_check_samr_function(acc_granted, STD_RIGHT_DELETE_ACCESS, "_samr_delete_dom_user"))) {
+		return r_u->status;
 	}
-
+		
 	if (!sid_check_is_in_our_domain(&user_sid))
 		return NT_STATUS_CANNOT_DELETE;
 
@@ -4775,12 +4228,12 @@
 	unbecome_root();
 
 	if( !ret ) {
-		DEBUG(5,("_samr_DeleteUser: User %s doesn't exist.\n",
-			sid_string_dbg(&user_sid)));
+		DEBUG(5,("_samr_delete_dom_user:User %s doesn't exist.\n", 
+			sid_string_static(&user_sid)));
 		TALLOC_FREE(sam_pass);
 		return NT_STATUS_NO_SUCH_USER;
 	}
-
+	
 	acb_info = pdb_get_acct_ctrl(sam_pass);
 
 	/* For machine accounts it's the SeMachineAccountPrivilege that counts. */
@@ -4788,32 +4241,32 @@
 		can_add_accounts = user_has_privileges( p->pipe_user.nt_user_token, &se_machine_account );
 	} else {
 		can_add_accounts = user_has_privileges( p->pipe_user.nt_user_token, &se_add_users );
-	}
+	} 
 
 	/******** BEGIN SeAddUsers BLOCK *********/
-
+	
 	if ( can_add_accounts )
 		become_root();
 
-	status = pdb_delete_user(p->mem_ctx, sam_pass);
+	r_u->status = pdb_delete_user(p->mem_ctx, sam_pass);
 
 	if ( can_add_accounts )
 		unbecome_root();
-
+		
 	/******** END SeAddUsers BLOCK *********/
-
-	if ( !NT_STATUS_IS_OK(status) ) {
-		DEBUG(5,("_samr_DeleteUser: Failed to delete entry for "
+		
+	if ( !NT_STATUS_IS_OK(r_u->status) ) {
+		DEBUG(5,("_samr_delete_dom_user: Failed to delete entry for "
 			 "user %s: %s.\n", pdb_get_username(sam_pass),
-			 nt_errstr(status)));
+			 nt_errstr(r_u->status)));
 		TALLOC_FREE(sam_pass);
-		return status;
+		return r_u->status;
 	}
 
 
 	TALLOC_FREE(sam_pass);
 
-	if (!close_policy_hnd(p, r->in.user_handle))
+	if (!close_policy_hnd(p, &q_u->user_pol))
 		return NT_STATUS_OBJECT_NAME_INVALID;
 
 	force_flush_samr_cache(disp_info);
@@ -4822,34 +4275,29 @@
 }
 
 /*********************************************************************
- _samr_DeleteDomainGroup
+ _samr_delete_dom_group
 *********************************************************************/
 
-NTSTATUS _samr_DeleteDomainGroup(pipes_struct *p,
-				 struct samr_DeleteDomainGroup *r)
+NTSTATUS _samr_delete_dom_group(pipes_struct *p, SAMR_Q_DELETE_DOM_GROUP *q_u, SAMR_R_DELETE_DOM_GROUP *r_u)
 {
-	NTSTATUS status;
 	DOM_SID group_sid;
 	uint32 group_rid;
 	uint32 acc_granted;
 	SE_PRIV se_rights;
-	bool can_add_accounts;
+	BOOL can_add_accounts;
 	DISP_INFO *disp_info = NULL;
 
-	DEBUG(5, ("samr_DeleteDomainGroup: %d\n", __LINE__));
+	DEBUG(5, ("samr_delete_dom_group: %d\n", __LINE__));
 
 	/* Find the policy handle. Open a policy on it. */
-	if (!get_lsa_policy_samr_sid(p, r->in.group_handle, &group_sid, &acc_granted, &disp_info))
+	if (!get_lsa_policy_samr_sid(p, &q_u->group_pol, &group_sid, &acc_granted, &disp_info)) 
 		return NT_STATUS_INVALID_HANDLE;
-
-	status = access_check_samr_function(acc_granted,
-					    STD_RIGHT_DELETE_ACCESS,
-					    "_samr_DeleteDomainGroup");
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+		
+	if (!NT_STATUS_IS_OK(r_u->status = access_check_samr_function(acc_granted, STD_RIGHT_DELETE_ACCESS, "_samr_delete_dom_group"))) {
+		return r_u->status;
 	}
 
-	DEBUG(10, ("sid is %s\n", sid_string_dbg(&group_sid)));
+	DEBUG(10, ("sid is %s\n", sid_string_static(&group_sid)));
 
 	if (!sid_peek_check_rid(get_global_sam_sid(), &group_sid,
 				&group_rid)) {
@@ -4860,26 +4308,26 @@
 	can_add_accounts = user_has_privileges( p->pipe_user.nt_user_token, &se_rights );
 
 	/******** BEGIN SeAddUsers BLOCK *********/
-
+	
 	if ( can_add_accounts )
 		become_root();
 
-	status = pdb_delete_dom_group(p->mem_ctx, group_rid);
+	r_u->status = pdb_delete_dom_group(p->mem_ctx, group_rid);
 
 	if ( can_add_accounts )
 		unbecome_root();
-
+		
 	/******** END SeAddUsers BLOCK *********/
-
-	if ( !NT_STATUS_IS_OK(status) ) {
-		DEBUG(5,("_samr_DeleteDomainGroup: Failed to delete mapping "
+	
+	if ( !NT_STATUS_IS_OK(r_u->status) ) {
+		DEBUG(5,("_samr_delete_dom_group: Failed to delete mapping "
 			 "entry for group %s: %s\n",
-			 sid_string_dbg(&group_sid),
-			 nt_errstr(status)));
-		return status;
+			 sid_string_static(&group_sid),
+			 nt_errstr(r_u->status)));
+		return r_u->status;
 	}
-
-	if (!close_policy_hnd(p, r->in.group_handle))
+	
+	if (!close_policy_hnd(p, &q_u->group_pol))
 		return NT_STATUS_OBJECT_NAME_INVALID;
 
 	force_flush_samr_cache(disp_info);
@@ -4888,37 +4336,33 @@
 }
 
 /*********************************************************************
- _samr_DeleteDomAlias
+ _samr_delete_dom_alias
 *********************************************************************/
 
-NTSTATUS _samr_DeleteDomAlias(pipes_struct *p,
-			      struct samr_DeleteDomAlias *r)
+NTSTATUS _samr_delete_dom_alias(pipes_struct *p, SAMR_Q_DELETE_DOM_ALIAS *q_u, SAMR_R_DELETE_DOM_ALIAS *r_u)
 {
 	DOM_SID alias_sid;
 	uint32 acc_granted;
 	SE_PRIV se_rights;
-	bool can_add_accounts;
-	NTSTATUS status;
+	BOOL can_add_accounts;
+	BOOL ret;
 	DISP_INFO *disp_info = NULL;
 
-	DEBUG(5, ("_samr_DeleteDomAlias: %d\n", __LINE__));
+	DEBUG(5, ("_samr_delete_dom_alias: %d\n", __LINE__));
 
 	/* Find the policy handle. Open a policy on it. */
-	if (!get_lsa_policy_samr_sid(p, r->in.alias_handle, &alias_sid, &acc_granted, &disp_info))
+	if (!get_lsa_policy_samr_sid(p, &q_u->alias_pol, &alias_sid, &acc_granted, &disp_info)) 
 		return NT_STATUS_INVALID_HANDLE;
-
+	
 	/* copy the handle to the outgoing reply */
 
-	memcpy(r->out.alias_handle, r->in.alias_handle, sizeof(r->out.alias_handle));
+	memcpy( &r_u->pol, &q_u->alias_pol, sizeof(r_u->pol) );
 
-	status = access_check_samr_function(acc_granted,
-					    STD_RIGHT_DELETE_ACCESS,
-					    "_samr_DeleteDomAlias");
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+	if (!NT_STATUS_IS_OK(r_u->status = access_check_samr_function(acc_granted, STD_RIGHT_DELETE_ACCESS, "_samr_delete_dom_alias"))) {
+		return r_u->status;
 	}
 
-	DEBUG(10, ("sid is %s\n", sid_string_dbg(&alias_sid)));
+	DEBUG(10, ("sid is %s\n", sid_string_static(&alias_sid)));
 
 	/* Don't let Windows delete builtin groups */
 
@@ -4928,29 +4372,29 @@
 
 	if (!sid_check_is_in_our_domain(&alias_sid))
 		return NT_STATUS_NO_SUCH_ALIAS;
-
+		
 	DEBUG(10, ("lookup on Local SID\n"));
 
 	se_priv_copy( &se_rights, &se_add_users );
 	can_add_accounts = user_has_privileges( p->pipe_user.nt_user_token, &se_rights );
 
 	/******** BEGIN SeAddUsers BLOCK *********/
-
+	
 	if ( can_add_accounts )
 		become_root();
 
 	/* Have passdb delete the alias */
-	status = pdb_delete_alias(&alias_sid);
-
+	ret = pdb_delete_alias(&alias_sid);
+	
 	if ( can_add_accounts )
 		unbecome_root();
-
+		
 	/******** END SeAddUsers BLOCK *********/
 
-	if ( !NT_STATUS_IS_OK(status))
-		return status;
+	if ( !ret )
+		return NT_STATUS_ACCESS_DENIED;
 
-	if (!close_policy_hnd(p, r->in.alias_handle))
+	if (!close_policy_hnd(p, &q_u->alias_pol))
 		return NT_STATUS_OBJECT_NAME_INVALID;
 
 	force_flush_samr_cache(disp_info);
@@ -4959,71 +4403,65 @@
 }
 
 /*********************************************************************
- _samr_CreateDomainGroup
+ _samr_create_dom_group
 *********************************************************************/
 
-NTSTATUS _samr_CreateDomainGroup(pipes_struct *p,
-				 struct samr_CreateDomainGroup *r)
-
+NTSTATUS _samr_create_dom_group(pipes_struct *p, SAMR_Q_CREATE_DOM_GROUP *q_u, SAMR_R_CREATE_DOM_GROUP *r_u)
 {
-	NTSTATUS status;
 	DOM_SID dom_sid;
 	DOM_SID info_sid;
 	const char *name;
 	struct samr_info *info;
 	uint32 acc_granted;
 	SE_PRIV se_rights;
-	bool can_add_accounts;
+	BOOL can_add_accounts;
 	DISP_INFO *disp_info = NULL;
 
 	/* Find the policy handle. Open a policy on it. */
-	if (!get_lsa_policy_samr_sid(p, r->in.domain_handle, &dom_sid, &acc_granted, &disp_info))
+	if (!get_lsa_policy_samr_sid(p, &q_u->pol, &dom_sid, &acc_granted, &disp_info)) 
 		return NT_STATUS_INVALID_HANDLE;
-
-	status = access_check_samr_function(acc_granted,
-					    SA_RIGHT_DOMAIN_CREATE_GROUP,
-					    "_samr_CreateDomainGroup");
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+	
+	if (!NT_STATUS_IS_OK(r_u->status = access_check_samr_function(acc_granted, SA_RIGHT_DOMAIN_CREATE_GROUP, "_samr_create_dom_group"))) {
+		return r_u->status;
 	}
-
+		
 	if (!sid_equal(&dom_sid, get_global_sam_sid()))
 		return NT_STATUS_ACCESS_DENIED;
 
-	name = r->in.name->string;
+	name = rpcstr_pull_unistr2_talloc(p->mem_ctx, &q_u->uni_acct_desc);
 	if (name == NULL) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	status = can_create(p->mem_ctx, name);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+	r_u->status = can_create(p->mem_ctx, name);
+	if (!NT_STATUS_IS_OK(r_u->status)) {
+		return r_u->status;
 	}
 
 	se_priv_copy( &se_rights, &se_add_users );
 	can_add_accounts = user_has_privileges( p->pipe_user.nt_user_token, &se_rights );
 
 	/******** BEGIN SeAddUsers BLOCK *********/
-
+	
 	if ( can_add_accounts )
 		become_root();
-
+	
 	/* check that we successfully create the UNIX group */
+	
+	r_u->status = pdb_create_dom_group(p->mem_ctx, name, &r_u->rid);
 
-	status = pdb_create_dom_group(p->mem_ctx, name, r->out.rid);
-
 	if ( can_add_accounts )
 		unbecome_root();
-
+		
 	/******** END SeAddUsers BLOCK *********/
-
+	
 	/* check if we should bail out here */
+	
+	if ( !NT_STATUS_IS_OK(r_u->status) )
+		return r_u->status;
 
-	if ( !NT_STATUS_IS_OK(status) )
-		return status;
-
-	sid_compose(&info_sid, get_global_sam_sid(), *r->out.rid);
-
+	sid_compose(&info_sid, get_global_sam_sid(), r_u->rid);
+	
 	if ((info = get_samr_info_by_sid(&info_sid)) == NULL)
 		return NT_STATUS_NO_MEMORY;
 
@@ -5032,7 +4470,7 @@
 	info->acc_granted = GENERIC_RIGHTS_GROUP_ALL_ACCESS;
 
 	/* get a (unique) handle.  open a policy on it. */
-	if (!create_policy_hnd(p, r->out.group_handle, free_samr_info, (void *)info))
+	if (!create_policy_hnd(p, &r_u->pol, free_samr_info, (void *)info))
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
 	force_flush_samr_cache(disp_info);
@@ -5041,38 +4479,34 @@
 }
 
 /*********************************************************************
- _samr_CreateDomAlias
+ _samr_create_dom_alias
 *********************************************************************/
 
-NTSTATUS _samr_CreateDomAlias(pipes_struct *p,
-			      struct samr_CreateDomAlias *r)
+NTSTATUS _samr_create_dom_alias(pipes_struct *p, SAMR_Q_CREATE_DOM_ALIAS *q_u, SAMR_R_CREATE_DOM_ALIAS *r_u)
 {
 	DOM_SID dom_sid;
 	DOM_SID info_sid;
-	const char *name = NULL;
+	fstring name;
 	struct samr_info *info;
 	uint32 acc_granted;
 	gid_t gid;
 	NTSTATUS result;
 	SE_PRIV se_rights;
-	bool can_add_accounts;
+	BOOL can_add_accounts;
 	DISP_INFO *disp_info = NULL;
 
 	/* Find the policy handle. Open a policy on it. */
-	if (!get_lsa_policy_samr_sid(p, r->in.domain_handle, &dom_sid, &acc_granted, &disp_info))
+	if (!get_lsa_policy_samr_sid(p, &q_u->dom_pol, &dom_sid, &acc_granted, &disp_info)) 
 		return NT_STATUS_INVALID_HANDLE;
-
-	result = access_check_samr_function(acc_granted,
-					    SA_RIGHT_DOMAIN_CREATE_ALIAS,
-					    "_samr_CreateDomAlias");
-	if (!NT_STATUS_IS_OK(result)) {
-		return result;
+		
+	if (!NT_STATUS_IS_OK(r_u->status = access_check_samr_function(acc_granted, SA_RIGHT_DOMAIN_CREATE_ALIAS, "_samr_create_alias"))) {
+		return r_u->status;
 	}
-
+		
 	if (!sid_equal(&dom_sid, get_global_sam_sid()))
 		return NT_STATUS_ACCESS_DENIED;
 
-	name = r->in.alias_name->string;
+	unistr2_to_ascii(name, &q_u->uni_acct_desc, sizeof(name)-1);
 
 	se_priv_copy( &se_rights, &se_add_users );
 	can_add_accounts = user_has_privileges( p->pipe_user.nt_user_token, &se_rights );
@@ -5083,16 +4517,16 @@
 	}
 
 	/******** BEGIN SeAddUsers BLOCK *********/
-
+	
 	if ( can_add_accounts )
 		become_root();
 
 	/* Have passdb create the alias */
-	result = pdb_create_alias(name, r->out.rid);
+	result = pdb_create_alias(name, &r_u->rid);
 
 	if ( can_add_accounts )
 		unbecome_root();
-
+		
 	/******** END SeAddUsers BLOCK *********/
 
 	if (!NT_STATUS_IS_OK(result)) {
@@ -5102,7 +4536,7 @@
 	}
 
 	sid_copy(&info_sid, get_global_sam_sid());
-	sid_append_rid(&info_sid, *r->out.rid);
+	sid_append_rid(&info_sid, r_u->rid);
 
 	if (!sid_to_gid(&info_sid, &gid)) {
 		DEBUG(10, ("Could not find alias just created\n"));
@@ -5124,7 +4558,7 @@
 	info->acc_granted = GENERIC_RIGHTS_ALIAS_ALL_ACCESS;
 
 	/* get a (unique) handle.  open a policy on it. */
-	if (!create_policy_hnd(p, r->out.alias_handle, free_samr_info, (void *)info))
+	if (!create_policy_hnd(p, &r_u->alias_pol, free_samr_info, (void *)info))
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
 	force_flush_samr_cache(disp_info);
@@ -5133,81 +4567,68 @@
 }
 
 /*********************************************************************
- _samr_QueryGroupInfo
+ _samr_query_groupinfo
+
+sends the name/comment pair of a domain group
+level 1 send also the number of users of that group
 *********************************************************************/
 
-NTSTATUS _samr_QueryGroupInfo(pipes_struct *p,
-			      struct samr_QueryGroupInfo *r)
+NTSTATUS _samr_query_groupinfo(pipes_struct *p, SAMR_Q_QUERY_GROUPINFO *q_u, SAMR_R_QUERY_GROUPINFO *r_u)
 {
-	NTSTATUS status;
 	DOM_SID group_sid;
 	GROUP_MAP map;
-	union samr_GroupInfo *info = NULL;
+	GROUP_INFO_CTR *ctr;
 	uint32 acc_granted;
-	bool ret;
-	uint32_t attributes = SE_GROUP_MANDATORY |
-			      SE_GROUP_ENABLED_BY_DEFAULT |
-			      SE_GROUP_ENABLED;
-	const char *group_name = NULL;
-	const char *group_description = NULL;
+	BOOL ret;
 
-	if (!get_lsa_policy_samr_sid(p, r->in.group_handle, &group_sid, &acc_granted, NULL))
+	if (!get_lsa_policy_samr_sid(p, &q_u->pol, &group_sid, &acc_granted, NULL)) 
 		return NT_STATUS_INVALID_HANDLE;
-
-	status = access_check_samr_function(acc_granted,
-					    SA_RIGHT_GROUP_LOOKUP_INFO,
-					    "_samr_QueryGroupInfo");
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+	
+	if (!NT_STATUS_IS_OK(r_u->status = access_check_samr_function(acc_granted, SA_RIGHT_GROUP_LOOKUP_INFO, "_samr_query_groupinfo"))) {
+		return r_u->status;
 	}
-
+		
 	become_root();
 	ret = get_domain_group_from_sid(group_sid, &map);
 	unbecome_root();
 	if (!ret)
 		return NT_STATUS_INVALID_HANDLE;
 
-	/* FIXME: map contains fstrings */
-	group_name = talloc_strdup(r, map.nt_name);
-	group_description = talloc_strdup(r, map.comment);
-
-	info = TALLOC_ZERO_P(p->mem_ctx, union samr_GroupInfo);
-	if (!info) {
+	ctr=TALLOC_ZERO_P(p->mem_ctx, GROUP_INFO_CTR);
+	if (ctr==NULL)
 		return NT_STATUS_NO_MEMORY;
-	}
 
-	switch (r->in.level) {
+	switch (q_u->switch_level) {
 		case 1: {
 			uint32 *members;
 			size_t num_members;
 
+			ctr->switch_value1 = 1;
+
 			become_root();
-			status = pdb_enum_group_members(
+			r_u->status = pdb_enum_group_members(
 				p->mem_ctx, &group_sid, &members, &num_members);
 			unbecome_root();
-
-			if (!NT_STATUS_IS_OK(status)) {
-				return status;
+	
+			if (!NT_STATUS_IS_OK(r_u->status)) {
+				return r_u->status;
 			}
 
-			init_samr_group_info1(&info->all,
-					      group_name,
-					      attributes,
-					      num_members,
-					      group_description);
+			init_samr_group_info1(&ctr->group.info1, map.nt_name,
+				      map.comment, num_members);
 			break;
 		}
 		case 2:
-			init_samr_group_info2(&info->name,
-					      group_name);
+			ctr->switch_value1 = 2;
+			init_samr_group_info2(&ctr->group.info2, map.nt_name);
 			break;
 		case 3:
-			init_samr_group_info3(&info->attributes,
-					      attributes);
+			ctr->switch_value1 = 3;
+			init_samr_group_info3(&ctr->group.info3);
 			break;
 		case 4:
-			init_samr_group_info4(&info->description,
-					      group_description);
+			ctr->switch_value1 = 4;
+			init_samr_group_info4(&ctr->group.info4, map.comment);
 			break;
 		case 5: {
 			/*
@@ -5215,70 +4636,69 @@
 			size_t num_members;
 			*/
 
+			ctr->switch_value1 = 5;
+
 			/*
 			become_root();
-			status = pdb_enum_group_members(
+			r_u->status = pdb_enum_group_members(
 				p->mem_ctx, &group_sid, &members, &num_members);
 			unbecome_root();
-
-			if (!NT_STATUS_IS_OK(status)) {
-				return status;
+	
+			if (!NT_STATUS_IS_OK(r_u->status)) {
+				return r_u->status;
 			}
 			*/
-			init_samr_group_info5(&info->all2,
-					      group_name,
-					      attributes,
-					      0, /* num_members - in w2k3 this is always 0 */
-					      group_description);
-
+			init_samr_group_info5(&ctr->group.info5, map.nt_name,
+				      map.comment, 0 /* num_members */); /* in w2k3 this is always 0 */
 			break;
 		}
 		default:
 			return NT_STATUS_INVALID_INFO_CLASS;
 	}
 
-	*r->out.info = info;
+	init_samr_r_query_groupinfo(r_u, ctr, NT_STATUS_OK);
 
 	return NT_STATUS_OK;
 }
 
 /*********************************************************************
- _samr_SetGroupInfo
+ _samr_set_groupinfo
+ 
+ update a domain group's comment.
 *********************************************************************/
 
-NTSTATUS _samr_SetGroupInfo(pipes_struct *p,
-			    struct samr_SetGroupInfo *r)
+NTSTATUS _samr_set_groupinfo(pipes_struct *p, SAMR_Q_SET_GROUPINFO *q_u, SAMR_R_SET_GROUPINFO *r_u)
 {
 	DOM_SID group_sid;
 	GROUP_MAP map;
+	GROUP_INFO_CTR *ctr;
 	uint32 acc_granted;
-	NTSTATUS status;
-	bool ret;
-	bool can_mod_accounts;
+	NTSTATUS ret;
+	BOOL result;
+	BOOL can_mod_accounts;
 	DISP_INFO *disp_info = NULL;
 
-	if (!get_lsa_policy_samr_sid(p, r->in.group_handle, &group_sid, &acc_granted, &disp_info))
+	if (!get_lsa_policy_samr_sid(p, &q_u->pol, &group_sid, &acc_granted, &disp_info))
 		return NT_STATUS_INVALID_HANDLE;
-
-	status = access_check_samr_function(acc_granted,
-					    SA_RIGHT_GROUP_SET_INFO,
-					    "_samr_SetGroupInfo");
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+	
+	if (!NT_STATUS_IS_OK(r_u->status = access_check_samr_function(acc_granted, SA_RIGHT_GROUP_SET_INFO, "_samr_set_groupinfo"))) {
+		return r_u->status;
 	}
 
 	become_root();
-	ret = get_domain_group_from_sid(group_sid, &map);
+	result = get_domain_group_from_sid(group_sid, &map);
 	unbecome_root();
-	if (!ret)
+	if (!result)
 		return NT_STATUS_NO_SUCH_GROUP;
+	
+	ctr=q_u->ctr;
 
-	switch (r->in.level) {
+	switch (ctr->switch_value1) {
 		case 1:
-			fstrcpy(map.comment, r->in.info->all.description.string);
+			unistr2_to_ascii(map.comment, &(ctr->group.info1.uni_acct_desc), sizeof(map.comment)-1);
 			break;
 		case 4:
-			fstrcpy(map.comment, r->in.info->description.string);
+			unistr2_to_ascii(map.comment, &(ctr->group.info4.uni_acct_desc), sizeof(map.comment)-1);
 			break;
 		default:
 			return NT_STATUS_INVALID_INFO_CLASS;
@@ -5290,61 +4710,64 @@
 
 	if ( can_mod_accounts )
 		become_root();
+	  
+	ret = pdb_update_group_mapping_entry(&map);
 
-	status = pdb_update_group_mapping_entry(&map);
-
 	if ( can_mod_accounts )
 		unbecome_root();
 
 	/******** End SeAddUsers BLOCK *********/
 
-	if (NT_STATUS_IS_OK(status)) {
+	if (NT_STATUS_IS_OK(ret)) {
 		force_flush_samr_cache(disp_info);
 	}
 
-	return status;
+	return ret;
 }
 
 /*********************************************************************
- _samr_SetAliasInfo
+ _samr_set_aliasinfo
+ 
+ update an alias's comment.
 *********************************************************************/
 
-NTSTATUS _samr_SetAliasInfo(pipes_struct *p,
-			    struct samr_SetAliasInfo *r)
+NTSTATUS _samr_set_aliasinfo(pipes_struct *p, SAMR_Q_SET_ALIASINFO *q_u, SAMR_R_SET_ALIASINFO *r_u)
 {
 	DOM_SID group_sid;
 	struct acct_info info;
+	ALIAS_INFO_CTR *ctr;
 	uint32 acc_granted;
-	bool can_mod_accounts;
-	NTSTATUS status;
+	BOOL ret;
+	BOOL can_mod_accounts;
 	DISP_INFO *disp_info = NULL;
 
-	if (!get_lsa_policy_samr_sid(p, r->in.alias_handle, &group_sid, &acc_granted, &disp_info))
+	if (!get_lsa_policy_samr_sid(p, &q_u->alias_pol, &group_sid, &acc_granted, &disp_info))
 		return NT_STATUS_INVALID_HANDLE;
-
-	status = access_check_samr_function(acc_granted,
-					    SA_RIGHT_ALIAS_SET_INFO,
-					    "_samr_SetAliasInfo");
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+	
+	if (!NT_STATUS_IS_OK(r_u->status = access_check_samr_function(acc_granted, SA_RIGHT_ALIAS_SET_INFO, "_samr_set_aliasinfo"))) {
+		return r_u->status;
 	}
+		
+	ctr=&q_u->ctr;
 
 	/* get the current group information */
 
 	become_root();
-	status = pdb_get_aliasinfo( &group_sid, &info );
+	ret = pdb_get_aliasinfo( &group_sid, &info );
 	unbecome_root();
 
-	if ( !NT_STATUS_IS_OK(status))
-		return status;
+	if ( !ret ) {
+		return NT_STATUS_NO_SUCH_ALIAS;
+	}
 
-	switch (r->in.level) {
-		case ALIASINFONAME:
+	switch (ctr->level) {
+		case 2:
 		{
-			fstring group_name;
+			fstring group_name, acct_name;
+			NTSTATUS status;
 
 			/* We currently do not support renaming groups in the
-			   the BUILTIN domain.  Refer to util_builtin.c to understand
+			   the BUILTIN domain.  Refer to util_builtin.c to understand 
 			   why.  The eventually needs to be fixed to be like Windows
 			   where you can rename builtin groups, just not delete them */
 
@@ -5354,33 +4777,37 @@
 
 			/* There has to be a valid name (and it has to be different) */
 
-			if ( !r->in.info->name.string )
+			if ( !ctr->alias.info2.name.string ) 
 				return NT_STATUS_INVALID_PARAMETER;
 
+			unistr2_to_ascii( acct_name, ctr->alias.info2.name.string, 
+				sizeof(acct_name)-1 );
+
 			/* If the name is the same just reply "ok".  Yes this
 			   doesn't allow you to change the case of a group name. */
 
-			if ( strequal( r->in.info->name.string, info.acct_name ) )
+			if ( strequal( acct_name, info.acct_name ) )
 				return NT_STATUS_OK;
 
-			fstrcpy( info.acct_name, r->in.info->name.string);
+			fstrcpy( info.acct_name, acct_name );
 
-			/* make sure the name doesn't already exist as a user
+			/* make sure the name doesn't already exist as a user 
 			   or local group */
 
 			fstr_sprintf( group_name, "%s\\%s", global_myname(), info.acct_name );
 			status = can_create( p->mem_ctx, group_name );
-			if ( !NT_STATUS_IS_OK( status ) )
+			if ( !NT_STATUS_IS_OK( status ) ) 
 				return status;
 			break;
-		}
-		case ALIASINFODESCRIPTION:
-			if (r->in.info->description.string) {
-				fstrcpy(info.acct_desc,
-					r->in.info->description.string);
-			} else {
-				fstrcpy( info.acct_desc, "" );
 			}
+		case 3:
+			if ( ctr->alias.info3.description.string ) {
+				unistr2_to_ascii( info.acct_desc, 
+					ctr->alias.info3.description.string, 
+					sizeof(info.acct_desc)-1 );
+			}
+			else
+				fstrcpy( info.acct_desc, "" );
 			break;
 		default:
 			return NT_STATUS_INVALID_INFO_CLASS;
@@ -5393,62 +4820,46 @@
         if ( can_mod_accounts )
                 become_root();
 
-        status = pdb_set_aliasinfo( &group_sid, &info );
+        ret = pdb_set_aliasinfo( &group_sid, &info );
 
         if ( can_mod_accounts )
                 unbecome_root();
 
         /******** End SeAddUsers BLOCK *********/
 
-	if (NT_STATUS_IS_OK(status))
+	if (ret) {
 		force_flush_samr_cache(disp_info);
+	}
 
-	return status;
+	return ret ? NT_STATUS_OK : NT_STATUS_ACCESS_DENIED;
 }
 
-/****************************************************************
- _samr_GetDomPwInfo
-****************************************************************/
+/*********************************************************************
+ _samr_get_dom_pwinfo
+*********************************************************************/
 
-NTSTATUS _samr_GetDomPwInfo(pipes_struct *p,
-			    struct samr_GetDomPwInfo *r)
+NTSTATUS _samr_get_dom_pwinfo(pipes_struct *p, SAMR_Q_GET_DOM_PWINFO *q_u, SAMR_R_GET_DOM_PWINFO *r_u)
 {
-	uint32_t min_password_length = 0;
-	uint32_t password_properties = 0;
-
 	/* Perform access check.  Since this rpc does not require a
 	   policy handle it will not be caught by the access checks on
 	   SAMR_CONNECT or SAMR_CONNECT_ANON. */
 
 	if (!pipe_access_check(p)) {
-		DEBUG(3, ("access denied to _samr_GetDomPwInfo\n"));
-		return NT_STATUS_ACCESS_DENIED;
+		DEBUG(3, ("access denied to samr_get_dom_pwinfo\n"));
+		r_u->status = NT_STATUS_ACCESS_DENIED;
+		return r_u->status;
 	}
 
-	become_root();
-	pdb_get_account_policy(AP_MIN_PASSWORD_LEN,
-			       &min_password_length);
-	pdb_get_account_policy(AP_USER_MUST_LOGON_TO_CHG_PASS,
-			       &password_properties);
-	unbecome_root();
+	/* Actually, returning zeros here works quite well :-). */
 
-	if (lp_check_password_script() && *lp_check_password_script()) {
-		password_properties |= DOMAIN_PASSWORD_COMPLEX;
-	}
-
-	r->out.info->min_password_length = min_password_length;
-	r->out.info->password_properties = password_properties;
-
 	return NT_STATUS_OK;
 }
 
 /*********************************************************************
- _samr_OpenGroup
+ _samr_open_group
 *********************************************************************/
 
-NTSTATUS _samr_OpenGroup(pipes_struct *p,
-			 struct samr_OpenGroup *r)
-
+NTSTATUS _samr_open_group(pipes_struct *p, SAMR_Q_OPEN_GROUP *q_u, SAMR_R_OPEN_GROUP *r_u)
 {
 	DOM_SID sid;
 	DOM_SID info_sid;
@@ -5456,51 +4867,50 @@
 	struct samr_info *info;
 	SEC_DESC         *psd = NULL;
 	uint32            acc_granted;
-	uint32            des_access = r->in.access_mask;
+	uint32            des_access = q_u->access_mask;
 	size_t            sd_size;
 	NTSTATUS          status;
 	fstring sid_string;
-	bool ret;
+	BOOL ret;
 	SE_PRIV se_rights;
 
-	if (!get_lsa_policy_samr_sid(p, r->in.domain_handle, &sid, &acc_granted, NULL))
+	if (!get_lsa_policy_samr_sid(p, &q_u->domain_pol, &sid, &acc_granted, NULL)) 
 		return NT_STATUS_INVALID_HANDLE;
-
-	status = access_check_samr_function(acc_granted,
-					    SA_RIGHT_DOMAIN_OPEN_ACCOUNT,
-					    "_samr_OpenGroup");
-
+	
+	status = access_check_samr_function(acc_granted, 
+		SA_RIGHT_DOMAIN_OPEN_ACCOUNT, "_samr_open_group");
+		
 	if ( !NT_STATUS_IS_OK(status) )
 		return status;
-
+		
 	/*check if access can be granted as requested by client. */
 	make_samr_object_sd(p->mem_ctx, &psd, &sd_size, &grp_generic_mapping, NULL, 0);
 	se_map_generic(&des_access,&grp_generic_mapping);
 
 	se_priv_copy( &se_rights, &se_add_users );
 
-	status = access_check_samr_object(psd, p->pipe_user.nt_user_token,
-		&se_rights, GENERIC_RIGHTS_GROUP_WRITE, des_access,
-		&acc_granted, "_samr_OpenGroup");
-
-	if ( !NT_STATUS_IS_OK(status) )
+	status = access_check_samr_object(psd, p->pipe_user.nt_user_token, 
+		&se_rights, GENERIC_RIGHTS_GROUP_WRITE, des_access, 
+		&acc_granted, "_samr_open_group");
+		
+	if ( !NT_STATUS_IS_OK(status) ) 
 		return status;
 
 	/* this should not be hard-coded like this */
-
+	
 	if (!sid_equal(&sid, get_global_sam_sid()))
 		return NT_STATUS_ACCESS_DENIED;
 
 	sid_copy(&info_sid, get_global_sam_sid());
-	sid_append_rid(&info_sid, r->in.rid);
-	sid_to_fstring(sid_string, &info_sid);
+	sid_append_rid(&info_sid, q_u->rid_group);
+	sid_to_string(sid_string, &info_sid);
 
 	if ((info = get_samr_info_by_sid(&info_sid)) == NULL)
 		return NT_STATUS_NO_MEMORY;
-
+		
 	info->acc_granted = acc_granted;
 
-	DEBUG(10, ("_samr_OpenGroup:Opening SID: %s\n", sid_string));
+	DEBUG(10, ("_samr_open_group:Opening SID: %s\n", sid_string));
 
 	/* check if that group really exists */
 	become_root();
@@ -5510,46 +4920,46 @@
 		return NT_STATUS_NO_SUCH_GROUP;
 
 	/* get a (unique) handle.  open a policy on it. */
-	if (!create_policy_hnd(p, r->out.group_handle, free_samr_info, (void *)info))
+	if (!create_policy_hnd(p, &r_u->pol, free_samr_info, (void *)info))
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 
 	return NT_STATUS_OK;
 }
 
 /*********************************************************************
- _samr_RemoveMemberFromForeignDomain
+ _samr_remove_sid_foreign_domain
 *********************************************************************/
 
-NTSTATUS _samr_RemoveMemberFromForeignDomain(pipes_struct *p,
-					     struct samr_RemoveMemberFromForeignDomain *r)
+NTSTATUS _samr_remove_sid_foreign_domain(pipes_struct *p, 
+                                          SAMR_Q_REMOVE_SID_FOREIGN_DOMAIN *q_u, 
+                                          SAMR_R_REMOVE_SID_FOREIGN_DOMAIN *r_u)
 {
 	DOM_SID			delete_sid, domain_sid;
 	uint32 			acc_granted;
 	NTSTATUS		result;
 	DISP_INFO *disp_info = NULL;
 
-	sid_copy( &delete_sid, r->in.sid );
-
-	DEBUG(5,("_samr_RemoveMemberFromForeignDomain: removing SID [%s]\n",
-		sid_string_dbg(&delete_sid)));
-
+	sid_copy( &delete_sid, &q_u->sid.sid );
+	
+	DEBUG(5,("_samr_remove_sid_foreign_domain: removing SID [%s]\n",
+		sid_string_static(&delete_sid)));
+		
 	/* Find the policy handle. Open a policy on it. */
-
-	if (!get_lsa_policy_samr_sid(p, r->in.domain_handle, &domain_sid,
-				     &acc_granted, &disp_info))
+	
+	if (!get_lsa_policy_samr_sid(p, &q_u->dom_pol, &domain_sid,
+				     &acc_granted, &disp_info)) 
 		return NT_STATUS_INVALID_HANDLE;
-
-	result = access_check_samr_function(acc_granted,
-					    STD_RIGHT_DELETE_ACCESS,
-					    "_samr_RemoveMemberFromForeignDomain");
-
-	if (!NT_STATUS_IS_OK(result))
+	
+	result = access_check_samr_function(acc_granted, STD_RIGHT_DELETE_ACCESS, 
+		"_samr_remove_sid_foreign_domain");
+		
+	if (!NT_STATUS_IS_OK(result)) 
 		return result;
+			
+	DEBUG(8, ("_samr_remove_sid_foreign_domain:sid is %s\n", 
+		sid_string_static(&domain_sid)));
 
-	DEBUG(8, ("_samr_RemoveMemberFromForeignDomain: sid is %s\n",
-		  sid_string_dbg(&domain_sid)));
-
-	/* we can only delete a user from a group since we don't have
+	/* we can only delete a user from a group since we don't have 
 	   nested groups anyways.  So in the latter case, just say OK */
 
 	/* TODO: The above comment nowadays is bogus. Since we have nested
@@ -5564,10 +4974,10 @@
 	 * other cases. */
 
 	if (!sid_check_is_builtin(&domain_sid)) {
-		DEBUG(1,("_samr_RemoveMemberFromForeignDomain: domain_sid = %s, "
+		DEBUG(1,("_samr_remove_sid_foreign_domain: domain_sid = %s, "
 			 "global_sam_sid() = %s\n",
-			 sid_string_dbg(&domain_sid),
-			 sid_string_dbg(get_global_sam_sid())));
+			 sid_string_static(&domain_sid),
+			 sid_string_static(get_global_sam_sid())));
 		DEBUGADD(1,("please report to samba-technical at samba.org!\n"));
 		return NT_STATUS_OK;
 	}
@@ -5580,52 +4990,68 @@
 }
 
 /*******************************************************************
- _samr_QueryDomainInfo2
+ _samr_query_domain_info2
  ********************************************************************/
 
-NTSTATUS _samr_QueryDomainInfo2(pipes_struct *p,
-				struct samr_QueryDomainInfo2 *r)
+NTSTATUS _samr_query_domain_info2(pipes_struct *p,
+				  SAMR_Q_QUERY_DOMAIN_INFO2 *q_u,
+				  SAMR_R_QUERY_DOMAIN_INFO2 *r_u)
 {
-	return samr_QueryDomainInfo_internal("_samr_QueryDomainInfo2",
-					     p,
-					     r->in.domain_handle,
-					     r->in.level,
-					     r->out.info);
+	SAMR_Q_QUERY_DOMAIN_INFO q;
+	SAMR_R_QUERY_DOMAIN_INFO r;
+
+	ZERO_STRUCT(q);
+	ZERO_STRUCT(r);
+
+	DEBUG(5,("_samr_query_domain_info2: %d\n", __LINE__));
+
+	q.domain_pol = q_u->domain_pol;
+	q.switch_value = q_u->switch_value;
+
+	r_u->status = _samr_query_domain_info(p, &q, &r);
+
+	r_u->ptr_0 		= r.ptr_0;
+	r_u->switch_value	= r.switch_value;
+	r_u->ctr		= r.ctr;
+
+	return r_u->status;
 }
 
 /*******************************************************************
- _samr_SetDomainInfo
+ _samr_set_dom_info
  ********************************************************************/
 
-NTSTATUS _samr_SetDomainInfo(pipes_struct *p,
-			     struct samr_SetDomainInfo *r)
+NTSTATUS _samr_set_dom_info(pipes_struct *p, SAMR_Q_SET_DOMAIN_INFO *q_u, SAMR_R_SET_DOMAIN_INFO *r_u)
 {
 	time_t u_expire, u_min_age;
 	time_t u_logout;
 	time_t u_lock_duration, u_reset_time;
 
-	DEBUG(5,("_samr_SetDomainInfo: %d\n", __LINE__));
+	r_u->status = NT_STATUS_OK;
 
+	DEBUG(5,("_samr_set_dom_info: %d\n", __LINE__));
+
 	/* find the policy handle.  open a policy on it. */
-	if (!find_policy_by_hnd(p, r->in.domain_handle, NULL))
+	if (!find_policy_by_hnd(p, &q_u->domain_pol, NULL))
 		return NT_STATUS_INVALID_HANDLE;
 
-	DEBUG(5,("_samr_SetDomainInfo: level: %d\n", r->in.level));
+	DEBUG(5,("_samr_set_dom_info: switch_value: %d\n", q_u->switch_value));
 
-	switch (r->in.level) {
+	switch (q_u->switch_value) {
         	case 0x01:
-			u_expire=nt_time_to_unix_abs((NTTIME *)&r->in.info->info1.max_password_age);
-			u_min_age=nt_time_to_unix_abs((NTTIME *)&r->in.info->info1.min_password_age);
-			pdb_set_account_policy(AP_MIN_PASSWORD_LEN, (uint32)r->in.info->info1.min_password_length);
-			pdb_set_account_policy(AP_PASSWORD_HISTORY, (uint32)r->in.info->info1.password_history_length);
-			pdb_set_account_policy(AP_USER_MUST_LOGON_TO_CHG_PASS, (uint32)r->in.info->info1.password_properties);
+			u_expire=nt_time_to_unix_abs(&q_u->ctr->info.inf1.expire);
+			u_min_age=nt_time_to_unix_abs(&q_u->ctr->info.inf1.min_passwordage);
+			
+			pdb_set_account_policy(AP_MIN_PASSWORD_LEN, (uint32)q_u->ctr->info.inf1.min_length_password);
+			pdb_set_account_policy(AP_PASSWORD_HISTORY, (uint32)q_u->ctr->info.inf1.password_history);
+			pdb_set_account_policy(AP_USER_MUST_LOGON_TO_CHG_PASS, (uint32)q_u->ctr->info.inf1.password_properties);
 			pdb_set_account_policy(AP_MAX_PASSWORD_AGE, (int)u_expire);
 			pdb_set_account_policy(AP_MIN_PASSWORD_AGE, (int)u_min_age);
             		break;
         	case 0x02:
 			break;
 		case 0x03:
-			u_logout=nt_time_to_unix_abs((NTTIME *)&r->in.info->info3.force_logoff_time);
+			u_logout=nt_time_to_unix_abs(&q_u->ctr->info.inf3.logout);
 			pdb_set_account_policy(AP_TIME_TO_LOGOUT, (int)u_logout);
 			break;
 		case 0x05:
@@ -5635,78 +5061,83 @@
 		case 0x07:
 			break;
 		case 0x0c:
-			u_lock_duration=nt_time_to_unix_abs((NTTIME *)&r->in.info->info12.lockout_duration);
+			u_lock_duration=nt_time_to_unix_abs(&q_u->ctr->info.inf12.duration);
 			if (u_lock_duration != -1)
 				u_lock_duration /= 60;
 
-			u_reset_time=nt_time_to_unix_abs((NTTIME *)&r->in.info->info12.lockout_window)/60;
-
+			u_reset_time=nt_time_to_unix_abs(&q_u->ctr->info.inf12.reset_count)/60;
+			
 			pdb_set_account_policy(AP_LOCK_ACCOUNT_DURATION, (int)u_lock_duration);
 			pdb_set_account_policy(AP_RESET_COUNT_TIME, (int)u_reset_time);
-			pdb_set_account_policy(AP_BAD_ATTEMPT_LOCKOUT, (uint32)r->in.info->info12.lockout_threshold);
+			pdb_set_account_policy(AP_BAD_ATTEMPT_LOCKOUT, (uint32)q_u->ctr->info.inf12.bad_attempt_lockout);
 			break;
 		default:
 			return NT_STATUS_INVALID_INFO_CLASS;
 	}
 
-	DEBUG(5,("_samr_SetDomainInfo: %d\n", __LINE__));
+	init_samr_r_set_domain_info(r_u, NT_STATUS_OK);
 
-	return NT_STATUS_OK;
+	DEBUG(5,("_samr_set_dom_info: %d\n", __LINE__));
+
+	return r_u->status;
 }
 
-/****************************************************************
- _samr_GetDisplayEnumerationIndex
-****************************************************************/
+/*******************************************************************
+ _samr_get_dispenum_index
+ ********************************************************************/
 
-NTSTATUS _samr_GetDisplayEnumerationIndex(pipes_struct *p,
-					  struct samr_GetDisplayEnumerationIndex *r)
+NTSTATUS _samr_get_dispenum_index(pipes_struct *p, SAMR_Q_GET_DISPENUM_INDEX *q_u, SAMR_R_GET_DISPENUM_INDEX *r_u)
 {
 	struct samr_info *info = NULL;
-	uint32_t max_entries = (uint32_t) -1;
-	uint32_t enum_context = 0;
+	uint32 max_entries = (uint32) -1;
+	uint32 enum_context = 0;
 	int i;
-	uint32_t num_account = 0;
+	uint32 num_account = 0;
 	struct samr_displayentry *entries = NULL;
+	fstring account_name;
 
-	DEBUG(5,("_samr_GetDisplayEnumerationIndex: %d\n", __LINE__));
+	DEBUG(5, ("_samr_get_dispenum_index: %d\n", __LINE__));
 
+	r_u->status = NT_STATUS_UNSUCCESSFUL;
+
 	/* find the policy handle.  open a policy on it. */
-	if (!find_policy_by_hnd(p, r->in.domain_handle, (void **)(void *)&info)) {
+	if (!find_policy_by_hnd(p, &q_u->domain_pol, (void **)(void *)&info))
 		return NT_STATUS_INVALID_HANDLE;
-	}
 
-	if ((r->in.level < 1) || (r->in.level > 3)) {
-		DEBUG(0,("_samr_GetDisplayEnumerationIndex: "
-			"Unknown info level (%u)\n",
-			r->in.level));
+	if ((q_u->switch_level < 1) || (q_u->switch_level > 3)) {
+		DEBUG(0,("_samr_get_dispenum_index: Unknown info level (%u)\n",
+			 (unsigned int)q_u->switch_level ));
 		return NT_STATUS_INVALID_INFO_CLASS;
 	}
 
+	if (!rpcstr_pull_unistr2_fstring(account_name, &q_u->name.unistring)) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
 	become_root();
 
 	/* The following done as ROOT. Don't return without unbecome_root(). */
 
-	switch (r->in.level) {
-	case 1:
+	switch (q_u->switch_level) {
+	case 0x1:
 		if (info->disp_info->users == NULL) {
 			info->disp_info->users = pdb_search_users(ACB_NORMAL);
 			if (info->disp_info->users == NULL) {
 				unbecome_root();
 				return NT_STATUS_ACCESS_DENIED;
 			}
-			DEBUG(10,("_samr_GetDisplayEnumerationIndex: "
-				"starting user enumeration at index %u\n",
-				(unsigned int)enum_context));
+			DEBUG(10,("_samr_get_dispenum_index: starting user enumeration at index %u\n",
+				(unsigned  int)enum_context ));
 		} else {
-			DEBUG(10,("_samr_GetDisplayEnumerationIndex: "
-				"using cached user enumeration at index %u\n",
-				(unsigned int)enum_context));
+			DEBUG(10,("_samr_get_dispenum_index: using cached user enumeration at index %u\n",
+				(unsigned  int)enum_context ));
 		}
+
 		num_account = pdb_search_entries(info->disp_info->users,
 						 enum_context, max_entries,
 						 &entries);
 		break;
-	case 2:
+	case 0x2:
 		if (info->disp_info->machines == NULL) {
 			info->disp_info->machines =
 				pdb_search_users(ACB_WSTRUST|ACB_SVRTRUST);
@@ -5714,33 +5145,31 @@
 				unbecome_root();
 				return NT_STATUS_ACCESS_DENIED;
 			}
-			DEBUG(10,("_samr_GetDisplayEnumerationIndex: "
-				"starting machine enumeration at index %u\n",
-				(unsigned int)enum_context));
+			DEBUG(10,("_samr_get_dispenum_index: starting machine enumeration at index %u\n",
+				(unsigned  int)enum_context ));
 		} else {
-			DEBUG(10,("_samr_GetDisplayEnumerationIndex: "
-				"using cached machine enumeration at index %u\n",
-				(unsigned int)enum_context));
+			DEBUG(10,("_samr_get_dispenum_index: using cached machine enumeration at index %u\n",
+				(unsigned  int)enum_context ));
 		}
+
 		num_account = pdb_search_entries(info->disp_info->machines,
 						 enum_context, max_entries,
 						 &entries);
 		break;
-	case 3:
+	case 0x3:
 		if (info->disp_info->groups == NULL) {
 			info->disp_info->groups = pdb_search_groups();
 			if (info->disp_info->groups == NULL) {
 				unbecome_root();
 				return NT_STATUS_ACCESS_DENIED;
 			}
-			DEBUG(10,("_samr_GetDisplayEnumerationIndex: "
-				"starting group enumeration at index %u\n",
-				(unsigned int)enum_context));
+			DEBUG(10,("_samr_get_dispenum_index: starting group enumeration at index %u\n",
+				(unsigned  int)enum_context ));
 		} else {
-			DEBUG(10,("_samr_GetDisplayEnumerationIndex: "
-				"using cached group enumeration at index %u\n",
-				(unsigned int)enum_context));
+			DEBUG(10,("_samr_get_dispenum_index: using cached group enumeration at index %u\n",
+				(unsigned  int)enum_context ));
 		}
+
 		num_account = pdb_search_entries(info->disp_info->groups,
 						 enum_context, max_entries,
 						 &entries);
@@ -5750,205 +5179,26 @@
 		smb_panic("info class changed");
 		break;
 	}
-
 	unbecome_root();
 
 	/* Ensure we cache this enumeration. */
 	set_disp_info_cache_timeout(info->disp_info, DISP_INFO_CACHE_TIMEOUT);
 
-	DEBUG(10,("_samr_GetDisplayEnumerationIndex: looking for :%s\n",
-		r->in.name->string));
+	DEBUG(10,("_samr_get_dispenum_index: looking for :%s\n", account_name));
 
 	for (i=0; i<num_account; i++) {
-		if (strequal(entries[i].account_name, r->in.name->string)) {
-			DEBUG(10,("_samr_GetDisplayEnumerationIndex: "
-				"found %s at idx %d\n",
-				r->in.name->string, i));
-			*r->out.idx = i;
+		if (strequal(entries[i].account_name, account_name)) {
+			DEBUG(10,("_samr_get_dispenum_index: found %s at idx %d\n",
+				account_name, i));
+
+			init_samr_r_get_dispenum_index(r_u, i);
+
 			return NT_STATUS_OK;
 		}
 	}
 
 	/* assuming account_name lives at the very end */
-	*r->out.idx = num_account;
+	init_samr_r_get_dispenum_index(r_u, num_account);
 
-	return NT_STATUS_NO_MORE_ENTRIES;
+	return NT_STATUS_OK;
 }
-
-/****************************************************************
- _samr_GetDisplayEnumerationIndex2
-****************************************************************/
-
-NTSTATUS _samr_GetDisplayEnumerationIndex2(pipes_struct *p,
-					   struct samr_GetDisplayEnumerationIndex2 *r)
-{
-	struct samr_GetDisplayEnumerationIndex q;
-
-	q.in.domain_handle	= r->in.domain_handle;
-	q.in.level		= r->in.level;
-	q.in.name		= r->in.name;
-
-	q.out.idx		= r->out.idx;
-
-	return _samr_GetDisplayEnumerationIndex(p, &q);
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _samr_Shutdown(pipes_struct *p,
-			struct samr_Shutdown *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _samr_CreateUser(pipes_struct *p,
-			  struct samr_CreateUser *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _samr_SetMemberAttributesOfGroup(pipes_struct *p,
-					  struct samr_SetMemberAttributesOfGroup *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _samr_ChangePasswordUser(pipes_struct *p,
-				  struct samr_ChangePasswordUser *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _samr_TestPrivateFunctionsDomain(pipes_struct *p,
-					  struct samr_TestPrivateFunctionsDomain *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _samr_TestPrivateFunctionsUser(pipes_struct *p,
-					struct samr_TestPrivateFunctionsUser *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _samr_QueryUserInfo2(pipes_struct *p,
-			      struct samr_QueryUserInfo2 *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _samr_AddMultipleMembersToAlias(pipes_struct *p,
-					 struct samr_AddMultipleMembersToAlias *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _samr_RemoveMultipleMembersFromAlias(pipes_struct *p,
-					      struct samr_RemoveMultipleMembersFromAlias *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _samr_OemChangePasswordUser2(pipes_struct *p,
-				      struct samr_OemChangePasswordUser2 *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _samr_SetBootKeyInformation(pipes_struct *p,
-				     struct samr_SetBootKeyInformation *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _samr_GetBootKeyInformation(pipes_struct *p,
-				     struct samr_GetBootKeyInformation *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _samr_Connect3(pipes_struct *p,
-			struct samr_Connect3 *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _samr_RidToSid(pipes_struct *p,
-			struct samr_RidToSid *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _samr_SetDsrmPassword(pipes_struct *p,
-			       struct samr_SetDsrmPassword *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
-NTSTATUS _samr_ValidatePassword(pipes_struct *p,
-				struct samr_ValidatePassword *r)
-{
-	p->rng_fault_state = true;
-	return NT_STATUS_NOT_IMPLEMENTED;
-}

Modified: branches/samba/upstream/source/rpc_server/srv_samr_util.c
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_samr_util.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_server/srv_samr_util.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,25 +1,25 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    SAMR Pipe utility functions.
-
+   
    Copyright (C) Luke Kenneth Casson Leighton 	1996-1998
    Copyright (C) Gerald (Jerry) Carter		2000-2001
    Copyright (C) Andrew Bartlett		2001-2002
    Copyright (C) Stefan (metze) Metzmacher	2002
-   Copyright (C) Guenther Deschner		2008
-
+      
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -36,347 +36,681 @@
 		((s1) && (s2) && (strcmp((s1), (s2)) != 0))
 
 /*************************************************************
- Copies a struct samr_UserInfo20 to a struct samu
+ Copies a SAM_USER_INFO_20 to a struct samu
 **************************************************************/
 
-void copy_id20_to_sam_passwd(struct samu *to,
-			     struct samr_UserInfo20 *from)
+void copy_id20_to_sam_passwd(struct samu *to, SAM_USER_INFO_20 *from)
 {
 	const char *old_string;
 	char *new_string;
 	DATA_BLOB mung;
 
-	if (from == NULL || to == NULL) {
+	if (from == NULL || to == NULL) 
 		return;
-	}
-
-	if (from->parameters.array) {
+	
+	if (from->hdr_munged_dial.buffer) {
 		old_string = pdb_get_munged_dial(to);
-		mung = data_blob_const(from->parameters.array,
-				       from->parameters.length);
+		mung.length = from->hdr_munged_dial.uni_str_len;
+		mung.data = (uint8 *) from->uni_munged_dial.buffer;
+		mung.free = NULL;
 		new_string = (mung.length == 0) ?
-			NULL : base64_encode_data_blob(talloc_tos(), mung);
-		DEBUG(10,("INFO_20 PARAMETERS: %s -> %s\n",
-			old_string, new_string));
-		if (STRING_CHANGED_NC(old_string,new_string)) {
-			pdb_set_munged_dial(to, new_string, PDB_CHANGED);
-		}
+			NULL : base64_encode_data_blob(mung);
+		DEBUG(10,("INFO_20 UNI_MUNGED_DIAL: %s -> %s\n",old_string, new_string));
+		if (STRING_CHANGED_NC(old_string,new_string))
+			pdb_set_munged_dial(to   , new_string, PDB_CHANGED);
 
-		TALLOC_FREE(new_string);
+		SAFE_FREE(new_string);
 	}
 }
 
 /*************************************************************
- Copies a struct samr_UserInfo21 to a struct samu
+ Copies a SAM_USER_INFO_21 to a struct samu
 **************************************************************/
 
-void copy_id21_to_sam_passwd(const char *log_prefix,
-			     struct samu *to,
-			     struct samr_UserInfo21 *from)
+void copy_id21_to_sam_passwd(struct samu *to, SAM_USER_INFO_21 *from)
 {
 	time_t unix_time, stored_time;
 	const char *old_string, *new_string;
-	const char *l;
+	DATA_BLOB mung;
 
-	if (from == NULL || to == NULL) {
+	if (from == NULL || to == NULL) 
 		return;
-	}
 
-	if (log_prefix) {
-		l = log_prefix;
-	} else {
-		l = "INFO_21";
-	}
-
-	if (from->fields_present & SAMR_FIELD_LAST_LOGON) {
-		unix_time = nt_time_to_unix(from->last_logon);
+	if (from->fields_present & ACCT_LAST_LOGON) {
+		unix_time=nt_time_to_unix(from->logon_time);
 		stored_time = pdb_get_logon_time(to);
-		DEBUG(10,("%s SAMR_FIELD_LAST_LOGON: %lu -> %lu\n", l,
-			(long unsigned int)stored_time,
-			(long unsigned int)unix_time));
-		if (stored_time != unix_time) {
+		DEBUG(10,("INFO_21 LOGON_TIME: %lu -> %lu\n",(long unsigned int)stored_time, (long unsigned int)unix_time));
+		if (stored_time != unix_time) 
 			pdb_set_logon_time(to, unix_time, PDB_CHANGED);
-		}
 	}
 
-	if (from->fields_present & SAMR_FIELD_LAST_LOGOFF) {
-		unix_time = nt_time_to_unix(from->last_logoff);
+	if (from->fields_present & ACCT_LAST_LOGOFF) {
+		unix_time=nt_time_to_unix(from->logoff_time);
 		stored_time = pdb_get_logoff_time(to);
-		DEBUG(10,("%s SAMR_FIELD_LAST_LOGOFF: %lu -> %lu\n", l,
-			(long unsigned int)stored_time,
-			(long unsigned int)unix_time));
-		if (stored_time != unix_time) {
+		DEBUG(10,("INFO_21 LOGOFF_TIME: %lu -> %lu\n",(long unsigned int)stored_time, (long unsigned int)unix_time));
+		if (stored_time != unix_time) 
 			pdb_set_logoff_time(to, unix_time, PDB_CHANGED);
-		}
 	}
 
-	if (from->fields_present & SAMR_FIELD_ACCT_EXPIRY) {
-		unix_time = nt_time_to_unix(from->acct_expiry);
+	if (from->fields_present & ACCT_EXPIRY) {
+		unix_time=nt_time_to_unix(from->kickoff_time);
 		stored_time = pdb_get_kickoff_time(to);
-		DEBUG(10,("%s SAMR_FIELD_ACCT_EXPIRY: %lu -> %lu\n", l,
-			(long unsigned int)stored_time,
-			(long unsigned int)unix_time));
-		if (stored_time != unix_time) {
+		DEBUG(10,("INFO_21 KICKOFF_TIME: %lu -> %lu\n",(long unsigned int)stored_time, (long unsigned int)unix_time));
+		if (stored_time != unix_time) 
 			pdb_set_kickoff_time(to, unix_time , PDB_CHANGED);
-		}
-	}
+	}	
 
-	if (from->fields_present & SAMR_FIELD_LAST_PWD_CHANGE) {
-		unix_time = nt_time_to_unix(from->last_password_change);
+	if (from->fields_present & ACCT_LAST_PWD_CHANGE) {
+		unix_time=nt_time_to_unix(from->pass_last_set_time);
 		stored_time = pdb_get_pass_last_set_time(to);
-		DEBUG(10,("%s SAMR_FIELD_LAST_PWD_CHANGE: %lu -> %lu\n", l,
-			(long unsigned int)stored_time,
-			(long unsigned int)unix_time));
-		if (stored_time != unix_time) {
+		DEBUG(10,("INFO_21 PASS_LAST_SET: %lu -> %lu\n",(long unsigned int)stored_time, (long unsigned int)unix_time));
+		if (stored_time != unix_time) 
 			pdb_set_pass_last_set_time(to, unix_time, PDB_CHANGED);
-		}
 	}
 
-	if ((from->fields_present & SAMR_FIELD_ACCOUNT_NAME) &&
-	    (from->account_name.string)) {
+	if ((from->fields_present & ACCT_USERNAME) &&
+	    (from->hdr_user_name.buffer)) {
 		old_string = pdb_get_username(to);
-		new_string = from->account_name.string;
-		DEBUG(10,("%s SAMR_FIELD_ACCOUNT_NAME: %s -> %s\n", l,
-			old_string, new_string));
-		if (STRING_CHANGED) {
-			pdb_set_username(to, new_string, PDB_CHANGED);
-		}
+		new_string = unistr2_static(&from->uni_user_name);
+		DEBUG(10,("INFO_21 UNI_USER_NAME: %s -> %s\n", old_string, new_string));
+		if (STRING_CHANGED)
+		    pdb_set_username(to      , new_string, PDB_CHANGED);
 	}
 
-	if ((from->fields_present & SAMR_FIELD_FULL_NAME) &&
-	    (from->full_name.string)) {
+	if ((from->fields_present & ACCT_FULL_NAME) &&
+	    (from->hdr_full_name.buffer)) {
 		old_string = pdb_get_fullname(to);
-		new_string = from->full_name.string;
-		DEBUG(10,("%s SAMR_FIELD_FULL_NAME: %s -> %s\n", l,
-			old_string, new_string));
-		if (STRING_CHANGED) {
-			pdb_set_fullname(to, new_string, PDB_CHANGED);
-		}
+		new_string = unistr2_static(&from->uni_full_name);
+		DEBUG(10,("INFO_21 UNI_FULL_NAME: %s -> %s\n",old_string, new_string));
+		if (STRING_CHANGED)
+			pdb_set_fullname(to      , new_string, PDB_CHANGED);
 	}
-
-	if ((from->fields_present & SAMR_FIELD_HOME_DIRECTORY) &&
-	    (from->home_directory.string)) {
+	
+	if ((from->fields_present & ACCT_HOME_DIR) &&
+	    (from->hdr_home_dir.buffer)) {
 		old_string = pdb_get_homedir(to);
-		new_string = from->home_directory.string;
-		DEBUG(10,("%s SAMR_FIELD_HOME_DIRECTORY: %s -> %s\n", l,
-			old_string, new_string));
-		if (STRING_CHANGED) {
-			pdb_set_homedir(to, new_string, PDB_CHANGED);
-		}
+		new_string = unistr2_static(&from->uni_home_dir);
+		DEBUG(10,("INFO_21 UNI_HOME_DIR: %s -> %s\n",old_string,new_string));
+		if (STRING_CHANGED)
+			pdb_set_homedir(to       , new_string, PDB_CHANGED);
 	}
 
-	if ((from->fields_present & SAMR_FIELD_HOME_DRIVE) &&
-	    (from->home_drive.string)) {
+	if ((from->fields_present & ACCT_HOME_DRIVE) &&
+	    (from->hdr_dir_drive.buffer)) {
 		old_string = pdb_get_dir_drive(to);
-		new_string = from->home_drive.string;
-		DEBUG(10,("%s SAMR_FIELD_HOME_DRIVE: %s -> %s\n", l,
-			old_string, new_string));
-		if (STRING_CHANGED) {
-			pdb_set_dir_drive(to, new_string, PDB_CHANGED);
-		}
+		new_string = unistr2_static(&from->uni_dir_drive);
+		DEBUG(10,("INFO_21 UNI_DIR_DRIVE: %s -> %s\n",old_string,new_string));
+		if (STRING_CHANGED)
+			pdb_set_dir_drive(to     , new_string, PDB_CHANGED);
 	}
 
-	if ((from->fields_present & SAMR_FIELD_LOGON_SCRIPT) &&
-	    (from->logon_script.string)) {
+	if ((from->fields_present & ACCT_LOGON_SCRIPT) &&
+	    (from->hdr_logon_script.buffer)) {
 		old_string = pdb_get_logon_script(to);
-		new_string = from->logon_script.string;
-		DEBUG(10,("%s SAMR_FIELD_LOGON_SCRIPT: %s -> %s\n", l,
-			old_string, new_string));
-		if (STRING_CHANGED) {
+		new_string = unistr2_static(&from->uni_logon_script);
+		DEBUG(10,("INFO_21 UNI_LOGON_SCRIPT: %s -> %s\n",old_string,new_string));
+		if (STRING_CHANGED)
 			pdb_set_logon_script(to  , new_string, PDB_CHANGED);
-		}
 	}
 
-	if ((from->fields_present & SAMR_FIELD_PROFILE_PATH) &&
-	    (from->profile_path.string)) {
+	if ((from->fields_present & ACCT_PROFILE) &&
+	    (from->hdr_profile_path.buffer)) {
 		old_string = pdb_get_profile_path(to);
-		new_string = from->profile_path.string;
-		DEBUG(10,("%s SAMR_FIELD_PROFILE_PATH: %s -> %s\n", l,
-			old_string, new_string));
-		if (STRING_CHANGED) {
+		new_string = unistr2_static(&from->uni_profile_path);
+		DEBUG(10,("INFO_21 UNI_PROFILE_PATH: %s -> %s\n",old_string, new_string));
+		if (STRING_CHANGED)
 			pdb_set_profile_path(to  , new_string, PDB_CHANGED);
-		}
 	}
-
-	if ((from->fields_present & SAMR_FIELD_DESCRIPTION) &&
-	    (from->description.string)) {
+	
+	if ((from->fields_present & ACCT_DESCRIPTION) &&
+	    (from->hdr_acct_desc.buffer)) {
 		old_string = pdb_get_acct_desc(to);
-		new_string = from->description.string;
-		DEBUG(10,("%s SAMR_FIELD_DESCRIPTION: %s -> %s\n", l,
-			old_string, new_string));
-		if (STRING_CHANGED) {
-			pdb_set_acct_desc(to, new_string, PDB_CHANGED);
-		}
+		new_string = unistr2_static(&from->uni_acct_desc);
+		DEBUG(10,("INFO_21 UNI_ACCT_DESC: %s -> %s\n",old_string,new_string));
+		if (STRING_CHANGED)
+			pdb_set_acct_desc(to     , new_string, PDB_CHANGED);
 	}
-
-	if ((from->fields_present & SAMR_FIELD_WORKSTATIONS) &&
-	    (from->workstations.string)) {
+	
+	if ((from->fields_present & ACCT_WORKSTATIONS) &&
+	    (from->hdr_workstations.buffer)) {
 		old_string = pdb_get_workstations(to);
-		new_string = from->workstations.string;
-		DEBUG(10,("%s SAMR_FIELD_WORKSTATIONS: %s -> %s\n", l,
-			old_string, new_string));
-		if (STRING_CHANGED) {
+		new_string = unistr2_static(&from->uni_workstations);
+		DEBUG(10,("INFO_21 UNI_WORKSTATIONS: %s -> %s\n",old_string, new_string));
+		if (STRING_CHANGED)
 			pdb_set_workstations(to  , new_string, PDB_CHANGED);
-		}
 	}
 
-	if ((from->fields_present & SAMR_FIELD_COMMENT) &&
-	    (from->comment.string)) {
+	if ((from->fields_present & ACCT_COMMENT) &&
+	    (from->hdr_comment.buffer)) {
 		old_string = pdb_get_comment(to);
-		new_string = from->comment.string;
-		DEBUG(10,("%s SAMR_FIELD_COMMENT: %s -> %s\n", l,
-			old_string, new_string));
-		if (STRING_CHANGED) {
+		new_string = unistr2_static(&from->uni_comment);
+		DEBUG(10,("INFO_21 UNI_COMMENT: %s -> %s\n",old_string, new_string));
+		if (STRING_CHANGED)
 			pdb_set_comment(to, new_string, PDB_CHANGED);
-		}
 	}
-
-	if ((from->fields_present & SAMR_FIELD_PARAMETERS) &&
-	    (from->parameters.array)) {
+	
+	if ((from->fields_present & ACCT_CALLBACK) &&
+	    (from->hdr_munged_dial.buffer)) {
 		char *newstr;
-		DATA_BLOB mung;
 		old_string = pdb_get_munged_dial(to);
-
-		mung = data_blob_const(from->parameters.array,
-				       from->parameters.length);
+		mung.length = from->hdr_munged_dial.uni_str_len;
+		mung.data = (uint8 *) from->uni_munged_dial.buffer;
+		mung.free = NULL;
 		newstr = (mung.length == 0) ?
-			NULL : base64_encode_data_blob(talloc_tos(), mung);
-		DEBUG(10,("%s SAMR_FIELD_PARAMETERS: %s -> %s\n", l,
-			old_string, newstr));
-		if (STRING_CHANGED_NC(old_string,newstr)) {
-			pdb_set_munged_dial(to, newstr, PDB_CHANGED);
-		}
+			NULL : base64_encode_data_blob(mung);
+		DEBUG(10,("INFO_21 UNI_MUNGED_DIAL: %s -> %s\n",old_string, newstr));
+		if (STRING_CHANGED_NC(old_string,newstr))
+			pdb_set_munged_dial(to   , newstr, PDB_CHANGED);
 
-		TALLOC_FREE(newstr);
+		SAFE_FREE(newstr);
 	}
-
-	if (from->fields_present & SAMR_FIELD_RID) {
-		if (from->rid == 0) {
-			DEBUG(10,("%s: Asked to set User RID to 0 !? Skipping change!\n", l));
-		} else if (from->rid != pdb_get_user_rid(to)) {
-			DEBUG(10,("%s SAMR_FIELD_RID: %u -> %u NOT UPDATED!\n", l,
-				pdb_get_user_rid(to), from->rid));
+	
+	if (from->fields_present & ACCT_RID) {
+		if (from->user_rid == 0) {
+			DEBUG(10, ("INFO_21: Asked to set User RID to 0 !? Skipping change!\n"));
+		} else if (from->user_rid != pdb_get_user_rid(to)) {
+			DEBUG(10,("INFO_21 USER_RID: %u -> %u NOT UPDATED!\n",pdb_get_user_rid(to),from->user_rid));
 		}
 	}
-
-	if (from->fields_present & SAMR_FIELD_PRIMARY_GID) {
-		if (from->primary_gid == 0) {
-			DEBUG(10,("%s: Asked to set Group RID to 0 !? Skipping change!\n", l));
-		} else if (from->primary_gid != pdb_get_group_rid(to)) {
-			DEBUG(10,("%s SAMR_FIELD_PRIMARY_GID: %u -> %u\n", l,
-				pdb_get_group_rid(to), from->primary_gid));
-			pdb_set_group_sid_from_rid(to,
-				from->primary_gid, PDB_CHANGED);
+	
+	if (from->fields_present & ACCT_PRIMARY_GID) {
+		if (from->group_rid == 0) {
+			DEBUG(10, ("INFO_21: Asked to set Group RID to 0 !? Skipping change!\n"));
+		} else if (from->group_rid != pdb_get_group_rid(to)) {
+			DEBUG(10,("INFO_21 GROUP_RID: %u -> %u\n",pdb_get_group_rid(to),from->group_rid));
+			pdb_set_group_sid_from_rid(to, from->group_rid, PDB_CHANGED);
 		}
 	}
-
-	if (from->fields_present & SAMR_FIELD_ACCT_FLAGS) {
-		DEBUG(10,("%s SAMR_FIELD_ACCT_FLAGS: %08X -> %08X\n", l,
-			pdb_get_acct_ctrl(to), from->acct_flags));
-		if (from->acct_flags != pdb_get_acct_ctrl(to)) {
-			if (!(from->acct_flags & ACB_AUTOLOCK) &&
-			     (pdb_get_acct_ctrl(to) & ACB_AUTOLOCK)) {
+	
+	if (from->fields_present & ACCT_FLAGS) {
+		DEBUG(10,("INFO_21 ACCT_CTRL: %08X -> %08X\n",pdb_get_acct_ctrl(to),from->acb_info));
+		if (from->acb_info != pdb_get_acct_ctrl(to)) {
+			if (!(from->acb_info & ACB_AUTOLOCK) && (pdb_get_acct_ctrl(to) & ACB_AUTOLOCK)) {
 				/* We're unlocking a previously locked user. Reset bad password counts.
 				   Patch from Jianliang Lu. <Jianliang.Lu at getronics.com> */
 				pdb_set_bad_password_count(to, 0, PDB_CHANGED);
 				pdb_set_bad_password_time(to, 0, PDB_CHANGED);
 			}
-			pdb_set_acct_ctrl(to, from->acct_flags, PDB_CHANGED);
+			pdb_set_acct_ctrl(to, from->acb_info, PDB_CHANGED);
 		}
 	}
 
-	if (from->fields_present & SAMR_FIELD_LOGON_HOURS) {
-		char oldstr[44]; /* hours strings are 42 bytes. */
-		char newstr[44];
-		DEBUG(15,("%s SAMR_FIELD_LOGON_HOURS (units_per_week): %08X -> %08X\n", l,
-			pdb_get_logon_divs(to), from->logon_hours.units_per_week));
-		if (from->logon_hours.units_per_week != pdb_get_logon_divs(to)) {
-			pdb_set_logon_divs(to,
-				from->logon_hours.units_per_week, PDB_CHANGED);
+	if (from->fields_present & ACCT_LOGON_HOURS) {
+		pstring oldstr, newstr;
+		DEBUG(15,("INFO_21 LOGON_DIVS: %08X -> %08X\n",pdb_get_logon_divs(to),from->logon_divs));
+		if (from->logon_divs != pdb_get_logon_divs(to)) {
+			pdb_set_logon_divs(to, from->logon_divs, PDB_CHANGED);
 		}
 
-		DEBUG(15,("%s SAMR_FIELD_LOGON_HOURS (units_per_week/8): %08X -> %08X\n", l,
-			pdb_get_hours_len(to),
-			from->logon_hours.units_per_week/8));
-		if (from->logon_hours.units_per_week/8 != pdb_get_hours_len(to)) {
-			pdb_set_hours_len(to,
-				from->logon_hours.units_per_week/8, PDB_CHANGED);
+		DEBUG(15,("INFO_21 LOGON_HRS.LEN: %08X -> %08X\n",pdb_get_hours_len(to),from->logon_hrs.len));
+		if (from->logon_hrs.len != pdb_get_hours_len(to)) {
+			pdb_set_hours_len(to, from->logon_hrs.len, PDB_CHANGED);
 		}
 
-		DEBUG(15,("%s SAMR_FIELD_LOGON_HOURS (bits): %s -> %s\n", l,
-			pdb_get_hours(to), from->logon_hours.bits));
+		DEBUG(15,("INFO_21 LOGON_HRS.HOURS: %s -> %s\n",pdb_get_hours(to),from->logon_hrs.hours));
 		pdb_sethexhours(oldstr, pdb_get_hours(to));
-		pdb_sethexhours(newstr, from->logon_hours.bits);
+		pdb_sethexhours(newstr, from->logon_hrs.hours);
 		if (!strequal(oldstr, newstr)) {
-			pdb_set_hours(to, from->logon_hours.bits, PDB_CHANGED);
+			pdb_set_hours(to, from->logon_hrs.hours, PDB_CHANGED);
 		}
 	}
 
-	if (from->fields_present & SAMR_FIELD_BAD_PWD_COUNT) {
-		DEBUG(10,("%s SAMR_FIELD_BAD_PWD_COUNT: %08X -> %08X\n", l,
-			pdb_get_bad_password_count(to), from->bad_password_count));
+	if (from->fields_present & ACCT_BAD_PWD_COUNT) {
+		DEBUG(10,("INFO_21 BAD_PASSWORD_COUNT: %08X -> %08X\n",pdb_get_bad_password_count(to),from->bad_password_count));
 		if (from->bad_password_count != pdb_get_bad_password_count(to)) {
-			pdb_set_bad_password_count(to,
-				from->bad_password_count, PDB_CHANGED);
+			pdb_set_bad_password_count(to, from->bad_password_count, PDB_CHANGED);
 		}
 	}
 
-	if (from->fields_present & SAMR_FIELD_NUM_LOGONS) {
-		DEBUG(10,("%s SAMR_FIELD_NUM_LOGONS: %08X -> %08X\n", l,
-			pdb_get_logon_count(to), from->logon_count));
+	if (from->fields_present & ACCT_NUM_LOGONS) {
+		DEBUG(10,("INFO_21 LOGON_COUNT: %08X -> %08X\n",pdb_get_logon_count(to),from->logon_count));
 		if (from->logon_count != pdb_get_logon_count(to)) {
 			pdb_set_logon_count(to, from->logon_count, PDB_CHANGED);
 		}
 	}
 
 	/* If the must change flag is set, the last set time goes to zero.
-	   the must change and can change fields also do, but they are
+	   the must change and can change fields also do, but they are 
 	   calculated from policy, not set from the wire */
 
-	if (from->fields_present & SAMR_FIELD_EXPIRED_FLAG) {
-		DEBUG(10,("%s SAMR_FIELD_EXPIRED_FLAG: %02X\n", l,
-			from->password_expired));
-		if (from->password_expired == PASS_MUST_CHANGE_AT_NEXT_LOGON) {
-			pdb_set_pass_last_set_time(to, 0, PDB_CHANGED);
+	if (from->fields_present & ACCT_EXPIRED_FLAG) {
+		DEBUG(10,("INFO_21 PASS_MUST_CHANGE_AT_NEXT_LOGON: %02X\n",from->passmustchange));
+		if (from->passmustchange == PASS_MUST_CHANGE_AT_NEXT_LOGON) {
+			pdb_set_pass_last_set_time(to, 0, PDB_CHANGED);		
 		} else {
-			/* A subtlety here: some windows commands will
-			   clear the expired flag even though it's not
-			   set, and we don't want to reset the time
-			   in these caess.  "net user /dom <user> /active:y"
-			   for example, to clear an autolocked acct.
-			   We must check to see if it's expired first. jmcd */
-			stored_time = pdb_get_pass_last_set_time(to);
-			if (stored_time == 0)
-				pdb_set_pass_last_set_time(to, time(NULL),PDB_CHANGED);
+			pdb_set_pass_last_set_time(to, time(NULL),PDB_CHANGED);
 		}
 	}
+
+	DEBUG(10,("INFO_21 PADDING_2: %02X\n",from->padding2));
 }
 
 
 /*************************************************************
- Copies a struct samr_UserInfo23 to a struct samu
+ Copies a SAM_USER_INFO_23 to a struct samu
 **************************************************************/
 
-void copy_id23_to_sam_passwd(struct samu *to,
-			     struct samr_UserInfo23 *from)
+void copy_id23_to_sam_passwd(struct samu *to, SAM_USER_INFO_23 *from)
 {
-	if (from == NULL || to == NULL) {
+	time_t unix_time, stored_time;
+	const char *old_string, *new_string;
+	DATA_BLOB mung;
+
+	if (from == NULL || to == NULL) 
 		return;
+
+	if (from->fields_present & ACCT_LAST_LOGON) {
+		unix_time=nt_time_to_unix(from->logon_time);
+		stored_time = pdb_get_logon_time(to);
+		DEBUG(10,("INFO_23 LOGON_TIME: %lu -> %lu\n",(long unsigned int)stored_time, (long unsigned int)unix_time));
+		if (stored_time != unix_time) 
+			pdb_set_logon_time(to, unix_time, PDB_CHANGED);
 	}
 
-	copy_id21_to_sam_passwd("INFO 23", to, &from->info);
+	if (from->fields_present & ACCT_LAST_LOGOFF) {
+		unix_time=nt_time_to_unix(from->logoff_time);
+		stored_time = pdb_get_logoff_time(to);
+		DEBUG(10,("INFO_23 LOGOFF_TIME: %lu -> %lu\n",(long unsigned int)stored_time, (long unsigned int)unix_time));
+		if (stored_time != unix_time) 
+			pdb_set_logoff_time(to, unix_time, PDB_CHANGED);
+	}
+	
+	if (from->fields_present & ACCT_EXPIRY) {
+		unix_time=nt_time_to_unix(from->kickoff_time);
+		stored_time = pdb_get_kickoff_time(to);
+		DEBUG(10,("INFO_23 KICKOFF_TIME: %lu -> %lu\n",(long unsigned int)stored_time, (long unsigned int)unix_time));
+		if (stored_time != unix_time) 
+			pdb_set_kickoff_time(to, unix_time , PDB_CHANGED);
+	}	
+
+	if (from->fields_present & ACCT_LAST_PWD_CHANGE) {
+		unix_time=nt_time_to_unix(from->pass_last_set_time);
+		stored_time = pdb_get_pass_last_set_time(to);
+		DEBUG(10,("INFO_23 PASS_LAST_SET: %lu -> %lu\n",(long unsigned int)stored_time, (long unsigned int)unix_time));
+		if (stored_time != unix_time) 
+			pdb_set_pass_last_set_time(to, unix_time, PDB_CHANGED);
+	}
+
+	/* Backend should check this for sanity */
+	if ((from->fields_present & ACCT_USERNAME) &&
+	    (from->hdr_user_name.buffer)) {
+		old_string = pdb_get_username(to);
+		new_string = unistr2_static(&from->uni_user_name);
+		DEBUG(10,("INFO_23 UNI_USER_NAME: %s -> %s\n", old_string, new_string));
+		if (STRING_CHANGED)
+		    pdb_set_username(to      , new_string, PDB_CHANGED);
+	}
+
+	if ((from->fields_present & ACCT_FULL_NAME) &&
+	    (from->hdr_full_name.buffer)) {
+		old_string = pdb_get_fullname(to);
+		new_string = unistr2_static(&from->uni_full_name);
+		DEBUG(10,("INFO_23 UNI_FULL_NAME: %s -> %s\n",old_string, new_string));
+		if (STRING_CHANGED)
+			pdb_set_fullname(to      , new_string, PDB_CHANGED);
+	}
+	
+	if ((from->fields_present & ACCT_HOME_DIR) &&
+	    (from->hdr_home_dir.buffer)) {
+		old_string = pdb_get_homedir(to);
+		new_string = unistr2_static(&from->uni_home_dir);
+		DEBUG(10,("INFO_23 UNI_HOME_DIR: %s -> %s\n",old_string,new_string));
+		if (STRING_CHANGED)
+			pdb_set_homedir(to       , new_string, PDB_CHANGED);
+	}
+
+	if ((from->fields_present & ACCT_HOME_DRIVE) &&
+	    (from->hdr_dir_drive.buffer)) {
+		old_string = pdb_get_dir_drive(to);
+		new_string = unistr2_static(&from->uni_dir_drive);
+		DEBUG(10,("INFO_23 UNI_DIR_DRIVE: %s -> %s\n",old_string,new_string));
+		if (STRING_CHANGED)
+			pdb_set_dir_drive(to     , new_string, PDB_CHANGED);
+	}
+
+	if ((from->fields_present & ACCT_LOGON_SCRIPT) &&
+	    (from->hdr_logon_script.buffer)) {
+		old_string = pdb_get_logon_script(to);
+		new_string = unistr2_static(&from->uni_logon_script);
+		DEBUG(10,("INFO_23 UNI_LOGON_SCRIPT: %s -> %s\n",old_string,new_string));
+		if (STRING_CHANGED)
+			pdb_set_logon_script(to  , new_string, PDB_CHANGED);
+	}
+
+	if ((from->fields_present & ACCT_PROFILE) &&
+	    (from->hdr_profile_path.buffer)) {
+		old_string = pdb_get_profile_path(to);
+		new_string = unistr2_static(&from->uni_profile_path);
+		DEBUG(10,("INFO_23 UNI_PROFILE_PATH: %s -> %s\n",old_string, new_string));
+		if (STRING_CHANGED)
+			pdb_set_profile_path(to  , new_string, PDB_CHANGED);
+	}
+	
+	if ((from->fields_present & ACCT_DESCRIPTION) &&
+	    (from->hdr_acct_desc.buffer)) {
+		old_string = pdb_get_acct_desc(to);
+		new_string = unistr2_static(&from->uni_acct_desc);
+		DEBUG(10,("INFO_23 UNI_ACCT_DESC: %s -> %s\n",old_string,new_string));
+		if (STRING_CHANGED)
+			pdb_set_acct_desc(to     , new_string, PDB_CHANGED);
+	}
+	
+	if ((from->fields_present & ACCT_WORKSTATIONS) &&
+	    (from->hdr_workstations.buffer)) {
+		old_string = pdb_get_workstations(to);
+		new_string = unistr2_static(&from->uni_workstations);
+		DEBUG(10,("INFO_23 UNI_WORKSTATIONS: %s -> %s\n",old_string, new_string));
+		if (STRING_CHANGED)
+			pdb_set_workstations(to  , new_string, PDB_CHANGED);
+	}
+
+	if ((from->fields_present & ACCT_COMMENT) &&
+	    (from->hdr_comment.buffer)) {
+		old_string = pdb_get_comment(to);
+		new_string = unistr2_static(&from->uni_comment);
+		DEBUG(10,("INFO_23 UNI_UNKNOWN_STR: %s -> %s\n",old_string, new_string));
+		if (STRING_CHANGED)
+			pdb_set_comment(to   , new_string, PDB_CHANGED);
+	}
+	
+	if ((from->fields_present & ACCT_CALLBACK) &&
+	    (from->hdr_munged_dial.buffer)) {
+		char *newstr;
+		old_string = pdb_get_munged_dial(to);
+		mung.length = from->hdr_munged_dial.uni_str_len;
+		mung.data = (uint8 *) from->uni_munged_dial.buffer;
+		mung.free = NULL;
+		newstr = (mung.length == 0) ?
+			NULL : base64_encode_data_blob(mung);
+		DEBUG(10,("INFO_23 UNI_MUNGED_DIAL: %s -> %s\n",old_string, newstr));
+		if (STRING_CHANGED_NC(old_string, newstr))
+			pdb_set_munged_dial(to   , newstr, PDB_CHANGED);
+
+		SAFE_FREE(newstr);
+	}
+	
+	if (from->fields_present & ACCT_RID) {
+		if (from->user_rid == 0) {
+			DEBUG(10, ("INFO_23: Asked to set User RID to 0 !? Skipping change!\n"));
+		} else if (from->user_rid != pdb_get_user_rid(to)) {
+			DEBUG(10,("INFO_23 USER_RID: %u -> %u NOT UPDATED!\n",pdb_get_user_rid(to),from->user_rid));
+		}
+	}
+
+	if (from->fields_present & ACCT_PRIMARY_GID) {
+		if  (from->group_rid == 0) {
+			DEBUG(10, ("INFO_23: Asked to set Group RID to 0 !? Skipping change!\n"));
+		} else if (from->group_rid != pdb_get_group_rid(to)) {
+			DEBUG(10,("INFO_23 GROUP_RID: %u -> %u\n",pdb_get_group_rid(to),from->group_rid));
+			pdb_set_group_sid_from_rid(to, from->group_rid, PDB_CHANGED);
+		}
+	}
+	
+	if (from->fields_present & ACCT_FLAGS) {
+		DEBUG(10,("INFO_23 ACCT_CTRL: %08X -> %08X\n",pdb_get_acct_ctrl(to),from->acb_info));
+		if (from->acb_info != pdb_get_acct_ctrl(to)) {
+			pdb_set_acct_ctrl(to, from->acb_info, PDB_CHANGED);
+		}
+	}
+
+	if (from->fields_present & ACCT_LOGON_HOURS) {
+		DEBUG(15,("INFO_23 LOGON_DIVS: %08X -> %08X\n",pdb_get_logon_divs(to),from->logon_divs));
+		if (from->logon_divs != pdb_get_logon_divs(to)) {
+			pdb_set_logon_divs(to, from->logon_divs, PDB_CHANGED);
+		}
+
+		DEBUG(15,("INFO_23 LOGON_HRS.LEN: %08X -> %08X\n",pdb_get_hours_len(to),from->logon_hrs.len));
+		if (from->logon_hrs.len != pdb_get_hours_len(to)) {
+			pdb_set_hours_len(to, from->logon_hrs.len, PDB_CHANGED);
+		}
+
+		DEBUG(15,("INFO_23 LOGON_HRS.HOURS: %s -> %s\n",pdb_get_hours(to),from->logon_hrs.hours));
+		/* Fix me: only update if it changes --metze */
+		pdb_set_hours(to, from->logon_hrs.hours, PDB_CHANGED);
+	}
+
+	if (from->fields_present & ACCT_BAD_PWD_COUNT) {
+		DEBUG(10,("INFO_23 BAD_PASSWORD_COUNT: %08X -> %08X\n",pdb_get_bad_password_count(to),from->bad_password_count));
+		if (from->bad_password_count != pdb_get_bad_password_count(to)) {
+			pdb_set_bad_password_count(to, from->bad_password_count, PDB_CHANGED);
+		}
+	}
+
+	if (from->fields_present & ACCT_NUM_LOGONS) {
+		DEBUG(10,("INFO_23 LOGON_COUNT: %08X -> %08X\n",pdb_get_logon_count(to),from->logon_count));
+		if (from->logon_count != pdb_get_logon_count(to)) {
+			pdb_set_logon_count(to, from->logon_count, PDB_CHANGED);
+		}
+	}
+
+	/* If the must change flag is set, the last set time goes to zero.
+	   the must change and can change fields also do, but they are 
+	   calculated from policy, not set from the wire */
+
+	if (from->fields_present & ACCT_EXPIRED_FLAG) {
+		DEBUG(10,("INFO_23 PASS_MUST_CHANGE_AT_NEXT_LOGON: %02X\n",from->passmustchange));
+		if (from->passmustchange == PASS_MUST_CHANGE_AT_NEXT_LOGON) {
+			pdb_set_pass_last_set_time(to, 0, PDB_CHANGED);		
+		} else {
+			pdb_set_pass_last_set_time(to, time(NULL),PDB_CHANGED);
+		}
+	}
+
+	DEBUG(10,("INFO_23 PADDING_2: %02X\n",from->padding2));
 }
 
 /*************************************************************
- Copies a struct samr_UserInfo25 to a struct samu
+ Copies a SAM_USER_INFO_25 to a struct samu
 **************************************************************/
 
-void copy_id25_to_sam_passwd(struct samu *to,
-			     struct samr_UserInfo25 *from)
+void copy_id25_to_sam_passwd(struct samu *to, SAM_USER_INFO_25 *from)
 {
-	if (from == NULL || to == NULL) {
+	time_t unix_time, stored_time;
+	const char *old_string, *new_string;
+	DATA_BLOB mung;
+
+	if (from == NULL || to == NULL) 
 		return;
+
+	if (from->fields_present & ACCT_LAST_LOGON) {
+		unix_time=nt_time_to_unix(from->logon_time);
+		stored_time = pdb_get_logon_time(to);
+		DEBUG(10,("INFO_25 LOGON_TIME: %lu -> %lu\n",(long unsigned int)stored_time, (long unsigned int)unix_time));
+		if (stored_time != unix_time) 
+			pdb_set_logon_time(to, unix_time, PDB_CHANGED);
 	}
 
-	copy_id21_to_sam_passwd("INFO_25", to, &from->info);
+	if (from->fields_present & ACCT_LAST_LOGOFF) {
+		unix_time=nt_time_to_unix(from->logoff_time);
+		stored_time = pdb_get_logoff_time(to);
+		DEBUG(10,("INFO_25 LOGOFF_TIME: %lu -> %lu\n",(long unsigned int)stored_time, (long unsigned int)unix_time));
+		if (stored_time != unix_time) 
+			pdb_set_logoff_time(to, unix_time, PDB_CHANGED);
+	}
+
+	if (from->fields_present & ACCT_EXPIRY) {
+		unix_time=nt_time_to_unix(from->kickoff_time);
+		stored_time = pdb_get_kickoff_time(to);
+		DEBUG(10,("INFO_25 KICKOFF_TIME: %lu -> %lu\n",(long unsigned int)stored_time, (long unsigned int)unix_time));
+		if (stored_time != unix_time) 
+			pdb_set_kickoff_time(to, unix_time , PDB_CHANGED);
+	}	
+
+	if (from->fields_present & ACCT_LAST_PWD_CHANGE) {
+		unix_time=nt_time_to_unix(from->pass_last_set_time);
+		stored_time = pdb_get_pass_last_set_time(to);
+		DEBUG(10,("INFO_25 PASS_LAST_SET: %lu -> %lu\n",(long unsigned int)stored_time, (long unsigned int)unix_time));
+		if (stored_time != unix_time) 
+			pdb_set_pass_last_set_time(to, unix_time, PDB_CHANGED);
+	}
+
+	if ((from->fields_present & ACCT_USERNAME) &&
+	    (from->hdr_user_name.buffer)) {
+		old_string = pdb_get_username(to);
+		new_string = unistr2_static(&from->uni_user_name);
+		DEBUG(10,("INFO_25 UNI_USER_NAME: %s -> %s\n", old_string, new_string));
+		if (STRING_CHANGED)
+		    pdb_set_username(to      , new_string, PDB_CHANGED);
+	}
+
+	if ((from->fields_present & ACCT_FULL_NAME) &&
+	    (from->hdr_full_name.buffer)) {
+		old_string = pdb_get_fullname(to);
+		new_string = unistr2_static(&from->uni_full_name);
+		DEBUG(10,("INFO_25 UNI_FULL_NAME: %s -> %s\n",old_string, new_string));
+		if (STRING_CHANGED)
+			pdb_set_fullname(to      , new_string, PDB_CHANGED);
+	}
+	
+	if ((from->fields_present & ACCT_HOME_DIR) &&
+	    (from->hdr_home_dir.buffer)) {
+		old_string = pdb_get_homedir(to);
+		new_string = unistr2_static(&from->uni_home_dir);
+		DEBUG(10,("INFO_25 UNI_HOME_DIR: %s -> %s\n",old_string,new_string));
+		if (STRING_CHANGED)
+			pdb_set_homedir(to       , new_string, PDB_CHANGED);
+	}
+
+	if ((from->fields_present & ACCT_HOME_DRIVE) &&
+	    (from->hdr_dir_drive.buffer)) {
+		old_string = pdb_get_dir_drive(to);
+		new_string = unistr2_static(&from->uni_dir_drive);
+		DEBUG(10,("INFO_25 UNI_DIR_DRIVE: %s -> %s\n",old_string,new_string));
+		if (STRING_CHANGED)
+			pdb_set_dir_drive(to     , new_string, PDB_CHANGED);
+	}
+
+	if ((from->fields_present & ACCT_LOGON_SCRIPT) &&
+	    (from->hdr_logon_script.buffer)) {
+		old_string = pdb_get_logon_script(to);
+		new_string = unistr2_static(&from->uni_logon_script);
+		DEBUG(10,("INFO_25 UNI_LOGON_SCRIPT: %s -> %s\n",old_string,new_string));
+		if (STRING_CHANGED)
+			pdb_set_logon_script(to  , new_string, PDB_CHANGED);
+	}
+
+	if ((from->fields_present & ACCT_PROFILE) &&
+	    (from->hdr_profile_path.buffer)) {
+		old_string = pdb_get_profile_path(to);
+		new_string = unistr2_static(&from->uni_profile_path);
+		DEBUG(10,("INFO_25 UNI_PROFILE_PATH: %s -> %s\n",old_string, new_string));
+		if (STRING_CHANGED)
+			pdb_set_profile_path(to  , new_string, PDB_CHANGED);
+	}
+	
+	if ((from->fields_present & ACCT_DESCRIPTION) &&
+	    (from->hdr_acct_desc.buffer)) {
+		old_string = pdb_get_acct_desc(to);
+		new_string = unistr2_static(&from->uni_acct_desc);
+		DEBUG(10,("INFO_25 UNI_ACCT_DESC: %s -> %s\n",old_string,new_string));
+		if (STRING_CHANGED)
+			pdb_set_acct_desc(to     , new_string, PDB_CHANGED);
+	}
+	
+	if ((from->fields_present & ACCT_WORKSTATIONS) &&
+	    (from->hdr_workstations.buffer)) {
+		old_string = pdb_get_workstations(to);
+		new_string = unistr2_static(&from->uni_workstations);
+		DEBUG(10,("INFO_25 UNI_WORKSTATIONS: %s -> %s\n",old_string, new_string));
+		if (STRING_CHANGED)
+			pdb_set_workstations(to  , new_string, PDB_CHANGED);
+	}
+
+	if ((from->fields_present & ACCT_COMMENT) &&
+	    (from->hdr_comment.buffer)) {
+		old_string = pdb_get_comment(to);
+		new_string = unistr2_static(&from->uni_comment);
+		DEBUG(10,("INFO_25 UNI_UNKNOWN_STR: %s -> %s\n",old_string, new_string));
+		if (STRING_CHANGED)
+			pdb_set_comment(to   , new_string, PDB_CHANGED);
+	}
+	
+	if ((from->fields_present & ACCT_CALLBACK) &&
+	    (from->hdr_munged_dial.buffer)) {
+		char *newstr;
+		old_string = pdb_get_munged_dial(to);
+		mung.length = from->hdr_munged_dial.uni_str_len;
+		mung.data = (uint8 *) from->uni_munged_dial.buffer;
+		mung.free = NULL;
+		newstr = (mung.length == 0) ?
+			NULL : base64_encode_data_blob(mung);
+		DEBUG(10,("INFO_25 UNI_MUNGED_DIAL: %s -> %s\n",old_string, newstr));
+		if (STRING_CHANGED_NC(old_string,newstr))
+			pdb_set_munged_dial(to   , newstr, PDB_CHANGED);
+
+		SAFE_FREE(newstr);
+	}
+	
+	if (from->fields_present & ACCT_RID) {
+		if (from->user_rid == 0) {
+			DEBUG(10, ("INFO_25: Asked to set User RID to 0 !? Skipping change!\n"));
+		} else if (from->user_rid != pdb_get_user_rid(to)) {
+			DEBUG(10,("INFO_25 USER_RID: %u -> %u NOT UPDATED!\n",pdb_get_user_rid(to),from->user_rid));
+		}
+	}
+	
+	if (from->fields_present & ACCT_PRIMARY_GID) {
+		if (from->group_rid == 0) {
+			DEBUG(10, ("INFO_25: Asked to set Group RID to 0 !? Skipping change!\n"));
+		} else if (from->group_rid != pdb_get_group_rid(to)) {
+			DEBUG(10,("INFO_25 GROUP_RID: %u -> %u\n",pdb_get_group_rid(to),from->group_rid));
+			pdb_set_group_sid_from_rid(to, from->group_rid, PDB_CHANGED);
+		}
+	}
+	
+	if (from->fields_present & ACCT_FLAGS) {
+		DEBUG(10,("INFO_25 ACCT_CTRL: %08X -> %08X\n",pdb_get_acct_ctrl(to),from->acb_info));
+		if (from->acb_info != pdb_get_acct_ctrl(to)) {
+			if (!(from->acb_info & ACB_AUTOLOCK) && (pdb_get_acct_ctrl(to) & ACB_AUTOLOCK)) {
+				/* We're unlocking a previously locked user. Reset bad password counts.
+				   Patch from Jianliang Lu. <Jianliang.Lu at getronics.com> */
+				pdb_set_bad_password_count(to, 0, PDB_CHANGED);
+				pdb_set_bad_password_time(to, 0, PDB_CHANGED);
+			}
+			pdb_set_acct_ctrl(to, from->acb_info, PDB_CHANGED);
+		}
+	}
+
+	if (from->fields_present & ACCT_LOGON_HOURS) {
+		DEBUG(15,("INFO_25 LOGON_DIVS: %08X -> %08X\n",pdb_get_logon_divs(to),from->logon_divs));
+		if (from->logon_divs != pdb_get_logon_divs(to)) {
+			pdb_set_logon_divs(to, from->logon_divs, PDB_CHANGED);
+		}
+
+		DEBUG(15,("INFO_25 LOGON_HRS.LEN: %08X -> %08X\n",pdb_get_hours_len(to),from->logon_hrs.len));
+		if (from->logon_hrs.len != pdb_get_hours_len(to)) {
+			pdb_set_hours_len(to, from->logon_hrs.len, PDB_CHANGED);
+		}
+
+		DEBUG(15,("INFO_25 LOGON_HRS.HOURS: %s -> %s\n",pdb_get_hours(to),from->logon_hrs.hours));
+		/* Fix me: only update if it changes --metze */
+		pdb_set_hours(to, from->logon_hrs.hours, PDB_CHANGED);
+	}
+
+	if (from->fields_present & ACCT_BAD_PWD_COUNT) {
+		DEBUG(10,("INFO_25 BAD_PASSWORD_COUNT: %08X -> %08X\n",pdb_get_bad_password_count(to),from->bad_password_count));
+		if (from->bad_password_count != pdb_get_bad_password_count(to)) {
+			pdb_set_bad_password_count(to, from->bad_password_count, PDB_CHANGED);
+		}
+	}
+
+	if (from->fields_present & ACCT_NUM_LOGONS) {
+		DEBUG(10,("INFO_25 LOGON_COUNT: %08X -> %08X\n",pdb_get_logon_count(to),from->logon_count));
+		if (from->logon_count != pdb_get_logon_count(to)) {
+			pdb_set_logon_count(to, from->logon_count, PDB_CHANGED);
+		}
+	}
+
+	/* If the must change flag is set, the last set time goes to zero.
+	   the must change and can change fields also do, but they are 
+	   calculated from policy, not set from the wire */
+
+	if (from->fields_present & ACCT_EXPIRED_FLAG) {
+		DEBUG(10,("INFO_25 PASS_MUST_CHANGE_AT_NEXT_LOGON: %02X\n",from->passmustchange));
+		if (from->passmustchange == PASS_MUST_CHANGE_AT_NEXT_LOGON) {
+			pdb_set_pass_last_set_time(to, 0, PDB_CHANGED);		
+		} else {
+			pdb_set_pass_last_set_time(to, time(NULL),PDB_CHANGED);
+		}
+	}
 }

Modified: branches/samba/upstream/source/rpc_server/srv_spoolss.c
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_spoolss.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_server/srv_spoolss.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,7 +10,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -19,7 +19,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -31,7 +32,7 @@
  * api_spoolss_open_printer_ex (rarely seen - older call)
  ********************************************************************/
 
-static bool api_spoolss_open_printer(pipes_struct *p)
+static BOOL api_spoolss_open_printer(pipes_struct *p)
 {
 	SPOOL_Q_OPEN_PRINTER q_u;
 	SPOOL_R_OPEN_PRINTER r_u;
@@ -61,7 +62,7 @@
  * api_spoolss_open_printer_ex
  ********************************************************************/
 
-static bool api_spoolss_open_printer_ex(pipes_struct *p)
+static BOOL api_spoolss_open_printer_ex(pipes_struct *p)
 {
 	SPOOL_Q_OPEN_PRINTER_EX q_u;
 	SPOOL_R_OPEN_PRINTER_EX r_u;
@@ -92,7 +93,7 @@
  * called from the spoolss dispatcher
  ********************************************************************/
 
-static bool api_spoolss_getprinterdata(pipes_struct *p)
+static BOOL api_spoolss_getprinterdata(pipes_struct *p)
 {
 	SPOOL_Q_GETPRINTERDATA q_u;
 	SPOOL_R_GETPRINTERDATA r_u;
@@ -124,7 +125,7 @@
  * called from the spoolss dispatcher
  ********************************************************************/
 
-static bool api_spoolss_deleteprinterdata(pipes_struct *p)
+static BOOL api_spoolss_deleteprinterdata(pipes_struct *p)
 {
 	SPOOL_Q_DELETEPRINTERDATA q_u;
 	SPOOL_R_DELETEPRINTERDATA r_u;
@@ -156,7 +157,7 @@
  * called from the spoolss dispatcher
  ********************************************************************/
 
-static bool api_spoolss_closeprinter(pipes_struct *p)
+static BOOL api_spoolss_closeprinter(pipes_struct *p)
 {
 	SPOOL_Q_CLOSEPRINTER q_u;
 	SPOOL_R_CLOSEPRINTER r_u;
@@ -187,7 +188,7 @@
  * called from the spoolss dispatcher
  ********************************************************************/
 
-static bool api_spoolss_abortprinter(pipes_struct *p)
+static BOOL api_spoolss_abortprinter(pipes_struct *p)
 {
 	SPOOL_Q_ABORTPRINTER q_u;
 	SPOOL_R_ABORTPRINTER r_u;
@@ -218,7 +219,7 @@
  * called from the spoolss dispatcher
  ********************************************************************/
 
-static bool api_spoolss_deleteprinter(pipes_struct *p)
+static BOOL api_spoolss_deleteprinter(pipes_struct *p)
 {
 	SPOOL_Q_DELETEPRINTER q_u;
 	SPOOL_R_DELETEPRINTER r_u;
@@ -250,7 +251,7 @@
  * called from the spoolss dispatcher
  ********************************************************************/
 
-static bool api_spoolss_deleteprinterdriver(pipes_struct *p)
+static BOOL api_spoolss_deleteprinterdriver(pipes_struct *p)
 {
 	SPOOL_Q_DELETEPRINTERDRIVER q_u;
 	SPOOL_R_DELETEPRINTERDRIVER r_u;
@@ -281,7 +282,7 @@
  * ReplyFindFirstPrinterChangeNotifyEx
  ********************************************************************/
 
-static bool api_spoolss_rffpcnex(pipes_struct *p)
+static BOOL api_spoolss_rffpcnex(pipes_struct *p)
 {
 	SPOOL_Q_RFFPCNEX q_u;
 	SPOOL_R_RFFPCNEX r_u;
@@ -318,7 +319,7 @@
  * JRA.
  ********************************************************************/
 
-static bool api_spoolss_rfnpcnex(pipes_struct *p)
+static BOOL api_spoolss_rfnpcnex(pipes_struct *p)
 {
 	SPOOL_Q_RFNPCNEX q_u;
 	SPOOL_R_RFNPCNEX r_u;
@@ -353,7 +354,7 @@
  *
  ********************************************************************/
 
-static bool api_spoolss_enumprinters(pipes_struct *p)
+static BOOL api_spoolss_enumprinters(pipes_struct *p)
 {
 	SPOOL_Q_ENUMPRINTERS q_u;
 	SPOOL_R_ENUMPRINTERS r_u;
@@ -384,7 +385,7 @@
  *
  ********************************************************************/
 
-static bool api_spoolss_getprinter(pipes_struct *p)
+static BOOL api_spoolss_getprinter(pipes_struct *p)
 {
 	SPOOL_Q_GETPRINTER q_u;
 	SPOOL_R_GETPRINTER r_u;
@@ -415,7 +416,7 @@
  *
  ********************************************************************/
 
-static bool api_spoolss_getprinterdriver2(pipes_struct *p)
+static BOOL api_spoolss_getprinterdriver2(pipes_struct *p)
 {
 	SPOOL_Q_GETPRINTERDRIVER2 q_u;
 	SPOOL_R_GETPRINTERDRIVER2 r_u;
@@ -446,7 +447,7 @@
  *
  ********************************************************************/
 
-static bool api_spoolss_startpageprinter(pipes_struct *p)
+static BOOL api_spoolss_startpageprinter(pipes_struct *p)
 {
 	SPOOL_Q_STARTPAGEPRINTER q_u;
 	SPOOL_R_STARTPAGEPRINTER r_u;
@@ -477,7 +478,7 @@
  *
  ********************************************************************/
 
-static bool api_spoolss_endpageprinter(pipes_struct *p)
+static BOOL api_spoolss_endpageprinter(pipes_struct *p)
 {
 	SPOOL_Q_ENDPAGEPRINTER q_u;
 	SPOOL_R_ENDPAGEPRINTER r_u;
@@ -505,7 +506,7 @@
 /********************************************************************
 ********************************************************************/
 
-static bool api_spoolss_startdocprinter(pipes_struct *p)
+static BOOL api_spoolss_startdocprinter(pipes_struct *p)
 {
 	SPOOL_Q_STARTDOCPRINTER q_u;
 	SPOOL_R_STARTDOCPRINTER r_u;
@@ -533,7 +534,7 @@
 /********************************************************************
 ********************************************************************/
 
-static bool api_spoolss_enddocprinter(pipes_struct *p)
+static BOOL api_spoolss_enddocprinter(pipes_struct *p)
 {
 	SPOOL_Q_ENDDOCPRINTER q_u;
 	SPOOL_R_ENDDOCPRINTER r_u;
@@ -561,7 +562,7 @@
 /********************************************************************
 ********************************************************************/
 
-static bool api_spoolss_writeprinter(pipes_struct *p)
+static BOOL api_spoolss_writeprinter(pipes_struct *p)
 {
 	SPOOL_Q_WRITEPRINTER q_u;
 	SPOOL_R_WRITEPRINTER r_u;
@@ -590,7 +591,7 @@
 
 ****************************************************************************/
 
-static bool api_spoolss_setprinter(pipes_struct *p)
+static BOOL api_spoolss_setprinter(pipes_struct *p)
 {
 	SPOOL_Q_SETPRINTER q_u;
 	SPOOL_R_SETPRINTER r_u;
@@ -618,7 +619,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_fcpn(pipes_struct *p)
+static BOOL api_spoolss_fcpn(pipes_struct *p)
 {
 	SPOOL_Q_FCPN q_u;
 	SPOOL_R_FCPN r_u;
@@ -646,7 +647,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_addjob(pipes_struct *p)
+static BOOL api_spoolss_addjob(pipes_struct *p)
 {
 	SPOOL_Q_ADDJOB q_u;
 	SPOOL_R_ADDJOB r_u;
@@ -674,7 +675,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_enumjobs(pipes_struct *p)
+static BOOL api_spoolss_enumjobs(pipes_struct *p)
 {
 	SPOOL_Q_ENUMJOBS q_u;
 	SPOOL_R_ENUMJOBS r_u;
@@ -702,7 +703,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_schedulejob(pipes_struct *p)
+static BOOL api_spoolss_schedulejob(pipes_struct *p)
 {
 	SPOOL_Q_SCHEDULEJOB q_u;
 	SPOOL_R_SCHEDULEJOB r_u;
@@ -730,7 +731,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_setjob(pipes_struct *p)
+static BOOL api_spoolss_setjob(pipes_struct *p)
 {
 	SPOOL_Q_SETJOB q_u;
 	SPOOL_R_SETJOB r_u;
@@ -758,7 +759,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_enumprinterdrivers(pipes_struct *p)
+static BOOL api_spoolss_enumprinterdrivers(pipes_struct *p)
 {
 	SPOOL_Q_ENUMPRINTERDRIVERS q_u;
 	SPOOL_R_ENUMPRINTERDRIVERS r_u;
@@ -786,7 +787,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_getform(pipes_struct *p)
+static BOOL api_spoolss_getform(pipes_struct *p)
 {
 	SPOOL_Q_GETFORM q_u;
 	SPOOL_R_GETFORM r_u;
@@ -814,7 +815,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_enumforms(pipes_struct *p)
+static BOOL api_spoolss_enumforms(pipes_struct *p)
 {
 	SPOOL_Q_ENUMFORMS q_u;
 	SPOOL_R_ENUMFORMS r_u;
@@ -842,7 +843,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_enumports(pipes_struct *p)
+static BOOL api_spoolss_enumports(pipes_struct *p)
 {
 	SPOOL_Q_ENUMPORTS q_u;
 	SPOOL_R_ENUMPORTS r_u;
@@ -870,7 +871,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_addprinterex(pipes_struct *p)
+static BOOL api_spoolss_addprinterex(pipes_struct *p)
 {
 	SPOOL_Q_ADDPRINTEREX q_u;
 	SPOOL_R_ADDPRINTEREX r_u;
@@ -898,7 +899,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_addprinterdriver(pipes_struct *p)
+static BOOL api_spoolss_addprinterdriver(pipes_struct *p)
 {
 	SPOOL_Q_ADDPRINTERDRIVER q_u;
 	SPOOL_R_ADDPRINTERDRIVER r_u;
@@ -935,7 +936,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_getprinterdriverdirectory(pipes_struct *p)
+static BOOL api_spoolss_getprinterdriverdirectory(pipes_struct *p)
 {
 	SPOOL_Q_GETPRINTERDRIVERDIR q_u;
 	SPOOL_R_GETPRINTERDRIVERDIR r_u;
@@ -963,7 +964,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_enumprinterdata(pipes_struct *p)
+static BOOL api_spoolss_enumprinterdata(pipes_struct *p)
 {
 	SPOOL_Q_ENUMPRINTERDATA q_u;
 	SPOOL_R_ENUMPRINTERDATA r_u;
@@ -991,7 +992,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_setprinterdata(pipes_struct *p)
+static BOOL api_spoolss_setprinterdata(pipes_struct *p)
 {
 	SPOOL_Q_SETPRINTERDATA q_u;
 	SPOOL_R_SETPRINTERDATA r_u;
@@ -1018,7 +1019,7 @@
 
 /****************************************************************************
 ****************************************************************************/
-static bool api_spoolss_reset_printer(pipes_struct *p)
+static BOOL api_spoolss_reset_printer(pipes_struct *p)
 {
 	SPOOL_Q_RESETPRINTER q_u;
 	SPOOL_R_RESETPRINTER r_u;
@@ -1045,7 +1046,7 @@
 
 /****************************************************************************
 ****************************************************************************/
-static bool api_spoolss_addform(pipes_struct *p)
+static BOOL api_spoolss_addform(pipes_struct *p)
 {
 	SPOOL_Q_ADDFORM q_u;
 	SPOOL_R_ADDFORM r_u;
@@ -1073,7 +1074,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_deleteform(pipes_struct *p)
+static BOOL api_spoolss_deleteform(pipes_struct *p)
 {
 	SPOOL_Q_DELETEFORM q_u;
 	SPOOL_R_DELETEFORM r_u;
@@ -1101,7 +1102,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_setform(pipes_struct *p)
+static BOOL api_spoolss_setform(pipes_struct *p)
 {
 	SPOOL_Q_SETFORM q_u;
 	SPOOL_R_SETFORM r_u;
@@ -1129,7 +1130,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_enumprintprocessors(pipes_struct *p)
+static BOOL api_spoolss_enumprintprocessors(pipes_struct *p)
 {
 	SPOOL_Q_ENUMPRINTPROCESSORS q_u;
 	SPOOL_R_ENUMPRINTPROCESSORS r_u;
@@ -1157,7 +1158,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_addprintprocessor(pipes_struct *p)
+static BOOL api_spoolss_addprintprocessor(pipes_struct *p)
 {
 	SPOOL_Q_ADDPRINTPROCESSOR q_u;
 	SPOOL_R_ADDPRINTPROCESSOR r_u;
@@ -1189,7 +1190,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_enumprintprocdatatypes(pipes_struct *p)
+static BOOL api_spoolss_enumprintprocdatatypes(pipes_struct *p)
 {
 	SPOOL_Q_ENUMPRINTPROCDATATYPES q_u;
 	SPOOL_R_ENUMPRINTPROCDATATYPES r_u;
@@ -1217,7 +1218,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_enumprintmonitors(pipes_struct *p)
+static BOOL api_spoolss_enumprintmonitors(pipes_struct *p)
 {
 	SPOOL_Q_ENUMPRINTMONITORS q_u;
 	SPOOL_R_ENUMPRINTMONITORS r_u;
@@ -1245,7 +1246,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_getjob(pipes_struct *p)
+static BOOL api_spoolss_getjob(pipes_struct *p)
 {
 	SPOOL_Q_GETJOB q_u;
 	SPOOL_R_GETJOB r_u;
@@ -1276,7 +1277,7 @@
  * called from the spoolss dispatcher
  ********************************************************************/
 
-static bool api_spoolss_getprinterdataex(pipes_struct *p)
+static BOOL api_spoolss_getprinterdataex(pipes_struct *p)
 {
 	SPOOL_Q_GETPRINTERDATAEX q_u;
 	SPOOL_R_GETPRINTERDATAEX r_u;
@@ -1305,7 +1306,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_setprinterdataex(pipes_struct *p)
+static BOOL api_spoolss_setprinterdataex(pipes_struct *p)
 {
 	SPOOL_Q_SETPRINTERDATAEX q_u;
 	SPOOL_R_SETPRINTERDATAEX r_u;
@@ -1334,7 +1335,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_enumprinterkey(pipes_struct *p)
+static BOOL api_spoolss_enumprinterkey(pipes_struct *p)
 {
 	SPOOL_Q_ENUMPRINTERKEY q_u;
 	SPOOL_R_ENUMPRINTERKEY r_u;
@@ -1362,7 +1363,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_enumprinterdataex(pipes_struct *p)
+static BOOL api_spoolss_enumprinterdataex(pipes_struct *p)
 {
 	SPOOL_Q_ENUMPRINTERDATAEX q_u;
 	SPOOL_R_ENUMPRINTERDATAEX r_u;
@@ -1390,7 +1391,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_getprintprocessordirectory(pipes_struct *p)
+static BOOL api_spoolss_getprintprocessordirectory(pipes_struct *p)
 {
 	SPOOL_Q_GETPRINTPROCESSORDIRECTORY q_u;
 	SPOOL_R_GETPRINTPROCESSORDIRECTORY r_u;
@@ -1418,7 +1419,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_deleteprinterdataex(pipes_struct *p)
+static BOOL api_spoolss_deleteprinterdataex(pipes_struct *p)
 {
 	SPOOL_Q_DELETEPRINTERDATAEX q_u;
 	SPOOL_R_DELETEPRINTERDATAEX r_u;
@@ -1446,7 +1447,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_deleteprinterkey(pipes_struct *p)
+static BOOL api_spoolss_deleteprinterkey(pipes_struct *p)
 {
 	SPOOL_Q_DELETEPRINTERKEY q_u;
 	SPOOL_R_DELETEPRINTERKEY r_u;
@@ -1474,7 +1475,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_addprinterdriverex(pipes_struct *p)
+static BOOL api_spoolss_addprinterdriverex(pipes_struct *p)
 {
 	SPOOL_Q_ADDPRINTERDRIVEREX q_u;
 	SPOOL_R_ADDPRINTERDRIVEREX r_u;
@@ -1511,7 +1512,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_deleteprinterdriverex(pipes_struct *p)
+static BOOL api_spoolss_deleteprinterdriverex(pipes_struct *p)
 {
 	SPOOL_Q_DELETEPRINTERDRIVEREX q_u;
 	SPOOL_R_DELETEPRINTERDRIVEREX r_u;
@@ -1539,7 +1540,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool api_spoolss_xcvdataport(pipes_struct *p)
+static BOOL api_spoolss_xcvdataport(pipes_struct *p)
 {
 	SPOOL_Q_XCVDATAPORT q_u;
 	SPOOL_R_XCVDATAPORT r_u;


Property changes on: branches/samba/upstream/source/rpc_server/srv_spoolss.c
___________________________________________________________________
Name: svn:executable
   + *

Modified: branches/samba/upstream/source/rpc_server/srv_spoolss_nt.c
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_spoolss_nt.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_server/srv_spoolss_nt.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,7 +10,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -19,7 +19,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 /* Since the SPOOLSS rpc routines are basically DOS 16-bit calls wrapped
@@ -50,7 +51,7 @@
 typedef struct _counter_printer_0 {
 	struct _counter_printer_0 *next;
 	struct _counter_printer_0 *prev;
-
+	
 	int snum;
 	uint32 counter;
 } counter_printer_0;
@@ -63,7 +64,7 @@
 
 /* in printing/nt_printing.c */
 
-extern struct standard_mapping printer_std_mapping, printserver_std_mapping;
+extern STANDARD_MAPPING printer_std_mapping, printserver_std_mapping;
 
 /* API table for Xcv Monitor functions */
 
@@ -139,7 +140,7 @@
 {
 	WERROR result;
 
-	/*
+	/* 
 	 * Tell the specific printing tdb we no longer want messages for this printer
 	 * by deregistering our PID.
 	 */
@@ -153,10 +154,8 @@
 		return;
 	}
 
-	result = rpccli_spoolss_reply_close_printer(notify_cli_pipe,
-				talloc_tos(),
-				handle);
-
+	result = rpccli_spoolss_reply_close_printer(notify_cli_pipe, notify_cli_pipe->cli->mem_ctx, handle);
+	
 	if (!W_ERROR_IS_OK(result))
 		DEBUG(0,("srv_spoolss_replycloseprinter: reply_close_printer failed [%s].\n",
 			dos_errstr(result)));
@@ -167,8 +166,7 @@
 		cli_shutdown( notify_cli_pipe->cli );
 		notify_cli_pipe = NULL; /* The above call shuts downn the pipe also. */
 
-		messaging_deregister(smbd_messaging_context(),
-				     MSG_PRINTER_NOTIFY2, NULL);
+		message_deregister(MSG_PRINTER_NOTIFY2);
 
         	/* Tell the connections db we're no longer interested in
 		 * printer notify messages. */
@@ -208,10 +206,10 @@
 	free_spool_notify_option(&Printer->notify.option);
 	Printer->notify.option=NULL;
 	Printer->notify.client_connected=False;
-
+	
 	free_nt_devicemode( &Printer->nt_devmode );
 	free_a_printer( &Printer->printer_info, 2 );
-
+	
 	talloc_destroy( Printer->ctx );
 
 	/* Remove from the internal list. */
@@ -269,7 +267,7 @@
  Close printer index by handle.
 ****************************************************************************/
 
-static bool close_printer_handle(pipes_struct *p, POLICY_HND *hnd)
+static BOOL close_printer_handle(pipes_struct *p, POLICY_HND *hnd)
 {
 	Printer_entry *Printer = find_printer_index_by_hnd(p, hnd);
 
@@ -281,65 +279,57 @@
 	close_policy_hnd(p, hnd);
 
 	return True;
-}
+}	
 
 /****************************************************************************
  Delete a printer given a handle.
 ****************************************************************************/
-
-WERROR delete_printer_hook(TALLOC_CTX *ctx, NT_USER_TOKEN *token, const char *sharename )
+WERROR delete_printer_hook( NT_USER_TOKEN *token, const char *sharename )
 {
 	char *cmd = lp_deleteprinter_cmd();
-	char *command = NULL;
+	pstring command;
 	int ret;
 	SE_PRIV se_printop = SE_PRINT_OPERATOR;
-	bool is_print_op = False;
-
+	BOOL is_print_op = False;
+		
 	/* can't fail if we don't try */
-
+	
 	if ( !*cmd )
 		return WERR_OK;
+		
+	pstr_sprintf(command, "%s \"%s\"", cmd, sharename);
 
-	command = talloc_asprintf(ctx,
-			"%s \"%s\"",
-			cmd, sharename);
-	if (!command) {
-		return WERR_NOMEM;
-	}
 	if ( token )
 		is_print_op = user_has_privileges( token, &se_printop );
-
+	
 	DEBUG(10,("Running [%s]\n", command));
 
 	/********** BEGIN SePrintOperatorPrivlege BLOCK **********/
-
+	
 	if ( is_print_op )
 		become_root();
-
+		
 	if ( (ret = smbrun(command, NULL)) == 0 ) {
 		/* Tell everyone we updated smb.conf. */
-		message_send_all(smbd_messaging_context(),
-				 MSG_SMB_CONF_UPDATED, NULL, 0, NULL);
+		message_send_all(conn_tdb_ctx(), MSG_SMB_CONF_UPDATED, NULL, 0, False, NULL);
 	}
-
+		
 	if ( is_print_op )
 		unbecome_root();
 
 	/********** END SePrintOperatorPrivlege BLOCK **********/
-
+	
 	DEBUGADD(10,("returned [%d]\n", ret));
 
-	TALLOC_FREE(command);
-
-	if (ret != 0)
+	if (ret != 0) 
 		return WERR_BADFID; /* What to return here? */
 
 	/* go ahead and re-read the services immediately */
 	reload_services( False );
-
+	
 	if ( lp_servicenumber( sharename )  < 0 )
 		return WERR_ACCESS_DENIED;
-
+		
 	return WERR_OK;
 }
 
@@ -356,7 +346,7 @@
 		return WERR_BADFID;
 	}
 
-	/*
+	/* 
 	 * It turns out that Windows allows delete printer on a handle
 	 * opened by an admin user, then used on a pipe handle created
 	 * by an anonymous user..... but they're working on security.... riiight !
@@ -367,35 +357,34 @@
 		DEBUG(3, ("delete_printer_handle: denied by handle\n"));
 		return WERR_ACCESS_DENIED;
 	}
-
-	/* this does not need a become root since the access check has been
+	
+	/* this does not need a become root since the access check has been 
 	   done on the handle already */
-
+	   
 	if (del_a_printer( Printer->sharename ) != 0) {
 		DEBUG(3,("Error deleting printer %s\n", Printer->sharename));
 		return WERR_BADFID;
 	}
 
-	return delete_printer_hook(p->mem_ctx, p->pipe_user.nt_user_token, Printer->sharename );
+	return delete_printer_hook( p->pipe_user.nt_user_token, Printer->sharename );
 }
 
 /****************************************************************************
  Return the snum of a printer corresponding to an handle.
 ****************************************************************************/
 
-static bool get_printer_snum(pipes_struct *p, POLICY_HND *hnd, int *number,
-			     struct share_params **params)
+static BOOL get_printer_snum(pipes_struct *p, POLICY_HND *hnd, int *number)
 {
 	Printer_entry *Printer = find_printer_index_by_hnd(p, hnd);
-
+		
 	if (!Printer) {
 		DEBUG(2,("get_printer_snum: Invalid handle (%s:%u:%u)\n", OUR_HANDLE(hnd)));
 		return False;
 	}
-
+	
 	switch (Printer->printer_type) {
-		case SPLHND_PRINTER:
-			DEBUG(4,("short name:%s\n", Printer->sharename));
+		case SPLHND_PRINTER:		
+			DEBUG(4,("short name:%s\n", Printer->sharename));			
 			*number = print_queue_snum(Printer->sharename);
 			return (*number != -1);
 		case SPLHND_SERVER:
@@ -410,7 +399,7 @@
  Check if it's \\server or \\server\printer
 ****************************************************************************/
 
-static bool set_printer_hnd_printertype(Printer_entry *Printer, char *handlename)
+static BOOL set_printer_hnd_printertype(Printer_entry *Printer, char *handlename)
 {
 	DEBUG(3,("Setting printer type=%s\n", handlename));
 
@@ -422,7 +411,7 @@
 	/* it's a print server */
 	if (*handlename=='\\' && *(handlename+1)=='\\' && !strchr_m(handlename+2, '\\')) {
 		DEBUGADD(4,("Printer is a print server\n"));
-		Printer->printer_type = SPLHND_SERVER;
+		Printer->printer_type = SPLHND_SERVER;		
 	}
 	/* it's a printer (set_printer_hnd_name() will handle port monitors */
 	else {
@@ -434,23 +423,23 @@
 }
 
 /****************************************************************************
- Set printer handle name..  Accept names like \\server, \\server\printer,
+ Set printer handle name..  Accept names like \\server, \\server\printer, 
  \\server\SHARE, & "\\server\,XcvMonitor Standard TCP/IP Port"    See
- the MSDN docs regarding OpenPrinter() for details on the XcvData() and
+ the MSDN docs regarding OpenPrinter() for details on the XcvData() and 
  XcvDataPort() interface.
 ****************************************************************************/
 
-static bool set_printer_hnd_name(Printer_entry *Printer, char *handlename)
+static BOOL set_printer_hnd_name(Printer_entry *Printer, char *handlename)
 {
 	int snum;
 	int n_services=lp_numservices();
 	char *aprinter, *printername;
 	const char *servername;
 	fstring sname;
-	bool found=False;
+	BOOL found=False;
 	NT_PRINTER_INFO_LEVEL *printer = NULL;
 	WERROR result;
-
+	
 	DEBUG(4,("Setting printer name=%s (len=%lu)\n", handlename, (unsigned long)strlen(handlename)));
 
 	aprinter = handlename;
@@ -464,14 +453,14 @@
 	else {
 		servername = "";
 	}
-
+	
 	/* save the servername to fill in replies on this handle */
-
+	
 	if ( !is_myname_or_ipaddr( servername ) )
 		return False;
 
 	fstrcpy( Printer->servername, servername );
-
+	
 	if ( Printer->printer_type == SPLHND_SERVER )
 		return True;
 
@@ -479,9 +468,9 @@
 		return False;
 
 	DEBUGADD(5, ("searching for [%s]\n", aprinter ));
-
+	
 	/* check for the Port Monitor Interface */
-
+	
 	if ( strequal( aprinter, SPL_XCV_MONITOR_TCPMON ) ) {
 		Printer->printer_type = SPLHND_PORTMON_TCP;
 		fstrcpy(sname, SPL_XCV_MONITOR_TCPMON);
@@ -493,12 +482,12 @@
 		found = True;
 	}
 
-	/* Search all sharenames first as this is easier than pulling
+	/* Search all sharenames first as this is easier than pulling 
 	   the printer_info_2 off of disk. Don't use find_service() since
 	   that calls out to map_username() */
-
+	
 	/* do another loop to look for printernames */
-
+	
 	for (snum=0; !found && snum<n_services; snum++) {
 
 		/* no point going on if this is not a printer */
@@ -514,7 +503,7 @@
 
 		/* no point looking up the printer object if
 		   we aren't allowing printername != sharename */
-
+		
 		if ( lp_force_printername(snum) )
 			continue;
 
@@ -526,14 +515,13 @@
 		 * a CUPS server for efficiency with large numbers of printers.
 		 * JRA.
 		 */
-
 		result = get_a_printer_search( NULL, &printer, 2, sname );
 		if ( !W_ERROR_IS_OK(result) ) {
 			DEBUG(0,("set_printer_hnd_name: failed to lookup printer [%s] -- result [%s]\n",
 				sname, dos_errstr(result)));
 			continue;
 		}
-
+		
 		/* printername is always returned as \\server\printername */
 		if ( !(printername = strchr_m(&printer->info_2->printername[2], '\\')) ) {
 			DEBUG(0,("set_printer_hnd_name: info2->printername in wrong format! [%s]\n",
@@ -541,17 +529,17 @@
 			free_a_printer( &printer, 2);
 			continue;
 		}
-
+		
 		printername++;
-
+		
 		if ( strequal(printername, aprinter) ) {
 			free_a_printer( &printer, 2);
 			found = True;
 			break;
 		}
-
+		
 		DEBUGADD(10, ("printername: %s\n", printername));
-
+		
 		free_a_printer( &printer, 2);
 	}
 
@@ -561,7 +549,7 @@
 		DEBUGADD(4,("Printer not found\n"));
 		return False;
 	}
-
+	
 	DEBUGADD(4,("set_printer_hnd_name: Printer found: %s -> %s\n", aprinter, sname));
 
 	fstrcpy(Printer->sharename, sname);
@@ -573,7 +561,7 @@
  Find first available printer slot. creates a printer handle for you.
  ****************************************************************************/
 
-static bool open_printer_hnd(pipes_struct *p, POLICY_HND *hnd, char *name, uint32 access_granted)
+static BOOL open_printer_hnd(pipes_struct *p, POLICY_HND *hnd, char *name, uint32 access_granted)
 {
 	Printer_entry *new_printer;
 
@@ -583,28 +571,28 @@
 		return False;
 
 	ZERO_STRUCTP(new_printer);
-
+	
 	if (!create_policy_hnd(p, hnd, free_printer_entry, new_printer)) {
 		SAFE_FREE(new_printer);
 		return False;
 	}
-
+	
 	/* Add to the internal list. */
 	DLIST_ADD(printers_list, new_printer);
-
+	
 	new_printer->notify.option=NULL;
-
+				
 	if ( !(new_printer->ctx = talloc_init("Printer Entry [%p]", hnd)) ) {
 		DEBUG(0,("open_printer_hnd: talloc_init() failed!\n"));
 		close_printer_handle(p, hnd);
 		return False;
 	}
-
+	
 	if (!set_printer_hnd_printertype(new_printer, name)) {
 		close_printer_handle(p, hnd);
 		return False;
 	}
-
+	
 	if (!set_printer_hnd_name(new_printer, name)) {
 		close_printer_handle(p, hnd);
 		return False;
@@ -622,22 +610,22 @@
  given by (notify_type, notify_field).
  **************************************************************************/
 
-static bool is_monitoring_event_flags(uint32 flags, uint16 notify_type,
+static BOOL is_monitoring_event_flags(uint32 flags, uint16 notify_type,
 				      uint16 notify_field)
 {
 	return True;
 }
 
-static bool is_monitoring_event(Printer_entry *p, uint16 notify_type,
+static BOOL is_monitoring_event(Printer_entry *p, uint16 notify_type,
 				uint16 notify_field)
 {
 	SPOOL_NOTIFY_OPTION *option = p->notify.option;
 	uint32 i, j;
 
-	/*
+	/* 
 	 * Flags should always be zero when the change notify
 	 * is registered by the client's spooler.  A user Win32 app
-	 * might use the flags though instead of the NOTIFY_OPTION_INFO
+	 * might use the flags though instead of the NOTIFY_OPTION_INFO 
 	 * --jerry
 	 */
 
@@ -650,24 +638,24 @@
 			p->notify.flags, notify_type, notify_field);
 
 	for (i = 0; i < option->count; i++) {
-
+		
 		/* Check match for notify_type */
-
+		
 		if (option->ctr.type[i].type != notify_type)
 			continue;
 
 		/* Check match for field */
-
+		
 		for (j = 0; j < option->ctr.type[i].count; j++) {
 			if (option->ctr.type[i].fields[j] == notify_field) {
 				return True;
 			}
 		}
 	}
-
+	
 	DEBUG(10, ("Open handle for \\\\%s\\%s is not monitoring 0x%02x/0x%02x\n",
 		   p->servername, p->sharename, notify_type, notify_field));
-
+	
 	return False;
 }
 
@@ -686,7 +674,7 @@
 			  TALLOC_CTX *mem_ctx)
 {
 	UNISTR2 unistr;
-
+	
 	/* The length of the message includes the trailing \0 */
 
 	init_unistr2(&unistr, msg->notify.data, UNI_STR_TERMINATE);
@@ -698,7 +686,7 @@
 		data->notify_data.data.length = 0;
 		return;
 	}
-
+	
 	memcpy(data->notify_data.data.string, unistr.buffer, msg->len * 2);
 }
 
@@ -806,21 +794,21 @@
 /***********************************************************************
  Allocate talloc context for container object
  **********************************************************************/
-
+ 
 static void notify_msg_ctr_init( SPOOLSS_NOTIFY_MSG_CTR *ctr )
 {
 	if ( !ctr )
 		return;
 
 	ctr->ctx = talloc_init("notify_msg_ctr_init %p", ctr);
-
+		
 	return;
 }
 
 /***********************************************************************
  release all allocated memory and zero out structure
  **********************************************************************/
-
+ 
 static void notify_msg_ctr_destroy( SPOOLSS_NOTIFY_MSG_CTR *ctr )
 {
 	if ( !ctr )
@@ -828,34 +816,34 @@
 
 	if ( ctr->ctx )
 		talloc_destroy(ctr->ctx);
-
+		
 	ZERO_STRUCTP(ctr);
-
+		
 	return;
 }
 
 /***********************************************************************
  **********************************************************************/
-
+ 
 static TALLOC_CTX* notify_ctr_getctx( SPOOLSS_NOTIFY_MSG_CTR *ctr )
 {
 	if ( !ctr )
 		return NULL;
-
+		
 	return ctr->ctx;
 }
 
 /***********************************************************************
  **********************************************************************/
-
+ 
 static SPOOLSS_NOTIFY_MSG_GROUP* notify_ctr_getgroup( SPOOLSS_NOTIFY_MSG_CTR *ctr, uint32 idx )
 {
 	if ( !ctr || !ctr->msg_groups )
 		return NULL;
-
+	
 	if ( idx >= ctr->num_groups )
 		return NULL;
-
+		
 	return &ctr->msg_groups[idx];
 
 }
@@ -863,38 +851,38 @@
 /***********************************************************************
  How many groups of change messages do we have ?
  **********************************************************************/
-
+ 
 static int notify_msg_ctr_numgroups( SPOOLSS_NOTIFY_MSG_CTR *ctr )
 {
 	if ( !ctr )
 		return 0;
-
+		
 	return ctr->num_groups;
 }
 
 /***********************************************************************
  Add a SPOOLSS_NOTIFY_MSG_CTR to the correct group
  **********************************************************************/
-
+ 
 static int notify_msg_ctr_addmsg( SPOOLSS_NOTIFY_MSG_CTR *ctr, SPOOLSS_NOTIFY_MSG *msg )
 {
 	SPOOLSS_NOTIFY_MSG_GROUP	*groups = NULL;
 	SPOOLSS_NOTIFY_MSG_GROUP	*msg_grp = NULL;
 	SPOOLSS_NOTIFY_MSG		*msg_list = NULL;
 	int				i, new_slot;
-
+	
 	if ( !ctr || !msg )
 		return 0;
-
+	
 	/* loop over all groups looking for a matching printer name */
-
+	
 	for ( i=0; i<ctr->num_groups; i++ ) {
 		if ( strcmp(ctr->msg_groups[i].printername, msg->printer) == 0 )
 			break;
 	}
-
+	
 	/* add a new group? */
-
+	
 	if ( i == ctr->num_groups ) {
 		ctr->num_groups++;
 
@@ -905,37 +893,37 @@
 		ctr->msg_groups = groups;
 
 		/* clear the new entry and set the printer name */
-
+		
 		ZERO_STRUCT( ctr->msg_groups[ctr->num_groups-1] );
 		fstrcpy( ctr->msg_groups[ctr->num_groups-1].printername, msg->printer );
 	}
-
+	
 	/* add the change messages; 'i' is the correct index now regardless */
-
+	
 	msg_grp = &ctr->msg_groups[i];
-
+	
 	msg_grp->num_msgs++;
-
+	
 	if ( !(msg_list = TALLOC_REALLOC_ARRAY( ctr->ctx, msg_grp->msgs, SPOOLSS_NOTIFY_MSG, msg_grp->num_msgs )) ) {
 		DEBUG(0,("notify_msg_ctr_addmsg: talloc_realloc() failed for new message [%d]!\n", msg_grp->num_msgs));
 		return 0;
 	}
 	msg_grp->msgs = msg_list;
-
+	
 	new_slot = msg_grp->num_msgs-1;
 	memcpy( &msg_grp->msgs[new_slot], msg, sizeof(SPOOLSS_NOTIFY_MSG) );
-
+	
 	/* need to allocate own copy of data */
-
-	if ( msg->len != 0 )
+	
+	if ( msg->len != 0 ) 
 		msg_grp->msgs[new_slot].notify.data = (char *)
 			TALLOC_MEMDUP( ctr->ctx, msg->notify.data, msg->len );
-
+	
 	return ctr->num_groups;
 }
 
 /***********************************************************************
- Send a change notication message on all handles which have a call
+ Send a change notication message on all handles which have a call 
  back registered
  **********************************************************************/
 
@@ -946,23 +934,23 @@
 	SPOOLSS_NOTIFY_MSG_GROUP *msg_group = notify_ctr_getgroup( ctr, idx );
 	SPOOLSS_NOTIFY_MSG       *messages;
 	int			 sending_msg_count;
-
+	
 	if ( !msg_group ) {
 		DEBUG(5,("send_notify2_changes() called with no msg group!\n"));
 		return;
 	}
-
+	
 	messages = msg_group->msgs;
-
+	
 	if ( !messages ) {
 		DEBUG(5,("send_notify2_changes() called with no messages!\n"));
 		return;
 	}
-
+	
 	DEBUG(8,("send_notify2_changes: Enter...[%s]\n", msg_group->printername));
-
+	
 	/* loop over all printers */
-
+	
 	for (p = printers_list; p; p = p->next) {
 		SPOOL_NOTIFY_INFO_DATA *data;
 		uint32	data_len = 0;
@@ -976,7 +964,7 @@
 
 		DEBUG(10,("Client connected! [\\\\%s\\%s]\n", p->servername, p->sharename));
 
-		/* For this printer?  Print servers always receive
+		/* For this printer?  Print servers always receive 
                    notifications. */
 
 		if ( ( p->printer_type == SPLHND_PRINTER )  &&
@@ -984,40 +972,40 @@
 			continue;
 
 		DEBUG(10,("Our printer\n"));
-
+		
 		/* allocate the max entries possible */
-
+		
 		data = TALLOC_ARRAY( mem_ctx, SPOOL_NOTIFY_INFO_DATA, msg_group->num_msgs);
 		if (!data) {
 			return;
 		}
 
 		ZERO_STRUCTP(data);
-
+		
 		/* build the array of change notifications */
-
+		
 		sending_msg_count = 0;
-
+		
 		for ( i=0; i<msg_group->num_msgs; i++ ) {
 			SPOOLSS_NOTIFY_MSG	*msg = &messages[i];
-
+			
 			/* Are we monitoring this event? */
 
 			if (!is_monitoring_event(p, msg->type, msg->field))
 				continue;
 
 			sending_msg_count++;
-
-
+			
+			
 			DEBUG(10,("process_notify2_message: Sending message type [0x%x] field [0x%2x] for printer [%s]\n",
 				msg->type, msg->field, p->sharename));
 
-			/*
-			 * if the is a printer notification handle and not a job notification
+			/* 
+			 * if the is a printer notification handle and not a job notification 
 			 * type, then set the id to 0.  Other wise just use what was specified
-			 * in the message.
+			 * in the message.  
 			 *
-			 * When registering change notification on a print server handle
+			 * When registering change notification on a print server handle 
 			 * we always need to send back the id (snum) matching the printer
 			 * for which the change took place.  For change notify registered
 			 * on a printer handle, this does not matter and the id should be 0.
@@ -1049,7 +1037,7 @@
 				if ( printer_notify_table[msg->field].fn )
 					printer_notify_table[msg->field].fn(msg, &data[data_len], mem_ctx);
 				break;
-
+			
 			case JOB_NOTIFY_TYPE:
 				if ( job_notify_table[msg->field].fn )
 					job_notify_table[msg->field].fn(msg, &data[data_len], mem_ctx);
@@ -1064,11 +1052,11 @@
 		}
 
 		if ( sending_msg_count ) {
-			rpccli_spoolss_rrpcn( notify_cli_pipe, mem_ctx, &p->notify.client_hnd,
+			rpccli_spoolss_rrpcn( notify_cli_pipe, mem_ctx, &p->notify.client_hnd, 
 					data_len, data, p->notify.change, 0 );
 		}
 	}
-
+	
 done:
 	DEBUG(8,("send_notify2_changes: Exit...\n"));
 	return;
@@ -1077,7 +1065,7 @@
 /***********************************************************************
  **********************************************************************/
 
-static bool notify2_unpack_msg( SPOOLSS_NOTIFY_MSG *msg, struct timeval *tv, void *buf, size_t len )
+static BOOL notify2_unpack_msg( SPOOLSS_NOTIFY_MSG *msg, struct timeval *tv, void *buf, size_t len )
 {
 
 	uint32 tv_sec, tv_usec;
@@ -1085,18 +1073,18 @@
 
 	/* Unpack message */
 
-	offset += tdb_unpack((uint8 *)buf + offset, len - offset, "f",
+	offset += tdb_unpack((char *)buf + offset, len - offset, "f",
 			     msg->printer);
-
-	offset += tdb_unpack((uint8 *)buf + offset, len - offset, "ddddddd",
+	
+	offset += tdb_unpack((char *)buf + offset, len - offset, "ddddddd",
 				&tv_sec, &tv_usec,
 				&msg->type, &msg->field, &msg->id, &msg->len, &msg->flags);
 
 	if (msg->len == 0)
-		tdb_unpack((uint8 *)buf + offset, len - offset, "dd",
+		tdb_unpack((char *)buf + offset, len - offset, "dd",
 			   &msg->notify.value[0], &msg->notify.value[1]);
 	else
-		tdb_unpack((uint8 *)buf + offset, len - offset, "B",
+		tdb_unpack((char *)buf + offset, len - offset, "B", 
 			   &msg->len, &msg->notify.data);
 
 	DEBUG(3, ("notify2_unpack_msg: got NOTIFY2 message for printer %s, jobid %u type %d, field 0x%02x, flags 0x%04x\n",
@@ -1109,7 +1097,7 @@
 		DEBUG(3, ("notify2_unpack_msg: value1 = %d, value2 = %d\n", msg->notify.value[0],
 			  msg->notify.value[1]));
 	else
-		dump_data(3, (uint8 *)msg->notify.data, msg->len);
+		dump_data(3, msg->notify.data, msg->len);
 
 	return True;
 }
@@ -1118,25 +1106,23 @@
  Receive a notify2 message list
  ********************************************************************/
 
-static void receive_notify2_message_list(struct messaging_context *msg,
-					 void *private_data,
-					 uint32_t msg_type,
-					 struct server_id server_id,
-					 DATA_BLOB *data)
+static void receive_notify2_message_list(int msg_type, struct process_id src,
+					 void *msg, size_t len,
+					 void *private_data)
 {
 	size_t 			msg_count, i;
-	char 			*buf = (char *)data->data;
+	char 			*buf = (char *)msg;
 	char 			*msg_ptr;
 	size_t 			msg_len;
 	SPOOLSS_NOTIFY_MSG	notify;
 	SPOOLSS_NOTIFY_MSG_CTR	messages;
 	int			num_groups;
 
-	if (data->length < 4) {
+	if (len < 4) {
 		DEBUG(0,("receive_notify2_message_list: bad message format (len < 4)!\n"));
 		return;
 	}
-
+	
 	msg_count = IVAL(buf, 0);
 	msg_ptr = buf + 4;
 
@@ -1148,21 +1134,21 @@
 	}
 
 	/* initialize the container */
-
+	
 	ZERO_STRUCT( messages );
 	notify_msg_ctr_init( &messages );
-
-	/*
+	
+	/* 
 	 * build message groups for each printer identified
 	 * in a change_notify msg.  Remember that a PCN message
 	 * includes the handle returned for the srv_spoolss_replyopenprinter()
 	 * call.  Therefore messages are grouped according to printer handle.
 	 */
-
+	 
 	for ( i=0; i<msg_count; i++ ) {
 		struct timeval msg_tv;
 
-		if (msg_ptr + 4 - buf > data->length) {
+		if (msg_ptr + 4 - buf > len) {
 			DEBUG(0,("receive_notify2_message_list: bad message format (len > buf_size) !\n"));
 			return;
 		}
@@ -1170,40 +1156,40 @@
 		msg_len = IVAL(msg_ptr,0);
 		msg_ptr += 4;
 
-		if (msg_ptr + msg_len - buf > data->length) {
+		if (msg_ptr + msg_len - buf > len) {
 			DEBUG(0,("receive_notify2_message_list: bad message format (bad len) !\n"));
 			return;
 		}
-
+		
 		/* unpack messages */
-
+		
 		ZERO_STRUCT( notify );
 		notify2_unpack_msg( &notify, &msg_tv, msg_ptr, msg_len );
 		msg_ptr += msg_len;
 
 		/* add to correct list in container */
-
+		
 		notify_msg_ctr_addmsg( &messages, &notify );
-
+		
 		/* free memory that might have been allocated by notify2_unpack_msg() */
-
+		
 		if ( notify.len != 0 )
 			SAFE_FREE( notify.notify.data );
 	}
-
+	
 	/* process each group of messages */
-
+	
 	num_groups = notify_msg_ctr_numgroups( &messages );
 	for ( i=0; i<num_groups; i++ )
 		send_notify2_changes( &messages, i );
-
-
+	
+	
 	/* cleanup */
-
+		
 	DEBUG(10,("receive_notify2_message_list: processed %u messages\n", (uint32)msg_count ));
-
+		
 	notify_msg_ctr_destroy( &messages );
-
+	
 	return;
 }
 
@@ -1212,80 +1198,75 @@
  so we can upgrade the information for each printer bound to this
  driver
  ********************************************************************/
-
-static bool srv_spoolss_drv_upgrade_printer(char* drivername)
+ 
+static BOOL srv_spoolss_drv_upgrade_printer(char* drivername)
 {
 	int len = strlen(drivername);
-
+	
 	if (!len)
 		return False;
 
 	DEBUG(10,("srv_spoolss_drv_upgrade_printer: Sending message about driver upgrade [%s]\n",
 		drivername));
+		
+	message_send_pid(pid_to_procid(sys_getpid()),
+			 MSG_PRINTER_DRVUPGRADE, drivername, len+1, False);
 
-	messaging_send_buf(smbd_messaging_context(), procid_self(),
-			   MSG_PRINTER_DRVUPGRADE,
-			   (uint8 *)drivername, len+1);
-
 	return True;
 }
 
 /**********************************************************************
  callback to receive a MSG_PRINTER_DRVUPGRADE message and interate
- over all printers, upgrading ones as necessary
+ over all printers, upgrading ones as necessary 
  **********************************************************************/
-
-void do_drv_upgrade_printer(struct messaging_context *msg,
-			    void *private_data,
-			    uint32_t msg_type,
-			    struct server_id server_id,
-			    DATA_BLOB *data)
+ 
+void do_drv_upgrade_printer(int msg_type, struct process_id src,
+			    void *buf, size_t len, void *private_data)
 {
 	fstring drivername;
 	int snum;
 	int n_services = lp_numservices();
-	size_t len;
-
-	len = MIN(data->length,sizeof(drivername)-1);
-	strncpy(drivername, (const char *)data->data, len);
-
+	
+	len = MIN(len,sizeof(drivername)-1);
+	strncpy(drivername, (const char *)buf, len);
+	
 	DEBUG(10,("do_drv_upgrade_printer: Got message for new driver [%s]\n", drivername ));
 
 	/* Iterate the printer list */
-
+	
 	for (snum=0; snum<n_services; snum++)
 	{
-		if (lp_snum_ok(snum) && lp_print_ok(snum) )
+		if (lp_snum_ok(snum) && lp_print_ok(snum) ) 
 		{
 			WERROR result;
 			NT_PRINTER_INFO_LEVEL *printer = NULL;
-
+			
 			result = get_a_printer(NULL, &printer, 2, lp_const_servicename(snum));
 			if (!W_ERROR_IS_OK(result))
 				continue;
-
-			if (printer && printer->info_2 && !strcmp(drivername, printer->info_2->drivername))
+				
+			if (printer && printer->info_2 && !strcmp(drivername, printer->info_2->drivername)) 
 			{
 				DEBUG(6,("Updating printer [%s]\n", printer->info_2->printername));
-
+				
 				/* all we care about currently is the change_id */
-
+				
 				result = mod_a_printer(printer, 2);
 				if (!W_ERROR_IS_OK(result)) {
-					DEBUG(3,("do_drv_upgrade_printer: mod_a_printer() failed with status [%s]\n",
+					DEBUG(3,("do_drv_upgrade_printer: mod_a_printer() failed with status [%s]\n", 
 						dos_errstr(result)));
 				}
 			}
-
-			free_a_printer(&printer, 2);
+			
+			free_a_printer(&printer, 2);			
 		}
 	}
-
-	/* all done */
+	
+	/* all done */	
 }
 
 /********************************************************************
- Update the cache for all printq's with a registered client
+ Update the cache for all printq's with a registered client 
  connection
  ********************************************************************/
 
@@ -1293,21 +1274,21 @@
 {
 	Printer_entry *printer = printers_list;
 	int snum;
-
-	/* loop through all printers and update the cache where
+	
+	/* loop through all printers and update the cache where 
 	   client_connected == True */
-	while ( printer )
+	while ( printer ) 
 	{
-		if ( (printer->printer_type == SPLHND_PRINTER)
-			&& printer->notify.client_connected )
+		if ( (printer->printer_type == SPLHND_PRINTER) 
+			&& printer->notify.client_connected ) 
 		{
 			snum = print_queue_snum(printer->sharename);
 			print_queue_status( snum, NULL, NULL );
 		}
-
+		
 		printer = printer->next;
 	}
-
+	
 	return;
 }
 /********************************************************************
@@ -1315,85 +1296,80 @@
  so we can upgrade the information for each printer bound to this
  driver
  ********************************************************************/
-
-static bool srv_spoolss_reset_printerdata(char* drivername)
+ 
+static BOOL srv_spoolss_reset_printerdata(char* drivername)
 {
 	int len = strlen(drivername);
-
+	
 	if (!len)
 		return False;
 
 	DEBUG(10,("srv_spoolss_reset_printerdata: Sending message about resetting printerdata [%s]\n",
 		drivername));
+		
+	message_send_pid(pid_to_procid(sys_getpid()),
+			 MSG_PRINTERDATA_INIT_RESET, drivername, len+1, False);
 
-	messaging_send_buf(smbd_messaging_context(), procid_self(),
-			   MSG_PRINTERDATA_INIT_RESET,
-			   (uint8 *)drivername, len+1);
-
 	return True;
 }
 
 /**********************************************************************
  callback to receive a MSG_PRINTERDATA_INIT_RESET message and interate
- over all printers, resetting printer data as neessary
+ over all printers, resetting printer data as neessary 
  **********************************************************************/
-
-void reset_all_printerdata(struct messaging_context *msg,
-			   void *private_data,
-			   uint32_t msg_type,
-			   struct server_id server_id,
-			   DATA_BLOB *data)
+ 
+void reset_all_printerdata(int msg_type, struct process_id src,
+			   void *buf, size_t len, void *private_data)
 {
 	fstring drivername;
 	int snum;
 	int n_services = lp_numservices();
-	size_t len;
-
-	len = MIN( data->length, sizeof(drivername)-1 );
-	strncpy( drivername, (const char *)data->data, len );
-
+	
+	len = MIN( len, sizeof(drivername)-1 );
+	strncpy( drivername, (const char *)buf, len );
+	
 	DEBUG(10,("reset_all_printerdata: Got message for new driver [%s]\n", drivername ));
 
 	/* Iterate the printer list */
-
+	
 	for ( snum=0; snum<n_services; snum++ )
 	{
-		if ( lp_snum_ok(snum) && lp_print_ok(snum) )
+		if ( lp_snum_ok(snum) && lp_print_ok(snum) ) 
 		{
 			WERROR result;
 			NT_PRINTER_INFO_LEVEL *printer = NULL;
-
+			
 			result = get_a_printer( NULL, &printer, 2, lp_const_servicename(snum) );
 			if ( !W_ERROR_IS_OK(result) )
 				continue;
-
-			/*
-			 * if the printer is bound to the driver,
-			 * then reset to the new driver initdata
+				
+			/* 
+			 * if the printer is bound to the driver, 
+			 * then reset to the new driver initdata 
 			 */
-
-			if ( printer && printer->info_2 && !strcmp(drivername, printer->info_2->drivername) )
+			
+			if ( printer && printer->info_2 && !strcmp(drivername, printer->info_2->drivername) ) 
 			{
 				DEBUG(6,("reset_all_printerdata: Updating printer [%s]\n", printer->info_2->printername));
-
+				
 				if ( !set_driver_init(printer, 2) ) {
 					DEBUG(5,("reset_all_printerdata: Error resetting printer data for printer [%s], driver [%s]!\n",
 						printer->info_2->printername, printer->info_2->drivername));
-				}
-
+				}	
+				
 				result = mod_a_printer( printer, 2 );
 				if ( !W_ERROR_IS_OK(result) ) {
-					DEBUG(3,("reset_all_printerdata: mod_a_printer() failed!  (%s)\n",
+					DEBUG(3,("reset_all_printerdata: mod_a_printer() failed!  (%s)\n", 
 						get_dos_error_msg(result)));
 				}
 			}
-
+			
 			free_a_printer( &printer, 2 );
 		}
 	}
-
-	/* all done */
-
+	
+	/* all done */	
+	
 	return;
 }
 
@@ -1408,17 +1384,17 @@
 
 	if (!devmode)
 		return NULL;
-
+		
 	DEBUG (8,("dup_devmode\n"));
-
+	
 	/* bulk copy first */
-
+	
 	d = (DEVICEMODE *)TALLOC_MEMDUP(ctx, devmode, sizeof(DEVICEMODE));
 	if (!d)
 		return NULL;
-
+		
 	/* dup the pointer members separately */
-
+	
 	len = unistrlen(devmode->devicename.buffer);
 	if (len != -1) {
 		d->devicename.buffer = TALLOC_ARRAY(ctx, uint16, len);
@@ -1428,8 +1404,8 @@
 		if (unistrcpy(d->devicename.buffer, devmode->devicename.buffer) != len)
 			return NULL;
 	}
+		
 
-
 	len = unistrlen(devmode->formname.buffer);
 	if (len != -1) {
 		d->formname.buffer = TALLOC_ARRAY(ctx, uint16, len);
@@ -1445,7 +1421,7 @@
 						devmode->driverextra);
 		if (!d->dev_private) {
 			return NULL;
-		}
+		}	
 	} else {
 		d->dev_private = NULL;
 	}
@@ -1456,12 +1432,12 @@
 {
 	if (!new_ctr || !ctr)
 		return;
-
+		
 	DEBUG(8,("copy_devmode_ctr\n"));
-
+	
 	new_ctr->size = ctr->size;
 	new_ctr->devmode_ptr = ctr->devmode_ptr;
-
+	
 	if(ctr->devmode_ptr)
 		new_ctr->devmode = dup_devicemode(ctx, ctr->devmode);
 }
@@ -1470,21 +1446,21 @@
 {
 	if (!new_def || !def)
 		return;
-
+	
 	DEBUG(8,("copy_printer_defaults\n"));
-
+	
 	new_def->datatype_ptr = def->datatype_ptr;
-
+	
 	if (def->datatype_ptr)
 		copy_unistr2(&new_def->datatype, &def->datatype);
-
+	
 	copy_devmode_ctr(ctx, &new_def->devmode_cont, &def->devmode_cont);
-
+	
 	new_def->access_required = def->access_required;
 }
 
 /********************************************************************
- * Convert a SPOOL_Q_OPEN_PRINTER structure to a
+ * Convert a SPOOL_Q_OPEN_PRINTER structure to a 
  * SPOOL_Q_OPEN_PRINTER_EX structure
  ********************************************************************/
 
@@ -1494,14 +1470,14 @@
 		return WERR_OK;
 
 	DEBUG(8,("convert_to_openprinterex\n"));
-
+				
 	if ( q_u->printername ) {
 		q_u_ex->printername = TALLOC_ZERO_P( ctx, UNISTR2 );
 		if (q_u_ex->printername == NULL)
 			return WERR_NOMEM;
 		copy_unistr2(q_u_ex->printername, q_u->printername);
 	}
-
+	
 	copy_printer_default(ctx, &q_u_ex->printer_default, &q_u->printer_default);
 
 	return WERR_OK;
@@ -1517,32 +1493,25 @@
 {
 	SPOOL_Q_OPEN_PRINTER_EX q_u_ex;
 	SPOOL_R_OPEN_PRINTER_EX r_u_ex;
-
+	
 	if (!q_u || !r_u)
 		return WERR_NOMEM;
-
+	
 	ZERO_STRUCT(q_u_ex);
 	ZERO_STRUCT(r_u_ex);
-
+	
 	/* convert the OpenPrinter() call to OpenPrinterEx() */
-
+	
 	r_u_ex.status = convert_to_openprinterex(p->mem_ctx, &q_u_ex, q_u);
 	if (!W_ERROR_IS_OK(r_u_ex.status))
 		return r_u_ex.status;
-
+	
 	r_u_ex.status = _spoolss_open_printer_ex(p, &q_u_ex, &r_u_ex);
-
+	
 	/* convert back to OpenPrinter() */
-
+	
 	memcpy(r_u, &r_u_ex, sizeof(*r_u));
-
-	if (W_ERROR_EQUAL(r_u->status, WERR_INVALID_PARAM)) {
-		/* OpenPrinterEx returns this for a bad
-		 * printer name. We must return WERR_INVALID_PRINTER_NAME
-		 * instead.
-		 */
-		r_u->status = WERR_INVALID_PRINTER_NAME;
-	}
+	
 	return r_u->status;
 }
 
@@ -1556,31 +1525,32 @@
 
 	fstring name;
 	int snum;
+	struct current_user user;
 	Printer_entry *Printer=NULL;
 
-	if (!q_u->printername) {
-		return WERR_INVALID_PARAM;
-	}
+	if ( !q_u->printername )
+		return WERR_INVALID_PRINTER_NAME;
 
 	/* some sanity check because you can open a printer or a print server */
 	/* aka: \\server\printer or \\server */
 
-	unistr2_to_ascii(name, q_u->printername, sizeof(name));
+	unistr2_to_ascii(name, q_u->printername, sizeof(name)-1);
 
 	DEBUGADD(3,("checking name: %s\n",name));
 
-	if (!open_printer_hnd(p, handle, name, 0)) {
-		return WERR_INVALID_PARAM;
-	}
-
+	if (!open_printer_hnd(p, handle, name, 0))
+		return WERR_INVALID_PRINTER_NAME;
+	
 	Printer=find_printer_index_by_hnd(p, handle);
 	if ( !Printer ) {
 		DEBUG(0,(" _spoolss_open_printer_ex: logic error.  Can't find printer "
 			"handle we created for printer %s\n", name ));
 		close_printer_handle(p,handle);
-		return WERR_INVALID_PARAM;
+		return WERR_INVALID_PRINTER_NAME;
 	}
 
+	get_current_user(&user, p);
+
 	/*
 	 * First case: the user is opening the print server:
 	 *
@@ -1596,16 +1566,16 @@
 	 *
 	 * Note: this test needs code to check access rights here too. Jeremy
 	 * could you look at this?
-	 *
+	 * 
 	 * Second case: the user is opening a printer:
 	 * NT doesn't let us connect to a printer if the connecting user
 	 * doesn't have print permission.
-	 *
+	 * 
 	 * Third case: user is opening a Port Monitor
 	 * access checks same as opening a handle to the print server.
 	 */
 
-	switch (Printer->printer_type )
+	switch (Printer->printer_type ) 
 	{
 	case SPLHND_SERVER:
 	case SPLHND_PORTMON_TCP:
@@ -1615,10 +1585,10 @@
 		snum = -1;
 
 		/* Map standard access rights to object specific access rights */
-
-		se_map_standard(&printer_default->access_required,
+		
+		se_map_standard(&printer_default->access_required, 
 				&printserver_std_mapping);
-
+	
 		/* Deny any object specific bits that don't apply to print
 		   servers (i.e printer and job specific bits) */
 
@@ -1633,7 +1603,7 @@
 
 		/* Allow admin access */
 
-		if ( printer_default->access_required & SERVER_ACCESS_ADMINISTER )
+		if ( printer_default->access_required & SERVER_ACCESS_ADMINISTER ) 
 		{
 			SE_PRIV se_printop = SE_PRINT_OPERATOR;
 
@@ -1644,18 +1614,18 @@
 
 			/* if the user is not root, doesn't have SE_PRINT_OPERATOR privilege,
 			   and not a printer admin, then fail */
-
-			if ((p->pipe_user.ut.uid != 0) &&
-			    !user_has_privileges(p->pipe_user.nt_user_token,
+			
+			if ((user.ut.uid != 0) &&
+			    !user_has_privileges(user.nt_user_token,
 						 &se_printop ) &&
 			    !token_contains_name_in_list(
-				    uidtoname(p->pipe_user.ut.uid), NULL,
-				    p->pipe_user.nt_user_token,
+				    uidtoname(user.ut.uid), NULL,
+				    user.nt_user_token,
 				    lp_printer_admin(snum))) {
 				close_printer_handle(p, handle);
 				return WERR_ACCESS_DENIED;
 			}
-
+			
 			printer_default->access_required = SERVER_ACCESS_ADMINISTER;
 		}
 		else
@@ -1663,9 +1633,9 @@
 			printer_default->access_required = SERVER_ACCESS_ENUMERATE;
 		}
 
-		DEBUG(4,("Setting print server access = %s\n", (printer_default->access_required == SERVER_ACCESS_ADMINISTER)
+		DEBUG(4,("Setting print server access = %s\n", (printer_default->access_required == SERVER_ACCESS_ADMINISTER) 
 			? "SERVER_ACCESS_ADMINISTER" : "SERVER_ACCESS_ENUMERATE" ));
-
+			
 		/* We fall through to return WERR_OK */
 		break;
 
@@ -1673,13 +1643,13 @@
 		/* NT doesn't let us connect to a printer if the connecting user
 		   doesn't have print permission.  */
 
-		if (!get_printer_snum(p, handle, &snum, NULL)) {
+		if (!get_printer_snum(p, handle, &snum)) {
 			close_printer_handle(p, handle);
 			return WERR_BADFID;
 		}
 
 		se_map_standard(&printer_default->access_required, &printer_std_mapping);
-
+		
 		/* map an empty access mask to the minimum access mask */
 		if (printer_default->access_required == 0x0)
 			printer_default->access_required = PRINTER_ACCESS_USE;
@@ -1687,25 +1657,25 @@
 		/*
 		 * If we are not serving the printer driver for this printer,
 		 * map PRINTER_ACCESS_ADMINISTER to PRINTER_ACCESS_USE.  This
-		 * will keep NT clients happy  --jerry
+		 * will keep NT clients happy  --jerry	
 		 */
-
-		if (lp_use_client_driver(snum)
+		 
+		if (lp_use_client_driver(snum) 
 			&& (printer_default->access_required & PRINTER_ACCESS_ADMINISTER))
 		{
 			printer_default->access_required = PRINTER_ACCESS_USE;
 		}
 
 		/* check smb.conf parameters and the the sec_desc */
-
-		if ( !check_access(smbd_server_fd(), lp_hostsallow(snum), lp_hostsdeny(snum)) ) {
+		
+		if ( !check_access(smbd_server_fd(), lp_hostsallow(snum), lp_hostsdeny(snum)) ) {    
 			DEBUG(3, ("access DENIED (hosts allow/deny) for printer open\n"));
 			return WERR_ACCESS_DENIED;
 		}
 
-		if (!user_ok_token(uidtoname(p->pipe_user.ut.uid),
-				   p->pipe_user.nt_user_token, snum) ||
-		    !print_access_check(&p->pipe_user, snum,
+		if (!user_ok_token(uidtoname(user.ut.uid), user.nt_user_token,
+				   snum) ||
+		    !print_access_check(&user, snum,
 					printer_default->access_required)) {
 			DEBUG(3, ("access DENIED for printer open\n"));
 			close_printer_handle(p, handle);
@@ -1723,7 +1693,7 @@
 		else
 			printer_default->access_required = PRINTER_ACCESS_USE;
 
-		DEBUG(4,("Setting printer access = %s\n", (printer_default->access_required == PRINTER_ACCESS_ADMINISTER)
+		DEBUG(4,("Setting printer access = %s\n", (printer_default->access_required == PRINTER_ACCESS_ADMINISTER) 
 			? "PRINTER_ACCESS_ADMINISTER" : "PRINTER_ACCESS_USE" ));
 
 		break;
@@ -1732,26 +1702,26 @@
 		/* sanity check to prevent programmer error */
 		return WERR_BADFID;
 	}
-
+	
 	Printer->access_granted = printer_default->access_required;
-
-	/*
+	
+	/* 
 	 * If the client sent a devmode in the OpenPrinter() call, then
 	 * save it here in case we get a job submission on this handle
 	 */
-
+	
 	 if ( (Printer->printer_type != SPLHND_SERVER)
 	 	&& q_u->printer_default.devmode_cont.devmode_ptr )
-	 {
+	 { 
 	 	convert_devicemode( Printer->sharename, q_u->printer_default.devmode_cont.devmode,
 			&Printer->nt_devmode );
 	 }
 
 #if 0	/* JERRY -- I'm doubtful this is really effective */
-	/* HACK ALERT!!! Sleep for 1/3 of a second to try trigger a LAN/WAN
+	/* HACK ALERT!!! Sleep for 1/3 of a second to try trigger a LAN/WAN 
 	   optimization in Windows 2000 clients  --jerry */
 
-	if ( (printer_default->access_required == PRINTER_ACCESS_ADMINISTER)
+	if ( (printer_default->access_required == PRINTER_ACCESS_ADMINISTER) 
 		&& (RA_WIN2K == get_remote_arch()) )
 	{
 		DEBUG(10,("_spoolss_open_printer_ex: Enabling LAN/WAN hack for Win2k clients.\n"));
@@ -1765,15 +1735,15 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool convert_printer_info(const SPOOL_PRINTER_INFO_LEVEL *uni,
+static BOOL convert_printer_info(const SPOOL_PRINTER_INFO_LEVEL *uni,
 				NT_PRINTER_INFO_LEVEL *printer, uint32 level)
 {
-	bool ret;
+	BOOL ret;
 
 	switch (level) {
 		case 2:
-			/* allocate memory if needed.  Messy because
-			   convert_printer_info is used to update an existing
+			/* allocate memory if needed.  Messy because 
+			   convert_printer_info is used to update an existing 
 			   printer or build a new one */
 
 			if ( !printer->info_2 ) {
@@ -1793,10 +1763,10 @@
 	return False;
 }
 
-static bool convert_printer_driver_info(const SPOOL_PRINTER_DRIVER_INFO_LEVEL *uni,
+static BOOL convert_printer_driver_info(const SPOOL_PRINTER_DRIVER_INFO_LEVEL *uni,
                                  	NT_PRINTER_DRIVER_INFO_LEVEL *printer, uint32 level)
 {
-	bool result = True;
+	BOOL result = True;
 
 	switch (level) {
 		case 3:
@@ -1816,7 +1786,7 @@
 	return result;
 }
 
-bool convert_devicemode(const char *printername, const DEVICEMODE *devmode,
+BOOL convert_devicemode(const char *printername, const DEVICEMODE *devmode,
 				NT_DEVICEMODE **pp_nt_devmode)
 {
 	NT_DEVICEMODE *nt_devmode = *pp_nt_devmode;
@@ -1825,7 +1795,7 @@
 	 * Ensure nt_devmode is a valid pointer
 	 * as we will be overwriting it.
 	 */
-
+		
 	if (nt_devmode == NULL) {
 		DEBUG(5, ("convert_devicemode: allocating a generic devmode\n"));
 		if ((nt_devmode = construct_nt_devicemode(printername)) == NULL)
@@ -1899,8 +1869,8 @@
 		DEBUG(2,("_spoolss_enddocprinter_internal: Invalid handle (%s:%u:%u)\n", OUR_HANDLE(handle)));
 		return WERR_BADFID;
 	}
-
-	if (!get_printer_snum(p, handle, &snum, NULL))
+	
+	if (!get_printer_snum(p, handle, &snum))
 		return WERR_BADFID;
 
 	Printer->document_started=False;
@@ -1924,9 +1894,9 @@
 		_spoolss_enddocprinter_internal(p, handle);          /* print job was not closed */
 
 	if (!close_printer_handle(p, handle))
-		return WERR_BADFID;
-
-	/* clear the returned printer handle.  Observed behavior
+		return WERR_BADFID;	
+		
+	/* clear the returned printer handle.  Observed behavior 
 	   from Win2k server.  Don't think this really matters.
 	   Previous code just copied the value of the closed
 	   handle.    --jerry */
@@ -1968,23 +1938,23 @@
 {
 	int i;
 	struct table_node archi_table[]= {
-
+ 
 	        {"Windows 4.0",          "WIN40",       0 },
 	        {"Windows NT x86",       "W32X86",      2 },
-	        {"Windows NT R4000",     "W32MIPS",     2 },
+	        {"Windows NT R4000",     "W32MIPS",     2 },	
 	        {"Windows NT Alpha_AXP", "W32ALPHA",    2 },
 	        {"Windows NT PowerPC",   "W32PPC",      2 },
 		{"Windows IA64",         "IA64",        3 },
 		{"Windows x64",          "x64",         3 },
 	        {NULL,                   "",            -1 }
 	};
-
+ 
 	for (i=0; archi_table[i].long_archi != NULL; i++)
 	{
 		if (strcmp(arch, archi_table[i].long_archi) == 0)
 			return (archi_table[i].version);
         }
-
+	
 	return -1;
 }
 
@@ -1999,36 +1969,39 @@
 	NT_PRINTER_DRIVER_INFO_LEVEL	info;
 	NT_PRINTER_DRIVER_INFO_LEVEL	info_win2k;
 	int				version;
+	struct current_user		user;
 	WERROR				status;
 	WERROR				status_win2k = WERR_ACCESS_DENIED;
-	SE_PRIV                         se_printop = SE_PRINT_OPERATOR;
-
+	SE_PRIV                         se_printop = SE_PRINT_OPERATOR;	
+	
+	get_current_user(&user, p);
+	 
 	/* if the user is not root, doesn't have SE_PRINT_OPERATOR privilege,
 	   and not a printer admin, then fail */
-
-	if ( (p->pipe_user.ut.uid != 0)
-		&& !user_has_privileges(p->pipe_user.nt_user_token, &se_printop )
-		&& !token_contains_name_in_list( uidtoname(p->pipe_user.ut.uid),
-		    NULL, p->pipe_user.nt_user_token, lp_printer_admin(-1)) )
+			
+	if ( (user.ut.uid != 0) 
+		&& !user_has_privileges(user.nt_user_token, &se_printop ) 
+		&& !token_contains_name_in_list( uidtoname(user.ut.uid), 
+		    NULL, user.nt_user_token, lp_printer_admin(-1)) ) 
 	{
 		return WERR_ACCESS_DENIED;
 	}
 
-	unistr2_to_ascii(driver, &q_u->driver, sizeof(driver));
-	unistr2_to_ascii(arch,   &q_u->arch,   sizeof(arch));
-
+	unistr2_to_ascii(driver, &q_u->driver, sizeof(driver)-1 );
+	unistr2_to_ascii(arch,   &q_u->arch,   sizeof(arch)-1   );
+	
 	/* check that we have a valid driver name first */
-
-	if ((version=get_version_id(arch)) == -1)
+	
+	if ((version=get_version_id(arch)) == -1) 
 		return WERR_INVALID_ENVIRONMENT;
-
+				
 	ZERO_STRUCT(info);
 	ZERO_STRUCT(info_win2k);
-
-	if (!W_ERROR_IS_OK(get_a_printer_driver(&info, 3, driver, arch, version)))
+	
+	if (!W_ERROR_IS_OK(get_a_printer_driver(&info, 3, driver, arch, version))) 
 	{
 		/* try for Win2k driver if "Windows NT x86" */
-
+		
 		if ( version == 2 ) {
 			version = 3;
 			if (!W_ERROR_IS_OK(get_a_printer_driver(&info, 3, driver, arch, version))) {
@@ -2041,24 +2014,24 @@
 			status = WERR_UNKNOWN_PRINTER_DRIVER;
 			goto done;
 		}
-
+		
 	}
-
+	
 	if (printer_driver_in_use(info.info_3)) {
 		status = WERR_PRINTER_DRIVER_IN_USE;
 		goto done;
 	}
-
+	
 	if ( version == 2 )
-	{
+	{		
 		if (W_ERROR_IS_OK(get_a_printer_driver(&info_win2k, 3, driver, arch, 3)))
 		{
 			/* if we get to here, we now have 2 driver info structures to remove */
 			/* remove the Win2k driver first*/
-
-			status_win2k = delete_printer_driver(info_win2k.info_3, &p->pipe_user, 3, False );
+		
+			status_win2k = delete_printer_driver(info_win2k.info_3, &user, 3, False );
 			free_a_printer_driver( info_win2k, 3 );
-
+		
 			/* this should not have failed---if it did, report to client */
 			if ( !W_ERROR_IS_OK(status_win2k) )
 			{
@@ -2067,14 +2040,14 @@
 			}
 		}
 	}
-
-	status = delete_printer_driver(info.info_3, &p->pipe_user, version, False);
-
+	
+	status = delete_printer_driver(info.info_3, &user, version, False);
+	
 	/* if at least one of the deletes succeeded return OK */
-
+	
 	if ( W_ERROR_IS_OK(status) || W_ERROR_IS_OK(status_win2k) )
 		status = WERR_OK;
-
+	
 done:
 	free_a_printer_driver( info, 3 );
 
@@ -2093,120 +2066,123 @@
 	NT_PRINTER_DRIVER_INFO_LEVEL	info_win2k;
 	int				version;
 	uint32				flags = q_u->delete_flags;
-	bool				delete_files;
+	BOOL				delete_files;
+	struct current_user		user;
 	WERROR				status;
 	WERROR				status_win2k = WERR_ACCESS_DENIED;
-	SE_PRIV                         se_printop = SE_PRINT_OPERATOR;
-
+	SE_PRIV                         se_printop = SE_PRINT_OPERATOR;	
+	
+	get_current_user(&user, p);
+	
 	/* if the user is not root, doesn't have SE_PRINT_OPERATOR privilege,
 	   and not a printer admin, then fail */
-
-	if ( (p->pipe_user.ut.uid != 0)
-		&& !user_has_privileges(p->pipe_user.nt_user_token, &se_printop )
-		&& !token_contains_name_in_list( uidtoname(p->pipe_user.ut.uid),
-		    NULL, p->pipe_user.nt_user_token, lp_printer_admin(-1)) )
+			
+	if ( (user.ut.uid != 0) 
+		&& !user_has_privileges(user.nt_user_token, &se_printop ) 
+		&& !token_contains_name_in_list( uidtoname(user.ut.uid), 
+		    NULL, user.nt_user_token, lp_printer_admin(-1)) ) 
 	{
 		return WERR_ACCESS_DENIED;
 	}
+	
+	unistr2_to_ascii(driver, &q_u->driver, sizeof(driver)-1 );
+	unistr2_to_ascii(arch,   &q_u->arch,   sizeof(arch)-1   );
 
-	unistr2_to_ascii(driver, &q_u->driver, sizeof(driver));
-	unistr2_to_ascii(arch,   &q_u->arch,   sizeof(arch));
-
 	/* check that we have a valid driver name first */
 	if ((version=get_version_id(arch)) == -1) {
 		/* this is what NT returns */
 		return WERR_INVALID_ENVIRONMENT;
 	}
-
+	
 	if ( flags & DPD_DELETE_SPECIFIC_VERSION )
 		version = q_u->version;
-
+		
 	ZERO_STRUCT(info);
 	ZERO_STRUCT(info_win2k);
-
+		
 	status = get_a_printer_driver(&info, 3, driver, arch, version);
-
-	if ( !W_ERROR_IS_OK(status) )
+	
+	if ( !W_ERROR_IS_OK(status) ) 
 	{
-		/*
-		 * if the client asked for a specific version,
+		/* 
+		 * if the client asked for a specific version, 
 		 * or this is something other than Windows NT x86,
-		 * then we've failed
+		 * then we've failed 
 		 */
-
+		
 		if ( (flags&DPD_DELETE_SPECIFIC_VERSION) || (version !=2) )
 			goto done;
-
+			
 		/* try for Win2k driver if "Windows NT x86" */
-
+		
 		version = 3;
 		if (!W_ERROR_IS_OK(get_a_printer_driver(&info, 3, driver, arch, version))) {
 			status = WERR_UNKNOWN_PRINTER_DRIVER;
 			goto done;
 		}
 	}
-
+		
 	if ( printer_driver_in_use(info.info_3) ) {
 		status = WERR_PRINTER_DRIVER_IN_USE;
 		goto done;
 	}
-
-	/*
-	 * we have a couple of cases to consider.
+	
+	/* 
+	 * we have a couple of cases to consider. 
 	 * (1) Are any files in use?  If so and DPD_DELTE_ALL_FILE is set,
-	 *     then the delete should fail if **any** files overlap with
-	 *     other drivers
+	 *     then the delete should fail if **any** files overlap with 
+	 *     other drivers 
 	 * (2) If DPD_DELTE_UNUSED_FILES is sert, then delete all
-	 *     non-overlapping files
+	 *     non-overlapping files 
 	 * (3) If neither DPD_DELTE_ALL_FILE nor DPD_DELTE_ALL_FILES
 	 *     is set, the do not delete any files
 	 * Refer to MSDN docs on DeletePrinterDriverEx() for details.
 	 */
-
+	
 	delete_files = flags & (DPD_DELETE_ALL_FILES|DPD_DELETE_UNUSED_FILES);
-
+	
 	/* fail if any files are in use and DPD_DELETE_ALL_FILES is set */
-
+		
 	if ( delete_files && printer_driver_files_in_use(info.info_3) & (flags&DPD_DELETE_ALL_FILES) ) {
 		/* no idea of the correct error here */
-		status = WERR_ACCESS_DENIED;
+		status = WERR_ACCESS_DENIED;	
 		goto done;
 	}
 
-
+			
 	/* also check for W32X86/3 if necessary; maybe we already have? */
-
+		
 	if ( (version == 2) && ((flags&DPD_DELETE_SPECIFIC_VERSION) != DPD_DELETE_SPECIFIC_VERSION)  ) {
-		if (W_ERROR_IS_OK(get_a_printer_driver(&info_win2k, 3, driver, arch, 3)))
+		if (W_ERROR_IS_OK(get_a_printer_driver(&info_win2k, 3, driver, arch, 3))) 
 		{
-
+			
 			if ( delete_files && printer_driver_files_in_use(info_win2k.info_3) & (flags&DPD_DELETE_ALL_FILES) ) {
 				/* no idea of the correct error here */
 				free_a_printer_driver( info_win2k, 3 );
-				status = WERR_ACCESS_DENIED;
+				status = WERR_ACCESS_DENIED;	
 				goto done;
 			}
-
+		
 			/* if we get to here, we now have 2 driver info structures to remove */
 			/* remove the Win2k driver first*/
-
-			status_win2k = delete_printer_driver(info_win2k.info_3, &p->pipe_user, 3, delete_files);
+		
+			status_win2k = delete_printer_driver(info_win2k.info_3, &user, 3, delete_files);
 			free_a_printer_driver( info_win2k, 3 );
-
+				
 			/* this should not have failed---if it did, report to client */
-
+				
 			if ( !W_ERROR_IS_OK(status_win2k) )
 				goto done;
 		}
 	}
 
-	status = delete_printer_driver(info.info_3, &p->pipe_user, version, delete_files);
+	status = delete_printer_driver(info.info_3, &user, version, delete_files);
 
 	if ( W_ERROR_IS_OK(status) || W_ERROR_IS_OK(status_win2k) )
 		status = WERR_OK;
 done:
 	free_a_printer_driver( info, 3 );
-
+	
 	return status;
 }
 
@@ -2215,28 +2191,28 @@
  Internal routine for retreiving printerdata
  ***************************************************************************/
 
-static WERROR get_printer_dataex( TALLOC_CTX *ctx, NT_PRINTER_INFO_LEVEL *printer,
-                                  const char *key, const char *value, uint32 *type, uint8 **data,
+static WERROR get_printer_dataex( TALLOC_CTX *ctx, NT_PRINTER_INFO_LEVEL *printer, 
+                                  const char *key, const char *value, uint32 *type, uint8 **data, 
 				  uint32 *needed, uint32 in_size  )
 {
 	REGISTRY_VALUE 		*val;
 	uint32			size;
 	int			data_len;
-
+	
 	if ( !(val = get_printer_data( printer->info_2, key, value)) )
 		return WERR_BADFILE;
-
+	
 	*type = regval_type( val );
 
 	DEBUG(5,("get_printer_dataex: allocating %d\n", in_size));
 
 	size = regval_size( val );
-
+	
 	/* copy the min(in_size, len) */
-
+	
 	if ( in_size ) {
 		data_len = (size > in_size) ? in_size : size*sizeof(uint8);
-
+		
 		/* special case for 0 length values */
 		if ( data_len ) {
 			if ( (*data  = (uint8 *)TALLOC_MEMDUP(ctx, regval_data_p(val), data_len)) == NULL )
@@ -2251,7 +2227,7 @@
 		*data = NULL;
 
 	*needed = size;
-
+	
 	DEBUG(5,("get_printer_dataex: copy done\n"));
 
 	return WERR_OK;
@@ -2270,7 +2246,7 @@
  Internal routine for storing printerdata
  ***************************************************************************/
 
-WERROR set_printer_dataex( NT_PRINTER_INFO_LEVEL *printer, const char *key, const char *value,
+WERROR set_printer_dataex( NT_PRINTER_INFO_LEVEL *printer, const char *key, const char *value, 
                                   uint32 type, uint8 *data, int real_len  )
 {
 	/* the registry objects enforce uniqueness based on value name */
@@ -2283,11 +2259,11 @@
 ********************************************************************/
 
 static WERROR getprinterdata_printer_server(TALLOC_CTX *ctx, fstring value, uint32 *type, uint8 **data, uint32 *needed, uint32 in_size)
-{
+{		
 	int i;
-
+	
 	DEBUG(8,("getprinterdata_printer_server:%s\n", value));
-
+		
 	if (!StrCaseCmp(value, "W3SvcInstalled")) {
 		*type = REG_DWORD;
 		if ( !(*data = TALLOC_ARRAY(ctx, uint8, sizeof(uint32) )) )
@@ -2302,7 +2278,7 @@
 		if ( !(*data = TALLOC_ARRAY(ctx, uint8, sizeof(uint32) )) )
 			return WERR_NOMEM;
 		SIVAL(*data, 0, 0x00);
-		*needed = 0x4;
+		*needed = 0x4;			
 		return WERR_OK;
 	}
 
@@ -2312,7 +2288,7 @@
 			return WERR_NOMEM;
 		/* formally was 0x1b */
 		SIVAL(*data, 0, 0x0);
-		*needed = 0x4;
+		*needed = 0x4;			
 		return WERR_OK;
 	}
 
@@ -2339,7 +2315,7 @@
 			SIVAL(*data, 0, 2);
 		else
 			SIVAL(*data, 0, 3);
-
+		
 		*needed = 0x4;
 		return WERR_OK;
 	}
@@ -2371,9 +2347,9 @@
 		SIVAL(*data, 4, 5);		/* Windows 2000 == 5.0 */
 		SIVAL(*data, 8, 0);
 		SIVAL(*data, 12, 2195);		/* build */
-
+		
 		/* leave extra string empty */
-
+		
 		return WERR_OK;
 	}
 
@@ -2381,30 +2357,30 @@
    	if (!StrCaseCmp(value, "DefaultSpoolDirectory")) {
 		const char *string="C:\\PRINTERS";
 		*type = REG_SZ;
-		*needed = 2*(strlen(string)+1);
+		*needed = 2*(strlen(string)+1);		
 		if((*data  = (uint8 *)TALLOC(ctx, (*needed > in_size) ? *needed:in_size )) == NULL)
 			return WERR_NOMEM;
 		memset(*data, 0, (*needed > in_size) ? *needed:in_size);
-
+		
 		/* it's done by hand ready to go on the wire */
 		for (i=0; i<strlen(string); i++) {
 			(*data)[2*i]=string[i];
 			(*data)[2*i+1]='\0';
-		}
+		}			
 		return WERR_OK;
 	}
 
-	if (!StrCaseCmp(value, "Architecture")) {
+	if (!StrCaseCmp(value, "Architecture")) {			
 		const char *string="Windows NT x86";
 		*type = REG_SZ;
-		*needed = 2*(strlen(string)+1);
+		*needed = 2*(strlen(string)+1);	
 		if((*data  = (uint8 *)TALLOC(ctx, (*needed > in_size) ? *needed:in_size )) == NULL)
 			return WERR_NOMEM;
 		memset(*data, 0, (*needed > in_size) ? *needed:in_size);
 		for (i=0; i<strlen(string); i++) {
 			(*data)[2*i]=string[i];
 			(*data)[2*i+1]='\0';
-		}
+		}			
 		return WERR_OK;
 	}
 
@@ -2413,7 +2389,7 @@
 		if ( !(*data = TALLOC_ARRAY(ctx, uint8, sizeof(uint32) )) )
 			return WERR_NOMEM;
 
-		/* only show the publish check box if we are a
+		/* only show the publish check box if we are a 
 		   memeber of a AD domain */
 
 		if ( lp_security() == SEC_ADS )
@@ -2425,20 +2401,20 @@
 		return WERR_OK;
 	}
 
-	if (!StrCaseCmp(value, "DNSMachineName")) {
-		const char *hostname = get_mydnsfullname();
-
-		if (!hostname)
+	if (!StrCaseCmp(value, "DNSMachineName")) {			
+		pstring hostname;
+		
+		if (!get_mydnsfullname(hostname))
 			return WERR_BADFILE;
 		*type = REG_SZ;
-		*needed = 2*(strlen(hostname)+1);
+		*needed = 2*(strlen(hostname)+1);	
 		if((*data  = (uint8 *)TALLOC(ctx, (*needed > in_size) ? *needed:in_size )) == NULL)
 			return WERR_NOMEM;
 		memset(*data, 0, (*needed > in_size) ? *needed:in_size);
 		for (i=0; i<strlen(hostname); i++) {
 			(*data)[2*i]=hostname[i];
 			(*data)[2*i+1]='\0';
-		}
+		}			
 		return WERR_OK;
 	}
 
@@ -2464,7 +2440,7 @@
 	Printer_entry 	*Printer = find_printer_index_by_hnd(p, handle);
 	NT_PRINTER_INFO_LEVEL 	*printer = NULL;
 	int		snum = 0;
-
+	
 	/*
 	 * Reminder: when it's a string, the length is in BYTES
 	 * even if UNICODE is negociated.
@@ -2475,25 +2451,25 @@
 	*out_size = in_size;
 
 	/* in case of problem, return some default values */
-
+	
 	*needed = 0;
 	*type   = 0;
-
+	
 	DEBUG(4,("_spoolss_getprinterdata\n"));
-
+	
 	if ( !Printer ) {
 		DEBUG(2,("_spoolss_getprinterdata: Invalid handle (%s:%u:%u).\n", OUR_HANDLE(handle)));
 		status = WERR_BADFID;
 		goto done;
 	}
-
-	unistr2_to_ascii(value, valuename, sizeof(value));
-
+	
+	unistr2_to_ascii(value, valuename, sizeof(value)-1);
+	
 	if ( Printer->printer_type == SPLHND_SERVER )
 		status = getprinterdata_printer_server( p->mem_ctx, value, type, data, needed, *out_size );
 	else
 	{
-		if ( !get_printer_snum(p,handle, &snum, NULL) ) {
+		if ( !get_printer_snum(p,handle, &snum) ) {
 			status = WERR_BADFID;
 			goto done;
 		}
@@ -2520,30 +2496,30 @@
 
 	if (*needed > *out_size)
 		status = WERR_MORE_DATA;
-
+	
 done:
-	if ( !W_ERROR_IS_OK(status) )
+	if ( !W_ERROR_IS_OK(status) ) 
 	{
 		DEBUG(5, ("error %d: allocating %d\n", W_ERROR_V(status),*out_size));
-
+		
 		/* reply this param doesn't exist */
-
+		
 		if ( *out_size ) {
 			if((*data=(uint8 *)TALLOC_ZERO_ARRAY(p->mem_ctx, uint8, *out_size)) == NULL) {
-				if ( printer )
+				if ( printer ) 
 					free_a_printer( &printer, 2 );
 				return WERR_NOMEM;
-			}
+			} 
 		} else {
 			*data = NULL;
 		}
 	}
-
+	
 	/* cleanup & exit */
 
 	if ( printer )
 		free_a_printer( &printer, 2 );
-
+	
 	return status;
 }
 
@@ -2551,34 +2527,32 @@
  Connect to the client machine.
 **********************************************************/
 
-static bool spoolss_connect_to_client(struct rpc_pipe_client **pp_pipe,
-			struct sockaddr_storage *client_ss, const char *remote_machine)
+static BOOL spoolss_connect_to_client(struct rpc_pipe_client **pp_pipe,
+			struct in_addr *client_ip, const char *remote_machine)
 {
 	NTSTATUS ret;
 	struct cli_state *the_cli;
-	struct sockaddr_storage rm_addr;
+	struct in_addr rm_addr;
 
-	if ( is_zero_addr(client_ss) ) {
+	if ( is_zero_ip(*client_ip) ) {
 		if ( !resolve_name( remote_machine, &rm_addr, 0x20) ) {
 			DEBUG(2,("spoolss_connect_to_client: Can't resolve address for %s\n", remote_machine));
 			return False;
 		}
 
-		if (ismyaddr(&rm_addr)) {
+		if ( ismyip( rm_addr )) {
 			DEBUG(0,("spoolss_connect_to_client: Machine %s is one of our addresses. Cannot add to ourselves.\n", remote_machine));
 			return False;
 		}
 	} else {
-		char addr[INET6_ADDRSTRLEN];
-		rm_addr = *client_ss;
-		print_sockaddr(addr, sizeof(addr), &rm_addr);
+		rm_addr.s_addr = client_ip->s_addr;
 		DEBUG(5,("spoolss_connect_to_client: Using address %s (no name resolution necessary)\n",
-			addr));
+			inet_ntoa(*client_ip) ));
 	}
 
 	/* setup the connection */
 
-	ret = cli_full_connection( &the_cli, global_myname(), remote_machine,
+	ret = cli_full_connection( &the_cli, global_myname(), remote_machine, 
 		&rm_addr, 0, "IPC$", "IPC",
 		"", /* username */
 		"", /* domain */
@@ -2586,17 +2560,17 @@
 		0, lp_client_signing(), NULL );
 
 	if ( !NT_STATUS_IS_OK( ret ) ) {
-		DEBUG(2,("spoolss_connect_to_client: connection to [%s] failed!\n",
+		DEBUG(2,("spoolss_connect_to_client: connection to [%s] failed!\n", 
 			remote_machine ));
 		return False;
-	}
-
+	}	
+		
 	if ( the_cli->protocol != PROTOCOL_NT1 ) {
 		DEBUG(0,("spoolss_connect_to_client: machine %s didn't negotiate NT protocol.\n", remote_machine));
 		cli_shutdown(the_cli);
 		return False;
 	}
-
+    
 	/*
 	 * Ok - we have an anonymous connection to the IPC$ share.
 	 * Now start the NT Domain stuff :-).
@@ -2607,7 +2581,7 @@
 			remote_machine, nt_errstr(ret)));
 		cli_shutdown(the_cli);
 		return False;
-	}
+	} 
 
 	/* make sure to save the cli_state pointer.  Keep its own talloc_ctx */
 
@@ -2620,9 +2594,9 @@
  Connect to the client.
 ****************************************************************************/
 
-static bool srv_spoolss_replyopenprinter(int snum, const char *printer,
-					uint32 localprinter, uint32 type,
-					POLICY_HND *handle, struct sockaddr_storage *client_ss)
+static BOOL srv_spoolss_replyopenprinter(int snum, const char *printer, 
+					uint32 localprinter, uint32 type, 
+					POLICY_HND *handle, struct in_addr *client_ip)
 {
 	WERROR result;
 
@@ -2635,18 +2609,17 @@
 
 		fstrcpy(unix_printer, printer+2); /* the +2 is to strip the leading 2 backslashs */
 
-		if ( !spoolss_connect_to_client( &notify_cli_pipe, client_ss, unix_printer ))
+		if ( !spoolss_connect_to_client( &notify_cli_pipe, client_ip, unix_printer ))
 			return False;
-
-		messaging_register(smbd_messaging_context(), NULL,
-				   MSG_PRINTER_NOTIFY2,
-				   receive_notify2_message_list);
+			
+		message_register(MSG_PRINTER_NOTIFY2,
+				 receive_notify2_message_list, NULL);
 		/* Tell the connections db we're now interested in printer
 		 * notify messages. */
 		register_message_flags( True, FLAG_MSG_PRINT_NOTIFY );
 	}
 
-	/*
+	/* 
 	 * Tell the specific printing tdb we want messages for this printer
 	 * by registering our PID.
 	 */
@@ -2656,18 +2629,14 @@
 
 	smb_connections++;
 
-	result = rpccli_spoolss_reply_open_printer(notify_cli_pipe,
-			talloc_tos(),
-			printer,
-			localprinter,
-			type,
-			handle);
-
+	result = rpccli_spoolss_reply_open_printer(notify_cli_pipe, notify_cli_pipe->cli->mem_ctx, printer, localprinter, 
+			type, handle);
+			
 	if (!W_ERROR_IS_OK(result))
 		DEBUG(5,("srv_spoolss_reply_open_printer: Client RPC returned [%s]\n",
 			dos_errstr(result)));
 
-	return (W_ERROR_IS_OK(result));
+	return (W_ERROR_IS_OK(result));	
 }
 
 /********************************************************************
@@ -2675,7 +2644,7 @@
  * ReplyFindFirstPrinterChangeNotifyEx
  *
  * before replying OK: status=0 a rpc call is made to the workstation
- * asking ReplyOpenPrinter
+ * asking ReplyOpenPrinter 
  *
  * in fact ReplyOpenPrinter is the changenotify equivalent on the spoolss pipe
  * called from api_spoolss_rffpcnex
@@ -2690,7 +2659,7 @@
 	uint32 printerlocal = q_u->printerlocal;
 	int snum = -1;
 	SPOOL_NOTIFY_OPTION *option = q_u->option;
-	struct sockaddr_storage client_ss;
+	struct in_addr client_ip;
 
 	/* store the notify value in the printer struct */
 
@@ -2710,26 +2679,22 @@
 
 	Printer->notify.option=dup_spool_notify_option(option);
 
-	unistr2_to_ascii(Printer->notify.localmachine, localmachine,
-		       sizeof(Printer->notify.localmachine));
+	unistr2_to_ascii(Printer->notify.localmachine, localmachine, 
+		       sizeof(Printer->notify.localmachine)-1);
 
 	/* Connect to the client machine and send a ReplyOpenPrinter */
 
 	if ( Printer->printer_type == SPLHND_SERVER)
 		snum = -1;
 	else if ( (Printer->printer_type == SPLHND_PRINTER) &&
-			!get_printer_snum(p, handle, &snum, NULL) )
+			!get_printer_snum(p, handle, &snum) )
 		return WERR_BADFID;
+		
+	client_ip.s_addr = inet_addr(p->conn->client_address);
 
-	if (!interpret_string_addr(&client_ss,
-				p->conn->client_address,
-				AI_NUMERICHOST)) {
-		return WERR_SERVER_UNAVAILABLE;
-	}
-
 	if(!srv_spoolss_replyopenprinter(snum, Printer->notify.localmachine,
 					Printer->notify.printerlocal, 1,
-					&Printer->notify.client_hnd, &client_ss))
+					&Printer->notify.client_hnd, &client_ip))
 		return WERR_SERVER_UNAVAILABLE;
 
 	Printer->notify.client_connected=True;
@@ -2741,23 +2706,26 @@
  * fill a notify_info_data with the servername
  ********************************************************************/
 
-void spoolss_notify_server_name(int snum,
-				       SPOOL_NOTIFY_INFO_DATA *data,
+void spoolss_notify_server_name(int snum, 
+				       SPOOL_NOTIFY_INFO_DATA *data, 
 				       print_queue_struct *queue,
 				       NT_PRINTER_INFO_LEVEL *printer,
-				       TALLOC_CTX *mem_ctx)
+				       TALLOC_CTX *mem_ctx) 
 {
-	smb_ucs2_t *temp = NULL;
+	pstring temp;
 	uint32 len;
 
-	len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->servername);
-	if (len == (uint32)-1) {
-		len = 0;
-	}
+	len = rpcstr_push(temp, printer->info_2->servername, sizeof(temp)-2, STR_TERMINATE);
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)temp;
+		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
+		if (!data->notify_data.data.string) {
+			data->notify_data.data.length = 0;
+			return;
+		}
+	
+		memcpy(data->notify_data.data.string, temp, len);
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -2767,15 +2735,15 @@
  * fill a notify_info_data with the printername (not including the servername).
  ********************************************************************/
 
-void spoolss_notify_printer_name(int snum,
-					SPOOL_NOTIFY_INFO_DATA *data,
+void spoolss_notify_printer_name(int snum, 
+					SPOOL_NOTIFY_INFO_DATA *data, 
 					print_queue_struct *queue,
 					NT_PRINTER_INFO_LEVEL *printer,
 					TALLOC_CTX *mem_ctx)
 {
-	smb_ucs2_t *temp = NULL;
+	pstring temp;
 	uint32 len;
-
+		
 	/* the notify name should not contain the \\server\ part */
 	char *p = strrchr(printer->info_2->printername, '\\');
 
@@ -2785,14 +2753,16 @@
 		p++;
 	}
 
-	len = rpcstr_push_talloc(mem_ctx, &temp, p);
-	if (len == (uint32)-1) {
-		len = 0;
-	}
+	len = rpcstr_push(temp, p, sizeof(temp)-2, STR_TERMINATE);
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)temp;
+		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
+		if (!data->notify_data.data.string) {
+			data->notify_data.data.length = 0;
+			return;
+		}
+		memcpy(data->notify_data.data.string, temp, len);
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -2802,52 +2772,58 @@
  * fill a notify_info_data with the servicename
  ********************************************************************/
 
-void spoolss_notify_share_name(int snum,
-				      SPOOL_NOTIFY_INFO_DATA *data,
+void spoolss_notify_share_name(int snum, 
+				      SPOOL_NOTIFY_INFO_DATA *data, 
 				      print_queue_struct *queue,
 				      NT_PRINTER_INFO_LEVEL *printer,
 				      TALLOC_CTX *mem_ctx)
 {
-	smb_ucs2_t *temp = NULL;
+	pstring temp;
 	uint32 len;
 
-	len = rpcstr_push_talloc(mem_ctx, &temp, lp_servicename(snum));
-	if (len == (uint32)-1) {
-		len = 0;
-	}
+	len = rpcstr_push(temp, lp_servicename(snum), sizeof(temp)-2, STR_TERMINATE);
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)temp;
+		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
+		if (!data->notify_data.data.string) {
+			data->notify_data.data.length = 0;
+			return;
+		}
+		memcpy(data->notify_data.data.string, temp, len);
 	} else {
 		data->notify_data.data.string = NULL;
 	}
-
+	
 }
 
 /*******************************************************************
  * fill a notify_info_data with the port name
  ********************************************************************/
 
-void spoolss_notify_port_name(int snum,
-				     SPOOL_NOTIFY_INFO_DATA *data,
+void spoolss_notify_port_name(int snum, 
+				     SPOOL_NOTIFY_INFO_DATA *data, 
 				     print_queue_struct *queue,
 				     NT_PRINTER_INFO_LEVEL *printer,
 				     TALLOC_CTX *mem_ctx)
 {
-	smb_ucs2_t *temp = NULL;
+	pstring temp;
 	uint32 len;
 
 	/* even if it's strange, that's consistant in all the code */
 
-	len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->portname);
-	if (len == (uint32)-1) {
-		len = 0;
-	}
+	len = rpcstr_push(temp, printer->info_2->portname, sizeof(temp)-2, STR_TERMINATE);
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)temp;
+		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
+	
+		if (!data->notify_data.data.string) {
+			data->notify_data.data.length = 0;
+			return;
+		}
+	
+		memcpy(data->notify_data.data.string, temp, len);
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -2858,23 +2834,27 @@
  * but it doesn't exist, have to see what to do
  ********************************************************************/
 
-void spoolss_notify_driver_name(int snum,
+void spoolss_notify_driver_name(int snum, 
 				       SPOOL_NOTIFY_INFO_DATA *data,
 				       print_queue_struct *queue,
 				       NT_PRINTER_INFO_LEVEL *printer,
 				       TALLOC_CTX *mem_ctx)
 {
-	smb_ucs2_t *temp = NULL;
+	pstring temp;
 	uint32 len;
 
-	len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->drivername);
-	if (len == (uint32)-1) {
-		len = 0;
-	}
+	len = rpcstr_push(temp, printer->info_2->drivername, sizeof(temp)-2, STR_TERMINATE);
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)temp;
+		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
+	
+		if (!data->notify_data.data.string) {
+			data->notify_data.data.length = 0;
+			return;
+		}
+	
+		memcpy(data->notify_data.data.string, temp, len);
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -2884,26 +2864,30 @@
  * fill a notify_info_data with the comment
  ********************************************************************/
 
-void spoolss_notify_comment(int snum,
+void spoolss_notify_comment(int snum, 
 				   SPOOL_NOTIFY_INFO_DATA *data,
 				   print_queue_struct *queue,
 				   NT_PRINTER_INFO_LEVEL *printer,
 				   TALLOC_CTX *mem_ctx)
 {
-	smb_ucs2_t *temp = NULL;
+	pstring temp;
 	uint32 len;
 
 	if (*printer->info_2->comment == '\0')
-		len = rpcstr_push_talloc(mem_ctx, &temp, lp_comment(snum));
+		len = rpcstr_push(temp, lp_comment(snum), sizeof(temp)-2, STR_TERMINATE);
 	else
-		len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->comment);
+		len = rpcstr_push(temp, printer->info_2->comment, sizeof(temp)-2, STR_TERMINATE);
 
-	if (len == (uint32)-1) {
-		len = 0;
-	}
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)temp;
+		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
+	
+		if (!data->notify_data.data.string) {
+			data->notify_data.data.length = 0;
+			return;
+		}
+	
+		memcpy(data->notify_data.data.string, temp, len);
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -2914,23 +2898,27 @@
  * location = "Room 1, floor 2, building 3"
  ********************************************************************/
 
-void spoolss_notify_location(int snum,
+void spoolss_notify_location(int snum, 
 				    SPOOL_NOTIFY_INFO_DATA *data,
 				    print_queue_struct *queue,
 				    NT_PRINTER_INFO_LEVEL *printer,
 				    TALLOC_CTX *mem_ctx)
 {
-	smb_ucs2_t *temp = NULL;
+	pstring temp;
 	uint32 len;
 
-	len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->location);
-	if (len == (uint32)-1) {
-		len = 0;
-	}
+	len = rpcstr_push(temp, printer->info_2->location,sizeof(temp)-2, STR_TERMINATE);
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)temp;
+		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
+	
+		if (!data->notify_data.data.string) {
+			data->notify_data.data.length = 0;
+			return;
+		}
+	
+		memcpy(data->notify_data.data.string, temp, len);
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -2941,7 +2929,7 @@
  * jfm:xxxx don't to it for know but that's a real problem !!!
  ********************************************************************/
 
-static void spoolss_notify_devmode(int snum,
+static void spoolss_notify_devmode(int snum, 
 				   SPOOL_NOTIFY_INFO_DATA *data,
 				   print_queue_struct *queue,
 				   NT_PRINTER_INFO_LEVEL *printer,
@@ -2956,23 +2944,27 @@
  * fill a notify_info_data with the separator file name
  ********************************************************************/
 
-void spoolss_notify_sepfile(int snum,
-				   SPOOL_NOTIFY_INFO_DATA *data,
+void spoolss_notify_sepfile(int snum, 
+				   SPOOL_NOTIFY_INFO_DATA *data, 
 				   print_queue_struct *queue,
 				   NT_PRINTER_INFO_LEVEL *printer,
 				   TALLOC_CTX *mem_ctx)
 {
-	smb_ucs2_t *temp = NULL;
+	pstring temp;
 	uint32 len;
 
-	len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->sepfile);
-	if (len == (uint32)-1) {
-		len = 0;
-	}
+	len = rpcstr_push(temp, printer->info_2->sepfile, sizeof(temp)-2, STR_TERMINATE);
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)temp;
+		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
+	
+		if (!data->notify_data.data.string) {
+			data->notify_data.data.length = 0;
+			return;
+		}
+	
+		memcpy(data->notify_data.data.string, temp, len);
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -2983,23 +2975,27 @@
  * jfm:xxxx return always winprint to indicate we don't do anything to it
  ********************************************************************/
 
-void spoolss_notify_print_processor(int snum,
+void spoolss_notify_print_processor(int snum, 
 					   SPOOL_NOTIFY_INFO_DATA *data,
 					   print_queue_struct *queue,
 					   NT_PRINTER_INFO_LEVEL *printer,
 					   TALLOC_CTX *mem_ctx)
 {
-	smb_ucs2_t *temp = NULL;
+	pstring temp;
 	uint32 len;
 
-	len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->printprocessor);
-	if (len == (uint32)-1) {
-		len = 0;
-	}
+	len = rpcstr_push(temp,  printer->info_2->printprocessor, sizeof(temp)-2, STR_TERMINATE);
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)temp;
+		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
+	
+		if (!data->notify_data.data.string) {
+			data->notify_data.data.length = 0;
+			return;
+		}
+	
+		memcpy(data->notify_data.data.string, temp, len);
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -3010,23 +3006,27 @@
  * jfm:xxxx send an empty string
  ********************************************************************/
 
-void spoolss_notify_parameters(int snum,
+void spoolss_notify_parameters(int snum, 
 				      SPOOL_NOTIFY_INFO_DATA *data,
 				      print_queue_struct *queue,
 				      NT_PRINTER_INFO_LEVEL *printer,
 				      TALLOC_CTX *mem_ctx)
 {
-	smb_ucs2_t *temp = NULL;
+	pstring temp;
 	uint32 len;
 
-	len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->parameters);
-	if (len == (uint32)-1) {
-		len = 0;
-	}
+	len = rpcstr_push(temp,  printer->info_2->parameters, sizeof(temp)-2, STR_TERMINATE);
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)temp;
+		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
+	
+		if (!data->notify_data.data.string) {
+			data->notify_data.data.length = 0;
+			return;
+		}
+	
+		memcpy(data->notify_data.data.string, temp, len);
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -3037,23 +3037,27 @@
  * jfm:xxxx always send RAW as data type
  ********************************************************************/
 
-void spoolss_notify_datatype(int snum,
+void spoolss_notify_datatype(int snum, 
 				    SPOOL_NOTIFY_INFO_DATA *data,
 				    print_queue_struct *queue,
 				    NT_PRINTER_INFO_LEVEL *printer,
 				    TALLOC_CTX *mem_ctx)
 {
-	smb_ucs2_t *temp = NULL;
+	pstring temp;
 	uint32 len;
 
-	len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->datatype);
-	if (len == (uint32)-1) {
-		len = 0;
-	}
+	len = rpcstr_push(temp, printer->info_2->datatype, sizeof(pstring)-2, STR_TERMINATE);
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)temp;
+		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
+	
+		if (!data->notify_data.data.string) {
+			data->notify_data.data.length = 0;
+			return;
+		}
+	
+		memcpy(data->notify_data.data.string, temp, len);
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -3065,14 +3069,14 @@
  * have to implement security before !
  ********************************************************************/
 
-static void spoolss_notify_security_desc(int snum,
+static void spoolss_notify_security_desc(int snum, 
 					 SPOOL_NOTIFY_INFO_DATA *data,
 					 print_queue_struct *queue,
 					 NT_PRINTER_INFO_LEVEL *printer,
 					 TALLOC_CTX *mem_ctx)
 {
-	data->notify_data.sd.size = printer->info_2->secdesc_buf->sd_size;
-	data->notify_data.sd.desc = dup_sec_desc( mem_ctx, printer->info_2->secdesc_buf->sd ) ;
+	data->notify_data.sd.size = printer->info_2->secdesc_buf->len;
+	data->notify_data.sd.desc = dup_sec_desc( mem_ctx, printer->info_2->secdesc_buf->sec ) ;
 }
 
 /*******************************************************************
@@ -3080,7 +3084,7 @@
  * jfm:xxxx a samba printer is always shared
  ********************************************************************/
 
-void spoolss_notify_attributes(int snum,
+void spoolss_notify_attributes(int snum, 
 				      SPOOL_NOTIFY_INFO_DATA *data,
 				      print_queue_struct *queue,
 				      NT_PRINTER_INFO_LEVEL *printer,
@@ -3094,7 +3098,7 @@
  * fill a notify_info_data with the priority
  ********************************************************************/
 
-static void spoolss_notify_priority(int snum,
+static void spoolss_notify_priority(int snum, 
 				    SPOOL_NOTIFY_INFO_DATA *data,
 				    print_queue_struct *queue,
 				    NT_PRINTER_INFO_LEVEL *printer,
@@ -3108,7 +3112,7 @@
  * fill a notify_info_data with the default priority
  ********************************************************************/
 
-static void spoolss_notify_default_priority(int snum,
+static void spoolss_notify_default_priority(int snum, 
 					    SPOOL_NOTIFY_INFO_DATA *data,
 					    print_queue_struct *queue,
 					    NT_PRINTER_INFO_LEVEL *printer,
@@ -3122,7 +3126,7 @@
  * fill a notify_info_data with the start time
  ********************************************************************/
 
-static void spoolss_notify_start_time(int snum,
+static void spoolss_notify_start_time(int snum, 
 				      SPOOL_NOTIFY_INFO_DATA *data,
 				      print_queue_struct *queue,
 				      NT_PRINTER_INFO_LEVEL *printer,
@@ -3136,7 +3140,7 @@
  * fill a notify_info_data with the until time
  ********************************************************************/
 
-static void spoolss_notify_until_time(int snum,
+static void spoolss_notify_until_time(int snum, 
 				      SPOOL_NOTIFY_INFO_DATA *data,
 				      print_queue_struct *queue,
 				      NT_PRINTER_INFO_LEVEL *printer,
@@ -3150,7 +3154,7 @@
  * fill a notify_info_data with the status
  ********************************************************************/
 
-static void spoolss_notify_status(int snum,
+static void spoolss_notify_status(int snum, 
 				  SPOOL_NOTIFY_INFO_DATA *data,
 				  print_queue_struct *queue,
 				  NT_PRINTER_INFO_LEVEL *printer,
@@ -3167,10 +3171,10 @@
  * fill a notify_info_data with the number of jobs queued
  ********************************************************************/
 
-void spoolss_notify_cjobs(int snum,
+void spoolss_notify_cjobs(int snum, 
 				 SPOOL_NOTIFY_INFO_DATA *data,
 				 print_queue_struct *queue,
-				 NT_PRINTER_INFO_LEVEL *printer,
+				 NT_PRINTER_INFO_LEVEL *printer, 
 				 TALLOC_CTX *mem_ctx)
 {
 	data->notify_data.value[0] = print_queue_length(snum, NULL);
@@ -3181,7 +3185,7 @@
  * fill a notify_info_data with the average ppm
  ********************************************************************/
 
-static void spoolss_notify_average_ppm(int snum,
+static void spoolss_notify_average_ppm(int snum, 
 				       SPOOL_NOTIFY_INFO_DATA *data,
 				       print_queue_struct *queue,
 				       NT_PRINTER_INFO_LEVEL *printer,
@@ -3197,23 +3201,27 @@
  * fill a notify_info_data with username
  ********************************************************************/
 
-static void spoolss_notify_username(int snum,
+static void spoolss_notify_username(int snum, 
 				    SPOOL_NOTIFY_INFO_DATA *data,
 				    print_queue_struct *queue,
 				    NT_PRINTER_INFO_LEVEL *printer,
 				    TALLOC_CTX *mem_ctx)
 {
-	smb_ucs2_t *temp = NULL;
+	pstring temp;
 	uint32 len;
 
-	len = rpcstr_push_talloc(mem_ctx, &temp, queue->fs_user);
-	if (len == (uint32)-1) {
-		len = 0;
-	}
+	len = rpcstr_push(temp, queue->fs_user, sizeof(temp)-2, STR_TERMINATE);
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)temp;
+		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
+	
+		if (!data->notify_data.data.string) {
+			data->notify_data.data.length = 0;
+			return;
+		}
+	
+		memcpy(data->notify_data.data.string, temp, len);
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -3223,7 +3231,7 @@
  * fill a notify_info_data with job status
  ********************************************************************/
 
-static void spoolss_notify_job_status(int snum,
+static void spoolss_notify_job_status(int snum, 
 				      SPOOL_NOTIFY_INFO_DATA *data,
 				      print_queue_struct *queue,
 				      NT_PRINTER_INFO_LEVEL *printer,
@@ -3237,23 +3245,27 @@
  * fill a notify_info_data with job name
  ********************************************************************/
 
-static void spoolss_notify_job_name(int snum,
+static void spoolss_notify_job_name(int snum, 
 				    SPOOL_NOTIFY_INFO_DATA *data,
 				    print_queue_struct *queue,
 				    NT_PRINTER_INFO_LEVEL *printer,
 				    TALLOC_CTX *mem_ctx)
 {
-	smb_ucs2_t *temp = NULL;
+	pstring temp;
 	uint32 len;
 
-	len = rpcstr_push_talloc(mem_ctx, &temp, queue->fs_file);
-	if (len == (uint32)-1) {
-		len = 0;
-	}
+	len = rpcstr_push(temp, queue->fs_file, sizeof(temp)-2, STR_TERMINATE);
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)temp;
+		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
+	
+		if (!data->notify_data.data.string) {
+			data->notify_data.data.length = 0;
+			return;
+		}
+	
+		memcpy(data->notify_data.data.string, temp, len);
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -3263,10 +3275,10 @@
  * fill a notify_info_data with job status
  ********************************************************************/
 
-static void spoolss_notify_job_status_string(int snum,
+static void spoolss_notify_job_status_string(int snum, 
 					     SPOOL_NOTIFY_INFO_DATA *data,
 					     print_queue_struct *queue,
-					     NT_PRINTER_INFO_LEVEL *printer,
+					     NT_PRINTER_INFO_LEVEL *printer, 
 					     TALLOC_CTX *mem_ctx)
 {
 	/*
@@ -3274,7 +3286,7 @@
 	 */
 
 	const char *p = "";
-	smb_ucs2_t *temp = NULL;
+	pstring temp;
 	uint32 len;
 
 #if 0 /* NO LONGER NEEDED - JRA. 02/22/2001 */
@@ -3296,14 +3308,18 @@
 	}
 #endif /* NO LONGER NEEDED. */
 
-	len = rpcstr_push_talloc(mem_ctx, &temp, p);
-	if (len == (uint32)-1) {
-		len = 0;
-	}
+	len = rpcstr_push(temp, p, sizeof(temp) - 2, STR_TERMINATE);
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)temp;
+		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
+	
+		if (!data->notify_data.data.string) {
+			data->notify_data.data.length = 0;
+			return;
+		}
+	
+		memcpy(data->notify_data.data.string, temp, len);
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -3313,7 +3329,7 @@
  * fill a notify_info_data with job time
  ********************************************************************/
 
-static void spoolss_notify_job_time(int snum,
+static void spoolss_notify_job_time(int snum, 
 				    SPOOL_NOTIFY_INFO_DATA *data,
 				    print_queue_struct *queue,
 				    NT_PRINTER_INFO_LEVEL *printer,
@@ -3327,7 +3343,7 @@
  * fill a notify_info_data with job size
  ********************************************************************/
 
-static void spoolss_notify_job_size(int snum,
+static void spoolss_notify_job_size(int snum, 
 				    SPOOL_NOTIFY_INFO_DATA *data,
 				    print_queue_struct *queue,
 				    NT_PRINTER_INFO_LEVEL *printer,
@@ -3367,7 +3383,7 @@
  Fill a notify_info_data with job position.
  ********************************************************************/
 
-static void spoolss_notify_job_position(int snum,
+static void spoolss_notify_job_position(int snum, 
 					SPOOL_NOTIFY_INFO_DATA *data,
 					print_queue_struct *queue,
 					NT_PRINTER_INFO_LEVEL *printer,
@@ -3381,7 +3397,7 @@
  Fill a notify_info_data with submitted time.
  ********************************************************************/
 
-static void spoolss_notify_submitted_time(int snum,
+static void spoolss_notify_submitted_time(int snum, 
 					  SPOOL_NOTIFY_INFO_DATA *data,
 					  print_queue_struct *queue,
 					  NT_PRINTER_INFO_LEVEL *printer,
@@ -3403,11 +3419,11 @@
 		data->notify_data.data.length = 0;
 		return;
 	}
-
+	
 	make_systemtime(&st, t);
 
 	/*
-	 * Systemtime must be linearized as a set of UINT16's.
+	 * Systemtime must be linearized as a set of UINT16's. 
 	 * Fix from Benjamin (Bj) Kuit bj at it.uts.edu.au
 	 */
 
@@ -3515,7 +3531,7 @@
 
 				case NOTIFY_POINTER:
 					return 4;
-
+					
 				case NOTIFY_SECDESC:
 					return 5;
 			}
@@ -3547,8 +3563,8 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool search_notify(uint16 type, uint16 field, int *value)
-{
+static BOOL search_notify(uint16 type, uint16 field, int *value)
+{	
 	int i;
 
 	for (i = 0; notify_info_data_table[i].type != PRINT_TABLE_END; i++) {
@@ -3559,8 +3575,8 @@
 			return True;
 		}
 	}
-
-	return False;
+	
+	return False;	
 }
 
 /****************************************************************************
@@ -3584,10 +3600,10 @@
  *
  ********************************************************************/
 
-static bool construct_notify_printer_info(Printer_entry *print_hnd, SPOOL_NOTIFY_INFO *info, int
+static BOOL construct_notify_printer_info(Printer_entry *print_hnd, SPOOL_NOTIFY_INFO *info, int
 					  snum, SPOOL_NOTIFY_OPTION_TYPE
 					  *option_type, uint32 id,
-					  TALLOC_CTX *mem_ctx)
+					  TALLOC_CTX *mem_ctx) 
 {
 	int field_num,j;
 	uint16 type;
@@ -3602,13 +3618,13 @@
 	DEBUG(4,("construct_notify_printer_info: Notify type: [%s], number of notify info: [%d] on printer: [%s]\n",
 		(option_type->type==PRINTER_NOTIFY_TYPE?"PRINTER_NOTIFY_TYPE":"JOB_NOTIFY_TYPE"),
 		option_type->count, lp_servicename(snum)));
-
+	
 	if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &printer, 2, lp_const_servicename(snum))))
 		return False;
 
 	for(field_num=0; field_num<option_type->count; field_num++) {
 		field = option_type->fields[field_num];
-
+		
 		DEBUG(4,("construct_notify_printer_info: notify [%d]: type [%x], field [%x]\n", field_num, type, field));
 
 		if (!search_notify(type, field, &j) )
@@ -3643,21 +3659,21 @@
  *
  ********************************************************************/
 
-static bool construct_notify_jobs_info(print_queue_struct *queue,
+static BOOL construct_notify_jobs_info(print_queue_struct *queue,
 				       SPOOL_NOTIFY_INFO *info,
 				       NT_PRINTER_INFO_LEVEL *printer,
 				       int snum, SPOOL_NOTIFY_OPTION_TYPE
 				       *option_type, uint32 id,
-				       TALLOC_CTX *mem_ctx)
+				       TALLOC_CTX *mem_ctx) 
 {
 	int field_num,j;
 	uint16 type;
 	uint16 field;
 
 	SPOOL_NOTIFY_INFO_DATA *current_data;
-
+	
 	DEBUG(4,("construct_notify_jobs_info\n"));
-
+	
 	type = option_type->type;
 
 	DEBUGADD(4,("Notify type: [%s], number of notify info: [%d]\n",
@@ -3716,7 +3732,7 @@
  *
  ********************************************************************/
 
-static WERROR printserver_notify_info(pipes_struct *p, POLICY_HND *hnd,
+static WERROR printserver_notify_info(pipes_struct *p, POLICY_HND *hnd, 
 				      SPOOL_NOTIFY_INFO *info,
 				      TALLOC_CTX *mem_ctx)
 {
@@ -3728,7 +3744,7 @@
 	SPOOL_NOTIFY_OPTION_TYPE *option_type;
 
 	DEBUG(4,("printserver_notify_info\n"));
-
+	
 	if (!Printer)
 		return WERR_BADFID;
 
@@ -3737,7 +3753,7 @@
 	info->data=NULL;
 	info->count=0;
 
-	/* a bug in xp sp2 rc2 causes it to send a fnpcn request without
+	/* a bug in xp sp2 rc2 causes it to send a fnpcn request without 
 	   sending a ffpcn() request first */
 
 	if ( !option )
@@ -3745,18 +3761,18 @@
 
 	for (i=0; i<option->count; i++) {
 		option_type=&(option->ctr.type[i]);
-
+		
 		if (option_type->type!=PRINTER_NOTIFY_TYPE)
 			continue;
-
+		
 		for (snum=0; snum<n_services; snum++)
 		{
 			if ( lp_browseable(snum) && lp_snum_ok(snum) && lp_print_ok(snum) )
 				construct_notify_printer_info ( Printer, info, snum, option_type, snum, mem_ctx );
 		}
 	}
-
-#if 0
+			
+#if 0			
 	/*
 	 * Debugging information, don't delete.
 	 */
@@ -3764,14 +3780,14 @@
 	DEBUG(1,("dumping the NOTIFY_INFO\n"));
 	DEBUGADD(1,("info->version:[%d], info->flags:[%d], info->count:[%d]\n", info->version, info->flags, info->count));
 	DEBUGADD(1,("num\ttype\tfield\tres\tid\tsize\tenc_type\n"));
-
+	
 	for (i=0; i<info->count; i++) {
 		DEBUGADD(1,("[%d]\t[%d]\t[%d]\t[%d]\t[%d]\t[%d]\t[%d]\n",
 		i, info->data[i].type, info->data[i].field, info->data[i].reserved,
 		info->data[i].id, info->data[i].size, info->data[i].enc_type));
 	}
 #endif
-
+	
 	return WERR_OK;
 }
 
@@ -3793,7 +3809,7 @@
 	int count,j;
 	print_queue_struct *queue=NULL;
 	print_status_struct status;
-
+	
 	DEBUG(4,("printer_notify_info\n"));
 
 	if (!Printer)
@@ -3805,25 +3821,25 @@
 	info->data=NULL;
 	info->count=0;
 
-	/* a bug in xp sp2 rc2 causes it to send a fnpcn request without
+	/* a bug in xp sp2 rc2 causes it to send a fnpcn request without 
 	   sending a ffpcn() request first */
 
 	if ( !option )
 		return WERR_BADFID;
 
-	get_printer_snum(p, hnd, &snum, NULL);
+	get_printer_snum(p, hnd, &snum);
 
 	for (i=0; i<option->count; i++) {
 		option_type=&option->ctr.type[i];
-
+		
 		switch ( option_type->type ) {
 		case PRINTER_NOTIFY_TYPE:
-			if(construct_notify_printer_info(Printer, info, snum,
+			if(construct_notify_printer_info(Printer, info, snum, 
 							 option_type, id,
-							 mem_ctx))
+							 mem_ctx))  
 				id--;
 			break;
-
+			
 		case JOB_NOTIFY_TYPE: {
 			NT_PRINTER_INFO_LEVEL *printer = NULL;
 
@@ -3837,18 +3853,18 @@
 							   printer, snum,
 							   option_type,
 							   queue[j].job,
-							   mem_ctx);
+							   mem_ctx); 
 			}
 
 			free_a_printer(&printer, 2);
-
+			
 		done:
 			SAFE_FREE(queue);
 			break;
 		}
 		}
 	}
-
+	
 	/*
 	 * Debugging information, don't delete.
 	 */
@@ -3856,7 +3872,7 @@
 	DEBUG(1,("dumping the NOTIFY_INFO\n"));
 	DEBUGADD(1,("info->version:[%d], info->flags:[%d], info->count:[%d]\n", info->version, info->flags, info->count));
 	DEBUGADD(1,("num\ttype\tfield\tres\tid\tsize\tenc_type\n"));
-
+	
 	for (i=0; i<info->count; i++) {
 		DEBUGADD(1,("[%d]\t[%d]\t[%d]\t[%d]\t[%d]\t[%d]\t[%d]\n",
 		i, info->data[i].type, info->data[i].field, info->data[i].reserved,
@@ -3890,13 +3906,13 @@
 	DEBUG(4,("Printer type %x\n",Printer->printer_type));
 
 	/*
-	 * 	We are now using the change value, and
+	 * 	We are now using the change value, and 
 	 *	I should check for PRINTER_NOTIFY_OPTIONS_REFRESH but as
 	 *	I don't have a global notification system, I'm sending back all the
 	 *	informations even when _NOTHING_ has changed.
 	 */
 
-	/* We need to keep track of the change value to send back in
+	/* We need to keep track of the change value to send back in 
            RRPCN replies otherwise our updates are ignored. */
 
 	Printer->notify.fnpcn = True;
@@ -3907,19 +3923,19 @@
 	}
 
 	/* just ignore the SPOOL_NOTIFY_OPTION */
-
+	
 	switch (Printer->printer_type) {
 		case SPLHND_SERVER:
 			result = printserver_notify_info(p, handle, info, p->mem_ctx);
 			break;
-
+			
 		case SPLHND_PRINTER:
 			result = printer_notify_info(p, handle, info, p->mem_ctx);
 			break;
 	}
-
+	
 	Printer->notify.fnpcn = False;
-
+	
 done:
 	return result;
 }
@@ -3929,9 +3945,9 @@
  * fill a printer_info_0 struct
  ********************************************************************/
 
-static bool construct_printer_info_0(Printer_entry *print_hnd, PRINTER_INFO_0 *printer, int snum)
+static BOOL construct_printer_info_0(Printer_entry *print_hnd, PRINTER_INFO_0 *printer, int snum)
 {
-	char *chaine = NULL;
+	pstring chaine;
 	int count;
 	NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
 	counter_printer_0 *session_counter;
@@ -3939,29 +3955,18 @@
 	struct tm *t;
 	time_t setuptime;
 	print_status_struct status;
-	TALLOC_CTX *ctx = talloc_tos();
-
+	
 	if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2, lp_const_servicename(snum))))
 		return False;
 
-	init_unistr(&printer->printername, ntprinter->info_2->printername);
-
-	chaine = talloc_asprintf(ctx, "\\\\%s", get_server_name(print_hnd));
-	if (!chaine) {
-		free_a_printer(&ntprinter,2);
-		return false;
-	}
-
 	count = print_queue_length(snum, &status);
 
-	/* check if we already have a counter for this printer */
+	/* check if we already have a counter for this printer */	
 	for(session_counter = counter_list; session_counter; session_counter = session_counter->next) {
 		if (session_counter->snum == snum)
 			break;
 	}
 
-	init_unistr(&printer->servername, chaine);
-
 	/* it's the first time, add it to the list */
 	if (session_counter==NULL) {
 		if((session_counter=SMB_MALLOC_P(counter_printer_0)) == NULL) {
@@ -3973,15 +3978,23 @@
 		session_counter->counter=0;
 		DLIST_ADD(counter_list, session_counter);
 	}
-
+	
 	/* increment it */
 	session_counter->counter++;
-
+	
 	/* JFM:
 	 * the global_counter should be stored in a TDB as it's common to all the clients
 	 * and should be zeroed on samba startup
 	 */
 	global_counter=session_counter->counter;
+	
+	pstrcpy(chaine,ntprinter->info_2->printername);
+
+	init_unistr(&printer->printername, chaine);
+	
+	slprintf(chaine,sizeof(chaine)-1,"\\\\%s", get_server_name(print_hnd));
+	init_unistr(&printer->servername, chaine);
+	
 	printer->cjobs = count;
 	printer->total_jobs = 0;
 	printer->total_bytes = 0;
@@ -4000,11 +4013,11 @@
 
 	printer->global_counter = global_counter;
 	printer->total_pages = 0;
-
+	
 	/* in 2.2 we reported ourselves as 0x0004 and 0x0565 */
 	printer->major_version = 0x0005; 	/* NT 5 */
 	printer->build_version = 0x0893; 	/* build 2195 */
-
+	
 	printer->unknown7 = 0x1;
 	printer->unknown8 = 0x0;
 	printer->unknown9 = 0x0;
@@ -4028,47 +4041,42 @@
 	printer->unknown27 = 0;
 	printer->unknown28 = 0;
 	printer->unknown29 = 0;
-
+	
 	free_a_printer(&ntprinter,2);
-	return (True);
+	return (True);	
 }
 
 /********************************************************************
  * construct_printer_info_1
  * fill a printer_info_1 struct
  ********************************************************************/
-static bool construct_printer_info_1(Printer_entry *print_hnd, uint32 flags, PRINTER_INFO_1 *printer, int snum)
+static BOOL construct_printer_info_1(Printer_entry *print_hnd, uint32 flags, PRINTER_INFO_1 *printer, int snum)
 {
-	char *chaine = NULL;
+	pstring chaine;
+	pstring chaine2;
 	NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2, lp_const_servicename(snum))))
-		return false;
+		return False;
 
 	printer->flags=flags;
 
 	if (*ntprinter->info_2->comment == '\0') {
 		init_unistr(&printer->comment, lp_comment(snum));
-		chaine = talloc_asprintf(ctx,
-				"%s,%s,%s", ntprinter->info_2->printername,
-				ntprinter->info_2->drivername, lp_comment(snum));
+		slprintf(chaine,sizeof(chaine)-1,"%s,%s,%s", ntprinter->info_2->printername,
+			ntprinter->info_2->drivername, lp_comment(snum));
 	}
 	else {
 		init_unistr(&printer->comment, ntprinter->info_2->comment); /* saved comment. */
-		chaine = talloc_asprintf(ctx,
-				"%s,%s,%s", ntprinter->info_2->printername,
-				ntprinter->info_2->drivername, ntprinter->info_2->comment);
+		slprintf(chaine,sizeof(chaine)-1,"%s,%s,%s", ntprinter->info_2->printername,
+			ntprinter->info_2->drivername, ntprinter->info_2->comment);
 	}
+		
+	slprintf(chaine2,sizeof(chaine)-1,"%s", ntprinter->info_2->printername);
 
-	if (!chaine) {
-		free_a_printer(&ntprinter,2);
-		return false;
-	}
-
 	init_unistr(&printer->description, chaine);
-	init_unistr(&printer->name, ntprinter->info_2->printername);
-
+	init_unistr(&printer->name, chaine2);	
+	
 	free_a_printer(&ntprinter,2);
 
 	return True;
@@ -4084,20 +4092,20 @@
 		return;
 
 	SAFE_FREE(dev->dev_private);
-	SAFE_FREE(dev);
+	SAFE_FREE(dev);	
 }
 
 
 /****************************************************************************
- Convert an NT_DEVICEMODE to a DEVICEMODE structure.  Both pointers
+ Convert an NT_DEVICEMODE to a DEVICEMODE structure.  Both pointers 
  should be valid upon entry
 ****************************************************************************/
 
-static bool convert_nt_devicemode( DEVICEMODE *devmode, NT_DEVICEMODE *ntdevmode )
+static BOOL convert_nt_devicemode( DEVICEMODE *devmode, NT_DEVICEMODE *ntdevmode )
 {
 	if ( !devmode || !ntdevmode )
 		return False;
-
+		
 	init_unistr(&devmode->devicename, ntdevmode->devicename);
 
 	init_unistr(&devmode->formname, ntdevmode->formname);
@@ -4107,8 +4115,8 @@
 	devmode->size             = ntdevmode->size;
 	devmode->driverextra      = ntdevmode->driverextra;
 	devmode->fields           = ntdevmode->fields;
-
-	devmode->orientation      = ntdevmode->orientation;
+				
+	devmode->orientation      = ntdevmode->orientation;	
 	devmode->papersize        = ntdevmode->papersize;
 	devmode->paperlength      = ntdevmode->paperlength;
 	devmode->paperwidth       = ntdevmode->paperwidth;
@@ -4130,7 +4138,7 @@
 		if ((devmode->dev_private=(uint8 *)memdup(ntdevmode->nt_dev_private, ntdevmode->driverextra)) == NULL)
 			return False;
 	}
-
+	
 	return True;
 }
 
@@ -4142,12 +4150,12 @@
 {
 	NT_PRINTER_INFO_LEVEL 	*printer = NULL;
 	DEVICEMODE 		*devmode = NULL;
-
+	
 	DEBUG(7,("construct_dev_mode\n"));
-
+	
 	DEBUGADD(8,("getting printer characteristics\n"));
 
-	if (!W_ERROR_IS_OK(get_a_printer(NULL, &printer, 2, servicename)))
+	if (!W_ERROR_IS_OK(get_a_printer(NULL, &printer, 2, servicename))) 
 		return NULL;
 
 	if ( !printer->info_2->devmode ) {
@@ -4160,8 +4168,8 @@
 		goto done;
 	}
 
-	ZERO_STRUCTP(devmode);
-
+	ZERO_STRUCTP(devmode);	
+	
 	DEBUGADD(8,("loading DEVICEMODE\n"));
 
 	if ( !convert_nt_devicemode( devmode, printer->info_2->devmode ) ) {
@@ -4180,7 +4188,7 @@
  * fill a printer_info_2 struct
  ********************************************************************/
 
-static bool construct_printer_info_2(Printer_entry *print_hnd, PRINTER_INFO_2 *printer, int snum)
+static BOOL construct_printer_info_2(Printer_entry *print_hnd, PRINTER_INFO_2 *printer, int snum)
 {
 	int count;
 	NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
@@ -4189,50 +4197,50 @@
 
 	if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2, lp_const_servicename(snum))))
 		return False;
-
+		
 	count = print_queue_length(snum, &status);
 
 	init_unistr(&printer->servername, ntprinter->info_2->servername); /* servername*/
 	init_unistr(&printer->printername, ntprinter->info_2->printername);				/* printername*/
 	init_unistr(&printer->sharename, lp_servicename(snum));			/* sharename */
-	init_unistr(&printer->portname, ntprinter->info_2->portname);			/* port */
+	init_unistr(&printer->portname, ntprinter->info_2->portname);			/* port */	
 	init_unistr(&printer->drivername, ntprinter->info_2->drivername);	/* drivername */
 
 	if (*ntprinter->info_2->comment == '\0')
-		init_unistr(&printer->comment, lp_comment(snum));			/* comment */
+		init_unistr(&printer->comment, lp_comment(snum));			/* comment */	
 	else
 		init_unistr(&printer->comment, ntprinter->info_2->comment); /* saved comment. */
 
-	init_unistr(&printer->location, ntprinter->info_2->location);		/* location */
+	init_unistr(&printer->location, ntprinter->info_2->location);		/* location */	
 	init_unistr(&printer->sepfile, ntprinter->info_2->sepfile);		/* separator file */
 	init_unistr(&printer->printprocessor, ntprinter->info_2->printprocessor);/* print processor */
-	init_unistr(&printer->datatype, ntprinter->info_2->datatype);		/* datatype */
-	init_unistr(&printer->parameters, ntprinter->info_2->parameters);	/* parameters (of print processor) */
+	init_unistr(&printer->datatype, ntprinter->info_2->datatype);		/* datatype */	
+	init_unistr(&printer->parameters, ntprinter->info_2->parameters);	/* parameters (of print processor) */	
 
 	printer->attributes = ntprinter->info_2->attributes;
 
-	printer->priority = ntprinter->info_2->priority;				/* priority */
+	printer->priority = ntprinter->info_2->priority;				/* priority */	
 	printer->defaultpriority = ntprinter->info_2->default_priority;		/* default priority */
 	printer->starttime = ntprinter->info_2->starttime;			/* starttime */
 	printer->untiltime = ntprinter->info_2->untiltime;			/* untiltime */
 	printer->status = nt_printq_status(status.status);			/* status */
 	printer->cjobs = count;							/* jobs */
 	printer->averageppm = ntprinter->info_2->averageppm;			/* average pages per minute */
-
+			
 	if ( !(printer->devmode = construct_dev_mode(
 		       lp_const_servicename(snum))) )
 		DEBUG(8, ("Returning NULL Devicemode!\n"));
 
 	printer->secdesc = NULL;
 
-	if ( ntprinter->info_2->secdesc_buf
-		&& ntprinter->info_2->secdesc_buf->sd_size != 0 )
+	if ( ntprinter->info_2->secdesc_buf 
+		&& ntprinter->info_2->secdesc_buf->len != 0 ) 
 	{
-		/* don't use talloc_steal() here unless you do a deep steal of all
+		/* don't use talloc_steal() here unless you do a deep steal of all 
 		   the SEC_DESC members */
 
-		printer->secdesc = dup_sec_desc( talloc_tos(),
-			ntprinter->info_2->secdesc_buf->sd );
+		printer->secdesc = dup_sec_desc( get_talloc_ctx(), 
+			ntprinter->info_2->secdesc_buf->sec );
 	}
 
 	free_a_printer(&ntprinter, 2);
@@ -4245,7 +4253,7 @@
  * fill a printer_info_3 struct
  ********************************************************************/
 
-static bool construct_printer_info_3(Printer_entry *print_hnd, PRINTER_INFO_3 **pp_printer, int snum)
+static BOOL construct_printer_info_3(Printer_entry *print_hnd, PRINTER_INFO_3 **pp_printer, int snum)
 {
 	NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
 	PRINTER_INFO_3 *printer = NULL;
@@ -4261,15 +4269,15 @@
 	}
 
 	ZERO_STRUCTP(printer);
-
+	
 	/* These are the components of the SD we are returning. */
 
-	if (ntprinter->info_2->secdesc_buf && ntprinter->info_2->secdesc_buf->sd_size != 0) {
-		/* don't use talloc_steal() here unless you do a deep steal of all
+	if (ntprinter->info_2->secdesc_buf && ntprinter->info_2->secdesc_buf->len != 0) {
+		/* don't use talloc_steal() here unless you do a deep steal of all 
 		   the SEC_DESC members */
 
-		printer->secdesc = dup_sec_desc( talloc_tos(),
-			ntprinter->info_2->secdesc_buf->sd );
+		printer->secdesc = dup_sec_desc( get_talloc_ctx(), 
+			ntprinter->info_2->secdesc_buf->sec );
 	}
 
 	free_a_printer(&ntprinter, 2);
@@ -4283,13 +4291,13 @@
  * fill a printer_info_4 struct
  ********************************************************************/
 
-static bool construct_printer_info_4(Printer_entry *print_hnd, PRINTER_INFO_4 *printer, int snum)
+static BOOL construct_printer_info_4(Printer_entry *print_hnd, PRINTER_INFO_4 *printer, int snum)
 {
 	NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
 
 	if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2, lp_const_servicename(snum))))
 		return False;
-
+		
 	init_unistr(&printer->printername, ntprinter->info_2->printername);				/* printername*/
 	init_unistr(&printer->servername, ntprinter->info_2->servername); /* servername*/
 	printer->attributes = ntprinter->info_2->attributes;
@@ -4303,15 +4311,15 @@
  * fill a printer_info_5 struct
  ********************************************************************/
 
-static bool construct_printer_info_5(Printer_entry *print_hnd, PRINTER_INFO_5 *printer, int snum)
+static BOOL construct_printer_info_5(Printer_entry *print_hnd, PRINTER_INFO_5 *printer, int snum)
 {
 	NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
 
 	if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2, lp_const_servicename(snum))))
 		return False;
-
+		
 	init_unistr(&printer->printername, ntprinter->info_2->printername);
-	init_unistr(&printer->portname, ntprinter->info_2->portname);
+	init_unistr(&printer->portname, ntprinter->info_2->portname); 
 	printer->attributes = ntprinter->info_2->attributes;
 
 	/* these two are not used by NT+ according to MSDN */
@@ -4325,49 +4333,19 @@
 }
 
 /********************************************************************
- * construct_printer_info_6
- * fill a printer_info_6 struct
- ********************************************************************/
-
-static bool construct_printer_info_6(Printer_entry *print_hnd,
-				     PRINTER_INFO_6 *printer,
-				     int snum)
-{
-	NT_PRINTER_INFO_LEVEL *ntprinter = NULL;
-	int count;
-	print_status_struct status;
-
-	if (!W_ERROR_IS_OK(get_a_printer(print_hnd, &ntprinter, 2,
-					 lp_const_servicename(snum))))
-		return False;
-
-	count = print_queue_length(snum, &status);
-
-	printer->status = nt_printq_status(status.status);
-
-	free_a_printer(&ntprinter, 2);
-
-	return True;
-}
-
-/********************************************************************
  * construct_printer_info_7
  * fill a printer_info_7 struct
  ********************************************************************/
 
-static bool construct_printer_info_7(Printer_entry *print_hnd, PRINTER_INFO_7 *printer, int snum)
+static BOOL construct_printer_info_7(Printer_entry *print_hnd, PRINTER_INFO_7 *printer, int snum)
 {
 	char *guid_str = NULL;
-	struct GUID guid;
-
+	struct GUID guid; 
+	
 	if (is_printer_published(print_hnd, snum, &guid)) {
-		if (asprintf(&guid_str, "{%s}",
-			     smb_uuid_string(talloc_tos(), guid)) == -1) {
-			return false;
-		}
+		asprintf(&guid_str, "{%s}", smb_uuid_string_static(guid));
 		strupper_m(guid_str);
 		init_unistr(&printer->guid, guid_str);
-		SAFE_FREE(guid_str);
 		printer->action = SPOOL_DS_PUBLISH;
 	} else {
 		init_unistr(&printer->guid, "");
@@ -4389,9 +4367,9 @@
 	PRINTER_INFO_1 *printers=NULL;
 	PRINTER_INFO_1 current_prt;
 	WERROR result = WERR_OK;
+	
+	DEBUG(4,("enum_all_printers_info_1\n"));	
 
-	DEBUG(4,("enum_all_printers_info_1\n"));
-
 	for (snum=0; snum<n_services; snum++) {
 		if (lp_browseable(snum) && lp_snum_ok(snum) && lp_print_ok(snum) ) {
 			DEBUG(4,("Found a printer in smb.conf: %s[%x]\n", lp_servicename(snum), snum));
@@ -4402,15 +4380,15 @@
 					*returned=0;
 					return WERR_NOMEM;
 				}
-				DEBUG(4,("ReAlloced memory for [%d] PRINTER_INFO_1\n", *returned));
+				DEBUG(4,("ReAlloced memory for [%d] PRINTER_INFO_1\n", *returned));		
 
 				memcpy(&printers[*returned], &current_prt, sizeof(PRINTER_INFO_1));
 				(*returned)++;
 			}
 		}
 	}
-
-	/* check the required size. */
+		
+	/* check the required size. */	
 	for (i=0; i<*returned; i++)
 		(*needed) += spoolss_size_printer_info_1(&printers[i]);
 
@@ -4426,7 +4404,7 @@
 
 	/* fill the buffer with the structures */
 	for (i=0; i<*returned; i++)
-		smb_io_printer_info_1("", buffer, &printers[i], 0);
+		smb_io_printer_info_1("", buffer, &printers[i], 0);	
 
 out:
 	/* clear memory */
@@ -4445,8 +4423,8 @@
 
 static WERROR enum_all_printers_info_1_local(RPC_BUFFER *buffer, uint32 offered, uint32 *needed, uint32 *returned)
 {
-	DEBUG(4,("enum_all_printers_info_1_local\n"));
-
+	DEBUG(4,("enum_all_printers_info_1_local\n"));	
+	
 	return enum_all_printers_info_1(PRINTER_ENUM_ICON8, buffer, offered, needed, returned);
 }
 
@@ -4457,12 +4435,12 @@
 static WERROR enum_all_printers_info_1_name(fstring name, RPC_BUFFER *buffer, uint32 offered, uint32 *needed, uint32 *returned)
 {
 	char *s = name;
-
-	DEBUG(4,("enum_all_printers_info_1_name\n"));
-
+	
+	DEBUG(4,("enum_all_printers_info_1_name\n"));	
+	
 	if ((name[0] == '\\') && (name[1] == '\\'))
 		s = name + 2;
-
+		
 	if (is_myname_or_ipaddr(s)) {
 		return enum_all_printers_info_1(PRINTER_ENUM_ICON8, buffer, offered, needed, returned);
 	}
@@ -4481,32 +4459,32 @@
 	fstring printername;
 	fstring desc;
 	fstring comment;
-	DEBUG(4,("enum_all_printers_info_1_remote\n"));
+	DEBUG(4,("enum_all_printers_info_1_remote\n"));	
 	WERROR result = WERR_OK;
 
 	/* JFM: currently it's more a place holder than anything else.
 	 * In the spooler world there is a notion of server registration.
 	 * the print servers are registered on the PDC (in the same domain)
 	 *
-	 * We should have a TDB here. The registration is done thru an
+	 * We should have a TDB here. The registration is done thru an 
 	 * undocumented RPC call.
 	 */
-
+	
 	if((printer=SMB_MALLOC_P(PRINTER_INFO_1)) == NULL)
 		return WERR_NOMEM;
 
 	*returned=1;
-
-	slprintf(printername, sizeof(printername)-1,"Windows NT Remote Printers!!\\\\%s", name);
+	
+	slprintf(printername, sizeof(printername)-1,"Windows NT Remote Printers!!\\\\%s", name);		
 	slprintf(desc, sizeof(desc)-1,"%s", name);
 	slprintf(comment, sizeof(comment)-1, "Logged on Domain");
 
 	init_unistr(&printer->description, desc);
-	init_unistr(&printer->name, printername);
+	init_unistr(&printer->name, printername);	
 	init_unistr(&printer->comment, comment);
 	printer->flags=PRINTER_ENUM_ICON3|PRINTER_ENUM_CONTAINER;
-
-	/* check the required size. */
+		
+	/* check the required size. */	
 	*needed += spoolss_size_printer_info_1(printer);
 
 	if (*needed > offered) {
@@ -4520,7 +4498,7 @@
 	}
 
 	/* fill the buffer with the structures */
-	smb_io_printer_info_1("", buffer, printer, 0);
+	smb_io_printer_info_1("", buffer, printer, 0);	
 
 out:
 	/* clear memory */
@@ -4542,15 +4520,15 @@
 {
 	char *s = name;
 
-	DEBUG(4,("enum_all_printers_info_1_network\n"));
-
+	DEBUG(4,("enum_all_printers_info_1_network\n"));	
+	
 	/* If we respond to a enum_printers level 1 on our name with flags
 	   set to PRINTER_ENUM_REMOTE with a list of printers then these
 	   printers incorrectly appear in the APW browse list.
 	   Specifically the printers for the server appear at the workgroup
 	   level where all the other servers in the domain are
 	   listed. Windows responds to this call with a
-	   WERR_CAN_NOT_COMPLETE so we should do the same. */
+	   WERR_CAN_NOT_COMPLETE so we should do the same. */ 
 
 	if (name[0] == '\\' && name[1] == '\\')
 		 s = name + 2;
@@ -4581,7 +4559,7 @@
 	for (snum=0; snum<n_services; snum++) {
 		if (lp_browseable(snum) && lp_snum_ok(snum) && lp_print_ok(snum) ) {
 			DEBUG(4,("Found a printer in smb.conf: %s[%x]\n", lp_servicename(snum), snum));
-
+				
 			if (construct_printer_info_2(NULL, &current_prt, snum)) {
 				if ( !(printers=SMB_REALLOC_ARRAY(printers, PRINTER_INFO_2, *returned +1)) ) {
 					DEBUG(2,("enum_all_printers_info_2: failed to enlarge printers buffer!\n"));
@@ -4589,7 +4567,7 @@
 					return WERR_NOMEM;
 				}
 
-				DEBUG(4,("ReAlloced memory for [%d] PRINTER_INFO_2\n", *returned + 1));
+				DEBUG(4,("ReAlloced memory for [%d] PRINTER_INFO_2\n", *returned + 1));		
 
 				memcpy(&printers[*returned], &current_prt, sizeof(PRINTER_INFO_2));
 
@@ -4597,11 +4575,11 @@
 			}
 		}
 	}
-
-	/* check the required size. */
-	for (i=0; i<*returned; i++)
+	
+	/* check the required size. */	
+	for (i=0; i<*returned; i++) 
 		(*needed) += spoolss_size_printer_info_2(&printers[i]);
-
+	
 	if (*needed > offered) {
 		result = WERR_INSUFFICIENT_BUFFER;
 		goto out;
@@ -4614,12 +4592,12 @@
 
 	/* fill the buffer with the structures */
 	for (i=0; i<*returned; i++)
-		smb_io_printer_info_2("", buffer, &(printers[i]), 0);
-
+		smb_io_printer_info_2("", buffer, &(printers[i]), 0);	
+	
 out:
 	/* clear memory */
 
-	for (i=0; i<*returned; i++)
+	for (i=0; i<*returned; i++) 
 		free_devmode(printers[i].devmode);
 
 	SAFE_FREE(printers);
@@ -4715,7 +4693,7 @@
 	uint32 *returned = &r_u->returned;
 
 	fstring name;
-
+	
 	/* that's an [in out] buffer */
 
 	if (!q_u->buffer && (offered!=0)) {
@@ -4729,7 +4707,7 @@
 
 	*needed=0;
 	*returned=0;
-
+	
 	/*
 	 * Level 1:
 	 *	    flags==PRINTER_ENUM_NAME
@@ -4743,7 +4721,7 @@
 	 * Level 5: same as Level 2
 	 */
 
-	unistr2_to_ascii(name, servername, sizeof(name));
+	unistr2_to_ascii(name, servername, sizeof(name)-1);
 	strupper_m(name);
 
 	switch (level) {
@@ -4772,8 +4750,8 @@
 		return WERR_NOMEM;
 
 	construct_printer_info_0(print_hnd, printer, snum);
-
-	/* check the required size. */
+	
+	/* check the required size. */	
 	*needed += spoolss_size_printer_info_0(printer);
 
 	if (*needed > offered) {
@@ -4787,8 +4765,8 @@
 	}
 
 	/* fill the buffer with the structures */
-	smb_io_printer_info_0("", buffer, printer, 0);
-
+	smb_io_printer_info_0("", buffer, printer, 0);	
+	
 out:
 	/* clear memory */
 
@@ -4809,8 +4787,8 @@
 		return WERR_NOMEM;
 
 	construct_printer_info_1(print_hnd, PRINTER_ENUM_ICON8, printer, snum);
-
-	/* check the required size. */
+	
+	/* check the required size. */	
 	*needed += spoolss_size_printer_info_1(printer);
 
 	if (*needed > offered) {
@@ -4824,13 +4802,13 @@
 	}
 
 	/* fill the buffer with the structures */
-	smb_io_printer_info_1("", buffer, printer, 0);
-
+	smb_io_printer_info_1("", buffer, printer, 0);	
+	
 out:
 	/* clear memory */
 	SAFE_FREE(printer);
 
-	return result;
+	return result;	
 }
 
 /****************************************************************************
@@ -4843,12 +4821,12 @@
 
 	if((printer=SMB_MALLOC_P(PRINTER_INFO_2))==NULL)
 		return WERR_NOMEM;
-
+	
 	construct_printer_info_2(print_hnd, printer, snum);
-
-	/* check the required size. */
+	
+	/* check the required size. */	
 	*needed += spoolss_size_printer_info_2(printer);
-
+	
 	if (*needed > offered) {
 		result = WERR_INSUFFICIENT_BUFFER;
 		goto out;
@@ -4860,14 +4838,14 @@
 	}
 
 	/* fill the buffer with the structures */
-	if (!smb_io_printer_info_2("", buffer, printer, 0))
+	if (!smb_io_printer_info_2("", buffer, printer, 0)) 
 		result = WERR_NOMEM;
-
+	
 out:
 	/* clear memory */
 	free_printer_info_2(printer);
 
-	return result;
+	return result;	
 }
 
 /****************************************************************************
@@ -4880,8 +4858,8 @@
 
 	if (!construct_printer_info_3(print_hnd, &printer, snum))
 		return WERR_NOMEM;
-
-	/* check the required size. */
+	
+	/* check the required size. */	
 	*needed += spoolss_size_printer_info_3(printer);
 
 	if (*needed > offered) {
@@ -4895,13 +4873,13 @@
 	}
 
 	/* fill the buffer with the structures */
-	smb_io_printer_info_3("", buffer, printer, 0);
-
+	smb_io_printer_info_3("", buffer, printer, 0);	
+	
 out:
 	/* clear memory */
 	free_printer_info_3(printer);
-
-	return result;
+	
+	return result;	
 }
 
 /****************************************************************************
@@ -4919,8 +4897,8 @@
 		SAFE_FREE(printer);
 		return WERR_NOMEM;
 	}
-
-	/* check the required size. */
+	
+	/* check the required size. */	
 	*needed += spoolss_size_printer_info_4(printer);
 
 	if (*needed > offered) {
@@ -4934,13 +4912,13 @@
 	}
 
 	/* fill the buffer with the structures */
-	smb_io_printer_info_4("", buffer, printer, 0);
-
+	smb_io_printer_info_4("", buffer, printer, 0);	
+	
 out:
 	/* clear memory */
 	free_printer_info_4(printer);
-
-	return result;
+	
+	return result;	
 }
 
 /****************************************************************************
@@ -4958,8 +4936,8 @@
 		free_printer_info_5(printer);
 		return WERR_NOMEM;
 	}
-
-	/* check the required size. */
+	
+	/* check the required size. */	
 	*needed += spoolss_size_printer_info_5(printer);
 
 	if (*needed > offered) {
@@ -4973,55 +4951,15 @@
 	}
 
 	/* fill the buffer with the structures */
-	smb_io_printer_info_5("", buffer, printer, 0);
-
+	smb_io_printer_info_5("", buffer, printer, 0);	
+	
 out:
 	/* clear memory */
 	free_printer_info_5(printer);
-
-	return result;
+	
+	return result;	
 }
 
-static WERROR getprinter_level_6(Printer_entry *print_hnd,
-				 int snum,
-				 RPC_BUFFER *buffer, uint32 offered,
-				 uint32 *needed)
-{
-	PRINTER_INFO_6 *printer;
-	WERROR result = WERR_OK;
-
-	if ((printer = SMB_MALLOC_P(PRINTER_INFO_6)) == NULL) {
-		return WERR_NOMEM;
-	}
-
-	if (!construct_printer_info_6(print_hnd, printer, snum)) {
-		free_printer_info_6(printer);
-		return WERR_NOMEM;
-	}
-
-	/* check the required size. */
-	*needed += spoolss_size_printer_info_6(printer);
-
-	if (*needed > offered) {
-		result = WERR_INSUFFICIENT_BUFFER;
-		goto out;
-	}
-
-	if (!rpcbuf_alloc_size(buffer, *needed)) {
-		result = WERR_NOMEM;
-		goto out;
-	}
-
-	/* fill the buffer with the structures */
-	smb_io_printer_info_6("", buffer, printer, 0);
-
-out:
-	/* clear memory */
-	free_printer_info_6(printer);
-
-	return result;
-}
-
 static WERROR getprinter_level_7(Printer_entry *print_hnd, int snum, RPC_BUFFER *buffer, uint32 offered, uint32 *needed)
 {
 	PRINTER_INFO_7 *printer=NULL;
@@ -5032,8 +4970,8 @@
 
 	if (!construct_printer_info_7(print_hnd, printer, snum))
 		return WERR_NOMEM;
-
-	/* check the required size. */
+	
+	/* check the required size. */	
 	*needed += spoolss_size_printer_info_7(printer);
 
 	if (*needed > offered) {
@@ -5048,13 +4986,13 @@
 	}
 
 	/* fill the buffer with the structures */
-	smb_io_printer_info_7("", buffer, printer, 0);
-
+	smb_io_printer_info_7("", buffer, printer, 0);	
+	
 out:
 	/* clear memory */
 	free_printer_info_7(printer);
-
-	return result;
+	
+	return result;	
 }
 
 /****************************************************************************
@@ -5082,7 +5020,7 @@
 
 	*needed=0;
 
-	if (!get_printer_snum(p, handle, &snum, NULL))
+	if (!get_printer_snum(p, handle, &snum))
 		return WERR_BADFID;
 
 	switch (level) {
@@ -5090,22 +5028,20 @@
 		return getprinter_level_0(Printer, snum, buffer, offered, needed);
 	case 1:
 		return getprinter_level_1(Printer, snum, buffer, offered, needed);
-	case 2:
+	case 2:		
 		return getprinter_level_2(Printer, snum, buffer, offered, needed);
-	case 3:
+	case 3:		
 		return getprinter_level_3(Printer, snum, buffer, offered, needed);
-	case 4:
+	case 4:		
 		return getprinter_level_4(Printer, snum, buffer, offered, needed);
-	case 5:
+	case 5:		
 		return getprinter_level_5(Printer, snum, buffer, offered, needed);
-	case 6:
-		return getprinter_level_6(Printer, snum, buffer, offered, needed);
 	case 7:
 		return getprinter_level_7(Printer, snum, buffer, offered, needed);
 	}
 	return WERR_UNKNOWN_LEVEL;
-}
-
+}	
+		
 /********************************************************************
  * fill a DRIVER_INFO_1 struct
  ********************************************************************/
@@ -5120,7 +5056,7 @@
  ********************************************************************/
 
 static WERROR construct_printer_driver_info_1(DRIVER_INFO_1 *info, int snum, fstring servername, fstring architecture, uint32 version)
-{
+{	
 	NT_PRINTER_INFO_LEVEL *printer = NULL;
 	NT_PRINTER_DRIVER_INFO_LEVEL driver;
 
@@ -5148,8 +5084,7 @@
 
 static void fill_printer_driver_info_2(DRIVER_INFO_2 *info, NT_PRINTER_DRIVER_INFO_LEVEL driver, fstring servername)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *temp = NULL;
+	pstring temp;
 
 	info->version=driver.info_3->cversion;
 
@@ -5157,33 +5092,21 @@
 	init_unistr( &info->architecture, driver.info_3->environment );
 
 
-	if (strlen(driver.info_3->driverpath)) {
-		temp = talloc_asprintf(ctx,
-				"\\\\%s%s",
-				servername,
-				driver.info_3->driverpath);
+    if (strlen(driver.info_3->driverpath)) {
+		slprintf(temp, sizeof(temp)-1, "\\\\%s%s", servername, driver.info_3->driverpath);
 		init_unistr( &info->driverpath, temp );
-	} else {
-		init_unistr( &info->driverpath, "" );
-	}
+    } else
+        init_unistr( &info->driverpath, "" );
 
-	TALLOC_FREE(temp);
 	if (strlen(driver.info_3->datafile)) {
-		temp = talloc_asprintf(ctx,
-				"\\\\%s%s",
-				servername,
-				driver.info_3->datafile);
+		slprintf(temp, sizeof(temp)-1, "\\\\%s%s", servername, driver.info_3->datafile);
 		init_unistr( &info->datafile, temp );
 	} else
 		init_unistr( &info->datafile, "" );
-
-	TALLOC_FREE(temp);
+	
 	if (strlen(driver.info_3->configfile)) {
-		temp = talloc_asprintf(ctx,
-				"\\\\%s%s",
-				servername,
-				driver.info_3->configfile);
-		init_unistr( &info->configfile, temp );
+		slprintf(temp, sizeof(temp)-1, "\\\\%s%s", servername, driver.info_3->configfile);
+		init_unistr( &info->configfile, temp );	
 	} else
 		init_unistr( &info->configfile, "" );
 }
@@ -5227,65 +5150,57 @@
 	int i=0;
 	int j=0;
 	const char *v;
-	char *line = NULL;
-	TALLOC_CTX *ctx = talloc_tos();
+	pstring line;
 
 	DEBUG(6,("init_unistr_array\n"));
 	*uni_array=NULL;
 
-	while (true) {
-		if ( !char_array ) {
+	while (True) 
+	{
+		if ( !char_array )
 			v = "";
-		} else {
+		else 
+		{
 			v = char_array[i];
-			if (!v)
+			if (!v) 
 				v = ""; /* hack to handle null lists */
 		}
-
-		/* hack to allow this to be used in places other than when generating
+		
+		/* hack to allow this to be used in places other than when generating 
 		   the list of dependent files */
-
-		TALLOC_FREE(line);
-		if ( servername ) {
-			line = talloc_asprintf(ctx,
-					"\\\\%s%s",
-					servername,
-					v);
-		} else {
-			line = talloc_strdup(ctx, v);
-		}
-
-		if (!line) {
-			SAFE_FREE(*uni_array);
-			return 0;
-		}
+		   
+		if ( servername )
+			slprintf( line, sizeof(line)-1, "\\\\%s%s", servername, v );
+		else
+			pstrcpy( line, v );
+			
 		DEBUGADD(6,("%d:%s:%lu\n", i, line, (unsigned long)strlen(line)));
 
 		/* add one extra unit16 for the second terminating NULL */
-
+		
 		if ( (*uni_array=SMB_REALLOC_ARRAY(*uni_array, uint16, j+1+strlen(line)+2)) == NULL ) {
 			DEBUG(2,("init_unistr_array: Realloc error\n" ));
 			return 0;
 		}
 
-		if ( !strlen(v) )
+		if ( !strlen(v) ) 
 			break;
-
+		
 		j += (rpcstr_push((*uni_array+j), line, sizeof(uint16)*strlen(line)+2, STR_TERMINATE) / sizeof(uint16));
 		i++;
 	}
-
+	
 	if (*uni_array) {
 		/* special case for ""; we need to add both NULL's here */
 		if (!j)
-			(*uni_array)[j++]=0x0000;
+			(*uni_array)[j++]=0x0000;	
 		(*uni_array)[j]=0x0000;
 	}
-
+	
 	DEBUGADD(6,("last one:done\n"));
 
 	/* return size of array in uint16's */
-
+		
 	return j+1;
 }
 
@@ -5296,56 +5211,39 @@
 
 static void fill_printer_driver_info_3(DRIVER_INFO_3 *info, NT_PRINTER_DRIVER_INFO_LEVEL driver, fstring servername)
 {
-	char *temp = NULL;
-	TALLOC_CTX *ctx = talloc_tos();
+	pstring temp;
 
 	ZERO_STRUCTP(info);
 
 	info->version=driver.info_3->cversion;
 
-	init_unistr( &info->name, driver.info_3->name );
+	init_unistr( &info->name, driver.info_3->name );	
 	init_unistr( &info->architecture, driver.info_3->environment );
 
 	if (strlen(driver.info_3->driverpath)) {
-		temp = talloc_asprintf(ctx,
-				"\\\\%s%s",
-				servername,
-				driver.info_3->driverpath);
+		slprintf(temp, sizeof(temp)-1, "\\\\%s%s", servername, driver.info_3->driverpath);		
 		init_unistr( &info->driverpath, temp );
 	} else
 		init_unistr( &info->driverpath, "" );
-
-	TALLOC_FREE(temp);
+    
 	if (strlen(driver.info_3->datafile)) {
-		temp = talloc_asprintf(ctx,
-				"\\\\%s%s",
-				servername,
-				driver.info_3->datafile);
+		slprintf(temp, sizeof(temp)-1, "\\\\%s%s", servername, driver.info_3->datafile);
 		init_unistr( &info->datafile, temp );
 	} else
 		init_unistr( &info->datafile, "" );
 
-	TALLOC_FREE(temp);
 	if (strlen(driver.info_3->configfile)) {
-		temp = talloc_asprintf(ctx,
-				"\\\\%s%s",
-				servername,
-				driver.info_3->configfile);
-		init_unistr( &info->configfile, temp );
+		slprintf(temp, sizeof(temp)-1, "\\\\%s%s", servername, driver.info_3->configfile);
+		init_unistr( &info->configfile, temp );	
 	} else
 		init_unistr( &info->configfile, "" );
 
-	TALLOC_FREE(temp);
 	if (strlen(driver.info_3->helpfile)) {
-		temp = talloc_asprintf(ctx,
-				"\\\\%s%s",
-				servername,
-				driver.info_3->helpfile);
+		slprintf(temp, sizeof(temp)-1, "\\\\%s%s", servername, driver.info_3->helpfile);
 		init_unistr( &info->helpfile, temp );
 	} else
 		init_unistr( &info->helpfile, "" );
 
-	TALLOC_FREE(temp);
 	init_unistr( &info->monitorname, driver.info_3->monitorname );
 	init_unistr( &info->defaultdatatype, driver.info_3->defaultdatatype );
 
@@ -5359,7 +5257,7 @@
  ********************************************************************/
 
 static WERROR construct_printer_driver_info_3(DRIVER_INFO_3 *info, int snum, fstring servername, fstring architecture, uint32 version)
-{
+{	
 	NT_PRINTER_INFO_LEVEL *printer = NULL;
 	NT_PRINTER_DRIVER_INFO_LEVEL driver;
 	WERROR status;
@@ -5370,13 +5268,13 @@
 	if (!W_ERROR_IS_OK(status))
 		return WERR_INVALID_PRINTER_NAME;
 
-	status=get_a_printer_driver(&driver, 3, printer->info_2->drivername, architecture, version);
+	status=get_a_printer_driver(&driver, 3, printer->info_2->drivername, architecture, version);	
 	DEBUG(8,("construct_printer_driver_info_3: status: %s\n", dos_errstr(status)));
 
 #if 0	/* JERRY */
 
-	/*
-	 * I put this code in during testing.  Helpful when commenting out the
+	/* 
+	 * I put this code in during testing.  Helpful when commenting out the 
 	 * support for DRIVER_INFO_6 in regards to win2k.  Not needed in general
 	 * as win2k always queries the driver using an infor level of 6.
 	 * I've left it in (but ifdef'd out) because I'll probably
@@ -5390,7 +5288,7 @@
 		if (version == 3) {
 			/* Yes - try again with a WinNT driver. */
 			version = 2;
-			status=get_a_printer_driver(&driver, 3, printer->info_2->drivername, architecture, version);
+			status=get_a_printer_driver(&driver, 3, printer->info_2->drivername, architecture, version);	
 			DEBUG(8,("construct_printer_driver_info_3: status: %s\n", dos_errstr(status)));
 		}
 #endif
@@ -5399,12 +5297,12 @@
 			free_a_printer(&printer,2);
 			return WERR_UNKNOWN_PRINTER_DRIVER;
 		}
-
+		
 #if 0	/* JERRY */
 	}
 #endif
+	
 
-
 	fill_printer_driver_info_3(info, driver, servername);
 
 	free_a_printer(&printer,2);
@@ -5419,58 +5317,41 @@
 
 static void fill_printer_driver_info_6(DRIVER_INFO_6 *info, NT_PRINTER_DRIVER_INFO_LEVEL driver, fstring servername)
 {
-	char *temp = NULL;
+	pstring temp;
 	fstring nullstr;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	ZERO_STRUCTP(info);
 	memset(&nullstr, '\0', sizeof(fstring));
 
 	info->version=driver.info_3->cversion;
 
-	init_unistr( &info->name, driver.info_3->name );
+	init_unistr( &info->name, driver.info_3->name );	
 	init_unistr( &info->architecture, driver.info_3->environment );
 
 	if (strlen(driver.info_3->driverpath)) {
-		temp = talloc_asprintf(ctx,
-				"\\\\%s%s",
-				servername,
-				driver.info_3->driverpath);
+		slprintf(temp, sizeof(temp)-1, "\\\\%s%s", servername, driver.info_3->driverpath);		
 		init_unistr( &info->driverpath, temp );
 	} else
 		init_unistr( &info->driverpath, "" );
 
-	TALLOC_FREE(temp);
 	if (strlen(driver.info_3->datafile)) {
-		temp = talloc_asprintf(ctx,
-				"\\\\%s%s",
-				servername,
-				driver.info_3->datafile);
+		slprintf(temp, sizeof(temp)-1, "\\\\%s%s", servername, driver.info_3->datafile);
 		init_unistr( &info->datafile, temp );
 	} else
 		init_unistr( &info->datafile, "" );
 
-	TALLOC_FREE(temp);
 	if (strlen(driver.info_3->configfile)) {
-		temp = talloc_asprintf(ctx,
-				"\\\\%s%s",
-				servername,
-				driver.info_3->configfile);
-		init_unistr( &info->configfile, temp );
+		slprintf(temp, sizeof(temp)-1, "\\\\%s%s", servername, driver.info_3->configfile);
+		init_unistr( &info->configfile, temp );	
 	} else
 		init_unistr( &info->configfile, "" );
 
-	TALLOC_FREE(temp);
 	if (strlen(driver.info_3->helpfile)) {
-		temp = talloc_asprintf(ctx,
-				"\\\\%s%s",
-				servername,
-				driver.info_3->helpfile);
+		slprintf(temp, sizeof(temp)-1, "\\\\%s%s", servername, driver.info_3->helpfile);
 		init_unistr( &info->helpfile, temp );
 	} else
 		init_unistr( &info->helpfile, "" );
-
-	TALLOC_FREE(temp);
+	
 	init_unistr( &info->monitorname, driver.info_3->monitorname );
 	init_unistr( &info->defaultdatatype, driver.info_3->defaultdatatype );
 
@@ -5497,27 +5378,27 @@
  * fill a printer_info_6 struct
  ********************************************************************/
 
-static WERROR construct_printer_driver_info_6(DRIVER_INFO_6 *info, int snum,
+static WERROR construct_printer_driver_info_6(DRIVER_INFO_6 *info, int snum, 
               fstring servername, fstring architecture, uint32 version)
-{
+{	
 	NT_PRINTER_INFO_LEVEL 		*printer = NULL;
 	NT_PRINTER_DRIVER_INFO_LEVEL 	driver;
 	WERROR 				status;
-
+	
 	ZERO_STRUCT(driver);
 
 	status=get_a_printer(NULL, &printer, 2, lp_const_servicename(snum) );
-
+	
 	DEBUG(8,("construct_printer_driver_info_6: status: %s\n", dos_errstr(status)));
-
+	
 	if (!W_ERROR_IS_OK(status))
 		return WERR_INVALID_PRINTER_NAME;
 
 	status = get_a_printer_driver(&driver, 3, printer->info_2->drivername, architecture, version);
-
+		
 	DEBUG(8,("construct_printer_driver_info_6: status: %s\n", dos_errstr(status)));
-
-	if (!W_ERROR_IS_OK(status))
+	
+	if (!W_ERROR_IS_OK(status)) 
 	{
 		/*
 		 * Is this a W2k client ?
@@ -5530,7 +5411,7 @@
 
 		/* Yes - try again with a WinNT driver. */
 		version = 2;
-		status=get_a_printer_driver(&driver, 3, printer->info_2->drivername, architecture, version);
+		status=get_a_printer_driver(&driver, 3, printer->info_2->drivername, architecture, version);	
 		DEBUG(8,("construct_printer_driver_info_6: status: %s\n", dos_errstr(status)));
 		if (!W_ERROR_IS_OK(status)) {
 			free_a_printer(&printer,2);
@@ -5569,15 +5450,15 @@
 {
 	DRIVER_INFO_1 *info=NULL;
 	WERROR result;
-
+	
 	if((info=SMB_MALLOC_P(DRIVER_INFO_1)) == NULL)
 		return WERR_NOMEM;
-
+	
 	result = construct_printer_driver_info_1(info, snum, servername, architecture, version);
-	if (!W_ERROR_IS_OK(result))
+	if (!W_ERROR_IS_OK(result)) 
 		goto out;
 
-	/* check the required size. */
+	/* check the required size. */	
 	*needed += spoolss_size_printer_driver_info_1(info);
 
 	if (*needed > offered) {
@@ -5591,7 +5472,7 @@
 	}
 
 	/* fill the buffer with the structures */
-	smb_io_printer_driver_info_1("", buffer, info, 0);
+	smb_io_printer_driver_info_1("", buffer, info, 0);	
 
 out:
 	/* clear memory */
@@ -5607,29 +5488,29 @@
 {
 	DRIVER_INFO_2 *info=NULL;
 	WERROR result;
-
+	
 	if((info=SMB_MALLOC_P(DRIVER_INFO_2)) == NULL)
 		return WERR_NOMEM;
-
+	
 	result = construct_printer_driver_info_2(info, snum, servername, architecture, version);
-	if (!W_ERROR_IS_OK(result))
+	if (!W_ERROR_IS_OK(result)) 
 		goto out;
 
-	/* check the required size. */
+	/* check the required size. */	
 	*needed += spoolss_size_printer_driver_info_2(info);
 
 	if (*needed > offered) {
 		result = WERR_INSUFFICIENT_BUFFER;
 		goto out;
 	}
-
+	
 	if (!rpcbuf_alloc_size(buffer, *needed)) {
 		result = WERR_NOMEM;
 		goto out;
 	}
 
 	/* fill the buffer with the structures */
-	smb_io_printer_driver_info_2("", buffer, info, 0);
+	smb_io_printer_driver_info_2("", buffer, info, 0);	
 
 out:
 	/* clear memory */
@@ -5652,7 +5533,7 @@
 	if (!W_ERROR_IS_OK(result))
 		goto out;
 
-	/* check the required size. */
+	/* check the required size. */	
 	*needed += spoolss_size_printer_driver_info_3(&info);
 
 	if (*needed > offered) {
@@ -5685,17 +5566,17 @@
 	ZERO_STRUCT(info);
 
 	result = construct_printer_driver_info_6(&info, snum, servername, architecture, version);
-	if (!W_ERROR_IS_OK(result))
+	if (!W_ERROR_IS_OK(result)) 
 		goto out;
 
-	/* check the required size. */
+	/* check the required size. */	
 	*needed += spoolss_size_printer_driver_info_6(&info);
 
 	if (*needed > offered) {
 		result = WERR_INSUFFICIENT_BUFFER;
 		goto out;
 	}
-
+	
 	if (!rpcbuf_alloc_size(buffer, *needed)) {
 		result = WERR_NOMEM;
 		goto out;
@@ -5751,9 +5632,9 @@
 	*serverminorversion = 0;
 
 	fstrcpy(servername, get_server_name( printer ));
-	unistr2_to_ascii(architecture, uni_arch, sizeof(architecture));
+	unistr2_to_ascii(architecture, uni_arch, sizeof(architecture)-1);
 
-	if (!get_printer_snum(p, handle, &snum, NULL))
+	if (!get_printer_snum(p, handle, &snum))
 		return WERR_BADFID;
 
 	switch (level) {
@@ -5766,8 +5647,8 @@
 	case 6:
 		return getprinterdriver2_level6(servername, architecture, clientmajorversion, snum, buffer, offered, needed);
 #if 0	/* JERRY */
-	case 101:
-		/* apparently this call is the equivalent of
+	case 101: 
+		/* apparently this call is the equivalent of 
 		   EnumPrinterDataEx() for the DsDriver key */
 		break;
 #endif
@@ -5808,8 +5689,8 @@
 		DEBUG(2,("_spoolss_endpageprinter: Invalid handle (%s:%u:%u).\n",OUR_HANDLE(handle)));
 		return WERR_BADFID;
 	}
-
-	if (!get_printer_snum(p, handle, &snum, NULL))
+	
+	if (!get_printer_snum(p, handle, &snum))
 		return WERR_BADFID;
 
 	Printer->page_started=False;
@@ -5829,18 +5710,21 @@
 	POLICY_HND *handle = &q_u->handle;
 	DOC_INFO *docinfo = &q_u->doc_info_container.docinfo;
 	uint32 *jobid = &r_u->jobid;
-	TALLOC_CTX *ctx = p->mem_ctx;
+
 	DOC_INFO_1 *info_1 = &docinfo->doc_info_1;
 	int snum;
-	char *jobname = NULL;
+	pstring jobname;
 	fstring datatype;
 	Printer_entry *Printer = find_printer_index_by_hnd(p, handle);
+	struct current_user user;
 
 	if (!Printer) {
 		DEBUG(2,("_spoolss_startdocprinter: Invalid handle (%s:%u:%u)\n", OUR_HANDLE(handle)));
 		return WERR_BADFID;
 	}
 
+	get_current_user(&user, p);
+
 	/*
 	 * a nice thing with NT is it doesn't listen to what you tell it.
 	 * when asked to send _only_ RAW datas, it tries to send datas
@@ -5848,31 +5732,31 @@
 	 *
 	 * So I add checks like in NT Server ...
 	 */
-
+	
 	if (info_1->p_datatype != 0) {
 		unistr2_to_ascii(datatype, &info_1->datatype, sizeof(datatype));
 		if (strcmp(datatype, "RAW") != 0) {
 			(*jobid)=0;
 			return WERR_INVALID_DATATYPE;
-		}
-	}
-
+		}		
+	}		
+	
 	/* get the share number of the printer */
-	if (!get_printer_snum(p, handle, &snum, NULL)) {
+	if (!get_printer_snum(p, handle, &snum)) {
 		return WERR_BADFID;
 	}
 
-	jobname = unistr2_to_ascii_talloc(ctx, &info_1->docname);
+	unistr2_to_ascii(jobname, &info_1->docname, sizeof(jobname));
+	
+	Printer->jobid = print_job_start(&user, snum, jobname, Printer->nt_devmode);
 
-	Printer->jobid = print_job_start(&p->pipe_user, snum, jobname, Printer->nt_devmode);
-
 	/* An error occured in print_job_start() so return an appropriate
 	   NT error code. */
 
 	if (Printer->jobid == -1) {
 		return map_werror_from_unix(errno);
 	}
-
+	
 	Printer->document_started=True;
 	(*jobid) = Printer->jobid;
 
@@ -5903,14 +5787,14 @@
 	uint32 *buffer_written = &q_u->buffer_size2;
 	int snum;
 	Printer_entry *Printer = find_printer_index_by_hnd(p, handle);
-
+	
 	if (!Printer) {
 		DEBUG(2,("_spoolss_writeprinter: Invalid handle (%s:%u:%u)\n",OUR_HANDLE(handle)));
 		r_u->buffer_written = q_u->buffer_size2;
 		return WERR_BADFID;
 	}
 
-	if (!get_printer_snum(p, handle, &snum, NULL))
+	if (!get_printer_snum(p, handle, &snum))
 		return WERR_BADFID;
 
 	(*buffer_written) = (uint32)print_job_write(snum, Printer->jobid, (const char *)buffer,
@@ -5937,32 +5821,35 @@
 static WERROR control_printer(POLICY_HND *handle, uint32 command,
 			      pipes_struct *p)
 {
+	struct current_user user;
 	int snum;
 	WERROR errcode = WERR_BADFUNC;
 	Printer_entry *Printer = find_printer_index_by_hnd(p, handle);
 
+	get_current_user(&user, p);
+
 	if (!Printer) {
 		DEBUG(2,("control_printer: Invalid handle (%s:%u:%u)\n", OUR_HANDLE(handle)));
 		return WERR_BADFID;
 	}
 
-	if (!get_printer_snum(p, handle, &snum, NULL))
+	if (!get_printer_snum(p, handle, &snum))
 		return WERR_BADFID;
 
 	switch (command) {
 	case PRINTER_CONTROL_PAUSE:
-		if (print_queue_pause(&p->pipe_user, snum, &errcode)) {
+		if (print_queue_pause(&user, snum, &errcode)) {
 			errcode = WERR_OK;
 		}
 		break;
 	case PRINTER_CONTROL_RESUME:
 	case PRINTER_CONTROL_UNPAUSE:
-		if (print_queue_resume(&p->pipe_user, snum, &errcode)) {
+		if (print_queue_resume(&user, snum, &errcode)) {
 			errcode = WERR_OK;
 		}
 		break;
 	case PRINTER_CONTROL_PURGE:
-		if (print_queue_purge(&p->pipe_user, snum, &errcode)) {
+		if (print_queue_purge(&user, snum, &errcode)) {
 			errcode = WERR_OK;
 		}
 		break;
@@ -5984,18 +5871,21 @@
 	POLICY_HND	*handle = &q_u->handle;
 	Printer_entry 	*Printer = find_printer_index_by_hnd(p, handle);
 	int		snum;
+	struct 		current_user user;
 	WERROR 		errcode = WERR_OK;
-
+	
 	if (!Printer) {
 		DEBUG(2,("_spoolss_abortprinter: Invalid handle (%s:%u:%u)\n",OUR_HANDLE(handle)));
 		return WERR_BADFID;
 	}
-
-	if (!get_printer_snum(p, handle, &snum, NULL))
+	
+	if (!get_printer_snum(p, handle, &snum))
 		return WERR_BADFID;
-
-	print_job_delete( &p->pipe_user, snum, Printer->jobid, &errcode );
-
+	
+	get_current_user( &user, p );	
+	
+	print_job_delete( &user, snum, Printer->jobid, &errcode );	
+	
 	return errcode;
 }
 
@@ -6014,14 +5904,14 @@
 
 	Printer_entry *Printer = find_printer_index_by_hnd(p, handle);
 
-	if (!Printer || !get_printer_snum(p, handle, &snum, NULL)) {
+	if (!Printer || !get_printer_snum(p, handle, &snum)) {
 		DEBUG(2,("update_printer_sec: Invalid handle (%s:%u:%u)\n",
 			 OUR_HANDLE(handle)));
 
 		result = WERR_BADFID;
 		goto done;
 	}
-
+	
 	if (!secdesc_ctr) {
 		DEBUG(10,("update_printer_sec: secdesc_ctr is NULL !\n"));
 		result = WERR_INVALID_PARAM;
@@ -6042,35 +5932,37 @@
 	/* NT seems to like setting the security descriptor even though
 	   nothing may have actually changed. */
 
-	if ( !nt_printing_getsec(p->mem_ctx, Printer->sharename, &old_secdesc_ctr)) {
-		DEBUG(2,("update_printer_sec: nt_printing_getsec() failed\n"));
-		result = WERR_BADFID;
-		goto done;
-	}
+	nt_printing_getsec(p->mem_ctx, Printer->sharename, &old_secdesc_ctr);
 
 	if (DEBUGLEVEL >= 10) {
 		SEC_ACL *the_acl;
 		int i;
 
-		the_acl = old_secdesc_ctr->sd->dacl;
-		DEBUG(10, ("old_secdesc_ctr for %s has %d aces:\n",
+		the_acl = old_secdesc_ctr->sec->dacl;
+		DEBUG(10, ("old_secdesc_ctr for %s has %d aces:\n", 
 			   PRINTERNAME(snum), the_acl->num_aces));
 
 		for (i = 0; i < the_acl->num_aces; i++) {
-			DEBUG(10, ("%s 0x%08x\n", sid_string_dbg(
-					   &the_acl->aces[i].trustee),
+			fstring sid_str;
+
+			sid_to_string(sid_str, &the_acl->aces[i].trustee);
+
+			DEBUG(10, ("%s 0x%08x\n", sid_str, 
 				  the_acl->aces[i].access_mask));
 		}
 
-		the_acl = secdesc_ctr->sd->dacl;
+		the_acl = secdesc_ctr->sec->dacl;
 
 		if (the_acl) {
-			DEBUG(10, ("secdesc_ctr for %s has %d aces:\n",
+			DEBUG(10, ("secdesc_ctr for %s has %d aces:\n", 
 				   PRINTERNAME(snum), the_acl->num_aces));
 
 			for (i = 0; i < the_acl->num_aces; i++) {
-				DEBUG(10, ("%s 0x%08x\n", sid_string_dbg(
-						   &the_acl->aces[i].trustee),
+				fstring sid_str;
+				
+				sid_to_string(sid_str, &the_acl->aces[i].trustee);
+				
+				DEBUG(10, ("%s 0x%08x\n", sid_str, 
 					   the_acl->aces[i].access_mask));
 			}
 		} else {
@@ -6084,7 +5976,7 @@
 		goto done;
 	}
 
-	if (sec_desc_equal(new_secdesc_ctr->sd, old_secdesc_ctr->sd)) {
+	if (sec_desc_equal(new_secdesc_ctr->sec, old_secdesc_ctr->sec)) {
 		result = WERR_OK;
 		goto done;
 	}
@@ -6099,26 +5991,26 @@
 /********************************************************************
  Canonicalize printer info from a client
 
- ATTN: It does not matter what we set the servername to hear
- since we do the necessary work in get_a_printer() to set it to
- the correct value based on what the client sent in the
+ ATTN: It does not matter what we set the servername to hear 
+ since we do the necessary work in get_a_printer() to set it to 
+ the correct value based on what the client sent in the 
  _spoolss_open_printer_ex().
  ********************************************************************/
 
-static bool check_printer_ok(NT_PRINTER_INFO_LEVEL_2 *info, int snum)
+static BOOL check_printer_ok(NT_PRINTER_INFO_LEVEL_2 *info, int snum)
 {
 	fstring printername;
 	const char *p;
-
+	
 	DEBUG(5,("check_printer_ok: servername=%s printername=%s sharename=%s "
 		"portname=%s drivername=%s comment=%s location=%s\n",
-		info->servername, info->printername, info->sharename,
+		info->servername, info->printername, info->sharename, 
 		info->portname, info->drivername, info->comment, info->location));
 
 	/* we force some elements to "correct" values */
 	slprintf(info->servername, sizeof(info->servername)-1, "\\\\%s", global_myname());
 	fstrcpy(info->sharename, lp_servicename(snum));
-
+	
 	/* check to see if we allow printername != sharename */
 
 	if ( lp_force_printername(snum) ) {
@@ -6127,48 +6019,44 @@
 	} else {
 
 		/* make sure printername is in \\server\printername format */
-
+	
 		fstrcpy( printername, info->printername );
 		p = printername;
 		if ( printername[0] == '\\' && printername[1] == '\\' ) {
 			if ( (p = strchr_m( &printername[2], '\\' )) != NULL )
 				p++;
 		}
-
+		
 		slprintf(info->printername, sizeof(info->printername)-1, "\\\\%s\\%s",
 			 global_myname(), p );
 	}
 
 	info->attributes |= PRINTER_ATTRIBUTE_SAMBA;
 	info->attributes &= ~PRINTER_ATTRIBUTE_NOT_SAMBA;
-
-
-
+	
+	
+	
 	return True;
 }
 
 /****************************************************************************
 ****************************************************************************/
 
-WERROR add_port_hook(TALLOC_CTX *ctx, NT_USER_TOKEN *token, const char *portname, const char *uri )
+WERROR add_port_hook(NT_USER_TOKEN *token, const char *portname, const char *uri )
 {
 	char *cmd = lp_addport_cmd();
-	char *command = NULL;
+	pstring command;
 	int ret;
 	int fd;
 	SE_PRIV se_printop = SE_PRINT_OPERATOR;
-	bool is_print_op = False;
+	BOOL is_print_op = False;
 
 	if ( !*cmd ) {
 		return WERR_ACCESS_DENIED;
 	}
+		
+	slprintf(command, sizeof(command)-1, "%s \"%s\" \"%s\"", cmd, portname, uri );
 
-	command = talloc_asprintf(ctx,
-			"%s \"%s\" \"%s\"", cmd, portname, uri );
-	if (!command) {
-		return WERR_NOMEM;
-	}
-
 	if ( token )
 		is_print_op = user_has_privileges( token, &se_printop );
 
@@ -6178,7 +6066,7 @@
 
 	if ( is_print_op )
 		become_root();
-
+	
 	ret = smbrun(command, &fd);
 
 	if ( is_print_op )
@@ -6188,51 +6076,38 @@
 
 	DEBUGADD(10,("returned [%d]\n", ret));
 
-	TALLOC_FREE(command);
-
 	if ( ret != 0 ) {
 		if (fd != -1)
 			close(fd);
 		return WERR_ACCESS_DENIED;
 	}
-
+	
 	return WERR_OK;
 }
 
 /****************************************************************************
 ****************************************************************************/
 
-bool add_printer_hook(TALLOC_CTX *ctx, NT_USER_TOKEN *token, NT_PRINTER_INFO_LEVEL *printer)
+BOOL add_printer_hook(NT_USER_TOKEN *token, NT_PRINTER_INFO_LEVEL *printer)
 {
 	char *cmd = lp_addprinter_cmd();
 	char **qlines;
-	char *command = NULL;
+	pstring command;
 	int numlines;
 	int ret;
 	int fd;
+	fstring remote_machine = "%m";
 	SE_PRIV se_printop = SE_PRINT_OPERATOR;
-	bool is_print_op = False;
-	char *remote_machine = talloc_strdup(ctx, "%m");
+	BOOL is_print_op = False;
 
-	if (!remote_machine) {
-		return false;
-	}
-	remote_machine = talloc_sub_basic(ctx,
-				current_user_info.smb_name,
-				current_user_info.domain,
-				remote_machine);
-	if (!remote_machine) {
-		return false;
-	}
-
-	command = talloc_asprintf(ctx,
-			"%s \"%s\" \"%s\" \"%s\" \"%s\" \"%s\" \"%s\" \"%s\"",
+	standard_sub_basic(current_user_info.smb_name,
+			   current_user_info.domain,
+			   remote_machine,sizeof(remote_machine));
+	
+	slprintf(command, sizeof(command)-1, "%s \"%s\" \"%s\" \"%s\" \"%s\" \"%s\" \"%s\" \"%s\"",
 			cmd, printer->info_2->printername, printer->info_2->sharename,
 			printer->info_2->portname, printer->info_2->drivername,
 			printer->info_2->location, printer->info_2->comment, remote_machine);
-	if (!command) {
-		return false;
-	}
 
 	if ( token )
 		is_print_op = user_has_privileges( token, &se_printop );
@@ -6243,11 +6118,10 @@
 
 	if ( is_print_op )
 		become_root();
-
+	
 	if ( (ret = smbrun(command, &fd)) == 0 ) {
 		/* Tell everyone we updated smb.conf. */
-		message_send_all(smbd_messaging_context(),
-				 MSG_SMB_CONF_UPDATED, NULL, 0, NULL);
+		message_send_all(conn_tdb_ctx(), MSG_SMB_CONF_UPDATED, NULL, 0, False, NULL);
 	}
 
 	if ( is_print_op )
@@ -6257,9 +6131,6 @@
 
 	DEBUGADD(10,("returned [%d]\n", ret));
 
-	TALLOC_FREE(command);
-	TALLOC_FREE(remote_machine);
-
 	if ( ret != 0 ) {
 		if (fd != -1)
 			close(fd);
@@ -6314,7 +6185,7 @@
 		goto done;
 	}
 
-	if (!get_printer_snum(p, handle, &snum, NULL)) {
+	if (!get_printer_snum(p, handle, &snum)) {
 		result = WERR_BADFID;
 		goto done;
 	}
@@ -6357,7 +6228,7 @@
 		goto done;
 	}
 
-	/* FIXME!!! If the driver has changed we really should verify that
+	/* FIXME!!! If the driver has changed we really should verify that 
 	   it is installed before doing much else   --jerry */
 
 	/* Check calling user has permission to update printer description */
@@ -6370,8 +6241,8 @@
 
 	/* Call addprinter hook */
 	/* Check changes to see if this is really needed */
-
-	if ( *lp_addprinter_cmd()
+	
+	if ( *lp_addprinter_cmd() 
 		&& (!strequal(printer->info_2->drivername, old_printer->info_2->drivername)
 			|| !strequal(printer->info_2->comment, old_printer->info_2->comment)
 			|| !strequal(printer->info_2->portname, old_printer->info_2->portname)
@@ -6379,12 +6250,12 @@
 	{
 		/* add_printer_hook() will call reload_services() */
 
-		if ( !add_printer_hook(p->mem_ctx, p->pipe_user.nt_user_token, printer) ) {
+		if ( !add_printer_hook(p->pipe_user.nt_user_token, printer) ) {
 			result = WERR_ACCESS_DENIED;
 			goto done;
 		}
 	}
-
+	
 	/*
 	 * When a *new* driver is bound to a printer, the drivername is used to
 	 * lookup previously saved driver initialization info, which is then
@@ -6392,21 +6263,21 @@
 	 */
 	if (!strequal(printer->info_2->drivername, old_printer->info_2->drivername))
 	{
-		if (!set_driver_init(printer, 2))
+		if (!set_driver_init(printer, 2)) 
 		{
 			DEBUG(5,("update_printer: Error restoring driver initialization data for driver [%s]!\n",
 				printer->info_2->drivername));
 		}
-
+		
 		DEBUG(10,("update_printer: changing driver [%s]!  Sending event!\n",
 			printer->info_2->drivername));
-
+			
 		notify_printer_driver(snum, printer->info_2->drivername);
 	}
 
-	/*
-	 * flag which changes actually occured.  This is a small subset of
-	 * all the possible changes.  We also have to update things in the
+	/* 
+	 * flag which changes actually occured.  This is a small subset of 
+	 * all the possible changes.  We also have to update things in the 
 	 * DsSpooler key.
 	 */
 
@@ -6428,20 +6299,20 @@
 
 	if (!strequal(printer->info_2->printername, old_printer->info_2->printername)) {
 		char *pname;
-
+		
 		if ( (pname = strchr_m( printer->info_2->printername+2, '\\' )) != NULL )
 			pname++;
 		else
 			pname = printer->info_2->printername;
+			
 
-
 		init_unistr2( &buffer, pname, UNI_STR_TERMINATE);
 		set_printer_dataex( printer, SPOOL_DSSPOOLER_KEY, "printerName",
 			REG_SZ, (uint8*)buffer.buffer, buffer.uni_str_len*2 );
 
 		notify_printer_printername( snum, pname );
 	}
-
+	
 	if (!strequal(printer->info_2->portname, old_printer->info_2->portname)) {
 		init_unistr2( &buffer, printer->info_2->portname, UNI_STR_TERMINATE);
 		set_printer_dataex( printer, SPOOL_DSSPOOLER_KEY, "portName",
@@ -6457,10 +6328,10 @@
 
 		notify_printer_location(snum, printer->info_2->location);
 	}
-
+	
 	/* here we need to update some more DsSpooler keys */
 	/* uNCName, serverName, shortServerName */
-
+	
 	init_unistr2( &buffer, global_myname(), UNI_STR_TERMINATE);
 	set_printer_dataex( printer, SPOOL_DSSPOOLER_KEY, "serverName",
 		REG_SZ, (uint8*)buffer.buffer, buffer.uni_str_len*2 );
@@ -6505,11 +6376,11 @@
 	if (!Printer)
 		return WERR_BADFID;
 
-	if (!get_printer_snum(p, handle, &snum, NULL))
+	if (!get_printer_snum(p, handle, &snum))
 		return WERR_BADFID;
-
+	
 	nt_printer_publish(Printer, snum, info7->action);
-
+	
 	return WERR_OK;
 #else
 	return WERR_UNKNOWN_LEVEL;
@@ -6529,19 +6400,19 @@
 	WERROR result;
 
 	Printer_entry *Printer = find_printer_index_by_hnd(p, handle);
-
+	
 	if (!Printer) {
 		DEBUG(2,("_spoolss_setprinter: Invalid handle (%s:%u:%u)\n", OUR_HANDLE(handle)));
 		return WERR_BADFID;
 	}
 
-	/* check the level */
+	/* check the level */	
 	switch (level) {
 		case 0:
 			return control_printer(handle, command, p);
 		case 2:
 			result = update_printer(p, handle, level, info, devmode_ctr.devmode);
-			if (!W_ERROR_IS_OK(result))
+			if (!W_ERROR_IS_OK(result)) 
 				return result;
 			if (secdesc_ctr)
 				result = update_printer_sec(handle, level, info, p, secdesc_ctr);
@@ -6563,7 +6434,7 @@
 {
 	POLICY_HND *handle = &q_u->handle;
 	Printer_entry *Printer= find_printer_index_by_hnd(p, handle);
-
+	
 	if (!Printer) {
 		DEBUG(2,("_spoolss_fcpn: Invalid handle (%s:%u:%u)\n", OUR_HANDLE(handle)));
 		return WERR_BADFID;
@@ -6575,7 +6446,7 @@
 		if ( Printer->printer_type == SPLHND_SERVER)
 			snum = -1;
 		else if ( (Printer->printer_type == SPLHND_PRINTER) &&
-				!get_printer_snum(p, handle, &snum, NULL) )
+				!get_printer_snum(p, handle, &snum) )
 			return WERR_BADFID;
 
 		srv_spoolss_replycloseprinter(snum, &Printer->notify.client_hnd);
@@ -6616,14 +6487,14 @@
 ****************************************************************************/
 
 static void fill_job_info_1(JOB_INFO_1 *job_info, const print_queue_struct *queue,
-                            int position, int snum,
+                            int position, int snum, 
                             const NT_PRINTER_INFO_LEVEL *ntprinter)
 {
 	struct tm *t;
-
+	
 	t=gmtime(&queue->time);
 
-	job_info->jobid=queue->job;
+	job_info->jobid=queue->job;	
 	init_unistr(&job_info->printername, lp_servicename(snum));
 	init_unistr(&job_info->machinename, ntprinter->info_2->servername);
 	init_unistr(&job_info->username, queue->fs_user);
@@ -6642,8 +6513,8 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool fill_job_info_2(JOB_INFO_2 *job_info, const print_queue_struct *queue,
-                            int position, int snum,
+static BOOL fill_job_info_2(JOB_INFO_2 *job_info, const print_queue_struct *queue,
+                            int position, int snum, 
 			    const NT_PRINTER_INFO_LEVEL *ntprinter,
 			    DEVICEMODE *devmode)
 {
@@ -6652,9 +6523,9 @@
 	t=gmtime(&queue->time);
 
 	job_info->jobid=queue->job;
-
+	
 	init_unistr(&job_info->printername, ntprinter->info_2->printername);
-
+	
 	init_unistr(&job_info->machinename, ntprinter->info_2->servername);
 	init_unistr(&job_info->username, queue->fs_user);
 	init_unistr(&job_info->document, queue->fs_file);
@@ -6664,7 +6535,7 @@
 	init_unistr(&job_info->parameters, "");
 	init_unistr(&job_info->drivername, ntprinter->info_2->drivername);
 	init_unistr(&job_info->text_status, "");
-
+	
 /* and here the security descriptor */
 
 	job_info->status=nt_printj_status(queue->status);
@@ -6695,17 +6566,17 @@
 	JOB_INFO_1 *info;
 	int i;
 	WERROR result = WERR_OK;
-
+	
 	info=SMB_MALLOC_ARRAY(JOB_INFO_1,*returned);
 	if (info==NULL) {
 		*returned=0;
 		return WERR_NOMEM;
 	}
-
+	
 	for (i=0; i<*returned; i++)
 		fill_job_info_1( &info[i], &queue[i], i, snum, ntprinter );
 
-	/* check the required size. */
+	/* check the required size. */	
 	for (i=0; i<*returned; i++)
 		(*needed) += spoolss_size_job_info_1(&info[i]);
 
@@ -6721,7 +6592,7 @@
 
 	/* fill the buffer with the structures */
 	for (i=0; i<*returned; i++)
-		smb_io_job_info_1("", buffer, &info[i], 0);
+		smb_io_job_info_1("", buffer, &info[i], 0);	
 
 out:
 	/* clear memory */
@@ -6746,20 +6617,20 @@
 	int i;
 	WERROR result = WERR_OK;
 	DEVICEMODE *devmode = NULL;
-
+	
 	if ( !(info = SMB_MALLOC_ARRAY(JOB_INFO_2,*returned)) ) {
 		*returned=0;
 		return WERR_NOMEM;
 	}
-
+		
 	/* this should not be a failure condition if the devmode is NULL */
-
+	
 	devmode = construct_dev_mode(lp_const_servicename(snum));
 
 	for (i=0; i<*returned; i++)
 		fill_job_info_2(&(info[i]), &queue[i], i, snum, ntprinter, devmode);
 
-	/* check the required size. */
+	/* check the required size. */	
 	for (i=0; i<*returned; i++)
 		(*needed) += spoolss_size_job_info_2(&info[i]);
 
@@ -6775,7 +6646,7 @@
 
 	/* fill the buffer with the structures */
 	for (i=0; i<*returned; i++)
-		smb_io_job_info_2("", buffer, &info[i], 0);
+		smb_io_job_info_2("", buffer, &info[i], 0);	
 
 out:
 	free_devmode(devmode);
@@ -6793,7 +6664,7 @@
 ****************************************************************************/
 
 WERROR _spoolss_enumjobs( pipes_struct *p, SPOOL_Q_ENUMJOBS *q_u, SPOOL_R_ENUMJOBS *r_u)
-{
+{	
 	POLICY_HND *handle = &q_u->handle;
 	uint32 level = q_u->level;
 	RPC_BUFFER *buffer = NULL;
@@ -6821,14 +6692,14 @@
 	*returned=0;
 
 	/* lookup the printer snum and tdb entry */
-
-	if (!get_printer_snum(p, handle, &snum, NULL))
+	
+	if (!get_printer_snum(p, handle, &snum))
 		return WERR_BADFID;
 
 	wret = get_a_printer(NULL, &ntprinter, 2, lp_servicename(snum));
 	if ( !W_ERROR_IS_OK(wret) )
 		return wret;
-
+	
 	*returned = print_queue_status(snum, &queue, &prt_status);
 	DEBUGADD(4,("count:[%d], status:[%d], [%s]\n", *returned, prt_status.status, prt_status.message));
 
@@ -6850,7 +6721,7 @@
 		wret = WERR_UNKNOWN_LEVEL;
 		break;
 	}
-
+	
 	SAFE_FREE(queue);
 	free_a_printer( &ntprinter, 2 );
 	return wret;
@@ -6873,10 +6744,11 @@
 	uint32 jobid = q_u->jobid;
 	uint32 command = q_u->command;
 
+	struct current_user user;
 	int snum;
 	WERROR errcode = WERR_BADFUNC;
-
-	if (!get_printer_snum(p, handle, &snum, NULL)) {
+		
+	if (!get_printer_snum(p, handle, &snum)) {
 		return WERR_BADFID;
 	}
 
@@ -6884,21 +6756,23 @@
 		return WERR_INVALID_PRINTER_NAME;
 	}
 
+	get_current_user(&user, p);	
+
 	switch (command) {
 	case JOB_CONTROL_CANCEL:
 	case JOB_CONTROL_DELETE:
-		if (print_job_delete(&p->pipe_user, snum, jobid, &errcode)) {
+		if (print_job_delete(&user, snum, jobid, &errcode)) {
 			errcode = WERR_OK;
 		}
 		break;
 	case JOB_CONTROL_PAUSE:
-		if (print_job_pause(&p->pipe_user, snum, jobid, &errcode)) {
+		if (print_job_pause(&user, snum, jobid, &errcode)) {
 			errcode = WERR_OK;
-		}
+		}		
 		break;
 	case JOB_CONTROL_RESTART:
 	case JOB_CONTROL_RESUME:
-		if (print_job_resume(&p->pipe_user, snum, jobid, &errcode)) {
+		if (print_job_resume(&user, snum, jobid, &errcode)) {
 			errcode = WERR_OK;
 		}
 		break;
@@ -6947,21 +6821,21 @@
 			WERROR status;
 			DEBUGADD(5,("\tdriver: [%s]\n", list[i]));
 			ZERO_STRUCT(driver);
-			status = get_a_printer_driver(&driver, 3, list[i],
+			status = get_a_printer_driver(&driver, 3, list[i], 
 						      architecture, version);
 			if (!W_ERROR_IS_OK(status)) {
 				SAFE_FREE(list);
 				SAFE_FREE(driver_info_1);
 				return status;
 			}
-			fill_printer_driver_info_1(&driver_info_1[*returned+i], driver, servername, architecture );
+			fill_printer_driver_info_1(&driver_info_1[*returned+i], driver, servername, architecture );		
 			free_a_printer_driver(driver, 3);
-		}
+		}	
 
 		*returned+=ndrivers;
 		SAFE_FREE(list);
 	}
-
+	
 	/* check the required size. */
 	for (i=0; i<*returned; i++) {
 		DEBUGADD(6,("adding driver [%d]'s size\n",i));
@@ -6974,7 +6848,7 @@
 	}
 
 	if (!rpcbuf_alloc_size(buffer, *needed)) {
-		result = WERR_NOMEM;
+		result = WERR_NOMEM;	
 		goto out;
 	}
 
@@ -7026,27 +6900,27 @@
 				return WERR_NOMEM;
 			}
 		}
-
+		
 		for (i=0; i<ndrivers; i++) {
 			WERROR status;
 
 			DEBUGADD(5,("\tdriver: [%s]\n", list[i]));
 			ZERO_STRUCT(driver);
-			status = get_a_printer_driver(&driver, 3, list[i],
+			status = get_a_printer_driver(&driver, 3, list[i], 
 						      architecture, version);
 			if (!W_ERROR_IS_OK(status)) {
 				SAFE_FREE(list);
 				SAFE_FREE(driver_info_2);
 				return status;
 			}
-			fill_printer_driver_info_2(&driver_info_2[*returned+i], driver, servername);
+			fill_printer_driver_info_2(&driver_info_2[*returned+i], driver, servername);		
 			free_a_printer_driver(driver, 3);
-		}
+		}	
 
 		*returned+=ndrivers;
 		SAFE_FREE(list);
 	}
-
+	
 	/* check the required size. */
 	for (i=0; i<*returned; i++) {
 		DEBUGADD(6,("adding driver [%d]'s size\n",i));
@@ -7059,7 +6933,7 @@
 	}
 
 	if (!rpcbuf_alloc_size(buffer, *needed)) {
-		result = WERR_NOMEM;
+		result = WERR_NOMEM;	
 		goto out;
 	}
 
@@ -7117,16 +6991,16 @@
 
 			DEBUGADD(5,("\tdriver: [%s]\n", list[i]));
 			ZERO_STRUCT(driver);
-			status = get_a_printer_driver(&driver, 3, list[i],
+			status = get_a_printer_driver(&driver, 3, list[i], 
 						      architecture, version);
 			if (!W_ERROR_IS_OK(status)) {
 				SAFE_FREE(list);
 				SAFE_FREE(driver_info_3);
 				return status;
 			}
-			fill_printer_driver_info_3(&driver_info_3[*returned+i], driver, servername);
+			fill_printer_driver_info_3(&driver_info_3[*returned+i], driver, servername);		
 			free_a_printer_driver(driver, 3);
-		}
+		}	
 
 		*returned+=ndrivers;
 		SAFE_FREE(list);
@@ -7144,7 +7018,7 @@
 	}
 
 	if (!rpcbuf_alloc_size(buffer, *needed)) {
-		result = WERR_NOMEM;
+		result = WERR_NOMEM;	
 		goto out;
 	}
 
@@ -7160,7 +7034,7 @@
 	}
 
 	SAFE_FREE(driver_info_3);
-
+	
 	if ( !W_ERROR_IS_OK(result) )
 		*returned = 0;
 
@@ -7192,12 +7066,12 @@
 	buffer = r_u->buffer;
 
 	DEBUG(4,("_spoolss_enumprinterdrivers\n"));
-
+	
 	*needed   = 0;
 	*returned = 0;
 
-	unistr2_to_ascii(architecture, &q_u->environment, sizeof(architecture));
-	unistr2_to_ascii(servername, &q_u->name, sizeof(servername));
+	unistr2_to_ascii(architecture, &q_u->environment, sizeof(architecture)-1);
+	unistr2_to_ascii(servername, &q_u->name, sizeof(servername)-1);
 
 	if ( !is_myname_or_ipaddr( servername ) )
 		return WERR_UNKNOWN_PRINTER_DRIVER;
@@ -7226,9 +7100,9 @@
 	form->left=list->left;
 	form->top=list->top;
 	form->right=list->right;
-	form->bottom=list->bottom;
+	form->bottom=list->bottom;	
 }
-
+	
 /****************************************************************************
 ****************************************************************************/
 
@@ -7286,14 +7160,14 @@
 			DEBUGADD(6,("Filling form number [%d]\n",i));
 			fill_form_1(&forms_1[i], &builtinlist[i]);
 		}
-
+		
 		SAFE_FREE(builtinlist);
 
 		for (; i<*numofforms; i++) {
 			DEBUGADD(6,("Filling form number [%d]\n",i));
 			fill_form_1(&forms_1[i], &list[i-numbuiltinforms]);
 		}
-
+		
 		SAFE_FREE(list);
 
 		/* check the required size. */
@@ -7306,14 +7180,14 @@
 			buffer_size += spoolss_size_form_1(&forms_1[i]);
 		}
 
-		*needed=buffer_size;
-
+		*needed=buffer_size;		
+		
 		if (*needed > offered) {
 			SAFE_FREE(forms_1);
 			*numofforms=0;
 			return WERR_INSUFFICIENT_BUFFER;
 		}
-
+	
 		if (!rpcbuf_alloc_size(buffer, buffer_size)){
 			SAFE_FREE(forms_1);
 			*numofforms=0;
@@ -7333,7 +7207,7 @@
 		SAFE_FREE(forms_1);
 
 		return WERR_OK;
-
+			
 	default:
 		SAFE_FREE(list);
 		SAFE_FREE(builtinlist);
@@ -7354,7 +7228,7 @@
 
 	nt_forms_struct *list=NULL;
 	nt_forms_struct builtin_form;
-	bool foundBuiltin;
+	BOOL foundBuiltin;
 	FORM_1 form_1;
 	fstring form_name;
 	int buffer_size=0;
@@ -7369,7 +7243,7 @@
 	rpcbuf_move(q_u->buffer, &r_u->buffer);
 	buffer = r_u->buffer;
 
-	unistr2_to_ascii(form_name, uni_formname, sizeof(form_name));
+	unistr2_to_ascii(form_name, uni_formname, sizeof(form_name)-1);
 
 	DEBUG(4,("_spoolss_getform\n"));
 	DEBUGADD(5,("Offered buffer size [%d]\n", offered));
@@ -7401,7 +7275,7 @@
 					break;
 				}
 			}
-
+			
 			SAFE_FREE(list);
 			if (i == numofforms) {
 				return WERR_BADFID;
@@ -7410,8 +7284,8 @@
 		/* check the required size. */
 
 		*needed=spoolss_size_form_1(&form_1);
-
-		if (*needed > offered)
+		
+		if (*needed > offered) 
 			return WERR_INSUFFICIENT_BUFFER;
 
 		if (!rpcbuf_alloc_size(buffer, buffer_size))
@@ -7422,7 +7296,7 @@
 		smb_io_form_1("", buffer, &form_1, 0);
 
 		return WERR_OK;
-
+			
 	default:
 		SAFE_FREE(list);
 		return WERR_UNKNOWN_LEVEL;
@@ -7438,7 +7312,7 @@
 }
 
 /****************************************************************************
- TODO: This probably needs distinguish between TCP/IP and Local ports
+ TODO: This probably needs distinguish between TCP/IP and Local ports 
  somehow.
 ****************************************************************************/
 
@@ -7448,7 +7322,7 @@
 	init_unistr(&port->monitor_name, "Local Monitor");
 	init_unistr(&port->description, SPL_LOCAL_PORT );
 	port->port_type=PORT_TYPE_WRITE;
-	port->reserved=0x0;
+	port->reserved=0x0;	
 }
 
 
@@ -7456,11 +7330,11 @@
  wrapper around the enumer ports command
 ****************************************************************************/
 
-WERROR enumports_hook(TALLOC_CTX *ctx, int *count, char ***lines )
+WERROR enumports_hook( int *count, char ***lines )
 {
 	char *cmd = lp_enumports_cmd();
-	char **qlines = NULL;
-	char *command = NULL;
+	char **qlines;
+	pstring command;
 	int numlines;
 	int ret;
 	int fd;
@@ -7469,30 +7343,21 @@
 	*lines = NULL;
 
 	/* if no hook then just fill in the default port */
-
+	
 	if ( !*cmd ) {
-		if (!(qlines = SMB_MALLOC_ARRAY( char*, 2 ))) {
-			return WERR_NOMEM;
-		}
-		if (!(qlines[0] = SMB_STRDUP( SAMBA_PRINTER_PORT_NAME ))) {
-			SAFE_FREE(qlines);
-			return WERR_NOMEM;
-		}
+		qlines = SMB_MALLOC_ARRAY( char*, 2 );
+		qlines[0] = SMB_STRDUP( SAMBA_PRINTER_PORT_NAME );
 		qlines[1] = NULL;
 		numlines = 1;
 	}
 	else {
 		/* we have a valid enumport command */
+		
+		slprintf(command, sizeof(command)-1, "%s \"%d\"", cmd, 1);
 
-		command = talloc_asprintf(ctx, "%s \"%d\"", cmd, 1);
-		if (!command) {
-			return WERR_NOMEM;
-		}
-
 		DEBUG(10,("Running [%s]\n", command));
 		ret = smbrun(command, &fd);
 		DEBUG(10,("Returned [%d]\n", ret));
-		TALLOC_FREE(command);
 		if (ret != 0) {
 			if (fd != -1) {
 				close(fd);
@@ -7505,7 +7370,7 @@
 		DEBUGADD(10,("Lines returned = [%d]\n", numlines));
 		close(fd);
 	}
-
+	
 	*count = numlines;
 	*lines = qlines;
 
@@ -7524,15 +7389,15 @@
 	char **qlines = NULL;
 	int numlines = 0;
 
-	result = enumports_hook(talloc_tos(), &numlines, &qlines );
+	result = enumports_hook( &numlines, &qlines );
 	if (!W_ERROR_IS_OK(result)) {
 		file_lines_free(qlines);
 		return result;
 	}
-
+	
 	if(numlines) {
 		if((ports=SMB_MALLOC_ARRAY( PORT_INFO_1, numlines )) == NULL) {
-			DEBUG(10,("Returning WERR_NOMEM [%s]\n",
+			DEBUG(10,("Returning WERR_NOMEM [%s]\n", 
 				  dos_errstr(WERR_NOMEM)));
 			file_lines_free(qlines);
 			return WERR_NOMEM;
@@ -7552,7 +7417,7 @@
 		DEBUGADD(6,("adding port [%d]'s size\n", i));
 		*needed += spoolss_size_port_info_1(&ports[i]);
 	}
-
+		
 	if (*needed > offered) {
 		result = WERR_INSUFFICIENT_BUFFER;
 		goto out;
@@ -7590,12 +7455,12 @@
 	char **qlines = NULL;
 	int numlines = 0;
 
-	result = enumports_hook(talloc_tos(), &numlines, &qlines );
+	result = enumports_hook( &numlines, &qlines );
 	if ( !W_ERROR_IS_OK(result)) {
 		file_lines_free(qlines);
 		return result;
 	}
-
+	
 	if(numlines) {
 		if((ports=SMB_MALLOC_ARRAY( PORT_INFO_2, numlines)) == NULL) {
 			file_lines_free(qlines);
@@ -7617,7 +7482,7 @@
 		DEBUGADD(6,("adding port [%d]'s size\n", i));
 		*needed += spoolss_size_port_info_2(&ports[i]);
 	}
-
+		
 	if (*needed > offered) {
 		result = WERR_INSUFFICIENT_BUFFER;
 		goto out;
@@ -7665,10 +7530,10 @@
 	buffer = r_u->buffer;
 
 	DEBUG(4,("_spoolss_enumports\n"));
-
+	
 	*returned=0;
 	*needed=0;
-
+	
 	switch (level) {
 	case 1:
 		return enumports_level_1(buffer, offered, needed, returned);
@@ -7707,17 +7572,17 @@
 	/* check to see if the printer already exists */
 
 	if ((snum = print_queue_snum(printer->info_2->sharename)) != -1) {
-		DEBUG(5, ("spoolss_addprinterex_level_2: Attempted to add a printer named [%s] when one already existed!\n",
+		DEBUG(5, ("spoolss_addprinterex_level_2: Attempted to add a printer named [%s] when one already existed!\n", 
 			printer->info_2->sharename));
 		free_a_printer(&printer, 2);
 		return WERR_PRINTER_ALREADY_EXISTS;
 	}
-
+	
 	/* FIXME!!!  smbd should check to see if the driver is installed before
 	   trying to add a printer like this  --jerry */
 
 	if (*lp_addprinter_cmd() ) {
-		if ( !add_printer_hook(p->mem_ctx, p->pipe_user.nt_user_token, printer) ) {
+		if ( !add_printer_hook(p->pipe_user.nt_user_token, printer) ) {
 			free_a_printer(&printer,2);
 			return WERR_ACCESS_DENIED;
 		}
@@ -7728,13 +7593,13 @@
 			printer->info_2->sharename ));
 	}
 
-	/* use our primary netbios name since get_a_printer() will convert
+	/* use our primary netbios name since get_a_printer() will convert 
 	   it to what the client expects on a case by case basis */
 
 	slprintf(name, sizeof(name)-1, "\\\\%s\\%s", global_myname(),
              printer->info_2->sharename);
 
-
+	
 	if ((snum = print_queue_snum(printer->info_2->sharename)) == -1) {
 		free_a_printer(&printer,2);
 		return WERR_ACCESS_DENIED;
@@ -7743,9 +7608,9 @@
 	/* you must be a printer admin to add a new printer */
 	if (!print_access_check(NULL, snum, PRINTER_ACCESS_ADMINISTER)) {
 		free_a_printer(&printer,2);
-		return WERR_ACCESS_DENIED;
+		return WERR_ACCESS_DENIED;		
 	}
-
+	
 	/*
 	 * Do sanity check on the requested changes for Samba.
 	 */
@@ -7757,7 +7622,7 @@
 
 	/*
 	 * When a printer is created, the drivername bound to the printer is used
-	 * to lookup previously saved driver initialization info, which is then
+	 * to lookup previously saved driver initialization info, which is then 
 	 * bound to the new printer, simulating what happens in the Windows arch.
 	 */
 
@@ -7765,7 +7630,7 @@
 	{
 		set_driver_init(printer, 2);
 	}
-	else
+	else 
 	{
 		/* A valid devmode was included, convert and link it
 		*/
@@ -7833,23 +7698,26 @@
 	SPOOL_PRINTER_DRIVER_INFO_LEVEL *info = &q_u->info;
 	WERROR err = WERR_OK;
 	NT_PRINTER_DRIVER_INFO_LEVEL driver;
+	struct current_user user;
 	fstring driver_name;
 	uint32 version;
 
 	ZERO_STRUCT(driver);
 
+	get_current_user(&user, p);
+	
 	if (!convert_printer_driver_info(info, &driver, level)) {
 		err = WERR_NOMEM;
 		goto done;
 	}
 
 	DEBUG(5,("Cleaning driver's information\n"));
-	err = clean_up_driver_struct(driver, level, &p->pipe_user);
+	err = clean_up_driver_struct(driver, level, &user);
 	if (!W_ERROR_IS_OK(err))
 		goto done;
 
 	DEBUG(5,("Moving driver to final destination\n"));
-	if( !W_ERROR_IS_OK(err = move_driver_to_download_area(driver, level, &p->pipe_user, &err)) ) {
+	if( !W_ERROR_IS_OK(err = move_driver_to_download_area(driver, level, &user, &err)) ) {
 		goto done;
 	}
 
@@ -7858,13 +7726,13 @@
 		goto done;
 	}
 
-	/*
+	/* 
 	 * I think this is where he DrvUpgradePrinter() hook would be
 	 * be called in a driver's interface DLL on a Windows NT 4.0/2k
 	 * server.  Right now, we just need to send ourselves a message
-	 * to update each printer bound to this driver.   --jerry
+	 * to update each printer bound to this driver.   --jerry	
 	 */
-	
+	 
 	if (!srv_spoolss_drv_upgrade_printer(driver_name)) {
 		DEBUG(0,("_spoolss_addprinterdriver: Failed to send message about upgrading driver [%s]!\n",
 			driver_name));
@@ -7890,11 +7758,11 @@
 		/*
 		 * 9x printer driver - never delete init data
 		*/
-		case 0:
+		case 0: 
 			DEBUG(10,("_spoolss_addprinterdriver: init data not deleted for 9x driver [%s]\n",
 					driver_name));
 			break;
-
+		
 		/*
 		 * Nt or 2k (compatiblity mode) printer driver - only delete init data if
 		 * there is no 2k/Xp driver init data for this driver name.
@@ -7914,7 +7782,7 @@
 				 * a 2k/Xp driver was found, don't delete init data because Nt driver will use it.
 				*/
 				free_a_printer_driver(driver1,3);
-				DEBUG(10,("_spoolss_addprinterdriver: init data not deleted for Nt driver [%s]\n",
+				DEBUG(10,("_spoolss_addprinterdriver: init data not deleted for Nt driver [%s]\n", 
 						driver_name));
 			}
 		}
@@ -7923,7 +7791,7 @@
 		/*
 		 * 2k or Xp printer driver - always delete init data
 		*/
-		case 3:
+		case 3:	
 			if (!del_driver_init(driver_name))
 				DEBUG(6,("_spoolss_addprinterdriver: del_driver_init(%s) 2k/Xp failed!\n", driver_name));
 			break;
@@ -7933,7 +7801,7 @@
 			break;
  	}
 
-
+	
 done:
 	free_a_printer_driver(driver, level);
 	return err;
@@ -7947,15 +7815,15 @@
 {
 	SPOOL_Q_ADDPRINTERDRIVER q_u_local;
 	SPOOL_R_ADDPRINTERDRIVER r_u_local;
-
-	/*
+	
+	/* 
 	 * we only support the semantics of AddPrinterDriver()
 	 * i.e. only copy files that are newer than existing ones
 	 */
-
+	
 	if ( q_u->copy_flags != APD_COPY_NEW_FILES )
 		return WERR_ACCESS_DENIED;
-
+	
 	ZERO_STRUCT(q_u_local);
 	ZERO_STRUCT(r_u_local);
 
@@ -7964,7 +7832,7 @@
 	copy_unistr2(&q_u_local.server_name, &q_u->server_name);
 	q_u_local.level = q_u->level;
 	memcpy( &q_u_local.info, &q_u->info, sizeof(SPOOL_PRINTER_DRIVER_INFO_LEVEL) );
-
+	
 	return _spoolss_addprinterdriver( p, &q_u_local, &r_u_local );
 }
 
@@ -7981,23 +7849,16 @@
 
 static WERROR getprinterdriverdir_level_1(UNISTR2 *name, UNISTR2 *uni_environment, RPC_BUFFER *buffer, uint32 offered, uint32 *needed)
 {
-	char *path = NULL;
-	char *long_archi = NULL;
-	char *servername = NULL;
-	char *pservername = NULL;
+	pstring path;
+	pstring long_archi;
+	fstring servername;
+	char *pservername; 
 	const char *short_archi;
 	DRIVER_DIRECTORY_1 *info=NULL;
 	WERROR result = WERR_OK;
-	TALLOC_CTX *ctx = talloc_tos();
 
-	servername = unistr2_to_ascii_talloc(ctx, name);
-	if (!servername) {
-		return WERR_NOMEM;
-	}
-	long_archi = unistr2_to_ascii_talloc(ctx, uni_environment);
-	if (!long_archi) {
-		return WERR_NOMEM;
-	}
+	unistr2_to_ascii(servername, name, sizeof(servername)-1);
+	unistr2_to_ascii(long_archi, uni_environment, sizeof(long_archi)-1);
 
 	/* check for beginning double '\'s and that the server
 	   long enough */
@@ -8005,8 +7866,8 @@
 	pservername = servername;
 	if ( *pservername == '\\' && strlen(servername)>2 ) {
 		pservername += 2;
-	}
-
+	} 
+	
 	if ( !is_myname_or_ipaddr( pservername ) )
 		return WERR_INVALID_PARAM;
 
@@ -8016,17 +7877,12 @@
 	if((info=SMB_MALLOC_P(DRIVER_DIRECTORY_1)) == NULL)
 		return WERR_NOMEM;
 
-	path = talloc_asprintf(ctx,
-			"\\\\%s\\print$\\%s", pservername, short_archi);
-	if (!path) {
-		result = WERR_NOMEM;
-		goto out;
-	}
+	slprintf(path, sizeof(path)-1, "\\\\%s\\print$\\%s", pservername, short_archi);
 
 	DEBUG(4,("printer driver directory: [%s]\n", path));
 
 	fill_driverdir_1(info, path);
-
+	
 	*needed += spoolss_size_driverdir_info_1(info);
 
 	if (*needed > offered) {
@@ -8043,7 +7899,7 @@
 
 out:
 	SAFE_FREE(info);
-
+	
 	return result;
 }
 
@@ -8079,7 +7935,7 @@
 		return WERR_UNKNOWN_LEVEL;
 	}
 }
-
+	
 /****************************************************************************
 ****************************************************************************/
 
@@ -8098,7 +7954,7 @@
 	uint32 *out_data_len 	 = &r_u->realdatasize;
 
 	NT_PRINTER_INFO_LEVEL *printer = NULL;
-
+	
 	uint32 		biggest_valuesize;
 	uint32 		biggest_datasize;
 	uint32 		data_len;
@@ -8109,7 +7965,7 @@
 	NT_PRINTER_DATA *p_data;
 	int		i, key_index, num_values;
 	int		name_length;
-
+	
 	*out_type = 0;
 
 	*out_max_data_len = 0;
@@ -8123,14 +7979,14 @@
 		return WERR_BADFID;
 	}
 
-	if (!get_printer_snum(p,handle, &snum, NULL))
+	if (!get_printer_snum(p,handle, &snum))
 		return WERR_BADFID;
-
+	
 	result = get_a_printer(Printer, &printer, 2, lp_const_servicename(snum));
 	if (!W_ERROR_IS_OK(result))
 		return result;
-
-	p_data = printer->info_2->data;
+		
+	p_data = printer->info_2->data;	
 	key_index = lookup_printerkey( p_data, SPOOL_PRINTERDATA_KEY );
 
 	result = WERR_OK;
@@ -8140,34 +7996,34 @@
 	 *
 	 * cf: MSDN EnumPrinterData remark section
 	 */
-
-	if ( !in_value_len && !in_data_len && (key_index != -1) )
+	 
+	if ( !in_value_len && !in_data_len && (key_index != -1) ) 
 	{
 		DEBUGADD(6,("Activating NT mega-hack to find sizes\n"));
 
 		biggest_valuesize = 0;
 		biggest_datasize  = 0;
-
+				
 		num_values = regval_ctr_numvals( p_data->keys[key_index].values );
-
+	
 		for ( i=0; i<num_values; i++ )
 		{
 			val = regval_ctr_specific_value( p_data->keys[key_index].values, i );
-
+			
 			name_length = strlen(val->valuename);
-			if ( strlen(val->valuename) > biggest_valuesize )
+			if ( strlen(val->valuename) > biggest_valuesize ) 
 				biggest_valuesize = name_length;
-
+				
 			if ( val->size > biggest_datasize )
 				biggest_datasize = val->size;
-
-			DEBUG(6,("current values: [%d], [%d]\n", biggest_valuesize,
+				
+			DEBUG(6,("current values: [%d], [%d]\n", biggest_valuesize, 
 				biggest_datasize));
 		}
 
-		/* the value is an UNICODE string but real_value_size is the length
+		/* the value is an UNICODE string but real_value_size is the length 
 		   in bytes including the trailing 0 */
-
+		   
 		*out_value_len = 2 * (1+biggest_valuesize);
 		*out_data_len  = biggest_datasize;
 
@@ -8175,23 +8031,23 @@
 
 		goto done;
 	}
-
+	
 	/*
 	 * the value len is wrong in NT sp3
 	 * that's the number of bytes not the number of unicode chars
 	 */
-
+	
 	if ( key_index != -1 )
 		val = regval_ctr_specific_value( p_data->keys[key_index].values, idx );
 
-	if ( !val )
+	if ( !val ) 
 	{
 
 		/* out_value should default to "" or else NT4 has
 		   problems unmarshalling the response */
 
 		*out_max_value_len=(in_value_len/sizeof(uint16));
-
+		
 		if (in_value_len) {
 			if((*out_value=(uint16 *)TALLOC_ZERO(p->mem_ctx, in_value_len*sizeof(uint8))) == NULL)
 			{
@@ -8205,12 +8061,12 @@
 		}
 
 		/* the data is counted in bytes */
-
+		
 		*out_max_data_len = in_data_len;
 		*out_data_len     = in_data_len;
-
+		
 		/* only allocate when given a non-zero data_len */
-
+		
 		if ( in_data_len && ((*data_out=(uint8 *)TALLOC_ZERO(p->mem_ctx, in_data_len*sizeof(uint8))) == NULL) )
 		{
 			result = WERR_NOMEM;
@@ -8219,7 +8075,7 @@
 
 		result = WERR_NO_MORE_ITEMS;
 	}
-	else
+	else 
 	{
 		/*
 		 * the value is:
@@ -8229,16 +8085,16 @@
 		 *
 		 * take a pause *before* coding not *during* coding
 		 */
-
+	
 		/* name */
 		*out_max_value_len=(in_value_len/sizeof(uint16));
 		if (in_value_len) {
-			if ( (*out_value = (uint16 *)TALLOC_ZERO(p->mem_ctx, in_value_len*sizeof(uint8))) == NULL )
+			if ( (*out_value = (uint16 *)TALLOC_ZERO(p->mem_ctx, in_value_len*sizeof(uint8))) == NULL ) 
 			{
 				result = WERR_NOMEM;
 				goto done;
 			}
-
+	
 			*out_value_len = (uint32)rpcstr_push((char *)*out_value, regval_name(val), (size_t)in_value_len, 0);
 		} else {
 			*out_value = NULL;
@@ -8246,13 +8102,13 @@
 		}
 
 		/* type */
-
+		
 		*out_type = regval_type( val );
 
 		/* data - counted in bytes */
 
 		*out_max_data_len = in_data_len;
-		if ( in_data_len && (*data_out = (uint8 *)TALLOC_ZERO(p->mem_ctx, in_data_len*sizeof(uint8))) == NULL)
+		if ( in_data_len && (*data_out = (uint8 *)TALLOC_ZERO(p->mem_ctx, in_data_len*sizeof(uint8))) == NULL) 
 		{
 			result = WERR_NOMEM;
 			goto done;
@@ -8284,7 +8140,7 @@
 	WERROR 			status = WERR_OK;
 	Printer_entry 		*Printer=find_printer_index_by_hnd(p, handle);
 	fstring			valuename;
-
+	
 	DEBUG(5,("spoolss_setprinterdata\n"));
 
 	if (!Printer) {
@@ -8297,18 +8153,18 @@
 		return WERR_INVALID_PARAM;
 	}
 
-	if (!get_printer_snum(p,handle, &snum, NULL))
+	if (!get_printer_snum(p,handle, &snum))
 		return WERR_BADFID;
 
-	/*
-	 * Access check : NT returns "access denied" if you make a
+	/* 
+	 * Access check : NT returns "access denied" if you make a 
 	 * SetPrinterData call without the necessary privildge.
 	 * we were originally returning OK if nothing changed
 	 * which made Win2k issue **a lot** of SetPrinterData
 	 * when connecting to a printer  --jerry
 	 */
 
-	if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER)
+	if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER) 
 	{
 		DEBUG(3, ("_spoolss_setprinterdata: change denied by handle access permissions\n"));
 		status = WERR_ACCESS_DENIED;
@@ -8319,23 +8175,23 @@
 	if (!W_ERROR_IS_OK(status))
 		return status;
 
-	unistr2_to_ascii(valuename, value, sizeof(valuename));
-
+	unistr2_to_ascii( valuename, value, sizeof(valuename)-1 );
+	
 	/*
 	 * When client side code sets a magic printer data key, detect it and save
 	 * the current printer data and the magic key's data (its the DEVMODE) for
 	 * future printer/driver initializations.
 	 */
-	if ( (type == REG_BINARY) && strequal( valuename, PHANTOM_DEVMODE_KEY))
+	if ( (type == REG_BINARY) && strequal( valuename, PHANTOM_DEVMODE_KEY)) 
 	{
 		/* Set devmode and printer initialization info */
 		status = save_driver_init( printer, 2, data, real_len );
-
+	
 		srv_spoolss_reset_printerdata( printer->info_2->drivername );
 	}
-	else
+	else 
 	{
-	status = set_printer_dataex( printer, SPOOL_PRINTERDATA_KEY, valuename,
+	status = set_printer_dataex( printer, SPOOL_PRINTERDATA_KEY, valuename, 
 					type, data, real_len );
 		if ( W_ERROR_IS_OK(status) )
 			status = mod_a_printer(printer, 2);
@@ -8355,7 +8211,7 @@
 	POLICY_HND 	*handle = &q_u->handle;
 	Printer_entry 	*Printer=find_printer_index_by_hnd(p, handle);
 	int 		snum;
-
+	
 	DEBUG(5,("_spoolss_resetprinter\n"));
 
 	/*
@@ -8363,17 +8219,17 @@
 	 * This call really doesn't mean anything to us because we only
 	 * support RAW printing.   --jerry
 	 */
-
+	 
 	if (!Printer) {
 		DEBUG(2,("_spoolss_resetprinter: Invalid handle (%s:%u:%u).\n", OUR_HANDLE(handle)));
 		return WERR_BADFID;
 	}
 
-	if (!get_printer_snum(p,handle, &snum, NULL))
+	if (!get_printer_snum(p,handle, &snum))
 		return WERR_BADFID;
 
 
-	/* blindly return success */
+	/* blindly return success */	
 	return WERR_OK;
 }
 
@@ -8390,17 +8246,16 @@
 	int 		snum=0;
 	WERROR 		status = WERR_OK;
 	Printer_entry 	*Printer=find_printer_index_by_hnd(p, handle);
-	char *valuename = NULL;
-	TALLOC_CTX *ctx = p->mem_ctx;
-
+	pstring		valuename;
+	
 	DEBUG(5,("spoolss_deleteprinterdata\n"));
-
+	
 	if (!Printer) {
 		DEBUG(2,("_spoolss_deleteprinterdata: Invalid handle (%s:%u:%u).\n", OUR_HANDLE(handle)));
 		return WERR_BADFID;
 	}
 
-	if (!get_printer_snum(p, handle, &snum, NULL))
+	if (!get_printer_snum(p, handle, &snum))
 		return WERR_BADFID;
 
 	if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER) {
@@ -8412,19 +8267,14 @@
 	if (!W_ERROR_IS_OK(status))
 		return status;
 
-	valuename = unistr2_to_ascii_talloc(ctx, value);
-	if (!valuename) {
-		free_a_printer(&printer, 2);
-		return WERR_NOMEM;
-	}
+	unistr2_to_ascii( valuename, value, sizeof(valuename)-1 );
 
 	status = delete_printer_dataex( printer, SPOOL_PRINTERDATA_KEY, valuename );
-
+	
 	if ( W_ERROR_IS_OK(status) )
 		mod_a_printer( printer, 2 );
 
 	free_a_printer(&printer, 2);
-	TALLOC_FREE(valuename);
 
 	return status;
 }
@@ -8451,15 +8301,15 @@
 		DEBUG(2,("_spoolss_addform: Invalid handle (%s:%u:%u).\n", OUR_HANDLE(handle)));
 		return WERR_BADFID;
 	}
-
-
+	
+	
 	/* forms can be added on printer of on the print server handle */
-
+	
 	if ( Printer->printer_type == SPLHND_PRINTER )
 	{
-		if (!get_printer_snum(p,handle, &snum, NULL))
+		if (!get_printer_snum(p,handle, &snum))
 	                return WERR_BADFID;
-
+	 
 		status = get_a_printer(Printer, &printer, 2, lp_const_servicename(snum));
         	if (!W_ERROR_IS_OK(status))
 			goto done;
@@ -8470,30 +8320,30 @@
 		status = WERR_ACCESS_DENIED;
 		goto done;
 	}
-
+	
 	/* can't add if builtin */
-
+	
 	if (get_a_builtin_ntform(&form->name,&tmpForm)) {
 		status = WERR_ALREADY_EXISTS;
 		goto done;
 	}
 
 	count = get_ntforms(&list);
-
+	
 	if(!add_a_form(&list, form, &count)) {
 		status =  WERR_NOMEM;
 		goto done;
 	}
-
+	
 	write_ntforms(&list, count);
-
+	
 	/*
 	 * ChangeID must always be set if this is a printer
 	 */
-
+	 
 	if ( Printer->printer_type == SPLHND_PRINTER )
 		status = mod_a_printer(printer, 2);
-
+	
 done:
 	if ( printer )
 		free_a_printer(&printer, 2);
@@ -8525,12 +8375,12 @@
 	}
 
 	/* forms can be deleted on printer of on the print server handle */
-
+	
 	if ( Printer->printer_type == SPLHND_PRINTER )
 	{
-		if (!get_printer_snum(p,handle, &snum, NULL))
+		if (!get_printer_snum(p,handle, &snum))
 	                return WERR_BADFID;
-
+	 
 		status = get_a_printer(Printer, &printer, 2, lp_const_servicename(snum));
         	if (!W_ERROR_IS_OK(status))
 			goto done;
@@ -8543,24 +8393,24 @@
 	}
 
 	/* can't delete if builtin */
-
+	
 	if (get_a_builtin_ntform(form_name,&tmpForm)) {
 		status = WERR_INVALID_PARAM;
 		goto done;
 	}
 
 	count = get_ntforms(&list);
-
+	
 	if ( !delete_a_form(&list, form_name, &count, &status ))
 		goto done;
 
 	/*
 	 * ChangeID must always be set if this is a printer
 	 */
-
+	 
 	if ( Printer->printer_type == SPLHND_PRINTER )
 		status = mod_a_printer(printer, 2);
-
+	
 done:
 	if ( printer )
 		free_a_printer(&printer, 2);
@@ -8593,12 +8443,12 @@
 	}
 
 	/* forms can be modified on printer of on the print server handle */
-
+	
 	if ( Printer->printer_type == SPLHND_PRINTER )
 	{
-		if (!get_printer_snum(p,handle, &snum, NULL))
+		if (!get_printer_snum(p,handle, &snum))
 	                return WERR_BADFID;
-
+	 
 		status = get_a_printer(Printer, &printer, 2, lp_const_servicename(snum));
         	if (!W_ERROR_IS_OK(status))
 			goto done;
@@ -8623,11 +8473,11 @@
 	/*
 	 * ChangeID must always be set if this is a printer
 	 */
-
+	 
 	if ( Printer->printer_type == SPLHND_PRINTER )
 		status = mod_a_printer(printer, 2);
-
-
+	
+	
 done:
 	if ( printer )
 		free_a_printer(&printer, 2);
@@ -8644,12 +8494,12 @@
 {
 	PRINTPROCESSOR_1 *info_1=NULL;
 	WERROR result = WERR_OK;
-
+	
 	if((info_1 = SMB_MALLOC_P(PRINTPROCESSOR_1)) == NULL)
 		return WERR_NOMEM;
 
 	(*returned) = 0x1;
-
+	
 	init_unistr(&info_1->name, "winprint");
 
 	*needed += spoolss_size_printprocessor_info_1(info_1);
@@ -8703,10 +8553,10 @@
 	 * Just reply with "winprint", to keep NT happy
 	 * and I can use my nice printer checker.
 	 */
-
+	
 	*returned=0;
 	*needed=0;
-
+	
 	switch (level) {
 	case 1:
 		return enumprintprocessors_level_1(buffer, offered, needed, returned);
@@ -8723,12 +8573,12 @@
 {
 	PRINTPROCDATATYPE_1 *info_1=NULL;
 	WERROR result = WERR_OK;
-
+	
 	if((info_1 = SMB_MALLOC_P(PRINTPROCDATATYPE_1)) == NULL)
 		return WERR_NOMEM;
 
 	(*returned) = 0x1;
-
+	
 	init_unistr(&info_1->name, "RAW");
 
 	*needed += spoolss_size_printprocdatatype_info_1(info_1);
@@ -8775,10 +8625,10 @@
 	buffer = r_u->buffer;
 
  	DEBUG(5,("_spoolss_enumprintprocdatatypes\n"));
-
+	
 	*returned=0;
 	*needed=0;
-
+	
 	switch (level) {
 	case 1:
 		return enumprintprocdatatypes_level_1(buffer, offered, needed, returned);
@@ -8796,19 +8646,19 @@
 	PRINTMONITOR_1 *info_1;
 	WERROR result = WERR_OK;
 	int i;
-
+	
 	if((info_1 = SMB_MALLOC_ARRAY(PRINTMONITOR_1, 2)) == NULL)
 		return WERR_NOMEM;
 
 	*returned = 2;
-
-	init_unistr(&(info_1[0].name), SPL_LOCAL_PORT );
+	
+	init_unistr(&(info_1[0].name), SPL_LOCAL_PORT ); 
 	init_unistr(&(info_1[1].name), SPL_TCPIP_PORT );
 
 	for ( i=0; i<*returned; i++ ) {
 		*needed += spoolss_size_printmonitor_info_1(&info_1[i]);
 	}
-
+	
 	if (*needed > offered) {
 		result = WERR_INSUFFICIENT_BUFFER;
 		goto out;
@@ -8841,16 +8691,16 @@
 	PRINTMONITOR_2 *info_2;
 	WERROR result = WERR_OK;
 	int i;
-
+	
 	if((info_2 = SMB_MALLOC_ARRAY(PRINTMONITOR_2, 2)) == NULL)
 		return WERR_NOMEM;
 
 	*returned = 2;
-
+	
 	init_unistr( &(info_2[0].name), SPL_LOCAL_PORT );
 	init_unistr( &(info_2[0].environment), "Windows NT X86" );
 	init_unistr( &(info_2[0].dll_name), "localmon.dll" );
-
+	
 	init_unistr( &(info_2[1].name), SPL_TCPIP_PORT );
 	init_unistr( &(info_2[1].environment), "Windows NT X86" );
 	init_unistr( &(info_2[1].dll_name), "tcpmon.dll" );
@@ -8858,7 +8708,7 @@
 	for ( i=0; i<*returned; i++ ) {
 		*needed += spoolss_size_printmonitor_info_2(&info_2[i]);
 	}
-
+	
 	if (*needed > offered) {
 		result = WERR_INSUFFICIENT_BUFFER;
 		goto out;
@@ -8878,7 +8728,7 @@
 
 	if ( !W_ERROR_IS_OK(result) )
 		*returned = 0;
-
+	
 	return result;
 }
 
@@ -8910,10 +8760,10 @@
 	 * Just reply with "Local Port", to keep NT happy
 	 * and I can use my nice printer checker.
 	 */
-
+	
 	*returned=0;
 	*needed=0;
-
+	
 	switch (level) {
 	case 1:
 		return enumprintmonitors_level_1(buffer, offered, needed, returned);
@@ -8929,11 +8779,11 @@
 
 static WERROR getjob_level_1(print_queue_struct **queue, int count, int snum,
                              NT_PRINTER_INFO_LEVEL *ntprinter,
-                             uint32 jobid, RPC_BUFFER *buffer, uint32 offered,
+                             uint32 jobid, RPC_BUFFER *buffer, uint32 offered, 
 			     uint32 *needed)
 {
 	int i=0;
-	bool found=False;
+	BOOL found=False;
 	JOB_INFO_1 *info_1=NULL;
 	WERROR result = WERR_OK;
 
@@ -8942,20 +8792,20 @@
 	if (info_1 == NULL) {
 		return WERR_NOMEM;
 	}
-
-	for (i=0; i<count && found==False; i++) {
+		
+	for (i=0; i<count && found==False; i++) { 
 		if ((*queue)[i].job==(int)jobid)
 			found=True;
 	}
-
+	
 	if (found==False) {
 		SAFE_FREE(info_1);
 		/* NT treats not found as bad param... yet another bad choice */
 		return WERR_INVALID_PARAM;
 	}
-
+	
 	fill_job_info_1( info_1, &((*queue)[i-1]), i, snum, ntprinter );
-
+	
 	*needed += spoolss_size_job_info_1(info_1);
 
 	if (*needed > offered) {
@@ -8979,13 +8829,13 @@
 /****************************************************************************
 ****************************************************************************/
 
-static WERROR getjob_level_2(print_queue_struct **queue, int count, int snum,
+static WERROR getjob_level_2(print_queue_struct **queue, int count, int snum, 
                              NT_PRINTER_INFO_LEVEL *ntprinter,
-                             uint32 jobid, RPC_BUFFER *buffer, uint32 offered,
+                             uint32 jobid, RPC_BUFFER *buffer, uint32 offered, 
 			     uint32 *needed)
 {
 	int 		i = 0;
-	bool 		found = False;
+	BOOL 		found = False;
 	JOB_INFO_2 	*info_2;
 	WERROR 		result;
 	DEVICEMODE 	*devmode = NULL;
@@ -8996,25 +8846,25 @@
 
 	ZERO_STRUCTP(info_2);
 
-	for ( i=0; i<count && found==False; i++ )
+	for ( i=0; i<count && found==False; i++ ) 
 	{
 		if ((*queue)[i].job == (int)jobid)
 			found = True;
 	}
-
+	
 	if ( !found ) {
 		/* NT treats not found as bad param... yet another bad
 		   choice */
 		result = WERR_INVALID_PARAM;
 		goto done;
 	}
-
-	/*
-	 * if the print job does not have a DEVMODE associated with it,
+	
+	/* 
+	 * if the print job does not have a DEVMODE associated with it, 
 	 * just use the one for the printer. A NULL devicemode is not
 	 *  a failure condition
 	 */
-
+	 
 	if ( !(nt_devmode=print_job_devmode( lp_const_servicename(snum), jobid )) )
 		devmode = construct_dev_mode(lp_const_servicename(snum));
 	else {
@@ -9023,9 +8873,9 @@
 			convert_nt_devicemode( devmode, nt_devmode );
 		}
 	}
-
+	
 	fill_job_info_2(info_2, &((*queue)[i-1]), i, snum, ntprinter, devmode);
-
+	
 	*needed += spoolss_size_job_info_2(info_2);
 
 	if (*needed > offered) {
@@ -9041,7 +8891,7 @@
 	smb_io_job_info_2("", buffer, info_2, 0);
 
 	result = WERR_OK;
-
+	
  done:
 	/* Cleanup allocated memory */
 
@@ -9079,44 +8929,44 @@
 	buffer = r_u->buffer;
 
 	DEBUG(5,("spoolss_getjob\n"));
-
+	
 	*needed = 0;
-
-	if (!get_printer_snum(p, handle, &snum, NULL))
+	
+	if (!get_printer_snum(p, handle, &snum))
 		return WERR_BADFID;
-
+	
 	wstatus = get_a_printer(NULL, &ntprinter, 2, lp_servicename(snum));
 	if ( !W_ERROR_IS_OK(wstatus) )
 		return wstatus;
-
+		
 	count = print_queue_status(snum, &queue, &prt_status);
-
+	
 	DEBUGADD(4,("count:[%d], prt_status:[%d], [%s]\n",
 	             count, prt_status.status, prt_status.message));
-
+		
 	switch ( level ) {
 	case 1:
-			wstatus = getjob_level_1(&queue, count, snum, ntprinter, jobid,
+			wstatus = getjob_level_1(&queue, count, snum, ntprinter, jobid, 
 				buffer, offered, needed);
 			break;
 	case 2:
-			wstatus = getjob_level_2(&queue, count, snum, ntprinter, jobid,
+			wstatus = getjob_level_2(&queue, count, snum, ntprinter, jobid, 
 				buffer, offered, needed);
 			break;
 	default:
 			wstatus = WERR_UNKNOWN_LEVEL;
 			break;
 	}
-
+	
 	SAFE_FREE(queue);
 	free_a_printer( &ntprinter, 2 );
-
+	
 	return wstatus;
 }
 
 /********************************************************************
  spoolss_getprinterdataex
-
+ 
  From MSDN documentation of GetPrinterDataEx: pass request
  to GetPrinterData if key is "PrinterDriverData".
  ********************************************************************/
@@ -9130,23 +8980,23 @@
 	uint8 		**data = &r_u->data;
 	uint32 		*needed = &r_u->needed;
 	fstring 	keyname, valuename;
-
+	
 	Printer_entry 	*Printer = find_printer_index_by_hnd(p, handle);
-
+	
 	NT_PRINTER_INFO_LEVEL 	*printer = NULL;
 	int 			snum = 0;
 	WERROR 			status = WERR_OK;
 
 	DEBUG(4,("_spoolss_getprinterdataex\n"));
 
-        unistr2_to_ascii(keyname, &q_u->keyname, sizeof(keyname));
-        unistr2_to_ascii(valuename, &q_u->valuename, sizeof(valuename));
-
-	DEBUG(10, ("_spoolss_getprinterdataex: key => [%s], value => [%s]\n",
+        unistr2_to_ascii(keyname, &q_u->keyname, sizeof(keyname) - 1);
+        unistr2_to_ascii(valuename, &q_u->valuename, sizeof(valuename) - 1);
+	
+	DEBUG(10, ("_spoolss_getprinterdataex: key => [%s], value => [%s]\n", 
 		keyname, valuename));
 
 	/* in case of problem, return some default values */
-
+	
 	*needed   = 0;
 	*type     = 0;
 	*out_size = in_size;
@@ -9164,8 +9014,8 @@
 		status = WERR_INVALID_PARAM;
 		goto done;
 	}
-
-	if ( !get_printer_snum(p,handle, &snum, NULL) )
+	
+	if ( !get_printer_snum(p,handle, &snum) )
 		return WERR_BADFID;
 
 	status = get_a_printer(Printer, &printer, 2, lp_servicename(snum));
@@ -9177,29 +9027,29 @@
 		status = WERR_INVALID_PARAM;
 		goto done;
 	}
-
+	
 	if ( lookup_printerkey( printer->info_2->data, keyname ) == -1 ) {
 		DEBUG(4,("_spoolss_getprinterdataex: Invalid keyname [%s]\n", keyname ));
 		free_a_printer( &printer, 2 );
 		status = WERR_BADFILE;
 		goto done;
 	}
-
+	
 	/* When given a new keyname, we should just create it */
 
 	status = get_printer_dataex( p->mem_ctx, printer, keyname, valuename, type, data, needed, in_size );
-
+	
 	if (*needed > *out_size)
 		status = WERR_MORE_DATA;
 
 done:
-	if ( !W_ERROR_IS_OK(status) )
+	if ( !W_ERROR_IS_OK(status) ) 
 	{
 		DEBUG(5, ("error: allocating %d\n", *out_size));
-
+		
 		/* reply this param doesn't exist */
-
-		if ( *out_size )
+		
+		if ( *out_size ) 
 		{
 			if( (*data=(uint8 *)TALLOC_ZERO(p->mem_ctx, *out_size*sizeof(uint8))) == NULL ) {
 				status = WERR_NOMEM;
@@ -9209,10 +9059,10 @@
 			*data = NULL;
 		}
 	}
-
+	
 	if ( printer )
 	free_a_printer( &printer, 2 );
-
+	
 	return status;
 }
 
@@ -9222,7 +9072,7 @@
 
 WERROR _spoolss_setprinterdataex(pipes_struct *p, SPOOL_Q_SETPRINTERDATAEX *q_u, SPOOL_R_SETPRINTERDATAEX *r_u)
 {
-	POLICY_HND 		*handle = &q_u->handle;
+	POLICY_HND 		*handle = &q_u->handle; 
 	uint32 			type = q_u->type;
 	uint8 			*data = q_u->data;
 	uint32 			real_len = q_u->real_len;
@@ -9234,7 +9084,7 @@
 	fstring			valuename;
 	fstring			keyname;
 	char			*oid_string;
-
+	
 	DEBUG(4,("_spoolss_setprinterdataex\n"));
 
         /* From MSDN documentation of SetPrinterDataEx: pass request to
@@ -9250,18 +9100,18 @@
 		return WERR_INVALID_PARAM;
 	}
 
-	if ( !get_printer_snum(p,handle, &snum, NULL) )
+	if ( !get_printer_snum(p,handle, &snum) )
 		return WERR_BADFID;
 
-	/*
-	 * Access check : NT returns "access denied" if you make a
+	/* 
+	 * Access check : NT returns "access denied" if you make a 
 	 * SetPrinterData call without the necessary privildge.
 	 * we were originally returning OK if nothing changed
 	 * which made Win2k issue **a lot** of SetPrinterData
 	 * when connecting to a printer  --jerry
 	 */
 
-	if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER)
+	if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER) 
 	{
 		DEBUG(3, ("_spoolss_setprinterdataex: change denied by handle access permissions\n"));
 		return WERR_ACCESS_DENIED;
@@ -9271,11 +9121,11 @@
 	if (!W_ERROR_IS_OK(status))
 		return status;
 
-        unistr2_to_ascii( valuename, &q_u->value, sizeof(valuename));
-        unistr2_to_ascii( keyname, &q_u->key, sizeof(keyname));
-
+        unistr2_to_ascii( valuename, &q_u->value, sizeof(valuename) - 1);
+        unistr2_to_ascii( keyname, &q_u->key, sizeof(keyname) - 1);
+	
 	/* check for OID in valuename */
-
+	
 	if ( (oid_string = strchr( valuename, ',' )) != NULL )
 	{
 		*oid_string = '\0';
@@ -9283,31 +9133,30 @@
 	}
 
 	/* save the registry data */
-
-	status = set_printer_dataex( printer, keyname, valuename, type, data, real_len );
-
+	
+	status = set_printer_dataex( printer, keyname, valuename, type, data, real_len ); 
+	
 	if ( W_ERROR_IS_OK(status) )
 	{
 		/* save the OID if one was specified */
 		if ( oid_string ) {
 			fstrcat( keyname, "\\" );
 			fstrcat( keyname, SPOOL_OID_KEY );
-
-			/*
-			 * I'm not checking the status here on purpose.  Don't know
-			 * if this is right, but I'm returning the status from the
-			 * previous set_printer_dataex() call.  I have no idea if
+		
+			/* 
+			 * I'm not checking the status here on purpose.  Don't know 
+			 * if this is right, but I'm returning the status from the 
+			 * previous set_printer_dataex() call.  I have no idea if 
 			 * this is right.    --jerry
 			 */
-
-			set_printer_dataex( printer, keyname, valuename,
-			                    REG_SZ, (uint8 *)oid_string,
-					    strlen(oid_string)+1 );
+		 
+			set_printer_dataex( printer, keyname, valuename, 
+			                    REG_SZ, (void*)oid_string, strlen(oid_string)+1 );		
 		}
-
+	
 		status = mod_a_printer(printer, 2);
 	}
-
+		
 	free_a_printer(&printer, 2);
 
 	return status;
@@ -9328,18 +9177,16 @@
 	int 		snum=0;
 	WERROR 		status = WERR_OK;
 	Printer_entry 	*Printer=find_printer_index_by_hnd(p, handle);
-	char *valuename = NULL;
-	char *keyname = NULL;
-	TALLOC_CTX *ctx = p->mem_ctx;
-
+	pstring		valuename, keyname;
+	
 	DEBUG(5,("spoolss_deleteprinterdataex\n"));
-
+	
 	if (!Printer) {
 		DEBUG(2,("_spoolss_deleteprinterdata: Invalid handle (%s:%u:%u).\n", OUR_HANDLE(handle)));
 		return WERR_BADFID;
 	}
 
-	if (!get_printer_snum(p, handle, &snum, NULL))
+	if (!get_printer_snum(p, handle, &snum))
 		return WERR_BADFID;
 
 	if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER) {
@@ -9347,21 +9194,18 @@
 		return WERR_ACCESS_DENIED;
 	}
 
-	valuename = unistr2_to_ascii_talloc(ctx, value);
-	keyname = unistr2_to_ascii_talloc(ctx, key);
-	if (!valuename || !keyname) {
-		return WERR_NOMEM;
-	}
-
 	status = get_a_printer(Printer, &printer, 2, lp_const_servicename(snum));
 	if (!W_ERROR_IS_OK(status))
 		return status;
 
+	unistr2_to_ascii( valuename, value, sizeof(valuename)-1 );
+	unistr2_to_ascii( keyname, key, sizeof(keyname)-1 );
+
 	status = delete_printer_dataex( printer, keyname, valuename );
 
 	if ( W_ERROR_IS_OK(status) )
 		mod_a_printer( printer, 2 );
-
+		
 	free_a_printer(&printer, 2);
 
 	return status;
@@ -9385,8 +9229,8 @@
 	NT_PRINTER_INFO_LEVEL 	*printer = NULL;
 	int 		snum = 0;
 	WERROR		status = WERR_BADFILE;
-
-
+	
+	
 	DEBUG(4,("_spoolss_enumprinterkey\n"));
 
 	if (!Printer) {
@@ -9394,16 +9238,16 @@
 		return WERR_BADFID;
 	}
 
-	if ( !get_printer_snum(p,handle, &snum, NULL) )
+	if ( !get_printer_snum(p,handle, &snum) )
 		return WERR_BADFID;
 
 	status = get_a_printer(Printer, &printer, 2, lp_const_servicename(snum));
 	if (!W_ERROR_IS_OK(status))
 		return status;
-
+		
 	/* get the list of subkey names */
-
-	unistr2_to_ascii(key, &q_u->key, sizeof(key));
+	
+	unistr2_to_ascii( key, &q_u->key, sizeof(key)-1 );
 	data = printer->info_2->data;
 
 	num_keys = get_printer_subkeys( data, key, &keynames );
@@ -9426,16 +9270,16 @@
 		status = WERR_NOMEM;
 		goto done;
 	}
-
+			
 	status = WERR_OK;
 
-	if ( q_u->size < r_u->needed )
+	if ( q_u->size < r_u->needed ) 
 		status = WERR_MORE_DATA;
 
 done:
 	free_a_printer( &printer, 2 );
 	SAFE_FREE( keynames );
-
+	
         return status;
 }
 
@@ -9451,20 +9295,20 @@
 	NT_PRINTER_INFO_LEVEL 	*printer = NULL;
 	int 			snum=0;
 	WERROR			status;
-
+	
 	DEBUG(5,("spoolss_deleteprinterkey\n"));
-
+	
 	if (!Printer) {
 		DEBUG(2,("_spoolss_deleteprinterkey: Invalid handle (%s:%u:%u).\n", OUR_HANDLE(handle)));
 		return WERR_BADFID;
 	}
 
 	/* if keyname == NULL, return error */
-
+	
 	if ( !q_u->keyname.buffer )
 		return WERR_INVALID_PARAM;
-
-	if (!get_printer_snum(p, handle, &snum, NULL))
+		
+	if (!get_printer_snum(p, handle, &snum))
 		return WERR_BADFID;
 
 	if (Printer->access_granted != PRINTER_ACCESS_ADMINISTER) {
@@ -9475,18 +9319,18 @@
 	status = get_a_printer(Printer, &printer, 2, lp_const_servicename(snum));
 	if (!W_ERROR_IS_OK(status))
 		return status;
-
+	
 	/* delete the key and all subneys */
+	
+        unistr2_to_ascii(key, &q_u->keyname, sizeof(key) - 1);
+ 
+	status = delete_all_printer_data( printer->info_2, key );	
 
-        unistr2_to_ascii(key, &q_u->keyname, sizeof(key));
-
-	status = delete_all_printer_data( printer->info_2, key );
-
 	if ( W_ERROR_IS_OK(status) )
 		status = mod_a_printer(printer, 2);
-
+	
 	free_a_printer( &printer, 2 );
-
+	
 	return status;
 }
 
@@ -9497,9 +9341,9 @@
 
 WERROR _spoolss_enumprinterdataex(pipes_struct *p, SPOOL_Q_ENUMPRINTERDATAEX *q_u, SPOOL_R_ENUMPRINTERDATAEX *r_u)
 {
-	POLICY_HND	*handle = &q_u->handle;
+	POLICY_HND	*handle = &q_u->handle; 
 	uint32 		in_size = q_u->size;
-	uint32 		num_entries,
+	uint32 		num_entries, 
 			needed;
 	NT_PRINTER_INFO_LEVEL 	*printer = NULL;
 	PRINTER_ENUM_VALUES	*enum_values = NULL;
@@ -9513,8 +9357,8 @@
 	REGISTRY_VALUE	*val;
 	char		*value_name;
 	uint32		data_len;
+	
 
-
 	DEBUG(4,("_spoolss_enumprinterdataex\n"));
 
 	if (!Printer) {
@@ -9522,46 +9366,46 @@
 		return WERR_BADFID;
 	}
 
-	/*
-	 * first check for a keyname of NULL or "".  Win2k seems to send
+	/* 
+	 * first check for a keyname of NULL or "".  Win2k seems to send 
 	 * this a lot and we should send back WERR_INVALID_PARAM
 	 * no need to spend time looking up the printer in this case.
 	 * --jerry
 	 */
-
-	unistr2_to_ascii(key, &q_u->key, sizeof(key));
+	 
+	unistr2_to_ascii(key, &q_u->key, sizeof(key) - 1);
 	if ( !strlen(key) ) {
 		result = WERR_INVALID_PARAM;
 		goto done;
 	}
 
 	/* get the printer off of disk */
-
-	if (!get_printer_snum(p,handle, &snum, NULL))
+	
+	if (!get_printer_snum(p,handle, &snum))
 		return WERR_BADFID;
-
+	
 	ZERO_STRUCT(printer);
 	result = get_a_printer(Printer, &printer, 2, lp_const_servicename(snum));
 	if (!W_ERROR_IS_OK(result))
 		return result;
-
+	
 	/* now look for a match on the key name */
-
+	
 	p_data = printer->info_2->data;
-
-	unistr2_to_ascii(key, &q_u->key, sizeof(key));
+	
+	unistr2_to_ascii(key, &q_u->key, sizeof(key) - 1);
 	if ( (key_index = lookup_printerkey( p_data, key)) == -1  )
 	{
 		DEBUG(10,("_spoolss_enumprinterdataex: Unknown keyname [%s]\n", key));
 		result = WERR_INVALID_PARAM;
 		goto done;
 	}
-
+	
 	result = WERR_OK;
 	needed = 0;
-
+	
 	/* allocate the memory for the array of pointers -- if necessary */
-
+	
 	num_entries = regval_ctr_numvals( p_data->keys[key_index].values );
 	if ( num_entries )
 	{
@@ -9575,31 +9419,31 @@
 
 		memset( enum_values, 0x0, num_entries*sizeof(PRINTER_ENUM_VALUES) );
 	}
-
-	/*
-	 * loop through all params and build the array to pass
-	 * back to the  client
+		
+	/* 
+	 * loop through all params and build the array to pass 
+	 * back to the  client 
 	 */
-
+	 
 	for ( i=0; i<num_entries; i++ )
 	{
 		/* lookup the registry value */
-
+		
 		val = regval_ctr_specific_value( p_data->keys[key_index].values, i );
 		DEBUG(10,("retrieved value number [%d] [%s]\n", i, regval_name(val) ));
 
 		/* copy the data */
-
+		
 		value_name = regval_name( val );
 		init_unistr( &enum_values[i].valuename, value_name );
 		enum_values[i].value_len = (strlen(value_name)+1) * 2;
 		enum_values[i].type      = regval_type( val );
-
+		
 		data_len = regval_size( val );
 		if ( data_len ) {
-			if ( !(enum_values[i].data = (uint8 *)TALLOC_MEMDUP(p->mem_ctx, regval_data_p(val), data_len)) )
+			if ( !(enum_values[i].data = TALLOC_MEMDUP(p->mem_ctx, regval_data_p(val), data_len)) ) 
 			{
-				DEBUG(0,("TALLOC_MEMDUP failed to allocate memory [data_len=%d] for data!\n",
+				DEBUG(0,("TALLOC_MEMDUP failed to allocate memory [data_len=%d] for data!\n", 
 					data_len ));
 				result = WERR_NOMEM;
 				goto done;
@@ -9608,12 +9452,12 @@
 		enum_values[i].data_len = data_len;
 
 		/* keep track of the size of the array in bytes */
-
+		
 		needed += spoolss_size_printer_enum_values(&enum_values[i]);
 	}
-
+	
 	/* housekeeping information in the reply */
-
+	
 	/* Fix from Martin Zielinski <mz at seh.de> - ensure
 	 * the hand marshalled container size is a multiple
 	 * of 4 bytes for RPC alignment.
@@ -9630,7 +9474,7 @@
 		result = WERR_MORE_DATA;
 		goto done;
 	}
-
+		
 	/* copy data into the reply */
 
 	/* mz: Vista x64 returns 0x6f7 (The stub received bad data), if the
@@ -9642,8 +9486,10 @@
 
 	r_u->ctr.size_of_array 	= r_u->returned;
 	r_u->ctr.values 	= enum_values;
-
-done:
+	
+	
+		
+done:	
 	if ( printer )
 	free_a_printer(&printer, 2);
 
@@ -9653,26 +9499,23 @@
 /****************************************************************************
 ****************************************************************************/
 
-static void fill_printprocessordirectory_1(PRINTPROCESSOR_DIRECTORY_1 *info, const char *name)
+static void fill_printprocessordirectory_1(PRINTPROCESSOR_DIRECTORY_1 *info, char *name)
 {
 	init_unistr(&info->name, name);
 }
 
-static WERROR getprintprocessordirectory_level_1(UNISTR2 *name,
-						 UNISTR2 *environment,
-						 RPC_BUFFER *buffer,
-						 uint32 offered,
+static WERROR getprintprocessordirectory_level_1(UNISTR2 *name, 
+						 UNISTR2 *environment, 
+						 RPC_BUFFER *buffer, 
+						 uint32 offered, 
 						 uint32 *needed)
 {
-	char *long_archi = NULL;
+	pstring path;
+	pstring long_archi;
 	PRINTPROCESSOR_DIRECTORY_1 *info=NULL;
 	WERROR result = WERR_OK;
-	TALLOC_CTX *ctx = talloc_tos();
 
-	long_archi = unistr2_to_ascii_talloc(ctx, environment);
-	if (!long_archi) {
-		return WERR_NOMEM;
-	}
+	unistr2_to_ascii(long_archi, environment, sizeof(long_archi)-1);
 
 	if (!get_short_archi(long_archi))
 		return WERR_INVALID_ENVIRONMENT;
@@ -9680,8 +9523,10 @@
 	if((info=SMB_MALLOC_P(PRINTPROCESSOR_DIRECTORY_1)) == NULL)
 		return WERR_NOMEM;
 
-	fill_printprocessordirectory_1(info, "C:\\WINNT\\System32\\spool\\PRTPROCS\\W32X86");
+	pstrcpy(path, "C:\\WINNT\\System32\\spool\\PRTPROCS\\W32X86");
 
+	fill_printprocessordirectory_1(info, path);
+	
 	*needed += spoolss_size_printprocessordirectory_info_1(info);
 
 	if (*needed > offered) {
@@ -9698,7 +9543,7 @@
 
 out:
 	SAFE_FREE(info);
-
+	
 	return result;
 }
 
@@ -9720,7 +9565,7 @@
 	buffer = r_u->buffer;
 
  	DEBUG(5,("_spoolss_getprintprocessordirectory\n"));
-
+	
 	*needed=0;
 
 	switch(level) {
@@ -9739,21 +9584,21 @@
  Streams the monitor UI DLL name in UNICODE
 *******************************************************************/
 
-static WERROR xcvtcp_monitorui( NT_USER_TOKEN *token, RPC_BUFFER *in,
+static WERROR xcvtcp_monitorui( NT_USER_TOKEN *token, RPC_BUFFER *in, 
                                 RPC_BUFFER *out, uint32 *needed )
 {
 	const char *dllname = "tcpmonui.dll";
-
+	
 	*needed = (strlen(dllname)+1) * 2;
-
+	
 	if ( rpcbuf_get_size(out) < *needed ) {
-		return WERR_INSUFFICIENT_BUFFER;
+		return WERR_INSUFFICIENT_BUFFER;		
 	}
-
+	
 	if ( !make_monitorui_buf( out, dllname ) ) {
 		return WERR_NOMEM;
 	}
-
+	
 	return WERR_OK;
 }
 
@@ -9761,12 +9606,11 @@
  Create a new TCP/IP port
 *******************************************************************/
 
-static WERROR xcvtcp_addport( NT_USER_TOKEN *token, RPC_BUFFER *in,
+static WERROR xcvtcp_addport( NT_USER_TOKEN *token, RPC_BUFFER *in, 
                               RPC_BUFFER *out, uint32 *needed )
 {
 	NT_PORT_DATA_1 port1;
-	TALLOC_CTX *ctx = talloc_tos();
-	char *device_uri = NULL;
+	pstring device_uri;
 
 	ZERO_STRUCT( port1 );
 
@@ -9780,24 +9624,18 @@
 
 	switch ( port1.protocol ) {
 	case PORT_PROTOCOL_DIRECT:
-		device_uri = talloc_asprintf(ctx,
-				"socket://%s:%d/", port1.hostaddr, port1.port );
+		pstr_sprintf( device_uri, "socket://%s:%d/", port1.hostaddr, port1.port );
 		break;
 
 	case PORT_PROTOCOL_LPR:
-		device_uri = talloc_asprintf(ctx,
-			"lpr://%s/%s", port1.hostaddr, port1.queue );
+		pstr_sprintf( device_uri, "lpr://%s/%s", port1.hostaddr, port1.queue );
 		break;
-
+	
 	default:
 		return WERR_UNKNOWN_PORT;
 	}
 
-	if (!device_uri) {
-		return WERR_NOMEM;
-	}
-
-	return add_port_hook(ctx, token, port1.name, device_uri );
+	return add_port_hook( token, port1.name, device_uri );
 }
 
 /*******************************************************************
@@ -9809,19 +9647,19 @@
 	{ NULL,		NULL }
 };
 
-static WERROR process_xcvtcp_command( NT_USER_TOKEN *token, const char *command,
-                                      RPC_BUFFER *inbuf, RPC_BUFFER *outbuf,
+static WERROR process_xcvtcp_command( NT_USER_TOKEN *token, const char *command, 
+                                      RPC_BUFFER *inbuf, RPC_BUFFER *outbuf, 
                                       uint32 *needed )
 {
 	int i;
-
+	
 	DEBUG(10,("process_xcvtcp_command: Received command \"%s\"\n", command));
-
+	
 	for ( i=0; xcvtcp_cmds[i].name; i++ ) {
 		if ( strcmp( command, xcvtcp_cmds[i].name ) == 0 )
 			return xcvtcp_cmds[i].fn( token, inbuf, outbuf, needed );
 	}
-
+	
 	return WERR_BADFUNC;
 }
 
@@ -9829,21 +9667,21 @@
 *******************************************************************/
 #if 0 	/* don't support management using the "Local Port" monitor */
 
-static WERROR xcvlocal_monitorui( NT_USER_TOKEN *token, RPC_BUFFER *in,
+static WERROR xcvlocal_monitorui( NT_USER_TOKEN *token, RPC_BUFFER *in, 
                                   RPC_BUFFER *out, uint32 *needed )
 {
 	const char *dllname = "localui.dll";
-
+	
 	*needed = (strlen(dllname)+1) * 2;
-
+	
 	if ( rpcbuf_get_size(out) < *needed ) {
-		return WERR_INSUFFICIENT_BUFFER;
+		return WERR_INSUFFICIENT_BUFFER;		
 	}
-
+	
 	if ( !make_monitorui_buf( out, dllname )) {
 		return WERR_NOMEM;
 	}
-
+	
 	return WERR_OK;
 }
 
@@ -9865,12 +9703,12 @@
 /*******************************************************************
 *******************************************************************/
 
-static WERROR process_xcvlocal_command( NT_USER_TOKEN *token, const char *command,
-                                        RPC_BUFFER *inbuf, RPC_BUFFER *outbuf,
+static WERROR process_xcvlocal_command( NT_USER_TOKEN *token, const char *command, 
+                                        RPC_BUFFER *inbuf, RPC_BUFFER *outbuf, 
 					uint32 *needed )
 {
 	int i;
-
+	
 	DEBUG(10,("process_xcvlocal_command: Received command \"%s\"\n", command));
 
 	for ( i=0; xcvlocal_cmds[i].name; i++ ) {
@@ -9884,7 +9722,7 @@
 *******************************************************************/
 
 WERROR _spoolss_xcvdataport(pipes_struct *p, SPOOL_Q_XCVDATAPORT *q_u, SPOOL_R_XCVDATAPORT *r_u)
-{
+{	
 	Printer_entry *Printer = find_printer_index_by_hnd(p, &q_u->handle);
 	fstring command;
 
@@ -9894,37 +9732,39 @@
 	}
 
 	/* Has to be a handle to the TCP/IP port monitor */
-
+	
 	if ( !(Printer->printer_type & (SPLHND_PORTMON_LOCAL|SPLHND_PORTMON_TCP)) ) {
 		DEBUG(2,("_spoolss_xcvdataport: Call only valid for Port Monitors\n"));
 		return WERR_BADFID;
 	}
-
+	
 	/* requires administrative access to the server */
-
+	
 	if ( !(Printer->access_granted & SERVER_ACCESS_ADMINISTER) ) {
 		DEBUG(2,("_spoolss_xcvdataport: denied by handle permissions.\n"));
 		return WERR_ACCESS_DENIED;
 	}
 
-	/* Get the command name.  There's numerous commands supported by the
+	/* Get the command name.  There's numerous commands supported by the 
 	   TCPMON interface. */
-
-	rpcstr_pull(command, q_u->dataname.buffer, sizeof(command),
+	
+	rpcstr_pull(command, q_u->dataname.buffer, sizeof(command), 
 		q_u->dataname.uni_str_len*2, 0);
-
+		
 	/* Allocate the outgoing buffer */
-
+	
 	rpcbuf_init( &r_u->outdata, q_u->offered, p->mem_ctx );
-
+	
 	switch ( Printer->printer_type ) {
 	case SPLHND_PORTMON_TCP:
-		return process_xcvtcp_command( p->pipe_user.nt_user_token, command,
+		return process_xcvtcp_command( p->pipe_user.nt_user_token, command, 
 			&q_u->indata, &r_u->outdata, &r_u->needed );
 	case SPLHND_PORTMON_LOCAL:
-		return process_xcvlocal_command( p->pipe_user.nt_user_token, command,
+		return process_xcvlocal_command( p->pipe_user.nt_user_token, command, 
 			&q_u->indata, &r_u->outdata, &r_u->needed );
 	}
 
 	return WERR_INVALID_PRINT_MONITOR;
 }
+
+

Copied: branches/samba/upstream/source/rpc_server/srv_srvsvc.c (from rev 1928, branches/samba/upstream/source/rpc_server/srv_srvsvc.c)
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_srvsvc.c	                        (rev 0)
+++ branches/samba/upstream/source/rpc_server/srv_srvsvc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,621 @@
+/* 
+ *  Unix SMB/CIFS implementation.
+ *  RPC Pipe client / server routines
+ *  Copyright (C) Andrew Tridgell              1992-1997,
+ *  Copyright (C) Luke Kenneth Casson Leighton 1996-1997,
+ *  Copyright (C) Paul Ashton                       1997,
+ *  Copyright (C) Jeremy Allison                    2001,
+ *  Copyright (C) Jim McDonough <jmcd at us.ibm.com>   2003.
+ *  Copyright (C) Gera;d (Jerry) Carter             2006.
+ *  
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/* This is the interface to the srvsvc pipe. */
+
+#include "includes.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_RPC_SRV
+
+/*******************************************************************
+ api_srv_net_srv_get_info
+********************************************************************/
+
+static BOOL api_srv_net_srv_get_info(pipes_struct *p)
+{
+	SRV_Q_NET_SRV_GET_INFO q_u;
+	SRV_R_NET_SRV_GET_INFO r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the net server get info */
+	if (!srv_io_q_net_srv_get_info("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _srv_net_srv_get_info(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if (!srv_io_r_net_srv_get_info("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ api_srv_net_srv_get_info
+********************************************************************/
+
+static BOOL api_srv_net_srv_set_info(pipes_struct *p)
+{
+	SRV_Q_NET_SRV_SET_INFO q_u;
+	SRV_R_NET_SRV_SET_INFO r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the net server set info */
+	if (!srv_io_q_net_srv_set_info("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _srv_net_srv_set_info(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if (!srv_io_r_net_srv_set_info("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ api_srv_net_file_enum
+********************************************************************/
+
+static BOOL api_srv_net_file_enum(pipes_struct *p)
+{
+	SRV_Q_NET_FILE_ENUM q_u;
+	SRV_R_NET_FILE_ENUM r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the net file enum */
+	if (!srv_io_q_net_file_enum("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _srv_net_file_enum(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!srv_io_r_net_file_enum("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ api_srv_net_conn_enum
+********************************************************************/
+
+static BOOL api_srv_net_conn_enum(pipes_struct *p)
+{
+	SRV_Q_NET_CONN_ENUM q_u;
+	SRV_R_NET_CONN_ENUM r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the net server get enum */
+	if (!srv_io_q_net_conn_enum("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _srv_net_conn_enum(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if (!srv_io_r_net_conn_enum("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Enumerate sessions.
+********************************************************************/
+
+static BOOL api_srv_net_sess_enum(pipes_struct *p)
+{
+	SRV_Q_NET_SESS_ENUM q_u;
+	SRV_R_NET_SESS_ENUM r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the net server get enum */
+	if (!srv_io_q_net_sess_enum("", &q_u, data, 0))
+		return False;
+
+	/* construct reply.  always indicate success */
+	r_u.status = _srv_net_sess_enum(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if (!srv_io_r_net_sess_enum("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ Delete session.
+********************************************************************/
+
+static BOOL api_srv_net_sess_del(pipes_struct *p)
+{
+	SRV_Q_NET_SESS_DEL q_u;
+	SRV_R_NET_SESS_DEL r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the net server get enum */
+	if (!srv_io_q_net_sess_del("", &q_u, data, 0))
+		return False;
+
+	/* construct reply.  always indicate success */
+	r_u.status = _srv_net_sess_del(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if (!srv_io_r_net_sess_del("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ RPC to enumerate shares.
+********************************************************************/
+
+static BOOL api_srv_net_share_enum_all(pipes_struct *p)
+{
+	SRV_Q_NET_SHARE_ENUM q_u;
+	SRV_R_NET_SHARE_ENUM r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* Unmarshall the net server get enum. */
+	if(!srv_io_q_net_share_enum("", &q_u, data, 0)) {
+		DEBUG(0,("api_srv_net_share_enum_all: Failed to unmarshall SRV_Q_NET_SHARE_ENUM.\n"));
+		return False;
+	}
+
+	r_u.status = _srv_net_share_enum_all(p, &q_u, &r_u);
+
+	if (!srv_io_r_net_share_enum("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_srv_net_share_enum_all: Failed to marshall SRV_R_NET_SHARE_ENUM.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ RPC to enumerate shares.
+********************************************************************/
+
+static BOOL api_srv_net_share_enum(pipes_struct *p)
+{
+	SRV_Q_NET_SHARE_ENUM q_u;
+	SRV_R_NET_SHARE_ENUM r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* Unmarshall the net server get enum. */
+	if(!srv_io_q_net_share_enum("", &q_u, data, 0)) {
+		DEBUG(0,("api_srv_net_share_enum: Failed to unmarshall SRV_Q_NET_SHARE_ENUM.\n"));
+		return False;
+	}
+
+	r_u.status = _srv_net_share_enum(p, &q_u, &r_u);
+
+	if (!srv_io_r_net_share_enum("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_srv_net_share_enum: Failed to marshall SRV_R_NET_SHARE_ENUM.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ RPC to return share information.
+********************************************************************/
+
+static BOOL api_srv_net_share_get_info(pipes_struct *p)
+{
+	SRV_Q_NET_SHARE_GET_INFO q_u;
+	SRV_R_NET_SHARE_GET_INFO r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* Unmarshall the net server get info. */
+	if(!srv_io_q_net_share_get_info("", &q_u, data, 0)) {
+		DEBUG(0,("api_srv_net_share_get_info: Failed to unmarshall SRV_Q_NET_SHARE_GET_INFO.\n"));
+		return False;
+	}
+
+	r_u.status = _srv_net_share_get_info(p, &q_u, &r_u);
+
+	if(!srv_io_r_net_share_get_info("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_srv_net_share_get_info: Failed to marshall SRV_R_NET_SHARE_GET_INFO.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ RPC to set share information.
+********************************************************************/
+
+static BOOL api_srv_net_share_set_info(pipes_struct *p)
+{
+	SRV_Q_NET_SHARE_SET_INFO q_u;
+	SRV_R_NET_SHARE_SET_INFO r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* Unmarshall the net server set info. */
+	if(!srv_io_q_net_share_set_info("", &q_u, data, 0)) {
+		DEBUG(0,("api_srv_net_share_set_info: Failed to unmarshall SRV_Q_NET_SHARE_SET_INFO.\n"));
+		return False;
+	}
+
+	r_u.status = _srv_net_share_set_info(p, &q_u, &r_u);
+
+	if(!srv_io_r_net_share_set_info("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_srv_net_share_set_info: Failed to marshall SRV_R_NET_SHARE_SET_INFO.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ RPC to add share information.
+********************************************************************/
+
+static BOOL api_srv_net_share_add(pipes_struct *p)
+{
+	SRV_Q_NET_SHARE_ADD q_u;
+	SRV_R_NET_SHARE_ADD r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* Unmarshall the net server add info. */
+	if(!srv_io_q_net_share_add("", &q_u, data, 0)) {
+		DEBUG(0,("api_srv_net_share_add: Failed to unmarshall SRV_Q_NET_SHARE_ADD.\n"));
+		return False;
+	}
+
+	r_u.status = _srv_net_share_add(p, &q_u, &r_u);
+
+	if(!srv_io_r_net_share_add("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_srv_net_share_add: Failed to marshall SRV_R_NET_SHARE_ADD.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ RPC to delete share information.
+********************************************************************/
+
+static BOOL api_srv_net_share_del(pipes_struct *p)
+{
+	SRV_Q_NET_SHARE_DEL q_u;
+	SRV_R_NET_SHARE_DEL r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* Unmarshall the net server del info. */
+	if(!srv_io_q_net_share_del("", &q_u, data, 0)) {
+		DEBUG(0,("api_srv_net_share_del: Failed to unmarshall SRV_Q_NET_SHARE_DEL.\n"));
+		return False;
+	}
+
+	r_u.status = _srv_net_share_del(p, &q_u, &r_u);
+
+	if(!srv_io_r_net_share_del("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_srv_net_share_del: Failed to marshall SRV_R_NET_SHARE_DEL.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ RPC to delete share information.
+********************************************************************/
+
+static BOOL api_srv_net_share_del_sticky(pipes_struct *p)
+{
+	SRV_Q_NET_SHARE_DEL q_u;
+	SRV_R_NET_SHARE_DEL r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* Unmarshall the net server del info. */
+	if(!srv_io_q_net_share_del("", &q_u, data, 0)) {
+		DEBUG(0,("api_srv_net_share_del_sticky: Failed to unmarshall SRV_Q_NET_SHARE_DEL.\n"));
+		return False;
+	}
+
+	r_u.status = _srv_net_share_del_sticky(p, &q_u, &r_u);
+
+	if(!srv_io_r_net_share_del("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_srv_net_share_del_sticky: Failed to marshall SRV_R_NET_SHARE_DEL.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ api_srv_net_remote_tod
+********************************************************************/
+
+static BOOL api_srv_net_remote_tod(pipes_struct *p)
+{
+	SRV_Q_NET_REMOTE_TOD q_u;
+	SRV_R_NET_REMOTE_TOD r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* grab the net server get enum */
+	if(!srv_io_q_net_remote_tod("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _srv_net_remote_tod(p, &q_u, &r_u);
+
+	/* store the response in the SMB stream */
+	if(!srv_io_r_net_remote_tod("", &r_u, rdata, 0))
+		return False;
+
+	return True;
+}
+
+/*******************************************************************
+ RPC to enumerate disks available on a server e.g. C:, D: ...
+*******************************************************************/
+
+static BOOL api_srv_net_disk_enum(pipes_struct *p) 
+{
+	SRV_Q_NET_DISK_ENUM q_u;
+	SRV_R_NET_DISK_ENUM r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* Unmarshall the net server disk enum. */
+	if(!srv_io_q_net_disk_enum("", &q_u, data, 0)) {
+		DEBUG(0,("api_srv_net_disk_enum: Failed to unmarshall SRV_Q_NET_DISK_ENUM.\n"));
+		return False;
+	}
+
+	r_u.status = _srv_net_disk_enum(p, &q_u, &r_u);
+
+	if(!srv_io_r_net_disk_enum("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_srv_net_disk_enum: Failed to marshall SRV_R_NET_DISK_ENUM.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ NetValidateName (opnum 0x21) 
+*******************************************************************/
+
+static BOOL api_srv_net_name_validate(pipes_struct *p) 
+{
+	SRV_Q_NET_NAME_VALIDATE q_u;
+	SRV_R_NET_NAME_VALIDATE r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+ 
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+  
+	/* Unmarshall the net server disk enum. */
+	if(!srv_io_q_net_name_validate("", &q_u, data, 0)) {
+		DEBUG(0,("api_srv_net_name_validate: Failed to unmarshall SRV_Q_NET_NAME_VALIDATE.\n"));
+		return False;
+	}
+
+	r_u.status = _srv_net_name_validate(p, &q_u, &r_u);
+
+	if(!srv_io_r_net_name_validate("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_srv_net_name_validate: Failed to marshall SRV_R_NET_NAME_VALIDATE.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ NetFileQuerySecdesc (opnum 0x27)
+*******************************************************************/
+
+static BOOL api_srv_net_file_query_secdesc(pipes_struct *p)
+{
+	SRV_Q_NET_FILE_QUERY_SECDESC q_u;
+	SRV_R_NET_FILE_QUERY_SECDESC r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* Unmarshall the net file get info from Win9x */
+	if(!srv_io_q_net_file_query_secdesc("", &q_u, data, 0)) {
+		DEBUG(0,("api_srv_net_file_query_secdesc: Failed to unmarshall SRV_Q_NET_FILE_QUERY_SECDESC.\n"));
+		return False;
+	}
+
+	r_u.status = _srv_net_file_query_secdesc(p, &q_u, &r_u);
+
+	if(!srv_io_r_net_file_query_secdesc("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_srv_net_file_query_secdesc: Failed to marshall SRV_R_NET_FILE_QUERY_SECDESC.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+ NetFileSetSecdesc (opnum 0x28)
+*******************************************************************/
+
+static BOOL api_srv_net_file_set_secdesc(pipes_struct *p)
+{
+	SRV_Q_NET_FILE_SET_SECDESC q_u;
+	SRV_R_NET_FILE_SET_SECDESC r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* Unmarshall the net file set info from Win9x */
+	if(!srv_io_q_net_file_set_secdesc("", &q_u, data, 0)) {
+		DEBUG(0,("api_srv_net_file_set_secdesc: Failed to unmarshall SRV_Q_NET_FILE_SET_SECDESC.\n"));
+		return False;
+	}
+
+	r_u.status = _srv_net_file_set_secdesc(p, &q_u, &r_u);
+
+	if(!srv_io_r_net_file_set_secdesc("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_srv_net_file_set_secdesc: Failed to marshall SRV_R_NET_FILE_SET_SECDESC.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+*******************************************************************/
+
+static BOOL api_srv_net_file_close(pipes_struct *p)
+{
+	SRV_Q_NET_FILE_CLOSE q_u;
+	SRV_R_NET_FILE_CLOSE r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	/* Unmarshall the net file set info from Win9x */
+	if(!srv_io_q_net_file_close("", &q_u, data, 0)) {
+		DEBUG(0,("api_srv_net_file_close: Failed to unmarshall SRV_Q_NET_FILE_SET_SECDESC.\n"));
+		return False;
+	}
+
+	r_u.status = _srv_net_file_close(p, &q_u, &r_u);
+
+	if(!srv_io_r_net_file_close("", &r_u, rdata, 0)) {
+		DEBUG(0,("api_srv_net_file_close: Failed to marshall SRV_R_NET_FILE_SET_SECDESC.\n"));
+		return False;
+	}
+
+	return True;
+}
+
+/*******************************************************************
+\PIPE\srvsvc commands
+********************************************************************/
+
+static struct api_struct api_srv_cmds[] =
+{
+      { "SRV_NET_CONN_ENUM"         , SRV_NET_CONN_ENUM         , api_srv_net_conn_enum          },
+      { "SRV_NET_SESS_ENUM"         , SRV_NET_SESS_ENUM         , api_srv_net_sess_enum          },
+      { "SRV_NET_SESS_DEL"          , SRV_NET_SESS_DEL          , api_srv_net_sess_del           },
+      { "SRV_NET_SHARE_ENUM_ALL"    , SRV_NET_SHARE_ENUM_ALL    , api_srv_net_share_enum_all     },
+      { "SRV_NET_SHARE_ENUM"        , SRV_NET_SHARE_ENUM        , api_srv_net_share_enum         },
+      { "SRV_NET_SHARE_ADD"         , SRV_NET_SHARE_ADD         , api_srv_net_share_add          },
+      { "SRV_NET_SHARE_DEL"         , SRV_NET_SHARE_DEL         , api_srv_net_share_del          },
+      { "SRV_NET_SHARE_DEL_STICKY"  , SRV_NET_SHARE_DEL_STICKY  , api_srv_net_share_del_sticky   },
+      { "SRV_NET_SHARE_GET_INFO"    , SRV_NET_SHARE_GET_INFO    , api_srv_net_share_get_info     },
+      { "SRV_NET_SHARE_SET_INFO"    , SRV_NET_SHARE_SET_INFO    , api_srv_net_share_set_info     },
+      { "SRV_NET_FILE_ENUM"         , SRV_NET_FILE_ENUM         , api_srv_net_file_enum          },
+      { "SRV_NET_SRV_GET_INFO"      , SRV_NET_SRV_GET_INFO      , api_srv_net_srv_get_info       },
+      { "SRV_NET_SRV_SET_INFO"      , SRV_NET_SRV_SET_INFO      , api_srv_net_srv_set_info       },
+      { "SRV_NET_REMOTE_TOD"        , SRV_NET_REMOTE_TOD        , api_srv_net_remote_tod         },
+      { "SRV_NET_DISK_ENUM"         , SRV_NET_DISK_ENUM         , api_srv_net_disk_enum          },
+      { "SRV_NET_NAME_VALIDATE"     , SRV_NET_NAME_VALIDATE     , api_srv_net_name_validate      },
+      { "SRV_NET_FILE_QUERY_SECDESC", SRV_NET_FILE_QUERY_SECDESC, api_srv_net_file_query_secdesc },
+      { "SRV_NET_FILE_SET_SECDESC"  , SRV_NET_FILE_SET_SECDESC  , api_srv_net_file_set_secdesc   },
+      { "SRV_NET_FILE_CLOSE"        , SRV_NET_FILE_CLOSE        , api_srv_net_file_close         }
+};
+
+void srvsvc_get_pipe_fns( struct api_struct **fns, int *n_fns )
+{
+	*fns = api_srv_cmds;
+	*n_fns = sizeof(api_srv_cmds) / sizeof(struct api_struct);
+}
+
+
+NTSTATUS rpc_srv_init(void)
+{
+  return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "srvsvc", "ntsvcs", api_srv_cmds,
+				    sizeof(api_srv_cmds) / sizeof(struct api_struct));
+}

Modified: branches/samba/upstream/source/rpc_server/srv_srvsvc_nt.c
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_srvsvc_nt.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_server/srv_srvsvc_nt.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,47 +1,45 @@
-/*
+/* 
  *  Unix SMB/CIFS implementation.
  *  RPC Pipe client / server routines
  *  Copyright (C) Andrew Tridgell              1992-1997,
  *  Copyright (C) Jeremy Allison               2001.
  *  Copyright (C) Nigel Williams               2001.
  *  Copyright (C) Gerald (Jerry) Carter        2006.
- *  Copyright (C) Guenther Deschner            2008.
- *
+ *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
- *
+ *  
  *  This program is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
- *
+ *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 /* This is the implementation of the srvsvc pipe. */
 
 #include "includes.h"
 
-extern const struct generic_mapping file_generic_mapping;
+extern struct generic_mapping file_generic_mapping;
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_SRV
 
-#define MAX_SERVER_DISK_ENTRIES 15
-
 /* Use for enumerating connections, pipes, & files */
 
 struct file_enum_count {
 	TALLOC_CTX *ctx;
-	const char *username;
-	struct srvsvc_NetFileCtr3 *ctr3;
+	int count;
+	FILE_INFO_3 *info;
 };
 
 struct sess_file_count {
-	struct server_id pid;
+	pid_t pid;
 	uid_t uid;
 	int count;
 };
@@ -50,180 +48,160 @@
  Count the entries belonging to a service in the connection db.
 ****************************************************************************/
 
-static int pipe_enum_fn( struct db_record *rec, void *p)
+static int pipe_enum_fn( TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *p)
 {
 	struct pipe_open_rec prec;
 	struct file_enum_count *fenum = (struct file_enum_count *)p;
-	struct srvsvc_NetFileInfo3 *f;
-	int i = fenum->ctr3->count;
-	char *fullpath = NULL;
-	const char *username;
-
-	if (rec->value.dsize != sizeof(struct pipe_open_rec))
+ 
+	if (dbuf.dsize != sizeof(struct pipe_open_rec))
 		return 0;
 
-	memcpy(&prec, rec->value.dptr, sizeof(struct pipe_open_rec));
-
-	if ( !process_exists(prec.pid) ) {
-		return 0;
+	memcpy(&prec, dbuf.dptr, sizeof(struct pipe_open_rec));
+ 
+	if ( process_exists(prec.pid) ) {
+		FILE_INFO_3 *f;
+		int i = fenum->count;
+		pstring fullpath;
+		
+		snprintf( fullpath, sizeof(fullpath), "\\PIPE\\%s", prec.name );
+		
+		f = TALLOC_REALLOC_ARRAY( fenum->ctx, fenum->info, FILE_INFO_3, i+1 );
+		if ( !f ) {
+			DEBUG(0,("conn_enum_fn: realloc failed for %d items\n", i+1));
+			return 1;
+		}
+		fenum->info = f;
+		
+		
+		init_srv_file_info3( &fenum->info[i], 
+			(uint32)((procid_to_pid(&prec.pid)<<16) & prec.pnum),
+			(FILE_READ_DATA|FILE_WRITE_DATA), 
+			0,
+			uidtoname( prec.uid ),
+			fullpath );
+			
+		fenum->count++;
 	}
 
-	username = uidtoname(prec.uid);
-
-	if ((fenum->username != NULL)
-	    && !strequal(username, fenum->username)) {
-		return 0;
-	}
-
-	fullpath = talloc_asprintf(fenum->ctx, "\\PIPE\\%s", prec.name );
-	if (!fullpath) {
-		return 1;
-	}
-
-	f = TALLOC_REALLOC_ARRAY(fenum->ctx, fenum->ctr3->array,
-				 struct srvsvc_NetFileInfo3, i+1);
-	if ( !f ) {
-		DEBUG(0,("conn_enum_fn: realloc failed for %d items\n", i+1));
-		return 1;
-	}
-	fenum->ctr3->array = f;
-
-	init_srvsvc_NetFileInfo3(&fenum->ctr3->array[i],
-				 (((uint32_t)(procid_to_pid(&prec.pid))<<16) | prec.pnum),
-				 (FILE_READ_DATA|FILE_WRITE_DATA),
-				 0,
-				 fullpath,
-				 username);
-
-	fenum->ctr3->count++;
-
 	return 0;
 }
 
 /*******************************************************************
 ********************************************************************/
 
-static WERROR net_enum_pipes(TALLOC_CTX *ctx,
-			     const char *username,
-			     struct srvsvc_NetFileCtr3 **ctr3,
-			     uint32_t resume )
+static WERROR net_enum_pipes( TALLOC_CTX *ctx, FILE_INFO_3 **info, 
+                              uint32 *count, uint32 resume )
 {
 	struct file_enum_count fenum;
+	TDB_CONTEXT *conn_tdb = conn_tdb_ctx();
 
+	if ( !conn_tdb ) {
+		DEBUG(0,("net_enum_pipes: Failed to retrieve the connections tdb handle!\n"));
+		return WERR_ACCESS_DENIED;
+	}
+	
 	fenum.ctx = ctx;
-	fenum.username = username;
-	fenum.ctr3 = *ctr3;
+	fenum.count = *count;
+	fenum.info = *info;
 
-	if (connections_traverse(pipe_enum_fn, &fenum) == -1) {
-		DEBUG(0,("net_enum_pipes: traverse of connections.tdb "
-			 "failed\n"));
+	if (tdb_traverse(conn_tdb, pipe_enum_fn, &fenum) == -1) {
+		DEBUG(0,("net_enum_pipes: traverse of connections.tdb failed with error %s.\n",
+			tdb_errorstr(conn_tdb) ));
 		return WERR_NOMEM;
 	}
+	
+	*info  = fenum.info;
+	*count = fenum.count;
+	
+	return WERR_OK;}
 
-	*ctr3 = fenum.ctr3;
-
-	return WERR_OK;
-}
-
 /*******************************************************************
 ********************************************************************/
 
-static void enum_file_fn( const struct share_mode_entry *e,
-                          const char *sharepath, const char *fname,
-			  void *private_data )
-{
- 	struct file_enum_count *fenum =
- 		(struct file_enum_count *)private_data;
+/* global needed to make use of the share_mode_forall() callback */
+static struct file_enum_count f_enum_cnt;
 
-	struct srvsvc_NetFileInfo3 *f;
-	int i = fenum->ctr3->count;
-	files_struct fsp;
-	struct byte_range_lock *brl;
-	int num_locks = 0;
-	char *fullpath = NULL;
-	uint32 permissions;
-	const char *username;
-
+static void enum_file_fn( const struct share_mode_entry *e, 
+                          const char *sharepath, const char *fname, void *state )
+{
+	struct file_enum_count *fenum = &f_enum_cnt;
+ 
 	/* If the pid was not found delete the entry from connections.tdb */
 
-	if ( !process_exists(e->pid) ) {
-		return;
-	}
+	if ( process_exists(e->pid) ) {
+		FILE_INFO_3 *f;
+		int i = fenum->count;
+		files_struct fsp;
+		struct byte_range_lock *brl;
+		int num_locks = 0;
+		pstring fullpath;
+		uint32 permissions;
+		
+		f = TALLOC_REALLOC_ARRAY( fenum->ctx, fenum->info, FILE_INFO_3, i+1 );			
+		if ( !f ) {
+			DEBUG(0,("conn_enum_fn: realloc failed for %d items\n", i+1));
+			return;
+		}
+		fenum->info = f;
 
-	username = uidtoname(e->uid);
+		/* need to count the number of locks on a file */
+		
+		ZERO_STRUCT( fsp );		
+		fsp.dev   = e->dev;
+		fsp.inode = e->inode;
+		
+		if ( (brl = brl_get_locks(NULL,&fsp)) != NULL ) {
+			num_locks = brl->num_locks;
+			TALLOC_FREE( brl );
+		}
+		
+		if ( strcmp( fname, "." ) == 0 ) {
+			pstr_sprintf( fullpath, "C:%s", sharepath );
+		} else {
+			pstr_sprintf( fullpath, "C:%s/%s", sharepath, fname );
+		}
+		string_replace( fullpath, '/', '\\' );
+		
+		/* mask out create (what ever that is) */
+		permissions = e->share_access & (FILE_READ_DATA|FILE_WRITE_DATA);
 
-	if ((fenum->username != NULL)
-	    && !strequal(username, fenum->username)) {
-		return;
+		/* now fill in the FILE_INFO_3 struct */
+		init_srv_file_info3( &fenum->info[i], 
+			e->share_file_id,
+			permissions,
+			num_locks,
+			uidtoname(e->uid),
+			fullpath );
+			
+		fenum->count++;
 	}
 
-	f = TALLOC_REALLOC_ARRAY(fenum->ctx, fenum->ctr3->array,
-				 struct srvsvc_NetFileInfo3, i+1);
-	if ( !f ) {
-		DEBUG(0,("conn_enum_fn: realloc failed for %d items\n", i+1));
-		return;
-	}
-	fenum->ctr3->array = f;
+	return;
 
-	/* need to count the number of locks on a file */
-
-	ZERO_STRUCT( fsp );
-	fsp.file_id = e->id;
-
-	if ( (brl = brl_get_locks(talloc_tos(), &fsp)) != NULL ) {
-		num_locks = brl->num_locks;
-		TALLOC_FREE(brl);
-	}
-
-	if ( strcmp( fname, "." ) == 0 ) {
-		fullpath = talloc_asprintf(fenum->ctx, "C:%s", sharepath );
-	} else {
-		fullpath = talloc_asprintf(fenum->ctx, "C:%s/%s",
-				sharepath, fname );
-	}
-	if (!fullpath) {
-		return;
-	}
-	string_replace( fullpath, '/', '\\' );
-
-	/* mask out create (what ever that is) */
-	permissions = e->access_mask & (FILE_READ_DATA|FILE_WRITE_DATA);
-
-	/* now fill in the srvsvc_NetFileInfo3 struct */
-	init_srvsvc_NetFileInfo3(&fenum->ctr3->array[i],
-				 (((uint32_t)(procid_to_pid(&e->pid))<<16) | e->share_file_id),
-				 permissions,
-				 num_locks,
-				 fullpath,
-				 username);
-	fenum->ctr3->count++;
 }
 
 /*******************************************************************
 ********************************************************************/
 
-static WERROR net_enum_files(TALLOC_CTX *ctx,
-			     const char *username,
-			     struct srvsvc_NetFileCtr3 **ctr3,
-			     uint32_t resume)
+static WERROR net_enum_files( TALLOC_CTX *ctx, FILE_INFO_3 **info, 
+                              uint32 *count, uint32 resume )
 {
-	struct file_enum_count f_enum_cnt;
-
 	f_enum_cnt.ctx = ctx;
-	f_enum_cnt.username = username;
-	f_enum_cnt.ctr3 = *ctr3;
-
-	share_mode_forall( enum_file_fn, (void *)&f_enum_cnt );
-
-	*ctr3 = f_enum_cnt.ctr3;
-
+	f_enum_cnt.count = *count;
+	f_enum_cnt.info = *info;
+	
+	share_mode_forall( enum_file_fn, NULL );
+	
+	*info  = f_enum_cnt.info;
+	*count = f_enum_cnt.count;
+	
 	return WERR_OK;
 }
 
 /*******************************************************************
  Utility function to get the 'type' of a share from an snum.
  ********************************************************************/
-static uint32 get_share_type(int snum)
+static uint32 get_share_type(int snum) 
 {
 	/* work out the share type */
 	uint32 type = STYPE_DISKTREE;
@@ -237,80 +215,70 @@
 
 	return type;
 }
-
+	
 /*******************************************************************
  Fill in a share info level 0 structure.
  ********************************************************************/
 
-static void init_srv_share_info_0(pipes_struct *p, struct srvsvc_NetShareInfo0 *r, int snum)
+static void init_srv_share_info_0(pipes_struct *p, SRV_SHARE_INFO_0 *sh0, int snum)
 {
-	const char *net_name = lp_servicename(snum);
+	pstring net_name;
 
-	init_srvsvc_NetShareInfo0(r, net_name);
+	pstrcpy(net_name, lp_servicename(snum));
+
+	init_srv_share_info0(&sh0->info_0, net_name);
+	init_srv_share_info0_str(&sh0->info_0_str, net_name);
 }
 
 /*******************************************************************
  Fill in a share info level 1 structure.
  ********************************************************************/
 
-static void init_srv_share_info_1(pipes_struct *p, struct srvsvc_NetShareInfo1 *r, int snum)
+static void init_srv_share_info_1(pipes_struct *p, SRV_SHARE_INFO_1 *sh1, int snum)
 {
+	pstring remark;
+
 	char *net_name = lp_servicename(snum);
-	char *remark = talloc_strdup(p->mem_ctx, lp_comment(snum));
+	pstrcpy(remark, lp_comment(snum));
+	standard_sub_conn(p->conn, remark,sizeof(remark));
 
-	if (remark) {
-		remark = standard_sub_conn(p->mem_ctx,
-				p->conn,
-				remark);
-	}
-
-	init_srvsvc_NetShareInfo1(r, net_name,
-				  get_share_type(snum),
-				  remark ? remark : "");
+	init_srv_share_info1(&sh1->info_1, net_name, get_share_type(snum), remark);
+	init_srv_share_info1_str(&sh1->info_1_str, net_name, remark);
 }
 
 /*******************************************************************
  Fill in a share info level 2 structure.
  ********************************************************************/
 
-static void init_srv_share_info_2(pipes_struct *p, struct srvsvc_NetShareInfo2 *r, int snum)
+static void init_srv_share_info_2(pipes_struct *p, SRV_SHARE_INFO_2 *sh2, int snum)
 {
-	char *remark = NULL;
-	char *path = NULL;
+	pstring remark;
+	pstring path;
+	pstring passwd;
 	int max_connections = lp_max_connections(snum);
-	uint32_t max_uses = max_connections!=0 ? max_connections : (uint32_t)-1;
+	uint32 max_uses = max_connections!=0 ? max_connections : 0xffffffff;
 	int count = 0;
 	char *net_name = lp_servicename(snum);
+	
+	pstrcpy(remark, lp_comment(snum));
+	standard_sub_conn(p->conn, remark,sizeof(remark));
+	pstrcpy(path, "C:");
+	pstrcat(path, lp_pathname(snum));
 
-	remark = talloc_strdup(p->mem_ctx, lp_comment(snum));
-	if (remark) {
-		remark = standard_sub_conn(p->mem_ctx,
-				p->conn,
-				remark);
-	}
-	path = talloc_asprintf(p->mem_ctx,
-			"C:%s", lp_pathname(snum));
+	/*
+	 * Change / to \\ so that win2k will see it as a valid path.  This was added to
+	 * enable use of browsing in win2k add share dialog.
+	 */ 
 
-	if (path) {
-		/*
-		 * Change / to \\ so that win2k will see it as a valid path.
-		 * This was added to enable use of browsing in win2k add
-		 * share dialog.
-		 */
+	string_replace(path, '/', '\\');
 
-		string_replace(path, '/', '\\');
-	}
+	pstrcpy(passwd, "");
 
-	count = count_current_connections(net_name, false);
+	count = count_current_connections( net_name, False  );
+	init_srv_share_info2(&sh2->info_2, net_name, get_share_type(snum), 
+		remark, 0, max_uses, count, path, passwd);
 
-	init_srvsvc_NetShareInfo2(r, net_name,
-				  get_share_type(snum),
-				  remark ? remark : "",
-				  0,
-				  max_uses,
-				  count,
-				  path ? path : "",
-				  "");
+	init_srv_share_info2_str(&sh2->info_2_str, net_name, remark, path, passwd);
 }
 
 /*******************************************************************
@@ -335,141 +303,140 @@
 
 		se_map_generic(&psa->access_mask, &file_generic_mapping);
 		psa->access_mask |= orig_mask;
-	}
+	}	
 }
 
 /*******************************************************************
  Fill in a share info level 501 structure.
 ********************************************************************/
 
-static void init_srv_share_info_501(pipes_struct *p, struct srvsvc_NetShareInfo501 *r, int snum)
+static void init_srv_share_info_501(pipes_struct *p, SRV_SHARE_INFO_501 *sh501, int snum)
 {
+	pstring remark;
+
 	const char *net_name = lp_servicename(snum);
-	char *remark = talloc_strdup(p->mem_ctx, lp_comment(snum));
+	pstrcpy(remark, lp_comment(snum));
+	standard_sub_conn(p->conn, remark, sizeof(remark));
 
-	if (remark) {
-		remark = standard_sub_conn(p->mem_ctx, p->conn, remark);
-	}
-
-	init_srvsvc_NetShareInfo501(r, net_name,
-				    get_share_type(snum),
-				    remark ? remark : "",
-				    (lp_csc_policy(snum) << 4));
+	init_srv_share_info501(&sh501->info_501, net_name, get_share_type(snum), remark, (lp_csc_policy(snum) << 4));
+	init_srv_share_info501_str(&sh501->info_501_str, net_name, remark);
 }
 
 /*******************************************************************
  Fill in a share info level 502 structure.
  ********************************************************************/
 
-static void init_srv_share_info_502(pipes_struct *p, struct srvsvc_NetShareInfo502 *r, int snum)
+static void init_srv_share_info_502(pipes_struct *p, SRV_SHARE_INFO_502 *sh502, int snum)
 {
-	const char *net_name = lp_servicename(snum);
-	char *path = NULL;
-	SEC_DESC *sd = NULL;
-	struct sec_desc_buf *sd_buf = NULL;
-	size_t sd_size = 0;
+	pstring net_name;
+	pstring remark;
+	pstring path;
+	pstring passwd;
+	SEC_DESC *sd;
+	size_t sd_size;
 	TALLOC_CTX *ctx = p->mem_ctx;
-	char *remark = talloc_strdup(ctx, lp_comment(snum));;
 
-	if (remark) {
-		remark = standard_sub_conn(ctx, p->conn, remark);
-	}
-	path = talloc_asprintf(ctx, "C:%s", lp_pathname(snum));
-	if (path) {
-		/*
-		 * Change / to \\ so that win2k will see it as a valid path.  This was added to
-		 * enable use of browsing in win2k add share dialog.
-		 */
-		string_replace(path, '/', '\\');
-	}
 
-	sd = get_share_security(ctx, lp_servicename(snum), &sd_size);
+	ZERO_STRUCTP(sh502);
 
-	sd_buf = make_sec_desc_buf(p->mem_ctx, sd_size, sd);
+	pstrcpy(net_name, lp_servicename(snum));
+	pstrcpy(remark, lp_comment(snum));
+	standard_sub_conn(p->conn, remark,sizeof(remark));
+	pstrcpy(path, "C:");
+	pstrcat(path, lp_pathname(snum));
 
-	init_srvsvc_NetShareInfo502(r, net_name,
-				    get_share_type(snum),
-				    remark ? remark : "",
-				    0,
-				    (uint32_t)-1,
-				    1,
-				    path ? path : "",
-				    "",
-				    sd_buf);
+	/*
+	 * Change / to \\ so that win2k will see it as a valid path.  This was added to
+	 * enable use of browsing in win2k add share dialog.
+	 */ 
+
+	string_replace(path, '/', '\\');
+
+	pstrcpy(passwd, "");
+
+	sd = get_share_security(ctx, lp_servicename(snum), &sd_size);
+
+	init_srv_share_info502(&sh502->info_502, net_name, get_share_type(snum), remark, 0, 0xffffffff, 1, path, passwd, sd, sd_size);
+	init_srv_share_info502_str(&sh502->info_502_str, net_name, remark, path, passwd, sd, sd_size);
 }
 
 /***************************************************************************
  Fill in a share info level 1004 structure.
  ***************************************************************************/
 
-static void init_srv_share_info_1004(pipes_struct *p, struct srvsvc_NetShareInfo1004 *r, int snum)
+static void init_srv_share_info_1004(pipes_struct *p, SRV_SHARE_INFO_1004* sh1004, int snum)
 {
-	char *remark = talloc_strdup(p->mem_ctx, lp_comment(snum));
+        pstring remark;
 
-	if (remark) {
-		remark = standard_sub_conn(p->mem_ctx, p->conn, remark);
-	}
+	pstrcpy(remark, lp_comment(snum));
+	standard_sub_conn(p->conn, remark, sizeof(remark));
 
-	init_srvsvc_NetShareInfo1004(r, remark ? remark : "");
+	ZERO_STRUCTP(sh1004);
+  
+	init_srv_share_info1004(&sh1004->info_1004, remark);
+	init_srv_share_info1004_str(&sh1004->info_1004_str, remark);
 }
 
 /***************************************************************************
  Fill in a share info level 1005 structure.
  ***************************************************************************/
 
-static void init_srv_share_info_1005(pipes_struct *p, struct srvsvc_NetShareInfo1005 *r, int snum)
+static void init_srv_share_info_1005(pipes_struct *p, SRV_SHARE_INFO_1005* sh1005, int snum)
 {
-	uint32_t dfs_flags = 0;
+	sh1005->share_info_flags = 0;
 
-	if (lp_host_msdfs() && lp_msdfs_root(snum)) {
-		dfs_flags |= SHARE_1005_IN_DFS | SHARE_1005_DFS_ROOT;
-	}
-
-	dfs_flags |= lp_csc_policy(snum) << SHARE_1005_CSC_POLICY_SHIFT;
-
-	init_srvsvc_NetShareInfo1005(r, dfs_flags);
+	if(lp_host_msdfs() && lp_msdfs_root(snum))
+		sh1005->share_info_flags |= 
+			SHARE_1005_IN_DFS | SHARE_1005_DFS_ROOT;
+	sh1005->share_info_flags |= 
+		lp_csc_policy(snum) << SHARE_1005_CSC_POLICY_SHIFT;
 }
-
 /***************************************************************************
  Fill in a share info level 1006 structure.
  ***************************************************************************/
 
-static void init_srv_share_info_1006(pipes_struct *p, struct srvsvc_NetShareInfo1006 *r, int snum)
+static void init_srv_share_info_1006(pipes_struct *p, SRV_SHARE_INFO_1006* sh1006, int snum)
 {
-	init_srvsvc_NetShareInfo1006(r, (uint32_t)-1);
+	sh1006->max_uses = -1;
 }
 
 /***************************************************************************
  Fill in a share info level 1007 structure.
  ***************************************************************************/
 
-static void init_srv_share_info_1007(pipes_struct *p, struct srvsvc_NetShareInfo1007 *r, int snum)
+static void init_srv_share_info_1007(pipes_struct *p, SRV_SHARE_INFO_1007* sh1007, int snum)
 {
+        pstring alternate_directory_name = "";
 	uint32 flags = 0;
 
-	init_srvsvc_NetShareInfo1007(r, flags, "");
+	ZERO_STRUCTP(sh1007);
+  
+	init_srv_share_info1007(&sh1007->info_1007, flags, alternate_directory_name);
+	init_srv_share_info1007_str(&sh1007->info_1007_str, alternate_directory_name);
 }
 
 /*******************************************************************
  Fill in a share info level 1501 structure.
  ********************************************************************/
 
-static void init_srv_share_info_1501(pipes_struct *p, struct sec_desc_buf *r, int snum)
+static void init_srv_share_info_1501(pipes_struct *p, SRV_SHARE_INFO_1501 *sh1501, int snum)
 {
 	SEC_DESC *sd;
 	size_t sd_size;
 	TALLOC_CTX *ctx = p->mem_ctx;
 
+	ZERO_STRUCTP(sh1501);
+
 	sd = get_share_security(ctx, lp_servicename(snum), &sd_size);
 
-	r = make_sec_desc_buf(p->mem_ctx, sd_size, sd);
+	sh1501->sdb = make_sec_desc_buf(p->mem_ctx, sd_size, sd);
 }
 
 /*******************************************************************
  True if it ends in '$'.
  ********************************************************************/
 
-static bool is_hidden_share(int snum)
+static BOOL is_hidden_share(int snum)
 {
 	const char *net_name = lp_servicename(snum);
 
@@ -480,316 +447,395 @@
  Fill in a share info structure.
  ********************************************************************/
 
-static WERROR init_srv_share_info_ctr(pipes_struct *p,
-				      struct srvsvc_NetShareInfoCtr *info_ctr,
-				      uint32_t *resume_handle_p,
-				      uint32_t *total_entries,
-				      bool all_shares)
+static BOOL init_srv_share_info_ctr(pipes_struct *p, SRV_SHARE_INFO_CTR *ctr,
+	       uint32 info_level, uint32 *resume_hnd, uint32 *total_entries, BOOL all_shares)
 {
 	int num_entries = 0;
-	int alloc_entries = 0;
 	int num_services = 0;
 	int snum;
 	TALLOC_CTX *ctx = p->mem_ctx;
-	int i = 0;
-	int valid_share_count = 0;
-	union srvsvc_NetShareCtr ctr;
-	uint32_t resume_handle = resume_handle_p ? *resume_handle_p : 0;
 
 	DEBUG(5,("init_srv_share_info_ctr\n"));
 
+	ZERO_STRUCTPN(ctr);
+
+	ctr->info_level = ctr->switch_value = info_level;
+	*resume_hnd = 0;
+
 	/* Ensure all the usershares are loaded. */
 	become_root();
-	load_usershare_shares();
-	load_registry_shares();
-	num_services = lp_numservices();
+	num_services = load_usershare_shares();
 	unbecome_root();
 
 	/* Count the number of entries. */
 	for (snum = 0; snum < num_services; snum++) {
-		if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) ) {
-			DEBUG(10, ("counting service %s\n", lp_servicename(snum)));
+		if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) )
 			num_entries++;
-		} else {
-			DEBUG(10, ("NOT counting service %s\n", lp_servicename(snum)));
-		}
 	}
 
-	if (!num_entries || (resume_handle >= num_entries)) {
-		return WERR_OK;
-	}
+	*total_entries = num_entries;
+	ctr->num_entries2 = ctr->num_entries = num_entries;
+	ctr->ptr_share_info = ctr->ptr_entries = 1;
 
-	/* Calculate alloc entries. */
-	alloc_entries = num_entries - resume_handle;
-	switch (info_ctr->level) {
+	if (!num_entries)
+		return True;
+
+	switch (info_level) {
 	case 0:
-		ctr.ctr0 = TALLOC_ZERO_P(ctx, struct srvsvc_NetShareCtr0);
-		W_ERROR_HAVE_NO_MEMORY(ctr.ctr0);
+	{
+		SRV_SHARE_INFO_0 *info0 = TALLOC_ARRAY(ctx, SRV_SHARE_INFO_0, num_entries);
+		int i = 0;
 
-		ctr.ctr0->count = alloc_entries;
-		ctr.ctr0->array = TALLOC_ZERO_ARRAY(ctx, struct srvsvc_NetShareInfo0, alloc_entries);
-		W_ERROR_HAVE_NO_MEMORY(ctr.ctr0->array);
+		if (!info0) {
+			return False;
+		}
 
-		for (snum = 0; snum < num_services; snum++) {
-			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) &&
-			    (resume_handle <= (i + valid_share_count++)) ) {
-				init_srv_share_info_0(p, &ctr.ctr0->array[i++], snum);
+		for (snum = *resume_hnd; snum < num_services; snum++) {
+			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) ) {
+				init_srv_share_info_0(p, &info0[i++], snum);
 			}
 		}
 
+		ctr->share.info0 = info0;
 		break;
 
+	}
+
 	case 1:
-		ctr.ctr1 = TALLOC_ZERO_P(ctx, struct srvsvc_NetShareCtr1);
-		W_ERROR_HAVE_NO_MEMORY(ctr.ctr1);
+	{
+		SRV_SHARE_INFO_1 *info1 = TALLOC_ARRAY(ctx, SRV_SHARE_INFO_1, num_entries);
+		int i = 0;
 
-		ctr.ctr1->count = alloc_entries;
-		ctr.ctr1->array = TALLOC_ZERO_ARRAY(ctx, struct srvsvc_NetShareInfo1, alloc_entries);
-		W_ERROR_HAVE_NO_MEMORY(ctr.ctr1->array);
+		if (!info1) {
+			return False;
+		}
 
-		for (snum = 0; snum < num_services; snum++) {
-			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) &&
-			    (resume_handle <= (i + valid_share_count++)) ) {
-				init_srv_share_info_1(p, &ctr.ctr1->array[i++], snum);
+		for (snum = *resume_hnd; snum < num_services; snum++) {
+			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) ) {
+				init_srv_share_info_1(p, &info1[i++], snum);
 			}
 		}
 
+		ctr->share.info1 = info1;
 		break;
+	}
 
 	case 2:
-		ctr.ctr2 = TALLOC_ZERO_P(ctx, struct srvsvc_NetShareCtr2);
-		W_ERROR_HAVE_NO_MEMORY(ctr.ctr2);
+	{
+		SRV_SHARE_INFO_2 *info2 = TALLOC_ARRAY(ctx, SRV_SHARE_INFO_2, num_entries);
+		int i = 0;
 
-		ctr.ctr2->count = alloc_entries;
-		ctr.ctr2->array = TALLOC_ZERO_ARRAY(ctx, struct srvsvc_NetShareInfo2, alloc_entries);
-		W_ERROR_HAVE_NO_MEMORY(ctr.ctr2->array);
+		if (!info2) {
+			return False;
+		}
 
-		for (snum = 0; snum < num_services; snum++) {
-			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) &&
-			    (resume_handle <= (i + valid_share_count++)) ) {
-				init_srv_share_info_2(p, &ctr.ctr2->array[i++], snum);
+		for (snum = *resume_hnd; snum < num_services; snum++) {
+			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) ) {
+				init_srv_share_info_2(p, &info2[i++], snum);
 			}
 		}
 
+		ctr->share.info2 = info2;
 		break;
+	}
 
 	case 501:
-		ctr.ctr501 = TALLOC_ZERO_P(ctx, struct srvsvc_NetShareCtr501);
-		W_ERROR_HAVE_NO_MEMORY(ctr.ctr501);
+	{
+		SRV_SHARE_INFO_501 *info501 = TALLOC_ARRAY(ctx, SRV_SHARE_INFO_501, num_entries);
+		int i = 0;
+	
+		if (!info501) {
+			return False;
+		}
 
-		ctr.ctr501->count = alloc_entries;
-		ctr.ctr501->array = TALLOC_ZERO_ARRAY(ctx, struct srvsvc_NetShareInfo501, alloc_entries);
-		W_ERROR_HAVE_NO_MEMORY(ctr.ctr501->array);
-
-		for (snum = 0; snum < num_services; snum++) {
-			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) &&
-			    (resume_handle <= (i + valid_share_count++)) ) {
-				init_srv_share_info_501(p, &ctr.ctr501->array[i++], snum);
+		for (snum = *resume_hnd; snum < num_services; snum++) {
+			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) ) {
+				init_srv_share_info_501(p, &info501[i++], snum);
 			}
 		}
-
+	
+		ctr->share.info501 = info501;
 		break;
+	}
 
 	case 502:
-		ctr.ctr502 = TALLOC_ZERO_P(ctx, struct srvsvc_NetShareCtr502);
-		W_ERROR_HAVE_NO_MEMORY(ctr.ctr502);
+	{
+		SRV_SHARE_INFO_502 *info502 = TALLOC_ARRAY(ctx, SRV_SHARE_INFO_502, num_entries);
+		int i = 0;
 
-		ctr.ctr502->count = alloc_entries;
-		ctr.ctr502->array = TALLOC_ZERO_ARRAY(ctx, struct srvsvc_NetShareInfo502, alloc_entries);
-		W_ERROR_HAVE_NO_MEMORY(ctr.ctr502->array);
+		if (!info502) {
+			return False;
+		}
 
-		for (snum = 0; snum < num_services; snum++) {
-			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) &&
-			    (resume_handle <= (i + valid_share_count++)) ) {
-				init_srv_share_info_502(p, &ctr.ctr502->array[i++], snum);
+		for (snum = *resume_hnd; snum < num_services; snum++) {
+			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) ) {
+				init_srv_share_info_502(p, &info502[i++], snum);
 			}
 		}
 
+		ctr->share.info502 = info502;
 		break;
+	}
 
+	/* here for completeness but not currently used with enum (1004 - 1501)*/
+	
 	case 1004:
-		ctr.ctr1004 = TALLOC_ZERO_P(ctx, struct srvsvc_NetShareCtr1004);
-		W_ERROR_HAVE_NO_MEMORY(ctr.ctr1004);
+	{
+		SRV_SHARE_INFO_1004 *info1004 = TALLOC_ARRAY(ctx, SRV_SHARE_INFO_1004, num_entries);
+		int i = 0;
 
-		ctr.ctr1004->count = alloc_entries;
-		ctr.ctr1004->array = TALLOC_ZERO_ARRAY(ctx, struct srvsvc_NetShareInfo1004, alloc_entries);
-		W_ERROR_HAVE_NO_MEMORY(ctr.ctr1004->array);
+		if (!info1004) {
+			return False;
+		}
 
-		for (snum = 0; snum < num_services; snum++) {
-			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) &&
-			    (resume_handle <= (i + valid_share_count++)) ) {
-				init_srv_share_info_1004(p, &ctr.ctr1004->array[i++], snum);
+		for (snum = *resume_hnd; snum < num_services; snum++) {
+			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) ) {
+				init_srv_share_info_1004(p, &info1004[i++], snum);
 			}
 		}
 
+		ctr->share.info1004 = info1004;
 		break;
+	}
 
 	case 1005:
-		ctr.ctr1005 = TALLOC_ZERO_P(ctx, struct srvsvc_NetShareCtr1005);
-		W_ERROR_HAVE_NO_MEMORY(ctr.ctr1005);
+	{
+		SRV_SHARE_INFO_1005 *info1005 = TALLOC_ARRAY(ctx, SRV_SHARE_INFO_1005, num_entries);
+		int i = 0;
 
-		ctr.ctr1005->count = alloc_entries;
-		ctr.ctr1005->array = TALLOC_ZERO_ARRAY(ctx, struct srvsvc_NetShareInfo1005, alloc_entries);
-		W_ERROR_HAVE_NO_MEMORY(ctr.ctr1005->array);
+		if (!info1005) {
+			return False;
+		}
 
-		for (snum = 0; snum < num_services; snum++) {
-			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) &&
-			    (resume_handle <= (i + valid_share_count++)) ) {
-				init_srv_share_info_1005(p, &ctr.ctr1005->array[i++], snum);
+		for (snum = *resume_hnd; snum < num_services; snum++) {
+			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) ) {
+				init_srv_share_info_1005(p, &info1005[i++], snum);
 			}
 		}
 
+		ctr->share.info1005 = info1005;
 		break;
+	}
 
 	case 1006:
-		ctr.ctr1006 = TALLOC_ZERO_P(ctx, struct srvsvc_NetShareCtr1006);
-		W_ERROR_HAVE_NO_MEMORY(ctr.ctr1006);
+	{
+		SRV_SHARE_INFO_1006 *info1006 = TALLOC_ARRAY(ctx, SRV_SHARE_INFO_1006, num_entries);
+		int i = 0;
 
-		ctr.ctr1006->count = alloc_entries;
-		ctr.ctr1006->array = TALLOC_ZERO_ARRAY(ctx, struct srvsvc_NetShareInfo1006, alloc_entries);
-		W_ERROR_HAVE_NO_MEMORY(ctr.ctr1006->array);
+		if (!info1006) {
+			return False;
+		}
 
-		for (snum = 0; snum < num_services; snum++) {
-			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) &&
-			    (resume_handle <= (i + valid_share_count++)) ) {
-				init_srv_share_info_1006(p, &ctr.ctr1006->array[i++], snum);
+		for (snum = *resume_hnd; snum < num_services; snum++) {
+			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) ) {
+				init_srv_share_info_1006(p, &info1006[i++], snum);
 			}
 		}
 
+		ctr->share.info1006 = info1006;
 		break;
+	}
 
 	case 1007:
-		ctr.ctr1007 = TALLOC_ZERO_P(ctx, struct srvsvc_NetShareCtr1007);
-		W_ERROR_HAVE_NO_MEMORY(ctr.ctr1007);
+	{
+		SRV_SHARE_INFO_1007 *info1007 = TALLOC_ARRAY(ctx, SRV_SHARE_INFO_1007, num_entries);
+		int i = 0;
 
-		ctr.ctr1007->count = alloc_entries;
-		ctr.ctr1007->array = TALLOC_ZERO_ARRAY(ctx, struct srvsvc_NetShareInfo1007, alloc_entries);
-		W_ERROR_HAVE_NO_MEMORY(ctr.ctr1007->array);
+		if (!info1007) {
+			return False;
+		}
 
-		for (snum = 0; snum < num_services; snum++) {
-			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) &&
-			    (resume_handle <= (i + valid_share_count++)) ) {
-				init_srv_share_info_1007(p, &ctr.ctr1007->array[i++], snum);
+		for (snum = *resume_hnd; snum < num_services; snum++) {
+			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) ) {
+				init_srv_share_info_1007(p, &info1007[i++], snum);
 			}
 		}
 
+		ctr->share.info1007 = info1007;
 		break;
+	}
 
 	case 1501:
-		ctr.ctr1501 = TALLOC_ZERO_P(ctx, struct srvsvc_NetShareCtr1501);
-		W_ERROR_HAVE_NO_MEMORY(ctr.ctr1501);
+	{
+		SRV_SHARE_INFO_1501 *info1501 = TALLOC_ARRAY(ctx, SRV_SHARE_INFO_1501, num_entries);
+		int i = 0;
 
-		ctr.ctr1501->count = alloc_entries;
-		ctr.ctr1501->array = TALLOC_ZERO_ARRAY(ctx, struct sec_desc_buf, alloc_entries);
-		W_ERROR_HAVE_NO_MEMORY(ctr.ctr1501->array);
+		if (!info1501) {
+			return False;
+		}
 
-		for (snum = 0; snum < num_services; snum++) {
-			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) &&
-			    (resume_handle <= (i + valid_share_count++)) ) {
-				init_srv_share_info_1501(p, &ctr.ctr1501->array[i++], snum);
+		for (snum = *resume_hnd; snum < num_services; snum++) {
+			if (lp_browseable(snum) && lp_snum_ok(snum) && (all_shares || !is_hidden_share(snum)) ) {
+				init_srv_share_info_1501(p, &info1501[i++], snum);
 			}
 		}
 
+		ctr->share.info1501 = info1501;
 		break;
-
+	}
 	default:
-		DEBUG(5,("init_srv_share_info_ctr: unsupported switch value %d\n",
-			info_ctr->level));
-		return WERR_UNKNOWN_LEVEL;
+		DEBUG(5,("init_srv_share_info_ctr: unsupported switch value %d\n", info_level));
+		return False;
 	}
 
-	*total_entries = alloc_entries;
-	if (resume_handle_p) {
-		if (all_shares) {
-			*resume_handle_p = (num_entries == 0) ? *resume_handle_p : 0;
-		} else {
-			*resume_handle_p = num_entries;
-		}
-	}
+	return True;
+}
 
-	info_ctr->ctr = ctr;
+/*******************************************************************
+ Inits a SRV_R_NET_SHARE_ENUM structure.
+********************************************************************/
 
-	return WERR_OK;
+static void init_srv_r_net_share_enum(pipes_struct *p, SRV_R_NET_SHARE_ENUM *r_n,
+				      uint32 info_level, uint32 resume_hnd, BOOL all)  
+{
+	DEBUG(5,("init_srv_r_net_share_enum: %d\n", __LINE__));
+
+	if (init_srv_share_info_ctr(p, &r_n->ctr, info_level,
+				    &resume_hnd, &r_n->total_entries, all)) {
+		r_n->status = WERR_OK;
+	} else {
+		r_n->status = WERR_UNKNOWN_LEVEL;
+	}
+
+	init_enum_hnd(&r_n->enum_hnd, resume_hnd);
 }
 
 /*******************************************************************
- fill in a sess info level 0 structure.
- ********************************************************************/
+ Inits a SRV_R_NET_SHARE_GET_INFO structure.
+********************************************************************/
 
-static WERROR init_srv_sess_info_0(pipes_struct *p,
-				   struct srvsvc_NetSessCtr0 *ctr0,
-				   uint32_t *resume_handle_p,
-				   uint32_t *total_entries)
+static void init_srv_r_net_share_get_info(pipes_struct *p, SRV_R_NET_SHARE_GET_INFO *r_n,
+				  char *share_name, uint32 info_level)
 {
-	struct sessionid *session_list;
-	uint32_t num_entries = 0;
-	uint32_t resume_handle = resume_handle_p ? *resume_handle_p : 0;
-	*total_entries = list_sessions(p->mem_ctx, &session_list);
+	WERROR status = WERR_OK;
+	int snum;
 
-	DEBUG(5,("init_srv_sess_info_0\n"));
+	DEBUG(5,("init_srv_r_net_share_get_info: %d\n", __LINE__));
 
-	if (ctr0 == NULL) {
-		if (resume_handle_p) {
-			*resume_handle_p = 0;
+	r_n->info.switch_value = info_level;
+
+	snum = find_service(share_name);
+
+	if (snum >= 0) {
+		switch (info_level) {
+		case 0:
+			init_srv_share_info_0(p, &r_n->info.share.info0, snum);
+			break;
+		case 1:
+			init_srv_share_info_1(p, &r_n->info.share.info1, snum);
+			break;
+		case 2:
+			init_srv_share_info_2(p, &r_n->info.share.info2, snum);
+			break;
+		case 501:
+			init_srv_share_info_501(p, &r_n->info.share.info501, snum);
+			break;
+		case 502:
+			init_srv_share_info_502(p, &r_n->info.share.info502, snum);
+			break;
+
+			/* here for completeness */
+		case 1004:
+			init_srv_share_info_1004(p, &r_n->info.share.info1004, snum);
+			break;
+		case 1005:
+			init_srv_share_info_1005(p, &r_n->info.share.info1005, snum);
+			break;
+
+			/* here for completeness 1006 - 1501 */
+		case 1006:
+			init_srv_share_info_1006(p, &r_n->info.share.info1006, snum);
+			break;
+		case 1007:
+			init_srv_share_info_1007(p, &r_n->info.share.info1007, snum);
+			break;
+		case 1501:
+			init_srv_share_info_1501(p, &r_n->info.share.info1501, snum);
+			break;
+		default:
+			DEBUG(5,("init_srv_net_share_get_info: unsupported switch value %d\n", info_level));
+			status = WERR_UNKNOWN_LEVEL;
+			break;
 		}
-		return WERR_OK;
+	} else {
+		status = WERR_INVALID_NAME;
 	}
 
-	for (; resume_handle < *total_entries; resume_handle++) {
+	r_n->info.ptr_share_ctr = W_ERROR_IS_OK(status) ? 1 : 0;
+	r_n->status = status;
+}
 
-		ctr0->array = TALLOC_REALLOC_ARRAY(p->mem_ctx,
-						   ctr0->array,
-						   struct srvsvc_NetSessInfo0,
-						   num_entries+1);
-		W_ERROR_HAVE_NO_MEMORY(ctr0->array);
+/*******************************************************************
+ fill in a sess info level 0 structure.
+ ********************************************************************/
 
-		init_srvsvc_NetSessInfo0(&ctr0->array[num_entries],
-					 session_list[resume_handle].remote_machine);
-		num_entries++;
+static void init_srv_sess_info_0(SRV_SESS_INFO_0 *ss0, uint32 *snum, uint32 *stot)
+{
+	struct sessionid *session_list;
+	uint32 num_entries = 0;
+	(*stot) = list_sessions(&session_list);
+
+	if (ss0 == NULL) {
+		if (snum) {
+			(*snum) = 0;
+		}
+		SAFE_FREE(session_list);
+		return;
 	}
 
-	ctr0->count = num_entries;
+	DEBUG(5,("init_srv_sess_0_ss0\n"));
 
-	if (resume_handle_p) {
-		if (*resume_handle_p >= *total_entries) {
-			*resume_handle_p = 0;
-		} else {
-			*resume_handle_p = resume_handle;
+	if (snum) {
+		for (; (*snum) < (*stot) && num_entries < MAX_SESS_ENTRIES; (*snum)++) {
+			init_srv_sess_info0( &ss0->info_0[num_entries], session_list[(*snum)].remote_machine);
+			num_entries++;
 		}
-	}
 
-	return WERR_OK;
+		ss0->num_entries_read  = num_entries;
+		ss0->ptr_sess_info     = num_entries > 0 ? 1 : 0;
+		ss0->num_entries_read2 = num_entries;
+		
+		if ((*snum) >= (*stot)) {
+			(*snum) = 0;
+		}
+
+	} else {
+		ss0->num_entries_read = 0;
+		ss0->ptr_sess_info = 0;
+		ss0->num_entries_read2 = 0;
+	}
+	SAFE_FREE(session_list);
 }
 
 /*******************************************************************
 ********************************************************************/
 
-static void sess_file_fn( const struct share_mode_entry *e,
-                          const char *sharepath, const char *fname,
-			  void *data )
-{
-	struct sess_file_count *sess = (struct sess_file_count *)data;
+/* global needed to make use of the share_mode_forall() callback */
+static struct sess_file_count s_file_cnt;
 
-	if ( procid_equal(&e->pid, &sess->pid) && (sess->uid == e->uid) ) {
+static void sess_file_fn( const struct share_mode_entry *e, 
+                          const char *sharepath, const char *fname, void *state )
+{
+	struct sess_file_count *sess = &s_file_cnt;
+ 
+	if ( (procid_to_pid(&e->pid) == sess->pid) && (sess->uid == e->uid) ) {
 		sess->count++;
 	}
-
+	
 	return;
 }
 
 /*******************************************************************
 ********************************************************************/
 
-static int net_count_files( uid_t uid, struct server_id pid )
+static int net_count_files( uid_t uid, pid_t pid )
 {
-	struct sess_file_count s_file_cnt;
-
 	s_file_cnt.count = 0;
 	s_file_cnt.uid = uid;
 	s_file_cnt.pid = pid;
-
-	share_mode_forall( sess_file_fn, &s_file_cnt );
-
+	
+	share_mode_forall( sess_file_fn, NULL );
+	
 	return s_file_cnt.count;
 }
 
@@ -797,444 +843,495 @@
  fill in a sess info level 1 structure.
  ********************************************************************/
 
-static WERROR init_srv_sess_info_1(pipes_struct *p,
-				   struct srvsvc_NetSessCtr1 *ctr1,
-				   uint32_t *resume_handle_p,
-				   uint32_t *total_entries)
+static void init_srv_sess_info_1(SRV_SESS_INFO_1 *ss1, uint32 *snum, uint32 *stot)
 {
 	struct sessionid *session_list;
-	uint32_t num_entries = 0;
+	uint32 num_entries = 0;
 	time_t now = time(NULL);
-	uint32_t resume_handle = resume_handle_p ? *resume_handle_p : 0;
 
-	ZERO_STRUCTP(ctr1);
+	if ( !snum ) {
+		ss1->num_entries_read = 0;
+		ss1->ptr_sess_info = 0;
+		ss1->num_entries_read2 = 0;
+		
+		(*stot) = 0;
 
-	if (ctr1 == NULL) {
-		if (resume_handle_p) {
-			*resume_handle_p = 0;
-		}
-		return WERR_OK;
+		return;
 	}
+	
+	if (ss1 == NULL) {
+		(*snum) = 0;
+		return;
+	}
 
-	*total_entries = list_sessions(p->mem_ctx, &session_list);
+	(*stot) = list_sessions(&session_list);
+	
 
-	for (; resume_handle < *total_entries; resume_handle++) {
+	for (; (*snum) < (*stot) && num_entries < MAX_SESS_ENTRIES; (*snum)++) {
 		uint32 num_files;
 		uint32 connect_time;
-		struct passwd *pw = sys_getpwnam(session_list[resume_handle].username);
-		bool guest;
-
+		struct passwd *pw = sys_getpwnam(session_list[*snum].username);
+		BOOL guest;
+			
 		if ( !pw ) {
 			DEBUG(10,("init_srv_sess_info_1: failed to find owner: %s\n",
-				session_list[resume_handle].username));
+				session_list[*snum].username));
 			continue;
 		}
+				
+		connect_time = (uint32)(now - session_list[*snum].connect_start);
+		num_files = net_count_files(pw->pw_uid, session_list[*snum].pid);
+		guest = strequal( session_list[*snum].username, lp_guestaccount() );
+					
+		init_srv_sess_info1( &ss1->info_1[num_entries], 
+		                     session_list[*snum].remote_machine,
+				     session_list[*snum].username, 
+				     num_files,
+				     connect_time,
+				     0, 
+				     guest);
+		num_entries++;
+	}
 
-		connect_time = (uint32_t)(now - session_list[resume_handle].connect_start);
-		num_files = net_count_files(pw->pw_uid, session_list[resume_handle].pid);
-		guest = strequal( session_list[resume_handle].username, lp_guestaccount() );
+	ss1->num_entries_read  = num_entries;
+	ss1->ptr_sess_info     = num_entries > 0 ? 1 : 0;
+	ss1->num_entries_read2 = num_entries;
+	
+	if ((*snum) >= (*stot)) {
+		(*snum) = 0;
+	}
 
-		ctr1->array = TALLOC_REALLOC_ARRAY(p->mem_ctx,
-						   ctr1->array,
-						   struct srvsvc_NetSessInfo1,
-						   num_entries+1);
-		W_ERROR_HAVE_NO_MEMORY(ctr1->array);
+	SAFE_FREE(session_list);
+}
 
-		init_srvsvc_NetSessInfo1(&ctr1->array[num_entries],
-					 session_list[resume_handle].remote_machine,
-					 session_list[resume_handle].username,
-					 num_files,
-					 connect_time,
-					 0,
-					 guest);
-		num_entries++;
-	}
+/*******************************************************************
+ makes a SRV_R_NET_SESS_ENUM structure.
+********************************************************************/
 
-	ctr1->count = num_entries;
+static WERROR init_srv_sess_info_ctr(SRV_SESS_INFO_CTR *ctr,
+				int switch_value, uint32 *resume_hnd, uint32 *total_entries)
+{
+	WERROR status = WERR_OK;
+	DEBUG(5,("init_srv_sess_info_ctr: %d\n", __LINE__));
 
-	if (resume_handle_p) {
-		if (*resume_handle_p >= *total_entries) {
-			*resume_handle_p = 0;
-		} else {
-			*resume_handle_p = resume_handle;
-		}
+	ctr->switch_value = switch_value;
+
+	switch (switch_value) {
+	case 0:
+		init_srv_sess_info_0(&(ctr->sess.info0), resume_hnd, total_entries);
+		ctr->ptr_sess_ctr = 1;
+		break;
+	case 1:
+		init_srv_sess_info_1(&(ctr->sess.info1), resume_hnd, total_entries);
+		ctr->ptr_sess_ctr = 1;
+		break;
+	default:
+		DEBUG(5,("init_srv_sess_info_ctr: unsupported switch value %d\n", switch_value));
+		(*resume_hnd) = 0;
+		(*total_entries) = 0;
+		ctr->ptr_sess_ctr = 0;
+		status = WERR_UNKNOWN_LEVEL;
+		break;
 	}
 
-	return WERR_OK;
+	return status;
 }
 
 /*******************************************************************
+ makes a SRV_R_NET_SESS_ENUM structure.
+********************************************************************/
+
+static void init_srv_r_net_sess_enum(SRV_R_NET_SESS_ENUM *r_n,
+				uint32 resume_hnd, int sess_level, int switch_value)  
+{
+	DEBUG(5,("init_srv_r_net_sess_enum: %d\n", __LINE__));
+
+	r_n->sess_level  = sess_level;
+
+	if (sess_level == -1)
+		r_n->status = WERR_UNKNOWN_LEVEL;
+	else
+		r_n->status = init_srv_sess_info_ctr(r_n->ctr, switch_value, &resume_hnd, &r_n->total_entries);
+
+	if (!W_ERROR_IS_OK(r_n->status))
+		resume_hnd = 0;
+
+	init_enum_hnd(&r_n->enum_hnd, resume_hnd);
+}
+
+/*******************************************************************
  fill in a conn info level 0 structure.
  ********************************************************************/
 
-static WERROR init_srv_conn_info_0(struct srvsvc_NetConnCtr0 *ctr0,
-				   uint32_t *resume_handle_p,
-				   uint32_t *total_entries)
+static void init_srv_conn_info_0(SRV_CONN_INFO_0 *ss0, uint32 *snum, uint32 *stot)
 {
-	uint32_t num_entries = 0;
-	uint32_t resume_handle = resume_handle_p ? *resume_handle_p : 0;
+	uint32 num_entries = 0;
+	(*stot) = 1;
 
-	DEBUG(5,("init_srv_conn_info_0\n"));
-
-	if (ctr0 == NULL) {
-		if (resume_handle_p) {
-			*resume_handle_p = 0;
-		}
-		return WERR_OK;
+	if (ss0 == NULL) {
+		(*snum) = 0;
+		return;
 	}
 
-	*total_entries = 1;
+	DEBUG(5,("init_srv_conn_0_ss0\n"));
 
-	ZERO_STRUCTP(ctr0);
+	if (snum) {
+		for (; (*snum) < (*stot) && num_entries < MAX_CONN_ENTRIES; (*snum)++) {
 
-	for (; resume_handle < *total_entries; resume_handle++) {
+			init_srv_conn_info0(&ss0->info_0[num_entries], (*stot));
 
-		ctr0->array = TALLOC_REALLOC_ARRAY(talloc_tos(),
-						   ctr0->array,
-						   struct srvsvc_NetConnInfo0,
-						   num_entries+1);
-		if (!ctr0->array) {
-			return WERR_NOMEM;
+			/* move on to creating next connection */
+			/* move on to creating next conn */
+			num_entries++;
 		}
 
-		init_srvsvc_NetConnInfo0(&ctr0->array[num_entries],
-					 (*total_entries));
+		ss0->num_entries_read  = num_entries;
+		ss0->ptr_conn_info     = num_entries > 0 ? 1 : 0;
+		ss0->num_entries_read2 = num_entries;
+		
+		if ((*snum) >= (*stot)) {
+			(*snum) = 0;
+		}
 
-		/* move on to creating next connection */
-		num_entries++;
-	}
+	} else {
+		ss0->num_entries_read = 0;
+		ss0->ptr_conn_info = 0;
+		ss0->num_entries_read2 = 0;
 
-	ctr0->count = num_entries;
-	*total_entries = num_entries;
-
-	if (resume_handle_p) {
-		if (*resume_handle_p >= *total_entries) {
-			*resume_handle_p = 0;
-		} else {
-			*resume_handle_p = resume_handle;
-		}
+		(*stot) = 0;
 	}
-
-	return WERR_OK;
 }
 
 /*******************************************************************
  fill in a conn info level 1 structure.
  ********************************************************************/
 
-static WERROR init_srv_conn_info_1(struct srvsvc_NetConnCtr1 *ctr1,
-				   uint32_t *resume_handle_p,
-				   uint32_t *total_entries)
+static void init_srv_conn_1_info(CONN_INFO_1 *se1, CONN_INFO_1_STR *str1,
+				uint32 id, uint32 type,
+				uint32 num_opens, uint32 num_users, uint32 open_time,
+				const char *usr_name, const char *net_name)
 {
-	uint32_t num_entries = 0;
-	uint32_t resume_handle = resume_handle_p ? *resume_handle_p : 0;
+	init_srv_conn_info1(se1 , id, type, num_opens, num_users, open_time, usr_name, net_name);
+	init_srv_conn_info1_str(str1, usr_name, net_name);
+}
 
-	DEBUG(5,("init_srv_conn_info_1\n"));
+/*******************************************************************
+ fill in a conn info level 1 structure.
+ ********************************************************************/
 
-	if (ctr1 == NULL) {
-		if (resume_handle_p) {
-			*resume_handle_p = 0;
-		}
-		return WERR_OK;
+static void init_srv_conn_info_1(SRV_CONN_INFO_1 *ss1, uint32 *snum, uint32 *stot)
+{
+	uint32 num_entries = 0;
+	(*stot) = 1;
+
+	if (ss1 == NULL) {
+		(*snum) = 0;
+		return;
 	}
 
-	*total_entries = 1;
+	DEBUG(5,("init_srv_conn_1_ss1\n"));
 
-	ZERO_STRUCTP(ctr1);
+	if (snum) {
+		for (; (*snum) < (*stot) && num_entries < MAX_CONN_ENTRIES; (*snum)++) {
+			init_srv_conn_1_info(&ss1->info_1[num_entries],
+								 &ss1->info_1_str[num_entries],
+			                     (*stot), 0x3, 1, 1, 3,"dummy_user", "IPC$");
 
-	for (; resume_handle < *total_entries; resume_handle++) {
-
-		ctr1->array = TALLOC_REALLOC_ARRAY(talloc_tos(),
-						   ctr1->array,
-						   struct srvsvc_NetConnInfo1,
-						   num_entries+1);
-		if (!ctr1->array) {
-			return WERR_NOMEM;
+			/* move on to creating next connection */
+			/* move on to creating next conn */
+			num_entries++;
 		}
 
-		init_srvsvc_NetConnInfo1(&ctr1->array[num_entries],
-					 (*total_entries),
-					 0x3,
-					 1,
-					 1,
-					 3,
-					 "dummy_user",
-					 "IPC$");
+		ss1->num_entries_read  = num_entries;
+		ss1->ptr_conn_info     = num_entries > 0 ? 1 : 0;
+		ss1->num_entries_read2 = num_entries;
+		
 
-		/* move on to creating next connection */
-		num_entries++;
-	}
-
-	ctr1->count = num_entries;
-	*total_entries = num_entries;
-
-	if (resume_handle_p) {
-		if (*resume_handle_p >= *total_entries) {
-			*resume_handle_p = 0;
-		} else {
-			*resume_handle_p = resume_handle;
+		if ((*snum) >= (*stot)) {
+			(*snum) = 0;
 		}
-	}
 
-	return WERR_OK;
+	} else {
+		ss1->num_entries_read = 0;
+		ss1->ptr_conn_info = 0;
+		ss1->num_entries_read2 = 0;
+		
+		(*stot) = 0;
+	}
 }
 
 /*******************************************************************
- _srvsvc_NetFileEnum
-*******************************************************************/
+ makes a SRV_R_NET_CONN_ENUM structure.
+********************************************************************/
 
-WERROR _srvsvc_NetFileEnum(pipes_struct *p,
-			   struct srvsvc_NetFileEnum *r)
+static WERROR init_srv_conn_info_ctr(SRV_CONN_INFO_CTR *ctr,
+				int switch_value, uint32 *resume_hnd, uint32 *total_entries)
 {
-	TALLOC_CTX *ctx = NULL;
-	struct srvsvc_NetFileCtr3 *ctr3;
-	uint32_t resume_hnd = 0;
-	WERROR werr;
+	WERROR status = WERR_OK;
+	DEBUG(5,("init_srv_conn_info_ctr: %d\n", __LINE__));
 
-	switch (r->in.info_ctr->level) {
-	case 3:
+	ctr->switch_value = switch_value;
+
+	switch (switch_value) {
+	case 0:
+		init_srv_conn_info_0(&ctr->conn.info0, resume_hnd, total_entries);
+		ctr->ptr_conn_ctr = 1;
 		break;
+	case 1:
+		init_srv_conn_info_1(&ctr->conn.info1, resume_hnd, total_entries);
+		ctr->ptr_conn_ctr = 1;
+		break;
 	default:
-		return WERR_UNKNOWN_LEVEL;
+		DEBUG(5,("init_srv_conn_info_ctr: unsupported switch value %d\n", switch_value));
+		(*resume_hnd = 0);
+		(*total_entries) = 0;
+		ctr->ptr_conn_ctr = 0;
+		status = WERR_UNKNOWN_LEVEL;
+		break;
 	}
 
-	ctx = talloc_tos();
-	ctr3 = r->in.info_ctr->ctr.ctr3;
-	if (!ctr3) {
-		werr = WERR_INVALID_PARAM;
-		goto done;
-	}
+	return status;
+}
 
-	/* TODO -- Windows enumerates
+/*******************************************************************
+ makes a SRV_R_NET_CONN_ENUM structure.
+********************************************************************/
+
+static void init_srv_r_net_conn_enum(SRV_R_NET_CONN_ENUM *r_n,
+				uint32 resume_hnd, int conn_level, int switch_value)  
+{
+	DEBUG(5,("init_srv_r_net_conn_enum: %d\n", __LINE__));
+
+	r_n->conn_level  = conn_level;
+	if (conn_level == -1)
+		r_n->status = WERR_UNKNOWN_LEVEL;
+	else
+		r_n->status = init_srv_conn_info_ctr(r_n->ctr, switch_value, &resume_hnd, &r_n->total_entries);
+
+	if (!W_ERROR_IS_OK(r_n->status))
+		resume_hnd = 0;
+
+	init_enum_hnd(&r_n->enum_hnd, resume_hnd);
+}
+
+/*******************************************************************
+ makes a SRV_R_NET_FILE_ENUM structure.
+********************************************************************/
+
+static WERROR net_file_enum_3( SRV_R_NET_FILE_ENUM *r, uint32 resume_hnd )
+{
+	TALLOC_CTX *ctx = get_talloc_ctx();
+	SRV_FILE_INFO_CTR *ctr = &r->ctr;
+
+	/* TODO -- Windows enumerates 
 	   (b) active pipes
 	   (c) open directories and files */
 
-	werr = net_enum_files(ctx, r->in.user, &ctr3, resume_hnd);
-	if (!W_ERROR_IS_OK(werr)) {
+	r->status = net_enum_files( ctx, &ctr->file.info3, &ctr->num_entries, resume_hnd );
+	if ( !W_ERROR_IS_OK(r->status))
 		goto done;
-	}
-
-	werr = net_enum_pipes(ctx, r->in.user, &ctr3, resume_hnd);
-	if (!W_ERROR_IS_OK(werr)) {
+		
+	r->status = net_enum_pipes( ctx, &ctr->file.info3, &ctr->num_entries, resume_hnd );
+	if ( !W_ERROR_IS_OK(r->status))
 		goto done;
-	}
+	
+	r->level = ctr->level = 3;
+	r->total_entries = ctr->num_entries;
+	/* ctr->num_entries = r->total_entries - resume_hnd; */
+	ctr->num_entries2 = ctr->num_entries;
+	ctr->ptr_file_info = 1;
 
-	*r->out.totalentries = ctr3->count;
-	r->out.info_ctr->ctr.ctr3->array = ctr3->array;
-	r->out.info_ctr->ctr.ctr3->count = ctr3->count;
+	r->status = WERR_OK;
 
-	werr = WERR_OK;
+done:
+	if ( ctr->num_entries > 0 ) 
+		ctr->ptr_entries = 1;
 
- done:
-	return werr;
+	init_enum_hnd(&r->enum_hnd, 0);
+
+	return r->status;
 }
 
 /*******************************************************************
- _srvsvc_NetSrvGetInfo
+*******************************************************************/
+
+WERROR _srv_net_file_enum(pipes_struct *p, SRV_Q_NET_FILE_ENUM *q_u, SRV_R_NET_FILE_ENUM *r_u)
+{
+	switch ( q_u->level ) {
+	case 3:
+		return net_file_enum_3( r_u, get_enum_hnd(&q_u->enum_hnd) );	
+	default:
+		return WERR_UNKNOWN_LEVEL;
+	}
+	
+	return WERR_OK;
+}
+
+/*******************************************************************
+net server get info
 ********************************************************************/
 
-WERROR _srvsvc_NetSrvGetInfo(pipes_struct *p,
-			     struct srvsvc_NetSrvGetInfo *r)
+WERROR _srv_net_srv_get_info(pipes_struct *p, SRV_Q_NET_SRV_GET_INFO *q_u, SRV_R_NET_SRV_GET_INFO *r_u)
 {
 	WERROR status = WERR_OK;
+	SRV_INFO_CTR *ctr = TALLOC_P(p->mem_ctx, SRV_INFO_CTR);
 
-	DEBUG(5,("_srvsvc_NetSrvGetInfo: %d\n", __LINE__));
+	if (!ctr)
+		return WERR_NOMEM;
 
+	ZERO_STRUCTP(ctr);
+
+	DEBUG(5,("srv_net_srv_get_info: %d\n", __LINE__));
+
 	if (!pipe_access_check(p)) {
-		DEBUG(3, ("access denied to _srvsvc_NetSrvGetInfo\n"));
+		DEBUG(3, ("access denied to srv_net_srv_get_info\n"));
 		return WERR_ACCESS_DENIED;
 	}
 
-	switch (r->in.level) {
+	switch (q_u->switch_value) {
 
 		/* Technically level 102 should only be available to
 		   Administrators but there isn't anything super-secret
 		   here, as most of it is made up. */
 
-	case 102: {
-		struct srvsvc_NetSrvInfo102 *info102;
-
-		info102 = TALLOC_P(p->mem_ctx, struct srvsvc_NetSrvInfo102);
-		if (!info102) {
-			return WERR_NOMEM;
-		}
-
-		init_srvsvc_NetSrvInfo102(info102,
-					  PLATFORM_ID_NT,
-					  global_myname(),
-					  lp_major_announce_version(),
-					  lp_minor_announce_version(),
-					  lp_default_server_announce(),
-					  string_truncate(lp_serverstring(), MAX_SERVER_STRING_LENGTH),
-					  0xffffffff, /* users */
-					  0xf, /* disc */
-					  0, /* hidden */
-					  240, /* announce */
-					  3000, /* announce delta */
-					  100000, /* licenses */
-					  "c:\\"); /* user path */
-		r->out.info->info102 = info102;
+	case 102:
+		init_srv_info_102(&ctr->srv.sv102,
+		                  500, global_myname(), 
+				  string_truncate(lp_serverstring(), MAX_SERVER_STRING_LENGTH),
+		                  lp_major_announce_version(), lp_minor_announce_version(),
+		                  lp_default_server_announce(),
+		                  0xffffffff, /* users */
+		                  0xf, /* disc */
+		                  0, /* hidden */
+		                  240, /* announce */
+		                  3000, /* announce delta */
+		                  100000, /* licenses */
+		                  "c:\\"); /* user path */
 		break;
-	}
-	case 101: {
-		struct srvsvc_NetSrvInfo101 *info101;
-
-		info101 = TALLOC_P(p->mem_ctx, struct srvsvc_NetSrvInfo101);
-		if (!info101) {
-			return WERR_NOMEM;
-		}
-
-		init_srvsvc_NetSrvInfo101(info101,
-					  PLATFORM_ID_NT,
-					  global_myname(),
-					  lp_major_announce_version(),
-					  lp_minor_announce_version(),
-					  lp_default_server_announce(),
-					  string_truncate(lp_serverstring(), MAX_SERVER_STRING_LENGTH));
-		r->out.info->info101 = info101;
+	case 101:
+		init_srv_info_101(&ctr->srv.sv101,
+		                  500, global_myname(),
+		                  lp_major_announce_version(), lp_minor_announce_version(),
+		                  lp_default_server_announce(),
+		                  string_truncate(lp_serverstring(), MAX_SERVER_STRING_LENGTH));
 		break;
-	}
-	case 100: {
-		struct srvsvc_NetSrvInfo100 *info100;
-
-		info100 = TALLOC_P(p->mem_ctx, struct srvsvc_NetSrvInfo100);
-		if (!info100) {
-			return WERR_NOMEM;
-		}
-
-		init_srvsvc_NetSrvInfo100(info100,
-					  PLATFORM_ID_NT,
-					  global_myname());
-		r->out.info->info100 = info100;
-
+	case 100:
+		init_srv_info_100(&ctr->srv.sv100, 500, global_myname());
 		break;
-	}
 	default:
 		status = WERR_UNKNOWN_LEVEL;
 		break;
 	}
 
-	DEBUG(5,("_srvsvc_NetSrvGetInfo: %d\n", __LINE__));
+	/* set up the net server get info structure */
+	init_srv_r_net_srv_get_info(r_u, q_u->switch_value, ctr, status);
 
-	return status;
+	DEBUG(5,("srv_net_srv_get_info: %d\n", __LINE__));
+
+	return r_u->status;
 }
 
 /*******************************************************************
- _srvsvc_NetSrvSetInfo
+net server set info
 ********************************************************************/
 
-WERROR _srvsvc_NetSrvSetInfo(pipes_struct *p,
-			     struct srvsvc_NetSrvSetInfo *r)
+WERROR _srv_net_srv_set_info(pipes_struct *p, SRV_Q_NET_SRV_SET_INFO *q_u, SRV_R_NET_SRV_SET_INFO *r_u)
 {
 	WERROR status = WERR_OK;
 
-	DEBUG(5,("_srvsvc_NetSrvSetInfo: %d\n", __LINE__));
+	DEBUG(5,("srv_net_srv_set_info: %d\n", __LINE__));
 
 	/* Set up the net server set info structure. */
 
-	DEBUG(5,("_srvsvc_NetSrvSetInfo: %d\n", __LINE__));
+	init_srv_r_net_srv_set_info(r_u, 0x0, status);
 
-	return status;
+	DEBUG(5,("srv_net_srv_set_info: %d\n", __LINE__));
+
+	return r_u->status;
 }
 
 /*******************************************************************
- _srvsvc_NetConnEnum
+net conn enum
 ********************************************************************/
 
-WERROR _srvsvc_NetConnEnum(pipes_struct *p,
-			   struct srvsvc_NetConnEnum *r)
+WERROR _srv_net_conn_enum(pipes_struct *p, SRV_Q_NET_CONN_ENUM *q_u, SRV_R_NET_CONN_ENUM *r_u)
 {
-	WERROR werr;
+	DEBUG(5,("srv_net_conn_enum: %d\n", __LINE__));
 
-	DEBUG(5,("_srvsvc_NetConnEnum: %d\n", __LINE__));
+	r_u->ctr = TALLOC_P(p->mem_ctx, SRV_CONN_INFO_CTR);
+	if (!r_u->ctr)
+		return WERR_NOMEM;
 
-	switch (r->in.info_ctr->level) {
-		case 0:
-			werr = init_srv_conn_info_0(r->in.info_ctr->ctr.ctr0,
-						    r->in.resume_handle,
-						    r->out.totalentries);
-			break;
-		case 1:
-			werr = init_srv_conn_info_1(r->in.info_ctr->ctr.ctr1,
-						    r->in.resume_handle,
-						    r->out.totalentries);
-			break;
-		default:
-			return WERR_UNKNOWN_LEVEL;
-	}
+	ZERO_STRUCTP(r_u->ctr);
 
-	DEBUG(5,("_srvsvc_NetConnEnum: %d\n", __LINE__));
+	/* set up the */
+	init_srv_r_net_conn_enum(r_u,
+				get_enum_hnd(&q_u->enum_hnd),
+				q_u->conn_level,
+				q_u->ctr->switch_value);
 
-	return werr;
+	DEBUG(5,("srv_net_conn_enum: %d\n", __LINE__));
+
+	return r_u->status;
 }
 
 /*******************************************************************
- _srvsvc_NetSessEnum
+net sess enum
 ********************************************************************/
 
-WERROR _srvsvc_NetSessEnum(pipes_struct *p,
-			   struct srvsvc_NetSessEnum *r)
+WERROR _srv_net_sess_enum(pipes_struct *p, SRV_Q_NET_SESS_ENUM *q_u, SRV_R_NET_SESS_ENUM *r_u)
 {
-	WERROR werr;
+	DEBUG(5,("_srv_net_sess_enum: %d\n", __LINE__));
 
-	DEBUG(5,("_srvsvc_NetSessEnum: %d\n", __LINE__));
+	r_u->ctr = TALLOC_P(p->mem_ctx, SRV_SESS_INFO_CTR);
+	if (!r_u->ctr)
+		return WERR_NOMEM;
 
-	switch (r->in.info_ctr->level) {
-		case 0:
-			werr = init_srv_sess_info_0(p,
-						    r->in.info_ctr->ctr.ctr0,
-						    r->in.resume_handle,
-						    r->out.totalentries);
-			break;
-		case 1:
-			werr = init_srv_sess_info_1(p,
-						    r->in.info_ctr->ctr.ctr1,
-						    r->in.resume_handle,
-						    r->out.totalentries);
-			break;
-		default:
-			return WERR_UNKNOWN_LEVEL;
-	}
+	ZERO_STRUCTP(r_u->ctr);
 
-	DEBUG(5,("_srvsvc_NetSessEnum: %d\n", __LINE__));
+	/* set up the */
+	init_srv_r_net_sess_enum(r_u,
+				get_enum_hnd(&q_u->enum_hnd),
+				q_u->sess_level,
+				q_u->ctr->switch_value);
 
-	return werr;
+	DEBUG(5,("_srv_net_sess_enum: %d\n", __LINE__));
+
+	return r_u->status;
 }
 
 /*******************************************************************
- _srvsvc_NetSessDel
+net sess del
 ********************************************************************/
 
-WERROR _srvsvc_NetSessDel(pipes_struct *p,
-			  struct srvsvc_NetSessDel *r)
+WERROR _srv_net_sess_del(pipes_struct *p, SRV_Q_NET_SESS_DEL *q_u, SRV_R_NET_SESS_DEL *r_u)
 {
 	struct sessionid *session_list;
 	struct current_user user;
 	int num_sessions, snum;
-	const char *username;
-	const char *machine;
-	bool not_root = False;
-	WERROR werr;
+	fstring username;
+	fstring machine;
+	BOOL not_root = False;
 
-	username = r->in.user;
-	machine = r->in.client;
+	rpcstr_pull_unistr2_fstring(username, &q_u->uni_user_name);
+	rpcstr_pull_unistr2_fstring(machine, &q_u->uni_cli_name);
 
 	/* strip leading backslashes if any */
-	if (machine && machine[0] == '\\' && machine[1] == '\\') {
-		machine += 2;
+	while (machine[0] == '\\') {
+		memmove(machine, &machine[1], strlen(machine));
 	}
 
-	num_sessions = list_sessions(p->mem_ctx, &session_list);
+	num_sessions = list_sessions(&session_list);
 
-	DEBUG(5,("_srvsvc_NetSessDel: %d\n", __LINE__));
+	DEBUG(5,("_srv_net_sess_del: %d\n", __LINE__));
 
-	werr = WERR_ACCESS_DENIED;
+	r_u->status = WERR_ACCESS_DENIED;
 
 	get_current_user(&user, p);
 
 	/* fail out now if you are not root or not a domain admin */
 
-	if ((user.ut.uid != sec_initial_uid()) &&
+	if ((user.ut.uid != sec_initial_uid()) && 
 		( ! nt_token_check_domain_rid(p->pipe_user.nt_user_token, DOMAIN_GROUP_RID_ADMINS))) {
 
 		goto done;
@@ -1244,196 +1341,109 @@
 
 		if ((strequal(session_list[snum].username, username) || username[0] == '\0' ) &&
 		    strequal(session_list[snum].remote_machine, machine)) {
-
-			NTSTATUS ntstat;
-
+		
 			if (user.ut.uid != sec_initial_uid()) {
 				not_root = True;
 				become_root();
 			}
 
-			ntstat = messaging_send(smbd_messaging_context(),
-						session_list[snum].pid,
-						MSG_SHUTDOWN, &data_blob_null);
+			if (NT_STATUS_IS_OK(message_send_pid(pid_to_procid(session_list[snum].pid), MSG_SHUTDOWN, NULL, 0, False)))
+				r_u->status = WERR_OK;
 
-			if (NT_STATUS_IS_OK(ntstat))
-				werr = WERR_OK;
-
-			if (not_root)
+			if (not_root) 
 				unbecome_root();
 		}
 	}
 
-	DEBUG(5,("_srvsvc_NetSessDel: %d\n", __LINE__));
+	DEBUG(5,("_srv_net_sess_del: %d\n", __LINE__));
 
+
 done:
+	SAFE_FREE(session_list);
 
-	return werr;
+	return r_u->status;
 }
 
 /*******************************************************************
- _srvsvc_NetShareEnumAll
+ Net share enum all.
 ********************************************************************/
 
-WERROR _srvsvc_NetShareEnumAll(pipes_struct *p,
-			       struct srvsvc_NetShareEnumAll *r)
+WERROR _srv_net_share_enum_all(pipes_struct *p, SRV_Q_NET_SHARE_ENUM *q_u, SRV_R_NET_SHARE_ENUM *r_u)
 {
-	WERROR werr;
+	DEBUG(5,("_srv_net_share_enum: %d\n", __LINE__));
 
-	DEBUG(5,("_srvsvc_NetShareEnumAll: %d\n", __LINE__));
-
 	if (!pipe_access_check(p)) {
-		DEBUG(3, ("access denied to _srvsvc_NetShareEnumAll\n"));
+		DEBUG(3, ("access denied to srv_net_share_enum_all\n"));
 		return WERR_ACCESS_DENIED;
 	}
 
 	/* Create the list of shares for the response. */
-	werr = init_srv_share_info_ctr(p,
-				       r->in.info_ctr,
-				       r->in.resume_handle,
-				       r->out.totalentries,
-				       true);
+	init_srv_r_net_share_enum(p, r_u,
+				q_u->ctr.info_level,
+				get_enum_hnd(&q_u->enum_hnd), True);
 
-	DEBUG(5,("_srvsvc_NetShareEnumAll: %d\n", __LINE__));
+	DEBUG(5,("_srv_net_share_enum: %d\n", __LINE__));
 
-	return werr;
+	return r_u->status;
 }
 
 /*******************************************************************
- _srvsvc_NetShareEnum
+ Net share enum.
 ********************************************************************/
 
-WERROR _srvsvc_NetShareEnum(pipes_struct *p,
-			    struct srvsvc_NetShareEnum *r)
+WERROR _srv_net_share_enum(pipes_struct *p, SRV_Q_NET_SHARE_ENUM *q_u, SRV_R_NET_SHARE_ENUM *r_u)
 {
-	WERROR werr;
+	DEBUG(5,("_srv_net_share_enum: %d\n", __LINE__));
 
-	DEBUG(5,("_srvsvc_NetShareEnum: %d\n", __LINE__));
-
 	if (!pipe_access_check(p)) {
-		DEBUG(3, ("access denied to _srvsvc_NetShareEnum\n"));
+		DEBUG(3, ("access denied to srv_net_share_enum\n"));
 		return WERR_ACCESS_DENIED;
 	}
 
 	/* Create the list of shares for the response. */
-	werr = init_srv_share_info_ctr(p,
-				       r->in.info_ctr,
-				       r->in.resume_handle,
-				       r->out.totalentries,
-				       false);
+	init_srv_r_net_share_enum(p, r_u,
+				  q_u->ctr.info_level,
+				  get_enum_hnd(&q_u->enum_hnd), False);
 
-	DEBUG(5,("_srvsvc_NetShareEnum: %d\n", __LINE__));
+	DEBUG(5,("_srv_net_share_enum: %d\n", __LINE__));
 
-	return werr;
+	return r_u->status;
 }
 
 /*******************************************************************
- _srvsvc_NetShareGetInfo
+ Net share get info.
 ********************************************************************/
 
-WERROR _srvsvc_NetShareGetInfo(pipes_struct *p,
-			       struct srvsvc_NetShareGetInfo *r)
+WERROR _srv_net_share_get_info(pipes_struct *p, SRV_Q_NET_SHARE_GET_INFO *q_u, SRV_R_NET_SHARE_GET_INFO *r_u)
 {
-	WERROR status = WERR_OK;
 	fstring share_name;
-	int snum;
-	union srvsvc_NetShareInfo *info = r->out.info;
 
-	DEBUG(5,("_srvsvc_NetShareGetInfo: %d\n", __LINE__));
+	DEBUG(5,("_srv_net_share_get_info: %d\n", __LINE__));
 
-	fstrcpy(share_name, r->in.share_name);
+	/* Create the list of shares for the response. */
+	unistr2_to_ascii(share_name, &q_u->uni_share_name, sizeof(share_name));
+	init_srv_r_net_share_get_info(p, r_u, share_name, q_u->info_level);
 
-	snum = find_service(share_name);
-	if (snum < 0) {
-		return WERR_INVALID_NAME;
-	}
+	DEBUG(5,("_srv_net_share_get_info: %d\n", __LINE__));
 
-	switch (r->in.level) {
-		case 0:
-			info->info0 = TALLOC_P(p->mem_ctx, struct srvsvc_NetShareInfo0);
-			W_ERROR_HAVE_NO_MEMORY(info->info0);
-			init_srv_share_info_0(p, info->info0, snum);
-			break;
-		case 1:
-			info->info1 = TALLOC_P(p->mem_ctx, struct srvsvc_NetShareInfo1);
-			W_ERROR_HAVE_NO_MEMORY(info->info1);
-			init_srv_share_info_1(p, info->info1, snum);
-			break;
-		case 2:
-			info->info2 = TALLOC_P(p->mem_ctx, struct srvsvc_NetShareInfo2);
-			W_ERROR_HAVE_NO_MEMORY(info->info2);
-			init_srv_share_info_2(p, info->info2, snum);
-			break;
-		case 501:
-			info->info501 = TALLOC_P(p->mem_ctx, struct srvsvc_NetShareInfo501);
-			W_ERROR_HAVE_NO_MEMORY(info->info501);
-			init_srv_share_info_501(p, info->info501, snum);
-			break;
-		case 502:
-			info->info502 = TALLOC_P(p->mem_ctx, struct srvsvc_NetShareInfo502);
-			W_ERROR_HAVE_NO_MEMORY(info->info502);
-			init_srv_share_info_502(p, info->info502, snum);
-			break;
-		case 1004:
-			info->info1004 = TALLOC_P(p->mem_ctx, struct srvsvc_NetShareInfo1004);
-			W_ERROR_HAVE_NO_MEMORY(info->info1004);
-			init_srv_share_info_1004(p, info->info1004, snum);
-			break;
-		case 1005:
-			info->info1005 = TALLOC_P(p->mem_ctx, struct srvsvc_NetShareInfo1005);
-			W_ERROR_HAVE_NO_MEMORY(info->info1005);
-			init_srv_share_info_1005(p, info->info1005, snum);
-			break;
-		case 1006:
-			info->info1006 = TALLOC_P(p->mem_ctx, struct srvsvc_NetShareInfo1006);
-			W_ERROR_HAVE_NO_MEMORY(info->info1006);
-			init_srv_share_info_1006(p, info->info1006, snum);
-			break;
-		case 1007:
-			info->info1007 = TALLOC_P(p->mem_ctx, struct srvsvc_NetShareInfo1007);
-			W_ERROR_HAVE_NO_MEMORY(info->info1007);
-			init_srv_share_info_1007(p, info->info1007, snum);
-			break;
-		case 1501:
-			init_srv_share_info_1501(p, info->info1501, snum);
-			break;
-		default:
-			DEBUG(5,("_srvsvc_NetShareGetInfo: unsupported switch value %d\n",
-				r->in.level));
-			status = WERR_UNKNOWN_LEVEL;
-			break;
-	}
-
-	DEBUG(5,("_srvsvc_NetShareGetInfo: %d\n", __LINE__));
-
-	return status;
+	return r_u->status;
 }
 
 /*******************************************************************
  Check a given DOS pathname is valid for a share.
 ********************************************************************/
 
-char *valid_share_pathname(TALLOC_CTX *ctx, const char *dos_pathname)
+char *valid_share_pathname(char *dos_pathname)
 {
-	char *ptr = NULL;
+	char *ptr;
 
-	if (!dos_pathname) {
-		return NULL;
-	}
-
-	ptr = talloc_strdup(ctx, dos_pathname);
-	if (!ptr) {
-		return NULL;
-	}
 	/* Convert any '\' paths to '/' */
-	unix_format(ptr);
-	ptr = unix_clean_name(ctx, ptr);
-	if (!ptr) {
-		return NULL;
-	}
+	unix_format(dos_pathname);
+	unix_clean_name(dos_pathname);
 
 	/* NT is braindead - it wants a C: prefix to a pathname ! So strip it. */
-	if (strlen(ptr) > 2 && ptr[1] == ':' && ptr[0] != '/')
+	ptr = dos_pathname;
+	if (strlen(dos_pathname) > 2 && ptr[1] == ':' && ptr[0] != '/')
 		ptr += 2;
 
 	/* Only absolute paths allowed. */
@@ -1444,40 +1454,32 @@
 }
 
 /*******************************************************************
- _srvsvc_NetShareSetInfo. Modify share details.
+ Net share set info. Modify share details.
 ********************************************************************/
 
-WERROR _srvsvc_NetShareSetInfo(pipes_struct *p,
-			       struct srvsvc_NetShareSetInfo *r)
+WERROR _srv_net_share_set_info(pipes_struct *p, SRV_Q_NET_SHARE_SET_INFO *q_u, SRV_R_NET_SHARE_SET_INFO *r_u)
 {
 	struct current_user user;
-	char *command = NULL;
-	char *share_name = NULL;
-	char *comment = NULL;
-	const char *pathname = NULL;
+	pstring command;
+	fstring share_name;
+	fstring comment;
+	pstring pathname;
 	int type;
 	int snum;
 	int ret;
-	char *path = NULL;
+	char *path;
 	SEC_DESC *psd = NULL;
 	SE_PRIV se_diskop = SE_DISK_OPERATOR;
-	bool is_disk_op = False;
+	BOOL is_disk_op = False;
 	int max_connections = 0;
-	TALLOC_CTX *ctx = p->mem_ctx;
-	union srvsvc_NetShareInfo *info = r->in.info;
 
-	DEBUG(5,("_srvsvc_NetShareSetInfo: %d\n", __LINE__));
+	DEBUG(5,("_srv_net_share_set_info: %d\n", __LINE__));
 
-	share_name = talloc_strdup(p->mem_ctx, r->in.share_name);
-	if (!share_name) {
-		return WERR_NOMEM;
-	}
+	unistr2_to_ascii(share_name, &q_u->uni_share_name, sizeof(share_name));
 
-	if (r->out.parm_error) {
-		*r->out.parm_error = 0;
-	}
+	r_u->parm_error = 0;
 
-	if ( strequal(share_name,"IPC$")
+	if ( strequal(share_name,"IPC$") 
 		|| ( lp_enable_asu_support() && strequal(share_name,"ADMIN$") )
 		|| strequal(share_name,"global") )
 	{
@@ -1497,45 +1499,44 @@
 	get_current_user(&user,p);
 
 	is_disk_op = user_has_privileges( p->pipe_user.nt_user_token, &se_diskop );
-
+	
 	/* fail out now if you are not root and not a disk op */
-
+	
 	if ( user.ut.uid != sec_initial_uid() && !is_disk_op )
 		return WERR_ACCESS_DENIED;
 
-	switch (r->in.level) {
+	switch (q_u->info_level) {
 	case 1:
-		pathname = talloc_strdup(ctx, lp_pathname(snum));
-		comment = talloc_strdup(ctx, info->info1->comment);
-		type = info->info1->type;
+		pstrcpy(pathname, lp_pathname(snum));
+		unistr2_to_ascii(comment, &q_u->info.share.info2.info_2_str.uni_remark, sizeof(comment));
+		type = q_u->info.share.info2.info_2.type;
 		psd = NULL;
 		break;
 	case 2:
-		comment = talloc_strdup(ctx, info->info2->comment);
-		pathname = info->info2->path;
-		type = info->info2->type;
-		max_connections = (info->info2->max_users == (uint32_t)-1) ?
-			0 : info->info2->max_users;
+		unistr2_to_ascii(comment, &q_u->info.share.info2.info_2_str.uni_remark, sizeof(comment));
+		unistr2_to_ascii(pathname, &q_u->info.share.info2.info_2_str.uni_path, sizeof(pathname));
+		type = q_u->info.share.info2.info_2.type;
+		max_connections = (q_u->info.share.info2.info_2.max_uses == 0xffffffff) ? 0 : q_u->info.share.info2.info_2.max_uses;
 		psd = NULL;
 		break;
 #if 0
 		/* not supported on set but here for completeness */
 	case 501:
-		comment = talloc_strdup(ctx, info->info501->comment);
-		type = info->info501->type;
+		unistr2_to_ascii(comment, &q_u->info.share.info501.info_501_str.uni_remark, sizeof(comment));
+		type = q_u->info.share.info501.info_501.type;
 		psd = NULL;
 		break;
 #endif
 	case 502:
-		comment = talloc_strdup(ctx, info->info502->comment);
-		pathname = info->info502->path;
-		type = info->info502->type;
-		psd = info->info502->sd_buf.sd;
+		unistr2_to_ascii(comment, &q_u->info.share.info502.info_502_str.uni_remark, sizeof(comment));
+		unistr2_to_ascii(pathname, &q_u->info.share.info502.info_502_str.uni_path, sizeof(pathname));
+		type = q_u->info.share.info502.info_502.type;
+		psd = q_u->info.share.info502.info_502_str.sd;
 		map_generic_share_sd_bits(psd);
 		break;
 	case 1004:
-		pathname = talloc_strdup(ctx, lp_pathname(snum));
-		comment = talloc_strdup(ctx, info->info1004->comment);
+		pstrcpy(pathname, lp_pathname(snum));
+		unistr2_to_ascii(comment, &q_u->info.share.info1004.info_1004_str.uni_remark, sizeof(comment));
 		type = STYPE_DISKTREE;
 		break;
 	case 1005:
@@ -1543,40 +1544,35 @@
 		   user, so we must compare it to see if it's what is set in
 		   smb.conf, so that we can contine other ops like setting
 		   ACLs on a share */
-		if (((info->info1005->dfs_flags &
+		if (((q_u->info.share.info1005.share_info_flags &
 		      SHARE_1005_CSC_POLICY_MASK) >>
 		     SHARE_1005_CSC_POLICY_SHIFT) == lp_csc_policy(snum))
 			return WERR_OK;
 		else {
-			DEBUG(3, ("_srvsvc_NetShareSetInfo: client is trying to change csc policy from the network; must be done with smb.conf\n"));
+			DEBUG(3, ("_srv_net_share_set_info: client is trying to change csc policy from the network; must be done with smb.conf\n"));
 			return WERR_ACCESS_DENIED;
 		}
 	case 1006:
 	case 1007:
 		return WERR_ACCESS_DENIED;
 	case 1501:
-		pathname = talloc_strdup(ctx, lp_pathname(snum));
-		comment = talloc_strdup(ctx, lp_comment(snum));
-		psd = info->info1501->sd;
+		pstrcpy(pathname, lp_pathname(snum));
+		fstrcpy(comment, lp_comment(snum));
+		psd = q_u->info.share.info1501.sdb->sec;
 		map_generic_share_sd_bits(psd);
 		type = STYPE_DISKTREE;
 		break;
 	default:
-		DEBUG(5,("_srvsvc_NetShareSetInfo: unsupported switch value %d\n",
-			r->in.level));
+		DEBUG(5,("_srv_net_share_set_info: unsupported switch value %d\n", q_u->info_level));
 		return WERR_UNKNOWN_LEVEL;
 	}
 
 	/* We can only modify disk shares. */
 	if (type != STYPE_DISKTREE)
 		return WERR_ACCESS_DENIED;
-
-	if (comment == NULL) {
-		return WERR_NOMEM;
-	}
-
+		
 	/* Check if the pathname is valid. */
-	if (!(path = valid_share_pathname(p->mem_ctx, pathname )))
+	if (!(path = valid_share_pathname( pathname )))
 		return WERR_OBJECT_PATH_INVALID;
 
 	/* Ensure share name, pathname and comment don't contain '"' characters. */
@@ -1584,59 +1580,45 @@
 	string_replace(path, '"', ' ');
 	string_replace(comment, '"', ' ');
 
-	DEBUG(10,("_srvsvc_NetShareSetInfo: change share command = %s\n",
+	DEBUG(10,("_srv_net_share_set_info: change share command = %s\n",
 		lp_change_share_cmd() ? lp_change_share_cmd() : "NULL" ));
 
 	/* Only call modify function if something changed. */
-
-	if (strcmp(path, lp_pathname(snum)) || strcmp(comment, lp_comment(snum))
-			|| (lp_max_connections(snum) != max_connections)) {
+	
+	if (strcmp(path, lp_pathname(snum)) || strcmp(comment, lp_comment(snum)) 
+		|| (lp_max_connections(snum) != max_connections) ) 
+	{
 		if (!lp_change_share_cmd() || !*lp_change_share_cmd()) {
-			DEBUG(10,("_srvsvc_NetShareSetInfo: No change share command\n"));
+			DEBUG(10,("_srv_net_share_set_info: No change share command\n"));
 			return WERR_ACCESS_DENIED;
 		}
 
-		command = talloc_asprintf(p->mem_ctx,
-				"%s \"%s\" \"%s\" \"%s\" \"%s\" %d",
-				lp_change_share_cmd(),
-				get_dyn_CONFIGFILE(),
-				share_name,
-				path,
-				comment ? comment : "",
-				max_connections);
-		if (!command) {
-			return WERR_NOMEM;
-		}
+		slprintf(command, sizeof(command)-1, "%s \"%s\" \"%s\" \"%s\" \"%s\" %d",
+				lp_change_share_cmd(), dyn_CONFIGFILE, share_name, path, comment, max_connections ); 
 
-		DEBUG(10,("_srvsvc_NetShareSetInfo: Running [%s]\n", command ));
-
+		DEBUG(10,("_srv_net_share_set_info: Running [%s]\n", command ));
+				
 		/********* BEGIN SeDiskOperatorPrivilege BLOCK *********/
-
-		if (is_disk_op)
+	
+		if ( is_disk_op )
 			become_root();
-
+			
 		if ( (ret = smbrun(command, NULL)) == 0 ) {
 			/* Tell everyone we updated smb.conf. */
-			message_send_all(smbd_messaging_context(),
-					 MSG_SMB_CONF_UPDATED, NULL, 0,
-					 NULL);
+			message_send_all(conn_tdb_ctx(), MSG_SMB_CONF_UPDATED, NULL, 0, False, NULL);
 		}
-
+		
 		if ( is_disk_op )
 			unbecome_root();
-
+			
 		/********* END SeDiskOperatorPrivilege BLOCK *********/
 
-		DEBUG(3,("_srvsvc_NetShareSetInfo: Running [%s] returned (%d)\n",
-			command, ret ));
-
-		TALLOC_FREE(command);
-
+		DEBUG(3,("_srv_net_share_set_info: Running [%s] returned (%d)\n", command, ret ));		
+	
 		if ( ret != 0 )
 			return WERR_ACCESS_DENIED;
 	} else {
-		DEBUG(10,("_srvsvc_NetShareSetInfo: No change to share name (%s)\n",
-			share_name ));
+		DEBUG(10,("_srv_net_share_set_info: No change to share name (%s)\n", share_name ));
 	}
 
 	/* Replace SD if changed. */
@@ -1648,57 +1630,54 @@
 
 		if (old_sd && !sec_desc_equal(old_sd, psd)) {
 			if (!set_share_security(share_name, psd))
-				DEBUG(0,("_srvsvc_NetShareSetInfo: Failed to change security info in share %s.\n",
+				DEBUG(0,("_srv_net_share_set_info: Failed to change security info in share %s.\n",
 					share_name ));
 		}
 	}
+			
+	DEBUG(5,("_srv_net_share_set_info: %d\n", __LINE__));
 
-	DEBUG(5,("_srvsvc_NetShareSetInfo: %d\n", __LINE__));
-
 	return WERR_OK;
 }
 
 /*******************************************************************
- _srvsvc_NetShareAdd.
- Call 'add_share_command "sharename" "pathname"
+ Net share add. Call 'add_share_command "sharename" "pathname" 
  "comment" "max connections = "
 ********************************************************************/
 
-WERROR _srvsvc_NetShareAdd(pipes_struct *p,
-			   struct srvsvc_NetShareAdd *r)
+WERROR _srv_net_share_add(pipes_struct *p, SRV_Q_NET_SHARE_ADD *q_u, SRV_R_NET_SHARE_ADD *r_u)
 {
 	struct current_user user;
-	char *command = NULL;
-	char *share_name = NULL;
-	char *comment = NULL;
-	char *pathname = NULL;
+	pstring command;
+	fstring share_name;
+	fstring comment;
+	pstring pathname;
 	int type;
 	int snum;
 	int ret;
 	char *path;
 	SEC_DESC *psd = NULL;
 	SE_PRIV se_diskop = SE_DISK_OPERATOR;
-	bool is_disk_op;
+	BOOL is_disk_op;
 	int max_connections = 0;
-	TALLOC_CTX *ctx = p->mem_ctx;
 
-	DEBUG(5,("_srvsvc_NetShareAdd: %d\n", __LINE__));
+	DEBUG(5,("_srv_net_share_add: %d\n", __LINE__));
 
-	*r->out.parm_error = 0;
+	r_u->parm_error = 0;
 
 	get_current_user(&user,p);
 
 	is_disk_op = user_has_privileges( p->pipe_user.nt_user_token, &se_diskop );
 
-	if (user.ut.uid != sec_initial_uid()  && !is_disk_op )
+	if (user.ut.uid != sec_initial_uid()  && !is_disk_op ) 
 		return WERR_ACCESS_DENIED;
 
 	if (!lp_add_share_cmd() || !*lp_add_share_cmd()) {
-		DEBUG(10,("_srvsvc_NetShareAdd: No add share command\n"));
+		DEBUG(10,("_srv_net_share_add: No add share command\n"));
 		return WERR_ACCESS_DENIED;
 	}
-
-	switch (r->in.level) {
+	
+	switch (q_u->info_level) {
 	case 0:
 		/* No path. Not enough info in a level 0 to do anything. */
 		return WERR_ACCESS_DENIED;
@@ -1706,28 +1685,25 @@
 		/* Not enough info in a level 1 to do anything. */
 		return WERR_ACCESS_DENIED;
 	case 2:
-		share_name = talloc_strdup(ctx, r->in.info->info2->name);
-		comment = talloc_strdup(ctx, r->in.info->info2->comment);
-		pathname = talloc_strdup(ctx, r->in.info->info2->path);
-		max_connections = (r->in.info->info2->max_users == (uint32_t)-1) ?
-			0 : r->in.info->info2->max_users;
-		type = r->in.info->info2->type;
+		unistr2_to_ascii(share_name, &q_u->info.share.info2.info_2_str.uni_netname, sizeof(share_name));
+		unistr2_to_ascii(comment, &q_u->info.share.info2.info_2_str.uni_remark, sizeof(share_name));
+		unistr2_to_ascii(pathname, &q_u->info.share.info2.info_2_str.uni_path, sizeof(share_name));
+		max_connections = (q_u->info.share.info2.info_2.max_uses == 0xffffffff) ? 0 : q_u->info.share.info2.info_2.max_uses;
+		type = q_u->info.share.info2.info_2.type;
 		break;
 	case 501:
 		/* No path. Not enough info in a level 501 to do anything. */
 		return WERR_ACCESS_DENIED;
 	case 502:
-		share_name = talloc_strdup(ctx, r->in.info->info502->name);
-		comment = talloc_strdup(ctx, r->in.info->info502->comment);
-		pathname = talloc_strdup(ctx, r->in.info->info502->path);
-		max_connections = (r->in.info->info502->max_users == (uint32_t)-1) ?
-			0 : r->in.info->info502->max_users;
-		type = r->in.info->info502->type;
-		psd = r->in.info->info502->sd_buf.sd;
+		unistr2_to_ascii(share_name, &q_u->info.share.info502.info_502_str.uni_netname, sizeof(share_name));
+		unistr2_to_ascii(comment, &q_u->info.share.info502.info_502_str.uni_remark, sizeof(share_name));
+		unistr2_to_ascii(pathname, &q_u->info.share.info502.info_502_str.uni_path, sizeof(share_name));
+		type = q_u->info.share.info502.info_502.type;
+		psd = q_u->info.share.info502.info_502_str.sd;
 		map_generic_share_sd_bits(psd);
 		break;
 
-		/* none of the following contain share names.  NetShareAdd does not have a separate parameter for the share name */
+		/* none of the following contain share names.  NetShareAdd does not have a separate parameter for the share name */ 
 
 	case 1004:
 	case 1005:
@@ -1738,95 +1714,75 @@
 		/* DFS only level. */
 		return WERR_ACCESS_DENIED;
 	default:
-		DEBUG(5,("_srvsvc_NetShareAdd: unsupported switch value %d\n",
-			r->in.level));
+		DEBUG(5,("_srv_net_share_add: unsupported switch value %d\n", q_u->info_level));
 		return WERR_UNKNOWN_LEVEL;
 	}
 
 	/* check for invalid share names */
 
-	if (!share_name || !validate_net_name(share_name,
-				INVALID_SHARENAME_CHARS,
-				strlen(share_name))) {
-		DEBUG(5,("_srvsvc_NetShareAdd: Bad sharename \"%s\"\n",
-					share_name ? share_name : ""));
+	if ( !validate_net_name( share_name, INVALID_SHARENAME_CHARS, sizeof(share_name) ) ) {
+		DEBUG(5,("_srv_net_name_validate: Bad sharename \"%s\"\n", share_name));
 		return WERR_INVALID_NAME;
 	}
 
-	if (strequal(share_name,"IPC$") || strequal(share_name,"global")
-			|| (lp_enable_asu_support() &&
-					strequal(share_name,"ADMIN$"))) {
+	if ( strequal(share_name,"IPC$") || strequal(share_name,"global")
+		|| ( lp_enable_asu_support() && strequal(share_name,"ADMIN$") ) )
+	{
 		return WERR_ACCESS_DENIED;
 	}
 
 	snum = find_service(share_name);
 
 	/* Share already exists. */
-	if (snum >= 0) {
+	if (snum >= 0)
 		return WERR_ALREADY_EXISTS;
-	}
 
 	/* We can only add disk shares. */
-	if (type != STYPE_DISKTREE) {
+	if (type != STYPE_DISKTREE)
 		return WERR_ACCESS_DENIED;
-	}
-
+		
 	/* Check if the pathname is valid. */
-	if (!(path = valid_share_pathname(p->mem_ctx, pathname))) {
+	if (!(path = valid_share_pathname( pathname )))
 		return WERR_OBJECT_PATH_INVALID;
-	}
 
 	/* Ensure share name, pathname and comment don't contain '"' characters. */
 	string_replace(share_name, '"', ' ');
 	string_replace(path, '"', ' ');
-	if (comment) {
-		string_replace(comment, '"', ' ');
-	}
+	string_replace(comment, '"', ' ');
 
-	command = talloc_asprintf(ctx,
-			"%s \"%s\" \"%s\" \"%s\" \"%s\" %d",
-			lp_add_share_cmd(),
-			get_dyn_CONFIGFILE(),
-			share_name,
-			path,
-			comment ? comment : "",
+	slprintf(command, sizeof(command)-1, "%s \"%s\" \"%s\" \"%s\" \"%s\" %d",
+			lp_add_share_cmd(), 
+			dyn_CONFIGFILE, 
+			share_name, 
+			path, 
+			comment, 
 			max_connections);
-	if (!command) {
-		return WERR_NOMEM;
-	}
-
-	DEBUG(10,("_srvsvc_NetShareAdd: Running [%s]\n", command ));
-
+			
+	DEBUG(10,("_srv_net_share_add: Running [%s]\n", command ));
+	
 	/********* BEGIN SeDiskOperatorPrivilege BLOCK *********/
-
+	
 	if ( is_disk_op )
 		become_root();
 
-	/* FIXME: use libnetconf here - gd */
-
 	if ( (ret = smbrun(command, NULL)) == 0 ) {
 		/* Tell everyone we updated smb.conf. */
-		message_send_all(smbd_messaging_context(),
-				 MSG_SMB_CONF_UPDATED, NULL, 0, NULL);
+		message_send_all(conn_tdb_ctx(), MSG_SMB_CONF_UPDATED, NULL, 0, False, NULL);
 	}
 
 	if ( is_disk_op )
 		unbecome_root();
-
+		
 	/********* END SeDiskOperatorPrivilege BLOCK *********/
 
-	DEBUG(3,("_srvsvc_NetShareAdd: Running [%s] returned (%d)\n",
-		command, ret ));
+	DEBUG(3,("_srv_net_share_add: Running [%s] returned (%d)\n", command, ret ));
 
-	TALLOC_FREE(command);
-
 	if ( ret != 0 )
 		return WERR_ACCESS_DENIED;
 
 	if (psd) {
 		if (!set_share_security(share_name, psd)) {
-			DEBUG(0,("_srvsvc_NetShareAdd: Failed to add security info to share %s.\n",
-				share_name ));
+			DEBUG(0,("_srv_net_share_add: Failed to add security info to share %s.\n", share_name ));
 		}
 	}
 
@@ -1836,47 +1792,42 @@
 	 * from the client. JRA.
 	 */
 
-	DEBUG(5,("_srvsvc_NetShareAdd: %d\n", __LINE__));
+	DEBUG(5,("_srv_net_share_add: %d\n", __LINE__));
 
 	return WERR_OK;
 }
 
 /*******************************************************************
- _srvsvc_NetShareDel
- Call "delete share command" with the share name as
+ Net share delete. Call "delete share command" with the share name as
  a parameter.
 ********************************************************************/
 
-WERROR _srvsvc_NetShareDel(pipes_struct *p,
-			   struct srvsvc_NetShareDel *r)
+WERROR _srv_net_share_del(pipes_struct *p, SRV_Q_NET_SHARE_DEL *q_u, SRV_R_NET_SHARE_DEL *r_u)
 {
 	struct current_user user;
-	char *command = NULL;
-	char *share_name = NULL;
+	pstring command;
+	fstring share_name;
 	int ret;
 	int snum;
 	SE_PRIV se_diskop = SE_DISK_OPERATOR;
-	bool is_disk_op;
-	struct share_params *params;
-	TALLOC_CTX *ctx = p->mem_ctx;
+	BOOL is_disk_op;
+	struct share_params *params;	
 
-	DEBUG(5,("_srvsvc_NetShareDel: %d\n", __LINE__));
+	DEBUG(5,("_srv_net_share_del: %d\n", __LINE__));
 
-	share_name = talloc_strdup(p->mem_ctx, r->in.share_name);
-	if (!share_name) {
-		return WERR_NET_NAME_NOT_FOUND;
-	}
-	if ( strequal(share_name,"IPC$")
+	unistr2_to_ascii(share_name, &q_u->uni_share_name, sizeof(share_name));
+
+	if ( strequal(share_name,"IPC$") 
 		|| ( lp_enable_asu_support() && strequal(share_name,"ADMIN$") )
 		|| strequal(share_name,"global") )
 	{
 		return WERR_ACCESS_DENIED;
 	}
 
-	if (!(params = get_share_params(p->mem_ctx, share_name))) {
-		return WERR_NO_SUCH_SHARE;
-	}
-
+        if (!(params = get_share_params(p->mem_ctx, share_name))) {		
+                return WERR_NO_SUCH_SHARE;
+        }
+	
 	snum = find_service(share_name);
 
 	/* No change to printer shares. */
@@ -1887,80 +1838,61 @@
 
 	is_disk_op = user_has_privileges( p->pipe_user.nt_user_token, &se_diskop );
 
-	if (user.ut.uid != sec_initial_uid()  && !is_disk_op )
+	if (user.ut.uid != sec_initial_uid()  && !is_disk_op ) 
 		return WERR_ACCESS_DENIED;
 
 	if (!lp_delete_share_cmd() || !*lp_delete_share_cmd()) {
-		DEBUG(10,("_srvsvc_NetShareDel: No delete share command\n"));
+		DEBUG(10,("_srv_net_share_del: No delete share command\n"));
 		return WERR_ACCESS_DENIED;
 	}
+		
+	slprintf(command, sizeof(command)-1, "%s \"%s\" \"%s\"",
+			lp_delete_share_cmd(), dyn_CONFIGFILE, lp_servicename(snum));
 
-	command = talloc_asprintf(ctx,
-			"%s \"%s\" \"%s\"",
-			lp_delete_share_cmd(),
-			get_dyn_CONFIGFILE(),
-			lp_servicename(snum));
-	if (!command) {
-		return WERR_NOMEM;
-	}
+	DEBUG(10,("_srv_net_share_del: Running [%s]\n", command ));
 
-	DEBUG(10,("_srvsvc_NetShareDel: Running [%s]\n", command ));
-
 	/********* BEGIN SeDiskOperatorPrivilege BLOCK *********/
-
+	
 	if ( is_disk_op )
 		become_root();
 
 	if ( (ret = smbrun(command, NULL)) == 0 ) {
 		/* Tell everyone we updated smb.conf. */
-		message_send_all(smbd_messaging_context(),
-				 MSG_SMB_CONF_UPDATED, NULL, 0, NULL);
+		message_send_all(conn_tdb_ctx(), MSG_SMB_CONF_UPDATED, NULL, 0, False, NULL);
 	}
 
 	if ( is_disk_op )
 		unbecome_root();
-
+		
 	/********* END SeDiskOperatorPrivilege BLOCK *********/
 
-	DEBUG(3,("_srvsvc_NetShareDel: Running [%s] returned (%d)\n", command, ret ));
+	DEBUG(3,("_srv_net_share_del: Running [%s] returned (%d)\n", command, ret ));
 
 	if ( ret != 0 )
 		return WERR_ACCESS_DENIED;
 
 	/* Delete the SD in the database. */
-	delete_share_security(lp_servicename(params->service));
+	delete_share_security(params);
 
 	lp_killservice(params->service);
 
 	return WERR_OK;
 }
 
-/*******************************************************************
- _srvsvc_NetShareDelSticky
-********************************************************************/
-
-WERROR _srvsvc_NetShareDelSticky(pipes_struct *p,
-				 struct srvsvc_NetShareDelSticky *r)
+WERROR _srv_net_share_del_sticky(pipes_struct *p, SRV_Q_NET_SHARE_DEL *q_u, SRV_R_NET_SHARE_DEL *r_u)
 {
-	struct srvsvc_NetShareDel q;
+	DEBUG(5,("_srv_net_share_del_stick: %d\n", __LINE__));
 
-	DEBUG(5,("_srvsvc_NetShareDelSticky: %d\n", __LINE__));
-
-	q.in.server_unc		= r->in.server_unc;
-	q.in.share_name		= r->in.share_name;
-	q.in.reserved		= r->in.reserved;
-
-	return _srvsvc_NetShareDel(p, &q);
+	return _srv_net_share_del(p, q_u, r_u);
 }
 
 /*******************************************************************
- _srvsvc_NetRemoteTOD
+time of day
 ********************************************************************/
 
-WERROR _srvsvc_NetRemoteTOD(pipes_struct *p,
-			    struct srvsvc_NetRemoteTOD *r)
+WERROR _srv_net_remote_tod(pipes_struct *p, SRV_Q_NET_REMOTE_TOD *q_u, SRV_R_NET_REMOTE_TOD *r_u)
 {
-	struct srvsvc_NetRemoteTODInfo *tod;
+	TIME_OF_DAY_INFO *tod;
 	struct tm *t;
 	time_t unixdate = time(NULL);
 
@@ -1969,72 +1901,66 @@
 
 	uint32 zone = get_time_zone(unixdate)/60;
 
-	DEBUG(5,("_srvsvc_NetRemoteTOD: %d\n", __LINE__));
+	DEBUG(5,("_srv_net_remote_tod: %d\n", __LINE__));
 
-	if ( !(tod = TALLOC_ZERO_P(p->mem_ctx, struct srvsvc_NetRemoteTODInfo)) )
+	if ( !(tod = TALLOC_ZERO_P(p->mem_ctx, TIME_OF_DAY_INFO)) )
 		return WERR_NOMEM;
 
-	*r->out.info = tod;
+	r_u->tod = tod;
+	r_u->ptr_srv_tod = 0x1;
+	r_u->status = WERR_OK;
 
-	DEBUG(5,("_srvsvc_NetRemoteTOD: %d\n", __LINE__));
+	DEBUG(5,("_srv_net_remote_tod: %d\n", __LINE__));
 
 	t = gmtime(&unixdate);
 
 	/* set up the */
-	init_srvsvc_NetRemoteTODInfo(tod,
-				     unixdate,
-				     0,
-				     t->tm_hour,
-				     t->tm_min,
-				     t->tm_sec,
-				     0,
-				     zone,
-				     10000,
-				     t->tm_mday,
-				     t->tm_mon + 1,
-				     1900+t->tm_year,
-				     t->tm_wday);
+	init_time_of_day_info(tod,
+	                      unixdate,
+	                      0,
+	                      t->tm_hour,
+	                      t->tm_min,
+	                      t->tm_sec,
+	                      0,
+	                      zone,
+	                      10000,
+	                      t->tm_mday,
+	                      t->tm_mon + 1,
+	                      1900+t->tm_year,
+	                      t->tm_wday);
+	
+	DEBUG(5,("_srv_net_remote_tod: %d\n", __LINE__));
 
-	DEBUG(5,("_srvsvc_NetRemoteTOD: %d\n", __LINE__));
-
-	return WERR_OK;
+	return r_u->status;
 }
 
 /***********************************************************************************
- _srvsvc_NetGetFileSecurity
  Win9x NT tools get security descriptor.
 ***********************************************************************************/
 
-WERROR _srvsvc_NetGetFileSecurity(pipes_struct *p,
-				  struct srvsvc_NetGetFileSecurity *r)
+WERROR _srv_net_file_query_secdesc(pipes_struct *p, SRV_Q_NET_FILE_QUERY_SECDESC *q_u,
+			SRV_R_NET_FILE_QUERY_SECDESC *r_u)
 {
 	SEC_DESC *psd = NULL;
 	size_t sd_size;
 	DATA_BLOB null_pw;
-	char *filename_in = NULL;
-	char *filename = NULL;
-	char *qualname = NULL;
+	pstring filename;
+	pstring qualname;
+	files_struct *fsp = NULL;
 	SMB_STRUCT_STAT st;
 	NTSTATUS nt_status;
-	WERROR werr;
 	struct current_user user;
 	connection_struct *conn = NULL;
-	bool became_user = False;
-	TALLOC_CTX *ctx = p->mem_ctx;
-	struct sec_desc_buf *sd_buf;
+	BOOL became_user = False; 
 
 	ZERO_STRUCT(st);
 
-	werr = WERR_OK;
+	r_u->status = WERR_OK;
 
-	qualname = talloc_strdup(ctx, r->in.share);
-	if (!qualname) {
-		werr = WERR_ACCESS_DENIED;
-		goto error_exit;
-	}
+	unistr2_to_ascii(qualname, &q_u->uni_qual_name, sizeof(qualname));
 
 	/* Null password is ok - we are already an authenticated user... */
-	null_pw = data_blob_null;
+	null_pw = data_blob(NULL, 0);
 
 	get_current_user(&user, p);
 
@@ -2043,116 +1969,114 @@
 	unbecome_root();
 
 	if (conn == NULL) {
-		DEBUG(3,("_srvsvc_NetGetFileSecurity: Unable to connect to %s\n",
-			qualname));
-		werr = ntstatus_to_werror(nt_status);
+		DEBUG(3,("_srv_net_file_query_secdesc: Unable to connect to %s\n", qualname));
+		r_u->status = ntstatus_to_werror(nt_status);
 		goto error_exit;
 	}
 
 	if (!become_user(conn, conn->vuid)) {
-		DEBUG(0,("_srvsvc_NetGetFileSecurity: Can't become connected user!\n"));
-		werr = WERR_ACCESS_DENIED;
+		DEBUG(0,("_srv_net_file_query_secdesc: Can't become connected user!\n"));
+		r_u->status = WERR_ACCESS_DENIED;
 		goto error_exit;
 	}
 	became_user = True;
 
-	filename_in = talloc_strdup(ctx, r->in.file);
-	if (!filename_in) {
-		werr = WERR_ACCESS_DENIED;
-		goto error_exit;
-	}
-
-	nt_status = unix_convert(ctx, conn, filename_in, False, &filename, NULL, &st);
+	unistr2_to_ascii(filename, &q_u->uni_file_name, sizeof(filename));
+	nt_status = unix_convert(conn, filename, False, NULL, &st);
 	if (!NT_STATUS_IS_OK(nt_status)) {
-		DEBUG(3,("_srvsvc_NetGetFileSecurity: bad pathname %s\n",
-			filename));
-		werr = WERR_ACCESS_DENIED;
+		DEBUG(3,("_srv_net_file_query_secdesc: bad pathname %s\n", filename));
+		r_u->status = WERR_ACCESS_DENIED;
 		goto error_exit;
 	}
 
 	nt_status = check_name(conn, filename);
 	if (!NT_STATUS_IS_OK(nt_status)) {
-		DEBUG(3,("_srvsvc_NetGetFileSecurity: can't access %s\n",
-			filename));
-		werr = WERR_ACCESS_DENIED;
+		DEBUG(3,("_srv_net_file_query_secdesc: can't access %s\n", filename));
+		r_u->status = WERR_ACCESS_DENIED;
 		goto error_exit;
 	}
 
-	nt_status = SMB_VFS_GET_NT_ACL(conn, filename,
-				       (OWNER_SECURITY_INFORMATION
-					|GROUP_SECURITY_INFORMATION
-					|DACL_SECURITY_INFORMATION), &psd);
+	nt_status = open_file_stat(conn, filename, &st, &fsp);
+	if ( !NT_STATUS_IS_OK(nt_status)) {
+		/* Perhaps it is a directory */
+		if (errno == EISDIR)
+			nt_status = open_directory(conn, filename, &st,
+					READ_CONTROL_ACCESS,
+					FILE_SHARE_READ|FILE_SHARE_WRITE,
+					FILE_OPEN,
+					0,
+					FILE_ATTRIBUTE_DIRECTORY,
+					NULL, &fsp);
 
-	if (!NT_STATUS_IS_OK(nt_status)) {
-		DEBUG(3,("_srvsvc_NetGetFileSecurity: Unable to get NT ACL for file %s\n",
-			filename));
-		werr = ntstatus_to_werror(nt_status);
-		goto error_exit;
+		if (!NT_STATUS_IS_OK(nt_status)) {
+			DEBUG(3,("_srv_net_file_query_secdesc: Unable to open file %s\n", filename));
+			r_u->status = ntstatus_to_werror(nt_status);
+			goto error_exit;
+		}
 	}
 
-	sd_size = ndr_size_security_descriptor(psd, 0);
+	sd_size = SMB_VFS_GET_NT_ACL(fsp, fsp->fsp_name, (OWNER_SECURITY_INFORMATION|GROUP_SECURITY_INFORMATION|DACL_SECURITY_INFORMATION), &psd);
 
-	sd_buf = TALLOC_ZERO_P(ctx, struct sec_desc_buf);
-	if (!sd_buf) {
-		werr = WERR_NOMEM;
+	if (sd_size == 0) {
+		DEBUG(3,("_srv_net_file_query_secdesc: Unable to get NT ACL for file %s\n", filename));
+		r_u->status = WERR_ACCESS_DENIED;
 		goto error_exit;
 	}
 
-	sd_buf->sd_size = sd_size;
-	sd_buf->sd = psd;
+	r_u->ptr_response = 1;
+	r_u->size_response = sd_size;
+	r_u->ptr_secdesc = 1;
+	r_u->size_secdesc = sd_size;
+	r_u->sec_desc = psd;
 
-	*r->out.sd_buf = sd_buf;
+	psd->dacl->revision = (uint16) NT4_ACL_REVISION;
 
-	psd->dacl->revision = NT4_ACL_REVISION;
-
+	close_file(fsp, NORMAL_CLOSE);
 	unbecome_user();
 	close_cnum(conn, user.vuid);
-	return werr;
+	return r_u->status;
 
 error_exit:
 
+	if(fsp) {
+		close_file(fsp, NORMAL_CLOSE);
+	}
+
 	if (became_user)
 		unbecome_user();
 
-	if (conn)
+	if (conn) 
 		close_cnum(conn, user.vuid);
 
-	return werr;
+	return r_u->status;
 }
 
 /***********************************************************************************
- _srvsvc_NetSetFileSecurity
  Win9x NT tools set security descriptor.
 ***********************************************************************************/
 
-WERROR _srvsvc_NetSetFileSecurity(pipes_struct *p,
-				  struct srvsvc_NetSetFileSecurity *r)
+WERROR _srv_net_file_set_secdesc(pipes_struct *p, SRV_Q_NET_FILE_SET_SECDESC *q_u,
+									SRV_R_NET_FILE_SET_SECDESC *r_u)
 {
-	char *filename_in = NULL;
-	char *filename = NULL;
-	char *qualname = NULL;
+	BOOL ret;
+	pstring filename;
+	pstring qualname;
 	DATA_BLOB null_pw;
 	files_struct *fsp = NULL;
 	SMB_STRUCT_STAT st;
 	NTSTATUS nt_status;
-	WERROR werr;
 	struct current_user user;
 	connection_struct *conn = NULL;
-	bool became_user = False;
-	TALLOC_CTX *ctx = p->mem_ctx;
+	BOOL became_user = False;
 
 	ZERO_STRUCT(st);
 
-	werr = WERR_OK;
+	r_u->status = WERR_OK;
 
-	qualname = talloc_strdup(ctx, r->in.share);
-	if (!qualname) {
-		werr = WERR_ACCESS_DENIED;
-		goto error_exit;
-	}
+	unistr2_to_ascii(qualname, &q_u->uni_qual_name, sizeof(qualname));
 
 	/* Null password is ok - we are already an authenticated user... */
-	null_pw = data_blob_null;
+	null_pw = data_blob(NULL, 0);
 
 	get_current_user(&user, p);
 
@@ -2161,44 +2085,40 @@
 	unbecome_root();
 
 	if (conn == NULL) {
-		DEBUG(3,("_srvsvc_NetSetFileSecurity: Unable to connect to %s\n", qualname));
-		werr = ntstatus_to_werror(nt_status);
+		DEBUG(3,("_srv_net_file_set_secdesc: Unable to connect to %s\n", qualname));
+		r_u->status = ntstatus_to_werror(nt_status);
 		goto error_exit;
 	}
 
 	if (!become_user(conn, conn->vuid)) {
-		DEBUG(0,("_srvsvc_NetSetFileSecurity: Can't become connected user!\n"));
-		werr = WERR_ACCESS_DENIED;
+		DEBUG(0,("_srv_net_file_set_secdesc: Can't become connected user!\n"));
+		r_u->status = WERR_ACCESS_DENIED;
 		goto error_exit;
 	}
 	became_user = True;
 
-	filename_in = talloc_strdup(ctx, r->in.file);
-	if (!filename_in) {
-		werr = WERR_ACCESS_DENIED;
-		goto error_exit;
-	}
-
-	nt_status = unix_convert(ctx, conn, filename, False, &filename, NULL, &st);
+	unistr2_to_ascii(filename, &q_u->uni_file_name, sizeof(filename));
+	nt_status = unix_convert(conn, filename, False, NULL, &st);
 	if (!NT_STATUS_IS_OK(nt_status)) {
-		DEBUG(3,("_srvsvc_NetSetFileSecurity: bad pathname %s\n", filename));
-		werr = WERR_ACCESS_DENIED;
+		DEBUG(3,("_srv_net_file_set_secdesc: bad pathname %s\n", filename));
+		r_u->status = WERR_ACCESS_DENIED;
 		goto error_exit;
 	}
 
 	nt_status = check_name(conn, filename);
 	if (!NT_STATUS_IS_OK(nt_status)) {
-		DEBUG(3,("_srvsvc_NetSetFileSecurity: can't access %s\n", filename));
-		werr = WERR_ACCESS_DENIED;
+		DEBUG(3,("_srv_net_file_set_secdesc: can't access %s\n", filename));
+		r_u->status = WERR_ACCESS_DENIED;
 		goto error_exit;
 	}
 
-	nt_status = open_file_stat(conn, NULL, filename, &st, &fsp);
 
+	nt_status = open_file_stat(conn, filename, &st, &fsp);
+
 	if ( !NT_STATUS_IS_OK(nt_status) ) {
 		/* Perhaps it is a directory */
-		if (NT_STATUS_EQUAL(nt_status, NT_STATUS_FILE_IS_A_DIRECTORY))
-			nt_status = open_directory(conn, NULL, filename, &st,
+		if (errno == EISDIR)
+			nt_status = open_directory(conn, filename, &st,
 						FILE_READ_ATTRIBUTES,
 						FILE_SHARE_READ|FILE_SHARE_WRITE,
 						FILE_OPEN,
@@ -2207,26 +2127,24 @@
 						NULL, &fsp);
 
 		if ( !NT_STATUS_IS_OK(nt_status) ) {
-			DEBUG(3,("_srvsvc_NetSetFileSecurity: Unable to open file %s\n", filename));
-			werr = ntstatus_to_werror(nt_status);
+			DEBUG(3,("_srv_net_file_set_secdesc: Unable to open file %s\n", filename));
+			r_u->status = ntstatus_to_werror(nt_status);
 			goto error_exit;
 		}
 	}
 
-	nt_status = SMB_VFS_SET_NT_ACL(fsp, fsp->fsp_name,
-				       r->in.securityinformation,
-				       r->in.sd_buf->sd);
+	ret = SMB_VFS_SET_NT_ACL(fsp, fsp->fsp_name, q_u->sec_info, q_u->sec_desc);
 
-	if (!NT_STATUS_IS_OK(nt_status) ) {
-		DEBUG(3,("_srvsvc_NetSetFileSecurity: Unable to set NT ACL on file %s\n", filename));
-		werr = WERR_ACCESS_DENIED;
+	if (ret == False) {
+		DEBUG(3,("_srv_net_file_set_secdesc: Unable to set NT ACL on file %s\n", filename));
+		r_u->status = WERR_ACCESS_DENIED;
 		goto error_exit;
 	}
 
 	close_file(fsp, NORMAL_CLOSE);
 	unbecome_user();
 	close_cnum(conn, user.vuid);
-	return werr;
+	return r_u->status;
 
 error_exit:
 
@@ -2242,7 +2160,7 @@
 		close_cnum(conn, user.vuid);
 	}
 
-	return werr;
+	return r_u->status;
 }
 
 /***********************************************************************************
@@ -2291,67 +2209,59 @@
 	return disk;
 }
 
-/********************************************************************
- _srvsvc_NetDiskEnum
-********************************************************************/
-
-WERROR _srvsvc_NetDiskEnum(pipes_struct *p,
-			   struct srvsvc_NetDiskEnum *r)
+WERROR _srv_net_disk_enum(pipes_struct *p, SRV_Q_NET_DISK_ENUM *q_u, SRV_R_NET_DISK_ENUM *r_u)
 {
 	uint32 i;
 	const char *disk_name;
 	TALLOC_CTX *ctx = p->mem_ctx;
-	WERROR werr;
-	uint32_t resume = r->in.resume_handle ? *r->in.resume_handle : 0;
+	uint32 resume=get_enum_hnd(&q_u->enum_hnd);
 
-	werr = WERR_OK;
+	r_u->status=WERR_OK;
 
-	*r->out.totalentries = init_server_disk_enum(&resume);
+	r_u->total_entries = init_server_disk_enum(&resume);
 
-	r->out.info->disks = TALLOC_ZERO_ARRAY(ctx, struct srvsvc_NetDiskInfo0,
-					       MAX_SERVER_DISK_ENTRIES);
-	W_ERROR_HAVE_NO_MEMORY(r->out.info->disks);
+	r_u->disk_enum_ctr.unknown = 0; 
 
-	/*allow one struct srvsvc_NetDiskInfo0 for null terminator*/
+	if(!(r_u->disk_enum_ctr.disk_info =  TALLOC_ARRAY(ctx, DISK_INFO, MAX_SERVER_DISK_ENTRIES))) {
+		return WERR_NOMEM;
+	}
 
+	r_u->disk_enum_ctr.disk_info_ptr = r_u->disk_enum_ctr.disk_info ? 1 : 0;
+
+	/*allow one DISK_INFO for null terminator*/
+
 	for(i = 0; i < MAX_SERVER_DISK_ENTRIES -1 && (disk_name = next_server_disk_enum(&resume)); i++) {
 
-		r->out.info->count++;
+		r_u->disk_enum_ctr.entries_read++;
 
 		/*copy disk name into a unicode string*/
 
-		r->out.info->disks[i].disk = talloc_strdup(ctx, disk_name);
-		W_ERROR_HAVE_NO_MEMORY(r->out.info->disks[i].disk);
+		init_unistr3(&r_u->disk_enum_ctr.disk_info[i].disk_name, disk_name);    
 	}
 
 	/* add a terminating null string.  Is this there if there is more data to come? */
 
-	r->out.info->count++;
+	r_u->disk_enum_ctr.entries_read++;
 
-	r->out.info->disks[i].disk = talloc_strdup(ctx, "");
-	W_ERROR_HAVE_NO_MEMORY(r->out.info->disks[i].disk);
+	init_unistr3(&r_u->disk_enum_ctr.disk_info[i].disk_name, "");
 
-	if (r->out.resume_handle) {
-		*r->out.resume_handle = resume;
-	}
+	init_enum_hnd(&r_u->enum_hnd, resume);
 
-	return werr;
+	return r_u->status;
 }
 
 /********************************************************************
- _srvsvc_NetNameValidate
 ********************************************************************/
 
-WERROR _srvsvc_NetNameValidate(pipes_struct *p,
-			       struct srvsvc_NetNameValidate *r)
+WERROR _srv_net_name_validate(pipes_struct *p, SRV_Q_NET_NAME_VALIDATE *q_u, SRV_R_NET_NAME_VALIDATE *r_u)
 {
-	switch (r->in.name_type) {
+	fstring sharename;
+
+	switch ( q_u->type ) {
 	case 0x9:
-		if (!validate_net_name(r->in.name, INVALID_SHARENAME_CHARS,
-				       strlen_m(r->in.name)))
-		{
-			DEBUG(5,("_srvsvc_NetNameValidate: Bad sharename \"%s\"\n",
-				r->in.name));
+		rpcstr_pull(sharename, q_u->sharename.buffer, sizeof(sharename), q_u->sharename.uni_str_len*2, 0);
+		if ( !validate_net_name( sharename, INVALID_SHARENAME_CHARS, sizeof(sharename) ) ) {
+			DEBUG(5,("_srv_net_name_validate: Bad sharename \"%s\"\n", sharename));
 			return WERR_INVALID_NAME;
 		}
 		break;
@@ -2363,278 +2273,12 @@
 	return WERR_OK;
 }
 
-/*******************************************************************
-********************************************************************/
 
-static void enum_file_close_fn( const struct share_mode_entry *e,
-                          const char *sharepath, const char *fname,
-			  void *private_data )
-{
-	char msg[MSG_SMB_SHARE_MODE_ENTRY_SIZE];
-	struct srvsvc_NetFileClose *r =
- 		(struct srvsvc_NetFileClose *)private_data;
-	uint32_t fid = (((uint32_t)(procid_to_pid(&e->pid))<<16) | e->share_file_id);
-
-	if (fid != r->in.fid) {
-		return; /* Not this file. */
-	}
-
-	if (!process_exists(e->pid) ) {
-		return;
-	}
-
-	/* Ok - send the close message. */
-	DEBUG(10,("enum_file_close_fn: request to close file %s, %s\n",
-		sharepath,
-		share_mode_str(talloc_tos(), 0, e) ));
-
-	share_mode_entry_to_message(msg, e);
-
-	r->out.result = ntstatus_to_werror(
-			messaging_send_buf(smbd_messaging_context(),
-				e->pid, MSG_SMB_CLOSE_FILE,
-				(uint8 *)msg,
-				MSG_SMB_SHARE_MODE_ENTRY_SIZE));
-}
-
 /********************************************************************
- Close a file given a 32-bit file id.
 ********************************************************************/
 
-WERROR _srvsvc_NetFileClose(pipes_struct *p, struct srvsvc_NetFileClose *r)
+WERROR _srv_net_file_close(pipes_struct *p, SRV_Q_NET_FILE_CLOSE *q_u, SRV_R_NET_FILE_CLOSE *r_u)
 {
-	struct current_user user;
-	SE_PRIV se_diskop = SE_DISK_OPERATOR;
-	bool is_disk_op;
-
-	DEBUG(5,("_srvsvc_NetFileClose: %d\n", __LINE__));
-
-	get_current_user(&user,p);
-
-	is_disk_op = user_has_privileges( p->pipe_user.nt_user_token, &se_diskop );
-
-	if (user.ut.uid != sec_initial_uid() && !is_disk_op) {
-		return WERR_ACCESS_DENIED;
-	}
-
-	/* enum_file_close_fn sends the close message to
-	 * the relevent smbd process. */
-
-	r->out.result = WERR_BADFILE;
-	share_mode_forall( enum_file_close_fn, (void *)r);
-	return r->out.result;
+	return WERR_ACCESS_DENIED;
 }
 
-/********************************************************************
-********************************************************************/
-
-WERROR _srvsvc_NetCharDevEnum(pipes_struct *p, struct srvsvc_NetCharDevEnum *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NetCharDevGetInfo(pipes_struct *p, struct srvsvc_NetCharDevGetInfo *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NetCharDevControl(pipes_struct *p, struct srvsvc_NetCharDevControl *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NetCharDevQEnum(pipes_struct *p, struct srvsvc_NetCharDevQEnum *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NetCharDevQGetInfo(pipes_struct *p, struct srvsvc_NetCharDevQGetInfo *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NetCharDevQSetInfo(pipes_struct *p, struct srvsvc_NetCharDevQSetInfo *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NetCharDevQPurge(pipes_struct *p, struct srvsvc_NetCharDevQPurge *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NetCharDevQPurgeSelf(pipes_struct *p, struct srvsvc_NetCharDevQPurgeSelf *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NetFileGetInfo(pipes_struct *p, struct srvsvc_NetFileGetInfo *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NetShareCheck(pipes_struct *p, struct srvsvc_NetShareCheck *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NetServerStatisticsGet(pipes_struct *p, struct srvsvc_NetServerStatisticsGet *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NetTransportAdd(pipes_struct *p, struct srvsvc_NetTransportAdd *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NetTransportEnum(pipes_struct *p, struct srvsvc_NetTransportEnum *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NetTransportDel(pipes_struct *p, struct srvsvc_NetTransportDel *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NetSetServiceBits(pipes_struct *p, struct srvsvc_NetSetServiceBits *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NetPathType(pipes_struct *p, struct srvsvc_NetPathType *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NetPathCanonicalize(pipes_struct *p, struct srvsvc_NetPathCanonicalize *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NetPathCompare(pipes_struct *p, struct srvsvc_NetPathCompare *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NETRPRNAMECANONICALIZE(pipes_struct *p, struct srvsvc_NETRPRNAMECANONICALIZE *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NetPRNameCompare(pipes_struct *p, struct srvsvc_NetPRNameCompare *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NetShareDelStart(pipes_struct *p, struct srvsvc_NetShareDelStart *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NetShareDelCommit(pipes_struct *p, struct srvsvc_NetShareDelCommit *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NetServerTransportAddEx(pipes_struct *p, struct srvsvc_NetServerTransportAddEx *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NetServerSetServiceBitsEx(pipes_struct *p, struct srvsvc_NetServerSetServiceBitsEx *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NETRDFSGETVERSION(pipes_struct *p, struct srvsvc_NETRDFSGETVERSION *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NETRDFSCREATELOCALPARTITION(pipes_struct *p, struct srvsvc_NETRDFSCREATELOCALPARTITION *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NETRDFSDELETELOCALPARTITION(pipes_struct *p, struct srvsvc_NETRDFSDELETELOCALPARTITION *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NETRDFSSETLOCALVOLUMESTATE(pipes_struct *p, struct srvsvc_NETRDFSSETLOCALVOLUMESTATE *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NETRDFSSETSERVERINFO(pipes_struct *p, struct srvsvc_NETRDFSSETSERVERINFO *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NETRDFSCREATEEXITPOINT(pipes_struct *p, struct srvsvc_NETRDFSCREATEEXITPOINT *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NETRDFSDELETEEXITPOINT(pipes_struct *p, struct srvsvc_NETRDFSDELETEEXITPOINT *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NETRDFSMODIFYPREFIX(pipes_struct *p, struct srvsvc_NETRDFSMODIFYPREFIX *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NETRDFSFIXLOCALVOLUME(pipes_struct *p, struct srvsvc_NETRDFSFIXLOCALVOLUME *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NETRDFSMANAGERREPORTSITEINFO(pipes_struct *p, struct srvsvc_NETRDFSMANAGERREPORTSITEINFO *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _srvsvc_NETRSERVERTRANSPORTDELEX(pipes_struct *p, struct srvsvc_NETRSERVERTRANSPORTDELEX *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-

Modified: branches/samba/upstream/source/rpc_server/srv_svcctl.c
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_svcctl.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_server/srv_svcctl.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,11 +1,11 @@
 /* 
  *  Unix SMB/CIFS implementation.
  *  RPC Pipe client / server routines
- *  Copyright (C) Gerald Carter                   2005 - 2007
+ *  Copyright (C) Gerald Carter                   2005.
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -22,68 +23,130 @@
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_SRV
 
-static bool proxy_svcctl_call(pipes_struct *p, uint8 opnum)
+/*******************************************************************
+ ********************************************************************/
+
+static BOOL api_svcctl_close_service(pipes_struct *p)
 {
-	struct api_struct *fns;
-	int n_fns;
+	SVCCTL_Q_CLOSE_SERVICE q_u;
+	SVCCTL_R_CLOSE_SERVICE r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
 
-	svcctl_get_pipe_fns(&fns, &n_fns);
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
 
-	if (opnum >= n_fns)
+	if(!svcctl_io_q_close_service("", &q_u, data, 0))
 		return False;
 
-	if (fns[opnum].opnum != opnum) {
-		smb_panic("SVCCTL function table not sorted\n");
-	}
+	r_u.status = _svcctl_close_service(p, &q_u, &r_u);
 
-	return fns[opnum].fn(p);
+	if(!svcctl_io_r_close_service("", &r_u, rdata, 0))
+		return False;
+
+	return True;
 }
 
-
 /*******************************************************************
  ********************************************************************/
 
-static bool api_svcctl_close_service(pipes_struct *p)
+static BOOL api_svcctl_open_scmanager(pipes_struct *p)
 {
-	return proxy_svcctl_call( p, NDR_SVCCTL_CLOSESERVICEHANDLE );
+	SVCCTL_Q_OPEN_SCMANAGER q_u;
+	SVCCTL_R_OPEN_SCMANAGER r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!svcctl_io_q_open_scmanager("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _svcctl_open_scmanager(p, &q_u, &r_u);
+
+	if(!svcctl_io_r_open_scmanager("", &r_u, rdata, 0))
+		return False;
+
+	return True;
 }
 
 /*******************************************************************
  ********************************************************************/
 
-static bool api_svcctl_open_scmanager(pipes_struct *p)
+static BOOL api_svcctl_open_service(pipes_struct *p)
 {
-	return proxy_svcctl_call(p, NDR_SVCCTL_OPENSCMANAGERW);
+	SVCCTL_Q_OPEN_SERVICE q_u;
+	SVCCTL_R_OPEN_SERVICE r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!svcctl_io_q_open_service("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _svcctl_open_service(p, &q_u, &r_u);
+
+	if(!svcctl_io_r_open_service("", &r_u, rdata, 0))
+		return False;
+
+	return True;
 }
 
 /*******************************************************************
  ********************************************************************/
 
-static bool api_svcctl_open_service(pipes_struct *p)
+static BOOL api_svcctl_get_display_name(pipes_struct *p)
 {
-	return proxy_svcctl_call(p, NDR_SVCCTL_OPENSERVICEW);
+	SVCCTL_Q_GET_DISPLAY_NAME q_u;
+	SVCCTL_R_GET_DISPLAY_NAME r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!svcctl_io_q_get_display_name("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _svcctl_get_display_name(p, &q_u, &r_u);
+
+	if(!svcctl_io_r_get_display_name("", &r_u, rdata, 0))
+		return False;
+
+	return True;
 }
 
 /*******************************************************************
  ********************************************************************/
 
-static bool api_svcctl_get_display_name(pipes_struct *p)
+static BOOL api_svcctl_query_status(pipes_struct *p)
 {
-	return proxy_svcctl_call(p, NDR_SVCCTL_GETSERVICEDISPLAYNAMEW);
-}
+	SVCCTL_Q_QUERY_STATUS q_u;
+	SVCCTL_R_QUERY_STATUS r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
 
-/*******************************************************************
- ********************************************************************/
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
 
-static bool api_svcctl_query_status(pipes_struct *p)
-{
-	return proxy_svcctl_call(p, NDR_SVCCTL_QUERYSERVICESTATUS);
+	if(!svcctl_io_q_query_status("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _svcctl_query_status(p, &q_u, &r_u);
+
+	if(!svcctl_io_r_query_status("", &r_u, rdata, 0))
+		return False;
+
+	return True;
 }
 
 /*******************************************************************
  ********************************************************************/
 
-static bool api_svcctl_enum_services_status(pipes_struct *p)
+static BOOL api_svcctl_enum_services_status(pipes_struct *p)
 {
 	SVCCTL_Q_ENUM_SERVICES_STATUS q_u;
 	SVCCTL_R_ENUM_SERVICES_STATUS r_u;
@@ -106,7 +169,7 @@
 /*******************************************************************
  ********************************************************************/
 
-static bool api_svcctl_query_service_status_ex(pipes_struct *p)
+static BOOL api_svcctl_query_service_status_ex(pipes_struct *p)
 {
 	SVCCTL_Q_QUERY_SERVICE_STATUSEX q_u;
 	SVCCTL_R_QUERY_SERVICE_STATUSEX r_u;
@@ -129,7 +192,7 @@
 /*******************************************************************
  ********************************************************************/
 
-static bool api_svcctl_enum_dependent_services(pipes_struct *p)
+static BOOL api_svcctl_enum_dependent_services(pipes_struct *p)
 {
 	SVCCTL_Q_ENUM_DEPENDENT_SERVICES q_u;
 	SVCCTL_R_ENUM_DEPENDENT_SERVICES r_u;
@@ -153,23 +216,55 @@
 /*******************************************************************
  ********************************************************************/
 
-static bool api_svcctl_start_service(pipes_struct *p)
+static BOOL api_svcctl_start_service(pipes_struct *p)
 {
-	return proxy_svcctl_call(p, NDR_SVCCTL_STARTSERVICEW);
+	SVCCTL_Q_START_SERVICE q_u;
+	SVCCTL_R_START_SERVICE r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!svcctl_io_q_start_service("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _svcctl_start_service(p, &q_u, &r_u);
+
+	if(!svcctl_io_r_start_service("", &r_u, rdata, 0))
+		return False;
+
+	return True;
 }
 
 /*******************************************************************
  ********************************************************************/
 
-static bool api_svcctl_control_service(pipes_struct *p)
+static BOOL api_svcctl_control_service(pipes_struct *p)
 {
-	return proxy_svcctl_call(p, NDR_SVCCTL_CONTROLSERVICE);
+	SVCCTL_Q_CONTROL_SERVICE q_u;
+	SVCCTL_R_CONTROL_SERVICE r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!svcctl_io_q_control_service("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _svcctl_control_service(p, &q_u, &r_u);
+
+	if(!svcctl_io_r_control_service("", &r_u, rdata, 0))
+		return False;
+
+	return True;
 }
 
 /*******************************************************************
  ********************************************************************/
 
-static bool api_svcctl_query_service_config(pipes_struct *p)
+static BOOL api_svcctl_query_service_config(pipes_struct *p)
 {
 	SVCCTL_Q_QUERY_SERVICE_CONFIG q_u;
 	SVCCTL_R_QUERY_SERVICE_CONFIG r_u;
@@ -193,7 +288,7 @@
 /*******************************************************************
  ********************************************************************/
 
-static bool api_svcctl_query_service_config2(pipes_struct *p)
+static BOOL api_svcctl_query_service_config2(pipes_struct *p)
 {
 	SVCCTL_Q_QUERY_SERVICE_CONFIG2 q_u;
 	SVCCTL_R_QUERY_SERVICE_CONFIG2 r_u;
@@ -217,34 +312,98 @@
 /*******************************************************************
  ********************************************************************/
 
-static bool api_svcctl_lock_service_db(pipes_struct *p)
+static BOOL api_svcctl_lock_service_db(pipes_struct *p)
 {
-	return proxy_svcctl_call(p, NDR_SVCCTL_LOCKSERVICEDATABASE);
+	SVCCTL_Q_LOCK_SERVICE_DB q_u;
+	SVCCTL_R_LOCK_SERVICE_DB r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!svcctl_io_q_lock_service_db("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _svcctl_lock_service_db(p, &q_u, &r_u);
+
+	if(!svcctl_io_r_lock_service_db("", &r_u, rdata, 0))
+		return False;
+
+	return True;
 }
 
 
 /*******************************************************************
  ********************************************************************/
 
-static bool api_svcctl_unlock_service_db(pipes_struct *p)
+static BOOL api_svcctl_unlock_service_db(pipes_struct *p)
 {
-	return proxy_svcctl_call(p, NDR_SVCCTL_UNLOCKSERVICEDATABASE);
+	SVCCTL_Q_UNLOCK_SERVICE_DB q_u;
+	SVCCTL_R_UNLOCK_SERVICE_DB r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!svcctl_io_q_unlock_service_db("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _svcctl_unlock_service_db(p, &q_u, &r_u);
+
+	if(!svcctl_io_r_unlock_service_db("", &r_u, rdata, 0))
+		return False;
+
+	return True;
 }
 
 /*******************************************************************
  ********************************************************************/
 
-static bool api_svcctl_query_security_sec(pipes_struct *p)
+static BOOL api_svcctl_query_security_sec(pipes_struct *p)
 {
-	return proxy_svcctl_call(p, NDR_SVCCTL_QUERYSERVICEOBJECTSECURITY);
+	SVCCTL_Q_QUERY_SERVICE_SEC q_u;
+	SVCCTL_R_QUERY_SERVICE_SEC r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!svcctl_io_q_query_service_sec("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _svcctl_query_service_sec(p, &q_u, &r_u);
+
+	if(!svcctl_io_r_query_service_sec("", &r_u, rdata, 0))
+		return False;
+
+	return True;
 }
 
 /*******************************************************************
  ********************************************************************/
 
-static bool api_svcctl_set_security_sec(pipes_struct *p)
+static BOOL api_svcctl_set_security_sec(pipes_struct *p)
 {
-	return proxy_svcctl_call(p, NDR_SVCCTL_SETSERVICEOBJECTSECURITY);
+	SVCCTL_Q_SET_SERVICE_SEC q_u;
+	SVCCTL_R_SET_SERVICE_SEC r_u;
+	prs_struct *data = &p->in_data.data;
+	prs_struct *rdata = &p->out_data.rdata;
+
+	ZERO_STRUCT(q_u);
+	ZERO_STRUCT(r_u);
+
+	if(!svcctl_io_q_set_service_sec("", &q_u, data, 0))
+		return False;
+
+	r_u.status = _svcctl_set_service_sec(p, &q_u, &r_u);
+
+	if(!svcctl_io_r_set_service_sec("", &r_u, rdata, 0))
+		return False;
+
+	return True;
 }
 
 
@@ -273,15 +432,14 @@
 };
 
 
-void svcctl2_get_pipe_fns( struct api_struct **fns, int *n_fns )
+void svcctl_get_pipe_fns( struct api_struct **fns, int *n_fns )
 {
-        *fns = api_svcctl_cmds;
+	*fns = api_svcctl_cmds;
 	*n_fns = sizeof(api_svcctl_cmds) / sizeof(struct api_struct);
 }
 
-NTSTATUS rpc_svcctl2_init(void)
+NTSTATUS rpc_svcctl_init(void)
 {
-	return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION,
-					  "svcctl", "ntsvcs", api_svcctl_cmds,
-					  sizeof(api_svcctl_cmds) / sizeof(struct api_struct));
+  return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "svcctl", "ntsvcs", api_svcctl_cmds,
+				    sizeof(api_svcctl_cmds) / sizeof(struct api_struct));
 }

Modified: branches/samba/upstream/source/rpc_server/srv_svcctl_nt.c
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_svcctl_nt.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_server/srv_svcctl_nt.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,24 +1,25 @@
-/*
+/* 
  *  Unix SMB/CIFS implementation.
  *  RPC Pipe client / server routines
  *
  *  Copyright (C) Marcin Krzysztof Porwit           2005.
- *
+ * 
  *  Largely Rewritten (Again) by:
  *  Copyright (C) Gerald (Jerry) Carter             2005.
- *
+ *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
- *
+ *  
  *  This program is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
- *
+ *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -49,56 +50,56 @@
 
 struct service_control_op *svcctl_ops;
 
-static const struct generic_mapping scm_generic_map =
+static struct generic_mapping scm_generic_map =
 	{ SC_MANAGER_READ_ACCESS, SC_MANAGER_WRITE_ACCESS, SC_MANAGER_EXECUTE_ACCESS, SC_MANAGER_ALL_ACCESS };
-static const struct generic_mapping svc_generic_map =
+static struct generic_mapping svc_generic_map =
 	{ SERVICE_READ_ACCESS, SERVICE_WRITE_ACCESS, SERVICE_EXECUTE_ACCESS, SERVICE_ALL_ACCESS };
 
 
 /********************************************************************
 ********************************************************************/
 
-bool init_service_op_table( void )
+BOOL init_service_op_table( void )
 {
 	const char **service_list = lp_svcctl_list();
 	int num_services = SVCCTL_NUM_INTERNAL_SERVICES + str_list_count( service_list );
 	int i;
-
+	
 	if ( !(svcctl_ops = TALLOC_ARRAY( NULL, struct service_control_op, num_services+1)) ) {
 		DEBUG(0,("init_service_op_table: talloc() failed!\n"));
 		return False;
 	}
 
 	/* services listed in smb.conf get the rc.init interface */
-
+	
 	for ( i=0; service_list && service_list[i]; i++ ) {
 		svcctl_ops[i].name = talloc_strdup( svcctl_ops, service_list[i] );
 		svcctl_ops[i].ops  = &rcinit_svc_ops;
 	}
-
+	
 	/* add builtin services */
-
+	
 	svcctl_ops[i].name = talloc_strdup( svcctl_ops, "Spooler" );
 	svcctl_ops[i].ops  = &spoolss_svc_ops;
 	i++;
-
+	
 	svcctl_ops[i].name = talloc_strdup( svcctl_ops, "NETLOGON" );
 	svcctl_ops[i].ops  = &netlogon_svc_ops;
 	i++;
-
+	
 	svcctl_ops[i].name = talloc_strdup( svcctl_ops, "RemoteRegistry" );
 	svcctl_ops[i].ops  = &winreg_svc_ops;
 	i++;
-
+	
 	svcctl_ops[i].name = talloc_strdup( svcctl_ops, "WINS" );
 	svcctl_ops[i].ops  = &wins_svc_ops;
 	i++;
-
+	
 	/* NULL terminate the array */
-
+	
 	svcctl_ops[i].name = NULL;
 	svcctl_ops[i].ops  = NULL;
-
+	
 	return True;
 }
 
@@ -119,7 +120,7 @@
 /********************************************************************
 ********************************************************************/
 
-static NTSTATUS svcctl_access_check( SEC_DESC *sec_desc, NT_USER_TOKEN *token,
+static NTSTATUS svcctl_access_check( SEC_DESC *sec_desc, NT_USER_TOKEN *token, 
                                      uint32 access_desired, uint32 *access_granted )
 {
 	NTSTATUS result;
@@ -128,7 +129,7 @@
 		DEBUG(5,("svcctl_access_check: using root's token\n"));
 		token = get_root_nt_token();
 	}
-
+	
 	se_access_check( sec_desc, token, access_desired, access_granted, &result );
 
 	return result;
@@ -139,7 +140,7 @@
 
 static SEC_DESC* construct_scm_sd( TALLOC_CTX *ctx )
 {
-	SEC_ACE ace[2];
+	SEC_ACE ace[2];	
 	SEC_ACCESS mask;
 	size_t i = 0;
 	SEC_DESC *sd;
@@ -147,24 +148,22 @@
 	size_t sd_size;
 
 	/* basic access for Everyone */
-
+	
 	init_sec_access(&mask, SC_MANAGER_READ_ACCESS );
 	init_sec_ace(&ace[i++], &global_sid_World, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0);
-
+	
 	/* Full Access 'BUILTIN\Administrators' */
-
+	
 	init_sec_access(&mask,SC_MANAGER_ALL_ACCESS );
 	init_sec_ace(&ace[i++], &global_sid_Builtin_Administrators, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0);
-
-
+	
+	
 	/* create the security descriptor */
-
+	
 	if ( !(acl = make_sec_acl(ctx, NT4_ACL_REVISION, i, ace)) )
 		return NULL;
 
-	if ( !(sd = make_sec_desc(ctx, SECURITY_DESCRIPTOR_REVISION_1,
-				  SEC_DESC_SELF_RELATIVE, NULL, NULL, NULL,
-				  acl, &sd_size)) )
+	if ( !(sd = make_sec_desc(ctx, SEC_DESC_REVISION, SEC_DESC_SELF_RELATIVE, NULL, NULL, NULL, acl, &sd_size)) )
 		return NULL;
 
 	return sd;
@@ -173,7 +172,7 @@
 /******************************************************************
  free() function for REGISTRY_KEY
  *****************************************************************/
-
+ 
 static void free_service_handle_info(void *ptr)
 {
 	TALLOC_FREE( ptr );
@@ -188,7 +187,7 @@
 	SERVICE_INFO *service_info = NULL;
 
 	if( !find_policy_by_hnd( p, hnd, (void **)(void *)&service_info) ) {
-		DEBUG(2,("find_service_info_by_hnd: handle not found\n"));
+		DEBUG(2,("find_service_info_by_hnd: handle not found"));
 		return NULL;
 	}
 
@@ -197,21 +196,21 @@
 
 /******************************************************************
  *****************************************************************/
-
+ 
 static WERROR create_open_service_handle( pipes_struct *p, POLICY_HND *handle, uint32 type,
                                           const char *service, uint32 access_granted )
 {
 	SERVICE_INFO *info = NULL;
 	WERROR result = WERR_OK;
 	struct service_control_op *s_op;
-
+	
 	if ( !(info = TALLOC_ZERO_P( NULL, SERVICE_INFO )) )
 		return WERR_NOMEM;
 
 	/* the Service Manager has a NULL name */
-
+	
 	info->type = SVC_HANDLE_IS_SCM;
-
+	
 	switch ( type ) {
 	case SVC_HANDLE_IS_SCM:
 		info->type = SVC_HANDLE_IS_SCM;
@@ -220,17 +219,17 @@
 	case SVC_HANDLE_IS_DBLOCK:
 		info->type = SVC_HANDLE_IS_DBLOCK;
 		break;
-
+		
 	case SVC_HANDLE_IS_SERVICE:
 		info->type = SVC_HANDLE_IS_SERVICE;
-
+		
 		/* lookup the SERVICE_CONTROL_OPS */
 
 		if ( !(s_op = find_service_by_name( service )) ) {
 			result = WERR_NO_SUCH_SERVICE;
 			goto done;
 		}
-
+		
 		info->ops = s_op->ops;
 
 		if ( !(info->name  = talloc_strdup( info, s_op->name )) ) {
@@ -244,15 +243,15 @@
 		goto done;
 	}
 
-	info->access_granted = access_granted;
-
+	info->access_granted = access_granted;	
+	
 	/* store the SERVICE_INFO and create an open handle */
-
+	
 	if ( !create_policy_hnd( p, handle, free_service_handle_info, info ) ) {
 		result = WERR_ACCESS_DENIED;
 		goto done;
 	}
-
+		
 done:
 	if ( !W_ERROR_IS_OK(result) )
 		free_service_handle_info( info );
@@ -263,125 +262,107 @@
 /********************************************************************
 ********************************************************************/
 
-WERROR _svcctl_OpenSCManagerW(pipes_struct *p,
-			      struct svcctl_OpenSCManagerW *r)
+WERROR _svcctl_open_scmanager(pipes_struct *p, SVCCTL_Q_OPEN_SCMANAGER *q_u, SVCCTL_R_OPEN_SCMANAGER *r_u)
 {
 	SEC_DESC *sec_desc;
 	uint32 access_granted = 0;
 	NTSTATUS status;
-
+	
 	/* perform access checks */
-
+	
 	if ( !(sec_desc = construct_scm_sd( p->mem_ctx )) )
 		return WERR_NOMEM;
-
-	se_map_generic( &r->in.access_mask, &scm_generic_map );
-	status = svcctl_access_check( sec_desc, p->pipe_user.nt_user_token, r->in.access_mask, &access_granted );
+		
+	se_map_generic( &q_u->access, &scm_generic_map );
+	status = svcctl_access_check( sec_desc, p->pipe_user.nt_user_token, q_u->access, &access_granted );
 	if ( !NT_STATUS_IS_OK(status) )
 		return ntstatus_to_werror( status );
-
-	return create_open_service_handle( p, r->out.handle, SVC_HANDLE_IS_SCM, NULL, access_granted );
+		
+	return create_open_service_handle( p, &r_u->handle, SVC_HANDLE_IS_SCM, NULL, access_granted );
 }
 
 /********************************************************************
- _svcctl_OpenServiceW
 ********************************************************************/
 
-WERROR _svcctl_OpenServiceW(pipes_struct *p,
-			    struct svcctl_OpenServiceW *r)
+WERROR _svcctl_open_service(pipes_struct *p, SVCCTL_Q_OPEN_SERVICE *q_u, SVCCTL_R_OPEN_SERVICE *r_u)
 {
 	SEC_DESC *sec_desc;
 	uint32 access_granted = 0;
 	NTSTATUS status;
-	const char *service = NULL;
+	pstring service;
 
-	service = r->in.ServiceName;
-	if (!service) {
-		return WERR_NOMEM;
-	}
-	DEBUG(5, ("_svcctl_OpenServiceW: Attempting to open Service [%s], \n", service));
+	rpcstr_pull(service, q_u->servicename.buffer, sizeof(service), q_u->servicename.uni_str_len*2, 0);
+	
+  	DEBUG(5, ("_svcctl_open_service: Attempting to open Service [%s], \n", service));
 
+	
 	/* based on my tests you can open a service if you have a valid scm handle */
-
-	if ( !find_service_info_by_hnd( p, r->in.scmanager_handle) )
+	
+	if ( !find_service_info_by_hnd( p, &q_u->handle ) )
 		return WERR_BADFID;
-
-	/* perform access checks.  Use the root token in order to ensure that we
+			
+	/* perform access checks.  Use the root token in order to ensure that we 
 	   retrieve the security descriptor */
-
+	
 	if ( !(sec_desc = svcctl_get_secdesc( p->mem_ctx, service, get_root_nt_token() )) )
 		return WERR_NOMEM;
-
-	se_map_generic( &r->in.access_mask, &svc_generic_map );
-	status = svcctl_access_check( sec_desc, p->pipe_user.nt_user_token, r->in.access_mask, &access_granted );
+		
+	se_map_generic( &q_u->access, &svc_generic_map );
+	status = svcctl_access_check( sec_desc, p->pipe_user.nt_user_token, q_u->access, &access_granted );
 	if ( !NT_STATUS_IS_OK(status) )
 		return ntstatus_to_werror( status );
-
-	return create_open_service_handle( p, r->out.handle, SVC_HANDLE_IS_SERVICE, service, access_granted );
+	
+	return create_open_service_handle( p, &r_u->handle, SVC_HANDLE_IS_SERVICE, service, access_granted );
 }
 
 /********************************************************************
 ********************************************************************/
 
-WERROR _svcctl_CloseServiceHandle(pipes_struct *p, struct svcctl_CloseServiceHandle *r)
+WERROR _svcctl_close_service(pipes_struct *p, SVCCTL_Q_CLOSE_SERVICE *q_u, SVCCTL_R_CLOSE_SERVICE *r_u)
 {
-	if ( !close_policy_hnd( p, r->in.handle ) )
-		return  WERR_BADFID;
-
-	ZERO_STRUCTP(r->out.handle);
-
-	return WERR_OK;
+	return close_policy_hnd( p, &q_u->handle ) ? WERR_OK : WERR_BADFID;
 }
 
 /********************************************************************
- _svcctl_GetServiceDisplayNameW
 ********************************************************************/
 
-WERROR _svcctl_GetServiceDisplayNameW(pipes_struct *p,
-				      struct svcctl_GetServiceDisplayNameW *r)
+WERROR _svcctl_get_display_name(pipes_struct *p, SVCCTL_Q_GET_DISPLAY_NAME *q_u, SVCCTL_R_GET_DISPLAY_NAME *r_u)
 {
-	const char *service;
+	fstring service;
 	const char *display_name;
-	SERVICE_INFO *info = find_service_info_by_hnd( p, r->in.handle );
-
+	SERVICE_INFO *info = find_service_info_by_hnd( p, &q_u->handle );
+	
 	/* can only use an SCM handle here */
-
+	
 	if ( !info || (info->type != SVC_HANDLE_IS_SCM) )
 		return WERR_BADFID;
+		
+	rpcstr_pull(service, q_u->servicename.buffer, sizeof(service), q_u->servicename.uni_str_len*2, 0);
+	
+	display_name = svcctl_lookup_dispname( service, p->pipe_user.nt_user_token );
+	init_svcctl_r_get_display_name( r_u, display_name );
 
-	service = r->in.service_name;
-
-	display_name = svcctl_lookup_dispname(p->mem_ctx, service, p->pipe_user.nt_user_token );
-	if (!display_name) {
-		display_name = "";
-	}
-
-	*r->out.display_name = display_name;
-	*r->out.display_name_length = strlen(display_name);
-
 	return WERR_OK;
 }
 
 /********************************************************************
- _svcctl_QueryServiceStatus
 ********************************************************************/
 
-WERROR _svcctl_QueryServiceStatus(pipes_struct *p,
-				  struct svcctl_QueryServiceStatus *r)
+WERROR _svcctl_query_status(pipes_struct *p, SVCCTL_Q_QUERY_STATUS *q_u, SVCCTL_R_QUERY_STATUS *r_u)
 {
-	SERVICE_INFO *info = find_service_info_by_hnd( p, r->in.handle );
-
+	SERVICE_INFO *info = find_service_info_by_hnd( p, &q_u->handle );
+	
 	/* perform access checks */
 
 	if ( !info || (info->type != SVC_HANDLE_IS_SERVICE) )
 		return WERR_BADFID;
-
+		
 	if ( !(info->access_granted & SC_RIGHT_SVC_QUERY_STATUS) )
 		return WERR_ACCESS_DENIED;
-
+		
 	/* try the service specific status call */
 
-	return info->ops->service_status( info->name, r->out.service_status );
+	return info->ops->service_status( info->name, &r_u->svc_status );
 }
 
 /********************************************************************
@@ -393,7 +374,7 @@
 	int i;
 	ENUM_SERVICES_STATUS *st;
 	const char *display_name;
-
+	
 	/* just count */
 	while ( svcctl_ops[num_services].name )
 		num_services++;
@@ -402,16 +383,16 @@
 		DEBUG(0,("enumerate_status: talloc() failed!\n"));
 		return -1;
 	}
-
+	
 	for ( i=0; i<num_services; i++ ) {
 		init_unistr( &st[i].servicename, svcctl_ops[i].name );
-
-		display_name = svcctl_lookup_dispname(ctx, svcctl_ops[i].name, token );
-		init_unistr( &st[i].displayname, display_name ? display_name : "");
-
+		
+		display_name = svcctl_lookup_dispname( svcctl_ops[i].name, token );
+		init_unistr( &st[i].displayname, display_name );
+		
 		svcctl_ops[i].ops->service_status( svcctl_ops[i].name, &st[i].status );
 	}
-
+	
 	*status = st;
 
 	return num_services;
@@ -429,12 +410,12 @@
 	WERROR result = WERR_OK;
 	SERVICE_INFO *info = find_service_info_by_hnd( p, &q_u->handle );
 	NT_USER_TOKEN *token = p->pipe_user.nt_user_token;
-
+	
 	/* perform access checks */
 
 	if ( !info || (info->type != SVC_HANDLE_IS_SCM) )
 		return WERR_BADFID;
-
+		
 	if ( !(info->access_granted & SC_RIGHT_MGR_ENUMERATE_SERVICE) ) {
 		return WERR_ACCESS_DENIED;
 	}
@@ -474,57 +455,51 @@
 }
 
 /********************************************************************
- _svcctl_StartServiceW
 ********************************************************************/
 
-WERROR _svcctl_StartServiceW(pipes_struct *p,
-			     struct svcctl_StartServiceW *r)
+WERROR _svcctl_start_service(pipes_struct *p, SVCCTL_Q_START_SERVICE *q_u, SVCCTL_R_START_SERVICE *r_u)
 {
-	SERVICE_INFO *info = find_service_info_by_hnd( p, r->in.handle );
-
+	SERVICE_INFO *info = find_service_info_by_hnd( p, &q_u->handle );
+	
 	/* perform access checks */
 
 	if ( !info || (info->type != SVC_HANDLE_IS_SERVICE) )
 		return WERR_BADFID;
-
+	
 	if ( !(info->access_granted & SC_RIGHT_SVC_START) )
 		return WERR_ACCESS_DENIED;
-
+		
 	return info->ops->start_service( info->name );
 }
 
 /********************************************************************
- _svcctl_ControlService
 ********************************************************************/
 
-WERROR _svcctl_ControlService(pipes_struct *p,
-			      struct svcctl_ControlService *r)
+WERROR _svcctl_control_service(pipes_struct *p, SVCCTL_Q_CONTROL_SERVICE *q_u, SVCCTL_R_CONTROL_SERVICE *r_u)
 {
-	SERVICE_INFO *info = find_service_info_by_hnd( p, r->in.handle );
-
+	SERVICE_INFO *info = find_service_info_by_hnd( p, &q_u->handle );
+	
 	/* perform access checks */
-
+	
 	if ( !info || (info->type != SVC_HANDLE_IS_SERVICE) )
-		return WERR_BADFID;
-
-	switch ( r->in.control ) {
+		return WERR_BADFID;	
+	
+	switch ( q_u->control ) {
 	case SVCCTL_CONTROL_STOP:
 		if ( !(info->access_granted & SC_RIGHT_SVC_STOP) )
 			return WERR_ACCESS_DENIED;
-
-		return info->ops->stop_service( info->name,
-						r->out.service_status );
-
+			
+		return info->ops->stop_service( info->name, &r_u->svc_status );
+		
 	case SVCCTL_CONTROL_INTERROGATE:
 		if ( !(info->access_granted & SC_RIGHT_SVC_QUERY_STATUS) )
 			return WERR_ACCESS_DENIED;
-
-		return info->ops->service_status( info->name,
-						  r->out.service_status );
+			
+		return info->ops->service_status( info->name, &r_u->svc_status );
 	}
-
+	
 	/* default control action */
-
+	
 	return WERR_ACCESS_DENIED;
 }
 
@@ -534,22 +509,22 @@
 WERROR _svcctl_enum_dependent_services( pipes_struct *p, SVCCTL_Q_ENUM_DEPENDENT_SERVICES *q_u, SVCCTL_R_ENUM_DEPENDENT_SERVICES *r_u )
 {
 	SERVICE_INFO *info = find_service_info_by_hnd( p, &q_u->handle );
-
+	
 	/* perform access checks */
 
 	if ( !info || (info->type != SVC_HANDLE_IS_SERVICE) )
-		return WERR_BADFID;
-
+		return WERR_BADFID;	
+	
 	if ( !(info->access_granted & SC_RIGHT_SVC_ENUMERATE_DEPENDENTS) )
 		return WERR_ACCESS_DENIED;
-
-	/* we have to set the outgoing buffer size to the same as the
+			
+	/* we have to set the outgoing buffer size to the same as the 
 	   incoming buffer size (even in the case of failure */
 
 	rpcbuf_init( &r_u->buffer, q_u->buffer_size, p->mem_ctx );
-
+				
 	r_u->needed      = q_u->buffer_size;
-
+	
 	/* no dependent services...basically a stub function */
 	r_u->returned    = 0;
 
@@ -563,21 +538,21 @@
 {
 	SERVICE_INFO *info = find_service_info_by_hnd( p, &q_u->handle );
 	uint32 buffer_size;
-
+	
 	/* perform access checks */
 
 	if ( !info || (info->type != SVC_HANDLE_IS_SERVICE) )
-		return WERR_BADFID;
-
+		return WERR_BADFID;	
+	
 	if ( !(info->access_granted & SC_RIGHT_SVC_QUERY_STATUS) )
 		return WERR_ACCESS_DENIED;
 
-	/* we have to set the outgoing buffer size to the same as the
+	/* we have to set the outgoing buffer size to the same as the 
 	   incoming buffer size (even in the case of failure) */
 
 	rpcbuf_init( &r_u->buffer, q_u->buffer_size, p->mem_ctx );
 	r_u->needed = q_u->buffer_size;
-
+	
 	switch ( q_u->level ) {
 		case SVC_STATUS_PROCESS_INFO:
 		{
@@ -592,18 +567,18 @@
 	                buffer_size = sizeof(SERVICE_STATUS_PROCESS);
 			break;
 		}
-
+			
 		default:
-			return WERR_UNKNOWN_LEVEL;
+			return WERR_UNKNOWN_LEVEL; 
 	}
 
-
+	
         buffer_size += buffer_size % 4;
 	r_u->needed = (buffer_size > q_u->buffer_size) ? buffer_size : q_u->buffer_size;
 
-        if (buffer_size > q_u->buffer_size )
+        if (buffer_size > q_u->buffer_size ) 
                 return WERR_MORE_DATA;
-
+	
 	return WERR_OK;
 }
 
@@ -616,12 +591,12 @@
 	REGISTRY_VALUE *val;
 
 	/* retrieve the registry values for this service */
-
+	
 	if ( !(values = svcctl_fetch_regvalues( name, token )) )
 		return WERR_REG_CORRUPT;
-
+	
 	/* now fill in the individual values */
-
+		
 	config->displayname = TALLOC_ZERO_P( ctx, UNISTR2 );
 	if ( (val = regval_ctr_getvalue( values, "DisplayName" )) != NULL )
 		init_unistr2( config->displayname, regval_sz( val ), UNI_STR_TERMINATE );
@@ -629,23 +604,23 @@
 		init_unistr2( config->displayname, name, UNI_STR_TERMINATE );
 
 	if ( (val = regval_ctr_getvalue( values, "ObjectName" )) != NULL ) {
-		config->startname = TALLOC_ZERO_P( ctx, UNISTR2 );
+		config->startname = TALLOC_ZERO_P( ctx, UNISTR2 );		
 		init_unistr2( config->startname, regval_sz( val ), UNI_STR_TERMINATE );
 	}
-
+		
 	if ( (val = regval_ctr_getvalue( values, "ImagePath" )) != NULL ) {
-		config->executablepath = TALLOC_ZERO_P( ctx, UNISTR2 );
+		config->executablepath = TALLOC_ZERO_P( ctx, UNISTR2 );		
 		init_unistr2( config->executablepath, regval_sz( val ), UNI_STR_TERMINATE );
 	}
 
 	/* a few hard coded values */
 	/* loadordergroup and dependencies are empty */
-
+	
 	config->tag_id           = 0x00000000;			/* unassigned loadorder group */
 	config->service_type     = SVCCTL_WIN32_OWN_PROC;
 	config->error_control    = SVCCTL_SVC_ERROR_NORMAL;
 
-	/* set the start type.  NetLogon and WINS are disabled to prevent
+	/* set the start type.  NetLogon and WINS are disabled to prevent 
 	   the client from showing the "Start" button (if of course the services
 	   are not running */
 
@@ -655,8 +630,8 @@
 		config->start_type = SVCCTL_DISABLED;
 	else
 		config->start_type = SVCCTL_DEMAND_START;
+	
 
-
 	TALLOC_FREE( values );
 
 	return WERR_OK;
@@ -670,24 +645,24 @@
 	SERVICE_INFO *info = find_service_info_by_hnd( p, &q_u->handle );
 	uint32 buffer_size;
 	WERROR wresult;
-
+	
 	/* perform access checks */
 
 	if ( !info || (info->type != SVC_HANDLE_IS_SERVICE) )
-		return WERR_BADFID;
-
+		return WERR_BADFID;	
+	
 	if ( !(info->access_granted & SC_RIGHT_SVC_QUERY_CONFIG) )
 		return WERR_ACCESS_DENIED;
 
-	/* we have to set the outgoing buffer size to the same as the
+	/* we have to set the outgoing buffer size to the same as the 
 	   incoming buffer size (even in the case of failure */
 
 	r_u->needed      = q_u->buffer_size;
-
+	
 	wresult = fill_svc_config( p->mem_ctx, info->name, &r_u->config, p->pipe_user.nt_user_token );
 	if ( !W_ERROR_IS_OK(wresult) )
 		return wresult;
-
+	
 	buffer_size = svcctl_sizeof_service_config( &r_u->config );
 	r_u->needed = (buffer_size > q_u->buffer_size) ? buffer_size : q_u->buffer_size;
 
@@ -695,7 +670,7 @@
 		ZERO_STRUCTP( &r_u->config );
                 return WERR_INSUFFICIENT_BUFFER;
 	}
-
+		
 	return WERR_OK;
 }
 
@@ -706,16 +681,16 @@
 {
 	SERVICE_INFO *info = find_service_info_by_hnd( p, &q_u->handle );
 	uint32 buffer_size;
-
+	
 	/* perform access checks */
 
 	if ( !info || (info->type != SVC_HANDLE_IS_SERVICE) )
-		return WERR_BADFID;
-
+		return WERR_BADFID;	
+	
 	if ( !(info->access_granted & SC_RIGHT_SVC_QUERY_CONFIG) )
 		return WERR_ACCESS_DENIED;
-
-	/* we have to set the outgoing buffer size to the same as the
+ 
+	/* we have to set the outgoing buffer size to the same as the 
 	   incoming buffer size (even in the case of failure */
 
 	rpcbuf_init( &r_u->buffer, q_u->buffer_size, p->mem_ctx );
@@ -726,12 +701,12 @@
 		{
 			SERVICE_DESCRIPTION desc_buf;
 			const char *description;
-
-			description = svcctl_lookup_description(p->mem_ctx, info->name, p->pipe_user.nt_user_token );
-
+			
+			description = svcctl_lookup_description( info->name, p->pipe_user.nt_user_token );
+			
 			ZERO_STRUCTP( &desc_buf );
 
-			init_service_description_buffer( &desc_buf, description ? description : "");
+			init_service_description_buffer( &desc_buf, description );
 			svcctl_io_service_description( "", &desc_buf, &r_u->buffer, 0 );
 	                buffer_size = svcctl_sizeof_service_description( &desc_buf );
 
@@ -755,7 +730,7 @@
 	default:
 		return WERR_UNKNOWN_LEVEL;
 	}
-
+	
 	buffer_size += buffer_size % 4;
 	r_u->needed = (buffer_size > q_u->buffer_size) ? buffer_size : q_u->buffer_size;
 
@@ -766,61 +741,53 @@
 }
 
 /********************************************************************
- _svcctl_LockServiceDatabase
 ********************************************************************/
 
-WERROR _svcctl_LockServiceDatabase(pipes_struct *p,
-				   struct svcctl_LockServiceDatabase *r)
+WERROR _svcctl_lock_service_db( pipes_struct *p, SVCCTL_Q_LOCK_SERVICE_DB *q_u, SVCCTL_R_LOCK_SERVICE_DB *r_u )
 {
-	SERVICE_INFO *info = find_service_info_by_hnd( p, r->in.handle );
-
+	SERVICE_INFO *info = find_service_info_by_hnd( p, &q_u->handle );
+	
 	/* perform access checks */
 
 	if ( !info || (info->type != SVC_HANDLE_IS_SCM) )
-		return WERR_BADFID;
-
+		return WERR_BADFID;	
+	
 	if ( !(info->access_granted & SC_RIGHT_MGR_LOCK) )
 		return WERR_ACCESS_DENIED;
 
 	/* Just open a handle.  Doesn't actually lock anything */
-
-	return create_open_service_handle( p, r->out.lock, SVC_HANDLE_IS_DBLOCK, NULL, 0 );
+	
+	return create_open_service_handle( p, &r_u->h_lock, SVC_HANDLE_IS_DBLOCK, NULL, 0 );
+;
 }
 
 /********************************************************************
- _svcctl_UnlockServiceDatabase
 ********************************************************************/
 
-WERROR _svcctl_UnlockServiceDatabase(pipes_struct *p,
-				     struct svcctl_UnlockServiceDatabase *r)
+WERROR _svcctl_unlock_service_db( pipes_struct *p, SVCCTL_Q_UNLOCK_SERVICE_DB *q_u, SVCCTL_R_UNLOCK_SERVICE_DB *r_u )
 {
-	SERVICE_INFO *info = find_service_info_by_hnd( p, r->in.lock );
+	SERVICE_INFO *info = find_service_info_by_hnd( p, &q_u->h_lock );
 
 
 	if ( !info || (info->type != SVC_HANDLE_IS_DBLOCK) )
-		return WERR_BADFID;
-
-	return close_policy_hnd( p, r->out.lock) ? WERR_OK : WERR_BADFID;
+		return WERR_BADFID;	
+		
+	return close_policy_hnd( p, &q_u->h_lock) ? WERR_OK : WERR_BADFID;
 }
 
 /********************************************************************
- _svcctl_QueryServiceObjectSecurity
 ********************************************************************/
 
-WERROR _svcctl_QueryServiceObjectSecurity(pipes_struct *p,
-					  struct svcctl_QueryServiceObjectSecurity *r)
+WERROR _svcctl_query_service_sec( pipes_struct *p, SVCCTL_Q_QUERY_SERVICE_SEC *q_u, SVCCTL_R_QUERY_SERVICE_SEC *r_u )
 {
-	SERVICE_INFO *info = find_service_info_by_hnd( p, r->in.handle );
+	SERVICE_INFO *info = find_service_info_by_hnd( p, &q_u->handle );
 	SEC_DESC *sec_desc;
-	NTSTATUS status;
-	uint8_t *buffer = NULL;
-	size_t len = 0;
 
 
 	/* only support the SCM and individual services */
 
 	if ( !info || !(info->type & (SVC_HANDLE_IS_SERVICE|SVC_HANDLE_IS_SCM)) )
-		return WERR_BADFID;
+		return WERR_BADFID;	
 
 	/* check access reights (according to MSDN) */
 
@@ -829,7 +796,7 @@
 
 	/* TODO: handle something besides DACL_SECURITY_INFORMATION */
 
-	if ( (r->in.security_flags & DACL_SECURITY_INFORMATION) != DACL_SECURITY_INFORMATION )
+	if ( (q_u->security_flags & DACL_SECURITY_INFORMATION) != DACL_SECURITY_INFORMATION )
 		return WERR_INVALID_PARAM;
 
 	/* lookup the security descriptor and marshall it up for a reply */
@@ -837,35 +804,29 @@
 	if ( !(sec_desc = svcctl_get_secdesc( p->mem_ctx, info->name, get_root_nt_token() )) )
                 return WERR_NOMEM;
 
-	*r->out.needed = ndr_size_security_descriptor( sec_desc, 0 );
+	r_u->needed = sec_desc_size( sec_desc );
 
-	if ( *r->out.needed > r->in.buffer_size ) {
-		ZERO_STRUCTP( &r->out.buffer );
+	if ( r_u->needed > q_u->buffer_size ) {
+		ZERO_STRUCTP( &r_u->buffer );
 		return WERR_INSUFFICIENT_BUFFER;
 	}
 
-	status = marshall_sec_desc(p->mem_ctx, sec_desc, &buffer, &len);
-	if (!NT_STATUS_IS_OK(status)) {
-		return ntstatus_to_werror(status);
-	}
+	rpcbuf_init( &r_u->buffer, q_u->buffer_size, p->mem_ctx );
 
-	*r->out.needed = len;
-	r->out.buffer = buffer;
-
+	if ( !sec_io_desc("", &sec_desc, &r_u->buffer.prs, 0 ) )
+		return WERR_NOMEM;
+		
 	return WERR_OK;
 }
 
 /********************************************************************
- _svcctl_SetServiceObjectSecurity
 ********************************************************************/
 
-WERROR _svcctl_SetServiceObjectSecurity(pipes_struct *p,
-					struct svcctl_SetServiceObjectSecurity *r)
+WERROR _svcctl_set_service_sec( pipes_struct *p, SVCCTL_Q_SET_SERVICE_SEC *q_u, SVCCTL_R_SET_SERVICE_SEC *r_u )
 {
-	SERVICE_INFO *info = find_service_info_by_hnd( p, r->in.handle );
+	SERVICE_INFO *info = find_service_info_by_hnd( p, &q_u->handle );
 	SEC_DESC *sec_desc = NULL;
 	uint32 required_access;
-	NTSTATUS status;
 
 	if ( !info || !(info->type & (SVC_HANDLE_IS_SERVICE|SVC_HANDLE_IS_SCM))  )
 		return WERR_BADFID;
@@ -873,242 +834,40 @@
 	/* can't set the security de4scriptor on the ServiceControlManager */
 
 	if ( info->type == SVC_HANDLE_IS_SCM )
-		return WERR_ACCESS_DENIED;
+		return WERR_ACCESS_DENIED;	
 
 	/* check the access on the open handle */
-
-	switch ( r->in.security_flags ) {
+	
+	switch ( q_u->security_flags ) {
 		case DACL_SECURITY_INFORMATION:
 			required_access = STD_RIGHT_WRITE_DAC_ACCESS;
 			break;
-
+			
 		case OWNER_SECURITY_INFORMATION:
 		case GROUP_SECURITY_INFORMATION:
 			required_access = STD_RIGHT_WRITE_OWNER_ACCESS;
 			break;
-
+			
 		case SACL_SECURITY_INFORMATION:
 			return WERR_INVALID_PARAM;
 		default:
 			return WERR_INVALID_PARAM;
 	}
-
+	
 	if ( !(info->access_granted & required_access) )
 		return WERR_ACCESS_DENIED;
-
+	
 	/* read the security descfriptor */
-
-	status = unmarshall_sec_desc(p->mem_ctx,
-				     r->in.buffer, r->in.buffer_size,
-				     &sec_desc);
-	if (!NT_STATUS_IS_OK(status)) {
-		return ntstatus_to_werror(status);
-	}
-
+		
+	if ( !sec_io_desc("", &sec_desc, &q_u->buffer.prs, 0 ) )
+		return WERR_NOMEM;
+		
 	/* store the new SD */
 
-	if ( !svcctl_set_secdesc( p->mem_ctx, info->name, sec_desc, p->pipe_user.nt_user_token ) )
+	if ( !svcctl_set_secdesc( p->mem_ctx, info->name, sec_desc, p->pipe_user.nt_user_token ) ) 
 		return WERR_ACCESS_DENIED;
 
 	return WERR_OK;
 }
 
 
-WERROR _svcctl_DeleteService(pipes_struct *p, struct svcctl_DeleteService *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_SetServiceStatus(pipes_struct *p, struct svcctl_SetServiceStatus *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_NotifyBootConfigStatus(pipes_struct *p, struct svcctl_NotifyBootConfigStatus *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_SCSetServiceBitsW(pipes_struct *p, struct svcctl_SCSetServiceBitsW *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_ChangeServiceConfigW(pipes_struct *p, struct svcctl_ChangeServiceConfigW *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_CreateServiceW(pipes_struct *p, struct svcctl_CreateServiceW *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_EnumDependentServicesW(pipes_struct *p, struct svcctl_EnumDependentServicesW *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_EnumServicesStatusW(pipes_struct *p, struct svcctl_EnumServicesStatusW *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_QueryServiceConfigW(pipes_struct *p, struct svcctl_QueryServiceConfigW *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_QueryServiceLockStatusW(pipes_struct *p, struct svcctl_QueryServiceLockStatusW *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_GetServiceKeyNameW(pipes_struct *p, struct svcctl_GetServiceKeyNameW *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_SCSetServiceBitsA(pipes_struct *p, struct svcctl_SCSetServiceBitsA *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_ChangeServiceConfigA(pipes_struct *p, struct svcctl_ChangeServiceConfigA *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_CreateServiceA(pipes_struct *p, struct svcctl_CreateServiceA *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_EnumDependentServicesA(pipes_struct *p, struct svcctl_EnumDependentServicesA *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_EnumServicesStatusA(pipes_struct *p, struct svcctl_EnumServicesStatusA *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_OpenSCManagerA(pipes_struct *p, struct svcctl_OpenSCManagerA *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_OpenServiceA(pipes_struct *p, struct svcctl_OpenServiceA *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_QueryServiceConfigA(pipes_struct *p, struct svcctl_QueryServiceConfigA *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_QueryServiceLockStatusA(pipes_struct *p, struct svcctl_QueryServiceLockStatusA *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_StartServiceA(pipes_struct *p, struct svcctl_StartServiceA *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_GetServiceDisplayNameA(pipes_struct *p, struct svcctl_GetServiceDisplayNameA *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_GetServiceKeyNameA(pipes_struct *p, struct svcctl_GetServiceKeyNameA *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_GetCurrentGroupeStateW(pipes_struct *p, struct svcctl_GetCurrentGroupeStateW *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_EnumServiceGroupW(pipes_struct *p, struct svcctl_EnumServiceGroupW *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_ChangeServiceConfig2A(pipes_struct *p, struct svcctl_ChangeServiceConfig2A *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_ChangeServiceConfig2W(pipes_struct *p, struct svcctl_ChangeServiceConfig2W *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_QueryServiceConfig2A(pipes_struct *p, struct svcctl_QueryServiceConfig2A *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_QueryServiceConfig2W(pipes_struct *p, struct svcctl_QueryServiceConfig2W *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_QueryServiceStatusEx(pipes_struct *p, struct svcctl_QueryServiceStatusEx *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _EnumServicesStatusExA(pipes_struct *p, struct EnumServicesStatusExA *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _EnumServicesStatusExW(pipes_struct *p, struct EnumServicesStatusExW *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-WERROR _svcctl_SCSendTSMessage(pipes_struct *p, struct svcctl_SCSendTSMessage *r)
-{
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-

Modified: branches/samba/upstream/source/rpc_server/srv_util.c
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_util.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_server/srv_util.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 /*  this module apparently provides an implementation of DCE/RPC over a

Deleted: branches/samba/upstream/source/rpc_server/srv_winreg_nt.c
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_winreg_nt.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_server/srv_winreg_nt.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,961 +0,0 @@
-/* 
- *  Unix SMB/CIFS implementation.
- *  RPC Pipe client / server routines
- * 
- *  Copyright (C) Gerald Carter                 2002-2006.
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *  
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *  
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-/* Implementation of registry functions. */
-
-#include "includes.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_RPC_SRV
-
-/******************************************************************
- free() function for struct registry_key
- *****************************************************************/
- 
-static void free_regkey(void *ptr)
-{
-	struct registry_key *key = (struct registry_key *)ptr;
-	TALLOC_FREE(key);
-}
-
-/******************************************************************
- Find a registry key handle and return a struct registry_key *
- *****************************************************************/
-
-static struct registry_key *find_regkey_by_hnd(pipes_struct *p,
-					       POLICY_HND *hnd)
-{
-	struct registry_key *regkey = NULL;
-
-	if(!find_policy_by_hnd(p,hnd,(void **)(void *)&regkey)) {
-		DEBUG(2,("find_regkey_index_by_hnd: Registry Key not found: "));
-		return NULL;
-	}
-
-	return regkey;
-}
-
-/*******************************************************************
- Function for open a new registry handle and creating a handle 
- Note that P should be valid & hnd should already have space
- 
- When we open a key, we store the full path to the key as 
- HK[LM|U]\<key>\<key>\...
- *******************************************************************/
- 
-static WERROR open_registry_key( pipes_struct *p, POLICY_HND *hnd, 
-				 struct registry_key *parent,
-				 const char *subkeyname,
-				 uint32 access_desired  )
-{
-	WERROR result = WERR_OK;
-	struct registry_key *key;
-
-	if (parent == NULL) {
-		result = reg_openhive(NULL, subkeyname, access_desired,
-				      p->pipe_user.nt_user_token, &key);
-	}
-	else {
-		result = reg_openkey(NULL, parent, subkeyname, access_desired,
-				     &key);
-	}
-
-	if ( !W_ERROR_IS_OK(result) ) {
-		return result;
-	}
-	
-	if ( !create_policy_hnd( p, hnd, free_regkey, key ) ) {
-		return WERR_BADFILE; 
-	}
-	
-	return WERR_OK;
-}
-
-/*******************************************************************
- Function for open a new registry handle and creating a handle 
- Note that P should be valid & hnd should already have space
- *******************************************************************/
-
-static bool close_registry_key(pipes_struct *p, POLICY_HND *hnd)
-{
-	struct registry_key *regkey = find_regkey_by_hnd(p, hnd);
-	
-	if ( !regkey ) {
-		DEBUG(2,("close_registry_key: Invalid handle (%s:%u:%u)\n",
-			 OUR_HANDLE(hnd)));
-		return False;
-	}
-	
-	close_policy_hnd(p, hnd);
-	
-	return True;
-}
-
-/********************************************************************
- reg_close
- ********************************************************************/
-
-WERROR _winreg_CloseKey(pipes_struct *p, struct winreg_CloseKey *r)
-{
-	/* close the policy handle */
-
-	if (!close_registry_key(p, r->in.handle))
-		return WERR_BADFID; 
-
-	ZERO_STRUCTP(r->out.handle);
-
-	return WERR_OK;
-}
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _winreg_OpenHKLM(pipes_struct *p, struct winreg_OpenHKLM *r)
-{
-	return open_registry_key(p, r->out.handle, NULL, KEY_HKLM, r->in.access_mask);
-}
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _winreg_OpenHKPD(pipes_struct *p, struct winreg_OpenHKPD *r)
-{
-	return open_registry_key(p, r->out.handle, NULL, KEY_HKPD, r->in.access_mask);
-}
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _winreg_OpenHKPT(pipes_struct *p, struct winreg_OpenHKPT *r)
-{
-	return open_registry_key(p, r->out.handle, NULL, KEY_HKPT, r->in.access_mask);
-}
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _winreg_OpenHKCR(pipes_struct *p, struct winreg_OpenHKCR *r)
-{
-	return open_registry_key(p, r->out.handle, NULL, KEY_HKCR, r->in.access_mask);
-}
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _winreg_OpenHKU(pipes_struct *p, struct winreg_OpenHKU *r)
-{
-	return open_registry_key(p, r->out.handle, NULL, KEY_HKU, r->in.access_mask);
-}
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _winreg_OpenHKCU(pipes_struct *p, struct winreg_OpenHKCU *r)
-{
-	return open_registry_key(p, r->out.handle, NULL, KEY_HKCU, r->in.access_mask);
-}
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _winreg_OpenHKCC(pipes_struct *p, struct winreg_OpenHKCC *r)
-{
-	return open_registry_key(p, r->out.handle, NULL, KEY_HKCC, r->in.access_mask);
-}
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _winreg_OpenHKDD(pipes_struct *p, struct winreg_OpenHKDD *r)
-{
-	return open_registry_key(p, r->out.handle, NULL, KEY_HKDD, r->in.access_mask);
-}
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _winreg_OpenHKPN(pipes_struct *p, struct winreg_OpenHKPN *r)
-{
-	return open_registry_key(p, r->out.handle, NULL, KEY_HKPN, r->in.access_mask);
-}
-
-/*******************************************************************
- reg_reply_open_entry
- ********************************************************************/
-
-WERROR _winreg_OpenKey(pipes_struct *p, struct winreg_OpenKey *r)
-{
-	struct registry_key *parent = find_regkey_by_hnd(p, r->in.parent_handle );
-
-	if ( !parent )
-		return WERR_BADFID;
-
-	return open_registry_key(p, r->out.handle, parent, r->in.keyname.name, r->in.access_mask);
-}
-
-/*******************************************************************
- reg_reply_info
- ********************************************************************/
-
-WERROR _winreg_QueryValue(pipes_struct *p, struct winreg_QueryValue *r)
-{
-	WERROR        status = WERR_BADFILE;
-	struct registry_key *regkey = find_regkey_by_hnd( p, r->in.handle );
-	prs_struct    prs_hkpd;
-
-	uint8_t *outbuf;
-	uint32_t outbuf_size;
-
-	DATA_BLOB val_blob;
-	bool free_buf = False;
-	bool free_prs = False;
-
-	if ( !regkey )
-		return WERR_BADFID;
-
-	*r->out.value_length = *r->out.type = REG_NONE;
-	
-	DEBUG(7,("_reg_info: policy key name = [%s]\n", regkey->key->name));
-	DEBUG(7,("_reg_info: policy key type = [%08x]\n", regkey->key->type));
-	
-	/* Handle QueryValue calls on HKEY_PERFORMANCE_DATA */
-	if(regkey->key->type == REG_KEY_HKPD) 
-	{
-		if (strequal(r->in.value_name->name, "Global"))	{
-			if (!prs_init(&prs_hkpd, *r->in.data_size, p->mem_ctx, MARSHALL))
-				return WERR_NOMEM;
-			status = reg_perfcount_get_hkpd(
-				&prs_hkpd, *r->in.data_size, &outbuf_size, NULL);
-			outbuf = (uint8_t *)prs_hkpd.data_p;
-			free_prs = True;
-		}
-		else if (strequal(r->in.value_name->name, "Counter 009")) {
-			outbuf_size = reg_perfcount_get_counter_names(
-				reg_perfcount_get_base_index(),
-				(char **)(void *)&outbuf);
-			free_buf = True;
-		}
-		else if (strequal(r->in.value_name->name, "Explain 009")) {
-			outbuf_size = reg_perfcount_get_counter_help(
-				reg_perfcount_get_base_index(),
-				(char **)(void *)&outbuf);
-			free_buf = True;
-		}
-		else if (isdigit(r->in.value_name->name[0])) {
-			/* we probably have a request for a specific object
-			 * here */
-			if (!prs_init(&prs_hkpd, *r->in.data_size, p->mem_ctx, MARSHALL))
-				return WERR_NOMEM;
-			status = reg_perfcount_get_hkpd(
-				&prs_hkpd, *r->in.data_size, &outbuf_size,
-				r->in.value_name->name);
-			outbuf = (uint8_t *)prs_hkpd.data_p;
-			free_prs = True;
-		}
-		else {
-			DEBUG(3,("Unsupported key name [%s] for HKPD.\n",
-				 r->in.value_name->name));
-			return WERR_BADFILE;
-		}
-
-		*r->out.type = REG_BINARY;
-	}
-	else {
-		struct registry_value *val;
-
-		status = reg_queryvalue(p->mem_ctx, regkey, r->in.value_name->name,
-					&val);
-		if (!W_ERROR_IS_OK(status)) {
-			if (r->out.data_size) {
-				*r->out.data_size = 0;
-			}
-			if (r->out.value_length) {
-				*r->out.value_length = 0;
-			}
-			return status;
-		}
-
-		status = registry_push_value(p->mem_ctx, val, &val_blob);
-		if (!W_ERROR_IS_OK(status)) {
-			return status;
-		}
-
-		outbuf = val_blob.data;
-		outbuf_size = val_blob.length;
-		*r->out.type = val->type;
-	}
-
-	*r->out.value_length = outbuf_size;
-
-	if ( *r->in.data_size == 0 || !r->out.data ) {
-		status = WERR_OK;
-	} else if ( *r->out.value_length > *r->in.data_size ) {
-		status = WERR_MORE_DATA;
-	} else {
-		memcpy( r->out.data, outbuf, *r->out.value_length );
-		status = WERR_OK;
-	}
-
-	*r->out.data_size = *r->out.value_length;
-
-	if (free_prs) prs_mem_free(&prs_hkpd);
-	if (free_buf) SAFE_FREE(outbuf);
-
-	return status;
-}
-
-/*****************************************************************************
- Implementation of REG_QUERY_KEY
- ****************************************************************************/
-
-WERROR _winreg_QueryInfoKey(pipes_struct *p, struct winreg_QueryInfoKey *r)
-{
-	WERROR 	status = WERR_OK;
-	struct registry_key *regkey = find_regkey_by_hnd( p, r->in.handle );
-	
-	if ( !regkey )
-		return WERR_BADFID;
-
-	r->out.classname->name = NULL;
-
-	status = reg_queryinfokey(regkey, r->out.num_subkeys, r->out.max_subkeylen,
-				  r->out.max_classlen, r->out.num_values, r->out.max_valnamelen,
-				  r->out.max_valbufsize, r->out.secdescsize,
-				  r->out.last_changed_time);
-	if (!W_ERROR_IS_OK(status)) {
-		return status;
-	}
-
-	/*
-	 * These calculations account for the registry buffers being
-	 * UTF-16. They are inexact at best, but so far they worked.
-	 */
-
-	*r->out.max_subkeylen *= 2;
-
-	*r->out.max_valnamelen += 1;
-	*r->out.max_valnamelen *= 2;
-	
-	return WERR_OK;
-}
-
-
-/*****************************************************************************
- Implementation of REG_GETVERSION
- ****************************************************************************/
- 
-WERROR _winreg_GetVersion(pipes_struct *p, struct winreg_GetVersion *r)
-{
-	struct registry_key *regkey = find_regkey_by_hnd( p, r->in.handle );
-	
-	if ( !regkey )
-		return WERR_BADFID;
-	
-	return reg_getversion(r->out.version);
-}
-
-
-/*****************************************************************************
- Implementation of REG_ENUM_KEY
- ****************************************************************************/
- 
-WERROR _winreg_EnumKey(pipes_struct *p, struct winreg_EnumKey *r)
-{
-	WERROR err;
-	struct registry_key *key = find_regkey_by_hnd( p, r->in.handle );
-	
-	if ( !key )
-		return WERR_BADFID; 
-
-	if ( !r->in.name || !r->in.keyclass )
-		return WERR_INVALID_PARAM;
-
-	DEBUG(8,("_reg_enum_key: enumerating key [%s]\n", key->key->name));
-
-	err = reg_enumkey(p->mem_ctx, key, r->in.enum_index, (char **)&r->out.name->name,
-			  r->out.last_changed_time);
-	if (!W_ERROR_IS_OK(err)) {
-		return err;
-	}
-	r->out.keyclass->name = "";
-	return WERR_OK;
-}
-
-/*****************************************************************************
- Implementation of REG_ENUM_VALUE
- ****************************************************************************/
-
-WERROR _winreg_EnumValue(pipes_struct *p, struct winreg_EnumValue *r)
-{
-	WERROR err;
-	struct registry_key *key = find_regkey_by_hnd( p, r->in.handle );
-	char *valname;
-	struct registry_value *val;
-	DATA_BLOB value_blob;
-	
-	if ( !key )
-		return WERR_BADFID;
-
-	if ( !r->in.name )
-		return WERR_INVALID_PARAM;
-
-	DEBUG(8,("_winreg_EnumValue: enumerating values for key [%s]\n",
-		 key->key->name));
-
-	err = reg_enumvalue(p->mem_ctx, key, r->in.enum_index, &valname, &val);
-	if (!W_ERROR_IS_OK(err)) {
-		return err;
-	}
-
-	err = registry_push_value(p->mem_ctx, val, &value_blob);
-	if (!W_ERROR_IS_OK(err)) {
-		return err;
-	}
-
-	if (r->out.name != NULL) {
-		r->out.name->name = valname;
-	}
-
-	if (r->out.type != NULL) {
-		*r->out.type = val->type;
-	}
-
-	if (r->out.value != NULL) {
-		if ((r->out.size == NULL) || (r->out.length == NULL)) {
-			return WERR_INVALID_PARAM;
-		}
-
-		if (value_blob.length > *r->out.size) {
-			return WERR_MORE_DATA;
-		}
-
-		memcpy( r->out.value, value_blob.data, value_blob.length );
-	}
-
-	if (r->out.length != NULL) {
-		*r->out.length = value_blob.length;
-	}
-	if (r->out.size != NULL) {
-		*r->out.size = value_blob.length;
-	}
-
-	return WERR_OK;
-}
-
-/*******************************************************************
- reg_shutdwon
- ********************************************************************/
-
-WERROR _winreg_InitiateSystemShutdown(pipes_struct *p, struct winreg_InitiateSystemShutdown *r)
-{
-	struct winreg_InitiateSystemShutdownEx s;
-
-	s.in.hostname = r->in.hostname;
-	s.in.message = r->in.message;
-	s.in.timeout = r->in.timeout;
-	s.in.force_apps = r->in.force_apps;
-	s.in.reboot = r->in.reboot;
-	s.in.reason = 0;
-
-	/* thunk down to _winreg_InitiateSystemShutdownEx() 
-	   (just returns a status) */
-	
-	return _winreg_InitiateSystemShutdownEx( p, &s );
-}
-
-/*******************************************************************
- reg_shutdown_ex
- ********************************************************************/
-
-#define SHUTDOWN_R_STRING "-r"
-#define SHUTDOWN_F_STRING "-f"
-
-
-WERROR _winreg_InitiateSystemShutdownEx(pipes_struct *p, struct winreg_InitiateSystemShutdownEx *r)
-{
-	char *shutdown_script = NULL;
-	char *msg = NULL;
-	char *chkmsg = NULL;
-	fstring str_timeout;
-	fstring str_reason;
-	fstring reboot;
-	fstring f;
-	int ret;
-	bool can_shutdown;
-
- 	shutdown_script = talloc_strdup(p->mem_ctx, lp_shutdown_script());
-	if (!shutdown_script) {
-		return WERR_NOMEM;
-	}
-	if (!*shutdown_script) {
-		return WERR_ACCESS_DENIED;
-	}
-
-	/* pull the message string and perform necessary sanity checks on it */
-
-	if ( r->in.message && r->in.message->name && r->in.message->name->name ) {
-		if ( (msg = talloc_strdup(p->mem_ctx, r->in.message->name->name )) == NULL ) {
-			return WERR_NOMEM;
-		}
-		chkmsg = TALLOC_ARRAY(p->mem_ctx, char, strlen(msg)+1);
-		if (!chkmsg) {
-			return WERR_NOMEM;
-		}
-		alpha_strcpy(chkmsg, msg, NULL, strlen(msg)+1);
-	}
-
-	fstr_sprintf(str_timeout, "%d", r->in.timeout);
-	fstr_sprintf(reboot, r->in.reboot ? SHUTDOWN_R_STRING : "");
-	fstr_sprintf(f, r->in.force_apps ? SHUTDOWN_F_STRING : "");
-	fstr_sprintf(str_reason, "%d", r->in.reason );
-
-	shutdown_script = talloc_all_string_sub(p->mem_ctx,
-				shutdown_script, "%z", chkmsg ? chkmsg : "");
-	if (!shutdown_script) {
-		return WERR_NOMEM;
-	}
-	shutdown_script = talloc_all_string_sub(p->mem_ctx,
-					shutdown_script, "%t", str_timeout);
-	if (!shutdown_script) {
-		return WERR_NOMEM;
-	}
-	shutdown_script = talloc_all_string_sub(p->mem_ctx,
-						shutdown_script, "%r", reboot);
-	if (!shutdown_script) {
-		return WERR_NOMEM;
-	}
-	shutdown_script = talloc_all_string_sub(p->mem_ctx,
-						shutdown_script, "%f", f);
-	if (!shutdown_script) {
-		return WERR_NOMEM;
-	}
-	shutdown_script = talloc_all_string_sub(p->mem_ctx,
-					shutdown_script, "%x", str_reason);
-	if (!shutdown_script) {
-		return WERR_NOMEM;
-	}
-
-	can_shutdown = user_has_privileges( p->pipe_user.nt_user_token, &se_remote_shutdown );
-
-	/* IF someone has privs, run the shutdown script as root. OTHERWISE run it as not root
-	   Take the error return from the script and provide it as the Windows return code. */
-
-	/********** BEGIN SeRemoteShutdownPrivilege BLOCK **********/
-
-	if ( can_shutdown )
-		become_root();
-
-	ret = smbrun( shutdown_script, NULL );
-
-	if ( can_shutdown )
-		unbecome_root();
-
-	/********** END SeRemoteShutdownPrivilege BLOCK **********/
-
-	DEBUG(3,("_reg_shutdown_ex: Running the command `%s' gave %d\n",
-		shutdown_script, ret));
-
-	return (ret == 0) ? WERR_OK : WERR_ACCESS_DENIED;
-}
-
-/*******************************************************************
- reg_abort_shutdwon
- ********************************************************************/
-
-WERROR _winreg_AbortSystemShutdown(pipes_struct *p, struct winreg_AbortSystemShutdown *r)
-{
-	const char *abort_shutdown_script;
-	int ret;
-	bool can_shutdown;
-
-	abort_shutdown_script = lp_abort_shutdown_script();
-
-	if (!*abort_shutdown_script)
-		return WERR_ACCESS_DENIED;
-
-	can_shutdown = user_has_privileges( p->pipe_user.nt_user_token, &se_remote_shutdown );
-
-	/********** BEGIN SeRemoteShutdownPrivilege BLOCK **********/
-
-	if ( can_shutdown )
-		become_root();
-
-	ret = smbrun( abort_shutdown_script, NULL );
-
-	if ( can_shutdown )
-		unbecome_root();
-
-	/********** END SeRemoteShutdownPrivilege BLOCK **********/
-
-	DEBUG(3,("_reg_abort_shutdown: Running the command `%s' gave %d\n",
-		abort_shutdown_script, ret));
-
-	return (ret == 0) ? WERR_OK : WERR_ACCESS_DENIED;
-}
-
-/*******************************************************************
- ********************************************************************/
-
-static int validate_reg_filename(TALLOC_CTX *ctx, char **pp_fname )
-{
-	char *p = NULL;
-	int num_services = lp_numservices();
-	int snum = -1;
-	const char *share_path;
-	char *fname = *pp_fname;
-
-	/* convert to a unix path, stripping the C:\ along the way */
-
-	if (!(p = valid_share_pathname(ctx, fname))) {
-		return -1;
-	}
-
-	/* has to exist within a valid file share */
-
-	for (snum=0; snum<num_services; snum++) {
-		if (!lp_snum_ok(snum) || lp_print_ok(snum)) {
-			continue;
-		}
-
-		share_path = lp_pathname(snum);
-
-		/* make sure we have a path (e.g. [homes] ) */
-		if (strlen(share_path) == 0) {
-			continue;
-		}
-
-		if (strncmp(share_path, p, strlen(share_path)) == 0) {
-			break;
-		}
-	}
-
-	*pp_fname = p;
-	return (snum < num_services) ? snum : -1;
-}
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _winreg_RestoreKey(pipes_struct *p, struct winreg_RestoreKey *r)
-{
-	struct registry_key *regkey = find_regkey_by_hnd( p, r->in.handle );
-	char *fname = NULL;
-	int             snum;
-
-	if ( !regkey )
-		return WERR_BADFID;
-
-	if ( !r->in.filename || !r->in.filename->name )
-		return WERR_INVALID_PARAM;
-
-	fname = talloc_strdup(p->mem_ctx, r->in.filename->name);
-	if (!fname) {
-		return WERR_NOMEM;
-	}
-
-	DEBUG(8,("_winreg_RestoreKey: verifying restore of key [%s] from "
-		 "\"%s\"\n", regkey->key->name, fname));
-
-	if ((snum = validate_reg_filename(p->mem_ctx, &fname)) == -1)
-		return WERR_OBJECT_PATH_INVALID;
-
-	/* user must posses SeRestorePrivilege for this this proceed */
-
-	if ( !user_has_privileges( p->pipe_user.nt_user_token, &se_restore ) )
-		return WERR_ACCESS_DENIED;
-
-	DEBUG(2,("_winreg_RestoreKey: Restoring [%s] from %s in share %s\n",
-		 regkey->key->name, fname, lp_servicename(snum) ));
-
-	return reg_restorekey(regkey, fname);
-}
-
-WERROR _winreg_SaveKey(pipes_struct *p, struct winreg_SaveKey *r)
-{
-	struct registry_key *regkey = find_regkey_by_hnd( p, r->in.handle );
-	char *fname = NULL;
-	int snum = -1;
-
-	if ( !regkey )
-		return WERR_BADFID;
-
-	if ( !r->in.filename || !r->in.filename->name )
-		return WERR_INVALID_PARAM;
-
-	fname = talloc_strdup(p->mem_ctx, r->in.filename->name);
-	if (!fname) {
-		return WERR_NOMEM;
-	}
-
-	DEBUG(8,("_winreg_SaveKey: verifying backup of key [%s] to \"%s\"\n",
-		 regkey->key->name, fname));
-
-	if ((snum = validate_reg_filename(p->mem_ctx, &fname)) == -1 )
-		return WERR_OBJECT_PATH_INVALID;
-
-	DEBUG(2,("_winreg_SaveKey: Saving [%s] to %s in share %s\n",
-		 regkey->key->name, fname, lp_servicename(snum) ));
-
-	return reg_savekey(regkey, fname);
-}
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _winreg_SaveKeyEx(pipes_struct *p, struct winreg_SaveKeyEx *r)
-{
-	/* fill in your code here if you think this call should
-	   do anything */
-
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _winreg_CreateKey( pipes_struct *p, struct winreg_CreateKey *r)
-{
-	struct registry_key *parent = find_regkey_by_hnd(p, r->in.handle);
-	struct registry_key *new_key;
-	WERROR result;
-
-	if ( !parent )
-		return WERR_BADFID;
-
-	DEBUG(10, ("_winreg_CreateKey called with parent key '%s' and "
-		   "subkey name '%s'\n", parent->key->name, r->in.name.name));
-
-	result = reg_createkey(NULL, parent, r->in.name.name, r->in.access_mask,
-			       &new_key, r->out.action_taken);
-	if (!W_ERROR_IS_OK(result)) {
-		return result;
-	}
-
-	if (!create_policy_hnd(p, r->out.new_handle, free_regkey, new_key)) {
-		TALLOC_FREE(new_key);
-		return WERR_BADFILE;
-	}
-
-	return WERR_OK;
-}
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _winreg_SetValue(pipes_struct *p, struct winreg_SetValue *r)
-{
-	struct registry_key *key = find_regkey_by_hnd(p, r->in.handle);
-	struct registry_value *val;
-	WERROR status;
-
-	if ( !key )
-		return WERR_BADFID;
-
-	DEBUG(8,("_reg_set_value: Setting value for [%s:%s]\n", 
-			 key->key->name, r->in.name.name));
-
-	status = registry_pull_value(p->mem_ctx, &val, r->in.type, r->in.data, 
-								 r->in.size, r->in.size);
-	if (!W_ERROR_IS_OK(status)) {
-		return status;
-	}
-
-	return reg_setvalue(key, r->in.name.name, val);
-}
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _winreg_DeleteKey(pipes_struct *p, struct winreg_DeleteKey *r)
-{
-	struct registry_key *parent = find_regkey_by_hnd(p, r->in.handle);
-
-	if ( !parent )
-		return WERR_BADFID;
-
-	return reg_deletekey(parent, r->in.key.name);
-}
-
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _winreg_DeleteValue(pipes_struct *p, struct winreg_DeleteValue *r)
-{
-	struct registry_key *key = find_regkey_by_hnd(p, r->in.handle);
-	
-	if ( !key )
-		return WERR_BADFID;
-
-	return reg_deletevalue(key, r->in.value.name);
-}
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _winreg_GetKeySecurity(pipes_struct *p, struct winreg_GetKeySecurity *r)
-{
-	struct registry_key *key = find_regkey_by_hnd(p, r->in.handle);
-	WERROR err;
-	struct security_descriptor *secdesc;
-	uint8 *data;
-	size_t len;
-
-	if ( !key )
-		return WERR_BADFID;
-		
-	/* access checks first */
-	
-	if ( !(key->key->access_granted & STD_RIGHT_READ_CONTROL_ACCESS) )
-		return WERR_ACCESS_DENIED;
-
-	err = reg_getkeysecurity(p->mem_ctx, key, &secdesc);
-	if (!W_ERROR_IS_OK(err)) {
-		return err;
-	}
-
-	err = ntstatus_to_werror(marshall_sec_desc(p->mem_ctx, secdesc,
-						   &data, &len));
-	if (!W_ERROR_IS_OK(err)) {
-		return err;
-	}
-
-	if (len > r->out.sd->size) {
-		r->out.sd->size = len;
-		return WERR_INSUFFICIENT_BUFFER;
-	}
-
-	r->out.sd->size = len;
-	r->out.sd->len = len;
-	r->out.sd->data = data;
-		
-	return WERR_OK;
-}
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _winreg_SetKeySecurity(pipes_struct *p, struct winreg_SetKeySecurity *r)
-{
-	struct registry_key *key = find_regkey_by_hnd(p, r->in.handle);
-	struct security_descriptor *secdesc;
-	WERROR err;
-
-	if ( !key )
-		return WERR_BADFID;
-		
-	/* access checks first */
-	
-	if ( !(key->key->access_granted & STD_RIGHT_WRITE_DAC_ACCESS) )
-		return WERR_ACCESS_DENIED;
-
-	err = ntstatus_to_werror(unmarshall_sec_desc(p->mem_ctx, r->in.sd->data,
-						     r->in.sd->len, &secdesc));
-	if (!W_ERROR_IS_OK(err)) {
-		return err;
-	}
-
-	return reg_setkeysecurity(key, secdesc);
-}
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _winreg_FlushKey(pipes_struct *p, struct winreg_FlushKey *r)
-{
-	/* I'm just replying OK because there's not a lot 
-	   here I see to do i  --jerry */
-	
-	return WERR_OK;
-}
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _winreg_UnLoadKey(pipes_struct *p, struct winreg_UnLoadKey *r)
-{
-	/* fill in your code here if you think this call should
-	   do anything */
-
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _winreg_ReplaceKey(pipes_struct *p, struct winreg_ReplaceKey *r)
-{
-	/* fill in your code here if you think this call should
-	   do anything */
-
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _winreg_LoadKey(pipes_struct *p, struct winreg_LoadKey *r)
-{
-	/* fill in your code here if you think this call should
-	   do anything */
-
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _winreg_NotifyChangeKeyValue(pipes_struct *p, struct winreg_NotifyChangeKeyValue *r)
-{
-	/* fill in your code here if you think this call should
-	   do anything */
-
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _winreg_QueryMultipleValues(pipes_struct *p, struct winreg_QueryMultipleValues *r)
-{
-	/* fill in your code here if you think this call should
-	   do anything */
-
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-
-/*******************************************************************
- ********************************************************************/
-
-WERROR _winreg_QueryMultipleValues2(pipes_struct *p, struct winreg_QueryMultipleValues2 *r)
-{
-	/* fill in your code here if you think this call should
-	   do anything */
-
-	p->rng_fault_state = True;
-	return WERR_NOT_SUPPORTED;
-}
-

Modified: branches/samba/upstream/source/rpc_server/srv_wkssvc_nt.c
===================================================================
--- branches/samba/upstream/source/rpc_server/srv_wkssvc_nt.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpc_server/srv_wkssvc_nt.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,11 +4,10 @@
  *
  *  Copyright (C) Andrew Tridgell		1992-1997,
  *  Copyright (C) Gerald (Jerry) Carter		2006.
- *  Copyright (C) Guenther Deschner		2007-2008.
- *
+ *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -17,32 +16,39 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 /* This is the implementation of the wks interface. */
 
 #include "includes.h"
-#include "libnet/libnet.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_SRV
 
 /*******************************************************************
- Fill in the values for the struct wkssvc_NetWkstaInfo100.
+ Fill in the valiues for the struct wkssvc_NetWkstaInfo100.
  ********************************************************************/
 
 static void create_wks_info_100(struct wkssvc_NetWkstaInfo100 *info100)
 {
-	info100->platform_id	 = PLATFORM_ID_NT;	/* unknown */
-	info100->version_major	 = lp_major_announce_version();
-	info100->version_minor	 = lp_minor_announce_version();
+	pstring my_name;
+	pstring domain;
 
-	info100->server_name = talloc_asprintf_strupper_m(
-		info100, "%s", global_myname());
-	info100->domain_name = talloc_asprintf_strupper_m(
-		info100, "%s", lp_workgroup());
+	pstrcpy (my_name, global_myname());
+	strupper_m(my_name);
 
+	pstrcpy (domain, lp_workgroup());
+	strupper_m(domain);
+	
+	info100->platform_id     = 0x000001f4; 	/* unknown */
+	info100->version_major   = lp_major_announce_version(); 
+	info100->version_minor   = lp_minor_announce_version();   
+
+	info100->server_name = talloc_strdup( info100, my_name );
+	info100->domain_name = talloc_strdup( info100, domain );
+
 	return;
 }
 
@@ -50,7 +56,7 @@
  only supports info level 100 at the moment.
  ********************************************************************/
 
-WERROR _wkssvc_NetWkstaGetInfo(pipes_struct *p, struct wkssvc_NetWkstaGetInfo *r)
+WERROR _wkssvc_NetWkstaGetInfo( pipes_struct *p, struct wkssvc_NetWkstaGetInfo *r)
 {
 	struct wkssvc_NetWkstaInfo100 *wks100 = NULL;
 	
@@ -74,7 +80,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetWkstaSetInfo(pipes_struct *p, struct wkssvc_NetWkstaSetInfo *r)
+WERROR _wkssvc_NetWkstaSetInfo( pipes_struct *p, struct wkssvc_NetWkstaSetInfo *r)
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -84,7 +90,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetWkstaEnumUsers(pipes_struct *p, struct wkssvc_NetWkstaEnumUsers *r)
+WERROR _wkssvc_NetWkstaEnumUsers( pipes_struct *p, struct wkssvc_NetWkstaEnumUsers *r)
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -94,7 +100,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetrWkstaUserGetInfo(pipes_struct *p, struct wkssvc_NetrWkstaUserGetInfo *r)
+WERROR _WKSSVC_NETRWKSTAUSERGETINFO( pipes_struct *p, struct WKSSVC_NETRWKSTAUSERGETINFO *r )
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -104,7 +110,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetrWkstaUserSetInfo(pipes_struct *p, struct wkssvc_NetrWkstaUserSetInfo *r)
+WERROR _WKSSVC_NETRWKSTAUSERSETINFO( pipes_struct *p, struct WKSSVC_NETRWKSTAUSERSETINFO *r )
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -114,7 +120,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetWkstaTransportEnum(pipes_struct *p, struct wkssvc_NetWkstaTransportEnum *r)
+WERROR _wkssvc_NetWkstaTransportEnum( pipes_struct *p, struct wkssvc_NetWkstaTransportEnum *r)
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -124,7 +130,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetrWkstaTransportAdd(pipes_struct *p, struct wkssvc_NetrWkstaTransportAdd *r)
+WERROR _WKSSVC_NETRWKSTATRANSPORTADD( pipes_struct *p, struct WKSSVC_NETRWKSTATRANSPORTADD *r )
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -134,7 +140,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetrWkstaTransportDel(pipes_struct *p, struct wkssvc_NetrWkstaTransportDel *r)
+WERROR _WKSSVC_NETRWKSTATRANSPORTDEL( pipes_struct *p, struct WKSSVC_NETRWKSTATRANSPORTDEL *r )
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -144,7 +150,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetrUseAdd(pipes_struct *p, struct wkssvc_NetrUseAdd *r)
+WERROR _WKSSVC_NETRUSEADD( pipes_struct *p, struct WKSSVC_NETRUSEADD *r )
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -154,7 +160,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetrUseGetInfo(pipes_struct *p, struct wkssvc_NetrUseGetInfo *r)
+WERROR _WKSSVC_NETRUSEGETINFO( pipes_struct *p, struct WKSSVC_NETRUSEGETINFO *r )
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -164,7 +170,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetrUseDel(pipes_struct *p, struct wkssvc_NetrUseDel *r)
+WERROR _WKSSVC_NETRUSEDEL( pipes_struct *p, struct WKSSVC_NETRUSEDEL *r )
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -174,7 +180,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetrUseEnum(pipes_struct *p, struct wkssvc_NetrUseEnum *r)
+WERROR _WKSSVC_NETRUSEENUM( pipes_struct *p, struct WKSSVC_NETRUSEENUM *r )
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -184,7 +190,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetrMessageBufferSend(pipes_struct *p, struct wkssvc_NetrMessageBufferSend *r)
+WERROR _WKSSVC_NETRMESSAGEBUFFERSEND( pipes_struct *p, struct WKSSVC_NETRMESSAGEBUFFERSEND *r )
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -194,7 +200,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetrWorkstationStatisticsGet(pipes_struct *p, struct wkssvc_NetrWorkstationStatisticsGet *r) 
+WERROR _WKSSVC_NETRWORKSTATIONSTATISTICSGET( pipes_struct *p, struct WKSSVC_NETRWORKSTATIONSTATISTICSGET *r )
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -204,7 +210,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetrLogonDomainNameAdd(pipes_struct *p, struct wkssvc_NetrLogonDomainNameAdd *r)
+WERROR _WKSSVC_NETRLOGONDOMAINNAMEADD( pipes_struct *p, struct WKSSVC_NETRLOGONDOMAINNAMEADD *r )
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -214,7 +220,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetrLogonDomainNameDel(pipes_struct *p, struct wkssvc_NetrLogonDomainNameDel *r)
+WERROR _WKSSVC_NETRLOGONDOMAINNAMEDEL( pipes_struct *p, struct WKSSVC_NETRLOGONDOMAINNAMEDEL *r )
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -224,7 +230,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetrJoinDomain(pipes_struct *p, struct wkssvc_NetrJoinDomain *r)
+WERROR _WKSSVC_NETRJOINDOMAIN( pipes_struct *p, struct WKSSVC_NETRJOINDOMAIN *r )
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -234,7 +240,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetrUnjoinDomain(pipes_struct *p, struct wkssvc_NetrUnjoinDomain *r)
+WERROR _WKSSVC_NETRUNJOINDOMAIN( pipes_struct *p, struct WKSSVC_NETRUNJOINDOMAIN *r )
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -244,7 +250,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetrRenameMachineInDomain(pipes_struct *p, struct wkssvc_NetrRenameMachineInDomain *r)
+WERROR _WKSSVC_NETRRENAMEMACHINEINDOMAIN( pipes_struct *p, struct WKSSVC_NETRRENAMEMACHINEINDOMAIN *r )
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -254,7 +260,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetrValidateName(pipes_struct *p, struct wkssvc_NetrValidateName *r)
+WERROR _WKSSVC_NETRVALIDATENAME( pipes_struct *p, struct WKSSVC_NETRVALIDATENAME *r )
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -264,7 +270,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetrGetJoinInformation(pipes_struct *p, struct wkssvc_NetrGetJoinInformation *r)
+WERROR _WKSSVC_NETRGETJOININFORMATION( pipes_struct *p, struct WKSSVC_NETRGETJOININFORMATION *r )
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -274,7 +280,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetrGetJoinableOus(pipes_struct *p, struct wkssvc_NetrGetJoinableOus *r)
+WERROR _WKSSVC_NETRGETJOINABLEOUS( pipes_struct *p, struct WKSSVC_NETRGETJOINABLEOUS *r )
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -282,146 +288,23 @@
 }
 
 /********************************************************************
- _wkssvc_NetrJoinDomain2
  ********************************************************************/
 
-WERROR _wkssvc_NetrJoinDomain2(pipes_struct *p,
-			       struct wkssvc_NetrJoinDomain2 *r)
+WERROR _wkssvc_NetrJoinDomain2(pipes_struct *p, struct wkssvc_NetrJoinDomain2 *r)
 {
-	struct libnet_JoinCtx *j = NULL;
-	char *cleartext_pwd = NULL;
-	char *admin_domain = NULL;
-	char *admin_account = NULL;
-	WERROR werr;
-	struct nt_user_token *token = p->pipe_user.nt_user_token;
-
-	if (!r->in.domain_name) {
-		return WERR_INVALID_PARAM;
-	}
-
-	if (!r->in.admin_account || !r->in.encrypted_password) {
-		return WERR_INVALID_PARAM;
-	}
-
-	if (!user_has_privileges(token, &se_machine_account) &&
-	    !nt_token_check_domain_rid(token, DOMAIN_GROUP_RID_ADMINS) &&
-	    !nt_token_check_domain_rid(token, BUILTIN_ALIAS_RID_ADMINS)) {
-		DEBUG(5,("_wkssvc_NetrJoinDomain2: account doesn't have "
-			"sufficient privileges\n"));
-		return WERR_ACCESS_DENIED;
-	}
-
-	if ((r->in.join_flags & WKSSVC_JOIN_FLAGS_MACHINE_PWD_PASSED) ||
-	    (r->in.join_flags & WKSSVC_JOIN_FLAGS_JOIN_UNSECURE)) {
-		return WERR_NOT_SUPPORTED;
-	}
-
-	werr = decode_wkssvc_join_password_buffer(p->mem_ctx,
-						  r->in.encrypted_password,
-						  &p->session_key,
-						  &cleartext_pwd);
-	if (!W_ERROR_IS_OK(werr)) {
-		return werr;
-	}
-
-	split_domain_user(p->mem_ctx,
-			  r->in.admin_account,
-			  &admin_domain,
-			  &admin_account);
-
-	werr = libnet_init_JoinCtx(p->mem_ctx, &j);
-	if (!W_ERROR_IS_OK(werr)) {
-		return werr;
-	}
-
-	j->in.domain_name	= r->in.domain_name;
-	j->in.account_ou	= r->in.account_ou;
-	j->in.join_flags	= r->in.join_flags;
-	j->in.admin_account	= admin_account;
-	j->in.admin_password	= cleartext_pwd;
-	j->in.debug		= true;
-	j->in.modify_config     = lp_config_backend_is_registry();
-	j->in.msg_ctx		= smbd_messaging_context();
-
-	become_root();
-	werr = libnet_Join(p->mem_ctx, j);
-	unbecome_root();
-
-	if (!W_ERROR_IS_OK(werr)) {
-		DEBUG(5,("_wkssvc_NetrJoinDomain2: libnet_Join failed with: %s\n",
-			j->out.error_string ? j->out.error_string :
-			dos_errstr(werr)));
-	}
-
-	TALLOC_FREE(j);
-	return werr;
+	/* FIXME: Add implementation code here */
+	p->rng_fault_state = True;
+	return WERR_NOT_SUPPORTED;
 }
 
 /********************************************************************
- _wkssvc_NetrUnjoinDomain2
  ********************************************************************/
 
-WERROR _wkssvc_NetrUnjoinDomain2(pipes_struct *p,
-				 struct wkssvc_NetrUnjoinDomain2 *r)
+WERROR _wkssvc_NetrUnjoinDomain2(pipes_struct *p, struct wkssvc_NetrUnjoinDomain2 *r)
 {
-	struct libnet_UnjoinCtx *u = NULL;
-	char *cleartext_pwd = NULL;
-	char *admin_domain = NULL;
-	char *admin_account = NULL;
-	WERROR werr;
-	struct nt_user_token *token = p->pipe_user.nt_user_token;
-
-	if (!r->in.account || !r->in.encrypted_password) {
-		return WERR_INVALID_PARAM;
-	}
-
-	if (!user_has_privileges(token, &se_machine_account) &&
-	    !nt_token_check_domain_rid(token, DOMAIN_GROUP_RID_ADMINS) &&
-	    !nt_token_check_domain_rid(token, BUILTIN_ALIAS_RID_ADMINS)) {
-		DEBUG(5,("_wkssvc_NetrUnjoinDomain2: account doesn't have "
-			"sufficient privileges\n"));
-		return WERR_ACCESS_DENIED;
-	}
-
-	werr = decode_wkssvc_join_password_buffer(p->mem_ctx,
-						  r->in.encrypted_password,
-						  &p->session_key,
-						  &cleartext_pwd);
-	if (!W_ERROR_IS_OK(werr)) {
-		return werr;
-	}
-
-	split_domain_user(p->mem_ctx,
-			  r->in.account,
-			  &admin_domain,
-			  &admin_account);
-
-	werr = libnet_init_UnjoinCtx(p->mem_ctx, &u);
-	if (!W_ERROR_IS_OK(werr)) {
-		return werr;
-	}
-
-	u->in.domain_name	= lp_realm();
-	u->in.unjoin_flags	= r->in.unjoin_flags |
-				  WKSSVC_JOIN_FLAGS_JOIN_TYPE;
-	u->in.admin_account	= admin_account;
-	u->in.admin_password	= cleartext_pwd;
-	u->in.debug		= true;
-	u->in.modify_config     = lp_config_backend_is_registry();
-	u->in.msg_ctx		= smbd_messaging_context();
-
-	become_root();
-	werr = libnet_Unjoin(p->mem_ctx, u);
-	unbecome_root();
-
-	if (!W_ERROR_IS_OK(werr)) {
-		DEBUG(5,("_wkssvc_NetrUnjoinDomain2: libnet_Unjoin failed with: %s\n",
-			u->out.error_string ? u->out.error_string :
-			dos_errstr(werr)));
-	}
-
-	TALLOC_FREE(u);
-	return werr;
+	/* FIXME: Add implementation code here */
+	p->rng_fault_state = True;
+	return WERR_NOT_SUPPORTED;
 }
 
 /********************************************************************
@@ -437,7 +320,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetrValidateName2(pipes_struct *p, struct wkssvc_NetrValidateName2 *r)
+WERROR _WKSSVC_NETRVALIDATENAME2( pipes_struct *p, struct WKSSVC_NETRVALIDATENAME2 *r )
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -447,7 +330,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetrGetJoinableOus2(pipes_struct *p, struct wkssvc_NetrGetJoinableOus2 *r)
+WERROR _WKSSVC_NETRGETJOINABLEOUS2( pipes_struct *p, struct WKSSVC_NETRGETJOINABLEOUS2 *r )
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -457,7 +340,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetrAddAlternateComputerName(pipes_struct *p, struct wkssvc_NetrAddAlternateComputerName *r)
+WERROR _wkssvc_NetrAddAlternateComputerName(pipes_struct *p, struct wkssvc_NetrAddAlternateComputerName *r )
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -477,7 +360,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetrSetPrimaryComputername(pipes_struct *p, struct wkssvc_NetrSetPrimaryComputername *r)
+WERROR _WKSSVC_NETRSETPRIMARYCOMPUTERNAME( pipes_struct *p, struct WKSSVC_NETRSETPRIMARYCOMPUTERNAME *r )
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;
@@ -487,7 +370,7 @@
 /********************************************************************
  ********************************************************************/
 
-WERROR _wkssvc_NetrEnumerateComputerNames(pipes_struct *p, struct wkssvc_NetrEnumerateComputerNames *r)
+WERROR _WKSSVC_NETRENUMERATECOMPUTERNAMES( pipes_struct *p, struct WKSSVC_NETRENUMERATECOMPUTERNAMES *r )
 {
 	/* FIXME: Add implementation code here */
 	p->rng_fault_state = True;

Modified: branches/samba/upstream/source/rpcclient/cmd_dfs.c
===================================================================
--- branches/samba/upstream/source/rpcclient/cmd_dfs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpcclient/cmd_dfs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -24,44 +25,36 @@
 
 /* Check DFS is supported by the remote server */
 
-static WERROR cmd_dfs_version(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
-			      int argc, const char **argv)
+static NTSTATUS cmd_dfs_exist(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                              int argc, const char **argv)
 {
-	enum dfs_ManagerVersion version;
+	uint32 dfs_exists;
 	NTSTATUS result;
 
 	if (argc != 1) {
 		printf("Usage: %s\n", argv[0]);
-		return WERR_OK;
+		return NT_STATUS_OK;
 	}
 
-	result = rpccli_dfs_GetManagerVersion(cli, mem_ctx, &version);
+	result = rpccli_dfs_GetManagerVersion(cli, mem_ctx, &dfs_exists);
 
-	if (!NT_STATUS_IS_OK(result)) {
-		return ntstatus_to_werror(result);
-	}
+	if (NT_STATUS_IS_OK(result))
+		printf("dfs is %spresent\n", dfs_exists ? "" : "not ");
 
-	if (version > 0) {
-		printf("dfs is present (%d)\n", version);
-	} else {
-		printf("dfs is not present\n");
-	}
-
-	return WERR_OK;
+	return result;
 }
 
-static WERROR cmd_dfs_add(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
-			  int argc, const char **argv)
+static NTSTATUS cmd_dfs_add(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                            int argc, const char **argv)
 {
 	NTSTATUS result;
-	WERROR werr;
 	const char *path, *servername, *sharename, *comment;
 	uint32 flags = 0;
 
 	if (argc != 5) {
 		printf("Usage: %s path servername sharename comment\n", 
 		       argv[0]);
-		return WERR_OK;
+		return NT_STATUS_OK;
 	}
 
 	path = argv[1];
@@ -69,111 +62,117 @@
 	sharename = argv[3];
 	comment = argv[4];
 
-	result = rpccli_dfs_Add(cli, mem_ctx, path, servername,
-				sharename, comment, flags, &werr);
-	if (!NT_STATUS_IS_OK(result)) {
-		return ntstatus_to_werror(result);
-	}
+	result = rpccli_dfs_Add(cli, mem_ctx, path, servername, 
+			     sharename, comment, flags);
 
-	return werr;
+	return result;
 }
 
-static WERROR cmd_dfs_remove(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
-			     int argc, const char **argv)
+static NTSTATUS cmd_dfs_remove(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                               int argc, const char **argv)
 {
 	NTSTATUS result;
-	WERROR werr;
 	const char *path, *servername, *sharename;
 
 	if (argc != 4) {
 		printf("Usage: %s path servername sharename\n", argv[0]);
-		return WERR_OK;
+		return NT_STATUS_OK;
 	}
 
 	path = argv[1];
 	servername = argv[2];
 	sharename = argv[3];
 
-	result = rpccli_dfs_Remove(cli, mem_ctx, path, servername,
-				   sharename, &werr);
-	if (!NT_STATUS_IS_OK(result)) {
-		return ntstatus_to_werror(result);
-	}
+	result = rpccli_dfs_Remove(cli, mem_ctx, path, servername, 
+				sharename);
 
-	return werr;
+	return result;
 }
 
 /* Display a DFS_INFO_1 structure */
 
-static void display_dfs_info_1(struct dfs_Info1 *info1)
+static void display_dfs_info_1(NETDFS_DFS_INFO1 *info1)
 {
-	printf("path: %s\n", info1->path);
+	fstring temp;
+
+	unistr2_to_ascii(temp, &info1->path, sizeof(temp) - 1);
+	printf("path: %s\n", temp);
 }
 
 /* Display a DFS_INFO_2 structure */
 
-static void display_dfs_info_2(struct dfs_Info2 *info2)
+static void display_dfs_info_2(NETDFS_DFS_INFO2 *info2)
 {
-	printf("path: %s\n", info2->path);
-	printf("\tcomment: %s\n", info2->comment);
+	fstring temp;
 
+	unistr2_to_ascii(temp, &info2->path, sizeof(temp) - 1);
+	printf("path: %s\n", temp);
+
+	unistr2_to_ascii(temp, &info2->comment, sizeof(temp) - 1);
+	printf("\tcomment: %s\n", temp);
+
 	printf("\tstate: %d\n", info2->state);
 	printf("\tnum_stores: %d\n", info2->num_stores);
 }
 
 /* Display a DFS_INFO_3 structure */
 
-static void display_dfs_info_3(struct dfs_Info3 *info3)
+static void display_dfs_info_3(NETDFS_DFS_INFO3 *info3)
 {
+	fstring temp;
 	int i;
 
-	printf("path: %s\n", info3->path);
+	unistr2_to_ascii(temp, &info3->path, sizeof(temp) - 1);
+	printf("path: %s\n", temp);
 
-	printf("\tcomment: %s\n", info3->comment);
+	unistr2_to_ascii(temp, &info3->comment, sizeof(temp) - 1);
+	printf("\tcomment: %s\n", temp);
 
 	printf("\tstate: %d\n", info3->state);
 	printf("\tnum_stores: %d\n", info3->num_stores);
 
 	for (i = 0; i < info3->num_stores; i++) {
-		struct dfs_StorageInfo *dsi = &info3->stores[i];
+		NETDFS_DFS_STORAGEINFO *dsi = &info3->stores[i];
 
-		printf("\t\tstorage[%d] server: %s\n", i, dsi->server);
+		unistr2_to_ascii(temp, &dsi->server, sizeof(temp) - 1);
+		printf("\t\tstorage[%d] server: %s\n", i, temp);
 
-		printf("\t\tstorage[%d] share: %s\n", i, dsi->share);
+		unistr2_to_ascii(temp, &dsi->share, sizeof(temp) - 1);
+		printf("\t\tstorage[%d] share: %s\n", i, temp);
 	}
 }
 
 
 /* Display a DFS_INFO_CTR structure */
-static void display_dfs_info(uint32 level, union dfs_Info *ctr)
+static void display_dfs_info(NETDFS_DFS_INFO_CTR *ctr)
 {
-	switch (level) {
+	switch (ctr->switch_value) {
 		case 0x01:
-			display_dfs_info_1(ctr->info1);
+			display_dfs_info_1(&ctr->u.info1);
 			break;
 		case 0x02:
-			display_dfs_info_2(ctr->info2);
+			display_dfs_info_2(&ctr->u.info2);
 			break;
 		case 0x03:
-			display_dfs_info_3(ctr->info3);
+			display_dfs_info_3(&ctr->u.info3);
 			break;
 		default:
 			printf("unsupported info level %d\n", 
-			       level);
+			       ctr->switch_value);
 			break;
 	}
 }
 
-static void display_dfs_enumstruct(struct dfs_EnumStruct *ctr)
+static void display_dfs_enumstruct(NETDFS_DFS_ENUMSTRUCT *ctr)
 {
 	int i;
 	
 	/* count is always the first element, so we can just use info1 here */
-	for (i = 0; i < ctr->e.info1->count; i++) {
+	for (i = 0; i < ctr->e.u.info1.count; i++) {
 		switch (ctr->level) {
-		case 1: display_dfs_info_1(&ctr->e.info1->s[i]); break;
-		case 2: display_dfs_info_2(&ctr->e.info2->s[i]); break;
-		case 3: display_dfs_info_3(&ctr->e.info3->s[i]); break;
+		case 1: display_dfs_info_1(&ctr->e.u.info1.s[i]); break;
+		case 2: display_dfs_info_2(&ctr->e.u.info2.s[i]); break;
+		case 3: display_dfs_info_3(&ctr->e.u.info3.s[i]); break;
 		default:
 				printf("unsupported info level %d\n", 
 			       ctr->level);
@@ -184,115 +183,47 @@
 
 /* Enumerate dfs shares */
 
-static WERROR cmd_dfs_enum(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
-			   int argc, const char **argv)
+static NTSTATUS cmd_dfs_enum(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                             int argc, const char **argv)
 {
-	struct dfs_EnumStruct str;
-	struct dfs_EnumArray1 info1;
-	struct dfs_EnumArray2 info2;
-	struct dfs_EnumArray3 info3;
-	struct dfs_EnumArray4 info4;
-	struct dfs_EnumArray200 info200;
-	struct dfs_EnumArray300 info300;
-
+	NETDFS_DFS_ENUMSTRUCT str;
+	NETDFS_DFS_ENUMINFO_CTR ctr;
 	NTSTATUS result;
-	WERROR werr;
+	uint32 info_level = 1;
 	uint32 total = 0;
 
 	if (argc > 2) {
 		printf("Usage: %s [info_level]\n", argv[0]);
-		return WERR_OK;
+		return NT_STATUS_OK;
 	}
 
-	str.level = 1;
 	if (argc == 2)
-		str.level = atoi(argv[1]);
+		info_level = atoi(argv[1]);
 
-	switch (str.level) {
-	case 1: str.e.info1 = &info1; ZERO_STRUCT(info1); break;
-	case 2: str.e.info2 = &info2; ZERO_STRUCT(info2); break;
-	case 3: str.e.info3 = &info3; ZERO_STRUCT(info3); break;
-	case 4: str.e.info4 = &info4; ZERO_STRUCT(info4); break;
-	case 200: str.e.info200 = &info200; ZERO_STRUCT(info200); break;
-	case 300: str.e.info300 = &info300; ZERO_STRUCT(info300); break;
-	default:
-			  printf("Unknown info level %d\n", str.level);
-			  break;
-	}
+	ZERO_STRUCT(ctr);
+	init_netdfs_dfs_EnumStruct(&str, info_level, ctr);
+	str.e.ptr0 = 1;
 
-	result = rpccli_dfs_Enum(cli, mem_ctx, str.level, 0xFFFFFFFF, &str,
-				 &total, &werr);
+	result = rpccli_dfs_Enum(cli, mem_ctx, info_level, 0xFFFFFFFF, &str, &total);
 
-	if (NT_STATUS_IS_OK(result)) {
+	if (NT_STATUS_IS_OK(result))
 		display_dfs_enumstruct(&str);
-	}
 
-	return werr;
+	return result;
 }
 
-/* Enumerate dfs shares */
-
-static WERROR cmd_dfs_enumex(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
-			     int argc, const char **argv)
+static NTSTATUS cmd_dfs_getinfo(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
+                                int argc, const char **argv)
 {
-	struct dfs_EnumStruct str;
-	struct dfs_EnumArray1 info1;
-	struct dfs_EnumArray2 info2;
-	struct dfs_EnumArray3 info3;
-	struct dfs_EnumArray4 info4;
-	struct dfs_EnumArray200 info200;
-	struct dfs_EnumArray300 info300;
-
 	NTSTATUS result;
-	WERROR werr;
-	uint32 total = 0;
-
-	if (argc < 2 || argc > 3) {
-		printf("Usage: %s dfs_name [info_level]\n", argv[0]);
-		return WERR_OK;
-	}
-
-	str.level = 1;
-
-	if (argc == 3)
-		str.level = atoi(argv[2]);
-
-	switch (str.level) {
-	case 1: str.e.info1 = &info1; ZERO_STRUCT(info1); break;
-	case 2: str.e.info2 = &info2; ZERO_STRUCT(info2); break;
-	case 3: str.e.info3 = &info3; ZERO_STRUCT(info3); break;
-	case 4: str.e.info4 = &info4; ZERO_STRUCT(info4); break;
-	case 200: str.e.info200 = &info200; ZERO_STRUCT(info200); break;
-	case 300: str.e.info300 = &info300; ZERO_STRUCT(info300); break;
-	default:
-		  printf("Unknown info level %d\n", str.level);
-		  break;
-	}
-
-	result = rpccli_dfs_EnumEx(cli, mem_ctx, argv[1], str.level,
-				   0xFFFFFFFF, &str, &total, &werr);
-
-	if (NT_STATUS_IS_OK(result)) {
-		display_dfs_enumstruct(&str);
-	}
-
-	return werr;
-}
-
-
-static WERROR cmd_dfs_getinfo(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
-			      int argc, const char **argv)
-{
-	NTSTATUS result;
-	WERROR werr;
 	const char *path, *servername, *sharename;
 	uint32 info_level = 1;
-	union dfs_Info ctr;
+	NETDFS_DFS_INFO_CTR ctr;
 
 	if (argc < 4 || argc > 5) {
 		printf("Usage: %s path servername sharename "
                        "[info_level]\n", argv[0]);
-		return WERR_OK;
+		return NT_STATUS_OK;
 	}
 
 	path = argv[1];
@@ -302,14 +233,13 @@
 	if (argc == 5)
 		info_level = atoi(argv[4]);
 
-	result = rpccli_dfs_GetInfo(cli, mem_ctx, path, servername,
-				    sharename, info_level, &ctr, &werr);
+	result = rpccli_dfs_GetInfo(cli, mem_ctx, path, servername, 
+				  sharename, info_level, &ctr);
 
-	if (NT_STATUS_IS_OK(result)) {
-		display_dfs_info(info_level, &ctr);
-	}
+	if (NT_STATUS_IS_OK(result))
+		display_dfs_info(&ctr);
 
-	return werr;
+	return result;
 }
 
 /* List of commands exported by this module */
@@ -318,12 +248,11 @@
 
 	{ "DFS" },
 
-	{ "dfsversion",	RPC_RTYPE_WERROR, NULL, cmd_dfs_version, PI_NETDFS, NULL, "Query DFS support",    "" },
-	{ "dfsadd",	RPC_RTYPE_WERROR, NULL, cmd_dfs_add,     PI_NETDFS, NULL, "Add a DFS share",      "" },
-	{ "dfsremove",	RPC_RTYPE_WERROR, NULL, cmd_dfs_remove,  PI_NETDFS, NULL, "Remove a DFS share",   "" },
-	{ "dfsgetinfo",	RPC_RTYPE_WERROR, NULL, cmd_dfs_getinfo, PI_NETDFS, NULL, "Query DFS share info", "" },
-	{ "dfsenum",	RPC_RTYPE_WERROR, NULL, cmd_dfs_enum,    PI_NETDFS, NULL, "Enumerate dfs shares", "" },
-	{ "dfsenumex",	RPC_RTYPE_WERROR, NULL, cmd_dfs_enumex,  PI_NETDFS, NULL, "Enumerate dfs shares", "" },
+	{ "dfsexist",  RPC_RTYPE_NTSTATUS, cmd_dfs_exist,   NULL, PI_NETDFS, NULL, "Query DFS support",    "" },
+	{ "dfsadd",    RPC_RTYPE_NTSTATUS, cmd_dfs_add,     NULL, PI_NETDFS, NULL, "Add a DFS share",      "" },
+	{ "dfsremove", RPC_RTYPE_NTSTATUS, cmd_dfs_remove,  NULL, PI_NETDFS, NULL, "Remove a DFS share",   "" },
+	{ "dfsgetinfo",RPC_RTYPE_NTSTATUS, cmd_dfs_getinfo, NULL, PI_NETDFS, NULL, "Query DFS share info", "" },
+	{ "dfsenum",   RPC_RTYPE_NTSTATUS, cmd_dfs_enum,    NULL, PI_NETDFS, NULL, "Enumerate dfs shares", "" },
 
 	{ NULL }
 };

Copied: branches/samba/upstream/source/rpcclient/cmd_ds.c (from rev 1928, branches/samba/upstream/source/rpcclient/cmd_ds.c)
===================================================================
--- branches/samba/upstream/source/rpcclient/cmd_ds.c	                        (rev 0)
+++ branches/samba/upstream/source/rpcclient/cmd_ds.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,85 @@
+/* 
+   Unix SMB/CIFS implementation.
+   RPC pipe client
+
+   Copyright (C) Gerald Carter 2002
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "rpcclient.h"
+
+/* Look up domain related information on a remote host */
+
+static NTSTATUS cmd_ds_dsrole_getprimarydominfo(struct rpc_pipe_client *cli, 
+				     TALLOC_CTX *mem_ctx, int argc, 
+				     const char **argv) 
+{
+	NTSTATUS result;
+	DS_DOMINFO_CTR	ctr;
+	
+	result = rpccli_ds_getprimarydominfo( cli, mem_ctx, DsRolePrimaryDomainInfoBasic, &ctr );
+	if ( NT_STATUS_IS_OK(result) )
+	{
+		printf ("Machine Role = [%d]\n", ctr.basic->machine_role);
+		
+		if ( ctr.basic->flags & DSROLE_PRIMARY_DS_RUNNING )	{
+			printf( "Directory Service is running.\n");
+			printf( "Domain is in %s mode.\n", (ctr.basic->flags & DSROLE_PRIMARY_DS_MIXED_MODE) ? "mixed" : "native" );
+		}
+		else
+			printf( "Directory Service not running on server\n");
+	}
+	
+	return result;
+}
+
+static NTSTATUS cmd_ds_enum_domain_trusts(struct rpc_pipe_client *cli,
+				     TALLOC_CTX *mem_ctx, int argc, 
+				     const char **argv) 
+{
+	NTSTATUS 		result;
+	uint32 			flags = DS_DOMAIN_IN_FOREST;
+	struct ds_domain_trust	 *trusts = NULL;
+	unsigned int 			num_domains = 0;
+	int i;
+	
+	if (argc > 1) {
+		flags = atoi(argv[1]);
+	}
+
+	result = rpccli_ds_enum_domain_trusts( cli, mem_ctx, cli->cli->desthost, flags, 
+		&trusts, &num_domains );
+	
+	printf( "%d domains returned\n", num_domains );
+
+	for (i=0; i<num_domains; i++ ) 
+		printf("%s (%s)\n", trusts[i].dns_domain, trusts[i].netbios_domain);
+	
+	return result;
+}
+
+/* List of commands exported by this module */
+
+struct cmd_set ds_commands[] = {
+
+	{ "LSARPC-DS" },
+
+	{ "dsroledominfo",   RPC_RTYPE_NTSTATUS, cmd_ds_dsrole_getprimarydominfo, NULL, PI_LSARPC_DS, NULL, "Get Primary Domain Information", "" },
+	{ "dsenumdomtrusts", RPC_RTYPE_NTSTATUS, cmd_ds_enum_domain_trusts,       NULL, PI_NETLOGON,  NULL, "Enumerate all trusted domains in an AD forest", "" },
+
+{ NULL }
+};

Deleted: branches/samba/upstream/source/rpcclient/cmd_dssetup.c
===================================================================
--- branches/samba/upstream/source/rpcclient/cmd_dssetup.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpcclient/cmd_dssetup.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,69 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   RPC pipe client
-
-   Copyright (C) Gerald Carter 2002
-   Copyright (C) Guenther Deschner 2008
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-#include "rpcclient.h"
-
-/* Look up domain related information on a remote host */
-
-static WERROR cmd_ds_dsrole_getprimarydominfo(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx, int argc,
-					      const char **argv)
-{
-	NTSTATUS status;
-	WERROR werr;
-	union dssetup_DsRoleInfo info;
-
-	status = rpccli_dssetup_DsRoleGetPrimaryDomainInformation(cli, mem_ctx,
-								  DS_ROLE_BASIC_INFORMATION,
-								  &info,
-								  &werr);
-	if (!NT_STATUS_IS_OK(status)) {
-		return ntstatus_to_werror(status);
-	}
-
-	if (!W_ERROR_IS_OK(werr)) {
-		return werr;
-	}
-
-	printf ("Machine Role = [%d]\n", info.basic.role);
-
-	if (info.basic.flags & DS_ROLE_PRIMARY_DS_RUNNING) {
-		printf("Directory Service is running.\n");
-		printf("Domain is in %s mode.\n",
-			(info.basic.flags & DS_ROLE_PRIMARY_DS_MIXED_MODE) ? "mixed" : "native" );
-	} else {
-		printf("Directory Service not running on server\n");
-	}
-
-	return werr;
-}
-
-/* List of commands exported by this module */
-
-struct cmd_set ds_commands[] = {
-
-	{ "LSARPC-DS" },
-
-	{ "dsroledominfo",   RPC_RTYPE_WERROR, NULL, cmd_ds_dsrole_getprimarydominfo, PI_DSSETUP, NULL, "Get Primary Domain Information", "" },
-
-{ NULL }
-};

Modified: branches/samba/upstream/source/rpcclient/cmd_echo.c
===================================================================
--- branches/samba/upstream/source/rpcclient/cmd_echo.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpcclient/cmd_echo.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -35,7 +36,7 @@
 	if (argc == 2)
 		request = atoi(argv[1]);
 
-	result = rpccli_echo_AddOne(cli, mem_ctx, request, &response);
+	result = rpccli_echo_add_one(cli, mem_ctx, request, &response);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
@@ -51,7 +52,7 @@
 {
 	uint32 size, i;
 	NTSTATUS result;
-	uint8_t *in_data = NULL, *out_data = NULL;
+	char *in_data = NULL, *out_data = NULL;
 
 	if (argc != 2) {
 		printf("Usage: %s num\n", argv[0]);
@@ -59,23 +60,12 @@
 	}
 
 	size = atoi(argv[1]);
-	if ( (in_data = (uint8_t*)SMB_MALLOC(size)) == NULL ) {
-		printf("Failure to allocate buff of %d bytes\n",
-		       size);
-		result = NT_STATUS_NO_MEMORY;
-		goto done;
-	}
-	if ( (out_data = (uint8_t*)SMB_MALLOC(size)) == NULL ) {
-		printf("Failure to allocate buff of %d bytes\n",
-		       size);
-		result = NT_STATUS_NO_MEMORY;
-		goto done;
-	}
+	in_data = SMB_MALLOC(size);
 
 	for (i = 0; i < size; i++)
 		in_data[i] = i & 0xff;
 
-	result = rpccli_echo_EchoData(cli, mem_ctx, size, in_data, out_data);
+	result = rpccli_echo_data(cli, mem_ctx, size, in_data, &out_data);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
@@ -90,7 +80,6 @@
 
 done:
 	SAFE_FREE(in_data);
-	SAFE_FREE(out_data);
 
 	return result;
 }
@@ -101,7 +90,7 @@
 {
 	uint32 size, i;
 	NTSTATUS result;
-	uint8_t *out_data = NULL;
+	char *out_data = NULL;
 
 	if (argc != 2) {
 		printf("Usage: %s num\n", argv[0]);
@@ -109,15 +98,8 @@
 	}
 
 	size = atoi(argv[1]);
-	if ( (out_data = (uint8_t*)SMB_MALLOC(size)) == NULL ) {
-		printf("Failure to allocate buff of %d bytes\n",
-		       size);
-		result = NT_STATUS_NO_MEMORY;
-		goto done;		
-	}
-	
 
-	result = rpccli_echo_SourceData(cli, mem_ctx, size, out_data);
+	result = rpccli_echo_source_data(cli, mem_ctx, size, &out_data);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
@@ -131,8 +113,6 @@
 	}
 
 done:
-
-	SAFE_FREE(out_data);
 	return result;
 }
 
@@ -141,7 +121,7 @@
 {
 	uint32 size, i;
 	NTSTATUS result;
-	uint8_t *in_data = NULL;
+	char *in_data = NULL;
 
 	if (argc != 2) {
 		printf("Usage: %s num\n", argv[0]);
@@ -149,17 +129,12 @@
 	}
 
 	size = atoi(argv[1]);
-	if ( (in_data = (uint8_t*)SMB_MALLOC(size)) == NULL ) {
-		printf("Failure to allocate buff of %d bytes\n",
-		       size);
-		result = NT_STATUS_NO_MEMORY;
-		goto done;		
-	}
+	in_data = SMB_MALLOC(size);
 
 	for (i = 0; i < size; i++)
 		in_data[i] = i & 0xff;
 
-	result = rpccli_echo_SinkData(cli, mem_ctx, size, in_data);
+	result = rpccli_echo_sink_data(cli, mem_ctx, size, in_data);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
@@ -176,9 +151,9 @@
 
 	{ "ECHO" },
 
-	{ "echoaddone", RPC_RTYPE_NTSTATUS, cmd_echo_add_one,     NULL, PI_RPCECHO, NULL, "Add one to a number", "" },
-	{ "echodata",   RPC_RTYPE_NTSTATUS, cmd_echo_data,        NULL, PI_RPCECHO, NULL, "Echo data",           "" },
-	{ "sinkdata",   RPC_RTYPE_NTSTATUS, cmd_echo_sink_data,   NULL, PI_RPCECHO, NULL, "Sink data",           "" },
-	{ "sourcedata", RPC_RTYPE_NTSTATUS, cmd_echo_source_data, NULL, PI_RPCECHO, NULL, "Source data",         "" },
+	{ "echoaddone", RPC_RTYPE_NTSTATUS, cmd_echo_add_one,     NULL, PI_ECHO, NULL, "Add one to a number", "" },
+	{ "echodata",   RPC_RTYPE_NTSTATUS, cmd_echo_data,        NULL, PI_ECHO, NULL, "Echo data",           "" },
+	{ "sinkdata",   RPC_RTYPE_NTSTATUS, cmd_echo_sink_data,   NULL, PI_ECHO, NULL, "Sink data",           "" },
+	{ "sourcedata", RPC_RTYPE_NTSTATUS, cmd_echo_source_data, NULL, PI_ECHO, NULL, "Source data",         "" },
 	{ NULL }
 };

Modified: branches/samba/upstream/source/rpcclient/cmd_lsarpc.c
===================================================================
--- branches/samba/upstream/source/rpcclient/cmd_lsarpc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpcclient/cmd_lsarpc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,11 +4,10 @@
 
    Copyright (C) Tim Potter              2000
    Copyright (C) Rafal Szczesniak        2002
-   Copyright (C) Guenther Deschner	 2008
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,12 +16,14 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 #include "rpcclient.h"
 
+
 /* useful function to allow entering a name instead of a SID and
  * looking it up automatically */
 static NTSTATUS name_to_sid(struct rpc_pipe_client *cli, 
@@ -46,11 +47,11 @@
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_lsa_lookup_names(cli, mem_ctx, &pol, 1, &name, NULL, 1, &sids, &sid_types);
+	result = rpccli_lsa_lookup_names(cli, mem_ctx, &pol, 1, &name, NULL, &sids, &sid_types);
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	rpccli_lsa_Close(cli, mem_ctx, &pol);
+	rpccli_lsa_close(cli, mem_ctx, &pol);
 
 	*sid = sids[0];
 
@@ -58,91 +59,106 @@
 	return result;
 }
 
-static void display_query_info_1(struct lsa_AuditLogInfo *r)
+static void display_query_info_1(DOM_QUERY_1 d)
 {
-	d_printf("percent_full:\t%d\n", r->percent_full);
-	d_printf("log_size:\t%d\n", r->log_size);
-	d_printf("retention_time:\t%lld\n", (long long)r->retention_time);
-	d_printf("shutdown_in_progress:\t%d\n", r->shutdown_in_progress);
-	d_printf("time_to_shutdown:\t%lld\n", (long long)r->time_to_shutdown);
-	d_printf("next_audit_record:\t%d\n", r->next_audit_record);
-	d_printf("unknown:\t%d\n", r->unknown);
+	d_printf("percent_full:\t%d\n", d.percent_full);
+	d_printf("log_size:\t%d\n", d.log_size);
+	d_printf("retention_time:\t%lld\n", (long long)d.retention_time);
+	d_printf("shutdown_in_progress:\t%d\n", d.shutdown_in_progress);
+	d_printf("time_to_shutdown:\t%lld\n", (long long)d.time_to_shutdown);
+	d_printf("next_audit_record:\t%d\n", d.next_audit_record);
+	d_printf("unknown:\t%d\n", d.unknown);
 }
 
-static void display_query_info_2(struct lsa_AuditEventsInfo *r)
+static void display_query_info_2(DOM_QUERY_2 d, TALLOC_CTX *mem_ctx)
 {
 	int i;
-	d_printf("Auditing enabled:\t%d\n", r->auditing_mode);
-	d_printf("Auditing categories:\t%d\n", r->count);
+	d_printf("Auditing enabled:\t%d\n", d.auditing_enabled);
+	d_printf("Auditing categories:\t%d\n", d.count1);
 	d_printf("Auditsettings:\n");
-	for (i=0; i<r->count; i++) {
-		const char *val = audit_policy_str(talloc_tos(), r->settings[i]);
+	for (i=0; i<d.count1; i++) {
+		const char *val = audit_policy_str(mem_ctx, d.auditsettings[i]);
 		const char *policy = audit_description_str(i);
 		d_printf("%s:\t%s\n", policy, val);
 	}
 }
 
-static void display_query_info_3(struct lsa_DomainInfo *r)
+static void display_query_info_3(DOM_QUERY_3 d)
 {
-	d_printf("Domain Name: %s\n", r->name.string);
-	d_printf("Domain Sid: %s\n", sid_string_tos(r->sid));
+	fstring name;
+
+	unistr2_to_ascii(name, &d.uni_domain_name, d.uni_dom_max_len);
+
+	d_printf("Domain Name: %s\n", name);
+	d_printf("Domain Sid: %s\n", sid_string_static(&d.dom_sid.sid));
 }
 
-static void display_query_info_5(struct lsa_DomainInfo *r)
+static void display_query_info_5(DOM_QUERY_5 d)
 {
-	d_printf("Domain Name: %s\n", r->name.string);
-	d_printf("Domain Sid: %s\n", sid_string_tos(r->sid));
+	fstring name;
+
+	unistr2_to_ascii(name, &d.uni_domain_name, d.uni_dom_max_len);
+
+	d_printf("Domain Name: %s\n", name);
+	d_printf("Domain Sid: %s\n", sid_string_static(&d.dom_sid.sid));
 }
 
-static void display_query_info_10(struct lsa_AuditFullSetInfo *r)
+static void display_query_info_10(DOM_QUERY_10 d)
 {
-	d_printf("Shutdown on full: %d\n", r->shutdown_on_full);
+	d_printf("Shutdown on full: %d\n", d.shutdown_on_full);
 }
 
-static void display_query_info_11(struct lsa_AuditFullQueryInfo *r)
+static void display_query_info_11(DOM_QUERY_11 d)
 {
-	d_printf("Shutdown on full: %d\n", r->shutdown_on_full);
-	d_printf("Log is full: %d\n", r->log_is_full);
-	d_printf("Unknown: %d\n", r->unknown);
+	d_printf("Shutdown on full: %d\n", d.shutdown_on_full);
+	d_printf("Log is full: %d\n", d.log_is_full);
+	d_printf("Unknown: %d\n", d.unknown);
 }
 
-static void display_query_info_12(struct lsa_DnsDomainInfo *r)
+static void display_query_info_12(DOM_QUERY_12 d)
 {
-	d_printf("Domain NetBios Name: %s\n", r->name.string);
-	d_printf("Domain DNS Name: %s\n", r->dns_domain.string);
-	d_printf("Domain Forest Name: %s\n", r->dns_forest.string);
-	d_printf("Domain Sid: %s\n", sid_string_tos(r->sid));
-	d_printf("Domain GUID: %s\n", smb_uuid_string(talloc_tos(),
-						      r->domain_guid));
+	fstring dom_name, dns_dom_name, forest_name;
+
+	unistr2_to_ascii(dom_name, &d.uni_nb_dom_name, d.hdr_nb_dom_name.uni_max_len);
+	unistr2_to_ascii(dns_dom_name, &d.uni_dns_dom_name, d.hdr_dns_dom_name.uni_max_len);
+	unistr2_to_ascii(forest_name, &d.uni_forest_name, d.hdr_forest_name.uni_max_len);
+
+	d_printf("Domain NetBios Name: %s\n", dom_name);
+	d_printf("Domain DNS Name: %s\n", dns_dom_name);
+	d_printf("Domain Forest Name: %s\n", forest_name);
+	d_printf("Domain Sid: %s\n", sid_string_static(&d.dom_sid.sid));
+	d_printf("Domain GUID: %s\n", smb_uuid_string_static(d.dom_guid));
+
 }
 
-static void display_lsa_query_info(union lsa_PolicyInformation *info,
-				   enum lsa_PolicyInfo level)
+
+
+static void display_lsa_query_info(LSA_INFO_CTR *dom, TALLOC_CTX *mem_ctx)
 {
-	switch (level) {
+	switch (dom->info_class) {
 		case 1:
-			display_query_info_1(&info->audit_log);
+			display_query_info_1(dom->info.id1);
 			break;
 		case 2:
-			display_query_info_2(&info->audit_events);
+			display_query_info_2(dom->info.id2, mem_ctx);
 			break;
 		case 3:
-			display_query_info_3(&info->domain);
+			display_query_info_3(dom->info.id3);
 			break;
 		case 5:
-			display_query_info_5(&info->account_domain);
+			display_query_info_5(dom->info.id5);
 			break;
 		case 10:
-			display_query_info_10(&info->auditfullset);
+			display_query_info_10(dom->info.id10);
 			break;
 		case 11:
-			display_query_info_11(&info->auditfullquery);
+			display_query_info_11(dom->info.id11);
 			break;
 		case 12:
-			display_query_info_12(&info->dns);
+			display_query_info_12(dom->info.id12);
 			break;
 		default:
-			printf("can't display info level: %d\n", level);
+			printf("can't display info level: %d\n", dom->info_class);
 			break;
 	}
 }
@@ -153,7 +169,7 @@
 {
 	POLICY_HND pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	union lsa_PolicyInformation *info = NULL;
+	LSA_INFO_CTR dom;
 
 	uint32 info_class = 3;
 
@@ -174,10 +190,8 @@
 		if (!NT_STATUS_IS_OK(result))
 			goto done;
 			
-		result = rpccli_lsa_QueryInfoPolicy2(cli, mem_ctx,
-						     &pol,
-						     info_class,
-						     &info);
+		result = rpccli_lsa_query_info_policy2_new(cli, mem_ctx, &pol,
+							   info_class, &dom);
 		break;
 	default:
 		result = rpccli_lsa_open_policy(cli, mem_ctx, True, 
@@ -187,18 +201,15 @@
 		if (!NT_STATUS_IS_OK(result))
 			goto done;
 		
-		result = rpccli_lsa_QueryInfoPolicy(cli, mem_ctx,
-						    &pol,
-						    info_class,
-						    &info);
+		result = rpccli_lsa_query_info_policy_new(cli, mem_ctx, &pol, 
+							  info_class, &dom);
 	}
 
-	if (NT_STATUS_IS_OK(result)) {
-		display_lsa_query_info(info, info_class);
-	}
 
-	rpccli_lsa_Close(cli, mem_ctx, &pol);
+	display_lsa_query_info(&dom, mem_ctx);
 
+	rpccli_lsa_close(cli, mem_ctx, &pol);
+
  done:
 	return result;
 }
@@ -228,7 +239,7 @@
 		goto done;
 
 	result = rpccli_lsa_lookup_names(cli, mem_ctx, &pol, argc - 1, 
-				      (const char**)(argv + 1), NULL, 1, &sids, &types);
+				      (const char**)(argv + 1), NULL, &sids, &types);
 
 	if (!NT_STATUS_IS_OK(result) && NT_STATUS_V(result) != 
 	    NT_STATUS_V(STATUS_SOME_UNMAPPED))
@@ -240,68 +251,17 @@
 
 	for (i = 0; i < (argc - 1); i++) {
 		fstring sid_str;
-		sid_to_fstring(sid_str, &sids[i]);
+		sid_to_string(sid_str, &sids[i]);
 		printf("%s %s (%s: %d)\n", argv[i + 1], sid_str,
 		       sid_type_lookup(types[i]), types[i]);
 	}
 
-	rpccli_lsa_Close(cli, mem_ctx, &pol);
+	rpccli_lsa_close(cli, mem_ctx, &pol);
 
  done:
 	return result;
 }
 
-/* Resolve a list of names to a list of sids */
-
-static NTSTATUS cmd_lsa_lookup_names_level(struct rpc_pipe_client *cli, 
-					   TALLOC_CTX *mem_ctx, int argc, 
-					   const char **argv)
-{
-	POLICY_HND pol;
-	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	DOM_SID *sids;
-	enum lsa_SidType *types;
-	int i, level;
-
-	if (argc < 3) {
-		printf("Usage: %s [level] [name1 [name2 [...]]]\n", argv[0]);
-		return NT_STATUS_OK;
-	}
-
-	result = rpccli_lsa_open_policy(cli, mem_ctx, True, 
-				     SEC_RIGHTS_MAXIMUM_ALLOWED,
-				     &pol);
-
-	if (!NT_STATUS_IS_OK(result))
-		goto done;
-
-	level = atoi(argv[1]);
-
-	result = rpccli_lsa_lookup_names(cli, mem_ctx, &pol, argc - 2, 
-				      (const char**)(argv + 2), NULL, level, &sids, &types);
-
-	if (!NT_STATUS_IS_OK(result) && NT_STATUS_V(result) != 
-	    NT_STATUS_V(STATUS_SOME_UNMAPPED))
-		goto done;
-
-	result = NT_STATUS_OK;
-
-	/* Print results */
-
-	for (i = 0; i < (argc - 2); i++) {
-		fstring sid_str;
-		sid_to_fstring(sid_str, &sids[i]);
-		printf("%s %s (%s: %d)\n", argv[i + 2], sid_str,
-		       sid_type_lookup(types[i]), types[i]);
-	}
-
-	rpccli_lsa_Close(cli, mem_ctx, &pol);
-
- done:
-	return result;
-}
-
-
 /* Resolve a list of SIDs to a list of names */
 
 static NTSTATUS cmd_lsa_lookup_sids(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
@@ -358,13 +318,13 @@
 	for (i = 0; i < (argc - 1); i++) {
 		fstring sid_str;
 
-		sid_to_fstring(sid_str, &sids[i]);
+		sid_to_string(sid_str, &sids[i]);
 		printf("%s %s\\%s (%d)\n", sid_str, 
 		       domains[i] ? domains[i] : "*unknown*", 
 		       names[i] ? names[i] : "*unknown*", types[i]);
 	}
 
-	rpccli_lsa_Close(cli, mem_ctx, &pol);
+	rpccli_lsa_close(cli, mem_ctx, &pol);
 
  done:
 	return result;
@@ -378,12 +338,13 @@
 {
 	POLICY_HND pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	struct lsa_DomainList domain_list;
+	DOM_SID *domain_sids;
+	char **domain_names;
 
 	/* defaults, but may be changed using params */
 	uint32 enum_ctx = 0;
+	uint32 num_domains = 0;
 	int i;
-	uint32_t max_size = (uint32_t)-1;
 
 	if (argc > 2) {
 		printf("Usage: %s [enum context (0)]\n", argv[0]);
@@ -395,7 +356,7 @@
 	}	
 
 	result = rpccli_lsa_open_policy(cli, mem_ctx, True, 
-				     LSA_POLICY_VIEW_LOCAL_INFORMATION,
+				     POLICY_VIEW_LOCAL_INFORMATION,
 				     &pol);
 
 	if (!NT_STATUS_IS_OK(result))
@@ -407,11 +368,9 @@
 
 		/* Lookup list of trusted domains */
 
-		result = rpccli_lsa_EnumTrustDom(cli, mem_ctx,
-						 &pol,
-						 &enum_ctx,
-						 &domain_list,
-						 max_size);
+		result = rpccli_lsa_enum_trust_dom(cli, mem_ctx, &pol, &enum_ctx,
+						&num_domains,
+						&domain_names, &domain_sids);
 		if (!NT_STATUS_IS_OK(result) &&
 		    !NT_STATUS_EQUAL(result, NT_STATUS_NO_MORE_ENTRIES) &&
 		    !NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES))
@@ -419,18 +378,16 @@
 
 		/* Print results: list of names and sids returned in this
 		 * response. */	 
-		for (i = 0; i < domain_list.count; i++) {
+		for (i = 0; i < num_domains; i++) {
 			fstring sid_str;
 
-			sid_to_fstring(sid_str, domain_list.domains[i].sid);
-			printf("%s %s\n",
-				domain_list.domains[i].name.string ?
-				domain_list.domains[i].name.string : "*unknown*",
-				sid_str);
+			sid_to_string(sid_str, &domain_sids[i]);
+			printf("%s %s\n", domain_names[i] ? domain_names[i] : 
+			       "*unknown*", sid_str);
 		}
 	}
 
-	rpccli_lsa_Close(cli, mem_ctx, &pol);
+	rpccli_lsa_close(cli, mem_ctx, &pol);
  done:
 	return result;
 }
@@ -443,10 +400,13 @@
 {
 	POLICY_HND pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	struct lsa_PrivArray priv_array;
 
 	uint32 enum_context=0;
 	uint32 pref_max_length=0x1000;
+	uint32 count=0;
+	char   **privs_name;
+	uint32 *privs_high;
+	uint32 *privs_low;
 	int i;
 
 	if (argc > 3) {
@@ -467,27 +427,21 @@
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_lsa_EnumPrivs(cli, mem_ctx,
-				      &pol,
-				      &enum_context,
-				      &priv_array,
-				      pref_max_length);
+	result = rpccli_lsa_enum_privilege(cli, mem_ctx, &pol, &enum_context, pref_max_length,
+					&count, &privs_name, &privs_high, &privs_low);
+
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	/* Print results */
-	printf("found %d privileges\n\n", priv_array.count);
+	printf("found %d privileges\n\n", count);
 
-	for (i = 0; i < priv_array.count; i++) {
-		printf("%s \t\t%d:%d (0x%x:0x%x)\n",
-		       priv_array.privs[i].name.string ? priv_array.privs[i].name.string : "*unknown*",
-		       priv_array.privs[i].luid.high,
-		       priv_array.privs[i].luid.low,
-		       priv_array.privs[i].luid.high,
-		       priv_array.privs[i].luid.low);
+	for (i = 0; i < count; i++) {
+		printf("%s \t\t%d:%d (0x%x:0x%x)\n", privs_name[i] ? privs_name[i] : "*unknown*",
+		       privs_high[i], privs_low[i], privs_high[i], privs_low[i]);
 	}
 
-	rpccli_lsa_Close(cli, mem_ctx, &pol);
+	rpccli_lsa_close(cli, mem_ctx, &pol);
  done:
 	return result;
 }
@@ -504,8 +458,7 @@
 	uint16 lang_id=0;
 	uint16 lang_id_sys=0;
 	uint16 lang_id_desc;
-	struct lsa_String lsa_name;
-	struct lsa_StringLarge *description = NULL;
+	fstring description;
 
 	if (argc != 2) {
 		printf("Usage: %s privilege name\n", argv[0]);
@@ -519,23 +472,15 @@
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	init_lsa_String(&lsa_name, argv[1]);
+	result = rpccli_lsa_get_dispname(cli, mem_ctx, &pol, argv[1], lang_id, lang_id_sys, description, &lang_id_desc);
 
-	result = rpccli_lsa_LookupPrivDisplayName(cli, mem_ctx,
-						  &pol,
-						  &lsa_name,
-						  lang_id,
-						  lang_id_sys,
-						  &description,
-						  &lang_id_desc);
-
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	/* Print results */
-	printf("%s -> %s (language: 0x%x)\n", argv[1], description->string, lang_id_desc);
+	printf("%s -> %s (language: 0x%x)\n", argv[1], description, lang_id_desc);
 
-	rpccli_lsa_Close(cli, mem_ctx, &pol);
+	rpccli_lsa_close(cli, mem_ctx, &pol);
  done:
 	return result;
 }
@@ -551,7 +496,8 @@
 
 	uint32 enum_context=0;
 	uint32 pref_max_length=0x1000;
-	struct lsa_SidArray sid_array;
+	DOM_SID *sids;
+	uint32 count=0;
 	int i;
 
 	if (argc > 3) {
@@ -572,26 +518,23 @@
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_lsa_EnumAccounts(cli, mem_ctx,
-					 &pol,
-					 &enum_context,
-					 &sid_array,
-					 pref_max_length);
+	result = rpccli_lsa_enum_sids(cli, mem_ctx, &pol, &enum_context, pref_max_length,
+					&count, &sids);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	/* Print results */
-	printf("found %d SIDs\n\n", sid_array.num_sids);
+	printf("found %d SIDs\n\n", count);
 
-	for (i = 0; i < sid_array.num_sids; i++) {
+	for (i = 0; i < count; i++) {
 		fstring sid_str;
 
-		sid_to_fstring(sid_str, sid_array.sids[i].sid);
+		sid_to_string(sid_str, &sids[i]);
 		printf("%s\n", sid_str);
 	}
 
-	rpccli_lsa_Close(cli, mem_ctx, &pol);
+	rpccli_lsa_close(cli, mem_ctx, &pol);
  done:
 	return result;
 }
@@ -625,11 +568,7 @@
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_lsa_CreateAccount(cli, mem_ctx,
-					  &dom_pol,
-					  &sid,
-					  des_access,
-					  &user_pol);
+	result = rpccli_lsa_create_account(cli, mem_ctx, &dom_pol, &sid, des_access, &user_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
@@ -637,7 +576,7 @@
 	printf("Account for SID %s successfully created\n\n", argv[1]);
 	result = NT_STATUS_OK;
 
-	rpccli_lsa_Close(cli, mem_ctx, &dom_pol);
+	rpccli_lsa_close(cli, mem_ctx, &dom_pol);
  done:
 	return result;
 }
@@ -653,8 +592,10 @@
 	POLICY_HND user_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	uint32 access_desired = 0x000f000f;
+	
 	DOM_SID sid;
-	struct lsa_PrivilegeSet *privs = NULL;
+	uint32 count=0;
+	LUID_ATTR *set;
 	int i;
 
 	if (argc != 2 ) {
@@ -673,34 +614,25 @@
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_lsa_OpenAccount(cli, mem_ctx,
-					&dom_pol,
-					&sid,
-					access_desired,
-					&user_pol);
+	result = rpccli_lsa_open_account(cli, mem_ctx, &dom_pol, &sid, access_desired, &user_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_lsa_EnumPrivsAccount(cli, mem_ctx,
-					     &user_pol,
-					     &privs);
+	result = rpccli_lsa_enum_privsaccount(cli, mem_ctx, &user_pol, &count, &set);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	/* Print results */
-	printf("found %d privileges for SID %s\n\n", privs->count, argv[1]);
+	printf("found %d privileges for SID %s\n\n", count, argv[1]);
 	printf("high\tlow\tattribute\n");
 
-	for (i = 0; i < privs->count; i++) {
-		printf("%u\t%u\t%u\n",
-			privs->set[i].luid.high,
-			privs->set[i].luid.low,
-			privs->set[i].attribute);
+	for (i = 0; i < count; i++) {
+		printf("%u\t%u\t%u\n", set[i].luid.high, set[i].luid.low, set[i].attr);
 	}
 
-	rpccli_lsa_Close(cli, mem_ctx, &dom_pol);
+	rpccli_lsa_close(cli, mem_ctx, &dom_pol);
  done:
 	return result;
 }
@@ -714,8 +646,10 @@
 {
 	POLICY_HND dom_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
 	DOM_SID sid;
-	struct lsa_RightSet rights;
+	uint32 count;
+	char **rights;
 
 	int i;
 
@@ -735,22 +669,18 @@
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_lsa_EnumAccountRights(cli, mem_ctx,
-					      &dom_pol,
-					      &sid,
-					      &rights);
+	result = rpccli_lsa_enum_account_rights(cli, mem_ctx, &dom_pol, &sid, &count, &rights);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	printf("found %d privileges for SID %s\n", rights.count,
-	       sid_string_tos(&sid));
+	printf("found %d privileges for SID %s\n", count, sid_string_static(&sid));
 
-	for (i = 0; i < rights.count; i++) {
-		printf("\t%s\n", rights.names[i].string);
+	for (i = 0; i < count; i++) {
+		printf("\t%s\n", rights[i]);
 	}
 
-	rpccli_lsa_Close(cli, mem_ctx, &dom_pol);
+	rpccli_lsa_close(cli, mem_ctx, &dom_pol);
  done:
 	return result;
 }
@@ -764,9 +694,8 @@
 {
 	POLICY_HND dom_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	struct lsa_RightSet rights;
+
 	DOM_SID sid;
-	int i;
 
 	if (argc < 3 ) {
 		printf("Usage: %s SID [rights...]\n", argv[0]);
@@ -784,26 +713,13 @@
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	rights.count = argc-2;
-	rights.names = TALLOC_ARRAY(mem_ctx, struct lsa_StringLarge,
-				    rights.count);
-	if (!rights.names) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	result = rpccli_lsa_add_account_rights(cli, mem_ctx, &dom_pol, sid, 
+					    argc-2, argv+2);
 
-	for (i=0; i<argc-1; i++) {
-		init_lsa_StringLarge(&rights.names[i], argv[i+2]);
-	}
-
-	result = rpccli_lsa_AddAccountRights(cli, mem_ctx,
-					     &dom_pol,
-					     &sid,
-					     &rights);
-
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	rpccli_lsa_Close(cli, mem_ctx, &dom_pol);
+	rpccli_lsa_close(cli, mem_ctx, &dom_pol);
  done:
 	return result;
 }
@@ -817,9 +733,8 @@
 {
 	POLICY_HND dom_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	struct lsa_RightSet rights;
+
 	DOM_SID sid;
-	int i;
 
 	if (argc < 3 ) {
 		printf("Usage: %s SID [rights...]\n", argv[0]);
@@ -837,27 +752,13 @@
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	rights.count = argc-2;
-	rights.names = TALLOC_ARRAY(mem_ctx, struct lsa_StringLarge,
-				    rights.count);
-	if (!rights.names) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	result = rpccli_lsa_remove_account_rights(cli, mem_ctx, &dom_pol, sid, 
+					       False, argc-2, argv+2);
 
-	for (i=0; i<argc-2; i++) {
-		init_lsa_StringLarge(&rights.names[i], argv[i+2]);
-	}
-
-	result = rpccli_lsa_RemoveAccountRights(cli, mem_ctx,
-						&dom_pol,
-						&sid,
-						false,
-						&rights);
-
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	rpccli_lsa_Close(cli, mem_ctx, &dom_pol);
+	rpccli_lsa_close(cli, mem_ctx, &dom_pol);
 
  done:
 	return result;
@@ -872,8 +773,7 @@
 {
 	POLICY_HND pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	struct lsa_LUID luid;
-	struct lsa_String name;
+	LUID luid;
 
 	if (argc != 2 ) {
 		printf("Usage: %s name\n", argv[0]);
@@ -887,13 +787,8 @@
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	init_lsa_String(&name, argv[1]);
+	result = rpccli_lsa_lookup_priv_value(cli, mem_ctx, &pol, argv[1], &luid);
 
-	result = rpccli_lsa_LookupPrivValue(cli, mem_ctx,
-					    &pol,
-					    &name,
-					    &luid);
-
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
@@ -901,7 +796,7 @@
 
 	printf("%u:%u (0x%x:0x%x)\n", luid.high, luid.low, luid.high, luid.low);
 
-	rpccli_lsa_Close(cli, mem_ctx, &pol);
+	rpccli_lsa_close(cli, mem_ctx, &pol);
  done:
 	return result;
 }
@@ -932,31 +827,39 @@
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_lsa_QuerySecurity(cli, mem_ctx,
-					  &pol,
-					  sec_info,
-					  &sdb);
+	result = rpccli_lsa_query_secobj(cli, mem_ctx, &pol, sec_info, &sdb);
+
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	/* Print results */
 
-	display_sec_desc(sdb->sd);
+	display_sec_desc(sdb->sec);
 
-	rpccli_lsa_Close(cli, mem_ctx, &pol);
+	rpccli_lsa_close(cli, mem_ctx, &pol);
  done:
 	return result;
 }
 
-static void display_trust_dom_info_4(struct lsa_TrustDomainInfoPassword *p, const char *password)
+static void display_trust_dom_info_1(TRUSTED_DOMAIN_INFO_NAME *n)
 {
+	printf("NetBIOS Name:\t%s\n", unistr2_static(&n->netbios_name.unistring));
+}
+
+static void display_trust_dom_info_3(TRUSTED_DOMAIN_INFO_POSIX_OFFSET *p)
+{
+	printf("Posix Offset:\t%08x (%d)\n", p->posix_offset, p->posix_offset);
+}
+
+static void display_trust_dom_info_4(TRUSTED_DOMAIN_INFO_PASSWORD *p, const char *password)
+{
 	char *pwd, *pwd_old;
 	
-	DATA_BLOB data 	   = data_blob(NULL, p->password->length);
-	DATA_BLOB data_old = data_blob(NULL, p->old_password->length);
+	DATA_BLOB data 	   = data_blob(NULL, p->password.length);
+	DATA_BLOB data_old = data_blob(NULL, p->old_password.length);
 
-	memcpy(data.data, p->password->data, p->password->length);
-	memcpy(data_old.data, p->old_password->data, p->old_password->length);
+	memcpy(data.data, p->password.data, p->password.length);
+	memcpy(data_old.data, p->old_password.data, p->old_password.length);
 	
 	pwd 	= decrypt_trustdom_secret(password, &data);
 	pwd_old = decrypt_trustdom_secret(password, &data_old);
@@ -971,25 +874,35 @@
 	data_blob_free(&data_old);
 }
 
-static void display_trust_dom_info(TALLOC_CTX *mem_ctx,
-				   union lsa_TrustedDomainInfo *info,
-				   enum lsa_TrustDomInfoEnum info_class,
-				   const char *pass)
+static void display_trust_dom_info_6(TRUSTED_DOMAIN_INFO_EX *i)
 {
+	printf("Domain Name:\t\t%s\n", unistr2_static(&i->domain_name.unistring));
+	printf("NetBIOS Name:\t\t%s\n", unistr2_static(&i->netbios_name.unistring));
+	printf("SID:\t\t\t%s\n", sid_string_static(&i->sid.sid));
+	printf("Trust Direction:\t0x%08x\n", i->trust_direction);
+	printf("Trust Type:\t\t0x%08x\n", i->trust_type);
+	printf("Trust Attributes:\t0x%08x\n", i->trust_attributes);
+}
+
+
+static void display_trust_dom_info(LSA_TRUSTED_DOMAIN_INFO *info, uint32 info_class, const char *pass)
+{
 	switch (info_class) {
-		case LSA_TRUSTED_DOMAIN_INFO_PASSWORD:
-			display_trust_dom_info_4(&info->password, pass);
-			break;
-		default: {
-			const char *str = NULL;
-			str = NDR_PRINT_UNION_STRING(mem_ctx,
-						     lsa_TrustedDomainInfo,
-						     info_class, info);
-			if (str) {
-				d_printf("%s\n", str);
-			}
-			break;
-		}
+	case 1:
+		display_trust_dom_info_1(&info->name);
+		break;
+	case 3:
+		display_trust_dom_info_3(&info->posix_offset);
+		break;
+	case 4:
+		display_trust_dom_info_4(&info->password, pass);
+		break;
+	case 6:
+		display_trust_dom_info_6(&info->info_ex);
+		break;
+	default:
+		printf("unsupported info-class: %d\n", info_class);
+		break;
 	}
 }
 
@@ -1001,9 +914,10 @@
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	DOM_SID dom_sid;
 	uint32 access_mask = SEC_RIGHTS_MAXIMUM_ALLOWED;
-	union lsa_TrustedDomainInfo *info = NULL;
-	enum lsa_TrustDomInfoEnum info_class = 1;
+	LSA_TRUSTED_DOMAIN_INFO *info;
 
+	uint32 info_class = 1; 
+
 	if (argc > 3 || argc < 2) {
 		printf("Usage: %s [sid] [info_class]\n", argv[0]);
 		return NT_STATUS_OK;
@@ -1020,18 +934,17 @@
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_lsa_QueryTrustedDomainInfoBySid(cli, mem_ctx,
-							&pol,
-							&dom_sid,
-							info_class,
-							&info);
+	result = rpccli_lsa_query_trusted_domain_info_by_sid(cli, mem_ctx, &pol,
+							  info_class, &dom_sid, &info);
+
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	display_trust_dom_info(mem_ctx, info, info_class, cli->pwd.password);
+	display_trust_dom_info(info, info_class, cli->pwd.password);
 
  done:
-	rpccli_lsa_Close(cli, mem_ctx, &pol);
+	if (&pol)
+		rpccli_lsa_close(cli, mem_ctx, &pol);
 
 	return result;
 }
@@ -1043,9 +956,8 @@
 	POLICY_HND pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	uint32 access_mask = SEC_RIGHTS_MAXIMUM_ALLOWED;
-	union lsa_TrustedDomainInfo *info = NULL;
-	enum lsa_TrustDomInfoEnum info_class = 1;
-	struct lsa_String trusted_domain;
+	LSA_TRUSTED_DOMAIN_INFO *info;
+	uint32 info_class = 1; 
 
 	if (argc > 3 || argc < 2) {
 		printf("Usage: %s [name] [info_class]\n", argv[0]);
@@ -1060,20 +972,17 @@
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	init_lsa_String(&trusted_domain, argv[1]);
+	result = rpccli_lsa_query_trusted_domain_info_by_name(cli, mem_ctx, &pol, 
+							   info_class, argv[1], &info);
 
-	result = rpccli_lsa_QueryTrustedDomainInfoByName(cli, mem_ctx,
-							 &pol,
-							 &trusted_domain,
-							 info_class,
-							 &info);
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	display_trust_dom_info(mem_ctx, info, info_class, cli->pwd.password);
+	display_trust_dom_info(info, info_class, cli->pwd.password);
 
  done:
-	rpccli_lsa_Close(cli, mem_ctx, &pol);
+	if (&pol)
+		rpccli_lsa_close(cli, mem_ctx, &pol);
 
 	return result;
 }
@@ -1085,9 +994,9 @@
 	POLICY_HND pol, trustdom_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	uint32 access_mask = SEC_RIGHTS_MAXIMUM_ALLOWED;
-	union lsa_TrustedDomainInfo *info = NULL;
+	LSA_TRUSTED_DOMAIN_INFO *info;
 	DOM_SID dom_sid;
-	enum lsa_TrustDomInfoEnum info_class = 1;
+	uint32 info_class = 1; 
 
 	if (argc > 3 || argc < 2) {
 		printf("Usage: %s [sid] [info_class]\n", argv[0]);
@@ -1105,244 +1014,30 @@
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
+	
+	result = rpccli_lsa_open_trusted_domain(cli, mem_ctx, &pol,
+					     &dom_sid, access_mask, &trustdom_pol);
 
-	result = rpccli_lsa_OpenTrustedDomain(cli, mem_ctx,
-					      &pol,
-					      &dom_sid,
-					      access_mask,
-					      &trustdom_pol);
-
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_lsa_QueryTrustedDomainInfo(cli, mem_ctx,
-						   &trustdom_pol,
-						   info_class,
-						   &info);
+	result = rpccli_lsa_query_trusted_domain_info(cli, mem_ctx, &trustdom_pol, 
+						   info_class, &info);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	display_trust_dom_info(mem_ctx, info, info_class, cli->pwd.password);
+	display_trust_dom_info(info, info_class, cli->pwd.password);
 
  done:
-	rpccli_lsa_Close(cli, mem_ctx, &pol);
+	if (&pol)
+		rpccli_lsa_close(cli, mem_ctx, &pol);
 
 	return result;
 }
 
-static NTSTATUS cmd_lsa_get_username(struct rpc_pipe_client *cli,
-                                     TALLOC_CTX *mem_ctx, int argc,
-                                     const char **argv)
-{
-	POLICY_HND pol;
-	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	const char *servername = cli->cli->desthost;
-	struct lsa_String *account_name = NULL;
-	struct lsa_String *authority_name = NULL;
 
-	if (argc > 2) {
-		printf("Usage: %s servername\n", argv[0]);
-		return NT_STATUS_OK;
-	}
 
-	result = rpccli_lsa_open_policy(cli, mem_ctx, true,
-					SEC_RIGHTS_MAXIMUM_ALLOWED,
-					&pol);
-
-	if (!NT_STATUS_IS_OK(result)) {
-		goto done;
-	}
-
-	result = rpccli_lsa_GetUserName(cli, mem_ctx,
-					servername,
-					&account_name,
-					&authority_name);
-	if (!NT_STATUS_IS_OK(result)) {
-		goto done;
-	}
-
-	/* Print results */
-
-	printf("Account Name: %s, Authority Name: %s\n",
-		account_name->string, authority_name->string);
-
-	rpccli_lsa_Close(cli, mem_ctx, &pol);
- done:
-	return result;
-}
-
-static NTSTATUS cmd_lsa_add_priv(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx, int argc,
-				 const char **argv)
-{
-	POLICY_HND dom_pol, user_pol;
-	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	struct lsa_PrivilegeSet privs;
-	struct lsa_LUIDAttribute *set = NULL;
-	DOM_SID sid;
-	int i;
-
-	ZERO_STRUCT(privs);
-
-	if (argc < 3 ) {
-		printf("Usage: %s SID [rights...]\n", argv[0]);
-		return NT_STATUS_OK;
-	}
-
-	result = name_to_sid(cli, mem_ctx, &sid, argv[1]);
-	if (!NT_STATUS_IS_OK(result)) {
-		goto done;
-	}
-
-	result = rpccli_lsa_open_policy2(cli, mem_ctx, True,
-					 SEC_RIGHTS_MAXIMUM_ALLOWED,
-					 &dom_pol);
-
-	if (!NT_STATUS_IS_OK(result)) {
-		goto done;
-	}
-
-	result = rpccli_lsa_OpenAccount(cli, mem_ctx,
-					&dom_pol,
-					&sid,
-					SEC_RIGHTS_MAXIMUM_ALLOWED,
-					&user_pol);
-
-	if (!NT_STATUS_IS_OK(result)) {
-		goto done;
-	}
-
-	for (i=2; i<argc; i++) {
-
-		struct lsa_String priv_name;
-		struct lsa_LUID luid;
-
-		init_lsa_String(&priv_name, argv[i]);
-
-		result = rpccli_lsa_LookupPrivValue(cli, mem_ctx,
-						    &dom_pol,
-						    &priv_name,
-						    &luid);
-		if (!NT_STATUS_IS_OK(result)) {
-			continue;
-		}
-
-		privs.count++;
-		set = TALLOC_REALLOC_ARRAY(mem_ctx, set,
-					   struct lsa_LUIDAttribute,
-					   privs.count);
-		if (!set) {
-			return NT_STATUS_NO_MEMORY;
-		}
-
-		set[privs.count-1].luid = luid;
-		set[privs.count-1].attribute = 0;
-	}
-
-	privs.set = set;
-
-	result = rpccli_lsa_AddPrivilegesToAccount(cli, mem_ctx,
-						   &user_pol,
-						   &privs);
-
-	if (!NT_STATUS_IS_OK(result)) {
-		goto done;
-	}
-
-	rpccli_lsa_Close(cli, mem_ctx, &user_pol);
-	rpccli_lsa_Close(cli, mem_ctx, &dom_pol);
- done:
-	return result;
-}
-
-static NTSTATUS cmd_lsa_del_priv(struct rpc_pipe_client *cli,
-				 TALLOC_CTX *mem_ctx, int argc,
-				 const char **argv)
-{
-	POLICY_HND dom_pol, user_pol;
-	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	struct lsa_PrivilegeSet privs;
-	struct lsa_LUIDAttribute *set = NULL;
-	DOM_SID sid;
-	int i;
-
-	ZERO_STRUCT(privs);
-
-	if (argc < 3 ) {
-		printf("Usage: %s SID [rights...]\n", argv[0]);
-		return NT_STATUS_OK;
-	}
-
-	result = name_to_sid(cli, mem_ctx, &sid, argv[1]);
-	if (!NT_STATUS_IS_OK(result)) {
-		goto done;
-	}
-
-	result = rpccli_lsa_open_policy2(cli, mem_ctx, True,
-					 SEC_RIGHTS_MAXIMUM_ALLOWED,
-					 &dom_pol);
-
-	if (!NT_STATUS_IS_OK(result)) {
-		goto done;
-	}
-
-	result = rpccli_lsa_OpenAccount(cli, mem_ctx,
-					&dom_pol,
-					&sid,
-					SEC_RIGHTS_MAXIMUM_ALLOWED,
-					&user_pol);
-
-	if (!NT_STATUS_IS_OK(result)) {
-		goto done;
-	}
-
-	for (i=2; i<argc; i++) {
-
-		struct lsa_String priv_name;
-		struct lsa_LUID luid;
-
-		init_lsa_String(&priv_name, argv[i]);
-
-		result = rpccli_lsa_LookupPrivValue(cli, mem_ctx,
-						    &dom_pol,
-						    &priv_name,
-						    &luid);
-		if (!NT_STATUS_IS_OK(result)) {
-			continue;
-		}
-
-		privs.count++;
-		set = TALLOC_REALLOC_ARRAY(mem_ctx, set,
-					   struct lsa_LUIDAttribute,
-					   privs.count);
-		if (!set) {
-			return NT_STATUS_NO_MEMORY;
-		}
-
-		set[privs.count-1].luid = luid;
-		set[privs.count-1].attribute = 0;
-	}
-
-	privs.set = set;
-
-
-	result = rpccli_lsa_RemovePrivilegesFromAccount(cli, mem_ctx,
-							&user_pol,
-							false,
-							&privs);
-
-	if (!NT_STATUS_IS_OK(result)) {
-		goto done;
-	}
-
-	rpccli_lsa_Close(cli, mem_ctx, &user_pol);
-	rpccli_lsa_Close(cli, mem_ctx, &dom_pol);
- done:
-	return result;
-}
-
-
 /* List of commands exported by this module */
 
 struct cmd_set lsarpc_commands[] = {
@@ -1352,7 +1047,6 @@
 	{ "lsaquery", 	         RPC_RTYPE_NTSTATUS, cmd_lsa_query_info_policy,  NULL, PI_LSARPC, NULL, "Query info policy",                    "" },
 	{ "lookupsids",          RPC_RTYPE_NTSTATUS, cmd_lsa_lookup_sids,        NULL, PI_LSARPC, NULL, "Convert SIDs to names",                "" },
 	{ "lookupnames",         RPC_RTYPE_NTSTATUS, cmd_lsa_lookup_names,       NULL, PI_LSARPC, NULL, "Convert names to SIDs",                "" },
-	{ "lookupnames_level",   RPC_RTYPE_NTSTATUS, cmd_lsa_lookup_names_level, NULL, PI_LSARPC, NULL, "Convert names to SIDs",                "" },
 	{ "enumtrust", 	         RPC_RTYPE_NTSTATUS, cmd_lsa_enum_trust_dom,     NULL, PI_LSARPC, NULL, "Enumerate trusted domains",            "Usage: [preferred max number] [enum context (0)]" },
 	{ "enumprivs", 	         RPC_RTYPE_NTSTATUS, cmd_lsa_enum_privilege,     NULL, PI_LSARPC, NULL, "Enumerate privileges",                 "" },
 	{ "getdispname",         RPC_RTYPE_NTSTATUS, cmd_lsa_get_dispname,       NULL, PI_LSARPC, NULL, "Get the privilege name",               "" },
@@ -1360,8 +1054,10 @@
 	{ "lsacreateaccount",    RPC_RTYPE_NTSTATUS, cmd_lsa_create_account,     NULL, PI_LSARPC, NULL, "Create a new lsa account",   "" },
 	{ "lsaenumprivsaccount", RPC_RTYPE_NTSTATUS, cmd_lsa_enum_privsaccounts, NULL, PI_LSARPC, NULL, "Enumerate the privileges of an SID",   "" },
 	{ "lsaenumacctrights",   RPC_RTYPE_NTSTATUS, cmd_lsa_enum_acct_rights,   NULL, PI_LSARPC, NULL, "Enumerate the rights of an SID",   "" },
-	{ "lsaaddpriv",          RPC_RTYPE_NTSTATUS, cmd_lsa_add_priv,           NULL, PI_LSARPC, NULL, "Assign a privilege to a SID", "" },
-	{ "lsadelpriv",          RPC_RTYPE_NTSTATUS, cmd_lsa_del_priv,           NULL, PI_LSARPC, NULL, "Revoke a privilege from a SID", "" },
+#if 0
+	{ "lsaaddpriv",          RPC_RTYPE_NTSTATUS, cmd_lsa_add_priv,           NULL, PI_LSARPC, "Assign a privilege to a SID", "" },
+	{ "lsadelpriv",          RPC_RTYPE_NTSTATUS, cmd_lsa_del_priv,           NULL, PI_LSARPC, "Revoke a privilege from a SID", "" },
+#endif
 	{ "lsaaddacctrights",    RPC_RTYPE_NTSTATUS, cmd_lsa_add_acct_rights,    NULL, PI_LSARPC, NULL, "Add rights to an account",   "" },
 	{ "lsaremoveacctrights", RPC_RTYPE_NTSTATUS, cmd_lsa_remove_acct_rights, NULL, PI_LSARPC, NULL, "Remove rights from an account",   "" },
 	{ "lsalookupprivvalue",  RPC_RTYPE_NTSTATUS, cmd_lsa_lookup_priv_value,  NULL, PI_LSARPC, NULL, "Get a privilege value given its name", "" },
@@ -1369,7 +1065,6 @@
 	{ "lsaquerytrustdominfo",RPC_RTYPE_NTSTATUS, cmd_lsa_query_trustdominfo, NULL, PI_LSARPC, NULL, "Query LSA trusted domains info (given a SID)", "" },
 	{ "lsaquerytrustdominfobyname",RPC_RTYPE_NTSTATUS, cmd_lsa_query_trustdominfobyname, NULL, PI_LSARPC, NULL, "Query LSA trusted domains info (given a name), only works for Windows > 2k", "" },
 	{ "lsaquerytrustdominfobysid",RPC_RTYPE_NTSTATUS, cmd_lsa_query_trustdominfobysid, NULL, PI_LSARPC, NULL, "Query LSA trusted domains info (given a SID)", "" },
-	{ "getusername",          RPC_RTYPE_NTSTATUS, cmd_lsa_get_username, NULL, PI_LSARPC, NULL, "Get username", "" },
 
 	{ NULL }
 };

Modified: branches/samba/upstream/source/rpcclient/cmd_netlogon.c
===================================================================
--- branches/samba/upstream/source/rpcclient/cmd_netlogon.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpcclient/cmd_netlogon.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,11 +3,10 @@
    RPC pipe client
 
    Copyright (C) Tim Potter 2000
-   Copyright (C) Guenther Deschner 2008
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,170 +15,116 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 #include "rpcclient.h"
 
-static WERROR cmd_netlogon_logon_ctrl2(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx, int argc,
-				       const char **argv)
+static NTSTATUS cmd_netlogon_logon_ctrl2(struct rpc_pipe_client *cli, 
+                                         TALLOC_CTX *mem_ctx, int argc, 
+                                         const char **argv)
 {
-	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
-	WERROR werr;
-	const char *logon_server = cli->cli->desthost;
-	enum netr_LogonControlCode function_code = NETLOGON_CONTROL_REDISCOVER;
-	uint32_t level = 1;
-	union netr_CONTROL_DATA_INFORMATION data;
-	union netr_CONTROL_QUERY_INFORMATION query;
-	const char *domain = lp_workgroup();
+	uint32 query_level = 1;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 
-	if (argc > 5) {
-		fprintf(stderr, "Usage: %s <logon_server> <function_code> "
-			"<level> <domain>\n", argv[0]);
-		return WERR_OK;
+	if (argc > 1) {
+		fprintf(stderr, "Usage: %s\n", argv[0]);
+		return NT_STATUS_OK;
 	}
 
-	if (argc >= 2) {
-		logon_server = argv[1];
-	}
+	result = rpccli_netlogon_logon_ctrl2(cli, mem_ctx, query_level);
 
-	if (argc >= 3) {
-		function_code = atoi(argv[2]);
-	}
+	if (!NT_STATUS_IS_OK(result))
+		goto done;
 
-	if (argc >= 4) {
-		level = atoi(argv[3]);
-	}
-
-	if (argc >= 5) {
-		domain = argv[4];
-	}
-
-	switch (function_code) {
-		case NETLOGON_CONTROL_REDISCOVER:
-		case NETLOGON_CONTROL_TC_QUERY:
-			data.domain = domain;
-			break;
-		default:
-			break;
-	}
-
-	status = rpccli_netr_LogonControl2(cli, mem_ctx,
-					  logon_server,
-					  function_code,
-					  level,
-					  &data,
-					  &query,
-					  &werr);
-	if (!NT_STATUS_IS_OK(status)) {
-		return ntstatus_to_werror(status);
-	}
-
-	if (!W_ERROR_IS_OK(werr)) {
-		return werr;
-	}
-
 	/* Display results */
 
-	return werr;
+ done:
+	return result;
 }
 
 static WERROR cmd_netlogon_getanydcname(struct rpc_pipe_client *cli, 
 					TALLOC_CTX *mem_ctx, int argc, 
 					const char **argv)
 {
-	const char *dcname = NULL;
-	WERROR werr;
-	NTSTATUS status;
-	int old_timeout;
+	fstring dcname;
+	WERROR result = WERR_GENERAL_FAILURE;
 
 	if (argc != 2) {
 		fprintf(stderr, "Usage: %s domainname\n", argv[0]);
 		return WERR_OK;
 	}
 
-	/* Make sure to wait for our DC's reply */
-	old_timeout = cli_set_timeout(cli->cli, MAX(cli->cli->timeout,30000)); /* 30 seconds. */
+	result = rpccli_netlogon_getanydcname(cli, mem_ctx, cli->cli->desthost, argv[1], dcname);
 
-	status = rpccli_netr_GetAnyDCName(cli, mem_ctx,
-					  cli->cli->desthost,
-					  argv[1],
-					  &dcname,
-					  &werr);
-	cli_set_timeout(cli->cli, old_timeout);
+	if (!W_ERROR_IS_OK(result))
+		goto done;
 
-	if (!NT_STATUS_IS_OK(status)) {
-		return ntstatus_to_werror(status);
-	}
-
-	if (!W_ERROR_IS_OK(werr)) {
-		return werr;
-	}
-
 	/* Display results */
 
 	printf("%s\n", dcname);
 
-	return werr;
+ done:
+	return result;
 }
 
-static WERROR cmd_netlogon_getdcname(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx, int argc,
-				     const char **argv)
+static void display_ds_domain_controller_info(TALLOC_CTX *mem_ctx, const struct DS_DOMAIN_CONTROLLER_INFO *info)
 {
-	const char *dcname = NULL;
-	NTSTATUS status;
-	WERROR werr;
-	int old_timeout;
+	d_printf("domain_controller_name: %s\n", info->domain_controller_name);
+	d_printf("domain_controller_address: %s\n", info->domain_controller_address);
+	d_printf("domain_controller_address_type: %d\n", info->domain_controller_address_type);
+	d_printf("domain_guid: %s\n", GUID_string(mem_ctx, info->domain_guid));
+	d_printf("domain_name: %s\n", info->domain_name);
+	d_printf("dns_forest_name: %s\n", info->dns_forest_name);
+	d_printf("flags: 0x%08x\n"
+		 "\tIs a PDC:                                   %s\n"
+		 "\tIs a GC of the forest:                      %s\n"
+		 "\tIs an LDAP server:                          %s\n"
+		 "\tSupports DS:                                %s\n"
+		 "\tIs running a KDC:                           %s\n"
+		 "\tIs running time services:                   %s\n"
+		 "\tIs the closest DC:                          %s\n"
+		 "\tIs writable:                                %s\n"
+		 "\tHas a hardware clock:                       %s\n"
+		 "\tIs a non-domain NC serviced by LDAP server: %s\n"
+		 "\tDomainControllerName is a DNS name:         %s\n"
+		 "\tDomainName is a DNS name:                   %s\n"
+		 "\tDnsForestName is a DNS name:                %s\n",
+		 info->flags,
+		 (info->flags & ADS_PDC) ? "yes" : "no",
+		 (info->flags & ADS_GC) ? "yes" : "no",
+		 (info->flags & ADS_LDAP) ? "yes" : "no",
+		 (info->flags & ADS_DS) ? "yes" : "no",
+		 (info->flags & ADS_KDC) ? "yes" : "no",
+		 (info->flags & ADS_TIMESERV) ? "yes" : "no",
+		 (info->flags & ADS_CLOSEST) ? "yes" : "no",
+		 (info->flags & ADS_WRITABLE) ? "yes" : "no",
+		 (info->flags & ADS_GOOD_TIMESERV) ? "yes" : "no",
+		 (info->flags & ADS_NDNC) ? "yes" : "no",
+		 (info->flags & ADS_DNS_CONTROLLER) ? "yes":"no",
+		 (info->flags & ADS_DNS_DOMAIN) ? "yes":"no",
+		 (info->flags & ADS_DNS_FOREST) ? "yes":"no");
 
-	if (argc != 2) {
-		fprintf(stderr, "Usage: %s domainname\n", argv[0]);
-		return WERR_OK;
-	}
-
-	/* Make sure to wait for our DC's reply */
-	old_timeout = cli_set_timeout(cli->cli, MAX(cli->cli->timeout,30000)); /* 30 seconds. */
-
-	status = rpccli_netr_GetDcName(cli, mem_ctx,
-				       cli->cli->desthost,
-				       argv[1],
-				       &dcname,
-				       &werr);
-	cli_set_timeout(cli->cli, old_timeout);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return ntstatus_to_werror(status);
-	}
-
-	if (!W_ERROR_IS_OK(werr)) {
-		return werr;
-	}
-
-	/* Display results */
-
-	printf("%s\n", dcname);
-
-	return werr;
+	d_printf("dc_site_name: %s\n", info->dc_site_name);
+	d_printf("client_site_name: %s\n", info->client_site_name);
 }
 
 static WERROR cmd_netlogon_dsr_getdcname(struct rpc_pipe_client *cli,
 					 TALLOC_CTX *mem_ctx, int argc,
 					 const char **argv)
 {
-	NTSTATUS result;
-	WERROR werr = WERR_OK;
+	WERROR result;
 	uint32 flags = DS_RETURN_DNS_NAME;
 	const char *server_name = cli->cli->desthost;
 	const char *domain_name;
 	struct GUID domain_guid = GUID_zero();
 	struct GUID site_guid = GUID_zero();
-	struct netr_DsRGetDCNameInfo *info = NULL;
+	struct DS_DOMAIN_CONTROLLER_INFO *info = NULL;
 
 	if (argc < 2) {
-		fprintf(stderr, "Usage: %s [domain_name] [domain_guid] "
-				"[site_guid] [flags]\n", argv[0]);
+		fprintf(stderr, "Usage: %s [domainname] [domain_name] [domain_guid] [site_guid] [flags]\n", argv[0]);
 		return WERR_OK;
 	}
 
@@ -200,28 +145,21 @@
 
 	if (argc >= 5)
 		sscanf(argv[4], "%x", &flags);
+	
+	result = rpccli_netlogon_dsr_getdcname(cli, mem_ctx, server_name, domain_name, 
+					       &domain_guid, &site_guid, flags,
+					       &info);
 
-	debug_dsdcinfo_flags(1,flags);
-
-	result = rpccli_netr_DsRGetDCName(cli, mem_ctx,
-					  server_name,
-					  domain_name,
-					  &domain_guid,
-					  &site_guid,
-					  flags,
-					  &info,
-					  &werr);
-
-	if (W_ERROR_IS_OK(werr)) {
-		d_printf("DsGetDcName gave: %s\n",
-		NDR_PRINT_STRUCT_STRING(mem_ctx, netr_DsRGetDCNameInfo, info));
+	if (W_ERROR_IS_OK(result)) {
+		d_printf("DsGetDcName gave\n");
+		display_ds_domain_controller_info(mem_ctx, info);
 		return WERR_OK;
 	}
 
 	printf("rpccli_netlogon_dsr_getdcname returned %s\n",
-	       dos_errstr(werr));
+	       dos_errstr(result));
 
-	return werr;
+	return result;
 }
 
 static WERROR cmd_netlogon_dsr_getdcnameex(struct rpc_pipe_client *cli,
@@ -229,21 +167,20 @@
 					   const char **argv)
 {
 	WERROR result;
-	NTSTATUS status;
-	uint32_t flags = DS_RETURN_DNS_NAME;
+	uint32 flags = DS_RETURN_DNS_NAME;
 	const char *server_name = cli->cli->desthost;
 	const char *domain_name;
 	const char *site_name = NULL;
 	struct GUID domain_guid = GUID_zero();
-	struct netr_DsRGetDCNameInfo *info = NULL;
+	struct DS_DOMAIN_CONTROLLER_INFO *info = NULL;
 
 	if (argc < 2) {
-		fprintf(stderr, "Usage: %s [domain_name] [domain_guid] "
-				"[site_name] [flags]\n", argv[0]);
+		fprintf(stderr, "Usage: %s [domainname] [domain_name] [domain_guid] [site_name] [flags]\n", argv[0]);
 		return WERR_OK;
 	}
 
-	domain_name = argv[1];
+	if (argc >= 2)
+		domain_name = argv[1];
 
 	if (argc >= 3) {
 		if (!NT_STATUS_IS_OK(GUID_from_string(argv[2], &domain_guid))) {
@@ -251,35 +188,25 @@
 		}
 	}
 
-	if (argc >= 4) {
+	if (argc >= 4)
 		site_name = argv[3];
-	}
 
-	if (argc >= 5) {
+	if (argc >= 5)
 		sscanf(argv[4], "%x", &flags);
-	}
 
-	debug_dsdcinfo_flags(1,flags);
+	result = rpccli_netlogon_dsr_getdcnameex(cli, mem_ctx, server_name, domain_name, 
+						 &domain_guid, site_name, flags,
+						 &info);
 
-	status = rpccli_netr_DsRGetDCNameEx(cli, mem_ctx,
-					    server_name,
-					    domain_name,
-					    &domain_guid,
-					    site_name,
-					    flags,
-					    &info,
-					    &result);
-	if (!NT_STATUS_IS_OK(status)) {
-		return ntstatus_to_werror(status);
+	if (W_ERROR_IS_OK(result)) {
+		d_printf("DsGetDcNameEx gave\n");
+		display_ds_domain_controller_info(mem_ctx, info);
+		return WERR_OK;
 	}
 
-	if (!W_ERROR_IS_OK(result)) {
-		return result;
-	}
+	printf("rpccli_netlogon_dsr_getdcnameex returned %s\n",
+	       dos_errstr(result));
 
-	d_printf("DsRGetDCNameEx gave %s\n",
-		NDR_PRINT_STRUCT_STRING(mem_ctx, netr_DsRGetDCNameInfo, info));
-
 	return result;
 }
 
@@ -288,34 +215,28 @@
 					    const char **argv)
 {
 	WERROR result;
-	NTSTATUS status;
-	uint32_t flags = DS_RETURN_DNS_NAME;
+	uint32 flags = DS_RETURN_DNS_NAME;
 	const char *server_name = cli->cli->desthost;
-	const char *domain_name = NULL;
+	const char *domain_name;
 	const char *client_account = NULL;
-	uint32_t mask = 0;
+	uint32 mask = 0;
 	const char *site_name = NULL;
 	struct GUID domain_guid = GUID_zero();
-	struct netr_DsRGetDCNameInfo *info = NULL;
+	struct DS_DOMAIN_CONTROLLER_INFO *info = NULL;
 
 	if (argc < 2) {
-		fprintf(stderr, "Usage: %s [client_account] [acb_mask] "
-				"[domain_name] [domain_guid] [site_name] "
-				"[flags]\n", argv[0]);
+		fprintf(stderr, "Usage: %s [domainname] [client_account] [acb_mask] [domain_name] [domain_guid] [site_name] [flags]\n", argv[0]);
 		return WERR_OK;
 	}
 
-	if (argc >= 2) {
+	if (argc >= 2)
 		client_account = argv[1];
-	}
 
-	if (argc >= 3) {
+	if (argc >= 3)
 		mask = atoi(argv[2]);
-	}
-
-	if (argc >= 4) {
+	
+	if (argc >= 4)
 		domain_name = argv[3];
-	}
 
 	if (argc >= 5) {
 		if (!NT_STATUS_IS_OK(GUID_from_string(argv[4], &domain_guid))) {
@@ -323,37 +244,27 @@
 		}
 	}
 
-	if (argc >= 6) {
+	if (argc >= 6)
 		site_name = argv[5];
-	}
 
-	if (argc >= 7) {
+	if (argc >= 7)
 		sscanf(argv[6], "%x", &flags);
-	}
 
-	debug_dsdcinfo_flags(1,flags);
+	result = rpccli_netlogon_dsr_getdcnameex2(cli, mem_ctx, server_name, 
+						  client_account, mask,
+						  domain_name, &domain_guid,
+						  site_name, flags,
+						  &info);
 
-	status = rpccli_netr_DsRGetDCNameEx2(cli, mem_ctx,
-					     server_name,
-					     client_account,
-					     mask,
-					     domain_name,
-					     &domain_guid,
-					     site_name,
-					     flags,
-					     &info,
-					     &result);
-	if (!NT_STATUS_IS_OK(status)) {
-		return ntstatus_to_werror(status);
+	if (W_ERROR_IS_OK(result)) {
+		d_printf("DsGetDcNameEx2 gave\n");
+		display_ds_domain_controller_info(mem_ctx, info);
+		return WERR_OK;
 	}
 
-	if (!W_ERROR_IS_OK(result)) {
-		return result;
-	}
+	printf("rpccli_netlogon_dsr_getdcnameex2 returned %s\n",
+	       dos_errstr(result));
 
-	d_printf("DsRGetDCNameEx2 gave %s\n",
-		NDR_PRINT_STRUCT_STRING(mem_ctx, netr_DsRGetDCNameInfo, info));
-
 	return result;
 }
 
@@ -362,27 +273,20 @@
 					   TALLOC_CTX *mem_ctx, int argc,
 					   const char **argv)
 {
-	WERROR werr;
-	NTSTATUS status;
-	const char *sitename = NULL;
+	WERROR result;
+	char *sitename;
 
 	if (argc != 2) {
 		fprintf(stderr, "Usage: %s computername\n", argv[0]);
 		return WERR_OK;
 	}
 
-	status = rpccli_netr_DsRGetSiteName(cli, mem_ctx,
-					    argv[1],
-					    &sitename,
-					    &werr);
-	if (!NT_STATUS_IS_OK(status)) {
-		return ntstatus_to_werror(status);
-	}
+	result = rpccli_netlogon_dsr_getsitename(cli, mem_ctx, argv[1], &sitename);
 
-	if (!W_ERROR_IS_OK(werr)) {
+	if (!W_ERROR_IS_OK(result)) {
 		printf("rpccli_netlogon_dsr_gesitename returned %s\n",
-		       nt_errstr(werror_to_ntstatus(werr)));
-		return werr;
+		       nt_errstr(werror_to_ntstatus(result)));
+		return result;
 	}
 
 	printf("Computer %s is on Site: %s\n", argv[1], sitename);
@@ -390,292 +294,169 @@
 	return WERR_OK;
 }
 
-static WERROR cmd_netlogon_logon_ctrl(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx, int argc,
-				      const char **argv)
+static NTSTATUS cmd_netlogon_logon_ctrl(struct rpc_pipe_client *cli, 
+                                        TALLOC_CTX *mem_ctx, int argc, 
+                                        const char **argv)
 {
-	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
-	WERROR werr;
-	const char *logon_server = cli->cli->desthost;
-	enum netr_LogonControlCode function_code = 1;
-	uint32_t level = 1;
-	union netr_CONTROL_QUERY_INFORMATION info;
+#if 0
+	uint32 query_level = 1;
+#endif
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 
-	if (argc > 4) {
-		fprintf(stderr, "Usage: %s <logon_server> <function_code> "
-			"<level>\n", argv[0]);
-		return WERR_OK;
+	if (argc > 1) {
+		fprintf(stderr, "Usage: %s\n", argv[0]);
+		return NT_STATUS_OK;
 	}
 
-	if (argc >= 2) {
-		logon_server = argv[1];
+#if 0
+	result = cli_netlogon_logon_ctrl(cli, mem_ctx, query_level);
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
 	}
+#endif
 
-	if (argc >= 3) {
-		function_code = atoi(argv[2]);
-	}
-
-	if (argc >= 4) {
-		level = atoi(argv[3]);
-	}
-
-	status = rpccli_netr_LogonControl(cli, mem_ctx,
-					  logon_server,
-					  function_code,
-					  level,
-					  &info,
-					  &werr);
-	if (!NT_STATUS_IS_OK(status)) {
-		return ntstatus_to_werror(status);
-	}
-
-	if (!W_ERROR_IS_OK(werr)) {
-		return werr;
-	}
-
 	/* Display results */
 
-	return werr;
+	return result;
 }
 
 /* Display sam synchronisation information */
 
-static void display_sam_sync(struct netr_DELTA_ENUM_ARRAY *r)
+static void display_sam_sync(uint32 num_deltas, SAM_DELTA_HDR *hdr_deltas,
+                             SAM_DELTA_CTR *deltas)
 {
-	uint32_t i, j;
+        fstring name;
+        uint32 i, j;
 
-	for (i=0; i < r->num_deltas; i++) {
+        for (i = 0; i < num_deltas; i++) {
+                switch (hdr_deltas[i].type) {
+                case SAM_DELTA_DOMAIN_INFO:
+                        unistr2_to_ascii(name,
+                                         &deltas[i].domain_info.uni_dom_name,
+                                         sizeof(name) - 1);
+                        printf("Domain: %s\n", name);
+                        break;
+                case SAM_DELTA_GROUP_INFO:
+                        unistr2_to_ascii(name,
+                                         &deltas[i].group_info.uni_grp_name,
+                                         sizeof(name) - 1);
+                        printf("Group: %s\n", name);
+                        break;
+                case SAM_DELTA_ACCOUNT_INFO:
+                        unistr2_to_ascii(name, 
+                                         &deltas[i].account_info.uni_acct_name,
+                                         sizeof(name) - 1);
+                        printf("Account: %s\n", name);
+                        break;
+                case SAM_DELTA_ALIAS_INFO:
+                        unistr2_to_ascii(name, 
+                                         &deltas[i].alias_info.uni_als_name,
+                                         sizeof(name) - 1);
+                        printf("Alias: %s\n", name);
+                        break;
+                case SAM_DELTA_ALIAS_MEM: {
+                        SAM_ALIAS_MEM_INFO *alias = &deltas[i].als_mem_info;
 
-		union netr_DELTA_UNION u = r->delta_enum[i].delta_union;
-		union netr_DELTA_ID_UNION id = r->delta_enum[i].delta_id_union;
+                        for (j = 0; j < alias->num_members; j++) {
+                                fstring sid_str;
 
-		switch (r->delta_enum[i].delta_type) {
-		case NETR_DELTA_DOMAIN:
-			printf("Domain: %s\n",
-				u.domain->domain_name.string);
-			break;
-		case NETR_DELTA_GROUP:
-			printf("Group: %s\n",
-				u.group->group_name.string);
-			break;
-		case NETR_DELTA_DELETE_GROUP:
-			printf("Delete Group: %d\n",
-				u.delete_account.unknown);
-			break;
-		case NETR_DELTA_RENAME_GROUP:
-			printf("Rename Group: %s -> %s\n",
-				u.rename_group->OldName.string,
-				u.rename_group->NewName.string);
-			break;
-		case NETR_DELTA_USER:
-			printf("Account: %s\n",
-				u.user->account_name.string);
-			break;
-		case NETR_DELTA_DELETE_USER:
-			printf("Delete User: %d\n",
-				id.rid);
-			break;
-		case NETR_DELTA_RENAME_USER:
-			printf("Rename user: %s -> %s\n",
-				u.rename_user->OldName.string,
-				u.rename_user->NewName.string);
-			break;
-		case NETR_DELTA_GROUP_MEMBER:
-			for (j=0; j < u.group_member->num_rids; j++) {
-				printf("rid 0x%x, attrib 0x%08x\n",
-					u.group_member->rids[j],
-					u.group_member->attribs[j]);
-			}
-			break;
-		case NETR_DELTA_ALIAS:
-			printf("Alias: %s\n",
-				u.alias->alias_name.string);
-			break;
-		case NETR_DELTA_DELETE_ALIAS:
-			printf("Delete Alias: %d\n",
-				r->delta_enum[i].delta_id_union.rid);
-			break;
-		case NETR_DELTA_RENAME_ALIAS:
-			printf("Rename alias: %s -> %s\n",
-				u.rename_alias->OldName.string,
-				u.rename_alias->NewName.string);
-			break;
-		case NETR_DELTA_ALIAS_MEMBER:
-			for (j=0; j < u.alias_member->sids.num_sids; j++) {
-				fstring sid_str;
-				sid_to_fstring(sid_str,
-					u.alias_member->sids.sids[j].sid);
-				printf("%s\n", sid_str);
-			}
-			break;
-		case NETR_DELTA_POLICY:
-			printf("Policy\n");
-			break;
-		case NETR_DELTA_TRUSTED_DOMAIN:
-			printf("Trusted Domain: %s\n",
-				u.trusted_domain->domain_name.string);
-			break;
-		case NETR_DELTA_DELETE_TRUST:
-			printf("Delete Trust: %d\n",
-				u.delete_trust.unknown);
-			break;
-		case NETR_DELTA_ACCOUNT:
-			printf("Account\n");
-			break;
-		case NETR_DELTA_DELETE_ACCOUNT:
-			printf("Delete Account: %d\n",
-				u.delete_account.unknown);
-			break;
-		case NETR_DELTA_SECRET:
-			printf("Secret\n");
-			break;
-		case NETR_DELTA_DELETE_SECRET:
-			printf("Delete Secret: %d\n",
-				u.delete_secret.unknown);
-			break;
-		case NETR_DELTA_DELETE_GROUP2:
-			printf("Delete Group2: %s\n",
-				u.delete_group->account_name);
-			break;
-		case NETR_DELTA_DELETE_USER2:
-			printf("Delete User2: %s\n",
-				u.delete_user->account_name);
-			break;
-		case NETR_DELTA_MODIFY_COUNT:
-			printf("sam sequence update: 0x%016llx\n",
-				(unsigned long long) *u.modified_count);
-			break;
-		default:
-			printf("unknown delta type 0x%02x\n",
-				r->delta_enum[i].delta_type);
-			break;
-		}
-	}
+                                sid_to_string(sid_str, &alias->sids[j].sid);
+
+                                printf("%s\n", sid_str);
+                        }
+                        break;
+                }
+                case SAM_DELTA_GROUP_MEM: {
+                        SAM_GROUP_MEM_INFO *group = &deltas[i].grp_mem_info;
+
+                        for (j = 0; j < group->num_members; j++)
+                                printf("rid 0x%x, attrib 0x%08x\n", 
+                                          group->rids[j], group->attribs[j]);
+                        break;
+                }
+                case SAM_DELTA_MODIFIED_COUNT: {
+                        SAM_DELTA_MOD_COUNT *mc = &deltas[i].mod_count;
+
+                        printf("sam sequence update: 0x%04x\n", mc->seqnum);
+                        break;
+                }                                  
+                default:
+                        printf("unknown delta type 0x%02x\n", 
+                                  hdr_deltas[i].type);
+                        break;
+                }
+        }
 }
 
 /* Perform sam synchronisation */
 
-static NTSTATUS cmd_netlogon_sam_sync(struct rpc_pipe_client *cli,
+static NTSTATUS cmd_netlogon_sam_sync(struct rpc_pipe_client *cli, 
                                       TALLOC_CTX *mem_ctx, int argc,
                                       const char **argv)
 {
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	const char *logon_server = cli->cli->desthost;
-	const char *computername = global_myname();
-	struct netr_Authenticator credential;
-	struct netr_Authenticator return_authenticator;
-	enum netr_SamDatabaseID database_id = SAM_DATABASE_DOMAIN;
-	uint16_t restart_state = 0;
-	uint32_t sync_context = 0;
+        uint32 database_id = 0, num_deltas;
+        SAM_DELTA_HDR *hdr_deltas;
+        SAM_DELTA_CTR *deltas;
 
         if (argc > 2) {
                 fprintf(stderr, "Usage: %s [database_id]\n", argv[0]);
                 return NT_STATUS_OK;
         }
 
-	if (argc == 2) {
-		database_id = atoi(argv[1]);
-	}
+        if (argc == 2)
+                database_id = atoi(argv[1]);
 
-	/* Synchronise sam database */
+        /* Synchronise sam database */
 
-	do {
-		struct netr_DELTA_ENUM_ARRAY *delta_enum_array = NULL;
+	result = rpccli_netlogon_sam_sync(cli, mem_ctx, database_id,
+				       0, &num_deltas, &hdr_deltas, &deltas);
 
-		netlogon_creds_client_step(cli->dc, &credential);
+	if (!NT_STATUS_IS_OK(result))
+		goto done;
 
-		result = rpccli_netr_DatabaseSync2(cli, mem_ctx,
-						   logon_server,
-						   computername,
-						   &credential,
-						   &return_authenticator,
-						   database_id,
-						   restart_state,
-						   &sync_context,
-						   &delta_enum_array,
-						   0xffff);
+        /* Display results */
 
-		/* Check returned credentials. */
-		if (!netlogon_creds_client_check(cli->dc,
-						 &return_authenticator.cred)) {
-			DEBUG(0,("credentials chain check failed\n"));
-			return NT_STATUS_ACCESS_DENIED;
-		}
+        display_sam_sync(num_deltas, hdr_deltas, deltas);
 
-		if (NT_STATUS_IS_ERR(result)) {
-			break;
-		}
-
-		/* Display results */
-
-		display_sam_sync(delta_enum_array);
-
-		TALLOC_FREE(delta_enum_array);
-
-	} while (NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES));
-
-	return result;
+ done:
+        return result;
 }
 
 /* Perform sam delta synchronisation */
 
-static NTSTATUS cmd_netlogon_sam_deltas(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx, int argc,
-					const char **argv)
+static NTSTATUS cmd_netlogon_sam_deltas(struct rpc_pipe_client *cli, 
+                                        TALLOC_CTX *mem_ctx, int argc,
+                                        const char **argv)
 {
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	uint32_t tmp;
-	const char *logon_server = cli->cli->desthost;
-	const char *computername = global_myname();
-	struct netr_Authenticator credential;
-	struct netr_Authenticator return_authenticator;
-	enum netr_SamDatabaseID database_id = SAM_DATABASE_DOMAIN;
-	uint64_t sequence_num;
+        uint32 database_id, num_deltas, tmp;
+        SAM_DELTA_HDR *hdr_deltas;
+        SAM_DELTA_CTR *deltas;
+        uint64 seqnum;
 
-	if (argc != 3) {
-		fprintf(stderr, "Usage: %s database_id seqnum\n", argv[0]);
-		return NT_STATUS_OK;
-	}
+        if (argc != 3) {
+                fprintf(stderr, "Usage: %s database_id seqnum\n", argv[0]);
+                return NT_STATUS_OK;
+        }
 
-	database_id = atoi(argv[1]);
-	tmp = atoi(argv[2]);
+        database_id = atoi(argv[1]);
+        tmp = atoi(argv[2]);
 
-	sequence_num = tmp & 0xffff;
+        seqnum = tmp & 0xffff;
 
-	do {
-		struct netr_DELTA_ENUM_ARRAY *delta_enum_array = NULL;
+	result = rpccli_netlogon_sam_deltas(cli, mem_ctx, database_id,
+					 seqnum, &num_deltas, 
+					 &hdr_deltas, &deltas);
 
-		netlogon_creds_client_step(cli->dc, &credential);
+	if (!NT_STATUS_IS_OK(result))
+		goto done;
 
-		result = rpccli_netr_DatabaseDeltas(cli, mem_ctx,
-						    logon_server,
-						    computername,
-						    &credential,
-						    &return_authenticator,
-						    database_id,
-						    &sequence_num,
-						    &delta_enum_array,
-						    0xffff);
+        /* Display results */
 
-		/* Check returned credentials. */
-		if (!netlogon_creds_client_check(cli->dc,
-						 &return_authenticator.cred)) {
-			DEBUG(0,("credentials chain check failed\n"));
-			return NT_STATUS_ACCESS_DENIED;
-		}
-
-		if (NT_STATUS_IS_ERR(result)) {
-			break;
-		}
-
-		/* Display results */
-
-		display_sam_sync(delta_enum_array);
-
-		TALLOC_FREE(delta_enum_array);
-
-	} while (NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES));
-
+        display_sam_sync(num_deltas, hdr_deltas, deltas);
+        
+ done:
         return result;
 }
 
@@ -753,280 +534,24 @@
         return result;
 }
 
-static WERROR cmd_netlogon_gettrustrid(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx, int argc,
-				       const char **argv)
-{
-	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
-	WERROR werr = WERR_GENERAL_FAILURE;
-	const char *server_name = cli->cli->desthost;
-	const char *domain_name = lp_workgroup();
-	uint32_t rid = 0;
 
-	if (argc < 1 || argc > 3) {
-		fprintf(stderr, "Usage: %s <server_name> <domain_name>\n",
-			argv[0]);
-		return WERR_OK;
-	}
-
-	if (argc >= 2) {
-		server_name = argv[1];
-	}
-
-	if (argc >= 3) {
-		domain_name = argv[2];
-	}
-
-	status = rpccli_netr_LogonGetTrustRid(cli, mem_ctx,
-					      server_name,
-					      domain_name,
-					      &rid,
-					      &werr);
-	if (!NT_STATUS_IS_OK(status)) {
-		goto done;
-	}
-
-	if (W_ERROR_IS_OK(werr)) {
-		printf("Rid: %d\n", rid);
-	}
- done:
-	return werr;
-}
-
-static WERROR cmd_netlogon_dsr_enumtrustdom(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx, int argc,
-					    const char **argv)
-{
-	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
-	WERROR werr = WERR_GENERAL_FAILURE;
-	const char *server_name = cli->cli->desthost;
-	uint32_t trust_flags = NETR_TRUST_FLAG_IN_FOREST;
-	struct netr_DomainTrustList trusts;
-
-	if (argc < 1 || argc > 3) {
-		fprintf(stderr, "Usage: %s <server_name> <trust_flags>\n",
-			argv[0]);
-		return WERR_OK;
-	}
-
-	if (argc >= 2) {
-		server_name = argv[1];
-	}
-
-	if (argc >= 3) {
-		sscanf(argv[2], "%x", &trust_flags);
-	}
-
-	status = rpccli_netr_DsrEnumerateDomainTrusts(cli, mem_ctx,
-						      server_name,
-						      trust_flags,
-						      &trusts,
-						      &werr);
-	if (!NT_STATUS_IS_OK(status)) {
-		goto done;
-	}
-
-	if (W_ERROR_IS_OK(werr)) {
-		int i;
-
-		printf("%d domains returned\n", trusts.count);
-
-		for (i=0; i<trusts.count; i++ ) {
-			printf("%s (%s)\n",
-				trusts.array[i].dns_name,
-				trusts.array[i].netbios_name);
-		}
-	}
- done:
-	return werr;
-}
-
-static WERROR cmd_netlogon_deregisterdnsrecords(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx, int argc,
-						const char **argv)
-{
-	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
-	WERROR werr = WERR_GENERAL_FAILURE;
-	const char *server_name = cli->cli->desthost;
-	const char *domain = lp_workgroup();
-	const char *dns_host = NULL;
-
-	if (argc < 1 || argc > 4) {
-		fprintf(stderr, "Usage: %s <server_name> <domain_name> "
-			"<dns_host>\n", argv[0]);
-		return WERR_OK;
-	}
-
-	if (argc >= 2) {
-		server_name = argv[1];
-	}
-
-	if (argc >= 3) {
-		domain = argv[2];
-	}
-
-	if (argc >= 4) {
-		dns_host = argv[3];
-	}
-
-	status = rpccli_netr_DsrDeregisterDNSHostRecords(cli, mem_ctx,
-							 server_name,
-							 domain,
-							 NULL,
-							 NULL,
-							 dns_host,
-							 &werr);
-	if (!NT_STATUS_IS_OK(status)) {
-		goto done;
-	}
-
-	if (W_ERROR_IS_OK(werr)) {
-		printf("success\n");
-	}
- done:
-	return werr;
-}
-
-static WERROR cmd_netlogon_dsr_getforesttrustinfo(struct rpc_pipe_client *cli,
-						  TALLOC_CTX *mem_ctx, int argc,
-						  const char **argv)
-{
-	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
-	WERROR werr = WERR_GENERAL_FAILURE;
-	const char *server_name = cli->cli->desthost;
-	const char *trusted_domain_name = NULL;
-	struct lsa_ForestTrustInformation *info = NULL;
-	uint32_t flags = 0;
-
-	if (argc < 1 || argc > 4) {
-		fprintf(stderr, "Usage: %s <server_name> <trusted_domain_name> "
-			"<flags>\n", argv[0]);
-		return WERR_OK;
-	}
-
-	if (argc >= 2) {
-		server_name = argv[1];
-	}
-
-	if (argc >= 3) {
-		trusted_domain_name = argv[2];
-	}
-
-	if (argc >= 4) {
-		sscanf(argv[3], "%x", &flags);
-	}
-
-	status = rpccli_netr_DsRGetForestTrustInformation(cli, mem_ctx,
-							 server_name,
-							 trusted_domain_name,
-							 flags,
-							 &info,
-							 &werr);
-	if (!NT_STATUS_IS_OK(status)) {
-		goto done;
-	}
-
-	if (W_ERROR_IS_OK(werr)) {
-		printf("success\n");
-	}
- done:
-	return werr;
-}
-
-static WERROR cmd_netlogon_enumtrusteddomains(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx, int argc,
-					      const char **argv)
-{
-	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
-	WERROR werr = WERR_GENERAL_FAILURE;
-	const char *server_name = cli->cli->desthost;
-	struct netr_Blob blob;
-
-
-	if (argc < 1 || argc > 3) {
-		fprintf(stderr, "Usage: %s <server_name>\n", argv[0]);
-		return WERR_OK;
-	}
-
-	if (argc >= 2) {
-		server_name = argv[1];
-	}
-
-	status = rpccli_netr_NetrEnumerateTrustedDomains(cli, mem_ctx,
-							 server_name,
-							 &blob,
-							 &werr);
-	if (!NT_STATUS_IS_OK(status)) {
-		goto done;
-	}
-
-	if (W_ERROR_IS_OK(werr)) {
-		printf("success\n");
-		dump_data(1, blob.data, blob.length);
-	}
- done:
-	return werr;
-}
-
-static WERROR cmd_netlogon_enumtrusteddomainsex(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx, int argc,
-						const char **argv)
-{
-	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
-	WERROR werr = WERR_GENERAL_FAILURE;
-	const char *server_name = cli->cli->desthost;
-	struct netr_DomainTrustList list;
-
-	if (argc < 1 || argc > 3) {
-		fprintf(stderr, "Usage: %s <server_name>\n", argv[0]);
-		return WERR_OK;
-	}
-
-	if (argc >= 2) {
-		server_name = argv[1];
-	}
-
-	status = rpccli_netr_NetrEnumerateTrustedDomainsEx(cli, mem_ctx,
-							   server_name,
-							   &list,
-							   &werr);
-	if (!NT_STATUS_IS_OK(status)) {
-		goto done;
-	}
-
-	if (W_ERROR_IS_OK(werr)) {
-		printf("success\n");
-	}
- done:
-	return werr;
-}
-
-
 /* List of commands exported by this module */
 
 struct cmd_set netlogon_commands[] = {
 
 	{ "NETLOGON" },
 
-	{ "logonctrl2", RPC_RTYPE_WERROR, NULL, cmd_netlogon_logon_ctrl2, PI_NETLOGON, NULL, "Logon Control 2",     "" },
+	{ "logonctrl2", RPC_RTYPE_NTSTATUS, cmd_netlogon_logon_ctrl2, NULL, PI_NETLOGON, NULL, "Logon Control 2",     "" },
 	{ "getanydcname", RPC_RTYPE_WERROR, NULL, cmd_netlogon_getanydcname, PI_NETLOGON, NULL, "Get trusted DC name",     "" },
-	{ "getdcname", RPC_RTYPE_WERROR, NULL, cmd_netlogon_getdcname, PI_NETLOGON, NULL, "Get trusted PDC name",     "" },
 	{ "dsr_getdcname", RPC_RTYPE_WERROR, NULL, cmd_netlogon_dsr_getdcname, PI_NETLOGON, NULL, "Get trusted DC name",     "" },
 	{ "dsr_getdcnameex", RPC_RTYPE_WERROR, NULL, cmd_netlogon_dsr_getdcnameex, PI_NETLOGON, NULL, "Get trusted DC name",     "" },
 	{ "dsr_getdcnameex2", RPC_RTYPE_WERROR, NULL, cmd_netlogon_dsr_getdcnameex2, PI_NETLOGON, NULL, "Get trusted DC name",     "" },
 	{ "dsr_getsitename", RPC_RTYPE_WERROR, NULL, cmd_netlogon_dsr_getsitename, PI_NETLOGON, NULL, "Get sitename",     "" },
-	{ "dsr_getforesttrustinfo", RPC_RTYPE_WERROR, NULL, cmd_netlogon_dsr_getforesttrustinfo, PI_NETLOGON, NULL, "Get Forest Trust Info",     "" },
-	{ "logonctrl",  RPC_RTYPE_WERROR, NULL, cmd_netlogon_logon_ctrl, PI_NETLOGON, NULL, "Logon Control",       "" },
+	{ "logonctrl",  RPC_RTYPE_NTSTATUS, cmd_netlogon_logon_ctrl,  NULL, PI_NETLOGON, NULL, "Logon Control",       "" },
 	{ "samsync",    RPC_RTYPE_NTSTATUS, cmd_netlogon_sam_sync,    NULL, PI_NETLOGON, NULL, "Sam Synchronisation", "" },
 	{ "samdeltas",  RPC_RTYPE_NTSTATUS, cmd_netlogon_sam_deltas,  NULL, PI_NETLOGON, NULL, "Query Sam Deltas",    "" },
 	{ "samlogon",   RPC_RTYPE_NTSTATUS, cmd_netlogon_sam_logon,   NULL, PI_NETLOGON, NULL, "Sam Logon",           "" },
 	{ "change_trust_pw",   RPC_RTYPE_NTSTATUS, cmd_netlogon_change_trust_pw,   NULL, PI_NETLOGON, NULL, "Change Trust Account Password",           "" },
-	{ "gettrustrid", RPC_RTYPE_WERROR, NULL, cmd_netlogon_gettrustrid, PI_NETLOGON, NULL, "Get trust rid",     "" },
-	{ "dsr_enumtrustdom", RPC_RTYPE_WERROR, NULL, cmd_netlogon_dsr_enumtrustdom, PI_NETLOGON, NULL, "Enumerate trusted domains",     "" },
-	{ "dsenumdomtrusts",  RPC_RTYPE_WERROR, NULL, cmd_netlogon_dsr_enumtrustdom, PI_NETLOGON, NULL, "Enumerate all trusted domains in an AD forest",     "" },
-	{ "deregisterdnsrecords", RPC_RTYPE_WERROR, NULL, cmd_netlogon_deregisterdnsrecords, PI_NETLOGON, NULL, "Deregister DNS records",     "" },
-	{ "netrenumtrusteddomains", RPC_RTYPE_WERROR, NULL, cmd_netlogon_enumtrusteddomains, PI_NETLOGON, NULL, "Enumerate trusted domains",     "" },
-	{ "netrenumtrusteddomainsex", RPC_RTYPE_WERROR, NULL, cmd_netlogon_enumtrusteddomainsex, PI_NETLOGON, NULL, "Enumerate trusted domains",     "" },
 
 	{ NULL }
 };

Deleted: branches/samba/upstream/source/rpcclient/cmd_ntsvcs.c
===================================================================
--- branches/samba/upstream/source/rpcclient/cmd_ntsvcs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpcclient/cmd_ntsvcs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,189 +0,0 @@
-/*
-   Unix SMB/CIFS implementation.
-   RPC pipe client
-
-   Copyright (C) Günther Deschner 2008
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-#include "rpcclient.h"
-
-static WERROR cmd_ntsvcs_get_version(struct rpc_pipe_client *cli,
-				     TALLOC_CTX *mem_ctx,
-				     int argc,
-				     const char **argv)
-{
-	NTSTATUS status;
-	WERROR werr;
-	uint16_t version;
-
-	status = rpccli_PNP_GetVersion(cli, mem_ctx,
-				       &version, &werr);
-	if (!NT_STATUS_IS_OK(status)) {
-		return ntstatus_to_werror(status);
-	}
-
-	if (W_ERROR_IS_OK(werr)) {
-		printf("version: %d\n", version);
-	}
-
-	return werr;
-}
-
-static WERROR cmd_ntsvcs_validate_dev_inst(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   int argc,
-					   const char **argv)
-{
-	NTSTATUS status;
-	WERROR werr;
-	const char *devicepath = NULL;
-	uint32_t flags = 0;
-
-	if (argc < 2 || argc > 3) {
-		printf("usage: %s [devicepath] <flags>\n", argv[0]);
-		return WERR_OK;
-	}
-
-	devicepath = argv[1];
-
-	if (argc >= 3) {
-		flags = atoi(argv[2]);
-	}
-
-	status = rpccli_PNP_ValidateDeviceInstance(cli, mem_ctx,
-						   devicepath,
-						   flags,
-						   &werr);
-	if (!NT_STATUS_IS_OK(status)) {
-		return ntstatus_to_werror(status);
-	}
-
-	return werr;
-}
-
-static WERROR cmd_ntsvcs_get_device_list_size(struct rpc_pipe_client *cli,
-					      TALLOC_CTX *mem_ctx,
-					      int argc,
-					      const char **argv)
-{
-	NTSTATUS status;
-	WERROR werr;
-	const char *devicename = NULL;
-	uint32_t flags = 0;
-	uint32_t size = 0;
-
-	if (argc < 2 || argc > 4) {
-		printf("usage: %s [devicename] <flags>\n", argv[0]);
-		return WERR_OK;
-	}
-
-	devicename = argv[1];
-
-	if (argc >= 3) {
-		flags = atoi(argv[2]);
-	}
-
-	status = rpccli_PNP_GetDeviceListSize(cli, mem_ctx,
-					      devicename,
-					      &size,
-					      flags,
-					      &werr);
-	if (!NT_STATUS_IS_OK(status)) {
-		return ntstatus_to_werror(status);
-	}
-
-	if (W_ERROR_IS_OK(werr)) {
-		printf("size: %d\n", size);
-	}
-
-	return werr;
-}
-
-static WERROR cmd_ntsvcs_hw_prof_flags(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       int argc,
-				       const char **argv)
-{
-	NTSTATUS status;
-	WERROR werr;
-	const char *devicepath = NULL;
-	uint32_t unk3 = 0;
-	uint16_t unk4 = 0;
-	const char *unk5 = NULL;
-	const char *unk5a = NULL;
-
-	if (argc < 2) {
-		printf("usage: %s [devicepath]\n", argv[0]);
-		return WERR_OK;
-	}
-
-	devicepath = argv[1];
-
-	status = rpccli_PNP_HwProfFlags(cli, mem_ctx,
-					0,
-					devicepath,
-					0,
-					&unk3,
-					&unk4,
-					unk5,
-					&unk5a,
-					0,
-					0,
-					&werr);
-	if (!NT_STATUS_IS_OK(status)) {
-		return ntstatus_to_werror(status);
-	}
-
-	return werr;
-}
-
-static WERROR cmd_ntsvcs_get_hw_prof_info(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  int argc,
-					  const char **argv)
-{
-	NTSTATUS status;
-	WERROR werr;
-	uint32_t idx = 0;
-	struct PNP_HwProfInfo info;
-	uint32_t unknown1 = 0, unknown2 = 0;
-
-	ZERO_STRUCT(info);
-
-	status = rpccli_PNP_GetHwProfInfo(cli, mem_ctx,
-					  idx,
-					  &info,
-					  unknown1,
-					  unknown2,
-					  &werr);
-	if (!NT_STATUS_IS_OK(status)) {
-		return ntstatus_to_werror(status);
-	}
-
-	return werr;
-}
-
-struct cmd_set ntsvcs_commands[] = {
-
-	{ "NTSVCS" },
-	{ "ntsvcs_getversion", RPC_RTYPE_WERROR, NULL, cmd_ntsvcs_get_version, PI_NTSVCS, NULL, "Query NTSVCS version", "" },
-	{ "ntsvcs_validatedevinst", RPC_RTYPE_WERROR, NULL, cmd_ntsvcs_validate_dev_inst, PI_NTSVCS, NULL, "Query NTSVCS device instance", "" },
-	{ "ntsvcs_getdevlistsize", RPC_RTYPE_WERROR, NULL, cmd_ntsvcs_get_device_list_size, PI_NTSVCS, NULL, "Query NTSVCS get device list", "" },
-	{ "ntsvcs_hwprofflags", RPC_RTYPE_WERROR, NULL, cmd_ntsvcs_hw_prof_flags, PI_NTSVCS, NULL, "Query NTSVCS HW prof flags", "" },
-	{ "ntsvcs_hwprofinfo", RPC_RTYPE_WERROR, NULL, cmd_ntsvcs_get_hw_prof_info, PI_NTSVCS, NULL, "Query NTSVCS HW prof info", "" },
-	{ NULL }
-};

Modified: branches/samba/upstream/source/rpcclient/cmd_samr.c
===================================================================
--- branches/samba/upstream/source/rpcclient/cmd_samr.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpcclient/cmd_samr.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    RPC pipe client
 
@@ -6,20 +6,20 @@
    Copyright (C) Luke Kenneth Casson Leighton 1996-2000,
    Copyright (C) Elrond                            2000,
    Copyright (C) Tim Potter                        2000
-   Copyright (C) Guenther Deschner		   2008
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -28,313 +28,381 @@
 extern DOM_SID domain_sid;
 
 /****************************************************************************
- display samr_user_info_7 structure
+ display sam_user_info_7 structure
  ****************************************************************************/
-static void display_samr_user_info_7(struct samr_UserInfo7 *r)
+static void display_sam_user_info_7(SAM_USER_INFO_7 *usr)
 {
-	printf("\tUser Name   :\t%s\n", r->account_name.string);
-}
+	fstring temp;
 
-/****************************************************************************
- display samr_user_info_9 structure
- ****************************************************************************/
-static void display_samr_user_info_9(struct samr_UserInfo9 *r)
-{
-	printf("\tPrimary group RID   :\tox%x\n", r->primary_gid);
+	unistr2_to_ascii(temp, &usr->uni_name, sizeof(temp)-1);
+	printf("\tUser Name   :\t%s\n", temp);
 }
 
 /****************************************************************************
- display samr_user_info_16 structure
+ display sam_user_info_9 structure
  ****************************************************************************/
-static void display_samr_user_info_16(struct samr_UserInfo16 *r)
+static void display_sam_user_info_9(SAM_USER_INFO_9 *usr)
 {
-	printf("\tAcct Flags   :\tox%x\n", r->acct_flags);
+	printf("\tPrimary group RID   :\tox%x\n", usr->rid_group);
 }
 
 /****************************************************************************
- display samr_user_info_20 structure
+ display sam_user_info_16 structure
  ****************************************************************************/
-static void display_samr_user_info_20(struct samr_UserInfo20 *r)
+static void display_sam_user_info_16(SAM_USER_INFO_16 *usr)
 {
-	printf("\tRemote Dial :\n");
-	dump_data(0, (uint8_t *)r->parameters.array, r->parameters.length*2);
+	printf("\tAcct Flags   :\tox%x\n", usr->acb_info);
 }
 
-
 /****************************************************************************
- display samr_user_info_21 structure
+ display sam_user_info_21 structure
  ****************************************************************************/
-static void display_samr_user_info_21(struct samr_UserInfo21 *r)
+static void display_sam_user_info_21(SAM_USER_INFO_21 *usr)
 {
-	printf("\tUser Name   :\t%s\n", r->account_name.string);
-	printf("\tFull Name   :\t%s\n", r->full_name.string);
-	printf("\tHome Drive  :\t%s\n", r->home_directory.string);
-	printf("\tDir Drive   :\t%s\n", r->home_drive.string);
-	printf("\tProfile Path:\t%s\n", r->profile_path.string);
-	printf("\tLogon Script:\t%s\n", r->logon_script.string);
-	printf("\tDescription :\t%s\n", r->description.string);
-	printf("\tWorkstations:\t%s\n", r->workstations.string);
-	printf("\tComment     :\t%s\n", r->comment.string);
-	printf("\tRemote Dial :\n");
-	dump_data(0, (uint8_t *)r->parameters.array, r->parameters.length*2);
+	fstring temp;
 
-	printf("\tLogon Time               :\t%s\n",
-	       http_timestring(nt_time_to_unix(r->last_logon)));
-	printf("\tLogoff Time              :\t%s\n",
-	       http_timestring(nt_time_to_unix(r->last_logoff)));
-	printf("\tKickoff Time             :\t%s\n",
-	       http_timestring(nt_time_to_unix(r->acct_expiry)));
-	printf("\tPassword last set Time   :\t%s\n",
-	       http_timestring(nt_time_to_unix(r->last_password_change)));
-	printf("\tPassword can change Time :\t%s\n",
-	       http_timestring(nt_time_to_unix(r->allow_password_change)));
-	printf("\tPassword must change Time:\t%s\n",
-	       http_timestring(nt_time_to_unix(r->force_password_change)));
-
+	unistr2_to_ascii(temp, &usr->uni_user_name, sizeof(temp)-1);
+	printf("\tUser Name   :\t%s\n", temp);
+	
+	unistr2_to_ascii(temp, &usr->uni_full_name, sizeof(temp)-1);
+	printf("\tFull Name   :\t%s\n", temp);
+	
+	unistr2_to_ascii(temp, &usr->uni_home_dir, sizeof(temp)-1);
+	printf("\tHome Drive  :\t%s\n", temp);
+	
+	unistr2_to_ascii(temp, &usr->uni_dir_drive, sizeof(temp)-1);
+	printf("\tDir Drive   :\t%s\n", temp);
+	
+	unistr2_to_ascii(temp, &usr->uni_profile_path, sizeof(temp)-1);
+	printf("\tProfile Path:\t%s\n", temp);
+	
+	unistr2_to_ascii(temp, &usr->uni_logon_script, sizeof(temp)-1);
+	printf("\tLogon Script:\t%s\n", temp);
+	
+	unistr2_to_ascii(temp, &usr->uni_acct_desc, sizeof(temp)-1);
+	printf("\tDescription :\t%s\n", temp);
+	
+	unistr2_to_ascii(temp, &usr->uni_workstations, sizeof(temp)-1);
+	printf("\tWorkstations:\t%s\n", temp);
+	
+	unistr2_to_ascii(temp, &usr->uni_comment, sizeof(temp)-1);
+	printf("\tUnknown Str :\t%s\n", temp);
+	
+	unistr2_to_ascii(temp, &usr->uni_munged_dial, sizeof(temp)-1);
+	printf("\tRemote Dial :\t%s\n", temp);
+	
+	printf("\tLogon Time               :\t%s\n", 
+	       http_timestring(nt_time_to_unix(usr->logon_time)));
+	printf("\tLogoff Time              :\t%s\n", 
+	       http_timestring(nt_time_to_unix(usr->logoff_time)));
+	printf("\tKickoff Time             :\t%s\n", 
+	       http_timestring(nt_time_to_unix(usr->kickoff_time)));
+	printf("\tPassword last set Time   :\t%s\n", 
+	       http_timestring(nt_time_to_unix(usr->pass_last_set_time)));
+	printf("\tPassword can change Time :\t%s\n", 
+	       http_timestring(nt_time_to_unix(usr->pass_can_change_time)));
+	printf("\tPassword must change Time:\t%s\n", 
+	       http_timestring(nt_time_to_unix(usr->pass_must_change_time)));
+	
 	printf("\tunknown_2[0..31]...\n"); /* user passwords? */
-
-	printf("\tuser_rid :\t0x%x\n"  , r->rid); /* User ID */
-	printf("\tgroup_rid:\t0x%x\n"  , r->primary_gid); /* Group ID */
-	printf("\tacb_info :\t0x%08x\n", r->acct_flags); /* Account Control Info */
-
-	printf("\tfields_present:\t0x%08x\n", r->fields_present); /* 0x00ff ffff */
-	printf("\tlogon_divs:\t%d\n", r->logon_hours.units_per_week); /* 0x0000 00a8 which is 168 which is num hrs in a week */
-	printf("\tbad_password_count:\t0x%08x\n", r->bad_password_count);
-	printf("\tlogon_count:\t0x%08x\n", r->logon_count);
-
+	
+	printf("\tuser_rid :\t0x%x\n"  , usr->user_rid ); /* User ID */
+	printf("\tgroup_rid:\t0x%x\n"  , usr->group_rid); /* Group ID */
+	printf("\tacb_info :\t0x%08x\n", usr->acb_info ); /* Account Control Info */
+	
+	printf("\tfields_present:\t0x%08x\n", usr->fields_present); /* 0x00ff ffff */
+	printf("\tlogon_divs:\t%d\n", usr->logon_divs); /* 0x0000 00a8 which is 168 which is num hrs in a week */
+	printf("\tbad_password_count:\t0x%08x\n", usr->bad_password_count);
+	printf("\tlogon_count:\t0x%08x\n", usr->logon_count);
+	
 	printf("\tpadding1[0..7]...\n");
-
-	if (r->logon_hours.bits) {
-		printf("\tlogon_hrs[0..%d]...\n", r->logon_hours.units_per_week/8);
+	
+	if (usr->ptr_logon_hrs) {
+		printf("\tlogon_hrs[0..%d]...\n", usr->logon_hrs.len);
 	}
 }
 
 
-static void display_password_properties(uint32_t password_properties)
+static void display_password_properties(uint32 password_properties) 
 {
 	printf("password_properties: 0x%08x\n", password_properties);
-
+		
 	if (password_properties & DOMAIN_PASSWORD_COMPLEX)
 		printf("\tDOMAIN_PASSWORD_COMPLEX\n");
-
+			
 	if (password_properties & DOMAIN_PASSWORD_NO_ANON_CHANGE)
 		printf("\tDOMAIN_PASSWORD_NO_ANON_CHANGE\n");
-
+			
 	if (password_properties & DOMAIN_PASSWORD_NO_CLEAR_CHANGE)
 		printf("\tDOMAIN_PASSWORD_NO_CLEAR_CHANGE\n");
-
-	if (password_properties & DOMAIN_PASSWORD_LOCKOUT_ADMINS)
-		printf("\tDOMAIN_PASSWORD_LOCKOUT_ADMINS\n");
-
+			
+	if (password_properties & DOMAIN_LOCKOUT_ADMINS)
+		printf("\tDOMAIN_LOCKOUT_ADMINS\n");
+			
 	if (password_properties & DOMAIN_PASSWORD_STORE_CLEARTEXT)
 		printf("\tDOMAIN_PASSWORD_STORE_CLEARTEXT\n");
-
+			
 	if (password_properties & DOMAIN_REFUSE_PASSWORD_CHANGE)
 		printf("\tDOMAIN_REFUSE_PASSWORD_CHANGE\n");
 }
 
-static void display_sam_dom_info_1(struct samr_DomInfo1 *info1)
+static void display_sam_unk_info_1(SAM_UNK_INFO_1 *info1)
 {
-	printf("Minimum password length:\t\t\t%d\n",
-		info1->min_password_length);
-	printf("Password uniqueness (remember x passwords):\t%d\n",
-		info1->password_history_length);
+	
+	printf("Minimum password length:\t\t\t%d\n", info1->min_length_password);
+	printf("Password uniqueness (remember x passwords):\t%d\n", info1->password_history);
 	display_password_properties(info1->password_properties);
-	printf("password expire in:\t\t\t\t%s\n",
-		display_time(info1->max_password_age));
-	printf("Min password age (allow changing in x days):\t%s\n",
-		display_time(info1->min_password_age));
+	printf("password expire in:\t\t\t\t%s\n", display_time(info1->expire));
+	printf("Min password age (allow changing in x days):\t%s\n", display_time(info1->min_passwordage));
 }
 
-static void display_sam_dom_info_2(struct samr_DomInfo2 *info2)
+static void display_sam_unk_info_2(SAM_UNK_INFO_2 *info2)
 {
-	printf("Domain:\t\t%s\n", info2->domain_name.string);
-	printf("Server:\t\t%s\n", info2->primary.string);
-	printf("Comment:\t%s\n", info2->comment.string);
+	fstring name;
 
-	printf("Total Users:\t%d\n", info2->num_users);
-	printf("Total Groups:\t%d\n", info2->num_groups);
-	printf("Total Aliases:\t%d\n", info2->num_aliases);
+	unistr2_to_ascii(name, &info2->uni_domain, sizeof(name) - 1); 
+	printf("Domain:\t\t%s\n", name);
 
-	printf("Sequence No:\t%llu\n", (unsigned long long)info2->sequence_num);
+	unistr2_to_ascii(name, &info2->uni_server, sizeof(name) - 1); 
+	printf("Server:\t\t%s\n", name);
 
-	printf("Force Logoff:\t%d\n",
-		(int)nt_time_to_unix_abs(&info2->force_logoff_time));
+	unistr2_to_ascii(name, &info2->uni_comment, sizeof(name) - 1); 
+	printf("Comment:\t%s\n", name);
 
-	printf("Unknown 2:\t0x%x\n", info2->unknown2);
-	printf("Server Role:\t%s\n", server_role_str(info2->role));
-	printf("Unknown 3:\t0x%x\n", info2->unknown3);
+	printf("Total Users:\t%d\n", info2->num_domain_usrs);
+	printf("Total Groups:\t%d\n", info2->num_domain_grps);
+	printf("Total Aliases:\t%d\n", info2->num_local_grps);
+	
+	printf("Sequence No:\t%llu\n", (unsigned long long)info2->seq_num);
+
+	printf("Force Logoff:\t%d\n", (int)nt_time_to_unix_abs(&info2->logout));
+
+	printf("Unknown 4:\t0x%x\n", info2->unknown_4);
+	printf("Server Role:\t%s\n", server_role_str(info2->server_role));
+	printf("Unknown 6:\t0x%x\n", info2->unknown_6);
 }
 
-static void display_sam_dom_info_3(struct samr_DomInfo3 *info3)
+static void display_sam_unk_info_3(SAM_UNK_INFO_3 *info3)
 {
-	printf("Force Logoff:\t%d\n",
-		(int)nt_time_to_unix_abs(&info3->force_logoff_time));
+	printf("Force Logoff:\t%d\n", (int)nt_time_to_unix_abs(&info3->logout));
 }
 
-static void display_sam_dom_info_4(struct samr_DomInfo4 *info4)
+static void display_sam_unk_info_4(SAM_UNK_INFO_4 *info4)
 {
-	printf("Comment:\t%s\n", info4->comment.string);
+	fstring name;
+
+	unistr2_to_ascii(name, &info4->uni_comment, sizeof(name) - 1); 
+	printf("Comment:\t%s\n", name);
 }
 
-static void display_sam_dom_info_5(struct samr_DomInfo5 *info5)
+static void display_sam_unk_info_5(SAM_UNK_INFO_5 *info5)
 {
-	printf("Domain:\t\t%s\n", info5->domain_name.string);
+	fstring name;
+
+	unistr2_to_ascii(name, &info5->uni_domain, sizeof(name) - 1); 
+	printf("Domain:\t\t%s\n", name);
 }
 
-static void display_sam_dom_info_6(struct samr_DomInfo6 *info6)
+static void display_sam_unk_info_6(SAM_UNK_INFO_6 *info6)
 {
-	printf("Server:\t\t%s\n", info6->primary.string);
+	fstring name;
+
+	unistr2_to_ascii(name, &info6->uni_server, sizeof(name) - 1); 
+	printf("Server:\t\t%s\n", name);
 }
 
-static void display_sam_dom_info_7(struct samr_DomInfo7 *info7)
+static void display_sam_unk_info_7(SAM_UNK_INFO_7 *info7)
 {
-	printf("Server Role:\t%s\n", server_role_str(info7->role));
+	printf("Server Role:\t%s\n", server_role_str(info7->server_role));
 }
 
-static void display_sam_dom_info_8(struct samr_DomInfo8 *info8)
+static void display_sam_unk_info_8(SAM_UNK_INFO_8 *info8)
 {
-	printf("Sequence No:\t%llu\n", (unsigned long long)info8->sequence_num);
-	printf("Domain Create Time:\t%s\n",
+	printf("Sequence No:\t%llu\n", (unsigned long long)info8->seq_num);
+	printf("Domain Create Time:\t%s\n", 
 		http_timestring(nt_time_to_unix(info8->domain_create_time)));
 }
 
-static void display_sam_dom_info_9(struct samr_DomInfo9 *info9)
+static void display_sam_unk_info_9(SAM_UNK_INFO_9 *info9)
 {
 	printf("unknown:\t%d (0x%08x)\n", info9->unknown, info9->unknown);
 }
 
-static void display_sam_dom_info_12(struct samr_DomInfo12 *info12)
+static void display_sam_unk_info_12(SAM_UNK_INFO_12 *info12)
 {
-	printf("Bad password lockout duration:               %s\n",
-		display_time(info12->lockout_duration));
-	printf("Reset Lockout after:                         %s\n",
-		display_time(info12->lockout_window));
-	printf("Lockout after bad attempts:                  %d\n",
-		info12->lockout_threshold);
+	printf("Bad password lockout duration:               %s\n", display_time(info12->duration));
+	printf("Reset Lockout after:                         %s\n", display_time(info12->reset_count));
+	printf("Lockout after bad attempts:                  %d\n", info12->bad_attempt_lockout);
 }
 
-static void display_sam_dom_info_13(struct samr_DomInfo13 *info13)
+static void display_sam_unk_info_13(SAM_UNK_INFO_13 *info13)
 {
-	printf("Sequence No:\t%llu\n", (unsigned long long)info13->sequence_num);
-	printf("Domain Create Time:\t%s\n",
+	printf("Sequence No:\t%llu\n", (unsigned long long)info13->seq_num);
+	printf("Domain Create Time:\t%s\n", 
 		http_timestring(nt_time_to_unix(info13->domain_create_time)));
 	printf("Unknown1:\t%d\n", info13->unknown1);
 	printf("Unknown2:\t%d\n", info13->unknown2);
 
 }
 
-static void display_sam_info_1(struct samr_DispEntryGeneral *r)
+static void display_sam_info_1(SAM_ENTRY1 *e1, SAM_STR1 *s1)
 {
-	printf("index: 0x%x ", r->idx);
-	printf("RID: 0x%x ", r->rid);
-	printf("acb: 0x%08x ", r->acct_flags);
-	printf("Account: %s\t", r->account_name.string);
-	printf("Name: %s\t", r->full_name.string);
-	printf("Desc: %s\n", r->description.string);
+	fstring tmp;
+
+	printf("index: 0x%x ", e1->user_idx);
+	printf("RID: 0x%x ", e1->rid_user);
+	printf("acb: 0x%x ", e1->acb_info);
+
+	unistr2_to_ascii(tmp, &s1->uni_acct_name, sizeof(tmp)-1);
+	printf("Account: %s\t", tmp);
+
+	unistr2_to_ascii(tmp, &s1->uni_full_name, sizeof(tmp)-1);
+	printf("Name: %s\t", tmp);
+
+	unistr2_to_ascii(tmp, &s1->uni_acct_desc, sizeof(tmp)-1);
+	printf("Desc: %s\n", tmp);
 }
 
-static void display_sam_info_2(struct samr_DispEntryFull *r)
+static void display_sam_info_2(SAM_ENTRY2 *e2, SAM_STR2 *s2)
 {
-	printf("index: 0x%x ", r->idx);
-	printf("RID: 0x%x ", r->rid);
-	printf("acb: 0x%08x ", r->acct_flags);
-	printf("Account: %s\t", r->account_name.string);
-	printf("Desc: %s\n", r->description.string);
+	fstring tmp;
+
+	printf("index: 0x%x ", e2->user_idx);
+	printf("RID: 0x%x ", e2->rid_user);
+	printf("acb: 0x%x ", e2->acb_info);
+	
+	unistr2_to_ascii(tmp, &s2->uni_srv_name, sizeof(tmp)-1);
+	printf("Account: %s\t", tmp);
+
+	unistr2_to_ascii(tmp, &s2->uni_srv_desc, sizeof(tmp)-1);
+	printf("Name: %s\n", tmp);
+
 }
 
-static void display_sam_info_3(struct samr_DispEntryFullGroup *r)
+static void display_sam_info_3(SAM_ENTRY3 *e3, SAM_STR3 *s3)
 {
-	printf("index: 0x%x ", r->idx);
-	printf("RID: 0x%x ", r->rid);
-	printf("acb: 0x%08x ", r->acct_flags);
-	printf("Account: %s\t", r->account_name.string);
-	printf("Desc: %s\n", r->description.string);
+	fstring tmp;
+
+	printf("index: 0x%x ", e3->grp_idx);
+	printf("RID: 0x%x ", e3->rid_grp);
+	printf("attr: 0x%x ", e3->attr);
+	
+	unistr2_to_ascii(tmp, &s3->uni_grp_name, sizeof(tmp)-1);
+	printf("Account: %s\t", tmp);
+
+	unistr2_to_ascii(tmp, &s3->uni_grp_desc, sizeof(tmp)-1);
+	printf("Name: %s\n", tmp);
+
 }
 
-static void display_sam_info_4(struct samr_DispEntryAscii *r)
+static void display_sam_info_4(SAM_ENTRY4 *e4, SAM_STR4 *s4)
 {
-	printf("index: 0x%x ", r->idx);
-	printf("Account: %s\n", r->account_name.string);
+	int i;
+
+	printf("index: %d ", e4->user_idx);
+	
+	printf("Account: ");
+	for (i=0; i<s4->acct_name.str_str_len; i++)
+		printf("%c", s4->acct_name.buffer[i]);
+	printf("\n");
+
 }
 
-static void display_sam_info_5(struct samr_DispEntryAscii *r)
+static void display_sam_info_5(SAM_ENTRY5 *e5, SAM_STR5 *s5)
 {
-	printf("index: 0x%x ", r->idx);
-	printf("Account: %s\n", r->account_name.string);
+	int i;
+
+	printf("index: 0x%x ", e5->grp_idx);
+	
+	printf("Account: ");
+	for (i=0; i<s5->grp_name.str_str_len; i++)
+		printf("%c", s5->grp_name.buffer[i]);
+	printf("\n");
+
 }
 
+/****************************************************************************
+ Try samr_connect4 first, then samr_conenct if it fails
+ ****************************************************************************/
+static NTSTATUS try_samr_connects(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, 
+				  uint32 access_mask, POLICY_HND *connect_pol)
+{
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+	
+	result = rpccli_samr_connect4(cli, mem_ctx, access_mask, connect_pol);
+	if (!NT_STATUS_IS_OK(result)) {
+		result = rpccli_samr_connect(cli, mem_ctx, access_mask,
+					  connect_pol);
+	}
+	return result;
+}
+
 /**********************************************************************
- * Query user information
+ * Query user information 
  */
-static NTSTATUS cmd_samr_query_user(struct rpc_pipe_client *cli,
+static NTSTATUS cmd_samr_query_user(struct rpc_pipe_client *cli, 
                                     TALLOC_CTX *mem_ctx,
-                                    int argc, const char **argv)
+                                    int argc, const char **argv) 
 {
 	POLICY_HND connect_pol, domain_pol, user_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	uint32 info_level = 21;
 	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;
-	union samr_UserInfo *info = NULL;
+	SAM_USERINFO_CTR *user_ctr;
+	fstring server;
 	uint32 user_rid = 0;
-
+	
 	if ((argc < 2) || (argc > 4)) {
 		printf("Usage: %s rid [info level] [access mask] \n", argv[0]);
 		return NT_STATUS_OK;
 	}
-
+	
 	sscanf(argv[1], "%i", &user_rid);
-
+	
 	if (argc > 2)
 		sscanf(argv[2], "%i", &info_level);
-
+		
 	if (argc > 3)
 		sscanf(argv[3], "%x", &access_mask);
+	
 
+	slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->cli->desthost);
+	strupper_m(server);
+	
+	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS,
+				   &connect_pol);
 
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  MAXIMUM_ALLOWED_ACCESS,
-					  &connect_pol);
-
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_samr_OpenDomain(cli, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					&domain_sid,
-					&domain_pol);
+	result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      &domain_sid, &domain_pol);
+
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_samr_OpenUser(cli, mem_ctx,
-				      &domain_pol,
-				      access_mask,
-				      user_rid,
-				      &user_pol);
+	result = rpccli_samr_open_user(cli, mem_ctx, &domain_pol,
+				    access_mask,
+				    user_rid, &user_pol);
 
 	if (NT_STATUS_EQUAL(result, NT_STATUS_NO_SUCH_USER) &&
 	    (user_rid == 0)) {
 
 		/* Probably this was a user name, try lookupnames */
-		struct samr_Ids rids, types;
-		struct lsa_String lsa_acct_name;
+		uint32 num_rids;
+		uint32 *rids, *types;
+		
+		result = rpccli_samr_lookup_names(cli, mem_ctx, &domain_pol,
+						  1000, 1, &argv[1],
+						  &num_rids, &rids,
+						  &types);
 
-		init_lsa_String(&lsa_acct_name, argv[1]);
-
-		result = rpccli_samr_LookupNames(cli, mem_ctx,
-						 &domain_pol,
-						 1,
-						 &lsa_acct_name,
-						 &rids,
-						 &types);
-
 		if (NT_STATUS_IS_OK(result)) {
-			result = rpccli_samr_OpenUser(cli, mem_ctx,
-						      &domain_pol,
-						      access_mask,
-						      rids.ids[0],
-						      &user_pol);
+			result = rpccli_samr_open_user(cli, mem_ctx,
+						       &domain_pol,
+						       access_mask,
+						       rids[0], &user_pol);
 		}
 	}
 
@@ -342,38 +410,35 @@
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_samr_QueryUserInfo(cli, mem_ctx,
-					   &user_pol,
-					   info_level,
-					   &info);
+	ZERO_STRUCT(user_ctr);
 
+	result = rpccli_samr_query_userinfo(cli, mem_ctx, &user_pol, 
+					 info_level, &user_ctr);
+
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	switch (info_level) {
+	switch (user_ctr->switch_value) {
 	case 7:
-		display_samr_user_info_7(&info->info7);
+		display_sam_user_info_7(user_ctr->info.id7);
 		break;
 	case 9:
-		display_samr_user_info_9(&info->info9);
+		display_sam_user_info_9(user_ctr->info.id9);
 		break;
 	case 16:
-		display_samr_user_info_16(&info->info16);
+		display_sam_user_info_16(user_ctr->info.id16);
 		break;
-	case 20:
-		display_samr_user_info_20(&info->info20);
-		break;
 	case 21:
-		display_samr_user_info_21(&info->info21);
+		display_sam_user_info_21(user_ctr->info.id21);
 		break;
 	default:
 		printf("Unsupported infolevel: %d\n", info_level);
 		break;
 	}
 
-	rpccli_samr_Close(cli, mem_ctx, &user_pol);
-	rpccli_samr_Close(cli, mem_ctx, &domain_pol);
-	rpccli_samr_Close(cli, mem_ctx, &connect_pol);
+	rpccli_samr_close(cli, mem_ctx, &user_pol);
+	rpccli_samr_close(cli, mem_ctx, &domain_pol);
+	rpccli_samr_close(cli, mem_ctx, &connect_pol);
 
 done:
 	return result;
@@ -382,228 +447,239 @@
 /****************************************************************************
  display group info
  ****************************************************************************/
-static void display_group_info1(struct samr_GroupInfoAll *info1)
+static void display_group_info1(GROUP_INFO1 *info1)
 {
-	printf("\tGroup Name:\t%s\n", info1->name.string);
-	printf("\tDescription:\t%s\n", info1->description.string);
-	printf("\tGroup Attribute:%d\n", info1->attributes);
+	fstring temp;
+
+	unistr2_to_ascii(temp, &info1->uni_acct_name, sizeof(temp)-1);
+	printf("\tGroup Name:\t%s\n", temp);
+	unistr2_to_ascii(temp, &info1->uni_acct_desc, sizeof(temp)-1);
+	printf("\tDescription:\t%s\n", temp);
+	printf("\tGroup Attribute:%d\n", info1->group_attr);
 	printf("\tNum Members:%d\n", info1->num_members);
 }
 
 /****************************************************************************
  display group info
  ****************************************************************************/
-static void display_group_info2(struct lsa_String *info2)
+static void display_group_info2(GROUP_INFO2 *info2)
 {
-	printf("\tGroup Description:%s\n", info2->string);
+	fstring name;
+
+	unistr2_to_ascii(name, &info2->uni_acct_name, sizeof(name)-1);
+	printf("\tGroup Description:%s\n", name);
 }
 
 
 /****************************************************************************
  display group info
  ****************************************************************************/
-static void display_group_info3(struct samr_GroupInfoAttributes *info3)
+static void display_group_info3(GROUP_INFO3 *info3)
 {
-	printf("\tGroup Attribute:%d\n", info3->attributes);
+	printf("\tGroup Attribute:%d\n", info3->group_attr);
 }
 
 
 /****************************************************************************
  display group info
  ****************************************************************************/
-static void display_group_info4(struct lsa_String *info4)
+static void display_group_info4(GROUP_INFO4 *info4)
 {
-	printf("\tGroup Description:%s\n", info4->string);
+	fstring desc;
+
+	unistr2_to_ascii(desc, &info4->uni_acct_desc, sizeof(desc)-1);
+	printf("\tGroup Description:%s\n", desc);
 }
 
 /****************************************************************************
  display group info
  ****************************************************************************/
-static void display_group_info5(struct samr_GroupInfoAll *info5)
+static void display_group_info5(GROUP_INFO5 *info5)
 {
-	printf("\tGroup Name:\t%s\n", info5->name.string);
-	printf("\tDescription:\t%s\n", info5->description.string);
-	printf("\tGroup Attribute:%d\n", info5->attributes);
+	fstring temp;
+
+	unistr2_to_ascii(temp, &info5->uni_acct_name, sizeof(temp)-1);
+	printf("\tGroup Name:\t%s\n", temp);
+	unistr2_to_ascii(temp, &info5->uni_acct_desc, sizeof(temp)-1);
+	printf("\tDescription:\t%s\n", temp);
+	printf("\tGroup Attribute:%d\n", info5->group_attr);
 	printf("\tNum Members:%d\n", info5->num_members);
 }
 
 /****************************************************************************
  display sam sync structure
  ****************************************************************************/
-static void display_group_info(union samr_GroupInfo *info,
-			       enum samr_GroupInfoEnum level)
+static void display_group_info_ctr(GROUP_INFO_CTR *ctr)
 {
-	switch (level) {
+	switch (ctr->switch_value1) {
 		case 1:
-			display_group_info1(&info->all);
+			display_group_info1(&ctr->group.info1);
 			break;
 		case 2:
-			display_group_info2(&info->name);
+			display_group_info2(&ctr->group.info2);
 			break;
 		case 3:
-			display_group_info3(&info->attributes);
+			display_group_info3(&ctr->group.info3);
 			break;
 		case 4:
-			display_group_info4(&info->description);
+			display_group_info4(&ctr->group.info4);
 			break;
 		case 5:
-			display_group_info5(&info->all2);
+			display_group_info5(&ctr->group.info5);
 			break;
+
 	}
 }
 
 /***********************************************************************
- * Query group information
+ * Query group information 
  */
-static NTSTATUS cmd_samr_query_group(struct rpc_pipe_client *cli,
+static NTSTATUS cmd_samr_query_group(struct rpc_pipe_client *cli, 
                                      TALLOC_CTX *mem_ctx,
-                                     int argc, const char **argv)
+                                     int argc, const char **argv) 
 {
 	POLICY_HND connect_pol, domain_pol, group_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	enum samr_GroupInfoEnum info_level = GROUPINFOALL;
+	uint32 info_level = 1;
 	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;
-	union samr_GroupInfo *group_info = NULL;
+	GROUP_INFO_CTR *group_ctr;
+	fstring			server;	
 	uint32 group_rid;
-
+	
 	if ((argc < 2) || (argc > 4)) {
 		printf("Usage: %s rid [info level] [access mask]\n", argv[0]);
 		return NT_STATUS_OK;
 	}
 
         sscanf(argv[1], "%i", &group_rid);
-
+	
 	if (argc > 2)
-		info_level = atoi(argv[2]);
-
+		sscanf(argv[2], "%i", &info_level);
+	
 	if (argc > 3)
 		sscanf(argv[3], "%x", &access_mask);
 
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  MAXIMUM_ALLOWED_ACCESS,
-					  &connect_pol);
+	slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->cli->desthost);
+	strupper_m(server);
 
+	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS,
+				   &connect_pol);
+
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_samr_OpenDomain(cli, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					&domain_sid,
-					&domain_pol);
+	result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      &domain_sid, &domain_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_samr_OpenGroup(cli, mem_ctx,
-				       &domain_pol,
-				       access_mask,
-				       group_rid,
-				       &group_pol);
+	result = rpccli_samr_open_group(cli, mem_ctx, &domain_pol,
+				     access_mask,
+				     group_rid, &group_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_samr_QueryGroupInfo(cli, mem_ctx,
-					    &group_pol,
-					    info_level,
-					    &group_info);
+	result = rpccli_samr_query_groupinfo(cli, mem_ctx, &group_pol, 
+					  info_level, &group_ctr);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
-	display_group_info(group_info, info_level);
+	display_group_info_ctr(group_ctr);
 
-	rpccli_samr_Close(cli, mem_ctx, &group_pol);
-	rpccli_samr_Close(cli, mem_ctx, &domain_pol);
-	rpccli_samr_Close(cli, mem_ctx, &connect_pol);
+	rpccli_samr_close(cli, mem_ctx, &group_pol);
+	rpccli_samr_close(cli, mem_ctx, &domain_pol);
+	rpccli_samr_close(cli, mem_ctx, &connect_pol);
 done:
 	return result;
 }
 
 /* Query groups a user is a member of */
 
-static NTSTATUS cmd_samr_query_usergroups(struct rpc_pipe_client *cli,
+static NTSTATUS cmd_samr_query_usergroups(struct rpc_pipe_client *cli, 
                                           TALLOC_CTX *mem_ctx,
-                                          int argc, const char **argv)
+                                          int argc, const char **argv) 
 {
-	POLICY_HND 		connect_pol,
-				domain_pol,
+	POLICY_HND 		connect_pol, 
+				domain_pol, 
 				user_pol;
 	NTSTATUS		result = NT_STATUS_UNSUCCESSFUL;
-	uint32 			user_rid;
+	uint32 			num_groups, 
+				user_rid;
 	uint32			access_mask = MAXIMUM_ALLOWED_ACCESS;
+	DOM_GID 		*user_gids;
 	int 			i;
-	struct samr_RidWithAttributeArray *rid_array = NULL;
-
+	fstring			server;
+	
 	if ((argc < 2) || (argc > 3)) {
 		printf("Usage: %s rid [access mask]\n", argv[0]);
 		return NT_STATUS_OK;
 	}
 
 	sscanf(argv[1], "%i", &user_rid);
-
+	
 	if (argc > 2)
 		sscanf(argv[2], "%x", &access_mask);
 
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  MAXIMUM_ALLOWED_ACCESS,
-					  &connect_pol);
+	slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->cli->desthost);
+	strupper_m(server);
+		
+	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS,
+				   &connect_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_samr_OpenDomain(cli, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					&domain_sid, &domain_pol);
+	result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      &domain_sid, &domain_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_samr_OpenUser(cli, mem_ctx,
-				      &domain_pol,
-				      access_mask,
-				      user_rid,
-				      &user_pol);
+	result = rpccli_samr_open_user(cli, mem_ctx, &domain_pol,
+				    access_mask,
+				    user_rid, &user_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_samr_GetGroupsForUser(cli, mem_ctx,
-					      &user_pol,
-					      &rid_array);
+	result = rpccli_samr_query_usergroups(cli, mem_ctx, &user_pol,
+					   &num_groups, &user_gids);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	for (i = 0; i < rid_array->count; i++) {
-		printf("\tgroup rid:[0x%x] attr:[0x%x]\n",
-		       rid_array->rids[i].rid,
-		       rid_array->rids[i].attributes);
+	for (i = 0; i < num_groups; i++) {
+		printf("\tgroup rid:[0x%x] attr:[0x%x]\n", 
+		       user_gids[i].g_rid, user_gids[i].attr);
 	}
 
-	rpccli_samr_Close(cli, mem_ctx, &user_pol);
-	rpccli_samr_Close(cli, mem_ctx, &domain_pol);
-	rpccli_samr_Close(cli, mem_ctx, &connect_pol);
+	rpccli_samr_close(cli, mem_ctx, &user_pol);
+	rpccli_samr_close(cli, mem_ctx, &domain_pol);
+	rpccli_samr_close(cli, mem_ctx, &connect_pol);
  done:
 	return result;
 }
 
 /* Query aliases a user is a member of */
 
-static NTSTATUS cmd_samr_query_useraliases(struct rpc_pipe_client *cli,
+static NTSTATUS cmd_samr_query_useraliases(struct rpc_pipe_client *cli, 
 					   TALLOC_CTX *mem_ctx,
-					   int argc, const char **argv)
+					   int argc, const char **argv) 
 {
 	POLICY_HND 		connect_pol, domain_pol;
 	NTSTATUS		result = NT_STATUS_UNSUCCESSFUL;
 	DOM_SID                *sids;
 	size_t                     num_sids;
+	uint32 			num_aliases, *alias_rids;
 	uint32			access_mask = MAXIMUM_ALLOWED_ACCESS;
 	int 			i;
-	struct lsa_SidArray sid_array;
-	struct samr_Ids alias_rids;
+	fstring			server;
+	DOM_SID2	       *sid2;
 
 	if (argc < 3) {
 		printf("Usage: %s builtin|domain sid1 sid2 ...\n", argv[0]);
@@ -619,47 +695,42 @@
 			printf("%s is not a legal SID\n", argv[i]);
 			return NT_STATUS_INVALID_PARAMETER;
 		}
-		result = add_sid_to_array(mem_ctx, &tmp_sid, &sids, &num_sids);
-		if (!NT_STATUS_IS_OK(result)) {
-			return result;
+		if (!add_sid_to_array(mem_ctx, &tmp_sid, &sids, &num_sids)) {
+			return NT_STATUS_NO_MEMORY;
 		}
 	}
 
 	if (num_sids) {
-		sid_array.sids = TALLOC_ZERO_ARRAY(mem_ctx, struct lsa_SidPtr, num_sids);
-		if (sid_array.sids == NULL)
+		sid2 = TALLOC_ARRAY(mem_ctx, DOM_SID2, num_sids);
+		if (sid2 == NULL)
 			return NT_STATUS_NO_MEMORY;
 	} else {
-		sid_array.sids = NULL;
+		sid2 = NULL;
 	}
 
 	for (i=0; i<num_sids; i++) {
-		sid_array.sids[i].sid = sid_dup_talloc(mem_ctx, &sids[i]);
-		if (!sid_array.sids[i].sid) {
-			return NT_STATUS_NO_MEMORY;
-		}
+		sid_copy(&sid2[i].sid, &sids[i]);
+		sid2[i].num_auths = sid2[i].sid.num_auths;
 	}
 
-	sid_array.num_sids = num_sids;
+	slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->cli->desthost);
+	strupper_m(server);
+		
+	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS,
+				   &connect_pol);
 
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  MAXIMUM_ALLOWED_ACCESS,
-					  &connect_pol);
-
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	if (StrCaseCmp(argv[1], "domain")==0)
-		result = rpccli_samr_OpenDomain(cli, mem_ctx,
-						&connect_pol,
-						access_mask,
-						&domain_sid, &domain_pol);
+		result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+					      access_mask,
+					      &domain_sid, &domain_pol);
 	else if (StrCaseCmp(argv[1], "builtin")==0)
-		result = rpccli_samr_OpenDomain(cli, mem_ctx,
-						&connect_pol,
-						access_mask,
-						CONST_DISCARD(struct dom_sid2 *, &global_sid_Builtin),
-						&domain_pol);
+		result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+					      access_mask,
+					      &global_sid_Builtin,
+					      &domain_pol);
 	else {
 		printf("Usage: %s builtin|domain sid1 sid2 ...\n", argv[0]);
 		return NT_STATUS_INVALID_PARAMETER;
@@ -668,68 +739,66 @@
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_samr_GetAliasMembership(cli, mem_ctx,
-						&domain_pol,
-						&sid_array,
-						&alias_rids);
+	result = rpccli_samr_query_useraliases(cli, mem_ctx, &domain_pol,
+					    num_sids, sid2,
+					    &num_aliases, &alias_rids);
+
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	for (i = 0; i < alias_rids.count; i++) {
-		printf("\tgroup rid:[0x%x]\n", alias_rids.ids[i]);
+	for (i = 0; i < num_aliases; i++) {
+		printf("\tgroup rid:[0x%x]\n", alias_rids[i]);
 	}
 
-	rpccli_samr_Close(cli, mem_ctx, &domain_pol);
-	rpccli_samr_Close(cli, mem_ctx, &connect_pol);
+	rpccli_samr_close(cli, mem_ctx, &domain_pol);
+	rpccli_samr_close(cli, mem_ctx, &connect_pol);
  done:
 	return result;
 }
 
 /* Query members of a group */
 
-static NTSTATUS cmd_samr_query_groupmem(struct rpc_pipe_client *cli,
+static NTSTATUS cmd_samr_query_groupmem(struct rpc_pipe_client *cli, 
                                         TALLOC_CTX *mem_ctx,
-                                        int argc, const char **argv)
+                                        int argc, const char **argv) 
 {
 	POLICY_HND connect_pol, domain_pol, group_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	uint32 group_rid;
+	uint32 num_members, *group_rids, *group_attrs, group_rid;
 	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;
 	int i;
+	fstring			server;
 	unsigned int old_timeout;
-	struct samr_RidTypeArray *rids = NULL;
-
+	
 	if ((argc < 2) || (argc > 3)) {
 		printf("Usage: %s rid [access mask]\n", argv[0]);
 		return NT_STATUS_OK;
 	}
 
 	sscanf(argv[1], "%i", &group_rid);
-
+	
 	if (argc > 2)
 		sscanf(argv[2], "%x", &access_mask);
 
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  MAXIMUM_ALLOWED_ACCESS,
-					  &connect_pol);
+	slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->cli->desthost);
+	strupper_m(server);
 
+	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS,
+				   &connect_pol);
+
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_samr_OpenDomain(cli, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					&domain_sid,
-					&domain_pol);
+	result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      &domain_sid, &domain_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_samr_OpenGroup(cli, mem_ctx,
-				       &domain_pol,
-				       access_mask,
-				       group_rid,
-				       &group_pol);
+	result = rpccli_samr_open_group(cli, mem_ctx, &domain_pol,
+				     access_mask,
+				     group_rid, &group_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
@@ -737,46 +806,47 @@
 	/* Make sure to wait for our DC's reply */
 	old_timeout = cli_set_timeout(cli->cli, MAX(cli->cli->timeout,30000)); /* 30 seconds. */
 
-	result = rpccli_samr_QueryGroupMember(cli, mem_ctx,
-					      &group_pol,
-					      &rids);
+	result = rpccli_samr_query_groupmem(cli, mem_ctx, &group_pol,
+					 &num_members, &group_rids,
+					 &group_attrs);
 
 	cli_set_timeout(cli->cli, old_timeout);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	for (i = 0; i < rids->count; i++) {
-		printf("\trid:[0x%x] attr:[0x%x]\n", rids->rids[i],
-		       rids->types[i]);
+	for (i = 0; i < num_members; i++) {
+		printf("\trid:[0x%x] attr:[0x%x]\n", group_rids[i],
+		       group_attrs[i]);
 	}
 
-	rpccli_samr_Close(cli, mem_ctx, &group_pol);
-	rpccli_samr_Close(cli, mem_ctx, &domain_pol);
-	rpccli_samr_Close(cli, mem_ctx, &connect_pol);
+	rpccli_samr_close(cli, mem_ctx, &group_pol);
+	rpccli_samr_close(cli, mem_ctx, &domain_pol);
+	rpccli_samr_close(cli, mem_ctx, &connect_pol);
  done:
 	return result;
 }
 
 /* Enumerate domain users */
 
-static NTSTATUS cmd_samr_enum_dom_users(struct rpc_pipe_client *cli,
+static NTSTATUS cmd_samr_enum_dom_users(struct rpc_pipe_client *cli, 
 					TALLOC_CTX *mem_ctx,
-					int argc, const char **argv)
+					int argc, const char **argv) 
 {
 	POLICY_HND connect_pol, domain_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	uint32 start_idx, size, num_dom_users, i;
-	struct samr_SamArray *dom_users = NULL;
+	char **dom_users;
+	uint32 *dom_rids;
 	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;
 	uint32 acb_mask = ACB_NORMAL;
-	bool got_connect_pol = False, got_domain_pol = False;
+	BOOL got_connect_pol = False, got_domain_pol = False;
 
 	if ((argc < 1) || (argc > 3)) {
 		printf("Usage: %s [access_mask] [acb_mask]\n", argv[0]);
 		return NT_STATUS_OK;
 	}
-
+	
 	if (argc > 1)
 		sscanf(argv[1], "%x", &access_mask);
 
@@ -785,9 +855,8 @@
 
 	/* Get sam policy handle */
 
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  MAXIMUM_ALLOWED_ACCESS,
-					  &connect_pol);
+	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				   &connect_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
@@ -796,11 +865,9 @@
 
 	/* Get domain policy handle */
 
-	result = rpccli_samr_OpenDomain(cli, mem_ctx,
-					&connect_pol,
-					access_mask,
-					&domain_sid,
-					&domain_pol);
+	result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+				      access_mask,
+				      &domain_sid, &domain_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
@@ -813,61 +880,55 @@
 	size = 0xffff;
 
 	do {
-		result = rpccli_samr_EnumDomainUsers(cli, mem_ctx,
-						     &domain_pol,
-						     &start_idx,
-						     acb_mask,
-						     &dom_users,
-						     size,
-						     &num_dom_users);
+		result = rpccli_samr_enum_dom_users(
+			cli, mem_ctx, &domain_pol, &start_idx, acb_mask,
+			size, &dom_users, &dom_rids, &num_dom_users);
 
 		if (NT_STATUS_IS_OK(result) ||
 		    NT_STATUS_V(result) == NT_STATUS_V(STATUS_MORE_ENTRIES)) {
 
 			for (i = 0; i < num_dom_users; i++)
-                               printf("user:[%s] rid:[0x%x]\n",
-				       dom_users->entries[i].name.string,
-				       dom_users->entries[i].idx);
+                               printf("user:[%s] rid:[0x%x]\n", 
+				       dom_users[i], dom_rids[i]);
 		}
 
 	} while (NT_STATUS_V(result) == NT_STATUS_V(STATUS_MORE_ENTRIES));
 
  done:
 	if (got_domain_pol)
-		rpccli_samr_Close(cli, mem_ctx, &domain_pol);
+		rpccli_samr_close(cli, mem_ctx, &domain_pol);
 
 	if (got_connect_pol)
-		rpccli_samr_Close(cli, mem_ctx, &connect_pol);
+		rpccli_samr_close(cli, mem_ctx, &connect_pol);
 
 	return result;
 }
 
 /* Enumerate domain groups */
 
-static NTSTATUS cmd_samr_enum_dom_groups(struct rpc_pipe_client *cli,
+static NTSTATUS cmd_samr_enum_dom_groups(struct rpc_pipe_client *cli, 
                                          TALLOC_CTX *mem_ctx,
-                                         int argc, const char **argv)
+                                         int argc, const char **argv) 
 {
 	POLICY_HND connect_pol, domain_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	uint32 start_idx, size, num_dom_groups, i;
 	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;
-	struct samr_SamArray *dom_groups = NULL;
-	bool got_connect_pol = False, got_domain_pol = False;
+	struct acct_info *dom_groups;
+	BOOL got_connect_pol = False, got_domain_pol = False;
 
 	if ((argc < 1) || (argc > 2)) {
 		printf("Usage: %s [access_mask]\n", argv[0]);
 		return NT_STATUS_OK;
 	}
-
+	
 	if (argc > 1)
 		sscanf(argv[1], "%x", &access_mask);
 
 	/* Get sam policy handle */
 
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  MAXIMUM_ALLOWED_ACCESS,
-					  &connect_pol);
+	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				   &connect_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
@@ -876,11 +937,9 @@
 
 	/* Get domain policy handle */
 
-	result = rpccli_samr_OpenDomain(cli, mem_ctx,
-					&connect_pol,
-					access_mask,
-					&domain_sid,
-					&domain_pol);
+	result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+				      access_mask,
+				      &domain_sid, &domain_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
@@ -893,59 +952,56 @@
 	size = 0xffff;
 
 	do {
-		result = rpccli_samr_EnumDomainGroups(cli, mem_ctx,
-						      &domain_pol,
-						      &start_idx,
-						      &dom_groups,
-						      size,
-						      &num_dom_groups);
+		result = rpccli_samr_enum_dom_groups(
+			cli, mem_ctx, &domain_pol, &start_idx, size,
+			&dom_groups, &num_dom_groups);
+
 		if (NT_STATUS_IS_OK(result) ||
 		    NT_STATUS_V(result) == NT_STATUS_V(STATUS_MORE_ENTRIES)) {
 
 			for (i = 0; i < num_dom_groups; i++)
-				printf("group:[%s] rid:[0x%x]\n",
-				       dom_groups->entries[i].name.string,
-				       dom_groups->entries[i].idx);
+				printf("group:[%s] rid:[0x%x]\n", 
+				       dom_groups[i].acct_name,
+				       dom_groups[i].rid);
 		}
 
 	} while (NT_STATUS_V(result) == NT_STATUS_V(STATUS_MORE_ENTRIES));
 
  done:
 	if (got_domain_pol)
-		rpccli_samr_Close(cli, mem_ctx, &domain_pol);
+		rpccli_samr_close(cli, mem_ctx, &domain_pol);
 
 	if (got_connect_pol)
-		rpccli_samr_Close(cli, mem_ctx, &connect_pol);
+		rpccli_samr_close(cli, mem_ctx, &connect_pol);
 
 	return result;
 }
 
 /* Enumerate alias groups */
 
-static NTSTATUS cmd_samr_enum_als_groups(struct rpc_pipe_client *cli,
+static NTSTATUS cmd_samr_enum_als_groups(struct rpc_pipe_client *cli, 
                                          TALLOC_CTX *mem_ctx,
-                                         int argc, const char **argv)
+                                         int argc, const char **argv) 
 {
 	POLICY_HND connect_pol, domain_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	uint32 start_idx, size, num_als_groups, i;
 	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;
-	struct samr_SamArray *als_groups = NULL;
-	bool got_connect_pol = False, got_domain_pol = False;
+	struct acct_info *als_groups;
+	BOOL got_connect_pol = False, got_domain_pol = False;
 
 	if ((argc < 2) || (argc > 3)) {
 		printf("Usage: %s builtin|domain [access mask]\n", argv[0]);
 		return NT_STATUS_OK;
 	}
-
+	
 	if (argc > 2)
 		sscanf(argv[2], "%x", &access_mask);
 
 	/* Get sam policy handle */
 
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  MAXIMUM_ALLOWED_ACCESS,
-					  &connect_pol);
+	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				   &connect_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
@@ -955,17 +1011,13 @@
 	/* Get domain policy handle */
 
 	if (StrCaseCmp(argv[1], "domain")==0)
-		result = rpccli_samr_OpenDomain(cli, mem_ctx,
-						&connect_pol,
-						access_mask,
-						&domain_sid,
-						&domain_pol);
+		result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+					      access_mask,
+					      &domain_sid, &domain_pol);
 	else if (StrCaseCmp(argv[1], "builtin")==0)
-		result = rpccli_samr_OpenDomain(cli, mem_ctx,
-						&connect_pol,
-						access_mask,
-						CONST_DISCARD(struct dom_sid2 *, &global_sid_Builtin),
-						&domain_pol);
+		result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+					      access_mask,
+					      &global_sid_Builtin, &domain_pol);
 	else
 		return NT_STATUS_OK;
 
@@ -980,110 +1032,41 @@
 	size = 0xffff;		/* Number of groups to retrieve */
 
 	do {
-		result = rpccli_samr_EnumDomainAliases(cli, mem_ctx,
-						       &domain_pol,
-						       &start_idx,
-						       &als_groups,
-						       size,
-						       &num_als_groups);
+		result = rpccli_samr_enum_als_groups(
+			cli, mem_ctx, &domain_pol, &start_idx, size,
+			&als_groups, &num_als_groups);
 
 		if (NT_STATUS_IS_OK(result) ||
 		    NT_STATUS_V(result) == NT_STATUS_V(STATUS_MORE_ENTRIES)) {
 
 			for (i = 0; i < num_als_groups; i++)
-				printf("group:[%s] rid:[0x%x]\n",
-				       als_groups->entries[i].name.string,
-				       als_groups->entries[i].idx);
+				printf("group:[%s] rid:[0x%x]\n", 
+				       als_groups[i].acct_name,
+				       als_groups[i].rid);
 		}
 	} while (NT_STATUS_V(result) == NT_STATUS_V(STATUS_MORE_ENTRIES));
 
  done:
 	if (got_domain_pol)
-		rpccli_samr_Close(cli, mem_ctx, &domain_pol);
-
+		rpccli_samr_close(cli, mem_ctx, &domain_pol);
+	
 	if (got_connect_pol)
-		rpccli_samr_Close(cli, mem_ctx, &connect_pol);
-
+		rpccli_samr_close(cli, mem_ctx, &connect_pol);
+	
 	return result;
 }
 
-/* Enumerate domains */
-
-static NTSTATUS cmd_samr_enum_domains(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      int argc, const char **argv)
-{
-	POLICY_HND connect_pol;
-	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	uint32 start_idx, size, num_entries, i;
-	uint32 access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
-	bool got_connect_pol = false;
-	struct samr_SamArray *sam = NULL;
-
-	if ((argc < 1) || (argc > 2)) {
-		printf("Usage: %s [access mask]\n", argv[0]);
-		return NT_STATUS_OK;
-	}
-
-	if (argc > 1) {
-		sscanf(argv[1], "%x", &access_mask);
-	}
-
-	/* Get sam policy handle */
-
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  access_mask,
-					  &connect_pol);
-
-	if (!NT_STATUS_IS_OK(result)) {
-		goto done;
-	}
-
-	got_connect_pol = true;
-
-	/* Enumerate alias groups */
-
-	start_idx = 0;
-	size = 0xffff;
-
-	do {
-		result = rpccli_samr_EnumDomains(cli, mem_ctx,
-						 &connect_pol,
-						 &start_idx,
-						 &sam,
-						 size,
-						 &num_entries);
-
-		if (NT_STATUS_IS_OK(result) ||
-		    NT_STATUS_V(result) == NT_STATUS_V(STATUS_MORE_ENTRIES)) {
-
-			for (i = 0; i < num_entries; i++)
-				printf("name:[%s] idx:[0x%x]\n",
-				       sam->entries[i].name.string,
-				       sam->entries[i].idx);
-		}
-	} while (NT_STATUS_V(result) == NT_STATUS_V(STATUS_MORE_ENTRIES));
-
- done:
-	if (got_connect_pol) {
-		rpccli_samr_Close(cli, mem_ctx, &connect_pol);
-	}
-
-	return result;
-}
-
-
 /* Query alias membership */
 
-static NTSTATUS cmd_samr_query_aliasmem(struct rpc_pipe_client *cli,
+static NTSTATUS cmd_samr_query_aliasmem(struct rpc_pipe_client *cli, 
                                         TALLOC_CTX *mem_ctx,
-                                        int argc, const char **argv)
+                                        int argc, const char **argv) 
 {
 	POLICY_HND connect_pol, domain_pol, alias_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	uint32 alias_rid, i;
+	uint32 alias_rid, num_members, i;
 	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;
-	struct lsa_SidArray sid_array;
+	DOM_SID *alias_sids;
 
 	if ((argc < 3) || (argc > 4)) {
 		printf("Usage: %s builtin|domain rid [access mask]\n", argv[0]);
@@ -1091,33 +1074,28 @@
 	}
 
 	sscanf(argv[2], "%i", &alias_rid);
-
+	
 	if (argc > 3)
 		sscanf(argv[3], "%x", &access_mask);
 
 	/* Open SAMR handle */
 
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  MAXIMUM_ALLOWED_ACCESS,
-					  &connect_pol);
+	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				   &connect_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	/* Open handle on domain */
-
+	
 	if (StrCaseCmp(argv[1], "domain")==0)
-		result = rpccli_samr_OpenDomain(cli, mem_ctx,
-						&connect_pol,
-						MAXIMUM_ALLOWED_ACCESS,
-						&domain_sid,
-						&domain_pol);
+		result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+					      MAXIMUM_ALLOWED_ACCESS,
+					      &domain_sid, &domain_pol);
 	else if (StrCaseCmp(argv[1], "builtin")==0)
-		result = rpccli_samr_OpenDomain(cli, mem_ctx,
-						&connect_pol,
-						MAXIMUM_ALLOWED_ACCESS,
-						CONST_DISCARD(struct dom_sid2 *, &global_sid_Builtin),
-						&domain_pol);
+		result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+					      MAXIMUM_ALLOWED_ACCESS,
+					      &global_sid_Builtin, &domain_pol);
 	else
 		return NT_STATUS_OK;
 
@@ -1126,149 +1104,37 @@
 
 	/* Open handle on alias */
 
-	result = rpccli_samr_OpenAlias(cli, mem_ctx,
-				       &domain_pol,
-				       access_mask,
-				       alias_rid,
-				       &alias_pol);
+	result = rpccli_samr_open_alias(cli, mem_ctx, &domain_pol,
+				     access_mask,
+				     alias_rid, &alias_pol);
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_samr_GetMembersInAlias(cli, mem_ctx,
-					       &alias_pol,
-					       &sid_array);
+	result = rpccli_samr_query_aliasmem(cli, mem_ctx, &alias_pol,
+					 &num_members, &alias_sids);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	for (i = 0; i < sid_array.num_sids; i++) {
+	for (i = 0; i < num_members; i++) {
 		fstring sid_str;
 
-		sid_to_fstring(sid_str, sid_array.sids[i].sid);
+		sid_to_string(sid_str, &alias_sids[i]);
 		printf("\tsid:[%s]\n", sid_str);
 	}
 
-	rpccli_samr_Close(cli, mem_ctx, &alias_pol);
-	rpccli_samr_Close(cli, mem_ctx, &domain_pol);
-	rpccli_samr_Close(cli, mem_ctx, &connect_pol);
+	rpccli_samr_close(cli, mem_ctx, &alias_pol);
+	rpccli_samr_close(cli, mem_ctx, &domain_pol);
+	rpccli_samr_close(cli, mem_ctx, &connect_pol);
  done:
 	return result;
 }
 
-/* Query alias info */
-
-static NTSTATUS cmd_samr_query_aliasinfo(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 int argc, const char **argv)
-{
-	POLICY_HND connect_pol, domain_pol, alias_pol;
-	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	uint32_t alias_rid;
-	uint32_t access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
-	union samr_AliasInfo *info = NULL;
-	enum samr_AliasInfoEnum level = ALIASINFOALL;
-
-	if ((argc < 3) || (argc > 4)) {
-		printf("Usage: %s builtin|domain rid [level] [access mask]\n",
-			argv[0]);
-		return NT_STATUS_OK;
-	}
-
-	sscanf(argv[2], "%i", &alias_rid);
-
-	if (argc > 2) {
-		level = atoi(argv[3]);
-	}
-
-	if (argc > 3) {
-		sscanf(argv[4], "%x", &access_mask);
-	}
-
-	/* Open SAMR handle */
-
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  SEC_FLAG_MAXIMUM_ALLOWED,
-					  &connect_pol);
-
-	if (!NT_STATUS_IS_OK(result)) {
-		goto done;
-	}
-
-	/* Open handle on domain */
-
-	if (strequal(argv[1], "domain")) {
-
-		result = rpccli_samr_OpenDomain(cli, mem_ctx,
-						&connect_pol,
-						SEC_FLAG_MAXIMUM_ALLOWED,
-						&domain_sid,
-						&domain_pol);
-
-	} else if (strequal(argv[1], "builtin")) {
-
-		result = rpccli_samr_OpenDomain(cli, mem_ctx,
-						&connect_pol,
-						SEC_FLAG_MAXIMUM_ALLOWED,
-						CONST_DISCARD(struct dom_sid2 *, &global_sid_Builtin),
-						&domain_pol);
-
-	} else {
-		return NT_STATUS_OK;
-	}
-
-	if (!NT_STATUS_IS_OK(result)) {
-		goto done;
-	}
-
-	/* Open handle on alias */
-
-	result = rpccli_samr_OpenAlias(cli, mem_ctx,
-				       &domain_pol,
-				       access_mask,
-				       alias_rid,
-				       &alias_pol);
-	if (!NT_STATUS_IS_OK(result)) {
-		goto done;
-	}
-
-	result = rpccli_samr_QueryAliasInfo(cli, mem_ctx,
-					    &alias_pol,
-					    level,
-					    &info);
-
-	if (!NT_STATUS_IS_OK(result)) {
-		goto done;
-	}
-
-	switch (level) {
-		case ALIASINFOALL:
-			printf("Name: %s\n", info->all.name.string);
-			printf("Description: %s\n", info->all.description.string);
-			printf("Num Members: %d\n", info->all.num_members);
-			break;
-		case ALIASINFONAME:
-			printf("Name: %s\n", info->name.string);
-			break;
-		case ALIASINFODESCRIPTION:
-			printf("Description: %s\n", info->description.string);
-			break;
-		default:
-			break;
-	}
-
-	rpccli_samr_Close(cli, mem_ctx, &alias_pol);
-	rpccli_samr_Close(cli, mem_ctx, &domain_pol);
-	rpccli_samr_Close(cli, mem_ctx, &connect_pol);
- done:
-	return result;
-}
-
-
 /* Query delete an alias membership */
 
-static NTSTATUS cmd_samr_delete_alias(struct rpc_pipe_client *cli,
+static NTSTATUS cmd_samr_delete_alias(struct rpc_pipe_client *cli, 
 				      TALLOC_CTX *mem_ctx,
-				      int argc, const char **argv)
+				      int argc, const char **argv) 
 {
 	POLICY_HND connect_pol, domain_pol, alias_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
@@ -1281,30 +1147,25 @@
 	}
 
 	alias_rid = strtoul(argv[2], NULL, 10);
-
+	
 	/* Open SAMR handle */
 
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  MAXIMUM_ALLOWED_ACCESS,
-					  &connect_pol);
+	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				   &connect_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	/* Open handle on domain */
-
+	
 	if (StrCaseCmp(argv[1], "domain")==0)
-		result = rpccli_samr_OpenDomain(cli, mem_ctx,
-						&connect_pol,
-						MAXIMUM_ALLOWED_ACCESS,
-						&domain_sid,
-						&domain_pol);
+		result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+					      MAXIMUM_ALLOWED_ACCESS,
+					      &domain_sid, &domain_pol);
 	else if (StrCaseCmp(argv[1], "builtin")==0)
-		result = rpccli_samr_OpenDomain(cli, mem_ctx,
-						&connect_pol,
-						MAXIMUM_ALLOWED_ACCESS,
-						CONST_DISCARD(struct dom_sid2 *, &global_sid_Builtin),
-						&domain_pol);
+		result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+					      MAXIMUM_ALLOWED_ACCESS,
+					      &global_sid_Builtin, &domain_pol);
 	else
 		return NT_STATUS_INVALID_PARAMETER;
 
@@ -1313,62 +1174,57 @@
 
 	/* Open handle on alias */
 
-	result = rpccli_samr_OpenAlias(cli, mem_ctx,
-				       &domain_pol,
-				       access_mask,
-				       alias_rid,
-				       &alias_pol);
+	result = rpccli_samr_open_alias(cli, mem_ctx, &domain_pol,
+				     access_mask,
+				     alias_rid, &alias_pol);
 	if (!NT_STATUS_IS_OK(result) && (alias_rid == 0)) {
 		/* Probably this was a user name, try lookupnames */
-		struct samr_Ids rids, types;
-		struct lsa_String lsa_acct_name;
+		uint32 num_rids;
+		uint32 *rids, *types;
+		
+		result = rpccli_samr_lookup_names(cli, mem_ctx, &domain_pol,
+						  1000, 1, &argv[2],
+						  &num_rids, &rids,
+						  &types);
 
-		init_lsa_String(&lsa_acct_name, argv[2]);
-
-		result = rpccli_samr_LookupNames(cli, mem_ctx,
-						 &domain_pol,
-						 1,
-						 &lsa_acct_name,
-						 &rids,
-						 &types);
-
 		if (NT_STATUS_IS_OK(result)) {
-			result = rpccli_samr_OpenAlias(cli, mem_ctx,
+			result = rpccli_samr_open_alias(cli, mem_ctx,
 						       &domain_pol,
 						       access_mask,
-						       rids.ids[0],
-						       &alias_pol);
+						       rids[0], &alias_pol);
 		}
 	}
 
-	result = rpccli_samr_DeleteDomAlias(cli, mem_ctx,
-					    &alias_pol);
+	result = rpccli_samr_delete_dom_alias(cli, mem_ctx, &alias_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	rpccli_samr_Close(cli, mem_ctx, &domain_pol);
-	rpccli_samr_Close(cli, mem_ctx, &connect_pol);
+	rpccli_samr_close(cli, mem_ctx, &domain_pol);
+	rpccli_samr_close(cli, mem_ctx, &connect_pol);
  done:
 	return result;
 }
 
 /* Query display info */
 
-static NTSTATUS cmd_samr_query_dispinfo_internal(struct rpc_pipe_client *cli,
-						 TALLOC_CTX *mem_ctx,
-						 int argc, const char **argv,
-						 uint32_t opcode)
+static NTSTATUS cmd_samr_query_dispinfo(struct rpc_pipe_client *cli, 
+                                        TALLOC_CTX *mem_ctx,
+                                        int argc, const char **argv) 
 {
 	POLICY_HND connect_pol, domain_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	uint32 start_idx=0, max_entries=250, max_size = 0xffff, num_entries = 0, i;
+	uint32 start_idx=0, max_entries=250, max_size = 0xffff, num_entries, i;
 	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;
 	uint32 info_level = 1;
-	union samr_DispInfo info;
+	SAM_DISPINFO_CTR ctr;
+	SAM_DISPINFO_1 info1;
+	SAM_DISPINFO_2 info2;
+	SAM_DISPINFO_3 info3;
+	SAM_DISPINFO_4 info4;
+	SAM_DISPINFO_5 info5;
 	int loop_count = 0;
-	bool got_params = False; /* Use get_query_dispinfo_params() or not? */
-	uint32_t total_size, returned_size;
+	BOOL got_params = False; /* Use get_query_dispinfo_params() or not? */
 
 	if (argc > 6) {
 		printf("Usage: %s [info level] [start index] [max entries] [max size] [access mask]\n", argv[0]);
@@ -1377,186 +1233,126 @@
 
 	if (argc >= 2)
                 sscanf(argv[1], "%i", &info_level);
-
+        
 	if (argc >= 3)
                 sscanf(argv[2], "%i", &start_idx);
-
+        
 	if (argc >= 4) {
                 sscanf(argv[3], "%i", &max_entries);
 		got_params = True;
 	}
-
+	
 	if (argc >= 5) {
                 sscanf(argv[4], "%i", &max_size);
 		got_params = True;
 	}
-
+	
 	if (argc >= 6)
                 sscanf(argv[5], "%x", &access_mask);
 
 	/* Get sam policy handle */
 
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  MAXIMUM_ALLOWED_ACCESS,
-					  &connect_pol);
+	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				   &connect_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	/* Get domain policy handle */
 
-	result = rpccli_samr_OpenDomain(cli, mem_ctx,
-					&connect_pol,
-					access_mask,
-					&domain_sid,
-					&domain_pol);
+	result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+				      access_mask, 
+				      &domain_sid, &domain_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	/* Query display info */
 
+	ZERO_STRUCT(ctr);
+	ZERO_STRUCT(info1);
+	
+	switch (info_level) {
+	case 1:
+		ZERO_STRUCT(info1);
+		ctr.sam.info1 = &info1;
+		break;
+	case 2:
+		ZERO_STRUCT(info2);
+		ctr.sam.info2 = &info2;
+		break;
+	case 3:
+		ZERO_STRUCT(info3);
+		ctr.sam.info3 = &info3;
+		break;
+	case 4:
+		ZERO_STRUCT(info4);
+		ctr.sam.info4 = &info4;
+		break;
+	case 5:
+		ZERO_STRUCT(info5);
+		ctr.sam.info5 = &info5;
+		break;
+	}
+
+
 	do {
 
 		if (!got_params)
 			get_query_dispinfo_params(
 				loop_count, &max_entries, &max_size);
+		
+		result = rpccli_samr_query_dispinfo(cli, mem_ctx, &domain_pol,
+						 &start_idx, info_level,
+						 &num_entries, max_entries, 
+						 max_size, &ctr);
 
-		switch (opcode) {
-		case NDR_SAMR_QUERYDISPLAYINFO:
-			result = rpccli_samr_QueryDisplayInfo(cli, mem_ctx,
-							      &domain_pol,
-							      info_level,
-							      start_idx,
-							      max_entries,
-							      max_size,
-							      &total_size,
-							      &returned_size,
-							      &info);
-			break;
-		case NDR_SAMR_QUERYDISPLAYINFO2:
-			result = rpccli_samr_QueryDisplayInfo2(cli, mem_ctx,
-							       &domain_pol,
-							       info_level,
-							       start_idx,
-							       max_entries,
-							       max_size,
-							       &total_size,
-							       &returned_size,
-							       &info);
+		loop_count++;
 
+		if (NT_STATUS_IS_ERR(result))
 			break;
-		case NDR_SAMR_QUERYDISPLAYINFO3:
-			result = rpccli_samr_QueryDisplayInfo3(cli, mem_ctx,
-							       &domain_pol,
-							       info_level,
-							       start_idx,
-							       max_entries,
-							       max_size,
-							       &total_size,
-							       &returned_size,
-							       &info);
 
+		if (num_entries == 0) 
 			break;
-		default:
-			return NT_STATUS_INVALID_PARAMETER;
-		}
 
-		if (!NT_STATUS_IS_OK(result) &&
-		    !NT_STATUS_EQUAL(result, NT_STATUS_NO_MORE_ENTRIES) &&
-		    !NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES)) {
-			break;
-		}
-
-		loop_count++;
-
-		switch (info_level) {
-			case 1:
-				num_entries = info.info1.count;
-				break;
-			case 2:
-				num_entries = info.info2.count;
-				break;
-			case 3:
-				num_entries = info.info3.count;
-				break;
-			case 4:
-				num_entries = info.info4.count;
-				break;
-			case 5:
-				num_entries = info.info5.count;
-				break;
-			default:
-				break;
-		}
-
-		start_idx += num_entries;
-
-		if (num_entries == 0)
-			break;
-
 		for (i = 0; i < num_entries; i++) {
 			switch (info_level) {
 			case 1:
-				display_sam_info_1(&info.info1.entries[i]);
+				display_sam_info_1(&ctr.sam.info1->sam[i], &ctr.sam.info1->str[i]);
 				break;
 			case 2:
-				display_sam_info_2(&info.info2.entries[i]);
+				display_sam_info_2(&ctr.sam.info2->sam[i], &ctr.sam.info2->str[i]);
 				break;
 			case 3:
-				display_sam_info_3(&info.info3.entries[i]);
+				display_sam_info_3(&ctr.sam.info3->sam[i], &ctr.sam.info3->str[i]);
 				break;
 			case 4:
-				display_sam_info_4(&info.info4.entries[i]);
+				display_sam_info_4(&ctr.sam.info4->sam[i], &ctr.sam.info4->str[i]);
 				break;
 			case 5:
-				display_sam_info_5(&info.info5.entries[i]);
+				display_sam_info_5(&ctr.sam.info5->sam[i], &ctr.sam.info5->str[i]);
 				break;
 			}
 		}
 	} while ( NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES));
 
-	rpccli_samr_Close(cli, mem_ctx, &domain_pol);
-	rpccli_samr_Close(cli, mem_ctx, &connect_pol);
+	rpccli_samr_close(cli, mem_ctx, &domain_pol);
+	rpccli_samr_close(cli, mem_ctx, &connect_pol);
  done:
 	return result;
 }
 
-static NTSTATUS cmd_samr_query_dispinfo(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					int argc, const char **argv)
-{
-	return cmd_samr_query_dispinfo_internal(cli, mem_ctx, argc, argv,
-						NDR_SAMR_QUERYDISPLAYINFO);
-}
-
-static NTSTATUS cmd_samr_query_dispinfo2(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 int argc, const char **argv)
-{
-	return cmd_samr_query_dispinfo_internal(cli, mem_ctx, argc, argv,
-						NDR_SAMR_QUERYDISPLAYINFO2);
-}
-
-static NTSTATUS cmd_samr_query_dispinfo3(struct rpc_pipe_client *cli,
-					 TALLOC_CTX *mem_ctx,
-					 int argc, const char **argv)
-{
-	return cmd_samr_query_dispinfo_internal(cli, mem_ctx, argc, argv,
-						NDR_SAMR_QUERYDISPLAYINFO3);
-}
-
 /* Query domain info */
 
-static NTSTATUS cmd_samr_query_dominfo(struct rpc_pipe_client *cli,
+static NTSTATUS cmd_samr_query_dominfo(struct rpc_pipe_client *cli, 
                                        TALLOC_CTX *mem_ctx,
-                                       int argc, const char **argv)
+                                       int argc, const char **argv) 
 {
 	POLICY_HND connect_pol, domain_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	uint32 switch_level = 2;
 	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;
-	union samr_DomainInfo *info = NULL;
+	SAM_UNK_CTR ctr;
 
 	if (argc > 3) {
 		printf("Usage: %s [info level] [access mask]\n", argv[0]);
@@ -1565,36 +1361,31 @@
 
 	if (argc > 1)
                 sscanf(argv[1], "%i", &switch_level);
-
+	
 	if (argc > 2)
                 sscanf(argv[2], "%x", &access_mask);
 
 	/* Get sam policy handle */
 
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  MAXIMUM_ALLOWED_ACCESS,
-					  &connect_pol);
+	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				   &connect_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	/* Get domain policy handle */
 
-	result = rpccli_samr_OpenDomain(cli, mem_ctx,
-					&connect_pol,
-					access_mask,
-					&domain_sid,
-					&domain_pol);
+	result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+				      access_mask,
+				      &domain_sid, &domain_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	/* Query domain info */
 
-	result = rpccli_samr_QueryDomainInfo(cli, mem_ctx,
-					     &domain_pol,
-					     switch_level,
-					     &info);
+	result = rpccli_samr_query_dom_info(cli, mem_ctx, &domain_pol,
+					 switch_level, &ctr);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
@@ -1603,37 +1394,37 @@
 
 	switch (switch_level) {
 	case 1:
-		display_sam_dom_info_1(&info->info1);
+		display_sam_unk_info_1(&ctr.info.inf1);
 		break;
 	case 2:
-		display_sam_dom_info_2(&info->info2);
+		display_sam_unk_info_2(&ctr.info.inf2);
 		break;
 	case 3:
-		display_sam_dom_info_3(&info->info3);
+		display_sam_unk_info_3(&ctr.info.inf3);
 		break;
 	case 4:
-		display_sam_dom_info_4(&info->info4);
+		display_sam_unk_info_4(&ctr.info.inf4);
 		break;
 	case 5:
-		display_sam_dom_info_5(&info->info5);
+		display_sam_unk_info_5(&ctr.info.inf5);
 		break;
 	case 6:
-		display_sam_dom_info_6(&info->info6);
+		display_sam_unk_info_6(&ctr.info.inf6);
 		break;
 	case 7:
-		display_sam_dom_info_7(&info->info7);
+		display_sam_unk_info_7(&ctr.info.inf7);
 		break;
 	case 8:
-		display_sam_dom_info_8(&info->info8);
+		display_sam_unk_info_8(&ctr.info.inf8);
 		break;
 	case 9:
-		display_sam_dom_info_9(&info->info9);
+		display_sam_unk_info_9(&ctr.info.inf9);
 		break;
 	case 12:
-		display_sam_dom_info_12(&info->info12);
+		display_sam_unk_info_12(&ctr.info.inf12);
 		break;
 	case 13:
-		display_sam_dom_info_13(&info->info13);
+		display_sam_unk_info_13(&ctr.info.inf13);
 		break;
 
 	default:
@@ -1643,52 +1434,48 @@
 	}
 
  done:
-
-	rpccli_samr_Close(cli, mem_ctx, &domain_pol);
-	rpccli_samr_Close(cli, mem_ctx, &connect_pol);
+ 
+ 	rpccli_samr_close(cli, mem_ctx, &domain_pol);
+ 	rpccli_samr_close(cli, mem_ctx, &connect_pol);
 	return result;
 }
 
 /* Create domain user */
 
-static NTSTATUS cmd_samr_create_dom_user(struct rpc_pipe_client *cli,
+static NTSTATUS cmd_samr_create_dom_user(struct rpc_pipe_client *cli, 
                                          TALLOC_CTX *mem_ctx,
-                                         int argc, const char **argv)
+                                         int argc, const char **argv) 
 {
 	POLICY_HND connect_pol, domain_pol, user_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	struct lsa_String acct_name;
+	const char *acct_name;
 	uint32 acb_info;
 	uint32 acct_flags, user_rid;
 	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;
-	uint32_t access_granted = 0;
 
 	if ((argc < 2) || (argc > 3)) {
 		printf("Usage: %s username [access mask]\n", argv[0]);
 		return NT_STATUS_OK;
 	}
 
-	init_lsa_String(&acct_name, argv[1]);
-
+	acct_name = argv[1];
+	
 	if (argc > 2)
                 sscanf(argv[2], "%x", &access_mask);
 
 	/* Get sam policy handle */
 
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  MAXIMUM_ALLOWED_ACCESS,
-					  &connect_pol);
+	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				   &connect_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	/* Get domain policy handle */
 
-	result = rpccli_samr_OpenDomain(cli, mem_ctx,
-					&connect_pol,
-					access_mask,
-					&domain_sid,
-					&domain_pol);
+	result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+				      access_mask,
+				      &domain_sid, &domain_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
@@ -1696,31 +1483,25 @@
 	/* Create domain user */
 
 	acb_info = ACB_NORMAL;
-	acct_flags = SEC_GENERIC_READ | SEC_GENERIC_WRITE | SEC_GENERIC_EXECUTE |
-		     SEC_STD_WRITE_DAC | SEC_STD_DELETE |
-		     SAMR_USER_ACCESS_SET_PASSWORD |
-		     SAMR_USER_ACCESS_GET_ATTRIBUTES |
-		     SAMR_USER_ACCESS_SET_ATTRIBUTES;
+        acct_flags = SAMR_GENERIC_READ | SAMR_GENERIC_WRITE |
+                SAMR_GENERIC_EXECUTE | SAMR_STANDARD_WRITEDAC |
+                SAMR_STANDARD_DELETE | SAMR_USER_SETPASS | SAMR_USER_GETATTR |
+                SAMR_USER_SETATTR;
+	DEBUG(10, ("Creating account with flags: %d\n",acct_flags));
+	result = rpccli_samr_create_dom_user(cli, mem_ctx, &domain_pol,
+					  acct_name, acb_info, acct_flags,
+					  &user_pol, &user_rid);
 
-	result = rpccli_samr_CreateUser2(cli, mem_ctx,
-					 &domain_pol,
-					 &acct_name,
-					 acb_info,
-					 acct_flags,
-					 &user_pol,
-					 &access_granted,
-					 &user_rid);
-
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_samr_Close(cli, mem_ctx, &user_pol);
+	result = rpccli_samr_close(cli, mem_ctx, &user_pol);
 	if (!NT_STATUS_IS_OK(result)) goto done;
 
-	result = rpccli_samr_Close(cli, mem_ctx, &domain_pol);
+	result = rpccli_samr_close(cli, mem_ctx, &domain_pol);
 	if (!NT_STATUS_IS_OK(result)) goto done;
 
-	result = rpccli_samr_Close(cli, mem_ctx, &connect_pol);
+	result = rpccli_samr_close(cli, mem_ctx, &connect_pol);
 	if (!NT_STATUS_IS_OK(result)) goto done;
 
  done:
@@ -1729,64 +1510,58 @@
 
 /* Create domain group */
 
-static NTSTATUS cmd_samr_create_dom_group(struct rpc_pipe_client *cli,
+static NTSTATUS cmd_samr_create_dom_group(struct rpc_pipe_client *cli, 
                                           TALLOC_CTX *mem_ctx,
-                                          int argc, const char **argv)
+                                          int argc, const char **argv) 
 {
 	POLICY_HND connect_pol, domain_pol, group_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	struct lsa_String grp_name;
+	const char *grp_name;
 	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;
-	uint32_t rid = 0;
 
 	if ((argc < 2) || (argc > 3)) {
 		printf("Usage: %s groupname [access mask]\n", argv[0]);
 		return NT_STATUS_OK;
 	}
 
-	init_lsa_String(&grp_name, argv[1]);
-
+	grp_name = argv[1];
+	
 	if (argc > 2)
                 sscanf(argv[2], "%x", &access_mask);
 
 	/* Get sam policy handle */
 
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  MAXIMUM_ALLOWED_ACCESS,
-					  &connect_pol);
+	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				   &connect_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	/* Get domain policy handle */
 
-	result = rpccli_samr_OpenDomain(cli, mem_ctx,
-					&connect_pol,
-					access_mask,
-					&domain_sid,
-					&domain_pol);
+	result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+				      access_mask,
+				      &domain_sid, &domain_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	/* Create domain user */
-	result = rpccli_samr_CreateDomainGroup(cli, mem_ctx,
-					       &domain_pol,
-					       &grp_name,
-					       MAXIMUM_ALLOWED_ACCESS,
-					       &group_pol,
-					       &rid);
 
+	result = rpccli_samr_create_dom_group(cli, mem_ctx, &domain_pol,
+					   grp_name, MAXIMUM_ALLOWED_ACCESS,
+					   &group_pol);
+
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_samr_Close(cli, mem_ctx, &group_pol);
+	result = rpccli_samr_close(cli, mem_ctx, &group_pol);
 	if (!NT_STATUS_IS_OK(result)) goto done;
 
-	result = rpccli_samr_Close(cli, mem_ctx, &domain_pol);
+	result = rpccli_samr_close(cli, mem_ctx, &domain_pol);
 	if (!NT_STATUS_IS_OK(result)) goto done;
 
-	result = rpccli_samr_Close(cli, mem_ctx, &connect_pol);
+	result = rpccli_samr_close(cli, mem_ctx, &connect_pol);
 	if (!NT_STATUS_IS_OK(result)) goto done;
 
  done:
@@ -1795,65 +1570,57 @@
 
 /* Create domain alias */
 
-static NTSTATUS cmd_samr_create_dom_alias(struct rpc_pipe_client *cli,
+static NTSTATUS cmd_samr_create_dom_alias(struct rpc_pipe_client *cli, 
                                           TALLOC_CTX *mem_ctx,
-                                          int argc, const char **argv)
+                                          int argc, const char **argv) 
 {
 	POLICY_HND connect_pol, domain_pol, alias_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	struct lsa_String alias_name;
+	const char *alias_name;
 	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;
-	uint32_t rid = 0;
 
 	if ((argc < 2) || (argc > 3)) {
 		printf("Usage: %s aliasname [access mask]\n", argv[0]);
 		return NT_STATUS_OK;
 	}
 
-	init_lsa_String(&alias_name, argv[1]);
-
+	alias_name = argv[1];
+	
 	if (argc > 2)
                 sscanf(argv[2], "%x", &access_mask);
 
 	/* Get sam policy handle */
 
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  MAXIMUM_ALLOWED_ACCESS,
-					  &connect_pol);
+	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				   &connect_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	/* Get domain policy handle */
 
-	result = rpccli_samr_OpenDomain(cli, mem_ctx,
-					&connect_pol,
-					access_mask,
-					&domain_sid,
-					&domain_pol);
+	result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+					 access_mask,
+					 &domain_sid, &domain_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	/* Create domain user */
 
-	result = rpccli_samr_CreateDomAlias(cli, mem_ctx,
-					    &domain_pol,
-					    &alias_name,
-					    MAXIMUM_ALLOWED_ACCESS,
-					    &alias_pol,
-					    &rid);
+	result = rpccli_samr_create_dom_alias(cli, mem_ctx, &domain_pol,
+					      alias_name, &alias_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_samr_Close(cli, mem_ctx, &alias_pol);
+	result = rpccli_samr_close(cli, mem_ctx, &alias_pol);
 	if (!NT_STATUS_IS_OK(result)) goto done;
 
-	result = rpccli_samr_Close(cli, mem_ctx, &domain_pol);
+	result = rpccli_samr_close(cli, mem_ctx, &domain_pol);
 	if (!NT_STATUS_IS_OK(result)) goto done;
 
-	result = rpccli_samr_Close(cli, mem_ctx, &connect_pol);
+	result = rpccli_samr_close(cli, mem_ctx, &connect_pol);
 	if (!NT_STATUS_IS_OK(result)) goto done;
 
  done:
@@ -1862,16 +1629,16 @@
 
 /* Lookup sam names */
 
-static NTSTATUS cmd_samr_lookup_names(struct rpc_pipe_client *cli,
+static NTSTATUS cmd_samr_lookup_names(struct rpc_pipe_client *cli, 
                                       TALLOC_CTX *mem_ctx,
-                                      int argc, const char **argv)
+                                      int argc, const char **argv) 
 {
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	POLICY_HND connect_pol, domain_pol;
-	uint32 num_names;
-	struct samr_Ids rids, name_types;
+	uint32 flags = 0x000003e8; /* Unknown */
+	uint32 num_rids, num_names, *name_types, *rids;
+	const char **names;
 	int i;
-	struct lsa_String *names = NULL;;
 
 	if (argc < 3) {
 		printf("Usage: %s  domain|builtin name1 [name2 [name3] [...]]\n", argv[0]);
@@ -1882,25 +1649,20 @@
 
 	/* Get sam policy and domain handles */
 
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  MAXIMUM_ALLOWED_ACCESS,
-					  &connect_pol);
+	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				   &connect_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	if (StrCaseCmp(argv[1], "domain")==0)
-		result = rpccli_samr_OpenDomain(cli, mem_ctx,
-						&connect_pol,
-						MAXIMUM_ALLOWED_ACCESS,
-						&domain_sid,
-						&domain_pol);
+		result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+					      MAXIMUM_ALLOWED_ACCESS,
+					      &domain_sid, &domain_pol);
 	else if (StrCaseCmp(argv[1], "builtin")==0)
-		result = rpccli_samr_OpenDomain(cli, mem_ctx,
-						&connect_pol,
-						MAXIMUM_ALLOWED_ACCESS,
-						CONST_DISCARD(struct dom_sid2 *, &global_sid_Builtin),
-						&domain_pol);
+		result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+					      MAXIMUM_ALLOWED_ACCESS,
+					      &global_sid_Builtin, &domain_pol);
 	else
 		return NT_STATUS_OK;
 
@@ -1910,24 +1672,23 @@
 	/* Look up names */
 
 	num_names = argc - 2;
-
-	if ((names = TALLOC_ARRAY(mem_ctx, struct lsa_String, num_names)) == NULL) {
-		rpccli_samr_Close(cli, mem_ctx, &domain_pol);
-		rpccli_samr_Close(cli, mem_ctx, &connect_pol);
-		result = NT_STATUS_NO_MEMORY;
-		goto done;
+	if (num_names) {
+		if ((names = TALLOC_ARRAY(mem_ctx, const char *, num_names)) == NULL) {
+			rpccli_samr_close(cli, mem_ctx, &domain_pol);
+			rpccli_samr_close(cli, mem_ctx, &connect_pol);
+			result = NT_STATUS_NO_MEMORY;
+			goto done;
+		}
+	} else {
+		names = NULL;
 	}
 
-	for (i = 0; i < num_names; i++) {
-		init_lsa_String(&names[i], argv[i + 2]);
-	}
+	for (i = 0; i < argc - 2; i++)
+		names[i] = argv[i + 2];
 
-	result = rpccli_samr_LookupNames(cli, mem_ctx,
-					 &domain_pol,
-					 num_names,
-					 names,
-					 &rids,
-					 &name_types);
+	result = rpccli_samr_lookup_names(cli, mem_ctx, &domain_pol,
+				       flags, num_names, names,
+				       &num_rids, &rids, &name_types);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
@@ -1935,27 +1696,25 @@
 	/* Display results */
 
 	for (i = 0; i < num_names; i++)
-		printf("name %s: 0x%x (%d)\n", names[i].string, rids.ids[i],
-		       name_types.ids[i]);
+		printf("name %s: 0x%x (%d)\n", names[i], rids[i], 
+		       name_types[i]);
 
-	rpccli_samr_Close(cli, mem_ctx, &domain_pol);
-	rpccli_samr_Close(cli, mem_ctx, &connect_pol);
+	rpccli_samr_close(cli, mem_ctx, &domain_pol);
+	rpccli_samr_close(cli, mem_ctx, &connect_pol);
  done:
 	return result;
 }
 
 /* Lookup sam rids */
 
-static NTSTATUS cmd_samr_lookup_rids(struct rpc_pipe_client *cli,
+static NTSTATUS cmd_samr_lookup_rids(struct rpc_pipe_client *cli, 
                                      TALLOC_CTX *mem_ctx,
-                                     int argc, const char **argv)
+                                     int argc, const char **argv) 
 {
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	POLICY_HND connect_pol, domain_pol;
-	uint32_t num_rids, *rids;
-	struct lsa_Strings names;
-	struct samr_Ids types;
-
+	uint32 num_rids, num_names, *rids, *name_types;
+	char **names;
 	int i;
 
 	if (argc < 3) {
@@ -1965,25 +1724,20 @@
 
 	/* Get sam policy and domain handles */
 
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  MAXIMUM_ALLOWED_ACCESS,
-					  &connect_pol);
+	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				   &connect_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	if (StrCaseCmp(argv[1], "domain")==0)
-		result = rpccli_samr_OpenDomain(cli, mem_ctx,
-						&connect_pol,
-						MAXIMUM_ALLOWED_ACCESS,
-						&domain_sid,
-						&domain_pol);
+		result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+					      MAXIMUM_ALLOWED_ACCESS,
+					      &domain_sid, &domain_pol);
 	else if (StrCaseCmp(argv[1], "builtin")==0)
-		result = rpccli_samr_OpenDomain(cli, mem_ctx,
-						&connect_pol,
-						MAXIMUM_ALLOWED_ACCESS,
-						CONST_DISCARD(struct dom_sid2 *, &global_sid_Builtin),
-						&domain_pol);
+		result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+					      MAXIMUM_ALLOWED_ACCESS,
+					      &global_sid_Builtin, &domain_pol);
 	else
 		return NT_STATUS_OK;
 
@@ -1993,23 +1747,22 @@
 	/* Look up rids */
 
 	num_rids = argc - 2;
-
-	if ((rids = TALLOC_ARRAY(mem_ctx, uint32, num_rids)) == NULL) {
-		rpccli_samr_Close(cli, mem_ctx, &domain_pol);
-		rpccli_samr_Close(cli, mem_ctx, &connect_pol);
-		result = NT_STATUS_NO_MEMORY;
-		goto done;
+	if (num_rids) {
+		if ((rids = TALLOC_ARRAY(mem_ctx, uint32, num_rids)) == NULL) {
+			rpccli_samr_close(cli, mem_ctx, &domain_pol);
+			rpccli_samr_close(cli, mem_ctx, &connect_pol);
+			result = NT_STATUS_NO_MEMORY;
+			goto done;
+		}
+	} else {
+		rids = NULL;
 	}
 
 	for (i = 0; i < argc - 2; i++)
                 sscanf(argv[i + 2], "%i", &rids[i]);
 
-	result = rpccli_samr_LookupRids(cli, mem_ctx,
-					&domain_pol,
-					num_rids,
-					rids,
-					&names,
-					&types);
+	result = rpccli_samr_lookup_rids(cli, mem_ctx, &domain_pol, num_rids, rids,
+				      &num_names, &names, &name_types);
 
 	if (!NT_STATUS_IS_OK(result) &&
 	    !NT_STATUS_EQUAL(result, STATUS_SOME_UNMAPPED))
@@ -2017,103 +1770,20 @@
 
 	/* Display results */
 
-	for (i = 0; i < num_rids; i++) {
-		printf("rid 0x%x: %s (%d)\n",
-			rids[i], names.names[i].string, types.ids[i]);
-	}
+	for (i = 0; i < num_names; i++)
+		printf("rid 0x%x: %s (%d)\n", rids[i], names[i], name_types[i]);
 
-	rpccli_samr_Close(cli, mem_ctx, &domain_pol);
-	rpccli_samr_Close(cli, mem_ctx, &connect_pol);
+	rpccli_samr_close(cli, mem_ctx, &domain_pol);
+	rpccli_samr_close(cli, mem_ctx, &connect_pol);
  done:
 	return result;
 }
 
-/* Delete domain group */
-
-static NTSTATUS cmd_samr_delete_dom_group(struct rpc_pipe_client *cli,
-                                         TALLOC_CTX *mem_ctx,
-                                         int argc, const char **argv)
-{
-	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	POLICY_HND connect_pol, domain_pol, group_pol;
-	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;
-
-	if ((argc < 2) || (argc > 3)) {
-		printf("Usage: %s groupname\n", argv[0]);
-		return NT_STATUS_OK;
-	}
-
-	if (argc > 2)
-                sscanf(argv[2], "%x", &access_mask);
-
-	/* Get sam policy and domain handles */
-
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  MAXIMUM_ALLOWED_ACCESS,
-					  &connect_pol);
-
-	if (!NT_STATUS_IS_OK(result))
-		goto done;
-
-	result = rpccli_samr_OpenDomain(cli, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					&domain_sid,
-					&domain_pol);
-
-	if (!NT_STATUS_IS_OK(result))
-		goto done;
-
-	/* Get handle on group */
-
-	{
-		struct samr_Ids group_rids, name_types;
-		struct lsa_String lsa_acct_name;
-
-		init_lsa_String(&lsa_acct_name, argv[1]);
-
-		result = rpccli_samr_LookupNames(cli, mem_ctx,
-						 &domain_pol,
-						 1,
-						 &lsa_acct_name,
-						 &group_rids,
-						 &name_types);
-		if (!NT_STATUS_IS_OK(result))
-			goto done;
-
-		result = rpccli_samr_OpenGroup(cli, mem_ctx,
-					       &domain_pol,
-					       access_mask,
-					       group_rids.ids[0],
-					       &group_pol);
-
-		if (!NT_STATUS_IS_OK(result))
-			goto done;
-	}
-
-	/* Delete group */
-
-	result = rpccli_samr_DeleteDomainGroup(cli, mem_ctx,
-					       &group_pol);
-
-	if (!NT_STATUS_IS_OK(result))
-		goto done;
-
-	/* Display results */
-
-	rpccli_samr_Close(cli, mem_ctx, &group_pol);
-	rpccli_samr_Close(cli, mem_ctx, &domain_pol);
-	rpccli_samr_Close(cli, mem_ctx, &connect_pol);
-
- done:
-	return result;
-}
-
 /* Delete domain user */
 
-static NTSTATUS cmd_samr_delete_dom_user(struct rpc_pipe_client *cli,
+static NTSTATUS cmd_samr_delete_dom_user(struct rpc_pipe_client *cli, 
                                          TALLOC_CTX *mem_ctx,
-                                         int argc, const char **argv)
+                                         int argc, const char **argv) 
 {
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	POLICY_HND connect_pol, domain_pol, user_pol;
@@ -2123,24 +1793,21 @@
 		printf("Usage: %s username\n", argv[0]);
 		return NT_STATUS_OK;
 	}
-
+	
 	if (argc > 2)
                 sscanf(argv[2], "%x", &access_mask);
 
 	/* Get sam policy and domain handles */
 
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  MAXIMUM_ALLOWED_ACCESS,
-					  &connect_pol);
+	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				   &connect_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_samr_OpenDomain(cli, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					&domain_sid,
-					&domain_pol);
+	result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      &domain_sid, &domain_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
@@ -2148,26 +1815,20 @@
 	/* Get handle on user */
 
 	{
-		struct samr_Ids user_rids, name_types;
-		struct lsa_String lsa_acct_name;
+		uint32 *user_rids, num_rids, *name_types;
+		uint32 flags = 0x000003e8; /* Unknown */
 
-		init_lsa_String(&lsa_acct_name, argv[1]);
+		result = rpccli_samr_lookup_names(cli, mem_ctx, &domain_pol,
+					       flags, 1, (const char **)&argv[1],
+					       &num_rids, &user_rids,
+					       &name_types);
 
-		result = rpccli_samr_LookupNames(cli, mem_ctx,
-						 &domain_pol,
-						 1,
-						 &lsa_acct_name,
-						 &user_rids,
-						 &name_types);
-
 		if (!NT_STATUS_IS_OK(result))
 			goto done;
 
-		result = rpccli_samr_OpenUser(cli, mem_ctx,
-					      &domain_pol,
-					      access_mask,
-					      user_rids.ids[0],
-					      &user_pol);
+		result = rpccli_samr_open_user(cli, mem_ctx, &domain_pol,
+					    access_mask,
+					    user_rids[0], &user_pol);
 
 		if (!NT_STATUS_IS_OK(result))
 			goto done;
@@ -2175,46 +1836,46 @@
 
 	/* Delete user */
 
-	result = rpccli_samr_DeleteUser(cli, mem_ctx,
-					&user_pol);
+	result = rpccli_samr_delete_dom_user(cli, mem_ctx, &user_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	/* Display results */
 
-	rpccli_samr_Close(cli, mem_ctx, &user_pol);
-	rpccli_samr_Close(cli, mem_ctx, &domain_pol);
-	rpccli_samr_Close(cli, mem_ctx, &connect_pol);
+	rpccli_samr_close(cli, mem_ctx, &user_pol);
+	rpccli_samr_close(cli, mem_ctx, &domain_pol);
+	rpccli_samr_close(cli, mem_ctx, &connect_pol);
 
  done:
 	return result;
 }
 
 /**********************************************************************
- * Query user security object
+ * Query user security object 
  */
-static NTSTATUS cmd_samr_query_sec_obj(struct rpc_pipe_client *cli,
+static NTSTATUS cmd_samr_query_sec_obj(struct rpc_pipe_client *cli, 
                                     TALLOC_CTX *mem_ctx,
-                                    int argc, const char **argv)
+                                    int argc, const char **argv) 
 {
 	POLICY_HND connect_pol, domain_pol, user_pol, *pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	uint32 sec_info = DACL_SECURITY_INFORMATION;
+	fstring server;
 	uint32 user_rid = 0;
 	TALLOC_CTX *ctx = NULL;
 	SEC_DESC_BUF *sec_desc_buf=NULL;
-	bool domain = False;
+	BOOL domain = False;
 
 	ctx=talloc_init("cmd_samr_query_sec_obj");
-
+	
 	if ((argc < 1) || (argc > 3)) {
 		printf("Usage: %s [rid|-d] [sec_info]\n", argv[0]);
 		printf("\tSpecify rid for security on user, -d for security on domain\n");
 		talloc_destroy(ctx);
 		return NT_STATUS_OK;
 	}
-
+	
 	if (argc > 1) {
 		if (strcmp(argv[1], "-d") == 0)
 			domain = True;
@@ -2225,30 +1886,27 @@
 	if (argc == 3) {
 		sec_info = atoi(argv[2]);
 	}
+	
+	slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->cli->desthost);
+	strupper_m(server);
+	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS,
+				   &connect_pol);
 
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  MAXIMUM_ALLOWED_ACCESS,
-					  &connect_pol);
-
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	if (domain || user_rid)
-		result = rpccli_samr_OpenDomain(cli, mem_ctx,
-						&connect_pol,
-						MAXIMUM_ALLOWED_ACCESS,
-						&domain_sid,
-						&domain_pol);
+		result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+					      MAXIMUM_ALLOWED_ACCESS,
+					      &domain_sid, &domain_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	if (user_rid)
-		result = rpccli_samr_OpenUser(cli, mem_ctx,
-					      &domain_pol,
-					      MAXIMUM_ALLOWED_ACCESS,
-					      user_rid,
-					      &user_pol);
+		result = rpccli_samr_open_user(cli, mem_ctx, &domain_pol,
+					    MAXIMUM_ALLOWED_ACCESS,
+					    user_rid, &user_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
@@ -2265,104 +1923,97 @@
 
 	/* Query SAM security object */
 
-	result = rpccli_samr_QuerySecurity(cli, mem_ctx,
-					   pol,
-					   sec_info,
-					   &sec_desc_buf);
+	result = rpccli_samr_query_sec_obj(cli, mem_ctx, pol, sec_info, ctx, 
+					&sec_desc_buf);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	display_sec_desc(sec_desc_buf->sd);
+	display_sec_desc(sec_desc_buf->sec);
 
-	rpccli_samr_Close(cli, mem_ctx, &user_pol);
-	rpccli_samr_Close(cli, mem_ctx, &domain_pol);
-	rpccli_samr_Close(cli, mem_ctx, &connect_pol);
+	rpccli_samr_close(cli, mem_ctx, &user_pol);
+	rpccli_samr_close(cli, mem_ctx, &domain_pol);
+	rpccli_samr_close(cli, mem_ctx, &connect_pol);
 done:
 	talloc_destroy(ctx);
 	return result;
 }
 
-static NTSTATUS cmd_samr_get_usrdom_pwinfo(struct rpc_pipe_client *cli,
+static NTSTATUS cmd_samr_get_usrdom_pwinfo(struct rpc_pipe_client *cli, 
 					   TALLOC_CTX *mem_ctx,
-					   int argc, const char **argv)
+					   int argc, const char **argv) 
 {
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	POLICY_HND connect_pol, domain_pol, user_pol;
-	struct samr_PwInfo info;
-	uint32_t rid;
+	uint16 min_pwd_length;
+	uint32 password_properties, unknown1, rid;
 
 	if (argc != 2) {
 		printf("Usage: %s rid\n", argv[0]);
 		return NT_STATUS_OK;
 	}
-
+	
 	sscanf(argv[1], "%i", &rid);
 
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  MAXIMUM_ALLOWED_ACCESS,
-					  &connect_pol);
+	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				   &connect_pol);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
-	result = rpccli_samr_OpenDomain(cli, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					&domain_sid,
-					&domain_pol);
+	result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+					 MAXIMUM_ALLOWED_ACCESS, &domain_sid, &domain_pol);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
-	result = rpccli_samr_OpenUser(cli, mem_ctx,
-				      &domain_pol,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      rid,
-				      &user_pol);
+	result = rpccli_samr_open_user(cli, mem_ctx, &domain_pol,
+				       MAXIMUM_ALLOWED_ACCESS,
+				       rid, &user_pol);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
-	result = rpccli_samr_GetUserPwInfo(cli, mem_ctx, &user_pol, &info);
+	result = rpccli_samr_get_usrdom_pwinfo(cli, mem_ctx, &user_pol,
+					       &min_pwd_length, &password_properties, 
+					       &unknown1) ;
+
 	if (NT_STATUS_IS_OK(result)) {
-		printf("min_password_length: %d\n", info.min_password_length);
-		printf("%s\n",
-			NDR_PRINT_STRUCT_STRING(mem_ctx,
-				samr_PasswordProperties, &info.password_properties));
+		printf("min_pwd_length: %d\n", min_pwd_length);
+		printf("unknown1: %d\n", unknown1);
+		display_password_properties(password_properties);
 	}
 
  done:
-	rpccli_samr_Close(cli, mem_ctx, &user_pol);
-	rpccli_samr_Close(cli, mem_ctx, &domain_pol);
-	rpccli_samr_Close(cli, mem_ctx, &connect_pol);
+	rpccli_samr_close(cli, mem_ctx, &user_pol);
+	rpccli_samr_close(cli, mem_ctx, &domain_pol);
+	rpccli_samr_close(cli, mem_ctx, &connect_pol);
 
 	return result;
 }
 
-static NTSTATUS cmd_samr_get_dom_pwinfo(struct rpc_pipe_client *cli,
+
+static NTSTATUS cmd_samr_get_dom_pwinfo(struct rpc_pipe_client *cli, 
 					TALLOC_CTX *mem_ctx,
-					int argc, const char **argv)
+					int argc, const char **argv) 
 {
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	struct lsa_String domain_name;
-	struct samr_PwInfo info;
+	uint16 min_pwd_length;
+	uint32 password_properties;
 
-	if (argc < 1 || argc > 3) {
-		printf("Usage: %s <domain>\n", argv[0]);
+	if (argc != 1) {
+		printf("Usage: %s\n", argv[0]);
 		return NT_STATUS_OK;
 	}
 
-	init_lsa_String(&domain_name, argv[1]);
-
-	result = rpccli_samr_GetDomPwInfo(cli, mem_ctx, &domain_name, &info);
-
+	result = rpccli_samr_get_dom_pwinfo(cli, mem_ctx, &min_pwd_length, &password_properties) ;
+	
 	if (NT_STATUS_IS_OK(result)) {
-		printf("min_password_length: %d\n", info.min_password_length);
-		display_password_properties(info.password_properties);
+		printf("min_pwd_length: %d\n", min_pwd_length);
+		display_password_properties(password_properties);
 	}
 
 	return result;
@@ -2370,62 +2021,54 @@
 
 /* Look up domain name */
 
-static NTSTATUS cmd_samr_lookup_domain(struct rpc_pipe_client *cli,
+static NTSTATUS cmd_samr_lookup_domain(struct rpc_pipe_client *cli, 
 				       TALLOC_CTX *mem_ctx,
-				       int argc, const char **argv)
+				       int argc, const char **argv) 
 {
 	POLICY_HND connect_pol, domain_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;
-	fstring sid_string;
-	struct lsa_String domain_name;
-	DOM_SID *sid = NULL;
-
+	fstring domain_name,sid_string;
+	DOM_SID sid;
+	
 	if (argc != 2) {
 		printf("Usage: %s domain_name\n", argv[0]);
 		return NT_STATUS_OK;
 	}
-
-	init_lsa_String(&domain_name, argv[1]);
-
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  access_mask,
-					  &connect_pol);
-
+	
+	sscanf(argv[1], "%s", domain_name);
+	
+	result = try_samr_connects(cli, mem_ctx, access_mask, &connect_pol);
+	
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_samr_OpenDomain(cli, mem_ctx,
-					&connect_pol,
-					access_mask,
-					&domain_sid,
-					&domain_pol);
+	result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+				      access_mask, &domain_sid, &domain_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
+	
+	result = rpccli_samr_lookup_domain(
+		cli, mem_ctx, &connect_pol, domain_name, &sid);
 
-	result = rpccli_samr_LookupDomain(cli, mem_ctx,
-					  &connect_pol,
-					  &domain_name,
-					  &sid);
-
-	if (NT_STATUS_IS_OK(result)) {
-		sid_to_fstring(sid_string, sid);
+	sid_to_string(sid_string,&sid);
+ 
+	if (NT_STATUS_IS_OK(result)) 
 		printf("SAMR_LOOKUP_DOMAIN: Domain Name: %s Domain SID: %s\n",
-		       argv[1], sid_string);
-	}
+		       domain_name,sid_string);
 
-	rpccli_samr_Close(cli, mem_ctx, &domain_pol);
-	rpccli_samr_Close(cli, mem_ctx, &connect_pol);
+	rpccli_samr_close(cli, mem_ctx, &domain_pol);
+	rpccli_samr_close(cli, mem_ctx, &connect_pol);
 done:
 	return result;
 }
 
 /* Change user password */
 
-static NTSTATUS cmd_samr_chgpasswd2(struct rpc_pipe_client *cli,
+static NTSTATUS cmd_samr_chgpasswd2(struct rpc_pipe_client *cli, 
 				    TALLOC_CTX *mem_ctx,
-				    int argc, const char **argv)
+				    int argc, const char **argv) 
 {
 	POLICY_HND connect_pol, domain_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
@@ -2440,23 +2083,20 @@
 	user = argv[1];
 	oldpass = argv[2];
 	newpass = argv[3];
-
+	
 	/* Get sam policy handle */
 
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  MAXIMUM_ALLOWED_ACCESS,
-					  &connect_pol);
+	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				   &connect_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	/* Get domain policy handle */
 
-	result = rpccli_samr_OpenDomain(cli, mem_ctx,
-					&connect_pol,
-					access_mask,
-					&domain_sid,
-					&domain_pol);
+	result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+				      access_mask,
+				      &domain_sid, &domain_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
@@ -2467,10 +2107,10 @@
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_samr_Close(cli, mem_ctx, &domain_pol);
+	result = rpccli_samr_close(cli, mem_ctx, &domain_pol);
 	if (!NT_STATUS_IS_OK(result)) goto done;
 
-	result = rpccli_samr_Close(cli, mem_ctx, &connect_pol);
+	result = rpccli_samr_close(cli, mem_ctx, &connect_pol);
 	if (!NT_STATUS_IS_OK(result)) goto done;
 
  done:
@@ -2480,16 +2120,16 @@
 
 /* Change user password */
 
-static NTSTATUS cmd_samr_chgpasswd3(struct rpc_pipe_client *cli,
+static NTSTATUS cmd_samr_chgpasswd3(struct rpc_pipe_client *cli, 
 				    TALLOC_CTX *mem_ctx,
-				    int argc, const char **argv)
+				    int argc, const char **argv) 
 {
 	POLICY_HND connect_pol, domain_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	const char *user, *oldpass, *newpass;
 	uint32 access_mask = MAXIMUM_ALLOWED_ACCESS;
-	struct samr_DomInfo1 *info = NULL;
-	struct samr_ChangeReject *reject = NULL;
+	SAM_UNK_INFO_1 info;
+	SAMR_CHANGE_REJECT reject;
 
 	if (argc < 3) {
 		printf("Usage: %s username oldpass newpass\n", argv[0]);
@@ -2499,55 +2139,46 @@
 	user = argv[1];
 	oldpass = argv[2];
 	newpass = argv[3];
-
+	
 	/* Get sam policy handle */
 
-	result = rpccli_try_samr_connects(cli, mem_ctx,
-					  MAXIMUM_ALLOWED_ACCESS,
-					  &connect_pol);
+	result = try_samr_connects(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				   &connect_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	/* Get domain policy handle */
 
-	result = rpccli_samr_OpenDomain(cli, mem_ctx,
-					&connect_pol,
-					access_mask,
-					&domain_sid,
-					&domain_pol);
+	result = rpccli_samr_open_domain(cli, mem_ctx, &connect_pol,
+				      access_mask,
+				      &domain_sid, &domain_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
 	/* Change user password */
-	result = rpccli_samr_chgpasswd3(cli, mem_ctx,
-					user,
-					newpass,
-					oldpass,
-					&info,
-					&reject);
+	result = rpccli_samr_chgpasswd3(cli, mem_ctx, user, newpass, oldpass, &info, &reject);
 
 	if (NT_STATUS_EQUAL(result, NT_STATUS_PASSWORD_RESTRICTION)) {
+	
+		display_sam_unk_info_1(&info);
 
-		display_sam_dom_info_1(info);
-
-		switch (reject->reason) {
-			case SAMR_REJECT_TOO_SHORT:
-				d_printf("SAMR_REJECT_TOO_SHORT\n");
+		switch (reject.reject_reason) {
+			case REJECT_REASON_TOO_SHORT:
+				d_printf("REJECT_REASON_TOO_SHORT\n");
 				break;
-			case SAMR_REJECT_IN_HISTORY:
-				d_printf("SAMR_REJECT_IN_HISTORY\n");
+			case REJECT_REASON_IN_HISTORY:
+				d_printf("REJECT_REASON_IN_HISTORY\n");
 				break;
-			case SAMR_REJECT_COMPLEXITY:
-				d_printf("SAMR_REJECT_COMPLEXITY\n");
+			case REJECT_REASON_NOT_COMPLEX:
+				d_printf("REJECT_REASON_NOT_COMPLEX\n");
 				break;
-			case SAMR_REJECT_OTHER:
-				d_printf("SAMR_REJECT_OTHER\n");
+			case REJECT_REASON_OTHER:
+				d_printf("REJECT_REASON_OTHER\n");
 				break;
 			default:
-				d_printf("unknown reject reason: %d\n",
-					reject->reason);
+				d_printf("unknown reject reason: %d\n", reject.reject_reason);
 				break;
 		}
 	}
@@ -2555,78 +2186,16 @@
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_samr_Close(cli, mem_ctx, &domain_pol);
+	result = rpccli_samr_close(cli, mem_ctx, &domain_pol);
 	if (!NT_STATUS_IS_OK(result)) goto done;
 
-	result = rpccli_samr_Close(cli, mem_ctx, &connect_pol);
+	result = rpccli_samr_close(cli, mem_ctx, &connect_pol);
 	if (!NT_STATUS_IS_OK(result)) goto done;
 
  done:
 	return result;
 }
 
-static NTSTATUS cmd_samr_get_dispinfo_idx(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  int argc, const char **argv)
-{
-	NTSTATUS status;
-	struct policy_handle connect_handle;
-	struct policy_handle domain_handle;
-	uint16_t level = 1;
-	struct lsa_String name;
-	uint32_t idx = 0;
-
-	if (argc < 2 || argc > 3) {
-		printf("Usage: %s name level\n", argv[0]);
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	init_lsa_String(&name, argv[1]);
-
-	if (argc == 3) {
-		level = atoi(argv[2]);
-	}
-
-	status = rpccli_try_samr_connects(cli, mem_ctx,
-					  SEC_RIGHTS_MAXIMUM_ALLOWED,
-					  &connect_handle);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		goto done;
-	}
-
-	status = rpccli_samr_OpenDomain(cli, mem_ctx,
-					&connect_handle,
-					SEC_RIGHTS_MAXIMUM_ALLOWED,
-					&domain_sid,
-					&domain_handle);
-
-	if (!NT_STATUS_IS_OK(status))
-		goto done;
-
-
-	status = rpccli_samr_GetDisplayEnumerationIndex(cli, mem_ctx,
-							&domain_handle,
-							level,
-							&name,
-							&idx);
-
-	if (NT_STATUS_IS_OK(status) ||
-	    NT_STATUS_EQUAL(status, NT_STATUS_NO_MORE_ENTRIES)) {
-		printf("idx: %d (0x%08x)\n", idx, idx);
-	}
- done:
-
-	if (is_valid_policy_hnd(&domain_handle)) {
-		rpccli_samr_Close(cli, mem_ctx, &domain_handle);
-	}
-	if (is_valid_policy_hnd(&connect_handle)) {
-		rpccli_samr_Close(cli, mem_ctx, &connect_handle);
-	}
-
-	return status;
-
-}
 /* List of commands exported by this module */
 
 struct cmd_set samr_commands[] = {
@@ -2639,23 +2208,18 @@
 	{ "queryuseraliases", 	RPC_RTYPE_NTSTATUS, cmd_samr_query_useraliases, 	NULL, PI_SAMR, NULL,	"Query user aliases",      "" },
 	{ "querygroupmem", 	RPC_RTYPE_NTSTATUS, cmd_samr_query_groupmem, 	NULL, PI_SAMR, NULL,	"Query group membership",  "" },
 	{ "queryaliasmem", 	RPC_RTYPE_NTSTATUS, cmd_samr_query_aliasmem, 	NULL, PI_SAMR, NULL,	"Query alias membership",  "" },
-	{ "queryaliasinfo", 	RPC_RTYPE_NTSTATUS, cmd_samr_query_aliasinfo, 	NULL, PI_SAMR, NULL,	"Query alias info",       "" },
 	{ "deletealias", 	RPC_RTYPE_NTSTATUS, cmd_samr_delete_alias, 	NULL, PI_SAMR, NULL,	"Delete an alias",  "" },
 	{ "querydispinfo", 	RPC_RTYPE_NTSTATUS, cmd_samr_query_dispinfo, 	NULL, PI_SAMR, NULL,	"Query display info",      "" },
-	{ "querydispinfo2", 	RPC_RTYPE_NTSTATUS, cmd_samr_query_dispinfo2, 	NULL, PI_SAMR, NULL,	"Query display info",      "" },
-	{ "querydispinfo3", 	RPC_RTYPE_NTSTATUS, cmd_samr_query_dispinfo3, 	NULL, PI_SAMR, NULL,	"Query display info",      "" },
 	{ "querydominfo", 	RPC_RTYPE_NTSTATUS, cmd_samr_query_dominfo, 	NULL, PI_SAMR, NULL,	"Query domain info",       "" },
-	{ "enumdomusers",       RPC_RTYPE_NTSTATUS, cmd_samr_enum_dom_users,       NULL, PI_SAMR, NULL,	"Enumerate domain users", "" },
+	{ "enumdomusers",      RPC_RTYPE_NTSTATUS, cmd_samr_enum_dom_users,       NULL, PI_SAMR, NULL,	"Enumerate domain users", "" },
 	{ "enumdomgroups",      RPC_RTYPE_NTSTATUS, cmd_samr_enum_dom_groups,       NULL, PI_SAMR, NULL,	"Enumerate domain groups", "" },
 	{ "enumalsgroups",      RPC_RTYPE_NTSTATUS, cmd_samr_enum_als_groups,       NULL, PI_SAMR, NULL,	"Enumerate alias groups",  "" },
-	{ "enumdomains",        RPC_RTYPE_NTSTATUS, cmd_samr_enum_domains,          NULL, PI_SAMR, NULL,	"Enumerate domains",  "" },
 
 	{ "createdomuser",      RPC_RTYPE_NTSTATUS, cmd_samr_create_dom_user,       NULL, PI_SAMR, NULL,	"Create domain user",      "" },
 	{ "createdomgroup",     RPC_RTYPE_NTSTATUS, cmd_samr_create_dom_group,      NULL, PI_SAMR, NULL,	"Create domain group",     "" },
 	{ "createdomalias",     RPC_RTYPE_NTSTATUS, cmd_samr_create_dom_alias,      NULL, PI_SAMR, NULL,	"Create domain alias",     "" },
 	{ "samlookupnames",     RPC_RTYPE_NTSTATUS, cmd_samr_lookup_names,          NULL, PI_SAMR, NULL,	"Look up names",           "" },
 	{ "samlookuprids",      RPC_RTYPE_NTSTATUS, cmd_samr_lookup_rids,           NULL, PI_SAMR, NULL,	"Look up names",           "" },
-	{ "deletedomgroup",     RPC_RTYPE_NTSTATUS, cmd_samr_delete_dom_group,      NULL, PI_SAMR, NULL,	"Delete domain group",     "" },
 	{ "deletedomuser",      RPC_RTYPE_NTSTATUS, cmd_samr_delete_dom_user,       NULL, PI_SAMR, NULL,	"Delete domain user",      "" },
 	{ "samquerysecobj",     RPC_RTYPE_NTSTATUS, cmd_samr_query_sec_obj,         NULL, PI_SAMR, NULL, "Query SAMR security object",   "" },
 	{ "getdompwinfo",       RPC_RTYPE_NTSTATUS, cmd_samr_get_dom_pwinfo,        NULL, PI_SAMR, NULL, "Retrieve domain password info", "" },
@@ -2664,6 +2228,5 @@
 	{ "lookupdomain",       RPC_RTYPE_NTSTATUS, cmd_samr_lookup_domain,         NULL, PI_SAMR, NULL, "Lookup Domain Name", "" },
 	{ "chgpasswd2",         RPC_RTYPE_NTSTATUS, cmd_samr_chgpasswd2,            NULL, PI_SAMR, NULL, "Change user password", "" },
 	{ "chgpasswd3",         RPC_RTYPE_NTSTATUS, cmd_samr_chgpasswd3,            NULL, PI_SAMR, NULL, "Change user password", "" },
-	{ "getdispinfoidx",     RPC_RTYPE_NTSTATUS, cmd_samr_get_dispinfo_idx,      NULL, PI_SAMR, NULL, "Get Display Information Index", "" },
 	{ NULL }
 };

Modified: branches/samba/upstream/source/rpcclient/cmd_shutdown.c
===================================================================
--- branches/samba/upstream/source/rpcclient/cmd_shutdown.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpcclient/cmd_shutdown.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -35,8 +36,8 @@
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	fstring msg;
 	uint32 timeout = 20;
-	bool force = False;
-	bool reboot = False;
+	BOOL force = False;
+	BOOL reboot = False;
 	int opt;
 
 	*msg = 0;
@@ -107,10 +108,10 @@
 	{ "SHUTDOWN"  },
 
 #if 0
-	{ "shutdowninit", RPC_RTYPE_NTSTATUS, cmd_shutdown_init, NULL, PI_INITSHUTDOWN, "Remote Shutdown (over shutdown pipe)",
+	{ "shutdowninit", RPC_RTYPE_NTSTATUS, cmd_shutdown_init, NULL, PI_SHUTDOWN, "Remote Shutdown (over shutdown pipe)",
 				"syntax: shutdown [-m message] [-t timeout] [-r] [-h] [-f] (-r == reboot, -h == halt, -f == force)" },
 				
-	{ "shutdownabort", RPC_RTYPE_NTSTATUS, cmd_shutdown_abort, NULL, PI_INITSHUTDOWN, "Abort Shutdown (over shutdown pipe)",
+	{ "shutdownabort", RPC_RTYPE_NTSTATUS, cmd_shutdown_abort, NULL, PI_SHUTDOWN, "Abort Shutdown (over shutdown pipe)",
 				"syntax: shutdownabort" },
 #endif
 	{ NULL }

Modified: branches/samba/upstream/source/rpcclient/cmd_spoolss.c
===================================================================
--- branches/samba/upstream/source/rpcclient/cmd_spoolss.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpcclient/cmd_spoolss.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
  
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -470,7 +471,7 @@
 	POLICY_HND 	pol;
 	WERROR		result;
 	uint32 		info_level = 2;
-	bool 		opened_hnd = False;
+	BOOL 		opened_hnd = False;
 	PRINTER_INFO_CTR ctr;
 	fstring 	printername,
 			servername,
@@ -536,7 +537,7 @@
 	POLICY_HND 	pol;
 	WERROR		result;
 	uint32 		info_level = 2;
-	bool 		opened_hnd = False;
+	BOOL 		opened_hnd = False;
 	PRINTER_INFO_CTR ctr;
 	fstring 	printername,
 			servername,
@@ -601,7 +602,7 @@
 	POLICY_HND 	pol;
 	WERROR          result;
 	uint32 		info_level = 1;
-	bool 		opened_hnd = False;
+	BOOL 		opened_hnd = False;
 	PRINTER_INFO_CTR ctr;
 	fstring 	printername,
 			servername,
@@ -675,20 +676,17 @@
 
 static void display_reg_value(REGISTRY_VALUE value)
 {
-	char *text = NULL;
+	pstring text;
 
 	switch(value.type) {
 	case REG_DWORD:
-		printf("%s: REG_DWORD: 0x%08x\n", value.valuename,
+		printf("%s: REG_DWORD: 0x%08x\n", value.valuename, 
 		       *((uint32 *) value.data_p));
 		break;
 	case REG_SZ:
-		rpcstr_pull_talloc(talloc_tos(),
-				&text,
-				value.data_p,
-				value.size,
-				STR_TERMINATE);
-		printf("%s: REG_SZ: %s\n", value.valuename, text ? text : "");
+		rpcstr_pull(text, value.data_p, sizeof(text), value.size,
+			    STR_TERMINATE);
+		printf("%s: REG_SZ: %s\n", value.valuename, text);
 		break;
 	case REG_BINARY: {
 		char *hex = hex_encode(NULL, value.data_p, value.size);
@@ -709,22 +707,17 @@
 		break;
 	}
 	case REG_MULTI_SZ: {
-		uint32 i, num_values;
-		char **values;
-
-		if (!W_ERROR_IS_OK(reg_pull_multi_sz(NULL, value.data_p,
-						     value.size, &num_values,
-						     &values))) {
-			d_printf("reg_pull_multi_sz failed\n");
-			break;
+		uint16 *curstr = (uint16 *) value.data_p;
+		uint8 *start = value.data_p;
+		printf("%s: REG_MULTI_SZ:\n", value.valuename);
+		while (((uint8 *) curstr < start + value.size)) {
+			rpcstr_pull(text, curstr, sizeof(text), -1, 
+				    STR_TERMINATE);
+			printf("  %s\n", *text != 0 ? text : "NULL");
+			curstr += strlen(text) + 1;
 		}
-
-		for (i=0; i<num_values; i++) {
-			d_printf("%s\n", values[i]);
-		}
-		TALLOC_FREE(values);
-		break;
 	}
+	break;
 	default:
 		printf("%s: unknown type %d\n", value.valuename, value.type);
 	}
@@ -740,7 +733,7 @@
 {
 	POLICY_HND 	pol;
 	WERROR          result;
-	bool 		opened_hnd = False;
+	BOOL 		opened_hnd = False;
 	fstring 	printername,
 			servername,
 			user;
@@ -805,7 +798,7 @@
 {
 	POLICY_HND 	pol;
 	WERROR          result;
-	bool 		opened_hnd = False;
+	BOOL 		opened_hnd = False;
 	fstring 	printername,
 			servername,
 			user;
@@ -927,7 +920,7 @@
 	fstring defaultdatatype = "";
 	
 	int length=0;
-	bool valid = True;
+	BOOL valid = True;
 	
 	if (i1 == NULL)
 		return;
@@ -984,13 +977,13 @@
 	POLICY_HND 	pol;
 	WERROR          werror;
 	uint32		info_level = 3;
-	bool 		opened_hnd = False;
+	BOOL 		opened_hnd = False;
 	PRINTER_DRIVER_CTR 	ctr;
 	fstring 	printername, 
 			servername, 
 			user;
 	uint32		i;
-	bool		success = False;
+	BOOL		success = False;
 
 	if ((argc == 1) || (argc > 3)) 
 	{
@@ -1222,10 +1215,9 @@
 static char* get_driver_3_param (char* str, const char* delim, UNISTR* dest)
 {
 	char	*ptr;
-	char *saveptr;
 
 	/* get the next token */
-	ptr = strtok_r(str, delim, &saveptr);
+	ptr = strtok(str, delim);
 
 	/* a string of 'NULL' is used to represent an empty
 	   parameter because two consecutive delimiters
@@ -1247,13 +1239,12 @@
 	     <Config File Name>:<Help File Name>:<Language Monitor Name>:\
 	     <Default Data Type>:<Comma Separated list of Files> 
  *******************************************************************************/
-static bool init_drv_info_3_members ( TALLOC_CTX *mem_ctx, DRIVER_INFO_3 *info, 
+static BOOL init_drv_info_3_members ( TALLOC_CTX *mem_ctx, DRIVER_INFO_3 *info, 
                                       char *args )
 {
 	char	*str, *str2;
 	uint32	len, i;
-	char *saveptr = NULL;
-
+	
 	/* fill in the UNISTR fields */
 	str = get_driver_3_param (args, ":", &info->name);
 	str = get_driver_3_param (NULL, ":", &info->driverpath);
@@ -1268,13 +1259,13 @@
 	str = str2;			
 
 	/* begin to strip out each filename */
-	str = strtok_r(str, ",", &saveptr);
+	str = strtok(str, ",");		
 	len = 0;
 	while (str != NULL)
 	{
 		/* keep a cumlative count of the str lengths */
 		len += strlen(str)+1;
-		str = strtok_r(NULL, ",", &saveptr);
+		str = strtok(NULL, ",");
 	}
 
 	/* allocate the space; add one extra slot for a terminating NULL.
@@ -1430,7 +1421,7 @@
 	POLICY_HND		pol;
 	WERROR                  result;
 	uint32			level = 2;
-	bool			opened_hnd = False;
+	BOOL			opened_hnd = False;
 	PRINTER_INFO_CTR	ctr;
 	PRINTER_INFO_2		info2;
 	fstring			servername,
@@ -1483,7 +1474,7 @@
 		goto done;;
 	}
 
-	printf("Successfully set %s to driver %s.\n", argv[1], argv[2]);
+	printf("Succesfully set %s to driver %s.\n", argv[1], argv[2]);
 
 done:
 	/* Cleanup */
@@ -1643,7 +1634,7 @@
 	WERROR werror;
 	char *servername = NULL, *printername = NULL;
 	FORM form;
-	bool got_handle = False;
+	BOOL got_handle = False;
 	
 	/* Parse the command arguements */
 
@@ -1703,7 +1694,7 @@
 	WERROR werror;
 	char *servername = NULL, *printername = NULL;
 	FORM form;
-	bool got_handle = False;
+	BOOL got_handle = False;
 	
 	/* Parse the command arguements */
 
@@ -1800,7 +1791,7 @@
 	WERROR werror;
 	char *servername = NULL, *printername = NULL;
 	FORM_1 form;
-	bool got_handle = False;
+	BOOL got_handle = False;
 	
 	/* Parse the command arguements */
 
@@ -1853,7 +1844,7 @@
 	POLICY_HND handle;
 	WERROR werror;
 	char *servername = NULL, *printername = NULL;
-	bool got_handle = False;
+	BOOL got_handle = False;
 	
 	/* Parse the command arguements */
 
@@ -1901,7 +1892,7 @@
 	POLICY_HND handle;
 	WERROR werror;
 	char *servername = NULL, *printername = NULL;
-	bool got_handle = False;
+	BOOL got_handle = False;
 	uint32 num_forms, level = 1, i;
 	FORM_1 *forms;
 	
@@ -1962,19 +1953,17 @@
 	WERROR result;
 	fstring servername, printername, user;
 	POLICY_HND pol;
-	bool opened_hnd = False;
+	BOOL opened_hnd = False;
 	PRINTER_INFO_CTR ctr;
 	PRINTER_INFO_0 info;
 	REGISTRY_VALUE value;
-	TALLOC_CTX *tmp_ctx = talloc_stackframe();
 
 	/* parse the command arguements */
 	if (argc < 5) {
 		printf ("Usage: %s <printer> <string|binary|dword|multistring>"
 			" <value> <data>\n",
 			argv[0]);
-		result = WERR_INVALID_PARAM;
-		goto done;
+		return WERR_INVALID_PARAM;
 	}
 
 	slprintf(servername, sizeof(servername)-1, "\\\\%s", cli->cli->desthost);
@@ -2002,8 +1991,7 @@
 
 	if (value.type == REG_NONE) {
 		printf("Unknown data type: %s\n", argv[2]);
-		result =  WERR_INVALID_PARAM;
-		goto done;
+		return WERR_INVALID_PARAM;
 	}
 
 	/* get a printer handle */
@@ -2022,7 +2010,7 @@
         if (!W_ERROR_IS_OK(result))
                 goto done;
 		
-	printf("%s\n", current_timestring(tmp_ctx, True));
+	printf("%s\n", current_timestring(True));
 	printf("\tchange_id (before set)\t:[0x%x]\n", info.change_id);
 
 	/* Set the printer data */
@@ -2108,12 +2096,11 @@
         if (!W_ERROR_IS_OK(result))
                 goto done;
 		
-	printf("%s\n", current_timestring(tmp_ctx, True));
+	printf("%s\n", current_timestring(True));
 	printf("\tchange_id (after set)\t:[0x%x]\n", info.change_id);
 
 done:
 	/* cleanup */
-	TALLOC_FREE(tmp_ctx);
 	if (opened_hnd)
 		rpccli_spoolss_close_printer(cli, mem_ctx, &pol);
 
@@ -2171,17 +2158,17 @@
 {
 	WERROR result;
 	uint32 level = 1, num_jobs, i;
-	bool got_hnd = False;
-	char *printername = NULL;
+	BOOL got_hnd = False;
+	pstring printername;
 	fstring servername, user;
 	POLICY_HND hnd;
 	JOB_INFO_CTR ctr;
-
+	
 	if (argc < 2 || argc > 3) {
 		printf("Usage: %s printername [level]\n", argv[0]);
 		return WERR_OK;
 	}
-
+	
 	if (argc == 3)
 		level = atoi(argv[2]);
 
@@ -2190,25 +2177,17 @@
 	slprintf(servername, sizeof(servername)-1, "\\\\%s", cli->cli->desthost);
 	strupper_m(servername);
 	fstrcpy(user, cli->user_name);
-	printername = talloc_asprintf(mem_ctx,
-				"\\\\%s\\",
-				cli->cli->desthost);
-	if (!printername) {
-		return WERR_NOMEM;
-	}
+	slprintf(printername, sizeof(servername)-1, "\\\\%s\\", cli->cli->desthost);
 	strupper_m(printername);
-	printername = talloc_asprintf_append(printername, "%s", argv[1]);
-	if (!printername) {
-		return WERR_NOMEM;
-	}
+	pstrcat(printername, argv[1]);
 
-	result = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername,
-					     "", MAXIMUM_ALLOWED_ACCESS,
+	result = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, 
+					     "", MAXIMUM_ALLOWED_ACCESS, 
 					     servername, user, &hnd);
 
 	if (!W_ERROR_IS_OK(result))
 		goto done;
-
+ 
 	got_hnd = True;
 
 	/* Enumerate ports */
@@ -2249,8 +2228,8 @@
 {
 	WERROR result;
 	uint32 i=0, val_needed, data_needed;
-	bool got_hnd = False;
-	char *printername = NULL;
+	BOOL got_hnd = False;
+	pstring printername;
 	fstring servername, user;
 	POLICY_HND hnd;
 
@@ -2258,26 +2237,18 @@
 		printf("Usage: %s printername\n", argv[0]);
 		return WERR_OK;
 	}
-
+	
 	/* Open printer handle */
 
 	slprintf(servername, sizeof(servername)-1, "\\\\%s", cli->cli->desthost);
 	strupper_m(servername);
 	fstrcpy(user, cli->user_name);
-	printername = talloc_asprintf(mem_ctx,
-				"\\\\%s\\",
-				cli->cli->desthost);
-	if (!printername) {
-		return WERR_NOMEM;
-	}
+	slprintf(printername, sizeof(printername)-1, "\\\\%s\\", cli->cli->desthost);
 	strupper_m(printername);
-	printername = talloc_asprintf_append(printername, "%s",	argv[1]);
-	if (!printername) {
-		return WERR_NOMEM;
-	}
+	pstrcat(printername, argv[1]);
 
-	result = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername,
-					     "", MAXIMUM_ALLOWED_ACCESS,
+	result = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, 
+					     "", MAXIMUM_ALLOWED_ACCESS, 
 					     servername, user, &hnd);
 
 	if (!W_ERROR_IS_OK(result))
@@ -2317,8 +2288,8 @@
 {
 	WERROR result;
 	uint32 i;
-	bool got_hnd = False;
-	char *printername = NULL;
+	BOOL got_hnd = False;
+	pstring printername;
 	fstring servername, user;
 	const char *keyname = NULL;
 	POLICY_HND hnd;
@@ -2328,7 +2299,7 @@
 		printf("Usage: %s printername <keyname>\n", argv[0]);
 		return WERR_OK;
 	}
-
+	
 	keyname = argv[2];
 
 	/* Open printer handle */
@@ -2336,18 +2307,9 @@
 	slprintf(servername, sizeof(servername)-1, "\\\\%s", cli->cli->desthost);
 	strupper_m(servername);
 	fstrcpy(user, cli->user_name);
-
-	printername = talloc_asprintf(mem_ctx,
-				"\\\\%s\\",
-				cli->cli->desthost);
-	if (!printername) {
-		return WERR_NOMEM;
-	}
+	slprintf(printername, sizeof(printername)-1, "\\\\%s\\", cli->cli->desthost);
 	strupper_m(printername);
-	printername = talloc_asprintf_append(printername, "%s", argv[1]);
-	if (!printername) {
-		return WERR_NOMEM;
-	}
+	pstrcat(printername, argv[1]);
 
 	result = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, 
 					     "", MAXIMUM_ALLOWED_ACCESS, 
@@ -2389,8 +2351,8 @@
 					     const char **argv)
 {
 	WERROR result;
-	bool got_hnd = False;
-	char *printername = NULL;
+	BOOL got_hnd = False;
+	pstring printername;
 	fstring servername, user;
 	const char *keyname = NULL;
 	POLICY_HND hnd;
@@ -2400,7 +2362,7 @@
 		printf("Usage: %s printername [keyname]\n", argv[0]);
 		return WERR_OK;
 	}
-
+		
 	if (argc == 3)
 		keyname = argv[2];
 	else
@@ -2411,20 +2373,10 @@
 	slprintf(servername, sizeof(servername)-1, "\\\\%s", cli->cli->desthost);
 	strupper_m(servername);
 	fstrcpy(user, cli->user_name);
-
-	printername = talloc_asprintf(mem_ctx,
-				"\\\\%s\\",
-				cli->cli->desthost);
-	if (!printername) {
-		return WERR_NOMEM;
-	}
+	slprintf(printername, sizeof(printername)-1, "\\\\%s\\", cli->cli->desthost);
 	strupper_m(printername);
-	printername = talloc_asprintf_append(printername, "%s",	argv[1]);
-	if (!printername) {
-		return WERR_NOMEM;
-	}
+	pstrcat(printername, argv[1]);
 
-
 	result = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, 
 					     "", MAXIMUM_ALLOWED_ACCESS, 
 					     servername, user, &hnd);
@@ -2443,12 +2395,9 @@
 
 	curkey = keylist;
 	while (*curkey != 0) {
-		char *subkey = NULL;
-		rpcstr_pull_talloc(mem_ctx, &subkey, curkey, -1,
+		pstring subkey;
+		rpcstr_pull(subkey, curkey, sizeof(subkey), -1, 
 			    STR_TERMINATE);
-		if (!subkey) {
-			break;
-		}
 		printf("%s\n", subkey);
 		curkey += strlen(subkey) + 1;
 	}
@@ -2472,7 +2421,7 @@
 {
 	fstring servername, printername;
 	POLICY_HND hnd;
-	bool got_hnd = False;
+	BOOL got_hnd = False;
 	WERROR result;
 	SPOOL_NOTIFY_OPTION option;
 
@@ -2551,7 +2500,7 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool compare_printer( struct rpc_pipe_client *cli1, POLICY_HND *hnd1,
+static BOOL compare_printer( struct rpc_pipe_client *cli1, POLICY_HND *hnd1,
                              struct rpc_pipe_client *cli2, POLICY_HND *hnd2 )
 {
 	PRINTER_INFO_CTR ctr1, ctr2;
@@ -2584,14 +2533,14 @@
 /****************************************************************************
 ****************************************************************************/
 
-static bool compare_printer_secdesc( struct rpc_pipe_client *cli1, POLICY_HND *hnd1,
+static BOOL compare_printer_secdesc( struct rpc_pipe_client *cli1, POLICY_HND *hnd1,
                                      struct rpc_pipe_client *cli2, POLICY_HND *hnd2 )
 {
 	PRINTER_INFO_CTR ctr1, ctr2;
 	WERROR werror;
 	TALLOC_CTX *mem_ctx = talloc_init("compare_printer_secdesc");
 	SEC_DESC *sd1, *sd2;
-	bool result = True;
+	BOOL result = True;
 
 
 	printf("Retreiving printer security for %s...", cli1->cli->desthost);
@@ -2652,37 +2601,38 @@
 				     const char **argv)
 {
 	fstring printername, servername1, servername2;
-	char *printername_path = NULL;
+	pstring printername_path;
 	struct cli_state *cli_server1 = cli->cli;
 	struct cli_state *cli_server2 = NULL;
 	struct rpc_pipe_client *cli2 = NULL;
 	POLICY_HND hPrinter1, hPrinter2;
 	NTSTATUS nt_status;
 	WERROR werror;
-
+	
 	if ( argc != 3 )  {
 		printf("Usage: %s <printer> <server>\n", argv[0]);
 		return WERR_OK;
 	}
-
+	
 	fstrcpy( printername, argv[1] );
-
+	
 	fstrcpy( servername1, cli->cli->desthost );
 	fstrcpy( servername2, argv[2] );
 	strupper_m( servername1 );
 	strupper_m( servername2 );
-
+	
+	
 	/* first get the connection to the remote server */
-
+	
 	nt_status = cli_full_connection(&cli_server2, global_myname(), servername2, 
 					NULL, 0,
-					"IPC$", "IPC",
-					get_cmdline_auth_info_username(),
+					"IPC$", "IPC",  
+					cmdline_auth_info.username, 
 					lp_workgroup(),
-					get_cmdline_auth_info_password(),
-					get_cmdline_auth_info_use_kerberos() ? CLI_FULL_CONNECTION_USE_KERBEROS : 0,
-					get_cmdline_auth_info_signing_state(), NULL);
-
+					cmdline_auth_info.password, 
+					cmdline_auth_info.use_kerberos ? CLI_FULL_CONNECTION_USE_KERBEROS : 0,
+					cmdline_auth_info.signing_state, NULL);
+					
 	if ( !NT_STATUS_IS_OK(nt_status) )
 		return WERR_GENERAL_FAILURE;
 
@@ -2692,16 +2642,10 @@
 			servername2, nt_errstr(nt_status));
 		return WERR_GENERAL_FAILURE;
 	}
-
+					
 	/* now open up both printers */
 
-	printername_path = talloc_asprintf(mem_ctx,
-				"\\\\%s\\%s",
-				servername1,
-				printername);
-	if (!printername_path) {
-		return WERR_NOMEM;
-	}
+	pstr_sprintf( printername_path, "\\\\%s\\%s", servername1, printername );
 	printf("Opening %s...", printername_path);
 	werror = rpccli_spoolss_open_printer_ex( cli, mem_ctx, printername_path, 
 		"", PRINTER_ALL_ACCESS, servername1, cli_server1->user_name, &hPrinter1);
@@ -2710,14 +2654,8 @@
 		goto done;
 	}
 	printf("ok\n");
-
-	printername_path = talloc_asprintf(mem_ctx,
-					"\\\\%s\\%s",
-					servername2,
-					printername);
-	if (!printername_path) {
-		return WERR_NOMEM;
-	}
+	
+	pstr_sprintf( printername_path, "\\\\%s\\%s", servername2, printername );
 	printf("Opening %s...", printername_path);
 	werror = rpccli_spoolss_open_printer_ex( cli2, mem_ctx, printername_path,  
 		"", PRINTER_ALL_ACCESS, servername2, cli_server2->user_name, &hPrinter2 );
@@ -2726,7 +2664,8 @@
 		goto done;
 	}
 	printf("ok\n");
-
+	
+	
 	compare_printer( cli, &hPrinter1, cli2, &hPrinter2 );
 	compare_printer_secdesc( cli, &hPrinter1, cli2, &hPrinter2 );
 #if 0
@@ -2737,14 +2676,15 @@
 done:
 	/* cleanup */
 
-	printf("Closing printers...");
+	printf("Closing printers...");	
 	rpccli_spoolss_close_printer( cli, mem_ctx, &hPrinter1 );
 	rpccli_spoolss_close_printer( cli2, mem_ctx, &hPrinter2 );
 	printf("ok\n");
-
+	
 	/* close the second remote connection */
-
+	
 	cli_shutdown( cli_server2 );
+	
 	return WERR_OK;
 }
 

Modified: branches/samba/upstream/source/rpcclient/cmd_srvsvc.c
===================================================================
--- branches/samba/upstream/source/rpcclient/cmd_srvsvc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpcclient/cmd_srvsvc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -130,37 +131,51 @@
 	return typestr;
 }
 
-static void display_server(const char *sname, uint32 type, const char *comment)
+static void display_server(char *sname, uint32 type, const char *comment)
 {
 	printf("\t%-15.15s%-20s %s\n", sname, get_server_type_str(type), 
 	       comment);
 }
 
-static void display_srv_info_101(struct srvsvc_NetSrvInfo101 *r)
+static void display_srv_info_101(SRV_INFO_101 *sv101)
 {
-	display_server(r->server_name, r->server_type, r->comment);
+	fstring name;
+	fstring comment;
 
-	printf("\tplatform_id     :\t%d\n", r->platform_id);
-	printf("\tos version      :\t%d.%d\n",
-		r->version_major, r->version_minor);
-	printf("\tserver type     :\t0x%x\n", r->server_type);
+	unistr2_to_ascii(name, &sv101->uni_name, sizeof(name) - 1);
+	unistr2_to_ascii(comment, &sv101->uni_comment, sizeof(comment) - 1);
+
+	display_server(name, sv101->srv_type, comment);
+
+	printf("\tplatform_id     :\t%d\n", sv101->platform_id);
+	printf("\tos version      :\t%d.%d\n", sv101->ver_major, 
+	       sv101->ver_minor);
+
+	printf("\tserver type     :\t0x%x\n", sv101->srv_type);
 }
 
-static void display_srv_info_102(struct srvsvc_NetSrvInfo102 *r)
+static void display_srv_info_102(SRV_INFO_102 *sv102)
 {
-	display_server(r->server_name, r->server_type, r->comment);
+	fstring name;
+	fstring comment;
+	fstring usr_path;
+	
+	unistr2_to_ascii(name, &sv102->uni_name, sizeof(name) - 1);
+	unistr2_to_ascii(comment, &sv102->uni_comment, sizeof(comment) - 1);
+	unistr2_to_ascii(usr_path, &sv102->uni_usr_path, sizeof(usr_path) - 1);
 
-	printf("\tplatform_id     :\t%d\n", r->platform_id);
-	printf("\tos version      :\t%d.%d\n",
-		r->version_major, r->version_minor);
-	printf("\tserver type     :\t0x%x\n", r->server_type);
+	display_server(name, sv102->srv_type, comment);
 
-	printf("\tusers           :\t%x\n", r->users);
-	printf("\tdisc, hidden    :\t%x, %x\n", r->disc, r->hidden);
-	printf("\tannounce, delta :\t%d, %d\n", r->announce,
-	       r->anndelta);
-	printf("\tlicenses        :\t%d\n", r->licenses);
-	printf("\tuser path       :\t%s\n", r->userpath);
+	printf("\tplatform_id     :\t%d\n", sv102->platform_id);
+	printf("\tos version      :\t%d.%d\n", sv102->ver_major, 
+	       sv102->ver_minor);
+
+	printf("\tusers           :\t%x\n", sv102->users);
+	printf("\tdisc, hidden    :\t%x, %x\n", sv102->disc, sv102->hidden);
+	printf("\tannounce, delta :\t%d, %d\n", sv102->announce, 
+	       sv102->ann_delta);
+	printf("\tlicenses        :\t%d\n", sv102->licenses);
+	printf("\tuser path       :\t%s\n", usr_path);
 }
 
 /* Server query info */
@@ -169,10 +184,8 @@
                                           int argc, const char **argv)
 {
 	uint32 info_level = 101;
-	union srvsvc_NetSrvInfo info;
+	SRV_INFO_CTR ctr;
 	WERROR result;
-	NTSTATUS status;
-	const char *server_name;
 
 	if (argc > 2) {
 		printf("Usage: %s [infolevel]\n", argv[0]);
@@ -182,19 +195,9 @@
 	if (argc == 2)
 		info_level = atoi(argv[1]);
 
-	server_name = talloc_asprintf_strupper_m(mem_ctx, "\\\\%s",
-						 cli->cli->desthost);
-	W_ERROR_HAVE_NO_MEMORY(server_name);
+	result = rpccli_srvsvc_net_srv_get_info(cli, mem_ctx, info_level,
+					     &ctr);
 
-	status = rpccli_srvsvc_NetSrvGetInfo(cli, mem_ctx,
-					     server_name,
-					     info_level,
-					     &info,
-					     &result);
-	if (!NT_STATUS_IS_OK(status)) {
-		return ntstatus_to_werror(status);
-	}
-
 	if (!W_ERROR_IS_OK(result)) {
 		goto done;
 	}
@@ -203,10 +206,10 @@
 
 	switch (info_level) {
 	case 101:
-		display_srv_info_101(info.info101);
+		display_srv_info_101(&ctr.srv.sv101);
 		break;
 	case 102:
-		display_srv_info_102(info.info102);
+		display_srv_info_102(&ctr.srv.sv102);
 		break;
 	default:
 		printf("unsupported info level %d\n", info_level);
@@ -217,163 +220,96 @@
 	return result;
 }
 
-static void display_share_info_1(struct srvsvc_NetShareInfo1 *r)
+static void display_share_info_1(SRV_SHARE_INFO_1 *info1)
 {
-	printf("netname: %s\n", r->name);
-	printf("\tremark:\t%s\n", r->comment);
+	fstring netname = "", remark = "";
+
+	rpcstr_pull_unistr2_fstring(netname, &info1->info_1_str.uni_netname);
+	rpcstr_pull_unistr2_fstring(remark, &info1->info_1_str.uni_remark);
+
+	printf("netname: %s\n", netname);
+	printf("\tremark:\t%s\n", remark);
 }
 
-static void display_share_info_2(struct srvsvc_NetShareInfo2 *r)
+static void display_share_info_2(SRV_SHARE_INFO_2 *info2)
 {
-	printf("netname: %s\n", r->name);
-	printf("\tremark:\t%s\n", r->comment);
-	printf("\tpath:\t%s\n", r->path);
-	printf("\tpassword:\t%s\n", r->password);
+	fstring netname = "", remark = "", path = "", passwd = "";
+
+	rpcstr_pull_unistr2_fstring(netname, &info2->info_2_str.uni_netname);
+	rpcstr_pull_unistr2_fstring(remark, &info2->info_2_str.uni_remark);
+	rpcstr_pull_unistr2_fstring(path, &info2->info_2_str.uni_path);
+	rpcstr_pull_unistr2_fstring(passwd, &info2->info_2_str.uni_passwd);
+
+	printf("netname: %s\n", netname);
+	printf("\tremark:\t%s\n", remark);
+	printf("\tpath:\t%s\n", path);
+	printf("\tpassword:\t%s\n", passwd);
 }
 
-static void display_share_info_502(struct srvsvc_NetShareInfo502 *r)
+static void display_share_info_502(SRV_SHARE_INFO_502 *info502)
 {
-	printf("netname: %s\n", r->name);
-	printf("\tremark:\t%s\n", r->comment);
-	printf("\tpath:\t%s\n", r->path);
-	printf("\tpassword:\t%s\n", r->password);
+	fstring netname = "", remark = "", path = "", passwd = "";
 
-	printf("\ttype:\t0x%x\n", r->type);
-	printf("\tperms:\t%d\n", r->permissions);
-	printf("\tmax_uses:\t%d\n", r->max_users);
-	printf("\tnum_uses:\t%d\n", r->current_users);
+	rpcstr_pull_unistr2_fstring(netname, &info502->info_502_str.uni_netname);
+	rpcstr_pull_unistr2_fstring(remark, &info502->info_502_str.uni_remark);
+	rpcstr_pull_unistr2_fstring(path, &info502->info_502_str.uni_path);
+	rpcstr_pull_unistr2_fstring(passwd, &info502->info_502_str.uni_passwd);
 
-	if (r->sd_buf.sd)
-		display_sec_desc(r->sd_buf.sd);
+	printf("netname: %s\n", netname);
+	printf("\tremark:\t%s\n", remark);
+	printf("\tpath:\t%s\n", path);
+	printf("\tpassword:\t%s\n", passwd);
 
+	printf("\ttype:\t0x%x\n", info502->info_502.type);
+	printf("\tperms:\t%d\n", info502->info_502.perms);
+	printf("\tmax_uses:\t%d\n", info502->info_502.max_uses);
+	printf("\tnum_uses:\t%d\n", info502->info_502.num_uses);
+	
+	if (info502->info_502_str.sd)
+		display_sec_desc(info502->info_502_str.sd);
+
 }
 
-static WERROR cmd_srvsvc_net_share_enum_int(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    int argc, const char **argv,
-					    uint32_t opcode)
+static WERROR cmd_srvsvc_net_share_enum(struct rpc_pipe_client *cli, 
+                                          TALLOC_CTX *mem_ctx,
+                                          int argc, const char **argv)
 {
 	uint32 info_level = 2;
-	struct srvsvc_NetShareInfoCtr info_ctr;
-	struct srvsvc_NetShareCtr0 ctr0;
-	struct srvsvc_NetShareCtr1 ctr1;
-	struct srvsvc_NetShareCtr2 ctr2;
-	struct srvsvc_NetShareCtr501 ctr501;
-	struct srvsvc_NetShareCtr502 ctr502;
-	struct srvsvc_NetShareCtr1004 ctr1004;
-	struct srvsvc_NetShareCtr1005 ctr1005;
-	struct srvsvc_NetShareCtr1006 ctr1006;
-	struct srvsvc_NetShareCtr1007 ctr1007;
-	struct srvsvc_NetShareCtr1501 ctr1501;
+	SRV_SHARE_INFO_CTR ctr;
 	WERROR result;
-	NTSTATUS status;
-	uint32_t totalentries = 0;
-	uint32_t resume_handle = 0;
-	uint32_t *resume_handle_p = NULL;
+	ENUM_HND hnd;
 	uint32 preferred_len = 0xffffffff, i;
 
-	if (argc > 3) {
-		printf("Usage: %s [infolevel] [resume_handle]\n", argv[0]);
+	if (argc > 2) {
+		printf("Usage: %s [infolevel]\n", argv[0]);
 		return WERR_OK;
 	}
 
-	if (argc >= 2) {
+	if (argc == 2)
 		info_level = atoi(argv[1]);
-	}
 
-	if (argc == 3) {
-		resume_handle = atoi(argv[2]);
-		resume_handle_p = &resume_handle;
-	}
+	init_enum_hnd(&hnd, 0);
 
-	ZERO_STRUCT(info_ctr);
+	result = rpccli_srvsvc_net_share_enum(
+		cli, mem_ctx, info_level, &ctr, preferred_len, &hnd);
 
-	info_ctr.level = info_level;
-
-	switch (info_level) {
-	case 0:
-		ZERO_STRUCT(ctr0);
-		info_ctr.ctr.ctr0 = &ctr0;
-		break;
-	case 1:
-		ZERO_STRUCT(ctr1);
-		info_ctr.ctr.ctr1 = &ctr1;
-		break;
-	case 2:
-		ZERO_STRUCT(ctr2);
-		info_ctr.ctr.ctr2 = &ctr2;
-		break;
-	case 501:
-		ZERO_STRUCT(ctr501);
-		info_ctr.ctr.ctr501 = &ctr501;
-		break;
-	case 502:
-		ZERO_STRUCT(ctr502);
-		info_ctr.ctr.ctr502 = &ctr502;
-		break;
-	case 1004:
-		ZERO_STRUCT(ctr1004);
-		info_ctr.ctr.ctr1004 = &ctr1004;
-		break;
-	case 1005:
-		ZERO_STRUCT(ctr1005);
-		info_ctr.ctr.ctr1005 = &ctr1005;
-		break;
-	case 1006:
-		ZERO_STRUCT(ctr1006);
-		info_ctr.ctr.ctr1006 = &ctr1006;
-		break;
-	case 1007:
-		ZERO_STRUCT(ctr1007);
-		info_ctr.ctr.ctr1007 = &ctr1007;
-		break;
-	case 1501:
-		ZERO_STRUCT(ctr1501);
-		info_ctr.ctr.ctr1501 = &ctr1501;
-		break;
-	}
-
-	switch (opcode) {
-		case NDR_SRVSVC_NETSHAREENUM:
-			status = rpccli_srvsvc_NetShareEnum(cli, mem_ctx,
-							    cli->cli->desthost,
-							    &info_ctr,
-							    preferred_len,
-							    &totalentries,
-							    resume_handle_p,
-							    &result);
-			break;
-		case NDR_SRVSVC_NETSHAREENUMALL:
-			status = rpccli_srvsvc_NetShareEnumAll(cli, mem_ctx,
-							       cli->cli->desthost,
-							       &info_ctr,
-							       preferred_len,
-							       &totalentries,
-							       resume_handle_p,
-							       &result);
-			break;
-		default:
-			return WERR_INVALID_PARAM;
-	}
-
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
+	if (!W_ERROR_IS_OK(result) || !ctr.num_entries)
 		goto done;
-	}
 
 	/* Display results */
 
 	switch (info_level) {
 	case 1:
-		for (i = 0; i < totalentries; i++)
-			display_share_info_1(&info_ctr.ctr.ctr1->array[i]);
+		for (i = 0; i < ctr.num_entries; i++)
+			display_share_info_1(&ctr.share.info1[i]);
 		break;
 	case 2:
-		for (i = 0; i < totalentries; i++)
-			display_share_info_2(&info_ctr.ctr.ctr2->array[i]);
+		for (i = 0; i < ctr.num_entries; i++)
+			display_share_info_2(&ctr.share.info2[i]);
 		break;
 	case 502:
-		for (i = 0; i < totalentries; i++)
-			display_share_info_502(&info_ctr.ctr.ctr502->array[i]);
+		for (i = 0; i < ctr.num_entries; i++)
+			display_share_info_502(&ctr.share.info502[i]);
 		break;
 	default:
 		printf("unsupported info level %d\n", info_level);
@@ -384,34 +320,15 @@
 	return result;
 }
 
-static WERROR cmd_srvsvc_net_share_enum(struct rpc_pipe_client *cli,
-					TALLOC_CTX *mem_ctx,
-					int argc, const char **argv)
-{
-	return cmd_srvsvc_net_share_enum_int(cli, mem_ctx,
-					     argc, argv,
-					     NDR_SRVSVC_NETSHAREENUM);
-}
-
-static WERROR cmd_srvsvc_net_share_enum_all(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    int argc, const char **argv)
-{
-	return cmd_srvsvc_net_share_enum_int(cli, mem_ctx,
-					     argc, argv,
-					     NDR_SRVSVC_NETSHAREENUMALL);
-}
-
 static WERROR cmd_srvsvc_net_share_get_info(struct rpc_pipe_client *cli, 
 					    TALLOC_CTX *mem_ctx,
 					    int argc, const char **argv)
 {
 	uint32 info_level = 502;
-	union srvsvc_NetShareInfo info;
+	SRV_SHARE_INFO info;
 	WERROR result;
-	NTSTATUS status;
 
-	if (argc < 2 || argc > 3) {
+	if (argc > 3) {
 		printf("Usage: %s [sharename] [infolevel]\n", argv[0]);
 		return WERR_OK;
 	}
@@ -419,28 +336,22 @@
 	if (argc == 3)
 		info_level = atoi(argv[2]);
 
-	status = rpccli_srvsvc_NetShareGetInfo(cli, mem_ctx,
-					       cli->cli->desthost,
-					       argv[1],
-					       info_level,
-					       &info,
-					       &result);
+	result = rpccli_srvsvc_net_share_get_info(cli, mem_ctx, argv[1], info_level, &info);
 
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
+	if (!W_ERROR_IS_OK(result))
 		goto done;
-	}
 
 	/* Display results */
 
 	switch (info_level) {
 	case 1:
-		display_share_info_1(info.info1);
+		display_share_info_1(&info.share.info1);
 		break;
 	case 2:
-		display_share_info_2(info.info2);
+		display_share_info_2(&info.share.info2);
 		break;
 	case 502:
-		display_share_info_502(info.info502);
+		display_share_info_502(&info.share.info502);
 		break;
 	default:
 		printf("unsupported info level %d\n", info_level);
@@ -456,10 +367,8 @@
 					    int argc, const char **argv)
 {
 	uint32 info_level = 502;
-	union srvsvc_NetShareInfo info_get;
+	SRV_SHARE_INFO info_get;
 	WERROR result;
-	NTSTATUS status;
-	uint32_t parm_err = 0;
 
 	if (argc > 3) {
 		printf("Usage: %s [sharename] [comment]\n", argv[0]);
@@ -467,46 +376,27 @@
 	}
 
 	/* retrieve share info */
-	status = rpccli_srvsvc_NetShareGetInfo(cli, mem_ctx,
-					       cli->cli->desthost,
-					       argv[1],
-					       info_level,
-					       &info_get,
-					       &result);
-
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
+	result = rpccli_srvsvc_net_share_get_info(cli, mem_ctx, argv[1], info_level, &info_get);
+	if (!W_ERROR_IS_OK(result))
 		goto done;
-	}
 
-	info_get.info502->comment = argv[2];
-
+	info_get.switch_value = info_level;
+	info_get.ptr_share_ctr = 1;
+	init_unistr2(&(info_get.share.info502.info_502_str.uni_remark), argv[2], UNI_STR_TERMINATE);
+	
 	/* set share info */
-	status = rpccli_srvsvc_NetShareSetInfo(cli, mem_ctx,
-					       cli->cli->desthost,
-					       argv[1],
-					       info_level,
-					       &info_get,
-					       &parm_err,
-					       &result);
+	result = rpccli_srvsvc_net_share_set_info(cli, mem_ctx, argv[1], info_level, &info_get);
 
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
+	if (!W_ERROR_IS_OK(result))
 		goto done;
-	}
 
 	/* re-retrieve share info and display */
-	status = rpccli_srvsvc_NetShareGetInfo(cli, mem_ctx,
-					       cli->cli->desthost,
-					       argv[1],
-					       info_level,
-					       &info_get,
-					       &result);
-
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
+	result = rpccli_srvsvc_net_share_get_info(cli, mem_ctx, argv[1], info_level, &info_get);
+	if (!W_ERROR_IS_OK(result))
 		goto done;
-	}
 
-	display_share_info_502(info_get.info502);
-
+	display_share_info_502(&info_get.share.info502);
+	
  done:
 	return result;
 }
@@ -515,23 +405,18 @@
                                           TALLOC_CTX *mem_ctx,
                                           int argc, const char **argv)
 {
-	struct srvsvc_NetRemoteTODInfo *tod = NULL;
+	TIME_OF_DAY_INFO tod;
+	fstring srv_name_slash;
 	WERROR result;
-	NTSTATUS status;
 
 	if (argc > 1) {
 		printf("Usage: %s\n", argv[0]);
 		return WERR_OK;
 	}
 
-	status = rpccli_srvsvc_NetRemoteTOD(cli, mem_ctx,
-					    cli->cli->srv_name_slash,
-					    &tod,
-					    &result);
-	if (!NT_STATUS_IS_OK(status)) {
-		result = ntstatus_to_werror(status);
-		goto done;
-	}
+	fstr_sprintf(srv_name_slash, "\\\\%s", cli->cli->desthost);
+	result = rpccli_srvsvc_net_remote_tod(
+		cli, mem_ctx, srv_name_slash, &tod);
 
 	if (!W_ERROR_IS_OK(result))
 		goto done;
@@ -545,13 +430,10 @@
 					 int argc, const char **argv)
 {
 	uint32 info_level = 3;
-	struct srvsvc_NetFileInfoCtr info_ctr;
-	struct srvsvc_NetFileCtr3 ctr3;
+	SRV_FILE_INFO_CTR ctr;
 	WERROR result;
-	NTSTATUS status;
+	ENUM_HND hnd;
 	uint32 preferred_len = 0xffff;
-	uint32_t total_entries = 0;
-	uint32_t resume_handle = 0;
 
 	if (argc > 2) {
 		printf("Usage: %s [infolevel]\n", argv[0]);
@@ -561,54 +443,13 @@
 	if (argc == 2)
 		info_level = atoi(argv[1]);
 
-	ZERO_STRUCT(info_ctr);
-	ZERO_STRUCT(ctr3);
+	init_enum_hnd(&hnd, 0);
 
-	info_ctr.level = info_level;
-	info_ctr.ctr.ctr3 = &ctr3;
+	ZERO_STRUCT(ctr);
 
-	status = rpccli_srvsvc_NetFileEnum(cli, mem_ctx,
-					   cli->cli->desthost,
-					   NULL,
-					   NULL,
-					   &info_ctr,
-					   preferred_len,
-					   &total_entries,
-					   &resume_handle,
-					   &result);
+	result = rpccli_srvsvc_net_file_enum(
+		cli, mem_ctx, info_level, NULL, &ctr, preferred_len, &hnd);
 
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result))
-		goto done;
-
- done:
-	return result;
-}
-
-static WERROR cmd_srvsvc_net_name_validate(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   int argc, const char **argv)
-{
-	WERROR result;
-	NTSTATUS status;
-	uint32_t name_type = 9;
-	uint32_t flags = 0;
-
-	if (argc < 2 || argc > 3) {
-		printf("Usage: %s [sharename] [type]\n", argv[0]);
-		return WERR_OK;
-	}
-
-	if (argc == 3) {
-		name_type = atoi(argv[2]);
-	}
-
-	status = rpccli_srvsvc_NetNameValidate(cli, mem_ctx,
-					       cli->cli->desthost,
-					       argv[1],
-					       name_type,
-					       flags,
-					       &result);
-
 	if (!W_ERROR_IS_OK(result))
 		goto done;
 
@@ -616,262 +457,6 @@
 	return result;
 }
 
-static WERROR cmd_srvsvc_net_file_get_sec(struct rpc_pipe_client *cli,
-					  TALLOC_CTX *mem_ctx,
-					  int argc, const char **argv)
-{
-	WERROR result;
-	NTSTATUS status;
-	struct sec_desc_buf *sd_buf = NULL;
-
-	if (argc < 2 || argc > 4) {
-		printf("Usage: %s [sharename] [file]\n", argv[0]);
-		return WERR_OK;
-	}
-
-	status = rpccli_srvsvc_NetGetFileSecurity(cli, mem_ctx,
-						  cli->cli->desthost,
-						  argv[1],
-						  argv[2],
-						  SECINFO_DACL,
-						  &sd_buf,
-						  &result);
-
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
-		goto done;
-	}
-
-	display_sec_desc(sd_buf->sd);
-
- done:
-	return result;
-}
-
-static WERROR cmd_srvsvc_net_sess_del(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      int argc, const char **argv)
-{
-	WERROR result;
-	NTSTATUS status;
-
-	if (argc < 2 || argc > 4) {
-		printf("Usage: %s [client] [user]\n", argv[0]);
-		return WERR_OK;
-	}
-
-	status = rpccli_srvsvc_NetSessDel(cli, mem_ctx,
-					  cli->cli->desthost,
-					  argv[1],
-					  argv[2],
-					  &result);
-
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
-		goto done;
-	}
-
- done:
-	return result;
-}
-
-static WERROR cmd_srvsvc_net_sess_enum(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       int argc, const char **argv)
-{
-	WERROR result;
-	NTSTATUS status;
-	struct srvsvc_NetSessInfoCtr info_ctr;
-	struct srvsvc_NetSessCtr0 ctr0;
-	struct srvsvc_NetSessCtr1 ctr1;
-	struct srvsvc_NetSessCtr2 ctr2;
-	struct srvsvc_NetSessCtr10 ctr10;
-	struct srvsvc_NetSessCtr502 ctr502;
-	uint32_t total_entries = 0;
-	uint32_t resume_handle = 0;
-	uint32_t *resume_handle_p = NULL;
-	uint32_t level = 1;
-	const char *client = NULL;
-	const char *user = NULL;
-
-	if (argc > 6) {
-		printf("Usage: %s [client] [user] [level] [resume_handle]\n", argv[0]);
-		return WERR_OK;
-	}
-
-	if (argc >= 2) {
-		client = argv[1];
-	}
-
-	if (argc >= 3) {
-		user = argv[2];
-	}
-
-	if (argc >= 4) {
-		level = atoi(argv[3]);
-	}
-
-	if (argc >= 5) {
-		resume_handle = atoi(argv[4]);
-		resume_handle_p = &resume_handle;
-	}
-
-	ZERO_STRUCT(info_ctr);
-
-	info_ctr.level = level;
-
-	d_printf("trying level: %d\n", level);
-
-	switch (level) {
-	case 0:
-		ZERO_STRUCT(ctr0);
-		info_ctr.ctr.ctr0 = &ctr0;
-		break;
-	case 1:
-		ZERO_STRUCT(ctr1);
-		info_ctr.ctr.ctr1 = &ctr1;
-		break;
-	case 2:
-		ZERO_STRUCT(ctr2);
-		info_ctr.ctr.ctr2 = &ctr2;
-		break;
-	case 10:
-		ZERO_STRUCT(ctr10);
-		info_ctr.ctr.ctr10 = &ctr10;
-		break;
-	case 502:
-		ZERO_STRUCT(ctr502);
-		info_ctr.ctr.ctr502 = &ctr502;
-		break;
-	}
-
-	status = rpccli_srvsvc_NetSessEnum(cli, mem_ctx,
-					  cli->cli->desthost,
-					  client,
-					  user,
-					  &info_ctr,
-					  0xffffffff,
-					  &total_entries,
-					  resume_handle_p,
-					  &result);
-
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
-		goto done;
-	}
-
- done:
-	return result;
-}
-
-static WERROR cmd_srvsvc_net_disk_enum(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       int argc, const char **argv)
-{
-	struct srvsvc_NetDiskInfo info;
-	WERROR result;
-	NTSTATUS status;
-	uint32_t total_entries = 0;
-	uint32_t resume_handle = 0;
-	uint32_t level = 0;
-
-	if (argc > 4) {
-		printf("Usage: %s [level] [resume_handle]\n", argv[0]);
-		return WERR_OK;
-	}
-
-	if (argc >= 2) {
-		level = atoi(argv[1]);
-	}
-
-	if (argc >= 3) {
-		resume_handle = atoi(argv[2]);
-	}
-
-	ZERO_STRUCT(info);
-
-	status = rpccli_srvsvc_NetDiskEnum(cli, mem_ctx,
-					   cli->cli->desthost,
-					   level,
-					   &info,
-					   0xffffffff,
-					   &total_entries,
-					   &resume_handle,
-					   &result);
-
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
-		goto done;
-	}
-
- done:
-	return result;
-}
-
-static WERROR cmd_srvsvc_net_conn_enum(struct rpc_pipe_client *cli,
-				       TALLOC_CTX *mem_ctx,
-				       int argc, const char **argv)
-{
-	struct srvsvc_NetConnInfoCtr info_ctr;
-	struct srvsvc_NetConnCtr0 ctr0;
-	struct srvsvc_NetConnCtr1 ctr1;
-	WERROR result;
-	NTSTATUS status;
-	uint32_t total_entries = 0;
-	uint32_t resume_handle = 0;
-	uint32_t *resume_handle_p = NULL;
-	uint32_t level = 1;
-	const char *path = "IPC$";
-
-	if (argc > 4) {
-		printf("Usage: %s [level] [path] [resume_handle]\n", argv[0]);
-		return WERR_OK;
-	}
-
-	if (argc >= 2) {
-		level = atoi(argv[1]);
-	}
-
-	if (argc >= 3) {
-		path = argv[2];
-	}
-
-	if (argc >= 4) {
-		resume_handle = atoi(argv[3]);
-		resume_handle_p = &resume_handle;
-	}
-
-	ZERO_STRUCT(info_ctr);
-
-	info_ctr.level = level;
-
-	switch (level) {
-		case 0:
-			ZERO_STRUCT(ctr0);
-			info_ctr.ctr.ctr0 = &ctr0;
-			break;
-		case 1:
-			ZERO_STRUCT(ctr1);
-			info_ctr.ctr.ctr1 = &ctr1;
-			break;
-		default:
-			return WERR_INVALID_PARAM;
-	}
-
-	status = rpccli_srvsvc_NetConnEnum(cli, mem_ctx,
-					   cli->cli->desthost,
-					   path,
-					   &info_ctr,
-					   0xffffffff,
-					   &total_entries,
-					   resume_handle_p,
-					   &result);
-
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
-		goto done;
-	}
-
- done:
-	return result;
-}
-
-
 /* List of commands exported by this module */
 
 struct cmd_set srvsvc_commands[] = {
@@ -880,17 +465,10 @@
 
 	{ "srvinfo",     RPC_RTYPE_WERROR, NULL, cmd_srvsvc_srv_query_info, PI_SRVSVC, NULL, "Server query info", "" },
 	{ "netshareenum",RPC_RTYPE_WERROR, NULL, cmd_srvsvc_net_share_enum, PI_SRVSVC, NULL, "Enumerate shares", "" },
-	{ "netshareenumall",RPC_RTYPE_WERROR, NULL, cmd_srvsvc_net_share_enum_all, PI_SRVSVC, NULL, "Enumerate all shares", "" },
 	{ "netsharegetinfo",RPC_RTYPE_WERROR, NULL, cmd_srvsvc_net_share_get_info, PI_SRVSVC, NULL, "Get Share Info", "" },
 	{ "netsharesetinfo",RPC_RTYPE_WERROR, NULL, cmd_srvsvc_net_share_set_info, PI_SRVSVC, NULL, "Set Share Info", "" },
 	{ "netfileenum", RPC_RTYPE_WERROR, NULL, cmd_srvsvc_net_file_enum,  PI_SRVSVC, NULL, "Enumerate open files", "" },
 	{ "netremotetod",RPC_RTYPE_WERROR, NULL, cmd_srvsvc_net_remote_tod, PI_SRVSVC, NULL, "Fetch remote time of day", "" },
-	{ "netnamevalidate", RPC_RTYPE_WERROR, NULL, cmd_srvsvc_net_name_validate, PI_SRVSVC, NULL, "Validate sharename", "" },
-	{ "netfilegetsec", RPC_RTYPE_WERROR, NULL, cmd_srvsvc_net_file_get_sec, PI_SRVSVC, NULL, "Get File security", "" },
-	{ "netsessdel", RPC_RTYPE_WERROR, NULL, cmd_srvsvc_net_sess_del, PI_SRVSVC, NULL, "Delete Session", "" },
-	{ "netsessenum", RPC_RTYPE_WERROR, NULL, cmd_srvsvc_net_sess_enum, PI_SRVSVC, NULL, "Enumerate Sessions", "" },
-	{ "netdiskenum", RPC_RTYPE_WERROR, NULL, cmd_srvsvc_net_disk_enum, PI_SRVSVC, NULL, "Enumerate Disks", "" },
-	{ "netconnenum", RPC_RTYPE_WERROR, NULL, cmd_srvsvc_net_conn_enum, PI_SRVSVC, NULL, "Enumerate Connections", "" },
 
 	{ NULL }
 };

Modified: branches/samba/upstream/source/rpcclient/cmd_test.c
===================================================================
--- branches/samba/upstream/source/rpcclient/cmd_test.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpcclient/cmd_test.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -42,7 +43,7 @@
 	if (!NT_STATUS_IS_OK(status))
 		goto done;
 
-	status = rpccli_lsa_Close(lsa_pipe, mem_ctx, &pol);
+	status = rpccli_lsa_close(lsa_pipe, mem_ctx, &pol);
 
 	if (!NT_STATUS_IS_OK(status))
 		goto done;

Modified: branches/samba/upstream/source/rpcclient/cmd_wkssvc.c
===================================================================
--- branches/samba/upstream/source/rpcclient/cmd_wkssvc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpcclient/cmd_wkssvc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,171 +1,86 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
-   RPC pipe client
-
-   Copyright (C) Günther Deschner 2007
-
+   NT Domain Authentication SMB / MSRPC client
+   Copyright (C) Andrew Tridgell 1994-1997
+   Copyright (C) Luke Kenneth Casson Leighton 1996-1997
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
+THIS IS NO LONGER USED - NEEDS REMOVAL.
+
 #include "includes.h"
-#include "rpcclient.h"
 
-static WERROR cmd_wkssvc_wkstagetinfo(struct rpc_pipe_client *cli,
-				      TALLOC_CTX *mem_ctx,
-				      int argc,
-				      const char **argv)
-{
-	NTSTATUS status;
-	WERROR werr;
-	uint32_t level = 100;
-	union wkssvc_NetWkstaInfo info;
-	const char *server_name;
+#define DEBUG_TESTING
 
-	if (argc > 2) {
-		printf("usage: %s <level>\n", argv[0]);
-		return WERR_OK;
-	}
+extern struct cli_state *smb_cli;
 
-	if (argc > 1) {
-		level = atoi(argv[1]);
-	}
+extern FILE* out_hnd;
 
-	server_name = cli->cli->desthost;
 
-	status = rpccli_wkssvc_NetWkstaGetInfo(cli, mem_ctx,
-					       server_name,
-					       level,
-					       &info,
-					       &werr);
-	if (!NT_STATUS_IS_OK(status)) {
-		return ntstatus_to_werror(status);
-	}
-
-	return werr;
-}
-
-static WERROR cmd_wkssvc_getjoininformation(struct rpc_pipe_client *cli,
-					    TALLOC_CTX *mem_ctx,
-					    int argc,
-					    const char **argv)
+/****************************************************************************
+workstation get info query
+****************************************************************************/
+void cmd_wks_query_info(struct client_info *info)
 {
-	const char *server_name;
-	const char *name_buffer;
-	enum wkssvc_NetJoinStatus name_type;
-	NTSTATUS status;
-	WERROR werr;
+	fstring dest_wks;
+	fstring tmp;
+	WKS_INFO_100 ctr;
+	uint32 info_level = 100;
 
-	server_name = cli->cli->desthost;
-	name_buffer = "";
+	BOOL res = True;
 
-	status = rpccli_wkssvc_NetrGetJoinInformation(cli, mem_ctx,
-						      server_name,
-						      &name_buffer,
-						      &name_type,
-						      &werr);
-	if (!NT_STATUS_IS_OK(status)) {
-		return ntstatus_to_werror(status);
-	}
+	memset((char *)&ctr, '\0', sizeof(ctr));
 
-	if (W_ERROR_IS_OK(werr)) {
-		printf("%s (%d)\n", name_buffer, name_type);
-	}
+	fstrcpy(dest_wks, "\\\\");
+	fstrcat(dest_wks, info->dest_host);
+	strupper_m(dest_wks);
 
-	return werr;
-}
-
-static WERROR cmd_wkssvc_messagebuffersend(struct rpc_pipe_client *cli,
-					   TALLOC_CTX *mem_ctx,
-					   int argc,
-					   const char **argv)
-{
-	const char *server_name = cli->cli->desthost;
-	const char *message_name = cli->cli->desthost;
-	const char *message_sender_name = cli->cli->desthost;
-	smb_ucs2_t *message_buffer = NULL;
-	size_t message_size = 0;
-	const char *message = "my message";
-	NTSTATUS status;
-	WERROR werr;
-
-	if (argc > 1) {
-		message = argv[1];
+	if (next_token_nr(NULL, tmp, NULL, sizeof(tmp)))
+	{
+		info_level = (uint32)strtol(tmp, (char**)NULL, 10);
 	}
 
-	message_size = push_ucs2_talloc(mem_ctx,
-					&message_buffer,
-					message);
-	if (message_size == -1) {
-		return WERR_NOMEM;
-	}
+	DEBUG(4,("cmd_wks_query_info: server:%s info level: %d\n",
+				dest_wks, info_level));
 
-	status = rpccli_wkssvc_NetrMessageBufferSend(cli, mem_ctx,
-						     server_name,
-						     message_name,
-						     message_sender_name,
-						     (uint8_t *)message_buffer,
-						     message_size,
-						     &werr);
-	if (!NT_STATUS_IS_OK(status)) {
-		return ntstatus_to_werror(status);
-	}
+	DEBUG(5, ("cmd_wks_query_info: smb_cli->fd:%d\n", smb_cli->fd));
 
-	return werr;
-}
+	/* open LSARPC session. */
+	res = res ? cli_nt_session_open(smb_cli, PI_WKSSVC) : False;
 
-static WERROR cmd_wkssvc_enumeratecomputernames(struct rpc_pipe_client *cli,
-						TALLOC_CTX *mem_ctx,
-						int argc,
-						const char **argv)
-{
-	const char *server_name;
-	enum wkssvc_ComputerNameType name_type = NetAllComputerNames;
-	NTSTATUS status;
-	struct wkssvc_ComputerNamesCtr *ctr = NULL;
-	WERROR werr;
+	/* send info level: receive requested info.  hopefully. */
+	res = res ? do_wks_query_info(smb_cli, 
+				dest_wks, info_level, &ctr) : False;
 
-	server_name = cli->cli->desthost;
+	/* close the session */
+	cli_nt_session_close(smb_cli);
 
-	if (argc >= 2) {
-		name_type = atoi(argv[1]);
-	}
+	if (res)
+	{
+		DEBUG(5,("cmd_wks_query_info: query succeeded\n"));
 
-	status = rpccli_wkssvc_NetrEnumerateComputerNames(cli, mem_ctx,
-							  server_name,
-							  name_type, 0,
-							  &ctr,
-							  &werr);
-	if (!NT_STATUS_IS_OK(status)) {
-		return ntstatus_to_werror(status);
-	}
+#if 0
+		display_wks_info_100(out_hnd, ACTION_HEADER   , &ctr);
+		display_wks_info_100(out_hnd, ACTION_ENUMERATE, &ctr);
+		display_wks_info_100(out_hnd, ACTION_FOOTER   , &ctr);
+#endif
 
-	if (W_ERROR_IS_OK(werr)) {
-		int i=0;
-		for (i = 0; i < ctr->count; i++) {
-			printf("name: %d %s\n", i, ctr->computer_name->string);
-		}
 	}
-
-	return werr;
+	else
+	{
+		DEBUG(5,("cmd_wks_query_info: query failed\n"));
+	}
 }
-
-struct cmd_set wkssvc_commands[] = {
-
-	{ "WKSSVC" },
-	{ "wkssvc_wkstagetinfo", RPC_RTYPE_WERROR, NULL, cmd_wkssvc_wkstagetinfo, PI_WKSSVC, NULL, "Query WKSSVC Workstation Information", "" },
-	{ "wkssvc_getjoininformation", RPC_RTYPE_WERROR, NULL, cmd_wkssvc_getjoininformation, PI_WKSSVC, NULL, "Query WKSSVC Join Information", "" },
-	{ "wkssvc_messagebuffersend", RPC_RTYPE_WERROR, NULL, cmd_wkssvc_messagebuffersend, PI_WKSSVC, NULL, "Send WKSSVC message", "" },
-	{ "wkssvc_enumeratecomputernames", RPC_RTYPE_WERROR, NULL, cmd_wkssvc_enumeratecomputernames, PI_WKSSVC, NULL, "Enumerate WKSSVC computer names", "" },
-	{ NULL }
-};

Modified: branches/samba/upstream/source/rpcclient/rpcclient.c
===================================================================
--- branches/samba/upstream/source/rpcclient/rpcclient.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpcclient/rpcclient.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -26,7 +27,6 @@
 
 static enum pipe_auth_type pipe_default_auth_type = PIPE_AUTH_TYPE_NONE;
 static enum pipe_auth_level pipe_default_auth_level = PIPE_AUTH_LEVEL_NONE;
-static unsigned int timeout = 0;
 
 /* List to hold groups of commands.
  *
@@ -133,10 +133,12 @@
 {
 	POLICY_HND pol;
 	NTSTATUS result = NT_STATUS_OK;
-	static bool got_domain_sid;
+	uint32 info_class = 5;
+	char *domain_name = NULL;
+	static BOOL got_domain_sid;
 	TALLOC_CTX *mem_ctx;
+	DOM_SID *dom_sid = NULL;
 	struct rpc_pipe_client *lsapipe = NULL;
-	union lsa_PolicyInformation *info = NULL;
 
 	if (got_domain_sid) return;
 
@@ -157,18 +159,16 @@
 		goto error;
 	}
 
-	result = rpccli_lsa_QueryInfoPolicy(lsapipe, mem_ctx,
-					    &pol,
-					    LSA_POLICY_INFO_ACCOUNT_DOMAIN,
-					    &info);
+	result = rpccli_lsa_query_info_policy(lsapipe, mem_ctx, &pol, info_class, 
+					   &domain_name, &dom_sid);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto error;
 	}
 
 	got_domain_sid = True;
-	sid_copy(&domain_sid, info->account_domain.sid);
+	sid_copy( &domain_sid, dom_sid );
 
-	rpccli_lsa_Close(lsapipe, mem_ctx, &pol);
+	rpccli_lsa_close(lsapipe, mem_ctx, &pol);
 	cli_rpc_pipe_close(lsapipe);
 	talloc_destroy(mem_ctx);
 
@@ -398,39 +398,6 @@
 	return cmd_set_ss_level();
 }
 
-static NTSTATUS cmd_timeout(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
-			    int argc, const char **argv)
-{
-	struct cmd_list *tmp;
-
-	if (argc > 2) {
-		printf("Usage: %s timeout\n", argv[0]);
-		return NT_STATUS_OK;
-	}
-
-	if (argc == 2) {
-		timeout = atoi(argv[1]);
-
-		for (tmp = cmd_list; tmp; tmp = tmp->next) {
-			
-			struct cmd_set *tmp_set;
-
-			for (tmp_set = tmp->cmd_set; tmp_set->name; tmp_set++) {
-				if (tmp_set->rpc_pipe == NULL) {
-					continue;
-				}
-
-				cli_set_timeout(tmp_set->rpc_pipe->cli, timeout);
-			}
-		}
-	}
-
-	printf("timeout is %d\n", timeout);
-
-	return NT_STATUS_OK;
-}
-
-
 static NTSTATUS cmd_none(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
                          int argc, const char **argv)
 {
@@ -470,7 +437,6 @@
 	{ "help", RPC_RTYPE_NTSTATUS, cmd_help, NULL, 	  -1, NULL,	"Get help on commands", "[command]" },
 	{ "?", 	RPC_RTYPE_NTSTATUS, cmd_help, NULL,	  -1, NULL,	"Get help on commands", "[command]" },
 	{ "debuglevel", RPC_RTYPE_NTSTATUS, cmd_debuglevel, NULL,   -1,	NULL, "Set debug level", "level" },
-	{ "debug", RPC_RTYPE_NTSTATUS, cmd_debuglevel, NULL,   -1,	NULL, "Set debug level", "level" },
 	{ "list",	RPC_RTYPE_NTSTATUS, cmd_listcommands, NULL, -1,	NULL, "List available commands on <pipe>", "pipe" },
 	{ "exit", RPC_RTYPE_NTSTATUS, cmd_quit, NULL,   -1,	NULL,	"Exit program", "" },
 	{ "quit", RPC_RTYPE_NTSTATUS, cmd_quit, NULL,	  -1,	NULL, "Exit program", "" },
@@ -478,7 +444,6 @@
 	{ "seal", RPC_RTYPE_NTSTATUS, cmd_seal, NULL,	  -1,	NULL, "Force RPC pipe connections to be sealed", "" },
 	{ "schannel", RPC_RTYPE_NTSTATUS, cmd_schannel, NULL,	  -1, NULL,	"Force RPC pipe connections to be sealed with 'schannel'.  Assumes valid machine account to this domain controller.", "" },
 	{ "schannelsign", RPC_RTYPE_NTSTATUS, cmd_schannel_sign, NULL,	  -1, NULL, "Force RPC pipe connections to be signed (not sealed) with 'schannel'.  Assumes valid machine account to this domain controller.", "" },
-	{ "timeout", RPC_RTYPE_NTSTATUS, cmd_timeout, NULL,	  -1, NULL, "Set timeout (in milliseonds) for RPC operations", "" },
 	{ "none", RPC_RTYPE_NTSTATUS, cmd_none, NULL,	  -1, NULL, "Force RPC pipe connections to have no special properties", "" },
 
 	{ NULL }
@@ -502,8 +467,6 @@
 extern struct cmd_set echo_commands[];
 extern struct cmd_set shutdown_commands[];
 extern struct cmd_set test_commands[];
-extern struct cmd_set wkssvc_commands[];
-extern struct cmd_set ntsvcs_commands[];
 
 static struct cmd_set *rpcclient_command_list[] = {
 	rpcclient_commands,
@@ -517,8 +480,6 @@
 	echo_commands,
 	shutdown_commands,
  	test_commands,
-	wkssvc_commands,
-	ntsvcs_commands,
 	NULL
 };
 
@@ -573,8 +534,8 @@
 								cmd_entry->pipe_idx,
 								pipe_default_auth_level,
 								lp_workgroup(),
-								get_cmdline_auth_info_username(),
-								get_cmdline_auth_info_password(),
+								cmdline_auth_info.username,
+								cmdline_auth_info.password,
 								&ntresult);
 				break;
 			case PIPE_AUTH_TYPE_NTLMSSP:
@@ -582,8 +543,8 @@
 								cmd_entry->pipe_idx,
 								pipe_default_auth_level,
 								lp_workgroup(),
-								get_cmdline_auth_info_username(),
-								get_cmdline_auth_info_password(),
+								cmdline_auth_info.username,
+								cmdline_auth_info.password,
 								&ntresult);
 				break;
 			case PIPE_AUTH_TYPE_SCHANNEL:
@@ -713,7 +674,7 @@
 	 * enough to release it -- we don't free the
 	 * individual strings.  rtfm. */
 	free(argv);
-
+	
 	return result;
 }
 
@@ -725,16 +686,13 @@
 	int 			opt;
 	static char		*cmdstr = NULL;
 	const char *server;
-	struct cli_state	*cli = NULL;
+	struct cli_state	*cli;
 	static char 		*opt_ipaddr=NULL;
 	struct cmd_set 		**cmd_set;
-	struct sockaddr_storage server_ss;
+	struct in_addr 		server_ip;
 	NTSTATUS 		nt_status;
 	static int		opt_port = 0;
 	fstring new_workgroup;
-	int result = 0;
-	TALLOC_CTX *frame = talloc_stackframe();
-	uint32_t flags = 0;
 
 	/* make sure the vars that get altered (4th field) are in
 	   a fixed location or certain compilers complain */
@@ -752,14 +710,14 @@
 
 	load_case_tables();
 
-	zero_addr(&server_ss);
+	ZERO_STRUCT(server_ip);
 
 	setlinebuf(stdout);
 
 	/* the following functions are part of the Samba debugging
 	   facilities.  See lib/debug.c */
 	setup_logging("rpcclient", True);
-
+	
 	/* Parse options */
 
 	pc = poptGetContext("rpcclient", argc, (const char **) argv,
@@ -767,20 +725,17 @@
 
 	if (argc == 1) {
 		poptPrintHelp(pc, stderr, 0);
-		goto done;
+		return 0;
 	}
-
+	
 	while((opt = poptGetNextOpt(pc)) != -1) {
 		switch (opt) {
 
 		case 'I':
-			if (!interpret_string_addr(&server_ss,
-						opt_ipaddr,
-						AI_NUMERICHOST)) {
+		        if ( (server_ip.s_addr=inet_addr(opt_ipaddr)) == INADDR_NONE ) {
 				fprintf(stderr, "%s not a valid IP address\n",
 					opt_ipaddr);
-				result = 1;
-				goto done;
+				return 1;
 			}
 		}
 	}
@@ -789,34 +744,31 @@
 	   than one unparsed argument is present. */
 
 	server = poptGetArg(pc);
-
+	
 	if (!server || poptGetArg(pc)) {
 		poptPrintHelp(pc, stderr, 0);
-		result = 1;
-		goto done;
+		return 1;
 	}
 
 	poptFreeContext(pc);
 
 	load_interfaces();
 
-	if (!init_names()) {
-		result = 1;
-		goto done;
-	}
+	if (!init_names())
+		return 1;
 
 	/* save the workgroup...
-
-	   FIXME!! do we need to do this for other options as well
-	   (or maybe a generic way to keep lp_load() from overwriting
+	
+	   FIXME!! do we need to do this for other options as well 
+	   (or maybe a generic way to keep lp_load() from overwriting 
 	   everything)?  */
-
+	
 	fstrcpy( new_workgroup, lp_workgroup() );
 
 	/* Load smb.conf file */
 
-	if (!lp_load(get_dyn_CONFIGFILE(),True,False,False,True))
-		fprintf(stderr, "Can't load %s\n", get_dyn_CONFIGFILE());
+	if (!lp_load(dyn_CONFIGFILE,True,False,False,True))
+		fprintf(stderr, "Can't load %s\n", dyn_CONFIGFILE);
 
 	if ( strlen(new_workgroup) != 0 )
 		set_global_myworkgroup( new_workgroup );
@@ -826,65 +778,38 @@
 	 * from stdin if necessary
 	 */
 
-	if (get_cmdline_auth_info_use_machine_account() &&
-	    !set_cmdline_auth_info_machine_account_creds()) {
-		result = 1;
-		goto done;
-	}
-
-	if (!get_cmdline_auth_info_got_pass()) {
+	if (!cmdline_auth_info.got_pass) {
 		char *pass = getpass("Password:");
 		if (pass) {
-			set_cmdline_auth_info_password(pass);
+			pstrcpy(cmdline_auth_info.password, pass);
 		}
 	}
-
+	
 	if ((server[0] == '/' && server[1] == '/') ||
 			(server[0] == '\\' && server[1] ==  '\\')) {
 		server += 2;
 	}
 
-	if (get_cmdline_auth_info_use_kerberos()) {
-		flags |= CLI_FULL_CONNECTION_USE_KERBEROS |
-			 CLI_FULL_CONNECTION_FALLBACK_AFTER_KERBEROS;
-	}
-
-
-	nt_status = cli_full_connection(&cli, global_myname(), server,
-					opt_ipaddr ? &server_ss : NULL, opt_port,
-					"IPC$", "IPC",
-					get_cmdline_auth_info_username(),
+	nt_status = cli_full_connection(&cli, global_myname(), server, 
+					opt_ipaddr ? &server_ip : NULL, opt_port,
+					"IPC$", "IPC",  
+					cmdline_auth_info.username, 
 					lp_workgroup(),
-					get_cmdline_auth_info_password(),
-					flags,
-					get_cmdline_auth_info_signing_state(),NULL);
-
+					cmdline_auth_info.password, 
+					cmdline_auth_info.use_kerberos ? CLI_FULL_CONNECTION_USE_KERBEROS : 0,
+					cmdline_auth_info.signing_state,NULL);
+	
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		DEBUG(0,("Cannot connect to server.  Error was %s\n", nt_errstr(nt_status)));
-		result = 1;
-		goto done;
+		return 1;
 	}
 
-	if (get_cmdline_auth_info_smb_encrypt()) {
-		nt_status = cli_cm_force_encryption(cli,
-					get_cmdline_auth_info_username(),
-					get_cmdline_auth_info_password(),
-					lp_workgroup(),
-					"IPC$");
-		if (!NT_STATUS_IS_OK(nt_status)) {
-			result = 1;
-			goto done;
-		}
-	}
-
 #if 0	/* COMMENT OUT FOR TESTING */
 	memset(cmdline_auth_info.password,'X',sizeof(cmdline_auth_info.password));
 #endif
 
 	/* Load command lists */
 
-	timeout = cli_set_timeout(cli, 10000);
-
 	cmd_set = rpcclient_command_list;
 
 	while(*cmd_set) {
@@ -894,42 +819,40 @@
 	}
 
 	fetch_machine_sid(cli);
-
+ 
        /* Do anything specified with -c */
         if (cmdstr && cmdstr[0]) {
                 char    *cmd;
                 char    *p = cmdstr;
-
-		result = 0;
-
+		int result = 0;
+ 
                 while((cmd=next_command(&p)) != NULL) {
                         NTSTATUS cmd_result = process_cmd(cli, cmd);
 			SAFE_FREE(cmd);
 			result = NT_STATUS_IS_ERR(cmd_result);
                 }
-
-		goto done;
+		
+		cli_shutdown(cli);
+                return result;
         }
 
 	/* Loop around accepting commands */
 
 	while(1) {
-		char *line = NULL;
+		pstring prompt;
+		char *line;
 
-		line = smb_readline("rpcclient $> ", NULL, completion_fn);
+		slprintf(prompt, sizeof(prompt) - 1, "rpcclient $> ");
 
+		line = smb_readline(prompt, NULL, completion_fn);
+
 		if (line == NULL)
 			break;
 
 		if (line[0] != '\n')
 			process_cmd(cli, line);
-		SAFE_FREE(line);
 	}
-
-done:
-	if (cli != NULL) {
-		cli_shutdown(cli);
-	}
-	TALLOC_FREE(frame);
-	return result;
+	
+	cli_shutdown(cli);
+	return 0;
 }

Modified: branches/samba/upstream/source/rpcclient/rpcclient.h
===================================================================
--- branches/samba/upstream/source/rpcclient/rpcclient.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/rpcclient/rpcclient.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef RPCCLIENT_H

Deleted: branches/samba/upstream/source/script/build_idl.sh
===================================================================
--- branches/samba/upstream/source/script/build_idl.sh	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/build_idl.sh	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,47 +0,0 @@
-#!/bin/sh
-
-PIDL_ARGS="--outputdir librpc/gen_ndr --header --ndr-parser --samba3-ndr-server --samba3-ndr-client --"
-PIDL_EXTRA_ARGS="$*"
-
-oldpwd=`pwd`
-cd ${srcdir}
-
-[ -d librpc/gen_ndr ] || mkdir -p librpc/gen_ndr || exit 1
-
-if [ -z "$PIDL" ] ; then
-    PIDL=pidl
-fi
-
-PIDL="$PIDL ${PIDL_ARGS} ${PIDL_EXTRA_ARGS}"
-
-##
-## Find newer files rather than rebuild all of them
-##
-
-list=""
-for f in ${IDL_FILES}; do
-	basename=`basename $f .idl`
-	ndr="librpc/gen_ndr/ndr_$basename.c"
-
-	if [ -f $ndr ] && false; then
-		if [ "x`find librpc/idl/$f -newer $ndr -print`" = "xlibrpc/idl/$f" ]; then
-			list="$list librpc/idl/$f"
-		fi
-	else 
-		list="$list librpc/idl/$f"
-	fi
-done
-
-##
-## generate the ndr stubs
-##
-
-if [ "x$list" != x ]; then
-	# echo "${PIDL} ${list}"
-	$PIDL $list || exit 1
-fi
-
-cd ${oldpwd}
-
-exit 0
-

Deleted: branches/samba/upstream/source/script/count_80_col.pl
===================================================================
--- branches/samba/upstream/source/script/count_80_col.pl	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/count_80_col.pl	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,16 +0,0 @@
-#!/usr/bin/perl -w
-
-open( INFILE, "$ARGV[0]" ) || die $@;
-
-$count = 0;
-while ( <INFILE> ) {
-	next if ($_ =~ /^#define/);
-	$count++ if (length($_) > 80);
-}
-
-close( INFILE );
-print "$ARGV[0]: $count lines > 80 characters\n" if ($count > 0);
-
-exit( 0 );
-
-

Deleted: branches/samba/upstream/source/script/fix_bool.pl
===================================================================
--- branches/samba/upstream/source/script/fix_bool.pl	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/fix_bool.pl	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,19 +0,0 @@
-#!/usr/bin/perl -w
-
-open(INFILE, "$ARGV[0]") || die $@;
-open(OUTFILE, ">$ARGV[0].new") || die $@;
-
-while (<INFILE>) {
-	$_ =~ s/True/true/;
-	$_ =~ s/False/false/;
-	print OUTFILE "$_";
-}
-
-close(INFILE);
-close(OUTFILE);
-
-rename("$ARGV[0].new", "$ARGV[0]") || die @_;
-
-exit(0);
-
-

Deleted: branches/samba/upstream/source/script/format_indent.sh
===================================================================
--- branches/samba/upstream/source/script/format_indent.sh	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/format_indent.sh	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-# -npro	Do no read the '.indent.pro' files.
-# -kr	Use K&R formatting rules
-# -i8	Set indentation level to 8 spaces.
-# -ts8	Set tab size to 8 spaces
-# -sob	Swallow optional blank lines.
-# -l80	Set the maximum line length at 80 characters.
-# -ss	On one-line for and while statments, force a blank before the semicolon
-# -ncs	Do not put a space after cast operators.
-
-indent -npro -kr -i8 -ts8 -sob -l80 -ss -ncs "$@"

Modified: branches/samba/upstream/source/script/gen-8bit-gap.sh.in
===================================================================
--- branches/samba/upstream/source/script/gen-8bit-gap.sh.in	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/gen-8bit-gap.sh.in	2008-06-15 01:55:18 UTC (rev 1953)
@@ -15,7 +15,7 @@
 echo " * "
 echo " * This program is free software; you can redistribute it and/or modify "
 echo " * it under the terms of the GNU General Public License as published by "
-echo " * the Free Software Foundation; either version 3 of the License, or "
+echo " * the Free Software Foundation; either version 2 of the License, or "
 echo " * (at your option) any later version. "
 echo " *  "
 echo " * This program is distributed in the hope that it will be useful,"
@@ -24,7 +24,8 @@
 echo " * GNU General Public License for more details. "
 echo " *  "
 echo " * You should have received a copy of the GNU General Public License "
-echo " * along with this program; if not, see <http://www.gnu.org/licenses/>."
+echo " * along with this program; if not, write to the Free Software "
+echo " * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. "
 echo " */"
 
 echo '#include "includes.h"'

Modified: branches/samba/upstream/source/script/installbin.sh.in
===================================================================
--- branches/samba/upstream/source/script/installbin.sh.in	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/installbin.sh.in	2008-06-15 01:55:18 UTC (rev 1953)
@@ -19,6 +19,15 @@
  fi
  cp $p $DESTDIR/$BINDIR/
  chmod $INSTALLPERMS $DESTDIR/$BINDIR/$p2
+
+ # this is a special case, mount needs this in a specific location
+ if [ $p2 = smbmount ]; then
+   if [ ! -d $DESTDIR/@rootsbindir@ ]; then
+      mkdir $DESTDIR/@rootsbindir@
+   fi
+   echo "Creating sym link $DESTDIR/@rootsbindir@/mount.smbfs to $BINDIR/$p2 "
+   ln -sf $BINDIR/$p2 $DESTDIR/@rootsbindir@/mount.smbfs
+ fi
 done
 
 

Modified: branches/samba/upstream/source/script/installman.sh
===================================================================
--- branches/samba/upstream/source/script/installman.sh	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/installman.sh	2008-06-15 01:55:18 UTC (rev 1953)
@@ -49,6 +49,7 @@
 	    # Check if this man page if required by the configured feature set
 	    case "${MP_BASENAME}" in
 	    	smbsh.1) test -z "${SMBWRAPPER}" && continue ;;
+		smbmnt.8|smbmount.8|smbumount.8) test -z "${SMBMOUNT_PROGS}" && continue ;;
 		*) ;;
 	    esac
 

Modified: branches/samba/upstream/source/script/installmodules.sh
===================================================================
--- branches/samba/upstream/source/script/installmodules.sh	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/installmodules.sh	2008-06-15 01:55:18 UTC (rev 1953)
@@ -19,19 +19,11 @@
 fi
 done
 
-# We expect the last component of LIBDIR to be the module type, eg. idmap,
-# pdb. By stripping this from the installation name, you can have multiple
-# modules of the same name but different types by creating eg. idmap_foo
-# and pdb_foo. This makes the most sense for idmap and pdb module, where
-# they need to be consistent.
-mtype=`basename $LIBDIR`
-
 for p in $*; do
  p2=`basename $p`
- name=`echo $p2 | sed -es/${mtype}_//`
- echo Installing $p as $DESTDIR/$LIBDIR/$name
- cp -f $p $DESTDIR/$LIBDIR/$name
- chmod $INSTALLPERMS $DESTDIR/$LIBDIR/$name
+ echo Installing $p as $DESTDIR/$LIBDIR/$p2
+ cp -f $p $DESTDIR/$LIBDIR/
+ chmod $INSTALLPERMS $DESTDIR/$LIBDIR/$p2
 done
 
 exit 0

Modified: branches/samba/upstream/source/script/installswat.sh
===================================================================
--- branches/samba/upstream/source/script/installswat.sh	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/installswat.sh	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,13 +10,13 @@
 	*uninstall*)
 		echo "Removing SWAT from $DESTDIR/$SWATDIR "
 		echo "Removing the Samba Web Administration Tool "
-		printf "%s" "Removed "
+		echo -n "Removed "
 		mode='uninstall'
 		;;
 	*)
 		echo "Installing SWAT in $DESTDIR/$SWATDIR "
 		echo "Installing the Samba Web Administration Tool "
-		printf "%s" "Installing "
+		echo -n "Installing "
 		mode='install'
 		;;
 esac

Modified: branches/samba/upstream/source/script/mkbuildoptions.awk
===================================================================
--- branches/samba/upstream/source/script/mkbuildoptions.awk	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/mkbuildoptions.awk	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 	print "   ";
 	print "   This program is free software; you can redistribute it and/or modify";
 	print "   it under the terms of the GNU General Public License as published by";
-	print "   the Free Software Foundation; either version 3 of the License, or";
+	print "   the Free Software Foundation; either version 2 of the License, or";
 	print "   (at your option) any later version.";
 	print "   ";
 	print "   This program is distributed in the hope that it will be useful,";
@@ -16,21 +16,22 @@
 	print "   GNU General Public License for more details.";
 	print "   ";
 	print "   You should have received a copy of the GNU General Public License";
-	print "   along with this program; if not, see <http://www.gnu.org/licenses/>."
+	print "   along with this program; if not, write to the Free Software";
+	print "   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.";
 	print "*/";
 	print "";
 	print "#include \"includes.h\"";
 	print "#include \"build_env.h\"";
 	print "#include \"dynconfig.h\"";
 	print "";
-	print "static void output(bool screen, const char *format, ...) PRINTF_ATTRIBUTE(2,3);";
-	print "void build_options(bool screen);";
+	print "static void output(BOOL screen, const char *format, ...) PRINTF_ATTRIBUTE(2,3);";
+	print "void build_options(BOOL screen);";
 	print "";
 	print "";
 	print "/****************************************************************************";
 	print "helper function for build_options";
 	print "****************************************************************************/";
-	print "static void output(bool screen, const char *format, ...)";
+	print "static void output(BOOL screen, const char *format, ...)";
 	print "{";
 	print "       char *ptr;";
 	print "       va_list ap;";
@@ -51,7 +52,7 @@
 	print "/****************************************************************************";
 	print "options set at build time for the samba suite";
 	print "****************************************************************************/";
-	print "void build_options(bool screen)";
+	print "void build_options(BOOL screen)";
 	print "{";
 	print "       if ((DEBUGLEVEL < 4) && (!screen)) {";
 	print "	       return;";
@@ -75,22 +76,22 @@
 	print "       /* Output various paths to files and directories */";
 	print "       output(screen,\"\\nPaths:\\n\");";
 
-	print "       output(screen,\"   SBINDIR: %s\\n\", get_dyn_SBINDIR());";
-	print "       output(screen,\"   BINDIR: %s\\n\", get_dyn_BINDIR());";
-	print "       output(screen,\"   SWATDIR: %s\\n\", get_dyn_SWATDIR());";
+	print "       output(screen,\"   SBINDIR: %s\\n\", dyn_SBINDIR);";
+	print "       output(screen,\"   BINDIR: %s\\n\", dyn_BINDIR);";
+	print "       output(screen,\"   SWATDIR: %s\\n\", dyn_SWATDIR);";
 
-	print "       output(screen,\"   CONFIGFILE: %s\\n\", get_dyn_CONFIGFILE());";
-	print "       output(screen,\"   LOGFILEBASE: %s\\n\", get_dyn_LOGFILEBASE());";
-	print "       output(screen,\"   LMHOSTSFILE: %s\\n\",get_dyn_LMHOSTSFILE());";
+	print "       output(screen,\"   CONFIGFILE: %s\\n\", dyn_CONFIGFILE);";
+	print "       output(screen,\"   LOGFILEBASE: %s\\n\", dyn_LOGFILEBASE);";
+	print "       output(screen,\"   LMHOSTSFILE: %s\\n\",dyn_LMHOSTSFILE);";
 
-	print "       output(screen,\"   LIBDIR: %s\\n\",get_dyn_LIBDIR());";
-	print "       output(screen,\"   SHLIBEXT: %s\\n\",get_dyn_SHLIBEXT());";
+	print "       output(screen,\"   LIBDIR: %s\\n\",dyn_LIBDIR);";
+	print "       output(screen,\"   SHLIBEXT: %s\\n\",dyn_SHLIBEXT);";
 
-	print "       output(screen,\"   LOCKDIR: %s\\n\",get_dyn_LOCKDIR());";
-	print "       output(screen,\"   PIDDIR: %s\\n\", get_dyn_PIDDIR());";
+	print "       output(screen,\"   LOCKDIR: %s\\n\",dyn_LOCKDIR);";
+	print "       output(screen,\"   PIDDIR: %s\\n\", dyn_PIDDIR);";
 
-	print "       output(screen,\"   SMB_PASSWD_FILE: %s\\n\",get_dyn_SMB_PASSWD_FILE());";
-	print "       output(screen,\"   PRIVATE_DIR: %s\\n\",get_dyn_PRIVATE_DIR());";
+	print "       output(screen,\"   SMB_PASSWD_FILE: %s\\n\",dyn_SMB_PASSWD_FILE);";
+	print "       output(screen,\"   PRIVATE_DIR: %s\\n\",dyn_PRIVATE_DIR);";
 	print "";
 
 

Modified: branches/samba/upstream/source/script/mkproto.awk
===================================================================
--- branches/samba/upstream/source/script/mkproto.awk	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/mkproto.awk	2008-06-15 01:55:18 UTC (rev 1953)
@@ -45,12 +45,12 @@
 
 /^FN_LOCAL_BOOL/ {
   split($0,a,"[,()]")
-  printf "bool %s(int );\n", a[2]
+  printf "BOOL %s(int );\n", a[2]
 }
 
 /^FN_LOCAL_PARM_BOOL/ {
   split($0,a,"[,()]")
-  printf "bool %s(const struct share_params *p );\n", a[2]
+  printf "BOOL %s(const struct share_params *p );\n", a[2]
 }
 
 /^FN_LOCAL_PARM_INTEGER/ {
@@ -90,7 +90,7 @@
 
 /^FN_GLOBAL_BOOL/ {
   split($0,a,"[,()]")
-  printf "bool %s(void);\n", a[2]
+  printf "BOOL %s(void);\n", a[2]
 }
 
 /^FN_GLOBAL_LIST/ {
@@ -113,7 +113,7 @@
   printf "int %s(void);\n", a[2]
 }
 
-/^static|^extern/ || !/^[a-zA-Z\_]/ || /[;]/ {
+/^static|^extern/ || !/^[a-zA-Z]/ || /[;]/ {
   next;
 }
 
@@ -139,11 +139,11 @@
     gotstart = 1;
   }
 
-  if( $0 ~ /^smb_iconv_t|^long|^char|^uint|^NTSTATUS|^WERROR|^CLI_POLICY_HND|^struct|^bool|^void|^time|^smb_shm_offset_t|^shm_offset_t|^FILE|^XFILE|^SMB_OFF_T|^size_t|^ssize_t|^SMB_BIG_UINT|^SMB_BIG_INT/ ) {
+  if( $0 ~ /^smb_iconv_t|^long|^char|^uint|^NTSTATUS|^WERROR|^CLI_POLICY_HND|^struct|^BOOL|^void|^time|^smb_shm_offset_t|^shm_offset_t|^FILE|^XFILE|^SMB_OFF_T|^size_t|^ssize_t|^SMB_BIG_UINT|^SMB_BIG_INT/ ) {
     gotstart = 1;
   }
 
-  if( $0 ~ /^SAM_ACCT_INFO_NODE|^SMB_ACL_T|^ADS_MODLIST|^PyObject|^SORTED_TREE|^REGISTRY_HOOK|^REGISTRY_OPS|^REGISTRY_VALUE|^REGVAL_CTR|^DEVICEMODE|^PAC_DATA|^NET_USER_INFO_3|^smb_event_id_t/ ) {
+  if( $0 ~ /^SAM_ACCT_INFO_NODE|^SMB_ACL_T|^ADS_MODLIST|^PyObject|^SORTED_TREE|^REGISTRY_HOOK|^REGISTRY_VALUE|^REGVAL_CTR|^DEVICEMODE|^PAC_DATA|^NET_USER_INFO_3|^smb_event_id_t/ ) {
     gotstart = 1;
   }
 
@@ -151,7 +151,7 @@
     gotstart = 1;
   }
 
-  if( $0 ~ /^NODE_STATUS_STRUCT|^SMB_STRUCT_DIR|^ELOG_TDB|^codepoint_t|^_PUBLIC_|^wbcErr/ ) {
+  if( $0 ~ /^NODE_STATUS_STRUCT|SMB_STRUCT_DIR|ELOG_TDB|codepoint_t/ ) {
     gotstart = 1;
   }
 

Modified: branches/samba/upstream/source/script/mkproto.sh
===================================================================
--- branches/samba/upstream/source/script/mkproto.sh	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/mkproto.sh	2008-06-15 01:55:18 UTC (rev 1953)
@@ -25,7 +25,7 @@
 shift
 headertmp="$header.$$.tmp~"
 
-proto_src="`echo $@ | tr ' ' '\n' | sed -e 's/\.o/\.c/g' | sort | uniq | egrep -v 'tdb/|wrapped|modules/getdate' | egrep -v '\.a$'`"
+proto_src="`echo $@ | tr ' ' '\n' | sed -e 's/\.o/\.c/g' | sort | uniq | egrep -v 'tdb/|wrapped|modules/getdate'`"
 
 echo creating $header
 

Deleted: branches/samba/upstream/source/script/mksyms.awk
===================================================================
--- branches/samba/upstream/source/script/mksyms.awk	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/mksyms.awk	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,76 +0,0 @@
-#
-# mksyms.awk
-#
-# Extract symbols to export from C-header files.
-# output in version-script format for linking shared libraries.
-#
-# Copyright (C) 2008 Micheal Adam <obnox at samba.org>
-#
-BEGIN {
-	inheader=0;
-	current_file="";
-	print "#"
-	print "# This file is automatically generated with \"make symbols\". DO NOT EDIT "
-	print "#"
-	print "{"
-	print "\tglobal:"
-}
-
-END {
-	print""
-	print "\tlocal: *;"
-	print "};"
-}
-
-{
-	if (FILENAME!=current_file) {
-		print "\t\t# The following definitions come from",FILENAME
-		current_file=FILENAME
-	}
-	if (inheader) {
-		if (match($0,"[)][ \t]*[;][ \t]*$")) {
-			inheader = 0;
-		}
-		next;
-	}
-}
-
-/^static/ || /^[ \t]*typedef/ || !/^[a-zA-Z\_]/ {
-	next;
-}
-
-/^extern[ \t]+[^()]+[;][ \t]*$/ {
-	gsub(/[^ \t]+[ \t]+/, "");
-	sub(/[;][ \t]*$/, "");
-	printf "\t\t%s;\n", $0;
-	next;
-}
-
-# look for function headers:
-{
-	gotstart = 0;
-	if ($0 ~ /^[A-Za-z_][A-Za-z0-9_]+/) {
-	gotstart = 1;
-	}
-	if(!gotstart) {
-		next;
-	}
-}
-
-/[_A-Za-z0-9]+[ \t]*[(].*[)][ \t]*;[ \t]*$/ {
-	sub(/[(].*$/, "");
-	gsub(/[^ \t]+[ \t]+/, "");
-	gsub(/^[*]/, "");
-	printf "\t\t%s;\n",$0;
-	next;
-}
-
-/[_A-Za-z0-9]+[ \t]*[(]/ {
-	inheader=1;
-	sub(/[(].*$/, "");
-	gsub(/[^ \t]+[ \t]+/, "");
-	gsub(/^[*]/, "");
-	printf "\t\t%s;\n",$0;
-	next;
-}
-

Deleted: branches/samba/upstream/source/script/mksyms.sh
===================================================================
--- branches/samba/upstream/source/script/mksyms.sh	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/mksyms.sh	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,45 +0,0 @@
-#! /bin/sh
-
-#
-# mksyms.sh
-#
-# Extract symbols to export from C-header files.
-# output in version-script format for linking shared libraries.
-#
-# This is the shell warpper for the mksyms.awk core script.
-#
-# Copyright (C) 2008 Micheal Adam <obnox at samba.org>
-#
-
-LANG=C; export LANG
-LC_ALL=C; export LC_ALL
-LC_COLLATE=C; export LC_COLLATE
-
-if [ $# -lt 2 ]
-then
-  echo "Usage: $0 awk output_file header_files"
-  exit 1
-fi
-
-awk="$1"
-shift
-
-symsfile="$1"
-shift
-symsfile_tmp="$symsfile.$$.tmp~"
-
-proto_src="`echo $@ | tr ' ' '\n' | sort | uniq `"
-
-echo creating $symsfile
-
-mkdir -p `dirname $symsfile`
-
-${awk} -f `dirname $0`/mksyms.awk $proto_src > $symsfile_tmp
-
-if cmp -s $symsfile $symsfile_tmp 2>/dev/null
-then
-  echo "$symsfile unchanged"
-  rm $symsfile_tmp
-else
-  mv $symsfile_tmp $symsfile
-fi

Modified: branches/samba/upstream/source/script/mkversion.sh
===================================================================
--- branches/samba/upstream/source/script/mkversion.sh	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/mkversion.sh	2008-06-15 01:55:18 UTC (rev 1953)
@@ -73,10 +73,10 @@
     if test x"${HAVEVER}" != x"yes" -a -d "${SOURCE_DIR}../.git";then
 	HAVEGIT=no
 	GIT_INFO=`git show --pretty=format:"%h%n%ct%n%H%n%cd" --stat HEAD 2>/dev/null`
-	GIT_COMMIT_ABBREV=`printf "%s" "${GIT_INFO}" | sed -n 1p`
-	GIT_COMMIT_TIME=`printf "%s" "${GIT_INFO}" | sed -n 2p`
-	GIT_COMMIT_FULLREV=`printf "%s" "${GIT_INFO}" | sed -n 3p`
-	GIT_COMMIT_DATE=`printf "%s" "${GIT_INFO}" | sed -n 4p`
+	GIT_COMMIT_ABBREV=`echo -e "${GIT_INFO}" | sed -n 1p`
+	GIT_COMMIT_TIME=`echo -e "${GIT_INFO}" | sed -n 2p`
+	GIT_COMMIT_FULLREV=`echo -e "${GIT_INFO}" | sed -n 3p`
+	GIT_COMMIT_DATE=`echo -e "${GIT_INFO}" | sed -n 4p`
 	if test -n "${GIT_COMMIT_ABBREV}";then
 	    HAVEGIT=yes
             HAVEVER=yes

Deleted: branches/samba/upstream/source/script/strip_trail_ws.pl
===================================================================
--- branches/samba/upstream/source/script/strip_trail_ws.pl	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/strip_trail_ws.pl	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,18 +0,0 @@
-#!/usr/bin/perl -w
-
-open( INFILE, "$ARGV[0]" ) || die $@;
-open( OUTFILE, ">$ARGV[0].new" ) || die $@;
-
-while ( <INFILE> ) { 
-	$_ =~ s/[ \t\r]*$//; 
-	print OUTFILE "$_"; 
-}
-
-close( INFILE );
-close( OUTFILE );
-
-rename( "$ARGV[0].new", "$ARGV[0]" ) || die @_;
-
-exit( 0 );
-
-

Modified: branches/samba/upstream/source/script/tests/dlopen.sh
===================================================================
--- branches/samba/upstream/source/script/tests/dlopen.sh	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/tests/dlopen.sh	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
 tempdir=`mktemp -d /tmp/dlopenXXXXXX`
 test -n "$tempdir" || exit 1


Property changes on: branches/samba/upstream/source/script/tests/gdb_backtrace
___________________________________________________________________
Name: svn:executable
   - *

Modified: branches/samba/upstream/source/script/tests/selftest.sh
===================================================================
--- branches/samba/upstream/source/script/tests/selftest.sh	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/tests/selftest.sh	2008-06-15 01:55:18 UTC (rev 1953)
@@ -27,12 +27,9 @@
 ## setup the various environment variables we need
 ##
 
-WORKGROUP=SAMBA-TEST
 SERVER=localhost2
 SERVER_IP=127.0.0.2
 USERNAME=`PATH=/usr/ucb:$PATH whoami`
-USERID=`PATH=/usr/ucb:$PATH id | cut -d ' ' -f1 | sed -e 's/uid=\([0-9]*\).*/\1/g'`
-GROUPID=`PATH=/usr/ucb:$PATH id | cut -d ' ' -f2 | sed -e 's/gid=\([0-9]*\).*/\1/g'`
 PASSWORD=test
 
 SRCDIR="`dirname $0`/../.."
@@ -49,12 +46,8 @@
 LOCKDIR=$PREFIX_ABS/lockdir
 LOGDIR=$PREFIX_ABS/logs
 SOCKET_WRAPPER_DIR=$PREFIX/sw
-CONFIGURATION="--configfile $CONFFILE"
+CONFIGURATION="-s $CONFFILE"
 SAMBA4CONFIGURATION="-s $SAMBA4CONFFILE"
-NSS_WRAPPER_PASSWD="$PRIVATEDIR/passwd"
-NSS_WRAPPER_GROUP="$PRIVATEDIR/group"
-WINBINDD_SOCKET_DIR=$PREFIX_ABS/winbindd
-WINBINDD_PRIV_PIPE_DIR=$LOCKDIR/winbindd_privileged
 
 export PREFIX PREFIX_ABS
 export CONFIGURATION CONFFILE SAMBA4CONFIGURATION SAMBA4CONFFILE
@@ -62,27 +55,12 @@
 export PRIVATEDIR LIBDIR PIDDIR LOCKDIR LOGDIR SERVERCONFFILE
 export SRCDIR SCRIPTDIR BINDIR
 export USERNAME PASSWORD
-export WORKGROUP SERVER SERVER_IP
-export NSS_WRAPPER_PASSWD NSS_WRAPPER_GROUP
-export WINBINDD_SOCKET_DIR WINBINDD_PRIV_PIPE_DIR
+export SMBTORTURE4
+export SERVER SERVER_IP
 
 PATH=bin:$PATH
 export PATH
 
-if test x"$LD_LIBRARY_PATH" != x""; then
-	LD_LIBRARY_PATH="$BINDIR:$LD_LIBRARY_PATH"
-else
-	LD_LIBRARY_PATH="$BINDIR"
-fi
-echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
-export LD_LIBRARY_PATH
-
-SAMBA4BINDIR=`dirname $SMBTORTURE4`
-SAMBA4SHAREDDIR="$SAMBA4BINDIR/shared"
-
-export SAMBA4SHAREDDIR
-export SMBTORTURE4
-
 ##
 ## verify that we were built with --enable-socket-wrapper
 ##
@@ -95,24 +73,12 @@
 	exit 1
 fi
 
-if test "x`smbd -b | grep NSS_WRAPPER`" = "x"; then
-	echo "***"
-	echo "*** You must include --enable-nss-wrapper when compiling Samba"
-	echo "*** in order to execute 'make test'.  Exiting...."
-	echo "***"
-	exit 1
-fi
-
-
 ## 
 ## create the test directory layout
 ##
-printf "%s" "CREATE TEST ENVIRONMENT IN '$PREFIX'"...
+echo -n "CREATE TEST ENVIRONMENT IN '$PREFIX'"...
 /bin/rm -rf $PREFIX/*
-mkdir -p $PRIVATEDIR $LIBDIR $PIDDIR $LOCKDIR $LOGDIR
-mkdir -p $SOCKET_WRAPPER_DIR
-mkdir -p $WINBINDD_SOCKET_DIR
-chmod 755 $WINBINDD_SOCKET_DIR
+mkdir -p $PRIVATEDIR $LIBDIR $PIDDIR $LOCKDIR $LOGDIR $SOCKET_WRAPPER_DIR
 mkdir -p $PREFIX_ABS/tmp
 chmod 777 $PREFIX_ABS/tmp
 
@@ -121,7 +87,7 @@
 ##
 
 cat >$COMMONCONFFILE<<EOF
-	workgroup = $WORKGROUP
+	workgroup = SAMBA-TEST
 
 	private dir = $PRIVATEDIR
 	pid directory = $PIDDIR
@@ -129,6 +95,8 @@
 	log file = $LOGDIR/log.%m
 	log level = 0
 
+	passdb backend = tdbsam
+
 	name resolve order = bcast
 EOF
 
@@ -140,8 +108,6 @@
 	interfaces = $TORTURE_INTERFACES
 	panic action = $SCRIPTDIR/gdb_backtrace %d %\$(MAKE_TEST_BINARY)
 	include = $COMMONCONFFILE
-
-	passdb backend = tdbsam
 EOF
 
 cat >$SAMBA4CONFFILE<<EOF
@@ -160,34 +126,23 @@
 	panic action = $SCRIPTDIR/gdb_backtrace %d %\$(MAKE_TEST_BINARY)
 	include = $COMMONCONFFILE
 
-	passdb backend = tdbsam
+	; Necessary to add the build farm hacks
+	add user script = /bin/false
+	add machine script = /bin/false
 
-	add user script = $PERL $SRCDIR/lib/nss_wrapper/nss_wrapper.pl --path $NSS_WRAPPER_PASSWD --type passwd --action add --name %u
-	add machine script = $PERL $SRCDIR/lib/nss_wrapper/nss_wrapper.pl --path $NSS_WRAPPER_PASSWD --type passwd --action add --name %u
-	delete user script = $PERL $SRCDIR/lib/nss_wrapper/nss_wrapper.pl --path $NSS_WRAPPER_PASSWD --type passwd --action delete --name %u
-
 	kernel oplocks = no
-	kernel change notify = no
 
 	syslog = no
 	printing = bsd
 	printcap name = /dev/null
 
-	winbindd:socket dir = $WINBINDD_SOCKET_DIR
-	idmap uid = 100000-200000
-	idmap gid = 100000-200000
-
-#	min receivefile size = 4000
-
 [tmp]
 	path = $PREFIX_ABS/tmp
 	read only = no
 	smbd:sharedelay = 100000
-	smbd:writetimeupdatedelay = 500000
 	map hidden = yes
 	map system = yes
 	create mask = 755
-	vfs objects = $BINDIR/xattr_tdb.so $BINDIR/streams_xattr.so
 [hideunread]
 	copy = tmp
 	hide unreadable = yes
@@ -210,36 +165,21 @@
 ## create a test account
 ##
 
-cat >$NSS_WRAPPER_PASSWD<<EOF
-nobody:x:65534:65533:nobody gecos:$PREFIX_ABS:/bin/false
-$USERNAME:x:$USERID:$GROUPID:$USERNAME gecos:$PREFIX_ABS:/bin/false
-EOF
-
-cat >$NSS_WRAPPER_GROUP<<EOF
-nobody:x:65533:
-nogroup:x:65534:nobody
-$USERNAME-group:x:$GROUPID:
-EOF
-
-MAKE_TEST_BINARY="bin/smbpasswd"
-export MAKE_TEST_BINARY
-
 (echo $PASSWORD; echo $PASSWORD) | \
-	bin/smbpasswd -c $CONFFILE -L -s -a $USERNAME >/dev/null || exit 1
+	smbpasswd -c $CONFFILE -L -s -a $USERNAME >/dev/null || exit 1
 
 echo "DONE";
 
-MAKE_TEST_BINARY=""
-
 SERVER_TEST_FIFO="$PREFIX/server_test.fifo"
 export SERVER_TEST_FIFO
 NMBD_TEST_LOG="$PREFIX/nmbd_test.log"
 export NMBD_TEST_LOG
-WINBINDD_TEST_LOG="$PREFIX/winbindd_test.log"
-export WINBINDD_TEST_LOG
 SMBD_TEST_LOG="$PREFIX/smbd_test.log"
 export SMBD_TEST_LOG
 
+MAKE_TEST_BINARY=""
+export MAKE_TEST_BINARY
+
 # start off with 0 failures
 failed=0
 export failed
@@ -257,7 +197,6 @@
 TORTURE4_OPTIONS="$SAMBA4CONFIGURATION"
 TORTURE4_OPTIONS="$TORTURE4_OPTIONS --maximum-runtime=$TORTURE_MAXTIME"
 TORTURE4_OPTIONS="$TORTURE4_OPTIONS --target=samba3"
-TORTURE4_OPTIONS="$TORTURE4_OPTIONS --option=torture:localdir=$PREFIX_ABS/tmp"
 export TORTURE4_OPTIONS
 
 if [ x"$RUN_FROM_BUILD_FARM" = x"yes" ];then
@@ -273,9 +212,8 @@
 (
  # give time for nbt server to register its names
  echo "delaying for nbt name registration"
- sleep 10
+ sleep 4
  # This will return quickly when things are up, but be slow if we need to wait for (eg) SSL init 
- MAKE_TEST_BINARY="bin/nmblookup"
  bin/nmblookup $CONFIGURATION -U $SERVER_IP __SAMBA__
  bin/nmblookup $CONFIGURATION __SAMBA__
  bin/nmblookup $CONFIGURATION -U 127.255.255.255 __SAMBA__
@@ -283,10 +221,8 @@
  bin/nmblookup $CONFIGURATION $SERVER
  # make sure smbd is also up set
  echo "wait for smbd"
- MAKE_TEST_BINARY="bin/smbclient"
  bin/smbclient $CONFIGURATION -L $SERVER_IP -U% -p 139 | head -2
  bin/smbclient $CONFIGURATION -L $SERVER_IP -U% -p 139 | head -2
- MAKE_TEST_BINARY=""
 
  failed=0
 

Modified: branches/samba/upstream/source/script/tests/test_functions.sh
===================================================================
--- branches/samba/upstream/source/script/tests/test_functions.sh	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/tests/test_functions.sh	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,9 +4,6 @@
 	kill -USR1 `cat $PIDDIR/timelimit.nmbd.pid` >/dev/null 2>&1 || \
 		kill -ALRM `cat $PIDDIR/timelimit.nmbd.pid` || RET=$?
 
-	kill -USR1 `cat $PIDDIR/timelimit.winbindd.pid` >/dev/null 2>&1 || \
-		kill -ALRM `cat $PIDDIR/timelimit.winbindd.pid` || RET=$?
-
 	kill -USR1 `cat $PIDDIR/timelimit.smbd.pid` >/dev/null 2>&1 || \
 		kill -ALRM `cat $PIDDIR/timelimit.smbd.pid` || RET=$?
 
@@ -15,7 +12,6 @@
 
 samba3_stop_sig_kill() {
 	kill -ALRM `cat $PIDDIR/timelimit.nmbd.pid` >/dev/null 2>&1
-	kill -ALRM `cat $PIDDIR/timelimit.winbindd.pid` >/dev/null 2>&1
 	kill -ALRM `cat $PIDDIR/timelimit.smbd.pid` >/dev/null 2>&1
 	return 0;
 }
@@ -42,7 +38,7 @@
 		mkfifo $SERVER_TEST_FIFO
 
 		rm -f $NMBD_TEST_LOG
-		printf "%s" "STARTING NMBD..."
+		echo -n "STARTING NMBD..."
 		((
 			if test x"$NMBD_MAXTIME" = x; then
 			    NMBD_MAXTIME=2700
@@ -73,40 +69,8 @@
 		) || exit $? &) 2>/dev/null || exit $?
 		echo  "DONE"
 
-		rm -f $WINBINDD_TEST_LOG
-		printf "%s" "STARTING WINBINDD..."
-		((
-			if test x"$WINBINDD_MAXTIME" = x; then
-			    WINBINDD_MAXTIME=2700
-			fi
-			MAKE_TEST_BINARY=$BINDIR/winbindd
-			export MAKE_TEST_BINARY
-			timelimit $WINBINDD_MAXTIME $WINBINDD_VALGRIND $BINDIR/winbindd -F -S --no-process-group -d0 -s $SERVERCONFFILE > $WINBINDD_TEST_LOG 2>&1 &
-			TIMELIMIT_WINBINDD_PID=$!
-			MAKE_TEST_BINARY=
-			echo $TIMELIMIT_WINBINDD_PID > $PIDDIR/timelimit.winbindd.pid
-			wait $TIMELIMIT_WINBINDD_PID
-			ret=$?;
-			rm -f $SERVER_TEST_FIFO
-			if [ -n "$SOCKET_WRAPPER_DIR" -a -d "$SOCKET_WRAPPER_DIR" ]; then
-				rm -f $SOCKET_WRAPPER_DIR/*
-			fi
-			if [ x"$ret" = x"0" ];then
-				echo "winbindd exits with status $ret";
-				echo "winbindd exits with status $ret" >>$WINBINDD_TEST_LOG;
-			elif [ x"$ret" = x"137" ];then
-				echo "winbindd got SIGXCPU and exits with status $ret!"
-				echo "winbindd got SIGXCPU and exits with status $ret!">>$WINBINDD_TEST_LOG;
-			else
-				echo "winbindd failed with status $ret!"
-				echo "winbindd failed with status $ret!">>$WINBINDD_TEST_LOG;
-			fi
-			exit $ret;
-		) || exit $? &) 2>/dev/null || exit $?
-		echo  "DONE"
-
 		rm -f $SMBD_TEST_LOG
-		printf "%s" "STARTING SMBD..."
+		echo -n "STARTING SMBD..."
 		((
 			if test x"$SMBD_MAXTIME" = x; then
 			    SMBD_MAXTIME=2700
@@ -149,15 +113,6 @@
 	return 1;
 }
 
-samba3_winbindd_test_log() {
-	if [ -n "$WINBINDD_TEST_LOG" ];then
-		if [ -r "$WINBINDD_TEST_LOG" ];then
-			return 0;
-		fi
-	fi
-	return 1;
-}
-
 samba3_smbd_test_log() {
 	if [ -n "$SMBD_TEST_LOG" ];then
 		if [ -r "$SMBD_TEST_LOG" ];then
@@ -200,9 +155,6 @@
 	if [ -z "$nmbd_log_size" ]; then
 		nmbd_log_size=`wc -l < $NMBD_TEST_LOG`;
 	fi
-	if [ -z "$winbindd_log_size" ]; then
-		winbindd_log_size=`wc -l < $WINBINDD_TEST_LOG`;
-	fi
 	if [ -z "$smbd_log_size" ]; then
 		smbd_log_size=`wc -l < $SMBD_TEST_LOG`;
 	fi
@@ -250,15 +202,6 @@
 			nmbd_log_size=$new_log_size;
 		}
 	}
-	samba3_winbindd_test_log && {
-		new_log_size=`wc -l < $WINBINDD_TEST_LOG`;
-		test "$new_log_size" = "$winbindd_log_size" || {
-			echo "WINBINDD OUTPUT:";
-			incr_log_size=`expr $new_log_size - $winbindd_log_size`;
-			tail -$incr_log_size $WINBINDD_TEST_LOG;
-			winbindd_log_size=$new_log_size;
-		}
-	}
 	samba3_smbd_test_log && {
 		new_log_size=`wc -l < $SMBD_TEST_LOG`;
 		test "$new_log_size" = "$smbd_log_size" || {

Modified: branches/samba/upstream/source/script/tests/test_local_s3.sh
===================================================================
--- branches/samba/upstream/source/script/tests/test_local_s3.sh	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/tests/test_local_s3.sh	2008-06-15 01:55:18 UTC (rev 1953)
@@ -20,10 +20,4 @@
 testit "replacetort" $VALGRIND $BINDIR/replacetort || \
     failed=`expr $failed + 1`
 
-testit "tdbtorture" $VALGRIND $BINDIR/tdbtorture || \
-    failed=`expr $failed + 1`
-
-testit "smbconftort" $VALGRIND $BINDIR/smbconftort $CONFIGURATION || \
-	failed=`expr $failed + 1`
-
 testok $0 $failed

Deleted: branches/samba/upstream/source/script/tests/test_net_registry.sh
===================================================================
--- branches/samba/upstream/source/script/tests/test_net_registry.sh	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/tests/test_net_registry.sh	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,393 +0,0 @@
-#!/bin/sh
-
-# tests for the "net registry" command - local access to the registry db
-
-
-NET="$VALGRIND ${NET:-$BINDIR/net} $CONFIGURATION"
-
-NETREG="${NET} registry"
-
-incdir=`dirname $0`
-. $incdir/test_functions.sh
-
-failed=0
-
-test_enumerate()
-{
-	KEY="$1"
-
-	${NETREG} enumerate ${KEY}
-}
-
-test_getsd()
-{
-	KEY="$1"
-
-	${NETREG} getsd ${KEY}
-}
-
-test_enumerate_nonexisting()
-{
-	KEY="$1"
-	${NETREG} enumerate ${KEY}
-
-	if test "x$?" = "x0" ; then
-		echo "ERROR: enumerate succeeded with key '${KEY}'"
-		false
-	else
-		true
-	fi
-}
-
-test_enumerate_no_key()
-{
-	${NETREG} enumerate
-	if test "x$?" = "x0" ; then
-		echo "ERROR: enumerate succeeded without any key spcified"
-		false
-	else
-		true
-	fi
-}
-
-test_create_existing()
-{
-	KEY="HKLM"
-	EXPECTED="createkey opened existing ${KEY}"
-
-	OUTPUT=`${NETREG} createkey ${KEY}`
-	if test "x$?" = "x0" ; then
-		if test "$OUTPUT" = "$EXPECTED" ; then
-			true
-		else
-			echo "got '$OUTPUT', expected '$EXPECTED'"
-			false
-		fi
-	else
-		printf "%s\n" "$OUTPUT"
-		false
-	fi
-}
-
-test_createkey()
-{
-	KEY="$1"
-	BASEKEY=`dirname $KEY`
-	SUBKEY=`basename $KEY`
-
-	OUTPUT=`${NETREG} createkey ${KEY}`
-	if test "x$?" != "x0" ; then
-		echo "ERROR: createkey ${KEY} failed"
-		echo "output:"
-		printf "%s\n" "$OUTPUT"
-		false
-		return
-	fi
-
-	# check enumerate of basekey lists new key:
-	OUTPUT=`${NETREG} enumerate ${BASEKEY}`
-	if test "x$?" != "x0" ; then
-		echo "ERROR: failed to enumerate key '${BASEKEY}'"
-		echo "output:"
-		printf "%s\n" "$OUTPUT"
-		false
-		return
-	fi
-
-	EXPECTED="Keyname = ${SUBKEY}"
-	printf "%s\n" "$OUTPUT" | grep '^Keyname' | grep ${SUBKEY}
-	if test "x$?" != "x0" ; then
-		echo "ERROR: did not find expexted '$EXPECTED' in output"
-		echo "output:"
-		printf "%s\n" "$OUTPUT"
-		false
-	fi
-
-	# check enumerate of new key works:
-	${NETREG} enumerate ${KEY}
-}
-
-test_deletekey()
-{
-	KEY="$1"
-	BASEKEY=`dirname ${KEY}`
-	SUBKEY=`basename ${KEY}`
-
-	OUTPUT=`test_createkey "${KEY}"`
-	if test "x$?" != "x0" ; then
-		printf "%s\n" "${OUTPUT}"
-		false
-		return
-	fi
-
-	OUTPUT=`${NETREG} deletekey ${KEY}`
-	if test "x$?" != "x0" ; then
-		printf "%s\n" "${OUTPUT}"
-		false
-		return
-	fi
-
-	# check enumerate of basekey does not show key anymore:
-	OUTPUT=`${NETREG} enumerate ${BASEKEY}`
-	if test "x$?" != "x0" ; then
-		printf "%s\n" "$OUTPUT"
-		false
-		return
-	fi
-
-	UNEXPECTED="Keyname = ${SUBKEY}"
-	printf "%s\n" "$OUTPUT" | 'grep ^Keyname' | grep ${SUBKEY}
-	if test "x$?" = "x0" ; then
-		echo "ERROR: found '$UNEXPECTED' after delete in output"
-		echo "output:"
-		printf "%s\n" "$OUTPUT"
-		false
-	fi
-
-	# check enumerate of key itself does not work anymore:
-	${NETREG} enumerate ${KEY}
-	if test "x$?" = "x0" ; then
-		echo "ERROR: 'enumerate ${KEY}' works after 'deletekey ${KEY}'"
-		false
-	else
-		true
-	fi
-}
-
-test_deletekey_nonexisting()
-{
-	KEY="$1"
-
-	OUTPUT=`test_deletekey "${KEY}"`
-	if test "x$?" != "x0" ; then
-		printf "%s\n" "${OUTPUT}"
-		false
-		return
-	fi
-
-	${NETREG} deletekey "${KEY}"
-	if test "x$?" = "x0" ; then
-		echo "ERROR: delete after delete succeeded for key '${KEY}'"
-		false
-	fi
-}
-
-test_createkey_with_subkey()
-{
-	KEY="$1"
-	KEY2=`dirname ${KEY}`
-	SUBKEYNAME2=`basename ${KEY}`
-	BASENAME=`dirname ${KEY2}`
-	SUBKEYNAME1=`basename ${KEY2}`
-
-	OUTPUT=`${NETREG} createkey ${KEY}`
-	if test "x$?" != "x0" ; then
-		echo "ERROR: createkey ${KEY} failed"
-		printf "%s\n" "${OUTPUT}"
-		false
-		return
-	fi
-
-	# check we can enumerate to level key
-	OUTPUT=`${NETREG} enumerate ${KEY}`
-	if test "x$?" != "x0" ; then
-		echo "ERROR: failed to enumerate '${KEY}' after creation"
-		printf "%s\n" "${OUTPUT}"
-		false
-		return
-	fi
-
-	# clear:
-	${NETREG} deletekey ${KEY} && ${NETREG} deletekey ${KEY2}
-}
-
-test_deletekey_with_subkey()
-{
-	KEY="$1"
-	KEY2=`dirname ${KEY}`
-
-	OUTPUT=`${NETREG} createkey ${KEY}`
-	if test "x$?" != "x0" ; then
-		printf "%s\n" "${OUTPUT}"
-		false
-		return
-	fi
-
-	OUTPUT=`${NETREG} deletekey ${KEY2}`
-
-	if test "x$?" = "x0" ; then
-		echo "ERROR: delete of key with subkey succeeded"
-		echo "output:"
-		printf "%s\n" "$OUTPUT"
-		false
-		return
-	fi
-
-	${NETREG} deletekey ${KEY} && ${NETREG} deletekey ${KEY2}
-}
-
-test_setvalue()
-{
-	KEY="$1"
-	VALNAME="$2"
-	VALTYPE="$3"
-	VALVALUE="$4"
-
-	OUTPUT=`test_createkey ${KEY}`
-	if test "x$?" != "x0" ; then
-		printf "%s\n" "${OUTPUT}"
-		false
-		return
-	fi
-
-	OUTPUT=`${NETREG} setvalue ${KEY} ${VALNAME} ${VALTYPE} ${VALVALUE}`
-	if test "x$?" != "x0" ; then
-		echo "ERROR: failed to set value testval in key ${KEY}"
-		printf "%s\n" "${OUTPUT}"
-		false
-		return
-	fi
-
-	OUTPUT=`${NETREG} enumerate ${KEY}`
-	if test "x$?" != "x0" ; then
-		echo "ERROR: failure calling enumerate for key ${KEY}"
-		echo output:
-		printf "%s\n" "${OUTPUT}"
-		false
-		return
-	fi
-
-	printf "%s\n" "$OUTPUT" | {
-	FOUND=0
-	while read LINE ; do
-		SEARCH1=`echo $LINE | grep '^Valuename' | grep ${VALNAME}`
-		if test "x$?" = "x0" ; then
-			read LINE
-			read LINE
-			SEARCH2=`echo $LINE | grep '^Value ' | grep ${VALVALUE}`
-			if test "x$?" = "x0" ; then
-				FOUND=1
-				break
-			fi
-		fi
-	done
-
-	if test "x$FOUND" != "x1" ; then
-		echo "ERROR: did not find value '${VALNAME}' with enumerate"
-		echo "enumerate output:"
-		printf "%s\n" "$OUTPUT"
-		false
-		return
-	fi
-	}
-}
-
-test_deletevalue()
-{
-	KEY="$1"
-	VALNAME="$2"
-
-	${NETREG} deletevalue ${KEY} ${VALNAME}
-}
-
-test_deletevalue_nonexisting()
-{
-	KEY="$1"
-	VALNAME="$2"
-
-	${NETREG} deletevalue ${KEY} ${VALNAME}
-	if test "x$?" = "x0" ; then
-		echo "ERROR: succeeded deleting value ${VALNAME}"
-		false
-	else
-		true
-	fi
-}
-
-test_setvalue_twice()
-{
-	KEY="$1"
-	VALNAME="$2"
-	VALTYPE1="$3"
-	VALVALUE1="$4"
-	VALTYPE2="$5"
-	VALVALUE2="$6"
-
-	OUTPUT=`test_setvalue ${KEY} ${VALNAME} ${VALTYPE1} ${VALVALUE1}`
-	if test "x$?" != "x0" ; then
-		echo "ERROR: first setvalue call failed"
-		printf "%s\n" "$OUTPUT"
-		false
-		return
-	fi
-
-	${NETREG} setvalue ${KEY} ${VALNAME} ${VALTYPE2} ${VALVALUE2}
-}
-
-
-testit "enumerate HKLM" \
-	test_enumerate HKLM || \
-	failed=`expr $failed + 1`
-
-testit "enumerate nonexisting hive" \
-	test_enumerate_nonexisting XYZ || \
-	failed=`expr $failed + 1`
-
-testit "enumerate without key" \
-	test_enumerate_no_key || \
-	failed=`expr $failed + 1`
-
-testit "getsd HKLM" \
-	test_getsd HKLM || \
-	failed=`expr $failed + 1`
-
-testit "create existing HKLM" \
-	test_create_existing || \
-	failed=`expr $failed + 1`
-
-testit "create key" \
-	test_createkey HKLM/testkey || \
-	failed=`expr $failed + 1`
-
-testit "delete key" \
-	test_deletekey HKLM/testkey || \
-	failed=`expr $failed + 1`
-
-testit "delete^2 key" \
-	test_deletekey_nonexisting HKLM/testkey || \
-	failed=`expr $failed + 1`
-
-testit "enumerate nonexisting key" \
-	test_enumerate_nonexisting HKLM/testkey || \
-	failed=`expr $failed +1`
-
-testit "create key with subkey" \
-	test_createkey_with_subkey HKLM/testkey/subkey || \
-	failed=`expr $failed + 1`
-
-testit "delete key with subkey" \
-	test_deletekey_with_subkey HKLM/testkey/subkey || \
-	failed=`expr $failed + 1`
-
-testit "set value" \
-	test_setvalue HKLM/testkey testval sz moin || \
-	failed=`expr $failed + 1`
-
-testit "delete value" \
-	test_deletevalue HKLM/testkey testval || \
-	failed=`expr $failed + 1`
-
-testit "delete nonexisting value" \
-	test_deletevalue_nonexisting HKLM/testkey testval || \
-	failed=`expr $failed + 1`
-
-testit "set value to different type" \
-	test_setvalue_twice HKLM/testkey testval sz moin dword 42 || \
-	failed=`expr $failed + 1`
-
-testit "delete key with value" \
-	test_deletekey HKLM/testkey || \
-	failed=`expr $failed + 1`
-
-testok $0 $failed
-

Deleted: branches/samba/upstream/source/script/tests/test_ntlm_auth_s3.sh
===================================================================
--- branches/samba/upstream/source/script/tests/test_ntlm_auth_s3.sh	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/tests/test_ntlm_auth_s3.sh	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,21 +0,0 @@
-#!/bin/sh
-
-incdir=`dirname $0`
-. $incdir/test_functions.sh
-
-failed=0
-
-(/usr/bin/env python --version > /dev/null 2>&1)
-
-if test $? -ne 0;
-then
-	echo "Python binary not found in path. Skipping ntlm_auth tests."
-	exit 0
-fi
-
-testit "ntlm_auth" $VALGRIND $SRCDIR/torture/test_ntlm_auth.py $BINDIR/ntlm_auth --configfile=$CONFFILE || failed=`expr $failed + 1`
-# This should work even with NTLMv2
-testit "ntlm_auth" $VALGRIND $SRCDIR/torture/test_ntlm_auth.py $BINDIR/ntlm_auth --configfile=$CONFFILE --client-domain=fOo --server-domain=fOo || failed=`expr $failed + 1`
-
-
-testok $0 $failed

Modified: branches/samba/upstream/source/script/tests/test_posix_s3.sh
===================================================================
--- branches/samba/upstream/source/script/tests/test_posix_s3.sh	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/tests/test_posix_s3.sh	2008-06-15 01:55:18 UTC (rev 1953)
@@ -31,32 +31,30 @@
 raw="$raw RAW-IOCTL RAW-LOCK RAW-MKDIR RAW-MUX RAW-NOTIFY RAW-OPEN RAW-OPLOCK"
 raw="$raw RAW-QFILEINFO RAW-QFSINFO RAW-READ RAW-RENAME RAW-SEARCH RAW-SEEK"
 raw="$raw RAW-SFILEINFO RAW-SFILEINFO-BUG RAW-STREAMS RAW-UNLINK RAW-WRITE"
-raw="$raw RAW-SAMBA3HIDE RAW-SAMBA3BADPATH RAW-SFILEINFO-RENAME"
-raw="$raw RAW-SAMBA3CASEINSENSITIVE RAW-SAMBA3POSIXTIMEDLOCK"
-raw="$raw RAW-SAMBA3ROOTDIRFID"
+raw="$raw RAW-SAMBA3HIDE RAW-SAMBA3BADPATH"
 
 rpc="RPC-AUTHCONTEXT RPC-BINDSAMBA3 RPC-SAMBA3-SRVSVC RPC-SAMBA3-SHARESEC"
-rpc="$rpc RPC-SAMBA3-SPOOLSS RPC-SAMBA3-WKSSVC"
-rpc="$rpc RPC-NETLOGSAMBA3 RPC-SAMBA3SESSIONKEY RPC-SAMBA3-GETUSERNAME"
+rpc="$rpc RPC-UNIXINFO RPC-SAMBA3-SPOOLSS RPC-SAMBA3-WKSSVC"
 
 # NOTE: to enable the UNIX-WHOAMI test, we need to change the default share
 # config to allow guest access. I'm not sure whether this would break other
 # tests, so leaving it alone for now -- jpeach
 unix="UNIX-INFO2"
 
+if test x$RUN_FROM_BUILD_FARM = xyes; then
+	rpc="$rpc RPC-NETLOGSAMBA3 RPC-SAMBA3SESSIONKEY RPC-SAMBA3-GETUSERNAME"
+fi
+
 tests="$base $raw $rpc $unix"
 
-skipped="BASE-CHARSET BASE-TCONDEV"
-skipped="$skipped RAW-ACLS RAW-COMPOSITE RAW-CONTEXT"
-skipped="$skipped RAW-IOCTL"
-skipped="$skipped RAW-QFILEINFO RAW-QFSINFO"
-skipped="$skipped RAW-SFILEINFO"
+skipped="BASE-CHARSET BASE-DEFER_OPEN BASE-DELAYWRITE BASE-OPENATTR BASE-TCONDEV"
+skipped="$skipped RAW-ACLS RAW-COMPOSITE RAW-CONTEXT RAW-EAS"
+skipped="$skipped RAW-IOCTL RAW-MKDIR RAW-MUX RAW-NOTIFY RAW-OPEN"
+skipped="$skipped RAW-QFILEINFO RAW-QFSINFO RAW-RENAME RAW-SEARCH"
+skipped="$skipped RAW-SFILEINFO RAW-STREAMS RAW-WRITE"
 
 echo "WARNING: Skipping tests $skipped"
 
-ADDARGS="$ADDARGS --option=torture:sharedelay=100000"
-ADDARGS="$ADDARGS --option=torture:writetimeupdatedelay=500000"
-
 failed=0
 for t in $tests; do
     if [ ! -z "$start" -a "$start" != $t ]; then

Modified: branches/samba/upstream/source/script/tests/test_smbclient_s3.sh
===================================================================
--- branches/samba/upstream/source/script/tests/test_smbclient_s3.sh	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/tests/test_smbclient_s3.sh	2008-06-15 01:55:18 UTC (rev 1953)
@@ -2,7 +2,7 @@
 
 # this runs the file serving tests that are expected to pass with samba3
 
-if [ $# -lt 2 ]; then
+if [ $# != 2 ]; then
 cat <<EOF
 Usage: test_smbclient_s3.sh SERVER SERVER_IP
 EOF
@@ -12,8 +12,6 @@
 SERVER="$1"
 SERVER_IP="$2"
 SMBCLIENT="$VALGRIND ${SMBCLIENT:-$BINDIR/smbclient} $CONFIGURATION"
-shift 2
-ADDARGS="$*"
 
 incdir=`dirname $0`
 . $incdir/test_functions.sh
@@ -26,7 +24,7 @@
     prompt="smb"
 
     echo du | \
-	$SMBCLIENT $CONFIGURATION "$@" -U$USERNAME%$PASSWORD //$SERVER/tmp -I SERVER_IP $ADDARGS 2>&1 | \
+	$SMBCLIENT $CONFIGURATION "$@" -U$USERNAME%$PASSWORD //$SERVER/tmp 2>&1 | \
     grep $prompt
 
     if [ $? = 0 ] ; then
@@ -50,8 +48,8 @@
 EOF
 
     CLI_FORCE_INTERACTIVE=yes \
-    $SMBCLIENT $CONFIGURATION "$@" -U$USERNAME%$PASSWORD //$SERVER/tmp -I $SERVER_IP \
-	$ADDARGS < $tmpfile 2>/dev/null | \
+    $SMBCLIENT $CONFIGURATION "$@" -U$USERNAME%$PASSWORD //$SERVER/tmp \
+	< $tmpfile 2>/dev/null | \
     grep $prompt
 
     if [ $? = 0 ] ; then
@@ -66,7 +64,7 @@
 }
 
 testit "smbclient -L $SERVER_IP" $SMBCLIENT $CONFIGURATION -L $SERVER_IP -N -p 139 || failed=`expr $failed + 1`
-testit "smbclient -L $SERVER -I $SERVER_IP" $SMBCLIENT $CONFIGURATION -L $SERVER -I $SERVER_IP -N -p 139 || failed=`expr $failed + 1`
+testit "smbclient -L $SERVER" $SMBCLIENT $CONFIGURATION -L $SERVER -N -p 139 || failed=`expr $failed + 1`
 
 testit "noninteractive smbclient does not prompt" \
     test_noninteractive_no_prompt || \

Modified: branches/samba/upstream/source/script/tests/test_smbtorture_s3.sh
===================================================================
--- branches/samba/upstream/source/script/tests/test_smbtorture_s3.sh	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/tests/test_smbtorture_s3.sh	2008-06-15 01:55:18 UTC (rev 1953)
@@ -20,8 +20,7 @@
 . $incdir/test_functions.sh
 
 tests="FDPASS LOCK1 LOCK2 LOCK3 LOCK4 LOCK5 LOCK6 LOCK7"
-#tests="$tests UNLINK BROWSE ATTR TRANS2 MAXFID TORTURE "
-tests="$tests UNLINK BROWSE ATTR TRANS2 TORTURE "
+tests="$tests UNLINK BROWSE ATTR TRANS2 MAXFID TORTURE "
 tests="$tests OPLOCK1 OPLOCK2 OPLOCK3"
 tests="$tests DIR DIR1 TCON TCONDEV RW1 RW2 RW3"
 tests="$tests OPEN XCOPY RENAME DELETE PROPERTIES W2K"
@@ -42,7 +41,7 @@
     fi
     start=""
     name="$t"
-    testit "$name" $VALGRIND $BINDIR/smbtorture $unc -U"$username"%"$password" $ADDARGS $t || failed=`expr $failed + 1`
+    testit "$name" $VALGRIND $BINDIR/smbtorture $ADDARGS $unc -U"$username"%"$password" $t || failed=`expr $failed + 1`
 done
 
 testok $0 $failed

Deleted: branches/samba/upstream/source/script/tests/test_wbinfo_s3.sh
===================================================================
--- branches/samba/upstream/source/script/tests/test_wbinfo_s3.sh	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/tests/test_wbinfo_s3.sh	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,50 +0,0 @@
-#!/bin/sh
-
-if [ $# -lt 4 ]; then
-cat <<EOF
-Usage: test_wbinfo_s3.sh DOMAIN SERVER USERNAME PASSWORD <wbinfo args>
-EOF
-exit 1;
-fi
-
-domain="$1"
-server="$2"
-username="$3"
-password="$4"
-shift 4
-ADDARGS="$*"
-
-incdir=`dirname $0`
-. $incdir/test_functions.sh
-
-OLDIFS=$IFS;
-
-tests="--ping"
-tests="$tests:--separator"
-tests="$tests:--own-domain"
-tests="$tests:--all-domains"
-tests="$tests:--trusted-domains"
-tests="$tests:--domain-info=BUILTIN"
-tests="$tests:--domain-info=$server"
-tests="$tests:--online-status"
-tests="$tests:--online-status --domain=BUILTIN"
-tests="$tests:--online-status --domain=$server"
-#Didn't pass yet# tests="$tests:--domain-users"
-tests="$tests:--domain-groups"
-tests="$tests:--name-to-sid=$username"
-#Didn't pass yet# tests="$tests:--user-info=$username"
-tests="$tests:--user-groups=$username"
-
-failed=0
-
-OLDIFS=$IFS
-NEWIFS=$':'
-IFS=$NEWIFS
-for t in $tests; do
-   IFS=$OLDIFS
-   testit "wbinfo $t" $VALGRIND $BINDIR/wbinfo $CONFIGURATION $ADDARGS $t || failed=`expr $failed + 1`
-   IFS=$NEWIFS
-done
-IFS=$OLDIFS
-
-testok $0 $failed

Modified: branches/samba/upstream/source/script/tests/tests_all.sh
===================================================================
--- branches/samba/upstream/source/script/tests/tests_all.sh	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/tests/tests_all.sh	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,82 +1,13 @@
-local_s3() {
-	echo "RUNNING SUBTESTS local_s3"
-	$SCRIPTDIR/test_local_s3.sh \
-	|| failed=`expr $failed + $?`
-}
 
-smbtorture_s3() {
-	echo "RUNNING SUBTESTS smbtorture_s3"
-	$SCRIPTDIR/test_smbtorture_s3.sh \
-		//$SERVER_IP/tmp $USERNAME $PASSWORD "" \
-	|| failed=`expr $failed + $?`
-}
+$SCRIPTDIR/test_local_s3.sh || failed=`expr $failed + $?`
+$SCRIPTDIR/test_smbtorture_s3.sh //$SERVER_IP/tmp $USERNAME $PASSWORD "" || failed=`expr $failed + $?`
+$SCRIPTDIR/test_smbclient_s3.sh $SERVER $SERVER_IP || failed=`expr $failed + $?`
 
-smbtorture_s3_encrypted() {
-	echo "RUNNING SUBTESTS smbtorture_s3_encrypted"
-	$SCRIPTDIR/test_smbtorture_s3.sh \
-		//$SERVER_IP/tmp $USERNAME $PASSWORD "" "-e" \
-	|| failed=`expr $failed + $?`
-}
-
-smbclient_s3() {
-	echo "RUNNING SUBTESTS smbclient_s3"
-	$SCRIPTDIR/test_smbclient_s3.sh $SERVER $SERVER_IP \
-	|| failed=`expr $failed + $?`
-}
-
-smbclient_s3_encrypted() {
-	echo "RUNNING SUBTESTS smbclient_s3_encrypted"
-	$SCRIPTDIR/test_smbclient_s3.sh $SERVER $SERVER_IP "-e" \
-	|| failed=`expr $failed + $?`
-}
-
-wbinfo_s3() {
-	echo "RUNNING SUBTESTS wbinfo_s3"
-	$SCRIPTDIR/test_wbinfo_s3.sh $WORKGROUP $SERVER $USERNAME $PASSWORD \
-	|| failed=`expr $failed + $?`
-}
-
-ntlm_auth_s3() {
-	echo "RUNNING SUBTESTS ntlm_auth_s3"
-	$SCRIPTDIR/test_ntlm_auth_s3.sh \
-	|| failed=`expr $failed + $?`
-}
-
-net_registry() {
-	echo "RUNNING SUBTESTS net_registry"
-	$SCRIPTDIR/test_net_registry.sh \
-	|| failed=`expr $failed + $?`
-}
-
-posix_s3() {
-	echo "RUNNING SUBTESTS posix_s3"
-	eval "$LIB_PATH_VAR="\$SAMBA4SHAREDDIR:\$$LIB_PATH_VAR"; export $LIB_PATH_VAR"
-	eval echo "$LIB_PATH_VAR=\$$LIB_PATH_VAR"
-	SMBTORTURE4VERSION=`$SMBTORTURE4 --version`
-	if [ -n "$SMBTORTURE4" -a -n "$SMBTORTURE4VERSION" ];then
-		echo "Running Tests with Samba4's smbtorture"
-		echo $SMBTORTURE4VERSION
-		$SCRIPTDIR/test_posix_s3.sh \
-			//$SERVER_IP/tmp $USERNAME $PASSWORD "" \
-		|| failed=`expr $failed + $?`
-	else
-		echo "Skip Tests with Samba4's smbtorture"
-	fi
-}
-
-if test "x$RUNTESTS" = "x" ; then
-	local_s3
-	smbtorture_s3
-	smbtorture_s3_encrypted
-	smbclient_s3
-	smbclient_s3_encrypted
-	wbinfo_s3
-	ntlm_auth_s3
-	net_registry
-	posix_s3
+SMBTORTURE4VERSION=`$SMBTORTURE4 --version`
+if [ -n "$SMBTORTURE4" -a -n "$SMBTORTURE4VERSION" ];then
+	echo "Running Tests with Samba4's smbtorture"
+	echo $SMBTORTURE4VERSION
+	$SCRIPTDIR/test_posix_s3.sh //$SERVER_IP/tmp $USERNAME $PASSWORD "" || failed=`expr $failed + $?`
 else
-	for THIS_TEST in $RUNTESTS; do
-		$THIS_TEST
-	done
+	echo "Skip Tests with Samba4's smbtorture"
 fi
-

Modified: branches/samba/upstream/source/script/tests/timelimit.c
===================================================================
--- branches/samba/upstream/source/script/tests/timelimit.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/tests/timelimit.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -80,8 +80,6 @@
 	}
 
 	signal(SIGTERM, sig_term);
-	signal(SIGINT,  sig_term);
-	signal(SIGQUIT, sig_term);
 	signal(SIGUSR1, sig_usr1);
 	signal(SIGALRM, sig_alrm_term);
 	alarm(maxtime);

Modified: branches/samba/upstream/source/script/uninstallbin.sh.in
===================================================================
--- branches/samba/upstream/source/script/uninstallbin.sh.in	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/script/uninstallbin.sh.in	2008-06-15 01:55:18 UTC (rev 1953)
@@ -26,6 +26,12 @@
       echo "Cannot remove $DESTDIR/$BINDIR/$p2 ... does $USER have privileges? "
     fi
   fi
+
+  # this is a special case, mount needs this in a specific location
+  if test "$p2" = smbmount -a -f "$DESTDIR/sbin/mount.smbfs"; then
+    echo "Removing $DESTDIR/sbin/mount.smbfs "
+    rm -f "$DESTDIR/@rootsbindir@/sbin/mount.smbfs"
+  fi
 done
 
 

Modified: branches/samba/upstream/source/services/services_db.c
===================================================================
--- branches/samba/upstream/source/services/services_db.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/services/services_db.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -33,7 +34,7 @@
 	const char *description;
 };
 
-struct service_display_info builtin_svcs[] = {
+struct service_display_info builtin_svcs[] = {  
   { "Spooler",	      "smbd", 	"Print Spooler", "Internal service for spooling files to print devices" },
   { "NETLOGON",	      "smbd", 	"Net Logon", "File service providing access to policy and profile data (not remotely manageable)" },
   { "RemoteRegistry", "smbd", 	"Remote Registry Service", "Internal service providing remote access to "
@@ -43,7 +44,7 @@
   { NULL, NULL, NULL, NULL }
 };
 
-struct service_display_info common_unix_svcs[] = {
+struct service_display_info common_unix_svcs[] = {  
   { "cups",          NULL, "Common Unix Printing System","Provides unified printing support for all operating systems" },
   { "postfix",       NULL, "Internet Mail Service", 	"Provides support for sending and receiving electonic mail" },
   { "sendmail",      NULL, "Internet Mail Service", 	"Provides support for sending and receiving electonic mail" },
@@ -88,33 +89,31 @@
 
 static SEC_DESC* construct_service_sd( TALLOC_CTX *ctx )
 {
-	SEC_ACE ace[4];
+	SEC_ACE ace[4];	
 	SEC_ACCESS mask;
 	size_t i = 0;
 	SEC_DESC *sd;
 	SEC_ACL *acl;
 	size_t sd_size;
-
+	
 	/* basic access for Everyone */
-
+	
 	init_sec_access(&mask, SERVICE_READ_ACCESS );
 	init_sec_ace(&ace[i++], &global_sid_World, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0);
-
+		
 	init_sec_access(&mask,SERVICE_EXECUTE_ACCESS );
 	init_sec_ace(&ace[i++], &global_sid_Builtin_Power_Users, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0);
-
+	
 	init_sec_access(&mask,SERVICE_ALL_ACCESS );
 	init_sec_ace(&ace[i++], &global_sid_Builtin_Server_Operators, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0);
 	init_sec_ace(&ace[i++], &global_sid_Builtin_Administrators, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0);
-
+	
 	/* create the security descriptor */
-
+	
 	if ( !(acl = make_sec_acl(ctx, NT4_ACL_REVISION, i, ace)) )
 		return NULL;
 
-	if ( !(sd = make_sec_desc(ctx, SECURITY_DESCRIPTOR_REVISION_1,
-				  SEC_DESC_SELF_RELATIVE, NULL, NULL, NULL,
-				  acl, &sd_size)) )
+	if ( !(sd = make_sec_desc(ctx, SEC_DESC_REVISION, SEC_DESC_SELF_RELATIVE, NULL, NULL, NULL, acl, &sd_size)) )
 		return NULL;
 
 	return sd;
@@ -127,54 +126,48 @@
 
 static char *get_common_service_dispname( const char *servicename )
 {
+	static fstring dispname;
 	int i;
-
+	
 	for ( i=0; common_unix_svcs[i].servicename; i++ ) {
-		if (strequal(servicename, common_unix_svcs[i].servicename)) {
-			char *dispname;
-			if (asprintf(&dispname,
-				"%s (%s)",
+		if ( strequal( servicename, common_unix_svcs[i].servicename ) ) {
+			fstr_sprintf( dispname, "%s (%s)", 
 				common_unix_svcs[i].dispname,
-				common_unix_svcs[i].servicename) < 0) {
-				return NULL;
-			}
+				common_unix_svcs[i].servicename );
+				
 			return dispname;
 		}
-	}
-
-	return SMB_STRDUP(servicename );
+	} 
+	
+	fstrcpy( dispname, servicename );
+	
+	return dispname;
 }
 
 /********************************************************************
 ********************************************************************/
 
-static char *cleanup_string( const char *string )
+static char* cleanup_string( const char *string )
 {
-	char *clean = NULL;
+	static pstring clean;
 	char *begin, *end;
-	TALLOC_CTX *ctx = talloc_tos();
 
-	clean = talloc_strdup(ctx, string);
-	if (!clean) {
-		return NULL;
-	}
+	pstrcpy( clean, string );
 	begin = clean;
-
+	
 	/* trim any beginning whilespace */
-
-	while (isspace(*begin)) {
+	
+	while ( isspace(*begin) )
 		begin++;
-	}
 
-	if (*begin == '\0') {
+	if ( *begin == '\0' )
 		return NULL;
-	}
-
+			
 	/* trim any trailing whitespace or carriage returns.
 	   Start at the end and move backwards */
-
+			
 	end = begin + strlen(begin) - 1;
-
+			
 	while ( isspace(*end) || *end=='\n' || *end=='\r' ) {
 		*end = '\0';
 		end--;
@@ -186,60 +179,53 @@
 /********************************************************************
 ********************************************************************/
 
-static bool read_init_file( const char *servicename, struct rcinit_file_information **service_info )
+static BOOL read_init_file( const char *servicename, struct rcinit_file_information **service_info )
 {
 	struct rcinit_file_information *info;
-	char *filepath = NULL;
-	char str[1024];
+	pstring filepath, str;
 	XFILE *f;
 	char *p;
-
+		
 	if ( !(info = TALLOC_ZERO_P( NULL, struct rcinit_file_information ) ) )
 		return False;
-
+	
 	/* attempt the file open */
-
-	filepath = talloc_asprintf(info, "%s/%s/%s", get_dyn_LIBDIR(),
-				SVCCTL_SCRIPT_DIR, servicename);
-	if (!filepath) {
-		TALLOC_FREE(info);
-		return false;
-	}
-	if (!(f = x_fopen( filepath, O_RDONLY, 0 ))) {
+		
+	pstr_sprintf( filepath, "%s/%s/%s", dyn_LIBDIR, SVCCTL_SCRIPT_DIR, servicename );
+	if ( !(f = x_fopen( filepath, O_RDONLY, 0 )) ) {
 		DEBUG(0,("read_init_file: failed to open [%s]\n", filepath));
 		TALLOC_FREE(info);
-		return false;
+		return False;
 	}
-
+	
 	while ( (x_fgets( str, sizeof(str)-1, f )) != NULL ) {
-		/* ignore everything that is not a full line
+		/* ignore everything that is not a full line 
 		   comment starting with a '#' */
-
+		   
 		if ( str[0] != '#' )
 			continue;
-
+		
 		/* Look for a line like '^#.*Description:' */
-
+		
 		if ( (p = strstr( str, "Description:" )) != NULL ) {
 			char *desc;
 
 			p += strlen( "Description:" ) + 1;
-			if ( !p )
+			if ( !p ) 
 				break;
-
+				
 			if ( (desc = cleanup_string(p)) != NULL )
 				info->description = talloc_strdup( info, desc );
 		}
 	}
-
+	
 	x_fclose( f );
-
+	
 	if ( !info->description )
 		info->description = talloc_strdup( info, "External Unix Service" );
-
+	
 	*service_info = info;
-	TALLOC_FREE(filepath);
-
+	
 	return True;
 }
 
@@ -252,65 +238,50 @@
 {
 	UNISTR2 data, dname, ipath, description;
 	uint32 dword;
+	pstring pstr;
 	int i;
-
+	
 	/* These values are hardcoded in all QueryServiceConfig() replies.
 	   I'm just storing them here for cosmetic purposes */
-
+	
 	dword = SVCCTL_AUTO_START;
 	regval_ctr_addvalue( values, "Start", REG_DWORD, (char*)&dword, sizeof(uint32));
-
+	
 	dword = SVCCTL_WIN32_OWN_PROC;
 	regval_ctr_addvalue( values, "Type", REG_DWORD, (char*)&dword, sizeof(uint32));
 
 	dword = SVCCTL_SVC_ERROR_NORMAL;
 	regval_ctr_addvalue( values, "ErrorControl", REG_DWORD, (char*)&dword, sizeof(uint32));
-
+	
 	/* everything runs as LocalSystem */
-
+	
 	init_unistr2( &data, "LocalSystem", UNI_STR_TERMINATE );
 	regval_ctr_addvalue( values, "ObjectName", REG_SZ, (char*)data.buffer, data.uni_str_len*2);
-
+	
 	/* special considerations for internal services and the DisplayName value */
-
+	
 	for ( i=0; builtin_svcs[i].servicename; i++ ) {
 		if ( strequal( name, builtin_svcs[i].servicename ) ) {
-			char *pstr = NULL;
-			if (asprintf(&pstr, "%s/%s/%s",
-					get_dyn_LIBDIR(), SVCCTL_SCRIPT_DIR,
-					builtin_svcs[i].daemon) > 0) {
-				init_unistr2( &ipath, pstr, UNI_STR_TERMINATE );
-				SAFE_FREE(pstr);
-			} else {
-				init_unistr2( &ipath, "", UNI_STR_TERMINATE );
-			}
+			pstr_sprintf( pstr, "%s/%s/%s",dyn_LIBDIR, SVCCTL_SCRIPT_DIR, builtin_svcs[i].daemon );
+			init_unistr2( &ipath, pstr, UNI_STR_TERMINATE );
 			init_unistr2( &description, builtin_svcs[i].description, UNI_STR_TERMINATE );
 			init_unistr2( &dname, builtin_svcs[i].dispname, UNI_STR_TERMINATE );
 			break;
 		}
-	}
-
+	} 
+	
 	/* default to an external service if we haven't found a match */
-
+	
 	if ( builtin_svcs[i].servicename == NULL ) {
-		char *pstr = NULL;
-		char *dispname = NULL;
 		struct rcinit_file_information *init_info = NULL;
 
-		if (asprintf(&pstr, "%s/%s/%s",get_dyn_LIBDIR(),
-					SVCCTL_SCRIPT_DIR, name) > 0) {
-			init_unistr2( &ipath, pstr, UNI_STR_TERMINATE );
-			SAFE_FREE(pstr);
-		} else {
-			init_unistr2( &ipath, "", UNI_STR_TERMINATE );
-		}
-
+		pstr_sprintf( pstr, "%s/%s/%s",dyn_LIBDIR, SVCCTL_SCRIPT_DIR, name );
+		init_unistr2( &ipath, pstr, UNI_STR_TERMINATE );
+		
 		/* lookup common unix display names */
-		dispname = get_common_service_dispname(name);
-		init_unistr2( &dname, dispname ? dispname : "", UNI_STR_TERMINATE );
-		SAFE_FREE(dispname);
+		init_unistr2( &dname, get_common_service_dispname( name ), UNI_STR_TERMINATE );
 
-		/* get info from init file itself */
+		/* get info from init file itself */		
 		if ( read_init_file( name, &init_info ) ) {
 			init_unistr2( &description, init_info->description, UNI_STR_TERMINATE );
 			TALLOC_FREE( init_info );
@@ -319,30 +290,29 @@
 			init_unistr2( &description, "External Unix Service", UNI_STR_TERMINATE );
 		}
 	}
-
+	
 	/* add the new values */
-
+	
 	regval_ctr_addvalue( values, "DisplayName", REG_SZ, (char*)dname.buffer, dname.uni_str_len*2);
 	regval_ctr_addvalue( values, "ImagePath", REG_SZ, (char*)ipath.buffer, ipath.uni_str_len*2);
 	regval_ctr_addvalue( values, "Description", REG_SZ, (char*)description.buffer, description.uni_str_len*2);
-
+	
 	return;
 }
 
 /********************************************************************
 ********************************************************************/
 
-static void add_new_svc_name( REGISTRY_KEY *key_parent, REGSUBKEY_CTR *subkeys,
+static void add_new_svc_name( REGISTRY_KEY *key_parent, REGSUBKEY_CTR *subkeys, 
                               const char *name )
 {
 	REGISTRY_KEY *key_service, *key_secdesc;
 	WERROR wresult;
-	char *path = NULL;
+	pstring path;
 	REGVAL_CTR *values;
 	REGSUBKEY_CTR *svc_subkeys;
 	SEC_DESC *sd;
-	DATA_BLOB sd_blob;
-	NTSTATUS status;
+	prs_struct ps;
 
 	/* add to the list and create the subkey path */
 
@@ -351,36 +321,32 @@
 
 	/* open the new service key */
 
-	if (asprintf(&path, "%s\\%s", KEY_SERVICES, name) < 0) {
-		return;
-	}
-	wresult = regkey_open_internal( NULL, &key_service, path,
-					get_root_nt_token(), REG_KEY_ALL );
+	pstr_sprintf( path, "%s\\%s", KEY_SERVICES, name );
+	wresult = regkey_open_internal( &key_service, path, get_root_nt_token(), 
+		REG_KEY_ALL );
 	if ( !W_ERROR_IS_OK(wresult) ) {
-		DEBUG(0,("add_new_svc_name: key lookup failed! [%s] (%s)\n",
+		DEBUG(0,("add_new_svc_name: key lookup failed! [%s] (%s)\n", 
 			path, dos_errstr(wresult)));
-		SAFE_FREE(path);
 		return;
 	}
-	SAFE_FREE(path);
-
+	
 	/* add the 'Security' key */
 
 	if ( !(svc_subkeys = TALLOC_ZERO_P( key_service, REGSUBKEY_CTR )) ) {
 		DEBUG(0,("add_new_svc_name: talloc() failed!\n"));
-		TALLOC_FREE( key_service );
+		regkey_close_internal( key_service );
 		return;
 	}
-
+	
 	fetch_reg_keys( key_service, svc_subkeys );
 	regsubkey_ctr_addkey( svc_subkeys, "Security" );
 	store_reg_keys( key_service, svc_subkeys );
 
 	/* now for the service values */
-
+	
 	if ( !(values = TALLOC_ZERO_P( key_service, REGVAL_CTR )) ) {
 		DEBUG(0,("add_new_svc_name: talloc() failed!\n"));
-		TALLOC_FREE( key_service );
+		regkey_close_internal( key_service );
 		return;
 	}
 
@@ -389,51 +355,47 @@
 
 	/* cleanup the service key*/
 
-	TALLOC_FREE( key_service );
+	regkey_close_internal( key_service );
 
 	/* now add the security descriptor */
 
-	if (asprintf(&path, "%s\\%s\\%s", KEY_SERVICES, name, "Security") < 0) {
-		return;
-	}
-	wresult = regkey_open_internal( NULL, &key_secdesc, path,
-					get_root_nt_token(), REG_KEY_ALL );
+	pstr_sprintf( path, "%s\\%s\\%s", KEY_SERVICES, name, "Security" );
+	wresult = regkey_open_internal( &key_secdesc, path, get_root_nt_token(), 
+		REG_KEY_ALL );
 	if ( !W_ERROR_IS_OK(wresult) ) {
-		DEBUG(0,("add_new_svc_name: key lookup failed! [%s] (%s)\n",
+		DEBUG(0,("add_new_svc_name: key lookup failed! [%s] (%s)\n", 
 			path, dos_errstr(wresult)));
-		TALLOC_FREE( key_secdesc );
-		SAFE_FREE(path);
+		regkey_close_internal( key_secdesc );
 		return;
 	}
-	SAFE_FREE(path);
 
 	if ( !(values = TALLOC_ZERO_P( key_secdesc, REGVAL_CTR )) ) {
 		DEBUG(0,("add_new_svc_name: talloc() failed!\n"));
-		TALLOC_FREE( key_secdesc );
+		regkey_close_internal( key_secdesc );
 		return;
 	}
 
 	if ( !(sd = construct_service_sd(key_secdesc)) ) {
 		DEBUG(0,("add_new_svc_name: Failed to create default sec_desc!\n"));
-		TALLOC_FREE( key_secdesc );
+		regkey_close_internal( key_secdesc );
 		return;
 	}
-
-	status = marshall_sec_desc(key_secdesc, sd, &sd_blob.data,
-				   &sd_blob.length);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0, ("marshall_sec_desc failed: %s\n",
-			  nt_errstr(status)));
-		TALLOC_FREE(key_secdesc);
-		return;
+	
+	/* stream the printer security descriptor */
+	
+	prs_init( &ps, RPC_MAX_PDU_FRAG_LEN, key_secdesc, MARSHALL);
+	
+	if ( sec_io_desc("sec_desc", &sd, &ps, 0 ) ) {
+		uint32 offset = prs_offset( &ps );
+		regval_ctr_addvalue( values, "Security", REG_BINARY, prs_data_p(&ps), offset );
+		store_reg_values( key_secdesc, values );
 	}
+	
+	/* finally cleanup the Security key */
+	
+	prs_mem_free( &ps );
+	regkey_close_internal( key_secdesc );
 
-	regval_ctr_addvalue(values, "Security", REG_BINARY,
-			    (const char *)sd_blob.data, sd_blob.length);
-	store_reg_values( key_secdesc, values );
-
-	TALLOC_FREE( key_secdesc );
-
 	return;
 }
 
@@ -447,35 +409,35 @@
 	REGSUBKEY_CTR *subkeys;
 	REGISTRY_KEY *key = NULL;
 	WERROR wresult;
-
+	
 	/* bad mojo here if the lookup failed.  Should not happen */
+	
+	wresult = regkey_open_internal( &key, KEY_SERVICES, get_root_nt_token(), 
+		REG_KEY_ALL );
 
-	wresult = regkey_open_internal( NULL, &key, KEY_SERVICES,
-					get_root_nt_token(), REG_KEY_ALL );
-
 	if ( !W_ERROR_IS_OK(wresult) ) {
-		DEBUG(0,("svcctl_init_keys: key lookup failed! (%s)\n",
+		DEBUG(0,("svcctl_init_keys: key lookup failed! (%s)\n", 
 			dos_errstr(wresult)));
 		return;
 	}
-
-	/* lookup the available subkeys */
-
+	
+	/* lookup the available subkeys */	
+	
 	if ( !(subkeys = TALLOC_ZERO_P( key, REGSUBKEY_CTR )) ) {
 		DEBUG(0,("svcctl_init_keys: talloc() failed!\n"));
-		TALLOC_FREE( key );
+		regkey_close_internal( key );
 		return;
 	}
-
+	
 	fetch_reg_keys( key, subkeys );
-
-	/* the builtin services exist */
-
+	
+	/* the builting services exist */
+	
 	for ( i=0; builtin_svcs[i].servicename; i++ )
 		add_new_svc_name( key, subkeys, builtin_svcs[i].servicename );
-
+		
 	for ( i=0; service_list && service_list[i]; i++ ) {
-
+	
 		/* only add new services */
 		if ( regsubkey_ctr_key_exists( subkeys, service_list[i] ) )
 			continue;
@@ -485,7 +447,7 @@
 		add_new_svc_name( key, subkeys, service_list[i] );
 	}
 
-	TALLOC_FREE( key );
+	regkey_close_internal( key );
 
 	/* initialize the control hooks */
 
@@ -496,64 +458,64 @@
 
 /********************************************************************
  This is where we do the dirty work of filling in things like the
- Display name, Description, etc...Always return a default secdesc
+ Display name, Description, etc...Always return a default secdesc 
  in case of any failure.
 ********************************************************************/
 
-SEC_DESC *svcctl_get_secdesc( TALLOC_CTX *ctx, const char *name, NT_USER_TOKEN *token )
+SEC_DESC* svcctl_get_secdesc( TALLOC_CTX *ctx, const char *name, NT_USER_TOKEN *token )
 {
 	REGISTRY_KEY *key;
+	prs_struct ps;
 	REGVAL_CTR *values;
 	REGISTRY_VALUE *val;
+	SEC_DESC *sd = NULL;
 	SEC_DESC *ret_sd = NULL;
-	char *path= NULL;
+	pstring path;
 	WERROR wresult;
-	NTSTATUS status;
-
+	
 	/* now add the security descriptor */
 
-	if (asprintf(&path, "%s\\%s\\%s", KEY_SERVICES, name, "Security") < 0) {
-		return NULL;
-	}
-	wresult = regkey_open_internal( NULL, &key, path, token,
-					REG_KEY_ALL );
+	pstr_sprintf( path, "%s\\%s\\%s", KEY_SERVICES, name, "Security" );
+	wresult = regkey_open_internal( &key, path, token, REG_KEY_ALL );
 	if ( !W_ERROR_IS_OK(wresult) ) {
-		DEBUG(0,("svcctl_get_secdesc: key lookup failed! [%s] (%s)\n",
+		DEBUG(0,("svcctl_get_secdesc: key lookup failed! [%s] (%s)\n", 
 			path, dos_errstr(wresult)));
-		goto done;
+		return NULL;
 	}
 
 	if ( !(values = TALLOC_ZERO_P( key, REGVAL_CTR )) ) {
-		DEBUG(0,("svcctl_get_secdesc: talloc() failed!\n"));
-		goto done;
+		DEBUG(0,("add_new_svc_name: talloc() failed!\n"));
+		regkey_close_internal( key );
+		return NULL;
 	}
 
-	if (fetch_reg_values( key, values ) == -1) {
-		DEBUG(0, ("Error getting registry values\n"));
-		goto done;
-	}
-
+	fetch_reg_values( key, values );
+	
 	if ( !(val = regval_ctr_getvalue( values, "Security" )) ) {
-		goto fallback_to_default_sd;
+		DEBUG(6,("svcctl_get_secdesc: constructing default secdesc for service [%s]\n", 
+			name));
+		regkey_close_internal( key );
+		return construct_service_sd( ctx );
 	}
+	
 
-	/* stream the service security descriptor */
-
-	status = unmarshall_sec_desc(ctx, regval_data_p(val),
-				     regval_size(val), &ret_sd);
-
-	if (NT_STATUS_IS_OK(status)) {
-		goto done;
+	/* stream the printer security descriptor */
+	
+	prs_init( &ps, 0, key, UNMARSHALL);
+	prs_give_memory( &ps, (char *)regval_data_p(val), regval_size(val), False );
+	
+	if ( !sec_io_desc("sec_desc", &sd, &ps, 0 ) ) {
+		regkey_close_internal( key );
+		return construct_service_sd( ctx );
 	}
+	
+	ret_sd = dup_sec_desc( ctx, sd );
+	
+	/* finally cleanup the Security key */
+	
+	prs_mem_free( &ps );
+	regkey_close_internal( key );
 
-fallback_to_default_sd:
-	DEBUG(6, ("svcctl_get_secdesc: constructing default secdesc for "
-		  "service [%s]\n", name));
-	ret_sd = construct_service_sd(ctx);
-
-done:
-	SAFE_FREE(path);
-	TALLOC_FREE(key);
 	return ret_sd;
 }
 
@@ -561,54 +523,45 @@
  Wrapper to make storing a Service sd easier
 ********************************************************************/
 
-bool svcctl_set_secdesc( TALLOC_CTX *ctx, const char *name, SEC_DESC *sec_desc, NT_USER_TOKEN *token )
+BOOL svcctl_set_secdesc( TALLOC_CTX *ctx, const char *name, SEC_DESC *sec_desc, NT_USER_TOKEN *token )
 {
 	REGISTRY_KEY *key;
 	WERROR wresult;
-	char *path = NULL;
+	pstring path;
 	REGVAL_CTR *values;
 	prs_struct ps;
-	bool ret = False;
-
+	BOOL ret = False;
+	
 	/* now add the security descriptor */
 
-	if (asprintf(&path, "%s\\%s\\%s", KEY_SERVICES, name, "Security") < 0) {
-		return false;
-	}
-	wresult = regkey_open_internal( NULL, &key, path, token,
-					REG_KEY_ALL );
+	pstr_sprintf( path, "%s\\%s\\%s", KEY_SERVICES, name, "Security" );
+	wresult = regkey_open_internal( &key, path, token, REG_KEY_ALL );
 	if ( !W_ERROR_IS_OK(wresult) ) {
-		DEBUG(0,("svcctl_get_secdesc: key lookup failed! [%s] (%s)\n",
+		DEBUG(0,("svcctl_get_secdesc: key lookup failed! [%s] (%s)\n", 
 			path, dos_errstr(wresult)));
-		SAFE_FREE(path);
 		return False;
 	}
-	SAFE_FREE(path);
 
 	if ( !(values = TALLOC_ZERO_P( key, REGVAL_CTR )) ) {
-		DEBUG(0,("svcctl_set_secdesc: talloc() failed!\n"));
-		TALLOC_FREE( key );
+		DEBUG(0,("add_new_svc_name: talloc() failed!\n"));
+		regkey_close_internal( key );
 		return False;
 	}
-
+	
 	/* stream the printer security descriptor */
-
-	if (!prs_init( &ps, RPC_MAX_PDU_FRAG_LEN, key, MARSHALL)) {
-		DEBUG(0,("svcctl_set_secdesc: prs_init() failed!\n"));
-		TALLOC_FREE( key );
-		return False;
-	}
-
+	
+	prs_init( &ps, RPC_MAX_PDU_FRAG_LEN, key, MARSHALL);
+	
 	if ( sec_io_desc("sec_desc", &sec_desc, &ps, 0 ) ) {
 		uint32 offset = prs_offset( &ps );
 		regval_ctr_addvalue( values, "Security", REG_BINARY, prs_data_p(&ps), offset );
 		ret = store_reg_values( key, values );
 	}
-
+	
 	/* cleanup */
-
+	
 	prs_mem_free( &ps );
-	TALLOC_FREE( key);
+	regkey_close_internal( key);
 
 	return ret;
 }
@@ -616,95 +569,86 @@
 /********************************************************************
 ********************************************************************/
 
-const char *svcctl_lookup_dispname(TALLOC_CTX *ctx, const char *name, NT_USER_TOKEN *token )
+char* svcctl_lookup_dispname( const char *name, NT_USER_TOKEN *token )
 {
-	char *display_name = NULL;
-	REGISTRY_KEY *key = NULL;
+	static fstring display_name;
+	REGISTRY_KEY *key;
 	REGVAL_CTR *values;
 	REGISTRY_VALUE *val;
-	char *path = NULL;
+	pstring path;
 	WERROR wresult;
-
+	
 	/* now add the security descriptor */
 
-	if (asprintf(&path, "%s\\%s", KEY_SERVICES, name) < 0) {
-		return NULL;
-	}
-	wresult = regkey_open_internal( NULL, &key, path, token,
-					REG_KEY_READ );
+	pstr_sprintf( path, "%s\\%s", KEY_SERVICES, name );
+	wresult = regkey_open_internal( &key, path, token, REG_KEY_READ );
 	if ( !W_ERROR_IS_OK(wresult) ) {
 		DEBUG(0,("svcctl_lookup_dispname: key lookup failed! [%s] (%s)\n", 
 			path, dos_errstr(wresult)));
-		SAFE_FREE(path);
 		goto fail;
 	}
-	SAFE_FREE(path);
 
 	if ( !(values = TALLOC_ZERO_P( key, REGVAL_CTR )) ) {
 		DEBUG(0,("svcctl_lookup_dispname: talloc() failed!\n"));
-		TALLOC_FREE( key );
+		regkey_close_internal( key );
 		goto fail;
 	}
 
 	fetch_reg_values( key, values );
-
+	
 	if ( !(val = regval_ctr_getvalue( values, "DisplayName" )) )
 		goto fail;
 
-	rpcstr_pull_talloc(ctx, &display_name, regval_data_p(val), regval_size(val), 0 );
+	rpcstr_pull( display_name, regval_data_p(val), sizeof(display_name), regval_size(val), 0 );
 
-	TALLOC_FREE( key );
-
+	regkey_close_internal( key );
+	
 	return display_name;
 
 fail:
 	/* default to returning the service name */
-	TALLOC_FREE( key );
-	return talloc_strdup(ctx, name);
+	regkey_close_internal( key );
+	fstrcpy( display_name, name );
+	return display_name;
 }
 
 /********************************************************************
 ********************************************************************/
 
-const char *svcctl_lookup_description(TALLOC_CTX *ctx, const char *name, NT_USER_TOKEN *token )
+char* svcctl_lookup_description( const char *name, NT_USER_TOKEN *token )
 {
-	char *description = NULL;
-	REGISTRY_KEY *key = NULL;
+	static fstring description;
+	REGISTRY_KEY *key;
 	REGVAL_CTR *values;
 	REGISTRY_VALUE *val;
-	char *path = NULL;
+	pstring path;
 	WERROR wresult;
-
+	
 	/* now add the security descriptor */
 
-	if (asprintf(&path, "%s\\%s", KEY_SERVICES, name) < 0) {
-		return NULL;
-	}
-	wresult = regkey_open_internal( NULL, &key, path, token,
-					REG_KEY_READ );
+	pstr_sprintf( path, "%s\\%s", KEY_SERVICES, name );
+	wresult = regkey_open_internal( &key, path, token, REG_KEY_READ );
 	if ( !W_ERROR_IS_OK(wresult) ) {
-		DEBUG(0,("svcctl_lookup_description: key lookup failed! [%s] (%s)\n", 
+		DEBUG(0,("svcctl_lookup_dispname: key lookup failed! [%s] (%s)\n", 
 			path, dos_errstr(wresult)));
-		SAFE_FREE(path);
 		return NULL;
 	}
-	SAFE_FREE(path);
 
 	if ( !(values = TALLOC_ZERO_P( key, REGVAL_CTR )) ) {
-		DEBUG(0,("svcctl_lookup_description: talloc() failed!\n"));
-		TALLOC_FREE( key );
+		DEBUG(0,("svcctl_lookup_dispname: talloc() failed!\n"));
+		regkey_close_internal( key );
 		return NULL;
 	}
 
 	fetch_reg_values( key, values );
+	
+	if ( !(val = regval_ctr_getvalue( values, "Description" )) )
+		fstrcpy( description, "Unix Service");
+	else
+		rpcstr_pull( description, regval_data_p(val), sizeof(description), regval_size(val), 0 );
 
-	if ( !(val = regval_ctr_getvalue( values, "Description" )) ) {
-		TALLOC_FREE( key );
-		return "Unix Service";
-	}
-	rpcstr_pull_talloc(ctx, &description, regval_data_p(val), regval_size(val), 0 );
-	TALLOC_FREE(key);
-
+	regkey_close_internal( key );
+	
 	return description;
 }
 
@@ -712,35 +656,33 @@
 /********************************************************************
 ********************************************************************/
 
-REGVAL_CTR *svcctl_fetch_regvalues( const char *name, NT_USER_TOKEN *token )
+REGVAL_CTR* svcctl_fetch_regvalues( const char *name, NT_USER_TOKEN *token )
 {
-	REGISTRY_KEY *key = NULL;
+	REGISTRY_KEY *key;
 	REGVAL_CTR *values;
-	char *path = NULL;
+	pstring path;
 	WERROR wresult;
-
+	
 	/* now add the security descriptor */
 
-	if (asprintf(&path, "%s\\%s", KEY_SERVICES, name) < 0) {
-		return NULL;
-	}
-	wresult = regkey_open_internal( NULL, &key, path, token,
-					REG_KEY_READ );
+	pstr_sprintf( path, "%s\\%s", KEY_SERVICES, name );
+	wresult = regkey_open_internal( &key, path, token, REG_KEY_READ );
 	if ( !W_ERROR_IS_OK(wresult) ) {
-		DEBUG(0,("svcctl_fetch_regvalues: key lookup failed! [%s] (%s)\n",
+		DEBUG(0,("svcctl_fetch_regvalues: key lookup failed! [%s] (%s)\n", 
 			path, dos_errstr(wresult)));
-		SAFE_FREE(path);
 		return NULL;
 	}
-	SAFE_FREE(path);
 
 	if ( !(values = TALLOC_ZERO_P( NULL, REGVAL_CTR )) ) {
 		DEBUG(0,("svcctl_fetch_regvalues: talloc() failed!\n"));
-		TALLOC_FREE( key );
+		regkey_close_internal( key );
 		return NULL;
 	}
+	
 	fetch_reg_values( key, values );
 
-	TALLOC_FREE( key );
+	regkey_close_internal( key );
+	
 	return values;
 }
+

Modified: branches/samba/upstream/source/services/svc_netlogon.c
===================================================================
--- branches/samba/upstream/source/services/svc_netlogon.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/services/svc_netlogon.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"

Modified: branches/samba/upstream/source/services/svc_rcinit.c
===================================================================
--- branches/samba/upstream/source/services/svc_rcinit.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/services/svc_rcinit.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -24,25 +25,20 @@
 
 static WERROR rcinit_stop( const char *service, SERVICE_STATUS *status )
 {
-	char *command = NULL;
+	pstring command;
 	int ret, fd;
-
-	if (asprintf(&command, "%s/%s/%s stop",
-				get_dyn_LIBDIR(), SVCCTL_SCRIPT_DIR, service) < 0) {
-		return WERR_NOMEM;
-	}
-
+	
+	pstr_sprintf( command, "%s/%s/%s stop", dyn_LIBDIR, SVCCTL_SCRIPT_DIR, service );
+	
 	/* we've already performed the access check when the service was opened */
-
+	
 	become_root();
 	ret = smbrun( command , &fd );
 	unbecome_root();
-
+	
 	DEBUGADD(5, ("rcinit_start: [%s] returned [%d]\n", command, ret));
 	close(fd);
-
-	SAFE_FREE(command);
-
+	
 	ZERO_STRUCTP( status );
 	status->type = 0x0020;
 	status->state = (ret == 0 ) ? 0x0001 : 0x0004;
@@ -56,25 +52,20 @@
 
 static WERROR rcinit_start( const char *service )
 {
-	char *command = NULL;
+	pstring command;
 	int ret, fd;
-
-	if (asprintf(&command, "%s/%s/%s start",
-				get_dyn_LIBDIR(), SVCCTL_SCRIPT_DIR, service) < 0) {
-		return WERR_NOMEM;
-	}
-
+	
+	pstr_sprintf( command, "%s/%s/%s start", dyn_LIBDIR, SVCCTL_SCRIPT_DIR, service );
+	
 	/* we've already performed the access check when the service was opened */
-
+	
 	become_root();
 	ret = smbrun( command , &fd );
 	unbecome_root();
-
+	
 	DEBUGADD(5, ("rcinit_start: [%s] returned [%d]\n", command, ret));
-	close(fd);
+	close(fd);	
 
-	SAFE_FREE(command);
-
 	return ( ret == 0 ) ? WERR_OK : WERR_ACCESS_DENIED;
 }
 
@@ -83,27 +74,22 @@
 
 static WERROR rcinit_status( const char *service, SERVICE_STATUS *status )
 {
-	char *command = NULL;
+	pstring command;
 	int ret, fd;
-
-	if (asprintf(&command, "%s/%s/%s status",
-				get_dyn_LIBDIR(), SVCCTL_SCRIPT_DIR, service) < 0) {
-		return WERR_NOMEM;
-	}
-
+	
+	pstr_sprintf( command, "%s/%s/%s status", dyn_LIBDIR, SVCCTL_SCRIPT_DIR, service );
+	
 	/* we've already performed the access check when the service was opened */
 	/* assume as return code of 0 means that the service is ok.  Anything else
 	   is STOPPED */
-
+	
 	become_root();
 	ret = smbrun( command , &fd );
 	unbecome_root();
-
+	
 	DEBUGADD(5, ("rcinit_start: [%s] returned [%d]\n", command, ret));
 	close(fd);
-
-	SAFE_FREE(command);
-
+	
 	ZERO_STRUCTP( status );
 	status->type = 0x0020;
 	status->state = (ret == 0 ) ? 0x0004 : 0x0001;

Modified: branches/samba/upstream/source/services/svc_spoolss.c
===================================================================
--- branches/samba/upstream/source/services/svc_spoolss.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/services/svc_spoolss.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"

Modified: branches/samba/upstream/source/services/svc_winreg.c
===================================================================
--- branches/samba/upstream/source/services/svc_winreg.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/services/svc_winreg.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"

Modified: branches/samba/upstream/source/services/svc_wins.c
===================================================================
--- branches/samba/upstream/source/services/svc_wins.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/services/svc_wins.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"

Modified: branches/samba/upstream/source/smbd/aio.c
===================================================================
--- branches/samba/upstream/source/smbd/aio.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/aio.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -35,7 +36,7 @@
 	struct aio_extra *next, *prev;
 	SMB_STRUCT_AIOCB acb;
 	files_struct *fsp;
-	bool read_req;
+	BOOL read_req;
 	uint16 mid;
 	char *inbuf;
 	char *outbuf;
@@ -141,27 +142,21 @@
  We can have these many aio buffers in flight.
 *****************************************************************************/
 
-static int aio_pending_size;
+#define AIO_PENDING_SIZE 10
 static sig_atomic_t signals_received;
 static int outstanding_aio_calls;
-static uint16 *aio_pending_array;
+static uint16 aio_pending_array[AIO_PENDING_SIZE];
 
 /****************************************************************************
  Signal handler when an aio request completes.
 *****************************************************************************/
 
-void aio_request_done(uint16_t mid)
-{
-	if (signals_received < aio_pending_size) {
-		aio_pending_array[signals_received] = mid;
-		signals_received++;
-	}
-	/* Else signal is lost. */
-}
-
 static void signal_handler(int sig, siginfo_t *info, void *unused)
 {
-	aio_request_done(info->si_value.sival_int);
+	if (signals_received < AIO_PENDING_SIZE) {
+		aio_pending_array[signals_received] = info->si_value.sival_int;
+		signals_received++;
+	} /* Else signal is lost. */
 	sys_select_signal(RT_SIGNAL_AIO);
 }
 
@@ -169,7 +164,7 @@
  Is there a signal waiting ?
 *****************************************************************************/
 
-bool aio_finished(void)
+BOOL aio_finished(void)
 {
 	return (signals_received != 0);
 }
@@ -182,10 +177,6 @@
 {
 	struct sigaction act;
 
-	aio_pending_size = lp_maxmux();
-	aio_pending_array = SMB_MALLOC_ARRAY(uint16, aio_pending_size);
-	SMB_ASSERT(aio_pending_array != NULL);
-
 	ZERO_STRUCT(act);
 	act.sa_sigaction = signal_handler;
 	act.sa_flags = SA_SIGINFO;
@@ -202,8 +193,9 @@
  Set up an aio request from a SMBreadX call.
 *****************************************************************************/
 
-bool schedule_aio_read_and_X(connection_struct *conn,
-			     struct smb_request *req,
+BOOL schedule_aio_read_and_X(connection_struct *conn,
+			     char *inbuf, char *outbuf,
+			     int length, int len_outbuf,
 			     files_struct *fsp, SMB_OFF_T startpos,
 			     size_t smb_maxcnt)
 {
@@ -212,14 +204,7 @@
 	size_t bufsize;
 	size_t min_aio_read_size = lp_aio_read_size(SNUM(conn));
 
-	if (fsp->base_fsp != NULL) {
-		/* No AIO on streams yet */
-		DEBUG(10, ("AIO on streams not yet supported\n"));
-		return false;
-	}
-
-	if ((!min_aio_read_size || (smb_maxcnt < min_aio_read_size))
-	    && !SMB_VFS_AIO_FORCE(fsp)) {
+	if (!min_aio_read_size || (smb_maxcnt < min_aio_read_size)) {
 		/* Too small a read for aio request. */
 		DEBUG(10,("schedule_aio_read_and_X: read size (%u) too small "
 			  "for minimum aio_read of %u\n",
@@ -230,30 +215,30 @@
 
 	/* Only do this on non-chained and non-chaining reads not using the
 	 * write cache. */
-        if (chain_size !=0 || (CVAL(req->inbuf,smb_vwv0) != 0xFF)
+        if (chain_size !=0 || (CVAL(inbuf,smb_vwv0) != 0xFF)
 	    || (lp_write_cache_size(SNUM(conn)) != 0) ) {
 		return False;
 	}
 
-	if (outstanding_aio_calls >= aio_pending_size) {
+	if (outstanding_aio_calls >= AIO_PENDING_SIZE) {
 		DEBUG(10,("schedule_aio_read_and_X: Already have %d aio "
 			  "activities outstanding.\n",
 			  outstanding_aio_calls ));
 		return False;
 	}
 
-	/* The following is safe from integer wrap as we've already checked
-	   smb_maxcnt is 128k or less. Wct is 12 for read replies */
+	/* The following is safe from integer wrap as we've already
+	   checked smb_maxcnt is 128k or less. */
+	bufsize = PTR_DIFF(smb_buf(outbuf),outbuf) + smb_maxcnt;
 
-	bufsize = smb_size + 12 * 2 + smb_maxcnt;
-
-	if ((aio_ex = create_aio_ex_read(fsp, bufsize, req->mid)) == NULL) {
+	if ((aio_ex = create_aio_ex_read(fsp, bufsize,
+					 SVAL(inbuf,smb_mid))) == NULL) {
 		DEBUG(10,("schedule_aio_read_and_X: malloc fail.\n"));
 		return False;
 	}
 
-	construct_reply_common((char *)req->inbuf, aio_ex->outbuf);
-	srv_set_message(aio_ex->outbuf, 12, 0, True);
+	/* Copy the SMB header already setup in outbuf. */
+	memcpy(aio_ex->outbuf, outbuf, smb_buf(outbuf) - outbuf);
 	SCVAL(aio_ex->outbuf,smb_vwv0,0xFF); /* Never a chained reply. */
 
 	a = &aio_ex->acb;
@@ -289,26 +274,20 @@
  Set up an aio request from a SMBwriteX call.
 *****************************************************************************/
 
-bool schedule_aio_write_and_X(connection_struct *conn,
-			      struct smb_request *req,
-			      files_struct *fsp, char *data,
-			      SMB_OFF_T startpos,
-			      size_t numtowrite)
+BOOL schedule_aio_write_and_X(connection_struct *conn,
+				char *inbuf, char *outbuf,
+				int length, int len_outbuf,
+				files_struct *fsp, char *data,
+				SMB_OFF_T startpos,
+				size_t numtowrite)
 {
 	struct aio_extra *aio_ex;
 	SMB_STRUCT_AIOCB *a;
 	size_t inbufsize, outbufsize;
-	bool write_through = BITSETW(req->inbuf+smb_vwv7,0);
+	BOOL write_through = BITSETW(inbuf+smb_vwv7,0);
 	size_t min_aio_write_size = lp_aio_write_size(SNUM(conn));
 
-	if (fsp->base_fsp != NULL) {
-		/* No AIO on streams yet */
-		DEBUG(10, ("AIO on streams not yet supported\n"));
-		return false;
-	}
-
-	if ((!min_aio_write_size || (numtowrite < min_aio_write_size))
-	    && !SMB_VFS_AIO_FORCE(fsp)) {
+	if (!min_aio_write_size || (numtowrite < min_aio_write_size)) {
 		/* Too small a write for aio request. */
 		DEBUG(10,("schedule_aio_write_and_X: write size (%u) too "
 			  "small for minimum aio_write of %u\n",
@@ -319,12 +298,12 @@
 
 	/* Only do this on non-chained and non-chaining reads not using the
 	 * write cache. */
-        if (chain_size !=0 || (CVAL(req->inbuf,smb_vwv0) != 0xFF)
+        if (chain_size !=0 || (CVAL(inbuf,smb_vwv0) != 0xFF)
 	    || (lp_write_cache_size(SNUM(conn)) != 0) ) {
 		return False;
 	}
 
-	if (outstanding_aio_calls >= aio_pending_size) {
+	if (outstanding_aio_calls >= AIO_PENDING_SIZE) {
 		DEBUG(3,("schedule_aio_write_and_X: Already have %d aio "
 			 "activities outstanding.\n",
 			  outstanding_aio_calls ));
@@ -333,25 +312,23 @@
 			  "(mid = %u)\n",
 			  fsp->fsp_name, (double)startpos,
 			  (unsigned int)numtowrite,
-			  (unsigned int)req->mid ));
+			  (unsigned int)SVAL(inbuf,smb_mid) ));
 		return False;
 	}
 
-	inbufsize =  smb_len(req->inbuf) + 4;
-	reply_outbuf(req, 6, 0);
-	outbufsize = smb_len(req->outbuf) + 4;
+	inbufsize =  smb_len(inbuf) + 4;
+	outbufsize = smb_len(outbuf) + 4;
 	if (!(aio_ex = create_aio_ex_write(fsp, inbufsize, outbufsize,
-					   req->mid))) {
+					   SVAL(inbuf,smb_mid)))) {
 		DEBUG(0,("schedule_aio_write_and_X: malloc fail.\n"));
 		return False;
 	}
 
 	/* Copy the SMB header already setup in outbuf. */
-	memcpy(aio_ex->inbuf, req->inbuf, inbufsize);
+	memcpy(aio_ex->inbuf, inbuf, inbufsize);
 
 	/* Copy the SMB header already setup in outbuf. */
-	memcpy(aio_ex->outbuf, req->outbuf, outbufsize);
-	TALLOC_FREE(req->outbuf);
+	memcpy(aio_ex->outbuf, outbuf, outbufsize);
 	SCVAL(aio_ex->outbuf,smb_vwv0,0xFF); /* Never a chained reply. */
 
 	a = &aio_ex->acb;
@@ -359,7 +336,7 @@
 	/* Now set up the aio record for the write call. */
 	
 	a->aio_fildes = fsp->fh->fd;
-	a->aio_buf = aio_ex->inbuf + (PTR_DIFF(data, req->inbuf));
+	a->aio_buf = aio_ex->inbuf + (PTR_DIFF(data, inbuf));
 	a->aio_nbytes = numtowrite;
 	a->aio_offset = startpos;
 	a->aio_sigevent.sigev_notify = SIGEV_SIGNAL;
@@ -373,8 +350,6 @@
 		return False;
 	}
 
-	release_level_2_oplocks_on_change(fsp);
-
 	if (!write_through && !lp_syncalways(SNUM(fsp->conn))
 	    && fsp->aio_write_behind) {
 		/* Lie to the client and immediately claim we finished the
@@ -382,9 +357,8 @@
 	        SSVAL(aio_ex->outbuf,smb_vwv2,numtowrite);
                 SSVAL(aio_ex->outbuf,smb_vwv4,(numtowrite>>16)&1);
 		show_msg(aio_ex->outbuf);
-		if (!srv_send_smb(smbd_server_fd(),aio_ex->outbuf,
-				IS_CONN_ENCRYPTED(fsp->conn))) {
-			exit_server_cleanly("handle_aio_write: srv_send_smb "
+		if (!send_smb(smbd_server_fd(),aio_ex->outbuf)) {
+			exit_server_cleanly("handle_aio_write: send_smb "
 					    "failed.");
 		}
 		DEBUG(10,("schedule_aio_write_and_X: scheduled aio_write "
@@ -434,31 +408,26 @@
 			   "Error = %s\n",
 			   aio_ex->fsp->fsp_name, strerror(errno) ));
 
+		outsize = (UNIXERROR(ERRDOS,ERRnoaccess));
 		ret = errno;
-		ERROR_NT(map_nt_error_from_unix(ret));
-		outsize = srv_set_message(outbuf,0,0,true);
 	} else {
-		outsize = srv_set_message(outbuf,12,nread,False);
+		outsize = set_message(outbuf,12,nread,False);
 		SSVAL(outbuf,smb_vwv2,0xFFFF); /* Remaining - must be * -1. */
 		SSVAL(outbuf,smb_vwv5,nread);
 		SSVAL(outbuf,smb_vwv6,smb_offset(data,outbuf));
 		SSVAL(outbuf,smb_vwv7,((nread >> 16) & 1));
 		SSVAL(smb_buf(outbuf),-2,nread);
 
-		aio_ex->fsp->fh->pos = aio_ex->acb.aio_offset + nread;
-		aio_ex->fsp->fh->position_information = aio_ex->fsp->fh->pos;
-
 		DEBUG( 3, ( "handle_aio_read_complete file %s max=%d "
 			    "nread=%d\n",
 			    aio_ex->fsp->fsp_name,
-			    (int)aio_ex->acb.aio_nbytes, (int)nread ) );
+			    aio_ex->acb.aio_nbytes, (int)nread ) );
 
 	}
 	smb_setlen(outbuf,outsize - 4);
 	show_msg(outbuf);
-	if (!srv_send_smb(smbd_server_fd(),outbuf,
-			IS_CONN_ENCRYPTED(aio_ex->fsp->conn))) {
-		exit_server_cleanly("handle_aio_read_complete: srv_send_smb "
+	if (!send_smb(smbd_server_fd(),outbuf)) {
+		exit_server_cleanly("handle_aio_read_complete: send_smb "
 				    "failed.");
 	}
 
@@ -524,11 +493,10 @@
 			return 0;
 		}
 
+		UNIXERROR(ERRHRD,ERRdiskfull);
 		ret = errno;
-		ERROR_BOTH(map_nt_error_from_unix(ret), ERRHRD, ERRdiskfull);
-		srv_set_message(outbuf,0,0,true);
         } else {
-		bool write_through = BITSETW(aio_ex->inbuf+smb_vwv7,0);
+		BOOL write_through = BITSETW(aio_ex->inbuf+smb_vwv7,0);
 		NTSTATUS status;
 
         	SSVAL(outbuf,smb_vwv2,nwritten);
@@ -542,20 +510,16 @@
 			 fsp->fnum, (int)numtowrite, (int)nwritten));
 		status = sync_file(fsp->conn,fsp, write_through);
 		if (!NT_STATUS_IS_OK(status)) {
+			UNIXERROR(ERRHRD,ERRdiskfull);
 			ret = errno;
-			ERROR_BOTH(map_nt_error_from_unix(ret),
-				   ERRHRD, ERRdiskfull);
-			srv_set_message(outbuf,0,0,true);
                 	DEBUG(5,("handle_aio_write: sync_file for %s returned %s\n",
 				fsp->fsp_name, nt_errstr(status) ));
 		}
-
-		aio_ex->fsp->fh->pos = aio_ex->acb.aio_offset + nwritten;
 	}
 
 	show_msg(outbuf);
-	if (!srv_send_smb(smbd_server_fd(),outbuf,IS_CONN_ENCRYPTED(fsp->conn))) {
-		exit_server_cleanly("handle_aio_write: srv_send_smb failed.");
+	if (!send_smb(smbd_server_fd(),outbuf)) {
+		exit_server_cleanly("handle_aio_write: send_smb failed.");
 	}
 
 	DEBUG(10,("handle_aio_write_complete: scheduled aio_write completed "
@@ -571,7 +535,7 @@
  was non-zero), False if not.
 *****************************************************************************/
 
-static bool handle_aio_completed(struct aio_extra *aio_ex, int *perr)
+static BOOL handle_aio_completed(struct aio_extra *aio_ex, int *perr)
 {
 	int err;
 
@@ -776,7 +740,7 @@
 			/* Don't delete the aio_extra record as we may have
 			   completed and don't yet know it. Just do the
 			   aio_cancel call and return. */
-			SMB_VFS_AIO_CANCEL(fsp, &aio_ex->acb);
+			SMB_VFS_AIO_CANCEL(fsp,fsp->fh->fd, &aio_ex->acb);
 			aio_ex->fsp = NULL; /* fsp will be closed when we
 					     * return. */
 		}
@@ -784,7 +748,7 @@
 }
 
 #else
-bool aio_finished(void)
+BOOL aio_finished(void)
 {
 	return False;
 }
@@ -798,19 +762,21 @@
 	return False;
 }
 
-bool schedule_aio_read_and_X(connection_struct *conn,
-			     struct smb_request *req,
+BOOL schedule_aio_read_and_X(connection_struct *conn,
+			     char *inbuf, char *outbuf,
+			     int length, int len_outbuf,
 			     files_struct *fsp, SMB_OFF_T startpos,
 			     size_t smb_maxcnt)
 {
 	return False;
 }
 
-bool schedule_aio_write_and_X(connection_struct *conn,
-			      struct smb_request *req,
-			      files_struct *fsp, char *data,
-			      SMB_OFF_T startpos,
-			      size_t numtowrite)
+BOOL schedule_aio_write_and_X(connection_struct *conn,
+                                char *inbuf, char *outbuf,
+                                int length, int len_outbuf,
+                                files_struct *fsp, char *data,
+                                SMB_OFF_T startpos,
+                                size_t numtowrite)
 {
 	return False;
 }
@@ -819,8 +785,8 @@
 {
 }
 
-int wait_for_aio_completion(files_struct *fsp)
+BOOL wait_for_aio_completion(files_struct *fsp)
 {
-	return ENOSYS;
+	return True;
 }
 #endif

Modified: branches/samba/upstream/source/smbd/blocking.c
===================================================================
--- branches/samba/upstream/source/smbd/blocking.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/blocking.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,13 +14,16 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_LOCKING
 
+extern int max_send;
+
 /****************************************************************************
  This is the structure to queue to implement blocking locks.
  notify. It consists of the requesting SMB and the expiry time.
@@ -41,7 +44,6 @@
 	enum brl_type lock_type;
 	char *inbuf;
 	int length;
-	bool encrypted;
 } blocking_lock_record;
 
 /* dlink list we store pending lock records on. */
@@ -50,9 +52,6 @@
 /* dlink list we move cancelled lock records onto. */
 static blocking_lock_record *blocking_lock_cancelled_queue;
 
-/* The event that makes us process our blocking lock queue */
-static struct timed_event *brl_timeout;
-
 /****************************************************************************
  Destructor for the above structure.
 ****************************************************************************/
@@ -67,90 +66,21 @@
  Determine if this is a secondary element of a chained SMB.
   **************************************************************************/
 
-static bool in_chained_smb(void)
+static BOOL in_chained_smb(void)
 {
 	return (chain_size != 0);
 }
 
-static void received_unlock_msg(struct messaging_context *msg,
-				void *private_data,
-				uint32_t msg_type,
-				struct server_id server_id,
-				DATA_BLOB *data);
-static void process_blocking_lock_queue(void);
+static void received_unlock_msg(int msg_type, struct process_id src,
+				void *buf, size_t len,
+				void *private_data);
 
-static void brl_timeout_fn(struct event_context *event_ctx,
-			   struct timed_event *te,
-			   const struct timeval *now,
-			   void *private_data)
-{
-	SMB_ASSERT(brl_timeout == te);
-	TALLOC_FREE(brl_timeout);
-
-	change_to_root_user();	/* TODO: Possibly run all timed events as
-				 * root */
-
-	process_blocking_lock_queue();
-}
-
 /****************************************************************************
- After a change to blocking_lock_queue, recalculate the timed_event for the
- next processing.
-****************************************************************************/
-
-static bool recalc_brl_timeout(void)
-{
-	blocking_lock_record *brl;
-	struct timeval next_timeout;
-
-	TALLOC_FREE(brl_timeout);
-
-	next_timeout = timeval_zero();	
-
-	for (brl = blocking_lock_queue; brl; brl = brl->next) {
-		if (timeval_is_zero(&brl->expire_time)) {
-			/*
-			 * If we're blocked on pid 0xFFFFFFFF this is
-			 * a POSIX lock, so calculate a timeout of
-			 * 10 seconds into the future.
-			 */
-                        if (brl->blocking_pid == 0xFFFFFFFF) {
-				struct timeval psx_to = timeval_current_ofs(10, 0);
-				next_timeout = timeval_min(&next_timeout, &psx_to);
-                        }
-
-			continue;
-		}
-
-		if (timeval_is_zero(&next_timeout)) {
-			next_timeout = brl->expire_time;
-		}
-		else {
-			next_timeout = timeval_min(&next_timeout,
-						   &brl->expire_time);
-		}
-	}
-
-	if (timeval_is_zero(&next_timeout)) {
-		return True;
-	}
-
-	if (!(brl_timeout = event_add_timed(smbd_event_context(), NULL,
-					    next_timeout, "brl_timeout",
-					    brl_timeout_fn, NULL))) {
-		return False;
-	}
-
-	return True;
-}
-
-
-/****************************************************************************
  Function to push a blocking lock request onto the lock queue.
 ****************************************************************************/
 
-bool push_blocking_lock_request( struct byte_range_lock *br_lck,
-		const struct smb_request *req,
+BOOL push_blocking_lock_request( struct byte_range_lock *br_lck,
+		char *inbuf, int length,
 		files_struct *fsp,
 		int lock_timeout,
 		int lock_num,
@@ -161,8 +91,7 @@
 		SMB_BIG_UINT count,
 		uint32 blocking_pid)
 {
-	static bool set_lock_msg;
-	size_t length = smb_len(req->inbuf)+4;
+	static BOOL set_lock_msg;
 	blocking_lock_record *blr;
 	NTSTATUS status;
 
@@ -190,7 +119,7 @@
 		return False;
 	}
 
-	blr->com_type = CVAL(req->inbuf,smb_com);
+	blr->com_type = CVAL(inbuf,smb_com);
 	blr->fsp = fsp;
 	if (lock_timeout == -1) {
 		blr->expire_time.tv_sec = 0;
@@ -206,12 +135,11 @@
 	blr->lock_type = lock_type;
 	blr->offset = offset;
 	blr->count = count;
-	memcpy(blr->inbuf, req->inbuf, length);
+	memcpy(blr->inbuf, inbuf, length);
 	blr->length = length;
-	blr->encrypted = req->encrypted;
 
 	/* Add a pending lock record for this. */
-	status = brl_lock(smbd_messaging_context(), br_lck,
+	status = brl_lock(br_lck,
 			lock_pid,
 			procid_self(),
 			offset,
@@ -229,42 +157,53 @@
 	}
 
 	DLIST_ADD_END(blocking_lock_queue, blr, blocking_lock_record *);
-	recalc_brl_timeout();
 
 	/* Ensure we'll receive messages when this is unlocked. */
 	if (!set_lock_msg) {
-		messaging_register(smbd_messaging_context(), NULL,
-				   MSG_SMB_UNLOCK, received_unlock_msg);
+		message_register(MSG_SMB_UNLOCK, received_unlock_msg,
+				 NULL);
 		set_lock_msg = True;
 	}
 
-	DEBUG(3,("push_blocking_lock_request: lock request length=%u blocked with "
+	DEBUG(3,("push_blocking_lock_request: lock request length=%d blocked with "
 		"expiry time (%u sec. %u usec) (+%d msec) for fnum = %d, name = %s\n",
-		(unsigned int)length, (unsigned int)blr->expire_time.tv_sec,
+		length, (unsigned int)blr->expire_time.tv_sec,
 		(unsigned int)blr->expire_time.tv_usec, lock_timeout,
 		blr->fsp->fnum, blr->fsp->fsp_name ));
 
 	/* Push the MID of this packet on the signing queue. */
-	srv_defer_sign_response(SVAL(req->inbuf,smb_mid));
+	srv_defer_sign_response(SVAL(inbuf,smb_mid));
 
 	return True;
 }
 
 /****************************************************************************
+ Return a smd with a given size.
+*****************************************************************************/
+
+static void send_blocking_reply(char *outbuf, int outsize)
+{
+	if(outsize > 4)
+		smb_setlen(outbuf,outsize - 4);
+
+	if (!send_smb(smbd_server_fd(),outbuf))
+		exit_server_cleanly("send_blocking_reply: send_smb failed.");
+}
+
+/****************************************************************************
  Return a lockingX success SMB.
 *****************************************************************************/
 
 static void reply_lockingX_success(blocking_lock_record *blr)
 {
-	struct smb_request *req;
+	char *outbuf = get_OutBuffer();
+	int bufsize = BUFFER_SIZE;
+	char *inbuf = blr->inbuf;
+	int outsize = 0;
 
-	if (!(req = talloc(talloc_tos(), struct smb_request))) {
-		smb_panic("Could not allocate smb_request");
-	}
+	construct_reply_common(inbuf, outbuf);
+	set_message(outbuf,2,0,True);
 
-	init_smb_request(req, (uint8 *)blr->inbuf, 0, blr->encrypted);
-	reply_outbuf(req, 2, 0);
-
 	/*
 	 * As this message is a lockingX call we must handle
 	 * any following chained message correctly.
@@ -273,13 +212,11 @@
 	 * that here and must set up the chain info manually.
 	 */
 
-	chain_reply(req);
+	outsize = chain_reply(inbuf,outbuf,blr->length,bufsize);
 
-	if (!srv_send_smb(smbd_server_fd(),
-			(char *)req->outbuf,
-			IS_CONN_ENCRYPTED(blr->fsp->conn))) {
-		exit_server_cleanly("send_blocking_reply: srv_send_smb failed.");
-	}
+	outsize += chain_size;
+
+	send_blocking_reply(outbuf,outsize);
 }
 
 /****************************************************************************
@@ -288,9 +225,8 @@
 
 static void generic_blocking_lock_error(blocking_lock_record *blr, NTSTATUS status)
 {
-	char outbuf[smb_size];
+	char *outbuf = get_OutBuffer();
 	char *inbuf = blr->inbuf;
-
 	construct_reply_common(inbuf, outbuf);
 
 	/* whenever a timeout is given w2k maps LOCK_NOT_GRANTED to
@@ -303,21 +239,19 @@
 		/* Store the last lock error. */
 		files_struct *fsp = blr->fsp;
 
-		if (fsp) {
-			fsp->last_lock_failure.context.smbpid = blr->lock_pid;
-			fsp->last_lock_failure.context.tid = fsp->conn->cnum;
-			fsp->last_lock_failure.context.pid = procid_self();
-			fsp->last_lock_failure.start = blr->offset;
-			fsp->last_lock_failure.size = blr->count;
-			fsp->last_lock_failure.fnum = fsp->fnum;
-			fsp->last_lock_failure.lock_type = READ_LOCK; /* Don't care. */
-			fsp->last_lock_failure.lock_flav = blr->lock_flav;
-		}
+		fsp->last_lock_failure.context.smbpid = blr->lock_pid;
+		fsp->last_lock_failure.context.tid = fsp->conn->cnum;
+		fsp->last_lock_failure.context.pid = procid_self();
+		fsp->last_lock_failure.start = blr->offset;
+		fsp->last_lock_failure.size = blr->count;
+		fsp->last_lock_failure.fnum = fsp->fnum;
+		fsp->last_lock_failure.lock_type = READ_LOCK; /* Don't care. */
+		fsp->last_lock_failure.lock_flav = blr->lock_flav;
 	}
 
 	ERROR_NT(status);
-	if (!srv_send_smb(smbd_server_fd(),outbuf, blr->encrypted)) {
-		exit_server_cleanly("generic_blocking_lock_error: srv_send_smb failed.");
+	if (!send_smb(smbd_server_fd(),outbuf)) {
+		exit_server_cleanly("generic_blocking_lock_error: send_smb failed.");
 	}
 }
 
@@ -334,7 +268,7 @@
 	SMB_BIG_UINT count = (SMB_BIG_UINT)0, offset = (SMB_BIG_UINT) 0;
 	uint32 lock_pid;
 	unsigned char locktype = CVAL(inbuf,smb_vwv3);
-	bool large_file_format = (locktype & LOCKING_ANDX_LARGE_FILES);
+	BOOL large_file_format = (locktype & LOCKING_ANDX_LARGE_FILES);
 	char *data;
 	int i;
 
@@ -352,7 +286,7 @@
 	 */
 	
 	for(i = blr->lock_num - 1; i >= 0; i--) {
-		bool err;
+		BOOL err;
 		
 		lock_pid = get_lock_pid( data, i, large_file_format);
 		count = get_lock_count( data, i, large_file_format);
@@ -363,8 +297,7 @@
 		 * request would never have been queued. JRA.
 		 */
 		
-		do_unlock(smbd_messaging_context(),
-			fsp,
+		do_unlock(fsp,
 			lock_pid,
 			count,
 			offset,
@@ -387,7 +320,7 @@
 	case SMBtrans2:
 	case SMBtranss2:
 		{
-			char outbuf[smb_size];
+			char *outbuf = get_OutBuffer();
 			char *inbuf = blr->inbuf;
 			construct_reply_common(inbuf, outbuf);
 			/* construct_reply_common has done us the favor to pre-fill the
@@ -395,10 +328,8 @@
 			 */
 			SCVAL(outbuf,smb_com,SMBtrans2);
 			ERROR_NT(status);
-			if (!srv_send_smb(smbd_server_fd(),
-					outbuf,
-					IS_CONN_ENCRYPTED(blr->fsp->conn))) {
-				exit_server_cleanly("blocking_lock_reply_error: srv_send_smb failed.");
+			if (!send_smb(smbd_server_fd(),outbuf)) {
+				exit_server_cleanly("blocking_lock_reply_error: send_smb failed.");
 			}
 			break;
 		}
@@ -413,7 +344,7 @@
  Returns True if we want to be removed from the list.
 *****************************************************************************/
 
-static bool process_lockingX(blocking_lock_record *blr)
+static BOOL process_lockingX(blocking_lock_record *blr)
 {
 	char *inbuf = blr->inbuf;
 	unsigned char locktype = CVAL(inbuf,smb_vwv3);
@@ -422,7 +353,7 @@
 	uint16 num_locks = SVAL(inbuf,smb_vwv7);
 	SMB_BIG_UINT count = (SMB_BIG_UINT)0, offset = (SMB_BIG_UINT)0;
 	uint32 lock_pid;
-	bool large_file_format = (locktype & LOCKING_ANDX_LARGE_FILES);
+	BOOL large_file_format = (locktype & LOCKING_ANDX_LARGE_FILES);
 	char *data;
 	NTSTATUS status = NT_STATUS_OK;
 
@@ -435,7 +366,7 @@
 
 	for(; blr->lock_num < num_locks; blr->lock_num++) {
 		struct byte_range_lock *br_lck = NULL;
-		bool err;
+		BOOL err;
 
 		lock_pid = get_lock_pid( data, blr->lock_num, large_file_format);
 		count = get_lock_count( data, blr->lock_num, large_file_format);
@@ -446,8 +377,7 @@
 		 * request would never have been queued. JRA.
 		 */
 		errno = 0;
-		br_lck = do_lock(smbd_messaging_context(),
-				fsp,
+		br_lck = do_lock(fsp,
 				lock_pid,
 				count,
 				offset, 
@@ -503,13 +433,13 @@
  Returns True if we want to be removed from the list.
 *****************************************************************************/
 
-static bool process_trans2(blocking_lock_record *blr)
+static BOOL process_trans2(blocking_lock_record *blr)
 {
-	struct smb_request *req;
+	char *inbuf = blr->inbuf;
+	char *outbuf;
 	char params[2];
 	NTSTATUS status;
-	struct byte_range_lock *br_lck = do_lock(smbd_messaging_context(),
-						blr->fsp,
+	struct byte_range_lock *br_lck = do_lock(blr->fsp,
 						blr->lock_pid,
 						blr->count,
 						blr->offset,
@@ -534,18 +464,12 @@
 	}
 
 	/* We finally got the lock, return success. */
-
-	if (!(req = talloc(talloc_tos(), struct smb_request))) {
-		blocking_lock_reply_error(blr, NT_STATUS_NO_MEMORY);
-		return True;
-	}
-
-	init_smb_request(req, (uint8 *)blr->inbuf, 0, blr->encrypted);
-
-	SCVAL(req->inbuf, smb_com, SMBtrans2);
+	outbuf = get_OutBuffer();
+	construct_reply_common(inbuf, outbuf);
+	SCVAL(outbuf,smb_com,SMBtrans2);
 	SSVAL(params,0,0);
 	/* Fake up max_data_bytes here - we know it fits. */
-	send_trans2_replies(blr->fsp->conn, req, params, 2, NULL, 0, 0xffff);
+	send_trans2_replies(outbuf, max_send, params, 2, NULL, 0, 0xffff);
 	return True;
 }
 
@@ -555,7 +479,7 @@
  Returns True if we want to be removed from the list.
 *****************************************************************************/
 
-static bool blocking_lock_record_process(blocking_lock_record *blr)
+static BOOL blocking_lock_record_process(blocking_lock_record *blr)
 {
 	switch(blr->com_type) {
 		case SMBlockingX:
@@ -606,9 +530,6 @@
 					locktype,
 					NT_STATUS_RANGE_NOT_LOCKED);
 			}
-			/* We're closing the file fsp here, so ensure
-			 * we don't have a dangling pointer. */
-			blr->fsp = NULL;
 		}
 	}
 }
@@ -625,7 +546,7 @@
 		next = blr->next;
 		if(SVAL(blr->inbuf,smb_mid) == mid) {
 			files_struct *fsp = blr->fsp;
-			struct byte_range_lock *br_lck = brl_get_locks(talloc_tos(), fsp);
+			struct byte_range_lock *br_lck = brl_get_locks(NULL, fsp);
 
 			if (br_lck) {
 				DEBUG(10,("remove_pending_lock_requests_by_mid - removing request type %d for \
@@ -651,7 +572,7 @@
  Is this mid a blocking lock request on the queue ?
 *****************************************************************************/
 
-bool blocking_lock_was_deferred(int mid)
+BOOL blocking_lock_was_deferred(int mid)
 {
 	blocking_lock_record *blr, *next = NULL;
 
@@ -668,25 +589,75 @@
   Set a flag as an unlock request affects one of our pending locks.
 *****************************************************************************/
 
-static void received_unlock_msg(struct messaging_context *msg,
-				void *private_data,
-				uint32_t msg_type,
-				struct server_id server_id,
-				DATA_BLOB *data)
+static void received_unlock_msg(int msg_type, struct process_id src,
+				void *buf, size_t len,
+				void *private_data)
 {
 	DEBUG(10,("received_unlock_msg\n"));
 	process_blocking_lock_queue();
 }
 
 /****************************************************************************
+ Return the number of milliseconds to the next blocking locks timeout, or default_timeout
+*****************************************************************************/
+
+unsigned int blocking_locks_timeout_ms(unsigned int default_timeout_ms)
+{
+	unsigned int timeout_ms = default_timeout_ms;
+	struct timeval tv_curr;
+	SMB_BIG_INT min_tv_dif_us = default_timeout_ms * 1000;
+	blocking_lock_record *blr = blocking_lock_queue;
+
+	/* note that we avoid the GetTimeOfDay() syscall if there are no blocking locks */
+	if (!blr) {
+		return timeout_ms;
+	}
+
+	tv_curr = timeval_current();
+
+	for (; blr; blr = blr->next) {
+		SMB_BIG_INT tv_dif_us;
+
+		if (timeval_is_zero(&blr->expire_time)) {
+			/*
+			 * If we're blocked on pid 0xFFFFFFFF this is
+			 * a POSIX lock, so calculate a timeout of
+			 * 10 seconds.
+			 */
+			if (blr->blocking_pid == 0xFFFFFFFF) {
+				tv_dif_us = 10 * 1000 * 1000;
+				min_tv_dif_us = MIN(min_tv_dif_us, tv_dif_us);
+			}
+			continue; /* Never timeout. */
+		}
+
+		tv_dif_us = usec_time_diff(&blr->expire_time, &tv_curr);
+		min_tv_dif_us = MIN(min_tv_dif_us, tv_dif_us);
+	}
+
+	if (min_tv_dif_us < 0) {
+		min_tv_dif_us = 0;
+	}
+
+	timeout_ms = (unsigned int)(min_tv_dif_us / (SMB_BIG_INT)1000);
+
+	if (timeout_ms < 1) {
+		timeout_ms = 1;
+	}
+
+	DEBUG(10,("blocking_locks_timeout_ms: returning %u\n", timeout_ms));
+
+	return timeout_ms;
+}
+
+/****************************************************************************
  Process the blocking lock queue. Note that this is only called as root.
 *****************************************************************************/
 
-static void process_blocking_lock_queue(void)
+void process_blocking_lock_queue(void)
 {
 	struct timeval tv_curr = timeval_current();
 	blocking_lock_record *blr, *next = NULL;
-	bool recalc_timeout = False;
 
 	/*
 	 * Go through the queue and see if we can get any of the locks.
@@ -715,7 +686,7 @@
 			fsp->fnum, fsp->fsp_name ));
 
 		if(!change_to_user(conn,vuid)) {
-			struct byte_range_lock *br_lck = brl_get_locks(talloc_tos(), fsp);
+			struct byte_range_lock *br_lck = brl_get_locks(NULL, fsp);
 
 			/*
 			 * Remove the entry and return an error to the client.
@@ -736,12 +707,11 @@
 			blocking_lock_reply_error(blr,NT_STATUS_ACCESS_DENIED);
 			DLIST_REMOVE(blocking_lock_queue, blr);
 			free_blocking_lock_record(blr);
-			recalc_timeout = True;
 			continue;
 		}
 
 		if(!set_current_service(conn,SVAL(blr->inbuf,smb_flg),True)) {
-			struct byte_range_lock *br_lck = brl_get_locks(talloc_tos(), fsp);
+			struct byte_range_lock *br_lck = brl_get_locks(NULL, fsp);
 
 			/*
 			 * Remove the entry and return an error to the client.
@@ -761,7 +731,6 @@
 			blocking_lock_reply_error(blr,NT_STATUS_ACCESS_DENIED);
 			DLIST_REMOVE(blocking_lock_queue, blr);
 			free_blocking_lock_record(blr);
-			recalc_timeout = True;
 			change_to_root_user();
 			continue;
 		}
@@ -773,7 +742,7 @@
 		 */
 
 		if(blocking_lock_record_process(blr)) {
-			struct byte_range_lock *br_lck = brl_get_locks(talloc_tos(), fsp);
+			struct byte_range_lock *br_lck = brl_get_locks(NULL, fsp);
 
 			if (br_lck) {
 				brl_lock_cancel(br_lck,
@@ -787,7 +756,6 @@
 
 			DLIST_REMOVE(blocking_lock_queue, blr);
 			free_blocking_lock_record(blr);
-			recalc_timeout = True;
 			change_to_root_user();
 			continue;
 		}
@@ -800,7 +768,7 @@
 		 */
 
 		if (!timeval_is_zero(&blr->expire_time) && timeval_compare(&blr->expire_time, &tv_curr) <= 0) {
-			struct byte_range_lock *br_lck = brl_get_locks(talloc_tos(), fsp);
+			struct byte_range_lock *br_lck = brl_get_locks(NULL, fsp);
 
 			/*
 			 * Lock expired - throw away all previously
@@ -823,12 +791,9 @@
 			blocking_lock_reply_error(blr,NT_STATUS_FILE_LOCK_CONFLICT);
 			DLIST_REMOVE(blocking_lock_queue, blr);
 			free_blocking_lock_record(blr);
-			recalc_timeout = True;
+			continue;
 		}
-	}
 
-	if (recalc_timeout) {
-		recalc_brl_timeout();
 	}
 }
 
@@ -838,24 +803,23 @@
 
 #define MSG_BLOCKING_LOCK_CANCEL_SIZE (sizeof(blocking_lock_record *) + sizeof(NTSTATUS))
 
-static void process_blocking_lock_cancel_message(struct messaging_context *ctx,
-						 void *private_data,
-						 uint32_t msg_type,
-						 struct server_id server_id,
-						 DATA_BLOB *data)
+static void process_blocking_lock_cancel_message(int msg_type,
+						 struct process_id src,
+						 void *buf, size_t len,
+						 void *private_data)
 {
 	NTSTATUS err;
-	const char *msg = (const char *)data->data;
+	const char *msg = (const char *)buf;
 	blocking_lock_record *blr;
 
-	if (data->data == NULL) {
-		smb_panic("process_blocking_lock_cancel_message: null msg");
+	if (buf == NULL) {
+		smb_panic("process_blocking_lock_cancel_message: null msg\n");
 	}
 
-	if (data->length != MSG_BLOCKING_LOCK_CANCEL_SIZE) {
+	if (len != MSG_BLOCKING_LOCK_CANCEL_SIZE) {
 		DEBUG(0, ("process_blocking_lock_cancel_message: "
-			  "Got invalid msg len %d\n", (int)data->length));
-		smb_panic("process_blocking_lock_cancel_message: bad msg");
+			"Got invalid msg len %d\n", (int)len));
+		smb_panic("process_blocking_lock_cancel_message: bad msg\n");
         }
 
 	memcpy(&blr, msg, sizeof(blr));
@@ -873,7 +837,7 @@
  Send ourselves a blocking lock cancelled message. Handled asynchronously above.
 *****************************************************************************/
 
-bool blocking_lock_cancel(files_struct *fsp,
+BOOL blocking_lock_cancel(files_struct *fsp,
 			uint32 lock_pid,
 			SMB_BIG_UINT offset,
 			SMB_BIG_UINT count,
@@ -881,15 +845,15 @@
 			unsigned char locktype,
                         NTSTATUS err)
 {
-	static bool initialized;
+	static BOOL initialized;
 	char msg[MSG_BLOCKING_LOCK_CANCEL_SIZE];
 	blocking_lock_record *blr;
 
 	if (!initialized) {
 		/* Register our message. */
-		messaging_register(smbd_messaging_context(), NULL,
-				   MSG_SMB_BLOCKING_LOCK_CANCEL,
-				   process_blocking_lock_cancel_message);
+		message_register(MSG_SMB_BLOCKING_LOCK_CANCEL,
+				 process_blocking_lock_cancel_message,
+				 NULL);
 
 		initialized = True;
 	}
@@ -923,9 +887,9 @@
 	memcpy(msg, &blr, sizeof(blr));
 	memcpy(&msg[sizeof(blr)], &err, sizeof(NTSTATUS));
 
-	messaging_send_buf(smbd_messaging_context(), procid_self(),
-			   MSG_SMB_BLOCKING_LOCK_CANCEL,
-			   (uint8 *)&msg, sizeof(msg));
+	message_send_pid(pid_to_procid(sys_getpid()),
+			MSG_SMB_BLOCKING_LOCK_CANCEL,
+			&msg, sizeof(msg), True);
 
 	return True;
 }

Modified: branches/samba/upstream/source/smbd/change_trust_pw.c
===================================================================
--- branches/samba/upstream/source/smbd/change_trust_pw.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/change_trust_pw.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *  
  *  This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
  *  GNU General Public License for more details.
  *  
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
@@ -30,7 +31,7 @@
 NTSTATUS change_trust_account_password( const char *domain, const char *remote_machine)
 {
 	NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL;
-	struct sockaddr_storage pdc_ss;
+	struct in_addr pdc_ip;
 	fstring dc_name;
 	struct cli_state *cli = NULL;
 	struct rpc_pipe_client *netlogon_pipe = NULL;
@@ -41,12 +42,12 @@
 	if (remote_machine == NULL || !strcmp(remote_machine, "*")) {
 		/* Use the PDC *only* for this */
 	
-		if ( !get_pdc_ip(domain, &pdc_ss) ) {
+		if ( !get_pdc_ip(domain, &pdc_ip) ) {
 			DEBUG(0,("Can't get IP for PDC for domain %s\n", domain));
 			goto failed;
 		}
 
-		if ( !name_status_find( domain, 0x1b, 0x20, &pdc_ss, dc_name) )
+		if ( !name_status_find( domain, 0x1b, 0x20, pdc_ip, dc_name) )
 			goto failed;
 	} else {
 		/* supoport old deprecated "smbpasswd -j DOMAIN -r MACHINE" behavior */
@@ -82,7 +83,7 @@
 		goto failed;
 	}
 
-	nt_status = trust_pw_find_change_and_store_it(netlogon_pipe, netlogon_pipe->mem_ctx, domain);
+	nt_status = trust_pw_find_change_and_store_it(netlogon_pipe, cli->mem_ctx, domain);
   
 	cli_shutdown(cli);
 	cli = NULL;
@@ -90,7 +91,7 @@
 failed:
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		DEBUG(0,("%s : change_trust_account_password: Failed to change password for domain %s.\n", 
-			current_timestring(debug_ctx(), False), domain));
+			current_timestring(False), domain));
 	}
 	else
 		DEBUG(5,("change_trust_account_password: sucess!\n"));

Modified: branches/samba/upstream/source/smbd/chgpasswd.c
===================================================================
--- branches/samba/upstream/source/smbd/chgpasswd.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/chgpasswd.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /* These comments regard the code to change the user's unix password: */
@@ -25,7 +26,7 @@
  * user who is attempting to change the password.
  */
 
-/*
+/* 
  * This code was copied/borrowed and stolen from various sources.
  * The primary source was the poppasswd.c from the authors of POPMail. This software
  * was included as a client to change passwords using the 'passwd' program
@@ -50,41 +51,39 @@
 extern struct passdb_ops pdb_ops;
 
 static NTSTATUS check_oem_password(const char *user,
-				   uchar password_encrypted_with_lm_hash[516],
+				   uchar password_encrypted_with_lm_hash[516], 
 				   const uchar old_lm_hash_encrypted[16],
-				   uchar password_encrypted_with_nt_hash[516],
+				   uchar password_encrypted_with_nt_hash[516], 
 				   const uchar old_nt_hash_encrypted[16],
-				   struct samu **hnd,
-				   char **pp_new_passwd);
+				   struct samu **hnd, char *new_passwd,
+				   int new_passwd_size);
 
 #if ALLOW_CHANGE_PASSWORD
 
 static int findpty(char **slave)
 {
-	int master = -1;
-	char *line = NULL;
-	SMB_STRUCT_DIR *dirp = NULL;
+	int master;
+	static fstring line;
+	SMB_STRUCT_DIR *dirp;
 	const char *dpname;
 
-	*slave = NULL;
-
 #if defined(HAVE_GRANTPT)
 	/* Try to open /dev/ptmx. If that fails, fall through to old method. */
-	if ((master = sys_open("/dev/ptmx", O_RDWR, 0)) >= 0) {
+	if ((master = sys_open("/dev/ptmx", O_RDWR, 0)) >= 0)
+	{
 		grantpt(master);
 		unlockpt(master);
-		line = (char *)ptsname(master);
-		if (line) {
-			*slave = SMB_STRDUP(line);
-		}
-
-		if (*slave == NULL) {
+		*slave = (char *)ptsname(master);
+		if (*slave == NULL)
+		{
 			DEBUG(0,
 			      ("findpty: Unable to create master/slave pty pair.\n"));
 			/* Stop fd leak on error. */
 			close(master);
 			return -1;
-		} else {
+		}
+		else
+		{
 			DEBUG(10,
 			      ("findpty: Allocated slave pty %s\n", *slave));
 			return (master);
@@ -92,25 +91,22 @@
 	}
 #endif /* HAVE_GRANTPT */
 
-	line = SMB_STRDUP("/dev/ptyXX");
-	if (!line) {
-		return (-1);
-	}
+	fstrcpy(line, "/dev/ptyXX");
 
 	dirp = sys_opendir("/dev");
-	if (!dirp) {
-		SAFE_FREE(line);
+	if (!dirp)
 		return (-1);
-	}
-
-	while ((dpname = readdirname(dirp)) != NULL) {
-		if (strncmp(dpname, "pty", 3) == 0 && strlen(dpname) == 5) {
+	while ((dpname = readdirname(dirp)) != NULL)
+	{
+		if (strncmp(dpname, "pty", 3) == 0 && strlen(dpname) == 5)
+		{
 			DEBUG(3,
 			      ("pty: try to open %s, line was %s\n", dpname,
 			       line));
 			line[8] = dpname[3];
 			line[9] = dpname[4];
-			if ((master = sys_open(line, O_RDWR, 0)) >= 0) {
+			if ((master = sys_open(line, O_RDWR, 0)) >= 0)
+			{
 				DEBUG(3, ("pty: opened %s\n", line));
 				line[5] = 't';
 				*slave = line;
@@ -120,12 +116,11 @@
 		}
 	}
 	sys_closedir(dirp);
-	SAFE_FREE(line);
 	return (-1);
 }
 
 static int dochild(int master, const char *slavedev, const struct passwd *pass,
-		   const char *passwordprogram, bool as_root)
+		   const char *passwordprogram, BOOL as_root)
 {
 	int slave;
 	struct termios stermios;
@@ -243,20 +238,17 @@
 
 static int expect(int master, char *issue, char *expected)
 {
-	char buffer[1024];
-	int attempts, timeout, nread;
-	size_t len;
-	bool match = False;
+	pstring buffer;
+	int attempts, timeout, nread, len;
+	BOOL match = False;
 
 	for (attempts = 0; attempts < 2; attempts++) {
-		NTSTATUS status;
 		if (!strequal(issue, ".")) {
 			if (lp_passwd_chat_debug())
 				DEBUG(100, ("expect: sending [%s]\n", issue));
 
 			if ((len = sys_write(master, issue, strlen(issue))) != strlen(issue)) {
-				DEBUG(2,("expect: (short) write returned %d\n",
-					 (int)len ));
+				DEBUG(2,("expect: (short) write returned %d\n", len ));
 				return False;
 			}
 		}
@@ -269,32 +261,22 @@
 		nread = 0;
 		buffer[nread] = 0;
 
-		while (True) {
-			status = read_socket_with_timeout(
-				master, buffer + nread, 1,
-				sizeof(buffer) - nread - 1,
-				timeout, &len);
-
-			if (!NT_STATUS_IS_OK(status)) {
-				break;
-			}
+		while ((len = read_socket_with_timeout(master, buffer + nread, 1,
+						       sizeof(buffer) - nread - 1,
+						       timeout)) > 0) {
 			nread += len;
 			buffer[nread] = 0;
 
 			{
 				/* Eat leading/trailing whitespace before match. */
-				char *str = SMB_STRDUP(buffer);
-				if (!str) {
-					DEBUG(2,("expect: ENOMEM\n"));
-					return False;
-				}
-				trim_char(str, ' ', ' ');
+				pstring str;
+				pstrcpy( str, buffer);
+				trim_char( str, ' ', ' ');
 
 				if ((match = unix_wild_match(expected, str)) == True) {
 					/* Now data has started to return, lower timeout. */
 					timeout = lp_passwd_chat_timeout() * 100;
 				}
-				SAFE_FREE(str);
 			}
 		}
 
@@ -305,8 +287,8 @@
 		if (match)
 			break;
 
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(2, ("expect: %s\n", nt_errstr(status)));
+		if (len < 0) {
+			DEBUG(2, ("expect: %s\n", strerror(errno)));
 			return False;
 		}
 	}
@@ -325,61 +307,45 @@
 
 static int talktochild(int master, const char *seq)
 {
-	TALLOC_CTX *frame = talloc_stackframe();
 	int count = 0;
-	char *issue;
-	char *expected;
+	fstring issue, expected;
 
-	issue = talloc_strdup(frame, ".");
-	if (!issue) {
-		TALLOC_FREE(frame);
-		return false;
-	}
+	fstrcpy(issue, ".");
 
-	while (next_token_talloc(frame, &seq, &expected, NULL)) {
+	while (next_token(&seq, expected, NULL, sizeof(expected)))
+	{
 		pwd_sub(expected);
 		count++;
 
-		if (!expect(master, issue, expected)) {
+		if (!expect(master, issue, expected))
+		{
 			DEBUG(3, ("Response %d incorrect\n", count));
-			TALLOC_FREE(frame);
-			return false;
+			return False;
 		}
 
-		if (!next_token_talloc(frame, &seq, &issue, NULL)) {
-			issue = talloc_strdup(frame, ".");
-			if (!issue) {
-				TALLOC_FREE(frame);
-				return false;
-			}
-		}
+		if (!next_token(&seq, issue, NULL, sizeof(issue)))
+			fstrcpy(issue, ".");
+
 		pwd_sub(issue);
 	}
-
 	if (!strequal(issue, ".")) {
 		/* we have one final issue to send */
-		expected = talloc_strdup(frame, ".");
-		if (!expected) {
-			TALLOC_FREE(frame);
-			return false;
-		}
-		if (!expect(master, issue, expected)) {
-			TALLOC_FREE(frame);
+		fstrcpy(expected, ".");
+		if (!expect(master, issue, expected))
 			return False;
-		}
 	}
-	TALLOC_FREE(frame);
+
 	return (count > 0);
 }
 
-static bool chat_with_program(char *passwordprogram, const struct passwd *pass,
-			      char *chatsequence, bool as_root)
+static BOOL chat_with_program(char *passwordprogram, const struct passwd *pass,
+			      char *chatsequence, BOOL as_root)
 {
-	char *slavedev = NULL;
+	char *slavedev;
 	int master;
 	pid_t pid, wpid;
 	int wstat;
-	bool chstat = False;
+	BOOL chstat = False;
 
 	if (pass == NULL) {
 		DEBUG(0, ("chat_with_program: user doesn't exist in the UNIX password database.\n"));
@@ -401,7 +367,6 @@
 
 	if ((pid = sys_fork()) < 0) {
 		DEBUG(3, ("chat_with_program: Cannot fork() child for password change: %s\n", pass->pw_name));
-		SAFE_FREE(slavedev);
 		close(master);
 		CatchChild();
 		return (False);
@@ -409,9 +374,6 @@
 
 	/* we now have a pty */
 	if (pid > 0) {			/* This is the parent process */
-		/* Don't need this anymore in parent. */
-		SAFE_FREE(slavedev);
-
 		if ((chstat = talktochild(master, chatsequence)) == False) {
 			DEBUG(3, ("chat_with_program: Child failed to change password: %s\n", pass->pw_name));
 			kill(pid, SIGKILL);	/* be sure to end this process */
@@ -491,14 +453,13 @@
 	return (chstat);
 }
 
-bool chgpasswd(const char *name, const struct passwd *pass,
-	       const char *oldpass, const char *newpass, bool as_root)
+BOOL chgpasswd(const char *name, const struct passwd *pass, 
+	       const char *oldpass, const char *newpass, BOOL as_root)
 {
-	char *passwordprogram = NULL;
-	char *chatsequence = NULL;
+	pstring passwordprogram;
+	pstring chatsequence;
 	size_t i;
 	size_t len;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	if (!oldpass) {
 		oldpass = "";
@@ -519,7 +480,7 @@
 		return (False);	/* inform the user */
 	}
 
-	/*
+	/* 
 	 * Check the old and new passwords don't contain any control
 	 * characters.
 	 */
@@ -539,12 +500,12 @@
 			return False;
 		}
 	}
-
+	
 #ifdef WITH_PAM
 	if (lp_pam_password_change()) {
-		bool ret;
+		BOOL ret;
 #ifdef HAVE_SETLOCALE
-		const char *prevlocale = setlocale(LC_ALL, "C");
+		char *prevlocale = setlocale(LC_ALL, "C");
 #endif
 
 		if (as_root)
@@ -555,7 +516,7 @@
 		} else {
 			ret = smb_pam_passchange(name, oldpass, newpass);
 		}
-
+			
 		if (as_root)
 			unbecome_root();
 
@@ -571,63 +532,47 @@
 
 	if (pass == NULL) {
 		DEBUG(0, ("chgpasswd: user %s doesn't exist in the UNIX password database.\n", name));
-		return false;
+		return False;
 	}
 
-	passwordprogram = talloc_strdup(ctx, lp_passwd_program());
-	if (!passwordprogram || !*passwordprogram) {
-		DEBUG(2, ("chgpasswd: Null password program - no password changing\n"));
-		return false;
-	}
-	chatsequence = talloc_strdup(ctx, lp_passwd_chat());
-	if (!chatsequence || !*chatsequence) {
+	pstrcpy(passwordprogram, lp_passwd_program());
+	pstrcpy(chatsequence, lp_passwd_chat());
+
+	if (!*chatsequence) {
 		DEBUG(2, ("chgpasswd: Null chat sequence - no password changing\n"));
-		return false;
+		return (False);
 	}
 
+	if (!*passwordprogram) {
+		DEBUG(2, ("chgpasswd: Null password program - no password changing\n"));
+		return (False);
+	}
+
 	if (as_root) {
 		/* The password program *must* contain the user name to work. Fail if not. */
 		if (strstr_m(passwordprogram, "%u") == NULL) {
 			DEBUG(0,("chgpasswd: Running as root the 'passwd program' parameter *MUST* contain \
 the string %%u, and the given string %s does not.\n", passwordprogram ));
-			return false;
+			return False;
 		}
 	}
 
-	passwordprogram = talloc_string_sub(ctx, passwordprogram, "%u", name);
-	if (!passwordprogram) {
-		return false;
-	}
-
+	pstring_sub(passwordprogram, "%u", name);
 	/* note that we do NOT substitute the %o and %n in the password program
 	   as this would open up a security hole where the user could use
 	   a new password containing shell escape characters */
 
-	chatsequence = talloc_string_sub(ctx, chatsequence, "%u", name);
-	if (!chatsequence) {
-		return false;
-	}
-	chatsequence = talloc_all_string_sub(ctx,
-					chatsequence,
-					"%o",
-					oldpass);
-	if (!chatsequence) {
-		return false;
-	}
-	chatsequence = talloc_all_string_sub(ctx,
-					chatsequence,
-					"%n",
-					newpass);
-	return chat_with_program(passwordprogram,
-				pass,
-				chatsequence,
-				as_root);
+	pstring_sub(chatsequence, "%u", name);
+	all_string_sub(chatsequence, "%o", oldpass, sizeof(pstring));
+	all_string_sub(chatsequence, "%n", newpass, sizeof(pstring));
+	return (chat_with_program
+		(passwordprogram, pass, chatsequence, as_root));
 }
 
 #else /* ALLOW_CHANGE_PASSWORD */
 
-bool chgpasswd(const char *name, const struct passwd *pass, 
-	       const char *oldpass, const char *newpass, bool as_root)
+BOOL chgpasswd(const char *name, const struct passwd *pass, 
+	       const char *oldpass, const char *newpass, BOOL as_root)
 {
 	DEBUG(0, ("chgpasswd: Unix Password changing not compiled in (user=%s)\n", name));
 	return (False);
@@ -638,7 +583,7 @@
  Code to check the lanman hashed password.
 ************************************************************/
 
-bool check_lanman_password(char *user, uchar * pass1,
+BOOL check_lanman_password(char *user, uchar * pass1,
 			   uchar * pass2, struct samu **hnd)
 {
 	uchar unenc_new_pw[16];
@@ -646,7 +591,7 @@
 	struct samu *sampass = NULL;
 	uint32 acct_ctrl;
 	const uint8 *lanman_pw;
-	bool ret;
+	BOOL ret;
 
 	if ( !(sampass = samu_new(NULL)) ) {
 		DEBUG(0, ("samu_new() failed!\n"));
@@ -710,11 +655,11 @@
  is correct before calling. JRA.
 ************************************************************/
 
-bool change_lanman_password(struct samu *sampass, uchar *pass2)
+BOOL change_lanman_password(struct samu *sampass, uchar *pass2)
 {
 	static uchar null_pw[16];
 	uchar unenc_new_pw[16];
-	bool ret;
+	BOOL ret;
 	uint32 acct_ctrl;
 	const uint8 *pwd;
 
@@ -760,9 +705,9 @@
 	if (!pdb_set_pass_last_set_time  (sampass, time(NULL), PDB_CHANGED)) {
 		TALLOC_FREE(sampass);
 		/* Not quite sure what this one qualifies as, but this will do */
-		return False;
+		return False; 
 	}
-
+ 
 	/* Now flush the sam_passwd struct to persistent storage */
 	ret = NT_STATUS_IS_OK(pdb_update_sam_account (sampass));
 
@@ -774,32 +719,29 @@
 ************************************************************/
 
 NTSTATUS pass_oem_change(char *user,
-			 uchar password_encrypted_with_lm_hash[516],
+			 uchar password_encrypted_with_lm_hash[516], 
 			 const uchar old_lm_hash_encrypted[16],
-			 uchar password_encrypted_with_nt_hash[516],
+			 uchar password_encrypted_with_nt_hash[516], 
 			 const uchar old_nt_hash_encrypted[16],
 			 uint32 *reject_reason)
 {
-	char *new_passwd = NULL;
+	pstring new_passwd;
 	struct samu *sampass = NULL;
-	NTSTATUS nt_status = check_oem_password(user,
-						password_encrypted_with_lm_hash,
-						old_lm_hash_encrypted,
-						password_encrypted_with_nt_hash,
+	NTSTATUS nt_status = check_oem_password(user, password_encrypted_with_lm_hash, 
+						old_lm_hash_encrypted, 
+						password_encrypted_with_nt_hash, 
 						old_nt_hash_encrypted,
-						&sampass,
-						&new_passwd);
-
-	if (!NT_STATUS_IS_OK(nt_status)) {
+						&sampass, new_passwd, sizeof(new_passwd));
+	
+	if (!NT_STATUS_IS_OK(nt_status))
 		return nt_status;
-	}
 
 	/* We've already checked the old password here.... */
 	become_root();
 	nt_status = change_oem_password(sampass, NULL, new_passwd, True, reject_reason);
 	unbecome_root();
 
-	memset(new_passwd, 0, strlen(new_passwd));
+	memset(new_passwd, 0, sizeof(new_passwd));
 
 	TALLOC_FREE(sampass);
 
@@ -807,24 +749,24 @@
 }
 
 /***********************************************************
- Decrypt and verify a user password change.
+ Decrypt and verify a user password change.  
 
- The 516 byte long buffers are encrypted with the old NT and
- old LM passwords, and if the NT passwords are present, both
+ The 516 byte long buffers are encrypted with the old NT and 
+ old LM passwords, and if the NT passwords are present, both 
  buffers contain a unicode string.
 
  After decrypting the buffers, check the password is correct by
  matching the old hashed passwords with the passwords in the passdb.
-
+ 
 ************************************************************/
 
 static NTSTATUS check_oem_password(const char *user,
-				   uchar password_encrypted_with_lm_hash[516],
+				   uchar password_encrypted_with_lm_hash[516], 
 				   const uchar old_lm_hash_encrypted[16],
-				   uchar password_encrypted_with_nt_hash[516],
+				   uchar password_encrypted_with_nt_hash[516], 
 				   const uchar old_nt_hash_encrypted[16],
-				   struct samu **hnd,
-				   char **pp_new_passwd)
+				   struct samu **hnd, char *new_passwd,
+				   int new_passwd_size)
 {
 	static uchar null_pw[16];
 	static uchar null_ntpw[16];
@@ -838,10 +780,10 @@
 	uchar new_lm_hash[16];
 	uchar verifier[16];
 	char no_pw[2];
-	bool ret;
+	BOOL ret;
 
-	bool nt_pass_set = (password_encrypted_with_nt_hash && old_nt_hash_encrypted);
-	bool lm_pass_set = (password_encrypted_with_lm_hash && old_lm_hash_encrypted);
+	BOOL nt_pass_set = (password_encrypted_with_nt_hash && old_nt_hash_encrypted);
+	BOOL lm_pass_set = (password_encrypted_with_lm_hash && old_lm_hash_encrypted);
 
 	*hnd = NULL;
 
@@ -856,11 +798,11 @@
 	if (ret == False) {
 		DEBUG(0, ("check_oem_password: getsmbpwnam returned NULL\n"));
 		TALLOC_FREE(sampass);
-		return NT_STATUS_NO_SUCH_USER;
+		return NT_STATUS_NO_SUCH_USER; 
 	}
 
 	acct_ctrl = pdb_get_acct_ctrl(sampass);
-
+	
 	if (acct_ctrl & ACB_DISABLED) {
 		DEBUG(2,("check_lanman_password: account %s disabled.\n", user));
 		TALLOC_FREE(sampass);
@@ -887,7 +829,7 @@
 
 	if (nt_pw && nt_pass_set) {
 		/* IDEAL Case: passwords are in unicode, and we can
-		 * read use the password encrypted with the NT hash
+		 * read use the password encrypted with the NT hash 
 		 */
 		password_encrypted = password_encrypted_with_nt_hash;
 		encryption_key = nt_pw;
@@ -899,7 +841,7 @@
 		DEBUG(1, ("NT password change supplied for user %s, but we have no NT password to check it with\n", 
 			  user));
 		TALLOC_FREE(sampass);
-		return NT_STATUS_WRONG_PASSWORD;
+		return NT_STATUS_WRONG_PASSWORD;	
 	} else if (lm_pass_set) {
 		if (lp_lanman_auth()) {
 			DEBUG(1, ("LM password change supplied for user %s, but we have no LanMan password to check it with\n", 
@@ -917,16 +859,13 @@
 		return NT_STATUS_WRONG_PASSWORD;
 	}
 
-	/*
-	 * Decrypt the password with the key
+	/* 
+	 * Decrypt the password with the key 
 	 */
 	SamOEMhash( password_encrypted, encryption_key, 516);
 
-	if (!decode_pw_buffer(talloc_tos(),
-				password_encrypted,
-				pp_new_passwd,
-				&new_pw_len,
-				nt_pass_set ? STR_UNICODE : STR_ASCII)) {
+	if ( !decode_pw_buffer(password_encrypted, new_passwd, new_passwd_size, &new_pw_len, 
+			       nt_pass_set ? STR_UNICODE : STR_ASCII)) {
 		TALLOC_FREE(sampass);
 		return NT_STATUS_WRONG_PASSWORD;
 	}
@@ -938,10 +877,10 @@
 
 	if (nt_pass_set) {
 		/* NT passwords, verify the NT hash. */
-
+		
 		/* Calculate the MD4 hash (NT compatible) of the password */
 		memset(new_nt_hash, '\0', 16);
-		E_md4hash(*pp_new_passwd, new_nt_hash);
+		E_md4hash(new_passwd, new_nt_hash);
 
 		if (nt_pw) {
 			/*
@@ -953,7 +892,7 @@
 				TALLOC_FREE(sampass);
 				return NT_STATUS_WRONG_PASSWORD;
 			}
-
+			
 			/* We could check the LM password here, but there is
 			 * little point, we already know the password is
 			 * correct, and the LM password might not even be
@@ -965,12 +904,12 @@
 			 * change */
 #ifdef DEBUG_PASSWORD
 			DEBUG(100,
-			      ("check_oem_password: password %s ok\n", *pp_new_passwd));
+			      ("check_oem_password: password %s ok\n", new_passwd));
 #endif
 			*hnd = sampass;
 			return NT_STATUS_OK;
 		}
-
+		
 		if (lanman_pw) {
 			/*
 			 * check the lm verifier
@@ -983,7 +922,7 @@
 			}
 #ifdef DEBUG_PASSWORD
 			DEBUG(100,
-			      ("check_oem_password: password %s ok\n", *pp_new_passwd));
+			      ("check_oem_password: password %s ok\n", new_passwd));
 #endif
 			*hnd = sampass;
 			return NT_STATUS_OK;
@@ -992,7 +931,7 @@
 
 	if (lanman_pw && lm_pass_set) {
 
-		E_deshash(*pp_new_passwd, new_lm_hash);
+		E_deshash(new_passwd, new_lm_hash);
 
 		/*
 		 * check the lm verifier
@@ -1003,10 +942,10 @@
 			TALLOC_FREE(sampass);
 			return NT_STATUS_WRONG_PASSWORD;
 		}
-
+		
 #ifdef DEBUG_PASSWORD
 		DEBUG(100,
-		      ("check_oem_password: password %s ok\n", *pp_new_passwd));
+		      ("check_oem_password: password %s ok\n", new_passwd));
 #endif
 		*hnd = sampass;
 		return NT_STATUS_OK;
@@ -1023,13 +962,13 @@
  found in the history list.
 ************************************************************/
 
-static bool check_passwd_history(struct samu *sampass, const char *plaintext)
+static BOOL check_passwd_history(struct samu *sampass, const char *plaintext)
 {
 	uchar new_nt_p16[NT_HASH_LEN];
 	uchar zero_md5_nt_pw[SALTED_MD5_HASH_LEN];
 	const uint8 *nt_pw;
 	const uint8 *pwhistory;
-	bool found = False;
+	BOOL found = False;
 	int i;
 	uint32 pwHisLen, curr_pwHisLen;
 
@@ -1057,8 +996,8 @@
 		return True;
 	}
 
-	dump_data(100, new_nt_p16, NT_HASH_LEN);
-	dump_data(100, pwhistory, PW_HISTORY_ENTRY_LEN*pwHisLen);
+	dump_data(100, (const char *)new_nt_p16, NT_HASH_LEN);
+	dump_data(100, (const char *)pwhistory, PW_HISTORY_ENTRY_LEN*pwHisLen);
 
 	memset(zero_md5_nt_pw, '\0', SALTED_MD5_HASH_LEN);
 	for (i=0; i<pwHisLen; i++) {
@@ -1090,10 +1029,9 @@
  is correct before calling. JRA.
 ************************************************************/
 
-NTSTATUS change_oem_password(struct samu *hnd, char *old_passwd, char *new_passwd, bool as_root, uint32 *samr_reject_reason)
+NTSTATUS change_oem_password(struct samu *hnd, char *old_passwd, char *new_passwd, BOOL as_root, uint32 *samr_reject_reason)
 {
 	uint32 min_len;
-	uint32 refuse;
 	struct passwd *pass = NULL;
 	const char *username = pdb_get_username(hnd);
 	time_t can_change_time = pdb_get_pass_can_change_time(hnd);
@@ -1106,26 +1044,11 @@
 	if (!pdb_get_pass_can_change(hnd)) {
 		DEBUG(1, ("user %s does not have permissions to change password\n", username));
 		if (samr_reject_reason) {
-			*samr_reject_reason = SAMR_REJECT_OTHER;
+			*samr_reject_reason = REJECT_REASON_OTHER;
 		}
 		return NT_STATUS_ACCOUNT_RESTRICTION;
 	}
 
-	/* check to see if it is a Machine account and if the policy
-	 * denies machines to change the password. *
-	 * Should we deny also SRVTRUST and/or DOMSTRUST ? .SSS. */
-	if (pdb_get_acct_ctrl(hnd) & ACB_WSTRUST) {
-		if (pdb_get_account_policy(AP_REFUSE_MACHINE_PW_CHANGE, &refuse) && refuse) {
-			DEBUG(1, ("Machine %s cannot change password now, "
-				  "denied by Refuse Machine Password Change policy\n",
-				  username));
-			if (samr_reject_reason) {
-				*samr_reject_reason = SAMR_REJECT_OTHER;
-			}
-			return NT_STATUS_ACCOUNT_RESTRICTION;
-		}
-	}
-
 	/* removed calculation here, becuase passdb now calculates
 	   based on policy.  jmcd */
 	if ((can_change_time != 0) && (time(NULL) < can_change_time)) {
@@ -1133,7 +1056,7 @@
 			  "wait until %s\n", username,
 			  http_timestring(can_change_time)));
 		if (samr_reject_reason) {
-			*samr_reject_reason = SAMR_REJECT_OTHER;
+			*samr_reject_reason = REJECT_REASON_OTHER;
 		}
 		return NT_STATUS_ACCOUNT_RESTRICTION;
 	}
@@ -1143,7 +1066,7 @@
 			  username));
 		DEBUGADD(1, (" account policy min password len = %d\n", min_len));
 		if (samr_reject_reason) {
-			*samr_reject_reason = SAMR_REJECT_TOO_SHORT;
+			*samr_reject_reason = REJECT_REASON_TOO_SHORT;
 		}
 		return NT_STATUS_PASSWORD_RESTRICTION;
 /* 		return NT_STATUS_PWD_TOO_SHORT; */
@@ -1151,12 +1074,12 @@
 
 	if (check_passwd_history(hnd,new_passwd)) {
 		if (samr_reject_reason) {
-			*samr_reject_reason = SAMR_REJECT_IN_HISTORY;
+			*samr_reject_reason = REJECT_REASON_IN_HISTORY;
 		}
 		return NT_STATUS_PASSWORD_RESTRICTION;
 	}
 
-	pass = Get_Pwnam_alloc(talloc_tos(), username);
+	pass = Get_Pwnam(username);
 	if (!pass) {
 		DEBUG(1, ("change_oem_password: Username %s does not exist in system !?!\n", username));
 		return NT_STATUS_ACCESS_DENIED;
@@ -1172,9 +1095,8 @@
 		if (check_ret != 0) {
 			DEBUG(1, ("change_oem_password: check password script said new password is not good enough!\n"));
 			if (samr_reject_reason) {
-				*samr_reject_reason = SAMR_REJECT_COMPLEXITY;
+				*samr_reject_reason = REJECT_REASON_NOT_COMPLEX;
 			}
-			TALLOC_FREE(pass);
 			return NT_STATUS_PASSWORD_RESTRICTION;
 		}
 	}
@@ -1193,12 +1115,9 @@
 	
 	if(lp_unix_password_sync() &&
 		!chgpasswd(username, pass, old_passwd, new_passwd, as_root)) {
-		TALLOC_FREE(pass);
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	TALLOC_FREE(pass);
-
 	if (!pdb_set_plaintext_passwd (hnd, new_passwd)) {
 		return NT_STATUS_ACCESS_DENIED;
 	}

Modified: branches/samba/upstream/source/smbd/close.c
===================================================================
--- branches/samba/upstream/source/smbd/close.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/close.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,22 +1,23 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    file closing
    Copyright (C) Andrew Tridgell 1992-1998
    Copyright (C) Jeremy Allison 1992-2007.
    Copyright (C) Volker Lendecke 2005
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -27,76 +28,62 @@
  Run a file if it is a magic script.
 ****************************************************************************/
 
-static void check_magic(struct files_struct *fsp)
+static void check_magic(files_struct *fsp,connection_struct *conn)
 {
-	int ret;
-	const char *magic_output = NULL;
-	SMB_STRUCT_STAT st;
-	int tmp_fd, outfd;
-	TALLOC_CTX *ctx = NULL;
-	const char *p;
-	struct connection_struct *conn = fsp->conn;
-
-	if (!*lp_magicscript(SNUM(conn))) {
+	if (!*lp_magicscript(SNUM(conn)))
 		return;
-	}
 
 	DEBUG(5,("checking magic for %s\n",fsp->fsp_name));
 
-	if (!(p = strrchr_m(fsp->fsp_name,'/'))) {
-		p = fsp->fsp_name;
-	} else {
-		p++;
-	}
+	{
+		char *p;
+		if (!(p = strrchr_m(fsp->fsp_name,'/')))
+			p = fsp->fsp_name;
+		else
+			p++;
 
-	if (!strequal(lp_magicscript(SNUM(conn)),p)) {
-		return;
+		if (!strequal(lp_magicscript(SNUM(conn)),p))
+			return;
 	}
 
-	ctx = talloc_stackframe();
+	{
+		int ret;
+		pstring magic_output;
+		pstring fname;
+		SMB_STRUCT_STAT st;
+		int tmp_fd, outfd;
 
-	if (*lp_magicoutput(SNUM(conn))) {
-		magic_output = lp_magicoutput(SNUM(conn));
-	} else {
-		magic_output = talloc_asprintf(ctx,
-				"%s.out",
-				fsp->fsp_name);
-	}
-	if (!magic_output) {
-		TALLOC_FREE(ctx);
-		return;
-	}
+		pstrcpy(fname,fsp->fsp_name);
+		if (*lp_magicoutput(SNUM(conn)))
+			pstrcpy(magic_output,lp_magicoutput(SNUM(conn)));
+		else
+			slprintf(magic_output,sizeof(fname)-1, "%s.out",fname);
 
-	chmod(fsp->fsp_name,0755);
-	ret = smbrun(fsp->fsp_name,&tmp_fd);
-	DEBUG(3,("Invoking magic command %s gave %d\n",
-		fsp->fsp_name,ret));
+		chmod(fname,0755);
+		ret = smbrun(fname,&tmp_fd);
+		DEBUG(3,("Invoking magic command %s gave %d\n",fname,ret));
+		unlink(fname);
+		if (ret != 0 || tmp_fd == -1) {
+			if (tmp_fd != -1)
+				close(tmp_fd);
+			return;
+		}
+		outfd = open(magic_output, O_CREAT|O_EXCL|O_RDWR, 0600);
+		if (outfd == -1) {
+			close(tmp_fd);
+			return;
+		}
 
-	unlink(fsp->fsp_name);
-	if (ret != 0 || tmp_fd == -1) {
-		if (tmp_fd != -1) {
+		if (sys_fstat(tmp_fd,&st) == -1) {
 			close(tmp_fd);
+			close(outfd);
+			return;
 		}
-		TALLOC_FREE(ctx);
-		return;
-	}
-	outfd = open(magic_output, O_CREAT|O_EXCL|O_RDWR, 0600);
-	if (outfd == -1) {
-		close(tmp_fd);
-		TALLOC_FREE(ctx);
-		return;
-	}
 
-	if (sys_fstat(tmp_fd,&st) == -1) {
+		transfer_file(tmp_fd,outfd,(SMB_OFF_T)st.st_size);
 		close(tmp_fd);
 		close(outfd);
-		return;
 	}
-
-	transfer_file(tmp_fd,outfd,(SMB_OFF_T)st.st_size);
-	close(tmp_fd);
-	close(outfd);
-	TALLOC_FREE(ctx);
 }
 
 /****************************************************************************
@@ -104,7 +91,7 @@
 ****************************************************************************/
 
 static NTSTATUS close_filestruct(files_struct *fsp)
-{
+{   
 	NTSTATUS status = NT_STATUS_OK;
 	connection_struct *conn = fsp->conn;
     
@@ -116,6 +103,7 @@
 	}
 
 	conn->num_files_open--;
+	SAFE_FREE(fsp->wbmpx_ptr);
 	return status;
 }    
 
@@ -147,84 +135,13 @@
 
 			share_mode_entry_to_message(msg, e);
 
- 			messaging_send_buf(smbd_messaging_context(),
-					   e->pid, MSG_SMB_OPEN_RETRY,
-					   (uint8 *)msg,
-					   MSG_SMB_SHARE_MODE_ENTRY_SIZE);
+ 			message_send_pid(e->pid, MSG_SMB_OPEN_RETRY,
+ 					 msg, MSG_SMB_SHARE_MODE_ENTRY_SIZE, True);
  		}
  	}
 }
 
 /****************************************************************************
- Delete all streams
-****************************************************************************/
-
-static NTSTATUS delete_all_streams(connection_struct *conn, const char *fname)
-{
-	struct stream_struct *stream_info;
-	int i;
-	unsigned int num_streams;
-	TALLOC_CTX *frame = talloc_stackframe();
-	NTSTATUS status;
-
-	status = SMB_VFS_STREAMINFO(conn, NULL, fname, talloc_tos(),
-				    &num_streams, &stream_info);
-
-	if (NT_STATUS_EQUAL(status, NT_STATUS_NOT_IMPLEMENTED)) {
-		DEBUG(10, ("no streams around\n"));
-		TALLOC_FREE(frame);
-		return NT_STATUS_OK;
-	}
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10, ("SMB_VFS_STREAMINFO failed: %s\n",
-			   nt_errstr(status)));
-		goto fail;
-	}
-
-	DEBUG(10, ("delete_all_streams found %d streams\n",
-		   num_streams));
-
-	if (num_streams == 0) {
-		TALLOC_FREE(frame);
-		return NT_STATUS_OK;
-	}
-
-	for (i=0; i<num_streams; i++) {
-		int res;
-		char *streamname;
-
-		if (strequal(stream_info[i].name, "::$DATA")) {
-			continue;
-		}
-
-		streamname = talloc_asprintf(talloc_tos(), "%s%s", fname,
-					     stream_info[i].name);
-
-		if (streamname == NULL) {
-			DEBUG(0, ("talloc_aprintf failed\n"));
-			status = NT_STATUS_NO_MEMORY;
-			goto fail;
-		}
-
-		res = SMB_VFS_UNLINK(conn, streamname);
-
-		TALLOC_FREE(streamname);
-
-		if (res == -1) {
-			status = map_nt_error_from_unix(errno);
-			DEBUG(10, ("Could not delete stream %s: %s\n",
-				   streamname, strerror(errno)));
-			break;
-		}
-	}
-
- fail:
-	TALLOC_FREE(frame);
-	return status;
-}
-
-/****************************************************************************
  Deal with removing a share mode on last close.
 ****************************************************************************/
 
@@ -232,13 +149,11 @@
 					enum file_close_type close_type)
 {
 	connection_struct *conn = fsp->conn;
-	bool delete_file = false;
-	bool changed_user = false;
+	BOOL delete_file = False;
 	struct share_mode_lock *lck;
 	SMB_STRUCT_STAT sbuf;
 	NTSTATUS status = NT_STATUS_OK;
 	int ret;
-	struct file_id id;
 
 	/*
 	 * Lock the share entries, and determine if we should delete
@@ -246,8 +161,7 @@
 	 * This prevents race conditions with the file being created. JRA.
 	 */
 
-	lck = get_share_mode_lock(talloc_tos(), fsp->file_id, NULL, NULL,
-				  NULL);
+	lck = get_share_mode_lock(NULL, fsp->dev, fsp->inode, NULL, NULL);
 
 	if (lck == NULL) {
 		DEBUG(0, ("close_remove_share_mode: Could not get share mode "
@@ -255,17 +169,13 @@
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-	if (fsp->write_time_forced) {
-		set_close_write_time(fsp, lck->changed_write_time);
-	}
-
 	if (!del_share_mode(lck, fsp)) {
 		DEBUG(0, ("close_remove_share_mode: Could not delete share "
 			  "entry for file %s\n", fsp->fsp_name));
 	}
 
 	if (fsp->initial_delete_on_close && (lck->delete_token == NULL)) {
-		bool became_user = False;
+		BOOL became_user = False;
 
 		/* Initial delete on close was set and no one else
 		 * wrote a real delete on close. */
@@ -321,33 +231,19 @@
 	DEBUG(5,("close_remove_share_mode: file %s. Delete on close was set "
 		 "- deleting file.\n", fsp->fsp_name));
 
-	/*
-	 * Don't try to update the write time when we delete the file
-	 */
-	fsp->update_write_time_on_close = false;
+	/* Become the user who requested the delete. */
 
-	if (!unix_token_equal(lck->delete_token, &current_user.ut)) {
-		/* Become the user who requested the delete. */
-
-		DEBUG(5,("close_remove_share_mode: file %s. "
-			"Change user to uid %u\n",
-			fsp->fsp_name,
-			(unsigned int)lck->delete_token->uid));
-
-		if (!push_sec_ctx()) {
-			smb_panic("close_remove_share_mode: file %s. failed to push "
-				  "sec_ctx.\n");
-		}
-
-		set_sec_ctx(lck->delete_token->uid,
-			    lck->delete_token->gid,
-			    lck->delete_token->ngroups,
-			    lck->delete_token->groups,
-			    NULL);
-
-		changed_user = true;
+	if (!push_sec_ctx()) {
+		smb_panic("close_remove_share_mode: file %s. failed to push "
+			  "sec_ctx.\n");
 	}
 
+	set_sec_ctx(lck->delete_token->uid,
+		    lck->delete_token->gid,
+		    lck->delete_token->ngroups,
+		    lck->delete_token->groups,
+		    NULL);
+
 	/* We can only delete the file if the name we have is still valid and
 	   hasn't been renamed. */
 
@@ -367,36 +263,21 @@
 		goto done;
 	}
 
-	id = vfs_file_id_from_sbuf(conn, &sbuf);
-
-	if (!file_id_equal(&fsp->file_id, &id)) {
+	if(sbuf.st_dev != fsp->dev || sbuf.st_ino != fsp->inode) {
 		DEBUG(5,("close_remove_share_mode: file %s. Delete on close "
 			 "was set and dev and/or inode does not match\n",
 			 fsp->fsp_name ));
-		DEBUG(5,("close_remove_share_mode: file %s. stored file_id %s, "
-			 "stat file_id %s\n",
+		DEBUG(5,("close_remove_share_mode: file %s. stored dev = %x, "
+			 "inode = %.0f stat dev = %x, inode = %.0f\n",
 			 fsp->fsp_name,
-			 file_id_string_tos(&fsp->file_id),
-			 file_id_string_tos(&id)));
+			 (unsigned int)fsp->dev, (double)fsp->inode,
+			 (unsigned int)sbuf.st_dev, (double)sbuf.st_ino ));
 		/*
 		 * Don't save the errno here, we ignore this error
 		 */
 		goto done;
 	}
 
-	if ((conn->fs_capabilities & FILE_NAMED_STREAMS)
-	    && !is_ntfs_stream_name(fsp->fsp_name)) {
-
-		status = delete_all_streams(conn, fsp->fsp_name);
-
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(5, ("delete_all_streams failed: %s\n",
-				  nt_errstr(status)));
-			goto done;
-		}
-	}
-
-
 	if (SMB_VFS_UNLINK(conn,fsp->fsp_name) != 0) {
 		/*
 		 * This call can potentially fail as another smbd may
@@ -428,75 +309,13 @@
 
  done:
 
-	if (changed_user) {
-		/* unbecome user. */
-		pop_sec_ctx();
-	}
-
+	/* unbecome user. */
+	pop_sec_ctx();
+	
 	TALLOC_FREE(lck);
 	return status;
 }
 
-void set_close_write_time(struct files_struct *fsp, struct timespec ts)
-{
-	DEBUG(6,("close_write_time: %s" , time_to_asc(convert_timespec_to_time_t(ts))));
-
-	if (null_timespec(ts)) {
-		return;
-	}
-	/*
-	 * if the write time on close is explict set, then don't
-	 * need to fix it up to the value in the locking db
-	 */
-	fsp->write_time_forced = false;
-
-	fsp->update_write_time_on_close = true;
-	fsp->close_write_time = ts;
-}
-
-static NTSTATUS update_write_time_on_close(struct files_struct *fsp)
-{
-	SMB_STRUCT_STAT sbuf;
-	struct timespec ts[2];
-	NTSTATUS status;
-
-	ZERO_STRUCT(sbuf);
-	ZERO_STRUCT(ts);
-
-	if (!fsp->update_write_time_on_close) {
-		return NT_STATUS_OK;
-	}
-
-	if (null_timespec(fsp->close_write_time)) {
-		fsp->close_write_time = timespec_current();
-	}
-
-	/* Ensure we have a valid stat struct for the source. */
-	if (fsp->fh->fd != -1) {
-		if (SMB_VFS_FSTAT(fsp, &sbuf) == -1) {
-			return map_nt_error_from_unix(errno);
-		}
-	} else {
-		if (SMB_VFS_STAT(fsp->conn,fsp->fsp_name,&sbuf) == -1) {
-			return map_nt_error_from_unix(errno);
-		}
-	}
-
-	if (!VALID_STAT(sbuf)) {
-		/* if it doesn't seem to be a real file */
-		return NT_STATUS_OK;
-	}
-
-	ts[1] = fsp->close_write_time;
-	status = smb_set_file_time(fsp->conn, fsp, fsp->fsp_name,
-				   &sbuf, ts, true);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	return NT_STATUS_OK;
-}
-
 /****************************************************************************
  Close a file.
 
@@ -511,7 +330,6 @@
 	NTSTATUS saved_status1 = NT_STATUS_OK;
 	NTSTATUS saved_status2 = NT_STATUS_OK;
 	NTSTATUS saved_status3 = NT_STATUS_OK;
-	NTSTATUS saved_status4 = NT_STATUS_OK;
 	connection_struct *conn = fsp->conn;
 
 	if (fsp->aio_write_behind) {
@@ -553,20 +371,24 @@
 		release_file_oplock(fsp);
 	}
 
-	locking_close_file(smbd_messaging_context(), fsp);
+	locking_close_file(fsp);
 
-	status = fd_close(fsp);
+	status = fd_close(conn, fsp);
 
 	/* check for magic scripts */
 	if (close_type == NORMAL_CLOSE) {
-		check_magic(fsp);
+		check_magic(fsp,conn);
 	}
 
 	/*
 	 * Ensure pending modtime is set after close.
 	 */
 
-	saved_status4 = update_write_time_on_close(fsp);
+	if (fsp->pending_modtime_owner && !null_timespec(fsp->pending_modtime)) {
+		set_filetime(conn, fsp->fsp_name, fsp->pending_modtime);
+	} else if (!null_timespec(fsp->last_write_time)) {
+		set_filetime(conn, fsp->fsp_name, fsp->last_write_time);
+	}
 
 	if (NT_STATUS_IS_OK(status)) {
 		if (!NT_STATUS_IS_OK(saved_status1)) {
@@ -575,8 +397,6 @@
 			status = saved_status2;
 		} else if (!NT_STATUS_IS_OK(saved_status3)) {
 			status = saved_status3;
-		} else if (!NT_STATUS_IS_OK(saved_status4)) {
-			status = saved_status4;
 		}
 	}
 
@@ -596,7 +416,7 @@
 static NTSTATUS close_directory(files_struct *fsp, enum file_close_type close_type)
 {
 	struct share_mode_lock *lck = 0;
-	bool delete_dir = False;
+	BOOL delete_dir = False;
 	NTSTATUS status = NT_STATUS_OK;
 
 	/*
@@ -604,8 +424,7 @@
 	 * reference to a directory also.
 	 */
 
-	lck = get_share_mode_lock(talloc_tos(), fsp->file_id, NULL, NULL,
-				  NULL);
+	lck = get_share_mode_lock(NULL, fsp->dev, fsp->inode, NULL, NULL);
 
 	if (lck == NULL) {
 		DEBUG(0, ("close_directory: Could not get share mode lock for %s\n", fsp->fsp_name));
@@ -617,7 +436,7 @@
 	}
 
 	if (fsp->initial_delete_on_close) {
-		bool became_user = False;
+		BOOL became_user = False;
 
 		/* Initial delete on close was set - for
 		 * directories we don't care if anyone else
@@ -670,8 +489,7 @@
 
 		TALLOC_FREE(lck);
 
-		status = rmdir_internals(talloc_tos(),
-				fsp->conn, fsp->fsp_name);
+		status = rmdir_internals(fsp->conn, fsp->fsp_name);
 
 		DEBUG(5,("close_directory: %s. Delete on close was set - "
 			 "deleting directory returned %s.\n",
@@ -706,7 +524,7 @@
  Close a 'stat file' opened internally.
 ****************************************************************************/
   
-static NTSTATUS close_stat(files_struct *fsp)
+NTSTATUS close_stat(files_struct *fsp)
 {
 	/*
 	 * Do the code common to files and directories.
@@ -722,67 +540,12 @@
   
 NTSTATUS close_file(files_struct *fsp, enum file_close_type close_type)
 {
-	NTSTATUS status;
-	struct files_struct *base_fsp = fsp->base_fsp;
-
 	if(fsp->is_directory) {
-		status = close_directory(fsp, close_type);
+		return close_directory(fsp, close_type);
 	} else if (fsp->is_stat) {
-		status = close_stat(fsp);
+		return close_stat(fsp);
 	} else if (fsp->fake_file_handle != NULL) {
-		status = close_fake_file(fsp);
-	} else {
-		status = close_normal_file(fsp, close_type);
+		return close_fake_file(fsp);
 	}
-
-	if ((base_fsp != NULL) && (close_type != SHUTDOWN_CLOSE)) {
-
-		/*
-		 * fsp was a stream, the base fsp can't be a stream as well
-		 *
-		 * For SHUTDOWN_CLOSE this is not possible here, because
-		 * SHUTDOWN_CLOSE only happens from files.c which walks the
-		 * complete list of files. If we mess with more than one fsp
-		 * those loops will become confused.
-		 */
-
-		SMB_ASSERT(base_fsp->base_fsp == NULL);
-		close_file(base_fsp, close_type);
-	}
-
-	return status;
+	return close_normal_file(fsp, close_type);
 }
-
-/****************************************************************************
- Deal with an (authorized) message to close a file given the share mode
- entry.
-****************************************************************************/
-
-void msg_close_file(struct messaging_context *msg_ctx,
-			void *private_data,
-			uint32_t msg_type,
-			struct server_id server_id,
-			DATA_BLOB *data)
-{
-	files_struct *fsp = NULL;
-	struct share_mode_entry e;
-
-	message_to_share_mode_entry(&e, (char *)data->data);
-
-	if(DEBUGLVL(10)) {
-		char *sm_str = share_mode_str(NULL, 0, &e);
-		if (!sm_str) {
-			smb_panic("talloc failed");
-		}
-		DEBUG(10,("msg_close_file: got request to close share mode "
-			"entry %s\n", sm_str));
-		TALLOC_FREE(sm_str);
-	}
-
-	fsp = file_find_dif(e.id, e.share_file_id);
-	if (!fsp) {
-		DEBUG(10,("msg_close_file: failed to find file.\n"));
-		return;
-	}
-	close_file(fsp, NORMAL_CLOSE);
-}

Modified: branches/samba/upstream/source/smbd/conn.c
===================================================================
--- branches/samba/upstream/source/smbd/conn.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/conn.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -52,7 +53,7 @@
 /****************************************************************************
 check if a snum is in use
 ****************************************************************************/
-bool conn_snum_used(int snum)
+BOOL conn_snum_used(int snum)
 {
 	connection_struct *conn;
 	for (conn=Connections;conn;conn=conn->next) {
@@ -185,19 +186,15 @@
  Idle inactive connections.
 ****************************************************************************/
 
-bool conn_idle_all(time_t t)
+BOOL conn_idle_all(time_t t, int deadtime)
 {
-	int deadtime = lp_deadtime()*60;
 	pipes_struct *plist = NULL;
-	connection_struct *conn;
+	BOOL allidle = True;
+	connection_struct *conn, *next;
 
-	if (deadtime <= 0)
-		deadtime = DEFAULT_SMBD_TIMEOUT;
+	for (conn=Connections;conn;conn=next) {
+		next=conn->next;
 
-	for (conn=Connections;conn;conn=conn->next) {
-
-		time_t age = t - conn->lastused;
-
 		/* Update if connection wasn't idle. */
 		if (conn->lastused != conn->lastused_count) {
 			conn->lastused = t;
@@ -205,12 +202,12 @@
 		}
 
 		/* close dirptrs on connections that are idle */
-		if (age > DPTR_IDLE_TIMEOUT) {
+		if ((t-conn->lastused) > DPTR_IDLE_TIMEOUT) {
 			dptr_idlecnum(conn);
 		}
 
-		if (conn->num_files_open > 0 || age < deadtime) {
-			return False;
+		if (conn->num_files_open > 0 || (t-conn->lastused)<deadtime) {
+			allidle = False;
 		}
 	}
 
@@ -219,14 +216,11 @@
 	 * idle with a handle open.
 	 */
 
-	for (plist = get_first_internal_pipe(); plist;
-	     plist = get_next_internal_pipe(plist)) {
-		if (plist->pipe_handles && plist->pipe_handles->count) {
-			return False;
-		}
-	}
+	for (plist = get_first_internal_pipe(); plist; plist = get_next_internal_pipe(plist))
+		if (plist->pipe_handles && plist->pipe_handles->count)
+			allidle = False;
 	
-	return True;
+	return allidle;
 }
 
 /****************************************************************************
@@ -305,8 +299,6 @@
 	DLIST_REMOVE(Connections, conn);
 
 	bitmap_clear(bmap, conn->cnum);
-
-	SMB_ASSERT(num_open > 0);
 	num_open--;
 
 	conn_free_internal(conn);
@@ -318,16 +310,13 @@
 share are unmounted
 the special sharename '*' forces unmount of all shares
 ****************************************************************************/
-void msg_force_tdis(struct messaging_context *msg,
-		    void *private_data,
-		    uint32_t msg_type,
-		    struct server_id server_id,
-		    DATA_BLOB *data)
+void msg_force_tdis(int msg_type, struct process_id pid, void *buf, size_t len,
+		    void *private_data)
 {
 	connection_struct *conn, *next;
 	fstring sharename;
 
-	fstrcpy(sharename, (const char *)data->data);
+	fstrcpy(sharename, (const char *)buf);
 
 	if (strcmp(sharename, "*") == 0) {
 		DEBUG(1,("Forcing close of all shares\n"));

Modified: branches/samba/upstream/source/smbd/connection.c
===================================================================
--- branches/samba/upstream/source/smbd/connection.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/connection.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,77 +14,107 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
+static TDB_CONTEXT *tdb;
+
 /****************************************************************************
+ Return the connection tdb context (used for message send all).
+****************************************************************************/
+
+TDB_CONTEXT *conn_tdb_ctx(void)
+{
+	if (!tdb)
+		tdb = tdb_open_log(lock_path("connections.tdb"), 0, TDB_CLEAR_IF_FIRST|TDB_DEFAULT, 
+			       O_RDWR | O_CREAT, 0644);
+
+	return tdb;
+}
+
+static void make_conn_key(connection_struct *conn, const char *name, TDB_DATA *pkbuf, struct connections_key *pkey)
+{
+	ZERO_STRUCTP(pkey);
+	pkey->pid = procid_self();
+	pkey->cnum = conn?conn->cnum:-1;
+	fstrcpy(pkey->name, name);
+#ifdef DEVELOPER
+	/* valgrind fixer... */
+	{
+		size_t sl = strlen(pkey->name);
+		if (sizeof(fstring)-sl)
+			memset(&pkey->name[sl], '\0', sizeof(fstring)-sl);
+	}
+#endif
+
+	pkbuf->dptr = (char *)pkey;
+	pkbuf->dsize = sizeof(*pkey);
+}
+
+/****************************************************************************
  Delete a connection record.
 ****************************************************************************/
 
-bool yield_connection(connection_struct *conn, const char *name)
+BOOL yield_connection(connection_struct *conn, const char *name)
 {
-	struct db_record *rec;
-	NTSTATUS status;
+	struct connections_key key;
+	TDB_DATA kbuf;
 
+	if (!tdb)
+		return False;
+
 	DEBUG(3,("Yielding connection to %s\n",name));
 
-	if (!(rec = connections_fetch_entry(NULL, conn, name))) {
-		DEBUG(0, ("connections_fetch_entry failed\n"));
-		return False;
-	}
+	make_conn_key(conn, name, &kbuf, &key);
 
-	status = rec->delete_rec(rec);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG( NT_STATUS_EQUAL(status, NT_STATUS_NOT_FOUND) ? 3 : 0,
-		       ("deleting connection record returned %s\n",
-			nt_errstr(status)));
+	if (tdb_delete(tdb, kbuf) != 0) {
+		int dbg_lvl = (!conn && (tdb_error(tdb) == TDB_ERR_NOEXIST)) ? 3 : 0;
+		DEBUG(dbg_lvl,("yield_connection: tdb_delete for name %s failed with error %s.\n",
+			name, tdb_errorstr(tdb) ));
+		return (False);
 	}
 
-	TALLOC_FREE(rec);
-	return NT_STATUS_IS_OK(status);
+	return(True);
 }
 
 struct count_stat {
 	pid_t mypid;
 	int curr_connections;
 	const char *name;
-	bool Clear;
+	BOOL Clear;
 };
 
 /****************************************************************************
  Count the entries belonging to a service in the connection db.
 ****************************************************************************/
 
-static int count_fn(struct db_record *rec,
-		    const struct connections_key *ckey,
-		    const struct connections_data *crec,
-		    void *udp)
+static int count_fn( TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *udp)
 {
+	struct connections_data crec;
 	struct count_stat *cs = (struct count_stat *)udp;
  
-	if (crec->cnum == -1) {
+	if (dbuf.dsize != sizeof(crec))
 		return 0;
-	}
 
+	memcpy(&crec, dbuf.dptr, sizeof(crec));
+ 
+	if (crec.cnum == -1)
+		return 0;
+
 	/* If the pid was not found delete the entry from connections.tdb */
 
-	if (cs->Clear && !process_exists(crec->pid) && (errno == ESRCH)) {
-		NTSTATUS status;
+	if (cs->Clear && !process_exists(crec.pid) && (errno == ESRCH)) {
 		DEBUG(2,("pid %s doesn't exist - deleting connections %d [%s]\n",
-			 procid_str_static(&crec->pid), crec->cnum,
-			 crec->servicename));
-
-		status = rec->delete_rec(rec);
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(0,("count_fn: tdb_delete failed with error %s\n",
-				 nt_errstr(status)));
-		}
+			procid_str_static(&crec.pid), crec.cnum, crec.servicename));
+		if (tdb_delete(the_tdb, kbuf) != 0)
+			DEBUG(0,("count_fn: tdb_delete failed with error %s\n", tdb_errorstr(tdb) ));
 		return 0;
 	}
 
-	if (strequal(crec->servicename, cs->name))
+	if (strequal(crec.servicename, cs->name))
 		cs->curr_connections++;
 
 	return 0;
@@ -94,7 +124,7 @@
  Claim an entry in the connections database.
 ****************************************************************************/
 
-int count_current_connections( const char *sharename, bool clear  )
+int count_current_connections( const char *sharename, BOOL clear  )
 {
 	struct count_stat cs;
 
@@ -108,44 +138,51 @@
 	 * as it leads to deadlock.
 	 */
 
-	if (connections_forall(count_fn, &cs) == -1) {
-		DEBUG(0,("count_current_connections: traverse of "
-			 "connections.tdb failed\n"));
+	if (tdb_traverse(tdb, count_fn, &cs) == -1) {
+		DEBUG(0,("claim_connection: traverse of connections.tdb failed with error %s.\n",
+			tdb_errorstr(tdb) ));
 		return False;
 	}
-
+	
 	return cs.curr_connections;
 }
 
 /****************************************************************************
- Count the number of connections open across all shares.
-****************************************************************************/
-
-int count_all_current_connections(void)
-{
-        return count_current_connections(NULL, True /* clear stale entries */);
-}
-
-/****************************************************************************
  Claim an entry in the connections database.
 ****************************************************************************/
 
-bool claim_connection(connection_struct *conn, const char *name,
-		      uint32 msg_flags)
+BOOL claim_connection(connection_struct *conn, const char *name,int max_connections,BOOL Clear, uint32 msg_flags)
 {
-	struct db_record *rec;
+	struct connections_key key;
 	struct connections_data crec;
-	TDB_DATA dbuf;
-	NTSTATUS status;
-	char addr[INET6_ADDRSTRLEN];
+	TDB_DATA kbuf, dbuf;
 
-	DEBUG(5,("claiming [%s]\n", name));
+	if (!tdb) {
+		if ( (tdb =conn_tdb_ctx()) == NULL ) {
+			return False;
+		}
+	}
+	
+	/*
+	 * Enforce the max connections parameter.
+	 */
 
-	if (!(rec = connections_fetch_entry(talloc_tos(), conn, name))) {
-		DEBUG(0, ("connections_fetch_entry failed\n"));
-		return False;
+	if (max_connections > 0) {
+		int curr_connections;
+		
+		curr_connections = count_current_connections( lp_servicename(SNUM(conn)), True );
+
+		if (curr_connections >= max_connections) {
+			DEBUG(1,("claim_connection: Max connections (%d) exceeded for %s\n",
+				max_connections, name ));
+			return False;
+		}
 	}
 
+	DEBUG(5,("claiming %s %d\n",name,max_connections));
+
+	make_conn_key(conn, name, &kbuf, &key);
+
 	/* fill in the crec */
 	ZERO_STRUCT(crec);
 	crec.magic = 0x280267;
@@ -154,74 +191,66 @@
 	if (conn) {
 		crec.uid = conn->uid;
 		crec.gid = conn->gid;
-		strlcpy(crec.servicename, lp_servicename(SNUM(conn)),
-			sizeof(crec.servicename));
+		safe_strcpy(crec.servicename,
+			    lp_servicename(SNUM(conn)),sizeof(crec.servicename)-1);
 	}
 	crec.start = time(NULL);
 	crec.bcast_msg_flags = msg_flags;
 	
-	strlcpy(crec.machine,get_remote_machine_name(),sizeof(crec.machine));
-	strlcpy(crec.addr,conn?conn->client_address:
-			client_addr(get_client_fd(),addr,sizeof(addr)),
-		sizeof(crec.addr));
+	safe_strcpy(crec.machine,get_remote_machine_name(),sizeof(crec.machine)-1);
+	safe_strcpy(crec.addr,conn?conn->client_address:client_addr(),sizeof(crec.addr)-1);
 
-	dbuf.dptr = (uint8 *)&crec;
+	dbuf.dptr = (char *)&crec;
 	dbuf.dsize = sizeof(crec);
 
-	status = rec->store(rec, dbuf, TDB_REPLACE);
-
-	TALLOC_FREE(rec);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	if (tdb_store(tdb, kbuf, dbuf, TDB_REPLACE) != 0) {
 		DEBUG(0,("claim_connection: tdb_store failed with error %s.\n",
-			 nt_errstr(status)));
+			tdb_errorstr(tdb) ));
 		return False;
 	}
 
 	return True;
 }
 
-bool register_message_flags(bool doreg, uint32 msg_flags)
+BOOL register_message_flags(BOOL doreg, uint32 msg_flags)
 {
-	struct db_record *rec;
+	struct connections_key key;
 	struct connections_data *pcrec;
-	NTSTATUS status;
+	TDB_DATA kbuf, dbuf;
 
+	if (!tdb)
+		return False;
+
 	DEBUG(10,("register_message_flags: %s flags 0x%x\n",
 		doreg ? "adding" : "removing",
 		(unsigned int)msg_flags ));
 
-	if (!(rec = connections_fetch_entry(NULL, NULL, ""))) {
-		DEBUG(0, ("connections_fetch_entry failed\n"));
-		return False;
-	}
+	make_conn_key(NULL, "", &kbuf, &key);
 
-	if (rec->value.dsize != sizeof(struct connections_data)) {
-		DEBUG(0,("register_message_flags: Got wrong record size\n"));
-		TALLOC_FREE(rec);
+        dbuf = tdb_fetch(tdb, kbuf);
+        if (!dbuf.dptr) {
+		DEBUG(0,("register_message_flags: tdb_fetch failed: %s\n",
+			tdb_errorstr(tdb)));
 		return False;
 	}
 
-	pcrec = (struct connections_data *)rec->value.dptr;
+	pcrec = (struct connections_data *)dbuf.dptr;
 	if (doreg)
 		pcrec->bcast_msg_flags |= msg_flags;
 	else
 		pcrec->bcast_msg_flags &= ~msg_flags;
 
-	status = rec->store(rec, rec->value, TDB_REPLACE);
-
-	if (!NT_STATUS_IS_OK(status)) {
+	if (tdb_store(tdb, kbuf, dbuf, TDB_REPLACE) != 0) {
 		DEBUG(0,("register_message_flags: tdb_store failed: %s.\n",
-			 nt_errstr(status)));
-		TALLOC_FREE(rec);
+			tdb_errorstr(tdb) ));
+		SAFE_FREE(dbuf.dptr);
 		return False;
 	}
 
 	DEBUG(10,("register_message_flags: new flags 0x%x\n",
 		(unsigned int)pcrec->bcast_msg_flags ));
 
-	TALLOC_FREE(rec);
-
+	SAFE_FREE(dbuf.dptr);
 	return True;
 }
 
@@ -243,10 +272,11 @@
 	snprintf( key_string, sizeof(key_string), "%s/%d/%d",
 		prec->name, procid_to_pid(&prec->pid), prec->pnum );
 		
-	*kbuf = string_term_tdb_data(talloc_strdup(prec, key_string));
-	if (kbuf->dptr == NULL )
+	if ( (kbuf->dptr = talloc_strdup(prec, key_string)) == NULL )
 		return NULL;
-
+		
+	kbuf->dsize = strlen(key_string)+1;
+	
 	return kbuf;
 }
 
@@ -266,13 +296,13 @@
 /*********************************************************************
 *********************************************************************/
 
-bool store_pipe_opendb( smb_np_struct *p )
+BOOL store_pipe_opendb( smb_np_struct *p )
 {
-	struct db_record *dbrec;
 	struct pipe_open_rec *prec;
 	TDB_DATA *key;
 	TDB_DATA data;
-	bool ret = False;
+	TDB_CONTEXT *pipe_tdb;
+	BOOL ret = False;
 	
 	if ( (prec = TALLOC_P( NULL, struct pipe_open_rec)) == NULL ) {
 		DEBUG(0,("store_pipe_opendb: talloc failed!\n"));
@@ -284,16 +314,15 @@
 		goto done;
 	}
 	
-	data.dptr = (uint8 *)prec;
+	data.dptr = (char*)prec;
 	data.dsize = sizeof(struct pipe_open_rec);
-
-	if (!(dbrec = connections_fetch_record(prec, *key))) {
-		DEBUG(0, ("connections_fetch_record failed\n"));
+	
+	if ( (pipe_tdb = conn_tdb_ctx() ) == NULL ) {
 		goto done;
 	}
-
-	ret = NT_STATUS_IS_OK(dbrec->store(dbrec, data, TDB_REPLACE));
 	
+	ret = (tdb_store( pipe_tdb, *key, data, TDB_REPLACE ) != -1);
+	
 done:
 	TALLOC_FREE( prec );	
 	return ret;
@@ -302,12 +331,12 @@
 /*********************************************************************
 *********************************************************************/
 
-bool delete_pipe_opendb( smb_np_struct *p )
+BOOL delete_pipe_opendb( smb_np_struct *p )
 {
-	struct db_record *dbrec;
 	struct pipe_open_rec *prec;
 	TDB_DATA *key;
-	bool ret = False;
+	TDB_CONTEXT *pipe_tdb;
+	BOOL ret = False;
 	
 	if ( (prec = TALLOC_P( NULL, struct pipe_open_rec)) == NULL ) {
 		DEBUG(0,("store_pipe_opendb: talloc failed!\n"));
@@ -319,12 +348,11 @@
 		goto done;
 	}
 	
-	if (!(dbrec = connections_fetch_record(prec, *key))) {
-		DEBUG(0, ("connections_fetch_record failed\n"));
+	if ( (pipe_tdb = conn_tdb_ctx() ) == NULL ) {
 		goto done;
 	}
 
-	ret = NT_STATUS_IS_OK(dbrec->delete_rec(dbrec));
+	ret = (tdb_delete( pipe_tdb, *key ) != -1 );
 	
 done:
 	TALLOC_FREE( prec );

Modified: branches/samba/upstream/source/smbd/dfree.c
===================================================================
--- branches/samba/upstream/source/smbd/dfree.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/dfree.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -23,7 +24,7 @@
  Normalise for DOS usage.
 ****************************************************************************/
 
-static void disk_norm(bool small_query, SMB_BIG_UINT *bsize,SMB_BIG_UINT *dfree,SMB_BIG_UINT *dsize)
+static void disk_norm(BOOL small_query, SMB_BIG_UINT *bsize,SMB_BIG_UINT *dfree,SMB_BIG_UINT *dsize)
 {
 	/* check if the disk is beyond the max disk size */
 	SMB_BIG_UINT maxdisksize = lp_maxdisksize();
@@ -62,7 +63,7 @@
  Return number of 1K blocks available on a path and total number.
 ****************************************************************************/
 
-SMB_BIG_UINT sys_disk_free(connection_struct *conn, const char *path, bool small_query, 
+SMB_BIG_UINT sys_disk_free(connection_struct *conn, const char *path, BOOL small_query, 
                               SMB_BIG_UINT *bsize,SMB_BIG_UINT *dfree,SMB_BIG_UINT *dsize)
 {
 	SMB_BIG_UINT dfree_retval;
@@ -81,18 +82,10 @@
 	dfree_command = lp_dfree_command(SNUM(conn));
 	if (dfree_command && *dfree_command) {
 		const char *p;
-		char **lines = NULL;
-		char *syscmd = NULL;
+		char **lines;
+		pstring syscmd;
 
-		syscmd = talloc_asprintf(talloc_tos(),
-				"%s %s",
-				dfree_command,
-				path);
-
-		if (!syscmd) {
-			return (SMB_BIG_UINT)-1;
-		}
-
+		slprintf(syscmd, sizeof(syscmd)-1, "%s %s", dfree_command, path);
 		DEBUG (3, ("disk_free: Running command %s\n", syscmd));
 
 		lines = file_lines_pload(syscmd, NULL);
@@ -150,10 +143,10 @@
 	}
 
 	if ((*dsize)<1) {
-		static bool done = false;
+		static int done;
 		if (!done) {
 			DEBUG(0,("WARNING: dfree is broken on this system\n"));
-			done=true;
+			done=1;
 		}
 		*dsize = 20*1024*1024/(*bsize);
 		*dfree = MAX(1,*dfree);
@@ -176,7 +169,7 @@
 
 SMB_BIG_UINT get_dfree_info(connection_struct *conn,
 			const char *path,
-			bool small_query,
+			BOOL small_query,
 			SMB_BIG_UINT *bsize,
 			SMB_BIG_UINT *dfree,
 			SMB_BIG_UINT *dsize)

Modified: branches/samba/upstream/source/smbd/dir.c
===================================================================
--- branches/samba/upstream/source/smbd/dir.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/dir.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,21 +1,21 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    Directory handling routines
    Copyright (C) Andrew Tridgell 1992-1998
-   Copyright (C) Jeremy Allison 2007
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -55,12 +55,12 @@
 	uint16 spid;
 	struct connection_struct *conn;
 	struct smb_Dir *dir_hnd;
-	bool expect_close;
+	BOOL expect_close;
 	char *wcard;
 	uint32 attr;
 	char *path;
-	bool has_wild; /* Set to true if the wcard entry has MS wildcard characters in it. */
-	bool did_stat; /* Optimisation for non-wcard searches. */
+	BOOL has_wild; /* Set to true if the wcard entry has MS wildcard characters in it. */
+	BOOL did_stat; /* Optimisation for non-wcard searches. */
 };
 
 static struct bitmap *dptr_bmap;
@@ -73,25 +73,15 @@
  Make a dir struct.
 ****************************************************************************/
 
-bool make_dir_struct(TALLOC_CTX *ctx,
-			char *buf,
-			const char *mask,
-			const char *fname,
-			SMB_OFF_T size,
-			uint32 mode,
-			time_t date,
-			bool uc)
-{
+void make_dir_struct(char *buf, const char *mask, const char *fname,SMB_OFF_T size,uint32 mode,time_t date, BOOL uc)
+{  
 	char *p;
-	char *mask2 = talloc_strdup(ctx, mask);
+	pstring mask2;
 
-	if (!mask2) {
-		return False;
-	}
+	pstrcpy(mask2,mask);
 
-	if ((mode & aDIR) != 0) {
+	if ((mode & aDIR) != 0)
 		size = 0;
-	}
 
 	memset(buf+1,' ',11);
 	if ((p = strchr_m(mask2,'.')) != NULL) {
@@ -99,9 +89,8 @@
 		push_ascii(buf+1,mask2,8, 0);
 		push_ascii(buf+9,p+1,3, 0);
 		*p = '.';
-	} else {
+	} else
 		push_ascii(buf+1,mask2,11, 0);
-	}
 
 	memset(buf+21,'\0',DIR_STRUCT_SIZE-21);
 	SCVAL(buf,21,mode);
@@ -112,7 +101,6 @@
 	   Strange, but verified on W2K3. Needed for OS/2. JRA. */
 	push_ascii(buf+30,fname,12, uc ? STR_UPPER : 0);
 	DEBUG(8,("put name [%s] from [%s] into dir struct\n",buf+30, fname));
-	return True;
 }
 
 /****************************************************************************
@@ -121,7 +109,7 @@
 
 void init_dptrs(void)
 {
-	static bool dptrs_init=False;
+	static BOOL dptrs_init=False;
 
 	if (dptrs_init)
 		return;
@@ -142,7 +130,8 @@
 {
 	if (dptr->dir_hnd) {
 		DEBUG(4,("Idling dptr dnum %d\n",dptr->dnum));
-		TALLOC_FREE(dptr->dir_hnd);
+		CloseDir(dptr->dir_hnd);
+		dptr->dir_hnd = NULL;
 	}
 }
 
@@ -181,7 +170,7 @@
  Get the struct dptr_struct for a dir index.
 ****************************************************************************/
 
-static struct dptr_struct *dptr_get(int key, bool forclose)
+static struct dptr_struct *dptr_get(int key, BOOL forclose)
 {
 	struct dptr_struct *dptr;
 
@@ -191,9 +180,7 @@
 				if (dirhandles_open >= MAX_OPEN_DIRECTORIES)
 					dptr_idleoldest();
 				DEBUG(4,("dptr_get: Reopening dptr key %d\n",key));
-				if (!(dptr->dir_hnd = OpenDir(
-					      NULL, dptr->conn, dptr->path,
-					      dptr->wcard, dptr->attr))) {
+				if (!(dptr->dir_hnd = OpenDir(dptr->conn, dptr->path, dptr->wcard, dptr->attr))) {
 					DEBUG(4,("dptr_get: Failed to open %s (%s)\n",dptr->path,
 						strerror(errno)));
 					return False;
@@ -252,7 +239,7 @@
 
 	DLIST_REMOVE(dirptrs, dptr);
 
-	/*
+	/* 
 	 * Free the dnum in the bitmap. Remember the dnum value is always 
 	 * biased by one with respect to the bitmap.
 	 */
@@ -264,7 +251,9 @@
 
 	bitmap_clear(dptr_bmap, dptr->dnum - 1);
 
-	TALLOC_FREE(dptr->dir_hnd);
+	if (dptr->dir_hnd) {
+		CloseDir(dptr->dir_hnd);
+	}
 
 	/* Lanman 2 specific code */
 	SAFE_FREE(dptr->wcard);
@@ -353,7 +342,7 @@
  finished with that one.
 ****************************************************************************/
 
-static void dptr_close_oldest(bool old)
+static void dptr_close_oldest(BOOL old)
 {
 	struct dptr_struct *dptr;
 
@@ -392,11 +381,12 @@
  wcard must not be zero.
 ****************************************************************************/
 
-NTSTATUS dptr_create(connection_struct *conn, const char *path, bool old_handle, bool expect_close,uint16 spid,
-		const char *wcard, bool wcard_has_wild, uint32 attr, struct dptr_struct **dptr_ret)
+NTSTATUS dptr_create(connection_struct *conn, pstring path, BOOL old_handle, BOOL expect_close,uint16 spid,
+		const char *wcard, BOOL wcard_has_wild, uint32 attr, struct dptr_struct **dptr_ret)
 {
 	struct dptr_struct *dptr = NULL;
 	struct smb_Dir *dir_hnd;
+        const char *dir2;
 	NTSTATUS status;
 
 	DEBUG(5,("dptr_create dir=%s\n", path));
@@ -410,12 +400,17 @@
 		return status;
 	}
 
-	dir_hnd = OpenDir(NULL, conn, path, wcard, attr);
+	/* use a const pointer from here on */
+	dir2 = path;
+	if (!*dir2)
+		dir2 = ".";
+
+	dir_hnd = OpenDir(conn, dir2, wcard, attr);
 	if (!dir_hnd) {
 		return map_nt_error_from_unix(errno);
 	}
 
-	string_set(&conn->dirpath,path);
+	string_set(&conn->dirpath,dir2);
 
 	if (dirhandles_open >= MAX_OPEN_DIRECTORIES) {
 		dptr_idleoldest();
@@ -424,7 +419,7 @@
 	dptr = SMB_MALLOC_P(struct dptr_struct);
 	if(!dptr) {
 		DEBUG(0,("malloc fail in dptr_create.\n"));
-		TALLOC_FREE(dir_hnd);
+		CloseDir(dir_hnd);
 		return NT_STATUS_NO_MEMORY;
 	}
 
@@ -454,7 +449,7 @@
 			if(dptr->dnum == -1 || dptr->dnum > 254) {
 				DEBUG(0,("dptr_create: returned %d: Error - all old dirptrs in use ?\n", dptr->dnum));
 				SAFE_FREE(dptr);
-				TALLOC_FREE(dir_hnd);
+				CloseDir(dir_hnd);
 				return NT_STATUS_TOO_MANY_OPENED_FILES;
 			}
 		}
@@ -484,7 +479,7 @@
 			if(dptr->dnum == -1 || dptr->dnum < 255) {
 				DEBUG(0,("dptr_create: returned %d: Error - all new dirptrs in use ?\n", dptr->dnum));
 				SAFE_FREE(dptr);
-				TALLOC_FREE(dir_hnd);
+				CloseDir(dir_hnd);
 				return NT_STATUS_TOO_MANY_OPENED_FILES;
 			}
 		}
@@ -494,7 +489,7 @@
 
 	dptr->dnum += 1; /* Always bias the dnum by one - no zero dnums allowed. */
 
-	string_set(&dptr->path,path);
+	string_set(&dptr->path,dir2);
 	dptr->conn = conn;
 	dptr->dir_hnd = dir_hnd;
 	dptr->spid = spid;
@@ -503,7 +498,7 @@
 	if (!dptr->wcard) {
 		bitmap_clear(dptr_bmap, dptr->dnum - 1);
 		SAFE_FREE(dptr);
-		TALLOC_FREE(dir_hnd);
+		CloseDir(dir_hnd);
 		return NT_STATUS_NO_MEMORY;
 	}
 	if (lp_posix_pathnames() || (wcard[0] == '.' && wcard[1] == 0)) {
@@ -532,8 +527,7 @@
 int dptr_CloseDir(struct dptr_struct *dptr)
 {
 	DLIST_REMOVE(dirptrs, dptr);
-	TALLOC_FREE(dptr->dir_hnd);
-	return 0;
+	return CloseDir(dptr->dir_hnd);
 }
 
 void dptr_SeekDir(struct dptr_struct *dptr, long offset)
@@ -546,7 +540,7 @@
 	return TellDir(dptr->dir_hnd);
 }
 
-bool dptr_has_wild(struct dptr_struct *dptr)
+BOOL dptr_has_wild(struct dptr_struct *dptr)
 {
 	return dptr->has_wild;
 }
@@ -576,10 +570,7 @@
  Return the next visible file name, skipping veto'd and invisible files.
 ****************************************************************************/
 
-const char *dptr_ReadDirName(TALLOC_CTX *ctx,
-			struct dptr_struct *dptr,
-			long *poffset,
-			SMB_STRUCT_STAT *pst)
+const char *dptr_ReadDirName(struct dptr_struct *dptr, long *poffset, SMB_STRUCT_STAT *pst)
 {
 	SET_STAT_INVALID(*pst);
 
@@ -594,7 +585,7 @@
 	}
 
 	if (!dptr->did_stat) {
-		char *pathreal = NULL;
+		pstring pathreal;
 
 		/* We know the stored wcard contains no wildcard characters. See if we can match
 		   with a stat call. If we can't, then set did_stat to true to
@@ -618,19 +609,14 @@
 			return dptr->wcard;
 		}
 
-		pathreal = talloc_asprintf(ctx,
-					"%s/%s",
-					dptr->path,
-					dptr->wcard);
-		if (!pathreal) {
-			return NULL;
-		}
+		pstrcpy(pathreal,dptr->path);
+		pstrcat(pathreal,"/");
+		pstrcat(pathreal,dptr->wcard);
 
 		if (SMB_VFS_STAT(dptr->conn,pathreal,pst) == 0) {
 			/* We need to set the underlying dir_hnd offset to -1 also as
 			   this function is usually called with the output from TellDir. */
 			dptr->dir_hnd->offset = *poffset = END_OF_DIRECTORY_OFFSET;
-			TALLOC_FREE(pathreal);
 			return dptr->wcard;
 		} else {
 			/* If we get any other error than ENOENT or ENOTDIR
@@ -639,20 +625,14 @@
 				/* We need to set the underlying dir_hdn offset to -1 also as
 				   this function is usually called with the output from TellDir. */
 				dptr->dir_hnd->offset = *poffset = END_OF_DIRECTORY_OFFSET;
-				TALLOC_FREE(pathreal);
 				return dptr->wcard;
 			}
 		}
 
-		TALLOC_FREE(pathreal);
+		/* In case sensitive mode we don't search - we know if it doesn't exist 
+		   with a stat we will fail. */
 
-		/* Stat failed. We know this is authoratiative if we are
-		 * providing case sensitive semantics or the underlying
-		 * filesystem is case sensitive.
-		 */
-
-		if (dptr->conn->case_sensitive ||
-		    !(dptr->conn->fs_capabilities & FILE_CASE_SENSITIVE_SEARCH)) {
+		if (dptr->conn->case_sensitive) {
 			/* We need to set the underlying dir_hnd offset to -1 also as
 			   this function is usually called with the output from TellDir. */
 			dptr->dir_hnd->offset = *poffset = END_OF_DIRECTORY_OFFSET;
@@ -666,7 +646,7 @@
  Search for a file by name, skipping veto'ed and not visible files.
 ****************************************************************************/
 
-bool dptr_SearchDir(struct dptr_struct *dptr, const char *name, long *poffset, SMB_STRUCT_STAT *pst)
+BOOL dptr_SearchDir(struct dptr_struct *dptr, const char *name, long *poffset, SMB_STRUCT_STAT *pst)
 {
 	SET_STAT_INVALID(*pst);
 
@@ -692,7 +672,7 @@
  Fill the 5 byte server reserved dptr field.
 ****************************************************************************/
 
-bool dptr_fill(char *buf1,unsigned int key)
+BOOL dptr_fill(char *buf1,unsigned int key)
 {
 	unsigned char *buf = (unsigned char *)buf1;
 	struct dptr_struct *dptr = dptr_get(key, False);
@@ -757,7 +737,7 @@
  Check that a file matches a particular file type.
 ****************************************************************************/
 
-bool dir_check_ftype(connection_struct *conn, uint32 mode, uint32 dirtype)
+BOOL dir_check_ftype(connection_struct *conn, uint32 mode, uint32 dirtype)
 {
 	uint32 mask;
 
@@ -779,61 +759,46 @@
 	return True;
 }
 
-static bool mangle_mask_match(connection_struct *conn,
-		const char *filename,
-		const char *mask)
+static BOOL mangle_mask_match(connection_struct *conn, fstring filename, char *mask)
 {
-	char mname[13];
-
-	if (!name_to_8_3(filename,mname,False,conn->params)) {
-		return False;
-	}
-	return mask_match_search(mname,mask,False);
+	mangle_map(filename,True,False,conn->params);
+	return mask_match_search(filename,mask,False);
 }
 
 /****************************************************************************
  Get an 8.3 directory entry.
 ****************************************************************************/
 
-bool get_dir_entry(TALLOC_CTX *ctx,
-		connection_struct *conn,
-		const char *mask,
-		uint32 dirtype,
-		char **pp_fname_out,
-		SMB_OFF_T *size,
-		uint32 *mode,
-		time_t *date,
-		bool check_descend,
-		bool ask_sharemode)
+BOOL get_dir_entry(connection_struct *conn,char *mask,uint32 dirtype, pstring fname,
+                   SMB_OFF_T *size,uint32 *mode,time_t *date,BOOL check_descend)
 {
-	const char *dname = NULL;
-	bool found = False;
+	const char *dname;
+	BOOL found = False;
 	SMB_STRUCT_STAT sbuf;
-	char *pathreal = NULL;
-	const char *filename = NULL;
-	bool needslash;
+	pstring path;
+	pstring pathreal;
+	pstring filename;
+	BOOL needslash;
 
-	*pp_fname_out = NULL;
+	*path = *pathreal = *filename = 0;
 
 	needslash = ( conn->dirpath[strlen(conn->dirpath) -1] != '/');
 
-	if (!conn->dirptr) {
+	if (!conn->dirptr)
 		return(False);
-	}
 
 	while (!found) {
 		long curoff = dptr_TellDir(conn->dirptr);
-		dname = dptr_ReadDirName(ctx, conn->dirptr, &curoff, &sbuf);
+		dname = dptr_ReadDirName(conn->dirptr, &curoff, &sbuf);
 
 		DEBUG(6,("readdir on dirptr 0x%lx now at offset %ld\n",
 			(long)conn->dirptr,TellDir(conn->dirptr->dir_hnd)));
-
-		if (dname == NULL) {
+      
+		if (dname == NULL) 
 			return(False);
-		}
+      
+		pstrcpy(filename,dname);      
 
-		filename = dname;
-
 		/* notice the special *.* handling. This appears to be the only difference
 			between the wildcard handling in this routine and in the trans2 routines.
 			see masktest for a demo
@@ -841,76 +806,39 @@
 		if ((strcmp(mask,"*.*") == 0) ||
 		    mask_match_search(filename,mask,False) ||
 		    mangle_mask_match(conn,filename,mask)) {
-			char mname[13];
 
-			if (!mangle_is_8_3(filename, False, conn->params)) {
-				if (!name_to_8_3(filename,mname,False,
-					   conn->params)) {
-					continue;
-				}
-				filename = mname;
-			}
+			if (!mangle_is_8_3(filename, False, conn->params))
+				mangle_map(filename,True,False,
+					   conn->params);
 
-			if (needslash) {
-				pathreal = talloc_asprintf(ctx,
-						"%s/%s",
-						conn->dirpath,
-						dname);
-			} else {
-				pathreal = talloc_asprintf(ctx,
-						"%s%s",
-						conn->dirpath,
-						dname);
-			}
-			if (!pathreal) {
-				return False;
-			}
-
+			pstrcpy(fname,filename);
+			*path = 0;
+			pstrcpy(path,conn->dirpath);
+			if(needslash)
+				pstrcat(path,"/");
+			pstrcpy(pathreal,path);
+			pstrcat(path,fname);
+			pstrcat(pathreal,dname);
 			if (!VALID_STAT(sbuf) && (SMB_VFS_STAT(conn, pathreal, &sbuf)) != 0) {
-				DEBUG(5,("Couldn't stat 1 [%s]. Error = %s\n",
-					pathreal, strerror(errno) ));
-				TALLOC_FREE(pathreal);
+				DEBUG(5,("Couldn't stat 1 [%s]. Error = %s\n",path, strerror(errno) ));
 				continue;
 			}
-
+	  
 			*mode = dos_mode(conn,pathreal,&sbuf);
 
 			if (!dir_check_ftype(conn,*mode,dirtype)) {
 				DEBUG(5,("[%s] attribs 0x%x didn't match 0x%x\n",filename,(unsigned int)*mode,(unsigned int)dirtype));
-				TALLOC_FREE(pathreal);
 				continue;
 			}
 
 			*size = sbuf.st_size;
 			*date = sbuf.st_mtime;
 
-			if (ask_sharemode) {
-				struct timespec write_time_ts;
-				struct file_id fileid;
+			DEBUG(3,("get_dir_entry mask=[%s] found %s fname=%s\n",mask, pathreal,fname));
 
-				fileid = vfs_file_id_from_sbuf(conn, &sbuf);
-				get_file_infos(fileid, NULL, &write_time_ts);
-				if (!null_timespec(write_time_ts)) {
-					*date = convert_timespec_to_time_t(write_time_ts);
-				}
-			}
-
-			DEBUG(3,("get_dir_entry mask=[%s] found %s "
-				"fname=%s (%s)\n",
-				mask,
-				pathreal,
-				dname,
-				filename));
-
 			found = True;
 
-			*pp_fname_out = talloc_strdup(ctx, filename);
-			if (!*pp_fname_out) {
-				return False;
-			}
-
 			DirCacheAdd(conn->dirptr->dir_hnd, dname, curoff);
-			TALLOC_FREE(pathreal);
 		}
 	}
 
@@ -923,9 +851,10 @@
  use it for anything security sensitive.
 ********************************************************************/
 
-static bool user_can_read_file(connection_struct *conn, char *name, SMB_STRUCT_STAT *pst)
+static BOOL user_can_read_file(connection_struct *conn, char *name, SMB_STRUCT_STAT *pst)
 {
 	SEC_DESC *psd = NULL;
+	size_t sd_size;
 	files_struct *fsp;
 	NTSTATUS status;
 	uint32 access_granted;
@@ -939,12 +868,17 @@
 		return True;
 	}
 
-	SMB_ASSERT(VALID_STAT(*pst));
+	/* If we can't stat it does not show it */
+	if (!VALID_STAT(*pst) && (SMB_VFS_STAT(conn, name, pst) != 0)) {
+		DEBUG(10,("user_can_read_file: SMB_VFS_STAT failed for file %s with error %s\n",
+			name, strerror(errno) ));
+		return False;
+	}
 
 	/* Pseudo-open the file (note - no fd's created). */
 
 	if(S_ISDIR(pst->st_mode)) {
-		 status = open_directory(conn, NULL, name, pst,
+		 status = open_directory(conn, name, pst,
 			READ_CONTROL_ACCESS,
 			FILE_SHARE_READ|FILE_SHARE_WRITE,
 			FILE_OPEN,
@@ -952,7 +886,7 @@
 			FILE_ATTRIBUTE_DIRECTORY,
 			NULL, &fsp);
 	} else {
-		status = open_file_stat(conn, NULL, name, pst, &fsp);
+		status = open_file_stat(conn, name, pst, &fsp);
 	}
 
 	if (!NT_STATUS_IS_OK(status)) {
@@ -960,12 +894,12 @@
 	}
 
 	/* Get NT ACL -allocated in main loop talloc context. No free needed here. */
-	status = SMB_VFS_FGET_NT_ACL(fsp,
+	sd_size = SMB_VFS_FGET_NT_ACL(fsp, fsp->fh->fd,
 			(OWNER_SECURITY_INFORMATION|GROUP_SECURITY_INFORMATION|DACL_SECURITY_INFORMATION), &psd);
 	close_file(fsp, NORMAL_CLOSE);
 
 	/* No access if SD get failed. */
-	if (!NT_STATUS_IS_OK(status)) {
+	if (!sd_size) {
 		return False;
 	}
 
@@ -980,9 +914,10 @@
  use it for anything security sensitive.
 ********************************************************************/
 
-static bool user_can_write_file(connection_struct *conn, char *name, SMB_STRUCT_STAT *pst)
+static BOOL user_can_write_file(connection_struct *conn, char *name, SMB_STRUCT_STAT *pst)
 {
 	SEC_DESC *psd = NULL;
+	size_t sd_size;
 	files_struct *fsp;
 	int info;
 	NTSTATUS status;
@@ -997,14 +932,17 @@
 		return True;
 	}
 
-	SMB_ASSERT(VALID_STAT(*pst));
+	/* If we can't stat it does not show it */
+	if (!VALID_STAT(*pst) && (SMB_VFS_STAT(conn, name, pst) != 0)) {
+		return False;
+	}
 
 	/* Pseudo-open the file */
 
 	if(S_ISDIR(pst->st_mode)) {
 		return True;
 	} else {
-		status = open_file_ntcreate(conn, NULL, name, pst,
+		status = open_file_ntcreate(conn, name, pst,
 			FILE_WRITE_ATTRIBUTES,
 			FILE_SHARE_READ|FILE_SHARE_WRITE,
 			FILE_OPEN,
@@ -1019,14 +957,13 @@
 	}
 
 	/* Get NT ACL -allocated in main loop talloc context. No free needed here. */
-	status = SMB_VFS_FGET_NT_ACL(fsp,
+	sd_size = SMB_VFS_FGET_NT_ACL(fsp, fsp->fh->fd,
 			(OWNER_SECURITY_INFORMATION|GROUP_SECURITY_INFORMATION|DACL_SECURITY_INFORMATION), &psd);
 	close_file(fsp, NORMAL_CLOSE);
 
 	/* No access if SD get failed. */
-	if (!NT_STATUS_IS_OK(status)) {
+	if (!sd_size)
 		return False;
-	}
 
 	return se_access_check(psd, current_user.nt_user_token, FILE_WRITE_DATA,
                                  &access_granted, &status);
@@ -1036,7 +973,7 @@
   Is a file a "special" type ?
 ********************************************************************/
 
-static bool file_is_special(connection_struct *conn, char *name, SMB_STRUCT_STAT *pst)
+static BOOL file_is_special(connection_struct *conn, char *name, SMB_STRUCT_STAT *pst)
 {
 	/*
 	 * If user is a member of the Admin group
@@ -1046,7 +983,9 @@
 	if (conn->admin_user)
 		return False;
 
-	SMB_ASSERT(VALID_STAT(*pst));
+	/* If we can't stat it does not show it */
+	if (!VALID_STAT(*pst) && (SMB_VFS_STAT(conn, name, pst) != 0))
+		return True;
 
 	if (S_ISREG(pst->st_mode) || S_ISDIR(pst->st_mode) || S_ISLNK(pst->st_mode))
 		return False;
@@ -1055,16 +994,14 @@
 }
 
 /*******************************************************************
- Should the file be seen by the client ? NOTE: A successful return
- is no guarantee of the file's existence ... you also have to check
- whether pst is valid.
+ Should the file be seen by the client ?
 ********************************************************************/
 
-bool is_visible_file(connection_struct *conn, const char *dir_path, const char *name, SMB_STRUCT_STAT *pst, bool use_veto)
+BOOL is_visible_file(connection_struct *conn, const char *dir_path, const char *name, SMB_STRUCT_STAT *pst, BOOL use_veto)
 {
-	bool hide_unreadable = lp_hideunreadable(SNUM(conn));
-	bool hide_unwriteable = lp_hideunwriteable_files(SNUM(conn));
-	bool hide_special = lp_hide_special_files(SNUM(conn));
+	BOOL hide_unreadable = lp_hideunreadable(SNUM(conn));
+	BOOL hide_unwriteable = lp_hideunwriteable_files(SNUM(conn));
+	BOOL hide_special = lp_hide_special_files(SNUM(conn));
 
 	SET_STAT_INVALID(*pst);
 
@@ -1079,6 +1016,7 @@
 	}
 
 	if (hide_unreadable || hide_unwriteable || hide_special) {
+		pstring link_target;
 		char *entry = NULL;
 
 		if (asprintf(&entry, "%s/%s", dir_path, name) == -1) {
@@ -1088,20 +1026,11 @@
 		/* If it's a dfs symlink, ignore _hide xxxx_ options */
 		if (lp_host_msdfs() &&
 				lp_msdfs_root(SNUM(conn)) &&
-				is_msdfs_link(conn, entry, NULL)) {
+				is_msdfs_link(conn, entry, link_target, NULL)) {
 			SAFE_FREE(entry);
 			return True;
 		}
 
-		/* If the file name does not exist, there's no point checking
-		 * the configuration options. We succeed, on the basis that the
-		 * checks *might* have passed if the file was present.
-		 */
-		if (SMB_VFS_STAT(conn, entry, pst) != 0) {
-		        SAFE_FREE(entry);
-		        return True;
-		}
-
 		/* Honour _hide unreadable_ option */
 		if (hide_unreadable && !user_can_read_file(conn, entry, pst)) {
 			DEBUG(10,("is_visible_file: file %s is unreadable.\n", entry ));
@@ -1125,54 +1054,83 @@
 	return True;
 }
 
-static int smb_Dir_destructor(struct smb_Dir *dirp)
-{
-	if (dirp->dir) {
-		SMB_VFS_CLOSEDIR(dirp->conn,dirp->dir);
-	}
-	dirhandles_open--;
-	return 0;
-}
-
 /*******************************************************************
  Open a directory.
 ********************************************************************/
 
-struct smb_Dir *OpenDir(TALLOC_CTX *mem_ctx, connection_struct *conn,
-			const char *name, const char *mask, uint32 attr)
+struct smb_Dir *OpenDir(connection_struct *conn, const char *name, const char *mask, uint32 attr)
 {
-	struct smb_Dir *dirp = TALLOC_ZERO_P(mem_ctx, struct smb_Dir);
+	struct smb_Dir *dirp = SMB_MALLOC_P(struct smb_Dir);
 
 	if (!dirp) {
 		return NULL;
 	}
+	ZERO_STRUCTP(dirp);
 
 	dirp->conn = conn;
 	dirp->name_cache_size = lp_directory_name_cache_size(SNUM(conn));
 
-	dirp->dir_path = talloc_strdup(dirp, name);
+	dirp->dir_path = SMB_STRDUP(name);
 	if (!dirp->dir_path) {
 		goto fail;
 	}
-
-	dirhandles_open++;
-	talloc_set_destructor(dirp, smb_Dir_destructor);
-
 	dirp->dir = SMB_VFS_OPENDIR(conn, dirp->dir_path, mask, attr);
 	if (!dirp->dir) {
-		DEBUG(5,("OpenDir: Can't open %s. %s\n", dirp->dir_path,
-			 strerror(errno) ));
+		DEBUG(5,("OpenDir: Can't open %s. %s\n", dirp->dir_path, strerror(errno) ));
 		goto fail;
 	}
 
+	if (dirp->name_cache_size) {
+		dirp->name_cache = SMB_CALLOC_ARRAY(struct name_cache_entry,
+				dirp->name_cache_size);
+		if (!dirp->name_cache) {
+			goto fail;
+		}
+	} else {
+		dirp->name_cache = NULL;
+	}
+
+	dirhandles_open++;
 	return dirp;
 
   fail:
-	TALLOC_FREE(dirp);
+
+	if (dirp) {
+		if (dirp->dir) {
+			SMB_VFS_CLOSEDIR(conn,dirp->dir);
+		}
+		SAFE_FREE(dirp->dir_path);
+		SAFE_FREE(dirp->name_cache);
+		SAFE_FREE(dirp);
+	}
 	return NULL;
 }
 
+
 /*******************************************************************
+ Close a directory.
+********************************************************************/
+
+int CloseDir(struct smb_Dir *dirp)
+{
+	int i, ret = 0;
+
+	if (dirp->dir) {
+		ret = SMB_VFS_CLOSEDIR(dirp->conn,dirp->dir);
+	}
+	SAFE_FREE(dirp->dir_path);
+	if (dirp->name_cache) {
+		for (i = 0; i < dirp->name_cache_size; i++) {
+			SAFE_FREE(dirp->name_cache[i].name);
+		}
+	}
+	SAFE_FREE(dirp->name_cache);
+	SAFE_FREE(dirp);
+	dirhandles_open--;
+	return ret;
+}
+
+/*******************************************************************
  Read from a directory. Also return current offset.
  Don't check for veto or invisible files.
 ********************************************************************/
@@ -1237,7 +1195,7 @@
 	if (offset != dirp->offset) {
 		if (offset == START_OF_DIRECTORY_OFFSET) {
 			RewindDir(dirp, &offset);
-			/*
+			/* 
 			 * Ok we should really set the file number here
 			 * to 1 to enable ".." to be returned next. Trouble
 			 * is I'm worried about callers using SeekDir(dirp,0)
@@ -1278,24 +1236,15 @@
 {
 	struct name_cache_entry *e;
 
-	if (dirp->name_cache_size == 0) {
+	if (!dirp->name_cache_size || !dirp->name_cache) {
 		return;
 	}
 
-	if (dirp->name_cache == NULL) {
-		dirp->name_cache = TALLOC_ZERO_ARRAY(
-			dirp, struct name_cache_entry, dirp->name_cache_size);
-
-		if (dirp->name_cache == NULL) {
-			return;
-		}
-	}
-
 	dirp->name_cache_index = (dirp->name_cache_index+1) %
 					dirp->name_cache_size;
 	e = &dirp->name_cache[dirp->name_cache_index];
-	TALLOC_FREE(e->name);
-	e->name = talloc_strdup(dirp, name);
+	SAFE_FREE(e->name);
+	e->name = SMB_STRDUP(name);
 	e->offset = offset;
 }
 
@@ -1304,7 +1253,7 @@
  Don't check for veto or invisible files.
 ********************************************************************/
 
-bool SearchDir(struct smb_Dir *dirp, const char *name, long *poffset)
+BOOL SearchDir(struct smb_Dir *dirp, const char *name, long *poffset)
 {
 	int i;
 	const char *entry;
@@ -1352,8 +1301,7 @@
 	NTSTATUS status = NT_STATUS_OK;
 	long dirpos = 0;
 	const char *dname;
-	struct smb_Dir *dir_hnd = OpenDir(talloc_tos(), conn, dirname,
-					  NULL, 0);
+	struct smb_Dir *dir_hnd = OpenDir(conn, dirname, NULL, 0);
 
 	if (!dir_hnd) {
 		return map_nt_error_from_unix(errno);
@@ -1377,7 +1325,7 @@
 		status = NT_STATUS_DIRECTORY_NOT_EMPTY;
 		break;
 	}
-	TALLOC_FREE(dir_hnd);
+	CloseDir(dir_hnd);
 
 	return status;
 }

Modified: branches/samba/upstream/source/smbd/dmapi.c
===================================================================
--- branches/samba/upstream/source/smbd/dmapi.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/dmapi.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -25,9 +26,9 @@
 
 #ifndef USE_DMAPI
 
+int dmapi_init_session(void) { return -1; }
 uint32 dmapi_file_flags(const char * const path) { return 0; }
-bool dmapi_have_session(void) { return False; }
-const void * dmapi_get_current_session(void) { return NULL; }
+BOOL dmapi_have_session(void) { return False; }
 
 #else /* USE_DMAPI */
 
@@ -46,77 +47,100 @@
 #define DMAPI_SESSION_NAME "samba"
 #define DMAPI_TRACE 10
 
-static dm_sessid_t samba_dmapi_session = DM_NO_SESSION;
-static unsigned session_num;
+static dm_sessid_t dmapi_session = DM_NO_SESSION;
 
-/* 
-   Initialise DMAPI session. The session is persistant kernel state, 
-   so it might already exist, in which case we merely want to 
-   reconnect to it. This function should be called as root.
-*/
-static int dmapi_init_session(void)
+/* Initialise the DMAPI interface. Make sure that we only end up initialising
+ * once per process to avoid resource leaks across different DMAPI
+ * implementations.
+ */
+static int init_dmapi_service(void)
 {
+	static pid_t lastpid;
+
+	pid_t mypid;
+
+	mypid = sys_getpid();
+	if (mypid != lastpid) {
+		char *version;
+
+		lastpid = mypid;
+		if (dm_init_service(&version) < 0) {
+			return -1;
+		}
+
+		DEBUG(0, ("Initializing DMAPI: %s\n", version));
+	}
+
+	return 0;
+}
+
+BOOL dmapi_have_session(void)
+{
+	return dmapi_session != DM_NO_SESSION;
+}
+
+static dm_sessid_t *realloc_session_list(dm_sessid_t * sessions, int count)
+{
+	dm_sessid_t *nsessions;
+
+	nsessions = TALLOC_REALLOC_ARRAY(NULL, sessions, dm_sessid_t, count);
+	if (nsessions == NULL) {
+		TALLOC_FREE(sessions);
+		return NULL;
+	}
+
+	return nsessions;
+}
+
+/* Initialise DMAPI session. The session is persistant kernel state, so it
+ * might already exist, in which case we merely want to reconnect to it. This
+ * function should be called as root.
+ */
+int dmapi_init_session(void)
+{
 	char	buf[DM_SESSION_INFO_LEN];
 	size_t	buflen;
-	uint	    nsessions = 5;
+
+	uint	    nsessions = 10;
 	dm_sessid_t *sessions = NULL;
-	char    *version;
-	char    *session_name;
-	TALLOC_CTX *tmp_ctx = talloc_new(NULL);
 
 	int i, err;
 
-	if (session_num == 0) {
-		session_name = DMAPI_SESSION_NAME;
-	} else {
-		session_name = talloc_asprintf(tmp_ctx, "%s%u", DMAPI_SESSION_NAME,
-					       session_num);
-	}
+	/* If we aren't root, something in the following will fail due to lack
+	 * of privileges. Aborting seems a little extreme.
+	 */
+	SMB_WARN(getuid() == 0, "dmapi_init_session must be called as root");
 
-	if (session_name == NULL) {
-		DEBUG(0,("Out of memory in dmapi_init_session\n"));
-		talloc_free(tmp_ctx);
+	dmapi_session = DM_NO_SESSION;
+	if (init_dmapi_service() < 0) {
 		return -1;
 	}
- 
 
-	if (dm_init_service(&version) < 0) {
-		DEBUG(0, ("dm_init_service failed - disabling DMAPI\n"));
-		talloc_free(tmp_ctx);
+retry:
+
+	if ((sessions = realloc_session_list(sessions, nsessions)) == NULL) {
 		return -1;
 	}
 
-	ZERO_STRUCT(buf);
-
-	/* Fetch kernel DMAPI sessions until we get any of them */
-	do {
-		dm_sessid_t *new_sessions;
-		nsessions *= 2;
-		new_sessions = TALLOC_REALLOC_ARRAY(tmp_ctx, sessions, 
-						    dm_sessid_t, nsessions);
-		if (new_sessions == NULL) {
-			talloc_free(tmp_ctx);
-			return -1;
+	err = dm_getall_sessions(nsessions, sessions, &nsessions);
+	if (err < 0) {
+		if (errno == E2BIG) {
+			nsessions *= 2;
+			goto retry;
 		}
 
-		sessions = new_sessions;
-		err = dm_getall_sessions(nsessions, sessions, &nsessions);
-	} while (err == -1 && errno == E2BIG);
-
-	if (err == -1) {
 		DEBUGADD(DMAPI_TRACE,
 			("failed to retrieve DMAPI sessions: %s\n",
 			strerror(errno)));
-		talloc_free(tmp_ctx);
+		TALLOC_FREE(sessions);
 		return -1;
 	}
 
-	/* Look through existing kernel DMAPI sessions to find out ours */
 	for (i = 0; i < nsessions; ++i) {
 		err = dm_query_session(sessions[i], sizeof(buf), buf, &buflen);
 		buf[sizeof(buf) - 1] = '\0';
-		if (err == 0 && strcmp(session_name, buf) == 0) {
-			samba_dmapi_session = sessions[i];
+		if (err == 0 && strcmp(DMAPI_SESSION_NAME, buf) == 0) {
+			dmapi_session = sessions[i];
 			DEBUGADD(DMAPI_TRACE,
 				("attached to existing DMAPI session "
 				 "named '%s'\n", buf));
@@ -124,149 +148,100 @@
 		}
 	}
 
+	TALLOC_FREE(sessions);
+
 	/* No session already defined. */
-	if (samba_dmapi_session == DM_NO_SESSION) {
-		err = dm_create_session(DM_NO_SESSION, 
-					session_name,
-					&samba_dmapi_session);
+	if (dmapi_session == DM_NO_SESSION) {
+		err = dm_create_session(DM_NO_SESSION, DMAPI_SESSION_NAME,
+					&dmapi_session);
 		if (err < 0) {
 			DEBUGADD(DMAPI_TRACE,
 				("failed to create new DMAPI session: %s\n",
 				strerror(errno)));
-			samba_dmapi_session = DM_NO_SESSION;
-			talloc_free(tmp_ctx);
+			dmapi_session = DM_NO_SESSION;
 			return -1;
 		}
 
-		DEBUG(0, ("created new DMAPI session named '%s' for %s\n",
-			  session_name, version));
+		DEBUGADD(DMAPI_TRACE,
+			("created new DMAPI session named '%s'\n",
+			DMAPI_SESSION_NAME));
 	}
 
-	if (samba_dmapi_session != DM_NO_SESSION) {
-		set_effective_capability(DMAPI_ACCESS_CAPABILITY);
-	}
-
-	/* 
-	   Note that we never end the DMAPI session. It gets re-used if possiblie. 
-	   DMAPI session is a kernel resource that is usually lives until server reboot
-	   and doesn't get destroed when an application finishes.
-
-	   However, we free list of references to DMAPI sessions we've got from the kernel
-	   as it is not needed anymore once we have found (or created) our session.
+	/* Note that we never end the DMAPI session. This enables child
+	 * processes to continue to use the session after we exit. It also lets
+	 * you run a second Samba server on different ports without any
+	 * conflict.
 	 */
 
-	talloc_free(tmp_ctx);
 	return 0;
 }
 
-/*
-  Return a pointer to our DMAPI session, if available.
-  This assumes that you have called dmapi_have_session() first.
-*/
-const void *dmapi_get_current_session(void)
+/* Reattach to an existing dmapi session. Called from service processes that
+ * might not be running as root.
+ */
+static int reattach_dmapi_session(void)
 {
-	if (samba_dmapi_session == DM_NO_SESSION) {
-		return NULL;
-	}
+	char	buf[DM_SESSION_INFO_LEN];
+	size_t	buflen;
 
-	return (void *)&samba_dmapi_session;
-}
-	
-/*
-  dmapi_have_session() must be the first DMAPI call you make in Samba. It will
-  initialize DMAPI, if available, and tell you if you can get a DMAPI session.
-  This should be called in the client-specific child process.
-*/
-
-bool dmapi_have_session(void)
-{
-	static bool initialized;
-	if (!initialized) {
-		initialized = true;
-
+	if (dmapi_session != DM_NO_SESSION ) {
 		become_root();
-		dmapi_init_session();
-		unbecome_root();
 
-	}
+		/* NOTE: On Linux, this call opens /dev/dmapi, costing us a
+		 * file descriptor. Ideally, we would close this when we fork.
+		 */
+		if (init_dmapi_service() < 0) {
+			dmapi_session = DM_NO_SESSION;
+			unbecome_root();
+			return -1;
+		}
 
-	return samba_dmapi_session != DM_NO_SESSION;
-}
+		if (dm_query_session(dmapi_session, sizeof(buf),
+			    buf, &buflen) < 0) {
+			/* Session is stale. Disable DMAPI. */
+			dmapi_session = DM_NO_SESSION;
+			unbecome_root();
+			return -1;
+		}
 
-/*
-  only call this when you get back an EINVAL error indicating that the
-  session you are using is invalid. This destroys the existing session
-  and creates a new one.
- */
-bool dmapi_new_session(void)
-{
-	if (dmapi_have_session()) {
-		/* try to destroy the old one - this may not succeed */
-		dm_destroy_session(samba_dmapi_session);
-	}
-	samba_dmapi_session = DM_NO_SESSION;
-	become_root();
-	session_num++;
-	dmapi_init_session();
-	unbecome_root();
-	return samba_dmapi_session != DM_NO_SESSION;    
-}
+		set_effective_capability(DMAPI_ACCESS_CAPABILITY);
 
-/* 
-    only call this when exiting from master smbd process. DMAPI sessions
-    are long-lived kernel resources we ought to share across smbd processes.
-    However, we must free them when all smbd processes are finished to
-    allow other subsystems clean up properly. Not freeing DMAPI session
-    blocks certain HSM implementations from proper shutdown.
-*/
-bool dmapi_destroy_session(void)
-{
-	if (samba_dmapi_session != DM_NO_SESSION) {
-		become_root();
-		if (0 == dm_destroy_session(samba_dmapi_session)) {
-			session_num--;
-			samba_dmapi_session = DM_NO_SESSION;
-		} else {
-			DEBUG(0,("Couldn't destroy DMAPI session: %s\n",
-				 strerror(errno)));
-		}
+		DEBUG(DMAPI_TRACE, ("reattached DMAPI session\n"));
 		unbecome_root();
 	}
-	return samba_dmapi_session == DM_NO_SESSION;
+
+	return 0;
 }
 
-
-/* 
-   This is default implementation of dmapi_file_flags() that is 
-   called from VFS is_offline() call to know whether file is offline.
-   For GPFS-specific version see modules/vfs_tsmsm.c. It might be
-   that approach on quering existence of a specific attribute that
-   is used in vfs_tsmsm.c will work with other DMAPI-based HSM 
-   implementations as well.
-*/
 uint32 dmapi_file_flags(const char * const path)
 {
+	static int attached = 0;
+
 	int		err;
 	dm_eventset_t   events = {0};
 	uint		nevents;
 
-	dm_sessid_t     dmapi_session;
-	const void      *dmapi_session_ptr;
-	void	        *dm_handle = NULL;
-	size_t	        dm_handle_len = 0;
+	void	*dm_handle;
+	size_t	dm_handle_len;
 
-	uint32	        flags = 0;
+	uint32	flags = 0;
 
-	dmapi_session_ptr = dmapi_get_current_session();
-	if (dmapi_session_ptr == NULL) {
-		return 0;
+	/* If a DMAPI session has been initialised, then we need to make sure
+	 * we are attached to it and have the correct privileges. This is
+	 * necessary to be able to do DMAPI operations across a fork(2). If
+	 * it fails, there is no liklihood of that failure being transient.
+	 *
+	 * Note that this use of the static attached flag relies on the fact
+	 * that dmapi_file_flags() is never called prior to forking the
+	 * per-client server process.
+	 */
+	if (dmapi_have_session() && !attached) {
+		attached++;
+		if (reattach_dmapi_session() < 0) {
+			return 0;
+		}
 	}
 
-	dmapi_session = *(dm_sessid_t *)dmapi_session_ptr;
-	if (dmapi_session == DM_NO_SESSION) {
-		return 0;
-	}
-
 	/* AIX has DMAPI but no POSIX capablities support. In this case,
 	 * we need to be root to do DMAPI manipulations.
 	 */
@@ -316,7 +291,8 @@
 	 * interested in trapping read events is that part of the file is
 	 * offline.
 	 */
-	DEBUG(DMAPI_TRACE, ("DMAPI event list for %s\n", path));
+	DEBUG(DMAPI_TRACE, ("DMAPI event list for %s is %#llx\n",
+		    path, events));
 	if (DMEV_ISSET(DM_EVENT_READ, events)) {
 		flags = FILE_ATTRIBUTE_OFFLINE;
 	}
@@ -336,5 +312,4 @@
 	return flags;
 }
 
-
 #endif /* USE_DMAPI */

Deleted: branches/samba/upstream/source/smbd/dnsregister.c
===================================================================
--- branches/samba/upstream/source/smbd/dnsregister.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/dnsregister.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,212 +0,0 @@
-/*
-   Unix SMB/CIFS implementation.
-   DNS-SD registration
-   Copyright (C) Rishi Srivatsavai 2007
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <includes.h>
-
-/* Uses DNS service discovery (libdns_sd) to
- * register the SMB service. SMB service is registered
- * on ".local" domain via Multicast DNS & any
- * other unicast DNS domains available.
- *
- * Users use the smbclient -B (Browse) option to
- * browse for advertised SMB services.
- */
-
-#define DNS_REG_RETRY_INTERVAL (5*60)  /* in seconds */
-
-#ifdef WITH_DNSSD_SUPPORT
-
-#include <dns_sd.h>
-
-struct dns_reg_state {
-	DNSServiceRef srv_ref;
-	struct timed_event *retry_handler;
-};
-
-void dns_register_close(struct dns_reg_state **dns_state_ptr)
-{
-	struct dns_reg_state *dns_state = *dns_state_ptr;
-
-	if (dns_state == NULL) {
-		return;
-	}
-
-	if (dns_state->srv_ref != NULL) {
-		/* Close connection to the mDNS daemon */
-		DNSServiceRefDeallocate(dns_state->srv_ref);
-		dns_state->srv_ref = NULL;
-	}
-
-	/* Clear event handler */
-	if (dns_state->retry_handler != NULL) {
-		TALLOC_FREE(dns_state->retry_handler);
-		dns_state->retry_handler = NULL;
-	}
-
-	talloc_free(dns_state);
-	*dns_state_ptr = NULL;
-}
-
-static void dns_register_smbd_retry(struct event_context *ctx,
-                                   struct timed_event *te,
-                                   const struct timeval *now,
-                                   void *private_data)
-{
-	struct dns_reg_state *dns_state = (struct dns_reg_state *)private_data;
-
-	/* Clear previous registration state to force new
-	 * registration attempt. Clears event handler.
-	 */
-	dns_register_close(&dns_state);
-}
-
-static void schedule_dns_register_smbd_retry(struct dns_reg_state *dns_state,
-		struct timeval *timeout)
-{
-	struct timed_event * event;
-
-	dns_state->srv_ref = NULL;
-	event= event_add_timed(smbd_event_context(),
-			NULL,
-			timeval_current_ofs(DNS_REG_RETRY_INTERVAL, 0),
-			"DNS registration handler",
-			dns_register_smbd_retry,
-			dns_state);
-
-	dns_state->retry_handler = event;
-	get_timed_events_timeout(smbd_event_context(), timeout);
-}
-
-/* Kick off a mDNS request to register the "_smb._tcp" on the specified port.
- * We really ought to register on all the ports we are listening on. This will
- * have to be an exercise for some-one who knows the DNS registration API a bit
- * better.
- */
-void dns_register_smbd(struct dns_reg_state ** dns_state_ptr,
-		unsigned port,
-		int *maxfd,
-		fd_set *listen_set,
-		struct timeval *timeout)
-{
-	int mdnsd_conn_fd;
-	DNSServiceErrorType err;
-	struct dns_reg_state *dns_state = *dns_state_ptr;
-
-	if (dns_state == NULL) {
-		*dns_state_ptr = dns_state = talloc(NULL, struct dns_reg_state);
-		if (dns_state == NULL) {
-			return;
-		}
-	}
-
-	/* Quit if a re-try attempt has been scheduled.  */
-	if (dns_state->retry_handler != NULL) {
-		return;
-	}
-
-	/* If a registration is active add conn
-	 * fd to select listen_set and return
-	 */
-	if (dns_state->srv_ref != NULL) {
-		mdnsd_conn_fd = DNSServiceRefSockFD(dns_state->srv_ref);
-		FD_SET(mdnsd_conn_fd, listen_set);
-		return;
-	}
-
-	DEBUG(6, ("registering _smb._tcp service on port %d\n", port));
-
-	/* Register service with DNS. Connects with the mDNS
-	 * daemon running on the local system to perform DNS
-	 * service registration.
-	 */
-	err = DNSServiceRegister(&dns_state->srv_ref, 0 /* flags */,
-			kDNSServiceInterfaceIndexAny,
-			NULL /* service name */,
-			"_smb._tcp" /* service type */,
-			NULL /* domain */,
-			"" /* SRV target host name */,
-			htons(port),
-			0 /* TXT record len */,
-			NULL /* TXT record data */,
-			NULL /* callback func */,
-			NULL /* callback context */);
-
-	if (err != kDNSServiceErr_NoError) {
-		/* Failed to register service. Schedule a re-try attempt.
-		 */
-		DEBUG(3, ("unable to register with mDNS (err %d)\n", err));
-		schedule_dns_register_smbd_retry(dns_state, timeout);
-		return;
-	}
-
-	mdnsd_conn_fd = DNSServiceRefSockFD(dns_state->srv_ref);
-	FD_SET(mdnsd_conn_fd, listen_set);
-	*maxfd = MAX(*maxfd, mdnsd_conn_fd);
-	*timeout = timeval_zero();
-
-}
-
-/* Processes reply from mDNS daemon. Returns true if a reply was received */
-bool dns_register_smbd_reply(struct dns_reg_state *dns_state,
-		fd_set *lfds, struct timeval *timeout)
-{
-	int mdnsd_conn_fd = -1;
-
-	if (dns_state->srv_ref == NULL) {
-		return false;
-	}
-
-	mdnsd_conn_fd = DNSServiceRefSockFD(dns_state->srv_ref);
-
-	/* Process reply from daemon. Handles any errors. */
-	if ((mdnsd_conn_fd != -1) && (FD_ISSET(mdnsd_conn_fd,lfds)) ) {
-		DNSServiceErrorType err;
-		
-		err = DNSServiceProcessResult(dns_state->srv_ref);
-		if (err != kDNSServiceErr_NoError) {
-			DEBUG(3, ("failed to process mDNS result (err %d), re-trying\n",
-				    err));
-			schedule_dns_register_smbd_retry(dns_state, timeout);
-		}
-
-		return true;
-	}
-
-	return false;
-}
-
-#else /* WITH_DNSSD_SUPPORT */
-
- void dns_register_smbd(struct dns_reg_state ** dns_state_ptr,
-		unsigned port,
-		int *maxfd,
-		fd_set *listen_set,
-		struct timeval *timeout)
-{}
-
- void dns_register_close(struct dns_reg_state ** dns_state_ptr)
-{}
-
- bool dns_register_smbd_reply(struct dns_reg_state *dns_state,
-		fd_set *lfds, struct timeval *timeout)
-{
-	return false;
-}
-
-#endif /* WITH_DNSSD_SUPPORT */

Modified: branches/samba/upstream/source/smbd/dosmode.c
===================================================================
--- branches/samba/upstream/source/smbd/dosmode.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/dosmode.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -31,6 +32,23 @@
 }
 
 /****************************************************************************
+ Work out whether this file is offline
+****************************************************************************/
+
+static uint32 set_offline_flag(connection_struct *conn, const char *const path)
+{
+	if (ISDOT(path) || ISDOTDOT(path)) {
+		return 0;
+	}
+
+	if (!lp_dmapi_support(SNUM(conn)) || !dmapi_have_session()) {
+		return 0;
+	}
+
+	return dmapi_file_flags(path);
+}
+
+/****************************************************************************
  Change a dos mode to a unix mode.
     Base permission for files:
          if creating file and inheriting (i.e. parent_dir != NULL)
@@ -183,7 +201,7 @@
  Get DOS attributes from an EA.
 ****************************************************************************/
 
-static bool get_ea_dos_attribute(connection_struct *conn, const char *path,SMB_STRUCT_STAT *sbuf, uint32 *pattr)
+static BOOL get_ea_dos_attribute(connection_struct *conn, const char *path,SMB_STRUCT_STAT *sbuf, uint32 *pattr)
 {
 	ssize_t sizeret;
 	fstring attrstr;
@@ -239,11 +257,11 @@
  Set DOS attributes in an EA.
 ****************************************************************************/
 
-static bool set_ea_dos_attribute(connection_struct *conn, const char *path, SMB_STRUCT_STAT *sbuf, uint32 dosmode)
+static BOOL set_ea_dos_attribute(connection_struct *conn, const char *path, SMB_STRUCT_STAT *sbuf, uint32 dosmode)
 {
 	fstring attrstr;
 	files_struct *fsp = NULL;
-	bool ret = False;
+	BOOL ret = False;
 
 	if (!lp_store_dos_attributes(SNUM(conn))) {
 		return False;
@@ -349,7 +367,6 @@
 uint32 dos_mode(connection_struct *conn, const char *path,SMB_STRUCT_STAT *sbuf)
 {
 	uint32 result = 0;
-	bool offline;
 
 	DEBUG(8,("dos_mode: %s\n", path));
 
@@ -379,10 +396,8 @@
 		result |= dos_mode_from_sbuf(conn, path, sbuf);
 	}
 
-	
-	offline = SMB_VFS_IS_OFFLINE(conn, path, sbuf);
-	if (S_ISREG(sbuf->st_mode) && offline) {
-		result |= FILE_ATTRIBUTE_OFFLINE;
+	if (S_ISREG(sbuf->st_mode)) {
+		result |= set_offline_flag(conn, path);
 	}
 
 	/* Optimization : Only call is_hidden_path if it's not already
@@ -411,18 +426,16 @@
 
 int file_set_dosmode(connection_struct *conn, const char *fname,
 		     uint32 dosmode, SMB_STRUCT_STAT *st,
-		     const char *parent_dir,
-		     bool newfile)
+		     const char *parent_dir)
 {
 	SMB_STRUCT_STAT st1;
 	int mask=0;
 	mode_t tmp;
 	mode_t unixmode;
-	int ret = -1, lret = -1;
-	uint32_t old_mode;
+	int ret = -1;
 
 	/* We only allow READONLY|HIDDEN|SYSTEM|DIRECTORY|ARCHIVE here. */
-	dosmode &= (SAMBA_ATTRIBUTES_MASK | FILE_ATTRIBUTE_OFFLINE);
+	dosmode &= SAMBA_ATTRIBUTES_MASK;
 
 	DEBUG(10,("file_set_dosmode: setting dos mode 0x%x on file %s\n", dosmode, fname));
 
@@ -445,34 +458,13 @@
 	else
 		dosmode &= ~aDIR;
 
-	old_mode = dos_mode(conn,fname,st);
-	
-	if (dosmode & FILE_ATTRIBUTE_OFFLINE) {
-		if (!(old_mode & FILE_ATTRIBUTE_OFFLINE)) {
-			lret = SMB_VFS_SET_OFFLINE(conn, fname);
-			if (lret == -1) {
-				DEBUG(0, ("set_dos_mode: client has asked to set "
-					  "FILE_ATTRIBUTE_OFFLINE to %s/%s but there was "
-					  "an error while setting it or it is not supported.\n",
-					  parent_dir, fname));
-			}
-		}
-	}
-
-	dosmode  &= ~FILE_ATTRIBUTE_OFFLINE;
-	old_mode &= ~FILE_ATTRIBUTE_OFFLINE;
-
-	if (old_mode == dosmode) {
+	if (dos_mode(conn,fname,st) == dosmode) {
 		st->st_mode = unixmode;
 		return(0);
 	}
 
 	/* Store the DOS attributes in an EA by preference. */
 	if (set_ea_dos_attribute(conn, fname, st, dosmode)) {
-		if (!newfile) {
-			notify_fname(conn, NOTIFY_ACTION_MODIFIED,
-				FILE_NOTIFY_CHANGE_ATTRIBUTES, fname);
-		}
 		st->st_mode = unixmode;
 		return 0;
 	}
@@ -509,12 +501,9 @@
 		unixmode |= (st->st_mode & (S_IWUSR|S_IWGRP|S_IWOTH));
 	}
 
-	ret = SMB_VFS_CHMOD(conn, fname, unixmode);
-	if (ret == 0) {
-		if(!newfile || (lret != -1)) {
-			notify_fname(conn, NOTIFY_ACTION_MODIFIED,
-				     FILE_NOTIFY_CHANGE_ATTRIBUTES, fname);
-		}
+	if ((ret = SMB_VFS_CHMOD(conn,fname,unixmode)) == 0) {
+		notify_fname(conn, NOTIFY_ACTION_MODIFIED,
+			     FILE_NOTIFY_CHANGE_ATTRIBUTES, fname);
 		st->st_mode = unixmode;
 		return 0;
 	}
@@ -543,13 +532,11 @@
 		if (!NT_STATUS_IS_OK(open_file_fchmod(conn,fname,st,&fsp)))
 			return -1;
 		become_root();
-		ret = SMB_VFS_FCHMOD(fsp, unixmode);
+		ret = SMB_VFS_FCHMOD(fsp, fsp->fh->fd, unixmode);
 		unbecome_root();
 		close_file_fchmod(fsp);
-		if (!newfile) {
-			notify_fname(conn, NOTIFY_ACTION_MODIFIED,
-				FILE_NOTIFY_CHANGE_ATTRIBUTES, fname);
-		}
+		notify_fname(conn, NOTIFY_ACTION_MODIFIED,
+			     FILE_NOTIFY_CHANGE_ATTRIBUTES, fname);
 		if (ret == 0) {
 			st->st_mode = unixmode;
 		}
@@ -571,11 +558,6 @@
 	errno = 0;
 	ZERO_STRUCT(sbuf);
 
-	DEBUG(6, ("file_ntime: actime: %s",
-		  time_to_asc(convert_timespec_to_time_t(ts[0]))));
-	DEBUG(6, ("file_ntime: modtime: %s",
-		  time_to_asc(convert_timespec_to_time_t(ts[1]))));
-
 	/* Don't update the time on read-only shares */
 	/* We need this as set_filetime (which can be called on
 	   close and other paths) can end up calling this function
@@ -615,40 +597,30 @@
 
 	return ret;
 }
-
+  
 /*******************************************************************
  Change a filetime - possibly allowing DOS semantics.
 *******************************************************************/
 
-bool set_write_time_path(connection_struct *conn, const char *fname,
-			 struct file_id fileid, const struct timespec mtime,
-			 bool overwrite)
+BOOL set_filetime(connection_struct *conn, const char *fname,
+		const struct timespec mtime)
 {
+	struct timespec ts[2];
+
 	if (null_timespec(mtime)) {
-		return true;
+		return(True);
 	}
 
-	if (!set_write_time(fileid, mtime, overwrite)) {
-		return false;
-	}
+	ts[1] = mtime; /* mtime. */
+	ts[0] = ts[1]; /* atime. */
 
-	/* in the overwrite case the caller should trigger the notify */
-	if (!overwrite) {
-		notify_fname(conn, NOTIFY_ACTION_MODIFIED,
-			     FILE_NOTIFY_CHANGE_LAST_WRITE, fname);
+	if (file_ntimes(conn, fname, ts)) {
+		DEBUG(4,("set_filetime(%s) failed: %s\n",fname,strerror(errno)));
+		return False;
 	}
 
-	return true;
+	notify_fname(conn, NOTIFY_ACTION_MODIFIED,
+		     FILE_NOTIFY_CHANGE_LAST_WRITE, fname);
+  
+	return True;
 }
-
-bool set_write_time_fsp(struct files_struct *fsp, const struct timespec mtime,
-			bool overwrite)
-{
-	if (overwrite) {
-		fsp->write_time_forced = true;
-		TALLOC_FREE(fsp->update_write_time_event);
-	}
-
-	return set_write_time_path(fsp->conn, fsp->fsp_name, fsp->file_id,
-				   mtime, overwrite);
-}

Modified: branches/samba/upstream/source/smbd/error.c
===================================================================
--- branches/samba/upstream/source/smbd/error.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/error.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -24,8 +25,52 @@
 
 extern uint32 global_client_caps;
 
-bool use_nt_status(void)
+/****************************************************************************
+ Create an error packet from a cached error.
+****************************************************************************/
+ 
+int cached_error_packet(char *outbuf,files_struct *fsp,int line,const char *file)
 {
+	write_bmpx_struct *wbmpx = fsp->wbmpx_ptr;
+	int32 eclass = wbmpx->wr_errclass;
+	int32 err = wbmpx->wr_error;
+	NTSTATUS ntstatus = wbmpx->wr_status;
+ 
+	/* We can now delete the auxiliary struct */
+	SAFE_FREE(fsp->wbmpx_ptr);
+	return error_packet(outbuf,eclass,err,ntstatus,line,file);
+}
+
+/****************************************************************************
+ Create an error packet from errno.
+****************************************************************************/
+
+int unix_error_packet(char *outbuf,int def_class,uint32 def_code, NTSTATUS def_status, int line, const char *file)
+{
+	int eclass=def_class;
+	int ecode=def_code;
+	NTSTATUS ntstatus = def_status;
+	int i=0;
+
+	if (errno != 0) {
+		DEBUG(3,("unix_error_packet: error string = %s\n",strerror(errno)));
+  
+		while (unix_dos_nt_errmap[i].dos_class != 0) {
+			if (unix_dos_nt_errmap[i].unix_error == errno) {
+				eclass = unix_dos_nt_errmap[i].dos_class;
+				ecode = unix_dos_nt_errmap[i].dos_code;
+				ntstatus = unix_dos_nt_errmap[i].nt_error;
+				break;
+			}
+			i++;
+		}
+	}
+
+	return error_packet(outbuf,eclass,ecode,ntstatus,line,file);
+}
+
+BOOL use_nt_status(void)
+{
 	return lp_nt_status_support() && (global_client_caps & CAP_STATUS32);
 }
 
@@ -38,8 +83,8 @@
 
 void error_packet_set(char *outbuf, uint8 eclass, uint32 ecode, NTSTATUS ntstatus, int line, const char *file)
 {
-	bool force_nt_status = False;
-	bool force_dos_status = False;
+	BOOL force_nt_status = False;
+	BOOL force_dos_status = False;
 
 	if (eclass == (uint8)-1) {
 		force_nt_status = True;
@@ -83,47 +128,17 @@
 
 int error_packet(char *outbuf, uint8 eclass, uint32 ecode, NTSTATUS ntstatus, int line, const char *file)
 {
-	int outsize = srv_set_message(outbuf,0,0,True);
+	int outsize = set_message(outbuf,0,0,True);
 	error_packet_set(outbuf, eclass, ecode, ntstatus, line, file);
 	return outsize;
 }
 
-void reply_nt_error(struct smb_request *req, NTSTATUS ntstatus,
-		    int line, const char *file)
-{
-	TALLOC_FREE(req->outbuf);
-	reply_outbuf(req, 0, 0);
-	error_packet_set((char *)req->outbuf, 0, 0, ntstatus, line, file);
-}
+/*******************************************************************************
+ Special error map processing needed for returning DOS errors on open calls.
+*******************************************************************************/
 
-void reply_force_nt_error(struct smb_request *req, NTSTATUS ntstatus,
-			  int line, const char *file)
+int error_open(char *outbuf, NTSTATUS status, int line, const char *file)
 {
-	TALLOC_FREE(req->outbuf);
-	reply_outbuf(req, 0, 0);
-	error_packet_set((char *)req->outbuf, -1, -1, ntstatus, line, file);
-}
-
-void reply_dos_error(struct smb_request *req, uint8 eclass, uint32 ecode,
-		    int line, const char *file)
-{
-	TALLOC_FREE(req->outbuf);
-	reply_outbuf(req, 0, 0);
-	error_packet_set((char *)req->outbuf, eclass, ecode, NT_STATUS_OK, line,
-			 file);
-}
-
-void reply_both_error(struct smb_request *req, uint8 eclass, uint32 ecode,
-		      NTSTATUS status, int line, const char *file)
-{
-	TALLOC_FREE(req->outbuf);
-	reply_outbuf(req, 0, 0);
-	error_packet_set((char *)req->outbuf, eclass, ecode, status,
-			 line, file);
-}
-
-void reply_openerror(struct smb_request *req, NTSTATUS status)
-{
 	if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {
 		/*
 		 * We hit an existing file, and if we're returning DOS
@@ -131,39 +146,8 @@
 		 * ERRDOS/183, we need to return ERRDOS/80, see bug
 		 * 4852.
 		 */
-		reply_botherror(req, NT_STATUS_OBJECT_NAME_COLLISION,
-			ERRDOS, ERRfilexists);
-	} else {
-		reply_nterror(req, status);
+		return error_packet(outbuf, ERRDOS, ERRfilexists,
+				NT_STATUS_OBJECT_NAME_COLLISION, line, file);
 	}
+	return error_packet(outbuf,0,0,status,line,file);
 }
-
-void reply_unix_error(struct smb_request *req, uint8 defclass, uint32 defcode,
-			NTSTATUS defstatus, int line, const char *file)
-{
-	int eclass=defclass;
-	int ecode=defcode;
-	NTSTATUS ntstatus = defstatus;
-	int i=0;
-
-	TALLOC_FREE(req->outbuf);
-	reply_outbuf(req, 0, 0);
-
-	if (errno != 0) {
-		DEBUG(3,("unix_error_packet: error string = %s\n",
-			strerror(errno)));
-
-		while (unix_dos_nt_errmap[i].dos_class != 0) {
-			if (unix_dos_nt_errmap[i].unix_error == errno) {
-				eclass = unix_dos_nt_errmap[i].dos_class;
-				ecode = unix_dos_nt_errmap[i].dos_code;
-				ntstatus = unix_dos_nt_errmap[i].nt_error;
-				break;
-			}
-			i++;
-		}
-	}
-
-	error_packet_set((char *)req->outbuf, eclass, ecode, ntstatus,
-		line, file);
-}

Modified: branches/samba/upstream/source/smbd/fake_file.c
===================================================================
--- branches/samba/upstream/source/smbd/fake_file.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/fake_file.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -111,9 +112,8 @@
 
 	/* access check */
 	if (current_user.ut.uid != 0) {
-		DEBUG(3, ("open_fake_file_shared: access_denied to "
-			  "service[%s] file[%s] user[%s]\n",
-			  lp_servicename(SNUM(conn)),fname,conn->user));
+		DEBUG(1,("open_fake_file_shared: access_denied to service[%s] file[%s] user[%s]\n",
+			lp_servicename(SNUM(conn)),fname,conn->user));
 		return NT_STATUS_ACCESS_DENIED;
 
 	}

Deleted: branches/samba/upstream/source/smbd/file_access.c
===================================================================
--- branches/samba/upstream/source/smbd/file_access.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/file_access.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,185 +0,0 @@
-/*
-   Unix SMB/CIFS implementation.
-   Check access to files based on security descriptors.
-   Copyright (C) Jeremy Allison 2005-2006.
-   Copyright (C) Michael Adam 2007.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-
-extern struct current_user current_user;
-
-#undef  DBGC_CLASS
-#define DBGC_CLASS DBGC_ACLS
-
-static bool can_access_file_acl(struct connection_struct *conn,
-				const char * fname, SMB_STRUCT_STAT *psbuf,
-				uint32_t access_mask)
-{
-	bool result;
-	NTSTATUS status;
-	uint32_t access_granted;
-	struct security_descriptor *secdesc = NULL;
-
-	status = SMB_VFS_GET_NT_ACL(conn, fname,
-				    (OWNER_SECURITY_INFORMATION |
-				     GROUP_SECURITY_INFORMATION |
-				     DACL_SECURITY_INFORMATION),
-				    &secdesc);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(5, ("Could not get acl: %s\n", nt_errstr(status)));
-		return false;
-	}
-
-	result = se_access_check(secdesc, current_user.nt_user_token,
-				 access_mask, &access_granted, &status);
-	TALLOC_FREE(secdesc);
-	return result;
-}
-
-/****************************************************************************
- Actually emulate the in-kernel access checking for delete access. We need
- this to successfully return ACCESS_DENIED on a file open for delete access.
-****************************************************************************/
-
-bool can_delete_file_in_directory(connection_struct *conn, const char *fname)
-{
-	SMB_STRUCT_STAT sbuf;
-	TALLOC_CTX *ctx = talloc_tos();
-	char *dname = NULL;
-
-	if (!CAN_WRITE(conn)) {
-		return False;
-	}
-
-	/* Get the parent directory permission mask and owners. */
-	if (!parent_dirname_talloc(ctx,
-				fname,
-				&dname,
-				NULL)) {
-		return False;
-	}
-	if(SMB_VFS_STAT(conn, dname, &sbuf) != 0) {
-		return False;
-	}
-
-	/* fast paths first */
-
-	if (!S_ISDIR(sbuf.st_mode)) {
-		return False;
-	}
-	if (current_user.ut.uid == 0 || conn->admin_user) {
-		/* I'm sorry sir, I didn't know you were root... */
-		return True;
-	}
-
-	/* Check primary owner write access. */
-	if (current_user.ut.uid == sbuf.st_uid) {
-		return (sbuf.st_mode & S_IWUSR) ? True : False;
-	}
-
-#ifdef S_ISVTX
-	/* sticky bit means delete only by owner or root. */
-	if (sbuf.st_mode & S_ISVTX) {
-		SMB_STRUCT_STAT sbuf_file;
-		if(SMB_VFS_STAT(conn, fname, &sbuf_file) != 0) {
-			if (errno == ENOENT) {
-				/* If the file doesn't already exist then
-				 * yes we'll be able to delete it. */
-				return True;
-			}
-			return False;
-		}
-		/*
-		 * Patch from SATOH Fumiyasu <fumiyas at miraclelinux.com>
-		 * for bug #3348. Don't assume owning sticky bit
-		 * directory means write access allowed.
-		 */
-		if (current_user.ut.uid != sbuf_file.st_uid) {
-			return False;
-		}
-	}
-#endif
-
-	/* now for ACL checks */
-
-	return can_access_file_acl(conn, dname, &sbuf, FILE_WRITE_DATA);
-}
-
-/****************************************************************************
- Actually emulate the in-kernel access checking for read/write access. We need
- this to successfully check for ability to write for dos filetimes.
- Note this doesn't take into account share write permissions.
-****************************************************************************/
-
-bool can_access_file(connection_struct *conn, const char *fname, SMB_STRUCT_STAT *psbuf, uint32 access_mask)
-{
-	if (!(access_mask & (FILE_READ_DATA|FILE_WRITE_DATA))) {
-		return False;
-	}
-	access_mask &= (FILE_READ_DATA|FILE_WRITE_DATA);
-
-	/* some fast paths first */
-
-	DEBUG(10,("can_access_file: requesting 0x%x on file %s\n",
-		(unsigned int)access_mask, fname ));
-
-	if (current_user.ut.uid == 0 || conn->admin_user) {
-		/* I'm sorry sir, I didn't know you were root... */
-		return True;
-	}
-
-	if (!VALID_STAT(*psbuf)) {
-		/* Get the file permission mask and owners. */
-		if(SMB_VFS_STAT(conn, fname, psbuf) != 0) {
-			return False;
-		}
-	}
-
-	/* Check primary owner access. */
-	if (current_user.ut.uid == psbuf->st_uid) {
-		switch (access_mask) {
-			case FILE_READ_DATA:
-				return (psbuf->st_mode & S_IRUSR) ? True : False;
-
-			case FILE_WRITE_DATA:
-				return (psbuf->st_mode & S_IWUSR) ? True : False;
-
-			default: /* FILE_READ_DATA|FILE_WRITE_DATA */
-
-				if ((psbuf->st_mode & (S_IWUSR|S_IRUSR)) == (S_IWUSR|S_IRUSR)) {
-					return True;
-				} else {
-					return False;
-				}
-		}
-	}
-
-	/* now for ACL checks */
-
-	return can_access_file_acl(conn, fname, psbuf, access_mask);
-}
-
-/****************************************************************************
- Userspace check for write access.
- Note this doesn't take into account share write permissions.
-****************************************************************************/
-
-bool can_write_to_file(connection_struct *conn, const char *fname, SMB_STRUCT_STAT *psbuf)
-{
-	return can_access_file(conn, fname, psbuf, FILE_WRITE_DATA);
-}
-

Modified: branches/samba/upstream/source/smbd/fileio.c
===================================================================
--- branches/samba/upstream/source/smbd/fileio.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/fileio.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,18 +16,19 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
-static bool setup_write_cache(files_struct *, SMB_OFF_T);
+static BOOL setup_write_cache(files_struct *, SMB_OFF_T);
 
 /****************************************************************************
  Read from write cache if we can.
 ****************************************************************************/
 
-static bool read_from_write_cache(files_struct *fsp,char *data,SMB_OFF_T pos,size_t n)
+static BOOL read_from_write_cache(files_struct *fsp,char *data,SMB_OFF_T pos,size_t n)
 {
 	write_cache *wcp = fsp->wcp;
 
@@ -77,7 +78,7 @@
 #ifdef DMF_FIX
 		int numretries = 3;
 tryagain:
-		readret = SMB_VFS_PREAD(fsp,data,n,pos);
+		readret = SMB_VFS_PREAD(fsp,fsp->fh->fd,data,n,pos);
 
 		if (readret == -1) {
 			if ((errno == EAGAIN) && numretries) {
@@ -89,7 +90,7 @@
 			return -1;
 		}
 #else /* NO DMF fix. */
-		readret = SMB_VFS_PREAD(fsp,data,n,pos);
+		readret = SMB_VFS_PREAD(fsp,fsp->fh->fd,data,n,pos);
 
 		if (readret == -1) {
 			return -1;
@@ -116,16 +117,12 @@
  *Really* write to a file.
 ****************************************************************************/
 
-static ssize_t real_write_file(struct smb_request *req,
-				files_struct *fsp,
-				const char *data,
-				SMB_OFF_T pos,
-				size_t n)
+static ssize_t real_write_file(files_struct *fsp,const char *data, SMB_OFF_T pos, size_t n)
 {
 	ssize_t ret;
 
         if (pos == -1) {
-                ret = vfs_write_data(req, fsp, data, n);
+                ret = vfs_write_data(fsp, data, n);
         } else {
 		fsp->fh->pos = pos;
 		if (pos && lp_strict_allocate(SNUM(fsp->conn))) {
@@ -133,7 +130,7 @@
 				return -1;
 			}
 		}
-                ret = vfs_pwrite_data(req, fsp, data, n, pos);
+                ret = vfs_pwrite_data(fsp, data, n, pos);
 	}
 
 	DEBUG(10,("real_write_file (%s): pos = %.0f, size = %lu, returned %ld\n",
@@ -142,6 +139,26 @@
 	if (ret != -1) {
 		fsp->fh->pos += ret;
 
+		/*
+		 * It turns out that setting the last write time from a Windows
+		 * client stops any subsequent writes from updating the write time.
+		 * Doing this after the write gives a race condition here where
+		 * a stat may see the changed write time before we reset it here,
+		 * but it's cheaper than having to store the write time in shared
+		 * memory and look it up using dev/inode across all running smbd's.
+		 * The 99% solution will hopefully be good enough in this case. JRA.
+		 */
+
+		if (!null_timespec(fsp->pending_modtime)) {
+			set_filetime(fsp->conn, fsp->fsp_name, fsp->pending_modtime);
+
+			/* If we didn't get the "set modtime" call ourselves, we must
+			   store the last write time to restore on close. JRA. */
+			if (!fsp->pending_modtime_owner) {
+				fsp->last_write_time = timespec_current();
+			}
+		}
+
 /* Yes - this is correct - writes don't update this. JRA. */
 /* Found by Samba4 tests. */
 #if 0
@@ -163,7 +180,7 @@
 	write_cache *wcp = fsp->wcp;
 
 	wcp->file_size = wcp->offset + wcp->data_size;
-	ret = SMB_VFS_FTRUNCATE(fsp, wcp->file_size);
+	ret = SMB_VFS_FTRUNCATE(fsp, fsp->fh->fd, wcp->file_size);
 	if (ret == -1) {
 		DEBUG(0,("wcp_file_size_change (%s): ftruncate of size %.0f error %s\n",
 			fsp->fsp_name, (double)wcp->file_size, strerror(errno) ));
@@ -171,60 +188,15 @@
 	return ret;
 }
 
-static void update_write_time_handler(struct event_context *ctx,
-				      struct timed_event *te,
-				      const struct timeval *now,
-				      void *private_data)
-{
-       files_struct *fsp = (files_struct *)private_data;
-
-       /* Remove the timed event handler. */
-       TALLOC_FREE(fsp->update_write_time_event);
-       DEBUG(5, ("Update write time on %s\n", fsp->fsp_name));
-
-       /* change the write time if not already changed by someoneelse */
-       set_write_time_fsp(fsp, timespec_current(), false);
-}
-
-void trigger_write_time_update(struct files_struct *fsp)
-{
-	int delay;
-
-	if (fsp->write_time_forced) {
-		return;
-	}
-
-	if (fsp->update_write_time_triggered) {
-		return;
-	}
-	fsp->update_write_time_triggered = true;
-
-	delay = lp_parm_int(SNUM(fsp->conn),
-			    "smbd", "writetimeupdatedelay",
-			    WRITE_TIME_UPDATE_USEC_DELAY);
-
-	/* trigger the update 2 seconds later */
-	fsp->update_write_time_on_close = true;
-	fsp->update_write_time_event =
-		event_add_timed(smbd_event_context(), NULL,
-				timeval_current_ofs(0, delay),
-				"update_write_time_handler",
-				update_write_time_handler, fsp);
-}
-
 /****************************************************************************
  Write to a file.
 ****************************************************************************/
 
-ssize_t write_file(struct smb_request *req,
-			files_struct *fsp,
-			const char *data,
-			SMB_OFF_T pos,
-			size_t n)
+ssize_t write_file(files_struct *fsp, const char *data, SMB_OFF_T pos, size_t n)
 {
 	write_cache *wcp = fsp->wcp;
 	ssize_t total_written = 0;
-	int write_path = -1;
+	int write_path = -1; 
 
 	if (fsp->print_file) {
 		fstring sharename;
@@ -249,17 +221,10 @@
 		SMB_STRUCT_STAT st;
 		fsp->modified = True;
 
-		if (SMB_VFS_FSTAT(fsp, &st) == 0) {
-			int dosmode;
-			trigger_write_time_update(fsp);
-			dosmode = dos_mode(fsp->conn,fsp->fsp_name,&st);
-			if ((lp_store_dos_attributes(SNUM(fsp->conn)) ||
-					MAP_ARCHIVE(fsp->conn)) &&
-					!IS_DOS_ARCHIVE(dosmode)) {
-				file_set_dosmode(fsp->conn,fsp->fsp_name,
-						dosmode | aARCH,&st,
-						NULL,
-						false);
+		if (SMB_VFS_FSTAT(fsp,fsp->fh->fd,&st) == 0) {
+			int dosmode = dos_mode(fsp->conn,fsp->fsp_name,&st);
+			if ((lp_store_dos_attributes(SNUM(fsp->conn)) || MAP_ARCHIVE(fsp->conn)) && !IS_DOS_ARCHIVE(dosmode)) {
+				file_set_dosmode(fsp->conn,fsp->fsp_name,dosmode | aARCH,&st, False);
 			}
 
 			/*
@@ -270,8 +235,8 @@
 			if (EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type) && !wcp) {
 				setup_write_cache(fsp, st.st_size);
 				wcp = fsp->wcp;
-			}
-		}
+			} 
+		}  
 	}
 
 #ifdef WITH_PROFILE
@@ -316,18 +281,9 @@
 	}
 #endif
 
-	if (wcp && req->unread_bytes) {
-		/* If we're using receivefile don't
-		 * deal with a write cache.
-		 */
-		flush_write_cache(fsp, WRITE_FLUSH);
-		delete_write_cache(fsp);
-		wcp = NULL;
-	}
-
 	if(!wcp) {
 		DO_PROFILE_INC(writecache_direct_writes);
-		total_written = real_write_file(req, fsp, data, pos, n);
+		total_written = real_write_file(fsp, data, pos, n);
 		return total_written;
 	}
 
@@ -336,13 +292,13 @@
 
 	fsp->fh->pos = pos + n;
 
-	/*
+	/* 
 	 * If we have active cache and it isn't contiguous then we flush.
 	 * NOTE: There is a small problem with running out of disk ....
 	 */
 
 	if (wcp->data_size) {
-		bool cache_flush_needed = False;
+		BOOL cache_flush_needed = False;
 
 		if ((pos >= wcp->offset) && (pos <= wcp->offset + wcp->data_size)) {
       
@@ -655,7 +611,7 @@
 			if ( n <= wcp->alloc_size && n > wcp->data_size) {
 				cache_flush_needed = True;
 			} else {
-				ssize_t ret = real_write_file(NULL,fsp, data, pos, n);
+				ssize_t ret = real_write_file(fsp, data, pos, n);
 
 				/*
 				 * If the write overlaps the entire cache, then
@@ -702,7 +658,7 @@
 	 */
 
 	if (n > wcp->alloc_size ) {
-		ssize_t ret = real_write_file(NULL,fsp, data, pos, n);
+		ssize_t ret = real_write_file(fsp, data, pos, n);
 		if (ret == -1) {
 			return -1;
 		}
@@ -784,7 +740,7 @@
  Setup the write cache structure.
 ****************************************************************************/
 
-static bool setup_write_cache(files_struct *fsp, SMB_OFF_T file_size)
+static BOOL setup_write_cache(files_struct *fsp, SMB_OFF_T file_size)
 {
 	ssize_t alloc_size = lp_write_cache_size(SNUM(fsp->conn));
 	write_cache *wcp;
@@ -834,11 +790,9 @@
 	if(fsp->wcp) {
 		/* The cache *must* have been flushed before we do this. */
 		if (fsp->wcp->data_size != 0) {
-			char *msg;
-			asprintf(&msg, "set_filelen_write_cache: size change "
-				 "on file %s with write cache size = %lu\n",
-				 fsp->fsp_name,
-				 (unsigned long)fsp->wcp->data_size);
+			pstring msg;
+			slprintf(msg, sizeof(msg)-1, "set_filelen_write_cache: size change \
+on file %s with write cache size = %lu\n", fsp->fsp_name, (unsigned long)fsp->wcp->data_size );
 			smb_panic(msg);
 		}
 		fsp->wcp->file_size = file_size;
@@ -873,7 +827,7 @@
 	}
 #endif
 
-	ret = real_write_file(NULL, fsp, wcp->data, wcp->offset, data_size);
+	ret = real_write_file(fsp, wcp->data, wcp->offset, data_size);
 
 	/*
 	 * Ensure file size if kept up to date if write extends file.
@@ -890,7 +844,7 @@
 sync a file
 ********************************************************************/
 
-NTSTATUS sync_file(connection_struct *conn, files_struct *fsp, bool write_through)
+NTSTATUS sync_file(connection_struct *conn, files_struct *fsp, BOOL write_through)
 {
        	if (fsp->fh->fd == -1)
 		return NT_STATUS_INVALID_HANDLE;
@@ -901,7 +855,7 @@
 		if (ret == -1) {
 			return map_nt_error_from_unix(errno);
 		}
-		ret = SMB_VFS_FSYNC(fsp);
+		ret = SMB_VFS_FSYNC(fsp,fsp->fh->fd);
 		if (ret == -1) {
 			return map_nt_error_from_unix(errno);
 		}
@@ -918,6 +872,6 @@
 	if (fsp->fh->fd == -1) {
 		return SMB_VFS_STAT(fsp->conn, fsp->fsp_name, pst);
 	} else {
-		return SMB_VFS_FSTAT(fsp, pst);
+		return SMB_VFS_FSTAT(fsp,fsp->fh->fd, pst);
 	}
 }

Modified: branches/samba/upstream/source/smbd/filename.c
===================================================================
--- branches/samba/upstream/source/smbd/filename.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/filename.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,23 +1,23 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    filename handling routines
    Copyright (C) Andrew Tridgell 1992-1998
-   Copyright (C) Jeremy Allison 1999-2007
+   Copyright (C) Jeremy Allison 1999-2004
    Copyright (C) Ying Chen 2000
-   Copyright (C) Volker Lendecke 2007
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /*
@@ -26,38 +26,41 @@
 
 #include "includes.h"
 
-static bool scan_directory(connection_struct *conn, const char *path,
-			   char *name, char **found_name);
-static NTSTATUS build_stream_path(TALLOC_CTX *mem_ctx,
-				  connection_struct *conn,
-				  const char *orig_path,
-				  const char *basepath,
-				  const char *streamname,
-				  SMB_STRUCT_STAT *pst,
-				  char **path);
+static BOOL scan_directory(connection_struct *conn, const char *path, char *name,size_t maxlength);
 
 /****************************************************************************
- Mangle the 2nd name and check if it is then equal to the first name.
+ Check if two filenames are equal.
+ This needs to be careful about whether we are case sensitive.
 ****************************************************************************/
 
-static bool mangled_equal(const char *name1,
-			const char *name2,
-			const struct share_params *p)
+static BOOL fname_equal(const char *name1, const char *name2, BOOL case_sensitive)
 {
-	char mname[13];
+	/* Normal filename handling */
+	if (case_sensitive)
+		return(strcmp(name1,name2) == 0);
 
-	if (!name_to_8_3(name2, mname, False, p)) {
-		return False;
-	}
-	return strequal(name1, mname);
+	return(strequal(name1,name2));
 }
 
 /****************************************************************************
+ Mangle the 2nd name and check if it is then equal to the first name.
+****************************************************************************/
+
+static BOOL mangled_equal(const char *name1, const char *name2,
+			  const struct share_params *p)
+{
+	pstring tmpname;
+	
+	pstrcpy(tmpname, name2);
+	mangle_map(tmpname, True, False, p);
+	return strequal(name1, tmpname);
+}
+
+/****************************************************************************
  Cope with the differing wildcard and non-wildcard error cases.
 ****************************************************************************/
 
-static NTSTATUS determine_path_error(const char *name,
-			bool allow_wcard_last_component)
+static NTSTATUS determine_path_error(const char *name, BOOL allow_wcard_last_component)
 {
 	const char *p;
 
@@ -84,7 +87,7 @@
 		return NT_STATUS_OBJECT_PATH_NOT_FOUND;
 	}
 }
-
+	
 /****************************************************************************
 This routine is called to convert names from the dos namespace to unix
 namespace. It needs to handle any case conversions, mangling, format
@@ -93,8 +96,8 @@
 We assume that we have already done a chdir() to the right "root" directory
 for this service.
 
-The function will return an NTSTATUS error if some part of the name except for
-the last part cannot be resolved, else NT_STATUS_OK.
+The function will return an NTSTATUS error if some part of the name except for the last
+part cannot be resolved, else NT_STATUS_OK.
 
 Note NT_STATUS_OK doesn't mean the name exists or is valid, just that we didn't
 get any fatal errors that should immediately terminate the calling
@@ -114,52 +117,46 @@
 for nlinks = 0, which can never be true for any file).
 ****************************************************************************/
 
-NTSTATUS unix_convert(TALLOC_CTX *ctx,
-			connection_struct *conn,
-			const char *orig_path,
-			bool allow_wcard_last_component,
-			char **pp_conv_path,
-			char **pp_saved_last_component,
+NTSTATUS unix_convert(connection_struct *conn,
+			pstring name,
+			BOOL allow_wcard_last_component,
+			char *saved_last_component, 
 			SMB_STRUCT_STAT *pst)
 {
 	SMB_STRUCT_STAT st;
 	char *start, *end;
-	char *dirpath = NULL;
-	char *name = NULL;
-	char *stream = NULL;
-	bool component_was_mangled = False;
-	bool name_has_wildcard = False;
-	NTSTATUS result;
+	pstring dirpath;
+	pstring orig_path;
+	BOOL component_was_mangled = False;
+	BOOL name_has_wildcard = False;
 
 	SET_STAT_INVALID(*pst);
-	*pp_conv_path = NULL;
-	if(pp_saved_last_component) {
-		*pp_saved_last_component = NULL;
+
+	*dirpath = 0;
+
+	if(saved_last_component) {
+		*saved_last_component = 0;
 	}
 
 	if (conn->printer) {
 		/* we don't ever use the filenames on a printer share as a
 			filename - so don't convert them */
-		if (!(*pp_conv_path = talloc_strdup(ctx,orig_path))) {
-			return NT_STATUS_NO_MEMORY;
-		}
 		return NT_STATUS_OK;
 	}
 
-	DEBUG(5, ("unix_convert called on file \"%s\"\n", orig_path));
+	DEBUG(5, ("unix_convert called on file \"%s\"\n", name));
 
-	/*
-	 * Conversion to basic unix format is already done in
-	 * check_path_syntax().
+	/* 
+	 * Conversion to basic unix format is already done in check_path_syntax().
 	 */
 
-	/*
+	/* 
 	 * Names must be relative to the root of the service - any leading /.
 	 * and trailing /'s should have been trimmed by check_path_syntax().
 	 */
 
 #ifdef DEVELOPER
-	SMB_ASSERT(*orig_path != '/');
+	SMB_ASSERT(*name != '/');
 #endif
 
 	/*
@@ -170,64 +167,38 @@
 	 * As we know this is valid we can return true here.
 	 */
 
-	if (!*orig_path) {
-		if (!(name = talloc_strdup(ctx,"."))) {
-			return NT_STATUS_NO_MEMORY;
-		}
+	if (!*name) {
+		name[0] = '.';
+		name[1] = '\0';
 		if (SMB_VFS_STAT(conn,name,&st) == 0) {
 			*pst = st;
-		} else {
-			return map_nt_error_from_unix(errno);
 		}
 		DEBUG(5,("conversion finished \"\" -> %s\n",name));
-		goto done;
+		return NT_STATUS_OK;
 	}
 
-	if (orig_path[0] == '.' && (orig_path[1] == '/' ||
-				orig_path[1] == '\0')) {
+	if (name[0] == '.' && (name[1] == '/' || name[1] == '\0')) {
 		/* Start of pathname can't be "." only. */
-		if (orig_path[1] == '\0' || orig_path[2] == '\0') {
-			result = NT_STATUS_OBJECT_NAME_INVALID;
+		if (name[1] == '\0' || name[2] == '\0') {
+			return NT_STATUS_OBJECT_NAME_INVALID;
 		} else {
-			result =determine_path_error(
-				&orig_path[2], allow_wcard_last_component);
+			return determine_path_error(&name[2], allow_wcard_last_component);
 		}
-		return result;
 	}
 
 	/*
 	 * Ensure saved_last_component is valid even if file exists.
 	 */
 
-	if(pp_saved_last_component) {
-		end = strrchr_m(orig_path, '/');
+	if(saved_last_component) {
+		end = strrchr_m(name, '/');
 		if (end) {
-			*pp_saved_last_component = talloc_strdup(ctx, end + 1);
+			pstrcpy(saved_last_component, end + 1);
 		} else {
-			*pp_saved_last_component = talloc_strdup(ctx,
-							orig_path);
+			pstrcpy(saved_last_component, name);
 		}
 	}
 
-	if (!(name = talloc_strdup(ctx, orig_path))) {
-		DEBUG(0, ("talloc_strdup failed\n"));
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	if (!lp_posix_pathnames()) {
-		stream = strchr_m(name, ':');
-
-		if (stream != NULL) {
-			char *tmp = talloc_strdup(ctx, stream);
-			if (tmp == NULL) {
-				TALLOC_FREE(name);
-				return NT_STATUS_NO_MEMORY;
-			}
-			*stream = '\0';
-			stream = tmp;
-		}
-	}
-
 	/*
 	 * Large directory fix normalization. If we're case sensitive, and
 	 * the case preserving parameters are set to "no", normalize the case of
@@ -237,37 +208,19 @@
 	 * the man page. Thanks to jht at samba.org for finding this. JRA.
 	 */
 
-	if (conn->case_sensitive && !conn->case_preserve &&
-			!conn->short_case_preserve) {
+	if (conn->case_sensitive && !conn->case_preserve && !conn->short_case_preserve) {
 		strnorm(name, lp_defaultcase(SNUM(conn)));
 	}
-
+	
 	start = name;
+	pstrcpy(orig_path, name);
 
-	/* If we're providing case insentive semantics or
-	 * the underlying filesystem is case insensitive,
-	 * then a case-normalized hit in the stat-cache is
-	 * authoratitive. JRA.
-	 */
-
-	if((!conn->case_sensitive || !(conn->fs_capabilities & FILE_CASE_SENSITIVE_SEARCH)) &&
-			stat_cache_lookup(conn, &name, &dirpath, &start, &st)) {
+	if(!conn->case_sensitive && stat_cache_lookup(conn, name, dirpath, &start, &st)) {
 		*pst = st;
-		goto done;
+		return NT_STATUS_OK;
 	}
 
-	/*
-	 * Make sure "dirpath" is an allocated string, we use this for
-	 * building the directories with asprintf and free it.
-	 */
-
-	if ((dirpath == NULL) && (!(dirpath = talloc_strdup(ctx,"")))) {
-		DEBUG(0, ("talloc_strdup failed\n"));
-		TALLOC_FREE(name);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	/*
+	/* 
 	 * stat the name - if it exists then we are all done!
 	 */
 
@@ -278,36 +231,33 @@
 		if (p) {
 			if (p[2] == '/') {
 				/* Error code within a pathname. */
-				result = NT_STATUS_OBJECT_PATH_NOT_FOUND;
-				goto fail;
+				return NT_STATUS_OBJECT_PATH_NOT_FOUND;
 			} else if (p[2] == '\0') {
 				/* Error code at the end of a pathname. */
-				result = NT_STATUS_OBJECT_NAME_INVALID;
-				goto fail;
+				return NT_STATUS_OBJECT_NAME_INVALID;
 			}
 		}
 		stat_cache_add(orig_path, name, conn->case_sensitive);
 		DEBUG(5,("conversion finished %s -> %s\n",orig_path, name));
 		*pst = st;
-		goto done;
+		return NT_STATUS_OK;
 	}
 
-	DEBUG(5,("unix_convert begin: name = %s, dirpath = %s, start = %s\n",
-				name, dirpath, start));
+	DEBUG(5,("unix_convert begin: name = %s, dirpath = %s, start = %s\n", name, dirpath, start));
 
-	/*
+	/* 
 	 * A special case - if we don't have any mangling chars and are case
-	 * sensitive or the underlying filesystem is case insentive then searching
-	 * won't help.
+	 * sensitive then searching won't help.
 	 */
 
-	if ((conn->case_sensitive || !(conn->fs_capabilities & FILE_CASE_SENSITIVE_SEARCH)) &&
-			!mangle_is_mangled(name, conn->params)) {
-		goto done;
+	if (conn->case_sensitive && 
+			!mangle_is_mangled(name, conn->params) &&
+			!*lp_mangled_map(conn->params)) {
+		return NT_STATUS_OK;
 	}
 
-	/*
-	 * is_mangled() was changed to look at an entire pathname, not
+	/* 
+	 * is_mangled() was changed to look at an entire pathname, not 
 	 * just a component. JRA.
 	 */
 
@@ -315,38 +265,31 @@
 		component_was_mangled = True;
 	}
 
-	/*
-	 * Now we need to recursively match the name against the real
+	/* 
+	 * Now we need to recursively match the name against the real 
 	 * directory structure.
 	 */
 
-	/*
+	/* 
 	 * Match each part of the path name separately, trying the names
 	 * as is first, then trying to scan the directory for matching names.
 	 */
 
 	for (; start ; start = (end?end+1:(char *)NULL)) {
-		/*
+		/* 
 		 * Pinpoint the end of this section of the filename.
 		 */
-		/* mb safe. '/' can't be in any encoded char. */
-		end = strchr(start, '/');
+		end = strchr(start, '/'); /* mb safe. '/' can't be in any encoded char. */
 
-		/*
+		/* 
 		 * Chop the name at this point.
 		 */
 		if (end) {
 			*end = 0;
 		}
 
-		if (pp_saved_last_component) {
-			TALLOC_FREE(*pp_saved_last_component);
-			*pp_saved_last_component = talloc_strdup(ctx,
-							end ? end + 1 : start);
-			if (!*pp_saved_last_component) {
-				DEBUG(0, ("talloc failed\n"));
-				return NT_STATUS_NO_MEMORY;
-			}
+		if (saved_last_component != 0) {
+			pstrcpy(saved_last_component, end ? end + 1 : start);
 		}
 
 		/* The name cannot have a component of "." */
@@ -354,12 +297,9 @@
 		if (ISDOT(start)) {
 			if (!end)  {
 				/* Error code at the end of a pathname. */
-				result = NT_STATUS_OBJECT_NAME_INVALID;
-			} else {
-				result = determine_path_error(end+1,
-						allow_wcard_last_component);
+				return NT_STATUS_OBJECT_NAME_INVALID;
 			}
-			goto fail;
+			return determine_path_error(end+1, allow_wcard_last_component);
 		}
 
 		/* The name cannot have a wildcard if it's not
@@ -369,235 +309,154 @@
 
 		/* Wildcard not valid anywhere. */
 		if (name_has_wildcard && !allow_wcard_last_component) {
-			result = NT_STATUS_OBJECT_NAME_INVALID;
-			goto fail;
+			return NT_STATUS_OBJECT_NAME_INVALID;
 		}
 
 		/* Wildcards never valid within a pathname. */
 		if (name_has_wildcard && end) {
-			result = NT_STATUS_OBJECT_NAME_INVALID;
-			goto fail;
+			return NT_STATUS_OBJECT_NAME_INVALID;
 		}
 
-		/*
+		/* 
 		 * Check if the name exists up to this point.
 		 */
 
 		if (SMB_VFS_STAT(conn,name, &st) == 0) {
 			/*
-			 * It exists. it must either be a directory or this must
-			 * be the last part of the path for it to be OK.
+			 * It exists. it must either be a directory or this must be
+			 * the last part of the path for it to be OK.
 			 */
 			if (end && !(st.st_mode & S_IFDIR)) {
 				/*
-				 * An intermediate part of the name isn't
-				 * a directory.
+				 * An intermediate part of the name isn't a directory.
 				 */
 				DEBUG(5,("Not a dir %s\n",start));
 				*end = '/';
-				/*
-				 * We need to return the fact that the
-				 * intermediate name resolution failed. This
-				 * is used to return an error of ERRbadpath
-				 * rather than ERRbadfile. Some Windows
-				 * applications depend on the difference between
+				/* 
+				 * We need to return the fact that the intermediate
+				 * name resolution failed. This is used to return an
+				 * error of ERRbadpath rather than ERRbadfile. Some
+				 * Windows applications depend on the difference between
 				 * these two errors.
 				 */
-				result = NT_STATUS_OBJECT_PATH_NOT_FOUND;
-				goto fail;
+				return NT_STATUS_OBJECT_PATH_NOT_FOUND;
 			}
 
 			if (!end) {
 				/*
-				 * We just scanned for, and found the end of
-				 * the path. We must return the valid stat
-				 * struct. JRA.
+				 * We just scanned for, and found the end of the path.
+				 * We must return the valid stat struct.
+				 * JRA.
 				 */
 
 				*pst = st;
 			}
 
 		} else {
-			char *found_name = NULL;
+			pstring rest;
 
 			/* Stat failed - ensure we don't use it. */
 			SET_STAT_INVALID(st);
+			*rest = 0;
 
 			/*
-			 * Reset errno so we can detect
-			 * directory open errors.
+			 * Remember the rest of the pathname so it can be restored
+			 * later.
 			 */
+
+			if (end) {
+				pstrcpy(rest,end+1);
+			}
+
+			/* Reset errno so we can detect directory open errors. */
 			errno = 0;
 
 			/*
 			 * Try to find this part of the path in the directory.
 			 */
 
-			if (name_has_wildcard ||
-			    !scan_directory(conn, dirpath,
-				    start, &found_name)) {
-				char *unmangled;
-
+			if (name_has_wildcard || 
+			    !scan_directory(conn, dirpath, start, sizeof(pstring) - 1 - (start - name))) {
 				if (end) {
 					/*
-					 * An intermediate part of the name
-					 * can't be found.
+					 * An intermediate part of the name can't be found.
 					 */
-					DEBUG(5,("Intermediate not found %s\n",
-							start));
+					DEBUG(5,("Intermediate not found %s\n",start));
 					*end = '/';
 
-					/*
-					 * We need to return the fact that the
-					 * intermediate name resolution failed.
-					 * This is used to return an error of
-					 * ERRbadpath rather than ERRbadfile.
-					 * Some Windows applications depend on
-					 * the difference between these two
-					 * errors.
+					/* 
+					 * We need to return the fact that the intermediate
+					 * name resolution failed. This is used to return an
+					 * error of ERRbadpath rather than ERRbadfile. Some
+					 * Windows applications depend on the difference between
+					 * these two errors.
 					 */
 
-					/*
-					 * ENOENT, ENOTDIR and ELOOP all map
-					 * to NT_STATUS_OBJECT_PATH_NOT_FOUND
-					 * in the filename walk.
-					 */
+					/* ENOENT, ENOTDIR and ELOOP all map to
+					 * NT_STATUS_OBJECT_PATH_NOT_FOUND
+					 * in the filename walk. */
 
 					if (errno == ENOENT ||
 							errno == ENOTDIR ||
 							errno == ELOOP) {
-						result =
-						NT_STATUS_OBJECT_PATH_NOT_FOUND;
+						return NT_STATUS_OBJECT_PATH_NOT_FOUND;
 					}
-					else {
-						result =
-						map_nt_error_from_unix(errno);
-					}
-					goto fail;
+					return map_nt_error_from_unix(errno);
 				}
 
 				/* ENOENT is the only valid error here. */
 				if (errno != ENOENT) {
-					/*
-					 * ENOTDIR and ELOOP both map to
+					/* ENOTDIR and ELOOP both map to
 					 * NT_STATUS_OBJECT_PATH_NOT_FOUND
-					 * in the filename walk.
-					 */
+					 * in the filename walk. */
 					if (errno == ENOTDIR ||
 							errno == ELOOP) {
-						result =
-						NT_STATUS_OBJECT_PATH_NOT_FOUND;
+						return NT_STATUS_OBJECT_PATH_NOT_FOUND;
 					}
-					else {
-						result =
-						map_nt_error_from_unix(errno);
-					}
-					goto fail;
+					return map_nt_error_from_unix(errno);
 				}
 
 				/*
 				 * Just the last part of the name doesn't exist.
 				 * We need to strupper() or strlower() it as
-				 * this conversion may be used for file creation
-				 * purposes. Fix inspired by
-				 * Thomas Neumann <t.neumann at iku-ag.de>.
+				 * this conversion may be used for file creation 
+				 * purposes. Fix inspired by Thomas Neumann <t.neumann at iku-ag.de>.
 				 */
 				if (!conn->case_preserve ||
-				    (mangle_is_8_3(start, False,
-						   conn->params) &&
+				    (mangle_is_8_3(start, False, conn->params) &&
 						 !conn->short_case_preserve)) {
-					strnorm(start,
-						lp_defaultcase(SNUM(conn)));
+					strnorm(start, lp_defaultcase(SNUM(conn)));
 				}
 
 				/*
-				 * check on the mangled stack to see if we can
-				 * recover the base of the filename.
+				 * check on the mangled stack to see if we can recover the 
+				 * base of the filename.
 				 */
 
-				if (mangle_is_mangled(start, conn->params)
-				    && mangle_lookup_name_from_8_3(ctx,
-					    		start,
-							&unmangled,
-							conn->params)) {
-					char *tmp;
-					size_t start_ofs = start - name;
-
-					if (*dirpath != '\0') {
-						tmp = talloc_asprintf(ctx,
-							"%s/%s", dirpath,
-							unmangled);
-						TALLOC_FREE(unmangled);
-					}
-					else {
-						tmp = unmangled;
-					}
-					if (tmp == NULL) {
-						DEBUG(0, ("talloc failed\n"));
-						return NT_STATUS_NO_MEMORY;
-					}
-					TALLOC_FREE(name);
-					name = tmp;
-					start = name + start_ofs;
-					end = start + strlen(start);
+				if (mangle_is_mangled(start, conn->params)) {
+					mangle_check_cache( start, sizeof(pstring) - 1 - (start - name), conn->params);
 				}
 
 				DEBUG(5,("New file %s\n",start));
-				goto done;
+				return NT_STATUS_OK;
 			}
 
-
-			/*
-			 * Restore the rest of the string. If the string was
-			 * mangled the size may have changed.
+			/* 
+			 * Restore the rest of the string. If the string was mangled the size
+			 * may have changed.
 			 */
 			if (end) {
-				char *tmp;
-				size_t start_ofs = start - name;
-
-				if (*dirpath != '\0') {
-					tmp = talloc_asprintf(ctx,
-						"%s/%s/%s", dirpath,
-						found_name, end+1);
+				end = start + strlen(start);
+				if (!safe_strcat(start, "/", sizeof(pstring) - 1 - (start - name)) ||
+				    !safe_strcat(start, rest, sizeof(pstring) - 1 - (start - name))) {
+					return map_nt_error_from_unix(ENAMETOOLONG);
 				}
-				else {
-					tmp = talloc_asprintf(ctx,
-						"%s/%s", found_name,
-						end+1);
-				}
-				if (tmp == NULL) {
-					DEBUG(0, ("talloc_asprintf failed\n"));
-					return NT_STATUS_NO_MEMORY;
-				}
-				TALLOC_FREE(name);
-				name = tmp;
-				start = name + start_ofs;
-				end = start + strlen(found_name);
 				*end = '\0';
 			} else {
-				char *tmp;
-				size_t start_ofs = start - name;
-
-				if (*dirpath != '\0') {
-					tmp = talloc_asprintf(ctx,
-						"%s/%s", dirpath,
-						found_name);
-				} else {
-					tmp = talloc_strdup(ctx,
-						found_name);
-				}
-				if (tmp == NULL) {
-					DEBUG(0, ("talloc failed\n"));
-					return NT_STATUS_NO_MEMORY;
-				}
-				TALLOC_FREE(name);
-				name = tmp;
-				start = name + start_ofs;
-
 				/*
-				 * We just scanned for, and found the end of
-				 * the path. We must return a valid stat struct
-				 * if it exists. JRA.
+				 * We just scanned for, and found the end of the path.
+				 * We must return a valid stat struct if it exists.
+				 * JRA.
 				 */
 
 				if (SMB_VFS_STAT(conn,name, &st) == 0) {
@@ -606,67 +465,40 @@
 					SET_STAT_INVALID(st);
 				}
 			}
-
-			TALLOC_FREE(found_name);
 		} /* end else */
 
 #ifdef DEVELOPER
-		/*
-		 * This sucks!
-		 * We should never provide different behaviors
-		 * depending on DEVELOPER!!!
-		 */
-		if (VALID_STAT(st)) {
-			bool delete_pending;
-			get_file_infos(vfs_file_id_from_sbuf(conn, &st),
-				       &delete_pending, NULL);
-			if (delete_pending) {
-				result = NT_STATUS_DELETE_PENDING;
-				goto fail;
-			}
+		if (VALID_STAT(st) && get_delete_on_close_flag(st.st_dev, st.st_ino)) {
+			return NT_STATUS_DELETE_PENDING;
 		}
 #endif
 
-		/*
+		/* 
 		 * Add to the dirpath that we have resolved so far.
 		 */
-
-		if (*dirpath != '\0') {
-			char *tmp = talloc_asprintf(ctx,
-					"%s/%s", dirpath, start);
-			if (!tmp) {
-				DEBUG(0, ("talloc_asprintf failed\n"));
-				return NT_STATUS_NO_MEMORY;
-			}
-			TALLOC_FREE(dirpath);
-			dirpath = tmp;
+		if (*dirpath) {
+			pstrcat(dirpath,"/");
 		}
-		else {
-			TALLOC_FREE(dirpath);
-			if (!(dirpath = talloc_strdup(ctx,start))) {
-				DEBUG(0, ("talloc_strdup failed\n"));
-				return NT_STATUS_NO_MEMORY;
-			}
-		}
 
+		pstrcat(dirpath,start);
+
 		/*
 		 * Don't cache a name with mangled or wildcard components
 		 * as this can change the size.
 		 */
-
+		
 		if(!component_was_mangled && !name_has_wildcard) {
-			stat_cache_add(orig_path, dirpath,
-					conn->case_sensitive);
+			stat_cache_add(orig_path, dirpath, conn->case_sensitive);
 		}
-
-		/*
+	
+		/* 
 		 * Restore the / that we wiped out earlier.
 		 */
 		if (end) {
 			*end = '/';
 		}
 	}
-
+  
 	/*
 	 * Don't cache a name with mangled or wildcard components
 	 * as this can change the size.
@@ -676,71 +508,35 @@
 		stat_cache_add(orig_path, name, conn->case_sensitive);
 	}
 
-	/*
+	/* 
 	 * The name has been resolved.
 	 */
 
 	DEBUG(5,("conversion finished %s -> %s\n",orig_path, name));
-
- done:
-	if (stream != NULL) {
-		char *tmp = NULL;
-
-		result = build_stream_path(ctx, conn, orig_path, name, stream,
-					   pst, &tmp);
-		if (!NT_STATUS_IS_OK(result)) {
-			goto fail;
-		}
-
-		DEBUG(10, ("build_stream_path returned %s\n", tmp));
-
-		TALLOC_FREE(name);
-		name = tmp;
-	}
-	*pp_conv_path = name;
-	TALLOC_FREE(dirpath);
 	return NT_STATUS_OK;
- fail:
-	DEBUG(10, ("dirpath = [%s] start = [%s]\n", dirpath, start));
-	if (*dirpath != '\0') {
-		*pp_conv_path = talloc_asprintf(ctx,
-				"%s/%s", dirpath, start);
-	} else {
-		*pp_conv_path = talloc_strdup(ctx, start);
-	}
-	if (!*pp_conv_path) {
-		DEBUG(0, ("talloc_asprintf failed\n"));
-		return NT_STATUS_NO_MEMORY;
-	}
-	TALLOC_FREE(name);
-	TALLOC_FREE(dirpath);
-	return result;
 }
 
 /****************************************************************************
- Check a filename - possibly calling check_reduced_name.
+ Check a filename - possibly caling reducename.
  This is called by every routine before it allows an operation on a filename.
  It does any final confirmation necessary to ensure that the filename is
  a valid one for the user to access.
 ****************************************************************************/
 
-NTSTATUS check_name(connection_struct *conn, const char *name)
+NTSTATUS check_name(connection_struct *conn, const pstring name)
 {
 	if (IS_VETO_PATH(conn, name))  {
 		/* Is it not dot or dot dot. */
-		if (!((name[0] == '.') && (!name[1] ||
-					(name[1] == '.' && !name[2])))) {
-			DEBUG(5,("check_name: file path name %s vetoed\n",
-						name));
+		if (!((name[0] == '.') && (!name[1] || (name[1] == '.' && !name[2])))) {
+			DEBUG(5,("check_name: file path name %s vetoed\n",name));
 			return map_nt_error_from_unix(ENOENT);
 		}
 	}
 
 	if (!lp_widelinks(SNUM(conn)) || !lp_symlinks(SNUM(conn))) {
-		NTSTATUS status = check_reduced_name(conn,name);
+		NTSTATUS status = reduce_name(conn,name);
 		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(5,("check_name: name %s failed with %s\n",name,
-						nt_errstr(status)));
+			DEBUG(5,("check_name: name %s failed with %s\n",name, nt_errstr(status)));
 			return status;
 		}
 	}
@@ -749,56 +545,27 @@
 }
 
 /****************************************************************************
- Check if two filenames are equal.
- This needs to be careful about whether we are case sensitive.
-****************************************************************************/
-
-static bool fname_equal(const char *name1, const char *name2,
-		bool case_sensitive)
-{
-	/* Normal filename handling */
-	if (case_sensitive) {
-		return(strcmp(name1,name2) == 0);
-	}
-
-	return(strequal(name1,name2));
-}
-
-/****************************************************************************
  Scan a directory to find a filename, matching without case sensitivity.
  If the name looks like a mangled name then try via the mangling functions
 ****************************************************************************/
 
-static bool scan_directory(connection_struct *conn, const char *path,
-			   char *name, char **found_name)
+static BOOL scan_directory(connection_struct *conn, const char *path, char *name, size_t maxlength)
 {
 	struct smb_Dir *cur_dir;
 	const char *dname;
-	bool mangled;
-	char *unmangled_name = NULL;
+	BOOL mangled;
 	long curpos;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	mangled = mangle_is_mangled(name, conn->params);
 
 	/* handle null paths */
-	if ((path == NULL) || (*path == 0)) {
+	if (*path == 0)
 		path = ".";
-	}
 
-	/* If we have a case-sensitive filesystem, it doesn't do us any
-	 * good to search for a name. If a case variation of the name was
-	 * there, then the original stat(2) would have found it.
-	 */
-	if (!mangled && !(conn->fs_capabilities & FILE_CASE_SENSITIVE_SEARCH)) {
-		errno = ENOENT;
-		return False;
-	}
-
 	/*
 	 * The incoming name can be mangled, and if we de-mangle it
 	 * here it will not compare correctly against the filename (name2)
-	 * read from the directory and then mangled by the name_to_8_3()
+	 * read from the directory and then mangled by the mangle_map()
 	 * call. We need to mangle both names or neither.
 	 * (JRA).
 	 *
@@ -811,20 +578,12 @@
 	 */
 
 	if (mangled && !conn->case_sensitive) {
-		mangled = !mangle_lookup_name_from_8_3(ctx,
-						name,
-						&unmangled_name,
-						conn->params);
-		if (!mangled) {
-			/* Name is now unmangled. */
-			name = unmangled_name;
-		}
+		mangled = !mangle_check_cache( name, maxlength, conn->params);
 	}
 
 	/* open the directory */
-	if (!(cur_dir = OpenDir(talloc_tos(), conn, path, NULL, 0))) {
+	if (!(cur_dir = OpenDir(conn, path, NULL, 0))) {
 		DEBUG(3,("scan dir didn't open dir [%s]\n",path));
-		TALLOC_FREE(unmangled_name);
 		return(False);
 	}
 
@@ -833,14 +592,14 @@
 	while ((dname = ReadDirName(cur_dir, &curpos))) {
 
 		/* Is it dot or dot dot. */
-		if (ISDOT(dname) || ISDOTDOT(dname)) {
+		if ((dname[0] == '.') && (!dname[1] || (dname[1] == '.' && !dname[2]))) {
 			continue;
 		}
 
 		/*
 		 * At this point dname is the unmangled name.
-		 * name is either mangled or not, depending on the state
-		 * of the "mangled" variable. JRA.
+		 * name is either mangled or not, depending on the state of the "mangled"
+		 * variable. JRA.
 		 */
 
 		/*
@@ -848,109 +607,15 @@
 		 * against unmangled name.
 		 */
 
-		if ((mangled && mangled_equal(name,dname,conn->params)) ||
-			fname_equal(name, dname, conn->case_sensitive)) {
+		if ((mangled && mangled_equal(name,dname,conn->params)) || fname_equal(name, dname, conn->case_sensitive)) {
 			/* we've found the file, change it's name and return */
-			*found_name = talloc_strdup(ctx,dname);
-			TALLOC_FREE(unmangled_name);
-			TALLOC_FREE(cur_dir);
-			if (!*found_name) {
-				errno = ENOMEM;
-				return False;
-			}
+			safe_strcpy(name, dname, maxlength);
+			CloseDir(cur_dir);
 			return(True);
 		}
 	}
 
-	TALLOC_FREE(unmangled_name);
-	TALLOC_FREE(cur_dir);
+	CloseDir(cur_dir);
 	errno = ENOENT;
-	return False;
+	return(False);
 }
-
-static NTSTATUS build_stream_path(TALLOC_CTX *mem_ctx,
-				  connection_struct *conn,
-				  const char *orig_path,
-				  const char *basepath,
-				  const char *streamname,
-				  SMB_STRUCT_STAT *pst,
-				  char **path)
-{
-	SMB_STRUCT_STAT st;
-	char *result = NULL;
-	NTSTATUS status;
-	unsigned int i, num_streams;
-	struct stream_struct *streams = NULL;
-
-	result = talloc_asprintf(mem_ctx, "%s%s", basepath, streamname);
-	if (result == NULL) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	if (SMB_VFS_STAT(conn, result, &st) == 0) {
-		*pst = st;
-		*path = result;
-		return NT_STATUS_OK;
-	}
-
-	if (errno != ENOENT) {
-		status = map_nt_error_from_unix(errno);
-		DEBUG(10, ("vfs_stat failed: %s\n", nt_errstr(status)));
-		goto fail;
-	}
-
-	status = SMB_VFS_STREAMINFO(conn, NULL, basepath, mem_ctx,
-				    &num_streams, &streams);
-
-	if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_NOT_FOUND)) {
-		SET_STAT_INVALID(*pst);
-		*path = result;
-		return NT_STATUS_OK;
-	}
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10, ("vfs_streaminfo failed: %s\n", nt_errstr(status)));
-		goto fail;
-	}
-
-	for (i=0; i<num_streams; i++) {
-		DEBUG(10, ("comparing [%s] and [%s]: ",
-			   streamname, streams[i].name));
-		if (fname_equal(streamname, streams[i].name,
-				conn->case_sensitive)) {
-			DEBUGADD(10, ("equal\n"));
-			break;
-		}
-		DEBUGADD(10, ("not equal\n"));
-	}
-
-	if (i == num_streams) {
-		SET_STAT_INVALID(*pst);
-		*path = result;
-		TALLOC_FREE(streams);
-		return NT_STATUS_OK;
-	}
-
-	TALLOC_FREE(result);
-
-	result = talloc_asprintf(mem_ctx, "%s%s", basepath, streams[i].name);
-	if (result == NULL) {
-		status = NT_STATUS_NO_MEMORY;
-		goto fail;
-	}
-
-	SET_STAT_INVALID(*pst);
-
-	if (SMB_VFS_STAT(conn, result, pst) == 0) {
-		stat_cache_add(orig_path, result, conn->case_sensitive);
-	}
-
-	*path = result;
-	TALLOC_FREE(streams);
-	return NT_STATUS_OK;
-
- fail:
-	TALLOC_FREE(result);
-	TALLOC_FREE(streams);
-	return status;
-}

Modified: branches/samba/upstream/source/smbd/files.c
===================================================================
--- branches/samba/upstream/source/smbd/files.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/files.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -37,7 +38,8 @@
 /* A singleton cache to speed up searching by dev/inode. */
 static struct fsp_singleton_cache {
 	files_struct *fsp;
-	struct file_id id;
+	SMB_DEV_T dev;
+	SMB_INO_T inode;
 } fsp_fi_cache;
 
 /****************************************************************************
@@ -102,7 +104,7 @@
 	fsp->fh->fd = -1;
 
 	fsp->conn = conn;
-	fsp->fh->gen_id = get_gen_count();
+	fsp->fh->file_id = get_gen_count();
 	GetTimeOfDay(&fsp->open_time);
 
 	first_file = (i+1) % real_max_open_files;
@@ -231,9 +233,9 @@
 	files_struct *fsp;
 
 	for (fsp=Files;fsp;fsp=fsp->next,count++) {
-		DEBUG(10,("Files[%d], fnum = %d, name %s, fd = %d, gen = %lu, fileid=%s\n",
-			count, fsp->fnum, fsp->fsp_name, fsp->fh->fd, (unsigned long)fsp->fh->gen_id,
-			  file_id_string_tos(&fsp->file_id)));
+		DEBUG(10,("Files[%d], fnum = %d, name %s, fd = %d, fileid = %lu, dev = %x, inode = %.0f\n",
+			count, fsp->fnum, fsp->fsp_name, fsp->fh->fd, (unsigned long)fsp->fh->file_id,
+			(unsigned int)fsp->dev, (double)fsp->inode ));
 	}
 }
 
@@ -262,15 +264,16 @@
  Find a fsp given a device, inode and file_id.
 ****************************************************************************/
 
-files_struct *file_find_dif(struct file_id id, unsigned long gen_id)
+files_struct *file_find_dif(SMB_DEV_T dev, SMB_INO_T inode, unsigned long file_id)
 {
 	int count=0;
 	files_struct *fsp;
 
 	for (fsp=Files;fsp;fsp=fsp->next,count++) {
 		/* We can have a fsp->fh->fd == -1 here as it could be a stat open. */
-		if (file_id_equal(&fsp->file_id, &id) &&
-		    fsp->fh->gen_id == gen_id ) {
+		if (fsp->dev == dev && 
+		    fsp->inode == inode &&
+		    fsp->fh->file_id == file_id ) {
 			if (count > 10) {
 				DLIST_PROMOTE(Files, fsp);
 			}
@@ -278,12 +281,11 @@
 			if ((fsp->fh->fd == -1) &&
 			    (fsp->oplock_type != NO_OPLOCK) &&
 			    (fsp->oplock_type != FAKE_LEVEL_II_OPLOCK)) {
-				DEBUG(0,("file_find_dif: file %s file_id = %s, gen = %u \
-oplock_type = %u is a stat open with oplock type !\n", fsp->fsp_name, 
-					 file_id_string_tos(&fsp->file_id),
-					 (unsigned int)fsp->fh->gen_id,
-					 (unsigned int)fsp->oplock_type ));
-				smb_panic("file_find_dif");
+				DEBUG(0,("file_find_dif: file %s dev = %x, inode = %.0f, file_id = %u \
+oplock_type = %u is a stat open with oplock type !\n", fsp->fsp_name, (unsigned int)fsp->dev,
+						(double)fsp->inode, (unsigned int)fsp->fh->file_id,
+						(unsigned int)fsp->oplock_type ));
+				smb_panic("file_find_dif\n");
 			}
 			return fsp;
 		}
@@ -314,20 +316,22 @@
  calls.
 ****************************************************************************/
 
-files_struct *file_find_di_first(struct file_id id)
+files_struct *file_find_di_first(SMB_DEV_T dev, SMB_INO_T inode)
 {
 	files_struct *fsp;
 
-	if (file_id_equal(&fsp_fi_cache.id, &id)) {
+	if (fsp_fi_cache.dev == dev && fsp_fi_cache.inode == inode) {
 		/* Positive or negative cache hit. */
 		return fsp_fi_cache.fsp;
 	}
 
-	fsp_fi_cache.id = id;
+	fsp_fi_cache.dev = dev;
+	fsp_fi_cache.inode = inode;
 
 	for (fsp=Files;fsp;fsp=fsp->next) {
 		if ( fsp->fh->fd != -1 &&
-		     file_id_equal(&fsp->file_id, &id)) {
+				fsp->dev == dev &&
+				fsp->inode == inode ) {
 			/* Setup positive cache. */
 			fsp_fi_cache.fsp = fsp;
 			return fsp;
@@ -349,9 +353,9 @@
 
 	for (fsp = start_fsp->next;fsp;fsp=fsp->next) {
 		if ( fsp->fh->fd != -1 &&
-		     file_id_equal(&fsp->file_id, &start_fsp->file_id)) {
+				fsp->dev == start_fsp->dev &&
+				fsp->inode == start_fsp->inode )
 			return fsp;
-		}
 	}
 
 	return NULL;
@@ -375,6 +379,31 @@
 }
 
 /****************************************************************************
+ Set a pending modtime across all files with a given dev/ino pair.
+ Record the owner of that modtime.
+****************************************************************************/
+
+void fsp_set_pending_modtime(files_struct *tfsp, const struct timespec mod)
+{
+	files_struct *fsp;
+
+	if (null_timespec(mod)) {
+		return;
+	}
+
+	for (fsp = Files;fsp;fsp=fsp->next) {
+		if ( fsp->fh->fd != -1 &&
+				fsp->dev == tfsp->dev &&
+				fsp->inode == tfsp->inode ) {
+			fsp->pending_modtime = mod;
+			fsp->pending_modtime_owner = False;
+		}
+	}
+
+	tfsp->pending_modtime_owner = True;
+}
+
+/****************************************************************************
  Sync open files on a connection.
 ****************************************************************************/
 
@@ -418,9 +447,6 @@
 	/* Ensure this event will never fire. */
 	TALLOC_FREE(fsp->oplock_timeout);
 
-	/* Ensure this event will never fire. */
-	TALLOC_FREE(fsp->update_write_time_event);
-
 	bitmap_clear(file_bmap, fsp->fnum - FILE_HANDLE_OFFSET);
 	files_used--;
 
@@ -440,11 +466,6 @@
 		ZERO_STRUCT(fsp_fi_cache);
 	}
 
-	/* Drop all remaining extensions. */
-	while (fsp->vfs_extension) {
-		vfs_remove_fsp_extension(fsp->vfs_extension->owner, fsp);
-	}
-
 	SAFE_FREE(fsp);
 }
 
@@ -472,7 +493,7 @@
  Get an fsp from a packet given the offset of a 16 bit fnum.
 ****************************************************************************/
 
-files_struct *file_fsp(uint16 fid)
+files_struct *file_fsp(char *buf, int where)
 {
 	files_struct *fsp;
 
@@ -480,7 +501,11 @@
 		return chain_fsp;
 	}
 
-	fsp = file_fnum(fid);
+	if (!buf) {
+		return NULL;
+	}
+
+	fsp = file_fnum(SVAL(buf, where));
 	if (fsp) {
 		chain_fsp = fsp;
 	}
@@ -520,7 +545,8 @@
 	dup_fsp->fh = fsp->fh;
 	dup_fsp->fh->ref_count++;
 
-	dup_fsp->file_id = fsp->file_id;
+	dup_fsp->dev = fsp->dev;
+	dup_fsp->inode = fsp->inode;
 	dup_fsp->initial_allocation_size = fsp->initial_allocation_size;
 	dup_fsp->mode = fsp->mode;
 	dup_fsp->file_pid = fsp->file_pid;
@@ -528,6 +554,9 @@
 	dup_fsp->open_time = fsp->open_time;
 	dup_fsp->access_mask = access_mask;
 	dup_fsp->share_access = share_access;
+	dup_fsp->pending_modtime_owner = fsp->pending_modtime_owner;
+	dup_fsp->pending_modtime = fsp->pending_modtime;
+	dup_fsp->last_write_time = fsp->last_write_time;
 	dup_fsp->oplock_type = fsp->oplock_type;
 	dup_fsp->can_lock = fsp->can_lock;
 	dup_fsp->can_read = (access_mask & (FILE_READ_DATA)) ? True : False;

Modified: branches/samba/upstream/source/smbd/ipc.c
===================================================================
--- branches/samba/upstream/source/smbd/ipc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/ipc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    */
 /*
    This file handles the named pipe and mailslot calls
@@ -30,7 +31,7 @@
 
 #define NERR_notsupported 50
 
-static void api_no_reply(connection_struct *conn, struct smb_request *req);
+extern int smb_read_error;
 
 /*******************************************************************
  copies parameters and data, as needed, into the smb buffer
@@ -46,7 +47,7 @@
 				char *rparam, int param_offset, int param_len,
 				char *rdata, int data_offset, int data_len)
 {
-	char *copy_into = smb_buf(outbuf);
+	char *copy_into = smb_buf(outbuf)+1;
 
 	if(param_len < 0)
 		param_len = 0;
@@ -54,25 +55,15 @@
 	if(data_len < 0)
 		data_len = 0;
 
-	DEBUG(5,("copy_trans_params_and_data: params[%d..%d] data[%d..%d] (align %d)\n",
+	DEBUG(5,("copy_trans_params_and_data: params[%d..%d] data[%d..%d]\n",
 			param_offset, param_offset + param_len,
-			data_offset , data_offset  + data_len,
-			align));
+			data_offset , data_offset  + data_len));
 
-	*copy_into = '\0';
-
-	copy_into += 1;
-
 	if (param_len)
 		memcpy(copy_into, &rparam[param_offset], param_len);
 
-	copy_into += param_len;
-	if (align) {
-		memset(copy_into, '\0', align);
-	}
+	copy_into += param_len + align;
 
-	copy_into += align;
-
 	if (data_len )
 		memcpy(copy_into, &rdata[data_offset], data_len);
 }
@@ -81,11 +72,10 @@
  Send a trans reply.
  ****************************************************************************/
 
-void send_trans_reply(connection_struct *conn,
-			struct smb_request *req,
-		      char *rparam, int rparam_len,
-		      char *rdata, int rdata_len,
-		      bool buffer_too_large)
+void send_trans_reply(char *outbuf,
+				char *rparam, int rparam_len,
+				char *rdata, int rdata_len,
+				BOOL buffer_too_large)
 {
 	int this_ldata,this_lparam;
 	int tot_data_sent = 0;
@@ -103,40 +93,30 @@
 
 	align = ((this_lparam)%4);
 
-	reply_outbuf(req, 10, 1+align+this_ldata+this_lparam);
-
-	copy_trans_params_and_data((char *)req->outbuf, align,
-				rparam, tot_param_sent, this_lparam,
-				rdata, tot_data_sent, this_ldata);
-
-	SSVAL(req->outbuf,smb_vwv0,lparam);
-	SSVAL(req->outbuf,smb_vwv1,ldata);
-	SSVAL(req->outbuf,smb_vwv3,this_lparam);
-	SSVAL(req->outbuf,smb_vwv4,smb_offset(smb_buf(req->outbuf)+1,
-					      req->outbuf));
-	SSVAL(req->outbuf,smb_vwv5,0);
-	SSVAL(req->outbuf,smb_vwv6,this_ldata);
-	SSVAL(req->outbuf,smb_vwv7,smb_offset(smb_buf(req->outbuf)+1+
-					      this_lparam+align,
-					      req->outbuf));
-	SSVAL(req->outbuf,smb_vwv8,0);
-	SSVAL(req->outbuf,smb_vwv9,0);
-
 	if (buffer_too_large) {
-		error_packet_set((char *)req->outbuf,
-				 ERRDOS, ERRmoredata,
-				 STATUS_BUFFER_OVERFLOW,
-				 __LINE__, __FILE__);
+		ERROR_BOTH(STATUS_BUFFER_OVERFLOW,ERRDOS,ERRmoredata);
 	}
 
-	show_msg((char *)req->outbuf);
-	if (!srv_send_smb(smbd_server_fd(),
-			(char *)req->outbuf,
-			IS_CONN_ENCRYPTED(conn)))
-		exit_server_cleanly("send_trans_reply: srv_send_smb failed.");
+	set_message(outbuf,10,1+align+this_ldata+this_lparam,True);
 
-	TALLOC_FREE(req->outbuf);
+	copy_trans_params_and_data(outbuf, align,
+								rparam, tot_param_sent, this_lparam,
+								rdata, tot_data_sent, this_ldata);
 
+	SSVAL(outbuf,smb_vwv0,lparam);
+	SSVAL(outbuf,smb_vwv1,ldata);
+	SSVAL(outbuf,smb_vwv3,this_lparam);
+	SSVAL(outbuf,smb_vwv4,smb_offset(smb_buf(outbuf)+1,outbuf));
+	SSVAL(outbuf,smb_vwv5,0);
+	SSVAL(outbuf,smb_vwv6,this_ldata);
+	SSVAL(outbuf,smb_vwv7,smb_offset(smb_buf(outbuf)+1+this_lparam+align,outbuf));
+	SSVAL(outbuf,smb_vwv8,0);
+	SSVAL(outbuf,smb_vwv9,0);
+
+	show_msg(outbuf);
+	if (!send_smb(smbd_server_fd(),outbuf))
+		exit_server_cleanly("send_trans_reply: send_smb failed.");
+
 	tot_data_sent = this_ldata;
 	tot_param_sent = this_lparam;
 
@@ -153,39 +133,26 @@
 
 		align = (this_lparam%4);
 
-		reply_outbuf(req, 10, 1+this_ldata+this_lparam+align);
+		set_message(outbuf,10,1+this_ldata+this_lparam+align,False);
 
-		copy_trans_params_and_data((char *)req->outbuf, align,
+		copy_trans_params_and_data(outbuf, align,
 					   rparam, tot_param_sent, this_lparam,
 					   rdata, tot_data_sent, this_ldata);
 		
-		SSVAL(req->outbuf,smb_vwv3,this_lparam);
-		SSVAL(req->outbuf,smb_vwv4,smb_offset(smb_buf(req->outbuf)+1,
-						      req->outbuf));
-		SSVAL(req->outbuf,smb_vwv5,tot_param_sent);
-		SSVAL(req->outbuf,smb_vwv6,this_ldata);
-		SSVAL(req->outbuf,smb_vwv7,smb_offset(smb_buf(req->outbuf)+1+
-						      this_lparam+align,
-						      req->outbuf));
-		SSVAL(req->outbuf,smb_vwv8,tot_data_sent);
-		SSVAL(req->outbuf,smb_vwv9,0);
+		SSVAL(outbuf,smb_vwv3,this_lparam);
+		SSVAL(outbuf,smb_vwv4,smb_offset(smb_buf(outbuf)+1,outbuf));
+		SSVAL(outbuf,smb_vwv5,tot_param_sent);
+		SSVAL(outbuf,smb_vwv6,this_ldata);
+		SSVAL(outbuf,smb_vwv7,smb_offset(smb_buf(outbuf)+1+this_lparam+align,outbuf));
+		SSVAL(outbuf,smb_vwv8,tot_data_sent);
+		SSVAL(outbuf,smb_vwv9,0);
 
-		if (buffer_too_large) {
-			error_packet_set((char *)req->outbuf,
-					 ERRDOS, ERRmoredata,
-					 STATUS_BUFFER_OVERFLOW,
-					 __LINE__, __FILE__);
-		}
+		show_msg(outbuf);
+		if (!send_smb(smbd_server_fd(),outbuf))
+			exit_server_cleanly("send_trans_reply: send_smb failed.");
 
-		show_msg((char *)req->outbuf);
-		if (!srv_send_smb(smbd_server_fd(),
-				(char *)req->outbuf,
-				IS_CONN_ENCRYPTED(conn)))
-			exit_server_cleanly("send_trans_reply: srv_send_smb failed.");
-
 		tot_data_sent  += this_ldata;
 		tot_param_sent += this_lparam;
-		TALLOC_FREE(req->outbuf);
 	}
 }
 
@@ -193,53 +160,49 @@
  Start the first part of an RPC reply which began with an SMBtrans request.
 ****************************************************************************/
 
-static void api_rpc_trans_reply(connection_struct *conn, struct smb_request *req, smb_np_struct *p)
+static BOOL api_rpc_trans_reply(char *outbuf, smb_np_struct *p)
 {
-	bool is_data_outstanding;
+	BOOL is_data_outstanding;
 	char *rdata = (char *)SMB_MALLOC(p->max_trans_reply);
 	int data_len;
 
 	if(rdata == NULL) {
 		DEBUG(0,("api_rpc_trans_reply: malloc fail.\n"));
-		reply_nterror(req, NT_STATUS_NO_MEMORY);
-		return;
+		return False;
 	}
 
 	if((data_len = read_from_pipe( p, rdata, p->max_trans_reply,
 					&is_data_outstanding)) < 0) {
 		SAFE_FREE(rdata);
-		api_no_reply(conn,req);
-		return;
+		return False;
 	}
 
-	send_trans_reply(conn, req, NULL, 0, rdata, data_len, is_data_outstanding);
+	send_trans_reply(outbuf, NULL, 0, rdata, data_len, is_data_outstanding);
+
 	SAFE_FREE(rdata);
-	return;
+	return True;
 }
 
 /****************************************************************************
  WaitNamedPipeHandleState 
 ****************************************************************************/
 
-static void api_WNPHS(connection_struct *conn, struct smb_request *req, smb_np_struct *p,
-		      char *param, int param_len)
+static BOOL api_WNPHS(char *outbuf, smb_np_struct *p, char *param, int param_len)
 {
 	uint16 priority;
 
-	if (!param || param_len < 2) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
-	}
+	if (!param || param_len < 2)
+		return False;
 
 	priority = SVAL(param,0);
 	DEBUG(4,("WaitNamedPipeHandleState priority %x\n", priority));
 
 	if (wait_rpc_pipe_hnd_state(p, priority)) {
 		/* now send the reply */
-		send_trans_reply(conn, req, NULL, 0, NULL, 0, False);
-		return;
+		send_trans_reply(outbuf, NULL, 0, NULL, 0, False);
+		return True;
 	}
-	api_no_reply(conn,req);
+	return False;
 }
 
 
@@ -247,25 +210,22 @@
  SetNamedPipeHandleState 
 ****************************************************************************/
 
-static void api_SNPHS(connection_struct *conn, struct smb_request *req, smb_np_struct *p,
-		      char *param, int param_len)
+static BOOL api_SNPHS(char *outbuf, smb_np_struct *p, char *param, int param_len)
 {
 	uint16 id;
 
-	if (!param || param_len < 2) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
-	}
+	if (!param || param_len < 2)
+		return False;
 
 	id = SVAL(param,0);
 	DEBUG(4,("SetNamedPipeHandleState to code %x\n", id));
 
 	if (set_rpc_pipe_hnd_state(p, id)) {
 		/* now send the reply */
-		send_trans_reply(conn, req, NULL, 0, NULL, 0, False);
-		return;
+		send_trans_reply(outbuf, NULL, 0, NULL, 0, False);
+		return True;
 	}
-	api_no_reply(conn,req);
+	return False;
 }
 
 
@@ -273,7 +233,7 @@
  When no reply is generated, indicate unsupported.
  ****************************************************************************/
 
-static void api_no_reply(connection_struct *conn, struct smb_request *req)
+static BOOL api_no_reply(char *outbuf, int max_rdata_len)
 {
 	char rparam[4];
 
@@ -284,22 +244,20 @@
 	DEBUG(3,("Unsupported API fd command\n"));
 
 	/* now send the reply */
-	send_trans_reply(conn, req, rparam, 4, NULL, 0, False);
+	send_trans_reply(outbuf, rparam, 4, NULL, 0, False);
 
-	return;
+	return -1;
 }
 
 /****************************************************************************
  Handle remote api calls delivered to a named pipe already opened.
  ****************************************************************************/
 
-static void api_fd_reply(connection_struct *conn, uint16 vuid,
-			 struct smb_request *req,
-			 uint16 *setup, char *data, char *params,
-			 int suwcnt, int tdscnt, int tpscnt,
-			 int mdrcnt, int mprcnt)
+static int api_fd_reply(connection_struct *conn,uint16 vuid,char *outbuf,
+		 	uint16 *setup,char *data,char *params,
+		 	int suwcnt,int tdscnt,int tpscnt,int mdrcnt,int mprcnt)
 {
-	bool reply = False;
+	BOOL reply = False;
 	smb_np_struct *p = NULL;
 	int pnum;
 	int subcommand;
@@ -309,8 +267,7 @@
 	/* First find out the name of this file. */
 	if (suwcnt != 2) {
 		DEBUG(0,("Unexpected named pipe transaction.\n"));
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
+		return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 	}
 
 	/* Get the file handle and hence the file name. */
@@ -326,20 +283,18 @@
 			/* Win9x does this call with a unicode pipe name, not a pnum. */
 			/* Just return success for now... */
 			DEBUG(3,("Got TRANSACT_WAITNAMEDPIPEHANDLESTATE on text pipe name\n"));
-			send_trans_reply(conn, req, NULL, 0, NULL, 0, False);
-			return;
+			send_trans_reply(outbuf, NULL, 0, NULL, 0, False);
+			return -1;
 		}
 
 		DEBUG(1,("api_fd_reply: INVALID PIPE HANDLE: %x\n", pnum));
-		reply_nterror(req, NT_STATUS_INVALID_HANDLE);
-		return;
+		return ERROR_NT(NT_STATUS_INVALID_HANDLE);
 	}
 
 	if (vuid != p->vuid) {
 		DEBUG(1, ("Got pipe request (pnum %x) using invalid VUID %d, "
 			  "expected %d\n", pnum, vuid, p->vuid));
-		reply_nterror(req, NT_STATUS_INVALID_HANDLE);
-		return;
+		return ERROR_NT(NT_STATUS_INVALID_HANDLE);
 	}
 
 	DEBUG(3,("Got API command 0x%x on pipe \"%s\" (pnum %x)\n", subcommand, p->name, pnum));
@@ -353,80 +308,62 @@
 	case TRANSACT_DCERPCCMD:
 		/* dce/rpc command */
 		reply = write_to_pipe(p, data, tdscnt);
-		if (!reply) {
-			api_no_reply(conn, req);
-			return;
-		}
-		api_rpc_trans_reply(conn, req, p);
+		if (reply)
+			reply = api_rpc_trans_reply(outbuf, p);
 		break;
 	case TRANSACT_WAITNAMEDPIPEHANDLESTATE:
 		/* Wait Named Pipe Handle state */
-		api_WNPHS(conn, req, p, params, tpscnt);
+		reply = api_WNPHS(outbuf, p, params, tpscnt);
 		break;
 	case TRANSACT_SETNAMEDPIPEHANDLESTATE:
 		/* Set Named Pipe Handle state */
-		api_SNPHS(conn, req, p, params, tpscnt);
+		reply = api_SNPHS(outbuf, p, params, tpscnt);
 		break;
 	default:
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
+		return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 	}
+
+	if (!reply)
+		return api_no_reply(outbuf, mdrcnt);
+
+	return -1;
 }
 
 /****************************************************************************
- Handle named pipe commands.
-****************************************************************************/
-
-static void named_pipe(connection_struct *conn, uint16 vuid,
-		       struct smb_request *req,
-		       const char *name, uint16 *setup,
-		       char *data, char *params,
-		       int suwcnt, int tdscnt,int tpscnt,
-		       int msrcnt, int mdrcnt, int mprcnt)
+  handle named pipe commands
+  ****************************************************************************/
+static int named_pipe(connection_struct *conn,uint16 vuid, char *outbuf,char *name,
+		      uint16 *setup,char *data,char *params,
+		      int suwcnt,int tdscnt,int tpscnt,
+		      int msrcnt,int mdrcnt,int mprcnt)
 {
 	DEBUG(3,("named pipe command on <%s> name\n", name));
 
-	if (strequal(name,"LANMAN")) {
-		api_reply(conn, vuid, req,
-			  data, params,
-			  tdscnt, tpscnt,
-			  mdrcnt, mprcnt);
-		return;
-	}
+	if (strequal(name,"LANMAN"))
+		return api_reply(conn,vuid,outbuf,data,params,tdscnt,tpscnt,mdrcnt,mprcnt);
 
 	if (strequal(name,"WKSSVC") ||
 	    strequal(name,"SRVSVC") ||
 	    strequal(name,"WINREG") ||
 	    strequal(name,"SAMR") ||
-	    strequal(name,"LSARPC")) {
-
+	    strequal(name,"LSARPC"))
+	{
 		DEBUG(4,("named pipe command from Win95 (wow!)\n"));
-
-		api_fd_reply(conn, vuid, req,
-			     setup, data, params,
-			     suwcnt, tdscnt, tpscnt,
-			     mdrcnt, mprcnt);
-		return;
+		return api_fd_reply(conn,vuid,outbuf,setup,data,params,suwcnt,tdscnt,tpscnt,mdrcnt,mprcnt);
 	}
 
-	if (strlen(name) < 1) {
-		api_fd_reply(conn, vuid, req,
-			     setup, data,
-			     params, suwcnt, tdscnt,
-			     tpscnt, mdrcnt, mprcnt);
-		return;
-	}
+	if (strlen(name) < 1)
+		return api_fd_reply(conn,vuid,outbuf,setup,data,params,suwcnt,tdscnt,tpscnt,mdrcnt,mprcnt);
 
 	if (setup)
-		DEBUG(3,("unknown named pipe: setup 0x%X setup1=%d\n",
-			 (int)setup[0],(int)setup[1]));
+		DEBUG(3,("unknown named pipe: setup 0x%X setup1=%d\n", (int)setup[0],(int)setup[1]));
 
-	reply_nterror(req, NT_STATUS_NOT_SUPPORTED);
-	return;
+	return 0;
 }
 
-static void handle_trans(connection_struct *conn, struct smb_request *req,
-			 struct trans_state *state)
+static NTSTATUS handle_trans(connection_struct *conn,
+			     struct trans_state *state,
+			     char *outbuf, int *outsize)
 {
 	char *local_machine_name;
 	int name_offset = 0;
@@ -443,8 +380,7 @@
 					     get_local_machine_name());
 
 	if (local_machine_name == NULL) {
-		reply_nterror(req, NT_STATUS_NO_MEMORY);
-		return;
+		return NT_STATUS_NO_MEMORY;
 	}
 
 	if (strnequal(state->name, local_machine_name,
@@ -454,10 +390,9 @@
 
 	if (!strnequal(&state->name[name_offset], "\\PIPE",
 		       strlen("\\PIPE"))) {
-		reply_nterror(req, NT_STATUS_NOT_SUPPORTED);
-		return;
+		return NT_STATUS_NOT_SUPPORTED;
 	}
-
+	
 	name_offset += strlen("\\PIPE");
 
 	/* Win9x weirdness.  When talking to a unicode server Win9x
@@ -467,92 +402,79 @@
 		name_offset++;
 
 	DEBUG(5,("calling named_pipe\n"));
-	named_pipe(conn, state->vuid, req,
-		   state->name+name_offset,
-		   state->setup,state->data,
-		   state->param,
-		   state->setup_count,state->total_data,
-		   state->total_param,
-		   state->max_setup_return,
-		   state->max_data_return,
-		   state->max_param_return);
+	*outsize = named_pipe(conn, state->vuid, outbuf,
+			      state->name+name_offset,
+			      state->setup,state->data,
+			      state->param,
+			      state->setup_count,state->total_data,
+			      state->total_param,
+			      state->max_setup_return,
+			      state->max_data_return,
+			      state->max_param_return);
 
-	if (state->close_on_completion) {
-		close_cnum(conn,state->vuid);
-		req->conn = NULL;
+	if (*outsize == 0) {
+		return NT_STATUS_NOT_SUPPORTED;
 	}
 
-	return;
+	if (state->close_on_completion)
+		close_cnum(conn,state->vuid);
+
+	return NT_STATUS_OK;
 }
 
 /****************************************************************************
  Reply to a SMBtrans.
  ****************************************************************************/
 
-void reply_trans(struct smb_request *req)
+int reply_trans(connection_struct *conn, char *inbuf,char *outbuf,
+		int size, int bufsize)
 {
-	connection_struct *conn = req->conn;
-	unsigned int dsoff;
-	unsigned int dscnt;
-	unsigned int psoff;
-	unsigned int pscnt;
+	int outsize = 0;
+	unsigned int dsoff = SVAL(inbuf, smb_dsoff);
+	unsigned int dscnt = SVAL(inbuf, smb_dscnt);
+	unsigned int psoff = SVAL(inbuf, smb_psoff);
+	unsigned int pscnt = SVAL(inbuf, smb_pscnt);
+	unsigned int av_size = size-4;
 	struct trans_state *state;
 	NTSTATUS result;
-	unsigned int size;
-	unsigned int av_size;
 
 	START_PROFILE(SMBtrans);
 
-	if (req->wct < 14) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBtrans);
-		return;
-	}
-
-	size = smb_len(req->inbuf) + 4;
-	av_size = smb_len(req->inbuf);
-	dsoff = SVAL(req->inbuf, smb_dsoff);
-	dscnt = SVAL(req->inbuf, smb_dscnt);
-	psoff = SVAL(req->inbuf, smb_psoff);
-	pscnt = SVAL(req->inbuf, smb_pscnt);
-
-	result = allow_new_trans(conn->pending_trans, req->mid);
+	result = allow_new_trans(conn->pending_trans, SVAL(inbuf, smb_mid));
 	if (!NT_STATUS_IS_OK(result)) {
 		DEBUG(2, ("Got invalid trans request: %s\n",
 			  nt_errstr(result)));
-		reply_nterror(req, result);
 		END_PROFILE(SMBtrans);
-		return;
+		return ERROR_NT(result);
 	}
 
 	if ((state = TALLOC_P(conn->mem_ctx, struct trans_state)) == NULL) {
 		DEBUG(0, ("talloc failed\n"));
-		reply_nterror(req, NT_STATUS_NO_MEMORY);
 		END_PROFILE(SMBtrans);
-		return;
+		return ERROR_NT(NT_STATUS_NO_MEMORY);
 	}
 
 	state->cmd = SMBtrans;
 
-	state->mid = req->mid;
-	state->vuid = req->vuid;
-	state->setup_count = CVAL(req->inbuf, smb_suwcnt);
+	state->mid = SVAL(inbuf, smb_mid);
+	state->vuid = SVAL(inbuf, smb_uid);
+	state->setup_count = CVAL(inbuf, smb_suwcnt);
 	state->setup = NULL;
-	state->total_param = SVAL(req->inbuf, smb_tpscnt);
+	state->total_param = SVAL(inbuf, smb_tpscnt);
 	state->param = NULL;
-	state->total_data = SVAL(req->inbuf, smb_tdscnt);
+	state->total_data = SVAL(inbuf, smb_tdscnt);
 	state->data = NULL;
-	state->max_param_return = SVAL(req->inbuf, smb_mprcnt);
-	state->max_data_return = SVAL(req->inbuf, smb_mdrcnt);
-	state->max_setup_return = CVAL(req->inbuf, smb_msrcnt);
-	state->close_on_completion = BITSETW(req->inbuf+smb_vwv5,0);
-	state->one_way = BITSETW(req->inbuf+smb_vwv5,1);
+	state->max_param_return = SVAL(inbuf, smb_mprcnt);
+	state->max_data_return = SVAL(inbuf, smb_mdrcnt);
+	state->max_setup_return = CVAL(inbuf, smb_msrcnt);
+	state->close_on_completion = BITSETW(inbuf+smb_vwv5,0);
+	state->one_way = BITSETW(inbuf+smb_vwv5,1);
 
-	srvstr_pull_buf_talloc(state, req->inbuf, req->flags2, &state->name,
-			smb_buf(req->inbuf), STR_TERMINATE);
-
-	if ((dscnt > state->total_data) || (pscnt > state->total_param) ||
-			!state->name)
+	memset(state->name, '\0',sizeof(state->name));
+	srvstr_pull_buf(inbuf, state->name, smb_buf(inbuf),
+			sizeof(state->name), STR_TERMINATE);
+	
+	if ((dscnt > state->total_data) || (pscnt > state->total_param))
 		goto bad_param;
 
 	if (state->total_data)  {
@@ -563,10 +485,9 @@
 			DEBUG(0,("reply_trans: data malloc fail for %u "
 				 "bytes !\n", (unsigned int)state->total_data));
 			TALLOC_FREE(state);
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
 			END_PROFILE(SMBtrans);
-			return;
-		}
+			return(ERROR_DOS(ERRDOS,ERRnomem));
+		} 
 		/* null-terminate the slack space */
 		memset(&state->data[state->total_data], 0, 100);
 
@@ -581,7 +502,7 @@
 			goto bad_param;
 		}
 
-		memcpy(state->data,smb_base(req->inbuf)+dsoff,dscnt);
+		memcpy(state->data,smb_base(inbuf)+dsoff,dscnt);
 	}
 
 	if (state->total_param) {
@@ -593,9 +514,8 @@
 				 "bytes !\n", (unsigned int)state->total_param));
 			SAFE_FREE(state->data);
 			TALLOC_FREE(state);
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
 			END_PROFILE(SMBtrans);
-			return;
+			return(ERROR_DOS(ERRDOS,ERRnomem));
 		} 
 		/* null-terminate the slack space */
 		memset(&state->param[state->total_param], 0, 100);
@@ -611,7 +531,7 @@
 			goto bad_param;
 		}
 
-		memcpy(state->param,smb_base(req->inbuf)+psoff,pscnt);
+		memcpy(state->param,smb_base(inbuf)+psoff,pscnt);
 	}
 
 	state->received_data  = dscnt;
@@ -624,15 +544,12 @@
 			DEBUG(0,("reply_trans: setup malloc fail for %u "
 				 "bytes !\n", (unsigned int)
 				 (state->setup_count * sizeof(uint16))));
-			SAFE_FREE(state->data);
-			SAFE_FREE(state->param);
 			TALLOC_FREE(state);
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
 			END_PROFILE(SMBtrans);
-			return;
+			return(ERROR_DOS(ERRDOS,ERRnomem));
 		} 
-		if (req->inbuf+smb_vwv14+(state->setup_count*SIZEOFWORD) >
-		    req->inbuf + size)
+		if (inbuf+smb_vwv14+(state->setup_count*SIZEOFWORD) >
+		    inbuf + size)
 			goto bad_param;
 		if ((smb_vwv14+(state->setup_count*SIZEOFWORD) < smb_vwv14) ||
 		    (smb_vwv14+(state->setup_count*SIZEOFWORD) <
@@ -640,32 +557,42 @@
 			goto bad_param;
 
 		for (i=0;i<state->setup_count;i++)
-			state->setup[i] = SVAL(req->inbuf,
-					       smb_vwv14+i*SIZEOFWORD);
+			state->setup[i] = SVAL(inbuf,smb_vwv14+i*SIZEOFWORD);
 	}
 
 	state->received_param = pscnt;
 
-	if ((state->received_param != state->total_param) ||
-	    (state->received_data != state->total_data)) {
-		DLIST_ADD(conn->pending_trans, state);
+	if ((state->received_param == state->total_param) &&
+	    (state->received_data == state->total_data)) {
 
-		/* We need to send an interim response then receive the rest
-		   of the parameter/data bytes */
-		reply_outbuf(req, 0, 0);
-		show_msg((char *)req->outbuf);
+		result = handle_trans(conn, state, outbuf, &outsize);
+
+		SAFE_FREE(state->data);
+		SAFE_FREE(state->param);
+		TALLOC_FREE(state);
+
+		if (!NT_STATUS_IS_OK(result)) {
+			END_PROFILE(SMBtrans);
+			return ERROR_NT(result);
+		}
+
+		if (outsize == 0) {
+			END_PROFILE(SMBtrans);
+			return ERROR_NT(NT_STATUS_INTERNAL_ERROR);
+		}
+
 		END_PROFILE(SMBtrans);
-		return;
+		return outsize;
 	}
 
-	handle_trans(conn, req, state);
+	DLIST_ADD(conn->pending_trans, state);
 
-	SAFE_FREE(state->data);
-	SAFE_FREE(state->param);
-	TALLOC_FREE(state);
-
+	/* We need to send an interim response then receive the rest
+	   of the parameter/data bytes */
+	outsize = set_message(outbuf,0,0,True);
+	show_msg(outbuf);
 	END_PROFILE(SMBtrans);
-	return;
+	return outsize;
 
   bad_param:
 
@@ -674,62 +601,54 @@
 	SAFE_FREE(state->param);
 	TALLOC_FREE(state);
 	END_PROFILE(SMBtrans);
-	reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-	return;
+	return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 }
 
 /****************************************************************************
  Reply to a secondary SMBtrans.
  ****************************************************************************/
 
-void reply_transs(struct smb_request *req)
+int reply_transs(connection_struct *conn, char *inbuf,char *outbuf,
+		 int size, int bufsize)
 {
-	connection_struct *conn = req->conn;
+	int outsize = 0;
 	unsigned int pcnt,poff,dcnt,doff,pdisp,ddisp;
+	unsigned int av_size = size-4;
 	struct trans_state *state;
-	unsigned int av_size;
+	NTSTATUS result;
 
 	START_PROFILE(SMBtranss);
 
-	show_msg((char *)req->inbuf);
+	show_msg(inbuf);
 
-	if (req->wct < 8) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBtranss);
-		return;
-	}
-
 	for (state = conn->pending_trans; state != NULL;
 	     state = state->next) {
-		if (state->mid == req->mid) {
+		if (state->mid == SVAL(inbuf,smb_mid)) {
 			break;
 		}
 	}
 
 	if ((state == NULL) || (state->cmd != SMBtrans)) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
 		END_PROFILE(SMBtranss);
-		return;
+		return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 	}
 
 	/* Revise total_params and total_data in case they have changed
 	 * downwards */
 
-	if (SVAL(req->inbuf, smb_vwv0) < state->total_param)
-		state->total_param = SVAL(req->inbuf,smb_vwv0);
-	if (SVAL(req->inbuf, smb_vwv1) < state->total_data)
-		state->total_data = SVAL(req->inbuf,smb_vwv1);
+	if (SVAL(inbuf, smb_vwv0) < state->total_param)
+		state->total_param = SVAL(inbuf,smb_vwv0);
+	if (SVAL(inbuf, smb_vwv1) < state->total_data)
+		state->total_data = SVAL(inbuf,smb_vwv1);
 
-	av_size = smb_len(req->inbuf);
+	pcnt = SVAL(inbuf, smb_spscnt);
+	poff = SVAL(inbuf, smb_spsoff);
+	pdisp = SVAL(inbuf, smb_spsdisp);
 
-	pcnt = SVAL(req->inbuf, smb_spscnt);
-	poff = SVAL(req->inbuf, smb_spsoff);
-	pdisp = SVAL(req->inbuf, smb_spsdisp);
+	dcnt = SVAL(inbuf, smb_sdscnt);
+	doff = SVAL(inbuf, smb_sdsoff);
+	ddisp = SVAL(inbuf, smb_sdsdisp);
 
-	dcnt = SVAL(req->inbuf, smb_sdscnt);
-	doff = SVAL(req->inbuf, smb_sdsoff);
-	ddisp = SVAL(req->inbuf, smb_sdsdisp);
-
 	state->received_param += pcnt;
 	state->received_data += dcnt;
 		
@@ -752,7 +671,7 @@
 			goto bad_param;
 		}
 
-		memcpy(state->param+pdisp,smb_base(req->inbuf)+poff,
+		memcpy(state->param+pdisp,smb_base(inbuf)+poff,
 		       pcnt);
 	}
 
@@ -761,7 +680,7 @@
 				dcnt > state->total_data ||
 				ddisp+dcnt > state->total_data ||
 				ddisp+dcnt < ddisp) {
-			goto bad_param;
+			goto bad_param; 
 		}
 
 		if (ddisp > av_size ||
@@ -771,31 +690,35 @@
 			goto bad_param;
 		}
 
-		memcpy(state->data+ddisp, smb_base(req->inbuf)+doff,
-		       dcnt);
+		memcpy(state->data+ddisp, smb_base(inbuf)+doff,
+		       dcnt);      
 	}
 
 	if ((state->received_param < state->total_param) ||
 	    (state->received_data < state->total_data)) {
 		END_PROFILE(SMBtranss);
-		return;
+		return -1;
 	}
 
-        /*
-	 * construct_reply_common will copy smb_com from inbuf to
-	 * outbuf. SMBtranss is wrong here.
-         */
-        SCVAL(req->inbuf,smb_com,SMBtrans);
+	/* construct_reply_common has done us the favor to pre-fill the
+	 * command field with SMBtranss which is wrong :-)
+	 */
+	SCVAL(outbuf,smb_com,SMBtrans);
 
-	handle_trans(conn, req, state);
+	result = handle_trans(conn, state, outbuf, &outsize);
 
 	DLIST_REMOVE(conn->pending_trans, state);
 	SAFE_FREE(state->data);
 	SAFE_FREE(state->param);
 	TALLOC_FREE(state);
 
+	if ((outsize == 0) || !NT_STATUS_IS_OK(result)) {
+		END_PROFILE(SMBtranss);
+		return(ERROR_DOS(ERRSRV,ERRnosupport));
+	}
+	
 	END_PROFILE(SMBtranss);
-	return;
+	return(outsize);
 
   bad_param:
 
@@ -804,7 +727,6 @@
 	SAFE_FREE(state->data);
 	SAFE_FREE(state->param);
 	TALLOC_FREE(state);
-	reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
 	END_PROFILE(SMBtranss);
-	return;
+	return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 }

Modified: branches/samba/upstream/source/smbd/lanman.c
===================================================================
--- branches/samba/upstream/source/smbd/lanman.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/lanman.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    */
 /*
    This file handles the named pipe and mailslot calls
@@ -50,73 +51,42 @@
 
 #define SHPWLEN 8		/* share password length */
 
-/* Limit size of ipc replies */
-
-static char *smb_realloc_limit(void *ptr, size_t size)
-{
-	char *val;
-
-	size = MAX((size),4*1024);
-	val = (char *)SMB_REALLOC(ptr,size);
-	if (val) {
-		memset(val,'\0',size);
-	}
-	return val;
-}
-
-static bool api_Unsupported(connection_struct *conn, uint16 vuid,
+static BOOL api_Unsupported(connection_struct *conn, uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt, int mprcnt,
 				char **rdata, char **rparam,
 				int *rdata_len, int *rparam_len);
 
-static bool api_TooSmall(connection_struct *conn, uint16 vuid, char *param, char *data,
+static BOOL api_TooSmall(connection_struct *conn, uint16 vuid, char *param, char *data,
 			 int mdrcnt, int mprcnt,
 			 char **rdata, char **rparam,
 			 int *rdata_len, int *rparam_len);
 
 
-static int CopyExpanded(connection_struct *conn,
-			int snum, char **dst, char *src, int *p_space_remaining)
+static int CopyExpanded(connection_struct *conn, 
+			int snum, char **dst, char *src, int *n)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *buf = NULL;
+	pstring buf;
 	int l;
 
-	if (!src || !dst || !p_space_remaining || !(*dst) ||
-			*p_space_remaining <= 0) {
+	if (!src || !dst || !n || !(*dst)) {
 		return 0;
 	}
 
-	buf = talloc_strdup(ctx, src);
-	if (!buf) {
-		*p_space_remaining = 0;
-		return 0;
-	}
-	buf = talloc_string_sub(ctx, buf,"%S",lp_servicename(snum));
-	if (!buf) {
-		*p_space_remaining = 0;
-		return 0;
-	}
-	buf = talloc_sub_advanced(ctx,
-				lp_servicename(SNUM(conn)),
-				conn->user,
-				conn->connectpath,
-				conn->gid,
-				get_current_username(),
-				current_user_info.domain,
-				buf);
-	if (!buf) {
-		*p_space_remaining = 0;
-		return 0;
-	}
-	l = push_ascii(*dst,buf,*p_space_remaining, STR_TERMINATE);
+	StrnCpy(buf,src,sizeof(buf)/2);
+	pstring_sub(buf,"%S",lp_servicename(snum));
+	standard_sub_advanced(lp_servicename(SNUM(conn)), conn->user,
+			      conn->connectpath, conn->gid,
+			      get_current_username(),
+			      current_user_info.domain,
+			      buf, sizeof(buf));
+	l = push_ascii(*dst,buf,*n, STR_TERMINATE);
 	if (l == -1) {
 		return 0;
 	}
 	(*dst) += l;
-	(*p_space_remaining) -= l;
+	(*n) -= l;
 	return l;
 }
 
@@ -137,64 +107,41 @@
 
 static int StrlenExpanded(connection_struct *conn, int snum, char *s)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *buf = NULL;
+	pstring buf;
 	if (!s) {
 		return 0;
 	}
-	buf = talloc_strdup(ctx,s);
-	if (!buf) {
-		return 0;
-	}
-	buf = talloc_string_sub(ctx,buf,"%S",lp_servicename(snum));
-	if (!buf) {
-		return 0;
-	}
-	buf = talloc_sub_advanced(ctx,
-				lp_servicename(SNUM(conn)),
-				conn->user,
-				conn->connectpath,
-				conn->gid,
-				get_current_username(),
-				current_user_info.domain,
-				buf);
-	if (!buf) {
-		return 0;
-	}
+	StrnCpy(buf,s,sizeof(buf)/2);
+	pstring_sub(buf,"%S",lp_servicename(snum));
+	standard_sub_advanced(lp_servicename(SNUM(conn)), conn->user,
+			      conn->connectpath, conn->gid,
+			      get_current_username(),
+			      current_user_info.domain,
+			      buf, sizeof(buf));
 	return strlen(buf) + 1;
 }
 
 static char *Expand(connection_struct *conn, int snum, char *s)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	char *buf = NULL;
-
+	static pstring buf;
 	if (!s) {
 		return NULL;
 	}
-	buf = talloc_strdup(ctx,s);
-	if (!buf) {
-		return 0;
-	}
-	buf = talloc_string_sub(ctx,buf,"%S",lp_servicename(snum));
-	if (!buf) {
-		return 0;
-	}
-	return talloc_sub_advanced(ctx,
-				lp_servicename(SNUM(conn)),
-				conn->user,
-				conn->connectpath,
-				conn->gid,
-				get_current_username(),
-				current_user_info.domain,
-				buf);
+	StrnCpy(buf,s,sizeof(buf)/2);
+	pstring_sub(buf,"%S",lp_servicename(snum));
+	standard_sub_advanced(lp_servicename(SNUM(conn)), conn->user,
+			      conn->connectpath, conn->gid,
+			      get_current_username(),
+			      current_user_info.domain,
+			      buf, sizeof(buf));
+	return &buf[0];
 }
 
 /*******************************************************************
  Check a API string for validity when we only need to check the prefix.
 ******************************************************************/
 
-static bool prefix_ok(const char *str, const char *prefix)
+static BOOL prefix_ok(const char *str, const char *prefix)
 {
 	return(strncmp(str,prefix,strlen(prefix)) == 0);
 }
@@ -269,7 +216,7 @@
 	return n;
 }
 
-static bool init_package(struct pack_desc *p, int count, int subcount)
+static BOOL init_package(struct pack_desc *p, int count, int subcount)
 {
 	int n = p->buflen;
 	int i;
@@ -620,20 +567,16 @@
  Returns True if from tdb, False otherwise.
  ********************************************************************/
 
-static bool get_driver_name(int snum, char **pp_drivername)
+static BOOL get_driver_name(int snum, pstring drivername)
 {
 	NT_PRINTER_INFO_LEVEL *info = NULL;
-	bool in_tdb = false;
+	BOOL in_tdb = False;
 
 	get_a_printer (NULL, &info, 2, lp_servicename(snum));
 	if (info != NULL) {
-		*pp_drivername = talloc_strdup(talloc_tos(),
-					info->info_2->drivername);
-		in_tdb = true;
+		pstrcpy( drivername, info->info_2->drivername);
+		in_tdb = True;
 		free_a_printer(&info, 2);
-		if (!*pp_drivername) {
-			return false;
-		}
 	}
 
 	return in_tdb;
@@ -768,7 +711,7 @@
 	}
 
 	if (uLevel == 3 || uLevel == 4) {
-		char *drivername = NULL;
+		pstring drivername;
 
 		PACKI(desc,"W",5);		/* uPriority */
 		PACKI(desc,"W",0);		/* uStarttime */
@@ -778,7 +721,7 @@
 		PACKS(desc,"z","WinPrint");	/* pszPrProc */
 		PACKS(desc,"z",NULL);		/* pszParms */
 		PACKS(desc,"z",NULL);		/* pszComment - don't ask.... JRA */
-		/* "don't ask" that it's done this way to fix corrupted
+		/* "don't ask" that it's done this way to fix corrupted 
 		   Win9X/ME printer comments. */
 		if (!status) {
 			PACKI(desc,"W",LPSTAT_OK); /* fsStatus */
@@ -787,10 +730,7 @@
 		}
 		PACKI(desc,(uLevel == 3 ? "W" : "N"),count);	/* cJobs */
 		PACKS(desc,"z",SERVICE(snum)); /* pszPrinters */
-		get_driver_name(snum,&drivername);
-		if (!drivername) {
-			return;
-		}
+		get_driver_name(snum,drivername);
 		PACKS(desc,"z",drivername);		/* pszDriverName */
 		PackDriverData(desc);	/* pDriverData */
 	}
@@ -842,7 +782,7 @@
 	return result;
 }
 
-static bool api_DosPrintQGetInfo(connection_struct *conn, uint16 vuid,
+static BOOL api_DosPrintQGetInfo(connection_struct *conn, uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -893,7 +833,7 @@
 		 */
 		*rdata_len = 0;
 		*rparam_len = 6;
-		*rparam = smb_realloc_limit(*rparam,*rparam_len);
+		*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 		if (!*rparam) {
 			return False;
 		}
@@ -915,9 +855,8 @@
 	}
 
 	if (mdrcnt > 0) {
-		*rdata = smb_realloc_limit(*rdata,mdrcnt);
+		*rdata = SMB_REALLOC_LIMIT(*rdata,mdrcnt);
 		if (!*rdata) {
-			SAFE_FREE(queue);
 			return False;
 		}
 		desc.base = *rdata;
@@ -948,10 +887,8 @@
  
 	*rdata_len = desc.usedlen;
 	*rparam_len = 6;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
-		SAFE_FREE(queue);
-		SAFE_FREE(tmpdata);
 		return False;
 	}
 	SSVALS(*rparam,0,desc.errcode);
@@ -970,7 +907,7 @@
  View list of all print jobs on all queues.
 ****************************************************************************/
 
-static bool api_DosPrintQEnum(connection_struct *conn, uint16 vuid,
+static BOOL api_DosPrintQEnum(connection_struct *conn, uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt, int mprcnt,
@@ -1009,7 +946,7 @@
 		 */
 		*rdata_len = 0;
 		*rparam_len = 6;
-		*rparam = smb_realloc_limit(*rparam,*rparam_len);
+		*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 		if (!*rparam) {
 			return False;
 		}
@@ -1051,7 +988,7 @@
 	}
 
 	if (mdrcnt > 0) {
-		*rdata = smb_realloc_limit(*rdata,mdrcnt);
+		*rdata = SMB_REALLOC_LIMIT(*rdata,mdrcnt);
 		if (!*rdata) {
 			goto err;
 		}
@@ -1077,7 +1014,7 @@
  
 	*rdata_len = desc.usedlen;
 	*rparam_len = 8;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		goto err;
 	}
@@ -1115,7 +1052,7 @@
  Get info level for a server list query.
 ****************************************************************************/
 
-static bool check_server_info(int uLevel, char* id)
+static BOOL check_server_info(int uLevel, char* id)
 {
 	switch( uLevel ) {
 		case 0:
@@ -1139,7 +1076,7 @@
 	uint32 type;
 	fstring comment;
 	fstring domain;
-	bool server_added;
+	BOOL server_added;
 };
 
 /*******************************************************************
@@ -1154,7 +1091,7 @@
 	int count=0;
 	int alloced=0;
 	char **lines;
-	bool local_list_only;
+	BOOL local_list_only;
 	int i;
 
 	lines = file_lines_load(lock_path(SERVER_LIST), NULL, 0);
@@ -1176,14 +1113,12 @@
 		fstring stype;
 		struct srv_info_struct *s;
 		const char *ptr = lines[i];
-		bool ok = True;
-		TALLOC_CTX *frame = NULL;
-		char *p;
+		BOOL ok = True;
 
 		if (!*ptr) {
 			continue;
 		}
-
+    
 		if (count == alloced) {
 			alloced += 10;
 			*servers = SMB_REALLOC_ARRAY(*servers,struct srv_info_struct, alloced);
@@ -1195,43 +1130,26 @@
 			memset((char *)((*servers)+count),'\0',sizeof(**servers)*(alloced-count));
 		}
 		s = &(*servers)[count];
-
-		frame = talloc_stackframe();
-		s->name[0] = '\0';
-		if (!next_token_talloc(frame,&ptr,&p, NULL)) {
-			TALLOC_FREE(frame);
+    
+		if (!next_token(&ptr,s->name, NULL, sizeof(s->name))) {
 			continue;
 		}
-		fstrcpy(s->name, p);
-
-		stype[0] = '\0';
-		if (!next_token_talloc(frame,&ptr, &p, NULL)) {
-			TALLOC_FREE(frame);
+		if (!next_token(&ptr,stype, NULL, sizeof(stype))) {
 			continue;
 		}
-		fstrcpy(stype, p);
-
-		s->comment[0] = '\0';
-		if (!next_token_talloc(frame,&ptr, &p, NULL)) {
-			TALLOC_FREE(frame);
+		if (!next_token(&ptr,s->comment, NULL, sizeof(s->comment))) {
 			continue;
 		}
-		fstrcpy(s->comment, p);
-
-		s->domain[0] = '\0';
-		if (!next_token_talloc(frame,&ptr,&p, NULL)) {
+		if (!next_token(&ptr,s->domain, NULL, sizeof(s->domain))) {
 			/* this allows us to cope with an old nmbd */
-			fstrcpy(s->domain,lp_workgroup());
-		} else {
-			fstrcpy(s->domain, p);
+			fstrcpy(s->domain,lp_workgroup()); 
 		}
-		TALLOC_FREE(frame);
-
-		if (sscanf(stype,"%X",&s->type) != 1) {
-			DEBUG(4,("r:host file "));
-			ok = False;
+    
+		if (sscanf(stype,"%X",&s->type) != 1) { 
+			DEBUG(4,("r:host file ")); 
+			ok = False; 
 		}
-
+    
 		/* Filter the servers/domains we return based on what was asked for. */
 
 		/* Check to see if we are being asked for a local list only. */
@@ -1241,11 +1159,11 @@
 		}
 
 		/* doesn't match up: don't want it */
-		if (!(servertype & s->type)) {
-			DEBUG(4,("r:serv type "));
-			ok = False;
+		if (!(servertype & s->type)) { 
+			DEBUG(4,("r:serv type ")); 
+			ok = False; 
 		}
-
+    
 		if ((servertype & SV_TYPE_DOMAIN_ENUM) != 
 				(s->type & SV_TYPE_DOMAIN_ENUM)) {
 			DEBUG(4,("s: dom mismatch "));
@@ -1354,7 +1272,7 @@
 }
 
 
-static bool srv_comp(struct srv_info_struct *s1,struct srv_info_struct *s2)
+static BOOL srv_comp(struct srv_info_struct *s1,struct srv_info_struct *s2)
 {
 	return(strcmp(s1->name,s2->name));
 }
@@ -1364,7 +1282,7 @@
  extracted from lists saved by nmbd on the local host.
 ****************************************************************************/
 
-static bool api_RNetServerEnum(connection_struct *conn, uint16 vuid,
+static BOOL api_RNetServerEnum(connection_struct *conn, uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt, int mprcnt, char **rdata, 
@@ -1383,8 +1301,8 @@
 	int counted=0,total=0;
 	int i,missed;
 	fstring domain;
-	bool domain_request;
-	bool local_request;
+	BOOL domain_request;
+	BOOL local_request;
 
 	if (!str1 || !str2 || !p) {
 		return False;
@@ -1399,7 +1317,7 @@
 	}
 
 	/* If someone sets SV_TYPE_LOCAL_LIST_ONLY but hasn't set
-	   any other bit (they may just set this bit on its own) they 
+	   any other bit (they may just set this bit on it's own) they 
 	   want all the locally seen servers. However this bit can be 
 	   set on its own so set the requested servers to be 
 	   ALL - DOMAIN_ENUM. */
@@ -1469,10 +1387,11 @@
 	}
 
 	*rdata_len = fixed_len + string_len;
-	*rdata = smb_realloc_limit(*rdata,*rdata_len);
+	*rdata = SMB_REALLOC_LIMIT(*rdata,*rdata_len);
 	if (!*rdata) {
 		return False;
 	}
+	memset(*rdata,'\0',*rdata_len);
   
 	p2 = (*rdata) + fixed_len;	/* auxilliary data (strings) will go here */
 	p = *rdata;
@@ -1498,7 +1417,7 @@
 	}
   
 	*rparam_len = 8;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -1519,7 +1438,7 @@
   command 0x34 - suspected of being a "Lookup Names" stub api
   ****************************************************************************/
 
-static bool api_RNetGroupGetUsers(connection_struct *conn, uint16 vuid,
+static BOOL api_RNetGroupGetUsers(connection_struct *conn, uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt, int mprcnt, char **rdata, 
@@ -1547,7 +1466,7 @@
 	*rdata_len = 0;
   
 	*rparam_len = 8;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -1564,7 +1483,7 @@
   get info about a share
   ****************************************************************************/
 
-static bool check_share_info(int uLevel, char* id)
+static BOOL check_share_info(int uLevel, char* id)
 {
 	switch( uLevel ) {
 		case 0:
@@ -1708,7 +1627,7 @@
 	return len;
 }
 
-static bool api_RNetShareGetInfo(connection_struct *conn,uint16 vuid,
+static BOOL api_RNetShareGetInfo(connection_struct *conn,uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -1739,7 +1658,7 @@
 		return False;
 	}
  
-	*rdata = smb_realloc_limit(*rdata,mdrcnt);
+	*rdata = SMB_REALLOC_LIMIT(*rdata,mdrcnt);
 	if (!*rdata) {
 		return False;
 	}
@@ -1750,7 +1669,7 @@
 	}
  
 	*rparam_len = 6;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -1771,7 +1690,7 @@
   Share names longer than 12 bytes must be skipped.
  ****************************************************************************/
 
-static bool api_RNetShareEnum( connection_struct *conn, uint16 vuid,
+static BOOL api_RNetShareEnum( connection_struct *conn, uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int                mdrcnt,
@@ -1789,7 +1708,7 @@
 	char *p2;
 	int count = 0;
 	int total=0,counted=0;
-	bool missed = False;
+	BOOL missed = False;
 	int i;
 	int data_len, fixed_len, string_len;
 	int f_len = 0, s_len = 0;
@@ -1807,7 +1726,6 @@
   
 	/* Ensure all the usershares are loaded. */
 	become_root();
-	load_registry_shares();
 	count = load_usershare_shares();
 	unbecome_root();
 
@@ -1833,11 +1751,12 @@
 	}
 
 	*rdata_len = fixed_len + string_len;
-	*rdata = smb_realloc_limit(*rdata,*rdata_len);
+	*rdata = SMB_REALLOC_LIMIT(*rdata,*rdata_len);
 	if (!*rdata) {
 		return False;
 	}
- 
+	memset(*rdata,0,*rdata_len);
+  
 	p2 = (*rdata) + fixed_len;	/* auxiliary data (strings) will go here */
 	p = *rdata;
 	f_len = fixed_len;
@@ -1858,7 +1777,7 @@
 	}
   
 	*rparam_len = 8;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -1878,7 +1797,7 @@
   Add a share
   ****************************************************************************/
 
-static bool api_RNetShareAdd(connection_struct *conn,uint16 vuid,
+static BOOL api_RNetShareAdd(connection_struct *conn,uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -1891,12 +1810,12 @@
 	int uLevel = get_safe_SVAL(param,tpscnt,p,0,-1);
 	fstring sharename;
 	fstring comment;
-	char *pathname = NULL;
+	pstring pathname;
 	char *command, *cmdname;
 	unsigned int offset;
 	int snum;
 	int res = ERRunsup;
-
+  
 	if (!str1 || !str2 || !p) {
 		return False;
 	}
@@ -1955,12 +1874,8 @@
 	if (skip_string(data,mdrcnt,data+offset) == NULL) {
 		return False;
 	}
+	pull_ascii_pstring(pathname, offset? (data+offset) : "");
 
-	pull_ascii_talloc(talloc_tos(), &pathname, offset? (data+offset) : "");
-	if (!pathname) {
-		return false;
-	}
-
 	string_replace(sharename, '"', ' ');
 	string_replace(pathname, '"', ' ');
 	string_replace(comment, '"', ' ');
@@ -1971,28 +1886,27 @@
 		return False;
 	}
 
-	if (asprintf(&command, "%s \"%s\" \"%s\" \"%s\" \"%s\"",
-		     lp_add_share_cmd(), get_dyn_CONFIGFILE(), sharename,
-		     pathname, comment) == -1) {
-		return false;
-	}
+	asprintf(&command, "%s \"%s\" \"%s\" \"%s\" \"%s\"",
+		lp_add_share_cmd(), dyn_CONFIGFILE, sharename, pathname, comment);
 
-	DEBUG(10,("api_RNetShareAdd: Running [%s]\n", command ));
+	if (command) {
+		DEBUG(10,("api_RNetShareAdd: Running [%s]\n", command ));
 
-	if ((res = smbrun(command, NULL)) != 0) {
-		DEBUG(1,("api_RNetShareAdd: Running [%s] returned (%d)\n",
-			 command, res ));
-		SAFE_FREE(command);
-		res = ERRnoaccess;
-		goto error_exit;
+		if ((res = smbrun(command, NULL)) != 0) {
+			DEBUG(1,("api_RNetShareAdd: Running [%s] returned (%d)\n", command, res ));
+			SAFE_FREE(command);
+			res = ERRnoaccess;
+			goto error_exit;
+		} else {
+			SAFE_FREE(command);
+			message_send_all(conn_tdb_ctx(), MSG_SMB_CONF_UPDATED, NULL, 0, False, NULL);
+		}
 	} else {
-		SAFE_FREE(command);
-		message_send_all(smbd_messaging_context(),
-				 MSG_SMB_CONF_UPDATED, NULL, 0, NULL);
+		return False;
 	}
 
 	*rparam_len = 6;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -2006,7 +1920,7 @@
   error_exit:
 
 	*rparam_len = 4;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -2020,7 +1934,7 @@
   view list of groups available
   ****************************************************************************/
 
-static bool api_RNetGroupEnum(connection_struct *conn,uint16 vuid,
+static BOOL api_RNetGroupEnum(connection_struct *conn,uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -2080,7 +1994,7 @@
 	unbecome_root();
 
 	*rdata_len = cli_buf_size;
-	*rdata = smb_realloc_limit(*rdata,*rdata_len);
+	*rdata = SMB_REALLOC_LIMIT(*rdata,*rdata_len);
 	if (!*rdata) {
 		return False;
 	}
@@ -2110,7 +2024,7 @@
 	*rdata_len = PTR_DIFF(p,*rdata);
 
 	*rparam_len = 8;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -2126,7 +2040,7 @@
  Get groups that a user is a member of.
 ******************************************************************/
 
-static bool api_NetUserGetGroups(connection_struct *conn,uint16 vuid,
+static BOOL api_NetUserGetGroups(connection_struct *conn,uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -2141,7 +2055,7 @@
 	const char *level_string;
 	int count=0;
 	struct samu *sampw = NULL;
-	bool ret = False;
+	BOOL ret = False;
 	DOM_SID *sids;
 	gid_t *gids;
 	size_t num_groups;
@@ -2149,7 +2063,6 @@
 	NTSTATUS result;
 	DOM_SID user_sid;
 	enum lsa_SidType type;
-	char *endp = NULL;
 	TALLOC_CTX *mem_ctx;
 
 	if (!str1 || !str2 || !UserName || !p) {
@@ -2157,16 +2070,16 @@
 	}
 
 	*rparam_len = 8;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
-
+  
 	/* check it's a supported varient */
-
+	
 	if ( strcmp(str1,"zWrLeh") != 0 )
 		return False;
-
+		
 	switch( uLevel ) {
 		case 0:
 			level_string = "B21";
@@ -2179,16 +2092,14 @@
 		return False;
 
 	*rdata_len = mdrcnt + 1024;
-	*rdata = smb_realloc_limit(*rdata,*rdata_len);
+	*rdata = SMB_REALLOC_LIMIT(*rdata,*rdata_len);
 	if (!*rdata) {
 		return False;
 	}
-
 	SSVAL(*rparam,0,NERR_Success);
 	SSVAL(*rparam,2,0);		/* converter word */
 
 	p = *rdata;
-	endp = *rdata + *rdata_len;
 
 	mem_ctx = talloc_new(NULL);
 	if (mem_ctx == NULL) {
@@ -2202,7 +2113,7 @@
 		return False;
 	}
 
-	/* Lookup the user information; This should only be one of
+	/* Lookup the user information; This should only be one of 
 	   our accounts (not remote domains) */
 
 	become_root();					/* ROOT BLOCK */
@@ -2221,7 +2132,7 @@
 
 	if ( !pdb_getsampwsid(sampw, &user_sid) ) {
 		DEBUG(10, ("pdb_getsampwsid(%s) failed for user %s\n",
-			   sid_string_dbg(&user_sid), UserName));
+			   sid_string_static(&user_sid), UserName));
 		goto done;
 	}
 
@@ -2239,11 +2150,12 @@
 	}
 
 	for (i=0; i<num_groups; i++) {
-		const char *grp_name;
 
+		const char *grp_name;
+	
 		if ( lookup_sid(mem_ctx, &sids[i], NULL, &grp_name, NULL) ) {
-			strlcpy(p, grp_name, PTR_DIFF(endp,p));
-			p += 21;
+			pstrcpy(p, grp_name);
+			p += 21; 
 			count++;
 		}
 	}
@@ -2267,7 +2179,7 @@
  Get all users.
 ******************************************************************/
 
-static bool api_RNetUserEnum(connection_struct *conn, uint16 vuid,
+static BOOL api_RNetUserEnum(connection_struct *conn, uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -2284,7 +2196,6 @@
 	char *str1 = get_safe_str_ptr(param,tpscnt,param,2);
 	char *str2 = skip_string(param,tpscnt,str1);
 	char *p = skip_string(param,tpscnt,str2);
-	char *endp = NULL;
 
 	if (!str1 || !str2 || !p) {
 		return False;
@@ -2299,14 +2210,14 @@
 	  * e -> return parameter number of entries
 	  * h -> return parameter total number of users
 	  */
-
+  
 	resume_context = get_safe_SVAL(param,tpscnt,p,0,-1);
 	cli_buf_size= get_safe_SVAL(param,tpscnt,p,2,0);
 	DEBUG(10,("api_RNetUserEnum:resume context: %d, client buffer size: %d\n",
 			resume_context, cli_buf_size));
 
 	*rparam_len = 8;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -2316,13 +2227,12 @@
 		return False;
 
 	*rdata_len = cli_buf_size;
-	*rdata = smb_realloc_limit(*rdata,*rdata_len);
+	*rdata = SMB_REALLOC_LIMIT(*rdata,*rdata_len);
 	if (!*rdata) {
 		return False;
 	}
 
 	p = *rdata;
-	endp = *rdata + *rdata_len;
 
 	become_root();
 	search = pdb_search_users(ACB_NORMAL);
@@ -2341,13 +2251,13 @@
 
 	for (i=0; i<num_users; i++) {
 		const char *name = users[i].account_name;
-
+		
 		if(((PTR_DIFF(p,*rdata)+21)<=*rdata_len)&&(strlen(name)<=21)) {
-			strlcpy(p,name,PTR_DIFF(endp,p));
+			pstrcpy(p,name); 
 			DEBUG(10,("api_RNetUserEnum:adding entry %d username "
 				  "%s\n",count_sent,p));
-			p += 21;
-			count_sent++;
+			p += 21; 
+			count_sent++; 
 		} else {
 			/* set overflow error */
 			DEBUG(10,("api_RNetUserEnum:overflow on entry %d "
@@ -2373,7 +2283,7 @@
  Get the time of day info.
 ****************************************************************************/
 
-static bool api_NetRemoteTOD(connection_struct *conn,uint16 vuid,
+static BOOL api_NetRemoteTOD(connection_struct *conn,uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -2385,13 +2295,13 @@
 	char *p;
 
 	*rparam_len = 4;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
 
 	*rdata_len = 21;
-	*rdata = smb_realloc_limit(*rdata,*rdata_len);
+	*rdata = SMB_REALLOC_LIMIT(*rdata,*rdata_len);
 	if (!*rdata) {
 		return False;
 	}
@@ -2431,7 +2341,7 @@
  Set the user password.
 *****************************************************************************/
 
-static bool api_SetUserPassword(connection_struct *conn,uint16 vuid,
+static BOOL api_SetUserPassword(connection_struct *conn,uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -2475,7 +2385,7 @@
 	memcpy(pass2,p+16,16);
 
 	*rparam_len = 4;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -2542,7 +2452,7 @@
   Set the user password (SamOEM version - gets plaintext).
 ****************************************************************************/
 
-static bool api_SamOEMChangePassword(connection_struct *conn,uint16 vuid,
+static BOOL api_SamOEMChangePassword(connection_struct *conn,uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -2552,7 +2462,7 @@
 	fstring user;
 	char *p = get_safe_str_ptr(param,tpscnt,param,2);
 	*rparam_len = 2;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -2620,7 +2530,7 @@
   Form: <W> <> 
   ****************************************************************************/
 
-static bool api_RDosPrintJobDel(connection_struct *conn,uint16 vuid,
+static BOOL api_RDosPrintJobDel(connection_struct *conn,uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -2655,7 +2565,7 @@
 		return(False);
 
 	*rparam_len = 4;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);	
 	if (!*rparam) {
 		return False;
 	}
@@ -2703,7 +2613,7 @@
   Purge a print queue - or pause or resume it.
   ****************************************************************************/
 
-static bool api_WPrintQueueCtrl(connection_struct *conn,uint16 vuid,
+static BOOL api_WPrintQueueCtrl(connection_struct *conn,uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -2727,7 +2637,7 @@
 		return(False);
 
 	*rparam_len = 4;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -2795,7 +2705,7 @@
 	return True;
 }
 
-static bool api_PrintJobInfo(connection_struct *conn, uint16 vuid,
+static BOOL api_PrintJobInfo(connection_struct *conn, uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -2825,7 +2735,7 @@
 	if(!rap_to_pjobid(SVAL(p,0), sharename, &jobid))
 		return False;
 	*rparam_len = 4;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -2883,7 +2793,7 @@
  Get info about the server.
 ****************************************************************************/
 
-static bool api_RNetServerGetInfo(connection_struct *conn,uint16 vuid,
+static BOOL api_RNetServerGetInfo(connection_struct *conn,uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -2950,7 +2860,7 @@
 	}
 
 	*rdata_len = mdrcnt;
-	*rdata = smb_realloc_limit(*rdata,*rdata_len);
+	*rdata = SMB_REALLOC_LIMIT(*rdata,*rdata_len);
 	if (!*rdata) {
 		return False;
 	}
@@ -2958,32 +2868,23 @@
 	p = *rdata;
 	p2 = p + struct_len;
 	if (uLevel != 20) {
-		srvstr_push(NULL, 0, p,global_myname(),16,
+		srvstr_push(NULL, p,global_myname(),16, 
 			STR_ASCII|STR_UPPER|STR_TERMINATE);
   	}
 	p += 16;
 	if (uLevel > 0) {
 		struct srv_info_struct *servers=NULL;
 		int i,count;
-		char *comment = NULL;
-		TALLOC_CTX *ctx = talloc_tos();
+		pstring comment;
 		uint32 servertype= lp_default_server_announce();
 
-		comment = talloc_strdup(ctx,lp_serverstring());
-		if (!comment) {
-			return false;
-		}
+		push_ascii(comment,lp_serverstring(), MAX_SERVER_STRING_LENGTH,STR_TERMINATE);
 
 		if ((count=get_server_info(SV_TYPE_ALL,&servers,lp_workgroup()))>0) {
 			for (i=0;i<count;i++) {
 				if (strequal(servers[i].name,global_myname())) {
 					servertype = servers[i].type;
-					TALLOC_FREE(comment);
-					comment = talloc_strdup(ctx,
-							servers[i].comment);
-					if (comment) {
-						return false;
-					}
+					push_ascii(comment,servers[i].comment,sizeof(pstring),STR_TERMINATE);
 				}
 			}
 		}
@@ -2998,25 +2899,12 @@
 			SIVAL(p,6,0);
 		} else {
 			SIVAL(p,6,PTR_DIFF(p2,*rdata));
-			comment = talloc_sub_advanced(ctx,
-						lp_servicename(SNUM(conn)),
-						conn->user,
-						conn->connectpath,
-						conn->gid,
-						get_current_username(),
-						current_user_info.domain,
-						comment);
-			if (comment) {
-				return false;
-			}
-			if (mdrcnt - struct_len <= 0) {
-				return false;
-			}
-			push_ascii(p2,
-				comment,
-				MIN(mdrcnt - struct_len,
-					MAX_SERVER_STRING_LENGTH),
-				STR_TERMINATE);
+			standard_sub_advanced(lp_servicename(SNUM(conn)), conn->user,
+					      conn->connectpath, conn->gid,
+					      get_current_username(),
+					      current_user_info.domain,
+					      comment, sizeof(comment));
+			StrnCpy(p2,comment,MAX(mdrcnt - struct_len,0));
 			p2 = skip_string(*rdata,*rdata_len,p2);
 			if (!p2) {
 				return False;
@@ -3031,7 +2919,7 @@
 	*rdata_len = PTR_DIFF(p2,*rdata);
 
 	*rparam_len = 6;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -3046,7 +2934,7 @@
  Get info about the server.
 ****************************************************************************/
 
-static bool api_NetWkstaGetInfo(connection_struct *conn,uint16 vuid,
+static BOOL api_NetWkstaGetInfo(connection_struct *conn,uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -3057,7 +2945,6 @@
 	char *str2 = skip_string(param,tpscnt,str1);
 	char *p = skip_string(param,tpscnt,str2);
 	char *p2;
-	char *endp;
 	int level = get_safe_SVAL(param,tpscnt,p,0,-1);
 
 	if (!str1 || !str2 || !p) {
@@ -3067,7 +2954,7 @@
 	DEBUG(4,("NetWkstaGetInfo level %d\n",level));
 
 	*rparam_len = 6;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -3078,7 +2965,7 @@
 	}
 
 	*rdata_len = mdrcnt + 1024;
-	*rdata = smb_realloc_limit(*rdata,*rdata_len);
+	*rdata = SMB_REALLOC_LIMIT(*rdata,*rdata_len);
 	if (!*rdata) {
 		return False;
 	}
@@ -3087,15 +2974,13 @@
 	SSVAL(*rparam,2,0);		/* converter word */
 
 	p = *rdata;
-	endp = *rdata + *rdata_len;
-
 	p2 = get_safe_ptr(*rdata,*rdata_len,p,22);
 	if (!p2) {
 		return False;
 	}
 
 	SIVAL(p,0,PTR_DIFF(p2,*rdata)); /* host name */
-	strlcpy(p2,get_local_machine_name(),PTR_DIFF(endp,p2));
+	pstrcpy(p2,get_local_machine_name());
 	strupper_m(p2);
 	p2 = skip_string(*rdata,*rdata_len,p2);
 	if (!p2) {
@@ -3104,7 +2989,7 @@
 	p += 4;
 
 	SIVAL(p,0,PTR_DIFF(p2,*rdata));
-	strlcpy(p2,current_user_info.smb_name,PTR_DIFF(endp,p2));
+	pstrcpy(p2,current_user_info.smb_name);
 	p2 = skip_string(*rdata,*rdata_len,p2);
 	if (!p2) {
 		return False;
@@ -3112,7 +2997,7 @@
 	p += 4;
 
 	SIVAL(p,0,PTR_DIFF(p2,*rdata)); /* login domain */
-	strlcpy(p2,lp_workgroup(),PTR_DIFF(endp,p2));
+	pstrcpy(p2,lp_workgroup());
 	strupper_m(p2);
 	p2 = skip_string(*rdata,*rdata_len,p2);
 	if (!p2) {
@@ -3125,7 +3010,7 @@
 	p += 2;
 
 	SIVAL(p,0,PTR_DIFF(p2,*rdata));
-	strlcpy(p2,lp_workgroup(),PTR_DIFF(endp,p2));	/* don't know.  login domain?? */
+	pstrcpy(p2,lp_workgroup());	/* don't know.  login domain?? */
 	p2 = skip_string(*rdata,*rdata_len,p2);
 	if (!p2) {
 		return False;
@@ -3133,7 +3018,7 @@
 	p += 4;
 
 	SIVAL(p,0,PTR_DIFF(p2,*rdata)); /* don't know */
-	strlcpy(p2,"",PTR_DIFF(endp,p2));
+	pstrcpy(p2,"");
 	p2 = skip_string(*rdata,*rdata_len,p2);
 	if (!p2) {
 		return False;
@@ -3175,7 +3060,7 @@
 
 where:
 
-  usri11_name specifies the user name for which information is retrieved
+  usri11_name specifies the user name for which information is retireved
 
   usri11_pad aligns the next data structure element to a word boundary
 
@@ -3317,7 +3202,7 @@
 #define AF_OP_ACCOUNTS  3
 
 
-static bool api_RNetUserGetInfo(connection_struct *conn, uint16 vuid,
+static BOOL api_RNetUserGetInfo(connection_struct *conn, uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -3330,7 +3215,6 @@
 	char *p = skip_string(param,tpscnt,UserName);
 	int uLevel = get_safe_SVAL(param,tpscnt,p,0,-1);
 	char *p2;
-	char *endp;
 	const char *level_string;
 
 	/* get NIS home of a previously validated user - simeon */
@@ -3338,7 +3222,7 @@
 	   Don't depend on vuser being non-null !!. JRA */
 	user_struct *vuser = get_valid_user_struct(vuid);
 	if(vuser != NULL) {
-		DEBUG(3,("  Username of UID %d is %s\n", (int)vuser->uid,
+		DEBUG(3,("  Username of UID %d is %s\n", (int)vuser->uid, 
 			vuser->user.unix_name));
 	}
 
@@ -3347,13 +3231,13 @@
 	}
 
 	*rparam_len = 6;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
 
 	DEBUG(4,("RNetUserGetInfo level=%d\n", uLevel));
-
+  
 	/* check it's a supported variant */
 	if (strcmp(str1,"zWrLh") != 0) {
 		return False;
@@ -3372,7 +3256,7 @@
 	}
 
 	*rdata_len = mdrcnt + 1024;
-	*rdata = smb_realloc_limit(*rdata,*rdata_len);
+	*rdata = SMB_REALLOC_LIMIT(*rdata,*rdata_len);
 	if (!*rdata) {
 		return False;
 	}
@@ -3381,13 +3265,12 @@
 	SSVAL(*rparam,2,0);		/* converter word */
 
 	p = *rdata;
-	endp = *rdata + *rdata_len;
 	p2 = get_safe_ptr(*rdata,*rdata_len,p,usri11_end);
 	if (!p2) {
 		return False;
 	}
 
-	memset(p,0,21);
+	memset(p,0,21); 
 	fstrcpy(p+usri11_name,UserName); /* 21 bytes - user name */
 
 	if (uLevel > 0) {
@@ -3397,14 +3280,14 @@
 
 	if (uLevel >= 10) {
 		SIVAL(p,usri11_comment,PTR_DIFF(p2,p)); /* comment */
-		strlcpy(p2,"Comment",PTR_DIFF(endp,p2));
+		pstrcpy(p2,"Comment");
 		p2 = skip_string(*rdata,*rdata_len,p2);
 		if (!p2) {
 			return False;
 		}
 
 		SIVAL(p,usri11_usr_comment,PTR_DIFF(p2,p)); /* user_comment */
-		strlcpy(p2,"UserComment",PTR_DIFF(endp,p2));
+		pstrcpy(p2,"UserComment");
 		p2 = skip_string(*rdata,*rdata_len,p2);
 		if (!p2) {
 			return False;
@@ -3412,7 +3295,7 @@
 
 		/* EEK! the cifsrap.txt doesn't have this in!!!! */
 		SIVAL(p,usri11_full_name,PTR_DIFF(p2,p)); /* full name */
-		strlcpy(p2,((vuser != NULL) ? vuser->user.full_name : UserName),PTR_DIFF(endp,p2));
+		pstrcpy(p2,((vuser != NULL) ? vuser->user.full_name : UserName));
 		p2 = skip_string(*rdata,*rdata_len,p2);
 		if (!p2) {
 			return False;
@@ -3425,13 +3308,13 @@
 		SIVAL(p,usri11_auth_flags,AF_OP_PRINT);		/* auth flags */
 		SIVALS(p,usri11_password_age,-1);		/* password age */
 		SIVAL(p,usri11_homedir,PTR_DIFF(p2,p)); /* home dir */
-		strlcpy(p2, vuser && vuser->homedir ? vuser->homedir : "",PTR_DIFF(endp,p2));
+		pstrcpy(p2, vuser && vuser->homedir ? vuser->homedir : "");
 		p2 = skip_string(*rdata,*rdata_len,p2);
 		if (!p2) {
 			return False;
 		}
 		SIVAL(p,usri11_parms,PTR_DIFF(p2,p)); /* parms */
-		strlcpy(p2,"",PTR_DIFF(endp,p2));
+		pstrcpy(p2,"");
 		p2 = skip_string(*rdata,*rdata_len,p2);
 		if (!p2) {
 			return False;
@@ -3441,7 +3324,7 @@
 		SSVALS(p,usri11_bad_pw_count,-1);	/* bad pw counts */
 		SSVALS(p,usri11_num_logons,-1);		/* num logons */
 		SIVAL(p,usri11_logon_server,PTR_DIFF(p2,p)); /* logon server */
-		strlcpy(p2,"\\\\*",PTR_DIFF(endp,p2));
+		pstrcpy(p2,"\\\\*");
 		p2 = skip_string(*rdata,*rdata_len,p2);
 		if (!p2) {
 			return False;
@@ -3449,7 +3332,7 @@
 		SSVAL(p,usri11_country_code,0);		/* country code */
 
 		SIVAL(p,usri11_workstations,PTR_DIFF(p2,p)); /* workstations */
-		strlcpy(p2,"",PTR_DIFF(endp,p2));
+		pstrcpy(p2,"");
 		p2 = skip_string(*rdata,*rdata_len,p2);
 		if (!p2) {
 			return False;
@@ -3476,7 +3359,7 @@
 		SSVAL(p,42,
 		conn->admin_user?USER_PRIV_ADMIN:USER_PRIV_USER);
 		SIVAL(p,44,PTR_DIFF(p2,*rdata)); /* home dir */
-		strlcpy(p2, vuser && vuser->homedir ? vuser->homedir : "",PTR_DIFF(endp,p2));
+		pstrcpy(p2, vuser && vuser->homedir ? vuser->homedir : "");
 		p2 = skip_string(*rdata,*rdata_len,p2);
 		if (!p2) {
 			return False;
@@ -3485,7 +3368,7 @@
 		*p2++ = 0;
 		SSVAL(p,52,0);		/* flags */
 		SIVAL(p,54,PTR_DIFF(p2,*rdata));		/* script_path */
-		strlcpy(p2,vuser && vuser->logon_script ? vuser->logon_script : "",PTR_DIFF(endp,p2));
+		pstrcpy(p2,vuser && vuser->logon_script ? vuser->logon_script : "");
 		p2 = skip_string(*rdata,*rdata_len,p2);
 		if (!p2) {
 			return False;
@@ -3493,14 +3376,14 @@
 		if (uLevel == 2) {
 			SIVAL(p,60,0);		/* auth_flags */
 			SIVAL(p,64,PTR_DIFF(p2,*rdata)); /* full_name */
-   			strlcpy(p2,((vuser != NULL) ? vuser->user.full_name : UserName),PTR_DIFF(endp,p2));
+   			pstrcpy(p2,((vuser != NULL) ? vuser->user.full_name : UserName));
 			p2 = skip_string(*rdata,*rdata_len,p2);
 			if (!p2) {
 				return False;
 			}
 			SIVAL(p,68,0);		/* urs_comment */
 			SIVAL(p,72,PTR_DIFF(p2,*rdata)); /* parms */
-			strlcpy(p2,"",PTR_DIFF(endp,p2));
+			pstrcpy(p2,"");
 			p2 = skip_string(*rdata,*rdata_len,p2);
 			if (!p2) {
 				return False;
@@ -3518,29 +3401,10 @@
 			SSVALS(p,104,-1);	/* num_logons */
 			SIVAL(p,106,PTR_DIFF(p2,*rdata)); /* logon_server */
 			{
-				TALLOC_CTX *ctx = talloc_tos();
-				int space_rem = *rdata_len - (p2 - *rdata);
-				char *tmp;
-
-				if (space_rem <= 0) {
-					return false;
-				}
-				tmp = talloc_strdup(ctx, "\\\\%L");
-				if (!tmp) {
-					return false;
-				}
-				tmp = talloc_sub_basic(ctx,
-						"",
-						"",
-						tmp);
-				if (!tmp) {
-					return false;
-				}
-
-				push_ascii(p2,
-					tmp,
-					space_rem,
-					STR_TERMINATE);
+				pstring tmp;
+				pstrcpy(tmp, "\\\\%L");
+				standard_sub_basic("", "", tmp, sizeof(tmp));
+				pstrcpy(p2, tmp);
 			}
 			p2 = skip_string(*rdata,*rdata_len,p2);
 			if (!p2) {
@@ -3558,7 +3422,7 @@
 	return(True);
 }
 
-static bool api_WWkstaUserLogon(connection_struct *conn,uint16 vuid,
+static BOOL api_WWkstaUserLogon(connection_struct *conn,uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -3602,7 +3466,7 @@
 		return False;
 	}
 	if (mdrcnt > 0) {
-		*rdata = smb_realloc_limit(*rdata,mdrcnt);
+		*rdata = SMB_REALLOC_LIMIT(*rdata,mdrcnt);
 		if (!*rdata) {
 			return False;
 		}
@@ -3644,7 +3508,7 @@
 
 	*rdata_len = desc.usedlen;
 	*rparam_len = 6;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -3661,7 +3525,7 @@
  api_WAccessGetUserPerms
 ****************************************************************************/
 
-static bool api_WAccessGetUserPerms(connection_struct *conn,uint16 vuid,
+static BOOL api_WAccessGetUserPerms(connection_struct *conn,uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -3691,7 +3555,7 @@
 	}
 
 	*rparam_len = 6;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -3706,7 +3570,7 @@
   api_WPrintJobEnumerate
   ****************************************************************************/
 
-static bool api_WPrintJobGetInfo(connection_struct *conn, uint16 vuid,
+static BOOL api_WPrintJobGetInfo(connection_struct *conn, uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -3763,7 +3627,7 @@
 	}
 
 	if (mdrcnt > 0) {
-		*rdata = smb_realloc_limit(*rdata,mdrcnt);
+		*rdata = SMB_REALLOC_LIMIT(*rdata,mdrcnt);
 		if (!*rdata) {
 			return False;
 		}
@@ -3789,7 +3653,7 @@
 	}
 
 	*rparam_len = 6;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -3805,7 +3669,7 @@
 	return True;
 }
 
-static bool api_WPrintJobEnumerate(connection_struct *conn, uint16 vuid,
+static BOOL api_WPrintJobEnumerate(connection_struct *conn, uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -3859,7 +3723,7 @@
 
 	count = print_queue_status(snum,&queue,&status);
 	if (mdrcnt > 0) {
-		*rdata = smb_realloc_limit(*rdata,mdrcnt);
+		*rdata = SMB_REALLOC_LIMIT(*rdata,mdrcnt);
 		if (!*rdata) {
 			return False;
 		}
@@ -3880,7 +3744,7 @@
 	*rdata_len = desc.usedlen;
 
 	*rparam_len = 8;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -3962,7 +3826,7 @@
 	}
 }
 
-static bool api_WPrintDestGetInfo(connection_struct *conn, uint16 vuid,
+static BOOL api_WPrintDestGetInfo(connection_struct *conn, uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -4007,7 +3871,7 @@
 		desc.neededlen = 0;
 	} else {
 		if (mdrcnt > 0) {
-			*rdata = smb_realloc_limit(*rdata,mdrcnt);
+			*rdata = SMB_REALLOC_LIMIT(*rdata,mdrcnt);
 			if (!*rdata) {
 				return False;
 			}
@@ -4028,7 +3892,7 @@
 	}
 
 	*rparam_len = 6;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -4042,7 +3906,7 @@
 	return True;
 }
 
-static bool api_WPrintDestEnum(connection_struct *conn, uint16 vuid,
+static BOOL api_WPrintDestEnum(connection_struct *conn, uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -4084,7 +3948,7 @@
 	}
 
 	if (mdrcnt > 0) {
-		*rdata = smb_realloc_limit(*rdata,mdrcnt);
+		*rdata = SMB_REALLOC_LIMIT(*rdata,mdrcnt);
 		if (!*rdata) {
 			return False;
 		}
@@ -4109,7 +3973,7 @@
 	*rdata_len = desc.usedlen;
 
 	*rparam_len = 8;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -4123,7 +3987,7 @@
 	return True;
 }
 
-static bool api_WPrintDriverEnum(connection_struct *conn, uint16 vuid,
+static BOOL api_WPrintDriverEnum(connection_struct *conn, uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -4156,7 +4020,7 @@
 	}
 
 	if (mdrcnt > 0) {
-		*rdata = smb_realloc_limit(*rdata,mdrcnt);
+		*rdata = SMB_REALLOC_LIMIT(*rdata,mdrcnt);
 		if (!*rdata) {
 			return False;
 		}
@@ -4172,7 +4036,7 @@
 	*rdata_len = desc.usedlen;
 
 	*rparam_len = 8;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -4186,7 +4050,7 @@
 	return True;
 }
 
-static bool api_WPrintQProcEnum(connection_struct *conn, uint16 vuid,
+static BOOL api_WPrintQProcEnum(connection_struct *conn, uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -4218,7 +4082,7 @@
 	}
 
 	if (mdrcnt > 0) {
-		*rdata = smb_realloc_limit(*rdata,mdrcnt);
+		*rdata = SMB_REALLOC_LIMIT(*rdata,mdrcnt);
 		if (!*rdata) {
 			return False;
 		}
@@ -4235,7 +4099,7 @@
 	*rdata_len = desc.usedlen;
 
 	*rparam_len = 8;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -4249,7 +4113,7 @@
 	return True;
 }
 
-static bool api_WPrintPortEnum(connection_struct *conn, uint16 vuid,
+static BOOL api_WPrintPortEnum(connection_struct *conn, uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -4282,7 +4146,7 @@
 	}
 
 	if (mdrcnt > 0) {
-		*rdata = smb_realloc_limit(*rdata,mdrcnt);
+		*rdata = SMB_REALLOC_LIMIT(*rdata,mdrcnt);
 		if (!*rdata) {
 			return False;
 		}
@@ -4300,7 +4164,7 @@
 	*rdata_len = desc.usedlen;
 
 	*rparam_len = 8;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -4318,7 +4182,7 @@
  List open sessions
  ****************************************************************************/
 
-static bool api_RNetSessionEnum(connection_struct *conn, uint16 vuid,
+static BOOL api_RNetSessionEnum(connection_struct *conn, uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt,int mprcnt,
@@ -4331,7 +4195,7 @@
 	char *p = skip_string(param,tpscnt,str2);
 	int uLevel;
 	struct pack_desc desc;
-	struct sessionid *session_list;
+	struct sessionid *session_list = NULL;
 	int i, num_sessions;
 
 	if (!str1 || !str2 || !p) {
@@ -4354,11 +4218,12 @@
 		return False;
 	}
 
-	num_sessions = list_sessions(talloc_tos(), &session_list);
+	num_sessions = list_sessions(&session_list);
 
 	if (mdrcnt > 0) {
-		*rdata = smb_realloc_limit(*rdata,mdrcnt);
+		*rdata = SMB_REALLOC_LIMIT(*rdata,mdrcnt);
 		if (!*rdata) {
+			SAFE_FREE(session_list);
 			return False;
 		}
 	}
@@ -4367,6 +4232,7 @@
 	desc.buflen = mdrcnt;
 	desc.format = str2;
 	if (!init_package(&desc,num_sessions,0)) {
+		SAFE_FREE(session_list);
 		return False;
 	}
 
@@ -4385,8 +4251,9 @@
 	*rdata_len = desc.usedlen;
 
 	*rparam_len = 8;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
+		SAFE_FREE(session_list);
 		return False;
 	}
 	SSVALS(*rparam,0,desc.errcode);
@@ -4395,6 +4262,7 @@
 
 	DEBUG(4,("RNetSessionEnum: errorcode %d\n",desc.errcode));
 
+	SAFE_FREE(session_list);
 	return True;
 }
 
@@ -4403,13 +4271,13 @@
  The buffer was too small.
  ****************************************************************************/
 
-static bool api_TooSmall(connection_struct *conn,uint16 vuid, char *param, char *data,
+static BOOL api_TooSmall(connection_struct *conn,uint16 vuid, char *param, char *data,
 			 int mdrcnt, int mprcnt,
 			 char **rdata, char **rparam,
 			 int *rdata_len, int *rparam_len)
 {
 	*rparam_len = MIN(*rparam_len,mprcnt);
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -4427,7 +4295,7 @@
  The request is not supported.
  ****************************************************************************/
 
-static bool api_Unsupported(connection_struct *conn, uint16 vuid,
+static BOOL api_Unsupported(connection_struct *conn, uint16 vuid,
 				char *param, int tpscnt,
 				char *data, int tdscnt,
 				int mdrcnt, int mprcnt,
@@ -4435,7 +4303,7 @@
 				int *rdata_len, int *rparam_len)
 {
 	*rparam_len = 4;
-	*rparam = smb_realloc_limit(*rparam,*rparam_len);
+	*rparam = SMB_REALLOC_LIMIT(*rparam,*rparam_len);
 	if (!*rparam) {
 		return False;
 	}
@@ -4453,11 +4321,11 @@
 static const struct {
 	const char *name;
 	int id;
-	bool (*fn)(connection_struct *, uint16,
+	BOOL (*fn)(connection_struct *, uint16,
 			char *, int,
 			char *, int,
 			int,int,char **,char **,int *,int *);
-	bool auth_user;		/* Deny anonymous access? */
+	BOOL auth_user;		/* Deny anonymous access? */
 } api_commands[] = {
 	{"RNetShareEnum",	RAP_WshareEnum,		api_RNetShareEnum, True},
 	{"RNetShareGetInfo",	RAP_WshareGetInfo,	api_RNetShareGetInfo},
@@ -4501,14 +4369,11 @@
 
 
 /****************************************************************************
- Handle remote api calls.
-****************************************************************************/
+ Handle remote api calls
+ ****************************************************************************/
 
-void api_reply(connection_struct *conn, uint16 vuid,
-	       struct smb_request *req,
-	       char *data, char *params,
-	       int tdscnt, int tpscnt,
-	       int mdrcnt, int mprcnt)
+int api_reply(connection_struct *conn,uint16 vuid,char *outbuf,char *data,char *params,
+		     int tdscnt,int tpscnt,int mdrcnt,int mprcnt)
 {
 	int api_command;
 	char *rdata = NULL;
@@ -4517,18 +4382,16 @@
 	const char *name2 = NULL;
 	int rdata_len = 0;
 	int rparam_len = 0;
-	bool reply=False;
+	BOOL reply=False;
 	int i;
 
 	if (!params) {
 		DEBUG(0,("ERROR: NULL params in api_reply()\n"));
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
+		return 0;
 	}
 
 	if (tpscnt < 2) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
+		return 0;
 	}
 	api_command = SVAL(params,0);
 	/* Is there a string at position params+2 ? */
@@ -4561,8 +4424,7 @@
 		user_struct *user = get_valid_user_struct(vuid);
 
 		if (!user || user->guest) {
-			reply_nterror(req, NT_STATUS_ACCESS_DENIED);
-			return;
+			return ERROR_NT(NT_STATUS_ACCESS_DENIED);
 		}
 	}
 
@@ -4580,8 +4442,7 @@
 		DEBUG(0,("api_reply: malloc fail !\n"));
 		SAFE_FREE(rdata);
 		SAFE_FREE(rparam);
-		reply_nterror(req, NT_STATUS_NO_MEMORY);
-		return;
+		return -1;
 	}
 
 	reply = api_commands[i].fn(conn,
@@ -4605,11 +4466,10 @@
 
 	/* If api_Unsupported returns false we can't return anything. */
 	if (reply) {
-		send_trans_reply(conn, req, rparam, rparam_len,
-				 rdata, rdata_len, False);
+		send_trans_reply(outbuf, rparam, rparam_len, rdata, rdata_len, False);
 	}
 
 	SAFE_FREE(rdata);
 	SAFE_FREE(rparam);
-	return;
+	return -1;
 }

Modified: branches/samba/upstream/source/smbd/mangle.c
===================================================================
--- branches/samba/upstream/source/smbd/mangle.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/mangle.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,20 +1,21 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    Name mangling interface
    Copyright (C) Andrew Tridgell 2002
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -80,7 +81,7 @@
 /*
   see if a filename has come out of our mangling code
 */
-bool mangle_is_mangled(const char *s, const struct share_params *p)
+BOOL mangle_is_mangled(const char *s, const struct share_params *p)
 {
 	return mangle_fns->is_mangled(s, p);
 }
@@ -88,65 +89,47 @@
 /*
   see if a filename matches the rules of a 8.3 filename
 */
-bool mangle_is_8_3(const char *fname, bool check_case,
+BOOL mangle_is_8_3(const char *fname, BOOL check_case,
 		   const struct share_params *p)
 {
 	return mangle_fns->is_8_3(fname, check_case, False, p);
 }
 
-bool mangle_is_8_3_wildcards(const char *fname, bool check_case,
+BOOL mangle_is_8_3_wildcards(const char *fname, BOOL check_case,
 			     const struct share_params *p)
 {
 	return mangle_fns->is_8_3(fname, check_case, True, p);
 }
 
-bool mangle_must_mangle(const char *fname,
-		   const struct share_params *p)
-{
-	if (!lp_manglednames(p)) {
-		return False;
-	}
-	return mangle_fns->must_mangle(fname, p);
-}
-
 /*
-  try to reverse map a 8.3 name to the original filename. This doesn't have to
+  try to reverse map a 8.3 name to the original filename. This doesn't have to 
   always succeed, as the directory handling code in smbd will scan the directory
   looking for a matching name if it doesn't. It should succeed most of the time
   or there will be a huge performance penalty
 */
-bool mangle_lookup_name_from_8_3(TALLOC_CTX *ctx,
-			const char *in,
-			char **out, /* talloced on the given context. */
+BOOL mangle_check_cache(char *s, size_t maxlen,
 			const struct share_params *p)
 {
-	return mangle_fns->lookup_name_from_8_3(ctx, in, out, p);
+	return mangle_fns->check_cache(s, maxlen, p);
 }
 
-/*
-   mangle a long filename to a 8.3 name.
-   Return True if we did mangle the name (ie. out is filled in).
-   False on error.
-   JRA.
+/* 
+   map a long filename to a 8.3 name. 
  */
 
-bool name_to_8_3(const char *in,
-		char out[13],
-		bool cache83,
+void mangle_map(pstring OutName, BOOL need83, BOOL cache83,
 		const struct share_params *p)
 {
-	memset(out,'\0',13);
-
 	/* name mangling can be disabled for speed, in which case
 	   we just truncate the string */
 	if (!lp_manglednames(p)) {
-		safe_strcpy(out,in,12);
-		return True;
+		if (need83) {
+			string_truncate(OutName, 12);
+		}
+		return;
 	}
 
-	return mangle_fns->name_to_8_3(in,
-				out,
-				cache83,
-				lp_defaultcase(p->service),
-				p);
+	/* invoke the inane "mangled map" code */
+	mangle_map_filename(OutName, p);
+	mangle_fns->name_map(OutName, need83, cache83, lp_defaultcase(p->service), p);
 }

Modified: branches/samba/upstream/source/smbd/mangle_hash.c
===================================================================
--- branches/samba/upstream/source/smbd/mangle_hash.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/mangle_hash.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,23 +1,23 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    Name mangling
    Copyright (C) Andrew Tridgell 1992-2002
    Copyright (C) Simo Sorce 2001
    Copyright (C) Andrew Bartlett 2002
-   Copyright (C) Jeremy Allison 2007
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -52,12 +52,13 @@
  *
  */
 
-static char magic_char = '~';
+char magic_char = '~';
 
-static const char basechars[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_-!@#$%";
+static char basechars[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_-!@#$%";
 #define MANGLE_BASE       (sizeof(basechars)/sizeof(char)-1)
 
-static unsigned char *chartest;
+static unsigned char chartest[256]  = { 0 };
+static BOOL          ct_initialized = False;
 
 #define mangle(V) ((char)(basechars[(V) % MANGLE_BASE]))
 #define BASECHAR_MASK 0xf0
@@ -67,7 +68,7 @@
 
 /* -------------------------------------------------------------------- */
 
-static NTSTATUS has_valid_83_chars(const smb_ucs2_t *s, bool allow_wildcards)
+static NTSTATUS has_valid_83_chars(const smb_ucs2_t *s, BOOL allow_wildcards)
 {
 	if (!*s) {
 		return NT_STATUS_INVALID_PARAMETER;
@@ -87,7 +88,7 @@
 	return NT_STATUS_OK;
 }
 
-static NTSTATUS has_illegal_chars(const smb_ucs2_t *s, bool allow_wildcards)
+static NTSTATUS has_illegal_chars(const smb_ucs2_t *s, BOOL allow_wildcards)
 {
 	if (!allow_wildcards && ms_has_wild_w(s)) {
 		return NT_STATUS_UNSUCCESSFUL;
@@ -116,7 +117,7 @@
  */
 
 static NTSTATUS mangle_get_prefix(const smb_ucs2_t *ucs2_string, smb_ucs2_t **prefix,
-		smb_ucs2_t **extension, bool allow_wildcards)
+		smb_ucs2_t **extension, BOOL allow_wildcards)
 {
 	size_t ext_len;
 	smb_ucs2_t *p;
@@ -154,7 +155,7 @@
  * ************************************************************************** **
  */
 
-static NTSTATUS is_valid_name(const smb_ucs2_t *fname, bool allow_wildcards, bool only_8_3)
+static NTSTATUS is_valid_name(const smb_ucs2_t *fname, BOOL allow_wildcards, BOOL only_8_3)
 {
 	smb_ucs2_t *str, *p;
 	size_t num_ucs2_chars;
@@ -233,7 +234,7 @@
 	return ret;
 }
 
-static NTSTATUS is_8_3_w(const smb_ucs2_t *fname, bool allow_wildcards)
+static NTSTATUS is_8_3_w(const smb_ucs2_t *fname, BOOL allow_wildcards)
 {
 	smb_ucs2_t *pref = 0, *ext = 0;
 	size_t plen;
@@ -244,14 +245,14 @@
 
 	if (strlen_w(fname) > 12)
 		return NT_STATUS_UNSUCCESSFUL;
-
+	
 	if (strcmp_wa(fname, ".") == 0 || strcmp_wa(fname, "..") == 0)
 		return NT_STATUS_OK;
 
 	/* Name cannot start with '.' */
 	if (*fname == UCS2_CHAR('.'))
 		return NT_STATUS_UNSUCCESSFUL;
-
+	
 	if (!NT_STATUS_IS_OK(is_valid_name(fname, allow_wildcards, True)))
 		goto done;
 
@@ -274,7 +275,7 @@
 	return ret;
 }
 
-static bool is_8_3(const char *fname, bool check_case, bool allow_wildcards,
+static BOOL is_8_3(const char *fname, BOOL check_case, BOOL allow_wildcards,
 		   const struct share_params *p)
 {
 	const char *f;
@@ -293,7 +294,7 @@
 
 	if (strlen(f) > 12)
 		return False;
-
+	
 	size = push_ucs2_allocate(&ucs2name, f);
 	if (size == (size_t)-1) {
 		DEBUG(0,("is_8_3: internal error push_ucs2_allocate() failed!\n"));
@@ -305,13 +306,15 @@
 done:
 	SAFE_FREE(ucs2name);
 
-	if (!NT_STATUS_IS_OK(ret)) {
+	if (!NT_STATUS_IS_OK(ret)) { 
 		return False;
 	}
-
+	
 	return True;
 }
 
+
+
 /* -------------------------------------------------------------------------- **
  * Functions...
  */
@@ -328,18 +331,17 @@
  *
  * ************************************************************************** **
  */
-
 static void init_chartest( void )
 {
 	const unsigned char *s;
+  
+	memset( (char *)chartest, '\0', 256 );
 
-	chartest = SMB_MALLOC_ARRAY(unsigned char, 256);
-
-	SMB_ASSERT(chartest != NULL);
-
 	for( s = (const unsigned char *)basechars; *s; s++ ) {
 		chartest[*s] |= BASECHAR_MASK;
 	}
+
+	ct_initialized = True;
 }
 
 /* ************************************************************************** **
@@ -359,16 +361,14 @@
  *
  * ************************************************************************** **
  */
-
-static bool is_mangled(const char *s, const struct share_params *p)
+static BOOL is_mangled(const char *s, const struct share_params *p)
 {
 	char *magic;
 
 	magic_char = lp_magicchar(p);
 
-	if (chartest == NULL) {
+	if( !ct_initialized )
 		init_chartest();
-	}
 
 	magic = strchr_m( s, magic_char );
 	while( magic && magic[1] && magic[2] ) {         /* 3 chars, 1st is magic. */
@@ -407,8 +407,7 @@
   crh 07-Apr-1998
 **************************************************************************/
 
-static void cache_mangled_name( const char mangled_name[13],
-				const char *raw_name )
+static void cache_mangled_name( const char mangled_name[13], char *raw_name )
 {
 	TDB_DATA data_val;
 	char mangled_name_key[13];
@@ -438,7 +437,8 @@
 	}
 
 	/* Allocate a new cache entry.  If the allocation fails, just return. */
-	data_val = string_term_tdb_data(raw_name);
+	data_val.dptr = raw_name;
+	data_val.dsize = strlen(raw_name)+1;
 	if (tdb_store_bystring(tdb_mangled_cache, mangled_name_key, data_val, TDB_REPLACE) != 0) {
 		DEBUG(0,("cache_mangled_name: Error storing entry %s -> %s\n", mangled_name_key, raw_name));
 	} else {
@@ -461,37 +461,30 @@
  * ************************************************************************** **
  */
 
-static bool lookup_name_from_8_3(TALLOC_CTX *ctx,
-				const char *in,
-				char **out, /* talloced on the given context. */
-				const struct share_params *p)
+static BOOL check_cache( char *s, size_t maxlen, const struct share_params *p )
 {
 	TDB_DATA data_val;
+	char *ext_start = NULL;
 	char *saved_ext = NULL;
-	char *s = talloc_strdup(ctx, in);
 
 	magic_char = lp_magicchar(p);
 
 	/* If the cache isn't initialized, give up. */
-	if(!s || !tdb_mangled_cache ) {
-		TALLOC_FREE(s);
-		return False;
-	}
+	if( !tdb_mangled_cache )
+		return( False );
 
 	data_val = tdb_fetch_bystring(tdb_mangled_cache, s);
 
 	/* If we didn't find the name *with* the extension, try without. */
 	if(data_val.dptr == NULL || data_val.dsize == 0) {
-		char *ext_start = strrchr( s, '.' );
+		ext_start = strrchr( s, '.' );
 		if( ext_start ) {
-			if((saved_ext = talloc_strdup(ctx,ext_start)) == NULL) {
-				TALLOC_FREE(s);
+			if((saved_ext = SMB_STRDUP(ext_start)) == NULL)
 				return False;
-			}
 
 			*ext_start = '\0';
 			data_val = tdb_fetch_bystring(tdb_mangled_cache, s);
-			/*
+			/* 
 			 * At this point s is the name without the
 			 * extension. We re-add the extension if saved_ext
 			 * is not null, before freeing saved_ext.
@@ -501,32 +494,31 @@
 
 	/* Okay, if we haven't found it we're done. */
 	if(data_val.dptr == NULL || data_val.dsize == 0) {
-		TALLOC_FREE(saved_ext);
-		TALLOC_FREE(s);
-		return False;
+		if(saved_ext) {
+			/* Replace the saved_ext as it was truncated. */
+			(void)safe_strcat( s, saved_ext, maxlen );
+			SAFE_FREE(saved_ext);
+		}
+		return( False );
 	}
 
-	/* If we *did* find it, we need to talloc it on the given ctx. */
-	if (saved_ext) {
-		*out = talloc_asprintf(ctx, "%s%s",
-					(char *)data_val.dptr,
-					saved_ext);
-	} else {
-		*out = talloc_strdup(ctx, (char *)data_val.dptr);
+	/* If we *did* find it, we need to copy it into the string buffer. */
+	(void)safe_strcpy( s, data_val.dptr, maxlen );
+	if( saved_ext ) {
+		/* Replace the saved_ext as it was truncated. */
+		(void)safe_strcat( s, saved_ext, maxlen );
+		SAFE_FREE(saved_ext);
 	}
-
-	TALLOC_FREE(s);
-	TALLOC_FREE(saved_ext);
 	SAFE_FREE(data_val.dptr);
-
-	return *out ? True : False;
+	return( True );
 }
 
 /*****************************************************************************
- Do the actual mangling to 8.3 format.
-*****************************************************************************/
-
-static bool to_8_3(const char *in, char out[13], int default_case)
+ * do the actual mangling to 8.3 format
+ * the buffer must be able to hold 13 characters (including the null)
+ *****************************************************************************
+ */
+static void to_8_3(char *s, int default_case)
 {
 	int csum;
 	char *p;
@@ -534,18 +526,13 @@
 	char base[9];
 	int baselen = 0;
 	int extlen = 0;
-	char *s = SMB_STRDUP(in);
 
 	extension[0] = 0;
 	base[0] = 0;
 
-	if (!s) {
-		return False;
-	}
-
-	p = strrchr(s,'.');
+	p = strrchr(s,'.');  
 	if( p && (strlen(p+1) < (size_t)4) ) {
-		bool all_normal = ( strisnormal(p+1, default_case) ); /* XXXXXXXXX */
+		BOOL all_normal = ( strisnormal(p+1, default_case) ); /* XXXXXXXXX */
 
 		if( all_normal && p[1] != 0 ) {
 			*p = 0;
@@ -572,7 +559,7 @@
 			extension[extlen] = 0;
 		}
 	}
-
+  
 	p = s;
 
 	while( *p && baselen < 5 ) {
@@ -582,88 +569,79 @@
 		p++;
 	}
 	base[baselen] = 0;
-
+  
 	csum = csum % (MANGLE_BASE*MANGLE_BASE);
-
-	memcpy(out, base, baselen);
-	out[baselen] = magic_char;
-	out[baselen+1] = mangle( csum/MANGLE_BASE );
-	out[baselen+2] = mangle( csum );
-
+  
+	(void)slprintf(s, 12, "%s%c%c%c",
+		base, magic_char, mangle( csum/MANGLE_BASE ), mangle( csum ) );
+  
 	if( *extension ) {
-		out[baselen+3] = '.';
-		safe_strcpy(&out[baselen+4], extension, 3);
+		(void)pstrcat( s, "." );
+		(void)pstrcat( s, extension );
 	}
-
-	SAFE_FREE(s);
-	return True;
 }
 
-static bool must_mangle(const char *name,
-			const struct share_params *p)
-{
-	smb_ucs2_t *name_ucs2 = NULL;
-	NTSTATUS status;
-	magic_char = lp_magicchar(p);
-
-	if (push_ucs2_allocate(&name_ucs2, name) == (size_t)-1) {
-		DEBUG(0, ("push_ucs2_allocate failed!\n"));
-		return False;
-	}
-	status = is_valid_name(name_ucs2, False, False);
-	SAFE_FREE(name_ucs2);
-	return NT_STATUS_IS_OK(status);
-}
-
 /*****************************************************************************
  * Convert a filename to DOS format.  Return True if successful.
- *  Input:  in        Incoming name.
  *
- *          out       8.3 DOS name.
+ *  Input:  OutName - Source *and* destination buffer. 
  *
+ *                    NOTE that OutName must point to a memory space that
+ *                    is at least 13 bytes in size!
+ *
+ *          need83  - If False, name mangling will be skipped unless the
+ *                    name contains illegal characters.  Mapping will still
+ *                    be done, if appropriate.  This is probably used to
+ *                    signal that a client does not require name mangling,
+ *                    thus skipping the name mangling even on shares which
+ *                    have name-mangling turned on.
  *          cache83 - If False, the mangled name cache will not be updated.
  *                    This is usually used to prevent that we overwrite
  *                    a conflicting cache entry prematurely, i.e. before
  *                    we know whether the client is really interested in the
  *                    current name.  (See PR#13758).  UKD.
  *
+ *  Output: Returns False only if the name wanted mangling but the share does
+ *          not have name mangling turned on.
+ *
  * ****************************************************************************
  */
 
-static bool hash_name_to_8_3(const char *in,
-			char out[13],
-			bool cache83,
-			int default_case,
-			const struct share_params *p)
+static void name_map(char *OutName, BOOL need83, BOOL cache83,
+		     int default_case, const struct share_params *p)
 {
-	smb_ucs2_t *in_ucs2 = NULL;
+	smb_ucs2_t *OutName_ucs2;
 	magic_char = lp_magicchar(p);
 
-	DEBUG(5,("hash_name_to_8_3( %s, cache83 = %s)\n", in,
-		 cache83 ? "True" : "False"));
-
-	if (push_ucs2_allocate(&in_ucs2, in) == (size_t)-1) {
+	DEBUG(5,("name_map( %s, need83 = %s, cache83 = %s)\n", OutName,
+		 need83 ? "True" : "False", cache83 ? "True" : "False"));
+	
+	if (push_ucs2_allocate(&OutName_ucs2, OutName) == (size_t)-1) {
 		DEBUG(0, ("push_ucs2_allocate failed!\n"));
-		return False;
+		return;
 	}
 
-	/* If it's already 8.3, just copy. */
-	if (NT_STATUS_IS_OK(is_valid_name(in_ucs2, False, False)) &&
-				NT_STATUS_IS_OK(is_8_3_w(in_ucs2, False))) {
-		SAFE_FREE(in_ucs2);
-		safe_strcpy(out, in, 12);
-		return True;
-	}
+	if( !need83 && !NT_STATUS_IS_OK(is_valid_name(OutName_ucs2, False, False)))
+		need83 = True;
 
-	SAFE_FREE(in_ucs2);
-	if (!to_8_3(in, out, default_case)) {
-		return False;
-	}
+	/* check if it's already in 8.3 format */
+	if (need83 && !NT_STATUS_IS_OK(is_8_3_w(OutName_ucs2, False))) {
+		char *tmp = NULL; 
 
-	cache_mangled_name(out, in);
+		/* mangle it into 8.3 */
+		if (cache83)
+			tmp = SMB_STRDUP(OutName);
 
-	DEBUG(5,("hash_name_to_8_3(%s) ==> [%s]\n", in, out));
-	return True;
+		to_8_3(OutName, default_case);
+
+		if(tmp != NULL) {
+			cache_mangled_name(OutName, tmp);
+			SAFE_FREE(tmp);
+		}
+	}
+
+	DEBUG(5,("name_map() ==> [%s]\n", OutName));
+	SAFE_FREE(OutName_ucs2);
 }
 
 /*
@@ -673,10 +651,9 @@
 static struct mangle_fns mangle_fns = {
 	mangle_reset,
 	is_mangled,
-	must_mangle,
 	is_8_3,
-	lookup_name_from_8_3,
-	hash_name_to_8_3
+	check_cache,
+	name_map
 };
 
 /* return the methods for this mangling implementation */

Modified: branches/samba/upstream/source/smbd/mangle_hash2.c
===================================================================
--- branches/samba/upstream/source/smbd/mangle_hash2.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/mangle_hash2.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /*
@@ -93,6 +94,15 @@
 */
 static unsigned mangle_prefix;
 
+/* we will use a very simple direct mapped prefix cache. The big
+   advantage of this cache structure is speed and low memory usage 
+
+   The cache is indexed by the low-order bits of the hash, and confirmed by
+   hashing the resulting cache entry to match the known hash
+*/
+static char **prefix_cache;
+static unsigned int *prefix_cache_hashes;
+
 /* these are the characters we use in the 8.3 hash. Must be 36 chars long */
 static const char *basechars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
 static unsigned char base_reverse[256];
@@ -138,39 +148,56 @@
 	return value & ~0x80000000;  
 }
 
+/* 
+   initialise (ie. allocate) the prefix cache
+ */
+static BOOL cache_init(void)
+{
+	if (prefix_cache) {
+		return True;
+	}
+
+	prefix_cache = SMB_CALLOC_ARRAY(char *,MANGLE_CACHE_SIZE);
+	if (!prefix_cache) {
+		return False;
+	}
+
+	prefix_cache_hashes = SMB_CALLOC_ARRAY(unsigned int, MANGLE_CACHE_SIZE);
+	if (!prefix_cache_hashes) {
+		return False;
+	}
+
+	return True;
+}
+
 /*
   insert an entry into the prefix cache. The string might not be null
   terminated */
 static void cache_insert(const char *prefix, int length, unsigned int hash)
 {
-	char *str = SMB_STRNDUP(prefix, length);
+	int i = hash % MANGLE_CACHE_SIZE;
 
-	if (str == NULL) {
-		return;
+	if (prefix_cache[i]) {
+		free(prefix_cache[i]);
 	}
 
-	memcache_add(smbd_memcache(), MANGLE_HASH2_CACHE,
-		     data_blob_const(&hash, sizeof(hash)),
-		     data_blob_const(str, length+1));
-	SAFE_FREE(str);
+	prefix_cache[i] = SMB_STRNDUP(prefix, length);
+	prefix_cache_hashes[i] = hash;
 }
 
 /*
   lookup an entry in the prefix cache. Return NULL if not found.
 */
-static char *cache_lookup(TALLOC_CTX *mem_ctx, unsigned int hash)
+static const char *cache_lookup(unsigned int hash)
 {
-	DATA_BLOB value;
+	int i = hash % MANGLE_CACHE_SIZE;
 
-	if (!memcache_lookup(smbd_memcache(), MANGLE_HASH2_CACHE,
-			     data_blob_const(&hash, sizeof(hash)), &value)) {
+	if (!prefix_cache[i] || hash != prefix_cache_hashes[i]) {
 		return NULL;
 	}
 
-	SMB_ASSERT((value.length > 0)
-		   && (value.data[value.length-1] == '\0'));
-
-	return talloc_strdup(mem_ctx, (char *)value.data);
+	/* yep, it matched */
+	return prefix_cache[i];
 }
 
 
@@ -181,7 +208,7 @@
    In this algorithm, mangled names use only pure ascii characters (no
    multi-byte) so we can avoid doing a UCS2 conversion 
  */
-static bool is_mangled_component(const char *name, size_t len)
+static BOOL is_mangled_component(const char *name, size_t len)
 {
 	unsigned int i;
 
@@ -241,7 +268,7 @@
    directory separators. It should return true if any component is
    mangled
  */
-static bool is_mangled(const char *name, const struct share_params *parm)
+static BOOL is_mangled(const char *name, const struct share_params *parm)
 {
 	const char *p;
 	const char *s;
@@ -266,7 +293,7 @@
    simplifies things greatly (it means that we know the string won't
    get larger when converted from UNIX to DOS formats)
 */
-static bool is_8_3(const char *name, bool check_case, bool allow_wildcards, const struct share_params *p)
+static BOOL is_8_3(const char *name, BOOL check_case, BOOL allow_wildcards, const struct share_params *p)
 {
 	int len, i;
 	char *dot_p;
@@ -341,23 +368,18 @@
 
 /*
   try to find a 8.3 name in the cache, and if found then
-  replace the string with the original long name.
+  replace the string with the original long name. 
 */
-static bool lookup_name_from_8_3(TALLOC_CTX *ctx,
-			const char *name,
-			char **pp_out, /* talloced on the given context. */
-			const struct share_params *p)
+static BOOL check_cache(char *name, size_t maxlen, const struct share_params *p)
 {
 	unsigned int hash, multiplier;
 	unsigned int i;
-	char *prefix;
+	const char *prefix;
 	char extension[4];
 
-	*pp_out = NULL;
-
 	/* make sure that this is a mangled name from this cache */
 	if (!is_mangled(name, p)) {
-		M_DEBUG(10,("lookup_name_from_8_3: %s -> not mangled\n", name));
+		M_DEBUG(10,("check_cache: %s -> not mangled\n", name));
 		return False;
 	}
 
@@ -370,10 +392,9 @@
 	}
 
 	/* now look in the prefix cache for that hash */
-	prefix = cache_lookup(ctx, hash);
+	prefix = cache_lookup(hash);
 	if (!prefix) {
-		M_DEBUG(10,("lookup_name_from_8_3: %s -> %08X -> not found\n",
-					name, hash));
+		M_DEBUG(10,("check_cache: %s -> %08X -> not found\n", name, hash));
 		return False;
 	}
 
@@ -386,28 +407,21 @@
 	}
 
 	if (extension[0]) {
-		M_DEBUG(10,("lookup_name_from_8_3: %s -> %s.%s\n",
-					name, prefix, extension));
-		*pp_out = talloc_asprintf(ctx, "%s.%s", prefix, extension);
+		M_DEBUG(10,("check_cache: %s -> %s.%s\n", name, prefix, extension));
+		slprintf(name, maxlen, "%s.%s", prefix, extension);
 	} else {
-		M_DEBUG(10,("lookup_name_from_8_3: %s -> %s\n", name, prefix));
-		*pp_out = talloc_strdup(ctx, prefix);
+		M_DEBUG(10,("check_cache: %s -> %s\n", name, prefix));
+		safe_strcpy(name, prefix, maxlen);
 	}
 
-	TALLOC_FREE(prefix);
-
-	if (!*pp_out) {
-		M_DEBUG(0,("talloc_fail"));
-		return False;
-	}
-
 	return True;
 }
 
+
 /*
   look for a DOS reserved name
 */
-static bool is_reserved_name(const char *name)
+static BOOL is_reserved_name(const char *name)
 {
 	if (FLAG_CHECK(name[0], FLAG_POSSIBLE1) &&
 	    FLAG_CHECK(name[1], FLAG_POSSIBLE2) &&
@@ -434,10 +448,10 @@
  A filename ending in ' ' is not legal either. See bug id #2769.
 */
 
-static bool is_legal_name(const char *name)
+static BOOL is_legal_name(const char *name)
 {
 	const char *dot_pos = NULL;
-	bool alldots = True;
+	BOOL alldots = True;
 	size_t numdots = 0;
 
 	while (*name) {
@@ -485,27 +499,18 @@
 	return True;
 }
 
-static bool must_mangle(const char *name,
-			const struct share_params *p)
-{
-	if (is_reserved_name(name)) {
-		return True;
-	}
-	return !is_legal_name(name);
-}
-
 /*
   the main forward mapping function, which converts a long filename to 
   a 8.3 name
 
+  if need83 is not set then we only do the mangling if the name is illegal
+  as a long name
+
   if cache83 is not set then we don't cache the result
 
+  the name parameter must be able to hold 13 bytes
 */
-static bool hash2_name_to_8_3(const char *name,
-			char new_name[13],
-			bool cache83,
-			int default_case,
-			const struct share_params *p)
+static void name_map(fstring name, BOOL need83, BOOL cache83, int default_case, const struct share_params *p)
 {
 	char *dot_p;
 	char lead_chars[7];
@@ -513,15 +518,21 @@
 	unsigned int extension_length, i;
 	unsigned int prefix_len;
 	unsigned int hash, v;
+	char new_name[13];
 
 	/* reserved names are handled specially */
 	if (!is_reserved_name(name)) {
-		/* if the name is already a valid 8.3 name then we don't need to
-		 * change anything */
-		if (is_legal_name(name) && is_8_3(name, False, False, p)) {
-			safe_strcpy(new_name, name, 12);
-			return True;
+		/* if the name is already a valid 8.3 name then we don't need to 
+		   do anything */
+		if (is_8_3(name, False, False, p)) {
+			return;
 		}
+
+		/* if the caller doesn't strictly need 8.3 then just check for illegal 
+		   filenames */
+		if (!need83 && is_legal_name(name)) {
+			return;
+		}
 	}
 
 	/* find the '.' if any */
@@ -537,9 +548,7 @@
 				break;
 			}
 		}
-		if (i == 0 || i == 4) {
-			dot_p = NULL;
-		}
+		if (i == 0 || i == 4) dot_p = NULL;
 	}
 
 	/* the leading characters in the mangled name is taken from
@@ -571,12 +580,11 @@
 		for (i=1; extension_length < 3 && dot_p[i]; i++) {
 			char c = dot_p[i];
 			if (FLAG_CHECK(c, FLAG_ASCII)) {
-				extension[extension_length++] =
-					toupper_ascii(c);
+				extension[extension_length++] = toupper_ascii(c);
 			}
 		}
 	}
-
+	   
 	/* find the hash for this prefix */
 	v = hash = mangle_hash(name, prefix_len);
 
@@ -585,7 +593,7 @@
 		new_name[i] = lead_chars[i];
 	}
 	new_name[7] = base_forward(v % 36);
-	new_name[6] = '~';
+	new_name[6] = '~';	
 	for (i=5; i>=mangle_prefix; i--) {
 		v = v / 36;
 		new_name[i] = base_forward(v % 36);
@@ -605,18 +613,22 @@
 		cache_insert(name, prefix_len, hash);
 	}
 
-	M_DEBUG(10,("hash2_name_to_8_3: %s -> %08X -> %s (cache=%d)\n",
+	M_DEBUG(10,("name_map: %s -> %08X -> %s (cache=%d)\n", 
 		   name, hash, new_name, cache83));
 
-	return True;
+	/* and overwrite the old name */
+	fstrcpy(name, new_name);
+
+	/* all done, we've managed to mangle it */
 }
 
-/* initialise the flags table
 
+/* initialise the flags table 
+
   we allow only a very restricted set of characters as 'ascii' in this
   mangling backend. This isn't a significant problem as modern clients
   use the 'long' filenames anyway, and those don't have these
-  restrictions.
+  restrictions. 
 */
 static void init_tables(void)
 {
@@ -630,8 +642,8 @@
 			char_flags[i] |= FLAG_ILLEGAL;
 		}
 
-		if ((i >= '0' && i <= '9') ||
-		    (i >= 'a' && i <= 'z') ||
+		if ((i >= '0' && i <= '9') || 
+		    (i >= 'a' && i <= 'z') || 
 		    (i >= 'A' && i <= 'Z')) {
 			char_flags[i] |=  (FLAG_ASCII | FLAG_BASECHAR);
 		}
@@ -651,7 +663,7 @@
 	memset(base_reverse, 0, sizeof(base_reverse));
 	for (i=0;i<36;i++) {
 		base_reverse[(unsigned char)base_forward(i)] = i;
-	}
+	}	
 
 	/* fill in the reserved names flags. These are used as a very
 	   fast filter for finding possible DOS reserved filenames */
@@ -682,10 +694,9 @@
 static struct mangle_fns mangle_fns = {
 	mangle_reset,
 	is_mangled,
-	must_mangle,
 	is_8_3,
-	lookup_name_from_8_3,
-	hash2_name_to_8_3
+	check_cache,
+	name_map
 };
 
 /* return the methods for this mangling implementation */
@@ -703,56 +714,45 @@
 	init_tables();
 	mangle_reset();
 
+	if (!cache_init()) {
+		return NULL;
+	}
+
 	return &mangle_fns;
 }
 
 static void posix_mangle_reset(void)
 {;}
 
-static bool posix_is_mangled(const char *s, const struct share_params *p)
+static BOOL posix_is_mangled(const char *s, const struct share_params *p)
 {
 	return False;
 }
 
-static bool posix_must_mangle(const char *s, const struct share_params *p)
+static BOOL posix_is_8_3(const char *fname, BOOL check_case, BOOL allow_wildcards, const struct share_params *p)
 {
 	return False;
 }
 
-static bool posix_is_8_3(const char *fname,
-			bool check_case,
-			bool allow_wildcards,
-			const struct share_params *p)
+static BOOL posix_check_cache( char *s, size_t maxlen, const struct share_params *p )
 {
 	return False;
 }
 
-static bool posix_lookup_name_from_8_3(TALLOC_CTX *ctx,
-				const char *in,
-				char **out, /* talloced on the given context. */
-				const struct share_params *p)
+static void posix_name_map(char *OutName, BOOL need83, BOOL cache83, int default_case, const struct share_params *p)
 {
-	return False;
+	if (need83) {
+		memset(OutName, '\0', 13);
+	}
 }
 
-static bool posix_name_to_8_3(const char *in,
-				char out[13],
-				bool cache83,
-				int default_case,
-				const struct share_params *p)
-{
-	memset(out, '\0', 13);
-	return True;
-}
-
 /* POSIX paths backend - no mangle. */
 static struct mangle_fns posix_mangle_fns = {
-	posix_mangle_reset,
-	posix_is_mangled,
-	posix_must_mangle,
-	posix_is_8_3,
-	posix_lookup_name_from_8_3,
-	posix_name_to_8_3
+        posix_mangle_reset,
+        posix_is_mangled,
+        posix_is_8_3,
+        posix_check_cache,
+        posix_name_map
 };
 
 struct mangle_fns *posix_mangle_init(void)

Copied: branches/samba/upstream/source/smbd/mangle_map.c (from rev 1928, branches/samba/upstream/source/smbd/mangle_map.c)
===================================================================
--- branches/samba/upstream/source/smbd/mangle_map.c	                        (rev 0)
+++ branches/samba/upstream/source/smbd/mangle_map.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,212 @@
+/* 
+   Unix SMB/CIFS implementation.
+   Name mapping code 
+   Copyright (C) Jeremy Allison 1998
+   Copyright (C) Andrew Tridgell 2002
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+
+
+/* ************************************************************************** **
+ * Used only in do_fwd_mangled_map(), below.
+ * ************************************************************************** **
+ */
+static char *map_filename( char *s,         /* This is null terminated */
+                           const char *pattern,   /* This isn't. */
+                           int len )        /* This is the length of pattern. */
+  {
+  static pstring matching_bit;  /* The bit of the string which matches */
+                                /* a * in pattern if indeed there is a * */
+  char *sp;                     /* Pointer into s. */
+  char *pp;                     /* Pointer into p. */
+  char *match_start;            /* Where the matching bit starts. */
+  pstring pat;
+
+  StrnCpy( pat, pattern, len ); /* Get pattern into a proper string! */
+  pstrcpy( matching_bit, "" );  /* Match but no star gets this. */
+  pp = pat;                     /* Initialize the pointers. */
+  sp = s;
+
+  if( strequal(s, ".") || strequal(s, ".."))
+    {
+    return NULL;                /* Do not map '.' and '..' */
+    }
+
+  if( (len == 1) && (*pattern == '*') )
+    {
+    return NULL;                /* Impossible, too ambiguous for */
+    }                           /* words! */
+
+  while( (*sp)                  /* Not the end of the string. */
+      && (*pp)                  /* Not the end of the pattern. */
+      && (*sp == *pp)           /* The two match. */
+      && (*pp != '*') )         /* No wildcard. */
+    {
+    sp++;                       /* Keep looking. */
+    pp++;
+    }
+
+  if( !*sp && !*pp )            /* End of pattern. */
+    return( matching_bit );     /* Simple match.  Return empty string. */
+
+  if( *pp == '*' )
+    {
+    pp++;                       /* Always interrested in the chacter */
+                                /* after the '*' */
+    if( !*pp )                  /* It is at the end of the pattern. */
+      {
+      StrnCpy( matching_bit, s, sp-s );
+      return( matching_bit );
+      }
+    else
+      {
+      /* The next character in pattern must match a character further */
+      /* along s than sp so look for that character. */
+      match_start = sp;
+      while( (*sp)              /* Not the end of s. */
+          && (*sp != *pp) )     /* Not the same  */
+        sp++;                   /* Keep looking. */
+      if( !*sp )                /* Got to the end without a match. */
+        {
+        return( NULL );
+        }                       /* Still hope for a match. */
+      else
+        {
+        /* Now sp should point to a matching character. */
+        StrnCpy(matching_bit, match_start, sp-match_start);
+        /* Back to needing a stright match again. */
+        while( (*sp)            /* Not the end of the string. */
+            && (*pp)            /* Not the end of the pattern. */
+            && (*sp == *pp) )   /* The two match. */
+          {
+          sp++;                 /* Keep looking. */
+          pp++;
+          }
+        if( !*sp && !*pp )      /* Both at end so it matched */
+          return( matching_bit );
+        else
+          return( NULL );
+        }
+      }
+    }
+  return( NULL );               /* No match. */
+  } /* map_filename */
+
+
+/* ************************************************************************** **
+ * MangledMap is a series of name pairs in () separated by spaces.
+ * If s matches the first of the pair then the name given is the
+ * second of the pair.  A * means any number of any character and if
+ * present in the second of the pair as well as the first the
+ * matching part of the first string takes the place of the * in the
+ * second.
+ *
+ * I wanted this so that we could have RCS files which can be used
+ * by UNIX and DOS programs.  My mapping string is (RCS rcs) which
+ * converts the UNIX RCS file subdirectory to lowercase thus
+ * preventing mangling.
+ *
+ * See 'mangled map' in smb.conf(5).
+ *
+ * ************************************************************************** **
+ */
+static void mangled_map(char *s, const char *MangledMap)
+{
+	const char *start=MangledMap;       /* Use this to search for mappings. */
+	const char *end;                    /* Used to find the end of strings. */
+	char *match_string;
+	pstring new_string;           /* Make up the result here. */
+	char *np;                     /* Points into new_string. */
+
+	DEBUG( 5, ("Mangled Mapping '%s' map '%s'\n", s, MangledMap) );
+	while( *start ) {
+		while( (*start) && (*start != '(') )
+			start++;
+		if( !*start )
+			continue;                 /* Always check for the end. */
+		start++;                    /* Skip the ( */
+		end = start;                /* Search for the ' ' or a ')' */
+		DEBUG( 5, ("Start of first in pair '%s'\n", start) );
+		while( (*end) && !((*end == ' ') || (*end == ')')) )
+			end++;
+		if( !*end ) {
+			start = end;
+			continue;                 /* Always check for the end. */
+		}
+		DEBUG( 5, ("End of first in pair '%s'\n", end) );
+		if( (match_string = map_filename( s, start, end-start )) ) {
+			int size_left = sizeof(new_string) - 1;
+			DEBUG( 5, ("Found a match\n") );
+			/* Found a match. */
+			start = end + 1; /* Point to start of what it is to become. */
+			DEBUG( 5, ("Start of second in pair '%s'\n", start) );
+			end = start;
+			np = new_string;
+			while( (*end && size_left > 0)    /* Not the end of string. */
+			       && (*end != ')')      /* Not the end of the pattern. */
+			       && (*end != '*') ) {   /* Not a wildcard. */
+				*np++ = *end++;
+				size_left--;
+			}
+
+			if( !*end ) {
+				start = end;
+				continue;               /* Always check for the end. */
+			}
+			if( *end == '*' ) {
+				if (size_left > 0 )
+					safe_strcpy( np, match_string, size_left );
+				np += strlen( match_string );
+				size_left -= strlen( match_string );
+				end++;                  /* Skip the '*' */
+				while ((*end && size_left >  0)   /* Not the end of string. */
+				       && (*end != ')') /* Not the end of the pattern. */
+				       && (*end != '*')) { /* Not a wildcard. */
+					*np++ = *end++;
+					size_left--;
+				}
+			}
+			if (!*end) {
+				start = end;
+				continue;               /* Always check for the end. */
+			}
+			if (size_left > 0)
+				*np++ = '\0';             /* NULL terminate it. */
+			DEBUG(5,("End of second in pair '%s'\n", end));
+			new_string[sizeof(new_string)-1] = '\0';
+			pstrcpy( s, new_string );  /* Substitute with the new name. */
+			DEBUG( 5, ("s is now '%s'\n", s) );
+		}
+		start = end;  /* Skip a bit which cannot be wanted anymore. */
+		start++;
+	}
+}
+
+/*
+  front end routine to the mangled map code 
+  personally I think that the whole idea of "mangled map" is completely bogus
+*/
+void mangle_map_filename(fstring fname, const struct share_params *p)
+{
+	char *map;
+
+	map = lp_mangled_map(p);
+	if (!map || !*map) return;
+
+	mangled_map(fname, map);
+}

Modified: branches/samba/upstream/source/smbd/map_username.c
===================================================================
--- branches/samba/upstream/source/smbd/map_username.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/map_username.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -28,82 +29,41 @@
  any incoming or new username - in order to canonicalize the name.
  This is being done to de-couple the case conversions from the user mapping
  function. Previously, the map_username was being called
- every time Get_Pwnam_alloc was called.
+ every time Get_Pwnam was called.
  Returns True if username was changed, false otherwise.
 ********************************************************************/
 
-static char *last_from, *last_to;
-
-static const char *get_last_from(void)
+BOOL map_username(fstring user)
 {
-	if (!last_from) {
-		return "";
-	}
-	return last_from;
-}
-
-static const char *get_last_to(void)
-{
-	if (!last_to) {
-		return "";
-	}
-	return last_to;
-}
-
-static bool set_last_from_to(const char *from, const char *to)
-{
-	char *orig_from = last_from;
-	char *orig_to = last_to;
-
-	last_from = SMB_STRDUP(from);
-	last_to = SMB_STRDUP(to);
-
-	SAFE_FREE(orig_from);
-	SAFE_FREE(orig_to);
-
-	if (!last_from || !last_to) {
-		SAFE_FREE(last_from);
-		SAFE_FREE(last_to);
-		return false;
-	}
-	return true;
-}
-
-bool map_username(fstring user)
-{
+	static BOOL initialised=False;
+	static fstring last_from,last_to;
 	XFILE *f;
 	char *mapfile = lp_username_map();
 	char *s;
-	char buf[512];
-	bool mapped_user = False;
+	pstring buf;
+	BOOL mapped_user = False;
 	char *cmd = lp_username_map_script();
-
+	
 	if (!*user)
-		return false;
+		return False;
+		
+	if (strequal(user,last_to))
+		return False;
 
-	if (strequal(user,get_last_to()))
-		return false;
-
-	if (strequal(user,get_last_from())) {
-		DEBUG(3,("Mapped user %s to %s\n",user,get_last_to()));
-		fstrcpy(user,get_last_to());
-		return true;
+	if (strequal(user,last_from)) {
+		DEBUG(3,("Mapped user %s to %s\n",user,last_to));
+		fstrcpy(user,last_to);
+		return True;
 	}
-
+	
 	/* first try the username map script */
-
+	
 	if ( *cmd ) {
 		char **qlines;
-		char *command = NULL;
+		pstring command;
 		int numlines, ret, fd;
 
-		command = talloc_asprintf(talloc_tos(),
-					"%s \"%s\"",
-					cmd,
-					user);
-		if (!command) {
-			return false;
-		}
+		pstr_sprintf( command, "%s \"%s\"", cmd, user );
 
 		DEBUG(10,("Running [%s]\n", command));
 		ret = smbrun(command, &fd);
@@ -128,14 +88,20 @@
 		}
 
 		file_lines_free(qlines);
-
+		
 		return numlines != 0;
 	}
 
 	/* ok.  let's try the mapfile */
+	
 	if (!*mapfile)
 		return False;
 
+	if (!initialised) {
+		*last_from = *last_to = 0;
+		initialised = True;
+	}
+  
 	f = x_fopen(mapfile,O_RDONLY, 0);
 	if (!f) {
 		DEBUG(0,("can't open username map %s. Error %s\n",mapfile, strerror(errno) ));
@@ -148,7 +114,7 @@
 		char *unixname = s;
 		char *dosname = strchr_m(unixname,'=');
 		char **dosuserlist;
-		bool return_if_mapped = False;
+		BOOL return_if_mapped = False;
 
 		if (!dosname)
 			continue;
@@ -164,7 +130,7 @@
 			while (*unixname && isspace((int)*unixname))
 				unixname++;
 		}
-
+    
 		if (!*unixname || strchr_m("#;",*unixname))
 			continue;
 
@@ -178,7 +144,7 @@
 
 		/* skip lines like 'user = ' */
 
-		dosuserlist = str_list_make(talloc_tos(), dosname, NULL);
+		dosuserlist = str_list_make(dosname, NULL);
 		if (!dosuserlist) {
 			DEBUG(0,("Bad username map entry.  Unable to build user list.  Ignoring.\n"));
 			continue;
@@ -188,28 +154,27 @@
 		    user_in_list(user, (const char **)dosuserlist)) {
 			DEBUG(3,("Mapped user %s to %s\n",user,unixname));
 			mapped_user = True;
-
-			set_last_from_to(user, unixname);
+			fstrcpy( last_from,user );
 			fstrcpy( user, unixname );
-
+			fstrcpy( last_to,user );
 			if ( return_if_mapped ) {
-				TALLOC_FREE(dosuserlist);
+				str_list_free (&dosuserlist);
 				x_fclose(f);
 				return True;
 			}
 		}
-
-		TALLOC_FREE(dosuserlist);
+    
+		str_list_free (&dosuserlist);
 	}
 
 	x_fclose(f);
 
 	/*
-	 * Setup the last_from and last_to as an optimization so
+	 * Setup the last_from and last_to as an optimization so 
 	 * that we don't scan the file again for the same user.
 	 */
+	fstrcpy(last_from,user);
+	fstrcpy(last_to,user);
 
-	set_last_from_to(user, user);
-
 	return mapped_user;
 }

Modified: branches/samba/upstream/source/smbd/message.c
===================================================================
--- branches/samba/upstream/source/smbd/message.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/message.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 /*
    This file handles the messaging system calls for winpopup style
@@ -26,110 +27,87 @@
 
 extern userdom_struct current_user_info;
 
-struct msg_state {
-	char *from;
-	char *to;
-	char *msg;
-};
+/* look in server.c for some explanation of these variables */
+static char msgbuf[1600];
+static int msgpos;
+static fstring msgfrom;
+static fstring msgto;
 
-static struct msg_state *smbd_msg_state;
-
 /****************************************************************************
  Deliver the message.
 ****************************************************************************/
 
-static void msg_deliver(struct msg_state *state)
+static void msg_deliver(void)
 {
-	TALLOC_CTX *frame = talloc_stackframe();
-	char *name = NULL;
+	pstring name;
 	int i;
 	int fd;
 	char *msg;
 	int len;
 	ssize_t sz;
-	fstring alpha_buf;
-	char *s;
 
 	if (! (*lp_msg_command())) {
 		DEBUG(1,("no messaging command specified\n"));
-		goto done;
+		msgpos = 0;
+		return;
 	}
 
 	/* put it in a temporary file */
-	name = talloc_asprintf(talloc_tos(), "%s/msg.XXXXXX", tmpdir());
-	if (!name) {
-		goto done;
-	}
+	slprintf(name,sizeof(name)-1, "%s/msg.XXXXXX",tmpdir());
 	fd = smb_mkstemp(name);
 
 	if (fd == -1) {
-		DEBUG(1, ("can't open message file %s: %s\n", name,
-			  strerror(errno)));
-		goto done;
+		DEBUG(1,("can't open message file %s\n",name));
+		return;
 	}
 
 	/*
 	 * Incoming message is in DOS codepage format. Convert to UNIX.
 	 */
-
-	len = convert_string_talloc(
-		talloc_tos(), CH_DOS, CH_UNIX, state->msg,
-		talloc_get_size(state->msg), (void *)&msg, true);
-
-	if (len == -1) {
-		DEBUG(3, ("Conversion failed, delivering message in DOS "
-			  "codepage format\n"));
-		msg = state->msg;
-	}
-
-	for (i = 0; i < len; i++) {
-		if ((msg[i] == '\r') && (i < (len-1)) && (msg[i+1] == '\n')) {
-			continue;
+  
+	if ((len = (int)convert_string_allocate(NULL,CH_DOS, CH_UNIX, msgbuf, msgpos, (void **)(void *)&msg, True)) < 0 || !msg) {
+		DEBUG(3,("Conversion failed, delivering message in DOS codepage format\n"));
+		for (i = 0; i < msgpos;) {
+			if (msgbuf[i] == '\r' && i < (msgpos-1) && msgbuf[i+1] == '\n') {
+				i++;
+				continue;
+			}
+			sz = write(fd, &msgbuf[i++], 1);
+			if ( sz != 1 ) {
+				DEBUG(0,("Write error to fd %d: %ld(%d)\n",fd, (long)sz, errno ));
+			}
 		}
-		sz = write(fd, &msg[i], 1);
-		if ( sz != 1 ) {
-			DEBUG(0, ("Write error to fd %d: %ld(%s)\n", fd,
-				  (long)sz, strerror(errno)));
+	} else {
+		for (i = 0; i < len;) {
+			if (msg[i] == '\r' && i < (len-1) && msg[i+1] == '\n') {
+				i++;
+				continue;
+			}
+			sz = write(fd, &msg[i++],1);
+			if ( sz != 1 ) {
+				DEBUG(0,("Write error to fd %d: %ld(%d)\n",fd, (long)sz, errno ));
+			}
 		}
+		SAFE_FREE(msg);
 	}
-
 	close(fd);
 
 	/* run the command */
-	s = talloc_strdup(talloc_tos(), lp_msg_command());
-	if (s == NULL) {
-		goto done;
-	}
+	if (*lp_msg_command()) {
+		fstring alpha_msgfrom;
+		fstring alpha_msgto;
+		pstring s;
 
-	alpha_strcpy(alpha_buf, state->from, NULL, sizeof(alpha_buf));
-
-	s = talloc_string_sub(talloc_tos(), s, "%f", alpha_buf);
-	if (s == NULL) {
-		goto done;
+		pstrcpy(s,lp_msg_command());
+		pstring_sub(s,"%f",alpha_strcpy(alpha_msgfrom,msgfrom,NULL,sizeof(alpha_msgfrom)));
+		pstring_sub(s,"%t",alpha_strcpy(alpha_msgto,msgto,NULL,sizeof(alpha_msgto)));
+		standard_sub_basic(current_user_info.smb_name,
+				current_user_info.domain, s, sizeof(s));
+		pstring_sub(s,"%s",name);
+		smbrun(s,NULL);
 	}
 
-	alpha_strcpy(alpha_buf, state->to, NULL, sizeof(alpha_buf));
-
-	s = talloc_string_sub(talloc_tos(), s, "%t", alpha_buf);
-	if (s == NULL) {
-		goto done;
-	}
-
-	s = talloc_sub_basic(talloc_tos(), current_user_info.smb_name,
-			     current_user_info.domain, s);
-	if (s == NULL) {
-		goto done;
-	}
-
-	s = talloc_string_sub(talloc_tos(), s, "%s", name);
-	if (s == NULL) {
-		goto done;
-	}
-	smbrun(s,NULL);
-
- done:
-	TALLOC_FREE(frame);
-	return;
+	msgpos = 0;
 }
 
 /****************************************************************************
@@ -137,52 +115,42 @@
  conn POINTER CAN BE NULL HERE !
 ****************************************************************************/
 
-void reply_sends(struct smb_request *req)
+int reply_sends(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
-	struct msg_state *state;
 	int len;
 	char *msg;
+	int outsize = 0;
 	char *p;
 
 	START_PROFILE(SMBsends);
 
-	if (!(*lp_msg_command())) {
-		reply_doserror(req, ERRSRV, ERRmsgoff);
+	msgpos = 0;
+
+	if (! (*lp_msg_command())) {
 		END_PROFILE(SMBsends);
-		return;
+		return(ERROR_DOS(ERRSRV,ERRmsgoff));
 	}
 
-	state = talloc(talloc_tos(), struct msg_state);
+	outsize = set_message(outbuf,0,0,True);
 
-	p = smb_buf(req->inbuf)+1;
-	p += srvstr_pull_buf_talloc(
-		state, (char *)req->inbuf, req->flags2, &state->from, p,
-		STR_ASCII|STR_TERMINATE) + 1;
-	p += srvstr_pull_buf_talloc(
-		state, (char *)req->inbuf, req->flags2, &state->to, p,
-		STR_ASCII|STR_TERMINATE) + 1;
+	p = smb_buf(inbuf)+1;
+	p += srvstr_pull_buf(inbuf, msgfrom, p, sizeof(msgfrom), STR_ASCII|STR_TERMINATE) + 1;
+	p += srvstr_pull_buf(inbuf, msgto, p, sizeof(msgto), STR_ASCII|STR_TERMINATE) + 1;
 
 	msg = p;
 
 	len = SVAL(msg,0);
-	len = MIN(len, smb_bufrem(req->inbuf, msg+2));
+	len = MIN(len,sizeof(msgbuf)-msgpos);
 
-	state->msg = talloc_array(state, char, len);
+	memset(msgbuf,'\0',sizeof(msgbuf));
 
-	if (state->msg == NULL) {
-		reply_nterror(req, NT_STATUS_NO_MEMORY);
-		END_PROFILE(SMBsends);
-		return;
-	}
+	memcpy(&msgbuf[msgpos],msg+2,len);
+	msgpos += len;
 
-	memcpy(state->msg, msg+2, len);
+	msg_deliver();
 
-	msg_deliver(state);
-
-	reply_outbuf(req, 0, 0);
-
 	END_PROFILE(SMBsends);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
@@ -190,43 +158,31 @@
  conn POINTER CAN BE NULL HERE !
 ****************************************************************************/
 
-void reply_sendstrt(struct smb_request *req)
+int reply_sendstrt(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
+	int outsize = 0;
 	char *p;
 
 	START_PROFILE(SMBsendstrt);
 
-	if (!(*lp_msg_command())) {
-		reply_doserror(req, ERRSRV, ERRmsgoff);
+	if (! (*lp_msg_command())) {
 		END_PROFILE(SMBsendstrt);
-		return;
+		return(ERROR_DOS(ERRSRV,ERRmsgoff));
 	}
 
-	TALLOC_FREE(smbd_msg_state);
+	outsize = set_message(outbuf,1,0,True);
 
-	smbd_msg_state = TALLOC_ZERO_P(NULL, struct msg_state);
+	memset(msgbuf,'\0',sizeof(msgbuf));
+	msgpos = 0;
 
-	if (smbd_msg_state == NULL) {
-		reply_nterror(req, NT_STATUS_NO_MEMORY);
-		END_PROFILE(SMBsendstrt);
-		return;
-	}
+	p = smb_buf(inbuf)+1;
+	p += srvstr_pull_buf(inbuf, msgfrom, p, sizeof(msgfrom), STR_ASCII|STR_TERMINATE) + 1;
+	p += srvstr_pull_buf(inbuf, msgto, p, sizeof(msgto), STR_ASCII|STR_TERMINATE) + 1;
 
-	p = smb_buf(req->inbuf)+1;
-	p += srvstr_pull_buf_talloc(
-		smbd_msg_state, (char *)req->inbuf, req->flags2,
-		&smbd_msg_state->from, p, STR_ASCII|STR_TERMINATE) + 1;
-	p += srvstr_pull_buf_talloc(
-		smbd_msg_state, (char *)req->inbuf, req->flags2,
-		&smbd_msg_state->to, p, STR_ASCII|STR_TERMINATE) + 1;
+	DEBUG( 3, ( "SMBsendstrt (from %s to %s)\n", msgfrom, msgto ) );
 
-	DEBUG( 3, ( "SMBsendstrt (from %s to %s)\n", smbd_msg_state->from,
-		    smbd_msg_state->to ) );
-
-	reply_outbuf(req, 0, 0);
-
 	END_PROFILE(SMBsendstrt);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
@@ -234,52 +190,32 @@
  conn POINTER CAN BE NULL HERE !
 ****************************************************************************/
 
-void reply_sendtxt(struct smb_request *req)
+int reply_sendtxt(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
 	int len;
+	int outsize = 0;
 	char *msg;
-	char *tmp;
-	size_t old_len;
-
 	START_PROFILE(SMBsendtxt);
 
 	if (! (*lp_msg_command())) {
-		reply_doserror(req, ERRSRV, ERRmsgoff);
 		END_PROFILE(SMBsendtxt);
-		return;
+		return(ERROR_DOS(ERRSRV,ERRmsgoff));
 	}
 
-	if (smbd_msg_state == NULL) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBsendtxt);
-		return;
-	}
+	outsize = set_message(outbuf,0,0,True);
 
-	msg = smb_buf(req->inbuf) + 1;
+	msg = smb_buf(inbuf) + 1;
 
-	old_len = talloc_get_size(smbd_msg_state->msg);
+	len = SVAL(msg,0);
+	len = MIN(len,sizeof(msgbuf)-msgpos);
 
-	len = MIN(SVAL(msg, 0), smb_bufrem(req->inbuf, msg+2));
+	memcpy(&msgbuf[msgpos],msg+2,len);
+	msgpos += len;
 
-	tmp = TALLOC_REALLOC_ARRAY(smbd_msg_state, smbd_msg_state->msg,
-				   char, old_len + len);
-
-	if (tmp == NULL) {
-		reply_nterror(req, NT_STATUS_NO_MEMORY);
-		END_PROFILE(SMBsendtxt);
-		return;
-	}
-
-	smbd_msg_state->msg = tmp;
-
-	memcpy(&smbd_msg_state->msg[old_len], msg+2, len);
-
 	DEBUG( 3, ( "SMBsendtxt\n" ) );
 
-	reply_outbuf(req, 0, 0);
-
 	END_PROFILE(SMBsendtxt);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
@@ -287,24 +223,22 @@
  conn POINTER CAN BE NULL HERE !
 ****************************************************************************/
 
-void reply_sendend(struct smb_request *req)
+int reply_sendend(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
+	int outsize = 0;
 	START_PROFILE(SMBsendend);
 
 	if (! (*lp_msg_command())) {
-		reply_doserror(req, ERRSRV, ERRmsgoff);
 		END_PROFILE(SMBsendend);
-		return;
+		return(ERROR_DOS(ERRSRV,ERRmsgoff));
 	}
 
+	outsize = set_message(outbuf,0,0,True);
+
 	DEBUG(3,("SMBsendend\n"));
 
-	msg_deliver(smbd_msg_state);
+	msg_deliver();
 
-	TALLOC_FREE(smbd_msg_state);
-
-	reply_outbuf(req, 0, 0);
-
 	END_PROFILE(SMBsendend);
-	return;
+	return(outsize);
 }

Modified: branches/samba/upstream/source/smbd/msdfs.c
===================================================================
--- branches/samba/upstream/source/smbd/msdfs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/msdfs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-/*
+/* 
    Unix SMB/Netbios implementation.
    Version 3.0
    MSDFS services for Samba
@@ -7,16 +7,17 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
 */
 
@@ -32,46 +33,30 @@
  form /hostname/service/reqpath.
  We cope with either here.
 
+ If conn != NULL then ensure the provided service is
+ the one pointed to by the connection.
+
  Unfortunately, due to broken clients who might set the
  SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES bit and then
  send a local path, we have to cope with that too....
 
- If conn != NULL then ensure the provided service is
- the one pointed to by the connection.
-
- This version does everything using pointers within one copy of the
- pathname string, talloced on the struct dfs_path pointer (which
- must be talloced). This may be too clever to live....
  JRA.
 **********************************************************************/
 
 static NTSTATUS parse_dfs_path(connection_struct *conn,
 				const char *pathname,
-				bool allow_wcards,
-				struct dfs_path *pdp, /* MUST BE TALLOCED */
-				bool *ppath_contains_wcard)
+				BOOL allow_wcards,
+				struct dfs_path *pdp,
+				BOOL *ppath_contains_wcard)
 {
-	char *pathname_local;
-	char *p,*temp;
-	char *servicename;
-	char *eos_ptr;
+	pstring pathname_local;
+	char *p,*temp, *servicename;
 	NTSTATUS status = NT_STATUS_OK;
 	char sepchar;
 
 	ZERO_STRUCTP(pdp);
 
-	/*
-	 * This is the only talloc we should need to do
-	 * on the struct dfs_path. All the pointers inside
-	 * it should point to offsets within this string.
-	 */
-
-	pathname_local = talloc_strdup(pdp, pathname);
-	if (!pathname_local) {
-		return NT_STATUS_NO_MEMORY;
-	}
-	/* Get a pointer to the terminating '\0' */
-	eos_ptr = &pathname_local[strlen(pathname_local)];
+	pstrcpy(pathname_local,pathname);
 	p = temp = pathname_local;
 
 	pdp->posix_path = (lp_posix_pathnames() && *pathname == '/');
@@ -86,22 +71,17 @@
 		 * Try and convert to a local path.
 		 */
 
-		pdp->hostname = eos_ptr; /* "" */
-		pdp->servicename = eos_ptr; /* "" */
+		pdp->hostname[0] = '\0';
+		pdp->servicename[0] = '\0';
 
 		/* We've got no info about separators. */
 		pdp->posix_path = lp_posix_pathnames();
 		p = temp;
-		DEBUG(10,("parse_dfs_path: trying to convert %s to a "
-			"local path\n",
+		DEBUG(10,("parse_dfs_path: trying to convert %s to a local path\n",
 			temp));
 		goto local_path;
 	}
 
-	/*
-	 * Safe to use on talloc'ed string as it only shrinks.
-	 * It also doesn't affect the eos_ptr.
-	 */
 	trim_char(temp,sepchar,sepchar);
 
 	DEBUG(10,("parse_dfs_path: temp = |%s| after trimming %c's\n",
@@ -118,18 +98,16 @@
 		 * Try and convert to a local path.
 		 */
 
-		pdp->hostname = eos_ptr; /* "" */
-		pdp->servicename = eos_ptr; /* "" */
+		pdp->hostname[0] = '\0';
+		pdp->servicename[0] = '\0';
 
 		p = temp;
-		DEBUG(10,("parse_dfs_path: trying to convert %s "
-			"to a local path\n",
+		DEBUG(10,("parse_dfs_path: trying to convert %s to a local path\n",
 			temp));
 		goto local_path;
 	}
 	*p = '\0';
-	pdp->hostname = temp;
-
+	fstrcpy(pdp->hostname,temp);
 	DEBUG(10,("parse_dfs_path: hostname: %s\n",pdp->hostname));
 
 	/* Parse out servicename. */
@@ -140,10 +118,11 @@
 	}
 
 	/* Is this really our servicename ? */
-	if (conn && !( strequal(servicename, lp_servicename(SNUM(conn)))
+        if (conn && !( strequal(servicename, lp_servicename(SNUM(conn)))
 			|| (strequal(servicename, HOMES_NAME)
 			&& strequal(lp_servicename(SNUM(conn)),
 				get_current_username()) )) ) {
+
 		DEBUG(10,("parse_dfs_path: %s is not our servicename\n",
 			servicename));
 
@@ -152,8 +131,8 @@
 		 * Try and convert to a local path.
 		 */
 
-		pdp->hostname = eos_ptr; /* "" */
-		pdp->servicename = eos_ptr; /* "" */
+		pdp->hostname[0] = '\0';
+		pdp->servicename[0] = '\0';
 
 		/* Repair the path - replace the sepchar's
 		   we nulled out */
@@ -170,33 +149,28 @@
 		goto local_path;
 	}
 
-	pdp->servicename = servicename;
+	fstrcpy(pdp->servicename,servicename);
 
 	DEBUG(10,("parse_dfs_path: servicename: %s\n",pdp->servicename));
 
 	if(p == NULL) {
-		/* Client sent self referral \server\share. */
-		pdp->reqpath = eos_ptr; /* "" */
+		pdp->reqpath[0] = '\0';
 		return NT_STATUS_OK;
 	}
-
 	p++;
 
   local_path:
 
 	*ppath_contains_wcard = False;
 
-	pdp->reqpath = p;
-
 	/* Rest is reqpath. */
 	if (pdp->posix_path) {
-		status = check_path_syntax_posix(pdp->reqpath);
+		status = check_path_syntax_posix(pdp->reqpath, p);
 	} else {
 		if (allow_wcards) {
-			status = check_path_syntax_wcard(pdp->reqpath,
-					ppath_contains_wcard);
+			status = check_path_syntax_wcard(pdp->reqpath, p, ppath_contains_wcard);
 		} else {
-			status = check_path_syntax(pdp->reqpath);
+			status = check_path_syntax(pdp->reqpath, p);
 		}
 	}
 
@@ -215,26 +189,14 @@
  Note this CHANGES CWD !!!! JRA.
 *********************************************************/
 
-static NTSTATUS create_conn_struct(TALLOC_CTX *ctx,
-				connection_struct *conn,
-				int snum,
-				const char *path)
+static NTSTATUS create_conn_struct(connection_struct *conn, int snum, const char *path)
 {
-	char *connpath;
+	pstring connpath;
 
 	ZERO_STRUCTP(conn);
 
-	connpath = talloc_strdup(ctx, path);
-	if (!connpath) {
-		return NT_STATUS_NO_MEMORY;
-	}
-	connpath = talloc_string_sub(ctx,
-				connpath,
-				"%S",
-				lp_servicename(snum));
-	if (!connpath) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	pstrcpy(connpath, path);
+	pstring_sub(connpath , "%S", lp_servicename(snum));
 
 	/* needed for smbd_vfs_init() */
 
@@ -243,8 +205,7 @@
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	if (!(conn->params = TALLOC_ZERO_P(conn->mem_ctx,
-					struct share_params))) {
+	if (!(conn->params = TALLOC_ZERO_P(conn->mem_ctx, struct share_params))) {
 		DEBUG(0, ("TALLOC failed\n"));
 		return NT_STATUS_NO_MEMORY;
 	}
@@ -261,16 +222,15 @@
 	}
 
 	/*
-	 * Windows seems to insist on doing trans2getdfsreferral() calls on
-	 * the IPC$ share as the anonymous user. If we try to chdir as that
-	 * user we will fail.... WTF ? JRA.
+	 * Windows seems to insist on doing trans2getdfsreferral() calls on the IPC$
+	 * share as the anonymous user. If we try to chdir as that user we will
+	 * fail.... WTF ? JRA.
 	 */
 
 	if (vfs_ChDir(conn,conn->connectpath) != 0) {
 		NTSTATUS status = map_nt_error_from_unix(errno);
-		DEBUG(3,("create_conn_struct: Can't ChDir to new conn path %s. "
-			"Error was %s\n",
-			conn->connectpath, strerror(errno) ));
+		DEBUG(3,("create_conn_struct: Can't ChDir to new conn path %s. Error was %s\n",
+					conn->connectpath, strerror(errno) ));
 		conn_free_internal(conn);
 		return status;
 	}
@@ -297,57 +257,46 @@
  server we're referring to understands posix paths.
  **********************************************************************/
 
-static bool parse_msdfs_symlink(TALLOC_CTX *ctx,
-				const char *target,
+static BOOL parse_msdfs_symlink(TALLOC_CTX *ctx,
+				char *target,
 				struct referral **preflist,
 				int *refcount)
 {
-	char *temp = NULL;
+	pstring temp;
 	char *prot;
-	char **alt_path = NULL;
+	char *alt_path[MAX_REFERRAL_COUNT];
 	int count = 0, i;
 	struct referral *reflist;
-	char *saveptr;
 
-	temp = talloc_strdup(ctx, target);
-	if (!temp) {
-		return False;
-	}
-	prot = strtok_r(temp, ":", &saveptr);
+	pstrcpy(temp,target);
+	prot = strtok(temp,":");
 	if (!prot) {
 		DEBUG(0,("parse_msdfs_symlink: invalid path !\n"));
 		return False;
 	}
 
-	alt_path = TALLOC_ARRAY(ctx, char *, MAX_REFERRAL_COUNT);
-	if (!alt_path) {
-		return False;
-	}
-
 	/* parse out the alternate paths */
 	while((count<MAX_REFERRAL_COUNT) &&
-	      ((alt_path[count] = strtok_r(NULL, ",", &saveptr)) != NULL)) {
+	      ((alt_path[count] = strtok(NULL,",")) != NULL)) {
 		count++;
 	}
 
 	DEBUG(10,("parse_msdfs_symlink: count=%d\n", count));
 
 	if (count) {
-		reflist = *preflist = TALLOC_ZERO_ARRAY(ctx,
-				struct referral, count);
+		reflist = *preflist = TALLOC_ZERO_ARRAY(ctx, struct referral, count);
 		if(reflist == NULL) {
-			TALLOC_FREE(alt_path);
+			DEBUG(0,("parse_msdfs_symlink: talloc failed!\n"));
 			return False;
 		}
 	} else {
 		reflist = *preflist = NULL;
 	}
-
+	
 	for(i=0;i<count;i++) {
 		char *p;
 
-		/* Canonicalize link target.
-		 * Replace all /'s in the path by a \ */
+		/* Canonicalize link target. Replace all /'s in the path by a \ */
 		string_replace(alt_path[i], '/', '\\');
 
 		/* Remove leading '\\'s */
@@ -356,113 +305,66 @@
 			p++;
 		}
 
-		reflist[i].alternate_path = talloc_asprintf(ctx,
-				"\\%s",
-				p);
-		if (!reflist[i].alternate_path) {
-			return False;
-		}
+		pstrcpy(reflist[i].alternate_path, "\\");
+		pstrcat(reflist[i].alternate_path, p);
 
 		reflist[i].proximity = 0;
 		reflist[i].ttl = REFERRAL_TTL;
-		DEBUG(10, ("parse_msdfs_symlink: Created alt path: %s\n",
-					reflist[i].alternate_path));
+		DEBUG(10, ("parse_msdfs_symlink: Created alt path: %s\n", reflist[i].alternate_path));
 		*refcount += 1;
 	}
 
-	TALLOC_FREE(alt_path);
 	return True;
 }
-
+ 
 /**********************************************************************
  Returns true if the unix path is a valid msdfs symlink and also
  returns the target string from inside the link.
 **********************************************************************/
 
-static bool is_msdfs_link_internal(TALLOC_CTX *ctx,
-			connection_struct *conn,
+BOOL is_msdfs_link(connection_struct *conn,
 			const char *path,
-			char **pp_link_target,
+			pstring link_target,
 			SMB_STRUCT_STAT *sbufp)
 {
 	SMB_STRUCT_STAT st;
 	int referral_len = 0;
-	char link_target_buf[7];
-	size_t bufsize = 0;
-	char *link_target = NULL;
 
-	if (pp_link_target) {
-		bufsize = 1024;
-		link_target = TALLOC_ARRAY(ctx, char, bufsize);
-		if (!link_target) {
-			return False;
-		}
-		*pp_link_target = link_target;
-	} else {
-		bufsize = sizeof(link_target_buf);
-		link_target = link_target_buf;
-	}
-
 	if (sbufp == NULL) {
 		sbufp = &st;
 	}
 
 	if (SMB_VFS_LSTAT(conn, path, sbufp) != 0) {
-		DEBUG(5,("is_msdfs_link_read_target: %s does not exist.\n",
-			path));
-		goto err;
+		DEBUG(5,("is_msdfs_link: %s does not exist.\n",path));
+		return False;
 	}
-
+  
 	if (!S_ISLNK(sbufp->st_mode)) {
-		DEBUG(5,("is_msdfs_link_read_target: %s is not a link.\n",
-					path));
-		goto err;
+		DEBUG(5,("is_msdfs_link: %s is not a link.\n",path));
+		return False;
 	}
 
-	referral_len = SMB_VFS_READLINK(conn, path, link_target, bufsize - 1);
+	/* open the link and read it */
+	referral_len = SMB_VFS_READLINK(conn, path, link_target, sizeof(pstring)-1);
 	if (referral_len == -1) {
-		DEBUG(0,("is_msdfs_link_read_target: Error reading "
-			"msdfs link %s: %s\n",
+		DEBUG(0,("is_msdfs_link: Error reading msdfs link %s: %s\n",
 			path, strerror(errno)));
-		goto err;
+		return False;
 	}
 	link_target[referral_len] = '\0';
 
-	DEBUG(5,("is_msdfs_link_internal: %s -> %s\n",path,
-				link_target));
+	DEBUG(5,("is_msdfs_link: %s -> %s\n",path, link_target));
 
 	if (!strnequal(link_target, "msdfs:", 6)) {
-		goto err;
+		return False;
 	}
 	return True;
-
-  err:
-
-	if (link_target != link_target_buf) {
-		TALLOC_FREE(link_target);
-	}
-	return False;
 }
 
-/**********************************************************************
- Returns true if the unix path is a valid msdfs symlink.
-**********************************************************************/
-
-bool is_msdfs_link(connection_struct *conn,
-		const char *path,
-		SMB_STRUCT_STAT *sbufp)
-{
-	return is_msdfs_link_internal(talloc_tos(),
-					conn,
-					path,
-					NULL,
-					sbufp);
-}
-
 /*****************************************************************
  Used by other functions to decide if a dfs path is remote,
  and to get the list of referred locations for that remote path.
-
+ 
  search_flag: For findfirsts, dfs links themselves are not
  redirected, but paths beyond the links are. For normal smb calls,
  even dfs links need to be redirected.
@@ -474,40 +376,37 @@
  link redirect are in targetpath.
 *****************************************************************/
 
-static NTSTATUS dfs_path_lookup(TALLOC_CTX *ctx,
-		connection_struct *conn,
-		const char *dfspath, /* Incoming complete dfs path */
-		const struct dfs_path *pdp, /* Parsed out
-					       server+share+extrapath. */
-		bool search_flag, /* Called from a findfirst ? */
-		int *consumedcntp,
-		char **pp_targetpath)
+static NTSTATUS dfs_path_lookup(connection_struct *conn,
+			const char *dfspath, /* Incoming complete dfs path */
+			const struct dfs_path *pdp, /* Parsed out server+share+extrapath. */
+			BOOL search_flag, /* Called from a findfirst ? */
+			int *consumedcntp,
+			pstring targetpath)
 {
 	char *p = NULL;
 	char *q = NULL;
 	SMB_STRUCT_STAT sbuf;
 	NTSTATUS status;
-	char *localpath = NULL;
-	char *canon_dfspath = NULL; /* Canonicalized dfs path. (only '/'
-				  components). */
+	pstring localpath;
+	pstring canon_dfspath; /* Canonicalized dfs path. (only '/' components). */
 
 	DEBUG(10,("dfs_path_lookup: Conn path = %s reqpath = %s\n",
 		conn->connectpath, pdp->reqpath));
 
-	/*
+	/* 
  	 * Note the unix path conversion here we're doing we can
 	 * throw away. We're looking for a symlink for a dfs
 	 * resolution, if we don't find it we'll do another
 	 * unix_convert later in the codepath.
 	 * If we needed to remember what we'd resolved in
 	 * dp->reqpath (as the original code did) we'd
-	 * copy (localhost, dp->reqpath) on any code
+	 * pstrcpy(localhost, dp->reqpath) on any code
 	 * path below that returns True - but I don't
 	 * think this is needed. JRA.
 	 */
 
-	status = unix_convert(ctx, conn, pdp->reqpath, search_flag, &localpath,
-			NULL, &sbuf);
+	pstrcpy(localpath, pdp->reqpath);
+	status = unix_convert(conn, localpath, search_flag, NULL, &sbuf);
 	if (!NT_STATUS_IS_OK(status) && !NT_STATUS_EQUAL(status,
 					NT_STATUS_OBJECT_PATH_NOT_FOUND)) {
 		return status;
@@ -515,7 +414,7 @@
 
 	/* Optimization - check if we can redirect the whole path. */
 
-	if (is_msdfs_link_internal(ctx, conn, localpath, pp_targetpath, NULL)) {
+	if (is_msdfs_link(conn, localpath, targetpath, NULL)) {
 		if (search_flag) {
 			DEBUG(6,("dfs_path_lookup (FindFirst) No redirection "
 				 "for dfs link %s.\n", dfspath));
@@ -523,8 +422,7 @@
 		}
 
 		DEBUG(6,("dfs_path_lookup: %s resolves to a "
-			"valid dfs link %s.\n", dfspath,
-			pp_targetpath ? *pp_targetpath : ""));
+			"valid dfs link %s.\n", dfspath, targetpath));
 
 		if (consumedcntp) {
 			*consumedcntp = strlen(dfspath);
@@ -536,10 +434,7 @@
 	 * so if a Windows path replace all '\\' characters with '/'.
 	 * For a POSIX DFS path we know all separators are already '/'. */
 
-	canon_dfspath = talloc_strdup(ctx, dfspath);
-	if (!canon_dfspath) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	pstrcpy(canon_dfspath, dfspath);
 	if (!pdp->posix_path) {
 		string_replace(canon_dfspath, '\\', '/');
 	}
@@ -554,7 +449,7 @@
 
 	/*
 	 * Redirect if any component in the path is a link.
-	 * We do this by walking backwards through the
+	 * We do this by walking backwards through the 
 	 * local path, chopping off the last component
 	 * in both the local path and the canonicalized
 	 * DFS path. If we hit a DFS link then we're done.
@@ -571,17 +466,14 @@
 			*q = '\0';
 		}
 
-		if (is_msdfs_link_internal(ctx, conn,
-					localpath, pp_targetpath, NULL)) {
+		if (is_msdfs_link(conn, localpath, targetpath, NULL)) {
 			DEBUG(4, ("dfs_path_lookup: Redirecting %s because "
 				"parent %s is dfs link\n", dfspath, localpath));
 
 			if (consumedcntp) {
 				*consumedcntp = strlen(canon_dfspath);
 				DEBUG(10, ("dfs_path_lookup: Path consumed: %s "
-					"(%d)\n",
-					canon_dfspath,
-					*consumedcntp));
+					"(%d)\n", canon_dfspath, *consumedcntp));
 			}
 
 			return NT_STATUS_PATH_NOT_COVERED;
@@ -603,7 +495,7 @@
  Decides if a dfs pathname should be redirected or not.
  If not, the pathname is converted to a tcon-relative local unix path
 
- search_wcard_flag: this flag performs 2 functions both related
+ search_wcard_flag: this flag performs 2 functions bother related
  to searches.  See resolve_dfs_path() and parse_dfs_path_XX()
  for details.
 
@@ -611,36 +503,25 @@
  (mapped into a local path).
  or NT_STATUS_NOT_COVERED meaning return a DFS redirect, or
  any other NT_STATUS error which is a genuine error to be
- returned to the client.
+ returned to the client. 
 *****************************************************************/
 
-static NTSTATUS dfs_redirect(TALLOC_CTX *ctx,
-			connection_struct *conn,
-			const char *path_in,
-			bool search_wcard_flag,
-			char **pp_path_out,
-			bool *ppath_contains_wcard)
+static NTSTATUS dfs_redirect( connection_struct *conn,
+			pstring dfs_path,
+			BOOL search_wcard_flag,
+			BOOL *ppath_contains_wcard)
 {
 	NTSTATUS status;
-	struct dfs_path *pdp = TALLOC_P(ctx, struct dfs_path);
-
-	if (!pdp) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	status = parse_dfs_path(conn, path_in, search_wcard_flag, pdp,
-			ppath_contains_wcard);
+	struct dfs_path dp;
+	pstring targetpath;
+	
+	status = parse_dfs_path(conn, dfs_path, search_wcard_flag, &dp, ppath_contains_wcard);
 	if (!NT_STATUS_IS_OK(status)) {
-		TALLOC_FREE(pdp);
 		return status;
 	}
 
-	if (pdp->reqpath[0] == '\0') {
-		TALLOC_FREE(pdp);
-		*pp_path_out = talloc_strdup(ctx, "");
-		if (!*pp_path_out) {
-			return NT_STATUS_NO_MEMORY;
-		}
+	if (dp.reqpath[0] == '\0') {
+		pstrcpy(dfs_path, dp.reqpath);
 		DEBUG(5,("dfs_redirect: self-referral.\n"));
 		return NT_STATUS_OK;
 	}
@@ -649,52 +530,36 @@
 	   path and return OK */
 
 	if (!lp_msdfs_root(SNUM(conn))) {
-		*pp_path_out = talloc_strdup(ctx, pdp->reqpath);
-		TALLOC_FREE(pdp);
-		if (!*pp_path_out) {
-			return NT_STATUS_NO_MEMORY;
-		}
+		pstrcpy(dfs_path, dp.reqpath);
 		return NT_STATUS_OK;
 	}
 
 	/* If it looked like a local path (zero hostname/servicename)
-	 * just treat as a tcon-relative path. */
+	 * just treat as a tcon-relative path. */ 
 
-	if (pdp->hostname[0] == '\0' && pdp->servicename[0] == '\0') {
-		*pp_path_out = talloc_strdup(ctx, pdp->reqpath);
-		TALLOC_FREE(pdp);
-		if (!*pp_path_out) {
-			return NT_STATUS_NO_MEMORY;
-		}
+	if (dp.hostname[0] == '\0' && dp.servicename[0] == '\0') { 
+		pstrcpy(dfs_path, dp.reqpath);
 		return NT_STATUS_OK;
 	}
 
-	status = dfs_path_lookup(ctx, conn, path_in, pdp,
-			search_wcard_flag, NULL, NULL);
+	status = dfs_path_lookup(conn, dfs_path, &dp,
+			search_wcard_flag, NULL, targetpath);
 	if (!NT_STATUS_IS_OK(status)) {
 		if (NT_STATUS_EQUAL(status, NT_STATUS_PATH_NOT_COVERED)) {
-			DEBUG(3,("dfs_redirect: Redirecting %s\n", path_in));
+			DEBUG(3,("dfs_redirect: Redirecting %s\n", dfs_path));
 		} else {
-			DEBUG(10,("dfs_redirect: dfs_path_lookup "
-				"failed for %s with %s\n",
-				path_in, nt_errstr(status) ));
+			DEBUG(10,("dfs_redirect: dfs_path_lookup failed for %s with %s\n",
+				dfs_path, nt_errstr(status) ));
 		}
 		return status;
 	}
 
-	DEBUG(3,("dfs_redirect: Not redirecting %s.\n", path_in));
+	DEBUG(3,("dfs_redirect: Not redirecting %s.\n", dfs_path));
 
 	/* Form non-dfs tcon-relative path */
-	*pp_path_out = talloc_strdup(ctx, pdp->reqpath);
-	TALLOC_FREE(pdp);
-	if (!*pp_path_out) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	pstrcpy(dfs_path, dp.reqpath);
 
-	DEBUG(3,("dfs_redirect: Path %s converted to non-dfs path %s\n",
-				path_in,
-				*pp_path_out));
-
+	DEBUG(3,("dfs_redirect: Path converted to non-dfs path %s\n", dfs_path));
 	return NT_STATUS_OK;
 }
 
@@ -706,7 +571,7 @@
 			const char *dfs_path,
 			struct junction_map *jucn,
 			int *consumedcntp,
-			bool *self_referralp)
+			BOOL *self_referralp)
 {
 	struct referral *ref;
 
@@ -714,13 +579,11 @@
 
 	jucn->referral_count = 1;
 	if((ref = TALLOC_ZERO_P(ctx, struct referral)) == NULL) {
+		DEBUG(0,("self_ref: talloc failed for referral\n"));
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	ref->alternate_path = talloc_strdup(ctx, dfs_path);
-	if (!ref->alternate_path) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	pstrcpy(ref->alternate_path,dfs_path);
 	ref->proximity = 0;
 	ref->ttl = REFERRAL_TTL;
 	jucn->referral_list = ref;
@@ -737,73 +600,54 @@
 			const char *dfs_path,
 			struct junction_map *jucn,
 			int *consumedcntp,
-			bool *self_referralp)
+			BOOL *self_referralp)
 {
 	struct connection_struct conns;
 	struct connection_struct *conn = &conns;
-	char *targetpath = NULL;
+	struct dfs_path dp;
+	pstring conn_path;
+	pstring targetpath;
 	int snum;
 	NTSTATUS status = NT_STATUS_NOT_FOUND;
-	bool dummy;
-	struct dfs_path *pdp = TALLOC_P(ctx, struct dfs_path);
+	BOOL dummy;
 
-	if (!pdp) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
 	ZERO_STRUCT(conns);
+
 	*self_referralp = False;
 
-	status = parse_dfs_path(NULL, dfs_path, False, pdp, &dummy);
+	status = parse_dfs_path(NULL, dfs_path, False, &dp, &dummy);
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
 	}
 
-	jucn->service_name = talloc_strdup(ctx, pdp->servicename);
-	jucn->volume_name = talloc_strdup(ctx, pdp->reqpath);
-	if (!jucn->service_name || !jucn->volume_name) {
-		TALLOC_FREE(pdp);
-		return NT_STATUS_NO_MEMORY;
-	}
+	fstrcpy(jucn->service_name, dp.servicename);
+	pstrcpy(jucn->volume_name, dp.reqpath);
 
 	/* Verify the share is a dfs root */
 	snum = lp_servicenumber(jucn->service_name);
 	if(snum < 0) {
-		fstring service_name;
-		fstrcpy(service_name, jucn->service_name);
-		if ((snum = find_service(service_name)) < 0) {
+		if ((snum = find_service(jucn->service_name)) < 0) {
 			return NT_STATUS_NOT_FOUND;
 		}
-		TALLOC_FREE(jucn->service_name);
-		jucn->service_name = talloc_strdup(ctx, service_name);
-		if (!jucn->service_name) {
-			TALLOC_FREE(pdp);
-			return NT_STATUS_NO_MEMORY;
-		}
 	}
 
-	if (!lp_msdfs_root(snum) && (*lp_msdfs_proxy(snum) == '\0')) {
-		DEBUG(3,("get_referred_path: |%s| in dfs path %s is not "
-			"a dfs root.\n",
-			pdp->servicename, dfs_path));
-		TALLOC_FREE(pdp);
+	if (!lp_msdfs_root(snum)) {
+		DEBUG(3,("get_referred_path: |%s| in dfs path %s is not a dfs root.\n",
+			 dp.servicename, dfs_path));
 		return NT_STATUS_NOT_FOUND;
 	}
 
 	/*
 	 * Self referrals are tested with a anonymous IPC connection and
-	 * a GET_DFS_REFERRAL call to \\server\share. (which means
-	 * dp.reqpath[0] points to an empty string). create_conn_struct cd's
-	 * into the directory and will fail if it cannot (as the anonymous
-	 * user). Cope with this.
+	 * a GET_DFS_REFERRAL call to \\server\share. (which means dp.reqpath[0] points
+	 * to an empty string). create_conn_struct cd's into the directory and will
+	 * fail if it cannot (as the anonymous user). Cope with this.
 	 */
 
-	if (pdp->reqpath[0] == '\0') {
-		char *tmp;
+	if (dp.reqpath[0] == '\0') {
 		struct referral *ref;
 
 		if (*lp_msdfs_proxy(snum) == '\0') {
-			TALLOC_FREE(pdp);
 			return self_ref(ctx,
 					dfs_path,
 					jucn,
@@ -811,67 +655,44 @@
 					self_referralp);
 		}
 
-		/*
+		/* 
 		 * It's an msdfs proxy share. Redirect to
  		 * the configured target share.
  		 */
 
 		jucn->referral_count = 1;
 		if ((ref = TALLOC_ZERO_P(ctx, struct referral)) == NULL) {
-			TALLOC_FREE(pdp);
+			DEBUG(0, ("malloc failed for referral\n"));
 			return NT_STATUS_NO_MEMORY;
 		}
 
-		if (!(tmp = talloc_strdup(ctx, lp_msdfs_proxy(snum)))) {
-			TALLOC_FREE(pdp);
-			return NT_STATUS_NO_MEMORY;
+		pstrcpy(ref->alternate_path, lp_msdfs_proxy(snum));
+		if (dp.reqpath[0] != '\0') {
+			pstrcat(ref->alternate_path, dp.reqpath);
 		}
-
-		trim_string(tmp, "\\", 0);
-
-		ref->alternate_path = talloc_asprintf(ctx, "\\%s", tmp);
-		TALLOC_FREE(tmp);
-
-		if (!ref->alternate_path) {
-			TALLOC_FREE(pdp);
-			return NT_STATUS_NO_MEMORY;
-		}
-
-		if (pdp->reqpath[0] != '\0') {
-			ref->alternate_path = talloc_asprintf_append(
-					ref->alternate_path,
-					"%s",
-					pdp->reqpath);
-			if (!ref->alternate_path) {
-				TALLOC_FREE(pdp);
-				return NT_STATUS_NO_MEMORY;
-			}
-		}
 		ref->proximity = 0;
 		ref->ttl = REFERRAL_TTL;
 		jucn->referral_list = ref;
 		*consumedcntp = strlen(dfs_path);
-		TALLOC_FREE(pdp);
 		return NT_STATUS_OK;
 	}
 
-	status = create_conn_struct(ctx, conn, snum, lp_pathname(snum));
+	pstrcpy(conn_path, lp_pathname(snum));
+	status = create_conn_struct(conn, snum, conn_path);
 	if (!NT_STATUS_IS_OK(status)) {
-		TALLOC_FREE(pdp);
 		return status;
 	}
 
 	/* If this is a DFS path dfs_lookup should return
 	 * NT_STATUS_PATH_NOT_COVERED. */
 
-	status = dfs_path_lookup(ctx, conn, dfs_path, pdp,
-			False, consumedcntp, &targetpath);
+	status = dfs_path_lookup(conn, dfs_path, &dp,
+			False, consumedcntp, targetpath);
 
 	if (!NT_STATUS_EQUAL(status, NT_STATUS_PATH_NOT_COVERED)) {
 		DEBUG(3,("get_referred_path: No valid referrals for path %s\n",
 			dfs_path));
 		conn_free_internal(conn);
-		TALLOC_FREE(pdp);
 		return status;
 	}
 
@@ -882,24 +703,22 @@
 		DEBUG(3,("get_referred_path: failed to parse symlink "
 			"target %s\n", targetpath ));
 		conn_free_internal(conn);
-		TALLOC_FREE(pdp);
 		return NT_STATUS_NOT_FOUND;
 	}
 
 	conn_free_internal(conn);
-	TALLOC_FREE(pdp);
 	return NT_STATUS_OK;
 }
 
 static int setup_ver2_dfs_referral(const char *pathname,
-				char **ppdata,
+				char **ppdata, 
 				struct junction_map *junction,
 				int consumedcnt,
-				bool self_referral)
+				BOOL self_referral)
 {
 	char* pdata = *ppdata;
 
-	smb_ucs2_t *uni_requestedpath = NULL;
+	unsigned char uni_requestedpath[1024];
 	int uni_reqpathoffset1,uni_reqpathoffset2;
 	int uni_curroffset;
 	int requestedpathlen=0;
@@ -909,38 +728,30 @@
 
 	DEBUG(10,("Setting up version2 referral\nRequested path:\n"));
 
-	requestedpathlen = rpcstr_push_talloc(talloc_tos(),
-					&uni_requestedpath, pathname);
-	if (uni_requestedpath == NULL || requestedpathlen == 0) {
-		return -1;
-	}
+	requestedpathlen = rpcstr_push(uni_requestedpath, pathname, sizeof(pstring),
+				       STR_TERMINATE);
 
 	if (DEBUGLVL(10)) {
-		dump_data(0, (unsigned char *)uni_requestedpath,
-			requestedpathlen);
+	    dump_data(0, (const char *) uni_requestedpath,requestedpathlen);
 	}
 
 	DEBUG(10,("ref count = %u\n",junction->referral_count));
 
-	uni_reqpathoffset1 = REFERRAL_HEADER_SIZE +
+	uni_reqpathoffset1 = REFERRAL_HEADER_SIZE + 
 			VERSION2_REFERRAL_SIZE * junction->referral_count;
 
 	uni_reqpathoffset2 = uni_reqpathoffset1 + requestedpathlen;
 
 	uni_curroffset = uni_reqpathoffset2 + requestedpathlen;
 
-	reply_size = REFERRAL_HEADER_SIZE +
-			VERSION2_REFERRAL_SIZE*junction->referral_count +
-			2 * requestedpathlen;
+	reply_size = REFERRAL_HEADER_SIZE + VERSION2_REFERRAL_SIZE*junction->referral_count +
+					2 * requestedpathlen;
 	DEBUG(10,("reply_size: %u\n",reply_size));
 
 	/* add up the unicode lengths of all the referral paths */
 	for(i=0;i<junction->referral_count;i++) {
-		DEBUG(10,("referral %u : %s\n",
-			i,
-			junction->referral_list[i].alternate_path));
-		reply_size +=
-			(strlen(junction->referral_list[i].alternate_path)+1)*2;
+		DEBUG(10,("referral %u : %s\n",i,junction->referral_list[i].alternate_path));
+		reply_size += (strlen(junction->referral_list[i].alternate_path)+1)*2;
 	}
 
 	DEBUG(10,("reply_size = %u\n",reply_size));
@@ -960,10 +771,9 @@
 
 	/* create the header */
 	SSVAL(pdata,0,consumedcnt * 2); /* path consumed */
-	/* number of referral in this pkt */
-	SSVAL(pdata,2,junction->referral_count);
+	SSVAL(pdata,2,junction->referral_count); /* number of referral in this pkt */
 	if(self_referral) {
-		SIVAL(pdata,4,DFSREF_REFERRAL_SERVER | DFSREF_STORAGE_SERVER);
+		SIVAL(pdata,4,DFSREF_REFERRAL_SERVER | DFSREF_STORAGE_SERVER); 
 	} else {
 		SIVAL(pdata,4,DFSREF_STORAGE_SERVER);
 	}
@@ -981,19 +791,15 @@
 		} else {
 			SSVAL(pdata,offset+4,0);
 		}
-
-		/* ref_flags :use path_consumed bytes? */
-		SSVAL(pdata,offset+6,0);
+		SSVAL(pdata,offset+6,0); /* ref_flags :use path_consumed bytes? */
 		SIVAL(pdata,offset+8,ref->proximity);
 		SIVAL(pdata,offset+12,ref->ttl);
 
 		SSVAL(pdata,offset+16,uni_reqpathoffset1-offset);
 		SSVAL(pdata,offset+18,uni_reqpathoffset2-offset);
 		/* copy referred path into current offset */
-		unilen = rpcstr_push(pdata+uni_curroffset,
-					ref->alternate_path,
-					reply_size - uni_curroffset,
-					STR_UNICODE);
+		unilen = rpcstr_push(pdata+uni_curroffset, ref->alternate_path,
+				     sizeof(pstring), STR_UNICODE);
 
 		SSVAL(pdata,offset+20,uni_curroffset-offset);
 
@@ -1006,50 +812,41 @@
 }
 
 static int setup_ver3_dfs_referral(const char *pathname,
-				char **ppdata,
+				char **ppdata, 
 				struct junction_map *junction,
 				int consumedcnt,
-				bool self_referral)
+				BOOL self_referral)
 {
-	char *pdata = *ppdata;
+	char* pdata = *ppdata;
 
-	smb_ucs2_t *uni_reqpath = NULL;
+	unsigned char uni_reqpath[1024];
 	int uni_reqpathoffset1, uni_reqpathoffset2;
 	int uni_curroffset;
 	int reply_size = 0;
 
 	int reqpathlen = 0;
 	int offset,i=0;
-
+	
 	DEBUG(10,("setting up version3 referral\n"));
 
-	reqpathlen = rpcstr_push_talloc(talloc_tos(), &uni_reqpath, pathname);
-	if (uni_reqpath == NULL || reqpathlen == 0) {
-		return -1;
-	}
-
+	reqpathlen = rpcstr_push(uni_reqpath, pathname, sizeof(pstring), STR_TERMINATE);
+	
 	if (DEBUGLVL(10)) {
-		dump_data(0, (unsigned char *)uni_reqpath,
-			reqpathlen);
+	    dump_data(0, (char *) uni_reqpath,reqpathlen);
 	}
 
-	uni_reqpathoffset1 = REFERRAL_HEADER_SIZE +
-			VERSION3_REFERRAL_SIZE * junction->referral_count;
+	uni_reqpathoffset1 = REFERRAL_HEADER_SIZE + VERSION3_REFERRAL_SIZE * junction->referral_count;
 	uni_reqpathoffset2 = uni_reqpathoffset1 + reqpathlen;
 	reply_size = uni_curroffset = uni_reqpathoffset2 + reqpathlen;
 
 	for(i=0;i<junction->referral_count;i++) {
-		DEBUG(10,("referral %u : %s\n",
-			i,
-			junction->referral_list[i].alternate_path));
-		reply_size +=
-			(strlen(junction->referral_list[i].alternate_path)+1)*2;
+		DEBUG(10,("referral %u : %s\n",i,junction->referral_list[i].alternate_path));
+		reply_size += (strlen(junction->referral_list[i].alternate_path)+1)*2;
 	}
 
 	pdata = (char *)SMB_REALLOC(pdata,reply_size);
 	if(pdata == NULL) {
-		DEBUG(0,("version3 referral setup:"
-			"malloc failed for Realloc!\n"));
+		DEBUG(0,("version3 referral setup: malloc failed for Realloc!\n"));
 		return -1;
 	}
 	*ppdata = pdata;
@@ -1058,15 +855,15 @@
 	SSVAL(pdata,0,consumedcnt * 2); /* path consumed */
 	SSVAL(pdata,2,junction->referral_count); /* number of referral */
 	if(self_referral) {
-		SIVAL(pdata,4,DFSREF_REFERRAL_SERVER | DFSREF_STORAGE_SERVER);
+		SIVAL(pdata,4,DFSREF_REFERRAL_SERVER | DFSREF_STORAGE_SERVER); 
 	} else {
 		SIVAL(pdata,4,DFSREF_STORAGE_SERVER);
 	}
-
+	
 	/* copy in the reqpaths */
 	memcpy(pdata+uni_reqpathoffset1,uni_reqpath,reqpathlen);
 	memcpy(pdata+uni_reqpathoffset2,uni_reqpath,reqpathlen);
-
+	
 	offset = 8;
 	for(i=0;i<junction->referral_count;i++) {
 		struct referral* ref = &(junction->referral_list[i]);
@@ -1080,16 +877,14 @@
 			SSVAL(pdata,offset+4,0);
 		}
 
-		/* ref_flags :use path_consumed bytes? */
-		SSVAL(pdata,offset+6,0);
+		SSVAL(pdata,offset+6,0); /* ref_flags :use path_consumed bytes? */
 		SIVAL(pdata,offset+8,ref->ttl);
-
+	    
 		SSVAL(pdata,offset+12,uni_reqpathoffset1-offset);
 		SSVAL(pdata,offset+14,uni_reqpathoffset2-offset);
 		/* copy referred path into current offset */
 		unilen = rpcstr_push(pdata+uni_curroffset,ref->alternate_path,
-					reply_size - uni_curroffset,
-					STR_UNICODE | STR_TERMINATE);
+				     sizeof(pstring), STR_UNICODE | STR_TERMINATE);
 		SSVAL(pdata,offset+16,uni_curroffset-offset);
 		/* copy 0x10 bytes of 00's in the ServiceSite GUID */
 		memset(pdata+offset+18,'\0',16);
@@ -1112,12 +907,12 @@
 			int max_referral_level,
 			char **ppdata, NTSTATUS *pstatus)
 {
-	struct junction_map *junction = NULL;
+	struct junction_map junction;
 	int consumedcnt = 0;
-	bool self_referral = False;
+	BOOL self_referral = False;
 	int reply_size = 0;
 	char *pathnamep = NULL;
-	char *local_dfs_path = NULL;
+	pstring local_dfs_path;
 	TALLOC_CTX *ctx;
 
 	if (!(ctx=talloc_init("setup_dfs_referral"))) {
@@ -1125,6 +920,8 @@
 		return -1;
 	}
 
+	ZERO_STRUCT(junction);
+
 	/* get the junction entry */
 	if (!dfs_path) {
 		talloc_destroy(ctx);
@@ -1132,51 +929,34 @@
 		return -1;
 	}
 
-	/*
+	/* 
 	 * Trim pathname sent by client so it begins with only one backslash.
 	 * Two backslashes confuse some dfs clients
 	 */
 
-	local_dfs_path = talloc_strdup(ctx,dfs_path);
-	if (!local_dfs_path) {
-		*pstatus = NT_STATUS_NO_MEMORY;
-		talloc_destroy(ctx);
-		return -1;
-	}
+	pstrcpy(local_dfs_path, dfs_path);
 	pathnamep = local_dfs_path;
-	while (IS_DIRECTORY_SEP(pathnamep[0]) &&
-			IS_DIRECTORY_SEP(pathnamep[1])) {
+	while (IS_DIRECTORY_SEP(pathnamep[0]) && IS_DIRECTORY_SEP(pathnamep[1])) {
 		pathnamep++;
 	}
 
-	junction = TALLOC_ZERO_P(ctx, struct junction_map);
-	if (!junction) {
-		*pstatus = NT_STATUS_NO_MEMORY;
-		talloc_destroy(ctx);
-		return -1;
-	}
-
 	/* The following call can change cwd. */
-	*pstatus = get_referred_path(ctx, pathnamep, junction,
-			&consumedcnt, &self_referral);
+	*pstatus = get_referred_path(ctx, pathnamep, &junction, &consumedcnt, &self_referral);
 	if (!NT_STATUS_IS_OK(*pstatus)) {
 		vfs_ChDir(orig_conn,orig_conn->connectpath);
 		talloc_destroy(ctx);
 		return -1;
 	}
 	vfs_ChDir(orig_conn,orig_conn->connectpath);
-
+	
 	if (!self_referral) {
 		pathnamep[consumedcnt] = '\0';
 
 		if( DEBUGLVL( 3 ) ) {
 			int i=0;
-			dbgtext("setup_dfs_referral: Path %s to "
-				"alternate path(s):",
-				pathnamep);
-			for(i=0;i<junction->referral_count;i++)
-				dbgtext(" %s",
-				junction->referral_list[i].alternate_path);
+			dbgtext("setup_dfs_referral: Path %s to alternate path(s):",pathnamep);
+			for(i=0;i<junction.referral_count;i++)
+				dbgtext(" %s",junction.referral_list[i].alternate_path);
 			dbgtext(".\n");
 		}
 	}
@@ -1193,26 +973,23 @@
 
 	switch(max_referral_level) {
 	case 2:
-		reply_size = setup_ver2_dfs_referral(pathnamep,
-					ppdata, junction,
-					consumedcnt, self_referral);
+		reply_size = setup_ver2_dfs_referral(pathnamep, ppdata, &junction, 
+						     consumedcnt, self_referral);
 		break;
 	case 3:
-		reply_size = setup_ver3_dfs_referral(pathnamep, ppdata,
-					junction, consumedcnt, self_referral);
+		reply_size = setup_ver3_dfs_referral(pathnamep, ppdata, &junction, 
+						     consumedcnt, self_referral);
 		break;
 	default:
-		DEBUG(0,("setup_dfs_referral: Invalid dfs referral "
-			"version: %d\n",
-			max_referral_level));
+		DEBUG(0,("setup_dfs_referral: Invalid dfs referral version: %d\n", max_referral_level));
 		talloc_destroy(ctx);
 		*pstatus = NT_STATUS_INVALID_LEVEL;
 		return -1;
 	}
-
+      
 	if (DEBUGLVL(10)) {
 		DEBUGADD(0,("DFS Referral pdata:\n"));
-		dump_data(0,(uint8 *)*ppdata,reply_size);
+		dump_data(0,*ppdata,reply_size);
 	}
 
 	talloc_destroy(ctx);
@@ -1228,108 +1005,90 @@
  Creates a junction structure from a DFS pathname
 **********************************************************************/
 
-bool create_junction(TALLOC_CTX *ctx,
-		const char *dfs_path,
-		struct junction_map *jucn)
+BOOL create_junction(const char *dfs_path, struct junction_map *jucn)
 {
 	int snum;
-	bool dummy;
-	struct dfs_path *pdp = TALLOC_P(ctx,struct dfs_path);
-	NTSTATUS status;
+	BOOL dummy;
+	struct dfs_path dp;
+ 
+	NTSTATUS status = parse_dfs_path(NULL, dfs_path, False, &dp, &dummy);
 
-	if (!pdp) {
-		return False;
-	}
-	status = parse_dfs_path(NULL, dfs_path, False, pdp, &dummy);
 	if (!NT_STATUS_IS_OK(status)) {
 		return False;
 	}
 
 	/* check if path is dfs : validate first token */
-	if (!is_myname_or_ipaddr(pdp->hostname)) {
-		DEBUG(4,("create_junction: Invalid hostname %s "
-			"in dfs path %s\n",
-			pdp->hostname, dfs_path));
-		TALLOC_FREE(pdp);
+	if (!is_myname_or_ipaddr(dp.hostname)) {
+		DEBUG(4,("create_junction: Invalid hostname %s in dfs path %s\n",
+			dp.hostname, dfs_path));
 		return False;
 	}
 
 	/* Check for a non-DFS share */
-	snum = lp_servicenumber(pdp->servicename);
+	snum = lp_servicenumber(dp.servicename);
 
 	if(snum < 0 || !lp_msdfs_root(snum)) {
 		DEBUG(4,("create_junction: %s is not an msdfs root.\n",
-			pdp->servicename));
-		TALLOC_FREE(pdp);
+			dp.servicename));
 		return False;
 	}
 
-	jucn->service_name = talloc_strdup(ctx, pdp->servicename);
-	jucn->volume_name = talloc_strdup(ctx, pdp->reqpath);
-	jucn->comment = talloc_strdup(ctx, lp_comment(snum));
-
-	TALLOC_FREE(pdp);
-	if (!jucn->service_name || !jucn->volume_name || ! jucn->comment) {
-		return False;
-	}
+	fstrcpy(jucn->service_name,dp.servicename);
+	pstrcpy(jucn->volume_name,dp.reqpath);
+	pstrcpy(jucn->comment, lp_comment(snum));
 	return True;
 }
 
 /**********************************************************************
- Forms a valid Unix pathname from the junction
+ Forms a valid Unix pathname from the junction 
  **********************************************************************/
 
-static bool junction_to_local_path(const struct junction_map *jucn,
-				char **pp_path_out,
+static BOOL junction_to_local_path(struct junction_map *jucn,
+				char *path,
+				int max_pathlen,
 				connection_struct *conn_out)
 {
 	int snum;
+	pstring conn_path;
 
 	snum = lp_servicenumber(jucn->service_name);
 	if(snum < 0) {
 		return False;
 	}
-	if (!NT_STATUS_IS_OK(create_conn_struct(talloc_tos(),
-					conn_out, snum,
-					lp_pathname(snum)))) {
-		return False;
-	}
 
-	*pp_path_out = talloc_asprintf(conn_out->mem_ctx,
-			"%s/%s",
-			lp_pathname(snum),
-			jucn->volume_name);
-	if (!*pp_path_out) {
+	safe_strcpy(path, lp_pathname(snum), max_pathlen-1);
+	safe_strcat(path, "/", max_pathlen-1);
+	safe_strcat(path, jucn->volume_name, max_pathlen-1);
+
+	pstrcpy(conn_path, lp_pathname(snum));
+	if (!NT_STATUS_IS_OK(create_conn_struct(conn_out, snum, conn_path))) {
 		return False;
 	}
+
 	return True;
 }
 
-bool create_msdfs_link(const struct junction_map *jucn,
-		bool exists)
+BOOL create_msdfs_link(struct junction_map *jucn, BOOL exists)
 {
-	char *path = NULL;
-	char *msdfs_link = NULL;
+	pstring path;
+	pstring msdfs_link;
 	connection_struct conns;
  	connection_struct *conn = &conns;
 	int i=0;
-	bool insert_comma = False;
-	bool ret = False;
+	BOOL insert_comma = False;
+	BOOL ret = False;
 
 	ZERO_STRUCT(conns);
 
-	if(!junction_to_local_path(jucn, &path, conn)) {
+	if(!junction_to_local_path(jucn, path, sizeof(path), conn)) {
 		return False;
 	}
-
+  
 	/* Form the msdfs_link contents */
-	msdfs_link = talloc_strdup(conn->mem_ctx, "msdfs:");
-	if (!msdfs_link) {
-		goto out;
-	}
+	pstrcpy(msdfs_link, "msdfs:");
 	for(i=0; i<jucn->referral_count; i++) {
-		char *refpath = jucn->referral_list[i].alternate_path;
-
+		char* refpath = jucn->referral_list[i].alternate_path;
+      
 		/* Alternate paths always use Windows separators. */
 		trim_char(refpath, '\\', '\\');
 		if(*refpath == '\0') {
@@ -1339,18 +1098,10 @@
 			continue;
 		}
 		if (i > 0 && insert_comma) {
-			msdfs_link = talloc_asprintf_append_buffer(msdfs_link,
-					",%s",
-					refpath);
-		} else {
-			msdfs_link = talloc_asprintf_append_buffer(msdfs_link,
-					"%s",
-					refpath);
+			pstrcat(msdfs_link, ",");
 		}
 
-		if (!msdfs_link) {
-			goto out;
-		}
+		pstrcat(msdfs_link, refpath);
 		if (!insert_comma) {
 			insert_comma = True;
 		}
@@ -1366,12 +1117,12 @@
 	}
 
 	if(SMB_VFS_SYMLINK(conn, msdfs_link, path) < 0) {
-		DEBUG(1,("create_msdfs_link: symlink failed "
-			"%s -> %s\nError: %s\n", 
-			path, msdfs_link, strerror(errno)));
+		DEBUG(1,("create_msdfs_link: symlink failed %s -> %s\nError: %s\n", 
+				path, msdfs_link, strerror(errno)));
 		goto out;
 	}
-
+	
+	
 	ret = True;
 
 out:
@@ -1380,106 +1131,47 @@
 	return ret;
 }
 
-bool remove_msdfs_link(const struct junction_map *jucn)
+BOOL remove_msdfs_link(struct junction_map *jucn)
 {
-	char *path = NULL;
+	pstring path;
 	connection_struct conns;
  	connection_struct *conn = &conns;
-	bool ret = False;
+	BOOL ret = False;
 
 	ZERO_STRUCT(conns);
 
-	if( junction_to_local_path(jucn, &path, conn) ) {
+	if( junction_to_local_path(jucn, path, sizeof(path), conn) ) {
 		if( SMB_VFS_UNLINK(conn, path) == 0 ) {
 			ret = True;
 		}
+		talloc_destroy( conn->mem_ctx );
 	}
 
 	conn_free_internal(conn);
 	return ret;
 }
 
-/*********************************************************************
- Return the number of DFS links at the root of this share.
-*********************************************************************/
-
-static int count_dfs_links(TALLOC_CTX *ctx, int snum)
-{
-	size_t cnt = 0;
-	SMB_STRUCT_DIR *dirp = NULL;
-	char *dname = NULL;
-	const char *connect_path = lp_pathname(snum);
-	const char *msdfs_proxy = lp_msdfs_proxy(snum);
-	connection_struct conn;
-
-	ZERO_STRUCT(conn);
-
-	if(*connect_path == '\0') {
-		return 0;
-	}
-
-	/*
-	 * Fake up a connection struct for the VFS layer.
-	 */
-
-	if (!NT_STATUS_IS_OK(create_conn_struct(talloc_tos(),
-					&conn, snum, connect_path))) {
-		return 0;
-	}
-
-	/* Count a link for the msdfs root - convention */
-	cnt = 1;
-
-	/* No more links if this is an msdfs proxy. */
-	if (*msdfs_proxy != '\0') {
-		goto out;
-	}
-
-	/* Now enumerate all dfs links */
-	dirp = SMB_VFS_OPENDIR(&conn, ".", NULL, 0);
-	if(!dirp) {
-		goto out;
-	}
-
-	while ((dname = vfs_readdirname(&conn, dirp)) != NULL) {
-		if (is_msdfs_link(&conn,
-				dname,
-				NULL)) {
-			cnt++;
-		}
-	}
-
-	SMB_VFS_CLOSEDIR(&conn,dirp);
-
-out:
-
-	conn_free_internal(&conn);
-	return cnt;
-}
-
-/*********************************************************************
-*********************************************************************/
-
 static int form_junctions(TALLOC_CTX *ctx,
 				int snum,
 				struct junction_map *jucn,
-				size_t jn_remain)
+				int jn_remain)
 {
-	size_t cnt = 0;
-	SMB_STRUCT_DIR *dirp = NULL;
-	char *dname = NULL;
-	const char *connect_path = lp_pathname(snum);
+	int cnt = 0;
+	SMB_STRUCT_DIR *dirp;
+	char *dname;
+	pstring connect_path;
 	char *service_name = lp_servicename(snum);
-	const char *msdfs_proxy = lp_msdfs_proxy(snum);
 	connection_struct conn;
 	struct referral *ref = NULL;
-
+ 
 	ZERO_STRUCT(conn);
 
-	if (jn_remain == 0) {
+	if (jn_remain <= 0) {
 		return 0;
 	}
 
+	pstrcpy(connect_path,lp_pathname(snum));
+
 	if(*connect_path == '\0') {
 		return 0;
 	}
@@ -1488,48 +1180,37 @@
 	 * Fake up a connection struct for the VFS layer.
 	 */
 
-	if (!NT_STATUS_IS_OK(create_conn_struct(ctx, &conn, snum, connect_path))) {
+	if (!NT_STATUS_IS_OK(create_conn_struct(&conn, snum, connect_path))) {
 		return 0;
 	}
 
-	/* form a junction for the msdfs root - convention
+	/* form a junction for the msdfs root - convention 
 	   DO NOT REMOVE THIS: NT clients will not work with us
 	   if this is not present
-	*/
-	jucn[cnt].service_name = talloc_strdup(ctx,service_name);
-	jucn[cnt].volume_name = talloc_strdup(ctx, "");
-	if (!jucn[cnt].service_name || !jucn[cnt].volume_name) {
-		goto out;
-	}
+	*/ 
+	fstrcpy(jucn[cnt].service_name, service_name);
+	jucn[cnt].volume_name[0] = '\0';
 	jucn[cnt].referral_count = 1;
 
 	ref = jucn[cnt].referral_list = TALLOC_ZERO_P(ctx, struct referral);
 	if (jucn[cnt].referral_list == NULL) {
+		DEBUG(0, ("talloc failed!\n"));
 		goto out;
 	}
 
 	ref->proximity = 0;
 	ref->ttl = REFERRAL_TTL;
-	if (*msdfs_proxy != '\0') {
-		ref->alternate_path = talloc_strdup(ctx,
-						msdfs_proxy);
-	} else {
-		ref->alternate_path = talloc_asprintf(ctx,
-			"\\\\%s\\%s",
-			get_local_machine_name(),
-			service_name);
-	}
-
-	if (!ref->alternate_path) {
+	if (*lp_msdfs_proxy(snum) != '\0') {
+		pstrcpy(ref->alternate_path, lp_msdfs_proxy(snum));
+		cnt++;
 		goto out;
 	}
+
+	pstr_sprintf(ref->alternate_path, "\\\\%s\\%s",
+			get_local_machine_name(),
+			service_name);
 	cnt++;
 
-	/* Don't enumerate if we're an msdfs proxy. */
-	if (*msdfs_proxy != '\0') {
-		goto out;
-	}
-
 	/* Now enumerate all dfs links */
 	dirp = SMB_VFS_OPENDIR(&conn, ".", NULL, 0);
 	if(!dirp) {
@@ -1537,147 +1218,82 @@
 	}
 
 	while ((dname = vfs_readdirname(&conn, dirp)) != NULL) {
-		char *link_target = NULL;
+		pstring link_target;
 		if (cnt >= jn_remain) {
 			SMB_VFS_CLOSEDIR(&conn,dirp);
-			DEBUG(2, ("form_junctions: ran out of MSDFS "
-				"junction slots"));
+			DEBUG(2, ("ran out of MSDFS junction slots"));
 			goto out;
 		}
-		if (is_msdfs_link_internal(ctx,
-					&conn,
-					dname, &link_target,
-					NULL)) {
+		if (is_msdfs_link(&conn, dname, link_target, NULL)) {
 			if (parse_msdfs_symlink(ctx,
 					link_target,
 					&jucn[cnt].referral_list,
 					&jucn[cnt].referral_count)) {
 
-				jucn[cnt].service_name = talloc_strdup(ctx,
-								service_name);
-				jucn[cnt].volume_name = talloc_strdup(ctx,
-								dname);
-				if (!jucn[cnt].service_name ||
-						!jucn[cnt].volume_name) {
-					goto out;
-				}
+				fstrcpy(jucn[cnt].service_name, service_name);
+				pstrcpy(jucn[cnt].volume_name, dname);
 				cnt++;
 			}
 		}
 	}
+	
+	SMB_VFS_CLOSEDIR(&conn,dirp);
 
 out:
 
-	if (dirp) {
-		SMB_VFS_CLOSEDIR(&conn,dirp);
-	}
-
 	conn_free_internal(&conn);
 	return cnt;
 }
 
-struct junction_map *enum_msdfs_links(TALLOC_CTX *ctx, size_t *p_num_jn)
+int enum_msdfs_links(TALLOC_CTX *ctx, struct junction_map *jucn, int jn_max)
 {
-	struct junction_map *jn = NULL;
 	int i=0;
-	size_t jn_count = 0;
 	int sharecount = 0;
+	int jn_count = 0;
 
-	*p_num_jn = 0;
 	if(!lp_host_msdfs()) {
-		return NULL;
+		return 0;
 	}
 
 	/* Ensure all the usershares are loaded. */
 	become_root();
-	load_registry_shares();
 	sharecount = load_usershare_shares();
 	unbecome_root();
 
-	for(i=0;i < sharecount;i++) {
+	for(i=0;i < sharecount && (jn_max - jn_count) > 0;i++) {
 		if(lp_msdfs_root(i)) {
-			jn_count += count_dfs_links(ctx, i);
+			jn_count += form_junctions(ctx, i,jucn,jn_max - jn_count);
 		}
 	}
-	if (jn_count == 0) {
-		return NULL;
-	}
-	jn = TALLOC_ARRAY(ctx,  struct junction_map, jn_count);
-	if (!jn) {
-		return NULL;
-	}
-	for(i=0; i < sharecount; i++) {
-		if (*p_num_jn >= jn_count) {
-			break;
-		}
-		if(lp_msdfs_root(i)) {
-			*p_num_jn += form_junctions(ctx, i,
-					&jn[*p_num_jn],
-					jn_count - *p_num_jn);
-		}
-	}
-	return jn;
+	return jn_count;
 }
 
 /******************************************************************************
  Core function to resolve a dfs pathname.
 ******************************************************************************/
 
-NTSTATUS resolve_dfspath(TALLOC_CTX *ctx,
-			connection_struct *conn,
-			bool dfs_pathnames,
-			const char *name_in,
-			char **pp_name_out)
+NTSTATUS resolve_dfspath(connection_struct *conn, BOOL dfs_pathnames, pstring name)
 {
 	NTSTATUS status = NT_STATUS_OK;
-	bool dummy;
+	BOOL dummy;
 	if (dfs_pathnames) {
-		status = dfs_redirect(ctx,
-					conn,
-					name_in,
-					False,
-					pp_name_out,
-					&dummy);
-	} else {
-		/*
-		 * Cheat and just return a copy of the in ptr.
-		 * Once srvstr_get_path() uses talloc it'll
-		 * be a talloced ptr anyway.
-		 */
-		*pp_name_out = CONST_DISCARD(char *,name_in);
+		status = dfs_redirect(conn, name, False, &dummy);
 	}
 	return status;
 }
 
 /******************************************************************************
  Core function to resolve a dfs pathname possibly containing a wildcard.
- This function is identical to the above except for the bool param to
+ This function is identical to the above except for the BOOL param to
  dfs_redirect but I need this to be separate so it's really clear when
  we're allowing wildcards and when we're not. JRA.
 ******************************************************************************/
 
-NTSTATUS resolve_dfspath_wcard(TALLOC_CTX *ctx,
-				connection_struct *conn,
-				bool dfs_pathnames,
-				const char *name_in,
-				char **pp_name_out,
-				bool *ppath_contains_wcard)
+NTSTATUS resolve_dfspath_wcard(connection_struct *conn, BOOL dfs_pathnames, pstring name, BOOL *ppath_contains_wcard)
 {
 	NTSTATUS status = NT_STATUS_OK;
 	if (dfs_pathnames) {
-		status = dfs_redirect(ctx,
-					conn,
-					name_in,
-					True,
-					pp_name_out,
-					ppath_contains_wcard);
-	} else {
-		/*
-		 * Cheat and just return a copy of the in ptr.
-		 * Once srvstr_get_path() uses talloc it'll
-		 * be a talloced ptr anyway.
-		 */
-		*pp_name_out = CONST_DISCARD(char *,name_in);
+		status = dfs_redirect(conn, name, True, ppath_contains_wcard);
 	}
 	return status;
 }

Modified: branches/samba/upstream/source/smbd/negprot.c
===================================================================
--- branches/samba/upstream/source/smbd/negprot.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/negprot.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -2,11 +2,10 @@
    Unix SMB/CIFS implementation.
    negprot reply code
    Copyright (C) Andrew Tridgell 1992-1998
-   Copyright (C) Volker Lendecke 2007
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -24,11 +24,11 @@
 extern enum protocol_types Protocol;
 extern int max_recv;
 
-bool global_encrypted_passwords_negotiated = False;
-bool global_spnego_negotiated = False;
+BOOL global_encrypted_passwords_negotiated = False;
+BOOL global_spnego_negotiated = False;
 struct auth_context *negprot_global_auth_context = NULL;
 
-static void get_challenge(uint8 buff[8])
+static void get_challenge(char buff[8]) 
 {
 	NTSTATUS nt_status;
 	const uint8 *cryptkey;
@@ -43,7 +43,7 @@
 	DEBUG(10, ("get challenge: creating negprot_global_auth_context\n"));
 	if (!NT_STATUS_IS_OK(nt_status = make_auth_context_subsystem(&negprot_global_auth_context))) {
 		DEBUG(0, ("make_auth_context_subsystem returned %s", nt_errstr(nt_status)));
-		smb_panic("cannot make_negprot_global_auth_context!");
+		smb_panic("cannot make_negprot_global_auth_context!\n");
 	}
 	DEBUG(10, ("get challenge: getting challenge\n"));
 	cryptkey = negprot_global_auth_context->get_ntlm_challenge(negprot_global_auth_context);
@@ -54,39 +54,39 @@
  Reply for the core protocol.
 ****************************************************************************/
 
-static void reply_corep(struct smb_request *req, uint16 choice)
+static int reply_corep(char *inbuf, char *outbuf)
 {
-	reply_outbuf(req, 1, 0);
-	SSVAL(req->outbuf, smb_vwv0, choice);
+	int outsize = set_message(outbuf,1,0,True);
 
 	Protocol = PROTOCOL_CORE;
+	
+	return outsize;
 }
 
 /****************************************************************************
  Reply for the coreplus protocol.
 ****************************************************************************/
 
-static void reply_coreplus(struct smb_request *req, uint16 choice)
+static int reply_coreplus(char *inbuf, char *outbuf)
 {
 	int raw = (lp_readraw()?1:0) | (lp_writeraw()?2:0);
-
-	reply_outbuf(req, 13, 0);
-
-	SSVAL(req->outbuf,smb_vwv0,choice);
-	SSVAL(req->outbuf,smb_vwv5,raw); /* tell redirector we support
+	int outsize = set_message(outbuf,13,0,True);
+	SSVAL(outbuf,smb_vwv5,raw); /* tell redirector we support
 			readbraw and writebraw (possibly) */
 	/* Reply, SMBlockread, SMBwritelock supported. */
-	SCVAL(req->outbuf,smb_flg,FLAG_REPLY|FLAG_SUPPORT_LOCKREAD);
-	SSVAL(req->outbuf,smb_vwv1,0x1); /* user level security, don't
-					  * encrypt */
+	SCVAL(outbuf,smb_flg,FLAG_REPLY|FLAG_SUPPORT_LOCKREAD);
+	SSVAL(outbuf,smb_vwv1,0x1); /* user level security, don't encrypt */	
+
 	Protocol = PROTOCOL_COREPLUS;
+
+	return outsize;
 }
 
 /****************************************************************************
  Reply for the lanman 1.0 protocol.
 ****************************************************************************/
 
-static void reply_lanman1(struct smb_request *req, uint16 choice)
+static int reply_lanman1(char *inbuf, char *outbuf)
 {
 	int raw = (lp_readraw()?1:0) | (lp_writeraw()?2:0);
 	int secword=0;
@@ -99,38 +99,36 @@
 	if (global_encrypted_passwords_negotiated)
 		secword |= NEGOTIATE_SECURITY_CHALLENGE_RESPONSE;
 
-	reply_outbuf(req, 13, global_encrypted_passwords_negotiated?8:0);
-
-	SSVAL(req->outbuf,smb_vwv0,choice);
-	SSVAL(req->outbuf,smb_vwv1,secword);
+	set_message(outbuf,13,global_encrypted_passwords_negotiated?8:0,True);
+	SSVAL(outbuf,smb_vwv1,secword); 
 	/* Create a token value and add it to the outgoing packet. */
 	if (global_encrypted_passwords_negotiated) {
-		get_challenge((uint8 *)smb_buf(req->outbuf));
-		SSVAL(req->outbuf,smb_vwv11, 8);
+		get_challenge(smb_buf(outbuf));
+		SSVAL(outbuf,smb_vwv11, 8);
 	}
 
 	Protocol = PROTOCOL_LANMAN1;
 
 	/* Reply, SMBlockread, SMBwritelock supported. */
-	SCVAL(req->outbuf,smb_flg,FLAG_REPLY|FLAG_SUPPORT_LOCKREAD);
-	SSVAL(req->outbuf,smb_vwv2,max_recv);
-	SSVAL(req->outbuf,smb_vwv3,lp_maxmux()); /* maxmux */
-	SSVAL(req->outbuf,smb_vwv4,1);
-	SSVAL(req->outbuf,smb_vwv5,raw); /* tell redirector we support
+	SCVAL(outbuf,smb_flg,FLAG_REPLY|FLAG_SUPPORT_LOCKREAD);
+	SSVAL(outbuf,smb_vwv2,max_recv);
+	SSVAL(outbuf,smb_vwv3,lp_maxmux()); /* maxmux */
+	SSVAL(outbuf,smb_vwv4,1);
+	SSVAL(outbuf,smb_vwv5,raw); /* tell redirector we support
 		readbraw writebraw (possibly) */
-	SIVAL(req->outbuf,smb_vwv6,sys_getpid());
-	SSVAL(req->outbuf,smb_vwv10, set_server_zone_offset(t)/60);
+	SIVAL(outbuf,smb_vwv6,sys_getpid());
+	SSVAL(outbuf,smb_vwv10, set_server_zone_offset(t)/60);
 
-	srv_put_dos_date((char *)req->outbuf,smb_vwv8,t);
+	srv_put_dos_date(outbuf,smb_vwv8,t);
 
-	return;
+	return (smb_len(outbuf)+4);
 }
 
 /****************************************************************************
  Reply for the lanman 2.0 protocol.
 ****************************************************************************/
 
-static void reply_lanman2(struct smb_request *req, uint16 choice)
+static int reply_lanman2(char *inbuf, char *outbuf)
 {
 	int raw = (lp_readraw()?1:0) | (lp_writeraw()?2:0);
 	int secword=0;
@@ -143,28 +141,28 @@
 	if (global_encrypted_passwords_negotiated)
 		secword |= NEGOTIATE_SECURITY_CHALLENGE_RESPONSE;
 
-	reply_outbuf(req, 13, global_encrypted_passwords_negotiated?8:0);
+	set_message(outbuf,13,global_encrypted_passwords_negotiated?8:0,True);
+	SSVAL(outbuf,smb_vwv1,secword); 
+	SIVAL(outbuf,smb_vwv6,sys_getpid());
 
-	SSVAL(req->outbuf,smb_vwv0,choice);
-	SSVAL(req->outbuf,smb_vwv1,secword);
-	SIVAL(req->outbuf,smb_vwv6,sys_getpid());
-
 	/* Create a token value and add it to the outgoing packet. */
 	if (global_encrypted_passwords_negotiated) {
-		get_challenge((uint8 *)smb_buf(req->outbuf));
-		SSVAL(req->outbuf,smb_vwv11, 8);
+		get_challenge(smb_buf(outbuf));
+		SSVAL(outbuf,smb_vwv11, 8);
 	}
 
 	Protocol = PROTOCOL_LANMAN2;
 
 	/* Reply, SMBlockread, SMBwritelock supported. */
-	SCVAL(req->outbuf,smb_flg,FLAG_REPLY|FLAG_SUPPORT_LOCKREAD);
-	SSVAL(req->outbuf,smb_vwv2,max_recv);
-	SSVAL(req->outbuf,smb_vwv3,lp_maxmux());
-	SSVAL(req->outbuf,smb_vwv4,1);
-	SSVAL(req->outbuf,smb_vwv5,raw); /* readbraw and/or writebraw */
-	SSVAL(req->outbuf,smb_vwv10, set_server_zone_offset(t)/60);
-	srv_put_dos_date((char *)req->outbuf,smb_vwv8,t);
+	SCVAL(outbuf,smb_flg,FLAG_REPLY|FLAG_SUPPORT_LOCKREAD);
+	SSVAL(outbuf,smb_vwv2,max_recv);
+	SSVAL(outbuf,smb_vwv3,lp_maxmux()); 
+	SSVAL(outbuf,smb_vwv4,1);
+	SSVAL(outbuf,smb_vwv5,raw); /* readbraw and/or writebraw */
+	SSVAL(outbuf,smb_vwv10, set_server_zone_offset(t)/60);
+	srv_put_dos_date(outbuf,smb_vwv8,t);
+
+	return (smb_len(outbuf)+4);
 }
 
 /****************************************************************************
@@ -229,10 +227,7 @@
 		char *host_princ_s = NULL;
 		name_to_fqdn(myname, global_myname());
 		strlower_m(myname);
-		if (asprintf(&host_princ_s, "cifs/%s@%s", myname, lp_realm())
-		    == -1) {
-			return data_blob_null;
-		}
+		asprintf(&host_princ_s, "cifs/%s@%s", myname, lp_realm());
 		blob = spnego_gen_negTokenInit(guid, OIDs_krb5, host_princ_s);
 		SAFE_FREE(host_princ_s);
 	}
@@ -244,7 +239,7 @@
  Reply for the nt protocol.
 ****************************************************************************/
 
-static void reply_nt1(struct smb_request *req, uint16 choice)
+static int reply_nt1(char *inbuf, char *outbuf)
 {
 	/* dual names + lock_and_read + nt SMBs + remote API calls */
 	int capabilities = CAP_NT_FIND|CAP_LOCK_AND_READ|
@@ -252,9 +247,8 @@
 
 	int secword=0;
 	char *p, *q;
-	bool negotiate_spnego = False;
+	BOOL negotiate_spnego = False;
 	time_t t = time(NULL);
-	ssize_t ret;
 
 	global_encrypted_passwords_negotiated = lp_encrypted_passwords();
 
@@ -262,30 +256,27 @@
 	   WinXP sets it and Vista does not. But we have to 
 	   distinguish from NT which doesn't set it either. */
 
-	if ( (req->flags2 & FLAGS2_EXTENDED_SECURITY) &&
-		((req->flags2 & FLAGS2_UNKNOWN_BIT4) == 0) )
+	if ( (SVAL(inbuf, smb_flg2) & FLAGS2_EXTENDED_SECURITY) &&
+		((SVAL(inbuf, smb_flg2) & FLAGS2_UNKNOWN_BIT4) == 0) ) 
 	{
 		if (get_remote_arch() != RA_SAMBA) {
 			set_remote_arch( RA_VISTA );
 		}
 	}
 
-	reply_outbuf(req,17,0);
-
 	/* do spnego in user level security if the client
 	   supports it and we can do encrypted passwords */
 	
 	if (global_encrypted_passwords_negotiated && 
 	    (lp_security() != SEC_SHARE) &&
 	    lp_use_spnego() &&
-	    (req->flags2 & FLAGS2_EXTENDED_SECURITY)) {
+	    (SVAL(inbuf, smb_flg2) & FLAGS2_EXTENDED_SECURITY)) {
 		negotiate_spnego = True;
 		capabilities |= CAP_EXTENDED_SECURITY;
 		add_to_common_flags2(FLAGS2_EXTENDED_SECURITY);
-		/* Ensure FLAGS2_EXTENDED_SECURITY gets set in this reply
-		   (already partially constructed. */
-		SSVAL(req->outbuf, smb_flg2,
-		      req->flags2 | FLAGS2_EXTENDED_SECURITY);
+		/* Ensure FLAGS2_EXTENDED_SECURITY gets set in this reply (already
+			partially constructed. */
+		SSVAL(outbuf,smb_flg2, SVAL(outbuf,smb_flg2) | FLAGS2_EXTENDED_SECURITY);
 	}
 	
 	capabilities |= CAP_NT_SMBS|CAP_RPC_REMOTE_APIS|CAP_UNICODE;
@@ -330,72 +321,53 @@
 		}
 	}
 
-	SSVAL(req->outbuf,smb_vwv0,choice);
-	SCVAL(req->outbuf,smb_vwv1,secword);
+	set_message(outbuf,17,0,True);
 	
+	SCVAL(outbuf,smb_vwv1,secword);
+	
 	Protocol = PROTOCOL_NT1;
 	
-	SSVAL(req->outbuf,smb_vwv1+1,lp_maxmux()); /* maxmpx */
-	SSVAL(req->outbuf,smb_vwv2+1,1); /* num vcs */
-	SIVAL(req->outbuf,smb_vwv3+1,max_recv); /* max buffer. LOTS! */
-	SIVAL(req->outbuf,smb_vwv5+1,0x10000); /* raw size. full 64k */
-	SIVAL(req->outbuf,smb_vwv7+1,sys_getpid()); /* session key */
-	SIVAL(req->outbuf,smb_vwv9+1,capabilities); /* capabilities */
-	put_long_date((char *)req->outbuf+smb_vwv11+1,t);
-	SSVALS(req->outbuf,smb_vwv15+1,set_server_zone_offset(t)/60);
+	SSVAL(outbuf,smb_vwv1+1,lp_maxmux()); /* maxmpx */
+	SSVAL(outbuf,smb_vwv2+1,1); /* num vcs */
+	SIVAL(outbuf,smb_vwv3+1,max_recv); /* max buffer. LOTS! */
+	SIVAL(outbuf,smb_vwv5+1,0x10000); /* raw size. full 64k */
+	SIVAL(outbuf,smb_vwv7+1,sys_getpid()); /* session key */
+	SIVAL(outbuf,smb_vwv9+1,capabilities); /* capabilities */
+	put_long_date(outbuf+smb_vwv11+1,t);
+	SSVALS(outbuf,smb_vwv15+1,set_server_zone_offset(t)/60);
 	
-	p = q = smb_buf(req->outbuf);
+	p = q = smb_buf(outbuf);
 	if (!negotiate_spnego) {
 		/* Create a token value and add it to the outgoing packet. */
 		if (global_encrypted_passwords_negotiated) {
-			uint8 chal[8];
 			/* note that we do not send a challenge at all if
 			   we are using plaintext */
-			get_challenge(chal);
-			ret = message_push_blob(
-				&req->outbuf, data_blob_const(chal, sizeof(chal)));
-			if (ret == -1) {
-				DEBUG(0, ("Could not push challenge\n"));
-				reply_nterror(req, NT_STATUS_NO_MEMORY);
-				return;
-			}
-			SCVAL(req->outbuf, smb_vwv16+1, ret);
-			p += ret;
+			get_challenge(p);
+			SCVAL(outbuf,smb_vwv16+1,8);
+			p += 8;
 		}
-		ret = message_push_string(&req->outbuf, lp_workgroup(),
-					  STR_UNICODE|STR_TERMINATE
-					  |STR_NOALIGN);
-		if (ret == -1) {
-			DEBUG(0, ("Could not push challenge\n"));
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
-			return;
-		}
+		p += srvstr_push(outbuf, p, lp_workgroup(), BUFFER_SIZE - (p-outbuf), 
+				 STR_UNICODE|STR_TERMINATE|STR_NOALIGN);
 		DEBUG(3,("not using SPNEGO\n"));
 	} else {
 		DATA_BLOB spnego_blob = negprot_spnego();
 
 		if (spnego_blob.data == NULL) {
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
-			return;
+			return ERROR_NT(NT_STATUS_NO_MEMORY);
 		}
 
-		ret = message_push_blob(&req->outbuf, spnego_blob);
-		if (ret == -1) {
-			DEBUG(0, ("Could not push spnego blob\n"));
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
-			return;
-		}
-		p += ret;
+		memcpy(p, spnego_blob.data, spnego_blob.length);
+		p += spnego_blob.length;
 		data_blob_free(&spnego_blob);
 
-		SCVAL(req->outbuf,smb_vwv16+1, 0);
+		SCVAL(outbuf,smb_vwv16+1, 0);
 		DEBUG(3,("using SPNEGO\n"));
 	}
 	
-	SSVAL(req->outbuf,smb_vwv17, p - q); /* length of challenge+domain
-					      * strings */
-
-	return;
+	SSVAL(outbuf,smb_vwv17, p - q); /* length of challenge+domain strings */
+	set_message_end(outbuf, p);
+	
+	return (smb_len(outbuf)+4);
 }
 
 /* these are the protocol lists used for auto architecture detection:
@@ -483,7 +455,7 @@
 static const struct {
 	const char *proto_name;
 	const char *short_name;
-	void (*proto_reply_fn)(struct smb_request *req, uint16 choice);
+	int (*proto_reply_fn)(char *, char *);
 	int protocol_level;
 } supported_protocols[] = {
 	{"NT LANMAN 1.0",           "NT1",      reply_nt1,      PROTOCOL_NT1},
@@ -505,19 +477,19 @@
  conn POINTER CAN BE NULL HERE !
 ****************************************************************************/
 
-void reply_negprot(struct smb_request *req)
+int reply_negprot(connection_struct *conn, 
+		  char *inbuf,char *outbuf, int dum_size, 
+		  int dum_buffsize)
 {
-	size_t size = smb_len(req->inbuf) + 4;
+	int outsize = set_message(outbuf,1,0,True);
+	int Index=0;
 	int choice= -1;
 	int protocol;
 	char *p;
-	int bcc = SVAL(smb_buf(req->inbuf),-2);
+	int bcc = SVAL(smb_buf(inbuf),-2);
 	int arch = ARCH_ALL;
-	int num_cliprotos;
-	char **cliprotos;
-	int i;
 
-	static bool done_negprot = False;
+	static BOOL done_negprot = False;
 
 	START_PROFILE(SMBnegprot);
 
@@ -527,82 +499,41 @@
 	}
 	done_negprot = True;
 
-	if (req->inbuf[size-1] != '\0') {
-		DEBUG(0, ("negprot protocols not 0-terminated\n"));
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBnegprot);
-		return;
-	}
-
-	p = smb_buf(req->inbuf) + 1;
-
-	num_cliprotos = 0;
-	cliprotos = NULL;
-
-	while (p < (smb_buf(req->inbuf) + bcc)) {
-
-		char **tmp;
-
-		tmp = TALLOC_REALLOC_ARRAY(talloc_tos(), cliprotos, char *,
-					   num_cliprotos+1);
-		if (tmp == NULL) {
-			DEBUG(0, ("talloc failed\n"));
-			TALLOC_FREE(cliprotos);
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
-			END_PROFILE(SMBnegprot);
-			return;
-		}
-
-		cliprotos = tmp;
-
-		if (pull_ascii_talloc(cliprotos, &cliprotos[num_cliprotos], p)
-		    == (size_t)-1) {
-			DEBUG(0, ("pull_ascii_talloc failed\n"));
-			TALLOC_FREE(cliprotos);
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
-			END_PROFILE(SMBnegprot);
-			return;
-		}
-
-		DEBUG(3, ("Requested protocol [%s]\n",
-			  cliprotos[num_cliprotos]));
-
-		num_cliprotos += 1;
-		p += strlen(p) + 2;
-	}
-
-	for (i=0; i<num_cliprotos; i++) {
-		if (strcsequal(cliprotos[i], "Windows for Workgroups 3.1a"))
-			arch &= ( ARCH_WFWG | ARCH_WIN95 | ARCH_WINNT
-				  | ARCH_WIN2K );
-		else if (strcsequal(cliprotos[i], "DOS LM1.2X002"))
+	p = smb_buf(inbuf)+1;
+	while (p < (smb_buf(inbuf) + bcc)) { 
+		Index++;
+		DEBUG(3,("Requested protocol [%s]\n",p));
+		if (strcsequal(p,"Windows for Workgroups 3.1a"))
+			arch &= ( ARCH_WFWG | ARCH_WIN95 | ARCH_WINNT | ARCH_WIN2K );
+		else if (strcsequal(p,"DOS LM1.2X002"))
 			arch &= ( ARCH_WFWG | ARCH_WIN95 );
-		else if (strcsequal(cliprotos[i], "DOS LANMAN2.1"))
+		else if (strcsequal(p,"DOS LANMAN2.1"))
 			arch &= ( ARCH_WFWG | ARCH_WIN95 );
-		else if (strcsequal(cliprotos[i], "NT LM 0.12"))
-			arch &= ( ARCH_WIN95 | ARCH_WINNT | ARCH_WIN2K
-				  | ARCH_CIFSFS);
-		else if (strcsequal(cliprotos[i], "SMB 2.001"))
+		else if (strcsequal(p,"NT LM 0.12"))
+			arch &= ( ARCH_WIN95 | ARCH_WINNT | ARCH_WIN2K | ARCH_CIFSFS);
+		else if (strcsequal(p,"SMB 2.001"))
 			arch = ARCH_VISTA;		
-		else if (strcsequal(cliprotos[i], "LANMAN2.1"))
+		else if (strcsequal(p,"LANMAN2.1"))
 			arch &= ( ARCH_WINNT | ARCH_WIN2K | ARCH_OS2 );
-		else if (strcsequal(cliprotos[i], "LM1.2X002"))
+		else if (strcsequal(p,"LM1.2X002"))
 			arch &= ( ARCH_WINNT | ARCH_WIN2K | ARCH_OS2 );
-		else if (strcsequal(cliprotos[i], "MICROSOFT NETWORKS 1.03"))
+		else if (strcsequal(p,"MICROSOFT NETWORKS 1.03"))
 			arch &= ARCH_WINNT;
-		else if (strcsequal(cliprotos[i], "XENIX CORE"))
+		else if (strcsequal(p,"XENIX CORE"))
 			arch &= ( ARCH_WINNT | ARCH_OS2 );
-		else if (strcsequal(cliprotos[i], "Samba")) {
+		else if (strcsequal(p,"Samba")) {
 			arch = ARCH_SAMBA;
 			break;
-		} else if (strcsequal(cliprotos[i], "POSIX 2")) {
+		} else if (strcsequal(p,"POSIX 2")) {
 			arch = ARCH_CIFSFS;
 			break;
 		}
+ 
+		p += strlen(p) + 2;
 	}
 
 	/* CIFSFS can send one arch only, NT LM 0.12. */
-	if (i == 1 && (arch & ARCH_CIFSFS)) {
+	if (Index == 1 && (arch & ARCH_CIFSFS)) {
 		arch = ARCH_CIFSFS;
 	}
 
@@ -620,7 +551,7 @@
 			set_remote_arch(RA_WIN95);
 			break;
 		case ARCH_WINNT:
-			if(req->flags2 == FLAGS2_WIN2K_SIGNATURE)
+			if(SVAL(inbuf,smb_flg2)==FLAGS2_WIN2K_SIGNATURE)
 				set_remote_arch(RA_WIN2K);
 			else
 				set_remote_arch(RA_WINNT);
@@ -649,33 +580,34 @@
 	   when the client connects to port 445.  Of course there is a small
 	   window where we are listening to messages   -- jerry */
 
-	claim_connection(
-		NULL,"",FLAG_MSG_GENERAL|FLAG_MSG_SMBD|FLAG_MSG_PRINT_GENERAL);
+	claim_connection(NULL,"",0,True,FLAG_MSG_GENERAL|FLAG_MSG_SMBD|FLAG_MSG_PRINT_GENERAL);
     
 	/* Check for protocols, most desirable first */
 	for (protocol = 0; supported_protocols[protocol].proto_name; protocol++) {
-		i = 0;
+		p = smb_buf(inbuf)+1;
+		Index = 0;
 		if ((supported_protocols[protocol].protocol_level <= lp_maxprotocol()) &&
 				(supported_protocols[protocol].protocol_level >= lp_minprotocol()))
-			while (i < num_cliprotos) {
-				if (strequal(cliprotos[i],supported_protocols[protocol].proto_name))
-					choice = i;
-				i++;
+			while (p < (smb_buf(inbuf) + bcc)) { 
+				if (strequal(p,supported_protocols[protocol].proto_name))
+					choice = Index;
+				Index++;
+				p += strlen(p) + 2;
 			}
 		if(choice != -1)
 			break;
 	}
   
+	SSVAL(outbuf,smb_vwv0,choice);
 	if(choice != -1) {
 		fstrcpy(remote_proto,supported_protocols[protocol].short_name);
 		reload_services(True);          
-		supported_protocols[protocol].proto_reply_fn(req, choice);
+		outsize = supported_protocols[protocol].proto_reply_fn(inbuf, outbuf);
 		DEBUG(3,("Selected protocol %s\n",supported_protocols[protocol].proto_name));
 	} else {
 		DEBUG(0,("No protocol supported !\n"));
-		reply_outbuf(req, 1, 0);
-		SSVAL(req->outbuf, smb_vwv0, choice);
 	}
+	SSVAL(outbuf,smb_vwv0,choice);
   
 	DEBUG( 5, ( "negprot index=%d\n", choice ) );
 
@@ -684,7 +616,6 @@
 			"client negotiated a downlevel protocol");
 	}
 
-	TALLOC_FREE(cliprotos);
 	END_PROFILE(SMBnegprot);
-	return;
+	return(outsize);
 }

Modified: branches/samba/upstream/source/smbd/noquotas.c
===================================================================
--- branches/samba/upstream/source/smbd/noquotas.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/noquotas.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -23,7 +24,7 @@
  * Needed for auto generation of proto.h.
  */
 
-bool disk_quotas(const char *path,SMB_BIG_UINT *bsize,SMB_BIG_UINT *dfree,SMB_BIG_UINT *dsize)
+BOOL disk_quotas(const char *path,SMB_BIG_UINT *bsize,SMB_BIG_UINT *dfree,SMB_BIG_UINT *dsize)
 {
   (*bsize) = 512; /* This value should be ignored */
 

Modified: branches/samba/upstream/source/smbd/notify.c
===================================================================
--- branches/samba/upstream/source/smbd/notify.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/notify.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -24,7 +25,7 @@
 struct notify_change_request {
 	struct notify_change_request *prev, *next;
 	struct files_struct *fsp;	/* backpointer for cancel by mid */
-	uint8 request_buf[smb_size];
+	char request_buf[smb_size];
 	uint32 filter;
 	uint32 max_param;
 	struct notify_mid_map *mid_map;
@@ -46,7 +47,7 @@
 	uint16 mid;
 };
 
-static bool notify_change_record_identical(struct notify_change *c1,
+static BOOL notify_change_record_identical(struct notify_change *c1,
 					struct notify_change *c2)
 {
 	/* Note this is deliberately case sensitive. */
@@ -57,7 +58,7 @@
 	return False;
 }
 
-static bool notify_marshall_changes(int num_changes,
+static BOOL notify_marshall_changes(int num_changes,
 				uint32 max_offset,
 				struct notify_change *changes,
 				prs_struct *ps)
@@ -82,9 +83,10 @@
 
 		c = &changes[i];
 
-		if (!convert_string_allocate(NULL, CH_UNIX, CH_UTF16LE,
-			c->name, strlen(c->name)+1, &uni_name.buffer,
-			&namelen, True) || (uni_name.buffer == NULL)) {
+		namelen = convert_string_allocate(
+			NULL, CH_UNIX, CH_UTF16LE, c->name, strlen(c->name)+1,
+			&uni_name.buffer, True);
+		if ((namelen == -1) || (uni_name.buffer == NULL)) {
 			goto fail;
 		}
 
@@ -129,14 +131,13 @@
  Setup the common parts of the return packet and send it.
 *****************************************************************************/
 
-static void change_notify_reply_packet(connection_struct *conn,
-				const uint8 *request_buf,
+static void change_notify_reply_packet(const char *request_buf,
 				       NTSTATUS error_code)
 {
 	char outbuf[smb_size+38];
 
 	memset(outbuf, '\0', sizeof(outbuf));
-	construct_reply_common((char *)request_buf, outbuf);
+	construct_reply_common(request_buf, outbuf);
 
 	ERROR_NT(error_code);
 
@@ -144,31 +145,28 @@
 	 * Seems NT needs a transact command with an error code
 	 * in it. This is a longer packet than a simple error.
 	 */
-	srv_set_message(outbuf,18,0,False);
+	set_message(outbuf,18,0,False);
 
 	show_msg(outbuf);
-	if (!srv_send_smb(smbd_server_fd(),
-			outbuf,
-			IS_CONN_ENCRYPTED(conn)))
-		exit_server_cleanly("change_notify_reply_packet: srv_send_smb "
+	if (!send_smb(smbd_server_fd(),outbuf))
+		exit_server_cleanly("change_notify_reply_packet: send_smb "
 				    "failed.");
 }
 
-void change_notify_reply(connection_struct *conn,
-			const uint8 *request_buf, uint32 max_param,
+void change_notify_reply(const char *request_buf, uint32 max_param,
 			 struct notify_change_buf *notify_buf)
 {
+	char *outbuf = NULL;
 	prs_struct ps;
-	struct smb_request *req = NULL;
-	uint8 tmp_request[smb_size];
+	size_t buflen;
 
 	if (notify_buf->num_changes == -1) {
-		change_notify_reply_packet(conn, request_buf, NT_STATUS_OK);
+		change_notify_reply_packet(request_buf, NT_STATUS_OK);
 		notify_buf->num_changes = 0;
 		return;
 	}
 
-	prs_init_empty(&ps, NULL, MARSHALL);
+	prs_init(&ps, 0, NULL, MARSHALL);
 
 	if (!notify_marshall_changes(notify_buf->num_changes, max_param,
 					notify_buf->changes, &ps)) {
@@ -176,31 +174,26 @@
 		 * We exceed what the client is willing to accept. Send
 		 * nothing.
 		 */
-		change_notify_reply_packet(conn, request_buf, NT_STATUS_OK);
+		change_notify_reply_packet(request_buf, NT_STATUS_OK);
 		goto done;
 	}
 
-	if (!(req = talloc(talloc_tos(), struct smb_request))) {
-		change_notify_reply_packet(conn, request_buf, NT_STATUS_NO_MEMORY);
+	buflen = smb_size+38+prs_offset(&ps) + 4 /* padding */;
+
+	if (!(outbuf = SMB_MALLOC_ARRAY(char, buflen))) {
+		change_notify_reply_packet(request_buf, NT_STATUS_NO_MEMORY);
 		goto done;
 	}
 
-	memcpy(tmp_request, request_buf, smb_size);
+	construct_reply_common(request_buf, outbuf);
 
-	/*
-	 * We're only interested in the header fields here
-	 */
+	if (send_nt_replies(outbuf, buflen, NT_STATUS_OK, prs_data_p(&ps),
+			    prs_offset(&ps), NULL, 0) == -1) {
+		exit_server("change_notify_reply_packet: send_smb failed.");
+	}
 
-	smb_setlen((char *)tmp_request, smb_size);
-	SCVAL(tmp_request, smb_wct, 0);
-
-	init_smb_request(req, tmp_request,0, conn->encrypted_tid);
-
-	send_nt_replies(conn, req, NT_STATUS_OK, prs_data_p(&ps),
-			prs_offset(&ps), NULL, 0);
-
  done:
-	TALLOC_FREE(req);
+	SAFE_FREE(outbuf);
 	prs_mem_free(&ps);
 
 	TALLOC_FREE(notify_buf->changes);
@@ -215,7 +208,7 @@
 }
 
 NTSTATUS change_notify_create(struct files_struct *fsp, uint32 filter,
-			      bool recursive)
+			      BOOL recursive)
 {
 	char *fullpath;
 	struct notify_entry e;
@@ -234,7 +227,6 @@
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	ZERO_STRUCT(e);
 	e.path = fullpath;
 	e.filter = filter;
 	e.subdir_filter = 0;
@@ -248,10 +240,9 @@
 	return status;
 }
 
-NTSTATUS change_notify_add_request(const struct smb_request *req,
-				uint32 max_param,
-				uint32 filter, bool recursive,
-				struct files_struct *fsp)
+NTSTATUS change_notify_add_request(const char *inbuf, uint32 max_param,
+				   uint32 filter, BOOL recursive,
+				   struct files_struct *fsp)
 {
 	struct notify_change_request *request = NULL;
 	struct notify_mid_map *map = NULL;
@@ -265,7 +256,7 @@
 	request->mid_map = map;
 	map->req = request;
 
-	memcpy(request->request_buf, req->inbuf, sizeof(request->request_buf));
+	memcpy(request->request_buf, inbuf, sizeof(request->request_buf));
 	request->max_param = max_param;
 	request->filter = filter;
 	request->fsp = fsp;
@@ -274,11 +265,11 @@
 	DLIST_ADD_END(fsp->notify->requests, request,
 		      struct notify_change_request *);
 
-	map->mid = SVAL(req->inbuf, smb_mid);
+	map->mid = SVAL(inbuf, smb_mid);
 	DLIST_ADD(notify_changes_by_mid, map);
 
 	/* Push the MID of this packet on the signing queue. */
-	srv_defer_sign_response(SVAL(req->inbuf,smb_mid));
+	srv_defer_sign_response(SVAL(inbuf,smb_mid));
 
 	return NT_STATUS_OK;
 }
@@ -303,7 +294,7 @@
 	}
 
 	if (req == NULL) {
-		smb_panic("notify_req not found in fsp's requests");
+		smb_panic("notify_req not found in fsp's requests\n");
 	}
 
 	DLIST_REMOVE(fsp->notify->requests, req);
@@ -331,8 +322,7 @@
 		return;
 	}
 
-	change_notify_reply_packet(map->req->fsp->conn,
-			map->req->request_buf, NT_STATUS_CANCELLED);
+	change_notify_reply_packet(map->req->request_buf, NT_STATUS_CANCELLED);
 	change_notify_remove_request(map->req);
 }
 
@@ -348,7 +338,7 @@
 	}
 
 	while (fsp->notify->requests != NULL) {
-		change_notify_reply_packet(fsp->conn,
+		change_notify_reply_packet(
 			fsp->notify->requests->request_buf, status);
 		change_notify_remove_request(fsp->notify->requests);
 	}
@@ -371,7 +361,7 @@
 static void notify_fsp(files_struct *fsp, uint32 action, const char *name)
 {
 	struct notify_change *change, *changes;
-	char *tmp;
+	pstring name2;
 
 	if (fsp->notify == NULL) {
 		/*
@@ -380,6 +370,9 @@
 		return;
 	}
 
+	pstrcpy(name2, name);
+	string_replace(name2, '/', '\\');
+
 	/*
 	 * Someone has triggered a notify previously, queue the change for
 	 * later.
@@ -410,14 +403,11 @@
 
 	change = &(fsp->notify->changes[fsp->notify->num_changes]);
 
-	if (!(tmp = talloc_strdup(changes, name))) {
+	if (!(change->name = talloc_strdup(changes, name2))) {
 		DEBUG(0, ("talloc_strdup failed\n"));
 		return;
 	}
 
-	string_replace(tmp, '/', '\\');
-	change->name = tmp;	
-
 	change->action = action;
 	fsp->notify->num_changes += 1;
 
@@ -442,8 +432,7 @@
 	 * TODO: do we have to walk the lists of requests pending?
 	 */
 
-	change_notify_reply(fsp->conn,
-			fsp->notify->requests->request_buf,
+	change_notify_reply(fsp->notify->requests->request_buf,
 			    fsp->notify->requests->max_param,
 			    fsp->notify);
 

Modified: branches/samba/upstream/source/smbd/notify_inotify.c
===================================================================
--- branches/samba/upstream/source/smbd/notify_inotify.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/notify_inotify.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /*
@@ -101,7 +102,7 @@
   see if a particular event from inotify really does match a requested
   notify event in SMB
 */
-static bool filter_match(struct inotify_watch_context *w,
+static BOOL filter_match(struct inotify_watch_context *w,
 			 struct inotify_event *e)
 {
 	DEBUG(10, ("filter_match: e->mask=%x, w->mask=%x, w->filter=%x\n",

Modified: branches/samba/upstream/source/smbd/notify_internal.c
===================================================================
--- branches/samba/upstream/source/smbd/notify_internal.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/notify_internal.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /*
@@ -27,14 +28,13 @@
 #include "librpc/gen_ndr/ndr_notify.h"
 
 struct notify_context {
-	struct db_context *db;
+	struct tdb_wrap *w;
 	struct server_id server;
 	struct messaging_context *messaging_ctx;
 	struct notify_list *list;
 	struct notify_array *array;
 	int seqnum;
 	struct sys_notify_context *sys_notify_ctx;
-	TDB_DATA key;
 };
 
 
@@ -91,10 +91,10 @@
 		return NULL;
 	}
 
-	notify->db = db_open(notify, lock_path("notify.tdb"),
+	notify->w = tdb_wrap_open(notify, lock_path("notify.tdb"),
 				  0, TDB_SEQNUM|TDB_CLEAR_IF_FIRST,
 				  O_RDWR|O_CREAT, 0644);
-	if (notify->db == NULL) {
+	if (notify->w == NULL) {
 		talloc_free(notify);
 		return NULL;
 	}
@@ -103,8 +103,7 @@
 	notify->messaging_ctx = messaging_ctx;
 	notify->list = NULL;
 	notify->array = NULL;
-	notify->seqnum = notify->db->get_seqnum(notify->db);
-	notify->key = string_term_tdb_data(NOTIFY_KEY);
+	notify->seqnum = tdb_get_seqnum(notify->w->tdb);
 
 	talloc_set_destructor(notify, notify_destructor);
 
@@ -118,29 +117,37 @@
 	return notify;
 }
 
+
 /*
-  lock and fetch the record
+  lock the notify db
 */
-static NTSTATUS notify_fetch_locked(struct notify_context *notify, struct db_record **rec)
+static NTSTATUS notify_lock(struct notify_context *notify)
 {
-	*rec = notify->db->fetch_locked(notify->db, notify, notify->key);
-	if (*rec == NULL) {
+	if (tdb_lock_bystring(notify->w->tdb, NOTIFY_KEY) != 0) {
 		return NT_STATUS_INTERNAL_DB_CORRUPTION;
 	}
 	return NT_STATUS_OK;
 }
 
 /*
+  unlock the notify db
+*/
+static void notify_unlock(struct notify_context *notify)
+{
+	tdb_unlock_bystring(notify->w->tdb, NOTIFY_KEY);
+}
+
+/*
   load the notify array
 */
-static NTSTATUS notify_load(struct notify_context *notify, struct db_record *rec)
+static NTSTATUS notify_load(struct notify_context *notify)
 {
 	TDB_DATA dbuf;
 	DATA_BLOB blob;
 	NTSTATUS status;
 	int seqnum;
 
-	seqnum = notify->db->get_seqnum(notify->db);
+	seqnum = tdb_get_seqnum(notify->w->tdb);
 
 	if (seqnum == notify->seqnum && notify->array != NULL) {
 		return NT_STATUS_OK;
@@ -152,35 +159,23 @@
 	notify->array = TALLOC_ZERO_P(notify, struct notify_array);
 	NT_STATUS_HAVE_NO_MEMORY(notify->array);
 
-	if (!rec) {
-		if (notify->db->fetch(notify->db, notify, notify->key, &dbuf) != 0) {
-			return NT_STATUS_INTERNAL_DB_CORRUPTION;
-		}
-	} else {
-		dbuf = rec->value;
+	dbuf = tdb_fetch_bystring(notify->w->tdb, NOTIFY_KEY);
+	if (dbuf.dptr == NULL) {
+		return NT_STATUS_OK;
 	}
 
 	blob.data = (uint8 *)dbuf.dptr;
 	blob.length = dbuf.dsize;
 
-	status = NT_STATUS_OK;
-	if (blob.length > 0) {
-		enum ndr_err_code ndr_err;
-		ndr_err = ndr_pull_struct_blob(&blob, notify->array, notify->array,
-					       (ndr_pull_flags_fn_t)ndr_pull_notify_array);
-		if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-			status = ndr_map_error2ntstatus(ndr_err);
-		}
-	}
+	status = ndr_pull_struct_blob(&blob, notify->array, notify->array, 
+				      (ndr_pull_flags_fn_t)ndr_pull_notify_array);
 
 	if (DEBUGLEVEL >= 10) {
 		DEBUG(10, ("notify_load:\n"));
 		NDR_PRINT_DEBUG(notify_array, notify->array);
 	}
 
-	if (!rec) {
-		talloc_free(dbuf.dptr);
-	}
+	free(dbuf.dptr);
 
 	return status;
 }
@@ -198,12 +193,12 @@
 /*
   save the notify array
 */
-static NTSTATUS notify_save(struct notify_context *notify, struct db_record *rec)
+static NTSTATUS notify_save(struct notify_context *notify)
 {
 	TDB_DATA dbuf;
 	DATA_BLOB blob;
 	NTSTATUS status;
-	enum ndr_err_code ndr_err;
+	int ret;
 	TALLOC_CTX *tmp_ctx;
 
 	/* if possible, remove some depth arrays */
@@ -214,17 +209,21 @@
 
 	/* we might just be able to delete the record */
 	if (notify->array->num_depths == 0) {
-		return rec->delete_rec(rec);
+		ret = tdb_delete_bystring(notify->w->tdb, NOTIFY_KEY);
+		if (ret != 0) {
+			return NT_STATUS_INTERNAL_DB_CORRUPTION;
+		}
+		return NT_STATUS_OK;
 	}
 
 	tmp_ctx = talloc_new(notify);
 	NT_STATUS_HAVE_NO_MEMORY(tmp_ctx);
 
-	ndr_err = ndr_push_struct_blob(&blob, tmp_ctx, notify->array,
+	status = ndr_push_struct_blob(&blob, tmp_ctx, notify->array, 
 				      (ndr_push_flags_fn_t)ndr_push_notify_array);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+	if (!NT_STATUS_IS_OK(status)) {
 		talloc_free(tmp_ctx);
-		return ndr_map_error2ntstatus(ndr_err);
+		return status;
 	}
 
 	if (DEBUGLEVEL >= 10) {
@@ -232,13 +231,16 @@
 		NDR_PRINT_DEBUG(notify_array, notify->array);
 	}
 
-	dbuf.dptr = blob.data;
+	dbuf.dptr = (char *)blob.data;
 	dbuf.dsize = blob.length;
-
-	status = rec->store(rec, dbuf, TDB_REPLACE);
+		
+	ret = tdb_store_bystring(notify->w->tdb, NOTIFY_KEY, dbuf, TDB_REPLACE);
 	talloc_free(tmp_ctx);
+	if (ret != 0) {
+		return NT_STATUS_INTERNAL_DB_CORRUPTION;
+	}
 
-	return status;
+	return NT_STATUS_OK;
 }
 
 
@@ -249,7 +251,7 @@
 			   uint32_t msg_type, struct server_id server_id, DATA_BLOB *data)
 {
 	struct notify_context *notify = talloc_get_type(private_data, struct notify_context);
-	enum ndr_err_code ndr_err;
+	NTSTATUS status;
 	struct notify_event ev;
 	TALLOC_CTX *tmp_ctx = talloc_new(notify);
 	struct notify_list *listel;
@@ -258,9 +260,9 @@
 		return;
 	}
 
-	ndr_err = ndr_pull_struct_blob(data, tmp_ctx, &ev,
-				       (ndr_pull_flags_fn_t)ndr_pull_notify_event);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+	status = ndr_pull_struct_blob(data, tmp_ctx, &ev, 
+				      (ndr_pull_flags_fn_t)ndr_pull_notify_event);
+	if (!NT_STATUS_IS_OK(status)) {
 		talloc_free(tmp_ctx);
 		return;
 	}
@@ -291,8 +293,7 @@
 /*
   add an entry to the notify array
 */
-static NTSTATUS notify_add_array(struct notify_context *notify, struct db_record *rec,
-				 struct notify_entry *e,
+static NTSTATUS notify_add_array(struct notify_context *notify, struct notify_entry *e,
 				 void *private_data, int depth)
 {
 	int i;
@@ -340,7 +341,7 @@
 		d->max_mask_subdir |= d->entries[i].subdir_filter;
 	}
 
-	return notify_save(notify, rec);
+	return notify_save(notify);
 }
 
 /*
@@ -357,20 +358,18 @@
 	struct notify_list *listel;
 	size_t len;
 	int depth;
-	struct db_record *rec;
 
 	/* see if change notify is enabled at all */
 	if (notify == NULL) {
 		return NT_STATUS_NOT_IMPLEMENTED;
 	}
 
-	status = notify_fetch_locked(notify, &rec);
+	status = notify_lock(notify);
 	NT_STATUS_NOT_OK_RETURN(status);
 
-	status = notify_load(notify, rec);
+	status = notify_load(notify);
 	if (!NT_STATUS_IS_OK(status)) {
-		talloc_free(rec);
-		return status;
+		goto done;
 	}
 
 	/* cope with /. on the end of the path */
@@ -416,11 +415,11 @@
 	   then we need to install it in the array used for the
 	   intra-samba notify handling */
 	if (e.filter != 0 || e.subdir_filter != 0) {
-		status = notify_add_array(notify, rec, &e, private_data, depth);
+		status = notify_add_array(notify, &e, private_data, depth);
 	}
 
 done:
-	talloc_free(rec);
+	notify_unlock(notify);
 	talloc_free(tmp_path);
 
 	return status;
@@ -435,7 +434,6 @@
 	struct notify_list *listel;
 	int i, depth;
 	struct notify_depth *d;
-	struct db_record *rec;
 
 	/* see if change notify is enabled at all */
 	if (notify == NULL) {
@@ -456,17 +454,17 @@
 
 	talloc_free(listel);
 
-	status = notify_fetch_locked(notify, &rec);
+	status = notify_lock(notify);
 	NT_STATUS_NOT_OK_RETURN(status);
 
-	status = notify_load(notify, rec);
+	status = notify_load(notify);
 	if (!NT_STATUS_IS_OK(status)) {
-		talloc_free(rec);
+		notify_unlock(notify);
 		return status;
 	}
 
 	if (depth >= notify->array->num_depths) {
-		talloc_free(rec);
+		notify_unlock(notify);
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 	}
 
@@ -480,7 +478,7 @@
 		}
 	}
 	if (i == d->num_entries) {
-		talloc_free(rec);
+		notify_unlock(notify);
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 	}
 
@@ -490,9 +488,9 @@
 	}
 	d->num_entries--;
 
-	status = notify_save(notify, rec);
+	status = notify_save(notify);
 
-	talloc_free(rec);
+	notify_unlock(notify);
 
 	return status;
 }
@@ -505,14 +503,13 @@
 {
 	NTSTATUS status;
 	int i, depth, del_count=0;
-	struct db_record *rec;
 
-	status = notify_fetch_locked(notify, &rec);
+	status = notify_lock(notify);
 	NT_STATUS_NOT_OK_RETURN(status);
 
-	status = notify_load(notify, rec);
+	status = notify_load(notify);
 	if (!NT_STATUS_IS_OK(status)) {
-		talloc_free(rec);
+		notify_unlock(notify);
 		return status;
 	}
 
@@ -534,10 +531,10 @@
 	}
 
 	if (del_count > 0) {
-		status = notify_save(notify, rec);
+		status = notify_save(notify);
 	}
 
-	talloc_free(rec);
+	notify_unlock(notify);
 
 	return status;
 }
@@ -552,7 +549,6 @@
 	struct notify_event ev;
 	DATA_BLOB data;
 	NTSTATUS status;
-	enum ndr_err_code ndr_err;
 	TALLOC_CTX *tmp_ctx;
 
 	ev.action = action;
@@ -561,11 +557,11 @@
 
 	tmp_ctx = talloc_new(notify);
 
-	ndr_err = ndr_push_struct_blob(&data, tmp_ctx, &ev,
-				       (ndr_push_flags_fn_t)ndr_push_notify_event);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+	status = ndr_push_struct_blob(&data, tmp_ctx, &ev, 
+				      (ndr_push_flags_fn_t)ndr_push_notify_event);
+	if (!NT_STATUS_IS_OK(status)) {
 		talloc_free(tmp_ctx);
-		return ndr_map_error2ntstatus(ndr_err);
+		return status;
 	}
 
 	status = messaging_send(notify->messaging_ctx, e->server, 
@@ -598,7 +594,7 @@
 	}
 
  again:
-	status = notify_load(notify, NULL);
+	status = notify_load(notify);
 	if (!NT_STATUS_IS_OK(status)) {
 		return;
 	}
@@ -681,7 +677,7 @@
 
 				DEBUG(10, ("Deleting notify entries for "
 					   "process %s because it's gone\n",
-					   procid_str_static(&e->server)));
+					   procid_str_static(&e->server.id)));
 				notify_remove_all(notify, &server);
 				goto again;
 			}

Modified: branches/samba/upstream/source/smbd/ntquotas.c
===================================================================
--- branches/samba/upstream/source/smbd/ntquotas.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/ntquotas.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -88,7 +89,7 @@
 
 	if (psid && !sid_to_uid(psid, &id.uid)) {
 		DEBUG(0,("sid_to_uid: failed, SID[%s]\n",
-			 sid_string_dbg(psid)));
+			sid_string_static(psid)));	
 	}
 
 	ret = SMB_VFS_GET_QUOTA(fsp->conn, qtype, id, &D);
@@ -132,7 +133,7 @@
 
 	if (psid && !sid_to_uid(psid, &id.uid)) {
 		DEBUG(0,("sid_to_uid: failed, SID[%s]\n",
-			 sid_string_dbg(psid)));
+			sid_string_static(psid)));	
 	}
 
 	ret = SMB_VFS_SET_QUOTA(fsp->conn, qtype, id, &D);
@@ -140,7 +141,7 @@
 	return ret;
 }
 
-static bool allready_in_quota_list(SMB_NTQUOTA_LIST *qt_list, uid_t uid)
+static BOOL allready_in_quota_list(SMB_NTQUOTA_LIST *qt_list, uid_t uid)
 {
 	SMB_NTQUOTA_LIST *tmp_list = NULL;
 	
@@ -188,13 +189,12 @@
 
 		if (vfs_get_ntquota(fsp, SMB_USER_QUOTA_TYPE, &sid, &tmp_qt)!=0) {
 			DEBUG(5,("no quota entry for sid[%s] path[%s]\n",
-				 sid_string_dbg(&sid),
-				 fsp->conn->connectpath));
+				sid_string_static(&sid),fsp->conn->connectpath));
 			continue;
 		}
 
 		DEBUG(15,("quota entry for id[%s] path[%s]\n",
-			  sid_string_dbg(&sid), fsp->conn->connectpath));
+			sid_string_static(&sid),fsp->conn->connectpath));
 
 		if ((tmp_list_ent=TALLOC_ZERO_P(mem_ctx,SMB_NTQUOTA_LIST))==NULL) {
 			DEBUG(0,("TALLOC_ZERO() failed\n"));

Modified: branches/samba/upstream/source/smbd/nttrans.c
===================================================================
--- branches/samba/upstream/source/smbd/nttrans.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/nttrans.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,12 +1,12 @@
 /*
    Unix SMB/CIFS implementation.
    SMB NT transaction handling
-   Copyright (C) Jeremy Allison			1994-2007
+   Copyright (C) Jeremy Allison			1994-1998
    Copyright (C) Stefan (metze) Metzmacher	2003
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -15,13 +15,15 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
 extern int max_send;
 extern enum protocol_types Protocol;
+extern int smb_read_error;
 extern struct current_user current_user;
 
 static const char *known_nt_pipes[] = {
@@ -48,9 +50,9 @@
 static char *nttrans_realloc(char **ptr, size_t size)
 {
 	if (ptr==NULL) {
-		smb_panic("nttrans_realloc() called with NULL ptr");
+		smb_panic("nttrans_realloc() called with NULL ptr\n");
 	}
-
+		
 	*ptr = (char *)SMB_REALLOC(*ptr, size);
 	if(*ptr == NULL) {
 		return NULL;
@@ -66,10 +68,8 @@
  HACK ! Always assumes smb_setup field is zero.
 ****************************************************************************/
 
-void send_nt_replies(connection_struct *conn,
-			struct smb_request *req, NTSTATUS nt_error,
-		     char *params, int paramsize,
-		     char *pdata, int datasize)
+int send_nt_replies(char *outbuf, int bufsize, NTSTATUS nt_error,
+		    char *params, int paramsize, char *pdata, int datasize)
 {
 	int data_to_send = datasize;
 	int params_to_send = paramsize;
@@ -81,14 +81,27 @@
 	int data_alignment_offset = 0;
 
 	/*
+	 * Initially set the wcnt area to be 18 - this is true for all
+	 * transNT replies.
+	 */
+
+	set_message(outbuf,18,0,True);
+
+	if (NT_STATUS_V(nt_error)) {
+		ERROR_NT(nt_error);
+	}
+
+	/* 
 	 * If there genuinely are no parameters or data to send just send
 	 * the empty packet.
 	 */
 
 	if(params_to_send == 0 && data_to_send == 0) {
-		reply_outbuf(req, 18, 0);
-		show_msg((char *)req->outbuf);
-		return;
+		show_msg(outbuf);
+		if (!send_smb(smbd_server_fd(),outbuf)) {
+			exit_server_cleanly("send_nt_replies: send_smb failed.");
+		}
+		return 0;
 	}
 
 	/*
@@ -101,17 +114,16 @@
 		data_alignment_offset = 4 - (params_to_send % 4);
 	}
 
-	/*
+	/* 
 	 * Space is bufsize minus Netbios over TCP header minus SMB header.
 	 * The alignment_offset is to align the param bytes on a four byte
-	 * boundary (2 bytes for data len, one byte pad).
+	 * boundary (2 bytes for data len, one byte pad). 
 	 * NT needs this to work correctly.
 	 */
 
-	useable_space = max_send - (smb_size
-				    + 2 * 18 /* wct */
-				    + alignment_offset
-				    + data_alignment_offset);
+	useable_space = bufsize - ((smb_buf(outbuf)+
+				alignment_offset+data_alignment_offset) -
+				outbuf);
 
 	/*
 	 * useable_space can never be more than max_send minus the
@@ -131,22 +143,22 @@
 		total_sent_thistime = params_to_send + data_to_send +
 					alignment_offset + data_alignment_offset;
 
-		/*
+		/* 
 		 * We can never send more than useable_space.
 		 */
 
 		total_sent_thistime = MIN(total_sent_thistime, useable_space);
 
-		reply_outbuf(req, 18, total_sent_thistime);
+		set_message(outbuf, 18, total_sent_thistime, True);
 
 		/*
 		 * Set total params and data to be sent.
 		 */
 
-		SIVAL(req->outbuf,smb_ntr_TotalParameterCount,paramsize);
-		SIVAL(req->outbuf,smb_ntr_TotalDataCount,datasize);
+		SIVAL(outbuf,smb_ntr_TotalParameterCount,paramsize);
+		SIVAL(outbuf,smb_ntr_TotalDataCount,datasize);
 
-		/*
+		/* 
 		 * Calculate how many parameters and data we can fit into
 		 * this packet. Parameters get precedence.
 		 */
@@ -155,12 +167,11 @@
 		data_sent_thistime = useable_space - params_sent_thistime;
 		data_sent_thistime = MIN(data_sent_thistime,data_to_send);
 
-		SIVAL(req->outbuf, smb_ntr_ParameterCount,
-		      params_sent_thistime);
+		SIVAL(outbuf,smb_ntr_ParameterCount,params_sent_thistime);
 
 		if(params_sent_thistime == 0) {
-			SIVAL(req->outbuf,smb_ntr_ParameterOffset,0);
-			SIVAL(req->outbuf,smb_ntr_ParameterDisplacement,0);
+			SIVAL(outbuf,smb_ntr_ParameterOffset,0);
+			SIVAL(outbuf,smb_ntr_ParameterDisplacement,0);
 		} else {
 			/*
 			 * smb_ntr_ParameterOffset is the offset from the start of the SMB header to the
@@ -169,50 +180,41 @@
 			 * them from the calculation.
 			 */
 
-			SIVAL(req->outbuf,smb_ntr_ParameterOffset,
-			      ((smb_buf(req->outbuf)+alignment_offset)
-			       - smb_base(req->outbuf)));
-			/*
+			SIVAL(outbuf,smb_ntr_ParameterOffset,
+				((smb_buf(outbuf)+alignment_offset) - smb_base(outbuf)));
+			/* 
 			 * Absolute displacement of param bytes sent in this packet.
 			 */
 
-			SIVAL(req->outbuf, smb_ntr_ParameterDisplacement,
-			      pp - params);
+			SIVAL(outbuf,smb_ntr_ParameterDisplacement,pp - params);
 		}
 
 		/*
 		 * Deal with the data portion.
 		 */
 
-		SIVAL(req->outbuf, smb_ntr_DataCount, data_sent_thistime);
+		SIVAL(outbuf,smb_ntr_DataCount, data_sent_thistime);
 
 		if(data_sent_thistime == 0) {
-			SIVAL(req->outbuf,smb_ntr_DataOffset,0);
-			SIVAL(req->outbuf,smb_ntr_DataDisplacement, 0);
+			SIVAL(outbuf,smb_ntr_DataOffset,0);
+			SIVAL(outbuf,smb_ntr_DataDisplacement, 0);
 		} else {
 			/*
 			 * The offset of the data bytes is the offset of the
 			 * parameter bytes plus the number of parameters being sent this time.
 			 */
 
-			SIVAL(req->outbuf, smb_ntr_DataOffset,
-			      ((smb_buf(req->outbuf)+alignment_offset) -
-			       smb_base(req->outbuf))
-			      + params_sent_thistime + data_alignment_offset);
-			SIVAL(req->outbuf,smb_ntr_DataDisplacement, pd - pdata);
+			SIVAL(outbuf,smb_ntr_DataOffset,((smb_buf(outbuf)+alignment_offset) -
+				smb_base(outbuf)) + params_sent_thistime + data_alignment_offset);
+				SIVAL(outbuf,smb_ntr_DataDisplacement, pd - pdata);
 		}
 
-		/*
+		/* 
 		 * Copy the param bytes into the packet.
 		 */
 
 		if(params_sent_thistime) {
-			if (alignment_offset != 0) {
-				memset(smb_buf(req->outbuf), 0,
-				       alignment_offset);
-			}
-			memcpy((smb_buf(req->outbuf)+alignment_offset), pp,
-			       params_sent_thistime);
+			memcpy((smb_buf(outbuf)+alignment_offset),pp,params_sent_thistime);
 		}
 
 		/*
@@ -220,40 +222,24 @@
 		 */
 
 		if(data_sent_thistime) {
-			if (data_alignment_offset != 0) {
-				memset((smb_buf(req->outbuf)+alignment_offset+
-					params_sent_thistime), 0,
-				       data_alignment_offset);
-			}
-			memcpy(smb_buf(req->outbuf)+alignment_offset
-			       +params_sent_thistime+data_alignment_offset,
-			       pd,data_sent_thistime);
+			memcpy(smb_buf(outbuf)+alignment_offset+params_sent_thistime+
+				data_alignment_offset,pd,data_sent_thistime);
 		}
-
+    
 		DEBUG(9,("nt_rep: params_sent_thistime = %d, data_sent_thistime = %d, useable_space = %d\n",
 			params_sent_thistime, data_sent_thistime, useable_space));
 		DEBUG(9,("nt_rep: params_to_send = %d, data_to_send = %d, paramsize = %d, datasize = %d\n",
 			params_to_send, data_to_send, paramsize, datasize));
-
-		if (NT_STATUS_V(nt_error)) {
-			error_packet_set((char *)req->outbuf,
-					 0, 0, nt_error,
-					 __LINE__,__FILE__);
-		}
-
+    
 		/* Send the packet */
-		show_msg((char *)req->outbuf);
-		if (!srv_send_smb(smbd_server_fd(),
-				(char *)req->outbuf,
-				IS_CONN_ENCRYPTED(conn))) {
-			exit_server_cleanly("send_nt_replies: srv_send_smb failed.");
+		show_msg(outbuf);
+		if (!send_smb(smbd_server_fd(),outbuf)) {
+			exit_server_cleanly("send_nt_replies: send_smb failed.");
 		}
-
-		TALLOC_FREE(req->outbuf);
-
+    
 		pp += params_sent_thistime;
 		pd += data_sent_thistime;
-
+    
 		params_to_send -= params_sent_thistime;
 		data_to_send -= data_sent_thistime;
 
@@ -264,19 +250,18 @@
 		if(params_to_send < 0 || data_to_send < 0) {
 			DEBUG(0,("send_nt_replies failed sanity check pts = %d, dts = %d\n!!!",
 				params_to_send, data_to_send));
-			return;
+			return -1;
 		}
-	}
+	} 
+
+	return 0;
 }
 
 /****************************************************************************
  Is it an NTFS stream name ?
- An NTFS file name is <path>.<extention>:<stream name>:<stream type>
- $DATA can be used as both a stream name and a stream type. A missing stream
- name or type implies $DATA.
 ****************************************************************************/
 
-bool is_ntfs_stream_name(const char *fname)
+BOOL is_ntfs_stream_name(const char *fname)
 {
 	if (lp_posix_pathnames()) {
 		return False;
@@ -285,23 +270,67 @@
 }
 
 /****************************************************************************
- Reply to an NT create and X call on a pipe
+ Save case statics.
 ****************************************************************************/
 
-static void nt_open_pipe(char *fname, connection_struct *conn,
-			 struct smb_request *req, int *ppnum)
+static BOOL saved_case_sensitive;
+static BOOL saved_case_preserve;
+static BOOL saved_short_case_preserve;
+
+/****************************************************************************
+ Save case semantics.
+****************************************************************************/
+
+static uint32 set_posix_case_semantics(connection_struct *conn, uint32 file_attributes)
 {
+	if(!(file_attributes & FILE_FLAG_POSIX_SEMANTICS)) {
+		return file_attributes;
+	}
+
+	saved_case_sensitive = conn->case_sensitive;
+	saved_case_preserve = conn->case_preserve;
+	saved_short_case_preserve = conn->short_case_preserve;
+
+	/* Set to POSIX. */
+	conn->case_sensitive = True;
+	conn->case_preserve = True;
+	conn->short_case_preserve = True;
+
+	return (file_attributes & ~FILE_FLAG_POSIX_SEMANTICS);
+}
+
+/****************************************************************************
+ Restore case semantics.
+****************************************************************************/
+
+static void restore_case_semantics(connection_struct *conn, uint32 file_attributes)
+{
+	if(!(file_attributes & FILE_FLAG_POSIX_SEMANTICS)) {
+		return;
+	}
+
+	conn->case_sensitive = saved_case_sensitive;
+	conn->case_preserve = saved_case_preserve;
+	conn->short_case_preserve = saved_short_case_preserve;
+}
+
+/****************************************************************************
+ Reply to an NT create and X call on a pipe.
+****************************************************************************/
+
+static int nt_open_pipe(char *fname, connection_struct *conn,
+			char *inbuf, char *outbuf, int *ppnum)
+{
 	smb_np_struct *p = NULL;
+	uint16 vuid = SVAL(inbuf, smb_uid);
 	int i;
-
+ 
 	DEBUG(4,("nt_open_pipe: Opening pipe %s.\n", fname));
-
+    
 	/* See if it is one we want to handle. */
 
 	if (lp_disable_spoolss() && strequal(fname, "\\spoolss")) {
-		reply_botherror(req, NT_STATUS_OBJECT_NAME_NOT_FOUND,
-				ERRDOS, ERRbadpipe);
-		return;
+		return(ERROR_BOTH(NT_STATUS_OBJECT_NAME_NOT_FOUND,ERRDOS,ERRbadpipe));
 	}
 
 	for( i = 0; known_nt_pipes[i]; i++ ) {
@@ -309,65 +338,53 @@
 			break;
 		}
 	}
-
+    
 	if ( known_nt_pipes[i] == NULL ) {
-		reply_botherror(req, NT_STATUS_OBJECT_NAME_NOT_FOUND,
-				ERRDOS, ERRbadpipe);
-		return;
+		return(ERROR_BOTH(NT_STATUS_OBJECT_NAME_NOT_FOUND,ERRDOS,ERRbadpipe));
 	}
-
+    
 	/* Strip \\ off the name. */
 	fname++;
-
+    
 	DEBUG(3,("nt_open_pipe: Known pipe %s opening.\n", fname));
 
-	p = open_rpc_pipe_p(fname, conn, req->vuid);
+	p = open_rpc_pipe_p(fname, conn, vuid);
 	if (!p) {
-		reply_doserror(req, ERRSRV, ERRnofids);
-		return;
+		return(ERROR_DOS(ERRSRV,ERRnofids));
 	}
 
-	/* TODO: Add pipe to db */
-
+	/* Add pipe to db */
+	
 	if ( !store_pipe_opendb( p ) ) {
 		DEBUG(3,("nt_open_pipe: failed to store %s pipe open.\n", fname));
 	}
-
+	
 	*ppnum = p->pnum;
-	return;
+	return 0;
 }
 
 /****************************************************************************
  Reply to an NT create and X call for pipes.
 ****************************************************************************/
 
-static void do_ntcreate_pipe_open(connection_struct *conn,
-				  struct smb_request *req)
+static int do_ntcreate_pipe_open(connection_struct *conn,
+			 char *inbuf,char *outbuf,int length,int bufsize)
 {
-	char *fname = NULL;
+	pstring fname;
+	int ret;
 	int pnum = -1;
 	char *p = NULL;
-	uint32 flags = IVAL(req->inbuf,smb_ntcreate_Flags);
-	TALLOC_CTX *ctx = talloc_tos();
+	uint32 flags = IVAL(inbuf,smb_ntcreate_Flags);
 
-	srvstr_pull_buf_talloc(ctx, (char *)req->inbuf, req->flags2, &fname,
-			smb_buf(req->inbuf), STR_TERMINATE);
+	srvstr_pull_buf(inbuf, fname, smb_buf(inbuf), sizeof(fname), STR_TERMINATE);
 
-	if (!fname) {
-		reply_botherror(req, NT_STATUS_OBJECT_NAME_NOT_FOUND,
-				ERRDOS, ERRbadpipe);
-		return;
+	if ((ret = nt_open_pipe(fname, conn, inbuf, outbuf, &pnum)) != 0) {
+		return ret;
 	}
-	nt_open_pipe(fname, conn, req, &pnum);
 
-	if (req->outbuf) {
-		/* error reply */
-		return;
-	}
-
 	/*
 	 * Deal with pipe return.
-	 */
+	 */  
 
 	if (flags & EXTENDED_RESPONSE_REQUIRED) {
 		/* This is very strange. We
@@ -375,13 +392,13 @@
  		 * the wcnt to 42 ? It's definately
  		 * what happens on the wire....
  		 */
-		reply_outbuf(req, 50, 0);
-		SCVAL(req->outbuf,smb_wct,42);
+		set_message(outbuf,50,0,True);
+		SCVAL(outbuf,smb_wct,42);
 	} else {
-		reply_outbuf(req, 34, 0);
+		set_message(outbuf,34,0,True);
 	}
 
-	p = (char *)req->outbuf + smb_vwv2;
+	p = outbuf + smb_vwv2;
 	p++;
 	SSVAL(p,0,pnum);
 	p += 2;
@@ -399,7 +416,7 @@
 	if (flags & EXTENDED_RESPONSE_REQUIRED) {
 		p += 25;
 		SIVAL(p,0,FILE_GENERIC_ALL);
-		/*
+		/* 
 		 * For pipes W2K3 seems to return
  		 * 0x12019B next.
  		 * This is ((FILE_GENERIC_READ|FILE_GENERIC_WRITE) & ~FILE_APPEND_DATA)
@@ -409,27 +426,68 @@
 
 	DEBUG(5,("do_ntcreate_pipe_open: open pipe = %s\n", fname));
 
-	chain_reply(req);
+	return chain_reply(inbuf,outbuf,length,bufsize);
 }
 
 /****************************************************************************
+ Reply to an NT create and X call for a quota file.
+****************************************************************************/
+
+int reply_ntcreate_and_X_quota(connection_struct *conn,
+				char *inbuf,
+				char *outbuf,
+				int length,
+				int bufsize,
+				enum FAKE_FILE_TYPE fake_file_type,
+				const char *fname)
+{
+	int result;
+	char *p;
+	uint32 desired_access = IVAL(inbuf,smb_ntcreate_DesiredAccess);
+	files_struct *fsp;
+	NTSTATUS status;
+
+	status = open_fake_file(conn, fake_file_type, fname, desired_access,
+				&fsp);
+
+	if (!NT_STATUS_IS_OK(status)) {
+		return ERROR_NT(status);
+	}
+
+	set_message(outbuf,34,0,True);
+	
+	p = outbuf + smb_vwv2;
+	
+	/* SCVAL(p,0,NO_OPLOCK_RETURN); */
+	p++;
+	SSVAL(p,0,fsp->fnum);
+
+	DEBUG(5,("reply_ntcreate_and_X_quota: fnum = %d, open name = %s\n", fsp->fnum, fsp->fsp_name));
+
+	result = chain_reply(inbuf,outbuf,length,bufsize);
+	return result;
+}
+
+/****************************************************************************
  Reply to an NT create and X call.
 ****************************************************************************/
 
-void reply_ntcreate_and_X(struct smb_request *req)
-{
-	connection_struct *conn = req->conn;
-	char *fname = NULL;
-	uint32 flags;
-	uint32 access_mask;
-	uint32 file_attributes;
-	uint32 share_access;
-	uint32 create_disposition;
-	uint32 create_options;
-	uint16 root_dir_fid;
-	SMB_BIG_UINT allocation_size;
+int reply_ntcreate_and_X(connection_struct *conn,
+			 char *inbuf,char *outbuf,int length,int bufsize)
+{  
+	int result;
+	pstring fname;
+	uint32 flags = IVAL(inbuf,smb_ntcreate_Flags);
+	uint32 access_mask = IVAL(inbuf,smb_ntcreate_DesiredAccess);
+	uint32 file_attributes = IVAL(inbuf,smb_ntcreate_FileAttributes);
+	uint32 new_file_attributes;
+	uint32 share_access = IVAL(inbuf,smb_ntcreate_ShareAccess);
+	uint32 create_disposition = IVAL(inbuf,smb_ntcreate_CreateDisposition);
+	uint32 create_options = IVAL(inbuf,smb_ntcreate_CreateOptions);
+	uint16 root_dir_fid = (uint16)IVAL(inbuf,smb_ntcreate_RootDirectoryFid);
 	/* Breakout the oplock request bits so we can set the
 	   reply bits separately. */
+	int oplock_request = 0;
 	uint32 fattr=0;
 	SMB_OFF_T file_len = 0;
 	SMB_STRUCT_STAT sbuf;
@@ -439,55 +497,22 @@
 	struct timespec c_timespec;
 	struct timespec a_timespec;
 	struct timespec m_timespec;
+	BOOL extended_oplock_granted = False;
 	NTSTATUS status;
-	int oplock_request;
-	uint8_t oplock_granted = NO_OPLOCK_RETURN;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	START_PROFILE(SMBntcreateX);
 
-	if (req->wct < 24) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
-	}
-
-	flags = IVAL(req->inbuf,smb_ntcreate_Flags);
-	access_mask = IVAL(req->inbuf,smb_ntcreate_DesiredAccess);
-	file_attributes = IVAL(req->inbuf,smb_ntcreate_FileAttributes);
-	share_access = IVAL(req->inbuf,smb_ntcreate_ShareAccess);
-	create_disposition = IVAL(req->inbuf,smb_ntcreate_CreateDisposition);
-	create_options = IVAL(req->inbuf,smb_ntcreate_CreateOptions);
-	root_dir_fid = (uint16)IVAL(req->inbuf,smb_ntcreate_RootDirectoryFid);
-
-	allocation_size = (SMB_BIG_UINT)IVAL(req->inbuf,
-					     smb_ntcreate_AllocationSize);
-#ifdef LARGE_SMB_OFF_T
-	allocation_size |= (((SMB_BIG_UINT)IVAL(
-				     req->inbuf,
-				     smb_ntcreate_AllocationSize + 4)) << 32);
-#endif
-
-	srvstr_get_path(ctx, (char *)req->inbuf, req->flags2, &fname,
-			smb_buf(req->inbuf), 0, STR_TERMINATE, &status);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
-		END_PROFILE(SMBntcreateX);
-		return;
-	}
-
 	DEBUG(10,("reply_ntcreate_and_X: flags = 0x%x, access_mask = 0x%x "
 		  "file_attributes = 0x%x, share_access = 0x%x, "
 		  "create_disposition = 0x%x create_options = 0x%x "
-		  "root_dir_fid = 0x%x, fname = %s\n",
+		  "root_dir_fid = 0x%x\n",
 			(unsigned int)flags,
 			(unsigned int)access_mask,
 			(unsigned int)file_attributes,
 			(unsigned int)share_access,
 			(unsigned int)create_disposition,
 			(unsigned int)create_options,
-			(unsigned int)root_dir_fid,
-			fname));
+			(unsigned int)root_dir_fid ));
 
 	/*
 	 * If it's an IPC, use the pipe handler.
@@ -495,94 +520,375 @@
 
 	if (IS_IPC(conn)) {
 		if (lp_nt_pipe_support()) {
-			do_ntcreate_pipe_open(conn, req);
 			END_PROFILE(SMBntcreateX);
-			return;
+			return do_ntcreate_pipe_open(conn,inbuf,outbuf,length,bufsize);
+		} else {
+			END_PROFILE(SMBntcreateX);
+			return(ERROR_DOS(ERRDOS,ERRnoaccess));
 		}
-		reply_doserror(req, ERRDOS, ERRnoaccess);
-		END_PROFILE(SMBntcreateX);
-		return;
 	}
 
-	oplock_request = (flags & REQUEST_OPLOCK) ? EXCLUSIVE_OPLOCK : 0;
-	if (oplock_request) {
-		oplock_request |= (flags & REQUEST_BATCH_OPLOCK)
-			? BATCH_OPLOCK : 0;
+	if (create_options & FILE_OPEN_BY_FILE_ID) {
+		END_PROFILE(SMBntcreateX);
+		return ERROR_NT(NT_STATUS_NOT_SUPPORTED);
 	}
 
-	status = create_file(conn, req, root_dir_fid, fname,
-			     access_mask, share_access, create_disposition,
-			     create_options, file_attributes, oplock_request,
-			     allocation_size, NULL, NULL, &fsp, &info, &sbuf);
+	/*
+	 * Get the file name.
+	 */
 
-	if (!NT_STATUS_IS_OK(status)) {
-		if (open_was_deferred(req->mid)) {
-			/* We have re-scheduled this call, no error. */
+	if(root_dir_fid != 0) {
+		/*
+		 * This filename is relative to a directory fid.
+		 */
+		pstring rel_fname;
+		files_struct *dir_fsp = file_fsp(inbuf,smb_ntcreate_RootDirectoryFid);
+
+		if(!dir_fsp) {
 			END_PROFILE(SMBntcreateX);
-			return;
+			return ERROR_DOS(ERRDOS,ERRbadfid);
 		}
-		if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {
-			reply_botherror(req, status, ERRDOS, ERRfilexists);
+
+		if(!dir_fsp->is_directory) {
+
+			srvstr_get_path(inbuf, fname, smb_buf(inbuf), sizeof(fname), 0, STR_TERMINATE, &status);
+			if (!NT_STATUS_IS_OK(status)) {
+				END_PROFILE(SMBntcreateX);
+				return ERROR_NT(status);
+			}
+
+			/*
+			 * Check to see if this is a mac fork of some kind.
+			 */
+
+			if( is_ntfs_stream_name(fname)) {
+				END_PROFILE(SMBntcreateX);
+				return ERROR_NT(NT_STATUS_OBJECT_PATH_NOT_FOUND);
+			}
+
+			/*
+			  we need to handle the case when we get a
+			  relative open relative to a file and the
+			  pathname is blank - this is a reopen!
+			  (hint from demyn plantenberg)
+			*/
+
+			END_PROFILE(SMBntcreateX);
+			return(ERROR_DOS(ERRDOS,ERRbadfid));
 		}
-		else {
-			reply_nterror(req, status);
+
+		/*
+		 * Copy in the base directory name.
+		 */
+
+		pstrcpy( fname, dir_fsp->fsp_name );
+
+		if (ISDOT(fname)) {
+			fname[0] = '\0';
+		} else {
+			size_t dir_name_len = strlen(fname);
+			/*
+			 * Ensure it ends in a '\'.
+			 */
+
+			if((fname[dir_name_len-1] != '\\') && (fname[dir_name_len-1] != '/')) {
+				pstrcat(fname, "/");
+			}
 		}
+
+		srvstr_get_path(inbuf, rel_fname, smb_buf(inbuf), sizeof(rel_fname), 0, STR_TERMINATE, &status);
+		if (!NT_STATUS_IS_OK(status)) {
+			END_PROFILE(SMBntcreateX);
+			return ERROR_NT(status);
+		}
+		pstrcat(fname, rel_fname);
+	} else {
+		srvstr_get_path(inbuf, fname, smb_buf(inbuf), sizeof(fname), 0, STR_TERMINATE, &status);
+		if (!NT_STATUS_IS_OK(status)) {
+			END_PROFILE(SMBntcreateX);
+			return ERROR_NT(status);
+		}
+
+		/*
+		 * Check to see if this is a mac fork of some kind.
+		 */
+
+		if( is_ntfs_stream_name(fname)) {
+			enum FAKE_FILE_TYPE fake_file_type = is_fake_file(fname);
+			if (fake_file_type!=FAKE_FILE_TYPE_NONE) {
+				/*
+				 * Here we go! support for changing the disk quotas --metze
+				 *
+				 * We need to fake up to open this MAGIC QUOTA file 
+				 * and return a valid FID.
+				 *
+				 * w2k close this file directly after openening
+				 * xp also tries a QUERY_FILE_INFO on the file and then close it
+				 */
+				result = reply_ntcreate_and_X_quota(conn, inbuf, outbuf, length, bufsize,
+								fake_file_type, fname);
+				END_PROFILE(SMBntcreateX);
+				return result;
+			} else {
+				END_PROFILE(SMBntcreateX);
+				return ERROR_NT(NT_STATUS_OBJECT_PATH_NOT_FOUND);
+			}
+		}
+	}
+	
+	/*
+	 * Now contruct the smb_open_mode value from the filename, 
+	 * desired access and the share access.
+	 */
+	status = resolve_dfspath(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, fname);
+	if (!NT_STATUS_IS_OK(status)) {
 		END_PROFILE(SMBntcreateX);
-		return;
+		if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
+			return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, ERRbadpath);
+		}
+		return ERROR_NT(status);
 	}
 
+	oplock_request = (flags & REQUEST_OPLOCK) ? EXCLUSIVE_OPLOCK : 0;
+	if (oplock_request) {
+		oplock_request |= (flags & REQUEST_BATCH_OPLOCK) ? BATCH_OPLOCK : 0;
+	}
+
 	/*
-	 * If the caller set the extended oplock request bit
-	 * and we granted one (by whatever means) - set the
-	 * correct bit for extended oplock reply.
+	 * Ordinary file or directory.
 	 */
+		
+	/*
+	 * Check if POSIX semantics are wanted.
+	 */
+		
+	new_file_attributes = set_posix_case_semantics(conn, file_attributes);
+		
+	status = unix_convert(conn, fname, False, NULL, &sbuf);
+	if (!NT_STATUS_IS_OK(status)) {
+		restore_case_semantics(conn, file_attributes);
+		END_PROFILE(SMBntcreateX);
+		return ERROR_NT(status);
+	}
+	/* All file access must go through check_name() */
+	status = check_name(conn, fname);
+	if (!NT_STATUS_IS_OK(status)) {
+		restore_case_semantics(conn, file_attributes);
+		END_PROFILE(SMBntcreateX);
+		return ERROR_NT(status);
+	}
 
-	if (oplock_request &&
-	    (lp_fake_oplocks(SNUM(conn))
-	     || EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type))) {
+	/* This is the correct thing to do (check every time) but can_delete is
+	   expensive (it may have to read the parent directory permissions). So
+	   for now we're not doing it unless we have a strong hint the client
+	   is really going to delete this file. If the client is forcing FILE_CREATE
+	   let the filesystem take care of the permissions. */
 
+	/* Setting FILE_SHARE_DELETE is the hint. */
+
+	if (lp_acl_check_permissions(SNUM(conn))
+	    && (create_disposition != FILE_CREATE)
+	    && (share_access & FILE_SHARE_DELETE)
+	    && (access_mask & DELETE_ACCESS)) {
+		if ((dos_mode(conn, fname, &sbuf) & FILE_ATTRIBUTE_READONLY) ||
+				!can_delete_file_in_directory(conn, fname)) {
+			restore_case_semantics(conn, file_attributes);
+			END_PROFILE(SMBntcreateX);
+			return ERROR_NT(NT_STATUS_ACCESS_DENIED);
+		}
+	}
+
+	/*
+	 * If it's a request for a directory open, deal with it separately.
+	 */
+
+	if(create_options & FILE_DIRECTORY_FILE) {
+
+		/* Can't open a temp directory. IFS kit test. */
+		if (file_attributes & FILE_ATTRIBUTE_TEMPORARY) {
+			END_PROFILE(SMBntcreateX);
+			return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
+		}
+
+		oplock_request = 0;
+		status = open_directory(conn, fname, &sbuf,
+					access_mask,
+					share_access,
+					create_disposition,
+					create_options,
+					new_file_attributes,
+					&info, &fsp);
+	} else {
+
 		/*
-		 * Exclusive oplock granted
+		 * Ordinary file case.
 		 */
 
-		if (flags & REQUEST_BATCH_OPLOCK) {
-			oplock_granted = BATCH_OPLOCK_RETURN;
-		} else {
-			oplock_granted = EXCLUSIVE_OPLOCK_RETURN;
+		/* NB. We have a potential bug here. If we
+		 * cause an oplock break to ourselves, then we
+		 * could end up processing filename related
+		 * SMB requests whilst we await the oplock
+		 * break response. As we may have changed the
+		 * filename case semantics to be POSIX-like,
+		 * this could mean a filename request could
+		 * fail when it should succeed. This is a rare
+		 * condition, but eventually we must arrange
+		 * to restore the correct case semantics
+		 * before issuing an oplock break request to
+		 * our client. JRA.  */
+
+		status = open_file_ntcreate(conn,fname,&sbuf,
+					access_mask,
+					share_access,
+					create_disposition,
+					create_options,
+					new_file_attributes,
+					oplock_request,
+					&info, &fsp);
+
+		if (!NT_STATUS_IS_OK(status)) {
+			/* We cheat here. There are two cases we
+			 * care about. One is a directory rename,
+			 * where the NT client will attempt to
+			 * open the source directory for
+			 * DELETE access. Note that when the
+			 * NT client does this it does *not*
+			 * set the directory bit in the
+			 * request packet. This is translated
+			 * into a read/write open
+			 * request. POSIX states that any open
+			 * for write request on a directory
+			 * will generate an EISDIR error, so
+			 * we can catch this here and open a
+			 * pseudo handle that is flagged as a
+			 * directory. The second is an open
+			 * for a permissions read only, which
+			 * we handle in the open_file_stat case. JRA.
+			 */
+
+			if (NT_STATUS_EQUAL(status,
+					    NT_STATUS_FILE_IS_A_DIRECTORY)) {
+
+				/*
+				 * Fail the open if it was explicitly a non-directory file.
+				 */
+
+				if (create_options & FILE_NON_DIRECTORY_FILE) {
+					restore_case_semantics(conn, file_attributes);
+					END_PROFILE(SMBntcreateX);
+					return ERROR_FORCE_NT(NT_STATUS_FILE_IS_A_DIRECTORY);
+				}
+
+				oplock_request = 0;
+				status = open_directory(conn, fname, &sbuf,
+							access_mask,
+							share_access,
+							create_disposition,
+							create_options,
+							new_file_attributes,
+							&info, &fsp);
+
+			}
 		}
-	} else if (fsp->oplock_type == LEVEL_II_OPLOCK) {
-		oplock_granted = LEVEL_II_OPLOCK_RETURN;
-	} else {
-		oplock_granted = NO_OPLOCK_RETURN;
 	}
 
+	restore_case_semantics(conn, file_attributes);
+
+	if(!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(SMBntcreateX);
+
+		if (open_was_deferred(SVAL(inbuf,smb_mid))) {
+			/* We have re-scheduled this call. */
+			return -1;
+		}
+
+		return ERROR_OPEN(status);
+	}
+
 	file_len = sbuf.st_size;
-	fattr = dos_mode(conn,fsp->fsp_name,&sbuf);
-	if (fattr == 0) {
+	fattr = dos_mode(conn,fname,&sbuf);
+	if(fattr == 0) {
 		fattr = FILE_ATTRIBUTE_NORMAL;
 	}
+	if (!fsp->is_directory && (fattr & aDIR)) {
+		close_file(fsp,ERROR_CLOSE);
+		END_PROFILE(SMBntcreateX);
+		return ERROR_DOS(ERRDOS,ERRnoaccess);
+	} 
+	
+	/* Save the requested allocation size. */
+	if ((info == FILE_WAS_CREATED) || (info == FILE_WAS_OVERWRITTEN)) {
+		SMB_BIG_UINT allocation_size = (SMB_BIG_UINT)IVAL(inbuf,smb_ntcreate_AllocationSize);
+#ifdef LARGE_SMB_OFF_T
+		allocation_size |= (((SMB_BIG_UINT)IVAL(inbuf,smb_ntcreate_AllocationSize + 4)) << 32);
+#endif
+		if (allocation_size && (allocation_size > (SMB_BIG_UINT)file_len)) {
+			fsp->initial_allocation_size = smb_roundup(fsp->conn, allocation_size);
+			if (fsp->is_directory) {
+				close_file(fsp,ERROR_CLOSE);
+				END_PROFILE(SMBntcreateX);
+				/* Can't set allocation size on a directory. */
+				return ERROR_NT(NT_STATUS_ACCESS_DENIED);
+			}
+			if (vfs_allocate_file_space(fsp, fsp->initial_allocation_size) == -1) {
+				close_file(fsp,ERROR_CLOSE);
+				END_PROFILE(SMBntcreateX);
+				return ERROR_NT(NT_STATUS_DISK_FULL);
+			}
+		} else {
+			fsp->initial_allocation_size = smb_roundup(fsp->conn,(SMB_BIG_UINT)file_len);
+		}
+	}
 
+	/* 
+	 * If the caller set the extended oplock request bit
+	 * and we granted one (by whatever means) - set the
+	 * correct bit for extended oplock reply.
+	 */
+
+	if (oplock_request && lp_fake_oplocks(SNUM(conn))) {
+		extended_oplock_granted = True;
+	}
+
+	if(oplock_request && EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type)) {
+		extended_oplock_granted = True;
+	}
+
 	if (flags & EXTENDED_RESPONSE_REQUIRED) {
 		/* This is very strange. We
  		 * return 50 words, but only set
  		 * the wcnt to 42 ? It's definately
  		 * what happens on the wire....
  		 */
-		reply_outbuf(req, 50, 0);
-		SCVAL(req->outbuf,smb_wct,42);
+		set_message(outbuf,50,0,True);
+		SCVAL(outbuf,smb_wct,42);
 	} else {
-		reply_outbuf(req, 34, 0);
+		set_message(outbuf,34,0,True);
 	}
 
-	p = (char *)req->outbuf + smb_vwv2;
+	p = outbuf + smb_vwv2;
+	
+	/*
+	 * Currently as we don't support level II oplocks we just report
+	 * exclusive & batch here.
+	 */
 
-	SCVAL(p, 0, oplock_granted);
-
+	if (extended_oplock_granted) {
+		if (flags & REQUEST_BATCH_OPLOCK) {
+			SCVAL(p,0, BATCH_OPLOCK_RETURN);
+		} else {
+			SCVAL(p,0, EXCLUSIVE_OPLOCK_RETURN);
+		}
+	} else if (fsp->oplock_type == LEVEL_II_OPLOCK) {
+		SCVAL(p,0, LEVEL_II_OPLOCK_RETURN);
+	} else {
+		SCVAL(p,0,NO_OPLOCK_RETURN);
+	}
+	
 	p++;
 	SSVAL(p,0,fsp->fnum);
 	p += 2;
-	if ((create_disposition == FILE_SUPERSEDE)
-	    && (info == FILE_WAS_OVERWRITTEN)) {
+	if ((create_disposition == FILE_SUPERSEDE) && (info == FILE_WAS_OVERWRITTEN)) {
 		SIVAL(p,0,FILE_WAS_SUPERSEDED);
 	} else {
 		SIVAL(p,0,info);
@@ -590,8 +896,7 @@
 	p += 4;
 
 	/* Create time. */
-	c_timespec = get_create_timespec(
-		&sbuf,lp_fake_dir_create_times(SNUM(conn)));
+	c_timespec = get_create_timespec(&sbuf,lp_fake_dir_create_times(SNUM(conn)));
 	a_timespec = get_atimespec(&sbuf);
 	m_timespec = get_mtimespec(&sbuf);
 
@@ -624,8 +929,7 @@
 	if (flags & EXTENDED_RESPONSE_REQUIRED) {
 		uint32 perms = 0;
 		p += 25;
-		if (fsp->is_directory
-		    || can_write_to_file(conn, fsp->fsp_name, &sbuf)) {
+		if (fsp->is_directory || can_write_to_file(conn, fname, &sbuf)) {
 			perms = FILE_GENERIC_ALL;
 		} else {
 			perms = FILE_GENERIC_READ|FILE_EXECUTE;
@@ -633,32 +937,30 @@
 		SIVAL(p,0,perms);
 	}
 
-	DEBUG(5,("reply_ntcreate_and_X: fnum = %d, open name = %s\n",
-		 fsp->fnum, fsp->fsp_name));
+	DEBUG(5,("reply_ntcreate_and_X: fnum = %d, open name = %s\n", fsp->fnum, fsp->fsp_name));
 
-	chain_reply(req);
+	result = chain_reply(inbuf,outbuf,length,bufsize);
 	END_PROFILE(SMBntcreateX);
-	return;
+	return result;
 }
 
 /****************************************************************************
  Reply to a NT_TRANSACT_CREATE call to open a pipe.
 ****************************************************************************/
 
-static void do_nt_transact_create_pipe(connection_struct *conn,
-				       struct smb_request *req,
-				       uint16 **ppsetup, uint32 setup_count,
-				       char **ppparams, uint32 parameter_count,
-				       char **ppdata, uint32 data_count)
+static int do_nt_transact_create_pipe( connection_struct *conn, char *inbuf, char *outbuf, int length, int bufsize,
+                                  uint16 **ppsetup, uint32 setup_count,
+				  char **ppparams, uint32 parameter_count,
+				  char **ppdata, uint32 data_count)
 {
-	char *fname = NULL;
+	pstring fname;
 	char *params = *ppparams;
+	int ret;
 	int pnum = -1;
 	char *p = NULL;
 	NTSTATUS status;
 	size_t param_len;
 	uint32 flags;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	/*
 	 * Ensure minimum number of parameters sent.
@@ -666,27 +968,20 @@
 
 	if(parameter_count < 54) {
 		DEBUG(0,("do_nt_transact_create_pipe - insufficient parameters (%u)\n", (unsigned int)parameter_count));
-		reply_doserror(req, ERRDOS, ERRnoaccess);
-		return;
+		return ERROR_DOS(ERRDOS,ERRnoaccess);
 	}
 
 	flags = IVAL(params,0);
 
-	srvstr_get_path(ctx, params, req->flags2, &fname, params+53,
-			parameter_count-53, STR_TERMINATE,
-			&status);
+	srvstr_get_path(inbuf, fname, params+53, sizeof(fname), parameter_count-53, STR_TERMINATE, &status);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
-		return;
+		return ERROR_NT(status);
 	}
 
-	nt_open_pipe(fname, conn, req, &pnum);
-
-	if (req->outbuf) {
-		/* Error return */
-		return;
+	if ((ret = nt_open_pipe(fname, conn, inbuf, outbuf, &pnum)) != 0) {
+		return ret;
 	}
-
+	
 	/* Realloc the size of parameters and data we will return */
 	if (flags & EXTENDED_RESPONSE_REQUIRED) {
 		/* Extended response is 32 more byyes. */
@@ -696,19 +991,18 @@
 	}
 	params = nttrans_realloc(ppparams, param_len);
 	if(params == NULL) {
-		reply_doserror(req, ERRDOS, ERRnomem);
-		return;
+		return ERROR_DOS(ERRDOS,ERRnomem);
 	}
-
+	
 	p = params;
 	SCVAL(p,0,NO_OPLOCK_RETURN);
-
+	
 	p += 2;
 	SSVAL(p,0,pnum);
 	p += 2;
 	SIVAL(p,0,FILE_WAS_OPENED);
 	p += 8;
-
+	
 	p += 32;
 	SIVAL(p,0,FILE_ATTRIBUTE_NORMAL); /* File Attributes. */
 	p += 20;
@@ -717,11 +1011,11 @@
 	/* Device state. */
 	SSVAL(p,2, 0x5FF); /* ? */
 	p += 4;
-
+	
 	if (flags & EXTENDED_RESPONSE_REQUIRED) {
 		p += 25;
 		SIVAL(p,0,FILE_GENERIC_ALL);
-		/*
+		/* 
 		 * For pipes W2K3 seems to return
  		 * 0x12019B next.
  		 * This is ((FILE_GENERIC_READ|FILE_GENERIC_WRITE) & ~FILE_APPEND_DATA)
@@ -730,33 +1024,59 @@
 	}
 
 	DEBUG(5,("do_nt_transact_create_pipe: open name = %s\n", fname));
-
+	
 	/* Send the required number of replies */
-	send_nt_replies(conn, req, NT_STATUS_OK, params, param_len, *ppdata, 0);
-
-	return;
+	send_nt_replies(outbuf, bufsize, NT_STATUS_OK, params, param_len, *ppdata, 0);
+	
+	return -1;
 }
 
 /****************************************************************************
  Internal fn to set security descriptors.
 ****************************************************************************/
 
-static NTSTATUS set_sd(files_struct *fsp, uint8 *data, uint32 sd_len,
-		       uint32 security_info_sent)
+static NTSTATUS set_sd(files_struct *fsp, char *data, uint32 sd_len, uint32 security_info_sent)
 {
+	prs_struct pd;
 	SEC_DESC *psd = NULL;
-	NTSTATUS status;
-
+	TALLOC_CTX *mem_ctx;
+	BOOL ret;
+	
 	if (sd_len == 0 || !lp_nt_acl_support(SNUM(fsp->conn))) {
 		return NT_STATUS_OK;
 	}
 
-	status = unmarshall_sec_desc(talloc_tos(), data, sd_len, &psd);
+	/*
+	 * Init the parse struct we will unmarshall from.
+	 */
 
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+	if ((mem_ctx = talloc_init("set_sd")) == NULL) {
+		DEBUG(0,("set_sd: talloc_init failed.\n"));
+		return NT_STATUS_NO_MEMORY;
 	}
 
+	prs_init(&pd, 0, mem_ctx, UNMARSHALL);
+
+	/*
+	 * Setup the prs_struct to point at the memory we just
+	 * allocated.
+	 */
+	
+	prs_give_memory( &pd, data, sd_len, False);
+
+	/*
+	 * Finally, unmarshall from the data buffer.
+	 */
+
+	if(!sec_io_desc( "sd data", &psd, &pd, 1)) {
+		DEBUG(0,("set_sd: Error in unmarshalling security descriptor.\n"));
+		/*
+		 * Return access denied for want of a better error message..
+		 */ 
+		talloc_destroy(mem_ctx);
+		return NT_STATUS_NO_MEMORY;
+	}
+	
 	if (psd->owner_sid==0) {
 		security_info_sent &= ~OWNER_SECURITY_INFORMATION;
 	}
@@ -769,24 +1089,23 @@
 	if (psd->dacl==0) {
 		security_info_sent &= ~DACL_SECURITY_INFORMATION;
 	}
-
-	if (fsp->fh->fd != -1) {
-		status = SMB_VFS_FSET_NT_ACL(fsp, security_info_sent, psd);
+	
+	ret = SMB_VFS_FSET_NT_ACL( fsp, fsp->fh->fd, security_info_sent, psd);
+	
+	if (!ret) {
+		talloc_destroy(mem_ctx);
+		return NT_STATUS_ACCESS_DENIED;
 	}
-	else {
-		status = SMB_VFS_SET_NT_ACL(fsp, fsp->fsp_name,
-					    security_info_sent, psd);
-	}
-
-	TALLOC_FREE(psd);
-
-	return status;
+	
+	talloc_destroy(mem_ctx);
+	
+	return NT_STATUS_OK;
 }
 
 /****************************************************************************
  Read a list of EA names and data from an incoming data buffer. Create an ea_list with them.
 ****************************************************************************/
-
+                                                                                                                             
 static struct ea_list *read_nttrans_ea_list(TALLOC_CTX *ctx, const char *pdata, size_t data_size)
 {
 	struct ea_list *ea_list_head = NULL;
@@ -810,7 +1129,7 @@
 		}
 		offset += next_offset;
 	}
-
+                                                                                                                             
 	return ea_list_head;
 }
 
@@ -818,43 +1137,41 @@
  Reply to a NT_TRANSACT_CREATE call (needs to process SD's).
 ****************************************************************************/
 
-static void call_nt_transact_create(connection_struct *conn,
-				    struct smb_request *req,
-				    uint16 **ppsetup, uint32 setup_count,
-				    char **ppparams, uint32 parameter_count,
-				    char **ppdata, uint32 data_count,
-				    uint32 max_data_count)
+static int call_nt_transact_create(connection_struct *conn, char *inbuf, char *outbuf, int length, int bufsize,
+                                  uint16 **ppsetup, uint32 setup_count,
+				  char **ppparams, uint32 parameter_count,
+				  char **ppdata, uint32 data_count, uint32 max_data_count)
 {
-	char *fname = NULL;
+	pstring fname;
 	char *params = *ppparams;
 	char *data = *ppdata;
 	/* Breakout the oplock request bits so we can set the reply bits separately. */
+	int oplock_request = 0;
 	uint32 fattr=0;
 	SMB_OFF_T file_len = 0;
 	SMB_STRUCT_STAT sbuf;
 	int info = 0;
 	files_struct *fsp = NULL;
 	char *p = NULL;
+	BOOL extended_oplock_granted = False;
 	uint32 flags;
 	uint32 access_mask;
 	uint32 file_attributes;
+	uint32 new_file_attributes;
 	uint32 share_access;
 	uint32 create_disposition;
 	uint32 create_options;
 	uint32 sd_len;
-	struct security_descriptor *sd = NULL;
 	uint32 ea_len;
 	uint16 root_dir_fid;
 	struct timespec c_timespec;
 	struct timespec a_timespec;
 	struct timespec m_timespec;
 	struct ea_list *ea_list = NULL;
+	TALLOC_CTX *ctx = NULL;
+	char *pdata = NULL;
 	NTSTATUS status;
 	size_t param_len;
-	SMB_BIG_UINT allocation_size;
-	int oplock_request;
-	uint8_t oplock_granted;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	DEBUG(5,("call_nt_transact_create\n"));
 
@@ -864,15 +1181,14 @@
 
 	if (IS_IPC(conn)) {
 		if (lp_nt_pipe_support()) {
-			do_nt_transact_create_pipe(
-				conn, req,
-				ppsetup, setup_count,
-				ppparams, parameter_count,
-				ppdata, data_count);
-			return;
+			return do_nt_transact_create_pipe(conn, inbuf, outbuf, length, 
+					bufsize,
+					ppsetup, setup_count,
+					ppparams, parameter_count,
+					ppdata, data_count);
+		} else {
+			return ERROR_DOS(ERRDOS,ERRnoaccess);
 		}
-		reply_doserror(req, ERRDOS, ERRnoaccess);
-		return;
 	}
 
 	/*
@@ -881,8 +1197,7 @@
 
 	if(parameter_count < 54) {
 		DEBUG(0,("call_nt_transact_create - insufficient parameters (%u)\n", (unsigned int)parameter_count));
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
+		return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 	}
 
 	flags = IVAL(params,0);
@@ -894,122 +1209,335 @@
 	sd_len = IVAL(params,36);
 	ea_len = IVAL(params,40);
 	root_dir_fid = (uint16)IVAL(params,4);
-	allocation_size = (SMB_BIG_UINT)IVAL(params,12);
-#ifdef LARGE_SMB_OFF_T
-	allocation_size |= (((SMB_BIG_UINT)IVAL(params,16)) << 32);
-#endif
 
 	/* Ensure the data_len is correct for the sd and ea values given. */
-	if ((ea_len + sd_len > data_count)
-	    || (ea_len > data_count) || (sd_len > data_count)
-	    || (ea_len + sd_len < ea_len) || (ea_len + sd_len < sd_len)) {
-		DEBUG(10, ("call_nt_transact_create - ea_len = %u, sd_len = "
-			   "%u, data_count = %u\n", (unsigned int)ea_len,
-			   (unsigned int)sd_len, (unsigned int)data_count));
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
+	if ((ea_len + sd_len > data_count) ||
+			(ea_len > data_count) || (sd_len > data_count) ||
+			(ea_len + sd_len < ea_len) || (ea_len + sd_len < sd_len)) {
+		DEBUG(10,("call_nt_transact_create - ea_len = %u, sd_len = %u, data_count = %u\n",
+			(unsigned int)ea_len, (unsigned int)sd_len, (unsigned int)data_count ));
+		return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 	}
 
-	if (sd_len) {
-		DEBUG(10, ("call_nt_transact_create - sd_len = %d\n",
-			   sd_len));
+	if (ea_len) {
+		if (!lp_ea_support(SNUM(conn))) {
+			DEBUG(10,("call_nt_transact_create - ea_len = %u but EA's not supported.\n",
+				(unsigned int)ea_len ));
+			return ERROR_NT(NT_STATUS_EAS_NOT_SUPPORTED);
+		}
 
-		status = unmarshall_sec_desc(ctx, (uint8_t *)data, sd_len,
-					     &sd);
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(10, ("call_nt_transact_create: "
-				   "unmarshall_sec_desc failed: %s\n",
-				   nt_errstr(status)));
-			reply_nterror(req, status);
-			return;
+		if (ea_len < 10) {
+			DEBUG(10,("call_nt_transact_create - ea_len = %u - too small (should be more than 10)\n",
+				(unsigned int)ea_len ));
+			return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 		}
 	}
 
-	if (ea_len) {
-		if (!lp_ea_support(SNUM(conn))) {
-			DEBUG(10, ("call_nt_transact_create - ea_len = %u but "
-				   "EA's not supported.\n",
-				   (unsigned int)ea_len));
-			reply_nterror(req, NT_STATUS_EAS_NOT_SUPPORTED);
-			return;
+	if (create_options & FILE_OPEN_BY_FILE_ID) {
+		return ERROR_NT(NT_STATUS_NOT_SUPPORTED);
+	}
+
+	/*
+	 * Get the file name.
+	 */
+
+	if(root_dir_fid != 0) {
+		/*
+		 * This filename is relative to a directory fid.
+		 */
+		files_struct *dir_fsp = file_fsp(params,4);
+
+		if(!dir_fsp) {
+			return ERROR_DOS(ERRDOS,ERRbadfid);
 		}
 
-		if (ea_len < 10) {
-			DEBUG(10,("call_nt_transact_create - ea_len = %u - "
-				  "too small (should be more than 10)\n",
-				  (unsigned int)ea_len ));
-			reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-			return;
+		if(!dir_fsp->is_directory) {
+			srvstr_get_path(inbuf, fname, params+53, sizeof(fname), parameter_count-53, STR_TERMINATE, &status);
+			if (!NT_STATUS_IS_OK(status)) {
+				return ERROR_NT(status);
+			}
+
+			/*
+			 * Check to see if this is a mac fork of some kind.
+			 */
+
+			if( is_ntfs_stream_name(fname)) {
+				return ERROR_NT(NT_STATUS_OBJECT_PATH_NOT_FOUND);
+			}
+
+			return ERROR_DOS(ERRDOS,ERRbadfid);
 		}
 
-		/* We have already checked that ea_len <= data_count here. */
-		ea_list = read_nttrans_ea_list(talloc_tos(), data + sd_len,
-					       ea_len);
-		if (ea_list == NULL) {
-			reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-			return;
+		/*
+		 * Copy in the base directory name.
+		 */
+
+		pstrcpy( fname, dir_fsp->fsp_name );
+
+                if (ISDOT(fname)) {
+			fname[0] = '\0';
+		} else {
+			size_t dir_name_len = strlen(fname);
+			/*
+			 * Ensure it ends in a '\'.
+			 */
+
+			if((fname[dir_name_len-1] != '\\') && (fname[dir_name_len-1] != '/')) {
+				pstrcat(fname, "/");
+			}
 		}
-	}
 
-	srvstr_get_path(ctx, params, req->flags2, &fname,
-			params+53, parameter_count-53,
-			STR_TERMINATE, &status);
-	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
-		return;
+		{
+			pstring tmpname;
+			srvstr_get_path(inbuf, tmpname, params+53, sizeof(tmpname), parameter_count-53, STR_TERMINATE, &status);
+			if (!NT_STATUS_IS_OK(status)) {
+				return ERROR_NT(status);
+			}
+			pstrcat(fname, tmpname);
+		}
+	} else {
+		srvstr_get_path(inbuf, fname, params+53, sizeof(fname), parameter_count-53, STR_TERMINATE, &status);
+		if (!NT_STATUS_IS_OK(status)) {
+			return ERROR_NT(status);
+		}
+
+		/*
+		 * Check to see if this is a mac fork of some kind.
+		 */
+
+		if( is_ntfs_stream_name(fname)) {
+			return ERROR_NT(NT_STATUS_OBJECT_PATH_NOT_FOUND);
+		}
 	}
 
 	oplock_request = (flags & REQUEST_OPLOCK) ? EXCLUSIVE_OPLOCK : 0;
 	if (oplock_request) {
-		oplock_request |= (flags & REQUEST_BATCH_OPLOCK)
-			? BATCH_OPLOCK : 0;
+		oplock_request |= (flags & REQUEST_BATCH_OPLOCK) ? BATCH_OPLOCK : 0;
 	}
 
-	status = create_file(conn, req, root_dir_fid, fname,
-			     access_mask, share_access, create_disposition,
-			     create_options, file_attributes, oplock_request,
-			     allocation_size, sd, ea_list, &fsp, &info, &sbuf);
+	/*
+	 * Ordinary file or directory.
+	 */
+		
+	/*
+	 * Check if POSIX semantics are wanted.
+	 */
+		
+	new_file_attributes = set_posix_case_semantics(conn, file_attributes);
+    
+	status = resolve_dfspath(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, fname);
+	if (!NT_STATUS_IS_OK(status)) {
+		if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
+			return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, ERRbadpath);
+		}
+		return ERROR_NT(status);
+	}
 
-	if(!NT_STATUS_IS_OK(status)) {
-		if (open_was_deferred(req->mid)) {
-			/* We have re-scheduled this call, no error. */
-			return;
+	status = unix_convert(conn, fname, False, NULL, &sbuf);
+	if (!NT_STATUS_IS_OK(status)) {
+		restore_case_semantics(conn, file_attributes);
+		return ERROR_NT(status);
+	}
+	/* All file access must go through check_name() */
+	status = check_name(conn, fname);
+	if (!NT_STATUS_IS_OK(status)) {
+		restore_case_semantics(conn, file_attributes);
+		return ERROR_NT(status);
+	}
+
+	/* This is the correct thing to do (check every time) but can_delete is
+	   expensive (it may have to read the parent directory permissions). So
+	   for now we're not doing it unless we have a strong hint the client
+	   is really going to delete this file. If the client is forcing FILE_CREATE
+	   let the filesystem take care of the permissions. */
+
+	/* Setting FILE_SHARE_DELETE is the hint. */
+
+	if (lp_acl_check_permissions(SNUM(conn))
+	    && (create_disposition != FILE_CREATE)
+	    && (share_access & FILE_SHARE_DELETE)
+	    && (access_mask & DELETE_ACCESS)) {
+		if ((dos_mode(conn, fname, &sbuf) & FILE_ATTRIBUTE_READONLY) ||
+				!can_delete_file_in_directory(conn, fname)) {
+			restore_case_semantics(conn, file_attributes);
+			return ERROR_NT(NT_STATUS_ACCESS_DENIED);
 		}
-		reply_openerror(req, status);
-		return;
 	}
 
+	if (ea_len) {
+		pdata = data + sd_len;
+
+		/* We have already checked that ea_len <= data_count here. */
+		ea_list = read_nttrans_ea_list(tmp_talloc_ctx(), pdata,
+					       ea_len);
+		if (!ea_list ) {
+			restore_case_semantics(conn, file_attributes);
+			return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
+		}
+	}
+
 	/*
-	 * If the caller set the extended oplock request bit
-	 * and we granted one (by whatever means) - set the
-	 * correct bit for extended oplock reply.
+	 * If it's a request for a directory open, deal with it separately.
 	 */
 
-	if (oplock_request &&
-	    (lp_fake_oplocks(SNUM(conn))
-	     || EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type))) {
+	if(create_options & FILE_DIRECTORY_FILE) {
 
+		/* Can't open a temp directory. IFS kit test. */
+		if (file_attributes & FILE_ATTRIBUTE_TEMPORARY) {
+			restore_case_semantics(conn, file_attributes);
+			return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
+		}
+
 		/*
-		 * Exclusive oplock granted
+		 * We will get a create directory here if the Win32
+		 * app specified a security descriptor in the 
+		 * CreateDirectory() call.
 		 */
 
-		if (flags & REQUEST_BATCH_OPLOCK) {
-			oplock_granted = BATCH_OPLOCK_RETURN;
-		} else {
-			oplock_granted = EXCLUSIVE_OPLOCK_RETURN;
+		oplock_request = 0;
+		status = open_directory(conn, fname, &sbuf,
+					access_mask,
+					share_access,
+					create_disposition,
+					create_options,
+					new_file_attributes,
+					&info, &fsp);
+	} else {
+
+		/*
+		 * Ordinary file case.
+		 */
+
+		status = open_file_ntcreate(conn,fname,&sbuf,
+					access_mask,
+					share_access,
+					create_disposition,
+					create_options,
+					new_file_attributes,
+					oplock_request,
+					&info, &fsp);
+
+		if (!NT_STATUS_IS_OK(status)) {
+			if (NT_STATUS_EQUAL(status,
+					    NT_STATUS_FILE_IS_A_DIRECTORY)) {
+
+				/*
+				 * Fail the open if it was explicitly a non-directory file.
+				 */
+
+				if (create_options & FILE_NON_DIRECTORY_FILE) {
+					restore_case_semantics(conn, file_attributes);
+					return ERROR_FORCE_NT(NT_STATUS_FILE_IS_A_DIRECTORY);
+				}
+
+				oplock_request = 0;
+				status = open_directory(conn, fname, &sbuf,
+							access_mask,
+							share_access,
+							create_disposition,
+							create_options,
+							new_file_attributes,
+							&info, &fsp);
+			}
 		}
-	} else if (fsp->oplock_type == LEVEL_II_OPLOCK) {
-		oplock_granted = LEVEL_II_OPLOCK_RETURN;
-	} else {
-		oplock_granted = NO_OPLOCK_RETURN;
 	}
 
+	restore_case_semantics(conn, file_attributes);
+	if(!NT_STATUS_IS_OK(status)) {
+
+		if (open_was_deferred(SVAL(inbuf,smb_mid))) {
+			/* We have re-scheduled this call. */
+			return -1;
+		}
+
+		return ERROR_OPEN(status);
+	}
+
+	/*
+	 * According to the MS documentation, the only time the security
+	 * descriptor is applied to the opened file is iff we *created* the
+	 * file; an existing file stays the same.
+	 *
+	 * Also, it seems (from observation) that you can open the file with
+	 * any access mask but you can still write the sd. We need to override
+	 * the granted access before we call set_sd
+	 * Patch for bug #2242 from Tom Lackemann <cessnatomny at yahoo.com>.
+	 */
+
+	if (lp_nt_acl_support(SNUM(conn)) && sd_len && info == FILE_WAS_CREATED) {
+		uint32 saved_access_mask = fsp->access_mask;
+
+		/* We have already checked that sd_len <= data_count here. */
+
+		fsp->access_mask = FILE_GENERIC_ALL;
+
+		status = set_sd( fsp, data, sd_len, ALL_SECURITY_INFORMATION);
+		if (!NT_STATUS_IS_OK(status)) {
+			talloc_destroy(ctx);
+			close_file(fsp,ERROR_CLOSE);
+			restore_case_semantics(conn, file_attributes);
+			return ERROR_NT(status);
+		}
+		fsp->access_mask = saved_access_mask;
+ 	}
+	
+	if (ea_len && (info == FILE_WAS_CREATED)) {
+		status = set_ea(conn, fsp, fname, ea_list);
+		if (!NT_STATUS_IS_OK(status)) {
+			close_file(fsp,ERROR_CLOSE);
+			restore_case_semantics(conn, file_attributes);
+			return ERROR_NT(status);
+		}
+	}
+
+	restore_case_semantics(conn, file_attributes);
+
 	file_len = sbuf.st_size;
-	fattr = dos_mode(conn,fsp->fsp_name,&sbuf);
-	if (fattr == 0) {
+	fattr = dos_mode(conn,fname,&sbuf);
+	if(fattr == 0) {
 		fattr = FILE_ATTRIBUTE_NORMAL;
 	}
+	if (!fsp->is_directory && (fattr & aDIR)) {
+		close_file(fsp,ERROR_CLOSE);
+		return ERROR_DOS(ERRDOS,ERRnoaccess);
+	} 
+	
+	/* Save the requested allocation size. */
+	if ((info == FILE_WAS_CREATED) || (info == FILE_WAS_OVERWRITTEN)) {
+		SMB_BIG_UINT allocation_size = (SMB_BIG_UINT)IVAL(params,12);
+#ifdef LARGE_SMB_OFF_T
+		allocation_size |= (((SMB_BIG_UINT)IVAL(params,16)) << 32);
+#endif
+		if (allocation_size && (allocation_size > file_len)) {
+			fsp->initial_allocation_size = smb_roundup(fsp->conn, allocation_size);
+			if (fsp->is_directory) {
+				close_file(fsp,ERROR_CLOSE);
+				/* Can't set allocation size on a directory. */
+				return ERROR_NT(NT_STATUS_ACCESS_DENIED);
+			}
+			if (vfs_allocate_file_space(fsp, fsp->initial_allocation_size) == -1) {
+				close_file(fsp,ERROR_CLOSE);
+				return ERROR_NT(NT_STATUS_DISK_FULL);
+			}
+		} else {
+			fsp->initial_allocation_size = smb_roundup(fsp->conn, (SMB_BIG_UINT)file_len);
+		}
+	}
 
+	/* 
+	 * If the caller set the extended oplock request bit
+	 * and we granted one (by whatever means) - set the
+	 * correct bit for extended oplock reply.
+	 */
+
+	if (oplock_request && lp_fake_oplocks(SNUM(conn))) {
+		extended_oplock_granted = True;
+	}
+
+	if(oplock_request && EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type)) {
+		extended_oplock_granted = True;
+	}
+
 	/* Realloc the size of parameters and data we will return */
 	if (flags & EXTENDED_RESPONSE_REQUIRED) {
 		/* Extended response is 32 more byyes. */
@@ -1019,18 +1547,26 @@
 	}
 	params = nttrans_realloc(ppparams, param_len);
 	if(params == NULL) {
-		reply_doserror(req, ERRDOS, ERRnomem);
-		return;
+		return ERROR_DOS(ERRDOS,ERRnomem);
 	}
 
 	p = params;
-	SCVAL(p, 0, oplock_granted);
-
+	if (extended_oplock_granted) {
+		if (flags & REQUEST_BATCH_OPLOCK) {
+			SCVAL(p,0, BATCH_OPLOCK_RETURN);
+		} else {
+			SCVAL(p,0, EXCLUSIVE_OPLOCK_RETURN);
+		}
+	} else if (fsp->oplock_type == LEVEL_II_OPLOCK) {
+		SCVAL(p,0, LEVEL_II_OPLOCK_RETURN);
+	} else {
+		SCVAL(p,0,NO_OPLOCK_RETURN);
+	}
+	
 	p += 2;
 	SSVAL(p,0,fsp->fnum);
 	p += 2;
-	if ((create_disposition == FILE_SUPERSEDE)
-	    && (info == FILE_WAS_OVERWRITTEN)) {
+	if ((create_disposition == FILE_SUPERSEDE) && (info == FILE_WAS_OVERWRITTEN)) {
 		SIVAL(p,0,FILE_WAS_SUPERSEDED);
 	} else {
 		SIVAL(p,0,info);
@@ -1038,8 +1574,7 @@
 	p += 8;
 
 	/* Create time. */
-	c_timespec = get_create_timespec(
-		&sbuf,lp_fake_dir_create_times(SNUM(conn)));
+	c_timespec = get_create_timespec(&sbuf,lp_fake_dir_create_times(SNUM(conn)));
 	a_timespec = get_atimespec(&sbuf);
 	m_timespec = get_mtimespec(&sbuf);
 
@@ -1072,8 +1607,7 @@
 	if (flags & EXTENDED_RESPONSE_REQUIRED) {
 		uint32 perms = 0;
 		p += 25;
-		if (fsp->is_directory
-		    || can_write_to_file(conn, fsp->fsp_name, &sbuf)) {
+		if (fsp->is_directory || can_write_to_file(conn, fname, &sbuf)) {
 			perms = FILE_GENERIC_ALL;
 		} else {
 			perms = FILE_GENERIC_READ|FILE_EXECUTE;
@@ -1081,12 +1615,12 @@
 		SIVAL(p,0,perms);
 	}
 
-	DEBUG(5,("call_nt_transact_create: open name = %s\n", fsp->fsp_name));
+	DEBUG(5,("call_nt_transact_create: open name = %s\n", fname));
 
 	/* Send the required number of replies */
-	send_nt_replies(conn, req, NT_STATUS_OK, params, param_len, *ppdata, 0);
+	send_nt_replies(outbuf, bufsize, NT_STATUS_OK, params, param_len, *ppdata, 0);
 
-	return;
+	return -1;
 }
 
 /****************************************************************************
@@ -1094,39 +1628,34 @@
  conn POINTER CAN BE NULL HERE !
 ****************************************************************************/
 
-void reply_ntcancel(struct smb_request *req)
+int reply_ntcancel(connection_struct *conn,
+		   char *inbuf,char *outbuf,int length,int bufsize)
 {
 	/*
 	 * Go through and cancel any pending change notifies.
 	 */
-
+	
+	int mid = SVAL(inbuf,smb_mid);
 	START_PROFILE(SMBntcancel);
-	remove_pending_change_notify_requests_by_mid(req->mid);
-	remove_pending_lock_requests_by_mid(req->mid);
-	srv_cancel_sign_response(req->mid);
+	remove_pending_change_notify_requests_by_mid(mid);
+	remove_pending_lock_requests_by_mid(mid);
+	srv_cancel_sign_response(mid);
+	
+	DEBUG(3,("reply_ntcancel: cancel called on mid = %d.\n", mid));
 
-	DEBUG(3,("reply_ntcancel: cancel called on mid = %d.\n", req->mid));
-
 	END_PROFILE(SMBntcancel);
-	return;
+	return(-1);
 }
 
 /****************************************************************************
  Copy a file.
 ****************************************************************************/
 
-static NTSTATUS copy_internals(TALLOC_CTX *ctx,
-				connection_struct *conn,
-				struct smb_request *req,
-				const char *oldname_in,
-				const char *newname_in,
-				uint32 attrs)
+static NTSTATUS copy_internals(connection_struct *conn, char *oldname, char *newname, uint32 attrs)
 {
 	SMB_STRUCT_STAT sbuf1, sbuf2;
-	char *oldname = NULL;
-	char *newname = NULL;
-	char *last_component_oldname = NULL;
-	char *last_component_newname = NULL;
+	pstring last_component_oldname;
+	pstring last_component_newname;
 	files_struct *fsp1,*fsp2;
 	uint32 fattr;
 	int info;
@@ -1140,8 +1669,7 @@
 		return NT_STATUS_MEDIA_WRITE_PROTECTED;
 	}
 
-	status = unix_convert(ctx, conn, oldname_in, False, &oldname,
-			&last_component_oldname, &sbuf1);
+	status = unix_convert(conn, oldname, False, last_component_oldname, &sbuf1);
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
 	}
@@ -1161,8 +1689,7 @@
 		return NT_STATUS_NO_SUCH_FILE;
 	}
 
-	status = unix_convert(ctx, conn, newname_in, False, &newname,
-			&last_component_newname, &sbuf2);
+	status = unix_convert(conn, newname, False, last_component_newname, &sbuf2);
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
 	}
@@ -1183,15 +1710,14 @@
 	}
 
 	/* Ensure this is within the share. */
-	status = check_reduced_name(conn, oldname);
+	status = reduce_name(conn, oldname);
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
 	}
 
-	DEBUG(10,("copy_internals: doing file copy %s to %s\n",
-				oldname, newname));
+	DEBUG(10,("copy_internals: doing file copy %s to %s\n", oldname, newname));
 
-        status = open_file_ntcreate(conn, req, oldname, &sbuf1,
+        status = open_file_ntcreate(conn,oldname,&sbuf1,
 			FILE_READ_DATA, /* Read-only. */
 			FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
 			FILE_OPEN,
@@ -1204,7 +1730,7 @@
 		return status;
 	}
 
-        status = open_file_ntcreate(conn, req, newname, &sbuf2,
+        status = open_file_ntcreate(conn,newname,&sbuf2,
 			FILE_WRITE_DATA, /* Read-only. */
 			FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
 			FILE_CREATE,
@@ -1231,7 +1757,7 @@
 	close_file(fsp1,NORMAL_CLOSE);
 
 	/* Ensure the modtime is set correctly on the destination file. */
-	set_close_write_time(fsp2, get_mtimespec(&sbuf1));
+	fsp_set_pending_modtime(fsp2, get_mtimespec(&sbuf1));
 
 	status = close_file(fsp2,NORMAL_CLOSE);
 
@@ -1239,7 +1765,7 @@
 	   creates the file. This isn't the correct thing to do in the copy
 	   case. JRA */
 	file_set_dosmode(conn, newname, fattr, &sbuf2,
-			 parent_dirname(newname),false);
+			 parent_dirname(newname));
 
 	if (ret < (SMB_OFF_T)sbuf1.st_size) {
 		return NT_STATUS_DISK_FULL;
@@ -1256,112 +1782,76 @@
  Reply to a NT rename request.
 ****************************************************************************/
 
-void reply_ntrename(struct smb_request *req)
+int reply_ntrename(connection_struct *conn,
+		   char *inbuf,char *outbuf,int length,int bufsize)
 {
-	connection_struct *conn = req->conn;
-	char *oldname = NULL;
-	char *newname = NULL;
+	int outsize = 0;
+	pstring oldname;
+	pstring newname;
 	char *p;
 	NTSTATUS status;
-	bool src_has_wcard = False;
-	bool dest_has_wcard = False;
-	uint32 attrs;
-	uint16 rename_type;
-	TALLOC_CTX *ctx = talloc_tos();
+	BOOL src_has_wcard = False;
+	BOOL dest_has_wcard = False;
+	uint32 attrs = SVAL(inbuf,smb_vwv0);
+	uint16 rename_type = SVAL(inbuf,smb_vwv1);
 
 	START_PROFILE(SMBntrename);
 
-	if (req->wct < 4) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBntrename);
-		return;
-	}
-
-	attrs = SVAL(req->inbuf,smb_vwv0);
-	rename_type = SVAL(req->inbuf,smb_vwv1);
-
-	p = smb_buf(req->inbuf) + 1;
-	p += srvstr_get_path_wcard(ctx, (char *)req->inbuf, req->flags2, &oldname, p,
-				   0, STR_TERMINATE, &status,
-				   &src_has_wcard);
+	p = smb_buf(inbuf) + 1;
+	p += srvstr_get_path_wcard(inbuf, oldname, p, sizeof(oldname), 0, STR_TERMINATE, &status, &src_has_wcard);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBntrename);
-		return;
+		return ERROR_NT(status);
 	}
 
 	if( is_ntfs_stream_name(oldname)) {
 		/* Can't rename a stream. */
-		reply_nterror(req, NT_STATUS_ACCESS_DENIED);
 		END_PROFILE(SMBntrename);
-		return;
+		return ERROR_NT(NT_STATUS_ACCESS_DENIED);
 	}
 
 	if (ms_has_wild(oldname)) {
-		reply_nterror(req, NT_STATUS_OBJECT_PATH_SYNTAX_BAD);
 		END_PROFILE(SMBntrename);
-		return;
+		return ERROR_NT(NT_STATUS_OBJECT_PATH_SYNTAX_BAD);
 	}
 
 	p++;
-	p += srvstr_get_path_wcard(ctx, (char *)req->inbuf, req->flags2, &newname, p,
-				   0, STR_TERMINATE, &status,
-				   &dest_has_wcard);
+	p += srvstr_get_path_wcard(inbuf, newname, p, sizeof(newname), 0, STR_TERMINATE, &status, &dest_has_wcard);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBntrename);
-		return;
+		return ERROR_NT(status);
 	}
-
-	status = resolve_dfspath(ctx, conn,
-				req->flags2 & FLAGS2_DFS_PATHNAMES,
-				oldname,
-				&oldname);
+	
+	status = resolve_dfspath(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, oldname);
 	if (!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(SMBntrename);
 		if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
-			reply_botherror(req, NT_STATUS_PATH_NOT_COVERED,
-					ERRSRV, ERRbadpath);
-			END_PROFILE(SMBntrename);
-			return;
+			return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, ERRbadpath);
 		}
-		reply_nterror(req, status);
-		END_PROFILE(SMBntrename);
-		return;
+		return ERROR_NT(status);
 	}
 
-	status = resolve_dfspath(ctx, conn,
-				req->flags2 & FLAGS2_DFS_PATHNAMES,
-				newname,
-				&newname);
+	status = resolve_dfspath(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, newname);
 	if (!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(SMBntrename);
 		if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
-			reply_botherror(req, NT_STATUS_PATH_NOT_COVERED,
-					ERRSRV, ERRbadpath);
-			END_PROFILE(SMBntrename);
-			return;
+			return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, ERRbadpath);
 		}
-		reply_nterror(req, status);
-		END_PROFILE(SMBntrename);
-		return;
+		return ERROR_NT(status);
 	}
 
 	DEBUG(3,("reply_ntrename : %s -> %s\n",oldname,newname));
-
+	
 	switch(rename_type) {
 		case RENAME_FLAG_RENAME:
-			status = rename_internals(ctx, conn, req, oldname,
-					newname, attrs, False, src_has_wcard,
-					dest_has_wcard, DELETE_ACCESS);
+			status = rename_internals(conn, oldname, newname, attrs, False, src_has_wcard, dest_has_wcard);
 			break;
 		case RENAME_FLAG_HARD_LINK:
 			if (src_has_wcard || dest_has_wcard) {
 				/* No wildcards. */
 				status = NT_STATUS_OBJECT_PATH_SYNTAX_BAD;
 			} else {
-				status = hardlink_internals(ctx,
-						conn,
-						oldname,
-						newname);
+				status = hardlink_internals(conn, oldname, newname);
 			}
 			break;
 		case RENAME_FLAG_COPY:
@@ -1369,8 +1859,7 @@
 				/* No wildcards. */
 				status = NT_STATUS_OBJECT_PATH_SYNTAX_BAD;
 			} else {
-				status = copy_internals(ctx, conn, req, oldname,
-							newname, attrs);
+				status = copy_internals(conn, oldname, newname, attrs);
 			}
 			break;
 		case RENAME_FLAG_MOVE_CLUSTER_INFORMATION:
@@ -1382,66 +1871,60 @@
 	}
 
 	if (!NT_STATUS_IS_OK(status)) {
-		if (open_was_deferred(req->mid)) {
+		END_PROFILE(SMBntrename);
+		if (open_was_deferred(SVAL(inbuf,smb_mid))) {
 			/* We have re-scheduled this call. */
-			END_PROFILE(SMBntrename);
-			return;
+			return -1;
 		}
-
-		reply_nterror(req, status);
-		END_PROFILE(SMBntrename);
-		return;
+		return ERROR_NT(status);
 	}
 
-	reply_outbuf(req, 0, 0);
-
+	outsize = set_message(outbuf,0,0,False);
+  
 	END_PROFILE(SMBntrename);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
- Reply to a notify change - queue the request and
+ Reply to a notify change - queue the request and 
  don't allow a directory to be opened.
 ****************************************************************************/
 
-static void call_nt_transact_notify_change(connection_struct *conn,
-					   struct smb_request *req,
-					   uint16 **ppsetup,
-					   uint32 setup_count,
-					   char **ppparams,
-					   uint32 parameter_count,
-					   char **ppdata, uint32 data_count,
-					   uint32 max_data_count,
-					   uint32 max_param_count)
+static int call_nt_transact_notify_change(connection_struct *conn, char *inbuf,
+					  char *outbuf, int length,
+					  int bufsize, 
+					  uint16 **ppsetup, uint32 setup_count,
+					  char **ppparams,
+					  uint32 parameter_count,
+					  char **ppdata, uint32 data_count,
+					  uint32 max_data_count,
+					  uint32 max_param_count)
 {
 	uint16 *setup = *ppsetup;
 	files_struct *fsp;
 	uint32 filter;
 	NTSTATUS status;
-	bool recursive;
+	BOOL recursive;
 
 	if(setup_count < 6) {
-		reply_doserror(req, ERRDOS, ERRbadfunc);
-		return;
+		return ERROR_DOS(ERRDOS,ERRbadfunc);
 	}
 
-	fsp = file_fsp(SVAL(setup,4));
+	fsp = file_fsp((char *)setup,4);
 	filter = IVAL(setup, 0);
 	recursive = (SVAL(setup, 6) != 0) ? True : False;
 
 	DEBUG(3,("call_nt_transact_notify_change\n"));
 
 	if(!fsp) {
-		reply_doserror(req, ERRDOS, ERRbadfid);
-		return;
+		return ERROR_DOS(ERRDOS,ERRbadfid);
 	}
 
 	{
 		char *filter_string;
 
 		if (!(filter_string = notify_filter_string(NULL, filter))) {
-			reply_nterror(req,NT_STATUS_NO_MEMORY);
-			return;
+			return ERROR_NT(NT_STATUS_NO_MEMORY);
 		}
 
 		DEBUG(3,("call_nt_transact_notify_change: notify change "
@@ -1452,8 +1935,7 @@
 	}
 
 	if((!fsp->is_directory) || (conn != fsp->conn)) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
+		return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 	}
 
 	if (fsp->notify == NULL) {
@@ -1463,8 +1945,7 @@
 		if (!NT_STATUS_IS_OK(status)) {
 			DEBUG(10, ("change_notify_create returned %s\n",
 				   nt_errstr(status)));
-			reply_nterror(req, status);
-			return;
+			return ERROR_NT(status);
 		}
 	}
 
@@ -1479,125 +1960,121 @@
 		 * here.
 		 */
 
-		change_notify_reply(fsp->conn, req->inbuf, max_param_count, fsp->notify);
+		change_notify_reply(inbuf, max_param_count, fsp->notify);
 
 		/*
 		 * change_notify_reply() above has independently sent its
 		 * results
 		 */
-		return;
+		return -1;
 	}
 
 	/*
 	 * No changes pending, queue the request
 	 */
 
-	status = change_notify_add_request(req,
-			max_param_count,
-			filter,
+	status = change_notify_add_request(inbuf, max_param_count, filter,
 			recursive, fsp);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
+		return ERROR_NT(status);
 	}
-	return;
+
+	return -1;
 }
 
 /****************************************************************************
  Reply to an NT transact rename command.
 ****************************************************************************/
 
-static void call_nt_transact_rename(connection_struct *conn,
-				    struct smb_request *req,
-				    uint16 **ppsetup, uint32 setup_count,
-				    char **ppparams, uint32 parameter_count,
-				    char **ppdata, uint32 data_count,
-				    uint32 max_data_count)
+static int call_nt_transact_rename(connection_struct *conn, char *inbuf, char *outbuf, int length, int bufsize,
+                                  uint16 **ppsetup, uint32 setup_count,
+				  char **ppparams, uint32 parameter_count,
+				  char **ppdata, uint32 data_count, uint32 max_data_count)
 {
 	char *params = *ppparams;
-	char *new_name = NULL;
+	pstring new_name;
 	files_struct *fsp = NULL;
-	bool dest_has_wcard = False;
+	BOOL replace_if_exists = False;
+	BOOL dest_has_wcard = False;
 	NTSTATUS status;
-	TALLOC_CTX *ctx = talloc_tos();
 
         if(parameter_count < 5) {
-		reply_doserror(req, ERRDOS, ERRbadfunc);
-		return;
+		return ERROR_DOS(ERRDOS,ERRbadfunc);
 	}
 
-	fsp = file_fsp(SVAL(params, 0));
-	if (!check_fsp(conn, req, fsp, &current_user)) {
-		return;
+	fsp = file_fsp(params, 0);
+	replace_if_exists = (SVAL(params,2) & RENAME_REPLACE_IF_EXISTS) ? True : False;
+	CHECK_FSP(fsp, conn);
+	srvstr_get_path_wcard(inbuf, new_name, params+4, sizeof(new_name), parameter_count - 4,
+			STR_TERMINATE, &status, &dest_has_wcard);
+	if (!NT_STATUS_IS_OK(status)) {
+		return ERROR_NT(status);
 	}
-	srvstr_get_path_wcard(ctx, params, req->flags2, &new_name, params+4,
-			      parameter_count - 4,
-			      STR_TERMINATE, &status, &dest_has_wcard);
+
+	status = rename_internals(conn, fsp->fsp_name,
+				  new_name, 0, replace_if_exists, False, dest_has_wcard);
+
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
-		return;
+		if (open_was_deferred(SVAL(inbuf,smb_mid))) {
+			/* We have re-scheduled this call. */
+			return -1;
+		}
+		return ERROR_NT(status);
 	}
 
 	/*
-	 * W2K3 ignores this request as the RAW-RENAME test
-	 * demonstrates, so we do.
+	 * Rename was successful.
 	 */
-	send_nt_replies(conn, req, NT_STATUS_OK, NULL, 0, NULL, 0);
-
-	DEBUG(3,("nt transact rename from = %s, to = %s ignored!\n",
+	send_nt_replies(outbuf, bufsize, NT_STATUS_OK, NULL, 0, NULL, 0);
+	
+	DEBUG(3,("nt transact rename from = %s, to = %s succeeded.\n", 
 		 fsp->fsp_name, new_name));
-
-	return;
+	
+	return -1;
 }
 
 /******************************************************************************
  Fake up a completely empty SD.
 *******************************************************************************/
 
-static NTSTATUS get_null_nt_acl(TALLOC_CTX *mem_ctx, SEC_DESC **ppsd)
+static size_t get_null_nt_acl(TALLOC_CTX *mem_ctx, SEC_DESC **ppsd)
 {
 	size_t sd_size;
 
 	*ppsd = make_standard_sec_desc( mem_ctx, &global_sid_World, &global_sid_World, NULL, &sd_size);
 	if(!*ppsd) {
 		DEBUG(0,("get_null_nt_acl: Unable to malloc space for security descriptor.\n"));
-		return NT_STATUS_NO_MEMORY;
+		sd_size = 0;
 	}
 
-	return NT_STATUS_OK;
+	return sd_size;
 }
 
 /****************************************************************************
  Reply to query a security descriptor.
 ****************************************************************************/
 
-static void call_nt_transact_query_security_desc(connection_struct *conn,
-						 struct smb_request *req,
-						 uint16 **ppsetup,
-						 uint32 setup_count,
-						 char **ppparams,
-						 uint32 parameter_count,
-						 char **ppdata,
-						 uint32 data_count,
-						 uint32 max_data_count)
+static int call_nt_transact_query_security_desc(connection_struct *conn, char *inbuf, char *outbuf, int length, int bufsize, 
+                                  uint16 **ppsetup, uint32 setup_count,
+				  char **ppparams, uint32 parameter_count,
+				  char **ppdata, uint32 data_count, uint32 max_data_count)
 {
 	char *params = *ppparams;
 	char *data = *ppdata;
+	prs_struct pd;
 	SEC_DESC *psd = NULL;
 	size_t sd_size;
 	uint32 security_info_wanted;
+	TALLOC_CTX *mem_ctx;
 	files_struct *fsp = NULL;
-	NTSTATUS status;
-	DATA_BLOB blob;
 
         if(parameter_count < 8) {
-		reply_doserror(req, ERRDOS, ERRbadfunc);
-		return;
+		return ERROR_DOS(ERRDOS,ERRbadfunc);
 	}
 
-	fsp = file_fsp(SVAL(params,0));
+	fsp = file_fsp(params,0);
 	if(!fsp) {
-		reply_doserror(req, ERRDOS, ERRbadfid);
-		return;
+		return ERROR_DOS(ERRDOS,ERRbadfid);
 	}
 
 	security_info_wanted = IVAL(params,4);
@@ -1607,42 +2084,39 @@
 
 	params = nttrans_realloc(ppparams, 4);
 	if(params == NULL) {
-		reply_doserror(req, ERRDOS, ERRnomem);
-		return;
+		return ERROR_DOS(ERRDOS,ERRnomem);
 	}
 
+	if ((mem_ctx = talloc_init("call_nt_transact_query_security_desc")) == NULL) {
+		DEBUG(0,("call_nt_transact_query_security_desc: talloc_init failed.\n"));
+		return ERROR_DOS(ERRDOS,ERRnomem);
+	}
+
 	/*
 	 * Get the permissions to return.
 	 */
 
 	if (!lp_nt_acl_support(SNUM(conn))) {
-		status = get_null_nt_acl(talloc_tos(), &psd);
+		sd_size = get_null_nt_acl(mem_ctx, &psd);
 	} else {
-		if (fsp->fh->fd != -1) {
-			status = SMB_VFS_FGET_NT_ACL(
-				fsp, security_info_wanted, &psd);
-		}
-		else {
-			status = SMB_VFS_GET_NT_ACL(
-				conn, fsp->fsp_name, security_info_wanted, &psd);
-		}
+		sd_size = SMB_VFS_FGET_NT_ACL(fsp, fsp->fh->fd, security_info_wanted, &psd);
 	}
 
-	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
-		return;
+	if (sd_size == 0) {
+		talloc_destroy(mem_ctx);
+		return(UNIXERROR(ERRDOS,ERRnoaccess));
 	}
 
-	sd_size = ndr_size_security_descriptor(psd, 0);
-
 	DEBUG(3,("call_nt_transact_query_security_desc: sd_size = %lu.\n",(unsigned long)sd_size));
 
 	SIVAL(params,0,(uint32)sd_size);
 
-	if (max_data_count < sd_size) {
-		send_nt_replies(conn, req, NT_STATUS_BUFFER_TOO_SMALL,
+	if(max_data_count < sd_size) {
+
+		send_nt_replies(outbuf, bufsize, NT_STATUS_BUFFER_TOO_SMALL,
 				params, 4, *ppdata, 0);
-		return;
+		talloc_destroy(mem_ctx);
+		return -1;
 	}
 
 	/*
@@ -1651,54 +2125,69 @@
 
 	data = nttrans_realloc(ppdata, sd_size);
 	if(data == NULL) {
-		reply_doserror(req, ERRDOS, ERRnomem);
-		return;
+		talloc_destroy(mem_ctx);
+		return ERROR_DOS(ERRDOS,ERRnomem);
 	}
 
-	status = marshall_sec_desc(talloc_tos(), psd,
-				   &blob.data, &blob.length);
+	/*
+	 * Init the parse struct we will marshall into.
+	 */
 
-	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
-		return;
+	prs_init(&pd, 0, mem_ctx, MARSHALL);
+
+	/*
+	 * Setup the prs_struct to point at the memory we just
+	 * allocated.
+	 */
+
+	prs_give_memory( &pd, data, (uint32)sd_size, False);
+
+	/*
+	 * Finally, linearize into the outgoing buffer.
+	 */
+
+	if(!sec_io_desc( "sd data", &psd, &pd, 1)) {
+		DEBUG(0,("call_nt_transact_query_security_desc: Error in marshalling \
+security descriptor.\n"));
+		/*
+		 * Return access denied for want of a better error message..
+		 */ 
+		talloc_destroy(mem_ctx);
+		return(UNIXERROR(ERRDOS,ERRnoaccess));
 	}
 
-	SMB_ASSERT(sd_size == blob.length);
-	memcpy(data, blob.data, sd_size);
+	/*
+	 * Now we can delete the security descriptor.
+	 */
 
-	send_nt_replies(conn, req, NT_STATUS_OK, params, 4, data, (int)sd_size);
+	talloc_destroy(mem_ctx);
 
-	return;
+	send_nt_replies(outbuf, bufsize, NT_STATUS_OK, params, 4, data,
+			(int)sd_size);
+	return -1;
 }
 
 /****************************************************************************
  Reply to set a security descriptor. Map to UNIX perms or POSIX ACLs.
 ****************************************************************************/
 
-static void call_nt_transact_set_security_desc(connection_struct *conn,
-					       struct smb_request *req,
-					       uint16 **ppsetup,
-					       uint32 setup_count,
-					       char **ppparams,
-					       uint32 parameter_count,
-					       char **ppdata,
-					       uint32 data_count,
-					       uint32 max_data_count)
+static int call_nt_transact_set_security_desc(connection_struct *conn, char *inbuf, char *outbuf, int length, int bufsize,
+                                  uint16 **ppsetup, uint32 setup_count,
+				  char **ppparams, uint32 parameter_count,
+				  char **ppdata, uint32 data_count, uint32 max_data_count)
 {
 	char *params= *ppparams;
 	char *data = *ppdata;
 	files_struct *fsp = NULL;
 	uint32 security_info_sent = 0;
-	NTSTATUS status;
+	NTSTATUS nt_status;
 
 	if(parameter_count < 8) {
-		reply_doserror(req, ERRDOS, ERRbadfunc);
-		return;
+		return ERROR_DOS(ERRDOS,ERRbadfunc);
 	}
 
-	if((fsp = file_fsp(SVAL(params,0))) == NULL) {
-		reply_doserror(req, ERRDOS, ERRbadfid);
-		return;
+	if((fsp = file_fsp(params,0)) == NULL) {
+		return ERROR_DOS(ERRDOS,ERRbadfid);
 	}
 
 	if(!lp_nt_acl_support(SNUM(conn))) {
@@ -1711,45 +2200,39 @@
 		(unsigned int)security_info_sent ));
 
 	if (data_count == 0) {
-		reply_doserror(req, ERRDOS, ERRnoaccess);
-		return;
+		return ERROR_DOS(ERRDOS, ERRnoaccess);
 	}
 
-	status = set_sd(fsp, (uint8 *)data, data_count, security_info_sent);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
-		return;
+	if (!NT_STATUS_IS_OK(nt_status = set_sd( fsp, data, data_count, security_info_sent))) {
+		return ERROR_NT(nt_status);
 	}
 
   done:
-	send_nt_replies(conn, req, NT_STATUS_OK, NULL, 0, NULL, 0);
-	return;
+
+	send_nt_replies(outbuf, bufsize, NT_STATUS_OK, NULL, 0, NULL, 0);
+	return -1;
 }
-
+   
 /****************************************************************************
  Reply to NT IOCTL
 ****************************************************************************/
 
-static void call_nt_transact_ioctl(connection_struct *conn,
-				   struct smb_request *req,
-				   uint16 **ppsetup, uint32 setup_count,
-				   char **ppparams, uint32 parameter_count,
-				   char **ppdata, uint32 data_count,
-				   uint32 max_data_count)
+static int call_nt_transact_ioctl(connection_struct *conn, char *inbuf, char *outbuf, int length, int bufsize, 
+                                  uint16 **ppsetup, uint32 setup_count,
+				  char **ppparams, uint32 parameter_count,
+				  char **ppdata, uint32 data_count, uint32 max_data_count)
 {
 	uint32 function;
 	uint16 fidnum;
 	files_struct *fsp;
 	uint8 isFSctl;
 	uint8 compfilter;
-	static bool logged_message;
+	static BOOL logged_message;
 	char *pdata = *ppdata;
 
 	if (setup_count != 8) {
 		DEBUG(3,("call_nt_transact_ioctl: invalid setup count %d\n", setup_count));
-		reply_nterror(req, NT_STATUS_NOT_SUPPORTED);
-		return;
+		return ERROR_NT(NT_STATUS_NOT_SUPPORTED);
 	}
 
 	function = IVAL(*ppsetup, 0);
@@ -1760,7 +2243,7 @@
 	DEBUG(10,("call_nt_transact_ioctl: function[0x%08X] FID[0x%04X] isFSctl[0x%02X] compfilter[0x%02X]\n", 
 		 function, fidnum, isFSctl, compfilter));
 
-	fsp=file_fsp(fidnum);
+	fsp=file_fsp((char *)*ppsetup, 4);
 	/* this check is done in each implemented function case for now
 	   because I don't want to break anything... --metze
 	FSP_BELONGS_CONN(fsp,conn);*/
@@ -1772,45 +2255,29 @@
 		   so we can know if we need to pre-allocate or not */
 
 		DEBUG(10,("FSCTL_SET_SPARSE: called on FID[0x%04X](but not implemented)\n", fidnum));
-		send_nt_replies(conn, req, NT_STATUS_OK, NULL, 0, NULL, 0);
-		return;
-
-	case FSCTL_CREATE_OR_GET_OBJECT_ID:
-	{
-		unsigned char objid[16];
-
-		/* This should return the object-id on this file.
-		 * I think I'll make this be the inode+dev. JRA.
+		send_nt_replies(outbuf, bufsize, NT_STATUS_OK, NULL, 0, NULL,
+				0);
+		return -1;
+	
+	case FSCTL_0x000900C0:
+		/* pretend this succeeded - don't know what this really is
+		   but works ok like this --metze
 		 */
 
-		DEBUG(10,("FSCTL_CREATE_OR_GET_OBJECT_ID: called on FID[0x%04X]\n",fidnum));
+		DEBUG(10,("FSCTL_0x000900C0: called on FID[0x%04X](but not implemented)\n",fidnum));
+		send_nt_replies(outbuf, bufsize, NT_STATUS_OK, NULL, 0, NULL,
+				0);
+		return -1;
 
-		if (!fsp_belongs_conn(conn, req, fsp, &current_user)) {
-			return;
-		}
-
-		data_count = 64;
-		pdata = nttrans_realloc(ppdata, data_count);
-		if (pdata == NULL) {
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
-			return;
-		}
-		push_file_id_16(pdata, &fsp->file_id);
-		memcpy(pdata+16,create_volume_objectid(conn,objid),16);
-		push_file_id_16(pdata+32, &fsp->file_id);
-		send_nt_replies(conn, req, NT_STATUS_OK, NULL, 0,
-				pdata, data_count);
-		return;
-	}
-
 	case FSCTL_GET_REPARSE_POINT:
 		/* pretend this fail - my winXP does it like this
 		 * --metze
 		 */
 
 		DEBUG(10,("FSCTL_GET_REPARSE_POINT: called on FID[0x%04X](but not implemented)\n",fidnum));
-		reply_nterror(req, NT_STATUS_NOT_A_REPARSE_POINT);
-		return;
+		send_nt_replies(outbuf, bufsize, NT_STATUS_NOT_A_REPARSE_POINT,
+				NULL, 0, NULL, 0);
+		return -1;
 
 	case FSCTL_SET_REPARSE_POINT:
 		/* pretend this fail - I'm assuming this because of the FSCTL_GET_REPARSE_POINT case.
@@ -1818,9 +2285,10 @@
 		 */
 
 		DEBUG(10,("FSCTL_SET_REPARSE_POINT: called on FID[0x%04X](but not implemented)\n",fidnum));
-		reply_nterror(req, NT_STATUS_NOT_A_REPARSE_POINT);
-		return;
-
+		send_nt_replies(outbuf, bufsize, NT_STATUS_NOT_A_REPARSE_POINT,
+				NULL, 0, NULL, 0);
+		return -1;
+			
 	case FSCTL_GET_SHADOW_COPY_DATA: /* don't know if this name is right...*/
 	{
 		/*
@@ -1835,20 +2303,17 @@
 		 */
 		SHADOW_COPY_DATA *shadow_data = NULL;
 		TALLOC_CTX *shadow_mem_ctx = NULL;
-		bool labels = False;
+		BOOL labels = False;
 		uint32 labels_data_count = 0;
 		uint32 i;
 		char *cur_pdata;
 
-		if (!fsp_belongs_conn(conn, req, fsp, &current_user)) {
-			return;
-		}
+		FSP_BELONGS_CONN(fsp,conn);
 
 		if (max_data_count < 16) {
 			DEBUG(0,("FSCTL_GET_SHADOW_COPY_DATA: max_data_count(%u) < 16 is invalid!\n",
 				max_data_count));
-			reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 		}
 
 		if (max_data_count > 16) {
@@ -1858,20 +2323,18 @@
 		shadow_mem_ctx = talloc_init("SHADOW_COPY_DATA");
 		if (shadow_mem_ctx == NULL) {
 			DEBUG(0,("talloc_init(SHADOW_COPY_DATA) failed!\n"));
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
-			return;
+			return ERROR_NT(NT_STATUS_NO_MEMORY);
 		}
 
 		shadow_data = TALLOC_ZERO_P(shadow_mem_ctx,SHADOW_COPY_DATA);
 		if (shadow_data == NULL) {
 			DEBUG(0,("TALLOC_ZERO() failed!\n"));
 			talloc_destroy(shadow_mem_ctx);
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
-			return;
+			return ERROR_NT(NT_STATUS_NO_MEMORY);
 		}
-
+		
 		shadow_data->mem_ctx = shadow_mem_ctx;
-
+		
 		/*
 		 * Call the VFS routine to actually do the work.
 		 */
@@ -1880,13 +2343,11 @@
 			if (errno == ENOSYS) {
 				DEBUG(5,("FSCTL_GET_SHADOW_COPY_DATA: connectpath %s, not supported.\n", 
 					conn->connectpath));
-				reply_nterror(req, NT_STATUS_NOT_SUPPORTED);
-				return;
+				return ERROR_NT(NT_STATUS_NOT_SUPPORTED);
 			} else {
 				DEBUG(0,("FSCTL_GET_SHADOW_COPY_DATA: connectpath %s, failed.\n", 
 					conn->connectpath));
-				reply_nterror(req, NT_STATUS_UNSUCCESSFUL);
-				return;
+				return ERROR_NT(NT_STATUS_UNSUCCESSFUL);			
 			}
 		}
 
@@ -1902,16 +2363,14 @@
 			DEBUG(0,("FSCTL_GET_SHADOW_COPY_DATA: max_data_count(%u) too small (%u) bytes needed!\n",
 				max_data_count,data_count));
 			talloc_destroy(shadow_data->mem_ctx);
-			reply_nterror(req, NT_STATUS_BUFFER_TOO_SMALL);
-			return;
+			return ERROR_NT(NT_STATUS_BUFFER_TOO_SMALL);
 		}
 
 		pdata = nttrans_realloc(ppdata, data_count);
 		if (pdata == NULL) {
 			talloc_destroy(shadow_data->mem_ctx);
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
-			return;
-		}
+			return ERROR_NT(NT_STATUS_NO_MEMORY);
+		}		
 
 		cur_pdata = pdata;
 
@@ -1932,10 +2391,7 @@
 			shadow_data->num_volumes,fsp->fsp_name));
 		if (labels && shadow_data->labels) {
 			for (i=0;i<shadow_data->num_volumes;i++) {
-				srvstr_push(pdata, req->flags2,
-					    cur_pdata, shadow_data->labels[i],
-					    2*sizeof(SHADOW_COPY_LABEL),
-					    STR_UNICODE|STR_TERMINATE);
+				srvstr_push(outbuf, cur_pdata, shadow_data->labels[i], 2*sizeof(SHADOW_COPY_LABEL), STR_UNICODE|STR_TERMINATE);
 				cur_pdata+=2*sizeof(SHADOW_COPY_LABEL);
 				DEBUGADD(10,("Label[%u]: '%s'\n",i,shadow_data->labels[i]));
 			}
@@ -1943,16 +2399,16 @@
 
 		talloc_destroy(shadow_data->mem_ctx);
 
-		send_nt_replies(conn, req, NT_STATUS_OK, NULL, 0,
+		send_nt_replies(outbuf, bufsize, NT_STATUS_OK, NULL, 0,
 				pdata, data_count);
 
-		return;
+		return -1;
         }
-
+        
 	case FSCTL_FIND_FILES_BY_SID: /* I hope this name is right */
 	{
-		/* pretend this succeeded -
-		 *
+		/* pretend this succeeded - 
+		 * 
 		 * we have to send back a list with all files owned by this SID
 		 *
 		 * but I have to check that --metze
@@ -1960,26 +2416,23 @@
 		DOM_SID sid;
 		uid_t uid;
 		size_t sid_len = MIN(data_count-4,SID_MAX_SIZE);
-
+		
 		DEBUG(10,("FSCTL_FIND_FILES_BY_SID: called on FID[0x%04X]\n",fidnum));
 
-		if (!fsp_belongs_conn(conn, req, fsp, &current_user)) {
-			return;
-		}
+		FSP_BELONGS_CONN(fsp,conn);
 
 		/* unknown 4 bytes: this is not the length of the sid :-(  */
 		/*unknown = IVAL(pdata,0);*/
-
+		
 		sid_parse(pdata+4,sid_len,&sid);
-		DEBUGADD(10, ("for SID: %s\n", sid_string_dbg(&sid)));
+		DEBUGADD(10,("for SID: %s\n",sid_string_static(&sid)));
 
 		if (!sid_to_uid(&sid, &uid)) {
 			DEBUG(0,("sid_to_uid: failed, sid[%s] sid_len[%lu]\n",
-				 sid_string_dbg(&sid),
-				 (unsigned long)sid_len));
+				sid_string_static(&sid),(unsigned long)sid_len));
 			uid = (-1);
 		}
-
+		
 		/* we can take a look at the find source :-)
 		 *
 		 * find ./ -uid $uid  -name '*'   is what we need here
@@ -1992,16 +2445,17 @@
 		 * (maybe we can hang the result anywhere in the fsp struct)
 		 *
 		 * we don't send all files at once
-		 * and at the next we should *not* start from the beginning,
-		 * so we have to cache the result
+		 * and at the next we should *not* start from the beginning, 
+		 * so we have to cache the result 
 		 *
 		 * --metze
 		 */
-
+		
 		/* this works for now... */
-		send_nt_replies(conn, req, NT_STATUS_OK, NULL, 0, NULL, 0);
-		return;
-	}
+		send_nt_replies(outbuf, bufsize, NT_STATUS_OK, NULL, 0,
+				NULL, 0);
+		return -1;	
+	}	
 	default:
 		if (!logged_message) {
 			logged_message = True; /* Only print this once... */
@@ -2010,24 +2464,19 @@
 		}
 	}
 
-	reply_nterror(req, NT_STATUS_NOT_SUPPORTED);
+	return ERROR_NT(NT_STATUS_NOT_SUPPORTED);
 }
 
 
 #ifdef HAVE_SYS_QUOTAS
 /****************************************************************************
- Reply to get user quota
+ Reply to get user quota 
 ****************************************************************************/
 
-static void call_nt_transact_get_user_quota(connection_struct *conn,
-					    struct smb_request *req,
-					    uint16 **ppsetup,
-					    uint32 setup_count,
-					    char **ppparams,
-					    uint32 parameter_count,
-					    char **ppdata,
-					    uint32 data_count,
-					    uint32 max_data_count)
+static int call_nt_transact_get_user_quota(connection_struct *conn, char *inbuf, char *outbuf, int length, int bufsize, 
+                                  uint16 **ppsetup, uint32 setup_count,
+				  char **ppparams, uint32 parameter_count,
+				  char **ppdata, uint32 data_count, uint32 max_data_count)
 {
 	NTSTATUS nt_status = NT_STATUS_OK;
 	char *params = *ppparams;
@@ -2040,7 +2489,7 @@
 	uint16 level = 0;
 	size_t sid_len;
 	DOM_SID sid;
-	bool start_enum = True;
+	BOOL start_enum = True;
 	SMB_NTQUOTA_STRUCT qt;
 	SMB_NTQUOTA_LIST *tmp_list;
 	SMB_NTQUOTA_HANDLE *qt_handle = NULL;
@@ -2051,8 +2500,7 @@
 	if (current_user.ut.uid != 0) {
 		DEBUG(1,("get_user_quota: access_denied service [%s] user [%s]\n",
 			lp_servicename(SNUM(conn)),conn->user));
-		reply_doserror(req, ERRDOS, ERRnoaccess);
-		return;
+		return ERROR_DOS(ERRDOS,ERRnoaccess);
 	}
 
 	/*
@@ -2061,16 +2509,14 @@
 
 	if (parameter_count < 4) {
 		DEBUG(0,("TRANSACT_GET_USER_QUOTA: requires %d >= 4 bytes parameters\n",parameter_count));
-		reply_doserror(req, ERRDOS, ERRinvalidparam);
-		return;
+		return ERROR_DOS(ERRDOS,ERRinvalidparam);
 	}
-
+	
 	/* maybe we can check the quota_fnum */
-	fsp = file_fsp(SVAL(params,0));
+	fsp = file_fsp(params,0);
 	if (!CHECK_NTQUOTA_HANDLE_OK(fsp,conn)) {
 		DEBUG(3,("TRANSACT_GET_USER_QUOTA: no valid QUOTA HANDLE\n"));
-		reply_nterror(req, NT_STATUS_INVALID_HANDLE);
-		return;
+		return ERROR_NT(NT_STATUS_INVALID_HANDLE);
 	}
 
 	/* the NULL pointer checking for fsp->fake_file_handle->pd
@@ -2079,16 +2525,16 @@
 	qt_handle = (SMB_NTQUOTA_HANDLE *)fsp->fake_file_handle->pd;
 
 	level = SVAL(params,2);
-
-	/* unknown 12 bytes leading in params */
-
+	
+	/* unknown 12 bytes leading in params */ 
+	
 	switch (level) {
 		case TRANSACT_GET_USER_QUOTA_LIST_CONTINUE:
 			/* seems that we should continue with the enum here --metze */
 
-			if (qt_handle->quota_list!=NULL &&
+			if (qt_handle->quota_list!=NULL && 
 			    qt_handle->tmp_list==NULL) {
-
+		
 				/* free the list */
 				free_ntquota_list(&(qt_handle->quota_list));
 
@@ -2096,8 +2542,7 @@
 				param_len = 4;
 				params = nttrans_realloc(ppparams, param_len);
 				if(params == NULL) {
-					reply_doserror(req, ERRDOS, ERRnomem);
-					return;
+					return ERROR_DOS(ERRDOS,ERRnomem);
 				}
 
 				data_len = 0;
@@ -2115,33 +2560,29 @@
 				start_enum = True;
 			}
 
-			if (start_enum && vfs_get_user_ntquota_list(fsp,&(qt_handle->quota_list))!=0) {
-				reply_doserror(req, ERRSRV, ERRerror);
-				return;
-			}
+			if (start_enum && vfs_get_user_ntquota_list(fsp,&(qt_handle->quota_list))!=0)
+				return ERROR_DOS(ERRSRV,ERRerror);
 
 			/* Realloc the size of parameters and data we will return */
 			param_len = 4;
 			params = nttrans_realloc(ppparams, param_len);
 			if(params == NULL) {
-				reply_doserror(req, ERRDOS, ERRnomem);
-				return;
+				return ERROR_DOS(ERRDOS,ERRnomem);
 			}
 
 			/* we should not trust the value in max_data_count*/
 			max_data_count = MIN(max_data_count,2048);
-
+			
 			pdata = nttrans_realloc(ppdata, max_data_count);/* should be max data count from client*/
 			if(pdata == NULL) {
-				reply_doserror(req, ERRDOS, ERRnomem);
-				return;
+				return ERROR_DOS(ERRDOS,ERRnomem);
 			}
 
 			entry = pdata;
 
 			/* set params Size of returned Quota Data 4 bytes*/
 			/* but set it later when we know it */
-
+		
 			/* for each entry push the data */
 
 			if (start_enum) {
@@ -2153,34 +2594,33 @@
 			for (;((tmp_list!=NULL)&&((qt_len +40+SID_MAX_SIZE)<max_data_count));
 				tmp_list=tmp_list->next,entry+=entry_len,qt_len+=entry_len) {
 
-				sid_len = ndr_size_dom_sid(
-					&tmp_list->quotas->sid, 0);
+				sid_len = sid_size(&tmp_list->quotas->sid);
 				entry_len = 40 + sid_len;
 
 				/* nextoffset entry 4 bytes */
 				SIVAL(entry,0,entry_len);
-
+		
 				/* then the len of the SID 4 bytes */
 				SIVAL(entry,4,sid_len);
-
+				
 				/* unknown data 8 bytes SMB_BIG_UINT */
 				SBIG_UINT(entry,8,(SMB_BIG_UINT)0); /* this is not 0 in windows...-metze*/
-
+				
 				/* the used disk space 8 bytes SMB_BIG_UINT */
 				SBIG_UINT(entry,16,tmp_list->quotas->usedspace);
-
+				
 				/* the soft quotas 8 bytes SMB_BIG_UINT */
 				SBIG_UINT(entry,24,tmp_list->quotas->softlim);
-
+				
 				/* the hard quotas 8 bytes SMB_BIG_UINT */
 				SBIG_UINT(entry,32,tmp_list->quotas->hardlim);
-
+				
 				/* and now the SID */
 				sid_linearize(entry+40, sid_len, &tmp_list->quotas->sid);
 			}
-
+			
 			qt_handle->tmp_list = tmp_list;
-
+			
 			/* overwrite the offset of the last entry */
 			SIVAL(entry-entry_len,0,0);
 
@@ -2191,26 +2631,23 @@
 			break;
 
 		case TRANSACT_GET_USER_QUOTA_FOR_SID:
-
-			/* unknown 4 bytes IVAL(pdata,0) */
-
+			
+			/* unknown 4 bytes IVAL(pdata,0) */	
+			
 			if (data_count < 8) {
 				DEBUG(0,("TRANSACT_GET_USER_QUOTA_FOR_SID: requires %d >= %d bytes data\n",data_count,8));
-				reply_doserror(req, ERRDOS, ERRunknownlevel);
-				return;
+				return ERROR_DOS(ERRDOS,ERRunknownlevel);				
 			}
 
 			sid_len = IVAL(pdata,4);
 			/* Ensure this is less than 1mb. */
 			if (sid_len > (1024*1024)) {
-				reply_doserror(req, ERRDOS, ERRnomem);
-				return;
+				return ERROR_DOS(ERRDOS,ERRnomem);
 			}
 
 			if (data_count < 8+sid_len) {
 				DEBUG(0,("TRANSACT_GET_USER_QUOTA_FOR_SID: requires %d >= %lu bytes data\n",data_count,(unsigned long)(8+sid_len)));
-				reply_doserror(req, ERRDOS, ERRunknownlevel);
-				return;
+				return ERROR_DOS(ERRDOS,ERRunknownlevel);				
 			}
 
 			data_len = 4+40+sid_len;
@@ -2226,11 +2663,11 @@
 			}
 
 			sid_parse(pdata+8,sid_len,&sid);
-
+		
 			if (vfs_get_ntquota(fsp, SMB_USER_QUOTA_TYPE, &sid, &qt)!=0) {
 				ZERO_STRUCT(qt);
-				/*
-				 * we have to return zero's in all fields
+				/* 
+				 * we have to return zero's in all fields 
 				 * instead of returning an error here
 				 * --metze
 				 */
@@ -2240,39 +2677,37 @@
 			param_len = 4;
 			params = nttrans_realloc(ppparams, param_len);
 			if(params == NULL) {
-				reply_doserror(req, ERRDOS, ERRnomem);
-				return;
+				return ERROR_DOS(ERRDOS,ERRnomem);
 			}
 
 			pdata = nttrans_realloc(ppdata, data_len);
 			if(pdata == NULL) {
-				reply_doserror(req, ERRDOS, ERRnomem);
-				return;
+				return ERROR_DOS(ERRDOS,ERRnomem);
 			}
 
 			entry = pdata;
 
 			/* set params Size of returned Quota Data 4 bytes*/
 			SIVAL(params,0,data_len);
-
+	
 			/* nextoffset entry 4 bytes */
 			SIVAL(entry,0,0);
-
+	
 			/* then the len of the SID 4 bytes */
 			SIVAL(entry,4,sid_len);
-
+			
 			/* unknown data 8 bytes SMB_BIG_UINT */
 			SBIG_UINT(entry,8,(SMB_BIG_UINT)0); /* this is not 0 in windows...-mezte*/
-
+			
 			/* the used disk space 8 bytes SMB_BIG_UINT */
 			SBIG_UINT(entry,16,qt.usedspace);
-
+			
 			/* the soft quotas 8 bytes SMB_BIG_UINT */
 			SBIG_UINT(entry,24,qt.softlim);
-
+			
 			/* the hard quotas 8 bytes SMB_BIG_UINT */
 			SBIG_UINT(entry,32,qt.hardlim);
-
+			
 			/* and now the SID */
 			sid_linearize(entry+40, sid_len, &sid);
 
@@ -2280,28 +2715,24 @@
 
 		default:
 			DEBUG(0,("do_nt_transact_get_user_quota: fnum %d unknown level 0x%04hX\n",fsp->fnum,level));
-			reply_doserror(req, ERRSRV, ERRerror);
-			return;
+			return ERROR_DOS(ERRSRV,ERRerror);
 			break;
 	}
 
-	send_nt_replies(conn, req, nt_status, params, param_len,
+	send_nt_replies(outbuf, bufsize, nt_status, params, param_len,
 			pdata, data_len);
+
+	return -1;
 }
 
 /****************************************************************************
  Reply to set user quota
 ****************************************************************************/
 
-static void call_nt_transact_set_user_quota(connection_struct *conn,
-					    struct smb_request *req,
-					    uint16 **ppsetup,
-					    uint32 setup_count,
-					    char **ppparams,
-					    uint32 parameter_count,
-					    char **ppdata,
-					    uint32 data_count,
-					    uint32 max_data_count)
+static int call_nt_transact_set_user_quota(connection_struct *conn, char *inbuf, char *outbuf, int length, int bufsize, 
+                                  uint16 **ppsetup, uint32 setup_count,
+				  char **ppparams, uint32 parameter_count,
+				  char **ppdata, uint32 data_count, uint32 max_data_count)
 {
 	char *params = *ppparams;
 	char *pdata = *ppdata;
@@ -2317,8 +2748,7 @@
 	if (current_user.ut.uid != 0) {
 		DEBUG(1,("set_user_quota: access_denied service [%s] user [%s]\n",
 			lp_servicename(SNUM(conn)),conn->user));
-		reply_doserror(req, ERRDOS, ERRnoaccess);
-		return;
+		return ERROR_DOS(ERRDOS,ERRnoaccess);
 	}
 
 	/*
@@ -2327,22 +2757,19 @@
 
 	if (parameter_count < 2) {
 		DEBUG(0,("TRANSACT_SET_USER_QUOTA: requires %d >= 2 bytes parameters\n",parameter_count));
-		reply_doserror(req, ERRDOS, ERRinvalidparam);
-		return;
+		return ERROR_DOS(ERRDOS,ERRinvalidparam);
 	}
-
+	
 	/* maybe we can check the quota_fnum */
-	fsp = file_fsp(SVAL(params,0));
+	fsp = file_fsp(params,0);
 	if (!CHECK_NTQUOTA_HANDLE_OK(fsp,conn)) {
 		DEBUG(3,("TRANSACT_GET_USER_QUOTA: no valid QUOTA HANDLE\n"));
-		reply_nterror(req, NT_STATUS_INVALID_HANDLE);
-		return;
+		return ERROR_NT(NT_STATUS_INVALID_HANDLE);
 	}
 
 	if (data_count < 40) {
 		DEBUG(0,("TRANSACT_SET_USER_QUOTA: requires %d >= %d bytes data\n",data_count,40));
-		reply_doserror(req, ERRDOS, ERRunknownlevel);
-		return;
+		return ERROR_DOS(ERRDOS,ERRunknownlevel);		
 	}
 
 	/* offset to next quota record.
@@ -2355,11 +2782,10 @@
 
 	if (data_count < 40+sid_len) {
 		DEBUG(0,("TRANSACT_SET_USER_QUOTA: requires %d >= %lu bytes data\n",data_count,(unsigned long)40+sid_len));
-		reply_doserror(req, ERRDOS, ERRunknownlevel);
-		return;
+		return ERROR_DOS(ERRDOS,ERRunknownlevel);		
 	}
 
-	/* unknown 8 bytes in pdata
+	/* unknown 8 bytes in pdata 
 	 * maybe its the change time in NTTIME
 	 */
 
@@ -2372,8 +2798,7 @@
 		((qt.usedspace != 0xFFFFFFFF)||
 		(IVAL(pdata,20)!=0xFFFFFFFF))) {
 		/* more than 32 bits? */
-		reply_doserror(req, ERRDOS, ERRunknownlevel);
-		return;
+		return ERROR_DOS(ERRDOS,ERRunknownlevel);
 	}
 #endif /* LARGE_SMB_OFF_T */
 
@@ -2386,8 +2811,7 @@
 		((qt.softlim != 0xFFFFFFFF)||
 		(IVAL(pdata,28)!=0xFFFFFFFF))) {
 		/* more than 32 bits? */
-		reply_doserror(req, ERRDOS, ERRunknownlevel);
-		return;
+		return ERROR_DOS(ERRDOS,ERRunknownlevel);
 	}
 #endif /* LARGE_SMB_OFF_T */
 
@@ -2400,33 +2824,34 @@
 		((qt.hardlim != 0xFFFFFFFF)||
 		(IVAL(pdata,36)!=0xFFFFFFFF))) {
 		/* more than 32 bits? */
-		reply_doserror(req, ERRDOS, ERRunknownlevel);
-		return;
+		return ERROR_DOS(ERRDOS,ERRunknownlevel);
 	}
 #endif /* LARGE_SMB_OFF_T */
-
+	
 	sid_parse(pdata+40,sid_len,&sid);
-	DEBUGADD(8,("SID: %s\n", sid_string_dbg(&sid)));
+	DEBUGADD(8,("SID: %s\n",sid_string_static(&sid)));
 
 	/* 44 unknown bytes left... */
 
 	if (vfs_set_ntquota(fsp, SMB_USER_QUOTA_TYPE, &sid, &qt)!=0) {
-		reply_doserror(req, ERRSRV, ERRerror);
-		return;
+		return ERROR_DOS(ERRSRV,ERRerror);	
 	}
 
-	send_nt_replies(conn, req, NT_STATUS_OK, params, param_len,
+	send_nt_replies(outbuf, bufsize, NT_STATUS_OK, params, param_len,
 			pdata, data_len);
+
+	return -1;
 }
 #endif /* HAVE_SYS_QUOTAS */
 
-static void handle_nttrans(connection_struct *conn,
-			   struct trans_state *state,
-			   struct smb_request *req)
+static int handle_nttrans(connection_struct *conn,
+			  struct trans_state *state,
+			  char *inbuf, char *outbuf, int size, int bufsize)
 {
+	int outsize;
+
 	if (Protocol >= PROTOCOL_NT1) {
-		req->flags2 |= 0x40; /* IS_LONG_NAME */
-		SSVAL(req->inbuf,smb_flg2,req->flags2);
+		SSVAL(outbuf,smb_flg2,SVAL(outbuf,smb_flg2) | 0x40); /* IS_LONG_NAME */
 	}
 
 	/* Now we must call the relevant NT_TRANS function */
@@ -2434,12 +2859,12 @@
 		case NT_TRANSACT_CREATE:
 		{
 			START_PROFILE(NT_transact_create);
-			call_nt_transact_create(
-				conn, req,
-				&state->setup, state->setup_count,
-				&state->param, state->total_param,
-				&state->data, state->total_data,
-				state->max_data_return);
+			outsize = call_nt_transact_create(conn, inbuf, outbuf,
+							  size, bufsize, 
+							&state->setup, state->setup_count,
+							&state->param, state->total_param, 
+							&state->data, state->total_data,
+							  state->max_data_return);
 			END_PROFILE(NT_transact_create);
 			break;
 		}
@@ -2447,12 +2872,11 @@
 		case NT_TRANSACT_IOCTL:
 		{
 			START_PROFILE(NT_transact_ioctl);
-			call_nt_transact_ioctl(
-				conn, req,
-				&state->setup, state->setup_count,
-				&state->param, state->total_param,
-				&state->data, state->total_data,
-				state->max_data_return);
+			outsize = call_nt_transact_ioctl(conn, inbuf, outbuf,
+							 size, bufsize, 
+							 &state->setup, state->setup_count,
+							 &state->param, state->total_param, 
+							 &state->data, state->total_data, state->max_data_return);
 			END_PROFILE(NT_transact_ioctl);
 			break;
 		}
@@ -2460,12 +2884,11 @@
 		case NT_TRANSACT_SET_SECURITY_DESC:
 		{
 			START_PROFILE(NT_transact_set_security_desc);
-			call_nt_transact_set_security_desc(
-				conn, req,
-				&state->setup, state->setup_count,
-				&state->param, state->total_param,
-				&state->data, state->total_data,
-				state->max_data_return);
+			outsize = call_nt_transact_set_security_desc(conn, inbuf, outbuf, 
+							 size, bufsize, 
+							 &state->setup, state->setup_count,
+							 &state->param, state->total_param, 
+							 &state->data, state->total_data, state->max_data_return);
 			END_PROFILE(NT_transact_set_security_desc);
 			break;
 		}
@@ -2473,10 +2896,10 @@
 		case NT_TRANSACT_NOTIFY_CHANGE:
 		{
 			START_PROFILE(NT_transact_notify_change);
-			call_nt_transact_notify_change(
-				conn, req,
+			outsize = call_nt_transact_notify_change(
+				conn, inbuf, outbuf, size, bufsize, 
 				&state->setup, state->setup_count,
-				&state->param, state->total_param,
+				&state->param, state->total_param, 
 				&state->data, state->total_data,
 				state->max_data_return,
 				state->max_param_return);
@@ -2487,12 +2910,11 @@
 		case NT_TRANSACT_RENAME:
 		{
 			START_PROFILE(NT_transact_rename);
-			call_nt_transact_rename(
-				conn, req,
-				&state->setup, state->setup_count,
-				&state->param, state->total_param,
-				&state->data, state->total_data,
-				state->max_data_return);
+			outsize = call_nt_transact_rename(conn, inbuf, outbuf,
+							 size, bufsize, 
+							 &state->setup, state->setup_count,
+							 &state->param, state->total_param, 
+							 &state->data, state->total_data, state->max_data_return);
 			END_PROFILE(NT_transact_rename);
 			break;
 		}
@@ -2500,12 +2922,11 @@
 		case NT_TRANSACT_QUERY_SECURITY_DESC:
 		{
 			START_PROFILE(NT_transact_query_security_desc);
-			call_nt_transact_query_security_desc(
-				conn, req,
-				&state->setup, state->setup_count,
-				&state->param, state->total_param,
-				&state->data, state->total_data,
-				state->max_data_return);
+			outsize = call_nt_transact_query_security_desc(conn, inbuf, outbuf, 
+							 size, bufsize, 
+							 &state->setup, state->setup_count,
+							 &state->param, state->total_param, 
+							 &state->data, state->total_data, state->max_data_return);
 			END_PROFILE(NT_transact_query_security_desc);
 			break;
 		}
@@ -2514,12 +2935,11 @@
 		case NT_TRANSACT_GET_USER_QUOTA:
 		{
 			START_PROFILE(NT_transact_get_user_quota);
-			call_nt_transact_get_user_quota(
-				conn, req,
-				&state->setup, state->setup_count,
-				&state->param, state->total_param,
-				&state->data, state->total_data,
-				state->max_data_return);
+			outsize = call_nt_transact_get_user_quota(conn, inbuf, outbuf, 
+							 size, bufsize, 
+							 &state->setup, state->setup_count,
+							 &state->param, state->total_param, 
+							 &state->data, state->total_data, state->max_data_return);
 			END_PROFILE(NT_transact_get_user_quota);
 			break;
 		}
@@ -2527,113 +2947,94 @@
 		case NT_TRANSACT_SET_USER_QUOTA:
 		{
 			START_PROFILE(NT_transact_set_user_quota);
-			call_nt_transact_set_user_quota(
-				conn, req,
-				&state->setup, state->setup_count,
-				&state->param, state->total_param,
-				&state->data, state->total_data,
-				state->max_data_return);
+			outsize = call_nt_transact_set_user_quota(conn, inbuf, outbuf, 
+							 size, bufsize, 
+							 &state->setup, state->setup_count,
+							 &state->param, state->total_param, 
+							 &state->data, state->total_data, state->max_data_return);
 			END_PROFILE(NT_transact_set_user_quota);
-			break;
+			break;					
 		}
 #endif /* HAVE_SYS_QUOTAS */
 
 		default:
 			/* Error in request */
-			DEBUG(0,("handle_nttrans: Unknown request %d in "
-				 "nttrans call\n", state->call));
-			reply_doserror(req, ERRSRV, ERRerror);
-			return;
+			DEBUG(0,("reply_nttrans: Unknown request %d in nttrans call\n",
+				 state->call));
+			return ERROR_DOS(ERRSRV,ERRerror);
 	}
-	return;
+	return outsize;
 }
 
 /****************************************************************************
  Reply to a SMBNTtrans.
 ****************************************************************************/
 
-void reply_nttrans(struct smb_request *req)
+int reply_nttrans(connection_struct *conn,
+			char *inbuf,char *outbuf,int size,int bufsize)
 {
-	connection_struct *conn = req->conn;
-	uint32_t pscnt;
-	uint32_t psoff;
-	uint32_t dscnt;
-	uint32_t dsoff;
-	uint16 function_code;
+	int  outsize = 0;
+	uint32 pscnt = IVAL(inbuf,smb_nt_ParameterCount);
+	uint32 psoff = IVAL(inbuf,smb_nt_ParameterOffset);
+	uint32 dscnt = IVAL(inbuf,smb_nt_DataCount);
+	uint32 dsoff = IVAL(inbuf,smb_nt_DataOffset);
+	uint32 av_size = size-4;
+
+	uint16 function_code = SVAL( inbuf, smb_nt_Function);
 	NTSTATUS result;
 	struct trans_state *state;
-	uint32_t size;
-	uint32_t av_size;
 
 	START_PROFILE(SMBnttrans);
 
-	if (req->wct < 19) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBnttrans);
-		return;
-	}
-
-	size = smb_len(req->inbuf) + 4;
-	av_size = smb_len(req->inbuf);
-	pscnt = IVAL(req->inbuf,smb_nt_ParameterCount);
-	psoff = IVAL(req->inbuf,smb_nt_ParameterOffset);
-	dscnt = IVAL(req->inbuf,smb_nt_DataCount);
-	dsoff = IVAL(req->inbuf,smb_nt_DataOffset);
-	function_code = SVAL(req->inbuf, smb_nt_Function);
-
 	if (IS_IPC(conn) && (function_code != NT_TRANSACT_CREATE)) {
-		reply_doserror(req, ERRSRV, ERRaccess);
 		END_PROFILE(SMBnttrans);
-		return;
+		return ERROR_DOS(ERRSRV,ERRaccess);
 	}
 
-	result = allow_new_trans(conn->pending_trans, req->mid);
+	result = allow_new_trans(conn->pending_trans, SVAL(inbuf, smb_mid));
 	if (!NT_STATUS_IS_OK(result)) {
 		DEBUG(2, ("Got invalid nttrans request: %s\n", nt_errstr(result)));
-		reply_nterror(req, result);
 		END_PROFILE(SMBnttrans);
-		return;
+		return ERROR_NT(result);
 	}
 
 	if ((state = TALLOC_P(conn->mem_ctx, struct trans_state)) == NULL) {
-		reply_doserror(req, ERRSRV, ERRaccess);
 		END_PROFILE(SMBnttrans);
-		return;
+		return ERROR_DOS(ERRSRV,ERRaccess);
 	}
 
 	state->cmd = SMBnttrans;
 
-	state->mid = req->mid;
-	state->vuid = req->vuid;
-	state->total_data = IVAL(req->inbuf, smb_nt_TotalDataCount);
+	state->mid = SVAL(inbuf,smb_mid);
+	state->vuid = SVAL(inbuf,smb_uid);
+	state->total_data = IVAL(inbuf, smb_nt_TotalDataCount);
 	state->data = NULL;
-	state->total_param = IVAL(req->inbuf, smb_nt_TotalParameterCount);
+	state->total_param = IVAL(inbuf, smb_nt_TotalParameterCount);
 	state->param = NULL;
-	state->max_data_return = IVAL(req->inbuf,smb_nt_MaxDataCount);
-	state->max_param_return = IVAL(req->inbuf,smb_nt_MaxParameterCount);
+	state->max_data_return = IVAL(inbuf,smb_nt_MaxDataCount);	
+	state->max_param_return = IVAL(inbuf,smb_nt_MaxParameterCount);
 
 	/* setup count is in *words* */
-	state->setup_count = 2*CVAL(req->inbuf,smb_nt_SetupCount);
+	state->setup_count = 2*CVAL(inbuf,smb_nt_SetupCount); 
 	state->setup = NULL;
 	state->call = function_code;
 
-	/*
+	/* 
 	 * All nttrans messages we handle have smb_wct == 19 +
 	 * state->setup_count.  Ensure this is so as a sanity check.
 	 */
 
-	if(req->wct != 19 + (state->setup_count/2)) {
+	if(CVAL(inbuf, smb_wct) != 19 + (state->setup_count/2)) {
 		DEBUG(2,("Invalid smb_wct %d in nttrans call (should be %d)\n",
-			 req->wct, 19 + (state->setup_count/2)));
+			CVAL(inbuf, smb_wct), 19 + (state->setup_count/2)));
 		goto bad_param;
 	}
 
 	/* Don't allow more than 128mb for each value. */
 	if ((state->total_data > (1024*1024*128)) ||
 	    (state->total_param > (1024*1024*128))) {
-		reply_doserror(req, ERRDOS, ERRnomem);
 		END_PROFILE(SMBnttrans);
-		return;
+		return ERROR_DOS(ERRDOS,ERRnomem);
 	}
 
 	if ((dscnt > state->total_data) || (pscnt > state->total_param))
@@ -2646,10 +3047,9 @@
 			DEBUG(0,("reply_nttrans: data malloc fail for %u "
 				 "bytes !\n", (unsigned int)state->total_data));
 			TALLOC_FREE(state);
-			reply_doserror(req, ERRDOS, ERRnomem);
 			END_PROFILE(SMBnttrans);
-			return;
-		}
+			return(ERROR_DOS(ERRDOS,ERRnomem));
+		} 
 
 		if (dscnt > state->total_data ||
 				dsoff+dscnt < dsoff) {
@@ -2662,7 +3062,7 @@
 			goto bad_param;
 		}
 
-		memcpy(state->data,smb_base(req->inbuf)+dsoff,dscnt);
+		memcpy(state->data,smb_base(inbuf)+dsoff,dscnt);
 	}
 
 	if (state->total_param) {
@@ -2673,10 +3073,9 @@
 				 "bytes !\n", (unsigned int)state->total_param));
 			SAFE_FREE(state->data);
 			TALLOC_FREE(state);
-			reply_doserror(req, ERRDOS, ERRnomem);
 			END_PROFILE(SMBnttrans);
-			return;
-		}
+			return(ERROR_DOS(ERRDOS,ERRnomem));
+		} 
 
 		if (pscnt > state->total_param ||
 				psoff+pscnt < psoff) {
@@ -2689,7 +3088,7 @@
 			goto bad_param;
 		}
 
-		memcpy(state->param,smb_base(req->inbuf)+psoff,pscnt);
+		memcpy(state->param,smb_base(inbuf)+psoff,pscnt);
 	}
 
 	state->received_data  = dscnt;
@@ -2704,9 +3103,8 @@
 			SAFE_FREE(state->data);
 			SAFE_FREE(state->param);
 			TALLOC_FREE(state);
-			reply_doserror(req, ERRDOS, ERRnomem);
 			END_PROFILE(SMBnttrans);
-			return;
+			return ERROR_DOS(ERRDOS,ERRnomem);
 		}
 
 		if ((smb_nt_SetupStart + state->setup_count < smb_nt_SetupStart) ||
@@ -2717,29 +3115,29 @@
 			goto bad_param;
 		}
 
-		memcpy( state->setup, &req->inbuf[smb_nt_SetupStart],
-			state->setup_count);
-		dump_data(10, (uint8 *)state->setup, state->setup_count);
+		memcpy( state->setup, &inbuf[smb_nt_SetupStart], state->setup_count);
+		dump_data(10, (char *)state->setup, state->setup_count);
 	}
 
 	if ((state->received_data == state->total_data) &&
 	    (state->received_param == state->total_param)) {
-		handle_nttrans(conn, state, req);
+		outsize = handle_nttrans(conn, state, inbuf, outbuf,
+					 size, bufsize);
 		SAFE_FREE(state->param);
 		SAFE_FREE(state->data);
 		TALLOC_FREE(state);
 		END_PROFILE(SMBnttrans);
-		return;
+		return outsize;
 	}
 
 	DLIST_ADD(conn->pending_trans, state);
 
 	/* We need to send an interim response then receive the rest
 	   of the parameter/data bytes */
-	reply_outbuf(req, 0, 0);
-	show_msg((char *)req->outbuf);
+	outsize = set_message(outbuf,0,0,False);
+	show_msg(outbuf);
 	END_PROFILE(SMBnttrans);
-	return;
+	return outsize;
 
   bad_param:
 
@@ -2747,71 +3145,58 @@
 	SAFE_FREE(state->data);
 	SAFE_FREE(state->param);
 	TALLOC_FREE(state);
-	reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
 	END_PROFILE(SMBnttrans);
-	return;
+	return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 }
-
+	
 /****************************************************************************
  Reply to a SMBnttranss
  ****************************************************************************/
 
-void reply_nttranss(struct smb_request *req)
+int reply_nttranss(connection_struct *conn,  char *inbuf,char *outbuf,
+		   int size,int bufsize)
 {
-	connection_struct *conn = req->conn;
+	int outsize = 0;
 	uint32_t pcnt,poff,dcnt,doff,pdisp,ddisp;
+	uint32_t av_size = size-4;
 	struct trans_state *state;
-	uint32_t av_size;
-	uint32_t size;
 
 	START_PROFILE(SMBnttranss);
 
-	show_msg((char *)req->inbuf);
+	show_msg(inbuf);
 
-	if (req->wct < 18) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBnttranss);
-		return;
-	}
-
 	for (state = conn->pending_trans; state != NULL;
 	     state = state->next) {
-		if (state->mid == req->mid) {
+		if (state->mid == SVAL(inbuf,smb_mid)) {
 			break;
 		}
 	}
 
 	if ((state == NULL) || (state->cmd != SMBnttrans)) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
 		END_PROFILE(SMBnttranss);
-		return;
+		return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 	}
 
 	/* Revise state->total_param and state->total_data in case they have
 	   changed downwards */
-	if (IVAL(req->inbuf, smb_nts_TotalParameterCount)
-	    < state->total_param) {
-		state->total_param = IVAL(req->inbuf,
-					  smb_nts_TotalParameterCount);
+	if (IVAL(inbuf, smb_nts_TotalParameterCount) < state->total_param) {
+		state->total_param = IVAL(inbuf, smb_nts_TotalParameterCount);
 	}
-	if (IVAL(req->inbuf, smb_nts_TotalDataCount) < state->total_data) {
-		state->total_data = IVAL(req->inbuf, smb_nts_TotalDataCount);
+	if (IVAL(inbuf, smb_nts_TotalDataCount) < state->total_data) {
+		state->total_data = IVAL(inbuf, smb_nts_TotalDataCount);
 	}
 
-	size = smb_len(req->inbuf) + 4;
-	av_size = smb_len(req->inbuf);
+	pcnt = IVAL(inbuf,smb_nts_ParameterCount);
+	poff = IVAL(inbuf, smb_nts_ParameterOffset);
+	pdisp = IVAL(inbuf, smb_nts_ParameterDisplacement);
 
-	pcnt = IVAL(req->inbuf,smb_nts_ParameterCount);
-	poff = IVAL(req->inbuf, smb_nts_ParameterOffset);
-	pdisp = IVAL(req->inbuf, smb_nts_ParameterDisplacement);
+	dcnt = IVAL(inbuf, smb_nts_DataCount);
+	ddisp = IVAL(inbuf, smb_nts_DataDisplacement);
+	doff = IVAL(inbuf, smb_nts_DataOffset);
 
-	dcnt = IVAL(req->inbuf, smb_nts_DataCount);
-	ddisp = IVAL(req->inbuf, smb_nts_DataDisplacement);
-	doff = IVAL(req->inbuf, smb_nts_DataOffset);
-
 	state->received_param += pcnt;
 	state->received_data += dcnt;
-
+		
 	if ((state->received_data > state->total_data) ||
 	    (state->received_param > state->total_param))
 		goto bad_param;
@@ -2831,7 +3216,7 @@
 			goto bad_param;
 		}
 
-		memcpy(state->param+pdisp, smb_base(req->inbuf)+poff,
+		memcpy(state->param+pdisp,smb_base(inbuf)+poff,
 		       pcnt);
 	}
 
@@ -2850,30 +3235,36 @@
 			goto bad_param;
 		}
 
-		memcpy(state->data+ddisp, smb_base(req->inbuf)+doff,
-		       dcnt);
+		memcpy(state->data+ddisp, smb_base(inbuf)+doff,
+		       dcnt);      
 	}
 
 	if ((state->received_param < state->total_param) ||
 	    (state->received_data < state->total_data)) {
 		END_PROFILE(SMBnttranss);
-		return;
+		return -1;
 	}
 
-	/*
-	 * construct_reply_common will copy smb_com from inbuf to
-	 * outbuf. SMBnttranss is wrong here.
+	/* construct_reply_common has done us the favor to pre-fill the
+	 * command field with SMBnttranss which is wrong :-)
 	 */
-	SCVAL(req->inbuf,smb_com,SMBnttrans);
+	SCVAL(outbuf,smb_com,SMBnttrans);
 
-	handle_nttrans(conn, state, req);
+	outsize = handle_nttrans(conn, state, inbuf, outbuf,
+				 size, bufsize);
 
 	DLIST_REMOVE(conn->pending_trans, state);
 	SAFE_FREE(state->data);
 	SAFE_FREE(state->param);
 	TALLOC_FREE(state);
+
+	if (outsize == 0) {
+		END_PROFILE(SMBnttranss);
+		return(ERROR_DOS(ERRSRV,ERRnosupport));
+	}
+	
 	END_PROFILE(SMBnttranss);
-	return;
+	return(outsize);
 
   bad_param:
 
@@ -2882,7 +3273,6 @@
 	SAFE_FREE(state->data);
 	SAFE_FREE(state->param);
 	TALLOC_FREE(state);
-	reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
 	END_PROFILE(SMBnttranss);
-	return;
+	return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 }

Modified: branches/samba/upstream/source/smbd/open.c
===================================================================
--- branches/samba/upstream/source/smbd/open.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/open.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,19 +16,22 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
-extern const struct generic_mapping file_generic_mapping;
+extern struct generic_mapping file_generic_mapping;
 extern struct current_user current_user;
 extern userdom_struct current_user_info;
-extern bool global_client_failed_oplock_break;
+extern uint16 global_smbpid;
+extern BOOL global_client_failed_oplock_break;
 
 struct deferred_open_record {
-	bool delayed_for_oplocks;
-	struct file_id id;
+	BOOL delayed_for_oplocks;
+	SMB_DEV_T dev;
+	SMB_INO_T inode;
 };
 
 /****************************************************************************
@@ -70,23 +73,15 @@
  Close the file associated with a fsp.
 ****************************************************************************/
 
-NTSTATUS fd_close(files_struct *fsp)
+NTSTATUS fd_close(struct connection_struct *conn, files_struct *fsp)
 {
-	int ret;
-
 	if (fsp->fh->fd == -1) {
 		return NT_STATUS_OK; /* What we used to call a stat open. */
 	}
 	if (fsp->fh->ref_count > 1) {
 		return NT_STATUS_OK; /* Shared handle. Only close last reference. */
 	}
-
-	ret = SMB_VFS_CLOSE(fsp);
-	fsp->fh->fd = -1;
-	if (ret == -1) {
-		return map_nt_error_from_unix(errno);
-	}
-	return NT_STATUS_OK;
+	return fd_close_posix(conn, fsp);
 }
 
 /****************************************************************************
@@ -110,7 +105,7 @@
 	}
 
 	become_root();
-	ret = SMB_VFS_FCHOWN(fsp, parent_st.st_uid, (gid_t)-1);
+	ret = SMB_VFS_FCHOWN(fsp, fsp->fh->fd, parent_st.st_uid, (gid_t)-1);
 	unbecome_root();
 	if (ret == -1) {
 		DEBUG(0,("change_file_owner_to_parent: failed to fchown "
@@ -125,25 +120,22 @@
 		  (unsigned int)parent_st.st_uid ));
 }
 
-static NTSTATUS change_dir_owner_to_parent(connection_struct *conn,
+static void change_dir_owner_to_parent(connection_struct *conn,
 				       const char *inherit_from_dir,
 				       const char *fname,
 				       SMB_STRUCT_STAT *psbuf)
 {
-	char *saved_dir = NULL;
+	pstring saved_dir;
 	SMB_STRUCT_STAT sbuf;
 	SMB_STRUCT_STAT parent_st;
-	TALLOC_CTX *ctx = talloc_tos();
-	NTSTATUS status = NT_STATUS_OK;
 	int ret;
 
 	ret = SMB_VFS_STAT(conn, inherit_from_dir, &parent_st);
 	if (ret == -1) {
-		status = map_nt_error_from_unix(errno);
 		DEBUG(0,("change_dir_owner_to_parent: failed to stat parent "
 			 "directory %s. Error was %s\n",
 			 inherit_from_dir, strerror(errno) ));
-		return status;
+		return;
 	}
 
 	/* We've already done an lstat into psbuf, and we know it's a
@@ -153,18 +145,14 @@
 	   should work on any UNIX (thanks tridge :-). JRA.
 	*/
 
-	saved_dir = vfs_GetWd(ctx,conn);
-	if (!saved_dir) {
-		status = map_nt_error_from_unix(errno);
+	if (!vfs_GetWd(conn,saved_dir)) {
 		DEBUG(0,("change_dir_owner_to_parent: failed to get "
-			 "current working directory. Error was %s\n",
-			 strerror(errno)));
-		return status;
+			 "current working directory\n"));
+		return;
 	}
 
 	/* Chdir into the new path. */
 	if (vfs_ChDir(conn, fname) == -1) {
-		status = map_nt_error_from_unix(errno);
 		DEBUG(0,("change_dir_owner_to_parent: failed to change "
 			 "current working directory to %s. Error "
 			 "was %s\n", fname, strerror(errno) ));
@@ -172,7 +160,6 @@
 	}
 
 	if (SMB_VFS_STAT(conn,".",&sbuf) == -1) {
-		status = map_nt_error_from_unix(errno);
 		DEBUG(0,("change_dir_owner_to_parent: failed to stat "
 			 "directory '.' (%s) Error was %s\n",
 			 fname, strerror(errno)));
@@ -186,7 +173,6 @@
 		DEBUG(0,("change_dir_owner_to_parent: "
 			 "device/inode/mode on directory %s changed. "
 			 "Refusing to chown !\n", fname ));
-		status = NT_STATUS_ACCESS_DENIED;
 		goto out;
 	}
 
@@ -194,7 +180,6 @@
 	ret = SMB_VFS_CHOWN(conn, ".", parent_st.st_uid, (gid_t)-1);
 	unbecome_root();
 	if (ret == -1) {
-		status = map_nt_error_from_unix(errno);
 		DEBUG(10,("change_dir_owner_to_parent: failed to chown "
 			  "directory %s to parent directory uid %u. "
 			  "Error was %s\n", fname,
@@ -209,7 +194,6 @@
  out:
 
 	vfs_ChDir(conn,saved_dir);
-	return status;
 }
 
 /****************************************************************************
@@ -218,7 +202,6 @@
 
 static NTSTATUS open_file(files_struct *fsp,
 			  connection_struct *conn,
-			  struct smb_request *req,
 			  const char *parent_dir,
 			  const char *name,
 			  const char *path,
@@ -231,7 +214,7 @@
 	NTSTATUS status = NT_STATUS_OK;
 	int accmode = (flags & O_ACCMODE);
 	int local_flags = flags;
-	bool file_existed = VALID_STAT(*psbuf);
+	BOOL file_existed = VALID_STAT(*psbuf);
 
 	fsp->fh->fd = -1;
 	errno = EPERM;
@@ -347,7 +330,7 @@
 		if (fsp->fh->fd == -1) {
 			ret = SMB_VFS_STAT(conn, path, psbuf);
 		} else {
-			ret = SMB_VFS_FSTAT(fsp, psbuf);
+			ret = SMB_VFS_FSTAT(fsp,fsp->fh->fd,psbuf);
 			/* If we have an fd, this stat should succeed. */
 			if (ret == -1) {
 				DEBUG(0,("Error doing fstat on open file %s "
@@ -358,7 +341,7 @@
 		/* For a non-io open, this stat failing means file not found. JRA */
 		if (ret == -1) {
 			status = map_nt_error_from_unix(errno);
-			fd_close(fsp);
+			fd_close(conn, fsp);
 			return status;
 		}
 	}
@@ -370,15 +353,16 @@
 	 */
 
 	if(S_ISDIR(psbuf->st_mode)) {
-		fd_close(fsp);
+		fd_close(conn, fsp);
 		errno = EISDIR;
 		return NT_STATUS_FILE_IS_A_DIRECTORY;
 	}
 
 	fsp->mode = psbuf->st_mode;
-	fsp->file_id = vfs_file_id_from_sbuf(conn, psbuf);
-	fsp->vuid = req ? req->vuid : UID_FIELD_INVALID;
-	fsp->file_pid = req ? req->smbpid : 0;
+	fsp->inode = psbuf->st_ino;
+	fsp->dev = psbuf->st_dev;
+	fsp->vuid = current_user.vuid;
+	fsp->file_pid = global_smbpid;
 	fsp->can_lock = True;
 	fsp->can_read = (access_mask & (FILE_READ_DATA)) ? True : False;
 	if (!CAN_WRITE(conn)) {
@@ -414,7 +398,7 @@
  Return True if the filename is one of the special executable types.
 ********************************************************************/
 
-static bool is_executable(const char *fname)
+static BOOL is_executable(const char *fname)
 {
 	if ((fname = strrchr_m(fname,'.'))) {
 		if (strequal(fname,".com") ||
@@ -432,7 +416,7 @@
  Returns True if conflict, False if not.
 ****************************************************************************/
 
-static bool share_conflict(struct share_mode_entry *entry,
+static BOOL share_conflict(struct share_mode_entry *entry,
 			   uint32 access_mask,
 			   uint32 share_access)
 {
@@ -523,10 +507,9 @@
 
 	if (is_deferred_open_entry(share_entry) &&
 	    !open_was_deferred(share_entry->op_mid)) {
-		char *str = talloc_asprintf(talloc_tos(),
-			"Got a deferred entry without a request: "
-			"PANIC: %s\n",
-			share_mode_str(talloc_tos(), num, share_entry));
+		pstring str;
+		pstr_sprintf(str, "Got a deferred entry without a request: "
+			     "PANIC: %s\n", share_mode_str(num, share_entry));
 		smb_panic(str);
 	}
 
@@ -534,11 +517,11 @@
 		return;
 	}
 
-	fsp = file_find_dif(share_entry->id,
+	fsp = file_find_dif(share_entry->dev, share_entry->inode,
 			    share_entry->share_file_id);
 	if (!fsp) {
 		DEBUG(0,("validate_my_share_entries: PANIC : %s\n",
-			 share_mode_str(talloc_tos(), num, share_entry) ));
+			 share_mode_str(num, share_entry) ));
 		smb_panic("validate_my_share_entries: Cannot match a "
 			  "share entry with an open file\n");
 	}
@@ -563,12 +546,11 @@
 
  panic:
 	{
-		char *str;
+		pstring str;
 		DEBUG(0,("validate_my_share_entries: PANIC : %s\n",
-			 share_mode_str(talloc_tos(), num, share_entry) ));
-		str = talloc_asprintf(talloc_tos(),
-			"validate_my_share_entries: "
-			"file %s, oplock_type = 0x%x, op_type = 0x%x\n",
+			 share_mode_str(num, share_entry) ));
+		slprintf(str, sizeof(str)-1, "validate_my_share_entries: "
+			 "file %s, oplock_type = 0x%x, op_type = 0x%x\n",
 			 fsp->fsp_name, (unsigned int)fsp->oplock_type,
 			 (unsigned int)share_entry->op_type );
 		smb_panic(str);
@@ -576,7 +558,7 @@
 }
 #endif
 
-static bool is_stat_open(uint32 access_mask)
+static BOOL is_stat_open(uint32 access_mask)
 {
 	return (access_mask &&
 		((access_mask & ~(SYNCHRONIZE_ACCESS| FILE_READ_ATTRIBUTES|
@@ -597,7 +579,7 @@
 				uint32 access_mask,
 				uint32 share_access,
 				uint32 create_options,
-				bool *file_existed)
+				BOOL *file_existed)
 {
 	int i;
 
@@ -606,6 +588,12 @@
 	}
 
 	*file_existed = True;
+	
+	if (is_stat_open(access_mask)) {
+		/* Stat open that doesn't trigger oplock breaks or share mode
+		 * checks... ! JRA. */
+		return NT_STATUS_OK;
+	}
 
 	/* A delete on close prohibits everything */
 
@@ -613,12 +601,6 @@
 		return NT_STATUS_DELETE_PENDING;
 	}
 
-	if (is_stat_open(access_mask)) {
-		/* Stat open that doesn't trigger oplock breaks or share mode
-		 * checks... ! JRA. */
-		return NT_STATUS_OK;
-	}
-
 	/*
 	 * Check if the share modes will give us access.
 	 */
@@ -651,7 +633,7 @@
 	return NT_STATUS_OK;
 }
 
-static bool is_delete_request(files_struct *fsp) {
+static BOOL is_delete_request(files_struct *fsp) {
 	return ((fsp->access_mask == DELETE_ACCESS) &&
 		(fsp->oplock_type == NO_OPLOCK));
 }
@@ -666,17 +648,16 @@
  * 3) Only level2 around: Grant level2 and do nothing else.
  */
 
-static bool delay_for_oplocks(struct share_mode_lock *lck,
+static BOOL delay_for_oplocks(struct share_mode_lock *lck,
 			      files_struct *fsp,
-			      uint16 mid,
 			      int pass_number,
 			      int oplock_request)
 {
 	int i;
 	struct share_mode_entry *exclusive = NULL;
-	bool valid_entry = False;
-	bool delay_it = False;
-	bool have_level2 = False;
+	BOOL valid_entry = False;
+	BOOL delay_it = False;
+	BOOL have_level2 = False;
 	NTSTATUS status;
 	char msg[MSG_SMB_SHARE_MODE_ENTRY_SIZE];
 
@@ -753,7 +734,7 @@
 
 	DEBUG(10, ("Sending break request to PID %s\n",
 		   procid_str_static(&exclusive->pid)));
-	exclusive->op_mid = mid;
+	exclusive->op_mid = get_current_mid();
 
 	/* Create the message. */
 	share_mode_entry_to_message(msg, exclusive);
@@ -765,10 +746,8 @@
 		SSVAL(msg,6,exclusive->op_type | FORCE_OPLOCK_BREAK_TO_NONE);
 	}
 
-	status = messaging_send_buf(smbd_messaging_context(), exclusive->pid,
-				    MSG_SMB_BREAK_REQUEST,
-				    (uint8 *)msg,
-				    MSG_SMB_SHARE_MODE_ENTRY_SIZE);
+	status = message_send_pid(exclusive->pid, MSG_SMB_BREAK_REQUEST,
+				  msg, MSG_SMB_SHARE_MODE_ENTRY_SIZE, True);
 	if (!NT_STATUS_IS_OK(status)) {
 		DEBUG(3, ("Could not send oplock break message: %s\n",
 			  nt_errstr(status)));
@@ -777,7 +756,7 @@
 	return True;
 }
 
-static bool request_timed_out(struct timeval request_time,
+static BOOL request_timed_out(struct timeval request_time,
 			      struct timeval timeout)
 {
 	struct timeval now, end_time;
@@ -793,9 +772,9 @@
 static void defer_open(struct share_mode_lock *lck,
 		       struct timeval request_time,
 		       struct timeval timeout,
-		       struct smb_request *req,
 		       struct deferred_open_record *state)
 {
+	uint16 mid = get_current_mid();
 	int i;
 
 	/* Paranoia check */
@@ -807,9 +786,9 @@
 			continue;
 		}
 
-		if (procid_is_me(&e->pid) && (e->op_mid == req->mid)) {
+		if (procid_is_me(&e->pid) && (e->op_mid == mid)) {
 			DEBUG(0, ("Trying to defer an already deferred "
-				  "request: mid=%d, exiting\n", req->mid));
+				  "request: mid=%d, exiting\n", mid));
 			exit_server("attempt to defer a deferred request");
 		}
 	}
@@ -820,13 +799,13 @@
 		  "open entry for mid %u\n",
 		  (unsigned int)request_time.tv_sec,
 		  (unsigned int)request_time.tv_usec,
-		  (unsigned int)req->mid));
+		  (unsigned int)mid));
 
-	if (!push_deferred_smb_message(req, request_time, timeout,
+	if (!push_deferred_smb_message(mid, request_time, timeout,
 				       (char *)state, sizeof(*state))) {
 		exit_server("push_deferred_smb_message failed");
 	}
-	add_deferred_open(lck, req->mid, request_time, state->id);
+	add_deferred_open(lck, mid, request_time, state->dev, state->inode);
 
 	/*
 	 * Push the MID of this packet on the signing queue.
@@ -835,7 +814,7 @@
 	 * of incrementing the response sequence number.
 	 */
 
-	srv_defer_sign_response(req->mid);
+	srv_defer_sign_response(mid);
 }
 
 
@@ -843,7 +822,7 @@
  On overwrite open ensure that the attributes match.
 ****************************************************************************/
 
-static bool open_match_attributes(connection_struct *conn,
+static BOOL open_match_attributes(connection_struct *conn,
 				  const char *path,
 				  uint32 old_dos_attr,
 				  uint32 new_dos_attr,
@@ -894,10 +873,8 @@
 ****************************************************************************/
 
 static files_struct *fcb_or_dos_open(connection_struct *conn,
-				     const char *fname, 
-				     struct file_id id,
-				     uint16 file_pid,
-				     uint16 vuid,
+				     const char *fname, SMB_DEV_T dev,
+				     SMB_INO_T inode,
 				     uint32 access_mask,
 				     uint32 share_access,
 				     uint32 create_options)
@@ -908,7 +885,7 @@
 	DEBUG(5,("fcb_or_dos_open: attempting old open semantics for "
 		 "file %s.\n", fname ));
 
-	for(fsp = file_find_di_first(id); fsp;
+	for(fsp = file_find_di_first(dev, inode); fsp;
 	    fsp = file_find_di_next(fsp)) {
 
 		DEBUG(10,("fcb_or_dos_open: checking file %s, fd = %d, "
@@ -920,8 +897,8 @@
 			  (unsigned int)fsp->access_mask ));
 
 		if (fsp->fh->fd != -1 &&
-		    fsp->vuid == vuid &&
-		    fsp->file_pid == file_pid &&
+		    fsp->vuid == current_user.vuid &&
+		    fsp->file_pid == global_smbpid &&
 		    (fsp->fh->private_options & (NTCREATEX_OPTIONS_PRIVATE_DENY_DOS |
 						 NTCREATEX_OPTIONS_PRIVATE_DENY_FCB)) &&
 		    (fsp->access_mask & FILE_WRITE_DATA) &&
@@ -955,7 +932,7 @@
  Open a file with a share mode - old openX method - map into NTCreate.
 ****************************************************************************/
 
-bool map_open_params_to_ntcreate(const char *fname, int deny_mode, int open_func,
+BOOL map_open_params_to_ntcreate(const char *fname, int deny_mode, int open_func,
 				 uint32 *paccess_mask,
 				 uint32 *pshare_mode,
 				 uint32 *pcreate_disposition,
@@ -1090,9 +1067,7 @@
 
 }
 
-static void schedule_defer_open(struct share_mode_lock *lck,
-				struct timeval request_time,
-				struct smb_request *req)
+static void schedule_defer_open(struct share_mode_lock *lck, struct timeval request_time)
 {
 	struct deferred_open_record state;
 
@@ -1120,10 +1095,11 @@
 	   a 1 second delay for share mode conflicts. */
 
 	state.delayed_for_oplocks = True;
-	state.id = lck->id;
+	state.dev = lck->dev;
+	state.inode = lck->ino;
 
 	if (!request_timed_out(request_time, timeout)) {
-		defer_open(lck, request_time, timeout, req, &state);
+		defer_open(lck, request_time, timeout, &state);
 	}
 }
 
@@ -1132,7 +1108,6 @@
 ****************************************************************************/
 
 NTSTATUS open_file_ntcreate(connection_struct *conn,
-			    struct smb_request *req,
 			    const char *fname,
 			    SMB_STRUCT_STAT *psbuf,
 			    uint32 access_mask,		/* access bits (FILE_READ_DATA etc.) */
@@ -1147,11 +1122,12 @@
 {
 	int flags=0;
 	int flags2=0;
-	bool file_existed = VALID_STAT(*psbuf);
-	bool def_acl = False;
-	bool posix_open = False;
-	bool new_file_created = False;
-	struct file_id id;
+	BOOL file_existed = VALID_STAT(*psbuf);
+	BOOL def_acl = False;
+	BOOL posix_open = False;
+	BOOL new_file_created = False;
+	SMB_DEV_T dev = 0;
+	SMB_INO_T inode = 0;
 	NTSTATUS fsp_open = NT_STATUS_ACCESS_DENIED;
 	files_struct *fsp = NULL;
 	mode_t new_unx_mode = (mode_t)0;
@@ -1159,6 +1135,7 @@
 	int info;
 	uint32 existing_dos_attributes = 0;
 	struct pending_message_list *pml = NULL;
+	uint16 mid = get_current_mid();
 	struct timeval request_time = timeval_zero();
 	struct share_mode_lock *lck = NULL;
 	uint32 open_access_mask = access_mask;
@@ -1167,8 +1144,6 @@
 	char *parent_dir;
 	const char *newname;
 
-	ZERO_STRUCT(id);
-
 	if (conn->printer) {
 		/* 
 		 * Printers are handled completely differently.
@@ -1184,7 +1159,7 @@
 		return print_fsp_open(conn, fname, result);
 	}
 
-	if (!parent_dirname_talloc(talloc_tos(), fname, &parent_dir,
+	if (!parent_dirname_talloc(tmp_talloc_ctx(), fname, &parent_dir,
 				   &newname)) {
 		return NT_STATUS_NO_MEMORY;
 	}
@@ -1208,17 +1183,7 @@
 		   create_disposition, create_options, unx_mode,
 		   oplock_request));
 
-	if ((req == NULL) && ((oplock_request & INTERNAL_OPEN_ONLY) == 0)) {
-		DEBUG(0, ("No smb request but not an internal only open!\n"));
-		return NT_STATUS_INTERNAL_ERROR;
-	}
-
-	/*
-	 * Only non-internal opens can be deferred at all
-	 */
-
-	if ((req != NULL)
-	    && ((pml = get_open_deferred_message(req->mid)) != NULL)) {
+	if ((pml = get_open_deferred_message(mid)) != NULL) {
 		struct deferred_open_record *state =
 			(struct deferred_open_record *)pml->private_data.data;
 
@@ -1229,17 +1194,16 @@
 		request_time = pml->request_time;
 
 		/* Remove the deferred open entry under lock. */
-		lck = get_share_mode_lock(talloc_tos(), state->id, NULL, NULL,
-					  NULL);
+		lck = get_share_mode_lock(NULL, state->dev, state->inode, NULL, NULL);
 		if (lck == NULL) {
 			DEBUG(0, ("could not get share mode lock\n"));
 		} else {
-			del_deferred_open_entry(lck, req->mid);
+			del_deferred_open_entry(lck, mid);
 			TALLOC_FREE(lck);
 		}
 
 		/* Ensure we don't reprocess this message. */
-		remove_deferred_open_smb_message(req->mid);
+		remove_deferred_open_smb_message(mid);
 	}
 
 	status = check_name(conn, fname);
@@ -1375,7 +1339,7 @@
 	se_map_generic(&access_mask, &file_generic_mapping);
 	open_access_mask = access_mask;
 
-	if ((flags2 & O_TRUNC) || (oplock_request & FORCE_OPLOCK_BREAK_TO_NONE)) {
+	if (flags2 & O_TRUNC) {
 		open_access_mask |= FILE_WRITE_DATA; /* This will cause oplock breaks. */
 	}
 
@@ -1387,8 +1351,7 @@
 	 * mean the same thing under DOS and Unix.
 	 */
 
-	if ((access_mask & (FILE_WRITE_DATA | FILE_APPEND_DATA)) ||
-			(oplock_request & FORCE_OPLOCK_BREAK_TO_NONE)) {
+	if (access_mask & (FILE_WRITE_DATA | FILE_APPEND_DATA)) {
 		/* DENY_DOS opens are always underlying read-write on the
 		   file handle, no matter what the requested access mask
 		    says. */
@@ -1443,7 +1406,8 @@
 		return status;
 	}
 
-	fsp->file_id = vfs_file_id_from_sbuf(conn, psbuf);
+	fsp->dev = psbuf->st_dev;
+	fsp->inode = psbuf->st_ino;
 	fsp->share_access = share_access;
 	fsp->fh->private_options = create_options;
 	fsp->access_mask = open_access_mask; /* We change this to the
@@ -1459,12 +1423,12 @@
 	}
 
 	if (file_existed) {
-		struct timespec old_write_time = get_mtimespec(psbuf);
-		id = vfs_file_id_from_sbuf(conn, psbuf);
+		dev = psbuf->st_dev;
+		inode = psbuf->st_ino;
 
-		lck = get_share_mode_lock(talloc_tos(), id,
+		lck = get_share_mode_lock(NULL, dev, inode,
 					  conn->connectpath,
-					  fname, &old_write_time);
+					  fname);
 
 		if (lck == NULL) {
 			file_free(fsp);
@@ -1473,10 +1437,8 @@
 		}
 
 		/* First pass - send break only on batch oplocks. */
-		if ((req != NULL)
-		    && delay_for_oplocks(lck, fsp, req->mid, 1,
-					 oplock_request)) {
-			schedule_defer_open(lck, request_time, req);
+		if (delay_for_oplocks(lck, fsp, 1, oplock_request)) {
+			schedule_defer_open(lck, request_time);
 			TALLOC_FREE(lck);
 			file_free(fsp);
 			return NT_STATUS_SHARING_VIOLATION;
@@ -1493,10 +1455,8 @@
 			 * status again. */
 			/* Second pass - send break for both batch or
 			 * exclusive oplocks. */
-			if ((req != NULL)
-			     && delay_for_oplocks(lck, fsp, req->mid, 2,
-						  oplock_request)) {
-				schedule_defer_open(lck, request_time, req);
+			if (delay_for_oplocks(lck, fsp, 2, oplock_request)) {
+				schedule_defer_open(lck, request_time);
 				TALLOC_FREE(lck);
 				file_free(fsp);
 				return NT_STATUS_SHARING_VIOLATION;
@@ -1512,7 +1472,7 @@
 
 		if (!NT_STATUS_IS_OK(status)) {
 			uint32 can_access_mask;
-			bool can_access = True;
+			BOOL can_access = True;
 
 			SMB_ASSERT(NT_STATUS_EQUAL(status, NT_STATUS_SHARING_VIOLATION));
 
@@ -1523,20 +1483,10 @@
 			     NTCREATEX_OPTIONS_PRIVATE_DENY_FCB)) {
 				files_struct *fsp_dup;
 
-				if (req == NULL) {
-					DEBUG(0, ("DOS open without an SMB "
-						  "request!\n"));
-					TALLOC_FREE(lck);
-					file_free(fsp);
-					return NT_STATUS_INTERNAL_ERROR;
-				}
-
 				/* Use the client requested access mask here,
 				 * not the one we open with. */
-				fsp_dup = fcb_or_dos_open(conn, fname, id,
-							  req->smbpid,
-							  req->vuid,
-							  access_mask,
+				fsp_dup = fcb_or_dos_open(conn, fname, dev,
+							  inode, access_mask,
 							  share_access,
 							  create_options);
 
@@ -1608,13 +1558,13 @@
 				   a 1 second delay for share mode conflicts. */
 
 				state.delayed_for_oplocks = False;
-				state.id = id;
+				state.dev = dev;
+				state.inode = inode;
 
-				if ((req != NULL)
-				    && !request_timed_out(request_time,
-							  timeout)) {
+				if (!request_timed_out(request_time,
+						       timeout)) {
 					defer_open(lck, request_time, timeout,
-						   req, &state);
+						   &state);
 				}
 			}
 
@@ -1658,7 +1608,7 @@
 	 * open_file strips any O_TRUNC flags itself.
 	 */
 
-	fsp_open = open_file(fsp, conn, req, parent_dir, newname, fname, psbuf,
+	fsp_open = open_file(fsp, conn, parent_dir, newname, fname, psbuf,
 			     flags|flags2, unx_mode, access_mask,
 			     open_access_mask);
 
@@ -1671,7 +1621,7 @@
 	}
 
 	if (!file_existed) {
-		struct timespec old_write_time = get_mtimespec(psbuf);
+
 		/*
 		 * Deal with the race condition where two smbd's detect the
 		 * file doesn't exist and do the create at the same time. One
@@ -1687,27 +1637,26 @@
 		 * Nadav Danieli <nadavd at exanet.com>. JRA.
 		 */
 
-		id = fsp->file_id;
+		dev = fsp->dev;
+		inode = fsp->inode;
 
-		lck = get_share_mode_lock(talloc_tos(), id,
+		lck = get_share_mode_lock(NULL, dev, inode,
 					  conn->connectpath,
-					  fname, &old_write_time);
+					  fname);
 
 		if (lck == NULL) {
 			DEBUG(0, ("open_file_ntcreate: Could not get share "
 				  "mode lock for %s\n", fname));
-			fd_close(fsp);
+			fd_close(conn, fsp);
 			file_free(fsp);
 			return NT_STATUS_SHARING_VIOLATION;
 		}
 
 		/* First pass - send break only on batch oplocks. */
-		if ((req != NULL)
-		    && delay_for_oplocks(lck, fsp, req->mid, 1,
-					 oplock_request)) {
-			schedule_defer_open(lck, request_time, req);
+		if (delay_for_oplocks(lck, fsp, 1, oplock_request)) {
+			schedule_defer_open(lck, request_time);
 			TALLOC_FREE(lck);
-			fd_close(fsp);
+			fd_close(conn, fsp);
 			file_free(fsp);
 			return NT_STATUS_SHARING_VIOLATION;
 		}
@@ -1721,12 +1670,10 @@
 			 * status again. */
 			/* Second pass - send break for both batch or
 			 * exclusive oplocks. */
-			if ((req != NULL)
-			    && delay_for_oplocks(lck, fsp, req->mid, 2,
-						 oplock_request)) {
-				schedule_defer_open(lck, request_time, req);
+			if (delay_for_oplocks(lck, fsp, 2, oplock_request)) {
+				schedule_defer_open(lck, request_time);
 				TALLOC_FREE(lck);
-				fd_close(fsp);
+				fd_close(conn, fsp);
 				file_free(fsp);
 				return NT_STATUS_SHARING_VIOLATION;
 			}
@@ -1735,11 +1682,12 @@
 		if (!NT_STATUS_IS_OK(status)) {
 			struct deferred_open_record state;
 
-			fd_close(fsp);
+			fd_close(conn, fsp);
 			file_free(fsp);
 
 			state.delayed_for_oplocks = False;
-			state.id = id;
+			state.dev = dev;
+			state.inode = inode;
 
 			/* Do it all over again immediately. In the second
 			 * round we will find that the file existed and handle
@@ -1748,10 +1696,8 @@
 			 * "goto top of this function", but don't tell
 			 * anybody... */
 
-			if (req != NULL) {
-				defer_open(lck, request_time, timeval_zero(),
-					   req, &state);
-			}
+			defer_open(lck, request_time, timeval_zero(),
+				   &state);
 			TALLOC_FREE(lck);
 			return status;
 		}
@@ -1772,16 +1718,14 @@
            the kernel refuses the operations then the kernel is wrong.
 	   note that GPFS supports it as well - jmcd */
 
-	if (fsp->fh->fd != -1) {
-		ret_flock = SMB_VFS_KERNEL_FLOCK(fsp, share_access);
-		if(ret_flock == -1 ){
+	ret_flock = SMB_VFS_KERNEL_FLOCK(fsp, fsp->fh->fd, share_access);
+	if(ret_flock == -1 ){
 
-			TALLOC_FREE(lck);
-			fd_close(fsp);
-			file_free(fsp);
-
-			return NT_STATUS_SHARING_VIOLATION;
-		}
+		TALLOC_FREE(lck);
+		fd_close(conn, fsp);
+		file_free(fsp);
+		
+		return NT_STATUS_SHARING_VIOLATION;
 	}
 
 	/*
@@ -1799,11 +1743,11 @@
 		 * We are modifing the file after open - update the stat
 		 * struct..
 		 */
-		if ((SMB_VFS_FTRUNCATE(fsp, 0) == -1) ||
-		    (SMB_VFS_FSTAT(fsp, psbuf)==-1)) {
+		if ((SMB_VFS_FTRUNCATE(fsp,fsp->fh->fd,0) == -1) ||
+		    (SMB_VFS_FSTAT(fsp,fsp->fh->fd,psbuf)==-1)) {
 			status = map_nt_error_from_unix(errno);
 			TALLOC_FREE(lck);
-			fd_close(fsp);
+			fd_close(conn,fsp);
 			file_free(fsp);
 			return status;
 		}
@@ -1853,16 +1797,14 @@
 	set_share_mode(lck, fsp, current_user.ut.uid, 0, fsp->oplock_type, new_file_created);
 
 	/* Handle strange delete on close create semantics. */
-	if ((create_options & FILE_DELETE_ON_CLOSE)
-	    && (is_ntfs_stream_name(fname)
-		|| can_set_initial_delete_on_close(lck))) {
+	if ((create_options & FILE_DELETE_ON_CLOSE) && can_set_initial_delete_on_close(lck)) {
 		status = can_set_delete_on_close(fsp, True, new_dos_attributes);
 
 		if (!NT_STATUS_IS_OK(status)) {
 			/* Remember to delete the mode we just added. */
 			del_share_mode(lck, fsp);
 			TALLOC_FREE(lck);
-			fd_close(fsp);
+			fd_close(conn,fsp);
 			file_free(fsp);
 			return status;
 		}
@@ -1879,10 +1821,10 @@
 				SMB_STRUCT_STAT tmp_sbuf;
 				SET_STAT_INVALID(tmp_sbuf);
 				if (file_set_dosmode(
-					    conn, fname,
-					    new_dos_attributes | aARCH,
-					    &tmp_sbuf, parent_dir,
-					    true) == 0) {
+						conn, fname,
+						new_dos_attributes | aARCH,
+						&tmp_sbuf,
+						parent_dir) == 0) {
 					unx_mode = tmp_sbuf.st_mode;
 				}
 			}
@@ -1899,7 +1841,7 @@
 		int saved_errno = errno; /* We might get ENOSYS in the next
 					  * call.. */
 
-		if (SMB_VFS_FCHMOD_ACL(fsp, unx_mode) == -1 &&
+		if (SMB_VFS_FCHMOD_ACL(fsp, fsp->fh->fd, unx_mode) == -1 &&
 		    errno == ENOSYS) {
 			errno = saved_errno; /* Ignore ENOSYS */
 		}
@@ -1913,7 +1855,8 @@
 		{
 			int saved_errno = errno; /* We might get ENOSYS in the
 						  * next call.. */
-			ret = SMB_VFS_FCHMOD_ACL(fsp, new_unx_mode);
+			ret = SMB_VFS_FCHMOD_ACL(fsp, fsp->fh->fd,
+						 new_unx_mode);
 
 			if (ret == -1 && errno == ENOSYS) {
 				errno = saved_errno; /* Ignore ENOSYS */
@@ -1926,7 +1869,7 @@
 		}
 
 		if ((ret == -1) &&
-		    (SMB_VFS_FCHMOD(fsp, new_unx_mode) == -1))
+		    (SMB_VFS_FCHMOD(fsp, fsp->fh->fd, new_unx_mode) == -1))
 			DEBUG(5, ("open_file_ntcreate: failed to reset "
 				  "attributes of file %s to 0%o\n",
 				  fname, (unsigned int)new_unx_mode));
@@ -1934,9 +1877,7 @@
 
 	/* If this is a successful open, we must remove any deferred open
 	 * records. */
-	if (req != NULL) {
-		del_deferred_open_entry(lck, req->mid);
-	}
+	del_deferred_open_entry(lck, mid);
 	TALLOC_FREE(lck);
 
 	conn->num_files_open++;
@@ -1966,8 +1907,8 @@
 
 	/* note! we must use a non-zero desired access or we don't get
            a real file descriptor. Oh what a twisted web we weave. */
-	status = open_file(fsp, conn, NULL, NULL, NULL, fname, psbuf, O_WRONLY,
-			   0, FILE_WRITE_DATA, FILE_WRITE_DATA);
+	status = open_file(fsp, conn, NULL, NULL, fname, psbuf, O_WRONLY, 0,
+			   FILE_WRITE_DATA, FILE_WRITE_DATA);
 
 	/* 
 	 * This is not a user visible file open.
@@ -1990,7 +1931,7 @@
 
 NTSTATUS close_file_fchmod(files_struct *fsp)
 {
-	NTSTATUS status = fd_close(fsp);
+	NTSTATUS status = fd_close(fsp->conn, fsp);
 	file_free(fsp);
 	return status;
 }
@@ -2004,7 +1945,7 @@
 	char *parent_dir;
 	const char *dirname;
 	NTSTATUS status;
-	bool posix_open = false;
+	BOOL posix_open = False;
 
 	if(!CAN_WRITE(conn)) {
 		DEBUG(5,("mkdir_internal: failing create on read-only share "
@@ -2017,13 +1958,13 @@
 		return status;
 	}
 
-	if (!parent_dirname_talloc(talloc_tos(), name, &parent_dir,
+	if (!parent_dirname_talloc(tmp_talloc_ctx(), name, &parent_dir,
 				   &dirname)) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
 	if (file_attributes & FILE_FLAG_POSIX_SEMANTICS) {
-		posix_open = true;
+		posix_open = True;
 		mode = (mode_t)(file_attributes & ~FILE_FLAG_POSIX_SEMANTICS);
 	} else {
 		mode = unix_mode(conn, aDIR, name, parent_dir);
@@ -2052,8 +1993,7 @@
 		if (!posix_open) {
 			file_set_dosmode(conn, name,
 				 file_attributes | aDIR, NULL,
-				 parent_dir,
-				 true);
+				 parent_dir);
 		}
 	}
 
@@ -2090,7 +2030,6 @@
 ****************************************************************************/
 
 NTSTATUS open_directory(connection_struct *conn,
-			struct smb_request *req,
 			const char *fname,
 			SMB_STRUCT_STAT *psbuf,
 			uint32 access_mask,
@@ -2102,10 +2041,9 @@
 			files_struct **result)
 {
 	files_struct *fsp = NULL;
-	bool dir_existed = VALID_STAT(*psbuf) ? True : False;
+	BOOL dir_existed = VALID_STAT(*psbuf) ? True : False;
 	struct share_mode_lock *lck = NULL;
 	NTSTATUS status;
-	struct timespec mtimespec;
 	int info = 0;
 
 	DEBUG(5,("open_directory: opening directory %s, access_mask = 0x%x, "
@@ -2118,8 +2056,8 @@
 		 (unsigned int)create_disposition,
 		 (unsigned int)file_attributes));
 
-	if (!(file_attributes & FILE_FLAG_POSIX_SEMANTICS) && is_ntfs_stream_name(fname)) {
-		DEBUG(2, ("open_directory: %s is a stream name!\n", fname));
+	if (is_ntfs_stream_name(fname)) {
+		DEBUG(0,("open_directory: %s is a stream name!\n", fname ));
 		return NT_STATUS_NOT_A_DIRECTORY;
 	}
 
@@ -2207,9 +2145,10 @@
 	 */
 	
 	fsp->mode = psbuf->st_mode;
-	fsp->file_id = vfs_file_id_from_sbuf(conn, psbuf);
-	fsp->vuid = req ? req->vuid : UID_FIELD_INVALID;
-	fsp->file_pid = req ? req->smbpid : 0;
+	fsp->inode = psbuf->st_ino;
+	fsp->dev = psbuf->st_dev;
+	fsp->vuid = current_user.vuid;
+	fsp->file_pid = global_smbpid;
 	fsp->can_lock = False;
 	fsp->can_read = False;
 	fsp->can_write = False;
@@ -2228,11 +2167,9 @@
 
 	string_set(&fsp->fsp_name,fname);
 
-	mtimespec = get_mtimespec(psbuf);
-
-	lck = get_share_mode_lock(talloc_tos(), fsp->file_id,
+	lck = get_share_mode_lock(NULL, fsp->dev, fsp->inode,
 				  conn->connectpath,
-				  fname, &mtimespec);
+				  fname);
 
 	if (lck == NULL) {
 		DEBUG(0, ("open_directory: Could not get share mode lock for %s\n", fname));
@@ -2281,7 +2218,7 @@
 	return NT_STATUS_OK;
 }
 
-NTSTATUS create_directory(connection_struct *conn, struct smb_request *req, const char *directory)
+NTSTATUS create_directory(connection_struct *conn, const char *directory)
 {
 	NTSTATUS status;
 	SMB_STRUCT_STAT sbuf;
@@ -2289,7 +2226,7 @@
 
 	SET_STAT_INVALID(sbuf);
 	
-	status = open_directory(conn, req, directory, &sbuf,
+	status = open_directory(conn, directory, &sbuf,
 				FILE_READ_ATTRIBUTES, /* Just a stat open */
 				FILE_SHARE_NONE, /* Ignored for stat opens */
 				FILE_CREATE,
@@ -2309,9 +2246,8 @@
  Open a pseudo-file (no locking checks - a 'stat' open).
 ****************************************************************************/
 
-NTSTATUS open_file_stat(connection_struct *conn, struct smb_request *req,
-			const char *fname, SMB_STRUCT_STAT *psbuf,
-			files_struct **result)
+NTSTATUS open_file_stat(connection_struct *conn, const char *fname,
+			SMB_STRUCT_STAT *psbuf, files_struct **result)
 {
 	files_struct *fsp = NULL;
 	NTSTATUS status;
@@ -2337,9 +2273,10 @@
 	 */
 	
 	fsp->mode = psbuf->st_mode;
-	fsp->file_id = vfs_file_id_from_sbuf(conn, psbuf);
-	fsp->vuid = req ? req->vuid : UID_FIELD_INVALID;
-	fsp->file_pid = req ? req->smbpid : 0;
+	fsp->inode = psbuf->st_ino;
+	fsp->dev = psbuf->st_dev;
+	fsp->vuid = current_user.vuid;
+	fsp->file_pid = global_smbpid;
 	fsp->can_lock = False;
 	fsp->can_read = False;
 	fsp->can_write = False;
@@ -2362,37 +2299,34 @@
  smbd process.
 ****************************************************************************/
 
-void msg_file_was_renamed(struct messaging_context *msg,
-			  void *private_data,
-			  uint32_t msg_type,
-			  struct server_id server_id,
-			  DATA_BLOB *data)
+void msg_file_was_renamed(int msg_type, struct process_id src,
+			  void *buf, size_t len, void *private_data)
 {
 	files_struct *fsp;
-	char *frm = (char *)data->data;
-	struct file_id id;
+	char *frm = (char *)buf;
+	SMB_DEV_T dev;
+	SMB_INO_T inode;
 	const char *sharepath;
 	const char *newname;
 	size_t sp_len;
 
-	if (data->data == NULL
-	    || data->length < MSG_FILE_RENAMED_MIN_SIZE + 2) {
-                DEBUG(0, ("msg_file_was_renamed: Got invalid msg len %d\n",
-			  (int)data->length));
+	if (buf == NULL || len < MSG_FILE_RENAMED_MIN_SIZE + 2) {
+                DEBUG(0, ("msg_file_was_renamed: Got invalid msg len %d\n", (int)len));
                 return;
         }
 
 	/* Unpack the message. */
-	pull_file_id_16(frm, &id);
+	dev = DEV_T_VAL(frm,0);
+	inode = INO_T_VAL(frm,8);
 	sharepath = &frm[16];
 	newname = sharepath + strlen(sharepath) + 1;
 	sp_len = strlen(sharepath);
 
 	DEBUG(10,("msg_file_was_renamed: Got rename message for sharepath %s, new name %s, "
-		"file_id %s\n",
-		  sharepath, newname, file_id_string_tos(&id)));
+		"dev %x, inode  %.0f\n",
+		sharepath, newname, (unsigned int)dev, (double)inode ));
 
-	for(fsp = file_find_di_first(id); fsp; fsp = file_find_di_next(fsp)) {
+	for(fsp = file_find_di_first(dev, inode); fsp; fsp = file_find_di_next(fsp)) {
 		if (memcmp(fsp->conn->connectpath, sharepath, sp_len) == 0) {
 	                DEBUG(10,("msg_file_was_renamed: renaming file fnum %d from %s -> %s\n",
 				fsp->fnum, fsp->fsp_name, newname ));
@@ -2412,725 +2346,3 @@
 		}
         }
 }
-
-struct case_semantics_state {
-	connection_struct *conn;
-	bool case_sensitive;
-	bool case_preserve;
-	bool short_case_preserve;
-};
-
-/****************************************************************************
- Restore case semantics.
-****************************************************************************/
-static int restore_case_semantics(struct case_semantics_state *state)
-{
-	state->conn->case_sensitive = state->case_sensitive;
-	state->conn->case_preserve = state->case_preserve;
-	state->conn->short_case_preserve = state->short_case_preserve;
-	return 0;
-}
-
-/****************************************************************************
- Save case semantics.
-****************************************************************************/
-static struct case_semantics_state *set_posix_case_semantics(TALLOC_CTX *mem_ctx,
-							     connection_struct *conn)
-{
-	struct case_semantics_state *result;
-
-	if (!(result = talloc(mem_ctx, struct case_semantics_state))) {
-		DEBUG(0, ("talloc failed\n"));
-		return NULL;
-	}
-
-	result->conn = conn;
-	result->case_sensitive = conn->case_sensitive;
-	result->case_preserve = conn->case_preserve;
-	result->short_case_preserve = conn->short_case_preserve;
-
-	/* Set to POSIX. */
-	conn->case_sensitive = True;
-	conn->case_preserve = True;
-	conn->short_case_preserve = True;
-
-	talloc_set_destructor(result, restore_case_semantics);
-
-	return result;
-}
-
-/*
- * If a main file is opened for delete, all streams need to be checked for
- * !FILE_SHARE_DELETE. Do this by opening with DELETE_ACCESS.
- * If that works, delete them all by setting the delete on close and close.
- */
-
-static NTSTATUS open_streams_for_delete(connection_struct *conn,
-					const char *fname)
-{
-	struct stream_struct *stream_info;
-	files_struct **streams;
-	int i;
-	unsigned int num_streams;
-	TALLOC_CTX *frame = talloc_stackframe();
-	NTSTATUS status;
-
-	status = SMB_VFS_STREAMINFO(conn, NULL, fname, talloc_tos(),
-				    &num_streams, &stream_info);
-
-	if (NT_STATUS_EQUAL(status, NT_STATUS_NOT_IMPLEMENTED)
-	    || NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_NOT_FOUND)) {
-		DEBUG(10, ("no streams around\n"));
-		TALLOC_FREE(frame);
-		return NT_STATUS_OK;
-	}
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10, ("SMB_VFS_STREAMINFO failed: %s\n",
-			   nt_errstr(status)));
-		goto fail;
-	}
-
-	DEBUG(10, ("open_streams_for_delete found %d streams\n",
-		   num_streams));
-
-	if (num_streams == 0) {
-		TALLOC_FREE(frame);
-		return NT_STATUS_OK;
-	}
-
-	streams = TALLOC_ARRAY(talloc_tos(), files_struct *, num_streams);
-	if (streams == NULL) {
-		DEBUG(0, ("talloc failed\n"));
-		status = NT_STATUS_NO_MEMORY;
-		goto fail;
-	}
-
-	for (i=0; i<num_streams; i++) {
-		char *streamname;
-
-		if (strequal(stream_info[i].name, "::$DATA")) {
-			streams[i] = NULL;
-			continue;
-		}
-
-		streamname = talloc_asprintf(talloc_tos(), "%s%s", fname,
-					     stream_info[i].name);
-
-		if (streamname == NULL) {
-			DEBUG(0, ("talloc_aprintf failed\n"));
-			status = NT_STATUS_NO_MEMORY;
-			goto fail;
-		}
-
-		status = create_file_unixpath
-			(conn,			/* conn */
-			 NULL,			/* req */
-			 streamname,		/* fname */
-			 DELETE_ACCESS,		/* access_mask */
-			 FILE_SHARE_READ | FILE_SHARE_WRITE
-			 | FILE_SHARE_DELETE,	/* share_access */
-			 FILE_OPEN,		/* create_disposition*/
-			 NTCREATEX_OPTIONS_PRIVATE_STREAM_DELETE, /* create_options */
-			 FILE_ATTRIBUTE_NORMAL,	/* file_attributes */
-			 0,			/* oplock_request */
-			 0,			/* allocation_size */
-			 NULL,			/* sd */
-			 NULL,			/* ea_list */
-			 &streams[i],		/* result */
-			 NULL,			/* pinfo */
-			 NULL);			/* psbuf */
-
-		TALLOC_FREE(streamname);
-
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(10, ("Could not open stream %s: %s\n",
-				   streamname, nt_errstr(status)));
-			break;
-		}
-	}
-
-	/*
-	 * don't touch the variable "status" beyond this point :-)
-	 */
-
-	for (i -= 1 ; i >= 0; i--) {
-		if (streams[i] == NULL) {
-			continue;
-		}
-
-		DEBUG(10, ("Closing stream # %d, %s\n", i,
-			   streams[i]->fsp_name));
-		close_file(streams[i], NORMAL_CLOSE);
-	}
-
- fail:
-	TALLOC_FREE(frame);
-	return status;
-}
-
-/*
- * Wrapper around open_file_ntcreate and open_directory
- */
-
-NTSTATUS create_file_unixpath(connection_struct *conn,
-			      struct smb_request *req,
-			      const char *fname,
-			      uint32_t access_mask,
-			      uint32_t share_access,
-			      uint32_t create_disposition,
-			      uint32_t create_options,
-			      uint32_t file_attributes,
-			      uint32_t oplock_request,
-			      SMB_BIG_UINT allocation_size,
-			      struct security_descriptor *sd,
-			      struct ea_list *ea_list,
-
-			      files_struct **result,
-			      int *pinfo,
-			      SMB_STRUCT_STAT *psbuf)
-{
-	SMB_STRUCT_STAT sbuf;
-	int info = FILE_WAS_OPENED;
-	files_struct *base_fsp = NULL;
-	files_struct *fsp = NULL;
-	NTSTATUS status;
-
-	DEBUG(10,("create_file_unixpath: access_mask = 0x%x "
-		  "file_attributes = 0x%x, share_access = 0x%x, "
-		  "create_disposition = 0x%x create_options = 0x%x "
-		  "oplock_request = 0x%x ea_list = 0x%p, sd = 0x%p, "
-		  "fname = %s\n",
-		  (unsigned int)access_mask,
-		  (unsigned int)file_attributes,
-		  (unsigned int)share_access,
-		  (unsigned int)create_disposition,
-		  (unsigned int)create_options,
-		  (unsigned int)oplock_request,
-		  ea_list, sd, fname));
-
-	if (create_options & FILE_OPEN_BY_FILE_ID) {
-		status = NT_STATUS_NOT_SUPPORTED;
-		goto fail;
-	}
-
-	if (req == NULL) {
-		oplock_request |= INTERNAL_OPEN_ONLY;
-	}
-
-	if (psbuf != NULL) {
-		sbuf = *psbuf;
-	}
-	else {
-		if (SMB_VFS_STAT(conn, fname, &sbuf) == -1) {
-			SET_STAT_INVALID(sbuf);
-		}
-	}
-
-	if ((conn->fs_capabilities & FILE_NAMED_STREAMS)
-	    && (access_mask & DELETE_ACCESS)
-	    && !is_ntfs_stream_name(fname)) {
-		/*
-		 * We can't open a file with DELETE access if any of the
-		 * streams is open without FILE_SHARE_DELETE
-		 */
-		status = open_streams_for_delete(conn, fname);
-
-		if (!NT_STATUS_IS_OK(status)) {
-			goto fail;
-		}
-	}
-
-	/* This is the correct thing to do (check every time) but can_delete
-	 * is expensive (it may have to read the parent directory
-	 * permissions). So for now we're not doing it unless we have a strong
-	 * hint the client is really going to delete this file. If the client
-	 * is forcing FILE_CREATE let the filesystem take care of the
-	 * permissions. */
-
-	/* Setting FILE_SHARE_DELETE is the hint. */
-
-	if (lp_acl_check_permissions(SNUM(conn))
-	    && (create_disposition != FILE_CREATE)
-	    && (share_access & FILE_SHARE_DELETE)
-	    && (access_mask & DELETE_ACCESS)
-	    && (((dos_mode(conn, fname, &sbuf) & FILE_ATTRIBUTE_READONLY)
-		 && !lp_delete_readonly(SNUM(conn)))
-		|| !can_delete_file_in_directory(conn, fname))) {
-		status = NT_STATUS_ACCESS_DENIED;
-		goto fail;
-	}
-
-#if 0
-	/* We need to support SeSecurityPrivilege for this. */
-	if ((access_mask & SEC_RIGHT_SYSTEM_SECURITY) &&
-	    !user_has_privileges(current_user.nt_user_token,
-				 &se_security)) {
-		status = NT_STATUS_PRIVILEGE_NOT_HELD;
-		goto fail;
-	}
-#endif
-
-	if ((conn->fs_capabilities & FILE_NAMED_STREAMS)
-	    && is_ntfs_stream_name(fname)
-	    && (!(create_options & NTCREATEX_OPTIONS_PRIVATE_STREAM_DELETE))) {
-		char *base;
-		uint32 base_create_disposition;
-
-		if (create_options & FILE_DIRECTORY_FILE) {
-			status = NT_STATUS_NOT_A_DIRECTORY;
-			goto fail;
-		}
-
-		status = split_ntfs_stream_name(talloc_tos(), fname,
-						&base, NULL);
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(10, ("create_file_unixpath: "
-				"split_ntfs_stream_name failed: %s\n",
-				nt_errstr(status)));
-			goto fail;
-		}
-
-		SMB_ASSERT(!is_ntfs_stream_name(base));	/* paranoia.. */
-
-		switch (create_disposition) {
-		case FILE_OPEN:
-			base_create_disposition = FILE_OPEN;
-			break;
-		default:
-			base_create_disposition = FILE_OPEN_IF;
-			break;
-		}
-
-		status = create_file_unixpath(conn, NULL, base, 0,
-					      FILE_SHARE_READ
-					      | FILE_SHARE_WRITE
-					      | FILE_SHARE_DELETE,
-					      base_create_disposition,
-					      0, 0, 0, 0, NULL, NULL,
-					      &base_fsp, NULL, NULL);
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(10, ("create_file_unixpath for base %s failed: "
-				   "%s\n", base, nt_errstr(status)));
-			goto fail;
-		}
-	}
-
-	/*
-	 * If it's a request for a directory open, deal with it separately.
-	 */
-
-	if (create_options & FILE_DIRECTORY_FILE) {
-
-		if (create_options & FILE_NON_DIRECTORY_FILE) {
-			status = NT_STATUS_INVALID_PARAMETER;
-			goto fail;
-		}
-
-		/* Can't open a temp directory. IFS kit test. */
-		if (file_attributes & FILE_ATTRIBUTE_TEMPORARY) {
-			status = NT_STATUS_INVALID_PARAMETER;
-			goto fail;
-		}
-
-		/*
-		 * We will get a create directory here if the Win32
-		 * app specified a security descriptor in the
-		 * CreateDirectory() call.
-		 */
-
-		oplock_request = 0;
-		status = open_directory(
-			conn, req, fname, &sbuf, access_mask, share_access,
-			create_disposition, create_options, file_attributes,
-			&info, &fsp);
-	} else {
-
-		/*
-		 * Ordinary file case.
-		 */
-
-		status = open_file_ntcreate(
-			conn, req, fname, &sbuf, access_mask, share_access,
-			create_disposition, create_options, file_attributes,
-			oplock_request, &info, &fsp);
-
-		if (NT_STATUS_EQUAL(status, NT_STATUS_FILE_IS_A_DIRECTORY)) {
-
-			/*
-			 * Fail the open if it was explicitly a non-directory
-			 * file.
-			 */
-
-			if (create_options & FILE_NON_DIRECTORY_FILE) {
-				status = NT_STATUS_FILE_IS_A_DIRECTORY;
-				goto fail;
-			}
-
-			oplock_request = 0;
-			status = open_directory(
-				conn, req, fname, &sbuf, access_mask,
-				share_access, create_disposition,
-				create_options,	file_attributes,
-				&info, &fsp);
-		}
-	}
-
-	if (!NT_STATUS_IS_OK(status)) {
-		goto fail;
-	}
-
-	/*
-	 * According to the MS documentation, the only time the security
-	 * descriptor is applied to the opened file is iff we *created* the
-	 * file; an existing file stays the same.
-	 *
-	 * Also, it seems (from observation) that you can open the file with
-	 * any access mask but you can still write the sd. We need to override
-	 * the granted access before we call set_sd
-	 * Patch for bug #2242 from Tom Lackemann <cessnatomny at yahoo.com>.
-	 */
-
-	if ((sd != NULL) && (info == FILE_WAS_CREATED)
-	    && lp_nt_acl_support(SNUM(conn))) {
-
-		uint32_t sec_info_sent = ALL_SECURITY_INFORMATION;
-		uint32_t saved_access_mask = fsp->access_mask;
-
-		if (sd->owner_sid == NULL) {
-			sec_info_sent &= ~OWNER_SECURITY_INFORMATION;
-		}
-		if (sd->group_sid == NULL) {
-			sec_info_sent &= ~GROUP_SECURITY_INFORMATION;
-		}
-		if (sd->sacl == NULL) {
-			sec_info_sent &= ~SACL_SECURITY_INFORMATION;
-		}
-		if (sd->dacl == NULL) {
-			sec_info_sent &= ~DACL_SECURITY_INFORMATION;
-		}
-
-		fsp->access_mask = FILE_GENERIC_ALL;
-
-		status = SMB_VFS_FSET_NT_ACL(fsp, sec_info_sent, sd);
-
-		fsp->access_mask = saved_access_mask;
-
-		if (!NT_STATUS_IS_OK(status)) {
-			goto fail;
-		}
-	}
-
-	if ((ea_list != NULL) && (info == FILE_WAS_CREATED)) {
-		status = set_ea(conn, fsp, fname, ea_list);
-		if (!NT_STATUS_IS_OK(status)) {
-			goto fail;
-		}
-	}
-
-	if (!fsp->is_directory && S_ISDIR(sbuf.st_mode)) {
-		status = NT_STATUS_ACCESS_DENIED;
-		goto fail;
-	}
-
-	/* Save the requested allocation size. */
-	if ((info == FILE_WAS_CREATED) || (info == FILE_WAS_OVERWRITTEN)) {
-		if (allocation_size
-		    && (allocation_size > sbuf.st_size)) {
-			fsp->initial_allocation_size = smb_roundup(
-				fsp->conn, allocation_size);
-			if (fsp->is_directory) {
-				/* Can't set allocation size on a directory. */
-				status = NT_STATUS_ACCESS_DENIED;
-				goto fail;
-			}
-			if (vfs_allocate_file_space(
-				    fsp, fsp->initial_allocation_size) == -1) {
-				status = NT_STATUS_DISK_FULL;
-				goto fail;
-			}
-		} else {
-			fsp->initial_allocation_size = smb_roundup(
-				fsp->conn, (SMB_BIG_UINT)sbuf.st_size);
-		}
-	}
-
-	DEBUG(10, ("create_file_unixpath: info=%d\n", info));
-
-	/*
-	 * Set fsp->base_fsp late enough that we can't "goto fail" anymore. In
-	 * the fail: branch we call close_file(fsp, ERROR_CLOSE) which would
-	 * also close fsp->base_fsp which we have to also do explicitly in
-	 * this routine here, as not in all "goto fail:" we have the fsp set
-	 * up already to be initialized with the base_fsp.
-	 */
-
-	fsp->base_fsp = base_fsp;
-
-	*result = fsp;
-	if (pinfo != NULL) {
-		*pinfo = info;
-	}
-	if (psbuf != NULL) {
-		if ((fsp->fh == NULL) || (fsp->fh->fd == -1)) {
-			*psbuf = sbuf;
-		}
-		else {
-			SMB_VFS_FSTAT(fsp, psbuf);
-		}
-	}
-	return NT_STATUS_OK;
-
- fail:
-	DEBUG(10, ("create_file_unixpath: %s\n", nt_errstr(status)));
-
-	if (fsp != NULL) {
-		close_file(fsp, ERROR_CLOSE);
-		fsp = NULL;
-	}
-	if (base_fsp != NULL) {
-		close_file(base_fsp, ERROR_CLOSE);
-		base_fsp = NULL;
-	}
-	return status;
-}
-
-NTSTATUS create_file(connection_struct *conn,
-		     struct smb_request *req,
-		     uint16_t root_dir_fid,
-		     const char *fname,
-		     uint32_t access_mask,
-		     uint32_t share_access,
-		     uint32_t create_disposition,
-		     uint32_t create_options,
-		     uint32_t file_attributes,
-		     uint32_t oplock_request,
-		     SMB_BIG_UINT allocation_size,
-		     struct security_descriptor *sd,
-		     struct ea_list *ea_list,
-
-		     files_struct **result,
-		     int *pinfo,
-		     SMB_STRUCT_STAT *psbuf)
-{
-	struct case_semantics_state *case_state = NULL;
-	SMB_STRUCT_STAT sbuf;
-	int info = FILE_WAS_OPENED;
-	files_struct *fsp = NULL;
-	NTSTATUS status;
-
-	DEBUG(10,("create_file: access_mask = 0x%x "
-		  "file_attributes = 0x%x, share_access = 0x%x, "
-		  "create_disposition = 0x%x create_options = 0x%x "
-		  "oplock_request = 0x%x "
-		  "root_dir_fid = 0x%x, ea_list = 0x%p, sd = 0x%p, "
-		  "fname = %s\n",
-		  (unsigned int)access_mask,
-		  (unsigned int)file_attributes,
-		  (unsigned int)share_access,
-		  (unsigned int)create_disposition,
-		  (unsigned int)create_options,
-		  (unsigned int)oplock_request,
-		  (unsigned int)root_dir_fid,
-		  ea_list, sd, fname));
-
-	/*
-	 * Get the file name.
-	 */
-
-	if (root_dir_fid != 0) {
-		/*
-		 * This filename is relative to a directory fid.
-		 */
-		char *parent_fname = NULL;
-		files_struct *dir_fsp = file_fsp(root_dir_fid);
-
-		if (dir_fsp == NULL) {
-			status = NT_STATUS_INVALID_HANDLE;
-			goto fail;
-		}
-
-		if (!dir_fsp->is_directory) {
-
-			/*
-			 * Check to see if this is a mac fork of some kind.
-			 */
-
-			if (is_ntfs_stream_name(fname)) {
-				status = NT_STATUS_OBJECT_PATH_NOT_FOUND;
-				goto fail;
-			}
-
-			/*
-			  we need to handle the case when we get a
-			  relative open relative to a file and the
-			  pathname is blank - this is a reopen!
-			  (hint from demyn plantenberg)
-			*/
-
-			status = NT_STATUS_INVALID_HANDLE;
-			goto fail;
-		}
-
-		if (ISDOT(dir_fsp->fsp_name)) {
-			/*
-			 * We're at the toplevel dir, the final file name
-			 * must not contain ./, as this is filtered out
-			 * normally by srvstr_get_path and unix_convert
-			 * explicitly rejects paths containing ./.
-			 */
-			parent_fname = talloc_strdup(talloc_tos(), "");
-			if (parent_fname == NULL) {
-				status = NT_STATUS_NO_MEMORY;
-				goto fail;
-			}
-		} else {
-			size_t dir_name_len = strlen(dir_fsp->fsp_name);
-
-			/*
-			 * Copy in the base directory name.
-			 */
-
-			parent_fname = TALLOC_ARRAY(talloc_tos(), char,
-						    dir_name_len+2);
-			if (parent_fname == NULL) {
-				status = NT_STATUS_NO_MEMORY;
-				goto fail;
-			}
-			memcpy(parent_fname, dir_fsp->fsp_name,
-			       dir_name_len+1);
-
-			/*
-			 * Ensure it ends in a '/'.
-			 * We used TALLOC_SIZE +2 to add space for the '/'.
-			 */
-
-			if(dir_name_len
-			   && (parent_fname[dir_name_len-1] != '\\')
-			   && (parent_fname[dir_name_len-1] != '/')) {
-				parent_fname[dir_name_len] = '/';
-				parent_fname[dir_name_len+1] = '\0';
-			}
-		}
-
-		fname = talloc_asprintf(talloc_tos(), "%s%s", parent_fname,
-					fname);
-		if (fname == NULL) {
-			status = NT_STATUS_NO_MEMORY;
-			goto fail;
-		}
-	}
-
-	/*
-	 * Check to see if this is a mac fork of some kind.
-	 */
-
-	if (is_ntfs_stream_name(fname)) {
-		enum FAKE_FILE_TYPE fake_file_type;
-
-		fake_file_type = is_fake_file(fname);
-
-		if (fake_file_type != FAKE_FILE_TYPE_NONE) {
-
-			/*
-			 * Here we go! support for changing the disk quotas
-			 * --metze
-			 *
-			 * We need to fake up to open this MAGIC QUOTA file
-			 * and return a valid FID.
-			 *
-			 * w2k close this file directly after openening xp
-			 * also tries a QUERY_FILE_INFO on the file and then
-			 * close it
-			 */
-			status = open_fake_file(conn, fake_file_type, fname,
-						access_mask, &fsp);
-			if (!NT_STATUS_IS_OK(status)) {
-				goto fail;
-			}
-
-			ZERO_STRUCT(sbuf);
-			goto done;
-		}
-	}
-
-	if ((req != NULL) && (req->flags2 & FLAGS2_DFS_PATHNAMES)) {
-		char *resolved_fname;
-
-		status = resolve_dfspath(talloc_tos(), conn, true, fname,
-					 &resolved_fname);
-
-		if (!NT_STATUS_IS_OK(status)) {
-			/*
-			 * For PATH_NOT_COVERED we had
-			 * reply_botherror(req, NT_STATUS_PATH_NOT_COVERED,
-			 *		   ERRSRV, ERRbadpath);
-			 * Need to fix in callers
-			 */
-			goto fail;
-		}
-		fname = resolved_fname;
-	}
-
-	/*
-	 * Check if POSIX semantics are wanted.
-	 */
-
-	if (file_attributes & FILE_FLAG_POSIX_SEMANTICS) {
-		case_state = set_posix_case_semantics(talloc_tos(), conn);
-		file_attributes &= ~FILE_FLAG_POSIX_SEMANTICS;
-	}
-
-	{
-		char *converted_fname;
-
-		SET_STAT_INVALID(sbuf);
-
-		status = unix_convert(talloc_tos(), conn, fname, False,
-				      &converted_fname, NULL, &sbuf);
-		if (!NT_STATUS_IS_OK(status)) {
-			goto fail;
-		}
-		fname = converted_fname;
-	}
-
-	TALLOC_FREE(case_state);
-
-	/* All file access must go through check_name() */
-
-	status = check_name(conn, fname);
-	if (!NT_STATUS_IS_OK(status)) {
-		goto fail;
-	}
-
-	status = create_file_unixpath(
-		conn, req, fname, access_mask, share_access,
-		create_disposition, create_options, file_attributes,
-		oplock_request, allocation_size, sd, ea_list,
-		&fsp, &info, &sbuf);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		goto fail;
-	}
-
- done:
-	DEBUG(10, ("create_file: info=%d\n", info));
-
-	*result = fsp;
-	if (pinfo != NULL) {
-		*pinfo = info;
-	}
-	if (psbuf != NULL) {
-		*psbuf = sbuf;
-	}
-	return NT_STATUS_OK;
-
- fail:
-	DEBUG(10, ("create_file: %s\n", nt_errstr(status)));
-
-	if (fsp != NULL) {
-		close_file(fsp, ERROR_CLOSE);
-		fsp = NULL;
-	}
-	return status;
-}

Modified: branches/samba/upstream/source/smbd/oplock.c
===================================================================
--- branches/samba/upstream/source/smbd/oplock.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/oplock.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #define DBGC_CLASS DBGC_LOCKING
@@ -25,9 +26,10 @@
 /* Current number of oplocks we have outstanding. */
 static int32 exclusive_oplocks_open = 0;
 static int32 level_II_oplocks_open = 0;
-bool global_client_failed_oplock_break = False;
+BOOL global_client_failed_oplock_break = False;
 
 extern uint32 global_client_caps;
+extern int smb_read_error;
 
 static struct kernel_oplocks *koplocks;
 
@@ -44,7 +46,7 @@
  Return True if an oplock message is pending.
 ****************************************************************************/
 
-bool oplock_message_waiting(fd_set *fds)
+BOOL oplock_message_waiting(fd_set *fds)
 {
 	if (koplocks && koplocks->msg_waiting(fds)) {
 		return True;
@@ -60,7 +62,7 @@
  we're calling this in a shutting down state.
 ****************************************************************************/
 
-void process_kernel_oplocks(struct messaging_context *msg_ctx, fd_set *pfds)
+void process_kernel_oplocks(fd_set *pfds)
 {
 	/*
 	 * We need to check for kernel oplocks before going into the select
@@ -85,15 +87,16 @@
 		}
 
 		/* Put the kernel break info into the message. */
-		push_file_id_16(msg, &fsp->file_id);
-		SIVAL(msg,16,fsp->fh->gen_id);
+		SDEV_T_VAL(msg,0,fsp->dev);
+		SINO_T_VAL(msg,8,fsp->inode);
+		SIVAL(msg,16,fsp->fh->file_id);
 
 		/* Don't need to be root here as we're only ever
 		   sending to ourselves. */
 
-		messaging_send_buf(msg_ctx, procid_self(),
-				   MSG_SMB_KERNEL_BREAK,
-				   (uint8 *)&msg, MSG_SMB_KERNEL_BREAK_SIZE);
+		message_send_pid(pid_to_procid(sys_getpid()),
+				 MSG_SMB_KERNEL_BREAK,
+				 &msg, MSG_SMB_KERNEL_BREAK_SIZE, True);
 	}
 }
 
@@ -102,7 +105,7 @@
  disabled (just sets flags). Returns True if oplock set.
 ****************************************************************************/
 
-bool set_file_oplock(files_struct *fsp, int oplock_type)
+BOOL set_file_oplock(files_struct *fsp, int oplock_type)
 {
 	if (koplocks && !koplocks->set_oplock(fsp, oplock_type)) {
 		return False;
@@ -116,10 +119,10 @@
 		exclusive_oplocks_open++;
 	}
 
-	DEBUG(5,("set_file_oplock: granted oplock on file %s, %s/%lu, "
+	DEBUG(5,("set_file_oplock: granted oplock on file %s, 0x%x/%.0f/%lu, "
 		    "tv_sec = %x, tv_usec = %x\n",
-		 fsp->fsp_name, file_id_string_tos(&fsp->file_id),
-		 fsp->fh->gen_id, (int)fsp->open_time.tv_sec,
+		 fsp->fsp_name, (unsigned int)fsp->dev, (double)fsp->inode,
+		 fsp->fh->file_id, (int)fsp->open_time.tv_sec,
 		 (int)fsp->open_time.tv_usec ));
 
 	return True;
@@ -175,14 +178,15 @@
  to none even if a "break-to-level II" was sent.
 ****************************************************************************/
 
-bool remove_oplock(files_struct *fsp)
+BOOL remove_oplock(files_struct *fsp)
 {
-	bool ret;
+	SMB_DEV_T dev = fsp->dev;
+	SMB_INO_T inode = fsp->inode;
+	BOOL ret;
 	struct share_mode_lock *lck;
 
 	/* Remove the oplock flag from the sharemode. */
-	lck = get_share_mode_lock(talloc_tos(), fsp->file_id, NULL, NULL,
-				  NULL);
+	lck = get_share_mode_lock(NULL, fsp->dev, fsp->inode, NULL, NULL);
 	if (lck == NULL) {
 		DEBUG(0,("remove_oplock: failed to lock share entry for "
 			 "file %s\n", fsp->fsp_name ));
@@ -191,8 +195,9 @@
 	ret = remove_share_oplock(lck, fsp);
 	if (!ret) {
 		DEBUG(0,("remove_oplock: failed to remove share oplock for "
-			 "file %s fnum %d, %s\n",
-			 fsp->fsp_name, fsp->fnum, file_id_string_tos(&fsp->file_id)));
+			 "file %s fnum %d, 0x%x/%.0f\n",
+			 fsp->fsp_name, fsp->fnum, (unsigned int)dev,
+			 (double)inode));
 	}
 	release_file_oplock(fsp);
 	TALLOC_FREE(lck);
@@ -202,13 +207,14 @@
 /*
  * Deal with a reply when a break-to-level II was sent.
  */
-bool downgrade_oplock(files_struct *fsp)
+BOOL downgrade_oplock(files_struct *fsp)
 {
-	bool ret;
+	SMB_DEV_T dev = fsp->dev;
+	SMB_INO_T inode = fsp->inode;
+	BOOL ret;
 	struct share_mode_lock *lck;
 
-	lck = get_share_mode_lock(talloc_tos(), fsp->file_id, NULL, NULL,
-				  NULL);
+	lck = get_share_mode_lock(NULL, fsp->dev, fsp->inode, NULL, NULL);
 	if (lck == NULL) {
 		DEBUG(0,("downgrade_oplock: failed to lock share entry for "
 			 "file %s\n", fsp->fsp_name ));
@@ -217,8 +223,9 @@
 	ret = downgrade_share_oplock(lck, fsp);
 	if (!ret) {
 		DEBUG(0,("downgrade_oplock: failed to downgrade share oplock "
-			 "for file %s fnum %d, file_id %s\n",
-			 fsp->fsp_name, fsp->fnum, file_id_string_tos(&fsp->file_id)));
+			 "for file %s fnum %d, dev = %x, inode = %.0f\n",
+			 fsp->fsp_name, fsp->fnum, (unsigned int)dev,
+			 (double)inode));
 	}
 
 	downgrade_file_oplock(fsp);
@@ -254,7 +261,7 @@
 	}
 
 	memset(result,'\0',smb_size);
-	srv_set_message(result,8,0,true);
+	set_message(result,8,0,True);
 	SCVAL(result,smb_com,SMBlockingX);
 	SSVAL(result,smb_tid,fsp->conn->cnum);
 	SSVAL(result,smb_pid,0xFFFF);
@@ -284,13 +291,13 @@
  Ensure that we have a valid oplock.
 ****************************************************************************/
 
-static files_struct *initial_break_processing(struct file_id id, unsigned long file_id)
+static files_struct *initial_break_processing(SMB_DEV_T dev, SMB_INO_T inode, unsigned long file_id)
 {
 	files_struct *fsp = NULL;
 
 	if( DEBUGLVL( 3 ) ) {
-		dbgtext( "initial_break_processing: called for %s/%u\n",
-			 file_id_string_tos(&id), (int)file_id);
+		dbgtext( "initial_break_processing: called for 0x%x/%.0f/%u\n",
+			(unsigned int)dev, (double)inode, (int)file_id);
 		dbgtext( "Current oplocks_open (exclusive = %d, levelII = %d)\n",
 			exclusive_oplocks_open, level_II_oplocks_open );
 	}
@@ -301,13 +308,14 @@
 	 * we have an oplock on it.
 	 */
 
-	fsp = file_find_dif(id, file_id);
+	fsp = file_find_dif(dev, inode, file_id);
 
 	if(fsp == NULL) {
 		/* The file could have been closed in the meantime - return success. */
 		if( DEBUGLVL( 3 ) ) {
 			dbgtext( "initial_break_processing: cannot find open file with " );
-			dbgtext( "file_id %s gen_id = %lu", file_id_string_tos(&id), file_id);
+			dbgtext( "dev = 0x%x, inode = %.0f file_id = %lu", (unsigned int)dev,
+				(double)inode, file_id);
 			dbgtext( "allowing break to succeed.\n" );
 		}
 		return NULL;
@@ -326,8 +334,8 @@
 	if(fsp->oplock_type == NO_OPLOCK) {
 		if( DEBUGLVL( 3 ) ) {
 			dbgtext( "initial_break_processing: file %s ", fsp->fsp_name );
-			dbgtext( "(file_id = %s gen_id = %lu) has no oplock.\n",
-				 file_id_string_tos(&id), fsp->fh->gen_id );
+			dbgtext( "(dev = %x, inode = %.0f, file_id = %lu) has no oplock.\n",
+				(unsigned int)dev, (double)inode, fsp->fh->file_id );
 			dbgtext( "Allowing break to succeed regardless.\n" );
 		}
 		return NULL;
@@ -381,34 +389,34 @@
  the client for LEVEL2.
 *******************************************************************/
 
-static void process_oplock_async_level2_break_message(struct messaging_context *msg_ctx,
-						      void *private_data,
-						      uint32_t msg_type,
-						      struct server_id src,
-						      DATA_BLOB *data)
+static void process_oplock_async_level2_break_message(int msg_type, struct process_id src,
+						      void *buf, size_t len,
+						      void *private_data)
 {
 	struct share_mode_entry msg;
 	files_struct *fsp;
 	char *break_msg;
-	bool sign_state;
+	BOOL sign_state;
 
-	if (data->data == NULL) {
+	if (buf == NULL) {
 		DEBUG(0, ("Got NULL buffer\n"));
 		return;
 	}
 
-	if (data->length != MSG_SMB_SHARE_MODE_ENTRY_SIZE) {
-		DEBUG(0, ("Got invalid msg len %d\n", (int)data->length));
+	if (len != MSG_SMB_SHARE_MODE_ENTRY_SIZE) {
+		DEBUG(0, ("Got invalid msg len %d\n", (int)len));
 		return;
 	}
 
 	/* De-linearize incoming message. */
-	message_to_share_mode_entry(&msg, (char *)data->data);
+	message_to_share_mode_entry(&msg, (char *)buf);
 
-	DEBUG(10, ("Got oplock async level 2 break message from pid %d: %s/%lu\n",
-		   (int)procid_to_pid(&src), file_id_string_tos(&msg.id), msg.share_file_id));
+	DEBUG(10, ("Got oplock async level 2 break message from pid %d: 0x%x/%.0f/%lu\n",
+		   (int)procid_to_pid(&src), (unsigned int)msg.dev,
+		   (double)msg.inode, msg.share_file_id));
 
-	fsp = initial_break_processing(msg.id, msg.share_file_id);
+	fsp = initial_break_processing(msg.dev, msg.inode,
+				       msg.share_file_id);
 
 	if (fsp == NULL) {
 		/* We hit a race here. Break messages are sent, and before we
@@ -451,10 +459,8 @@
 	sign_state = srv_oplock_set_signing(False);
 
 	show_msg(break_msg);
-	if (!srv_send_smb(smbd_server_fd(),
-			break_msg,
-			IS_CONN_ENCRYPTED(fsp->conn))) {
-		exit_server_cleanly("oplock_break: srv_send_smb failed.");
+	if (!send_smb(smbd_server_fd(), break_msg)) {
+		exit_server_cleanly("oplock_break: send_smb failed.");
 	}
 
 	/* Restore the sign state to what it was. */
@@ -470,35 +476,35 @@
  This handles the generic oplock break message from another smbd.
 *******************************************************************/
 
-static void process_oplock_break_message(struct messaging_context *msg_ctx,
-					 void *private_data,
-					 uint32_t msg_type,
-					 struct server_id src,
-					 DATA_BLOB *data)
+static void process_oplock_break_message(int msg_type, struct process_id src,
+					 void *buf, size_t len,
+					 void *private_data)
 {
 	struct share_mode_entry msg;
 	files_struct *fsp;
 	char *break_msg;
-	bool break_to_level2 = False;
-	bool sign_state;
+	BOOL break_to_level2 = False;
+	BOOL sign_state;
 
-	if (data->data == NULL) {
+	if (buf == NULL) {
 		DEBUG(0, ("Got NULL buffer\n"));
 		return;
 	}
 
-	if (data->length != MSG_SMB_SHARE_MODE_ENTRY_SIZE) {
-		DEBUG(0, ("Got invalid msg len %d\n", (int)data->length));
+	if (len != MSG_SMB_SHARE_MODE_ENTRY_SIZE) {
+		DEBUG(0, ("Got invalid msg len %d\n", (int)len));
 		return;
 	}
 
 	/* De-linearize incoming message. */
-	message_to_share_mode_entry(&msg, (char *)data->data);
+	message_to_share_mode_entry(&msg, (char *)buf);
 
-	DEBUG(10, ("Got oplock break message from pid %d: %s/%lu\n",
-		   (int)procid_to_pid(&src), file_id_string_tos(&msg.id), msg.share_file_id));
+	DEBUG(10, ("Got oplock break message from pid %d: 0x%x/%.0f/%lu\n",
+		   (int)procid_to_pid(&src), (unsigned int)msg.dev,
+		   (double)msg.inode, msg.share_file_id));
 
-	fsp = initial_break_processing(msg.id, msg.share_file_id);
+	fsp = initial_break_processing(msg.dev, msg.inode,
+				       msg.share_file_id);
 
 	if (fsp == NULL) {
 		/* a We hit race here. Break messages are sent, and before we
@@ -507,9 +513,8 @@
 		DEBUG(3, ("Did not find fsp\n"));
 
 		/* We just send the same message back. */
-		messaging_send_buf(msg_ctx, src, MSG_SMB_BREAK_RESPONSE,
-				   (uint8 *)data->data,
-				   MSG_SMB_SHARE_MODE_ENTRY_SIZE);
+		message_send_pid(src, MSG_SMB_BREAK_RESPONSE,
+				 buf, MSG_SMB_SHARE_MODE_ENTRY_SIZE, True);
 		return;
 	}
 
@@ -525,13 +530,12 @@
 
 	if (EXCLUSIVE_OPLOCK_TYPE(msg.op_type) &&
 	    !EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type)) {
-		DEBUG(3, ("Already downgraded oplock on %s: %s\n",
-			  file_id_string_tos(&fsp->file_id),
+		DEBUG(3, ("Already downgraded oplock on 0x%x/%.0f: %s\n",
+			  (unsigned int)fsp->dev, (double)fsp->inode,
 			  fsp->fsp_name));
 		/* We just send the same message back. */
-		messaging_send_buf(msg_ctx, src, MSG_SMB_BREAK_RESPONSE,
-				   (uint8 *)data->data,
-				   MSG_SMB_SHARE_MODE_ENTRY_SIZE);
+		message_send_pid(src, MSG_SMB_BREAK_RESPONSE,
+				 buf, MSG_SMB_SHARE_MODE_ENTRY_SIZE, True);
 		return;
 	}
 
@@ -558,10 +562,8 @@
 	sign_state = srv_oplock_set_signing(False);
 
 	show_msg(break_msg);
-	if (!srv_send_smb(smbd_server_fd(),
-			break_msg,
-			IS_CONN_ENCRYPTED(fsp->conn))) {
-		exit_server_cleanly("oplock_break: srv_send_smb failed.");
+	if (!send_smb(smbd_server_fd(), break_msg)) {
+		exit_server_cleanly("oplock_break: send_smb failed.");
 	}
 
 	/* Restore the sign state to what it was. */
@@ -583,37 +585,37 @@
  This handles the kernel oplock break message.
 *******************************************************************/
 
-static void process_kernel_oplock_break(struct messaging_context *msg_ctx,
-					void *private_data,
-					uint32_t msg_type,
-					struct server_id src,
-					DATA_BLOB *data)
+static void process_kernel_oplock_break(int msg_type, struct process_id src,
+					void *buf, size_t len,
+					void *private_data)
 {
-	struct file_id id;
+	SMB_DEV_T dev;
+	SMB_INO_T inode;
 	unsigned long file_id;
 	files_struct *fsp;
 	char *break_msg;
-	bool sign_state;
+	BOOL sign_state;
 
-	if (data->data == NULL) {
+	if (buf == NULL) {
 		DEBUG(0, ("Got NULL buffer\n"));
 		return;
 	}
 
-	if (data->length != MSG_SMB_KERNEL_BREAK_SIZE) {
-		DEBUG(0, ("Got invalid msg len %d\n", (int)data->length));
+	if (len != MSG_SMB_KERNEL_BREAK_SIZE) {
+		DEBUG(0, ("Got invalid msg len %d\n", (int)len));
 		return;
 	}
 
 	/* Pull the data from the message. */
-	pull_file_id_16((char *)data->data, &id);
-	file_id = (unsigned long)IVAL(data->data, 16);
+	dev = DEV_T_VAL(buf, 0);
+	inode = INO_T_VAL(buf, 8);
+	file_id = (unsigned long)IVAL(buf, 16);
 
-	DEBUG(10, ("Got kernel oplock break message from pid %d: %s/%u\n",
-		   (int)procid_to_pid(&src), file_id_string_tos(&id),
+	DEBUG(10, ("Got kernel oplock break message from pid %d: 0x%x/%.0f/%u\n",
+		   (int)procid_to_pid(&src), (unsigned int)dev, (double)inode,
 		   (unsigned int)file_id));
 
-	fsp = initial_break_processing(id, file_id);
+	fsp = initial_break_processing(dev, inode, file_id);
 
 	if (fsp == NULL) {
 		DEBUG(3, ("Got a kernel oplock break message for a file "
@@ -637,10 +639,8 @@
 	sign_state = srv_oplock_set_signing(False);
 
 	show_msg(break_msg);
-	if (!srv_send_smb(smbd_server_fd(),
-			break_msg,
-			IS_CONN_ENCRYPTED(fsp->conn))) {
-		exit_server_cleanly("oplock_break: srv_send_smb failed.");
+	if (!send_smb(smbd_server_fd(), break_msg)) {
+		exit_server_cleanly("oplock_break: send_smb failed.");
 	}
 
 	/* Restore the sign state to what it was. */
@@ -663,10 +663,8 @@
 
 		share_mode_entry_to_message(msg, e);
 
-		messaging_send_buf(smbd_messaging_context(), e->pid,
-				   MSG_SMB_BREAK_RESPONSE,
-				   (uint8 *)msg,
-				   MSG_SMB_SHARE_MODE_ENTRY_SIZE);
+		message_send_pid(e->pid, MSG_SMB_BREAK_RESPONSE,
+				 msg, MSG_SMB_SHARE_MODE_ENTRY_SIZE, True);
 	}
 
 	SAFE_FREE(fsp->pending_break_messages);
@@ -679,59 +677,56 @@
 	return;
 }
 
-static void process_oplock_break_response(struct messaging_context *msg_ctx,
-					  void *private_data,
-					  uint32_t msg_type,
-					  struct server_id src,
-					  DATA_BLOB *data)
+static void process_oplock_break_response(int msg_type, struct process_id src,
+					  void *buf, size_t len,
+					  void *private_data)
 {
 	struct share_mode_entry msg;
 
-	if (data->data == NULL) {
+	if (buf == NULL) {
 		DEBUG(0, ("Got NULL buffer\n"));
 		return;
 	}
 
-	if (data->length != MSG_SMB_SHARE_MODE_ENTRY_SIZE) {
-		DEBUG(0, ("Got invalid msg len %u\n",
-			  (unsigned int)data->length));
+	if (len != MSG_SMB_SHARE_MODE_ENTRY_SIZE) {
+		DEBUG(0, ("Got invalid msg len %u\n", (unsigned int)len));
 		return;
 	}
 
 	/* De-linearize incoming message. */
-	message_to_share_mode_entry(&msg, (char *)data->data);
+	message_to_share_mode_entry(&msg, (char *)buf);
 
-	DEBUG(10, ("Got oplock break response from pid %d: %s/%lu mid %u\n",
-		   (int)procid_to_pid(&src), file_id_string_tos(&msg.id), msg.share_file_id,
+	DEBUG(10, ("Got oplock break response from pid %d: 0x%x/%.0f/%lu mid %u\n",
+		   (int)procid_to_pid(&src), (unsigned int)msg.dev,
+		   (double)msg.inode, msg.share_file_id,
 		   (unsigned int)msg.op_mid));
 
 	/* Here's the hack from open.c, store the mid in the 'port' field */
 	schedule_deferred_open_smb_message(msg.op_mid);
 }
 
-static void process_open_retry_message(struct messaging_context *msg_ctx,
-				       void *private_data,
-				       uint32_t msg_type,
-				       struct server_id src,
-				       DATA_BLOB *data)
+static void process_open_retry_message(int msg_type, struct process_id src,
+				       void *buf, size_t len,
+				       void *private_data)
 {
 	struct share_mode_entry msg;
 	
-	if (data->data == NULL) {
+	if (buf == NULL) {
 		DEBUG(0, ("Got NULL buffer\n"));
 		return;
 	}
 
-	if (data->length != MSG_SMB_SHARE_MODE_ENTRY_SIZE) {
-		DEBUG(0, ("Got invalid msg len %d\n", (int)data->length));
+	if (len != MSG_SMB_SHARE_MODE_ENTRY_SIZE) {
+		DEBUG(0, ("Got invalid msg len %d\n", (int)len));
 		return;
 	}
 
 	/* De-linearize incoming message. */
-	message_to_share_mode_entry(&msg, (char *)data->data);
+	message_to_share_mode_entry(&msg, (char *)buf);
 
-	DEBUG(10, ("Got open retry msg from pid %d: %s mid %u\n",
-		   (int)procid_to_pid(&src), file_id_string_tos(&msg.id),
+	DEBUG(10, ("Got open retry msg from pid %d: 0x%x/%.0f/%lu mid %u\n",
+		   (int)procid_to_pid(&src), (unsigned int)msg.dev,
+		   (double)msg.inode, msg.share_file_id,
 		   (unsigned int)msg.op_mid));
 
 	schedule_deferred_open_smb_message(msg.op_mid);
@@ -759,8 +754,7 @@
 	if (!LEVEL_II_OPLOCK_TYPE(fsp->oplock_type))
 		return;
 
-	lck = get_share_mode_lock(talloc_tos(), fsp->file_id, NULL, NULL,
-				  NULL);
+	lck = get_share_mode_lock(NULL, fsp->dev, fsp->inode, NULL, NULL);
 	if (lck == NULL) {
 		DEBUG(0,("release_level_2_oplocks_on_change: failed to lock "
 			 "share mode entry for file %s.\n", fsp->fsp_name ));
@@ -808,10 +802,8 @@
 
 		share_mode_entry_to_message(msg, share_entry);
 
-		messaging_send_buf(smbd_messaging_context(), share_entry->pid,
-				   MSG_SMB_ASYNC_LEVEL2_BREAK,
-				   (uint8 *)msg,
-				   MSG_SMB_SHARE_MODE_ENTRY_SIZE);
+		message_send_pid(share_entry->pid, MSG_SMB_ASYNC_LEVEL2_BREAK,
+				 msg, MSG_SMB_SHARE_MODE_ENTRY_SIZE, True);
 	}
 
 	/* We let the message receivers handle removing the oplock state
@@ -824,7 +816,7 @@
  Linearize a share mode entry struct to an internal oplock break message.
 ****************************************************************************/
 
-void share_mode_entry_to_message(char *msg, const struct share_mode_entry *e)
+void share_mode_entry_to_message(char *msg, struct share_mode_entry *e)
 {
 	SIVAL(msg,0,(uint32)e->pid.pid);
 	SSVAL(msg,4,e->op_mid);
@@ -834,13 +826,11 @@
 	SIVAL(msg,16,e->private_options);
 	SIVAL(msg,20,(uint32)e->time.tv_sec);
 	SIVAL(msg,24,(uint32)e->time.tv_usec);
-	push_file_id_16(msg+28, &e->id);
+	SDEV_T_VAL(msg,28,e->dev);
+	SINO_T_VAL(msg,36,e->inode);
 	SIVAL(msg,44,e->share_file_id);
 	SIVAL(msg,48,e->uid);
 	SSVAL(msg,52,e->flags);
-#ifdef CLUSTER_SUPPORT
-	SIVAL(msg,54,e->pid.vnn);
-#endif
 }
 
 /****************************************************************************
@@ -857,33 +847,36 @@
 	e->private_options = IVAL(msg,16);
 	e->time.tv_sec = (time_t)IVAL(msg,20);
 	e->time.tv_usec = (int)IVAL(msg,24);
-	pull_file_id_16(msg+28, &e->id);
+	e->dev = DEV_T_VAL(msg,28);
+	e->inode = INO_T_VAL(msg,36);
 	e->share_file_id = (unsigned long)IVAL(msg,44);
 	e->uid = (uint32)IVAL(msg,48);
 	e->flags = (uint16)SVAL(msg,52);
-#ifdef CLUSTER_SUPPORT
-	e->pid.vnn = IVAL(msg,54);
-#endif
 }
 
 /****************************************************************************
  Setup oplocks for this process.
 ****************************************************************************/
 
-bool init_oplocks(struct messaging_context *msg_ctx)
+BOOL init_oplocks(void)
 {
 	DEBUG(3,("init_oplocks: initializing messages.\n"));
 
-	messaging_register(msg_ctx, NULL, MSG_SMB_BREAK_REQUEST,
-			   process_oplock_break_message);
-	messaging_register(msg_ctx, NULL, MSG_SMB_ASYNC_LEVEL2_BREAK,
-			   process_oplock_async_level2_break_message);
-	messaging_register(msg_ctx, NULL, MSG_SMB_BREAK_RESPONSE,
-			   process_oplock_break_response);
-	messaging_register(msg_ctx, NULL, MSG_SMB_KERNEL_BREAK,
-			   process_kernel_oplock_break);
-	messaging_register(msg_ctx, NULL, MSG_SMB_OPEN_RETRY,
-			   process_open_retry_message);
+	message_register(MSG_SMB_BREAK_REQUEST,
+			 process_oplock_break_message,
+			 NULL);
+	message_register(MSG_SMB_ASYNC_LEVEL2_BREAK,
+			 process_oplock_async_level2_break_message,
+			 NULL);
+	message_register(MSG_SMB_BREAK_RESPONSE,
+			 process_oplock_break_response,
+			 NULL);
+	message_register(MSG_SMB_KERNEL_BREAK,
+			 process_kernel_oplock_break,
+			 NULL);
+	message_register(MSG_SMB_OPEN_RETRY,
+			 process_open_retry_message,
+			 NULL);
 
 	if (lp_kernel_oplocks()) {
 #if HAVE_KERNEL_OPLOCKS_IRIX

Modified: branches/samba/upstream/source/smbd/oplock_irix.c
===================================================================
--- branches/samba/upstream/source/smbd/oplock_irix.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/oplock_irix.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #define DBGC_CLASS DBGC_LOCKING
@@ -29,29 +30,21 @@
  Test to see if IRIX kernel oplocks work.
 ****************************************************************************/
 
-static bool irix_oplocks_available(void)
+static BOOL irix_oplocks_available(void)
 {
 	int fd;
 	int pfd[2];
-	TALLOC_CTX *ctx = talloc_stackframe();
-	char *tmpname = NULL;
+	pstring tmpname;
 
 	set_effective_capability(KERNEL_OPLOCK_CAPABILITY);
 
-	tmpname = talloc_asprintf(ctx,
-				"%s/koplock.%d",
-				lp_lockdir(),
-				(int)sys_getpid());
-	if (!tmpname) {
-		TALLOC_FREE(ctx);
-		return False;
-	}
+	slprintf(tmpname,sizeof(tmpname)-1, "%s/koplock.%d", lp_lockdir(),
+		 (int)sys_getpid());
 
 	if(pipe(pfd) != 0) {
 		DEBUG(0,("check_kernel_oplocks: Unable to create pipe. Error "
 			 "was %s\n",
 			 strerror(errno) ));
-		TALLOC_FREE(ctx);
 		return False;
 	}
 
@@ -62,14 +55,11 @@
 		unlink( tmpname );
 		close(pfd[0]);
 		close(pfd[1]);
-		TALLOC_FREE(ctx);
 		return False;
 	}
 
 	unlink(tmpname);
 
-	TALLOC_FREE(ctx);
-
 	if(sys_fcntl_long(fd, F_OPLKREG, pfd[1]) == -1) {
 		DEBUG(0,("check_kernel_oplocks: Kernel oplocks are not "
 			 "available on this machine. Disabling kernel oplock "
@@ -104,9 +94,9 @@
 
 static files_struct *irix_oplock_receive_message(fd_set *fds)
 {
+	extern int smb_read_error;
 	oplock_stat_t os;
 	char dummy;
-	struct file_id fileid;
 	files_struct *fsp;
 
 	/* Ensure we only get one call per select fd set. */
@@ -121,6 +111,7 @@
 		DEBUG(0,("irix_oplock_receive_message: read of kernel "
 			 "notification failed. Error was %s.\n",
 			 strerror(errno) ));
+		smb_read_error = READ_ERROR;
 		return NULL;
 	}
 
@@ -140,20 +131,17 @@
 			 */
 			return NULL;
 		}
+		smb_read_error = READ_ERROR;
 		return NULL;
 	}
 
 	/*
 	 * We only have device and inode info here - we have to guess that this
 	 * is the first fsp open with this dev,ino pair.
-	 *
-	 * NOTE: this doesn't work if any VFS modules overloads
-	 *       the file_id_create() hook!
 	 */
 
-	fileid = file_id_create_dev((SMB_DEV_T)os.os_dev,
-				    (SMB_INO_T)os.os_ino);
-	if ((fsp = file_find_di_first(fileid)) == NULL) {
+	if ((fsp = file_find_di_first((SMB_DEV_T)os.os_dev,
+				      (SMB_INO_T)os.os_ino)) == NULL) {
 		DEBUG(0,("irix_oplock_receive_message: unable to find open "
 			 "file with dev = %x, inode = %.0f\n",
 			 (unsigned int)os.os_dev, (double)os.os_ino ));
@@ -161,9 +149,9 @@
 	}
      
 	DEBUG(5,("irix_oplock_receive_message: kernel oplock break request "
-		 "received for file_id %s gen_id = %ul",
-		 file_id_string_tos(&fsp->file_id),
-		 fsp->fh->gen_id ));
+		 "received for dev = %x, inode = %.0f\n, file_id = %ul",
+		 (unsigned int)fsp->dev, (double)fsp->inode,
+		 fsp->fh->file_id ));
 
 	return fsp;
 }
@@ -172,32 +160,32 @@
  Attempt to set an kernel oplock on a file.
 ****************************************************************************/
 
-static bool irix_set_kernel_oplock(files_struct *fsp, int oplock_type)
+static BOOL irix_set_kernel_oplock(files_struct *fsp, int oplock_type)
 {
 	if (sys_fcntl_long(fsp->fh->fd, F_OPLKREG, oplock_pipe_write) == -1) {
 		if(errno != EAGAIN) {
 			DEBUG(0,("irix_set_kernel_oplock: Unable to get "
-				 "kernel oplock on file %s, file_id %s "
-				 "gen_id = %ul. Error was %s\n", 
-				 fsp->fsp_name, file_id_string_tos(&fsp->file_id), 
-				 fsp->fh->gen_id,
+				 "kernel oplock on file %s, dev = %x, inode "
+				 "= %.0f, file_id = %ul. Error was %s\n", 
+				 fsp->fsp_name, (unsigned int)fsp->dev,
+				 (double)fsp->inode, fsp->fh->file_id,
 				 strerror(errno) ));
 		} else {
 			DEBUG(5,("irix_set_kernel_oplock: Refused oplock on "
-				 "file %s, fd = %d, file_id = 5s, "
-				 "gen_id = %ul. Another process had the file "
+				 "file %s, fd = %d, dev = %x, inode = %.0f, "
+				 "file_id = %ul. Another process had the file "
 				 "open.\n",
 				 fsp->fsp_name, fsp->fh->fd,
-				 file_id_string_tos(&fsp->file_id),
-				 fsp->fh->gen_id ));
+				 (unsigned int)fsp->dev, (double)fsp->inode,
+				 fsp->fh->file_id ));
 		}
 		return False;
 	}
 	
-	DEBUG(10,("irix_set_kernel_oplock: got kernel oplock on file %s, file_id = %s "
-		  "gen_id = %ul\n",
-		  fsp->fsp_name, file_id_string_tos(&fsp->file_id),
-		  fsp->fh->gen_id));
+	DEBUG(10,("irix_set_kernel_oplock: got kernel oplock on file %s, dev "
+		  "= %x, inode = %.0f, file_id = %ul\n",
+		  fsp->fsp_name, (unsigned int)fsp->dev, (double)fsp->inode,
+		  fsp->fh->file_id));
 
 	return True;
 }
@@ -214,10 +202,10 @@
 		 * oplock state of this file.
 		 */
 		int state = sys_fcntl_long(fsp->fh->fd, F_OPLKACK, -1);
-		dbgtext("irix_release_kernel_oplock: file %s, file_id = %s"
-			"gen_id = %ul, has kernel oplock state "
-			"of %x.\n", fsp->fsp_name, file_id_string_tos(&fsp->file_id),
-                        fsp->fh->gen_id, state );
+		dbgtext("irix_release_kernel_oplock: file %s, dev = %x, "
+			"inode = %.0f file_id = %ul, has kernel oplock state "
+			"of %x.\n", fsp->fsp_name, (unsigned int)fsp->dev,
+                        (double)fsp->inode, fsp->fh->file_id, state );
 	}
 
 	/*
@@ -227,10 +215,10 @@
 		if( DEBUGLVL( 0 )) {
 			dbgtext("irix_release_kernel_oplock: Error when "
 				"removing kernel oplock on file " );
-			dbgtext("%s, file_id = %s gen_id = %ul. "
+			dbgtext("%s, dev = %x, inode = %.0f, file_id = %ul. "
 				"Error was %s\n",
-				fsp->fsp_name, file_id_string_tos(&fsp->file_id),
-				fsp->fh->gen_id,
+				fsp->fsp_name, (unsigned int)fsp->dev, 
+				(double)fsp->inode, fsp->fh->file_id,
 				strerror(errno) );
 		}
 	}
@@ -241,7 +229,7 @@
  Note that fds MAY BE NULL ! If so we must do our own select.
 ****************************************************************************/
 
-static bool irix_oplock_msg_waiting(fd_set *fds)
+static BOOL irix_oplock_msg_waiting(fd_set *fds)
 {
 	int selrtn;
 	fd_set myfds;

Modified: branches/samba/upstream/source/smbd/oplock_linux.c
===================================================================
--- branches/samba/upstream/source/smbd/oplock_linux.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/oplock_linux.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #define DBGC_CLASS DBGC_LOCKING
@@ -22,6 +23,22 @@
 
 #if HAVE_KERNEL_OPLOCKS_LINUX
 
+/* these can be removed when they are in glibc headers */
+struct  cap_user_header {
+	uint32 version;
+	int pid;
+} header;
+struct cap_user_data {
+	uint32 effective;
+	uint32 permitted;
+	uint32 inheritable;
+} data;
+
+extern int capget(struct cap_user_header * hdrp,
+		  struct cap_user_data * datap);
+extern int capset(struct cap_user_header * hdrp,
+		  const struct cap_user_data * datap);
+
 static SIG_ATOMIC_T signals_received;
 #define FD_PENDING_SIZE 100
 static SIG_ATOMIC_T fd_pending_array[FD_PENDING_SIZE];
@@ -59,17 +76,35 @@
 	sys_select_signal(RT_SIGNAL_LEASE);
 }
 
-/*
- * public function to get linux lease capability. Needed by some VFS modules (eg. gpfs.c)
- */
-void linux_set_lease_capability(void)
+/****************************************************************************
+ Try to gain a linux capability.
+****************************************************************************/
+
+static void set_capability(unsigned capability)
 {
-	set_effective_capability(LEASE_CAPABILITY);
+#ifndef _LINUX_CAPABILITY_VERSION
+#define _LINUX_CAPABILITY_VERSION 0x19980330
+#endif
+	header.version = _LINUX_CAPABILITY_VERSION;
+	header.pid = 0;
+
+	if (capget(&header, &data) == -1) {
+		DEBUG(3,("Unable to get kernel capabilities (%s)\n",
+			 strerror(errno)));
+		return;
+	}
+
+	data.effective |= (1<<capability);
+
+	if (capset(&header, &data) == -1) {
+		DEBUG(3,("Unable to set %d capability (%s)\n", 
+			 capability, strerror(errno)));
+	}
 }
 
-/* 
- * Call to set the kernel lease signal handler
- */
+/*
+ Call to set the kernel lease signal handler
+*/
 int linux_set_lease_sighandler(int fd)
 {
         if (fcntl(fd, F_SETSIG, RT_SIGNAL_LEASE) == -1) {
@@ -92,7 +127,7 @@
 
 	ret = fcntl(fd, F_SETLEASE, leasetype);
 	if (ret == -1 && errno == EACCES) {
-		set_effective_capability(LEASE_CAPABILITY);
+		set_capability(CAP_LEASE);
 		ret = fcntl(fd, F_SETLEASE, leasetype);
 	}
 
@@ -128,21 +163,21 @@
  Attempt to set an kernel oplock on a file.
 ****************************************************************************/
 
-static bool linux_set_kernel_oplock(files_struct *fsp, int oplock_type)
+static BOOL linux_set_kernel_oplock(files_struct *fsp, int oplock_type)
 {
-	if ( SMB_VFS_LINUX_SETLEASE(fsp, F_WRLCK) == -1) {
+	if ( SMB_VFS_LINUX_SETLEASE(fsp,fsp->fh->fd, F_WRLCK) == -1) {
 		DEBUG(3,("linux_set_kernel_oplock: Refused oplock on file %s, "
-			 "fd = %d, file_id = %s. (%s)\n",
+			 "fd = %d, dev = %x, inode = %.0f. (%s)\n",
 			 fsp->fsp_name, fsp->fh->fd, 
-			 file_id_string_tos(&fsp->file_id),
+			 (unsigned int)fsp->dev, (double)fsp->inode,
 			 strerror(errno)));
 		return False;
 	}
 	
 	DEBUG(3,("linux_set_kernel_oplock: got kernel oplock on file %s, "
-		 "file_id = %s gen_id = %lu\n",
-		 fsp->fsp_name, file_id_string_tos(&fsp->file_id),
-		 fsp->fh->gen_id));
+		 "dev = %x, inode = %.0f, file_id = %lu\n",
+		  fsp->fsp_name, (unsigned int)fsp->dev, (double)fsp->inode,
+		 fsp->fh->file_id));
 
 	return True;
 }
@@ -159,23 +194,23 @@
 		 * oplock state of this file.
 		 */
 		int state = fcntl(fsp->fh->fd, F_GETLEASE, 0);
-		dbgtext("linux_release_kernel_oplock: file %s, file_id = %s "
-			"gen_id = %lu has kernel oplock state "
-			"of %x.\n", fsp->fsp_name, file_id_string_tos(&fsp->file_id),
-			fsp->fh->gen_id, state );
+		dbgtext("linux_release_kernel_oplock: file %s, dev = %x, "
+			"inode = %.0f file_id = %lu has kernel oplock state "
+			"of %x.\n", fsp->fsp_name, (unsigned int)fsp->dev,
+                        (double)fsp->inode, fsp->fh->file_id, state );
 	}
 
 	/*
 	 * Remove the kernel oplock on this file.
 	 */
-	if ( SMB_VFS_LINUX_SETLEASE(fsp, F_UNLCK) == -1) {
+	if ( SMB_VFS_LINUX_SETLEASE(fsp,fsp->fh->fd, F_UNLCK) == -1) {
 		if (DEBUGLVL(0)) {
 			dbgtext("linux_release_kernel_oplock: Error when "
 				"removing kernel oplock on file " );
-			dbgtext("%s, file_id = %s, gen_id = %lu. "
+			dbgtext("%s, dev = %x, inode = %.0f, file_id = %lu. "
 				"Error was %s\n", fsp->fsp_name,
-				file_id_string_tos(&fsp->file_id),
-				fsp->fh->gen_id, strerror(errno) );
+				(unsigned int)fsp->dev, (double)fsp->inode,
+				fsp->fh->file_id, strerror(errno) );
 		}
 	}
 }
@@ -184,7 +219,7 @@
  See if a oplock message is waiting.
 ****************************************************************************/
 
-static bool linux_oplock_msg_waiting(fd_set *fds)
+static BOOL linux_oplock_msg_waiting(fd_set *fds)
 {
 	return signals_received != 0;
 }
@@ -193,7 +228,7 @@
  See if the kernel supports oplocks.
 ****************************************************************************/
 
-static bool linux_oplocks_available(void)
+static BOOL linux_oplocks_available(void)
 {
 	int fd, ret;
 	fd = open("/dev/null", O_RDONLY);

Modified: branches/samba/upstream/source/smbd/password.c
===================================================================
--- branches/samba/upstream/source/smbd/password.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/password.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,27 +1,28 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    Password and authentication handling
    Copyright (C) Andrew Tridgell 1992-1998
-   Copyright (C) Jeremy Allison 2007.
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
 /* users from session setup */
 static char *session_userlist = NULL;
+static int len_session_userlist = 0;
 /* workgroup from session setup. */
 static char *session_workgroup = NULL;
 
@@ -30,12 +31,13 @@
 static int next_vuid = VUID_OFFSET;
 static int num_validated_vuids;
 
-enum server_allocated_state { SERVER_ALLOCATED_REQUIRED_YES,
-				SERVER_ALLOCATED_REQUIRED_NO,
-				SERVER_ALLOCATED_REQUIRED_ANY};
+/****************************************************************************
+ Check if a uid has been validated, and return an pointer to the user_struct
+ if it has. NULL if not. vuid is biased by an offset. This allows us to
+ tell random client vuid's (normally zero) from valid vuids.
+****************************************************************************/
 
-static user_struct *get_valid_user_struct_internal(uint16 vuid,
-			enum server_allocated_state server_allocated)
+user_struct *get_valid_user_struct(uint16 vuid)
 {
 	user_struct *usp;
 	int count=0;
@@ -44,20 +46,7 @@
 		return NULL;
 
 	for (usp=validated_users;usp;usp=usp->next,count++) {
-		if (vuid == usp->vuid) {
-			switch (server_allocated) {
-				case SERVER_ALLOCATED_REQUIRED_YES:
-					if (usp->server_info == NULL) {
-						continue;
-					}
-					break;
-				case SERVER_ALLOCATED_REQUIRED_NO:
-					if (usp->server_info != NULL) {
-						continue;
-					}
-				case SERVER_ALLOCATED_REQUIRED_ANY:
-					break;
-			}
+		if (vuid == usp->vuid && usp->server_info) {
 			if (count > 10) {
 				DLIST_PROMOTE(validated_users, usp);
 			}
@@ -69,34 +58,27 @@
 }
 
 /****************************************************************************
- Check if a uid has been validated, and return an pointer to the user_struct
- if it has. NULL if not. vuid is biased by an offset. This allows us to
- tell random client vuid's (normally zero) from valid vuids.
+ Get the user struct of a partial NTLMSSP login
 ****************************************************************************/
 
-user_struct *get_valid_user_struct(uint16 vuid)
+user_struct *get_partial_auth_user_struct(uint16 vuid)
 {
-	return get_valid_user_struct_internal(vuid,
-			SERVER_ALLOCATED_REQUIRED_YES);
-}
+	user_struct *usp;
+	int count=0;
 
-bool is_partial_auth_vuid(uint16 vuid)
-{
-	if (vuid == UID_FIELD_INVALID) {
-		return False;
+	if (vuid == UID_FIELD_INVALID)
+		return NULL;
+
+	for (usp=validated_users;usp;usp=usp->next,count++) {
+		if (vuid == usp->vuid && !usp->server_info) {
+			if (count > 10) {
+				DLIST_PROMOTE(validated_users, usp);
+			}
+			return usp;
+		}
 	}
-	return get_valid_user_struct_internal(vuid,
-			SERVER_ALLOCATED_REQUIRED_NO) ? True : False;
-}
 
-/****************************************************************************
- Get the user struct of a partial NTLMSSP login
-****************************************************************************/
-
-user_struct *get_partial_auth_user_struct(uint16 vuid)
-{
-	return get_valid_user_struct_internal(vuid,
-			SERVER_ALLOCATED_REQUIRED_NO);
+	return NULL;
 }
 
 /****************************************************************************
@@ -105,36 +87,56 @@
 
 void invalidate_vuid(uint16 vuid)
 {
-	user_struct *vuser = NULL;
+	user_struct *vuser = get_valid_user_struct(vuid);
 
-	if (vuid == UID_FIELD_INVALID) {
+	if (vuser == NULL)
 		return;
-	}
 
-	vuser = get_valid_user_struct_internal(vuid,
-			SERVER_ALLOCATED_REQUIRED_ANY);
-	if (vuser == NULL) {
-		return;
+	SAFE_FREE(vuser->homedir);
+	SAFE_FREE(vuser->unix_homedir);
+	SAFE_FREE(vuser->logon_script);
+
+	if (vuser->auth_ntlmssp_state) {
+		auth_ntlmssp_end(&vuser->auth_ntlmssp_state);
 	}
 
 	session_yield(vuser);
+	SAFE_FREE(vuser->session_keystr);
 
+	TALLOC_FREE(vuser->server_info);
+
 	data_blob_free(&vuser->session_key);
 
-	if (vuser->auth_ntlmssp_state) {
-		auth_ntlmssp_end(&vuser->auth_ntlmssp_state);
-	}
-
 	DLIST_REMOVE(validated_users, vuser);
 
 	/* clear the vuid from the 'cache' on each connection, and
 	   from the vuid 'owner' of connections */
 	conn_clear_vuid_cache(vuid);
 
-	TALLOC_FREE(vuser);
+	SAFE_FREE(vuser->groups);
+	TALLOC_FREE(vuser->nt_user_token);
+
+	SAFE_FREE(vuser);
 	num_validated_vuids--;
 }
 
+void invalidate_intermediate_vuid(uint16 vuid)
+{
+	user_struct *vuser = get_partial_auth_user_struct(vuid);
+
+	if (vuser == NULL)
+		return;
+
+	if (vuser->auth_ntlmssp_state) {
+		auth_ntlmssp_end(&vuser->auth_ntlmssp_state);
+	}
+
+	DLIST_REMOVE(validated_users, vuser);
+
+	SAFE_FREE(vuser);
+	num_validated_vuids--;
+}
+
 /****************************************************************************
  Invalidate all vuid entries for this process.
 ****************************************************************************/
@@ -145,127 +147,117 @@
 
 	for (usp=validated_users;usp;usp=next) {
 		next = usp->next;
+		
 		invalidate_vuid(usp->vuid);
 	}
 }
 
-/****************************************************
- Create a new partial auth user struct.
-*****************************************************/
+/**
+ *  register that a valid login has been performed, establish 'session'.
+ *  @param server_info The token returned from the authentication process. 
+ *   (now 'owned' by register_vuid)
+ *
+ *  @param session_key The User session key for the login session (now also
+ *  'owned' by register_vuid)
+ *
+ *  @param respose_blob The NT challenge-response, if available.  (May be
+ *  freed after this call)
+ *
+ *  @param smb_name The untranslated name of the user
+ *
+ *  @return Newly allocated vuid, biased by an offset. (This allows us to
+ *   tell random client vuid's (normally zero) from valid vuids.)
+ *
+ */
 
-int register_initial_vuid(void)
+int register_vuid(auth_serversupplied_info *server_info,
+		  DATA_BLOB session_key, DATA_BLOB response_blob,
+		  const char *smb_name)
 {
-	user_struct *vuser;
+	user_struct *vuser = NULL;
 
 	/* Paranoia check. */
 	if(lp_security() == SEC_SHARE) {
-		smb_panic("register_initial_vuid: "
-			"Tried to register uid in security=share");
+		smb_panic("Tried to register uid in security=share\n");
 	}
 
 	/* Limit allowed vuids to 16bits - VUID_OFFSET. */
 	if (num_validated_vuids >= 0xFFFF-VUID_OFFSET) {
+		data_blob_free(&session_key);
+		TALLOC_FREE(server_info);
 		return UID_FIELD_INVALID;
 	}
 
-	if((vuser = talloc_zero(NULL, user_struct)) == NULL) {
-		DEBUG(0,("register_initial_vuid: "
-				"Failed to talloc users struct!\n"));
+	if((vuser = SMB_MALLOC_P(user_struct)) == NULL) {
+		DEBUG(0,("Failed to malloc users struct!\n"));
+		data_blob_free(&session_key);
+		TALLOC_FREE(server_info);
 		return UID_FIELD_INVALID;
 	}
 
-	/* Allocate a free vuid. Yes this is a linear search... */
-	while( get_valid_user_struct_internal(next_vuid,
-			SERVER_ALLOCATED_REQUIRED_ANY) != NULL ) {
+	ZERO_STRUCTP(vuser);
+
+	/* Allocate a free vuid. Yes this is a linear search... :-) */
+	while( (get_valid_user_struct(next_vuid) != NULL)
+	       || (get_partial_auth_user_struct(next_vuid) != NULL) ) {
 		next_vuid++;
 		/* Check for vuid wrap. */
-		if (next_vuid == UID_FIELD_INVALID) {
+		if (next_vuid == UID_FIELD_INVALID)
 			next_vuid = VUID_OFFSET;
-		}
 	}
 
-	DEBUG(10,("register_initial_vuid: allocated vuid = %u\n",
-		(unsigned int)next_vuid ));
+	DEBUG(10,("register_vuid: allocated vuid = %u\n",
+		  (unsigned int)next_vuid ));
 
 	vuser->vuid = next_vuid;
 
-	/*
-	 * This happens in an unfinished NTLMSSP session setup. We
-	 * need to allocate a vuid between the first and second calls
-	 * to NTLMSSP.
-	 */
-	next_vuid++;
-	num_validated_vuids++;
-
-	DLIST_ADD(validated_users, vuser);
-	return vuser->vuid;
-}
-
-/**
- *  register that a valid login has been performed, establish 'session'.
- *  @param server_info The token returned from the authentication process.
- *   (now 'owned' by register_existing_vuid)
- *
- *  @param session_key The User session key for the login session (now also
- *  'owned' by register_existing_vuid)
- *
- *  @param respose_blob The NT challenge-response, if available.  (May be
- *  freed after this call)
- *
- *  @param smb_name The untranslated name of the user
- *
- *  @return Newly allocated vuid, biased by an offset. (This allows us to
- *   tell random client vuid's (normally zero) from valid vuids.)
- *
- */
-
-int register_existing_vuid(uint16 vuid,
-			auth_serversupplied_info *server_info,
-			DATA_BLOB session_key,
-			DATA_BLOB response_blob,
-			const char *smb_name)
-{
-	user_struct *vuser = get_partial_auth_user_struct(vuid);
-	if (!vuser) {
-		goto fail;
+	if (!server_info) {
+		/*
+		 * This happens in an unfinished NTLMSSP session setup. We
+		 * need to allocate a vuid between the first and second calls
+		 * to NTLMSSP.
+		 */
+		next_vuid++;
+		num_validated_vuids++;
+		
+		vuser->server_info = NULL;
+		
+		DLIST_ADD(validated_users, vuser);
+		
+		return vuser->vuid;
 	}
 
-	/* Use this to keep tabs on all our info from the authentication */
-	vuser->server_info = server_info;
-
-	/* Ensure that the server_info will disappear with
-	 * the vuser it is now attached to */
-
-	talloc_steal(vuser, vuser->server_info);
-
 	/* the next functions should be done by a SID mapping system (SMS) as
 	 * the new real sam db won't have reference to unix uids or gids
 	 */
-
+	
 	vuser->uid = server_info->uid;
 	vuser->gid = server_info->gid;
-
+	
 	vuser->n_groups = server_info->n_groups;
 	if (vuser->n_groups) {
-		if (!(vuser->groups = (gid_t *)talloc_memdup(vuser,
-					server_info->groups,
-					sizeof(gid_t)*vuser->n_groups))) {
-			DEBUG(0,("register_existing_vuid: "
-				"failed to talloc_memdup vuser->groups\n"));
-			goto fail;
+		if (!(vuser->groups = (gid_t *)memdup(server_info->groups,
+						      sizeof(gid_t) *
+						      vuser->n_groups))) {
+			DEBUG(0,("register_vuid: failed to memdup "
+				 "vuser->groups\n"));
+			data_blob_free(&session_key);
+			free(vuser);
+			TALLOC_FREE(server_info);
+			return UID_FIELD_INVALID;
 		}
 	}
 
 	vuser->guest = server_info->guest;
-	fstrcpy(vuser->user.unix_name, server_info->unix_name);
+	fstrcpy(vuser->user.unix_name, server_info->unix_name); 
 
 	/* This is a potentially untrusted username */
 	alpha_strcpy(vuser->user.smb_name, smb_name, ". _-$",
-		sizeof(vuser->user.smb_name));
+		     sizeof(vuser->user.smb_name));
 
 	fstrcpy(vuser->user.domain, pdb_get_domain(server_info->sam_account));
 	fstrcpy(vuser->user.full_name,
-	pdb_get_fullname(server_info->sam_account));
+		pdb_get_fullname(server_info->sam_account));
 
 	{
 		/* Keep the homedir handy */
@@ -275,109 +267,118 @@
 			pdb_get_logon_script(server_info->sam_account);
 
 		if (!IS_SAM_DEFAULT(server_info->sam_account,
-					PDB_UNIXHOMEDIR)) {
+				    PDB_UNIXHOMEDIR)) {
 			const char *unix_homedir =
 				pdb_get_unix_homedir(server_info->sam_account);
 			if (unix_homedir) {
-				vuser->unix_homedir = unix_homedir;
+				vuser->unix_homedir =
+					smb_xstrdup(unix_homedir);
 			}
 		} else {
 			struct passwd *passwd =
-				getpwnam_alloc(vuser, vuser->user.unix_name);
+				getpwnam_alloc(NULL, vuser->user.unix_name);
 			if (passwd) {
-				vuser->unix_homedir = passwd->pw_dir;
-				/* Ensure that the unix_homedir now
-				 * belongs to vuser, so it goes away
-				 * with it, not with passwd below: */
-				talloc_steal(vuser, vuser->unix_homedir);
+				vuser->unix_homedir =
+					smb_xstrdup(passwd->pw_dir);
 				TALLOC_FREE(passwd);
 			}
 		}
-
+		
 		if (homedir) {
-			vuser->homedir = homedir;
+			vuser->homedir = smb_xstrdup(homedir);
 		}
 		if (logon_script) {
-			vuser->logon_script = logon_script;
+			vuser->logon_script = smb_xstrdup(logon_script);
 		}
 	}
+
 	vuser->session_key = session_key;
 
-	DEBUG(10,("register_existing_vuid: (%u,%u) %s %s %s guest=%d\n",
-			(unsigned int)vuser->uid,
-			(unsigned int)vuser->gid,
-			vuser->user.unix_name, vuser->user.smb_name,
-			vuser->user.domain, vuser->guest ));
+	DEBUG(10,("register_vuid: (%u,%u) %s %s %s guest=%d\n", 
+		  (unsigned int)vuser->uid, 
+		  (unsigned int)vuser->gid,
+		  vuser->user.unix_name, vuser->user.smb_name,
+		  vuser->user.domain, vuser->guest ));
 
-	DEBUG(3, ("register_existing_vuid: User name: %s\t"
-		"Real name: %s\n", vuser->user.unix_name,
-		vuser->user.full_name));
+	DEBUG(3, ("User name: %s\tReal name: %s\n", vuser->user.unix_name,
+		  vuser->user.full_name));	
 
-	if (server_info->ptok) {
-		vuser->nt_user_token = dup_nt_token(vuser, server_info->ptok);
+ 	if (server_info->ptok) {
+		vuser->nt_user_token = dup_nt_token(NULL, server_info->ptok);
 	} else {
-		DEBUG(1, ("register_existing_vuid: server_info does not "
-			"contain a user_token - cannot continue\n"));
-		goto fail;
+		DEBUG(1, ("server_info does not contain a user_token - "
+			  "cannot continue\n"));
+		TALLOC_FREE(server_info);
+		data_blob_free(&session_key);
+		SAFE_FREE(vuser->homedir);
+		SAFE_FREE(vuser->unix_homedir);
+		SAFE_FREE(vuser->logon_script);
+
+		SAFE_FREE(vuser);
+		return UID_FIELD_INVALID;
 	}
 
-	DEBUG(3,("register_existing_vuid: UNIX uid %d is UNIX user %s, "
-		"and will be vuid %u\n",
-		(int)vuser->uid,vuser->user.unix_name, vuser->vuid));
+	/* use this to keep tabs on all our info from the authentication */
+	vuser->server_info = server_info;
 
+	DEBUG(3,("UNIX uid %d is UNIX user %s, and will be vuid %u\n",
+		 (int)vuser->uid,vuser->user.unix_name, vuser->vuid));
+
 	next_vuid++;
 	num_validated_vuids++;
 
+	DLIST_ADD(validated_users, vuser);
+
 	if (!session_claim(vuser)) {
-		DEBUG(1, ("register_existing_vuid: Failed to claim session "
-			"for vuid=%d\n",
-			vuser->vuid));
-		goto fail;
+		DEBUG(1, ("Failed to claim session for vuid=%d\n",
+			  vuser->vuid));
+		invalidate_vuid(vuser->vuid);
+		return UID_FIELD_INVALID;
 	}
 
-	/* Register a home dir service for this user if
-	(a) This is not a guest connection,
-	(b) we have a home directory defined
-	(c) there s not an existing static share by that name
-	If a share exists by this name (autoloaded or not) reuse it . */
+	/* Register a home dir service for this user iff
+	
+	   (a) This is not a guest connection,
+	   (b) we have a home directory defined 
+	   (c) there s not an existing static share by that name
+	   
+	   If a share exists by this name (autoloaded or not) reuse it . */
 
 	vuser->homes_snum = -1;
-	if ( (!vuser->guest) && vuser->unix_homedir && *(vuser->unix_homedir)) {
+
+	if ( (!vuser->guest) && vuser->unix_homedir && *(vuser->unix_homedir)) 
+	{
 		int servicenumber = lp_servicenumber(vuser->user.unix_name);
+
 		if ( servicenumber == -1 ) {
 			DEBUG(3, ("Adding homes service for user '%s' using "
-				"home directory: '%s'\n",
+				  "home directory: '%s'\n", 
 				vuser->user.unix_name, vuser->unix_homedir));
 			vuser->homes_snum =
-				add_home_service(vuser->user.unix_name,
-						vuser->user.unix_name,
-						vuser->unix_homedir);
+				add_home_service(vuser->user.unix_name, 
+						 vuser->user.unix_name,
+						 vuser->unix_homedir);
 		} else {
 			DEBUG(3, ("Using static (or previously created) "
-				"service for user '%s'; path = '%s'\n",
-				vuser->user.unix_name,
-				lp_pathname(servicenumber) ));
+				  "service for user '%s'; path = '%s'\n", 
+				  vuser->user.unix_name,
+				  lp_pathname(servicenumber) ));
 			vuser->homes_snum = servicenumber;
 		}
-	}
-
+	} 
+	
 	if (srv_is_signing_negotiated() && !vuser->guest &&
-			!srv_signing_started()) {
+	    !srv_signing_started()) {
 		/* Try and turn on server signing on the first non-guest
 		 * sessionsetup. */
 		srv_set_signing(vuser->session_key, response_blob);
 	}
-
+	
 	/* fill in the current_user_info struct */
 	set_current_user_info( &vuser->user );
-	return vuser->vuid;
 
-  fail:
 
-	if (vuser) {
-		invalidate_vuid(vuid);
-	}
-	return UID_FIELD_INVALID;
+	return vuser->vuid;
 }
 
 /****************************************************************************
@@ -386,39 +387,46 @@
 
 void add_session_user(const char *user)
 {
-	struct passwd *pw;
-	char *tmp;
+	fstring suser;
+	struct passwd *passwd;
 
-	pw = Get_Pwnam_alloc(talloc_tos(), user);
+	if (!(passwd = Get_Pwnam(user)))
+		return;
 
-	if (pw == NULL) {
+	fstrcpy(suser,passwd->pw_name);
+
+	if(!*suser)
 		return;
-	}
 
-	if (session_userlist == NULL) {
-		session_userlist = SMB_STRDUP(pw->pw_name);
-		goto done;
-	}
+	if( session_userlist && in_list(suser,session_userlist,False) )
+		return;
 
-	if (in_list(pw->pw_name,session_userlist,False) ) {
-		goto done;
-	}
+	if( !session_userlist ||
+	    (strlen(suser) + strlen(session_userlist) + 2 >=
+	     len_session_userlist) ) {
+		char *newlist;
 
-	if (strlen(session_userlist) > 128 * 1024) {
-		DEBUG(3,("add_session_user: session userlist already "
-			 "too large.\n"));
-		goto done;
+		if (len_session_userlist > 128 * PSTRING_LEN) {
+			DEBUG(3,("add_session_user: session userlist already "
+				 "too large.\n"));
+			return;
+		}
+		newlist = (char *)SMB_REALLOC_KEEP_OLD_ON_ERROR(
+			session_userlist,
+			len_session_userlist + PSTRING_LEN );
+		if( newlist == NULL ) {
+			DEBUG(1,("Unable to resize session_userlist\n"));
+			return;
+		}
+		if (!session_userlist) {
+			*newlist = '\0';
+		}
+		session_userlist = newlist;
+		len_session_userlist += PSTRING_LEN;
 	}
 
-	if (asprintf(&tmp, "%s %s", session_userlist, pw->pw_name) == -1) {
-		DEBUG(3, ("asprintf failed\n"));
-		goto done;
-	}
-
-	SAFE_FREE(session_userlist);
-	session_userlist = tmp;
- done:
-	TALLOC_FREE(pw);
+	safe_strcat(session_userlist," ",len_session_userlist-1);
+	safe_strcat(session_userlist,suser,len_session_userlist-1);
 }
 
 /****************************************************************************
@@ -449,7 +457,7 @@
  try lower case.
 ****************************************************************************/
 
-bool user_in_netgroup(const char *user, const char *ngname)
+BOOL user_in_netgroup(const char *user, const char *ngname)
 {
 #ifdef HAVE_NETGROUP
 	static char *mydomain = NULL;
@@ -459,8 +467,7 @@
 		yp_get_default_domain(&mydomain);
 
 	if(mydomain == NULL) {
-		DEBUG(5,("Unable to get default yp domain, "
-			"let's try without specifying it\n"));
+		DEBUG(5,("Unable to get default yp domain, let's try without specifying it\n"));
 	}
 
 	DEBUG(5,("looking for user %s of domain %s in netgroup %s\n",
@@ -478,7 +485,7 @@
 
 		fstrcpy(lowercase_user, user);
 		strlower_m(lowercase_user);
-
+	
 		DEBUG(5,("looking for user %s of domain %s in netgroup %s\n",
 			lowercase_user, mydomain?mydomain:"(ANY)", ngname));
 
@@ -496,7 +503,7 @@
  and netgroup lists.
 ****************************************************************************/
 
-bool user_in_list(const char *user,const char **list)
+BOOL user_in_list(const char *user,const char **list)
 {
 	if (!list || !*list)
 		return False;
@@ -567,7 +574,7 @@
 					return True;
 			}
 		}
-
+    
 		list++;
 	}
 	return(False);
@@ -577,16 +584,16 @@
  Check if a username is valid.
 ****************************************************************************/
 
-static bool user_ok(const char *user, int snum)
+static BOOL user_ok(const char *user, int snum)
 {
 	char **valid, **invalid;
-	bool ret;
+	BOOL ret;
 
 	valid = invalid = NULL;
 	ret = True;
 
 	if (lp_invalid_users(snum)) {
-		str_list_copy(talloc_tos(), &invalid, lp_invalid_users(snum));
+		str_list_copy(&invalid, lp_invalid_users(snum));
 		if (invalid &&
 		    str_list_substitute(invalid, "%S", lp_servicename(snum))) {
 
@@ -599,10 +606,11 @@
 			}
 		}
 	}
-	TALLOC_FREE(invalid);
+	if (invalid)
+		str_list_free (&invalid);
 
 	if (ret && lp_valid_users(snum)) {
-		str_list_copy(talloc_tos(), &valid, lp_valid_users(snum));
+		str_list_copy(&valid, lp_valid_users(snum));
 		if ( valid &&
 		     str_list_substitute(valid, "%S", lp_servicename(snum)) ) {
 
@@ -614,17 +622,17 @@
 			}
 		}
 	}
-	TALLOC_FREE(valid);
+	if (valid)
+		str_list_free (&valid);
 
 	if (ret && lp_onlyuser(snum)) {
-		char **user_list = str_list_make(
-			talloc_tos(), lp_username(snum), NULL);
+		char **user_list = str_list_make (lp_username(snum), NULL);
 		if (user_list &&
 		    str_list_substitute(user_list, "%S",
 					lp_servicename(snum))) {
 			ret = user_in_list(user, (const char **)user_list);
 		}
-		TALLOC_FREE(user_list);
+		if (user_list) str_list_free (&user_list);
 	}
 
 	return(ret);
@@ -652,7 +660,7 @@
 		endnetgrent();
 	}
 #endif
-
+  
 #ifdef HAVE_GETGRENT
 	{
 		struct group *gptr;
@@ -664,51 +672,46 @@
 
 		/*
 		 * As user_ok can recurse doing a getgrent(), we must
-		 * copy the member list onto the heap before
+		 * copy the member list into a pstring on the stack before
 		 * use. Bug pointed out by leon at eatworms.swmed.edu.
 		 */
 
 		if (gptr) {
-			char *member_list = NULL;
-			size_t list_len = 0;
+			pstring member_list;
 			char *member;
+			size_t copied_len = 0;
 			int i;
 
-			for(i = 0; gptr->gr_mem && gptr->gr_mem[i]; i++) {
-				list_len += strlen(gptr->gr_mem[i])+1;
-			}
-			list_len++;
-
-			member_list = (char *)SMB_MALLOC(list_len);
-			if (!member_list) {
-				endgrent();
-				return NULL;
-			}
-
 			*member_list = '\0';
 			member = member_list;
 
 			for(i = 0; gptr->gr_mem && gptr->gr_mem[i]; i++) {
 				size_t member_len = strlen(gptr->gr_mem[i])+1;
+				if(copied_len+member_len < sizeof(pstring)) { 
 
-				DEBUG(10,("validate_group: = gr_mem = "
-					  "%s\n", gptr->gr_mem[i]));
+					DEBUG(10,("validate_group: = gr_mem = "
+						  "%s\n", gptr->gr_mem[i]));
 
-				safe_strcpy(member, gptr->gr_mem[i],
-					list_len - (member-member_list));
-				member += member_len;
+					safe_strcpy(member, gptr->gr_mem[i],
+						    sizeof(pstring) -
+						    copied_len - 1);
+					copied_len += member_len;
+					member += copied_len;
+				} else {
+					*member = '\0';
+				}
 			}
 
 			endgrent();
 
 			member = member_list;
 			while (*member) {
-				if (user_ok(member,snum) &&
-				    password_ok(member,password)) {
-					char *name = talloc_strdup(talloc_tos(),
-								member);
-					SAFE_FREE(member_list);
-					return name;
+				static fstring name;
+				fstrcpy(name,member);
+				if (user_ok(name,snum) &&
+				    password_ok(name,password)) {
+					endgrent();
+					return(&name[0]);
 				}
 
 				DEBUG(10,("validate_group = member = %s\n",
@@ -716,8 +719,6 @@
 
 				member += strlen(member) + 1;
 			}
-
-			SAFE_FREE(member_list);
 		} else {
 			endgrent();
 			return NULL;
@@ -732,26 +733,26 @@
  Note this is *NOT* used when logging on using sessionsetup_and_X.
 ****************************************************************************/
 
-bool authorise_login(int snum, fstring user, DATA_BLOB password,
-		     bool *guest)
+BOOL authorise_login(int snum, fstring user, DATA_BLOB password, 
+		     BOOL *guest)
 {
-	bool ok = False;
-
+	BOOL ok = False;
+	
 #ifdef DEBUG_PASSWORD
 	DEBUG(100,("authorise_login: checking authorisation on "
 		   "user=%s pass=%s\n", user,password.data));
 #endif
 
 	*guest = False;
-
+  
 	/* there are several possibilities:
 		1) login as the given user with given password
-		2) login as a previously registered username with the given
+		2) login as a previously registered username with the given 
 		   password
 		3) login as a session list username with the given password
 		4) login as a previously validated user/password pair
 		5) login as the "user =" user with given password
-		6) login as the "user =" user with no password
+		6) login as the "user =" user with no password 
 		   (guest connection)
 		7) login as guest user with no password
 
@@ -762,7 +763,6 @@
 	if (!ok) {
 		char *auser;
 		char *user_list = NULL;
-		char *saveptr;
 
 		if ( session_userlist )
 			user_list = SMB_STRDUP(session_userlist);
@@ -771,15 +771,14 @@
 
 		if (!user_list)
 			return(False);
-
-		for (auser = strtok_r(user_list, LIST_SEP, &saveptr);
-		     !ok && auser;
-		     auser = strtok_r(NULL, LIST_SEP, &saveptr)) {
+		
+		for (auser=strtok(user_list,LIST_SEP); !ok && auser;
+		     auser = strtok(NULL,LIST_SEP)) {
 			fstring user2;
 			fstrcpy(user2,auser);
 			if (!user_ok(user2,snum))
 				continue;
-
+			
 			if (password_ok(user2,password)) {
 				ok = True;
 				fstrcpy(user,user2);
@@ -791,30 +790,17 @@
 
 		SAFE_FREE(user_list);
 	}
-
+	
 	/* check the user= fields and the given password */
 	if (!ok && lp_username(snum)) {
-		TALLOC_CTX *ctx = talloc_tos();
 		char *auser;
-		char *user_list = talloc_strdup(ctx, lp_username(snum));
-		char *saveptr;
-
-		if (!user_list) {
-			goto check_guest;
-		}
-
-		user_list = talloc_string_sub(ctx,
-				user_list,
-				"%S",
-				lp_servicename(snum));
-
-		if (!user_list) {
-			goto check_guest;
-		}
-
-		for (auser = strtok_r(user_list, LIST_SEP, &saveptr);
-		     auser && !ok;
-		     auser = strtok_r(NULL, LIST_SEP, &saveptr)) {
+		pstring user_list;
+		pstrcpy(user_list,lp_username(snum));
+		
+		pstring_sub(user_list,"%S",lp_servicename(snum));
+		
+		for (auser=strtok(user_list,LIST_SEP); auser && !ok;
+		     auser = strtok(NULL,LIST_SEP)) {
 			if (*auser == '@') {
 				auser = validate_group(auser+1,password,snum);
 				if (auser) {
@@ -840,15 +826,11 @@
 		}
 	}
 
-  check_guest:
-
 	/* check for a normal guest connection */
 	if (!ok && GUEST_OK(snum)) {
-		struct passwd *guest_pw;
 		fstring guestname;
 		fstrcpy(guestname,lp_guestaccount());
-		guest_pw = Get_Pwnam_alloc(talloc_tos(), guestname);
-		if (guest_pw != NULL) {
+		if (Get_Pwnam(guestname)) {
 			fstrcpy(user,guestname);
 			ok = True;
 			DEBUG(3,("authorise_login: ACCEPTED: guest account "
@@ -857,7 +839,6 @@
 			DEBUG(0,("authorise_login: Invalid guest account "
 				 "%s??\n",guestname));
 		}
-		TALLOC_FREE(guest_pw);
 		*guest = True;
 	}
 

Modified: branches/samba/upstream/source/smbd/pipes.c
===================================================================
--- branches/samba/upstream/source/smbd/pipes.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/pipes.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 /*
    This file handles reply_ calls on named pipes that the server
@@ -36,7 +37,7 @@
 #define PIPEDB_KEY_FORMAT "PIPE/%s/%u/%d"
 
 struct pipe_dbrec {
-	struct server_id pid;
+	struct process_id pid;
 	int pnum;
 	uid_t uid;
 
@@ -53,30 +54,24 @@
  wrinkles to handle pipes.
 ****************************************************************************/
 
-void reply_open_pipe_and_X(connection_struct *conn, struct smb_request *req)
+int reply_open_pipe_and_X(connection_struct *conn,
+			  char *inbuf,char *outbuf,int length,int bufsize)
 {
-	const char *fname = NULL;
-	char *pipe_name = NULL;
+	pstring fname;
+	pstring pipe_name;
+	uint16 vuid = SVAL(inbuf, smb_uid);
 	smb_np_struct *p;
 	int size=0,fmode=0,mtime=0,rmode=0;
 	int i;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	/* XXXX we need to handle passed times, sattr and flags */
-	srvstr_pull_buf_talloc(ctx, req->inbuf, req->flags2, &pipe_name,
-			smb_buf(req->inbuf), STR_TERMINATE);
-	if (!pipe_name) {
-		reply_botherror(req, NT_STATUS_OBJECT_NAME_NOT_FOUND,
-				ERRDOS, ERRbadpipe);
-		return;
-	}
+	srvstr_pull_buf(inbuf, pipe_name, smb_buf(inbuf), sizeof(pipe_name), STR_TERMINATE);
 
 	/* If the name doesn't start \PIPE\ then this is directed */
 	/* at a mailslot or something we really, really don't understand, */
 	/* not just something we really don't understand. */
 	if ( strncmp(pipe_name,PIPE,PIPELEN) != 0 ) {
-		reply_doserror(req, ERRSRV, ERRaccess);
-		return;
+		return(ERROR_DOS(ERRSRV,ERRaccess));
 	}
 
 	DEBUG(4,("Opening pipe %s.\n", pipe_name));
@@ -89,79 +84,73 @@
 	}
 
 	if (pipe_names[i].client_pipe == NULL) {
-		reply_botherror(req, NT_STATUS_OBJECT_NAME_NOT_FOUND,
-				ERRDOS, ERRbadpipe);
-		return;
+		return(ERROR_BOTH(NT_STATUS_OBJECT_NAME_NOT_FOUND,ERRDOS,ERRbadpipe));
 	}
 
 	/* Strip \PIPE\ off the name. */
-	fname = pipe_name + PIPELEN;
+	pstrcpy(fname, pipe_name + PIPELEN);
 
 #if 0
 	/*
 	 * Hack for NT printers... JRA.
 	 */
-	if(should_fail_next_srvsvc_open(fname)) {
-		reply_doserror(req, ERRSRV, ERRaccess);
-		return;
-	}
+    if(should_fail_next_srvsvc_open(fname))
+      return(ERROR(ERRSRV,ERRaccess));
 #endif
 
 	/* Known pipes arrive with DIR attribs. Remove it so a regular file */
 	/* can be opened and add it in after the open. */
 	DEBUG(3,("Known pipe %s opening.\n",fname));
 
-	p = open_rpc_pipe_p(fname, conn, req->vuid);
+	p = open_rpc_pipe_p(fname, conn, vuid);
 	if (!p) {
-		reply_doserror(req, ERRSRV, ERRnofids);
-		return;
+		return(ERROR_DOS(ERRSRV,ERRnofids));
 	}
 
 	/* Prepare the reply */
-	reply_outbuf(req, 15, 0);
+	set_message(outbuf,15,0,True);
 
 	/* Mark the opened file as an existing named pipe in message mode. */
-	SSVAL(req->outbuf,smb_vwv9,2);
-	SSVAL(req->outbuf,smb_vwv10,0xc700);
+	SSVAL(outbuf,smb_vwv9,2);
+	SSVAL(outbuf,smb_vwv10,0xc700);
 
 	if (rmode == 2) {
 		DEBUG(4,("Resetting open result to open from create.\n"));
 		rmode = 1;
 	}
 
-	SSVAL(req->outbuf,smb_vwv2, p->pnum);
-	SSVAL(req->outbuf,smb_vwv3,fmode);
-	srv_put_dos_date3((char *)req->outbuf,smb_vwv4,mtime);
-	SIVAL(req->outbuf,smb_vwv6,size);
-	SSVAL(req->outbuf,smb_vwv8,rmode);
-	SSVAL(req->outbuf,smb_vwv11,0x0001);
+	SSVAL(outbuf,smb_vwv2, p->pnum);
+	SSVAL(outbuf,smb_vwv3,fmode);
+	srv_put_dos_date3(outbuf,smb_vwv4,mtime);
+	SIVAL(outbuf,smb_vwv6,size);
+	SSVAL(outbuf,smb_vwv8,rmode);
+	SSVAL(outbuf,smb_vwv11,0x0001);
 
-	chain_reply(req);
-	return;
+	return chain_reply(inbuf,outbuf,length,bufsize);
 }
 
 /****************************************************************************
  Reply to a write on a pipe.
 ****************************************************************************/
 
-void reply_pipe_write(struct smb_request *req)
+int reply_pipe_write(char *inbuf,char *outbuf,int length,int dum_bufsize)
 {
-	smb_np_struct *p = get_rpc_pipe_p(SVAL(req->inbuf,smb_vwv0));
-	size_t numtowrite = SVAL(req->inbuf,smb_vwv1);
+	smb_np_struct *p = get_rpc_pipe_p(inbuf,smb_vwv0);
+	uint16 vuid = SVAL(inbuf,smb_uid);
+	size_t numtowrite = SVAL(inbuf,smb_vwv1);
 	int nwritten;
+	int outsize;
 	char *data;
 
 	if (!p) {
-		reply_doserror(req, ERRDOS, ERRbadfid);
-		return;
+		return(ERROR_DOS(ERRDOS,ERRbadfid));
 	}
 
-	if (p->vuid != req->vuid) {
-		reply_nterror(req, NT_STATUS_INVALID_HANDLE);
-		return;
+	if (p->vuid != vuid) {
+		return ERROR_NT(NT_STATUS_INVALID_HANDLE);
 	}
 
-	data = smb_buf(req->inbuf) + 3;
+	data = smb_buf(inbuf) + 3;
 
 	if (numtowrite == 0) {
 		nwritten = 0;
@@ -170,17 +159,16 @@
 	}
 
 	if ((nwritten == 0 && numtowrite != 0) || (nwritten < 0)) {
-		reply_unixerror(req, ERRDOS, ERRnoaccess);
-		return;
+		return (UNIXERROR(ERRDOS,ERRnoaccess));
 	}
+  
+	outsize = set_message(outbuf,1,0,True);
 
-	reply_outbuf(req, 1, 0);
-
-	SSVAL(req->outbuf,smb_vwv0,nwritten);
+	SSVAL(outbuf,smb_vwv0,nwritten);
   
 	DEBUG(3,("write-IPC pnum=%04x nwritten=%d\n", p->pnum, nwritten));
 
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
@@ -190,29 +178,26 @@
  wrinkles to handle pipes.
 ****************************************************************************/
 
-void reply_pipe_write_and_X(struct smb_request *req)
+int reply_pipe_write_and_X(char *inbuf,char *outbuf,int length,int bufsize)
 {
-	smb_np_struct *p = get_rpc_pipe_p(SVAL(req->inbuf,smb_vwv2));
-	size_t numtowrite = SVAL(req->inbuf,smb_vwv10);
+	smb_np_struct *p = get_rpc_pipe_p(inbuf,smb_vwv2);
+	uint16 vuid = SVAL(inbuf,smb_uid);
+	size_t numtowrite = SVAL(inbuf,smb_vwv10);
 	int nwritten = -1;
-	int smb_doff = SVAL(req->inbuf, smb_vwv11);
-	bool pipe_start_message_raw =
-		((SVAL(req->inbuf, smb_vwv7)
-		  & (PIPE_START_MESSAGE|PIPE_RAW_MODE))
-		 == (PIPE_START_MESSAGE|PIPE_RAW_MODE));
+	int smb_doff = SVAL(inbuf, smb_vwv11);
+	BOOL pipe_start_message_raw = ((SVAL(inbuf, smb_vwv7) & (PIPE_START_MESSAGE|PIPE_RAW_MODE)) ==
+								(PIPE_START_MESSAGE|PIPE_RAW_MODE));
 	char *data;
 
 	if (!p) {
-		reply_doserror(req, ERRDOS, ERRbadfid);
-		return;
+		return(ERROR_DOS(ERRDOS,ERRbadfid));
 	}
 
-	if (p->vuid != req->vuid) {
-		reply_nterror(req, NT_STATUS_INVALID_HANDLE);
-		return;
+	if (p->vuid != vuid) {
+		return ERROR_NT(NT_STATUS_INVALID_HANDLE);
 	}
 
-	data = smb_base(req->inbuf) + smb_doff;
+	data = smb_base(inbuf) + smb_doff;
 
 	if (numtowrite == 0) {
 		nwritten = 0;
@@ -224,12 +209,9 @@
 			 * them (we don't trust the client). JRA.
 			 */
 	 	       if(numtowrite < 2) {
-				DEBUG(0,("reply_pipe_write_and_X: start of "
-					 "message set and not enough data "
-					 "sent.(%u)\n",
-					 (unsigned int)numtowrite ));
-				reply_unixerror(req, ERRDOS, ERRnoaccess);
-				return;
+				DEBUG(0,("reply_pipe_write_and_X: start of message set and not enough data sent.(%u)\n",
+					(unsigned int)numtowrite ));
+				return (UNIXERROR(ERRDOS,ERRnoaccess));
 			}
 
 			data += 2;
@@ -239,18 +221,17 @@
 	}
 
 	if ((nwritten == 0 && numtowrite != 0) || (nwritten < 0)) {
-		reply_unixerror(req, ERRDOS,ERRnoaccess);
-		return;
+		return (UNIXERROR(ERRDOS,ERRnoaccess));
 	}
+  
+	set_message(outbuf,6,0,True);
 
-	reply_outbuf(req, 6, 0);
-
 	nwritten = (pipe_start_message_raw ? nwritten + 2 : nwritten);
-	SSVAL(req->outbuf,smb_vwv2,nwritten);
+	SSVAL(outbuf,smb_vwv2,nwritten);
   
 	DEBUG(3,("writeX-IPC pnum=%04x nwritten=%d\n", p->pnum, nwritten));
 
-	chain_reply(req);
+	return chain_reply(inbuf,outbuf,length,bufsize);
 }
 
 /****************************************************************************
@@ -259,72 +240,65 @@
  wrinkles to handle pipes.
 ****************************************************************************/
 
-void reply_pipe_read_and_X(struct smb_request *req)
+int reply_pipe_read_and_X(char *inbuf,char *outbuf,int length,int bufsize)
 {
-	smb_np_struct *p = get_rpc_pipe_p(SVAL(req->inbuf,smb_vwv2));
-	int smb_maxcnt = SVAL(req->inbuf,smb_vwv5);
-	int smb_mincnt = SVAL(req->inbuf,smb_vwv6);
+	smb_np_struct *p = get_rpc_pipe_p(inbuf,smb_vwv2);
+	int smb_maxcnt = SVAL(inbuf,smb_vwv5);
+	int smb_mincnt = SVAL(inbuf,smb_vwv6);
 	int nread = -1;
 	char *data;
-	bool unused;
+	BOOL unused;
 
 	/* we don't use the offset given to use for pipe reads. This
            is deliberate, instead we always return the next lump of
            data on the pipe */
 #if 0
-	uint32 smb_offs = IVAL(req->inbuf,smb_vwv3);
+	uint32 smb_offs = IVAL(inbuf,smb_vwv3);
 #endif
 
 	if (!p) {
-		reply_doserror(req, ERRDOS, ERRbadfid);
-		return;
+		return(ERROR_DOS(ERRDOS,ERRbadfid));
 	}
 
-	reply_outbuf(req, 12, smb_maxcnt);
+	set_message(outbuf,12,0,True);
+	data = smb_buf(outbuf);
 
-	data = smb_buf(req->outbuf);
-
 	nread = read_from_pipe(p, data, smb_maxcnt, &unused);
 
 	if (nread < 0) {
-		reply_doserror(req, ERRDOS, ERRnoaccess);
-		return;
+		return(UNIXERROR(ERRDOS,ERRnoaccess));
 	}
-
-	srv_set_message((char *)req->outbuf, 12, nread, False);
   
-	SSVAL(req->outbuf,smb_vwv5,nread);
-	SSVAL(req->outbuf,smb_vwv6,smb_offset(data,req->outbuf));
-	SSVAL(smb_buf(req->outbuf),-2,nread);
+	SSVAL(outbuf,smb_vwv5,nread);
+	SSVAL(outbuf,smb_vwv6,smb_offset(data,outbuf));
+	SSVAL(smb_buf(outbuf),-2,nread);
   
 	DEBUG(3,("readX-IPC pnum=%04x min=%d max=%d nread=%d\n",
 		 p->pnum, smb_mincnt, smb_maxcnt, nread));
 
-	chain_reply(req);
+	/* Ensure we set up the message length to include the data length read. */
+	set_message_bcc(outbuf,nread);
+	return chain_reply(inbuf,outbuf,length,bufsize);
 }
 
 /****************************************************************************
  Reply to a close.
 ****************************************************************************/
 
-void reply_pipe_close(connection_struct *conn, struct smb_request *req)
+int reply_pipe_close(connection_struct *conn, char *inbuf,char *outbuf)
 {
-	smb_np_struct *p = get_rpc_pipe_p(SVAL(req->inbuf,smb_vwv0));
+	smb_np_struct *p = get_rpc_pipe_p(inbuf,smb_vwv0);
+	int outsize = set_message(outbuf,0,0,True);
 
 	if (!p) {
-		reply_doserror(req, ERRDOS, ERRbadfid);
-		return;
+		return(ERROR_DOS(ERRDOS,ERRbadfid));
 	}
 
 	DEBUG(5,("reply_pipe_close: pnum:%x\n", p->pnum));
 
 	if (!close_rpc_pipe_hnd(p)) {
-		reply_doserror(req, ERRDOS, ERRbadfid);
-		return;
+		return ERROR_DOS(ERRDOS,ERRbadfid);
 	}
 	
-	/* TODO: REMOVE PIPE FROM DB */
-
-	reply_outbuf(req, 0, 0);
-	return;
+	return(outsize);
 }

Modified: branches/samba/upstream/source/smbd/posix_acls.c
===================================================================
--- branches/samba/upstream/source/smbd/posix_acls.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/posix_acls.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -15,13 +15,14 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
 extern struct current_user current_user;
-extern const struct generic_mapping file_generic_mapping;
+extern struct generic_mapping file_generic_mapping;
 
 #undef  DBGC_CLASS
 #define DBGC_CLASS DBGC_ACLS
@@ -47,7 +48,7 @@
 	enum ace_owner owner_type;
 	enum ace_attribute attr;
 	posix_id unix_ug;
-	bool inherited;
+	BOOL inherited;
 } canon_ace;
 
 #define ALL_ACE_PERMS (S_IRUSR|S_IWUSR|S_IXUSR)
@@ -79,11 +80,11 @@
 struct pai_entry {
 	struct pai_entry *next, *prev;
 	enum ace_owner owner_type;
-	posix_id unix_ug;
+	posix_id unix_ug; 
 };
-
+	
 struct pai_val {
-	bool pai_protected;
+	BOOL pai_protected;
 	unsigned int num_entries;
 	struct pai_entry *entry_list;
 	unsigned int num_def_entries;
@@ -148,7 +149,7 @@
  Create the on-disk format. Caller must free.
 ************************************************************************/
 
-static char *create_pai_buf(canon_ace *file_ace_list, canon_ace *dir_ace_list, bool pai_protected, size_t *store_size)
+static char *create_pai_buf(canon_ace *file_ace_list, canon_ace *dir_ace_list, BOOL pai_protected, size_t *store_size)
 {
 	char *pai_buf = NULL;
 	canon_ace *ace_list = NULL;
@@ -212,7 +213,7 @@
 ************************************************************************/
 
 static void store_inheritance_attributes(files_struct *fsp, canon_ace *file_ace_list,
-					canon_ace *dir_ace_list, bool pai_protected)
+					canon_ace *dir_ace_list, BOOL pai_protected)
 {
 	int ret;
 	size_t store_size;
@@ -229,7 +230,7 @@
 	if (!pai_protected && num_inherited_entries(file_ace_list) == 0 && num_inherited_entries(dir_ace_list) == 0) {
 		/* Instead just remove the attribute if it exists. */
 		if (fsp->fh->fd != -1)
-			SMB_VFS_FREMOVEXATTR(fsp, SAMBA_POSIX_INHERITANCE_EA_NAME);
+			SMB_VFS_FREMOVEXATTR(fsp, fsp->fh->fd, SAMBA_POSIX_INHERITANCE_EA_NAME);
 		else
 			SMB_VFS_REMOVEXATTR(fsp->conn, fsp->fsp_name, SAMBA_POSIX_INHERITANCE_EA_NAME);
 		return;
@@ -238,7 +239,7 @@
 	pai_buf = create_pai_buf(file_ace_list, dir_ace_list, pai_protected, &store_size);
 
 	if (fsp->fh->fd != -1)
-		ret = SMB_VFS_FSETXATTR(fsp, SAMBA_POSIX_INHERITANCE_EA_NAME,
+		ret = SMB_VFS_FSETXATTR(fsp, fsp->fh->fd, SAMBA_POSIX_INHERITANCE_EA_NAME,
 				pai_buf, store_size, 0);
 	else
 		ret = SMB_VFS_SETXATTR(fsp->conn,fsp->fsp_name, SAMBA_POSIX_INHERITANCE_EA_NAME,
@@ -275,7 +276,7 @@
  Was this ACL protected ?
 ************************************************************************/
 
-static bool get_protected_flag(struct pai_val *pal)
+static BOOL get_protected_flag(struct pai_val *pal)
 {
 	if (!pal)
 		return False;
@@ -286,7 +287,7 @@
  Was this ACE inherited ?
 ************************************************************************/
 
-static bool get_inherited_flag(struct pai_val *pal, canon_ace *ace_entry, bool default_ace)
+static BOOL get_inherited_flag(struct pai_val *pal, canon_ace *ace_entry, BOOL default_ace)
 {
 	struct pai_entry *paie;
 
@@ -306,7 +307,7 @@
  Ensure an attribute just read is valid.
 ************************************************************************/
 
-static bool check_pai_ok(char *pai_buf, size_t pai_buf_data_size)
+static BOOL check_pai_ok(char *pai_buf, size_t pai_buf_data_size)
 {
 	uint16 num_entries;
 	uint16 num_def_entries;
@@ -430,7 +431,7 @@
  Load the user.SAMBA_PAI attribute.
 ************************************************************************/
 
-static struct pai_val *fload_inherited_info(files_struct *fsp)
+static struct pai_val *load_inherited_info(files_struct *fsp)
 {
 	char *pai_buf;
 	size_t pai_buf_size = 1024;
@@ -445,7 +446,7 @@
 
 	do {
 		if (fsp->fh->fd != -1)
-			ret = SMB_VFS_FGETXATTR(fsp, SAMBA_POSIX_INHERITANCE_EA_NAME,
+			ret = SMB_VFS_FGETXATTR(fsp, fsp->fh->fd, SAMBA_POSIX_INHERITANCE_EA_NAME,
 					pai_buf, pai_buf_size);
 		else
 			ret = SMB_VFS_GETXATTR(fsp->conn,fsp->fsp_name,SAMBA_POSIX_INHERITANCE_EA_NAME,
@@ -490,71 +491,6 @@
 	return paiv;
 }
 
-/************************************************************************
- Load the user.SAMBA_PAI attribute.
-************************************************************************/
-
-static struct pai_val *load_inherited_info(const struct connection_struct *conn,
-					   const char *fname)
-{
-	char *pai_buf;
-	size_t pai_buf_size = 1024;
-	struct pai_val *paiv = NULL;
-	ssize_t ret;
-
-	if (!lp_map_acl_inherit(SNUM(conn))) {
-		return NULL;
-	}
-
-	if ((pai_buf = (char *)SMB_MALLOC(pai_buf_size)) == NULL) {
-		return NULL;
-	}
-
-	do {
-		ret = SMB_VFS_GETXATTR(conn, fname,
-				       SAMBA_POSIX_INHERITANCE_EA_NAME,
-				       pai_buf, pai_buf_size);
-
-		if (ret == -1) {
-			if (errno != ERANGE) {
-				break;
-			}
-			/* Buffer too small - enlarge it. */
-			pai_buf_size *= 2;
-			SAFE_FREE(pai_buf);
-			if (pai_buf_size > 1024*1024) {
-				return NULL; /* Limit malloc to 1mb. */
-			}
-			if ((pai_buf = (char *)SMB_MALLOC(pai_buf_size)) == NULL)
-				return NULL;
-		}
-	} while (ret == -1);
-
-	DEBUG(10,("load_inherited_info: ret = %lu for file %s\n", (unsigned long)ret, fname));
-
-	if (ret == -1) {
-		/* No attribute or not supported. */
-#if defined(ENOATTR)
-		if (errno != ENOATTR)
-			DEBUG(10,("load_inherited_info: Error %s\n", strerror(errno) ));
-#else
-		if (errno != ENOSYS)
-			DEBUG(10,("load_inherited_info: Error %s\n", strerror(errno) ));
-#endif
-		SAFE_FREE(pai_buf);
-		return NULL;
-	}
-
-	paiv = create_pai_val(pai_buf, ret);
-
-	if (paiv && paiv->pai_protected) {
-		DEBUG(10,("load_inherited_info: ACL is protected for file %s\n", fname));
-	}
-
-	SAFE_FREE(pai_buf);
-	return paiv;
-}
-
 /****************************************************************************
  Functions to manipulate the internal ACE format.
 ****************************************************************************/
@@ -611,8 +547,10 @@
 
 static void print_canon_ace(canon_ace *pace, int num)
 {
+	fstring str;
+
 	dbgtext( "canon_ace index %d. Type = %s ", num, pace->attr == ALLOW_ACE ? "allow" : "deny" );
-	dbgtext( "SID = %s ", sid_string_dbg(&pace->trustee));
+	dbgtext( "SID = %s ", sid_to_string( str, &pace->trustee));
 	if (pace->owner_type == UID_ACE) {
 		const char *u_name = uidtoname(pace->unix_ug.uid);
 		dbgtext( "uid %u (%s) ", (unsigned int)pace->unix_ug.uid, u_name );
@@ -725,7 +663,7 @@
  Function to create owner and group SIDs from a SMB_STRUCT_STAT.
 ****************************************************************************/
 
-static void create_file_sids(const SMB_STRUCT_STAT *psbuf, DOM_SID *powner_sid, DOM_SID *pgroup_sid)
+static void create_file_sids(SMB_STRUCT_STAT *psbuf, DOM_SID *powner_sid, DOM_SID *pgroup_sid)
 {
 	uid_to_sid( powner_sid, psbuf->st_uid );
 	gid_to_sid( pgroup_sid, psbuf->st_gid );
@@ -735,7 +673,7 @@
  Is the identity in two ACEs equal ? Check both SID and uid/gid.
 ****************************************************************************/
 
-static bool identity_in_ace_equal(canon_ace *ace1, canon_ace *ace2)
+static BOOL identity_in_ace_equal(canon_ace *ace1, canon_ace *ace2)
 {
 	if (sid_equal(&ace1->trustee, &ace2->trustee)) {
 		return True;
@@ -870,7 +808,7 @@
  Check if we need to return NT4.x compatible ACL entries.
 ****************************************************************************/
 
-static bool nt4_compatible_acls(void)
+static BOOL nt4_compatible_acls(void)
 {
 	int compat = lp_acl_compatibility();
 
@@ -891,9 +829,9 @@
 ****************************************************************************/
 
 static SEC_ACCESS map_canon_ace_perms(int snum,
-				enum security_ace_type *pacl_type,
+				int *pacl_type,
 				mode_t perms,
-				bool directory_ace)
+				BOOL directory_ace)
 {
 	SEC_ACCESS sa;
 	uint32 nt_mask = 0;
@@ -988,7 +926,7 @@
  Unpack a SEC_DESC into a UNIX owner and group.
 ****************************************************************************/
 
-NTSTATUS unpack_nt_owners(int snum, uid_t *puser, gid_t *pgrp, uint32 security_info_sent, SEC_DESC *psd)
+BOOL unpack_nt_owners(int snum, uid_t *puser, gid_t *pgrp, uint32 security_info_sent, SEC_DESC *psd)
 {
 	DOM_SID owner_sid;
 	DOM_SID grp_sid;
@@ -998,7 +936,7 @@
 
 	if(security_info_sent == 0) {
 		DEBUG(0,("unpack_nt_owners: no security info sent !\n"));
-		return NT_STATUS_OK;
+		return True;
 	}
 
 	/*
@@ -1025,12 +963,10 @@
 			} else {
 				DEBUG(3,("unpack_nt_owners: unable to validate"
 					 " owner sid for %s\n",
-					 sid_string_dbg(&owner_sid)));
-				return NT_STATUS_INVALID_OWNER;
+					 sid_string_static(&owner_sid)));
+				return False;
 			}
 		}
-		DEBUG(3,("unpack_nt_owners: owner sid mapped to uid %u\n",
-			 (unsigned int)*puser ));
  	}
 
 	/*
@@ -1048,37 +984,34 @@
 			} else {
 				DEBUG(3,("unpack_nt_owners: unable to validate"
 					 " group sid.\n"));
-				return NT_STATUS_INVALID_OWNER;
+				return False;
 			}
 		}
-		DEBUG(3,("unpack_nt_owners: group sid mapped to gid %u\n",
-			 (unsigned int)*pgrp));
- 	}
+	}
 
 	DEBUG(5,("unpack_nt_owners: owner_sids validated.\n"));
 
-	return NT_STATUS_OK;
+	return True;
 }
 
 /****************************************************************************
  Ensure the enforced permissions for this share apply.
 ****************************************************************************/
 
-static void apply_default_perms(const struct share_params *params,
-				const bool is_directory, canon_ace *pace,
-				mode_t type)
+static void apply_default_perms(files_struct *fsp, canon_ace *pace, mode_t type)
 {
+	int snum = SNUM(fsp->conn);
 	mode_t and_bits = (mode_t)0;
 	mode_t or_bits = (mode_t)0;
 
 	/* Get the initial bits to apply. */
 
-	if (is_directory) {
-		and_bits = lp_dir_security_mask(params->service);
-		or_bits = lp_force_dir_security_mode(params->service);
+	if (fsp->is_directory) {
+		and_bits = lp_dir_security_mask(snum);
+		or_bits = lp_force_dir_security_mode(snum);
 	} else {
-		and_bits = lp_security_mask(params->service);
-		or_bits = lp_force_security_mode(params->service);
+		and_bits = lp_security_mask(snum);
+		or_bits = lp_force_security_mode(snum);
 	}
 
 	/* Now bounce them into the S_USR space. */	
@@ -1086,7 +1019,7 @@
 	case S_IRUSR:
 		/* Ensure owner has read access. */
 		pace->perms |= S_IRUSR;
-		if (is_directory)
+		if (fsp->is_directory)
 			pace->perms |= (S_IWUSR|S_IXUSR);
 		and_bits = unix_perms_to_acl_perms(and_bits, S_IRUSR, S_IWUSR, S_IXUSR);
 		or_bits = unix_perms_to_acl_perms(or_bits, S_IRUSR, S_IWUSR, S_IXUSR);
@@ -1109,9 +1042,9 @@
  expensive and will need optimisation. A *lot* of optimisation :-). JRA.
 ****************************************************************************/
 
-static bool uid_entry_in_group( canon_ace *uid_ace, canon_ace *group_ace )
+static BOOL uid_entry_in_group( canon_ace *uid_ace, canon_ace *group_ace )
 {
-	const char *u_name = NULL;
+	fstring u_name;
 
 	/* "Everyone" always matches every uid. */
 
@@ -1123,11 +1056,7 @@
 	if (uid_ace->unix_ug.uid == current_user.ut.uid && group_ace->unix_ug.gid == current_user.ut.gid)
 		return True;
 
-	/* u_name talloc'ed off tos. */
-	u_name = uidtoname(uid_ace->unix_ug.uid);
-	if (!u_name) {
-		return False;
-	}
+	fstrcpy(u_name, uidtoname(uid_ace->unix_ug.uid));
 	return user_in_group_sid(u_name, &group_ace->trustee);
 }
 
@@ -1141,25 +1070,24 @@
  type.
 ****************************************************************************/
 
-static bool ensure_canon_entry_valid(canon_ace **pp_ace,
-				     const struct share_params *params,
-				     const bool is_directory,
+static BOOL ensure_canon_entry_valid(canon_ace **pp_ace,
+							files_struct *fsp,
 							const DOM_SID *pfile_owner_sid,
 							const DOM_SID *pfile_grp_sid,
-							const SMB_STRUCT_STAT *pst,
-							bool setting_acl)
+							SMB_STRUCT_STAT *pst,
+							BOOL setting_acl)
 {
 	canon_ace *pace;
-	bool got_user = False;
-	bool got_grp = False;
-	bool got_other = False;
+	BOOL got_user = False;
+	BOOL got_grp = False;
+	BOOL got_other = False;
 	canon_ace *pace_other = NULL;
 
 	for (pace = *pp_ace; pace; pace = pace->next) {
 		if (pace->type == SMB_ACL_USER_OBJ) {
 
 			if (setting_acl)
-				apply_default_perms(params, is_directory, pace, S_IRUSR);
+				apply_default_perms(fsp, pace, S_IRUSR);
 			got_user = True;
 
 		} else if (pace->type == SMB_ACL_GROUP_OBJ) {
@@ -1169,7 +1097,7 @@
 			 */
 
 			if (setting_acl)
-				apply_default_perms(params, is_directory, pace, S_IRGRP);
+				apply_default_perms(fsp, pace, S_IRGRP);
 			got_grp = True;
 
 		} else if (pace->type == SMB_ACL_OTHER) {
@@ -1179,7 +1107,7 @@
 			 */
 
 			if (setting_acl)
-				apply_default_perms(params, is_directory, pace, S_IROTH);
+				apply_default_perms(fsp, pace, S_IROTH);
 			got_other = True;
 			pace_other = pace;
 		}
@@ -1202,7 +1130,7 @@
 			/* See if the owning user is in any of the other groups in
 			   the ACE. If so, OR in the permissions from that group. */
 
-			bool group_matched = False;
+			BOOL group_matched = False;
 			canon_ace *pace_iter;
 
 			for (pace_iter = *pp_ace; pace_iter; pace_iter = pace_iter->next) {
@@ -1222,7 +1150,7 @@
 					pace->perms = 0;
 			}
 
-			apply_default_perms(params, is_directory, pace, S_IRUSR);
+			apply_default_perms(fsp, pace, S_IRUSR);
 		} else {
 			pace->perms = unix_perms_to_acl_perms(pst->st_mode, S_IRUSR, S_IWUSR, S_IXUSR);
 		}
@@ -1248,7 +1176,7 @@
 				pace->perms = pace_other->perms;
 			else
 				pace->perms = 0;
-			apply_default_perms(params, is_directory, pace, S_IRGRP);
+			apply_default_perms(fsp, pace, S_IRGRP);
 		} else {
 			pace->perms = unix_perms_to_acl_perms(pst->st_mode, S_IRGRP, S_IWGRP, S_IXGRP);
 		}
@@ -1270,7 +1198,7 @@
 		pace->attr = ALLOW_ACE;
 		if (setting_acl) {
 			pace->perms = 0;
-			apply_default_perms(params, is_directory, pace, S_IROTH);
+			apply_default_perms(fsp, pace, S_IROTH);
 		} else
 			pace->perms = unix_perms_to_acl_perms(pst->st_mode, S_IROTH, S_IWOTH, S_IXOTH);
 
@@ -1288,7 +1216,7 @@
 
 static void check_owning_objs(canon_ace *ace, DOM_SID *pfile_owner_sid, DOM_SID *pfile_grp_sid)
 {
-	bool got_user_obj, got_group_obj;
+	BOOL got_user_obj, got_group_obj;
 	canon_ace *current_ace;
 	int i, entries;
 
@@ -1329,18 +1257,18 @@
  Unpack a SEC_DESC into two canonical ace lists.
 ****************************************************************************/
 
-static bool create_canon_ace_lists(files_struct *fsp, SMB_STRUCT_STAT *pst,
+static BOOL create_canon_ace_lists(files_struct *fsp, SMB_STRUCT_STAT *pst,
 							DOM_SID *pfile_owner_sid,
 							DOM_SID *pfile_grp_sid,
 							canon_ace **ppfile_ace, canon_ace **ppdir_ace,
 							SEC_ACL *dacl)
 {
-	bool all_aces_are_inherit_only = (fsp->is_directory ? True : False);
+	BOOL all_aces_are_inherit_only = (fsp->is_directory ? True : False);
 	canon_ace *file_ace = NULL;
 	canon_ace *dir_ace = NULL;
 	canon_ace *current_ace = NULL;
-	bool got_dir_allow = False;
-	bool got_file_allow = False;
+	BOOL got_dir_allow = False;
+	BOOL got_file_allow = False;
 	int i, j;
 
 	*ppfile_ace = NULL;
@@ -1491,23 +1419,23 @@
 				current_ace->type = SMB_ACL_GROUP;
 			}
 		} else {
+			fstring str;
+
 			/*
 			 * Silently ignore map failures in non-mappable SIDs (NT Authority, BUILTIN etc).
 			 */
 
 			if (non_mappable_sid(&psa->trustee)) {
-				DEBUG(10, ("create_canon_ace_lists: ignoring "
-					   "non-mappable SID %s\n",
-					   sid_string_dbg(&psa->trustee)));
+				DEBUG(10,("create_canon_ace_lists: ignoring non-mappable SID %s\n",
+					sid_to_string(str, &psa->trustee) ));
 				SAFE_FREE(current_ace);
 				continue;
 			}
 
 			free_canon_ace_list(file_ace);
 			free_canon_ace_list(dir_ace);
-			DEBUG(0, ("create_canon_ace_lists: unable to map SID "
-				  "%s to uid or gid.\n",
-				  sid_string_dbg(&current_ace->trustee)));
+			DEBUG(0,("create_canon_ace_lists: unable to map SID %s to uid or gid.\n",
+				sid_to_string(str, &current_ace->trustee) ));
 			SAFE_FREE(current_ace);
 			return False;
 		}
@@ -1982,7 +1910,7 @@
  no user/group/world entries.
 ****************************************************************************/
 
-static mode_t create_default_mode(files_struct *fsp, bool interitable_mode)
+static mode_t create_default_mode(files_struct *fsp, BOOL interitable_mode)
 {
 	int snum = SNUM(fsp->conn);
 	mode_t and_bits = (mode_t)0;
@@ -2016,7 +1944,7 @@
  succeeding.
 ****************************************************************************/
 
-static bool unpack_canon_ace(files_struct *fsp, 
+static BOOL unpack_canon_ace(files_struct *fsp, 
 							SMB_STRUCT_STAT *pst,
 							DOM_SID *pfile_owner_sid,
 							DOM_SID *pfile_grp_sid,
@@ -2093,7 +2021,7 @@
 
 	pst->st_mode = create_default_mode(fsp, False);
 
-	if (!ensure_canon_entry_valid(&file_ace, fsp->conn->params, fsp->is_directory, pfile_owner_sid, pfile_grp_sid, pst, True)) {
+	if (!ensure_canon_entry_valid(&file_ace, fsp, pfile_owner_sid, pfile_grp_sid, pst, True)) {
 		free_canon_ace_list(file_ace);
 		free_canon_ace_list(dir_ace);
 		return False;
@@ -2109,7 +2037,7 @@
 
 	pst->st_mode = create_default_mode(fsp, True);
 
-	if (dir_ace && !ensure_canon_entry_valid(&dir_ace, fsp->conn->params, fsp->is_directory, pfile_owner_sid, pfile_grp_sid, pst, True)) {
+	if (dir_ace && !ensure_canon_entry_valid(&dir_ace, fsp, pfile_owner_sid, pfile_grp_sid, pst, True)) {
 		free_canon_ace_list(file_ace);
 		free_canon_ace_list(dir_ace);
 		return False;
@@ -2143,7 +2071,7 @@
  But NT cannot display this in their ACL editor !
 ********************************************************************************/
 
-static void arrange_posix_perms(const char *filename, canon_ace **pp_list_head)
+static void arrange_posix_perms( char *filename, canon_ace **pp_list_head)
 {
 	canon_ace *list_head = *pp_list_head;
 	canon_ace *owner_ace = NULL;
@@ -2187,11 +2115,10 @@
  Create a linked list of canonical ACE entries.
 ****************************************************************************/
 
-static canon_ace *canonicalise_acl(struct connection_struct *conn,
-				   const char *fname, SMB_ACL_T posix_acl,
-				   const SMB_STRUCT_STAT *psbuf,
-				   const DOM_SID *powner, const DOM_SID *pgroup, struct pai_val *pal, SMB_ACL_TYPE_T the_acl_type)
+static canon_ace *canonicalise_acl( files_struct *fsp, SMB_ACL_T posix_acl, SMB_STRUCT_STAT *psbuf,
+					const DOM_SID *powner, const DOM_SID *pgroup, struct pai_val *pal, SMB_ACL_TYPE_T the_acl_type)
 {
+	connection_struct *conn = fsp->conn;
 	mode_t acl_mask = (S_IRUSR|S_IWUSR|S_IXUSR);
 	canon_ace *list_head = NULL;
 	canon_ace *ace = NULL;
@@ -2306,9 +2233,7 @@
 	 * This next call will ensure we have at least a user/group/world set.
 	 */
 
-	if (!ensure_canon_entry_valid(&list_head, conn->params,
-				      S_ISDIR(psbuf->st_mode), powner, pgroup,
-				      psbuf, False))
+	if (!ensure_canon_entry_valid(&list_head, fsp, powner, pgroup, psbuf, False))
 		goto fail;
 
 	/*
@@ -2334,7 +2259,7 @@
 		}
 	}
 
-	arrange_posix_perms(fname,&list_head );
+	arrange_posix_perms(fsp->fsp_name,&list_head );
 
 	print_canon_ace_list( "canonicalise_acl: ace entries after arrange", list_head );
 
@@ -2350,7 +2275,7 @@
  Check if the current user group list contains a given group.
 ****************************************************************************/
 
-static bool current_user_in_group(gid_t gid)
+static BOOL current_user_in_group(gid_t gid)
 {
 	int i;
 
@@ -2368,7 +2293,7 @@
  and 'dos filemode'
 ****************************************************************************/
 
-static bool acl_group_override(connection_struct *conn, gid_t prim_gid)
+static BOOL acl_group_override(connection_struct *conn, gid_t prim_gid)
 {
 	if ( (errno == EACCES || errno == EPERM) 
 		&& (lp_acl_group_control(SNUM(conn)) || lp_dos_filemode(SNUM(conn)))
@@ -2384,18 +2309,18 @@
  Attempt to apply an ACL to a file or directory.
 ****************************************************************************/
 
-static bool set_canon_ace_list(files_struct *fsp, canon_ace *the_ace, bool default_ace, gid_t prim_gid, bool *pacl_set_support)
+static BOOL set_canon_ace_list(files_struct *fsp, canon_ace *the_ace, BOOL default_ace, gid_t prim_gid, BOOL *pacl_set_support)
 {
 	connection_struct *conn = fsp->conn;
-	bool ret = False;
+	BOOL ret = False;
 	SMB_ACL_T the_acl = SMB_VFS_SYS_ACL_INIT(conn, (int)count_canon_ace_list(the_ace) + 1);
 	canon_ace *p_ace;
 	int i;
 	SMB_ACL_ENTRY_T mask_entry;
-	bool got_mask_entry = False;
+	BOOL got_mask_entry = False;
 	SMB_ACL_PERMSET_T mask_permset;
 	SMB_ACL_TYPE_T the_acl_type = (default_ace ? SMB_ACL_TYPE_DEFAULT : SMB_ACL_TYPE_ACCESS);
-	bool needs_mask = False;
+	BOOL needs_mask = False;
 	mode_t mask_perms = 0;
 
 #if defined(POSIX_ACL_NEEDS_MASK)
@@ -2585,7 +2510,7 @@
 			}
 		}
 	} else {
-		if (SMB_VFS_SYS_ACL_SET_FD(fsp, the_acl) == -1) {
+		if (SMB_VFS_SYS_ACL_SET_FD(fsp, fsp->fh->fd, the_acl) == -1) {
 			/*
 			 * Some systems allow all the above calls and only fail with no ACL support
 			 * when attempting to apply the acl. HPUX with HFS is an example of this. JRA.
@@ -2601,7 +2526,7 @@
 					fsp->fsp_name ));
 
 				become_root();
-				sret = SMB_VFS_SYS_ACL_SET_FD(fsp, the_acl);
+				sret = SMB_VFS_SYS_ACL_SET_FD(fsp, fsp->fh->fd, the_acl);
 				unbecome_root();
 				if (sret == 0) {
 					ret = True;
@@ -2666,7 +2591,7 @@
 
 #define MAP_PERM(p,mask,result) (((p) & (mask)) ? (result) : 0 )
 
-static bool convert_canon_ace_to_posix_perms( files_struct *fsp, canon_ace *file_ace_list, mode_t *posix_perms)
+static BOOL convert_canon_ace_to_posix_perms( files_struct *fsp, canon_ace *file_ace_list, mode_t *posix_perms)
 {
 	int snum = SNUM(fsp->conn);
 	size_t ace_count = count_canon_ace_list(file_ace_list);
@@ -2750,8 +2675,8 @@
 		for (j = i+1; j < num_aces; j++) {
 			uint32 i_flags_ni = (nt_ace_list[i].flags & ~SEC_ACE_FLAG_INHERITED_ACE);
 			uint32 j_flags_ni = (nt_ace_list[j].flags & ~SEC_ACE_FLAG_INHERITED_ACE);
-			bool i_inh = (nt_ace_list[i].flags & SEC_ACE_FLAG_INHERITED_ACE) ? True : False;
-			bool j_inh = (nt_ace_list[j].flags & SEC_ACE_FLAG_INHERITED_ACE) ? True : False;
+			BOOL i_inh = (nt_ace_list[i].flags & SEC_ACE_FLAG_INHERITED_ACE) ? True : False;
+			BOOL j_inh = (nt_ace_list[j].flags & SEC_ACE_FLAG_INHERITED_ACE) ? True : False;
 
 			/* We know the lower number ACE's are file entries. */
 			if ((nt_ace_list[i].type == nt_ace_list[j].type) &&
@@ -2801,7 +2726,6 @@
 
 	return num_aces;
 }
-
 /****************************************************************************
  Reply to query a security descriptor from an fsp. If it succeeds it allocates
  the space for the return elements and returns the size needed to return the
@@ -2809,15 +2733,11 @@
  the UNIX style get ACL.
 ****************************************************************************/
 
-static NTSTATUS posix_get_nt_acl_common(struct connection_struct *conn,
-				      const char *name,
-				      const SMB_STRUCT_STAT *sbuf,
-				      struct pai_val *pal,
-				      SMB_ACL_T posix_acl,
-				      SMB_ACL_T def_acl,
-				      uint32_t security_info,
-				      SEC_DESC **ppdesc)
+size_t get_nt_acl(files_struct *fsp, uint32 security_info, SEC_DESC **ppdesc)
 {
+	connection_struct *conn = fsp->conn;
+	SMB_STRUCT_STAT sbuf;
+	SEC_ACE *nt_ace_list = NULL;
 	DOM_SID owner_sid;
 	DOM_SID group_sid;
 	size_t sd_size = 0;
@@ -2825,12 +2745,57 @@
 	size_t num_acls = 0;
 	size_t num_def_acls = 0;
 	size_t num_aces = 0;
+	SMB_ACL_T posix_acl = NULL;
+	SMB_ACL_T def_acl = NULL;
 	canon_ace *file_ace = NULL;
 	canon_ace *dir_ace = NULL;
-	SEC_ACE *nt_ace_list = NULL;
 	size_t num_profile_acls = 0;
+	struct pai_val *pal = NULL;
 	SEC_DESC *psd = NULL;
 
+	*ppdesc = NULL;
+
+	DEBUG(10,("get_nt_acl: called for file %s\n", fsp->fsp_name ));
+
+	if(fsp->is_directory || fsp->fh->fd == -1) {
+
+		/* Get the stat struct for the owner info. */
+		if(SMB_VFS_STAT(fsp->conn,fsp->fsp_name, &sbuf) != 0) {
+			return 0;
+		}
+		/*
+		 * Get the ACL from the path.
+		 */
+
+		posix_acl = SMB_VFS_SYS_ACL_GET_FILE(conn, fsp->fsp_name, SMB_ACL_TYPE_ACCESS);
+
+		/*
+		 * If it's a directory get the default POSIX ACL.
+		 */
+
+		if(fsp->is_directory) {
+			def_acl = SMB_VFS_SYS_ACL_GET_FILE(conn, fsp->fsp_name, SMB_ACL_TYPE_DEFAULT);
+			def_acl = free_empty_sys_acl(conn, def_acl);
+		}
+
+	} else {
+
+		/* Get the stat struct for the owner info. */
+		if(SMB_VFS_FSTAT(fsp,fsp->fh->fd,&sbuf) != 0) {
+			return 0;
+		}
+		/*
+		 * Get the ACL from the fd.
+		 */
+		posix_acl = SMB_VFS_SYS_ACL_GET_FD(fsp, fsp->fh->fd);
+	}
+
+	DEBUG(5,("get_nt_acl : file ACL %s, directory ACL %s\n",
+			posix_acl ? "present" :  "absent",
+			def_acl ? "present" :  "absent" ));
+
+	pal = load_inherited_info(fsp);
+
 	/*
 	 * Get the owner, group and world SIDs.
 	 */
@@ -2841,7 +2806,7 @@
 		sid_copy(&group_sid, &global_sid_Builtin_Users);
 		num_profile_acls = 2;
 	} else {
-		create_file_sids(sbuf, &owner_sid, &group_sid);
+		create_file_sids(&sbuf, &owner_sid, &group_sid);
 	}
 
 	if ((security_info & DACL_SECURITY_INFORMATION) && !(security_info & PROTECTED_DACL_SECURITY_INFORMATION)) {
@@ -2856,23 +2821,19 @@
 		 */
 
 		/* Create the canon_ace lists. */
-		file_ace = canonicalise_acl(conn, name, posix_acl, sbuf,
-					    &owner_sid, &group_sid, pal,
-					    SMB_ACL_TYPE_ACCESS);
+		file_ace = canonicalise_acl( fsp, posix_acl, &sbuf, &owner_sid, &group_sid, pal, SMB_ACL_TYPE_ACCESS );
 
 		/* We must have *some* ACLS. */
 	
 		if (count_canon_ace_list(file_ace) == 0) {
-			DEBUG(0,("get_nt_acl : No ACLs on file (%s) !\n", name));
+			DEBUG(0,("get_nt_acl : No ACLs on file (%s) !\n", fsp->fsp_name ));
 			goto done;
 		}
 
-		if (S_ISDIR(sbuf->st_mode) && def_acl) {
-			dir_ace = canonicalise_acl(conn, name, def_acl,
-						   sbuf,
-						   &global_sid_Creator_Owner,
-						   &global_sid_Creator_Group,
-						   pal, SMB_ACL_TYPE_DEFAULT);
+		if (fsp->is_directory && def_acl) {
+			dir_ace = canonicalise_acl(fsp, def_acl, &sbuf,
+					&global_sid_Creator_Owner,
+					&global_sid_Creator_Group, pal, SMB_ACL_TYPE_DEFAULT );
 		}
 
 		/*
@@ -2881,7 +2842,8 @@
 
 		{
 			canon_ace *ace;
-			enum security_ace_type nt_acl_type;
+			int nt_acl_type;
+			int i;
 
 			if (nt4_compatible_acls() && dir_ace) {
 				/*
@@ -2947,13 +2909,15 @@
 			 * Create the NT ACE list from the canonical ace lists.
 			 */
 
-			for (ace = file_ace; ace != NULL; ace = ace->next) {
+			ace = file_ace;
+
+			for (i = 0; i < num_acls; i++, ace = ace->next) {
 				SEC_ACCESS acc;
 
 				acc = map_canon_ace_perms(SNUM(conn),
 						&nt_acl_type,
 						ace->perms,
-						S_ISDIR(sbuf->st_mode));
+						fsp->is_directory);
 				init_sec_ace(&nt_ace_list[num_aces++],
 					&ace->trustee,
 					nt_acl_type,
@@ -2974,13 +2938,15 @@
 						acc, 0);
 			}
 
-			for (ace = dir_ace; ace != NULL; ace = ace->next) {
+			ace = dir_ace;
+
+			for (i = 0; i < num_def_acls; i++, ace = ace->next) {
 				SEC_ACCESS acc;
 
 				acc = map_canon_ace_perms(SNUM(conn),
 						&nt_acl_type,
 						ace->perms,
-						S_ISDIR(sbuf->st_mode));
+						fsp->is_directory);
 				init_sec_ace(&nt_ace_list[num_aces++],
 					&ace->trustee,
 					nt_acl_type,
@@ -3014,14 +2980,14 @@
 		}
 
 		if (num_aces) {
-			if((psa = make_sec_acl( talloc_tos(), NT4_ACL_REVISION, num_aces, nt_ace_list)) == NULL) {
+			if((psa = make_sec_acl( main_loop_talloc_get(), NT4_ACL_REVISION, num_aces, nt_ace_list)) == NULL) {
 				DEBUG(0,("get_nt_acl: Unable to malloc space for acl.\n"));
 				goto done;
 			}
 		}
 	} /* security_info & DACL_SECURITY_INFORMATION */
 
-	psd = make_standard_sec_desc( talloc_tos(),
+	psd = make_standard_sec_desc( main_loop_talloc_get(),
 			(security_info & OWNER_SECURITY_INFORMATION) ? &owner_sid : NULL,
 			(security_info & GROUP_SECURITY_INFORMATION) ? &group_sid : NULL,
 			psa,
@@ -3066,72 +3032,9 @@
 	free_inherited_info(pal);
 	SAFE_FREE(nt_ace_list);
 
-	return NT_STATUS_OK;
+	return sd_size;
 }
 
-NTSTATUS posix_fget_nt_acl(struct files_struct *fsp, uint32_t security_info,
-			   SEC_DESC **ppdesc)
-{
-	SMB_STRUCT_STAT sbuf;
-	SMB_ACL_T posix_acl = NULL;
-	struct pai_val *pal;
-
-	*ppdesc = NULL;
-
-	DEBUG(10,("posix_fget_nt_acl: called for file %s\n", fsp->fsp_name ));
-
-	/* can it happen that fsp_name == NULL ? */
-	if (fsp->is_directory ||  fsp->fh->fd == -1) {
-		return posix_get_nt_acl(fsp->conn, fsp->fsp_name,
-					security_info, ppdesc);
-	}
-
-	/* Get the stat struct for the owner info. */
-	if(SMB_VFS_FSTAT(fsp, &sbuf) != 0) {
-		return map_nt_error_from_unix(errno);
-	}
-
-	/* Get the ACL from the fd. */
-	posix_acl = SMB_VFS_SYS_ACL_GET_FD(fsp);
-
-	pal = fload_inherited_info(fsp);
-
-	return posix_get_nt_acl_common(fsp->conn, fsp->fsp_name, &sbuf, pal,
-				       posix_acl, NULL, security_info, ppdesc);
-}
-
-NTSTATUS posix_get_nt_acl(struct connection_struct *conn, const char *name,
-			  uint32_t security_info, SEC_DESC **ppdesc)
-{
-	SMB_STRUCT_STAT sbuf;
-	SMB_ACL_T posix_acl = NULL;
-	SMB_ACL_T def_acl = NULL;
-	struct pai_val *pal;
-
-	*ppdesc = NULL;
-
-	DEBUG(10,("posix_get_nt_acl: called for file %s\n", name ));
-
-	/* Get the stat struct for the owner info. */
-	if(SMB_VFS_STAT(conn, name, &sbuf) != 0) {
-		return map_nt_error_from_unix(errno);
-	}
-
-	/* Get the ACL from the path. */
-	posix_acl = SMB_VFS_SYS_ACL_GET_FILE(conn, name, SMB_ACL_TYPE_ACCESS);
-
-	/* If it's a directory get the default POSIX ACL. */
-	if(S_ISDIR(sbuf.st_mode)) {
-		def_acl = SMB_VFS_SYS_ACL_GET_FILE(conn, name, SMB_ACL_TYPE_DEFAULT);
-		def_acl = free_empty_sys_acl(conn, def_acl);
-	}
-
-	pal = load_inherited_info(conn, name);
-
-	return posix_get_nt_acl_common(conn, name, &sbuf, pal, posix_acl,
-				       def_acl, security_info, ppdesc);
-}
-
 /****************************************************************************
  Try to chown a file. We will be able to chown it under the following conditions.
 
@@ -3161,9 +3064,9 @@
 	/* Case (2) / (3) */
 	if (lp_enable_privileges()) {
 
-		bool has_take_ownership_priv = user_has_privileges(current_user.nt_user_token,
+		BOOL has_take_ownership_priv = user_has_privileges(current_user.nt_user_token,
 							      &se_take_ownership);
-		bool has_restore_priv = user_has_privileges(current_user.nt_user_token,
+		BOOL has_restore_priv = user_has_privileges(current_user.nt_user_token,
 						       &se_restore);
 
 		/* Case (2) */
@@ -3181,7 +3084,6 @@
 
 	/* Case (4). */
 	if (!lp_dos_filemode(SNUM(conn))) {
-		errno = EPERM;
 		return -1;
 	}
 
@@ -3201,7 +3103,7 @@
 
 	become_root();
 	/* Keep the current file gid the same. */
-	ret = SMB_VFS_FCHOWN(fsp, uid, (gid_t)-1);
+	ret = SMB_VFS_FCHOWN(fsp, fsp->fh->fd, uid, (gid_t)-1);
 	unbecome_root();
 
 	close_file_fchmod(fsp);
@@ -3227,8 +3129,9 @@
 	SMB_STRUCT_STAT sbuf;
 	NTSTATUS status;
 	int info;
+	size_t sd_size;
 	unsigned int i, j;
-	bool is_dacl_protected = (psd->type & SE_DESC_DACL_PROTECTED);
+	BOOL is_dacl_protected = (psd->type & SE_DESC_DACL_PROTECTED);
 
 	ZERO_STRUCT(sbuf);
 
@@ -3244,14 +3147,13 @@
 	}
 
 	status = open_directory(fsp->conn,
-				NULL,
 				parent_name,
 				&sbuf,
 				FILE_READ_ATTRIBUTES, /* Just a stat open */
 				FILE_SHARE_NONE, /* Ignored for stat opens */
 				FILE_OPEN,
 				0,
-				INTERNAL_OPEN_ONLY,
+				0,
 				&info,
 				&parent_fsp);
 
@@ -3259,16 +3161,16 @@
 		return status;
 	}
 
-	status = SMB_VFS_GET_NT_ACL(parent_fsp->conn, parent_fsp->fsp_name,
-				    DACL_SECURITY_INFORMATION, &parent_sd );
+	sd_size = SMB_VFS_GET_NT_ACL(parent_fsp, parent_fsp->fsp_name,
+			DACL_SECURITY_INFORMATION, &parent_sd );
 
 	close_file(parent_fsp, NORMAL_CLOSE);
 
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+	if (!sd_size) {
+		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	/*
+        /*
 	 * Make room for potentially all the ACLs from
 	 * the parent. We used to add the ugw triple here,
 	 * as we knew we were dealing with POSIX ACLs.
@@ -3310,7 +3212,7 @@
 					"from parent %s\n",
 					fsp->fsp_name,
 					(unsigned int)se->flags,
-					sid_string_dbg(&se->trustee),
+					sid_string_static(&se->trustee),
 					parent_name));
 				continue;
 			}
@@ -3323,7 +3225,7 @@
 					"from parent %s\n",
 					fsp->fsp_name,
 					(unsigned int)se->flags,
-					sid_string_dbg(&se->trustee),
+					sid_string_static(&se->trustee),
 					parent_name));
 				continue;
 			}
@@ -3346,7 +3248,7 @@
 					"ignoring ACE with protected sid %s "
 					"from parent %s\n",
 					fsp->fsp_name,
-					sid_string_dbg(&se->trustee),
+					sid_string_static(&se->trustee),
 					parent_name));
 				continue;
 			}
@@ -3378,14 +3280,16 @@
 						SEC_ACE_FLAG_INHERIT_ONLY|
 						SEC_ACE_FLAG_NO_PROPAGATE_INHERIT);
 		}
+
 		i++;
 
 		DEBUG(10,("append_parent_acl: path %s "
 			"inheriting ACE with sid %s "
 			"from parent %s\n",
 			fsp->fsp_name,
-			sid_string_dbg(&se->trustee),
+			sid_string_static(&se->trustee),
 			parent_name));
+
 	}
 
 	parent_sd->dacl->aces = new_ace;
@@ -3401,7 +3305,7 @@
  This should be the only external function needed for the UNIX style set ACL.
 ****************************************************************************/
 
-NTSTATUS set_nt_acl(files_struct *fsp, uint32 security_info_sent, SEC_DESC *psd)
+BOOL set_nt_acl(files_struct *fsp, uint32 security_info_sent, SEC_DESC *psd)
 {
 	connection_struct *conn = fsp->conn;
 	uid_t user = (uid_t)-1;
@@ -3411,18 +3315,17 @@
 	DOM_SID file_grp_sid;
 	canon_ace *file_ace_list = NULL;
 	canon_ace *dir_ace_list = NULL;
-	bool acl_perms = False;
+	BOOL acl_perms = False;
 	mode_t orig_mode = (mode_t)0;
-	NTSTATUS status;
 	uid_t orig_uid;
 	gid_t orig_gid;
-	bool need_chown = False;
+	BOOL need_chown = False;
 
 	DEBUG(10,("set_nt_acl: called for file %s\n", fsp->fsp_name ));
 
 	if (!CAN_WRITE(conn)) {
 		DEBUG(10,("set acl rejected on read-only share\n"));
-		return NT_STATUS_MEDIA_WRITE_PROTECTED;
+		return False;
 	}
 
 	/*
@@ -3431,10 +3334,10 @@
 
 	if(fsp->is_directory || fsp->fh->fd == -1) {
 		if(SMB_VFS_STAT(fsp->conn,fsp->fsp_name, &sbuf) != 0)
-			return map_nt_error_from_unix(errno);
+			return False;
 	} else {
-		if(SMB_VFS_FSTAT(fsp, &sbuf) != 0)
-			return map_nt_error_from_unix(errno);
+		if(SMB_VFS_FSTAT(fsp,fsp->fh->fd,&sbuf) != 0)
+			return False;
 	}
 
 	/* Save the original elements we check against. */
@@ -3446,9 +3349,8 @@
 	 * Unpack the user/group/world id's.
 	 */
 
-	status = unpack_nt_owners( SNUM(conn), &user, &grp, security_info_sent, psd);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+	if (!unpack_nt_owners( SNUM(conn), &user, &grp, security_info_sent, psd)) {
+		return False;
 	}
 
 	/*
@@ -3459,6 +3361,12 @@
 		need_chown = True;
 	}
 
+	/*
+	 * Chown before setting ACL only if we don't change the user, or
+	 * if we change to the current user, but not if we want to give away
+	 * the file.
+	 */
+
 	if (need_chown && (user == (uid_t)-1 || user == current_user.ut.uid)) {
 
 		DEBUG(3,("set_nt_acl: chown %s. uid = %u, gid = %u.\n",
@@ -3467,10 +3375,7 @@
 		if(try_chown( fsp->conn, fsp->fsp_name, user, grp) == -1) {
 			DEBUG(3,("set_nt_acl: chown %s, %u, %u failed. Error = %s.\n",
 				fsp->fsp_name, (unsigned int)user, (unsigned int)grp, strerror(errno) ));
-			if (errno == EPERM) {
-				return NT_STATUS_INVALID_OWNER;
-			}
-			return map_nt_error_from_unix(errno);
+			return False;
 		}
 
 		/*
@@ -3480,7 +3385,7 @@
 
 		if(fsp->is_directory) {
 			if(SMB_VFS_STAT(fsp->conn, fsp->fsp_name, &sbuf) != 0) {
-				return map_nt_error_from_unix(errno);
+				return False;
 			}
 		} else {
 
@@ -3489,10 +3394,10 @@
 			if(fsp->fh->fd == -1)
 				ret = SMB_VFS_STAT(fsp->conn, fsp->fsp_name, &sbuf);
 			else
-				ret = SMB_VFS_FSTAT(fsp, &sbuf);
+				ret = SMB_VFS_FSTAT(fsp,fsp->fh->fd,&sbuf);
 
 			if(ret != 0)
-				return map_nt_error_from_unix(errno);
+				return False;
 		}
 
 		/* Save the original elements we check against. */
@@ -3500,7 +3405,7 @@
 		orig_uid = sbuf.st_uid;
 		orig_gid = sbuf.st_gid;
 
-		/* We did chown already, drop the flag */
+		/* We did it, don't try again */
 		need_chown = False;
 	}
 
@@ -3512,9 +3417,9 @@
 			      SE_DESC_DACL_AUTO_INHERIT_REQ))==
 			(SE_DESC_DACL_AUTO_INHERITED|
 			 SE_DESC_DACL_AUTO_INHERIT_REQ) ) {
-		status = append_parent_acl(fsp, &sbuf, psd, &psd);
+		NTSTATUS status = append_parent_acl(fsp, &sbuf, psd, &psd);
 		if (!NT_STATUS_IS_OK(status)) {
-			return status;
+			return False;
 		}
 	}
 
@@ -3528,7 +3433,7 @@
 			DEBUG(3,("set_nt_acl: cannot set permissions\n"));
 			free_canon_ace_list(file_ace_list);
 			free_canon_ace_list(dir_ace_list); 
-			return NT_STATUS_ACCESS_DENIED;
+			return False;
 		}
 
 		/*
@@ -3537,8 +3442,8 @@
 
 		if((security_info_sent & DACL_SECURITY_INFORMATION) && (psd->dacl != NULL)) {
 
-			bool acl_set_support = False;
-			bool ret = False;
+			BOOL acl_set_support = False;
+			BOOL ret = False;
 
 			/*
 			 * Try using the POSIX ACL set first. Fall back to chmod if
@@ -3551,7 +3456,7 @@
 					DEBUG(3,("set_nt_acl: failed to set file acl on file %s (%s).\n", fsp->fsp_name, strerror(errno) ));
 					free_canon_ace_list(file_ace_list);
 					free_canon_ace_list(dir_ace_list); 
-					return map_nt_error_from_unix(errno);
+					return False;
 				}
 			}
 
@@ -3561,7 +3466,7 @@
 						DEBUG(3,("set_nt_acl: failed to set default acl on directory %s (%s).\n", fsp->fsp_name, strerror(errno) ));
 						free_canon_ace_list(file_ace_list);
 						free_canon_ace_list(dir_ace_list); 
-						return map_nt_error_from_unix(errno);
+						return False;
 					}
 				} else {
 
@@ -3586,7 +3491,7 @@
 							DEBUG(3,("set_nt_acl: sys_acl_delete_def_file failed (%s)\n", strerror(errno)));
 							free_canon_ace_list(file_ace_list);
 							free_canon_ace_list(dir_ace_list);
-							return map_nt_error_from_unix(errno);
+							return False;
 						}
 					}
 				}
@@ -3609,7 +3514,7 @@
 					free_canon_ace_list(dir_ace_list);
 					DEBUG(3,("set_nt_acl: failed to convert file acl to posix permissions for file %s.\n",
 						fsp->fsp_name ));
-					return NT_STATUS_ACCESS_DENIED;
+					return False;
 				}
 
 				if (orig_mode != posix_perms) {
@@ -3634,7 +3539,7 @@
 								fsp->fsp_name, (unsigned int)posix_perms, strerror(errno) ));
 							free_canon_ace_list(file_ace_list);
 							free_canon_ace_list(dir_ace_list);
-							return map_nt_error_from_unix(errno);
+							return False;
 						}
 					}
 				}
@@ -3647,20 +3552,18 @@
 
 	/* Any chown pending? */
 	if (need_chown) {
+
 		DEBUG(3,("set_nt_acl: chown %s. uid = %u, gid = %u.\n",
-			 fsp->fsp_name, (unsigned int)user, (unsigned int)grp ));
-		
+			fsp->fsp_name, (unsigned int)user, (unsigned int)grp ));
+
 		if(try_chown( fsp->conn, fsp->fsp_name, user, grp) == -1) {
 			DEBUG(3,("set_nt_acl: chown %s, %u, %u failed. Error = %s.\n",
-				 fsp->fsp_name, (unsigned int)user, (unsigned int)grp, strerror(errno) ));
-			if (errno == EPERM) {
-				return NT_STATUS_INVALID_OWNER;
-			}
-			return map_nt_error_from_unix(errno);
+				fsp->fsp_name, (unsigned int)user, (unsigned int)grp, strerror(errno) ));
+			return False;
 		}
 	}
-	
-	return NT_STATUS_OK;
+
+	return True;
 }
 
 /****************************************************************************
@@ -3832,19 +3735,19 @@
  and set the mask to rwx. Needed to preserve complex ACLs set by NT.
 ****************************************************************************/
 
-int fchmod_acl(files_struct *fsp, mode_t mode)
+int fchmod_acl(files_struct *fsp, int fd, mode_t mode)
 {
 	connection_struct *conn = fsp->conn;
 	SMB_ACL_T posix_acl = NULL;
 	int ret = -1;
 
-	if ((posix_acl = SMB_VFS_SYS_ACL_GET_FD(fsp)) == NULL)
+	if ((posix_acl = SMB_VFS_SYS_ACL_GET_FD(fsp, fd)) == NULL)
 		return -1;
 
 	if ((ret = chmod_acl_internals(conn, posix_acl, mode)) == -1)
 		goto done;
 
-	ret = SMB_VFS_SYS_ACL_SET_FD(fsp, posix_acl);
+	ret = SMB_VFS_SYS_ACL_SET_FD(fsp, fd, posix_acl);
 
   done:
 
@@ -3856,10 +3759,10 @@
  Check for an existing default POSIX ACL on a directory.
 ****************************************************************************/
 
-bool directory_has_default_acl(connection_struct *conn, const char *fname)
+BOOL directory_has_default_acl(connection_struct *conn, const char *fname)
 {
 	SMB_ACL_T def_acl = SMB_VFS_SYS_ACL_GET_FILE( conn, fname, SMB_ACL_TYPE_DEFAULT);
-	bool has_acl = False;
+	BOOL has_acl = False;
 	SMB_ACL_ENTRY_T entry;
 
 	if (def_acl != NULL && (SMB_VFS_SYS_ACL_GET_ENTRY(conn, def_acl, SMB_ACL_FIRST_ENTRY, &entry) == 1)) {
@@ -3876,7 +3779,7 @@
  Map from wire type to permset.
 ****************************************************************************/
 
-static bool unix_ex_wire_to_permset(connection_struct *conn, unsigned char wire_perm, SMB_ACL_PERMSET_T *p_permset)
+static BOOL unix_ex_wire_to_permset(connection_struct *conn, unsigned char wire_perm, SMB_ACL_PERMSET_T *p_permset)
 {
 	if (wire_perm & ~(SMB_POSIX_ACL_READ|SMB_POSIX_ACL_WRITE|SMB_POSIX_ACL_EXECUTE)) {
 		return False;
@@ -3908,7 +3811,7 @@
  Map from wire type to tagtype.
 ****************************************************************************/
 
-static bool unix_ex_wire_to_tagtype(unsigned char wire_tt, SMB_ACL_TAG_T *p_tt)
+static BOOL unix_ex_wire_to_tagtype(unsigned char wire_tt, SMB_ACL_TAG_T *p_tt)
 {
 	switch (wire_tt) {
 		case SMB_POSIX_ACL_USER_OBJ:
@@ -4031,7 +3934,7 @@
  on the directory.
 ****************************************************************************/
 
-bool set_unix_posix_default_acl(connection_struct *conn, const char *fname, SMB_STRUCT_STAT *psbuf,
+BOOL set_unix_posix_default_acl(connection_struct *conn, const char *fname, SMB_STRUCT_STAT *psbuf,
 				uint16 num_def_acls, const char *pdata)
 {
 	SMB_ACL_T def_acl = NULL;
@@ -4076,12 +3979,12 @@
  FIXME ! How does the share mask/mode fit into this.... ?
 ****************************************************************************/
 
-static bool remove_posix_acl(connection_struct *conn, files_struct *fsp, const char *fname)
+static BOOL remove_posix_acl(connection_struct *conn, files_struct *fsp, const char *fname)
 {
 	SMB_ACL_T file_acl = NULL;
 	int entry_id = SMB_ACL_FIRST_ENTRY;
 	SMB_ACL_ENTRY_T entry;
-	bool ret = False;
+	BOOL ret = False;
 	/* Create a new ACL with only 3 entries, u/g/w. */
 	SMB_ACL_T new_file_acl = SMB_VFS_SYS_ACL_INIT(conn, 3);
 	SMB_ACL_ENTRY_T user_ent = NULL;
@@ -4129,7 +4032,7 @@
 
 	/* Get the current file ACL. */
 	if (fsp && fsp->fh->fd != -1) {
-		file_acl = SMB_VFS_SYS_ACL_GET_FD(fsp);
+		file_acl = SMB_VFS_SYS_ACL_GET_FD(fsp, fsp->fh->fd);
 	} else {
 		file_acl = SMB_VFS_SYS_ACL_GET_FILE( conn, fname, SMB_ACL_TYPE_ACCESS);
 	}
@@ -4182,7 +4085,7 @@
 
 	/* Set the new empty file ACL. */
 	if (fsp && fsp->fh->fd != -1) {
-		if (SMB_VFS_SYS_ACL_SET_FD(fsp, new_file_acl) == -1) {
+		if (SMB_VFS_SYS_ACL_SET_FD(fsp, fsp->fh->fd, new_file_acl) == -1) {
 			DEBUG(5,("remove_posix_acl: acl_set_file failed on %s (%s)\n",
 				fname, strerror(errno) ));
 			goto done;
@@ -4214,7 +4117,7 @@
  except SMB_ACL_USER_OBJ, SMB_ACL_GROUP_OBJ, SMB_ACL_OTHER.
 ****************************************************************************/
 
-bool set_unix_posix_acl(connection_struct *conn, files_struct *fsp, const char *fname, uint16 num_acls, const char *pdata)
+BOOL set_unix_posix_acl(connection_struct *conn, files_struct *fsp, const char *fname, uint16 num_acls, const char *pdata)
 {
 	SMB_ACL_T file_acl = NULL;
 
@@ -4229,7 +4132,7 @@
 
 	if (fsp && fsp->fh->fd != -1) {
 		/* The preferred way - use an open fd. */
-		if (SMB_VFS_SYS_ACL_SET_FD(fsp, file_acl) == -1) {
+		if (SMB_VFS_SYS_ACL_SET_FD(fsp, fsp->fh->fd, file_acl) == -1) {
 			DEBUG(5,("set_unix_posix_acl: acl_set_file failed on %s (%s)\n",
 				fname, strerror(errno) ));
 		        SMB_VFS_SYS_ACL_FREE_ACL(conn, file_acl);
@@ -4249,25 +4152,239 @@
 	return True;
 }
 
+/****************************************************************************
+ Helper function that gets a security descriptor by connection and
+ file name.
+ NOTE: This is transitional, in the sense that SMB_VFS_GET_NT_ACL really
+ should *not* get a files_struct pointer but a connection_struct ptr
+ (automatic by the vfs handle) and the file name and _use_ that!
+****************************************************************************/
+static NTSTATUS conn_get_nt_acl(TALLOC_CTX *mem_ctx,
+				struct connection_struct *conn,
+				const char *fname,
+				SMB_STRUCT_STAT *psbuf,
+				struct security_descriptor_info **psd)
+{
+	NTSTATUS status;
+	struct files_struct *fsp = NULL;
+	struct security_descriptor_info *secdesc = NULL;
+	size_t secdesc_size;
+
+	if (!VALID_STAT(*psbuf)) {
+		if (SMB_VFS_STAT(conn, fname, psbuf) != 0) {
+			return map_nt_error_from_unix(errno);
+		}
+	}
+
+	/* fake a files_struct ptr: */
+
+	if (S_ISDIR(psbuf->st_mode)) {
+		status = open_directory(conn, fname, psbuf,
+					READ_CONTROL_ACCESS,
+					FILE_SHARE_READ|FILE_SHARE_WRITE,
+					FILE_OPEN,
+					0,
+					FILE_ATTRIBUTE_DIRECTORY,
+					NULL, &fsp);
+	}
+	else {
+		status = open_file_stat(conn, fname, psbuf, &fsp);
+	}
+
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(3, ("Unable to open file %s: %s\n", fname,
+			  nt_errstr(status)));
+		return status;
+	}
+
+	secdesc_size = SMB_VFS_GET_NT_ACL(fsp, fname,
+					  (OWNER_SECURITY_INFORMATION |
+					   GROUP_SECURITY_INFORMATION |
+					   DACL_SECURITY_INFORMATION),
+					  &secdesc);
+	if (secdesc_size == 0) {
+		DEBUG(5, ("Unable to get NT ACL for file %s\n", fname));
+		status = NT_STATUS_ACCESS_DENIED;
+		goto done;
+	}
+
+	*psd = talloc_move(mem_ctx, &secdesc);
+	status = NT_STATUS_OK;
+
+done:
+	close_file(fsp, NORMAL_CLOSE);
+	return status;
+}
+
+static BOOL can_access_file_acl(struct connection_struct *conn,
+				const char * fname, SMB_STRUCT_STAT *psbuf,
+				uint32_t access_mask)
+{
+	BOOL result;
+	NTSTATUS status;
+	uint32_t access_granted;
+	struct security_descriptor_info *secdesc = NULL;
+
+	status = conn_get_nt_acl(tmp_talloc_ctx(), conn, fname, psbuf, &secdesc);
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(5, ("Could not get acl: %s\n", nt_errstr(status)));
+		return False;
+	}
+
+	result = se_access_check(secdesc, current_user.nt_user_token,
+				 access_mask, &access_granted, &status);
+	TALLOC_FREE(secdesc);
+	return result;
+}
+
+/****************************************************************************
+ Actually emulate the in-kernel access checking for delete access. We need
+ this to successfully return ACCESS_DENIED on a file open for delete access.
+****************************************************************************/
+
+BOOL can_delete_file_in_directory(connection_struct *conn, const char *fname)
+{
+	SMB_STRUCT_STAT sbuf;  
+	pstring dname;
+
+	if (!CAN_WRITE(conn)) {
+		return False;
+	}
+
+	/* Get the parent directory permission mask and owners. */
+	pstrcpy(dname, parent_dirname(fname));
+	if(SMB_VFS_STAT(conn, dname, &sbuf) != 0) {
+		return False;
+	}
+
+	/* fast paths first */
+
+	if (!S_ISDIR(sbuf.st_mode)) {
+		return False;
+	}
+	if (current_user.ut.uid == 0 || conn->admin_user) {
+		/* I'm sorry sir, I didn't know you were root... */
+		return True;
+	}
+
+	/* Check primary owner write access. */
+	if (current_user.ut.uid == sbuf.st_uid) {
+		return (sbuf.st_mode & S_IWUSR) ? True : False;
+	}
+
+#ifdef S_ISVTX
+	/* sticky bit means delete only by owner or root. */
+	if (sbuf.st_mode & S_ISVTX) {
+		SMB_STRUCT_STAT sbuf_file;  
+		if(SMB_VFS_STAT(conn, fname, &sbuf_file) != 0) {
+			if (errno == ENOENT) {
+				/* If the file doesn't already exist then
+				 * yes we'll be able to delete it. */
+				return True;
+			}
+			return False;
+		}
+		/*
+		 * Patch from SATOH Fumiyasu <fumiyas at miraclelinux.com>
+		 * for bug #3348. Don't assume owning sticky bit
+		 * directory means write access allowed.
+		 */
+		if (current_user.ut.uid != sbuf_file.st_uid) {
+			return False;
+		}
+	}
+#endif
+
+	/* now for ACL checks */
+
+	return can_access_file_acl(conn, dname, &sbuf, FILE_WRITE_DATA);
+}
+
+/****************************************************************************
+ Actually emulate the in-kernel access checking for read/write access. We need
+ this to successfully check for ability to write for dos filetimes.
+ Note this doesn't take into account share write permissions.
+****************************************************************************/
+
+BOOL can_access_file(connection_struct *conn, const char *fname, SMB_STRUCT_STAT *psbuf, uint32 access_mask)
+{
+	if (!(access_mask & (FILE_READ_DATA|FILE_WRITE_DATA))) {
+		return False;
+	}
+	access_mask &= (FILE_READ_DATA|FILE_WRITE_DATA);
+
+	/* some fast paths first */
+
+	DEBUG(10,("can_access_file: requesting 0x%x on file %s\n",
+		(unsigned int)access_mask, fname ));
+
+	if (current_user.ut.uid == 0 || conn->admin_user) {
+		/* I'm sorry sir, I didn't know you were root... */
+		return True;
+	}
+
+	if (!VALID_STAT(*psbuf)) {
+		/* Get the file permission mask and owners. */
+		if(SMB_VFS_STAT(conn, fname, psbuf) != 0) {
+			return False;
+		}
+	}
+
+	/* Check primary owner access. */
+	if (current_user.ut.uid == psbuf->st_uid) {
+		switch (access_mask) {
+			case FILE_READ_DATA:
+				return (psbuf->st_mode & S_IRUSR) ? True : False;
+
+			case FILE_WRITE_DATA:
+				return (psbuf->st_mode & S_IWUSR) ? True : False;
+
+			default: /* FILE_READ_DATA|FILE_WRITE_DATA */
+
+				if ((psbuf->st_mode & (S_IWUSR|S_IRUSR)) == (S_IWUSR|S_IRUSR)) {
+					return True;
+				} else {
+					return False;
+				}
+		}
+	}
+
+	/* now for ACL checks */
+
+	return can_access_file_acl(conn, fname, psbuf, access_mask);
+}
+
+/****************************************************************************
+ Userspace check for write access.
+ Note this doesn't take into account share write permissions.
+****************************************************************************/
+
+BOOL can_write_to_file(connection_struct *conn, const char *fname, SMB_STRUCT_STAT *psbuf)
+{
+	return can_access_file(conn, fname, psbuf, FILE_WRITE_DATA);
+}
+
 /********************************************************************
  Pull the NT ACL from a file on disk or the OpenEventlog() access
  check.  Caller is responsible for freeing the returned security
  descriptor via TALLOC_FREE().  This is designed for dealing with 
  user space access checks in smbd outside of the VFS.  For example,
  checking access rights in OpenEventlog().
-
+ 
  Assume we are dealing with files (for now)
 ********************************************************************/
 
-SEC_DESC *get_nt_acl_no_snum( TALLOC_CTX *ctx, const char *fname)
+SEC_DESC* get_nt_acl_no_snum( TALLOC_CTX *ctx, const char *fname)
 {
 	SEC_DESC *psd, *ret_sd;
 	connection_struct conn;
 	files_struct finfo;
 	struct fd_handle fh;
-
+	pstring path;
+	pstring filename;
+	
 	ZERO_STRUCT( conn );
-
+	
 	if ( !(conn.mem_ctx = talloc_init( "novfs_get_nt_acl" )) ) {
 		DEBUG(0,("get_nt_acl_no_snum: talloc() failed!\n"));
 		return NULL;
@@ -4280,33 +4397,35 @@
 	}
 
 	conn.params->service = -1;
-
-	set_conn_connectpath(&conn, "/");
-
+	
+	pstrcpy( path, "/" );
+	set_conn_connectpath(&conn, path);
+	
 	if (!smbd_vfs_init(&conn)) {
 		DEBUG(0,("get_nt_acl_no_snum: Unable to create a fake connection struct!\n"));
 		conn_free_internal( &conn );
 		return NULL;
         }
-
+	
 	ZERO_STRUCT( finfo );
 	ZERO_STRUCT( fh );
-
+	
 	finfo.fnum = -1;
 	finfo.conn = &conn;
 	finfo.fh = &fh;
 	finfo.fh->fd = -1;
-	finfo.fsp_name = CONST_DISCARD(char *,fname);
-
-	if (!NT_STATUS_IS_OK(posix_fget_nt_acl( &finfo, DACL_SECURITY_INFORMATION, &psd))) {
+	pstrcpy( filename, fname );
+	finfo.fsp_name = filename;
+	
+	if (get_nt_acl( &finfo, DACL_SECURITY_INFORMATION, &psd ) == 0) {
 		DEBUG(0,("get_nt_acl_no_snum: get_nt_acl returned zero.\n"));
 		conn_free_internal( &conn );
 		return NULL;
 	}
-
+	
 	ret_sd = dup_sec_desc( ctx, psd );
-
+	
 	conn_free_internal( &conn );
-
+	
 	return ret_sd;
 }

Modified: branches/samba/upstream/source/smbd/process.c
===================================================================
--- branches/samba/upstream/source/smbd/process.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/process.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -2,11 +2,11 @@
    Unix SMB/CIFS implementation.
    process incoming packets - main loop
    Copyright (C) Andrew Tridgell 1992-1998
-   Copyright (C) Volker Lendecke 2005-2007
+   Copyright (C) Volker Lendecke 2005
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,14 +15,22 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
+uint16 global_smbpid;
+extern int keepalive;
+extern struct auth_context *negprot_global_auth_context;
 extern int smb_echo_count;
 
-/*
+static char *InBuffer = NULL;
+static char *OutBuffer = NULL;
+static char *current_inbuf = NULL;
+
+/* 
  * Size of data we can send to client. Set
  *  by the client for all protocols above CORE.
  *  Set by us for CORE protocol.
@@ -34,370 +42,23 @@
  */
 int max_recv = BUFFER_SIZE;
 
+extern int last_message;
+extern int smb_read_error;
 SIG_ATOMIC_T reload_after_sighup = 0;
 SIG_ATOMIC_T got_sig_term = 0;
-extern bool global_machine_password_needs_changing;
+extern BOOL global_machine_password_needs_changing;
 extern int max_send;
 
-/* Accessor function for smb_read_error for smbd functions. */
-
 /****************************************************************************
- Send an smb to a fd.
+ Function to return the current request mid from Inbuffer.
 ****************************************************************************/
 
-bool srv_send_smb(int fd, char *buffer, bool do_encrypt)
+uint16 get_current_mid(void)
 {
-	size_t len;
-	size_t nwritten=0;
-	ssize_t ret;
-	char *buf_out = buffer;
-
-	/* Sign the outgoing packet if required. */
-	srv_calculate_sign_mac(buf_out);
-
-	if (do_encrypt) {
-		NTSTATUS status = srv_encrypt_buffer(buffer, &buf_out);
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(0, ("send_smb: SMB encryption failed "
-				"on outgoing packet! Error %s\n",
-				nt_errstr(status) ));
-			return false;
-		}
-	}
-
-	len = smb_len(buf_out) + 4;
-
-	while (nwritten < len) {
-		ret = write_data(fd,buf_out+nwritten,len - nwritten);
-		if (ret <= 0) {
-			DEBUG(0,("Error writing %d bytes to client. %d. (%s)\n",
-				(int)len,(int)ret, strerror(errno) ));
-			srv_free_enc_buffer(buf_out);
-			return false;
-		}
-		nwritten += ret;
-	}
-
-	srv_free_enc_buffer(buf_out);
-	return true;
+	return SVAL(InBuffer,smb_mid);
 }
 
-/*******************************************************************
- Setup the word count and byte count for a smb message.
-********************************************************************/
-
-int srv_set_message(char *buf,
-                        int num_words,
-                        int num_bytes,
-                        bool zero)
-{
-	if (zero && (num_words || num_bytes)) {
-		memset(buf + smb_size,'\0',num_words*2 + num_bytes);
-	}
-	SCVAL(buf,smb_wct,num_words);
-	SSVAL(buf,smb_vwv + num_words*SIZEOFWORD,num_bytes);
-	smb_setlen(buf,(smb_size + num_words*2 + num_bytes - 4));
-	return (smb_size + num_words*2 + num_bytes);
-}
-
-static bool valid_smb_header(const uint8_t *inbuf)
-{
-	if (is_encrypted_packet(inbuf)) {
-		return true;
-	}
-	return (strncmp(smb_base(inbuf),"\377SMB",4) == 0);
-}
-
-/* Socket functions for smbd packet processing. */
-
-static bool valid_packet_size(size_t len)
-{
-	/*
-	 * A WRITEX with CAP_LARGE_WRITEX can be 64k worth of data plus 65 bytes
-	 * of header. Don't print the error if this fits.... JRA.
-	 */
-
-	if (len > (BUFFER_SIZE + LARGE_WRITEX_HDR_SIZE)) {
-		DEBUG(0,("Invalid packet length! (%lu bytes).\n",
-					(unsigned long)len));
-		return false;
-	}
-	return true;
-}
-
-static NTSTATUS read_packet_remainder(int fd, char *buffer,
-				      unsigned int timeout, ssize_t len)
-{
-	if (len <= 0) {
-		return NT_STATUS_OK;
-	}
-
-	return read_socket_with_timeout(fd, buffer, len, len, timeout, NULL);
-}
-
 /****************************************************************************
- Attempt a zerocopy writeX read. We know here that len > smb_size-4
-****************************************************************************/
-
-/*
- * Unfortunately, earlier versions of smbclient/libsmbclient
- * don't send this "standard" writeX header. I've fixed this
- * for 3.2 but we'll use the old method with earlier versions.
- * Windows and CIFSFS at least use this standard size. Not
- * sure about MacOSX.
- */
-
-#define STANDARD_WRITE_AND_X_HEADER_SIZE (smb_size - 4 + /* basic header */ \
-				(2*14) + /* word count (including bcc) */ \
-				1 /* pad byte */)
-
-static NTSTATUS receive_smb_raw_talloc_partial_read(TALLOC_CTX *mem_ctx,
-						    const char lenbuf[4],
-						    int fd, char **buffer,
-						    unsigned int timeout,
-						    size_t *p_unread,
-						    size_t *len_ret)
-{
-	/* Size of a WRITEX call (+4 byte len). */
-	char writeX_header[4 + STANDARD_WRITE_AND_X_HEADER_SIZE];
-	ssize_t len = smb_len_large(lenbuf); /* Could be a UNIX large writeX. */
-	ssize_t toread;
-	NTSTATUS status;
-
-	memcpy(writeX_header, lenbuf, sizeof(lenbuf));
-
-	status = read_socket_with_timeout(
-		fd, writeX_header + 4,
-		STANDARD_WRITE_AND_X_HEADER_SIZE,
-		STANDARD_WRITE_AND_X_HEADER_SIZE,
-		timeout, NULL);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	/*
-	 * Ok - now try and see if this is a possible
-	 * valid writeX call.
-	 */
-
-	if (is_valid_writeX_buffer((uint8_t *)writeX_header)) {
-		/*
-		 * If the data offset is beyond what
-		 * we've read, drain the extra bytes.
-		 */
-		uint16_t doff = SVAL(writeX_header,smb_vwv11);
-		ssize_t newlen;
-
-		if (doff > STANDARD_WRITE_AND_X_HEADER_SIZE) {
-			size_t drain = doff - STANDARD_WRITE_AND_X_HEADER_SIZE;
-			if (drain_socket(smbd_server_fd(), drain) != drain) {
-	                        smb_panic("receive_smb_raw_talloc_partial_read:"
-					" failed to drain pending bytes");
-	                }
-		} else {
-			doff = STANDARD_WRITE_AND_X_HEADER_SIZE;
-		}
-
-		/* Spoof down the length and null out the bcc. */
-		set_message_bcc(writeX_header, 0);
-		newlen = smb_len(writeX_header);
-
-		/* Copy the header we've written. */
-
-		*buffer = (char *)TALLOC_MEMDUP(mem_ctx,
-				writeX_header,
-				sizeof(writeX_header));
-
-		if (*buffer == NULL) {
-			DEBUG(0, ("Could not allocate inbuf of length %d\n",
-				  (int)sizeof(writeX_header)));
-			return NT_STATUS_NO_MEMORY;
-		}
-
-		/* Work out the remaining bytes. */
-		*p_unread = len - STANDARD_WRITE_AND_X_HEADER_SIZE;
-		*len_ret = newlen + 4;
-		return NT_STATUS_OK;
-	}
-
-	if (!valid_packet_size(len)) {
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	/*
-	 * Not a valid writeX call. Just do the standard
-	 * talloc and return.
-	 */
-
-	*buffer = TALLOC_ARRAY(mem_ctx, char, len+4);
-
-	if (*buffer == NULL) {
-		DEBUG(0, ("Could not allocate inbuf of length %d\n",
-			  (int)len+4));
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	/* Copy in what we already read. */
-	memcpy(*buffer,
-		writeX_header,
-		4 + STANDARD_WRITE_AND_X_HEADER_SIZE);
-	toread = len - STANDARD_WRITE_AND_X_HEADER_SIZE;
-
-	if(toread > 0) {
-		status = read_packet_remainder(
-			fd, (*buffer) + 4 + STANDARD_WRITE_AND_X_HEADER_SIZE,
-			timeout, toread);
-
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(10, ("receive_smb_raw_talloc_partial_read: %s\n",
-				   nt_errstr(status)));
-			return status;
-		}
-	}
-
-	*len_ret = len + 4;
-	return NT_STATUS_OK;
-}
-
-static NTSTATUS receive_smb_raw_talloc(TALLOC_CTX *mem_ctx, int fd,
-				       char **buffer, unsigned int timeout,
-				       size_t *p_unread, size_t *plen)
-{
-	char lenbuf[4];
-	size_t len;
-	int min_recv_size = lp_min_receive_file_size();
-	NTSTATUS status;
-
-	*p_unread = 0;
-
-	status = read_smb_length_return_keepalive(fd, lenbuf, timeout, &len);
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10, ("receive_smb_raw: %s\n", nt_errstr(status)));
-		return status;
-	}
-
-	if (CVAL(lenbuf,0) == 0 &&
-			min_recv_size &&
-			smb_len_large(lenbuf) > min_recv_size && /* Could be a UNIX large writeX. */
-			!srv_is_signing_active()) {
-
-		return receive_smb_raw_talloc_partial_read(
-			mem_ctx, lenbuf, fd, buffer, timeout, p_unread, plen);
-	}
-
-	if (!valid_packet_size(len)) {
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	/*
-	 * The +4 here can't wrap, we've checked the length above already.
-	 */
-
-	*buffer = TALLOC_ARRAY(mem_ctx, char, len+4);
-
-	if (*buffer == NULL) {
-		DEBUG(0, ("Could not allocate inbuf of length %d\n",
-			  (int)len+4));
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	memcpy(*buffer, lenbuf, sizeof(lenbuf));
-
-	status = read_packet_remainder(fd, (*buffer)+4, timeout, len);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	*plen = len + 4;
-	return NT_STATUS_OK;
-}
-
-static NTSTATUS receive_smb_talloc(TALLOC_CTX *mem_ctx,	int fd,
-				   char **buffer, unsigned int timeout,
-				   size_t *p_unread, bool *p_encrypted,
-				   size_t *p_len)
-{
-	size_t len = 0;
-	NTSTATUS status;
-
-	*p_encrypted = false;
-
-	status = receive_smb_raw_talloc(mem_ctx, fd, buffer, timeout,
-					p_unread, &len);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (is_encrypted_packet((uint8_t *)*buffer)) {
-		status = srv_decrypt_buffer(*buffer);
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(0, ("receive_smb_talloc: SMB decryption failed on "
-				"incoming packet! Error %s\n",
-				nt_errstr(status) ));
-			return status;
-		}
-		*p_encrypted = true;
-	}
-
-	/* Check the incoming SMB signature. */
-	if (!srv_check_sign_mac(*buffer, true)) {
-		DEBUG(0, ("receive_smb: SMB Signature verification failed on "
-			  "incoming packet!\n"));
-		return NT_STATUS_INVALID_NETWORK_RESPONSE;
-	}
-
-	*p_len = len;
-	return NT_STATUS_OK;
-}
-
-/*
- * Initialize a struct smb_request from an inbuf
- */
-
-void init_smb_request(struct smb_request *req,
-			const uint8 *inbuf,
-			size_t unread_bytes,
-			bool encrypted)
-{
-	size_t req_size = smb_len(inbuf) + 4;
-	/* Ensure we have at least smb_size bytes. */
-	if (req_size < smb_size) {
-		DEBUG(0,("init_smb_request: invalid request size %u\n",
-			(unsigned int)req_size ));
-		exit_server_cleanly("Invalid SMB request");
-	}
-	req->flags2 = SVAL(inbuf, smb_flg2);
-	req->smbpid = SVAL(inbuf, smb_pid);
-	req->mid    = SVAL(inbuf, smb_mid);
-	req->vuid   = SVAL(inbuf, smb_uid);
-	req->tid    = SVAL(inbuf, smb_tid);
-	req->wct    = CVAL(inbuf, smb_wct);
-	req->unread_bytes = unread_bytes;
-	req->encrypted = encrypted;
-	req->conn = conn_find(req->tid);
-
-	/* Ensure we have at least wct words and 2 bytes of bcc. */
-	if (smb_size + req->wct*2 > req_size) {
-		DEBUG(0,("init_smb_request: invalid wct number %u (size %u)\n",
-			(unsigned int)req->wct,
-			(unsigned int)req_size));
-		exit_server_cleanly("Invalid SMB request");
-	}
-	/* Ensure bcc is correct. */
-	if (((uint8 *)smb_buf(inbuf)) + smb_buflen(inbuf) > inbuf + req_size) {
-		DEBUG(0,("init_smb_request: invalid bcc number %u "
-			"(wct = %u, size %u)\n",
-			(unsigned int)smb_buflen(inbuf),
-			(unsigned int)req->wct,
-			(unsigned int)req_size));
-		exit_server_cleanly("Invalid SMB request");
-	}
-	req->inbuf  = inbuf;
-	req->outbuf = NULL;
-}
-
-/****************************************************************************
  structure to hold a linked list of queued messages.
  for processing.
 ****************************************************************************/
@@ -409,12 +70,11 @@
  for processing.
 ****************************************************************************/
 
-static bool push_queued_message(struct smb_request *req,
+static BOOL push_queued_message(char *buf, int msg_len,
 				struct timeval request_time,
 				struct timeval end_time,
 				char *private_data, size_t private_len)
 {
-	int msg_len = smb_len(req->inbuf) + 4;
 	struct pending_message_list *msg;
 
 	msg = TALLOC_ZERO_P(NULL, struct pending_message_list);
@@ -424,7 +84,7 @@
 		return False;
 	}
 
-	msg->buf = data_blob_talloc(msg, req->inbuf, msg_len);
+	msg->buf = data_blob_talloc(msg, buf, msg_len);
 	if(msg->buf.data == NULL) {
 		DEBUG(0,("push_message: malloc fail (2)\n"));
 		TALLOC_FREE(msg);
@@ -433,7 +93,6 @@
 
 	msg->request_time = request_time;
 	msg->end_time = end_time;
-	msg->encrypted = req->encrypted;
 
 	if (private_data) {
 		msg->private_data = data_blob_talloc(msg, private_data,
@@ -506,7 +165,7 @@
  Return true if this mid is on the deferred queue.
 ****************************************************************************/
 
-bool open_was_deferred(uint16 mid)
+BOOL open_was_deferred(uint16 mid)
 {
 	struct pending_message_list *pml;
 
@@ -539,38 +198,30 @@
  messages ready for processing.
 ****************************************************************************/
 
-bool push_deferred_smb_message(struct smb_request *req,
+BOOL push_deferred_smb_message(uint16 mid,
 			       struct timeval request_time,
 			       struct timeval timeout,
 			       char *private_data, size_t priv_len)
 {
 	struct timeval end_time;
 
-	if (req->unread_bytes) {
-		DEBUG(0,("push_deferred_smb_message: logic error ! "
-			"unread_bytes = %u\n",
-			(unsigned int)req->unread_bytes ));
-		smb_panic("push_deferred_smb_message: "
-			"logic error unread_bytes != 0" );
-	}
-
 	end_time = timeval_sum(&request_time, &timeout);
 
 	DEBUG(10,("push_deferred_open_smb_message: pushing message len %u mid %u "
 		  "timeout time [%u.%06u]\n",
-		  (unsigned int) smb_len(req->inbuf)+4, (unsigned int)req->mid,
+		  (unsigned int) smb_len(current_inbuf)+4, (unsigned int)mid,
 		  (unsigned int)end_time.tv_sec,
 		  (unsigned int)end_time.tv_usec));
 
-	return push_queued_message(req, request_time, end_time,
+	return push_queued_message(current_inbuf, smb_len(current_inbuf)+4,
+				   request_time, end_time,
 				   private_data, priv_len);
 }
 
 struct idle_event {
 	struct timed_event *te;
 	struct timeval interval;
-	char *name;
-	bool (*handler)(const struct timeval *now, void *private_data);
+	BOOL (*handler)(const struct timeval *now, void *private_data);
 	void *private_data;
 };
 
@@ -590,20 +241,18 @@
 		return;
 	}
 
-	event->te = event_add_timed(ctx, event,
+	event->te = event_add_timed(smbd_event_context(), event,
 				    timeval_sum(now, &event->interval),
-				    event->name,
+				    "idle_event_handler",
 				    idle_event_handler, event);
 
 	/* We can't do much but fail here. */
 	SMB_ASSERT(event->te != NULL);
 }
 
-struct idle_event *event_add_idle(struct event_context *event_ctx,
-				  TALLOC_CTX *mem_ctx,
+struct idle_event *add_idle_event(TALLOC_CTX *mem_ctx,
 				  struct timeval interval,
-				  const char *name,
-				  bool (*handler)(const struct timeval *now,
+				  BOOL (*handler)(const struct timeval *now,
 						  void *private_data),
 				  void *private_data)
 {
@@ -620,15 +269,9 @@
 	result->handler = handler;
 	result->private_data = private_data;
 
-	if (!(result->name = talloc_asprintf(result, "idle_evt(%s)", name))) {
-		DEBUG(0, ("talloc failed\n"));
-		TALLOC_FREE(result);
-		return NULL;
-	}
-
-	result->te = event_add_timed(event_ctx, result,
+	result->te = event_add_timed(smbd_event_context(), result,
 				     timeval_sum(&now, &interval),
-				     result->name,
+				     "idle_event_handler",
 				     idle_event_handler, result);
 	if (result->te == NULL) {
 		DEBUG(0, ("event_add_timed failed\n"));
@@ -650,7 +293,7 @@
 
 	process_aio_queue();
 
-	process_kernel_oplocks(smbd_messaging_context(), pfds);
+	process_kernel_oplocks(pfds);
 
 	/* Do the aio check again after receive_local_message as it does a
 	   select and may have eaten our signal. */
@@ -705,18 +348,14 @@
 The timeout is in milliseconds
 ****************************************************************************/
 
-static NTSTATUS receive_message_or_smb(TALLOC_CTX *mem_ctx, char **buffer,
-				       size_t *buffer_len, int timeout,
-				       size_t *p_unread, bool *p_encrypted)
+static BOOL receive_message_or_smb(char *buffer, int buffer_len, int timeout)
 {
 	fd_set r_fds, w_fds;
 	int selrtn;
 	struct timeval to;
 	int maxfd = 0;
-	size_t len = 0;
-	NTSTATUS status;
 
-	*p_unread = 0;
+	smb_read_error = 0;
 
  again:
 
@@ -733,14 +372,14 @@
 	 * messages as we need to synchronously process any messages
 	 * we may have sent to ourselves from the previous SMB.
 	 */
-	message_dispatch(smbd_messaging_context());
+	message_dispatch();
 
 	/*
 	 * Check to see if we already have a message on the deferred open queue
 	 * and it's time to schedule.
 	 */
   	if(deferred_open_queue != NULL) {
-		bool pop_message = False;
+		BOOL pop_message = False;
 		struct pending_message_list *msg = deferred_open_queue;
 
 		if (timeval_is_zero(&msg->end_time)) {
@@ -765,20 +404,12 @@
 		}
 
 		if (pop_message) {
-
-			*buffer = (char *)talloc_memdup(mem_ctx, msg->buf.data,
-							msg->buf.length);
-			if (*buffer == NULL) {
-				DEBUG(0, ("talloc failed\n"));
-				return NT_STATUS_NO_MEMORY;
-			}
-			*buffer_len = msg->buf.length;
-			*p_encrypted = msg->encrypted;
-
+			memcpy(buffer, msg->buf.data, MIN(buffer_len, msg->buf.length));
+  
 			/* We leave this message on the queue so the open code can
 			   know this is a retry. */
 			DEBUG(5,("receive_message_or_smb: returning deferred open smb message.\n"));
-			return NT_STATUS_OK;
+			return True;
 		}
 	}
 
@@ -864,12 +495,14 @@
 	/* Check if error */
 	if (selrtn == -1) {
 		/* something is wrong. Maybe the socket is dead? */
-		return map_nt_error_from_unix(errno);
-	}
-
+		smb_read_error = READ_ERROR;
+		return False;
+	} 
+    
 	/* Did we timeout ? */
 	if (selrtn == 0) {
-		return NT_STATUS_IO_TIMEOUT;
+		smb_read_error = READ_TIMEOUT;
+		return False;
 	}
 
 	/*
@@ -888,25 +521,8 @@
 		goto again;
 	}
 
-	/*
-	 * We've just woken up from a protentially long select sleep.
-	 * Ensure we process local messages as we need to synchronously
-	 * process any messages from other smbd's to avoid file rename race
-	 * conditions. This call is cheap if there are no messages waiting.
-	 * JRA.
-	 */
-	message_dispatch(smbd_messaging_context());
-
-	status = receive_smb_talloc(mem_ctx, smbd_server_fd(), buffer, 0,
-				    p_unread, p_encrypted, &len);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	*buffer_len = len;
-
-	return NT_STATUS_OK;
+	return receive_smb(smbd_server_fd(), buffer,
+			BUFFER_SIZE + LARGE_WRITEX_HDR_SIZE, 0);
 }
 
 /*
@@ -951,7 +567,7 @@
 		return;
 	}
 
-	process_kernel_oplocks(smbd_messaging_context(), NULL);
+	process_kernel_oplocks(NULL);
 
 	return;
 }
@@ -978,7 +594,7 @@
 */
 static const struct smb_message_struct {
 	const char *name;
-	void (*fn_new)(struct smb_request *req);
+	int (*fn)(connection_struct *conn, char *, char *, int, int);
 	int flags;
 } smb_messages[256] = {
 
@@ -988,7 +604,7 @@
 /* 0x03 */ { "SMBcreate",reply_mknew,AS_USER},
 /* 0x04 */ { "SMBclose",reply_close,AS_USER | CAN_IPC },
 /* 0x05 */ { "SMBflush",reply_flush,AS_USER},
-/* 0x06 */ { "SMBunlink",reply_unlink,AS_USER | NEED_WRITE },
+/* 0x06 */ { "SMBunlink",reply_unlink,AS_USER | NEED_WRITE }, 
 /* 0x07 */ { "SMBmv",reply_mv,AS_USER | NEED_WRITE },
 /* 0x08 */ { "SMBgetatr",reply_getatr,AS_USER},
 /* 0x09 */ { "SMBsetatr",reply_setatr,AS_USER | NEED_WRITE},
@@ -997,7 +613,7 @@
 /* 0x0c */ { "SMBlock",reply_lock,AS_USER},
 /* 0x0d */ { "SMBunlock",reply_unlock,AS_USER},
 /* 0x0e */ { "SMBctemp",reply_ctemp,AS_USER },
-/* 0x0f */ { "SMBmknew",reply_mknew,AS_USER},
+/* 0x0f */ { "SMBmknew",reply_mknew,AS_USER}, 
 /* 0x10 */ { "SMBcheckpath",reply_checkpath,AS_USER},
 /* 0x11 */ { "SMBexit",reply_exit,DO_CHDIR},
 /* 0x12 */ { "SMBlseek",reply_lseek,AS_USER},
@@ -1010,11 +626,11 @@
 /* 0x19 */ { NULL, NULL, 0 },
 /* 0x1a */ { "SMBreadbraw",reply_readbraw,AS_USER},
 /* 0x1b */ { "SMBreadBmpx",reply_readbmpx,AS_USER},
-/* 0x1c */ { "SMBreadBs",reply_readbs,AS_USER },
+/* 0x1c */ { "SMBreadBs",NULL,0 },
 /* 0x1d */ { "SMBwritebraw",reply_writebraw,AS_USER},
 /* 0x1e */ { "SMBwriteBmpx",reply_writebmpx,AS_USER},
 /* 0x1f */ { "SMBwriteBs",reply_writebs,AS_USER},
-/* 0x20 */ { "SMBwritec", NULL,0},
+/* 0x20 */ { "SMBwritec",NULL,0},
 /* 0x21 */ { NULL, NULL, 0 },
 /* 0x22 */ { "SMBsetattrE",reply_setattrE,AS_USER | NEED_WRITE },
 /* 0x23 */ { "SMBgetattrE",reply_getattrE,AS_USER },
@@ -1022,9 +638,9 @@
 /* 0x25 */ { "SMBtrans",reply_trans,AS_USER | CAN_IPC },
 /* 0x26 */ { "SMBtranss",reply_transs,AS_USER | CAN_IPC},
 /* 0x27 */ { "SMBioctl",reply_ioctl,0},
-/* 0x28 */ { "SMBioctls", NULL,AS_USER},
+/* 0x28 */ { "SMBioctls",NULL,AS_USER},
 /* 0x29 */ { "SMBcopy",reply_copy,AS_USER | NEED_WRITE },
-/* 0x2a */ { "SMBmove", NULL,AS_USER | NEED_WRITE },
+/* 0x2a */ { "SMBmove",NULL,AS_USER | NEED_WRITE },
 /* 0x2b */ { "SMBecho",reply_echo,0},
 /* 0x2c */ { "SMBwriteclose",reply_writeclose,AS_USER},
 /* 0x2d */ { "SMBopenX",reply_open_and_X,AS_USER | CAN_IPC },
@@ -1032,10 +648,10 @@
 /* 0x2f */ { "SMBwriteX",reply_write_and_X,AS_USER | CAN_IPC },
 /* 0x30 */ { NULL, NULL, 0 },
 /* 0x31 */ { NULL, NULL, 0 },
-/* 0x32 */ { "SMBtrans2",reply_trans2, AS_USER | CAN_IPC },
-/* 0x33 */ { "SMBtranss2",reply_transs2, AS_USER},
-/* 0x34 */ { "SMBfindclose",reply_findclose,AS_USER},
-/* 0x35 */ { "SMBfindnclose",reply_findnclose,AS_USER},
+/* 0x32 */ { "SMBtrans2", reply_trans2, AS_USER | CAN_IPC },
+/* 0x33 */ { "SMBtranss2", reply_transs2, AS_USER},
+/* 0x34 */ { "SMBfindclose", reply_findclose,AS_USER},
+/* 0x35 */ { "SMBfindnclose", reply_findnclose, AS_USER},
 /* 0x36 */ { NULL, NULL, 0 },
 /* 0x37 */ { NULL, NULL, 0 },
 /* 0x38 */ { NULL, NULL, 0 },
@@ -1098,7 +714,7 @@
 /* 0x71 */ { "SMBtdis",reply_tdis,DO_CHDIR},
 /* 0x72 */ { "SMBnegprot",reply_negprot,0},
 /* 0x73 */ { "SMBsesssetupX",reply_sesssetup_and_X,0},
-/* 0x74 */ { "SMBulogoffX",reply_ulogoffX, 0}, /* ulogoff doesn't give a valid TID */
+/* 0x74 */ { "SMBulogoffX", reply_ulogoffX, 0}, /* ulogoff doesn't give a valid TID */
 /* 0x75 */ { "SMBtconX",reply_tcon_and_X,0},
 /* 0x76 */ { NULL, NULL, 0 },
 /* 0x77 */ { NULL, NULL, 0 },
@@ -1142,12 +758,12 @@
 /* 0x9d */ { NULL, NULL, 0 },
 /* 0x9e */ { NULL, NULL, 0 },
 /* 0x9f */ { NULL, NULL, 0 },
-/* 0xa0 */ { "SMBnttrans",reply_nttrans, AS_USER | CAN_IPC },
-/* 0xa1 */ { "SMBnttranss",reply_nttranss, AS_USER | CAN_IPC },
-/* 0xa2 */ { "SMBntcreateX",reply_ntcreate_and_X, AS_USER | CAN_IPC },
+/* 0xa0 */ { "SMBnttrans", reply_nttrans, AS_USER | CAN_IPC },
+/* 0xa1 */ { "SMBnttranss", reply_nttranss, AS_USER | CAN_IPC },
+/* 0xa2 */ { "SMBntcreateX", reply_ntcreate_and_X, AS_USER | CAN_IPC },
 /* 0xa3 */ { NULL, NULL, 0 },
-/* 0xa4 */ { "SMBntcancel",reply_ntcancel, 0 },
-/* 0xa5 */ { "SMBntrename",reply_ntrename, AS_USER | NEED_WRITE },
+/* 0xa4 */ { "SMBntcancel", reply_ntcancel, 0 },
+/* 0xa5 */ { "SMBntrename", reply_ntrename, AS_USER | NEED_WRITE },
 /* 0xa6 */ { NULL, NULL, 0 },
 /* 0xa7 */ { NULL, NULL, 0 },
 /* 0xa8 */ { NULL, NULL, 0 },
@@ -1191,10 +807,10 @@
 /* 0xce */ { NULL, NULL, 0 },
 /* 0xcf */ { NULL, NULL, 0 },
 /* 0xd0 */ { "SMBsends",reply_sends,AS_GUEST},
-/* 0xd1 */ { "SMBsendb", NULL,AS_GUEST},
-/* 0xd2 */ { "SMBfwdname", NULL,AS_GUEST},
-/* 0xd3 */ { "SMBcancelf", NULL,AS_GUEST},
-/* 0xd4 */ { "SMBgetmac", NULL,AS_GUEST},
+/* 0xd1 */ { "SMBsendb",NULL,AS_GUEST},
+/* 0xd2 */ { "SMBfwdname",NULL,AS_GUEST},
+/* 0xd3 */ { "SMBcancelf",NULL,AS_GUEST},
+/* 0xd4 */ { "SMBgetmac",NULL,AS_GUEST},
 /* 0xd5 */ { "SMBsendstrt",reply_sendstrt,AS_GUEST},
 /* 0xd6 */ { "SMBsendend",reply_sendend,AS_GUEST},
 /* 0xd7 */ { "SMBsendtxt",reply_sendtxt,AS_GUEST},
@@ -1242,62 +858,19 @@
 };
 
 /*******************************************************************
- allocate and initialize a reply packet
-********************************************************************/
-
-void reply_outbuf(struct smb_request *req, uint8 num_words, uint32 num_bytes)
-{
-	/*
-         * Protect against integer wrap
-         */
-	if ((num_bytes > 0xffffff)
-	    || ((num_bytes + smb_size + num_words*2) > 0xffffff)) {
-		char *msg;
-		if (asprintf(&msg, "num_bytes too large: %u",
-			     (unsigned)num_bytes) == -1) {
-			msg = CONST_DISCARD(char *, "num_bytes too large");
-		}
-		smb_panic(msg);
-	}
-
-	if (!(req->outbuf = TALLOC_ARRAY(
-		      req, uint8,
-		      smb_size + num_words*2 + num_bytes))) {
-		smb_panic("could not allocate output buffer\n");
-	}
-
-	construct_reply_common((char *)req->inbuf, (char *)req->outbuf);
-	srv_set_message((char *)req->outbuf, num_words, num_bytes, false);
-	/*
-	 * Zero out the word area, the caller has to take care of the bcc area
-	 * himself
-	 */
-	if (num_words != 0) {
-		memset(req->outbuf + smb_vwv0, 0, num_words*2);
-	}
-
-	return;
-}
-
-
-/*******************************************************************
  Dump a packet to a file.
 ********************************************************************/
 
-static void smb_dump(const char *name, int type, const char *data, ssize_t len)
+static void smb_dump(const char *name, int type, char *data, ssize_t len)
 {
 	int fd, i;
-	char *fname = NULL;
-	if (DEBUGLEVEL < 50) {
-		return;
-	}
+	pstring fname;
+	if (DEBUGLEVEL < 50) return;
 
 	if (len < 4) len = smb_len(data)+4;
 	for (i=1;i<100;i++) {
-		if (asprintf(&fname, "/tmp/%s.%d.%s", name, i,
-			     type ? "req" : "resp") == -1) {
-			return;
-		}
+		slprintf(fname,sizeof(fname)-1, "/tmp/%s.%d.%s", name, i,
+				type ? "req" : "resp");
 		fd = open(fname, O_WRONLY|O_CREAT|O_EXCL, 0644);
 		if (fd != -1 || errno != EEXIST) break;
 	}
@@ -1308,258 +881,211 @@
 		close(fd);
 		DEBUG(0,("created %s len %lu\n", fname, (unsigned long)len));
 	}
-	SAFE_FREE(fname);
 }
 
-/****************************************************************************
- Prepare everything for calling the actual request function, and potentially
- call the request function via the "new" interface.
 
- Return False if the "legacy" function needs to be called, everything is
- prepared.
-
- Return True if we're done.
-
- I know this API sucks, but it is the one with the least code change I could
- find.
+/****************************************************************************
+ Do a switch on the message type, and return the response size
 ****************************************************************************/
 
-static connection_struct *switch_message(uint8 type, struct smb_request *req, int size)
+static int switch_message(int type,char *inbuf,char *outbuf,int size,int bufsize)
 {
-	int flags;
-	uint16 session_tag;
-	connection_struct *conn = NULL;
+	static pid_t pid= (pid_t)-1;
+	int outsize = 0;
 
-	static uint16 last_session_tag = UID_FIELD_INVALID;
+	type &= 0xff;
 
+	if (pid == (pid_t)-1)
+		pid = sys_getpid();
+
 	errno = 0;
 
-	/* Make sure this is an SMB packet. smb_size contains NetBIOS header
-	 * so subtract 4 from it. */
-	if (!valid_smb_header(req->inbuf)
-	    || (size < (smb_size - 4))) {
-		DEBUG(2,("Non-SMB packet of length %d. Terminating server\n",
-			 smb_len(req->inbuf)));
+	last_message = type;
+
+	/* Make sure this is an SMB packet. smb_size contains NetBIOS header so subtract 4 from it. */
+	if ((strncmp(smb_base(inbuf),"\377SMB",4) != 0) || (size < (smb_size - 4))) {
+		DEBUG(2,("Non-SMB packet of length %d. Terminating server\n",smb_len(inbuf)));
 		exit_server_cleanly("Non-SMB packet");
+		return(-1);
 	}
 
-	if (smb_messages[type].fn_new == NULL) {
+	/* yuck! this is an interim measure before we get rid of our
+		current inbuf/outbuf system */
+	global_smbpid = SVAL(inbuf,smb_pid);
+
+	if (smb_messages[type].fn == NULL) {
 		DEBUG(0,("Unknown message type %d!\n",type));
-		smb_dump("Unknown", 1, (char *)req->inbuf, size);
-		reply_unknown_new(req, type);
-		return NULL;
-	}
+		smb_dump("Unknown", 1, inbuf, size);
+		outsize = reply_unknown(inbuf,outbuf);
+	} else {
+		int flags = smb_messages[type].flags;
+		static uint16 last_session_tag = UID_FIELD_INVALID;
+		/* In share mode security we must ignore the vuid. */
+		uint16 session_tag = (lp_security() == SEC_SHARE) ? UID_FIELD_INVALID : SVAL(inbuf,smb_uid);
+		connection_struct *conn = conn_find(SVAL(inbuf,smb_tid));
 
-	flags = smb_messages[type].flags;
+		DEBUG(3,("switch message %s (pid %d) conn 0x%lx\n",smb_fn_name(type),(int)pid,(unsigned long)conn));
 
-	/* In share mode security we must ignore the vuid. */
-	session_tag = (lp_security() == SEC_SHARE)
-		? UID_FIELD_INVALID : req->vuid;
-	conn = req->conn;
+		smb_dump(smb_fn_name(type), 1, inbuf, size);
 
-	DEBUG(3,("switch message %s (pid %d) conn 0x%lx\n", smb_fn_name(type),
-		 (int)sys_getpid(), (unsigned long)conn));
+		/* Ensure this value is replaced in the incoming packet. */
+		SSVAL(inbuf,smb_uid,session_tag);
 
-	smb_dump(smb_fn_name(type), 1, (char *)req->inbuf, size);
+		/*
+		 * Ensure the correct username is in current_user_info.
+		 * This is a really ugly bugfix for problems with
+		 * multiple session_setup_and_X's being done and
+		 * allowing %U and %G substitutions to work correctly.
+		 * There is a reason this code is done here, don't
+		 * move it unless you know what you're doing... :-).
+		 * JRA.
+		 */
 
-	/* Ensure this value is replaced in the incoming packet. */
-	SSVAL(req->inbuf,smb_uid,session_tag);
+		if (session_tag != last_session_tag) {
+			user_struct *vuser = NULL;
 
-	/*
-	 * Ensure the correct username is in current_user_info.  This is a
-	 * really ugly bugfix for problems with multiple session_setup_and_X's
-	 * being done and allowing %U and %G substitutions to work correctly.
-	 * There is a reason this code is done here, don't move it unless you
-	 * know what you're doing... :-).
-	 * JRA.
-	 */
-
-	if (session_tag != last_session_tag) {
-		user_struct *vuser = NULL;
-
-		last_session_tag = session_tag;
-		if(session_tag != UID_FIELD_INVALID) {
-			vuser = get_valid_user_struct(session_tag);
-			if (vuser) {
-				set_current_user_info(&vuser->user);
+			last_session_tag = session_tag;
+			if(session_tag != UID_FIELD_INVALID) {
+				vuser = get_valid_user_struct(session_tag);           
+				if (vuser) {
+					set_current_user_info(&vuser->user);
+				}
 			}
 		}
-	}
 
-	/* Does this call need to be run as the connected user? */
-	if (flags & AS_USER) {
+		/* Does this call need to be run as the connected user? */
+		if (flags & AS_USER) {
 
-		/* Does this call need a valid tree connection? */
-		if (!conn) {
-			/*
-			 * Amazingly, the error code depends on the command
-			 * (from Samba4).
-			 */
-			if (type == SMBntcreateX) {
-				reply_nterror(req, NT_STATUS_INVALID_HANDLE);
-			} else {
-				reply_doserror(req, ERRSRV, ERRinvnid);
+			/* Does this call need a valid tree connection? */
+			if (!conn) {
+				/* Amazingly, the error code depends on the command (from Samba4). */
+				if (type == SMBntcreateX) {
+					return ERROR_NT(NT_STATUS_INVALID_HANDLE);
+				} else {
+					return ERROR_DOS(ERRSRV, ERRinvnid);
+				}
 			}
-			return NULL;
-		}
 
-		if (!change_to_user(conn,session_tag)) {
-			reply_nterror(req, NT_STATUS_DOS(ERRSRV, ERRbaduid));
-			return conn;
-		}
+			if (!change_to_user(conn,session_tag)) {
+				return(ERROR_NT(NT_STATUS_DOS(ERRSRV,ERRbaduid)));
+			}
 
-		/* All NEED_WRITE and CAN_IPC flags must also have AS_USER. */
+			/* All NEED_WRITE and CAN_IPC flags must also have AS_USER. */
 
-		/* Does it need write permission? */
-		if ((flags & NEED_WRITE) && !CAN_WRITE(conn)) {
-			reply_nterror(req, NT_STATUS_MEDIA_WRITE_PROTECTED);
-			return conn;
-		}
+			/* Does it need write permission? */
+			if ((flags & NEED_WRITE) && !CAN_WRITE(conn)) {
+				return ERROR_NT(NT_STATUS_MEDIA_WRITE_PROTECTED);
+			}
 
-		/* IPC services are limited */
-		if (IS_IPC(conn) && !(flags & CAN_IPC)) {
-			reply_doserror(req, ERRSRV,ERRaccess);
-			return conn;
+			/* IPC services are limited */
+			if (IS_IPC(conn) && !(flags & CAN_IPC)) {
+				return(ERROR_DOS(ERRSRV,ERRaccess));
+			}
+		} else {
+			/* This call needs to be run as root */
+			change_to_root_user();
 		}
-	} else {
-		/* This call needs to be run as root */
-		change_to_root_user();
-	}
 
-	/* load service specific parameters */
-	if (conn) {
-		if (req->encrypted) {
-			conn->encrypted_tid = true;
-			/* encrypted required from now on. */
-			conn->encrypt_level = Required;
-		} else if (ENCRYPTION_REQUIRED(conn)) {
-			uint8 com = CVAL(req->inbuf,smb_com);
-			if (com != SMBtrans2 && com != SMBtranss2) {
-				exit_server_cleanly("encryption required "
-					"on connection");
-				return conn;
+		/* load service specific parameters */
+		if (conn) {
+			if (!set_current_service(conn,SVAL(inbuf,smb_flg),(flags & (AS_USER|DO_CHDIR)?True:False))) {
+				return(ERROR_DOS(ERRSRV,ERRaccess));
 			}
+			conn->num_smb_operations++;
 		}
 
-		if (!set_current_service(conn,SVAL(req->inbuf,smb_flg),
-					 (flags & (AS_USER|DO_CHDIR)
-					  ?True:False))) {
-			reply_doserror(req, ERRSRV, ERRaccess);
-			return conn;
+		/* does this protocol need to be run as guest? */
+		if ((flags & AS_GUEST) && (!change_to_guest() || 
+				!check_access(smbd_server_fd(), lp_hostsallow(-1), lp_hostsdeny(-1)))) {
+			return(ERROR_DOS(ERRSRV,ERRaccess));
 		}
-		conn->num_smb_operations++;
-	}
 
-	/* does this protocol need to be run as guest? */
-	if ((flags & AS_GUEST)
-	    && (!change_to_guest() ||
-		!check_access(smbd_server_fd(), lp_hostsallow(-1),
-			      lp_hostsdeny(-1)))) {
-		reply_doserror(req, ERRSRV, ERRaccess);
-		return conn;
+		current_inbuf = inbuf; /* In case we need to defer this message in open... */
+		outsize = smb_messages[type].fn(conn, inbuf,outbuf,size,bufsize);
 	}
 
-	smb_messages[type].fn_new(req);
-	return req->conn;
+	smb_dump(smb_fn_name(type), 0, outbuf, outsize);
+
+	return(outsize);
 }
 
 /****************************************************************************
  Construct a reply to the incoming packet.
 ****************************************************************************/
 
-static void construct_reply(char *inbuf, int size, size_t unread_bytes, bool encrypted)
+static int construct_reply(char *inbuf,char *outbuf,int size,int bufsize)
 {
-	uint8 type = CVAL(inbuf,smb_com);
-	connection_struct *conn;
-	struct smb_request *req;
+	int type = CVAL(inbuf,smb_com);
+	int outsize = 0;
+	int msg_type = CVAL(inbuf,0);
 
 	chain_size = 0;
 	file_chain_reset();
 	reset_chain_p();
 
-	if (!(req = talloc(talloc_tos(), struct smb_request))) {
-		smb_panic("could not allocate smb_request");
-	}
-	init_smb_request(req, (uint8 *)inbuf, unread_bytes, encrypted);
+	if (msg_type != 0)
+		return(reply_special(inbuf,outbuf));  
 
-	conn = switch_message(type, req, size);
+	construct_reply_common(inbuf, outbuf);
 
-	if (req->unread_bytes) {
-		/* writeX failed. drain socket. */
-		if (drain_socket(smbd_server_fd(), req->unread_bytes) !=
-				req->unread_bytes) {
-			smb_panic("failed to drain pending bytes");
-		}
-		req->unread_bytes = 0;
-	}
+	outsize = switch_message(type,inbuf,outbuf,size,bufsize);
 
-	if (req->outbuf == NULL) {
-		return;
-	}
+	outsize += chain_size;
 
-	if (CVAL(req->outbuf,0) == 0) {
-		show_msg((char *)req->outbuf);
-	}
-
-	if (!srv_send_smb(smbd_server_fd(),
-			(char *)req->outbuf,
-			IS_CONN_ENCRYPTED(conn)||req->encrypted)) {
-		exit_server_cleanly("construct_reply: srv_send_smb failed.");
-	}
-
-	TALLOC_FREE(req);
-
-	return;
+	if(outsize > 4)
+		smb_setlen(outbuf,outsize - 4);
+	return(outsize);
 }
 
 /****************************************************************************
  Process an smb from the client
 ****************************************************************************/
 
-static void process_smb(char *inbuf, size_t nread, size_t unread_bytes, bool encrypted)
+static void process_smb(char *inbuf, char *outbuf)
 {
 	static int trans_num;
 	int msg_type = CVAL(inbuf,0);
+	int32 len = smb_len(inbuf);
+	int nread = len + 4;
 
 	DO_PROFILE_INC(smb_count);
 
 	if (trans_num == 0) {
-		char addr[INET6_ADDRSTRLEN];
-
 		/* on the first packet, check the global hosts allow/ hosts
 		deny parameters before doing any parsing of the packet
 		passed to us by the client.  This prevents attacks on our
 		parsing code from hosts not in the hosts allow list */
-
 		if (!check_access(smbd_server_fd(), lp_hostsallow(-1),
 				  lp_hostsdeny(-1))) {
 			/* send a negative session response "not listening on calling name" */
 			static unsigned char buf[5] = {0x83, 0, 0, 1, 0x81};
-			DEBUG( 1, ( "Connection denied from %s\n",
-				client_addr(get_client_fd(),addr,sizeof(addr)) ) );
-			(void)srv_send_smb(smbd_server_fd(),(char *)buf,false);
+			DEBUG( 1, ( "Connection denied from %s\n", client_addr() ) );
+			(void)send_smb(smbd_server_fd(),(char *)buf);
 			exit_server_cleanly("connection denied");
 		}
 	}
 
-	DEBUG( 6, ( "got message type 0x%x of len 0x%x\n", msg_type,
-		    smb_len(inbuf) ) );
-	DEBUG( 3, ( "Transaction %d of length %d (%u toread)\n", trans_num,
-				(int)nread,
-				(unsigned int)unread_bytes ));
+	DEBUG( 6, ( "got message type 0x%x of len 0x%x\n", msg_type, len ) );
+	DEBUG( 3, ( "Transaction %d of length %d\n", trans_num, nread ) );
 
-	if (msg_type != 0) {
-		/*
-		 * NetBIOS session request, keepalive, etc.
-		 */
-		reply_special(inbuf);
-		return;
-	}
+	if (msg_type == 0)
+		show_msg(inbuf);
+	else if(msg_type == SMBkeepalive)
+		return; /* Keepalive packet. */
 
-	show_msg(inbuf);
-
-	construct_reply(inbuf,nread,unread_bytes,encrypted);
-
+	nread = construct_reply(inbuf,outbuf,nread,max_send);
+      
+	if(nread > 0) {
+		if (CVAL(outbuf,0) == 0)
+			show_msg(outbuf);
+	
+		if (nread != smb_len(outbuf) + 4) {
+			DEBUG(0,("ERROR: Invalid message response size! %d %d\n",
+				nread, smb_len(outbuf)));
+		} else if (!send_smb(smbd_server_fd(),outbuf)) {
+			exit_server_cleanly("process_smb: send_smb failed.");
+		}
+	}
 	trans_num++;
 }
 
@@ -1595,7 +1121,7 @@
 
 void construct_reply_common(const char *inbuf, char *outbuf)
 {
-	srv_set_message(outbuf,0,0,false);
+	set_message(outbuf,0,0,False);
 	
 	SCVAL(outbuf,smb_com,CVAL(inbuf,smb_com));
 	SIVAL(outbuf,smb_rcls,0);
@@ -1615,83 +1141,58 @@
  Construct a chained reply and add it to the already made reply
 ****************************************************************************/
 
-void chain_reply(struct smb_request *req)
+int chain_reply(char *inbuf,char *outbuf,int size,int bufsize)
 {
 	static char *orig_inbuf;
-
-	/*
-	 * Dirty little const_discard: We mess with req->inbuf, which is
-	 * declared as const. If maybe at some point this routine gets
-	 * rewritten, this const_discard could go away.
-	 */
-	char *inbuf = CONST_DISCARD(char *, req->inbuf);
-	int size = smb_len(req->inbuf)+4;
-
+	static char *orig_outbuf;
 	int smb_com1, smb_com2 = CVAL(inbuf,smb_vwv0);
 	unsigned smb_off2 = SVAL(inbuf,smb_vwv1);
-	char *inbuf2;
+	char *inbuf2, *outbuf2;
 	int outsize2;
 	int new_size;
 	char inbuf_saved[smb_wct];
-	char *outbuf = (char *)req->outbuf;
-	size_t outsize = smb_len(outbuf) + 4;
-	size_t outsize_padded;
-	size_t ofs, to_move;
+	char outbuf_saved[smb_wct];
+	int outsize = smb_len(outbuf) + 4;
 
-	struct smb_request *req2;
-	size_t caller_outputlen;
-	char *caller_output;
-
 	/* Maybe its not chained, or it's an error packet. */
 	if (smb_com2 == 0xFF || SVAL(outbuf,smb_rcls) != 0) {
 		SCVAL(outbuf,smb_vwv0,0xFF);
-		return;
+		return outsize;
 	}
 
 	if (chain_size == 0) {
 		/* this is the first part of the chain */
 		orig_inbuf = inbuf;
+		orig_outbuf = outbuf;
 	}
 
 	/*
-	 * We need to save the output the caller added to the chain so that we
-	 * can splice it into the final output buffer later.
-	 */
-
-	caller_outputlen = outsize - smb_wct;
-
-	caller_output = (char *)memdup(outbuf + smb_wct, caller_outputlen);
-
-	if (caller_output == NULL) {
-		/* TODO: NT_STATUS_NO_MEMORY */
-		smb_panic("could not dup outbuf");
-	}
-
-	/*
 	 * The original Win95 redirector dies on a reply to
 	 * a lockingX and read chain unless the chain reply is
 	 * 4 byte aligned. JRA.
 	 */
 
-	outsize_padded = (outsize + 3) & ~3;
+	outsize = (outsize + 3) & ~3;
 
-	/*
-	 * remember how much the caller added to the chain, only counting
-	 * stuff after the parameter words
-	 */
-	chain_size += outsize_padded - smb_wct;
+	/* we need to tell the client where the next part of the reply will be */
+	SSVAL(outbuf,smb_vwv1,smb_offset(outbuf+outsize,outbuf));
+	SCVAL(outbuf,smb_vwv0,smb_com2);
 
-	/*
-	 * work out pointers into the original packets. The
-	 * headers on these need to be filled in
-	 */
+	/* remember how much the caller added to the chain, only counting stuff
+		after the parameter words */
+	chain_size += outsize - smb_wct;
+
+	/* work out pointers into the original packets. The
+		headers on these need to be filled in */
 	inbuf2 = orig_inbuf + smb_off2 + 4 - smb_wct;
+	outbuf2 = orig_outbuf + SVAL(outbuf,smb_vwv1) + 4 - smb_wct;
 
 	/* remember the original command type */
 	smb_com1 = CVAL(orig_inbuf,smb_com);
 
 	/* save the data which will be overwritten by the new headers */
 	memcpy(inbuf_saved,inbuf2,smb_wct);
+	memcpy(outbuf_saved,outbuf2,smb_wct);
 
 	/* give the new packet the same header as the last part of the SMB */
 	memmove(inbuf2,inbuf,smb_wct);
@@ -1702,113 +1203,45 @@
 	/* work out the new size for the in buffer. */
 	new_size = size - (inbuf2 - inbuf);
 	if (new_size < 0) {
-		DEBUG(0,("chain_reply: chain packet size incorrect "
-			 "(orig size = %d, offset = %d)\n",
-			 size, (int)(inbuf2 - inbuf) ));
+		DEBUG(0,("chain_reply: chain packet size incorrect (orig size = %d, "
+			"offset = %d)\n",
+			size,
+			(inbuf2 - inbuf) ));
 		exit_server_cleanly("Bad chained packet");
-		return;
+		return(-1);
 	}
 
 	/* And set it in the header. */
-	smb_setlen(inbuf2, new_size - 4);
+	smb_setlen(inbuf2, new_size);
 
+	/* create the out buffer */
+	construct_reply_common(inbuf2, outbuf2);
+
 	DEBUG(3,("Chained message\n"));
 	show_msg(inbuf2);
 
-	if (!(req2 = talloc(talloc_tos(), struct smb_request))) {
-		smb_panic("could not allocate smb_request");
-	}
-	init_smb_request(req2, (uint8 *)inbuf2,0, req->encrypted);
-
 	/* process the request */
-	switch_message(smb_com2, req2, new_size);
+	outsize2 = switch_message(smb_com2,inbuf2,outbuf2,new_size,
+				bufsize-chain_size);
 
-	/*
-	 * We don't accept deferred operations in chained requests.
-	 */
-	SMB_ASSERT(req2->outbuf != NULL);
-	outsize2 = smb_len(req2->outbuf)+4;
+	/* copy the new reply and request headers over the old ones, but
+		preserve the smb_com field */
+	memmove(orig_outbuf,outbuf2,smb_wct);
+	SCVAL(orig_outbuf,smb_com,smb_com1);
 
-	/*
-	 * Move away the new command output so that caller_output fits in,
-	 * copy in the caller_output saved above.
-	 */
+	/* restore the saved data, being careful not to overwrite any
+		data from the reply header */
+	memcpy(inbuf2,inbuf_saved,smb_wct);
 
-	SMB_ASSERT(outsize_padded >= smb_wct);
-
-	/*
-	 * "ofs" is the space we need for caller_output. Equal to
-	 * caller_outputlen plus the padding.
-	 */
-
-	ofs = outsize_padded - smb_wct;
-
-	/*
-	 * "to_move" is the amount of bytes the secondary routine gave us
-	 */
-
-	to_move = outsize2 - smb_wct;
-
-	if (to_move + ofs + smb_wct + chain_size > max_send) {
-		smb_panic("replies too large -- would have to cut");
+	{
+		int ofs = smb_wct - PTR_DIFF(outbuf2,orig_outbuf);
+		if (ofs < 0) {
+			ofs = 0;
+		}
+		memmove(outbuf2+ofs,outbuf_saved+ofs,smb_wct-ofs);
 	}
 
-	/*
-	 * In the "new" API "outbuf" is allocated via reply_outbuf, just for
-	 * the first request in the chain. So we have to re-allocate it. In
-	 * the "old" API the only outbuf ever used is the global OutBuffer
-	 * which is always large enough.
-	 */
-
-	outbuf = TALLOC_REALLOC_ARRAY(NULL, outbuf, char,
-				      to_move + ofs + smb_wct);
-	if (outbuf == NULL) {
-		smb_panic("could not realloc outbuf");
-	}
-
-	req->outbuf = (uint8 *)outbuf;
-
-	memmove(outbuf + smb_wct + ofs, req2->outbuf + smb_wct, to_move);
-	memcpy(outbuf + smb_wct, caller_output, caller_outputlen);
-
-	/*
-	 * copy the new reply header over the old one but preserve the smb_com
-	 * field
-	 */
-	memmove(outbuf, req2->outbuf, smb_wct);
-	SCVAL(outbuf, smb_com, smb_com1);
-
-	/*
-	 * We've just copied in the whole "wct" area from the secondary
-	 * function. Fix up the chaining: com2 and the offset need to be
-	 * readjusted.
-	 */
-
-	SCVAL(outbuf, smb_vwv0, smb_com2);
-	SSVAL(outbuf, smb_vwv1, chain_size + smb_wct - 4);
-
-	if (outsize_padded > outsize) {
-
-		/*
-		 * Due to padding we have some uninitialized bytes after the
-		 * caller's output
-		 */
-
-		memset(outbuf + outsize, 0, outsize_padded - outsize);
-	}
-
-	smb_setlen(outbuf, outsize2 + chain_size - 4);
-
-	/*
-	 * restore the saved data, being careful not to overwrite any data
-	 * from the reply header
-	 */
-	memcpy(inbuf2,inbuf_saved,smb_wct);
-
-	SAFE_FREE(caller_output);
-	TALLOC_FREE(req2);
-
-	return;
+	return outsize2;
 }
 
 /****************************************************************************
@@ -1819,7 +1252,7 @@
 {
 	int select_timeout;
 
-	select_timeout = SMBD_SELECT_TIMEOUT*1000;
+	select_timeout = blocking_locks_timeout_ms(SMBD_SELECT_TIMEOUT*1000);
 
 	if (print_notify_messages_pending()) {
 		select_timeout = MIN(select_timeout, 1000);
@@ -1885,19 +1318,81 @@
  Process any timeout housekeeping. Return False if the caller should exit.
 ****************************************************************************/
 
-static void timeout_processing(int *select_timeout,
-			       time_t *last_timeout_processing_time)
+static BOOL timeout_processing(int deadtime, int *select_timeout, time_t *last_timeout_processing_time)
 {
+	static time_t last_keepalive_sent_time = 0;
+	static time_t last_idle_closed_check = 0;
 	time_t t;
+	BOOL allidle = True;
 
+	if (smb_read_error == READ_EOF) {
+		DEBUG(3,("timeout_processing: End of file from client (client has disconnected).\n"));
+		return False;
+	}
+
+	if (smb_read_error == READ_ERROR) {
+		DEBUG(3,("timeout_processing: receive_smb error (%s) Exiting\n",
+			strerror(errno)));
+		return False;
+	}
+
+	if (smb_read_error == READ_BAD_SIG) {
+		DEBUG(3,("timeout_processing: receive_smb error bad smb signature. Exiting\n"));
+		return False;
+	}
+
 	*last_timeout_processing_time = t = time(NULL);
 
+	if(last_keepalive_sent_time == 0)
+		last_keepalive_sent_time = t;
+
+	if(last_idle_closed_check == 0)
+		last_idle_closed_check = t;
+
 	/* become root again if waiting */
 	change_to_root_user();
 
+	/* run all registered idle events */
+	smb_run_idle_events(t);
+
 	/* check if we need to reload services */
 	check_reload(t);
 
+	/* automatic timeout if all connections are closed */      
+	if (conn_num_open()==0 && (t - last_idle_closed_check) >= IDLE_CLOSED_TIMEOUT) {
+		DEBUG( 2, ( "Closing idle connection\n" ) );
+		return False;
+	} else {
+		last_idle_closed_check = t;
+	}
+
+	if (keepalive && (t - last_keepalive_sent_time)>keepalive) {
+		if (!send_keepalive(smbd_server_fd())) {
+			DEBUG( 2, ( "Keepalive failed - exiting.\n" ) );
+			return False;
+		}
+
+		/* send a keepalive for a password server or the like.
+			This is attached to the auth_info created in the
+		negprot */
+		if (negprot_global_auth_context && negprot_global_auth_context->challenge_set_method 
+				&& negprot_global_auth_context->challenge_set_method->send_keepalive) {
+
+			negprot_global_auth_context->challenge_set_method->send_keepalive
+			(&negprot_global_auth_context->challenge_set_method->private_data);
+		}
+
+		last_keepalive_sent_time = t;
+	}
+
+	/* check for connection timeouts */
+	allidle = conn_idle_all(t, deadtime);
+
+	if (allidle && conn_num_open()>0) {
+		DEBUG(2,("Closing idle connection 2.\n"));
+		return False;
+	}
+
 	if(global_machine_password_needs_changing && 
 			/* for ADS we need to do a regular ADS password change, not a domain
 					password change */
@@ -1905,7 +1400,6 @@
 
 		unsigned char trust_passwd_hash[16];
 		time_t lct;
-		void *lock;
 
 		/*
 		 * We're in domain level security, and the code that
@@ -1917,19 +1411,17 @@
 		 * First, open the machine password file with an exclusive lock.
 		 */
 
-		lock = secrets_get_trust_account_lock(NULL, lp_workgroup());
-
-		if (lock == NULL) {
+		if (secrets_lock_trust_account_password(lp_workgroup(), True) == False) {
 			DEBUG(0,("process: unable to lock the machine account password for \
 machine %s in domain %s.\n", global_myname(), lp_workgroup() ));
-			return;
+			return True;
 		}
 
 		if(!secrets_fetch_trust_account_password(lp_workgroup(), trust_passwd_hash, &lct, NULL)) {
 			DEBUG(0,("process: unable to read the machine account password for \
 machine %s in domain %s.\n", global_myname(), lp_workgroup()));
-			TALLOC_FREE(lock);
-			return;
+			secrets_lock_trust_account_password(lp_workgroup(), False);
+			return True;
 		}
 
 		/*
@@ -1938,17 +1430,23 @@
 
 		if(t < lct + lp_machine_password_timeout()) {
 			global_machine_password_needs_changing = False;
-			TALLOC_FREE(lock);
-			return;
+			secrets_lock_trust_account_password(lp_workgroup(), False);
+			return True;
 		}
 
 		/* always just contact the PDC here */
     
 		change_trust_account_password( lp_workgroup(), NULL);
 		global_machine_password_needs_changing = False;
-		TALLOC_FREE(lock);
+		secrets_lock_trust_account_password(lp_workgroup(), False);
 	}
 
+	/*
+	 * Check to see if we have any blocking locks
+	 * outstanding on the queue.
+	 */
+	process_blocking_lock_queue();
+
 	/* update printer queue caches if necessary */
   
 	update_monitored_printq_cache();
@@ -1962,7 +1460,7 @@
 
 	/* Send any queued printer notify message to interested smbd's. */
 
-	print_notify_send_messages(smbd_messaging_context(), 0);
+	print_notify_send_messages(0);
 
 	/*
 	 * Modify the select timeout depending upon
@@ -1971,10 +1469,66 @@
 
 	*select_timeout = setup_select_timeout();
 
-	return;
+	return True;
 }
 
 /****************************************************************************
+ Accessor functions for InBuffer, OutBuffer.
+****************************************************************************/
+
+char *get_InBuffer(void)
+{
+	return InBuffer;
+}
+
+char *get_OutBuffer(void)
+{
+	return OutBuffer;
+}
+
+const int total_buffer_size = (BUFFER_SIZE + LARGE_WRITEX_HDR_SIZE + SAFETY_MARGIN);
+
+/****************************************************************************
+ Allocate a new InBuffer. Returns the new and old ones.
+****************************************************************************/
+
+static char *NewInBuffer(char **old_inbuf)
+{
+	char *new_inbuf = (char *)SMB_MALLOC(total_buffer_size);
+	if (!new_inbuf) {
+		return NULL;
+	}
+	if (old_inbuf) {
+		*old_inbuf = InBuffer;
+	}
+	InBuffer = new_inbuf;
+#if defined(DEVELOPER)
+	clobber_region(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, InBuffer, total_buffer_size);
+#endif
+	return InBuffer;
+}
+
+/****************************************************************************
+ Allocate a new OutBuffer. Returns the new and old ones.
+****************************************************************************/
+
+static char *NewOutBuffer(char **old_outbuf)
+{
+	char *new_outbuf = (char *)SMB_MALLOC(total_buffer_size);
+	if (!new_outbuf) {
+		return NULL;
+	}
+	if (old_outbuf) {
+		*old_outbuf = OutBuffer;
+	}
+	OutBuffer = new_outbuf;
+#if defined(DEVELOPER)
+	clobber_region(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, OutBuffer, total_buffer_size);
+#endif
+	return OutBuffer;
+}
+
+/****************************************************************************
  Process commands from the client
 ****************************************************************************/
 
@@ -1982,55 +1536,47 @@
 {
 	time_t last_timeout_processing_time = time(NULL);
 	unsigned int num_smbs = 0;
-	size_t unread_bytes = 0;
 
+	/* Allocate the primary Inbut/Output buffers. */
+
+	if ((NewInBuffer(NULL) == NULL) || (NewOutBuffer(NULL) == NULL)) 
+		return;
+
 	max_recv = MIN(lp_maxxmit(),BUFFER_SIZE);
 
 	while (True) {
+		int deadtime = lp_deadtime()*60;
 		int select_timeout = setup_select_timeout();
 		int num_echos;
-		char *inbuf = NULL;
-		size_t inbuf_len = 0;
-		bool encrypted = false;
-		TALLOC_CTX *frame = talloc_stackframe_pool(8192);
 
-		errno = 0;
+		if (deadtime <= 0)
+			deadtime = DEFAULT_SMBD_TIMEOUT;
 
+		errno = 0;      
+		
+		/* free up temporary memory */
+		lp_TALLOC_FREE();
+		main_loop_TALLOC_FREE();
+
 		/* Did someone ask for immediate checks on things like blocking locks ? */
 		if (select_timeout == 0) {
-			timeout_processing(&select_timeout,
-					   &last_timeout_processing_time);
+			if(!timeout_processing( deadtime, &select_timeout, &last_timeout_processing_time))
+				return;
 			num_smbs = 0; /* Reset smb counter. */
 		}
 
 		run_events(smbd_event_context(), 0, NULL, NULL);
 
-		while (True) {
-			NTSTATUS status;
+#if defined(DEVELOPER)
+		clobber_region(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, InBuffer, total_buffer_size);
+#endif
 
-			status = receive_message_or_smb(
-				talloc_tos(), &inbuf, &inbuf_len,
-				select_timeout,	&unread_bytes, &encrypted);
-
-			if (NT_STATUS_IS_OK(status)) {
-				break;
-			}
-
-			if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT)) {
-				timeout_processing(
-					&select_timeout,
-					&last_timeout_processing_time);
-				continue;
-			}
-
-			DEBUG(3, ("receive_message_or_smb failed: %s, "
-				  "exiting\n", nt_errstr(status)));
-			return;
-
+		while (!receive_message_or_smb(InBuffer,BUFFER_SIZE+LARGE_WRITEX_HDR_SIZE,select_timeout)) {
+			if(!timeout_processing( deadtime, &select_timeout, &last_timeout_processing_time))
+				return;
 			num_smbs = 0; /* Reset smb counter. */
 		}
 
-
 		/*
 		 * Ensure we do timeout processing if the SMB we just got was
 		 * only an echo request. This allows us to set the select
@@ -2039,16 +1585,16 @@
 		 * faster than the select timeout, thus starving out the
 		 * essential processing (change notify, blocking locks) that
 		 * the timeout code does. JRA.
-		 */
+		 */ 
 		num_echos = smb_echo_count;
 
-		process_smb(inbuf, inbuf_len, unread_bytes, encrypted);
+		clobber_region(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, OutBuffer, total_buffer_size);
 
-		TALLOC_FREE(inbuf);
+		process_smb(InBuffer, OutBuffer);
 
 		if (smb_echo_count != num_echos) {
-			timeout_processing(&select_timeout,
-					   &last_timeout_processing_time);
+			if(!timeout_processing( deadtime, &select_timeout, &last_timeout_processing_time))
+				return;
 			num_smbs = 0; /* Reset smb counter. */
 		}
 
@@ -2064,9 +1610,8 @@
 		if ((num_smbs % 200) == 0) {
 			time_t new_check_time = time(NULL);
 			if(new_check_time - last_timeout_processing_time >= (select_timeout/1000)) {
-				timeout_processing(
-					&select_timeout,
-					&last_timeout_processing_time);
+				if(!timeout_processing( deadtime, &select_timeout, &last_timeout_processing_time))
+					return;
 				num_smbs = 0; /* Reset smb counter. */
 				last_timeout_processing_time = new_check_time; /* Reset time. */
 			}
@@ -2083,6 +1628,5 @@
 			change_to_root_user();
 			check_log_size();
 		}
-		TALLOC_FREE(frame);
 	}
 }

Modified: branches/samba/upstream/source/smbd/quotas.c
===================================================================
--- branches/samba/upstream/source/smbd/quotas.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/quotas.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 
@@ -45,7 +46,7 @@
  * Declare here, define at end: reduces likely "include" interaction problems.
  *	David Lee <T.D.Lee at durham.ac.uk>
  */
-bool disk_quotas_vxfs(const char *name, char *path, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize);
+BOOL disk_quotas_vxfs(const pstring name, char *path, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize);
 
 #endif /* VXFS_QUOTA */
 
@@ -61,6 +62,7 @@
  */
 
 #include "samba_linux_quota.h"
+#include "samba_xfs_quota.h"
 
 typedef struct _LINUX_SMB_DISK_QUOTA {
 	SMB_BIG_UINT bsize;
@@ -72,10 +74,6 @@
 	SMB_BIG_UINT curinodes; /* Current used inodes. */
 } LINUX_SMB_DISK_QUOTA;
 
-
-#ifdef HAVE_LINUX_DQBLK_XFS_H
-#include <linux/dqblk_xfs.h>
-
 /****************************************************************************
  Abstract out the XFS Quota Manager quota get call.
 ****************************************************************************/
@@ -105,16 +103,7 @@
 
 	return ret;
 }
-#else
-static int get_smb_linux_xfs_quota(char *path, uid_t euser_id, gid_t egrp_id, LINUX_SMB_DISK_QUOTA *dp)
-{
-	DEBUG(0,("XFS quota support not available\n"));
-	errno = ENOSYS;
-	return -1;
-}
-#endif
 
-
 /****************************************************************************
  Abstract out the old and new Linux quota get calls.
 ****************************************************************************/
@@ -205,7 +194,7 @@
  Try to get the disk space from disk quotas (LINUX version).
 ****************************************************************************/
 
-bool disk_quotas(const char *path, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize)
+BOOL disk_quotas(const char *path, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize)
 {
 	int r;
 	SMB_STRUCT_STAT S;
@@ -223,17 +212,17 @@
 	egrp_id = getegid();
 
 	/* find the block device file */
-
+  
 	if ( sys_stat(path, &S) == -1 )
 		return(False) ;
 
 	devno = S.st_dev ;
-
+  
 	if ((fp = setmntent(MOUNTED,"r")) == NULL)
 		return(False) ;
 
 	found = False ;
-
+  
 	while ((mnt = getmntent(fp))) {
 		if ( sys_stat(mnt->mnt_dir,&S) == -1 )
 			continue ;
@@ -245,7 +234,7 @@
 	}
 
 	endmntent(fp) ;
-
+  
 	if (!found)
 		return(False);
 
@@ -306,83 +295,96 @@
 try to get the disk space from disk quotas (CRAY VERSION)
 ****************************************************************************/
 
-bool disk_quotas(const char *path, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize)
+BOOL disk_quotas(const char *path, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize)
 {
-	struct mntent *mnt;
-	FILE *fd;
-	SMB_STRUCT_STAT sbuf;
-	SMB_DEV_T devno ;
-	struct q_request request ;
-	struct qf_header header ;
-	int quota_default = 0 ;
-	bool found = false;
-
-	if (sys_stat(path,&sbuf) == -1) {
-		return false;
-	}
-
-	devno = sbuf.st_dev ;
-
-	if ((fd = setmntent(KMTAB)) == NULL) {
-		return false;
-	}
-
-	while ((mnt = getmntent(fd)) != NULL) {
-		if (sys_stat(mnt->mnt_dir,&sbuf) == -1) {
-			continue;
-		}
-		if (sbuf.st_dev == devno) {
-			found = frue ;
-			break;
-		}
-	}
-
-	name = talloc_strdup(talloc_tos(), mnt->mnt_dir);
-	endmntent(fd);
-	if (!found) {
-		return false;
-	}
-
-	if (!name) {
-		return false;
-	}
-
-	request.qf_magic = QF_MAGIC ;
-	request.qf_entry.id = geteuid() ;
-
-	if (quotactl(name, Q_GETQUOTA, &request) == -1) {
-		return false;
-	}
-
-	if (!request.user) {
-		return False;
-	}
-
-	if (request.qf_entry.user_q.f_quota == QFV_DEFAULT) {
-		if (!quota_default) {
-			if (quotactl(name, Q_GETHEADER, &header) == -1) {
-				return false;
-			} else {
-				quota_default = header.user_h.def_fq;
-			}
-		}
-		*dfree = quota_default;
-	} else if (request.qf_entry.user_q.f_quota == QFV_PREVENT) {
-		*dfree = 0;
-	} else {
-		*dfree = request.qf_entry.user_q.f_quota;
-	}
-
-	*dsize = request.qf_entry.user_q.f_use;
-
-	if (*dfree < *dsize) {
-		*dfree = 0;
-	} else {
-		*dfree -= *dsize;
-	}
-
-	*bsize = 4096 ;  /* Cray blocksize */
-	return true;
+  struct mntent *mnt;
+  FILE *fd;
+  SMB_STRUCT_STAT sbuf;
+  SMB_DEV_T devno ;
+  static SMB_DEV_T devno_cached = 0 ;
+  static pstring name;
+  struct q_request request ;
+  struct qf_header header ;
+  static int quota_default = 0 ;
+  int found ;
+  
+  if ( sys_stat(path,&sbuf) == -1 )
+    return(False) ;
+  
+  devno = sbuf.st_dev ;
+  
+  if ( devno != devno_cached ) {
+    
+    devno_cached = devno ;
+    
+    if ((fd = setmntent(KMTAB)) == NULL)
+      return(False) ;
+    
+    found = False ;
+    
+    while ((mnt = getmntent(fd)) != NULL) {
+      
+      if ( sys_stat(mnt->mnt_dir,&sbuf) == -1 )
+	continue ;
+      
+      if (sbuf.st_dev == devno) {
+	
+	found = True ;
+	break ;
+	
+      }
+      
+    }
+    
+    pstrcpy(name,mnt->mnt_dir) ;
+    endmntent(fd) ;
+    
+    if ( ! found )
+      return(False) ;
+  }
+  
+  request.qf_magic = QF_MAGIC ;
+  request.qf_entry.id = geteuid() ;
+  
+  if (quotactl(name, Q_GETQUOTA, &request) == -1)
+    return(False) ;
+  
+  if ( ! request.user )
+    return(False) ;
+  
+  if ( request.qf_entry.user_q.f_quota == QFV_DEFAULT ) {
+    
+    if ( ! quota_default ) {
+      
+      if ( quotactl(name, Q_GETHEADER, &header) == -1 )
+	return(False) ;
+      else
+	quota_default = header.user_h.def_fq ;
+    }
+    
+    *dfree = quota_default ;
+    
+  }else if ( request.qf_entry.user_q.f_quota == QFV_PREVENT ) {
+    
+    *dfree = 0 ;
+    
+  }else{
+    
+    *dfree = request.qf_entry.user_q.f_quota ;
+    
+  }
+  
+  *dsize = request.qf_entry.user_q.f_use ;
+  
+  if ( *dfree < *dsize )
+    *dfree = 0 ;
+  else
+    *dfree -= *dsize ;
+  
+  *bsize = 4096 ;  /* Cray blocksize */
+  
+  return(True) ;
+  
 }
 
 
@@ -453,8 +455,8 @@
 	return (1);
 }
 
-/* Restricted to SUNOS5 for the moment, I haven`t access to others to test. */
-static bool nfs_quotas(char *nfspath, uid_t euser_id, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize)
+/* Restricted to SUNOS5 for the moment, I haven`t access to others to test. */ 
+static BOOL nfs_quotas(char *nfspath, uid_t euser_id, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize)
 {
 	uid_t uid = euser_id;
 	struct dqblk D;
@@ -466,7 +468,7 @@
 	int len;
 	static struct timeval timeout = {2,0};
 	enum clnt_stat clnt_stat;
-	bool ret = True;
+	BOOL ret = True;
 
 	*bsize = *dfree = *dsize = (SMB_BIG_UINT)0;
 
@@ -502,11 +504,11 @@
 		goto out;
 	}
 
-	/*
+	/* 
 	 * quotastat returns 0 if the rpc call fails, 1 if quotas exist, 2 if there is
 	 * no quota set, and 3 if no permission to get the quota.  If 0 or 3 return
 	 * something sensible.
-	 */
+	 */   
 
 	switch ( quotastat ) {
 	case 0:
@@ -574,10 +576,7 @@
 Quota code by Peter Urbanec (amiga at cse.unsw.edu.au).
 ****************************************************************************/
 
-bool disk_quotas(const char *path,
-		SMB_BIG_UINT *bsize,
-		SMB_BIG_UINT *dfree,
-		SMB_BIG_UINT *dsize)
+BOOL disk_quotas(const char *path, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize)
 {
 	uid_t euser_id;
 	int ret;
@@ -585,90 +584,84 @@
 #if defined(SUNOS5)
 	struct quotctl command;
 	int file;
-	struct mnttab mnt;
+	static struct mnttab mnt;
+	static pstring name;
 #else /* SunOS4 */
 	struct mntent *mnt;
+	static pstring name;
 #endif
-	char *name = NULL;
 	FILE *fd;
 	SMB_STRUCT_STAT sbuf;
-	SMB_DEV_T devno;
-	bool found = false;
+	SMB_DEV_T devno ;
+	static SMB_DEV_T devno_cached = 0 ;
+	static int found ;
 
 	euser_id = geteuid();
-
-	if (sys_stat(path,&sbuf) == -1) {
-		return false;
-	}
-
+  
+	if ( sys_stat(path,&sbuf) == -1 )
+		return(False) ;
+  
 	devno = sbuf.st_dev ;
 	DEBUG(5,("disk_quotas: looking for path \"%s\" devno=%x\n",
 		path, (unsigned int)devno));
+	if ( devno != devno_cached ) {
+		devno_cached = devno ;
 #if defined(SUNOS5)
-	if ((fd = sys_fopen(MNTTAB, "r")) == NULL) {
-		return false;
-	}
+		if ((fd = sys_fopen(MNTTAB, "r")) == NULL)
+			return(False) ;
+    
+		found = False ;
 
-	while (getmntent(fd, &mnt) == 0) {
-		if (sys_stat(mnt.mnt_mountp, &sbuf) == -1) {
-			continue;
-		}
+		while (getmntent(fd, &mnt) == 0) {
+			if (sys_stat(mnt.mnt_mountp, &sbuf) == -1)
+				continue;
 
-		DEBUG(5,("disk_quotas: testing \"%s\" devno=%x\n",
-			mnt.mnt_mountp, (unsigned int)devno));
+			DEBUG(5,("disk_quotas: testing \"%s\" devno=%x\n",
+				mnt.mnt_mountp, (unsigned int)devno));
 
-		/* quotas are only on vxfs, UFS or NFS */
-		if ((sbuf.st_dev == devno) && (
-			strcmp( mnt.mnt_fstype, MNTTYPE_UFS ) == 0 ||
-			strcmp( mnt.mnt_fstype, "nfs" ) == 0    ||
-			strcmp( mnt.mnt_fstype, "vxfs" ) == 0 )) {
-				found = true;
-				name = talloc_asprintf(talloc_tos(),
-						"%s/quotas",
-						mnt.mnt_mountp);
-				break;
+			/* quotas are only on vxfs, UFS or NFS */
+			if ( (sbuf.st_dev == devno) && (
+				strcmp( mnt.mnt_fstype, MNTTYPE_UFS ) == 0 ||
+				strcmp( mnt.mnt_fstype, "nfs" ) == 0    ||
+				strcmp( mnt.mnt_fstype, "vxfs" ) == 0 )) { 
+					found = True ;
+					break;
+			}
 		}
-	}
-
-	fclose(fd);
+    
+		pstrcpy(name,mnt.mnt_mountp) ;
+		pstrcat(name,"/quotas") ;
+		fclose(fd) ;
 #else /* SunOS4 */
-	if ((fd = setmntent(MOUNTED, "r")) == NULL) {
-		return false;
-	}
-
-	while ((mnt = getmntent(fd)) != NULL) {
-		if (sys_stat(mnt->mnt_dir,&sbuf) == -1) {
-			continue;
+		if ((fd = setmntent(MOUNTED, "r")) == NULL)
+			return(False) ;
+    
+		found = False ;
+		while ((mnt = getmntent(fd)) != NULL) {
+			if ( sys_stat(mnt->mnt_dir,&sbuf) == -1 )
+				continue ;
+			DEBUG(5,("disk_quotas: testing \"%s\" devno=%x\n", mnt->mnt_dir,(unsigned int)sbuf.st_dev));
+			if (sbuf.st_dev == devno) {
+				found = True ;
+				break;
+			}
 		}
-		DEBUG(5,("disk_quotas: testing \"%s\" devno=%x\n",
-					mnt->mnt_dir,
-					(unsigned int)sbuf.st_dev));
-		if (sbuf.st_dev == devno) {
-			found = true;
-			name = talloc_strdup(talloc_tos(),
-					mnt->mnt_fsname);
-			break;
-		}
-	}
-
-	endmntent(fd);
+    
+		pstrcpy(name,mnt->mnt_fsname) ;
+		endmntent(fd) ;
 #endif
-	if (!found) {
-		return false;
 	}
 
-	if (!name) {
-		return false;
-	}
+	if ( ! found )
+		return(False) ;
+
 	become_root();
 
 #if defined(SUNOS5)
-	if (strcmp(mnt.mnt_fstype, "nfs") == 0) {
-		bool retval;
-		DEBUG(5,("disk_quotas: looking for mountpath (NFS) \"%s\"\n",
-					mnt.mnt_special));
-		retval = nfs_quotas(mnt.mnt_special,
-				euser_id, bsize, dfree, dsize);
+	if ( strcmp( mnt.mnt_fstype, "nfs" ) == 0) {
+		BOOL retval;
+		DEBUG(5,("disk_quotas: looking for mountpath (NFS) \"%s\"\n", mnt.mnt_special));
+		retval = nfs_quotas(mnt.mnt_special, euser_id, bsize, dfree, dsize);
 		unbecome_root();
 		return retval;
 	}
@@ -676,7 +669,7 @@
 	DEBUG(5,("disk_quotas: looking for quotas file \"%s\"\n", name));
 	if((file=sys_open(name, O_RDONLY,0))<0) {
 		unbecome_root();
-		return false;
+		return(False);
 	}
 	command.op = Q_GETQUOTA;
 	command.uid = euser_id;
@@ -691,36 +684,32 @@
 	unbecome_root();
 
 	if (ret < 0) {
-		DEBUG(5,("disk_quotas ioctl (Solaris) failed. Error = %s\n",
-					strerror(errno) ));
+		DEBUG(5,("disk_quotas ioctl (Solaris) failed. Error = %s\n", strerror(errno) ));
 
 #if defined(SUNOS5) && defined(VXFS_QUOTA)
 		/* If normal quotactl() fails, try vxfs private calls */
 		set_effective_uid(euser_id);
 		DEBUG(5,("disk_quotas: mount type \"%s\"\n", mnt.mnt_fstype));
 		if ( 0 == strcmp ( mnt.mnt_fstype, "vxfs" )) {
-			bool retval;
-			retval = disk_quotas_vxfs(name, path,
-					bsize, dfree, dsize);
-			return retval;
+			BOOL retval;
+			retval = disk_quotas_vxfs(name, path, bsize, dfree, dsize);
+			return(retval);
 		}
 #else
-		return false;
+		return(False);
 #endif
 	}
 
 	/* If softlimit is zero, set it equal to hardlimit.
 	 */
-
-	if (D.dqb_bsoftlimit==0) {
+  
+	if (D.dqb_bsoftlimit==0)
 		D.dqb_bsoftlimit = D.dqb_bhardlimit;
-	}
 
-	/* Use softlimit to determine disk space. A user exceeding the quota
-	 * is told that there's no space left. Writes might actually work for
-	 * a bit if the hardlimit is set higher than softlimit. Effectively
-	 * the disk becomes made of rubber latex and begins to expand to
-	 * accommodate the user :-)
+	/* Use softlimit to determine disk space. A user exceeding the quota is told
+	 * that there's no space left. Writes might actually work for a bit if the
+	 * hardlimit is set higher than softlimit. Effectively the disk becomes
+	 * made of rubber latex and begins to expand to accommodate the user :-)
 	 */
 
 	if (D.dqb_bsoftlimit==0)
@@ -731,15 +720,13 @@
 	if (D.dqb_curblocks > D.dqb_bsoftlimit) {
 		*dfree = 0;
 		*dsize = D.dqb_curblocks;
-	} else {
+	} else
 		*dfree = D.dqb_bsoftlimit - D.dqb_curblocks;
-	}
-
-	DEBUG(5,("disk_quotas for path \"%s\" returning "
-		"bsize %.0f, dfree %.0f, dsize %.0f\n",
+      
+	DEBUG(5,("disk_quotas for path \"%s\" returning  bsize %.0f, dfree %.0f, dsize %.0f\n",
 		path,(double)*bsize,(double)*dfree,(double)*dsize));
 
-	return true;
+	return(True);
 }
 
 
@@ -750,7 +737,7 @@
 try to get the disk space from disk quotas - OSF1 version
 ****************************************************************************/
 
-bool disk_quotas(const char *path, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize)
+BOOL disk_quotas(const char *path, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize)
 {
   int r, save_errno;
   struct dqblk D;
@@ -816,7 +803,7 @@
 #include <sys/quota.h>
 #include <mntent.h>
 
-bool disk_quotas(const char *path, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize)
+BOOL disk_quotas(const char *path, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize)
 {
   uid_t euser_id;
   int r;
@@ -1009,7 +996,7 @@
 }
 
 /* Works on FreeBSD, too. :-) */
-static bool nfs_quotas(char *nfspath, uid_t euser_id, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize)
+static BOOL nfs_quotas(char *nfspath, uid_t euser_id, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize)
 {
 	uid_t uid = euser_id;
 	struct dqblk D;
@@ -1021,7 +1008,7 @@
 	int len;
 	static struct timeval timeout = {2,0};
 	enum clnt_stat clnt_stat;
-	bool ret = True;
+	BOOL ret = True;
 
 	*bsize = *dfree = *dsize = (SMB_BIG_UINT)0;
 
@@ -1134,7 +1121,7 @@
 try to get the disk space from disk quotas - default version
 ****************************************************************************/
 
-bool disk_quotas(const char *path, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize)
+BOOL disk_quotas(const char *path, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize)
 {
   int r;
   struct dqblk D;
@@ -1201,7 +1188,7 @@
 
 #if defined(__FreeBSD__) || defined(__DragonFly__)
     if (strcmp(mnts[i].f_fstypename,"nfs") == 0) {
-        bool retval;
+        BOOL retval;
         retval = nfs_quotas(mnts[i].f_mntfromname,euser_id,bsize,dfree,dsize);
         unbecome_root();
         return retval;
@@ -1353,14 +1340,14 @@
 #include <sys/fs/vx_aioctl.h>
 #include <sys/fs/vx_ioctl.h>
 
-bool disk_quotas_vxfs(const char *name, char *path, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize)
+BOOL disk_quotas_vxfs(const pstring name, char *path, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize)
 {
   uid_t user_id, euser_id;
   int ret;
   struct vx_dqblk D;
   struct vx_quotctl quotabuf;
   struct vx_genioctl genbuf;
-  char *qfname;
+  pstring qfname;
   int file;
 
   /*
@@ -1369,10 +1356,7 @@
    * it might be easier to examine and adjust it here.
    * Fortunately, VxFS seems not to mind at present.
    */
-  qfname = talloc_strdup(talloc_tos(), name);
-  if (!qfname) {
-	  return false;
-  }
+  pstrcpy(qfname, name) ;
   /* pstrcat(qfname, "/quotas") ; */	/* possibly examine and adjust "name" */
 
   euser_id = geteuid();
@@ -1437,25 +1421,25 @@
 
 #else /* WITH_QUOTAS */
 
-bool disk_quotas(const char *path,SMB_BIG_UINT *bsize,SMB_BIG_UINT *dfree,SMB_BIG_UINT *dsize)
+BOOL disk_quotas(const char *path,SMB_BIG_UINT *bsize,SMB_BIG_UINT *dfree,SMB_BIG_UINT *dsize)
 {
-	(*bsize) = 512; /* This value should be ignored */
+  (*bsize) = 512; /* This value should be ignored */
 
-	/* And just to be sure we set some values that hopefully */
-	/* will be larger that any possible real-world value     */
-	(*dfree) = (SMB_BIG_UINT)-1;
-	(*dsize) = (SMB_BIG_UINT)-1;
+  /* And just to be sure we set some values that hopefully */
+  /* will be larger that any possible real-world value     */
+  (*dfree) = (SMB_BIG_UINT)-1;
+  (*dsize) = (SMB_BIG_UINT)-1;
 
-	/* As we have select not to use quotas, allways fail */
-	return false;
+  /* As we have select not to use quotas, allways fail */
+  return False;
 }
 #endif /* WITH_QUOTAS */
 
 #else /* HAVE_SYS_QUOTAS */
-/* wrapper to the new sys_quota interface
+/* wrapper to the new sys_quota interface 
    this file should be removed later
    */
-bool disk_quotas(const char *path,SMB_BIG_UINT *bsize,SMB_BIG_UINT *dfree,SMB_BIG_UINT *dsize)
+BOOL disk_quotas(const char *path,SMB_BIG_UINT *bsize,SMB_BIG_UINT *dfree,SMB_BIG_UINT *dsize)
 {
 	int r;
 	SMB_DISK_QUOTA D;

Modified: branches/samba/upstream/source/smbd/reply.c
===================================================================
--- branches/samba/upstream/source/smbd/reply.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/reply.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,23 +1,23 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    Main SMB reply routines
    Copyright (C) Andrew Tridgell 1992-1998
    Copyright (C) Andrew Bartlett      2001
    Copyright (C) Jeremy Allison 1992-2007.
-   Copyright (C) Volker Lendecke 2007
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 /*
    This file handles most of the reply_ calls that the server
@@ -28,12 +28,13 @@
 
 /* look in server.c for some explanation of these variables */
 extern enum protocol_types Protocol;
+extern int max_send;
 extern int max_recv;
 unsigned int smb_echo_count = 0;
 extern uint32 global_client_caps;
 
 extern struct current_user current_user;
-extern bool global_encrypted_passwords_negotiated;
+extern BOOL global_encrypted_passwords_negotiated;
 
 /****************************************************************************
  Ensure we check the path in *exactly* the same way as W2K for a findfirst/findnext
@@ -46,28 +47,28 @@
 /* Custom version for processing POSIX paths. */
 #define IS_PATH_SEP(c,posix_only) ((c) == '/' || (!(posix_only) && (c) == '\\'))
 
-static NTSTATUS check_path_syntax_internal(char *path,
-					   bool posix_path,
-					   bool *p_last_component_contains_wcard)
+NTSTATUS check_path_syntax_internal(pstring destname,
+				    const pstring srcname,
+				    BOOL posix_path,
+				    BOOL *p_last_component_contains_wcard)
 {
-	char *d = path;
-	const char *s = path;
+	char *d = destname;
+	const char *s = srcname;
 	NTSTATUS ret = NT_STATUS_OK;
-	bool start_of_name_component = True;
+	BOOL start_of_name_component = True;
 
 	*p_last_component_contains_wcard = False;
 
 	while (*s) {
 		if (IS_PATH_SEP(*s,posix_path)) {
 			/*
-			 * Safe to assume is not the second part of a mb char
-			 * as this is handled below.
+			 * Safe to assume is not the second part of a mb char as this is handled below.
 			 */
 			/* Eat multiple '/' or '\\' */
 			while (IS_PATH_SEP(*s,posix_path)) {
 				s++;
 			}
-			if ((d != path) && (*s != '\0')) {
+			if ((d != destname) && (*s != '\0')) {
 				/* We only care about non-leading or trailing '/' or '\\' */
 				*d++ = '/';
 			}
@@ -87,13 +88,13 @@
 				 */
 
 				/* If  we just added a '/' - delete it */
-				if ((d > path) && (*(d-1) == '/')) {
+				if ((d > destname) && (*(d-1) == '/')) {
 					*(d-1) = '\0';
 					d--;
 				}
 
 				/* Are we at the start ? Can't go back further if so. */
-				if (d <= path) {
+				if (d <= destname) {
 					ret = NT_STATUS_OBJECT_PATH_SYNTAX_BAD;
 					break;
 				}
@@ -101,7 +102,7 @@
 				/* We know this is safe as '/' cannot be part of a mb sequence. */
 				/* NOTE - if this assumption is invalid we are not in good shape... */
 				/* Decrement d first as d points to the *next* char to write into. */
-				for (d--; d > path; d--) {
+				for (d--; d > destname; d--) {
 					if (*d == '/')
 						break;
 				}
@@ -167,7 +168,6 @@
 	}
 
 	*d = '\0';
-
 	return ret;
 }
 
@@ -176,10 +176,10 @@
  No wildcards allowed.
 ****************************************************************************/
 
-NTSTATUS check_path_syntax(char *path)
+NTSTATUS check_path_syntax(pstring destname, const pstring srcname)
 {
-	bool ignore;
-	return check_path_syntax_internal(path, False, &ignore);
+	BOOL ignore;
+	return check_path_syntax_internal(destname, srcname, False, &ignore);
 }
 
 /****************************************************************************
@@ -188,9 +188,9 @@
  a wildcard.
 ****************************************************************************/
 
-NTSTATUS check_path_syntax_wcard(char *path, bool *p_contains_wcard)
+NTSTATUS check_path_syntax_wcard(pstring destname, const pstring srcname, BOOL *p_contains_wcard)
 {
-	return check_path_syntax_internal(path, False, p_contains_wcard);
+	return check_path_syntax_internal(destname, srcname, False, p_contains_wcard);
 }
 
 /****************************************************************************
@@ -199,67 +199,48 @@
  set (a safe assumption).
 ****************************************************************************/
 
-NTSTATUS check_path_syntax_posix(char *path)
+NTSTATUS check_path_syntax_posix(pstring destname, const pstring srcname)
 {
-	bool ignore;
-	return check_path_syntax_internal(path, True, &ignore);
+	BOOL ignore;
+	return check_path_syntax_internal(destname, srcname, True, &ignore);
 }
 
 /****************************************************************************
  Pull a string and check the path allowing a wilcard - provide for error return.
 ****************************************************************************/
 
-size_t srvstr_get_path_wcard(TALLOC_CTX *ctx,
-			const char *inbuf,
-			uint16 smb_flags2,
-			char **pp_dest,
-			const char *src,
-			size_t src_len,
-			int flags,
-			NTSTATUS *err,
-			bool *contains_wcard)
+size_t srvstr_get_path_wcard(char *inbuf, char *dest, const char *src, size_t dest_len, size_t src_len, int flags,
+				NTSTATUS *err, BOOL *contains_wcard)
 {
+	pstring tmppath;
+	char *tmppath_ptr = tmppath;
 	size_t ret;
+#ifdef DEVELOPER
+	SMB_ASSERT(dest_len == sizeof(pstring));
+#endif
 
-	*pp_dest = NULL;
-
 	if (src_len == 0) {
-		ret = srvstr_pull_buf_talloc(ctx,
-				inbuf,
-				smb_flags2,
-				pp_dest,
-				src,
-				flags);
+		ret = srvstr_pull_buf( inbuf, tmppath_ptr, src, dest_len, flags);
 	} else {
-		ret = srvstr_pull_talloc(ctx,
-				inbuf,
-				smb_flags2,
-				pp_dest,
-				src,
-				src_len,
-				flags);
+		ret = srvstr_pull( inbuf, tmppath_ptr, src, dest_len, src_len, flags);
 	}
 
-	if (!*pp_dest) {
-		*err = NT_STATUS_INVALID_PARAMETER;
-		return ret;
-	}
-
 	*contains_wcard = False;
 
-	if (smb_flags2 & FLAGS2_DFS_PATHNAMES) {
-		/*
+	if (SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES) {
+		/* 
 		 * For a DFS path the function parse_dfs_path()
 		 * will do the path processing, just make a copy.
 		 */
+		pstrcpy(dest, tmppath);
 		*err = NT_STATUS_OK;
 		return ret;
 	}
 
 	if (lp_posix_pathnames()) {
-		*err = check_path_syntax_posix(*pp_dest);
+		*err = check_path_syntax_posix(dest, tmppath);
 	} else {
-		*err = check_path_syntax_wcard(*pp_dest, contains_wcard);
+		*err = check_path_syntax_wcard(dest, tmppath, contains_wcard);
 	}
 
 	return ret;
@@ -269,139 +250,57 @@
  Pull a string and check the path - provide for error return.
 ****************************************************************************/
 
-size_t srvstr_get_path(TALLOC_CTX *ctx,
-			const char *inbuf,
-			uint16 smb_flags2,
-			char **pp_dest,
-			const char *src,
-			size_t src_len,
-			int flags,
-			NTSTATUS *err)
+size_t srvstr_get_path(char *inbuf, char *dest, const char *src, size_t dest_len, size_t src_len, int flags, NTSTATUS *err)
 {
+	pstring tmppath;
+	char *tmppath_ptr = tmppath;
 	size_t ret;
+#ifdef DEVELOPER
+	SMB_ASSERT(dest_len == sizeof(pstring));
+#endif
 
-	*pp_dest = NULL;
-
 	if (src_len == 0) {
-		ret = srvstr_pull_buf_talloc(ctx,
-					inbuf,
-					smb_flags2,
-					pp_dest,
-					src,
-					flags);
+		ret = srvstr_pull_buf( inbuf, tmppath_ptr, src, dest_len, flags);
 	} else {
-		ret = srvstr_pull_talloc(ctx,
-				inbuf,
-				smb_flags2,
-				pp_dest,
-				src,
-				src_len,
-				flags);
+		ret = srvstr_pull( inbuf, tmppath_ptr, src, dest_len, src_len, flags);
 	}
 
-	if (!*pp_dest) {
-		*err = NT_STATUS_INVALID_PARAMETER;
-		return ret;
-	}
-
-	if (smb_flags2 & FLAGS2_DFS_PATHNAMES) {
-		/*
+	if (SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES) {
+		/* 
 		 * For a DFS path the function parse_dfs_path()
 		 * will do the path processing, just make a copy.
 		 */
+		pstrcpy(dest, tmppath);
 		*err = NT_STATUS_OK;
 		return ret;
 	}
 
 	if (lp_posix_pathnames()) {
-		*err = check_path_syntax_posix(*pp_dest);
+		*err = check_path_syntax_posix(dest, tmppath);
 	} else {
-		*err = check_path_syntax(*pp_dest);
+		*err = check_path_syntax(dest, tmppath);
 	}
 
 	return ret;
 }
 
 /****************************************************************************
- Check if we have a correct fsp pointing to a file. Basic check for open fsp.
+ Reply to a special message.
 ****************************************************************************/
 
-bool check_fsp_open(connection_struct *conn, struct smb_request *req,
-	       files_struct *fsp, struct current_user *user)
+int reply_special(char *inbuf,char *outbuf)
 {
-	if (!(fsp) || !(conn)) {
-		reply_nterror(req, NT_STATUS_INVALID_HANDLE);
-		return False;
-	}
-	if (((conn) != (fsp)->conn) || user->vuid != (fsp)->vuid) {
-		reply_nterror(req, NT_STATUS_INVALID_HANDLE);
-		return False;
-	}
-	return True;
-}
-
-/****************************************************************************
- Check if we have a correct fsp pointing to a file. Replacement for the
- CHECK_FSP macro.
-****************************************************************************/
-
-bool check_fsp(connection_struct *conn, struct smb_request *req,
-	       files_struct *fsp, struct current_user *user)
-{
-	if (!check_fsp_open(conn, req, fsp, user)) {
-		return False;
-	}
-	if ((fsp)->is_directory) {
-		reply_nterror(req, NT_STATUS_INVALID_DEVICE_REQUEST);
-		return False;
-	}
-	if ((fsp)->fh->fd == -1) {
-		reply_nterror(req, NT_STATUS_ACCESS_DENIED);
-		return False;
-	}
-	(fsp)->num_smb_operations++;
-	return True;
-}
-
-/****************************************************************************
- Check if we have a correct fsp. Replacement for the FSP_BELONGS_CONN macro
-****************************************************************************/
-
-bool fsp_belongs_conn(connection_struct *conn, struct smb_request *req,
-		      files_struct *fsp, struct current_user *user)
-{
-	if ((fsp) && (conn) && ((conn)==(fsp)->conn)
-	    && (current_user.vuid==(fsp)->vuid)) {
-		return True;
-	}
-
-	reply_nterror(req, NT_STATUS_INVALID_HANDLE);
-	return False;
-}
-
-/****************************************************************************
- Reply to a (netbios-level) special message.
-****************************************************************************/
-
-void reply_special(char *inbuf)
-{
+	int outsize = 4;
 	int msg_type = CVAL(inbuf,0);
 	int msg_flags = CVAL(inbuf,1);
 	fstring name1,name2;
 	char name_type = 0;
-
-	/*
-	 * We only really use 4 bytes of the outbuf, but for the smb_setlen
-	 * calculation & friends (srv_send_smb uses that) we need the full smb
-	 * header.
-	 */
-	char outbuf[smb_size];
 	
-	static bool already_got_session = False;
+	static BOOL already_got_session = False;
 
 	*name1 = *name2 = 0;
 	
-	memset(outbuf, '\0', sizeof(outbuf));
+	memset(outbuf,'\0',smb_size);
 
 	smb_setlen(outbuf,0);
 	
@@ -417,7 +316,7 @@
 		if (name_len(inbuf+4) > 50 || 
 		    name_len(inbuf+4 + name_len(inbuf + 4)) > 50) {
 			DEBUG(0,("Invalid name length in session request\n"));
-			return;
+			return(0);
 		}
 		name_extract(inbuf,4,name1);
 		name_type = name_extract(inbuf,4 + name_len(inbuf + 4),name2);
@@ -465,14 +364,13 @@
 		
 	case SMBkeepalive: /* session keepalive */
 	default:
-		return;
+		return(0);
 	}
 	
 	DEBUG(5,("init msg_type=0x%x msg_flags=0x%x\n",
 		    msg_type, msg_flags));
-
-	srv_send_smb(smbd_server_fd(), outbuf, false);
-	return;
+	
+	return(outsize);
 }
 
 /****************************************************************************
@@ -480,41 +378,30 @@
  conn POINTER CAN BE NULL HERE !
 ****************************************************************************/
 
-void reply_tcon(struct smb_request *req)
+int reply_tcon(connection_struct *conn,
+	       char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
 	const char *service;
-	char *service_buf = NULL;
-	char *password = NULL;
-	char *dev = NULL;
+	pstring service_buf;
+	pstring password;
+	pstring dev;
+	int outsize = 0;
+	uint16 vuid = SVAL(inbuf,smb_uid);
 	int pwlen=0;
 	NTSTATUS nt_status;
 	char *p;
 	DATA_BLOB password_blob;
-	TALLOC_CTX *ctx = talloc_tos();
-
+	
 	START_PROFILE(SMBtcon);
 
-	if (smb_buflen(req->inbuf) < 4) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBtcon);
-		return;
-	}
+	*service_buf = *password = *dev = 0;
 
-	p = smb_buf(req->inbuf)+1;
-	p += srvstr_pull_buf_talloc(ctx, req->inbuf, req->flags2,
-				    &service_buf, p, STR_TERMINATE) + 1;
-	pwlen = srvstr_pull_buf_talloc(ctx, req->inbuf, req->flags2,
-				       &password, p, STR_TERMINATE) + 1;
+	p = smb_buf(inbuf)+1;
+	p += srvstr_pull_buf(inbuf, service_buf, p, sizeof(service_buf), STR_TERMINATE) + 1;
+	pwlen = srvstr_pull_buf(inbuf, password, p, sizeof(password), STR_TERMINATE) + 1;
 	p += pwlen;
-	p += srvstr_pull_buf_talloc(ctx, req->inbuf, req->flags2,
-				    &dev, p, STR_TERMINATE) + 1;
+	p += srvstr_pull_buf(inbuf, dev, p, sizeof(dev), STR_TERMINATE) + 1;
 
-	if (service_buf == NULL || password == NULL || dev == NULL) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBtcon);
-		return;
-	}
 	p = strrchr_m(service_buf,'\\');
 	if (p) {
 		service = p+1;
@@ -524,27 +411,25 @@
 
 	password_blob = data_blob(password, pwlen+1);
 
-	conn = make_connection(service,password_blob,dev,req->vuid,&nt_status);
-	req->conn = conn;
+	conn = make_connection(service,password_blob,dev,vuid,&nt_status);
 
 	data_blob_clear_free(&password_blob);
-
+  
 	if (!conn) {
-		reply_nterror(req, nt_status);
 		END_PROFILE(SMBtcon);
-		return;
+		return ERROR_NT(nt_status);
 	}
-
-	reply_outbuf(req, 2, 0);
-	SSVAL(req->outbuf,smb_vwv0,max_recv);
-	SSVAL(req->outbuf,smb_vwv1,conn->cnum);
-	SSVAL(req->outbuf,smb_tid,conn->cnum);
-
-	DEBUG(3,("tcon service=%s cnum=%d\n",
+  
+	outsize = set_message(outbuf,2,0,True);
+	SSVAL(outbuf,smb_vwv0,max_recv);
+	SSVAL(outbuf,smb_vwv1,conn->cnum);
+	SSVAL(outbuf,smb_tid,conn->cnum);
+  
+	DEBUG(3,("tcon service=%s cnum=%d\n", 
 		 service, conn->cnum));
-
+  
 	END_PROFILE(SMBtcon);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
@@ -552,143 +437,106 @@
  conn POINTER CAN BE NULL HERE !
 ****************************************************************************/
 
-void reply_tcon_and_X(struct smb_request *req)
+int reply_tcon_and_X(connection_struct *conn, char *inbuf,char *outbuf,int length,int bufsize)
 {
-	connection_struct *conn = req->conn;
-	char *service = NULL;
+	fstring service;
 	DATA_BLOB password;
-	TALLOC_CTX *ctx = talloc_tos();
+
 	/* what the cleint thinks the device is */
-	char *client_devicetype = NULL;
+	fstring client_devicetype;
 	/* what the server tells the client the share represents */
 	const char *server_devicetype;
 	NTSTATUS nt_status;
-	int passlen;
-	char *path = NULL;
+	uint16 vuid = SVAL(inbuf,smb_uid);
+	int passlen = SVAL(inbuf,smb_vwv3);
+	pstring path;
 	char *p, *q;
-	uint16 tcon_flags;
+	uint16 tcon_flags = SVAL(inbuf,smb_vwv2);
+	
+	START_PROFILE(SMBtconX);	
 
-	START_PROFILE(SMBtconX);
+	*service = *client_devicetype = 0;
 
-	if (req->wct < 4) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBtconX);
-		return;
-	}
-
-	passlen = SVAL(req->inbuf,smb_vwv3);
-	tcon_flags = SVAL(req->inbuf,smb_vwv2);
-
 	/* we might have to close an old one */
-	if ((tcon_flags & 0x1) && conn) {
-		close_cnum(conn,req->vuid);
-		req->conn = NULL;
-		conn = NULL;
+	if ((SVAL(inbuf,smb_vwv2) & 0x1) && conn) {
+		close_cnum(conn,vuid);
 	}
 
-	if ((passlen > MAX_PASS_LEN) || (passlen >= smb_buflen(req->inbuf))) {
-		reply_doserror(req, ERRDOS, ERRbuftoosmall);
-		END_PROFILE(SMBtconX);
-		return;
+	if (passlen > MAX_PASS_LEN) {
+		return ERROR_DOS(ERRDOS,ERRbuftoosmall);
 	}
-
+ 
 	if (global_encrypted_passwords_negotiated) {
-		password = data_blob_talloc(talloc_tos(), smb_buf(req->inbuf),
-					    passlen);
+		password = data_blob(smb_buf(inbuf),passlen);
 		if (lp_security() == SEC_SHARE) {
 			/*
 			 * Security = share always has a pad byte
 			 * after the password.
 			 */
-			p = smb_buf(req->inbuf) + passlen + 1;
+			p = smb_buf(inbuf) + passlen + 1;
 		} else {
-			p = smb_buf(req->inbuf) + passlen;
+			p = smb_buf(inbuf) + passlen;
 		}
 	} else {
-		password = data_blob_talloc(talloc_tos(), smb_buf(req->inbuf),
-					    passlen+1);
+		password = data_blob(smb_buf(inbuf),passlen+1);
 		/* Ensure correct termination */
 		password.data[passlen]=0;
-		p = smb_buf(req->inbuf) + passlen + 1;
+		p = smb_buf(inbuf) + passlen + 1;
 	}
 
-	p += srvstr_pull_buf_talloc(ctx, req->inbuf, req->flags2, &path, p,
-			     STR_TERMINATE);
+	p += srvstr_pull_buf(inbuf, path, p, sizeof(path), STR_TERMINATE);
 
-	if (path == NULL) {
-		data_blob_clear_free(&password);
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBtconX);
-		return;
-	}
-
 	/*
 	 * the service name can be either: \\server\share
 	 * or share directly like on the DELL PowerVault 705
 	 */
-	if (*path=='\\') {
+	if (*path=='\\') {	
 		q = strchr_m(path+2,'\\');
 		if (!q) {
-			data_blob_clear_free(&password);
-			reply_doserror(req, ERRDOS, ERRnosuchshare);
 			END_PROFILE(SMBtconX);
-			return;
+			return(ERROR_DOS(ERRDOS,ERRnosuchshare));
 		}
-		service = q+1;
-	} else {
-		service = path;
+		fstrcpy(service,q+1);
 	}
+	else
+		fstrcpy(service,path);
+		
+	p += srvstr_pull(inbuf, client_devicetype, p, sizeof(client_devicetype), 6, STR_ASCII);
 
-	p += srvstr_pull_talloc(ctx, req->inbuf, req->flags2,
-				&client_devicetype, p,
-				MIN(6,smb_bufrem(req->inbuf, p)), STR_ASCII);
-
-	if (client_devicetype == NULL) {
-		data_blob_clear_free(&password);
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBtconX);
-		return;
-	}
-
 	DEBUG(4,("Client requested device type [%s] for share [%s]\n", client_devicetype, service));
 
-	conn = make_connection(service, password, client_devicetype,
-			       req->vuid, &nt_status);
-	req->conn =conn;
-
+	conn = make_connection(service,password,client_devicetype,vuid,&nt_status);
+	
 	data_blob_clear_free(&password);
 
 	if (!conn) {
-		reply_nterror(req, nt_status);
 		END_PROFILE(SMBtconX);
-		return;
+		return ERROR_NT(nt_status);
 	}
 
 	if ( IS_IPC(conn) )
 		server_devicetype = "IPC";
 	else if ( IS_PRINT(conn) )
 		server_devicetype = "LPT1:";
-	else
+	else 
 		server_devicetype = "A:";
 
 	if (Protocol < PROTOCOL_NT1) {
-		reply_outbuf(req, 2, 0);
-		if (message_push_string(&req->outbuf, server_devicetype,
-					STR_TERMINATE|STR_ASCII) == -1) {
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
-			END_PROFILE(SMBtconX);
-			return;
-		}
+		set_message(outbuf,2,0,True);
+		p = smb_buf(outbuf);
+		p += srvstr_push(outbuf, p, server_devicetype, BUFFER_SIZE - (p - outbuf),
+				 STR_TERMINATE|STR_ASCII);
+		set_message_end(outbuf,p);
 	} else {
 		/* NT sets the fstype of IPC$ to the null string */
 		const char *fstype = IS_IPC(conn) ? "" : lp_fstype(SNUM(conn));
-
+		
 		if (tcon_flags & TCONX_FLAG_EXTENDED_RESPONSE) {
 			/* Return permissions. */
 			uint32 perm1 = 0;
 			uint32 perm2 = 0;
 
-			reply_outbuf(req, 7, 0);
+			set_message(outbuf,7,0,True);
 
 			if (IS_IPC(conn)) {
 				perm1 = FILE_ALL_ACCESS;
@@ -699,53 +547,53 @@
 						SHARE_READ_ONLY;
 			}
 
-			SIVAL(req->outbuf, smb_vwv3, perm1);
-			SIVAL(req->outbuf, smb_vwv5, perm2);
+			SIVAL(outbuf, smb_vwv3, perm1);
+			SIVAL(outbuf, smb_vwv5, perm2);
 		} else {
-			reply_outbuf(req, 3, 0);
+			set_message(outbuf,3,0,True);
 		}
 
-		if ((message_push_string(&req->outbuf, server_devicetype,
-					 STR_TERMINATE|STR_ASCII) == -1)
-		    || (message_push_string(&req->outbuf, fstype,
-					    STR_TERMINATE) == -1)) {
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
-			END_PROFILE(SMBtconX);
-			return;
-		}
-
+		p = smb_buf(outbuf);
+		p += srvstr_push(outbuf, p, server_devicetype, BUFFER_SIZE - (p - outbuf),
+				 STR_TERMINATE|STR_ASCII);
+		p += srvstr_push(outbuf, p, fstype, BUFFER_SIZE - (p - outbuf),
+				 STR_TERMINATE);
+		
+		set_message_end(outbuf,p);
+		
 		/* what does setting this bit do? It is set by NT4 and
 		   may affect the ability to autorun mounted cdroms */
-		SSVAL(req->outbuf, smb_vwv2, SMB_SUPPORT_SEARCH_BITS|
-		      (lp_csc_policy(SNUM(conn)) << 2));
-
-		init_dfsroot(conn, req->inbuf, req->outbuf);
+		SSVAL(outbuf, smb_vwv2, SMB_SUPPORT_SEARCH_BITS|
+				(lp_csc_policy(SNUM(conn)) << 2));
+		
+		init_dfsroot(conn, inbuf, outbuf);
 	}
 
-
+  
 	DEBUG(3,("tconX service=%s \n",
 		 service));
-
+  
 	/* set the incoming and outgoing tid to the just created one */
-	SSVAL(req->inbuf,smb_tid,conn->cnum);
-	SSVAL(req->outbuf,smb_tid,conn->cnum);
+	SSVAL(inbuf,smb_tid,conn->cnum);
+	SSVAL(outbuf,smb_tid,conn->cnum);
 
 	END_PROFILE(SMBtconX);
-
-	chain_reply(req);
-	return;
+	return chain_reply(inbuf,outbuf,length,bufsize);
 }
 
 /****************************************************************************
  Reply to an unknown type.
 ****************************************************************************/
 
-void reply_unknown_new(struct smb_request *req, uint8 type)
+int reply_unknown(char *inbuf,char *outbuf)
 {
-	DEBUG(0, ("unknown command type (%s): type=%d (0x%X)\n",
-		  smb_fn_name(type), type, type));
-	reply_doserror(req, ERRSRV, ERRunknownsmb);
-	return;
+	int type;
+	type = CVAL(inbuf,smb_com);
+  
+	DEBUG(0,("unknown command type (%s): type=%d (0x%X)\n",
+		 smb_fn_name(type), type, type));
+  
+	return(ERROR_DOS(ERRSRV,ERRunknownsmb));
 }
 
 /****************************************************************************
@@ -753,74 +601,52 @@
  conn POINTER CAN BE NULL HERE !
 ****************************************************************************/
 
-void reply_ioctl(struct smb_request *req)
+int reply_ioctl(connection_struct *conn,
+		char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
-	uint16 device;
-	uint16 function;
-	uint32 ioctl_code;
-	int replysize;
+	uint16 device     = SVAL(inbuf,smb_vwv1);
+	uint16 function   = SVAL(inbuf,smb_vwv2);
+	uint32 ioctl_code = (device << 16) + function;
+	int replysize, outsize;
 	char *p;
-
 	START_PROFILE(SMBioctl);
 
-	if (req->wct < 3) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBioctl);
-		return;
-	}
-
-	device     = SVAL(req->inbuf,smb_vwv1);
-	function   = SVAL(req->inbuf,smb_vwv2);
-	ioctl_code = (device << 16) + function;
-
 	DEBUG(4, ("Received IOCTL (code 0x%x)\n", ioctl_code));
 
 	switch (ioctl_code) {
 	    case IOCTL_QUERY_JOB_INFO:
-		    replysize = 32;
-		    break;
+		replysize = 32;
+		break;
 	    default:
-		    reply_doserror(req, ERRSRV, ERRnosupport);
-		    END_PROFILE(SMBioctl);
-		    return;
+		END_PROFILE(SMBioctl);
+		return(ERROR_DOS(ERRSRV,ERRnosupport));
 	}
 
-	reply_outbuf(req, 8, replysize+1);
-	SSVAL(req->outbuf,smb_vwv1,replysize); /* Total data bytes returned */
-	SSVAL(req->outbuf,smb_vwv5,replysize); /* Data bytes this buffer */
-	SSVAL(req->outbuf,smb_vwv6,52);        /* Offset to data */
-	p = smb_buf(req->outbuf);
-	memset(p, '\0', replysize+1); /* valgrind-safe. */
-	p += 1;          /* Allow for alignment */
+	outsize = set_message(outbuf,8,replysize+1,True);
+	SSVAL(outbuf,smb_vwv1,replysize); /* Total data bytes returned */
+	SSVAL(outbuf,smb_vwv5,replysize); /* Data bytes this buffer */
+	SSVAL(outbuf,smb_vwv6,52);        /* Offset to data */
+	p = smb_buf(outbuf) + 1;          /* Allow for alignment */
 
 	switch (ioctl_code) {
 		case IOCTL_QUERY_JOB_INFO:		    
 		{
-			files_struct *fsp = file_fsp(SVAL(req->inbuf,
-							  smb_vwv0));
+			files_struct *fsp = file_fsp(inbuf,smb_vwv0);
 			if (!fsp) {
-				reply_doserror(req, ERRDOS, ERRbadfid);
 				END_PROFILE(SMBioctl);
-				return;
+				return(UNIXERROR(ERRDOS,ERRbadfid));
 			}
 			SSVAL(p,0,fsp->rap_print_jobid);             /* Job number */
-			srvstr_push((char *)req->outbuf, req->flags2, p+2,
-				    global_myname(), 15,
-				    STR_TERMINATE|STR_ASCII);
+			srvstr_push(outbuf, p+2, global_myname(), 15, STR_TERMINATE|STR_ASCII);
 			if (conn) {
-				srvstr_push((char *)req->outbuf, req->flags2,
-					    p+18, lp_servicename(SNUM(conn)),
-					    13, STR_TERMINATE|STR_ASCII);
-			} else {
-				memset(p+18, 0, 13);
+				srvstr_push(outbuf, p+18, lp_servicename(SNUM(conn)), 13, STR_TERMINATE|STR_ASCII);
 			}
 			break;
 		}
 	}
 
 	END_PROFILE(SMBioctl);
-	return;
+	return outsize;
 }
 
 /****************************************************************************
@@ -838,48 +664,39 @@
 	}
 	return status;
 }
-
+	
 /****************************************************************************
  Reply to a checkpath.
 ****************************************************************************/
 
-void reply_checkpath(struct smb_request *req)
+int reply_checkpath(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
-	char *name = NULL;
+	int outsize = 0;
+	pstring name;
 	SMB_STRUCT_STAT sbuf;
 	NTSTATUS status;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	START_PROFILE(SMBcheckpath);
 
-	srvstr_get_path(ctx,(char *)req->inbuf, req->flags2, &name,
-			smb_buf(req->inbuf) + 1, 0,
-			STR_TERMINATE, &status);
+	srvstr_get_path(inbuf, name, smb_buf(inbuf) + 1, sizeof(name), 0, STR_TERMINATE, &status);
 	if (!NT_STATUS_IS_OK(status)) {
-		status = map_checkpath_error((char *)req->inbuf, status);
-		reply_nterror(req, status);
 		END_PROFILE(SMBcheckpath);
-		return;
+		status = map_checkpath_error(inbuf, status);
+		return ERROR_NT(status);
 	}
 
-	status = resolve_dfspath(ctx, conn,
-			req->flags2 & FLAGS2_DFS_PATHNAMES,
-			name,
-			&name);
+	status = resolve_dfspath(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, name);
 	if (!NT_STATUS_IS_OK(status)) {
 		if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
-			reply_botherror(req, NT_STATUS_PATH_NOT_COVERED,
-					ERRSRV, ERRbadpath);
 			END_PROFILE(SMBcheckpath);
-			return;
+			return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, ERRbadpath);
 		}
 		goto path_err;
 	}
 
-	DEBUG(3,("reply_checkpath %s mode=%d\n", name, (int)SVAL(req->inbuf,smb_vwv0)));
+	DEBUG(3,("reply_checkpath %s mode=%d\n", name, (int)SVAL(inbuf,smb_vwv0)));
 
-	status = unix_convert(ctx, conn, name, False, &name, NULL, &sbuf);
+	status = unix_convert(conn, name, False, NULL, &sbuf);
 	if (!NT_STATUS_IS_OK(status)) {
 		goto path_err;
 	}
@@ -897,16 +714,14 @@
 	}
 
 	if (!S_ISDIR(sbuf.st_mode)) {
-		reply_botherror(req, NT_STATUS_NOT_A_DIRECTORY,
-				ERRDOS, ERRbadpath);
 		END_PROFILE(SMBcheckpath);
-		return;
+		return ERROR_BOTH(NT_STATUS_NOT_A_DIRECTORY,ERRDOS,ERRbadpath);
 	}
 
-	reply_outbuf(req, 0, 0);
+	outsize = set_message(outbuf,0,0,False);
 
 	END_PROFILE(SMBcheckpath);
-	return;
+	return outsize;
 
   path_err:
 
@@ -917,8 +732,8 @@
 		one at a time - if a component fails it expects
 		ERRbadpath, not ERRbadfile.
 	*/
-	status = map_checkpath_error((char *)req->inbuf, status);
-	if (NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_NOT_FOUND)) {
+	status = map_checkpath_error(inbuf, status);
+	if(NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_NOT_FOUND)) {
 		/*
 		 * Windows returns different error codes if
 		 * the parent directory is valid but not the
@@ -926,57 +741,45 @@
 		 * for that case and NT_STATUS_OBJECT_PATH_NOT_FOUND
 		 * if the path is invalid.
 		 */
-		reply_botherror(req, NT_STATUS_OBJECT_NAME_NOT_FOUND,
-				ERRDOS, ERRbadpath);
-		return;
+		return ERROR_BOTH(NT_STATUS_OBJECT_NAME_NOT_FOUND,ERRDOS,ERRbadpath);
 	}
 
-	reply_nterror(req, status);
+	return ERROR_NT(status);
 }
 
 /****************************************************************************
  Reply to a getatr.
 ****************************************************************************/
 
-void reply_getatr(struct smb_request *req)
+int reply_getatr(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
-	char *fname = NULL;
+	pstring fname;
+	int outsize = 0;
 	SMB_STRUCT_STAT sbuf;
 	int mode=0;
 	SMB_OFF_T size=0;
 	time_t mtime=0;
 	char *p;
 	NTSTATUS status;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	START_PROFILE(SMBgetatr);
 
-	p = smb_buf(req->inbuf) + 1;
-	p += srvstr_get_path(ctx, (char *)req->inbuf, req->flags2, &fname, p,
-			     0, STR_TERMINATE, &status);
+	p = smb_buf(inbuf) + 1;
+	p += srvstr_get_path(inbuf, fname, p, sizeof(fname), 0, STR_TERMINATE, &status);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBgetatr);
-		return;
+		return ERROR_NT(status);
 	}
 
-	status = resolve_dfspath(ctx, conn,
-				req->flags2 & FLAGS2_DFS_PATHNAMES,
-				fname,
-				&fname);
+	status = resolve_dfspath(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, fname);
 	if (!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(SMBgetatr);
 		if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
-			reply_botherror(req, NT_STATUS_PATH_NOT_COVERED,
-					ERRSRV, ERRbadpath);
-			END_PROFILE(SMBgetatr);
-			return;
+			return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, ERRbadpath);
 		}
-		reply_nterror(req, status);
-		END_PROFILE(SMBgetatr);
-		return;
+		return ERROR_NT(status);
 	}
-
+  
 	/* dos smetimes asks for a stat of "" - it returns a "hidden directory"
 		under WfWg - weird! */
 	if (*fname == '\0') {
@@ -987,24 +790,20 @@
 		size = 0;
 		mtime = 0;
 	} else {
-		status = unix_convert(ctx, conn, fname, False, &fname, NULL,&sbuf);
+		status = unix_convert(conn, fname, False, NULL,&sbuf);
 		if (!NT_STATUS_IS_OK(status)) {
-			reply_nterror(req, status);
 			END_PROFILE(SMBgetatr);
-			return;
+			return ERROR_NT(status);
 		}
 		status = check_name(conn, fname);
 		if (!NT_STATUS_IS_OK(status)) {
 			DEBUG(3,("reply_getatr: check_name of %s failed (%s)\n",fname,nt_errstr(status)));
-			reply_nterror(req, status);
 			END_PROFILE(SMBgetatr);
-			return;
+			return ERROR_NT(status);
 		}
 		if (!VALID_STAT(sbuf) && (SMB_VFS_STAT(conn,fname,&sbuf) != 0)) {
 			DEBUG(3,("reply_getatr: stat of %s failed (%s)\n",fname,strerror(errno)));
-			reply_unixerror(req, ERRDOS,ERRbadfile);
-			END_PROFILE(SMBgetatr);
-			return;
+			return UNIXERROR(ERRDOS,ERRbadfile);
 		}
 
 		mode = dos_mode(conn,fname,&sbuf);
@@ -1014,90 +813,69 @@
 			size = 0;
 		}
 	}
+  
+	outsize = set_message(outbuf,10,0,True);
 
-	reply_outbuf(req, 10, 0);
-
-	SSVAL(req->outbuf,smb_vwv0,mode);
+	SSVAL(outbuf,smb_vwv0,mode);
 	if(lp_dos_filetime_resolution(SNUM(conn)) ) {
-		srv_put_dos_date3((char *)req->outbuf,smb_vwv1,mtime & ~1);
+		srv_put_dos_date3(outbuf,smb_vwv1,mtime & ~1);
 	} else {
-		srv_put_dos_date3((char *)req->outbuf,smb_vwv1,mtime);
+		srv_put_dos_date3(outbuf,smb_vwv1,mtime);
 	}
-	SIVAL(req->outbuf,smb_vwv3,(uint32)size);
+	SIVAL(outbuf,smb_vwv3,(uint32)size);
 
 	if (Protocol >= PROTOCOL_NT1) {
-		SSVAL(req->outbuf, smb_flg2,
-		      SVAL(req->outbuf, smb_flg2) | FLAGS2_IS_LONG_NAME);
+		SSVAL(outbuf,smb_flg2,SVAL(outbuf, smb_flg2) | FLAGS2_IS_LONG_NAME);
 	}
   
 	DEBUG(3,("reply_getatr: name=%s mode=%d size=%u\n", fname, mode, (unsigned int)size ) );
-
+  
 	END_PROFILE(SMBgetatr);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
  Reply to a setatr.
 ****************************************************************************/
 
-void reply_setatr(struct smb_request *req)
+int reply_setatr(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
-	struct timespec ts[2];
-	connection_struct *conn = req->conn;
-	char *fname = NULL;
+	pstring fname;
+	int outsize = 0;
 	int mode;
 	time_t mtime;
 	SMB_STRUCT_STAT sbuf;
 	char *p;
 	NTSTATUS status;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	START_PROFILE(SMBsetatr);
 
-	ZERO_STRUCT(ts);
-
-	if (req->wct < 2) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
-	}
-
-	p = smb_buf(req->inbuf) + 1;
-	p += srvstr_get_path(ctx, (char *)req->inbuf, req->flags2, &fname, p,
-				0, STR_TERMINATE, &status);
+	p = smb_buf(inbuf) + 1;
+	p += srvstr_get_path(inbuf, fname, p, sizeof(fname), 0, STR_TERMINATE, &status);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBsetatr);
-		return;
+		return ERROR_NT(status);
 	}
 
-	status = resolve_dfspath(ctx, conn,
-				req->flags2 & FLAGS2_DFS_PATHNAMES,
-				fname,
-				&fname);
+	status = resolve_dfspath(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, fname);
 	if (!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(SMBsetatr);
 		if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
-			reply_botherror(req, NT_STATUS_PATH_NOT_COVERED,
-					ERRSRV, ERRbadpath);
-			END_PROFILE(SMBsetatr);
-			return;
+			return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, ERRbadpath);
 		}
-		reply_nterror(req, status);
-		END_PROFILE(SMBsetatr);
-		return;
+		return ERROR_NT(status);
 	}
-
-	status = unix_convert(ctx, conn, fname, False, &fname, NULL, &sbuf);
+  
+	status = unix_convert(conn, fname, False, NULL, &sbuf);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBsetatr);
-		return;
+		return ERROR_NT(status);
 	}
 
 	status = check_name(conn, fname);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBsetatr);
-		return;
+		return ERROR_NT(status);
 	}
 
 	if (fname[0] == '.' && fname[1] == '\0') {
@@ -1105,61 +883,54 @@
 		 * Not sure here is the right place to catch this
 		 * condition. Might be moved to somewhere else later -- vl
 		 */
-		reply_nterror(req, NT_STATUS_ACCESS_DENIED);
 		END_PROFILE(SMBsetatr);
-		return;
+		return ERROR_NT(NT_STATUS_ACCESS_DENIED);
 	}
 
-	mode = SVAL(req->inbuf,smb_vwv0);
-	mtime = srv_make_unix_date3(req->inbuf+smb_vwv1);
-
-	ts[1] = convert_time_t_to_timespec(mtime);
-	status = smb_set_file_time(conn, NULL, fname,
-				   &sbuf, ts, true);
-	if (!NT_STATUS_IS_OK(status)) {
-		reply_unixerror(req, ERRDOS, ERRnoaccess);
-		END_PROFILE(SMBsetatr);
-		return;
-	}
-
+	mode = SVAL(inbuf,smb_vwv0);
+	mtime = srv_make_unix_date3(inbuf+smb_vwv1);
+  
 	if (mode != FILE_ATTRIBUTE_NORMAL) {
 		if (VALID_STAT_OF_DIR(sbuf))
 			mode |= aDIR;
 		else
 			mode &= ~aDIR;
 
-		if (file_set_dosmode(conn,fname,mode,&sbuf,NULL,false) != 0) {
-			reply_unixerror(req, ERRDOS, ERRnoaccess);
+		if (file_set_dosmode(conn,fname,mode,&sbuf,False) != 0) {
 			END_PROFILE(SMBsetatr);
-			return;
+			return UNIXERROR(ERRDOS, ERRnoaccess);
 		}
 	}
 
-	reply_outbuf(req, 0, 0);
+	if (!set_filetime(conn,fname,convert_time_t_to_timespec(mtime))) {
+		END_PROFILE(SMBsetatr);
+		return UNIXERROR(ERRDOS, ERRnoaccess);
+	}
  
+	outsize = set_message(outbuf,0,0,False);
+  
 	DEBUG( 3, ( "setatr name=%s mode=%d\n", fname, mode ) );
   
 	END_PROFILE(SMBsetatr);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
  Reply to a dskattr.
 ****************************************************************************/
 
-void reply_dskattr(struct smb_request *req)
+int reply_dskattr(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
+	int outsize = 0;
 	SMB_BIG_UINT dfree,dsize,bsize;
 	START_PROFILE(SMBdskattr);
 
 	if (get_dfree_info(conn,".",True,&bsize,&dfree,&dsize) == (SMB_BIG_UINT)-1) {
-		reply_unixerror(req, ERRHRD, ERRgeneral);
 		END_PROFILE(SMBdskattr);
-		return;
+		return(UNIXERROR(ERRHRD,ERRgeneral));
 	}
-
-	reply_outbuf(req, 5, 0);
+  
+	outsize = set_message(outbuf,5,0,True);
 	
 	if (Protocol <= PROTOCOL_LANMAN2) {
 		double total_space, free_space;
@@ -1172,27 +943,27 @@
 		total_space = dsize * (double)bsize;
 		free_space = dfree * (double)bsize;
 
-		dsize = (SMB_BIG_UINT)((total_space+63*512) / (64*512));
-		dfree = (SMB_BIG_UINT)((free_space+63*512) / (64*512));
+		dsize = (total_space+63*512) / (64*512);
+		dfree = (free_space+63*512) / (64*512);
 		
 		if (dsize > 0xFFFF) dsize = 0xFFFF;
 		if (dfree > 0xFFFF) dfree = 0xFFFF;
 
-		SSVAL(req->outbuf,smb_vwv0,dsize);
-		SSVAL(req->outbuf,smb_vwv1,64); /* this must be 64 for dos systems */
-		SSVAL(req->outbuf,smb_vwv2,512); /* and this must be 512 */
-		SSVAL(req->outbuf,smb_vwv3,dfree);
+		SSVAL(outbuf,smb_vwv0,dsize);
+		SSVAL(outbuf,smb_vwv1,64); /* this must be 64 for dos systems */
+		SSVAL(outbuf,smb_vwv2,512); /* and this must be 512 */
+		SSVAL(outbuf,smb_vwv3,dfree);
 	} else {
-		SSVAL(req->outbuf,smb_vwv0,dsize);
-		SSVAL(req->outbuf,smb_vwv1,bsize/512);
-		SSVAL(req->outbuf,smb_vwv2,512);
-		SSVAL(req->outbuf,smb_vwv3,dfree);
+		SSVAL(outbuf,smb_vwv0,dsize);
+		SSVAL(outbuf,smb_vwv1,bsize/512);
+		SSVAL(outbuf,smb_vwv2,512);
+		SSVAL(outbuf,smb_vwv3,dfree);
 	}
 
 	DEBUG(3,("dskattr dfree=%d\n", (unsigned int)dfree));
 
 	END_PROFILE(SMBdskattr);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
@@ -1200,151 +971,99 @@
  Can be called from SMBsearch, SMBffirst or SMBfunique.
 ****************************************************************************/
 
-void reply_search(struct smb_request *req)
+int reply_search(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
-	char *mask = NULL;
-	char *directory = NULL;
-	char *fname = NULL;
+	pstring mask;
+	pstring directory;
+	pstring fname;
 	SMB_OFF_T size;
 	uint32 mode;
 	time_t date;
 	uint32 dirtype;
+	int outsize = 0;
 	unsigned int numentries = 0;
 	unsigned int maxentries = 0;
-	bool finished = False;
+	BOOL finished = False;
 	char *p;
 	int status_len;
-	char *path = NULL;
+	pstring path;
 	char status[21];
 	int dptr_num= -1;
-	bool check_descend = False;
-	bool expect_close = False;
+	BOOL check_descend = False;
+	BOOL expect_close = False;
 	NTSTATUS nt_status;
-	bool mask_contains_wcard = False;
-	bool allow_long_path_components = (req->flags2 & FLAGS2_LONG_PATH_COMPONENTS) ? True : False;
-	TALLOC_CTX *ctx = talloc_tos();
-	bool ask_sharemode = lp_parm_bool(SNUM(conn), "smbd", "search ask sharemode", true);
+	BOOL mask_contains_wcard = False;
+	BOOL allow_long_path_components = (SVAL(inbuf,smb_flg2) & FLAGS2_LONG_PATH_COMPONENTS) ? True : False;
 
 	START_PROFILE(SMBsearch);
 
-	if (req->wct < 2) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBsearch);
-		return;
-	}
-
 	if (lp_posix_pathnames()) {
-		reply_unknown_new(req, CVAL(req->inbuf, smb_com));
 		END_PROFILE(SMBsearch);
-		return;
+		return reply_unknown(inbuf, outbuf);
 	}
 
+	*mask = *directory = *fname = 0;
+
 	/* If we were called as SMBffirst then we must expect close. */
-	if(CVAL(req->inbuf,smb_com) == SMBffirst) {
+	if(CVAL(inbuf,smb_com) == SMBffirst) {
 		expect_close = True;
 	}
-
-	reply_outbuf(req, 1, 3);
-	maxentries = SVAL(req->inbuf,smb_vwv0);
-	dirtype = SVAL(req->inbuf,smb_vwv1);
-	p = smb_buf(req->inbuf) + 1;
-	p += srvstr_get_path_wcard(ctx,
-				(char *)req->inbuf,
-				req->flags2,
-				&path,
-				p,
-				0,
-				STR_TERMINATE,
-				&nt_status,
-				&mask_contains_wcard);
+  
+	outsize = set_message(outbuf,1,3,True);
+	maxentries = SVAL(inbuf,smb_vwv0); 
+	dirtype = SVAL(inbuf,smb_vwv1);
+	p = smb_buf(inbuf) + 1;
+	p += srvstr_get_path_wcard(inbuf, path, p, sizeof(path), 0, STR_TERMINATE, &nt_status, &mask_contains_wcard);
 	if (!NT_STATUS_IS_OK(nt_status)) {
-		reply_nterror(req, nt_status);
 		END_PROFILE(SMBsearch);
-		return;
+		return ERROR_NT(nt_status);
 	}
 
-	nt_status = resolve_dfspath_wcard(ctx, conn,
-					  req->flags2 & FLAGS2_DFS_PATHNAMES,
-					  path,
-					  &path,
-					  &mask_contains_wcard);
+	nt_status = resolve_dfspath_wcard(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, path, &mask_contains_wcard);
 	if (!NT_STATUS_IS_OK(nt_status)) {
+		END_PROFILE(SMBsearch);
 		if (NT_STATUS_EQUAL(nt_status,NT_STATUS_PATH_NOT_COVERED)) {
-			reply_botherror(req, NT_STATUS_PATH_NOT_COVERED,
-					ERRSRV, ERRbadpath);
-			END_PROFILE(SMBsearch);
-			return;
+			return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, ERRbadpath);
 		}
-		reply_nterror(req, nt_status);
-		END_PROFILE(SMBsearch);
-		return;
+		return ERROR_NT(nt_status);
 	}
-
+  
 	p++;
 	status_len = SVAL(p, 0);
 	p += 2;
-
+  
 	/* dirtype &= ~aDIR; */
 
 	if (status_len == 0) {
 		SMB_STRUCT_STAT sbuf;
 
-		nt_status = unix_convert(ctx, conn, path, True,
-				&directory, NULL, &sbuf);
+		pstrcpy(directory,path);
+		nt_status = unix_convert(conn, directory, True, NULL, &sbuf);
 		if (!NT_STATUS_IS_OK(nt_status)) {
-			reply_nterror(req, nt_status);
 			END_PROFILE(SMBsearch);
-			return;
+			return ERROR_NT(nt_status);
 		}
 
 		nt_status = check_name(conn, directory);
 		if (!NT_STATUS_IS_OK(nt_status)) {
-			reply_nterror(req, nt_status);
 			END_PROFILE(SMBsearch);
-			return;
+			return ERROR_NT(nt_status);
 		}
 
 		p = strrchr_m(directory,'/');
 		if (!p) {
-			mask = directory;
-			directory = talloc_strdup(ctx,".");
-			if (!directory) {
-				reply_nterror(req, NT_STATUS_NO_MEMORY);
-				END_PROFILE(SMBsearch);
-				return;
-			}
+			pstrcpy(mask,directory);
+			pstrcpy(directory,".");
 		} else {
 			*p = 0;
-			mask = p+1;
+			pstrcpy(mask,p+1);
 		}
 
 		if (*directory == '\0') {
-			directory = talloc_strdup(ctx,".");
-			if (!directory) {
-				reply_nterror(req, NT_STATUS_NO_MEMORY);
-				END_PROFILE(SMBsearch);
-				return;
-			}
+			pstrcpy(directory,".");
 		}
 		memset((char *)status,'\0',21);
 		SCVAL(status,0,(dirtype & 0x1F));
-
-		nt_status = dptr_create(conn,
-					directory,
-					True,
-					expect_close,
-					req->smbpid,
-					mask,
-					mask_contains_wcard,
-					dirtype,
-					&conn->dirptr);
-		if (!NT_STATUS_IS_OK(nt_status)) {
-			reply_nterror(req, nt_status);
-			END_PROFILE(SMBsearch);
-			return;
-		}
-		dptr_num = dptr_dnum(conn->dirptr);
 	} else {
 		int status_dirtype;
 
@@ -1354,54 +1073,55 @@
 			dirtype = status_dirtype;
 		}
 
-		conn->dirptr = dptr_fetch(status+12,&dptr_num);
+		conn->dirptr = dptr_fetch(status+12,&dptr_num);      
 		if (!conn->dirptr) {
 			goto SearchEmpty;
 		}
 		string_set(&conn->dirpath,dptr_path(dptr_num));
-		mask = dptr_wcard(dptr_num);
-		if (!mask) {
-			goto SearchEmpty;
-		}
+		pstrcpy(mask, dptr_wcard(dptr_num));
 		/*
 		 * For a 'continue' search we have no string. So
 		 * check from the initial saved string.
 		 */
 		mask_contains_wcard = ms_has_wild(mask);
+	}
+
+	p = smb_buf(outbuf) + 3;
+     
+	if (status_len == 0) {
+		nt_status = dptr_create(conn,
+					directory,
+					True,
+					expect_close,
+					SVAL(inbuf,smb_pid),
+					mask,
+					mask_contains_wcard,
+					dirtype,
+					&conn->dirptr);
+		if (!NT_STATUS_IS_OK(nt_status)) {
+			return ERROR_NT(nt_status);
+		}
+		dptr_num = dptr_dnum(conn->dirptr);
+	} else {
 		dirtype = dptr_attr(dptr_num);
 	}
 
 	DEBUG(4,("dptr_num is %d\n",dptr_num));
 
-	if ((dirtype&0x1F) == aVOLID) {
-		char buf[DIR_STRUCT_SIZE];
-		memcpy(buf,status,21);
-		if (!make_dir_struct(ctx,buf,"???????????",volume_label(SNUM(conn)),
-				0,aVOLID,0,!allow_long_path_components)) {
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
-			END_PROFILE(SMBsearch);
-			return;
-		}
-		dptr_fill(buf+12,dptr_num);
-		if (dptr_zero(buf+12) && (status_len==0)) {
+	if ((dirtype&0x1F) == aVOLID) {	  
+		memcpy(p,status,21);
+		make_dir_struct(p,"???????????",volume_label(SNUM(conn)),
+				0,aVOLID,0,!allow_long_path_components);
+		dptr_fill(p+12,dptr_num);
+		if (dptr_zero(p+12) && (status_len==0)) {
 			numentries = 1;
 		} else {
 			numentries = 0;
 		}
-		if (message_push_blob(&req->outbuf,
-				      data_blob_const(buf, sizeof(buf)))
-		    == -1) {
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
-			END_PROFILE(SMBsearch);
-			return;
-		}
+		p += DIR_STRUCT_SIZE;
 	} else {
 		unsigned int i;
-		maxentries = MIN(
-			maxentries,
-			((BUFFER_SIZE -
-			  ((uint8 *)smb_buf(req->outbuf) + 3 - req->outbuf))
-			 /DIR_STRUCT_SIZE));
+		maxentries = MIN(maxentries, ((BUFFER_SIZE - (p - outbuf))/DIR_STRUCT_SIZE));
 
 		DEBUG(8,("dirpath=<%s> dontdescend=<%s>\n",
 			conn->dirpath,lp_dontdescend(SNUM(conn))));
@@ -1410,42 +1130,16 @@
 		}
 
 		for (i=numentries;(i<maxentries) && !finished;i++) {
-			finished = !get_dir_entry(ctx,
-						  conn,
-						  mask,
-						  dirtype,
-						  &fname,
-						  &size,
-						  &mode,
-						  &date,
-						  check_descend,
-						  ask_sharemode);
+			finished = !get_dir_entry(conn,mask,dirtype,fname,&size,&mode,&date,check_descend);
 			if (!finished) {
-				char buf[DIR_STRUCT_SIZE];
-				memcpy(buf,status,21);
-				if (!make_dir_struct(ctx,
-						buf,
-						mask,
-						fname,
-						size,
-						mode,
-						date,
-						!allow_long_path_components)) {
-					reply_nterror(req, NT_STATUS_NO_MEMORY);
-					END_PROFILE(SMBsearch);
-					return;
-				}
-				if (!dptr_fill(buf+12,dptr_num)) {
+				memcpy(p,status,21);
+				make_dir_struct(p,mask,fname,size, mode,date,
+						!allow_long_path_components);
+				if (!dptr_fill(p+12,dptr_num)) {
 					break;
 				}
-				if (message_push_blob(&req->outbuf,
-						      data_blob_const(buf, sizeof(buf)))
-				    == -1) {
-					reply_nterror(req, NT_STATUS_NO_MEMORY);
-					END_PROFILE(SMBsearch);
-					return;
-				}
 				numentries++;
+				p += DIR_STRUCT_SIZE;
 			}
 		}
 	}
@@ -1464,96 +1158,78 @@
 	}
 
 	/* If we were called as SMBfunique, then we can close the dirptr now ! */
-	if(dptr_num >= 0 && CVAL(req->inbuf,smb_com) == SMBfunique) {
+	if(dptr_num >= 0 && CVAL(inbuf,smb_com) == SMBfunique) {
 		dptr_close(&dptr_num);
 	}
 
 	if ((numentries == 0) && !mask_contains_wcard) {
-		reply_botherror(req, STATUS_NO_MORE_FILES, ERRDOS, ERRnofiles);
-		END_PROFILE(SMBsearch);
-		return;
+		return ERROR_BOTH(STATUS_NO_MORE_FILES,ERRDOS,ERRnofiles);
 	}
 
-	SSVAL(req->outbuf,smb_vwv0,numentries);
-	SSVAL(req->outbuf,smb_vwv1,3 + numentries * DIR_STRUCT_SIZE);
-	SCVAL(smb_buf(req->outbuf),0,5);
-	SSVAL(smb_buf(req->outbuf),1,numentries*DIR_STRUCT_SIZE);
+	SSVAL(outbuf,smb_vwv0,numentries);
+	SSVAL(outbuf,smb_vwv1,3 + numentries * DIR_STRUCT_SIZE);
+	SCVAL(smb_buf(outbuf),0,5);
+	SSVAL(smb_buf(outbuf),1,numentries*DIR_STRUCT_SIZE);
 
 	/* The replies here are never long name. */
-	SSVAL(req->outbuf, smb_flg2,
-	      SVAL(req->outbuf, smb_flg2) & (~FLAGS2_IS_LONG_NAME));
+	SSVAL(outbuf,smb_flg2,SVAL(outbuf, smb_flg2) & (~FLAGS2_IS_LONG_NAME));
 	if (!allow_long_path_components) {
-		SSVAL(req->outbuf, smb_flg2,
-		      SVAL(req->outbuf, smb_flg2)
-		      & (~FLAGS2_LONG_PATH_COMPONENTS));
+		SSVAL(outbuf,smb_flg2,SVAL(outbuf, smb_flg2) & (~FLAGS2_LONG_PATH_COMPONENTS));
 	}
 
 	/* This SMB *always* returns ASCII names. Remove the unicode bit in flags2. */
-	SSVAL(req->outbuf, smb_flg2,
-	      (SVAL(req->outbuf, smb_flg2) & (~FLAGS2_UNICODE_STRINGS)));
+	SSVAL(outbuf,smb_flg2, (SVAL(outbuf, smb_flg2) & (~FLAGS2_UNICODE_STRINGS)));
+	  
+	outsize += DIR_STRUCT_SIZE*numentries;
+	smb_setlen(outbuf,outsize - 4);
+  
+	if ((! *directory) && dptr_path(dptr_num))
+		slprintf(directory, sizeof(directory)-1, "(%s)",dptr_path(dptr_num));
 
-	if (!directory) {
-		directory = dptr_path(dptr_num);
-	}
+	DEBUG( 4, ( "%s mask=%s path=%s dtype=%d nument=%u of %u\n",
+		smb_fn_name(CVAL(inbuf,smb_com)), 
+		mask, directory, dirtype, numentries, maxentries ) );
 
-	DEBUG(4,("%s mask=%s path=%s dtype=%d nument=%u of %u\n",
-		smb_fn_name(CVAL(req->inbuf,smb_com)),
-		mask,
-		directory ? directory : "./",
-		dirtype,
-		numentries,
-		maxentries ));
-
 	END_PROFILE(SMBsearch);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
  Reply to a fclose (stop directory search).
 ****************************************************************************/
 
-void reply_fclose(struct smb_request *req)
+int reply_fclose(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
+	int outsize = 0;
 	int status_len;
+	pstring path;
 	char status[21];
 	int dptr_num= -2;
 	char *p;
-	char *path = NULL;
 	NTSTATUS err;
-	bool path_contains_wcard = False;
-	TALLOC_CTX *ctx = talloc_tos();
+	BOOL path_contains_wcard = False;
 
 	START_PROFILE(SMBfclose);
 
 	if (lp_posix_pathnames()) {
-		reply_unknown_new(req, CVAL(req->inbuf, smb_com));
 		END_PROFILE(SMBfclose);
-		return;
+		return reply_unknown(inbuf, outbuf);
 	}
 
-	p = smb_buf(req->inbuf) + 1;
-	p += srvstr_get_path_wcard(ctx,
-				(char *)req->inbuf,
-				req->flags2,
-				&path,
-				p,
-				0,
-				STR_TERMINATE,
-				&err,
-				&path_contains_wcard);
+	outsize = set_message(outbuf,1,0,True);
+	p = smb_buf(inbuf) + 1;
+	p += srvstr_get_path_wcard(inbuf, path, p, sizeof(path), 0, STR_TERMINATE, &err, &path_contains_wcard);
 	if (!NT_STATUS_IS_OK(err)) {
-		reply_nterror(req, err);
 		END_PROFILE(SMBfclose);
-		return;
+		return ERROR_NT(err);
 	}
 	p++;
 	status_len = SVAL(p,0);
 	p += 2;
 
 	if (status_len == 0) {
-		reply_doserror(req, ERRSRV, ERRsrverror);
 		END_PROFILE(SMBfclose);
-		return;
+		return ERROR_DOS(ERRSRV,ERRsrverror);
 	}
 
 	memcpy(status,p,21);
@@ -1563,238 +1239,223 @@
 		dptr_close(&dptr_num);
 	}
 
-	reply_outbuf(req, 1, 0);
-	SSVAL(req->outbuf,smb_vwv0,0);
+	SSVAL(outbuf,smb_vwv0,0);
 
 	DEBUG(3,("search close\n"));
 
 	END_PROFILE(SMBfclose);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
  Reply to an open.
 ****************************************************************************/
 
-void reply_open(struct smb_request *req)
+int reply_open(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
-	char *fname = NULL;
+	pstring fname;
+	int outsize = 0;
 	uint32 fattr=0;
 	SMB_OFF_T size = 0;
 	time_t mtime=0;
 	int info;
 	SMB_STRUCT_STAT sbuf;
 	files_struct *fsp;
-	int oplock_request;
+	int oplock_request = CORE_OPLOCK_REQUEST(inbuf);
 	int deny_mode;
-	uint32 dos_attr;
+	uint32 dos_attr = SVAL(inbuf,smb_vwv1);
 	uint32 access_mask;
 	uint32 share_mode;
 	uint32 create_disposition;
 	uint32 create_options = 0;
 	NTSTATUS status;
-	TALLOC_CTX *ctx = talloc_tos();
-
 	START_PROFILE(SMBopen);
+ 
+	deny_mode = SVAL(inbuf,smb_vwv0);
 
-	if (req->wct < 2) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
+	srvstr_get_path(inbuf, fname, smb_buf(inbuf)+1, sizeof(fname), 0, STR_TERMINATE, &status);
+	if (!NT_STATUS_IS_OK(status)) {
 		END_PROFILE(SMBopen);
-		return;
+		return ERROR_NT(status);
 	}
 
-	oplock_request = CORE_OPLOCK_REQUEST(req->inbuf);
-	deny_mode = SVAL(req->inbuf,smb_vwv0);
-	dos_attr = SVAL(req->inbuf,smb_vwv1);
+	status = resolve_dfspath(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, fname);
+	if (!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(SMBopen);
+		if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
+			return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, ERRbadpath);
+		}
+		return ERROR_NT(status);
+	}
 
-	srvstr_get_path(ctx, (char *)req->inbuf, req->flags2, &fname,
-			smb_buf(req->inbuf)+1, 0,
-			STR_TERMINATE, &status);
+	status = unix_convert(conn, fname, False, NULL, &sbuf);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBopen);
-		return;
+		return ERROR_NT(status);
 	}
+    
+	status = check_name(conn, fname);
+	if (!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(SMBopen);
+		return ERROR_NT(status);
+	}
 
-	if (!map_open_params_to_ntcreate(
-		    fname, deny_mode, OPENX_FILE_EXISTS_OPEN, &access_mask,
-		    &share_mode, &create_disposition, &create_options)) {
-		reply_nterror(req, NT_STATUS_DOS(ERRDOS, ERRbadaccess));
+	if (!map_open_params_to_ntcreate(fname, deny_mode, OPENX_FILE_EXISTS_OPEN,
+			&access_mask, &share_mode, &create_disposition, &create_options)) {
 		END_PROFILE(SMBopen);
-		return;
+		return ERROR_NT(NT_STATUS_DOS(ERRDOS, ERRbadaccess));
 	}
 
-	status = create_file(conn,			/* conn */
-			     req,			/* req */
-			     0,				/* root_dir_fid */
-			     fname,			/* fname */
-			     access_mask,		/* access_mask */
-			     share_mode,		/* share_access */
-			     create_disposition,	/* create_disposition*/
-			     create_options,		/* create_options */
-			     dos_attr,			/* file_attributes */
-			     oplock_request,		/* oplock_request */
-			     0,				/* allocation_size */
-			     NULL,			/* sd */
-			     NULL,			/* ea_list */
-			     &fsp,			/* result */
-			     &info,			/* pinfo */
-			     &sbuf);			/* psbuf */
+	status = open_file_ntcreate(conn,fname,&sbuf,
+			access_mask,
+			share_mode,
+			create_disposition,
+			create_options,
+			dos_attr,
+			oplock_request,
+			&info, &fsp);
 
 	if (!NT_STATUS_IS_OK(status)) {
-		if (open_was_deferred(req->mid)) {
+		END_PROFILE(SMBopen);
+		if (open_was_deferred(SVAL(inbuf,smb_mid))) {
 			/* We have re-scheduled this call. */
-			END_PROFILE(SMBopen);
-			return;
+			return -1;
 		}
-		reply_openerror(req, status);
-		END_PROFILE(SMBopen);
-		return;
+		return ERROR_OPEN(status);
 	}
 
 	size = sbuf.st_size;
-	fattr = dos_mode(conn,fsp->fsp_name,&sbuf);
+	fattr = dos_mode(conn,fname,&sbuf);
 	mtime = sbuf.st_mtime;
 
 	if (fattr & aDIR) {
-		DEBUG(3,("attempt to open a directory %s\n",fsp->fsp_name));
+		DEBUG(3,("attempt to open a directory %s\n",fname));
 		close_file(fsp,ERROR_CLOSE);
-		reply_doserror(req, ERRDOS,ERRnoaccess);
 		END_PROFILE(SMBopen);
-		return;
+		return ERROR_DOS(ERRDOS,ERRnoaccess);
 	}
-
-	reply_outbuf(req, 7, 0);
-	SSVAL(req->outbuf,smb_vwv0,fsp->fnum);
-	SSVAL(req->outbuf,smb_vwv1,fattr);
+  
+	outsize = set_message(outbuf,7,0,True);
+	SSVAL(outbuf,smb_vwv0,fsp->fnum);
+	SSVAL(outbuf,smb_vwv1,fattr);
 	if(lp_dos_filetime_resolution(SNUM(conn)) ) {
-		srv_put_dos_date3((char *)req->outbuf,smb_vwv2,mtime & ~1);
+		srv_put_dos_date3(outbuf,smb_vwv2,mtime & ~1);
 	} else {
-		srv_put_dos_date3((char *)req->outbuf,smb_vwv2,mtime);
+		srv_put_dos_date3(outbuf,smb_vwv2,mtime);
 	}
-	SIVAL(req->outbuf,smb_vwv4,(uint32)size);
-	SSVAL(req->outbuf,smb_vwv6,deny_mode);
+	SIVAL(outbuf,smb_vwv4,(uint32)size);
+	SSVAL(outbuf,smb_vwv6,deny_mode);
 
 	if (oplock_request && lp_fake_oplocks(SNUM(conn))) {
-		SCVAL(req->outbuf,smb_flg,
-		      CVAL(req->outbuf,smb_flg)|CORE_OPLOCK_GRANTED);
+		SCVAL(outbuf,smb_flg,CVAL(outbuf,smb_flg)|CORE_OPLOCK_GRANTED);
 	}
     
 	if(EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type)) {
-		SCVAL(req->outbuf,smb_flg,
-		      CVAL(req->outbuf,smb_flg)|CORE_OPLOCK_GRANTED);
+		SCVAL(outbuf,smb_flg,CVAL(outbuf,smb_flg)|CORE_OPLOCK_GRANTED);
 	}
 	END_PROFILE(SMBopen);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
  Reply to an open and X.
 ****************************************************************************/
 
-void reply_open_and_X(struct smb_request *req)
+int reply_open_and_X(connection_struct *conn, char *inbuf,char *outbuf,int length,int bufsize)
 {
-	connection_struct *conn = req->conn;
-	char *fname = NULL;
-	uint16 open_flags;
-	int deny_mode;
-	uint32 smb_attr;
+	pstring fname;
+	uint16 open_flags = SVAL(inbuf,smb_vwv2);
+	int deny_mode = SVAL(inbuf,smb_vwv3);
+	uint32 smb_attr = SVAL(inbuf,smb_vwv5);
 	/* Breakout the oplock request bits so we can set the
 		reply bits separately. */
-	int ex_oplock_request;
-	int core_oplock_request;
-	int oplock_request;
+	int ex_oplock_request = EXTENDED_OPLOCK_REQUEST(inbuf);
+	int core_oplock_request = CORE_OPLOCK_REQUEST(inbuf);
+	int oplock_request = ex_oplock_request | core_oplock_request;
 #if 0
-	int smb_sattr = SVAL(req->inbuf,smb_vwv4);
-	uint32 smb_time = make_unix_date3(req->inbuf+smb_vwv6);
+	int smb_sattr = SVAL(inbuf,smb_vwv4); 
+	uint32 smb_time = make_unix_date3(inbuf+smb_vwv6);
 #endif
-	int smb_ofun;
+	int smb_ofun = SVAL(inbuf,smb_vwv8);
 	uint32 fattr=0;
 	int mtime=0;
 	SMB_STRUCT_STAT sbuf;
 	int smb_action = 0;
 	files_struct *fsp;
 	NTSTATUS status;
-	SMB_BIG_UINT allocation_size;
+	SMB_BIG_UINT allocation_size = (SMB_BIG_UINT)IVAL(inbuf,smb_vwv9);
 	ssize_t retval = -1;
 	uint32 access_mask;
 	uint32 share_mode;
 	uint32 create_disposition;
 	uint32 create_options = 0;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	START_PROFILE(SMBopenX);
 
-	if (req->wct < 15) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBopenX);
-		return;
-	}
-
-	open_flags = SVAL(req->inbuf,smb_vwv2);
-	deny_mode = SVAL(req->inbuf,smb_vwv3);
-	smb_attr = SVAL(req->inbuf,smb_vwv5);
-	ex_oplock_request = EXTENDED_OPLOCK_REQUEST(req->inbuf);
-	core_oplock_request = CORE_OPLOCK_REQUEST(req->inbuf);
-	oplock_request = ex_oplock_request | core_oplock_request;
-	smb_ofun = SVAL(req->inbuf,smb_vwv8);
-	allocation_size = (SMB_BIG_UINT)IVAL(req->inbuf,smb_vwv9);
-
 	/* If it's an IPC, pass off the pipe handler. */
 	if (IS_IPC(conn)) {
 		if (lp_nt_pipe_support()) {
-			reply_open_pipe_and_X(conn, req);
+			END_PROFILE(SMBopenX);
+			return reply_open_pipe_and_X(conn, inbuf,outbuf,length,bufsize);
 		} else {
-			reply_doserror(req, ERRSRV, ERRaccess);
+			END_PROFILE(SMBopenX);
+			return ERROR_DOS(ERRSRV,ERRaccess);
 		}
-		END_PROFILE(SMBopenX);
-		return;
 	}
 
 	/* XXXX we need to handle passed times, sattr and flags */
-	srvstr_get_path(ctx, (char *)req->inbuf, req->flags2, &fname,
-			smb_buf(req->inbuf), 0, STR_TERMINATE,
-			&status);
+	srvstr_get_path(inbuf, fname, smb_buf(inbuf), sizeof(fname), 0, STR_TERMINATE, &status);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBopenX);
-		return;
+		return ERROR_NT(status);
 	}
 
-	if (!map_open_params_to_ntcreate(
-		    fname, deny_mode, smb_ofun, &access_mask,
-		    &share_mode, &create_disposition, &create_options)) {
-		reply_nterror(req, NT_STATUS_DOS(ERRDOS, ERRbadaccess));
+	status = resolve_dfspath(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, fname);
+	if (!NT_STATUS_IS_OK(status)) {
 		END_PROFILE(SMBopenX);
-		return;
+		if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
+			return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, ERRbadpath);
+		}
+		return ERROR_NT(status);
 	}
 
-	status = create_file(conn,			/* conn */
-			     req,			/* req */
-			     0,				/* root_dir_fid */
-			     fname,			/* fname */
-			     access_mask,		/* access_mask */
-			     share_mode,		/* share_access */
-			     create_disposition,	/* create_disposition*/
-			     create_options,		/* create_options */
-			     smb_attr,			/* file_attributes */
-			     oplock_request,		/* oplock_request */
-			     0,				/* allocation_size */
-			     NULL,			/* sd */
-			     NULL,			/* ea_list */
-			     &fsp,			/* result */
-			     &smb_action,		/* pinfo */
-			     &sbuf);			/* psbuf */
+	status = unix_convert(conn, fname, False, NULL, &sbuf);
+	if (!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(SMBopenX);
+		return ERROR_NT(status);
+	}
 
+	status = check_name(conn, fname);
 	if (!NT_STATUS_IS_OK(status)) {
 		END_PROFILE(SMBopenX);
-		if (open_was_deferred(req->mid)) {
+		return ERROR_NT(status);
+	}
+
+	if (!map_open_params_to_ntcreate(fname, deny_mode, smb_ofun,
+				&access_mask,
+				&share_mode,
+				&create_disposition,
+				&create_options)) {
+		END_PROFILE(SMBopenX);
+		return ERROR_NT(NT_STATUS_DOS(ERRDOS, ERRbadaccess));
+	}
+
+	status = open_file_ntcreate(conn,fname,&sbuf,
+			access_mask,
+			share_mode,
+			create_disposition,
+			create_options,
+			smb_attr,
+			oplock_request,
+			&smb_action, &fsp);
+      
+	if (!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(SMBopenX);
+		if (open_was_deferred(SVAL(inbuf,smb_mid))) {
 			/* We have re-scheduled this call. */
-			return;
+			return -1;
 		}
-		reply_openerror(req, status);
-		return;
+		return ERROR_OPEN(status);
 	}
 
 	/* Setting the "size" field in vwv9 and vwv10 causes the file to be set to this size,
@@ -1803,27 +1464,24 @@
 		fsp->initial_allocation_size = smb_roundup(fsp->conn, allocation_size);
 		if (vfs_allocate_file_space(fsp, fsp->initial_allocation_size) == -1) {
 			close_file(fsp,ERROR_CLOSE);
-			reply_nterror(req, NT_STATUS_DISK_FULL);
 			END_PROFILE(SMBopenX);
-			return;
+			return ERROR_NT(NT_STATUS_DISK_FULL);
 		}
 		retval = vfs_set_filelen(fsp, (SMB_OFF_T)allocation_size);
 		if (retval < 0) {
 			close_file(fsp,ERROR_CLOSE);
-			reply_nterror(req, NT_STATUS_DISK_FULL);
 			END_PROFILE(SMBopenX);
-			return;
+			return ERROR_NT(NT_STATUS_DISK_FULL);
 		}
 		sbuf.st_size = get_allocation_size(conn,fsp,&sbuf);
 	}
 
-	fattr = dos_mode(conn,fsp->fsp_name,&sbuf);
+	fattr = dos_mode(conn,fname,&sbuf);
 	mtime = sbuf.st_mtime;
 	if (fattr & aDIR) {
 		close_file(fsp,ERROR_CLOSE);
-		reply_doserror(req, ERRDOS, ERRnoaccess);
 		END_PROFILE(SMBopenX);
-		return;
+		return ERROR_DOS(ERRDOS,ERRnoaccess);
 	}
 
 	/* If the caller set the extended oplock request bit
@@ -1844,124 +1502,122 @@
 		correct bit for core oplock reply.
 	*/
 
-	if (open_flags & EXTENDED_RESPONSE_REQUIRED) {
-		reply_outbuf(req, 19, 0);
-	} else {
-		reply_outbuf(req, 15, 0);
-	}
-
 	if (core_oplock_request && lp_fake_oplocks(SNUM(conn))) {
-		SCVAL(req->outbuf, smb_flg,
-		      CVAL(req->outbuf,smb_flg)|CORE_OPLOCK_GRANTED);
+		SCVAL(outbuf,smb_flg,CVAL(outbuf,smb_flg)|CORE_OPLOCK_GRANTED);
 	}
 
 	if(core_oplock_request && EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type)) {
-		SCVAL(req->outbuf, smb_flg,
-		      CVAL(req->outbuf,smb_flg)|CORE_OPLOCK_GRANTED);
+		SCVAL(outbuf,smb_flg,CVAL(outbuf,smb_flg)|CORE_OPLOCK_GRANTED);
 	}
 
-	SSVAL(req->outbuf,smb_vwv2,fsp->fnum);
-	SSVAL(req->outbuf,smb_vwv3,fattr);
+	if (open_flags & EXTENDED_RESPONSE_REQUIRED) {
+		set_message(outbuf,19,0,True);
+	} else {
+		set_message(outbuf,15,0,True);
+	}
+	SSVAL(outbuf,smb_vwv2,fsp->fnum);
+	SSVAL(outbuf,smb_vwv3,fattr);
 	if(lp_dos_filetime_resolution(SNUM(conn)) ) {
-		srv_put_dos_date3((char *)req->outbuf,smb_vwv4,mtime & ~1);
+		srv_put_dos_date3(outbuf,smb_vwv4,mtime & ~1);
 	} else {
-		srv_put_dos_date3((char *)req->outbuf,smb_vwv4,mtime);
+		srv_put_dos_date3(outbuf,smb_vwv4,mtime);
 	}
-	SIVAL(req->outbuf,smb_vwv6,(uint32)sbuf.st_size);
-	SSVAL(req->outbuf,smb_vwv8,GET_OPENX_MODE(deny_mode));
-	SSVAL(req->outbuf,smb_vwv11,smb_action);
+	SIVAL(outbuf,smb_vwv6,(uint32)sbuf.st_size);
+	SSVAL(outbuf,smb_vwv8,GET_OPENX_MODE(deny_mode));
+	SSVAL(outbuf,smb_vwv11,smb_action);
 
 	if (open_flags & EXTENDED_RESPONSE_REQUIRED) {
-		SIVAL(req->outbuf, smb_vwv15, STD_RIGHT_ALL_ACCESS);
+		SIVAL(outbuf, smb_vwv15, STD_RIGHT_ALL_ACCESS);
 	}
 
 	END_PROFILE(SMBopenX);
-	chain_reply(req);
-	return;
+	return chain_reply(inbuf,outbuf,length,bufsize);
 }
 
 /****************************************************************************
  Reply to a SMBulogoffX.
+ conn POINTER CAN BE NULL HERE !
 ****************************************************************************/
 
-void reply_ulogoffX(struct smb_request *req)
+int reply_ulogoffX(connection_struct *conn, char *inbuf,char *outbuf,int length,int bufsize)
 {
-	user_struct *vuser;
-
+	uint16 vuid = SVAL(inbuf,smb_uid);
+	user_struct *vuser = get_valid_user_struct(vuid);
 	START_PROFILE(SMBulogoffX);
 
-	vuser = get_valid_user_struct(req->vuid);
+	if(vuser == 0)
+		DEBUG(3,("ulogoff, vuser id %d does not map to user.\n", vuid));
 
-	if(vuser == NULL) {
-		DEBUG(3,("ulogoff, vuser id %d does not map to user.\n",
-			 req->vuid));
-	}
-
 	/* in user level security we are supposed to close any files
 		open by this user */
-	if ((vuser != NULL) && (lp_security() != SEC_SHARE)) {
-		file_close_user(req->vuid);
-	}
+	if ((vuser != 0) && (lp_security() != SEC_SHARE))
+		file_close_user(vuid);
 
-	invalidate_vuid(req->vuid);
+	invalidate_vuid(vuid);
 
-	reply_outbuf(req, 2, 0);
+	set_message(outbuf,2,0,True);
 
-	DEBUG( 3, ( "ulogoffX vuid=%d\n", req->vuid ) );
+	DEBUG( 3, ( "ulogoffX vuid=%d\n", vuid ) );
 
 	END_PROFILE(SMBulogoffX);
-	chain_reply(req);
+	return chain_reply(inbuf,outbuf,length,bufsize);
 }
 
 /****************************************************************************
  Reply to a mknew or a create.
 ****************************************************************************/
 
-void reply_mknew(struct smb_request *req)
+int reply_mknew(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
-	char *fname = NULL;
+	pstring fname;
 	int com;
-	uint32 fattr = 0;
+	int outsize = 0;
+	uint32 fattr = SVAL(inbuf,smb_vwv0);
 	struct timespec ts[2];
 	files_struct *fsp;
-	int oplock_request = 0;
+	int oplock_request = CORE_OPLOCK_REQUEST(inbuf);
 	SMB_STRUCT_STAT sbuf;
 	NTSTATUS status;
 	uint32 access_mask = FILE_GENERIC_READ | FILE_GENERIC_WRITE;
 	uint32 share_mode = FILE_SHARE_READ|FILE_SHARE_WRITE;
 	uint32 create_disposition;
 	uint32 create_options = 0;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	START_PROFILE(SMBcreate);
+ 
+	com = SVAL(inbuf,smb_com);
 
-        if (req->wct < 3) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
+	ts[1] = convert_time_t_to_timespec(srv_make_unix_date3(inbuf + smb_vwv1)); /* mtime. */
+
+	srvstr_get_path(inbuf, fname, smb_buf(inbuf) + 1, sizeof(fname), 0, STR_TERMINATE, &status);
+	if (!NT_STATUS_IS_OK(status)) {
 		END_PROFILE(SMBcreate);
-		return;
+		return ERROR_NT(status);
 	}
 
-	fattr = SVAL(req->inbuf,smb_vwv0);
-	oplock_request = CORE_OPLOCK_REQUEST(req->inbuf);
-	com = SVAL(req->inbuf,smb_com);
+	status = resolve_dfspath(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, fname);
+	if (!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(SMBcreate);
+		if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
+			return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, ERRbadpath);
+		}
+		return ERROR_NT(status);
+	}
 
-	ts[1] =convert_time_t_to_timespec(
-			srv_make_unix_date3(req->inbuf + smb_vwv1));
-			/* mtime. */
+	status = unix_convert(conn, fname, False, NULL, &sbuf);
+	if (!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(SMBcreate);
+		return ERROR_NT(status);
+	}
 
-	srvstr_get_path(ctx, (char *)req->inbuf, req->flags2, &fname,
-                        smb_buf(req->inbuf) + 1, 0,
-			STR_TERMINATE, &status);
+	status = check_name(conn, fname);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBcreate);
-		return;
+		return ERROR_NT(status);
 	}
 
 	if (fattr & aVOLID) {
-		DEBUG(0,("Attempt to create file (%s) with volid set - "
-			"please report this\n", fname));
+		DEBUG(0,("Attempt to create file (%s) with volid set - please report this\n",fname));
 	}
 
 	if(com == SMBmknew) {
@@ -1972,153 +1628,107 @@
 		create_disposition = FILE_OVERWRITE_IF;
 	}
 
-	status = create_file(conn,			/* conn */
-			     req,			/* req */
-			     0,				/* root_dir_fid */
-			     fname,			/* fname */
-			     access_mask,		/* access_mask */
-			     share_mode,		/* share_access */
-			     create_disposition,	/* create_disposition*/
-			     create_options,		/* create_options */
-			     fattr,			/* file_attributes */
-			     oplock_request,		/* oplock_request */
-			     0,				/* allocation_size */
-			     NULL,			/* sd */
-			     NULL,			/* ea_list */
-			     &fsp,			/* result */
-			     NULL,			/* pinfo */
-			     &sbuf);			/* psbuf */
-
+	/* Open file using ntcreate. */
+	status = open_file_ntcreate(conn,fname,&sbuf,
+				access_mask,
+				share_mode,
+				create_disposition,
+				create_options,
+				fattr,
+				oplock_request,
+				NULL, &fsp);
+  
 	if (!NT_STATUS_IS_OK(status)) {
 		END_PROFILE(SMBcreate);
-		if (open_was_deferred(req->mid)) {
+		if (open_was_deferred(SVAL(inbuf,smb_mid))) {
 			/* We have re-scheduled this call. */
-			return;
+			return -1;
 		}
-		reply_openerror(req, status);
-		return;
+		return ERROR_OPEN(status);
 	}
-
+ 
 	ts[0] = get_atimespec(&sbuf); /* atime. */
-	status = smb_set_file_time(conn, fsp, fname, &sbuf, ts, true);
-	if (!NT_STATUS_IS_OK(status)) {
-		END_PROFILE(SMBcreate);
-		reply_openerror(req, status);
-		return;
-	}
+	file_ntimes(conn, fname, ts);
 
-	reply_outbuf(req, 1, 0);
-	SSVAL(req->outbuf,smb_vwv0,fsp->fnum);
+	outsize = set_message(outbuf,1,0,True);
+	SSVAL(outbuf,smb_vwv0,fsp->fnum);
 
 	if (oplock_request && lp_fake_oplocks(SNUM(conn))) {
-		SCVAL(req->outbuf,smb_flg,
-				CVAL(req->outbuf,smb_flg)|CORE_OPLOCK_GRANTED);
+		SCVAL(outbuf,smb_flg,CVAL(outbuf,smb_flg)|CORE_OPLOCK_GRANTED);
 	}
-
+ 
 	if(EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type)) {
-		SCVAL(req->outbuf,smb_flg,
-				CVAL(req->outbuf,smb_flg)|CORE_OPLOCK_GRANTED);
+		SCVAL(outbuf,smb_flg,CVAL(outbuf,smb_flg)|CORE_OPLOCK_GRANTED);
 	}
+ 
+	DEBUG( 2, ( "reply_mknew: file %s\n", fname ) );
+	DEBUG( 3, ( "reply_mknew %s fd=%d dmode=0x%x\n", fname, fsp->fh->fd, (unsigned int)fattr ) );
 
-	DEBUG( 2, ( "reply_mknew: file %s\n", fsp->fsp_name ) );
-	DEBUG( 3, ( "reply_mknew %s fd=%d dmode=0x%x\n",
-		    fsp->fsp_name, fsp->fh->fd, (unsigned int)fattr ) );
-
 	END_PROFILE(SMBcreate);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
  Reply to a create temporary file.
 ****************************************************************************/
 
-void reply_ctemp(struct smb_request *req)
+int reply_ctemp(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
-	char *fname = NULL;
-	uint32 fattr;
+	pstring fname;
+	int outsize = 0;
+	uint32 fattr = SVAL(inbuf,smb_vwv0);
 	files_struct *fsp;
-	int oplock_request;
+	int oplock_request = CORE_OPLOCK_REQUEST(inbuf);
 	int tmpfd;
 	SMB_STRUCT_STAT sbuf;
-	char *s;
+	char *p, *s;
 	NTSTATUS status;
-	TALLOC_CTX *ctx = talloc_tos();
+	unsigned int namelen;
 
 	START_PROFILE(SMBctemp);
 
-	if (req->wct < 3) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBctemp);
-		return;
-	}
-
-	fattr = SVAL(req->inbuf,smb_vwv0);
-	oplock_request = CORE_OPLOCK_REQUEST(req->inbuf);
-
-	srvstr_get_path(ctx, (char *)req->inbuf, req->flags2, &fname,
-			smb_buf(req->inbuf)+1, 0, STR_TERMINATE,
-			&status);
+	srvstr_get_path(inbuf, fname, smb_buf(inbuf)+1, sizeof(fname), 0, STR_TERMINATE, &status);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBctemp);
-		return;
+		return ERROR_NT(status);
 	}
 	if (*fname) {
-		fname = talloc_asprintf(ctx,
-				"%s/TMXXXXXX",
-				fname);
+		pstrcat(fname,"/TMXXXXXX");
 	} else {
-		fname = talloc_strdup(ctx, "TMXXXXXX");
+		pstrcat(fname,"TMXXXXXX");
 	}
 
-	if (!fname) {
-		reply_nterror(req, NT_STATUS_NO_MEMORY);
-		END_PROFILE(SMBctemp);
-		return;
-	}
-
-	status = resolve_dfspath(ctx, conn,
-				req->flags2 & FLAGS2_DFS_PATHNAMES,
-				fname,
-				&fname);
+	status = resolve_dfspath(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, fname);
 	if (!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(SMBctemp);
 		if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
-			reply_botherror(req, NT_STATUS_PATH_NOT_COVERED,
-					ERRSRV, ERRbadpath);
-			END_PROFILE(SMBctemp);
-			return;
+			return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, ERRbadpath);
 		}
-		reply_nterror(req, status);
-		END_PROFILE(SMBctemp);
-		return;
+		return ERROR_NT(status);
 	}
 
-	status = unix_convert(ctx, conn, fname, False, &fname, NULL, &sbuf);
+	status = unix_convert(conn, fname, False, NULL, &sbuf);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBctemp);
-		return;
+		return ERROR_NT(status);
 	}
 
-	status = check_name(conn, CONST_DISCARD(char *,fname));
+	status = check_name(conn, fname);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBctemp);
-		return;
+		return ERROR_NT(status);
 	}
-
+  
 	tmpfd = smb_mkstemp(fname);
 	if (tmpfd == -1) {
-		reply_unixerror(req, ERRDOS, ERRnoaccess);
 		END_PROFILE(SMBctemp);
-		return;
+		return(UNIXERROR(ERRDOS,ERRnoaccess));
 	}
 
 	SMB_VFS_STAT(conn,fname,&sbuf);
 
 	/* We should fail if file does not exist. */
-	status = open_file_ntcreate(conn, req, fname, &sbuf,
+	status = open_file_ntcreate(conn,fname,&sbuf,
 				FILE_GENERIC_READ | FILE_GENERIC_WRITE,
 				FILE_SHARE_READ|FILE_SHARE_WRITE,
 				FILE_OPEN,
@@ -2131,71 +1741,66 @@
 	close(tmpfd);
 
 	if (!NT_STATUS_IS_OK(status)) {
-		if (open_was_deferred(req->mid)) {
+		END_PROFILE(SMBctemp);
+		if (open_was_deferred(SVAL(inbuf,smb_mid))) {
 			/* We have re-scheduled this call. */
-			END_PROFILE(SMBctemp);
-			return;
+			return -1;
 		}
-		reply_openerror(req, status);
-		END_PROFILE(SMBctemp);
-		return;
+		return ERROR_OPEN(status);
 	}
 
-	reply_outbuf(req, 1, 0);
-	SSVAL(req->outbuf,smb_vwv0,fsp->fnum);
+	outsize = set_message(outbuf,1,0,True);
+	SSVAL(outbuf,smb_vwv0,fsp->fnum);
 
 	/* the returned filename is relative to the directory */
-	s = strrchr_m(fsp->fsp_name, '/');
+	s = strrchr_m(fname, '/');
 	if (!s) {
-		s = fsp->fsp_name;
+		s = fname;
 	} else {
 		s++;
 	}
 
+	p = smb_buf(outbuf);
 #if 0
 	/* Tested vs W2K3 - this doesn't seem to be here - null terminated filename is the only
 	   thing in the byte section. JRA */
 	SSVALS(p, 0, -1); /* what is this? not in spec */
 #endif
-	if (message_push_string(&req->outbuf, s, STR_ASCII|STR_TERMINATE)
-	    == -1) {
-		reply_nterror(req, NT_STATUS_NO_MEMORY);
-		END_PROFILE(SMBctemp);
-		return;
-	}
+	namelen = srvstr_push(outbuf, p, s, BUFFER_SIZE - (p - outbuf), STR_ASCII|STR_TERMINATE);
+	p += namelen;
+	outsize = set_message_end(outbuf, p);
 
 	if (oplock_request && lp_fake_oplocks(SNUM(conn))) {
-		SCVAL(req->outbuf, smb_flg,
-		      CVAL(req->outbuf,smb_flg)|CORE_OPLOCK_GRANTED);
+		SCVAL(outbuf,smb_flg,CVAL(outbuf,smb_flg)|CORE_OPLOCK_GRANTED);
 	}
   
 	if (EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type)) {
-		SCVAL(req->outbuf, smb_flg,
-		      CVAL(req->outbuf,smb_flg)|CORE_OPLOCK_GRANTED);
+		SCVAL(outbuf,smb_flg,CVAL(outbuf,smb_flg)|CORE_OPLOCK_GRANTED);
 	}
 
-	DEBUG( 2, ( "reply_ctemp: created temp file %s\n", fsp->fsp_name ) );
-	DEBUG( 3, ( "reply_ctemp %s fd=%d umode=0%o\n", fsp->fsp_name,
-		    fsp->fh->fd, (unsigned int)sbuf.st_mode ) );
+	DEBUG( 2, ( "reply_ctemp: created temp file %s\n", fname ) );
+	DEBUG( 3, ( "reply_ctemp %s fd=%d umode=0%o\n", fname, fsp->fh->fd,
+			(unsigned int)sbuf.st_mode ) );
 
 	END_PROFILE(SMBctemp);
-	return;
+	return(outsize);
 }
 
 /*******************************************************************
  Check if a user is allowed to rename a file.
 ********************************************************************/
 
-static NTSTATUS can_rename(connection_struct *conn, files_struct *fsp,
-			   uint16 dirtype, SMB_STRUCT_STAT *pst)
+static NTSTATUS can_rename(connection_struct *conn, char *fname, uint16 dirtype, SMB_STRUCT_STAT *pst, BOOL self_open)
 {
+	files_struct *fsp;
 	uint32 fmode;
+	NTSTATUS status;
 
 	if (!CAN_WRITE(conn)) {
 		return NT_STATUS_MEDIA_WRITE_PROTECTED;
 	}
 
-	fmode = dos_mode(conn, fsp->fsp_name, pst);
+	fmode = dos_mode(conn,fname,pst);
 	if ((fmode & ~dirtype) & (aHIDDEN | aSYSTEM)) {
 		return NT_STATUS_NO_SUCH_FILE;
 	}
@@ -2204,21 +1809,31 @@
 		return NT_STATUS_OK;
 	}
 
-	if (fsp->access_mask & (DELETE_ACCESS|FILE_WRITE_ATTRIBUTES)) {
-		return NT_STATUS_OK;
-	}
+	status = open_file_ntcreate(conn, fname, pst,
+				DELETE_ACCESS,
+				/* If we're checking our fsp don't deny for delete. */
+				self_open ?
+					FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE :
+					FILE_SHARE_READ|FILE_SHARE_WRITE,
+				FILE_OPEN,
+				0,
+				FILE_ATTRIBUTE_NORMAL,
+				0,
+				NULL, &fsp);
 
-	return NT_STATUS_ACCESS_DENIED;
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
+	}
+	close_file(fsp,NORMAL_CLOSE);
+	return NT_STATUS_OK;
 }
 
 /*******************************************************************
- * unlink a file with all relevant access checks
- *******************************************************************/
+ Check if a user is allowed to delete a file.
+********************************************************************/
 
-static NTSTATUS do_unlink(connection_struct *conn,
-			struct smb_request *req,
-			const char *fname,
-			uint32 dirtype)
+static NTSTATUS can_delete(connection_struct *conn, char *fname,
+			   uint32 dirtype, BOOL can_defer)
 {
 	SMB_STRUCT_STAT sbuf;
 	uint32 fattr;
@@ -2226,7 +1841,7 @@
 	uint32 dirtype_orig = dirtype;
 	NTSTATUS status;
 
-	DEBUG(10,("do_unlink: %s, dirtype = %d\n", fname, dirtype ));
+	DEBUG(10,("can_delete: %s, dirtype = %d\n", fname, dirtype ));
 
 	if (!CAN_WRITE(conn)) {
 		return NT_STATUS_MEDIA_WRITE_PROTECTED;
@@ -2310,36 +1925,19 @@
 	/* On open checks the open itself will check the share mode, so
 	   don't do it here as we'll get it wrong. */
 
-	status = create_file_unixpath
-		(conn,			/* conn */
-		 req,			/* req */
-		 fname,			/* fname */
-		 DELETE_ACCESS,		/* access_mask */
-		 FILE_SHARE_NONE,	/* share_access */
-		 FILE_OPEN,		/* create_disposition*/
-		 FILE_NON_DIRECTORY_FILE, /* create_options */
-		 FILE_ATTRIBUTE_NORMAL,	/* file_attributes */
-		 0,			/* oplock_request */
-		 0,			/* allocation_size */
-		 NULL,			/* sd */
-		 NULL,			/* ea_list */
-		 &fsp,			/* result */
-		 NULL,			/* pinfo */
-		 &sbuf);		/* psbuf */
+	status = open_file_ntcreate(conn, fname, &sbuf,
+				    DELETE_ACCESS,
+				    FILE_SHARE_NONE,
+				    FILE_OPEN,
+				    0,
+				    FILE_ATTRIBUTE_NORMAL,
+				    can_defer ? 0 : INTERNAL_OPEN_ONLY,
+				    NULL, &fsp);
 
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(10, ("open_file_ntcreate failed: %s\n",
-			   nt_errstr(status)));
-		return status;
+	if (NT_STATUS_IS_OK(status)) {
+		close_file(fsp,NORMAL_CLOSE);
 	}
-
-	/* The set is across all open files on this dev/inode pair. */
-	if (!set_delete_on_close(fsp, True, &current_user.ut)) {
-		close_file(fsp, NORMAL_CLOSE);
-		return NT_STATUS_ACCESS_DENIED;
-	}
-
-	return close_file(fsp,NORMAL_CLOSE);
+	return status;
 }
 
 /****************************************************************************
@@ -2347,36 +1945,33 @@
  code.
 ****************************************************************************/
 
-NTSTATUS unlink_internals(connection_struct *conn, struct smb_request *req,
-			  uint32 dirtype, const char *name_in, bool has_wild)
+NTSTATUS unlink_internals(connection_struct *conn, uint32 dirtype,
+			  char *name, BOOL has_wild, BOOL can_defer)
 {
-	const char *directory = NULL;
-	char *mask = NULL;
-	char *name = NULL;
-	char *p = NULL;
+	pstring directory;
+	pstring mask;
+	char *p;
 	int count=0;
 	NTSTATUS status = NT_STATUS_OK;
 	SMB_STRUCT_STAT sbuf;
-	TALLOC_CTX *ctx = talloc_tos();
-
-	status = unix_convert(ctx, conn, name_in, has_wild, &name, NULL, &sbuf);
+	
+	*directory = *mask = 0;
+	
+	status = unix_convert(conn, name, has_wild, NULL, &sbuf);
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
 	}
-
+	
 	p = strrchr_m(name,'/');
 	if (!p) {
-		directory = talloc_strdup(ctx, ".");
-		if (!directory) {
-			return NT_STATUS_NO_MEMORY;
-		}
-		mask = name;
+		pstrcpy(directory,".");
+		pstrcpy(mask,name);
 	} else {
 		*p = 0;
-		directory = name;
-		mask = p+1;
+		pstrcpy(directory,name);
+		pstrcpy(mask,p+1);
 	}
-
+	
 	/*
 	 * We should only check the mangled cache
 	 * here if unix_convert failed. This means
@@ -2385,26 +1980,13 @@
 	 * for a possible mangle. This patch from
 	 * Tine Smukavec <valentin.smukavec at hermes.si>.
 	 */
-
-	if (!VALID_STAT(sbuf) && mangle_is_mangled(mask,conn->params)) {
-		char *new_mask = NULL;
-		mangle_lookup_name_from_8_3(ctx,
-				mask,
-				&new_mask,
-				conn->params );
-		if (new_mask) {
-			mask = new_mask;
-		}
-	}
-
+	
+	if (!VALID_STAT(sbuf) && mangle_is_mangled(mask,conn->params))
+		mangle_check_cache( mask, sizeof(pstring)-1, conn->params );
+	
 	if (!has_wild) {
-		directory = talloc_asprintf(ctx,
-				"%s/%s",
-				directory,
-				mask);
-		if (!directory) {
-			return NT_STATUS_NO_MEMORY;
-		}
+		pstrcat(directory,"/");
+		pstrcat(directory,mask);
 		if (dirtype == 0) {
 			dirtype = FILE_ATTRIBUTE_NORMAL;
 		}
@@ -2414,24 +1996,28 @@
 			return status;
 		}
 
-		status = do_unlink(conn, req, directory, dirtype);
+		status = can_delete(conn,directory,dirtype,can_defer);
 		if (!NT_STATUS_IS_OK(status)) {
 			return status;
 		}
 
-		count++;
+		if (SMB_VFS_UNLINK(conn,directory) == 0) {
+			count++;
+			notify_fname(conn, NOTIFY_ACTION_REMOVED,
+				     FILE_NOTIFY_CHANGE_FILE_NAME,
+				     directory);
+		}
 	} else {
 		struct smb_Dir *dir_hnd = NULL;
 		long offset = 0;
 		const char *dname;
-
+		
 		if ((dirtype & SAMBA_ATTRIBUTES_MASK) == aDIR) {
 			return NT_STATUS_OBJECT_NAME_INVALID;
 		}
 
 		if (strequal(mask,"????????.???")) {
-			mask[0] = '*';
-			mask[1] = '\0';
+			pstrcpy(mask,"*");
 		}
 
 		status = check_name(conn, directory);
@@ -2439,64 +2025,63 @@
 			return status;
 		}
 
-		dir_hnd = OpenDir(talloc_tos(), conn, directory, mask,
-				  dirtype);
+		dir_hnd = OpenDir(conn, directory, mask, dirtype);
 		if (dir_hnd == NULL) {
 			return map_nt_error_from_unix(errno);
 		}
-
+		
 		/* XXXX the CIFS spec says that if bit0 of the flags2 field is set then
 		   the pattern matches against the long name, otherwise the short name 
 		   We don't implement this yet XXXX
 		*/
-
+		
 		status = NT_STATUS_NO_SUCH_FILE;
 
 		while ((dname = ReadDirName(dir_hnd, &offset))) {
 			SMB_STRUCT_STAT st;
-			char *fname = NULL;
+			pstring fname;
+			pstrcpy(fname,dname);
 
 			if (!is_visible_file(conn, directory, dname, &st, True)) {
 				continue;
 			}
 
 			/* Quick check for "." and ".." */
-			if (ISDOT(dname) || ISDOTDOT(dname)) {
-				continue;
+			if (fname[0] == '.') {
+				if (!fname[1] || (fname[1] == '.' && !fname[2])) {
+					continue;
+				}
 			}
 
-			if(!mask_match(dname, mask, conn->case_sensitive)) {
+			if(!mask_match(fname, mask, conn->case_sensitive)) {
 				continue;
 			}
+				
+			slprintf(fname,sizeof(fname)-1, "%s/%s",directory,dname);
 
-			fname = talloc_asprintf(ctx, "%s/%s",
-					directory,
-					dname);
-			if (!fname) {
-				return NT_STATUS_NO_MEMORY;
-			}
-
 			status = check_name(conn, fname);
 			if (!NT_STATUS_IS_OK(status)) {
-				TALLOC_FREE(dir_hnd);
+				CloseDir(dir_hnd);
 				return status;
 			}
 
-			status = do_unlink(conn, req, fname, dirtype);
+			status = can_delete(conn, fname, dirtype, can_defer);
 			if (!NT_STATUS_IS_OK(status)) {
-				TALLOC_FREE(fname);
 				continue;
 			}
-
-			count++;
-			DEBUG(3,("unlink_internals: successful unlink [%s]\n",
-				 fname));
-
-			TALLOC_FREE(fname);
+			if (SMB_VFS_UNLINK(conn,fname) == 0) {
+				count++;
+				DEBUG(3,("unlink_internals: successful unlink "
+					 "[%s]\n",fname));
+				notify_fname(conn, NOTIFY_ACTION_REMOVED,
+					     FILE_NOTIFY_CHANGE_FILE_NAME,
+					     fname);
+			}
+				
 		}
-		TALLOC_FREE(dir_hnd);
+		CloseDir(dir_hnd);
 	}
-
+	
 	if (count == 0 && NT_STATUS_IS_OK(status)) {
 		status = map_nt_error_from_unix(errno);
 	}
@@ -2508,70 +2093,51 @@
  Reply to a unlink
 ****************************************************************************/
 
-void reply_unlink(struct smb_request *req)
+int reply_unlink(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, 
+		 int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
-	char *name = NULL;
+	int outsize = 0;
+	pstring name;
 	uint32 dirtype;
 	NTSTATUS status;
-	bool path_contains_wcard = False;
-	TALLOC_CTX *ctx = talloc_tos();
+	BOOL path_contains_wcard = False;
 
 	START_PROFILE(SMBunlink);
 
-	if (req->wct < 1) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBunlink);
-		return;
-	}
-
-	dirtype = SVAL(req->inbuf,smb_vwv0);
-
-	srvstr_get_path_wcard(ctx, (char *)req->inbuf, req->flags2, &name,
-			      smb_buf(req->inbuf) + 1, 0,
-			      STR_TERMINATE, &status, &path_contains_wcard);
+	dirtype = SVAL(inbuf,smb_vwv0);
+	
+	srvstr_get_path_wcard(inbuf, name, smb_buf(inbuf) + 1, sizeof(name), 0, STR_TERMINATE, &status, &path_contains_wcard);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBunlink);
-		return;
+		return ERROR_NT(status);
 	}
 
-	status = resolve_dfspath_wcard(ctx, conn,
-				       req->flags2 & FLAGS2_DFS_PATHNAMES,
-				       name,
-				       &name,
-				       &path_contains_wcard);
+	status = resolve_dfspath_wcard(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, name, &path_contains_wcard);
 	if (!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(SMBunlink);
 		if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
-			reply_botherror(req, NT_STATUS_PATH_NOT_COVERED,
-					ERRSRV, ERRbadpath);
-			END_PROFILE(SMBunlink);
-			return;
+			return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, ERRbadpath);
 		}
-		reply_nterror(req, status);
-		END_PROFILE(SMBunlink);
-		return;
+		return ERROR_NT(status);
 	}
-
+	
 	DEBUG(3,("reply_unlink : %s\n",name));
-
-	status = unlink_internals(conn, req, dirtype, name,
-				  path_contains_wcard);
+	
+	status = unlink_internals(conn, dirtype, name, path_contains_wcard,
+				  True);
 	if (!NT_STATUS_IS_OK(status)) {
-		if (open_was_deferred(req->mid)) {
+		END_PROFILE(SMBunlink);
+		if (open_was_deferred(SVAL(inbuf,smb_mid))) {
 			/* We have re-scheduled this call. */
-			END_PROFILE(SMBunlink);
-			return;
+			return -1;
 		}
-		reply_nterror(req, status);
-		END_PROFILE(SMBunlink);
-		return;
+		return ERROR_NT(status);
 	}
 
-	reply_outbuf(req, 0, 0);
+	outsize = set_message(outbuf,0,0,False);
+  
 	END_PROFILE(SMBunlink);
-
-	return;
+	return outsize;
 }
 
 /****************************************************************************
@@ -2580,92 +2146,53 @@
 
 static void fail_readraw(void)
 {
-	const char *errstr = talloc_asprintf(talloc_tos(),
-			"FAIL ! reply_readbraw: socket write fail (%s)",
-			strerror(errno));
-	if (!errstr) {
-		errstr = "";
-	}
+	pstring errstr;
+	slprintf(errstr, sizeof(errstr)-1, "FAIL ! reply_readbraw: socket write fail (%s)",
+		strerror(errno) );
 	exit_server_cleanly(errstr);
 }
 
+#if defined(WITH_SENDFILE)
 /****************************************************************************
  Fake (read/write) sendfile. Returns -1 on read or write fail.
 ****************************************************************************/
 
-static ssize_t fake_sendfile(files_struct *fsp, SMB_OFF_T startpos,
-			     size_t nread)
+static ssize_t fake_sendfile(files_struct *fsp, SMB_OFF_T startpos, size_t nread, char *buf, int bufsize)
 {
-	size_t bufsize;
-	size_t tosend = nread;
-	char *buf;
+	ssize_t ret=0;
 
-	if (nread == 0) {
-		return 0;
+	/* Paranioa check... */
+	if (nread > bufsize) {
+		fail_readraw();
 	}
 
-	bufsize = MIN(nread, 65536);
-
-	if (!(buf = SMB_MALLOC_ARRAY(char, bufsize))) {
-		return -1;
-	}
-
-	while (tosend > 0) {
-		ssize_t ret;
-		size_t cur_read;
-
-		if (tosend > bufsize) {
-			cur_read = bufsize;
-		} else {
-			cur_read = tosend;
-		}
-		ret = read_file(fsp,buf,startpos,cur_read);
+	if (nread > 0) {
+		ret = read_file(fsp,buf,startpos,nread);
 		if (ret == -1) {
-			SAFE_FREE(buf);
 			return -1;
 		}
+	}
 
-		/* If we had a short read, fill with zeros. */
-		if (ret < cur_read) {
-			memset(buf, '\0', cur_read - ret);
-		}
-
-		if (write_data(smbd_server_fd(),buf,cur_read) != cur_read) {
-			SAFE_FREE(buf);
-			return -1;
-		}
-		tosend -= cur_read;
-		startpos += cur_read;
+	/* If we had a short read, fill with zeros. */
+	if (ret < nread) {
+		memset(buf, '\0', nread - ret);
 	}
 
-	SAFE_FREE(buf);
+	if (write_data(smbd_server_fd(),buf,nread) != nread) {
+		return -1;
+	}	
+
 	return (ssize_t)nread;
 }
+#endif
 
 /****************************************************************************
- Return a readbraw error (4 bytes of zero).
-****************************************************************************/
-
-static void reply_readbraw_error(void)
-{
-	char header[4];
-	SIVAL(header,0,0);
-	if (write_data(smbd_server_fd(),header,4) != 4) {
-		fail_readraw();
-	}
-}
-
-/****************************************************************************
  Use sendfile in readbraw.
 ****************************************************************************/
 
-void send_file_readbraw(connection_struct *conn,
-			files_struct *fsp,
-			SMB_OFF_T startpos,
-			size_t nread,
-			ssize_t mincount)
+void send_file_readbraw(connection_struct *conn, files_struct *fsp, SMB_OFF_T startpos, size_t nread,
+		ssize_t mincount, char *outbuf, int out_buffsize)
 {
-	char *outbuf = NULL;
 	ssize_t ret=0;
 
 #if defined(WITH_SENDFILE)
@@ -2676,18 +2203,17 @@
 	 * reply_readbraw has already checked the length.
 	 */
 
-	if ( (chain_size == 0) && (nread > 0) && (fsp->base_fsp == NULL) &&
+	if ( (chain_size == 0) && (nread > 0) &&
 	    (fsp->wcp == NULL) && lp_use_sendfile(SNUM(conn)) ) {
-		char header[4];
-		DATA_BLOB header_blob;
+		DATA_BLOB header;
 
-		_smb_setlen(header,nread);
-		header_blob = data_blob_const(header, 4);
+		_smb_setlen(outbuf,nread);
+		header.data = (uint8 *)outbuf;
+		header.length = 4;
+		header.free = NULL;
 
-		if (SMB_VFS_SENDFILE(smbd_server_fd(), fsp,
-				&header_blob, startpos, nread) == -1) {
-			/* Returning ENOSYS means no data at all was sent.
-			 * Do this as a normal read. */
+		if ( SMB_VFS_SENDFILE( smbd_server_fd(), fsp, fsp->fh->fd, &header, startpos, nread) == -1) {
+			/* Returning ENOSYS means no data at all was sent. Do this as a normal read. */
 			if (errno == ENOSYS) {
 				goto normal_readbraw;
 			}
@@ -2702,7 +2228,7 @@
 				set_use_sendfile(SNUM(conn), False);
 				DEBUG(0,("send_file_readbraw: sendfile not available. Faking..\n"));
 
-				if (fake_sendfile(fsp, startpos, nread) == -1) {
+				if (fake_sendfile(fsp, startpos, nread, outbuf + 4, out_buffsize - 4) == -1) {
 					DEBUG(0,("send_file_readbraw: fake_sendfile failed for file %s (%s).\n",
 						fsp->fsp_name, strerror(errno) ));
 					exit_server_cleanly("send_file_readbraw fake_sendfile failed");
@@ -2717,17 +2243,10 @@
 
 		return;
 	}
-#endif
 
-normal_readbraw:
+  normal_readbraw:
 
-	outbuf = TALLOC_ARRAY(NULL, char, nread+4);
-	if (!outbuf) {
-		DEBUG(0,("send_file_readbraw: TALLOC_ARRAY failed for size %u.\n",
-			(unsigned)(nread+4)));
-		reply_readbraw_error();
-		return;
-	}
+#endif
 
 	if (nread > 0) {
 		ret = read_file(fsp,outbuf+4,startpos,nread);
@@ -2743,86 +2262,57 @@
 	_smb_setlen(outbuf,ret);
 	if (write_data(smbd_server_fd(),outbuf,4+ret) != 4+ret)
 		fail_readraw();
-
-	TALLOC_FREE(outbuf);
 }
 
 /****************************************************************************
  Reply to a readbraw (core+ protocol).
 ****************************************************************************/
 
-void reply_readbraw(struct smb_request *req)
+int reply_readbraw(connection_struct *conn, char *inbuf, char *outbuf, int dum_size, int out_buffsize)
 {
-	connection_struct *conn = req->conn;
 	ssize_t maxcount,mincount;
 	size_t nread = 0;
 	SMB_OFF_T startpos;
+	char *header = outbuf;
 	files_struct *fsp;
-	SMB_STRUCT_STAT st;
-	SMB_OFF_T size = 0;
-
 	START_PROFILE(SMBreadbraw);
 
-	if (srv_is_signing_active() || is_encrypted_packet(req->inbuf)) {
-		exit_server_cleanly("reply_readbraw: SMB signing/sealing is active - "
-			"raw reads/writes are disallowed.");
+	if (srv_is_signing_active()) {
+		exit_server_cleanly("reply_readbraw: SMB signing is active - raw reads/writes are disallowed.");
 	}
 
-	if (req->wct < 8) {
-		reply_readbraw_error();
-		END_PROFILE(SMBreadbraw);
-		return;
-	}
-
 	/*
 	 * Special check if an oplock break has been issued
 	 * and the readraw request croses on the wire, we must
 	 * return a zero length response here.
 	 */
 
-	fsp = file_fsp(SVAL(req->inbuf,smb_vwv0));
+	fsp = file_fsp(inbuf,smb_vwv0);
 
-	/*
-	 * We have to do a check_fsp by hand here, as
-	 * we must always return 4 zero bytes on error,
-	 * not a NTSTATUS.
-	 */
-
-	if (!fsp || !conn || conn != fsp->conn ||
-			current_user.vuid != fsp->vuid ||
-			fsp->is_directory || fsp->fh->fd == -1) {
+	if (!FNUM_OK(fsp,conn) || !fsp->can_read) {
 		/*
 		 * fsp could be NULL here so use the value from the packet. JRA.
 		 */
-		DEBUG(3,("reply_readbraw: fnum %d not valid "
-			"- cache prime?\n",
-			(int)SVAL(req->inbuf,smb_vwv0)));
-		reply_readbraw_error();
+		DEBUG(3,("fnum %d not open in readbraw - cache prime?\n",(int)SVAL(inbuf,smb_vwv0)));
+		_smb_setlen(header,0);
+		if (write_data(smbd_server_fd(),header,4) != 4)
+			fail_readraw();
 		END_PROFILE(SMBreadbraw);
-		return;
+		return(-1);
 	}
 
-	/* Do a "by hand" version of CHECK_READ. */
-	if (!(fsp->can_read ||
-			((req->flags2 & FLAGS2_READ_PERMIT_EXECUTE) &&
-				(fsp->access_mask & FILE_EXECUTE)))) {
-		DEBUG(3,("reply_readbraw: fnum %d not readable.\n",
-				(int)SVAL(req->inbuf,smb_vwv0)));
-		reply_readbraw_error();
-		END_PROFILE(SMBreadbraw);
-		return;
-	}
+	CHECK_FSP(fsp,conn);
 
 	flush_write_cache(fsp, READRAW_FLUSH);
 
-	startpos = IVAL_TO_SMB_OFF_T(req->inbuf,smb_vwv1);
-	if(req->wct == 10) {
+	startpos = IVAL_TO_SMB_OFF_T(inbuf,smb_vwv1);
+	if(CVAL(inbuf,smb_wct) == 10) {
 		/*
 		 * This is a large offset (64 bit) read.
 		 */
 #ifdef LARGE_SMB_OFF_T
 
-		startpos |= (((SMB_OFF_T)IVAL(req->inbuf,smb_vwv8)) << 32);
+		startpos |= (((SMB_OFF_T)IVAL(inbuf,smb_vwv8)) << 32);
 
 #else /* !LARGE_SMB_OFF_T */
 
@@ -2830,69 +2320,61 @@
 		 * Ensure we haven't been sent a >32 bit offset.
 		 */
 
-		if(IVAL(req->inbuf,smb_vwv8) != 0) {
-			DEBUG(0,("reply_readbraw: large offset "
-				"(%x << 32) used and we don't support "
-				"64 bit offsets.\n",
-			(unsigned int)IVAL(req->inbuf,smb_vwv8) ));
-			reply_readbraw_error();
+		if(IVAL(inbuf,smb_vwv8) != 0) {
+			DEBUG(0,("readbraw - large offset (%x << 32) used and we don't support \
+64 bit offsets.\n", (unsigned int)IVAL(inbuf,smb_vwv8) ));
+			_smb_setlen(header,0);
+			if (write_data(smbd_server_fd(),header,4) != 4)
+				fail_readraw();
 			END_PROFILE(SMBreadbraw);
-			return;
+			return(-1);
 		}
 
 #endif /* LARGE_SMB_OFF_T */
 
 		if(startpos < 0) {
-			DEBUG(0,("reply_readbraw: negative 64 bit "
-				"readraw offset (%.0f) !\n",
-				(double)startpos ));
-			reply_readbraw_error();
+			DEBUG(0,("readbraw - negative 64 bit readraw offset (%.0f) !\n", (double)startpos ));
+			_smb_setlen(header,0);
+			if (write_data(smbd_server_fd(),header,4) != 4)
+				fail_readraw();
 			END_PROFILE(SMBreadbraw);
-			return;
+			return(-1);
 		}      
 	}
+	maxcount = (SVAL(inbuf,smb_vwv3) & 0xFFFF);
+	mincount = (SVAL(inbuf,smb_vwv4) & 0xFFFF);
 
-	maxcount = (SVAL(req->inbuf,smb_vwv3) & 0xFFFF);
-	mincount = (SVAL(req->inbuf,smb_vwv4) & 0xFFFF);
-
 	/* ensure we don't overrun the packet size */
 	maxcount = MIN(65535,maxcount);
 
-	if (is_locked(fsp,(uint32)req->smbpid,
-			(SMB_BIG_UINT)maxcount,
-			(SMB_BIG_UINT)startpos,
-			READ_LOCK)) {
-		reply_readbraw_error();
-		END_PROFILE(SMBreadbraw);
-		return;
-	}
+	if (!is_locked(fsp,(uint32)SVAL(inbuf,smb_pid),(SMB_BIG_UINT)maxcount,(SMB_BIG_UINT)startpos, READ_LOCK)) {
+		SMB_STRUCT_STAT st;
+		SMB_OFF_T size = 0;
+  
+		if (SMB_VFS_FSTAT(fsp,fsp->fh->fd,&st) == 0) {
+			size = st.st_size;
+		}
 
-	if (SMB_VFS_FSTAT(fsp, &st) == 0) {
-		size = st.st_size;
+		if (startpos >= size) {
+			nread = 0;
+		} else {
+			nread = MIN(maxcount,(size - startpos));	  
+		}
 	}
 
-	if (startpos >= size) {
-		nread = 0;
-	} else {
-		nread = MIN(maxcount,(size - startpos));
-	}
-
 #if 0 /* mincount appears to be ignored in a W2K server. JRA. */
 	if (nread < mincount)
 		nread = 0;
 #endif
   
-	DEBUG( 3, ( "reply_readbraw: fnum=%d start=%.0f max=%lu "
-		"min=%lu nread=%lu\n",
-		fsp->fnum, (double)startpos,
-		(unsigned long)maxcount,
-		(unsigned long)mincount,
-		(unsigned long)nread ) );
+	DEBUG( 3, ( "readbraw fnum=%d start=%.0f max=%lu min=%lu nread=%lu\n", fsp->fnum, (double)startpos,
+				(unsigned long)maxcount, (unsigned long)mincount, (unsigned long)nread ) );
   
-	send_file_readbraw(conn, fsp, startpos, nread, mincount);
+	send_file_readbraw(conn, fsp, startpos, nread, mincount, outbuf, out_buffsize);
 
-	DEBUG(5,("reply_readbraw finished\n"));
+	DEBUG(5,("readbraw finished\n"));
 	END_PROFILE(SMBreadbraw);
+	return -1;
 }
 
 #undef DBGC_CLASS
@@ -2902,49 +2384,31 @@
  Reply to a lockread (core+ protocol).
 ****************************************************************************/
 
-void reply_lockread(struct smb_request *req)
+int reply_lockread(connection_struct *conn, char *inbuf,char *outbuf, int length, int dum_buffsiz)
 {
-	connection_struct *conn = req->conn;
 	ssize_t nread = -1;
 	char *data;
+	int outsize = 0;
 	SMB_OFF_T startpos;
 	size_t numtoread;
 	NTSTATUS status;
-	files_struct *fsp;
+	files_struct *fsp = file_fsp(inbuf,smb_vwv0);
 	struct byte_range_lock *br_lck = NULL;
-	char *p = NULL;
-
 	START_PROFILE(SMBlockread);
 
-	if (req->wct < 5) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBlockread);
-		return;
+	CHECK_FSP(fsp,conn);
+	if (!CHECK_READ(fsp,inbuf)) {
+		return(ERROR_DOS(ERRDOS,ERRbadaccess));
 	}
 
-	fsp = file_fsp(SVAL(req->inbuf,smb_vwv0));
-
-	if (!check_fsp(conn, req, fsp, &current_user)) {
-		END_PROFILE(SMBlockread);
-		return;
-	}
-
-	if (!CHECK_READ(fsp,req->inbuf)) {
-		reply_doserror(req, ERRDOS, ERRbadaccess);
-		END_PROFILE(SMBlockread);
-		return;
-	}
-
 	release_level_2_oplocks_on_change(fsp);
 
-	numtoread = SVAL(req->inbuf,smb_vwv1);
-	startpos = IVAL_TO_SMB_OFF_T(req->inbuf,smb_vwv2);
-
-	numtoread = MIN(BUFFER_SIZE - (smb_size + 3*2 + 3), numtoread);
-
-	reply_outbuf(req, 5, numtoread + 3);
-
-	data = smb_buf(req->outbuf) + 3;
+	numtoread = SVAL(inbuf,smb_vwv1);
+	startpos = IVAL_TO_SMB_OFF_T(inbuf,smb_vwv2);
+  
+	outsize = set_message(outbuf,5,3,True);
+	numtoread = MIN(BUFFER_SIZE-outsize,numtoread);
+	data = smb_buf(outbuf) + 3;
 	
 	/*
 	 * NB. Discovered by Menny Hamburger at Mainsoft. This is a core+
@@ -2954,9 +2418,8 @@
 	 * Note that the requested lock size is unaffected by max_recv.
 	 */
 	
-	br_lck = do_lock(smbd_messaging_context(),
-			fsp,
-			req->smbpid,
+	br_lck = do_lock(fsp,
+			(uint32)SVAL(inbuf,smb_pid), 
 			(SMB_BIG_UINT)numtoread,
 			(SMB_BIG_UINT)startpos,
 			WRITE_LOCK,
@@ -2967,9 +2430,8 @@
 	TALLOC_FREE(br_lck);
 
 	if (NT_STATUS_V(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBlockread);
-		return;
+		return ERROR_NT(status);
 	}
 
 	/*
@@ -2985,24 +2447,20 @@
 	nread = read_file(fsp,data,startpos,numtoread);
 
 	if (nread < 0) {
-		reply_unixerror(req, ERRDOS, ERRnoaccess);
 		END_PROFILE(SMBlockread);
-		return;
+		return(UNIXERROR(ERRDOS,ERRnoaccess));
 	}
 	
-	srv_set_message((char *)req->outbuf, 5, nread+3, False);
-
-	SSVAL(req->outbuf,smb_vwv0,nread);
-	SSVAL(req->outbuf,smb_vwv5,nread+3);
-	p = smb_buf(req->outbuf);
-	SCVAL(p,0,0); /* pad byte. */
-	SSVAL(p,1,nread);
+	outsize += nread;
+	SSVAL(outbuf,smb_vwv0,nread);
+	SSVAL(outbuf,smb_vwv5,nread+3);
+	SSVAL(smb_buf(outbuf),1,nread);
 	
 	DEBUG(3,("lockread fnum=%d num=%d nread=%d\n",
 		 fsp->fnum, (int)numtoread, (int)nread));
 
 	END_PROFILE(SMBlockread);
-	return;
+	return(outsize);
 }
 
 #undef DBGC_CLASS
@@ -3012,42 +2470,26 @@
  Reply to a read.
 ****************************************************************************/
 
-void reply_read(struct smb_request *req)
+int reply_read(connection_struct *conn, char *inbuf,char *outbuf, int size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
 	size_t numtoread;
 	ssize_t nread = 0;
 	char *data;
 	SMB_OFF_T startpos;
 	int outsize = 0;
-	files_struct *fsp;
-
+	files_struct *fsp = file_fsp(inbuf,smb_vwv0);
 	START_PROFILE(SMBread);
 
-	if (req->wct < 3) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBread);
-		return;
+	CHECK_FSP(fsp,conn);
+	if (!CHECK_READ(fsp,inbuf)) {
+		return(ERROR_DOS(ERRDOS,ERRbadaccess));
 	}
 
-	fsp = file_fsp(SVAL(req->inbuf,smb_vwv0));
+	numtoread = SVAL(inbuf,smb_vwv1);
+	startpos = IVAL_TO_SMB_OFF_T(inbuf,smb_vwv2);
 
-	if (!check_fsp(conn, req, fsp, &current_user)) {
-		END_PROFILE(SMBread);
-		return;
-	}
-
-	if (!CHECK_READ(fsp,req->inbuf)) {
-		reply_doserror(req, ERRDOS, ERRbadaccess);
-		END_PROFILE(SMBread);
-		return;
-	}
-
-	numtoread = SVAL(req->inbuf,smb_vwv1);
-	startpos = IVAL_TO_SMB_OFF_T(req->inbuf,smb_vwv2);
-
+	outsize = set_message(outbuf,5,3,True);
 	numtoread = MIN(BUFFER_SIZE-outsize,numtoread);
-
 	/*
 	 * The requested read size cannot be greater than max_recv. JRA.
 	 */
@@ -3058,116 +2500,87 @@
 		numtoread = MIN(numtoread,max_recv);
 	}
 
-	reply_outbuf(req, 5, numtoread+3);
-
-	data = smb_buf(req->outbuf) + 3;
+	data = smb_buf(outbuf) + 3;
   
-	if (is_locked(fsp, (uint32)req->smbpid, (SMB_BIG_UINT)numtoread,
-		      (SMB_BIG_UINT)startpos, READ_LOCK)) {
-		reply_doserror(req, ERRDOS,ERRlock);
+	if (is_locked(fsp,(uint32)SVAL(inbuf,smb_pid),(SMB_BIG_UINT)numtoread,(SMB_BIG_UINT)startpos, READ_LOCK)) {
 		END_PROFILE(SMBread);
-		return;
+		return ERROR_DOS(ERRDOS,ERRlock);
 	}
 
 	if (numtoread > 0)
 		nread = read_file(fsp,data,startpos,numtoread);
 
 	if (nread < 0) {
-		reply_unixerror(req, ERRDOS,ERRnoaccess);
 		END_PROFILE(SMBread);
-		return;
+		return(UNIXERROR(ERRDOS,ERRnoaccess));
 	}
-
-	srv_set_message((char *)req->outbuf, 5, nread+3, False);
-
-	SSVAL(req->outbuf,smb_vwv0,nread);
-	SSVAL(req->outbuf,smb_vwv5,nread+3);
-	SCVAL(smb_buf(req->outbuf),0,1);
-	SSVAL(smb_buf(req->outbuf),1,nread);
   
+	outsize += nread;
+	SSVAL(outbuf,smb_vwv0,nread);
+	SSVAL(outbuf,smb_vwv5,nread+3);
+	SCVAL(smb_buf(outbuf),0,1);
+	SSVAL(smb_buf(outbuf),1,nread);
+  
 	DEBUG( 3, ( "read fnum=%d num=%d nread=%d\n",
 		fsp->fnum, (int)numtoread, (int)nread ) );
 
 	END_PROFILE(SMBread);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
- Setup readX header.
-****************************************************************************/
-
-static int setup_readX_header(char *outbuf, size_t smb_maxcnt)
-{
-	int outsize;
-	char *data;
-
-	outsize = srv_set_message(outbuf,12,smb_maxcnt,False);
-	data = smb_buf(outbuf);
-
-	memset(outbuf+smb_vwv0,'\0',24); /* valgrind init. */
-
-	SCVAL(outbuf,smb_vwv0,0xFF);
-	SSVAL(outbuf,smb_vwv2,0xFFFF); /* Remaining - must be -1. */
-	SSVAL(outbuf,smb_vwv5,smb_maxcnt);
-	SSVAL(outbuf,smb_vwv6,smb_offset(data,outbuf));
-	SSVAL(outbuf,smb_vwv7,(smb_maxcnt >> 16));
-	SSVAL(smb_buf(outbuf),-2,smb_maxcnt);
-	/* Reset the outgoing length, set_message truncates at 0x1FFFF. */
-	_smb_setlen_large(outbuf,(smb_size + 12*2 + smb_maxcnt - 4));
-	return outsize;
-}
-
-/****************************************************************************
  Reply to a read and X - possibly using sendfile.
 ****************************************************************************/
 
-static void send_file_readX(connection_struct *conn, struct smb_request *req,
-			    files_struct *fsp, SMB_OFF_T startpos,
-			    size_t smb_maxcnt)
+int send_file_readX(connection_struct *conn, char *inbuf,char *outbuf,int length, int len_outbuf,
+		files_struct *fsp, SMB_OFF_T startpos, size_t smb_maxcnt)
 {
-	SMB_STRUCT_STAT sbuf;
+	int outsize = 0;
 	ssize_t nread = -1;
+	char *data = smb_buf(outbuf);
 
-	if(SMB_VFS_FSTAT(fsp, &sbuf) == -1) {
-		reply_unixerror(req, ERRDOS, ERRnoaccess);
-		return;
-	}
-
-	if (startpos > sbuf.st_size) {
-		smb_maxcnt = 0;
-	} else if (smb_maxcnt > (sbuf.st_size - startpos)) {
-		smb_maxcnt = (sbuf.st_size - startpos);
-	}
-
-	if (smb_maxcnt == 0) {
-		goto normal_read;
-	}
-
 #if defined(WITH_SENDFILE)
 	/*
-	 * We can only use sendfile on a non-chained packet
+	 * We can only use sendfile on a non-chained packet 
 	 * but we can use on a non-oplocked file. tridge proved this
 	 * on a train in Germany :-). JRA.
 	 */
 
-	if ((chain_size == 0) && (CVAL(req->inbuf,smb_vwv0) == 0xFF) &&
-	    !is_encrypted_packet(req->inbuf) && (fsp->base_fsp == NULL) &&
+	if ((chain_size == 0) && (CVAL(inbuf,smb_vwv0) == 0xFF) &&
 	    lp_use_sendfile(SNUM(conn)) && (fsp->wcp == NULL) ) {
-		uint8 headerbuf[smb_size + 12 * 2];
+		SMB_STRUCT_STAT sbuf;
 		DATA_BLOB header;
 
-		/*
+		if(SMB_VFS_FSTAT(fsp,fsp->fh->fd, &sbuf) == -1)
+			return(UNIXERROR(ERRDOS,ERRnoaccess));
+
+		if (startpos > sbuf.st_size)
+			goto normal_read;
+
+		if (smb_maxcnt > (sbuf.st_size - startpos))
+			smb_maxcnt = (sbuf.st_size - startpos);
+
+		if (smb_maxcnt == 0)
+			goto normal_read;
+
+		/* 
 		 * Set up the packet header before send. We
 		 * assume here the sendfile will work (get the
 		 * correct amount of data).
 		 */
 
-		header = data_blob_const(headerbuf, sizeof(headerbuf));
+		SSVAL(outbuf,smb_vwv2,0xFFFF); /* Remaining - must be -1. */
+		SSVAL(outbuf,smb_vwv5,smb_maxcnt);
+		SSVAL(outbuf,smb_vwv6,smb_offset(data,outbuf));
+		SSVAL(outbuf,smb_vwv7,((smb_maxcnt >> 16) & 1));
+		SSVAL(smb_buf(outbuf),-2,smb_maxcnt);
+		SCVAL(outbuf,smb_vwv0,0xFF);
+		set_message(outbuf,12,smb_maxcnt,False);
+		header.data = (uint8 *)outbuf;
+		header.length = data - outbuf;
+		header.free = NULL;
 
-		construct_reply_common((char *)req->inbuf, (char *)headerbuf);
-		setup_readX_header((char *)headerbuf, smb_maxcnt);
-
-		if ((nread = SMB_VFS_SENDFILE(smbd_server_fd(), fsp, &header, startpos, smb_maxcnt)) == -1) {
+		if ((nread = SMB_VFS_SENDFILE( smbd_server_fd(), fsp, fsp->fh->fd, &header, startpos, smb_maxcnt)) == -1) {
 			/* Returning ENOSYS means no data at all was sent. Do this as a normal read. */
 			if (errno == ENOSYS) {
 				goto normal_read;
@@ -3183,18 +2596,17 @@
 				/* Ensure we don't do this again. */
 				set_use_sendfile(SNUM(conn), False);
 				DEBUG(0,("send_file_readX: sendfile not available. Faking..\n"));
-				nread = fake_sendfile(fsp, startpos,
-						      smb_maxcnt);
-				if (nread == -1) {
+
+				if ((nread = fake_sendfile(fsp, startpos, smb_maxcnt, data,
+							len_outbuf - (data-outbuf))) == -1) {
 					DEBUG(0,("send_file_readX: fake_sendfile failed for file %s (%s).\n",
 						fsp->fsp_name, strerror(errno) ));
 					exit_server_cleanly("send_file_readX: fake_sendfile failed");
 				}
 				DEBUG( 3, ( "send_file_readX: fake_sendfile fnum=%d max=%d nread=%d\n",
 					fsp->fnum, (int)smb_maxcnt, (int)nread ) );
-				/* No outbuf here means successful sendfile. */
-				TALLOC_FREE(req->outbuf);
-				return;
+				/* Returning -1 here means successful sendfile. */
+				return -1;
 			}
 
 			DEBUG(0,("send_file_readX: sendfile failed for file %s (%s). Terminating\n",
@@ -3204,133 +2616,81 @@
 
 		DEBUG( 3, ( "send_file_readX: sendfile fnum=%d max=%d nread=%d\n",
 			fsp->fnum, (int)smb_maxcnt, (int)nread ) );
-		/* No outbuf here means successful sendfile. */
-		TALLOC_FREE(req->outbuf);
-		return;
+		/* Returning -1 here means successful sendfile. */
+		return -1;
 	}
-#endif
 
-normal_read:
+  normal_read:
 
-	if ((smb_maxcnt & 0xFF0000) > 0x10000) {
-		uint8 headerbuf[smb_size + 2*12];
+#endif
 
-		construct_reply_common((char *)req->inbuf, (char *)headerbuf);
-		setup_readX_header((char *)headerbuf, smb_maxcnt);
+	nread = read_file(fsp,data,startpos,smb_maxcnt);
+  
+	if (nread < 0) {
+		return(UNIXERROR(ERRDOS,ERRnoaccess));
+	}
 
-		/* Send out the header. */
-		if (write_data(smbd_server_fd(), (char *)headerbuf,
-			       sizeof(headerbuf)) != sizeof(headerbuf)) {
-			DEBUG(0,("send_file_readX: write_data failed for file %s (%s). Terminating\n",
-				fsp->fsp_name, strerror(errno) ));
-			exit_server_cleanly("send_file_readX sendfile failed");
-		}
-		nread = fake_sendfile(fsp, startpos, smb_maxcnt);
-		if (nread == -1) {
-			DEBUG(0,("send_file_readX: fake_sendfile failed for file %s (%s).\n",
-				fsp->fsp_name, strerror(errno) ));
-			exit_server_cleanly("send_file_readX: fake_sendfile failed");
-		}
-		TALLOC_FREE(req->outbuf);
-		return;
-	} else {
-		reply_outbuf(req, 12, smb_maxcnt);
+	outsize = set_message(outbuf,12,nread,False);
+	SSVAL(outbuf,smb_vwv2,0xFFFF); /* Remaining - must be -1. */
+	SSVAL(outbuf,smb_vwv5,nread);
+	SSVAL(outbuf,smb_vwv6,smb_offset(data,outbuf));
+	SSVAL(outbuf,smb_vwv7,((nread >> 16) & 1));
+	SSVAL(smb_buf(outbuf),-2,nread);
+  
+	DEBUG( 3, ( "send_file_readX fnum=%d max=%d nread=%d\n",
+		fsp->fnum, (int)smb_maxcnt, (int)nread ) );
 
-		nread = read_file(fsp, smb_buf(req->outbuf), startpos,
-				  smb_maxcnt);
-		if (nread < 0) {
-			reply_unixerror(req, ERRDOS, ERRnoaccess);
-			return;
-		}
-
-		setup_readX_header((char *)req->outbuf, nread);
-
-		DEBUG( 3, ( "send_file_readX fnum=%d max=%d nread=%d\n",
-			fsp->fnum, (int)smb_maxcnt, (int)nread ) );
-
-		chain_reply(req);
-
-		return;
-	}
+	/* Returning the number of bytes we want to send back - including header. */
+	return outsize;
 }
 
 /****************************************************************************
  Reply to a read and X.
 ****************************************************************************/
 
-void reply_read_and_X(struct smb_request *req)
+int reply_read_and_X(connection_struct *conn, char *inbuf,char *outbuf,int length,int bufsize)
 {
-	connection_struct *conn = req->conn;
-	files_struct *fsp;
-	SMB_OFF_T startpos;
-	size_t smb_maxcnt;
-	bool big_readX = False;
+	files_struct *fsp = file_fsp(inbuf,smb_vwv2);
+	SMB_OFF_T startpos = IVAL_TO_SMB_OFF_T(inbuf,smb_vwv3);
+	ssize_t nread = -1;
+	size_t smb_maxcnt = SVAL(inbuf,smb_vwv5);
 #if 0
-	size_t smb_mincnt = SVAL(req->inbuf,smb_vwv6);
+	size_t smb_mincnt = SVAL(inbuf,smb_vwv6);
 #endif
 
 	START_PROFILE(SMBreadX);
 
-	if ((req->wct != 10) && (req->wct != 12)) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
-	}
-
-	fsp = file_fsp(SVAL(req->inbuf,smb_vwv2));
-	startpos = IVAL_TO_SMB_OFF_T(req->inbuf,smb_vwv3);
-	smb_maxcnt = SVAL(req->inbuf,smb_vwv5);
-
 	/* If it's an IPC, pass off the pipe handler. */
 	if (IS_IPC(conn)) {
-		reply_pipe_read_and_X(req);
 		END_PROFILE(SMBreadX);
-		return;
+		return reply_pipe_read_and_X(inbuf,outbuf,length,bufsize);
 	}
 
-	if (!check_fsp(conn, req, fsp, &current_user)) {
-		END_PROFILE(SMBreadX);
-		return;
+	CHECK_FSP(fsp,conn);
+	if (!CHECK_READ(fsp,inbuf)) {
+		return(ERROR_DOS(ERRDOS,ERRbadaccess));
 	}
 
-	if (!CHECK_READ(fsp,req->inbuf)) {
-		reply_doserror(req, ERRDOS,ERRbadaccess);
-		END_PROFILE(SMBreadX);
-		return;
-	}
+	set_message(outbuf,12,0,True);
 
 	if (global_client_caps & CAP_LARGE_READX) {
-		size_t upper_size = SVAL(req->inbuf,smb_vwv7);
-		smb_maxcnt |= (upper_size<<16);
-		if (upper_size > 1) {
-			/* Can't do this on a chained packet. */
-			if ((CVAL(req->inbuf,smb_vwv0) != 0xFF)) {
-				reply_nterror(req, NT_STATUS_NOT_SUPPORTED);
-				END_PROFILE(SMBreadX);
-				return;
-			}
-			/* We currently don't do this on signed or sealed data. */
-			if (srv_is_signing_active() || is_encrypted_packet(req->inbuf)) {
-				reply_nterror(req, NT_STATUS_NOT_SUPPORTED);
-				END_PROFILE(SMBreadX);
-				return;
-			}
-			/* Is there room in the reply for this data ? */
-			if (smb_maxcnt > (0xFFFFFF - (smb_size -4 + 12*2)))  {
-				reply_nterror(req,
-					      NT_STATUS_INVALID_PARAMETER);
-				END_PROFILE(SMBreadX);
-				return;
-			}
-			big_readX = True;
+		if (SVAL(inbuf,smb_vwv7) == 1) {
+			smb_maxcnt |= (1<<16);
 		}
+		if (smb_maxcnt > BUFFER_SIZE) {
+			DEBUG(0,("reply_read_and_X - read too large (%u) for reply buffer %u\n",
+				(unsigned int)smb_maxcnt, (unsigned int)BUFFER_SIZE));
+			END_PROFILE(SMBreadX);
+			return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
+		}
 	}
 
-	if (req->wct == 12) {
+	if(CVAL(inbuf,smb_wct) == 12) {
 #ifdef LARGE_SMB_OFF_T
 		/*
 		 * This is a large offset (64 bit) read.
 		 */
-		startpos |= (((SMB_OFF_T)IVAL(req->inbuf,smb_vwv10)) << 32);
+		startpos |= (((SMB_OFF_T)IVAL(inbuf,smb_vwv10)) << 32);
 
 #else /* !LARGE_SMB_OFF_T */
 
@@ -3338,270 +2698,184 @@
 		 * Ensure we haven't been sent a >32 bit offset.
 		 */
 
-		if(IVAL(req->inbuf,smb_vwv10) != 0) {
-			DEBUG(0,("reply_read_and_X - large offset (%x << 32) "
-				 "used and we don't support 64 bit offsets.\n",
-				 (unsigned int)IVAL(req->inbuf,smb_vwv10) ));
+		if(IVAL(inbuf,smb_vwv10) != 0) {
+			DEBUG(0,("reply_read_and_X - large offset (%x << 32) used and we don't support \
+64 bit offsets.\n", (unsigned int)IVAL(inbuf,smb_vwv10) ));
 			END_PROFILE(SMBreadX);
-			reply_doserror(req, ERRDOS, ERRbadaccess);
-			return;
+			return ERROR_DOS(ERRDOS,ERRbadaccess);
 		}
 
 #endif /* LARGE_SMB_OFF_T */
 
 	}
 
-	if (is_locked(fsp, (uint32)req->smbpid, (SMB_BIG_UINT)smb_maxcnt,
-		      (SMB_BIG_UINT)startpos, READ_LOCK)) {
+	if (is_locked(fsp,(uint32)SVAL(inbuf,smb_pid),(SMB_BIG_UINT)smb_maxcnt,(SMB_BIG_UINT)startpos, READ_LOCK)) {
 		END_PROFILE(SMBreadX);
-		reply_doserror(req, ERRDOS, ERRlock);
-		return;
+		return ERROR_DOS(ERRDOS,ERRlock);
 	}
 
-	if (!big_readX &&
-	    schedule_aio_read_and_X(conn, req, fsp, startpos, smb_maxcnt)) {
+	if (schedule_aio_read_and_X(conn, inbuf, outbuf, length, bufsize, fsp, startpos, smb_maxcnt)) {
 		END_PROFILE(SMBreadX);
-		return;
+		return -1;
 	}
 
-	send_file_readX(conn, req, fsp,	startpos, smb_maxcnt);
+	nread = send_file_readX(conn, inbuf, outbuf, length, bufsize, fsp, startpos, smb_maxcnt);
+	/* Only call chain_reply if not an error. */
+	if (nread != -1 && SVAL(outbuf,smb_rcls) == 0) {
+		nread = chain_reply(inbuf,outbuf,length,bufsize);
+	}
 
 	END_PROFILE(SMBreadX);
-	return;
+	return nread;
 }
 
 /****************************************************************************
- Error replies to writebraw must have smb_wct == 1. Fix this up.
-****************************************************************************/
-
-void error_to_writebrawerr(struct smb_request *req)
-{
-	uint8 *old_outbuf = req->outbuf;
-
-	reply_outbuf(req, 1, 0);
-
-	memcpy(req->outbuf, old_outbuf, smb_size);
-	TALLOC_FREE(old_outbuf);
-}
-
-/****************************************************************************
  Reply to a writebraw (core+ or LANMAN1.0 protocol).
 ****************************************************************************/
 
-void reply_writebraw(struct smb_request *req)
+int reply_writebraw(connection_struct *conn, char *inbuf,char *outbuf, int size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
-	char *buf = NULL;
 	ssize_t nwritten=0;
 	ssize_t total_written=0;
 	size_t numtowrite=0;
 	size_t tcount;
 	SMB_OFF_T startpos;
 	char *data=NULL;
-	bool write_through;
-	files_struct *fsp;
+	BOOL write_through;
+	files_struct *fsp = file_fsp(inbuf,smb_vwv0);
+	int outsize = 0;
 	NTSTATUS status;
-
 	START_PROFILE(SMBwritebraw);
 
-	/*
-	 * If we ever reply with an error, it must have the SMB command
-	 * type of SMBwritec, not SMBwriteBraw, as this tells the client
-	 * we're finished.
-	 */
-	SCVAL(req->inbuf,smb_com,SMBwritec);
-
 	if (srv_is_signing_active()) {
-		END_PROFILE(SMBwritebraw);
-		exit_server_cleanly("reply_writebraw: SMB signing is active - "
-				"raw reads/writes are disallowed.");
+		exit_server_cleanly("reply_writebraw: SMB signing is active - raw reads/writes are disallowed.");
 	}
 
-	if (req->wct < 12) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		error_to_writebrawerr(req);
-		END_PROFILE(SMBwritebraw);
-		return;
-	}
-
-	fsp = file_fsp(SVAL(req->inbuf,smb_vwv0));
-	if (!check_fsp(conn, req, fsp, &current_user)) {
-		error_to_writebrawerr(req);
-		END_PROFILE(SMBwritebraw);
-		return;
-	}
-
+	CHECK_FSP(fsp,conn);
 	if (!CHECK_WRITE(fsp)) {
-		reply_doserror(req, ERRDOS, ERRbadaccess);
-		error_to_writebrawerr(req);
-		END_PROFILE(SMBwritebraw);
-		return;
+		return(ERROR_DOS(ERRDOS,ERRbadaccess));
 	}
+  
+	tcount = IVAL(inbuf,smb_vwv1);
+	startpos = IVAL_TO_SMB_OFF_T(inbuf,smb_vwv3);
+	write_through = BITSETW(inbuf+smb_vwv7,0);
 
-	tcount = IVAL(req->inbuf,smb_vwv1);
-	startpos = IVAL_TO_SMB_OFF_T(req->inbuf,smb_vwv3);
-	write_through = BITSETW(req->inbuf+smb_vwv7,0);
-
 	/* We have to deal with slightly different formats depending
 		on whether we are using the core+ or lanman1.0 protocol */
 
 	if(Protocol <= PROTOCOL_COREPLUS) {
-		numtowrite = SVAL(smb_buf(req->inbuf),-2);
-		data = smb_buf(req->inbuf);
+		numtowrite = SVAL(smb_buf(inbuf),-2);
+		data = smb_buf(inbuf);
 	} else {
-		numtowrite = SVAL(req->inbuf,smb_vwv10);
-		data = smb_base(req->inbuf) + SVAL(req->inbuf, smb_vwv11);
+		numtowrite = SVAL(inbuf,smb_vwv10);
+		data = smb_base(inbuf) + SVAL(inbuf, smb_vwv11);
 	}
 
-	/* Ensure we don't write bytes past the end of this packet. */
-	if (data + numtowrite > smb_base(req->inbuf) + smb_len(req->inbuf)) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		error_to_writebrawerr(req);
-		END_PROFILE(SMBwritebraw);
-		return;
-	}
+	/* force the error type */
+	SCVAL(inbuf,smb_com,SMBwritec);
+	SCVAL(outbuf,smb_com,SMBwritec);
 
-	if (is_locked(fsp,(uint32)req->smbpid,(SMB_BIG_UINT)tcount,
-				(SMB_BIG_UINT)startpos, WRITE_LOCK)) {
-		reply_doserror(req, ERRDOS, ERRlock);
-		error_to_writebrawerr(req);
+	if (is_locked(fsp,(uint32)SVAL(inbuf,smb_pid),(SMB_BIG_UINT)tcount,(SMB_BIG_UINT)startpos, WRITE_LOCK)) {
 		END_PROFILE(SMBwritebraw);
-		return;
+		return(ERROR_DOS(ERRDOS,ERRlock));
 	}
 
-	if (numtowrite>0) {
-		nwritten = write_file(req,fsp,data,startpos,numtowrite);
-	}
+	if (numtowrite>0)
+		nwritten = write_file(fsp,data,startpos,numtowrite);
+  
+	DEBUG(3,("writebraw1 fnum=%d start=%.0f num=%d wrote=%d sync=%d\n",
+		fsp->fnum, (double)startpos, (int)numtowrite, (int)nwritten, (int)write_through));
 
-	DEBUG(3,("reply_writebraw: initial write fnum=%d start=%.0f num=%d "
-			"wrote=%d sync=%d\n",
-		fsp->fnum, (double)startpos, (int)numtowrite,
-		(int)nwritten, (int)write_through));
-
 	if (nwritten < (ssize_t)numtowrite)  {
-		reply_unixerror(req, ERRHRD, ERRdiskfull);
-		error_to_writebrawerr(req);
 		END_PROFILE(SMBwritebraw);
-		return;
+		return(UNIXERROR(ERRHRD,ERRdiskfull));
 	}
 
 	total_written = nwritten;
 
-	/* Allocate a buffer of 64k + length. */
-	buf = TALLOC_ARRAY(NULL, char, 65540);
-	if (!buf) {
-		reply_doserror(req, ERRDOS, ERRnomem);
-		error_to_writebrawerr(req);
-		END_PROFILE(SMBwritebraw);
-		return;
-	}
-
-	/* Return a SMBwritebraw message to the redirector to tell
-	 * it to send more bytes */
-
-	memcpy(buf, req->inbuf, smb_size);
-	srv_set_message(buf,Protocol>PROTOCOL_COREPLUS?1:0,0,True);
-	SCVAL(buf,smb_com,SMBwritebraw);
-	SSVALS(buf,smb_vwv0,0xFFFF);
-	show_msg(buf);
-	if (!srv_send_smb(smbd_server_fd(),
-			buf,
-			IS_CONN_ENCRYPTED(conn))) {
-		exit_server_cleanly("reply_writebraw: srv_send_smb "
-			"failed.");
-	}
-
+	/* Return a message to the redirector to tell it to send more bytes */
+	SCVAL(outbuf,smb_com,SMBwritebraw);
+	SSVALS(outbuf,smb_vwv0,-1);
+	outsize = set_message(outbuf,Protocol>PROTOCOL_COREPLUS?1:0,0,True);
+	show_msg(outbuf);
+	if (!send_smb(smbd_server_fd(),outbuf))
+		exit_server_cleanly("reply_writebraw: send_smb failed.");
+  
 	/* Now read the raw data into the buffer and write it */
-	status = read_smb_length(smbd_server_fd(), buf, SMB_SECONDARY_WAIT,
-				 &numtowrite);
-	if (!NT_STATUS_IS_OK(status)) {
+	if (read_smb_length(smbd_server_fd(),inbuf,SMB_SECONDARY_WAIT) == -1) {
 		exit_server_cleanly("secondary writebraw failed");
 	}
+  
+	/* Even though this is not an smb message, smb_len returns the generic length of an smb message */
+	numtowrite = smb_len(inbuf);
 
-	/* Set up outbuf to return the correct size */
-	reply_outbuf(req, 1, 0);
+	/* Set up outbuf to return the correct return */
+	outsize = set_message(outbuf,1,0,True);
+	SCVAL(outbuf,smb_com,SMBwritec);
 
 	if (numtowrite != 0) {
 
-		if (numtowrite > 0xFFFF) {
-			DEBUG(0,("reply_writebraw: Oversize secondary write "
-				"raw requested (%u). Terminating\n",
+		if (numtowrite > BUFFER_SIZE) {
+			DEBUG(0,("reply_writebraw: Oversize secondary write raw requested (%u). Terminating\n",
 				(unsigned int)numtowrite ));
 			exit_server_cleanly("secondary writebraw failed");
 		}
 
 		if (tcount > nwritten+numtowrite) {
-			DEBUG(3,("reply_writebraw: Client overestimated the "
-				"write %d %d %d\n",
+			DEBUG(3,("Client overestimated the write %d %d %d\n",
 				(int)tcount,(int)nwritten,(int)numtowrite));
 		}
 
-		status = read_data(smbd_server_fd(), buf+4, numtowrite);
-
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(0,("reply_writebraw: Oversize secondary write "
-				 "raw read failed (%s). Terminating\n",
-				 nt_errstr(status)));
+		if (read_data( smbd_server_fd(), inbuf+4, numtowrite) != numtowrite ) {
+			DEBUG(0,("reply_writebraw: Oversize secondary write raw read failed (%s). Terminating\n",
+				strerror(errno) ));
 			exit_server_cleanly("secondary writebraw failed");
 		}
 
-		nwritten = write_file(req,fsp,buf+4,startpos+nwritten,numtowrite);
+		nwritten = write_file(fsp,inbuf+4,startpos+nwritten,numtowrite);
 		if (nwritten == -1) {
-			TALLOC_FREE(buf);
-			reply_unixerror(req, ERRHRD, ERRdiskfull);
-			error_to_writebrawerr(req);
 			END_PROFILE(SMBwritebraw);
-			return;
+			return(UNIXERROR(ERRHRD,ERRdiskfull));
 		}
 
 		if (nwritten < (ssize_t)numtowrite) {
-			SCVAL(req->outbuf,smb_rcls,ERRHRD);
-			SSVAL(req->outbuf,smb_err,ERRdiskfull);
+			SCVAL(outbuf,smb_rcls,ERRHRD);
+			SSVAL(outbuf,smb_err,ERRdiskfull);      
 		}
 
-		if (nwritten > 0) {
+		if (nwritten > 0)
 			total_written += nwritten;
-		}
  	}
+ 
+	SSVAL(outbuf,smb_vwv0,total_written);
 
-	TALLOC_FREE(buf);
-	SSVAL(req->outbuf,smb_vwv0,total_written);
-
 	status = sync_file(conn, fsp, write_through);
 	if (!NT_STATUS_IS_OK(status)) {
 		DEBUG(5,("reply_writebraw: sync_file for %s returned %s\n",
 			fsp->fsp_name, nt_errstr(status) ));
-		reply_nterror(req, status);
-		error_to_writebrawerr(req);
 		END_PROFILE(SMBwritebraw);
-		return;
+		return ERROR_NT(status);
 	}
 
-	DEBUG(3,("reply_writebraw: secondart write fnum=%d start=%.0f num=%d "
-		"wrote=%d\n",
-		fsp->fnum, (double)startpos, (int)numtowrite,
-		(int)total_written));
+	DEBUG(3,("writebraw2 fnum=%d start=%.0f num=%d wrote=%d\n",
+		fsp->fnum, (double)startpos, (int)numtowrite,(int)total_written));
 
-	/* We won't return a status if write through is not selected - this
-	 * follows what WfWg does */
+	/* we won't return a status if write through is not selected - this follows what WfWg does */
 	END_PROFILE(SMBwritebraw);
-
 	if (!write_through && total_written==tcount) {
 
 #if RABBIT_PELLET_FIX
 		/*
 		 * Fix for "rabbit pellet" mode, trigger an early TCP ack by
-		 * sending a SMBkeepalive. Thanks to DaveCB at Sun for this.
-		 * JRA.
+		 * sending a SMBkeepalive. Thanks to DaveCB at Sun for this. JRA.
 		 */
-		if (!send_keepalive(smbd_server_fd())) {
-			exit_server_cleanly("reply_writebraw: send of "
-				"keepalive failed");
-		}
+		if (!send_keepalive(smbd_server_fd()))
+			exit_server_cleanly("reply_writebraw: send of keepalive failed");
 #endif
-		TALLOC_FREE(req->outbuf);
+		return(-1);
 	}
-	return;
+
+	return(outsize);
 }
 
 #undef DBGC_CLASS
@@ -3611,47 +2885,30 @@
  Reply to a writeunlock (core+).
 ****************************************************************************/
 
-void reply_writeunlock(struct smb_request *req)
+int reply_writeunlock(connection_struct *conn, char *inbuf,char *outbuf, 
+		      int size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
 	ssize_t nwritten = -1;
 	size_t numtowrite;
 	SMB_OFF_T startpos;
 	char *data;
 	NTSTATUS status = NT_STATUS_OK;
-	files_struct *fsp;
-
+	files_struct *fsp = file_fsp(inbuf,smb_vwv0);
+	int outsize = 0;
 	START_PROFILE(SMBwriteunlock);
-
-	if (req->wct < 5) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBwriteunlock);
-		return;
-	}
 	
-	fsp = file_fsp(SVAL(req->inbuf,smb_vwv0));
-
-	if (!check_fsp(conn, req, fsp, &current_user)) {
-		END_PROFILE(SMBwriteunlock);
-		return;
-	}
-
+	CHECK_FSP(fsp,conn);
 	if (!CHECK_WRITE(fsp)) {
-		reply_doserror(req, ERRDOS,ERRbadaccess);
-		END_PROFILE(SMBwriteunlock);
-		return;
+		return(ERROR_DOS(ERRDOS,ERRbadaccess));
 	}
 
-	numtowrite = SVAL(req->inbuf,smb_vwv1);
-	startpos = IVAL_TO_SMB_OFF_T(req->inbuf,smb_vwv2);
-	data = smb_buf(req->inbuf) + 3;
+	numtowrite = SVAL(inbuf,smb_vwv1);
+	startpos = IVAL_TO_SMB_OFF_T(inbuf,smb_vwv2);
+	data = smb_buf(inbuf) + 3;
   
-	if (numtowrite
-	    && is_locked(fsp, (uint32)req->smbpid, (SMB_BIG_UINT)numtowrite,
-			 (SMB_BIG_UINT)startpos, WRITE_LOCK)) {
-		reply_doserror(req, ERRDOS, ERRlock);
+	if (numtowrite && is_locked(fsp,(uint32)SVAL(inbuf,smb_pid),(SMB_BIG_UINT)numtowrite,(SMB_BIG_UINT)startpos, WRITE_LOCK)) {
 		END_PROFILE(SMBwriteunlock);
-		return;
+		return ERROR_DOS(ERRDOS,ERRlock);
 	}
 
 	/* The special X/Open SMB protocol handling of
@@ -3660,48 +2917,44 @@
 	if(numtowrite == 0) {
 		nwritten = 0;
 	} else {
-		nwritten = write_file(req,fsp,data,startpos,numtowrite);
+		nwritten = write_file(fsp,data,startpos,numtowrite);
 	}
   
 	status = sync_file(conn, fsp, False /* write through */);
 	if (!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(SMBwriteunlock);
 		DEBUG(5,("reply_writeunlock: sync_file for %s returned %s\n",
 			fsp->fsp_name, nt_errstr(status) ));
-		reply_nterror(req, status);
-		END_PROFILE(SMBwriteunlock);
-		return;
+		return ERROR_NT(status);
 	}
 
-	if(((nwritten < numtowrite) && (numtowrite != 0))||(nwritten < 0)) {
-		reply_unixerror(req, ERRHRD, ERRdiskfull);
+	if(((nwritten == 0) && (numtowrite != 0))||(nwritten < 0)) {
 		END_PROFILE(SMBwriteunlock);
-		return;
+		return(UNIXERROR(ERRHRD,ERRdiskfull));
 	}
 
 	if (numtowrite) {
-		status = do_unlock(smbd_messaging_context(),
-				fsp,
-				req->smbpid,
+		status = do_unlock(fsp,
+				(uint32)SVAL(inbuf,smb_pid),
 				(SMB_BIG_UINT)numtowrite, 
 				(SMB_BIG_UINT)startpos,
 				WINDOWS_LOCK);
 
 		if (NT_STATUS_V(status)) {
-			reply_nterror(req, status);
 			END_PROFILE(SMBwriteunlock);
-			return;
+			return ERROR_NT(status);
 		}
 	}
-
-	reply_outbuf(req, 1, 0);
 	
-	SSVAL(req->outbuf,smb_vwv0,nwritten);
+	outsize = set_message(outbuf,1,0,True);
 	
+	SSVAL(outbuf,smb_vwv0,nwritten);
+	
 	DEBUG(3,("writeunlock fnum=%d num=%d wrote=%d\n",
 		 fsp->fnum, (int)numtowrite, (int)nwritten));
 	
 	END_PROFILE(SMBwriteunlock);
-	return;
+	return outsize;
 }
 
 #undef DBGC_CLASS
@@ -3711,53 +2964,36 @@
  Reply to a write.
 ****************************************************************************/
 
-void reply_write(struct smb_request *req)
+int reply_write(connection_struct *conn, char *inbuf,char *outbuf,int size,int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
 	size_t numtowrite;
 	ssize_t nwritten = -1;
 	SMB_OFF_T startpos;
 	char *data;
-	files_struct *fsp;
+	files_struct *fsp = file_fsp(inbuf,smb_vwv0);
+	int outsize = 0;
 	NTSTATUS status;
-
 	START_PROFILE(SMBwrite);
 
-	if (req->wct < 5) {
-		END_PROFILE(SMBwrite);
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
-	}
-
 	/* If it's an IPC, pass off the pipe handler. */
 	if (IS_IPC(conn)) {
-		reply_pipe_write(req);
 		END_PROFILE(SMBwrite);
-		return;
+		return reply_pipe_write(inbuf,outbuf,size,dum_buffsize);
 	}
 
-	fsp = file_fsp(SVAL(req->inbuf,smb_vwv0));
-
-	if (!check_fsp(conn, req, fsp, &current_user)) {
-		END_PROFILE(SMBwrite);
-		return;
-	}
-
+	CHECK_FSP(fsp,conn);
 	if (!CHECK_WRITE(fsp)) {
-		reply_doserror(req, ERRDOS, ERRbadaccess);
 		END_PROFILE(SMBwrite);
-		return;
+		return(ERROR_DOS(ERRDOS,ERRbadaccess));
 	}
 
-	numtowrite = SVAL(req->inbuf,smb_vwv1);
-	startpos = IVAL_TO_SMB_OFF_T(req->inbuf,smb_vwv2);
-	data = smb_buf(req->inbuf) + 3;
+	numtowrite = SVAL(inbuf,smb_vwv1);
+	startpos = IVAL_TO_SMB_OFF_T(inbuf,smb_vwv2);
+	data = smb_buf(inbuf) + 3;
   
-	if (is_locked(fsp, (uint32)req->smbpid, (SMB_BIG_UINT)numtowrite,
-		      (SMB_BIG_UINT)startpos, WRITE_LOCK)) {
-		reply_doserror(req, ERRDOS, ERRlock);
+	if (is_locked(fsp,(uint32)SVAL(inbuf,smb_pid),(SMB_BIG_UINT)numtowrite,(SMB_BIG_UINT)startpos, WRITE_LOCK)) {
 		END_PROFILE(SMBwrite);
-		return;
+		return ERROR_DOS(ERRDOS,ERRlock);
 	}
 
 	/*
@@ -3772,221 +3008,94 @@
 		 */
 		nwritten = vfs_allocate_file_space(fsp, (SMB_OFF_T)startpos);
 		if (nwritten < 0) {
-			reply_nterror(req, NT_STATUS_DISK_FULL);
 			END_PROFILE(SMBwrite);
-			return;
+			return ERROR_NT(NT_STATUS_DISK_FULL);
 		}
 		nwritten = vfs_set_filelen(fsp, (SMB_OFF_T)startpos);
 		if (nwritten < 0) {
-			reply_nterror(req, NT_STATUS_DISK_FULL);
 			END_PROFILE(SMBwrite);
-			return;
+			return ERROR_NT(NT_STATUS_DISK_FULL);
 		}
 	} else
-		nwritten = write_file(req,fsp,data,startpos,numtowrite);
+		nwritten = write_file(fsp,data,startpos,numtowrite);
   
 	status = sync_file(conn, fsp, False);
 	if (!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(SMBwrite);
 		DEBUG(5,("reply_write: sync_file for %s returned %s\n",
 			fsp->fsp_name, nt_errstr(status) ));
-		reply_nterror(req, status);
-		END_PROFILE(SMBwrite);
-		return;
+		return ERROR_NT(status);
 	}
 
 	if(((nwritten == 0) && (numtowrite != 0))||(nwritten < 0)) {
-		reply_unixerror(req, ERRHRD, ERRdiskfull);
 		END_PROFILE(SMBwrite);
-		return;
+		return(UNIXERROR(ERRHRD,ERRdiskfull));
 	}
 
-	reply_outbuf(req, 1, 0);
+	outsize = set_message(outbuf,1,0,True);
   
-	SSVAL(req->outbuf,smb_vwv0,nwritten);
+	SSVAL(outbuf,smb_vwv0,nwritten);
 
 	if (nwritten < (ssize_t)numtowrite) {
-		SCVAL(req->outbuf,smb_rcls,ERRHRD);
-		SSVAL(req->outbuf,smb_err,ERRdiskfull);
+		SCVAL(outbuf,smb_rcls,ERRHRD);
+		SSVAL(outbuf,smb_err,ERRdiskfull);      
 	}
   
 	DEBUG(3,("write fnum=%d num=%d wrote=%d\n", fsp->fnum, (int)numtowrite, (int)nwritten));
 
 	END_PROFILE(SMBwrite);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
- Ensure a buffer is a valid writeX for recvfile purposes.
-****************************************************************************/
-
-#define STANDARD_WRITE_AND_X_HEADER_SIZE (smb_size - 4 + /* basic header */ \
-						(2*14) + /* word count (including bcc) */ \
-						1 /* pad byte */)
-
-bool is_valid_writeX_buffer(const uint8_t *inbuf)
-{
-	size_t numtowrite;
-	connection_struct *conn = NULL;
-	unsigned int doff = 0;
-	size_t len = smb_len_large(inbuf);
-
-	if (is_encrypted_packet(inbuf)) {
-		/* Can't do this on encrypted
-		 * connections. */
-		return false;
-	}
-
-	if (CVAL(inbuf,smb_com) != SMBwriteX) {
-		return false;
-	}
-
-	if (CVAL(inbuf,smb_vwv0) != 0xFF ||
-			CVAL(inbuf,smb_wct) != 14) {
-		DEBUG(10,("is_valid_writeX_buffer: chained or "
-			"invalid word length.\n"));
-		return false;
-	}
-
-	conn = conn_find(SVAL(inbuf, smb_tid));
-	if (conn == NULL) {
-		DEBUG(10,("is_valid_writeX_buffer: bad tid\n"));
-		return false;
-	}
-	if (IS_IPC(conn)) {
-		DEBUG(10,("is_valid_writeX_buffer: IPC$ tid\n"));
-		return false;
-	}
-	doff = SVAL(inbuf,smb_vwv11);
-
-	numtowrite = SVAL(inbuf,smb_vwv10);
-
-	if (len > doff && len - doff > 0xFFFF) {
-		numtowrite |= (((size_t)SVAL(inbuf,smb_vwv9))<<16);
-	}
-
-	if (numtowrite == 0) {
-		DEBUG(10,("is_valid_writeX_buffer: zero write\n"));
-		return false;
-	}
-
-	/* Ensure the sizes match up. */
-	if (doff < STANDARD_WRITE_AND_X_HEADER_SIZE) {
-		/* no pad byte...old smbclient :-( */
-		DEBUG(10,("is_valid_writeX_buffer: small doff %u (min %u)\n",
-			(unsigned int)doff,
-			(unsigned int)STANDARD_WRITE_AND_X_HEADER_SIZE));
-		return false;
-	}
-
-	if (len - doff != numtowrite) {
-		DEBUG(10,("is_valid_writeX_buffer: doff mismatch "
-			"len = %u, doff = %u, numtowrite = %u\n",
-			(unsigned int)len,
-			(unsigned int)doff,
-			(unsigned int)numtowrite ));
-		return false;
-	}
-
-	DEBUG(10,("is_valid_writeX_buffer: true "
-		"len = %u, doff = %u, numtowrite = %u\n",
-		(unsigned int)len,
-		(unsigned int)doff,
-		(unsigned int)numtowrite ));
-
-	return true;
-}
-
-/****************************************************************************
  Reply to a write and X.
 ****************************************************************************/
 
-void reply_write_and_X(struct smb_request *req)
+int reply_write_and_X(connection_struct *conn, char *inbuf,char *outbuf,int length,int bufsize)
 {
-	connection_struct *conn = req->conn;
-	files_struct *fsp;
-	SMB_OFF_T startpos;
-	size_t numtowrite;
-	bool write_through;
-	ssize_t nwritten;
-	unsigned int smb_doff;
-	unsigned int smblen;
+	files_struct *fsp = file_fsp(inbuf,smb_vwv2);
+	SMB_OFF_T startpos = IVAL_TO_SMB_OFF_T(inbuf,smb_vwv3);
+	size_t numtowrite = SVAL(inbuf,smb_vwv10);
+	BOOL write_through = BITSETW(inbuf+smb_vwv7,0);
+	ssize_t nwritten = -1;
+	unsigned int smb_doff = SVAL(inbuf,smb_vwv11);
+	unsigned int smblen = smb_len(inbuf);
 	char *data;
+	BOOL large_writeX = ((CVAL(inbuf,smb_wct) == 14) && (smblen > 0xFFFF));
 	NTSTATUS status;
-
 	START_PROFILE(SMBwriteX);
 
-	if ((req->wct != 12) && (req->wct != 14)) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBwriteX);
-		return;
-	}
-
-	numtowrite = SVAL(req->inbuf,smb_vwv10);
-	smb_doff = SVAL(req->inbuf,smb_vwv11);
-	smblen = smb_len(req->inbuf);
-
-	if (req->unread_bytes > 0xFFFF ||
-			(smblen > smb_doff &&
-				smblen - smb_doff > 0xFFFF)) {
-		numtowrite |= (((size_t)SVAL(req->inbuf,smb_vwv9))<<16);
-	}
-
-	if (req->unread_bytes) {
-		/* Can't do a recvfile write on IPC$ */
-		if (IS_IPC(conn)) {
-			reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-			END_PROFILE(SMBwriteX);
-			return;
-		}
-	       	if (numtowrite != req->unread_bytes) {
-			reply_doserror(req, ERRDOS, ERRbadmem);
-			END_PROFILE(SMBwriteX);
-			return;
-		}
-	} else {
-		if (smb_doff > smblen || smb_doff + numtowrite < numtowrite ||
-				smb_doff + numtowrite > smblen) {
-			reply_doserror(req, ERRDOS, ERRbadmem);
-			END_PROFILE(SMBwriteX);
-			return;
-		}
-	}
-
 	/* If it's an IPC, pass off the pipe handler. */
 	if (IS_IPC(conn)) {
-		if (req->unread_bytes) {
-			reply_doserror(req, ERRDOS, ERRbadmem);
-			END_PROFILE(SMBwriteX);
-			return;
-		}
-		reply_pipe_write_and_X(req);
 		END_PROFILE(SMBwriteX);
-		return;
+		return reply_pipe_write_and_X(inbuf,outbuf,length,bufsize);
 	}
 
-	fsp = file_fsp(SVAL(req->inbuf,smb_vwv2));
-	startpos = IVAL_TO_SMB_OFF_T(req->inbuf,smb_vwv3);
-	write_through = BITSETW(req->inbuf+smb_vwv7,0);
+	CHECK_FSP(fsp,conn);
+	if (!CHECK_WRITE(fsp)) {
+		return(ERROR_DOS(ERRDOS,ERRbadaccess));
+	}
 
-	if (!check_fsp(conn, req, fsp, &current_user)) {
-		END_PROFILE(SMBwriteX);
-		return;
+	set_message(outbuf,6,0,True);
+  
+	/* Deal with possible LARGE_WRITEX */
+	if (large_writeX) {
+		numtowrite |= ((((size_t)SVAL(inbuf,smb_vwv9)) & 1 )<<16);
 	}
 
-	if (!CHECK_WRITE(fsp)) {
-		reply_doserror(req, ERRDOS, ERRbadaccess);
+	if(smb_doff > smblen || (smb_doff + numtowrite > smblen)) {
 		END_PROFILE(SMBwriteX);
-		return;
+		return ERROR_DOS(ERRDOS,ERRbadmem);
 	}
 
-	data = smb_base(req->inbuf) + smb_doff;
+	data = smb_base(inbuf) + smb_doff;
 
-	if(req->wct == 14) {
+	if(CVAL(inbuf,smb_wct) == 14) {
 #ifdef LARGE_SMB_OFF_T
 		/*
 		 * This is a large offset (64 bit) write.
 		 */
-		startpos |= (((SMB_OFF_T)IVAL(req->inbuf,smb_vwv12)) << 32);
+		startpos |= (((SMB_OFF_T)IVAL(inbuf,smb_vwv12)) << 32);
 
 #else /* !LARGE_SMB_OFF_T */
 
@@ -3994,24 +3103,19 @@
 		 * Ensure we haven't been sent a >32 bit offset.
 		 */
 
-		if(IVAL(req->inbuf,smb_vwv12) != 0) {
-			DEBUG(0,("reply_write_and_X - large offset (%x << 32) "
-				 "used and we don't support 64 bit offsets.\n",
-				 (unsigned int)IVAL(req->inbuf,smb_vwv12) ));
-			reply_doserror(req, ERRDOS, ERRbadaccess);
+		if(IVAL(inbuf,smb_vwv12) != 0) {
+			DEBUG(0,("reply_write_and_X - large offset (%x << 32) used and we don't support \
+64 bit offsets.\n", (unsigned int)IVAL(inbuf,smb_vwv12) ));
 			END_PROFILE(SMBwriteX);
-			return;
+			return ERROR_DOS(ERRDOS,ERRbadaccess);
 		}
 
 #endif /* LARGE_SMB_OFF_T */
 	}
 
-	if (is_locked(fsp,(uint32)req->smbpid,
-		      (SMB_BIG_UINT)numtowrite,
-		      (SMB_BIG_UINT)startpos, WRITE_LOCK)) {
-		reply_doserror(req, ERRDOS, ERRlock);
+	if (is_locked(fsp,(uint32)SVAL(inbuf,smb_pid),(SMB_BIG_UINT)numtowrite,(SMB_BIG_UINT)startpos, WRITE_LOCK)) {
 		END_PROFILE(SMBwriteX);
-		return;
+		return ERROR_DOS(ERRDOS,ERRlock);
 	}
 
 	/* X/Open SMB protocol says that, unlike SMBwrite
@@ -4023,29 +3127,27 @@
 		nwritten = 0;
 	} else {
 
-		if ((req->unread_bytes == 0) &&
-		    schedule_aio_write_and_X(conn, req, fsp, data, startpos,
-					     numtowrite)) {
+		if (schedule_aio_write_and_X(conn, inbuf, outbuf, length, bufsize,
+					fsp,data,startpos,numtowrite)) {
 			END_PROFILE(SMBwriteX);
-			return;
+			return -1;
 		}
-		
-		nwritten = write_file(req,fsp,data,startpos,numtowrite);
-	}
 
+		nwritten = write_file(fsp,data,startpos,numtowrite);
+	}
+  
 	if(((nwritten == 0) && (numtowrite != 0))||(nwritten < 0)) {
-		reply_unixerror(req, ERRHRD, ERRdiskfull);
 		END_PROFILE(SMBwriteX);
-		return;
+		return(UNIXERROR(ERRHRD,ERRdiskfull));
 	}
 
-	reply_outbuf(req, 6, 0);
-	SSVAL(req->outbuf,smb_vwv2,nwritten);
-	SSVAL(req->outbuf,smb_vwv4,nwritten>>16);
+	SSVAL(outbuf,smb_vwv2,nwritten);
+	if (large_writeX)
+		SSVAL(outbuf,smb_vwv4,(nwritten>>16)&1);
 
 	if (nwritten < (ssize_t)numtowrite) {
-		SCVAL(req->outbuf,smb_rcls,ERRHRD);
-		SSVAL(req->outbuf,smb_err,ERRdiskfull);
+		SCVAL(outbuf,smb_rcls,ERRHRD);
+		SSVAL(outbuf,smb_err,ERRdiskfull);      
 	}
 
 	DEBUG(3,("writeX fnum=%d num=%d wrote=%d\n",
@@ -4053,49 +3155,36 @@
 
 	status = sync_file(conn, fsp, write_through);
 	if (!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(SMBwriteX);
 		DEBUG(5,("reply_write_and_X: sync_file for %s returned %s\n",
 			fsp->fsp_name, nt_errstr(status) ));
-		reply_nterror(req, status);
-		END_PROFILE(SMBwriteX);
-		return;
+		return ERROR_NT(status);
 	}
 
 	END_PROFILE(SMBwriteX);
-	chain_reply(req);
-	return;
+	return chain_reply(inbuf,outbuf,length,bufsize);
 }
 
 /****************************************************************************
  Reply to a lseek.
 ****************************************************************************/
 
-void reply_lseek(struct smb_request *req)
+int reply_lseek(connection_struct *conn, char *inbuf,char *outbuf, int size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
 	SMB_OFF_T startpos;
 	SMB_OFF_T res= -1;
 	int mode,umode;
-	files_struct *fsp;
-
+	int outsize = 0;
+	files_struct *fsp = file_fsp(inbuf,smb_vwv0);
 	START_PROFILE(SMBlseek);
 
-	if (req->wct < 4) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBlseek);
-		return;
-	}
+	CHECK_FSP(fsp,conn);
 
-	fsp = file_fsp(SVAL(req->inbuf,smb_vwv0));
-
-	if (!check_fsp(conn, req, fsp, &current_user)) {
-		return;
-	}
-
 	flush_write_cache(fsp, SEEK_FLUSH);
 
-	mode = SVAL(req->inbuf,smb_vwv1) & 3;
+	mode = SVAL(inbuf,smb_vwv1) & 3;
 	/* NB. This doesn't use IVAL_TO_SMB_OFF_T as startpos can be signed in this case. */
-	startpos = (SMB_OFF_T)IVALS(req->inbuf,smb_vwv2);
+	startpos = (SMB_OFF_T)IVALS(inbuf,smb_vwv2);
 
 	switch (mode) {
 		case 0:
@@ -4116,85 +3205,69 @@
 	}
 
 	if (umode == SEEK_END) {
-		if((res = SMB_VFS_LSEEK(fsp,startpos,umode)) == -1) {
+		if((res = SMB_VFS_LSEEK(fsp,fsp->fh->fd,startpos,umode)) == -1) {
 			if(errno == EINVAL) {
 				SMB_OFF_T current_pos = startpos;
 				SMB_STRUCT_STAT sbuf;
 
-				if(SMB_VFS_FSTAT(fsp, &sbuf) == -1) {
-					reply_unixerror(req, ERRDOS,
-							ERRnoaccess);
+				if(SMB_VFS_FSTAT(fsp,fsp->fh->fd, &sbuf) == -1) {
 					END_PROFILE(SMBlseek);
-					return;
+					return(UNIXERROR(ERRDOS,ERRnoaccess));
 				}
 
 				current_pos += sbuf.st_size;
 				if(current_pos < 0)
-					res = SMB_VFS_LSEEK(fsp,0,SEEK_SET);
+					res = SMB_VFS_LSEEK(fsp,fsp->fh->fd,0,SEEK_SET);
 			}
 		}
 
 		if(res == -1) {
-			reply_unixerror(req, ERRDOS, ERRnoaccess);
 			END_PROFILE(SMBlseek);
-			return;
+			return(UNIXERROR(ERRDOS,ERRnoaccess));
 		}
 	}
 
 	fsp->fh->pos = res;
-
-	reply_outbuf(req, 2, 0);
-	SIVAL(req->outbuf,smb_vwv0,res);
   
+	outsize = set_message(outbuf,2,0,True);
+	SIVAL(outbuf,smb_vwv0,res);
+  
 	DEBUG(3,("lseek fnum=%d ofs=%.0f newpos = %.0f mode=%d\n",
 		fsp->fnum, (double)startpos, (double)res, mode));
 
 	END_PROFILE(SMBlseek);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
  Reply to a flush.
 ****************************************************************************/
 
-void reply_flush(struct smb_request *req)
+int reply_flush(connection_struct *conn, char *inbuf,char *outbuf, int size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
-	uint16 fnum;
-	files_struct *fsp;
-
+	int outsize = set_message(outbuf,0,0,False);
+	uint16 fnum = SVAL(inbuf,smb_vwv0);
+	files_struct *fsp = file_fsp(inbuf,smb_vwv0);
 	START_PROFILE(SMBflush);
 
-	if (req->wct < 1) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
-	}
-
-	fnum = SVAL(req->inbuf,smb_vwv0);
-	fsp = file_fsp(fnum);
-
-	if ((fnum != 0xFFFF) && !check_fsp(conn, req, fsp, &current_user)) {
-		return;
-	}
+	if (fnum != 0xFFFF)
+		CHECK_FSP(fsp,conn);
 	
 	if (!fsp) {
 		file_sync_all(conn);
 	} else {
 		NTSTATUS status = sync_file(conn, fsp, True);
 		if (!NT_STATUS_IS_OK(status)) {
+			END_PROFILE(SMBflush);
 			DEBUG(5,("reply_flush: sync_file for %s returned %s\n",
 				fsp->fsp_name, nt_errstr(status) ));
-			reply_nterror(req, status);
-			END_PROFILE(SMBflush);
-			return;
+			return ERROR_NT(status);
 		}
 	}
 	
-	reply_outbuf(req, 0, 0);
-
 	DEBUG(3,("flush\n"));
 	END_PROFILE(SMBflush);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
@@ -4202,54 +3275,51 @@
  conn POINTER CAN BE NULL HERE !
 ****************************************************************************/
 
-void reply_exit(struct smb_request *req)
+int reply_exit(connection_struct *conn, 
+	       char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
+	int outsize;
 	START_PROFILE(SMBexit);
 
-	file_close_pid(req->smbpid, req->vuid);
+	file_close_pid(SVAL(inbuf,smb_pid),SVAL(inbuf,smb_uid));
 
-	reply_outbuf(req, 0, 0);
+	outsize = set_message(outbuf,0,0,False);
 
 	DEBUG(3,("exit\n"));
 
 	END_PROFILE(SMBexit);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
  Reply to a close - has to deal with closing a directory opened by NT SMB's.
 ****************************************************************************/
 
-void reply_close(struct smb_request *req)
+int reply_close(connection_struct *conn, char *inbuf,char *outbuf, int size,
+                int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
 	NTSTATUS status = NT_STATUS_OK;
+	int outsize = 0;
 	files_struct *fsp = NULL;
 	START_PROFILE(SMBclose);
 
-	if (req->wct < 3) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBclose);
-		return;
-	}
+	outsize = set_message(outbuf,0,0,False);
 
 	/* If it's an IPC, pass off to the pipe handler. */
 	if (IS_IPC(conn)) {
-		reply_pipe_close(conn, req);
 		END_PROFILE(SMBclose);
-		return;
+		return reply_pipe_close(conn, inbuf,outbuf);
 	}
 
-	fsp = file_fsp(SVAL(req->inbuf,smb_vwv0));
+	fsp = file_fsp(inbuf,smb_vwv0);
 
 	/*
 	 * We can only use CHECK_FSP if we know it's not a directory.
 	 */
 
 	if(!fsp || (fsp->conn != conn) || (fsp->vuid != current_user.vuid)) {
-		reply_doserror(req, ERRDOS, ERRbadfid);
 		END_PROFILE(SMBclose);
-		return;
+		return ERROR_DOS(ERRDOS,ERRbadfid);
 	}
 
 	if(fsp->is_directory) {
@@ -4259,7 +3329,6 @@
 		DEBUG(3,("close directory fnum=%d\n", fsp->fnum));
 		status = close_file(fsp,NORMAL_CLOSE);
 	} else {
-		time_t t;
 		/*
 		 * Close ordinary file.
 		 */
@@ -4272,8 +3341,8 @@
 		 * Take care of any time sent in the close.
 		 */
 
-		t = srv_make_unix_date3(req->inbuf+smb_vwv1);
-		set_close_write_time(fsp, convert_time_t_to_timespec(t));
+		fsp_set_pending_modtime(fsp,
+				convert_time_t_to_timespec(srv_make_unix_date3(inbuf+smb_vwv1)));
 
 		/*
 		 * close_file() returns the unix errno if an error
@@ -4284,70 +3353,51 @@
 		status = close_file(fsp,NORMAL_CLOSE);
 	}  
 
-	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
+	if(!NT_STATUS_IS_OK(status)) {
 		END_PROFILE(SMBclose);
-		return;
+		return ERROR_NT(status);
 	}
 
-	reply_outbuf(req, 0, 0);
 	END_PROFILE(SMBclose);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
  Reply to a writeclose (Core+ protocol).
 ****************************************************************************/
 
-void reply_writeclose(struct smb_request *req)
+int reply_writeclose(connection_struct *conn,
+		     char *inbuf,char *outbuf, int size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
 	size_t numtowrite;
 	ssize_t nwritten = -1;
+	int outsize = 0;
 	NTSTATUS close_status = NT_STATUS_OK;
 	SMB_OFF_T startpos;
 	char *data;
 	struct timespec mtime;
-	files_struct *fsp;
-
+	files_struct *fsp = file_fsp(inbuf,smb_vwv0);
 	START_PROFILE(SMBwriteclose);
 
-	if (req->wct < 6) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBwriteclose);
-		return;
-	}
-
-	fsp = file_fsp(SVAL(req->inbuf,smb_vwv0));
-
-	if (!check_fsp(conn, req, fsp, &current_user)) {
-		END_PROFILE(SMBwriteclose);
-		return;
-	}
+	CHECK_FSP(fsp,conn);
 	if (!CHECK_WRITE(fsp)) {
-		reply_doserror(req, ERRDOS,ERRbadaccess);
-		END_PROFILE(SMBwriteclose);
-		return;
+		return(ERROR_DOS(ERRDOS,ERRbadaccess));
 	}
 
-	numtowrite = SVAL(req->inbuf,smb_vwv1);
-	startpos = IVAL_TO_SMB_OFF_T(req->inbuf,smb_vwv2);
-	mtime = convert_time_t_to_timespec(srv_make_unix_date3(
-						   req->inbuf+smb_vwv4));
-	data = smb_buf(req->inbuf) + 1;
+	numtowrite = SVAL(inbuf,smb_vwv1);
+	startpos = IVAL_TO_SMB_OFF_T(inbuf,smb_vwv2);
+	mtime = convert_time_t_to_timespec(srv_make_unix_date3(inbuf+smb_vwv4));
+	data = smb_buf(inbuf) + 1;
   
-	if (numtowrite
-	    && is_locked(fsp, (uint32)req->smbpid, (SMB_BIG_UINT)numtowrite,
-			 (SMB_BIG_UINT)startpos, WRITE_LOCK)) {
-		reply_doserror(req, ERRDOS,ERRlock);
+	if (numtowrite && is_locked(fsp,(uint32)SVAL(inbuf,smb_pid),(SMB_BIG_UINT)numtowrite,(SMB_BIG_UINT)startpos, WRITE_LOCK)) {
 		END_PROFILE(SMBwriteclose);
-		return;
+		return ERROR_DOS(ERRDOS,ERRlock);
 	}
   
-	nwritten = write_file(req,fsp,data,startpos,numtowrite);
+	nwritten = write_file(fsp,data,startpos,numtowrite);
 
-	set_close_write_time(fsp, mtime);
-
+	set_filetime(conn, fsp->fsp_name, mtime);
+  
 	/*
 	 * More insanity. W2K only closes the file if writelen > 0.
 	 * JRA.
@@ -4364,22 +3414,20 @@
 		 conn->num_files_open));
   
 	if(((nwritten == 0) && (numtowrite != 0))||(nwritten < 0)) {
-		reply_doserror(req, ERRHRD, ERRdiskfull);
 		END_PROFILE(SMBwriteclose);
-		return;
+		return(UNIXERROR(ERRHRD,ERRdiskfull));
 	}
  
 	if(!NT_STATUS_IS_OK(close_status)) {
-		reply_nterror(req, close_status);
 		END_PROFILE(SMBwriteclose);
-		return;
+		return ERROR_NT(close_status);
 	}
-
-	reply_outbuf(req, 1, 0);
+ 
+	outsize = set_message(outbuf,1,0,True);
   
-	SSVAL(req->outbuf,smb_vwv0,nwritten);
+	SSVAL(outbuf,smb_vwv0,nwritten);
 	END_PROFILE(SMBwriteclose);
-	return;
+	return(outsize);
 }
 
 #undef DBGC_CLASS
@@ -4389,40 +3437,29 @@
  Reply to a lock.
 ****************************************************************************/
 
-void reply_lock(struct smb_request *req)
+int reply_lock(connection_struct *conn,
+	       char *inbuf,char *outbuf, int length, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
+	int outsize = set_message(outbuf,0,0,False);
 	SMB_BIG_UINT count,offset;
 	NTSTATUS status;
-	files_struct *fsp;
+	files_struct *fsp = file_fsp(inbuf,smb_vwv0);
 	struct byte_range_lock *br_lck = NULL;
 
 	START_PROFILE(SMBlock);
 
-	if (req->wct < 5) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBlock);
-		return;
-	}
+	CHECK_FSP(fsp,conn);
 
-	fsp = file_fsp(SVAL(req->inbuf,smb_vwv0));
-
-	if (!check_fsp(conn, req, fsp, &current_user)) {
-		END_PROFILE(SMBlock);
-		return;
-	}
-
 	release_level_2_oplocks_on_change(fsp);
 
-	count = (SMB_BIG_UINT)IVAL(req->inbuf,smb_vwv1);
-	offset = (SMB_BIG_UINT)IVAL(req->inbuf,smb_vwv3);
+	count = (SMB_BIG_UINT)IVAL(inbuf,smb_vwv1);
+	offset = (SMB_BIG_UINT)IVAL(inbuf,smb_vwv3);
 
 	DEBUG(3,("lock fd=%d fnum=%d offset=%.0f count=%.0f\n",
 		 fsp->fh->fd, fsp->fnum, (double)offset, (double)count));
 
-	br_lck = do_lock(smbd_messaging_context(),
-			fsp,
-			req->smbpid,
+	br_lck = do_lock(fsp,
+			(uint32)SVAL(inbuf,smb_pid),
 			count,
 			offset,
 			WRITE_LOCK,
@@ -4434,66 +3471,48 @@
 	TALLOC_FREE(br_lck);
 
 	if (NT_STATUS_V(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBlock);
-		return;
+		return ERROR_NT(status);
 	}
 
-	reply_outbuf(req, 0, 0);
-
 	END_PROFILE(SMBlock);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
  Reply to a unlock.
 ****************************************************************************/
 
-void reply_unlock(struct smb_request *req)
+int reply_unlock(connection_struct *conn, char *inbuf,char *outbuf, int size, 
+		 int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
+	int outsize = set_message(outbuf,0,0,False);
 	SMB_BIG_UINT count,offset;
 	NTSTATUS status;
-	files_struct *fsp;
-
+	files_struct *fsp = file_fsp(inbuf,smb_vwv0);
 	START_PROFILE(SMBunlock);
 
-	if (req->wct < 5) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBunlock);
-		return;
-	}
-
-	fsp = file_fsp(SVAL(req->inbuf,smb_vwv0));
-
-	if (!check_fsp(conn, req, fsp, &current_user)) {
-		END_PROFILE(SMBunlock);
-		return;
-	}
+	CHECK_FSP(fsp,conn);
 	
-	count = (SMB_BIG_UINT)IVAL(req->inbuf,smb_vwv1);
-	offset = (SMB_BIG_UINT)IVAL(req->inbuf,smb_vwv3);
+	count = (SMB_BIG_UINT)IVAL(inbuf,smb_vwv1);
+	offset = (SMB_BIG_UINT)IVAL(inbuf,smb_vwv3);
 	
-	status = do_unlock(smbd_messaging_context(),
-			fsp,
-			req->smbpid,
+	status = do_unlock(fsp,
+			(uint32)SVAL(inbuf,smb_pid),
 			count,
 			offset,
 			WINDOWS_LOCK);
 
 	if (NT_STATUS_V(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBunlock);
-		return;
+		return ERROR_NT(status);
 	}
 
 	DEBUG( 3, ( "unlock fd=%d fnum=%d offset=%.0f count=%.0f\n",
 		    fsp->fh->fd, fsp->fnum, (double)offset, (double)count ) );
-
-	reply_outbuf(req, 0, 0);
-
+	
 	END_PROFILE(SMBunlock);
-	return;
+	return(outsize);
 }
 
 #undef DBGC_CLASS
@@ -4504,26 +3523,27 @@
  conn POINTER CAN BE NULL HERE !
 ****************************************************************************/
 
-void reply_tdis(struct smb_request *req)
+int reply_tdis(connection_struct *conn, 
+	       char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
+	int outsize = set_message(outbuf,0,0,False);
+	uint16 vuid;
 	START_PROFILE(SMBtdis);
 
+	vuid = SVAL(inbuf,smb_uid);
+
 	if (!conn) {
 		DEBUG(4,("Invalid connection in tdis\n"));
-		reply_doserror(req, ERRSRV, ERRinvnid);
 		END_PROFILE(SMBtdis);
-		return;
+		return ERROR_DOS(ERRSRV,ERRinvnid);
 	}
 
 	conn->used = False;
 
-	close_cnum(conn,req->vuid);
-	req->conn = NULL;
-
-	reply_outbuf(req, 0, 0);
+	close_cnum(conn,vuid);
+  
 	END_PROFILE(SMBtdis);
-	return;
+	return outsize;
 }
 
 /****************************************************************************
@@ -4531,36 +3551,24 @@
  conn POINTER CAN BE NULL HERE !
 ****************************************************************************/
 
-void reply_echo(struct smb_request *req)
+int reply_echo(connection_struct *conn,
+	       char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
-	int smb_reverb;
+	int smb_reverb = SVAL(inbuf,smb_vwv0);
 	int seq_num;
-	unsigned int data_len = smb_buflen(req->inbuf);
-
+	unsigned int data_len = smb_buflen(inbuf);
+	int outsize = set_message(outbuf,1,data_len,True);
 	START_PROFILE(SMBecho);
 
-	if (req->wct < 1) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBecho);
-		return;
-	}
-
 	if (data_len > BUFFER_SIZE) {
 		DEBUG(0,("reply_echo: data_len too large.\n"));
-		reply_nterror(req, NT_STATUS_INSUFFICIENT_RESOURCES);
 		END_PROFILE(SMBecho);
-		return;
+		return -1;
 	}
 
-	smb_reverb = SVAL(req->inbuf,smb_vwv0);
-
-	reply_outbuf(req, 1, data_len);
-
 	/* copy any incoming data back out */
-	if (data_len > 0) {
-		memcpy(smb_buf(req->outbuf),smb_buf(req->inbuf),data_len);
-	}
+	if (data_len > 0)
+		memcpy(smb_buf(outbuf),smb_buf(inbuf),data_len);
 
 	if (smb_reverb > 100) {
 		DEBUG(0,("large reverb (%d)?? Setting to 100\n",smb_reverb));
@@ -4568,97 +3576,76 @@
 	}
 
 	for (seq_num =1 ; seq_num <= smb_reverb ; seq_num++) {
-		SSVAL(req->outbuf,smb_vwv0,seq_num);
+		SSVAL(outbuf,smb_vwv0,seq_num);
 
-		show_msg((char *)req->outbuf);
-		if (!srv_send_smb(smbd_server_fd(),
-				(char *)req->outbuf,
-				IS_CONN_ENCRYPTED(conn)||req->encrypted))
-			exit_server_cleanly("reply_echo: srv_send_smb failed.");
+		smb_setlen(outbuf,outsize - 4);
+
+		show_msg(outbuf);
+		if (!send_smb(smbd_server_fd(),outbuf))
+			exit_server_cleanly("reply_echo: send_smb failed.");
 	}
 
 	DEBUG(3,("echo %d times\n", smb_reverb));
 
-	TALLOC_FREE(req->outbuf);
-
 	smb_echo_count++;
 
 	END_PROFILE(SMBecho);
-	return;
+	return -1;
 }
 
 /****************************************************************************
  Reply to a printopen.
 ****************************************************************************/
 
-void reply_printopen(struct smb_request *req)
+int reply_printopen(connection_struct *conn, 
+		    char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
+	int outsize = 0;
 	files_struct *fsp;
 	NTSTATUS status;
 	
 	START_PROFILE(SMBsplopen);
-
-	if (req->wct < 2) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBsplopen);
-		return;
-	}
-
+	
 	if (!CAN_PRINT(conn)) {
-		reply_doserror(req, ERRDOS, ERRnoaccess);
 		END_PROFILE(SMBsplopen);
-		return;
+		return ERROR_DOS(ERRDOS,ERRnoaccess);
 	}
 
 	/* Open for exclusive use, write only. */
 	status = print_fsp_open(conn, NULL, &fsp);
 
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBsplopen);
-		return;
+		return(ERROR_NT(status));
 	}
 
-	reply_outbuf(req, 1, 0);
-	SSVAL(req->outbuf,smb_vwv0,fsp->fnum);
+	outsize = set_message(outbuf,1,0,True);
+	SSVAL(outbuf,smb_vwv0,fsp->fnum);
   
 	DEBUG(3,("openprint fd=%d fnum=%d\n",
 		 fsp->fh->fd, fsp->fnum));
 
 	END_PROFILE(SMBsplopen);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
  Reply to a printclose.
 ****************************************************************************/
 
-void reply_printclose(struct smb_request *req)
+int reply_printclose(connection_struct *conn,
+		     char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
-	files_struct *fsp;
+	int outsize = set_message(outbuf,0,0,False);
+	files_struct *fsp = file_fsp(inbuf,smb_vwv0);
 	NTSTATUS status;
-
 	START_PROFILE(SMBsplclose);
 
-	if (req->wct < 1) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBsplclose);
-		return;
-	}
+	CHECK_FSP(fsp,conn);
 
-	fsp = file_fsp(SVAL(req->inbuf,smb_vwv0));
-
-	if (!check_fsp(conn, req, fsp, &current_user)) {
-		END_PROFILE(SMBsplclose);
-                return;
-        }
-
 	if (!CAN_PRINT(conn)) {
-		reply_nterror(req, NT_STATUS_DOS(ERRSRV, ERRerror));
 		END_PROFILE(SMBsplclose);
-		return;
+		return ERROR_NT(NT_STATUS_DOS(ERRSRV, ERRerror));
 	}
   
 	DEBUG(3,("printclose fd=%d fnum=%d\n",
@@ -4667,51 +3654,39 @@
 	status = close_file(fsp,NORMAL_CLOSE);
 
 	if(!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBsplclose);
-		return;
+		return ERROR_NT(status);
 	}
 
 	END_PROFILE(SMBsplclose);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
  Reply to a printqueue.
 ****************************************************************************/
 
-void reply_printqueue(struct smb_request *req)
+int reply_printqueue(connection_struct *conn,
+		     char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
-	int max_count;
-	int start_index;
-
+	int outsize = set_message(outbuf,2,3,True);
+	int max_count = SVAL(inbuf,smb_vwv0);
+	int start_index = SVAL(inbuf,smb_vwv1);
 	START_PROFILE(SMBsplretq);
 
-	if (req->wct < 2) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBsplretq);
-		return;
-	}
-
-	max_count = SVAL(req->inbuf,smb_vwv0);
-	start_index = SVAL(req->inbuf,smb_vwv1);
-
 	/* we used to allow the client to get the cnum wrong, but that
 	   is really quite gross and only worked when there was only
 	   one printer - I think we should now only accept it if they
 	   get it right (tridge) */
 	if (!CAN_PRINT(conn)) {
-		reply_doserror(req, ERRDOS, ERRnoaccess);
 		END_PROFILE(SMBsplretq);
-		return;
+		return ERROR_DOS(ERRDOS,ERRnoaccess);
 	}
 
-	reply_outbuf(req, 2, 3);
-	SSVAL(req->outbuf,smb_vwv0,0);
-	SSVAL(req->outbuf,smb_vwv1,0);
-	SCVAL(smb_buf(req->outbuf),0,1);
-	SSVAL(smb_buf(req->outbuf),1,0);
+	SSVAL(outbuf,smb_vwv0,0);
+	SSVAL(outbuf,smb_vwv1,0);
+	SCVAL(smb_buf(outbuf),0,1);
+	SSVAL(smb_buf(outbuf),1,0);
   
 	DEBUG(3,("printqueue start_index=%d max_count=%d\n",
 		 start_index, max_count));
@@ -4719,6 +3694,7 @@
 	{
 		print_queue_struct *queue = NULL;
 		print_status_struct status;
+		char *p = smb_buf(outbuf) + 3;
 		int count = print_queue_status(SNUM(conn), &queue, &status);
 		int num_to_get = ABS(max_count);
 		int first = (max_count>0?start_index:start_index+max_count+1);
@@ -4731,33 +3707,21 @@
     
 
 		for (i=first;i<first+num_to_get;i++) {
-			char blob[28];
-			char *p = blob;
-
 			srv_put_dos_date2(p,0,queue[i].time);
 			SCVAL(p,4,(queue[i].status==LPQ_PRINTING?2:3));
 			SSVAL(p,5, queue[i].job);
 			SIVAL(p,7,queue[i].size);
 			SCVAL(p,11,0);
-			srvstr_push(blob, req->flags2, p+12,
-				    queue[i].fs_user, 16, STR_ASCII);
-
-			if (message_push_blob(
-				    &req->outbuf,
-				    data_blob_const(
-					    blob, sizeof(blob))) == -1) {
-				reply_nterror(req, NT_STATUS_NO_MEMORY);
-				END_PROFILE(SMBsplretq);
-				return;
-			}
+			srvstr_push(outbuf, p+12, queue[i].fs_user, 16, STR_ASCII);
+			p += 28;
 		}
 
 		if (count > 0) {
-			SSVAL(req->outbuf,smb_vwv0,count);
-			SSVAL(req->outbuf,smb_vwv1,
-			      (max_count>0?first+count:first-1));
-			SCVAL(smb_buf(req->outbuf),0,1);
-			SSVAL(smb_buf(req->outbuf),1,28*count);
+			outsize = set_message(outbuf,2,28*count+3,False); 
+			SSVAL(outbuf,smb_vwv0,count);
+			SSVAL(outbuf,smb_vwv1,(max_count>0?first+count:first-1));
+			SCVAL(smb_buf(outbuf),0,1);
+			SSVAL(smb_buf(outbuf),1,28*count);
 		}
 
 		SAFE_FREE(queue);
@@ -4766,124 +3730,88 @@
 	}
   
 	END_PROFILE(SMBsplretq);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
  Reply to a printwrite.
 ****************************************************************************/
 
-void reply_printwrite(struct smb_request *req)
+int reply_printwrite(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
 	int numtowrite;
+	int outsize = set_message(outbuf,0,0,False);
 	char *data;
-	files_struct *fsp;
+	files_struct *fsp = file_fsp(inbuf,smb_vwv0);
 
 	START_PROFILE(SMBsplwr);
-
-	if (req->wct < 1) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBsplwr);
-		return;
-	}
   
-	fsp = file_fsp(SVAL(req->inbuf,smb_vwv0));
-
-	if (!check_fsp(conn, req, fsp, &current_user)) {
-		END_PROFILE(SMBsplwr);
-                return;
-        }
-
 	if (!CAN_PRINT(conn)) {
-		reply_doserror(req, ERRDOS, ERRnoaccess);
 		END_PROFILE(SMBsplwr);
-		return;
+		return ERROR_DOS(ERRDOS,ERRnoaccess);
 	}
 
+	CHECK_FSP(fsp,conn);
 	if (!CHECK_WRITE(fsp)) {
-		reply_doserror(req, ERRDOS, ERRbadaccess);
-		END_PROFILE(SMBsplwr);
-		return;
+		return(ERROR_DOS(ERRDOS,ERRbadaccess));
 	}
 
-	numtowrite = SVAL(smb_buf(req->inbuf),1);
-
-	if (smb_buflen(req->inbuf) < numtowrite + 3) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
+	numtowrite = SVAL(smb_buf(inbuf),1);
+	data = smb_buf(inbuf) + 3;
+  
+	if (write_file(fsp,data,-1,numtowrite) != numtowrite) {
 		END_PROFILE(SMBsplwr);
-		return;
+		return(UNIXERROR(ERRHRD,ERRdiskfull));
 	}
 
-	data = smb_buf(req->inbuf) + 3;
-
-	if (write_file(req,fsp,data,-1,numtowrite) != numtowrite) {
-		reply_unixerror(req, ERRHRD, ERRdiskfull);
-		END_PROFILE(SMBsplwr);
-		return;
-	}
-
 	DEBUG( 3, ( "printwrite fnum=%d num=%d\n", fsp->fnum, numtowrite ) );
-
+  
 	END_PROFILE(SMBsplwr);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
  Reply to a mkdir.
 ****************************************************************************/
 
-void reply_mkdir(struct smb_request *req)
+int reply_mkdir(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
-	char *directory = NULL;
+	pstring directory;
+	int outsize;
 	NTSTATUS status;
 	SMB_STRUCT_STAT sbuf;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	START_PROFILE(SMBmkdir);
-
-	srvstr_get_path(ctx, (char *)req->inbuf, req->flags2, &directory,
-			smb_buf(req->inbuf) + 1, 0,
-			STR_TERMINATE, &status);
+ 
+	srvstr_get_path(inbuf, directory, smb_buf(inbuf) + 1, sizeof(directory), 0, STR_TERMINATE, &status);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBmkdir);
-		return;
+		return ERROR_NT(status);
 	}
 
-	status = resolve_dfspath(ctx, conn,
-				 req->flags2 & FLAGS2_DFS_PATHNAMES,
-				 directory,
-				 &directory);
+	status = resolve_dfspath(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, directory);
 	if (!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(SMBmkdir);
 		if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
-			reply_botherror(req, NT_STATUS_PATH_NOT_COVERED,
-					ERRSRV, ERRbadpath);
-			END_PROFILE(SMBmkdir);
-			return;
+			return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, ERRbadpath);
 		}
-		reply_nterror(req, status);
-		END_PROFILE(SMBmkdir);
-		return;
+		return ERROR_NT(status);
 	}
 
-	status = unix_convert(ctx, conn, directory, False, &directory, NULL, &sbuf);
+	status = unix_convert(conn, directory, False, NULL, &sbuf);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBmkdir);
-		return;
+		return ERROR_NT(status);
 	}
 
 	status = check_name(conn, directory);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBmkdir);
-		return;
+		return ERROR_NT(status);
 	}
+  
+	status = create_directory(conn, directory);
 
-	status = create_directory(conn, req, directory);
-
 	DEBUG(5, ("create_directory returned %s\n", nt_errstr(status)));
 
 	if (!NT_STATUS_IS_OK(status)) {
@@ -4899,17 +3827,16 @@
 			status = NT_STATUS_DOS(ERRDOS, ERRnoaccess);
 		}
 
-		reply_nterror(req, status);
 		END_PROFILE(SMBmkdir);
-		return;
+		return ERROR_NT(status);
 	}
 
-	reply_outbuf(req, 0, 0);
+	outsize = set_message(outbuf,0,0,False);
 
-	DEBUG( 3, ( "mkdir %s\n", directory ) );
+	DEBUG( 3, ( "mkdir %s ret=%d\n", directory, outsize ) );
 
 	END_PROFILE(SMBmkdir);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
@@ -4917,49 +3844,44 @@
  tree recursively. Return True on ok, False on fail.
 ****************************************************************************/
 
-static bool recursive_rmdir(TALLOC_CTX *ctx,
-			connection_struct *conn,
-			char *directory)
+static BOOL recursive_rmdir(connection_struct *conn, char *directory)
 {
 	const char *dname = NULL;
-	bool ret = True;
+	BOOL ret = True;
 	long offset = 0;
-	struct smb_Dir *dir_hnd = OpenDir(talloc_tos(), conn, directory,
-					  NULL, 0);
+	struct smb_Dir *dir_hnd = OpenDir(conn, directory, NULL, 0);
 
 	if(dir_hnd == NULL)
 		return False;
 
 	while((dname = ReadDirName(dir_hnd, &offset))) {
-		char *fullname = NULL;
+		pstring fullname;
 		SMB_STRUCT_STAT st;
 
-		if (ISDOT(dname) || ISDOTDOT(dname)) {
+		if((strcmp(dname, ".") == 0) || (strcmp(dname, "..")==0))
 			continue;
-		}
 
-		if (!is_visible_file(conn, directory, dname, &st, False)) {
+		if (!is_visible_file(conn, directory, dname, &st, False))
 			continue;
-		}
 
 		/* Construct the full name. */
-		fullname = talloc_asprintf(ctx,
-				"%s/%s",
-				directory,
-				dname);
-		if (!fullname) {
+		if(strlen(directory) + strlen(dname) + 1 >= sizeof(fullname)) {
 			errno = ENOMEM;
 			ret = False;
 			break;
 		}
 
+		pstrcpy(fullname, directory);
+		pstrcat(fullname, "/");
+		pstrcat(fullname, dname);
+
 		if(SMB_VFS_LSTAT(conn,fullname, &st) != 0) {
 			ret = False;
 			break;
 		}
 
 		if(st.st_mode & S_IFDIR) {
-			if(!recursive_rmdir(ctx, conn, fullname)) {
+			if(!recursive_rmdir(conn, fullname)) {
 				ret = False;
 				break;
 			}
@@ -4971,9 +3893,8 @@
 			ret = False;
 			break;
 		}
-		TALLOC_FREE(fullname);
 	}
-	TALLOC_FREE(dir_hnd);
+	CloseDir(dir_hnd);
 	return ret;
 }
 
@@ -4981,9 +3902,7 @@
  The internals of the rmdir code - called elsewhere.
 ****************************************************************************/
 
-NTSTATUS rmdir_internals(TALLOC_CTX *ctx,
-			connection_struct *conn,
-			const char *directory)
+NTSTATUS rmdir_internals(connection_struct *conn, const char *directory)
 {
 	int ret;
 	SMB_STRUCT_STAT st;
@@ -5013,7 +3932,7 @@
 	}
 
 	if(((errno == ENOTEMPTY)||(errno == EEXIST)) && lp_veto_files(SNUM(conn))) {
-		/*
+		/* 
 		 * Check to see if the only thing in this directory are
 		 * vetoed files/directories. If so then delete them and
 		 * retry. If we fail to delete any of them (and we *don't*
@@ -5021,8 +3940,7 @@
 		 */
 		const char *dname;
 		long dirpos = 0;
-		struct smb_Dir *dir_hnd = OpenDir(talloc_tos(), conn,
-						  directory, NULL, 0);
+		struct smb_Dir *dir_hnd = OpenDir(conn, directory, NULL, 0);
 
 		if(dir_hnd == NULL) {
 			errno = ENOTEMPTY;
@@ -5035,7 +3953,7 @@
 			if (!is_visible_file(conn, directory, dname, &st, False))
 				continue;
 			if(!IS_VETO_PATH(conn, dname)) {
-				TALLOC_FREE(dir_hnd);
+				CloseDir(dir_hnd);
 				errno = ENOTEMPTY;
 				goto err;
 			}
@@ -5045,42 +3963,36 @@
 
 		RewindDir(dir_hnd,&dirpos);
 		while ((dname = ReadDirName(dir_hnd,&dirpos))) {
-			char *fullname = NULL;
+			pstring fullname;
 
-			if (ISDOT(dname) || ISDOTDOT(dname)) {
+			if((strcmp(dname, ".") == 0) || (strcmp(dname, "..")==0))
 				continue;
-			}
-			if (!is_visible_file(conn, directory, dname, &st, False)) {
+			if (!is_visible_file(conn, directory, dname, &st, False))
 				continue;
-			}
 
-			fullname = talloc_asprintf(ctx,
-					"%s/%s",
-					directory,
-					dname);
-
-			if(!fullname) {
+			/* Construct the full name. */
+			if(strlen(directory) + strlen(dname) + 1 >= sizeof(fullname)) {
 				errno = ENOMEM;
 				break;
 			}
 
-			if(SMB_VFS_LSTAT(conn,fullname, &st) != 0) {
+			pstrcpy(fullname, directory);
+			pstrcat(fullname, "/");
+			pstrcat(fullname, dname);
+                   
+			if(SMB_VFS_LSTAT(conn,fullname, &st) != 0)
 				break;
-			}
 			if(st.st_mode & S_IFDIR) {
 				if(lp_recursive_veto_delete(SNUM(conn))) {
-					if(!recursive_rmdir(ctx, conn, fullname))
+					if(!recursive_rmdir(conn, fullname))
 						break;
 				}
-				if(SMB_VFS_RMDIR(conn,fullname) != 0) {
+				if(SMB_VFS_RMDIR(conn,fullname) != 0)
 					break;
-				}
-			} else if(SMB_VFS_UNLINK(conn,fullname) != 0) {
+			} else if(SMB_VFS_UNLINK(conn,fullname) != 0)
 				break;
-			}
-			TALLOC_FREE(fullname);
 		}
-		TALLOC_FREE(dir_hnd);
+		CloseDir(dir_hnd);
 		/* Retry the rmdir */
 		ret = SMB_VFS_RMDIR(conn,directory);
 	}
@@ -5104,197 +4016,139 @@
  Reply to a rmdir.
 ****************************************************************************/
 
-void reply_rmdir(struct smb_request *req)
+int reply_rmdir(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
-	char *directory = NULL;
+	pstring directory;
+	int outsize = 0;
 	SMB_STRUCT_STAT sbuf;
 	NTSTATUS status;
-	TALLOC_CTX *ctx = talloc_tos();
-
 	START_PROFILE(SMBrmdir);
 
-	srvstr_get_path(ctx, (char *)req->inbuf, req->flags2, &directory,
-			smb_buf(req->inbuf) + 1, 0,
-			STR_TERMINATE, &status);
+	srvstr_get_path(inbuf, directory, smb_buf(inbuf) + 1, sizeof(directory), 0, STR_TERMINATE, &status);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBrmdir);
-		return;
+		return ERROR_NT(status);
 	}
 
-	status = resolve_dfspath(ctx, conn,
-				 req->flags2 & FLAGS2_DFS_PATHNAMES,
-				 directory,
-				 &directory);
+	status = resolve_dfspath(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, directory);
 	if (!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(SMBrmdir);
 		if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
-			reply_botherror(req, NT_STATUS_PATH_NOT_COVERED,
-					ERRSRV, ERRbadpath);
-			END_PROFILE(SMBrmdir);
-			return;
+			return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, ERRbadpath);
 		}
-		reply_nterror(req, status);
-		END_PROFILE(SMBrmdir);
-		return;
+		return ERROR_NT(status);
 	}
 
-	status = unix_convert(ctx, conn, directory, False, &directory,
-			NULL, &sbuf);
+	status = unix_convert(conn, directory, False, NULL, &sbuf);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBrmdir);
-		return;
+		return ERROR_NT(status);
 	}
-
+  
 	status = check_name(conn, directory);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBrmdir);
-		return;
+		return ERROR_NT(status);
 	}
 
-	dptr_closepath(directory, req->smbpid);
-	status = rmdir_internals(ctx, conn, directory);
+	dptr_closepath(directory,SVAL(inbuf,smb_pid));
+	status = rmdir_internals(conn, directory);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBrmdir);
-		return;
+		return ERROR_NT(status);
 	}
-
-	reply_outbuf(req, 0, 0);
-
+ 
+	outsize = set_message(outbuf,0,0,False);
+  
 	DEBUG( 3, ( "rmdir %s\n", directory ) );
-
+  
 	END_PROFILE(SMBrmdir);
-	return;
+	return(outsize);
 }
 
 /*******************************************************************
  Resolve wildcards in a filename rename.
+ Note that name is in UNIX charset and thus potentially can be more
+ than fstring buffer (255 bytes) especially in default UTF-8 case.
+ Therefore, we use pstring inside and all calls should ensure that
+ name2 is at least pstring-long (they do already)
 ********************************************************************/
 
-static bool resolve_wildcards(TALLOC_CTX *ctx,
-				const char *name1,
-				const char *name2,
-				char **pp_newname)
+static BOOL resolve_wildcards(const char *name1, char *name2)
 {
-	char *name2_copy = NULL;
-	char *root1 = NULL;
-	char *root2 = NULL;
-	char *ext1 = NULL;
-	char *ext2 = NULL;
+	pstring root1,root2;
+	pstring ext1,ext2;
 	char *p,*p2, *pname1, *pname2;
+	int available_space, actual_space;
 	
-	name2_copy = talloc_strdup(ctx, name2);
-	if (!name2_copy) {
-		return False;
-	}
-
 	pname1 = strrchr_m(name1,'/');
-	pname2 = strrchr_m(name2_copy,'/');
+	pname2 = strrchr_m(name2,'/');
 
-	if (!pname1 || !pname2) {
-		return False;
-	}
+	if (!pname1 || !pname2)
+		return(False);
   
-	/* Truncate the copy of name2 at the last '/' */
-	*pname2 = '\0';
-
-	/* Now go past the '/' */
-	pname1++;
-	pname2++;
-
-	root1 = talloc_strdup(ctx, pname1);
-	root2 = talloc_strdup(ctx, pname2);
-
-	if (!root1 || !root2) {
-		return False;
-	}
-
+	pstrcpy(root1,pname1);
+	pstrcpy(root2,pname2);
 	p = strrchr_m(root1,'.');
 	if (p) {
 		*p = 0;
-		ext1 = talloc_strdup(ctx, p+1);
+		pstrcpy(ext1,p+1);
 	} else {
-		ext1 = talloc_strdup(ctx, "");
+		pstrcpy(ext1,"");    
 	}
 	p = strrchr_m(root2,'.');
 	if (p) {
 		*p = 0;
-		ext2 = talloc_strdup(ctx, p+1);
+		pstrcpy(ext2,p+1);
 	} else {
-		ext2 = talloc_strdup(ctx, "");
+		pstrcpy(ext2,"");    
 	}
 
-	if (!ext1 || !ext2) {
-		return False;
-	}
-
 	p = root1;
 	p2 = root2;
 	while (*p2) {
 		if (*p2 == '?') {
-			/* Hmmm. Should this be mb-aware ? */
 			*p2 = *p;
 			p2++;
 		} else if (*p2 == '*') {
-			*p2 = '\0';
-			root2 = talloc_asprintf(ctx, "%s%s",
-						root2,
-						p);
-			if (!root2) {
-				return False;
-			}
+			pstrcpy(p2, p);
 			break;
 		} else {
 			p2++;
 		}
-		if (*p) {
+		if (*p)
 			p++;
-		}
 	}
 
 	p = ext1;
 	p2 = ext2;
 	while (*p2) {
 		if (*p2 == '?') {
-			/* Hmmm. Should this be mb-aware ? */
 			*p2 = *p;
 			p2++;
 		} else if (*p2 == '*') {
-			*p2 = '\0';
-			ext2 = talloc_asprintf(ctx, "%s%s",
-						ext2,
-						p);
-			if (!ext2) {
-				return False;
-			}
+			pstrcpy(p2, p);
 			break;
 		} else {
 			p2++;
 		}
-		if (*p) {
+		if (*p)
 			p++;
-		}
 	}
 
-	if (*ext2) {
-		*pp_newname = talloc_asprintf(ctx, "%s/%s.%s",
-				name2_copy,
-				root2,
-				ext2);
+	available_space = sizeof(pstring) - PTR_DIFF(pname2, name2);
+	
+	if (ext2[0]) {
+		actual_space = snprintf(pname2, available_space - 1, "%s.%s", root2, ext2);
+		if (actual_space >= available_space - 1) {
+			DEBUG(1,("resolve_wildcards: can't fit resolved name into specified buffer (overrun by %d bytes)\n",
+				actual_space - available_space));
+		}
 	} else {
-		*pp_newname = talloc_asprintf(ctx, "%s/%s",
-				name2_copy,
-				root2);
+		pstrcpy_base(pname2, root2, name2);
 	}
 
-	if (!*pp_newname) {
-		return False;
-	}
-
-	return True;
+	return(True);
 }
 
 /****************************************************************************
@@ -5302,37 +4156,34 @@
  asynchronously.
 ****************************************************************************/
 
-static void rename_open_files(connection_struct *conn,
-			      struct share_mode_lock *lck,
-			      const char *newname)
+static void rename_open_files(connection_struct *conn, struct share_mode_lock *lck,
+				SMB_DEV_T dev, SMB_INO_T inode, const char *newname)
 {
 	files_struct *fsp;
-	bool did_rename = False;
+	BOOL did_rename = False;
 
-	for(fsp = file_find_di_first(lck->id); fsp;
-	    fsp = file_find_di_next(fsp)) {
+	for(fsp = file_find_di_first(dev, inode); fsp; fsp = file_find_di_next(fsp)) {
 		/* fsp_name is a relative path under the fsp. To change this for other
 		   sharepaths we need to manipulate relative paths. */
 		/* TODO - create the absolute path and manipulate the newname
 		   relative to the sharepath. */
-		if (!strequal(fsp->conn->connectpath, conn->connectpath)) {
+		if (fsp->conn != conn) {
 			continue;
 		}
-		DEBUG(10,("rename_open_files: renaming file fnum %d (file_id %s) from %s -> %s\n",
-			  fsp->fnum, file_id_string_tos(&fsp->file_id),
+		DEBUG(10,("rename_open_files: renaming file fnum %d (dev = %x, inode = %.0f) from %s -> %s\n",
+			fsp->fnum, (unsigned int)fsp->dev, (double)fsp->inode,
 			fsp->fsp_name, newname ));
 		string_set(&fsp->fsp_name, newname);
 		did_rename = True;
 	}
 
 	if (!did_rename) {
-		DEBUG(10,("rename_open_files: no open files on file_id %s for %s\n",
-			  file_id_string_tos(&lck->id), newname ));
+		DEBUG(10,("rename_open_files: no open files on dev %x, inode %.0f for %s\n",
+			(unsigned int)dev, (double)inode, newname ));
 	}
 
 	/* Send messages to all smbd's (not ourself) that the name has changed. */
-	rename_share_filename(smbd_messaging_context(), lck, conn->connectpath,
-			      newname);
+	rename_share_filename(lck, conn->connectpath, newname);
 }
 
 /****************************************************************************
@@ -5346,7 +4197,7 @@
  report from <AndyLiebman at aol.com>.
 ****************************************************************************/
 
-static bool rename_path_prefix_equal(const char *src, const char *dest)
+static BOOL rename_path_prefix_equal(const char *src, const char *dest)
 {
 	const char *psrc = src;
 	const char *pdst = dest;
@@ -5364,80 +4215,40 @@
 	return ((memcmp(psrc, pdst, slen) == 0) && pdst[slen] == '/');
 }
 
-/*
- * Do the notify calls from a rename
- */
-
-static void notify_rename(connection_struct *conn, bool is_dir,
-			  const char *oldpath, const char *newpath)
-{
-	char *olddir, *newdir;
-	const char *oldname, *newname;
-	uint32 mask;
-
-	mask = is_dir ? FILE_NOTIFY_CHANGE_DIR_NAME
-		: FILE_NOTIFY_CHANGE_FILE_NAME;
-
-	if (!parent_dirname_talloc(NULL, oldpath, &olddir, &oldname)
-	    || !parent_dirname_talloc(NULL, newpath, &newdir, &newname)) {
-		TALLOC_FREE(olddir);
-		return;
-	}
-
-	if (strcmp(olddir, newdir) == 0) {
-		notify_fname(conn, NOTIFY_ACTION_OLD_NAME, mask, oldpath);
-		notify_fname(conn, NOTIFY_ACTION_NEW_NAME, mask, newpath);
-	}
-	else {
-		notify_fname(conn, NOTIFY_ACTION_REMOVED, mask, oldpath);
-		notify_fname(conn, NOTIFY_ACTION_ADDED, mask, newpath);
-	}
-	TALLOC_FREE(olddir);
-	TALLOC_FREE(newdir);
-
-	/* this is a strange one. w2k3 gives an additional event for
-	   CHANGE_ATTRIBUTES and CHANGE_CREATION on the new file when renaming
-	   files, but not directories */
-	if (!is_dir) {
-		notify_fname(conn, NOTIFY_ACTION_MODIFIED,
-			     FILE_NOTIFY_CHANGE_ATTRIBUTES
-			     |FILE_NOTIFY_CHANGE_CREATION,
-			     newpath);
-	}
-}
-
 /****************************************************************************
  Rename an open file - given an fsp.
 ****************************************************************************/
 
-NTSTATUS rename_internals_fsp(connection_struct *conn,
-			files_struct *fsp,
-			char *newname,
-			const char *newname_last_component,
-			uint32 attrs,
-			bool replace_if_exists)
+NTSTATUS rename_internals_fsp(connection_struct *conn, files_struct *fsp, pstring newname, uint32 attrs, BOOL replace_if_exists)
 {
-	TALLOC_CTX *ctx = talloc_tos();
-	SMB_STRUCT_STAT sbuf, sbuf1;
+	SMB_STRUCT_STAT sbuf;
+	pstring newname_last_component;
 	NTSTATUS status = NT_STATUS_OK;
+	BOOL dest_exists;
 	struct share_mode_lock *lck = NULL;
-	bool dst_exists;
 
 	ZERO_STRUCT(sbuf);
 
+	status = unix_convert(conn, newname, False, newname_last_component, &sbuf);
+
+	/* If an error we expect this to be NT_STATUS_OBJECT_PATH_NOT_FOUND */
+
+	if (!NT_STATUS_IS_OK(status) && !NT_STATUS_EQUAL(NT_STATUS_OBJECT_PATH_NOT_FOUND, status)) {
+		return status;
+	}
+
 	status = check_name(conn, newname);
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
 	}
-
+  
 	/* Ensure newname contains a '/' */
 	if(strrchr_m(newname,'/') == 0) {
-		newname = talloc_asprintf(ctx,
-					"./%s",
-					newname);
-		if (!newname) {
-			return NT_STATUS_NO_MEMORY;
-		}
+		pstring tmpstr;
+		
+		pstrcpy(tmpstr, "./");
+		pstrcat(tmpstr, newname);
+		pstrcpy(newname, tmpstr);
 	}
 
 	/*
@@ -5451,7 +4262,7 @@
 	if((conn->case_sensitive == False) && (conn->case_preserve == True) &&
 			strequal(newname, fsp->fsp_name)) {
 		char *p;
-		char *newname_modified_last_component = NULL;
+		pstring newname_modified_last_component;
 
 		/*
 		 * Get the last component of the modified name.
@@ -5459,23 +4270,15 @@
 		 * character above.
 		 */
 		p = strrchr_m(newname,'/');
-		newname_modified_last_component = talloc_strdup(ctx,
-						p+1);
-		if (!newname_modified_last_component) {
-			return NT_STATUS_NO_MEMORY;
-		}
-
-		if(strcsequal(newname_modified_last_component,
+		pstrcpy(newname_modified_last_component,p+1);
+			
+		if(strcsequal(newname_modified_last_component, 
 			      newname_last_component) == False) {
 			/*
 			 * Replace the modified last component with
 			 * the original.
 			 */
-			*p = '\0'; /* Truncate at the '/' */
-			newname = talloc_asprintf(ctx,
-					"%s/%s",
-					newname,
-					newname_last_component);
+			pstrcpy(p+1, newname_last_component);
 		}
 	}
 
@@ -5490,29 +4293,17 @@
 		return NT_STATUS_OK;
 	}
 
-	/*
-	 * Have vfs_object_exist also fill sbuf1
-	 */
-	dst_exists = vfs_object_exist(conn, newname, &sbuf1);
+	dest_exists = vfs_object_exist(conn,newname,NULL);
 
-	if(!replace_if_exists && dst_exists) {
+	if(!replace_if_exists && dest_exists) {
 		DEBUG(3,("rename_internals_fsp: dest exists doing rename %s -> %s\n",
 			fsp->fsp_name,newname));
 		return NT_STATUS_OBJECT_NAME_COLLISION;
 	}
 
-	if (dst_exists) {
-		struct file_id fileid = vfs_file_id_from_sbuf(conn, &sbuf1);
-		files_struct *dst_fsp = file_find_di_first(fileid);
-		if (dst_fsp) {
-			DEBUG(3, ("rename_internals_fsp: Target file open\n"));
-			return NT_STATUS_ACCESS_DENIED;
-		}
-	}
-
 	/* Ensure we have a valid stat struct for the source. */
 	if (fsp->fh->fd != -1) {
-		if (SMB_VFS_FSTAT(fsp, &sbuf) == -1) {
+		if (SMB_VFS_FSTAT(fsp,fsp->fh->fd,&sbuf) == -1) {
 			return map_nt_error_from_unix(errno);
 		}
 	} else {
@@ -5521,7 +4312,7 @@
 		}
 	}
 
-	status = can_rename(conn, fsp, attrs, &sbuf);
+	status = can_rename(conn,fsp->fsp_name,attrs,&sbuf,True);
 
 	if (!NT_STATUS_IS_OK(status)) {
 		DEBUG(3,("rename_internals_fsp: Error %s rename %s -> %s\n",
@@ -5535,26 +4326,16 @@
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	lck = get_share_mode_lock(talloc_tos(), fsp->file_id, NULL, NULL,
-				  NULL);
+	lck = get_share_mode_lock(NULL, fsp->dev, fsp->inode, NULL, NULL);
 
-	/*
-	 * We have the file open ourselves, so not being able to get the
-	 * corresponding share mode lock is a fatal error.
-	 */
-
-	SMB_ASSERT(lck != NULL);
-
 	if(SMB_VFS_RENAME(conn,fsp->fsp_name, newname) == 0) {
 		uint32 create_options = fsp->fh->private_options;
 
 		DEBUG(3,("rename_internals_fsp: succeeded doing rename on %s -> %s\n",
 			fsp->fsp_name,newname));
 
-		rename_open_files(conn, lck, newname);
+		rename_open_files(conn, lck, fsp->dev, fsp->inode, newname);
 
-		notify_rename(conn, fsp->is_directory, fsp->fsp_name, newname);
-
 		/*
 		 * A rename acts as a new file create w.r.t. allowing an initial delete
 		 * on close, probably because in Windows there is a new handle to the
@@ -5576,7 +4357,7 @@
 			}
 		}
 		TALLOC_FREE(lck);
-		return NT_STATUS_OK;
+		return NT_STATUS_OK;	
 	}
 
 	TALLOC_FREE(lck);
@@ -5586,62 +4367,101 @@
 	} else {
 		status = map_nt_error_from_unix(errno);
 	}
-
+		
 	DEBUG(3,("rename_internals_fsp: Error %s rename %s -> %s\n",
 		nt_errstr(status), fsp->fsp_name,newname));
 
 	return status;
 }
 
+/*
+ * Do the notify calls from a rename
+ */
+
+static void notify_rename(connection_struct *conn, BOOL is_dir,
+			  const char *oldpath, const char *newpath)
+{
+	char *olddir, *newdir;
+	const char *oldname, *newname;
+	uint32 mask;
+
+	mask = is_dir ? FILE_NOTIFY_CHANGE_DIR_NAME
+		: FILE_NOTIFY_CHANGE_FILE_NAME;
+
+	if (!parent_dirname_talloc(NULL, oldpath, &olddir, &oldname)
+	    || !parent_dirname_talloc(NULL, newpath, &newdir, &newname)) {
+		TALLOC_FREE(olddir);
+		return;
+	}
+
+	if (strcmp(olddir, newdir) == 0) {
+		notify_fname(conn, NOTIFY_ACTION_OLD_NAME, mask, oldpath);
+		notify_fname(conn, NOTIFY_ACTION_NEW_NAME, mask, newpath);
+	}
+	else {
+		notify_fname(conn, NOTIFY_ACTION_REMOVED, mask, oldpath);
+		notify_fname(conn, NOTIFY_ACTION_ADDED, mask, newpath);
+	}
+	TALLOC_FREE(olddir);
+	TALLOC_FREE(newdir);
+
+	/* this is a strange one. w2k3 gives an additional event for
+	   CHANGE_ATTRIBUTES and CHANGE_CREATION on the new file when renaming
+	   files, but not directories */
+	if (!is_dir) {
+		notify_fname(conn, NOTIFY_ACTION_MODIFIED,
+			     FILE_NOTIFY_CHANGE_ATTRIBUTES
+			     |FILE_NOTIFY_CHANGE_CREATION,
+			     newpath);
+	}
+}
+
 /****************************************************************************
  The guts of the rename command, split out so it may be called by the NT SMB
- code.
+ code. 
 ****************************************************************************/
 
-NTSTATUS rename_internals(TALLOC_CTX *ctx,
-			connection_struct *conn,
-			struct smb_request *req,
-			const char *name_in,
-			const char *newname_in,
-			uint32 attrs,
-			bool replace_if_exists,
-			bool src_has_wild,
-			bool dest_has_wild,
-			uint32_t access_mask)
+NTSTATUS rename_internals(connection_struct *conn,
+				pstring name,
+				pstring newname,
+				uint32 attrs,
+				BOOL replace_if_exists,
+				BOOL src_has_wild,
+				BOOL dest_has_wild)
 {
-	char *directory = NULL;
-	char *mask = NULL;
-	char *last_component_src = NULL;
-	char *last_component_dest = NULL;
-	char *name = NULL;
-	char *newname = NULL;
+	pstring directory;
+	pstring mask;
+	pstring last_component_src;
+	pstring last_component_dest;
 	char *p;
 	int count=0;
 	NTSTATUS status = NT_STATUS_OK;
 	SMB_STRUCT_STAT sbuf1, sbuf2;
+	struct share_mode_lock *lck = NULL;
 	struct smb_Dir *dir_hnd = NULL;
 	const char *dname;
 	long offset = 0;
+	pstring destname;
 
+	*directory = *mask = 0;
+
 	ZERO_STRUCT(sbuf1);
 	ZERO_STRUCT(sbuf2);
 
-	status = unix_convert(ctx, conn, name_in, src_has_wild, &name,
-			&last_component_src, &sbuf1);
+	status = unix_convert(conn, name, src_has_wild, last_component_src, &sbuf1);
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
 	}
 
-	status = unix_convert(ctx, conn, newname_in, dest_has_wild, &newname,
-			&last_component_dest, &sbuf2);
+	status = unix_convert(conn, newname, dest_has_wild, last_component_dest, &sbuf2);
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
 	}
 
 	/*
 	 * Split the old name into directory and last component
-	 * strings. Note that unix_convert may have stripped off a
-	 * leading ./ from both name and newname if the rename is
+	 * strings. Note that unix_convert may have stripped off a 
+	 * leading ./ from both name and newname if the rename is 
 	 * at the root of the share. We need to make sure either both
 	 * name and newname contain a / character or neither of them do
 	 * as this is checked in resolve_wildcards().
@@ -5649,18 +4469,12 @@
 
 	p = strrchr_m(name,'/');
 	if (!p) {
-		directory = talloc_strdup(ctx, ".");
-		if (!directory) {
-			return NT_STATUS_NO_MEMORY;
-		}
-		mask = name;
+		pstrcpy(directory,".");
+		pstrcpy(mask,name);
 	} else {
 		*p = 0;
-		directory = talloc_strdup(ctx, name);
-		if (!directory) {
-			return NT_STATUS_NO_MEMORY;
-		}
-		mask = p+1;
+		pstrcpy(directory,name);
+		pstrcpy(mask,p+1);
 		*p = '/'; /* Replace needed for exceptional test below. */
 	}
 
@@ -5674,94 +4488,179 @@
 	 */
 
 	if (!VALID_STAT(sbuf1) && mangle_is_mangled(mask, conn->params)) {
-		char *new_mask = NULL;
-		mangle_lookup_name_from_8_3(ctx,
-					mask,
-					&new_mask,
-					conn->params );
-		if (new_mask) {
-			mask = new_mask;
-		}
+		mangle_check_cache( mask, sizeof(pstring)-1, conn->params );
 	}
 
 	if (!src_has_wild) {
-		files_struct *fsp;
-
 		/*
 		 * No wildcards - just process the one file.
 		 */
-		bool is_short_name = mangle_is_8_3(name, True, conn->params);
+		BOOL is_short_name = mangle_is_8_3(name, True, conn->params);
 
 		/* Add a terminating '/' to the directory name. */
-		directory = talloc_asprintf_append(directory,
-				"/%s",
-				mask);
-		if (!directory) {
-			return NT_STATUS_NO_MEMORY;
-		}
-
+		pstrcat(directory,"/");
+		pstrcat(directory,mask);
+		
 		/* Ensure newname contains a '/' also */
 		if(strrchr_m(newname,'/') == 0) {
-			newname = talloc_asprintf(ctx,
-						"./%s",
-						newname);
-			if (!newname) {
-				return NT_STATUS_NO_MEMORY;
-			}
+			pstring tmpstr;
+			
+			pstrcpy(tmpstr, "./");
+			pstrcat(tmpstr, newname);
+			pstrcpy(newname, tmpstr);
 		}
-
+		
 		DEBUG(3, ("rename_internals: case_sensitive = %d, "
 			  "case_preserve = %d, short case preserve = %d, "
 			  "directory = %s, newname = %s, "
-			  "last_component_dest = %s, is_8_3 = %d\n",
+			  "last_component_dest = %s, is_8_3 = %d\n", 
 			  conn->case_sensitive, conn->case_preserve,
-			  conn->short_case_preserve, directory,
+			  conn->short_case_preserve, directory, 
 			  newname, last_component_dest, is_short_name));
 
+		/* Ensure the source name is valid for us to access. */
+		status = check_name(conn, directory);
+		if (!NT_STATUS_IS_OK(status)) {
+			return status;
+		}
+
 		/* The dest name still may have wildcards. */
 		if (dest_has_wild) {
-			char *mod_newname = NULL;
-			if (!resolve_wildcards(ctx,
-					directory,newname,&mod_newname)) {
-				DEBUG(6, ("rename_internals: resolve_wildcards "
-					"%s %s failed\n",
-					directory,
-					newname));
+			if (!resolve_wildcards(directory,newname)) {
+				DEBUG(6, ("rename_internals: resolve_wildcards %s %s failed\n", 
+					  directory,newname));
 				return NT_STATUS_NO_MEMORY;
 			}
-			newname = mod_newname;
 		}
+				
+		/*
+		 * Check for special case with case preserving and not
+		 * case sensitive, if directory and newname are identical,
+		 * and the old last component differs from the original
+		 * last component only by case, then we should allow
+		 * the rename (user is trying to change the case of the
+		 * filename).
+		 */
+		if((conn->case_sensitive == False) && 
+		   (((conn->case_preserve == True) && 
+		     (is_short_name == False)) || 
+		    ((conn->short_case_preserve == True) && 
+		     (is_short_name == True))) &&
+		   strcsequal(directory, newname)) {
+			pstring modified_last_component;
 
-		ZERO_STRUCT(sbuf1);
-		SMB_VFS_STAT(conn, directory, &sbuf1);
+			/*
+			 * Get the last component of the modified name.
+			 * Note that we guarantee that newname contains a '/'
+			 * character above.
+			 */
+			p = strrchr_m(newname,'/');
+			pstrcpy(modified_last_component,p+1);
+			
+			if(strcsequal(modified_last_component, 
+				      last_component_dest) == False) {
+				/*
+				 * Replace the modified last component with
+				 * the original.
+				 */
+				pstrcpy(p+1, last_component_dest);
+			}
+		}
+	
+		/* Ensure the dest name is valid for us to access. */
+		status = check_name(conn, newname);
+		if (!NT_STATUS_IS_OK(status)) {
+			return status;
+		}
 
-		status = S_ISDIR(sbuf1.st_mode) ?
-			open_directory(conn, req, directory, &sbuf1,
-				       access_mask,
-				       FILE_SHARE_READ|FILE_SHARE_WRITE,
-				       FILE_OPEN, 0, 0, NULL,
-				       &fsp)
-			: open_file_ntcreate(conn, req, directory, &sbuf1,
-					     access_mask,
-					     FILE_SHARE_READ|FILE_SHARE_WRITE,
-					     FILE_OPEN, 0, 0, 0, NULL,
-					     &fsp);
+		/*
+		 * The source object must exist.
+		 */
 
+		if (!vfs_object_exist(conn, directory, &sbuf1)) {
+			DEBUG(3, ("rename_internals: source doesn't exist "
+				  "doing rename %s -> %s\n",
+				directory,newname));
+
+			if (errno == ENOTDIR || errno == EISDIR
+			    || errno == ENOENT) {
+				/*
+				 * Must return different errors depending on
+				 * whether the parent directory existed or
+				 * not.
+				 */
+
+				p = strrchr_m(directory, '/');
+				if (!p)
+					return NT_STATUS_OBJECT_NAME_NOT_FOUND;
+				*p = '\0';
+				if (vfs_object_exist(conn, directory, NULL))
+					return NT_STATUS_OBJECT_NAME_NOT_FOUND;
+				return NT_STATUS_OBJECT_PATH_NOT_FOUND;
+			}
+			status = map_nt_error_from_unix(errno);
+			DEBUG(3, ("rename_internals: Error %s rename %s -> "
+				  "%s\n", nt_errstr(status), directory,
+				  newname));
+
+			return status;
+		}
+
+		status = can_rename(conn,directory,attrs,&sbuf1,False);
+
 		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(3, ("Could not open rename source %s: %s\n",
-				  directory, nt_errstr(status)));
+			DEBUG(3,("rename_internals: Error %s rename %s -> "
+				 "%s\n", nt_errstr(status), directory,
+				 newname));
 			return status;
 		}
 
-		status = rename_internals_fsp(conn, fsp, newname,
-					      last_component_dest,
-					      attrs, replace_if_exists);
+		/*
+		 * If the src and dest names are identical - including case,
+		 * don't do the rename, just return success.
+		 */
 
-		close_file(fsp, NORMAL_CLOSE);
+		if (strcsequal(directory, newname)) {
+			DEBUG(3, ("rename_internals: identical names in "
+				  "rename %s - returning success\n",
+				  directory));
+			return NT_STATUS_OK;
+		}
 
-		DEBUG(3, ("rename_internals: Error %s rename %s -> %s\n",
-			  nt_errstr(status), directory,newname));
+		if(!replace_if_exists && vfs_object_exist(conn,newname,NULL)) {
+			DEBUG(3,("rename_internals: dest exists doing "
+				 "rename %s -> %s\n", directory, newname));
+			return NT_STATUS_OBJECT_NAME_COLLISION;
+		}
 
+		if (rename_path_prefix_equal(directory, newname)) {
+			return NT_STATUS_SHARING_VIOLATION;
+		}
+
+		lck = get_share_mode_lock(NULL, sbuf1.st_dev, sbuf1.st_ino,
+					  NULL, NULL);
+
+		if(SMB_VFS_RENAME(conn,directory, newname) == 0) {
+			DEBUG(3,("rename_internals: succeeded doing rename "
+				 "on %s -> %s\n", directory, newname));
+			rename_open_files(conn, lck, sbuf1.st_dev,
+					  sbuf1.st_ino, newname);
+			TALLOC_FREE(lck);
+			notify_rename(conn, S_ISDIR(sbuf1.st_mode),
+				      directory, newname);
+			return NT_STATUS_OK;	
+		}
+
+		TALLOC_FREE(lck);
+		if (errno == ENOTDIR || errno == EISDIR) {
+			status = NT_STATUS_OBJECT_NAME_COLLISION;
+		} else {
+			status = map_nt_error_from_unix(errno);
+		}
+		
+		DEBUG(3,("rename_internals: Error %s rename %s -> %s\n",
+			nt_errstr(status), directory,newname));
+
 		return status;
 	}
 
@@ -5769,38 +4668,39 @@
 	 * Wildcards - process each file that matches.
 	 */
 	if (strequal(mask,"????????.???")) {
-		mask[0] = '*';
-		mask[1] = '\0';
+		pstrcpy(mask,"*");
 	}
-
+			
 	status = check_name(conn, directory);
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
 	}
-
-	dir_hnd = OpenDir(talloc_tos(), conn, directory, mask, attrs);
+	
+	dir_hnd = OpenDir(conn, directory, mask, attrs);
 	if (dir_hnd == NULL) {
 		return map_nt_error_from_unix(errno);
 	}
-
+		
 	status = NT_STATUS_NO_SUCH_FILE;
 	/*
 	 * Was status = NT_STATUS_OBJECT_NAME_NOT_FOUND;
 	 * - gentest fix. JRA
 	 */
-
+			
 	while ((dname = ReadDirName(dir_hnd, &offset))) {
-		files_struct *fsp = NULL;
-		char *fname = NULL;
-		char *destname = NULL;
-		bool sysdir_entry = False;
+		pstring fname;
+		BOOL sysdir_entry = False;
 
+		pstrcpy(fname,dname);
+				
 		/* Quick check for "." and ".." */
-		if (ISDOT(dname) || ISDOTDOT(dname)) {
-			if (attrs & aDIR) {
-				sysdir_entry = True;
-			} else {
-				continue;
+		if (fname[0] == '.') {
+			if (!fname[1] || (fname[1] == '.' && !fname[2])) {
+				if (attrs & aDIR) {
+					sysdir_entry = True;
+				} else {
+					continue;
+				}
 			}
 		}
 
@@ -5808,82 +4708,87 @@
 			continue;
 		}
 
-		if(!mask_match(dname, mask, conn->case_sensitive)) {
+		if(!mask_match(fname, mask, conn->case_sensitive)) {
 			continue;
 		}
-
+				
 		if (sysdir_entry) {
 			status = NT_STATUS_OBJECT_NAME_INVALID;
 			break;
 		}
 
-		fname = talloc_asprintf(ctx,
-				"%s/%s",
-				directory,
-				dname);
-		if (!fname) {
-			return NT_STATUS_NO_MEMORY;
+		status = NT_STATUS_ACCESS_DENIED;
+		slprintf(fname, sizeof(fname)-1, "%s/%s", directory, dname);
+
+		/* Ensure the source name is valid for us to access. */
+		status = check_name(conn, fname);
+		if (!NT_STATUS_IS_OK(status)) {
+			return status;
 		}
 
-		if (!resolve_wildcards(ctx,
-				fname,newname,&destname)) {
-			DEBUG(6, ("resolve_wildcards %s %s failed\n",
+		if (!vfs_object_exist(conn, fname, &sbuf1)) {
+			status = NT_STATUS_OBJECT_NAME_NOT_FOUND;
+			DEBUG(6, ("rename %s failed. Error %s\n",
+				  fname, nt_errstr(status)));
+			continue;
+		}
+		status = can_rename(conn,fname,attrs,&sbuf1,False);
+		if (!NT_STATUS_IS_OK(status)) {
+			DEBUG(6, ("rename %s refused\n", fname));
+			continue;
+		}
+		pstrcpy(destname,newname);
+			
+		if (!resolve_wildcards(fname,destname)) {
+			DEBUG(6, ("resolve_wildcards %s %s failed\n", 
 				  fname, destname));
-			TALLOC_FREE(fname);
 			continue;
 		}
-		if (!destname) {
-			return NT_STATUS_NO_MEMORY;
+				
+		/* Ensure the dest name is valid for us to access. */
+		status = check_name(conn, destname);
+		if (!NT_STATUS_IS_OK(status)) {
+			return status;
 		}
 
-		ZERO_STRUCT(sbuf1);
-		SMB_VFS_STAT(conn, fname, &sbuf1);
-
-		status = S_ISDIR(sbuf1.st_mode) ?
-			open_directory(conn, req, fname, &sbuf1,
-				       access_mask,
-				       FILE_SHARE_READ|FILE_SHARE_WRITE,
-				       FILE_OPEN, 0, 0, NULL,
-				       &fsp)
-			: open_file_ntcreate(conn, req, fname, &sbuf1,
-					     access_mask,
-					     FILE_SHARE_READ|FILE_SHARE_WRITE,
-					     FILE_OPEN, 0, 0, 0, NULL,
-					     &fsp);
-
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(3,("rename_internals: open_file_ntcreate "
-				 "returned %s rename %s -> %s\n",
-				 nt_errstr(status), directory, newname));
-			break;
+		if (strcsequal(fname,destname)) {
+			DEBUG(3,("rename_internals: identical names "
+				 "in wildcard rename %s - success\n",
+				 fname));
+			count++;
+			status = NT_STATUS_OK;
+			continue;
 		}
 
-		status = rename_internals_fsp(conn, fsp, destname, dname,
-					      attrs, replace_if_exists);
-
-		close_file(fsp, NORMAL_CLOSE);
-
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(3, ("rename_internals_fsp returned %s for "
-				  "rename %s -> %s\n", nt_errstr(status),
-				  directory, newname));
-			break;
+		if (!replace_if_exists && vfs_file_exist(conn,destname, NULL)) {
+			DEBUG(6,("file_exist %s\n", destname));
+			status = NT_STATUS_OBJECT_NAME_COLLISION;
+			continue;
 		}
+				
+		if (rename_path_prefix_equal(fname, destname)) {
+			return NT_STATUS_SHARING_VIOLATION;
+		}
 
-		count++;
+		lck = get_share_mode_lock(NULL, sbuf1.st_dev,
+					  sbuf1.st_ino, NULL, NULL);
 
+		if (!SMB_VFS_RENAME(conn,fname,destname)) {
+			rename_open_files(conn, lck, sbuf1.st_dev,
+					  sbuf1.st_ino, newname);
+			count++;
+			status = NT_STATUS_OK;
+		}
+		TALLOC_FREE(lck);
 		DEBUG(3,("rename_internals: doing rename on %s -> "
 			 "%s\n",fname,destname));
-
-		TALLOC_FREE(fname);
-		TALLOC_FREE(destname);
 	}
-	TALLOC_FREE(dir_hnd);
+	CloseDir(dir_hnd);
 
 	if (count == 0 && NT_STATUS_IS_OK(status)) {
 		status = map_nt_error_from_unix(errno);
 	}
-
+	
 	return status;
 }
 
@@ -5891,100 +4796,67 @@
  Reply to a mv.
 ****************************************************************************/
 
-void reply_mv(struct smb_request *req)
+int reply_mv(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, 
+	     int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
-	char *name = NULL;
-	char *newname = NULL;
+	int outsize = 0;
+	pstring name;
+	pstring newname;
 	char *p;
-	uint32 attrs;
+	uint32 attrs = SVAL(inbuf,smb_vwv0);
 	NTSTATUS status;
-	bool src_has_wcard = False;
-	bool dest_has_wcard = False;
-	TALLOC_CTX *ctx = talloc_tos();
+	BOOL src_has_wcard = False;
+	BOOL dest_has_wcard = False;
 
 	START_PROFILE(SMBmv);
 
-	if (req->wct < 1) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBmv);
-		return;
-	}
-
-	attrs = SVAL(req->inbuf,smb_vwv0);
-
-	p = smb_buf(req->inbuf) + 1;
-	p += srvstr_get_path_wcard(ctx, (char *)req->inbuf, req->flags2, &name, p,
-				   0, STR_TERMINATE, &status,
-				   &src_has_wcard);
+	p = smb_buf(inbuf) + 1;
+	p += srvstr_get_path_wcard(inbuf, name, p, sizeof(name), 0, STR_TERMINATE, &status, &src_has_wcard);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBmv);
-		return;
+		return ERROR_NT(status);
 	}
 	p++;
-	p += srvstr_get_path_wcard(ctx, (char *)req->inbuf, req->flags2, &newname, p,
-				   0, STR_TERMINATE, &status,
-				   &dest_has_wcard);
+	p += srvstr_get_path_wcard(inbuf, newname, p, sizeof(newname), 0, STR_TERMINATE, &status, &dest_has_wcard);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBmv);
-		return;
+		return ERROR_NT(status);
 	}
-
-	status = resolve_dfspath_wcard(ctx, conn,
-				       req->flags2 & FLAGS2_DFS_PATHNAMES,
-				       name,
-				       &name,
-				       &src_has_wcard);
+	
+	status = resolve_dfspath_wcard(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, name, &src_has_wcard);
 	if (!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(SMBmv);
 		if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
-			reply_botherror(req, NT_STATUS_PATH_NOT_COVERED,
-					ERRSRV, ERRbadpath);
-			END_PROFILE(SMBmv);
-			return;
+			return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, ERRbadpath);
 		}
-		reply_nterror(req, status);
-		END_PROFILE(SMBmv);
-		return;
+		return ERROR_NT(status);
 	}
 
-	status = resolve_dfspath_wcard(ctx, conn,
-				       req->flags2 & FLAGS2_DFS_PATHNAMES,
-				       newname,
-				       &newname,
-				       &dest_has_wcard);
+	status = resolve_dfspath_wcard(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, newname, &dest_has_wcard);
 	if (!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(SMBmv);
 		if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
-			reply_botherror(req, NT_STATUS_PATH_NOT_COVERED,
-					ERRSRV, ERRbadpath);
-			END_PROFILE(SMBmv);
-			return;
+			return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, ERRbadpath);
 		}
-		reply_nterror(req, status);
-		END_PROFILE(SMBmv);
-		return;
+		return ERROR_NT(status);
 	}
-
+	
 	DEBUG(3,("reply_mv : %s -> %s\n",name,newname));
-
-	status = rename_internals(ctx, conn, req, name, newname, attrs, False,
-				  src_has_wcard, dest_has_wcard, DELETE_ACCESS);
+	
+	status = rename_internals(conn, name, newname, attrs, False, src_has_wcard, dest_has_wcard);
 	if (!NT_STATUS_IS_OK(status)) {
-		if (open_was_deferred(req->mid)) {
+		END_PROFILE(SMBmv);
+		if (open_was_deferred(SVAL(inbuf,smb_mid))) {
 			/* We have re-scheduled this call. */
-			END_PROFILE(SMBmv);
-			return;
+			return -1;
 		}
-		reply_nterror(req, status);
-		END_PROFILE(SMBmv);
-		return;
+		return ERROR_NT(status);
 	}
 
-	reply_outbuf(req, 0, 0);
-
+	outsize = set_message(outbuf,0,0,False);
+  
 	END_PROFILE(SMBmv);
-	return;
+	return(outsize);
 }
 
 /*******************************************************************
@@ -5995,43 +4867,34 @@
  * TODO: check error codes on all callers
  */
 
-NTSTATUS copy_file(TALLOC_CTX *ctx,
-			connection_struct *conn,
-			const char *src,
-			const char *dest1,
+NTSTATUS copy_file(connection_struct *conn,
+			char *src,
+			char *dest1,
 			int ofun,
 			int count,
-			bool target_is_directory)
+			BOOL target_is_directory)
 {
 	SMB_STRUCT_STAT src_sbuf, sbuf2;
 	SMB_OFF_T ret=-1;
 	files_struct *fsp1,*fsp2;
-	char *dest = NULL;
+	pstring dest;
  	uint32 dosattrs;
 	uint32 new_create_disposition;
 	NTSTATUS status;
-
-	dest = talloc_strdup(ctx, dest1);
-	if (!dest) {
-		return NT_STATUS_NO_MEMORY;
-	}
+ 
+	pstrcpy(dest,dest1);
 	if (target_is_directory) {
-		const char *p = strrchr_m(src,'/');
+		char *p = strrchr_m(src,'/');
 		if (p) {
 			p++;
 		} else {
 			p = src;
 		}
-		dest = talloc_asprintf_append(dest,
-				"/%s",
-				p);
-		if (!dest) {
-			return NT_STATUS_NO_MEMORY;
-		}
+		pstrcat(dest,"/");
+		pstrcat(dest,p);
 	}
 
 	if (!vfs_file_exist(conn,src,&src_sbuf)) {
-		TALLOC_FREE(dest);
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 	}
 
@@ -6040,12 +4903,11 @@
 	} else {
 		if (!map_open_params_to_ntcreate(dest1,0,ofun,
 				NULL, NULL, &new_create_disposition, NULL)) {
-			TALLOC_FREE(dest);
 			return NT_STATUS_INVALID_PARAMETER;
 		}
 	}
 
-	status = open_file_ntcreate(conn, NULL, src, &src_sbuf,
+	status = open_file_ntcreate(conn,src,&src_sbuf,
 			FILE_GENERIC_READ,
 			FILE_SHARE_READ|FILE_SHARE_WRITE,
 			FILE_OPEN,
@@ -6055,7 +4917,6 @@
 			NULL, &fsp1);
 
 	if (!NT_STATUS_IS_OK(status)) {
-		TALLOC_FREE(dest);
 		return status;
 	}
 
@@ -6064,7 +4925,7 @@
 		ZERO_STRUCTP(&sbuf2);
 	}
 
-	status = open_file_ntcreate(conn, NULL, dest, &sbuf2,
+	status = open_file_ntcreate(conn,dest,&sbuf2,
 			FILE_GENERIC_WRITE,
 			FILE_SHARE_READ|FILE_SHARE_WRITE,
 			new_create_disposition,
@@ -6073,15 +4934,13 @@
 			INTERNAL_OPEN_ONLY,
 			NULL, &fsp2);
 
-	TALLOC_FREE(dest);
-
 	if (!NT_STATUS_IS_OK(status)) {
 		close_file(fsp1,ERROR_CLOSE);
 		return status;
 	}
 
 	if ((ofun&3) == 1) {
-		if(SMB_VFS_LSEEK(fsp2,0,SEEK_END) == -1) {
+		if(SMB_VFS_LSEEK(fsp2,fsp2->fh->fd,0,SEEK_END) == -1) {
 			DEBUG(0,("copy_file: error - vfs lseek returned error %s\n", strerror(errno) ));
 			/*
 			 * Stop the copy from occurring.
@@ -6090,7 +4949,7 @@
 			src_sbuf.st_size = 0;
 		}
 	}
-
+  
 	if (src_sbuf.st_size) {
 		ret = vfs_transfer_file(fsp1, fsp2, src_sbuf.st_size);
 	}
@@ -6098,7 +4957,7 @@
 	close_file(fsp1,NORMAL_CLOSE);
 
 	/* Ensure the modtime is set correctly on the destination file. */
-	set_close_write_time(fsp2, get_mtimespec(&src_sbuf));
+	fsp_set_pending_modtime( fsp2, get_mtimespec(&src_sbuf));
 
 	/*
 	 * As we are opening fsp1 read-only we only expect
@@ -6123,157 +4982,106 @@
  Reply to a file copy.
 ****************************************************************************/
 
-void reply_copy(struct smb_request *req)
+int reply_copy(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
-	char *name = NULL;
-	char *newname = NULL;
-	char *directory = NULL;
-	char *mask = NULL;
+	int outsize = 0;
+	pstring name;
+	pstring directory;
+	pstring mask,newname;
 	char *p;
 	int count=0;
 	int error = ERRnoaccess;
 	int err = 0;
-	int tid2;
-	int ofun;
-	int flags;
-	bool target_is_directory=False;
-	bool source_has_wild = False;
-	bool dest_has_wild = False;
+	int tid2 = SVAL(inbuf,smb_vwv0);
+	int ofun = SVAL(inbuf,smb_vwv1);
+	int flags = SVAL(inbuf,smb_vwv2);
+	BOOL target_is_directory=False;
+	BOOL source_has_wild = False;
+	BOOL dest_has_wild = False;
 	SMB_STRUCT_STAT sbuf1, sbuf2;
 	NTSTATUS status;
-	TALLOC_CTX *ctx = talloc_tos();
-
 	START_PROFILE(SMBcopy);
 
-	if (req->wct < 3) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBcopy);
-		return;
-	}
+	*directory = *mask = 0;
 
-	tid2 = SVAL(req->inbuf,smb_vwv0);
-	ofun = SVAL(req->inbuf,smb_vwv1);
-	flags = SVAL(req->inbuf,smb_vwv2);
-
-	p = smb_buf(req->inbuf);
-	p += srvstr_get_path_wcard(ctx, (char *)req->inbuf, req->flags2, &name, p,
-				   0, STR_TERMINATE, &status,
-				   &source_has_wild);
+	p = smb_buf(inbuf);
+	p += srvstr_get_path_wcard(inbuf, name, p, sizeof(name), 0, STR_TERMINATE, &status, &source_has_wild);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBcopy);
-		return;
+		return ERROR_NT(status);
 	}
-	p += srvstr_get_path_wcard(ctx, (char *)req->inbuf, req->flags2, &newname, p,
-				   0, STR_TERMINATE, &status,
-				   &dest_has_wild);
+	p += srvstr_get_path_wcard(inbuf, newname, p, sizeof(newname), 0, STR_TERMINATE, &status, &dest_has_wild);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBcopy);
-		return;
+		return ERROR_NT(status);
 	}
-
+   
 	DEBUG(3,("reply_copy : %s -> %s\n",name,newname));
-
+   
 	if (tid2 != conn->cnum) {
 		/* can't currently handle inter share copies XXXX */
 		DEBUG(3,("Rejecting inter-share copy\n"));
-		reply_doserror(req, ERRSRV, ERRinvdevice);
 		END_PROFILE(SMBcopy);
-		return;
+		return ERROR_DOS(ERRSRV,ERRinvdevice);
 	}
 
-	status = resolve_dfspath_wcard(ctx, conn,
-				       req->flags2 & FLAGS2_DFS_PATHNAMES,
-				       name,
-				       &name,
-				       &source_has_wild);
+	status = resolve_dfspath_wcard(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, name, &source_has_wild);
 	if (!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(SMBcopy);
 		if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
-			reply_botherror(req, NT_STATUS_PATH_NOT_COVERED,
-					ERRSRV, ERRbadpath);
-			END_PROFILE(SMBcopy);
-			return;
+			return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, ERRbadpath);
 		}
-		reply_nterror(req, status);
-		END_PROFILE(SMBcopy);
-		return;
+		return ERROR_NT(status);
 	}
 
-	status = resolve_dfspath_wcard(ctx, conn,
-				       req->flags2 & FLAGS2_DFS_PATHNAMES,
-				       newname,
-				       &newname,
-				       &dest_has_wild);
+	status = resolve_dfspath_wcard(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, newname, &dest_has_wild);
 	if (!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(SMBcopy);
 		if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
-			reply_botherror(req, NT_STATUS_PATH_NOT_COVERED,
-					ERRSRV, ERRbadpath);
-			END_PROFILE(SMBcopy);
-			return;
+			return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, ERRbadpath);
 		}
-		reply_nterror(req, status);
-		END_PROFILE(SMBcopy);
-		return;
+		return ERROR_NT(status);
 	}
 
-	status = unix_convert(ctx, conn, name, source_has_wild,
-			&name, NULL, &sbuf1);
+	status = unix_convert(conn, name, source_has_wild, NULL, &sbuf1);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBcopy);
-		return;
+		return ERROR_NT(status);
 	}
 
-	status = unix_convert(ctx, conn, newname, dest_has_wild,
-			&newname, NULL, &sbuf2);
+	status = unix_convert(conn, newname, dest_has_wild, NULL, &sbuf2);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
 		END_PROFILE(SMBcopy);
-		return;
+		return ERROR_NT(status);
 	}
 
 	target_is_directory = VALID_STAT_OF_DIR(sbuf2);
 
 	if ((flags&1) && target_is_directory) {
-		reply_doserror(req, ERRDOS, ERRbadfile);
 		END_PROFILE(SMBcopy);
-		return;
+		return ERROR_DOS(ERRDOS,ERRbadfile);
 	}
 
 	if ((flags&2) && !target_is_directory) {
-		reply_doserror(req, ERRDOS, ERRbadpath);
 		END_PROFILE(SMBcopy);
-		return;
+		return ERROR_DOS(ERRDOS,ERRbadpath);
 	}
 
 	if ((flags&(1<<5)) && VALID_STAT_OF_DIR(sbuf1)) {
 		/* wants a tree copy! XXXX */
 		DEBUG(3,("Rejecting tree copy\n"));
-		reply_doserror(req, ERRSRV, ERRerror);
 		END_PROFILE(SMBcopy);
-		return;
+		return ERROR_DOS(ERRSRV,ERRerror);
 	}
 
 	p = strrchr_m(name,'/');
 	if (!p) {
-		directory = talloc_strdup(ctx, "./");
-		if (!directory) {
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
-			END_PROFILE(SMBcopy);
-			return;
-		}
-		mask = name;
+		pstrcpy(directory,"./");
+		pstrcpy(mask,name);
 	} else {
 		*p = 0;
-		directory = talloc_strdup(ctx, name);
-		if (!directory) {
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
-			END_PROFILE(SMBcopy);
-			return;
-		}
-		mask = p+1;
+		pstrcpy(directory,name);
+		pstrcpy(mask,p+1);
 	}
 
 	/*
@@ -6286,171 +5094,172 @@
 	 */
 
 	if (!VALID_STAT(sbuf1) && mangle_is_mangled(mask, conn->params)) {
-		char *new_mask = NULL;
-		mangle_lookup_name_from_8_3(ctx,
-					mask,
-					&new_mask,
-					conn->params );
-		if (new_mask) {
-			mask = new_mask;
-		}
+		mangle_check_cache( mask, sizeof(pstring)-1, conn->params );
 	}
 
 	if (!source_has_wild) {
-		directory = talloc_asprintf_append(directory,
-				"/%s",
-				mask);
+		pstrcat(directory,"/");
+		pstrcat(directory,mask);
 		if (dest_has_wild) {
-			char *mod_newname = NULL;
-			if (!resolve_wildcards(ctx,
-					directory,newname,&mod_newname)) {
-				reply_nterror(req, NT_STATUS_NO_MEMORY);
+			if (!resolve_wildcards(directory,newname)) {
 				END_PROFILE(SMBcopy);
-				return;
+				return ERROR_NT(NT_STATUS_NO_MEMORY);
 			}
-			newname = mod_newname;
 		}
 
 		status = check_name(conn, directory);
 		if (!NT_STATUS_IS_OK(status)) {
-			reply_nterror(req, status);
-			END_PROFILE(SMBcopy);
-			return;
+			return ERROR_NT(status);
 		}
-
+		
 		status = check_name(conn, newname);
 		if (!NT_STATUS_IS_OK(status)) {
-			reply_nterror(req, status);
-			END_PROFILE(SMBcopy);
-			return;
+			return ERROR_NT(status);
 		}
+		
+		status = copy_file(conn,directory,newname,ofun,
+					count,target_is_directory);
 
-		status = copy_file(ctx,conn,directory,newname,ofun,
-				count,target_is_directory);
-
 		if(!NT_STATUS_IS_OK(status)) {
-			reply_nterror(req, status);
 			END_PROFILE(SMBcopy);
-			return;
+			return ERROR_NT(status);
 		} else {
 			count++;
 		}
 	} else {
 		struct smb_Dir *dir_hnd = NULL;
-		const char *dname = NULL;
+		const char *dname;
 		long offset = 0;
+		pstring destname;
 
-		if (strequal(mask,"????????.???")) {
-			mask[0] = '*';
-			mask[1] = '\0';
-		}
+		if (strequal(mask,"????????.???"))
+			pstrcpy(mask,"*");
 
 		status = check_name(conn, directory);
 		if (!NT_STATUS_IS_OK(status)) {
-			reply_nterror(req, status);
-			END_PROFILE(SMBcopy);
-			return;
+			return ERROR_NT(status);
 		}
-
-		dir_hnd = OpenDir(talloc_tos(), conn, directory, mask, 0);
+		
+		dir_hnd = OpenDir(conn, directory, mask, 0);
 		if (dir_hnd == NULL) {
 			status = map_nt_error_from_unix(errno);
-			reply_nterror(req, status);
-			END_PROFILE(SMBcopy);
-			return;
+			return ERROR_NT(status);
 		}
 
 		error = ERRbadfile;
 
 		while ((dname = ReadDirName(dir_hnd, &offset))) {
-			char *destname = NULL;
-			char *fname = NULL;
-
-			if (ISDOT(dname) || ISDOTDOT(dname)) {
-				continue;
-			}
-
+			pstring fname;
+			pstrcpy(fname,dname);
+    
 			if (!is_visible_file(conn, directory, dname, &sbuf1, False)) {
 				continue;
 			}
 
-			if(!mask_match(dname, mask, conn->case_sensitive)) {
+			if(!mask_match(fname, mask, conn->case_sensitive)) {
 				continue;
 			}
 
 			error = ERRnoaccess;
-			fname = talloc_asprintf(ctx,
-					"%s/%s",
-					directory,
-					dname);
-			if (!fname) {
-				TALLOC_FREE(dir_hnd);
-				reply_nterror(req, NT_STATUS_NO_MEMORY);
-				END_PROFILE(SMBcopy);
-				return;
-			}
-
-			if (!resolve_wildcards(ctx,
-					fname,newname,&destname)) {
+			slprintf(fname,sizeof(fname)-1, "%s/%s",directory,dname);
+			pstrcpy(destname,newname);
+			if (!resolve_wildcards(fname,destname)) {
 				continue;
 			}
-			if (!destname) {
-				TALLOC_FREE(dir_hnd);
-				reply_nterror(req, NT_STATUS_NO_MEMORY);
-				END_PROFILE(SMBcopy);
-				return;
-			}
 
 			status = check_name(conn, fname);
 			if (!NT_STATUS_IS_OK(status)) {
-				TALLOC_FREE(dir_hnd);
-				reply_nterror(req, status);
-				END_PROFILE(SMBcopy);
-				return;
+				CloseDir(dir_hnd);
+				return ERROR_NT(status);
 			}
-
+		
 			status = check_name(conn, destname);
 			if (!NT_STATUS_IS_OK(status)) {
-				TALLOC_FREE(dir_hnd);
-				reply_nterror(req, status);
-				END_PROFILE(SMBcopy);
-				return;
+				CloseDir(dir_hnd);
+				return ERROR_NT(status);
 			}
-
+		
 			DEBUG(3,("reply_copy : doing copy on %s -> %s\n",fname, destname));
 
-			status = copy_file(ctx,conn,fname,destname,ofun,
+			status = copy_file(conn,fname,destname,ofun,
 					count,target_is_directory);
 			if (NT_STATUS_IS_OK(status)) {
 				count++;
 			}
-			TALLOC_FREE(fname);
-			TALLOC_FREE(destname);
 		}
-		TALLOC_FREE(dir_hnd);
+		CloseDir(dir_hnd);
 	}
-
+  
 	if (count == 0) {
 		if(err) {
 			/* Error on close... */
 			errno = err;
-			reply_unixerror(req, ERRHRD, ERRgeneral);
 			END_PROFILE(SMBcopy);
-			return;
+			return(UNIXERROR(ERRHRD,ERRgeneral));
 		}
 
-		reply_doserror(req, ERRDOS, error);
 		END_PROFILE(SMBcopy);
-		return;
+		return ERROR_DOS(ERRDOS,error);
 	}
+  
+	outsize = set_message(outbuf,1,0,True);
+	SSVAL(outbuf,smb_vwv0,count);
 
-	reply_outbuf(req, 1, 0);
-	SSVAL(req->outbuf,smb_vwv0,count);
-
 	END_PROFILE(SMBcopy);
-	return;
+	return(outsize);
 }
 
+/****************************************************************************
+ Reply to a setdir.
+****************************************************************************/
+
+int reply_setdir(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
+{
+	int snum;
+	int outsize = 0;
+	pstring newdir;
+	NTSTATUS status;
+
+	START_PROFILE(pathworks_setdir);
+  
+	snum = SNUM(conn);
+	if (!CAN_SETDIR(snum)) {
+		END_PROFILE(pathworks_setdir);
+		return ERROR_DOS(ERRDOS,ERRnoaccess);
+	}
+
+	srvstr_get_path(inbuf, newdir, smb_buf(inbuf) + 1, sizeof(newdir), 0, STR_TERMINATE, &status);
+	if (!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(pathworks_setdir);
+		return ERROR_NT(status);
+	}
+  
+	status = resolve_dfspath(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, newdir);
+	if (!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(pathworks_setdir);
+		if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
+			return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, ERRbadpath);
+		}
+		return ERROR_NT(status);
+	}
+
+	if (strlen(newdir) != 0) {
+		if (!vfs_directory_exist(conn,newdir,NULL)) {
+			END_PROFILE(pathworks_setdir);
+			return ERROR_DOS(ERRDOS,ERRbadpath);
+		}
+		set_conn_connectpath(conn,newdir);
+	}
+  
+	outsize = set_message(outbuf,0,0,False);
+	SCVAL(outbuf,smb_reh,CVAL(inbuf,smb_reh));
+  
+	DEBUG(3,("setdir %s\n", newdir));
+
+	END_PROFILE(pathworks_setdir);
+	return(outsize);
+}
+
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_LOCKING
 
@@ -6458,7 +5267,7 @@
  Get a lock pid, dealing with large count requests.
 ****************************************************************************/
 
-uint32 get_lock_pid( char *data, int data_offset, bool large_file_format)
+uint32 get_lock_pid( char *data, int data_offset, BOOL large_file_format)
 {
 	if(!large_file_format)
 		return (uint32)SVAL(data,SMB_LPID_OFFSET(data_offset));
@@ -6470,7 +5279,7 @@
  Get a lock count, dealing with large count requests.
 ****************************************************************************/
 
-SMB_BIG_UINT get_lock_count( char *data, int data_offset, bool large_file_format)
+SMB_BIG_UINT get_lock_count( char *data, int data_offset, BOOL large_file_format)
 {
 	SMB_BIG_UINT count = 0;
 
@@ -6542,7 +5351,7 @@
  Get a lock offset, dealing with large offset requests.
 ****************************************************************************/
 
-SMB_BIG_UINT get_lock_offset( char *data, int data_offset, bool large_file_format, bool *err)
+SMB_BIG_UINT get_lock_offset( char *data, int data_offset, BOOL large_file_format, BOOL *err)
 {
 	SMB_BIG_UINT offset = 0;
 
@@ -6591,53 +5400,35 @@
  Reply to a lockingX request.
 ****************************************************************************/
 
-void reply_lockingX(struct smb_request *req)
+int reply_lockingX(connection_struct *conn, char *inbuf, char *outbuf,
+		   int length, int bufsize)
 {
-	connection_struct *conn = req->conn;
-	files_struct *fsp;
-	unsigned char locktype;
-	unsigned char oplocklevel;
-	uint16 num_ulocks;
-	uint16 num_locks;
+	files_struct *fsp = file_fsp(inbuf,smb_vwv2);
+	unsigned char locktype = CVAL(inbuf,smb_vwv3);
+	unsigned char oplocklevel = CVAL(inbuf,smb_vwv3+1);
+	uint16 num_ulocks = SVAL(inbuf,smb_vwv6);
+	uint16 num_locks = SVAL(inbuf,smb_vwv7);
 	SMB_BIG_UINT count = 0, offset = 0;
 	uint32 lock_pid;
-	int32 lock_timeout;
+	int32 lock_timeout = IVAL(inbuf,smb_vwv4);
 	int i;
 	char *data;
-	bool large_file_format;
-	bool err;
+	BOOL large_file_format =
+		(locktype & LOCKING_ANDX_LARGE_FILES)?True:False;
+	BOOL err;
 	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
 
 	START_PROFILE(SMBlockingX);
-
-	if (req->wct < 8) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBlockingX);
-		return;
-	}
 	
-	fsp = file_fsp(SVAL(req->inbuf,smb_vwv2));
-	locktype = CVAL(req->inbuf,smb_vwv3);
-	oplocklevel = CVAL(req->inbuf,smb_vwv3+1);
-	num_ulocks = SVAL(req->inbuf,smb_vwv6);
-	num_locks = SVAL(req->inbuf,smb_vwv7);
-	lock_timeout = IVAL(req->inbuf,smb_vwv4);
-	large_file_format = (locktype & LOCKING_ANDX_LARGE_FILES)?True:False;
-
-	if (!check_fsp(conn, req, fsp, &current_user)) {
-		END_PROFILE(SMBlockingX);
-		return;
-	}
+	CHECK_FSP(fsp,conn);
 	
-	data = smb_buf(req->inbuf);
+	data = smb_buf(inbuf);
 
 	if (locktype & LOCKING_ANDX_CHANGE_LOCKTYPE) {
 		/* we don't support these - and CANCEL_LOCK makes w2k
 		   and XP reboot so I don't really want to be
 		   compatible! (tridge) */
-		reply_nterror(req, NT_STATUS_DOS(ERRDOS, ERRnoatomiclocks));
-		END_PROFILE(SMBlockingX);
-		return;
+		return ERROR_NT(NT_STATUS_DOS(ERRDOS, ERRnoatomiclocks));
 	}
 	
 	/* Check if this is an oplock break on a file
@@ -6645,8 +5436,8 @@
 	*/
 	if ((locktype & LOCKING_ANDX_OPLOCK_RELEASE)) {
 		/* Client can insist on breaking to none. */
-		bool break_to_none = (oplocklevel == 0);
-		bool result;
+		BOOL break_to_none = (oplocklevel == 0);
+		BOOL result;
 
 		DEBUG(5,("reply_lockingX: oplock break reply (%u) from client "
 			 "for fnum = %d\n", (unsigned int)oplocklevel,
@@ -6674,11 +5465,10 @@
 			 * send a reply */
 			if (num_locks == 0 && num_ulocks == 0) {
 				END_PROFILE(SMBlockingX);
-				return;
+				return -1;
 			} else {
 				END_PROFILE(SMBlockingX);
-				reply_doserror(req, ERRDOS, ERRlock);
-				return;
+				return ERROR_DOS(ERRDOS,ERRlock);
 			}
 		}
 
@@ -6703,13 +5493,12 @@
 		if (num_locks == 0 && num_ulocks == 0) {
 			/* Sanity check - ensure a pure oplock break is not a
 			   chained request. */
-			if(CVAL(req->inbuf,smb_vwv0) != 0xff)
+			if(CVAL(inbuf,smb_vwv0) != 0xff)
 				DEBUG(0,("reply_lockingX: Error : pure oplock "
 					 "break is a chained %d request !\n",
-					 (unsigned int)CVAL(req->inbuf,
-							    smb_vwv0) ));
+					 (unsigned int)CVAL(inbuf,smb_vwv0) ));
 			END_PROFILE(SMBlockingX);
-			return;
+			return -1;
 		}
 	}
 
@@ -6719,13 +5508,6 @@
 	 */
 	
 	release_level_2_oplocks_on_change(fsp);
-
-	if (smb_buflen(req->inbuf) <
-	    (num_ulocks + num_locks) * (large_file_format ? 20 : 10)) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBlockingX);
-		return;
-	}
 	
 	/* Data now points at the beginning of the list
 	   of smb_unlkrng structs */
@@ -6739,16 +5521,14 @@
 		 */
 		if(err) {
 			END_PROFILE(SMBlockingX);
-			reply_doserror(req, ERRDOS, ERRnoaccess);
-			return;
+			return ERROR_DOS(ERRDOS,ERRnoaccess);
 		}
 
 		DEBUG(10,("reply_lockingX: unlock start=%.0f, len=%.0f for "
 			  "pid %u, file %s\n", (double)offset, (double)count,
 			  (unsigned int)lock_pid, fsp->fsp_name ));
 		
-		status = do_unlock(smbd_messaging_context(),
-				fsp,
+		status = do_unlock(fsp,
 				lock_pid,
 				count,
 				offset,
@@ -6756,8 +5536,7 @@
 
 		if (NT_STATUS_V(status)) {
 			END_PROFILE(SMBlockingX);
-			reply_nterror(req, status);
-			return;
+			return ERROR_NT(status);
 		}
 	}
 
@@ -6785,8 +5564,7 @@
 		 */
 		if(err) {
 			END_PROFILE(SMBlockingX);
-			reply_doserror(req, ERRDOS, ERRnoaccess);
-			return;
+			return ERROR_DOS(ERRDOS,ERRnoaccess);
 		}
 		
 		DEBUG(10,("reply_lockingX: lock start=%.0f, len=%.0f for pid "
@@ -6809,12 +5587,7 @@
 						locktype,
 						NT_STATUS_FILE_LOCK_CONFLICT)) {
 					END_PROFILE(SMBlockingX);
-					reply_nterror(
-						req,
-						NT_STATUS_DOS(
-							ERRDOS,
-							ERRcancelviolation));
-					return;
+					return ERROR_NT(NT_STATUS_DOS(ERRDOS, ERRcancelviolation));
 				}
 			}
 			/* Remove a matching pending lock. */
@@ -6824,13 +5597,12 @@
 						offset,
 						WINDOWS_LOCK);
 		} else {
-			bool blocking_lock = lock_timeout ? True : False;
-			bool defer_lock = False;
+			BOOL blocking_lock = lock_timeout ? True : False;
+			BOOL defer_lock = False;
 			struct byte_range_lock *br_lck;
 			uint32 block_smbpid;
 
-			br_lck = do_lock(smbd_messaging_context(),
-					fsp,
+			br_lck = do_lock(fsp,
 					lock_pid,
 					count,
 					offset, 
@@ -6867,7 +5639,7 @@
 				 * onto the blocking lock queue.
 				 */
 				if(push_blocking_lock_request(br_lck,
-							req,
+							inbuf, length,
 							fsp,
 							lock_timeout,
 							i,
@@ -6879,7 +5651,7 @@
 							block_smbpid)) {
 					TALLOC_FREE(br_lck);
 					END_PROFILE(SMBlockingX);
-					return;
+					return -1;
 				}
 			}
 
@@ -6888,8 +5660,7 @@
 
 		if (NT_STATUS_V(status)) {
 			END_PROFILE(SMBlockingX);
-			reply_nterror(req, status);
-			return;
+			return ERROR_NT(status);
 		}
 	}
 	
@@ -6916,29 +5687,26 @@
 			 */
 			if(err) {
 				END_PROFILE(SMBlockingX);
-				reply_doserror(req, ERRDOS, ERRnoaccess);
-				return;
+				return ERROR_DOS(ERRDOS,ERRnoaccess);
 			}
 			
-			do_unlock(smbd_messaging_context(),
-				fsp,
+			do_unlock(fsp,
 				lock_pid,
 				count,
 				offset,
 				WINDOWS_LOCK);
 		}
 		END_PROFILE(SMBlockingX);
-		reply_nterror(req, status);
-		return;
+		return ERROR_NT(status);
 	}
 
-	reply_outbuf(req, 2, 0);
+	set_message(outbuf,2,0,True);
 	
 	DEBUG(3, ("lockingX fnum=%d type=%d num_locks=%d num_ulocks=%d\n",
 		  fsp->fnum, (unsigned int)locktype, num_locks, num_ulocks));
 	
 	END_PROFILE(SMBlockingX);
-	chain_reply(req);
+	return chain_reply(inbuf,outbuf,length,bufsize);
 }
 
 #undef DBGC_CLASS
@@ -6946,101 +5714,131 @@
 
 /****************************************************************************
  Reply to a SMBreadbmpx (read block multiplex) request.
- Always reply with an error, if someone has a platform really needs this,
- please contact vl at samba.org
 ****************************************************************************/
 
-void reply_readbmpx(struct smb_request *req)
+int reply_readbmpx(connection_struct *conn, char *inbuf,char *outbuf,int length,int bufsize)
 {
+	ssize_t nread = -1;
+	ssize_t total_read;
+	char *data;
+	SMB_OFF_T startpos;
+	int outsize;
+	size_t maxcount;
+	int max_per_packet;
+	size_t tcount;
+	int pad;
+	files_struct *fsp = file_fsp(inbuf,smb_vwv0);
 	START_PROFILE(SMBreadBmpx);
-	reply_doserror(req, ERRSRV, ERRuseSTD);
-	END_PROFILE(SMBreadBmpx);
-	return;
-}
 
-/****************************************************************************
- Reply to a SMBreadbs (read block multiplex secondary) request.
- Always reply with an error, if someone has a platform really needs this,
- please contact vl at samba.org
-****************************************************************************/
+	/* this function doesn't seem to work - disable by default */
+	if (!lp_readbmpx()) {
+		END_PROFILE(SMBreadBmpx);
+		return ERROR_DOS(ERRSRV,ERRuseSTD);
+	}
 
-void reply_readbs(struct smb_request *req)
-{
-	START_PROFILE(SMBreadBs);
-	reply_doserror(req, ERRSRV, ERRuseSTD);
-	END_PROFILE(SMBreadBs);
-	return;
+	outsize = set_message(outbuf,8,0,True);
+
+	CHECK_FSP(fsp,conn);
+	if (!CHECK_READ(fsp,inbuf)) {
+		return(ERROR_DOS(ERRDOS,ERRbadaccess));
+	}
+
+	startpos = IVAL_TO_SMB_OFF_T(inbuf,smb_vwv1);
+	maxcount = SVAL(inbuf,smb_vwv3);
+
+	data = smb_buf(outbuf);
+	pad = ((long)data)%4;
+	if (pad)
+		pad = 4 - pad;
+	data += pad;
+
+	max_per_packet = bufsize-(outsize+pad);
+	tcount = maxcount;
+	total_read = 0;
+
+	if (is_locked(fsp,(uint32)SVAL(inbuf,smb_pid),(SMB_BIG_UINT)maxcount,(SMB_BIG_UINT)startpos, READ_LOCK)) {
+		END_PROFILE(SMBreadBmpx);
+		return ERROR_DOS(ERRDOS,ERRlock);
+	}
+
+	do {
+		size_t N = MIN(max_per_packet,tcount-total_read);
+  
+		nread = read_file(fsp,data,startpos,N);
+
+		if (nread <= 0)
+			nread = 0;
+
+		if (nread < (ssize_t)N)
+			tcount = total_read + nread;
+
+		set_message(outbuf,8,nread+pad,False);
+		SIVAL(outbuf,smb_vwv0,startpos);
+		SSVAL(outbuf,smb_vwv2,tcount);
+		SSVAL(outbuf,smb_vwv6,nread);
+		SSVAL(outbuf,smb_vwv7,smb_offset(data,outbuf));
+
+		show_msg(outbuf);
+		if (!send_smb(smbd_server_fd(),outbuf))
+			exit_server_cleanly("reply_readbmpx: send_smb failed.");
+
+		total_read += nread;
+		startpos += nread;
+	} while (total_read < (ssize_t)tcount);
+
+	END_PROFILE(SMBreadBmpx);
+	return(-1);
 }
 
 /****************************************************************************
  Reply to a SMBsetattrE.
 ****************************************************************************/
 
-void reply_setattrE(struct smb_request *req)
+int reply_setattrE(connection_struct *conn, char *inbuf,char *outbuf, int size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
 	struct timespec ts[2];
-	files_struct *fsp;
-	SMB_STRUCT_STAT sbuf;
-	NTSTATUS status;
-
+	int outsize = 0;
+	files_struct *fsp = file_fsp(inbuf,smb_vwv0);
 	START_PROFILE(SMBsetattrE);
 
-	if (req->wct < 7) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBsetattrE);
-		return;
-	}
+	outsize = set_message(outbuf,0,0,False);
 
-	fsp = file_fsp(SVAL(req->inbuf,smb_vwv0));
-
 	if(!fsp || (fsp->conn != conn)) {
-		reply_doserror(req, ERRDOS, ERRbadfid);
 		END_PROFILE(SMBsetattrE);
-		return;
+		return ERROR_DOS(ERRDOS,ERRbadfid);
 	}
 
-
 	/*
 	 * Convert the DOS times into unix times. Ignore create
 	 * time as UNIX can't set this.
 	 */
 
-	ts[0] = convert_time_t_to_timespec(
-		srv_make_unix_date2(req->inbuf+smb_vwv3)); /* atime. */
-	ts[1] = convert_time_t_to_timespec(
-		srv_make_unix_date2(req->inbuf+smb_vwv5)); /* mtime. */
+	ts[0] = convert_time_t_to_timespec(srv_make_unix_date2(inbuf+smb_vwv3)); /* atime. */
+	ts[1] = convert_time_t_to_timespec(srv_make_unix_date2(inbuf+smb_vwv5)); /* mtime. */
   
-	reply_outbuf(req, 0, 0);
-
 	/* 
 	 * Patch from Ray Frush <frush at engr.colostate.edu>
 	 * Sometimes times are sent as zero - ignore them.
 	 */
 
-	/* Ensure we have a valid stat struct for the source. */
-	if (fsp->fh->fd != -1) {
-		if (SMB_VFS_FSTAT(fsp, &sbuf) == -1) {
-			status = map_nt_error_from_unix(errno);
-			reply_nterror(req, status);
-			END_PROFILE(SMBsetattrE);
-			return;
+	if (null_timespec(ts[0]) && null_timespec(ts[1])) {
+		/* Ignore request */
+		if( DEBUGLVL( 3 ) ) {
+			dbgtext( "reply_setattrE fnum=%d ", fsp->fnum);
+			dbgtext( "ignoring zero request - not setting timestamps of 0\n" );
 		}
-	} else {
-		if (SMB_VFS_STAT(conn, fsp->fsp_name, &sbuf) == -1) {
-			status = map_nt_error_from_unix(errno);
-			reply_nterror(req, status);
-			END_PROFILE(SMBsetattrE);
-			return;
-		}
+		END_PROFILE(SMBsetattrE);
+		return(outsize);
+	} else if (!null_timespec(ts[0]) && null_timespec(ts[1])) {
+		/* set modify time = to access time if modify time was unset */
+		ts[1] = ts[0];
 	}
 
-	status = smb_set_file_time(conn, fsp, fsp->fsp_name,
-				   &sbuf, ts, true);
-	if (!NT_STATUS_IS_OK(status)) {
-		reply_doserror(req, ERRDOS, ERRnoaccess);
+	/* Set the date on this file */
+	/* Should we set pending modtime here ? JRA */
+	if(file_ntimes(conn, fsp->fsp_name, ts)) {
 		END_PROFILE(SMBsetattrE);
-		return;
+		return ERROR_DOS(ERRDOS,ERRnoaccess);
 	}
   
 	DEBUG( 3, ( "reply_setattrE fnum=%d actime=%u modtime=%u\n",
@@ -7049,7 +5847,7 @@
 		(unsigned int)ts[1].tv_sec));
 
 	END_PROFILE(SMBsetattrE);
-	return;
+	return(outsize);
 }
 
 
@@ -7057,64 +5855,233 @@
 
 /****************************************************************************
  Reply to a SMBwritebmpx (write block multiplex primary) request.
- Always reply with an error, if someone has a platform really needs this,
- please contact vl at samba.org
 ****************************************************************************/
 
-void reply_writebmpx(struct smb_request *req)
+int reply_writebmpx(connection_struct *conn, char *inbuf,char *outbuf, int size, int dum_buffsize)
 {
+	size_t numtowrite;
+	ssize_t nwritten = -1;
+	int outsize = 0;
+	SMB_OFF_T startpos;
+	size_t tcount;
+	BOOL write_through;
+	int smb_doff;
+	char *data;
+	files_struct *fsp = file_fsp(inbuf,smb_vwv0);
+	NTSTATUS status;
 	START_PROFILE(SMBwriteBmpx);
-	reply_doserror(req, ERRSRV, ERRuseSTD);
+
+	CHECK_FSP(fsp,conn);
+	if (!CHECK_WRITE(fsp)) {
+		return(ERROR_DOS(ERRDOS,ERRbadaccess));
+	}
+	if (HAS_CACHED_ERROR(fsp)) {
+		return(CACHED_ERROR(fsp));
+	}
+
+	tcount = SVAL(inbuf,smb_vwv1);
+	startpos = IVAL_TO_SMB_OFF_T(inbuf,smb_vwv3);
+	write_through = BITSETW(inbuf+smb_vwv7,0);
+	numtowrite = SVAL(inbuf,smb_vwv10);
+	smb_doff = SVAL(inbuf,smb_vwv11);
+
+	data = smb_base(inbuf) + smb_doff;
+
+	/* If this fails we need to send an SMBwriteC response,
+		not an SMBwritebmpx - set this up now so we don't forget */
+	SCVAL(outbuf,smb_com,SMBwritec);
+
+	if (is_locked(fsp,(uint32)SVAL(inbuf,smb_pid),(SMB_BIG_UINT)tcount,(SMB_BIG_UINT)startpos,WRITE_LOCK)) {
+		END_PROFILE(SMBwriteBmpx);
+		return(ERROR_DOS(ERRDOS,ERRlock));
+	}
+
+	nwritten = write_file(fsp,data,startpos,numtowrite);
+
+	status = sync_file(conn, fsp, write_through);
+	if (!NT_STATUS_IS_OK(status)) {
+		END_PROFILE(SMBwriteBmpx);
+		DEBUG(5,("reply_writebmpx: sync_file for %s returned %s\n",
+			fsp->fsp_name, nt_errstr(status) ));
+		return ERROR_NT(status);
+	}
+  
+	if(nwritten < (ssize_t)numtowrite) {
+		END_PROFILE(SMBwriteBmpx);
+		return(UNIXERROR(ERRHRD,ERRdiskfull));
+	}
+
+	/* If the maximum to be written to this file
+		is greater than what we just wrote then set
+		up a secondary struct to be attached to this
+		fd, we will use this to cache error messages etc. */
+
+	if((ssize_t)tcount > nwritten) {
+		write_bmpx_struct *wbms;
+		if(fsp->wbmpx_ptr != NULL)
+			wbms = fsp->wbmpx_ptr; /* Use an existing struct */
+		else
+			wbms = SMB_MALLOC_P(write_bmpx_struct);
+		if(!wbms) {
+			DEBUG(0,("Out of memory in reply_readmpx\n"));
+			END_PROFILE(SMBwriteBmpx);
+			return(ERROR_DOS(ERRSRV,ERRnoresource));
+		}
+		wbms->wr_mode = write_through;
+		wbms->wr_discard = False; /* No errors yet */
+		wbms->wr_total_written = nwritten;
+		wbms->wr_errclass = 0;
+		wbms->wr_error = 0;
+		fsp->wbmpx_ptr = wbms;
+	}
+
+	/* We are returning successfully, set the message type back to
+		SMBwritebmpx */
+	SCVAL(outbuf,smb_com,SMBwriteBmpx);
+  
+	outsize = set_message(outbuf,1,0,True);
+  
+	SSVALS(outbuf,smb_vwv0,-1); /* We don't support smb_remaining */
+  
+	DEBUG( 3, ( "writebmpx fnum=%d num=%d wrote=%d\n",
+			fsp->fnum, (int)numtowrite, (int)nwritten ) );
+
+	if (write_through && tcount==nwritten) {
+		/* We need to send both a primary and a secondary response */
+		smb_setlen(outbuf,outsize - 4);
+		show_msg(outbuf);
+		if (!send_smb(smbd_server_fd(),outbuf))
+			exit_server_cleanly("reply_writebmpx: send_smb failed.");
+
+		/* Now the secondary */
+		outsize = set_message(outbuf,1,0,True);
+		SCVAL(outbuf,smb_com,SMBwritec);
+		SSVAL(outbuf,smb_vwv0,nwritten);
+	}
+
 	END_PROFILE(SMBwriteBmpx);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
  Reply to a SMBwritebs (write block multiplex secondary) request.
- Always reply with an error, if someone has a platform really needs this,
- please contact vl at samba.org
 ****************************************************************************/
 
-void reply_writebs(struct smb_request *req)
+int reply_writebs(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
 {
+	size_t numtowrite;
+	ssize_t nwritten = -1;
+	int outsize = 0;
+	SMB_OFF_T startpos;
+	size_t tcount;
+	BOOL write_through;
+	int smb_doff;
+	char *data;
+	write_bmpx_struct *wbms;
+	BOOL send_response = False; 
+	files_struct *fsp = file_fsp(inbuf,smb_vwv0);
+	NTSTATUS status;
 	START_PROFILE(SMBwriteBs);
-	reply_doserror(req, ERRSRV, ERRuseSTD);
+
+	CHECK_FSP(fsp,conn);
+	if (!CHECK_WRITE(fsp)) {
+		return(ERROR_DOS(ERRDOS,ERRbadaccess));
+	}
+
+	tcount = SVAL(inbuf,smb_vwv1);
+	startpos = IVAL_TO_SMB_OFF_T(inbuf,smb_vwv2);
+	numtowrite = SVAL(inbuf,smb_vwv6);
+	smb_doff = SVAL(inbuf,smb_vwv7);
+
+	data = smb_base(inbuf) + smb_doff;
+
+	/* We need to send an SMBwriteC response, not an SMBwritebs */
+	SCVAL(outbuf,smb_com,SMBwritec);
+
+	/* This fd should have an auxiliary struct attached,
+		check that it does */
+	wbms = fsp->wbmpx_ptr;
+	if(!wbms) {
+		END_PROFILE(SMBwriteBs);
+		return(-1);
+	}
+
+	/* If write through is set we can return errors, else we must cache them */
+	write_through = wbms->wr_mode;
+
+	/* Check for an earlier error */
+	if(wbms->wr_discard) {
+		END_PROFILE(SMBwriteBs);
+		return -1; /* Just discard the packet */
+	}
+
+	nwritten = write_file(fsp,data,startpos,numtowrite);
+
+	status = sync_file(conn, fsp, write_through);
+  
+	if (nwritten < (ssize_t)numtowrite || !NT_STATUS_IS_OK(status)) {
+		if(write_through) {
+			/* We are returning an error - we can delete the aux struct */
+			if (wbms)
+				free((char *)wbms);
+			fsp->wbmpx_ptr = NULL;
+			END_PROFILE(SMBwriteBs);
+			return(ERROR_DOS(ERRHRD,ERRdiskfull));
+		}
+		wbms->wr_errclass = ERRHRD;
+		wbms->wr_error = ERRdiskfull;
+		wbms->wr_status = NT_STATUS_DISK_FULL;
+		wbms->wr_discard = True;
+		END_PROFILE(SMBwriteBs);
+		return -1;
+	}
+
+	/* Increment the total written, if this matches tcount
+		we can discard the auxiliary struct (hurrah !) and return a writeC */
+	wbms->wr_total_written += nwritten;
+	if(wbms->wr_total_written >= tcount) {
+		if (write_through) {
+			outsize = set_message(outbuf,1,0,True);
+			SSVAL(outbuf,smb_vwv0,wbms->wr_total_written);    
+			send_response = True;
+		}
+
+		free((char *)wbms);
+		fsp->wbmpx_ptr = NULL;
+	}
+
+	if(send_response) {
+		END_PROFILE(SMBwriteBs);
+		return(outsize);
+	}
+
 	END_PROFILE(SMBwriteBs);
-	return;
+	return(-1);
 }
 
 /****************************************************************************
  Reply to a SMBgetattrE.
 ****************************************************************************/
 
-void reply_getattrE(struct smb_request *req)
+int reply_getattrE(connection_struct *conn, char *inbuf,char *outbuf, int size, int dum_buffsize)
 {
-	connection_struct *conn = req->conn;
 	SMB_STRUCT_STAT sbuf;
+	int outsize = 0;
 	int mode;
-	files_struct *fsp;
-
+	files_struct *fsp = file_fsp(inbuf,smb_vwv0);
 	START_PROFILE(SMBgetattrE);
 
-	if (req->wct < 1) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBgetattrE);
-		return;
-	}
+	outsize = set_message(outbuf,11,0,True);
 
-	fsp = file_fsp(SVAL(req->inbuf,smb_vwv0));
-
 	if(!fsp || (fsp->conn != conn)) {
-		reply_doserror(req, ERRDOS, ERRbadfid);
 		END_PROFILE(SMBgetattrE);
-		return;
+		return ERROR_DOS(ERRDOS,ERRbadfid);
 	}
 
 	/* Do an fstat on this file */
 	if(fsp_stat(fsp, &sbuf)) {
-		reply_unixerror(req, ERRDOS, ERRnoaccess);
 		END_PROFILE(SMBgetattrE);
-		return;
+		return(UNIXERROR(ERRDOS,ERRnoaccess));
 	}
   
 	mode = dos_mode(conn,fsp->fsp_name,&sbuf);
@@ -7125,27 +6092,23 @@
 	 * this.
 	 */
 
-	reply_outbuf(req, 11, 0);
-
-	srv_put_dos_date2((char *)req->outbuf, smb_vwv0,
-			  get_create_time(&sbuf,
-					  lp_fake_dir_create_times(SNUM(conn))));
-	srv_put_dos_date2((char *)req->outbuf, smb_vwv2, sbuf.st_atime);
+	srv_put_dos_date2(outbuf,smb_vwv0,get_create_time(&sbuf,lp_fake_dir_create_times(SNUM(conn))));
+	srv_put_dos_date2(outbuf,smb_vwv2,sbuf.st_atime);
 	/* Should we check pending modtime here ? JRA */
-	srv_put_dos_date2((char *)req->outbuf, smb_vwv4, sbuf.st_mtime);
+	srv_put_dos_date2(outbuf,smb_vwv4,sbuf.st_mtime);
 
 	if (mode & aDIR) {
-		SIVAL(req->outbuf, smb_vwv6, 0);
-		SIVAL(req->outbuf, smb_vwv8, 0);
+		SIVAL(outbuf,smb_vwv6,0);
+		SIVAL(outbuf,smb_vwv8,0);
 	} else {
 		uint32 allocation_size = get_allocation_size(conn,fsp, &sbuf);
-		SIVAL(req->outbuf, smb_vwv6, (uint32)sbuf.st_size);
-		SIVAL(req->outbuf, smb_vwv8, allocation_size);
+		SIVAL(outbuf,smb_vwv6,(uint32)sbuf.st_size);
+		SIVAL(outbuf,smb_vwv8,allocation_size);
 	}
-	SSVAL(req->outbuf,smb_vwv10, mode);
+	SSVAL(outbuf,smb_vwv10, mode);
   
 	DEBUG( 3, ( "reply_getattrE fnum=%d\n", fsp->fnum));
   
 	END_PROFILE(SMBgetattrE);
-	return;
+	return(outsize);
 }

Deleted: branches/samba/upstream/source/smbd/seal.c
===================================================================
--- branches/samba/upstream/source/smbd/seal.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/seal.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,742 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   SMB Transport encryption (sealing) code - server code.
-   Copyright (C) Jeremy Allison 2007.
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-
-/******************************************************************************
- Server side encryption.
-******************************************************************************/
-
-/******************************************************************************
- Global server state.
-******************************************************************************/
-
-struct smb_srv_trans_enc_ctx {
-	struct smb_trans_enc_state *es;
-	AUTH_NTLMSSP_STATE *auth_ntlmssp_state; /* Must be kept in sync with pointer in ec->ntlmssp_state. */
-};
-
-static struct smb_srv_trans_enc_ctx *partial_srv_trans_enc_ctx;
-static struct smb_srv_trans_enc_ctx *srv_trans_enc_ctx;
-
-/******************************************************************************
- Return global enc context - this must change if we ever do multiple contexts.
-******************************************************************************/
-
-uint16_t srv_enc_ctx(void)
-{
-	return srv_trans_enc_ctx->es->enc_ctx_num;
-}
-
-/******************************************************************************
- Is this an incoming encrypted packet ?
-******************************************************************************/
-
-bool is_encrypted_packet(const uint8_t *inbuf)
-{
-	NTSTATUS status;
-	uint16_t enc_num;
-
-	/* Ignore non-session messages or non 0xFF'E' messages. */
-	if(CVAL(inbuf,0) || !(inbuf[4] == 0xFF && inbuf[5] == 'E')) {
-		return false;
-	}
-
-	status = get_enc_ctx_num(inbuf, &enc_num);
-	if (!NT_STATUS_IS_OK(status)) {
-		return false;
-	}
-
-	/* Encrypted messages are 0xFF'E'<ctx> */
-	if (srv_trans_enc_ctx && enc_num == srv_enc_ctx()) {
-		return true;
-	}
-	return false;
-}
-
-/******************************************************************************
- Create an auth_ntlmssp_state and ensure pointer copy is correct.
-******************************************************************************/
-
-static NTSTATUS make_auth_ntlmssp(struct smb_srv_trans_enc_ctx *ec)
-{
-	NTSTATUS status = auth_ntlmssp_start(&ec->auth_ntlmssp_state);
-	if (!NT_STATUS_IS_OK(status)) {
-		return nt_status_squash(status);
-	}
-
-	/*
-	 * We must remember to update the pointer copy for the common
-	 * functions after any auth_ntlmssp_start/auth_ntlmssp_end.
-	 */
-	ec->es->s.ntlmssp_state = ec->auth_ntlmssp_state->ntlmssp_state;
-	return status;
-}
-
-/******************************************************************************
- Destroy an auth_ntlmssp_state and ensure pointer copy is correct.
-******************************************************************************/
-
-static void destroy_auth_ntlmssp(struct smb_srv_trans_enc_ctx *ec)
-{
-	/*
-	 * We must remember to update the pointer copy for the common
-	 * functions after any auth_ntlmssp_start/auth_ntlmssp_end.
-	 */
-
-	if (ec->auth_ntlmssp_state) {
-		auth_ntlmssp_end(&ec->auth_ntlmssp_state);
-		/* The auth_ntlmssp_end killed this already. */
-		ec->es->s.ntlmssp_state = NULL;
-	}
-}
-
-#if defined(HAVE_GSSAPI) && defined(HAVE_KRB5)
-
-/******************************************************************************
- Import a name.
-******************************************************************************/
-
-static NTSTATUS get_srv_gss_creds(const char *service,
-				const char *name,
-				gss_cred_usage_t cred_type,
-				gss_cred_id_t *p_srv_cred)
-{
-	OM_uint32 ret;
-	OM_uint32 min;
-	gss_name_t srv_name;
-	gss_buffer_desc input_name;
-	char *host_princ_s = NULL;
-	NTSTATUS status = NT_STATUS_OK;
-
-	gss_OID_desc nt_hostbased_service =
-	{10, CONST_DISCARD(char *,"\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x04")};
-
-	asprintf(&host_princ_s, "%s@%s", service, name);
-	if (host_princ_s == NULL) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	input_name.value = host_princ_s;
-	input_name.length = strlen(host_princ_s) + 1;
-
-	ret = gss_import_name(&min,
-				&input_name,
-				&nt_hostbased_service,
-				&srv_name);
-
-	DEBUG(10,("get_srv_gss_creds: imported name %s\n",
-		host_princ_s ));
-
-	if (ret != GSS_S_COMPLETE) {
-		SAFE_FREE(host_princ_s);
-		return map_nt_error_from_gss(ret, min);
-	}
-
-	/*
-	 * We're accessing the krb5.keytab file here.
- 	 * ensure we have permissions to do so.
- 	 */
-	become_root();
-
-	ret = gss_acquire_cred(&min,
-				srv_name,
-				GSS_C_INDEFINITE,
-				GSS_C_NULL_OID_SET,
-				cred_type,
-				p_srv_cred,
-				NULL,
-				NULL);
-	unbecome_root();
-
-	if (ret != GSS_S_COMPLETE) {
-		ADS_STATUS adss = ADS_ERROR_GSS(ret, min);
-		DEBUG(10,("get_srv_gss_creds: gss_acquire_cred failed with %s\n",
-			ads_errstr(adss)));
-		status = map_nt_error_from_gss(ret, min);
-	}
-
-	SAFE_FREE(host_princ_s);
-	gss_release_name(&min, &srv_name);
-	return status;
-}
-
-/******************************************************************************
- Create a gss state.
- Try and get the cifs/server at realm principal first, then fall back to
- host/server at realm.
-******************************************************************************/
-
-static NTSTATUS make_auth_gss(struct smb_srv_trans_enc_ctx *ec)
-{
-	NTSTATUS status;
-	gss_cred_id_t srv_cred;
-	fstring fqdn;
-
-	name_to_fqdn(fqdn, global_myname());
-	strlower_m(fqdn);
-
-	status = get_srv_gss_creds("cifs", fqdn, GSS_C_ACCEPT, &srv_cred);
-	if (!NT_STATUS_IS_OK(status)) {
-		status = get_srv_gss_creds("host", fqdn, GSS_C_ACCEPT, &srv_cred);
-		if (!NT_STATUS_IS_OK(status)) {
-			return nt_status_squash(status);
-		}
-	}
-
-	ec->es->s.gss_state = SMB_MALLOC_P(struct smb_tran_enc_state_gss);
-	if (!ec->es->s.gss_state) {
-		OM_uint32 min;
-		gss_release_cred(&min, &srv_cred);
-		return NT_STATUS_NO_MEMORY;
-	}
-	ZERO_STRUCTP(ec->es->s.gss_state);
-	ec->es->s.gss_state->creds = srv_cred;
-
-	/* No context yet. */
-	ec->es->s.gss_state->gss_ctx = GSS_C_NO_CONTEXT;
-
-	return NT_STATUS_OK;
-}
-#endif
-
-/******************************************************************************
- Shutdown a server encryption context.
-******************************************************************************/
-
-static void srv_free_encryption_context(struct smb_srv_trans_enc_ctx **pp_ec)
-{
-	struct smb_srv_trans_enc_ctx *ec = *pp_ec;
-
-	if (!ec) {
-		return;
-	}
-
-	if (ec->es) {
-		switch (ec->es->smb_enc_type) {
-			case SMB_TRANS_ENC_NTLM:
-				destroy_auth_ntlmssp(ec);
-				break;
-#if defined(HAVE_GSSAPI) && defined(HAVE_KRB5)
-			case SMB_TRANS_ENC_GSS:
-				break;
-#endif
-		}
-		common_free_encryption_state(&ec->es);
-	}
-
-	SAFE_FREE(ec);
-	*pp_ec = NULL;
-}
-
-/******************************************************************************
- Create a server encryption context.
-******************************************************************************/
-
-static NTSTATUS make_srv_encryption_context(enum smb_trans_enc_type smb_enc_type, struct smb_srv_trans_enc_ctx **pp_ec)
-{
-	struct smb_srv_trans_enc_ctx *ec;
-
-	*pp_ec = NULL;
-
-	ec = SMB_MALLOC_P(struct smb_srv_trans_enc_ctx);
-	if (!ec) {
-		return NT_STATUS_NO_MEMORY;
-	}
-	ZERO_STRUCTP(partial_srv_trans_enc_ctx);
-	ec->es = SMB_MALLOC_P(struct smb_trans_enc_state);
-	if (!ec->es) {
-		SAFE_FREE(ec);
-		return NT_STATUS_NO_MEMORY;
-	}
-	ZERO_STRUCTP(ec->es);
-	ec->es->smb_enc_type = smb_enc_type;
-	switch (smb_enc_type) {
-		case SMB_TRANS_ENC_NTLM:
-			{
-				NTSTATUS status = make_auth_ntlmssp(ec);
-				if (!NT_STATUS_IS_OK(status)) {
-					srv_free_encryption_context(&ec);
-					return status;
-				}
-			}
-			break;
-
-#if defined(HAVE_GSSAPI) && defined(HAVE_KRB5)
-		case SMB_TRANS_ENC_GSS:
-			/* Acquire our credentials by calling gss_acquire_cred here. */
-			{
-				NTSTATUS status = make_auth_gss(ec);
-				if (!NT_STATUS_IS_OK(status)) {
-					srv_free_encryption_context(&ec);
-					return status;
-				}
-			}
-			break;
-#endif
-		default:
-			srv_free_encryption_context(&ec);
-			return NT_STATUS_INVALID_PARAMETER;
-	}
-	*pp_ec = ec;
-	return NT_STATUS_OK;
-}
-
-/******************************************************************************
- Free an encryption-allocated buffer.
-******************************************************************************/
-
-void srv_free_enc_buffer(char *buf)
-{
-	/* We know this is an smb buffer, and we
-	 * didn't malloc, only copy, for a keepalive,
-	 * so ignore non-session messages. */
-
-	if(CVAL(buf,0)) {
-		return;
-	}
-
-	if (srv_trans_enc_ctx) {
-		common_free_enc_buffer(srv_trans_enc_ctx->es, buf);
-	}
-}
-
-/******************************************************************************
- Decrypt an incoming buffer.
-******************************************************************************/
-
-NTSTATUS srv_decrypt_buffer(char *buf)
-{
-	/* Ignore non-session messages. */
-	if(CVAL(buf,0)) {
-		return NT_STATUS_OK;
-	}
-
-	if (srv_trans_enc_ctx) {
-		return common_decrypt_buffer(srv_trans_enc_ctx->es, buf);
-	}
-
-	return NT_STATUS_OK;
-}
-
-/******************************************************************************
- Encrypt an outgoing buffer. Return the encrypted pointer in buf_out.
-******************************************************************************/
-
-NTSTATUS srv_encrypt_buffer(char *buf, char **buf_out)
-{
-	*buf_out = buf;
-
-	/* Ignore non-session messages. */
-	if(CVAL(buf,0)) {
-		return NT_STATUS_OK;
-	}
-
-	if (srv_trans_enc_ctx) {
-		return common_encrypt_buffer(srv_trans_enc_ctx->es, buf, buf_out);
-	}
-	/* Not encrypting. */
-	return NT_STATUS_OK;
-}
-
-/******************************************************************************
- Do the gss encryption negotiation. Parameters are in/out.
- Until success we do everything on the partial enc ctx.
-******************************************************************************/
-
-#if defined(HAVE_GSSAPI) && defined(HAVE_KRB5)
-static NTSTATUS srv_enc_spnego_gss_negotiate(unsigned char **ppdata, size_t *p_data_size, DATA_BLOB secblob)
-{
-	OM_uint32 ret;
-	OM_uint32 min;
-	OM_uint32 flags = 0;
-	gss_buffer_desc in_buf, out_buf;
-	struct smb_tran_enc_state_gss *gss_state;
-	DATA_BLOB auth_reply = data_blob_null;
-	DATA_BLOB response = data_blob_null;
-	NTSTATUS status;
-
-	if (!partial_srv_trans_enc_ctx) {
-		status = make_srv_encryption_context(SMB_TRANS_ENC_GSS, &partial_srv_trans_enc_ctx);
-		if (!NT_STATUS_IS_OK(status)) {
-			return status;
-		}
-	}
-
-	gss_state = partial_srv_trans_enc_ctx->es->s.gss_state;
-
-	in_buf.value = secblob.data;
-	in_buf.length = secblob.length;
-
-	out_buf.value = NULL;
-	out_buf.length = 0;
-
-	become_root();
-
-	ret = gss_accept_sec_context(&min,
-				&gss_state->gss_ctx,
-				gss_state->creds,
-				&in_buf,
-				GSS_C_NO_CHANNEL_BINDINGS,
-				NULL,
-				NULL,		/* Ignore oids. */
-				&out_buf,	/* To return. */
-				&flags,
-				NULL,		/* Ingore time. */
-				NULL);		/* Ignore delegated creds. */
-	unbecome_root();
-
-	status = gss_err_to_ntstatus(ret, min);
-	if (ret != GSS_S_COMPLETE && ret != GSS_S_CONTINUE_NEEDED) {
-		return status;
-	}
-
-	/* Ensure we've got sign+seal available. */
-	if (ret == GSS_S_COMPLETE) {
-		if ((flags & (GSS_C_INTEG_FLAG|GSS_C_CONF_FLAG|GSS_C_REPLAY_FLAG|GSS_C_SEQUENCE_FLAG)) !=
-				(GSS_C_INTEG_FLAG|GSS_C_CONF_FLAG|GSS_C_REPLAY_FLAG|GSS_C_SEQUENCE_FLAG)) {
-			DEBUG(0,("srv_enc_spnego_gss_negotiate: quality of service not good enough "
-				"for SMB sealing.\n"));
-			gss_release_buffer(&min, &out_buf);
-			return NT_STATUS_ACCESS_DENIED;
-		}
-	}
-
-	auth_reply = data_blob(out_buf.value, out_buf.length);
-	gss_release_buffer(&min, &out_buf);
-
-	/* Wrap in SPNEGO. */
-	response = spnego_gen_auth_response(&auth_reply, status, OID_KERBEROS5);
-	data_blob_free(&auth_reply);
-
-	SAFE_FREE(*ppdata);
-	*ppdata = response.data;
-	*p_data_size = response.length;
-
-	return status;
-}
-#endif
-
-/******************************************************************************
- Do the NTLM SPNEGO (or raw) encryption negotiation. Parameters are in/out.
- Until success we do everything on the partial enc ctx.
-******************************************************************************/
-
-static NTSTATUS srv_enc_ntlm_negotiate(unsigned char **ppdata, size_t *p_data_size, DATA_BLOB secblob, bool spnego_wrap)
-{
-	NTSTATUS status;
-	DATA_BLOB chal = data_blob_null;
-	DATA_BLOB response = data_blob_null;
-
-	status = make_srv_encryption_context(SMB_TRANS_ENC_NTLM, &partial_srv_trans_enc_ctx);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	status = auth_ntlmssp_update(partial_srv_trans_enc_ctx->auth_ntlmssp_state, secblob, &chal);
-
-	/* status here should be NT_STATUS_MORE_PROCESSING_REQUIRED
-	 * for success ... */
-
-	if (spnego_wrap) {
-		response = spnego_gen_auth_response(&chal, status, OID_NTLMSSP);
-		data_blob_free(&chal);
-	} else {
-		/* Return the raw blob. */
-		response = chal;
-	}
-
-	SAFE_FREE(*ppdata);
-	*ppdata = response.data;
-	*p_data_size = response.length;
-	return status;
-}
-
-/******************************************************************************
- Do the SPNEGO encryption negotiation. Parameters are in/out.
- Based off code in smbd/sesssionsetup.c
- Until success we do everything on the partial enc ctx.
-******************************************************************************/
-
-static NTSTATUS srv_enc_spnego_negotiate(connection_struct *conn,
-					unsigned char **ppdata,
-					size_t *p_data_size,
-					unsigned char **pparam,
-					size_t *p_param_size)
-{
-	NTSTATUS status;
-	DATA_BLOB blob = data_blob_null;
-	DATA_BLOB secblob = data_blob_null;
-	char *kerb_mech = NULL;
-
-	blob = data_blob_const(*ppdata, *p_data_size);
-
-	status = parse_spnego_mechanisms(blob, &secblob, &kerb_mech);
-	if (!NT_STATUS_IS_OK(status)) {
-		return nt_status_squash(status);
-	}
-
-	/* We should have no partial context at this point. */
-
-	srv_free_encryption_context(&partial_srv_trans_enc_ctx);
-
-	if (kerb_mech) {
-		SAFE_FREE(kerb_mech);
-
-#if defined(HAVE_GSSAPI) && defined(HAVE_KRB5)
-		status = srv_enc_spnego_gss_negotiate(ppdata, p_data_size, secblob);
-#else
-		/* Currently we don't SPNEGO negotiate
-		 * back to NTLMSSP as we do in sessionsetupX. We should... */
-		return NT_STATUS_LOGON_FAILURE;
-#endif
-	} else {
-		status = srv_enc_ntlm_negotiate(ppdata, p_data_size, secblob, true);
-	}
-
-	data_blob_free(&secblob);
-
-	if (!NT_STATUS_EQUAL(status,NT_STATUS_MORE_PROCESSING_REQUIRED) && !NT_STATUS_IS_OK(status)) {
-		srv_free_encryption_context(&partial_srv_trans_enc_ctx);
-		return nt_status_squash(status);
-	}
-
-	if (NT_STATUS_IS_OK(status)) {
-		/* Return the context we're using for this encryption state. */
-		if (!(*pparam = SMB_MALLOC_ARRAY(unsigned char, 2))) {
-			return NT_STATUS_NO_MEMORY;
-		}
-		SSVAL(*pparam,0,partial_srv_trans_enc_ctx->es->enc_ctx_num);
-		*p_param_size = 2;
-	}
-
-	return status;
-}
-
-/******************************************************************************
- Complete a SPNEGO encryption negotiation. Parameters are in/out.
- We only get this for a NTLM auth second stage.
-******************************************************************************/
-
-static NTSTATUS srv_enc_spnego_ntlm_auth(connection_struct *conn,
-					unsigned char **ppdata,
-					size_t *p_data_size,
-					unsigned char **pparam,
-					size_t *p_param_size)
-{
-	NTSTATUS status;
-	DATA_BLOB blob = data_blob_null;
-	DATA_BLOB auth = data_blob_null;
-	DATA_BLOB auth_reply = data_blob_null;
-	DATA_BLOB response = data_blob_null;
-	struct smb_srv_trans_enc_ctx *ec = partial_srv_trans_enc_ctx;
-
-	/* We must have a partial context here. */
-
-	if (!ec || !ec->es || ec->auth_ntlmssp_state == NULL || ec->es->smb_enc_type != SMB_TRANS_ENC_NTLM) {
-		srv_free_encryption_context(&partial_srv_trans_enc_ctx);
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	blob = data_blob_const(*ppdata, *p_data_size);
-	if (!spnego_parse_auth(blob, &auth)) {
-		srv_free_encryption_context(&partial_srv_trans_enc_ctx);
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	status = auth_ntlmssp_update(ec->auth_ntlmssp_state, auth, &auth_reply);
-	data_blob_free(&auth);
-
-	/* From RFC4178.
-	 *
-	 *    supportedMech
-	 *
-	 *          This field SHALL only be present in the first reply from the
-	 *                target.
-	 * So set mechOID to NULL here.
-	 */
-
-	response = spnego_gen_auth_response(&auth_reply, status, NULL);
-	data_blob_free(&auth_reply);
-
-	if (NT_STATUS_IS_OK(status)) {
-		/* Return the context we're using for this encryption state. */
-		if (!(*pparam = SMB_MALLOC_ARRAY(unsigned char, 2))) {
-			return NT_STATUS_NO_MEMORY;
-		}
-		SSVAL(*pparam,0,ec->es->enc_ctx_num);
-		*p_param_size = 2;
-	}
-
-	SAFE_FREE(*ppdata);
-	*ppdata = response.data;
-	*p_data_size = response.length;
-	return status;
-}
-
-/******************************************************************************
- Raw NTLM encryption negotiation. Parameters are in/out.
- This function does both steps.
-******************************************************************************/
-
-static NTSTATUS srv_enc_raw_ntlm_auth(connection_struct *conn,
-					unsigned char **ppdata,
-					size_t *p_data_size,
-					unsigned char **pparam,
-					size_t *p_param_size)
-{
-	NTSTATUS status;
-	DATA_BLOB blob = data_blob_const(*ppdata, *p_data_size);
-	DATA_BLOB response = data_blob_null;
-	struct smb_srv_trans_enc_ctx *ec;
-
-	if (!partial_srv_trans_enc_ctx) {
-		/* This is the initial step. */
-		status = srv_enc_ntlm_negotiate(ppdata, p_data_size, blob, false);
-		if (!NT_STATUS_EQUAL(status,NT_STATUS_MORE_PROCESSING_REQUIRED) && !NT_STATUS_IS_OK(status)) {
-			srv_free_encryption_context(&partial_srv_trans_enc_ctx);
-			return nt_status_squash(status);
-		}
-		return status;
-	}
-
-	ec = partial_srv_trans_enc_ctx;
-	if (!ec || !ec->es || ec->auth_ntlmssp_state == NULL || ec->es->smb_enc_type != SMB_TRANS_ENC_NTLM) {
-		srv_free_encryption_context(&partial_srv_trans_enc_ctx);
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	/* Second step. */
-	status = auth_ntlmssp_update(partial_srv_trans_enc_ctx->auth_ntlmssp_state, blob, &response);
-
-	if (NT_STATUS_IS_OK(status)) {
-		/* Return the context we're using for this encryption state. */
-		if (!(*pparam = SMB_MALLOC_ARRAY(unsigned char, 2))) {
-			return NT_STATUS_NO_MEMORY;
-		}
-		SSVAL(*pparam,0,ec->es->enc_ctx_num);
-		*p_param_size = 2;
-	}
-
-	/* Return the raw blob. */
-	SAFE_FREE(*ppdata);
-	*ppdata = response.data;
-	*p_data_size = response.length;
-	return status;
-}
-
-/******************************************************************************
- Do the SPNEGO encryption negotiation. Parameters are in/out.
-******************************************************************************/
-
-NTSTATUS srv_request_encryption_setup(connection_struct *conn,
-					unsigned char **ppdata,
-					size_t *p_data_size,
-					unsigned char **pparam,
-					size_t *p_param_size)
-{
-	unsigned char *pdata = *ppdata;
-
-	SAFE_FREE(*pparam);
-	*p_param_size = 0;
-
-	if (*p_data_size < 1) {
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	if (pdata[0] == ASN1_APPLICATION(0)) {
-		/* its a negTokenTarg packet */
-		return srv_enc_spnego_negotiate(conn, ppdata, p_data_size, pparam, p_param_size);
-	}
-
-	if (pdata[0] == ASN1_CONTEXT(1)) {
-		/* It's an auth packet */
-		return srv_enc_spnego_ntlm_auth(conn, ppdata, p_data_size, pparam, p_param_size);
-	}
-
-	/* Maybe it's a raw unwrapped auth ? */
-	if (*p_data_size < 7) {
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	if (strncmp((char *)pdata, "NTLMSSP", 7) == 0) {
-		return srv_enc_raw_ntlm_auth(conn, ppdata, p_data_size, pparam, p_param_size);
-	}
-
-	DEBUG(1,("srv_request_encryption_setup: Unknown packet\n"));
-
-	return NT_STATUS_LOGON_FAILURE;
-}
-
-/******************************************************************************
- Negotiation was successful - turn on server-side encryption.
-******************************************************************************/
-
-static NTSTATUS check_enc_good(struct smb_srv_trans_enc_ctx *ec)
-{
-	if (!ec || !ec->es) {
-		return NT_STATUS_LOGON_FAILURE;
-	}
-
-	if (ec->es->smb_enc_type == SMB_TRANS_ENC_NTLM) {
-		if ((ec->es->s.ntlmssp_state->neg_flags & (NTLMSSP_NEGOTIATE_SIGN|NTLMSSP_NEGOTIATE_SEAL)) !=
-				(NTLMSSP_NEGOTIATE_SIGN|NTLMSSP_NEGOTIATE_SEAL)) {
-			return NT_STATUS_INVALID_PARAMETER;
-		}
-	}
-	/* Todo - check gssapi case. */
-
-	return NT_STATUS_OK;
-}
-
-/******************************************************************************
- Negotiation was successful - turn on server-side encryption.
-******************************************************************************/
-
-NTSTATUS srv_encryption_start(connection_struct *conn)
-{
-	NTSTATUS status;
-
-	/* Check that we are really doing sign+seal. */
-	status = check_enc_good(partial_srv_trans_enc_ctx);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-	/* Throw away the context we're using currently (if any). */
-	srv_free_encryption_context(&srv_trans_enc_ctx);
-
-	/* Steal the partial pointer. Deliberate shallow copy. */
-	srv_trans_enc_ctx = partial_srv_trans_enc_ctx;
-	srv_trans_enc_ctx->es->enc_on = true;
-
-	partial_srv_trans_enc_ctx = NULL;
-
-	DEBUG(1,("srv_encryption_start: context negotiated\n"));
-	return NT_STATUS_OK;
-}
-
-/******************************************************************************
- Shutdown all server contexts.
-******************************************************************************/
-
-void server_encryption_shutdown(void)
-{
-	srv_free_encryption_context(&partial_srv_trans_enc_ctx);
-	srv_free_encryption_context(&srv_trans_enc_ctx);
-}

Modified: branches/samba/upstream/source/smbd/sec_ctx.c
===================================================================
--- branches/samba/upstream/source/smbd/sec_ctx.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/sec_ctx.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -33,27 +34,10 @@
 static int sec_ctx_stack_ndx;
 
 /****************************************************************************
- Are two UNIX tokens equal ?
-****************************************************************************/
-
-bool unix_token_equal(const UNIX_USER_TOKEN *t1, const UNIX_USER_TOKEN *t2)
-{
-	if (t1->uid != t2->uid || t1->gid != t2->gid ||
-			t1->ngroups != t2->ngroups) {
-		return false;
-	}
-	if (memcmp(t1->groups, t2->groups,
-			t1->ngroups*sizeof(gid_t)) != 0) {
-		return false;
-	}
-	return true;
-}
-
-/****************************************************************************
  Become the specified uid.
 ****************************************************************************/
 
-static bool become_uid(uid_t uid)
+static BOOL become_uid(uid_t uid)
 {
 	/* Check for dodgy uid values */
 
@@ -80,7 +64,7 @@
  Become the specified gid.
 ****************************************************************************/
 
-static bool become_gid(gid_t gid)
+static BOOL become_gid(gid_t gid)
 {
 	/* Check for dodgy gid values */
 
@@ -105,7 +89,7 @@
  Become the specified uid and gid.
 ****************************************************************************/
 
-static bool become_id(uid_t uid, gid_t gid)
+static BOOL become_id(uid_t uid, gid_t gid)
 {
 	return become_gid(gid) && become_uid(uid);
 }
@@ -200,7 +184,7 @@
  one.  User changes are done using the set_sec_ctx() function.
 ****************************************************************************/
 
-bool push_sec_ctx(void)
+BOOL push_sec_ctx(void)
 {
 	struct sec_ctx *ctx_p;
 
@@ -208,7 +192,7 @@
 
 	if (sec_ctx_stack_ndx == MAX_SEC_CTX_DEPTH) {
 		DEBUG(0, ("Security context stack overflow!\n"));
-		smb_panic("Security context stack overflow!");
+		smb_panic("Security context stack overflow!\n");
 	}
 
 	/* Store previous user context */
@@ -244,73 +228,6 @@
 }
 
 /****************************************************************************
- Change UNIX security context. Calls panic if not successful so no return value.
-****************************************************************************/
-
-#ifndef HAVE_DARWIN_INITGROUPS
-
-/* Normal credential switch path. */
-
-static void set_unix_security_ctx(uid_t uid, gid_t gid, int ngroups, gid_t *groups)
-{
-	/* Start context switch */
-	gain_root();
-#ifdef HAVE_SETGROUPS
-	if (sys_setgroups(gid, ngroups, groups) != 0 && !non_root_mode()) {
-		smb_panic("sys_setgroups failed");
-	}
-#endif
-	become_id(uid, gid);
-	/* end context switch */
-}
-
-#else /* HAVE_DARWIN_INITGROUPS */
-
-/* The Darwin groups implementation is a little unusual. The list of
-* groups in the kernel credential is not exhaustive, but more like
-* a cache. The full group list is held in userspace and checked
-* dynamically.
-*
-* This is an optional mechanism, and setgroups(2) opts out
-* of it. That is, if you call setgroups, then the list of groups you
-* set are the only groups that are ever checked. This is not what we
-* want. We want to opt in to the dynamic resolution mechanism, so we
-* need to specify the uid of the user whose group list (cache) we are
-* setting.
-*
-* The Darwin rules are:
-*  1. Thou shalt setegid, initgroups and seteuid IN THAT ORDER
-*  2. Thou shalt not pass more that NGROUPS_MAX to initgroups
-*  3. Thou shalt leave the first entry in the groups list well alone
-*/
-
-#include <sys/syscall.h>
-
-static void set_unix_security_ctx(uid_t uid, gid_t gid, int ngroups, gid_t *groups)
-{
-	int max = groups_max();
-
-	/* Start context switch */
-	gain_root();
-
-	become_gid(gid);
-
-
-	if (syscall(SYS_initgroups, (ngroups > max) ? max : ngroups,
-			groups, uid) == -1 && !non_root_mode()) {
-		DEBUG(0, ("WARNING: failed to set group list "
-			"(%d groups) for UID %ld: %s\n",
-			ngroups, uid, strerror(errno)));
-		smb_panic("sys_setgroups failed");
-	}
-
-	become_uid(uid);
-	/* end context switch */
-}
-
-#endif /* HAVE_DARWIN_INITGROUPS */
-
-/****************************************************************************
  Set the current security context to a given user.
 ****************************************************************************/
 
@@ -326,9 +243,12 @@
 	debug_nt_user_token(DBGC_CLASS, 5, token);
 	debug_unix_user_token(DBGC_CLASS, 5, uid, gid, ngroups, groups);
 
-	/* Change uid, gid and supplementary group list. */
-	set_unix_security_ctx(uid, gid, ngroups, groups);
+	gain_root();
 
+#ifdef HAVE_SETGROUPS
+	sys_setgroups(ngroups, groups);
+#endif
+
 	ctx_p->ut.ngroups = ngroups;
 
 	SAFE_FREE(ctx_p->ut.groups);
@@ -357,6 +277,8 @@
 		ctx_p->token = NULL;
 	}
 
+	become_id(uid, gid);
+
 	ctx_p->ut.uid = uid;
 	ctx_p->ut.gid = gid;
 
@@ -384,7 +306,7 @@
  Pop a security context from the stack.
 ****************************************************************************/
 
-bool pop_sec_ctx(void)
+BOOL pop_sec_ctx(void)
 {
 	struct sec_ctx *ctx_p;
 	struct sec_ctx *prev_ctx_p;
@@ -393,7 +315,7 @@
 
 	if (sec_ctx_stack_ndx == 0) {
 		DEBUG(0, ("Security context stack underflow!\n"));
-		smb_panic("Security context stack underflow!");
+		smb_panic("Security context stack underflow!\n");
 	}
 
 	ctx_p = &sec_ctx_stack[sec_ctx_stack_ndx];
@@ -412,14 +334,16 @@
 
 	sec_ctx_stack_ndx--;
 
+	gain_root();
+
 	prev_ctx_p = &sec_ctx_stack[sec_ctx_stack_ndx];
 
-	/* Change uid, gid and supplementary group list. */
-	set_unix_security_ctx(prev_ctx_p->ut.uid,
-			prev_ctx_p->ut.gid,
-			prev_ctx_p->ut.ngroups,
-			prev_ctx_p->ut.groups);
+#ifdef HAVE_SETGROUPS
+	sys_setgroups(prev_ctx_p->ut.ngroups, prev_ctx_p->ut.groups);
+#endif
 
+	become_id(prev_ctx_p->ut.uid, prev_ctx_p->ut.gid);
+
 	/* Update current_user stuff */
 
 	current_user.ut.uid = prev_ctx_p->ut.uid;

Modified: branches/samba/upstream/source/smbd/server.c
===================================================================
--- branches/samba/upstream/source/smbd/server.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/server.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,24 +1,23 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    Main SMB server routines
    Copyright (C) Andrew Tridgell		1992-1998
    Copyright (C) Martin Pool			2002
    Copyright (C) Jelmer Vernooij		2002-2003
-   Copyright (C) Volker Lendecke		1993-2007
-   Copyright (C) Jeremy Allison			1993-2007
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -27,7 +26,14 @@
 
 static int am_parent = 1;
 
+/* the last message the was processed */
+int last_message = -1;
+
+/* a useful macro to debug the last message processed */
+#define LAST_MESSAGE() (last_message != -1 ? smb_fn_name(last_message) : "")
+
 extern struct auth_context *negprot_global_auth_context;
+extern pstring user_socket_options;
 extern SIG_ATOMIC_T got_sig_term;
 extern SIG_ATOMIC_T reload_after_sighup;
 static SIG_ATOMIC_T got_sig_cld;
@@ -52,36 +58,15 @@
 static void smbd_set_server_fd(int fd)
 {
 	server_fd = fd;
+	client_setfd(fd);
 }
 
-int get_client_fd(void)
-{
-	return server_fd;
-}
-
-int client_get_tcp_info(struct sockaddr_in *server, struct sockaddr_in *client)
-{
-	socklen_t length;
-	if (server_fd == -1) {
-		return -1;
-	}
-	length = sizeof(*server);
-	if (getsockname(server_fd, (struct sockaddr *)server, &length) != 0) {
-		return -1;
-	}
-	length = sizeof(*client);
-	if (getpeername(server_fd, (struct sockaddr *)client, &length) != 0) {
-		return -1;
-	}
-	return 0;
-}
-
 struct event_context *smbd_event_context(void)
 {
 	static struct event_context *ctx;
 
 	if (!ctx && !(ctx = event_context_init(NULL))) {
-		smb_panic("Could not init smbd event context");
+		smb_panic("Could not init smbd event context\n");
 	}
 	return ctx;
 }
@@ -92,36 +77,19 @@
 
 	if (!ctx && !(ctx = messaging_init(NULL, server_id_self(),
 					   smbd_event_context()))) {
-		smb_panic("Could not init smbd messaging context");
+		smb_panic("Could not init smbd messaging context\n");
 	}
 	return ctx;
 }
 
-struct memcache *smbd_memcache(void)
-{
-	static struct memcache *cache;
-
-	if (!cache
-	    && !(cache = memcache_init(NULL,
-				       lp_max_stat_cache_size()*1024))) {
-
-		smb_panic("Could not init smbd memcache");
-	}
-	return cache;
-}
-
 /*******************************************************************
  What to do when smb.conf is updated.
  ********************************************************************/
 
-static void smb_conf_updated(struct messaging_context *msg,
-			     void *private_data,
-			     uint32_t msg_type,
-			     struct server_id server_id,
-			     DATA_BLOB *data)
+static void smb_conf_updated(int msg_type, struct process_id src,
+			     void *buf, size_t len, void *private_data)
 {
-	DEBUG(10,("smb_conf_updated: Got message saying smb.conf was "
-		  "updated. Reloading.\n"));
+	DEBUG(10,("smb_conf_updated: Got message saying smb.conf was updated. Reloading.\n"));
 	reload_services(False);
 }
 
@@ -130,13 +98,10 @@
  Delete a statcache entry.
  ********************************************************************/
 
-static void smb_stat_cache_delete(struct messaging_context *msg,
-				  void *private_data,
-				  uint32_t msg_tnype,
-				  struct server_id server_id,
-				  DATA_BLOB *data)
+static void smb_stat_cache_delete(int msg_type, struct process_id src,
+				  void *buf, size_t len, void *private_data)
 {
-	const char *name = (const char *)data->data;
+	const char *name = (const char *)buf;
 	DEBUG(10,("smb_stat_cache_delete: delete name %s\n", name));
 	stat_cache_delete(name);
 }
@@ -184,21 +149,37 @@
  somewhere else.
 ****************************************************************************/
 
-static void msg_sam_sync(struct messaging_context *msg,
-			 void *private_data,
-			 uint32_t msg_type,
-			 struct server_id server_id,
-			 DATA_BLOB *data)
+static void msg_sam_sync(int UNUSED(msg_type), struct process_id UNUSED(pid),
+			 void *UNUSED(buf), size_t UNUSED(len),
+			 void *private_data)
 {
         DEBUG(10, ("** sam sync message received, ignoring\n"));
 }
 
+/****************************************************************************
+ Process a sam sync replicate message - not sure whether to do this here or
+ somewhere else.
+****************************************************************************/
 
+static void msg_sam_repl(int msg_type, struct process_id pid,
+			 void *buf, size_t len, void *private_data)
+{
+        uint32 low_serial;
+
+        if (len != sizeof(uint32))
+                return;
+
+        low_serial = *((uint32 *)buf);
+
+        DEBUG(3, ("received sam replication message, serial = 0x%04x\n",
+                  low_serial));
+}
+
 /****************************************************************************
  Open the socket communication - inetd.
 ****************************************************************************/
 
-static bool open_sockets_inetd(void)
+static BOOL open_sockets_inetd(void)
 {
 	/* Started from inetd. fd 0 is the socket. */
 	/* We will abort gracefully when the client or remote system 
@@ -209,49 +190,43 @@
 	close_low_fds(False); /* Don't close stderr */
 	
 	set_socket_options(smbd_server_fd(),"SO_KEEPALIVE");
-	set_socket_options(smbd_server_fd(), lp_socket_options());
+	set_socket_options(smbd_server_fd(), user_socket_options);
 
 	return True;
 }
 
-static void msg_exit_server(struct messaging_context *msg,
-			    void *private_data,
-			    uint32_t msg_type,
-			    struct server_id server_id,
-			    DATA_BLOB *data)
+static void msg_exit_server(int msg_type, struct process_id src,
+			    void *buf, size_t len, void *private_data)
 {
 	DEBUG(3, ("got a SHUTDOWN message\n"));
 	exit_server_cleanly(NULL);
 }
 
 #ifdef DEVELOPER
-static void msg_inject_fault(struct messaging_context *msg,
-			     void *private_data,
-			     uint32_t msg_type,
-			     struct server_id src,
-			     DATA_BLOB *data)
+static void msg_inject_fault(int msg_type, struct process_id src,
+			    void *buf, size_t len, void *private_data)
 {
 	int sig;
 
-	if (data->length != sizeof(sig)) {
+	if (len != sizeof(int)) {
 		
-		DEBUG(0, ("Process %s sent bogus signal injection request\n",
-			  procid_str_static(&src)));
+		DEBUG(0, ("Process %llu sent bogus signal injection request\n",
+			(unsigned long long)src.pid));
 		return;
 	}
 
-	sig = *(int *)data->data;
+	sig = *(int *)buf;
 	if (sig == -1) {
 		exit_server("internal error injected");
 		return;
 	}
 
 #if HAVE_STRSIGNAL
-	DEBUG(0, ("Process %s requested injection of signal %d (%s)\n",
-		  procid_str_static(&src), sig, strsignal(sig)));
+	DEBUG(0, ("Process %llu requested injection of signal %d (%s)\n",
+		    (unsigned long long)src.pid, sig, strsignal(sig)));
 #else
-	DEBUG(0, ("Process %s requested injection of signal %d\n",
-		  procid_str_static(&src), sig));
+	DEBUG(0, ("Process %llu requested injection of signal %d\n",
+		    (unsigned long long)src.pid, sig));
 #endif
 
 	kill(sys_getpid(), sig);
@@ -285,20 +260,10 @@
 	num_children += 1;
 }
 
-static void remove_child_pid(pid_t pid, bool unclean_shutdown)
+static void remove_child_pid(pid_t pid)
 {
 	struct child_pid *child;
 
-	if (unclean_shutdown) {
-		/* a child terminated uncleanly so tickle all processes to see 
-		   if they can grab any of the pending locks
-		*/
-		messaging_send_buf(smbd_messaging_context(), procid_self(), 
-				   MSG_SMB_BRL_VALIDATE, NULL, 0);
-		message_send_all(smbd_messaging_context(), 
-				 MSG_SMB_UNLOCK, NULL, 0, NULL);
-	}
-
 	if (lp_max_smbd_processes() == 0) {
 		/* Don't bother with the child list if we don't care anyway */
 		return;
@@ -321,7 +286,7 @@
  Have we reached the process limit ?
 ****************************************************************************/
 
-static bool allowable_number_of_smbd_processes(void)
+static BOOL allowable_number_of_smbd_processes(void)
 {
 	int max_processes = lp_max_smbd_processes();
 
@@ -335,7 +300,7 @@
  Open the socket communication.
 ****************************************************************************/
 
-static bool open_sockets_smbd(bool is_daemon, bool interactive, const char *smb_ports)
+static BOOL open_sockets_smbd(BOOL is_daemon, BOOL interactive, const char *smb_ports)
 {
 	int num_interfaces = iface_count();
 	int num_sockets = 0;
@@ -345,13 +310,12 @@
 	int maxfd = 0;
 	int i;
 	char *ports;
-	struct dns_reg_state * dns_reg = NULL;
-	unsigned dns_port = 0;
 
 	if (!is_daemon) {
 		return open_sockets_inetd();
 	}
 
+		
 #ifdef HAVE_ATEXIT
 	{
 		static int atexit_set;
@@ -364,7 +328,7 @@
 
 	/* Stop zombies */
 	CatchSignal(SIGCLD, sig_cld);
-
+				
 	FD_ZERO(&listen_set);
 
 	/* use a reasonable default set of ports - listing on 445 and 139 */
@@ -380,65 +344,42 @@
 	}
 
 	if (lp_interfaces() && lp_bind_interfaces_only()) {
-		/* We have been given an interfaces line, and been
+		/* We have been given an interfaces line, and been 
 		   told to only bind to those interfaces. Create a
 		   socket per interface and bind to only these.
 		*/
-
+		
 		/* Now open a listen socket for each of the
 		   interfaces. */
 		for(i = 0; i < num_interfaces; i++) {
-			TALLOC_CTX *frame = NULL;
-			const struct sockaddr_storage *ifss =
-					iface_n_sockaddr_storage(i);
-			char *tok;
+			struct in_addr *ifip = iface_n_ip(i);
+			fstring tok;
 			const char *ptr;
 
-			if (ifss == NULL) {
-				DEBUG(0,("open_sockets_smbd: "
-					"interface %d has NULL IP address !\n",
-					i));
+			if(ifip == NULL) {
+				DEBUG(0,("open_sockets_smbd: interface %d has NULL IP address !\n", i));
 				continue;
 			}
 
-			frame = talloc_stackframe();
-			for (ptr=ports;
-					next_token_talloc(frame,&ptr, &tok, " \t,");) {
+			for (ptr=ports; next_token(&ptr, tok, " \t,", sizeof(tok)); ) {
 				unsigned port = atoi(tok);
 				if (port == 0 || port > 0xffff) {
 					continue;
 				}
+				s = fd_listenset[num_sockets] = open_socket_in(SOCK_STREAM, port, 0, ifip->s_addr, True);
+				if(s == -1)
+					return False;
 
-				/* Keep the first port for mDNS service
-				 * registration.
-				 */
-				if (dns_port == 0) {
-					dns_port = port;
-				}
-
-				s = fd_listenset[num_sockets] =
-					open_socket_in(SOCK_STREAM,
-							port,
-							num_sockets == 0 ? 0 : 2,
-							ifss,
-							true);
-				if(s == -1) {
-					continue;
-				}
-
 				/* ready to listen */
-				set_socket_options(s,"SO_KEEPALIVE");
-				set_socket_options(s,lp_socket_options());
-
-				/* Set server socket to
-				 * non-blocking for the accept. */
-				set_blocking(s,False);
-
+				set_socket_options(s,"SO_KEEPALIVE"); 
+				set_socket_options(s,user_socket_options);
+     
+				/* Set server socket to non-blocking for the accept. */
+				set_blocking(s,False); 
+ 
 				if (listen(s, SMBD_LISTEN_BACKLOG) == -1) {
-					DEBUG(0,("open_sockets_smbd: listen: "
-						"%s\n", strerror(errno)));
+					DEBUG(0,("listen: %s\n",strerror(errno)));
 					close(s);
-					TALLOC_FREE(frame);
 					return False;
 				}
 				FD_SET(s,&listen_set);
@@ -446,193 +387,99 @@
 
 				num_sockets++;
 				if (num_sockets >= FD_SETSIZE) {
-					DEBUG(0,("open_sockets_smbd: Too "
-						"many sockets to bind to\n"));
-					TALLOC_FREE(frame);
+					DEBUG(0,("open_sockets_smbd: Too many sockets to bind to\n"));
 					return False;
 				}
 			}
-			TALLOC_FREE(frame);
 		}
 	} else {
 		/* Just bind to 0.0.0.0 - accept connections
 		   from anywhere. */
 
-		TALLOC_CTX *frame = talloc_stackframe();
-		char *tok;
+		fstring tok;
 		const char *ptr;
-		const char *sock_addr = lp_socket_address();
-		char *sock_tok;
-		const char *sock_ptr;
 
-		if (strequal(sock_addr, "0.0.0.0") ||
-				strequal(sock_addr, "::")) {
-#if HAVE_IPV6
-			sock_addr = "::,0.0.0.0";
-#else
-			sock_addr = "0.0.0.0";
-#endif
-		}
+		num_interfaces = 1;
+		
+		for (ptr=ports; next_token(&ptr, tok, " \t,", sizeof(tok)); ) {
+			unsigned port = atoi(tok);
+			if (port == 0 || port > 0xffff) continue;
+			/* open an incoming socket */
+			s = open_socket_in(SOCK_STREAM, port, 0,
+					   interpret_addr(lp_socket_address()),True);
+			if (s == -1)
+				return(False);
+		
+			/* ready to listen */
+			set_socket_options(s,"SO_KEEPALIVE"); 
+			set_socket_options(s,user_socket_options);
+			
+			/* Set server socket to non-blocking for the accept. */
+			set_blocking(s,False); 
+ 
+			if (listen(s, SMBD_LISTEN_BACKLOG) == -1) {
+				DEBUG(0,("open_sockets_smbd: listen: %s\n",
+					 strerror(errno)));
+				close(s);
+				return False;
+			}
 
-		for (sock_ptr=sock_addr;
-				next_token_talloc(frame, &sock_ptr, &sock_tok, " \t,"); ) {
-			for (ptr=ports; next_token_talloc(frame, &ptr, &tok, " \t,"); ) {
-				struct sockaddr_storage ss;
+			fd_listenset[num_sockets] = s;
+			FD_SET(s,&listen_set);
+			maxfd = MAX( maxfd, s);
 
-				unsigned port = atoi(tok);
-				if (port == 0 || port > 0xffff) {
-					continue;
-				}
+			num_sockets++;
 
-				/* Keep the first port for mDNS service
-				 * registration.
-				 */
-				if (dns_port == 0) {
-					dns_port = port;
-				}
-
-				/* open an incoming socket */
-				if (!interpret_string_addr(&ss, sock_tok,
-						AI_NUMERICHOST|AI_PASSIVE)) {
-					continue;
-				}
-
-				s = open_socket_in(SOCK_STREAM,
-						port,
-						num_sockets == 0 ? 0 : 2,
-						&ss,
-						true);
-				if (s == -1) {
-					continue;
-				}
-
-				/* ready to listen */
-				set_socket_options(s,"SO_KEEPALIVE");
-				set_socket_options(s,lp_socket_options());
-
-				/* Set server socket to non-blocking
-				 * for the accept. */
-				set_blocking(s,False);
-
-				if (listen(s, SMBD_LISTEN_BACKLOG) == -1) {
-					DEBUG(0,("open_sockets_smbd: "
-						"listen: %s\n",
-						 strerror(errno)));
-					close(s);
-					TALLOC_FREE(frame);
-					return False;
-				}
-
-				fd_listenset[num_sockets] = s;
-				FD_SET(s,&listen_set);
-				maxfd = MAX( maxfd, s);
-
-				num_sockets++;
-
-				if (num_sockets >= FD_SETSIZE) {
-					DEBUG(0,("open_sockets_smbd: Too "
-						"many sockets to bind to\n"));
-					TALLOC_FREE(frame);
-					return False;
-				}
+			if (num_sockets >= FD_SETSIZE) {
+				DEBUG(0,("open_sockets_smbd: Too many sockets to bind to\n"));
+				return False;
 			}
 		}
-		TALLOC_FREE(frame);
-	}
+	} 
 
 	SAFE_FREE(ports);
 
-	if (num_sockets == 0) {
-		DEBUG(0,("open_sockets_smbd: No "
-			"sockets available to bind to.\n"));
-		return false;
-	}
-
-	/* Setup the main smbd so that we can get messages. Note that
-	   do this after starting listening. This is needed as when in
-	   clustered mode, ctdb won't allow us to start doing database
-	   operations until it has gone thru a full startup, which
-	   includes checking to see that smbd is listening. */
-	claim_connection(NULL,"",
-			 FLAG_MSG_GENERAL|FLAG_MSG_SMBD|FLAG_MSG_DBWRAP);
-
         /* Listen to messages */
 
-	messaging_register(smbd_messaging_context(), NULL,
-			   MSG_SMB_SAM_SYNC, msg_sam_sync);
-	messaging_register(smbd_messaging_context(), NULL,
-			   MSG_SHUTDOWN, msg_exit_server);
-	messaging_register(smbd_messaging_context(), NULL,
-			   MSG_SMB_FILE_RENAME, msg_file_was_renamed);
-	messaging_register(smbd_messaging_context(), NULL,
-			   MSG_SMB_CONF_UPDATED, smb_conf_updated);
-	messaging_register(smbd_messaging_context(), NULL,
-			   MSG_SMB_STAT_CACHE_DELETE, smb_stat_cache_delete);
-	brl_register_msgs(smbd_messaging_context());
+        message_register(MSG_SMB_SAM_SYNC, msg_sam_sync, NULL);
+        message_register(MSG_SMB_SAM_REPL, msg_sam_repl, NULL);
+        message_register(MSG_SHUTDOWN, msg_exit_server, NULL);
+        message_register(MSG_SMB_FILE_RENAME, msg_file_was_renamed, NULL);
+	message_register(MSG_SMB_CONF_UPDATED, smb_conf_updated, NULL); 
+	message_register(MSG_SMB_STAT_CACHE_DELETE, smb_stat_cache_delete,
+			 NULL);
 
 #ifdef DEVELOPER
-	messaging_register(smbd_messaging_context(), NULL,
-			   MSG_SMB_INJECT_FAULT, msg_inject_fault);
+	message_register(MSG_SMB_INJECT_FAULT, msg_inject_fault, NULL); 
 #endif
 
 	/* now accept incoming connections - forking a new process
 	   for each incoming connection */
 	DEBUG(2,("waiting for a connection\n"));
 	while (1) {
-		struct timeval now, idle_timeout;
-		fd_set r_fds, w_fds;
+		fd_set lfds;
 		int num;
+		
+		/* Free up temporary memory from the main smbd. */
+		lp_TALLOC_FREE();
 
 		/* Ensure we respond to PING and DEBUG messages from the main smbd. */
-		message_dispatch(smbd_messaging_context());
+		message_dispatch();
 
 		if (got_sig_cld) {
 			pid_t pid;
-			int status;
-
 			got_sig_cld = False;
 
-			while ((pid = sys_waitpid(-1, &status, WNOHANG)) > 0) {
-				bool unclean_shutdown = False;
-				
-				/* If the child terminated normally, assume
-				   it was an unclean shutdown unless the
-				   status is 0 
-				*/
-				if (WIFEXITED(status)) {
-					unclean_shutdown = WEXITSTATUS(status);
-				}
-				/* If the child terminated due to a signal
-				   we always assume it was unclean.
-				*/
-				if (WIFSIGNALED(status)) {
-					unclean_shutdown = True;
-				}
-				remove_child_pid(pid, unclean_shutdown);
+			while ((pid = sys_waitpid(-1, NULL, WNOHANG)) > 0) {
+				remove_child_pid(pid);
 			}
 		}
 
-		idle_timeout = timeval_zero();
-
-		memcpy((char *)&r_fds, (char *)&listen_set,
+		memcpy((char *)&lfds, (char *)&listen_set, 
 		       sizeof(listen_set));
-		FD_ZERO(&w_fds);
-		GetTimeOfDay(&now);
-
-		/* Kick off our mDNS registration. */
-		if (dns_port != 0) {
-			dns_register_smbd(&dns_reg, dns_port, &maxfd,
-					&r_fds, &idle_timeout);
-		}
-
-		event_add_to_select_args(smbd_event_context(), &now,
-					 &r_fds, &w_fds, &idle_timeout,
-					 &maxfd);
-
-		num = sys_select(maxfd+1,&r_fds,&w_fds,NULL,
-				 timeval_is_zero(&idle_timeout) ?
-				 NULL : &idle_timeout);
-
+		
+		num = sys_select(maxfd+1,&lfds,NULL,NULL,NULL);
+		
 		if (num == -1 && errno == EINTR) {
 			if (got_sig_term) {
 				exit_server_cleanly(NULL);
@@ -649,24 +496,6 @@
 			continue;
 		}
 		
-
-		/* If the idle timeout fired and we don't have any connected
-		 * users, exit gracefully. We should be running under a process
-		 * controller that will restart us if necessry.
-		 */
-		if (num == 0 && count_all_current_connections() == 0) {
-			exit_server_cleanly("idle timeout");
-		}
-
-		/* process pending nDNS responses */
-		if (dns_register_smbd_reply(dns_reg, &r_fds, &idle_timeout)) {
-			--num;
-		}
-
-		if (run_events(smbd_event_context(), num, &r_fds, &w_fds)) {
-			continue;
-		}
-
 		/* check if we need to reload services */
 		check_reload(time(NULL));
 
@@ -679,22 +508,22 @@
 
 			s = -1;
 			for(i = 0; i < num_sockets; i++) {
-				if(FD_ISSET(fd_listenset[i],&r_fds)) {
+				if(FD_ISSET(fd_listenset[i],&lfds)) {
 					s = fd_listenset[i];
 					/* Clear this so we don't look
 					   at it again. */
-					FD_CLR(fd_listenset[i],&r_fds);
+					FD_CLR(fd_listenset[i],&lfds);
 					break;
 				}
 			}
 
 			smbd_set_server_fd(accept(s,&addr,&in_addrlen));
-
+			
 			if (smbd_server_fd() == -1 && errno == EINTR)
 				continue;
-
+			
 			if (smbd_server_fd() == -1) {
-				DEBUG(2,("open_sockets_smbd: accept: %s\n",
+				DEBUG(0,("open_sockets_smbd: accept: %s\n",
 					 strerror(errno)));
 				continue;
 			}
@@ -704,51 +533,50 @@
 
 			if (smbd_server_fd() != -1 && interactive)
 				return True;
-
+			
 			if (allowable_number_of_smbd_processes() &&
 			    smbd_server_fd() != -1 &&
 			    ((child = sys_fork())==0)) {
-				char remaddr[INET6_ADDRSTRLEN];
-
 				/* Child code ... */
 
 				/* Stop zombies, the parent explicitly handles
 				 * them, counting worker smbds. */
 				CatchChild();
-
+				
 				/* close the listening socket(s) */
 				for(i = 0; i < num_sockets; i++)
 					close(fd_listenset[i]);
-
-				/* close our mDNS daemon handle */
-				dns_register_close(&dns_reg);
-
+				
 				/* close our standard file
 				   descriptors */
 				close_low_fds(False);
 				am_parent = 0;
-
+				
 				set_socket_options(smbd_server_fd(),"SO_KEEPALIVE");
-				set_socket_options(smbd_server_fd(),
-						   lp_socket_options());
-
+				set_socket_options(smbd_server_fd(),user_socket_options);
+				
 				/* this is needed so that we get decent entries
 				   in smbstatus for port 445 connects */
-				set_remote_machine_name(get_peer_addr(smbd_server_fd(),
-								remaddr,
-								sizeof(remaddr)),
-								false);
+				set_remote_machine_name(get_peer_addr(smbd_server_fd()),
+							False);
+				
+				/* Reset the state of the random
+				 * number generation system, so
+				 * children do not get the same random
+				 * numbers as each other */
 
-				if (!reinit_after_fork(
-					    smbd_messaging_context(), true)) {
-					DEBUG(0,("reinit_after_fork() failed\n"));
-					smb_panic("reinit_after_fork() failed");
+				set_need_random_reseed();
+				/* tdb needs special fork handling - remove
+				 * CLEAR_IF_FIRST flags */
+				if (tdb_reopen_all(1) == -1) {
+					DEBUG(0,("tdb_reopen_all failed.\n"));
+					smb_panic("tdb_reopen_all failed.");
 				}
 
-				return True;
+				return True; 
 			}
 			/* The parent doesn't need this socket */
-			close(smbd_server_fd());
+			close(smbd_server_fd()); 
 
 			/* Sun May 6 18:56:14 2001 ackley at cs.unm.edu:
 				Clear the closed fd info out of server_fd --
@@ -779,7 +607,7 @@
 			 * (ca. 100kb).
 			 * */
 			force_check_log_size();
-
+ 
 		} /* end for num */
 	} /* end while 1 */
 
@@ -823,15 +651,16 @@
  Reload the services file.
 **************************************************************************/
 
-bool reload_services(bool test)
+BOOL reload_services(BOOL test)
 {
-	bool ret;
-
+	BOOL ret;
+	
 	if (lp_loaded()) {
-		char *fname = lp_configfile();
+		pstring fname;
+		pstrcpy(fname,lp_configfile());
 		if (file_exist(fname, NULL) &&
-		    !strcsequal(fname, get_dyn_CONFIGFILE())) {
-			set_dyn_CONFIGFILE(fname);
+		    !strcsequal(fname, dyn_CONFIGFILE)) {
+			pstrcpy(dyn_CONFIGFILE, fname);
 			test = False;
 		}
 	}
@@ -843,7 +672,7 @@
 
 	lp_killunused(conn_snum_used);
 
-	ret = lp_load(get_dyn_CONFIGFILE(), False, False, True, True);
+	ret = lp_load(dyn_CONFIGFILE, False, False, True, True);
 
 	reload_printers();
 
@@ -855,9 +684,9 @@
 
 	load_interfaces();
 
-	if (smbd_server_fd() != -1) {
+	if (smbd_server_fd() != -1) {      
 		set_socket_options(smbd_server_fd(),"SO_KEEPALIVE");
-		set_socket_options(smbd_server_fd(), lp_socket_options());
+		set_socket_options(smbd_server_fd(), user_socket_options);
 	}
 
 	mangle_reset_cache();
@@ -898,8 +727,7 @@
 
 	invalidate_all_vuids();
 
-	/* 3 second timeout. */
-	print_notify_send_messages(smbd_messaging_context(), 3);
+	print_notify_send_messages(3); /* 3 second timeout. */
 
 	/* delete our entry in the connections database. */
 	yield_connection(NULL,"");
@@ -912,20 +740,12 @@
 	}
 #endif
 
-#ifdef USE_DMAPI
-	/* Destroy Samba DMAPI session only if we are master smbd process */
-	if (am_parent) {
-		if (!dmapi_destroy_session()) {
-			DEBUG(0,("Unable to close Samba DMAPI session\n"));
-		}
-	}
-#endif
-
 	locking_end();
 	printing_end();
 
 	if (how != SERVER_EXIT_NORMAL) {
 		int oldlevel = DEBUGLEVEL;
+		char *last_inbuf = get_InBuffer();
 
 		DEBUGLEVEL = 10;
 
@@ -935,6 +755,10 @@
 		DEBUGSEP(0);
 
 		log_stack_trace();
+		if (last_inbuf) {
+			DEBUG(0,("Last message was %s\n", LAST_MESSAGE()));
+			show_msg(last_inbuf);
+		}
 
 		DEBUGLEVEL = oldlevel;
 		dump_core();
@@ -962,37 +786,11 @@
 	exit_server("critical server fault");
 }
 
-
 /****************************************************************************
-received when we should release a specific IP
-****************************************************************************/
-static void release_ip(const char *ip, void *priv)
-{
-	char addr[INET6_ADDRSTRLEN];
-
-	if (strcmp(client_socket_addr(get_client_fd(),addr,sizeof(addr)), ip) == 0) {
-		/* we can't afford to do a clean exit - that involves
-		   database writes, which would potentially mean we
-		   are still running after the failover has finished -
-		   we have to get rid of this process ID straight
-		   away */
-		DEBUG(0,("Got release IP message for our IP %s - exiting immediately\n",
-			ip));
-		_exit(0);
-	}
-}
-
-static void msg_release_ip(struct messaging_context *msg_ctx, void *private_data,
-			   uint32_t msg_type, struct server_id server_id, DATA_BLOB *data)
-{
-	release_ip((char *)data->data, NULL);
-}
-
-/****************************************************************************
  Initialise connect, service and file structs.
 ****************************************************************************/
 
-static bool init_structs(void )
+static BOOL init_structs(void )
 {
 	/*
 	 * Set the machine NETBIOS name if not already
@@ -1011,41 +809,11 @@
 
 	init_dptrs();
 
-	if (!secrets_init())
-		return False;
+	secrets_init();
 
 	return True;
 }
 
-/*
- * Send keepalive packets to our client
- */
-static bool keepalive_fn(const struct timeval *now, void *private_data)
-{
-	if (!send_keepalive(smbd_server_fd())) {
-		DEBUG( 2, ( "Keepalive failed - exiting.\n" ) );
-		return False;
-	}
-	return True;
-}
-
-/*
- * Do the recurring check if we're idle
- */
-static bool deadtime_fn(const struct timeval *now, void *private_data)
-{
-	if ((conn_num_open() == 0)
-	    || (conn_idle_all(now->tv_sec))) {
-		DEBUG( 2, ( "Closing idle connection\n" ) );
-		messaging_send(smbd_messaging_context(), procid_self(),
-			       MSG_SHUTDOWN, &data_blob_null);
-		return False;
-	}
-
-	return True;
-}
-
-
 /****************************************************************************
  main program.
 ****************************************************************************/
@@ -1054,35 +822,28 @@
    mkproto.h.  Mixing $(builddir) and $(srcdir) source files in the current
    prototype generation system is too complicated. */
 
-extern void build_options(bool screen);
+extern void build_options(BOOL screen);
 
  int main(int argc,const char *argv[])
 {
 	/* shall I run as a daemon */
-	static bool is_daemon = False;
-	static bool interactive = False;
-	static bool Fork = True;
-	static bool no_process_group = False;
-	static bool log_stdout = False;
+	static BOOL is_daemon = False;
+	static BOOL interactive = False;
+	static BOOL Fork = True;
+	static BOOL no_process_group = False;
+	static BOOL log_stdout = False;
 	static char *ports = NULL;
 	static char *profile_level = NULL;
 	int opt;
 	poptContext pc;
-	bool print_build_options = False;
-        enum {
-		OPT_DAEMON = 1000,
-		OPT_INTERACTIVE,
-		OPT_FORK,
-		OPT_NO_PROCESS_GROUP,
-		OPT_LOG_STDOUT
-	};
+
 	struct poptOption long_options[] = {
 	POPT_AUTOHELP
-	{"daemon", 'D', POPT_ARG_NONE, NULL, OPT_DAEMON, "Become a daemon (default)" },
-	{"interactive", 'i', POPT_ARG_NONE, NULL, OPT_INTERACTIVE, "Run interactive (not a daemon)"},
-	{"foreground", 'F', POPT_ARG_NONE, NULL, OPT_FORK, "Run daemon in foreground (for daemontools, etc.)" },
-	{"no-process-group", '\0', POPT_ARG_NONE, NULL, OPT_NO_PROCESS_GROUP, "Don't create a new process group" },
-	{"log-stdout", 'S', POPT_ARG_NONE, NULL, OPT_LOG_STDOUT, "Log to stdout" },
+	{"daemon", 'D', POPT_ARG_VAL, &is_daemon, True, "Become a daemon (default)" },
+	{"interactive", 'i', POPT_ARG_VAL, &interactive, True, "Run interactive (not a daemon)"},
+	{"foreground", 'F', POPT_ARG_VAL, &Fork, False, "Run daemon in foreground (for daemontools, etc.)" },
+	{"no-process-group", '\0', POPT_ARG_VAL, &no_process_group, True, "Don't create a new process group" },
+	{"log-stdout", 'S', POPT_ARG_VAL, &log_stdout, True, "Log to stdout" },
 	{"build-options", 'b', POPT_ARG_NONE, NULL, 'b', "Print build options" },
 	{"port", 'p', POPT_ARG_STRING, &ports, 0, "Listen on the specified ports"},
 	{"profiling-level", 'P', POPT_ARG_STRING, &profile_level, 0, "Set profiling level","PROFILE_LEVEL"},
@@ -1090,60 +851,28 @@
 	POPT_COMMON_DYNCONFIG
 	POPT_TABLEEND
 	};
-	TALLOC_CTX *frame = talloc_stackframe(); /* Setup tos. */
 
+	load_case_tables();
+
 	TimeInit();
 
-	db_tdb2_setup_messaging(NULL, false);
-
 #ifdef HAVE_SET_AUTH_PARAMETERS
 	set_auth_parameters(argc,argv);
 #endif
 
 	pc = poptGetContext("smbd", argc, argv, long_options, 0);
+	
 	while((opt = poptGetNextOpt(pc)) != -1) {
 		switch (opt)  {
-		case OPT_DAEMON:
-			is_daemon = true;
-			break;
-		case OPT_INTERACTIVE:
-			interactive = true;
-			break;
-		case OPT_FORK:
-			Fork = false;
-			break;
-		case OPT_NO_PROCESS_GROUP:
-			no_process_group = true;
-			break;
-		case OPT_LOG_STDOUT:
-			log_stdout = true;
-			break;
 		case 'b':
-			print_build_options = True;
+			build_options(True); /* Display output to screen as well as debug */ 
+			exit(0);
 			break;
-		default:
-			d_fprintf(stderr, "\nInvalid option %s: %s\n\n",
-				  poptBadOption(pc, 0), poptStrerror(opt));
-			poptPrintUsage(pc, stderr, 0);
-			exit(1);
 		}
 	}
+
 	poptFreeContext(pc);
 
-	if (interactive) {
-		Fork = False;
-		log_stdout = True;
-	}
-
-	setup_logging(argv[0],log_stdout);
-
-	if (print_build_options) {
-		build_options(True); /* Display output to screen as well as debug */
-		exit(0);
-	}
-
-	load_case_tables();
-
 #ifdef HAVE_SETLUID
 	/* needed for SecureWare on SCO */
 	setluid(0);
@@ -1153,6 +882,11 @@
 
 	set_remote_machine_name("smbd", False);
 
+	if (interactive) {
+		Fork = False;
+		log_stdout = True;
+	}
+
 	if (interactive && (DEBUGLEVEL >= 9)) {
 		talloc_enable_leak_report();
 	}
@@ -1162,6 +896,8 @@
 		exit(1);
 	}
 
+	setup_logging(argv[0],log_stdout);
+
 	/* we want to re-seed early to prevent time delays causing
            client problems at a later date. (tridge) */
 	generate_random_buffer(NULL, 0);
@@ -1205,8 +941,8 @@
 
 	reopen_logs();
 
-	DEBUG(0,("smbd version %s started.\n", SAMBA_VERSION_STRING));
-	DEBUGADD(0,("%s\n", COPYRIGHT_STARTUP_MESSAGE));
+	DEBUG(0,( "smbd version %s started.\n", SAMBA_VERSION_STRING));
+	DEBUGADD( 0, ( "%s\n", COPYRIGHT_STARTUP_MESSAGE ) );
 
 	DEBUG(2,("uid=%d gid=%d euid=%d egid=%d\n",
 		 (int)getuid(),(int)getgid(),(int)geteuid(),(int)getegid()));
@@ -1219,18 +955,9 @@
 		exit(1);
 	}
 
-	if (!lp_load_initial_only(get_dyn_CONFIGFILE())) {
-		DEBUG(0, ("error opening config file\n"));
-		exit(1);
-	}
-
-	if (smbd_messaging_context() == NULL)
-		exit(1);
-
 	/*
 	 * Do this before reload_services.
 	 */
-	db_tdb2_setup_messaging(smbd_messaging_context(), true);
 
 	if (!reload_services(False))
 		return(-1);	
@@ -1238,13 +965,13 @@
 	init_structs();
 
 #ifdef WITH_PROFILE
-	if (!profile_setup(smbd_messaging_context(), False)) {
+	if (!profile_setup(False)) {
 		DEBUG(0,("ERROR: failed to setup profiling\n"));
 		return -1;
 	}
 	if (profile_level != NULL) {
 		int pl = atoi(profile_level);
-		struct server_id src;
+		struct process_id src;
 
 		DEBUG(1, ("setting profiling level: %s\n",profile_level));
 		src.pid = getpid();
@@ -1286,23 +1013,14 @@
 	if (is_daemon)
 		pidfile_create("smbd");
 
-	if (!reinit_after_fork(smbd_messaging_context(), false)) {
-		DEBUG(0,("reinit_after_fork() failed\n"));
-		exit(1);
-	}
-
 	/* Setup all the TDB's - including CLEAR_IF_FIRST tdb's. */
-
-	if (smbd_memcache() == NULL) {
+	if (!message_init())
 		exit(1);
-	}
 
-	memcache_set_global(smbd_memcache());
-
 	/* Initialise the password backed before the global_sam_sid
 	   to ensure that we fetch from ldap before we make a domain sid up */
 
-	if(!initialize_password_db(False, smbd_event_context()))
+	if(!initialize_password_db(False))
 		exit(1);
 
 	if (!secrets_init()) {
@@ -1318,15 +1036,15 @@
 	if (!session_init())
 		exit(1);
 
-	if (!connections_init(True))
+	if (conn_tdb_ctx() == NULL)
 		exit(1);
 
-	if (!locking_init())
+	if (!locking_init(0))
 		exit(1);
 
 	namecache_enable();
 
-	if (!W_ERROR_IS_OK(registry_init_full()))
+	if (!init_registry())
 		exit(1);
 
 #if 0
@@ -1334,7 +1052,7 @@
                 exit(1);
 #endif
 
-	if (!print_backend_init(smbd_messaging_context()))
+	if (!print_backend_init())
 		exit(1);
 
 	if (!init_guest_info()) {
@@ -1342,16 +1060,25 @@
 		return -1;
 	}
 
+	/* Setup the main smbd so that we can get messages. */
+	/* don't worry about general printing messages here */
+
+	claim_connection(NULL,"",0,True,FLAG_MSG_GENERAL|FLAG_MSG_SMBD);
+
 	/* only start the background queue daemon if we are 
 	   running as a daemon -- bad things will happen if
 	   smbd is launched via inetd and we fork a copy of 
 	   ourselves here */
 
-	if (is_daemon && !interactive
-	    && lp_parm_bool(-1, "smbd", "backgroundqueue", true)) {
-		start_background_queue();
-	}
+	if ( is_daemon && !interactive )
+		start_background_queue(); 
 
+	/* Always attempt to initialize DMAPI. We will only use it later if
+	 * lp_dmapi_support is set on the share, but we need a single global
+	 * session to work with.
+	 */
+	dmapi_init_session();
+
 	if (!open_sockets_smbd(is_daemon, interactive, ports))
 		exit(1);
 
@@ -1381,72 +1108,15 @@
 	}
 
 	/* Setup oplocks */
-	if (!init_oplocks(smbd_messaging_context()))
+	if (!init_oplocks())
 		exit(1);
-
+	
 	/* Setup aio signal handler. */
 	initialize_async_io_handler();
 
 	/* register our message handlers */
-	messaging_register(smbd_messaging_context(), NULL,
-			   MSG_SMB_FORCE_TDIS, msg_force_tdis);
-	messaging_register(smbd_messaging_context(), NULL,
-			   MSG_SMB_RELEASE_IP, msg_release_ip);
-	messaging_register(smbd_messaging_context(), NULL,
-			   MSG_SMB_CLOSE_FILE, msg_close_file);
+	message_register(MSG_SMB_FORCE_TDIS, msg_force_tdis, NULL);
 
-	if ((lp_keepalive() != 0)
-	    && !(event_add_idle(smbd_event_context(), NULL,
-				timeval_set(lp_keepalive(), 0),
-				"keepalive", keepalive_fn,
-				NULL))) {
-		DEBUG(0, ("Could not add keepalive event\n"));
-		exit(1);
-	}
-
-	if (!(event_add_idle(smbd_event_context(), NULL,
-			     timeval_set(IDLE_CLOSED_TIMEOUT, 0),
-			     "deadtime", deadtime_fn, NULL))) {
-		DEBUG(0, ("Could not add deadtime event\n"));
-		exit(1);
-	}
-
-#ifdef CLUSTER_SUPPORT
-
-	if (lp_clustering()) {
-		/*
-		 * We need to tell ctdb about our client's TCP
-		 * connection, so that for failover ctdbd can send
-		 * tickle acks, triggering a reconnection by the
-		 * client.
-		 */
-
-		struct sockaddr_in srv, clnt;
-
-		if (client_get_tcp_info(&srv, &clnt) == 0) {
-
-			NTSTATUS status;
-
-			status = ctdbd_register_ips(
-				messaging_ctdbd_connection(),
-				&srv, &clnt, release_ip, NULL);
-
-			if (!NT_STATUS_IS_OK(status)) {
-				DEBUG(0, ("ctdbd_register_ips failed: %s\n",
-					  nt_errstr(status)));
-			}
-		} else
-		{
-			DEBUG(0,("Unable to get tcp info for "
-				 "CTDB_CONTROL_TCP_CLIENT: %s\n",
-				 strerror(errno)));
-		}
-	}
-
-#endif
-
-	TALLOC_FREE(frame);
-
 	smbd_process();
 
 	namecache_shutdown();

Modified: branches/samba/upstream/source/smbd/service.c
===================================================================
--- branches/samba/upstream/source/smbd/service.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/service.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,31 +14,36 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
 extern userdom_struct current_user_info;
 
-static bool canonicalize_connect_path(connection_struct *conn)
+static BOOL canonicalize_path(connection_struct *conn, pstring path)
 {
 #ifdef REALPATH_TAKES_NULL
-	bool ret;
-	char *resolved_name = SMB_VFS_REALPATH(conn,conn->connectpath,NULL);
+	char *resolved_name = SMB_VFS_REALPATH(conn,path,NULL);
 	if (!resolved_name) {
-		return false;
+		return False;
 	}
-	ret = set_conn_connectpath(conn,resolved_name);
+	pstrcpy(path, resolved_name);
 	SAFE_FREE(resolved_name);
-	return ret;
+	return True;
 #else
+#ifdef PATH_MAX
         char resolved_name_buf[PATH_MAX+1];
-	char *resolved_name = SMB_VFS_REALPATH(conn,conn->connectpath,resolved_name_buf);
+#else
+        pstring resolved_name_buf;
+#endif
+	char *resolved_name = SMB_VFS_REALPATH(conn,path,resolved_name_buf);
 	if (!resolved_name) {
-		return false;
+		return False;
 	}
-	return set_conn_connectpath(conn,resolved_name);
+	pstrcpy(path, resolved_name);
+	return True;
 #endif /* REALPATH_TAKES_NULL */
 }
 
@@ -48,19 +53,13 @@
  Observent people will notice a similarity between this and check_path_syntax :-).
 ****************************************************************************/
 
-bool set_conn_connectpath(connection_struct *conn, const char *connectpath)
+void set_conn_connectpath(connection_struct *conn, const pstring connectpath)
 {
-	char *destname;
-	char *d;
+	pstring destname;
+	char *d = destname;
 	const char *s = connectpath;
-        bool start_of_name_component = true;
+        BOOL start_of_name_component = True;
 
-	destname = SMB_STRDUP(connectpath);
-	if (!destname) {
-		return false;
-	}
-	d = destname;
-
 	*d++ = '/'; /* Always start with root. */
 
 	while (*s) {
@@ -144,7 +143,7 @@
 					break;
 			}
 		}
-		start_of_name_component = false;
+		start_of_name_component = False;
 	}
 	*d = '\0';
 
@@ -157,15 +156,13 @@
 		lp_servicename(SNUM(conn)), destname ));
 
 	string_set(&conn->connectpath, destname);
-	SAFE_FREE(destname);
-	return true;
 }
 
 /****************************************************************************
  Load parameters specific to a connection/service.
 ****************************************************************************/
 
-bool set_current_service(connection_struct *conn, uint16 flags, bool do_chdir)
+BOOL set_current_service(connection_struct *conn, uint16 flags, BOOL do_chdir)
 {
 	static connection_struct *last_conn;
 	static uint16 last_flags;
@@ -219,102 +216,6 @@
 	return(True);
 }
 
-static int load_registry_service(const char *servicename)
-{
-	struct registry_key *key;
-	char *path;
-	WERROR err;
-
-	uint32 i;
-	char *value_name;
-	struct registry_value *value;
-
-	int res = -1;
-
-	if (!lp_registry_shares()) {
-		return -1;
-	}
-
-	if (strequal(servicename, GLOBAL_NAME)) {
-		return -2;
-	}
-
-	if (asprintf(&path, "%s\\%s", KEY_SMBCONF, servicename) == -1) {
-		return -1;
-	}
-
-	err = reg_open_path(NULL, path, REG_KEY_READ, get_root_nt_token(),
-			    &key);
-	SAFE_FREE(path);
-
-	if (!W_ERROR_IS_OK(err)) {
-		return -1;
-	}
-
-	res = lp_add_service(servicename, -1);
-	if (res == -1) {
-		goto error;
-	}
-
-	for (i=0;
-	     W_ERROR_IS_OK(reg_enumvalue(key, key, i, &value_name, &value));
-	     i++) {
-		switch (value->type) {
-		case REG_DWORD: { 
-			char *tmp;
-			if (asprintf(&tmp, "%d", value->v.dword) == -1) {
-				continue;
-			}
-			lp_do_parameter(res, value_name, tmp);
-			SAFE_FREE(tmp);
-			break;
-		}
-		case REG_SZ: {
-			lp_do_parameter(res, value_name, value->v.sz.str);
-			break;
-		}
-		default:
-			/* Ignore all the rest */
-			break;
-		}
-
-		TALLOC_FREE(value_name);
-		TALLOC_FREE(value);
-	}
-
- error:
-
-	TALLOC_FREE(key);
-	return res;
-}
-
-void load_registry_shares(void)
-{
-	struct registry_key *key;
-	char *name;
-	WERROR err;
-	int i;
-
-	DEBUG(8, ("load_registry_shares()\n"));
-	if (!lp_registry_shares()) {
-		return;
-	}
-
-	err = reg_open_path(NULL, KEY_SMBCONF, REG_KEY_READ,
-			    get_root_nt_token(), &key);
-	if (!(W_ERROR_IS_OK(err))) {
-		return;
-	}
-
-	for (i=0; W_ERROR_IS_OK(reg_enumkey(key, key, i, &name, NULL)); i++) {
-		load_registry_service(name);
-		TALLOC_FREE(name);
-	}
-
-	TALLOC_FREE(key);
-	return;
-}
-
 /****************************************************************************
  Add a home service. Returns the new service number or -1 if fail.
 ****************************************************************************/
@@ -326,11 +227,8 @@
 	if (!service || !homedir)
 		return -1;
 
-	if ((iHomeService = lp_servicenumber(HOMES_NAME)) < 0) {
-		if ((iHomeService = load_registry_service(HOMES_NAME)) < 0) {
-			return -1;
-		}
-	}
+	if ((iHomeService = lp_servicenumber(HOMES_NAME)) < 0)
+		return -1;
 
 	/*
 	 * If this is a winbindd provided username, remove
@@ -356,6 +254,7 @@
 
 }
 
+
 /**
  * Find a service entry.
  *
@@ -372,7 +271,7 @@
 
 	/* now handle the special case of a home directory */
 	if (iService < 0) {
-		char *phome_dir = get_user_home_dir(talloc_tos(), service);
+		char *phome_dir = get_user_home_dir(service);
 
 		if(!phome_dir) {
 			/*
@@ -380,8 +279,7 @@
 			 * be a Windows to unix mapped user name.
 			 */
 			if(map_username(service))
-				phome_dir = get_user_home_dir(
-					talloc_tos(), service);
+				phome_dir = get_user_home_dir(service);
 		}
 
 		DEBUG(3,("checking for home directory %s gave %s\n",service,
@@ -394,10 +292,7 @@
 	if (iService < 0) {
 		int iPrinterService;
 
-		if ((iPrinterService = lp_servicenumber(PRINTERS_NAME)) < 0) {
-			iPrinterService = load_registry_service(PRINTERS_NAME);
-		}
-		if (iPrinterService) {
+		if ((iPrinterService = lp_servicenumber(PRINTERS_NAME)) >= 0) {
 			DEBUG(3,("checking whether %s is a valid printer name...\n", service));
 			if (pcap_printername_ok(service)) {
 				DEBUG(3,("%s is a valid printer name\n", service));
@@ -417,10 +312,6 @@
 	if (iService < 0) {
 	}
 
-	if (iService < 0) {
-		iService = load_registry_service(service);
-	}
-
 	/* Is it a usershare service ? */
 	if (iService < 0 && *lp_usershare_path()) {
 		/* Ensure the name is canonicalized. */
@@ -438,17 +329,13 @@
 			 * could get overwritten by the recursive find_service() call
 			 * below. Fix from Josef Hinteregger <joehtg at joehtg.co.at>.
 			 */
-			char *defservice = SMB_STRDUP(pdefservice);
+			pstring defservice;
+			pstrcpy(defservice, pdefservice);
 
-			if (!defservice) {
-				goto fail;
-			}
-
 			/* Disallow anything except explicit share names. */
 			if (strequal(defservice,HOMES_NAME) ||
 					strequal(defservice, PRINTERS_NAME) ||
 					strequal(defservice, "IPC$")) {
-				SAFE_FREE(defservice);
 				goto fail;
 			}
 
@@ -457,7 +344,6 @@
 				all_string_sub(service, "_","/",0);
 				iService = lp_add_service(service, iService);
 			}
-			SAFE_FREE(defservice);
 		}
 	}
 
@@ -523,7 +409,7 @@
 	return NT_STATUS_OK;
 }
 
-static NTSTATUS find_forced_user(connection_struct *conn, bool vuser_is_guest, fstring username)
+static NTSTATUS find_forced_user(connection_struct *conn, BOOL vuser_is_guest, fstring username)
 {
 	int snum = conn->params->service;
 	char *fuser, *found_username;
@@ -555,7 +441,7 @@
  * one found.
  */
 
-static NTSTATUS find_forced_group(bool force_user,
+static NTSTATUS find_forced_group(BOOL force_user,
 				  int snum, const char *username,
 				  DOM_SID *pgroup_sid,
 				  gid_t *pgid)
@@ -565,7 +451,7 @@
 	DOM_SID group_sid;
 	enum lsa_SidType type;
 	char *groupname;
-	bool user_must_be_member = False;
+	BOOL user_must_be_member = False;
 	gid_t gid;
 
 	ZERO_STRUCTP(pgroup_sid);
@@ -609,7 +495,7 @@
 
 	if (!sid_to_gid(&group_sid, &gid)) {
 		DEBUG(10, ("sid_to_gid(%s) for %s failed\n",
-			   sid_string_dbg(&group_sid), groupname));
+			   sid_string_static(&group_sid), groupname));
 		goto done;
 	}
 
@@ -656,14 +542,12 @@
 					       NTSTATUS *status)
 {
 	struct passwd *pass = NULL;
-	bool guest = False;
+	BOOL guest = False;
 	connection_struct *conn;
 	SMB_STRUCT_STAT st;
 	fstring user;
 	fstring dev;
 	int ret;
-	char addr[INET6_ADDRSTRLEN];
-	bool on_err_call_dis_hook = false;
 
 	*user = 0;
 	fstrcpy(dev, pdev);
@@ -756,12 +640,11 @@
 			*status = NT_STATUS_WRONG_PASSWORD;
 			return NULL;
 		}
-		pass = Get_Pwnam_alloc(talloc_tos(), user);
+		pass = Get_Pwnam(user);
 		status2 = create_token_from_username(conn->mem_ctx, pass->pw_name, True,
 						     &conn->uid, &conn->gid,
 						     &found_username,
 						     &conn->nt_user_token);
-		TALLOC_FREE(pass);
 		if (!NT_STATUS_IS_OK(status2)) {
 			conn_free(conn);
 			*status = status2;
@@ -780,9 +663,8 @@
 
 	add_session_user(user);
 
-	safe_strcpy(conn->client_address,
-			client_addr(get_client_fd(),addr,sizeof(addr)), 
-			sizeof(conn->client_address)-1);
+	safe_strcpy(conn->client_address, client_addr(), 
+		    sizeof(conn->client_address)-1);
 	conn->num_files_open = 0;
 	conn->lastused = conn->lastused_count = time(NULL);
 	conn->used = True;
@@ -797,14 +679,12 @@
 		 * insensitive for now. */
 		conn->case_sensitive = False;
 	} else {
-		conn->case_sensitive = (bool)lp_casesensitive(snum);
+		conn->case_sensitive = (BOOL)lp_casesensitive(snum);
 	}
 
 	conn->case_preserve = lp_preservecase(snum);
 	conn->short_case_preserve = lp_shortpreservecase(snum);
 
-	conn->encrypt_level = lp_smb_encrypt(snum);
-
 	conn->veto_list = NULL;
 	conn->hide_list = NULL;
 	conn->veto_oplock_list = NULL;
@@ -900,7 +780,7 @@
 			if (!sid_to_gid(sid, &gid)) {
 				DEBUG(10, ("Could not convert SID %s to gid, "
 					   "ignoring it\n",
-					   sid_string_dbg(sid)));
+					   sid_string_static(sid)));
 				continue;
 			}
 			if (!add_gid_to_array_unique(conn->mem_ctx, gid, &conn->groups,
@@ -914,27 +794,16 @@
 	}
 
 	{
-		char *s = talloc_sub_advanced(talloc_tos(),
-					lp_servicename(SNUM(conn)), conn->user,
-					conn->connectpath, conn->gid,
-					get_current_username(),
-					current_user_info.domain,
-					lp_pathname(snum));
-		if (!s) {
-			conn_free(conn);
-			*status = NT_STATUS_NO_MEMORY;
-			return NULL;
-		}
-
-		if (!set_conn_connectpath(conn,s)) {
-			TALLOC_FREE(s);
-			conn_free(conn);
-			*status = NT_STATUS_NO_MEMORY;
-			return NULL;
-		}
+		pstring s;
+		pstrcpy(s,lp_pathname(snum));
+		standard_sub_advanced(lp_servicename(SNUM(conn)), conn->user,
+				      conn->connectpath, conn->gid,
+				      get_current_username(),
+				      current_user_info.domain,
+				      s, sizeof(s));
+		set_conn_connectpath(conn,s);
 		DEBUG(3,("Connect path is '%s' for service [%s]\n",s,
 			 lp_servicename(snum)));
-		TALLOC_FREE(s);
 	}
 
 	/*
@@ -945,7 +814,7 @@
 	 */
 
 	{
-		bool can_write = False;
+		BOOL can_write = False;
 		NT_USER_TOKEN *token = conn->nt_user_token ?
 			conn->nt_user_token :
 			(vuser ? vuser->nt_user_token : NULL);
@@ -1005,15 +874,10 @@
 	 * depend on the realpath() pointer in the vfs table. JRA.
 	 */
 	if (!lp_widelinks(snum)) {
-		if (!canonicalize_connect_path(conn)) {
-			DEBUG(0, ("canonicalize_connect_path failed "
-			"for service %s, path %s\n",
-				lp_servicename(snum),
-				conn->connectpath));
-			conn_free(conn);
-			*status = NT_STATUS_BAD_NETWORK_NAME;
-			return NULL;
-		}
+		pstring s;
+		pstrcpy(s,conn->connectpath);
+		canonicalize_path(conn, s);
+		set_conn_connectpath(conn,s);
 	}
 
 	if ((!conn->printer) && (!conn->ipc)) {
@@ -1024,44 +888,30 @@
 	}
 
 /* ROOT Activities: */	
-	/*
-	 * Enforce the max connections parameter.
-	 */
-
-	if ((lp_max_connections(snum) > 0)
-	    && (count_current_connections(lp_servicename(SNUM(conn)), True) >=
-		lp_max_connections(snum))) {
-
-		DEBUG(1, ("Max connections (%d) exceeded for %s\n",
-			  lp_max_connections(snum), lp_servicename(snum)));
+	/* check number of connections */
+	if (!claim_connection(conn,
+			      lp_servicename(snum),
+			      lp_max_connections(snum),
+			      False,0)) {
+		DEBUG(1,("too many connections - rejected\n"));
 		conn_free(conn);
 		*status = NT_STATUS_INSUFFICIENT_RESOURCES;
 		return NULL;
 	}  
 
-	/*
-	 * Get us an entry in the connections db
-	 */
-	if (!claim_connection(conn, lp_servicename(snum), 0)) {
-		DEBUG(1, ("Could not store connections entry\n"));
-		conn_free(conn);
-		*status = NT_STATUS_INTERNAL_DB_ERROR;
-		return NULL;
-	}  
-
 	/* Preexecs are done here as they might make the dir we are to ChDir
 	 * to below */
 	/* execute any "root preexec = " line */
 	if (*lp_rootpreexec(snum)) {
-		char *cmd = talloc_sub_advanced(talloc_tos(),
-					lp_servicename(SNUM(conn)), conn->user,
-					conn->connectpath, conn->gid,
-					get_current_username(),
-					current_user_info.domain,
-					lp_rootpreexec(snum));
+		pstring cmd;
+		pstrcpy(cmd,lp_rootpreexec(snum));
+		standard_sub_advanced(lp_servicename(SNUM(conn)), conn->user,
+				      conn->connectpath, conn->gid,
+				      get_current_username(),
+				      current_user_info.domain,
+				      cmd, sizeof(cmd));
 		DEBUG(5,("cmd=%s\n",cmd));
 		ret = smbrun(cmd,NULL);
-		TALLOC_FREE(cmd);
 		if (ret != 0 && lp_rootpreexec_close(snum)) {
 			DEBUG(1,("root preexec gave %d - failing "
 				 "connection\n", ret));
@@ -1090,19 +940,22 @@
 
 	/* execute any "preexec = " line */
 	if (*lp_preexec(snum)) {
-		char *cmd = talloc_sub_advanced(talloc_tos(),
-					lp_servicename(SNUM(conn)), conn->user,
-					conn->connectpath, conn->gid,
-					get_current_username(),
-					current_user_info.domain,
-					lp_preexec(snum));
+		pstring cmd;
+		pstrcpy(cmd,lp_preexec(snum));
+		standard_sub_advanced(lp_servicename(SNUM(conn)), conn->user,
+				      conn->connectpath, conn->gid,
+				      get_current_username(),
+				      current_user_info.domain,
+				      cmd, sizeof(cmd));
 		ret = smbrun(cmd,NULL);
-		TALLOC_FREE(cmd);
 		if (ret != 0 && lp_preexec_close(snum)) {
 			DEBUG(1,("preexec gave %d - failing connection\n",
 				 ret));
+			change_to_root_user();
+			yield_connection(conn, lp_servicename(snum));
+			conn_free(conn);
 			*status = NT_STATUS_ACCESS_DENIED;
-			goto err_root_exit;
+			return NULL;
 		}
 	}
 
@@ -1117,8 +970,6 @@
 		set_namearray( &conn->veto_list, lp_veto_files(snum));
 		set_namearray( &conn->hide_list, lp_hide_files(snum));
 		set_namearray( &conn->veto_oplock_list, lp_veto_oplocks(snum));
-		set_namearray( &conn->aio_write_behind_list,
-				lp_aio_write_behind(snum));
 	}
 	
 	/* Invoke VFS make connection hook - do this before the VFS_STAT call
@@ -1127,13 +978,13 @@
 
 	if (SMB_VFS_CONNECT(conn, lp_servicename(snum), user) < 0) {
 		DEBUG(0,("make_connection: VFS make connection failed!\n"));
+		change_to_root_user();
+		yield_connection(conn, lp_servicename(snum));
+		conn_free(conn);
 		*status = NT_STATUS_UNSUCCESSFUL;
-		goto err_root_exit;
+		return NULL;
 	}
 
-	/* Any error exit after here needs to call the disconnect hook. */
-	on_err_call_dis_hook = true;
-
 	/* win2000 does not check the permissions on the directory
 	   during the tree connect, instead relying on permission
 	   check during individual operations. To match this behaviour
@@ -1151,36 +1002,28 @@
 				 conn->connectpath, lp_servicename(snum),
 				 strerror(errno) ));
 		}
+		change_to_root_user();
+		/* Call VFS disconnect hook */    
+		SMB_VFS_DISCONNECT(conn);
+		yield_connection(conn, lp_servicename(snum));
+		conn_free(conn);
 		*status = NT_STATUS_BAD_NETWORK_NAME;
-		goto err_root_exit;
+		return NULL;
 	}
-
+	
 	string_set(&conn->origpath,conn->connectpath);
-
+	
 #if SOFTLINK_OPTIMISATION
 	/* resolve any soft links early if possible */
 	if (vfs_ChDir(conn,conn->connectpath) == 0) {
-		TALLOC_CTX *ctx = talloc_tos();
-		char *s = vfs_GetWd(ctx,s);
-		if (!s) {
-			*status = map_nt_error_from_unix(errno);
-			goto err_root_exit;
-		}
-		if (!set_conn_connectpath(conn,s)) {
-			*status = NT_STATUS_NO_MEMORY;
-			goto err_root_exit;
-		}
+		pstring s;
+		pstrcpy(s,conn->connectpath);
+		vfs_GetWd(conn,s);
+		set_conn_connectpath(conn,s);
 		vfs_ChDir(conn,conn->connectpath);
 	}
 #endif
-
-	/* Figure out the characteristics of the underlying filesystem. This
-	 * assumes that all the filesystem mounted withing a share path have
-	 * the same characteristics, which is likely but not guaranteed.
-	 */
-
-	conn->fs_capabilities = SMB_VFS_FS_CAPABILITIES(conn);
-
+	
 	/*
 	 * Print out the 'connected as' stuff here as we need
 	 * to know the effective uid and gid we will be using
@@ -1196,21 +1039,10 @@
 		dbgtext( "(uid=%d, gid=%d) ", (int)geteuid(), (int)getegid() );
 		dbgtext( "(pid %d)\n", (int)sys_getpid() );
 	}
-
+	
 	/* we've finished with the user stuff - go back to root */
 	change_to_root_user();
 	return(conn);
-
-  err_root_exit:
-
-	change_to_root_user();
-	if (on_err_call_dis_hook) {
-		/* Call VFS disconnect hook */
-		SMB_VFS_DISCONNECT(conn);
-	}
-	yield_connection(conn, lp_servicename(snum));
-	conn_free(conn);
-	return NULL;
 }
 
 /***************************************************************************************
@@ -1260,7 +1092,6 @@
 	fstring service;
 	fstring dev;
 	int snum = -1;
-	char addr[INET6_ADDRSTRLEN];
 
 	fstrcpy(dev, pdev);
 
@@ -1298,7 +1129,7 @@
 
 	if (strequal(service_in,HOMES_NAME)) {
 		if(lp_security() != SEC_SHARE) {
-			DATA_BLOB no_pw = data_blob_null;
+			DATA_BLOB no_pw = data_blob(NULL, 0);
 			if (vuser->homes_snum == -1) {
 				DEBUG(2, ("[homes] share not available for "
 					  "this user because it was not found "
@@ -1334,7 +1165,7 @@
 	} else if ((lp_security() != SEC_SHARE) && (vuser->homes_snum != -1)
 		   && strequal(service_in,
 			       lp_servicename(vuser->homes_snum))) {
-		DATA_BLOB no_pw = data_blob_null;
+		DATA_BLOB no_pw = data_blob(NULL, 0);
 		DEBUG(5, ("making a connection to 'homes' service [%s] "
 			  "created at session setup time\n", service_in));
 		return make_connection_snum(vuser->homes_snum,
@@ -1357,9 +1188,7 @@
 		}
 
 		DEBUG(0,("%s (%s) couldn't find service %s\n",
-			get_remote_machine_name(),
-			client_addr(get_client_fd(),addr,sizeof(addr)),
-			service));
+			 get_remote_machine_name(), client_addr(), service));
 		*status = NT_STATUS_BAD_NETWORK_NAME;
 		return NULL;
 	}
@@ -1411,28 +1240,28 @@
 	/* execute any "postexec = " line */
 	if (*lp_postexec(SNUM(conn)) && 
 	    change_to_user(conn, vuid))  {
-		char *cmd = talloc_sub_advanced(talloc_tos(),
-					lp_servicename(SNUM(conn)), conn->user,
-					conn->connectpath, conn->gid,
-					get_current_username(),
-					current_user_info.domain,
-					lp_postexec(SNUM(conn)));
+		pstring cmd;
+		pstrcpy(cmd,lp_postexec(SNUM(conn)));
+		standard_sub_advanced(lp_servicename(SNUM(conn)), conn->user,
+				      conn->connectpath, conn->gid,
+				      get_current_username(),
+				      current_user_info.domain,
+				      cmd, sizeof(cmd));
 		smbrun(cmd,NULL);
-		TALLOC_FREE(cmd);
 		change_to_root_user();
 	}
 
 	change_to_root_user();
 	/* execute any "root postexec = " line */
 	if (*lp_rootpostexec(SNUM(conn)))  {
-		char *cmd = talloc_sub_advanced(talloc_tos(),
-					lp_servicename(SNUM(conn)), conn->user,
-					conn->connectpath, conn->gid,
-					get_current_username(),
-					current_user_info.domain,
-					lp_rootpostexec(SNUM(conn)));
+		pstring cmd;
+		pstrcpy(cmd,lp_rootpostexec(SNUM(conn)));
+		standard_sub_advanced(lp_servicename(SNUM(conn)), conn->user,
+				      conn->connectpath, conn->gid,
+				      get_current_username(),
+				      current_user_info.domain,
+				      cmd, sizeof(cmd));
 		smbrun(cmd,NULL);
-		TALLOC_FREE(cmd);
 	}
 
 	conn_free(conn);

Modified: branches/samba/upstream/source/smbd/session.c
===================================================================
--- branches/samba/upstream/source/smbd/session.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/session.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /* a "session" is claimed when we do a SessionSetupX operation
@@ -28,25 +29,19 @@
 
 #include "includes.h"
 
+static TDB_CONTEXT *tdb;
+
 /********************************************************************
 ********************************************************************/
 
-static struct db_context *session_db_ctx(void)
+BOOL session_init(void)
 {
-	static struct db_context *ctx;
+	if (tdb)
+		return True;
 
-	if (ctx)
-		return ctx;
-
-	ctx = db_open(NULL, lock_path("sessionid.tdb"), 0,
-		      TDB_CLEAR_IF_FIRST|TDB_DEFAULT, 
-		      O_RDWR | O_CREAT, 0644);
-	return ctx;
-}
-
-bool session_init(void)
-{
-	if (session_db_ctx() == NULL) {
+	tdb = tdb_open_log(lock_path("sessionid.tdb"), 0, TDB_CLEAR_IF_FIRST|TDB_DEFAULT, 
+		       O_RDWR | O_CREAT, 0644);
+	if (!tdb) {
 		DEBUG(1,("session_init: failed to open sessionid tdb\n"));
 		return False;
 	}
@@ -58,18 +53,20 @@
  called when a session is created
 ********************************************************************/
 
-bool session_claim(user_struct *vuser)
+BOOL session_claim(user_struct *vuser)
 {
-	TDB_DATA key, data;
 	int i = 0;
+	TDB_DATA data;
+	struct sockaddr sa;
+	struct in_addr *client_ip;
 	struct sessionid sessionid;
-	struct server_id pid = procid_self();
+	uint32 pid = (uint32)sys_getpid();
+	TDB_DATA key;		
 	fstring keystr;
-	const char * hostname;
-	struct db_context *ctx;
-	struct db_record *rec;
-	NTSTATUS status;
-	char addr[INET6_ADDRSTRLEN];
+	char * hostname;
+	int tdb_store_flag;  /* If using utmp, we do an inital 'lock hold' store,
+				but we don't need this if we are just using the 
+				(unique) pid/vuid combination */
 
 	vuser->session_keystr = NULL;
 
@@ -79,9 +76,8 @@
 		return True;
 	}
 
-	if (!(ctx = session_db_ctx())) {
+	if (!session_init())
 		return False;
-	}
 
 	ZERO_STRUCT(sessionid);
 
@@ -89,79 +85,45 @@
 	data.dsize = 0;
 
 	if (lp_utmp()) {
-
 		for (i=1;i<MAX_SESSION_ID;i++) {
-
-			/*
-			 * This is very inefficient and needs fixing -- vl
-			 */
-
-			struct server_id sess_pid;
-
-			snprintf(keystr, sizeof(keystr), "ID/%d", i);
-			key = string_term_tdb_data(keystr);
-
-			rec = ctx->fetch_locked(ctx, NULL, key);
-
-			if (rec == NULL) {
-				DEBUG(1, ("Could not lock \"%s\"\n", keystr));
-				return False;
-			}
-
-			if (rec->value.dsize != sizeof(sessionid)) {
-				DEBUG(1, ("Re-using invalid record\n"));
-				break;
-			}
-
-			sess_pid = ((struct sessionid *)rec->value.dptr)->pid;
-
-			if (!process_exists(sess_pid)) {
-				DEBUG(5, ("%s has died -- re-using session\n",
-					  procid_str_static(&sess_pid)));
-				break;
-			}
-
-			TALLOC_FREE(rec);
+			slprintf(keystr, sizeof(keystr)-1, "ID/%d", i);
+			key.dptr = keystr;
+			key.dsize = strlen(keystr)+1;
+			
+			if (tdb_store(tdb, key, data, TDB_INSERT) == 0) break;
 		}
-
+		
 		if (i == MAX_SESSION_ID) {
-			SMB_ASSERT(rec == NULL);
-			DEBUG(1,("session_claim: out of session IDs "
-				 "(max is %d)\n", MAX_SESSION_ID));
+			DEBUG(1,("session_claim: out of session IDs (max is %d)\n", 
+				 MAX_SESSION_ID));
 			return False;
 		}
-
-		snprintf(sessionid.id_str, sizeof(sessionid.id_str),
-			 SESSION_UTMP_TEMPLATE, i);
+		slprintf(sessionid.id_str, sizeof(sessionid.id_str)-1, SESSION_UTMP_TEMPLATE, i);
+		tdb_store_flag = TDB_MODIFY;
 	} else
 	{
-		snprintf(keystr, sizeof(keystr), "ID/%s/%u",
-			 procid_str_static(&pid), vuser->vuid);
-		key = string_term_tdb_data(keystr);
-
-		rec = ctx->fetch_locked(ctx, NULL, key);
-
-		if (rec == NULL) {
-			DEBUG(1, ("Could not lock \"%s\"\n", keystr));
-			return False;
-		}
-
-		snprintf(sessionid.id_str, sizeof(sessionid.id_str),
-			 SESSION_TEMPLATE, (long unsigned int)sys_getpid(),
+		slprintf(keystr, sizeof(keystr)-1, "ID/%lu/%u", 
+			 (long unsigned int)sys_getpid(), 
 			 vuser->vuid);
+		slprintf(sessionid.id_str, sizeof(sessionid.id_str)-1, 
+			 SESSION_TEMPLATE, (long unsigned int)sys_getpid(), 
+			 vuser->vuid);
+
+		key.dptr = keystr;
+		key.dsize = strlen(keystr)+1;
+			
+		tdb_store_flag = TDB_REPLACE;
 	}
 
-	SMB_ASSERT(rec != NULL);
-
 	/* If 'hostname lookup' == yes, then do the DNS lookup.  This is
-           needed because utmp and PAM both expect DNS names
-
+           needed because utmp and PAM both expect DNS names 
+	   
 	   client_name() handles this case internally.
 	*/
 
-	hostname = client_name(get_client_fd());
+	hostname = client_name();
 	if (strcmp(hostname, "UNKNOWN") == 0) {
-		hostname = client_addr(get_client_fd(),addr,sizeof(addr));
+		hostname = client_addr();
 	}
 
 	fstrcpy(sessionid.username, vuser->user.unix_name);
@@ -171,41 +133,36 @@
 	sessionid.uid = vuser->uid;
 	sessionid.gid = vuser->gid;
 	fstrcpy(sessionid.remote_machine, get_remote_machine_name());
-	fstrcpy(sessionid.ip_addr_str,
-		client_addr(get_client_fd(),addr,sizeof(addr)));
+	fstrcpy(sessionid.ip_addr, client_addr());
 	sessionid.connect_start = time(NULL);
 
-	if (!smb_pam_claim_session(sessionid.username, sessionid.id_str,
-				   sessionid.hostname)) {
+	client_ip = client_inaddr(&sa);
+
+	if (!smb_pam_claim_session(sessionid.username, sessionid.id_str, sessionid.hostname)) {
 		DEBUG(1,("pam_session rejected the session for %s [%s]\n",
 				sessionid.username, sessionid.id_str));
-
-		TALLOC_FREE(rec);
+		if (tdb_store_flag == TDB_MODIFY) {
+			tdb_delete(tdb, key);
+		}
 		return False;
 	}
 
-	data.dptr = (uint8 *)&sessionid;
+	data.dptr = (char *)&sessionid;
 	data.dsize = sizeof(sessionid);
-
-	status = rec->store(rec, data, TDB_REPLACE);
-
-	TALLOC_FREE(rec);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(1,("session_claim: unable to create session id "
-			 "record: %s\n", nt_errstr(status)));
+	if (tdb_store(tdb, key, data, tdb_store_flag) != 0) {
+		DEBUG(1,("session_claim: unable to create session id record\n"));
 		return False;
 	}
 
 	if (lp_utmp()) {
-		sys_utmp_claim(sessionid.username, sessionid.hostname,
-			       sessionid.ip_addr_str,
+		sys_utmp_claim(sessionid.username, sessionid.hostname, 
+			       client_ip,
 			       sessionid.id_str, sessionid.id_num);
 	}
 
-	vuser->session_keystr = talloc_strdup(vuser, keystr);
+	vuser->session_keystr = SMB_STRDUP(keystr);
 	if (!vuser->session_keystr) {
-		DEBUG(0, ("session_claim:  talloc_strdup() failed for session_keystr\n"));
+		DEBUG(0, ("session_claim:  strdup() failed for session_keystr\n"));
 		return False;
 	}
 	return True;
@@ -217,57 +174,54 @@
 
 void session_yield(user_struct *vuser)
 {
-	TDB_DATA key;
+	TDB_DATA dbuf;
 	struct sessionid sessionid;
-	struct db_context *ctx;
-	struct db_record *rec;
+	struct in_addr *client_ip;
+	TDB_DATA key;
 
-	if (!(ctx = session_db_ctx())) return;
+	if (!tdb) return;
 
 	if (!vuser->session_keystr) {
 		return;
 	}
 
-	key = string_term_tdb_data(vuser->session_keystr);
+	key.dptr = vuser->session_keystr;
+	key.dsize = strlen(vuser->session_keystr)+1;
 
-	if (!(rec = ctx->fetch_locked(ctx, NULL, key))) {
-		return;
-	}
+	dbuf = tdb_fetch(tdb, key);
 
-	if (rec->value.dsize != sizeof(sessionid))
+	if (dbuf.dsize != sizeof(sessionid))
 		return;
 
-	memcpy(&sessionid, rec->value.dptr, sizeof(sessionid));
+	memcpy(&sessionid, dbuf.dptr, sizeof(sessionid));
 
+	client_ip = interpret_addr2(sessionid.ip_addr);
+
+	SAFE_FREE(dbuf.dptr);
+
 	if (lp_utmp()) {
 		sys_utmp_yield(sessionid.username, sessionid.hostname, 
-			       sessionid.ip_addr_str,
+			       client_ip,
 			       sessionid.id_str, sessionid.id_num);
 	}
 
-	smb_pam_close_session(sessionid.username, sessionid.id_str,
-			      sessionid.hostname);
+	smb_pam_close_session(sessionid.username, sessionid.id_str, sessionid.hostname);
 
-	rec->delete_rec(rec);
-
-	TALLOC_FREE(rec);
+	tdb_delete(tdb, key);
 }
 
 /********************************************************************
 ********************************************************************/
 
-static bool session_traverse(int (*fn)(struct db_record *db,
-				       void *private_data),
-			     void *private_data)
+BOOL session_traverse(int (*fn)(TDB_CONTEXT *, TDB_DATA, TDB_DATA, void *),
+		      void *state)
 {
-	struct db_context *ctx;
-
-	if (!(ctx = session_db_ctx())) {
+	if (!session_init()) {
 		DEBUG(3, ("No tdb opened\n"));
 		return False;
 	}
 
-	ctx->traverse_read(ctx, fn, private_data);
+	tdb_traverse(tdb, fn, state);
 	return True;
 }
 
@@ -275,29 +229,25 @@
 ********************************************************************/
 
 struct session_list {
-	TALLOC_CTX *mem_ctx;
 	int count;
 	struct sessionid *sessions;
 };
 
-static int gather_sessioninfo(struct db_record *rec, void *state)
+static int gather_sessioninfo(TDB_CONTEXT *stdb, TDB_DATA kbuf, TDB_DATA dbuf, void *state)
 {
+	uint32 i;	
 	struct session_list *sesslist = (struct session_list *) state;
-	const struct sessionid *current =
-		(const struct sessionid *) rec->value.dptr;
+	const struct sessionid *current = (const struct sessionid *) dbuf.dptr;
 
-	sesslist->sessions = TALLOC_REALLOC_ARRAY(
-		sesslist->mem_ctx, sesslist->sessions, struct sessionid,
-		sesslist->count+1);
-
+	i = sesslist->count;
+	
+	sesslist->sessions = SMB_REALLOC_ARRAY(sesslist->sessions, struct sessionid, i+1);
 	if (!sesslist->sessions) {
 		sesslist->count = 0;
 		return -1;
 	}
 
-	memcpy(&sesslist->sessions[sesslist->count], current,
-	       sizeof(struct sessionid));
-
+	memcpy(&sesslist->sessions[i], current, sizeof(struct sessionid));
 	sesslist->count++;
 
 	DEBUG(7,("gather_sessioninfo session from %s@%s\n", 
@@ -309,11 +259,10 @@
 /********************************************************************
 ********************************************************************/
 
-int list_sessions(TALLOC_CTX *mem_ctx, struct sessionid **session_list)
+int list_sessions(struct sessionid **session_list)
 {
 	struct session_list sesslist;
 
-	sesslist.mem_ctx = mem_ctx;
 	sesslist.count = 0;
 	sesslist.sessions = NULL;
 	

Modified: branches/samba/upstream/source/smbd/sesssetup.c
===================================================================
--- branches/samba/upstream/source/smbd/sesssetup.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/sesssetup.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,32 +1,31 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    handle SMBsessionsetup
    Copyright (C) Andrew Tridgell 1998-2001
    Copyright (C) Andrew Bartlett      2001
    Copyright (C) Jim McDonough <jmcd at us.ibm.com> 2002
    Copyright (C) Luke Howard          2003
-   Copyright (C) Volker Lendecke      2007
-   Copyright (C) Jeremy Allison	      2007
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
 extern struct auth_context *negprot_global_auth_context;
-extern bool global_encrypted_passwords_negotiated;
-extern bool global_spnego_negotiated;
+extern BOOL global_encrypted_passwords_negotiated;
+extern BOOL global_spnego_negotiated;
 extern enum protocol_types Protocol;
 extern int max_send;
 
@@ -36,12 +35,11 @@
   on a logon error possibly map the error to success if "map to guest"
   is set approriately
 */
-static NTSTATUS do_map_to_guest(NTSTATUS status,
-				auth_serversupplied_info **server_info,
+static NTSTATUS do_map_to_guest(NTSTATUS status, auth_serversupplied_info **server_info,
 				const char *user, const char *domain)
 {
 	if (NT_STATUS_EQUAL(status, NT_STATUS_NO_SUCH_USER)) {
-		if ((lp_map_to_guest() == MAP_TO_GUEST_ON_BAD_USER) ||
+		if ((lp_map_to_guest() == MAP_TO_GUEST_ON_BAD_USER) || 
 		    (lp_map_to_guest() == MAP_TO_GUEST_ON_BAD_PASSWORD)) {
 			DEBUG(3,("No such user %s [%s] - using guest account\n",
 				 user, domain));
@@ -51,8 +49,7 @@
 
 	if (NT_STATUS_EQUAL(status, NT_STATUS_WRONG_PASSWORD)) {
 		if (lp_map_to_guest() == MAP_TO_GUEST_ON_BAD_PASSWORD) {
-			DEBUG(3,("Registered username %s for guest access\n",
-				user));
+			DEBUG(3,("Registered username %s for guest access\n",user));
 			status = make_server_info_guest(server_info);
 		}
 	}
@@ -64,44 +61,25 @@
  Add the standard 'Samba' signature to the end of the session setup.
 ****************************************************************************/
 
-static int push_signature(uint8 **outbuf)
+static int add_signature(char *outbuf, char *p)
 {
-	char *lanman;
-	int result, tmp;
+	char *start = p;
+	fstring lanman;
 
-	result = 0;
+	fstr_sprintf( lanman, "Samba %s", SAMBA_VERSION_STRING);
 
-	tmp = message_push_string(outbuf, "Unix", STR_TERMINATE);
+	p += srvstr_push(outbuf, p, "Unix", BUFFER_SIZE - (p - outbuf), STR_TERMINATE);
+	p += srvstr_push(outbuf, p, lanman, BUFFER_SIZE - (p - outbuf), STR_TERMINATE);
+	p += srvstr_push(outbuf, p, lp_workgroup(), BUFFER_SIZE - (p - outbuf), STR_TERMINATE);
 
-	if (tmp == -1) return -1;
-	result += tmp;
-
-	if (asprintf(&lanman, "Samba %s", SAMBA_VERSION_STRING) != -1) {
-		tmp = message_push_string(outbuf, lanman, STR_TERMINATE);
-		SAFE_FREE(lanman);
-	}
-	else {
-		tmp = message_push_string(outbuf, "Samba", STR_TERMINATE);
-	}
-
-	if (tmp == -1) return -1;
-	result += tmp;
-
-	tmp = message_push_string(outbuf, lp_workgroup(), STR_TERMINATE);
-
-	if (tmp == -1) return -1;
-	result += tmp;
-
-	return result;
+	return PTR_DIFF(p, start);
 }
 
 /****************************************************************************
  Start the signing engine if needed. Don't fail signing here.
 ****************************************************************************/
 
-static void sessionsetup_start_signing_engine(
-			const auth_serversupplied_info *server_info,
-			const uint8 *inbuf)
+static void sessionsetup_start_signing_engine(const auth_serversupplied_info *server_info, char *inbuf)
 {
 	if (!server_info->guest && !srv_signing_started()) {
 		/* We need to start the signing engine
@@ -110,7 +88,7 @@
 		 * correct one. Subsequent packets will
 		 * be correct.
 		 */
-		srv_check_sign_mac((char *)inbuf, False);
+	       	srv_check_sign_mac(inbuf, False);
 	}
 }
 
@@ -118,39 +96,44 @@
  Send a security blob via a session setup reply.
 ****************************************************************************/
 
-static void reply_sesssetup_blob(struct smb_request *req,
-				 DATA_BLOB blob,
-				 NTSTATUS nt_status)
+static BOOL reply_sesssetup_blob(connection_struct *conn, char *outbuf,
+				 DATA_BLOB blob, NTSTATUS nt_status)
 {
-	if (!NT_STATUS_IS_OK(nt_status) &&
-	    !NT_STATUS_EQUAL(nt_status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
-		reply_nterror(req, nt_status_squash(nt_status));
+	char *p;
+
+	if (!NT_STATUS_IS_OK(nt_status) && !NT_STATUS_EQUAL(nt_status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
+		ERROR_NT(nt_status_squash(nt_status));
 	} else {
+		set_message(outbuf,4,0,True);
+
 		nt_status = nt_status_squash(nt_status);
-		SIVAL(req->outbuf, smb_rcls, NT_STATUS_V(nt_status));
-		SSVAL(req->outbuf, smb_vwv0, 0xFF); /* no chaining possible */
-		SSVAL(req->outbuf, smb_vwv3, blob.length);
+		SIVAL(outbuf, smb_rcls, NT_STATUS_V(nt_status));
+		SSVAL(outbuf, smb_vwv0, 0xFF); /* no chaining possible */
+		SSVAL(outbuf, smb_vwv3, blob.length);
+		p = smb_buf(outbuf);
 
-		if ((message_push_blob(&req->outbuf, blob) == -1)
-		    || (push_signature(&req->outbuf) == -1)) {
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
-		}
+		/* should we cap this? */
+		memcpy(p, blob.data, blob.length);
+		p += blob.length;
+
+		p += add_signature( outbuf, p );
+
+		set_message_end(outbuf,p);
 	}
 
-	show_msg((char *)req->outbuf);
-	srv_send_smb(smbd_server_fd(),(char *)req->outbuf,req->encrypted);
-	TALLOC_FREE(req->outbuf);
+	show_msg(outbuf);
+	return send_smb(smbd_server_fd(),outbuf);
 }
 
 /****************************************************************************
- Do a 'guest' logon, getting back the
+ Do a 'guest' logon, getting back the 
 ****************************************************************************/
 
-static NTSTATUS check_guest_password(auth_serversupplied_info **server_info)
+static NTSTATUS check_guest_password(auth_serversupplied_info **server_info) 
 {
 	struct auth_context *auth_context;
 	auth_usersupplied_info *user_info = NULL;
-
+	
 	NTSTATUS nt_status;
 	unsigned char chal[8];
 
@@ -158,8 +141,7 @@
 
 	DEBUG(3,("Got anonymous request\n"));
 
-	if (!NT_STATUS_IS_OK(nt_status = make_auth_context_fixed(&auth_context,
-					chal))) {
+	if (!NT_STATUS_IS_OK(nt_status = make_auth_context_fixed(&auth_context, chal))) {
 		return nt_status;
 	}
 
@@ -167,10 +149,8 @@
 		(auth_context->free)(&auth_context);
 		return NT_STATUS_NO_MEMORY;
 	}
-
-	nt_status = auth_context->check_ntlm_password(auth_context,
-						user_info,
-						server_info);
+	
+	nt_status = auth_context->check_ntlm_password(auth_context, user_info, server_info);
 	(auth_context->free)(&auth_context);
 	free_user_info(&user_info);
 	return nt_status;
@@ -185,16 +165,16 @@
  Cerate a clock skew error blob for a Windows client.
 ****************************************************************************/
 
-static bool make_krb5_skew_error(DATA_BLOB *pblob_out)
+static BOOL make_krb5_skew_error(DATA_BLOB *pblob_out)
 {
 	krb5_context context = NULL;
 	krb5_error_code kerr = 0;
 	krb5_data reply;
 	krb5_principal host_princ = NULL;
 	char *host_princ_s = NULL;
-	bool ret = False;
+	BOOL ret = False;
 
-	*pblob_out = data_blob_null;
+	*pblob_out = data_blob(NULL,0);
 
 	initialize_krb5_error_table();
 	kerr = krb5_init_context(&context);
@@ -210,17 +190,14 @@
 
 	kerr = smb_krb5_parse_name(context, host_princ_s, &host_princ);
 	if (kerr) {
-		DEBUG(10,("make_krb5_skew_error: smb_krb5_parse_name failed "
-			"for name %s: Error %s\n",
+		DEBUG(10,("make_krb5_skew_error: smb_krb5_parse_name failed for name %s: Error %s\n",
 			host_princ_s, error_message(kerr) ));
 		goto out;
 	}
-
-	kerr = smb_krb5_mk_error(context, KRB5KRB_AP_ERR_SKEW,
-			host_princ, &reply);
+	
+	kerr = smb_krb5_mk_error(context, KRB5KRB_AP_ERR_SKEW, host_princ, &reply);
 	if (kerr) {
-		DEBUG(10,("make_krb5_skew_error: smb_krb5_mk_error "
-			"failed: Error %s\n",
+		DEBUG(10,("make_krb5_skew_error: smb_krb5_mk_error failed: Error %s\n",
 			error_message(kerr) ));
 		goto out;
 	}
@@ -246,11 +223,11 @@
  Reply to a session setup spnego negotiate packet for kerberos.
 ****************************************************************************/
 
-static void reply_spnego_kerberos(struct smb_request *req,
-				  DATA_BLOB *secblob,
-				  const char *mechOID,
-				  uint16 vuid,
-				  bool *p_invalidate_vuid)
+static int reply_spnego_kerberos(connection_struct *conn, 
+				 char *inbuf, char *outbuf,
+				 int length, int bufsize,
+				 DATA_BLOB *secblob,
+				 BOOL *p_invalidate_vuid)
 {
 	TALLOC_CTX *mem_ctx;
 	DATA_BLOB ticket;
@@ -258,20 +235,21 @@
 	fstring netbios_domain_name;
 	struct passwd *pw;
 	fstring user;
-	int sess_vuid = req->vuid;
-	NTSTATUS ret = NT_STATUS_OK;
-	struct PAC_DATA *pac_data = NULL;
+	int sess_vuid;
+	NTSTATUS ret;
+	PAC_DATA *pac_data;
 	DATA_BLOB ap_rep, ap_rep_wrapped, response;
 	auth_serversupplied_info *server_info = NULL;
-	DATA_BLOB session_key = data_blob_null;
+	DATA_BLOB session_key = data_blob(NULL, 0);
 	uint8 tok_id[2];
-	DATA_BLOB nullblob = data_blob_null;
+	DATA_BLOB nullblob = data_blob(NULL, 0);
 	fstring real_username;
-	bool map_domainuser_to_guest = False;
-	bool username_was_mapped;
-	struct PAC_LOGON_INFO *logon_info = NULL;
+	BOOL map_domainuser_to_guest = False;
+	BOOL username_was_mapped;
+	PAC_LOGON_INFO *logon_info = NULL;
 
 	ZERO_STRUCT(ticket);
+	ZERO_STRUCT(pac_data);
 	ZERO_STRUCT(ap_rep);
 	ZERO_STRUCT(ap_rep_wrapped);
 	ZERO_STRUCT(response);
@@ -281,56 +259,45 @@
 
 	mem_ctx = talloc_init("reply_spnego_kerberos");
 	if (mem_ctx == NULL) {
-		reply_nterror(req, nt_status_squash(NT_STATUS_NO_MEMORY));
-		return;
+		return ERROR_NT(nt_status_squash(NT_STATUS_NO_MEMORY));
 	}
 
 	if (!spnego_parse_krb5_wrap(*secblob, &ticket, tok_id)) {
 		talloc_destroy(mem_ctx);
-		reply_nterror(req, nt_status_squash(NT_STATUS_LOGON_FAILURE));
-		return;
+		return ERROR_NT(nt_status_squash(NT_STATUS_LOGON_FAILURE));
 	}
 
-	ret = ads_verify_ticket(mem_ctx, lp_realm(), 0, &ticket,
-				&client, &pac_data, &ap_rep,
-				&session_key, True);
+	ret = ads_verify_ticket(mem_ctx, lp_realm(), 0, &ticket, &client, &pac_data, &ap_rep, &session_key);
 
 	data_blob_free(&ticket);
 
 	if (!NT_STATUS_IS_OK(ret)) {
 #if 0
-		/* Experiment that failed.
-		 * See "only happens with a KDC" comment below. */
+		/* Experiment that failed. See "only happens with a KDC" comment below. */
 
 		if (NT_STATUS_EQUAL(ret, NT_STATUS_TIME_DIFFERENCE_AT_DC)) {
 
 			/*
-			 * Windows in this case returns
-			 * NT_STATUS_MORE_PROCESSING_REQUIRED
-			 * with a negTokenTarg blob containing an krb5_error
-			 * struct ASN1 encoded containing KRB5KRB_AP_ERR_SKEW.
-			 * The client then fixes its clock and continues rather
-			 * than giving an error. JRA.
+			 * Windows in this case returns NT_STATUS_MORE_PROCESSING_REQUIRED
+			 * with a negTokenTarg blob containing an krb5_error struct ASN1 encoded
+			 * containing KRB5KRB_AP_ERR_SKEW. The client then fixes its
+			 * clock and continues rather than giving an error. JRA.
 			 * -- Looks like this only happens with a KDC. JRA.
 			 */
 
-			bool ok = make_krb5_skew_error(&ap_rep);
+			BOOL ok = make_krb5_skew_error(&ap_rep);
 			if (!ok) {
 				talloc_destroy(mem_ctx);
-				return ERROR_NT(nt_status_squash(
-						NT_STATUS_LOGON_FAILURE));
+				return ERROR_NT(nt_status_squash(NT_STATUS_LOGON_FAILURE));
 			}
-			ap_rep_wrapped = spnego_gen_krb5_wrap(ap_rep,
-					TOK_ID_KRB_ERROR);
-			response = spnego_gen_auth_response(&ap_rep_wrapped,
-					ret, OID_KERBEROS5_OLD);
-			reply_sesssetup_blob(conn, inbuf, outbuf, response,
-					NT_STATUS_MORE_PROCESSING_REQUIRED);
+			ap_rep_wrapped = spnego_gen_krb5_wrap(ap_rep, TOK_ID_KRB_ERROR);
+			response = spnego_gen_auth_response(&ap_rep_wrapped, ret, OID_KERBEROS5_OLD);
+			reply_sesssetup_blob(conn, outbuf, response, NT_STATUS_MORE_PROCESSING_REQUIRED);
 
 			/*
-			 * In this one case we don't invalidate the
-			 * intermediate vuid as we're expecting the client
-			 * to re-use it for the next sessionsetupX packet. JRA.
+			 * In this one case we don't invalidate the intermediate vuid.
+			 * as we're expecting the client to re-use it for the next
+			 * sessionsetupX packet. JRA.
 			 */
 
 			*p_invalidate_vuid = False;
@@ -346,11 +313,9 @@
 			ret = NT_STATUS_LOGON_FAILURE;
 		}
 #endif
-		DEBUG(1,("Failed to verify incoming ticket with error %s!\n",
-				nt_errstr(ret)));
+		DEBUG(1,("Failed to verify incoming ticket with error %s!\n", nt_errstr(ret)));	
 		talloc_destroy(mem_ctx);
-		reply_nterror(req, nt_status_squash(ret));
-		return;
+		return ERROR_NT(nt_status_squash(ret));
 	}
 
 	DEBUG(3,("Ticket name is [%s]\n", client));
@@ -362,8 +327,7 @@
 		data_blob_free(&session_key);
 		SAFE_FREE(client);
 		talloc_destroy(mem_ctx);
-		reply_nterror(req,nt_status_squash(NT_STATUS_LOGON_FAILURE));
-		return;
+		return ERROR_NT(nt_status_squash(NT_STATUS_LOGON_FAILURE));
 	}
 
 	*p = 0;
@@ -384,9 +348,7 @@
 			data_blob_free(&session_key);
 			SAFE_FREE(client);
 			talloc_destroy(mem_ctx);
-			reply_nterror(req, nt_status_squash(
-					      NT_STATUS_LOGON_FAILURE));
-			return;
+			return ERROR_NT(nt_status_squash(NT_STATUS_LOGON_FAILURE));
 		}
 	}
 
@@ -395,9 +357,9 @@
 
 	domain = p+1;
 
-	if (logon_info && logon_info->info3.base.domain.string) {
-		fstrcpy(netbios_domain_name,
-			logon_info->info3.base.domain.string);
+	if (logon_info && logon_info->info3.hdr_logon_dom.uni_str_len) {
+
+		unistr2_to_ascii(netbios_domain_name, &logon_info->info3.uni_logon_dom, -1);
 		domain = netbios_domain_name;
 		DEBUG(10, ("Mapped to [%s] (using PAC)\n", domain));
 
@@ -410,29 +372,35 @@
 		   name. And even w2k3 does use ntlmssp if you for example
 		   connect to an ip address. */
 
-		wbcErr wbc_status;
-		struct wbcDomainInfo *info = NULL;
+		struct winbindd_request wb_request;
+		struct winbindd_response wb_response;
+		NSS_STATUS wb_result;
 
+		ZERO_STRUCT(wb_request);
+		ZERO_STRUCT(wb_response);
+
 		DEBUG(10, ("Mapping [%s] to short name\n", domain));
 
-		wbc_status = wbcDomainInfo(domain, &info);
+		fstrcpy(wb_request.domain_name, domain);
 
-		if (WBC_ERROR_IS_OK(wbc_status)) {
+		wb_result = winbindd_request_response(WINBINDD_DOMAIN_INFO,
+					     &wb_request, &wb_response);
 
-			fstrcpy(netbios_domain_name,
-				info->short_name);
+		if (wb_result == NSS_STATUS_SUCCESS) {
 
-			wbcFreeMemory(info);
+			fstrcpy(netbios_domain_name,
+				wb_response.data.domain_info.name);
 			domain = netbios_domain_name;
+
 			DEBUG(10, ("Mapped to [%s] (using Winbind)\n", domain));
 		} else {
-			DEBUG(3, ("Could not find short name: %s\n",
-				wbcErrorString(wbc_status)));
+			DEBUG(3, ("Could not find short name -- winbind "
+				  "not running?\n"));
 		}
 	}
 
 	fstr_sprintf(user, "%s%c%s", domain, *lp_winbind_separator(), client);
-
+	
 	/* lookup the passwd struct, create a new user if necessary */
 
 	username_was_mapped = map_username( user );
@@ -445,55 +413,50 @@
 		/* do this before an eventual mappign to guest occurs */
 		ret = smb_pam_accountcheck(pw->pw_name);
 		if (  !NT_STATUS_IS_OK(ret)) {
-			DEBUG(1,("PAM account restriction "
-				"prevents user login\n"));
+			DEBUG(1, ("PAM account restriction prevents user login\n"));
 			data_blob_free(&ap_rep);
 			data_blob_free(&session_key);
 			TALLOC_FREE(mem_ctx);
-			reply_nterror(req, nt_status_squash(ret));
-			return;
+			return ERROR_NT(nt_status_squash(ret));
 		}
 	}
 
 	if (!pw) {
 
 		/* this was originally the behavior of Samba 2.2, if a user
-		   did not have a local uid but has been authenticated, then
+		   did not have a local uid but has been authenticated, then 
 		   map them to a guest account */
 
-		if (lp_map_to_guest() == MAP_TO_GUEST_ON_BAD_UID){
+		if (lp_map_to_guest() == MAP_TO_GUEST_ON_BAD_UID){ 
 			map_domainuser_to_guest = True;
 			fstrcpy(user,lp_guestaccount());
 			pw = smb_getpwnam( mem_ctx, user, real_username, True );
-		}
+		} 
 
 		/* extra sanity check that the guest account is valid */
 
 		if ( !pw ) {
-			DEBUG(1,("Username %s is invalid on this system\n",
-				user));
+			DEBUG(1,("Username %s is invalid on this system\n", user));
 			SAFE_FREE(client);
 			data_blob_free(&ap_rep);
 			data_blob_free(&session_key);
 			TALLOC_FREE(mem_ctx);
-			reply_nterror(req, nt_status_squash(
-					      NT_STATUS_LOGON_FAILURE));
-			return;
+			return ERROR_NT(nt_status_squash(NT_STATUS_LOGON_FAILURE));
 		}
 	}
 
 	/* setup the string used by %U */
-
+	
 	sub_set_smb_name( real_username );
 	reload_services(True);
 
 	if ( map_domainuser_to_guest ) {
 		make_server_info_guest(&server_info);
 	} else if (logon_info) {
-		/* pass the unmapped username here since map_username()
+		/* pass the unmapped username here since map_username() 
 		   will be called again from inside make_server_info_info3() */
-
-		ret = make_server_info_info3(mem_ctx, client, domain,
+		
+		ret = make_server_info_info3(mem_ctx, client, domain, 
 					     &server_info, &logon_info->info3);
 		if ( !NT_STATUS_IS_OK(ret) ) {
 			DEBUG(1,("make_server_info_info3 failed: %s!\n",
@@ -502,8 +465,7 @@
 			data_blob_free(&ap_rep);
 			data_blob_free(&session_key);
 			TALLOC_FREE(mem_ctx);
-			reply_nterror(req, nt_status_squash(ret));
-			return;
+			return ERROR_NT(nt_status_squash(ret));
 		}
 
 	} else {
@@ -516,8 +478,7 @@
 			data_blob_free(&ap_rep);
 			data_blob_free(&session_key);
 			TALLOC_FREE(mem_ctx);
-			reply_nterror(req, nt_status_squash(ret));
-			return;
+			return ERROR_NT(nt_status_squash(ret));
 		}
 
 	        /* make_server_info_pw does not set the domain. Without this
@@ -525,89 +486,68 @@
 		 * %D. */
 
 		if (server_info->sam_account != NULL) {
-			pdb_set_domain(server_info->sam_account,
-					domain, PDB_SET);
+			pdb_set_domain(server_info->sam_account, domain, PDB_SET);
 		}
 	}
 
-	if (username_was_mapped) {
-		server_info->was_mapped = username_was_mapped;
-	}
-
+	server_info->was_mapped |= username_was_mapped;
+	
 	/* we need to build the token for the user. make_server_info_guest()
 	   already does this */
-
+	
 	if ( !server_info->ptok ) {
 		ret = create_local_token( server_info );
 		if ( !NT_STATUS_IS_OK(ret) ) {
-			DEBUG(10,("failed to create local token: %s\n",
-				nt_errstr(ret)));
 			SAFE_FREE(client);
 			data_blob_free(&ap_rep);
 			data_blob_free(&session_key);
 			TALLOC_FREE( mem_ctx );
 			TALLOC_FREE( server_info );
-			reply_nterror(req, nt_status_squash(ret));
-			return;
+			return ERROR_NT(nt_status_squash(ret));
 		}
 	}
 
-	/* register_existing_vuid keeps the server info */
-	/* register_existing_vuid takes ownership of session_key on success,
-	 * no need to free after this on success. A better interface would copy
-	 * it.... */
+	/* register_vuid keeps the server info */
+	/* register_vuid takes ownership of session_key, no need to free after this.
+ 	   A better interface would copy it.... */
+	sess_vuid = register_vuid(server_info, session_key, nullblob, client);
 
-	if (!is_partial_auth_vuid(sess_vuid)) {
-		sess_vuid = register_initial_vuid();
-	}
-	sess_vuid = register_existing_vuid(sess_vuid,
-					server_info,
-					session_key,
-					nullblob,
-					client);
-
 	SAFE_FREE(client);
 
-	reply_outbuf(req, 4, 0);
-	SSVAL(req->outbuf,smb_uid,sess_vuid);
-
 	if (sess_vuid == UID_FIELD_INVALID ) {
 		ret = NT_STATUS_LOGON_FAILURE;
-		data_blob_free(&session_key);
 	} else {
 		/* current_user_info is changed on new vuid */
 		reload_services( True );
 
-		SSVAL(req->outbuf, smb_vwv3, 0);
-
+		set_message(outbuf,4,0,True);
+		SSVAL(outbuf, smb_vwv3, 0);
+			
 		if (server_info->guest) {
-			SSVAL(req->outbuf,smb_vwv2,1);
+			SSVAL(outbuf,smb_vwv2,1);
 		}
+		
+		SSVAL(outbuf, smb_uid, sess_vuid);
 
-		SSVAL(req->outbuf, smb_uid, sess_vuid);
-
-		sessionsetup_start_signing_engine(server_info, req->inbuf);
-		/* Successful logon. Keep this vuid. */
-		*p_invalidate_vuid = False;
+		sessionsetup_start_signing_engine(server_info, inbuf);
 	}
 
         /* wrap that up in a nice GSS-API wrapping */
 	if (NT_STATUS_IS_OK(ret)) {
-		ap_rep_wrapped = spnego_gen_krb5_wrap(ap_rep,
-				TOK_ID_KRB_AP_REP);
+		ap_rep_wrapped = spnego_gen_krb5_wrap(ap_rep, TOK_ID_KRB_AP_REP);
 	} else {
-		ap_rep_wrapped = data_blob_null;
+		ap_rep_wrapped = data_blob(NULL, 0);
 	}
-	response = spnego_gen_auth_response(&ap_rep_wrapped, ret,
-			mechOID);
-	reply_sesssetup_blob(req, response, ret);
+	response = spnego_gen_auth_response(&ap_rep_wrapped, ret, OID_KERBEROS5_OLD);
+	reply_sesssetup_blob(conn, outbuf, response, ret);
 
 	data_blob_free(&ap_rep);
 	data_blob_free(&ap_rep_wrapped);
 	data_blob_free(&response);
 	TALLOC_FREE(mem_ctx);
-}
 
+	return -1; /* already replied */
+}
 #endif
 
 /****************************************************************************
@@ -618,77 +558,61 @@
  leg of the NTLM auth steps.
 ***************************************************************************/
 
-static void reply_spnego_ntlmssp(struct smb_request *req,
+static BOOL reply_spnego_ntlmssp(connection_struct *conn, char *inbuf, char *outbuf,
 				 uint16 vuid,
 				 AUTH_NTLMSSP_STATE **auth_ntlmssp_state,
-				 DATA_BLOB *ntlmssp_blob, NTSTATUS nt_status,
-				 const char *OID,
-				 bool wrap)
+				 DATA_BLOB *ntlmssp_blob, NTSTATUS nt_status, 
+				 BOOL wrap) 
 {
+	BOOL ret;
 	DATA_BLOB response;
 	struct auth_serversupplied_info *server_info = NULL;
 
 	if (NT_STATUS_IS_OK(nt_status)) {
 		server_info = (*auth_ntlmssp_state)->server_info;
 	} else {
-		nt_status = do_map_to_guest(nt_status,
-			    &server_info,
-			    (*auth_ntlmssp_state)->ntlmssp_state->user,
-			    (*auth_ntlmssp_state)->ntlmssp_state->domain);
+		nt_status = do_map_to_guest(nt_status, 
+					    &server_info, 
+					    (*auth_ntlmssp_state)->ntlmssp_state->user, 
+					    (*auth_ntlmssp_state)->ntlmssp_state->domain);
 	}
 
-	reply_outbuf(req, 4, 0);
-
-	SSVAL(req->outbuf, smb_uid, vuid);
-
 	if (NT_STATUS_IS_OK(nt_status)) {
-		DATA_BLOB nullblob = data_blob_null;
-		DATA_BLOB session_key =
-			data_blob(
-			(*auth_ntlmssp_state)->ntlmssp_state->session_key.data,
-			(*auth_ntlmssp_state)->ntlmssp_state->session_key.length);
+		int sess_vuid;
+		DATA_BLOB nullblob = data_blob(NULL, 0);
+		DATA_BLOB session_key = data_blob((*auth_ntlmssp_state)->ntlmssp_state->session_key.data, (*auth_ntlmssp_state)->ntlmssp_state->session_key.length);
 
-		if (!is_partial_auth_vuid(vuid)) {
-			data_blob_free(&session_key);
-			nt_status = NT_STATUS_LOGON_FAILURE;
-			goto out;
-		}
-		/* register_existing_vuid keeps the server info */
-		if (register_existing_vuid(vuid,
-				server_info,
-				session_key, nullblob,
-				(*auth_ntlmssp_state)->ntlmssp_state->user) !=
-					vuid) {
-			data_blob_free(&session_key);
-			nt_status = NT_STATUS_LOGON_FAILURE;
-			goto out;
-		}
-
+		/* register_vuid keeps the server info */
+		sess_vuid = register_vuid(server_info, session_key, nullblob, (*auth_ntlmssp_state)->ntlmssp_state->user);
 		(*auth_ntlmssp_state)->server_info = NULL;
 
-		/* current_user_info is changed on new vuid */
-		reload_services( True );
+		if (sess_vuid == UID_FIELD_INVALID ) {
+			nt_status = NT_STATUS_LOGON_FAILURE;
+		} else {
+			
+			/* current_user_info is changed on new vuid */
+			reload_services( True );
 
-		SSVAL(req->outbuf, smb_vwv3, 0);
+			set_message(outbuf,4,0,True);
+			SSVAL(outbuf, smb_vwv3, 0);
+			
+			if (server_info->guest) {
+				SSVAL(outbuf,smb_vwv2,1);
+			}
+			
+			SSVAL(outbuf,smb_uid,sess_vuid);
 
-		if (server_info->guest) {
-			SSVAL(req->outbuf,smb_vwv2,1);
+			sessionsetup_start_signing_engine(server_info, inbuf);
 		}
-
-		sessionsetup_start_signing_engine(server_info,
-						  (uint8 *)req->inbuf);
 	}
 
-  out:
-
 	if (wrap) {
-		response = spnego_gen_auth_response(ntlmssp_blob,
-				nt_status, OID);
+		response = spnego_gen_auth_response(ntlmssp_blob, nt_status, OID_NTLMSSP);
 	} else {
 		response = *ntlmssp_blob;
 	}
 
-	reply_sesssetup_blob(req, response, nt_status);
+	ret = reply_sesssetup_blob(conn, outbuf, response, nt_status);
 	if (wrap) {
 		data_blob_free(&response);
 	}
@@ -696,29 +620,26 @@
 	/* NT_STATUS_MORE_PROCESSING_REQUIRED from our NTLMSSP code tells us,
 	   and the other end, that we are not finished yet. */
 
-	if (!NT_STATUS_EQUAL(nt_status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
+	if (!ret || !NT_STATUS_EQUAL(nt_status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
 		/* NB. This is *NOT* an error case. JRA */
 		auth_ntlmssp_end(auth_ntlmssp_state);
-		if (!NT_STATUS_IS_OK(nt_status)) {
-			/* Kill the intermediate vuid */
-			invalidate_vuid(vuid);
-		}
+		/* Kill the intermediate vuid */
+		invalidate_intermediate_vuid(vuid);
 	}
+
+	return ret;
 }
 
 /****************************************************************************
  Is this a krb5 mechanism ?
 ****************************************************************************/
 
-NTSTATUS parse_spnego_mechanisms(DATA_BLOB blob_in,
-		DATA_BLOB *pblob_out,
-		char **kerb_mechOID)
+static NTSTATUS parse_spnego_mechanisms(DATA_BLOB blob_in, DATA_BLOB *pblob_out, BOOL *p_is_krb5)
 {
 	char *OIDs[ASN1_MAX_OIDS];
 	int i;
-	NTSTATUS ret = NT_STATUS_OK;
 
-	*kerb_mechOID = NULL;
+	*p_is_krb5 = False;
 
 	/* parse out the OIDs and the first sec blob */
 	if (!parse_negTokenTarg(blob_in, OIDs, pblob_out)) {
@@ -726,200 +647,149 @@
 	}
 
 	/* only look at the first OID for determining the mechToken --
-	   according to RFC2478, we should choose the one we want
-	   and renegotiate, but i smell a client bug here..
-
-	   Problem observed when connecting to a member (samba box)
-	   of an AD domain as a user in a Samba domain.  Samba member
-	   server sent back krb5/mskrb5/ntlmssp as mechtypes, but the
-	   client (2ksp3) replied with ntlmssp/mskrb5/krb5 and an
+	   accoirding to RFC2478, we should choose the one we want 
+	   and renegotiate, but i smell a client bug here..  
+	   
+	   Problem observed when connecting to a member (samba box) 
+	   of an AD domain as a user in a Samba domain.  Samba member 
+	   server sent back krb5/mskrb5/ntlmssp as mechtypes, but the 
+	   client (2ksp3) replied with ntlmssp/mskrb5/krb5 and an 
 	   NTLMSSP mechtoken.                 --jerry              */
 
-#ifdef HAVE_KRB5
+#ifdef HAVE_KRB5	
 	if (strcmp(OID_KERBEROS5, OIDs[0]) == 0 ||
 	    strcmp(OID_KERBEROS5_OLD, OIDs[0]) == 0) {
-		*kerb_mechOID = SMB_STRDUP(OIDs[0]);
-		if (*kerb_mechOID == NULL) {
-			ret = NT_STATUS_NO_MEMORY;
-		}
+		*p_is_krb5 = True;
 	}
 #endif
-
+		
 	for (i=0;OIDs[i];i++) {
 		DEBUG(5,("parse_spnego_mechanisms: Got OID %s\n", OIDs[i]));
 		free(OIDs[i]);
 	}
-	return ret;
+	return NT_STATUS_OK;
 }
 
 /****************************************************************************
- Fall back from krb5 to NTLMSSP.
-****************************************************************************/
-
-static void reply_spnego_downgrade_to_ntlmssp(struct smb_request *req,
-						uint16 vuid)
-{
-	DATA_BLOB response;
-
-	reply_outbuf(req, 4, 0);
-        SSVAL(req->outbuf,smb_uid,vuid);
-
-	DEBUG(3,("reply_spnego_downgrade_to_ntlmssp: Got krb5 ticket in SPNEGO "
-		"but set to downgrade to NTLMSSP\n"));
-
-	response = spnego_gen_auth_response(NULL,
-			NT_STATUS_MORE_PROCESSING_REQUIRED,
-			OID_NTLMSSP);
-	reply_sesssetup_blob(req, response, NT_STATUS_MORE_PROCESSING_REQUIRED);
-	data_blob_free(&response);
-}
-
-/****************************************************************************
  Reply to a session setup spnego negotiate packet.
 ****************************************************************************/
 
-static void reply_spnego_negotiate(struct smb_request *req,
-				   uint16 vuid,
-				   DATA_BLOB blob1,
-				   AUTH_NTLMSSP_STATE **auth_ntlmssp_state)
+static int reply_spnego_negotiate(connection_struct *conn, 
+				  char *inbuf,
+				  char *outbuf,
+				  uint16 vuid,
+				  int length, int bufsize,
+				  DATA_BLOB blob1,
+				  AUTH_NTLMSSP_STATE **auth_ntlmssp_state)
 {
 	DATA_BLOB secblob;
 	DATA_BLOB chal;
-	char *kerb_mech = NULL;
+	BOOL got_kerberos_mechanism = False;
 	NTSTATUS status;
 
-	status = parse_spnego_mechanisms(blob1, &secblob, &kerb_mech);
+	status = parse_spnego_mechanisms(blob1, &secblob, &got_kerberos_mechanism);
 	if (!NT_STATUS_IS_OK(status)) {
 		/* Kill the intermediate vuid */
-		invalidate_vuid(vuid);
-		reply_nterror(req, nt_status_squash(status));
-		return;
+		invalidate_intermediate_vuid(vuid);
+		return ERROR_NT(nt_status_squash(status));
 	}
 
-	DEBUG(3,("reply_spnego_negotiate: Got secblob of size %lu\n",
-				(unsigned long)secblob.length));
+	DEBUG(3,("reply_spnego_negotiate: Got secblob of size %lu\n", (unsigned long)secblob.length));
 
 #ifdef HAVE_KRB5
-	if (kerb_mech && ((lp_security()==SEC_ADS) ||
-				lp_use_kerberos_keytab()) ) {
-		bool destroy_vuid = True;
-		reply_spnego_kerberos(req, &secblob, kerb_mech,
-				      vuid, &destroy_vuid);
+	if ( got_kerberos_mechanism && ((lp_security()==SEC_ADS) || lp_use_kerberos_keytab()) ) {
+		BOOL destroy_vuid = True;
+		int ret = reply_spnego_kerberos(conn, inbuf, outbuf, 
+						length, bufsize, &secblob, &destroy_vuid);
 		data_blob_free(&secblob);
 		if (destroy_vuid) {
 			/* Kill the intermediate vuid */
-			invalidate_vuid(vuid);
+			invalidate_intermediate_vuid(vuid);
 		}
-		SAFE_FREE(kerb_mech);
-		return;
+		return ret;
 	}
 #endif
 
+	if (got_kerberos_mechanism) {
+		invalidate_intermediate_vuid(vuid);
+		DEBUG(3,("reply_spnego_negotiate: network "
+			"misconfiguration, client sent us a "
+			"krb5 ticket and kerberos security "
+			"not enabled"));
+		return ERROR_NT(nt_status_squash(NT_STATUS_LOGON_FAILURE));
+	}
+
 	if (*auth_ntlmssp_state) {
 		auth_ntlmssp_end(auth_ntlmssp_state);
 	}
 
-	if (kerb_mech) {
-		data_blob_free(&secblob);
-		/* The mechtoken is a krb5 ticket, but
-		 * we need to fall back to NTLM. */
-		reply_spnego_downgrade_to_ntlmssp(req, vuid);
-		SAFE_FREE(kerb_mech);
-		return;
-	}
-
 	status = auth_ntlmssp_start(auth_ntlmssp_state);
 	if (!NT_STATUS_IS_OK(status)) {
 		/* Kill the intermediate vuid */
-		invalidate_vuid(vuid);
-		reply_nterror(req, nt_status_squash(status));
-		return;
+		invalidate_intermediate_vuid(vuid);
+		return ERROR_NT(nt_status_squash(status));
 	}
 
-	status = auth_ntlmssp_update(*auth_ntlmssp_state,
+	status = auth_ntlmssp_update(*auth_ntlmssp_state, 
 					secblob, &chal);
 
 	data_blob_free(&secblob);
 
-	reply_spnego_ntlmssp(req, vuid, auth_ntlmssp_state,
-			     &chal, status, OID_NTLMSSP, true);
+	reply_spnego_ntlmssp(conn, inbuf, outbuf, vuid, auth_ntlmssp_state,
+			     &chal, status, True);
 
 	data_blob_free(&chal);
 
 	/* already replied */
-	return;
+	return -1;
 }
 
 /****************************************************************************
  Reply to a session setup spnego auth packet.
 ****************************************************************************/
 
-static void reply_spnego_auth(struct smb_request *req,
-			      uint16 vuid,
-			      DATA_BLOB blob1,
-			      AUTH_NTLMSSP_STATE **auth_ntlmssp_state)
+static int reply_spnego_auth(connection_struct *conn, char *inbuf, char *outbuf,
+			     uint16 vuid,
+			     int length, int bufsize,
+			     DATA_BLOB blob1,
+			     AUTH_NTLMSSP_STATE **auth_ntlmssp_state)
 {
-	DATA_BLOB auth = data_blob_null;
-	DATA_BLOB auth_reply = data_blob_null;
-	DATA_BLOB secblob = data_blob_null;
-	NTSTATUS status = NT_STATUS_LOGON_FAILURE;
+	DATA_BLOB auth = data_blob(NULL,0);
+	DATA_BLOB auth_reply = data_blob(NULL,0);
+	DATA_BLOB secblob = data_blob(NULL,0);
+	NTSTATUS status = NT_STATUS_INVALID_PARAMETER;
 
 	if (!spnego_parse_auth(blob1, &auth)) {
 #if 0
 		file_save("auth.dat", blob1.data, blob1.length);
 #endif
 		/* Kill the intermediate vuid */
-		invalidate_vuid(vuid);
+		invalidate_intermediate_vuid(vuid);
 
-		reply_nterror(req, nt_status_squash(
-				      NT_STATUS_LOGON_FAILURE));
-		return;
+		return ERROR_NT(nt_status_squash(NT_STATUS_LOGON_FAILURE));
 	}
 
 	if (auth.data[0] == ASN1_APPLICATION(0)) {
 		/* Might be a second negTokenTarg packet */
-		char *kerb_mech = NULL;
 
-		status = parse_spnego_mechanisms(auth, &secblob, &kerb_mech);
-
-		if (!NT_STATUS_IS_OK(status)) {
-			/* Kill the intermediate vuid */
-			invalidate_vuid(vuid);
-			reply_nterror(req, nt_status_squash(status));
-			return;
-		}
-
-		DEBUG(3,("reply_spnego_auth: Got secblob of size %lu\n",
-				(unsigned long)secblob.length));
+		BOOL got_krb5_mechanism = False;
+		status = parse_spnego_mechanisms(auth, &secblob, &got_krb5_mechanism);
+		if (NT_STATUS_IS_OK(status)) {
+			DEBUG(3,("reply_spnego_auth: Got secblob of size %lu\n", (unsigned long)secblob.length));
 #ifdef HAVE_KRB5
-		if (kerb_mech && ((lp_security()==SEC_ADS) ||
-					lp_use_kerberos_keytab()) ) {
-			bool destroy_vuid = True;
-			reply_spnego_kerberos(req, &secblob, kerb_mech,
-					      vuid, &destroy_vuid);
-			data_blob_free(&secblob);
-			data_blob_free(&auth);
-			if (destroy_vuid) {
-				/* Kill the intermediate vuid */
-				invalidate_vuid(vuid);
+			if ( got_krb5_mechanism && ((lp_security()==SEC_ADS) || lp_use_kerberos_keytab()) ) {
+				BOOL destroy_vuid = True;
+				int ret = reply_spnego_kerberos(conn, inbuf, outbuf, 
+								length, bufsize, &secblob, &destroy_vuid);
+				data_blob_free(&secblob);
+				data_blob_free(&auth);
+				if (destroy_vuid) {
+					/* Kill the intermediate vuid */
+					invalidate_intermediate_vuid(vuid);
+				}
+				return ret;
 			}
-			SAFE_FREE(kerb_mech);
-			return;
-		}
 #endif
-		/* Can't blunder into NTLMSSP auth if we have
-		 * a krb5 ticket. */
-
-		if (kerb_mech) {
-			/* Kill the intermediate vuid */
-			invalidate_vuid(vuid);
-			DEBUG(3,("reply_spnego_auth: network "
-				"misconfiguration, client sent us a "
-				"krb5 ticket and kerberos security "
-				"not enabled"));
-			reply_nterror(req, nt_status_squash(
-					NT_STATUS_LOGON_FAILURE));
-			SAFE_FREE(kerb_mech);
 		}
 	}
 
@@ -927,13 +797,11 @@
 	data_blob_free(&secblob);
 
 	if (!*auth_ntlmssp_state) {
-		status = auth_ntlmssp_start(auth_ntlmssp_state);
-		if (!NT_STATUS_IS_OK(status)) {
-			/* Kill the intermediate vuid */
-			invalidate_vuid(vuid);
-			reply_nterror(req, nt_status_squash(status));
-			return;
-		}
+		/* Kill the intermediate vuid */
+		invalidate_intermediate_vuid(vuid);
+
+		/* auth before negotiatiate? */
+		return ERROR_NT(NT_STATUS_LOGON_FAILURE);
 	}
 
 	status = auth_ntlmssp_update(*auth_ntlmssp_state,
@@ -941,16 +809,14 @@
 
 	data_blob_free(&auth);
 
-	/* Don't send the mechid as we've already sent this (RFC4178). */
-
-	reply_spnego_ntlmssp(req, vuid,
+	reply_spnego_ntlmssp(conn, inbuf, outbuf, vuid,
 			     auth_ntlmssp_state,
-			     &auth_reply, status, NULL, true);
+			     &auth_reply, status, True);
 
 	data_blob_free(&auth_reply);
 
 	/* and tell smbd that we have already replied to this packet */
-	return;
+	return -1;
 }
 
 /****************************************************************************
@@ -990,13 +856,11 @@
 }
 
 /****************************************************************************
- Check the size of an SPNEGO blob. If we need more return
- NT_STATUS_MORE_PROCESSING_REQUIRED, else return NT_STATUS_OK. Don't allow
- the blob to be more than 64k.
+ Check the size of an SPNEGO blob. If we need more return NT_STATUS_MORE_PROCESSING_REQUIRED,
+ else return NT_STATUS_OK. Don't allow the blob to be more than 64k.
 ****************************************************************************/
 
-static NTSTATUS check_spnego_blob_complete(uint16 smbpid, uint16 vuid,
-		DATA_BLOB *pblob)
+static NTSTATUS check_spnego_blob_complete(uint16 smbpid, uint16 vuid, DATA_BLOB *pblob)
 {
 	struct pending_auth_data *pad = NULL;
 	ASN1_DATA data;
@@ -1019,8 +883,7 @@
 
 		/* Integer wrap paranoia.... */
 
-		if (pad->partial_data.length + copy_len <
-				pad->partial_data.length ||
+		if (pad->partial_data.length + copy_len < pad->partial_data.length ||
 		    pad->partial_data.length + copy_len < copy_len) {
 
 			DEBUG(2,("check_spnego_blob_complete: integer wrap "
@@ -1127,14 +990,14 @@
 
 	/* Refuse the blob if it's bigger than 64k. */
 	if (needed_len > 65536) {
-		DEBUG(2,("check_spnego_blob_complete: needed_len "
-			"too large (%u)\n",
+		DEBUG(2,("check_spnego_blob_complete: needed_len too large (%u)\n",
 			(unsigned int)needed_len ));
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
 	/* We must store this blob until complete. */
-	if (!(pad = SMB_MALLOC_P(struct pending_auth_data))) {
+	pad = SMB_MALLOC(sizeof(struct pending_auth_data));
+	if (!pad) {
 		return NT_STATUS_NO_MEMORY;
 	}
 	pad->needed_len = needed_len - pblob->length;
@@ -1155,41 +1018,42 @@
  conn POINTER CAN BE NULL HERE !
 ****************************************************************************/
 
-static void reply_sesssetup_and_X_spnego(struct smb_request *req)
+static int reply_sesssetup_and_X_spnego(connection_struct *conn, char *inbuf,
+					char *outbuf,
+					int length,int bufsize)
 {
 	uint8 *p;
 	DATA_BLOB blob1;
+	int ret;
 	size_t bufrem;
 	fstring native_os, native_lanman, primary_domain;
-	const char *p2;
-	uint16 data_blob_len = SVAL(req->inbuf, smb_vwv7);
+	char *p2;
+	uint16 data_blob_len = SVAL(inbuf, smb_vwv7);
 	enum remote_arch_types ra_type = get_remote_arch();
-	int vuid = SVAL(req->inbuf,smb_uid);
+	int vuid = SVAL(inbuf,smb_uid);
 	user_struct *vuser = NULL;
 	NTSTATUS status = NT_STATUS_OK;
-	uint16 smbpid = req->smbpid;
-	uint16 smb_flag2 = req->flags2;
+	uint16 smbpid = SVAL(inbuf,smb_pid);
 
 	DEBUG(3,("Doing spnego session setup\n"));
 
 	if (global_client_caps == 0) {
-		global_client_caps = IVAL(req->inbuf,smb_vwv10);
+		global_client_caps = IVAL(inbuf,smb_vwv10);
 
 		if (!(global_client_caps & CAP_STATUS32)) {
 			remove_from_common_flags2(FLAGS2_32_BIT_ERROR_CODES);
 		}
 
 	}
+		
+	p = (uint8 *)smb_buf(inbuf);
 
-	p = (uint8 *)smb_buf(req->inbuf);
-
 	if (data_blob_len == 0) {
 		/* an invalid request */
-		reply_nterror(req, nt_status_squash(NT_STATUS_LOGON_FAILURE));
-		return;
+		return ERROR_NT(nt_status_squash(NT_STATUS_LOGON_FAILURE));
 	}
 
-	bufrem = smb_bufrem(req->inbuf, p);
+	bufrem = smb_bufrem(inbuf, p);
 	/* pull the spnego blob */
 	blob1 = data_blob(p, MIN(bufrem, data_blob_len));
 
@@ -1197,14 +1061,11 @@
 	file_save("negotiate.dat", blob1.data, blob1.length);
 #endif
 
-	p2 = (char *)req->inbuf + smb_vwv13 + data_blob_len;
-	p2 += srvstr_pull_buf(req->inbuf, smb_flag2, native_os, p2,
-			      sizeof(native_os), STR_TERMINATE);
-	p2 += srvstr_pull_buf(req->inbuf, smb_flag2, native_lanman, p2,
-			      sizeof(native_lanman), STR_TERMINATE);
-	p2 += srvstr_pull_buf(req->inbuf, smb_flag2, primary_domain, p2,
-			      sizeof(primary_domain), STR_TERMINATE);
-	DEBUG(3,("NativeOS=[%s] NativeLanMan=[%s] PrimaryDomain=[%s]\n",
+	p2 = inbuf + smb_vwv13 + data_blob_len;
+	p2 += srvstr_pull_buf(inbuf, native_os, p2, sizeof(native_os), STR_TERMINATE);
+	p2 += srvstr_pull_buf(inbuf, native_lanman, p2, sizeof(native_lanman), STR_TERMINATE);
+	p2 += srvstr_pull_buf(inbuf, primary_domain, p2, sizeof(primary_domain), STR_TERMINATE);
+	DEBUG(3,("NativeOS=[%s] NativeLanMan=[%s] PrimaryDomain=[%s]\n", 
 		native_os, native_lanman, primary_domain));
 
 	if ( ra_type == RA_WIN2K ) {
@@ -1212,47 +1073,44 @@
 
 		if ( !strlen(native_os) && !strlen(native_lanman) )
 			set_remote_arch(RA_VISTA);
-
-		/* Windows 2003 doesn't set the native lanman string,
+		
+		/* Windows 2003 doesn't set the native lanman string, 
 		   but does set primary domain which is a bug I think */
-
+			   
 		if ( !strlen(native_lanman) ) {
 			ra_lanman_string( primary_domain );
 		} else {
 			ra_lanman_string( native_lanman );
 		}
 	}
-
-	/* Did we get a valid vuid ? */
-	if (!is_partial_auth_vuid(vuid)) {
-		/* No, then try and see if this is an intermediate sessionsetup
-		 * for a large SPNEGO packet. */
+		
+	vuser = get_partial_auth_user_struct(vuid);
+	if (!vuser) {
 		struct pending_auth_data *pad = get_pending_auth_data(smbpid);
 		if (pad) {
-			DEBUG(10,("reply_sesssetup_and_X_spnego: found "
-				"pending vuid %u\n",
+			DEBUG(10,("reply_sesssetup_and_X_spnego: found pending vuid %u\n",
 				(unsigned int)pad->vuid ));
 			vuid = pad->vuid;
+			vuser = get_partial_auth_user_struct(vuid);
 		}
 	}
 
-	/* Do we have a valid vuid now ? */
-	if (!is_partial_auth_vuid(vuid)) {
-		/* No, start a new authentication setup. */
-		vuid = register_initial_vuid();
-		if (vuid == UID_FIELD_INVALID) {
+	if (!vuser) {
+		vuid = register_vuid(NULL, data_blob(NULL, 0), data_blob(NULL, 0), NULL);
+		if (vuid == UID_FIELD_INVALID ) {
 			data_blob_free(&blob1);
-			reply_nterror(req, nt_status_squash(
-					      NT_STATUS_INVALID_PARAMETER));
-			return;
+			return ERROR_NT(nt_status_squash(NT_STATUS_INVALID_PARAMETER));
 		}
+	
+		vuser = get_partial_auth_user_struct(vuid);
 	}
 
-	vuser = get_partial_auth_user_struct(vuid);
-	/* This MUST be valid. */
 	if (!vuser) {
-		smb_panic("reply_sesssetup_and_X_spnego: invalid vuid.");
+		data_blob_free(&blob1);
+		return ERROR_NT(nt_status_squash(NT_STATUS_INVALID_PARAMETER));
 	}
+	
+	SSVAL(outbuf,smb_uid,vuid);
 
 	/* Large (greater than 4k) SPNEGO blobs are split into multiple
 	 * sessionsetup requests as the Windows limit on the security blob
@@ -1261,60 +1119,52 @@
 
 	status = check_spnego_blob_complete(smbpid, vuid, &blob1);
 	if (!NT_STATUS_IS_OK(status)) {
-		if (!NT_STATUS_EQUAL(status,
-				NT_STATUS_MORE_PROCESSING_REQUIRED)) {
+		if (!NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
 			/* Real error - kill the intermediate vuid */
-			invalidate_vuid(vuid);
+			invalidate_intermediate_vuid(vuid);
 		}
 		data_blob_free(&blob1);
-		reply_nterror(req, nt_status_squash(status));
-		return;
+		return ERROR_NT(nt_status_squash(status));
 	}
 
 	if (blob1.data[0] == ASN1_APPLICATION(0)) {
-
 		/* its a negTokenTarg packet */
-
-		reply_spnego_negotiate(req, vuid, blob1,
-				       &vuser->auth_ntlmssp_state);
+		ret = reply_spnego_negotiate(conn, inbuf, outbuf, vuid, length, bufsize, blob1,
+					     &vuser->auth_ntlmssp_state);
 		data_blob_free(&blob1);
-		return;
+		return ret;
 	}
 
 	if (blob1.data[0] == ASN1_CONTEXT(1)) {
-
 		/* its a auth packet */
-
-		reply_spnego_auth(req, vuid, blob1,
-				  &vuser->auth_ntlmssp_state);
+		ret = reply_spnego_auth(conn, inbuf, outbuf, vuid, length, bufsize, blob1,
+					&vuser->auth_ntlmssp_state);
 		data_blob_free(&blob1);
-		return;
+		return ret;
 	}
 
 	if (strncmp((char *)(blob1.data), "NTLMSSP", 7) == 0) {
 		DATA_BLOB chal;
-
 		if (!vuser->auth_ntlmssp_state) {
 			status = auth_ntlmssp_start(&vuser->auth_ntlmssp_state);
 			if (!NT_STATUS_IS_OK(status)) {
 				/* Kill the intermediate vuid */
-				invalidate_vuid(vuid);
+				invalidate_intermediate_vuid(vuid);
 				data_blob_free(&blob1);
-				reply_nterror(req, nt_status_squash(status));
-				return;
+				return ERROR_NT(nt_status_squash(status));
 			}
 		}
 
 		status = auth_ntlmssp_update(vuser->auth_ntlmssp_state,
 						blob1, &chal);
-
+		
 		data_blob_free(&blob1);
-
-		reply_spnego_ntlmssp(req, vuid,
-				     &vuser->auth_ntlmssp_state,
-				     &chal, status, OID_NTLMSSP, false);
+		
+		reply_spnego_ntlmssp(conn, inbuf, outbuf, vuid, 
+					   &vuser->auth_ntlmssp_state,
+					   &chal, status, False);
 		data_blob_free(&chal);
-		return;
+		return -1;
 	}
 
 	/* what sort of packet is this? */
@@ -1322,7 +1172,7 @@
 
 	data_blob_free(&blob1);
 
-	reply_nterror(req, nt_status_squash(NT_STATUS_LOGON_FAILURE));
+	return ERROR_NT(nt_status_squash(NT_STATUS_LOGON_FAILURE));
 }
 
 /****************************************************************************
@@ -1331,44 +1181,41 @@
  a new session setup with VC==0 is ignored.
 ****************************************************************************/
 
-static int shutdown_other_smbds(struct db_record *rec,
-				const struct connections_key *key,
-				const struct connections_data *crec,
-				void *private_data)
+static int shutdown_other_smbds(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf,
+				void *p)
 {
-	const char *ip = (const char *)private_data;
+	struct sessionid sessionid;
+	const char *ip = (const char *)p;
 
-	if (!process_exists(crec->pid)) {
+	SMB_ASSERT(dbuf.dsize == sizeof(sessionid));
+	memcpy(&sessionid, dbuf.dptr, sizeof(sessionid));
+
+	if (!process_exists(pid_to_procid(sessionid.pid))) {
 		return 0;
 	}
 
-	if (procid_is_me(&crec->pid)) {
+	if (sessionid.pid == sys_getpid()) {
 		return 0;
 	}
 
-	if (strcmp(ip, crec->addr) != 0) {
+	if (strcmp(ip, sessionid.ip_addr) != 0) {
 		return 0;
 	}
 
-	messaging_send(smbd_messaging_context(), crec->pid, MSG_SHUTDOWN,
-		       &data_blob_null);
+	message_send_pid(pid_to_procid(sessionid.pid), MSG_SHUTDOWN,
+			 NULL, 0, True);
 	return 0;
 }
 
 static void setup_new_vc_session(void)
 {
-	char addr[INET6_ADDRSTRLEN];
-
-	DEBUG(2,("setup_new_vc_session: New VC == 0, if NT4.x "
-		"compatible we would close all old resources.\n"));
+	DEBUG(2,("setup_new_vc_session: New VC == 0, if NT4.x compatible we would close all old resources.\n"));
 #if 0
 	conn_close_all();
 	invalidate_all_vuids();
 #endif
 	if (lp_reset_on_zero_vc()) {
-		connections_forall(shutdown_other_smbds,
-			CONST_DISCARD(void *,
-			client_addr(get_client_fd(),addr,sizeof(addr))));
+		session_traverse(shutdown_other_smbds, client_addr());
 	}
 }
 
@@ -1376,10 +1223,11 @@
  Reply to a session setup command.
 ****************************************************************************/
 
-void reply_sesssetup_and_X(struct smb_request *req)
+int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf,
+			  int length,int bufsize)
 {
 	int sess_vuid;
-	int smb_bufsize;
+	int   smb_bufsize;    
 	DATA_BLOB lm_resp;
 	DATA_BLOB nt_resp;
 	DATA_BLOB plaintext_password;
@@ -1389,150 +1237,118 @@
 	fstring native_os;
 	fstring native_lanman;
 	fstring primary_domain;
-	static bool done_sesssetup = False;
+	static BOOL done_sesssetup = False;
 	auth_usersupplied_info *user_info = NULL;
 	auth_serversupplied_info *server_info = NULL;
-	uint16 smb_flag2 = req->flags2;
 
 	NTSTATUS nt_status;
 
-	bool doencrypt = global_encrypted_passwords_negotiated;
+	BOOL doencrypt = global_encrypted_passwords_negotiated;
 
 	DATA_BLOB session_key;
-
+	
 	START_PROFILE(SMBsesssetupX);
 
 	ZERO_STRUCT(lm_resp);
 	ZERO_STRUCT(nt_resp);
 	ZERO_STRUCT(plaintext_password);
 
-	DEBUG(3,("wct=%d flg2=0x%x\n", req->wct, req->flags2));
+	DEBUG(3,("wct=%d flg2=0x%x\n", CVAL(inbuf, smb_wct), SVAL(inbuf, smb_flg2)));
 
 	/* a SPNEGO session setup has 12 command words, whereas a normal
 	   NT1 session setup has 13. See the cifs spec. */
-	if (req->wct == 12 &&
-	    (req->flags2 & FLAGS2_EXTENDED_SECURITY)) {
-
+	if (CVAL(inbuf, smb_wct) == 12 &&
+	    (SVAL(inbuf, smb_flg2) & FLAGS2_EXTENDED_SECURITY)) {
 		if (!global_spnego_negotiated) {
-			DEBUG(0,("reply_sesssetup_and_X:  Rejecting attempt "
-				 "at SPNEGO session setup when it was not "
-				 "negotiated.\n"));
-			reply_nterror(req, nt_status_squash(
-					      NT_STATUS_LOGON_FAILURE));
-			END_PROFILE(SMBsesssetupX);
-			return;
+			DEBUG(0,("reply_sesssetup_and_X:  Rejecting attempt at SPNEGO session setup when it was not negoitiated.\n"));
+			return ERROR_NT(nt_status_squash(NT_STATUS_LOGON_FAILURE));
 		}
 
-		if (SVAL(req->inbuf,smb_vwv4) == 0) {
+		if (SVAL(inbuf,smb_vwv4) == 0) {
 			setup_new_vc_session();
 		}
-
-		reply_sesssetup_and_X_spnego(req);
-		END_PROFILE(SMBsesssetupX);
-		return;
+		return reply_sesssetup_and_X_spnego(conn, inbuf, outbuf, length, bufsize);
 	}
 
-	smb_bufsize = SVAL(req->inbuf,smb_vwv2);
+	smb_bufsize = SVAL(inbuf,smb_vwv2);
 
 	if (Protocol < PROTOCOL_NT1) {
-		uint16 passlen1 = SVAL(req->inbuf,smb_vwv7);
+		uint16 passlen1 = SVAL(inbuf,smb_vwv7);
 
-		/* Never do NT status codes with protocols before NT1 as we
-		 * don't get client caps. */
+		/* Never do NT status codes with protocols before NT1 as we don't get client caps. */
 		remove_from_common_flags2(FLAGS2_32_BIT_ERROR_CODES);
 
-		if ((passlen1 > MAX_PASS_LEN)
-		    || (passlen1 > smb_bufrem(req->inbuf,
-					      smb_buf(req->inbuf)))) {
-			reply_nterror(req, nt_status_squash(
-					      NT_STATUS_INVALID_PARAMETER));
-			END_PROFILE(SMBsesssetupX);
-			return;
+		if ((passlen1 > MAX_PASS_LEN) || (passlen1 > smb_bufrem(inbuf, smb_buf(inbuf)))) {
+			return ERROR_NT(nt_status_squash(NT_STATUS_INVALID_PARAMETER));
 		}
 
 		if (doencrypt) {
-			lm_resp = data_blob(smb_buf(req->inbuf), passlen1);
+			lm_resp = data_blob(smb_buf(inbuf), passlen1);
 		} else {
-			plaintext_password = data_blob(smb_buf(req->inbuf),
-						       passlen1+1);
+			plaintext_password = data_blob(smb_buf(inbuf), passlen1+1);
 			/* Ensure null termination */
 			plaintext_password.data[passlen1] = 0;
 		}
 
-		srvstr_pull_buf(req->inbuf, req->flags2, user,
-				smb_buf(req->inbuf)+passlen1, sizeof(user),
-				STR_TERMINATE);
+		srvstr_pull_buf(inbuf, user, smb_buf(inbuf)+passlen1, sizeof(user), STR_TERMINATE);
 		*domain = 0;
 
 	} else {
-		uint16 passlen1 = SVAL(req->inbuf,smb_vwv7);
-		uint16 passlen2 = SVAL(req->inbuf,smb_vwv8);
+		uint16 passlen1 = SVAL(inbuf,smb_vwv7);
+		uint16 passlen2 = SVAL(inbuf,smb_vwv8);
 		enum remote_arch_types ra_type = get_remote_arch();
-		char *p = smb_buf(req->inbuf);
-		char *save_p = smb_buf(req->inbuf);
+		char *p = smb_buf(inbuf);    
+		char *save_p = smb_buf(inbuf);
 		uint16 byte_count;
+			
 
-
 		if(global_client_caps == 0) {
-			global_client_caps = IVAL(req->inbuf,smb_vwv11);
-
+			global_client_caps = IVAL(inbuf,smb_vwv11);
+		
 			if (!(global_client_caps & CAP_STATUS32)) {
-				remove_from_common_flags2(
-						FLAGS2_32_BIT_ERROR_CODES);
+				remove_from_common_flags2(FLAGS2_32_BIT_ERROR_CODES);
 			}
 
-			/* client_caps is used as final determination if
-			 * client is NT or Win95. This is needed to return
-			 * the correct error codes in some circumstances.
+			/* client_caps is used as final determination if client is NT or Win95. 
+			   This is needed to return the correct error codes in some
+			   circumstances.
 			*/
-
-			if(ra_type == RA_WINNT || ra_type == RA_WIN2K ||
-					ra_type == RA_WIN95) {
-				if(!(global_client_caps & (CAP_NT_SMBS|
-							CAP_STATUS32))) {
+		
+			if(ra_type == RA_WINNT || ra_type == RA_WIN2K || ra_type == RA_WIN95) {
+				if(!(global_client_caps & (CAP_NT_SMBS | CAP_STATUS32))) {
 					set_remote_arch( RA_WIN95);
 				}
 			}
 		}
 
 		if (!doencrypt) {
-			/* both Win95 and WinNT stuff up the password
-			 * lengths for non-encrypting systems. Uggh.
-
-			   if passlen1==24 its a win95 system, and its setting
-			   the password length incorrectly. Luckily it still
-			   works with the default code because Win95 will null
-			   terminate the password anyway
-
-			   if passlen1>0 and passlen2>0 then maybe its a NT box
-			   and its setting passlen2 to some random value which
-			   really stuffs things up. we need to fix that one.  */
-
-			if (passlen1 > 0 && passlen2 > 0 && passlen2 != 24 &&
-					passlen2 != 1) {
+			/* both Win95 and WinNT stuff up the password lengths for
+			   non-encrypting systems. Uggh. 
+			   
+			   if passlen1==24 its a win95 system, and its setting the
+			   password length incorrectly. Luckily it still works with the
+			   default code because Win95 will null terminate the password
+			   anyway 
+			   
+			   if passlen1>0 and passlen2>0 then maybe its a NT box and its
+			   setting passlen2 to some random value which really stuffs
+			   things up. we need to fix that one.  */
+			
+			if (passlen1 > 0 && passlen2 > 0 && passlen2 != 24 && passlen2 != 1)
 				passlen2 = 0;
-			}
 		}
-
+		
 		/* check for nasty tricks */
-		if (passlen1 > MAX_PASS_LEN
-		    || passlen1 > smb_bufrem(req->inbuf, p)) {
-			reply_nterror(req, nt_status_squash(
-					      NT_STATUS_INVALID_PARAMETER));
-			END_PROFILE(SMBsesssetupX);
-			return;
+		if (passlen1 > MAX_PASS_LEN || passlen1 > smb_bufrem(inbuf, p)) {
+			return ERROR_NT(nt_status_squash(NT_STATUS_INVALID_PARAMETER));
 		}
 
-		if (passlen2 > MAX_PASS_LEN
-		    || passlen2 > smb_bufrem(req->inbuf, p+passlen1)) {
-			reply_nterror(req, nt_status_squash(
-					      NT_STATUS_INVALID_PARAMETER));
-			END_PROFILE(SMBsesssetupX);
-			return;
+		if (passlen2 > MAX_PASS_LEN || passlen2 > smb_bufrem(inbuf, p+passlen1)) {
+			return ERROR_NT(nt_status_squash(NT_STATUS_INVALID_PARAMETER));
 		}
 
 		/* Save the lanman2 password and the NT md4 password. */
-
+		
 		if ((doencrypt) && (passlen1 != 0) && (passlen1 != 24)) {
 			doencrypt = False;
 		}
@@ -1540,72 +1356,50 @@
 		if (doencrypt) {
 			lm_resp = data_blob(p, passlen1);
 			nt_resp = data_blob(p+passlen1, passlen2);
-		} else if (lp_security() != SEC_SHARE) {
-			/*
-			 * In share level we should ignore any passwords, so
- 			 * only read them if we're not.
- 			 */
-			char *pass = NULL;
-			bool unic= smb_flag2 & FLAGS2_UNICODE_STRINGS;
+		} else {
+			pstring pass;
+			BOOL unic=SVAL(inbuf, smb_flg2) & FLAGS2_UNICODE_STRINGS;
 
+#if 0
+			/* This was the previous fix. Not sure if it's still valid. JRA. */
+			if ((ra_type == RA_WINNT) && (passlen2 == 0) && unic && passlen1) {
+				/* NT4.0 stuffs up plaintext unicode password lengths... */
+				srvstr_pull(inbuf, pass, smb_buf(inbuf) + 1,
+					sizeof(pass), passlen1, STR_TERMINATE);
+#endif
+
 			if (unic && (passlen2 == 0) && passlen1) {
 				/* Only a ascii plaintext password was sent. */
-				(void)srvstr_pull_talloc(talloc_tos(),
-							req->inbuf,
-							req->flags2,
-							&pass,
-							smb_buf(req->inbuf),
-							passlen1,
-							STR_TERMINATE|STR_ASCII);
+				srvstr_pull(inbuf, pass, smb_buf(inbuf), sizeof(pass),
+					passlen1, STR_TERMINATE|STR_ASCII);
 			} else {
-				(void)srvstr_pull_talloc(talloc_tos(),
-							req->inbuf,
-							req->flags2,
-							&pass,
-							smb_buf(req->inbuf),
-							unic ? passlen2 : passlen1,
-							STR_TERMINATE);
+				srvstr_pull(inbuf, pass, smb_buf(inbuf), 
+					sizeof(pass),  unic ? passlen2 : passlen1, 
+					STR_TERMINATE);
 			}
-			if (!pass) {
-				reply_nterror(req, nt_status_squash(
-					      NT_STATUS_INVALID_PARAMETER));
-				END_PROFILE(SMBsesssetupX);
-				return;
-			}
 			plaintext_password = data_blob(pass, strlen(pass)+1);
 		}
-
+		
 		p += passlen1 + passlen2;
-		p += srvstr_pull_buf(req->inbuf, req->flags2, user, p,
-				     sizeof(user), STR_TERMINATE);
-		p += srvstr_pull_buf(req->inbuf, req->flags2, domain, p,
-				     sizeof(domain), STR_TERMINATE);
-		p += srvstr_pull_buf(req->inbuf, req->flags2, native_os,
-				     p, sizeof(native_os), STR_TERMINATE);
-		p += srvstr_pull_buf(req->inbuf, req->flags2,
-				     native_lanman, p, sizeof(native_lanman),
-				     STR_TERMINATE);
+		p += srvstr_pull_buf(inbuf, user, p, sizeof(user), STR_TERMINATE);
+		p += srvstr_pull_buf(inbuf, domain, p, sizeof(domain), STR_TERMINATE);
+		p += srvstr_pull_buf(inbuf, native_os, p, sizeof(native_os), STR_TERMINATE);
+		p += srvstr_pull_buf(inbuf, native_lanman, p, sizeof(native_lanman), STR_TERMINATE);
 
-		/* not documented or decoded by Ethereal but there is one more
-		 * string in the extra bytes which is the same as the
-		 * PrimaryDomain when using extended security.  Windows NT 4
-		 * and 2003 use this string to store the native lanman string.
-		 * Windows 9x does not include a string here at all so we have
-		 * to check if we have any extra bytes left */
-
-		byte_count = SVAL(req->inbuf, smb_vwv13);
-		if ( PTR_DIFF(p, save_p) < byte_count) {
-			p += srvstr_pull_buf(req->inbuf, req->flags2,
-					     primary_domain, p,
-					     sizeof(primary_domain),
-					     STR_TERMINATE);
-		} else {
+		/* not documented or decoded by Ethereal but there is one more string 
+		   in the extra bytes which is the same as the PrimaryDomain when using 
+		   extended security.  Windows NT 4 and 2003 use this string to store 
+		   the native lanman string. Windows 9x does not include a string here 
+		   at all so we have to check if we have any extra bytes left */
+		
+		byte_count = SVAL(inbuf, smb_vwv13);
+		if ( PTR_DIFF(p, save_p) < byte_count)
+			p += srvstr_pull_buf(inbuf, primary_domain, p, sizeof(primary_domain), STR_TERMINATE);
+		else 
 			fstrcpy( primary_domain, "null" );
-		}
 
-		DEBUG(3,("Domain=[%s]  NativeOS=[%s] NativeLanMan=[%s] "
-			"PrimaryDomain=[%s]\n",
-			domain, native_os, native_lanman, primary_domain));
+		DEBUG(3,("Domain=[%s]  NativeOS=[%s] NativeLanMan=[%s] PrimaryDomain=[%s]\n",
+			 domain, native_os, native_lanman, primary_domain));
 
 		if ( ra_type == RA_WIN2K ) {
 			if ( strlen(native_lanman) == 0 )
@@ -1616,26 +1410,19 @@
 
 	}
 
-	if (SVAL(req->inbuf,smb_vwv4) == 0) {
+	if (SVAL(inbuf,smb_vwv4) == 0) {
 		setup_new_vc_session();
 	}
 
-	DEBUG(3,("sesssetupX:name=[%s]\\[%s]@[%s]\n",
-				domain, user, get_remote_machine_name()));
+	DEBUG(3,("sesssetupX:name=[%s]\\[%s]@[%s]\n", domain, user, get_remote_machine_name()));
 
 	if (*user) {
 		if (global_spnego_negotiated) {
-
-			/* This has to be here, because this is a perfectly
-			 * valid behaviour for guest logons :-( */
-
-			DEBUG(0,("reply_sesssetup_and_X:  Rejecting attempt "
-				"at 'normal' session setup after "
-				"negotiating spnego.\n"));
-			reply_nterror(req, nt_status_squash(
-					      NT_STATUS_LOGON_FAILURE));
-			END_PROFILE(SMBsesssetupX);
-			return;
+			
+			/* This has to be here, because this is a perfectly valid behaviour for guest logons :-( */
+			
+			DEBUG(0,("reply_sesssetup_and_X:  Rejecting attempt at 'normal' session setup after negotiating spnego.\n"));
+			return ERROR_NT(nt_status_squash(NT_STATUS_LOGON_FAILURE));
 		}
 		fstrcpy(sub_user, user);
 	} else {
@@ -1645,9 +1432,9 @@
 	sub_set_smb_name(sub_user);
 
 	reload_services(True);
-
+	
 	if (lp_security() == SEC_SHARE) {
-		/* In share level we should ignore any passwords */
+		/* in share level we should ignore any passwords */
 
 		data_blob_free(&lm_resp);
 		data_blob_free(&nt_resp);
@@ -1659,80 +1446,64 @@
 		/* Then force it to null for the benfit of the code below */
 		*user = 0;
 	}
-
+	
 	if (!*user) {
 
 		nt_status = check_guest_password(&server_info);
 
 	} else if (doencrypt) {
 		if (!negprot_global_auth_context) {
-			DEBUG(0, ("reply_sesssetup_and_X:  Attempted encrypted "
-				"session setup without negprot denied!\n"));
-			reply_nterror(req, nt_status_squash(
-					      NT_STATUS_LOGON_FAILURE));
-			END_PROFILE(SMBsesssetupX);
-			return;
+			DEBUG(0, ("reply_sesssetup_and_X:  Attempted encrypted session setup without negprot denied!\n"));
+			return ERROR_NT(nt_status_squash(NT_STATUS_LOGON_FAILURE));
 		}
-		nt_status = make_user_info_for_reply_enc(&user_info, user,
-						domain,
-						lm_resp, nt_resp);
+		nt_status = make_user_info_for_reply_enc(&user_info, user, domain,
+		                                         lm_resp, nt_resp);
 		if (NT_STATUS_IS_OK(nt_status)) {
-			nt_status = negprot_global_auth_context->check_ntlm_password(
-					negprot_global_auth_context,
-					user_info,
-					&server_info);
+			nt_status = negprot_global_auth_context->check_ntlm_password(negprot_global_auth_context, 
+										     user_info, 
+										     &server_info);
 		}
 	} else {
 		struct auth_context *plaintext_auth_context = NULL;
 		const uint8 *chal;
 
-		nt_status = make_auth_context_subsystem(
-				&plaintext_auth_context);
+		nt_status = make_auth_context_subsystem(&plaintext_auth_context);
 
 		if (NT_STATUS_IS_OK(nt_status)) {
-			chal = plaintext_auth_context->get_ntlm_challenge(
-					plaintext_auth_context);
-
-			if (!make_user_info_for_reply(&user_info,
+			chal = plaintext_auth_context->get_ntlm_challenge(plaintext_auth_context);
+			
+			if (!make_user_info_for_reply(&user_info, 
 						      user, domain, chal,
 						      plaintext_password)) {
 				nt_status = NT_STATUS_NO_MEMORY;
 			}
-
+		
 			if (NT_STATUS_IS_OK(nt_status)) {
-				nt_status = plaintext_auth_context->check_ntlm_password(
-						plaintext_auth_context,
-						user_info,
-						&server_info);
-
-				(plaintext_auth_context->free)(
-						&plaintext_auth_context);
+				nt_status = plaintext_auth_context->check_ntlm_password(plaintext_auth_context, 
+											user_info, 
+											&server_info); 
+				
+				(plaintext_auth_context->free)(&plaintext_auth_context);
 			}
 		}
 	}
 
 	free_user_info(&user_info);
-
+	
 	if (!NT_STATUS_IS_OK(nt_status)) {
-		nt_status = do_map_to_guest(nt_status, &server_info,
-				user, domain);
+		nt_status = do_map_to_guest(nt_status, &server_info, user, domain);
 	}
-
+	
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		data_blob_free(&nt_resp);
 		data_blob_free(&lm_resp);
 		data_blob_clear_free(&plaintext_password);
-		reply_nterror(req, nt_status_squash(nt_status));
-		END_PROFILE(SMBsesssetupX);
-		return;
+		return ERROR_NT(nt_status_squash(nt_status));
 	}
 
-	/* Ensure we can't possible take a code path leading to a
-	 * null defref. */
+	/* Ensure we can't possible take a code path leading to a null defref. */
 	if (!server_info) {
-		reply_nterror(req, nt_status_squash(NT_STATUS_LOGON_FAILURE));
-		END_PROFILE(SMBsesssetupX);
-		return;
+		return ERROR_NT(nt_status_squash(NT_STATUS_LOGON_FAILURE));
 	}
 
 	nt_status = create_local_token(server_info);
@@ -1742,29 +1513,28 @@
 		data_blob_free(&nt_resp);
 		data_blob_free(&lm_resp);
 		data_blob_clear_free(&plaintext_password);
-		reply_nterror(req, nt_status_squash(nt_status));
-		END_PROFILE(SMBsesssetupX);
-		return;
+		return ERROR_NT(nt_status_squash(nt_status));
 	}
 
 	if (server_info->user_session_key.data) {
-		session_key = data_blob(server_info->user_session_key.data,
-				server_info->user_session_key.length);
+		session_key = data_blob(server_info->user_session_key.data, server_info->user_session_key.length);
 	} else {
-		session_key = data_blob_null;
+		session_key = data_blob(NULL, 0);
 	}
 
 	data_blob_clear_free(&plaintext_password);
-
+	
 	/* it's ok - setup a reply */
-	reply_outbuf(req, 3, 0);
+	set_message(outbuf,3,0,True);
 	if (Protocol >= PROTOCOL_NT1) {
-		push_signature(&req->outbuf);
+		char *p = smb_buf( outbuf );
+		p += add_signature( outbuf, p );
+		set_message_end( outbuf, p );
 		/* perhaps grab OS version here?? */
 	}
-
+	
 	if (server_info->guest) {
-		SSVAL(req->outbuf,smb_vwv2,1);
+		SSVAL(outbuf,smb_vwv2,1);
 	}
 
 	/* register the name and uid as being validated, so further connections
@@ -1775,51 +1545,33 @@
 		data_blob_free(&session_key);
 		TALLOC_FREE(server_info);
 	} else {
-		/* Ignore the initial vuid. */
-		sess_vuid = register_initial_vuid();
+		/* register_vuid keeps the server info */
+		sess_vuid = register_vuid(server_info, session_key,
+					  nt_resp.data ? nt_resp : lm_resp,
+					  sub_user);
 		if (sess_vuid == UID_FIELD_INVALID) {
 			data_blob_free(&nt_resp);
 			data_blob_free(&lm_resp);
-			data_blob_free(&session_key);
-			reply_nterror(req, nt_status_squash(
-					      NT_STATUS_LOGON_FAILURE));
-			END_PROFILE(SMBsesssetupX);
-			return;
+			return ERROR_NT(nt_status_squash(NT_STATUS_LOGON_FAILURE));
 		}
-		/* register_existing_vuid keeps the server info */
-		sess_vuid = register_existing_vuid(sess_vuid,
-					server_info,
-					session_key,
-					nt_resp.data ? nt_resp : lm_resp,
-					sub_user);
-		if (sess_vuid == UID_FIELD_INVALID) {
-			data_blob_free(&nt_resp);
-			data_blob_free(&lm_resp);
-			data_blob_free(&session_key);
-			reply_nterror(req, nt_status_squash(
-					      NT_STATUS_LOGON_FAILURE));
-			END_PROFILE(SMBsesssetupX);
-			return;
-		}
 
 		/* current_user_info is changed on new vuid */
 		reload_services( True );
 
-		sessionsetup_start_signing_engine(server_info, req->inbuf);
+		sessionsetup_start_signing_engine(server_info, inbuf);
 	}
 
 	data_blob_free(&nt_resp);
 	data_blob_free(&lm_resp);
-
-	SSVAL(req->outbuf,smb_uid,sess_vuid);
-	SSVAL(req->inbuf,smb_uid,sess_vuid);
-
+	
+	SSVAL(outbuf,smb_uid,sess_vuid);
+	SSVAL(inbuf,smb_uid,sess_vuid);
+	
 	if (!done_sesssetup)
 		max_send = MIN(max_send,smb_bufsize);
-
+	
 	done_sesssetup = True;
-
+	
 	END_PROFILE(SMBsesssetupX);
-	chain_reply(req);
-	return;
+	return chain_reply(inbuf,outbuf,length,bufsize);
 }

Modified: branches/samba/upstream/source/smbd/share_access.c
===================================================================
--- branches/samba/upstream/source/smbd/share_access.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/share_access.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -29,7 +30,7 @@
 
 extern userdom_struct current_user_info;
 
-static bool do_group_checks(const char **name, const char **pattern)
+static BOOL do_group_checks(const char **name, const char **pattern)
 {
 	if ((*name)[0] == '@') {
 		*pattern = "&+";
@@ -64,7 +65,7 @@
 	return False;
 }
 
-static bool token_contains_name(TALLOC_CTX *mem_ctx,
+static BOOL token_contains_name(TALLOC_CTX *mem_ctx,
 				const char *username,
 				const char *sharename,
 				const struct nt_user_token *token,
@@ -85,7 +86,7 @@
 	if (name == NULL) {
 		/* This is too security sensitive, better panic than return a
 		 * result that might be interpreted in a wrong way. */
-		smb_panic("substitutions failed");
+		smb_panic("substitutions failed\n");
 	}
 	
 	/* check to see is we already have a SID */
@@ -135,7 +136,7 @@
 			}
 			continue;
 		}
-		smb_panic("got invalid prefix from do_groups_check");
+		smb_panic("got invalid prefix from do_groups_check\n");
 	}
 	return False;
 }
@@ -151,7 +152,7 @@
  * The other use is the netgroup check when using @group or &group.
  */
 
-bool token_contains_name_in_list(const char *username,
+BOOL token_contains_name_in_list(const char *username,
 				 const char *sharename,
 				 const struct nt_user_token *token,
 				 const char **list)
@@ -163,7 +164,7 @@
 	}
 
 	if ( (mem_ctx = talloc_new(NULL)) == NULL ) {
-		smb_panic("talloc_new failed");
+		smb_panic("talloc_new failed\n");
 	}
 
 	while (*list != NULL) {
@@ -191,7 +192,7 @@
  * The other use is the netgroup check when using @group or &group.
  */
 
-bool user_ok_token(const char *username, struct nt_user_token *token, int snum)
+BOOL user_ok_token(const char *username, struct nt_user_token *token, int snum)
 {
 	if (lp_invalid_users(snum) != NULL) {
 		if (token_contains_name_in_list(username, lp_servicename(snum),
@@ -247,10 +248,10 @@
  * The other use is the netgroup check when using @group or &group.
  */
 
-bool is_share_read_only_for_token(const char *username,
+BOOL is_share_read_only_for_token(const char *username,
 				  struct nt_user_token *token, int snum)
 {
-	bool result = lp_readonly(snum);
+	BOOL result = lp_readonly(snum);
 
 	if (lp_readlist(snum) != NULL) {
 		if (token_contains_name_in_list(username,

Modified: branches/samba/upstream/source/smbd/srvstr.c
===================================================================
--- branches/samba/upstream/source/smbd/srvstr.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/srvstr.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -23,8 +24,8 @@
 
 /* Make sure we can't write a string past the end of the buffer */
 
-size_t srvstr_push_fn(const char *function, unsigned int line,
-		      const char *base_ptr, uint16 smb_flags2, void *dest,
+size_t srvstr_push_fn(const char *function, unsigned int line, 
+		      const char *base_ptr, void *dest, 
 		      const char *src, int dest_len, int flags)
 {
 	if (dest_len < 0) {
@@ -32,46 +33,5 @@
 	}
 
 	/* 'normal' push into size-specified buffer */
-	return push_string_fn(function, line, base_ptr, smb_flags2, dest, src,
-			      dest_len, flags);
+	return push_string_fn(function, line, base_ptr, dest, src, dest_len, flags);
 }
-
-/*******************************************************************
- Add a string to the end of a smb_buf, adjusting bcc and smb_len.
- Return the bytes added
-********************************************************************/
-
-ssize_t message_push_string(uint8 **outbuf, const char *str, int flags)
-{
-	size_t buf_size = smb_len(*outbuf) + 4;
-	size_t grow_size;
-	size_t result;
-	uint8 *tmp;
-
-	/*
-	 * We need to over-allocate, now knowing what srvstr_push will
-	 * actually use. This is very generous by incorporating potential
-	 * padding, the terminating 0 and at most 4 chars per UTF-16 code
-	 * point.
-	 */
-	grow_size = (strlen(str) + 2) * 4;
-
-	if (!(tmp = TALLOC_REALLOC_ARRAY(NULL, *outbuf, uint8,
-					 buf_size + grow_size))) {
-		DEBUG(0, ("talloc failed\n"));
-		return -1;
-	}
-
-	result = srvstr_push((char *)tmp, SVAL(tmp, smb_flg2),
-			     tmp + buf_size, str, grow_size, flags);
-
-	if (result == (size_t)-1) {
-		DEBUG(0, ("srvstr_push failed\n"));
-		return -1;
-	}
-	set_message_bcc((char *)tmp, smb_buflen(tmp) + result);
-
-	*outbuf = tmp;
-
-	return result;
-}

Modified: branches/samba/upstream/source/smbd/statcache.c
===================================================================
--- branches/samba/upstream/source/smbd/statcache.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/statcache.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,23 +1,23 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    stat cache code
    Copyright (C) Andrew Tridgell 1992-2000
-   Copyright (C) Jeremy Allison 1999-2007
+   Copyright (C) Jeremy Allison 1999-2004
    Copyright (C) Andrew Bartlett <abartlet at samba.org> 2003
-   Copyright (C) Volker Lendecke 2007
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -26,40 +26,46 @@
  Stat cache code used in unix_convert.
 *****************************************************************************/
 
+static TDB_CONTEXT *tdb_stat_cache;
+
 /**
  * Add an entry into the stat cache.
  *
  * @param full_orig_name       The original name as specified by the client
  * @param orig_translated_path The name on our filesystem.
- *
- * @note Only the first strlen(orig_translated_path) characters are stored
+ * 
+ * @note Only the first strlen(orig_translated_path) characters are stored 
  *       into the cache.  This means that full_orig_name will be internally
  *       truncated.
  *
  */
 
-void stat_cache_add( const char *full_orig_name,
-		char *translated_path,
-		bool case_sensitive)
+void stat_cache_add( const char *full_orig_name, const char *orig_translated_path, BOOL case_sensitive)
 {
+	char *translated_path;
 	size_t translated_path_length;
+	TDB_DATA data_val;
 	char *original_path;
 	size_t original_path_length;
-	char saved_char;
-	TALLOC_CTX *ctx = talloc_tos();
+	size_t sc_size = lp_max_stat_cache_size();
 
-	if (!lp_stat_cache()) {
+	if (!lp_stat_cache())
 		return;
+
+	if (sc_size && (tdb_map_size(tdb_stat_cache) > sc_size*1024)) {
+		reset_stat_cache();
 	}
 
+	ZERO_STRUCT(data_val);
+
 	/*
 	 * Don't cache trivial valid directory entries such as . and ..
 	 */
 
-	if ((*full_orig_name == '\0')
-	    || ISDOT(full_orig_name) || ISDOTDOT(full_orig_name)) {
+	if((*full_orig_name == '\0') || (full_orig_name[0] == '.' && 
+				((full_orig_name[1] == '\0') ||
+				 (full_orig_name[1] == '.' && full_orig_name[2] == '\0'))))
 		return;
-	}
 
 	/*
 	 * If we are in case insentive mode, we don't need to
@@ -67,28 +73,33 @@
 	 * would be a waste.
 	 */
 
-	if (case_sensitive && (strcmp(full_orig_name, translated_path) == 0)) {
+	if(case_sensitive && (strcmp(full_orig_name, orig_translated_path) == 0))
 		return;
-	}
 
 	/*
 	 * Remove any trailing '/' characters from the
 	 * translated path.
 	 */
 
+	translated_path = SMB_STRDUP(orig_translated_path);
+	if (!translated_path)
+		return;
+
 	translated_path_length = strlen(translated_path);
 
 	if(translated_path[translated_path_length-1] == '/') {
+		translated_path[translated_path_length-1] = '\0';
 		translated_path_length--;
 	}
 
 	if(case_sensitive) {
-		original_path = talloc_strdup(ctx,full_orig_name);
+		original_path = SMB_STRDUP(full_orig_name);
 	} else {
-		original_path = talloc_strdup_upper(ctx,full_orig_name);
+		original_path = strdup_upper(full_orig_name);
 	}
 
 	if (!original_path) {
+		SAFE_FREE(translated_path);
 		return;
 	}
 
@@ -101,13 +112,10 @@
 
 	if (original_path_length != translated_path_length) {
 		if (original_path_length < translated_path_length) {
-			DEBUG(0, ("OOPS - tried to store stat cache entry "
-			"for weird length paths [%s] %lu and [%s] %lu)!\n",
-				  original_path,
-				  (unsigned long)original_path_length,
-				  translated_path,
-				  (unsigned long)translated_path_length));
-			TALLOC_FREE(original_path);
+			DEBUG(0, ("OOPS - tried to store stat cache entry for weird length paths [%s] %lu and [%s] %lu)!\n",
+				  original_path, (unsigned long)original_path_length, translated_path, (unsigned long)translated_path_length));
+			SAFE_FREE(original_path);
+			SAFE_FREE(translated_path);
 			return;
 		}
 
@@ -118,27 +126,22 @@
 		original_path_length = translated_path_length;
 	}
 
-	/* Ensure we're null terminated. */
-	saved_char = translated_path[translated_path_length];
-	translated_path[translated_path_length] = '\0';
-
 	/*
 	 * New entry or replace old entry.
 	 */
+  
+	data_val.dsize = translated_path_length + 1;
+	data_val.dptr = translated_path;
 
-	memcache_add(
-		smbd_memcache(), STAT_CACHE,
-		data_blob_const(original_path, original_path_length),
-		data_blob_const(translated_path, translated_path_length + 1));
+	if (tdb_store_bystring(tdb_stat_cache, original_path, data_val, TDB_REPLACE) != 0) {
+		DEBUG(0,("stat_cache_add: Error storing entry %s -> %s\n", original_path, translated_path));
+	} else {
+		DEBUG(5,("stat_cache_add: Added entry (%lx:size%x) %s -> %s\n",
+			(unsigned long)data_val.dptr, (unsigned int)data_val.dsize, original_path, translated_path));
+	}
 
-	DEBUG(5,("stat_cache_add: Added entry (%lx:size %x) %s -> %s\n",
-		 (unsigned long)translated_path,
-		 (unsigned int)translated_path_length,
-		 original_path,
-		 translated_path));
-
-	translated_path[translated_path_length] = saved_char;
-	TALLOC_FREE(original_path);
+	SAFE_FREE(original_path);
+	SAFE_FREE(translated_path);
 }
 
 /**
@@ -146,64 +149,49 @@
  *
  * @param conn    A connection struct to do the stat() with.
  * @param name    The path we are attempting to cache, modified by this routine
- *                to be correct as far as the cache can tell us. We assume that
- *		  it is a talloc'ed string from top of stack, we free it if
- *		  necessary.
- * @param dirpath The path as far as the stat cache told us. Also talloced
- * 		  from top of stack.
- * @param start   A pointer into name, for where to 'start' in fixing the rest
- * 		  of the name up.
+ *                to be correct as far as the cache can tell us
+ * @param dirpath The path as far as the stat cache told us.
+ * @param start   A pointer into name, for where to 'start' in fixing the rest of the name up.
  * @param psd     A stat buffer, NOT from the cache, but just a side-effect.
  *
- * @return True if we translated (and did a scuccessful stat on) the entire
- * 		  name.
+ * @return True if we translated (and did a scuccessful stat on) the entire name.
  *
  */
 
-bool stat_cache_lookup(connection_struct *conn,
-			char **pp_name,
-			char **pp_dirpath,
-			char **pp_start,
-			SMB_STRUCT_STAT *pst)
+BOOL stat_cache_lookup(connection_struct *conn, pstring name, pstring dirpath, 
+		       char **start, SMB_STRUCT_STAT *pst)
 {
 	char *chk_name;
 	size_t namelen;
-	bool sizechanged = False;
+	BOOL sizechanged = False;
 	unsigned int num_components = 0;
-	char *translated_path;
-	size_t translated_path_length;
-	DATA_BLOB data_val;
-	char *name;
-	TALLOC_CTX *ctx = talloc_tos();
 
-	*pp_dirpath = NULL;
-	*pp_start = *pp_name;
-
-	if (!lp_stat_cache()) {
+	if (!lp_stat_cache())
 		return False;
-	}
-
-	name = *pp_name;
+ 
 	namelen = strlen(name);
 
+	*start = name;
+
 	DO_PROFILE_INC(statcache_lookups);
 
 	/*
 	 * Don't lookup trivial valid directory entries.
 	 */
-	if ((*name == '\0') || ISDOT(name) || ISDOTDOT(name)) {
+	if((*name == '\0') || (name[0] == '.' && 
+				((name[1] == '\0') ||
+				 (name[1] == '.' && name[1] == '\0'))))
 		return False;
-	}
 
 	if (conn->case_sensitive) {
-		chk_name = talloc_strdup(ctx,name);
+		chk_name = SMB_STRDUP(name);
 		if (!chk_name) {
 			DEBUG(0, ("stat_cache_lookup: strdup failed!\n"));
 			return False;
 		}
 
 	} else {
-		chk_name = talloc_strdup_upper(ctx,name);
+		chk_name = strdup_upper(name);
 		if (!chk_name) {
 			DEBUG(0, ("stat_cache_lookup: strdup_upper failed!\n"));
 			return False;
@@ -214,116 +202,87 @@
 		 * if we uppercase. We need to treat this differently
 		 * below.
 		 */
-		if (strlen(chk_name) != namelen) {
+		if (strlen(chk_name) != namelen)
 			sizechanged = True;
-		}
 	}
 
 	while (1) {
+		TDB_DATA data_val;
 		char *sp;
 
-		data_val = data_blob_null;
-
-		if (memcache_lookup(
-			    smbd_memcache(), STAT_CACHE,
-			    data_blob_const(chk_name, strlen(chk_name)),
-			    &data_val)) {
-			break;
-		}
-
-		DEBUG(10,("stat_cache_lookup: lookup failed for name [%s]\n",
-				chk_name ));
-		/*
-		 * Didn't find it - remove last component for next try.
-		 */
-		if (!(sp = strrchr_m(chk_name, '/'))) {
+		data_val = tdb_fetch_bystring(tdb_stat_cache, chk_name);
+		if(data_val.dptr == NULL || data_val.dsize == 0) {
+			DEBUG(10,("stat_cache_lookup: lookup failed for name [%s]\n", chk_name ));
 			/*
-			 * We reached the end of the name - no match.
+			 * Didn't find it - remove last component for next try.
 			 */
-			DO_PROFILE_INC(statcache_misses);
-			TALLOC_FREE(chk_name);
-			return False;
-		}
+			sp = strrchr_m(chk_name, '/');
+			if (sp) {
+				*sp = '\0';
+				/*
+				 * Count the number of times we have done this,
+				 * we'll need it when reconstructing the string.
+				 */
+				if (sizechanged)
+					num_components++;
 
-		*sp = '\0';
-
-		/*
-		 * Count the number of times we have done this, we'll
-		 * need it when reconstructing the string.
-		 */
-
-		if (sizechanged) {
-			num_components++;
-		}
-
-		if ((*chk_name == '\0')
-		    || ISDOT(chk_name) || ISDOTDOT(chk_name)) {
-			DO_PROFILE_INC(statcache_misses);
-			TALLOC_FREE(chk_name);
-			return False;
-		}
-	}
-
-	translated_path = talloc_strdup(ctx,(char *)data_val.data);
-	if (!translated_path) {
-		smb_panic("talloc failed");
-	}
-	translated_path_length = data_val.length - 1;
-
-	DEBUG(10,("stat_cache_lookup: lookup succeeded for name [%s] "
-		  "-> [%s]\n", chk_name, translated_path ));
-	DO_PROFILE_INC(statcache_hits);
-
-	if (SMB_VFS_STAT(conn, translated_path, pst) != 0) {
-		/* Discard this entry - it doesn't exist in the filesystem. */
-		memcache_delete(smbd_memcache(), STAT_CACHE,
-				data_blob_const(chk_name, strlen(chk_name)));
-		TALLOC_FREE(chk_name);
-		TALLOC_FREE(translated_path);
-		return False;
-	}
-
-	if (!sizechanged) {
-		memcpy(*pp_name, translated_path,
-		       MIN(namelen, translated_path_length));
-	} else {
-		if (num_components == 0) {
-			name = talloc_strndup(ctx, translated_path,
-					   translated_path_length);
+			} else {
+				/*
+				 * We reached the end of the name - no match.
+				 */
+				DO_PROFILE_INC(statcache_misses);
+				SAFE_FREE(chk_name);
+				return False;
+			}
+			if((*chk_name == '\0') || (strcmp(chk_name, ".") == 0)
+					|| (strcmp(chk_name, "..") == 0)) {
+				DO_PROFILE_INC(statcache_misses);
+				SAFE_FREE(chk_name);
+				return False;
+			}
 		} else {
-			char *sp;
+			BOOL retval;
+			char *translated_path = data_val.dptr;
+			size_t translated_path_length = data_val.dsize - 1;
 
-			sp = strnrchr_m(name, '/', num_components);
-			if (sp) {
-				name = talloc_asprintf(ctx,"%.*s%s",
-					 (int)translated_path_length,
-					 translated_path, sp);
+			DEBUG(10,("stat_cache_lookup: lookup succeeded for name [%s] -> [%s]\n", chk_name, translated_path ));
+			DO_PROFILE_INC(statcache_hits);
+			if(SMB_VFS_STAT(conn,translated_path, pst) != 0) {
+				/* Discard this entry - it doesn't exist in the filesystem.  */
+				tdb_delete_bystring(tdb_stat_cache, chk_name);
+				SAFE_FREE(chk_name);
+				SAFE_FREE(data_val.dptr);
+				return False;
+			}
+
+			if (!sizechanged) {
+				memcpy(name, translated_path, MIN(sizeof(pstring)-1, translated_path_length));
+			} else if (num_components == 0) {
+				pstrcpy(name, translated_path);
 			} else {
-				name = talloc_strndup(ctx,
-						translated_path,
-						translated_path_length);
+				sp = strnrchr_m(name, '/', num_components);
+				if (sp) {
+					pstring last_component;
+					pstrcpy(last_component, sp);
+					pstrcpy(name, translated_path);
+					pstrcat(name, last_component);
+				} else {
+					pstrcpy(name, translated_path);
+				}
 			}
-		}
-		if (name == NULL) {
-			/*
-			 * TODO: Get us out of here with a real error message
-			 */
-			smb_panic("talloc failed");
-		}
-		TALLOC_FREE(*pp_name);
-		*pp_name = name;
-	}
 
+			/* set pointer for 'where to start' on fixing the rest of the name */
+			*start = &name[translated_path_length];
+			if(**start == '/')
+				++*start;
 
-	/* set pointer for 'where to start' on fixing the rest of the name */
-	*pp_start = &name[translated_path_length];
-	if (**pp_start == '/') {
-		++*pp_start;
+			pstrcpy(dirpath, translated_path);
+			retval = (namelen == translated_path_length) ? True : False;
+			SAFE_FREE(chk_name);
+			SAFE_FREE(data_val.dptr);
+			return retval;
+		}
 	}
-
-	*pp_dirpath = translated_path;
-	TALLOC_FREE(chk_name);
-	return (namelen == translated_path_length);
 }
 
 /***************************************************************************
@@ -333,10 +292,11 @@
 void send_stat_cache_delete_message(const char *name)
 {
 #ifdef DEVELOPER
-	message_send_all(smbd_messaging_context(),
+	message_send_all(conn_tdb_ctx(),
 			MSG_SMB_STAT_CACHE_DELETE,
 			name,
 			strlen(name)+1,
+			True,
 			NULL);
 #endif
 }
@@ -347,7 +307,7 @@
 
 void stat_cache_delete(const char *name)
 {
-	char *lname = talloc_strdup_upper(talloc_tos(), name);
+	char *lname = strdup_upper(name);
 
 	if (!lname) {
 		return;
@@ -355,9 +315,8 @@
 	DEBUG(10,("stat_cache_delete: deleting name [%s] -> %s\n",
 			lname, name ));
 
-	memcache_delete(smbd_memcache(), STAT_CACHE,
-			data_blob_const(lname, talloc_get_size(lname)-1));
-	TALLOC_FREE(lname);
+	tdb_delete_bystring(tdb_stat_cache, lname);
+	SAFE_FREE(lname);
 }
 
 /***************************************************************
@@ -365,12 +324,12 @@
  The function returns the bucket index number for the hashed key.
  JRA. Use a djb-algorithm hash for speed.
 ***************************************************************/
-
+                                                                                                     
 unsigned int fast_string_hash(TDB_DATA *key)
 {
         unsigned int n = 0;
         const char *p;
-        for (p = (const char *)key->dptr; *p != '\0'; p++) {
+        for (p = key->dptr; *p != '\0'; p++) {
                 n = ((n << 5) + n) ^ (unsigned int)(*p);
         }
         return n;
@@ -380,12 +339,20 @@
  Initializes or clears the stat cache.
 **************************************************************************/
 
-bool reset_stat_cache( void )
+BOOL reset_stat_cache( void )
 {
 	if (!lp_stat_cache())
 		return True;
 
-	memcache_flush(smbd_memcache(), STAT_CACHE);
+	if (tdb_stat_cache) {
+		tdb_close(tdb_stat_cache);
+	}
 
+	/* Create the in-memory tdb using our custom hash function. */
+	tdb_stat_cache = tdb_open_ex("statcache", 1031, TDB_INTERNAL,
+                                    (O_RDWR|O_CREAT), 0644, NULL, fast_string_hash);
+
+	if (!tdb_stat_cache)
+		return False;
 	return True;
 }

Modified: branches/samba/upstream/source/smbd/statvfs.c
===================================================================
--- branches/samba/upstream/source/smbd/statvfs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/statvfs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,11 +3,10 @@
    VFS API's statvfs abstraction
    Copyright (C) Alexander Bokovoy			2005
    Copyright (C) Steve French				2005
-   Copyright (C) James Peach				2006
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -38,93 +38,11 @@
 		statbuf->TotalFileNodes = statvfs_buf.f_files;
 		statbuf->FreeFileNodes = statvfs_buf.f_ffree;
 		statbuf->FsIdentifier = statvfs_buf.f_fsid;
-
-		/* Good defaults for Linux filesystems are case sensitive
-		 * and case preserving.
-		 */
-		statbuf->FsCapabilities =
-		    FILE_CASE_SENSITIVE_SEARCH | FILE_CASE_PRESERVED_NAMES;
 	}
 	return result;
 }
 #endif
 
-#if defined(DARWINOS)
-
-#include <sys/attr.h>
-
-static int darwin_fs_capabilities(const char * path)
-{
-	int caps = 0;
-	vol_capabilities_attr_t *vcaps;
-	struct attrlist	attrlist;
-	char attrbuf[sizeof(u_int32_t) + sizeof(vol_capabilities_attr_t)];
-
-#define FORMAT_CAP(vinfo, cap) \
-	( ((vinfo)->valid[VOL_CAPABILITIES_FORMAT] & (cap)) && \
-	   ((vinfo)->capabilities[VOL_CAPABILITIES_FORMAT] & (cap)) )
-
-#define INTERFACE_CAP(vinfo, cap) \
-	( ((vinfo)->valid[VOL_CAPABILITIES_INTERFACES] & (cap)) && \
-	   ((vinfo)->capabilities[VOL_CAPABILITIES_INTERFACES] & (cap)) )
-
-	ZERO_STRUCT(attrlist);
-	attrlist.bitmapcount = ATTR_BIT_MAP_COUNT;
-	attrlist.volattr = ATTR_VOL_CAPABILITIES;
-
-	if (getattrlist(path, &attrlist, attrbuf, sizeof(attrbuf), 0) != 0) {
-		DEBUG(0, ("getattrlist for %s capabilities failed: %s\n",
-			    path, strerror(errno)));
-		/* Return no capabilities on failure. */
-		return 0;
-	}
-
-	vcaps =
-	    (vol_capabilities_attr_t *)(attrbuf + sizeof(u_int32_t));
-
-	if (FORMAT_CAP(vcaps, VOL_CAP_FMT_SPARSE_FILES)) {
-		caps |= FILE_SUPPORTS_SPARSE_FILES;
-	}
-
-	if (FORMAT_CAP(vcaps, VOL_CAP_FMT_CASE_SENSITIVE)) {
-		caps |= FILE_CASE_SENSITIVE_SEARCH;
-	}
-
-	if (FORMAT_CAP(vcaps, VOL_CAP_FMT_CASE_PRESERVING)) {
-		caps |= FILE_CASE_PRESERVED_NAMES;
-	}
-
-	if (INTERFACE_CAP(vcaps, VOL_CAP_INT_EXTENDED_SECURITY)) {
-		caps |= FILE_PERSISTENT_ACLS;
-	}
-
-	return caps;
-}
-
-static int darwin_statvfs(const char *path, vfs_statvfs_struct *statbuf)
-{
-	struct statfs sbuf;
-	int ret;
-
-	ret = statfs(path, &sbuf);
-	if (ret != 0) {
-		return ret;
-	}
-
-	statbuf->OptimalTransferSize = sbuf.f_iosize;
-	statbuf->BlockSize = sbuf.f_bsize;
-	statbuf->TotalBlocks = sbuf.f_blocks;
-	statbuf->BlocksAvail = sbuf.f_bfree;
-	statbuf->UserBlocksAvail = sbuf.f_bavail;
-	statbuf->TotalFileNodes = sbuf.f_files;
-	statbuf->FreeFileNodes = sbuf.f_ffree;
-	statbuf->FsIdentifier = *(SMB_BIG_UINT *)(&sbuf.f_fsid); /* Ick. */
-	statbuf->FsCapabilities = darwin_fs_capabilities(sbuf.f_mntonname);
-
-	return 0;
-}
-#endif
-
 /* 
  sys_statvfs() is an abstraction layer over system-dependent statvfs()/statfs()
  for particular POSIX systems. Due to controversy of what is considered more important
@@ -135,8 +53,6 @@
 {
 #if defined(LINUX) && defined(HAVE_FSID_INT)
 	return linux_statvfs(path, statbuf);
-#elif defined(DARWINOS)
-	return darwin_statvfs(path, statbuf);
 #else
 	/* BB change this to return invalid level */
 #ifdef EOPNOTSUPP

Modified: branches/samba/upstream/source/smbd/trans2.c
===================================================================
--- branches/samba/upstream/source/smbd/trans2.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/trans2.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,32 +1,34 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    SMB transaction2 handling
    Copyright (C) Jeremy Allison			1994-2007
    Copyright (C) Stefan (metze) Metzmacher	2003
-   Copyright (C) Volker Lendecke		2005-2007
+   Copyright (C) Volker Lendecke		2005
    Copyright (C) Steve French			2005
-   Copyright (C) James Peach			2006-2007
+   Copyright (C) James Peach			2007
 
    Extensively modified by Andrew Tridgell, 1995
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
 extern int max_send;
 extern enum protocol_types Protocol;
+extern int smb_read_error;
 extern uint32 global_client_caps;
 extern struct current_user current_user;
 
@@ -89,38 +91,33 @@
  Utility functions for dealing with extended attributes.
 ****************************************************************************/
 
+static const char *prohibited_ea_names[] = {
+	SAMBA_POSIX_INHERITANCE_EA_NAME,
+	SAMBA_XATTR_DOS_ATTRIB,
+	NULL
+};
+
 /****************************************************************************
  Refuse to allow clients to overwrite our private xattrs.
 ****************************************************************************/
 
-static bool samba_private_attr_name(const char *unix_ea_name)
+static BOOL samba_private_attr_name(const char *unix_ea_name)
 {
-	static const char *prohibited_ea_names[] = {
-		SAMBA_POSIX_INHERITANCE_EA_NAME,
-		SAMBA_XATTR_DOS_ATTRIB,
-		NULL
-	};
-
 	int i;
 
 	for (i = 0; prohibited_ea_names[i]; i++) {
 		if (strequal( prohibited_ea_names[i], unix_ea_name))
-			return true;
+			return True;
 	}
-	if (StrnCaseCmp(unix_ea_name, SAMBA_XATTR_DOSSTREAM_PREFIX,
-			strlen(SAMBA_XATTR_DOSSTREAM_PREFIX)) == 0) {
-		return true;
-	}
-	return false;
+	return False;
 }
 
 /****************************************************************************
  Get one EA value. Fill in a struct ea_struct.
 ****************************************************************************/
 
-NTSTATUS get_ea_value(TALLOC_CTX *mem_ctx, connection_struct *conn,
-		      files_struct *fsp, const char *fname,
-		      const char *ea_name, struct ea_struct *pea)
+static BOOL get_ea_value(TALLOC_CTX *mem_ctx, connection_struct *conn, files_struct *fsp,
+				const char *fname, char *ea_name, struct ea_struct *pea)
 {
 	/* Get the value of this xattr. Max size is 64k. */
 	size_t attr_size = 256;
@@ -131,11 +128,11 @@
 
 	val = TALLOC_REALLOC_ARRAY(mem_ctx, val, char, attr_size);
 	if (!val) {
-		return NT_STATUS_NO_MEMORY;
+		return False;
 	}
 
 	if (fsp && fsp->fh->fd != -1) {
-		sizeret = SMB_VFS_FGETXATTR(fsp, ea_name, val, attr_size);
+		sizeret = SMB_VFS_FGETXATTR(fsp, fsp->fh->fd, ea_name, val, attr_size);
 	} else {
 		sizeret = SMB_VFS_GETXATTR(conn, fname, ea_name, val, attr_size);
 	}
@@ -146,200 +143,101 @@
 	}
 
 	if (sizeret == -1) {
-		return map_nt_error_from_unix(errno);
+		return False;
 	}
 
-	DEBUG(10,("get_ea_value: EA %s is of length %u\n", ea_name, (unsigned int)sizeret));
-	dump_data(10, (uint8 *)val, sizeret);
+	DEBUG(10,("get_ea_value: EA %s is of length %u: ", ea_name, (unsigned int)sizeret));
+	dump_data(10, val, sizeret);
 
 	pea->flags = 0;
 	if (strnequal(ea_name, "user.", 5)) {
-		pea->name = talloc_strdup(mem_ctx, &ea_name[5]);
+		pea->name = &ea_name[5];
 	} else {
-		pea->name = talloc_strdup(mem_ctx, ea_name);
+		pea->name = ea_name;
 	}
-	if (pea->name == NULL) {
-		TALLOC_FREE(val);
-		return NT_STATUS_NO_MEMORY;
-	}
 	pea->value.data = (unsigned char *)val;
 	pea->value.length = (size_t)sizeret;
-	return NT_STATUS_OK;
+	return True;
 }
 
-NTSTATUS get_ea_names_from_file(TALLOC_CTX *mem_ctx, connection_struct *conn,
-				files_struct *fsp, const char *fname,
-				char ***pnames, size_t *pnum_names)
+/****************************************************************************
+ Return a linked list of the total EA's. Plus the total size
+****************************************************************************/
+
+static struct ea_list *get_ea_list_from_file(TALLOC_CTX *mem_ctx, connection_struct *conn, files_struct *fsp,
+					const char *fname, size_t *pea_total_len)
 {
 	/* Get a list of all xattrs. Max namesize is 64k. */
 	size_t ea_namelist_size = 1024;
-	char *ea_namelist = NULL;
-
+	char *ea_namelist;
 	char *p;
-	char **names, **tmp;
-	size_t num_names;
 	ssize_t sizeret;
+	int i;
+	struct ea_list *ea_list_head = NULL;
 
+	*pea_total_len = 0;
+
 	if (!lp_ea_support(SNUM(conn))) {
-		*pnames = NULL;
-		*pnum_names = 0;
-		return NT_STATUS_OK;
+		return NULL;
 	}
 
-	/*
-	 * TALLOC the result early to get the talloc hierarchy right.
-	 */
+	for (i = 0, ea_namelist = TALLOC_ARRAY(mem_ctx, char, ea_namelist_size); i < 6;
+	     ea_namelist = TALLOC_REALLOC_ARRAY(mem_ctx, ea_namelist, char, ea_namelist_size), i++) {
 
-	names = TALLOC_ARRAY(mem_ctx, char *, 1);
-	if (names == NULL) {
-		DEBUG(0, ("talloc failed\n"));
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	while (ea_namelist_size <= 65536) {
-
-		ea_namelist = TALLOC_REALLOC_ARRAY(
-			names, ea_namelist, char, ea_namelist_size);
-		if (ea_namelist == NULL) {
-			DEBUG(0, ("talloc failed\n"));
-			TALLOC_FREE(names);
-			return NT_STATUS_NO_MEMORY;
+		if (!ea_namelist) {
+			return NULL;
 		}
 
 		if (fsp && fsp->fh->fd != -1) {
-			sizeret = SMB_VFS_FLISTXATTR(fsp, ea_namelist,
-						     ea_namelist_size);
+			sizeret = SMB_VFS_FLISTXATTR(fsp, fsp->fh->fd, ea_namelist, ea_namelist_size);
 		} else {
-			sizeret = SMB_VFS_LISTXATTR(conn, fname, ea_namelist,
-						    ea_namelist_size);
+			sizeret = SMB_VFS_LISTXATTR(conn, fname, ea_namelist, ea_namelist_size);
 		}
 
-		if ((sizeret == -1) && (errno == ERANGE)) {
+		if (sizeret == -1 && errno == ERANGE) {
 			ea_namelist_size *= 2;
-		}
-		else {
+		} else {
 			break;
 		}
 	}
 
-	if (sizeret == -1) {
-		TALLOC_FREE(names);
-		return map_nt_error_from_unix(errno);
-	}
-
-	DEBUG(10, ("get_ea_list_from_file: ea_namelist size = %u\n",
-		   (unsigned int)sizeret));
-
-	if (sizeret == 0) {
-		TALLOC_FREE(names);
-		*pnames = NULL;
-		*pnum_names = 0;
-		return NT_STATUS_OK;
-	}
-
-	/*
-	 * Ensure the result is 0-terminated
-	 */
-
-	if (ea_namelist[sizeret-1] != '\0') {
-		TALLOC_FREE(names);
-		return NT_STATUS_INTERNAL_ERROR;
-	}
-
-	/*
-	 * count the names
-	 */
-	num_names = 0;
-
-	for (p = ea_namelist; p - ea_namelist < sizeret; p += strlen(p)+1) {
-		num_names += 1;
-	}
-
-	tmp = TALLOC_REALLOC_ARRAY(mem_ctx, names, char *, num_names);
-	if (tmp == NULL) {
-		DEBUG(0, ("talloc failed\n"));
-		TALLOC_FREE(names);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	names = tmp;
-	num_names = 0;
-
-	for (p = ea_namelist; p - ea_namelist < sizeret; p += strlen(p)+1) {
-		names[num_names++] = p;
-	}
-
-	*pnames = names;
-	*pnum_names = num_names;
-	return NT_STATUS_OK;
-}
-
-/****************************************************************************
- Return a linked list of the total EA's. Plus the total size
-****************************************************************************/
-
-static struct ea_list *get_ea_list_from_file(TALLOC_CTX *mem_ctx, connection_struct *conn, files_struct *fsp,
-					const char *fname, size_t *pea_total_len)
-{
-	/* Get a list of all xattrs. Max namesize is 64k. */
-	size_t i, num_names;
-	char **names;
-	struct ea_list *ea_list_head = NULL;
-	NTSTATUS status;
-
-	*pea_total_len = 0;
-
-	if (!lp_ea_support(SNUM(conn))) {
+	if (sizeret == -1)
 		return NULL;
-	}
 
-	status = get_ea_names_from_file(talloc_tos(), conn, fsp, fname,
-					&names, &num_names);
+	DEBUG(10,("get_ea_list_from_file: ea_namelist size = %u\n", (unsigned int)sizeret ));
 
-	if (!NT_STATUS_IS_OK(status) || (num_names == 0)) {
-		return NULL;
-	}
+	if (sizeret) {
+		for (p = ea_namelist; p - ea_namelist < sizeret; p += strlen(p) + 1) {
+			struct ea_list *listp;
 
-	for (i=0; i<num_names; i++) {
-		struct ea_list *listp;
-		fstring dos_ea_name;
+			if (strnequal(p, "system.", 7) || samba_private_attr_name(p))
+				continue;
+		
+			listp = TALLOC_P(mem_ctx, struct ea_list);
+			if (!listp)
+				return NULL;
 
-		if (strnequal(names[i], "system.", 7)
-		    || samba_private_attr_name(names[i]))
-			continue;
+			if (!get_ea_value(mem_ctx, conn, fsp, fname, p, &listp->ea)) {
+				return NULL;
+			}
 
-		listp = TALLOC_P(mem_ctx, struct ea_list);
-		if (listp == NULL) {
-			return NULL;
+			{
+				fstring dos_ea_name;
+				push_ascii_fstring(dos_ea_name, listp->ea.name);
+				*pea_total_len += 4 + strlen(dos_ea_name) + 1 + listp->ea.value.length;
+				DEBUG(10,("get_ea_list_from_file: total_len = %u, %s, val len = %u\n",
+					(unsigned int)*pea_total_len, dos_ea_name,
+					(unsigned int)listp->ea.value.length ));
+			}
+			DLIST_ADD_END(ea_list_head, listp, struct ea_list *);
 		}
-
-		if (!NT_STATUS_IS_OK(get_ea_value(mem_ctx, conn, fsp,
-						  fname, names[i],
-						  &listp->ea))) {
-			return NULL;
+		/* Add on 4 for total length. */
+		if (*pea_total_len) {
+			*pea_total_len += 4;
 		}
-
-		push_ascii_fstring(dos_ea_name, listp->ea.name);
-
-		*pea_total_len +=
-			4 + strlen(dos_ea_name) + 1 + listp->ea.value.length;
-
-		DEBUG(10,("get_ea_list_from_file: total_len = %u, %s, val len "
-			  "= %u\n", (unsigned int)*pea_total_len, dos_ea_name,
-			  (unsigned int)listp->ea.value.length));
-
-		DLIST_ADD_END(ea_list_head, listp, struct ea_list *);
-
 	}
 
-	/* Add on 4 for total length. */
-	if (*pea_total_len) {
-		*pea_total_len += 4;
-	}
-
-	DEBUG(10, ("get_ea_list_from_file: total_len = %u\n",
-		   (unsigned int)*pea_total_len));
-
+	DEBUG(10,("get_ea_list_from_file: total_len = %u\n", (unsigned int)*pea_total_len));
 	return ea_list_head;
 }
 
@@ -401,8 +299,9 @@
 	if (!lp_ea_support(SNUM(conn))) {
 		return 0;
 	}
-	mem_ctx = talloc_tos();
+	mem_ctx = talloc_init("estimate_ea_size");
 	(void)get_ea_list_from_file(mem_ctx, conn, fsp, fname, &total_ea_len);
+	talloc_destroy(mem_ctx);
 	return total_ea_len;
 }
 
@@ -413,7 +312,7 @@
 static void canonicalize_ea_name(connection_struct *conn, files_struct *fsp, const char *fname, fstring unix_ea_name)
 {
 	size_t total_ea_len;
-	TALLOC_CTX *mem_ctx = talloc_tos();
+	TALLOC_CTX *mem_ctx = talloc_init("canonicalize_ea_name");
 	struct ea_list *ea_list = get_ea_list_from_file(mem_ctx, conn, fsp, fname, &total_ea_len);
 
 	for (; ea_list; ea_list = ea_list->next) {
@@ -424,6 +323,7 @@
 			break;
 		}
 	}
+	talloc_destroy(mem_ctx);
 }
 
 /****************************************************************************
@@ -457,7 +357,7 @@
 			if (fsp && (fsp->fh->fd != -1)) {
 				DEBUG(10,("set_ea: deleting ea name %s on file %s by file descriptor.\n",
 					unix_ea_name, fsp->fsp_name));
-				ret = SMB_VFS_FREMOVEXATTR(fsp, unix_ea_name);
+				ret = SMB_VFS_FREMOVEXATTR(fsp, fsp->fh->fd, unix_ea_name);
 			} else {
 				DEBUG(10,("set_ea: deleting ea name %s on file %s.\n",
 					unix_ea_name, fname));
@@ -475,7 +375,7 @@
 			if (fsp && (fsp->fh->fd != -1)) {
 				DEBUG(10,("set_ea: setting ea name %s on file %s by file descriptor.\n",
 					unix_ea_name, fsp->fsp_name));
-				ret = SMB_VFS_FSETXATTR(fsp, unix_ea_name,
+				ret = SMB_VFS_FSETXATTR(fsp, fsp->fh->fd, unix_ea_name,
 							ea_list->ea.value.data, ea_list->ea.value.length, 0);
 			} else {
 				DEBUG(10,("set_ea: setting ea name %s on file %s.\n",
@@ -587,7 +487,7 @@
 	}
 
 	DEBUG(10,("read_ea_list_entry: read ea name %s\n", eal->ea.name));
-	dump_data(10, eal->ea.value.data, eal->ea.value.length);
+	dump_data(10, (const char *)eal->ea.value.data, eal->ea.value.length);
 
 	return eal;
 }
@@ -677,13 +577,13 @@
   HACK ! Always assumes smb_setup field is zero.
 ****************************************************************************/
 
-void send_trans2_replies(connection_struct *conn,
-			struct smb_request *req,
-			 const char *params,
-			 int paramsize,
-			 const char *pdata,
-			 int datasize,
-			 int max_data_bytes)
+int send_trans2_replies(char *outbuf,
+			int bufsize,
+			const char *params, 
+			int paramsize,
+			const char *pdata,
+			int datasize,
+			int max_data_bytes)
 {
 	/* As we are using a protocol > LANMAN1 then the max_send
 	 variable must have been set in the sessetupX call.
@@ -699,8 +599,11 @@
 	int params_sent_thistime, data_sent_thistime, total_sent_thistime;
 	int alignment_offset = 1; /* JRA. This used to be 3. Set to 1 to make netmon parse ok. */
 	int data_alignment_offset = 0;
-	bool overflow = False;
 
+	/* Initially set the wcnt area to be 10 - this is true for all trans2 replies */
+	
+	set_message(outbuf,10,0,True);
+
 	/* Modify the data_to_send and datasize and set the error if
 	   we're trying to send more than max_data_bytes. We still send
 	   the part of the packet(s) that fit. Strange, but needed
@@ -710,15 +613,16 @@
 		DEBUG(5,("send_trans2_replies: max_data_bytes %d exceeded by data %d\n",
 			max_data_bytes, datasize ));
 		datasize = data_to_send = max_data_bytes;
-		overflow = True;
+		error_packet_set(outbuf,ERRDOS,ERRbufferoverflow,STATUS_BUFFER_OVERFLOW,__LINE__,__FILE__);
 	}
 
 	/* If there genuinely are no parameters or data to send just send the empty packet */
 
 	if(params_to_send == 0 && data_to_send == 0) {
-		reply_outbuf(req, 10, 0);
-		show_msg((char *)req->outbuf);
-		return;
+		show_msg(outbuf);
+		if (!send_smb(smbd_server_fd(),outbuf))
+			exit_server_cleanly("send_trans2_replies: send_smb failed.");
+		return 0;
 	}
 
 	/* When sending params and data ensure that both are nicely aligned */
@@ -732,10 +636,7 @@
 	/* The alignment_offset is to align the param bytes on an even byte
 		boundary. NT 4.0 Beta needs this to work correctly. */
 
-	useable_space = max_send - (smb_size
-				    + 2 * 10 /* wct */
-				    + alignment_offset
-				    + data_alignment_offset);
+	useable_space = bufsize - ((smb_buf(outbuf)+ alignment_offset+data_alignment_offset) - outbuf);
 
 	/* useable_space can never be more than max_send minus the alignment offset. */
 
@@ -756,11 +657,11 @@
 
 		total_sent_thistime = MIN(total_sent_thistime, useable_space+ alignment_offset + data_alignment_offset);
 
-		reply_outbuf(req, 10, total_sent_thistime);
+		set_message(outbuf, 10, total_sent_thistime, True);
 
 		/* Set total params and data to be sent */
-		SSVAL(req->outbuf,smb_tprcnt,paramsize);
-		SSVAL(req->outbuf,smb_tdrcnt,datasize);
+		SSVAL(outbuf,smb_tprcnt,paramsize);
+		SSVAL(outbuf,smb_tdrcnt,datasize);
 
 		/* Calculate how many parameters and data we can fit into
 		 * this packet. Parameters get precedence
@@ -770,83 +671,53 @@
 		data_sent_thistime = useable_space - params_sent_thistime;
 		data_sent_thistime = MIN(data_sent_thistime,data_to_send);
 
-		SSVAL(req->outbuf,smb_prcnt, params_sent_thistime);
+		SSVAL(outbuf,smb_prcnt, params_sent_thistime);
 
 		/* smb_proff is the offset from the start of the SMB header to the
 			parameter bytes, however the first 4 bytes of outbuf are
 			the Netbios over TCP header. Thus use smb_base() to subtract
 			them from the calculation */
 
-		SSVAL(req->outbuf,smb_proff,
-		      ((smb_buf(req->outbuf)+alignment_offset)
-		       - smb_base(req->outbuf)));
+		SSVAL(outbuf,smb_proff,((smb_buf(outbuf)+alignment_offset) - smb_base(outbuf)));
 
 		if(params_sent_thistime == 0)
-			SSVAL(req->outbuf,smb_prdisp,0);
+			SSVAL(outbuf,smb_prdisp,0);
 		else
 			/* Absolute displacement of param bytes sent in this packet */
-			SSVAL(req->outbuf,smb_prdisp,pp - params);
+			SSVAL(outbuf,smb_prdisp,pp - params);
 
-		SSVAL(req->outbuf,smb_drcnt, data_sent_thistime);
+		SSVAL(outbuf,smb_drcnt, data_sent_thistime);
 		if(data_sent_thistime == 0) {
-			SSVAL(req->outbuf,smb_droff,0);
-			SSVAL(req->outbuf,smb_drdisp, 0);
+			SSVAL(outbuf,smb_droff,0);
+			SSVAL(outbuf,smb_drdisp, 0);
 		} else {
 			/* The offset of the data bytes is the offset of the
 				parameter bytes plus the number of parameters being sent this time */
-			SSVAL(req->outbuf, smb_droff,
-			      ((smb_buf(req->outbuf)+alignment_offset)
-			       - smb_base(req->outbuf))
-			      + params_sent_thistime + data_alignment_offset);
-			SSVAL(req->outbuf,smb_drdisp, pd - pdata);
+			SSVAL(outbuf,smb_droff,((smb_buf(outbuf)+alignment_offset) - 
+				smb_base(outbuf)) + params_sent_thistime + data_alignment_offset);
+			SSVAL(outbuf,smb_drdisp, pd - pdata);
 		}
 
-		/* Initialize the padding for alignment */
-
-		if (alignment_offset != 0) {
-			memset(smb_buf(req->outbuf), 0, alignment_offset);
-		}
-
 		/* Copy the param bytes into the packet */
 
-		if(params_sent_thistime) {
-			memcpy((smb_buf(req->outbuf)+alignment_offset), pp,
-			       params_sent_thistime);
-		}
+		if(params_sent_thistime)
+			memcpy((smb_buf(outbuf)+alignment_offset),pp,params_sent_thistime);
 
 		/* Copy in the data bytes */
-		if(data_sent_thistime) {
-			if (data_alignment_offset != 0) {
-				memset((smb_buf(req->outbuf)+alignment_offset+
-					params_sent_thistime), 0,
-				       data_alignment_offset);
-			}
-			memcpy(smb_buf(req->outbuf)+alignment_offset
-			       +params_sent_thistime+data_alignment_offset,
-			       pd,data_sent_thistime);
-		}
+		if(data_sent_thistime)
+			memcpy(smb_buf(outbuf)+alignment_offset+params_sent_thistime+
+				data_alignment_offset,pd,data_sent_thistime);
 
 		DEBUG(9,("t2_rep: params_sent_thistime = %d, data_sent_thistime = %d, useable_space = %d\n",
 			params_sent_thistime, data_sent_thistime, useable_space));
 		DEBUG(9,("t2_rep: params_to_send = %d, data_to_send = %d, paramsize = %d, datasize = %d\n",
 			params_to_send, data_to_send, paramsize, datasize));
 
-		if (overflow) {
-			error_packet_set((char *)req->outbuf,
-					 ERRDOS,ERRbufferoverflow,
-					 STATUS_BUFFER_OVERFLOW,
-					 __LINE__,__FILE__);
-		}
-
 		/* Send the packet */
-		show_msg((char *)req->outbuf);
-		if (!srv_send_smb(smbd_server_fd(),
-				(char *)req->outbuf,
-				IS_CONN_ENCRYPTED(conn)))
-			exit_server_cleanly("send_trans2_replies: srv_send_smb failed.");
+		show_msg(outbuf);
+		if (!send_smb(smbd_server_fd(),outbuf))
+			exit_server_cleanly("send_trans2_replies: send_smb failed.");
 
-		TALLOC_FREE(req->outbuf);
-
 		pp += params_sent_thistime;
 		pd += data_sent_thistime;
 
@@ -857,37 +728,35 @@
 		if(params_to_send < 0 || data_to_send < 0) {
 			DEBUG(0,("send_trans2_replies failed sanity check pts = %d, dts = %d\n!!!",
 				params_to_send, data_to_send));
-			return;
+			return -1;
 		}
 	}
 
-	return;
+	return 0;
 }
 
 /****************************************************************************
  Reply to a TRANSACT2_OPEN.
 ****************************************************************************/
 
-static void call_trans2open(connection_struct *conn,
-			    struct smb_request *req,
-			    char **pparams, int total_params,
-			    char **ppdata, int total_data,
-			    unsigned int max_data_bytes)
+static int call_trans2open(connection_struct *conn, char *inbuf, char *outbuf, int bufsize,  
+				char **pparams, int total_params, char **ppdata, int total_data,
+				unsigned int max_data_bytes)
 {
 	char *params = *pparams;
 	char *pdata = *ppdata;
 	int deny_mode;
 	int32 open_attr;
-	bool oplock_request;
+	BOOL oplock_request;
 #if 0
-	bool return_additional_info;
+	BOOL return_additional_info;
 	int16 open_sattr;
 	time_t open_time;
 #endif
 	int open_ofun;
 	uint32 open_size;
 	char *pname;
-	char *fname = NULL;
+	pstring fname;
 	SMB_OFF_T size=0;
 	int fattr=0,mtime=0;
 	SMB_INO_T inode = 0;
@@ -901,15 +770,13 @@
 	uint32 share_mode;
 	uint32 create_disposition;
 	uint32 create_options = 0;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	/*
 	 * Ensure we have enough parameters to perform the operation.
 	 */
 
 	if (total_params < 29) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
+		return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 	}
 
 	flags = SVAL(params, 0);
@@ -930,25 +797,32 @@
 	pname = &params[28];
 
 	if (IS_IPC(conn)) {
-		reply_doserror(req, ERRSRV, ERRaccess);
-		return;
+		return(ERROR_DOS(ERRSRV,ERRaccess));
 	}
 
-	srvstr_get_path(ctx, params, req->flags2, &fname, pname,
-			total_params - 28, STR_TERMINATE,
-			&status);
+	srvstr_get_path(inbuf, fname, pname, sizeof(fname), total_params - 28, STR_TERMINATE, &status);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
-		return;
+		return ERROR_NT(status);
 	}
 
 	DEBUG(3,("call_trans2open %s deny_mode=0x%x attr=%d ofun=0x%x size=%d\n",
 		fname, (unsigned int)deny_mode, (unsigned int)open_attr,
 		(unsigned int)open_ofun, open_size));
 
+	/* XXXX we need to handle passed times, sattr and flags */
+
+	status = unix_convert(conn, fname, False, NULL, &sbuf);
+	if (!NT_STATUS_IS_OK(status)) {
+		return ERROR_NT(status);
+	}
+    
+	status = check_name(conn, fname);
+	if (!NT_STATUS_IS_OK(status)) {
+		return ERROR_NT(status);
+	}
+
 	if (open_ofun == 0) {
-		reply_nterror(req, NT_STATUS_OBJECT_NAME_COLLISION);
-		return;
+		return ERROR_NT(NT_STATUS_OBJECT_NAME_COLLISION);
 	}
 
 	if (!map_open_params_to_ntcreate(fname, deny_mode, open_ofun,
@@ -956,81 +830,96 @@
 				&share_mode,
 				&create_disposition,
 				&create_options)) {
-		reply_doserror(req, ERRDOS, ERRbadaccess);
-		return;
+		return ERROR_DOS(ERRDOS, ERRbadaccess);
 	}
 
 	/* Any data in this call is an EA list. */
 	if (total_data && (total_data != 4) && !lp_ea_support(SNUM(conn))) {
-		reply_nterror(req, NT_STATUS_EAS_NOT_SUPPORTED);
-		return;
+		return ERROR_NT(NT_STATUS_EAS_NOT_SUPPORTED);
 	}
 
 	if (total_data != 4) {
 		if (total_data < 10) {
-			reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 		}
 
 		if (IVAL(pdata,0) > total_data) {
 			DEBUG(10,("call_trans2open: bad total data size (%u) > %u\n",
 				IVAL(pdata,0), (unsigned int)total_data));
-			reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 		}
 
-		ea_list = read_ea_list(talloc_tos(), pdata + 4,
+		ea_list = read_ea_list(tmp_talloc_ctx(), pdata + 4,
 				       total_data - 4);
 		if (!ea_list) {
-			reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 		}
 	} else if (IVAL(pdata,0) != 4) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
+		return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 	}
 
-	status = create_file(conn,			/* conn */
-			     req,			/* req */
-			     0,				/* root_dir_fid */
-			     fname,			/* fname */
-			     access_mask,		/* access_mask */
-			     share_mode,		/* share_access */
-			     create_disposition,	/* create_disposition*/
-			     create_options,		/* create_options */
-			     open_attr,			/* file_attributes */
-			     oplock_request,		/* oplock_request */
-			     open_size,			/* allocation_size */
-			     NULL,			/* sd */
-			     ea_list,			/* ea_list */
-			     &fsp,			/* result */
-			     &smb_action,		/* pinfo */
-			     &sbuf);			/* psbuf */
+	status = open_file_ntcreate(conn,fname,&sbuf,
+		access_mask,
+		share_mode,
+		create_disposition,
+		create_options,
+		open_attr,
+		oplock_request,
+		&smb_action, &fsp);
 
 	if (!NT_STATUS_IS_OK(status)) {
-		if (open_was_deferred(req->mid)) {
+		if (open_was_deferred(SVAL(inbuf,smb_mid))) {
 			/* We have re-scheduled this call. */
-			return;
+			return -1;
 		}
-		reply_openerror(req, status);
-		return;
+		return ERROR_OPEN(status);
 	}
 
 	size = get_file_size(sbuf);
-	fattr = dos_mode(conn,fsp->fsp_name,&sbuf);
+	fattr = dos_mode(conn,fname,&sbuf);
 	mtime = sbuf.st_mtime;
 	inode = sbuf.st_ino;
 	if (fattr & aDIR) {
 		close_file(fsp,ERROR_CLOSE);
-		reply_doserror(req, ERRDOS,ERRnoaccess);
-		return;
+		return(ERROR_DOS(ERRDOS,ERRnoaccess));
 	}
 
+	/* Save the requested allocation size. */
+	/* Allocate space for the file if a size hint is supplied */
+	if ((smb_action == FILE_WAS_CREATED) || (smb_action == FILE_WAS_OVERWRITTEN)) {
+		SMB_BIG_UINT allocation_size = (SMB_BIG_UINT)open_size;
+		if (allocation_size && (allocation_size > (SMB_BIG_UINT)size)) {
+                        fsp->initial_allocation_size = smb_roundup(fsp->conn, allocation_size);
+                        if (fsp->is_directory) {
+                                close_file(fsp,ERROR_CLOSE);
+                                /* Can't set allocation size on a directory. */
+                                return ERROR_NT(NT_STATUS_ACCESS_DENIED);
+                        }
+                        if (vfs_allocate_file_space(fsp, fsp->initial_allocation_size) == -1) {
+                                close_file(fsp,ERROR_CLOSE);
+                                return ERROR_NT(NT_STATUS_DISK_FULL);
+                        }
+
+			/* Adjust size here to return the right size in the reply.
+			   Windows does it this way. */
+			size = fsp->initial_allocation_size;
+                } else {
+                        fsp->initial_allocation_size = smb_roundup(fsp->conn,(SMB_BIG_UINT)size);
+                }
+	}
+
+	if (ea_list && smb_action == FILE_WAS_CREATED) {
+		status = set_ea(conn, fsp, fname, ea_list);
+		if (!NT_STATUS_IS_OK(status)) {
+			close_file(fsp,ERROR_CLOSE);
+			return ERROR_NT(status);
+		}
+	}
+
 	/* Realloc the size of parameters and data we will return */
 	*pparams = (char *)SMB_REALLOC(*pparams, 30);
 	if(*pparams == NULL ) {
-		reply_nterror(req, NT_STATUS_NO_MEMORY);
-		return;
+		return ERROR_NT(NT_STATUS_NO_MEMORY);
 	}
 	params = *pparams;
 
@@ -1054,14 +943,16 @@
 	SIVAL(params,20,inode);
 	SSVAL(params,24,0); /* Padding. */
 	if (flags & 8) {
-		uint32 ea_size = estimate_ea_size(conn, fsp, fsp->fsp_name);
+		uint32 ea_size = estimate_ea_size(conn, fsp, fname);
 		SIVAL(params, 26, ea_size);
 	} else {
 		SIVAL(params, 26, 0);
 	}
 
 	/* Send the required number of replies */
-	send_trans2_replies(conn, req, params, 30, *ppdata, 0, max_data_bytes);
+	send_trans2_replies(outbuf, bufsize, params, 30, *ppdata, 0, max_data_bytes);
+
+	return -1;
 }
 
 /*********************************************************
@@ -1071,9 +962,7 @@
  Case can be significant or not.
 **********************************************************/
 
-static bool exact_match(connection_struct *conn,
-		const char *str,
-		const char *mask)
+static BOOL exact_match(connection_struct *conn, char *str, char *mask)
 {
 	if (mask[0] == '.' && mask[1] == 0)
 		return False;
@@ -1196,59 +1085,24 @@
 }
 
 /****************************************************************************
- Needed to show the msdfs symlinks as directories. Modifies psbuf
- to be a directory if it's a msdfs link.
-****************************************************************************/
-
-static bool check_msdfs_link(connection_struct *conn,
-				const char *pathname,
-				SMB_STRUCT_STAT *psbuf)
-{
-	int saved_errno = errno;
-	if(lp_host_msdfs() &&
-		lp_msdfs_root(SNUM(conn)) &&
-		is_msdfs_link(conn, pathname, psbuf)) {
-
-		DEBUG(5,("check_msdfs_link: Masquerading msdfs link %s "
-			"as a directory\n",
-			pathname));
-		psbuf->st_mode = (psbuf->st_mode & 0xFFF) | S_IFDIR;
-		errno = saved_errno;
-		return true;
-	}
-	errno = saved_errno;
-	return false;
-}
-
-
-/****************************************************************************
  Get a level dependent lanman2 dir entry.
 ****************************************************************************/
 
-static bool get_lanman2_dir_entry(TALLOC_CTX *ctx,
-				connection_struct *conn,
-				uint16 flags2,
-				const char *path_mask,
-				uint32 dirtype,
-				int info_level,
-				int requires_resume_key,
-				bool dont_descend,
-				bool ask_sharemode,
-				char **ppdata,
-				char *base_data,
-				char *end_data,
-				int space_remaining,
-				bool *out_of_space,
-				bool *got_exact_match,
-				int *last_entry_off,
-				struct ea_list *name_list)
+static BOOL get_lanman2_dir_entry(connection_struct *conn,
+				  void *inbuf, char *outbuf,
+				 char *path_mask,uint32 dirtype,int info_level,
+				 int requires_resume_key,
+				 BOOL dont_descend,char **ppdata, 
+				 char *base_data, char *end_data, int space_remaining, 
+				 BOOL *out_of_space, BOOL *got_exact_match,
+				 int *last_entry_off, struct ea_list *name_list, TALLOC_CTX *ea_ctx)
 {
 	const char *dname;
-	bool found = False;
+	BOOL found = False;
 	SMB_STRUCT_STAT sbuf;
-	const char *mask = NULL;
-	char *pathreal = NULL;
-	const char *fname = NULL;
+	pstring mask;
+	pstring pathreal;
+	pstring fname;
 	char *p, *q, *pdata = *ppdata;
 	uint32 reskey=0;
 	long prev_dirpos=0;
@@ -1260,12 +1114,12 @@
 	time_t mdate = (time_t)0, adate = (time_t)0, create_date = (time_t)0;
 	char *nameptr;
 	char *last_entry_ptr;
-	bool was_8_3;
+	BOOL was_8_3;
 	uint32 nt_extmode; /* Used for NT connections instead of mode */
-	bool needslash = ( conn->dirpath[strlen(conn->dirpath) -1] != '/');
-	bool check_mangled_names = lp_manglednames(conn->params);
-	char mangled_name[13]; /* mangled 8.3 name. */
+	BOOL needslash = ( conn->dirpath[strlen(conn->dirpath) -1] != '/');
+	BOOL check_mangled_names = lp_manglednames(conn->params);
 
+	*fname = 0;
 	*out_of_space = False;
 	*got_exact_match = False;
 
@@ -1273,28 +1127,26 @@
 	ZERO_STRUCT(adate_ts);
 	ZERO_STRUCT(create_date_ts);
 
-	if (!conn->dirptr) {
+	if (!conn->dirptr)
 		return(False);
-	}
 
 	p = strrchr_m(path_mask,'/');
 	if(p != NULL) {
-		if(p[1] == '\0') {
-			mask = talloc_strdup(ctx,"*.*");
-		} else {
-			mask = p+1;
-		}
-	} else {
-		mask = path_mask;
-	}
+		if(p[1] == '\0')
+			pstrcpy(mask,"*.*");
+		else
+			pstrcpy(mask, p+1);
+	} else
+		pstrcpy(mask, path_mask);
 
+
 	while (!found) {
-		bool got_match;
-		bool ms_dfs_link = False;
+		BOOL got_match;
+		BOOL ms_dfs_link = False;
 
 		/* Needed if we run out of space */
 		long curr_dirpos = prev_dirpos = dptr_TellDir(conn->dirptr);
-		dname = dptr_ReadDirName(ctx,conn->dirptr,&curr_dirpos,&sbuf);
+		dname = dptr_ReadDirName(conn->dirptr,&curr_dirpos,&sbuf);
 
 		/*
 		 * Due to bugs in NT client redirectors we are not using
@@ -1307,90 +1159,66 @@
 
 		DEBUG(8,("get_lanman2_dir_entry:readdir on dirptr 0x%lx now at offset %ld\n",
 			(long)conn->dirptr,curr_dirpos));
-
-		if (!dname) {
+      
+		if (!dname) 
 			return(False);
-		}
 
-		/*
-		 * fname may get mangled, dname is never mangled.
-		 * Whenever we're accessing the filesystem we use
-		 * pathreal which is composed from dname.
-		 */
+		pstrcpy(fname,dname);      
 
-		pathreal = NULL;
-		fname = dname;
-
-		/* Mangle fname if it's an illegal name. */
-		if (mangle_must_mangle(dname,conn->params)) {
-			if (!name_to_8_3(dname,mangled_name,True,conn->params)) {
-				continue; /* Error - couldn't mangle. */
-			}
-			fname = mangled_name;
-		}
-
-		if(!(got_match = *got_exact_match = exact_match(conn, fname, mask))) {
+		if(!(got_match = *got_exact_match = exact_match(conn, fname, mask)))
 			got_match = mask_match(fname, mask, conn->case_sensitive);
-		}
 
 		if(!got_match && check_mangled_names &&
 		   !mangle_is_8_3(fname, False, conn->params)) {
+
 			/*
 			 * It turns out that NT matches wildcards against
 			 * both long *and* short names. This may explain some
 			 * of the wildcard wierdness from old DOS clients
 			 * that some people have been seeing.... JRA.
 			 */
-			/* Force the mangling into 8.3. */
-			if (!name_to_8_3( fname, mangled_name, False, conn->params)) {
-				continue; /* Error - couldn't mangle. */
-			}
 
-			if(!(got_match = *got_exact_match = exact_match(conn, mangled_name, mask))) {
-				got_match = mask_match(mangled_name, mask, conn->case_sensitive);
-			}
+			pstring newname;
+			pstrcpy( newname, fname);
+			mangle_map( newname, True, False, conn->params);
+			if(!(got_match = *got_exact_match = exact_match(conn, newname, mask)))
+				got_match = mask_match(newname, mask, conn->case_sensitive);
 		}
 
-		if (got_match) {
-			bool isdots = (ISDOT(dname) || ISDOTDOT(dname));
-
-			if (dont_descend && !isdots) {
+		if(got_match) {
+			BOOL isdots = (strequal(fname,"..") || strequal(fname,"."));
+			if (dont_descend && !isdots)
 				continue;
-			}
+	  
+			pstrcpy(pathreal,conn->dirpath);
+			if(needslash)
+				pstrcat(pathreal,"/");
+			pstrcat(pathreal,dname);
 
-			if (needslash) {
-				pathreal = NULL;
-				pathreal = talloc_asprintf(ctx,
-					"%s/%s",
-					conn->dirpath,
-					dname);
-			} else {
-				pathreal = talloc_asprintf(ctx,
-					"%s%s",
-					conn->dirpath,
-					dname);
-			}
-
-			if (!pathreal) {
-				return False;
-			}
-
 			if (INFO_LEVEL_IS_UNIX(info_level)) {
 				if (SMB_VFS_LSTAT(conn,pathreal,&sbuf) != 0) {
 					DEBUG(5,("get_lanman2_dir_entry:Couldn't lstat [%s] (%s)\n",
 						pathreal,strerror(errno)));
-					TALLOC_FREE(pathreal);
 					continue;
 				}
 			} else if (!VALID_STAT(sbuf) && SMB_VFS_STAT(conn,pathreal,&sbuf) != 0) {
-				/* Needed to show the msdfs symlinks as
+				pstring link_target;
+
+				/* Needed to show the msdfs symlinks as 
 				 * directories */
 
-				ms_dfs_link = check_msdfs_link(conn, pathreal, &sbuf);
-				if (!ms_dfs_link) {
+				if(lp_host_msdfs() && 
+				   lp_msdfs_root(SNUM(conn)) &&
+				   ((ms_dfs_link = is_msdfs_link(conn, pathreal, link_target, &sbuf)) == True)) {
+					DEBUG(5,("get_lanman2_dir_entry: Masquerading msdfs link %s "
+						"as a directory\n",
+						pathreal));
+					sbuf.st_mode = (sbuf.st_mode & 0xFFF) | S_IFDIR;
+
+				} else {
+
 					DEBUG(5,("get_lanman2_dir_entry:Couldn't stat [%s] (%s)\n",
 						pathreal,strerror(errno)));
-					TALLOC_FREE(pathreal);
 					continue;
 				}
 			}
@@ -1402,31 +1230,18 @@
 			}
 
 			if (!dir_check_ftype(conn,mode,dirtype)) {
-				DEBUG(5,("get_lanman2_dir_entry: [%s] attribs didn't match %x\n",fname,dirtype));
-				TALLOC_FREE(pathreal);
+				DEBUG(5,("[%s] attribs didn't match %x\n",fname,dirtype));
 				continue;
 			}
 
-			if (!(mode & aDIR)) {
+			if (!(mode & aDIR))
 				file_size = get_file_size(sbuf);
-			}
 			allocation_size = get_allocation_size(conn,NULL,&sbuf);
 
 			mdate_ts = get_mtimespec(&sbuf);
 			adate_ts = get_atimespec(&sbuf);
 			create_date_ts = get_create_timespec(&sbuf,lp_fake_dir_create_times(SNUM(conn)));
 
-			if (ask_sharemode) {
-				struct timespec write_time_ts;
-				struct file_id fileid;
-
-				fileid = vfs_file_id_from_sbuf(conn, &sbuf);
-				get_file_infos(fileid, NULL, &write_time_ts);
-				if (!null_timespec(write_time_ts)) {
-					mdate_ts = write_time_ts;
-				}
-			}
-
 			if (lp_dos_filetime_resolution(SNUM(conn))) {
 				dos_filetime_timespec(&create_date_ts);
 				dos_filetime_timespec(&mdate_ts);
@@ -1436,15 +1251,17 @@
 			create_date = convert_timespec_to_time_t(create_date_ts);
 			mdate = convert_timespec_to_time_t(mdate_ts);
 			adate = convert_timespec_to_time_t(adate_ts);
-
-			DEBUG(5,("get_lanman2_dir_entry: found %s fname=%s\n",pathreal,fname));
-
+			
+			DEBUG(5,("get_lanman2_dir_entry found %s fname=%s\n",pathreal,fname));
+	  
 			found = True;
 
 			dptr_DirCacheAdd(conn->dirptr, dname, curr_dirpos);
 		}
 	}
 
+	mangle_map(fname,False,True,conn->params);
+
 	p = pdata;
 	last_entry_ptr = p;
 
@@ -1465,13 +1282,9 @@
 			SSVAL(p,20,mode);
 			p += 23;
 			nameptr = p;
-			if (flags2 & FLAGS2_UNICODE_STRINGS) {
-				p += ucs2_align(base_data, p, 0);
-			}
-			len = srvstr_push(base_data, flags2, p,
-					  fname, PTR_DIFF(end_data, p),
-					  STR_TERMINATE);
-			if (flags2 & FLAGS2_UNICODE_STRINGS) {
+			p += align_string(outbuf, p, 0);
+			len = srvstr_push(outbuf, p, fname, PTR_DIFF(end_data, p), STR_TERMINATE);
+			if (SVAL(outbuf, smb_flg2) & FLAGS2_UNICODE_STRINGS) {
 				if (len > 2) {
 					SCVAL(nameptr, -1, len - 2);
 				} else {
@@ -1505,10 +1318,8 @@
 			}
 			p += 27;
 			nameptr = p - 1;
-			len = srvstr_push(base_data, flags2,
-					  p, fname, PTR_DIFF(end_data, p),
-					  STR_TERMINATE | STR_NOALIGN);
-			if (flags2 & FLAGS2_UNICODE_STRINGS) {
+			len = srvstr_push(outbuf, p, fname, PTR_DIFF(end_data, p), STR_TERMINATE | STR_NOALIGN);
+			if (SVAL(outbuf, smb_flg2) & FLAGS2_UNICODE_STRINGS) {
 				if (len > 2) {
 					len -= 2;
 				} else {
@@ -1547,7 +1358,7 @@
 			SSVAL(p,20,mode);
 			p += 22; /* p now points to the EA area. */
 
-			file_list = get_ea_list_from_file(ctx, conn, NULL, pathreal, &ea_len);
+			file_list = get_ea_list_from_file(ea_ctx, conn, NULL, pathreal, &ea_len);
 			name_list = ea_list_union(name_list, file_list, &ea_len);
 
 			/* We need to determine if this entry will fit in the space available. */
@@ -1561,12 +1372,10 @@
 			}
 
 			/* Push the ea_data followed by the name. */
-			p += fill_ea_buffer(ctx, p, space_remaining, conn, name_list);
+			p += fill_ea_buffer(ea_ctx, p, space_remaining - (p - pdata), conn, name_list);
 			nameptr = p;
-			len = srvstr_push(base_data, flags2,
-					  p + 1, fname, PTR_DIFF(end_data, p+1),
-					  STR_TERMINATE | STR_NOALIGN);
-			if (flags2 & FLAGS2_UNICODE_STRINGS) {
+			len = srvstr_push(outbuf, p + 1, fname, PTR_DIFF(end_data, p+1), STR_TERMINATE | STR_NOALIGN);
+			if (SVAL(outbuf, smb_flg2) & FLAGS2_UNICODE_STRINGS) {
 				if (len > 2) {
 					len -= 2;
 				} else {
@@ -1608,15 +1417,12 @@
 			 * a Win2k client bug. JRA.
 			 */
 			if (!was_8_3 && check_mangled_names) {
-				if (!name_to_8_3(fname,mangled_name,True,
-						   conn->params)) {
-					/* Error - mangle failed ! */
-					memset(mangled_name,'\0',12);
-				}
+				pstring mangled_name;
+				pstrcpy(mangled_name, fname);
+				mangle_map(mangled_name,True,True,
+					   conn->params);
 				mangled_name[12] = 0;
-				len = srvstr_push(base_data, flags2,
-						  p+2, mangled_name, 24,
-						  STR_UPPER|STR_UNICODE);
+				len = srvstr_push(outbuf, p+2, mangled_name, 24, STR_UPPER|STR_UNICODE);
 				if (len < 24) {
 					memset(p + 2 + len,'\0',24 - len);
 				}
@@ -1625,9 +1431,7 @@
 				memset(p,'\0',26);
 			}
 			p += 2 + 24;
-			len = srvstr_push(base_data, flags2, p,
-					  fname, PTR_DIFF(end_data, p),
-					  STR_TERMINATE_ASCII);
+			len = srvstr_push(outbuf, p, fname, PTR_DIFF(end_data, p), STR_TERMINATE_ASCII);
 			SIVAL(q,0,len);
 			p += len;
 			SIVAL(p,0,0); /* Ensure any padding is null. */
@@ -1648,9 +1452,7 @@
 			SOFF_T(p,0,file_size); p += 8;
 			SOFF_T(p,0,allocation_size); p += 8;
 			SIVAL(p,0,nt_extmode); p += 4;
-			len = srvstr_push(base_data, flags2,
-					  p + 4, fname, PTR_DIFF(end_data, p+4),
-					  STR_TERMINATE_ASCII);
+			len = srvstr_push(outbuf, p + 4, fname, PTR_DIFF(end_data, p+4), STR_TERMINATE_ASCII);
 			SIVAL(p,0,len);
 			p += 4 + len;
 			SIVAL(p,0,0); /* Ensure any padding is null. */
@@ -1659,7 +1461,7 @@
 			SIVAL(pdata,0,len);
 			p = pdata + len;
 			break;
-
+      
 		case SMB_FIND_FILE_FULL_DIRECTORY_INFO:
 			DEBUG(10,("get_lanman2_dir_entry: SMB_FIND_FILE_FULL_DIRECTORY_INFO\n"));
 			p += 4;
@@ -1677,9 +1479,7 @@
 				SIVAL(p,0,ea_size); /* Extended attributes */
 				p +=4;
 			}
-			len = srvstr_push(base_data, flags2, p,
-					  fname, PTR_DIFF(end_data, p),
-					  STR_TERMINATE_ASCII);
+			len = srvstr_push(outbuf, p, fname, PTR_DIFF(end_data, p), STR_TERMINATE_ASCII);
 			SIVAL(q, 0, len);
 			p += len;
 
@@ -1697,9 +1497,7 @@
 			p += 4;
 			/* this must *not* be null terminated or w2k gets in a loop trying to set an
 			   acl on a dir (tridge) */
-			len = srvstr_push(base_data, flags2, p,
-					  fname, PTR_DIFF(end_data, p),
-					  STR_TERMINATE_ASCII);
+			len = srvstr_push(outbuf, p, fname, PTR_DIFF(end_data, p), STR_TERMINATE_ASCII);
 			SIVAL(p, -4, len);
 			p += len;
 			SIVAL(p,0,0); /* Ensure any padding is null. */
@@ -1729,9 +1527,7 @@
 			SIVAL(p,0,0); p += 4; /* Unknown - reserved ? */
 			SIVAL(p,0,sbuf.st_ino); p += 4; /* FileIndexLow */
 			SIVAL(p,0,sbuf.st_dev); p += 4; /* FileIndexHigh */
-			len = srvstr_push(base_data, flags2, p,
-					  fname, PTR_DIFF(end_data, p),
-					  STR_TERMINATE_ASCII);
+			len = srvstr_push(outbuf, p, fname, PTR_DIFF(end_data, p), STR_TERMINATE_ASCII);
 			SIVAL(q, 0, len);
 			p += len; 
 			SIVAL(p,0,0); /* Ensure any padding is null. */
@@ -1764,15 +1560,12 @@
 			 * a Win2k client bug. JRA.
 			 */
 			if (!was_8_3 && check_mangled_names) {
-				if (!name_to_8_3(fname,mangled_name,True,
-						conn->params)) {
-					/* Error - mangle failed ! */
-					memset(mangled_name,'\0',12);
-				}
+				pstring mangled_name;
+				pstrcpy(mangled_name, fname);
+				mangle_map(mangled_name,True,True,
+					   conn->params);
 				mangled_name[12] = 0;
-				len = srvstr_push(base_data, flags2,
-						  p+2, mangled_name, 24,
-						  STR_UPPER|STR_UNICODE);
+				len = srvstr_push(outbuf, p+2, mangled_name, 24, STR_UPPER|STR_UNICODE);
 				SSVAL(p, 0, len);
 				if (len < 24) {
 					memset(p + 2 + len,'\0',24 - len);
@@ -1785,9 +1578,7 @@
 			SSVAL(p,0,0); p += 2; /* Reserved ? */
 			SIVAL(p,0,sbuf.st_ino); p += 4; /* FileIndexLow */
 			SIVAL(p,0,sbuf.st_dev); p += 4; /* FileIndexHigh */
-			len = srvstr_push(base_data, flags2, p,
-					  fname, PTR_DIFF(end_data, p),
-					  STR_TERMINATE_ASCII);
+			len = srvstr_push(outbuf, p, fname, PTR_DIFF(end_data, p), STR_TERMINATE_ASCII);
 			SIVAL(q,0,len);
 			p += len;
 			SIVAL(p,0,0); /* Ensure any padding is null. */
@@ -1810,17 +1601,14 @@
 				DEBUG(10,("get_lanman2_dir_entry: SMB_FIND_FILE_UNIX\n"));
 				p = store_file_unix_basic(conn, p,
 							NULL, &sbuf);
-				len = srvstr_push(base_data, flags2, p,
-						  fname, PTR_DIFF(end_data, p),
-						  STR_TERMINATE);
+				len = srvstr_push(outbuf, p, fname, PTR_DIFF(end_data, p), STR_TERMINATE);
 			} else {
 				DEBUG(10,("get_lanman2_dir_entry: SMB_FIND_FILE_UNIX_INFO2\n"));
 				p = store_file_unix_basic_info2(conn, p,
 							NULL, &sbuf);
 				nameptr = p;
 				p += 4;
-				len = srvstr_push(base_data, flags2, p, fname,
-						  PTR_DIFF(end_data, p), 0);
+				len = srvstr_push(outbuf, p, fname, PTR_DIFF(end_data, p), 0);
 				SIVAL(nameptr, 0, len);
 			}
 
@@ -1835,7 +1623,7 @@
 
 			break;
 
-		default:
+		default:      
 			return(False);
 	}
 
@@ -1860,11 +1648,9 @@
  Reply to a TRANS2_FINDFIRST.
 ****************************************************************************/
 
-static void call_trans2findfirst(connection_struct *conn,
-				 struct smb_request *req,
-				 char **pparams, int total_params,
-				 char **ppdata, int total_data,
-				 unsigned int max_data_bytes)
+static int call_trans2findfirst(connection_struct *conn, char *inbuf, char *outbuf, int bufsize,  
+				char **pparams, int total_params, char **ppdata, int total_data,
+				unsigned int max_data_bytes)
 {
 	/* We must be careful here that we don't return more than the
 		allowed number of data bytes. If this means returning fewer than
@@ -1877,31 +1663,29 @@
 	uint32 dirtype;
 	int maxentries;
 	uint16 findfirst_flags;
-	bool close_after_first;
-	bool close_if_end;
-	bool requires_resume_key;
+	BOOL close_after_first;
+	BOOL close_if_end;
+	BOOL requires_resume_key;
 	int info_level;
-	char *directory = NULL;
-	const char *mask = NULL;
+	pstring directory;
+	pstring mask;
 	char *p;
 	int last_entry_off=0;
 	int dptr_num = -1;
 	int numentries = 0;
 	int i;
-	bool finished = False;
-	bool dont_descend = False;
-	bool out_of_space = False;
+	BOOL finished = False;
+	BOOL dont_descend = False;
+	BOOL out_of_space = False;
 	int space_remaining;
-	bool mask_contains_wcard = False;
+	BOOL mask_contains_wcard = False;
 	SMB_STRUCT_STAT sbuf;
+	TALLOC_CTX *ea_ctx = NULL;
 	struct ea_list *ea_list = NULL;
 	NTSTATUS ntstatus = NT_STATUS_OK;
-	bool ask_sharemode = lp_parm_bool(SNUM(conn), "smbd", "search ask sharemode", true);
-	TALLOC_CTX *ctx = talloc_tos();
 
 	if (total_params < 13) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
+		return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 	}
 
 	dirtype = SVAL(params,0);
@@ -1912,6 +1696,8 @@
 	requires_resume_key = (findfirst_flags & FLAG_TRANS2_FIND_REQUIRE_RESUME);
 	info_level = SVAL(params,6);
 
+	*directory = *mask = 0;
+
 	DEBUG(3,("call_trans2findfirst: dirtype = %x, maxentries = %d, close_after_first=%d, \
 close_if_end = %d requires_resume_key = %d level = 0x%x, max_data_bytes = %d\n",
 		(unsigned int)dirtype, maxentries, close_after_first, close_if_end, requires_resume_key,
@@ -1936,66 +1722,47 @@
 		case SMB_FIND_FILE_UNIX:
 		case SMB_FIND_FILE_UNIX_INFO2:
 			if (!lp_unix_extensions()) {
-				reply_nterror(req, NT_STATUS_INVALID_LEVEL);
-				return;
+				return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 			}
 			break;
 		default:
-			reply_nterror(req, NT_STATUS_INVALID_LEVEL);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 	}
 
-	srvstr_get_path_wcard(ctx, params, req->flags2, &directory,
-			      params+12, total_params - 12,
-			      STR_TERMINATE, &ntstatus, &mask_contains_wcard);
+	srvstr_get_path_wcard(inbuf, directory, params+12, sizeof(directory), total_params - 12, STR_TERMINATE, &ntstatus, &mask_contains_wcard);
 	if (!NT_STATUS_IS_OK(ntstatus)) {
-		reply_nterror(req, ntstatus);
-		return;
+		return ERROR_NT(ntstatus);
 	}
 
-	ntstatus = resolve_dfspath_wcard(ctx, conn,
-			req->flags2 & FLAGS2_DFS_PATHNAMES,
-			directory,
-			&directory,
-			&mask_contains_wcard);
+	ntstatus = resolve_dfspath_wcard(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, directory, &mask_contains_wcard);
 	if (!NT_STATUS_IS_OK(ntstatus)) {
 		if (NT_STATUS_EQUAL(ntstatus,NT_STATUS_PATH_NOT_COVERED)) {
-			reply_botherror(req, NT_STATUS_PATH_NOT_COVERED,
-					ERRSRV, ERRbadpath);
-			return;
+			return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, ERRbadpath);
 		}
-		reply_nterror(req, ntstatus);
-		return;
+		return ERROR_NT(ntstatus);
 	}
 
-	ntstatus = unix_convert(ctx, conn, directory, True, &directory, NULL, &sbuf);
+	ntstatus = unix_convert(conn, directory, True, NULL, &sbuf);
 	if (!NT_STATUS_IS_OK(ntstatus)) {
-		reply_nterror(req, ntstatus);
-		return;
+		return ERROR_NT(ntstatus);
 	}
-
 	ntstatus = check_name(conn, directory);
 	if (!NT_STATUS_IS_OK(ntstatus)) {
-		reply_nterror(req, ntstatus);
-		return;
+		return ERROR_NT(ntstatus);
 	}
 
 	p = strrchr_m(directory,'/');
 	if(p == NULL) {
 		/* Windows and OS/2 systems treat search on the root '\' as if it were '\*' */
 		if((directory[0] == '.') && (directory[1] == '\0')) {
-			mask = "*";
+			pstrcpy(mask,"*");
 			mask_contains_wcard = True;
 		} else {
-			mask = directory;
+			pstrcpy(mask,directory);
 		}
-		directory = talloc_strdup(talloc_tos(), "./");
-		if (!directory) {
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
-			return;
-		}
+		pstrcpy(directory,"./");
 	} else {
-		mask = p+1;
+		pstrcpy(mask,p+1);
 		*p = 0;
 	}
 
@@ -2005,36 +1772,37 @@
 		uint32 ea_size;
 
 		if (total_data < 4) {
-			reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 		}
 
 		ea_size = IVAL(pdata,0);
 		if (ea_size != total_data) {
 			DEBUG(4,("call_trans2findfirst: Rejecting EA request with incorrect \
 total_data=%u (should be %u)\n", (unsigned int)total_data, (unsigned int)IVAL(pdata,0) ));
-			reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 		}
 
 		if (!lp_ea_support(SNUM(conn))) {
-			reply_doserror(req, ERRDOS, ERReasnotsupported);
-			return;
+			return ERROR_DOS(ERRDOS,ERReasnotsupported);
 		}
+                                                                                                                                                        
+		if ((ea_ctx = talloc_init("findnext_ea_list")) == NULL) {
+			return ERROR_NT(NT_STATUS_NO_MEMORY);
+		}
 
 		/* Pull out the list of names. */
-		ea_list = read_ea_name_list(ctx, pdata + 4, ea_size - 4);
+		ea_list = read_ea_name_list(ea_ctx, pdata + 4, ea_size - 4);
 		if (!ea_list) {
-			reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-			return;
+			talloc_destroy(ea_ctx);
+			return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 		}
 	}
 
 	*ppdata = (char *)SMB_REALLOC(
 		*ppdata, max_data_bytes + DIR_ENTRY_SAFETY_MARGIN);
 	if(*ppdata == NULL ) {
-		reply_nterror(req, NT_STATUS_NO_MEMORY);
-		return;
+		talloc_destroy(ea_ctx);
+		return ERROR_NT(NT_STATUS_NO_MEMORY);
 	}
 	pdata = *ppdata;
 	data_end = pdata + max_data_bytes + DIR_ENTRY_SAFETY_MARGIN - 1;
@@ -2042,8 +1810,8 @@
 	/* Realloc the params space */
 	*pparams = (char *)SMB_REALLOC(*pparams, 10);
 	if (*pparams == NULL) {
-		reply_nterror(req, NT_STATUS_NO_MEMORY);
-		return;
+		talloc_destroy(ea_ctx);
+		return ERROR_NT(NT_STATUS_NO_MEMORY);
 	}
 	params = *pparams;
 
@@ -2054,33 +1822,33 @@
 				directory,
 				False,
 				True,
-				req->smbpid,
+				SVAL(inbuf,smb_pid),
 				mask,
 				mask_contains_wcard,
 				dirtype,
 				&conn->dirptr);
 
 	if (!NT_STATUS_IS_OK(ntstatus)) {
-		reply_nterror(req, ntstatus);
-		return;
+		talloc_destroy(ea_ctx);
+		return ERROR_NT(ntstatus);
 	}
 
 	dptr_num = dptr_dnum(conn->dirptr);
 	DEBUG(4,("dptr_num is %d, wcard = %s, attr = %d\n", dptr_num, mask, dirtype));
 
-	/* We don't need to check for VOL here as this is returned by
+	/* We don't need to check for VOL here as this is returned by 
 		a different TRANS2 call. */
-
+  
 	DEBUG(8,("dirpath=<%s> dontdescend=<%s>\n", conn->dirpath,lp_dontdescend(SNUM(conn))));
 	if (in_list(conn->dirpath,lp_dontdescend(SNUM(conn)),conn->case_sensitive))
 		dont_descend = True;
-
+    
 	p = pdata;
 	space_remaining = max_data_bytes;
 	out_of_space = False;
 
 	for (i=0;(i<maxentries) && !finished && !out_of_space;i++) {
-		bool got_exact_match = False;
+		BOOL got_exact_match = False;
 
 		/* this is a heuristic to avoid seeking the dirptr except when 
 			absolutely necessary. It allows for a filename of about 40 chars */
@@ -2088,16 +1856,12 @@
 			out_of_space = True;
 			finished = False;
 		} else {
-			finished = !get_lanman2_dir_entry(ctx,
-					conn,
-					req->flags2,
+			finished = !get_lanman2_dir_entry(conn,
+					inbuf, outbuf,
 					mask,dirtype,info_level,
 					requires_resume_key,dont_descend,
-					ask_sharemode,
-					&p,pdata,data_end,
-					space_remaining, &out_of_space,
-					&got_exact_match,
-					&last_entry_off, ea_list);
+					&p,pdata,data_end,space_remaining, &out_of_space, &got_exact_match,
+					&last_entry_off, ea_list, ea_ctx);
 		}
 
 		if (finished && out_of_space)
@@ -2116,14 +1880,10 @@
 		if(got_exact_match)
 			finished = True;
 
-		/* Ensure space_remaining never goes -ve. */
-		if (PTR_DIFF(p,pdata) > max_data_bytes) {
-			space_remaining = 0;
-			out_of_space = true;
-		} else {
-			space_remaining = max_data_bytes - PTR_DIFF(p,pdata);
-		}
+		space_remaining = max_data_bytes - PTR_DIFF(p,pdata);
 	}
+  
+	talloc_destroy(ea_ctx);
 
 	/* Check if we can close the dirptr */
 	if(close_after_first || (finished && close_if_end)) {
@@ -2131,8 +1891,8 @@
 		dptr_close(&dptr_num);
 	}
 
-	/*
-	 * If there are no matching entries we must return ERRDOS/ERRbadfile -
+	/* 
+	 * If there are no matching entries we must return ERRDOS/ERRbadfile - 
 	 * from observation of NT. NB. This changes to ERRDOS,ERRnofiles if
 	 * the protocol level is less than NT1. Tested with smbclient. JRA.
 	 * This should fix the OS/2 client bug #2335.
@@ -2141,12 +1901,9 @@
 	if(numentries == 0) {
 		dptr_close(&dptr_num);
 		if (Protocol < PROTOCOL_NT1) {
-			reply_doserror(req, ERRDOS, ERRnofiles);
-			return;
+			return ERROR_DOS(ERRDOS,ERRnofiles);
 		} else {
-			reply_botherror(req, NT_STATUS_NO_SUCH_FILE,
-					ERRDOS, ERRbadfile);
-			return;
+			return ERROR_BOTH(NT_STATUS_NO_SUCH_FILE,ERRDOS,ERRbadfile);
 		}
 	}
 
@@ -2159,21 +1916,16 @@
 	SSVAL(params,6,0); /* Never an EA error */
 	SSVAL(params,8,last_entry_off);
 
-	send_trans2_replies(conn, req, params, 10, pdata, PTR_DIFF(p,pdata),
-			    max_data_bytes);
+	send_trans2_replies( outbuf, bufsize, params, 10, pdata, PTR_DIFF(p,pdata), max_data_bytes);
 
-	if ((! *directory) && dptr_path(dptr_num)) {
-		directory = talloc_strdup(talloc_tos(),dptr_path(dptr_num));
-		if (!directory) {
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
-		}
-	}
+	if ((! *directory) && dptr_path(dptr_num))
+		slprintf(directory,sizeof(directory)-1, "(%s)",dptr_path(dptr_num));
 
 	DEBUG( 4, ( "%s mask=%s directory=%s dirtype=%d numentries=%d\n",
-		smb_fn_name(CVAL(req->inbuf,smb_com)),
+		smb_fn_name(CVAL(inbuf,smb_com)), 
 		mask, directory, dirtype, numentries ) );
 
-	/*
+	/* 
 	 * Force a name mangle here to ensure that the
 	 * mask as an 8.3 name is top of the mangled cache.
 	 * The reasons for this are subtle. Don't remove
@@ -2181,23 +1933,19 @@
 	 * (see PR#13758). JRA.
 	 */
 
-	if(!mangle_is_8_3_wildcards( mask, False, conn->params)) {
-		char mangled_name[13];
-		name_to_8_3(mask, mangled_name, True, conn->params);
-	}
+	if(!mangle_is_8_3_wildcards( mask, False, conn->params))
+		mangle_map(mask, True, True, conn->params);
 
-	return;
+	return(-1);
 }
 
 /****************************************************************************
  Reply to a TRANS2_FINDNEXT.
 ****************************************************************************/
 
-static void call_trans2findnext(connection_struct *conn,
-				struct smb_request *req,
-				char **pparams, int total_params,
-				char **ppdata, int total_data,
-				unsigned int max_data_bytes)
+static int call_trans2findnext(connection_struct *conn, char *inbuf, char *outbuf, int length, int bufsize,
+					char **pparams, int total_params, char **ppdata, int total_data,
+					unsigned int max_data_bytes)
 {
 	/* We must be careful here that we don't return more than the
 		allowed number of data bytes. If this means returning fewer than
@@ -2212,30 +1960,28 @@
 	uint16 info_level;
 	uint32 resume_key;
 	uint16 findnext_flags;
-	bool close_after_request;
-	bool close_if_end;
-	bool requires_resume_key;
-	bool continue_bit;
-	bool mask_contains_wcard = False;
-	char *resume_name = NULL;
-	const char *mask = NULL;
-	const char *directory = NULL;
-	char *p = NULL;
+	BOOL close_after_request;
+	BOOL close_if_end;
+	BOOL requires_resume_key;
+	BOOL continue_bit;
+	BOOL mask_contains_wcard = False;
+	pstring resume_name;
+	pstring mask;
+	pstring directory;
+	char *p;
 	uint16 dirtype;
 	int numentries = 0;
 	int i, last_entry_off=0;
-	bool finished = False;
-	bool dont_descend = False;
-	bool out_of_space = False;
+	BOOL finished = False;
+	BOOL dont_descend = False;
+	BOOL out_of_space = False;
 	int space_remaining;
+	TALLOC_CTX *ea_ctx = NULL;
 	struct ea_list *ea_list = NULL;
 	NTSTATUS ntstatus = NT_STATUS_OK;
-	bool ask_sharemode = lp_parm_bool(SNUM(conn), "smbd", "search ask sharemode", true);
-	TALLOC_CTX *ctx = talloc_tos();
 
 	if (total_params < 13) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
+		return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 	}
 
 	dptr_num = SVAL(params,0);
@@ -2248,23 +1994,20 @@
 	requires_resume_key = (findnext_flags & FLAG_TRANS2_FIND_REQUIRE_RESUME);
 	continue_bit = (findnext_flags & FLAG_TRANS2_FIND_CONTINUE);
 
-	srvstr_get_path_wcard(ctx, params, req->flags2, &resume_name,
-			      params+12,
-			      total_params - 12, STR_TERMINATE, &ntstatus,
-			      &mask_contains_wcard);
+	*mask = *directory = *resume_name = 0;
+
+	srvstr_get_path_wcard(inbuf, resume_name, params+12, sizeof(resume_name), total_params - 12, STR_TERMINATE, &ntstatus, &mask_contains_wcard);
 	if (!NT_STATUS_IS_OK(ntstatus)) {
 		/* Win9x or OS/2 can send a resume name of ".." or ".". This will cause the parser to
 		   complain (it thinks we're asking for the directory above the shared
 		   path or an invalid name). Catch this as the resume name is only compared, never used in
 		   a file access. JRA. */
-		srvstr_pull_talloc(ctx, params, req->flags2,
-				&resume_name, params+12,
-				total_params - 12,
-				STR_TERMINATE);
+		srvstr_pull(inbuf, resume_name, params+12,
+					sizeof(resume_name), total_params - 12,
+					STR_TERMINATE);
 
-		if (!resume_name || !(ISDOT(resume_name) || ISDOTDOT(resume_name))) {
-			reply_nterror(req, ntstatus);
-			return;
+		if (!(ISDOT(resume_name) || ISDOTDOT(resume_name))) {
+			return ERROR_NT(ntstatus);
 		}
 	}
 
@@ -2293,49 +2036,48 @@
 		case SMB_FIND_FILE_UNIX:
 		case SMB_FIND_FILE_UNIX_INFO2:
 			if (!lp_unix_extensions()) {
-				reply_nterror(req, NT_STATUS_INVALID_LEVEL);
-				return;
+				return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 			}
 			break;
 		default:
-			reply_nterror(req, NT_STATUS_INVALID_LEVEL);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 	}
 
 	if (info_level == SMB_FIND_EA_LIST) {
 		uint32 ea_size;
 
 		if (total_data < 4) {
-			reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 		}
 
 		ea_size = IVAL(pdata,0);
 		if (ea_size != total_data) {
 			DEBUG(4,("call_trans2findnext: Rejecting EA request with incorrect \
 total_data=%u (should be %u)\n", (unsigned int)total_data, (unsigned int)IVAL(pdata,0) ));
-			reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 		}
-
+                                                                                                                                                     
 		if (!lp_ea_support(SNUM(conn))) {
-			reply_doserror(req, ERRDOS, ERReasnotsupported);
-			return;
+			return ERROR_DOS(ERRDOS,ERReasnotsupported);
 		}
+                                                                                                                                                     
+		if ((ea_ctx = talloc_init("findnext_ea_list")) == NULL) {
+			return ERROR_NT(NT_STATUS_NO_MEMORY);
+		}
 
 		/* Pull out the list of names. */
-		ea_list = read_ea_name_list(ctx, pdata + 4, ea_size - 4);
+		ea_list = read_ea_name_list(ea_ctx, pdata + 4, ea_size - 4);
 		if (!ea_list) {
-			reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-			return;
+			talloc_destroy(ea_ctx);
+			return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 		}
 	}
 
 	*ppdata = (char *)SMB_REALLOC(
 		*ppdata, max_data_bytes + DIR_ENTRY_SAFETY_MARGIN);
 	if(*ppdata == NULL) {
-		reply_nterror(req, NT_STATUS_NO_MEMORY);
-		return;
+		talloc_destroy(ea_ctx);
+		return ERROR_NT(NT_STATUS_NO_MEMORY);
 	}
 
 	pdata = *ppdata;
@@ -2344,16 +2086,16 @@
 	/* Realloc the params space */
 	*pparams = (char *)SMB_REALLOC(*pparams, 6*SIZEOFWORD);
 	if(*pparams == NULL ) {
-		reply_nterror(req, NT_STATUS_NO_MEMORY);
-		return;
+		talloc_destroy(ea_ctx);
+		return ERROR_NT(NT_STATUS_NO_MEMORY);
 	}
 
 	params = *pparams;
 
 	/* Check that the dptr is valid */
 	if(!(conn->dirptr = dptr_fetch_lanman2(dptr_num))) {
-		reply_doserror(req, ERRDOS, ERRnofiles);
-		return;
+		talloc_destroy(ea_ctx);
+		return ERROR_DOS(ERRDOS,ERRnofiles);
 	}
 
 	string_set(&conn->dirpath,dptr_path(dptr_num));
@@ -2361,33 +2103,33 @@
 	/* Get the wildcard mask from the dptr */
 	if((p = dptr_wcard(dptr_num))== NULL) {
 		DEBUG(2,("dptr_num %d has no wildcard\n", dptr_num));
-		reply_doserror(req, ERRDOS, ERRnofiles);
-		return;
+		talloc_destroy(ea_ctx);
+		return ERROR_DOS(ERRDOS,ERRnofiles);
 	}
 
-	mask = p;
-	directory = conn->dirpath;
+	pstrcpy(mask, p);
+	pstrcpy(directory,conn->dirpath);
 
 	/* Get the attr mask from the dptr */
 	dirtype = dptr_attr(dptr_num);
 
 	DEBUG(3,("dptr_num is %d, mask = %s, attr = %x, dirptr=(0x%lX,%ld)\n",
-		dptr_num, mask, dirtype,
+		dptr_num, mask, dirtype, 
 		(long)conn->dirptr,
 		dptr_TellDir(conn->dirptr)));
 
-	/* We don't need to check for VOL here as this is returned by
+	/* We don't need to check for VOL here as this is returned by 
 		a different TRANS2 call. */
 
 	DEBUG(8,("dirpath=<%s> dontdescend=<%s>\n",conn->dirpath,lp_dontdescend(SNUM(conn))));
 	if (in_list(conn->dirpath,lp_dontdescend(SNUM(conn)),conn->case_sensitive))
 		dont_descend = True;
-
+    
 	p = pdata;
 	space_remaining = max_data_bytes;
 	out_of_space = False;
 
-	/*
+	/* 
 	 * Seek to the correct position. We no longer use the resume key but
 	 * depend on the last file name instead.
 	 */
@@ -2397,20 +2139,14 @@
 
 		long current_pos = 0;
 		/*
-		 * Remember, name_to_8_3 is called by
+		 * Remember, mangle_map is called by
 		 * get_lanman2_dir_entry(), so the resume name
 		 * could be mangled. Ensure we check the unmangled name.
 		 */
 
 		if (mangle_is_mangled(resume_name, conn->params)) {
-			char *new_resume_name = NULL;
-			mangle_lookup_name_from_8_3(ctx,
-						resume_name,
-						&new_resume_name,
-						conn->params);
-			if (new_resume_name) {
-				resume_name = new_resume_name;
-			}
+			mangle_check_cache(resume_name, sizeof(resume_name)-1,
+					   conn->params);
 		}
 
 		/*
@@ -2426,7 +2162,7 @@
 	} /* end if resume_name && !continue_bit */
 
 	for (i=0;(i<(int)maxentries) && !finished && !out_of_space ;i++) {
-		bool got_exact_match = False;
+		BOOL got_exact_match = False;
 
 		/* this is a heuristic to avoid seeking the dirptr except when 
 			absolutely necessary. It allows for a filename of about 40 chars */
@@ -2434,16 +2170,12 @@
 			out_of_space = True;
 			finished = False;
 		} else {
-			finished = !get_lanman2_dir_entry(ctx,
-						conn,
-						req->flags2,
+			finished = !get_lanman2_dir_entry(conn,
+						inbuf, outbuf,
 						mask,dirtype,info_level,
 						requires_resume_key,dont_descend,
-						ask_sharemode,
-						&p,pdata,data_end,
-						space_remaining, &out_of_space,
-						&got_exact_match,
-						&last_entry_off, ea_list);
+						&p,pdata,data_end,space_remaining, &out_of_space, &got_exact_match,
+						&last_entry_off, ea_list, ea_ctx);
 		}
 
 		if (finished && out_of_space)
@@ -2464,11 +2196,9 @@
 
 		space_remaining = max_data_bytes - PTR_DIFF(p,pdata);
 	}
+  
+	talloc_destroy(ea_ctx);
 
-	DEBUG( 3, ( "%s mask=%s directory=%s dirtype=%d numentries=%d\n",
-		smb_fn_name(CVAL(req->inbuf,smb_com)),
-		mask, directory, dirtype, numentries ) );
-
 	/* Check if we can close the dirptr */
 	if(close_after_request || (finished && close_if_end)) {
 		DEBUG(5,("call_trans2findnext: closing dptr_num = %d\n", dptr_num));
@@ -2481,64 +2211,62 @@
 	SSVAL(params,4,0); /* Never an EA error */
 	SSVAL(params,6,last_entry_off);
 
-	send_trans2_replies(conn, req, params, 8, pdata, PTR_DIFF(p,pdata),
-			    max_data_bytes);
+	send_trans2_replies( outbuf, bufsize, params, 8, pdata, PTR_DIFF(p,pdata), max_data_bytes);
 
-	return;
-}
+	if ((! *directory) && dptr_path(dptr_num))
+		slprintf(directory,sizeof(directory)-1, "(%s)",dptr_path(dptr_num));
 
-unsigned char *create_volume_objectid(connection_struct *conn, unsigned char objid[16])
-{
-	E_md4hash(lp_servicename(SNUM(conn)),objid);
-	return objid;
+	DEBUG( 3, ( "%s mask=%s directory=%s dirtype=%d numentries=%d\n",
+		smb_fn_name(CVAL(inbuf,smb_com)), 
+		mask, directory, dirtype, numentries ) );
+
+	return(-1);
 }
 
 static void samba_extended_info_version(struct smb_extended_info *extended_info)
 {
-	SMB_ASSERT(extended_info != NULL);
+				SMB_ASSERT(extended_info != NULL);
 
-	extended_info->samba_magic = SAMBA_EXTENDED_INFO_MAGIC;
-	extended_info->samba_version = ((SAMBA_VERSION_MAJOR & 0xff) << 24)
-				       | ((SAMBA_VERSION_MINOR & 0xff) << 16)
-				       | ((SAMBA_VERSION_RELEASE & 0xff) << 8);
+				extended_info->samba_magic = SAMBA_EXTENDED_INFO_MAGIC;
+				extended_info->samba_version = ((SAMBA_VERSION_MAJOR & 0xff) << 24)
+																			 | ((SAMBA_VERSION_MINOR & 0xff) << 16)
+																			 | ((SAMBA_VERSION_RELEASE & 0xff) << 8);
 #ifdef SAMBA_VERSION_REVISION
-	extended_info->samba_version |= (tolower(*SAMBA_VERSION_REVISION) - 'a' + 1) & 0xff;
+				extended_info->samba_version |= (tolower(*SAMBA_VERSION_REVISION) - 'a' + 1) & 0xff;
 #endif
-	extended_info->samba_subversion = 0;
+				extended_info->samba_subversion = 0;
 #ifdef SAMBA_VERSION_RC_RELEASE
-	extended_info->samba_subversion |= (SAMBA_VERSION_RC_RELEASE & 0xff) << 24;
+				extended_info->samba_subversion |= (SAMBA_VERSION_RC_RELEASE & 0xff) << 24;
 #else
 #ifdef SAMBA_VERSION_PRE_RELEASE
-	extended_info->samba_subversion |= (SAMBA_VERSION_PRE_RELEASE & 0xff) << 16;
+				extended_info->samba_subversion |= (SAMBA_VERSION_PRE_RELEASE & 0xff) << 16;
 #endif
 #endif
 #ifdef SAMBA_VERSION_VENDOR_PATCH
-	extended_info->samba_subversion |= (SAMBA_VERSION_VENDOR_PATCH & 0xffff);
+				extended_info->samba_subversion |= (SAMBA_VERSION_VENDOR_PATCH & 0xffff);
 #endif
-	extended_info->samba_gitcommitdate = 0;
+				extended_info->samba_subversion = 0;
 #ifdef SAMBA_VERSION_GIT_COMMIT_TIME
-	unix_to_nt_time(&extended_info->samba_gitcommitdate, SAMBA_VERSION_GIT_COMMIT_TIME);
+				unix_to_nt_time(&extended_info->samba_gitcommitdate, SAMBA_VERSION_GIT_COMMIT_TIME);
 #endif
 
-	memset(extended_info->samba_version_string, 0,
-	       sizeof(extended_info->samba_version_string));
+				memset(extended_info->samba_version_string, 0,
+							 sizeof(extended_info->samba_version_string));
 
-	snprintf (extended_info->samba_version_string,
-		  sizeof(extended_info->samba_version_string),
-		  "%s", samba_version_string());
+				snprintf (extended_info->samba_version_string,
+									sizeof(extended_info->samba_version_string),
+									"%s", samba_version_string());
 }
 
 /****************************************************************************
  Reply to a TRANS2_QFSINFO (query filesystem info).
 ****************************************************************************/
 
-static void call_trans2qfsinfo(connection_struct *conn,
-			       struct smb_request *req,
-			       char **pparams, int total_params,
-			       char **ppdata, int total_data,
-			       unsigned int max_data_bytes)
+static int call_trans2qfsinfo(connection_struct *conn, char *inbuf, char *outbuf, int length, int bufsize,
+					char **pparams, int total_params, char **ppdata, int total_data,
+					unsigned int max_data_bytes)
 {
-	char *pdata, *end_data;
+	char *pdata;
 	char *params = *pparams;
 	uint16 info_level;
 	int data_len, len;
@@ -2546,54 +2274,29 @@
 	const char *vname = volume_label(SNUM(conn));
 	int snum = SNUM(conn);
 	char *fstype = lp_fstype(SNUM(conn));
-	uint32 additional_flags = 0;
-	
+	int quota_flag = 0;
+
 	if (total_params < 2) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
+		return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 	}
 
 	info_level = SVAL(params,0);
 
-	if (IS_IPC(conn)) {
-		if (info_level != SMB_QUERY_CIFS_UNIX_INFO) {
-			DEBUG(0,("call_trans2qfsinfo: not an allowed "
-				"info level (0x%x) on IPC$.\n",
-				(unsigned int)info_level));
-			reply_nterror(req, NT_STATUS_ACCESS_DENIED);
-			return;
-		}
-	}
-
-	if (ENCRYPTION_REQUIRED(conn) && !req->encrypted) {
-		if (info_level != SMB_QUERY_CIFS_UNIX_INFO) {
-			DEBUG(0,("call_trans2qfsinfo: encryption required "
-				"and info level 0x%x sent.\n",
-				(unsigned int)info_level));
-			exit_server_cleanly("encryption required "
-				"on connection");
-			return;
-		}
-	}
-
 	DEBUG(3,("call_trans2qfsinfo: level = %d\n", info_level));
 
 	if(SMB_VFS_STAT(conn,".",&st)!=0) {
 		DEBUG(2,("call_trans2qfsinfo: stat of . failed (%s)\n", strerror(errno)));
-		reply_doserror(req, ERRSRV, ERRinvdevice);
-		return;
+		return ERROR_DOS(ERRSRV,ERRinvdevice);
 	}
 
 	*ppdata = (char *)SMB_REALLOC(
 		*ppdata, max_data_bytes + DIR_ENTRY_SAFETY_MARGIN);
 	if (*ppdata == NULL ) {
-		reply_nterror(req, NT_STATUS_NO_MEMORY);
-		return;
+		return ERROR_NT(NT_STATUS_NO_MEMORY);
 	}
 
 	pdata = *ppdata;
 	memset((char *)pdata,'\0',max_data_bytes + DIR_ENTRY_SAFETY_MARGIN);
-	end_data = pdata + max_data_bytes + DIR_ENTRY_SAFETY_MARGIN - 1;
 
 	switch (info_level) {
 		case SMB_INFO_ALLOCATION:
@@ -2601,8 +2304,7 @@
 			SMB_BIG_UINT dfree,dsize,bsize,block_size,sectors_per_unit,bytes_per_sector;
 			data_len = 18;
 			if (get_dfree_info(conn,".",False,&bsize,&dfree,&dsize) == (SMB_BIG_UINT)-1) {
-				reply_unixerror(req, ERRHRD, ERRgeneral);
-				return;
+				return(UNIXERROR(ERRHRD,ERRgeneral));
 			}
 
 			block_size = lp_block_size(snum);
@@ -2646,11 +2348,7 @@
 			 * this call so try fixing this by adding a terminating null to
 			 * the pushed string. The change here was adding the STR_TERMINATE. JRA.
 			 */
-			len = srvstr_push(
-				pdata, req->flags2,
-				pdata+l2_vol_szVolLabel, vname,
-				PTR_DIFF(end_data, pdata+l2_vol_szVolLabel),
-				STR_NOALIGN|STR_TERMINATE);
+			len = srvstr_push(outbuf, pdata+l2_vol_szVolLabel, vname, max_data_bytes - l2_vol_szVolLabel, STR_NOALIGN|STR_TERMINATE);
 			SCVAL(pdata,l2_vol_cch,len);
 			data_len = l2_vol_szVolLabel + len;
 			DEBUG(5,("call_trans2qfsinfo : time = %x, namelen = %d, name = %s\n",
@@ -2660,36 +2358,27 @@
 		case SMB_QUERY_FS_ATTRIBUTE_INFO:
 		case SMB_FS_ATTRIBUTE_INFORMATION:
 
-			additional_flags = 0;
+
 #if defined(HAVE_SYS_QUOTAS)
-			additional_flags |= FILE_VOLUME_QUOTAS;
+			quota_flag = FILE_VOLUME_QUOTAS;
 #endif
 
-			if(lp_nt_acl_support(SNUM(conn))) {
-				additional_flags |= FILE_PERSISTENT_ACLS;
-			}
-
-			/* Capabilities are filled in at connection time through STATVFS call */
-			additional_flags |= conn->fs_capabilities;
-
 			SIVAL(pdata,0,FILE_CASE_PRESERVED_NAMES|FILE_CASE_SENSITIVE_SEARCH|
-				FILE_SUPPORTS_OBJECT_IDS|FILE_UNICODE_ON_DISK|
-				additional_flags); /* FS ATTRIBUTES */
+				(lp_nt_acl_support(SNUM(conn)) ? FILE_PERSISTENT_ACLS : 0)|
+			        FILE_UNICODE_ON_DISK|
+				quota_flag); /* FS ATTRIBUTES */
 
 			SIVAL(pdata,4,255); /* Max filename component length */
 			/* NOTE! the fstype must *not* be null terminated or win98 won't recognise it
 				and will think we can't do long filenames */
-			len = srvstr_push(pdata, req->flags2, pdata+12, fstype,
-					  PTR_DIFF(end_data, pdata+12),
-					  STR_UNICODE);
+			len = srvstr_push(outbuf, pdata+12, fstype, max_data_bytes - 12, STR_UNICODE);
 			SIVAL(pdata,8,len);
 			data_len = 12 + len;
 			break;
 
 		case SMB_QUERY_FS_LABEL_INFO:
 		case SMB_FS_LABEL_INFORMATION:
-			len = srvstr_push(pdata, req->flags2, pdata+4, vname,
-					  PTR_DIFF(end_data, pdata+4), 0);
+			len = srvstr_push(outbuf, pdata+4, vname, max_data_bytes - 4, 0);
 			data_len = 4 + len;
 			SIVAL(pdata,0,len);
 			break;
@@ -2705,9 +2394,7 @@
 				(str_checksum(get_local_machine_name())<<16));
 
 			/* Max label len is 32 characters. */
-			len = srvstr_push(pdata, req->flags2, pdata+18, vname,
-					  PTR_DIFF(end_data, pdata+18),
-					  STR_UNICODE);
+			len = srvstr_push(outbuf, pdata+18, vname, max_data_bytes - 18, STR_UNICODE);
 			SIVAL(pdata,12,len);
 			data_len = 18+len;
 
@@ -2721,8 +2408,7 @@
 			SMB_BIG_UINT dfree,dsize,bsize,block_size,sectors_per_unit,bytes_per_sector;
 			data_len = 24;
 			if (get_dfree_info(conn,".",False,&bsize,&dfree,&dsize) == (SMB_BIG_UINT)-1) {
-				reply_unixerror(req, ERRHRD, ERRgeneral);
-				return;
+				return(UNIXERROR(ERRHRD,ERRgeneral));
 			}
 			block_size = lp_block_size(snum);
 			if (bsize < block_size) {
@@ -2754,8 +2440,7 @@
 			SMB_BIG_UINT dfree,dsize,bsize,block_size,sectors_per_unit,bytes_per_sector;
 			data_len = 32;
 			if (get_dfree_info(conn,".",False,&bsize,&dfree,&dsize) == (SMB_BIG_UINT)-1) {
-				reply_unixerror(req, ERRHRD, ERRgeneral);
-				return;
+				return(UNIXERROR(ERRHRD,ERRgeneral));
 			}
 			block_size = lp_block_size(snum);
 			if (bsize < block_size) {
@@ -2828,14 +2513,12 @@
 			if (current_user.ut.uid != 0) {
 				DEBUG(0,("set_user_quota: access_denied service [%s] user [%s]\n",
 					lp_servicename(SNUM(conn)),conn->user));
-				reply_doserror(req, ERRDOS, ERRnoaccess);
-				return;
+				return ERROR_DOS(ERRDOS,ERRnoaccess);
 			}
 			
 			if (vfs_get_ntquota(&fsp, SMB_USER_FS_QUOTA_TYPE, NULL, &quotas)!=0) {
 				DEBUG(0,("vfs_get_ntquota() failed for service [%s]\n",lp_servicename(SNUM(conn))));
-				reply_doserror(req, ERRSRV, ERRerror);
-				return;
+				return ERROR_DOS(ERRSRV,ERRerror);
 			}
 
 			data_len = 48;
@@ -2865,9 +2548,10 @@
 #endif /* HAVE_SYS_QUOTAS */
 		case SMB_FS_OBJECTID_INFORMATION:
 		{
-			unsigned char objid[16];
+			/*
+			 * No object id, but we transmit version information.
+			 */
 			struct smb_extended_info extended_info;
-			memcpy(pdata,create_volume_objectid(conn, objid),16);
 			samba_extended_info_version (&extended_info);
 			SIVAL(pdata,16,extended_info.samba_magic);
 			SIVAL(pdata,20,extended_info.samba_version);
@@ -2884,52 +2568,20 @@
 		 */
 
 		case SMB_QUERY_CIFS_UNIX_INFO:
-		{
-			bool large_write = lp_min_receive_file_size() &&
-						!srv_is_signing_active();
-			bool large_read = !srv_is_signing_active();
-			int encrypt_caps = 0;
-
 			if (!lp_unix_extensions()) {
-				reply_nterror(req, NT_STATUS_INVALID_LEVEL);
-				return;
+				return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 			}
-
-			switch (conn->encrypt_level) {
-			case 0:
-				encrypt_caps = 0;
-				break;
-			case 1:
-			case Auto:
-				encrypt_caps = CIFS_UNIX_TRANSPORT_ENCRYPTION_CAP;
-				break;
-			case Required:
-				encrypt_caps = CIFS_UNIX_TRANSPORT_ENCRYPTION_CAP|
-						CIFS_UNIX_TRANSPORT_ENCRYPTION_MANDATORY_CAP;
-				large_write = false;
-				large_read = false;
-				break;
-			}
-
 			data_len = 12;
 			SSVAL(pdata,0,CIFS_UNIX_MAJOR_VERSION);
 			SSVAL(pdata,2,CIFS_UNIX_MINOR_VERSION);
-
-			/* We have POSIX ACLs, pathname, encryption, 
-			 * large read/write, and locking capability. */
-
+			/* We have POSIX ACLs, pathname and locking capability. */
 			SBIG_UINT(pdata,4,((SMB_BIG_UINT)(
 					CIFS_UNIX_POSIX_ACLS_CAP|
 					CIFS_UNIX_POSIX_PATHNAMES_CAP|
 					CIFS_UNIX_FCNTL_LOCKS_CAP|
 					CIFS_UNIX_EXTATTR_CAP|
-					CIFS_UNIX_POSIX_PATH_OPERATIONS_CAP|
-					encrypt_caps|
-					(large_read ? CIFS_UNIX_LARGE_READ_CAP : 0) |
-					(large_write ?
-					CIFS_UNIX_LARGE_WRITE_CAP : 0))));
+					CIFS_UNIX_POSIX_PATH_OPERATIONS_CAP)));
 			break;
-		}
 
 		case SMB_QUERY_POSIX_FS_INFO:
 		{
@@ -2937,8 +2589,7 @@
 			vfs_statvfs_struct svfs;
 
 			if (!lp_unix_extensions()) {
-				reply_nterror(req, NT_STATUS_INVALID_LEVEL);
-				return;
+				return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 			}
 
 			rc = SMB_VFS_STATVFS(conn, ".", &svfs);
@@ -2956,13 +2607,11 @@
 				DEBUG(5,("call_trans2qfsinfo : SMB_QUERY_POSIX_FS_INFO succsessful\n"));
 #ifdef EOPNOTSUPP
 			} else if (rc == EOPNOTSUPP) {
-				reply_nterror(req, NT_STATUS_INVALID_LEVEL);
-				return;
+				return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 #endif /* EOPNOTSUPP */
 			} else {
 				DEBUG(0,("vfs_statvfs() failed for service [%s]\n",lp_servicename(SNUM(conn))));
-				reply_doserror(req, ERRSRV, ERRerror);
-				return;
+				return ERROR_DOS(ERRSRV,ERRerror);
 			}
 			break;
 		}
@@ -2974,13 +2623,11 @@
 			int i;
 
 			if (!lp_unix_extensions()) {
-				reply_nterror(req, NT_STATUS_INVALID_LEVEL);
-				return;
+				return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 			}
 
 			if (max_data_bytes < 40) {
-				reply_nterror(req, NT_STATUS_BUFFER_TOO_SMALL);
-				return;
+				return ERROR_NT(NT_STATUS_BUFFER_TOO_SMALL);
 			}
 
 			/* We ARE guest if global_sid_Builtin_Guests is
@@ -3045,8 +2692,8 @@
 			 */
 			for (i = 0, sid_bytes = 0;
 			    i < current_user.nt_user_token->num_sids; ++i) {
-				sid_bytes += ndr_size_dom_sid(
-					&current_user.nt_user_token->user_sids[i], 0);
+				sid_bytes +=
+				    sid_size(&current_user.nt_user_token->user_sids[i]);
 			}
 
 			/* SID list byte count */
@@ -3066,8 +2713,8 @@
 			/* SID list */
 			for (i = 0;
 			    i < current_user.nt_user_token->num_sids; ++i) {
-				int sid_len = ndr_size_dom_sid(
-					&current_user.nt_user_token->user_sids[i], 0);
+				int sid_len =
+				    sid_size(&current_user.nt_user_token->user_sids[i]);
 
 				sid_linearize(pdata + data_len, sid_len,
 				    &current_user.nt_user_token->user_sids[i]);
@@ -3089,33 +2736,29 @@
 			}
 			/* drop through */
 		default:
-			reply_nterror(req, NT_STATUS_INVALID_LEVEL);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 	}
 
 
-	send_trans2_replies(conn, req, params, 0, pdata, data_len,
-			    max_data_bytes);
+	send_trans2_replies( outbuf, bufsize, params, 0, pdata, data_len, max_data_bytes);
 
-	DEBUG( 4, ( "%s info_level = %d\n",
-		    smb_fn_name(CVAL(req->inbuf,smb_com)), info_level) );
+	DEBUG( 4, ( "%s info_level = %d\n", smb_fn_name(CVAL(inbuf,smb_com)), info_level) );
 
-	return;
+	return -1;
 }
 
 /****************************************************************************
  Reply to a TRANS2_SETFSINFO (set filesystem info).
 ****************************************************************************/
 
-static void call_trans2setfsinfo(connection_struct *conn,
-				 struct smb_request *req,
-				 char **pparams, int total_params,
-				 char **ppdata, int total_data,
-				 unsigned int max_data_bytes)
+static int call_trans2setfsinfo(connection_struct *conn, char *inbuf, char *outbuf, int length, int bufsize,
+					char **pparams, int total_params, char **ppdata, int total_data,
+					unsigned int max_data_bytes)
 {
 	char *pdata = *ppdata;
 	char *params = *pparams;
 	uint16 info_level;
+	int outsize;
 
 	DEBUG(10,("call_trans2setfsinfo: for service [%s]\n",lp_servicename(SNUM(conn))));
 
@@ -3123,34 +2766,11 @@
 	if (total_params < 4) {
 		DEBUG(0,("call_trans2setfsinfo: requires total_params(%d) >= 4 bytes!\n",
 			total_params));
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
+		return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 	}
 
 	info_level = SVAL(params,2);
 
-	if (IS_IPC(conn)) {
-		if (info_level != SMB_REQUEST_TRANSPORT_ENCRYPTION &&
-				info_level != SMB_SET_CIFS_UNIX_INFO) {
-			DEBUG(0,("call_trans2setfsinfo: not an allowed "
-				"info level (0x%x) on IPC$.\n",
-				(unsigned int)info_level));
-			reply_nterror(req, NT_STATUS_ACCESS_DENIED);
-			return;
-		}
-	}
-
-	if (ENCRYPTION_REQUIRED(conn) && !req->encrypted) {
-		if (info_level != SMB_REQUEST_TRANSPORT_ENCRYPTION) {
-			DEBUG(0,("call_trans2setfsinfo: encryption required "
-				"and info level 0x%x sent.\n",
-				(unsigned int)info_level));
-			exit_server_cleanly("encryption required "
-				"on connection");
-			return;
-		}
-	}
-
 	switch(info_level) {
 		case SMB_SET_CIFS_UNIX_INFO:
 			{
@@ -3160,17 +2780,12 @@
 				uint32 client_unix_cap_high;
 
 				if (!lp_unix_extensions()) {
-					reply_nterror(req,
-						      NT_STATUS_INVALID_LEVEL);
-					return;
+					return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 				}
 
 				/* There should be 12 bytes of capabilities set. */
 				if (total_data < 8) {
-					reply_nterror(
-						req,
-						NT_STATUS_INVALID_PARAMETER);
-					return;
+					return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 				}
 				client_unix_major = SVAL(pdata,0);
 				client_unix_minor = SVAL(pdata,2);
@@ -3201,62 +2816,6 @@
 				}
 				break;
 			}
-
-		case SMB_REQUEST_TRANSPORT_ENCRYPTION:
-			{
-				NTSTATUS status;
-				size_t param_len = 0;
-				size_t data_len = total_data;
-
-				if (!lp_unix_extensions()) {
-					reply_nterror(
-						req,
-						NT_STATUS_INVALID_LEVEL);
-					return;
-				}
-
-				if (lp_smb_encrypt(SNUM(conn)) == false) {
-					reply_nterror(
-						req,
-						NT_STATUS_NOT_SUPPORTED);
-					return;
-				}
-
-				DEBUG( 4,("call_trans2setfsinfo: "
-					"request transport encryption.\n"));
-
-				status = srv_request_encryption_setup(conn,
-								(unsigned char **)ppdata,
-								&data_len,
-								(unsigned char **)pparams,
-								&param_len);
-
-				if (!NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED) &&
-						!NT_STATUS_IS_OK(status)) {
-					reply_nterror(req, status);
-					return;
-				}
-
-				send_trans2_replies(conn, req,
-						*pparams,
-						param_len,
-						*ppdata,
-						data_len,
-						max_data_bytes);
-
-				if (NT_STATUS_IS_OK(status)) {
-					/* Server-side transport
-					 * encryption is now *on*. */
-					status = srv_encryption_start(conn);
-					if (!NT_STATUS_IS_OK(status)) {
-						exit_server_cleanly(
-							"Failure in setting "
-							"up encrypted transport");
-					}
-				}
-				return;
-			}
-
 		case SMB_FS_QUOTA_INFORMATION:
 			{
 				files_struct *fsp = NULL;
@@ -3268,29 +2827,23 @@
 				if ((current_user.ut.uid != 0)||!CAN_WRITE(conn)) {
 					DEBUG(0,("set_user_quota: access_denied service [%s] user [%s]\n",
 						lp_servicename(SNUM(conn)),conn->user));
-					reply_doserror(req, ERRSRV, ERRaccess);
-					return;
+					return ERROR_DOS(ERRSRV,ERRaccess);
 				}
 
 				/* note: normaly there're 48 bytes,
 				 * but we didn't use the last 6 bytes for now 
 				 * --metze 
 				 */
-				fsp = file_fsp(SVAL(params,0));
+				fsp = file_fsp(params,0);
 				if (!CHECK_NTQUOTA_HANDLE_OK(fsp,conn)) {
 					DEBUG(3,("TRANSACT_GET_USER_QUOTA: no valid QUOTA HANDLE\n"));
-					reply_nterror(
-						req, NT_STATUS_INVALID_HANDLE);
-					return;
+					return ERROR_NT(NT_STATUS_INVALID_HANDLE);
 				}
 
 				if (total_data < 42) {
 					DEBUG(0,("call_trans2setfsinfo: SET_FS_QUOTA: requires total_data(%d) >= 42 bytes!\n",
 						total_data));
-					reply_nterror(
-						req,
-						NT_STATUS_INVALID_PARAMETER);
-					return;
+					return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 				}
 			
 				/* unknown_1 24 NULL bytes in pdata*/
@@ -3304,10 +2857,7 @@
 					((quotas.softlim != 0xFFFFFFFF)||
 					(IVAL(pdata,28)!=0xFFFFFFFF))) {
 					/* more than 32 bits? */
-					reply_nterror(
-						req,
-						NT_STATUS_INVALID_PARAMETER);
-					return;
+					return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 				}
 #endif /* LARGE_SMB_OFF_T */
 		
@@ -3320,10 +2870,7 @@
 					((quotas.hardlim != 0xFFFFFFFF)||
 					(IVAL(pdata,36)!=0xFFFFFFFF))) {
 					/* more than 32 bits? */
-					reply_nterror(
-						req,
-						NT_STATUS_INVALID_PARAMETER);
-					return;
+					return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 				}
 #endif /* LARGE_SMB_OFF_T */
 		
@@ -3335,8 +2882,7 @@
 				/* now set the quotas */
 				if (vfs_set_ntquota(fsp, SMB_USER_FS_QUOTA_TYPE, NULL, &quotas)!=0) {
 					DEBUG(0,("vfs_set_ntquota() failed for service [%s]\n",lp_servicename(SNUM(conn))));
-					reply_doserror(req, ERRSRV, ERRerror);
-					return;
+					return ERROR_DOS(ERRSRV,ERRerror);
 				}
 			
 				break;
@@ -3344,8 +2890,7 @@
 		default:
 			DEBUG(3,("call_trans2setfsinfo: unknown level (0x%X) not implemented yet.\n",
 				info_level));
-			reply_nterror(req, NT_STATUS_INVALID_LEVEL);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 			break;
 	}
 
@@ -3354,8 +2899,10 @@
 	 * but I'm not sure it's the same 
 	 * like windows do...
 	 * --metze
-	 */
-	reply_outbuf(req, 10, 0);
+	 */ 
+	outsize = set_message(outbuf,10,0,True);
+
+	return outsize;
 }
 
 #if defined(HAVE_POSIX_ACLS)
@@ -3383,7 +2930,7 @@
  Utility function to marshall a POSIX acl into wire format.
 ****************************************************************************/
 
-static bool marshall_posix_acl(connection_struct *conn, char *pdata, SMB_STRUCT_STAT *pst, SMB_ACL_T posix_acl)
+static BOOL marshall_posix_acl(connection_struct *conn, char *pdata, SMB_STRUCT_STAT *pst, SMB_ACL_T posix_acl)
 {
 	int entry_id = SMB_ACL_FIRST_ENTRY;
 	SMB_ACL_ENTRY_T entry;
@@ -3427,7 +2974,6 @@
 					uid_t *puid = (uid_t *)SMB_VFS_SYS_ACL_GET_QUALIFIER(conn, entry);
 					if (!puid) {
 						DEBUG(0,("marshall_posix_acl: SMB_VFS_SYS_ACL_GET_QUALIFIER failed.\n"));
-						return False;
 					}
 					own_grp = (unsigned int)*puid;
 					SMB_VFS_SYS_ACL_FREE_QUALIFIER(conn, (void *)puid,tagtype);
@@ -3447,7 +2993,6 @@
 					gid_t *pgid= (gid_t *)SMB_VFS_SYS_ACL_GET_QUALIFIER(conn, entry);
 					if (!pgid) {
 						DEBUG(0,("marshall_posix_acl: SMB_VFS_SYS_ACL_GET_QUALIFIER failed.\n"));
-						return False;
 					}
 					own_grp = (unsigned int)*pgid;
 					SMB_VFS_SYS_ACL_FREE_QUALIFIER(conn, (void *)pgid,tagtype);
@@ -3538,7 +3083,7 @@
  *
  * XXX: this really should be behind the VFS interface. To do this, we would
  * need to alter SMB_STRUCT_STAT so that it included a flags and a mask field.
- * Each VFS module could then implement its own mapping as appropriate for the
+ * Each VFS module could then implement it's own mapping as appropriate for the
  * platform. We would then pass the SMB flags into SMB_VFS_CHFLAGS.
  */
 static const struct {unsigned stat_fflag; unsigned smb_fflag;}
@@ -3582,7 +3127,7 @@
 #endif /* HAVE_STAT_ST_FLAGS */
 }
 
-static bool map_info2_flags_to_sbuf(const SMB_STRUCT_STAT *psbuf,
+static BOOL map_info2_flags_to_sbuf(const SMB_STRUCT_STAT *psbuf,
 				const uint32 smb_fflags,
 				const uint32 smb_fmask,
 				int *stat_fflags)
@@ -3648,158 +3193,18 @@
 	return pdata;
 }
 
-static NTSTATUS marshall_stream_info(unsigned int num_streams,
-				     const struct stream_struct *streams,
-				     char *data,
-				     unsigned int max_data_bytes,
-				     unsigned int *data_size)
-{
-	unsigned int i;
-	unsigned int ofs = 0;
-
-	for (i=0; i<num_streams; i++) {
-		unsigned int next_offset;
-		size_t namelen;
-		smb_ucs2_t *namebuf;
-
-		namelen = push_ucs2_talloc(talloc_tos(), &namebuf,
-					    streams[i].name);
-
-		if ((namelen == (size_t)-1) || (namelen <= 2)) {
-			return NT_STATUS_INVALID_PARAMETER;
-		}
-
-		/*
-		 * name_buf is now null-terminated, we need to marshall as not
-		 * terminated
-		 */
-
-		namelen -= 2;
-
-		if (ofs + 24 + namelen > max_data_bytes) {
-			TALLOC_FREE(namebuf);
-			return NT_STATUS_BUFFER_TOO_SMALL;
-		}
-
-		SIVAL(data, ofs+4, namelen);
-		SOFF_T(data, ofs+8, streams[i].size);
-		SOFF_T(data, ofs+16, streams[i].alloc_size);
-		memcpy(data+ofs+24, namebuf, namelen);
-		TALLOC_FREE(namebuf);
-
-		next_offset = ofs + 24 + namelen;
-
-		if (i == num_streams-1) {
-			SIVAL(data, ofs, 0);
-		}
-		else {
-			unsigned int align = ndr_align_size(next_offset, 8);
-
-			if (next_offset + align > max_data_bytes) {
-				return NT_STATUS_BUFFER_TOO_SMALL;
-			}
-
-			memset(data+next_offset, 0, align);
-			next_offset += align;
-
-			SIVAL(data, ofs, next_offset - ofs);
-			ofs = next_offset;
-		}
-
-		ofs = next_offset;
-	}
-
-	*data_size = ofs;
-
-	return NT_STATUS_OK;
-}
-
 /****************************************************************************
- Reply to a TRANSACT2_QFILEINFO on a PIPE !
-****************************************************************************/
-
-static void call_trans2qpipeinfo(connection_struct *conn,
-				 struct smb_request *req,
-				 unsigned int tran_call,
-				 char **pparams, int total_params,
-				 char **ppdata, int total_data,
-				 unsigned int max_data_bytes)
-{
-	char *params = *pparams;
-	char *pdata = *ppdata;
-	unsigned int data_size = 0;
-	unsigned int param_size = 2;
-	uint16 info_level;
-	smb_np_struct *p_pipe = NULL;
-
-	if (!params) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
-	}
-
-	if (total_params < 4) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
-	}
-
-	p_pipe = get_rpc_pipe_p(SVAL(params,0));
-	if (p_pipe == NULL) {
-		reply_nterror(req, NT_STATUS_INVALID_HANDLE);
-		return;
-	}
-
-	info_level = SVAL(params,2);
-
-	*pparams = (char *)SMB_REALLOC(*pparams,2);
-	if (*pparams == NULL) {
-		reply_nterror(req, NT_STATUS_NO_MEMORY);
-		return;
-	}
-	params = *pparams;
-	SSVAL(params,0,0);
-	data_size = max_data_bytes + DIR_ENTRY_SAFETY_MARGIN;
-	*ppdata = (char *)SMB_REALLOC(*ppdata, data_size); 
-	if (*ppdata == NULL ) {
-		reply_nterror(req, NT_STATUS_NO_MEMORY);
-		return;
-	}
-	pdata = *ppdata;
-
-	switch (info_level) {
-		case SMB_FILE_STANDARD_INFORMATION:
-			memset(pdata,0,24);
-			SOFF_T(pdata,0,4096LL);
-			SIVAL(pdata,16,1);
-			SIVAL(pdata,20,1);
-			data_size = 24;
-			break;
-
-		default:
-			reply_nterror(req, NT_STATUS_INVALID_LEVEL);
-			return;
-	}
-
-	send_trans2_replies(conn, req, params, param_size, *ppdata, data_size,
-			    max_data_bytes);
-
-	return;
-}
-
-/****************************************************************************
  Reply to a TRANS2_QFILEPATHINFO or TRANSACT2_QFILEINFO (query file info by
  file name or file id).
 ****************************************************************************/
 
-static void call_trans2qfilepathinfo(connection_struct *conn,
-				     struct smb_request *req,
-				     unsigned int tran_call,
-				     char **pparams, int total_params,
-				     char **ppdata, int total_data,
-				     unsigned int max_data_bytes)
+static int call_trans2qfilepathinfo(connection_struct *conn, char *inbuf, char *outbuf, int length, int bufsize,
+					unsigned int tran_call,
+					char **pparams, int total_params, char **ppdata, int total_data,
+					unsigned int max_data_bytes)
 {
 	char *params = *pparams;
 	char *pdata = *ppdata;
-	char *dstart, *dend;
 	uint16 info_level;
 	int mode=0;
 	int nlink;
@@ -3808,123 +3213,90 @@
 	unsigned int data_size = 0;
 	unsigned int param_size = 2;
 	SMB_STRUCT_STAT sbuf;
-	char *dos_fname = NULL;
-	char *fname = NULL;
+	pstring fname, dos_fname;
 	char *fullpathname;
 	char *base_name;
 	char *p;
 	SMB_OFF_T pos = 0;
-	bool delete_pending = False;
+	BOOL delete_pending = False;
 	int len;
 	time_t create_time, mtime, atime;
 	struct timespec create_time_ts, mtime_ts, atime_ts;
-	struct timespec write_time_ts;
 	files_struct *fsp = NULL;
-	struct file_id fileid;
+	TALLOC_CTX *data_ctx = NULL;
 	struct ea_list *ea_list = NULL;
 	uint32 access_mask = 0x12019F; /* Default - GENERIC_EXECUTE mapping from Windows */
 	char *lock_data = NULL;
-	bool ms_dfs_link = false;
-	TALLOC_CTX *ctx = talloc_tos();
 
-	if (!params) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
-	}
+	if (!params)
+		return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 
 	ZERO_STRUCT(sbuf);
-	ZERO_STRUCT(write_time_ts);
 
 	if (tran_call == TRANSACT2_QFILEINFO) {
 		if (total_params < 4) {
-			reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 		}
 
-		if (IS_IPC(conn)) {
-			call_trans2qpipeinfo(conn, req,	tran_call,
-					     pparams, total_params,
-					     ppdata, total_data,
-					     max_data_bytes);
-			return;
-		}
-
-		fsp = file_fsp(SVAL(params,0));
+		fsp = file_fsp(params,0);
 		info_level = SVAL(params,2);
 
 		DEBUG(3,("call_trans2qfilepathinfo: TRANSACT2_QFILEINFO: level = %d\n", info_level));
 
 		if (INFO_LEVEL_IS_UNIX(info_level) && !lp_unix_extensions()) {
-			reply_nterror(req, NT_STATUS_INVALID_LEVEL);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 		}
 
-		/* Initial check for valid fsp ptr. */
-		if (!check_fsp_open(conn, req, fsp, &current_user)) {
-			return;
-		}
-
-		fname = talloc_strdup(talloc_tos(),fsp->fsp_name);
-		if (!fname) {
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
-			return;
-		}
-
-		if(fsp->fake_file_handle) {
+		if(fsp && (fsp->fake_file_handle)) {
 			/*
 			 * This is actually for the QUOTA_FAKE_FILE --metze
 			 */
-
+						
+			pstrcpy(fname, fsp->fsp_name);
 			/* We know this name is ok, it's already passed the checks. */
-
+			
 		} else if(fsp && (fsp->is_directory || fsp->fh->fd == -1)) {
 			/*
 			 * This is actually a QFILEINFO on a directory
 			 * handle (returned from an NT SMB). NT5.0 seems
 			 * to do this call. JRA.
 			 */
-
+			/* We know this name is ok, it's already passed the checks. */
+			pstrcpy(fname, fsp->fsp_name);
+		  
 			if (INFO_LEVEL_IS_UNIX(info_level)) {
 				/* Always do lstat for UNIX calls. */
 				if (SMB_VFS_LSTAT(conn,fname,&sbuf)) {
 					DEBUG(3,("call_trans2qfilepathinfo: SMB_VFS_LSTAT of %s failed (%s)\n",fname,strerror(errno)));
-					reply_unixerror(req,ERRDOS,ERRbadpath);
-					return;
+					return UNIXERROR(ERRDOS,ERRbadpath);
 				}
 			} else if (SMB_VFS_STAT(conn,fname,&sbuf)) {
 				DEBUG(3,("call_trans2qfilepathinfo: SMB_VFS_STAT of %s failed (%s)\n",fname,strerror(errno)));
-				reply_unixerror(req, ERRDOS, ERRbadpath);
-				return;
+				return UNIXERROR(ERRDOS,ERRbadpath);
 			}
 
-			fileid = vfs_file_id_from_sbuf(conn, &sbuf);
-			get_file_infos(fileid, &delete_pending, &write_time_ts);
+			delete_pending = get_delete_on_close_flag(sbuf.st_dev, sbuf.st_ino);
 		} else {
 			/*
 			 * Original code - this is an open file.
 			 */
-			if (!check_fsp(conn, req, fsp, &current_user)) {
-				return;
-			}
+			CHECK_FSP(fsp,conn);
 
-			if (SMB_VFS_FSTAT(fsp, &sbuf) != 0) {
+			pstrcpy(fname, fsp->fsp_name);
+			if (SMB_VFS_FSTAT(fsp,fsp->fh->fd,&sbuf) != 0) {
 				DEBUG(3,("fstat of fnum %d failed (%s)\n", fsp->fnum, strerror(errno)));
-				reply_unixerror(req, ERRDOS, ERRbadfid);
-				return;
+				return(UNIXERROR(ERRDOS,ERRbadfid));
 			}
 			pos = fsp->fh->position_information;
-			fileid = vfs_file_id_from_sbuf(conn, &sbuf);
-			get_file_infos(fileid, &delete_pending, &write_time_ts);
+			delete_pending = get_delete_on_close_flag(sbuf.st_dev, sbuf.st_ino);
 			access_mask = fsp->access_mask;
 		}
-
 	} else {
 		NTSTATUS status = NT_STATUS_OK;
 
 		/* qpathinfo */
 		if (total_params < 7) {
-			reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 		}
 
 		info_level = SVAL(params,0);
@@ -3932,90 +3304,63 @@
 		DEBUG(3,("call_trans2qfilepathinfo: TRANSACT2_QPATHINFO: level = %d\n", info_level));
 
 		if (INFO_LEVEL_IS_UNIX(info_level) && !lp_unix_extensions()) {
-			reply_nterror(req, NT_STATUS_INVALID_LEVEL);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 		}
 
-		srvstr_get_path(ctx, params, req->flags2, &fname, &params[6],
-				total_params - 6,
-				STR_TERMINATE, &status);
+		srvstr_get_path(inbuf, fname, &params[6], sizeof(fname), total_params - 6, STR_TERMINATE, &status);
 		if (!NT_STATUS_IS_OK(status)) {
-			reply_nterror(req, status);
-			return;
+			return ERROR_NT(status);
 		}
 
-		status = resolve_dfspath(ctx,
-					conn,
-					req->flags2 & FLAGS2_DFS_PATHNAMES,
-					fname,
-					&fname);
+		status = resolve_dfspath(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, fname);
 		if (!NT_STATUS_IS_OK(status)) {
 			if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
-				reply_botherror(req,
-						NT_STATUS_PATH_NOT_COVERED,
-						ERRSRV, ERRbadpath);
+				return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, ERRbadpath);
 			}
-			reply_nterror(req, status);
-			return;
+			return ERROR_NT(status);
 		}
 
-		status = unix_convert(ctx, conn, fname, False, &fname, NULL, &sbuf);
+		status = unix_convert(conn, fname, False, NULL, &sbuf);
 		if (!NT_STATUS_IS_OK(status)) {
-			reply_nterror(req, status);
-			return;
+			return ERROR_NT(status);
 		}
 		status = check_name(conn, fname);
 		if (!NT_STATUS_IS_OK(status)) {
 			DEBUG(3,("call_trans2qfilepathinfo: fileinfo of %s failed (%s)\n",fname,nt_errstr(status)));
-			reply_nterror(req, status);
-			return;
+			return ERROR_NT(status);
 		}
 
 		if (INFO_LEVEL_IS_UNIX(info_level)) {
 			/* Always do lstat for UNIX calls. */
 			if (SMB_VFS_LSTAT(conn,fname,&sbuf)) {
 				DEBUG(3,("call_trans2qfilepathinfo: SMB_VFS_LSTAT of %s failed (%s)\n",fname,strerror(errno)));
-				reply_unixerror(req, ERRDOS, ERRbadpath);
-				return;
+				return UNIXERROR(ERRDOS,ERRbadpath);
 			}
-
 		} else if (!VALID_STAT(sbuf) && SMB_VFS_STAT(conn,fname,&sbuf) && (info_level != SMB_INFO_IS_NAME_VALID)) {
-			ms_dfs_link = check_msdfs_link(conn,fname,&sbuf);
-
-			if (!ms_dfs_link) {
-				DEBUG(3,("call_trans2qfilepathinfo: SMB_VFS_STAT of %s failed (%s)\n",fname,strerror(errno)));
-				reply_unixerror(req, ERRDOS, ERRbadpath);
-				return;
-			}
+			DEBUG(3,("call_trans2qfilepathinfo: SMB_VFS_STAT of %s failed (%s)\n",fname,strerror(errno)));
+			return UNIXERROR(ERRDOS,ERRbadpath);
 		}
 
-		fileid = vfs_file_id_from_sbuf(conn, &sbuf);
-		get_file_infos(fileid, &delete_pending, &write_time_ts);
+		delete_pending = get_delete_on_close_flag(sbuf.st_dev, sbuf.st_ino);
 		if (delete_pending) {
-			reply_nterror(req, NT_STATUS_DELETE_PENDING);
-			return;
+			return ERROR_NT(NT_STATUS_DELETE_PENDING);
 		}
 	}
 
 	if (INFO_LEVEL_IS_UNIX(info_level) && !lp_unix_extensions()) {
-		reply_nterror(req, NT_STATUS_INVALID_LEVEL);
-		return;
+		return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 	}
 
 	DEBUG(3,("call_trans2qfilepathinfo %s (fnum = %d) level=%d call=%d total_data=%d\n",
 		fname,fsp ? fsp->fnum : -1, info_level,tran_call,total_data));
 
-	p = strrchr_m(fname,'/');
+	p = strrchr_m(fname,'/'); 
 	if (!p)
 		base_name = fname;
 	else
 		base_name = p+1;
 
-	if (ms_dfs_link) {
-		mode = dos_mode_msdfs(conn,fname,&sbuf);
-	} else {
-		mode = dos_mode(conn,fname,&sbuf);
-	}
+	mode = dos_mode(conn,fname,&sbuf);
 	if (!mode)
 		mode = FILE_ATTRIBUTE_NORMAL;
 
@@ -4041,32 +3386,29 @@
 			uint32 ea_size;
 
 			if (total_data < 4) {
-				reply_nterror(
-					req, NT_STATUS_INVALID_PARAMETER);
-				return;
+				return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 			}
 			ea_size = IVAL(pdata,0);
 
 			if (total_data > 0 && ea_size != total_data) {
 				DEBUG(4,("call_trans2qfilepathinfo: Rejecting EA request with incorrect \
 total_data=%u (should be %u)\n", (unsigned int)total_data, (unsigned int)IVAL(pdata,0) ));
-				reply_nterror(
-					req, NT_STATUS_INVALID_PARAMETER);
-				return;
+				return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 			}
 
 			if (!lp_ea_support(SNUM(conn))) {
-				reply_doserror(req, ERRDOS,
-					       ERReasnotsupported);
-				return;
+				return ERROR_DOS(ERRDOS,ERReasnotsupported);
 			}
 
+			if ((data_ctx = talloc_init("ea_list")) == NULL) {
+				return ERROR_NT(NT_STATUS_NO_MEMORY);
+			}
+
 			/* Pull out the list of names. */
-			ea_list = read_ea_name_list(ctx, pdata + 4, ea_size - 4);
+			ea_list = read_ea_name_list(data_ctx, pdata + 4, ea_size - 4);
 			if (!ea_list) {
-				reply_nterror(
-					req, NT_STATUS_INVALID_PARAMETER);
-				return;
+				talloc_destroy(data_ctx);
+				return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 			}
 			break;
 		}
@@ -4074,22 +3416,23 @@
 		case SMB_QUERY_POSIX_LOCK:
 		{
 			if (fsp == NULL || fsp->fh->fd == -1) {
-				reply_nterror(req, NT_STATUS_INVALID_HANDLE);
-				return;
+				return ERROR_NT(NT_STATUS_INVALID_HANDLE);
 			}
 
 			if (total_data != POSIX_LOCK_DATA_SIZE) {
-				reply_nterror(
-					req, NT_STATUS_INVALID_PARAMETER);
-				return;
+				return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 			}
 
+			if ((data_ctx = talloc_init("lock_request")) == NULL) {
+				return ERROR_NT(NT_STATUS_NO_MEMORY);
+			}
+
 			/* Copy the lock range data. */
 			lock_data = (char *)TALLOC_MEMDUP(
-				ctx, pdata, total_data);
+				data_ctx, pdata, total_data);
 			if (!lock_data) {
-				reply_nterror(req, NT_STATUS_NO_MEMORY);
-				return;
+				talloc_destroy(data_ctx);
+				return ERROR_NT(NT_STATUS_NO_MEMORY);
 			}
 		}
 		default:
@@ -4098,20 +3441,18 @@
 
 	*pparams = (char *)SMB_REALLOC(*pparams,2);
 	if (*pparams == NULL) {
-		reply_nterror(req, NT_STATUS_NO_MEMORY);
-		return;
+		talloc_destroy(data_ctx);
+		return ERROR_NT(NT_STATUS_NO_MEMORY);
 	}
 	params = *pparams;
 	SSVAL(params,0,0);
 	data_size = max_data_bytes + DIR_ENTRY_SAFETY_MARGIN;
 	*ppdata = (char *)SMB_REALLOC(*ppdata, data_size); 
 	if (*ppdata == NULL ) {
-		reply_nterror(req, NT_STATUS_NO_MEMORY);
-		return;
+		talloc_destroy(data_ctx);
+		return ERROR_NT(NT_STATUS_NO_MEMORY);
 	}
 	pdata = *ppdata;
-	dstart = pdata;
-	dend = dstart + data_size - 1;
 
 	create_time_ts = get_create_timespec(&sbuf,lp_fake_dir_create_times(SNUM(conn)));
 	mtime_ts = get_mtimespec(&sbuf);
@@ -4119,20 +3460,23 @@
 
 	allocation_size = get_allocation_size(conn,fsp,&sbuf);
 
-	if (!fsp) {
+	if (fsp) {
+		if (!null_timespec(fsp->pending_modtime)) {
+			/* the pending modtime overrides the current modtime */
+			mtime_ts = fsp->pending_modtime;
+		}
+	} else {
 		/* Do we have this path open ? */
-		files_struct *fsp1;
-		fileid = vfs_file_id_from_sbuf(conn, &sbuf);
-		fsp1 = file_find_di_first(fileid);
+		files_struct *fsp1 = file_find_di_first(sbuf.st_dev, sbuf.st_ino);
+		if (fsp1 && !null_timespec(fsp1->pending_modtime)) {
+			/* the pending modtime overrides the current modtime */
+			mtime_ts = fsp1->pending_modtime;
+		}
 		if (fsp1 && fsp1->initial_allocation_size) {
 			allocation_size = get_allocation_size(conn, fsp1, &sbuf);
 		}
 	}
 
-	if (!null_timespec(write_time_ts)) {
-		mtime_ts = write_time_ts;
-	}
-
 	if (lp_dos_filetime_resolution(SNUM(conn))) {
 		dos_filetime_timespec(&create_time_ts);
 		dos_filetime_timespec(&mtime_ts);
@@ -4145,20 +3489,10 @@
 
 	/* NT expects the name to be in an exact form of the *full*
 	   filename. See the trans2 torture test */
-	if (ISDOT(base_name)) {
-		dos_fname = talloc_strdup(ctx, "\\");
-		if (!dos_fname) {
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
-			return;
-		}
+	if (strequal(base_name,".")) {
+		pstrcpy(dos_fname, "\\");
 	} else {
-		dos_fname = talloc_asprintf(ctx,
-				"\\%s",
-				fname);
-		if (!dos_fname) {
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
-			return;
-		}
+		pstr_sprintf(dos_fname, "\\%s", fname);
 		string_replace(dos_fname, '/', '\\');
 	}
 
@@ -4192,14 +3526,13 @@
 		case SMB_INFO_IS_NAME_VALID:
 			DEBUG(10,("call_trans2qfilepathinfo: SMB_INFO_IS_NAME_VALID\n"));
 			if (tran_call == TRANSACT2_QFILEINFO) {
-				/* os/2 needs this ? really ?*/
-				reply_doserror(req, ERRDOS, ERRbadfunc);
-				return;
+				/* os/2 needs this ? really ?*/      
+				return ERROR_DOS(ERRDOS,ERRbadfunc); 
 			}
 			data_size = 0;
 			param_size = 0;
 			break;
-
+			
 		case SMB_INFO_QUERY_EAS_FROM_LIST:
 		{
 			size_t total_ea_len = 0;
@@ -4207,16 +3540,18 @@
 
 			DEBUG(10,("call_trans2qfilepathinfo: SMB_INFO_QUERY_EAS_FROM_LIST\n"));
 
-			ea_file_list = get_ea_list_from_file(ctx, conn, fsp, fname, &total_ea_len);
+			ea_file_list = get_ea_list_from_file(data_ctx, conn, fsp, fname, &total_ea_len);
 			ea_list = ea_list_union(ea_list, ea_file_list, &total_ea_len);
 
 			if (!ea_list || (total_ea_len > data_size)) {
+				talloc_destroy(data_ctx);
 				data_size = 4;
 				SIVAL(pdata,0,4);   /* EA List Length must be set to 4 if no EA's. */
 				break;
 			}
 
-			data_size = fill_ea_buffer(ctx, pdata, data_size, conn, ea_list);
+			data_size = fill_ea_buffer(data_ctx, pdata, data_size, conn, ea_list);
+			talloc_destroy(data_ctx);
 			break;
 		}
 
@@ -4227,14 +3562,21 @@
 
 			DEBUG(10,("call_trans2qfilepathinfo: SMB_INFO_QUERY_ALL_EAS\n"));
 
-			ea_list = get_ea_list_from_file(ctx, conn, fsp, fname, &total_ea_len);
+			data_ctx = talloc_init("ea_ctx");
+			if (!data_ctx) {
+				return ERROR_NT(NT_STATUS_NO_MEMORY);
+			}
+
+			ea_list = get_ea_list_from_file(data_ctx, conn, fsp, fname, &total_ea_len);
 			if (!ea_list || (total_ea_len > data_size)) {
+				talloc_destroy(data_ctx);
 				data_size = 4;
 				SIVAL(pdata,0,4);   /* EA List Length must be set to 4 if no EA's. */
 				break;
 			}
 
-			data_size = fill_ea_buffer(ctx, pdata, data_size, conn, ea_list);
+			data_size = fill_ea_buffer(data_ctx, pdata, data_size, conn, ea_list);
+			talloc_destroy(data_ctx);
 			break;
 		}
 
@@ -4290,18 +3632,15 @@
 		case SMB_QUERY_FILE_ALT_NAME_INFO:
 		case SMB_FILE_ALTERNATE_NAME_INFORMATION:
 		{
-			char mangled_name[13];
+			pstring short_name;
+
 			DEBUG(10,("call_trans2qfilepathinfo: SMB_FILE_ALTERNATE_NAME_INFORMATION\n"));
-			if (!name_to_8_3(base_name,mangled_name,
-						True,conn->params)) {
-				reply_nterror(
-					req,
-					NT_STATUS_NO_MEMORY);
+			pstrcpy(short_name,base_name);
+			/* Mangle if not already 8.3 */
+			if(!mangle_is_8_3(short_name, True, conn->params)) {
+				mangle_map(short_name,True,True,conn->params);
 			}
-			len = srvstr_push(dstart, req->flags2,
-					  pdata+4, mangled_name,
-					  PTR_DIFF(dend, pdata+4),
-					  STR_UNICODE);
+			len = srvstr_push(outbuf, pdata+4, short_name, max_data_bytes - 4, STR_UNICODE);
 			data_size = 4 + len;
 			SIVAL(pdata,0,len);
 			break;
@@ -4311,10 +3650,7 @@
 			/*
 			  this must be *exactly* right for ACLs on mapped drives to work
 			 */
-			len = srvstr_push(dstart, req->flags2,
-					  pdata+4, dos_fname,
-					  PTR_DIFF(dend, pdata+4),
-					  STR_UNICODE);
+			len = srvstr_push(outbuf, pdata+4, dos_fname, max_data_bytes - 4, STR_UNICODE);
 			DEBUG(10,("call_trans2qfilepathinfo: SMB_QUERY_FILE_NAME_INFO\n"));
 			data_size = 4 + len;
 			SIVAL(pdata,0,len);
@@ -4355,10 +3691,7 @@
 			pdata += 24;
 			SIVAL(pdata,0,ea_size);
 			pdata += 4; /* EA info */
-			len = srvstr_push(dstart, req->flags2,
-					  pdata+4, dos_fname,
-					  PTR_DIFF(dend, pdata+4),
-					  STR_UNICODE);
+			len = srvstr_push(outbuf, pdata+4, dos_fname, max_data_bytes - (pdata+4 - *ppdata), STR_UNICODE);
 			SIVAL(pdata,0,len);
 			pdata += 4 + len;
 			data_size = PTR_DIFF(pdata,(*ppdata));
@@ -4418,49 +3751,28 @@
 			data_size = 4;
 			break;
 
+#if 0
 		/*
-		 * NT4 server just returns "invalid query" to this - if we try
-		 * to answer it then NTws gets a BSOD! (tridge).  W2K seems to
-		 * want this. JRA.
+		 * NT4 server just returns "invalid query" to this - if we try to answer
+		 * it then NTws gets a BSOD! (tridge).
+		 * W2K seems to want this. JRA.
 		 */
-		/* The first statement above is false - verified using Thursby
-		 * client against NT4 -- gcolley.
-		 */
 		case SMB_QUERY_FILE_STREAM_INFO:
-		case SMB_FILE_STREAM_INFORMATION: {
-			unsigned int num_streams;
-			struct stream_struct *streams;
-			NTSTATUS status;
-
-			DEBUG(10,("call_trans2qfilepathinfo: "
-				  "SMB_FILE_STREAM_INFORMATION\n"));
-
-			status = SMB_VFS_STREAMINFO(
-				conn, fsp, fname, talloc_tos(),
-				&num_streams, &streams);
-
-			if (!NT_STATUS_IS_OK(status)) {
-				DEBUG(10, ("could not get stream info: %s\n",
-					   nt_errstr(status)));
-				reply_nterror(req, status);
-				return;
+#endif
+		case SMB_FILE_STREAM_INFORMATION:
+			DEBUG(10,("call_trans2qfilepathinfo: SMB_FILE_STREAM_INFORMATION\n"));
+			if (mode & aDIR) {
+				data_size = 0;
+			} else {
+				size_t byte_len = dos_PutUniCode(pdata+24,"::$DATA", (size_t)0xE, False);
+				SIVAL(pdata,0,0); /* ??? */
+				SIVAL(pdata,4,byte_len); /* Byte length of unicode string ::$DATA */
+				SOFF_T(pdata,8,file_size);
+				SOFF_T(pdata,16,allocation_size);
+				data_size = 24 + byte_len;
 			}
-
-			status = marshall_stream_info(num_streams, streams,
-						      pdata, max_data_bytes,
-						      &data_size);
-
-			if (!NT_STATUS_IS_OK(status)) {
-				DEBUG(10, ("marshall_stream_info failed: %s\n",
-					   nt_errstr(status)));
-				reply_nterror(req, status);
-				return;
-			}
-
-			TALLOC_FREE(streams);
-
 			break;
-		}
+
 		case SMB_QUERY_COMPRESSION_INFO:
 		case SMB_FILE_COMPRESSION_INFORMATION:
 			DEBUG(10,("call_trans2qfilepathinfo: SMB_FILE_COMPRESSION_INFORMATION\n"));
@@ -4528,36 +3840,20 @@
 
 		case SMB_QUERY_FILE_UNIX_LINK:
 			{
-				char *buffer = TALLOC_ARRAY(ctx, char, PATH_MAX+1);
+				pstring buffer;
 
-				if (!buffer) {
-					reply_nterror(req, NT_STATUS_NO_MEMORY);
-					return;
-				}
-
 				DEBUG(10,("call_trans2qfilepathinfo: SMB_QUERY_FILE_UNIX_LINK\n"));
 #ifdef S_ISLNK
-				if(!S_ISLNK(sbuf.st_mode)) {
-					reply_unixerror(req, ERRSRV,
-							ERRbadlink);
-					return;
-				}
+				if(!S_ISLNK(sbuf.st_mode))
+					return(UNIXERROR(ERRSRV,ERRbadlink));
 #else
-				reply_unixerror(req, ERRDOS, ERRbadlink);
-				return;
+				return(UNIXERROR(ERRDOS,ERRbadlink));
 #endif
-				len = SMB_VFS_READLINK(conn,fullpathname,
-						buffer, PATH_MAX);
-				if (len == -1) {
-					reply_unixerror(req, ERRDOS,
-							ERRnoaccess);
-					return;
-				}
+				len = SMB_VFS_READLINK(conn,fullpathname, buffer, sizeof(pstring)-1);     /* read link */
+				if (len == -1)
+					return(UNIXERROR(ERRDOS,ERRnoaccess));
 				buffer[len] = 0;
-				len = srvstr_push(dstart, req->flags2,
-						  pdata, buffer,
-						  PTR_DIFF(dend, pdata),
-						  STR_TERMINATE);
+				len = srvstr_push(outbuf, pdata, buffer, max_data_bytes, STR_TERMINATE);
 				pdata += len;
 				data_size = PTR_DIFF(pdata,(*ppdata));
 
@@ -4573,7 +3869,7 @@
 				uint16 num_def_acls = 0;
 
 				if (fsp && !fsp->is_directory && (fsp->fh->fd != -1)) {
-					file_acl = SMB_VFS_SYS_ACL_GET_FD(fsp);
+					file_acl = SMB_VFS_SYS_ACL_GET_FD(fsp, fsp->fh->fd);
 				} else {
 					file_acl = SMB_VFS_SYS_ACL_GET_FILE(conn, fname, SMB_ACL_TYPE_ACCESS);
 				}
@@ -4581,10 +3877,7 @@
 				if (file_acl == NULL && no_acl_syscall_error(errno)) {
 					DEBUG(5,("call_trans2qfilepathinfo: ACLs not implemented on filesystem containing %s\n",
 						fname ));
-					reply_nterror(
-						req,
-						NT_STATUS_NOT_IMPLEMENTED);
-					return;
+					return ERROR_NT(NT_STATUS_NOT_IMPLEMENTED);
 				}
 
 				if (S_ISDIR(sbuf.st_mode)) {
@@ -4610,10 +3903,7 @@
 					if (def_acl) {
 						SMB_VFS_SYS_ACL_FREE_ACL(conn, def_acl);
 					}
-					reply_nterror(
-						req,
-						NT_STATUS_BUFFER_TOO_SMALL);
-					return;
+					return ERROR_NT(NT_STATUS_BUFFER_TOO_SMALL);
 				}
 
 				SSVAL(pdata,0,SMB_POSIX_ACL_VERSION);
@@ -4626,9 +3916,7 @@
 					if (def_acl) {
 						SMB_VFS_SYS_ACL_FREE_ACL(conn, def_acl);
 					}
-					reply_nterror(
-						req, NT_STATUS_INTERNAL_ERROR);
-					return;
+					return ERROR_NT(NT_STATUS_INTERNAL_ERROR);
 				}
 				if (!marshall_posix_acl(conn, pdata + SMB_POSIX_ACL_HEADER_SIZE + (num_file_acls*SMB_POSIX_ACL_ENTRY_SIZE), &sbuf, def_acl)) {
 					if (file_acl) {
@@ -4637,10 +3925,7 @@
 					if (def_acl) {
 						SMB_VFS_SYS_ACL_FREE_ACL(conn, def_acl);
 					}
-					reply_nterror(
-						req,
-						NT_STATUS_INTERNAL_ERROR);
-					return;
+					return ERROR_NT(NT_STATUS_INTERNAL_ERROR);
 				}
 
 				if (file_acl) {
@@ -4664,9 +3949,7 @@
 			enum brl_type lock_type;
 
 			if (total_data != POSIX_LOCK_DATA_SIZE) {
-				reply_nterror(
-					req, NT_STATUS_INVALID_PARAMETER);
-				return;
+				return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 			}
 
 			switch (SVAL(pdata, POSIX_LOCK_TYPE_OFFSET)) {
@@ -4679,10 +3962,8 @@
 				case POSIX_LOCK_TYPE_UNLOCK:
 				default:
 					/* There's no point in asking for an unlock... */
-					reply_nterror(
-						req,
-						NT_STATUS_INVALID_PARAMETER);
-					return;
+					talloc_destroy(data_ctx);
+					return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 			}
 
 			lock_pid = IVAL(pdata, POSIX_LOCK_PID_OFFSET);
@@ -4727,21 +4008,18 @@
 				memcpy(pdata, lock_data, POSIX_LOCK_DATA_SIZE);
 				SSVAL(pdata, POSIX_LOCK_TYPE_OFFSET, POSIX_LOCK_TYPE_UNLOCK);
 			} else {
-				reply_nterror(req, status);
-				return;
+				return ERROR_NT(status);
 			}
 			break;
 		}
 
 		default:
-			reply_nterror(req, NT_STATUS_INVALID_LEVEL);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 	}
 
-	send_trans2_replies(conn, req, params, param_size, *ppdata, data_size,
-			    max_data_bytes);
+	send_trans2_replies(outbuf, bufsize, params, param_size, *ppdata, data_size, max_data_bytes);
 
-	return;
+	return(-1);
 }
 
 /****************************************************************************
@@ -4749,23 +4027,17 @@
  code.
 ****************************************************************************/
 
-NTSTATUS hardlink_internals(TALLOC_CTX *ctx,
-		connection_struct *conn,
-		const char *oldname_in,
-		const char *newname_in)
+NTSTATUS hardlink_internals(connection_struct *conn, pstring oldname, pstring newname)
 {
 	SMB_STRUCT_STAT sbuf1, sbuf2;
-	char *last_component_oldname = NULL;
-	char *last_component_newname = NULL;
-	char *oldname = NULL;
-	char *newname = NULL;
+	pstring last_component_oldname;
+	pstring last_component_newname;
 	NTSTATUS status = NT_STATUS_OK;
 
 	ZERO_STRUCT(sbuf1);
 	ZERO_STRUCT(sbuf2);
 
-	status = unix_convert(ctx, conn, oldname_in, False, &oldname,
-			&last_component_oldname, &sbuf1);
+	status = unix_convert(conn, oldname, False, last_component_oldname, &sbuf1);
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
 	}
@@ -4780,8 +4052,7 @@
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 	}
 
-	status = unix_convert(ctx, conn, newname_in, False, &newname,
-			&last_component_newname, &sbuf2);
+	status = unix_convert(conn, newname, False, last_component_newname, &sbuf2);
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
 	}
@@ -4802,7 +4073,7 @@
 	}
 
 	/* Ensure this is within the share. */
-	status = check_reduced_name(conn, oldname);
+	status = reduce_name(conn, oldname);
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
 	}
@@ -4822,17 +4093,17 @@
  Deal with setting the time from any of the setfilepathinfo functions.
 ****************************************************************************/
 
-NTSTATUS smb_set_file_time(connection_struct *conn,
-			   files_struct *fsp,
-			   const char *fname,
-			   const SMB_STRUCT_STAT *psbuf,
-			   struct timespec ts[2],
-			   bool setting_write_time)
+static NTSTATUS smb_set_file_time(connection_struct *conn,
+				files_struct *fsp,
+				const char *fname,
+				const SMB_STRUCT_STAT *psbuf,
+				struct timespec ts[2])
 {
 	uint32 action =
 		FILE_NOTIFY_CHANGE_LAST_ACCESS
 		|FILE_NOTIFY_CHANGE_LAST_WRITE;
 
+	
 	if (!VALID_STAT(*psbuf)) {
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 	}
@@ -4848,11 +4119,6 @@
 		action &= ~FILE_NOTIFY_CHANGE_LAST_WRITE;
 	}
 
-	if (!setting_write_time) {
-		/* ts[1] comes from change time, not write time. */
-		action &= ~FILE_NOTIFY_CHANGE_LAST_WRITE;
-	}
-
 	DEBUG(6,("smb_set_file_time: actime: %s " , time_to_asc(convert_timespec_to_time_t(ts[0])) ));
 	DEBUG(6,("smb_set_file_time: modtime: %s ", time_to_asc(convert_timespec_to_time_t(ts[1])) ));
 
@@ -4869,7 +4135,7 @@
 		}
 	}
 
-	if (setting_write_time) {
+	if(fsp != NULL) {
 		/*
 		 * This was a setfileinfo on an open file.
 		 * NT does this a lot. We also need to 
@@ -4880,25 +4146,21 @@
 		 * away and will set it on file close and after a write. JRA.
 		 */
 
-		DEBUG(10,("smb_set_file_time: setting pending modtime to %s\n",
-			  time_to_asc(convert_timespec_to_time_t(ts[1])) ));
-
-		if (fsp != NULL) {
-			set_write_time_fsp(fsp, ts[1], true);
-		} else {
-			set_write_time_path(conn, fname,
-					    vfs_file_id_from_sbuf(conn, psbuf),
-					    ts[1], true);
+		if (!null_timespec(ts[1])) {
+			DEBUG(10,("smb_set_file_time: setting pending modtime to %s\n",
+				time_to_asc(convert_timespec_to_time_t(ts[1])) ));
+			fsp_set_pending_modtime(fsp, ts[1]);
 		}
-	}
 
+	}
 	DEBUG(10,("smb_set_file_time: setting utimes to modified values.\n"));
 
 	if(file_ntimes(conn, fname, ts)!=0) {
 		return map_nt_error_from_unix(errno);
 	}
-	notify_fname(conn, NOTIFY_ACTION_MODIFIED, action, fname);
-
+	if (action != 0) {
+		notify_fname(conn, NOTIFY_ACTION_MODIFIED, action, fname);
+	}
 	return NT_STATUS_OK;
 }
 
@@ -4931,7 +4193,7 @@
 		DEBUG(10,("smb_set_file_dosmode: file %s : setting dos mode 0x%x\n",
 					fname, (unsigned int)dosmode ));
 
-		if(file_set_dosmode(conn, fname, dosmode, psbuf, NULL, false)) {
+		if(file_set_dosmode(conn, fname, dosmode, psbuf, False)) {
 			DEBUG(2,("smb_set_file_dosmode: file_set_dosmode of %s failed (%s)\n",
 						fname, strerror(errno)));
 			return map_nt_error_from_unix(errno);
@@ -4945,7 +4207,6 @@
 ****************************************************************************/
 
 static NTSTATUS smb_set_file_size(connection_struct *conn,
-				  struct smb_request *req,
 				files_struct *fsp,
 				const char *fname,
 				SMB_STRUCT_STAT *psbuf,
@@ -4975,8 +4236,8 @@
 		return NT_STATUS_OK;
 	}
 
-	status = open_file_ntcreate(conn, req, fname, psbuf,
-				FILE_WRITE_ATTRIBUTES,
+	status = open_file_ntcreate(conn, fname, psbuf,
+				FILE_WRITE_DATA,
 				FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
 				FILE_OPEN,
 				0,
@@ -5032,12 +4293,17 @@
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-	ctx = talloc_tos();
+	ctx = talloc_init("SMB_INFO_SET_EA");
+	if (!ctx) {
+		return NT_STATUS_NO_MEMORY;
+	}
 	ea_list = read_ea_list(ctx, pdata + 4, total_data - 4);
 	if (!ea_list) {
+		talloc_destroy(ctx);
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 	status = set_ea(conn, fsp, fname, ea_list);
+	talloc_destroy(ctx);
 
 	return status;
 }
@@ -5054,7 +4320,7 @@
 				SMB_STRUCT_STAT *psbuf)
 {
 	NTSTATUS status = NT_STATUS_OK;
-	bool delete_on_close;
+	BOOL delete_on_close;
 	uint32 dosmode = 0;
 
 	if (total_data < 1) {
@@ -5148,15 +4414,14 @@
 ****************************************************************************/
 
 static NTSTATUS smb_set_file_unix_link(connection_struct *conn,
-				       struct smb_request *req,
-				       const char *pdata,
-				       int total_data,
-				       const char *fname)
+				char *inbuf,
+				const char *pdata,
+				int total_data,
+				const char *fname)
 {
-	char *link_target = NULL;
+	pstring link_target;
 	const char *newname = fname;
 	NTSTATUS status = NT_STATUS_OK;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	/* Set a symbolic link. */
 	/* Don't allow this if follow links is false. */
@@ -5169,42 +4434,26 @@
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	srvstr_pull_talloc(ctx, pdata, req->flags2, &link_target, pdata,
-		    total_data, STR_TERMINATE);
+	srvstr_pull(inbuf, link_target, pdata, sizeof(link_target), total_data, STR_TERMINATE);
 
-	if (!link_target) {
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
 	/* !widelinks forces the target path to be within the share. */
 	/* This means we can interpret the target as a pathname. */
 	if (!lp_widelinks(SNUM(conn))) {
-		char *rel_name = NULL;
+		pstring rel_name;
 		char *last_dirp = NULL;
 
 		if (*link_target == '/') {
 			/* No absolute paths allowed. */
 			return NT_STATUS_ACCESS_DENIED;
 		}
-		rel_name = talloc_strdup(ctx,newname);
-		if (!rel_name) {
-			return NT_STATUS_NO_MEMORY;
-		}
+		pstrcpy(rel_name, newname);
 		last_dirp = strrchr_m(rel_name, '/');
 		if (last_dirp) {
 			last_dirp[1] = '\0';
 		} else {
-			rel_name = talloc_strdup(ctx,"./");
-			if (!rel_name) {
-				return NT_STATUS_NO_MEMORY;
-			}
+			pstrcpy(rel_name, "./");
 		}
-		rel_name = talloc_asprintf_append(rel_name,
-				"%s",
-				link_target);
-		if (!rel_name) {
-			return NT_STATUS_NO_MEMORY;
-		}
+		pstrcat(rel_name, link_target);
 
 		status = check_name(conn, rel_name);
 		if (!NT_STATUS_IS_OK(status)) {
@@ -5227,12 +4476,13 @@
 ****************************************************************************/
 
 static NTSTATUS smb_set_file_unix_hlink(connection_struct *conn,
-					struct smb_request *req,
-					const char *pdata, int total_data,
-					const char *fname)
+				char *inbuf,
+				char *outbuf,
+				const char *pdata,
+				int total_data,
+				pstring fname)
 {
-	char *oldname = NULL;
-	TALLOC_CTX *ctx = talloc_tos();
+	pstring oldname;
 	NTSTATUS status = NT_STATUS_OK;
 
 	/* Set a hard link. */
@@ -5240,16 +4490,12 @@
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-	srvstr_get_path(ctx, pdata, req->flags2, &oldname, pdata,
-			total_data, STR_TERMINATE, &status);
+	srvstr_get_path(inbuf, oldname, pdata, sizeof(oldname), total_data, STR_TERMINATE, &status);
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
 	}
 
-	status = resolve_dfspath(ctx, conn,
-				req->flags2 & FLAGS2_DFS_PATHNAMES,
-				oldname,
-				&oldname);
+	status = resolve_dfspath(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, oldname);
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
 	}
@@ -5257,7 +4503,7 @@
 	DEBUG(10,("smb_set_file_unix_hlink: SMB_SET_FILE_UNIX_LINK doing hard link %s -> %s\n",
 		fname, oldname));
 
-	return hardlink_internals(ctx, conn, oldname, fname);
+	return hardlink_internals(conn, oldname, fname);
 }
 
 /****************************************************************************
@@ -5265,49 +4511,40 @@
 ****************************************************************************/
 
 static NTSTATUS smb_file_rename_information(connection_struct *conn,
-					    struct smb_request *req,
-					    const char *pdata,
-					    int total_data,
-					    files_struct *fsp,
-					    const char *fname)
+				char *inbuf,
+				char *outbuf,
+				const char *pdata,
+				int total_data,
+				files_struct *fsp,
+				pstring fname)
 {
-	bool overwrite;
-	uint32 root_fid;
+	BOOL overwrite;
+	/* uint32 root_fid; */  /* Not used */
 	uint32 len;
-	char *newname = NULL;
-	char *base_name = NULL;
-	bool dest_has_wcard = False;
+	pstring newname;
+	pstring base_name;
+	BOOL dest_has_wcard = False;
 	NTSTATUS status = NT_STATUS_OK;
 	char *p;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	if (total_data < 13) {
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
 	overwrite = (CVAL(pdata,0) ? True : False);
-	root_fid = IVAL(pdata,4);
+	/* root_fid = IVAL(pdata,4); */
 	len = IVAL(pdata,8);
 
-	if (len > (total_data - 12) || (len == 0) || (root_fid != 0)) {
+	if (len > (total_data - 12) || (len == 0)) {
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-	srvstr_get_path_wcard(ctx, pdata, req->flags2, &newname, &pdata[12],
-			      len, 0, &status,
-			      &dest_has_wcard);
+	srvstr_get_path_wcard(inbuf, newname, &pdata[12], sizeof(newname), len, 0, &status, &dest_has_wcard);
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
 	}
 
-	DEBUG(10,("smb_file_rename_information: got name |%s|\n",
-				newname));
-
-	status = resolve_dfspath_wcard(ctx, conn,
-				       req->flags2 & FLAGS2_DFS_PATHNAMES,
-				       newname,
-				       &newname,
-				       &dest_has_wcard);
+	status = resolve_dfspath_wcard(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, newname, &dest_has_wcard);
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
 	}
@@ -5318,58 +4555,24 @@
 	}
 
 	/* Create the base directory. */
-	base_name = talloc_strdup(ctx, fname);
-	if (!base_name) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	pstrcpy(base_name, fname);
 	p = strrchr_m(base_name, '/');
 	if (p) {
 		p[1] = '\0';
 	} else {
-		base_name = talloc_strdup(ctx, "./");
-		if (!base_name) {
-			return NT_STATUS_NO_MEMORY;
-		}
+		pstrcpy(base_name, "./");
 	}
 	/* Append the new name. */
-	base_name = talloc_asprintf_append(base_name,
-			"%s",
-			newname);
-	if (!base_name) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	pstrcat(base_name, newname);
 
 	if (fsp) {
-		SMB_STRUCT_STAT sbuf;
-		char *newname_last_component = NULL;
-
-		ZERO_STRUCT(sbuf);
-
-		status = unix_convert(ctx, conn, newname, False,
-					&newname,
-					&newname_last_component,
-					&sbuf);
-
-		/* If an error we expect this to be
-		 * NT_STATUS_OBJECT_PATH_NOT_FOUND */
-
-		if (!NT_STATUS_IS_OK(status)
-		    && !NT_STATUS_EQUAL(NT_STATUS_OBJECT_PATH_NOT_FOUND,
-					status)) {
-			return status;
-		}
-
 		DEBUG(10,("smb_file_rename_information: SMB_FILE_RENAME_INFORMATION (fnum %d) %s -> %s\n",
 			fsp->fnum, fsp->fsp_name, base_name ));
-		status = rename_internals_fsp(conn, fsp, base_name,
-					      newname_last_component, 0,
-					      overwrite);
+		status = rename_internals_fsp(conn, fsp, base_name, 0, overwrite);
 	} else {
 		DEBUG(10,("smb_file_rename_information: SMB_FILE_RENAME_INFORMATION %s -> %s\n",
-			fname, base_name ));
-		status = rename_internals(ctx, conn, req, fname, base_name, 0,
-					overwrite, False, dest_has_wcard,
-					FILE_WRITE_ATTRIBUTES);
+			fname, newname ));
+		status = rename_internals(conn, fname, base_name, 0, overwrite, False, dest_has_wcard);
 	}
 
 	return status;
@@ -5390,8 +4593,8 @@
 	uint16 posix_acl_version;
 	uint16 num_file_acls;
 	uint16 num_def_acls;
-	bool valid_file_acls = True;
-	bool valid_def_acls = True;
+	BOOL valid_file_acls = True;
+	BOOL valid_def_acls = True;
 
 	if (total_data < SMB_POSIX_ACL_HEADER_SIZE) {
 		return NT_STATUS_INVALID_PARAMETER;
@@ -5443,7 +4646,8 @@
 ****************************************************************************/
 
 static NTSTATUS smb_set_posix_lock(connection_struct *conn,
-				const struct smb_request *req,
+				char *inbuf,
+				int length,
 				const char *pdata,
 				int total_data,
 				files_struct *fsp)
@@ -5451,9 +4655,8 @@
 	SMB_BIG_UINT count;
 	SMB_BIG_UINT offset;
 	uint32 lock_pid;
-	bool blocking_lock = False;
+	BOOL blocking_lock = False;
 	enum brl_type lock_type;
-
 	NTSTATUS status = NT_STATUS_OK;
 
 	if (fsp == NULL || fsp->fh->fd == -1) {
@@ -5514,8 +4717,7 @@
 		(double)offset ));
 
 	if (lock_type == UNLOCK_LOCK) {
-		status = do_unlock(smbd_messaging_context(),
-				fsp,
+		status = do_unlock(fsp,
 				lock_pid,
 				count,
 				offset,
@@ -5523,8 +4725,7 @@
 	} else {
 		uint32 block_smbpid;
 
-		struct byte_range_lock *br_lck = do_lock(smbd_messaging_context(),
-							fsp,
+		struct byte_range_lock *br_lck = do_lock(fsp,
 							lock_pid,
 							count,
 							offset,
@@ -5541,7 +4742,7 @@
 			 * onto the blocking lock queue.
 			 */
 			if(push_blocking_lock_request(br_lck,
-						req,
+						inbuf, length,
 						fsp,
 						-1, /* infinite timeout. */
 						0,
@@ -5590,8 +4791,7 @@
 				fsp,
 				fname,
 				psbuf,
-				ts,
-				true);
+				ts);
 }
 
 /****************************************************************************
@@ -5611,7 +4811,6 @@
 	uint32 dosmode = 0;
 	struct timespec ts[2];
 	NTSTATUS status = NT_STATUS_OK;
-	bool setting_write_time = true;
 
 	if (total_data < 36) {
 		return NT_STATUS_INVALID_PARAMETER;
@@ -5644,12 +4843,7 @@
 
 	/* Prefer a defined time to an undefined one. */
 	if (null_timespec(ts[1])) {
-		if (null_timespec(write_time)) {
-			ts[1] = changed_time;
-			setting_write_time = false;
-		} else {
-	 		ts[1] = write_time;
-		}
+		ts[1] = null_timespec(write_time) ? changed_time : write_time;
 	}
 
 	DEBUG(10,("smb_set_file_basic_info: file %s\n",
@@ -5659,8 +4853,7 @@
 				fsp,
 				fname,
 				psbuf,
-				ts,
-				setting_write_time);
+				ts);
 }
 
 /****************************************************************************
@@ -5668,7 +4861,6 @@
 ****************************************************************************/
 
 static NTSTATUS smb_set_file_allocation_info(connection_struct *conn,
-					     struct smb_request *req,
 					const char *pdata,
 					int total_data,
 					files_struct *fsp,
@@ -5716,17 +4908,19 @@
 			}
 		}
 		/* But always update the time. */
-		/*
-		 * This is equivalent to a write. Ensure it's seen immediately
-		 * if there are no pending writes.
-		 */
-		trigger_write_time_update(fsp);
+		if (null_timespec(fsp->pending_modtime)) {
+			/*
+			 * This is equivalent to a write. Ensure it's seen immediately
+			 * if there are no pending writes.
+			 */
+			set_filetime(fsp->conn, fsp->fsp_name, timespec_current());
+		}
 		return NT_STATUS_OK;
 	}
 
 	/* Pathname or stat or directory file. */
 
-	status = open_file_ntcreate(conn, req, fname, psbuf,
+	status = open_file_ntcreate(conn, fname, psbuf,
 				FILE_WRITE_DATA,
 				FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
 				FILE_OPEN,
@@ -5750,12 +4944,11 @@
 	}
 
 	/* Changing the allocation size should set the last mod time. */
-	/*
-	 * This is equivalent to a write. Ensure it's seen immediately
-	 * if there are no pending writes.
-	 */
-	trigger_write_time_update(new_fsp);
+	/* Don't need to call set_filetime as this will be flushed on
+	 * close. */
 
+	fsp_set_pending_modtime(new_fsp, timespec_current());
+
 	close_file(new_fsp,NORMAL_CLOSE);
 	return NT_STATUS_OK;
 }
@@ -5765,7 +4958,6 @@
 ****************************************************************************/
 
 static NTSTATUS smb_set_file_end_of_file_info(connection_struct *conn,
-					      struct smb_request *req,
 					const char *pdata,
 					int total_data,
 					files_struct *fsp,
@@ -5790,7 +4982,7 @@
 	DEBUG(10,("smb_set_file_end_of_file_info: Set end of file info for "
 		"file %s to %.0f\n", fname, (double)size ));
 
-	return smb_set_file_size(conn, req,
+	return smb_set_file_size(conn,
 				fsp,
 				fname,
 				psbuf,
@@ -5886,7 +5078,6 @@
 ****************************************************************************/
 
 static NTSTATUS smb_set_file_unix_basic(connection_struct *conn,
-					struct smb_request *req,
 					const char *pdata,
 					int total_data,
 					files_struct *fsp,
@@ -5900,7 +5091,7 @@
 	uid_t set_owner = (uid_t)SMB_UID_NO_CHANGE;
 	gid_t set_grp = (uid_t)SMB_GID_NO_CHANGE;
 	NTSTATUS status = NT_STATUS_OK;
-	bool delete_on_fail = False;
+	BOOL delete_on_fail = False;
 	enum perm_type ptype;
 
 	if (total_data < 100) {
@@ -6000,18 +5191,9 @@
 	 */
 
 	if ((set_owner != (uid_t)SMB_UID_NO_CHANGE) && (psbuf->st_uid != set_owner)) {
-		int ret;
-
-		DEBUG(10,("smb_set_file_unix_basic: SMB_SET_FILE_UNIX_BASIC changing owner %u for path %s\n",
+		DEBUG(10,("smb_set_file_unix_basic: SMB_SET_FILE_UNIX_BASIC changing owner %u for file %s\n",
 			(unsigned int)set_owner, fname ));
-
-		if (S_ISLNK(psbuf->st_mode)) {
-			ret = SMB_VFS_LCHOWN(conn, fname, set_owner, (gid_t)-1);
-		} else {
-			ret = SMB_VFS_CHOWN(conn, fname, set_owner, (gid_t)-1);
-		}
-
-		if (ret != 0) {
+		if (SMB_VFS_CHOWN(conn, fname, set_owner, (gid_t)-1) != 0) {
 			status = map_nt_error_from_unix(errno);
 			if (delete_on_fail) {
 				SMB_VFS_UNLINK(conn,fname);
@@ -6038,7 +5220,7 @@
 
 	/* Deal with any size changes. */
 
-	status = smb_set_file_size(conn, req,
+	status = smb_set_file_size(conn,
 				fsp,
 				fname,
 				psbuf,
@@ -6053,8 +5235,7 @@
 				fsp,
 				fname,
 				psbuf,
-				ts,
-				true);
+				ts);
 }
 
 /****************************************************************************
@@ -6062,7 +5243,6 @@
 ****************************************************************************/
 
 static NTSTATUS smb_set_file_unix_info2(connection_struct *conn,
-					struct smb_request *req,
 					const char *pdata,
 					int total_data,
 					files_struct *fsp,
@@ -6080,7 +5260,7 @@
 	/* Start by setting all the fields that are common between UNIX_BASIC
 	 * and UNIX_INFO2.
 	 */
-	status = smb_set_file_unix_basic(conn, req, pdata, total_data,
+	status = smb_set_file_unix_basic(conn, pdata, total_data,
 				fsp, fname, psbuf);
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
@@ -6124,7 +5304,6 @@
 ****************************************************************************/
 
 static NTSTATUS smb_posix_mkdir(connection_struct *conn,
-				struct smb_request *req,
 				char **ppdata,
 				int total_data,
 				const char *fname,
@@ -6157,7 +5336,7 @@
 	DEBUG(10,("smb_posix_mkdir: file %s, mode 0%o\n",
 		fname, (unsigned int)unixmode ));
 
-	status = open_directory(conn, req,
+	status = open_directory(conn,
 				fname,
 				psbuf,
 				FILE_READ_ATTRIBUTES, /* Just a stat open */
@@ -6219,14 +5398,13 @@
 ****************************************************************************/
 
 static NTSTATUS smb_posix_open(connection_struct *conn,
-			       struct smb_request *req,
 				char **ppdata,
 				int total_data,
 				const char *fname,
 				SMB_STRUCT_STAT *psbuf,
 				int *pdata_return_size)
 {
-	bool extended_oplock_granted = False;
+	BOOL extended_oplock_granted = False;
 	char *pdata = *ppdata;
 	uint32 flags = 0;
 	uint32 wire_open_mode = 0;
@@ -6255,7 +5433,7 @@
 	wire_open_mode = IVAL(pdata,4);
 
 	if (wire_open_mode == (SMB_O_CREAT|SMB_O_DIRECTORY)) {
-		return smb_posix_mkdir(conn, req,
+		return smb_posix_mkdir(conn,
 					ppdata,
 					total_data,
 					fname,
@@ -6323,7 +5501,7 @@
 		(unsigned int)wire_open_mode,
 		(unsigned int)unixmode ));
 
-	status = open_file_ntcreate(conn, req,
+	status = open_file_ntcreate(conn,
 				fname,
 				psbuf,
 				access_mask,
@@ -6407,7 +5585,6 @@
 ****************************************************************************/
 
 static NTSTATUS smb_posix_unlink(connection_struct *conn,
-				 struct smb_request *req,
 				const char *pdata,
 				int total_data,
 				const char *fname,
@@ -6441,7 +5618,7 @@
 		fname));
 
 	if (VALID_STAT_OF_DIR(*psbuf)) {
-		status = open_directory(conn, req,
+		status = open_directory(conn,
 					fname,
 					psbuf,
 					DELETE_ACCESS,
@@ -6453,7 +5630,7 @@
 					&fsp);
 	} else {
 
-		status = open_file_ntcreate(conn, req,
+		status = open_file_ntcreate(conn,
 				fname,
 				psbuf,
 				DELETE_ACCESS,
@@ -6475,8 +5652,7 @@
 	 * non-POSIX opens return SHARING_VIOLATION.
 	 */
 
-	lck = get_share_mode_lock(talloc_tos(), fsp->file_id, NULL, NULL,
-				  NULL);
+	lck = get_share_mode_lock(NULL, fsp->dev, fsp->inode, NULL, NULL);
 	if (lck == NULL) {
 		DEBUG(0, ("smb_posix_unlink: Could not get share mode "
 			"lock for file %s\n", fsp->fsp_name));
@@ -6525,70 +5701,54 @@
  Reply to a TRANS2_SETFILEINFO (set file info by fileid or pathname).
 ****************************************************************************/
 
-static void call_trans2setfilepathinfo(connection_struct *conn,
-				       struct smb_request *req,
-				       unsigned int tran_call,
-				       char **pparams, int total_params,
-				       char **ppdata, int total_data,
-				       unsigned int max_data_bytes)
+static int call_trans2setfilepathinfo(connection_struct *conn, char *inbuf, char *outbuf, int length, int bufsize,
+					unsigned int tran_call,
+					char **pparams, int total_params, char **ppdata, int total_data,
+					unsigned int max_data_bytes)
 {
 	char *params = *pparams;
 	char *pdata = *ppdata;
 	uint16 info_level;
 	SMB_STRUCT_STAT sbuf;
-	char *fname = NULL;
+	pstring fname;
 	files_struct *fsp = NULL;
 	NTSTATUS status = NT_STATUS_OK;
 	int data_return_size = 0;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	if (!params) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
+		return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 	}
 
 	ZERO_STRUCT(sbuf);
 
 	if (tran_call == TRANSACT2_SETFILEINFO) {
 		if (total_params < 4) {
-			reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 		}
 
-		fsp = file_fsp(SVAL(params,0));
-		/* Basic check for non-null fsp. */
-	        if (!check_fsp_open(conn, req, fsp, &current_user)) {
-			return;
-		}
-		info_level = SVAL(params,2);
+		fsp = file_fsp(params,0);
+		info_level = SVAL(params,2);    
 
-		fname = talloc_strdup(talloc_tos(),fsp->fsp_name);
-		if (!fname) {
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
-			return;
-		}
-
-		if(fsp->is_directory || fsp->fh->fd == -1) {
+		if(fsp && (fsp->is_directory || fsp->fh->fd == -1)) {
 			/*
 			 * This is actually a SETFILEINFO on a directory
 			 * handle (returned from an NT SMB). NT5.0 seems
 			 * to do this call. JRA.
 			 */
+			pstrcpy(fname, fsp->fsp_name);
 			if (INFO_LEVEL_IS_UNIX(info_level)) {
 				/* Always do lstat for UNIX calls. */
 				if (SMB_VFS_LSTAT(conn,fname,&sbuf)) {
 					DEBUG(3,("call_trans2setfilepathinfo: SMB_VFS_LSTAT of %s failed (%s)\n",fname,strerror(errno)));
-					reply_unixerror(req,ERRDOS,ERRbadpath);
-					return;
+					return UNIXERROR(ERRDOS,ERRbadpath);
 				}
 			} else {
 				if (SMB_VFS_STAT(conn,fname,&sbuf) != 0) {
 					DEBUG(3,("call_trans2setfilepathinfo: fileinfo of %s failed (%s)\n",fname,strerror(errno)));
-					reply_unixerror(req,ERRDOS,ERRbadpath);
-					return;
+					return UNIXERROR(ERRDOS,ERRbadpath);
 				}
 			}
-		} else if (fsp->print_file) {
+		} else if (fsp && fsp->print_file) {
 			/*
 			 * Doing a DELETE_ON_CLOSE should cancel a print job.
 			 */
@@ -6596,72 +5756,53 @@
 				fsp->fh->private_options |= FILE_DELETE_ON_CLOSE;
 
 				DEBUG(3,("call_trans2setfilepathinfo: Cancelling print job (%s)\n", fsp->fsp_name ));
-
+	
 				SSVAL(params,0,0);
-				send_trans2_replies(conn, req, params, 2,
-						    *ppdata, 0,
-						    max_data_bytes);
-				return;
-			} else {
-				reply_unixerror(req, ERRDOS, ERRbadpath);
-				return;
-			}
-		} else {
+				send_trans2_replies(outbuf, bufsize, params, 2, *ppdata, 0, max_data_bytes);
+				return(-1);
+			} else
+				return (UNIXERROR(ERRDOS,ERRbadpath));
+	    } else {
 			/*
 			 * Original code - this is an open file.
 			 */
-		        if (!check_fsp(conn, req, fsp, &current_user)) {
-				return;
-			}
+			CHECK_FSP(fsp,conn);
 
-			if (SMB_VFS_FSTAT(fsp, &sbuf) != 0) {
+			pstrcpy(fname, fsp->fsp_name);
+
+			if (SMB_VFS_FSTAT(fsp, fsp->fh->fd, &sbuf) != 0) {
 				DEBUG(3,("call_trans2setfilepathinfo: fstat of fnum %d failed (%s)\n",fsp->fnum, strerror(errno)));
-				reply_unixerror(req, ERRDOS, ERRbadfid);
-				return;
+				return(UNIXERROR(ERRDOS,ERRbadfid));
 			}
 		}
 	} else {
 		/* set path info */
 		if (total_params < 7) {
-			reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 		}
 
-		info_level = SVAL(params,0);
-		srvstr_get_path(ctx, params, req->flags2, &fname, &params[6],
-				total_params - 6, STR_TERMINATE,
-				&status);
+		info_level = SVAL(params,0);    
+		srvstr_get_path(inbuf, fname, &params[6], sizeof(fname), total_params - 6, STR_TERMINATE, &status);
 		if (!NT_STATUS_IS_OK(status)) {
-			reply_nterror(req, status);
-			return;
+			return ERROR_NT(status);
 		}
 
-		status = resolve_dfspath(ctx, conn,
-					 req->flags2 & FLAGS2_DFS_PATHNAMES,
-					 fname,
-					 &fname);
+		status = resolve_dfspath(conn, SVAL(inbuf,smb_flg2) & FLAGS2_DFS_PATHNAMES, fname);
 		if (!NT_STATUS_IS_OK(status)) {
 			if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
-				reply_botherror(req,
-						NT_STATUS_PATH_NOT_COVERED,
-						ERRSRV, ERRbadpath);
-				return;
+				return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, ERRbadpath);
 			}
-			reply_nterror(req, status);
-			return;
+			return ERROR_NT(status);
 		}
 
-		status = unix_convert(ctx, conn, fname, False,
-				&fname, NULL, &sbuf);
+		status = unix_convert(conn, fname, False, NULL, &sbuf);
 		if (!NT_STATUS_IS_OK(status)) {
-			reply_nterror(req, status);
-			return;
+			return ERROR_NT(status);
 		}
 
 		status = check_name(conn, fname);
 		if (!NT_STATUS_IS_OK(status)) {
-			reply_nterror(req, status);
-			return;
+			return ERROR_NT(status);
 		}
 
 		if (INFO_LEVEL_IS_UNIX(info_level)) {
@@ -6674,19 +5815,16 @@
 
 		} else if (!VALID_STAT(sbuf) && SMB_VFS_STAT(conn,fname,&sbuf)) {
 			DEBUG(3,("call_trans2setfilepathinfo: SMB_VFS_STAT of %s failed (%s)\n",fname,strerror(errno)));
-			reply_unixerror(req, ERRDOS, ERRbadpath);
-			return;
+			return UNIXERROR(ERRDOS,ERRbadpath);
 		}
 	}
 
 	if (!CAN_WRITE(conn)) {
-		reply_doserror(req, ERRSRV, ERRaccess);
-		return;
+		return ERROR_DOS(ERRSRV,ERRaccess);
 	}
 
 	if (INFO_LEVEL_IS_UNIX(info_level) && !lp_unix_extensions()) {
-		reply_nterror(req, NT_STATUS_INVALID_LEVEL);
-		return;
+		return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 	}
 
 	DEBUG(3,("call_trans2setfilepathinfo(%d) %s (fnum %d) info_level=%d totdata=%d\n",
@@ -6695,13 +5833,17 @@
 	/* Realloc the parameter size */
 	*pparams = (char *)SMB_REALLOC(*pparams,2);
 	if (*pparams == NULL) {
-		reply_nterror(req, NT_STATUS_NO_MEMORY);
-		return;
+		return ERROR_NT(NT_STATUS_NO_MEMORY);
 	}
 	params = *pparams;
 
 	SSVAL(params,0,0);
 
+	if (fsp && !null_timespec(fsp->pending_modtime)) {
+		/* the pending modtime overrides the current modtime */
+		set_mtimespec(&sbuf, fsp->pending_modtime);
+	}
+
 	switch (info_level) {
 
 		case SMB_INFO_STANDARD:
@@ -6740,7 +5882,7 @@
 		case SMB_FILE_ALLOCATION_INFORMATION:
 		case SMB_SET_FILE_ALLOCATION_INFO:
 		{
-			status = smb_set_file_allocation_info(conn, req,
+			status = smb_set_file_allocation_info(conn,
 								pdata,
 								total_data,
 								fsp,
@@ -6752,7 +5894,7 @@
 		case SMB_FILE_END_OF_FILE_INFORMATION:
 		case SMB_SET_FILE_END_OF_FILE_INFO:
 		{
-			status = smb_set_file_end_of_file_info(conn, req,
+			status = smb_set_file_end_of_file_info(conn,
 								pdata,
 								total_data,
 								fsp,
@@ -6811,7 +5953,7 @@
 
 		case SMB_SET_FILE_UNIX_BASIC:
 		{
-			status = smb_set_file_unix_basic(conn, req,
+			status = smb_set_file_unix_basic(conn,
 							pdata,
 							total_data,
 							fsp,
@@ -6822,7 +5964,7 @@
 
 		case SMB_SET_FILE_UNIX_INFO2:
 		{
-			status = smb_set_file_unix_info2(conn, req,
+			status = smb_set_file_unix_info2(conn,
 							pdata,
 							total_data,
 							fsp,
@@ -6835,11 +5977,13 @@
 		{
 			if (tran_call != TRANSACT2_SETPATHINFO) {
 				/* We must have a pathname for this. */
-				reply_nterror(req, NT_STATUS_INVALID_LEVEL);
-				return;
+				return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 			}
-			status = smb_set_file_unix_link(conn, req, pdata,
-							total_data, fname);
+			status = smb_set_file_unix_link(conn,
+						inbuf,
+						pdata,
+						total_data,
+						fname);
 			break;
 		}
 
@@ -6847,20 +5991,26 @@
 		{
 			if (tran_call != TRANSACT2_SETPATHINFO) {
 				/* We must have a pathname for this. */
-				reply_nterror(req, NT_STATUS_INVALID_LEVEL);
-				return;
+				return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 			}
-			status = smb_set_file_unix_hlink(conn, req,
-							 pdata,	total_data,
-							 fname);
+			status = smb_set_file_unix_hlink(conn,
+						inbuf,
+						outbuf,
+						pdata,
+						total_data,
+						fname);
 			break;
 		}
 
 		case SMB_FILE_RENAME_INFORMATION:
 		{
-			status = smb_file_rename_information(conn, req,
-							     pdata, total_data,
-							     fsp, fname);
+			status = smb_file_rename_information(conn,
+							inbuf,
+							outbuf,
+							pdata,
+							total_data,
+							fsp,
+							fname);
 			break;
 		}
 
@@ -6880,11 +6030,14 @@
 		case SMB_SET_POSIX_LOCK:
 		{
 			if (tran_call != TRANSACT2_SETFILEINFO) {
-				reply_nterror(req, NT_STATUS_INVALID_LEVEL);
-				return;
+				return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 			}
-			status = smb_set_posix_lock(conn, req,
-						    pdata, total_data, fsp);
+			status = smb_set_posix_lock(conn,
+						inbuf,
+						length,
+						pdata,
+						total_data,
+						fsp);
 			break;
 		}
 
@@ -6892,11 +6045,10 @@
 		{
 			if (tran_call != TRANSACT2_SETPATHINFO) {
 				/* We must have a pathname for this. */
-				reply_nterror(req, NT_STATUS_INVALID_LEVEL);
-				return;
+				return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 			}
 
-			status = smb_posix_open(conn, req,
+			status = smb_posix_open(conn,
 						ppdata,
 						total_data,
 						fname,
@@ -6909,11 +6061,10 @@
 		{
 			if (tran_call != TRANSACT2_SETPATHINFO) {
 				/* We must have a pathname for this. */
-				reply_nterror(req, NT_STATUS_INVALID_LEVEL);
-				return;
+				return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 			}
 
-			status = smb_posix_unlink(conn, req,
+			status = smb_posix_unlink(conn,
 						pdata,
 						total_data,
 						fname,
@@ -6922,95 +6073,77 @@
 		}
 
 		default:
-			reply_nterror(req, NT_STATUS_INVALID_LEVEL);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 	}
 
 	
 	if (!NT_STATUS_IS_OK(status)) {
-		if (open_was_deferred(req->mid)) {
+		if (open_was_deferred(SVAL(inbuf,smb_mid))) {
 			/* We have re-scheduled this call. */
-			return;
+			return -1;
 		}
-		if (blocking_lock_was_deferred(req->mid)) {
+		if (blocking_lock_was_deferred(SVAL(inbuf,smb_mid))) {
 			/* We have re-scheduled this call. */
-			return;
+			return -1;
 		}
 		if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
-			reply_botherror(req, NT_STATUS_PATH_NOT_COVERED,
-					ERRSRV, ERRbadpath);
-			return;
+			return ERROR_BOTH(NT_STATUS_PATH_NOT_COVERED, ERRSRV, ERRbadpath);
 		}
 		if (info_level == SMB_POSIX_PATH_OPEN) {
-			reply_openerror(req, status);
-			return;
+			return ERROR_OPEN(status);
 		}
-
-		reply_nterror(req, status);
-		return;
+		return ERROR_NT(status);
 	}
 
 	SSVAL(params,0,0);
-	send_trans2_replies(conn, req, params, 2, *ppdata, data_return_size,
-			    max_data_bytes);
+	send_trans2_replies(outbuf, bufsize, params, 2, *ppdata, data_return_size, max_data_bytes);
   
-	return;
+	return -1;
 }
 
 /****************************************************************************
  Reply to a TRANS2_MKDIR (make directory with extended attributes).
 ****************************************************************************/
 
-static void call_trans2mkdir(connection_struct *conn, struct smb_request *req,
-			     char **pparams, int total_params,
-			     char **ppdata, int total_data,
-			     unsigned int max_data_bytes)
+static int call_trans2mkdir(connection_struct *conn, char *inbuf, char *outbuf, int length, int bufsize,
+					char **pparams, int total_params, char **ppdata, int total_data,
+					unsigned int max_data_bytes)
 {
 	char *params = *pparams;
 	char *pdata = *ppdata;
-	char *directory = NULL;
+	pstring directory;
 	SMB_STRUCT_STAT sbuf;
 	NTSTATUS status = NT_STATUS_OK;
 	struct ea_list *ea_list = NULL;
-	TALLOC_CTX *ctx = talloc_tos();
 
-	if (!CAN_WRITE(conn)) {
-		reply_doserror(req, ERRSRV, ERRaccess);
-		return;
-	}
+	if (!CAN_WRITE(conn))
+		return ERROR_DOS(ERRSRV,ERRaccess);
 
 	if (total_params < 5) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
+		return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 	}
 
-	srvstr_get_path(ctx, params, req->flags2, &directory, &params[4],
-			total_params - 4, STR_TERMINATE,
-			&status);
+	srvstr_get_path(inbuf, directory, &params[4], sizeof(directory), total_params - 4, STR_TERMINATE, &status);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
-		return;
+		return ERROR_NT(status);
 	}
 
 	DEBUG(3,("call_trans2mkdir : name = %s\n", directory));
 
-	status = unix_convert(ctx, conn, directory, False, &directory, NULL, &sbuf);
+	status = unix_convert(conn, directory, False, NULL, &sbuf);
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
-		return;
+		return ERROR_NT(status);
 	}
 
 	status = check_name(conn, directory);
 	if (!NT_STATUS_IS_OK(status)) {
 		DEBUG(5,("call_trans2mkdir error (%s)\n", nt_errstr(status)));
-		reply_nterror(req, status);
-		return;
+		return ERROR_NT(status);
 	}
 
 	/* Any data in this call is an EA list. */
 	if (total_data && (total_data != 4) && !lp_ea_support(SNUM(conn))) {
-		reply_nterror(req, NT_STATUS_EAS_NOT_SUPPORTED);
-		return;
+		return ERROR_NT(NT_STATUS_EAS_NOT_SUPPORTED);
 	}
 
 	/*
@@ -7021,57 +6154,50 @@
 
 	if (total_data != 4) {
 		if (total_data < 10) {
-			reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 		}
 
 		if (IVAL(pdata,0) > total_data) {
 			DEBUG(10,("call_trans2mkdir: bad total data size (%u) > %u\n",
 				IVAL(pdata,0), (unsigned int)total_data));
-			reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 		}
 
-		ea_list = read_ea_list(talloc_tos(), pdata + 4,
+		ea_list = read_ea_list(tmp_talloc_ctx(), pdata + 4,
 				       total_data - 4);
 		if (!ea_list) {
-			reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 		}
 	} else if (IVAL(pdata,0) != 4) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
+		return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 	}
 
-	status = create_directory(conn, req, directory);
+	status = create_directory(conn, directory);
 
 	if (!NT_STATUS_IS_OK(status)) {
-		reply_nterror(req, status);
-		return;
+		return ERROR_NT(status);
 	}
   
 	/* Try and set any given EA. */
 	if (ea_list) {
 		status = set_ea(conn, NULL, directory, ea_list);
 		if (!NT_STATUS_IS_OK(status)) {
-			reply_nterror(req, status);
-			return;
+			return ERROR_NT(status);
 		}
 	}
 
 	/* Realloc the parameter and data sizes */
 	*pparams = (char *)SMB_REALLOC(*pparams,2);
 	if(*pparams == NULL) {
-		reply_nterror(req, NT_STATUS_NO_MEMORY);
-		return;
+		return ERROR_NT(NT_STATUS_NO_MEMORY);
 	}
 	params = *pparams;
 
 	SSVAL(params,0,0);
 
-	send_trans2_replies(conn, req, params, 2, *ppdata, 0, max_data_bytes);
+	send_trans2_replies(outbuf, bufsize, params, 2, *ppdata, 0, max_data_bytes);
   
-	return;
+	return(-1);
 }
 
 /****************************************************************************
@@ -7079,19 +6205,16 @@
  We don't actually do this - we just send a null response.
 ****************************************************************************/
 
-static void call_trans2findnotifyfirst(connection_struct *conn,
-				       struct smb_request *req,
-				       char **pparams, int total_params,
-				       char **ppdata, int total_data,
-				       unsigned int max_data_bytes)
+static int call_trans2findnotifyfirst(connection_struct *conn, char *inbuf, char *outbuf, int length, int bufsize,
+					char **pparams, int total_params, char **ppdata, int total_data,
+					unsigned int max_data_bytes)
 {
 	static uint16 fnf_handle = 257;
 	char *params = *pparams;
 	uint16 info_level;
 
 	if (total_params < 6) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
+		return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 	}
 
 	info_level = SVAL(params,4);
@@ -7102,15 +6225,13 @@
 		case 2:
 			break;
 		default:
-			reply_nterror(req, NT_STATUS_INVALID_LEVEL);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 	}
 
 	/* Realloc the parameter and data sizes */
 	*pparams = (char *)SMB_REALLOC(*pparams,6);
 	if (*pparams == NULL) {
-		reply_nterror(req, NT_STATUS_NO_MEMORY);
-		return;
+		return ERROR_NT(NT_STATUS_NO_MEMORY);
 	}
 	params = *pparams;
 
@@ -7123,9 +6244,9 @@
 	if(fnf_handle == 0)
 		fnf_handle = 257;
 
-	send_trans2_replies(conn, req, params, 6, *ppdata, 0, max_data_bytes);
+	send_trans2_replies(outbuf, bufsize, params, 6, *ppdata, 0, max_data_bytes);
   
-	return;
+	return(-1);
 }
 
 /****************************************************************************
@@ -7133,11 +6254,9 @@
  changes). Currently this does nothing.
 ****************************************************************************/
 
-static void call_trans2findnotifynext(connection_struct *conn,
-				      struct smb_request *req,
-				      char **pparams, int total_params,
-				      char **ppdata, int total_data,
-				      unsigned int max_data_bytes)
+static int call_trans2findnotifynext(connection_struct *conn, char *inbuf, char *outbuf, int length, int bufsize,
+					char **pparams, int total_params, char **ppdata, int total_data,
+					unsigned int max_data_bytes)
 {
 	char *params = *pparams;
 
@@ -7146,67 +6265,51 @@
 	/* Realloc the parameter and data sizes */
 	*pparams = (char *)SMB_REALLOC(*pparams,4);
 	if (*pparams == NULL) {
-		reply_nterror(req, NT_STATUS_NO_MEMORY);
-		return;
+		return ERROR_NT(NT_STATUS_NO_MEMORY);
 	}
 	params = *pparams;
 
 	SSVAL(params,0,0); /* No changes */
 	SSVAL(params,2,0); /* No EA errors */
 
-	send_trans2_replies(conn, req, params, 4, *ppdata, 0, max_data_bytes);
+	send_trans2_replies(outbuf, bufsize, params, 4, *ppdata, 0, max_data_bytes);
   
-	return;
+	return(-1);
 }
 
 /****************************************************************************
  Reply to a TRANS2_GET_DFS_REFERRAL - Shirish Kalele <kalele at veritas.com>.
 ****************************************************************************/
 
-static void call_trans2getdfsreferral(connection_struct *conn,
-				      struct smb_request *req,
-				      char **pparams, int total_params,
-				      char **ppdata, int total_data,
-				      unsigned int max_data_bytes)
+static int call_trans2getdfsreferral(connection_struct *conn, char* inbuf, char* outbuf, int length, int bufsize,
+					char **pparams, int total_params, char **ppdata, int total_data,
+					unsigned int max_data_bytes)
 {
 	char *params = *pparams;
-  	char *pathname = NULL;
+  	pstring pathname;
 	int reply_size = 0;
 	int max_referral_level;
 	NTSTATUS status = NT_STATUS_OK;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	DEBUG(10,("call_trans2getdfsreferral\n"));
 
 	if (total_params < 3) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		return;
+		return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 	}
 
 	max_referral_level = SVAL(params,0);
 
-	if(!lp_host_msdfs()) {
-		reply_doserror(req, ERRDOS, ERRbadfunc);
-		return;
-	}
+	if(!lp_host_msdfs())
+		return ERROR_DOS(ERRDOS,ERRbadfunc);
 
-	srvstr_pull_talloc(ctx, params, req->flags2, &pathname, &params[2],
-		    total_params - 2, STR_TERMINATE);
-	if (!pathname) {
-		reply_nterror(req, NT_STATUS_NOT_FOUND);
-		return;
-	}
-	if((reply_size = setup_dfs_referral(conn, pathname, max_referral_level,
-					    ppdata,&status)) < 0) {
-		reply_nterror(req, status);
-		return;
-	}
+	srvstr_pull(inbuf, pathname, &params[2], sizeof(pathname), total_params - 2, STR_TERMINATE);
+	if((reply_size = setup_dfs_referral(conn, pathname,max_referral_level,ppdata,&status)) < 0)
+		return ERROR_NT(status);
+    
+	SSVAL(outbuf,smb_flg2,SVAL(outbuf,smb_flg2) | FLAGS2_DFS_PATHNAMES);
+	send_trans2_replies(outbuf,bufsize,0,0,*ppdata,reply_size, max_data_bytes);
 
-	SSVAL(req->inbuf, smb_flg2,
-	      SVAL(req->inbuf,smb_flg2) | FLAGS2_DFS_PATHNAMES);
-	send_trans2_replies(conn, req,0,0,*ppdata,reply_size, max_data_bytes);
-
-	return;
+	return(-1);
 }
 
 #define LMCAT_SPL       0x53
@@ -7216,28 +6319,23 @@
  Reply to a TRANS2_IOCTL - used for OS/2 printing.
 ****************************************************************************/
 
-static void call_trans2ioctl(connection_struct *conn,
-			     struct smb_request *req,
-			     char **pparams, int total_params,
-			     char **ppdata, int total_data,
-			     unsigned int max_data_bytes)
+static int call_trans2ioctl(connection_struct *conn, char* inbuf, char* outbuf, int length, int bufsize,
+					char **pparams, int total_params, char **ppdata, int total_data,
+					unsigned int max_data_bytes)
 {
 	char *pdata = *ppdata;
-	files_struct *fsp = file_fsp(SVAL(req->inbuf,smb_vwv15));
+	files_struct *fsp = file_fsp(inbuf,smb_vwv15);
 
 	/* check for an invalid fid before proceeding */
+	
+	if (!fsp)                                
+		return(ERROR_DOS(ERRDOS,ERRbadfid));  
 
-	if (!fsp) {
-		reply_doserror(req, ERRDOS, ERRbadfid);
-		return;
-	}
-
-	if ((SVAL(req->inbuf,(smb_setup+4)) == LMCAT_SPL)
-	    && (SVAL(req->inbuf,(smb_setup+6)) == LMFUNC_GETJOBID)) {
+	if ((SVAL(inbuf,(smb_setup+4)) == LMCAT_SPL) &&
+			(SVAL(inbuf,(smb_setup+6)) == LMFUNC_GETJOBID)) {
 		*ppdata = (char *)SMB_REALLOC(*ppdata, 32);
 		if (*ppdata == NULL) {
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
-			return;
+			return ERROR_NT(NT_STATUS_NO_MEMORY);
 		}
 		pdata = *ppdata;
 
@@ -7245,68 +6343,51 @@
 			CAN ACCEPT THIS IN UNICODE. JRA. */
 
 		SSVAL(pdata,0,fsp->rap_print_jobid);                     /* Job number */
-		srvstr_push(pdata, req->flags2, pdata + 2,
-			    global_myname(), 15,
-			    STR_ASCII|STR_TERMINATE); /* Our NetBIOS name */
-		srvstr_push(pdata, req->flags2, pdata+18,
-			    lp_servicename(SNUM(conn)), 13,
-			    STR_ASCII|STR_TERMINATE); /* Service name */
-		send_trans2_replies(conn, req, *pparams, 0, *ppdata, 32,
-				    max_data_bytes);
-		return;
+		srvstr_push( outbuf, pdata + 2, global_myname(), 15, STR_ASCII|STR_TERMINATE); /* Our NetBIOS name */
+		srvstr_push( outbuf, pdata+18, lp_servicename(SNUM(conn)), 13, STR_ASCII|STR_TERMINATE); /* Service name */
+		send_trans2_replies(outbuf,bufsize,*pparams,0,*ppdata,32, max_data_bytes);
+		return(-1);
+	} else {
+		DEBUG(2,("Unknown TRANS2_IOCTL\n"));
+		return ERROR_DOS(ERRSRV,ERRerror);
 	}
-
-	DEBUG(2,("Unknown TRANS2_IOCTL\n"));
-	reply_doserror(req, ERRSRV, ERRerror);
 }
 
 /****************************************************************************
  Reply to a SMBfindclose (stop trans2 directory search).
 ****************************************************************************/
 
-void reply_findclose(struct smb_request *req)
+int reply_findclose(connection_struct *conn,
+		    char *inbuf,char *outbuf,int length,int bufsize)
 {
-	int dptr_num;
-
+	int outsize = 0;
+	int dptr_num=SVALS(inbuf,smb_vwv0);
 	START_PROFILE(SMBfindclose);
 
-	if (req->wct < 1) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBfindclose);
-		return;
-	}
-
-	dptr_num = SVALS(req->inbuf,smb_vwv0);
-
 	DEBUG(3,("reply_findclose, dptr_num = %d\n", dptr_num));
 
 	dptr_close(&dptr_num);
 
-	reply_outbuf(req, 0, 0);
+	outsize = set_message(outbuf,0,0,False);
 
 	DEBUG(3,("SMBfindclose dptr_num = %d\n", dptr_num));
 
 	END_PROFILE(SMBfindclose);
-	return;
+	return(outsize);
 }
 
 /****************************************************************************
  Reply to a SMBfindnclose (stop FINDNOTIFYFIRST directory search).
 ****************************************************************************/
 
-void reply_findnclose(struct smb_request *req)
+int reply_findnclose(connection_struct *conn, 
+		     char *inbuf,char *outbuf,int length,int bufsize)
 {
-	int dptr_num;
-
+	int outsize = 0;
+	int dptr_num= -1;
 	START_PROFILE(SMBfindnclose);
-
-	if (req->wct < 1) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBfindnclose);
-		return;
-	}
 	
-	dptr_num = SVAL(req->inbuf,smb_vwv0);
+	dptr_num = SVAL(inbuf,smb_vwv0);
 
 	DEBUG(3,("reply_findnclose, dptr_num = %d\n", dptr_num));
 
@@ -7314,42 +6395,34 @@
 	   findnotifyfirst - so any dptr_num is ok here. 
 	   Just ignore it. */
 
-	reply_outbuf(req, 0, 0);
+	outsize = set_message(outbuf,0,0,False);
 
 	DEBUG(3,("SMB_findnclose dptr_num = %d\n", dptr_num));
 
 	END_PROFILE(SMBfindnclose);
-	return;
+	return(outsize);
 }
 
-static void handle_trans2(connection_struct *conn, struct smb_request *req,
-			  struct trans_state *state)
+int handle_trans2(connection_struct *conn,
+		  struct trans_state *state,
+		  char *inbuf, char *outbuf, int size, int bufsize)
 {
+	int outsize;
+
 	if (Protocol >= PROTOCOL_NT1) {
-		req->flags2 |= 0x40; /* IS_LONG_NAME */
-		SSVAL(req->inbuf,smb_flg2,req->flags2);
+		SSVAL(outbuf,smb_flg2,SVAL(outbuf,smb_flg2) | 0x40); /* IS_LONG_NAME */
 	}
 
-	if (conn->encrypt_level == Required && !req->encrypted) {
-		if (state->call != TRANSACT2_QFSINFO &&
-				state->call != TRANSACT2_SETFSINFO) {
-			DEBUG(0,("handle_trans2: encryption required "
-				"with call 0x%x\n",
-				(unsigned int)state->call));
-			reply_nterror(req, NT_STATUS_ACCESS_DENIED);
-			return;
-		}
-	}
-
 	/* Now we must call the relevant TRANS2 function */
 	switch(state->call)  {
 	case TRANSACT2_OPEN:
 	{
 		START_PROFILE(Trans2_open);
-		call_trans2open(conn, req,
-				&state->param, state->total_param,
-				&state->data, state->total_data,
-				state->max_data_return);
+		outsize = call_trans2open(
+			conn, inbuf, outbuf, bufsize, 
+			&state->param, state->total_param,
+			&state->data, state->total_data,
+			state->max_data_return);
 		END_PROFILE(Trans2_open);
 		break;
 	}
@@ -7357,10 +6430,11 @@
 	case TRANSACT2_FINDFIRST:
 	{
 		START_PROFILE(Trans2_findfirst);
-		call_trans2findfirst(conn, req,
-				     &state->param, state->total_param,
-				     &state->data, state->total_data,
-				     state->max_data_return);
+		outsize = call_trans2findfirst(
+			conn, inbuf, outbuf, bufsize,
+			&state->param, state->total_param,
+			&state->data, state->total_data,
+			state->max_data_return);
 		END_PROFILE(Trans2_findfirst);
 		break;
 	}
@@ -7368,10 +6442,11 @@
 	case TRANSACT2_FINDNEXT:
 	{
 		START_PROFILE(Trans2_findnext);
-		call_trans2findnext(conn, req,
-				    &state->param, state->total_param,
-				    &state->data, state->total_data,
-				    state->max_data_return);
+		outsize = call_trans2findnext(
+			conn, inbuf, outbuf, size, bufsize, 
+			&state->param, state->total_param,
+			&state->data, state->total_data,
+			state->max_data_return);
 		END_PROFILE(Trans2_findnext);
 		break;
 	}
@@ -7379,10 +6454,11 @@
 	case TRANSACT2_QFSINFO:
 	{
 		START_PROFILE(Trans2_qfsinfo);
-		call_trans2qfsinfo(conn, req,
-				   &state->param, state->total_param,
-				   &state->data, state->total_data,
-				   state->max_data_return);
+		outsize = call_trans2qfsinfo(
+			conn, inbuf, outbuf, size, bufsize,
+			&state->param, state->total_param,
+			&state->data, state->total_data,
+			state->max_data_return);
 		END_PROFILE(Trans2_qfsinfo);
 	    break;
 	}
@@ -7390,10 +6466,11 @@
 	case TRANSACT2_SETFSINFO:
 	{
 		START_PROFILE(Trans2_setfsinfo);
-		call_trans2setfsinfo(conn, req,
-				     &state->param, state->total_param,
-				     &state->data, state->total_data,
-				     state->max_data_return);
+		outsize = call_trans2setfsinfo(
+			conn, inbuf, outbuf, size, bufsize, 
+			&state->param, state->total_param,
+			&state->data, state->total_data,
+			state->max_data_return);
 		END_PROFILE(Trans2_setfsinfo);
 		break;
 	}
@@ -7402,10 +6479,11 @@
 	case TRANSACT2_QFILEINFO:
 	{
 		START_PROFILE(Trans2_qpathinfo);
-		call_trans2qfilepathinfo(conn, req, state->call,
-					 &state->param, state->total_param,
-					 &state->data, state->total_data,
-					 state->max_data_return);
+		outsize = call_trans2qfilepathinfo(
+			conn, inbuf, outbuf, size, bufsize, state->call,
+			&state->param, state->total_param,
+			&state->data, state->total_data,
+			state->max_data_return);
 		END_PROFILE(Trans2_qpathinfo);
 		break;
 	}
@@ -7414,10 +6492,11 @@
 	case TRANSACT2_SETFILEINFO:
 	{
 		START_PROFILE(Trans2_setpathinfo);
-		call_trans2setfilepathinfo(conn, req, state->call,
-					   &state->param, state->total_param,
-					   &state->data, state->total_data,
-					   state->max_data_return);
+		outsize = call_trans2setfilepathinfo(
+			conn, inbuf, outbuf, size, bufsize, state->call,
+			&state->param, state->total_param,
+			&state->data, state->total_data,
+			state->max_data_return);
 		END_PROFILE(Trans2_setpathinfo);
 		break;
 	}
@@ -7425,10 +6504,11 @@
 	case TRANSACT2_FINDNOTIFYFIRST:
 	{
 		START_PROFILE(Trans2_findnotifyfirst);
-		call_trans2findnotifyfirst(conn, req,
-					   &state->param, state->total_param,
-					   &state->data, state->total_data,
-					   state->max_data_return);
+		outsize = call_trans2findnotifyfirst(
+			conn, inbuf, outbuf, size, bufsize, 
+			&state->param, state->total_param,
+			&state->data, state->total_data,
+			state->max_data_return);
 		END_PROFILE(Trans2_findnotifyfirst);
 		break;
 	}
@@ -7436,10 +6516,11 @@
 	case TRANSACT2_FINDNOTIFYNEXT:
 	{
 		START_PROFILE(Trans2_findnotifynext);
-		call_trans2findnotifynext(conn, req,
-					  &state->param, state->total_param,
-					  &state->data, state->total_data,
-					  state->max_data_return);
+		outsize = call_trans2findnotifynext(
+			conn, inbuf, outbuf, size, bufsize, 
+			&state->param, state->total_param,
+			&state->data, state->total_data,
+			state->max_data_return);
 		END_PROFILE(Trans2_findnotifynext);
 		break;
 	}
@@ -7447,10 +6528,11 @@
 	case TRANSACT2_MKDIR:
 	{
 		START_PROFILE(Trans2_mkdir);
-		call_trans2mkdir(conn, req,
-				 &state->param, state->total_param,
-				 &state->data, state->total_data,
-				 state->max_data_return);
+		outsize = call_trans2mkdir(
+			conn, inbuf, outbuf, size, bufsize,
+			&state->param, state->total_param,
+			&state->data, state->total_data,
+			state->max_data_return);
 		END_PROFILE(Trans2_mkdir);
 		break;
 	}
@@ -7458,10 +6540,11 @@
 	case TRANSACT2_GET_DFS_REFERRAL:
 	{
 		START_PROFILE(Trans2_get_dfs_referral);
-		call_trans2getdfsreferral(conn, req,
-					  &state->param, state->total_param,
-					  &state->data, state->total_data,
-					  state->max_data_return);
+		outsize = call_trans2getdfsreferral(
+			conn, inbuf, outbuf, size, bufsize,
+			&state->param, state->total_param,
+			&state->data, state->total_data,
+			state->max_data_return);
 		END_PROFILE(Trans2_get_dfs_referral);
 		break;
 	}
@@ -7469,10 +6552,11 @@
 	case TRANSACT2_IOCTL:
 	{
 		START_PROFILE(Trans2_ioctl);
-		call_trans2ioctl(conn, req,
-				 &state->param, state->total_param,
-				 &state->data, state->total_data,
-				 state->max_data_return);
+		outsize = call_trans2ioctl(
+			conn, inbuf, outbuf, size, bufsize,
+			&state->param, state->total_param,
+			&state->data, state->total_data,
+			state->max_data_return);
 		END_PROFILE(Trans2_ioctl);
 		break;
 	}
@@ -7480,90 +6564,66 @@
 	default:
 		/* Error in request */
 		DEBUG(2,("Unknown request %d in trans2 call\n", state->call));
-		reply_doserror(req, ERRSRV,ERRerror);
+		outsize = ERROR_DOS(ERRSRV,ERRerror);
 	}
+
+	return outsize;
 }
 
 /****************************************************************************
  Reply to a SMBtrans2.
  ****************************************************************************/
 
-void reply_trans2(struct smb_request *req)
+int reply_trans2(connection_struct *conn, char *inbuf,char *outbuf,
+		 int size, int bufsize)
 {
-	connection_struct *conn = req->conn;
-	unsigned int dsoff;
-	unsigned int dscnt;
-	unsigned int psoff;
-	unsigned int pscnt;
-	unsigned int tran_call;
-	unsigned int size;
-	unsigned int av_size;
+	int outsize = 0;
+	unsigned int dsoff = SVAL(inbuf, smb_dsoff);
+	unsigned int dscnt = SVAL(inbuf, smb_dscnt);
+	unsigned int psoff = SVAL(inbuf, smb_psoff);
+	unsigned int pscnt = SVAL(inbuf, smb_pscnt);
+	unsigned int tran_call = SVAL(inbuf, smb_setup0);
+	unsigned int av_size = size-4;
 	struct trans_state *state;
 	NTSTATUS result;
 
 	START_PROFILE(SMBtrans2);
 
-	if (req->wct < 14) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBtrans2);
-		return;
-	}
-
-	dsoff = SVAL(req->inbuf, smb_dsoff);
-	dscnt = SVAL(req->inbuf, smb_dscnt);
-	psoff = SVAL(req->inbuf, smb_psoff);
-	pscnt = SVAL(req->inbuf, smb_pscnt);
-	tran_call = SVAL(req->inbuf, smb_setup0);
-	size = smb_len(req->inbuf) + 4;
-	av_size = smb_len(req->inbuf);
-
-	result = allow_new_trans(conn->pending_trans, req->mid);
+	result = allow_new_trans(conn->pending_trans, SVAL(inbuf, smb_mid));
 	if (!NT_STATUS_IS_OK(result)) {
 		DEBUG(2, ("Got invalid trans2 request: %s\n",
 			  nt_errstr(result)));
-		reply_nterror(req, result);
 		END_PROFILE(SMBtrans2);
-		return;
+		return ERROR_NT(result);
 	}
 
-	if (IS_IPC(conn)) {
-		switch (tran_call) {
-		/* List the allowed trans2 calls on IPC$ */
-		case TRANSACT2_OPEN:
-		case TRANSACT2_GET_DFS_REFERRAL:
-		case TRANSACT2_QFILEINFO:
-		case TRANSACT2_QFSINFO:
-		case TRANSACT2_SETFSINFO:
-			break;
-		default:
-			reply_doserror(req, ERRSRV, ERRaccess);
-			END_PROFILE(SMBtrans2);
-			return;
-		}
+	if (IS_IPC(conn) && (tran_call != TRANSACT2_OPEN)
+            && (tran_call != TRANSACT2_GET_DFS_REFERRAL)) {
+		END_PROFILE(SMBtrans2);
+		return ERROR_DOS(ERRSRV,ERRaccess);
 	}
 
 	if ((state = TALLOC_P(conn->mem_ctx, struct trans_state)) == NULL) {
 		DEBUG(0, ("talloc failed\n"));
-		reply_nterror(req, NT_STATUS_NO_MEMORY);
 		END_PROFILE(SMBtrans2);
-		return;
+		return ERROR_NT(NT_STATUS_NO_MEMORY);
 	}
 
 	state->cmd = SMBtrans2;
 
-	state->mid = req->mid;
-	state->vuid = req->vuid;
-	state->setup_count = SVAL(req->inbuf, smb_suwcnt);
+	state->mid = SVAL(inbuf, smb_mid);
+	state->vuid = SVAL(inbuf, smb_uid);
+	state->setup_count = SVAL(inbuf, smb_suwcnt);
 	state->setup = NULL;
-	state->total_param = SVAL(req->inbuf, smb_tpscnt);
+	state->total_param = SVAL(inbuf, smb_tpscnt);
 	state->param = NULL;
-	state->total_data =  SVAL(req->inbuf, smb_tdscnt);
+	state->total_data =  SVAL(inbuf, smb_tdscnt);
 	state->data = NULL;
-	state->max_param_return = SVAL(req->inbuf, smb_mprcnt);
-	state->max_data_return  = SVAL(req->inbuf, smb_mdrcnt);
-	state->max_setup_return = SVAL(req->inbuf, smb_msrcnt);
-	state->close_on_completion = BITSETW(req->inbuf+smb_vwv5,0);
-	state->one_way = BITSETW(req->inbuf+smb_vwv5,1);
+	state->max_param_return = SVAL(inbuf, smb_mprcnt);
+	state->max_data_return  = SVAL(inbuf, smb_mdrcnt);
+	state->max_setup_return = SVAL(inbuf, smb_msrcnt);
+	state->close_on_completion = BITSETW(inbuf+smb_vwv5,0);
+	state->one_way = BITSETW(inbuf+smb_vwv5,1);
 
 	state->call = tran_call;
 
@@ -7578,18 +6638,16 @@
 		 *  Until DosPrintSetJobInfo with PRJINFO3 is supported,
 		 *  outbuf doesn't have to be set(only job id is used).
 		 */
-		if ( (state->setup_count == 4)
-		     && (tran_call == TRANSACT2_IOCTL)
-		     && (SVAL(req->inbuf,(smb_setup+4)) == LMCAT_SPL)
-		     &&	(SVAL(req->inbuf,(smb_setup+6)) == LMFUNC_GETJOBID)) {
+		if ( (state->setup_count == 4) && (tran_call == TRANSACT2_IOCTL) &&
+				(SVAL(inbuf,(smb_setup+4)) == LMCAT_SPL) &&
+				(SVAL(inbuf,(smb_setup+6)) == LMFUNC_GETJOBID)) {
 			DEBUG(2,("Got Trans2 DevIOctl jobid\n"));
 		} else {
 			DEBUG(2,("Invalid smb_sucnt in trans2 call(%u)\n",state->setup_count));
 			DEBUG(2,("Transaction is %d\n",tran_call));
 			TALLOC_FREE(state);
-			reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
 			END_PROFILE(SMBtrans2);
-			return;
+			return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 		}
 	}
 
@@ -7604,9 +6662,8 @@
 			DEBUG(0,("reply_trans2: data malloc fail for %u "
 				 "bytes !\n", (unsigned int)state->total_data));
 			TALLOC_FREE(state);
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
 			END_PROFILE(SMBtrans2);
-			return;
+			return(ERROR_DOS(ERRDOS,ERRnomem));
 		}
 
 		if (dscnt > state->total_data ||
@@ -7617,10 +6674,10 @@
 		if (dsoff > av_size ||
 				dscnt > av_size ||
 				dsoff+dscnt > av_size) {
-			goto bad_param;
+				goto bad_param;
 		}
 
-		memcpy(state->data,smb_base(req->inbuf)+dsoff,dscnt);
+		memcpy(state->data,smb_base(inbuf)+dsoff,dscnt);
 	}
 
 	if (state->total_param) {
@@ -7632,9 +6689,8 @@
 				 "bytes !\n", (unsigned int)state->total_param));
 			SAFE_FREE(state->data);
 			TALLOC_FREE(state);
-			reply_nterror(req, NT_STATUS_NO_MEMORY);
 			END_PROFILE(SMBtrans2);
-			return;
+			return(ERROR_DOS(ERRDOS,ERRnomem));
 		} 
 
 		if (pscnt > state->total_param ||
@@ -7648,7 +6704,7 @@
 			goto bad_param;
 		}
 
-		memcpy(state->param,smb_base(req->inbuf)+psoff,pscnt);
+		memcpy(state->param,smb_base(inbuf)+psoff,pscnt);
 	}
 
 	state->received_data  = dscnt;
@@ -7657,23 +6713,23 @@
 	if ((state->received_param == state->total_param) &&
 	    (state->received_data == state->total_data)) {
 
-		handle_trans2(conn, req, state);
-
+		outsize = handle_trans2(conn, state, inbuf, outbuf,
+					size, bufsize);
 		SAFE_FREE(state->data);
 		SAFE_FREE(state->param);
 		TALLOC_FREE(state);
 		END_PROFILE(SMBtrans2);
-		return;
+		return outsize;
 	}
 
 	DLIST_ADD(conn->pending_trans, state);
 
 	/* We need to send an interim response then receive the rest
 	   of the parameter/data bytes */
-	reply_outbuf(req, 0, 0);
-	show_msg((char *)req->outbuf);
+	outsize = set_message(outbuf,0,0,False);
+	show_msg(outbuf);
 	END_PROFILE(SMBtrans2);
-	return;
+	return outsize;
 
   bad_param:
 
@@ -7682,7 +6738,7 @@
 	SAFE_FREE(state->param);
 	TALLOC_FREE(state);
 	END_PROFILE(SMBtrans2);
-	reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
+	return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 }
 
 
@@ -7690,55 +6746,45 @@
  Reply to a SMBtranss2
  ****************************************************************************/
 
-void reply_transs2(struct smb_request *req)
+int reply_transs2(connection_struct *conn,
+		  char *inbuf,char *outbuf,int size,int bufsize)
 {
-	connection_struct *conn = req->conn;
+	int outsize = 0;
 	unsigned int pcnt,poff,dcnt,doff,pdisp,ddisp;
+	unsigned int av_size = size-4;
 	struct trans_state *state;
-	unsigned int size;
-	unsigned int av_size;
 
 	START_PROFILE(SMBtranss2);
 
-	show_msg((char *)req->inbuf);
+	show_msg(inbuf);
 
-	if (req->wct < 8) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-		END_PROFILE(SMBtranss2);
-		return;
-	}
-
-	size = smb_len(req->inbuf)+4;
-	av_size = smb_len(req->inbuf);
-
 	for (state = conn->pending_trans; state != NULL;
 	     state = state->next) {
-		if (state->mid == req->mid) {
+		if (state->mid == SVAL(inbuf,smb_mid)) {
 			break;
 		}
 	}
 
 	if ((state == NULL) || (state->cmd != SMBtrans2)) {
-		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
 		END_PROFILE(SMBtranss2);
-		return;
+		return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 	}
 
 	/* Revise state->total_param and state->total_data in case they have
 	   changed downwards */
 
-	if (SVAL(req->inbuf, smb_tpscnt) < state->total_param)
-		state->total_param = SVAL(req->inbuf, smb_tpscnt);
-	if (SVAL(req->inbuf, smb_tdscnt) < state->total_data)
-		state->total_data = SVAL(req->inbuf, smb_tdscnt);
+	if (SVAL(inbuf, smb_tpscnt) < state->total_param)
+		state->total_param = SVAL(inbuf, smb_tpscnt);
+	if (SVAL(inbuf, smb_tdscnt) < state->total_data)
+		state->total_data = SVAL(inbuf, smb_tdscnt);
 
-	pcnt = SVAL(req->inbuf, smb_spscnt);
-	poff = SVAL(req->inbuf, smb_spsoff);
-	pdisp = SVAL(req->inbuf, smb_spsdisp);
+	pcnt = SVAL(inbuf, smb_spscnt);
+	poff = SVAL(inbuf, smb_spsoff);
+	pdisp = SVAL(inbuf, smb_spsdisp);
 
-	dcnt = SVAL(req->inbuf, smb_sdscnt);
-	doff = SVAL(req->inbuf, smb_sdsoff);
-	ddisp = SVAL(req->inbuf, smb_sdsdisp);
+	dcnt = SVAL(inbuf, smb_sdscnt);
+	doff = SVAL(inbuf, smb_sdsoff);
+	ddisp = SVAL(inbuf, smb_sdsdisp);
 
 	state->received_param += pcnt;
 	state->received_data += dcnt;
@@ -7762,7 +6808,7 @@
 			goto bad_param;
 		}
 
-		memcpy(state->param+pdisp,smb_base(req->inbuf)+poff,
+		memcpy(state->param+pdisp,smb_base(inbuf)+poff,
 		       pcnt);
 	}
 
@@ -7781,31 +6827,35 @@
 			goto bad_param;
 		}
 
-		memcpy(state->data+ddisp, smb_base(req->inbuf)+doff,
+		memcpy(state->data+ddisp, smb_base(inbuf)+doff,
 		       dcnt);      
 	}
 
 	if ((state->received_param < state->total_param) ||
 	    (state->received_data < state->total_data)) {
 		END_PROFILE(SMBtranss2);
-		return;
+		return -1;
 	}
 
-	/*
-	 * construct_reply_common will copy smb_com from inbuf to
-	 * outbuf. SMBtranss2 is wrong here.
+	/* construct_reply_common has done us the favor to pre-fill the
+	 * command field with SMBtranss2 which is wrong :-)
 	 */
-	SCVAL(req->inbuf,smb_com,SMBtrans2);
+	SCVAL(outbuf,smb_com,SMBtrans2);
 
-	handle_trans2(conn, req, state);
+	outsize = handle_trans2(conn, state, inbuf, outbuf, size, bufsize);
 
 	DLIST_REMOVE(conn->pending_trans, state);
 	SAFE_FREE(state->data);
 	SAFE_FREE(state->param);
 	TALLOC_FREE(state);
 
+	if (outsize == 0) {
+		END_PROFILE(SMBtranss2);
+		return(ERROR_DOS(ERRSRV,ERRnosupport));
+	}
+	
 	END_PROFILE(SMBtranss2);
-	return;
+	return(outsize);
 
   bad_param:
 
@@ -7814,7 +6864,6 @@
 	SAFE_FREE(state->data);
 	SAFE_FREE(state->param);
 	TALLOC_FREE(state);
-	reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
 	END_PROFILE(SMBtranss2);
-	return;
+	return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 }

Modified: branches/samba/upstream/source/smbd/uid.c
===================================================================
--- branches/samba/upstream/source/smbd/uid.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/uid.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -49,7 +50,7 @@
  Become the guest user without changing the security context stack.
 ****************************************************************************/
 
-bool change_to_guest(void)
+BOOL change_to_guest(void)
 {
 	static struct passwd *pass=NULL;
 
@@ -81,11 +82,11 @@
  Check if a username is OK.
 ********************************************************************/
 
-static bool check_user_ok(connection_struct *conn, user_struct *vuser,int snum)
+static BOOL check_user_ok(connection_struct *conn, user_struct *vuser,int snum)
 {
 	unsigned int i;
 	struct vuid_cache_entry *ent = NULL;
-	bool readonly_share;
+	BOOL readonly_share;
 	NT_USER_TOKEN *token;
 
 	for (i=0;i<conn->vuid_cache.entries && i< VUID_CACHE_SIZE;i++) {
@@ -146,14 +147,14 @@
  stack, but modify the current_user entries.
 ****************************************************************************/
 
-bool change_to_user(connection_struct *conn, uint16 vuid)
+BOOL change_to_user(connection_struct *conn, uint16 vuid)
 {
 	user_struct *vuser = get_valid_user_struct(vuid);
 	int snum;
 	gid_t gid;
 	uid_t uid;
 	char group_c;
-	bool must_free_token = False;
+	BOOL must_free_token = False;
 	NT_USER_TOKEN *token = NULL;
 	int num_groups = 0;
 	gid_t *group_list = NULL;
@@ -279,7 +280,7 @@
  but modify the current_user entries.
 ****************************************************************************/
 
-bool change_to_root_user(void)
+BOOL change_to_root_user(void)
 {
 	set_root_sec_ctx();
 
@@ -298,7 +299,7 @@
  user. Doesn't modify current_user.
 ****************************************************************************/
 
-bool become_authenticated_pipe_user(pipes_struct *p)
+BOOL become_authenticated_pipe_user(pipes_struct *p)
 {
 	if (!push_sec_ctx())
 		return False;
@@ -317,7 +318,7 @@
  current_user.
 ****************************************************************************/
 
-bool unbecome_authenticated_pipe_user(void)
+BOOL unbecome_authenticated_pipe_user(void)
 {
 	return pop_sec_ctx();
 }
@@ -387,13 +388,7 @@
 
 void become_root(void)
 {
-	 /*
-	  * no good way to handle push_sec_ctx() failing without changing
-	  * the prototype of become_root()
-	  */
-	if (!push_sec_ctx()) {
-		smb_panic("become_root: push_sec_ctx failed");
-	}
+	push_sec_ctx();
 	push_conn_ctx();
 	set_root_sec_ctx();
 }
@@ -411,7 +406,7 @@
  Saves and restores the connection context.
 ****************************************************************************/
 
-bool become_user(connection_struct *conn, uint16 vuid)
+BOOL become_user(connection_struct *conn, uint16 vuid)
 {
 	if (!push_sec_ctx())
 		return False;
@@ -427,7 +422,7 @@
 	return True;
 }
 
-bool unbecome_user(void)
+BOOL unbecome_user(void)
 {
 	pop_sec_ctx();
 	pop_conn_ctx();

Modified: branches/samba/upstream/source/smbd/utmp.c
===================================================================
--- branches/samba/upstream/source/smbd/utmp.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/utmp.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -112,14 +113,14 @@
  * Not WITH_UTMP?  Simply supply dummy routines.
  */
 
-void sys_utmp_claim(const char *username, const char *hostname,
-			const char *ip_addr_str,
-			const char *id_str, int id_num)
+void sys_utmp_claim(const char *username, const char *hostname, 
+		    struct in_addr *ipaddr,
+		    const char *id_str, int id_num)
 {}
 
-void sys_utmp_yield(const char *username, const char *hostname,
-			const char *ip_addr_str,
-			const char *id_str, int id_num)
+void sys_utmp_yield(const char *username, const char *hostname, 
+		    struct in_addr *ipaddr,
+		    const char *id_str, int id_num)
 {}
 
 #else /* WITH_UTMP */
@@ -207,36 +208,30 @@
  * utmp{,x}:  try "utmp dir", then default (a define)
  * wtmp{,x}:  try "wtmp dir", then "utmp dir", then default (a define)
  */
-static char *uw_pathname(TALLOC_CTX *ctx,
-		const char *uw_name,
-		const char *uw_default)
+static void uw_pathname(pstring fname, const char *uw_name, const char *uw_default)
 {
-	char *dirname = NULL;
+	pstring dirname;
 
+	pstrcpy(dirname, "");
+
 	/* For w-files, first look for explicit "wtmp dir" */
 	if (uw_name[0] == 'w') {
-		dirname = talloc_strdup(ctx, lp_wtmpdir());
-		if (!dirname) {
-			return NULL;
-		}
+		pstrcpy(dirname,lp_wtmpdir());
 		trim_char(dirname,'\0','/');
 	}
 
 	/* For u-files and non-explicit w-dir, look for "utmp dir" */
-	if ((dirname == NULL) || (strlen(dirname) == 0)) {
-		dirname = talloc_strdup(ctx, lp_utmpdir());
-		if (!dirname) {
-			return NULL;
-		}
+	if (strlen(dirname) == 0) {
+		pstrcpy(dirname,lp_utmpdir());
 		trim_char(dirname,'\0','/');
 	}
 
 	/* If explicit directory above, use it */
-	if (dirname && strlen(dirname) != 0) {
-		return talloc_asprintf(ctx,
-				"%s/%s",
-				dirname,
-				uw_name);
+	if (strlen(dirname) != 0) {
+		pstrcpy(fname, dirname);
+		pstrcat(fname, "/");
+		pstrcat(fname, uw_name);
+		return;
 	}
 
 	/* No explicit directory: attempt to use default paths */
@@ -246,15 +241,16 @@
 		 */
 		DEBUG(2,("uw_pathname: unable to determine pathname\n"));
 	}
-	return talloc_strdup(ctx, uw_default);
+	pstrcpy(fname, uw_default);
 }
 
 #ifndef HAVE_PUTUTLINE
+
 /****************************************************************************
  Update utmp file directly.  No subroutine interface: probably a BSD system.
 ****************************************************************************/
 
-static void pututline_my(const char *uname, struct utmp *u, bool claim)
+static void pututline_my(pstring uname, struct utmp *u, BOOL claim)
 {
 	DEBUG(1,("pututline_my: not yet implemented\n"));
 	/* BSD implementor: may want to consider (or not) adjusting "lastlog" */
@@ -268,7 +264,7 @@
  Credit: Michail Vidiassov <master at iaas.msu.ru>
 ****************************************************************************/
 
-static void updwtmp_my(const char *wname, struct utmp *u, bool claim)
+static void updwtmp_my(pstring wname, struct utmp *u, BOOL claim)
 {
 	int fd;
 	struct stat buf;
@@ -311,18 +307,14 @@
  Update via utmp/wtmp (not utmpx/wtmpx).
 ****************************************************************************/
 
-static void utmp_nox_update(struct utmp *u, bool claim)
+static void utmp_nox_update(struct utmp *u, BOOL claim)
 {
-	char *uname = NULL;
-	char *wname = NULL;
+	pstring uname, wname;
 #if defined(PUTUTLINE_RETURNS_UTMP)
 	struct utmp *urc;
 #endif /* PUTUTLINE_RETURNS_UTMP */
 
-	uname = uw_pathname(talloc_tos(), "utmp", ut_pathname);
-	if (!uname) {
-		return;
-	}
+	uw_pathname(uname, "utmp", ut_pathname);
 	DEBUG(2,("utmp_nox_update: uname:%s\n", uname));
 
 #ifdef HAVE_PUTUTLINE
@@ -350,10 +342,7 @@
 	}
 #endif /* HAVE_PUTUTLINE */
 
-	wname = uw_pathname(talloc_tos(), "wtmp", wt_pathname);
-	if (!wname) {
-		return;
-	}
+	uw_pathname(wname, "wtmp", wt_pathname);
 	DEBUG(2,("utmp_nox_update: wname:%s\n", wname));
 	if (strlen(wname) != 0) {
 #ifdef HAVE_UPDWTMP
@@ -396,7 +385,7 @@
  Update via utmpx/wtmpx (preferred) or via utmp/wtmp.
 ****************************************************************************/
 
-static void sys_utmp_update(struct utmp *u, const char *hostname, bool claim)
+static void sys_utmp_update(struct utmp *u, const char *hostname, BOOL claim)
 {
 #if !defined(HAVE_UTMPX_H)
 	/* No utmpx stuff.  Drop to non-x stuff */
@@ -409,13 +398,8 @@
 	/* Odd.  Have utmpx.h but no "getutmpx()".  Drop to non-x stuff */
 	DEBUG(1,("utmp_update: have utmpx.h but no getutmpx() function\n"));
 	utmp_nox_update(u, claim);
-#elif !defined(HAVE_UPDWTMPX)
-	/* Have utmpx.h but no "updwtmpx()".  Drop to non-x stuff */
-	DEBUG(1,("utmp_update: have utmpx.h but no updwtmpx() function\n"));
-	utmp_nox_update(u, claim);
 #else
-	char *uname = NULL;
-	char *wname = NULL;
+	pstring uname, wname;
 	struct utmpx ux, *uxrc;
 
 	getutmpx(u, &ux);
@@ -430,12 +414,9 @@
 	utmp_strcpy(ux.ut_host, hostname, sizeof(ux.ut_host));
 #endif
 
-	uname = uw_pathname(talloc_tos(), "utmpx", ux_pathname);
-	wname = uw_pathname(talloc_tos(), "wtmpx", wx_pathname);
-	if (uname && wname) {
-		DEBUG(2,("utmp_update: uname:%s wname:%s\n", uname, wname));
-	}
-
+	uw_pathname(uname, "utmpx", ux_pathname);
+	uw_pathname(wname, "wtmpx", wx_pathname);
+	DEBUG(2,("utmp_update: uname:%s wname:%s\n", uname, wname));
 	/*
 	 * Check for either uname or wname being empty.
 	 * Some systems, such as Redhat 6, have a "utmpx.h" which doesn't
@@ -443,7 +424,7 @@
 	 * Also, our local installation has not provided an override.
 	 * Drop to non-x method.  (E.g. RH6 has good defaults in "utmp.h".)
 	 */
-	if (!uname || !wname || (strlen(uname) == 0) || (strlen(wname) == 0)) {
+	if ((strlen(uname) == 0) || (strlen(wname) == 0)) {
 		utmp_nox_update(u, claim);
 	} else {
 		utmpxname(uname);
@@ -468,7 +449,7 @@
 {
 	int nbase;
 	const char *ut_id_encstr = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
-
+	
 	fourbyte[0] = 'S';
 	fourbyte[1] = 'M';
 
@@ -490,13 +471,13 @@
 
 
 /*
-  fill a system utmp structure given all the info we can gather
+  fill a system utmp structure given all the info we can gather 
 */
-static bool sys_utmp_fill(struct utmp *u,
-			const char *username, const char *hostname,
-			const char *ip_addr_str,
-			const char *id_str, int id_num)
-{
+static BOOL sys_utmp_fill(struct utmp *u,
+			  const char *username, const char *hostname,
+			  struct in_addr *ipaddr,
+			  const char *id_str, int id_num)
+{			  
 	struct timeval timeval;
 
 	/*
@@ -527,7 +508,7 @@
 #endif
 
 /*
- * ut_time, ut_tv:
+ * ut_time, ut_tv: 
  *	Some have one, some the other.  Many have both, but defined (aliased).
  *	It is easier and clearer simply to let the following take its course.
  *	But note that we do the more precise ut_tv as the final assignment.
@@ -545,22 +526,9 @@
 #if defined(HAVE_UT_UT_HOST)
 	utmp_strcpy(u->ut_host, hostname, sizeof(u->ut_host));
 #endif
-#if defined(HAVE_IPV6) && defined(HAVE_UT_UT_ADDR_V6)
-	memset(&u->ut_addr_v6, '\0', sizeof(u->ut_addr_v6));
-	if (ip_addr_str) {
-		struct in6_addr addr;
-		if (inet_pton(AF_INET6, ip_addr_str, &addr) > 0) {
-			memcpy(&u->ut_addr_v6, &addr, sizeof(addr));
-		}
-	}
-#elif defined(HAVE_UT_UT_ADDR)
-	memset(&u->ut_addr, '\0', sizeof(u->ut_addr));
-	if (ip_addr_str) {
-		struct in_addr addr;
-		if (inet_pton(AF_INET, ip_addr_str, &addr) > 0) {
-			memcpy(&u->ut_addr, &addr, sizeof(addr));
-		}
-	}
+#if defined(HAVE_UT_UT_ADDR)
+	if (ipaddr)
+		u->ut_addr = ipaddr->s_addr;
 	/*
 	 * "(unsigned long) ut_addr" apparently exists on at least HP-UX 10.20.
 	 * Volunteer to implement, please ...
@@ -581,9 +549,9 @@
  Close a connection.
 ****************************************************************************/
 
-void sys_utmp_yield(const char *username, const char *hostname,
-			const char *ip_addr_str,
-			const char *id_str, int id_num)
+void sys_utmp_yield(const char *username, const char *hostname, 
+		    struct in_addr *ipaddr,
+		    const char *id_str, int id_num)
 {
 	struct utmp u;
 
@@ -598,8 +566,7 @@
 	u.ut_type = DEAD_PROCESS;
 #endif
 
-	if (!sys_utmp_fill(&u, username, hostname, ip_addr_str, id_str, id_num))
-		return;
+	if (!sys_utmp_fill(&u, username, hostname, ipaddr, id_str, id_num)) return;
 
 	sys_utmp_update(&u, NULL, False);
 }
@@ -608,9 +575,9 @@
  Claim a entry in whatever utmp system the OS uses.
 ****************************************************************************/
 
-void sys_utmp_claim(const char *username, const char *hostname,
-			const char *ip_addr_str,
-			const char *id_str, int id_num)
+void sys_utmp_claim(const char *username, const char *hostname, 
+		    struct in_addr *ipaddr,
+		    const char *id_str, int id_num)
 {
 	struct utmp u;
 
@@ -620,8 +587,7 @@
 	u.ut_type = USER_PROCESS;
 #endif
 
-	if (!sys_utmp_fill(&u, username, hostname, ip_addr_str, id_str, id_num))
-		return;
+	if (!sys_utmp_fill(&u, username, hostname, ipaddr, id_str, id_num)) return;
 
 	sys_utmp_update(&u, hostname, True);
 }

Modified: branches/samba/upstream/source/smbd/vfs.c
===================================================================
--- branches/samba/upstream/source/smbd/vfs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/smbd/vfs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
    This work was sponsored by Optifacio Software Services, Inc.
 */
@@ -31,7 +32,7 @@
 
 struct vfs_init_function_entry {
 	char *name;
-	const vfs_op_tuple *vfs_op_tuples;
+ 	vfs_op_tuple *vfs_op_tuples;
 	struct vfs_init_function_entry *prev, *next;
 };
 
@@ -44,8 +45,6 @@
 static struct vfs_init_function_entry *vfs_find_backend_entry(const char *name)
 {
 	struct vfs_init_function_entry *entry = backends;
-
-	DEBUG(10, ("vfs_find_backend_entry called for %s\n", name));
  
 	while(entry) {
 		if (strcmp(entry->name, name)==0) return entry;
@@ -55,7 +54,7 @@
 	return NULL;
 }
 
-NTSTATUS smb_register_vfs(int version, const char *name, const vfs_op_tuple *vfs_op_tuples)
+NTSTATUS smb_register_vfs(int version, const char *name, vfs_op_tuple *vfs_op_tuples)
 {
 	struct vfs_init_function_entry *entry = backends;
 
@@ -108,15 +107,14 @@
 	((void **)(void *)&vfs->ops)[which] = op;
 }
 
-bool vfs_init_custom(connection_struct *conn, const char *vfs_object)
+BOOL vfs_init_custom(connection_struct *conn, const char *vfs_object)
 {
-	const vfs_op_tuple *ops;
-	char *module_path = NULL;
+	vfs_op_tuple *ops;
 	char *module_name = NULL;
 	char *module_param = NULL, *p;
 	int i;
 	vfs_handle_struct *handle;
-	const struct vfs_init_function_entry *entry;
+	struct vfs_init_function_entry *entry;
 	
 	if (!conn||!vfs_object||!vfs_object[0]) {
 		DEBUG(0,("vfs_init_custon() called with NULL pointer or emtpy vfs_object!\n"));
@@ -129,9 +127,9 @@
 
 	DEBUG(3, ("Initialising custom vfs hooks from [%s]\n", vfs_object));
 
-	module_path = smb_xstrdup(vfs_object);
+	module_name = smb_xstrdup(vfs_object);
 
-	p = strchr_m(module_path, ':');
+	p = strchr_m(module_name, ':');
 
 	if (p) {
 		*p = 0;
@@ -139,48 +137,31 @@
 		trim_char(module_param, ' ', ' ');
 	}
 
-	trim_char(module_path, ' ', ' ');
+	trim_char(module_name, ' ', ' ');
 
-	module_name = smb_xstrdup(module_path);
-
-	if ((module_name[0] == '/') &&
-	    (strcmp(module_path, DEFAULT_VFS_MODULE_NAME) != 0)) {
-
-		/*
-		 * Extract the module name from the path. Just use the base
-		 * name of the last path component.
-		 */
-
-		SAFE_FREE(module_name);
-		module_name = smb_xstrdup(strrchr_m(module_path, '/')+1);
-
-		p = strchr_m(module_name, '.');
-
-		if (p != NULL) {
-			*p = '\0';
-		}
-	}
-
 	/* First, try to load the module with the new module system */
 	if((entry = vfs_find_backend_entry(module_name)) || 
-	   (NT_STATUS_IS_OK(smb_probe_module("vfs", module_path)) &&
+	   (NT_STATUS_IS_OK(smb_probe_module("vfs", module_name)) && 
 		(entry = vfs_find_backend_entry(module_name)))) {
 
 		DEBUGADD(5,("Successfully loaded vfs module [%s] with the new modules system\n", vfs_object));
 		
 	 	if ((ops = entry->vfs_op_tuples) == NULL) {
 	 		DEBUG(0, ("entry->vfs_op_tuples==NULL for [%s] failed\n", vfs_object));
-			goto fail;
+	 		SAFE_FREE(module_name);
+	 		return False;
 	 	}
 	} else {
 		DEBUG(0,("Can't find a vfs module [%s]\n",vfs_object));
-		goto fail;
+		SAFE_FREE(module_name);
+		return False;
 	}
 
 	handle = TALLOC_ZERO_P(conn->mem_ctx,vfs_handle_struct);
 	if (!handle) {
 		DEBUG(0,("TALLOC_ZERO() failed!\n"));
-		goto fail;
+		SAFE_FREE(module_name);
+		return False;
 	}
 	memcpy(&handle->vfs_next, &conn->vfs, sizeof(struct vfs_ops));
 	handle->conn = conn;
@@ -203,14 +184,8 @@
 		vfs_set_operation(&conn->vfs, ops[i].type, handle, ops[i].op);
 	}
 
-	SAFE_FREE(module_path);
 	SAFE_FREE(module_name);
 	return True;
-
- fail:
-	SAFE_FREE(module_path);
-	SAFE_FREE(module_name);
-	return False;
 }
 
 /*****************************************************************
@@ -263,38 +238,26 @@
 	}
 }
 
-void *vfs_memctx_fsp_extension(vfs_handle_struct *handle, files_struct *fsp)
+void *vfs_fetch_fsp_extension(vfs_handle_struct *handle, files_struct *fsp)
 {
 	struct vfs_fsp_data *head;
 
 	for (head = fsp->vfs_extension; head; head = head->next) {
 		if (head->owner == handle) {
-			return head;
+			return EXT_DATA_AREA(head);
 		}
 	}
 
 	return NULL;
 }
 
-void *vfs_fetch_fsp_extension(vfs_handle_struct *handle, files_struct *fsp)
-{
-	struct vfs_fsp_data *head;
-
-	head = (struct vfs_fsp_data *)vfs_memctx_fsp_extension(handle, fsp);
-	if (head != NULL) {
-		return EXT_DATA_AREA(head);
-	}
-
-	return NULL;
-}
-
 #undef EXT_DATA_AREA
 
 /*****************************************************************
  Generic VFS init.
 ******************************************************************/
 
-bool smbd_vfs_init(connection_struct *conn)
+BOOL smbd_vfs_init(connection_struct *conn)
 {
 	const char **vfs_objects;
 	unsigned int i = 0;
@@ -325,10 +288,10 @@
  Check if directory exists.
 ********************************************************************/
 
-bool vfs_directory_exist(connection_struct *conn, const char *dname, SMB_STRUCT_STAT *st)
+BOOL vfs_directory_exist(connection_struct *conn, const char *dname, SMB_STRUCT_STAT *st)
 {
 	SMB_STRUCT_STAT st2;
-	bool ret;
+	BOOL ret;
 
 	if (!st)
 		st = &st2;
@@ -347,7 +310,7 @@
  Check if an object exists in the vfs.
 ********************************************************************/
 
-bool vfs_object_exist(connection_struct *conn,const char *fname,SMB_STRUCT_STAT *sbuf)
+BOOL vfs_object_exist(connection_struct *conn,const char *fname,SMB_STRUCT_STAT *sbuf)
 {
 	SMB_STRUCT_STAT st;
 
@@ -365,7 +328,7 @@
  Check if a file exists in the vfs.
 ********************************************************************/
 
-bool vfs_file_exist(connection_struct *conn, const char *fname,SMB_STRUCT_STAT *sbuf)
+BOOL vfs_file_exist(connection_struct *conn, const char *fname,SMB_STRUCT_STAT *sbuf)
 {
 	SMB_STRUCT_STAT st;
 
@@ -389,8 +352,8 @@
 
 	while (total < byte_count)
 	{
-		ssize_t ret = SMB_VFS_READ(fsp, buf + total,
-					   byte_count - total);
+		ssize_t ret = SMB_VFS_READ(fsp, fsp->fh->fd, buf + total,
+					byte_count - total);
 
 		if (ret == 0) return total;
 		if (ret == -1) {
@@ -411,7 +374,7 @@
 
 	while (total < byte_count)
 	{
-		ssize_t ret = SMB_VFS_PREAD(fsp, buf + total,
+		ssize_t ret = SMB_VFS_PREAD(fsp, fsp->fh->fd, buf + total,
 					byte_count - total, offset + total);
 
 		if (ret == 0) return total;
@@ -430,27 +393,13 @@
  Write data to a fd on the vfs.
 ****************************************************************************/
 
-ssize_t vfs_write_data(struct smb_request *req,
-			files_struct *fsp,
-			const char *buffer,
-			size_t N)
+ssize_t vfs_write_data(files_struct *fsp,const char *buffer,size_t N)
 {
 	size_t total=0;
 	ssize_t ret;
 
-	if (req && req->unread_bytes) {
-		SMB_ASSERT(req->unread_bytes == N);
-		/* VFS_RECVFILE must drain the socket
-		 * before returning. */
-		req->unread_bytes = 0;
-		return SMB_VFS_RECVFILE(smbd_server_fd(),
-					fsp,
-					(SMB_OFF_T)-1,
-					N);
-	}
-
 	while (total < N) {
-		ret = SMB_VFS_WRITE(fsp, buffer + total, N - total);
+		ret = SMB_VFS_WRITE(fsp,fsp->fh->fd,buffer + total,N - total);
 
 		if (ret == -1)
 			return -1;
@@ -462,29 +411,15 @@
 	return (ssize_t)total;
 }
 
-ssize_t vfs_pwrite_data(struct smb_request *req,
-			files_struct *fsp,
-			const char *buffer,
-			size_t N,
-			SMB_OFF_T offset)
+ssize_t vfs_pwrite_data(files_struct *fsp,const char *buffer,
+                size_t N, SMB_OFF_T offset)
 {
 	size_t total=0;
 	ssize_t ret;
 
-	if (req && req->unread_bytes) {
-		SMB_ASSERT(req->unread_bytes == N);
-		/* VFS_RECVFILE must drain the socket
-		 * before returning. */
-		req->unread_bytes = 0;
-		return SMB_VFS_RECVFILE(smbd_server_fd(),
-					fsp,
-					offset,
-					N);
-	}
-
 	while (total < N) {
-		ret = SMB_VFS_PWRITE(fsp, buffer + total, N - total,
-				     offset + total);
+		ret = SMB_VFS_PWRITE(fsp, fsp->fh->fd, buffer + total,
+                                N - total, offset + total);
 
 		if (ret == -1)
 			return -1;
@@ -523,7 +458,7 @@
 		return -1;
 	}
 
-	ret = SMB_VFS_FSTAT(fsp, &st);
+	ret = SMB_VFS_FSTAT(fsp,fsp->fh->fd,&st);
 	if (ret == -1)
 		return ret;
 
@@ -537,7 +472,7 @@
 				fsp->fsp_name, (double)st.st_size ));
 
 		flush_write_cache(fsp, SIZECHANGE_FLUSH);
-		if ((ret = SMB_VFS_FTRUNCATE(fsp, (SMB_OFF_T)len)) != -1) {
+		if ((ret = SMB_VFS_FTRUNCATE(fsp, fsp->fh->fd, (SMB_OFF_T)len)) != -1) {
 			set_filelen_write_cache(fsp, len);
 		}
 		return ret;
@@ -579,7 +514,7 @@
 	release_level_2_oplocks_on_change(fsp);
 	DEBUG(10,("vfs_set_filelen: ftruncate %s to len %.0f\n", fsp->fsp_name, (double)len));
 	flush_write_cache(fsp, SIZECHANGE_FLUSH);
-	if ((ret = SMB_VFS_FTRUNCATE(fsp, len)) != -1) {
+	if ((ret = SMB_VFS_FTRUNCATE(fsp, fsp->fh->fd, len)) != -1) {
 		set_filelen_write_cache(fsp, len);
 		notify_fname(fsp->conn, NOTIFY_ACTION_MODIFIED,
 			     FILE_NOTIFY_CHANGE_SIZE
@@ -610,7 +545,7 @@
 	ssize_t pwrite_ret;
 
 	release_level_2_oplocks_on_change(fsp);
-	ret = SMB_VFS_FSTAT(fsp, &st);
+	ret = SMB_VFS_FSTAT(fsp,fsp->fh->fd,&st);
 	if (ret == -1) {
 		return ret;
 	}
@@ -639,7 +574,7 @@
 	while (total < num_to_write) {
 		size_t curr_write_size = MIN(SPARSE_BUF_WRITE_SIZE, (num_to_write - total));
 
-		pwrite_ret = SMB_VFS_PWRITE(fsp, sparse_buf, curr_write_size, offset + total);
+		pwrite_ret = SMB_VFS_PWRITE(fsp, fsp->fh->fd, sparse_buf, curr_write_size, offset + total);
 		if (pwrite_ret == -1) {
 			DEBUG(10,("vfs_fill_sparse: SMB_VFS_PWRITE for file %s failed with error %s\n",
 				fsp->fsp_name, strerror(errno) ));
@@ -660,24 +595,25 @@
  Transfer some data (n bytes) between two file_struct's.
 ****************************************************************************/
 
-static ssize_t vfs_read_fn(void *file, void *buf, size_t len)
-{
-	struct files_struct *fsp = (struct files_struct *)file;
+static files_struct *in_fsp;
+static files_struct *out_fsp;
 
-	return SMB_VFS_READ(fsp, buf, len);
+static ssize_t read_fn(int fd, void *buf, size_t len)
+{
+	return SMB_VFS_READ(in_fsp, fd, buf, len);
 }
 
-static ssize_t vfs_write_fn(void *file, const void *buf, size_t len)
+static ssize_t write_fn(int fd, const void *buf, size_t len)
 {
-	struct files_struct *fsp = (struct files_struct *)file;
-
-	return SMB_VFS_WRITE(fsp, buf, len);
+	return SMB_VFS_WRITE(out_fsp, fd, buf, len);
 }
 
 SMB_OFF_T vfs_transfer_file(files_struct *in, files_struct *out, SMB_OFF_T n)
 {
-	return transfer_file_internal((void *)in, (void *)out, n,
-				      vfs_read_fn, vfs_write_fn);
+	in_fsp = in;
+	out_fsp = out;
+
+	return transfer_file_internal(in_fsp->fh->fd, out_fsp->fh->fd, n, read_fn, write_fn);
 }
 
 /*******************************************************************
@@ -718,12 +654,8 @@
 int vfs_ChDir(connection_struct *conn, const char *path)
 {
 	int res;
-	static char *LastDir = NULL;
+	static pstring LastDir="";
 
-	if (!LastDir) {
-		LastDir = SMB_STRDUP("");
-	}
-
 	if (strcsequal(path,"."))
 		return(0);
 
@@ -733,105 +665,136 @@
 	DEBUG(4,("vfs_ChDir to %s\n",path));
 
 	res = SMB_VFS_CHDIR(conn,path);
-	if (!res) {
-		SAFE_FREE(LastDir);
-		LastDir = SMB_STRDUP(path);
-	}
+	if (!res)
+		pstrcpy(LastDir,path);
 	return(res);
 }
 
+/* number of list structures for a caching GetWd function. */
+#define MAX_GETWDCACHE (50)
+
+static struct {
+	SMB_DEV_T dev; /* These *must* be compatible with the types returned in a stat() call. */
+	SMB_INO_T inode; /* These *must* be compatible with the types returned in a stat() call. */
+	char *dos_path; /* The pathname in DOS format. */
+	BOOL valid;
+} ino_list[MAX_GETWDCACHE];
+
+extern BOOL use_getwd_cache;
+
+/****************************************************************************
+ Prompte a ptr (to make it recently used)
+****************************************************************************/
+
+static void array_promote(char *array,int elsize,int element)
+{
+	char *p;
+	if (element == 0)
+		return;
+
+	p = (char *)SMB_MALLOC(elsize);
+
+	if (!p) {
+		DEBUG(5,("array_promote: malloc fail\n"));
+		return;
+	}
+
+	memcpy(p,array + element * elsize, elsize);
+	memmove(array + elsize,array,elsize*element);
+	memcpy(array,p,elsize);
+	SAFE_FREE(p);
+}
+
 /*******************************************************************
  Return the absolute current directory path - given a UNIX pathname.
  Note that this path is returned in DOS format, not UNIX
  format. Note this can be called with conn == NULL.
 ********************************************************************/
 
-struct getwd_cache_key {
-	SMB_DEV_T dev;
-	SMB_INO_T ino;
-};
-
-char *vfs_GetWd(TALLOC_CTX *ctx, connection_struct *conn)
+char *vfs_GetWd(connection_struct *conn, char *path)
 {
-        char s[PATH_MAX+1];
+	pstring s;
+	static BOOL getwd_cache_init = False;
 	SMB_STRUCT_STAT st, st2;
-	char *result;
-	DATA_BLOB cache_value;
-	struct getwd_cache_key key;
+	int i;
 
 	*s = 0;
 
-	if (!lp_getwd_cache()) {
-		goto nocache;
+	if (!use_getwd_cache)
+		return(SMB_VFS_GETWD(conn,path));
+
+	/* init the cache */
+	if (!getwd_cache_init) {
+		getwd_cache_init = True;
+		for (i=0;i<MAX_GETWDCACHE;i++) {
+			string_set(&ino_list[i].dos_path,"");
+			ino_list[i].valid = False;
+		}
 	}
 
-	SET_STAT_INVALID(st);
+	/*  Get the inode of the current directory, if this doesn't work we're
+		in trouble :-) */
 
 	if (SMB_VFS_STAT(conn, ".",&st) == -1) {
-		/*
-		 * Known to fail for root: the directory may be NFS-mounted
-		 * and exported with root_squash (so has no root access).
-		 */
-		DEBUG(1,("vfs_GetWd: couldn't stat \".\" error %s "
-			 "(NFS problem ?)\n", strerror(errno) ));
-		goto nocache;
+		/* Known to fail for root: the directory may be
+		 * NFS-mounted and exported with root_squash (so has no root access). */
+		DEBUG(1,("vfs_GetWd: couldn't stat \".\" path=%s error %s (NFS problem ?)\n", path, strerror(errno) ));
+		return(SMB_VFS_GETWD(conn,path));
 	}
 
-	ZERO_STRUCT(key); /* unlikely, but possible padding */
-	key.dev = st.st_dev;
-	key.ino = st.st_ino;
 
-	if (!memcache_lookup(smbd_memcache(), GETWD_CACHE,
-			     data_blob_const(&key, sizeof(key)),
-			     &cache_value)) {
-		goto nocache;
-	}
+	for (i=0; i<MAX_GETWDCACHE; i++) {
+		if (ino_list[i].valid) {
 
-	SMB_ASSERT((cache_value.length > 0)
-		   && (cache_value.data[cache_value.length-1] == '\0'));
+			/*  If we have found an entry with a matching inode and dev number
+				then find the inode number for the directory in the cached string.
+				If this agrees with that returned by the stat for the current
+				directory then all is o.k. (but make sure it is a directory all
+				the same...) */
 
-	if ((SMB_VFS_STAT(conn, (char *)cache_value.data, &st2) == 0)
-	    && (st.st_dev == st2.st_dev) && (st.st_ino == st2.st_ino)
-	    && (S_ISDIR(st.st_mode))) {
-		/*
-		 * Ok, we're done
-		 */
-		result = talloc_strdup(ctx, (char *)cache_value.data);
-		if (result == NULL) {
-			errno = ENOMEM;
+			if (st.st_ino == ino_list[i].inode && st.st_dev == ino_list[i].dev) {
+				if (SMB_VFS_STAT(conn,ino_list[i].dos_path,&st2) == 0) {
+					if (st.st_ino == st2.st_ino && st.st_dev == st2.st_dev &&
+							(st2.st_mode & S_IFMT) == S_IFDIR) {
+						pstrcpy (path, ino_list[i].dos_path);
+
+						/* promote it for future use */
+						array_promote((char *)&ino_list[0],sizeof(ino_list[0]),i);
+						return (path);
+					} else {
+						/*  If the inode is different then something's changed,
+							scrub the entry and start from scratch. */
+						ino_list[i].valid = False;
+					}
+				}
+			}
 		}
-		return result;
 	}
 
- nocache:
+	/*  We don't have the information to hand so rely on traditional methods.
+		The very slow getcwd, which spawns a process on some systems, or the
+		not quite so bad getwd. */
 
-	/*
-	 * We don't have the information to hand so rely on traditional
-	 * methods. The very slow getcwd, which spawns a process on some
-	 * systems, or the not quite so bad getwd.
-	 */
-
 	if (!SMB_VFS_GETWD(conn,s)) {
-		DEBUG(0, ("vfs_GetWd: SMB_VFS_GETWD call failed: %s\n",
-			  strerror(errno)));
-		return NULL;
+		DEBUG(0,("vfs_GetWd: SMB_VFS_GETWD call failed, errno %s\n",strerror(errno)));
+		return (NULL);
 	}
 
-	if (lp_getwd_cache() && VALID_STAT(st)) {
-		ZERO_STRUCT(key); /* unlikely, but possible padding */
-		key.dev = st.st_dev;
-		key.ino = st.st_ino;
+	pstrcpy(path,s);
 
-		memcache_add(smbd_memcache(), GETWD_CACHE,
-			     data_blob_const(&key, sizeof(key)),
-			     data_blob_const(s, strlen(s)+1));
-	}
+	DEBUG(5,("vfs_GetWd %s, inode %.0f, dev %.0f\n",s,(double)st.st_ino,(double)st.st_dev));
 
-	result = talloc_strdup(ctx, s);
-	if (result == NULL) {
-		errno = ENOMEM;
-	}
-	return result;
+	/* add it to the cache */
+	i = MAX_GETWDCACHE - 1;
+	string_set(&ino_list[i].dos_path,s);
+	ino_list[i].dev = st.st_dev;
+	ino_list[i].inode = st.st_ino;
+	ino_list[i].valid = True;
+
+	/* put it at the top of the list */
+	array_promote((char *)&ino_list[0],sizeof(ino_list[0]),i);
+
+	return (path);
 }
 
 /*******************************************************************
@@ -839,14 +802,18 @@
  it is below dir in the heirachy. This uses realpath.
 ********************************************************************/
 
-NTSTATUS check_reduced_name(connection_struct *conn, const char *fname)
+NTSTATUS reduce_name(connection_struct *conn, const pstring fname)
 {
 #ifdef REALPATH_TAKES_NULL
-	bool free_resolved_name = True;
+	BOOL free_resolved_name = True;
 #else
+#ifdef PATH_MAX
         char resolved_name_buf[PATH_MAX+1];
-	bool free_resolved_name = False;
+#else
+        pstring resolved_name_buf;
 #endif
+	BOOL free_resolved_name = False;
+#endif
 	char *resolved_name = NULL;
 	size_t con_path_len = strlen(conn->connectpath);
 	char *p = NULL;
@@ -866,26 +833,18 @@
 				return map_nt_error_from_unix(errno);
 			case ENOENT:
 			{
-				TALLOC_CTX *ctx = talloc_tos();
-				char *tmp_fname = NULL;
-				char *last_component = NULL;
+				pstring tmp_fname;
+				fstring last_component;
 				/* Last component didn't exist. Remove it and try and canonicalise the directory. */
 
-				tmp_fname = talloc_strdup(ctx, fname);
-				if (!tmp_fname) {
-					return NT_STATUS_NO_MEMORY;
-				}
+				pstrcpy(tmp_fname, fname);
 				p = strrchr_m(tmp_fname, '/');
 				if (p) {
 					*p++ = '\0';
-					last_component = p;
+					fstrcpy(last_component, p);
 				} else {
-					last_component = tmp_fname;
-					tmp_fname = talloc_strdup(ctx,
-							".");
-					if (!tmp_fname) {
-						return NT_STATUS_NO_MEMORY;
-					}
+					fstrcpy(last_component, tmp_fname);
+					pstrcpy(tmp_fname, ".");
 				}
 
 #ifdef REALPATH_TAKES_NULL
@@ -897,13 +856,9 @@
 					DEBUG(3,("reduce_name: couldn't get realpath for %s\n", fname));
 					return map_nt_error_from_unix(errno);
 				}
-				tmp_fname = talloc_asprintf(ctx,
-						"%s/%s",
-						resolved_name,
-						last_component);
-				if (!tmp_fname) {
-					return NT_STATUS_NO_MEMORY;
-				}
+				pstrcpy(tmp_fname, resolved_name);
+				pstrcat(tmp_fname, "/");
+				pstrcat(tmp_fname, last_component);
 #ifdef REALPATH_TAKES_NULL
 				SAFE_FREE(resolved_name);
 				resolved_name = SMB_STRDUP(tmp_fname);
@@ -912,7 +867,11 @@
 					return NT_STATUS_NO_MEMORY;
 				}
 #else
+#ifdef PATH_MAX
 				safe_strcpy(resolved_name_buf, tmp_fname, PATH_MAX);
+#else
+				pstrcpy(resolved_name_buf, tmp_fname);
+#endif
 				resolved_name = resolved_name_buf;
 #endif
 				break;
@@ -945,7 +904,7 @@
         /* Check if we are allowing users to follow symlinks */
         /* Patch from David Clerc <David.Clerc at cui.unige.ch>
                 University of Geneva */
-
+                                                                                                                                                    
 #ifdef S_ISLNK
         if (!lp_symlinks(SNUM(conn))) {
                 SMB_STRUCT_STAT statbuf;

Modified: branches/samba/upstream/source/stf/comfychair.py
===================================================================
--- branches/samba/upstream/source/stf/comfychair.py	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/stf/comfychair.py	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 # 
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 3 of the
+# published by the Free Software Foundation; either version 2 of the
 # License, or (at your option) any later version.
 # 
 # This program is distributed in the hope that it will be useful, but
@@ -14,7 +14,9 @@
 # General Public License for more details.
 # 
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA
 
 """comfychair: a Python-based instrument of software torture.
 

Modified: branches/samba/upstream/source/stf/example.py
===================================================================
--- branches/samba/upstream/source/stf/example.py	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/stf/example.py	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
 # 
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 3 of the
+# published by the Free Software Foundation; either version 2 of the
 # License, or (at your option) any later version.
 # 
 # This program is distributed in the hope that it will be useful, but
@@ -13,7 +13,9 @@
 # General Public License for more details.
 # 
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA
 
 
 """example of using ComfyChair"""

Modified: branches/samba/upstream/source/stf/pythoncheck.py
===================================================================
--- branches/samba/upstream/source/stf/pythoncheck.py	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/stf/pythoncheck.py	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 # 
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 3 of the
+# published by the Free Software Foundation; either version 2 of the
 # License, or (at your option) any later version.
 # 
 # This program is distributed in the hope that it will be useful, but
@@ -15,7 +15,9 @@
 # General Public License for more details.
 # 
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA
 
 """These tests are run by Samba's "make check"."""
 

Modified: branches/samba/upstream/source/stf/sambalib.py
===================================================================
--- branches/samba/upstream/source/stf/sambalib.py	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/stf/sambalib.py	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 # 
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 3 of the
+# published by the Free Software Foundation; either version 2 of the
 # License, or (at your option) any later version.
 # 
 # This program is distributed in the hope that it will be useful, but
@@ -15,7 +15,9 @@
 # General Public License for more details.
 # 
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA
 
 """Tests for Samba library functions."""
 

Modified: branches/samba/upstream/source/stf/standardcheck.py
===================================================================
--- branches/samba/upstream/source/stf/standardcheck.py	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/stf/standardcheck.py	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 # 
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 3 of the
+# published by the Free Software Foundation; either version 2 of the
 # License, or (at your option) any later version.
 # 
 # This program is distributed in the hope that it will be useful, but
@@ -15,7 +15,9 @@
 # General Public License for more details.
 # 
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA
 
 """These tests are run by Samba's "make check"."""
 

Modified: branches/samba/upstream/source/stf/strings.py
===================================================================
--- branches/samba/upstream/source/stf/strings.py	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/stf/strings.py	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 # 
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 3 of the
+# published by the Free Software Foundation; either version 2 of the
 # License, or (at your option) any later version.
 # 
 # This program is distributed in the hope that it will be useful, but
@@ -15,7 +15,9 @@
 # General Public License for more details.
 # 
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA
 
 # XXX: All this code assumes that the Unix character set is UTF-8,
 # which is the most common setting.  I guess it would be better to

Modified: branches/samba/upstream/source/stf/unicodenames.py
===================================================================
--- branches/samba/upstream/source/stf/unicodenames.py	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/stf/unicodenames.py	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
 # 
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 3 of the
+# published by the Free Software Foundation; either version 2 of the
 # License, or (at your option) any later version.
 # 
 # This program is distributed in the hope that it will be useful, but
@@ -13,7 +13,9 @@
 # General Public License for more details.
 # 
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA
 
 
 """

Copied: branches/samba/upstream/source/tdb (from rev 1928, branches/samba/upstream/source/tdb)

Modified: branches/samba/upstream/source/tests/crypttest.c
===================================================================
--- branches/samba/upstream/source/tests/crypttest.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/tests/crypttest.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -38,17 +38,18 @@
  * Copyright (C) 1991-1998, Free Software Foundation, Inc.
  *
  * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
+ * modify it under the terms of the GNU Library General Public
  * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
+ * version 2 of the License, or (at your option) any later version.
  *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Library General Public License for more details.
  *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  * @(#)crypt_util.c	2.31 02/08/92
  *

Copied: branches/samba/upstream/source/tests/os2_delete.c (from rev 1928, branches/samba/upstream/source/tests/os2_delete.c)
===================================================================
--- branches/samba/upstream/source/tests/os2_delete.c	                        (rev 0)
+++ branches/samba/upstream/source/tests/os2_delete.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,214 @@
+/*
+  test readdir/unlink pattern that OS/2 uses
+  tridge at samba.org July 2005
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <dirent.h>
+#include <errno.h>
+#include <string.h>
+#include <fcntl.h>
+
+#define NUM_FILES 700
+#define READDIR_SIZE 100
+#define DELETE_SIZE 4
+
+#define TESTDIR "test.dir"
+
+#define FAILED(d) (fprintf(stderr, "Failed for %s - %s\n", d, strerror(errno)), exit(1), 1)
+
+#ifndef MIN
+#define MIN(a,b) ((a)<(b)?(a):(b))
+#endif
+
+static void cleanup(void)
+{
+	/* I'm a lazy bastard */
+	system("rm -rf " TESTDIR);
+	mkdir(TESTDIR, 0700) == 0 || FAILED("mkdir");
+}
+
+static void create_files()
+{
+	int i;
+	for (i=0;i<NUM_FILES;i++) {
+		char fname[40];
+		sprintf(fname, TESTDIR "/test%u.txt", i);
+		close(open(fname, O_CREAT|O_RDWR, 0600)) == 0 || FAILED("close");
+	}
+}
+
+static int os2_delete(DIR *d)
+{
+	off_t offsets[READDIR_SIZE];
+	int i, j;
+	struct dirent *de;
+	char names[READDIR_SIZE][30];
+
+	/* scan, remembering offsets */
+	for (i=0, de=readdir(d); 
+	     de && i < READDIR_SIZE; 
+	     de=readdir(d), i++) {
+		offsets[i] = telldir(d);
+		strcpy(names[i], de->d_name);
+	}
+
+	if (i == 0) {
+		return 0;
+	}
+
+	/* delete the first few */
+	for (j=0; j<MIN(i, DELETE_SIZE); j++) {
+		char fname[40];
+		sprintf(fname, TESTDIR "/%s", names[j]);
+		unlink(fname) == 0 || FAILED("unlink");
+	}
+
+	/* seek to just after the deletion */
+	seekdir(d, offsets[j-1]);
+
+	/* return number deleted */
+	return j;
+}
+
+int main(void)
+{
+	int total_deleted = 0;
+	DIR *d;
+	struct dirent *de;
+
+	cleanup();
+	create_files();
+	
+	d = opendir(TESTDIR);
+
+	/* skip past . and .. */
+	de = readdir(d);
+	strcmp(de->d_name, ".") == 0 || FAILED("match .");
+	de = readdir(d);
+	strcmp(de->d_name, "..") == 0 || FAILED("match ..");
+
+	while (1) {
+		int n = os2_delete(d);
+		if (n == 0) break;
+		total_deleted += n;
+	}
+	closedir(d);
+
+	printf("Deleted %d files of %d\n", total_deleted, NUM_FILES);
+
+	rmdir(TESTDIR) == 0 || FAILED("rmdir");
+
+	return 0;
+}
+/*
+  test readdir/unlink pattern that OS/2 uses
+  tridge at samba.org July 2005
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <dirent.h>
+#include <errno.h>
+#include <string.h>
+#include <fcntl.h>
+
+#define NUM_FILES 700
+#define READDIR_SIZE 100
+#define DELETE_SIZE 4
+
+#define TESTDIR "test.dir"
+
+#define FAILED(d) (fprintf(stderr, "Failed for %s - %s\n", d, strerror(errno)), exit(1), 1)
+
+#ifndef MIN
+#define MIN(a,b) ((a)<(b)?(a):(b))
+#endif
+
+static void cleanup(void)
+{
+	/* I'm a lazy bastard */
+	system("rm -rf " TESTDIR);
+	mkdir(TESTDIR, 0700) == 0 || FAILED("mkdir");
+}
+
+static void create_files()
+{
+	int i;
+	for (i=0;i<NUM_FILES;i++) {
+		char fname[40];
+		sprintf(fname, TESTDIR "/test%u.txt", i);
+		close(open(fname, O_CREAT|O_RDWR, 0600)) == 0 || FAILED("close");
+	}
+}
+
+static int os2_delete(DIR *d)
+{
+	off_t offsets[READDIR_SIZE];
+	int i, j;
+	struct dirent *de;
+	char names[READDIR_SIZE][30];
+
+	/* scan, remembering offsets */
+	for (i=0, de=readdir(d); 
+	     de && i < READDIR_SIZE; 
+	     de=readdir(d), i++) {
+		offsets[i] = telldir(d);
+		strcpy(names[i], de->d_name);
+	}
+
+	if (i == 0) {
+		return 0;
+	}
+
+	/* delete the first few */
+	for (j=0; j<MIN(i, DELETE_SIZE); j++) {
+		char fname[40];
+		sprintf(fname, TESTDIR "/%s", names[j]);
+		unlink(fname) == 0 || FAILED("unlink");
+	}
+
+	/* seek to just after the deletion */
+	seekdir(d, offsets[j-1]);
+
+	/* return number deleted */
+	return j;
+}
+
+int main(void)
+{
+	int total_deleted = 0;
+	DIR *d;
+	struct dirent *de;
+
+	cleanup();
+	create_files();
+	
+	d = opendir(TESTDIR);
+
+	/* skip past . and .. */
+	de = readdir(d);
+	strcmp(de->d_name, ".") == 0 || FAILED("match .");
+	de = readdir(d);
+	strcmp(de->d_name, "..") == 0 || FAILED("match ..");
+
+	while (1) {
+		int n = os2_delete(d);
+		if (n == 0) break;
+		total_deleted += n;
+	}
+	closedir(d);
+
+	printf("Deleted %d files of %d\n", total_deleted, NUM_FILES);
+
+	rmdir(TESTDIR) == 0 || FAILED("rmdir");
+
+	return 0;
+}

Copied: branches/samba/upstream/source/tests/shared_mmap.c (from rev 1928, branches/samba/upstream/source/tests/shared_mmap.c)
===================================================================
--- branches/samba/upstream/source/tests/shared_mmap.c	                        (rev 0)
+++ branches/samba/upstream/source/tests/shared_mmap.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,68 @@
+/* this tests whether we can use a shared writeable mmap on a file -
+   as needed for the mmap varient of FAST_SHARE_MODES */
+
+#if defined(HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
+#include <sys/mman.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#define DATA "conftest.mmap"
+
+#ifndef MAP_FILE
+#define MAP_FILE 0
+#endif
+
+main()
+{
+	int *buf;
+	int i; 
+	int fd = open(DATA,O_RDWR|O_CREAT|O_TRUNC,0666);
+	int count=7;
+
+	if (fd == -1) exit(1);
+
+	for (i=0;i<10000;i++) {
+		write(fd,&i,sizeof(i));
+	}
+
+	close(fd);
+
+	if (fork() == 0) {
+		fd = open(DATA,O_RDWR);
+		if (fd == -1) exit(1);
+
+		buf = (int *)mmap(NULL, 10000*sizeof(int), 
+				   (PROT_READ | PROT_WRITE), 
+				   MAP_FILE | MAP_SHARED, 
+				   fd, 0);
+
+		while (count-- && buf[9124] != 55732) sleep(1);
+
+		if (count <= 0) exit(1);
+
+		buf[1763] = 7268;
+		exit(0);
+	}
+
+	fd = open(DATA,O_RDWR);
+	if (fd == -1) exit(1);
+
+	buf = (int *)mmap(NULL, 10000*sizeof(int), 
+			   (PROT_READ | PROT_WRITE), 
+			   MAP_FILE | MAP_SHARED, 
+			   fd, 0);
+
+	if (buf == (int *)-1) exit(1);
+
+	buf[9124] = 55732;
+
+	while (count-- && buf[1763] != 7268) sleep(1);
+
+	unlink(DATA);
+		
+	if (count > 0) exit(0);
+	exit(1);
+}

Modified: branches/samba/upstream/source/tests/summary.c
===================================================================
--- branches/samba/upstream/source/tests/summary.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/tests/summary.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -2,7 +2,6 @@
 
 main()
 {
-    exit (0);
 #if !(defined(HAVE_FCNTL_LOCK) || defined(HAVE_STRUCT_FLOCK64))
 	printf("ERROR: No locking available. Running Samba would be unsafe\n");
 	exit(1);

Copied: branches/samba/upstream/source/tests/unixsock.c (from rev 1928, branches/samba/upstream/source/tests/unixsock.c)
===================================================================
--- branches/samba/upstream/source/tests/unixsock.c	                        (rev 0)
+++ branches/samba/upstream/source/tests/unixsock.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,93 @@
+/* -*- c-file-style: "linux" -*-
+ *
+ * Try creating a Unix-domain socket, opening it, and reading from it.
+ * The POSIX name for these is AF_LOCAL/PF_LOCAL.
+ *
+ * This is used by the Samba autoconf scripts to detect systems which
+ * don't have Unix-domain sockets, such as (probably) VMS, or systems
+ * on which they are broken under some conditions, such as RedHat 7.0
+ * (unpatched).  We can't build WinBind there at the moment.
+ *
+ * Coding standard says to always use exit() for this, not return, so
+ * we do.
+ *
+ * Martin Pool <mbp at samba.org>, June 2000. */
+
+/* TODO: Look for AF_LOCAL (most standard), AF_UNIX, and AF_FILE. */
+
+#include <stdio.h>
+
+#ifdef HAVE_SYS_SOCKET_H
+#  include <sys/socket.h>
+#endif
+
+#ifdef HAVE_SYS_UN_H
+#  include <sys/un.h>
+#endif
+
+#ifdef HAVE_SYS_TYPES_H
+#  include <sys/types.h>
+#endif
+
+#if HAVE_SYS_WAIT_H
+# include <sys/wait.h>
+#endif
+
+#if HAVE_ERRNO_DECL
+# include <errno.h>
+#else
+extern int errno;
+#endif
+
+static int bind_socket(char const *filename)
+{
+	int sock_fd;
+	struct sockaddr_un name;
+	size_t size;
+	
+	/* Create the socket. */
+	if ((sock_fd = socket(PF_LOCAL, SOCK_STREAM, 0)) < 0) {
+		perror ("socket(PF_LOCAL, SOCK_STREAM)");
+		exit(1);
+	}
+     
+	/* Bind a name to the socket. */
+	name.sun_family = AF_LOCAL;
+	strncpy(name.sun_path, filename, sizeof (name.sun_path));
+     
+       /* The size of the address is
+          the offset of the start of the filename,
+          plus its length,
+          plus one for the terminating null byte.
+          Alternatively you can just do:
+          size = SUN_LEN (&name);
+      */
+	size = SUN_LEN(&name);
+	/* XXX: This probably won't work on unfriendly libcs */
+     
+	if (bind(sock_fd, (struct sockaddr *) &name, size) < 0) {
+		perror ("bind");
+		exit(1);
+	}
+
+	return sock_fd;
+}
+
+
+int main(void)
+{
+	int sock_fd;
+	int kid;
+	char const *filename = "conftest.unixsock.sock";
+
+	/* abolish hanging */
+	alarm(15);		/* secs */
+
+	if ((sock_fd = bind_socket(filename)) < 0)
+		exit(1);
+
+	/* the socket will be deleted when autoconf cleans up these
+           files. */
+
+	exit(0);
+}

Modified: branches/samba/upstream/source/torture/cmd_vfs.c
===================================================================
--- branches/samba/upstream/source/torture/cmd_vfs.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/torture/cmd_vfs.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -87,7 +88,7 @@
 		printf("show_data: error=-1 (not enough data in buffer)\n");
 		return NT_STATUS_UNSUCCESSFUL;
 	}
-	dump_data(0, (uint8 *)(vfs->data) + offset, len);
+	dump_data(0, (char *)(vfs->data) + offset, len);
 	return NT_STATUS_OK;
 }
 
@@ -279,27 +280,14 @@
 	}
 
 	fsp = SMB_MALLOC_P(struct files_struct);
-	if (fsp == NULL) {
-		return NT_STATUS_NO_MEMORY;
-	}
 	fsp->fsp_name = SMB_STRDUP(argv[1]);
-	if (fsp->fsp_name == NULL) {
-		SAFE_FREE(fsp);
-		return NT_STATUS_NO_MEMORY;
-	}
 	fsp->fh = SMB_MALLOC_P(struct fd_handle);
-	if (fsp->fh == NULL) {
-		SAFE_FREE(fsp->fsp_name);
-		SAFE_FREE(fsp);
-		return NT_STATUS_NO_MEMORY;
-	}
 	fsp->conn = vfs->conn;
 
 	fsp->fh->fd = SMB_VFS_OPEN(vfs->conn, argv[1], fsp, flags, mode);
 	if (fsp->fh->fd == -1) {
 		printf("open: error=%d (%s)\n", errno, strerror(errno));
 		SAFE_FREE(fsp->fh);
-		SAFE_FREE(fsp->fsp_name);
 		SAFE_FREE(fsp);
 		return NT_STATUS_UNSUCCESSFUL;
 	}
@@ -355,7 +343,7 @@
 		return NT_STATUS_OK;
 	}
 
-	ret = SMB_VFS_CLOSE(vfs->files[fd]);
+	ret = SMB_VFS_CLOSE(vfs->files[fd], fd);
 	if (ret == -1 )
 		printf("close: error=%d (%s)\n", errno, strerror(errno));
 	else
@@ -389,7 +377,7 @@
 	}
 	vfs->data_size = size;
 	
-	rsize = SMB_VFS_READ(vfs->files[fd], vfs->data, size);
+	rsize = SMB_VFS_READ(vfs->files[fd], fd, vfs->data, size);
 	if (rsize == -1) {
 		printf("read: error=%d (%s)\n", errno, strerror(errno));
 		return NT_STATUS_UNSUCCESSFUL;
@@ -422,7 +410,7 @@
 		return NT_STATUS_UNSUCCESSFUL;
 	}
 
-	wsize = SMB_VFS_WRITE(vfs->files[fd], vfs->data, size);
+	wsize = SMB_VFS_WRITE(vfs->files[fd], fd, vfs->data, size);
 
 	if (wsize == -1) {
 		printf("write: error=%d (%s)\n", errno, strerror(errno));
@@ -453,7 +441,7 @@
 		default:	whence = SEEK_END;
 	}
 
-	pos = SMB_VFS_LSEEK(vfs->files[fd], offset, whence);
+	pos = SMB_VFS_LSEEK(vfs->files[fd], fd, offset, whence);
 	if (pos == (SMB_OFF_T)-1) {
 		printf("lseek: error=%d (%s)\n", errno, strerror(errno));
 		return NT_STATUS_UNSUCCESSFUL;
@@ -492,7 +480,7 @@
 	}
 
 	fd = atoi(argv[1]);
-	ret = SMB_VFS_FSYNC(vfs->files[fd]);
+	ret = SMB_VFS_FSYNC(vfs->files[fd], fd);
 	if (ret == -1) {
 		printf("fsync: error=%d (%s)\n", errno, strerror(errno));
 		return NT_STATUS_UNSUCCESSFUL;
@@ -575,7 +563,7 @@
 	}
 
 	fd = atoi(argv[1]);
-	if (fd < 0 || fd >= 1024) {
+	if (fd < 0 || fd > 1024) {
 		printf("fstat: error=%d (file descriptor out of range)\n", EBADF);
 		return NT_STATUS_OK;
 	}
@@ -585,7 +573,7 @@
 		return NT_STATUS_OK;
 	}
 
-	if (SMB_VFS_FSTAT(vfs->files[fd], &st) == -1) {
+	if (SMB_VFS_FSTAT(vfs->files[fd], fd, &st) == -1) {
 		printf("fstat: error=%d (%s)\n", errno, strerror(errno));
 		return NT_STATUS_UNSUCCESSFUL;
 	}
@@ -710,7 +698,7 @@
 
 	fd = atoi(argv[1]);
 	mode = atoi(argv[2]);
-	if (fd < 0 || fd >= 1024) {
+	if (fd < 0 || fd > 1024) {
 		printf("fchmod: error=%d (file descriptor out of range)\n", EBADF);
 		return NT_STATUS_OK;
 	}
@@ -719,7 +707,7 @@
 		return NT_STATUS_OK;
 	}
 
-	if (SMB_VFS_FCHMOD(vfs->files[fd], mode) == -1) {
+	if (SMB_VFS_FCHMOD(vfs->files[fd], fd, mode) == -1) {
 		printf("fchmod: error=%d (%s)\n", errno, strerror(errno));
 		return NT_STATUS_UNSUCCESSFUL;
 	}
@@ -763,7 +751,7 @@
 	uid = atoi(argv[2]);
 	gid = atoi(argv[3]);
 	fd = atoi(argv[1]);
-	if (fd < 0 || fd >= 1024) {
+	if (fd < 0 || fd > 1024) {
 		printf("fchown: faliure=%d (file descriptor out of range)\n", EBADF);
 		return NT_STATUS_OK;
 	}
@@ -771,7 +759,7 @@
 		printf("fchown: error=%d (invalid file descriptor)\n", EBADF);
 		return NT_STATUS_OK;
 	}
-	if (SMB_VFS_FCHOWN(vfs->files[fd], uid, gid) == -1) {
+	if (SMB_VFS_FCHOWN(vfs->files[fd], fd, uid, gid) == -1) {
 		printf("fchown error=%d (%s)\n", errno, strerror(errno));
 		return NT_STATUS_UNSUCCESSFUL;
 	}
@@ -822,7 +810,7 @@
 
 	fd = atoi(argv[1]);
 	off = atoi(argv[2]);
-	if (fd < 0 || fd >= 1024) {
+	if (fd < 0 || fd > 1024) {
 		printf("ftruncate: error=%d (file descriptor out of range)\n", EBADF);
 		return NT_STATUS_OK;
 	}
@@ -831,7 +819,7 @@
 		return NT_STATUS_OK;
 	}
 
-	if (SMB_VFS_FTRUNCATE(vfs->files[fd], off) == -1) {
+	if (SMB_VFS_FTRUNCATE(vfs->files[fd], fd, off) == -1) {
 		printf("ftruncate: error=%d (%s)\n", errno, strerror(errno));
 		return NT_STATUS_UNSUCCESSFUL;
 	}
@@ -842,6 +830,7 @@
 
 static NTSTATUS cmd_lock(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, const char **argv)
 {
+	BOOL ret;
 	int fd;
 	int op;
 	long offset;
@@ -913,7 +902,7 @@
 
 	printf("lock: debug lock(fd=%d, op=%d, offset=%ld, count=%ld, type=%d))\n", fd, op, offset, count, type);
 
-	if (SMB_VFS_LOCK(vfs->files[fd], op, offset, count, type) == False) {
+	if ((ret = SMB_VFS_LOCK(vfs->files[fd], fd, op, offset, count, type)) == False) {
 		printf("lock: error=%d (%s)\n", errno, strerror(errno));
 		return NT_STATUS_UNSUCCESSFUL;
 	}

Modified: branches/samba/upstream/source/torture/denytest.c
===================================================================
--- branches/samba/upstream/source/torture/denytest.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/torture/denytest.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,12 +14,13 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
-extern bool torture_showall;
+extern BOOL torture_showall;
 
 enum deny_result {A_0=0, A_X=1, A_R=2, A_W=3, A_RW=5};
 
@@ -1403,12 +1404,12 @@
 /*
   this produces a matrix of deny mode behaviour for 1 connection
  */
-bool torture_denytest1(int dummy)
+BOOL torture_denytest1(int dummy)
 {
 	struct cli_state *cli1;
 	int fnum1, fnum2;
 	int i;
-	bool correct = True;
+	BOOL correct = True;
 	const char *fnames[2] = {"\\denytest1.dat", "\\denytest1.exe"};
 
 	if (!torture_open_connection(&cli1, 0)) {
@@ -1489,12 +1490,12 @@
 /*
   this produces a matrix of deny mode behaviour with 2 connections
  */
-bool torture_denytest2(int dummy)
+BOOL torture_denytest2(int dummy)
 {
 	static struct cli_state *cli1, *cli2;
 	int fnum1, fnum2;
 	int i;
-	bool correct = True;
+	BOOL correct = True;
 	const char *fnames[2] = {"\\denytest2.dat", "\\denytest2.exe"};
 
 	if (!torture_open_connection(&cli1, 0) || !torture_open_connection(&cli2, 1)) {

Modified: branches/samba/upstream/source/torture/locktest.c
===================================================================
--- branches/samba/upstream/source/torture/locktest.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/torture/locktest.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -23,17 +24,17 @@
 static fstring username[2];
 static int got_user;
 static int got_pass;
-static bool use_kerberos;
+static BOOL use_kerberos;
 static int numops = 1000;
-static bool showall;
-static bool analyze;
-static bool hide_unlock_fails;
-static bool use_oplocks;
+static BOOL showall;
+static BOOL analyze;
+static BOOL hide_unlock_fails;
+static BOOL use_oplocks;
 static unsigned lock_range = 100;
 static unsigned lock_base = 0;
 static unsigned min_length = 0;
-static bool exact_error_codes;
-static bool zero_zero;
+static BOOL exact_error_codes;
+static BOOL zero_zero;
 
 extern char *optarg;
 extern int optind;
@@ -115,32 +116,30 @@
 
 static struct record *recorded;
 
-static void print_brl(struct file_id id,
-			struct server_id pid, 
+static void print_brl(SMB_DEV_T dev,
+			SMB_INO_T ino,
+			struct process_id pid, 
 			enum brl_type lock_type,
 			enum brl_flavour lock_flav,
 			br_off start,
-			br_off size,
-			void *private_data)
+			br_off size)
 {
 #if NASTY_POSIX_LOCK_HACK
 	{
+		pstring cmd;
 		static SMB_INO_T lastino;
 
 		if (lastino != ino) {
-			char *cmd;
-			if (asprintf(&cmd,
-				 "egrep POSIX.*%u /proc/locks", (int)ino) > 0) {
-				system(cmd);
-				SAFE_FREE(cmd);
-			}
+			slprintf(cmd, sizeof(cmd), 
+				 "egrep POSIX.*%u /proc/locks", (int)ino);
+			system(cmd);
 		}
 		lastino = ino;
 	}
 #endif
 
-	printf("%s   %s    %s  %.0f:%.0f(%.0f)\n", 
-	       procid_str_static(&pid), file_id_string_tos(&id),
+	printf("%s   %05x:%05x    %s  %.0f:%.0f(%.0f)\n", 
+	       procid_str_static(&pid), (int)dev, (int)ino, 
 	       lock_type==READ_LOCK?"R":"W",
 	       (double)start, (double)start+size-1,(double)size);
 
@@ -149,7 +148,7 @@
 
 static void show_locks(void)
 {
-	brl_forall(print_brl, NULL);
+	brl_forall(print_brl);
 	/* system("cat /proc/locks"); */
 }
 
@@ -163,7 +162,7 @@
 	struct nmb_name called, calling;
 	char *server_n;
 	fstring server;
-	struct sockaddr_storage ss;
+	struct in_addr ip;
 	fstring myname;
 	static int count;
 	NTSTATUS status;
@@ -175,16 +174,16 @@
 	share++;
 
 	server_n = server;
+	
+        zero_ip(&ip);
 
-	zero_addr(&ss);
-
 	slprintf(myname,sizeof(myname), "lock-%lu-%u", (unsigned long)getpid(), count++);
 
 	make_nmb_name(&calling, myname, 0x0);
 	make_nmb_name(&called , server, 0x20);
 
  again:
-        zero_addr(&ss);
+        zero_ip(&ip);
 
 	/* have to open a new connection */
 	if (!(c=cli_initialise())) {
@@ -192,7 +191,7 @@
 		return NULL;
 	}
 
-	status = cli_connect(c, server_n, &ss);
+	status = cli_connect(c, server_n, &ip);
 	if (!NT_STATUS_IS_OK(status)) {
 		DEBUG(0,("Connection to %s failed. Error %s\n", server_n, nt_errstr(status) ));
 		return NULL;
@@ -297,7 +296,7 @@
 
 
 
-static bool test_one(struct cli_state *cli[NSERVERS][NCONNECTIONS], 
+static BOOL test_one(struct cli_state *cli[NSERVERS][NCONNECTIONS], 
 		     int fnum[NSERVERS][NCONNECTIONS][NFILES],
 		     struct record *rec)
 {
@@ -307,7 +306,7 @@
 	SMB_BIG_UINT len = rec->len;
 	enum brl_type op = rec->lock_type;
 	int server;
-	bool ret[NSERVERS];
+	BOOL ret[NSERVERS];
 	NTSTATUS status[NSERVERS];
 
 	switch (rec->lock_op) {
@@ -617,7 +616,7 @@
 	argc -= NSERVERS;
 	argv += NSERVERS;
 
-	lp_load(get_dyn_CONFIGFILE(),True,False,False,True);
+	lp_load(dyn_CONFIGFILE,True,False,False,True);
 	load_interfaces();
 
 	if (getenv("USER")) {

Modified: branches/samba/upstream/source/torture/locktest2.c
===================================================================
--- branches/samba/upstream/source/torture/locktest2.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/torture/locktest2.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -23,10 +24,10 @@
 static fstring username;
 static int got_pass;
 static int numops = 1000;
-static bool showall;
-static bool analyze;
-static bool hide_unlock_fails;
-static bool use_oplocks;
+static BOOL showall;
+static BOOL analyze;
+static BOOL hide_unlock_fails;
+static BOOL use_oplocks;
 
 extern char *optarg;
 extern int optind;
@@ -64,27 +65,22 @@
 
 static int try_open(struct cli_state *c, char *nfs, int fstype, const char *fname, int flags)
 {
-	char *path;
+	pstring path;
 
 	switch (fstype) {
 	case FSTYPE_SMB:
 		return cli_open(c, fname, flags, DENY_NONE);
 
 	case FSTYPE_NFS:
-		if (asprintf(&path, "%s%s", nfs, fname) > 0) {
-			int ret;
-			string_replace(path,'\\', '/');
-			ret = open(path, flags, 0666);
-			SAFE_FREE(path);
-			return ret;
-		}
-		break;
+		slprintf(path, sizeof(path), "%s%s", nfs, fname);
+		pstring_sub(path,"\\", "/");
+		return open(path, flags, 0666);
 	}
 
 	return -1;
 }
 
-static bool try_close(struct cli_state *c, int fstype, int fd)
+static BOOL try_close(struct cli_state *c, int fstype, int fd)
 {
 	switch (fstype) {
 	case FSTYPE_SMB:
@@ -97,7 +93,7 @@
 	return False;
 }
 
-static bool try_lock(struct cli_state *c, int fstype, 
+static BOOL try_lock(struct cli_state *c, int fstype, 
 		     int fd, unsigned start, unsigned len,
 		     enum brl_type op)
 {
@@ -119,7 +115,7 @@
 	return False;
 }
 
-static bool try_unlock(struct cli_state *c, int fstype, 
+static BOOL try_unlock(struct cli_state *c, int fstype, 
 		       int fd, unsigned start, unsigned len)
 {
 	struct flock lock;
@@ -140,14 +136,13 @@
 	return False;
 }	
 
-static void print_brl(struct file_id id, struct server_id pid, 
+static void print_brl(SMB_DEV_T dev, SMB_INO_T ino, struct process_id pid, 
 		      enum brl_type lock_type,
 		      enum brl_flavour lock_flav,
-		      br_off start, br_off size,
-		      void *private_data)
+		      br_off start, br_off size)
 {
-	printf("%6d   %s    %s  %.0f:%.0f(%.0f)\n", 
-	       (int)procid_to_pid(&pid), file_id_string_tos(&id),
+	printf("%6d   %05x:%05x    %s  %.0f:%.0f(%.0f)\n", 
+	       (int)procid_to_pid(&pid), (int)dev, (int)ino, 
 	       lock_type==READ_LOCK?"R":"W",
 	       (double)start, (double)start+size-1,(double)size);
 
@@ -228,7 +223,7 @@
 
 
 
-static bool test_one(struct cli_state *cli[NSERVERS][NCONNECTIONS], 
+static BOOL test_one(struct cli_state *cli[NSERVERS][NCONNECTIONS], 
 		     char *nfs[NSERVERS],
 		     int fnum[NSERVERS][NUMFSTYPES][NCONNECTIONS][NFILES],
 		     struct record *rec)
@@ -242,7 +237,7 @@
 	unsigned r2 = rec->r2;
 	enum brl_type op;
 	int server;
-	bool ret[NSERVERS];
+	BOOL ret[NSERVERS];
 
 	if (r1 < READ_PCT) {
 		op = READ_LOCK; 
@@ -264,7 +259,7 @@
 			       op==READ_LOCK?"READ_LOCK":"WRITE_LOCK",
 			       ret[0], ret[1]);
 		}
-		if (showall) brl_forall(print_brl, NULL);
+		if (showall) brl_forall(print_brl);
 		if (ret[0] != ret[1]) return False;
 	} else if (r2 < LOCK_PCT+UNLOCK_PCT) {
 		/* unset a lock */
@@ -279,7 +274,7 @@
 			       start, start+len-1, len,
 			       ret[0], ret[1]);
 		}
-		if (showall) brl_forall(print_brl, NULL);
+		if (showall) brl_forall(print_brl);
 		if (!hide_unlock_fails && ret[0] != ret[1]) return False;
 	} else {
 		/* reopen the file */
@@ -295,7 +290,7 @@
 		if (showall) {
 			printf("reopen conn=%u fstype=%u f=%u\n",
 			       conn, fstype, f);
-			brl_forall(print_brl, NULL);
+			brl_forall(print_brl);
 		}
 	}
 	return True;
@@ -505,7 +500,7 @@
 	argc -= 4;
 	argv += 4;
 
-	lp_load(get_dyn_CONFIGFILE(),True,False,False,True);
+	lp_load(dyn_CONFIGFILE,True,False,False,True);
 	load_interfaces();
 
 	if (getenv("USER")) {
@@ -558,7 +553,7 @@
 	DEBUG(0,("seed=%u\n", seed));
 	srandom(seed);
 
-	locking_init_readonly();
+	locking_init(1);
 	test_locks(share1, share2, nfspath1, nfspath2);
 
 	return(0);

Modified: branches/samba/upstream/source/torture/mangle_test.c
===================================================================
--- branches/samba/upstream/source/torture/mangle_test.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/torture/mangle_test.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -27,7 +28,7 @@
 
 static unsigned total, collisions, failures;
 
-static bool test_one(struct cli_state *cli, const char *name)
+static BOOL test_one(struct cli_state *cli, const char *name)
 {
 	int fnum;
 	fstring shortname;
@@ -86,7 +87,7 @@
 	data = tdb_fetch_bystring(tdb, shortname);
 	if (data.dptr) {
 		/* maybe its a duplicate long name? */
-		if (!strequal(name, (const char *)data.dptr)) {
+		if (!strequal(name, data.dptr)) {
 			/* we have a collision */
 			collisions++;
 			printf("Collision between %s and %s   ->  %s "
@@ -97,7 +98,7 @@
 	} else {
 		TDB_DATA namedata;
 		/* store it for later */
-		namedata.dptr = CONST_DISCARD(uint8 *, name);
+		namedata.dptr = CONST_DISCARD(char *, name);
 		namedata.dsize = strlen(name)+1;
 		tdb_store_bystring(tdb, shortname, namedata, TDB_REPLACE);
 	}
@@ -158,11 +159,11 @@
 }
 
 
-bool torture_mangle(int dummy)
+BOOL torture_mangle(int dummy)
 {
 	static struct cli_state *cli;
 	int i;
-	bool ret = True;
+	BOOL ret = True;
 
 	printf("starting mangle test\n");
 

Modified: branches/samba/upstream/source/torture/masktest.c
===================================================================
--- branches/samba/upstream/source/torture/masktest.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/torture/masktest.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -23,8 +24,8 @@
 static fstring username;
 static int got_pass;
 static int max_protocol = PROTOCOL_NT1;
-static bool showall = False;
-static bool old_list = False;
+static BOOL showall = False;
+static BOOL old_list = False;
 static const char *maskchars = "<>\"?*abc.";
 static const char *filechars = "abcdefghijklm.";
 static int verbose;
@@ -34,7 +35,7 @@
 
 extern char *optarg;
 extern int optind;
-extern bool AllowDebugChange;
+extern BOOL AllowDebugChange;
 
 /* a test fn for LANMAN mask support */
 static int ms_fnmatch_lanman_core(const char *pattern, const char *string)
@@ -95,9 +96,9 @@
 			n++;
 		}
 	}
-
+	
 	if (! *n) goto match;
-
+	
  nomatch:
 	if (verbose) printf("NOMATCH pattern=[%s] string=[%s]\n", pattern, string);
 	return -1;
@@ -128,7 +129,7 @@
 	return ms_fnmatch_lanman_core(pattern, string);
 }
 
-static bool reg_match_one(struct cli_state *cli, const char *pattern, const char *file)
+static BOOL reg_match_one(struct cli_state *cli, const char *pattern, const char *file)
 {
 	/* oh what a weird world this is */
 	if (old_list && strcmp(pattern, "*.*") == 0) return True;
@@ -144,16 +145,17 @@
 	return ms_fnmatch(pattern, file, cli->protocol, False) == 0;
 }
 
-static char *reg_test(struct cli_state *cli, const char *pattern, const char *long_name, const char *short_name)
+static char *reg_test(struct cli_state *cli, char *pattern, char *long_name, char *short_name)
 {
 	static fstring ret;
-	const char *new_pattern = 1+strrchr_m(pattern,'\\');
-
 	fstrcpy(ret, "---");
-	if (reg_match_one(cli, new_pattern, ".")) ret[0] = '+';
-	if (reg_match_one(cli, new_pattern, "..")) ret[1] = '+';
-	if (reg_match_one(cli, new_pattern, long_name) ||
-	    (*short_name && reg_match_one(cli, new_pattern, short_name))) ret[2] = '+';
+
+	pattern = 1+strrchr_m(pattern,'\\');
+
+	if (reg_match_one(cli, pattern, ".")) ret[0] = '+';
+	if (reg_match_one(cli, pattern, "..")) ret[1] = '+';
+	if (reg_match_one(cli, pattern, long_name) || 
+	    (*short_name && reg_match_one(cli, pattern, short_name))) ret[2] = '+';
 	return ret;
 }
 
@@ -167,7 +169,7 @@
 	struct nmb_name called, calling;
 	char *server_n;
 	char *server;
-	struct sockaddr_storage ss;
+	struct in_addr ip;
 	NTSTATUS status;
 
 	server = share+2;
@@ -177,14 +179,14 @@
 	share++;
 
 	server_n = server;
+	
+        zero_ip(&ip);
 
-	zero_addr(&ss);
-
 	make_nmb_name(&calling, "masktest", 0x0);
 	make_nmb_name(&called , server, 0x20);
 
  again:
-        zero_addr(&ss);
+        zero_ip(&ip);
 
 	/* have to open a new connection */
 	if (!(c=cli_initialise())) {
@@ -192,7 +194,7 @@
 		return NULL;
 	}
 
-	status = cli_connect(c, server_n, &ss);
+	status = cli_connect(c, server_n, &ip);
 	if (!NT_STATUS_IS_OK(status)) {
 		DEBUG(0,("Connection to %s failed. Error %s\n", server_n, nt_errstr(status) ));
 		return NULL;
@@ -244,7 +246,7 @@
 	if (*c->server_domain || *c->server_os || *c->server_type)
 		DEBUG(1,("Domain=[%s] OS=[%s] Server=[%s]\n",
 			c->server_domain,c->server_os,c->server_type));
-
+	
 	DEBUG(4,(" session setup ok\n"));
 
 	if (!cli_send_tconX(c, share, "?????",
@@ -267,17 +269,16 @@
 	if (strcmp(f->name,".") == 0) {
 		resultp[0] = '+';
 	} else if (strcmp(f->name,"..") == 0) {
-		resultp[1] = '+';
+		resultp[1] = '+';		
 	} else {
 		resultp[2] = '+';
 	}
 	f_info = f;
 }
 
-static void get_real_name(struct cli_state *cli,
-			  char **pp_long_name, fstring short_name)
+static void get_real_name(struct cli_state *cli, 
+			  pstring long_name, fstring short_name)
 {
-	*pp_long_name = NULL;
 	/* nasty hack to force level 260 listings - tridge */
 	cli->capabilities |= CAP_NT_SMBS;
 	if (max_protocol <= PROTOCOL_LANMAN1) {
@@ -288,15 +289,12 @@
 	if (f_info) {
 		fstrcpy(short_name, f_info->short_name);
 		strlower_m(short_name);
-		*pp_long_name = SMB_STRDUP(f_info->name);
-		if (!*pp_long_name) {
-			return;
-		}
-		strlower_m(*pp_long_name);
+		pstrcpy(long_name, f_info->name);
+		strlower_m(long_name);
 	}
 
 	if (*short_name == 0) {
-		fstrcpy(short_name, *pp_long_name);
+		fstrcpy(short_name, long_name);
 	}
 
 #if 0
@@ -306,14 +304,14 @@
 #endif
 }
 
-static void testpair(struct cli_state *cli, const char *mask, const char *file)
+static void testpair(struct cli_state *cli, char *mask, char *file)
 {
 	int fnum;
 	fstring res1;
 	char *res2;
 	static int count;
 	fstring short_name;
-	char *long_name = NULL;
+	pstring long_name;
 
 	count++;
 
@@ -329,17 +327,14 @@
 	resultp = res1;
 	fstrcpy(short_name, "");
 	f_info = NULL;
-	get_real_name(cli, &long_name, short_name);
-	if (!long_name) {
-		return;
-	}
+	get_real_name(cli, long_name, short_name);
 	f_info = NULL;
 	fstrcpy(res1, "---");
 	cli_list(cli, mask, aHIDDEN | aDIR, listfn, NULL);
 
 	res2 = reg_test(cli, mask, long_name, short_name);
 
-	if (showall ||
+	if (showall || 
 	    ((strcmp(res1, res2) && !ignore_dot_errors) ||
 	     (strcmp(res1+2, res2+2) && ignore_dot_errors))) {
 		DEBUG(0,("%s %s %d mask=[%s] file=[%s] rfile=[%s/%s]\n",
@@ -350,17 +345,15 @@
 	cli_unlink(cli, file);
 
 	if (count % 100 == 0) DEBUG(0,("%d\n", count));
-	SAFE_FREE(long_name);
 }
 
-static void test_mask(int argc, char *argv[],
+static void test_mask(int argc, char *argv[], 
 		      struct cli_state *cli)
 {
-	char *mask, *file;
+	pstring mask, file;
 	int l1, l2, i, l;
 	int mc_len = strlen(maskchars);
 	int fc_len = strlen(filechars);
-	TALLOC_CTX *ctx = talloc_tos();
 
 	cli_mkdir(cli, "\\masktest");
 
@@ -368,15 +361,10 @@
 
 	if (argc >= 2) {
 		while (argc >= 2) {
-			mask = talloc_asprintf(ctx,
-					"\\masktest\\%s",
-					argv[0]);
-			file = talloc_asprintf(ctx,
-					"\\masktest\\%s",
-					argv[1]);
-			if (!mask || !file) {
-				goto finished;
-			}
+			pstrcpy(mask,"\\masktest\\");
+			pstrcpy(file,"\\masktest\\");
+			pstrcat(mask, argv[0]);
+			pstrcat(file, argv[1]);
 			testpair(cli, mask, file);
 			argv += 2;
 			argc -= 2;
@@ -387,13 +375,8 @@
 	while (1) {
 		l1 = 1 + random() % 20;
 		l2 = 1 + random() % 20;
-		mask = TALLOC_ARRAY(ctx, char, strlen("\\masktest\\")+1+22);
-		file = TALLOC_ARRAY(ctx, char, strlen("\\masktest\\")+1+22);
-		if (!mask || !file) {
-			goto finished;
-		}
-		memcpy(mask,"\\masktest\\",strlen("\\masktest\\")+1);
-		memcpy(file,"\\masktest\\",strlen("\\masktest\\")+1);
+		pstrcpy(mask,"\\masktest\\");
+		pstrcpy(file,"\\masktest\\");
 		l = strlen(mask);
 		for (i=0;i<l1;i++) {
 			mask[i+l] = maskchars[random() % mc_len];
@@ -414,8 +397,6 @@
 		testpair(cli, mask, file);
 		if (NumLoops && (--NumLoops == 0))
 			break;
-		TALLOC_FREE(mask);
-		TALLOC_FREE(file);
 	}
 
  finished:
@@ -455,11 +436,10 @@
  int main(int argc,char *argv[])
 {
 	char *share;
-	struct cli_state *cli;
+	struct cli_state *cli;	
 	int opt;
 	char *p;
 	int seed;
-	TALLOC_CTX *frame = talloc_stackframe();
 
 	setlinebuf(stdout);
 
@@ -482,7 +462,7 @@
 	argc -= 1;
 	argv += 1;
 
-	lp_load(get_dyn_CONFIGFILE(),True,False,False,True);
+	lp_load(dyn_CONFIGFILE,True,False,False,True);
 	load_interfaces();
 
 	if (getenv("USER")) {
@@ -560,6 +540,5 @@
 
 	test_mask(argc, argv, cli);
 
-	TALLOC_FREE(frame);
 	return(0);
 }

Modified: branches/samba/upstream/source/torture/msgtest.c
===================================================================
--- branches/samba/upstream/source/torture/msgtest.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/torture/msgtest.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /*
@@ -28,19 +29,14 @@
 /****************************************************************************
 a useful function for testing the message system
 ****************************************************************************/
-static void pong_message(struct messaging_context *msg_ctx,
-			 void *private_data, 
-			 uint32_t msg_type, 
-			 struct server_id pid,
-			 DATA_BLOB *data)
+static void pong_message(int msg_type, struct process_id src,
+			 void *buf, size_t len, void *private_data)
 {
 	pong_count++;
 }
 
  int main(int argc, char *argv[])
 {
-	struct event_context *evt_ctx;
-	struct messaging_context *msg_ctx;
 	pid_t pid;
 	int i, n;
 	char buf[12];
@@ -49,14 +45,10 @@
 
 	setup_logging(argv[0],True);
 	
-	lp_load(get_dyn_CONFIGFILE(),False,False,False,True);
+	lp_load(dyn_CONFIGFILE,False,False,False,True);
 
-	if (!(evt_ctx = event_context_init(NULL)) ||
-	    !(msg_ctx = messaging_init(NULL, server_id_self(), evt_ctx))) {
-		fprintf(stderr, "could not init messaging context\n");
-		exit(1);
-	}
-	
+	message_init();
+
 	if (argc != 3) {
 		fprintf(stderr, "%s: Usage - %s pid count\n", argv[0],
 			argv[0]);
@@ -66,15 +58,14 @@
 	pid = atoi(argv[1]);
 	n = atoi(argv[2]);
 
-	messaging_register(msg_ctx, NULL, MSG_PONG, pong_message);
+	message_register(MSG_PONG, pong_message, NULL);
 
 	for (i=0;i<n;i++) {
-		messaging_send(msg_ctx, pid_to_procid(pid), MSG_PING,
-			       &data_blob_null);
+		message_send_pid(pid_to_procid(pid), MSG_PING, NULL, 0, True);
 	}
 
 	while (pong_count < i) {
-		message_dispatch(msg_ctx);
+		message_dispatch();
 		smb_msleep(1);
 	}
 
@@ -84,14 +75,14 @@
 	safe_strcpy(buf, "1234567890", sizeof(buf)-1);
 
 	for (i=0;i<n;i++) {
-		messaging_send(msg_ctx, pid_to_procid(getpid()), MSG_PING,
-			       &data_blob_null);
-		messaging_send_buf(msg_ctx, pid_to_procid(getpid()), MSG_PING,
-				   (uint8 *)buf, 11);
+		message_send_pid(pid_to_procid(getpid()), MSG_PING,
+				 NULL, 0, False);
+		message_send_pid(pid_to_procid(getpid()), MSG_PING,
+				 buf, 11, False);
 	}
 
 	for (i=0;i<n;i++) {
-		message_dispatch(msg_ctx);
+		message_dispatch();
 		smb_msleep(1);
 	}
 
@@ -110,25 +101,24 @@
 
 		printf("Sending pings for %d seconds\n", (int)timelimit);
 		while (timeval_elapsed(&tv) < timelimit) {		
-			if(NT_STATUS_IS_OK(messaging_send_buf(
-						   msg_ctx, pid_to_procid(pid),
-						   MSG_PING,
-						   (uint8 *)buf, 11)))
+			if(NT_STATUS_IS_OK(message_send_pid(pid_to_procid(pid),
+							    MSG_PING,
+							    buf, 11, False)))
 			   ping_count++;
-			if(NT_STATUS_IS_OK(messaging_send(
-						   msg_ctx, pid_to_procid(pid),
-						   MSG_PING, &data_blob_null)))
+			if(NT_STATUS_IS_OK(message_send_pid(pid_to_procid(pid),
+							    MSG_PING,
+							    NULL, 0, False)))
 			   ping_count++;
 
 			while (ping_count > pong_count + 20) {
-				message_dispatch(msg_ctx);
+				message_dispatch();
 			}
 		}
 		
 		printf("waiting for %d remaining replies (done %d)\n", 
 		       (int)(ping_count - pong_count), pong_count);
 		while (timeval_elapsed(&tv) < 30 && pong_count < ping_count) {
-			message_dispatch(msg_ctx);
+			message_dispatch();
 		}
 		
 		if (ping_count != pong_count) {

Modified: branches/samba/upstream/source/torture/nbio.c
===================================================================
--- branches/samba/upstream/source/torture/nbio.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/torture/nbio.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/source/torture/nsstest.c
===================================================================
--- branches/samba/upstream/source/torture/nsstest.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/torture/nsstest.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -28,13 +29,11 @@
 
 static void *find_fn(const char *name)
 {
-	char *s;
+	pstring s;
 	static void *h;
 	void *res;
 
-	if (asprintf(&s, "_nss_%s_%s", nss_name, name) < 0) {
-		exit(1);
-	}
+	pstr_sprintf(s, "_nss_%s_%s", nss_name, name);
 
 	if (!h) {
 		h = sys_dlopen(so_path, RTLD_LAZY);
@@ -47,10 +46,8 @@
 	if (!res) {
 		printf("Can't find function %s\n", s);
 		total_errors++;
-		SAFE_FREE(s);
 		return NULL;
 	}
-	SAFE_FREE(s);
 	return res;
 }
 
@@ -201,6 +198,7 @@
 		SAFE_FREE(buf);
 		return NULL;
 	}
+	SAFE_FREE(buf);
 	return &grp;
 }
 
@@ -239,6 +237,7 @@
 		SAFE_FREE(buf);
 		return NULL;
 	}
+	SAFE_FREE(buf);
 	return &grp;
 }
 
@@ -278,6 +277,7 @@
 		SAFE_FREE(buf);
 		return NULL;
 	}
+	SAFE_FREE(buf);
 	return &grp;
 }
 

Modified: branches/samba/upstream/source/torture/pdbtest.c
===================================================================
--- branches/samba/upstream/source/torture/pdbtest.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/torture/pdbtest.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,15 +16,16 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 
 #include "includes.h"
 
-static bool samu_correct(struct samu *s1, struct samu *s2)
+static BOOL samu_correct(struct samu *s1, struct samu *s2)
 {
-	bool ret = True;
+	BOOL ret = True;
 	uint32 s1_len, s2_len;
 	const char *s1_buf, *s2_buf;
 	const uint8 *d1_buf, *d2_buf;
@@ -229,7 +230,7 @@
 	NTSTATUS rv;
 	int i;
 	struct timeval tv;
-	bool error = False;
+	BOOL error = False;
 	struct passwd *pwd;
 	uint8 *buf;
 	uint32 expire, min_age, history;
@@ -257,7 +258,7 @@
 	poptFreeContext(pc);
 
 	/* Load configuration */
-	lp_load(get_dyn_CONFIGFILE(), False, False, True, True);
+	lp_load(dyn_CONFIGFILE, False, False, True, True);
 	setup_logging("pdbtest", True);
 
 	if (backend == NULL) {
@@ -364,6 +365,24 @@
 					get_friendly_nt_error_msg(rv));
 	}
 
+	pdb->setsampwent(pdb, False, 0);
+	while (NT_STATUS_IS_OK(pdb->getsampwent(pdb, out))) {
+		if (pdb_get_username(out) == NULL) {
+			fprintf(stderr, "Got bad username through getsampwent()\n");
+			error = True;
+			break;
+		}
+		if (NT_STATUS_IS_ERR(pdb->getsampwnam(pdb, in, pdb_get_username(out)))) {
+			fprintf(stderr, "Error getting samu through getsampwnam() of an account we got through getsampwent!\n");
+			error = True;
+			continue;
+		}
+		if (!samu_correct(out, in)) {
+			printf("Record gotten through getsampwnam() differs from same record through getsampwent()\n");
+		}
+	}
+	pdb->endsampwent(pdb);
+	
 	TALLOC_FREE(ctx);
 
 	if (error) {

Copied: branches/samba/upstream/source/torture/rpctorture.c (from rev 1928, branches/samba/upstream/source/torture/rpctorture.c)
===================================================================
--- branches/samba/upstream/source/torture/rpctorture.c	                        (rev 0)
+++ branches/samba/upstream/source/torture/rpctorture.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,545 @@
+/* 
+   Unix SMB/CIFS implementation.
+   SMB client
+   Copyright (C) Andrew Tridgell 1994-1998
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+
+#ifndef REGISTER
+#define REGISTER 0
+#endif
+
+extern pstring global_myname;
+
+extern pstring user_socket_options;
+
+
+extern file_info def_finfo;
+
+#define CNV_LANG(s) dos2unix_format(s,False)
+#define CNV_INPUT(s) unix2dos_format(s,True)
+
+static struct cli_state smbcli;
+struct cli_state *smb_cli = &smbcli;
+
+FILE *out_hnd;
+
+static pstring password; /* local copy only, if one is entered */
+
+/****************************************************************************
+initialise smb client structure
+****************************************************************************/
+void rpcclient_init(void)
+{
+	memset((char *)smb_cli, '\0', sizeof(smb_cli));
+	cli_initialise(smb_cli);
+	smb_cli->capabilities |= CAP_NT_SMBS;
+}
+
+/****************************************************************************
+make smb client connection
+****************************************************************************/
+static BOOL rpcclient_connect(struct client_info *info)
+{
+	struct nmb_name calling;
+	struct nmb_name called;
+
+	make_nmb_name(&called , dns_to_netbios_name(info->dest_host ), info->name_type);
+	make_nmb_name(&calling, dns_to_netbios_name(info->myhostname), 0x0);
+
+	if (!cli_establish_connection(smb_cli, 
+	                          info->dest_host, &info->dest_ip, 
+	                          &calling, &called,
+	                          info->share, info->svc_type,
+	                          False, True))
+	{
+		DEBUG(0,("rpcclient_connect: connection failed\n"));
+		cli_shutdown(smb_cli);
+		return False;
+	}
+
+	return True;
+}
+
+/****************************************************************************
+stop the smb connection(s?)
+****************************************************************************/
+static void rpcclient_stop(void)
+{
+	cli_shutdown(smb_cli);
+}
+
+/****************************************************************************
+  log in as an nt user, log out again. 
+****************************************************************************/
+void run_enums_test(int num_ops, struct client_info *cli_info, struct cli_state *cli)
+{
+	pstring cmd;
+	int i;
+
+	/* establish connections.  nothing to stop these being re-established. */
+	rpcclient_connect(cli_info);
+
+	DEBUG(5,("rpcclient_connect: cli->fd:%d\n", cli->fd));
+	if (cli->fd <= 0)
+	{
+		fprintf(out_hnd, "warning: connection could not be established to %s<%02x>\n",
+		                 cli_info->dest_host, cli_info->name_type);
+		return;
+	}
+	
+	for (i = 0; i < num_ops; i++)
+	{
+		set_first_token("");
+		cmd_srv_enum_sess(cli_info);
+		set_first_token("");
+		cmd_srv_enum_shares(cli_info);
+		set_first_token("");
+		cmd_srv_enum_files(cli_info);
+
+		if (password[0] != 0)
+		{
+			slprintf(cmd, sizeof(cmd)-1, "1");
+			set_first_token(cmd);
+		}
+		else
+		{
+			set_first_token("");
+		}
+		cmd_srv_enum_conn(cli_info);
+	}
+
+	rpcclient_stop();
+
+}
+
+/****************************************************************************
+  log in as an nt user, log out again. 
+****************************************************************************/
+void run_ntlogin_test(int num_ops, struct client_info *cli_info, struct cli_state *cli)
+{
+	pstring cmd;
+	int i;
+
+	/* establish connections.  nothing to stop these being re-established. */
+	rpcclient_connect(cli_info);
+
+	DEBUG(5,("rpcclient_connect: cli->fd:%d\n", cli->fd));
+	if (cli->fd <= 0)
+	{
+		fprintf(out_hnd, "warning: connection could not be established to %s<%02x>\n",
+		                 cli_info->dest_host, cli_info->name_type);
+		return;
+	}
+	
+	for (i = 0; i < num_ops; i++)
+	{
+		slprintf(cmd, sizeof(cmd)-1, "%s %s", cli->user_name, password);
+		set_first_token(cmd);
+
+		cmd_netlogon_login_test(cli_info);
+	}
+
+	rpcclient_stop();
+
+}
+
+/****************************************************************************
+  runs n simultaneous functions.
+****************************************************************************/
+static void create_procs(int nprocs, int numops, 
+		struct client_info *cli_info, struct cli_state *cli,
+		void (*fn)(int, struct client_info *, struct cli_state *))
+{
+	int i, status;
+
+	for (i=0;i<nprocs;i++)
+	{
+		if (fork() == 0)
+		{
+			pid_t mypid = getpid();
+			sys_srandom(mypid ^ time(NULL));
+			fn(numops, cli_info, cli);
+			fflush(out_hnd);
+			_exit(0);
+		}
+	}
+
+	for (i=0;i<nprocs;i++)
+	{
+		waitpid(0, &status, 0);
+	}
+}
+/****************************************************************************
+usage on the program - OUT OF DATE!
+****************************************************************************/
+static void usage(char *pname)
+{
+  fprintf(out_hnd, "Usage: %s service <password> [-d debuglevel] [-l log] ",
+	   pname);
+
+  fprintf(out_hnd, "\nVersion %s\n",SAMBA_VERSION_STRING);
+  fprintf(out_hnd, "\t-d debuglevel         set the debuglevel\n");
+  fprintf(out_hnd, "\t-l log basename.      Basename for log/debug files\n");
+  fprintf(out_hnd, "\t-n netbios name.      Use this name as my netbios name\n");
+  fprintf(out_hnd, "\t-m max protocol       set the max protocol level\n");
+  fprintf(out_hnd, "\t-I dest IP            use this IP to connect to\n");
+  fprintf(out_hnd, "\t-E                    write messages to stderr instead of stdout\n");
+  fprintf(out_hnd, "\t-U username           set the network username\n");
+  fprintf(out_hnd, "\t-W workgroup          set the workgroup name\n");
+  fprintf(out_hnd, "\t-t terminal code      terminal i/o code {sjis|euc|jis7|jis8|junet|hex}\n");
+  fprintf(out_hnd, "\n");
+}
+
+enum client_action
+{
+	CLIENT_NONE,
+	CLIENT_IPC,
+	CLIENT_SVC
+};
+
+/****************************************************************************
+  main program
+****************************************************************************/
+ int main(int argc,char *argv[])
+{
+	char *pname = argv[0];
+	int opt;
+	extern char *optarg;
+	extern int optind;
+	pstring term_code;
+	BOOL got_pass = False;
+	char *cmd_str="";
+	enum client_action cli_action = CLIENT_NONE;
+	int nprocs = 1;
+	int numops = 100;
+	pstring logfile;
+
+	struct client_info cli_info;
+
+	out_hnd = stdout;
+
+	rpcclient_init();
+
+#ifdef KANJI
+	pstrcpy(term_code, KANJI);
+#else /* KANJI */
+	*term_code = 0;
+#endif /* KANJI */
+
+	if (!lp_load(dyn_CONFIGFILE,True, False, False, True))
+	{
+		fprintf(stderr, "Can't load %s - run testparm to debug it\n", dyn_CONFIGFILE);
+	}
+
+	DEBUGLEVEL = 0;
+
+	cli_info.put_total_size = 0;
+	cli_info.put_total_time_ms = 0;
+	cli_info.get_total_size = 0;
+	cli_info.get_total_time_ms = 0;
+
+	cli_info.dir_total = 0;
+	cli_info.newer_than = 0;
+	cli_info.archive_level = 0;
+	cli_info.print_mode = 1;
+
+	cli_info.translation = False;
+	cli_info.recurse_dir = False;
+	cli_info.lowercase = False;
+	cli_info.prompt = True;
+	cli_info.abort_mget = True;
+
+	cli_info.dest_ip.s_addr = 0;
+	cli_info.name_type = 0x20;
+
+	pstrcpy(cli_info.cur_dir , "\\");
+	pstrcpy(cli_info.file_sel, "");
+	pstrcpy(cli_info.base_dir, "");
+	pstrcpy(smb_cli->domain, "");
+	pstrcpy(smb_cli->user_name, "");
+	pstrcpy(cli_info.myhostname, "");
+	pstrcpy(cli_info.dest_host, "");
+
+	pstrcpy(cli_info.svc_type, "A:");
+	pstrcpy(cli_info.share, "");
+	pstrcpy(cli_info.service, "");
+
+	ZERO_STRUCT(cli_info.dom.level3_sid);
+	pstrcpy(cli_info.dom.level3_dom, "");
+	ZERO_STRUCT(cli_info.dom.level5_sid);
+	pstrcpy(cli_info.dom.level5_dom, "");
+
+	{
+		int i;
+		for (i=0; i<PI_MAX_PIPES; i++)
+			smb_cli->pipes[i].fnum   = 0xffff;
+	}
+
+	setup_logging(pname, True);
+
+	if (!get_myname(global_myname))
+	{
+		fprintf(stderr, "Failed to get my hostname.\n");
+	}
+
+	password[0] = 0;
+
+	if (argc < 2)
+	{
+		usage(pname);
+		exit(1);
+	}
+
+	if (*argv[1] != '-')
+	{
+		pstrcpy(cli_info.service, argv[1]);  
+		/* Convert any '/' characters in the service name to '\' characters */
+		string_replace( cli_info.service, '/','\\');
+		argc--;
+		argv++;
+
+		DEBUG(1,("service: %s\n", cli_info.service));
+
+		if (count_chars(cli_info.service,'\\') < 3)
+		{
+			usage(pname);
+			printf("\n%s: Not enough '\\' characters in service\n", cli_info.service);
+			exit(1);
+		}
+
+		/*
+		if (count_chars(cli_info.service,'\\') > 3)
+		{
+			usage(pname);
+			printf("\n%s: Too many '\\' characters in service\n", cli_info.service);
+			exit(1);
+		}
+		*/
+
+		if (argc > 1 && (*argv[1] != '-'))
+		{
+			got_pass = True;
+			pstrcpy(password,argv[1]);  
+			memset(argv[1],'X',strlen(argv[1]));
+			argc--;
+			argv++;
+		}
+
+		cli_action = CLIENT_SVC;
+	}
+
+	while ((opt = getopt(argc, argv,"s:O:M:S:i:N:o:n:d:l:hI:EB:U:L:t:m:W:T:D:c:")) != EOF)
+	{
+		switch (opt)
+		{
+			case 'm':
+			{
+				/* FIXME ... max_protocol seems to be funny here */
+
+				int max_protocol = 0;
+				max_protocol = interpret_protocol(optarg,max_protocol);
+				fprintf(stderr, "max protocol not currently supported\n");
+				break;
+			}
+
+			case 'O':
+			{
+				pstrcpy(user_socket_options,optarg);
+				break;	
+			}
+
+			case 'S':
+			{
+				pstrcpy(cli_info.dest_host,optarg);
+				strupper_m(cli_info.dest_host);
+				cli_action = CLIENT_IPC;
+				break;
+			}
+
+			case 'i':
+			{
+				pstrcpy(scope, optarg);
+				break;
+			}
+
+			case 'U':
+			{
+				char *lp;
+				pstrcpy(smb_cli->user_name,optarg);
+				if ((lp=strchr_m(smb_cli->user_name,'%')))
+				{
+					*lp = 0;
+					pstrcpy(password,lp+1);
+					got_pass = True;
+					memset(strchr_m(optarg,'%')+1,'X',strlen(password));
+				}
+				break;
+			}
+
+			case 'W':
+			{
+				pstrcpy(smb_cli->domain,optarg);
+				break;
+			}
+
+			case 'E':
+			{
+				dbf = x_stderr;
+				break;
+			}
+
+			case 'I':
+			{
+				cli_info.dest_ip = *interpret_addr2(optarg);
+				if (is_zero_ip(cli_info.dest_ip))
+				{
+					exit(1);
+				}
+				break;
+			}
+
+			case 'N':
+			{
+				nprocs = atoi(optarg);
+				break;
+			}
+
+			case 'o':
+			{
+				numops = atoi(optarg);
+				break;
+			}
+
+			case 'n':
+			{
+				fstrcpy(global_myname, optarg);
+				break;
+			}
+
+			case 'd':
+			{
+				if (*optarg == 'A')
+					DEBUGLEVEL = 10000;
+				else
+					DEBUGLEVEL = atoi(optarg);
+				break;
+			}
+
+			case 'l':
+			{
+				slprintf(logfile, sizeof(logfile)-1,
+				         "%s.client",optarg);
+				lp_set_logfile(logfile);
+				break;
+			}
+
+			case 'c':
+			{
+				cmd_str = optarg;
+				got_pass = True;
+				break;
+			}
+
+			case 'h':
+			{
+				usage(pname);
+				exit(0);
+				break;
+			}
+
+			case 's':
+			{
+				pstrcpy(dyn_CONFIGFILE, optarg);
+				break;
+			}
+
+			case 't':
+			{
+				pstrcpy(term_code, optarg);
+				break;
+			}
+
+			default:
+			{
+				usage(pname);
+				exit(1);
+				break;
+			}
+		}
+	}
+
+	if (cli_action == CLIENT_NONE)
+	{
+		usage(pname);
+		exit(1);
+	}
+
+	strupper_m(global_myname);
+	fstrcpy(cli_info.myhostname, global_myname);
+
+	DEBUG(3,("%s client started (version %s)\n",current_timestring(False),SAMBA_VERSION_STRING));
+
+	if (*smb_cli->domain == 0)
+	{
+		pstrcpy(smb_cli->domain,lp_workgroup());
+	}
+	strupper_m(smb_cli->domain);
+
+	load_interfaces();
+
+	if (cli_action == CLIENT_IPC)
+	{
+		pstrcpy(cli_info.share, "IPC$");
+		pstrcpy(cli_info.svc_type, "IPC");
+	}
+
+	fstrcpy(cli_info.mach_acct, cli_info.myhostname);
+	strupper_m(cli_info.mach_acct);
+	fstrcat(cli_info.mach_acct, "$");
+
+	/* set the password cache info */
+	if (got_pass)
+	{
+		if (password[0] == 0)
+		{
+			pwd_set_nullpwd(&(smb_cli->pwd));
+		}
+		else
+		{
+			pwd_make_lm_nt_16(&(smb_cli->pwd), password); /* generate 16 byte hashes */
+		}
+	}
+	else 
+	{
+		char *pwd = getpass("Enter Password:");
+		safe_strcpy(password, pwd, sizeof(password));
+		pwd_make_lm_nt_16(&(smb_cli->pwd), password); /* generate 16 byte hashes */
+	}
+
+	create_procs(nprocs, numops, &cli_info, smb_cli, run_enums_test);
+
+	if (password[0] != 0)
+	{
+		create_procs(nprocs, numops, &cli_info, smb_cli, run_ntlogin_test);
+	}
+
+	fflush(out_hnd);
+
+	return(0);
+}

Copied: branches/samba/upstream/source/torture/samtest.h (from rev 1928, branches/samba/upstream/source/torture/samtest.h)
===================================================================
--- branches/samba/upstream/source/torture/samtest.h	                        (rev 0)
+++ branches/samba/upstream/source/torture/samtest.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,38 @@
+/* 
+   Unix SMB/CIFS implementation.
+   SAM module tester
+
+   Copyright (C) Jelmer Vernooij 2002
+
+   Most of this code was ripped off of rpcclient.
+   Copyright (C) Tim Potter 2000-2001
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+struct samtest_state {
+	SAM_CONTEXT *context;
+	NT_USER_TOKEN *token;
+};
+
+struct cmd_set {
+	char *name;
+	NTSTATUS (*fn)(struct samtest_state *sam, TALLOC_CTX *mem_ctx, int argc, 
+                       char **argv);
+	char *description;
+	char *usage;
+};
+
+

Modified: branches/samba/upstream/source/torture/scanner.c
===================================================================
--- branches/samba/upstream/source/torture/scanner.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/torture/scanner.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -23,9 +24,6 @@
 #define OP_MIN 0
 #define OP_MAX 20
 
-#define DATA_SIZE 1024
-#define PARAM_SIZE 1024
-
 /****************************************************************************
 look for a partial hit
 ****************************************************************************/
@@ -87,14 +85,14 @@
 	NTSTATUS ret=NT_STATUS_OK;
 
 	ret = try_trans2(cli, op, param, data, param_len,
-			 DATA_SIZE, rparam_len, rdata_len);
+			 sizeof(pstring), rparam_len, rdata_len);
 #if VERBOSE 
 	printf("op=%d level=%d ret=%s\n", op, level, nt_errstr(ret));
 #endif
 	if (!NT_STATUS_IS_OK(ret)) return ret;
 
 	*data_len = 0;
-	while (*data_len < DATA_SIZE) {
+	while (*data_len < sizeof(pstring)) {
 		ret = try_trans2(cli, op, param, data, param_len,
 				 *data_len, rparam_len, rdata_len);
 		if (NT_STATUS_IS_OK(ret)) break;
@@ -112,13 +110,13 @@
 /****************************************************************************
 check for existance of a trans2 call
 ****************************************************************************/
-static bool scan_trans2(struct cli_state *cli, int op, int level, 
+static BOOL scan_trans2(struct cli_state *cli, int op, int level, 
 			int fnum, int dnum, const char *fname)
 {
 	int data_len = 0;
 	int param_len = 0;
 	unsigned int rparam_len, rdata_len;
-	char param[PARAM_SIZE], data[DATA_SIZE];
+	pstring param, data;
 	NTSTATUS status;
 
 	memset(data, 0, sizeof(data));
@@ -189,7 +187,7 @@
 }
 
 
-bool torture_trans2_scan(int dummy)
+BOOL torture_trans2_scan(int dummy)
 {
 	static struct cli_state *cli;
 	int op, level;
@@ -289,14 +287,14 @@
 	NTSTATUS ret=NT_STATUS_OK;
 
 	ret = try_nttrans(cli, op, param, data, param_len,
-			 DATA_SIZE, rparam_len, rdata_len);
+			 sizeof(pstring), rparam_len, rdata_len);
 #if VERBOSE 
 	printf("op=%d level=%d ret=%s\n", op, level, nt_errstr(ret));
 #endif
 	if (!NT_STATUS_IS_OK(ret)) return ret;
 
 	*data_len = 0;
-	while (*data_len < DATA_SIZE) {
+	while (*data_len < sizeof(pstring)) {
 		ret = try_nttrans(cli, op, param, data, param_len,
 				 *data_len, rparam_len, rdata_len);
 		if (NT_STATUS_IS_OK(ret)) break;
@@ -314,13 +312,13 @@
 /****************************************************************************
 check for existance of a nttrans call
 ****************************************************************************/
-static bool scan_nttrans(struct cli_state *cli, int op, int level, 
+static BOOL scan_nttrans(struct cli_state *cli, int op, int level, 
 			int fnum, int dnum, const char *fname)
 {
 	int data_len = 0;
 	int param_len = 0;
 	unsigned int rparam_len, rdata_len;
-	char param[PARAM_SIZE], data[DATA_SIZE];
+	pstring param, data;
 	NTSTATUS status;
 
 	memset(data, 0, sizeof(data));
@@ -391,7 +389,7 @@
 }
 
 
-bool torture_nttrans_scan(int dummy)
+BOOL torture_nttrans_scan(int dummy)
 {
 	static struct cli_state *cli;
 	int op, level;

Modified: branches/samba/upstream/source/torture/smbiconv.c
===================================================================
--- branches/samba/upstream/source/torture/smbiconv.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/torture/smbiconv.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,11 +17,11 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
-#undef realloc
 
 static int
 process_block (smb_iconv_t cd, const char *addr, size_t len, FILE *output)
@@ -86,7 +86,7 @@
 
 
 static int
-process_fd (smb_iconv_t cd, int fd, FILE *output)
+process_fd (iconv_t cd, int fd, FILE *output)
 {
   /* we have a problem with reading from a descriptor since we must not
      provide the iconv() function an incomplete character or shift
@@ -168,8 +168,8 @@
 int main(int argc, char *argv[])
 {
 	const char *file = NULL;
-	const char *from = "";
-	const char *to = "";
+	char *from = "";
+	char *to = "";
 	char *output = NULL;
 	const char *preload_modules[] = {NULL, NULL};
 	FILE *out = stdout;
@@ -214,7 +214,7 @@
 	}
 
 	cd = smb_iconv_open(to, from);
-	if (cd == (smb_iconv_t)-1) {
+	if((int)cd == -1) {
 		DEBUG(0,("unable to find from or to encoding, exiting...\n"));
 		return 1;
 	}

Modified: branches/samba/upstream/source/torture/t_asn1.c
===================================================================
--- branches/samba/upstream/source/torture/t_asn1.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/torture/t_asn1.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -28,7 +28,7 @@
 {
 	int i = 0;
 	int val;
-	bool ok = True;
+	BOOL ok = True;
 
 	for (i=0; tests[i].data != NULL; i++) {
 		ASN1_DATA data;

Copied: branches/samba/upstream/source/torture/t_doschar.c (from rev 1928, branches/samba/upstream/source/torture/t_doschar.c)
===================================================================
--- branches/samba/upstream/source/torture/t_doschar.c	                        (rev 0)
+++ branches/samba/upstream/source/torture/t_doschar.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,42 @@
+/*
+   Samba - Unix SMB/CIFS implementation
+   Test harness for check_dos_char
+   Copyright (C) Martin Pool 2003
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+
+
+/*
+ * Just print out DOS validity or not for every character.
+ *
+ * DOS validity for a Unicode character set means that it can be
+ * represented in DOS codepage, and that the DOS character maps back
+ * to the same Unicode character.
+ *
+ * This depends on which DOS codepage is configured.
+ */
+ int main(void)
+{
+	smb_ucs2_t	i;
+
+	for (i = 0; i < 0xffff; i++) {
+		printf("%d %d\n", (int) i, (int) check_dos_char(i));
+	}
+	
+	return 0;
+}

Deleted: branches/samba/upstream/source/torture/test_ntlm_auth.py
===================================================================
--- branches/samba/upstream/source/torture/test_ntlm_auth.py	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/torture/test_ntlm_auth.py	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,218 +0,0 @@
-#!/usr/bin/env python
-
-# Unix SMB/CIFS implementation.
-# A test for the ntlm_auth tool
-# Copyright (C) Kai Blin <kai at samba.org> 2008
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-"""Test ntlm_auth
-This test program will start ntlm_auth with the given command line switches and
-see if it will get the expected results.
-"""
-
-import os
-import sys
-from optparse import OptionParser
-
-class ReadChildError(Exception):
-	pass
-
-class WriteChildError(Exception):
-	pass
-
-def readLine(pipe):
-	"""readLine(pipe) -> str
-	Read a line from the child's pipe, returns the string read.
-	Throws ReadChildError if the read fails.
-	"""
-	buf = os.read(pipe, 2047)
-	newline = buf.find('\n')
-	if newline == -1:
-		raise ReadChildError()
-	return buf[:newline]
-
-def writeLine(pipe, buf):
-	"""writeLine(pipe, buf) -> nul
-	Write a line to the child's pipe.
-	Raises WriteChildError if the write fails.
-	"""
-	written = os.write(pipe, buf)
-	if written != len(buf):
-		raise WriteChildError()
-	os.write(pipe, "\n")
-
-def parseCommandLine():
-	"""parseCommandLine() -> (opts, ntlm_auth_path)
-	Parse the command line.
-	Return a tuple consisting of the options and the path to ntlm_auth.
-	"""
-	usage = "usage: %prog [options] path/to/ntlm_auth"
-	parser = OptionParser(usage)
-
-	parser.set_defaults(client_username="foo")
-	parser.set_defaults(client_password="secret")
-	parser.set_defaults(client_domain="FOO")
-	parser.set_defaults(client_helper="ntlmssp-client-1")
-
-	parser.set_defaults(server_username="foo")
-	parser.set_defaults(server_password="secret")
-	parser.set_defaults(server_domain="FOO")
-	parser.set_defaults(server_helper="squid-2.5-ntlmssp")
-	parser.set_defaults(config_file="/etc/samba/smb.conf")
-
-	parser.add_option("--client-username", dest="client_username",\
-				help="User name for the client. [default: foo]")
-	parser.add_option("--client-password", dest="client_password",\
-				help="Password the client will send. [default: secret]")
-	parser.add_option("--client-domain", dest="client_domain",\
-				help="Domain the client authenticates for. [default: FOO]")
-	parser.add_option("--client-helper", dest="client_helper",\
-				help="Helper mode for the ntlm_auth client. [default: ntlmssp-client-1]")
-
-	parser.add_option("--server-username", dest="server_username",\
-				help="User name server uses for local auth. [default: foo]")
-	parser.add_option("--server-password", dest="server_password",\
-				help="Password server uses for local auth. [default: secret]")
-	parser.add_option("--server-domain", dest="server_domain",\
-				help="Domain server uses for local auth. [default: FOO]")
-	parser.add_option("--server-helper", dest="server_helper",\
-				help="Helper mode for the ntlm_auth server. [default: squid-2.5-server]")
-
-	parser.add_option("-s", "--configfile", dest="config_file",\
-				help="Path to smb.conf file. [default:/etc/samba/smb.conf")
-
-	(opts, args) = parser.parse_args()
-	if len(args) != 1:
-		parser.error("Invalid number of arguments.")
-
-	if not os.access(args[0], os.X_OK):
-		parser.error("%s is not executable." % args[0])
-
-	return (opts, args[0])
-
-
-def main():
-	"""main() -> int
-	Run the test.
-	Returns 0 if test succeeded, <>0 otherwise.
-	"""
-	(opts, ntlm_auth_path) = parseCommandLine()
-
-	(client_in_r,  client_in_w)  = os.pipe()
-	(client_out_r, client_out_w) = os.pipe()
-
-	client_pid = os.fork()
-
-	if not client_pid:
-		# We're in the client child
-		os.close(0)
-		os.close(1)
-
-		os.dup2(client_out_r, 0)
-		os.close(client_out_r)
-		os.close(client_out_w)
-
-		os.dup2(client_in_w, 1)
-		os.close(client_in_r)
-		os.close(client_in_w)
-
-		client_args = []
-		client_args.append("--helper-protocol=%s" % opts.client_helper)
-		client_args.append("--username=%s" % opts.client_username)
-		client_args.append("--password=%s" % opts.client_password)
-		client_args.append("--domain=%s" % opts.client_domain)
-		client_args.append("--configfile=%s" % opts.config_file)
-
-		os.execv(ntlm_auth_path, client_args)
-
-	client_in = client_in_r
-	os.close(client_in_w)
-
-	client_out = client_out_w
-	os.close(client_out_r)
-
-	(server_in_r,  server_in_w)  = os.pipe()
-	(server_out_r, server_out_w) = os.pipe()
-
-	server_pid = os.fork()
-
-	if not server_pid:
-		# We're in the server child
-		os.close(0)
-		os.close(1)
-
-		os.dup2(server_out_r, 0)
-		os.close(server_out_r)
-		os.close(server_out_w)
-
-		os.dup2(server_in_w, 1)
-		os.close(server_in_r)
-		os.close(server_in_w)
-
-		server_args = []
-		server_args.append("--helper-protocol=%s" % opts.server_helper)
-		server_args.append("--username=%s" % opts.server_username)
-		server_args.append("--password=%s" % opts.server_password)
-		server_args.append("--domain=%s" % opts.server_domain)
-		server_args.append("--configfile=%s" % opts.config_file)
-
-		os.execv(ntlm_auth_path, server_args)
-
-	server_in = server_in_r
-	os.close(server_in_w)
-
-	server_out = server_out_w
-	os.close(server_out_r)
-
-	# We're in the parent
-	writeLine(client_out, "YR")
-	buf = readLine(client_in)
-
-	if buf.count("YR ", 0, 3) != 1:
-		sys.exit(1)
-
-	writeLine(server_out, buf)
-	buf = readLine(server_in)
-
-	if buf.count("TT ", 0, 3) != 1:
-		sys.exit(2)
-
-	writeLine(client_out, buf)
-	buf = readLine(client_in)
-
-	if buf.count("AF ", 0, 3) != 1:
-		sys.exit(3)
-
-	# Client sends 'AF <base64 blob>' but server expects 'KK <abse64 blob>'
-	buf = buf.replace("AF", "KK", 1)
-
-	writeLine(server_out, buf)
-	buf = readLine(server_in)
-
-	if buf.count("AF ", 0, 3) != 1:
-		sys.exit(4)
-
-	os.close(server_in)
-	os.close(server_out)
-	os.close(client_in)
-	os.close(client_out)
-	os.waitpid(server_pid, 0)
-	os.waitpid(client_pid, 0)
-	sys.exit(0)
-
-if __name__ == "__main__":
-	main()
-
-

Modified: branches/samba/upstream/source/torture/torture.c
===================================================================
--- branches/samba/upstream/source/torture/torture.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/torture/torture.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -31,17 +32,16 @@
 static int procnum; /* records process count number when forking */
 static struct cli_state *current_cli;
 static fstring randomfname;
-static bool use_oplocks;
-static bool use_level_II_oplocks;
+static BOOL use_oplocks;
+static BOOL use_level_II_oplocks;
 static const char *client_txt = "client_oplocks.txt";
-static bool use_kerberos;
+static BOOL use_kerberos;
 static fstring multishare_conn_fname;
-static bool use_multishare_conn = False;
-static bool do_encrypt;
+static BOOL use_multishare_conn = False;
 
-bool torture_showall = False;
+BOOL torture_showall = False;
 
-static double create_procs(bool (*fn)(int), bool *result);
+static double create_procs(BOOL (*fn)(int), BOOL *result);
 
 
 static struct timeval tp1,tp2;
@@ -96,69 +96,18 @@
 	return ret;
 }
 
-/********************************************************************
- Ensure a connection is encrypted.
-********************************************************************/
 
-static bool force_cli_encryption(struct cli_state *c,
-			const char *sharename)
-{
-	uint16 major, minor;
-	uint32 caplow, caphigh;
-	NTSTATUS status;
-
-	if (!SERVER_HAS_UNIX_CIFS(c)) {
-		d_printf("Encryption required and "
-			"server that doesn't support "
-			"UNIX extensions - failing connect\n");
-			return false;
-	}
-
-	if (!cli_unix_extensions_version(c, &major, &minor, &caplow, &caphigh)) {
-		d_printf("Encryption required and "
-			"can't get UNIX CIFS extensions "
-			"version from server.\n");
-		return false;
-	}
-
-	if (!(caplow & CIFS_UNIX_TRANSPORT_ENCRYPTION_CAP)) {
-		d_printf("Encryption required and "
-			"share %s doesn't support "
-			"encryption.\n", sharename);
-		return false;
-	}
-
-	if (c->use_kerberos) {
-		status = cli_gss_smb_encryption_start(c);
-	} else {
-		status = cli_raw_ntlm_smb_encryption_start(c,
-						username,
-						password,
-						workgroup);
-	}
-
-	if (!NT_STATUS_IS_OK(status)) {
-		d_printf("Encryption required and "
-			"setup failed with error %s.\n",
-			nt_errstr(status));
-		return false;
-	}
-
-	return true;
-}
-
-
 static struct cli_state *open_nbt_connection(void)
 {
 	struct nmb_name called, calling;
-	struct sockaddr_storage ss;
+	struct in_addr ip;
 	struct cli_state *c;
 	NTSTATUS status;
 
 	make_nmb_name(&calling, myname, 0x0);
 	make_nmb_name(&called , host, 0x20);
 
-        zero_addr(&ss);
+        zero_ip(&ip);
 
 	if (!(c = cli_initialise())) {
 		printf("Failed initialize cli_struct to connect with %s\n", host);
@@ -167,7 +116,7 @@
 
 	c->port = port_to_use;
 
-	status = cli_connect(c, host, &ss);
+	status = cli_connect(c, host, &ip);
 	if (!NT_STATUS_IS_OK(status)) {
 		printf("Failed to connect with %s. Error %s\n", host, nt_errstr(status) );
 		return NULL;
@@ -181,10 +130,10 @@
 
 	if (!cli_session_request(c, &calling, &called)) {
 		/*
-		 * Well, that failed, try *SMBSERVER ...
+		 * Well, that failed, try *SMBSERVER ... 
 		 * However, we must reconnect as well ...
 		 */
-		status = cli_connect(c, host, &ss);
+		status = cli_connect(c, host, &ip);
 		if (!NT_STATUS_IS_OK(status)) {
 			printf("Failed to connect with %s. Error %s\n", host, nt_errstr(status) );
 			return NULL;
@@ -232,7 +181,7 @@
 /*
   parse a //server/share type UNC name
 */
-bool smbcli_parse_unc(const char *unc_name, TALLOC_CTX *mem_ctx,
+BOOL smbcli_parse_unc(const char *unc_name, TALLOC_CTX *mem_ctx,
 		      char **hostname, char **sharename)
 {
 	char *p;
@@ -261,11 +210,11 @@
 	return False;
 }
 
-static bool torture_open_connection_share(struct cli_state **c,
+static BOOL torture_open_connection_share(struct cli_state **c,
 				   const char *hostname, 
 				   const char *sharename)
 {
-	bool retry;
+	BOOL retry;
 	int flags = 0;
 	NTSTATUS status;
 
@@ -287,10 +236,6 @@
 	if (use_level_II_oplocks) (*c)->use_level_II_oplocks = True;
 	(*c)->timeout = 120000; /* set a really long timeout (2 minutes) */
 
-	if (do_encrypt) {
-		return force_cli_encryption(*c,
-					sharename);
-	}
 	return True;
 }
 
@@ -303,11 +248,11 @@
 	}
 }
 
-bool torture_open_connection(struct cli_state **c, int conn_index)
+BOOL torture_open_connection(struct cli_state **c, int conn_index)
 {
 	char **unc_list = NULL;
 	int num_unc_names = 0;
-	bool result;
+	BOOL result;
 
 	if (use_multishare_conn==True) {
 		char *h, *s;
@@ -335,12 +280,12 @@
 	return torture_open_connection_share(c, host, share);
 }
 
-bool torture_cli_session_setup2(struct cli_state *cli, uint16 *new_vuid)
+BOOL torture_cli_session_setup2(struct cli_state *cli, uint16 *new_vuid)
 {
 	uint16 old_vuid = cli->vuid;
 	fstring old_user_name;
 	size_t passlen = strlen(password);
-	bool ret;
+	BOOL ret;
 
 	fstrcpy(old_user_name, cli->user_name);
 	cli->vuid = 0;
@@ -355,9 +300,9 @@
 }
 
 
-bool torture_close_connection(struct cli_state *c)
+BOOL torture_close_connection(struct cli_state *c)
 {
-	bool ret = True;
+	BOOL ret = True;
 	if (!cli_tdis(c)) {
 		printf("tdis failed (%s)\n", cli_errstr(c));
 		ret = False;
@@ -370,7 +315,7 @@
 
 
 /* check if the server produced the expected error code */
-static bool check_error(int line, struct cli_state *c, 
+static BOOL check_error(int line, struct cli_state *c, 
 			uint8 eclass, uint32 ecode, NTSTATUS nterr)
 {
         if (cli_is_dos_error(c)) {
@@ -407,7 +352,7 @@
 }
 
 
-static bool wait_lock(struct cli_state *c, int fnum, uint32 offset, uint32 len)
+static BOOL wait_lock(struct cli_state *c, int fnum, uint32 offset, uint32 len)
 {
 	while (!cli_lock(c, fnum, offset, len, -1, WRITE_LOCK)) {
 		if (!check_error(__LINE__, c, ERRDOS, ERRlock, NT_STATUS_LOCK_NOT_GRANTED)) return False;
@@ -416,7 +361,7 @@
 }
 
 
-static bool rw_torture(struct cli_state *c)
+static BOOL rw_torture(struct cli_state *c)
 {
 	const char *lockfname = "\\torture.lck";
 	fstring fname;
@@ -425,7 +370,7 @@
 	pid_t pid2, pid = getpid();
 	int i, j;
 	char buf[1024];
-	bool correct = True;
+	BOOL correct = True;
 
 	memset(buf, '\0', sizeof(buf));
 
@@ -507,10 +452,10 @@
 	return correct;
 }
 
-static bool run_torture(int dummy)
+static BOOL run_torture(int dummy)
 {
 	struct cli_state *cli;
-        bool ret;
+        BOOL ret;
 
 	cli = current_cli;
 
@@ -525,7 +470,7 @@
 	return ret;
 }
 
-static bool rw_torture3(struct cli_state *c, char *lockfname)
+static BOOL rw_torture3(struct cli_state *c, char *lockfname)
 {
 	int fnum = -1;
 	unsigned int i = 0;
@@ -534,7 +479,7 @@
 	unsigned count;
 	unsigned countprev = 0;
 	ssize_t sent = 0;
-	bool correct = True;
+	BOOL correct = True;
 
 	srandom(1);
 	for (i = 0; i < sizeof(buf); i += sizeof(uint32))
@@ -624,7 +569,7 @@
 	return correct;
 }
 
-static bool rw_torture2(struct cli_state *c1, struct cli_state *c2)
+static BOOL rw_torture2(struct cli_state *c1, struct cli_state *c2)
 {
 	const char *lockfname = "\\torture2.lck";
 	int fnum1;
@@ -632,7 +577,7 @@
 	int i;
 	char buf[131072];
 	char buf_rd[131072];
-	bool correct = True;
+	BOOL correct = True;
 	ssize_t bytes_read;
 
 	if (!cli_unlink(c1, lockfname)) {
@@ -703,10 +648,10 @@
 	return correct;
 }
 
-static bool run_readwritetest(int dummy)
+static BOOL run_readwritetest(int dummy)
 {
 	static struct cli_state *cli1, *cli2;
-	bool test1, test2 = False;
+	BOOL test1, test2 = False;
 
 	if (!torture_open_connection(&cli1, 0) || !torture_open_connection(&cli2, 1)) {
 		return False;
@@ -735,10 +680,10 @@
 	return (test1 && test2);
 }
 
-static bool run_readwritemulti(int dummy)
+static BOOL run_readwritemulti(int dummy)
 {
 	struct cli_state *cli;
-	bool test;
+	BOOL test;
 
 	cli = current_cli;
 
@@ -754,14 +699,14 @@
 	return test;
 }
 
-static bool run_readwritelarge(int dummy)
+static BOOL run_readwritelarge(int dummy)
 {
 	static struct cli_state *cli1;
 	int fnum1;
 	const char *lockfname = "\\large.dat";
 	SMB_OFF_T fsize;
 	char buf[126*1024];
-	bool correct = True;
+	BOOL correct = True;
  
 	if (!torture_open_connection(&cli1, 0)) {
 		return False;
@@ -862,15 +807,15 @@
 #define ival(s) strtol(s, NULL, 0)
 
 /* run a test that simulates an approximate netbench client load */
-static bool run_netbench(int client)
+static BOOL run_netbench(int client)
 {
 	struct cli_state *cli;
 	int i;
-	char line[1024];
+	pstring line;
 	char cname[20];
 	FILE *f;
 	const char *params[20];
-	bool correct = True;
+	BOOL correct = True;
 
 	cli = current_cli;
 
@@ -890,7 +835,6 @@
 	}
 
 	while (fgets(line, sizeof(line)-1, f)) {
-		char *saveptr;
 		line_count++;
 
 		line[strlen(line)-1] = 0;
@@ -898,11 +842,11 @@
 		/* printf("[%d] %s\n", line_count, line); */
 
 		all_string_sub(line,"client1", cname, sizeof(line));
-
+		
 		/* parse the command parameters */
-		params[0] = strtok_r(line, " ", &saveptr);
+		params[0] = strtok(line," ");
 		i = 0;
-		while (params[i]) params[++i] = strtok_r(NULL, " ", &saveptr);
+		while (params[i]) params[++i] = strtok(NULL," ");
 
 		params[i] = "";
 
@@ -960,10 +904,10 @@
 
 
 /* run a test that simulates an approximate netbench client load */
-static bool run_nbench(int dummy)
+static BOOL run_nbench(int dummy)
 {
 	double t;
-	bool correct = True;
+	BOOL correct = True;
 
 	nbio_shmem(nprocs);
 
@@ -987,7 +931,7 @@
      must not use posix semantics)
   2) support for lock timeouts
  */
-static bool run_locktest1(int dummy)
+static BOOL run_locktest1(int dummy)
 {
 	struct cli_state *cli1, *cli2;
 	const char *fname = "\\lockt1.lck";
@@ -1100,7 +1044,7 @@
   this checks to see if a secondary tconx can use open files from an
   earlier tconx
  */
-static bool run_tcon_test(int dummy)
+static BOOL run_tcon_test(int dummy)
 {
 	static struct cli_state *cli;
 	const char *fname = "\\tcontest.tmp";
@@ -1108,7 +1052,7 @@
 	uint16 cnum1, cnum2, cnum3;
 	uint16 vuid1, vuid2;
 	char buf[4];
-	bool ret = True;
+	BOOL ret = True;
 
 	memset(buf, '\0', sizeof(buf));
 
@@ -1207,7 +1151,7 @@
 /*
  checks for old style tcon support
  */
-static bool run_tcon2_test(int dummy)
+static BOOL run_tcon2_test(int dummy)
 {
 	static struct cli_state *cli;
 	uint16 cnum, max_xmit;
@@ -1240,13 +1184,13 @@
 	return True;
 }
 
-static bool tcon_devtest(struct cli_state *cli,
+static BOOL tcon_devtest(struct cli_state *cli,
 			 const char *myshare, const char *devtype,
 			 const char *return_devtype,
 			 NTSTATUS expected_error)
 {
-	bool status;
-	bool ret;
+	BOOL status;
+	BOOL ret;
 
 	status = cli_send_tconX(cli, myshare, devtype,
 				password, strlen(password)+1);
@@ -1291,13 +1235,13 @@
 /*
  checks for correct tconX support
  */
-static bool run_tcon_devtype_test(int dummy)
+static BOOL run_tcon_devtype_test(int dummy)
 {
 	static struct cli_state *cli1 = NULL;
-	bool retry;
+	BOOL retry;
 	int flags = 0;
 	NTSTATUS status;
-	bool ret = True;
+	BOOL ret = True;
 
 	status = cli_full_connection(&cli1, myname,
 				     host, NULL, port_to_use,
@@ -1360,12 +1304,12 @@
 
   3) the server denies unlock requests by an incorrect client PID
 */
-static bool run_locktest2(int dummy)
+static BOOL run_locktest2(int dummy)
 {
 	static struct cli_state *cli;
 	const char *fname = "\\lockt2.lck";
 	int fnum1, fnum2, fnum3;
-	bool correct = True;
+	BOOL correct = True;
 
 	if (!torture_open_connection(&cli, 0)) {
 		return False;
@@ -1496,13 +1440,13 @@
 
   1) the server supports the full offset range in lock requests
 */
-static bool run_locktest3(int dummy)
+static BOOL run_locktest3(int dummy)
 {
 	static struct cli_state *cli1, *cli2;
 	const char *fname = "\\lockt3.lck";
 	int fnum1, fnum2, i;
 	uint32 offset;
-	bool correct = True;
+	BOOL correct = True;
 
 #define NEXT_OFFSET offset += (~(uint32)0) / torture_numops
 
@@ -1621,14 +1565,14 @@
 /*
   looks at overlapping locks
 */
-static bool run_locktest4(int dummy)
+static BOOL run_locktest4(int dummy)
 {
 	static struct cli_state *cli1, *cli2;
 	const char *fname = "\\lockt4.lck";
 	int fnum1, fnum2, f;
-	bool ret;
+	BOOL ret;
 	char buf[1000];
-	bool correct = True;
+	BOOL correct = True;
 
 	if (!torture_open_connection(&cli1, 0) || !torture_open_connection(&cli2, 1)) {
 		return False;
@@ -1792,14 +1736,14 @@
 /*
   looks at lock upgrade/downgrade.
 */
-static bool run_locktest5(int dummy)
+static BOOL run_locktest5(int dummy)
 {
 	static struct cli_state *cli1, *cli2;
 	const char *fname = "\\lockt5.lck";
 	int fnum1, fnum2, fnum3;
-	bool ret;
+	BOOL ret;
 	char buf[1000];
-	bool correct = True;
+	BOOL correct = True;
 
 	if (!torture_open_connection(&cli1, 0) || !torture_open_connection(&cli2, 1)) {
 		return False;
@@ -1916,7 +1860,7 @@
 /*
   tries the unusual lockingX locktype bits
 */
-static bool run_locktest6(int dummy)
+static BOOL run_locktest6(int dummy)
 {
 	static struct cli_state *cli;
 	const char *fname[1] = { "\\lock6.txt" };
@@ -1956,13 +1900,13 @@
 	return True;
 }
 
-static bool run_locktest7(int dummy)
+static BOOL run_locktest7(int dummy)
 {
 	struct cli_state *cli1;
 	const char *fname = "\\lockt7.lck";
 	int fnum1;
 	char buf[200];
-	bool correct = False;
+	BOOL correct = False;
 
 	if (!torture_open_connection(&cli1, 0)) {
 		return False;
@@ -2093,12 +2037,12 @@
 test whether fnums and tids open on one VC are available on another (a major
 security hole)
 */
-static bool run_fdpasstest(int dummy)
+static BOOL run_fdpasstest(int dummy)
 {
 	struct cli_state *cli1, *cli2;
 	const char *fname = "\\fdpass.tst";
 	int fnum1;
-	char buf[1024];
+	pstring buf;
 
 	if (!torture_open_connection(&cli1, 0) || !torture_open_connection(&cli2, 1)) {
 		return False;
@@ -2141,7 +2085,7 @@
 	return True;
 }
 
-static bool run_fdsesstest(int dummy)
+static BOOL run_fdsesstest(int dummy)
 {
 	struct cli_state *cli;
 	uint16 new_vuid;
@@ -2152,8 +2096,8 @@
 	const char *fname1 = "\\fdsess1.tst";
 	int fnum1;
 	int fnum2;
-	char buf[1024];
-	bool ret = True;
+	pstring buf;
+	BOOL ret = True;
 
 	if (!torture_open_connection(&cli, 0))
 		return False;
@@ -2230,12 +2174,12 @@
 
   1) the server does not allow an unlink on a file that is open
 */
-static bool run_unlinktest(int dummy)
+static BOOL run_unlinktest(int dummy)
 {
 	struct cli_state *cli;
 	const char *fname = "\\unlink.tst";
 	int fnum;
-	bool correct = True;
+	BOOL correct = True;
 
 	if (!torture_open_connection(&cli, 0)) {
 		return False;
@@ -2279,14 +2223,14 @@
 /*
 test how many open files this server supports on the one socket
 */
-static bool run_maxfidtest(int dummy)
+static BOOL run_maxfidtest(int dummy)
 {
 	struct cli_state *cli;
 	const char *ftemplate = "\\maxfid.%d.%d";
 	fstring fname;
 	int fnums[0x11000], i;
 	int retries=4;
-	bool correct = True;
+	BOOL correct = True;
 
 	cli = current_cli;
 
@@ -2342,11 +2286,11 @@
 }
 
 /* send smb negprot commands, not reading the response */
-static bool run_negprot_nowait(int dummy)
+static BOOL run_negprot_nowait(int dummy)
 {
 	int i;
 	static struct cli_state *cli;
-	bool correct = True;
+	BOOL correct = True;
 
 	printf("starting negprot nowait test\n");
 
@@ -2369,15 +2313,15 @@
 
 
 /* send random IPC commands */
-static bool run_randomipc(int dummy)
+static BOOL run_randomipc(int dummy)
 {
 	char *rparam = NULL;
 	char *rdata = NULL;
 	unsigned int rdrcnt,rprcnt;
-	char param[1024];
+	pstring param;
 	int api, param_len, i;
 	struct cli_state *cli;
-	bool correct = True;
+	BOOL correct = True;
 	int count = 50000;
 
 	printf("starting random ipc test\n");
@@ -2428,10 +2372,10 @@
   This test checks the browse list code
 
 */
-static bool run_browsetest(int dummy)
+static BOOL run_browsetest(int dummy)
 {
 	static struct cli_state *cli;
-	bool correct = True;
+	BOOL correct = True;
 
 	printf("starting browse test\n");
 
@@ -2463,13 +2407,13 @@
 /*
   This checks how the getatr calls works
 */
-static bool run_attrtest(int dummy)
+static BOOL run_attrtest(int dummy)
 {
 	struct cli_state *cli;
 	int fnum;
 	time_t t, t2;
 	const char *fname = "\\attrib123456789.tst";
-	bool correct = True;
+	BOOL correct = True;
 
 	printf("starting attrib test\n");
 
@@ -2527,7 +2471,7 @@
 /*
   This checks a couple of trans2 calls
 */
-static bool run_trans2test(int dummy)
+static BOOL run_trans2test(int dummy)
 {
 	struct cli_state *cli;
 	int fnum;
@@ -2537,8 +2481,8 @@
 	const char *fname = "\\trans2.tst";
 	const char *dname = "\\trans2";
 	const char *fname2 = "\\trans2\\trans2.tst";
-	char pname[1024];
-	bool correct = True;
+	pstring pname;
+	BOOL correct = True;
 
 	printf("starting trans2 test\n");
 
@@ -2555,7 +2499,7 @@
 		correct = False;
 	}
 
-	if (!cli_qfilename(cli, fnum, pname, sizeof(pname))) {
+	if (!cli_qfilename(cli, fnum, pname)) {
 		printf("ERROR: qfilename failed (%s)\n", cli_errstr(cli));
 		correct = False;
 	}
@@ -2664,31 +2608,31 @@
   This checks new W2K calls.
 */
 
-static bool new_trans(struct cli_state *pcli, int fnum, int level)
+static BOOL new_trans(struct cli_state *pcli, int fnum, int level)
 {
 	char *buf = NULL;
 	uint32 len;
-	bool correct = True;
+	BOOL correct = True;
 
 	if (!cli_qfileinfo_test(pcli, fnum, level, &buf, &len)) {
 		printf("ERROR: qfileinfo (%d) failed (%s)\n", level, cli_errstr(pcli));
 		correct = False;
 	} else {
 		printf("qfileinfo: level %d, len = %u\n", level, len);
-		dump_data(0, (uint8 *)buf, len);
+		dump_data(0, buf, len);
 		printf("\n");
 	}
 	SAFE_FREE(buf);
 	return correct;
 }
 
-static bool run_w2ktest(int dummy)
+static BOOL run_w2ktest(int dummy)
 {
 	struct cli_state *cli;
 	int fnum;
 	const char *fname = "\\w2ktest\\w2k.tst";
 	int level;
-	bool correct = True;
+	BOOL correct = True;
 
 	printf("starting w2k test\n");
 
@@ -2718,12 +2662,12 @@
 /*
   this is a harness for some oplock tests
  */
-static bool run_oplock1(int dummy)
+static BOOL run_oplock1(int dummy)
 {
 	struct cli_state *cli1;
 	const char *fname = "\\lockt1.lck";
 	int fnum1;
-	bool correct = True;
+	BOOL correct = True;
 
 	printf("starting oplock test 1\n");
 
@@ -2767,17 +2711,17 @@
 	return correct;
 }
 
-static bool run_oplock2(int dummy)
+static BOOL run_oplock2(int dummy)
 {
 	struct cli_state *cli1, *cli2;
 	const char *fname = "\\lockt2.lck";
 	int fnum1, fnum2;
 	int saved_use_oplocks = use_oplocks;
 	char buf[4];
-	bool correct = True;
-	volatile bool *shared_correct;
+	BOOL correct = True;
+	volatile BOOL *shared_correct;
 
-	shared_correct = (volatile bool *)shm_setup(sizeof(bool));
+	shared_correct = (volatile BOOL *)shm_setup(sizeof(BOOL));
 	*shared_correct = True;
 
 	use_level_II_oplocks = True;
@@ -2903,23 +2847,23 @@
 }
 
 /* handler for oplock 3 tests */
-static bool oplock3_handler(struct cli_state *cli, int fnum, unsigned char level)
+static BOOL oplock3_handler(struct cli_state *cli, int fnum, unsigned char level)
 {
 	printf("got oplock break fnum=%d level=%d\n",
 	       fnum, level);
 	return cli_oplock_ack(cli, fnum, level);
 }
 
-static bool run_oplock3(int dummy)
+static BOOL run_oplock3(int dummy)
 {
 	struct cli_state *cli;
 	const char *fname = "\\oplockt3.dat";
 	int fnum;
 	char buf[4] = "abcd";
-	bool correct = True;
-	volatile bool *shared_correct;
+	BOOL correct = True;
+	volatile BOOL *shared_correct;
 
-	shared_correct = (volatile bool *)shm_setup(sizeof(bool));
+	shared_correct = (volatile BOOL *)shm_setup(sizeof(BOOL));
 	*shared_correct = True;
 
 	printf("starting oplock test 3\n");
@@ -2964,14 +2908,14 @@
 /*
   Test delete on close semantics.
  */
-static bool run_deletetest(int dummy)
+static BOOL run_deletetest(int dummy)
 {
 	struct cli_state *cli1 = NULL;
 	struct cli_state *cli2 = NULL;
 	const char *fname = "\\delete.file";
 	int fnum1 = -1;
 	int fnum2 = -1;
-	bool correct = True;
+	BOOL correct = True;
 	
 	printf("starting delete test\n");
 	
@@ -3447,10 +3391,10 @@
 /*
   print out server properties
  */
-static bool run_properties(int dummy)
+static BOOL run_properties(int dummy)
 {
 	static struct cli_state *cli;
-	bool correct = True;
+	BOOL correct = True;
 	
 	printf("starting properties test\n");
 	
@@ -3495,11 +3439,11 @@
 /*
   Test ntcreate calls made by xcopy
  */
-static bool run_xcopy(int dummy)
+static BOOL run_xcopy(int dummy)
 {
 	static struct cli_state *cli1;
 	const char *fname = "\\test.txt";
-	bool correct = True;
+	BOOL correct = True;
 	int fnum1, fnum2;
 
 	printf("starting xcopy test\n");
@@ -3537,12 +3481,12 @@
 /*
   Test rename on files open with share delete and no share delete.
  */
-static bool run_rename(int dummy)
+static BOOL run_rename(int dummy)
 {
 	static struct cli_state *cli1;
 	const char *fname = "\\test.txt";
 	const char *fname1 = "\\test1.txt";
-	bool correct = True;
+	BOOL correct = True;
 	int fnum1;
 
 	printf("starting rename test\n");
@@ -3725,7 +3669,7 @@
 	return correct;
 }
 
-static bool run_pipe_number(int dummy)
+static BOOL run_pipe_number(int dummy)
 {
 	struct cli_state *cli1;
 	const char *pipe_name = "\\SPOOLSS";
@@ -3758,7 +3702,7 @@
 /*
   Test open mode returns on read-only files.
  */
-static bool run_opentest(int dummy)
+static BOOL run_opentest(int dummy)
 {
 	static struct cli_state *cli1;
 	static struct cli_state *cli2;
@@ -3766,7 +3710,7 @@
 	int fnum1, fnum2;
 	char buf[20];
 	SMB_OFF_T fsize;
-	bool correct = True;
+	BOOL correct = True;
 	char *tmp_path;
 
 	printf("starting open test\n");
@@ -4208,12 +4152,12 @@
 	{ 249, FILE_ATTRIBUTE_SYSTEM, FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM, FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM }
 };
 
-static bool run_openattrtest(int dummy)
+static BOOL run_openattrtest(int dummy)
 {
 	static struct cli_state *cli1;
 	const char *fname = "\\openattr.file";
 	int fnum1;
-	bool correct = True;
+	BOOL correct = True;
 	uint16 attr;
 	unsigned int i, j, k, l;
 
@@ -4321,13 +4265,13 @@
 /*
   test directory listing speed
  */
-static bool run_dirtest(int dummy)
+static BOOL run_dirtest(int dummy)
 {
 	int i;
 	static struct cli_state *cli;
 	int fnum;
 	double t1;
-	bool correct = True;
+	BOOL correct = True;
 
 	printf("starting directory test\n");
 
@@ -4395,7 +4339,7 @@
 /*
   sees what IOCTLs are supported
  */
-bool torture_ioctl_test(int dummy)
+BOOL torture_ioctl_test(int dummy)
 {
 	static struct cli_state *cli;
 	uint16 device, function;
@@ -4450,11 +4394,11 @@
 /*
   tries varients of chkpath
  */
-bool torture_chkpath_test(int dummy)
+BOOL torture_chkpath_test(int dummy)
 {
 	static struct cli_state *cli;
 	int fnum;
-	bool ret;
+	BOOL ret;
 
 	if (!torture_open_connection(&cli, 0)) {
 		return False;
@@ -4529,11 +4473,11 @@
 	return ret;
 }
 
-static bool run_eatest(int dummy)
+static BOOL run_eatest(int dummy)
 {
 	static struct cli_state *cli;
 	const char *fname = "\\eatest.txt";
-	bool correct = True;
+	BOOL correct = True;
 	int fnum, i;
 	size_t num_eas;
 	struct ea_struct *ea_list = NULL;
@@ -4597,7 +4541,7 @@
 
 	for (i = 0; i < num_eas; i++) {
 		printf("%d: ea_name = %s. Val = ", i, ea_list[i].name);
-		dump_data(0, ea_list[i].value.data,
+		dump_data(0, (char *)ea_list[i].value.data,
 			  ea_list[i].value.length);
 	}
 
@@ -4626,7 +4570,7 @@
 	printf("num_eas = %d\n", (int)num_eas);
 	for (i = 0; i < num_eas; i++) {
 		printf("%d: ea_name = %s. Val = ", i, ea_list[i].name);
-		dump_data(0, ea_list[i].value.data,
+		dump_data(0, (char *)ea_list[i].value.data,
 			  ea_list[i].value.length);
 	}
 
@@ -4649,12 +4593,12 @@
 	return correct;
 }
 
-static bool run_dirtest1(int dummy)
+static BOOL run_dirtest1(int dummy)
 {
 	int i;
 	static struct cli_state *cli;
 	int fnum, num_seen;
-	bool correct = True;
+	BOOL correct = True;
 
 	printf("starting directory test\n");
 
@@ -4730,7 +4674,7 @@
 	return correct;
 }
 
-static bool run_error_map_extract(int dummy) {
+static BOOL run_error_map_extract(int dummy) {
 	
 	static struct cli_state *c_dos;
 	static struct cli_state *c_nt;
@@ -4837,7 +4781,7 @@
 	return True;
 }
 
-static bool run_sesssetup_bench(int dummy)
+static BOOL run_sesssetup_bench(int dummy)
 {
 	static struct cli_state *c;
 	NTSTATUS status;
@@ -4871,57 +4815,53 @@
 				 __location__, cli_errstr(c));
 			return false;
 		}
+
 		c->vuid = 0;
 	}
 
-	return true;
+	return True;
 }
 
-static bool subst_test(const char *str, const char *user, const char *domain,
-		       uid_t uid, gid_t gid, const char *expected)
+static BOOL run_local_substitute(int dummy)
 {
-	char *subst;
-	bool result = true;
+	TALLOC_CTX *mem_ctx;
+	int diff = 0;
 
-	subst = talloc_sub_specified(talloc_tos(), str, user, domain, uid, gid);
-
-	if (strcmp(subst, expected) != 0) {
-		printf("sub_specified(%s, %s, %s, %d, %d) returned [%s], expected "
-		       "[%s]\n", str, user, domain, (int)uid, (int)gid, subst,
-		       expected);
-		result = false;
+	if ((mem_ctx = talloc_init("run_local_subst")) == NULL) {
+		printf("talloc_init failed\n");
+		return False;
 	}
 
-	TALLOC_FREE(subst);
-	return result;
-}
+	diff |= strcmp(talloc_sub_specified(mem_ctx, "%U", "bla", "", -1, -1),
+		       "bla");
+	diff |= strcmp(talloc_sub_specified(mem_ctx, "%u%U", "bla", "", -1, -1),
+		       "blabla");
+	diff |= strcmp(talloc_sub_specified(mem_ctx, "%g", "", "", -1, -1),
+		       "NO_GROUP");
+	diff |= strcmp(talloc_sub_specified(mem_ctx, "%G", "", "", -1, -1),
+		       "NO_GROUP");
+	diff |= strcmp(talloc_sub_specified(mem_ctx, "%g", "", "", -1, 0),
+		       gidtoname(0));
+	diff |= strcmp(talloc_sub_specified(mem_ctx, "%G", "", "", -1, 0),
+		       gidtoname(0));
+	diff |= strcmp(talloc_sub_specified(mem_ctx, "%D%u", "u", "dom", -1, 0),
+		       "domu");
+	diff |= strcmp(talloc_sub_specified(mem_ctx, "%i %I", "", "", -1, -1),
+		       "0.0.0.0 0.0.0.0");
 
-static bool run_local_substitute(int dummy)
-{
-	bool ok = true;
-
-	ok &= subst_test("%U", "bla", "", -1, -1, "bla");
-	ok &= subst_test("%u%U", "bla", "", -1, -1, "blabla");
-	ok &= subst_test("%g", "", "", -1, -1, "NO_GROUP");
-	ok &= subst_test("%G", "", "", -1, -1, "NO_GROUP");
-	ok &= subst_test("%g", "", "", -1, 0, gidtoname(0));
-	ok &= subst_test("%G", "", "", -1, 0, gidtoname(0));
-	ok &= subst_test("%D%u", "u", "dom", -1, 0, "domu");
-	ok &= subst_test("%i %I", "", "", -1, -1, "0.0.0.0 0.0.0.0");
-
 	/* Different captialization rules in sub_basic... */
 
-	ok &=  (strcmp(talloc_sub_basic(talloc_tos(), "BLA", "dom", "%U%D"),
-		       "blaDOM") == 0);
+	diff |= strcmp(talloc_sub_basic(mem_ctx, "BLA", "dom", "%U%D"),
+		       "blaDOM");
 
-	return ok;
+	TALLOC_FREE(mem_ctx);
+	return (diff == 0);
 }
 
-static bool run_local_gencache(int dummy)
+static BOOL run_local_gencache(int dummy)
 {
 	char *val;
 	time_t tm;
-	DATA_BLOB blob;
 
 	if (!gencache_init()) {
 		d_printf("%s: gencache_init() failed\n", __location__);
@@ -4963,46 +4903,6 @@
 		return False;
 	}
 
-	blob = data_blob_string_const("bar");
-	tm = time(NULL);
-
-	if (!gencache_set_data_blob("foo", &blob, tm)) {
-		d_printf("%s: gencache_set_data_blob() failed\n", __location__);
-		return False;
-	}
-
-	data_blob_free(&blob);
-
-	if (!gencache_get_data_blob("foo", &blob, NULL)) {
-		d_printf("%s: gencache_get_data_blob() failed\n", __location__);
-		return False;
-	}
-
-	if (strcmp((const char *)blob.data, "bar") != 0) {
-		d_printf("%s: gencache_get_data_blob() returned %s, expected %s\n",
-			 __location__, (const char *)blob.data, "bar");
-		data_blob_free(&blob);
-		return False;
-	}
-
-	data_blob_free(&blob);
-
-	if (!gencache_del("foo")) {
-		d_printf("%s: gencache_del() failed\n", __location__);
-		return False;
-	}
-	if (gencache_del("foo")) {
-		d_printf("%s: second gencache_del() succeeded\n",
-			 __location__);
-		return False;
-	}
-
-	if (gencache_get_data_blob("foo", &blob, NULL)) {
-		d_printf("%s: gencache_get_data_blob() on deleted entry "
-			 "succeeded\n", __location__);
-		return False;
-	}
-
 	if (!gencache_shutdown()) {
 		d_printf("%s: gencache_shutdown() failed\n", __location__);
 		return False;
@@ -5017,236 +4917,11 @@
 	return True;
 }
 
-static bool rbt_testval(struct db_context *db, const char *key,
-			const char *value)
+static double create_procs(BOOL (*fn)(int), BOOL *result)
 {
-	struct db_record *rec;
-	TDB_DATA data = string_tdb_data(value);
-	bool ret = false;
-	NTSTATUS status;
-
-	rec = db->fetch_locked(db, db, string_tdb_data(key));
-	if (rec == NULL) {
-		d_fprintf(stderr, "fetch_locked failed\n");
-		goto done;
-	}
-	status = rec->store(rec, data, 0);
-	if (!NT_STATUS_IS_OK(status)) {
-		d_fprintf(stderr, "store failed: %s\n", nt_errstr(status));
-		goto done;
-	}
-	TALLOC_FREE(rec);
-
-	rec = db->fetch_locked(db, db, string_tdb_data(key));
-	if (rec == NULL) {
-		d_fprintf(stderr, "second fetch_locked failed\n");
-		goto done;
-	}
-	if ((rec->value.dsize != data.dsize)
-	    || (memcmp(rec->value.dptr, data.dptr, data.dsize) != 0)) {
-		d_fprintf(stderr, "Got wrong data back\n");
-		goto done;
-	}
-
-	ret = true;
- done:
-	TALLOC_FREE(rec);
-	return ret;
-}
-
-static bool run_local_rbtree(int dummy)
-{
-	struct db_context *db;
-	bool ret = false;
-	int i;
-
-	db = db_open_rbt(NULL);
-
-	if (db == NULL) {
-		d_fprintf(stderr, "db_open_rbt failed\n");
-		return false;
-	}
-
-	for (i=0; i<1000; i++) {
-		char *key, *value;
-
-		asprintf(&key, "key%ld", random());
-		asprintf(&value, "value%ld", random());
-
-		if (!rbt_testval(db, key, value)) {
-			SAFE_FREE(key);
-			SAFE_FREE(value);
-			goto done;
-		}
-
-		SAFE_FREE(value);
-		asprintf(&value, "value%ld", random());
-
-		if (!rbt_testval(db, key, value)) {
-			SAFE_FREE(key);
-			SAFE_FREE(value);
-			goto done;
-		}
-
-		SAFE_FREE(key);
-		SAFE_FREE(value);
-	}
-
-	ret = true;
-
- done:
-	TALLOC_FREE(db);
-	return ret;
-}
-
-static bool test_stream_name(const char *fname, const char *expected_base,
-			     const char *expected_stream,
-			     NTSTATUS expected_status)
-{
-	NTSTATUS status;
-	char *base = NULL;
-	char *stream = NULL;
-
-	status = split_ntfs_stream_name(talloc_tos(), fname, &base, &stream);
-	if (!NT_STATUS_EQUAL(status, expected_status)) {
-		goto error;
-	}
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return true;
-	}
-
-	if (base == NULL) goto error;
-
-	if (strcmp(expected_base, base) != 0) goto error;
-
-	if ((expected_stream != NULL) && (stream == NULL)) goto error;
-	if ((expected_stream == NULL) && (stream != NULL)) goto error;
-
-	if ((stream != NULL) && (strcmp(expected_stream, stream) != 0))
-		goto error;
-
-	TALLOC_FREE(base);
-	TALLOC_FREE(stream);
-	return true;
-
- error:
-	d_fprintf(stderr, "test_stream(%s, %s, %s, %s)\n",
-		  fname, expected_base ? expected_base : "<NULL>",
-		  expected_stream ? expected_stream : "<NULL>",
-		  nt_errstr(expected_status));
-	d_fprintf(stderr, "-> base=%s, stream=%s, status=%s\n",
-		  base ? base : "<NULL>", stream ? stream : "<NULL>",
-		  nt_errstr(status));
-	TALLOC_FREE(base);
-	TALLOC_FREE(stream);
-	return false;
-}
-
-static bool run_local_stream_name(int dummy)
-{
-	bool ret = true;
-
-	ret &= test_stream_name(
-		"bla", "bla", NULL, NT_STATUS_OK);
-	ret &= test_stream_name(
-		"bla::$DATA", "bla", NULL, NT_STATUS_OK);
-	ret &= test_stream_name(
-		"bla:blub:", "bla", NULL, NT_STATUS_OBJECT_NAME_INVALID);
-	ret &= test_stream_name(
-		"bla::", NULL, NULL, NT_STATUS_OBJECT_NAME_INVALID);
-	ret &= test_stream_name(
-		"bla::123", "bla", NULL, NT_STATUS_OBJECT_NAME_INVALID);
-	ret &= test_stream_name(
-		"bla:$DATA", "bla", "$DATA:$DATA", NT_STATUS_OK);
-	ret &= test_stream_name(
-		"bla:x:$DATA", "bla", "x:$DATA", NT_STATUS_OK);
-	ret &= test_stream_name(
-		"bla:x", "bla", "x:$DATA", NT_STATUS_OK);
-
-	return ret;
-}
-
-static bool data_blob_equal(DATA_BLOB a, DATA_BLOB b)
-{
-	if (a.length != b.length) {
-		printf("a.length=%d != b.length=%d\n",
-		       (int)a.length, (int)b.length);
-		return false;
-	}
-	if (memcmp(a.data, b.data, a.length) != 0) {
-		printf("a.data and b.data differ\n");
-		return false;
-	}
-	return true;
-}
-
-static bool run_local_memcache(int dummy)
-{
-	struct memcache *cache;
-	DATA_BLOB k1, k2;
-	DATA_BLOB d1, d2, d3;
-	DATA_BLOB v1, v2, v3;
-
-	cache = memcache_init(NULL, 100);
-
-	if (cache == NULL) {
-		printf("memcache_init failed\n");
-		return false;
-	}
-
-	d1 = data_blob_const("d1", 2);
-	d2 = data_blob_const("d2", 2);
-	d3 = data_blob_const("d3", 2);
-
-	k1 = data_blob_const("d1", 2);
-	k2 = data_blob_const("d2", 2);
-
-	memcache_add(cache, STAT_CACHE, k1, d1);
-	memcache_add(cache, GETWD_CACHE, k2, d2);
-
-	if (!memcache_lookup(cache, STAT_CACHE, k1, &v1)) {
-		printf("could not find k1\n");
-		return false;
-	}
-	if (!data_blob_equal(d1, v1)) {
-		return false;
-	}
-
-	if (!memcache_lookup(cache, GETWD_CACHE, k2, &v2)) {
-		printf("could not find k2\n");
-		return false;
-	}
-	if (!data_blob_equal(d2, v2)) {
-		return false;
-	}
-
-	memcache_add(cache, STAT_CACHE, k1, d3);
-
-	if (!memcache_lookup(cache, STAT_CACHE, k1, &v3)) {
-		printf("could not find replaced k1\n");
-		return false;
-	}
-	if (!data_blob_equal(d3, v3)) {
-		return false;
-	}
-
-	memcache_add(cache, GETWD_CACHE, k1, d1);
-
-	if (memcache_lookup(cache, GETWD_CACHE, k2, &v2)) {
-		printf("Did find k2, should have been purged\n");
-		return false;
-	}
-
-	TALLOC_FREE(cache);
-	return true;
-}
-
-static double create_procs(bool (*fn)(int), bool *result)
-{
 	int i, status;
 	volatile pid_t *child_status;
-	volatile bool *child_status_out;
+	volatile BOOL *child_status_out;
 	int synccount;
 	int tries = 8;
 
@@ -5258,7 +4933,7 @@
 		return -1;
 	}
 
-	child_status_out = (volatile bool *)shm_setup(sizeof(bool)*nprocs);
+	child_status_out = (volatile BOOL *)shm_setup(sizeof(BOOL)*nprocs);
 	if (!child_status_out) {
 		printf("Failed to setup result status shared memory\n");
 		return -1;
@@ -5339,7 +5014,7 @@
 
 static struct {
 	const char *name;
-	bool (*fn)(int);
+	BOOL (*fn)(int);
 	unsigned flags;
 } torture_ops[] = {
 	{"FDPASS", run_fdpasstest, 0},
@@ -5395,9 +5070,6 @@
 	{ "SESSSETUP_BENCH", run_sesssetup_bench, 0},
 	{ "LOCAL-SUBSTITUTE", run_local_substitute, 0},
 	{ "LOCAL-GENCACHE", run_local_gencache, 0},
-	{ "LOCAL-RBTREE", run_local_rbtree, 0},
-	{ "LOCAL-MEMCACHE", run_local_memcache, 0},
-	{ "LOCAL-STREAM-NAME", run_local_stream_name, 0},
 	{NULL, NULL, 0}};
 
 
@@ -5405,11 +5077,11 @@
 /****************************************************************************
 run a specified test or "ALL"
 ****************************************************************************/
-static bool run_test(const char *name)
+static BOOL run_test(const char *name)
 {
-	bool ret = True;
-	bool result = True;
-	bool found = False;
+	BOOL ret = True;
+	BOOL result = True;
+	BOOL found = False;
 	int i;
 	double t;
 	if (strequal(name,"ALL")) {
@@ -5500,9 +5172,7 @@
 	char *p;
 	int gotuser = 0;
 	int gotpass = 0;
-	bool correct = True;
-	TALLOC_CTX *frame = talloc_stackframe();
-	int seed = time(NULL);
+	BOOL correct = True;
 
 	dbf = x_stdout;
 
@@ -5512,7 +5182,7 @@
 
 	load_case_tables();
 
-	lp_load(get_dyn_CONFIGFILE(),True,False,False,True);
+	lp_load(dyn_CONFIGFILE,True,False,False,True);
 	load_interfaces();
 
 	if (argc < 2) {
@@ -5535,11 +5205,7 @@
 	*p = 0;
 	fstrcpy(share, p+1);
 
-	fstrcpy(myname, get_myname(talloc_tos()));
-	if (!*myname) {
-		fprintf(stderr, "Failed to get my hostname.\n");
-		return 1;
-	}
+	get_myname(myname);
 
 	if (*username == 0 && getenv("LOGNAME")) {
 	  fstrcpy(username,getenv("LOGNAME"));
@@ -5548,15 +5214,17 @@
 	argc--;
 	argv++;
 
+	srandom(time(NULL));
+
 	fstrcpy(workgroup, lp_workgroup());
 
-	while ((opt = getopt(argc, argv, "p:hW:U:n:N:O:o:m:Ld:Aec:ks:b:")) != EOF) {
+	while ((opt = getopt(argc, argv, "p:hW:U:n:N:O:o:m:Ld:Ac:ks:b:")) != EOF) {
 		switch (opt) {
 		case 'p':
 			port_to_use = atoi(optarg);
 			break;
 		case 's':
-			seed = atoi(optarg);
+			srandom(atoi(optarg));
 			break;
 		case 'W':
 			fstrcpy(workgroup,optarg);
@@ -5588,9 +5256,6 @@
 		case 'c':
 			client_txt = optarg;
 			break;
-		case 'e':
-			do_encrypt = true;
-			break;
 		case 'k':
 #ifdef HAVE_KRB5
 			use_kerberos = True;
@@ -5619,10 +5284,6 @@
 		}
 	}
 
-	d_printf("using seed %d\n", seed);
-
-	srandom(seed);
-
 	if(use_kerberos && !gotuser) gotpass = True;
 
 	while (!gotpass) {
@@ -5646,8 +5307,6 @@
 		}
 	}
 
-	TALLOC_FREE(frame);
-
 	if (correct) {
 		return(0);
 	} else {

Modified: branches/samba/upstream/source/torture/utable.c
===================================================================
--- branches/samba/upstream/source/torture/utable.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/torture/utable.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,12 +14,13 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
-bool torture_utable(int dummy)
+BOOL torture_utable(int dummy)
 {
 	struct cli_state *cli;
 	fstring fname, alt_name;
@@ -110,7 +111,7 @@
 	return fname;
 }
 
-bool torture_casetable(int dummy)
+BOOL torture_casetable(int dummy)
 {
 	static struct cli_state *cli;
 	char *fname;

Modified: branches/samba/upstream/source/torture/vfstest.c
===================================================================
--- branches/samba/upstream/source/torture/vfstest.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/torture/vfstest.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -11,7 +11,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -20,7 +20,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -32,10 +33,7 @@
 	struct cmd_set *cmd_set;
 } *cmd_list;
 
-int get_client_fd(void)
-{
-	return -1;
-}
+extern pstring user_socket_options;
 
 /****************************************************************************
 handle completion of commands for readline
@@ -89,20 +87,20 @@
 	return matches;
 }
 
-static char *next_command(TALLOC_CTX *ctx, char **cmdstr)
+static char* next_command(char** cmdstr)
 {
-	char *command;
-	char *p;
-
+	static pstring 		command;
+	char			*p;
+	
 	if (!cmdstr || !(*cmdstr))
 		return NULL;
-
+	
 	p = strchr_m(*cmdstr, ';');
 	if (p)
 		*p = '\0';
-	command = talloc_strdup(ctx, *cmdstr);
+	pstrcpy(command, *cmdstr);
 	*cmdstr = p;
-
+	
 	return command;
 }
 
@@ -266,22 +264,24 @@
 	const char *p = cmd;
 	char **argv = NULL;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	char *buf;
-	TALLOC_CTX *mem_ctx = talloc_stackframe();
+	pstring buf;
+	TALLOC_CTX *mem_ctx = NULL;
 	int argc = 0, i;
 
 	/* Count number of arguments first time through the loop then
 	   allocate memory and strdup them. */
 
  again:
-	while(next_token_talloc(mem_ctx, &p, &buf, " ")) {
+	while(next_token(&p, buf, " ", sizeof(buf))) {
 		if (argv) {
 			argv[argc] = SMB_STRDUP(buf);
 		}
+		
 		argc++;
 	}
-
+				
 	if (!argv) {
+
 		/* Create argument list */
 
 		argv = SMB_MALLOC_ARRAY(char *, argc);
@@ -292,35 +292,44 @@
 			result = NT_STATUS_NO_MEMORY;
 			goto done;
 		}
-
+					
 		p = cmd;
 		argc = 0;
-
+					
 		goto again;
 	}
 
 	/* Call the function */
 
 	if (cmd_entry->fn) {
+
+		if (mem_ctx == NULL) {
+			/* Create mem_ctx */
+			if (!(mem_ctx = talloc_init("do_cmd"))) {
+		       		DEBUG(0, ("talloc_init() failed\n"));
+				goto done;
+			}
+		}
+
 		/* Run command */
 		result = cmd_entry->fn(vfs, mem_ctx, argc, (const char **)argv);
+
 	} else {
 		fprintf (stderr, "Invalid command\n");
 		goto done;
 	}
 
  done:
-
+						
 	/* Cleanup */
 
 	if (argv) {
 		for (i = 0; i < argc; i++)
 			SAFE_FREE(argv[i]);
-
+	
 		SAFE_FREE(argv);
 	}
-
-	TALLOC_FREE(mem_ctx);
+	
 	return result;
 }
 
@@ -328,22 +337,20 @@
 static NTSTATUS process_cmd(struct vfs_state *vfs, char *cmd)
 {
 	struct cmd_list *temp_list;
-	bool found = False;
-	char *buf;
+	BOOL found = False;
+	pstring buf;
 	const char *p = cmd;
 	NTSTATUS result = NT_STATUS_OK;
-	TALLOC_CTX *mem_ctx = talloc_stackframe();
 	int len = 0;
 
 	if (cmd[strlen(cmd) - 1] == '\n')
 		cmd[strlen(cmd) - 1] = '\0';
 
-	if (!next_token_talloc(mem_ctx, &p, &buf, " ")) {
-		TALLOC_FREE(mem_ctx);
+	if (!next_token(&p, buf, " ", sizeof(buf))) {
 		return NT_STATUS_OK;
 	}
 
-	/* Strip the trailing \n if it exists */
+	/* strip the trainly \n if it exsists */
 	len = strlen(buf);
 	if (buf[len-1] == '\n')
 		buf[len-1] = '\0';
@@ -367,7 +374,6 @@
  done:
 	if (!found && buf[0]) {
 		printf("command not found: %s\n", buf);
-		TALLOC_FREE(mem_ctx);
 		return NT_STATUS_OK;
 	}
 
@@ -375,7 +381,6 @@
 		printf("result was %s\n", nt_errstr(result));
 	}
 
-	TALLOC_FREE(mem_ctx);
 	return result;
 }
 
@@ -427,15 +432,16 @@
  Reload the services file.
 **************************************************************************/
 
-bool reload_services(bool test)
+BOOL reload_services(BOOL test)
 {
-	bool ret;
-
+	BOOL ret;
+	
 	if (lp_loaded()) {
-		const char *fname = lp_configfile();
+		pstring fname;
+		pstrcpy(fname,lp_configfile());
 		if (file_exist(fname, NULL) &&
-		    !strcsequal(fname, get_dyn_CONFIGFILE())) {
-			set_dyn_CONFIGFILE(fname);
+		    !strcsequal(fname, dyn_CONFIGFILE)) {
+			pstrcpy(dyn_CONFIGFILE, fname);
 			test = False;
 		}
 	}
@@ -446,9 +452,9 @@
 		return(True);
 
 	lp_killunused(conn_snum_used);
+	
+	ret = lp_load(dyn_CONFIGFILE, False, False, True, True);
 
-	ret = lp_load(get_dyn_CONFIGFILE(), False, False, True, True);
-
 	/* perhaps the config filename is now set */
 	if (!test)
 		reload_services(True);
@@ -460,8 +466,7 @@
 	{
 		if (smbd_server_fd() != -1) {      
 			set_socket_options(smbd_server_fd(),"SO_KEEPALIVE");
-			set_socket_options(smbd_server_fd(),
-					   lp_socket_options());
+			set_socket_options(smbd_server_fd(), user_socket_options);
 		}
 	}
 
@@ -495,19 +500,6 @@
 	return ctx;
 }
 
-struct memcache *smbd_memcache(void)
-{
-	static struct memcache *cache;
-
-	if (!cache
-	    && !(cache = memcache_init(NULL,
-				       lp_max_stat_cache_size()*1024))) {
-
-		smb_panic("Could not init smbd memcache");
-	}
-	return cache;
-}
-
 /* Main function */
 
 int main(int argc, char *argv[])
@@ -517,7 +509,6 @@
 	static struct vfs_state vfs;
 	int i;
 	static char		*filename = NULL;
-	TALLOC_CTX *frame = talloc_stackframe();
 
 	/* make sure the vars that get altered (4th field) are in
 	   a fixed location or certain compilers complain */
@@ -580,33 +571,31 @@
 	if (cmdstr && cmdstr[0]) {
 		char    *cmd;
 		char    *p = cmdstr;
-
-		while((cmd=next_command(frame, &p)) != NULL) {
+ 
+		while((cmd=next_command(&p)) != NULL) {
 			process_cmd(&vfs, cmd);
 		}
-
-		TALLOC_FREE(cmd);
+		
 		return 0;
 	}
 
 	/* Loop around accepting commands */
 
 	while(1) {
-		char *line = NULL;
+		pstring prompt;
+		char *line;
 
-		line = smb_readline("vfstest $> ", NULL, completion_fn);
+		slprintf(prompt, sizeof(prompt) - 1, "vfstest $> ");
 
-		if (line == NULL) {
+		line = smb_readline(prompt, NULL, completion_fn);
+
+		if (line == NULL)
 			break;
-		}
 
-		if (line[0] != '\n') {
+		if (line[0] != '\n')
 			process_cmd(&vfs, line);
-		}
-		SAFE_FREE(line);
 	}
-
+	
 	conn_free(vfs.conn);
-	TALLOC_FREE(frame);
 	return 0;
 }

Modified: branches/samba/upstream/source/torture/vfstest.h
===================================================================
--- branches/samba/upstream/source/torture/vfstest.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/torture/vfstest.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,7 +10,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -19,7 +19,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 struct func_entry {

Modified: branches/samba/upstream/source/utils/debug2html.c
===================================================================
--- branches/samba/upstream/source/utils/debug2html.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/debug2html.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -11,7 +11,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -20,7 +20,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  * -------------------------------------------------------------------------- **
  * This program provides an example of the use of debugparse.c, and also

Modified: branches/samba/upstream/source/utils/debugparse.c
===================================================================
--- branches/samba/upstream/source/utils/debugparse.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/debugparse.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -10,17 +10,18 @@
  * -------------------------------------------------------------------------- **
  *
  *  This library is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public
+ *  modify it under the terms of the GNU Library General Public
  *  License as published by the Free Software Foundation; either
- *  version 3 of the License, or (at your option) any later version.
+ *  version 2 of the License, or (at your option) any later version.
  *
  *  This library is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  *  Library General Public License for more details.
  *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ *  You should have received a copy of the GNU Library General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
  * -------------------------------------------------------------------------- **
  * The important function in this module is dbg_char2token().  The rest is

Modified: branches/samba/upstream/source/utils/eventlogadm.c
===================================================================
--- branches/samba/upstream/source/utils/eventlogadm.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/eventlogadm.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 
@@ -59,7 +60,7 @@
 		printf( "\t<None specified>\n");
 }
 
-static int DoAddSourceCommand( int argc, char **argv, bool debugflag, char *exename )
+static int DoAddSourceCommand( int argc, char **argv, BOOL debugflag, char *exename )
 {
 
 	if ( argc < 3 ) {
@@ -68,7 +69,7 @@
 		return -1;
 	}
 	/* must open the registry before we access it */
-	if (!W_ERROR_IS_OK(regdb_init())) {
+	if ( !regdb_init(  ) ) {
 		printf( "Can't open the registry.\n" );
 		return -1;
 	}
@@ -78,15 +79,15 @@
 	return 0;
 }
 
-static int DoWriteCommand( int argc, char **argv, bool debugflag, char *exename )
+static int DoWriteCommand( int argc, char **argv, BOOL debugflag, char *exename )
 {
 	FILE *f1;
 	char *argfname;
 	ELOG_TDB *etdb;
 
 	/* fixed constants are bad bad bad  */
-	char linein[1024];
-	bool is_eor;
+	pstring linein;
+	BOOL is_eor;
 	Eventlog_entry ee;
 	int rcnum;
 
@@ -160,7 +161,6 @@
 {
 	int opt, rc;
 	char *exename;
-	TALLOC_CTX *frame = talloc_stackframe();
 
 
 	fstring opname;
@@ -169,7 +169,7 @@
 
 	opt_debug = 0;		/* todo set this from getopts */
 
-	lp_load(get_dyn_CONFIGFILE(), True, False, False, True);
+	lp_load( dyn_CONFIGFILE, True, False, False, True);
 
 	exename = argv[0];
 
@@ -224,6 +224,5 @@
 		exit( 1 );
 		break;
 	}
-	TALLOC_FREE(frame);
 	return rc;
 }

Modified: branches/samba/upstream/source/utils/log2pcaphex.c
===================================================================
--- branches/samba/upstream/source/utils/log2pcaphex.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/log2pcaphex.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -15,7 +15,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -24,7 +24,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -35,8 +36,8 @@
 
 #include <assert.h>
 
-bool quiet = 0;
-bool hexformat = 0;
+int quiet = 0;
+int hexformat = 0;
 
 #define itoa(a) ((a) < 0xa?'0'+(a):'A' + (a-0xa))
 
@@ -228,13 +229,13 @@
 	int opt;
 	poptContext pc;
 	char buffer[4096];
-	long data_offset = 0, data_length;
+	long data_offset, data_length;
 	long data_bytes_read = 0;
 	int in_packet = 0;
 	struct poptOption long_options[] = {
 		POPT_AUTOHELP
-		{ "quiet", 'q', POPT_ARG_NONE, NULL, 'q', "Be quiet, don't output warnings" },
-		{ "hex", 'h', POPT_ARG_NONE, NULL, 'h', "Output format readable by text2pcap" },
+		{ "quiet", 'q', POPT_ARG_NONE, &quiet, 0, "Be quiet, don't output warnings" },
+		{ "hex", 'h', POPT_ARG_NONE, &hexformat, 0, "Output format readable by text2pcap" },
 		POPT_TABLEEND
 	};
 	
@@ -245,12 +246,6 @@
 	
 	while((opt = poptGetNextOpt(pc)) != -1) {
 		switch (opt) {
-		case 'q':
-			quiet = true;
-			break;
-		case 'h':
-			hexformat = true;
-			break;
 		}
 	}
 

Modified: branches/samba/upstream/source/utils/net.c
===================================================================
--- branches/samba/upstream/source/utils/net.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -13,7 +13,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -22,7 +22,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
 /*****************************************************/
 /*                                                   */
@@ -56,10 +57,10 @@
 
 /* Yes, these buggers are globals.... */
 const char *opt_requester_name = NULL;
-const char *opt_host = NULL;
+const char *opt_host = NULL; 
 const char *opt_password = NULL;
 const char *opt_user_name = NULL;
-bool opt_user_specified = False;
+BOOL opt_user_specified = False;
 const char *opt_workgroup = NULL;
 int opt_long_list_entries = 0;
 int opt_reboot = 0;
@@ -74,9 +75,9 @@
 int opt_timeout = 0;
 const char *opt_target_workgroup = NULL;
 int opt_machine_pass = 0;
-int opt_localgroup = False;
-int opt_domaingroup = False;
-static int do_talloc_report=False;
+BOOL opt_localgroup = False;
+BOOL opt_domaingroup = False;
+static BOOL do_talloc_report=False;
 const char *opt_newntname = "";
 int opt_rid = 0;
 int opt_acls = 0;
@@ -84,14 +85,12 @@
 int opt_timestamps = 0;
 const char *opt_exclude = NULL;
 const char *opt_destination = NULL;
-int opt_testmode = False;
 
-int opt_have_ip = False;
-struct sockaddr_storage opt_dest_ip;
-bool smb_encrypt;
-struct libnetapi_ctx *netapi_ctx = NULL;
+BOOL opt_have_ip = False;
+struct in_addr opt_dest_ip;
 
-extern bool AllowDebugChange;
+extern struct in_addr loopback_ip;
+extern BOOL AllowDebugChange;
 
 uint32 get_sec_channel_type(const char *param) 
 {
@@ -159,106 +158,76 @@
 }
 
 /****************************************************************************
- Connect to \\server\service.
+connect to \\server\service 
 ****************************************************************************/
 
-NTSTATUS connect_to_service(struct cli_state **c,
-					struct sockaddr_storage *server_ss,
-					const char *server_name,
-					const char *service_name,
+NTSTATUS connect_to_service(struct cli_state **c, struct in_addr *server_ip,
+					const char *server_name, 
+					const char *service_name, 
 					const char *service_type)
 {
 	NTSTATUS nt_status;
 
-	opt_password = net_prompt_pass(opt_user_name);
-	if (!opt_password) {
-		return NT_STATUS_NO_MEMORY;
+	if (!opt_password && !opt_machine_pass) {
+		char *pass = getpass("Password:");
+		if (pass) {
+			opt_password = SMB_STRDUP(pass);
+		}
 	}
 
-	nt_status = cli_full_connection(c, NULL, server_name,
-					server_ss, opt_port,
-					service_name, service_type,
+	nt_status = cli_full_connection(c, NULL, server_name, 
+					server_ip, opt_port,
+					service_name, service_type,  
 					opt_user_name, opt_workgroup,
 					opt_password, 0, Undefined, NULL);
-	if (!NT_STATUS_IS_OK(nt_status)) {
+
+	if (NT_STATUS_IS_OK(nt_status)) {
+		return nt_status;
+	} else {
 		d_fprintf(stderr, "Could not connect to server %s\n", server_name);
 
 		/* Display a nicer message depending on the result */
 
-		if (NT_STATUS_V(nt_status) ==
+		if (NT_STATUS_V(nt_status) == 
 		    NT_STATUS_V(NT_STATUS_LOGON_FAILURE))
 			d_fprintf(stderr, "The username or password was not correct.\n");
 
-		if (NT_STATUS_V(nt_status) ==
+		if (NT_STATUS_V(nt_status) == 
 		    NT_STATUS_V(NT_STATUS_ACCOUNT_LOCKED_OUT))
 			d_fprintf(stderr, "The account was locked out.\n");
 
-		if (NT_STATUS_V(nt_status) ==
+		if (NT_STATUS_V(nt_status) == 
 		    NT_STATUS_V(NT_STATUS_ACCOUNT_DISABLED))
 			d_fprintf(stderr, "The account was disabled.\n");
+
 		return nt_status;
 	}
-
-	if (smb_encrypt) {
-		nt_status = cli_force_encryption(*c,
-					opt_user_name,
-					opt_password,
-					opt_workgroup);
-
-		if (NT_STATUS_EQUAL(nt_status,NT_STATUS_NOT_SUPPORTED)) {
-			d_printf("Encryption required and "
-				"server that doesn't support "
-				"UNIX extensions - failing connect\n");
-		} else if (NT_STATUS_EQUAL(nt_status,NT_STATUS_UNKNOWN_REVISION)) {
-			d_printf("Encryption required and "
-				"can't get UNIX CIFS extensions "
-				"version from server.\n");
-		} else if (NT_STATUS_EQUAL(nt_status,NT_STATUS_UNSUPPORTED_COMPRESSION)) {
-			d_printf("Encryption required and "
-				"share %s doesn't support "
-				"encryption.\n", service_name);
-		} else if (!NT_STATUS_IS_OK(nt_status)) {
-			d_printf("Encryption required and "
-				"setup failed with error %s.\n",
-				nt_errstr(nt_status));
-		}
-
-		if (!NT_STATUS_IS_OK(nt_status)) {
-			cli_shutdown(*c);
-			*c = NULL;
-		}
-	}
-
-	return nt_status;
 }
 
+
 /****************************************************************************
- Connect to \\server\ipc$.
+connect to \\server\ipc$  
 ****************************************************************************/
-
-NTSTATUS connect_to_ipc(struct cli_state **c,
-			struct sockaddr_storage *server_ss,
-			const char *server_name)
+NTSTATUS connect_to_ipc(struct cli_state **c, struct in_addr *server_ip,
+					const char *server_name)
 {
-	return connect_to_service(c, server_ss, server_name, "IPC$", "IPC");
+	return connect_to_service(c, server_ip, server_name, "IPC$", "IPC");
 }
 
 /****************************************************************************
- Connect to \\server\ipc$ anonymously.
+connect to \\server\ipc$ anonymously
 ****************************************************************************/
-
 NTSTATUS connect_to_ipc_anonymous(struct cli_state **c,
-				struct sockaddr_storage *server_ss,
-				const char *server_name)
+			struct in_addr *server_ip, const char *server_name)
 {
 	NTSTATUS nt_status;
 
-	nt_status = cli_full_connection(c, opt_requester_name, server_name,
-					server_ss, opt_port,
-					"IPC$", "IPC",
+	nt_status = cli_full_connection(c, opt_requester_name, server_name, 
+					server_ip, opt_port,
+					"IPC$", "IPC",  
 					"", "",
 					"", 0, Undefined, NULL);
-
+	
 	if (NT_STATUS_IS_OK(nt_status)) {
 		return nt_status;
 	} else {
@@ -289,19 +258,20 @@
 }
 
 /****************************************************************************
- Connect to \\server\ipc$ using KRB5.
+connect to \\server\ipc$ using KRB5
 ****************************************************************************/
 
 NTSTATUS connect_to_ipc_krb5(struct cli_state **c,
-			struct sockaddr_storage *server_ss,
-			const char *server_name)
+			struct in_addr *server_ip, const char *server_name)
 {
 	NTSTATUS nt_status;
 	char *user_and_realm = NULL;
 
-	opt_password = net_prompt_pass(opt_user_name);
-	if (!opt_password) {
-		return NT_STATUS_NO_MEMORY;
+	if (!opt_password && !opt_machine_pass) {
+		char *pass = getpass("Password:");
+		if (pass) {
+			opt_password = SMB_STRDUP(pass);
+		}
 	}
 
 	user_and_realm = get_user_and_realm(opt_user_name);
@@ -309,33 +279,21 @@
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	nt_status = cli_full_connection(c, NULL, server_name,
-					server_ss, opt_port,
-					"IPC$", "IPC",
+	nt_status = cli_full_connection(c, NULL, server_name, 
+					server_ip, opt_port,
+					"IPC$", "IPC",  
 					user_and_realm, opt_workgroup,
 					opt_password, CLI_FULL_CONNECTION_USE_KERBEROS, 
 					Undefined, NULL);
-
+	
 	SAFE_FREE(user_and_realm);
 
-	if (!NT_STATUS_IS_OK(nt_status)) {
+	if (NT_STATUS_IS_OK(nt_status)) {
+		return nt_status;
+	} else {
 		DEBUG(1,("Cannot connect to server using kerberos.  Error was %s\n", nt_errstr(nt_status)));
 		return nt_status;
 	}
-
-        if (smb_encrypt) {
-		nt_status = cli_cm_force_encryption(*c,
-					user_and_realm,
-					opt_password,
-					opt_workgroup,
-                                        "IPC$");
-		if (!NT_STATUS_IS_OK(nt_status)) {
-			cli_shutdown(*c);
-			*c = NULL;
-		}
-	}
-
-	return nt_status;
 }
 
 /**
@@ -415,7 +373,7 @@
 int net_use_machine_account(void)
 {
 	char *user_name = NULL;
-
+		
 	if (!secrets_init()) {
 		d_fprintf(stderr, "ERROR: Unable to open secrets database\n");
 		exit(1);
@@ -429,82 +387,66 @@
 	return 0;
 }
 
-bool net_find_server(const char *domain,
-			unsigned flags,
-			struct sockaddr_storage *server_ss,
-			char **server_name)
+BOOL net_find_server(const char *domain, unsigned flags, struct in_addr *server_ip, char **server_name)
 {
 	const char *d = domain ? domain : opt_target_workgroup;
 
 	if (opt_host) {
 		*server_name = SMB_STRDUP(opt_host);
-	}
+	}		
 
 	if (opt_have_ip) {
-		*server_ss = opt_dest_ip;
+		*server_ip = opt_dest_ip;
 		if (!*server_name) {
-			char addr[INET6_ADDRSTRLEN];
-			print_sockaddr(addr, sizeof(addr), &opt_dest_ip);
-			*server_name = SMB_STRDUP(addr);
+			*server_name = SMB_STRDUP(inet_ntoa(opt_dest_ip));
 		}
 	} else if (*server_name) {
 		/* resolve the IP address */
-		if (!resolve_name(*server_name, server_ss, 0x20))  {
+		if (!resolve_name(*server_name, server_ip, 0x20))  {
 			DEBUG(1,("Unable to resolve server name\n"));
-			return false;
+			return False;
 		}
 	} else if (flags & NET_FLAGS_PDC) {
-		fstring dc_name;
-		struct sockaddr_storage pdc_ss;
+		struct in_addr pdc_ip;
 
-		if (!get_pdc_ip(d, &pdc_ss)) {
-			DEBUG(1,("Unable to resolve PDC server address\n"));
-			return false;
+		if (get_pdc_ip(d, &pdc_ip)) {
+			fstring dc_name;
+			
+			if (is_zero_ip(pdc_ip))
+				return False;
+			
+			if ( !name_status_find(d, 0x1b, 0x20, pdc_ip, dc_name) )
+				return False;
+				
+			*server_name = SMB_STRDUP(dc_name);
+			*server_ip = pdc_ip;
 		}
-
-		if (is_zero_addr(&pdc_ss)) {
-			return false;
-		}
-
-		if (!name_status_find(d, 0x1b, 0x20, &pdc_ss, dc_name)) {
-			return False;
-		}
-
-		*server_name = SMB_STRDUP(dc_name);
-		*server_ss = pdc_ss;
 	} else if (flags & NET_FLAGS_DMB) {
-		struct sockaddr_storage msbrow_ss;
-		char addr[INET6_ADDRSTRLEN];
-
+		struct in_addr msbrow_ip;
 		/*  if (!resolve_name(MSBROWSE, &msbrow_ip, 1)) */
-		if (!resolve_name(d, &msbrow_ss, 0x1B))  {
+		if (!resolve_name(d, &msbrow_ip, 0x1B))  {
 			DEBUG(1,("Unable to resolve domain browser via name lookup\n"));
-			return false;
+			return False;
+		} else {
+			*server_ip = msbrow_ip;
 		}
-		*server_ss = msbrow_ss;
-		print_sockaddr(addr, sizeof(addr), server_ss);
-		*server_name = SMB_STRDUP(addr);
+		*server_name = SMB_STRDUP(inet_ntoa(opt_dest_ip));
 	} else if (flags & NET_FLAGS_MASTER) {
-		struct sockaddr_storage brow_ss;
-		char addr[INET6_ADDRSTRLEN];
-		if (!resolve_name(d, &brow_ss, 0x1D))  {
+		struct in_addr brow_ips;
+		if (!resolve_name(d, &brow_ips, 0x1D))  {
 				/* go looking for workgroups */
 			DEBUG(1,("Unable to resolve master browser via name lookup\n"));
-			return false;
+			return False;
+		} else {
+			*server_ip = brow_ips;
 		}
-		*server_ss = brow_ss;
-		print_sockaddr(addr, sizeof(addr), server_ss);
-		*server_name = SMB_STRDUP(addr);
+		*server_name = SMB_STRDUP(inet_ntoa(opt_dest_ip));
 	} else if (!(flags & NET_FLAGS_LOCALHOST_DEFAULT_INSANE)) {
-		if (!interpret_string_addr(server_ss,
-					"127.0.0.1", AI_NUMERICHOST)) {
-			DEBUG(1,("Unable to resolve 127.0.0.1\n"));
-			return false;
-		}
+		*server_ip = loopback_ip;
 		*server_name = SMB_STRDUP("127.0.0.1");
 	}
 
-	if (!*server_name) {
+	if (!server_name || !*server_name) {
 		DEBUG(1,("no server to connect to\n"));
 		return False;
 	}
@@ -512,53 +454,49 @@
 	return True;
 }
 
-bool net_find_pdc(struct sockaddr_storage *server_ss,
-		fstring server_name,
-		const char *domain_name)
-{
-	if (!get_pdc_ip(domain_name, server_ss)) {
-		return false;
-	}
-	if (is_zero_addr(server_ss)) {
-		return false;
-	}
 
-	if (!name_status_find(domain_name, 0x1b, 0x20, server_ss, server_name)) {
-		return false;
-	}
-
-	return true;
+BOOL net_find_pdc(struct in_addr *server_ip, fstring server_name, const char *domain_name)
+{
+	if (get_pdc_ip(domain_name, server_ip)) {
+		if (is_zero_ip(*server_ip))
+			return False;
+		
+		if (!name_status_find(domain_name, 0x1b, 0x20, *server_ip, server_name))
+			return False;
+			
+		return True;	
+	} 
+	else
+		return False;
 }
 
-NTSTATUS net_make_ipc_connection(unsigned flags, struct cli_state **pcli)
+struct cli_state *net_make_ipc_connection( unsigned flags )
 {
-	return net_make_ipc_connection_ex(NULL, NULL, NULL, flags, pcli);
+	return net_make_ipc_connection_ex( NULL, NULL, NULL, flags );
 }
 
-NTSTATUS net_make_ipc_connection_ex(const char *domain, const char *server,
-                                    struct sockaddr_storage *pss, unsigned flags,
-				    struct cli_state **pcli)
+struct cli_state *net_make_ipc_connection_ex( const char *domain, const char *server,
+                                              struct in_addr *ip, unsigned flags)
 {
 	char *server_name = NULL;
-	struct sockaddr_storage server_ss;
+	struct in_addr server_ip;
 	struct cli_state *cli = NULL;
 	NTSTATUS nt_status;
 
-	if ( !server || !pss ) {
-		if (!net_find_server(domain, flags, &server_ss, &server_name)) {
+	if ( !server || !ip ) {
+		if (!net_find_server(domain, flags, &server_ip, &server_name)) {
 			d_fprintf(stderr, "Unable to find a suitable server\n");
-			nt_status = NT_STATUS_UNSUCCESSFUL;
-			goto done;
+			return NULL;
 		}
 	} else {
 		server_name = SMB_STRDUP( server );
-		server_ss = *pss;
+		server_ip = *ip;
 	}
 
 	if (flags & NET_FLAGS_ANONYMOUS) {
-		nt_status = connect_to_ipc_anonymous(&cli, &server_ss, server_name);
+		nt_status = connect_to_ipc_anonymous(&cli, &server_ip, server_name);
 	} else {
-		nt_status = connect_to_ipc(&cli, &server_ss, server_name);
+		nt_status = connect_to_ipc(&cli, &server_ip, server_name);
 	}
 
 	/* store the server in the affinity cache if it was a PDC */
@@ -567,17 +505,13 @@
 		saf_store( cli->server_domain, cli->desthost );
 
 	SAFE_FREE(server_name);
-	if (!NT_STATUS_IS_OK(nt_status)) {
+	if (NT_STATUS_IS_OK(nt_status)) {
+		return cli;
+	} else {
 		d_fprintf(stderr, "Connection failed: %s\n",
 			  nt_errstr(nt_status));
-		cli = NULL;
+		return NULL;
 	}
-
-done:
-	if (pcli != NULL) {
-		*pcli = cli;
-	}
-	return nt_status;
 }
 
 static int net_user(int argc, const char **argv)
@@ -688,9 +622,9 @@
 		name = global_myname();
 	}
 
-	if(!initialize_password_db(False, NULL)) {
+	if(!initialize_password_db(False)) {
 		DEBUG(0, ("WARNING: Could not open passdb - local sid may not reflect passdb\n"
-			  "backend knowledge (such as the sid stored in LDAP)\n"));
+			  "backend knowlege (such as the sid stored in LDAP)\n"));
 	}
 
 	/* first check to see if we can even access secrets, so we don't
@@ -708,7 +642,7 @@
 		DEBUG(0, ("Can't fetch domain SID for name: %s\n", name));
 		return 1;
 	}
-	sid_to_fstring(sid_str, &sid);
+	sid_to_string(sid_str, &sid);
 	d_printf("SID for domain %s is: %s\n", name, sid_str);
 	return 0;
 }
@@ -758,24 +692,18 @@
 	DOM_SID domain_sid;
 	fstring sid_str;
 
-	if (argc > 0) {
-		d_printf("usage: net getdomainsid\n");
-		return 1;
+	if(!initialize_password_db(False)) {
+		DEBUG(0, ("WARNING: Could not open passdb - domain sid may not reflect passdb\n"
+			  "backend knowlege (such as the sid stored in LDAP)\n"));
 	}
 
-	if(!initialize_password_db(False, NULL)) {
-		DEBUG(0, ("WARNING: Could not open passdb - domain SID may "
-			  "not reflect passdb\n"
-			  "backend knowledge (such as the SID stored in "
-			  "LDAP)\n"));
-	}
-
 	/* first check to see if we can even access secrets, so we don't
 	   panic when we can't. */
 
 	if (!secrets_init()) {
-		d_fprintf(stderr, "Unable to open secrets.tdb.  Can't fetch domain"
-				  "SID for name: %s\n", get_global_sam_name());
+		d_fprintf(stderr, "Unable to open secrets.tdb.  "
+				  "Can't fetch domainSID for name: %s\n",
+				  get_global_sam_name());
 		return 1;
 	}
 
@@ -786,15 +714,15 @@
 		d_fprintf(stderr, "Could not fetch local SID\n");
 		return 1;
 	}
-	sid_to_fstring(sid_str, &domain_sid);
-	d_printf("SID for local machine %s is: %s\n", global_myname(), sid_str);
+	sid_to_string(sid_str, &domain_sid);
+	d_printf("SID for domain %s is: %s\n", global_myname(), sid_str);
 
 	if (!secrets_fetch_domain_sid(opt_workgroup, &domain_sid)) {
 		d_fprintf(stderr, "Could not fetch domain SID\n");
 		return 1;
 	}
 
-	sid_to_fstring(sid_str, &domain_sid);
+	sid_to_string(sid_str, &domain_sid);
 	d_printf("SID for domain %s is: %s\n", opt_workgroup, sid_str);
 
 	return 0;
@@ -882,7 +810,7 @@
 
 #endif /* WITH_FAKE_KASERVER */
 
-static bool search_maxrid(struct pdb_search *search, const char *type,
+static BOOL search_maxrid(struct pdb_search *search, const char *type,
 			  uint32 *max_rid)
 {
 	struct samr_displayentry *entries;
@@ -936,33 +864,6 @@
 	return 0;
 }
 
-/****************************************************************************
-****************************************************************************/
-
-const char *net_prompt_pass(const char *user)
-{
-	char *prompt = NULL;
-	const char *pass = NULL;
-
-	if (opt_password) {
-		return opt_password;
-	}
-
-	if (opt_machine_pass) {
-		return NULL;
-	}
-
-	asprintf(&prompt, "Enter %s's password:", user);
-	if (!prompt) {
-		return NULL;
-	}
-
-	pass = getpass(prompt);
-	SAFE_FREE(prompt);
-
-	return pass;
-}
-
 /* main function table */
 static struct functable net_func[] = {
 	{"RPC", net_rpc},
@@ -990,7 +891,6 @@
 	{"TIME", net_time},
 	{"LOOKUP", net_lookup},
 	{"JOIN", net_join},
-	{"DOM", net_dom},
 	{"CACHE", net_cache},
 	{"GETLOCALSID", net_getlocalsid},
 	{"SETLOCALSID", net_setlocalsid},
@@ -1001,8 +901,6 @@
 	{"STATUS", net_status},
 	{"USERSHARE", net_usershare},
 	{"USERSIDLIST", net_usersidlist},
-	{"CONF", net_conf},
-	{"REGISTRY", net_registry},
 #ifdef WITH_FAKE_KASERVER
 	{"AFS", net_afs},
 #endif
@@ -1032,7 +930,6 @@
 		{"port",	'p', POPT_ARG_INT,    &opt_port},
 		{"myname",	'n', POPT_ARG_STRING, &opt_requester_name},
 		{"server",	'S', POPT_ARG_STRING, &opt_host},
-		{"encrypt",	'e', POPT_ARG_NONE,   NULL, 'e', "Encrypt SMB transport (UNIX extended servers only)" },
 		{"container",	'c', POPT_ARG_STRING, &opt_container},
 		{"comment",	'C', POPT_ARG_STRING, &opt_comment},
 		{"maxusers",	'M', POPT_ARG_INT,    &opt_maxusers},
@@ -1045,7 +942,6 @@
 		{"machine-pass",'P', POPT_ARG_NONE,   &opt_machine_pass},
 		{"myworkgroup", 'W', POPT_ARG_STRING, &opt_workgroup},
 		{"verbose",	'v', POPT_ARG_NONE,   &opt_verbose},
-		{"test",	'T', POPT_ARG_NONE,   &opt_testmode},
 		/* Options for 'net groupmap set' */
 		{"local",       'L', POPT_ARG_NONE,   &opt_localgroup},
 		{"domain",      'D', POPT_ARG_NONE,   &opt_domaingroup},
@@ -1055,7 +951,7 @@
 		{"acls",	0, POPT_ARG_NONE,     &opt_acls},
 		{"attrs",	0, POPT_ARG_NONE,     &opt_attrs},
 		{"timestamps",	0, POPT_ARG_NONE,     &opt_timestamps},
-		{"exclude",	'X', POPT_ARG_STRING, &opt_exclude},
+		{"exclude",	'e', POPT_ARG_STRING, &opt_exclude},
 		{"destination",	0, POPT_ARG_STRING,   &opt_destination},
 		{"tallocreport", 0, POPT_ARG_NONE, &do_talloc_report},
 
@@ -1063,10 +959,8 @@
 		{ 0, 0, 0, 0}
 	};
 
-	TALLOC_CTX *frame = talloc_stackframe();
+	zero_ip(&opt_dest_ip);
 
-	zero_addr(&opt_dest_ip);
-
 	load_case_tables();
 
 	/* set default debug level to 0 regardless of what smb.conf sets */
@@ -1082,16 +976,12 @@
 			net_help(argc, argv);
 			exit(0);
 			break;
-		case 'e':
-			smb_encrypt=true;
-			break;
 		case 'I':
-			if (!interpret_string_addr(&opt_dest_ip,
-						poptGetOptArg(pc), 0)) {
+			opt_dest_ip = *interpret_addr2(poptGetOptArg(pc));
+			if (is_zero_ip(opt_dest_ip))
 				d_fprintf(stderr, "\nInvalid ip address specified\n");
-			} else {
+			else
 				opt_have_ip = True;
-			}
 			break;
 		case 'U':
 			opt_user_specified = True;
@@ -1115,7 +1005,7 @@
 	 * set by cmdline arg or remain default (0)
 	 */
 	AllowDebugChange = False;
-	lp_load(get_dyn_CONFIGFILE(),True,False,False,True);
+	lp_load(dyn_CONFIGFILE,True,False,False,True);
 	
  	argv_new = (const char **)poptGetArgs(pc);
 
@@ -1139,6 +1029,10 @@
 		opt_user_name = getenv("LOGNAME");
 	}
 
+	if (!opt_user_name) {
+		opt_user_name = "";
+	}
+
 	if (!opt_workgroup) {
 		opt_workgroup = smb_xstrdup(lp_workgroup());
 	}
@@ -1170,9 +1064,5 @@
 	rc = net_run_function(argc_new-1, argv_new+1, net_func, net_help);
 	
 	DEBUG(2,("return code = %d\n", rc));
-
-	libnetapi_free(netapi_ctx);
-
-	TALLOC_FREE(frame);
 	return rc;
 }

Modified: branches/samba/upstream/source/utils/net.h
===================================================================
--- branches/samba/upstream/source/utils/net.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 /* 
  * A function of this type is passed to the '
@@ -22,8 +23,6 @@
  * include
  */
 
-#include "lib/netapi/netapi.h"
-
 typedef NTSTATUS (*rpc_command_fn)(const DOM_SID *,
 				const char *, 
 				struct cli_state *cli,
@@ -44,7 +43,7 @@
 	struct cli_state *cli;
 
 	DOM_SID *domain_sid;
-	const char *domain_name;
+	char *domain_name;
 
 	const char *whoami;
 	const char *thiscmd;
@@ -102,10 +101,10 @@
 extern const char *opt_host;
 extern const char *opt_user_name;
 extern const char *opt_password;
-extern bool opt_user_specified;
+extern BOOL opt_user_specified;
 
-extern int opt_localgroup;
-extern int opt_domaingroup;
+extern BOOL opt_localgroup;
+extern BOOL opt_domaingroup;
 extern const char *opt_newntname;
 extern int opt_rid;
 extern int opt_acls;
@@ -113,11 +112,9 @@
 extern int opt_timestamps;
 extern const char *opt_exclude;
 extern const char *opt_destination;
-extern int opt_testmode;
 
-extern int opt_have_ip;
-extern struct sockaddr_storage opt_dest_ip;
-extern struct libnetapi_ctx *netapi_ctx;
+extern BOOL opt_have_ip;
+extern struct in_addr opt_dest_ip;
 
 extern const char *share_type[];
 

Modified: branches/samba/upstream/source/utils/net_ads.c
===================================================================
--- branches/samba/upstream/source/utils/net_ads.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_ads.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,5 +1,5 @@
-/*
-   Samba Unix/Linux SMB client library
+/* 
+   Samba Unix/Linux SMB client library 
    net ads commands
    Copyright (C) 2001 Andrew Tridgell (tridge at samba.org)
    Copyright (C) 2001 Remus Koos (remuskoos at yahoo.com)
@@ -8,23 +8,22 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  
 */
 
 #include "includes.h"
 #include "utils/net.h"
 
-#include "libnet/libnet.h"
-
 #ifdef HAVE_ADS
 
 int net_ads_usage(int argc, const char **argv)
@@ -59,7 +58,7 @@
 	d_printf("dns\n");
 	d_printf("    Issue a dynamic DNS update request the server's hostname\n");
 	d_printf("    (using the machine credentials)\n");
-
+	
 	return -1;
 }
 
@@ -80,17 +79,15 @@
 */
 static int net_ads_cldap_netlogon(ADS_STRUCT *ads)
 {
-	char addr[INET6_ADDRSTRLEN];
-	struct nbt_cldap_netlogon_5 reply;
+	struct cldap_netlogon_reply reply;
 
-	print_sockaddr(addr, sizeof(addr), &ads->ldap.ss);
-	if ( !ads_cldap_netlogon_5(talloc_tos(), addr, ads->server.realm, &reply ) ) {
+	if ( !ads_cldap_netlogon( inet_ntoa(ads->ldap_ip), ads->server.realm, &reply ) ) {
 		d_fprintf(stderr, "CLDAP query failed!\n");
 		return -1;
 	}
 
-	d_printf("Information for Domain Controller: %s\n\n",
-		addr);
+	d_printf("Information for Domain Controller: %s\n\n", 
+		inet_ntoa(ads->ldap_ip));
 
 	d_printf("Response Type: ");
 	switch (reply.type) {
@@ -104,9 +101,8 @@
 		d_printf("0x%x\n", reply.type);
 		break;
 	}
-
-	d_printf("GUID: %s\n", smb_uuid_string(talloc_tos(), reply.domain_uuid));
-
+	d_printf("GUID: %s\n", 
+		 smb_uuid_string_static(smb_uuid_unpack_static(reply.guid))); 
 	d_printf("Flags:\n"
 		 "\tIs a PDC:                                   %s\n"
 		 "\tIs a GC of the forest:                      %s\n"
@@ -118,36 +114,38 @@
 		 "\tIs writable:                                %s\n"
 		 "\tHas a hardware clock:                       %s\n"
 		 "\tIs a non-domain NC serviced by LDAP server: %s\n",
-		 (reply.server_type & NBT_SERVER_PDC) ? "yes" : "no",
-		 (reply.server_type & NBT_SERVER_GC) ? "yes" : "no",
-		 (reply.server_type & NBT_SERVER_LDAP) ? "yes" : "no",
-		 (reply.server_type & NBT_SERVER_DS) ? "yes" : "no",
-		 (reply.server_type & NBT_SERVER_KDC) ? "yes" : "no",
-		 (reply.server_type & NBT_SERVER_TIMESERV) ? "yes" : "no",
-		 (reply.server_type & NBT_SERVER_CLOSEST) ? "yes" : "no",
-		 (reply.server_type & NBT_SERVER_WRITABLE) ? "yes" : "no",
-		 (reply.server_type & NBT_SERVER_GOOD_TIMESERV) ? "yes" : "no",
-		 (reply.server_type & DS_SERVER_NDNC) ? "yes" : "no");
+		 (reply.flags & ADS_PDC) ? "yes" : "no",
+		 (reply.flags & ADS_GC) ? "yes" : "no",
+		 (reply.flags & ADS_LDAP) ? "yes" : "no",
+		 (reply.flags & ADS_DS) ? "yes" : "no",
+		 (reply.flags & ADS_KDC) ? "yes" : "no",
+		 (reply.flags & ADS_TIMESERV) ? "yes" : "no",
+		 (reply.flags & ADS_CLOSEST) ? "yes" : "no",
+		 (reply.flags & ADS_WRITABLE) ? "yes" : "no",
+		 (reply.flags & ADS_GOOD_TIMESERV) ? "yes" : "no",
+		 (reply.flags & ADS_NDNC) ? "yes" : "no");
 
 	printf("Forest:\t\t\t%s\n", reply.forest);
-	printf("Domain:\t\t\t%s\n", reply.dns_domain);
-	printf("Domain Controller:\t%s\n", reply.pdc_dns_name);
+	printf("Domain:\t\t\t%s\n", reply.domain);
+	printf("Domain Controller:\t%s\n", reply.hostname);
 
-	printf("Pre-Win2k Domain:\t%s\n", reply.domain);
-	printf("Pre-Win2k Hostname:\t%s\n", reply.pdc_name);
+	printf("Pre-Win2k Domain:\t%s\n", reply.netbios_domain);
+	printf("Pre-Win2k Hostname:\t%s\n", reply.netbios_hostname);
 
+	if (*reply.unk) printf("Unk:\t\t\t%s\n", reply.unk);
 	if (*reply.user_name) printf("User name:\t%s\n", reply.user_name);
 
-	printf("Server Site Name :\t\t%s\n", reply.server_site);
-	printf("Client Site Name :\t\t%s\n", reply.client_site);
+	printf("Server Site Name :\t\t%s\n", reply.server_site_name);
+	printf("Client Site Name :\t\t%s\n", reply.client_site_name);
 
-	d_printf("NT Version: %d\n", reply.nt_version);
+	d_printf("NT Version: %d\n", reply.version);
 	d_printf("LMNT Token: %.2x\n", reply.lmnt_token);
 	d_printf("LM20 Token: %.2x\n", reply.lm20_token);
 
 	return 0;
 }
 
+
 /*
   this implements the CLDAP based netlogon lookup requests
   for finding the domain controller of a ADS domain
@@ -163,7 +161,7 @@
 
 	if (!ads->config.realm) {
 		ads->config.realm = CONST_DISCARD(char *, opt_target_workgroup);
-		ads->ldap.port = 389;
+		ads->ldap_port = 389;
 	}
 
 	return net_ads_cldap_netlogon(ads);
@@ -174,7 +172,6 @@
 static int net_ads_info(int argc, const char **argv)
 {
 	ADS_STRUCT *ads;
-	char addr[INET6_ADDRSTRLEN];
 
 	if (!ADS_ERR_OK(ads_startup_nobind(False, &ads))) {
 		d_fprintf(stderr, "Didn't find the ldap server!\n");
@@ -193,13 +190,11 @@
 		d_fprintf( stderr, "Failed to get server's current time!\n");
 	}
 
-	print_sockaddr(addr, sizeof(addr), &ads->ldap.ss);
-
-	d_printf("LDAP server: %s\n", addr);
+	d_printf("LDAP server: %s\n", inet_ntoa(ads->ldap_ip));
 	d_printf("LDAP server name: %s\n", ads->config.ldap_server_name);
 	d_printf("Realm: %s\n", ads->config.realm);
 	d_printf("Bind Path: %s\n", ads->config.bind_path);
-	d_printf("LDAP port: %d\n", ads->ldap.port);
+	d_printf("LDAP port: %d\n", ads->ldap_port);
 	d_printf("Server time: %s\n", http_timestring(ads->config.current_time));
 
 	d_printf("KDC server: %s\n", ads->auth.kdc_server );
@@ -214,17 +209,17 @@
 	setenv(KRB5_ENV_CCNAME, "MEMORY:net_ads", 1);
 }
 
-static ADS_STATUS ads_startup_int(bool only_own_domain, uint32 auth_flags, ADS_STRUCT **ads_ret)
+static ADS_STATUS ads_startup_int(BOOL only_own_domain, uint32 auth_flags, ADS_STRUCT **ads_ret)
 {
 	ADS_STRUCT *ads = NULL;
 	ADS_STATUS status;
-	bool need_password = False;
-	bool second_time = False;
+	BOOL need_password = False;
+	BOOL second_time = False;
 	char *cp;
 	const char *realm = NULL;
-	bool tried_closest_dc = False;
+	BOOL tried_closest_dc = False;
 
-	/* lp_realm() should be handled by a command line param,
+	/* lp_realm() should be handled by a command line param, 
 	   However, the join requires that realm be set in smb.conf
 	   and compares our realm with the remote server's so this is
 	   ok until someone needs more flexibility */
@@ -250,11 +245,14 @@
 
 retry:
 	if (!opt_password && need_password && !opt_machine_pass) {
-		opt_password = net_prompt_pass(opt_user_name);
-		if (!opt_password) {
+		char *prompt = NULL;
+		asprintf(&prompt,"%s's password: ", opt_user_name);
+		if (!prompt) {
 			ads_destroy(&ads);
 			return ADS_ERROR(LDAP_NO_MEMORY);
 		}
+		opt_password = getpass(prompt);
+		free(prompt);
 	}
 
 	if (opt_password) {
@@ -268,7 +266,7 @@
 	ads->auth.user_name = smb_xstrdup(opt_user_name);
 
        /*
-        * If the username is of the form "name at realm",
+        * If the username is of the form "name at realm", 
         * extract the realm and convert to upper case.
         * This is only used to establish the connection.
         */
@@ -283,13 +281,13 @@
 
 	if (!ADS_ERR_OK(status)) {
 
-		if (NT_STATUS_EQUAL(ads_ntstatus(status),
+		if (NT_STATUS_EQUAL(ads_ntstatus(status), 
 				    NT_STATUS_NO_LOGON_SERVERS)) {
 			DEBUG(0,("ads_connect: %s\n", ads_errstr(status)));
 			ads_destroy(&ads);
 			return status;
 		}
-
+	
 		if (!need_password && !second_time && !(auth_flags & ADS_AUTH_NO_BIND)) {
 			need_password = True;
 			second_time = True;
@@ -324,12 +322,12 @@
 	return status;
 }
 
-ADS_STATUS ads_startup(bool only_own_domain, ADS_STRUCT **ads)
+ADS_STATUS ads_startup(BOOL only_own_domain, ADS_STRUCT **ads)
 {
 	return ads_startup_int(only_own_domain, 0, ads);
 }
 
-ADS_STATUS ads_startup_nobind(bool only_own_domain, ADS_STRUCT **ads)
+ADS_STATUS ads_startup_nobind(BOOL only_own_domain, ADS_STRUCT **ads)
 {
 	return ads_startup_int(only_own_domain, ADS_AUTH_NO_BIND, ads);
 }
@@ -368,42 +366,39 @@
 {
 	return net_ads_check_int(NULL, opt_workgroup, opt_host);
 }
-
-/*
+/* 
    determine the netbios workgroup name for a domain
  */
 static int net_ads_workgroup(int argc, const char **argv)
 {
 	ADS_STRUCT *ads;
-	char addr[INET6_ADDRSTRLEN];
-	struct nbt_cldap_netlogon_5 reply;
+	struct cldap_netlogon_reply reply;
 
 	if (!ADS_ERR_OK(ads_startup_nobind(False, &ads))) {
 		d_fprintf(stderr, "Didn't find the cldap server!\n");
 		return -1;
 	}
-
+	
 	if (!ads->config.realm) {
 		ads->config.realm = CONST_DISCARD(char *, opt_target_workgroup);
-		ads->ldap.port = 389;
+		ads->ldap_port = 389;
 	}
-
-	print_sockaddr(addr, sizeof(addr), &ads->ldap.ss);
-	if ( !ads_cldap_netlogon_5(talloc_tos(), addr, ads->server.realm, &reply ) ) {
+	
+	if ( !ads_cldap_netlogon( inet_ntoa(ads->ldap_ip), ads->server.realm, &reply ) ) {
 		d_fprintf(stderr, "CLDAP query failed!\n");
 		return -1;
 	}
 
-	d_printf("Workgroup: %s\n", reply.domain);
+	d_printf("Workgroup: %s\n", reply.netbios_domain);
 
 	ads_destroy(&ads);
-
+	
 	return 0;
 }
 
 
 
-static bool usergrp_display(ADS_STRUCT *ads, char *field, void **values, void *data_area)
+static BOOL usergrp_display(char *field, void **values, void *data_area)
 {
 	char **disp_fields = (char **) data_area;
 
@@ -411,7 +406,7 @@
 		if (disp_fields[0]) {
 			if (!strchr_m(disp_fields[0], '$')) {
 				if (disp_fields[1])
-					d_printf("%-21.21s %s\n",
+					d_printf("%-21.21s %s\n", 
 					       disp_fields[0], disp_fields[1]);
 				else
 					d_printf("%s\n", disp_fields[0]);
@@ -434,7 +429,7 @@
 static int net_ads_user_usage(int argc, const char **argv)
 {
 	return net_help_user(argc, argv);
-}
+} 
 
 static int ads_user_add(int argc, const char **argv)
 {
@@ -446,7 +441,7 @@
 	char *ou_str = NULL;
 
 	if (argc < 1) return net_ads_user_usage(argc, argv);
-
+	
 	if (!ADS_ERR_OK(ads_startup(False, &ads))) {
 		return -1;
 	}
@@ -457,7 +452,7 @@
 		d_fprintf(stderr, "ads_user_add: %s\n", ads_errstr(status));
 		goto done;
 	}
-
+	
 	if (ads_count_replies(ads, res)) {
 		d_fprintf(stderr, "ads_user_add: User %s already exists\n", argv[0]);
 		goto done;
@@ -478,7 +473,7 @@
 	}
 
 	/* if no password is to be set, we're done */
-	if (argc == 1) {
+	if (argc == 1) { 
 		d_printf("User %s added\n", argv[0]);
 		rc = 0;
 		goto done;
@@ -486,7 +481,7 @@
 
 	/* try setting the password */
 	asprintf(&upn, "%s@%s", argv[0], ads->config.realm);
-	status = ads_krb5_set_password(ads->auth.kdc_server, upn, argv[1],
+	status = ads_krb5_set_password(ads->auth.kdc_server, upn, argv[1], 
 				       ads->auth.time_offset);
 	safe_free(upn);
 	if (ADS_ERR_OK(status)) {
@@ -550,8 +545,8 @@
 		SAFE_FREE(escaped_user);
 		return -1;
 	}
-
-	grouplist = ldap_get_values((LDAP *)ads->ldap.ld,
+	
+	grouplist = ldap_get_values((LDAP *)ads->ld,
 				    (LDAPMessage *)res, "memberOf");
 
 	if (grouplist) {
@@ -564,7 +559,7 @@
 		}
 		ldap_value_free(grouplist);
 	}
-
+	
 	ads_msgfree(ads, res);
 	ads_destroy(&ads);
 	SAFE_FREE(escaped_user);
@@ -581,7 +576,7 @@
 	if (argc < 1) {
 		return net_ads_user_usage(argc, argv);
 	}
-
+	
 	if (!ADS_ERR_OK(ads_startup(False, &ads))) {
 		return -1;
 	}
@@ -602,7 +597,7 @@
 		ads_destroy(&ads);
 		return 0;
 	}
-	d_fprintf(stderr, "Error deleting user %s: %s\n", argv[0],
+	d_fprintf(stderr, "Error deleting user %s: %s\n", argv[0], 
 		 ads_errstr(rc));
 	ads_destroy(&ads);
 	return -1;
@@ -621,7 +616,7 @@
 	const char *shortattrs[] = {"sAMAccountName", NULL};
 	const char *longattrs[] = {"sAMAccountName", "description", NULL};
 	char *disp_fields[2] = {NULL, NULL};
-
+	
 	if (argc == 0) {
 		if (!ADS_ERR_OK(ads_startup(False, &ads))) {
 			return -1;
@@ -631,11 +626,11 @@
 			d_printf("\nUser name             Comment"\
 				 "\n-----------------------------\n");
 
-		rc = ads_do_search_all_fn(ads, ads->config.bind_path,
+		rc = ads_do_search_all_fn(ads, ads->config.bind_path, 
 					  LDAP_SCOPE_SUBTREE,
-					  "(objectCategory=user)",
+					  "(objectCategory=user)", 
 					  opt_long_list_entries ? longattrs :
-					  shortattrs, usergrp_display,
+					  shortattrs, usergrp_display, 
 					  disp_fields);
 		ads_destroy(&ads);
 		return ADS_ERR_OK(rc) ? 0 : -1;
@@ -647,7 +642,7 @@
 static int net_ads_group_usage(int argc, const char **argv)
 {
 	return net_help_group(argc, argv);
-}
+} 
 
 static int ads_group_add(int argc, const char **argv)
 {
@@ -660,7 +655,7 @@
 	if (argc < 1) {
 		return net_ads_group_usage(argc, argv);
 	}
-
+	
 	if (!ADS_ERR_OK(ads_startup(False, &ads))) {
 		return -1;
 	}
@@ -671,7 +666,7 @@
 		d_fprintf(stderr, "ads_group_add: %s\n", ads_errstr(status));
 		goto done;
 	}
-
+	
 	if (ads_count_replies(ads, res)) {
 		d_fprintf(stderr, "ads_group_add: Group %s already exists\n", argv[0]);
 		goto done;
@@ -711,7 +706,7 @@
 	if (argc < 1) {
 		return net_ads_group_usage(argc, argv);
 	}
-
+	
 	if (!ADS_ERR_OK(ads_startup(False, &ads))) {
 		return -1;
 	}
@@ -732,7 +727,7 @@
 		ads_destroy(&ads);
 		return 0;
 	}
-	d_fprintf(stderr, "Error deleting group %s: %s\n", argv[0],
+	d_fprintf(stderr, "Error deleting group %s: %s\n", argv[0], 
 		 ads_errstr(rc));
 	ads_destroy(&ads);
 	return -1;
@@ -759,11 +754,11 @@
 		if (opt_long_list_entries)
 			d_printf("\nGroup name            Comment"\
 				 "\n-----------------------------\n");
-		rc = ads_do_search_all_fn(ads, ads->config.bind_path,
-					  LDAP_SCOPE_SUBTREE,
-					  "(objectCategory=group)",
-					  opt_long_list_entries ? longattrs :
-					  shortattrs, usergrp_display,
+		rc = ads_do_search_all_fn(ads, ads->config.bind_path, 
+					  LDAP_SCOPE_SUBTREE, 
+					  "(objectCategory=group)", 
+					  opt_long_list_entries ? longattrs : 
+					  shortattrs, usergrp_display, 
 					  disp_fields);
 
 		ads_destroy(&ads);
@@ -809,12 +804,17 @@
 
 static int net_ads_leave(int argc, const char **argv)
 {
+	ADS_STRUCT *ads = NULL;
+	ADS_STATUS adsret;
+	NTSTATUS status;
+	int ret = -1;
+	struct cli_state *cli = NULL;
 	TALLOC_CTX *ctx;
-	struct libnet_UnjoinCtx *r = NULL;
-	WERROR werr;
+	DOM_SID *dom_sid = NULL;
+	char *short_domain_name = NULL;      
 
-	if (!*lp_realm()) {
-		d_fprintf(stderr, "No realm set, are we joined ?\n");
+	if (!secrets_init()) {
+		DEBUG(1,("Failed to initialise secrets database\n"));
 		return -1;
 	}
 
@@ -823,57 +823,57 @@
 		return -1;
 	}
 
-	use_in_memory_ccache();
+	/* The finds a DC and takes care of getting the 
+	   user creds if necessary */
 
-	werr = libnet_init_UnjoinCtx(ctx, &r);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "Could not initialise unjoin context.\n");
+	if (!ADS_ERR_OK(ads_startup(True, &ads))) {
 		return -1;
 	}
 
-	r->in.debug		= true;
-	r->in.dc_name		= opt_host;
-	r->in.domain_name	= lp_realm();
-	r->in.admin_account	= opt_user_name;
-	r->in.admin_password	= net_prompt_pass(opt_user_name);
-	r->in.modify_config	= lp_config_backend_is_registry();
-	r->in.unjoin_flags	= WKSSVC_JOIN_FLAGS_JOIN_TYPE |
-				  WKSSVC_JOIN_FLAGS_ACCOUNT_DELETE;
+	/* make RPC calls here */
 
-	werr = libnet_Unjoin(ctx, r);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_printf("Failed to leave domain: %s\n",
-			 r->out.error_string ? r->out.error_string :
-			 get_friendly_werror_msg(werr));
+	if ( !NT_STATUS_IS_OK(connect_to_ipc_krb5(&cli, &ads->ldap_ip, 
+		ads->config.ldap_server_name)) )
+	{
 		goto done;
 	}
-
-	if (W_ERROR_IS_OK(werr)) {
-		d_printf("Deleted account for '%s' in realm '%s'\n",
-			r->in.machine_name, r->out.dns_domain_name);
+	
+	if ( !NT_STATUS_IS_OK(netdom_get_domain_sid( ctx, cli, &short_domain_name, &dom_sid )) ) {
 		goto done;
 	}
 
-	/* We couldn't delete it - see if the disable succeeded. */
-	if (r->out.disabled_machine_account) {
-		d_printf("Disabled account for '%s' in realm '%s'\n",
-			r->in.machine_name, r->out.dns_domain_name);
-		werr = WERR_OK;
-		goto done;
-	}
+	saf_delete( short_domain_name );
 
-	d_fprintf(stderr, "Failed to disable machine account for '%s' in realm '%s'\n",
-		  r->in.machine_name, r->out.dns_domain_name);
+	status = netdom_leave_domain(ctx, cli, dom_sid);
 
- done:
-	TALLOC_FREE(r);
-	TALLOC_FREE(ctx);
+	/* Try and delete it via LDAP - the old way we used to. */
 
-	if (W_ERROR_IS_OK(werr)) {
-		return 0;
+	adsret = ads_leave_realm(ads, global_myname());
+	if (ADS_ERR_OK(adsret)) {
+		d_printf("Deleted account for '%s' in realm '%s'\n",
+			global_myname(), ads->config.realm);
+		ret = 0;
+	} else {
+		/* We couldn't delete it - see if the disable succeeded. */
+		if (NT_STATUS_IS_OK(status)) {
+			d_printf("Disabled account for '%s' in realm '%s'\n",
+				global_myname(), ads->config.realm);
+			ret = 0;
+		} else {
+			d_fprintf(stderr, "Failed to disable machine account for '%s' in realm '%s'\n",
+				global_myname(), ads->config.realm);
+		}
 	}
 
-	return -1;
+done:
+
+	if ( cli ) 
+		cli_shutdown(cli);
+
+	ads_destroy(&ads);
+	TALLOC_FREE( ctx );
+
+	return ret;
 }
 
 static NTSTATUS net_ads_join_ok(void)
@@ -908,7 +908,7 @@
 	/* Display success or failure */
 	status = net_ads_join_ok();
 	if (!NT_STATUS_IS_OK(status)) {
-		fprintf(stderr,"Join to domain is not valid: %s\n",
+		fprintf(stderr,"Join to domain is not valid: %s\n", 
 			get_friendly_nt_error_msg(status));
 		return -1;
 	}
@@ -921,43 +921,373 @@
   Simple configu checks before beginning the join
  ********************************************************************/
 
-static WERROR check_ads_config( void )
+static NTSTATUS check_ads_config( void )
 {
 	if (lp_server_role() != ROLE_DOMAIN_MEMBER ) {
 		d_printf("Host is not configured as a member server.\n");
-		return WERR_INVALID_DOMAIN_ROLE;
+		return NT_STATUS_INVALID_DOMAIN_ROLE;
 	}
 
 	if (strlen(global_myname()) > 15) {
 		d_printf("Our netbios name can be at most 15 chars long, "
 			 "\"%s\" is %u chars long\n", global_myname(),
 			 (unsigned int)strlen(global_myname()));
-		return WERR_INVALID_COMPUTER_NAME;
+		return NT_STATUS_NAME_TOO_LONG;
 	}
 
 	if ( lp_security() == SEC_ADS && !*lp_realm()) {
 		d_fprintf(stderr, "realm must be set in in %s for ADS "
-			"join to succeed.\n", get_dyn_CONFIGFILE());
-		return WERR_INVALID_PARAM;
+			"join to succeed.\n", dyn_CONFIGFILE);
+		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-	return WERR_OK;
+	if (!secrets_init()) {
+		DEBUG(1,("Failed to initialise secrets database\n"));
+		/* This is a good bet for failure of secrets_init ... */
+		return NT_STATUS_ACCESS_DENIED;
+	}
+	
+	return NT_STATUS_OK;
 }
 
 /*******************************************************************
+ Do the domain join
+ ********************************************************************/
+
+static NTSTATUS net_join_domain(TALLOC_CTX *ctx, const char *servername, 
+				struct in_addr *ip, char **domain, 
+				DOM_SID **dom_sid, 
+				const char *password)
+{
+	NTSTATUS ret = NT_STATUS_UNSUCCESSFUL;
+	struct cli_state *cli = NULL;
+
+	ret = connect_to_ipc_krb5(&cli, ip, servername);
+	if ( !NT_STATUS_IS_OK(ret) ) {
+		goto done;
+	}
+	
+	ret = netdom_get_domain_sid( ctx, cli, domain, dom_sid );
+	if ( !NT_STATUS_IS_OK(ret) ) {
+		goto done;
+	}
+
+	/* cli->server_domain is not filled in when using krb5 
+	   session setups */
+
+	saf_store( *domain, cli->desthost );
+
+	ret = netdom_join_domain( ctx, cli, *dom_sid, password, ND_TYPE_AD );
+
+done:
+	if ( cli ) 
+		cli_shutdown(cli);
+
+	return ret;
+}
+
+/*******************************************************************
+ Set a machines dNSHostName and servicePrincipalName attributes
+ ********************************************************************/
+
+static ADS_STATUS net_set_machine_spn(TALLOC_CTX *ctx, ADS_STRUCT *ads_s )
+{
+	ADS_STATUS status = ADS_ERROR(LDAP_SERVER_DOWN);
+	char *new_dn;
+	ADS_MODLIST mods;
+	const char *servicePrincipalName[3] = {NULL, NULL, NULL};
+	char *psp;
+	fstring my_fqdn;
+	LDAPMessage *res = NULL;
+	char *dn_string = NULL;
+	const char *machine_name = global_myname();
+	int count;
+	
+	if ( !machine_name ) {
+		return ADS_ERROR(LDAP_NO_MEMORY);
+	}
+	
+	/* Find our DN */
+	
+	status = ads_find_machine_acct(ads_s, &res, machine_name);
+	if (!ADS_ERR_OK(status)) 
+		return status;
+		
+	if ( (count = ads_count_replies(ads_s, res)) != 1 ) {
+		DEBUG(1,("net_set_machine_spn: %d entries returned!\n", count));
+		return ADS_ERROR(LDAP_NO_MEMORY);	
+	}
+	
+	if ( (dn_string = ads_get_dn(ads_s, res)) == NULL ) {
+		DEBUG(1, ("ads_add_machine_acct: ads_get_dn returned NULL (malloc failure?)\n"));
+		goto done;
+	}
+	
+	new_dn = talloc_strdup(ctx, dn_string);
+	ads_memfree(ads_s, dn_string);
+	if (!new_dn) {
+		return ADS_ERROR(LDAP_NO_MEMORY);
+	}
+
+	/* Windows only creates HOST/shortname & HOST/fqdn. */
+	   
+	if ( !(psp = talloc_asprintf(ctx, "HOST/%s", machine_name)) ) 
+		goto done;
+	strupper_m(psp);
+	servicePrincipalName[0] = psp;
+
+	name_to_fqdn(my_fqdn, machine_name);
+	strlower_m(my_fqdn);
+	if ( !(psp = talloc_asprintf(ctx, "HOST/%s", my_fqdn)) ) 
+		goto done;
+	servicePrincipalName[1] = psp;
+	
+	if (!(mods = ads_init_mods(ctx))) {
+		goto done;
+	}
+	
+	/* fields of primary importance */
+	
+	ads_mod_str(ctx, &mods, "dNSHostName", my_fqdn);
+	ads_mod_strlist(ctx, &mods, "servicePrincipalName", servicePrincipalName);
+
+	status = ads_gen_mod(ads_s, new_dn, mods);
+
+done:
+	ads_msgfree(ads_s, res);
+	
+	return status;
+}
+
+/*******************************************************************
+ Set a machines dNSHostName and servicePrincipalName attributes
+ ********************************************************************/
+
+static ADS_STATUS net_set_machine_upn(TALLOC_CTX *ctx, ADS_STRUCT *ads_s, const char *upn )
+{
+	ADS_STATUS status = ADS_ERROR(LDAP_SERVER_DOWN);
+	char *new_dn;
+	ADS_MODLIST mods;
+	LDAPMessage *res = NULL;
+	char *dn_string = NULL;
+	const char *machine_name = global_myname();
+	int count;
+	
+	if ( !machine_name ) {
+		return ADS_ERROR(LDAP_NO_MEMORY);
+	}
+	
+	/* Find our DN */
+	
+	status = ads_find_machine_acct(ads_s, &res, machine_name);
+	if (!ADS_ERR_OK(status)) 
+		return status;
+		
+	if ( (count = ads_count_replies(ads_s, res)) != 1 ) {
+		DEBUG(1,("net_set_machine_spn: %d entries returned!\n", count));
+		return ADS_ERROR(LDAP_NO_MEMORY);	
+	}
+	
+	if ( (dn_string = ads_get_dn(ads_s, res)) == NULL ) {
+		DEBUG(1, ("ads_add_machine_acct: ads_get_dn returned NULL (malloc failure?)\n"));
+		goto done;
+	}
+	
+	new_dn = talloc_strdup(ctx, dn_string);
+	ads_memfree(ads_s, dn_string);
+	if (!new_dn) {
+		return ADS_ERROR(LDAP_NO_MEMORY);
+	}
+	
+	/* now do the mods */
+	
+	if (!(mods = ads_init_mods(ctx))) {
+		goto done;
+	}
+	
+	/* fields of primary importance */
+	
+	ads_mod_str(ctx, &mods, "userPrincipalName", upn);
+
+	status = ads_gen_mod(ads_s, new_dn, mods);
+
+done:
+	ads_msgfree(ads_s, res);
+	
+	return status;
+}
+
+/*******************************************************************
+ Set a machines dNSHostName and servicePrincipalName attributes
+ ********************************************************************/
+
+static ADS_STATUS net_set_os_attributes(TALLOC_CTX *ctx, ADS_STRUCT *ads_s, 
+					const char *os_name, const char *os_version )
+{
+	ADS_STATUS status = ADS_ERROR(LDAP_SERVER_DOWN);
+	char *new_dn;
+	ADS_MODLIST mods;
+	LDAPMessage *res = NULL;
+	char *dn_string = NULL;
+	const char *machine_name = global_myname();
+	int count;
+	char *os_sp = NULL;
+	
+	if ( !os_name || !os_version ) {
+		return ADS_ERROR(LDAP_NO_MEMORY);
+	}
+	
+	/* Find our DN */
+	
+	status = ads_find_machine_acct(ads_s, &res, machine_name);
+	if (!ADS_ERR_OK(status)) 
+		return status;
+		
+	if ( (count = ads_count_replies(ads_s, res)) != 1 ) {
+		DEBUG(1,("net_set_machine_spn: %d entries returned!\n", count));
+		return ADS_ERROR(LDAP_NO_MEMORY);	
+	}
+	
+	if ( (dn_string = ads_get_dn(ads_s, res)) == NULL ) {
+		DEBUG(1, ("ads_add_machine_acct: ads_get_dn returned NULL (malloc failure?)\n"));
+		goto done;
+	}
+	
+	new_dn = talloc_strdup(ctx, dn_string);
+	ads_memfree(ads_s, dn_string);
+	if (!new_dn) {
+		return ADS_ERROR(LDAP_NO_MEMORY);
+	}
+	
+	/* now do the mods */
+	
+	if (!(mods = ads_init_mods(ctx))) {
+		goto done;
+	}
+
+	os_sp = talloc_asprintf( ctx, "Samba %s", SAMBA_VERSION_STRING );
+	
+	/* fields of primary importance */
+	
+	ads_mod_str(ctx, &mods, "operatingSystem", os_name);
+	ads_mod_str(ctx, &mods, "operatingSystemVersion", os_version);
+	if ( os_sp )
+		ads_mod_str(ctx, &mods, "operatingSystemServicePack", os_sp);
+
+	status = ads_gen_mod(ads_s, new_dn, mods);
+
+done:
+	ads_msgfree(ads_s, res);
+	TALLOC_FREE( os_sp );	
+	
+	return status;
+}
+
+/*******************************************************************
+  join a domain using ADS (LDAP mods)
+ ********************************************************************/
+
+static ADS_STATUS net_precreate_machine_acct( ADS_STRUCT *ads, const char *ou )
+{
+	ADS_STATUS rc = ADS_ERROR(LDAP_SERVER_DOWN);
+	char *dn, *ou_str;
+	LDAPMessage *res = NULL;
+
+	ou_str = ads_ou_string(ads, ou);
+	if ((asprintf(&dn, "%s,%s", ou_str, ads->config.bind_path)) == -1) {
+		SAFE_FREE(ou_str);
+		return ADS_ERROR(LDAP_NO_MEMORY);
+	}
+
+	rc = ads_search_dn(ads, &res, dn, NULL);
+	ads_msgfree(ads, res);
+
+	if (ADS_ERR_OK(rc)) {
+		/* Attempt to create the machine account and bail if this fails.
+		   Assume that the admin wants exactly what they requested */
+
+		rc = ads_create_machine_acct( ads, global_myname(), dn );
+		if ( rc.error_type == ENUM_ADS_ERROR_LDAP && rc.err.rc == LDAP_ALREADY_EXISTS ) {
+			rc = ADS_SUCCESS;
+		}
+	}
+
+	SAFE_FREE( ou_str );
+	SAFE_FREE( dn );
+
+	return rc;
+}
+
+/************************************************************************
+ ************************************************************************/
+
+static BOOL net_derive_salting_principal( TALLOC_CTX *ctx, ADS_STRUCT *ads )
+{
+	uint32 domain_func;
+	ADS_STATUS status;
+	fstring salt;
+	char *std_salt;
+	LDAPMessage *res = NULL;
+	const char *machine_name = global_myname();
+
+	status = ads_domain_func_level( ads, &domain_func );
+	if ( !ADS_ERR_OK(status) ) {
+		DEBUG(2,("Failed to determine domain functional level!\n"));
+		return False;
+	}
+
+	/* go ahead and setup the default salt */
+
+	if ( (std_salt = kerberos_standard_des_salt()) == NULL ) {
+		d_fprintf(stderr, "net_derive_salting_principal: failed to obtain stanard DES salt\n");
+		return False;
+	}
+
+	fstrcpy( salt, std_salt );
+	SAFE_FREE( std_salt );
+	
+	/* if it's a Windows functional domain, we have to look for the UPN */
+	   
+	if ( domain_func == DS_DOMAIN_FUNCTION_2000 ) {	
+		char *upn;
+		int count;
+		
+		status = ads_find_machine_acct(ads, &res, machine_name);
+		if (!ADS_ERR_OK(status)) {
+			return False;
+		}
+		
+		if ( (count = ads_count_replies(ads, res)) != 1 ) {
+			DEBUG(1,("net_set_machine_spn: %d entries returned!\n", count));
+			return False;
+		}
+		
+		upn = ads_pull_string(ads, ctx, res, "userPrincipalName");
+		if ( upn ) {
+			fstrcpy( salt, upn );
+		}
+		
+		ads_msgfree(ads, res);
+	}
+
+	return kerberos_secrets_store_des_salt( salt );
+}
+
+/*******************************************************************
  Send a DNS update request
 *******************************************************************/
 
 #if defined(WITH_DNS_UPDATES)
 #include "dns.h"
 DNS_ERROR DoDNSUpdate(char *pszServerName,
-		      const char *pszDomainName, const char *pszHostName,
-		      const struct sockaddr_storage *sslist,
-		      size_t num_addrs );
+		      const char *pszDomainName,
+		      const char *pszHostName,
+		      const struct in_addr *iplist, int num_addrs );
 
+
 static NTSTATUS net_update_dns_internal(TALLOC_CTX *ctx, ADS_STRUCT *ads,
 					const char *machine_name,
-					const struct sockaddr_storage *addrs,
+					const struct in_addr *addrs,
 					int num_addrs)
 {
 	struct dns_rr_ns *nameservers = NULL;
@@ -965,8 +1295,8 @@
 	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
 	DNS_ERROR dns_err;
 	fstring dns_server;
-	const char *dnsdomain = NULL;
-	char *root_domain = NULL;
+	const char *dnsdomain = NULL;	
+	char *root_domain = NULL;	
 
 	if ( (dnsdomain = strchr_m( machine_name, '.')) == NULL ) {
 		d_printf("No DNS domain configured for %s. "
@@ -979,23 +1309,23 @@
 	status = ads_dns_lookup_ns( ctx, dnsdomain, &nameservers, &ns_count );
 	if ( !NT_STATUS_IS_OK(status) || (ns_count == 0)) {
 		/* Child domains often do not have NS records.  Look
-		   for the NS record for the forest root domain
+		   for the NS record for the forest root domain 
 		   (rootDomainNamingContext in therootDSE) */
 
 		const char *rootname_attrs[] = 	{ "rootDomainNamingContext", NULL };
 		LDAPMessage *msg = NULL;
 		char *root_dn;
 		ADS_STATUS ads_status;
-
-		if ( !ads->ldap.ld ) {
+		
+		if ( !ads->ld ) {
 			ads_status = ads_connect( ads );
 			if ( !ADS_ERR_OK(ads_status) ) {
 				DEBUG(0,("net_update_dns_internal: Failed to connect to our DC!\n"));
-				goto done;
-			}
+				goto done;				
+			}			
 		}
-
-		ads_status = ads_do_search(ads, "", LDAP_SCOPE_BASE,
+		
+		ads_status = ads_do_search(ads, "", LDAP_SCOPE_BASE, 
 				       "(objectclass=*)", rootname_attrs, &msg);
 		if (!ADS_ERR_OK(ads_status)) {
 			goto done;
@@ -1003,7 +1333,7 @@
 
 		root_dn = ads_pull_string(ads, ctx, msg,  "rootDomainNamingContext");
 		if ( !root_dn ) {
-			ads_msgfree( ads, msg );
+			ads_msgfree( ads, msg );			
 			goto done;
 		}
 
@@ -1015,15 +1345,15 @@
 		/* try again for NS servers */
 
 		status = ads_dns_lookup_ns( ctx, root_domain, &nameservers, &ns_count );
-
-		if ( !NT_STATUS_IS_OK(status) || (ns_count == 0)) {
-			DEBUG(3,("net_ads_join: Failed to find name server for the %s "
+		
+		if ( !NT_STATUS_IS_OK(status) || (ns_count == 0)) {			
+		DEBUG(3,("net_ads_join: Failed to find name server for the %s "
 			 "realm\n", ads->config.realm));
-			goto done;
-		}
+		goto done;
+	}
 
-		dnsdomain = root_domain;
-
+		dnsdomain = root_domain;		
+		
 	}
 
 	/* Now perform the dns update - we'll try non-secure and if we fail,
@@ -1039,14 +1369,14 @@
 done:
 
 	SAFE_FREE( root_domain );
-
+	
 	return status;
 }
 
 static NTSTATUS net_update_dns(TALLOC_CTX *mem_ctx, ADS_STRUCT *ads)
 {
 	int num_addrs;
-	struct sockaddr_storage *iplist = NULL;
+	struct in_addr *iplist = NULL;
 	fstring machine_name;
 	NTSTATUS status;
 
@@ -1058,7 +1388,7 @@
 
 	num_addrs = get_my_ip_address( &iplist );
 	if ( num_addrs <= 0 ) {
-		DEBUG(4,("net_update_dns: Failed to find my non-loopback IP "
+		DEBUG(4,("net_ads_join: Failed to find my non-loopback IP "
 			 "addresses!\n"));
 		return NT_STATUS_INVALID_PARAMETER;
 	}
@@ -1072,8 +1402,22 @@
 
 
 /*******************************************************************
+ utility function to parse an integer parameter from 
+ "parameter = value"
+**********************************************************/
+static char* get_string_param( const char* param )
+{
+	char *p;
+	
+	if ( (p = strchr( param, '=' )) == NULL )
+		return NULL;
+		
+	return (p+1);
+}
+
+/*******************************************************************
  ********************************************************************/
-
+ 
 static int net_ads_join_usage(int argc, const char **argv)
 {
 	d_printf("net ads join [options]\n");
@@ -1084,57 +1428,66 @@
 	d_printf("                      The OU string read from top to bottom without RDNs and delimited by a '/'.\n");
 	d_printf("                      E.g. \"createcomputer=Computers/Servers/Unix\"\n");
 	d_printf("                      NB: A backslash '\\' is used as escape at multiple levels and may\n");
-	d_printf("                          need to be doubled or even quadrupled.  It is not used as a separator.\n");
-	d_printf("   osName=string      Set the operatingSystem attribute during the join.\n");
-	d_printf("   osVer=string       Set the operatingSystemVersion attribute during the join.\n");
-	d_printf("                      NB: osName and osVer must be specified together for either to take effect.\n");
-	d_printf("                          Also, the operatingSystemService attribute is also set when along with\n");
-	d_printf("                          the two other attributes.\n");
+	d_printf("                          need to be doubled or even quadrupled.  It is not used as a separator");
 
 	return -1;
 }
 
 /*******************************************************************
  ********************************************************************/
-
+ 
 int net_ads_join(int argc, const char **argv)
 {
+	ADS_STRUCT *ads = NULL;
+	ADS_STATUS status;
+	NTSTATUS nt_status;
+	char *machine_account = NULL;
+	char *short_domain_name = NULL;
+	char *tmp_password, *password;
 	TALLOC_CTX *ctx = NULL;
-	struct libnet_JoinCtx *r = NULL;
-	const char *domain = lp_realm();
-	WERROR werr = WERR_SETUP_NOT_JOINED;
-	bool createupn = False;
+	DOM_SID *domain_sid = NULL;
+	BOOL createupn = False;
 	const char *machineupn = NULL;
 	const char *create_in_ou = NULL;
 	int i;
+	fstring dc_name;
+	struct in_addr dcip;
 	const char *os_name = NULL;
 	const char *os_version = NULL;
-	bool modify_config = lp_config_backend_is_registry();
+	
+	nt_status = check_ads_config();
+	if (!NT_STATUS_IS_OK(nt_status)) {
+		d_fprintf(stderr, "Invalid configuration.  Exiting....\n");
+		goto fail;
+	}
 
-	if (!modify_config) {
+	/* find a DC to initialize the server affinity cache */
 
-		werr = check_ads_config();
-		if (!W_ERROR_IS_OK(werr)) {
-			d_fprintf(stderr, "Invalid configuration.  Exiting....\n");
-			goto fail;
-		}
+	get_dc_name( lp_workgroup(), lp_realm(), dc_name, &dcip );
+
+	status = ads_startup(True, &ads);
+	if (!ADS_ERR_OK(status)) {
+		DEBUG(1, ("error on ads_startup: %s\n", ads_errstr(status)));
+		nt_status = ads_ntstatus(status);
+		goto fail;
 	}
 
-	if (!(ctx = talloc_init("net_ads_join"))) {
-		d_fprintf(stderr, "Could not initialise talloc context.\n");
-		werr = WERR_NOMEM;
+	if (strcmp(ads->config.realm, lp_realm()) != 0) {
+		d_fprintf(stderr, "realm of remote server (%s) and realm in %s "
+			"(%s) DO NOT match.  Aborting join\n", ads->config.realm, 
+			dyn_CONFIGFILE, lp_realm());
+		nt_status = NT_STATUS_INVALID_PARAMETER;
 		goto fail;
 	}
 
-	use_in_memory_ccache();
-
-	werr = libnet_init_JoinCtx(ctx, &r);
-	if (!W_ERROR_IS_OK(werr)) {
+	if (!(ctx = talloc_init("net_ads_join"))) {
+		d_fprintf(stderr, "Could not initialise talloc context.\n");
+		nt_status = NT_STATUS_NO_MEMORY;
 		goto fail;
 	}
 
 	/* process additional command line args */
-
+	
 	for ( i=0; i<argc; i++ ) {
 		if ( !StrnCaseCmp(argv[i], "createupn", strlen("createupn")) ) {
 			createupn = True;
@@ -1143,120 +1496,201 @@
 		else if ( !StrnCaseCmp(argv[i], "createcomputer", strlen("createcomputer")) ) {
 			if ( (create_in_ou = get_string_param(argv[i])) == NULL ) {
 				d_fprintf(stderr, "Please supply a valid OU path.\n");
-				werr = WERR_INVALID_PARAM;
+				nt_status = NT_STATUS_INVALID_PARAMETER;
 				goto fail;
-			}
+			}		
 		}
 		else if ( !StrnCaseCmp(argv[i], "osName", strlen("osName")) ) {
 			if ( (os_name = get_string_param(argv[i])) == NULL ) {
 				d_fprintf(stderr, "Please supply a operating system name.\n");
-				werr = WERR_INVALID_PARAM;
+				nt_status = NT_STATUS_INVALID_PARAMETER;
 				goto fail;
-			}
+			}		
 		}
 		else if ( !StrnCaseCmp(argv[i], "osVer", strlen("osVer")) ) {
 			if ( (os_version = get_string_param(argv[i])) == NULL ) {
 				d_fprintf(stderr, "Please supply a valid operating system version.\n");
-				werr = WERR_INVALID_PARAM;
+				nt_status = NT_STATUS_INVALID_PARAMETER;
 				goto fail;
-			}
+			}		
 		}
 		else {
-			domain = argv[i];
+			d_fprintf(stderr, "Bad option: %s\n", argv[i]);
+			nt_status = NT_STATUS_INVALID_PARAMETER;
+			goto fail;
 		}
 	}
 
-	if (!*domain) {
-		d_fprintf(stderr, "Please supply a valid domain name\n");
-		werr = WERR_INVALID_PARAM;
-		goto fail;
+	/* If we were given an OU, try to create the machine in 
+	   the OU account first and then do the normal RPC join */
+
+	if  ( create_in_ou ) {
+		status = net_precreate_machine_acct( ads, create_in_ou );
+		if ( !ADS_ERR_OK(status) ) {
+			d_fprintf( stderr, "Failed to pre-create the machine object "
+				"in OU %s.\n", argv[0]);
+			DEBUG(1, ("error calling net_precreate_machine_acct: %s\n", 
+				  ads_errstr(status)));
+			nt_status = ads_ntstatus(status);
+			goto fail;
+		}
 	}
 
 	/* Do the domain join here */
 
-	r->in.domain_name	= domain;
-	r->in.create_upn	= createupn;
-	r->in.upn		= machineupn;
-	r->in.account_ou	= create_in_ou;
-	r->in.os_name		= os_name;
-	r->in.os_version	= os_version;
-	r->in.dc_name		= opt_host;
-	r->in.admin_account	= opt_user_name;
-	r->in.admin_password	= net_prompt_pass(opt_user_name);
-	r->in.debug		= true;
-	r->in.modify_config	= modify_config;
-	r->in.join_flags	= WKSSVC_JOIN_FLAGS_JOIN_TYPE |
-				  WKSSVC_JOIN_FLAGS_ACCOUNT_CREATE |
-				  WKSSVC_JOIN_FLAGS_DOMAIN_JOIN_IF_JOINED;
-
-	werr = libnet_Join(ctx, r);
-	if (!W_ERROR_IS_OK(werr)) {
+	tmp_password = generate_random_str(DEFAULT_TRUST_ACCOUNT_PASSWORD_LENGTH);
+	password = talloc_strdup(ctx, tmp_password);
+	
+	nt_status = net_join_domain(ctx, ads->config.ldap_server_name, 
+				    &ads->ldap_ip, &short_domain_name, &domain_sid, password);
+	if ( !NT_STATUS_IS_OK(nt_status) ) {
+		DEBUG(1, ("call of net_join_domain failed: %s\n", 
+			  get_friendly_nt_error_msg(nt_status)));
 		goto fail;
 	}
 
 	/* Check the short name of the domain */
-
-	if (!modify_config && !strequal(lp_workgroup(), r->out.netbios_domain_name)) {
-		d_printf("The workgroup in %s does not match the short\n", get_dyn_CONFIGFILE());
+	
+	if ( !strequal(lp_workgroup(), short_domain_name) ) {
+		d_printf("The workgroup in %s does not match the short\n", dyn_CONFIGFILE);
 		d_printf("domain name obtained from the server.\n");
-		d_printf("Using the name [%s] from the server.\n", r->out.netbios_domain_name);
-		d_printf("You should set \"workgroup = %s\" in %s.\n",
-			 r->out.netbios_domain_name, get_dyn_CONFIGFILE());
+		d_printf("Using the name [%s] from the server.\n", short_domain_name);
+		d_printf("You should set \"workgroup = %s\" in %s.\n", 
+			 short_domain_name, dyn_CONFIGFILE);
 	}
+	
+	d_printf("Using short domain name -- %s\n", short_domain_name);
 
-	d_printf("Using short domain name -- %s\n", r->out.netbios_domain_name);
-
-	if (r->out.dns_domain_name) {
-		d_printf("Joined '%s' to realm '%s'\n", r->in.machine_name,
-			r->out.dns_domain_name);
-	} else {
-		d_printf("Joined '%s' to domain '%s'\n", r->in.machine_name,
-			r->out.netbios_domain_name);
+	/*  HACK ALERT!  Store the sid and password under both the lp_workgroup() 
+	    value from smb.conf and the string returned from the server.  The former is
+	    neede to bootstrap winbindd's first connection to the DC to get the real 
+	    short domain name   --jerry */
+	   
+	if ( (netdom_store_machine_account( lp_workgroup(), domain_sid, password ) == -1)
+		|| (netdom_store_machine_account( short_domain_name, domain_sid, password ) == -1) )
+	{
+		/* issue an internal error here for now.
+		 * everything else would mean changing tdb routines. */
+		nt_status = NT_STATUS_INTERNAL_ERROR;
+		goto fail;
 	}
 
-#if defined(WITH_DNS_UPDATES)
-	if (r->out.domain_is_ad) {
-		/* We enter this block with user creds */
-		ADS_STRUCT *ads_dns = NULL;
+	/* Verify that everything is ok */
 
-		if ( (ads_dns = ads_init( lp_realm(), NULL, NULL )) != NULL ) {
-			/* kinit with the machine password */
+	if ( net_rpc_join_ok(short_domain_name, ads->config.ldap_server_name, &ads->ldap_ip) != 0 ) {
+		d_fprintf(stderr, "Failed to verify membership in domain!\n");
+		goto fail;
+	}	
 
-			use_in_memory_ccache();
-			asprintf( &ads_dns->auth.user_name, "%s$", global_myname() );
-			ads_dns->auth.password = secrets_fetch_machine_password(
-				r->out.netbios_domain_name, NULL, NULL );
-			ads_dns->auth.realm = SMB_STRDUP( r->out.dns_domain_name );
-			strupper_m(ads_dns->auth.realm );
-			ads_kinit_password( ads_dns );
+	/* create the dNSHostName & servicePrincipalName values */
+	
+	status = net_set_machine_spn( ctx, ads );
+	if ( !ADS_ERR_OK(status) )  {
+
+		d_fprintf(stderr, "Failed to set servicePrincipalNames. Please ensure that\n");
+		d_fprintf(stderr, "the DNS domain of this server matches the AD domain,\n");
+		d_fprintf(stderr, "Or rejoin with using Domain Admin credentials.\n");
+		
+		/* Disable the machine account in AD.  Better to fail than to leave 
+		   a confused admin.  */
+		
+		if ( net_ads_leave( 0, NULL ) != 0 ) {
+			d_fprintf( stderr, "Failed to disable machine account in AD.  Please do so manually.\n");
 		}
+		
+		/* clear out the machine password */
+		
+		netdom_store_machine_account( lp_workgroup(), domain_sid, "" ); 
+		netdom_store_machine_account( short_domain_name, domain_sid, "" );
+		
+		nt_status = ads_ntstatus(status);
+		goto fail;
+	}
 
-		if ( !ads_dns || !NT_STATUS_IS_OK(net_update_dns( ctx, ads_dns )) ) {
-			d_fprintf( stderr, "DNS update failed!\n" );
+	if ( !net_derive_salting_principal( ctx, ads ) ) {
+		DEBUG(1,("Failed to determine salting principal\n"));
+		goto fail;
+	}
+
+	if ( createupn ) {
+		pstring upn;
+		
+		/* default to using the short UPN name */
+		if ( !machineupn ) {
+			snprintf( upn, sizeof(upn), "host/%s@%s", global_myname(), 
+				ads->config.realm );
+			machineupn = upn;
 		}
+		
+		status = net_set_machine_upn( ctx, ads, machineupn );
+		if ( !ADS_ERR_OK(status) )  {
+			d_fprintf(stderr, "Failed to set userPrincipalName.  Are you a Domain Admin?\n");
+		}
+	}
 
-		/* exit from this block using machine creds */
-		ads_destroy(&ads_dns);
+	/* Try to set the operatingSystem attributes if asked */
+
+	if ( os_name && os_version ) {
+		status = net_set_os_attributes( ctx, ads, os_name, os_version );
+		if ( !ADS_ERR_OK(status) )  {
+			d_fprintf(stderr, "Failed to set operatingSystem attributes.  "
+				  "Are you a Domain Admin?\n");
+		}
 	}
+
+	/* Now build the keytab, using the same ADS connection */
+
+	if (lp_use_kerberos_keytab() && ads_keytab_create_default(ads)) {
+		DEBUG(1,("Error creating host keytab!\n"));
+	}
+
+#if defined(WITH_DNS_UPDATES)
+	/* We enter this block with user creds */
+	ads_kdestroy( NULL );	
+	ads_destroy(&ads);
+	ads = NULL;
+	
+	if ( (ads = ads_init( lp_realm(), NULL, NULL )) != NULL ) {
+		/* kinit with the machine password */
+
+		use_in_memory_ccache();
+		asprintf( &ads->auth.user_name, "%s$", global_myname() );
+		ads->auth.password = secrets_fetch_machine_password(
+			lp_workgroup(), NULL, NULL );
+		ads->auth.realm = SMB_STRDUP( lp_realm() );
+		ads_kinit_password( ads );
+	}
+	
+	if ( !ads || !NT_STATUS_IS_OK(net_update_dns( ctx, ads )) ) {
+		d_fprintf( stderr, "DNS update failed!\n" );
+	}
+	
+	/* exit from this block using machine creds */
 #endif
-	TALLOC_FREE(r);
+
+	d_printf("Joined '%s' to realm '%s'\n", global_myname(), ads->server.realm);
+
+	SAFE_FREE(machine_account);
 	TALLOC_FREE( ctx );
-
+	ads_destroy(&ads);
+	
 	return 0;
 
 fail:
 	/* issue an overall failure message at the end. */
-	d_printf("Failed to join domain: %s\n",
-		r && r->out.error_string ? r->out.error_string :
-		get_friendly_werror_msg(werr));
+	d_printf("Failed to join domain: %s\n", get_friendly_nt_error_msg(nt_status));
+
+	SAFE_FREE(machine_account);
 	TALLOC_FREE( ctx );
+        ads_destroy(&ads);
 
         return -1;
+
 }
 
 /*******************************************************************
  ********************************************************************/
-
+ 
 static int net_ads_dns_usage(int argc, const char **argv)
 {
 #if defined(WITH_DNS_UPDATES)
@@ -1273,18 +1707,18 @@
 
 /*******************************************************************
  ********************************************************************/
-
+ 
 static int net_ads_dns_register(int argc, const char **argv)
 {
 #if defined(WITH_DNS_UPDATES)
 	ADS_STRUCT *ads;
 	ADS_STATUS status;
 	TALLOC_CTX *ctx;
-
+	
 #ifdef DEVELOPER
 	talloc_enable_leak_report();
 #endif
-
+	
 	if (argc > 0) {
 		d_fprintf(stderr, "net ads dns register\n");
 		return -1;
@@ -1302,18 +1736,18 @@
 		return -1;
 	}
 
-	if ( !NT_STATUS_IS_OK(net_update_dns(ctx, ads)) ) {
+	if ( !NT_STATUS_IS_OK(net_update_dns(ctx, ads)) ) {		
 		d_fprintf( stderr, "DNS update failed!\n" );
 		ads_destroy( &ads );
 		TALLOC_FREE( ctx );
 		return -1;
 	}
-
+	
 	d_fprintf( stderr, "Successfully registered hostname with DNS\n" );
 
 	ads_destroy(&ads);
 	TALLOC_FREE( ctx );
-
+	
 	return 0;
 #else
 	d_fprintf(stderr, "DNS update support not enabled at compile time!\n");
@@ -1329,7 +1763,7 @@
 {
 #if defined(WITH_DNS_UPDATES)
 	DNS_ERROR err;
-
+	
 #ifdef DEVELOPER
 	talloc_enable_leak_report();
 #endif
@@ -1439,7 +1873,7 @@
 	rc = ads_find_printer_on_server(ads, &res, printername, servername);
 
 	if (!ADS_ERR_OK(rc)) {
-		d_fprintf(stderr, "Server '%s' not found: %s\n",
+		d_fprintf(stderr, "Server '%s' not found: %s\n", 
 			servername, ads_errstr(rc));
 		ads_msgfree(ads, res);
 		ads_destroy(&ads);
@@ -1460,6 +1894,12 @@
 	return 0;
 }
 
+void do_drv_upgrade_printer(int msg_type, struct process_id src,
+			    void *buf, size_t len, void *private_data)
+{
+	return;
+}
+
 static int net_ads_printer_publish(int argc, const char **argv)
 {
         ADS_STRUCT *ads;
@@ -1467,7 +1907,7 @@
 	const char *servername, *printername;
 	struct cli_state *cli;
 	struct rpc_pipe_client *pipe_hnd;
-	struct sockaddr_storage server_ss;
+	struct in_addr 		server_ip;
 	NTSTATUS nt_status;
 	TALLOC_CTX *mem_ctx = talloc_init("net_ads_printer_publish");
 	ADS_MODLIST mods = ads_init_mods(mem_ctx);
@@ -1484,7 +1924,7 @@
 		talloc_destroy(mem_ctx);
 		return net_ads_printer_usage(argc, argv);
 	}
-
+	
 	printername = argv[0];
 
 	if (argc == 2) {
@@ -1492,17 +1932,17 @@
 	} else {
 		servername = global_myname();
 	}
-
+		
 	/* Get printer data from SPOOLSS */
 
-	resolve_name(servername, &server_ss, 0x20);
+	resolve_name(servername, &server_ip, 0x20);
 
-	nt_status = cli_full_connection(&cli, global_myname(), servername,
-					&server_ss, 0,
-					"IPC$", "IPC",
+	nt_status = cli_full_connection(&cli, global_myname(), servername, 
+					&server_ip, 0,
+					"IPC$", "IPC",  
 					opt_user_name, opt_workgroup,
-					opt_password ? opt_password : "",
-					CLI_FULL_CONNECTION_USE_KERBEROS,
+					opt_password ? opt_password : "", 
+					CLI_FULL_CONNECTION_USE_KERBEROS, 
 					Undefined, NULL);
 
 	if (NT_STATUS_IS_ERR(nt_status)) {
@@ -1525,7 +1965,7 @@
 		return -1;
 	}
 
-	srv_dn = ldap_get_dn((LDAP *)ads->ldap.ld, (LDAPMessage *)res);
+	srv_dn = ldap_get_dn((LDAP *)ads->ld, (LDAPMessage *)res);
 	srv_cn = ldap_explode_dn(srv_dn, 1);
 
 	srv_cn_escaped = escape_rdn_val_string_alloc(srv_cn[0]);
@@ -1570,12 +2010,12 @@
 		talloc_destroy(mem_ctx);
                 return -1;
         }
-
+ 
         d_printf("published printer\n");
 	SAFE_FREE(prt_dn);
 	ads_destroy(&ads);
 	talloc_destroy(mem_ctx);
-
+ 
 	return 0;
 }
 
@@ -1641,7 +2081,7 @@
 		{"REMOVE", net_ads_printer_remove},
 		{NULL, NULL}
 	};
-
+	
 	return net_run_function(argc, argv, func, net_ads_printer_usage);
 }
 
@@ -1673,7 +2113,7 @@
 		user = c;
 	}
 
-	use_in_memory_ccache();
+	use_in_memory_ccache();    
 	c = strchr_m(auth_principal, '@');
 	if (c) {
 		realm = ++c;
@@ -1681,7 +2121,7 @@
 		realm = lp_realm();
 	}
 
-	/* use the realm so we can eventually change passwords for users
+	/* use the realm so we can eventually change passwords for users 
 	in realms other than default */
 	if (!(ads = ads_init(realm, opt_workgroup, opt_host))) {
 		return -1;
@@ -1690,8 +2130,8 @@
 	/* we don't actually need a full connect, but it's the easy way to
 		fill in the KDC's addresss */
 	ads_connect(ads);
-
-	if (!ads->config.realm) {
+    
+	if (!ads || !ads->config.realm) {
 		d_fprintf(stderr, "Didn't find the kerberos server!\n");
 		return -1;
 	}
@@ -1704,7 +2144,7 @@
 		free(prompt);
 	}
 
-	ret = kerberos_set_password(ads->auth.kdc_server, auth_principal,
+	ret = kerberos_set_password(ads->auth.kdc_server, auth_principal, 
 				auth_password, user, new_password, ads->auth.time_offset);
 	if (!ADS_ERR_OK(ret)) {
 		d_fprintf(stderr, "Password change failed: %s\n", ads_errstr(ret));
@@ -1719,7 +2159,7 @@
 }
 
 int net_ads_changetrustpw(int argc, const char **argv)
-{
+{    
 	ADS_STRUCT *ads;
 	char *host_principal;
 	fstring my_name;
@@ -1751,7 +2191,7 @@
 		SAFE_FREE(host_principal);
 		return -1;
 	}
-
+    
 	d_printf("Password change for principal %s succeeded.\n", host_principal);
 
 	if (lp_use_kerberos_keytab()) {
@@ -1813,7 +2253,7 @@
 		d_fprintf(stderr, "search failed: %s\n", ads_errstr(rc));
 		ads_destroy(&ads);
 		return -1;
-	}
+	}	
 
 	d_printf("Got %d replies\n\n", ads_count_replies(ads, res));
 
@@ -1867,14 +2307,14 @@
 	dn = argv[0];
 	attrs = (argv + 1);
 
-	rc = ads_do_search_all(ads, dn,
+	rc = ads_do_search_all(ads, dn, 
 			       LDAP_SCOPE_BASE,
 			       "(objectclass=*)", attrs, &res);
 	if (!ADS_ERR_OK(rc)) {
 		d_fprintf(stderr, "search failed: %s\n", ads_errstr(rc));
 		ads_destroy(&ads);
 		return -1;
-	}
+	}	
 
 	d_printf("Got %d replies\n\n", ads_count_replies(ads, res));
 
@@ -1938,7 +2378,7 @@
 		d_fprintf(stderr, "search failed: %s\n", ads_errstr(rc));
 		ads_destroy(&ads);
 		return -1;
-	}
+	}	
 
 	d_printf("Got %d replies\n\n", ads_count_replies(ads, res));
 
@@ -1957,18 +2397,16 @@
 	d_printf(
 		"net ads keytab <COMMAND>\n"\
 "<COMMAND> can be either:\n"\
+"  CREATE    Creates a fresh keytab\n"\
 "  ADD       Adds new service principal\n"\
-"  CREATE    Creates a fresh keytab\n"\
 "  FLUSH     Flushes out all keytab entries\n"\
 "  HELP      Prints this help message\n"\
-"  LIST      List the keytab\n"\
-"The ADD and LIST command will take arguments, the other commands\n"\
+"The ADD command will take arguments, the other commands\n"\
 "will not take any arguments.   The arguments given to ADD\n"\
 "should be a list of principals to add.  For example, \n"\
 "   net ads keytab add srv1 srv2\n"\
 "will add principals for the services srv1 and srv2 to the\n"\
 "system's keytab.\n"\
-"The LIST command takes a keytabname.\n"\
 "\n"
 		);
 	return -1;
@@ -2017,26 +2455,13 @@
 	return ret;
 }
 
-static int net_ads_keytab_list(int argc, const char **argv)
-{
-	const char *keytab = NULL;
-
-	if (argc >= 1) {
-		keytab = argv[0];
-	}
-
-	return ads_keytab_list(keytab);
-}
-
-
 int net_ads_keytab(int argc, const char **argv)
 {
 	struct functable func[] = {
+		{"CREATE", net_ads_keytab_create},
 		{"ADD", net_ads_keytab_add},
-		{"CREATE", net_ads_keytab_create},
 		{"FLUSH", net_ads_keytab_flush},
 		{"HELP", net_ads_keytab_usage},
-		{"LIST", net_ads_keytab_list},
 		{NULL, NULL}
 	};
 
@@ -2048,120 +2473,6 @@
 	return net_run_function(argc, argv, func, net_ads_keytab_usage);
 }
 
-static int net_ads_kerberos_usage(int argc, const char **argv)
-{
-	d_printf(
-		"net ads kerberos <COMMAND>\n"\
-		"<COMMAND> can be either:\n"\
-		"  RENEW     Renew TGT from existing credential cache\n"\
-		"  PAC       Dumps the Kerberos PAC\n"\
-		"  KINIT     Retrieve Ticket Granting Ticket (TGT)\n"\
-		"\n"
-	);
-
-	return -1;
-}
-
-static int net_ads_kerberos_renew(int argc, const char **argv)
-{
-	int ret = smb_krb5_renew_ticket(NULL, NULL, NULL, NULL);
-	if (ret) {
-		d_printf("failed to renew kerberos ticket: %s\n",
-			error_message(ret));
-	}
-	return ret;
-}
-
-static int net_ads_kerberos_pac(int argc, const char **argv)
-{
-	struct PAC_DATA *pac = NULL;
-	struct PAC_LOGON_INFO *info = NULL;
-	TALLOC_CTX *mem_ctx = NULL;
-	NTSTATUS status;
-	int ret = -1;
-
-	mem_ctx = talloc_init("net_ads_kerberos_pac");
-	if (!mem_ctx) {
-		goto out;
-	}
-
-	opt_password = net_prompt_pass(opt_user_name);
-
-	status = kerberos_return_pac(mem_ctx,
-				     opt_user_name,
-				     opt_password,
-			     	     0,
-				     NULL,
-				     NULL,
-				     NULL,
-				     True,
-				     True,
-				     2592000, /* one month */
-				     &pac);
-	if (!NT_STATUS_IS_OK(status)) {
-		d_printf("failed to query kerberos PAC: %s\n",
-			nt_errstr(status));
-		goto out;
-	}
-
-	info = get_logon_info_from_pac(pac);
-	if (info) {
-		const char *s;
-		s = NDR_PRINT_STRUCT_STRING(mem_ctx, PAC_LOGON_INFO, info);
-		d_printf("The Pac: %s\n", s);
-	}
-
-	ret = 0;
- out:
-	TALLOC_FREE(mem_ctx);
-	return ret;
-}
-
-static int net_ads_kerberos_kinit(int argc, const char **argv)
-{
-	TALLOC_CTX *mem_ctx = NULL;
-	int ret = -1;
-	NTSTATUS status;
-
-	mem_ctx = talloc_init("net_ads_kerberos_kinit");
-	if (!mem_ctx) {
-		goto out;
-	}
-
-	opt_password = net_prompt_pass(opt_user_name);
-
-	ret = kerberos_kinit_password_ext(opt_user_name,
-					  opt_password,
-					  0,
-					  NULL,
-					  NULL,
-					  NULL,
-					  True,
-					  True,
-					  2592000, /* one month */
-					  &status);
-	if (ret) {
-		d_printf("failed to kinit password: %s\n",
-			nt_errstr(status));
-	}
- out:
-	return ret;
-}
-
-int net_ads_kerberos(int argc, const char **argv)
-{
-	struct functable func[] = {
-		{"KINIT", net_ads_kerberos_kinit},
-		{"RENEW", net_ads_kerberos_renew},
-		{"PAC", net_ads_kerberos_pac},
-		{"HELP", net_ads_kerberos_usage},
-		{NULL, NULL}
-	};
-
-	return net_run_function(argc, argv, func, net_ads_kerberos_usage);
-}
-
-
 int net_ads_help(int argc, const char **argv)
 {
 	struct functable func[] = {
@@ -2203,11 +2514,10 @@
 		{"LOOKUP", net_ads_lookup},
 		{"KEYTAB", net_ads_keytab},
 		{"GPO", net_ads_gpo},
-		{"KERBEROS", net_ads_kerberos},
 		{"HELP", net_ads_help},
 		{NULL, NULL}
 	};
-
+	
 	return net_run_function(argc, argv, func, net_ads_usage);
 }
 
@@ -2224,11 +2534,6 @@
 	return net_ads_noads();
 }
 
-int net_ads_kerberos(int argc, const char **argv)
-{
-	return net_ads_noads();
-}
-
 int net_ads_usage(int argc, const char **argv)
 {
 	return net_ads_noads();

Modified: branches/samba/upstream/source/utils/net_ads_gpo.c
===================================================================
--- branches/samba/upstream/source/utils/net_ads_gpo.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_ads_gpo.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  
 */
 
 #include "includes.h"
@@ -27,15 +28,14 @@
 	d_printf(
 		"net ads gpo <COMMAND>\n"\
 "<COMMAND> can be either:\n"\
-"  APPLY        Apply GPOs for machine/user\n"\
+"  ADDLINK      Link a container to a GPO\n"\
+/* "  APPLY        Apply all GPOs\n"\ */
+/* "  DELETELINK   Delete a gPLink from a container\n"\ */
+"  REFRESH      Lists all GPOs assigned to an account and downloads them\n"\
 "  GETGPO       Lists specified GPO\n"\
+"  GETLINK      Lists gPLink of a containter\n"\
 "  HELP         Prints this help message\n"\
-"  LINKADD      Link a container to a GPO\n"\
-/* "  LINKDELETE   Delete a gPLink from a container\n"\ */
-"  LINKGET      Lists gPLink of a containter\n"\
-"  LIST         Lists all GPOs for machine/user\n"\
-"  LISTALL      Lists all GPOs on a DC\n"\
-"  REFRESH      Lists all GPOs assigned to an account and downloads them\n"\
+"  LIST         Lists all GPOs\n"\
 "\n"
 		);
 	return -1;
@@ -46,14 +46,16 @@
 	TALLOC_CTX *mem_ctx;
 	ADS_STRUCT *ads;
 	ADS_STATUS status;
-	const char *dn = NULL;
-	struct GROUP_POLICY_OBJECT *gpo_list = NULL;
+	const char *attrs[] = { "userAccountControl", NULL };
+	LDAPMessage *res = NULL;
+	const char *filter;
+	char *dn = NULL;
+	struct GROUP_POLICY_OBJECT *gpo_list;
 	uint32 uac = 0;
 	uint32 flags = 0;
 	struct GROUP_POLICY_OBJECT *gpo;
 	NTSTATUS result;
-	struct nt_user_token *token = NULL;
-
+	
 	if (argc < 1) {
 		printf("usage: net ads gpo refresh <username|machinename>\n");
 		return -1;
@@ -64,17 +66,38 @@
 		return -1;
 	}
 
+	filter = talloc_asprintf(mem_ctx, "(&(objectclass=user)(sAMAccountName=%s))", argv[0]);
+	if (filter == NULL) {
+		goto out;
+	}
+
 	status = ads_startup(False, &ads);
 	if (!ADS_ERR_OK(status)) {
 		goto out;
 	}
 
-	status = ads_find_samaccount(ads, mem_ctx, argv[0], &uac, &dn);
+	status = ads_do_search_all(ads, ads->config.bind_path,
+				   LDAP_SCOPE_SUBTREE,
+				   filter, attrs, &res);
+	
 	if (!ADS_ERR_OK(status)) {
-		printf("failed to find samaccount for %s\n", argv[0]);
 		goto out;
 	}
 
+	if (ads_count_replies(ads, res) != 1) {
+		printf("no result\n");
+		goto out;
+	}
+
+	dn = ads_get_dn(ads, res);
+	if (dn == NULL) {
+		goto out;
+	}
+
+	if (!ads_pull_uint32(ads, res, "userAccountControl", &uac)) {
+		goto out;
+	}
+
 	if (uac & UF_WORKSTATION_TRUST_ACCOUNT) {
 		flags |= GPO_LIST_FLAG_MACHINE;
 	}
@@ -83,17 +106,12 @@
 		(uac & UF_WORKSTATION_TRUST_ACCOUNT) ? "machine" : "user", 
 		argv[0], dn);
 
-	status = ads_get_sid_token(ads, mem_ctx, dn, &token);
+	status = ads_get_gpo_list(ads, mem_ctx, dn, flags, &gpo_list);
 	if (!ADS_ERR_OK(status)) {
 		goto out;
 	}
 
-	status = ads_get_gpo_list(ads, mem_ctx, dn, flags, token, &gpo_list);
-	if (!ADS_ERR_OK(status)) {
-		goto out;
-	}
-
-	if (!NT_STATUS_IS_OK(result = check_refresh_gpo_list(ads, mem_ctx, flags, gpo_list))) {
+	if (!NT_STATUS_IS_OK(result = check_refresh_gpo_list(ads, mem_ctx, gpo_list))) {
 		printf("failed to refresh GPOs: %s\n", nt_errstr(result));
 		goto out;
 	}
@@ -109,8 +127,8 @@
 			GPO_VERSION_USER(gpo->version),
 			GPO_VERSION_MACHINE(gpo->version));
 
-		result = gpo_explode_filesyspath(mem_ctx, gpo->file_sys_path,
-						 &server, &share, &nt_path, &unix_path);
+		result = ads_gpo_explode_filesyspath(ads, mem_ctx, gpo->file_sys_path,
+						     &server, &share, &nt_path, &unix_path);
 		if (!NT_STATUS_IS_OK(result)) {
 			printf("got: %s\n", nt_errstr(result));
 		}
@@ -121,12 +139,15 @@
 	}
 
  out:
+	ads_memfree(ads, dn);
+	ads_msgfree(ads, res);
+
 	ads_destroy(&ads);
 	talloc_destroy(mem_ctx);
 	return 0;
 }
 
-static int net_ads_gpo_list_all(int argc, const char **argv)
+static int net_ads_gpo_list(int argc, const char **argv)
 {
 	ADS_STRUCT *ads;
 	ADS_STATUS status;
@@ -144,11 +165,10 @@
 		"name",
 		"gPCMachineExtensionNames",
 		"gPCUserExtensionNames",
-		"ntSecurityDescriptor",
 		NULL
 	};
 
-	mem_ctx = talloc_init("net_ads_gpo_list_all");
+	mem_ctx = talloc_init("net_ads_gpo_list");
 	if (mem_ctx == NULL) {
 		return -1;
 	}
@@ -158,13 +178,9 @@
 		goto out;
 	}
 
-	status = ads_do_search_all_sd_flags(ads, ads->config.bind_path,
-					    LDAP_SCOPE_SUBTREE,
-					    "(objectclass=groupPolicyContainer)",
-					    attrs,
-					    DACL_SECURITY_INFORMATION,
-					    &res);
-
+	status = ads_do_search_all(ads, ads->config.bind_path,
+				   LDAP_SCOPE_SUBTREE,
+				   "(objectclass=groupPolicyContainer)", attrs, &res);
 	if (!ADS_ERR_OK(status)) {
 		d_printf("search failed: %s\n", ads_errstr(status));
 		goto out;
@@ -184,12 +200,12 @@
 		status = ads_parse_gpo(ads, mem_ctx, msg, dn, &gpo);
 
 		if (!ADS_ERR_OK(status)) {
-			d_printf("ads_parse_gpo failed: %s\n", ads_errstr(status));
+			d_printf("parse failed: %s\n", ads_errstr(status));
 			ads_memfree(ads, dn);
 			goto out;
 		}	
 
-		dump_gpo(ads, mem_ctx, &gpo, 0);
+		dump_gpo(mem_ctx, &gpo, 1);
 		ads_memfree(ads, dn);
 	}
 
@@ -202,98 +218,63 @@
 	return 0;
 }
 
-static int net_ads_gpo_list(int argc, const char **argv)
+#if 0 /* not yet */
+
+static int net_ads_gpo_apply(int argc, const char **argv)
 {
+	TALLOC_CTX *mem_ctx;
 	ADS_STRUCT *ads;
 	ADS_STATUS status;
+	const char *attrs[] = {"distinguishedName", "userAccountControl", NULL};
 	LDAPMessage *res = NULL;
-	TALLOC_CTX *mem_ctx;
-	const char *dn = NULL;
+	const char *filter;
+	char *dn = NULL;
+	struct GROUP_POLICY_OBJECT *gpo_list;
 	uint32 uac = 0;
 	uint32 flags = 0;
-	struct GROUP_POLICY_OBJECT *gpo_list;
-	struct nt_user_token *token = NULL;
-
+	
 	if (argc < 1) {
-		printf("usage: net ads gpo list <username|machinename>\n");
+		printf("usage: net ads gpo apply <username|machinename>\n");
 		return -1;
 	}
 
-	mem_ctx = talloc_init("net_ads_gpo_list");
+	mem_ctx = talloc_init("net_ads_gpo_apply");
 	if (mem_ctx == NULL) {
 		goto out;
 	}
 
-	status = ads_startup(False, &ads);
-	if (!ADS_ERR_OK(status)) {
+	filter = talloc_asprintf(mem_ctx, "(&(objectclass=user)(sAMAccountName=%s))", argv[0]);
+	if (filter == NULL) {
 		goto out;
 	}
 
-	status = ads_find_samaccount(ads, mem_ctx, argv[0], &uac, &dn);
+	status = ads_startup(False, &ads);
 	if (!ADS_ERR_OK(status)) {
 		goto out;
 	}
 
-	if (uac & UF_WORKSTATION_TRUST_ACCOUNT) {
-		flags |= GPO_LIST_FLAG_MACHINE;
-	}
-
-	printf("%s: '%s' has dn: '%s'\n", 
-		(uac & UF_WORKSTATION_TRUST_ACCOUNT) ? "machine" : "user", 
-		argv[0], dn);
-
-	status = ads_get_sid_token(ads, mem_ctx, dn, &token);
+	status = ads_do_search_all(ads, ads->config.bind_path,
+				   LDAP_SCOPE_SUBTREE,
+				   filter, attrs, &res);
+	
 	if (!ADS_ERR_OK(status)) {
 		goto out;
 	}
 
-	status = ads_get_gpo_list(ads, mem_ctx, dn, flags, token, &gpo_list);
-	if (!ADS_ERR_OK(status)) {
+	if (ads_count_replies(ads, res) != 1) {
+		printf("no result\n");
 		goto out;
 	}
 
-	dump_gpo_list(ads, mem_ctx, gpo_list, 0);
-
-out:
-	ads_msgfree(ads, res);
-
-	talloc_destroy(mem_ctx);
-	ads_destroy(&ads);
-	
-	return 0;
-}
-
-#if 0 /* not yet */
-static int net_ads_gpo_apply(int argc, const char **argv)
-{
-	TALLOC_CTX *mem_ctx;
-	ADS_STRUCT *ads;
-	ADS_STATUS status;
-	const char *dn = NULL;
-	struct GROUP_POLICY_OBJECT *gpo_list;
-	uint32 uac = 0;
-	uint32 flags = 0;
-	
-	if (argc < 1) {
-		printf("usage: net ads gpo apply <username|machinename>\n");
-		return -1;
-	}
-
-	mem_ctx = talloc_init("net_ads_gpo_apply");
-	if (mem_ctx == NULL) {
+	dn = ads_get_dn(ads, res);
+	if (dn == NULL) {
 		goto out;
 	}
 
-	status = ads_startup(False, &ads);
-	if (!ADS_ERR_OK(status)) {
+	if (!ads_pull_uint32(ads, res, "userAccountControl", &uac)) {
 		goto out;
 	}
 
-	status = ads_find_samaccount(ads, mem_ctx, argv[0], &uac, &dn);
-	if (!ADS_ERR_OK(status)) {
-		goto out;
-	}
-
 	if (uac & UF_WORKSTATION_TRUST_ACCOUNT) {
 		flags |= GPO_LIST_FLAG_MACHINE;
 	}
@@ -308,12 +289,15 @@
 	}
 
 	/* FIXME: allow to process just a single extension */
-	status = gpo_process_gpo_list(ads, mem_ctx, gpo_list, NULL, flags); 
+	status = gpo_process_gpo_list(ads, mem_ctx, &gpo_list, NULL, flags); 
 	if (!ADS_ERR_OK(status)) {
 		goto out;
 	}
 
 out:
+	ads_memfree(ads, dn);
+	ads_msgfree(ads, res);
+
 	ads_destroy(&ads);
 	talloc_destroy(mem_ctx);
 	return 0;
@@ -321,7 +305,7 @@
 
 #endif
 
-static int net_ads_gpo_link_get(int argc, const char **argv)
+static int net_ads_gpo_get_link(int argc, const char **argv)
 {
 	ADS_STRUCT *ads;
 	ADS_STATUS status;
@@ -329,7 +313,7 @@
 	struct GP_LINK gp_link;
 
 	if (argc < 1) {
-		printf("usage: net ads gpo linkget <linkname>\n");
+		printf("usage: net ads gpo getlink <linkname>\n");
 		return -1;
 	}
 
@@ -358,7 +342,7 @@
 	return 0;
 }
 
-static int net_ads_gpo_link_add(int argc, const char **argv)
+static int net_ads_gpo_add_link(int argc, const char **argv)
 {
 	ADS_STRUCT *ads;
 	ADS_STATUS status;
@@ -366,7 +350,7 @@
 	TALLOC_CTX *mem_ctx;
 
 	if (argc < 2) {
-		printf("usage: net ads gpo linkadd <linkdn> <gpodn> [options]\n");
+		printf("usage: net ads gpo addlink <linkdn> <gpodn> [options]\n");
 		printf("note: DNs must be provided properly escaped.\n      See RFC 4514 for details\n");
 		return -1;
 	}
@@ -387,7 +371,7 @@
 
 	status = ads_add_gpo_link(ads, mem_ctx, argv[0], argv[1], gpo_opt);
 	if (!ADS_ERR_OK(status)) {
-		d_printf("link add failed: %s\n", ads_errstr(status));
+		d_printf("add link failed: %s\n", ads_errstr(status));
 		goto out;
 	}
 
@@ -400,7 +384,7 @@
 
 #if 0 /* broken */
 
-static int net_ads_gpo_link_delete(int argc, const char **argv)
+static int net_ads_gpo_delete_link(int argc, const char **argv)
 {
 	ADS_STRUCT *ads;
 	ADS_STATUS status;
@@ -468,7 +452,7 @@
 		goto out;
 	}	
 
-	dump_gpo(ads, mem_ctx, &gpo, 1);
+	dump_gpo(mem_ctx, &gpo, 1);
 
 out:
 	talloc_destroy(mem_ctx);
@@ -480,15 +464,14 @@
 int net_ads_gpo(int argc, const char **argv)
 {
 	struct functable func[] = {
-		/* {"APPLY", net_ads_gpo_apply}, */
-		{"GETGPO", net_ads_gpo_get_gpo},
-		{"HELP", net_ads_gpo_usage},
-		{"LINKADD", net_ads_gpo_link_add},
-		/* {"LINKDELETE", net_ads_gpo_link_delete}, */
-		{"LINKGET", net_ads_gpo_link_get},
 		{"LIST", net_ads_gpo_list},
-		{"LISTALL", net_ads_gpo_list_all},
 		{"REFRESH", net_ads_gpo_refresh},
+		{"ADDLINK", net_ads_gpo_add_link},
+		/* {"DELETELINK", net_ads_gpo_delete_link}, */
+		{"GETLINK", net_ads_gpo_get_link},
+		{"GETGPO", net_ads_gpo_get_gpo},
+		{"HELP", net_ads_gpo_usage},
+		/* {"APPLY", net_ads_gpo_apply}, */
 		{NULL, NULL}
 	};
 

Modified: branches/samba/upstream/source/utils/net_cache.c
===================================================================
--- branches/samba/upstream/source/utils/net_cache.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_cache.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
 
 #include "includes.h"

Deleted: branches/samba/upstream/source/utils/net_conf.c
===================================================================
--- branches/samba/upstream/source/utils/net_conf.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_conf.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,1058 +0,0 @@
-/*
- *  Samba Unix/Linux SMB client library
- *  Distributed SMB/CIFS Server Management Utility
- *  Local configuration interface
- *  Copyright (C) Michael Adam 2007-2008
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-/*
- * This is an interface to Samba's configuration as made available
- * by the libsmbconf interface (source/lib/smbconf/smbconf.c).
- *
- * This currently supports local interaction with the configuration
- * stored in the registry. But other backends and remote access via
- * rpc might get implemented in the future.
- */
-
-#include "includes.h"
-#include "utils/net.h"
-
-/**********************************************************************
- *
- * usage functions
- *
- **********************************************************************/
-
-static int net_conf_list_usage(int argc, const char **argv)
-{
-	d_printf("USAGE: net conf list\n");
-	return -1;
-}
-
-static int net_conf_import_usage(int argc, const char**argv)
-{
-	d_printf("USAGE: net conf import [--test|-T] <filename> "
-		 "[<servicename>]\n"
-		 "\t[--test|-T]    testmode - do not act, just print "
-			"what would be done\n"
-		 "\t<servicename>  only import service <servicename>, "
-			"ignore the rest\n");
-	return -1;
-}
-
-static int net_conf_listshares_usage(int argc, const char **argv)
-{
-	d_printf("USAGE: net conf listshares\n");
-	return -1;
-}
-
-static int net_conf_drop_usage(int argc, const char **argv)
-{
-	d_printf("USAGE: net conf drop\n");
-	return -1;
-}
-
-static int net_conf_showshare_usage(int argc, const char **argv)
-{
-	d_printf("USAGE: net conf showshare <sharename>\n");
-	return -1;
-}
-
-static int net_conf_addshare_usage(int argc, const char **argv)
-{
-	d_printf("USAGE: net conf addshare <sharename> <path> "
-		 "[writeable={y|N} [guest_ok={y|N} [<comment>]]\n"
-		 "\t<sharename>      the new share name.\n"
-		 "\t<path>           the path on the filesystem to export.\n"
-		 "\twriteable={y|N}  set \"writeable to \"yes\" or "
-		 "\"no\" (default) on this share.\n"
-		 "\tguest_ok={y|N}   set \"guest ok\" to \"yes\" or "
-		 "\"no\" (default)   on this share.\n"
-		 "\t<comment>        optional comment for the new share.\n");
-	return -1;
-}
-
-static int net_conf_delshare_usage(int argc, const char **argv)
-{
-	d_printf("USAGE: net conf delshare <sharename>\n");
-	return -1;
-}
-
-static int net_conf_setparm_usage(int argc, const char **argv)
-{
-	d_printf("USAGE: net conf setparm <section> <param> <value>\n");
-	return -1;
-}
-
-static int net_conf_getparm_usage(int argc, const char **argv)
-{
-	d_printf("USAGE: net conf getparm <section> <param>\n");
-	return -1;
-}
-
-static int net_conf_delparm_usage(int argc, const char **argv)
-{
-	d_printf("USAGE: net conf delparm <section> <param>\n");
-	return -1;
-}
-
-static int net_conf_getincludes_usage(int argc, const char **argv)
-{
-	d_printf("USAGE: net conf getincludes <section>\n");
-	return -1;
-}
-
-static int net_conf_setincludes_usage(int argc, const char **argv)
-{
-	d_printf("USAGE: net conf setincludes <section> [<filename>]*\n");
-	return -1;
-}
-
-static int net_conf_delincludes_usage(int argc, const char **argv)
-{
-	d_printf("USAGE: net conf delincludes <section>\n");
-	return -1;
-}
-
-
-/**********************************************************************
- *
- * Helper functions
- *
- **********************************************************************/
-
-/**
- * This functions process a service previously loaded with libsmbconf.
- */
-static WERROR import_process_service(struct smbconf_ctx *conf_ctx,
-				     struct smbconf_service *service)
-{
-	uint32_t idx;
-	WERROR werr = WERR_OK;
-	uint32_t num_includes = 0;
-	char **includes = NULL;
-	TALLOC_CTX *mem_ctx = talloc_stackframe();
-
-	if (opt_testmode) {
-		const char *indent = "";
-		if (service->name != NULL) {
-			d_printf("[%s]\n", service->name);
-			indent = "\t";
-		}
-		for (idx = 0; idx < service->num_params; idx++) {
-			d_printf("%s%s = %s\n", indent,
-				 service->param_names[idx],
-				 service->param_values[idx]);
-		}
-		d_printf("\n");
-		goto done;
-	}
-
-	if (smbconf_share_exists(conf_ctx, service->name)) {
-		werr = smbconf_delete_share(conf_ctx, service->name);
-		if (!W_ERROR_IS_OK(werr)) {
-			goto done;
-		}
-	}
-	werr = smbconf_create_share(conf_ctx, service->name);
-	if (!W_ERROR_IS_OK(werr)) {
-		goto done;
-	}
-
-	for (idx = 0; idx < service->num_params; idx ++) {
-		if (strequal(service->param_names[idx], "include")) {
-			includes = TALLOC_REALLOC_ARRAY(mem_ctx,
-							includes,
-							char *,
-							num_includes+1);
-			if (includes == NULL) {
-				werr = WERR_NOMEM;
-				goto done;
-			}
-			includes[num_includes] = talloc_strdup(includes,
-						service->param_values[idx]);
-			if (includes[num_includes] == NULL) {
-				werr = WERR_NOMEM;
-				goto done;
-			}
-			num_includes++;
-		} else {
-			werr = smbconf_set_parameter(conf_ctx,
-						     service->name,
-						     service->param_names[idx],
-						     service->param_values[idx]);
-			if (!W_ERROR_IS_OK(werr)) {
-				goto done;
-			}
-		}
-	}
-
-	werr = smbconf_set_includes(conf_ctx, service->name, num_includes,
-				    (const char **)includes);
-
-done:
-	TALLOC_FREE(mem_ctx);
-	return werr;
-}
-
-
-/**********************************************************************
- *
- * the main conf functions
- *
- **********************************************************************/
-
-static int net_conf_list(struct smbconf_ctx *conf_ctx,
-			 int argc, const char **argv)
-{
-	WERROR werr = WERR_OK;
-	int ret = -1;
-	TALLOC_CTX *mem_ctx;
-	uint32_t num_shares;
-	uint32_t share_count, param_count;
-	struct smbconf_service **shares = NULL;
-
-	mem_ctx = talloc_stackframe();
-
-	if (argc != 0) {
-		net_conf_list_usage(argc, argv);
-		goto done;
-	}
-
-	werr = smbconf_get_config(conf_ctx, mem_ctx, &num_shares, &shares);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "Error getting config: %s\n",
-			  dos_errstr(werr));
-		goto done;
-	}
-
-	for (share_count = 0; share_count < num_shares; share_count++) {
-		const char *indent = "";
-		if (shares[share_count]->name != NULL) {
-			d_printf("[%s]\n", shares[share_count]->name);
-			indent = "\t";
-		}
-		for (param_count = 0;
-		     param_count < shares[share_count]->num_params;
-		     param_count++)
-		{
-			d_printf("%s%s = %s\n",
-				 indent,
-				 shares[share_count]->param_names[param_count],
-				 shares[share_count]->param_values[param_count]);
-		}
-		d_printf("\n");
-	}
-
-	ret = 0;
-
-done:
-	TALLOC_FREE(mem_ctx);
-	return ret;
-}
-
-static int net_conf_import(struct smbconf_ctx *conf_ctx,
-			   int argc, const char **argv)
-{
-	int ret = -1;
-	const char *filename = NULL;
-	const char *servicename = NULL;
-	char *conf_source = NULL;
-	TALLOC_CTX *mem_ctx;
-	struct smbconf_ctx *txt_ctx;
-	WERROR werr;
-
-	mem_ctx = talloc_stackframe();
-
-	switch (argc) {
-		case 0:
-		default:
-			net_conf_import_usage(argc, argv);
-			goto done;
-		case 2:
-			servicename = talloc_strdup_lower(mem_ctx, argv[1]);
-			if (servicename == NULL) {
-				d_printf("error: out of memory!\n");
-				goto done;
-			}
-		case 1:
-			filename = argv[0];
-			break;
-	}
-
-	DEBUG(3,("net_conf_import: reading configuration from file %s.\n",
-		filename));
-
-	conf_source = talloc_asprintf(mem_ctx, "file:%s", filename);
-	if (conf_source == NULL) {
-		d_printf("error: out of memory!\n");
-		goto done;
-	}
-
-	werr = smbconf_init(mem_ctx, &txt_ctx, conf_source);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_printf("error loading file '%s': %s\n", filename,
-			 dos_errstr(werr));
-		goto done;
-	}
-
-	if (opt_testmode) {
-		d_printf("\nTEST MODE - "
-			 "would import the following configuration:\n\n");
-	}
-
-	if (servicename != NULL) {
-		struct smbconf_service *service = NULL;
-
-		werr = smbconf_get_share(txt_ctx, mem_ctx,
-					 servicename,
-					 &service);
-		if (!W_ERROR_IS_OK(werr)) {
-			goto done;
-		}
-		werr = import_process_service(conf_ctx, service);
-		if (!W_ERROR_IS_OK(werr)) {
-			goto done;
-		}
-	} else {
-		struct smbconf_service **services = NULL;
-		uint32_t num_shares, sidx;
-
-		werr = smbconf_get_config(txt_ctx, mem_ctx,
-					  &num_shares,
-					  &services);
-		if (!W_ERROR_IS_OK(werr)) {
-			goto done;
-		}
-		if (!opt_testmode) {
-			werr = smbconf_drop(conf_ctx);
-			if (!W_ERROR_IS_OK(werr)) {
-				goto done;
-			}
-		}
-		for (sidx = 0; sidx < num_shares; sidx++) {
-			werr = import_process_service(conf_ctx, services[sidx]);
-			if (!W_ERROR_IS_OK(werr)) {
-				goto done;
-			}
-		}
-	}
-
-	ret = 0;
-
-done:
-	TALLOC_FREE(mem_ctx);
-	return ret;
-}
-
-static int net_conf_listshares(struct smbconf_ctx *conf_ctx,
-			       int argc, const char **argv)
-{
-	WERROR werr = WERR_OK;
-	int ret = -1;
-	uint32_t count, num_shares = 0;
-	char **share_names = NULL;
-	TALLOC_CTX *mem_ctx;
-
-	mem_ctx = talloc_stackframe();
-
-	if (argc != 0) {
-		net_conf_listshares_usage(argc, argv);
-		goto done;
-	}
-
-	werr = smbconf_get_share_names(conf_ctx, mem_ctx, &num_shares,
-				       &share_names);
-	if (!W_ERROR_IS_OK(werr)) {
-		goto done;
-	}
-
-	for (count = 0; count < num_shares; count++)
-	{
-		d_printf("%s\n", share_names[count]);
-	}
-
-	ret = 0;
-
-done:
-	TALLOC_FREE(mem_ctx);
-	return ret;
-}
-
-static int net_conf_drop(struct smbconf_ctx *conf_ctx,
-			 int argc, const char **argv)
-{
-	int ret = -1;
-	WERROR werr;
-
-	if (argc != 0) {
-		net_conf_drop_usage(argc, argv);
-		goto done;
-	}
-
-	werr = smbconf_drop(conf_ctx);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "Error deleting configuration: %s\n",
-			  dos_errstr(werr));
-		goto done;
-	}
-
-	ret = 0;
-
-done:
-	return ret;
-}
-
-static int net_conf_showshare(struct smbconf_ctx *conf_ctx,
-			      int argc, const char **argv)
-{
-	int ret = -1;
-	WERROR werr = WERR_OK;
-	const char *sharename = NULL;
-	TALLOC_CTX *mem_ctx;
-	uint32_t count;
-	struct smbconf_service *service = NULL;
-
-	mem_ctx = talloc_stackframe();
-
-	if (argc != 1) {
-		net_conf_showshare_usage(argc, argv);
-		goto done;
-	}
-
-	sharename = talloc_strdup_lower(mem_ctx, argv[0]);
-	if (sharename == NULL) {
-		d_printf("error: out of memory!\n");
-		goto done;
-	}
-
-	werr = smbconf_get_share(conf_ctx, mem_ctx, sharename, &service);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_printf("error getting share parameters: %s\n",
-			 dos_errstr(werr));
-		goto done;
-	}
-
-	d_printf("[%s]\n", sharename);
-
-	for (count = 0; count < service->num_params; count++) {
-		d_printf("\t%s = %s\n", service->param_names[count],
-			 service->param_values[count]);
-	}
-
-	ret = 0;
-
-done:
-	TALLOC_FREE(mem_ctx);
-	return ret;
-}
-
-/**
- * Add a share, with a couple of standard parameters, partly optional.
- *
- * This is a high level utility function of the net conf utility,
- * not a direct frontend to the smbconf API.
- */
-static int net_conf_addshare(struct smbconf_ctx *conf_ctx,
-			     int argc, const char **argv)
-{
-	int ret = -1;
-	WERROR werr = WERR_OK;
-	char *sharename = NULL;
-	const char *path = NULL;
-	const char *comment = NULL;
-	const char *guest_ok = "no";
-	const char *writeable = "no";
-	SMB_STRUCT_STAT sbuf;
-	TALLOC_CTX *mem_ctx = talloc_stackframe();
-
-	switch (argc) {
-		case 0:
-		case 1:
-		default:
-			net_conf_addshare_usage(argc, argv);
-			goto done;
-		case 5:
-			comment = argv[4];
-		case 4:
-			if (!strnequal(argv[3], "guest_ok=", 9)) {
-				net_conf_addshare_usage(argc, argv);
-				goto done;
-			}
-			switch (argv[3][9]) {
-				case 'y':
-				case 'Y':
-					guest_ok = "yes";
-					break;
-				case 'n':
-				case 'N':
-					guest_ok = "no";
-					break;
-				default:
-					net_conf_addshare_usage(argc, argv);
-					goto done;
-			}
-		case 3:
-			if (!strnequal(argv[2], "writeable=", 10)) {
-				net_conf_addshare_usage(argc, argv);
-				goto done;
-			}
-			switch (argv[2][10]) {
-				case 'y':
-				case 'Y':
-					writeable = "yes";
-					break;
-				case 'n':
-				case 'N':
-					writeable = "no";
-					break;
-				default:
-					net_conf_addshare_usage(argc, argv);
-					goto done;
-			}
-		case 2:
-			path = argv[1];
-			sharename = talloc_strdup_lower(mem_ctx, argv[0]);
-			if (sharename == NULL) {
-				d_printf("error: out of memory!\n");
-				goto done;
-			}
-
-			break;
-	}
-
-	/*
-	 * validate arguments
-	 */
-
-	/* validate share name */
-
-	if (!validate_net_name(sharename, INVALID_SHARENAME_CHARS,
-			       strlen(sharename)))
-	{
-		d_fprintf(stderr, "ERROR: share name %s contains "
-                        "invalid characters (any of %s)\n",
-                        sharename, INVALID_SHARENAME_CHARS);
-		goto done;
-	}
-
-	if (getpwnam(sharename)) {
-		d_fprintf(stderr, "ERROR: share name %s is already a valid "
-			  "system user name.\n", sharename);
-		goto done;
-	}
-
-	if (strequal(sharename, GLOBAL_NAME)) {
-		d_fprintf(stderr,
-			  "ERROR: 'global' is not a valid share name.\n");
-		goto done;
-	}
-
-	if (smbconf_share_exists(conf_ctx, sharename)) {
-		d_fprintf(stderr, "ERROR: share %s already exists.\n",
-			  sharename);
-		goto done;
-	}
-
-	/* validate path */
-
-	if (path[0] != '/') {
-		d_fprintf(stderr,
-			  "Error: path '%s' is not an absolute path.\n",
-			  path);
-		goto done;
-	}
-
-	if (sys_stat(path, &sbuf) != 0) {
-		d_fprintf(stderr,
-			  "ERROR: cannot stat path '%s' to ensure "
-			  "this is a directory.\n"
-			  "Error was '%s'.\n",
-			  path, strerror(errno));
-		goto done;
-	}
-
-	if (!S_ISDIR(sbuf.st_mode)) {
-		d_fprintf(stderr,
-			  "ERROR: path '%s' is not a directory.\n",
-			  path);
-		goto done;
-	}
-
-	/*
-	 * create the share
-	 */
-
-	werr = smbconf_create_share(conf_ctx, sharename);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "Error creating share %s: %s\n",
-			  sharename, dos_errstr(werr));
-		goto done;
-	}
-
-	/*
-	 * fill the share with parameters
-	 */
-
-	werr = smbconf_set_parameter(conf_ctx, sharename, "path", path);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "Error setting parameter %s: %s\n",
-			  "path", dos_errstr(werr));
-		goto done;
-	}
-
-	if (comment != NULL) {
-		werr = smbconf_set_parameter(conf_ctx, sharename, "comment",
-					     comment);
-		if (!W_ERROR_IS_OK(werr)) {
-			d_fprintf(stderr, "Error setting parameter %s: %s\n",
-				  "comment", dos_errstr(werr));
-			goto done;
-		}
-	}
-
-	werr = smbconf_set_parameter(conf_ctx, sharename, "guest ok", guest_ok);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "Error setting parameter %s: %s\n",
-			  "'guest ok'", dos_errstr(werr));
-		goto done;
-	}
-
-	werr = smbconf_set_parameter(conf_ctx, sharename, "writeable",
-				     writeable);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "Error setting parameter %s: %s\n",
-			  "writeable", dos_errstr(werr));
-		goto done;
-	}
-
-	ret = 0;
-
-done:
-	TALLOC_FREE(mem_ctx);
-	return ret;
-}
-
-static int net_conf_delshare(struct smbconf_ctx *conf_ctx,
-			     int argc, const char **argv)
-{
-	int ret = -1;
-	const char *sharename = NULL;
-	WERROR werr = WERR_OK;
-	TALLOC_CTX *mem_ctx = talloc_stackframe();
-
-	if (argc != 1) {
-		net_conf_delshare_usage(argc, argv);
-		goto done;
-	}
-	sharename = talloc_strdup_lower(mem_ctx, argv[0]);
-	if (sharename == NULL) {
-		d_printf("error: out of memory!\n");
-		goto done;
-	}
-
-	werr = smbconf_delete_share(conf_ctx, sharename);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "Error deleting share %s: %s\n",
-			  sharename, dos_errstr(werr));
-		goto done;
-	}
-
-	ret = 0;
-done:
-	TALLOC_FREE(mem_ctx);
-	return ret;
-}
-
-static int net_conf_setparm(struct smbconf_ctx *conf_ctx,
-			    int argc, const char **argv)
-{
-	int ret = -1;
-	WERROR werr = WERR_OK;
-	char *service = NULL;
-	char *param = NULL;
-	const char *value_str = NULL;
-	TALLOC_CTX *mem_ctx = talloc_stackframe();
-
-	if (argc != 3) {
-		net_conf_setparm_usage(argc, argv);
-		goto done;
-	}
-	service = talloc_strdup_lower(mem_ctx, argv[0]);
-	if (service == NULL) {
-		d_printf("error: out of memory!\n");
-		goto done;
-	}
-	param = talloc_strdup_lower(mem_ctx, argv[1]);
-	if (param == NULL) {
-		d_printf("error: out of memory!\n");
-		goto done;
-	}
-	value_str = argv[2];
-
-	if (!smbconf_share_exists(conf_ctx, service)) {
-		werr = smbconf_create_share(conf_ctx, service);
-		if (!W_ERROR_IS_OK(werr)) {
-			d_fprintf(stderr, "Error creating share '%s': %s\n",
-				  service, dos_errstr(werr));
-			goto done;
-		}
-	}
-
-	werr = smbconf_set_parameter(conf_ctx, service, param, value_str);
-
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "Error setting value '%s': %s\n",
-			  param, dos_errstr(werr));
-		goto done;
-	}
-
-	ret = 0;
-
-done:
-	TALLOC_FREE(mem_ctx);
-	return ret;
-}
-
-static int net_conf_getparm(struct smbconf_ctx *conf_ctx,
-			    int argc, const char **argv)
-{
-	int ret = -1;
-	WERROR werr = WERR_OK;
-	char *service = NULL;
-	char *param = NULL;
-	char *valstr = NULL;
-	TALLOC_CTX *mem_ctx;
-
-	mem_ctx = talloc_stackframe();
-
-	if (argc != 2) {
-		net_conf_getparm_usage(argc, argv);
-		goto done;
-	}
-	service = talloc_strdup_lower(mem_ctx, argv[0]);
-	if (service == NULL) {
-		d_printf("error: out of memory!\n");
-		goto done;
-	}
-	param = talloc_strdup_lower(mem_ctx, argv[1]);
-	if (param == NULL) {
-		d_printf("error: out of memory!\n");
-		goto done;
-	}
-
-	werr = smbconf_get_parameter(conf_ctx, mem_ctx, service, param, &valstr);
-
-	if (W_ERROR_EQUAL(werr, WERR_NO_SUCH_SERVICE)) {
-		d_fprintf(stderr,
-			  "Error: given service '%s' does not exist.\n",
-			  service);
-		goto done;
-	} else if (W_ERROR_EQUAL(werr, WERR_INVALID_PARAM)) {
-		d_fprintf(stderr,
-			  "Error: given parameter '%s' is not set.\n",
-			  param);
-		goto done;
-	} else if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "Error getting value '%s': %s.\n",
-			  param, dos_errstr(werr));
-		goto done;
-	}
-
-	d_printf("%s\n", valstr);
-
-	ret = 0;
-done:
-	TALLOC_FREE(mem_ctx);
-	return ret;
-}
-
-static int net_conf_delparm(struct smbconf_ctx *conf_ctx,
-			    int argc, const char **argv)
-{
-	int ret = -1;
-	WERROR werr = WERR_OK;
-	char *service = NULL;
-	char *param = NULL;
-	TALLOC_CTX *mem_ctx = talloc_stackframe();
-
-	if (argc != 2) {
-		net_conf_delparm_usage(argc, argv);
-		goto done;
-	}
-	service = talloc_strdup_lower(mem_ctx, argv[0]);
-	if (service == NULL) {
-		d_printf("error: out of memory!\n");
-		goto done;
-	}
-	param = talloc_strdup_lower(mem_ctx, argv[1]);
-	if (param == NULL) {
-		d_printf("error: out of memory!\n");
-		goto done;
-	}
-
-	werr = smbconf_delete_parameter(conf_ctx, service, param);
-
-	if (W_ERROR_EQUAL(werr, WERR_NO_SUCH_SERVICE)) {
-		d_fprintf(stderr,
-			  "Error: given service '%s' does not exist.\n",
-			  service);
-		goto done;
-	} else if (W_ERROR_EQUAL(werr, WERR_INVALID_PARAM)) {
-		d_fprintf(stderr,
-			  "Error: given parameter '%s' is not set.\n",
-			  param);
-		goto done;
-	} else if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "Error deleting value '%s': %s.\n",
-			  param, dos_errstr(werr));
-		goto done;
-	}
-
-	ret = 0;
-
-done:
-	TALLOC_FREE(mem_ctx);
-	return ret;
-}
-
-static int net_conf_getincludes(struct smbconf_ctx *conf_ctx,
-				int argc, const char **argv)
-{
-	WERROR werr;
-	uint32_t num_includes;
-	uint32_t count;
-	char *service;
-	char **includes = NULL;
-	int ret = -1;
-	TALLOC_CTX *mem_ctx = talloc_stackframe();
-
-	if (argc != 1) {
-		net_conf_getincludes_usage(argc, argv);
-		goto done;
-	}
-
-	service = talloc_strdup_lower(mem_ctx, argv[0]);
-	if (service == NULL) {
-		d_printf("error: out of memory!\n");
-		goto done;
-	}
-
-	werr = smbconf_get_includes(conf_ctx, mem_ctx, service,
-				    &num_includes, &includes);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_printf("error getting includes: %s\n", dos_errstr(werr));
-		goto done;
-	}
-
-	for (count = 0; count < num_includes; count++) {
-		d_printf("include = %s\n", includes[count]);
-	}
-
-	ret = 0;
-
-done:
-	TALLOC_FREE(mem_ctx);
-	return ret;
-}
-
-static int net_conf_setincludes(struct smbconf_ctx *conf_ctx,
-				int argc, const char **argv)
-{
-	WERROR werr;
-	char *service;
-	uint32_t num_includes;
-	const char **includes;
-	int ret = -1;
-	TALLOC_CTX *mem_ctx = talloc_stackframe();
-
-	if (argc < 1) {
-		net_conf_setincludes_usage(argc, argv);
-		goto done;
-	}
-
-	service = talloc_strdup_lower(mem_ctx, argv[0]);
-	if (service == NULL) {
-		d_printf("error: out of memory!\n");
-		goto done;
-	}
-
-	num_includes = argc - 1;
-	if (num_includes == 0) {
-		includes = NULL;
-	} else {
-		includes = argv + 1;
-	}
-
-	werr = smbconf_set_includes(conf_ctx, service, num_includes, includes);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_printf("error setting includes: %s\n", dos_errstr(werr));
-		goto done;
-	}
-
-	ret = 0;
-
-done:
-	TALLOC_FREE(mem_ctx);
-	return ret;
-}
-
-static int net_conf_delincludes(struct smbconf_ctx *conf_ctx,
-				int argc, const char **argv)
-{
-	WERROR werr;
-	char *service;
-	int ret = -1;
-	TALLOC_CTX *mem_ctx = talloc_stackframe();
-
-	if (argc != 1) {
-		net_conf_delincludes_usage(argc, argv);
-		goto done;
-	}
-
-	service = talloc_strdup_lower(mem_ctx, argv[0]);
-	if (service == NULL) {
-		d_printf("error: out of memory!\n");
-		goto done;
-	}
-
-	werr = smbconf_delete_includes(conf_ctx, service);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_printf("error deleting includes: %s\n", dos_errstr(werr));
-		goto done;
-	}
-
-	ret = 0;
-
-done:
-	TALLOC_FREE(mem_ctx);
-	return ret;
-}
-
-
-/**********************************************************************
- *
- * Wrapper and net_conf_run_function mechanism.
- *
- **********************************************************************/
-
-/**
- * Wrapper function to call the main conf functions.
- * The wrapper calls handles opening and closing of the
- * configuration.
- */
-static int net_conf_wrap_function(int (*fn)(struct smbconf_ctx *,
-					    int, const char **),
-				  int argc, const char **argv)
-{
-	WERROR werr;
-	TALLOC_CTX *mem_ctx = talloc_stackframe();
-	struct smbconf_ctx *conf_ctx;
-	int ret = -1;
-
-	werr = smbconf_init(mem_ctx, &conf_ctx, "registry:");
-
-	if (!W_ERROR_IS_OK(werr)) {
-		return -1;
-	}
-
-	ret = fn(conf_ctx, argc, argv);
-
-	smbconf_shutdown(conf_ctx);
-
-	return ret;
-}
-
-/*
- * We need a functable struct of our own, because the
- * functions are called through a wrapper that handles
- * the opening and closing of the configuration, and so on.
- */
-struct conf_functable {
-	const char *funcname;
-	int (*fn)(struct smbconf_ctx *ctx, int argc, const char **argv);
-	const char *helptext;
-};
-
-/**
- * This imitates net_run_function2 but calls the main functions
- * through the wrapper net_conf_wrap_function().
- */
-static int net_conf_run_function(int argc, const char **argv,
-				 const char *whoami,
-				 struct conf_functable *table)
-{
-	int i;
-
-	if (argc != 0) {
-		for (i=0; table[i].funcname; i++) {
-			if (StrCaseCmp(argv[0], table[i].funcname) == 0)
-				return net_conf_wrap_function(table[i].fn,
-							      argc-1,
-							      argv+1);
-		}
-	}
-
-	for (i=0; table[i].funcname; i++) {
-		d_printf("%s %-15s %s\n", whoami, table[i].funcname,
-			 table[i].helptext);
-	}
-
-	return -1;
-}
-
-/*
- * Entry-point for all the CONF functions.
- */
-
-int net_conf(int argc, const char **argv)
-{
-	int ret = -1;
-	struct conf_functable func_table[] = {
-		{"list", net_conf_list,
-		 "Dump the complete configuration in smb.conf like format."},
-		{"import", net_conf_import,
-		 "Import configuration from file in smb.conf format."},
-		{"listshares", net_conf_listshares,
-		 "List the share names."},
-		{"drop", net_conf_drop,
-		 "Delete the complete configuration."},
-		{"showshare", net_conf_showshare,
-		 "Show the definition of a share."},
-		{"addshare", net_conf_addshare,
-		 "Create a new share."},
-		{"delshare", net_conf_delshare,
-		 "Delete a share."},
-		{"setparm", net_conf_setparm,
-		 "Store a parameter."},
-		{"getparm", net_conf_getparm,
-		 "Retrieve the value of a parameter."},
-		{"delparm", net_conf_delparm,
-		 "Delete a parameter."},
-		{"getincludes", net_conf_getincludes,
-		 "Show the includes of a share definition."},
-		{"setincludes", net_conf_setincludes,
-		 "Set includes for a share."},
-		{"delincludes", net_conf_delincludes,
-		 "Delete includes from a share definition."},
-		{NULL, NULL, NULL}
-	};
-
-	ret = net_conf_run_function(argc, argv, "net conf", func_table);
-
-	return ret;
-}
-

Modified: branches/samba/upstream/source/utils/net_dns.c
===================================================================
--- branches/samba/upstream/source/utils/net_dns.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_dns.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  
 */
 
 #include "includes.h"
@@ -26,21 +27,12 @@
 
 #if defined(WITH_DNS_UPDATES)
 
-/*
- * Silly prototype to get rid of a warning
- */
-
-DNS_ERROR DoDNSUpdate(char *pszServerName,
-		      const char *pszDomainName, const char *pszHostName,
-		      const struct sockaddr_storage *sslist,
-		      size_t num_addrs );
-
 /*********************************************************************
 *********************************************************************/
 
 DNS_ERROR DoDNSUpdate(char *pszServerName,
 		      const char *pszDomainName, const char *pszHostName,
-		      const struct sockaddr_storage *sslist, size_t num_addrs )
+		      const struct in_addr *iplist, size_t num_addrs )
 {
 	DNS_ERROR err;
 	struct dns_connection *conn;
@@ -48,7 +40,7 @@
 	OM_uint32 minor;
 	struct dns_update_request *req, *resp;
 
-	if ( (num_addrs <= 0) || !sslist ) {
+	if ( (num_addrs <= 0) || !iplist ) {
 		return ERROR_DNS_INVALID_PARAMETER;
 	}
 
@@ -66,7 +58,7 @@
 	 */
 
 	err = dns_create_probe(mem_ctx, pszDomainName, pszHostName,
-			       num_addrs, sslist, &req);
+			       num_addrs, iplist, &req);
 	if (!ERR_DNS_IS_OK(err)) goto error;
 
 	err = dns_update_transaction(mem_ctx, conn, req, &resp);
@@ -82,7 +74,7 @@
 	 */
 
 	err = dns_create_update_request(mem_ctx, pszDomainName, pszHostName,
-					sslist, num_addrs, &req);
+					iplist, num_addrs, &req);
 	if (!ERR_DNS_IS_OK(err)) goto error;
 
 	err = dns_update_transaction(mem_ctx, conn, req, &resp);
@@ -142,52 +134,32 @@
 /*********************************************************************
 *********************************************************************/
 
-int get_my_ip_address( struct sockaddr_storage **pp_ss )
-
+int get_my_ip_address( struct in_addr **ips )
 {
 	struct iface_struct nics[MAX_INTERFACES];
 	int i, n;
-	struct sockaddr_storage *list = NULL;
+	struct in_addr loopback_ip = *interpret_addr2("127.0.0.1");
+	struct in_addr *list;
 	int count = 0;
 
 	/* find the first non-loopback address from our list of interfaces */
 
 	n = get_interfaces(nics, MAX_INTERFACES);
-
-	if (n <= 0) {
+	
+	if ( (list = SMB_MALLOC_ARRAY( struct in_addr, n )) == NULL ) {
 		return -1;
 	}
 
-	if ( (list = SMB_MALLOC_ARRAY( struct sockaddr_storage, n )) == NULL ) {
-		return -1;
-	}
-
 	for ( i=0; i<n; i++ ) {
-		if (is_loopback_addr(&nics[i].ip)) {
-			continue;
+		if ( nics[i].ip.s_addr != loopback_ip.s_addr ) {
+			memcpy( &list[count++], &nics[i].ip, sizeof( struct in_addr ) );
 		}
-#if defined(HAVE_IPV6)
-		if ((nics[i].ip.ss_family == AF_INET6)) {
-			memcpy(&list[count++], &nics[i].ip,
-			       sizeof(struct sockaddr_storage));
-		} else
-#endif
-		if (nics[i].ip.ss_family == AF_INET) {
-			memcpy(&list[count++], &nics[i].ip,
-			       sizeof(struct sockaddr_storage));
-		}
 	}
-	*pp_ss = list;
+	*ips = list;
 
 	return count;
 }
 
-/*
- * Silly prototype to get rid of a warning
- */
-
-DNS_ERROR do_gethostbyname(const char *server, const char *host);
-
 DNS_ERROR do_gethostbyname(const char *server, const char *host)
 {
 	struct dns_connection *conn;

Deleted: branches/samba/upstream/source/utils/net_dom.c
===================================================================
--- branches/samba/upstream/source/utils/net_dom.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_dom.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,258 +0,0 @@
-/*
-   Samba Unix/Linux SMB client library
-   net dom commands for remote join/unjoin
-   Copyright (C) 2007 Günther Deschner
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-#include "utils/net.h"
-
-static int net_dom_usage(int argc, const char **argv)
-{
-	d_printf("usage: net dom join "
-		 "<domain=DOMAIN> <ou=OU> <account=ACCOUNT> <password=PASSWORD> <reboot>\n");
-	d_printf("usage: net dom unjoin "
-		 "<account=ACCOUNT> <password=PASSWORD> <reboot>\n");
-
-	return -1;
-}
-
-int net_help_dom(int argc, const char **argv)
-{
-	d_printf("net dom join"\
-		"\n  Join a remote machine\n");
-	d_printf("net dom unjoin"\
-		"\n  Unjoin a remote machine\n");
-
-	return -1;
-}
-
-static int net_dom_unjoin(int argc, const char **argv)
-{
-	struct libnetapi_ctx *ctx = NULL;
-	const char *server_name = NULL;
-	const char *account = NULL;
-	const char *password = NULL;
-	uint32_t unjoin_flags = WKSSVC_JOIN_FLAGS_ACCOUNT_DELETE |
-				WKSSVC_JOIN_FLAGS_JOIN_TYPE;
-	struct cli_state *cli = NULL;
-	bool reboot = false;
-	NTSTATUS ntstatus;
-	NET_API_STATUS status;
-	int ret = -1;
-	int i;
-
-	if (argc < 1) {
-		return net_dom_usage(argc, argv);
-	}
-
-	if (opt_host) {
-		server_name = opt_host;
-	}
-
-	for (i=0; i<argc; i++) {
-		if (strnequal(argv[i], "account", strlen("account"))) {
-			account = get_string_param(argv[i]);
-			if (!account) {
-				return -1;
-			}
-		}
-		if (strnequal(argv[i], "password", strlen("password"))) {
-			password = get_string_param(argv[i]);
-			if (!password) {
-				return -1;
-			}
-		}
-		if (strequal(argv[i], "reboot")) {
-			reboot = true;
-		}
-	}
-
-	if (reboot) {
-		ntstatus = net_make_ipc_connection_ex(opt_workgroup, server_name,
-						      NULL, 0, &cli);
-		if (!NT_STATUS_IS_OK(ntstatus)) {
-			return -1;
-		}
-	}
-
-	status = libnetapi_init(&ctx);
-	if (status != 0) {
-		return -1;
-	}
-
-	libnetapi_set_username(ctx, opt_user_name);
-	libnetapi_set_password(ctx, opt_password);
-
-	status = NetUnjoinDomain(server_name, account, password, unjoin_flags);
-	if (status != 0) {
-		printf("Failed to unjoin domain: %s\n",
-			libnetapi_get_error_string(ctx, status));
-		goto done;
-	}
-
-	if (reboot) {
-		opt_comment = "Shutting down due to a domain membership change";
-		opt_reboot = true;
-		opt_timeout = 30;
-
-		ret = run_rpc_command(cli, PI_INITSHUTDOWN, 0,
-				      rpc_init_shutdown_internals,
-				      argc, argv);
-		if (ret == 0) {
-			goto done;
-		}
-
-		ret = run_rpc_command(cli, PI_WINREG, 0,
-				      rpc_reg_shutdown_internals,
-				      argc, argv);
-		goto done;
-	}
-
-	ret = 0;
-
- done:
-	if (cli) {
-		cli_shutdown(cli);
-	}
-
-	return ret;
-}
-
-static int net_dom_join(int argc, const char **argv)
-{
-	struct libnetapi_ctx *ctx = NULL;
-	const char *server_name = NULL;
-	const char *domain_name = NULL;
-	const char *account_ou = NULL;
-	const char *Account = NULL;
-	const char *password = NULL;
-	uint32_t join_flags = WKSSVC_JOIN_FLAGS_ACCOUNT_CREATE |
-			      WKSSVC_JOIN_FLAGS_JOIN_TYPE;
-	struct cli_state *cli = NULL;
-	bool reboot = false;
-	NTSTATUS ntstatus;
-	NET_API_STATUS status;
-	int ret = -1;
-	int i;
-
-	if (argc < 1) {
-		return net_dom_usage(argc, argv);
-	}
-
-	if (opt_host) {
-		server_name = opt_host;
-	}
-
-	if (opt_force) {
-		join_flags |= WKSSVC_JOIN_FLAGS_DOMAIN_JOIN_IF_JOINED;
-	}
-
-	for (i=0; i<argc; i++) {
-		if (strnequal(argv[i], "ou", strlen("ou"))) {
-			account_ou = get_string_param(argv[i]);
-			if (!account_ou) {
-				return -1;
-			}
-		}
-		if (strnequal(argv[i], "domain", strlen("domain"))) {
-			domain_name = get_string_param(argv[i]);
-			if (!domain_name) {
-				return -1;
-			}
-		}
-		if (strnequal(argv[i], "account", strlen("account"))) {
-			Account = get_string_param(argv[i]);
-			if (!Account) {
-				return -1;
-			}
-		}
-		if (strnequal(argv[i], "password", strlen("password"))) {
-			password = get_string_param(argv[i]);
-			if (!password) {
-				return -1;
-			}
-		}
-		if (strequal(argv[i], "reboot")) {
-			reboot = true;
-		}
-	}
-
-	if (reboot) {
-		ntstatus = net_make_ipc_connection_ex(opt_workgroup, server_name,
-						      NULL, 0, &cli);
-		if (!NT_STATUS_IS_OK(ntstatus)) {
-			return -1;
-		}
-	}
-
-	/* check if domain is a domain or a workgroup */
-
-	status = libnetapi_init(&ctx);
-	if (status != 0) {
-		return -1;
-	}
-
-	libnetapi_set_username(ctx, opt_user_name);
-	libnetapi_set_password(ctx, opt_password);
-
-	status = NetJoinDomain(server_name, domain_name, account_ou,
-			       Account, password, join_flags);
-	if (status != 0) {
-		printf("Failed to join domain: %s\n",
-			libnetapi_get_error_string(ctx, status));
-		goto done;
-	}
-
-	if (reboot) {
-		opt_comment = "Shutting down due to a domain membership change";
-		opt_reboot = true;
-		opt_timeout = 30;
-
-		ret = run_rpc_command(cli, PI_INITSHUTDOWN, 0,
-				      rpc_init_shutdown_internals,
-				      argc, argv);
-		if (ret == 0) {
-			goto done;
-		}
-
-		ret = run_rpc_command(cli, PI_WINREG, 0,
-				      rpc_reg_shutdown_internals,
-				      argc, argv);
-		goto done;
-	}
-
-	ret = 0;
-
- done:
-	if (cli) {
-		cli_shutdown(cli);
-	}
-
-	return ret;
-}
-
-int net_dom(int argc, const char **argv)
-{
-	struct functable func[] = {
-		{"JOIN", net_dom_join},
-		{"UNJOIN", net_dom_unjoin},
-		{"HELP", net_help_dom},
-		{NULL, NULL}
-	};
-
-	return net_run_function(argc, argv, func, net_dom_usage);
-}

Copied: branches/samba/upstream/source/utils/net_domain.c (from rev 1928, branches/samba/upstream/source/utils/net_domain.c)
===================================================================
--- branches/samba/upstream/source/utils/net_domain.c	                        (rev 0)
+++ branches/samba/upstream/source/utils/net_domain.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -0,0 +1,351 @@
+/* 
+   Samba Unix/Linux SMB client library 
+   net ads commands
+   Copyright (C) 2001 Andrew Tridgell (tridge at samba.org)
+   Copyright (C) 2001 Remus Koos (remuskoos at yahoo.com)
+   Copyright (C) 2002 Jim McDonough (jmcd at us.ibm.com)
+   Copyright (C) 2006 Gerald (Jerry) Carter (jerry at samba.org)
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  
+*/
+
+#include "includes.h"
+#include "utils/net.h"
+
+/* Macro for checking RPC error codes to make things more readable */
+
+#define CHECK_RPC_ERR(rpc, msg) \
+        if (!NT_STATUS_IS_OK(result = rpc)) { \
+                DEBUG(0, (msg ": %s\n", nt_errstr(result))); \
+                goto done; \
+        }
+
+#define CHECK_RPC_ERR_DEBUG(rpc, debug_args) \
+        if (!NT_STATUS_IS_OK(result = rpc)) { \
+                DEBUG(0, debug_args); \
+                goto done; \
+        }
+
+/*******************************************************************
+ Leave an AD domain.  Windows XP disables the machine account.
+ We'll try the same.  The old code would do an LDAP delete.
+ That only worked using the machine creds because added the machine
+ with full control to the computer object's ACL.
+*******************************************************************/
+
+NTSTATUS netdom_leave_domain( TALLOC_CTX *mem_ctx, struct cli_state *cli, 
+                         DOM_SID *dom_sid )
+{	
+	struct rpc_pipe_client *pipe_hnd = NULL;
+	POLICY_HND sam_pol, domain_pol, user_pol;
+	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
+	char *acct_name;
+	uint32 flags = 0x3e8;
+	const char *const_acct_name;
+	uint32 user_rid;
+	uint32 num_rids, *name_types, *user_rids;
+	SAM_USERINFO_CTR ctr, *qctr = NULL;
+	SAM_USER_INFO_16 p16;
+
+	/* Open the domain */
+	
+	if ( (pipe_hnd = cli_rpc_pipe_open_noauth(cli, PI_SAMR, &status)) == NULL ) {
+		DEBUG(0, ("Error connecting to SAM pipe. Error was %s\n",
+			nt_errstr(status) ));
+		return status;
+	}
+
+	status = rpccli_samr_connect(pipe_hnd, mem_ctx, 
+			SEC_RIGHTS_MAXIMUM_ALLOWED, &sam_pol);
+	if ( !NT_STATUS_IS_OK(status) )
+		return status;
+
+	
+	status = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &sam_pol,
+			SEC_RIGHTS_MAXIMUM_ALLOWED, dom_sid, &domain_pol);
+	if ( !NT_STATUS_IS_OK(status) )
+		return status;
+
+	/* Create domain user */
+	
+	acct_name = talloc_asprintf(mem_ctx, "%s$", global_myname()); 
+	strlower_m(acct_name);
+	const_acct_name = acct_name;
+
+	status = rpccli_samr_lookup_names(pipe_hnd, mem_ctx,
+			&domain_pol, flags, 1, &const_acct_name, 
+			&num_rids, &user_rids, &name_types);
+	if ( !NT_STATUS_IS_OK(status) )
+		return status;
+
+	if ( name_types[0] != SID_NAME_USER) {
+		DEBUG(0, ("%s is not a user account (type=%d)\n", acct_name, name_types[0]));
+		return NT_STATUS_INVALID_WORKSTATION;
+	}
+
+	user_rid = user_rids[0];
+		
+	/* Open handle on user */
+
+	status = rpccli_samr_open_user(pipe_hnd, mem_ctx, &domain_pol,
+			SEC_RIGHTS_MAXIMUM_ALLOWED, user_rid, &user_pol);
+	if ( !NT_STATUS_IS_OK(status) ) {
+		goto done;
+	}
+	
+	/* Get user info */
+
+	status = rpccli_samr_query_userinfo(pipe_hnd, mem_ctx, &user_pol, 16, &qctr);
+	if ( !NT_STATUS_IS_OK(status) ) {
+		rpccli_samr_close(pipe_hnd, mem_ctx, &user_pol);
+		goto done;
+	}
+
+	/* now disable and setuser info */
+	
+	ZERO_STRUCT(ctr);
+	ctr.switch_value = 16;
+	ctr.info.id16 = &p16;
+
+	p16.acb_info = qctr->info.id16->acb_info | ACB_DISABLED;
+
+	status = rpccli_samr_set_userinfo2(pipe_hnd, mem_ctx, &user_pol, 16, 
+					&cli->user_session_key, &ctr);
+
+	rpccli_samr_close(pipe_hnd, mem_ctx, &user_pol);
+
+done:
+	rpccli_samr_close(pipe_hnd, mem_ctx, &domain_pol);
+	rpccli_samr_close(pipe_hnd, mem_ctx, &sam_pol);
+	
+	cli_rpc_pipe_close(pipe_hnd); /* Done with this pipe */
+	
+	return status;
+}
+
+/*******************************************************************
+ Store the machine password and domain SID
+ ********************************************************************/
+
+int netdom_store_machine_account( const char *domain, DOM_SID *sid, const char *pw )
+{
+	if (!secrets_store_domain_sid(domain, sid)) {
+		DEBUG(1,("Failed to save domain sid\n"));
+		return -1;
+	}
+
+	if (!secrets_store_machine_password(pw, domain, SEC_CHAN_WKSTA)) {
+		DEBUG(1,("Failed to save machine password\n"));
+		return -1;
+	}
+
+	return 0;
+}
+
+/*******************************************************************
+ ********************************************************************/
+
+NTSTATUS netdom_get_domain_sid( TALLOC_CTX *mem_ctx, struct cli_state *cli, 
+				char **domain, DOM_SID **sid )
+{
+	struct rpc_pipe_client *pipe_hnd = NULL;
+	POLICY_HND lsa_pol;
+	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
+
+	if ( (pipe_hnd = cli_rpc_pipe_open_noauth(cli, PI_LSARPC, &status)) == NULL ) {
+		DEBUG(0, ("Error connecting to LSA pipe. Error was %s\n",
+			nt_errstr(status) ));
+		return status;
+	}
+
+	status = rpccli_lsa_open_policy(pipe_hnd, mem_ctx, True,
+			SEC_RIGHTS_MAXIMUM_ALLOWED, &lsa_pol);
+	if ( !NT_STATUS_IS_OK(status) )
+		return status;
+
+	status = rpccli_lsa_query_info_policy(pipe_hnd, mem_ctx, 
+			&lsa_pol, 5, domain, sid);
+	if ( !NT_STATUS_IS_OK(status) )
+		return status;
+
+	rpccli_lsa_close(pipe_hnd, mem_ctx, &lsa_pol);
+	cli_rpc_pipe_close(pipe_hnd); /* Done with this pipe */
+
+	/* Bail out if domain didn't get set. */
+	if (!domain) {
+		DEBUG(0, ("Could not get domain name.\n"));
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+	
+	return NT_STATUS_OK;
+}
+
+/*******************************************************************
+ Do the domain join
+ ********************************************************************/
+ 
+NTSTATUS netdom_join_domain( TALLOC_CTX *mem_ctx, struct cli_state *cli, 
+                           DOM_SID *dom_sid, const char *clear_pw,
+                           enum netdom_domain_t dom_type )
+{	
+	struct rpc_pipe_client *pipe_hnd = NULL;
+	POLICY_HND sam_pol, domain_pol, user_pol;
+	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
+	char *acct_name;
+	const char *const_acct_name;
+	uint32 user_rid;
+	uint32 num_rids, *name_types, *user_rids;
+	uint32 flags = 0x3e8;
+	uint32 acb_info = ACB_WSTRUST;
+	uint32 acct_flags=0;
+	uint32 fields_present;
+	uchar pwbuf[532];
+	SAM_USERINFO_CTR ctr;
+	SAM_USER_INFO_25 p25;
+	const int infolevel = 25;
+	struct MD5Context md5ctx;
+	uchar md5buffer[16];
+	DATA_BLOB digested_session_key;
+	uchar md4_trust_password[16];
+
+	/* Open the domain */
+	
+	if ( (pipe_hnd = cli_rpc_pipe_open_noauth(cli, PI_SAMR, &status)) == NULL ) {
+		DEBUG(0, ("Error connecting to SAM pipe. Error was %s\n",
+			nt_errstr(status) ));
+		return status;
+	}
+
+	status = rpccli_samr_connect(pipe_hnd, mem_ctx, 
+			SEC_RIGHTS_MAXIMUM_ALLOWED, &sam_pol);
+	if ( !NT_STATUS_IS_OK(status) )
+		return status;
+
+	
+	status = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &sam_pol,
+			SEC_RIGHTS_MAXIMUM_ALLOWED, dom_sid, &domain_pol);
+	if ( !NT_STATUS_IS_OK(status) )
+		return status;
+
+	/* Create domain user */
+	
+	acct_name = talloc_asprintf(mem_ctx, "%s$", global_myname()); 
+	strlower_m(acct_name);
+	const_acct_name = acct_name;
+
+	/* Don't try to set any acb_info flags other than ACB_WSTRUST */
+
+        acct_flags = SAMR_GENERIC_READ | SAMR_GENERIC_WRITE |
+                SAMR_GENERIC_EXECUTE | SAMR_STANDARD_WRITEDAC |
+                SAMR_STANDARD_DELETE | SAMR_USER_SETPASS | SAMR_USER_GETATTR |
+                SAMR_USER_SETATTR;
+	DEBUG(10, ("Creating account with flags: %d\n",acct_flags));
+	status = rpccli_samr_create_dom_user(pipe_hnd, mem_ctx, &domain_pol,
+			acct_name, acb_info, acct_flags, &user_pol, &user_rid);
+
+	if ( !NT_STATUS_IS_OK(status) 
+		&& !NT_STATUS_EQUAL(status, NT_STATUS_USER_EXISTS)) 
+	{
+		d_fprintf(stderr, "Creation of workstation account failed\n");
+
+		/* If NT_STATUS_ACCESS_DENIED then we have a valid
+		   username/password combo but the user does not have
+		   administrator access. */
+
+		if (NT_STATUS_V(status) == NT_STATUS_V(NT_STATUS_ACCESS_DENIED))
+			d_fprintf(stderr, "User specified does not have administrator privileges\n");
+
+		return status;
+	}
+
+	/* We *must* do this.... don't ask... */
+
+	if (NT_STATUS_IS_OK(status)) {
+		rpccli_samr_close(pipe_hnd, mem_ctx, &user_pol);
+	}
+
+	status = rpccli_samr_lookup_names(pipe_hnd, mem_ctx,
+			&domain_pol, flags, 1, &const_acct_name, 
+			&num_rids, &user_rids, &name_types);
+	if ( !NT_STATUS_IS_OK(status) )
+		return status;
+
+	if ( name_types[0] != SID_NAME_USER) {
+		DEBUG(0, ("%s is not a user account (type=%d)\n", acct_name, name_types[0]));
+		return NT_STATUS_INVALID_WORKSTATION;
+	}
+
+	user_rid = user_rids[0];
+		
+	/* Open handle on user */
+
+	status = rpccli_samr_open_user(pipe_hnd, mem_ctx, &domain_pol,
+			SEC_RIGHTS_MAXIMUM_ALLOWED, user_rid, &user_pol);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
+	}
+	
+	/* Create a random machine account password and generate the hash */
+
+	E_md4hash(clear_pw, md4_trust_password);
+	encode_pw_buffer(pwbuf, clear_pw, STR_UNICODE);
+	
+	generate_random_buffer((uint8*)md5buffer, sizeof(md5buffer));
+	digested_session_key = data_blob_talloc(mem_ctx, 0, 16);
+	
+	MD5Init(&md5ctx);
+	MD5Update(&md5ctx, md5buffer, sizeof(md5buffer));
+	MD5Update(&md5ctx, cli->user_session_key.data, cli->user_session_key.length);
+	MD5Final(digested_session_key.data, &md5ctx);
+	
+	SamOEMhashBlob(pwbuf, sizeof(pwbuf), &digested_session_key);
+	memcpy(&pwbuf[516], md5buffer, sizeof(md5buffer));
+
+	/* Fill in the additional account flags now */
+
+	acb_info |= ACB_PWNOEXP;
+	if ( dom_type == ND_TYPE_AD ) {
+#if !defined(ENCTYPE_ARCFOUR_HMAC)
+		acb_info |= ACB_USE_DES_KEY_ONLY;
+#endif
+		;;
+	}
+
+	/* Set password and account flags on machine account */
+
+	ZERO_STRUCT(ctr);
+	ZERO_STRUCT(p25);
+
+	fields_present = ACCT_NT_PWD_SET | ACCT_LM_PWD_SET | ACCT_FLAGS;
+	init_sam_user_info25P(&p25, fields_present, acb_info, (char *)pwbuf);
+
+	ctr.switch_value = infolevel;
+	ctr.info.id25    = &p25;
+
+	status = rpccli_samr_set_userinfo2(pipe_hnd, mem_ctx, &user_pol,
+					   infolevel, &cli->user_session_key, &ctr);
+
+	if ( !NT_STATUS_IS_OK(status) ) {
+		d_fprintf( stderr, "Failed to set password for machine account (%s)\n", 
+			nt_errstr(status));
+		return status;
+	}
+
+	rpccli_samr_close(pipe_hnd, mem_ctx, &user_pol);
+	cli_rpc_pipe_close(pipe_hnd); /* Done with this pipe */
+	
+	return status;
+}
+

Modified: branches/samba/upstream/source/utils/net_groupmap.c
===================================================================
--- branches/samba/upstream/source/utils/net_groupmap.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_groupmap.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -17,18 +17,50 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 
 #include "includes.h"
 #include "utils/net.h"
 
+
 /*********************************************************
+ utility function to parse an integer parameter from 
+ "parameter = value"
+**********************************************************/
+static uint32 get_int_param( const char* param )
+{
+	char *p;
+	
+	p = strchr( param, '=' );
+	if ( !p )
+		return 0;
+		
+	return atoi(p+1);
+}
+
+/*********************************************************
+ utility function to parse an integer parameter from 
+ "parameter = value"
+**********************************************************/
+static char* get_string_param( const char* param )
+{
+	char *p;
+	
+	p = strchr( param, '=' );
+	if ( !p )
+		return NULL;
+		
+	return (p+1);
+}
+
+/*********************************************************
  Figure out if the input was an NT group or a SID string.
  Return the SID.
 **********************************************************/
-static bool get_sid_from_input(DOM_SID *sid, char *input)
+static BOOL get_sid_from_input(DOM_SID *sid, char *input)
 {
 	GROUP_MAP map;
 
@@ -53,14 +85,14 @@
  Dump a GROUP_MAP entry to stdout (long or short listing)
 **********************************************************/
 
-static void print_map_entry ( GROUP_MAP map, bool long_list )
+static void print_map_entry ( GROUP_MAP map, BOOL long_list )
 {
 	if (!long_list)
 		d_printf("%s (%s) -> %s\n", map.nt_name,
-			 sid_string_tos(&map.sid), gidtoname(map.gid));
+			 sid_string_static(&map.sid), gidtoname(map.gid));
 	else {
 		d_printf("%s\n", map.nt_name);
-		d_printf("\tSID       : %s\n", sid_string_tos(&map.sid));
+		d_printf("\tSID       : %s\n", sid_string_static(&map.sid));
 		d_printf("\tUnix gid  : %d\n", map.gid);
 		d_printf("\tUnix group: %s\n", gidtoname(map.gid));
 		d_printf("\tGroup type: %s\n",
@@ -75,7 +107,7 @@
 static int net_groupmap_list(int argc, const char **argv)
 {
 	size_t entries;
-	bool long_list = False;
+	BOOL long_list = False;
 	size_t i;
 	fstring ntgroup = "";
 	fstring sid_string = "";
@@ -249,7 +281,7 @@
 	{
 		if (pdb_getgrgid(&map, gid)) {
 			d_printf("Unix group %s already mapped to SID %s\n",
-				 unixgrp, sid_string_tos(&map.sid));
+				 unixgrp, sid_string_static(&map.sid));
 			return -1;
 		}
 	}
@@ -270,7 +302,7 @@
 	if ( !string_sid[0] ) {
 		sid_copy(&sid, get_global_sam_sid());
 		sid_append_rid(&sid, rid);
-		sid_to_fstring(string_sid, &sid);
+		sid_to_string(string_sid, &sid);
 	}
 
 	if (!ntcomment[0]) {
@@ -495,7 +527,7 @@
 	const char *ntgroup = NULL;
 	struct group *grp = NULL;
 	GROUP_MAP map;
-	bool have_map = False;
+	BOOL have_map = False;
 
 	if ((argc < 1) || (argc > 2)) {
 		d_printf("Usage: net groupmap set \"NT Group\" "
@@ -619,7 +651,7 @@
 		if (!sid_check_is_in_our_domain(&map[i].sid)) {
 			printf("Deleting mapping for NT Group %s, sid %s\n",
 			       map[i].nt_name,
-			       sid_string_tos(&map[i].sid));
+			       sid_string_static(&map[i].sid));
 			pdb_delete_group_mapping_entry(map[i].sid);
 		}
 	}
@@ -690,15 +722,15 @@
 	}
 
 	for (i = 0; i < num; i++) {
-		printf("%s\n", sid_string_tos(&(members[i])));
+		printf("%s\n", sid_string_static(&(members[i])));
 	}
 
-	TALLOC_FREE(members);
+	SAFE_FREE(members);
 
 	return 0;
 }
 
-static bool print_alias_memberships(TALLOC_CTX *mem_ctx,
+static BOOL print_alias_memberships(TALLOC_CTX *mem_ctx,
 				    const DOM_SID *domain_sid,
 				    const DOM_SID *member)
 {
@@ -712,7 +744,7 @@
 				     mem_ctx, domain_sid, member, 1,
 				     &alias_rids, &num_alias_rids))) {
 		d_fprintf(stderr, "Could not list memberships for sid %s\n",
-			 sid_string_tos(member));
+			 sid_string_static(member));
 		return False;
 	}
 
@@ -720,7 +752,7 @@
 		DOM_SID alias;
 		sid_copy(&alias, domain_sid);
 		sid_append_rid(&alias, alias_rids[i]);
-		printf("%s\n", sid_string_tos(&alias));
+		printf("%s\n", sid_string_static(&alias));
 	}
 
 	return True;

Modified: branches/samba/upstream/source/utils/net_help.c
===================================================================
--- branches/samba/upstream/source/utils/net_help.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_help.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  
 */
 
 #include "includes.h"
@@ -48,7 +49,6 @@
 	d_printf("\t-l or --long\t\t\tDisplay full information\n");
 	d_printf("\t-V or --version\t\t\tPrint samba version information\n");
 	d_printf("\t-P or --machine-pass\t\tAuthenticate as machine account\n");
-	d_printf("\t-e or --encrypt\t\tEncrypt SMB transport (UNIX extended servers only)\n");
 	return -1;
 }
 
@@ -234,9 +234,8 @@
 		 "  net changesecretpw\tto change the machine password in the local secrets database only\n"\
 		 "                    \tthis requires the -f flag as a safety barrier\n"\
 		 "  net status\t\tShow server status\n"\
-		 "  net usersidlist\tto get a list of all users with their SIDs\n"
-		 "  net usershare\t\tto add, delete and list locally user-modifiable shares\n"
-		 "  net conf\t\tto view and edit samba's registry based configuration\n"
+		"  net usersidlist\tto get a list of all users with their SIDs\n"
+		"  net usershare\t\tto add, delete and list locally user-modifiable shares\n"
 		 "\n"\
 		 "  net ads <command>\tto run ADS commands\n"\
 		 "  net rap <command>\tto run RAP (pre-RPC) commands\n"\
@@ -267,7 +266,6 @@
 		{"GROUP", net_help_group},
 		{"GROUPMAP", net_help_groupmap},
 		{"JOIN", net_help_join},
-		{"DOM", net_help_dom},
 		{"VALIDATE", net_rap_validate_usage},
 		{"GROUPMEMBER", net_rap_groupmember_usage},
 		{"ADMIN", net_rap_admin_usage},

Modified: branches/samba/upstream/source/utils/net_idmap.c
===================================================================
--- branches/samba/upstream/source/utils/net_idmap.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_idmap.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #include "includes.h"
 #include "utils/net.h"
@@ -34,17 +35,17 @@
 				    TDB_DATA data,
 				    void *unused)
 {
-	if (strcmp((char *)key.dptr, "USER HWM") == 0) {
+	if (strcmp(key.dptr, "USER HWM") == 0) {
 		printf("USER HWM %d\n", IVAL(data.dptr,0));
 		return 0;
 	}
 
-	if (strcmp((char *)key.dptr, "GROUP HWM") == 0) {
+	if (strcmp(key.dptr, "GROUP HWM") == 0) {
 		printf("GROUP HWM %d\n", IVAL(data.dptr,0));
 		return 0;
 	}
 
-	if (strncmp((char *)key.dptr, "S-", 2) != 0)
+	if (strncmp(key.dptr, "S-", 2) != 0)
 		return 0;
 
 	printf("%s %s\n", data.dptr, key.dptr);
@@ -101,10 +102,9 @@
 	while (!feof(input)) {
 		char line[128], sid_string[128];
 		int len;
-		struct wbcDomainSid sid;
-		enum id_type type = ID_TYPE_NOT_SPECIFIED;
+		DOM_SID sid;
+		struct id_map map;
 		unsigned long idval;
-		wbcErr wbc_status;
 
 		if (fgets(line, 127, input) == NULL)
 			break;
@@ -115,23 +115,21 @@
 			line[len-1] = '\0';
 
 		if (sscanf(line, "GID %lu %128s", &idval, sid_string) == 2) {
-			type = ID_TYPE_GID;
+			map.xid.type = ID_TYPE_GID;
+			map.xid.id = idval;
 		} else if (sscanf(line, "UID %lu %128s", &idval, sid_string) == 2) {
-			type = ID_TYPE_UID;
+			map.xid.type = ID_TYPE_UID;
+			map.xid.id = idval;
 		} else if (sscanf(line, "USER HWM %lu", &idval) == 1) {
 			/* set uid hwm */
-			wbc_status = wbcSetUidHwm(idval);
-			if (!WBC_ERROR_IS_OK(wbc_status)) {
-				d_fprintf(stderr, "Could not set USER HWM: %s\n",
-					  wbcErrorString(wbc_status));
+			if (! winbind_set_uid_hwm(idval)) {
+				d_fprintf(stderr, "Could not set USER HWM\n");
 			}
 			continue;
 		} else if (sscanf(line, "GROUP HWM %lu", &idval) == 1) {
 			/* set gid hwm */
-			wbc_status = wbcSetGidHwm(idval);
-			if (!WBC_ERROR_IS_OK(wbc_status)) {
-				d_fprintf(stderr, "Could not set GROUP HWM: %s\n",
-					  wbcErrorString(wbc_status));
+			if (! winbind_set_gid_hwm(idval)) {
+				d_fprintf(stderr, "Could not set GROUP HWM\n");
 			}
 			continue;
 		} else {
@@ -139,25 +137,19 @@
 			continue;
 		}
 
-		wbc_status = wbcStringToSid(sid_string, &sid);
-		if (!WBC_ERROR_IS_OK(wbc_status)) {
-			d_fprintf(stderr, "ignoring invalid sid [%s]: %s\n",
-				  sid_string, wbcErrorString(wbc_status));
+		if (!string_to_sid(&sid, sid_string)) {
+			d_fprintf(stderr, "ignoring invalid sid [%s]\n", sid_string);
 			continue;
 		}
+		map.sid = &sid;
 
-		if (type == ID_TYPE_UID) {
-			wbc_status = wbcSetUidMapping(idval, &sid);
-		} else {
-			wbc_status = wbcSetGidMapping(idval, &sid);
-		}
-		if (!WBC_ERROR_IS_OK(wbc_status)) {
-			d_fprintf(stderr, "Could not set mapping of %s %lu to sid %s: %s\n",
-				 (type == ID_TYPE_GID) ? "GID" : "UID",
-				 idval, sid_string,
-				 wbcErrorString(wbc_status));
+		if (!winbind_set_mapping(&map)) {
+			d_fprintf(stderr, "Could not set mapping of %s %lu to sid %s\n",
+				 (map.xid.type == ID_TYPE_GID) ? "GID" : "UID",
+				 (unsigned long)map.xid.id, sid_string_static(map.sid));
 			continue;
 		}
+			 
 	}
 
 	if (input != stdin) {
@@ -182,13 +174,13 @@
 	d_printf("Not Implemented yet\n");
 	return -1;
 }
-bool idmap_store_secret(const char *backend, bool alloc,
+BOOL idmap_store_secret(const char *backend, bool alloc,
 			const char *domain, const char *identity,
 			const char *secret)
 {
 	char *tmp;
 	int r;
-	bool ret;
+	BOOL ret;
 
 	if (alloc) {
 		r = asprintf(&tmp, "IDMAP_ALLOC_%s", backend);
@@ -214,7 +206,7 @@
 	char *domain;
 	char *backend;
 	char *opt = NULL;
-	bool ret;
+	BOOL ret;
 
 	if (argc != 2) {
 		return net_help_idmap(argc, argv);
@@ -278,7 +270,7 @@
 
 int net_help_idmap(int argc, const char **argv)
 {
-	d_printf("net idmap dump <inputfile>\n"\
+	d_printf("net idmap dump <outputfile>\n"\
 		 "    Dump current id mapping\n");
 
 	d_printf("net idmap restore\n"\
@@ -292,70 +284,6 @@
 	return -1;
 }
 
-static int net_idmap_aclmapset(int argc, const char **argv)
-{
-	TALLOC_CTX *mem_ctx;
-	int result = -1;
-	DOM_SID src_sid, dst_sid;
-	char *src, *dst;
-	struct db_context *db;
-	struct db_record *rec;
-	NTSTATUS status;
-
-	if (argc != 3) {
-		d_fprintf(stderr, "usage: net idmap aclmapset <tdb> "
-			  "<src-sid> <dst-sid>\n");
-		return -1;
-	}
-
-	if (!(mem_ctx = talloc_init("net idmap aclmapset"))) {
-		d_fprintf(stderr, "talloc_init failed\n");
-		return -1;
-	}
-
-	if (!(db = db_open(mem_ctx, argv[0], 0, TDB_DEFAULT,
-			   O_RDWR|O_CREAT, 0600))) {
-		d_fprintf(stderr, "db_open failed: %s\n", strerror(errno));
-		goto fail;
-	}
-
-	if (!string_to_sid(&src_sid, argv[1])) {
-		d_fprintf(stderr, "%s is not a valid sid\n", argv[1]);
-		goto fail;
-	}
-
-	if (!string_to_sid(&dst_sid, argv[2])) {
-		d_fprintf(stderr, "%s is not a valid sid\n", argv[2]);
-		goto fail;
-	}
-
-	if (!(src = sid_string_talloc(mem_ctx, &src_sid))
-	    || !(dst = sid_string_talloc(mem_ctx, &dst_sid))) {
-		d_fprintf(stderr, "talloc_strdup failed\n");
-		goto fail;
-	}
-
-	if (!(rec = db->fetch_locked(
-		      db, mem_ctx, string_term_tdb_data(src)))) {
-		d_fprintf(stderr, "could not fetch db record\n");
-		goto fail;
-	}
-
-	status = rec->store(rec, string_term_tdb_data(dst), 0);
-	TALLOC_FREE(rec);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		d_fprintf(stderr, "could not store record: %s\n",
-			  nt_errstr(status));
-		goto fail;
-	}
-
-	result = 0;
-fail:
-	TALLOC_FREE(mem_ctx);
-	return result;
-}
-
 /***********************************************************
  Look at the current idmap
  **********************************************************/
@@ -367,7 +295,6 @@
 		{"setmap", net_idmap_set },
 		{"delete", net_idmap_delete},
 		{"secret", net_idmap_secret},
-		{"aclmapset", net_idmap_aclmapset},
 		{"help", net_help_idmap},
 		{NULL, NULL}
 	};

Modified: branches/samba/upstream/source/utils/net_lookup.c
===================================================================
--- branches/samba/upstream/source/utils/net_lookup.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_lookup.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,20 +1,21 @@
-/*
-   Samba Unix/Linux SMB client library
+/* 
+   Samba Unix/Linux SMB client library 
    net lookup command
    Copyright (C) 2001 Andrew Tridgell (tridge at samba.org)
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #include "includes.h"
 #include "utils/net.h"
@@ -25,12 +26,10 @@
 "  net lookup [host] HOSTNAME[#<type>]\n\tgives IP for a hostname\n\n"
 "  net lookup ldap [domain]\n\tgives IP of domain's ldap server\n\n"
 "  net lookup kdc [realm]\n\tgives IP of realm's kerberos KDC\n\n"
-"  net lookup pdc [domain|realm]\n\tgives IP of realm's kerberos KDC\n\n"
 "  net lookup dc [domain]\n\tgives IP of domains Domain Controllers\n\n"
 "  net lookup master [domain|wg]\n\tgive IP of master browser\n\n"
 "  net lookup name [name]\n\tLookup name's sid and type\n\n"
 "  net lookup sid [sid]\n\tGive sid's name and type\n\n"
-"  net lookup dsgetdcname [name] [flags] [sitename]\n\n"
 );
 	return -1;
 }
@@ -38,13 +37,12 @@
 /* lookup a hostname giving an IP */
 static int net_lookup_host(int argc, const char **argv)
 {
-	struct sockaddr_storage ss;
+	struct in_addr ip;
 	int name_type = 0x20;
-	char addr[INET6_ADDRSTRLEN];
 	const char *name = argv[0];
 	char *p;
 
-	if (argc == 0)
+	if (argc == 0) 
 		return net_lookup_usage(argc, argv);
 
 	p = strchr_m(name,'#');
@@ -52,37 +50,27 @@
 		*p = '\0';
 		sscanf(++p,"%x",&name_type);
 	}
-
-	if (!resolve_name(name, &ss, name_type)) {
-		/* we deliberately use DEBUG() here to send it to stderr
+	
+	if (!resolve_name(name, &ip, name_type)) {
+		/* we deliberately use DEBUG() here to send it to stderr 
 		   so scripts aren't mucked up */
 		DEBUG(0,("Didn't find %s#%02x\n", name, name_type));
 		return -1;
 	}
 
-	print_sockaddr(addr, sizeof(addr), &ss);
-	d_printf("%s\n", addr);
+	d_printf("%s\n", inet_ntoa(ip));
 	return 0;
 }
 
 #ifdef HAVE_ADS
 static void print_ldap_srvlist(struct dns_rr_srv *dclist, int numdcs )
 {
-	struct sockaddr_storage ss;
+	struct in_addr ip;
 	int i;
 
 	for ( i=0; i<numdcs; i++ ) {
-		if (resolve_name(dclist[i].hostname, &ss, 0x20) ) {
-			char addr[INET6_ADDRSTRLEN];
-			print_sockaddr(addr, sizeof(addr), &ss);
-#ifdef HAVE_IPV6
-			if (ss.ss_family == AF_INET6) {
-				d_printf("[%s]:%d\n", addr, dclist[i].port);
-			}
-#endif
-			if (ss.ss_family == AF_INET) {
-				d_printf("%s:%d\n", addr, dclist[i].port);
-			}
+		if ( resolve_name(dclist[i].hostname, &ip, 0x20) ) {
+			d_printf("%s:%d\n", inet_ntoa(ip), dclist[i].port); 
 		}
 	}
 }
@@ -92,14 +80,13 @@
 {
 #ifdef HAVE_ADS
 	const char *domain;
-	struct sockaddr_storage ss;
+	struct in_addr addr;
+	struct hostent *hostent;
 	struct dns_rr_srv *dcs = NULL;
 	int numdcs = 0;
 	char *sitename;
 	TALLOC_CTX *ctx;
 	NTSTATUS status;
-	int ret;
-	char h_name[MAX_DNS_NAME_LENGTH];
 
 	if (argc > 0)
 		domain = argv[0];
@@ -109,7 +96,7 @@
 	sitename = sitename_fetch(domain);
 
 	if ( (ctx = talloc_init("net_lookup_ldap")) == NULL ) {
-		d_fprintf(stderr, "net_lookup_ldap: talloc_init() failed!\n");
+		d_fprintf(stderr, "net_lookup_ldap: talloc_inti() failed!\n");
 		SAFE_FREE(sitename);
 		return -1;
 	}
@@ -124,27 +111,23 @@
 		return 0;
 	}
 
-     	DEBUG(9, ("Looking up PDC for domain %s\n", domain));
-	if (!get_pdc_ip(domain, &ss)) {
+     	DEBUG(9, ("Looking up DC for domain %s\n", domain));
+	if (!get_pdc_ip(domain, &addr)) {
 		TALLOC_FREE( ctx );
 		SAFE_FREE(sitename);
 		return -1;
 	}
 
-	ret = sys_getnameinfo((struct sockaddr *)&ss,
-			sizeof(struct sockaddr_storage),
-			h_name, sizeof(h_name),
-			NULL, 0,
-			NI_NAMEREQD);
-
-	if (ret) {
+	hostent = gethostbyaddr((char *) &addr.s_addr, sizeof(addr.s_addr),
+				AF_INET);
+	if (!hostent) {
 		TALLOC_FREE( ctx );
 		SAFE_FREE(sitename);
 		return -1;
 	}
 
-	DEBUG(9, ("Found PDC with DNS name %s\n", h_name));
-	domain = strchr(h_name, '.');
+	DEBUG(9, ("Found DC with DNS name %s\n", hostent->h_name));
+	domain = strchr(hostent->h_name, '.');
 	if (!domain) {
 		TALLOC_FREE( ctx );
 		SAFE_FREE(sitename);
@@ -174,89 +157,49 @@
 static int net_lookup_dc(int argc, const char **argv)
 {
 	struct ip_service *ip_list;
-	struct sockaddr_storage ss;
+	struct in_addr addr;
 	char *pdc_str = NULL;
-	const char *domain = NULL;
+	const char *domain=opt_target_workgroup;
 	char *sitename = NULL;
 	int count, i;
-	char addr[INET6_ADDRSTRLEN];
-	bool sec_ads = (lp_security() == SEC_ADS);
 
-	if (sec_ads) {
-		domain = lp_realm();
-	} else {
-		domain = opt_target_workgroup;
-	}
-
 	if (argc > 0)
 		domain=argv[0];
 
 	/* first get PDC */
-	if (!get_pdc_ip(domain, &ss))
+	if (!get_pdc_ip(domain, &addr))
 		return -1;
 
-	print_sockaddr(addr, sizeof(addr), &ss);
-	asprintf(&pdc_str, "%s", addr);
+	asprintf(&pdc_str, "%s", inet_ntoa(addr));
 	d_printf("%s\n", pdc_str);
 
 	sitename = sitename_fetch(domain);
-	if (!NT_STATUS_IS_OK(get_sorted_dc_list(domain, sitename,
-					&ip_list, &count, sec_ads))) {
+	if (!NT_STATUS_IS_OK(get_sorted_dc_list(domain, sitename, &ip_list, &count, False))) {
 		SAFE_FREE(pdc_str);
 		SAFE_FREE(sitename);
 		return 0;
 	}
 	SAFE_FREE(sitename);
 	for (i=0;i<count;i++) {
-		print_sockaddr(addr, sizeof(addr), &ip_list[i].ss);
-		if (!strequal(pdc_str, addr))
-			d_printf("%s\n", addr);
+		char *dc_str = inet_ntoa(ip_list[i].ip);
+		if (!strequal(pdc_str, dc_str))
+			d_printf("%s\n", dc_str);
 	}
 	SAFE_FREE(pdc_str);
 	return 0;
 }
 
-static int net_lookup_pdc(int argc, const char **argv)
-{
-	struct sockaddr_storage ss;
-	char *pdc_str = NULL;
-	const char *domain;
-	char addr[INET6_ADDRSTRLEN];
-
-	if (lp_security() == SEC_ADS) {
-		domain = lp_realm();
-	} else {
-		domain = opt_target_workgroup;
-	}
-
-	if (argc > 0)
-		domain=argv[0];
-
-	/* first get PDC */
-	if (!get_pdc_ip(domain, &ss))
-		return -1;
-
-	print_sockaddr(addr, sizeof(addr), &ss);
-	asprintf(&pdc_str, "%s", addr);
-	d_printf("%s\n", pdc_str);
-	SAFE_FREE(pdc_str);
-	return 0;
-}
-
-
 static int net_lookup_master(int argc, const char **argv)
 {
-	struct sockaddr_storage master_ss;
+	struct in_addr master_ip;
 	const char *domain=opt_target_workgroup;
-	char addr[INET6_ADDRSTRLEN];
 
 	if (argc > 0)
 		domain=argv[0];
 
-	if (!find_master_ip(domain, &master_ss))
+	if (!find_master_ip(domain, &master_ip))
 		return -1;
-	print_sockaddr(addr, sizeof(addr), &master_ss);
-	d_printf("%s\n", addr);
+	d_printf("%s\n", inet_ntoa(master_ip));
 	return 0;
 }
 
@@ -322,13 +265,13 @@
 		return -1;
 	}
 
-	if (!lookup_name(talloc_tos(), argv[0], LOOKUP_NAME_ALL,
+	if (!lookup_name(tmp_talloc_ctx(), argv[0], LOOKUP_NAME_ALL,
 			 &dom, &name, &sid, &type)) {
 		d_printf("Could not lookup name %s\n", argv[0]);
 		return -1;
 	}
 
-	d_printf("%s %d (%s) %s\\%s\n", sid_string_tos(&sid),
+	d_printf("%s %d (%s) %s\\%s\n", sid_string_static(&sid),
 		 type, sid_type_lookup(type), dom, name);
 	return 0;
 }
@@ -349,68 +292,17 @@
 		return -1;
 	}
 
-	if (!lookup_sid(talloc_tos(), &sid,
+	if (!lookup_sid(tmp_talloc_ctx(), &sid,
 			&dom, &name, &type)) {
 		d_printf("Could not lookup name %s\n", argv[0]);
 		return -1;
 	}
 
-	d_printf("%s %d (%s) %s\\%s\n", sid_string_tos(&sid),
+	d_printf("%s %d (%s) %s\\%s\n", sid_string_static(&sid),
 		 type, sid_type_lookup(type), dom, name);
 	return 0;
 }
 
-static int net_lookup_dsgetdcname(int argc, const char **argv)
-{
-	NTSTATUS status;
-	const char *domain_name = NULL;
-	const char *site_name = NULL;
-	uint32_t flags = 0;
-	struct netr_DsRGetDCNameInfo *info = NULL;
-	TALLOC_CTX *mem_ctx;
-	char *s = NULL;
-
-	if (argc < 1 || argc > 3) {
-		d_printf("usage: net lookup dsgetdcname "
-			 "<name> <flags> <sitename>\n");
-		return -1;
-	}
-
-	mem_ctx = talloc_init("net_lookup_dsgetdcname");
-	if (!mem_ctx) {
-		return -1;
-	}
-
-	domain_name = argv[0];
-
-	if (argc >= 2)
-		sscanf(argv[1], "%x", &flags);
-
-	if (!flags) {
-		flags |= DS_DIRECTORY_SERVICE_REQUIRED;
-	}
-
-	if (argc == 3) {
-		site_name = argv[2];
-	}
-
-	status = dsgetdcname(mem_ctx, NULL, domain_name, NULL, site_name,
-			     flags, &info);
-	if (!NT_STATUS_IS_OK(status)) {
-		d_printf("failed with: %s\n", nt_errstr(status));
-		TALLOC_FREE(mem_ctx);
-		return -1;
-	}
-
-	s = NDR_PRINT_STRUCT_STRING(mem_ctx, netr_DsRGetDCNameInfo, info);
-	printf("%s\n", s);
-	TALLOC_FREE(s);
-
-	TALLOC_FREE(mem_ctx);
-	return 0;
-}
-
-
 /* lookup hosts or IP addresses using internal samba lookup fns */
 int net_lookup(int argc, const char **argv)
 {
@@ -420,12 +312,10 @@
 		{"HOST", net_lookup_host},
 		{"LDAP", net_lookup_ldap},
 		{"DC", net_lookup_dc},
-		{"PDC", net_lookup_pdc},
 		{"MASTER", net_lookup_master},
 		{"KDC", net_lookup_kdc},
 		{"NAME", net_lookup_name},
 		{"SID", net_lookup_sid},
-		{"DSGETDCNAME", net_lookup_dsgetdcname},
 		{NULL, NULL}
 	};
 

Modified: branches/samba/upstream/source/utils/net_rap.c
===================================================================
--- branches/samba/upstream/source/utils/net_rap.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_rap.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -11,7 +11,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -20,7 +20,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #include "includes.h"
 #include "utils/net.h"
@@ -83,7 +84,7 @@
 		return net_rap_file_usage(argc, argv);
 	}
 
-	if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+	if (!(cli = net_make_ipc_connection(0))) 
                 return -1;
 
 	ret = cli_NetFileClose(cli, atoi(argv[0]));
@@ -98,7 +99,7 @@
 	if (argc == 0)
 		return net_rap_file_usage(argc, argv);
 	
-	if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+	if (!(cli = net_make_ipc_connection(0))) 
                 return -1;
 
 	ret = cli_NetFileGetInfo(cli, atoi(argv[0]), one_file_fn);
@@ -108,27 +109,11 @@
 
 static int rap_file_user(int argc, const char **argv)
 {
-	struct cli_state *cli;
-	int ret;
-
 	if (argc == 0)
 		return net_rap_file_usage(argc, argv);
 
-	if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
-		return -1;
-
-	/* list open files */
-
-	d_printf("\nEnumerating open files on remote server:\n\n"
-		 "\nFileId  Opened by            Perms  Locks  Path \n"
-		 "------  ---------            -----  -----  ---- \n");
-	ret = cli_NetFileEnum(cli, argv[0], NULL, file_fn);
-
-	if (ret == -1)
-		d_printf("\nOperation not supported by server!\n\n");
-
-	cli_shutdown(cli);
-	return ret;
+	d_fprintf(stderr, "net rap file user not implemented yet\n");
+	return -1;
 }
 
 int net_rap_file(int argc, const char **argv)
@@ -144,19 +129,15 @@
 		struct cli_state *cli;
 		int ret;
 		
-		if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+		if (!(cli = net_make_ipc_connection(0))) 
                         return -1;
 
 		/* list open files */
-
-		d_printf("\nEnumerating open files on remote server:\n\n"
-			 "\nFileId  Opened by            Perms  Locks  Path \n"
-			 "------  ---------            -----  -----  ---- \n");
+		d_printf(
+		 "\nEnumerating open files on remote server:\n\n"\
+		 "\nFileId  Opened by            Perms  Locks  Path \n"\
+		 "------  ---------            -----  -----  ---- \n");
 		ret = cli_NetFileEnum(cli, NULL, NULL, file_fn);
-
-		if (ret == -1)
-			d_printf("\nOperation not supported by server!\n\n");
-
 		cli_shutdown(cli);
 		return ret;
 	}
@@ -192,7 +173,7 @@
 		return net_rap_share_usage(argc, argv);
 	}
 
-	if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+	if (!(cli = net_make_ipc_connection(0))) 
                 return -1;
 
 	ret = cli_NetShareDelete(cli, argv[0]);
@@ -214,14 +195,13 @@
 		return net_rap_share_usage(argc, argv);
 	}
 			
-	if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+	if (!(cli = net_make_ipc_connection(0))) 
                 return -1;
 
 	sharename = SMB_STRDUP(argv[0]);
 	p = strchr(sharename, '=');
 	if (p == NULL) {
 		d_printf("Server path not specified\n");
-		SAFE_FREE(sharename);
 		return net_rap_share_usage(argc, argv);
 	}
 	*p = 0;
@@ -238,7 +218,6 @@
 	
 	ret = cli_NetShareAdd(cli, &sinfo);
 	cli_shutdown(cli);
-	SAFE_FREE(sharename);
 	return ret;
 }
 
@@ -256,7 +235,7 @@
 		struct cli_state *cli;
 		int ret;
 		
-		if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+		if (!(cli = net_make_ipc_connection(0))) 
 			return -1;
 		
 		if (opt_long_list_entries) {
@@ -342,7 +321,7 @@
 	struct cli_state *cli;
 	int ret;
 	
-	if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+	if (!(cli = net_make_ipc_connection(0))) 
                 return -1;
 
 	if (argc == 0) 
@@ -368,7 +347,7 @@
 	struct cli_state *cli;
 	int ret;
 	
-	if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+	if (!(cli = net_make_ipc_connection(0))) 
                 return -1;
 
 	if (argc == 0) 
@@ -392,7 +371,7 @@
 		struct cli_state *cli;
 		int ret;
 		
-		if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+		if (!(cli = net_make_ipc_connection(0))) 
 			return -1;
 
 		d_printf("Computer             User name            "\
@@ -434,7 +413,7 @@
 	struct cli_state *cli;
 	char *name;
 
-	if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+	if (!(cli = net_make_ipc_connection(0))) 
                 return -1;
 
 	if (!cli_get_server_name(NULL, cli, &name)) {
@@ -466,7 +445,7 @@
 		}
 	}
 
-	if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+	if (!(cli = net_make_ipc_connection(0))) 
                 return -1;
 
 	d_printf("\nEnumerating servers in this domain or workgroup: \n\n"\
@@ -494,7 +473,7 @@
 	struct cli_state *cli;
 	int ret;
 	
-	if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+	if (!(cli = net_make_ipc_connection(0))) 
                 return -1;
 
 	d_printf("\nEnumerating domains:\n\n"\
@@ -591,7 +570,7 @@
 	if (argc == 0) 
                 return net_rap_printq_usage(argc, argv);
 
-	if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+	if (!(cli = net_make_ipc_connection(0))) 
                 return -1;
 
 	d_printf(PRINTQ_ENUM_DISPLAY, cli->desthost); /* list header */
@@ -608,7 +587,7 @@
 	if (argc == 0) 
                 return net_rap_printq_usage(argc, argv);
 
-	if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+	if (!(cli = net_make_ipc_connection(0))) 
                 return -1;
 
 	ret = cli_printjob_del(cli, atoi(argv[0]));
@@ -628,7 +607,7 @@
 	};
 
 	if (argc == 0) {
-		if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+		if (!(cli = net_make_ipc_connection(0))) 
 			return -1;
 
 		d_printf(PRINTQ_ENUM_DISPLAY, cli->desthost); /* list header */
@@ -674,7 +653,7 @@
                 return net_rap_user_usage(argc, argv);
 	}
 
-	if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+	if (!(cli = net_make_ipc_connection(0))) 
                 return -1;
 
 	ret = cli_NetUserDelete(cli, argv[0]);
@@ -693,7 +672,7 @@
                 return net_rap_user_usage(argc, argv);
 	}
 
-	if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+	if (!(cli = net_make_ipc_connection(0)))
                 return -1;
 			
 	safe_strcpy(userinfo.user_name, argv[0], sizeof(userinfo.user_name)-1);
@@ -722,7 +701,7 @@
                 return net_rap_user_usage(argc, argv);
 	}
 
-	if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+	if (!(cli = net_make_ipc_connection(0)))
                 return -1;
 
 	ret = cli_NetUserGetGroups(cli, argv[0], group_member_fn, NULL);
@@ -742,7 +721,7 @@
 
 	if (argc == 0) {
 		struct cli_state *cli;
-		if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+		if (!(cli = net_make_ipc_connection(0)))
                         goto done;
 		if (opt_long_list_entries) {
 			d_printf("\nUser name             Comment"\
@@ -790,7 +769,7 @@
                 return net_rap_group_usage(argc, argv);
 	}
 
-	if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+	if (!(cli = net_make_ipc_connection(0)))
                 return -1;
 
 	ret = cli_NetGroupDelete(cli, argv[0]);
@@ -809,7 +788,7 @@
                 return net_rap_group_usage(argc, argv);
 	}
 
-	if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+	if (!(cli = net_make_ipc_connection(0)))
                 return -1;
 			
 	/* BB check for length 21 or smaller explicitly ? BB */
@@ -833,7 +812,7 @@
 	if (argc == 0) {
 		struct cli_state *cli;
 		int ret;
-		if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+		if (!(cli = net_make_ipc_connection(0)))
                         return -1;
 		if (opt_long_list_entries) {
 			d_printf("Group name            Comment\n");
@@ -874,7 +853,7 @@
                 return net_rap_groupmember_usage(argc, argv);
 	}
 
-	if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+	if (!(cli = net_make_ipc_connection(0)))
                 return -1;
 
 	ret = cli_NetGroupAddUser(cli, argv[0], argv[1]);
@@ -891,7 +870,7 @@
                 return net_rap_groupmember_usage(argc, argv);
 	}
 	
-	if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+	if (!(cli = net_make_ipc_connection(0)))
                 return -1;
 
 	ret = cli_NetGroupDelUser(cli, argv[0], argv[1]);
@@ -908,7 +887,7 @@
                 return net_rap_groupmember_usage(argc, argv);
 	}
 
-	if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+	if (!(cli = net_make_ipc_connection(0)))
                 return -1;
 
 	ret = cli_NetGroupGetUsers(cli, argv[0], group_member_fn, NULL ); 
@@ -984,7 +963,7 @@
 	if (argc == 0) {
 		struct cli_state *cli;
 		int ret;
-		if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+		if (!(cli = net_make_ipc_connection(0))) 
 			return -1;
 
 		if (opt_long_list_entries) {
@@ -1018,7 +997,7 @@
 	if (argc < 3) 
                 return net_rap_password_usage(argc, argv);
 
-	if (!NT_STATUS_IS_OK(net_make_ipc_connection(0, &cli)))
+	if (!(cli = net_make_ipc_connection(0))) 
                 return -1;
 
 	/* BB Add check for password lengths? */

Deleted: branches/samba/upstream/source/utils/net_registry.c
===================================================================
--- branches/samba/upstream/source/utils/net_registry.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_registry.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,483 +0,0 @@
-/*
- * Samba Unix/Linux SMB client library
- * Distributed SMB/CIFS Server Management Utility
- * Local registry interface
- *
- * Copyright (C) Michael Adam 2008
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "includes.h"
-#include "utils/net.h"
-#include "utils/net_registry_util.h"
-
-
-/*
- *
- * Helper functions
- *
- */
-
-/**
- * split given path into hive and remaining path and open the hive key
- */
-static WERROR open_hive(TALLOC_CTX *ctx, const char *path,
-			uint32 desired_access,
-			struct registry_key **hive,
-			char **subkeyname)
-{
-	WERROR werr;
-	NT_USER_TOKEN *token = NULL;
-	char *hivename = NULL;
-	char *tmp_subkeyname = NULL;
-	TALLOC_CTX *tmp_ctx = talloc_stackframe();
-
-	if ((hive == NULL) || (subkeyname == NULL)) {
-		werr = WERR_INVALID_PARAM;
-		goto done;
-	}
-
-	werr = split_hive_key(tmp_ctx, path, &hivename, &tmp_subkeyname);
-	if (!W_ERROR_IS_OK(werr)) {
-		goto done;
-	}
-	*subkeyname = talloc_strdup(ctx, tmp_subkeyname);
-	if (*subkeyname == NULL) {
-		werr = WERR_NOMEM;
-		goto done;
-	}
-
-	werr = ntstatus_to_werror(registry_create_admin_token(tmp_ctx, &token));
-	if (!W_ERROR_IS_OK(werr)) {
-		goto done;
-	}
-
-	werr = reg_openhive(ctx, hivename, desired_access, token, hive);
-	if (!W_ERROR_IS_OK(werr)) {
-		goto done;
-	}
-
-	werr = WERR_OK;
-
-done:
-	TALLOC_FREE(tmp_ctx);
-	return werr;
-}
-
-static WERROR open_key(TALLOC_CTX *ctx, const char *path,
-		       uint32 desired_access,
-		       struct registry_key **key)
-{
-	WERROR werr;
-	char *subkey_name = NULL;
-	struct registry_key *hive = NULL;
-	TALLOC_CTX *tmp_ctx = talloc_stackframe();
-
-	if ((path == NULL) || (key == NULL)) {
-		return WERR_INVALID_PARAM;
-	}
-
-	werr = open_hive(tmp_ctx, path, desired_access, &hive, &subkey_name);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "open_hive failed: %s\n", dos_errstr(werr));
-		goto done;
-	}
-
-	werr = reg_openkey(ctx, hive, subkey_name, desired_access, key);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "reg_openkey failed: %s\n",
-			  dos_errstr(werr));
-		goto done;
-	}
-
-	werr = WERR_OK;
-
-done:
-	TALLOC_FREE(tmp_ctx);
-	return werr;
-}
-
-/*
- *
- * the main "net registry" function implementations
- *
- */
-
-static int net_registry_enumerate(int argc, const char **argv)
-{
-	WERROR werr;
-	struct registry_key *key = NULL;
-	TALLOC_CTX *ctx = talloc_stackframe();
-	char *subkey_name;
-	NTTIME modtime;
-	uint32_t count;
-	char *valname = NULL;
-	struct registry_value *valvalue = NULL;
-	int ret = -1;
-
-	if (argc != 1) {
-		d_printf("Usage:    net registry enumerate <path>\n");
-		d_printf("Example:  net registry enumerate "
-			 "'HKLM\\Software\\Samba'\n");
-		goto done;
-	}
-
-	werr = open_key(ctx, argv[0], REG_KEY_READ, &key);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "open_key failed: %s\n", dos_errstr(werr));
-		goto done;
-	}
-
-	for (count = 0;
-	     werr = reg_enumkey(ctx, key, count, &subkey_name, &modtime),
-	     W_ERROR_IS_OK(werr);
-	     count++)
-	{
-		print_registry_key(subkey_name, &modtime);
-	}
-	if (!W_ERROR_EQUAL(WERR_NO_MORE_ITEMS, werr)) {
-		goto done;
-	}
-
-	for (count = 0;
-	     werr = reg_enumvalue(ctx, key, count, &valname, &valvalue),
-	     W_ERROR_IS_OK(werr);
-	     count++)
-	{
-		print_registry_value_with_name(valname, valvalue);
-	}
-	if (!W_ERROR_EQUAL(WERR_NO_MORE_ITEMS, werr)) {
-		goto done;
-	}
-
-	ret = 0;
-done:
-	TALLOC_FREE(ctx);
-	return ret;
-}
-
-static int net_registry_createkey(int argc, const char **argv)
-{
-	WERROR werr;
-	enum winreg_CreateAction action;
-	char *subkeyname;
-	struct registry_key *hivekey = NULL;
-	struct registry_key *subkey = NULL;
-	TALLOC_CTX *ctx = talloc_stackframe();
-	int ret = -1;
-
-	if (argc != 1) {
-		d_printf("Usage:    net registry createkey <path>\n");
-		d_printf("Example:  net registry createkey "
-			 "'HKLM\\Software\\Samba\\smbconf.127.0.0.1'\n");
-		goto done;
-	}
-	if (strlen(argv[0]) == 0) {
-		d_fprintf(stderr, "error: zero length key name given\n");
-		goto done;
-	}
-
-	werr = open_hive(ctx, argv[0], REG_KEY_WRITE, &hivekey, &subkeyname);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "open_hive failed: %s\n", dos_errstr(werr));
-		goto done;
-	}
-
-	werr = reg_createkey(ctx, hivekey, subkeyname, REG_KEY_WRITE,
-			     &subkey, &action);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "reg_createkey failed: %s\n",
-			  dos_errstr(werr));
-		goto done;
-	}
-	switch (action) {
-		case REG_ACTION_NONE:
-			d_printf("createkey did nothing -- huh?\n");
-			break;
-		case REG_CREATED_NEW_KEY:
-			d_printf("createkey created %s\n", argv[0]);
-			break;
-		case REG_OPENED_EXISTING_KEY:
-			d_printf("createkey opened existing %s\n", argv[0]);
-			break;
-	}
-
-	ret = 0;
-
-done:
-	TALLOC_FREE(ctx);
-	return ret;
-}
-
-static int net_registry_deletekey(int argc, const char **argv)
-{
-	WERROR werr;
-	char *subkeyname;
-	struct registry_key *hivekey = NULL;
-	TALLOC_CTX *ctx = talloc_stackframe();
-	int ret = -1;
-
-	if (argc != 1) {
-		d_printf("Usage:    net registry deletekey <path>\n");
-		d_printf("Example:  net registry deletekey "
-			 "'HKLM\\Software\\Samba\\smbconf.127.0.0.1'\n");
-		goto done;
-	}
-	if (strlen(argv[0]) == 0) {
-		d_fprintf(stderr, "error: zero length key name given\n");
-		goto done;
-	}
-
-	werr = open_hive(ctx, argv[0], REG_KEY_WRITE, &hivekey, &subkeyname);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "open_hive failed: %s\n", dos_errstr(werr));
-		goto done;
-	}
-
-	werr = reg_deletekey(hivekey, subkeyname);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "reg_deletekey failed: %s\n",
-			  dos_errstr(werr));
-		goto done;
-	}
-
-	ret = 0;
-
-done:
-	TALLOC_FREE(ctx);
-	return ret;
-}
-
-static int net_registry_getvalue(int argc, const char **argv)
-{
-	WERROR werr;
-	int ret = -1;
-	struct registry_key *key = NULL;
-	struct registry_value *value = NULL;
-	TALLOC_CTX *ctx = talloc_stackframe();
-
-	if (argc != 2) {
-		d_fprintf(stderr, "usage: net rpc registry getvalue <key> "
-				  "<valuename>\n");
-		goto done;
-	}
-
-	werr = open_key(ctx, argv[0], REG_KEY_READ, &key);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "open_key failed: %s\n", dos_errstr(werr));
-		goto done;
-	}
-
-	werr = reg_queryvalue(ctx, key, argv[1], &value);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "reg_queryvalue failed: %s\n",
-			  dos_errstr(werr));
-		goto done;
-	}
-
-	print_registry_value(value);
-
-	ret = 0;
-
-done:
-	TALLOC_FREE(ctx);
-	return ret;
-}
-
-static int net_registry_setvalue(int argc, const char **argv)
-{
-	WERROR werr;
-	struct registry_value value;
-	struct registry_key *key = NULL;
-	int ret = -1;
-	TALLOC_CTX *ctx = talloc_stackframe();
-
-	if (argc < 4) {
-		d_fprintf(stderr, "usage: net rpc registry setvalue <key> "
-			  "<valuename> <type> [<val>]+\n");
-		goto done;
-	}
-
-	if (!strequal(argv[2], "multi_sz") && (argc != 4)) {
-		d_fprintf(stderr, "Too many args for type %s\n", argv[2]);
-		goto done;
-	}
-
-	if (strequal(argv[2], "dword")) {
-		value.type = REG_DWORD;
-		value.v.dword = strtoul(argv[3], NULL, 10);
-	} else if (strequal(argv[2], "sz")) {
-		value.type = REG_SZ;
-		value.v.sz.len = strlen(argv[3])+1;
-		value.v.sz.str = CONST_DISCARD(char *, argv[3]);
-	} else {
-		d_fprintf(stderr, "type \"%s\" not implemented\n", argv[2]);
-		goto done;
-	}
-
-	werr = open_key(ctx, argv[0], REG_KEY_WRITE, &key);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "open_key failed: %s\n", dos_errstr(werr));
-		goto done;
-	}
-
-	werr = reg_setvalue(key, argv[1], &value);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "reg_setvalue failed: %s\n",
-			  dos_errstr(werr));
-		goto done;
-	}
-
-	ret = 0;
-
-done:
-	TALLOC_FREE(ctx);
-	return ret;
-}
-
-static int net_registry_deletevalue(int argc, const char **argv)
-{
-	WERROR werr;
-	struct registry_key *key = NULL;
-	TALLOC_CTX *ctx = talloc_stackframe();
-	int ret = -1;
-
-	if (argc != 2) {
-		d_fprintf(stderr, "usage: net rpc registry deletevalue <key> "
-			  "<valuename>\n");
-		goto done;
-	}
-
-	werr = open_key(ctx, argv[0], REG_KEY_WRITE, &key);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "open_key failed: %s\n", dos_errstr(werr));
-		goto done;
-	}
-
-	werr = reg_deletevalue(key, argv[1]);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "reg_deletekey failed: %s\n",
-			  dos_errstr(werr));
-		goto done;
-	}
-
-	ret = 0;
-
-done:
-	TALLOC_FREE(ctx);
-	return ret;
-}
-
-static int net_registry_getsd(int argc, const char **argv)
-{
-	WERROR werr;
-	int ret = -1;
-	struct registry_key *key = NULL;
-	struct security_descriptor *secdesc = NULL;
-	TALLOC_CTX *ctx = talloc_stackframe();
-	uint32_t access_mask = REG_KEY_READ |
-			       SEC_RIGHT_MAXIMUM_ALLOWED |
-			       SEC_RIGHT_SYSTEM_SECURITY;
-
-	/*
-	 * net_rpc_regsitry uses SEC_RIGHT_SYSTEM_SECURITY, but access
-	 * is denied with these perms right now...
-	 */
-	access_mask = REG_KEY_READ;
-
-	if (argc != 1) {
-		d_printf("Usage:    net registry getsd <path>\n");
-		d_printf("Example:  net registry getsd "
-			 "'HKLM\\Software\\Samba'\n");
-		goto done;
-	}
-	if (strlen(argv[0]) == 0) {
-		d_fprintf(stderr, "error: zero length key name given\n");
-		goto done;
-	}
-
-	werr = open_key(ctx, argv[0], access_mask, &key);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "open_key failed: %s\n", dos_errstr(werr));
-		goto done;
-	}
-
-	werr = reg_getkeysecurity(ctx, key, &secdesc);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_fprintf(stderr, "reg_getkeysecurity failed: %s\n",
-			  dos_errstr(werr));
-		goto done;
-	}
-
-	display_sec_desc(secdesc);
-
-	ret = 0;
-
-done:
-	TALLOC_FREE(ctx);
-	return ret;
-}
-
-int net_registry(int argc, const char **argv)
-{
-	int ret = -1;
-
-	struct functable2 func[] = {
-		{
-			"enumerate",
-			net_registry_enumerate,
-			"Enumerate registry keys and values"
-		},
-		{
-			"createkey",
-			net_registry_createkey,
-			"Create a new registry key"
-		},
-		{
-			"deletekey",
-			net_registry_deletekey,
-			"Delete a registry key"
-		},
-		{
-			"getvalue",
-			net_registry_getvalue,
-			"Print a registry value",
-		},
-		{
-			"setvalue",
-			net_registry_setvalue,
-			"Set a new registry value"
-		},
-		{
-			"deletevalue",
-			net_registry_deletevalue,
-			"Delete a registry value"
-		},
-		{
-			"getsd",
-			net_registry_getsd,
-			"Get security descriptor"
-		},
-	{ NULL, NULL, NULL }
-	};
-
-	if (!W_ERROR_IS_OK(registry_init_basic())) {
-		return -1;
-	}
-
-	ret = net_run_function2(argc, argv, "net registry", func);
-
-	return ret;
-}

Deleted: branches/samba/upstream/source/utils/net_registry_util.c
===================================================================
--- branches/samba/upstream/source/utils/net_registry_util.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_registry_util.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,120 +0,0 @@
-/*
- * Samba Unix/Linux SMB client library
- * Distributed SMB/CIFS Server Management Utility
- * registry utility functions
- *
- * Copyright (C) Michael Adam 2008
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "includes.h"
-#include "utils/net_registry_util.h"
-
-void print_registry_key(const char *keyname, NTTIME *modtime)
-{
-	d_printf("Keyname   = %s\n", keyname);
-	d_printf("Modtime   = %s\n",
-		 modtime
-		 ? http_timestring(nt_time_to_unix(*modtime))
-		 : "None");
-	d_printf("\n");
-}
-
-void print_registry_value(const struct registry_value *valvalue)
-{
-	d_printf("Type       = %s\n",
-		 reg_type_lookup(valvalue->type));
-	switch(valvalue->type) {
-	case REG_DWORD:
-		d_printf("Value      = %d\n", valvalue->v.dword);
-		break;
-	case REG_SZ:
-	case REG_EXPAND_SZ:
-		d_printf("Value      = \"%s\"\n", valvalue->v.sz.str);
-		break;
-	case REG_MULTI_SZ: {
-		uint32 j;
-		for (j = 0; j < valvalue->v.multi_sz.num_strings; j++) {
-			d_printf("Value[%3.3d] = \"%s\"\n", j,
-				 valvalue->v.multi_sz.strings[j]);
-		}
-		break;
-	}
-	case REG_BINARY:
-		d_printf("Value      = %d bytes\n",
-			 (int)valvalue->v.binary.length);
-		break;
-	default:
-		d_printf("Value      = <unprintable>\n");
-		break;
-	}
-}
-
-void print_registry_value_with_name(const char *valname,
-				    const struct registry_value *valvalue)
-{
-	d_printf("Valuename  = %s\n", valname);
-	print_registry_value(valvalue);
-	d_printf("\n");
-}
-
-/**
- * Split path into hive name and subkeyname
- * normalizations performed:
- *  - convert '/' to '\\'
- *  - strip trailing '\\' chars
- */
-WERROR split_hive_key(TALLOC_CTX *ctx, const char *path, char **hivename,
-		      char **subkeyname)
-{
-	char *p;
-	const char *tmp_subkeyname;
-
-	if ((path == NULL) || (hivename == NULL) || (subkeyname == NULL)) {
-		return WERR_INVALID_PARAM;
-	}
-
-	if (strlen(path) == 0) {
-		return WERR_INVALID_PARAM;
-	}
-
-	*hivename = talloc_string_sub(ctx, path, "/", "\\");
-	if (*hivename == NULL) {
-		return WERR_NOMEM;
-	}
-
-	/* strip trailing '\\' chars */
-	p = strrchr(*hivename, '\\');
-	while ((p != NULL) && (p[1] == '\0')) {
-		*p = '\0';
-		p = strrchr(*hivename, '\\');
-	}
-
-	p = strchr(*hivename, '\\');
-
-	if ((p == NULL) || (*p == '\0')) {
-		/* just the hive - no subkey given */
-		tmp_subkeyname = "";
-	} else {
-		*p = '\0';
-		tmp_subkeyname = p+1;
-	}
-	*subkeyname = talloc_strdup(ctx, tmp_subkeyname);
-	if (*subkeyname == NULL) {
-		return WERR_NOMEM;
-	}
-
-	return WERR_OK;
-}

Deleted: branches/samba/upstream/source/utils/net_registry_util.h
===================================================================
--- branches/samba/upstream/source/utils/net_registry_util.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_registry_util.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,41 +0,0 @@
-/*
- * Samba Unix/Linux SMB client library
- * Distributed SMB/CIFS Server Management Utility
- * registry utility functions
- *
- * Copyright (C) Michael Adam 2008
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef __NET_REGISTRY_UTIL_H__
-#define __NET_REGISTRY_UTIL_H__
-
-void print_registry_key(const char *keyname, NTTIME *modtime);
-
-void print_registry_value(const struct registry_value *valvalue);
-
-void print_registry_value_with_name(const char *valname,
-				    const struct registry_value *valvalue);
-
-/**
- * Split path into hive name and subkeyname
- * normalizations performed:
- *  - convert '/' to '\\'
- *  - strip trailing '\\' chars
- */
-WERROR split_hive_key(TALLOC_CTX *ctx, const char *path, char **hivename,
-		      char **subkeyname);
-
-#endif

Modified: branches/samba/upstream/source/utils/net_rpc.c
===================================================================
--- branches/samba/upstream/source/utils/net_rpc.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_rpc.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,13 +3,12 @@
    Distributed SMB/CIFS Server Management Utility 
    Copyright (C) 2001 Andrew Bartlett (abartlet at samba.org)
    Copyright (C) 2002 Jim McDonough (jmcd at us.ibm.com)
-   Copyright (C) 2004,2008 Guenther Deschner (gd at samba.org)
+   Copyright (C) 2004 Guenther Deschner (gd at samba.org)
    Copyright (C) 2005 Jeremy Allison (jra at samba.org)
-   Copyright (C) 2006 Jelmer Vernooij (jelmer at samba.org)
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -18,13 +17,13 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
 #include "includes.h"
 #include "utils/net.h"
 
 static int net_mode_share;
-static bool sync_files(struct copy_clistate *cp_clistate, const char *mask);
 
 /**
  * @file net_rpc.c
@@ -51,14 +50,13 @@
  **/
 
 NTSTATUS net_get_remote_domain_sid(struct cli_state *cli, TALLOC_CTX *mem_ctx,
-				   DOM_SID **domain_sid,
-				   const char **domain_name)
+				   DOM_SID **domain_sid, char **domain_name)
 {
 	struct rpc_pipe_client *lsa_pipe;
 	POLICY_HND pol;
 	NTSTATUS result = NT_STATUS_OK;
-	union lsa_PolicyInformation *info = NULL;
-
+	uint32 info_class = 5;
+	
 	lsa_pipe = cli_rpc_pipe_open_noauth(cli, PI_LSARPC, &result);
 	if (!lsa_pipe) {
 		d_fprintf(stderr, "Could not initialise lsa pipe\n");
@@ -74,20 +72,16 @@
 		return result;
 	}
 
-	result = rpccli_lsa_QueryInfoPolicy(lsa_pipe, mem_ctx,
-					    &pol,
-					    LSA_POLICY_INFO_ACCOUNT_DOMAIN,
-					    &info);
+	result = rpccli_lsa_query_info_policy(lsa_pipe, mem_ctx, &pol,
+					      info_class, domain_name,
+					      domain_sid);
 	if (!NT_STATUS_IS_OK(result)) {
 		d_fprintf(stderr, "lsaquery failed: %s\n",
 			  nt_errstr(result));
 		return result;
 	}
 
-	*domain_name = info->account_domain.name.string;
-	*domain_sid = info->account_domain.sid;
-
-	rpccli_lsa_Close(lsa_pipe, mem_ctx, &pol);
+	rpccli_lsa_close(lsa_pipe, mem_ctx, &pol);
 	cli_rpc_pipe_close(lsa_pipe);
 
 	return NT_STATUS_OK;
@@ -117,16 +111,11 @@
 	TALLOC_CTX *mem_ctx;
 	NTSTATUS nt_status;
 	DOM_SID *domain_sid;
-	const char *domain_name;
+	char *domain_name;
 
 	/* make use of cli_state handed over as an argument, if possible */
 	if (!cli_arg) {
-		nt_status = net_make_ipc_connection(conn_flags, &cli);
-		if (!NT_STATUS_IS_OK(nt_status)) {
-			DEBUG(1, ("failed to make ipc connection: %s\n",
-				  nt_errstr(nt_status)));
-			return -1;
-		}
+		cli = net_make_ipc_connection(conn_flags);
 	} else {
 		cli = cli_arg;
 	}
@@ -392,7 +381,7 @@
  * @param argc  Standard main() style argv.  Initial components are already
  *              stripped
  *
- * Main 'net_rpc_join()' (where the admin username/password is used) is 
+ * Main 'net_rpc_join()' (where the admin username/password is used) is
  * in net_rpc_join.c
  * Try to just change the password, but if that doesn't work, use/prompt
  * for a username/password.
@@ -444,44 +433,40 @@
 {
 	POLICY_HND connect_pol, domain_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	union samr_DomainInfo *info = NULL;
+	SAM_UNK_CTR ctr;
 	fstring sid_str;
 
-	sid_to_fstring(sid_str, domain_sid);
+	sid_to_string(sid_str, domain_sid);
 
-	/* Get sam policy handle */
-	result = rpccli_samr_Connect2(pipe_hnd, mem_ctx,
-				      pipe_hnd->cli->desthost,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      &connect_pol);
+	/* Get sam policy handle */	
+	result = rpccli_samr_connect(pipe_hnd, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				  &connect_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		d_fprintf(stderr, "Could not connect to SAM: %s\n", nt_errstr(result));
 		goto done;
 	}
-
+	
 	/* Get domain policy handle */
-	result = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					CONST_DISCARD(struct dom_sid2 *, domain_sid),
-					&domain_pol);
+	result = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      domain_sid, &domain_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		d_fprintf(stderr, "Could not open domain: %s\n", nt_errstr(result));
 		goto done;
 	}
 
-	result = rpccli_samr_QueryDomainInfo(pipe_hnd, mem_ctx,
-					     &domain_pol,
-					     2,
-					     &info);
+	ZERO_STRUCT(ctr);
+	result = rpccli_samr_query_dom_info(pipe_hnd, mem_ctx, &domain_pol,
+					 2, &ctr);
 	if (NT_STATUS_IS_OK(result)) {
-		d_printf("Domain Name: %s\n", info->info2.domain_name.string);
+		TALLOC_CTX *ctx = talloc_init("rpc_info_internals");
+		d_printf("Domain Name: %s\n", unistr2_tdup(ctx, &ctr.info.inf2.uni_domain));
 		d_printf("Domain SID: %s\n", sid_str);
-		d_printf("Sequence number: %llu\n",
-			(unsigned long long)info->info2.sequence_num);
-		d_printf("Num users: %u\n", info->info2.num_users);
-		d_printf("Num domain groups: %u\n", info->info2.num_groups);
-		d_printf("Num local groups: %u\n", info->info2.num_aliases);
+		d_printf("Sequence number: %llu\n", (unsigned long long)ctr.info.inf2.seq_num);
+		d_printf("Num users: %u\n", ctr.info.inf2.num_domain_usrs);
+		d_printf("Num domain groups: %u\n", ctr.info.inf2.num_domain_grps);
+		d_printf("Num local groups: %u\n", ctr.info.inf2.num_local_grps);
+		talloc_destroy(ctx);
 	}
 
  done:
@@ -528,7 +513,7 @@
 {
 	fstring sid_str;
 
-	sid_to_fstring(sid_str, domain_sid);
+	sid_to_string(sid_str, domain_sid);
 	d_printf("Storing SID %s for Domain %s in secrets.tdb\n",
 		 sid_str, domain_name);
 
@@ -571,43 +556,245 @@
 /** 
  * Add a new user to a remote RPC server
  *
+ * All parameters are provided by the run_rpc_command function, except for
+ * argc, argv which are passes through. 
+ *
+ * @param domain_sid The domain sid acquired from the remote server
+ * @param cli A cli_state connected to the server.
+ * @param mem_ctx Talloc context, destoyed on completion of the function.
  * @param argc  Standard main() style argc
  * @param argv  Standard main() style argv.  Initial components are already
  *              stripped
  *
+ * @return Normal NTSTATUS return.
+ **/
+
+static NTSTATUS rpc_user_add_internals(const DOM_SID *domain_sid,
+				const char *domain_name, 
+				struct cli_state *cli,
+				struct rpc_pipe_client *pipe_hnd,
+				TALLOC_CTX *mem_ctx, 
+				int argc, const char **argv)
+{
+	
+	POLICY_HND connect_pol, domain_pol, user_pol;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+	const char *acct_name;
+	uint32 acb_info;
+	uint32 acct_flags=0;
+	uint32 user_rid;
+
+	if (argc < 1) {
+		d_printf("User must be specified\n");
+		rpc_user_usage(argc, argv);
+		return NT_STATUS_OK;
+	}
+
+	acct_name = argv[0];
+
+	/* Get sam policy handle */
+	
+	result = rpccli_samr_connect(pipe_hnd, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				  &connect_pol);
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+	
+	/* Get domain policy handle */
+	
+	result = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      domain_sid, &domain_pol);
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	/* Create domain user */
+
+	acb_info = ACB_NORMAL;
+        acct_flags = SAMR_GENERIC_READ | SAMR_GENERIC_WRITE |
+                SAMR_GENERIC_EXECUTE | SAMR_STANDARD_WRITEDAC |
+                SAMR_STANDARD_DELETE | SAMR_USER_SETPASS | SAMR_USER_GETATTR |
+                SAMR_USER_SETATTR;
+	DEBUG(10, ("Creating account with flags: %d\n",acct_flags));
+
+	result = rpccli_samr_create_dom_user(pipe_hnd, mem_ctx, &domain_pol,
+					  acct_name, acb_info, acct_flags,
+					  &user_pol, &user_rid);
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	if (argc == 2) {
+
+		uint32 *user_rids, num_rids, *name_types;
+		uint32 flags = 0x000003e8; /* Unknown */
+		SAM_USERINFO_CTR ctr;
+		SAM_USER_INFO_24 p24;
+		uchar pwbuf[516];
+
+		result = rpccli_samr_lookup_names(pipe_hnd, mem_ctx, &domain_pol,
+						  flags, 1, &acct_name,
+						  &num_rids, &user_rids,
+						  &name_types);
+
+		if (!NT_STATUS_IS_OK(result)) {
+			goto done;
+		}
+
+		result = rpccli_samr_open_user(pipe_hnd, mem_ctx, &domain_pol,
+					       MAXIMUM_ALLOWED_ACCESS,
+					       user_rids[0], &user_pol);
+
+		if (!NT_STATUS_IS_OK(result)) {
+			goto done;
+		}
+
+		/* Set password on account */
+
+		ZERO_STRUCT(ctr);
+		ZERO_STRUCT(p24);
+
+		encode_pw_buffer(pwbuf, argv[1], STR_UNICODE);
+
+		init_sam_user_info24(&p24, (char *)pwbuf,24);
+
+		ctr.switch_value = 24;
+		ctr.info.id24 = &p24;
+
+		result = rpccli_samr_set_userinfo(pipe_hnd, mem_ctx, &user_pol, 24, 
+					       &cli->user_session_key, &ctr);
+
+		if (!NT_STATUS_IS_OK(result)) {
+			d_fprintf(stderr, "Failed to set password for user %s - %s\n", 
+				 acct_name, nt_errstr(result));
+
+			result = rpccli_samr_delete_dom_user(pipe_hnd, mem_ctx, &user_pol);
+
+			if (!NT_STATUS_IS_OK(result)) {
+				d_fprintf(stderr, "Failed to delete user %s - %s\n", 
+					 acct_name, nt_errstr(result));
+				 return result;
+			}
+		}
+
+	}
+ done:
+	if (!NT_STATUS_IS_OK(result)) {
+		d_fprintf(stderr, "Failed to add user %s - %s\n", acct_name, 
+			 nt_errstr(result));
+	} else {
+		d_printf("Added user %s\n", acct_name);
+	}
+	return result;
+}
+
+/** 
+ * Add a new user to a remote RPC server
+ *
+ * @param argc  Standard main() style argc
+ * @param argv  Standard main() style argv.  Initial components are already
+ *              stripped
+ *
  * @return A shell status integer (0 for success)
  **/
 
 static int rpc_user_add(int argc, const char **argv) 
 {
-	NET_API_STATUS status;
-	struct USER_INFO_1 info1;
-	uint32_t parm_error = 0;
+	return run_rpc_command(NULL, PI_SAMR, 0, rpc_user_add_internals,
+			       argc, argv);
+}
 
+/** 
+ * Delete a user from a remote RPC server
+ *
+ * All parameters are provided by the run_rpc_command function, except for
+ * argc, argv which are passes through. 
+ *
+ * @param domain_sid The domain sid acquired from the remote server
+ * @param cli A cli_state connected to the server.
+ * @param mem_ctx Talloc context, destoyed on completion of the function.
+ * @param argc  Standard main() style argc
+ * @param argv  Standard main() style argv.  Initial components are already
+ *              stripped
+ *
+ * @return Normal NTSTATUS return.
+ **/
+
+static NTSTATUS rpc_user_del_internals(const DOM_SID *domain_sid, 
+					const char *domain_name, 
+					struct cli_state *cli, 
+					struct rpc_pipe_client *pipe_hnd,
+					TALLOC_CTX *mem_ctx, 
+					int argc,
+					const char **argv)
+{
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+	POLICY_HND connect_pol, domain_pol, user_pol;
+
 	if (argc < 1) {
 		d_printf("User must be specified\n");
 		rpc_user_usage(argc, argv);
-		return 0;
+		return NT_STATUS_OK;
 	}
+	/* Get sam policy and domain handles */
 
-	ZERO_STRUCT(info1);
+	result = rpccli_samr_connect(pipe_hnd, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				  &connect_pol);
 
-	info1.usri1_name = argv[0];
-	if (argc == 2) {
-		info1.usri1_password = argv[1];
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
 	}
 
-	status = NetUserAdd(opt_host, 1, (uint8_t *)&info1, &parm_error);
+	result = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      domain_sid, &domain_pol);
 
-	if (status != 0) {
-		d_fprintf(stderr, "Failed to add user '%s' with: %s.\n",
-			argv[0], libnetapi_get_error_string(netapi_ctx, status));
-		return -1;
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	/* Get handle on user */
+
+	{
+		uint32 *user_rids, num_rids, *name_types;
+		uint32 flags = 0x000003e8; /* Unknown */
+
+		result = rpccli_samr_lookup_names(pipe_hnd, mem_ctx, &domain_pol,
+					       flags, 1, &argv[0],
+					       &num_rids, &user_rids,
+					       &name_types);
+
+		if (!NT_STATUS_IS_OK(result)) {
+			goto done;
+		}
+
+		result = rpccli_samr_open_user(pipe_hnd, mem_ctx, &domain_pol,
+					    MAXIMUM_ALLOWED_ACCESS,
+					    user_rids[0], &user_pol);
+
+		if (!NT_STATUS_IS_OK(result)) {
+			goto done;
+		}
+	}
+
+	/* Delete user */
+
+	result = rpccli_samr_delete_dom_user(pipe_hnd, mem_ctx, &user_pol);
+
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	/* Display results */
+	if (!NT_STATUS_IS_OK(result)) {
+		d_fprintf(stderr, "Failed to delete user account - %s\n", nt_errstr(result));
 	} else {
-		d_printf("Added user '%s'.\n", argv[0]);
+		d_printf("Deleted user account\n");
 	}
 
-	return 0;
+ done:
+	return result;
 }
 
 /** 
@@ -638,9 +825,14 @@
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	uint32 info_level = 7;
 	const char *old_name, *new_name;
-	struct samr_Ids user_rids, name_types;
-	struct lsa_String lsa_acct_name;
-	union samr_UserInfo *info = NULL;
+	uint32 *user_rid;
+	uint32 flags = 0x000003e8; /* Unknown */
+	uint32 num_rids, *name_types;
+	uint32 num_names = 1;
+	const char **names;
+	SAM_USERINFO_CTR *user_ctr;
+	SAM_USERINFO_CTR ctr;
+	SAM_USER_INFO_7 info7;
 
 	if (argc != 2) {
 		d_printf("Old and new username must be specified\n");
@@ -651,68 +843,62 @@
 	old_name = argv[0];
 	new_name = argv[1];
 
-	/* Get sam policy handle */
+	ZERO_STRUCT(ctr);
+	ZERO_STRUCT(user_ctr);
 
-	result = rpccli_samr_Connect2(pipe_hnd, mem_ctx,
-				      pipe_hnd->cli->desthost,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      &connect_pol);
-
+	/* Get sam policy handle */
+	
+	result = rpccli_samr_connect(pipe_hnd, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				  &connect_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 	
 	/* Get domain policy handle */
-
-	result = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					CONST_DISCARD(struct dom_sid2 *, domain_sid),
-					&domain_pol);
+	
+	result = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      domain_sid, &domain_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
-	init_lsa_String(&lsa_acct_name, old_name);
-
-	result = rpccli_samr_LookupNames(pipe_hnd, mem_ctx,
-					 &domain_pol,
-					 1,
-					 &lsa_acct_name,
-					 &user_rids,
-					 &name_types);
+	if ((names = TALLOC_ARRAY(mem_ctx, const char *, num_names)) == NULL) {
+		result = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+	names[0] = old_name;
+	result = rpccli_samr_lookup_names(pipe_hnd, mem_ctx, &domain_pol,
+				       flags, num_names, names,
+				       &num_rids, &user_rid, &name_types);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
 	/* Open domain user */
-	result = rpccli_samr_OpenUser(pipe_hnd, mem_ctx,
-				      &domain_pol,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      user_rids.ids[0],
-				      &user_pol);
+	result = rpccli_samr_open_user(pipe_hnd, mem_ctx, &domain_pol,
+				    MAXIMUM_ALLOWED_ACCESS, user_rid[0], &user_pol);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
 	/* Query user info */
-	result = rpccli_samr_QueryUserInfo(pipe_hnd, mem_ctx,
-					   &user_pol,
-					   info_level,
-					   &info);
+	result = rpccli_samr_query_userinfo(pipe_hnd, mem_ctx, &user_pol,
+					 info_level, &user_ctr);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
-	init_samr_user_info7(&info->info7, new_name);
+	ctr.switch_value = info_level;
+	ctr.info.id7 = &info7;
 
+	init_sam_user_info7(&info7, new_name);
+
 	/* Set new name */
-	result = rpccli_samr_SetUserInfo2(pipe_hnd, mem_ctx,
-					  &user_pol,
-					  info_level,
-					  info);
+	result = rpccli_samr_set_userinfo(pipe_hnd, mem_ctx, &user_pol,
+				       info_level, &cli->user_session_key, &ctr);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
@@ -756,26 +942,8 @@
 
 static int rpc_user_delete(int argc, const char **argv) 
 {
-	NET_API_STATUS status;
-
-	if (argc < 1) {
-		d_printf("User must be specified\n");
-		rpc_user_usage(argc, argv);
-		return 0;
-	}
-
-	status = NetUserDel(opt_host, argv[0]);
-
-	if (status != 0) {
-                d_fprintf(stderr, "Failed to delete user '%s' with: %s.\n",
-			  argv[0],
-			  libnetapi_get_error_string(netapi_ctx, status));
-		return -1;
-        } else {
-                d_printf("Deleted user '%s'.\n", argv[0]);
-        }
-
-	return 0;
+	return run_rpc_command(NULL, PI_SAMR, 0, rpc_user_del_internals,
+			       argc, argv);
 }
 
 /** 
@@ -804,11 +972,12 @@
 {
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	POLICY_HND connect_pol, domain_pol, user_pol;
+	SAM_USERINFO_CTR ctr;
+	SAM_USER_INFO_24 p24;
 	uchar pwbuf[516];
 	const char *user;
 	const char *new_password;
 	char *prompt = NULL;
-	union samr_UserInfo info;
 
 	if (argc < 1) {
 		d_printf("User must be specified\n");
@@ -828,20 +997,16 @@
 
 	/* Get sam policy and domain handles */
 
-	result = rpccli_samr_Connect2(pipe_hnd, mem_ctx,
-				      pipe_hnd->cli->desthost,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      &connect_pol);
+	result = rpccli_samr_connect(pipe_hnd, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				  &connect_pol);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
-	result = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					CONST_DISCARD(struct dom_sid2 *, domain_sid),
-					&domain_pol);
+	result = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      domain_sid, &domain_pol);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
@@ -850,26 +1015,21 @@
 	/* Get handle on user */
 
 	{
-		struct samr_Ids user_rids, name_types;
-		struct lsa_String lsa_acct_name;
+		uint32 *user_rids, num_rids, *name_types;
+		uint32 flags = 0x000003e8; /* Unknown */
 
-		init_lsa_String(&lsa_acct_name, user);
+		result = rpccli_samr_lookup_names(pipe_hnd, mem_ctx, &domain_pol,
+					       flags, 1, &user,
+					       &num_rids, &user_rids,
+					       &name_types);
 
-		result = rpccli_samr_LookupNames(pipe_hnd, mem_ctx,
-						 &domain_pol,
-						 1,
-						 &lsa_acct_name,
-						 &user_rids,
-						 &name_types);
 		if (!NT_STATUS_IS_OK(result)) {
 			goto done;
 		}
 
-		result = rpccli_samr_OpenUser(pipe_hnd, mem_ctx,
-					      &domain_pol,
-					      MAXIMUM_ALLOWED_ACCESS,
-					      user_rids.ids[0],
-					      &user_pol);
+		result = rpccli_samr_open_user(pipe_hnd, mem_ctx, &domain_pol,
+					    MAXIMUM_ALLOWED_ACCESS,
+					    user_rids[0], &user_pol);
 
 		if (!NT_STATUS_IS_OK(result)) {
 			goto done;
@@ -878,17 +1038,18 @@
 
 	/* Set password on account */
 
+	ZERO_STRUCT(ctr);
+	ZERO_STRUCT(p24);
+
 	encode_pw_buffer(pwbuf, new_password, STR_UNICODE);
 
-	init_samr_user_info24(&info.info24, pwbuf, 24);
+	init_sam_user_info24(&p24, (char *)pwbuf,24);
 
-	SamOEMhashBlob(info.info24.password.data, 516,
-		       &cli->user_session_key);
+	ctr.switch_value = 24;
+	ctr.info.id24 = &p24;
 
-	result = rpccli_samr_SetUserInfo2(pipe_hnd, mem_ctx,
-					  &user_pol,
-					  24,
-					  &info);
+	result = rpccli_samr_set_userinfo(pipe_hnd, mem_ctx, &user_pol, 24, 
+				       &cli->user_session_key, &ctr);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
@@ -943,80 +1104,62 @@
 {
 	POLICY_HND connect_pol, domain_pol, user_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+	uint32 *rids, num_rids, *name_types, num_names;
+	uint32 flags = 0x000003e8; /* Unknown */
 	int i;
-	struct samr_RidWithAttributeArray *rid_array = NULL;
-	struct lsa_Strings names;
-	struct samr_Ids types;
-	uint32_t *lrids = NULL;
-	struct samr_Ids rids, name_types;
-	struct lsa_String lsa_acct_name;
+	char **names;
+	DOM_GID *user_gids;
 
-
 	if (argc < 1) {
 		d_printf("User must be specified\n");
 		rpc_user_usage(argc, argv);
 		return NT_STATUS_OK;
 	}
 	/* Get sam policy handle */
-
-	result = rpccli_samr_Connect2(pipe_hnd, mem_ctx,
-				      pipe_hnd->cli->desthost,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      &connect_pol);
+	
+	result = rpccli_samr_connect(pipe_hnd, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				  &connect_pol);
 	if (!NT_STATUS_IS_OK(result)) goto done;
 	
 	/* Get domain policy handle */
-
-	result = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					CONST_DISCARD(struct dom_sid2 *, domain_sid),
-					&domain_pol);
+	
+	result = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      domain_sid, &domain_pol);
 	if (!NT_STATUS_IS_OK(result)) goto done;
 
 	/* Get handle on user */
 
-	init_lsa_String(&lsa_acct_name, argv[0]);
+	result = rpccli_samr_lookup_names(pipe_hnd, mem_ctx, &domain_pol,
+				       flags, 1, &argv[0],
+				       &num_rids, &rids, &name_types);
 
-	result = rpccli_samr_LookupNames(pipe_hnd, mem_ctx,
-					 &domain_pol,
-					 1,
-					 &lsa_acct_name,
-					 &rids,
-					 &name_types);
-
 	if (!NT_STATUS_IS_OK(result)) goto done;
 
-	result = rpccli_samr_OpenUser(pipe_hnd, mem_ctx,
-				      &domain_pol,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      rids.ids[0],
-				      &user_pol);
+	result = rpccli_samr_open_user(pipe_hnd, mem_ctx, &domain_pol,
+				    MAXIMUM_ALLOWED_ACCESS,
+				    rids[0], &user_pol);
 	if (!NT_STATUS_IS_OK(result)) goto done;
 
-	result = rpccli_samr_GetGroupsForUser(pipe_hnd, mem_ctx,
-					      &user_pol,
-					      &rid_array);
+	result = rpccli_samr_query_usergroups(pipe_hnd, mem_ctx, &user_pol,
+					   &num_rids, &user_gids);
 
 	if (!NT_STATUS_IS_OK(result)) goto done;
 
 	/* Look up rids */
 
-	if (rid_array->count) {
-		if ((lrids = TALLOC_ARRAY(mem_ctx, uint32, rid_array->count)) == NULL) {
+	if (num_rids) {
+		if ((rids = TALLOC_ARRAY(mem_ctx, uint32, num_rids)) == NULL) {
 			result = NT_STATUS_NO_MEMORY;
 			goto done;
 		}
 
-		for (i = 0; i < rid_array->count; i++)
-			lrids[i] = rid_array->rids[i].rid;
+		for (i = 0; i < num_rids; i++)
+                	rids[i] = user_gids[i].g_rid;
 
-		result = rpccli_samr_LookupRids(pipe_hnd, mem_ctx,
-						&domain_pol,
-						rid_array->count,
-						lrids,
-						&names,
-						&types);
+		result = rpccli_samr_lookup_rids(pipe_hnd, mem_ctx, &domain_pol,
+				      	      num_rids, rids,
+				      	      &num_names, &names, &name_types);
 
 		if (!NT_STATUS_IS_OK(result)) {
 			goto done;
@@ -1024,8 +1167,8 @@
 
 		/* Display results */
 
-		for (i = 0; i < names.count; i++)
-			printf("%s\n", names.names[i].string);
+		for (i = 0; i < num_names; i++)
+			printf("%s\n", names[i]);
 	}
  done:
 	return result;
@@ -1074,60 +1217,51 @@
 	POLICY_HND connect_pol, domain_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	uint32 start_idx=0, num_entries, i, loop_count = 0;
+	SAM_DISPINFO_CTR ctr;
+	SAM_DISPINFO_1 info1;
 
 	/* Get sam policy handle */
-
-	result = rpccli_samr_Connect2(pipe_hnd, mem_ctx,
-				      pipe_hnd->cli->desthost,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      &connect_pol);
+	
+	result = rpccli_samr_connect(pipe_hnd, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				  &connect_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 	
 	/* Get domain policy handle */
-
-	result = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					CONST_DISCARD(struct dom_sid2 *, domain_sid),
-					&domain_pol);
+	
+	result = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      domain_sid, &domain_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
 	/* Query domain users */
+	ZERO_STRUCT(ctr);
+	ZERO_STRUCT(info1);
+	ctr.sam.info1 = &info1;
 	if (opt_long_list_entries)
 		d_printf("\nUser name             Comment"\
 			 "\n-----------------------------\n");
 	do {
-		const char *user = NULL;
-		const char *desc = NULL;
+		fstring user, desc;
 		uint32 max_entries, max_size;
-		uint32_t total_size, returned_size;
-		union samr_DispInfo info;
 
 		get_query_dispinfo_params(
 			loop_count, &max_entries, &max_size);
 
-		result = rpccli_samr_QueryDisplayInfo(pipe_hnd, mem_ctx,
-						      &domain_pol,
-						      1,
-						      start_idx,
-						      max_entries,
-						      max_size,
-						      &total_size,
-						      &returned_size,
-						      &info);
+		result = rpccli_samr_query_dispinfo(pipe_hnd, mem_ctx, &domain_pol,
+						 &start_idx, 1, &num_entries,
+						 max_entries, max_size, &ctr);
 		loop_count++;
-		start_idx += info.info1.count;
-		num_entries = info.info1.count;
 
 		for (i = 0; i < num_entries; i++) {
-			user = info.info1.entries[i].account_name.string;
+			unistr2_to_ascii(user, &(&ctr.sam.info1->str[i])->uni_acct_name, sizeof(user)-1);
+			if (opt_long_list_entries) 
+				unistr2_to_ascii(desc, &(&ctr.sam.info1->str[i])->uni_acct_desc, sizeof(desc)-1);
+			
 			if (opt_long_list_entries)
-				desc = info.info1.entries[i].description.string;
-			if (opt_long_list_entries)
 				printf("%-21.21s %s\n", user, desc);
 			else
 				printf("%s\n", user);
@@ -1147,8 +1281,6 @@
 
 int net_rpc_user(int argc, const char **argv) 
 {
-	NET_API_STATUS status;
-
 	struct functable func[] = {
 		{"add", rpc_user_add},
 		{"info", rpc_user_info},
@@ -1157,14 +1289,7 @@
 		{"rename", rpc_user_rename},
 		{NULL, NULL}
 	};
-
-	status = libnetapi_init(&netapi_ctx);
-	if (status != 0) {
-		return -1;
-	}
-	libnetapi_set_username(netapi_ctx, opt_user_name);
-	libnetapi_set_password(netapi_ctx, opt_password);
-
+	
 	if (argc == 0) {
 		return run_rpc_command(NULL,PI_SAMR, 0, 
 				       rpc_user_list_internals,
@@ -1202,8 +1327,9 @@
 					   TALLOC_CTX *mem_ctx,
 					   struct rpc_sh_ctx *ctx,
 					   struct rpc_pipe_client *pipe_hnd,
-					   POLICY_HND *user_hnd,
+					   const POLICY_HND *user_hnd,
 					   int argc, const char **argv))
+					   
 {
 	POLICY_HND connect_pol, domain_pol, user_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
@@ -1241,28 +1367,22 @@
 		goto done;
 	}
 
-	result = rpccli_samr_Connect2(pipe_hnd, mem_ctx,
-				      pipe_hnd->cli->desthost,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      &connect_pol);
+	result = rpccli_samr_connect(pipe_hnd, mem_ctx,
+				     MAXIMUM_ALLOWED_ACCESS, &connect_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
-	result = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					ctx->domain_sid,
-					&domain_pol);
+	result = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &connect_pol,
+					 MAXIMUM_ALLOWED_ACCESS,
+					 ctx->domain_sid, &domain_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
-	result = rpccli_samr_OpenUser(pipe_hnd, mem_ctx,
-				      &domain_pol,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      rid,
-				      &user_pol);
+	result = rpccli_samr_open_user(pipe_hnd, mem_ctx, &domain_pol,
+				       MAXIMUM_ALLOWED_ACCESS,
+				       rid, &user_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
@@ -1271,13 +1391,13 @@
 
  done:
 	if (is_valid_policy_hnd(&user_pol)) {
-		rpccli_samr_Close(pipe_hnd, mem_ctx, &user_pol);
+		rpccli_samr_close(pipe_hnd, mem_ctx, &user_pol);
 	}
 	if (is_valid_policy_hnd(&domain_pol)) {
-		rpccli_samr_Close(pipe_hnd, mem_ctx, &domain_pol);
+		rpccli_samr_close(pipe_hnd, mem_ctx, &domain_pol);
 	}
 	if (is_valid_policy_hnd(&connect_pol)) {
-		rpccli_samr_Close(pipe_hnd, mem_ctx, &connect_pol);
+		rpccli_samr_close(pipe_hnd, mem_ctx, &connect_pol);
 	}
 	return result;
 }
@@ -1285,29 +1405,29 @@
 static NTSTATUS rpc_sh_user_show_internals(TALLOC_CTX *mem_ctx,
 					   struct rpc_sh_ctx *ctx,
 					   struct rpc_pipe_client *pipe_hnd,
-					   POLICY_HND *user_hnd,
+					   const POLICY_HND *user_hnd,
 					   int argc, const char **argv)
 {
 	NTSTATUS result;
-	union samr_UserInfo *info = NULL;
+	SAM_USERINFO_CTR *ctr;
+	SAM_USER_INFO_21 *info;
 
 	if (argc != 0) {
 		d_fprintf(stderr, "usage: %s show <username>\n", ctx->whoami);
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-	result = rpccli_samr_QueryUserInfo(pipe_hnd, mem_ctx,
-					   user_hnd,
-					   21,
-					   &info);
+	result = rpccli_samr_query_userinfo(pipe_hnd, mem_ctx, user_hnd,
+					    21, &ctr);
 	if (!NT_STATUS_IS_OK(result)) {
 		return result;
 	}
 
-	d_printf("user rid: %d, group rid: %d\n",
-		info->info21.rid,
-		info->info21.primary_gid);
+	info = ctr->info.id21;
 
+	d_printf("user rid: %d, group rid: %d\n", info->user_rid,
+		 info->group_rid);
+
 	return result;
 }
 
@@ -1322,25 +1442,27 @@
 
 #define FETCHSTR(name, rec) \
 do { if (strequal(ctx->thiscmd, name)) { \
-	oldval = talloc_strdup(mem_ctx, info->info21.rec.string); } \
+	oldval = rpcstr_pull_unistr2_talloc(mem_ctx, &usr->uni_##rec); } \
 } while (0);
 
 #define SETSTR(name, rec, flag) \
 do { if (strequal(ctx->thiscmd, name)) { \
-	init_lsa_String(&(info->info21.rec), argv[0]); \
-	info->info21.fields_present |= SAMR_FIELD_##flag; } \
+	init_unistr2(&usr->uni_##rec, argv[0], UNI_STR_TERMINATE); \
+	init_uni_hdr(&usr->hdr_##rec, &usr->uni_##rec); \
+	usr->fields_present |= ACCT_##flag; } \
 } while (0);
 
 static NTSTATUS rpc_sh_user_str_edit_internals(TALLOC_CTX *mem_ctx,
 					       struct rpc_sh_ctx *ctx,
 					       struct rpc_pipe_client *pipe_hnd,
-					       POLICY_HND *user_hnd,
+					       const POLICY_HND *user_hnd,
 					       int argc, const char **argv)
 {
 	NTSTATUS result;
+	SAM_USERINFO_CTR *ctr;
+	SAM_USER_INFO_21 *usr;
 	const char *username;
 	const char *oldval = "";
-	union samr_UserInfo *info = NULL;
 
 	if (argc > 1) {
 		d_fprintf(stderr, "usage: %s <username> [new value|NULL]\n",
@@ -1348,45 +1470,44 @@
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-	result = rpccli_samr_QueryUserInfo(pipe_hnd, mem_ctx,
-					   user_hnd,
-					   21,
-					   &info);
+	result = rpccli_samr_query_userinfo(pipe_hnd, mem_ctx, user_hnd,
+					    21, &ctr);
 	if (!NT_STATUS_IS_OK(result)) {
 		return result;
 	}
 
-	username = talloc_strdup(mem_ctx, info->info21.account_name.string);
+	usr = ctr->info.id21;
 
+	username = rpcstr_pull_unistr2_talloc(mem_ctx, &usr->uni_user_name);
+
 	FETCHSTR("fullname", full_name);
-	FETCHSTR("homedir", home_directory);
-	FETCHSTR("homedrive", home_drive);
+	FETCHSTR("homedir", home_dir);
+	FETCHSTR("homedrive", dir_drive);
 	FETCHSTR("logonscript", logon_script);
 	FETCHSTR("profilepath", profile_path);
-	FETCHSTR("description", description);
+	FETCHSTR("description", acct_desc);
 
 	if (argc == 0) {
 		d_printf("%s's %s: [%s]\n", username, ctx->thiscmd, oldval);
 		goto done;
 	}
 
+	ZERO_STRUCTP(usr);
+
 	if (strcmp(argv[0], "NULL") == 0) {
 		argv[0] = "";
 	}
 
-	ZERO_STRUCT(info->info21);
-
 	SETSTR("fullname", full_name, FULL_NAME);
-	SETSTR("homedir", home_directory, HOME_DIRECTORY);
-	SETSTR("homedrive", home_drive, HOME_DRIVE);
+	SETSTR("homedir", home_dir, HOME_DIR);
+	SETSTR("homedrive", dir_drive, HOME_DRIVE);
 	SETSTR("logonscript", logon_script, LOGON_SCRIPT);
-	SETSTR("profilepath", profile_path, PROFILE_PATH);
-	SETSTR("description", description, DESCRIPTION);
+	SETSTR("profilepath", profile_path, PROFILE);
+	SETSTR("description", acct_desc, DESCRIPTION);
 
-	result = rpccli_samr_SetUserInfo(pipe_hnd, mem_ctx,
-					 user_hnd,
-					 21,
-					 info);
+	result = rpccli_samr_set_userinfo2(
+		pipe_hnd, mem_ctx, user_hnd, 21,
+		&pipe_hnd->cli->user_session_key, ctr);
 
 	d_printf("Set %s's %s from [%s] to [%s]\n", username,
 		 ctx->thiscmd, oldval, argv[0]);
@@ -1417,15 +1538,16 @@
 static NTSTATUS rpc_sh_user_flag_edit_internals(TALLOC_CTX *mem_ctx,
 						struct rpc_sh_ctx *ctx,
 						struct rpc_pipe_client *pipe_hnd,
-						POLICY_HND *user_hnd,
+						const POLICY_HND *user_hnd,
 						int argc, const char **argv)
 {
 	NTSTATUS result;
+	SAM_USERINFO_CTR *ctr;
+	SAM_USER_INFO_21 *usr;
 	const char *username;
 	const char *oldval = "unknown";
 	uint32 oldflags, newflags;
-	bool newval;
-	union samr_UserInfo *info = NULL;
+	BOOL newval;
 
 	if ((argc > 1) ||
 	    ((argc == 1) && !strequal(argv[0], "yes") &&
@@ -1437,18 +1559,18 @@
 
 	newval = strequal(argv[0], "yes");
 
-	result = rpccli_samr_QueryUserInfo(pipe_hnd, mem_ctx,
-					   user_hnd,
-					   21,
-					   &info);
+	result = rpccli_samr_query_userinfo(pipe_hnd, mem_ctx, user_hnd,
+					    21, &ctr);
 	if (!NT_STATUS_IS_OK(result)) {
 		return result;
 	}
 
-	username = talloc_strdup(mem_ctx, info->info21.account_name.string);
-	oldflags = info->info21.acct_flags;
-	newflags = info->info21.acct_flags;
+	usr = ctr->info.id21;
 
+	username = rpcstr_pull_unistr2_talloc(mem_ctx, &usr->uni_user_name);
+	oldflags = usr->acb_info;
+	newflags = usr->acb_info;
+
 	HANDLEFLG("disabled", DISABLED);
 	HANDLEFLG("pwnotreq", PWNOTREQ);
 	HANDLEFLG("autolock", AUTOLOCK);
@@ -1459,15 +1581,14 @@
 		goto done;
 	}
 
-	ZERO_STRUCT(info->info21);
+	ZERO_STRUCTP(usr);
 
-	info->info21.acct_flags = newflags;
-	info->info21.fields_present = SAMR_FIELD_ACCT_FLAGS;
+	usr->acb_info = newflags;
+	usr->fields_present = ACCT_FLAGS;
 
-	result = rpccli_samr_SetUserInfo(pipe_hnd, mem_ctx,
-					 user_hnd,
-					 21,
-					 info);
+	result = rpccli_samr_set_userinfo2(
+		pipe_hnd, mem_ctx, user_hnd, 21,
+		&pipe_hnd->cli->user_session_key, ctr);
 
 	if (NT_STATUS_IS_OK(result)) {
 		d_printf("Set %s's %s flag from [%s] to [%s]\n", username,
@@ -1591,77 +1712,68 @@
 					const char **argv)
 {
 	POLICY_HND connect_pol, domain_pol, group_pol, user_pol;
-	bool group_is_primary = False;
+	BOOL group_is_primary = False;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	uint32_t group_rid;
-	struct samr_RidTypeArray *rids = NULL;
+
+	uint32 *group_rids, num_rids, *name_types, num_members, 
+               *group_attrs, group_rid;
+	uint32 flags = 0x000003e8; /* Unknown */
 	/* char **names; */
 	int i;
 	/* DOM_GID *user_gids; */
+	SAM_USERINFO_CTR *user_ctr;
+	fstring temp;
 
-	struct samr_Ids group_rids, name_types;
-	struct lsa_String lsa_acct_name;
-	union samr_UserInfo *info = NULL;
-
 	if (argc < 1) {
         	d_printf("specify group\n");
 		rpc_group_usage(argc,argv);
 		return NT_STATUS_OK; /* ok? */
 	}
 
-	result = rpccli_samr_Connect2(pipe_hnd, mem_ctx,
-				      pipe_hnd->cli->desthost,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      &connect_pol);
+        result = rpccli_samr_connect(pipe_hnd, mem_ctx, MAXIMUM_ALLOWED_ACCESS,
+                                  &connect_pol);
 
         if (!NT_STATUS_IS_OK(result)) {
-		d_fprintf(stderr, "Request samr_Connect2 failed\n");
+		d_fprintf(stderr, "Request samr_connect failed\n");
         	goto done;
         }
-
-        result = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					CONST_DISCARD(struct dom_sid2 *, domain_sid),
-					&domain_pol);
-
+        
+        result = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &connect_pol,
+                                      MAXIMUM_ALLOWED_ACCESS,
+                                      domain_sid, &domain_pol);
+        
         if (!NT_STATUS_IS_OK(result)) {
 		d_fprintf(stderr, "Request open_domain failed\n");
         	goto done;
         }
+	
+	result = rpccli_samr_lookup_names(pipe_hnd, mem_ctx, &domain_pol,
+				       flags, 1, &argv[0],
+				       &num_rids, &group_rids,
+				       &name_types);
 
-	init_lsa_String(&lsa_acct_name, argv[0]);
-
-	result = rpccli_samr_LookupNames(pipe_hnd, mem_ctx,
-					 &domain_pol,
-					 1,
-					 &lsa_acct_name,
-					 &group_rids,
-					 &name_types);
 	if (!NT_STATUS_IS_OK(result)) {
 		d_fprintf(stderr, "Lookup of '%s' failed\n",argv[0]);
    		goto done;
 	}
 
-	switch (name_types.ids[0])
+	switch (name_types[0])
 	{
 	case SID_NAME_DOM_GRP:
-		result = rpccli_samr_OpenGroup(pipe_hnd, mem_ctx,
-					       &domain_pol,
-					       MAXIMUM_ALLOWED_ACCESS,
-					       group_rids.ids[0],
-					       &group_pol);
+		result = rpccli_samr_open_group(pipe_hnd, mem_ctx, &domain_pol,
+					     MAXIMUM_ALLOWED_ACCESS,
+					     group_rids[0], &group_pol);
 		if (!NT_STATUS_IS_OK(result)) {
 			d_fprintf(stderr, "Request open_group failed");
    			goto done;
 		}
-
-		group_rid = group_rids.ids[0];
-
-		result = rpccli_samr_QueryGroupMember(pipe_hnd, mem_ctx,
-						      &group_pol,
-						      &rids);
-
+                
+		group_rid = group_rids[0];
+                
+		result = rpccli_samr_query_groupmem(pipe_hnd, mem_ctx, &group_pol,
+                                 &num_members, &group_rids,
+                                 &group_attrs);
+		
 		if (!NT_STATUS_IS_OK(result)) {
 			d_fprintf(stderr, "Unable to query group members of %s",argv[0]);
    			goto done;
@@ -1669,44 +1781,40 @@
 		
 		if (opt_verbose) {
 			d_printf("Domain Group %s (rid: %d) has %d members\n",
-				argv[0],group_rid, rids->count);
+				argv[0],group_rid,num_members);
 		}
 
 		/* Check if group is anyone's primary group */
-                for (i = 0; i < rids->count; i++)
+                for (i = 0; i < num_members; i++)
 		{
-	                result = rpccli_samr_OpenUser(pipe_hnd, mem_ctx,
-						      &domain_pol,
-						      MAXIMUM_ALLOWED_ACCESS,
-						      rids->rids[i],
-						      &user_pol);
+	                result = rpccli_samr_open_user(pipe_hnd, mem_ctx, &domain_pol,
+					            MAXIMUM_ALLOWED_ACCESS,
+					            group_rids[i], &user_pol);
 	
 	        	if (!NT_STATUS_IS_OK(result)) {
-				d_fprintf(stderr, "Unable to open group member %d\n",
-					rids->rids[i]);
+				d_fprintf(stderr, "Unable to open group member %d\n",group_rids[i]);
 	           		goto done;
 	        	}
+	
+	                ZERO_STRUCT(user_ctr);
 
-			result = rpccli_samr_QueryUserInfo(pipe_hnd, mem_ctx,
-							   &user_pol,
-							   21,
-							   &info);
-
+	                result = rpccli_samr_query_userinfo(pipe_hnd, mem_ctx, &user_pol,
+	                                                 21, &user_ctr);
+	
 	        	if (!NT_STATUS_IS_OK(result)) {
-				d_fprintf(stderr, "Unable to lookup userinfo for group member %d\n",
-					rids->rids[i]);
+				d_fprintf(stderr, "Unable to lookup userinfo for group member %d\n",group_rids[i]);
 	           		goto done;
 	        	}
-
-			if (info->info21.primary_gid == group_rid) {
-				if (opt_verbose) {
-					d_printf("Group is primary group of %s\n",
-						info->info21.account_name.string);
-				}
+	
+			if (user_ctr->info.id21->group_rid == group_rid) {
+				unistr2_to_ascii(temp, &(user_ctr->info.id21)->uni_user_name, 
+						sizeof(temp)-1);
+				if (opt_verbose) 
+					d_printf("Group is primary group of %s\n",temp);
 				group_is_primary = True;
                         }
 
-			rpccli_samr_Close(pipe_hnd, mem_ctx, &user_pol);
+			rpccli_samr_close(pipe_hnd, mem_ctx, &user_pol);
 		}
                 
 		if (group_is_primary) {
@@ -1717,14 +1825,11 @@
 		}
      
 		/* remove all group members */
-		for (i = 0; i < rids->count; i++)
+		for (i = 0; i < num_members; i++)
 		{
 			if (opt_verbose) 
-				d_printf("Remove group member %d...",
-					rids->rids[i]);
-			result = rpccli_samr_DeleteGroupMember(pipe_hnd, mem_ctx,
-							       &group_pol,
-							       rids->rids[i]);
+				d_printf("Remove group member %d...",group_rids[i]);
+			result = rpccli_samr_del_groupmem(pipe_hnd, mem_ctx, &group_pol, group_rids[i]);
 
 			if (NT_STATUS_IS_OK(result)) {
 				if (opt_verbose)
@@ -1736,29 +1841,25 @@
 			}	
 		}
 
-		result = rpccli_samr_DeleteDomainGroup(pipe_hnd, mem_ctx,
-						       &group_pol);
+		result = rpccli_samr_delete_dom_group(pipe_hnd, mem_ctx, &group_pol);
 
 		break;
 	/* removing a local group is easier... */
 	case SID_NAME_ALIAS:
-		result = rpccli_samr_OpenAlias(pipe_hnd, mem_ctx,
-					       &domain_pol,
-					       MAXIMUM_ALLOWED_ACCESS,
-					       group_rids.ids[0],
-					       &group_pol);
+		result = rpccli_samr_open_alias(pipe_hnd, mem_ctx, &domain_pol,
+					     MAXIMUM_ALLOWED_ACCESS,
+					     group_rids[0], &group_pol);
 
 		if (!NT_STATUS_IS_OK(result)) {
 			d_fprintf(stderr, "Request open_alias failed\n");
    			goto done;
 		}
-
-		result = rpccli_samr_DeleteDomAlias(pipe_hnd, mem_ctx,
-						    &group_pol);
+		
+		result = rpccli_samr_delete_dom_alias(pipe_hnd, mem_ctx, &group_pol);
 		break;
 	default:
 		d_fprintf(stderr, "%s is of type %s. This command is only for deleting local or global groups\n",
-			argv[0],sid_type_lookup(name_types.ids[0]));
+			argv[0],sid_type_lookup(name_types[0]));
 		result = NT_STATUS_UNSUCCESSFUL;
 		goto done;
 	}
@@ -1766,7 +1867,7 @@
 	
 	if (NT_STATUS_IS_OK(result)) {
 		if (opt_verbose)
-			d_printf("Deleted %s '%s'\n",sid_type_lookup(name_types.ids[0]),argv[0]);
+			d_printf("Deleted %s '%s'\n",sid_type_lookup(name_types[0]),argv[0]);
 	} else {
 		d_fprintf(stderr, "Deleting of %s failed: %s\n",argv[0],
 			get_friendly_nt_error_msg(result));
@@ -1793,9 +1894,7 @@
 {
 	POLICY_HND connect_pol, domain_pol, group_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	union samr_GroupInfo group_info;
-	struct lsa_String grp_name;
-	uint32_t rid = 0;
+	GROUP_INFO_CTR group_info;
 
 	if (argc != 1) {
 		d_printf("Group name must be specified\n");
@@ -1803,45 +1902,34 @@
 		return NT_STATUS_OK;
 	}
 
-	init_lsa_String(&grp_name, argv[0]);
-
 	/* Get sam policy handle */
-
-	result = rpccli_samr_Connect2(pipe_hnd, mem_ctx,
-				      pipe_hnd->cli->desthost,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      &connect_pol);
+	
+	result = rpccli_samr_connect(pipe_hnd, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				  &connect_pol);
 	if (!NT_STATUS_IS_OK(result)) goto done;
 	
 	/* Get domain policy handle */
-
-	result = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					CONST_DISCARD(struct dom_sid2 *, domain_sid),
-					&domain_pol);
+	
+	result = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      domain_sid, &domain_pol);
 	if (!NT_STATUS_IS_OK(result)) goto done;
 
 	/* Create the group */
 
-	result = rpccli_samr_CreateDomainGroup(pipe_hnd, mem_ctx,
-					       &domain_pol,
-					       &grp_name,
-					       MAXIMUM_ALLOWED_ACCESS,
-					       &group_pol,
-					       &rid);
+	result = rpccli_samr_create_dom_group(pipe_hnd, mem_ctx, &domain_pol,
+					   argv[0], MAXIMUM_ALLOWED_ACCESS,
+					   &group_pol);
 	if (!NT_STATUS_IS_OK(result)) goto done;
 
 	if (strlen(opt_comment) == 0) goto done;
 
 	/* We've got a comment to set */
 
-	init_lsa_String(&group_info.description, opt_comment);
+	group_info.switch_value1 = 4;
+	init_samr_group_info4(&group_info.group.info4, opt_comment);
 
-	result = rpccli_samr_SetGroupInfo(pipe_hnd, mem_ctx,
-					  &group_pol,
-					  4,
-					  &group_info);
+	result = rpccli_samr_set_groupinfo(pipe_hnd, mem_ctx, &group_pol, &group_info);
 	if (!NT_STATUS_IS_OK(result)) goto done;
 	
  done:
@@ -1863,9 +1951,7 @@
 {
 	POLICY_HND connect_pol, domain_pol, alias_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	union samr_AliasInfo alias_info;
-	struct lsa_String alias_name;
-	uint32_t rid = 0;
+	ALIAS_INFO_CTR alias_info;
 
 	if (argc != 1) {
 		d_printf("Alias name must be specified\n");
@@ -1873,46 +1959,33 @@
 		return NT_STATUS_OK;
 	}
 
-	init_lsa_String(&alias_name, argv[0]);
-
 	/* Get sam policy handle */
-
-	result = rpccli_samr_Connect2(pipe_hnd, mem_ctx,
-				      pipe_hnd->cli->desthost,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      &connect_pol);
+	
+	result = rpccli_samr_connect(pipe_hnd, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				  &connect_pol);
 	if (!NT_STATUS_IS_OK(result)) goto done;
 	
 	/* Get domain policy handle */
-
-	result = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					CONST_DISCARD(struct dom_sid2 *, domain_sid),
-					&domain_pol);
+	
+	result = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      domain_sid, &domain_pol);
 	if (!NT_STATUS_IS_OK(result)) goto done;
 
 	/* Create the group */
 
-	result = rpccli_samr_CreateDomAlias(pipe_hnd, mem_ctx,
-					    &domain_pol,
-					    &alias_name,
-					    MAXIMUM_ALLOWED_ACCESS,
-					    &alias_pol,
-					    &rid);
+	result = rpccli_samr_create_dom_alias(pipe_hnd, mem_ctx, &domain_pol,
+					   argv[0], &alias_pol);
 	if (!NT_STATUS_IS_OK(result)) goto done;
 
 	if (strlen(opt_comment) == 0) goto done;
 
 	/* We've got a comment to set */
 
-	init_lsa_String(&alias_info.description, opt_comment);
+	alias_info.level = 3;
+	init_samr_alias_info3(&alias_info.alias.info3, opt_comment);
 
-	result = rpccli_samr_SetAliasInfo(pipe_hnd, mem_ctx,
-					  &alias_pol,
-					  3,
-					  &alias_info);
-
+	result = rpccli_samr_set_aliasinfo(pipe_hnd, mem_ctx, &alias_pol, &alias_info);
 	if (!NT_STATUS_IS_OK(result)) goto done;
 	
  done:
@@ -1961,14 +2034,14 @@
 	}
 
 	result = rpccli_lsa_lookup_names(pipe_hnd, mem_ctx, &lsa_pol, 1,
-				      &name, NULL, 1, &sids, &types);
+				      &name, NULL, &sids, &types);
 
 	if (NT_STATUS_IS_OK(result)) {
 		sid_copy(sid, &sids[0]);
 		*type = types[0];
 	}
 
-	rpccli_lsa_Close(pipe_hnd, mem_ctx, &lsa_pol);
+	rpccli_lsa_close(pipe_hnd, mem_ctx, &lsa_pol);
 
  done:
 	if (pipe_hnd) {
@@ -2001,8 +2074,9 @@
 	uint32 group_rid;
 	POLICY_HND group_pol;
 
-	struct samr_Ids rids, rid_types;
-	struct lsa_String lsa_acct_name;
+	uint32 num_rids;
+	uint32 *rids = NULL;
+	uint32 *rid_types = NULL;
 
 	DOM_SID sid;
 
@@ -2012,56 +2086,42 @@
 		return NT_STATUS_UNSUCCESSFUL;
 	}
 
-	/* Get sam policy handle */
-	result = rpccli_samr_Connect2(pipe_hnd, mem_ctx,
-				      pipe_hnd->cli->desthost,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      &connect_pol);
+	/* Get sam policy handle */	
+	result = rpccli_samr_connect(pipe_hnd, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				  &connect_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		return result;
 	}
-
+	
 	/* Get domain policy handle */
-	result = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					&sid,
-					&domain_pol);
+	result = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      &sid, &domain_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		return result;
 	}
 
-	init_lsa_String(&lsa_acct_name, member);
+	result = rpccli_samr_lookup_names(pipe_hnd, mem_ctx, &domain_pol, 1000,
+				       1, &member,
+				       &num_rids, &rids, &rid_types);
 
-	result = rpccli_samr_LookupNames(pipe_hnd, mem_ctx,
-					 &domain_pol,
-					 1,
-					 &lsa_acct_name,
-					 &rids,
-					 &rid_types);
-
 	if (!NT_STATUS_IS_OK(result)) {
 		d_fprintf(stderr, "Could not lookup up group member %s\n", member);
 		goto done;
 	}
 
-	result = rpccli_samr_OpenGroup(pipe_hnd, mem_ctx,
-				       &domain_pol,
-				       MAXIMUM_ALLOWED_ACCESS,
-				       group_rid,
-				       &group_pol);
+	result = rpccli_samr_open_group(pipe_hnd, mem_ctx, &domain_pol,
+				     MAXIMUM_ALLOWED_ACCESS,
+				     group_rid, &group_pol);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
-	result = rpccli_samr_AddGroupMember(pipe_hnd, mem_ctx,
-					    &group_pol,
-					    rids.ids[0],
-					    0x0005); /* unknown flags */
+	result = rpccli_samr_add_groupmem(pipe_hnd, mem_ctx, &group_pol, rids[0]);
 
  done:
-	rpccli_samr_Close(pipe_hnd, mem_ctx, &connect_pol);
+	rpccli_samr_close(pipe_hnd, mem_ctx, &connect_pol);
 	return result;
 }
 
@@ -2094,45 +2154,37 @@
 		return result;
 	}
 
-	/* Get sam policy handle */
-	result = rpccli_samr_Connect2(pipe_hnd, mem_ctx,
-				      pipe_hnd->cli->desthost,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      &connect_pol);
+	/* Get sam policy handle */	
+	result = rpccli_samr_connect(pipe_hnd, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				  &connect_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
-
+	
 	/* Get domain policy handle */
-	result = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					&sid,
-					&domain_pol);
+	result = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      &sid, &domain_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
-	result = rpccli_samr_OpenAlias(pipe_hnd, mem_ctx,
-				       &domain_pol,
-				       MAXIMUM_ALLOWED_ACCESS,
-				       alias_rid,
-				       &alias_pol);
+	result = rpccli_samr_open_alias(pipe_hnd, mem_ctx, &domain_pol,
+				     MAXIMUM_ALLOWED_ACCESS,
+				     alias_rid, &alias_pol);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		return result;
 	}
 
-	result = rpccli_samr_AddAliasMember(pipe_hnd, mem_ctx,
-					    &alias_pol,
-					    &member_sid);
+	result = rpccli_samr_add_aliasmem(pipe_hnd, mem_ctx, &alias_pol, &member_sid);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		return result;
 	}
 
  done:
-	rpccli_samr_Close(pipe_hnd, mem_ctx, &connect_pol);
+	rpccli_samr_close(pipe_hnd, mem_ctx, &connect_pol);
 	return result;
 }
 
@@ -2203,8 +2255,9 @@
 	uint32 group_rid;
 	POLICY_HND group_pol;
 
-	struct samr_Ids rids, rid_types;
-	struct lsa_String lsa_acct_name;
+	uint32 num_rids;
+	uint32 *rids = NULL;
+	uint32 *rid_types = NULL;
 
 	DOM_SID sid;
 
@@ -2213,51 +2266,39 @@
 	if (!sid_split_rid(&sid, &group_rid))
 		return NT_STATUS_UNSUCCESSFUL;
 
-	/* Get sam policy handle */
-	result = rpccli_samr_Connect2(pipe_hnd, mem_ctx,
-				      pipe_hnd->cli->desthost,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      &connect_pol);
+	/* Get sam policy handle */	
+	result = rpccli_samr_connect(pipe_hnd, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				  &connect_pol);
 	if (!NT_STATUS_IS_OK(result))
 		return result;
-
+	
 	/* Get domain policy handle */
-	result = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					&sid,
-					&domain_pol);
+	result = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      &sid, &domain_pol);
 	if (!NT_STATUS_IS_OK(result))
 		return result;
 
-	init_lsa_String(&lsa_acct_name, member);
+	result = rpccli_samr_lookup_names(pipe_hnd, mem_ctx, &domain_pol, 1000,
+				       1, &member,
+				       &num_rids, &rids, &rid_types);
 
-	result = rpccli_samr_LookupNames(pipe_hnd, mem_ctx,
-					 &domain_pol,
-					 1,
-					 &lsa_acct_name,
-					 &rids,
-					 &rid_types);
 	if (!NT_STATUS_IS_OK(result)) {
 		d_fprintf(stderr, "Could not lookup up group member %s\n", member);
 		goto done;
 	}
 
-	result = rpccli_samr_OpenGroup(pipe_hnd, mem_ctx,
-				       &domain_pol,
-				       MAXIMUM_ALLOWED_ACCESS,
-				       group_rid,
-				       &group_pol);
+	result = rpccli_samr_open_group(pipe_hnd, mem_ctx, &domain_pol,
+				     MAXIMUM_ALLOWED_ACCESS,
+				     group_rid, &group_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
-	result = rpccli_samr_DeleteGroupMember(pipe_hnd, mem_ctx,
-					       &group_pol,
-					       rids.ids[0]);
+	result = rpccli_samr_del_groupmem(pipe_hnd, mem_ctx, &group_pol, rids[0]);
 
  done:
-	rpccli_samr_Close(pipe_hnd, mem_ctx, &connect_pol);
+	rpccli_samr_close(pipe_hnd, mem_ctx, &connect_pol);
 	return result;
 }
 
@@ -2289,43 +2330,35 @@
 		return result;
 	}
 
-	/* Get sam policy handle */
-	result = rpccli_samr_Connect2(pipe_hnd, mem_ctx,
-				      pipe_hnd->cli->desthost,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      &connect_pol);
+	/* Get sam policy handle */	
+	result = rpccli_samr_connect(pipe_hnd, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				  &connect_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
-
+	
 	/* Get domain policy handle */
-	result = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					&sid,
-					&domain_pol);
+	result = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      &sid, &domain_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
-	result = rpccli_samr_OpenAlias(pipe_hnd, mem_ctx,
-				       &domain_pol,
-				       MAXIMUM_ALLOWED_ACCESS,
-				       alias_rid,
-				       &alias_pol);
+	result = rpccli_samr_open_alias(pipe_hnd, mem_ctx, &domain_pol,
+				     MAXIMUM_ALLOWED_ACCESS,
+				     alias_rid, &alias_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		return result;
 
-	result = rpccli_samr_DeleteAliasMember(pipe_hnd, mem_ctx,
-					       &alias_pol,
-					       &member_sid);
+	result = rpccli_samr_del_aliasmem(pipe_hnd, mem_ctx, &alias_pol, &member_sid);
 
 	if (!NT_STATUS_IS_OK(result))
 		return result;
 
  done:
-	rpccli_samr_Close(pipe_hnd, mem_ctx, &connect_pol);
+	rpccli_samr_close(pipe_hnd, mem_ctx, &connect_pol);
 	return result;
 }
 
@@ -2413,10 +2446,10 @@
 	POLICY_HND connect_pol, domain_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	uint32 start_idx=0, max_entries=250, num_entries, i, loop_count = 0;
-	struct samr_SamArray *groups = NULL;
-	bool global = False;
-	bool local = False;
-	bool builtin = False;
+	struct acct_info *groups;
+	BOOL global = False;
+	BOOL local = False;
+	BOOL builtin = False;
 
 	if (argc == 0) {
 		global = True;
@@ -2436,22 +2469,18 @@
 	}
 
 	/* Get sam policy handle */
-
-	result = rpccli_samr_Connect2(pipe_hnd, mem_ctx,
-				      pipe_hnd->cli->desthost,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      &connect_pol);
+	
+	result = rpccli_samr_connect(pipe_hnd, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				  &connect_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 	
 	/* Get domain policy handle */
-
-	result = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					CONST_DISCARD(struct dom_sid2 *, domain_sid),
-					&domain_pol);
+	
+	result = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      domain_sid, &domain_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
@@ -2461,38 +2490,34 @@
 		d_printf("\nGroup name            Comment"\
 			 "\n-----------------------------\n");
 	do {
-		uint32_t max_size, total_size, returned_size;
-		union samr_DispInfo info;
+		SAM_DISPINFO_CTR ctr;
+		SAM_DISPINFO_3 info3;
+		uint32 max_size;
 
+		ZERO_STRUCT(ctr);
+		ZERO_STRUCT(info3);
+		ctr.sam.info3 = &info3;
+
 		if (!global) break;
 
 		get_query_dispinfo_params(
 			loop_count, &max_entries, &max_size);
 
-		result = rpccli_samr_QueryDisplayInfo(pipe_hnd, mem_ctx,
-						      &domain_pol,
-						      3,
-						      start_idx,
-						      max_entries,
-						      max_size,
-						      &total_size,
-						      &returned_size,
-						      &info);
-		num_entries = info.info3.count;
-		start_idx += info.info3.count;
+		result = rpccli_samr_query_dispinfo(pipe_hnd, mem_ctx, &domain_pol,
+						 &start_idx, 3, &num_entries,
+						 max_entries, max_size, &ctr);
 
 		if (!NT_STATUS_IS_OK(result) &&
 		    !NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES))
 			break;
-
+						 
 		for (i = 0; i < num_entries; i++) {
 
-			const char *group = NULL;
-			const char *desc = NULL;
+			fstring group, desc;
 
-			group = info.info3.entries[i].account_name.string;
-			desc = info.info3.entries[i].description.string;
-
+			unistr2_to_ascii(group, &(&ctr.sam.info3->str[i])->uni_grp_name, sizeof(group)-1);
+			unistr2_to_ascii(desc, &(&ctr.sam.info3->str[i])->uni_grp_desc, sizeof(desc)-1);
+			
 			if (opt_long_list_entries)
 				printf("%-21.21s %-50.50s\n",
 				       group, desc);
@@ -2505,57 +2530,59 @@
 	do {
 		if (!local) break;
 
-		result = rpccli_samr_EnumDomainAliases(pipe_hnd, mem_ctx,
-						       &domain_pol,
-						       &start_idx,
-						       &groups,
-						       0xffff,
-						       &num_entries);
+		/* The max_size field in cli_samr_enum_als_groups is more like
+		 * an account_control field with indiviual bits what to
+		 * retrieve. Set this to 0xffff as NT4 usrmgr.exe does to get
+		 * everything. I'm too lazy (sorry) to get this through to
+		 * rpc_parse/ etc.  Volker */
+
+		result = rpccli_samr_enum_als_groups(pipe_hnd, mem_ctx, &domain_pol,
+						  &start_idx, 0xffff,
+						  &groups, &num_entries);
+
 		if (!NT_STATUS_IS_OK(result) &&
 		    !NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES))
 			break;
-
+						 
 		for (i = 0; i < num_entries; i++) {
 
-			const char *description = NULL;
+			char *description = NULL;
 
 			if (opt_long_list_entries) {
 
 				POLICY_HND alias_pol;
-				union samr_AliasInfo *info = NULL;
+				ALIAS_INFO_CTR ctr;
 
-				if ((NT_STATUS_IS_OK(rpccli_samr_OpenAlias(pipe_hnd, mem_ctx,
-									   &domain_pol,
-									   0x8,
-									   groups->entries[i].idx,
-									   &alias_pol))) &&
-				    (NT_STATUS_IS_OK(rpccli_samr_QueryAliasInfo(pipe_hnd, mem_ctx,
-										&alias_pol,
-										3,
-										&info))) &&
-				    (NT_STATUS_IS_OK(rpccli_samr_Close(pipe_hnd, mem_ctx,
+				if ((NT_STATUS_IS_OK(rpccli_samr_open_alias(pipe_hnd, mem_ctx,
+									 &domain_pol,
+									 0x8,
+									 groups[i].rid,
+									 &alias_pol))) &&
+				    (NT_STATUS_IS_OK(rpccli_samr_query_alias_info(pipe_hnd, mem_ctx,
+									       &alias_pol, 3,
+									       &ctr))) &&
+				    (NT_STATUS_IS_OK(rpccli_samr_close(pipe_hnd, mem_ctx,
 								    &alias_pol)))) {
-					description = info->description.string;
+					description = unistr2_tdup(mem_ctx,
+								   ctr.alias.info3.description.string);
 				}
 			}
-
+			
 			if (description != NULL) {
-				printf("%-21.21s %-50.50s\n",
-				       groups->entries[i].name.string,
+				printf("%-21.21s %-50.50s\n", 
+				       groups[i].acct_name,
 				       description);
 			} else {
-				printf("%s\n", groups->entries[i].name.string);
+				printf("%s\n", groups[i].acct_name);
 			}
 		}
 	} while (NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES));
-	rpccli_samr_Close(pipe_hnd, mem_ctx, &domain_pol);
+	rpccli_samr_close(pipe_hnd, mem_ctx, &domain_pol);
 	/* Get builtin policy handle */
-
-	result = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					CONST_DISCARD(struct dom_sid2 *, &global_sid_Builtin),
-					&domain_pol);
+	
+	result = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      &global_sid_Builtin, &domain_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
@@ -2564,46 +2591,44 @@
 	do {
 		if (!builtin) break;
 
-		result = rpccli_samr_EnumDomainAliases(pipe_hnd, mem_ctx,
-						       &domain_pol,
-						       &start_idx,
-						       &groups,
-						       max_entries,
-						       &num_entries);
+		result = rpccli_samr_enum_als_groups(pipe_hnd, mem_ctx, &domain_pol,
+						  &start_idx, max_entries,
+						  &groups, &num_entries);
+						 
 		if (!NT_STATUS_IS_OK(result) &&
 		    !NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES))
 			break;
-
+						 
 		for (i = 0; i < num_entries; i++) {
 
-			const char *description = NULL;
+			char *description = NULL;
 
 			if (opt_long_list_entries) {
 
 				POLICY_HND alias_pol;
-				union samr_AliasInfo *info = NULL;
+				ALIAS_INFO_CTR ctr;
 
-				if ((NT_STATUS_IS_OK(rpccli_samr_OpenAlias(pipe_hnd, mem_ctx,
-									   &domain_pol,
-									   0x8,
-									   groups->entries[i].idx,
-									   &alias_pol))) &&
-				    (NT_STATUS_IS_OK(rpccli_samr_QueryAliasInfo(pipe_hnd, mem_ctx,
-										&alias_pol,
-										3,
-										&info))) &&
-				    (NT_STATUS_IS_OK(rpccli_samr_Close(pipe_hnd, mem_ctx,
+				if ((NT_STATUS_IS_OK(rpccli_samr_open_alias(pipe_hnd, mem_ctx,
+									 &domain_pol,
+									 0x8,
+									 groups[i].rid,
+									 &alias_pol))) &&
+				    (NT_STATUS_IS_OK(rpccli_samr_query_alias_info(pipe_hnd, mem_ctx,
+									       &alias_pol, 3,
+									       &ctr))) &&
+				    (NT_STATUS_IS_OK(rpccli_samr_close(pipe_hnd, mem_ctx,
 								    &alias_pol)))) {
-					description = info->description.string;
+					description = unistr2_tdup(mem_ctx,
+								   ctr.alias.info3.description.string);
 				}
 			}
-
+			
 			if (description != NULL) {
-				printf("%-21.21s %-50.50s\n",
-				       groups->entries[i].name.string,
+				printf("%-21.21s %-50.50s\n", 
+				       groups[i].acct_name,
 				       description);
 			} else {
-				printf("%s\n", groups->entries[i].name.string);
+				printf("%s\n", groups[i].acct_name);
 			}
 		}
 	} while (NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES));
@@ -2628,46 +2653,38 @@
 {
 	NTSTATUS result;
 	POLICY_HND group_pol;
-	uint32 num_members, *group_rids;
+	uint32 num_members, *group_rids, *group_attrs;
+	uint32 num_names;
+	char **names;
+	uint32 *name_types;
 	int i;
-	struct samr_RidTypeArray *rids = NULL;
-	struct lsa_Strings names;
-	struct samr_Ids types;
 
 	fstring sid_str;
-	sid_to_fstring(sid_str, domain_sid);
+	sid_to_string(sid_str, domain_sid);
 
-	result = rpccli_samr_OpenGroup(pipe_hnd, mem_ctx,
-				       domain_pol,
-				       MAXIMUM_ALLOWED_ACCESS,
-				       rid,
-				       &group_pol);
+	result = rpccli_samr_open_group(pipe_hnd, mem_ctx, domain_pol,
+				     MAXIMUM_ALLOWED_ACCESS,
+				     rid, &group_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		return result;
 
-	result = rpccli_samr_QueryGroupMember(pipe_hnd, mem_ctx,
-					      &group_pol,
-					      &rids);
+	result = rpccli_samr_query_groupmem(pipe_hnd, mem_ctx, &group_pol,
+					 &num_members, &group_rids,
+					 &group_attrs);
 
 	if (!NT_STATUS_IS_OK(result))
 		return result;
 
-	num_members = rids->count;
-	group_rids = rids->rids;
-
 	while (num_members > 0) {
 		int this_time = 512;
 
 		if (num_members < this_time)
 			this_time = num_members;
 
-		result = rpccli_samr_LookupRids(pipe_hnd, mem_ctx,
-						domain_pol,
-						this_time,
-						group_rids,
-						&names,
-						&types);
+		result = rpccli_samr_lookup_rids(pipe_hnd, mem_ctx, domain_pol,
+					      this_time, group_rids,
+					      &num_names, &names, &name_types);
 
 		if (!NT_STATUS_IS_OK(result))
 			return result;
@@ -2679,12 +2696,10 @@
 
 			if (opt_long_list_entries) {
 				printf("%s-%d %s\\%s %d\n", sid_str,
-				       group_rids[i], domain_name,
-				       names.names[i].string,
+				       group_rids[i], domain_name, names[i],
 				       SID_NAME_USER);
 			} else {
-				printf("%s\\%s\n", domain_name,
-					names.names[i].string);
+				printf("%s\\%s\n", domain_name, names[i]);
 			}
 		}
 
@@ -2709,28 +2724,21 @@
 	char **names;
 	enum lsa_SidType *types;
 	int i;
-	struct lsa_SidArray sid_array;
 
-	result = rpccli_samr_OpenAlias(pipe_hnd, mem_ctx,
-				       domain_pol,
-				       MAXIMUM_ALLOWED_ACCESS,
-				       rid,
-				       &alias_pol);
+	result = rpccli_samr_open_alias(pipe_hnd, mem_ctx, domain_pol,
+				     MAXIMUM_ALLOWED_ACCESS, rid, &alias_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		return result;
 
-	result = rpccli_samr_GetMembersInAlias(pipe_hnd, mem_ctx,
-					       &alias_pol,
-					       &sid_array);
+	result = rpccli_samr_query_aliasmem(pipe_hnd, mem_ctx, &alias_pol,
+					 &num_members, &alias_sids);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		d_fprintf(stderr, "Couldn't list alias members\n");
 		return result;
 	}
 
-	num_members = sid_array.num_sids;
-
 	if (num_members == 0) {
 		return NT_STATUS_OK;
 	}
@@ -2751,17 +2759,6 @@
 		return result;
 	}
 
-	alias_sids = TALLOC_ZERO_ARRAY(mem_ctx, DOM_SID, num_members);
-	if (!alias_sids) {
-		d_fprintf(stderr, "Out of memory\n");
-		cli_rpc_pipe_close(lsa_pipe);
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	for (i=0; i<num_members; i++) {
-		sid_copy(&alias_sids[i], sid_array.sids[i].sid);
-	}
-
 	result = rpccli_lsa_lookup_sids(lsa_pipe, mem_ctx, &lsa_pol, num_members,
 				     alias_sids, 
 				     &domains, &names, &types);
@@ -2775,7 +2772,7 @@
 
 	for (i = 0; i < num_members; i++) {
 		fstring sid_str;
-		sid_to_fstring(sid_str, &alias_sids[i]);
+		sid_to_string(sid_str, &alias_sids[i]);
 
 		if (opt_long_list_entries) {
 			printf("%s %s\\%s %d\n", sid_str, 
@@ -2803,66 +2800,50 @@
 {
 	NTSTATUS result;
 	POLICY_HND connect_pol, domain_pol;
-	struct samr_Ids rids, rid_types;
-	struct lsa_String lsa_acct_name;
+	uint32 num_rids, *rids, *rid_types;
 
 	/* Get sam policy handle */
+	
+	result = rpccli_samr_connect(pipe_hnd, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				  &connect_pol);
 
-	result = rpccli_samr_Connect2(pipe_hnd, mem_ctx,
-				      pipe_hnd->cli->desthost,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      &connect_pol);
-
 	if (!NT_STATUS_IS_OK(result))
 		return result;
 	
 	/* Get domain policy handle */
+	
+	result = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      domain_sid, &domain_pol);
 
-	result = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					CONST_DISCARD(struct dom_sid2 *, domain_sid),
-					&domain_pol);
-
 	if (!NT_STATUS_IS_OK(result))
 		return result;
 
-	init_lsa_String(&lsa_acct_name, argv[0]); /* sure? */
+	result = rpccli_samr_lookup_names(pipe_hnd, mem_ctx, &domain_pol, 1000,
+				       1, argv, &num_rids, &rids, &rid_types);
 
-	result = rpccli_samr_LookupNames(pipe_hnd, mem_ctx,
-					 &domain_pol,
-					 1,
-					 &lsa_acct_name,
-					 &rids,
-					 &rid_types);
-
 	if (!NT_STATUS_IS_OK(result)) {
 
 		/* Ok, did not find it in the global sam, try with builtin */
 
 		DOM_SID sid_Builtin;
 
-		rpccli_samr_Close(pipe_hnd, mem_ctx, &domain_pol);
+		rpccli_samr_close(pipe_hnd, mem_ctx, &domain_pol);
 
-		sid_copy(&sid_Builtin, &global_sid_Builtin);
+		string_to_sid(&sid_Builtin, "S-1-5-32");		
 
-		result = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-						&connect_pol,
-						MAXIMUM_ALLOWED_ACCESS,
-						&sid_Builtin,
-						&domain_pol);
+		result = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &connect_pol,
+					      MAXIMUM_ALLOWED_ACCESS,
+					      &sid_Builtin, &domain_pol);
 
 		if (!NT_STATUS_IS_OK(result)) {
 			d_fprintf(stderr, "Couldn't find group %s\n", argv[0]);
 			return result;
 		}
 
-		result = rpccli_samr_LookupNames(pipe_hnd, mem_ctx,
-						 &domain_pol,
-						 1,
-						 &lsa_acct_name,
-						 &rids,
-						 &rid_types);
+		result = rpccli_samr_lookup_names(pipe_hnd, mem_ctx, &domain_pol, 1000,
+					       1, argv, &num_rids,
+					       &rids, &rid_types);
 
 		if (!NT_STATUS_IS_OK(result)) {
 			d_fprintf(stderr, "Couldn't find group %s\n", argv[0]);
@@ -2870,20 +2851,20 @@
 		}
 	}
 
-	if (rids.count != 1) {
+	if (num_rids != 1) {
 		d_fprintf(stderr, "Couldn't find group %s\n", argv[0]);
 		return result;
 	}
 
-	if (rid_types.ids[0] == SID_NAME_DOM_GRP) {
+	if (rid_types[0] == SID_NAME_DOM_GRP) {
 		return rpc_list_group_members(pipe_hnd, mem_ctx, domain_name,
 					      domain_sid, &domain_pol,
-					      rids.ids[0]);
+					      rids[0]);
 	}
 
-	if (rid_types.ids[0] == SID_NAME_ALIAS) {
+	if (rid_types[0] == SID_NAME_ALIAS) {
 		return rpc_list_alias_members(pipe_hnd, mem_ctx, &domain_pol,
-					      rids.ids[0]);
+					      rids[0]);
 	}
 
 	return NT_STATUS_NO_SUCH_GROUP;
@@ -2910,9 +2891,8 @@
 {
 	NTSTATUS result;
 	POLICY_HND connect_pol, domain_pol, group_pol;
-	union samr_GroupInfo group_info;
-	struct samr_Ids rids, rid_types;
-	struct lsa_String lsa_acct_name;
+	uint32 num_rids, *rids, *rid_types;
+	GROUP_INFO_CTR ctr;
 
 	if (argc != 2) {
 		d_printf("Usage: 'net rpc group rename group newname'\n");
@@ -2920,61 +2900,49 @@
 	}
 
 	/* Get sam policy handle */
+	
+	result = rpccli_samr_connect(pipe_hnd, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				  &connect_pol);
 
-	result = rpccli_samr_Connect2(pipe_hnd, mem_ctx,
-				      pipe_hnd->cli->desthost,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      &connect_pol);
-
 	if (!NT_STATUS_IS_OK(result))
 		return result;
 	
 	/* Get domain policy handle */
+	
+	result = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      domain_sid, &domain_pol);
 
-	result = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					CONST_DISCARD(struct dom_sid2 *, domain_sid),
-					&domain_pol);
-
 	if (!NT_STATUS_IS_OK(result))
 		return result;
 
-	init_lsa_String(&lsa_acct_name, argv[0]);
+	result = rpccli_samr_lookup_names(pipe_hnd, mem_ctx, &domain_pol, 1000,
+				       1, argv, &num_rids, &rids, &rid_types);
 
-	result = rpccli_samr_LookupNames(pipe_hnd, mem_ctx,
-					 &domain_pol,
-					 1,
-					 &lsa_acct_name,
-					 &rids,
-					 &rid_types);
-
-	if (rids.count != 1) {
+	if (num_rids != 1) {
 		d_fprintf(stderr, "Couldn't find group %s\n", argv[0]);
 		return result;
 	}
 
-	if (rid_types.ids[0] != SID_NAME_DOM_GRP) {
+	if (rid_types[0] != SID_NAME_DOM_GRP) {
 		d_fprintf(stderr, "Can only rename domain groups\n");
 		return NT_STATUS_UNSUCCESSFUL;
 	}
 
-	result = rpccli_samr_OpenGroup(pipe_hnd, mem_ctx,
-				       &domain_pol,
-				       MAXIMUM_ALLOWED_ACCESS,
-				       rids.ids[0],
-				       &group_pol);
+	result = rpccli_samr_open_group(pipe_hnd, mem_ctx, &domain_pol,
+				     MAXIMUM_ALLOWED_ACCESS,
+				     rids[0], &group_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		return result;
 
-	init_lsa_String(&group_info.name, argv[1]);
+	ZERO_STRUCT(ctr);
 
-	result = rpccli_samr_SetGroupInfo(pipe_hnd, mem_ctx,
-					  &group_pol,
-					  2,
-					  &group_info);
+	ctr.switch_value1 = 2;
+	init_samr_group_info2(&ctr.group.info2, argv[1]);
 
+	result = rpccli_samr_set_groupinfo(pipe_hnd, mem_ctx, &group_pol, &ctr);
+
 	if (!NT_STATUS_IS_OK(result))
 		return result;
 
@@ -3051,16 +3019,12 @@
 					const char **argv)
 {
 	WERROR result;
-	NTSTATUS status;
 	char *sharename;
 	char *path;
 	uint32 type = STYPE_DISKTREE; /* only allow disk shares to be added */
 	uint32 num_users=0, perms=0;
 	char *password=NULL; /* don't allow a share password */
 	uint32 level = 2;
-	union srvsvc_NetShareInfo info;
-	struct srvsvc_NetShareInfo2 info2;
-	uint32_t parm_error = 0;
 
 	if ((sharename = talloc_strdup(mem_ctx, argv[0])) == NULL) {
 		return NT_STATUS_NO_MEMORY;
@@ -3071,24 +3035,11 @@
 		return NT_STATUS_UNSUCCESSFUL;
 	*path++ = '\0';
 
-	info2.name		= sharename;
-	info2.type		= type;
-	info2.comment		= opt_comment;
-	info2.permissions	= perms;
-	info2.max_users		= opt_maxusers;
-	info2.current_users	= num_users;
-	info2.path		= path;
-	info2.password		= password;
-
-	info.info2 = &info2;
-
-	status = rpccli_srvsvc_NetShareAdd(pipe_hnd, mem_ctx,
-					   pipe_hnd->cli->desthost,
-					   level,
-					   &info,
-					   &parm_error,
-					   &result);
-	return status;
+	result = rpccli_srvsvc_net_share_add(pipe_hnd, mem_ctx, sharename, type,
+					  opt_comment, perms, opt_maxusers,
+					  num_users, path, password, 
+					  level, NULL);
+	return werror_to_ntstatus(result);
 }
 
 static int rpc_share_add(int argc, const char **argv)
@@ -3127,11 +3078,8 @@
 {
 	WERROR result;
 
-	return rpccli_srvsvc_NetShareDel(pipe_hnd, mem_ctx,
-					 pipe_hnd->cli->desthost,
-					 argv[0],
-					 0,
-					 &result);
+	result = rpccli_srvsvc_net_share_del(pipe_hnd, mem_ctx, argv[0]);
+	return W_ERROR_IS_OK(result) ? NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
 }
 
 /** 
@@ -3160,104 +3108,165 @@
  *
  * @param info1  pointer to SRV_SHARE_INFO_1 to format
  **/
-
-static void display_share_info_1(struct srvsvc_NetShareInfo1 *r)
+ 
+static void display_share_info_1(SRV_SHARE_INFO_1 *info1)
 {
+	fstring netname = "", remark = "";
+
+	rpcstr_pull_unistr2_fstring(netname, &info1->info_1_str.uni_netname);
+	rpcstr_pull_unistr2_fstring(remark, &info1->info_1_str.uni_remark);
+
 	if (opt_long_list_entries) {
 		d_printf("%-12s %-8.8s %-50s\n",
-			 r->name,
-			 share_type[r->type & ~(STYPE_TEMPORARY|STYPE_HIDDEN)],
-			 r->comment);
+			 netname, share_type[info1->info_1.type & ~(STYPE_TEMPORARY|STYPE_HIDDEN)], remark);
 	} else {
-		d_printf("%s\n", r->name);
+		d_printf("%s\n", netname);
 	}
+
 }
 
 static WERROR get_share_info(struct rpc_pipe_client *pipe_hnd,
-			     TALLOC_CTX *mem_ctx,
-			     uint32 level,
-			     int argc,
-			     const char **argv,
-			     struct srvsvc_NetShareInfoCtr *info_ctr)
+				TALLOC_CTX *mem_ctx, 
+				uint32 level,
+				int argc,
+				const char **argv, 
+				SRV_SHARE_INFO_CTR *ctr)
 {
 	WERROR result;
-	NTSTATUS status;
-	union srvsvc_NetShareInfo info;
+	SRV_SHARE_INFO info;
 
 	/* no specific share requested, enumerate all */
 	if (argc == 0) {
 
-		uint32_t preferred_len = 0xffffffff;
-		uint32_t total_entries = 0;
-		uint32_t resume_handle = 0;
+		ENUM_HND hnd;
+		uint32 preferred_len = 0xffffffff;
 
-		info_ctr->level = level;
+		init_enum_hnd(&hnd, 0);
 
-		status = rpccli_srvsvc_NetShareEnumAll(pipe_hnd, mem_ctx,
-						       pipe_hnd->cli->desthost,
-						       info_ctr,
-						       preferred_len,
-						       &total_entries,
-						       &resume_handle,
-						       &result);
-		return result;
+		return rpccli_srvsvc_net_share_enum(pipe_hnd, mem_ctx, level, ctr, 
+						 preferred_len, &hnd);
 	}
 
 	/* request just one share */
-	status = rpccli_srvsvc_NetShareGetInfo(pipe_hnd, mem_ctx,
-					       pipe_hnd->cli->desthost,
-					       argv[0],
-					       level,
-					       &info,
-					       &result);
+	result = rpccli_srvsvc_net_share_get_info(pipe_hnd, mem_ctx, argv[0], level, &info);
 
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
+	if (!W_ERROR_IS_OK(result))
 		goto done;
-	}
 
 	/* construct ctr */
-	ZERO_STRUCTP(info_ctr);
+	ZERO_STRUCTP(ctr);
 
-	info_ctr->level = level;
+	ctr->info_level = ctr->switch_value = level;
+	ctr->ptr_share_info = ctr->ptr_entries = 1;
+	ctr->num_entries = ctr->num_entries2 = 1;
 
 	switch (level) {
 	case 1:
 	{
-		struct srvsvc_NetShareCtr1 *ctr1;
+		char *s;
+		SRV_SHARE_INFO_1 *info1;
+		
+		ctr->share.info1 = TALLOC_ARRAY(mem_ctx, SRV_SHARE_INFO_1, 1);
+		if (ctr->share.info1 == NULL) {
+			result = WERR_NOMEM;
+			goto done;
+		}
+		info1 = ctr->share.info1;
+				
+		memset(ctr->share.info1, 0, sizeof(SRV_SHARE_INFO_1));
 
-		ctr1 = TALLOC_ZERO_P(mem_ctx, struct srvsvc_NetShareCtr1);
-		W_ERROR_HAVE_NO_MEMORY(ctr1);
+		/* Copy pointer crap */
 
-		ctr1->count = 1;
-		ctr1->array = info.info1;
+		memcpy(&info1->info_1, &info.share.info1.info_1, sizeof(SH_INFO_1));
 
-		info_ctr->ctr.ctr1 = ctr1;
+		/* Duplicate strings */
+
+		s = unistr2_tdup(mem_ctx, &info.share.info1.info_1_str.uni_netname);
+		if (s)
+			init_unistr2(&info1->info_1_str.uni_netname, s, UNI_STR_TERMINATE);
+
+		s = unistr2_tdup(mem_ctx, &info.share.info1.info_1_str.uni_remark);
+		if (s)
+			init_unistr2(&info1->info_1_str.uni_remark, s, UNI_STR_TERMINATE);
 	}
 	case 2:
 	{
-		struct srvsvc_NetShareCtr2 *ctr2;
+		char *s;
+		SRV_SHARE_INFO_2 *info2;
+		
+		ctr->share.info2 = TALLOC_ARRAY(mem_ctx, SRV_SHARE_INFO_2, 1);
+		if (ctr->share.info2 == NULL) {
+			result = WERR_NOMEM;
+			goto done;
+		}
+		info2 = ctr->share.info2;
+				
+		memset(ctr->share.info2, 0, sizeof(SRV_SHARE_INFO_2));
 
-		ctr2 = TALLOC_ZERO_P(mem_ctx, struct srvsvc_NetShareCtr2);
-		W_ERROR_HAVE_NO_MEMORY(ctr2);
+		/* Copy pointer crap */
 
-		ctr2->count = 1;
-		ctr2->array = info.info2;
+		memcpy(&info2->info_2, &info.share.info2.info_2, sizeof(SH_INFO_2));
 
-		info_ctr->ctr.ctr2 = ctr2;
+		/* Duplicate strings */
+
+		s = unistr2_tdup(mem_ctx, &info.share.info2.info_2_str.uni_netname);
+		if (s)
+			init_unistr2(&info2->info_2_str.uni_netname, s, UNI_STR_TERMINATE);
+
+		s = unistr2_tdup(mem_ctx, &info.share.info2.info_2_str.uni_remark);
+		if (s)
+			init_unistr2(&info2->info_2_str.uni_remark, s, UNI_STR_TERMINATE);
+
+		s = unistr2_tdup(mem_ctx, &info.share.info2.info_2_str.uni_path);
+		if (s)
+			init_unistr2(&info2->info_2_str.uni_path, s, UNI_STR_TERMINATE);
+
+		s = unistr2_tdup(mem_ctx, &info.share.info2.info_2_str.uni_passwd);
+		if (s)
+			init_unistr2(&info2->info_2_str.uni_passwd, s, UNI_STR_TERMINATE);
 	}
 	case 502:
 	{
-		struct srvsvc_NetShareCtr502 *ctr502;
+		char *s;
+		SRV_SHARE_INFO_502 *info502;
 
-		ctr502 = TALLOC_ZERO_P(mem_ctx, struct srvsvc_NetShareCtr502);
-		W_ERROR_HAVE_NO_MEMORY(ctr502);
+		ctr->share.info502 = TALLOC_ARRAY(mem_ctx, SRV_SHARE_INFO_502, 1);
+		if (ctr->share.info502 == NULL) {
+			result = WERR_NOMEM;
+			goto done;
+		}
+		info502 = ctr->share.info502;
 
-		ctr502->count = 1;
-		ctr502->array = info.info502;
+		memset(ctr->share.info502, 0, sizeof(SRV_SHARE_INFO_502));
 
-		info_ctr->ctr.ctr502 = ctr502;
+		/* Copy pointer crap */
+
+		memcpy(&info502->info_502, &info.share.info502.info_502, sizeof(SH_INFO_502));
+
+		/* Duplicate strings */
+
+		s = unistr2_tdup(mem_ctx, &info.share.info502.info_502_str.uni_netname);
+		if (s)
+			init_unistr2(&info502->info_502_str.uni_netname, s, UNI_STR_TERMINATE);
+
+		s = unistr2_tdup(mem_ctx, &info.share.info502.info_502_str.uni_remark);
+		if (s)
+			init_unistr2(&info502->info_502_str.uni_remark, s, UNI_STR_TERMINATE);
+
+		s = unistr2_tdup(mem_ctx, &info.share.info502.info_502_str.uni_path);
+		if (s)
+			init_unistr2(&info502->info_502_str.uni_path, s, UNI_STR_TERMINATE);
+
+		s = unistr2_tdup(mem_ctx, &info.share.info502.info_502_str.uni_passwd);
+		if (s)
+			init_unistr2(&info502->info_502_str.uni_passwd, s, UNI_STR_TERMINATE);
+
+		info502->info_502_str.sd = dup_sec_desc(mem_ctx, info.share.info502.info_502_str.sd);
+				
 	}
+
 	} /* switch */
+
 done:
 	return result;
 }
@@ -3286,18 +3295,11 @@
 					int argc,
 					const char **argv)
 {
-	struct srvsvc_NetShareInfoCtr info_ctr;
-	struct srvsvc_NetShareCtr1 ctr1;
+	SRV_SHARE_INFO_CTR ctr;
 	WERROR result;
 	uint32 i, level = 1;
 
-	ZERO_STRUCT(info_ctr);
-	ZERO_STRUCT(ctr1);
-
-	info_ctr.level = 1;
-	info_ctr.ctr.ctr1 = &ctr1;
-
-	result = get_share_info(pipe_hnd, mem_ctx, level, argc, argv, &info_ctr);
+	result = get_share_info(pipe_hnd, mem_ctx, level, argc, argv, &ctr);
 	if (!W_ERROR_IS_OK(result))
 		goto done;
 
@@ -3309,8 +3311,8 @@
 	"\nShare name   Type     Description\n"\
 	"----------   ----     -----------\n");
 	}
-	for (i = 0; i < info_ctr.ctr.ctr1->count; i++)
-		display_share_info_1(&info_ctr.ctr.ctr1->array[i]);
+	for (i = 0; i < ctr.num_entries; i++)
+		display_share_info_1(&ctr.share.info1[i]);
  done:
 	return W_ERROR_IS_OK(result) ? NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
 }
@@ -3326,7 +3328,7 @@
 	return run_rpc_command(NULL, PI_SRVSVC, 0, rpc_share_list_internals, argc, argv);
 }
 
-static bool check_share_availability(struct cli_state *cli, const char *netname)
+static BOOL check_share_availability(struct cli_state *cli, const char *netname)
 {
 	if (!cli_send_tconX(cli, netname, "A:", "", 0)) {
 		d_printf("skipping   [%s]: not a file share.\n", netname);
@@ -3339,7 +3341,7 @@
 	return True;
 }
 
-static bool check_share_sanity(struct cli_state *cli, const char *netname, uint32 type)
+static BOOL check_share_sanity(struct cli_state *cli, fstring netname, uint32 type)
 {
 	/* only support disk shares */
 	if (! ( type == STYPE_DISKTREE || type == (STYPE_DISKTREE | STYPE_HIDDEN)) ) {
@@ -3362,14 +3364,14 @@
 }
 
 /** 
- * Migrate shares from a remote RPC server to the local RPC server
+ * Migrate shares from a remote RPC server to the local RPC srever
  *
  * All parameters are provided by the run_rpc_command function, except for
- * argc, argv which are passed through. 
+ * argc, argv which are passes through. 
  *
  * @param domain_sid The domain sid acquired from the remote server
  * @param cli A cli_state connected to the server.
- * @param mem_ctx Talloc context, destroyed on completion of the function.
+ * @param mem_ctx Talloc context, destoyed on completion of the function.
  * @param argc  Standard main() style argc
  * @param argv  Standard main() style argv.  Initial components are already
  *              stripped
@@ -3387,12 +3389,13 @@
 {
 	WERROR result;
 	NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL;
-	struct srvsvc_NetShareInfoCtr ctr_src;
+	SRV_SHARE_INFO_CTR ctr_src;
+	uint32 type = STYPE_DISKTREE; /* only allow disk shares to be added */
+	char *password = NULL; /* don't allow a share password */
 	uint32 i;
 	struct rpc_pipe_client *srvsvc_pipe = NULL;
 	struct cli_state *cli_dst = NULL;
 	uint32 level = 502; /* includes secdesc */
-	uint32_t parm_error = 0;
 
 	result = get_share_info(pipe_hnd, mem_ctx, level, argc, argv, &ctr_src);
 	if (!W_ERROR_IS_OK(result))
@@ -3404,39 +3407,40 @@
                 return nt_status;
 
 
-	for (i = 0; i < ctr_src.ctr.ctr502->count; i++) {
+	for (i = 0; i < ctr_src.num_entries; i++) {
 
-		union srvsvc_NetShareInfo info;
-		struct srvsvc_NetShareInfo502 info502 =
-			ctr_src.ctr.ctr502->array[i];
-
+		fstring netname = "", remark = "", path = "";
 		/* reset error-code */
 		nt_status = NT_STATUS_UNSUCCESSFUL;
 
-		if (!check_share_sanity(cli, info502.name, info502.type))
+		rpcstr_pull_unistr2_fstring(
+			netname, &ctr_src.share.info502[i].info_502_str.uni_netname);
+		rpcstr_pull_unistr2_fstring(
+			remark, &ctr_src.share.info502[i].info_502_str.uni_remark);
+		rpcstr_pull_unistr2_fstring(
+			path, &ctr_src.share.info502[i].info_502_str.uni_path);
+
+		if (!check_share_sanity(cli, netname, ctr_src.share.info502[i].info_502.type))
 			continue;
 
 		/* finally add the share on the dst server */ 
 
 		printf("migrating: [%s], path: %s, comment: %s, without share-ACLs\n", 
-			info502.name, info502.path, info502.comment);
+			netname, path, remark);
 
-		info.info502 = &info502;
-
-		nt_status = rpccli_srvsvc_NetShareAdd(srvsvc_pipe, mem_ctx,
-						      srvsvc_pipe->cli->desthost,
-						      502,
-						      &info,
-						      &parm_error,
-						      &result);
-
+		result = rpccli_srvsvc_net_share_add(srvsvc_pipe, mem_ctx, netname, type, remark,
+						  ctr_src.share.info502[i].info_502.perms,
+						  ctr_src.share.info502[i].info_502.max_uses,
+						  ctr_src.share.info502[i].info_502.num_uses,
+						  path, password, level, 
+						  NULL);
+	
                 if (W_ERROR_V(result) == W_ERROR_V(WERR_ALREADY_EXISTS)) {
-			printf("           [%s] does already exist\n",
-				info502.name);
+			printf("           [%s] does already exist\n", netname);
 			continue;
 		}
 
-		if (!NT_STATUS_IS_OK(nt_status) || !W_ERROR_IS_OK(result)) {
+		if (!W_ERROR_IS_OK(result)) {
 			printf("cannot add share: %s\n", dos_errstr(result));
 			goto done;
 		}
@@ -3584,15 +3588,14 @@
  *
  * @return 		Boolean result
  **/
-static bool sync_files(struct copy_clistate *cp_clistate, const char *mask)
+BOOL sync_files(struct copy_clistate *cp_clistate, pstring mask)
 {
 	struct cli_state *targetcli;
-	char *targetpath = NULL;
+	pstring targetpath;
 
 	DEBUG(3,("calling cli_list with mask: %s\n", mask));
 
-	if ( !cli_resolve_path(talloc_tos(), "", cp_clistate->cli_share_src,
-				mask, &targetcli, &targetpath ) ) {
+	if ( !cli_resolve_path( "", cp_clistate->cli_share_src, mask, &targetcli, targetpath ) ) {
 		d_fprintf(stderr, "cli_resolve_path %s failed with error: %s\n", 
 			mask, cli_errstr(cp_clistate->cli_share_src));
 		return False;
@@ -3613,7 +3616,7 @@
  * Should set up ACL inheritance.
  **/
 
-bool copy_top_level_perms(struct copy_clistate *cp_clistate, 
+BOOL copy_top_level_perms(struct copy_clistate *cp_clistate, 
 				const char *sharename)
 {
 	NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL;
@@ -3670,37 +3673,35 @@
 {
 	WERROR result;
 	NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL;
-	struct srvsvc_NetShareInfoCtr ctr_src;
+	SRV_SHARE_INFO_CTR ctr_src;
 	uint32 i;
 	uint32 level = 502;
 	struct copy_clistate cp_clistate;
-	bool got_src_share = False;
-	bool got_dst_share = False;
-	const char *mask = "\\*";
+	BOOL got_src_share = False;
+	BOOL got_dst_share = False;
+	pstring mask = "\\*";
 	char *dst = NULL;
 
 	dst = SMB_STRDUP(opt_destination?opt_destination:"127.0.0.1");
-	if (dst == NULL) {
-		nt_status = NT_STATUS_NO_MEMORY;
-		goto done;
-	}
 
 	result = get_share_info(pipe_hnd, mem_ctx, level, argc, argv, &ctr_src);
 
 	if (!W_ERROR_IS_OK(result))
 		goto done;
 
-	for (i = 0; i < ctr_src.ctr.ctr502->count; i++) {
+	for (i = 0; i < ctr_src.num_entries; i++) {
 
-		struct srvsvc_NetShareInfo502 info502 =
-			ctr_src.ctr.ctr502->array[i];
+		fstring netname = "";
 
-		if (!check_share_sanity(cli, info502.name, info502.type))
+		rpcstr_pull_unistr2_fstring(
+			netname, &ctr_src.share.info502[i].info_502_str.uni_netname);
+
+		if (!check_share_sanity(cli, netname, ctr_src.share.info502[i].info_502.type))
 			continue;
 
 		/* one might not want to mirror whole discs :) */
-		if (strequal(info502.name, "print$") || info502.name[1] == '$') {
-			d_printf("skipping   [%s]: builtin/hidden share\n", info502.name);
+		if (strequal(netname, "print$") || netname[1] == '$') {
+			d_printf("skipping   [%s]: builtin/hidden share\n", netname);
 			continue;
 		}
 
@@ -3714,7 +3715,7 @@
 			break;
 		}
 		printf("    [%s] files and directories %s ACLs, %s DOS Attributes %s\n", 
-			info502.name,
+			netname, 
 			opt_acls ? "including" : "without", 
 			opt_attrs ? "including" : "without",
 			opt_timestamps ? "(preserving timestamps)" : "");
@@ -3727,8 +3728,8 @@
 
 	        /* open share source */
 		nt_status = connect_to_service(&cp_clistate.cli_share_src,
-					       &cli->dest_ss, cli->desthost,
-					       info502.name, "A:");
+					       &cli->dest_ip, cli->desthost,
+					       netname, "A:");
 		if (!NT_STATUS_IS_OK(nt_status))
 			goto done;
 
@@ -3737,21 +3738,21 @@
 		if (net_mode_share == NET_MODE_SHARE_MIGRATE) {
 			/* open share destination */
 			nt_status = connect_to_service(&cp_clistate.cli_share_dst,
-						       NULL, dst, info502.name, "A:");
+						       NULL, dst, netname, "A:");
 			if (!NT_STATUS_IS_OK(nt_status))
 				goto done;
 
 			got_dst_share = True;
 		}
 
-		if (!copy_top_level_perms(&cp_clistate, info502.name)) {
-			d_fprintf(stderr, "Could not handle the top level directory permissions for the share: %s\n", info502.name);
+		if (!copy_top_level_perms(&cp_clistate, netname)) {
+			d_fprintf(stderr, "Could not handle the top level directory permissions for the share: %s\n", netname);
 			nt_status = NT_STATUS_UNSUCCESSFUL;
 			goto done;
 		}
 
 		if (!sync_files(&cp_clistate, mask)) {
-			d_fprintf(stderr, "could not handle files for share: %s\n", info502.name);
+			d_fprintf(stderr, "could not handle files for share: %s\n", netname);
 			nt_status = NT_STATUS_UNSUCCESSFUL;
 			goto done;
 		}
@@ -3767,7 +3768,6 @@
 	if (got_dst_share)
 		cli_shutdown(cp_clistate.cli_share_dst);
 
-	SAFE_FREE(dst);
 	return nt_status;
 
 }
@@ -3811,13 +3811,12 @@
 {
 	WERROR result;
 	NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL;
-	struct srvsvc_NetShareInfoCtr ctr_src;
-	union srvsvc_NetShareInfo info;
+	SRV_SHARE_INFO_CTR ctr_src;
+	SRV_SHARE_INFO info;
 	uint32 i;
 	struct rpc_pipe_client *srvsvc_pipe = NULL;
 	struct cli_state *cli_dst = NULL;
 	uint32 level = 502; /* includes secdesc */
-	uint32_t parm_error = 0;
 
 	result = get_share_info(pipe_hnd, mem_ctx, level, argc, argv, &ctr_src);
 
@@ -3830,35 +3829,41 @@
                 return nt_status;
 
 
-	for (i = 0; i < ctr_src.ctr.ctr502->count; i++) {
+	for (i = 0; i < ctr_src.num_entries; i++) {
 
-		struct srvsvc_NetShareInfo502 info502 =
-			ctr_src.ctr.ctr502->array[i];
-
+		fstring netname = "", remark = "", path = "";
 		/* reset error-code */
 		nt_status = NT_STATUS_UNSUCCESSFUL;
 
-		if (!check_share_sanity(cli, info502.name, info502.type))
+		rpcstr_pull_unistr2_fstring(
+			netname, &ctr_src.share.info502[i].info_502_str.uni_netname);
+		rpcstr_pull_unistr2_fstring(
+			remark, &ctr_src.share.info502[i].info_502_str.uni_remark);
+		rpcstr_pull_unistr2_fstring(
+			path, &ctr_src.share.info502[i].info_502_str.uni_path);
+
+		if (!check_share_sanity(cli, netname, ctr_src.share.info502[i].info_502.type))
 			continue;
 
 		printf("migrating: [%s], path: %s, comment: %s, including share-ACLs\n", 
-			info502.name, info502.path, info502.comment);
+			netname, path, remark);
 
 		if (opt_verbose)
-			display_sec_desc(info502.sd_buf.sd);
+			display_sec_desc(ctr_src.share.info502[i].info_502_str.sd);
 
+		/* init info */
+		ZERO_STRUCT(info);
+
+		info.switch_value = level;
+		info.ptr_share_ctr = 1;
+
 		/* FIXME: shouldn't we be able to just set the security descriptor ? */
-		info.info502 = &info502;
+		info.share.info502 = ctr_src.share.info502[i];
 
 		/* finally modify the share on the dst server */
-		nt_status = rpccli_srvsvc_NetShareSetInfo(srvsvc_pipe, mem_ctx,
-							  srvsvc_pipe->cli->desthost,
-							  info502.name,
-							  level,
-							  &info,
-							  &parm_error,
-							  &result);
-		if (!NT_STATUS_IS_OK(nt_status) || !W_ERROR_IS_OK(result)) {
+		result = rpccli_srvsvc_net_share_set_info(srvsvc_pipe, mem_ctx, netname, level, &info);
+	
+		if (!W_ERROR_IS_OK(result)) {
 			printf("cannot set share-acl: %s\n", dos_errstr(result));
 			goto done;
 		}
@@ -3988,17 +3993,15 @@
 					const DOM_SID *domain_sid)
 {
 	uint32 start_idx, max_entries, num_entries, i;
-	struct samr_SamArray *groups = NULL;
+	struct acct_info *groups;
 	NTSTATUS result;
 	POLICY_HND domain_pol;
 
 	/* Get domain policy handle */
-
-	result = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-					connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					CONST_DISCARD(struct dom_sid2 *, domain_sid),
-					&domain_pol);
+	
+	result = rpccli_samr_open_domain(pipe_hnd, mem_ctx, connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      domain_sid, &domain_pol);
 	if (!NT_STATUS_IS_OK(result))
 		return result;
 
@@ -4006,36 +4009,32 @@
 	max_entries = 250;
 
 	do {
-		result = rpccli_samr_EnumDomainAliases(pipe_hnd, mem_ctx,
-						       &domain_pol,
-						       &start_idx,
-						       &groups,
-						       max_entries,
-						       &num_entries);
+		result = rpccli_samr_enum_als_groups(pipe_hnd, mem_ctx, &domain_pol,
+						  &start_idx, max_entries,
+						  &groups, &num_entries);
+
 		for (i = 0; i < num_entries; i++) {
 
 			POLICY_HND alias_pol;
 			struct full_alias alias;
-			struct lsa_SidArray sid_array;
+			DOM_SID *members;
 			int j;
 
-			result = rpccli_samr_OpenAlias(pipe_hnd, mem_ctx,
-						       &domain_pol,
-						       MAXIMUM_ALLOWED_ACCESS,
-						       groups->entries[i].idx,
-						       &alias_pol);
+			result = rpccli_samr_open_alias(pipe_hnd, mem_ctx, &domain_pol,
+						     MAXIMUM_ALLOWED_ACCESS,
+						     groups[i].rid,
+						     &alias_pol);
 			if (!NT_STATUS_IS_OK(result))
 				goto done;
 
-			result = rpccli_samr_GetMembersInAlias(pipe_hnd, mem_ctx,
-							       &alias_pol,
-							       &sid_array);
+			result = rpccli_samr_query_aliasmem(pipe_hnd, mem_ctx,
+							 &alias_pol,
+							 &alias.num_members,
+							 &members);
 			if (!NT_STATUS_IS_OK(result))
 				goto done;
 
-			alias.num_members = sid_array.num_sids;
-
-			result = rpccli_samr_Close(pipe_hnd, mem_ctx, &alias_pol);
+			result = rpccli_samr_close(pipe_hnd, mem_ctx, &alias_pol);
 			if (!NT_STATUS_IS_OK(result))
 				goto done;
 
@@ -4046,11 +4045,11 @@
 
 				for (j = 0; j < alias.num_members; j++)
 					sid_copy(&alias.members[j],
-						 sid_array.sids[j].sid);
+						 &members[j]);
 			}
 
 			sid_copy(&alias.sid, domain_sid);
-			sid_append_rid(&alias.sid, groups->entries[i].idx);
+			sid_append_rid(&alias.sid, groups[i].rid);
 
 			push_alias(mem_ctx, &alias);
 		}
@@ -4059,7 +4058,7 @@
 	result = NT_STATUS_OK;
 
  done:
-	rpccli_samr_Close(pipe_hnd, mem_ctx, &domain_pol);
+	rpccli_samr_close(pipe_hnd, mem_ctx, &domain_pol);
 
 	return result;
 }
@@ -4089,7 +4088,7 @@
 	for (i=0; i<num_server_aliases; i++) {
 		char **names;
 		char **domains;
-		enum lsa_SidType *types;
+		uint32 *types;
 		int j;
 
 		struct full_alias *alias = &server_aliases[i];
@@ -4123,7 +4122,7 @@
 		DEBUG(1, ("\n"));
 	}
 
-	rpccli_lsa_Close(pipe_hnd, mem_ctx, &lsa_pol);
+	rpccli_lsa_close(pipe_hnd, mem_ctx, &lsa_pol);
 
 	return NT_STATUS_OK;
 }
@@ -4144,10 +4143,8 @@
 	NTSTATUS result;
 	POLICY_HND connect_pol;
 
-	result = rpccli_samr_Connect2(pipe_hnd, mem_ctx,
-				      pipe_hnd->cli->desthost,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      &connect_pol);
+	result = rpccli_samr_connect(pipe_hnd, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
+				  &connect_pol);
 
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
@@ -4161,7 +4158,7 @@
 	result = rpc_fetch_domain_aliases(pipe_hnd, mem_ctx, &connect_pol,
 					  domain_sid);
 
-	rpccli_samr_Close(pipe_hnd, mem_ctx, &connect_pol);
+	rpccli_samr_close(pipe_hnd, mem_ctx, &connect_pol);
  done:
 	return result;
 }
@@ -4170,11 +4167,7 @@
 {
 	token->num_sids = 4;
 
-	if (!(token->user_sids = SMB_MALLOC_ARRAY(DOM_SID, 4))) {
-		d_fprintf(stderr, "malloc failed\n");
-		token->num_sids = 0;
-		return;
-	}
+	token->user_sids = SMB_MALLOC_ARRAY(DOM_SID, 4);
 
 	token->user_sids[0] = *user_sid;
 	sid_copy(&token->user_sids[1], &global_sid_World);
@@ -4187,7 +4180,7 @@
 	SAFE_FREE(token->user_sids);
 }
 
-static bool is_sid_in_token(NT_USER_TOKEN *token, DOM_SID *sid)
+static BOOL is_sid_in_token(NT_USER_TOKEN *token, DOM_SID *sid)
 {
 	int i;
 
@@ -4225,11 +4218,11 @@
 	d_printf("%s\n", token->name);
 
 	for (i=0; i<token->token.num_sids; i++) {
-		d_printf(" %s\n", sid_string_tos(&token->token.user_sids[i]));
+		d_printf(" %s\n", sid_string_static(&token->token.user_sids[i]));
 	}
 }
 
-static bool is_alias_member(DOM_SID *sid, struct full_alias *alias)
+static BOOL is_alias_member(DOM_SID *sid, struct full_alias *alias)
 {
 	int i;
 
@@ -4268,141 +4261,157 @@
 	}
 }
 
-static bool get_user_sids(const char *domain, const char *user, NT_USER_TOKEN *token)
+static BOOL get_user_sids(const char *domain, const char *user, NT_USER_TOKEN *token)
 {
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	enum wbcSidType type;
+	struct winbindd_request request;
+	struct winbindd_response response;
 	fstring full_name;
-	struct wbcDomainSid wsid;
-	char *sid_str = NULL;
+	NSS_STATUS result;
+
 	DOM_SID user_sid;
-	uint32_t num_groups;
-	gid_t *groups = NULL;
-	uint32_t i;
 
+	int i;
+
 	fstr_sprintf(full_name, "%s%c%s",
 		     domain, *lp_winbind_separator(), user);
 
 	/* First let's find out the user sid */
 
-	wbc_status = wbcLookupName(domain, user, &wsid, &type);
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
 
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		DEBUG(1, ("winbind could not find %s: %s\n",
-			  full_name, wbcErrorString(wbc_status)));
-		return false;
-	}
+	fstrcpy(request.data.name.dom_name, domain);
+	fstrcpy(request.data.name.name, user);
 
-	wbc_status = wbcSidToString(&wsid, &sid_str);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		return false;
+	result = winbindd_request_response(WINBINDD_LOOKUPNAME, &request, &response);
+
+	if (result != NSS_STATUS_SUCCESS) {
+		DEBUG(1, ("winbind could not find %s\n", full_name));
+		return False;
 	}
 
-	if (type != SID_NAME_USER) {
-		wbcFreeMemory(sid_str);
+	if (response.data.sid.type != SID_NAME_USER) {
 		DEBUG(1, ("%s is not a user\n", full_name));
-		return false;
+		return False;
 	}
 
-	string_to_sid(&user_sid, sid_str);
-	wbcFreeMemory(sid_str);
-	sid_str = NULL;
+	string_to_sid(&user_sid, response.data.sid.sid);
 
 	init_user_token(token, &user_sid);
 
 	/* And now the groups winbind knows about */
 
-	wbc_status = wbcGetGroups(full_name, &num_groups, &groups);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		DEBUG(1, ("winbind could not get groups of %s: %s\n",
-			full_name, wbcErrorString(wbc_status)));
-		return false;
+	ZERO_STRUCT(response);
+
+	fstrcpy(request.data.username, full_name);
+
+	result = winbindd_request_response(WINBINDD_GETGROUPS, &request, &response);
+
+	if (result != NSS_STATUS_SUCCESS) {
+		DEBUG(1, ("winbind could not get groups of %s\n", full_name));
+		return False;
 	}
 
-	for (i = 0; i < num_groups; i++) {
-		gid_t gid = groups[i];
+	for (i = 0; i < response.data.num_entries; i++) {
+		gid_t gid = ((gid_t *)response.extra_data.data)[i];
 		DOM_SID sid;
 
-		wbc_status = wbcGidToSid(gid, &wsid);
-		if (!WBC_ERROR_IS_OK(wbc_status)) {
-			DEBUG(1, ("winbind could not find SID of gid %d: %s\n",
-				  gid, wbcErrorString(wbc_status)));
-			wbcFreeMemory(groups);
-			return false;
-		}
+		struct winbindd_request sidrequest;
+		struct winbindd_response sidresponse;
 
-		wbc_status = wbcSidToString(&wsid, &sid_str);
-		if (!WBC_ERROR_IS_OK(wbc_status)) {
-			wbcFreeMemory(groups);
-			return false;
-		}
+		ZERO_STRUCT(sidrequest);
+		ZERO_STRUCT(sidresponse);
 
-		DEBUG(3, (" %s\n", sid_str));
+		sidrequest.data.gid = gid;
 
-		string_to_sid(&sid, sid_str);
-		wbcFreeMemory(sid_str);
-		sid_str = NULL;
+		result = winbindd_request_response(WINBINDD_GID_TO_SID,
+					  &sidrequest, &sidresponse);
 
+		if (result != NSS_STATUS_SUCCESS) {
+			DEBUG(1, ("winbind could not find SID of gid %d\n",
+				  gid));
+			return False;
+		}
+
+		DEBUG(3, (" %s\n", sidresponse.data.sid.sid));
+
+		string_to_sid(&sid, sidresponse.data.sid.sid);
 		add_sid_to_token(token, &sid);
 	}
-	wbcFreeMemory(groups);
 
-	return true;
+	SAFE_FREE(response.extra_data.data);
+
+	return True;
 }
 	
 /**
  * Get a list of all user tokens we want to look at
  **/
 
-static bool get_user_tokens(int *num_tokens, struct user_token **user_tokens)
+static BOOL get_user_tokens(int *num_tokens, struct user_token **user_tokens)
 {
-	wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
-	uint32_t i, num_users;
-	const char **users;
+	struct winbindd_request request;
+	struct winbindd_response response;
+	const char *extra_data;
+	fstring name;
+	int i;
 	struct user_token *result;
-	TALLOC_CTX *frame = NULL;
 
 	if (lp_winbind_use_default_domain() &&
 	    (opt_target_workgroup == NULL)) {
 		d_fprintf(stderr, "winbind use default domain = yes set, "
 			 "please specify a workgroup\n");
-		return false;
+		return False;
 	}
 
 	/* Send request to winbind daemon */
 
-	wbc_status = wbcListUsers(NULL, &num_users, &users);
-	if (!WBC_ERROR_IS_OK(wbc_status)) {
-		DEBUG(1, ("winbind could not list users: %s\n",
-			  wbcErrorString(wbc_status)));
-		return false;
+	ZERO_STRUCT(request);
+	ZERO_STRUCT(response);
+	
+	if (winbindd_request_response(WINBINDD_LIST_USERS, &request, &response) !=
+	    NSS_STATUS_SUCCESS)
+		return False;
+
+	/* Look through extra data */
+
+	if (!response.extra_data.data)
+		return False;
+
+	extra_data = (const char *)response.extra_data.data;
+	*num_tokens = 0;
+
+	while(next_token(&extra_data, name, ",", sizeof(fstring))) {
+		*num_tokens += 1;
 	}
 
-	result = SMB_MALLOC_ARRAY(struct user_token, num_users);
+	result = SMB_MALLOC_ARRAY(struct user_token, *num_tokens);
 
 	if (result == NULL) {
 		DEBUG(1, ("Could not malloc sid array\n"));
-		wbcFreeMemory(users);
-		return false;
+		return False;
 	}
 
-	frame = talloc_stackframe();
-	for (i=0; i < num_users; i++) {
+	extra_data = (const char *)response.extra_data.data;
+	i=0;
+
+	while(next_token(&extra_data, name, ",", sizeof(fstring))) {
+
 		fstring domain, user;
 		char *p;
 
-		fstrcpy(result[i].name, users[i]);
+		fstrcpy(result[i].name, name);
 
-		p = strchr(users[i], *lp_winbind_separator());
+		p = strchr(name, *lp_winbind_separator());
 
-		DEBUG(3, ("%s\n", users[i]));
+		DEBUG(3, ("%s\n", name));
 
 		if (p == NULL) {
 			fstrcpy(domain, opt_target_workgroup);
-			fstrcpy(user, users[i]);
+			fstrcpy(user, name);
 		} else {
 			*p++ = '\0';
-			fstrcpy(domain, users[i]);
+			fstrcpy(domain, name);
 			strupper_m(domain);
 			fstrcpy(user, p);
 		}
@@ -4410,16 +4419,15 @@
 		get_user_sids(domain, user, &(result[i].token));
 		i+=1;
 	}
-	TALLOC_FREE(frame);
-	wbcFreeMemory(users);
+	
+	SAFE_FREE(response.extra_data.data);
 
-	*num_tokens = num_users;
 	*user_tokens = result;
 
-	return true;
+	return True;
 }
 
-static bool get_user_tokens_from_file(FILE *f,
+static BOOL get_user_tokens_from_file(FILE *f,
 				      int *num_tokens,
 				      struct user_token **tokens)
 {
@@ -4486,25 +4494,20 @@
 	SEC_DESC *root_sd = NULL;
 	struct cli_state *cli = pipe_hnd->cli;
 	int i;
-	union srvsvc_NetShareInfo info;
+	SRV_SHARE_INFO info;
 	WERROR result;
-	NTSTATUS status;
 	uint16 cnum;
 
-	status = rpccli_srvsvc_NetShareGetInfo(pipe_hnd, mem_ctx,
-					       pipe_hnd->cli->desthost,
-					       netname,
-					       502,
-					       &info,
-					       &result);
+	result = rpccli_srvsvc_net_share_get_info(pipe_hnd, mem_ctx, netname,
+					       502, &info);
 
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
+	if (!W_ERROR_IS_OK(result)) {
 		DEBUG(1, ("Coult not query secdesc for share %s\n",
 			  netname));
 		return;
 	}
 
-	share_sd = info.info502->sd_buf.sd;
+	share_sd = info.share.info502.info_502_str.sd;
 	if (share_sd == NULL) {
 		DEBUG(1, ("Got no secdesc for share %s\n",
 			  netname));
@@ -4524,6 +4527,7 @@
 
 	for (i=0; i<num_tokens; i++) {
 		uint32 acc_granted;
+		NTSTATUS status;
 
 		if (share_sd != NULL) {
 			if (!se_access_check(share_sd, &tokens[i].token,
@@ -4616,7 +4620,7 @@
 						const char **argv)
 {
 	int ret;
-	bool r;
+	BOOL r;
 	ENUM_HND hnd;
 	uint32 i;
 	FILE *f;
@@ -4788,10 +4792,6 @@
 				 int argc, const char **argv)
 {
 	WERROR result;
-	NTSTATUS status;
-	uint32_t parm_err = 0;
-	union srvsvc_NetShareInfo info;
-	struct srvsvc_NetShareInfo2 info2;
 
 	if ((argc < 2) || (argc > 3)) {
 		d_fprintf(stderr, "usage: %s <share> <path> [comment]\n",
@@ -4799,25 +4799,12 @@
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-	info2.name		= argv[0];
-	info2.type		= STYPE_DISKTREE;
-	info2.comment		= (argc == 3) ? argv[2] : "";
-	info2.permissions	= 0;
-	info2.max_users		= 0;
-	info2.current_users	= 0;
-	info2.path		= argv[1];
-	info2.password		= NULL;
-
-	info.info2 = &info2;
-
-	status = rpccli_srvsvc_NetShareAdd(pipe_hnd, mem_ctx,
-					   pipe_hnd->cli->desthost,
-					   2,
-					   &info,
-					   &parm_err,
-					   &result);
-
-	return status;
+	result = rpccli_srvsvc_net_share_add(
+		pipe_hnd, mem_ctx, argv[0], STYPE_DISKTREE,
+		(argc == 3) ? argv[2] : "",
+		0, 0, 0, argv[1], NULL, 2, NULL);
+					     
+	return werror_to_ntstatus(result);
 }
 
 static NTSTATUS rpc_sh_share_delete(TALLOC_CTX *mem_ctx,
@@ -4826,20 +4813,14 @@
 				    int argc, const char **argv)
 {
 	WERROR result;
-	NTSTATUS status;
 
 	if (argc != 1) {
 		d_fprintf(stderr, "usage: %s <share>\n", ctx->whoami);
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-	status = rpccli_srvsvc_NetShareDel(pipe_hnd, mem_ctx,
-					   pipe_hnd->cli->desthost,
-					   argv[0],
-					   0,
-					   &result);
-
-	return status;
+	result = rpccli_srvsvc_net_share_del(pipe_hnd, mem_ctx, argv[0]);
+	return werror_to_ntstatus(result);
 }
 
 static NTSTATUS rpc_sh_share_info(TALLOC_CTX *mem_ctx,
@@ -4847,29 +4828,34 @@
 				  struct rpc_pipe_client *pipe_hnd,
 				  int argc, const char **argv)
 {
-	union srvsvc_NetShareInfo info;
+	SRV_SHARE_INFO info;
+	SRV_SHARE_INFO_2 *info2 = &info.share.info2;
 	WERROR result;
-	NTSTATUS status;
 
 	if (argc != 1) {
 		d_fprintf(stderr, "usage: %s <share>\n", ctx->whoami);
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-	status = rpccli_srvsvc_NetShareGetInfo(pipe_hnd, mem_ctx,
-					       pipe_hnd->cli->desthost,
-					       argv[0],
-					       2,
-					       &info,
-					       &result);
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
+	result = rpccli_srvsvc_net_share_get_info(
+		pipe_hnd, mem_ctx, argv[0], 2, &info);
+	if (!W_ERROR_IS_OK(result)) {
 		goto done;
 	}
 
-	d_printf("Name:     %s\n", info.info2->name);
-	d_printf("Comment:  %s\n", info.info2->comment);
-	d_printf("Path:     %s\n", info.info2->path);
-	d_printf("Password: %s\n", info.info2->password);
+	d_printf("Name:     %s\n",
+		 rpcstr_pull_unistr2_talloc(mem_ctx,
+					    &info2->info_2_str.uni_netname));
+	d_printf("Comment:  %s\n",
+		 rpcstr_pull_unistr2_talloc(mem_ctx,
+					    &info2->info_2_str.uni_remark));
+	
+	d_printf("Path:     %s\n",
+		 rpcstr_pull_unistr2_talloc(mem_ctx,
+					    &info2->info_2_str.uni_path));
+	d_printf("Password: %s\n",
+		 rpcstr_pull_unistr2_talloc(mem_ctx,
+					    &info2->info_2_str.uni_passwd));
 
  done:
 	return werror_to_ntstatus(result);
@@ -4928,9 +4914,9 @@
 					int argc,
 					const char **argv)
 {
-	return rpccli_srvsvc_NetFileClose(pipe_hnd, mem_ctx, 
-					    pipe_hnd->cli->desthost, 
-					    atoi(argv[0]), NULL);
+	WERROR result;
+	result = rpccli_srvsvc_net_file_close(pipe_hnd, mem_ctx, atoi(argv[0]));
+	return W_ERROR_IS_OK(result) ? NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
 }
 
 /** 
@@ -4957,13 +4943,19 @@
 /** 
  * Formatted print of open file info 
  *
- * @param r  struct srvsvc_NetFileInfo3 contents
+ * @param info3  FILE_INFO_3 contents
+ * @param str3   strings for FILE_INFO_3
  **/
 
-static void display_file_info_3(struct srvsvc_NetFileInfo3 *r)
+static void display_file_info_3( FILE_INFO_3 *info3 )
 {
+	fstring user = "", path = "";
+
+	rpcstr_pull_unistr2_fstring(user, info3->user);
+	rpcstr_pull_unistr2_fstring(path, info3->path);
+
 	d_printf("%-7.1d %-20.20s 0x%-4.2x %-6.1d %s\n",
-		 r->fid, r->user, r->permissions, r->num_locks, r->path);
+		 info3->id, user, info3->perms, info3->num_locks, path);
 }
 
 /** 
@@ -4990,36 +4982,22 @@
 					int argc,
 					const char **argv)
 {
-	struct srvsvc_NetFileInfoCtr info_ctr;
-	struct srvsvc_NetFileCtr3 ctr3;
+	SRV_FILE_INFO_CTR ctr;
 	WERROR result;
-	NTSTATUS status;
+	ENUM_HND hnd;
 	uint32 preferred_len = 0xffffffff, i;
 	const char *username=NULL;
-	uint32_t total_entries = 0;
-	uint32_t resume_handle = 0;
 
+	init_enum_hnd(&hnd, 0);
+
 	/* if argc > 0, must be user command */
 	if (argc > 0)
 		username = smb_xstrdup(argv[0]);
+		
+	result = rpccli_srvsvc_net_file_enum(pipe_hnd,
+					mem_ctx, 3, username, &ctr, preferred_len, &hnd);
 
-	ZERO_STRUCT(info_ctr);
-	ZERO_STRUCT(ctr3);
-
-	info_ctr.level = 3;
-	info_ctr.ctr.ctr3 = &ctr3;
-
-	status = rpccli_srvsvc_NetFileEnum(pipe_hnd, mem_ctx,
-					   pipe_hnd->cli->desthost,
-					   NULL,
-					   username,
-					   &info_ctr,
-					   preferred_len,
-					   &total_entries,
-					   &resume_handle,
-					   &result);
-
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result))
+	if (!W_ERROR_IS_OK(result))
 		goto done;
 
 	/* Display results */
@@ -5028,8 +5006,8 @@
 		 "\nEnumerating open files on remote server:\n\n"\
 		 "\nFileId  Opened by            Perms  Locks  Path"\
 		 "\n------  ---------            -----  -----  ---- \n");
-	for (i = 0; i < total_entries; i++)
-		display_file_info_3(&info_ctr.ctr.ctr3->array[i]);
+	for (i = 0; i < ctr.num_entries; i++)
+		display_file_info_3(&ctr.file.info3[i]);
  done:
 	return W_ERROR_IS_OK(result) ? NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
 }
@@ -5108,7 +5086,7 @@
 {
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	
-	result = rpccli_initshutdown_Abort(pipe_hnd, mem_ctx, NULL, NULL);
+	result = rpccli_shutdown_abort(pipe_hnd, mem_ctx);
 	
 	if (NT_STATUS_IS_OK(result)) {
 		d_printf("\nShutdown successfully aborted\n");
@@ -5145,7 +5123,7 @@
 {
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	
-	result = rpccli_winreg_AbortSystemShutdown(pipe_hnd, mem_ctx, NULL, NULL);
+	result = werror_to_ntstatus(rpccli_reg_abort_shutdown(pipe_hnd, mem_ctx));
 	
 	if (NT_STATUS_IS_OK(result)) {
 		d_printf("\nShutdown successfully aborted\n");
@@ -5168,7 +5146,7 @@
 
 static int rpc_shutdown_abort(int argc, const char **argv) 
 {
-	int rc = run_rpc_command(NULL, PI_INITSHUTDOWN, 0, 
+	int rc = run_rpc_command(NULL, PI_SHUTDOWN, 0, 
 				 rpc_shutdown_abort_internals,
 				 argc, argv);
 
@@ -5198,7 +5176,7 @@
  * @return Normal NTSTATUS return.
  **/
 
-NTSTATUS rpc_init_shutdown_internals(const DOM_SID *domain_sid,
+static NTSTATUS rpc_init_shutdown_internals(const DOM_SID *domain_sid, 
 						const char *domain_name, 
 						struct cli_state *cli, 
 						struct rpc_pipe_client *pipe_hnd,
@@ -5209,8 +5187,6 @@
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
         const char *msg = "This machine will be shutdown shortly";
 	uint32 timeout = 20;
-	struct initshutdown_String msg_string;
-	struct initshutdown_String_sub s;
 
 	if (opt_comment) {
 		msg = opt_comment;
@@ -5219,12 +5195,9 @@
 		timeout = opt_timeout;
 	}
 
-	s.name = msg;
-	msg_string.name = &s;
-
 	/* create an entry */
-	result = rpccli_initshutdown_Init(pipe_hnd, mem_ctx, NULL,
-			&msg_string, timeout, opt_force, opt_reboot, NULL);
+	result = rpccli_shutdown_init(pipe_hnd, mem_ctx, msg, timeout, opt_reboot, 
+				   opt_force);
 
 	if (NT_STATUS_IS_OK(result)) {
 		d_printf("\nShutdown of remote machine succeeded\n");
@@ -5251,7 +5224,7 @@
  * @return Normal NTSTATUS return.
  **/
 
-NTSTATUS rpc_reg_shutdown_internals(const DOM_SID *domain_sid,
+static NTSTATUS rpc_reg_shutdown_internals(const DOM_SID *domain_sid, 
 						const char *domain_name, 
 						struct cli_state *cli, 
 						struct rpc_pipe_client *pipe_hnd,
@@ -5259,38 +5232,55 @@
 						int argc,
 						const char **argv) 
 {
+	WERROR result;
         const char *msg = "This machine will be shutdown shortly";
 	uint32 timeout = 20;
-	struct initshutdown_String msg_string;
-	struct initshutdown_String_sub s;
-	NTSTATUS result;
-	WERROR werr;
+#if 0
+	poptContext pc;
+	int rc;
 
+	struct poptOption long_options[] = {
+		{"message",    'm', POPT_ARG_STRING, &msg},
+		{"timeout",    't', POPT_ARG_INT,    &timeout},
+		{"reboot",     'r', POPT_ARG_NONE,   &reboot},
+		{"force",      'f', POPT_ARG_NONE,   &force},
+		{ 0, 0, 0, 0}
+	};
+
+	pc = poptGetContext(NULL, argc, (const char **) argv, long_options, 
+			    POPT_CONTEXT_KEEP_FIRST);
+
+	rc = poptGetNextOpt(pc);
+	
+	if (rc < -1) {
+		/* an error occurred during option processing */
+		DEBUG(0, ("%s: %s\n",
+			  poptBadOption(pc, POPT_BADOPTION_NOALIAS),
+			  poptStrerror(rc)));
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+#endif
 	if (opt_comment) {
 		msg = opt_comment;
 	}
-	s.name = msg;
-	msg_string.name = &s;
-
 	if (opt_timeout) {
 		timeout = opt_timeout;
 	}
 
 	/* create an entry */
-	result = rpccli_winreg_InitiateSystemShutdown(pipe_hnd, mem_ctx, NULL,
-			&msg_string, timeout, opt_force, opt_reboot, &werr);
+	result = rpccli_reg_shutdown(pipe_hnd, mem_ctx, msg, timeout, opt_reboot, opt_force);
 
-	if (NT_STATUS_IS_OK(result)) {
+	if (W_ERROR_IS_OK(result)) {
 		d_printf("\nShutdown of remote machine succeeded\n");
 	} else {
 		d_fprintf(stderr, "\nShutdown of remote machine failed\n");
-		if ( W_ERROR_EQUAL(werr, WERR_MACHINE_LOCKED) )
+		if (W_ERROR_EQUAL(result,WERR_MACHINE_LOCKED))
 			d_fprintf(stderr, "\nMachine locked, use -f switch to force\n");
 		else
-			d_fprintf(stderr, "\nresult was: %s\n", dos_errstr(werr));
+			d_fprintf(stderr, "\nresult was: %s\n", dos_errstr(result));
 	}
 
-	return result;
+	return werror_to_ntstatus(result);
 }
 
 /** 
@@ -5305,7 +5295,7 @@
 
 static int rpc_shutdown(int argc, const char **argv) 
 {
-	int rc = run_rpc_command(NULL, PI_INITSHUTDOWN, 0, 
+	int rc = run_rpc_command(NULL, PI_SHUTDOWN, 0, 
 				 rpc_init_shutdown_internals,
 				 argc, argv);
 
@@ -5349,12 +5339,9 @@
 	POLICY_HND connect_pol, domain_pol, user_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	char *acct_name;
-	struct lsa_String lsa_acct_name;
 	uint32 acb_info;
-	uint32 acct_flags=0;
 	uint32 user_rid;
-	uint32_t access_granted = 0;
-	union samr_UserInfo info;
+	uint32 acct_flags=0;
 
 	if (argc != 2) {
 		d_printf("Usage: net rpc trustdom add <domain_name> <pw>\n");
@@ -5364,93 +5351,74 @@
 	/* 
 	 * Make valid trusting domain account (ie. uppercased and with '$' appended)
 	 */
-
+	 
 	if (asprintf(&acct_name, "%s$", argv[0]) < 0) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
 	strupper_m(acct_name);
 
-	init_lsa_String(&lsa_acct_name, acct_name);
-
 	/* Get samr policy handle */
-	result = rpccli_samr_Connect2(pipe_hnd, mem_ctx,
-				      pipe_hnd->cli->desthost,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      &connect_pol);
+	result = rpccli_samr_connect(pipe_hnd, mem_ctx, MAXIMUM_ALLOWED_ACCESS,
+				  &connect_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
-
+	
 	/* Get domain policy handle */
-	result = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					CONST_DISCARD(struct dom_sid2 *, domain_sid),
-					&domain_pol);
+	result = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      domain_sid, &domain_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
 	/* Create trusting domain's account */
-	acb_info = ACB_NORMAL;
-	acct_flags = SEC_GENERIC_READ | SEC_GENERIC_WRITE | SEC_GENERIC_EXECUTE |
-		     SEC_STD_WRITE_DAC | SEC_STD_DELETE |
-		     SAMR_USER_ACCESS_SET_PASSWORD |
-		     SAMR_USER_ACCESS_GET_ATTRIBUTES |
-		     SAMR_USER_ACCESS_SET_ATTRIBUTES;
+	acb_info = ACB_NORMAL; 
+        acct_flags = SAMR_GENERIC_READ | SAMR_GENERIC_WRITE |
+                SAMR_GENERIC_EXECUTE | SAMR_STANDARD_WRITEDAC |
+                SAMR_STANDARD_DELETE | SAMR_USER_SETPASS | SAMR_USER_GETATTR |
+                SAMR_USER_SETATTR;
 
-	result = rpccli_samr_CreateUser2(pipe_hnd, mem_ctx,
-					 &domain_pol,
-					 &lsa_acct_name,
-					 acb_info,
-					 acct_flags,
-					 &user_pol,
-					 &access_granted,
-					 &user_rid);
+	result = rpccli_samr_create_dom_user(pipe_hnd, mem_ctx, &domain_pol,
+					  acct_name, acb_info, acct_flags,
+					  &user_pol, &user_rid);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
 	{
+		SAM_USERINFO_CTR ctr;
+		SAM_USER_INFO_23 p23;
 		NTTIME notime;
-		struct samr_LogonHours hours;
-		struct lsa_BinaryString parameters;
-		const int units_per_week = 168;
+		char nostr[] = "";
+		LOGON_HRS hrs;
 		uchar pwbuf[516];
 
 		encode_pw_buffer(pwbuf, argv[1], STR_UNICODE);
 
+		ZERO_STRUCT(ctr);
+		ZERO_STRUCT(p23);
 		ZERO_STRUCT(notime);
-		ZERO_STRUCT(hours);
-		ZERO_STRUCT(parameters);
+		hrs.max_len = 1260;
+		hrs.offset = 0;
+		hrs.len = 21;
+		memset(hrs.hours, 0xFF, sizeof(hrs.hours));
+		acb_info = ACB_DOMTRUST;
 
-		hours.bits = talloc_array(mem_ctx, uint8_t, units_per_week);
-		if (!hours.bits) {
-			result = NT_STATUS_NO_MEMORY;
-			goto done;
-		}
-		hours.units_per_week = units_per_week;
-		memset(hours.bits, 0xFF, units_per_week);
+		init_sam_user_info23A(&p23, &notime, &notime, &notime,
+				      &notime, &notime, &notime,
+				      nostr, nostr, nostr, nostr, nostr,
+				      nostr, nostr, nostr, nostr, nostr,
+				      0, 0, acb_info, ACCT_FLAGS, 168, &hrs, 
+				      0, 0, (char *)pwbuf);
+		ctr.switch_value = 23;
+		ctr.info.id23 = &p23;
+		p23.passmustchange = 0;
 
-		init_samr_user_info23(&info.info23,
-				      notime, notime, notime,
-				      notime, notime, notime,
-				      NULL, NULL, NULL, NULL, NULL,
-				      NULL, NULL, NULL, NULL, &parameters,
-				      0, 0, ACB_DOMTRUST, SAMR_FIELD_ACCT_FLAGS,
-				      hours,
-				      0, 0, 0, 0, 0, 0, 0,
-				      pwbuf, 24);
+		result = rpccli_samr_set_userinfo(pipe_hnd, mem_ctx, &user_pol, 23,
+					       &cli->user_session_key, &ctr);
 
-		SamOEMhashBlob(info.info23.password.data, 516,
-			       &cli->user_session_key);
-
-		result = rpccli_samr_SetUserInfo2(pipe_hnd, mem_ctx,
-						  &user_pol,
-						  23,
-						  &info);
-
 		if (!NT_STATUS_IS_OK(result)) {
 			DEBUG(0,("Could not set trust account password: %s\n",
 				 nt_errstr(result)));
@@ -5510,9 +5478,10 @@
 	POLICY_HND connect_pol, domain_pol, user_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
 	char *acct_name;
+	const char **names;
 	DOM_SID trust_acct_sid;
-	struct samr_Ids user_rids, name_types;
-	struct lsa_String lsa_acct_name;
+	uint32 *user_rids, num_rids, *name_types;
+	uint32 flags = 0x000003e8; /* Unknown */
 
 	if (argc != 1) {
 		d_printf("Usage: net rpc trustdom del <domain_name>\n");
@@ -5529,43 +5498,38 @@
 
 	strupper_m(acct_name);
 
+	if ((names = TALLOC_ARRAY(mem_ctx, const char *, 1)) == NULL) {
+		return NT_STATUS_NO_MEMORY;
+	}
+	names[0] = acct_name;
+
+
 	/* Get samr policy handle */
-	result = rpccli_samr_Connect2(pipe_hnd, mem_ctx,
-				      pipe_hnd->cli->desthost,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      &connect_pol);
+	result = rpccli_samr_connect(pipe_hnd, mem_ctx, MAXIMUM_ALLOWED_ACCESS,
+				  &connect_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
-
+	
 	/* Get domain policy handle */
-	result = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					CONST_DISCARD(struct dom_sid2 *, domain_sid),
-					&domain_pol);
+	result = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &connect_pol,
+				      MAXIMUM_ALLOWED_ACCESS,
+				      domain_sid, &domain_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
-	init_lsa_String(&lsa_acct_name, acct_name);
-
-	result = rpccli_samr_LookupNames(pipe_hnd, mem_ctx,
-					 &domain_pol,
-					 1,
-					 &lsa_acct_name,
-					 &user_rids,
-					 &name_types);
-
+	result = rpccli_samr_lookup_names(pipe_hnd, mem_ctx, &domain_pol, flags, 1,
+				       names, &num_rids,
+				       &user_rids, &name_types);
+	
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
-	result = rpccli_samr_OpenUser(pipe_hnd, mem_ctx,
-				      &domain_pol,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      user_rids.ids[0],
-				      &user_pol);
+	result = rpccli_samr_open_user(pipe_hnd, mem_ctx, &domain_pol,
+				    MAXIMUM_ALLOWED_ACCESS,
+				    user_rids[0], &user_pol);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
@@ -5573,23 +5537,22 @@
 
 	/* append the rid to the domain sid */
 	sid_copy(&trust_acct_sid, domain_sid);
-	if (!sid_append_rid(&trust_acct_sid, user_rids.ids[0])) {
+	if (!sid_append_rid(&trust_acct_sid, user_rids[0])) {
 		goto done;
 	}
 
 	/* remove the sid */
 
-	result = rpccli_samr_RemoveMemberFromForeignDomain(pipe_hnd, mem_ctx,
-							   &user_pol,
-							   &trust_acct_sid);
+	result = rpccli_samr_remove_sid_foreign_domain(pipe_hnd, mem_ctx, &user_pol,
+						    &trust_acct_sid);
+
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
 	/* Delete user */
 
-	result = rpccli_samr_DeleteUser(pipe_hnd, mem_ctx,
-					&user_pol);
+	result = rpccli_samr_delete_dom_user(pipe_hnd, mem_ctx, &user_pol);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
@@ -5624,50 +5587,8 @@
 		return -1;
 	}
 }
+ 
 
-static NTSTATUS rpc_trustdom_get_pdc(struct cli_state *cli,
-				     TALLOC_CTX *mem_ctx,
-				     const char *domain_name)
-{
-	char *dc_name = NULL;
-	const char *buffer = NULL;
-	struct rpc_pipe_client *netr;
-	NTSTATUS status;
-
-	/* Use NetServerEnum2 */
-
-	if (cli_get_pdc_name(cli, domain_name, &dc_name)) {
-		SAFE_FREE(dc_name);
-		return NT_STATUS_OK;
-	}
-
-	DEBUG(1,("NetServerEnum2 error: Couldn't find primary domain controller\
-		 for domain %s\n", domain_name));
-
-	/* Try netr_GetDcName */
-
-	netr = cli_rpc_pipe_open_noauth(cli, PI_NETLOGON, &status);
-	if (!netr) {
-		return status;
-	}
-
-	status = rpccli_netr_GetDcName(netr, mem_ctx,
-				       cli->desthost,
-				       domain_name,
-				       &buffer,
-				       NULL);
-	cli_rpc_pipe_close(netr);
-
-	if (NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	DEBUG(1,("netr_GetDcName error: Couldn't find primary domain controller\
-		 for domain %s\n", domain_name));
-
-	return status;
-}
-
 /**
  * Establish trust relationship to a trusting domain.
  * Interdomain account must already be created on remote PDC.
@@ -5681,17 +5602,17 @@
 static int rpc_trustdom_establish(int argc, const char **argv)
 {
 	struct cli_state *cli = NULL;
-	struct sockaddr_storage server_ss;
+	struct in_addr server_ip;
 	struct rpc_pipe_client *pipe_hnd = NULL;
 	POLICY_HND connect_hnd;
 	TALLOC_CTX *mem_ctx;
 	NTSTATUS nt_status;
 	DOM_SID *domain_sid;
-
+	
 	char* domain_name;
+	char* domain_name_pol;
 	char* acct_name;
 	fstring pdc_name;
-	union lsa_PolicyInformation *info = NULL;
 
 	/*
 	 * Connect to \\server\ipc$ as 'our domain' account with password
@@ -5708,7 +5629,7 @@
 	/* account name used at first is our domain's name with '$' */
 	asprintf(&acct_name, "%s$", lp_workgroup());
 	strupper_m(acct_name);
-
+	
 	/*
 	 * opt_workgroup will be used by connection functions further,
 	 * hence it should be set to remote domain name instead of ours
@@ -5716,17 +5637,17 @@
 	if (opt_workgroup) {
 		opt_workgroup = smb_xstrdup(domain_name);
 	};
-
+	
 	opt_user_name = acct_name;
 
 	/* find the domain controller */
-	if (!net_find_pdc(&server_ss, pdc_name, domain_name)) {
+	if (!net_find_pdc(&server_ip, pdc_name, domain_name)) {
 		DEBUG(0, ("Couldn't find domain controller for domain %s\n", domain_name));
 		return -1;
 	}
 
 	/* connect to ipc$ as username/password */
-	nt_status = connect_to_ipc(&cli, &server_ss, pdc_name);
+	nt_status = connect_to_ipc(&cli, &server_ip, pdc_name);
 	if (!NT_STATUS_EQUAL(nt_status, NT_STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT)) {
 
 		/* Is it trusting domain account for sure ? */
@@ -5738,19 +5659,30 @@
 	/* store who we connected to */
 
 	saf_store( domain_name, pdc_name );
-
+	
 	/*
 	 * Connect to \\server\ipc$ again (this time anonymously)
 	 */
-
-	nt_status = connect_to_ipc_anonymous(&cli, &server_ss, (char*)pdc_name);
-
+	
+	nt_status = connect_to_ipc_anonymous(&cli, &server_ip, (char*)pdc_name);
+	
 	if (NT_STATUS_IS_ERR(nt_status)) {
 		DEBUG(0, ("Couldn't connect to domain %s controller. Error was %s.\n",
 			domain_name, nt_errstr(nt_status)));
 		return -1;
 	}
 
+	/*
+	 * Use NetServerEnum2 to make sure we're talking to a proper server
+	 */
+	 
+	if (!cli_get_pdc_name(cli, domain_name, (char*)pdc_name)) {
+		DEBUG(0, ("NetServerEnum2 error: Couldn't find primary domain controller\
+			 for domain %s\n", domain_name));
+		cli_shutdown(cli);
+		return -1;
+	}
+	 
 	if (!(mem_ctx = talloc_init("establishing trust relationship to "
 				    "domain %s", domain_name))) {
 		DEBUG(0, ("talloc_init() failed\n"));
@@ -5758,15 +5690,6 @@
 		return -1;
 	}
 
-	/* Make sure we're talking to a proper server */
-
-	nt_status = rpc_trustdom_get_pdc(cli, mem_ctx, domain_name);
-	if (!NT_STATUS_IS_OK(nt_status)) {
-		cli_shutdown(cli);
-		talloc_destroy(mem_ctx);
-		return -1;
-	}
-
 	/*
 	 * Call LsaOpenPolicy and LsaQueryInfo
 	 */
@@ -5790,11 +5713,10 @@
 	}
 
 	/* Querying info level 5 */
-
-	nt_status = rpccli_lsa_QueryInfoPolicy(pipe_hnd, mem_ctx,
-					       &connect_hnd,
-					       LSA_POLICY_INFO_ACCOUNT_DOMAIN,
-					       &info);
+	
+	nt_status = rpccli_lsa_query_info_policy(pipe_hnd, mem_ctx, &connect_hnd,
+	                                      5 /* info level */,
+					      &domain_name_pol, &domain_sid);
 	if (NT_STATUS_IS_ERR(nt_status)) {
 		DEBUG(0, ("LSA Query Info failed. Returned error was %s\n",
 			nt_errstr(nt_status)));
@@ -5803,8 +5725,6 @@
 		return -1;
 	}
 
-	domain_sid = info->account_domain.sid;
-
 	/* There should be actually query info level 3 (following nt serv behaviour),
 	   but I still don't know if it's _really_ necessary */
 			
@@ -5812,7 +5732,9 @@
 	 * Store the password in secrets db
 	 */
 
-	if (!pdb_set_trusteddom_pw(domain_name, opt_password, domain_sid)) {
+	if (!secrets_store_trusted_domain_password(domain_name,
+						   opt_password,
+						   domain_sid)) {
 		DEBUG(0, ("Storing password for trusted domain failed.\n"));
 		cli_shutdown(cli);
 		talloc_destroy(mem_ctx);
@@ -5823,7 +5745,7 @@
 	 * Close the pipes and clean up
 	 */
 	 
-	nt_status = rpccli_lsa_Close(pipe_hnd, mem_ctx, &connect_hnd);
+	nt_status = rpccli_lsa_close(pipe_hnd, mem_ctx, &connect_hnd);
 	if (NT_STATUS_IS_ERR(nt_status)) {
 		DEBUG(0, ("Couldn't close LSA pipe. Error was %s\n",
 			nt_errstr(nt_status)));
@@ -5852,7 +5774,6 @@
 static int rpc_trustdom_revoke(int argc, const char **argv)
 {
 	char* domain_name;
-	int rc = -1;
 
 	if (argc < 1) return -1;
 	
@@ -5861,16 +5782,13 @@
 	strupper_m(domain_name);
 
 	/* delete password of the trust */
-	if (!pdb_del_trusteddom_pw(domain_name)) {
+	if (!trusted_domain_password_delete(domain_name)) {
 		DEBUG(0, ("Failed to revoke relationship to the trusted domain %s\n",
 			  domain_name));
-		goto done;
+		return -1;
 	};
 	
-	rc = 0;
-done:
-	SAFE_FREE(domain_name);
-	return rc;
+	return 0;
 }
 
 /**
@@ -5903,7 +5821,7 @@
 					const char **argv)
 {
 	fstring str_sid;
-	sid_to_fstring(str_sid, domain_sid);
+	sid_to_string(str_sid, domain_sid);
 	d_printf("%s\n", str_sid);
 	return NT_STATUS_OK;
 }
@@ -5914,7 +5832,7 @@
 	int pad_len, col_len = 20;
 
 	/* convert sid into ascii string */
-	sid_to_fstring(ascii_sid, dom_sid);
+	sid_to_string(ascii_sid, dom_sid);
 
 	/* calculate padding space for d_printf to look nicer */
 	pad_len = col_len - strlen(trusted_dom_name);
@@ -5931,26 +5849,24 @@
 				      const char *trusted_dom_name)
 {
 	NTSTATUS nt_status;
-	union lsa_TrustedDomainInfo *info = NULL;
+	LSA_TRUSTED_DOMAIN_INFO *info;
 	char *cleartextpwd = NULL;
 	DATA_BLOB data;
 
-	nt_status = rpccli_lsa_QueryTrustedDomainInfoBySid(pipe_hnd, mem_ctx,
-							   pol,
-							   &dom_sid,
-							   LSA_TRUSTED_DOMAIN_INFO_PASSWORD,
-							   &info);
+	nt_status = rpccli_lsa_query_trusted_domain_info_by_sid(pipe_hnd, mem_ctx, pol, 4, &dom_sid, &info);
+	
 	if (NT_STATUS_IS_ERR(nt_status)) {
 		DEBUG(0,("Could not query trusted domain info. Error was %s\n",
 		nt_errstr(nt_status)));
 		goto done;
 	}
 
-	data = data_blob(info->password.password->data,
-			 info->password.password->length);
+	data = data_blob(NULL, info->password.password.length);
 
-	cleartextpwd = decrypt_trustdom_secret(pipe_hnd->cli->pwd.password,
-					       &data);
+	memcpy(data.data, info->password.password.data, info->password.password.length);
+	data.length 	= info->password.password.length;
+				
+	cleartextpwd = decrypt_trustdom_secret(pipe_hnd->cli->pwd.password, &data);
 
 	if (cleartextpwd == NULL) {
 		DEBUG(0,("retrieved NULL password\n"));
@@ -5958,16 +5874,17 @@
 		goto done;
 	}
 	
-	if (!pdb_set_trusteddom_pw(trusted_dom_name, cleartextpwd, &dom_sid)) {
+	if (!secrets_store_trusted_domain_password(trusted_dom_name,
+						   cleartextpwd,
+						   &dom_sid)) {
 		DEBUG(0, ("Storing password for trusted domain failed.\n"));
 		nt_status = NT_STATUS_UNSUCCESSFUL;
 		goto done;
 	}
 
 #ifdef DEBUG_PASSWORD
-	DEBUG(100,("successfully vampired trusted domain [%s], sid: [%s], "
-		   "password: [%s]\n", trusted_dom_name,
-		   sid_string_dbg(&dom_sid), cleartextpwd));
+	DEBUG(100,("successfully vampired trusted domain [%s], sid: [%s], password: [%s]\n",  
+		trusted_dom_name, sid_string_static(&dom_sid), cleartextpwd));
 #endif
 
 done:
@@ -5987,13 +5904,14 @@
 	const char *domain_name = NULL;
 	DOM_SID *queried_dom_sid;
 	POLICY_HND connect_hnd;
-	union lsa_PolicyInformation *info = NULL;
 
 	/* trusted domains listing variables */
-	unsigned int enum_ctx = 0;
+	unsigned int num_domains, enum_ctx = 0;
 	int i;
-	struct lsa_DomainList dom_list;
+	DOM_SID *domain_sids;
+	char **trusted_dom_names;
 	fstring pdc_name;
+	char *dummy;
 
 	/*
 	 * Listing trusted domains (stored in secrets.tdb, if local)
@@ -6016,10 +5934,8 @@
 	};
 
 	/* open \PIPE\lsarpc and open policy handle */
-	nt_status = net_make_ipc_connection(NET_FLAGS_PDC, &cli);
-	if (!NT_STATUS_IS_OK(nt_status)) {
-		DEBUG(0, ("Couldn't connect to domain controller: %s\n",
-			  nt_errstr(nt_status)));
+	if (!(cli = net_make_ipc_connection(NET_FLAGS_PDC))) {
+		DEBUG(0, ("Couldn't connect to domain controller\n"));
 		talloc_destroy(mem_ctx);
 		return -1;
 	};
@@ -6044,10 +5960,9 @@
 	};
 
 	/* query info level 5 to obtain sid of a domain being queried */
-	nt_status = rpccli_lsa_QueryInfoPolicy(pipe_hnd, mem_ctx,
-					       &connect_hnd,
-					       LSA_POLICY_INFO_ACCOUNT_DOMAIN,
-					       &info);
+	nt_status = rpccli_lsa_query_info_policy(
+		pipe_hnd, mem_ctx, &connect_hnd, 5 /* info level */, 
+		&dummy, &queried_dom_sid);
 
 	if (NT_STATUS_IS_ERR(nt_status)) {
 		DEBUG(0, ("LSA Query Info failed. Returned error was %s\n",
@@ -6057,8 +5972,6 @@
 		return -1;
 	}
 
-	queried_dom_sid = info->account_domain.sid;
-
 	/*
 	 * Keep calling LsaEnumTrustdom over opened pipe until
 	 * the end of enumeration is reached
@@ -6067,11 +5980,10 @@
 	d_printf("Vampire trusted domains:\n\n");
 
 	do {
-		nt_status = rpccli_lsa_EnumTrustDom(pipe_hnd, mem_ctx,
-						    &connect_hnd,
-						    &enum_ctx,
-						    &dom_list,
-						    (uint32_t)-1);
+		nt_status = rpccli_lsa_enum_trust_dom(pipe_hnd, mem_ctx, &connect_hnd, &enum_ctx,
+						   &num_domains,
+						   &trusted_dom_names, &domain_sids);
+		
 		if (NT_STATUS_IS_ERR(nt_status)) {
 			DEBUG(0, ("Couldn't enumerate trusted domains. Error was %s\n",
 				nt_errstr(nt_status)));
@@ -6079,15 +5991,13 @@
 			talloc_destroy(mem_ctx);
 			return -1;
 		};
+		
+		for (i = 0; i < num_domains; i++) {
 
-		for (i = 0; i < dom_list.count; i++) {
+			print_trusted_domain(&(domain_sids[i]), trusted_dom_names[i]);
 
-			print_trusted_domain(dom_list.domains[i].sid,
-					     dom_list.domains[i].name.string);
-
 			nt_status = vampire_trusted_domain(pipe_hnd, mem_ctx, &connect_hnd, 
-							   *dom_list.domains[i].sid,
-							   dom_list.domains[i].name.string);
+							   domain_sids[i], trusted_dom_names[i]);
 			if (!NT_STATUS_IS_OK(nt_status)) {
 				cli_shutdown(cli);
 				talloc_destroy(mem_ctx);
@@ -6099,12 +6009,12 @@
 		 * in case of no trusted domains say something rather
 		 * than just display blank line
 		 */
-		if (!dom_list.count) d_printf("none\n");
+		if (!num_domains) d_printf("none\n");
 
 	} while (NT_STATUS_EQUAL(nt_status, STATUS_MORE_ENTRIES));
 
 	/* close this connection before doing next one */
-	nt_status = rpccli_lsa_Close(pipe_hnd, mem_ctx, &connect_hnd);
+	nt_status = rpccli_lsa_close(pipe_hnd, mem_ctx, &connect_hnd);
 	if (NT_STATUS_IS_ERR(nt_status)) {
 		DEBUG(0, ("Couldn't properly close lsa policy handle. Error was %s\n",
 			nt_errstr(nt_status)));
@@ -6132,18 +6042,20 @@
 	fstring padding;
 	int ascii_dom_name_len;
 	POLICY_HND connect_hnd;
-	union lsa_PolicyInformation *info = NULL;
-
+	
 	/* trusted domains listing variables */
 	unsigned int num_domains, enum_ctx = 0;
 	int i, pad_len, col_len = 20;
-	struct lsa_DomainList dom_list;
+	DOM_SID *domain_sids;
+	char **trusted_dom_names;
 	fstring pdc_name;
-
+	char *dummy;
+	
 	/* trusting domains listing variables */
 	POLICY_HND domain_hnd;
-	struct samr_SamArray *trusts = NULL;
-
+	char **trusting_dom_names;
+	uint32 *trusting_dom_rids;
+	
 	/*
 	 * Listing trusted domains (stored in secrets.tdb, if local)
 	 */
@@ -6165,10 +6077,8 @@
 	};
 
 	/* open \PIPE\lsarpc and open policy handle */
-	nt_status = net_make_ipc_connection(NET_FLAGS_PDC, &cli);
-	if (!NT_STATUS_IS_OK(nt_status)) {
-		DEBUG(0, ("Couldn't connect to domain controller: %s\n",
-			  nt_errstr(nt_status)));
+	if (!(cli = net_make_ipc_connection(NET_FLAGS_PDC))) {
+		DEBUG(0, ("Couldn't connect to domain controller\n"));
 		talloc_destroy(mem_ctx);
 		return -1;
 	};
@@ -6193,10 +6103,9 @@
 	};
 	
 	/* query info level 5 to obtain sid of a domain being queried */
-	nt_status = rpccli_lsa_QueryInfoPolicy(pipe_hnd, mem_ctx,
-					       &connect_hnd,
-					       LSA_POLICY_INFO_ACCOUNT_DOMAIN,
-					       &info);
+	nt_status = rpccli_lsa_query_info_policy(
+		pipe_hnd, mem_ctx, &connect_hnd, 5 /* info level */, 
+		&dummy, &queried_dom_sid);
 
 	if (NT_STATUS_IS_ERR(nt_status)) {
 		DEBUG(0, ("LSA Query Info failed. Returned error was %s\n",
@@ -6205,9 +6114,7 @@
 		talloc_destroy(mem_ctx);
 		return -1;
 	}
-
-	queried_dom_sid = info->account_domain.sid;
-
+		
 	/*
 	 * Keep calling LsaEnumTrustdom over opened pipe until
 	 * the end of enumeration is reached
@@ -6216,11 +6123,10 @@
 	d_printf("Trusted domains list:\n\n");
 
 	do {
-		nt_status = rpccli_lsa_EnumTrustDom(pipe_hnd, mem_ctx,
-						    &connect_hnd,
-						    &enum_ctx,
-						    &dom_list,
-						    (uint32_t)-1);
+		nt_status = rpccli_lsa_enum_trust_dom(pipe_hnd, mem_ctx, &connect_hnd, &enum_ctx,
+						   &num_domains,
+						   &trusted_dom_names, &domain_sids);
+		
 		if (NT_STATUS_IS_ERR(nt_status)) {
 			DEBUG(0, ("Couldn't enumerate trusted domains. Error was %s\n",
 				nt_errstr(nt_status)));
@@ -6228,22 +6134,21 @@
 			talloc_destroy(mem_ctx);
 			return -1;
 		};
-
-		for (i = 0; i < dom_list.count; i++) {
-			print_trusted_domain(dom_list.domains[i].sid,
-					     dom_list.domains[i].name.string);
+		
+		for (i = 0; i < num_domains; i++) {
+			print_trusted_domain(&(domain_sids[i]), trusted_dom_names[i]);
 		};
-
+		
 		/*
 		 * in case of no trusted domains say something rather
 		 * than just display blank line
 		 */
-		if (!dom_list.count) d_printf("none\n");
+		if (!num_domains) d_printf("none\n");
 
 	} while (NT_STATUS_EQUAL(nt_status, STATUS_MORE_ENTRIES));
 
 	/* close this connection before doing next one */
-	nt_status = rpccli_lsa_Close(pipe_hnd, mem_ctx, &connect_hnd);
+	nt_status = rpccli_lsa_close(pipe_hnd, mem_ctx, &connect_hnd);
 	if (NT_STATUS_IS_ERR(nt_status)) {
 		DEBUG(0, ("Couldn't properly close lsa policy handle. Error was %s\n",
 			nt_errstr(nt_status)));
@@ -6270,12 +6175,10 @@
 		talloc_destroy(mem_ctx);
 		return -1;
 	};
-
-	/* SamrConnect2 */
-	nt_status = rpccli_samr_Connect2(pipe_hnd, mem_ctx,
-					 pipe_hnd->cli->desthost,
-					 SA_RIGHT_SAM_OPEN_DOMAIN,
-					 &connect_hnd);
+	
+	/* SamrConnect */
+	nt_status = rpccli_samr_connect(pipe_hnd, mem_ctx, SA_RIGHT_SAM_OPEN_DOMAIN,
+								 &connect_hnd);
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		DEBUG(0, ("Couldn't open SAMR policy handle. Error was %s\n",
 			nt_errstr(nt_status)));
@@ -6283,14 +6186,12 @@
 		talloc_destroy(mem_ctx);
 		return -1;
 	};
-
+	
 	/* SamrOpenDomain - we have to open domain policy handle in order to be
 	   able to enumerate accounts*/
-	nt_status = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-					   &connect_hnd,
-					   SA_RIGHT_DOMAIN_ENUM_ACCOUNTS,
-					   queried_dom_sid,
-					   &domain_hnd);
+	nt_status = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &connect_hnd,
+					 SA_RIGHT_DOMAIN_ENUM_ACCOUNTS,
+					 queried_dom_sid, &domain_hnd);									 
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		DEBUG(0, ("Couldn't open domain object. Error was %s\n",
 			nt_errstr(nt_status)));
@@ -6305,14 +6206,11 @@
 	 
 	enum_ctx = 0;	/* reset enumeration context from last enumeration */
 	do {
-
-		nt_status = rpccli_samr_EnumDomainUsers(pipe_hnd, mem_ctx,
-							&domain_hnd,
-							&enum_ctx,
-							ACB_DOMTRUST,
-							&trusts,
-							0xffff,
-							&num_domains);
+			
+		nt_status = rpccli_samr_enum_dom_users(pipe_hnd, mem_ctx, &domain_hnd,
+		                                    &enum_ctx, ACB_DOMTRUST, 0xffff,
+		                                    &trusting_dom_names, &trusting_dom_rids,
+		                                    &num_domains);
 		if (NT_STATUS_IS_ERR(nt_status)) {
 			DEBUG(0, ("Couldn't enumerate accounts. Error was: %s\n",
 				nt_errstr(nt_status)));
@@ -6320,11 +6218,9 @@
 			talloc_destroy(mem_ctx);
 			return -1;
 		};
-
+		
 		for (i = 0; i < num_domains; i++) {
 
-			char *str = CONST_DISCARD(char *, trusts->entries[i].name.string);
-
 			/*
 			 * get each single domain's sid (do we _really_ need this ?):
 			 *  1) connect to domain's pdc
@@ -6332,27 +6228,25 @@
 			 */
 
 			/* get rid of '$' tail */
-			ascii_dom_name_len = strlen(str);
+			ascii_dom_name_len = strlen(trusting_dom_names[i]);
 			if (ascii_dom_name_len && ascii_dom_name_len < FSTRING_LEN)
-				str[ascii_dom_name_len - 1] = '\0';
-
+				trusting_dom_names[i][ascii_dom_name_len - 1] = '\0';
+			
 			/* calculate padding space for d_printf to look nicer */
-			pad_len = col_len - strlen(str);
+			pad_len = col_len - strlen(trusting_dom_names[i]);
 			padding[pad_len] = 0;
 			do padding[--pad_len] = ' '; while (pad_len);
 
 			/* set opt_* variables to remote domain */
-			strupper_m(str);
-			opt_workgroup = talloc_strdup(mem_ctx, str);
+			strupper_m(trusting_dom_names[i]);
+			opt_workgroup = talloc_strdup(mem_ctx, trusting_dom_names[i]);
 			opt_target_workgroup = opt_workgroup;
-
-			d_printf("%s%s", str, padding);
-
+			
+			d_printf("%s%s", trusting_dom_names[i], padding);
+			
 			/* connect to remote domain controller */
-			nt_status = net_make_ipc_connection(
-					NET_FLAGS_PDC | NET_FLAGS_ANONYMOUS,
-					&remote_cli);
-			if (NT_STATUS_IS_OK(nt_status)) {
+			remote_cli = net_make_ipc_connection(NET_FLAGS_PDC | NET_FLAGS_ANONYMOUS);
+			if (remote_cli) {			
 				/* query for domain's sid */
 				if (run_rpc_command(remote_cli, PI_LSARPC, 0, rpc_query_domain_sid, argc, argv))
 					d_fprintf(stderr, "couldn't get domain's sid\n");
@@ -6360,9 +6254,7 @@
 				cli_shutdown(remote_cli);
 			
 			} else {
-				d_fprintf(stderr, "domain controller is not "
-					  "responding: %s\n",
-					  nt_errstr(nt_status));
+				d_fprintf(stderr, "domain controller is not responding\n");
 			};
 		};
 		
@@ -6371,12 +6263,12 @@
 	} while (NT_STATUS_EQUAL(nt_status, STATUS_MORE_ENTRIES));
 
 	/* close opened samr and domain policy handles */
-	nt_status = rpccli_samr_Close(pipe_hnd, mem_ctx, &domain_hnd);
+	nt_status = rpccli_samr_close(pipe_hnd, mem_ctx, &domain_hnd);
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		DEBUG(0, ("Couldn't properly close domain policy handle for domain %s\n", domain_name));
 	};
 	
-	nt_status = rpccli_samr_Close(pipe_hnd, mem_ctx, &connect_hnd);
+	nt_status = rpccli_samr_close(pipe_hnd, mem_ctx, &connect_hnd);
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		DEBUG(0, ("Couldn't properly close samr policy handle for domain %s\n", domain_name));
 	};
@@ -6415,36 +6307,36 @@
 		return -1;
 	}
 
-	return (net_run_function(argc, argv, func, rpc_trustdom_usage));
+	return (net_run_function(argc, argv, func, rpc_user_usage));
 }
 
 /**
  * Check if a server will take rpc commands
  * @param flags	Type of server to connect to (PDC, DMB, localhost)
  *		if the host is not explicitly specified
- * @return  bool (true means rpc supported)
+ * @return  BOOL (true means rpc supported)
  */
-bool net_rpc_check(unsigned flags)
+BOOL net_rpc_check(unsigned flags)
 {
 	struct cli_state *cli;
-	bool ret = False;
-	struct sockaddr_storage server_ss;
+	BOOL ret = False;
+	struct in_addr server_ip;
 	char *server_name = NULL;
 	NTSTATUS status;
 
 	/* flags (i.e. server type) may depend on command */
-	if (!net_find_server(NULL, flags, &server_ss, &server_name))
+	if (!net_find_server(NULL, flags, &server_ip, &server_name))
 		return False;
 
 	if ((cli = cli_initialise()) == NULL) {
 		return False;
 	}
 
-	status = cli_connect(cli, server_name, &server_ss);
+	status = cli_connect(cli, server_name, &server_ip);
 	if (!NT_STATUS_IS_OK(status))
 		goto done;
-	if (!attempt_netbios_session_request(&cli, global_myname(),
-					     server_name, &server_ss))
+	if (!attempt_netbios_session_request(&cli, global_myname(), 
+					     server_name, &server_ip))
 		goto done;
 	if (!cli_negprot(cli))
 		goto done;
@@ -6829,7 +6721,7 @@
 {
 	d_printf("  net rpc info \t\t\tshow basic info about a domain \n");
 	d_printf("  net rpc join \t\t\tto join a domain \n");
-	d_printf("  net rpc oldjoin \t\tto join a domain created in server manager\n");
+	d_printf("  net rpc oldjoin \t\t\tto join a domain created in server manager\n");
 	d_printf("  net rpc testjoin \t\ttests that a join is valid\n");
 	d_printf("  net rpc user \t\t\tto add, delete and list users\n");
 	d_printf("  net rpc password <username> [<password>] -Uadmin_username%%admin_pass\n");
@@ -6840,7 +6732,7 @@
 	d_printf("  net rpc changetrustpw \tto change the trust account password\n");
 	d_printf("  net rpc getsid \t\tfetch the domain sid into the local secrets.tdb\n");
 	d_printf("  net rpc vampire \t\tsyncronise an NT PDC's users and groups into the local passdb\n");
-	d_printf("  net rpc samdump \t\tdisplay an NT PDC's users, groups and other data\n");
+	d_printf("  net rpc samdump \t\tdiplay an NT PDC's users, groups and other data\n");
 	d_printf("  net rpc trustdom \t\tto create trusting domain's account or establish trust\n");
 	d_printf("  net rpc abortshutdown \tto abort the shutdown of a remote server\n");
 	d_printf("  net rpc shutdown \t\tto shutdown a remote server\n");

Modified: branches/samba/upstream/source/utils/net_rpc_audit.c
===================================================================
--- branches/samba/upstream/source/utils/net_rpc_audit.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_rpc_audit.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,21 +1,22 @@
-/*
-   Samba Unix/Linux SMB client library
-   Distributed SMB/CIFS Server Management Utility
-   Copyright (C) 2006,2008 Guenther Deschner
+/* 
+   Samba Unix/Linux SMB client library 
+   Distributed SMB/CIFS Server Management Utility 
+   Copyright (C) 2006 Guenther Deschner
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+ 
 #include "includes.h"
 #include "utils/net.h"
 
@@ -54,27 +55,30 @@
 	pad_len = col_len - strlen(policy);
 	padding[pad_len] = 0;
 	do padding[--pad_len] = ' '; while (pad_len > 0);
-
+			
 	d_printf("\t%s%s%s\n", policy, padding, value);
 }
 
+
 /********************************************************************
 ********************************************************************/
 
 static NTSTATUS rpc_audit_get_internal(const DOM_SID *domain_sid,
-				       const char *domain_name,
+				       const char *domain_name, 
 				       struct cli_state *cli,
 				       struct rpc_pipe_client *pipe_hnd,
-				       TALLOC_CTX *mem_ctx,
+				       TALLOC_CTX *mem_ctx, 
 				       int argc,
 				       const char **argv)
 {
 	POLICY_HND pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	union lsa_PolicyInformation *info = NULL;
+	LSA_INFO_CTR dom; 
 	int i;
-	uint32_t audit_category;
 
+	uint32 info_class = 2;
+	uint32 audit_category;
+
 	if (argc < 1 || argc > 2) {
 		d_printf("insufficient arguments\n");
 		net_help_audit(argc, argv);
@@ -86,7 +90,7 @@
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-	result = rpccli_lsa_open_policy(pipe_hnd, mem_ctx, true,
+	result = rpccli_lsa_open_policy(pipe_hnd, mem_ctx, True, 
 					SEC_RIGHTS_MAXIMUM_ALLOWED,
 					&pol);
 
@@ -94,16 +98,15 @@
 		goto done;
 	}
 
-	result = rpccli_lsa_QueryInfoPolicy(pipe_hnd, mem_ctx,
-					    &pol,
-					    LSA_POLICY_INFO_AUDIT_EVENTS,
-					    &info);
+	result = rpccli_lsa_query_info_policy_new(pipe_hnd, mem_ctx, &pol, 
+						  info_class,
+						  &dom);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
-	for (i=0; i < info->audit_events.count; i++) {
+	for (i=0; i < dom.info.id2.count1; i++) {
 
 		const char *val = NULL, *policy = NULL;
 
@@ -111,15 +114,14 @@
 			continue;
 		}
 
-		val = audit_policy_str(mem_ctx, info->audit_events.settings[i]);
+		val = audit_policy_str(mem_ctx, dom.info.id2.auditsettings[i]);
 		policy = audit_description_str(i);
 		print_auditing_category(policy, val);
 	}
 
  done:
 	if (!NT_STATUS_IS_OK(result)) {
-		d_printf("failed to get auditing policy: %s\n",
-			nt_errstr(result));
+		d_printf("failed to get auditing policy: %s\n", nt_errstr(result));
 	}
 
 	return result;
@@ -129,18 +131,20 @@
 ********************************************************************/
 
 static NTSTATUS rpc_audit_set_internal(const DOM_SID *domain_sid,
-				       const char *domain_name,
+				       const char *domain_name, 
 				       struct cli_state *cli,
 				       struct rpc_pipe_client *pipe_hnd,
-				       TALLOC_CTX *mem_ctx,
+				       TALLOC_CTX *mem_ctx, 
 				       int argc,
 				       const char **argv)
 {
 	POLICY_HND pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	union lsa_PolicyInformation *info = NULL;
-	uint32_t audit_policy, audit_category;
+	LSA_INFO_CTR dom; 
 
+	uint32 info_class = 2;
+	uint32 audit_policy, audit_category;
+
 	if (argc < 2 || argc > 3) {
 		d_printf("insufficient arguments\n");
 		net_help_audit(argc, argv);
@@ -167,7 +171,7 @@
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
-	result = rpccli_lsa_open_policy(pipe_hnd, mem_ctx, true,
+	result = rpccli_lsa_open_policy(pipe_hnd, mem_ctx, True, 
 					SEC_RIGHTS_MAXIMUM_ALLOWED,
 					&pol);
 
@@ -175,32 +179,29 @@
 		goto done;
 	}
 
-	result = rpccli_lsa_QueryInfoPolicy(pipe_hnd, mem_ctx,
-					    &pol,
-					    LSA_POLICY_INFO_AUDIT_EVENTS,
-					    &info);
+	result = rpccli_lsa_query_info_policy_new(pipe_hnd, mem_ctx, &pol, 
+						  info_class,
+						  &dom);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
-	info->audit_events.settings[audit_category] = audit_policy;
+	dom.info.id2.auditsettings[audit_category] = audit_policy;
 
-	result = rpccli_lsa_SetInfoPolicy(pipe_hnd, mem_ctx,
-					  &pol,
-					  LSA_POLICY_INFO_AUDIT_EVENTS,
-					  info);
-
+	result = rpccli_lsa_set_info_policy(pipe_hnd, mem_ctx, &pol, 
+					    info_class,
+					    dom);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
-	result = rpccli_lsa_QueryInfoPolicy(pipe_hnd, mem_ctx,
-					    &pol,
-					    LSA_POLICY_INFO_AUDIT_EVENTS,
-					    &info);
+	result = rpccli_lsa_query_info_policy_new(pipe_hnd, mem_ctx, &pol, 
+						  info_class,
+						  &dom);
+
 	{
-		const char *val = audit_policy_str(mem_ctx, info->audit_events.settings[audit_category]);
+		const char *val = audit_policy_str(mem_ctx, dom.info.id2.auditsettings[audit_category]);
 		const char *policy = audit_description_str(audit_category);
 		print_auditing_category(policy, val);
 	}
@@ -209,24 +210,23 @@
 	if (!NT_STATUS_IS_OK(result)) {
 		d_printf("failed to set audit policy: %s\n", nt_errstr(result));
 	}
-
+ 
 	return result;
 }
 
-/********************************************************************
-********************************************************************/
-
-static NTSTATUS rpc_audit_enable_internal_ext(struct rpc_pipe_client *pipe_hnd,
+static NTSTATUS rpc_audit_enable_internal_ext(struct rpc_pipe_client *pipe_hnd, 
 					      TALLOC_CTX *mem_ctx,
 					      int argc,
 					      const char **argv,
-					      bool enable)
+					      BOOL enable)
 {
 	POLICY_HND pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	union lsa_PolicyInformation *info = NULL;
+	LSA_INFO_CTR dom;
 
-	result = rpccli_lsa_open_policy(pipe_hnd, mem_ctx, true,
+	uint32 info_class = 2;
+
+	result = rpccli_lsa_open_policy(pipe_hnd, mem_ctx, True, 
 					SEC_RIGHTS_MAXIMUM_ALLOWED,
 					&pol);
 
@@ -234,20 +234,19 @@
 		goto done;
 	}
 
-	result = rpccli_lsa_QueryInfoPolicy(pipe_hnd, mem_ctx,
-					    &pol,
-					    LSA_POLICY_INFO_AUDIT_EVENTS,
-					    &info);
+	result = rpccli_lsa_query_info_policy_new(pipe_hnd, mem_ctx, &pol, 
+						  info_class,
+						  &dom);
+
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
-	info->audit_events.auditing_mode = enable;
+	dom.info.id2.auditing_enabled = enable;
 
-	result = rpccli_lsa_SetInfoPolicy(pipe_hnd, mem_ctx,
-					  &pol,
-					  LSA_POLICY_INFO_AUDIT_EVENTS,
-					  info);
+	result = rpccli_lsa_set_info_policy(pipe_hnd, mem_ctx, &pol, 
+					    info_class,
+					    dom);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
@@ -255,60 +254,59 @@
 
  done:
 	if (!NT_STATUS_IS_OK(result)) {
-		d_printf("failed to %s audit policy: %s\n",
-			enable ? "enable":"disable", nt_errstr(result));
+		d_printf("failed to %s audit policy: %s\n", enable ? "enable":"disable", 
+			nt_errstr(result));
 	}
 
 	return result;
 }
-
 /********************************************************************
 ********************************************************************/
 
 static NTSTATUS rpc_audit_disable_internal(const DOM_SID *domain_sid,
-					   const char *domain_name,
+					   const char *domain_name, 
 					   struct cli_state *cli,
 					   struct rpc_pipe_client *pipe_hnd,
-					   TALLOC_CTX *mem_ctx,
+					   TALLOC_CTX *mem_ctx, 
 					   int argc,
 					   const char **argv)
 {
-	return rpc_audit_enable_internal_ext(pipe_hnd, mem_ctx, argc, argv,
-					     false);
+	return rpc_audit_enable_internal_ext(pipe_hnd, mem_ctx, argc, argv, False);
 }
 
 /********************************************************************
 ********************************************************************/
 
 static NTSTATUS rpc_audit_enable_internal(const DOM_SID *domain_sid,
-					  const char *domain_name,
+					  const char *domain_name, 
 					  struct cli_state *cli,
 					  struct rpc_pipe_client *pipe_hnd,
-					  TALLOC_CTX *mem_ctx,
+					  TALLOC_CTX *mem_ctx, 
 					  int argc,
 					  const char **argv)
 {
-	return rpc_audit_enable_internal_ext(pipe_hnd, mem_ctx, argc, argv,
-					     true);
+	return rpc_audit_enable_internal_ext(pipe_hnd, mem_ctx, argc, argv, True);
 }
 
 /********************************************************************
 ********************************************************************/
 
 static NTSTATUS rpc_audit_list_internal(const DOM_SID *domain_sid,
-					const char *domain_name,
+					const char *domain_name, 
 					struct cli_state *cli,
 					struct rpc_pipe_client *pipe_hnd,
-					TALLOC_CTX *mem_ctx,
+					TALLOC_CTX *mem_ctx, 
 					int argc,
 					const char **argv)
 {
 	POLICY_HND pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	union lsa_PolicyInformation *info = NULL;
+	LSA_INFO_CTR dom;
 	int i;
 
-	result = rpccli_lsa_open_policy(pipe_hnd, mem_ctx, true,
+	uint32 info_class = 2;
+
+	result = rpccli_lsa_open_policy(pipe_hnd, mem_ctx, True, 
 					SEC_RIGHTS_MAXIMUM_ALLOWED,
 					&pol);
 
@@ -316,52 +314,53 @@
 		goto done;
 	}
 
-	result = rpccli_lsa_QueryInfoPolicy(pipe_hnd, mem_ctx,
-					    &pol,
-					    LSA_POLICY_INFO_AUDIT_EVENTS,
-					    &info);
+	result = rpccli_lsa_query_info_policy_new(pipe_hnd, mem_ctx, &pol, 
+						  info_class,
+						  &dom);
+
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
 	printf("Auditing:\t\t");
-	switch (info->audit_events.auditing_mode) {
-		case true:
+	switch (dom.info.id2.auditing_enabled) {
+		case True:
 			printf("Enabled");
 			break;
-		case false:
+		case False:
 			printf("Disabled");
 			break;
 		default:
-			printf("unknown (%d)", info->audit_events.auditing_mode);
+			printf("unknown (%d)", dom.info.id2.auditing_enabled);
 			break;
 	}
 	printf("\n");
 
-	printf("Auditing categories:\t%d\n", info->audit_events.count);
+	printf("Auditing categories:\t%d\n", dom.info.id2.count1);
 	printf("Auditing settings:\n");
 
-	for (i=0; i < info->audit_events.count; i++) {
-		const char *val = audit_policy_str(mem_ctx, info->audit_events.settings[i]);
+	for (i=0; i < dom.info.id2.count1; i++) {
+		const char *val = audit_policy_str(mem_ctx, dom.info.id2.auditsettings[i]);
 		const char *policy = audit_description_str(i);
 		print_auditing_category(policy, val);
 	}
 
  done:
 	if (!NT_STATUS_IS_OK(result)) {
-		d_printf("failed to list auditing policies: %s\n",
-			nt_errstr(result));
+		d_printf("failed to list auditing policies: %s\n", nt_errstr(result));
 	}
 
 	return result;
 }
 
+
+
 /********************************************************************
 ********************************************************************/
 
 static int rpc_audit_get(int argc, const char **argv)
 {
-	return run_rpc_command(NULL, PI_LSARPC, 0,
+	return run_rpc_command(NULL, PI_LSARPC, 0, 
 		rpc_audit_get_internal, argc, argv);
 }
 
@@ -370,7 +369,7 @@
 
 static int rpc_audit_set(int argc, const char **argv)
 {
-	return run_rpc_command(NULL, PI_LSARPC, 0,
+	return run_rpc_command(NULL, PI_LSARPC, 0, 
 		rpc_audit_set_internal, argc, argv);
 }
 
@@ -379,7 +378,7 @@
 
 static int rpc_audit_enable(int argc, const char **argv)
 {
-	return run_rpc_command(NULL, PI_LSARPC, 0,
+	return run_rpc_command(NULL, PI_LSARPC, 0, 
 		rpc_audit_enable_internal, argc, argv);
 }
 
@@ -388,7 +387,7 @@
 
 static int rpc_audit_disable(int argc, const char **argv)
 {
-	return run_rpc_command(NULL, PI_LSARPC, 0,
+	return run_rpc_command(NULL, PI_LSARPC, 0, 
 		rpc_audit_disable_internal, argc, argv);
 }
 
@@ -397,14 +396,14 @@
 
 static int rpc_audit_list(int argc, const char **argv)
 {
-	return run_rpc_command(NULL, PI_LSARPC, 0,
+	return run_rpc_command(NULL, PI_LSARPC, 0, 
 		rpc_audit_list_internal, argc, argv);
 }
 
 /********************************************************************
 ********************************************************************/
 
-int net_rpc_audit(int argc, const char **argv)
+int net_rpc_audit(int argc, const char **argv) 
 {
 	struct functable func[] = {
 		{"get", rpc_audit_get},
@@ -414,9 +413,9 @@
 		{"list", rpc_audit_list},
 		{NULL, NULL}
 	};
-
+	
 	if (argc)
 		return net_run_function(argc, argv, func, net_help_audit);
-
+		
 	return net_help_audit(argc, argv);
 }

Modified: branches/samba/upstream/source/utils/net_rpc_join.c
===================================================================
--- branches/samba/upstream/source/utils/net_rpc_join.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_rpc_join.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -3,11 +3,10 @@
    Distributed SMB/CIFS Server Management Utility 
    Copyright (C) 2001 Andrew Bartlett (abartlet at samba.org)
    Copyright (C) Tim Potter     2001
-   Copyright (C) 2008 Guenther Deschner
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
 #include "includes.h"
 #include "utils/net.h"
@@ -41,12 +41,11 @@
  * @return A shell status integer (0 for success)
  *
  **/
-NTSTATUS net_rpc_join_ok(const char *domain, const char *server,
-			 struct sockaddr_storage *pss)
+int net_rpc_join_ok(const char *domain, const char *server, struct in_addr *ip )
 {
+	uint32_t neg_flags = NETLOGON_NEG_AUTH2_ADS_FLAGS;
 	enum security_types sec;
 	unsigned int conn_flags = NET_FLAGS_PDC;
-	uint32_t neg_flags = NETLOGON_NEG_AUTH2_ADS_FLAGS;
 	struct cli_state *cli = NULL;
 	struct rpc_pipe_client *pipe_hnd = NULL;
 	struct rpc_pipe_client *netlogon_pipe = NULL;
@@ -66,9 +65,8 @@
 	}
 
 	/* Connect to remote machine */
-	ntret = net_make_ipc_connection_ex(domain, server, pss, conn_flags, &cli);
-	if (!NT_STATUS_IS_OK(ntret)) {
-		return ntret;
+	if (!(cli = net_make_ipc_connection_ex(domain, server, ip, conn_flags))) {
+		return -1;
 	}
 
 	/* Setup the creds as though we're going to do schannel... */
@@ -80,13 +78,13 @@
         if (!netlogon_pipe) {
 		if (NT_STATUS_EQUAL(ntret, NT_STATUS_INVALID_NETWORK_RESPONSE)) {
 			cli_shutdown(cli);
-			return NT_STATUS_OK;
+			return 0;
 		} else {
 			DEBUG(0,("net_rpc_join_ok: failed to get schannel session "
 					"key from server %s for domain %s. Error was %s\n",
 				cli->desthost, domain, nt_errstr(ntret) ));
 			cli_shutdown(cli);
-			return ntret;
+			return -1;
 		}
 	}
 
@@ -94,7 +92,7 @@
 	if (!lp_client_schannel()) {
 		cli_shutdown(cli);
 		/* We're good... */
-		return ntret;
+		return 0;
 	}
 
 	pipe_hnd = cli_rpc_pipe_open_schannel_with_key(cli, PI_NETLOGON,
@@ -105,14 +103,12 @@
 		DEBUG(0,("net_rpc_join_ok: failed to open schannel session "
 				"on netlogon pipe to server %s for domain %s. Error was %s\n",
 			cli->desthost, domain, nt_errstr(ntret) ));
-		/*
-		 * Note: here, we have:
-		 * (pipe_hnd != NULL) if and only if NT_STATUS_IS_OK(ntret)
-		 */
+		cli_shutdown(cli);
+		return -1;
 	}
 
 	cli_shutdown(cli);
-	return ntret;
+	return 0;
 }
 
 /**
@@ -147,21 +143,21 @@
 
 	char *clear_trust_password = NULL;
 	uchar pwbuf[516];
+	SAM_USERINFO_CTR ctr;
+	SAM_USER_INFO_24 p24;
+	SAM_USER_INFO_16 p16;
 	uchar md4_trust_password[16];
-	union samr_UserInfo set_info;
 
 	/* Misc */
 
 	NTSTATUS result;
 	int retval = 1;
-	const char *domain = NULL;
+	char *domain = NULL;
+	uint32 num_rids, *name_types, *user_rids;
+	uint32 flags = 0x3e8;
 	char *acct_name;
-	struct lsa_String lsa_acct_name;
+	const char *const_acct_name;
 	uint32 acct_flags=0;
-	uint32_t access_granted = 0;
-	union lsa_PolicyInformation *info = NULL;
-	struct samr_Ids user_rids;
-	struct samr_Ids name_types;
 
 	/* check what type of join */
 	if (argc >= 0) {
@@ -186,10 +182,8 @@
 
 	/* Make authenticated connection to remote machine */
 
-	result = net_make_ipc_connection(NET_FLAGS_PDC, &cli);
-	if (!NT_STATUS_IS_OK(result)) {
+	if (!(cli = net_make_ipc_connection(NET_FLAGS_PDC))) 
 		return 1;
-	}
 
 	if (!(mem_ctx = talloc_init("net_rpc_join_newstyle"))) {
 		DEBUG(0, ("Could not initialise talloc context\n"));
@@ -211,16 +205,11 @@
 					  &lsa_pol),
 		      "error opening lsa policy handle");
 
-	CHECK_RPC_ERR(rpccli_lsa_QueryInfoPolicy(pipe_hnd, mem_ctx,
-						 &lsa_pol,
-						 LSA_POLICY_INFO_ACCOUNT_DOMAIN,
-						 &info),
+	CHECK_RPC_ERR(rpccli_lsa_query_info_policy(pipe_hnd, mem_ctx, &lsa_pol,
+						5, &domain, &domain_sid),
 		      "error querying info policy");
 
-	domain = info->account_domain.name.string;
-	domain_sid = info->account_domain.sid;
-
-	rpccli_lsa_Close(pipe_hnd, mem_ctx, &lsa_pol);
+	rpccli_lsa_close(pipe_hnd, mem_ctx, &lsa_pol);
 	cli_rpc_pipe_close(pipe_hnd); /* Done with this pipe */
 
 	/* Bail out if domain didn't get set. */
@@ -237,18 +226,15 @@
 		goto done;
 	}
 
-	CHECK_RPC_ERR(rpccli_samr_Connect2(pipe_hnd, mem_ctx,
-					   pipe_hnd->cli->desthost,
-					   SEC_RIGHTS_MAXIMUM_ALLOWED,
-					   &sam_pol),
+	CHECK_RPC_ERR(rpccli_samr_connect(pipe_hnd, mem_ctx, 
+				       SEC_RIGHTS_MAXIMUM_ALLOWED,
+				       &sam_pol),
 		      "could not connect to SAM database");
 
-
-	CHECK_RPC_ERR(rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-					     &sam_pol,
-					     SEC_RIGHTS_MAXIMUM_ALLOWED,
-					     domain_sid,
-					     &domain_pol),
+	
+	CHECK_RPC_ERR(rpccli_samr_open_domain(pipe_hnd, mem_ctx, &sam_pol,
+					   SEC_RIGHTS_MAXIMUM_ALLOWED,
+					   domain_sid, &domain_pol),
 		      "could not open domain");
 
 	/* Create domain user */
@@ -257,26 +243,18 @@
 		goto done;
 	}
 	strlower_m(acct_name);
+	const_acct_name = acct_name;
 
-	init_lsa_String(&lsa_acct_name, acct_name);
-
-	acct_flags = SEC_GENERIC_READ | SEC_GENERIC_WRITE | SEC_GENERIC_EXECUTE |
-		     SEC_STD_WRITE_DAC | SEC_STD_DELETE |
-		     SAMR_USER_ACCESS_SET_PASSWORD |
-		     SAMR_USER_ACCESS_GET_ATTRIBUTES |
-		     SAMR_USER_ACCESS_SET_ATTRIBUTES;
-
+        acct_flags = SAMR_GENERIC_READ | SAMR_GENERIC_WRITE |
+                SAMR_GENERIC_EXECUTE | SAMR_STANDARD_WRITEDAC |
+                SAMR_STANDARD_DELETE | SAMR_USER_SETPASS | SAMR_USER_GETATTR |
+                SAMR_USER_SETATTR;
 	DEBUG(10, ("Creating account with flags: %d\n",acct_flags));
+	result = rpccli_samr_create_dom_user(pipe_hnd, mem_ctx, &domain_pol,
+					  acct_name, acb_info,
+					  acct_flags, &user_pol, 
+					  &user_rid);
 
-	result = rpccli_samr_CreateUser2(pipe_hnd, mem_ctx,
-					 &domain_pol,
-					 &lsa_acct_name,
-					 acb_info,
-					 acct_flags,
-					 &user_pol,
-					 &access_granted,
-					 &user_rid);
-
 	if (!NT_STATUS_IS_OK(result) && 
 	    !NT_STATUS_EQUAL(result, NT_STATUS_USER_EXISTS)) {
 		d_fprintf(stderr, "Creation of workstation account failed\n");
@@ -294,33 +272,30 @@
 	/* We *must* do this.... don't ask... */
 
 	if (NT_STATUS_IS_OK(result)) {
-		rpccli_samr_Close(pipe_hnd, mem_ctx, &user_pol);
+		rpccli_samr_close(pipe_hnd, mem_ctx, &user_pol);
 	}
 
-	CHECK_RPC_ERR_DEBUG(rpccli_samr_LookupNames(pipe_hnd, mem_ctx,
-						    &domain_pol,
-						    1,
-						    &lsa_acct_name,
-						    &user_rids,
-						    &name_types),
+	CHECK_RPC_ERR_DEBUG(rpccli_samr_lookup_names(pipe_hnd, mem_ctx,
+						  &domain_pol, flags,
+						  1, &const_acct_name, 
+						  &num_rids,
+						  &user_rids, &name_types),
 			    ("error looking up rid for user %s: %s\n",
 			     acct_name, nt_errstr(result)));
 
-	if (name_types.ids[0] != SID_NAME_USER) {
-		DEBUG(0, ("%s is not a user account (type=%d)\n", acct_name, name_types.ids[0]));
+	if (name_types[0] != SID_NAME_USER) {
+		DEBUG(0, ("%s is not a user account (type=%d)\n", acct_name, name_types[0]));
 		goto done;
 	}
 
-	user_rid = user_rids.ids[0];
-
+	user_rid = user_rids[0];
+		
 	/* Open handle on user */
 
 	CHECK_RPC_ERR_DEBUG(
-		rpccli_samr_OpenUser(pipe_hnd, mem_ctx,
-				     &domain_pol,
-				     SEC_RIGHTS_MAXIMUM_ALLOWED,
-				     user_rid,
-				     &user_pol),
+		rpccli_samr_open_user(pipe_hnd, mem_ctx, &domain_pol,
+				   SEC_RIGHTS_MAXIMUM_ALLOWED,
+				   user_rid, &user_pol),
 		("could not re-open existing user %s: %s\n",
 		 acct_name, nt_errstr(result)));
 	
@@ -337,15 +312,16 @@
 
 	/* Set password on machine account */
 
-	init_samr_user_info24(&set_info.info24, pwbuf, 24);
+	ZERO_STRUCT(ctr);
+	ZERO_STRUCT(p24);
 
-	SamOEMhashBlob(set_info.info24.password.data, 516,
-		       &cli->user_session_key);
+	init_sam_user_info24(&p24, (char *)pwbuf,24);
 
-	CHECK_RPC_ERR(rpccli_samr_SetUserInfo2(pipe_hnd, mem_ctx,
-					       &user_pol,
-					       24,
-					       &set_info),
+	ctr.switch_value = 24;
+	ctr.info.id24 = &p24;
+
+	CHECK_RPC_ERR(rpccli_samr_set_userinfo(pipe_hnd, mem_ctx, &user_pol, 24, 
+					    &cli->user_session_key, &ctr),
 		      "error setting trust account password");
 
 	/* Why do we have to try to (re-)set the ACB to be the same as what
@@ -357,17 +333,19 @@
 	   seems to cope with either value so don't bomb out if the set
 	   userinfo2 level 0x10 fails.  -tpot */
 
-	set_info.info16.acct_flags = acb_info;
+	ZERO_STRUCT(ctr);
+	ctr.switch_value = 16;
+	ctr.info.id16 = &p16;
 
+	init_sam_user_info16(&p16, acb_info);
+
 	/* Ignoring the return value is necessary for joining a domain
 	   as a normal user with "Add workstation to domain" privilege. */
 
-	result = rpccli_samr_SetUserInfo(pipe_hnd, mem_ctx,
-					 &user_pol,
-					 16,
-					 &set_info);
+	result = rpccli_samr_set_userinfo2(pipe_hnd, mem_ctx, &user_pol, 16, 
+					&cli->user_session_key, &ctr);
 
-	rpccli_samr_Close(pipe_hnd, mem_ctx, &user_pol);
+	rpccli_samr_close(pipe_hnd, mem_ctx, &user_pol);
 	cli_rpc_pipe_close(pipe_hnd); /* Done with this pipe */
 
 	/* Now check the whole process from top-to-bottom */
@@ -436,7 +414,7 @@
 
 	/* Now store the secret in the secrets database */
 
-	strupper_m(CONST_DISCARD(char *, domain));
+	strupper_m(domain);
 
 	if (!secrets_store_domain_sid(domain, domain_sid)) {
 		DEBUG(0, ("error storing domain sid for %s\n", domain));
@@ -448,9 +426,8 @@
 	}
 
 	/* double-check, connection from scratch */
-	result = net_rpc_join_ok(domain, cli->desthost, &cli->dest_ss);
-	retval = NT_STATUS_IS_OK(result) ? 0 : -1;
-
+	retval = net_rpc_join_ok(domain, cli->desthost, &cli->dest_ip);
+	
 done:
 
 	/* Display success or failure */
@@ -479,13 +456,10 @@
 int net_rpc_testjoin(int argc, const char **argv) 
 {
 	char *domain = smb_xstrdup(opt_target_workgroup);
-	NTSTATUS nt_status;
 
 	/* Display success or failure */
-	nt_status = net_rpc_join_ok(domain, NULL, NULL);
-	if (!NT_STATUS_IS_OK(nt_status)) {
-		fprintf(stderr,"Join to domain '%s' is not valid: %s\n",
-			domain, nt_errstr(nt_status));
+	if (net_rpc_join_ok(domain, NULL, NULL) != 0) {
+		fprintf(stderr,"Join to domain '%s' is not valid\n",domain);
 		free(domain);
 		return -1;
 	}

Modified: branches/samba/upstream/source/utils/net_rpc_printer.c
===================================================================
--- branches/samba/upstream/source/utils/net_rpc_printer.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_rpc_printer.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
 #include "includes.h"
 #include "utils/net.h"
@@ -63,7 +64,7 @@
 	fstring defaultdatatype = "";
 	
 	int length=0;
-	bool valid = True;
+	BOOL valid = True;
 	
 	if (i1 == NULL)
 		return;
@@ -108,7 +109,7 @@
 
 static void display_reg_value(const char *subkey, REGISTRY_VALUE value)
 {
-	char *text;
+	pstring text;
 
 	switch(value.type) {
 	case REG_DWORD:
@@ -117,39 +118,29 @@
 		break;
 
 	case REG_SZ:
-		rpcstr_pull_talloc(talloc_tos(),
-				&text,
-				value.data_p,
-				value.size,
-				STR_TERMINATE);
-		if (!text) {
-			break;
-		}
+		rpcstr_pull(text, value.data_p, sizeof(text), value.size,
+			    STR_TERMINATE);
 		d_printf("\t[%s:%s]: REG_SZ: %s\n", subkey, value.valuename, text);
 		break;
 
-	case REG_BINARY:
+	case REG_BINARY: 
 		d_printf("\t[%s:%s]: REG_BINARY: unknown length value not displayed\n", 
 			 subkey, value.valuename);
 		break;
 
 	case REG_MULTI_SZ: {
-		uint32 i, num_values;
-		char **values;
-
-		if (!W_ERROR_IS_OK(reg_pull_multi_sz(NULL, value.data_p,
-						     value.size, &num_values,
-						     &values))) {
-			d_printf("reg_pull_multi_sz failed\n");
-			break;
+		uint16 *curstr = (uint16 *) value.data_p;
+		uint8 *start = value.data_p;
+		d_printf("\t[%s:%s]: REG_MULTI_SZ:\n", subkey, value.valuename);
+		while ((*curstr != 0) && 
+		       ((uint8 *) curstr < start + value.size)) {
+			rpcstr_pull(text, curstr, sizeof(text), -1, 
+				    STR_TERMINATE);
+			d_printf("%s\n", text);
+			curstr += strlen(text) + 1;
 		}
-
-		for (i=0; i<num_values; i++) {
-			d_printf("%s\n", values[i]);
-		}
-		TALLOC_FREE(values);
-		break;
 	}
+	break;
 
 	default:
 		d_printf("\t%s: unknown type %d\n", value.valuename, value.type);
@@ -178,8 +169,8 @@
 		  struct cli_state *cli_share_src,
 		  struct cli_state *cli_share_dst, 
 		  const char *src_name, const char *dst_name,
-		  bool copy_acls, bool copy_attrs,
-		  bool copy_timestamps, bool is_file)
+		  BOOL copy_acls, BOOL copy_attrs,
+		  BOOL copy_timestamps, BOOL is_file)
 {
 	NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL;
 	int fnum_src = 0;
@@ -330,8 +321,8 @@
 		       struct cli_state *cli_share_src,
 		       struct cli_state *cli_share_dst, 
 		       const char *src_name, const char *dst_name,
-		       bool copy_acls, bool copy_attrs,
-		       bool copy_timestamps, bool is_file)
+		       BOOL copy_acls, BOOL copy_attrs,
+		       BOOL copy_timestamps, BOOL is_file)
 {
 	NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL;
 	int fnum_src = 0;
@@ -339,6 +330,7 @@
 	static int io_bufsize = 64512;
 	int read_size = io_bufsize;
 	char *data = NULL;
+	off_t start = 0;
 	off_t nread = 0;
 
 
@@ -406,14 +398,14 @@
 
 		/* copying file */
 		int n, ret;
-		n = cli_read(cli_share_src, fnum_src, data, nread, 
+		n = cli_read(cli_share_src, fnum_src, data, nread + start, 
 				read_size);
 
 		if (n <= 0)
 			break;
 
 		ret = cli_write(cli_share_dst, fnum_dst, 0, data, 
-			nread, n);
+			nread + start, n);
 
 		if (n != ret) {
 			d_fprintf(stderr, "Error writing file: %s\n", 
@@ -514,17 +506,17 @@
 	const char *p;
 	char *src_name;
 	char *dst_name;
-	char *version;
-	char *filename;
-	char *tok;
+	fstring version;
+	fstring filename;
+	fstring tok;
 
 	/* scroll through the file until we have the part 
 	   beyond archi_table.short_archi */
 	p = file;
-	while (next_token_talloc(mem_ctx, &p, &tok, "\\")) {
+	while (next_token(&p, tok, "\\", sizeof(tok))) {
 		if (strequal(tok, short_archi)) {
-			next_token_talloc(mem_ctx, &p, &version, "\\");
-			next_token_talloc(mem_ctx, &p, &filename, "\\");
+			next_token(&p, version, "\\", sizeof(version));
+			next_token(&p, filename, "\\", sizeof(filename));
 		}
 	}
 
@@ -614,7 +606,7 @@
 {
 	NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL;
 	int length = 0;
-	bool valid = True;
+	BOOL valid = True;
 	
 	fstring name = "";
 	fstring driverpath = "";
@@ -689,7 +681,7 @@
  *
  **/
 
-static bool net_spoolss_enum_printers(struct rpc_pipe_client *pipe_hnd,
+static BOOL net_spoolss_enum_printers(struct rpc_pipe_client *pipe_hnd,
 					TALLOC_CTX *mem_ctx, 
 					char *name,
 					uint32 flags,
@@ -711,7 +703,7 @@
 	return True;
 }
 
-static bool net_spoolss_open_printer_ex(struct rpc_pipe_client *pipe_hnd,
+static BOOL net_spoolss_open_printer_ex(struct rpc_pipe_client *pipe_hnd,
 					TALLOC_CTX *mem_ctx,
 					const char *printername,
 					uint32 access_required, 
@@ -754,7 +746,7 @@
 	return True;
 }
 
-static bool net_spoolss_getprinter(struct rpc_pipe_client *pipe_hnd,
+static BOOL net_spoolss_getprinter(struct rpc_pipe_client *pipe_hnd,
 				TALLOC_CTX *mem_ctx,
 				POLICY_HND *hnd,
 				uint32 level, 
@@ -773,7 +765,7 @@
 	return True;
 }
 
-static bool net_spoolss_setprinter(struct rpc_pipe_client *pipe_hnd,
+static BOOL net_spoolss_setprinter(struct rpc_pipe_client *pipe_hnd,
 				TALLOC_CTX *mem_ctx,
 				POLICY_HND *hnd,
 				uint32 level, 
@@ -793,7 +785,7 @@
 }
 
 
-static bool net_spoolss_setprinterdata(struct rpc_pipe_client *pipe_hnd,
+static BOOL net_spoolss_setprinterdata(struct rpc_pipe_client *pipe_hnd,
 					TALLOC_CTX *mem_ctx,
 					POLICY_HND *hnd,
 					REGISTRY_VALUE *value)
@@ -812,7 +804,7 @@
 }
 
 
-static bool net_spoolss_enumprinterkey(struct rpc_pipe_client *pipe_hnd,
+static BOOL net_spoolss_enumprinterkey(struct rpc_pipe_client *pipe_hnd,
 					TALLOC_CTX *mem_ctx,
 					POLICY_HND *hnd,
 					const char *keyname,
@@ -831,7 +823,7 @@
 	return True;
 }
 
-static bool net_spoolss_enumprinterdataex(struct rpc_pipe_client *pipe_hnd,
+static BOOL net_spoolss_enumprinterdataex(struct rpc_pipe_client *pipe_hnd,
 					TALLOC_CTX *mem_ctx,
 					uint32 offered, 
 					POLICY_HND *hnd,
@@ -852,7 +844,7 @@
 }
 
 
-static bool net_spoolss_setprinterdataex(struct rpc_pipe_client *pipe_hnd,
+static BOOL net_spoolss_setprinterdataex(struct rpc_pipe_client *pipe_hnd,
 					TALLOC_CTX *mem_ctx,
 					POLICY_HND *hnd,
 					char *keyname, 
@@ -872,7 +864,7 @@
 	return True;
 }
 
-static bool net_spoolss_enumforms(struct rpc_pipe_client *pipe_hnd,
+static BOOL net_spoolss_enumforms(struct rpc_pipe_client *pipe_hnd,
 				TALLOC_CTX *mem_ctx,
 				POLICY_HND *hnd,
 				int level,
@@ -893,7 +885,7 @@
 	return True;
 }
 
-static bool net_spoolss_enumprinterdrivers (struct rpc_pipe_client *pipe_hnd,
+static BOOL net_spoolss_enumprinterdrivers (struct rpc_pipe_client *pipe_hnd,
 					TALLOC_CTX *mem_ctx,
 					uint32 level, const char *env,
 					uint32 *num_drivers,
@@ -914,7 +906,7 @@
 	return True;
 }
 
-static bool net_spoolss_getprinterdriver(struct rpc_pipe_client *pipe_hnd,
+static BOOL net_spoolss_getprinterdriver(struct rpc_pipe_client *pipe_hnd,
 			     TALLOC_CTX *mem_ctx, 
 			     POLICY_HND *hnd, uint32 level, 
 			     const char *env, int version, 
@@ -941,7 +933,7 @@
 }
 
 
-static bool net_spoolss_addprinterdriver(struct rpc_pipe_client *pipe_hnd,
+static BOOL net_spoolss_addprinterdriver(struct rpc_pipe_client *pipe_hnd,
 			     TALLOC_CTX *mem_ctx, uint32 level,
 			     PRINTER_DRIVER_CTR *ctr)
 {
@@ -968,7 +960,7 @@
  * for a single printer or for all printers depending on argc/argv 
  **/
 
-static bool get_printer_info(struct rpc_pipe_client *pipe_hnd,
+static BOOL get_printer_info(struct rpc_pipe_client *pipe_hnd,
 			TALLOC_CTX *mem_ctx, 
 			int level,
 			int argc,
@@ -1039,7 +1031,7 @@
 	NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL;
 	uint32 i, num_printers; 
 	uint32 level = 2;
-	char *printername, *sharename;
+	pstring printername, sharename;
 	PRINTER_INFO_CTR ctr;
 
 	printf("listing printers\n");
@@ -1048,22 +1040,15 @@
 		return nt_status;
 
 	for (i = 0; i < num_printers; i++) {
-		/* do some initialization */
-		rpcstr_pull_talloc(mem_ctx,
-				&printername,
-				ctr.printers_2[i].printername.buffer,
-				-1,
-				STR_TERMINATE);
-		rpcstr_pull_talloc(mem_ctx,
-				&sharename,
-				ctr.printers_2[i].sharename.buffer,
-				-1,
-				STR_TERMINATE);
 
-		if (printername && sharename) {
-			d_printf("printer %d: %s, shared as: %s\n",
-				i+1, printername, sharename);
-		}
+		/* do some initialization */
+		rpcstr_pull(printername, ctr.printers_2[i].printername.buffer, 
+			sizeof(printername), -1, STR_TERMINATE);
+		rpcstr_pull(sharename, ctr.printers_2[i].sharename.buffer, 
+			sizeof(sharename), -1, STR_TERMINATE);
+		
+		d_printf("printer %d: %s, shared as: %s\n", 
+			i+1, printername, sharename);
 	}
 
 	return NT_STATUS_OK;
@@ -1161,10 +1146,10 @@
 	NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL;
 	uint32 i, num_printers; 
 	uint32 level = 7;
-	char *printername, *sharename;
+	pstring printername, sharename;
 	PRINTER_INFO_CTR ctr, ctr_pub;
 	POLICY_HND hnd;
-	bool got_hnd = False;
+	BOOL got_hnd = False;
 	WERROR result;
 	const char *action_str;
 
@@ -1172,20 +1157,12 @@
 		return nt_status;
 
 	for (i = 0; i < num_printers; i++) {
+
 		/* do some initialization */
-		rpcstr_pull_talloc(mem_ctx,
-				&printername,
-				ctr.printers_2[i].printername.buffer,
-				-1,
-				STR_TERMINATE);
-		rpcstr_pull_talloc(mem_ctx,
-				&sharename,
-				ctr.printers_2[i].sharename.buffer,
-				-1,
-				STR_TERMINATE);
-		if (!printername || !sharename) {
-			goto done;
-		}
+		rpcstr_pull(printername, ctr.printers_2[i].printername.buffer, 
+			sizeof(printername), -1, STR_TERMINATE);
+		rpcstr_pull(sharename, ctr.printers_2[i].sharename.buffer, 
+			sizeof(sharename), -1, STR_TERMINATE);
 
 		/* open printer handle */
 		if (!net_spoolss_open_printer_ex(pipe_hnd, mem_ctx, sharename,
@@ -1295,33 +1272,25 @@
 	NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL;
 	uint32 i, num_printers; 
 	uint32 level = 7;
-	char *printername, *sharename;
-	char *guid;
+	pstring printername, sharename;
+	pstring guid;
 	PRINTER_INFO_CTR ctr, ctr_pub;
 	POLICY_HND hnd;
-	bool got_hnd = False;
+	BOOL got_hnd = False;
 	int state;
 
 	if (!get_printer_info(pipe_hnd, mem_ctx, 2, argc, argv, &num_printers, &ctr))
 		return nt_status;
 
 	for (i = 0; i < num_printers; i++) {
+
 		ZERO_STRUCT(ctr_pub);
 
 		/* do some initialization */
-		rpcstr_pull_talloc(mem_ctx,
-				&printername,
-				ctr.printers_2[i].printername.buffer,
-				-1,
-				STR_TERMINATE);
-		rpcstr_pull_talloc(mem_ctx,
-				&sharename,
-				ctr.printers_2[i].sharename.buffer,
-				-1,
-				STR_TERMINATE);
-		if (!printername || !sharename) {
-			goto done;
-		}
+		rpcstr_pull(printername, ctr.printers_2[i].printername.buffer, 
+			sizeof(printername), -1, STR_TERMINATE);
+		rpcstr_pull(sharename, ctr.printers_2[i].sharename.buffer, 
+			sizeof(sharename), -1, STR_TERMINATE);
 
 		/* open printer handle */
 		if (!net_spoolss_open_printer_ex(pipe_hnd, mem_ctx, sharename,
@@ -1334,14 +1303,8 @@
 		if (!net_spoolss_getprinter(pipe_hnd, mem_ctx, &hnd, level, &ctr_pub)) 
 			goto done;
 
-		rpcstr_pull_talloc(mem_ctx,
-				&guid,
-				ctr_pub.printers_7->guid.buffer,
-				-1,
-				STR_TERMINATE);
-		if (!guid) {
-			goto done;
-		}
+		rpcstr_pull(guid, ctr_pub.printers_7->guid.buffer, sizeof(guid), -1, STR_TERMINATE);
+
 		state = ctr_pub.printers_7->action;
 		switch (state) {
 			case SPOOL_DS_PUBLISH:
@@ -1402,9 +1365,9 @@
 	uint32 i = 0;
 	uint32 num_printers;
 	uint32 level = 2;
-	char *printername, *sharename;
-	bool got_hnd_src = False;
-	bool got_hnd_dst = False;
+	pstring printername = "", sharename = "";
+	BOOL got_hnd_src = False;
+	BOOL got_hnd_dst = False;
 	struct rpc_pipe_client *pipe_hnd_dst = NULL;
 	POLICY_HND hnd_src, hnd_dst;
 	PRINTER_INFO_CTR ctr_src, ctr_dst, ctr_enum;
@@ -1430,30 +1393,20 @@
 		printf ("no printers found on server.\n");
 		nt_status = NT_STATUS_OK;
 		goto done;
-	}
-
+	} 
+	
 	/* do something for all printers */
 	for (i = 0; i < num_printers; i++) {
-		/* do some initialization */
-		rpcstr_pull_talloc(mem_ctx,
-				&printername,
-				ctr_enum.printers_2[i].printername.buffer,
-				-1,
-				STR_TERMINATE);
-		rpcstr_pull_talloc(mem_ctx,
-				&sharename,
-				ctr_enum.printers_2[i].sharename.buffer,
-				-1,
-				STR_TERMINATE);
-		if (!printername || !sharename) {
-			nt_status = NT_STATUS_UNSUCCESSFUL;
-			goto done;
-		}
 
-		/* we can reset NT_STATUS here because we do not
+		/* do some initialization */
+		rpcstr_pull(printername, ctr_enum.printers_2[i].printername.buffer, 
+			sizeof(printername), -1, STR_TERMINATE);
+		rpcstr_pull(sharename, ctr_enum.printers_2[i].sharename.buffer, 
+			sizeof(sharename), -1, STR_TERMINATE);
+		/* we can reset NT_STATUS here because we do not 
 		   get any real NT_STATUS-codes anymore from now on */
 		nt_status = NT_STATUS_UNSUCCESSFUL;
-
+		
 		d_printf("migrating printer ACLs for:     [%s] / [%s]\n", 
 			printername, sharename);
 
@@ -1560,24 +1513,25 @@
 	uint32 i, f;
 	uint32 num_printers;
 	uint32 level = 1;
-	char *printername, *sharename;
-	bool got_hnd_src = False;
-	bool got_hnd_dst = False;
+	pstring printername = "", sharename = "";
+	BOOL got_hnd_src = False;
+	BOOL got_hnd_dst = False;
 	struct rpc_pipe_client *pipe_hnd_dst = NULL;
 	POLICY_HND hnd_src, hnd_dst;
 	PRINTER_INFO_CTR ctr_enum, ctr_dst;
 	uint32 num_forms;
 	FORM_1 *forms;
 	struct cli_state *cli_dst = NULL;
-
+	
 	ZERO_STRUCT(ctr_enum);
 
 	DEBUG(3,("copying forms\n"));
-
+	
 	/* connect destination PI_SPOOLSS */
 	nt_status = connect_dst_pipe(&cli_dst, &pipe_hnd_dst, PI_SPOOLSS);
 	if (!NT_STATUS_IS_OK(nt_status))
 		return nt_status;
+	
 
 	/* enum src printers */
 	if (!get_printer_info(pipe_hnd, mem_ctx, 2, argc, argv, &num_printers, &ctr_enum)) {
@@ -1589,30 +1543,22 @@
 		printf ("no printers found on server.\n");
 		nt_status = NT_STATUS_OK;
 		goto done;
-	}
+	} 
+	
 
 	/* do something for all printers */
 	for (i = 0; i < num_printers; i++) {
+
 		/* do some initialization */
-		rpcstr_pull_talloc(mem_ctx,
-				&printername,
-				ctr_enum.printers_2[i].printername.buffer,
-				-1,
-				STR_TERMINATE);
-		rpcstr_pull_talloc(mem_ctx,
-				&sharename,
-				ctr_enum.printers_2[i].sharename.buffer,
-				-1,
-				STR_TERMINATE);
-		if (!printername || !sharename) {
-			nt_status = NT_STATUS_UNSUCCESSFUL;
-			goto done;
-		}
-		/* we can reset NT_STATUS here because we do not
+		rpcstr_pull(printername, ctr_enum.printers_2[i].printername.buffer, 
+			sizeof(printername), -1, STR_TERMINATE);
+		rpcstr_pull(sharename, ctr_enum.printers_2[i].sharename.buffer, 
+			sizeof(sharename), -1, STR_TERMINATE);
+		/* we can reset NT_STATUS here because we do not 
 		   get any real NT_STATUS-codes anymore from now on */
 		nt_status = NT_STATUS_UNSUCCESSFUL;
-
-		d_printf("migrating printer forms for:    [%s] / [%s]\n",
+		
+		d_printf("migrating printer forms for:    [%s] / [%s]\n", 
 			printername, sharename);
 
 
@@ -1741,12 +1687,12 @@
 	NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL;
 	uint32 i, p;
 	uint32 num_printers;
-	uint32 level = 3;
-	char *printername, *sharename;
-	bool got_hnd_src = False;
-	bool got_hnd_dst = False;
-	bool got_src_driver_share = False;
-	bool got_dst_driver_share = False;
+	uint32 level = 3; 
+	pstring printername = "", sharename = "";
+	BOOL got_hnd_src = False;
+	BOOL got_hnd_dst = False;
+	BOOL got_src_driver_share = False;
+	BOOL got_dst_driver_share = False;
 	struct rpc_pipe_client *pipe_hnd_dst = NULL;
 	POLICY_HND hnd_src, hnd_dst;
 	PRINTER_DRIVER_CTR drv_ctr_src, drv_ctr_dst;
@@ -1755,31 +1701,33 @@
 	struct cli_state *cli_share_src = NULL;
 	struct cli_state *cli_share_dst = NULL;
 	fstring drivername = "";
-
+	
 	ZERO_STRUCT(drv_ctr_src);
 	ZERO_STRUCT(drv_ctr_dst);
 	ZERO_STRUCT(info_ctr_enum);
 	ZERO_STRUCT(info_ctr_dst);
 
+
 	DEBUG(3,("copying printer-drivers\n"));
 
 	nt_status = connect_dst_pipe(&cli_dst, &pipe_hnd_dst, PI_SPOOLSS);
 	if (!NT_STATUS_IS_OK(nt_status))
 		return nt_status;
+	
 
 	/* open print$-share on the src server */
-	nt_status = connect_to_service(&cli_share_src, &cli->dest_ss,
+	nt_status = connect_to_service(&cli_share_src, &cli->dest_ip, 
 			cli->desthost, "print$", "A:");
-	if (!NT_STATUS_IS_OK(nt_status))
+	if (!NT_STATUS_IS_OK(nt_status)) 
 		goto done;
 
 	got_src_driver_share = True;
 
 
 	/* open print$-share on the dst server */
-	nt_status = connect_to_service(&cli_share_dst, &cli_dst->dest_ss,
+	nt_status = connect_to_service(&cli_share_dst, &cli_dst->dest_ip, 
 			cli_dst->desthost, "print$", "A:");
-	if (!NT_STATUS_IS_OK(nt_status))
+	if (!NT_STATUS_IS_OK(nt_status)) 
 		return nt_status;
 
 	got_dst_driver_share = True;
@@ -1795,27 +1743,17 @@
 		printf ("no printers found on server.\n");
 		nt_status = NT_STATUS_OK;
 		goto done;
-	}
+	} 
+	
 
-
 	/* do something for all printers */
 	for (p = 0; p < num_printers; p++) {
-		/* do some initialization */
-		rpcstr_pull_talloc(mem_ctx,
-				&printername,
-				info_ctr_enum.printers_2[p].printername.buffer,
-				-1,
-				STR_TERMINATE);
-		rpcstr_pull_talloc(mem_ctx,
-				&sharename,
-				info_ctr_enum.printers_2[p].sharename.buffer,
-				-1,
-				STR_TERMINATE);
-		if (!printername || !sharename) {
-			nt_status = NT_STATUS_UNSUCCESSFUL;
-			goto done;
-		}
 
+		/* do some initialization */
+		rpcstr_pull(printername, info_ctr_enum.printers_2[p].printername.buffer, 
+			sizeof(printername), -1, STR_TERMINATE);
+		rpcstr_pull(sharename, info_ctr_enum.printers_2[p].sharename.buffer, 
+			sizeof(sharename), -1, STR_TERMINATE);
 		/* we can reset NT_STATUS here because we do not 
 		   get any real NT_STATUS-codes anymore from now on */
 		nt_status = NT_STATUS_UNSUCCESSFUL;
@@ -1827,7 +1765,7 @@
 		if (!net_spoolss_open_printer_ex(pipe_hnd_dst, mem_ctx, sharename,
 			PRINTER_ALL_ACCESS, cli->user_name, &hnd_dst)) 
 			goto done;
-
+			
 		got_hnd_dst = True;
 
 		/* check for existing dst printer */
@@ -1972,9 +1910,9 @@
 	PRINTER_INFO_CTR ctr_src, ctr_dst, ctr_enum;
 	struct cli_state *cli_dst = NULL;
 	POLICY_HND hnd_dst, hnd_src;
-	char *printername, *sharename;
-	bool got_hnd_src = False;
-	bool got_hnd_dst = False;
+	pstring printername, sharename;
+	BOOL got_hnd_src = False;
+	BOOL got_hnd_dst = False;
 	struct rpc_pipe_client *pipe_hnd_dst = NULL;
 
 	DEBUG(3,("copying printers\n"));
@@ -1994,29 +1932,21 @@
 		printf ("no printers found on server.\n");
 		nt_status = NT_STATUS_OK;
 		goto done;
-	}
+	} 
+	
 
 	/* do something for all printers */
 	for (i = 0; i < num_printers; i++) {
+
 		/* do some initialization */
-		rpcstr_pull_talloc(mem_ctx,
-				&printername,
-				ctr_enum.printers_2[i].printername.buffer,
-				-1,
-				STR_TERMINATE);
-		rpcstr_pull_talloc(mem_ctx,
-				&sharename,
-				ctr_enum.printers_2[i].sharename.buffer,
-				-1,
-				STR_TERMINATE);
-		if (!printername || !sharename) {
-			nt_status = NT_STATUS_UNSUCCESSFUL;
-			goto done;
-		}
-		/* we can reset NT_STATUS here because we do not
+		rpcstr_pull(printername, ctr_enum.printers_2[i].printername.buffer, 
+			sizeof(printername), -1, STR_TERMINATE);
+		rpcstr_pull(sharename, ctr_enum.printers_2[i].sharename.buffer, 
+			sizeof(sharename), -1, STR_TERMINATE);
+		/* we can reset NT_STATUS here because we do not 
 		   get any real NT_STATUS-codes anymore from now on */
 		nt_status = NT_STATUS_UNSUCCESSFUL;
-
+		
 		d_printf("migrating printer queue for:    [%s] / [%s]\n", 
 			printername, sharename);
 
@@ -2130,16 +2060,16 @@
 	uint32 i = 0, p = 0, j = 0;
 	uint32 num_printers, val_needed, data_needed;
 	uint32 level = 2;
-	char *printername, *sharename;
-	bool got_hnd_src = False;
-	bool got_hnd_dst = False;
+	pstring printername = "", sharename = "";
+	BOOL got_hnd_src = False;
+	BOOL got_hnd_dst = False;
 	struct rpc_pipe_client *pipe_hnd_dst = NULL;
 	POLICY_HND hnd_src, hnd_dst;
 	PRINTER_INFO_CTR ctr_enum, ctr_dst, ctr_dst_publish;
 	REGVAL_CTR *reg_ctr;
 	struct cli_state *cli_dst = NULL;
 	char *devicename = NULL, *unc_name = NULL, *url = NULL;
-	const char *longname;
+	fstring longname;
 
 	uint16 *keylist = NULL, *curkey;
 
@@ -2152,6 +2082,7 @@
 	if (!NT_STATUS_IS_OK(nt_status))
 		return nt_status;
 
+
 	/* enum src printers */
 	if (!get_printer_info(pipe_hnd, mem_ctx, level, argc, argv, &num_printers, &ctr_enum)) {
 		nt_status = NT_STATUS_UNSUCCESSFUL;
@@ -2162,37 +2093,25 @@
 		printf ("no printers found on server.\n");
 		nt_status = NT_STATUS_OK;
 		goto done;
-	}
+	} 
+	
 
-
 	/* needed for dns-strings in regkeys */
-	longname = get_mydnsfullname();
-	if (!longname) {
-		nt_status = NT_STATUS_UNSUCCESSFUL;
-		goto done;
-	}
-
+	get_mydnsfullname(longname);
+	
 	/* do something for all printers */
 	for (i = 0; i < num_printers; i++) {
+
 		/* do some initialization */
-		rpcstr_pull_talloc(mem_ctx,
-				&printername,
-				ctr_enum.printers_2[i].printername.buffer,
-				-1,
-				STR_TERMINATE);
-		rpcstr_pull_talloc(mem_ctx,
-				&sharename,
-				ctr_enum.printers_2[i].sharename.buffer,
-				-1,
-				STR_TERMINATE);
-		if (!printername || !sharename) {
-			nt_status = NT_STATUS_UNSUCCESSFUL;
-			goto done;
-		}
+		rpcstr_pull(printername, ctr_enum.printers_2[i].printername.buffer, 
+			sizeof(printername), -1, STR_TERMINATE);
+		rpcstr_pull(sharename, ctr_enum.printers_2[i].sharename.buffer, 
+			sizeof(sharename), -1, STR_TERMINATE);
+		
 		/* we can reset NT_STATUS here because we do not 
 		   get any real NT_STATUS-codes anymore from now on */
 		nt_status = NT_STATUS_UNSUCCESSFUL;
-
+		
 		d_printf("migrating printer settings for: [%s] / [%s]\n", 
 			printername, sharename);
 
@@ -2247,7 +2166,7 @@
 		if (ctr_enum.printers_2[i].devmode != NULL) {
 
 			/* copy devmode (info level 2) */
-			ctr_dst.printers_2->devmode = (DEVICEMODE *)
+			ctr_dst.printers_2->devmode =
 				TALLOC_MEMDUP(mem_ctx,
 					      ctr_enum.printers_2[i].devmode,
 					      sizeof(DEVICEMODE));
@@ -2333,16 +2252,10 @@
 
 		curkey = keylist;
 		while (*curkey != 0) {
-			char *subkey;
-			rpcstr_pull_talloc(mem_ctx,
-					&subkey,
-					curkey,
-					-1,
-					STR_TERMINATE);
-			if (!subkey) {
-				return NT_STATUS_NO_MEMORY;
-			}
 
+			pstring subkey;
+			rpcstr_pull(subkey, curkey, sizeof(subkey), -1, STR_TERMINATE);
+
 			curkey += strlen(subkey) + 1;
 
 			if ( !(reg_ctr = TALLOC_ZERO_P( mem_ctx, REGVAL_CTR )) )
@@ -2415,7 +2328,7 @@
 					value.type = REG_SZ;
 					value.size = data.uni_str_len * 2;
 					if (value.size) {
-						value.data_p = (uint8 *)TALLOC_MEMDUP(mem_ctx, data.buffer, value.size);
+						value.data_p = TALLOC_MEMDUP(mem_ctx, data.buffer, value.size);
 					} else {
 						value.data_p = NULL;
 					}

Modified: branches/samba/upstream/source/utils/net_rpc_registry.c
===================================================================
--- branches/samba/upstream/source/utils/net_rpc_registry.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_rpc_registry.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,12 +1,11 @@
 /* 
    Samba Unix/Linux SMB client library 
    Distributed SMB/CIFS Server Management Utility 
+   Copyright (C) Gerald (Jerry) Carter          2005
 
-   Copyright (C) Gerald (Jerry) Carter          2005-2006
-
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,695 +14,73 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
 #include "includes.h"
 #include "utils/net.h"
-#include "utils/net_registry_util.h"
 #include "regfio.h"
 #include "reg_objects.h"
 
-static bool reg_hive_key(TALLOC_CTX *ctx, const char *fullname,
-			 uint32 *reg_type, const char **key_name)
-{
-	WERROR werr;
-	char *hivename = NULL;
-	char *tmp_keyname = NULL;
-	bool ret = false;
-	TALLOC_CTX *tmp_ctx = talloc_stackframe();
+/********************************************************************
+********************************************************************/
 
-	werr = split_hive_key(tmp_ctx, fullname, &hivename, &tmp_keyname);
-	if (!W_ERROR_IS_OK(werr)) {
-		goto done;
-	}
-
-	*key_name = talloc_strdup(ctx, tmp_keyname);
-	if (*key_name == NULL) {
-		goto done;
-	}
-
-	if (strequal(hivename, "HKLM") ||
-	    strequal(hivename, "HKEY_LOCAL_MACHINE"))
-	{
-		(*reg_type) = HKEY_LOCAL_MACHINE;
-	} else if (strequal(hivename, "HKCR") ||
-		   strequal(hivename, "HKEY_CLASSES_ROOT")) 
-	{
-		(*reg_type) = HKEY_CLASSES_ROOT;
-	} else if (strequal(hivename, "HKU") ||
-		   strequal(hivename, "HKEY_USERS"))
-	{
-		(*reg_type) = HKEY_USERS;
-	} else if (strequal(hivename, "HKCU") ||
-		   strequal(hivename, "HKEY_CURRENT_USER"))
-	{
-		(*reg_type) = HKEY_CURRENT_USER;
-	} else if (strequal(hivename, "HKPD") ||
-		   strequal(hivename, "HKEY_PERFORMANCE_DATA"))
-	{
-		(*reg_type) = HKEY_PERFORMANCE_DATA;
-	} else {
-		DEBUG(10,("reg_hive_key: unrecognised hive key %s\n",
-			  fullname));
-		goto done;
-	}
-
-	ret = true;
-
-done:
-	TALLOC_FREE(tmp_ctx);
-	return ret;
-}
-
-static NTSTATUS registry_openkey(TALLOC_CTX *mem_ctx,
-				 struct rpc_pipe_client *pipe_hnd,
-				 const char *name, uint32 access_mask,
-				 struct policy_handle *hive_hnd,
-				 struct policy_handle *key_hnd)
+char* dump_regval_type( uint32 type )
 {
-	uint32 hive;
-	NTSTATUS status;
-	struct winreg_String key;
-
-	ZERO_STRUCT(key);
-
-	if (!reg_hive_key(mem_ctx, name, &hive, &key.name)) {
-		return NT_STATUS_INVALID_PARAMETER;
+	static fstring string;
+	
+	switch (type) {
+	case REG_SZ:
+		fstrcpy( string, "REG_SZ" );
+		break;
+	case REG_MULTI_SZ:
+		fstrcpy( string, "REG_MULTI_SZ" );
+		break;
+	case REG_EXPAND_SZ:
+		fstrcpy( string, "REG_EXPAND_SZ" );
+		break;
+	case REG_DWORD:
+		fstrcpy( string, "REG_DWORD" );
+		break;
+	case REG_BINARY:
+		fstrcpy( string, "REG_BINARY" );
+		break;
+	default:
+		fstr_sprintf( string, "UNKNOWN [%d]", type );
 	}
-
-	status = rpccli_winreg_Connect(pipe_hnd, mem_ctx, hive, access_mask,
-				       hive_hnd);
-	if (!(NT_STATUS_IS_OK(status))) {
-		return status;
-	}
-
-	status = rpccli_winreg_OpenKey(pipe_hnd, mem_ctx, hive_hnd, key, 0,
-				       access_mask, key_hnd, NULL);
-	if (!(NT_STATUS_IS_OK(status))) {
-		rpccli_winreg_CloseKey(pipe_hnd, mem_ctx, hive_hnd, NULL);
-		return status;
-	}
-
-	return NT_STATUS_OK;
+	
+	return string;
 }
+/********************************************************************
+********************************************************************/
 
-static NTSTATUS registry_enumkeys(TALLOC_CTX *ctx,
-				  struct rpc_pipe_client *pipe_hnd,
-				  struct policy_handle *key_hnd,
-				  uint32 *pnum_keys, char ***pnames,
-				  char ***pclasses, NTTIME ***pmodtimes)
+void dump_regval_buffer( uint32 type, REGVAL_BUFFER *buffer )
 {
-	TALLOC_CTX *mem_ctx;
-	NTSTATUS status;
-	uint32 num_subkeys, max_subkeylen, max_classlen;
-	uint32 num_values, max_valnamelen, max_valbufsize;
-	uint32 i;
-	NTTIME last_changed_time;
-	uint32 secdescsize;
-	struct winreg_String classname;
-	char **names, **classes;
-	NTTIME **modtimes;
-
-	if (!(mem_ctx = talloc_new(ctx))) {
-		return NT_STATUS_NO_MEMORY;
+	pstring string;
+	uint32 value;
+	
+	switch (type) {
+	case REG_SZ:
+		rpcstr_pull( string, buffer->buffer, sizeof(string), -1, STR_TERMINATE );
+		d_printf("%s\n", string);
+		break;
+	case REG_MULTI_SZ:
+		d_printf("\n");
+		break;
+	case REG_DWORD:
+		value = IVAL( buffer->buffer, 0 );
+		d_printf( "0x%x\n", value );
+		break;
+	case REG_BINARY:
+		d_printf("\n");
+		break;
+	
+	
+	default:
+		d_printf( "\tUnknown type [%d]\n", type );
 	}
-
-	ZERO_STRUCT(classname);
-	status = rpccli_winreg_QueryInfoKey(
-		pipe_hnd, mem_ctx, key_hnd, &classname, &num_subkeys,
-		&max_subkeylen, &max_classlen, &num_values, &max_valnamelen,
-		&max_valbufsize, &secdescsize, &last_changed_time, NULL );
-
-	if (!NT_STATUS_IS_OK(status)) {
-		goto error;
-	}
-
-	if (num_subkeys == 0) {
-		*pnum_keys = 0;
-		TALLOC_FREE(mem_ctx);
-		return NT_STATUS_OK;
-	}
-
-	if ((!(names = TALLOC_ZERO_ARRAY(mem_ctx, char *, num_subkeys))) ||
-	    (!(classes = TALLOC_ZERO_ARRAY(mem_ctx, char *, num_subkeys))) ||
-	    (!(modtimes = TALLOC_ZERO_ARRAY(mem_ctx, NTTIME *,
-					    num_subkeys)))) {
-		status = NT_STATUS_NO_MEMORY;
-		goto error;
-	}
-
-	for (i=0; i<num_subkeys; i++) {
-		char c, n;
-		struct winreg_StringBuf class_buf;
-		struct winreg_StringBuf name_buf;
-		NTTIME modtime;
-		WERROR werr;
-
-		c = '\0';
-		class_buf.name = &c;
-		class_buf.size = max_classlen+2;
-
-		n = '\0';
-		name_buf.name = &n;
-		name_buf.size = max_subkeylen+2;
-
-		ZERO_STRUCT(modtime);
-
-		status = rpccli_winreg_EnumKey(pipe_hnd, mem_ctx, key_hnd,
-					       i, &name_buf, &class_buf,
-					       &modtime, &werr);
-		
-		if (W_ERROR_EQUAL(werr,
-				  WERR_NO_MORE_ITEMS) ) {
-			status = NT_STATUS_OK;
-			break;
-		}
-		if (!NT_STATUS_IS_OK(status)) {
-			goto error;
-		}
-
-		classes[i] = NULL;
-
-		if (class_buf.name &&
-		    (!(classes[i] = talloc_strdup(classes, class_buf.name)))) {
-			status = NT_STATUS_NO_MEMORY;
-			goto error;
-		}
-
-		if (!(names[i] = talloc_strdup(names, name_buf.name))) {
-			status = NT_STATUS_NO_MEMORY;
-			goto error;
-		}
-
-		if ((!(modtimes[i] = (NTTIME *)talloc_memdup(
-			       modtimes, &modtime, sizeof(modtime))))) {
-			status = NT_STATUS_NO_MEMORY;
-			goto error;
-		}
-	}
-
-	*pnum_keys = num_subkeys;
-
-	if (pnames) {
-		*pnames = talloc_move(ctx, &names);
-	}
-	if (pclasses) {
-		*pclasses = talloc_move(ctx, &classes);
-	}
-	if (pmodtimes) {
-		*pmodtimes = talloc_move(ctx, &modtimes);
-	}
-
-	status = NT_STATUS_OK;
-
- error:
-	TALLOC_FREE(mem_ctx);
-	return status;
 }
 
-static NTSTATUS registry_enumvalues(TALLOC_CTX *ctx,
-				    struct rpc_pipe_client *pipe_hnd,
-				    struct policy_handle *key_hnd,
-				    uint32 *pnum_values, char ***pvalnames,
-				    struct registry_value ***pvalues)
-{
-	TALLOC_CTX *mem_ctx;
-	NTSTATUS status;
-	uint32 num_subkeys, max_subkeylen, max_classlen;
-	uint32 num_values, max_valnamelen, max_valbufsize;
-	uint32 i;
-	NTTIME last_changed_time;
-	uint32 secdescsize;
-	struct winreg_String classname;
-	struct registry_value **values;
-	char **names;
-
-	if (!(mem_ctx = talloc_new(ctx))) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	ZERO_STRUCT(classname);
-	status = rpccli_winreg_QueryInfoKey(
-		pipe_hnd, mem_ctx, key_hnd, &classname, &num_subkeys,
-		&max_subkeylen, &max_classlen, &num_values, &max_valnamelen,
-		&max_valbufsize, &secdescsize, &last_changed_time, NULL );
-
-	if (!NT_STATUS_IS_OK(status)) {
-		goto error;
-	}
-
-	if (num_values == 0) {
-		*pnum_values = 0;
-		TALLOC_FREE(mem_ctx);
-		return NT_STATUS_OK;
-	}
-
-	if ((!(names = TALLOC_ARRAY(mem_ctx, char *, num_values))) ||
-	    (!(values = TALLOC_ARRAY(mem_ctx, struct registry_value *,
-				     num_values)))) {
-		status = NT_STATUS_NO_MEMORY;
-		goto error;
-	}
-
-	for (i=0; i<num_values; i++) {
-		enum winreg_Type type = REG_NONE;
-		uint8 *data = NULL;
-		uint32 data_size;
-		uint32 value_length;
-
-		char n;
-		struct winreg_ValNameBuf name_buf;
-		WERROR err;
-
-		n = '\0';
-		name_buf.name = &n;
-		name_buf.size = max_valnamelen + 2;
-
-		data_size = max_valbufsize;
-		data = (uint8 *)TALLOC(mem_ctx, data_size);
-		value_length = 0;
-
-		status = rpccli_winreg_EnumValue(pipe_hnd, mem_ctx, key_hnd,
-						 i, &name_buf, &type,
-						 data, &data_size,
-						 &value_length, &err);
-
-		if ( W_ERROR_EQUAL(err,
-				   WERR_NO_MORE_ITEMS) ) {
-			status = NT_STATUS_OK;
-			break;
-		}
-
-		if (!(NT_STATUS_IS_OK(status))) {
-			goto error;
-		}
-
-		if (name_buf.name == NULL) {
-			status = NT_STATUS_INVALID_PARAMETER;
-			goto error;
-		}
-
-		if (!(names[i] = talloc_strdup(names, name_buf.name))) {
-			status = NT_STATUS_NO_MEMORY;
-			goto error;
-		}
-
-		err = registry_pull_value(values, &values[i], type, data,
-					  data_size, value_length);
-		if (!W_ERROR_IS_OK(err)) {
-			status = werror_to_ntstatus(err);
-			goto error;
-		}
-	}
-
-	*pnum_values = num_values;
-
-	if (pvalnames) {
-		*pvalnames = talloc_move(ctx, &names);
-	}
-	if (pvalues) {
-		*pvalues = talloc_move(ctx, &values);
-	}
-
-	status = NT_STATUS_OK;
-
- error:
-	TALLOC_FREE(mem_ctx);
-	return status;
-}
-
-static NTSTATUS registry_getsd(TALLOC_CTX *mem_ctx,
-			       struct rpc_pipe_client *pipe_hnd,
-			       struct policy_handle *key_hnd,
-			       uint32_t sec_info,
-			       struct KeySecurityData *sd)
-{
-	return rpccli_winreg_GetKeySecurity(pipe_hnd, mem_ctx, key_hnd,
-					    sec_info, sd, NULL);
-}
-
-
-static NTSTATUS registry_setvalue(TALLOC_CTX *mem_ctx,
-				  struct rpc_pipe_client *pipe_hnd,
-				  struct policy_handle *key_hnd,
-				  const char *name,
-				  const struct registry_value *value)
-{
-	struct winreg_String name_string;
-	DATA_BLOB blob;
-	NTSTATUS result;
-	WERROR err;
-
-	err = registry_push_value(mem_ctx, value, &blob);
-	if (!W_ERROR_IS_OK(err)) {
-		return werror_to_ntstatus(err);
-	}
-
-	ZERO_STRUCT(name_string);
-
-	name_string.name = name;
-	result = rpccli_winreg_SetValue(pipe_hnd, blob.data, key_hnd,
-					name_string, value->type,
-					blob.data, blob.length, NULL);
-	TALLOC_FREE(blob.data);
-	return result;
-}
-
-static NTSTATUS rpc_registry_setvalue_internal(const DOM_SID *domain_sid,
-					       const char *domain_name, 
-					       struct cli_state *cli,
-					       struct rpc_pipe_client *pipe_hnd,
-					       TALLOC_CTX *mem_ctx, 
-					       int argc,
-					       const char **argv )
-{
-	struct policy_handle hive_hnd, key_hnd;
-	NTSTATUS status;
-	struct registry_value value;
-
-	status = registry_openkey(mem_ctx, pipe_hnd, argv[0], 
-				  SEC_RIGHTS_MAXIMUM_ALLOWED,
-				  &hive_hnd, &key_hnd);
-	if (!NT_STATUS_IS_OK(status)) {
-		d_fprintf(stderr, "registry_openkey failed: %s\n",
-			  nt_errstr(status));
-		return status;
-	}
-
-	if (!strequal(argv[2], "multi_sz") && (argc != 4)) {
-		d_fprintf(stderr, "Too many args for type %s\n", argv[2]);
-		return NT_STATUS_NOT_IMPLEMENTED;
-	}
-
-	if (strequal(argv[2], "dword")) {
-		value.type = REG_DWORD;
-		value.v.dword = strtoul(argv[3], NULL, 10);
-	}
-	else if (strequal(argv[2], "sz")) {
-		value.type = REG_SZ;
-		value.v.sz.len = strlen(argv[3])+1;
-		value.v.sz.str = CONST_DISCARD(char *, argv[3]);
-	}
-	else {
-		d_fprintf(stderr, "type \"%s\" not implemented\n", argv[2]);
-		status = NT_STATUS_NOT_IMPLEMENTED;
-		goto error;
-	}
-
-	status = registry_setvalue(mem_ctx, pipe_hnd, &key_hnd,
-				   argv[1], &value);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		d_fprintf(stderr, "registry_setvalue failed: %s\n",
-			  nt_errstr(status));
-	}
-
- error:
-	rpccli_winreg_CloseKey(pipe_hnd, mem_ctx, &key_hnd, NULL);
-	rpccli_winreg_CloseKey(pipe_hnd, mem_ctx, &hive_hnd, NULL);
-
-	return NT_STATUS_OK;
-}
-
-static int rpc_registry_setvalue( int argc, const char **argv )
-{
-	if (argc < 4) {
-		d_fprintf(stderr, "usage: net rpc registry setvalue <key> "
-			  "<valuename> <type> [<val>]+\n");
-		return -1;
-	}
-
-	return run_rpc_command( NULL, PI_WINREG, 0, 
-		rpc_registry_setvalue_internal, argc, argv );
-}
-
-static NTSTATUS rpc_registry_deletevalue_internal(const DOM_SID *domain_sid,
-						  const char *domain_name, 
-						  struct cli_state *cli,
-						  struct rpc_pipe_client *pipe_hnd,
-						  TALLOC_CTX *mem_ctx, 
-						  int argc,
-						  const char **argv )
-{
-	struct policy_handle hive_hnd, key_hnd;
-	NTSTATUS status;
-	struct winreg_String valuename;
-
-	ZERO_STRUCT(valuename);
-
-	status = registry_openkey(mem_ctx, pipe_hnd, argv[0],
-				  SEC_RIGHTS_MAXIMUM_ALLOWED,
-				  &hive_hnd, &key_hnd);
-	if (!NT_STATUS_IS_OK(status)) {
-		d_fprintf(stderr, "registry_openkey failed: %s\n",
-			  nt_errstr(status));
-		return status;
-	}
-
-	valuename.name = argv[1];
-
-	status = rpccli_winreg_DeleteValue(pipe_hnd, mem_ctx, &key_hnd,
-					   valuename, NULL);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		d_fprintf(stderr, "registry_deletevalue failed: %s\n",
-			  nt_errstr(status));
-	}
-
-	rpccli_winreg_CloseKey(pipe_hnd, mem_ctx, &key_hnd, NULL);
-	rpccli_winreg_CloseKey(pipe_hnd, mem_ctx, &hive_hnd, NULL);
-
-	return status;
-}
-
-static int rpc_registry_deletevalue( int argc, const char **argv )
-{
-	if (argc != 2) {
-		d_fprintf(stderr, "usage: net rpc registry deletevalue <key> "
-			  "<valuename>\n");
-		return -1;
-	}
-
-	return run_rpc_command( NULL, PI_WINREG, 0, 
-		rpc_registry_deletevalue_internal, argc, argv );
-}
-
-static NTSTATUS rpc_registry_getvalue_internal(const DOM_SID *domain_sid,
-					       const char *domain_name,
-					       struct cli_state *cli,
-					       struct rpc_pipe_client *pipe_hnd,
-					       TALLOC_CTX *mem_ctx,
-					       int argc,
-					       const char **argv)
-{
-	struct policy_handle hive_hnd, key_hnd;
-	NTSTATUS status;
-	WERROR werr;
-	struct winreg_String valuename;
-	struct registry_value *value = NULL;
-	enum winreg_Type type = REG_NONE;
-	uint8_t *data = NULL;
-	uint32_t data_size = 0;
-	uint32_t value_length = 0;
-	TALLOC_CTX *tmp_ctx = talloc_stackframe();
-
-	ZERO_STRUCT(valuename);
-
-	status = registry_openkey(tmp_ctx, pipe_hnd, argv[0],
-				  SEC_RIGHTS_MAXIMUM_ALLOWED,
-				  &hive_hnd, &key_hnd);
-	if (!NT_STATUS_IS_OK(status)) {
-		d_fprintf(stderr, "registry_openkey failed: %s\n",
-			  nt_errstr(status));
-		return status;
-	}
-
-	valuename.name = argv[1];
-
-	/*
-	 * call QueryValue once with data == NULL to get the
-	 * needed memory size to be allocated, then allocate
-	 * data buffer and call again.
-	 */
-	status = rpccli_winreg_QueryValue(pipe_hnd, tmp_ctx, &key_hnd,
-					  &valuename,
-					  &type,
-					  data,
-					  &data_size,
-					  &value_length,
-					  NULL);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		d_fprintf(stderr, "registry_queryvalue failed: %s\n",
-			  nt_errstr(status));
-		goto done;
-	}
-
-	data = (uint8 *)TALLOC(tmp_ctx, data_size);
-	value_length = 0;
-
-	status = rpccli_winreg_QueryValue(pipe_hnd, tmp_ctx, &key_hnd,
-					  &valuename,
-					  &type,
-					  data,
-					  &data_size,
-					  &value_length,
-					  NULL);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		d_fprintf(stderr, "registry_queryvalue failed: %s\n",
-			  nt_errstr(status));
-		goto done;
-	}
-
-	werr = registry_pull_value(tmp_ctx, &value, type, data,
-				   data_size, value_length);
-	if (!W_ERROR_IS_OK(werr)) {
-		status = werror_to_ntstatus(werr);
-		goto done;
-	}
-
-	print_registry_value(value);
-
-done:
-	rpccli_winreg_CloseKey(pipe_hnd, tmp_ctx, &key_hnd, NULL);
-	rpccli_winreg_CloseKey(pipe_hnd, tmp_ctx, &hive_hnd, NULL);
-
-	TALLOC_FREE(tmp_ctx);
-
-	return status;
-}
-
-static int rpc_registry_getvalue(int argc, const char **argv)
-{
-	if (argc != 2) {
-		d_fprintf(stderr, "usage: net rpc registry deletevalue <key> "
-			  "<valuename>\n");
-		return -1;
-	}
-
-	return run_rpc_command(NULL, PI_WINREG, 0,
-		rpc_registry_getvalue_internal, argc, argv);
-}
-
-static NTSTATUS rpc_registry_createkey_internal(const DOM_SID *domain_sid,
-						const char *domain_name, 
-						struct cli_state *cli,
-						struct rpc_pipe_client *pipe_hnd,
-						TALLOC_CTX *mem_ctx, 
-						int argc,
-						const char **argv )
-{
-	uint32 hive;
-	struct policy_handle hive_hnd, key_hnd;
-	struct winreg_String key, keyclass;
-	enum winreg_CreateAction action;
-	NTSTATUS status;
-
-	ZERO_STRUCT(key);
-	ZERO_STRUCT(keyclass);
-
-	if (!reg_hive_key(mem_ctx, argv[0], &hive, &key.name)) {
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	status = rpccli_winreg_Connect(pipe_hnd, mem_ctx, hive,
-				       SEC_RIGHTS_MAXIMUM_ALLOWED,
-				       &hive_hnd);
-	if (!(NT_STATUS_IS_OK(status))) {
-		return status;
-	}
-
-	action = REG_ACTION_NONE;
-	keyclass.name = "";
-
-	status = rpccli_winreg_CreateKey(pipe_hnd, mem_ctx, &hive_hnd, key,
-					 keyclass, 0, REG_KEY_READ, NULL,
-					 &key_hnd, &action, NULL);
-	if (!NT_STATUS_IS_OK(status)) {
-		d_fprintf(stderr, "createkey returned %s\n",
-			  nt_errstr(status));
-		rpccli_winreg_CloseKey(pipe_hnd, mem_ctx, &hive_hnd, NULL);
-		return status;
-	}
-
-	switch (action) {
-		case REG_ACTION_NONE:
-			d_printf("createkey did nothing -- huh?\n");
-			break;
-		case REG_CREATED_NEW_KEY:
-			d_printf("createkey created %s\n", argv[0]);
-			break;
-		case REG_OPENED_EXISTING_KEY:
-			d_printf("createkey opened existing %s\n", argv[0]);
-			break;
-	}
-
-	rpccli_winreg_CloseKey(pipe_hnd, mem_ctx, &key_hnd, NULL);
-	rpccli_winreg_CloseKey(pipe_hnd, mem_ctx, &hive_hnd, NULL);
-
-	return status;
-}
-
-static int rpc_registry_createkey( int argc, const char **argv )
-{
-	if (argc != 1) {
-		d_fprintf(stderr, "usage: net rpc registry createkey <key>\n");
-		return -1;
-	}
-
-	return run_rpc_command( NULL, PI_WINREG, 0, 
-		rpc_registry_createkey_internal, argc, argv );
-}
-
-static NTSTATUS rpc_registry_deletekey_internal(const DOM_SID *domain_sid,
-						const char *domain_name, 
-						struct cli_state *cli,
-						struct rpc_pipe_client *pipe_hnd,
-						TALLOC_CTX *mem_ctx, 
-						int argc,
-						const char **argv )
-{
-	uint32 hive;
-	struct policy_handle hive_hnd;
-	struct winreg_String key;
-	NTSTATUS status;
-
-	ZERO_STRUCT(key);
-
-	if (!reg_hive_key(mem_ctx, argv[0], &hive, &key.name)) {
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	status = rpccli_winreg_Connect(pipe_hnd, mem_ctx, hive,
-				       SEC_RIGHTS_MAXIMUM_ALLOWED,
-				       &hive_hnd);
-	if (!(NT_STATUS_IS_OK(status))) {
-		return status;
-	}
-
-	status = rpccli_winreg_DeleteKey(pipe_hnd, mem_ctx, &hive_hnd, key, NULL);
-	rpccli_winreg_CloseKey(pipe_hnd, mem_ctx, &hive_hnd, NULL);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		d_fprintf(stderr, "deletekey returned %s\n",
-			  nt_errstr(status));
-	}
-
-	return status;
-}
-
-static int rpc_registry_deletekey( int argc, const char **argv )
-{
-	if (argc != 1) {
-		d_fprintf(stderr, "usage: net rpc registry deletekey <key>\n");
-		return -1;
-	}
-
-	return run_rpc_command( NULL, PI_WINREG, 0, 
-		rpc_registry_deletekey_internal, argc, argv );
-}
-
 /********************************************************************
 ********************************************************************/
 
@@ -715,57 +92,104 @@
 						int argc,
 						const char **argv )
 {
+	WERROR result = WERR_GENERAL_FAILURE;
+	uint32 hive;
+	pstring subpath;
 	POLICY_HND pol_hive, pol_key; 
-	NTSTATUS status;
-	uint32 num_subkeys = 0;
-	uint32 num_values = 0;
-	char **names = NULL, **classes = NULL;
-	NTTIME **modtimes = NULL;
-	uint32 i;
-	struct registry_value **values = NULL;
+	uint32 idx;
 	
 	if (argc != 1 ) {
-		d_printf("Usage:    net rpc registry enumerate <path> [recurse]\n");
-		d_printf("Example:  net rpc registry enumerate 'HKLM\\Software\\Samba'\n");
-		return NT_STATUS_INVALID_PARAMETER;
+		d_printf("Usage:    net rpc enumerate <path> [recurse]\n");
+		d_printf("Example:  net rpc enumerate 'HKLM\\Software\\Samba'\n");
+		return NT_STATUS_OK;
 	}
-
-	status = registry_openkey(mem_ctx, pipe_hnd, argv[0], REG_KEY_READ,
-				  &pol_hive, &pol_key);
-	if (!NT_STATUS_IS_OK(status)) {
-		d_fprintf(stderr, "registry_openkey failed: %s\n",
-			  nt_errstr(status));
-		return status;
+	
+	if ( !reg_split_hive( argv[0], &hive, subpath ) ) {
+		d_fprintf(stderr, "invalid registry path\n");
+		return NT_STATUS_OK;
 	}
-
-	status = registry_enumkeys(mem_ctx, pipe_hnd, &pol_key, &num_subkeys,
-				   &names, &classes, &modtimes);
-	if (!NT_STATUS_IS_OK(status)) {
-		d_fprintf(stderr, "enumerating keys failed: %s\n",
-			  nt_errstr(status));
-		return status;
+	
+	/* open the top level hive and then the registry key */
+	
+	result = rpccli_reg_connect(pipe_hnd, mem_ctx, hive, MAXIMUM_ALLOWED_ACCESS, &pol_hive );
+	if ( !W_ERROR_IS_OK(result) ) {
+		d_fprintf(stderr, "Unable to connect to remote registry\n");
+		return werror_to_ntstatus(result);
 	}
-
-	for (i=0; i<num_subkeys; i++) {
-		print_registry_key(names[i], modtimes[i]);
+	
+	if ( strlen( subpath ) != 0 ) {
+		result = rpccli_reg_open_entry(pipe_hnd, mem_ctx, &pol_hive, subpath, MAXIMUM_ALLOWED_ACCESS, &pol_key );
+		if ( !W_ERROR_IS_OK(result) ) {
+			d_fprintf(stderr, "Unable to open [%s]\n", argv[0]);
+			return werror_to_ntstatus(result);
+		}
 	}
+	
+	/* get the subkeys */
+	
+	result = WERR_OK;
+	idx = 0;
+	while ( W_ERROR_IS_OK(result) ) {
+		time_t modtime;
+		fstring keyname, classname;
+		
+		result = rpccli_reg_enum_key(pipe_hnd, mem_ctx, &pol_key, idx, 
+			keyname, classname, &modtime );
+			
+		if ( W_ERROR_EQUAL(result, WERR_NO_MORE_ITEMS) ) {
+			result = WERR_OK;
+			break;
+		}
+			
+		d_printf("Keyname   = %s\n", keyname );
+		d_printf("Classname = %s\n", classname );
+		d_printf("Modtime   = %s\n", http_timestring(modtime) );
+		d_printf("\n" );
 
-	status = registry_enumvalues(mem_ctx, pipe_hnd, &pol_key, &num_values,
-				     &names, &values);
-	if (!NT_STATUS_IS_OK(status)) {
-		d_fprintf(stderr, "enumerating values failed: %s\n",
-			  nt_errstr(status));
-		return status;
+		idx++;
 	}
 
-	for (i=0; i<num_values; i++) {
-		print_registry_value_with_name(names[i], values[i]);
+	if ( !W_ERROR_IS_OK(result) )
+		goto out;
+	
+	/* get the values */
+	
+	result = WERR_OK;
+	idx = 0;
+	while ( W_ERROR_IS_OK(result) ) {
+		uint32 type;
+		fstring name;
+		REGVAL_BUFFER value;
+		
+		fstrcpy( name, "" );
+		ZERO_STRUCT( value );
+		
+		result = rpccli_reg_enum_val(pipe_hnd, mem_ctx, &pol_key, idx, 
+			name, &type, &value );
+			
+		if ( W_ERROR_EQUAL(result, WERR_NO_MORE_ITEMS) ) {
+			result = WERR_OK;
+			break;
+		}
+			
+		d_printf("Valuename  = %s\n", name );
+		d_printf("Type       = %s\n", dump_regval_type(type) );
+		d_printf("Data       = " );
+		dump_regval_buffer( type, &value );
+		d_printf("\n" );
+
+		idx++;
 	}
+	
+	
+out:
+	/* cleanup */
+	
+	if ( strlen( subpath ) != 0 )
+		rpccli_reg_close(pipe_hnd, mem_ctx, &pol_key );
+	rpccli_reg_close(pipe_hnd, mem_ctx, &pol_hive );
 
-	rpccli_winreg_CloseKey(pipe_hnd, mem_ctx, &pol_key, NULL);
-	rpccli_winreg_CloseKey(pipe_hnd, mem_ctx, &pol_hive, NULL);
-
-	return status;
+	return werror_to_ntstatus(result);
 }
 
 /********************************************************************
@@ -789,35 +213,46 @@
 					const char **argv )
 {
 	WERROR result = WERR_GENERAL_FAILURE;
+	uint32 hive;
+	pstring subpath;
 	POLICY_HND pol_hive, pol_key; 
-	NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
-	struct winreg_String filename;
 	
 	if (argc != 2 ) {
-		d_printf("Usage:    net rpc registry backup <path> <file> \n");
-		return NT_STATUS_INVALID_PARAMETER;
+		d_printf("Usage:    net rpc backup <path> <file> \n");
+		return NT_STATUS_OK;
 	}
 	
-	status = registry_openkey(mem_ctx, pipe_hnd, argv[0], REG_KEY_ALL,
-				  &pol_hive, &pol_key);
-	if (!NT_STATUS_IS_OK(status)) {
-		d_fprintf(stderr, "registry_openkey failed: %s\n",
-			  nt_errstr(status));
-		return status;
+	if ( !reg_split_hive( argv[0], &hive, subpath ) ) {
+		d_fprintf(stderr, "invalid registry path\n");
+		return NT_STATUS_OK;
 	}
-
-	filename.name = argv[1];
-	status = rpccli_winreg_SaveKey( pipe_hnd, mem_ctx, &pol_key, &filename, NULL, NULL);
+	
+	/* open the top level hive and then the registry key */
+	
+	result = rpccli_reg_connect(pipe_hnd, mem_ctx, hive, MAXIMUM_ALLOWED_ACCESS, &pol_hive );
 	if ( !W_ERROR_IS_OK(result) ) {
+		d_fprintf(stderr, "Unable to connect to remote registry\n");
+		return werror_to_ntstatus(result);
+	}
+	
+	result = rpccli_reg_open_entry(pipe_hnd, mem_ctx, &pol_hive, subpath, MAXIMUM_ALLOWED_ACCESS, &pol_key );
+	if ( !W_ERROR_IS_OK(result) ) {
+		d_fprintf(stderr, "Unable to open [%s]\n", argv[0]);
+		return werror_to_ntstatus(result);
+	}
+	
+	result = rpccli_reg_save_key(pipe_hnd, mem_ctx, &pol_key, argv[1] );
+	if ( !W_ERROR_IS_OK(result) ) {
 		d_fprintf(stderr, "Unable to save [%s] to %s:%s\n", argv[0], cli->desthost, argv[1]);
 	}
 	
+	
 	/* cleanup */
 	
-	rpccli_winreg_CloseKey(pipe_hnd, mem_ctx, &pol_key, NULL);
-	rpccli_winreg_CloseKey(pipe_hnd, mem_ctx, &pol_hive, NULL);
+	rpccli_reg_close(pipe_hnd, mem_ctx, &pol_key );
+	rpccli_reg_close(pipe_hnd, mem_ctx, &pol_hive );
 
-	return status;
+	return werror_to_ntstatus(result);
 }
 
 /********************************************************************
@@ -836,7 +271,7 @@
 static void dump_values( REGF_NK_REC *nk )
 {
 	int i, j;
-	char *data_str = NULL;
+	pstring data_str;
 	uint32 data_size, data;
 
 	if ( !nk->values )
@@ -844,19 +279,12 @@
 
 	for ( i=0; i<nk->num_values; i++ ) {
 		d_printf( "\"%s\" = ", nk->values[i].valuename ? nk->values[i].valuename : "(default)" );
-		d_printf( "(%s) ", reg_type_lookup( nk->values[i].type ) );
+		d_printf( "(%s) ", dump_regval_type( nk->values[i].type ) );
 
 		data_size = nk->values[i].data_size & ~VK_DATA_IN_OFFSET;
 		switch ( nk->values[i].type ) {
 			case REG_SZ:
-				rpcstr_pull_talloc(talloc_tos(),
-						&data_str,
-						nk->values[i].data,
-						-1,
-						STR_TERMINATE);
-				if (!data_str) {
-					break;
-				}
+				rpcstr_pull( data_str, nk->values[i].data, sizeof(data_str), -1, STR_TERMINATE );
 				d_printf( "%s", data_str );
 				break;
 			case REG_MULTI_SZ:
@@ -887,22 +315,19 @@
 /********************************************************************
 ********************************************************************/
 
-static bool dump_registry_tree( REGF_FILE *file, REGF_NK_REC *nk, const char *parent )
+static BOOL dump_registry_tree( REGF_FILE *file, REGF_NK_REC *nk, const char *parent )
 {
 	REGF_NK_REC *key;
+	pstring regpath;
 
 	/* depth first dump of the registry tree */
 
 	while ( (key = regfio_fetch_subkey( file, nk )) ) {
-		char *regpath;
-		if (asprintf(&regpath, "%s\\%s", parent, key->keyname) < 0) {
-			break;
-		}
+		pstr_sprintf( regpath, "%s\\%s", parent, key->keyname );
 		d_printf("[%s]\n", regpath );
 		dump_values( key );
 		d_printf("\n");
 		dump_registry_tree( file, key, regpath );
-		SAFE_FREE(regpath);
 	}
 
 	return True;
@@ -911,15 +336,15 @@
 /********************************************************************
 ********************************************************************/
 
-static bool write_registry_tree( REGF_FILE *infile, REGF_NK_REC *nk, 
+static BOOL write_registry_tree( REGF_FILE *infile, REGF_NK_REC *nk, 
                                  REGF_NK_REC *parent, REGF_FILE *outfile,
 			         const char *parentpath )
 {
 	REGF_NK_REC *key, *subkey;
-	REGVAL_CTR *values = NULL;
-	REGSUBKEY_CTR *subkeys = NULL;
+	REGVAL_CTR *values;
+	REGSUBKEY_CTR *subkeys;
 	int i;
-	char *path = NULL;
+	pstring path;
 
 	if ( !( subkeys = TALLOC_ZERO_P( infile->mem_ctx, REGSUBKEY_CTR )) ) {
 		DEBUG(0,("write_registry_tree: talloc() failed!\n"));
@@ -928,45 +353,36 @@
 
 	if ( !(values = TALLOC_ZERO_P( subkeys, REGVAL_CTR )) ) {
 		DEBUG(0,("write_registry_tree: talloc() failed!\n"));
-		TALLOC_FREE(subkeys);
 		return False;
 	}
 
 	/* copy values into the REGVAL_CTR */
-
+	
 	for ( i=0; i<nk->num_values; i++ ) {
 		regval_ctr_addvalue( values, nk->values[i].valuename, nk->values[i].type,
 			(const char *)nk->values[i].data, (nk->values[i].data_size & ~VK_DATA_IN_OFFSET) );
 	}
 
 	/* copy subkeys into the REGSUBKEY_CTR */
-
+	
 	while ( (subkey = regfio_fetch_subkey( infile, nk )) ) {
 		regsubkey_ctr_addkey( subkeys, subkey->keyname );
 	}
-
+	
 	key = regfio_write_key( outfile, nk->keyname, values, subkeys, nk->sec_desc->sec_desc, parent );
 
 	/* write each one of the subkeys out */
 
-	path = talloc_asprintf(subkeys,
-			"%s%s%s",
-			parentpath,
-			parent ? "\\" : "",
-			nk->keyname);
-	if (!path) {
-		TALLOC_FREE(subkeys);
-		return false;
-	}
-
+	pstr_sprintf( path, "%s%s%s", parentpath, parent ? "\\" : "", nk->keyname );
 	nk->subkey_index = 0;
 	while ( (subkey = regfio_fetch_subkey( infile, nk )) ) {
 		write_registry_tree( infile, subkey, key, outfile, path );
 	}
 
-	d_printf("[%s]\n", path );
-	TALLOC_FREE(subkeys);
+	TALLOC_FREE( subkeys );
 
+	d_printf("[%s]\n", path );
+	
 	return True;
 }
 
@@ -979,8 +395,8 @@
 	REGF_NK_REC *nk;
 	
 	if (argc != 1 ) {
-		d_printf("Usage:    net rpc registry dump <file> \n");
-		return -1;
+		d_printf("Usage:    net rpc dump <file> \n");
+		return 0;
 	}
 	
 	d_printf("Opening %s....", argv[0]);
@@ -1023,8 +439,8 @@
 	int result = 1;
 	
 	if (argc != 2 ) {
-		d_printf("Usage:    net rpc registry copy <srcfile> <newfile>\n");
-		return -1;
+		d_printf("Usage:    net rpc copy <srcfile> <newfile>\n");
+		return 0;
 	}
 	
 	d_printf("Opening %s....", argv[0]);
@@ -1073,116 +489,30 @@
 /********************************************************************
 ********************************************************************/
 
-static NTSTATUS rpc_registry_getsd_internal(const DOM_SID *domain_sid,
-					    const char *domain_name,
-					    struct cli_state *cli,
-					    struct rpc_pipe_client *pipe_hnd,
-					    TALLOC_CTX *mem_ctx,
-					    int argc,
-					    const char **argv)
+static int net_help_registry( int argc, const char **argv )
 {
-	POLICY_HND pol_hive, pol_key;
-	NTSTATUS status;
-	enum ndr_err_code ndr_err;
-	struct KeySecurityData *sd = NULL;
-	uint32_t sec_info;
-	DATA_BLOB blob;
-	struct security_descriptor sec_desc;
-	uint32_t access_mask = REG_KEY_READ |
-			       SEC_RIGHT_MAXIMUM_ALLOWED |
-			       SEC_RIGHT_SYSTEM_SECURITY;
-
-	if (argc <1 || argc > 2) {
-		d_printf("Usage:    net rpc registry getsd <path> <secinfo>\n");
-		d_printf("Example:  net rpc registry getsd 'HKLM\\Software\\Samba'\n");
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	status = registry_openkey(mem_ctx, pipe_hnd, argv[0],
-				  access_mask,
-				  &pol_hive, &pol_key);
-	if (!NT_STATUS_IS_OK(status)) {
-		d_fprintf(stderr, "registry_openkey failed: %s\n",
-			  nt_errstr(status));
-		return status;
-	}
-
-	sd = TALLOC_ZERO_P(mem_ctx, struct KeySecurityData);
-	if (!sd) {
-		status = NT_STATUS_NO_MEMORY;
-		goto out;
-	}
-
-	sd->size = 0x1000;
-
-	if (argc >= 2) {
-		sscanf(argv[1], "%x", &sec_info);
-	} else {
-		sec_info = SECINFO_OWNER | SECINFO_GROUP | SECINFO_DACL;
-	}
-
-	status = registry_getsd(mem_ctx, pipe_hnd, &pol_key, sec_info, sd);
-	if (!NT_STATUS_IS_OK(status)) {
-		d_fprintf(stderr, "getting sd failed: %s\n",
-			  nt_errstr(status));
-		goto out;
-	}
-
-	blob.data = sd->data;
-	blob.length = sd->size;
-
-	ndr_err = ndr_pull_struct_blob(&blob, mem_ctx, &sec_desc,
-				       (ndr_pull_flags_fn_t)ndr_pull_security_descriptor);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		status = ndr_map_error2ntstatus(ndr_err);
-		goto out;
-	}
-	status = NT_STATUS_OK;
-
-	display_sec_desc(&sec_desc);
-
- out:
-	rpccli_winreg_CloseKey(pipe_hnd, mem_ctx, &pol_key, NULL);
-	rpccli_winreg_CloseKey(pipe_hnd, mem_ctx, &pol_hive, NULL);
-
-	return status;
+	d_printf("net rpc registry enumerate <path> [recurse]  Enumerate the subkeya and values for a given registry path\n");
+	d_printf("net rpc registry save <path> <file>          Backup a registry tree to a file on the server\n");
+	d_printf("net rpc registry dump <file>                 Dump the contents of a registry file to stdout\n");
+	
+	return -1;
 }
 
-
-static int rpc_registry_getsd(int argc, const char **argv)
-{
-	return run_rpc_command(NULL, PI_WINREG, 0,
-		rpc_registry_getsd_internal, argc, argv);
-}
-
 /********************************************************************
 ********************************************************************/
 
 int net_rpc_registry(int argc, const char **argv) 
 {
-	struct functable2 func[] = {
-		{ "enumerate", rpc_registry_enumerate,
-		  "Enumerate registry keys and values" },
-		{ "createkey",  rpc_registry_createkey,
-		  "Create a new registry key" },
-		{ "deletekey",  rpc_registry_deletekey,
-		  "Delete a registry key" },
-		{ "getvalue", rpc_registry_getvalue,
-		  "Print a registry value" },
-		{ "setvalue",  rpc_registry_setvalue,
-		  "Set a new registry value" },
-		{ "deletevalue",  rpc_registry_deletevalue,
-		  "Delete a registry value" },
-		{ "save", rpc_registry_save,
-		  "Save a registry file" },
-		{ "dump", rpc_registry_dump,
-		  "Dump a registry file" },
-		{ "copy", rpc_registry_copy,
-		  "Copy a registry file" },
-		{ "getsd", rpc_registry_getsd,
-		  "Get security descriptor" },
-		{NULL, NULL, NULL}
+	struct functable func[] = {
+		{"enumerate", rpc_registry_enumerate},
+		{"save",      rpc_registry_save},
+		{"dump",      rpc_registry_dump},
+		{"copy",      rpc_registry_copy},
+		{NULL, NULL}
 	};
 	
-	return net_run_function2(argc, argv, "net rpc registry", func);
+	if ( argc )
+		return net_run_function( argc, argv, func, net_help_registry );
+		
+	return net_help_registry( argc, argv );
 }

Modified: branches/samba/upstream/source/utils/net_rpc_rights.c
===================================================================
--- branches/samba/upstream/source/utils/net_rpc_rights.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_rpc_rights.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -2,11 +2,10 @@
    Samba Unix/Linux SMB client library 
    Distributed SMB/CIFS Server Management Utility 
    Copyright (C) Gerald (Jerry) Carter          2004
-   Copyright (C) Guenther Deschner              2008
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
 #include "includes.h"
 #include "utils/net.h"
@@ -29,9 +29,9 @@
 				fstring name)
 {
 	POLICY_HND pol;
-	enum lsa_SidType *sid_types = NULL;
+	enum lsa_SidType *sid_types;
 	NTSTATUS result;
-	char **domains = NULL, **names = NULL;
+	char **domains, **names;
 
 	result = rpccli_lsa_open_policy(pipe_hnd, mem_ctx, True, 
 		SEC_RIGHTS_MAXIMUM_ALLOWED, &pol);
@@ -48,7 +48,7 @@
 			fstrcpy( name, names[0] );
 	}
 
-	rpccli_lsa_Close(pipe_hnd, mem_ctx, &pol);
+	rpccli_lsa_close(pipe_hnd, mem_ctx, &pol);
 	return result;
 }
 
@@ -76,12 +76,12 @@
 		return result;
 
 	result = rpccli_lsa_lookup_names(pipe_hnd, mem_ctx, &pol, 1, &name,
-					 NULL, 1, &sids, &sid_types);
+					 NULL, &sids, &sid_types);
 	
 	if ( NT_STATUS_IS_OK(result) )
 		sid_copy( sid, &sids[0] );
 
-	rpccli_lsa_Close(pipe_hnd, mem_ctx, &pol);
+	rpccli_lsa_close(pipe_hnd, mem_ctx, &pol);
 	return result;
 }
 
@@ -95,49 +95,37 @@
 	NTSTATUS result;
 	uint32 enum_context = 0;
 	uint32 pref_max_length=0x1000;
+	uint32 count=0;
+	char   **privs_name;
+	uint32 *privs_high;
+	uint32 *privs_low;
 	int i;
 	uint16 lang_id=0;
 	uint16 lang_id_sys=0;
 	uint16 lang_id_desc;
-	struct lsa_StringLarge *description = NULL;
-	struct lsa_PrivArray priv_array;
+	fstring description;
 
-	result = rpccli_lsa_EnumPrivs(pipe_hnd, ctx,
-				      pol,
-				      &enum_context,
-				      &priv_array,
-				      pref_max_length);
+	result = rpccli_lsa_enum_privilege(pipe_hnd, ctx, pol, &enum_context, 
+		pref_max_length, &count, &privs_name, &privs_high, &privs_low);
 
 	if ( !NT_STATUS_IS_OK(result) )
 		return result;
 
 	/* Print results */
-
-	for (i = 0; i < priv_array.count; i++) {
-
-		struct lsa_String lsa_name;
-
-		d_printf("%30s  ",
-			priv_array.privs[i].name.string ? priv_array.privs[i].name.string : "*unknown*" );
-
+	
+	for (i = 0; i < count; i++) {
+		d_printf("%30s  ", privs_name[i] ? privs_name[i] : "*unknown*" );
+		
 		/* try to get the description */
-
-		init_lsa_String(&lsa_name, priv_array.privs[i].name.string);
-
-		result = rpccli_lsa_LookupPrivDisplayName(pipe_hnd, ctx,
-							  pol,
-							  &lsa_name,
-							  lang_id,
-							  lang_id_sys,
-							  &description,
-							  &lang_id_desc);
-
-		if (!NT_STATUS_IS_OK(result)) {
+		
+		if ( !NT_STATUS_IS_OK(rpccli_lsa_get_dispname(pipe_hnd, ctx, pol, 
+			privs_name[i], lang_id, lang_id_sys, description, &lang_id_desc)) )
+		{
 			d_printf("??????\n");
 			continue;
 		}
-
-		d_printf("%s\n", description->string);
+		
+		d_printf("%s\n", description );		
 	}
 
 	return NT_STATUS_OK;
@@ -153,24 +141,22 @@
 					const char *right)
 {
 	NTSTATUS result;
-	struct lsa_RightSet rights;
+	uint32 count;
+	char **rights;
 	int i;
 
-	result = rpccli_lsa_EnumAccountRights(pipe_hnd, ctx,
-					      pol,
-					      sid,
-					      &rights);
+	result = rpccli_lsa_enum_account_rights(pipe_hnd, ctx, pol, sid, &count, &rights);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		return result;
 	}
 
-	if (rights.count == 0) {
+	if (count == 0) {
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 	}
-
-	for (i = 0; i < rights.count; i++) {
-		if (StrCaseCmp(rights.names[i].string, right) == 0) {
+		
+	for (i = 0; i < count; i++) {
+		if (StrCaseCmp(rights[i], right) == 0) {
 			return NT_STATUS_OK;
 		}
 	}
@@ -187,25 +173,22 @@
 					DOM_SID *sid )
 {
 	NTSTATUS result;
-	struct lsa_RightSet rights;
+	uint32 count;
+	char **rights;
 	int i;
 
-	result = rpccli_lsa_EnumAccountRights(pipe_hnd, ctx,
-					      pol,
-					      sid,
-					      &rights);
+	result = rpccli_lsa_enum_account_rights(pipe_hnd, ctx, pol, sid, &count, &rights);
 
 	if (!NT_STATUS_IS_OK(result))
 		return result;
 
-	if (rights.count == 0) {
+	if ( count == 0 )
 		d_printf("No privileges assigned\n");
+		
+	for (i = 0; i < count; i++) {
+		printf("%s\n", rights[i]);
 	}
 
-	for (i = 0; i < rights.count; i++) {
-		printf("%s\n", rights.names[i].string);
-	}
-
 	return NT_STATUS_OK;
 }
 
@@ -220,27 +203,24 @@
 	NTSTATUS result;
 	uint32 enum_context=0;
 	uint32 pref_max_length=0x1000;
-	struct lsa_SidArray sid_array;
+	DOM_SID *sids;
+	uint32 count=0;
 	int i;
 	fstring name;
 
-	result = rpccli_lsa_EnumAccounts(pipe_hnd, ctx,
-					 pol,
-					 &enum_context,
-					 &sid_array,
-					 pref_max_length);
+	result = rpccli_lsa_enum_sids(pipe_hnd, ctx, pol, &enum_context, 
+		pref_max_length, &count, &sids);
 
 	if (!NT_STATUS_IS_OK(result))
 		return result;
 		
 	d_printf("%s:\n", privilege);
 
-	for ( i=0; i<sid_array.num_sids; i++ ) {
-
-		result = check_privilege_for_user(pipe_hnd, ctx, pol,
-						  sid_array.sids[i].sid,
-						  privilege);
-
+	for ( i=0; i<count; i++ ) {
+	
+		   
+		result = check_privilege_for_user( pipe_hnd, ctx, pol, &sids[i], privilege);
+		
 		if ( ! NT_STATUS_IS_OK(result)) {
 			if ( ! NT_STATUS_EQUAL(result, NT_STATUS_OBJECT_NAME_NOT_FOUND)) {
 				return result;
@@ -250,10 +230,10 @@
 
 		/* try to convert the SID to a name.  Fall back to 
 		   printing the raw SID if necessary */
-		result = sid_to_name( pipe_hnd, ctx, sid_array.sids[i].sid, name );
+		result = sid_to_name( pipe_hnd, ctx, &sids[i], name );
 		if ( !NT_STATUS_IS_OK (result) )
-			sid_to_fstring(name, sid_array.sids[i].sid);
-
+			fstrcpy( name, sid_string_static(&sids[i]) );
+			
 		d_printf("  %s\n", name);
 	}
 
@@ -270,32 +250,30 @@
 	NTSTATUS result;
 	uint32 enum_context=0;
 	uint32 pref_max_length=0x1000;
-	struct lsa_SidArray sid_array;
+	DOM_SID *sids;
+	uint32 count=0;
 	int i;
 	fstring name;
 
-	result = rpccli_lsa_EnumAccounts(pipe_hnd, ctx,
-					 pol,
-					 &enum_context,
-					 &sid_array,
-					 pref_max_length);
+	result = rpccli_lsa_enum_sids(pipe_hnd, ctx, pol, &enum_context, 
+		pref_max_length, &count, &sids);
 
 	if (!NT_STATUS_IS_OK(result))
 		return result;
-
-	for ( i=0; i<sid_array.num_sids; i++ ) {
-
+		
+	for ( i=0; i<count; i++ ) {
+	
 		/* try to convert the SID to a name.  Fall back to 
 		   printing the raw SID if necessary */
-
-		result = sid_to_name(pipe_hnd, ctx, sid_array.sids[i].sid, name);
+		   
+		result = sid_to_name(pipe_hnd, ctx, &sids[i], name );
 		if ( !NT_STATUS_IS_OK (result) )
-			sid_to_fstring(name, sid_array.sids[i].sid);
-
+			fstrcpy( name, sid_string_static(&sids[i]) );
+			
 		d_printf("%s\n", name);
-
-		result = enum_privileges_for_user(pipe_hnd, ctx, pol,
-						  sid_array.sids[i].sid);
+		
+		result = enum_privileges_for_user(pipe_hnd, ctx, pol, &sids[i] );
+		
 		if ( !NT_STATUS_IS_OK(result) )
 			return result;
 
@@ -320,8 +298,7 @@
 	NTSTATUS result;
 	DOM_SID sid;
 	fstring privname;
-	struct lsa_String lsa_name;
-	struct lsa_StringLarge *description = NULL;
+	fstring description;
 	uint16 lang_id = 0;
 	uint16 lang_id_sys = 0;
 	uint16 lang_id_desc;
@@ -349,19 +326,14 @@
 		}
 
 		while ( argv[i] != NULL ) {
-			fstrcpy(privname, argv[i]);
-			init_lsa_String(&lsa_name, argv[i]);
+			fstrcpy( privname, argv[i] );
 			i++;
 		
 			/* verify that this is a valid privilege for error reporting */
-			result = rpccli_lsa_LookupPrivDisplayName(pipe_hnd, mem_ctx,
-								  &pol,
-								  &lsa_name,
-								  lang_id,
-								  lang_id_sys,
-								  &description,
-								  &lang_id_desc);
-
+			
+			result = rpccli_lsa_get_dispname(pipe_hnd, mem_ctx, &pol, privname, lang_id, 
+				lang_id_sys, description, &lang_id_desc);
+			
 			if ( !NT_STATUS_IS_OK(result) ) {
 				if ( NT_STATUS_EQUAL( result, NT_STATUS_NO_SUCH_PRIVILEGE ) ) 
 					d_fprintf(stderr, "No such privilege exists: %s.\n", privname);
@@ -419,7 +391,7 @@
 	result = enum_privileges_for_user(pipe_hnd, mem_ctx, &pol, &sid );
 
 done:
-	rpccli_lsa_Close(pipe_hnd, mem_ctx, &pol);
+	rpccli_lsa_close(pipe_hnd, mem_ctx, &pol);
 
 	return result;
 }
@@ -437,8 +409,6 @@
 {
 	POLICY_HND dom_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	struct lsa_RightSet rights;
-	int i;
 
 	DOM_SID sid;
 
@@ -458,22 +428,9 @@
 	if (!NT_STATUS_IS_OK(result))
 		return result;	
 
-	rights.count = argc-1;
-	rights.names = TALLOC_ARRAY(mem_ctx, struct lsa_StringLarge,
-				    rights.count);
-	if (!rights.names) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	result = rpccli_lsa_add_account_rights(pipe_hnd, mem_ctx, &dom_pol, sid, 
+					    argc-1, argv+1);
 
-	for (i=0; i<argc-1; i++) {
-		init_lsa_StringLarge(&rights.names[i], argv[i+1]);
-	}
-
-	result = rpccli_lsa_AddAccountRights(pipe_hnd, mem_ctx,
-					     &dom_pol,
-					     &sid,
-					     &rights);
-
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 		
@@ -485,7 +442,7 @@
 			argv[0], nt_errstr(result));
 	}
 		
- 	rpccli_lsa_Close(pipe_hnd, mem_ctx, &dom_pol);
+ 	rpccli_lsa_close(pipe_hnd, mem_ctx, &dom_pol);
 	
 	return result;
 }
@@ -503,9 +460,8 @@
 {
 	POLICY_HND dom_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	struct lsa_RightSet rights;
+
 	DOM_SID sid;
-	int i;
 
 	if (argc < 2 ) {
 		d_printf("Usage: net rpc rights revoke <name|SID> <rights...>\n");
@@ -523,23 +479,9 @@
 	if (!NT_STATUS_IS_OK(result))
 		return result;	
 
-	rights.count = argc-1;
-	rights.names = TALLOC_ARRAY(mem_ctx, struct lsa_StringLarge,
-				    rights.count);
-	if (!rights.names) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	result = rpccli_lsa_remove_account_rights(pipe_hnd, mem_ctx, &dom_pol, sid, 
+					       False, argc-1, argv+1);
 
-	for (i=0; i<argc-1; i++) {
-		init_lsa_StringLarge(&rights.names[i], argv[i+1]);
-	}
-
-	result = rpccli_lsa_RemoveAccountRights(pipe_hnd, mem_ctx,
-						&dom_pol,
-						&sid,
-						false,
-						&rights);
-
 	if (!NT_STATUS_IS_OK(result))
 		goto done;
 
@@ -551,7 +493,7 @@
 			argv[0], nt_errstr(result));
 	}
 	
-	rpccli_lsa_Close(pipe_hnd, mem_ctx, &dom_pol);
+	rpccli_lsa_close(pipe_hnd, mem_ctx, &dom_pol);
 
 	return result;
 }	

Modified: branches/samba/upstream/source/utils/net_rpc_samsync.c
===================================================================
--- branches/samba/upstream/source/utils/net_rpc_samsync.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_rpc_samsync.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,4 +1,4 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    dump the remote SAM using rpc samsync operations
 
@@ -7,20 +7,20 @@
    Copyright (C) Jim McDonough <jmcd at us.ibm.com> 2005
    Modified by Volker Lendecke 2002
    Copyright (C) Jeremy Allison 2005.
-   Copyright (C) Guenther Deschner 2008.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -32,62 +32,57 @@
 /* Keep track of ldap initialization */
 static int init_ldap = 1;
 
-static void display_group_mem_info(uint32_t rid,
-				   struct netr_DELTA_GROUP_MEMBER *r)
+static void display_group_mem_info(uint32 rid, SAM_GROUP_MEM_INFO *g)
 {
 	int i;
 	d_printf("Group mem %u: ", rid);
-	for (i=0; i< r->num_rids; i++) {
-		d_printf("%u ", r->rids[i]);
+	for (i=0;i<g->num_members;i++) {
+		d_printf("%u ", g->rids[i]);
 	}
 	d_printf("\n");
 }
 
-static void display_alias_info(uint32_t rid,
-			       struct netr_DELTA_ALIAS *r)
+static void display_alias_info(uint32 rid, SAM_ALIAS_INFO *a)
 {
-	d_printf("Alias '%s' ", r->alias_name.string);
-	d_printf("desc='%s' rid=%u\n", r->description.string, r->rid);
+	d_printf("Alias '%s' ", unistr2_static(&a->uni_als_name));
+	d_printf("desc='%s' rid=%u\n", unistr2_static(&a->uni_als_desc), a->als_rid);
 }
 
-static void display_alias_mem(uint32_t rid,
-			      struct netr_DELTA_ALIAS_MEMBER *r)
+static void display_alias_mem(uint32 rid, SAM_ALIAS_MEM_INFO *a)
 {
 	int i;
 	d_printf("Alias rid %u: ", rid);
-	for (i=0; i< r->sids.num_sids; i++) {
-		d_printf("%s ", sid_string_tos(r->sids.sids[i].sid));
+	for (i=0;i<a->num_members;i++) {
+		d_printf("%s ", sid_string_static(&a->sids[i].sid));
 	}
 	d_printf("\n");
 }
 
-static void display_account_info(uint32_t rid,
-				 struct netr_DELTA_USER *r)
+static void display_account_info(uint32 rid, SAM_ACCOUNT_INFO *a)
 {
 	fstring hex_nt_passwd, hex_lm_passwd;
 	uchar lm_passwd[16], nt_passwd[16];
 	static uchar zero_buf[16];
 
 	/* Decode hashes from password hash (if they are not NULL) */
-
-	if (memcmp(r->lmpassword.hash, zero_buf, 16) != 0) {
-		sam_pwd_hash(r->rid, r->lmpassword.hash, lm_passwd, 0);
-		pdb_sethexpwd(hex_lm_passwd, lm_passwd, r->acct_flags);
+	
+	if (memcmp(a->pass.buf_lm_pwd, zero_buf, 16) != 0) {
+		sam_pwd_hash(a->user_rid, a->pass.buf_lm_pwd, lm_passwd, 0);
+		pdb_sethexpwd(hex_lm_passwd, lm_passwd, a->acb_info);
 	} else {
 		pdb_sethexpwd(hex_lm_passwd, NULL, 0);
 	}
 
-	if (memcmp(r->ntpassword.hash, zero_buf, 16) != 0) {
-		sam_pwd_hash(r->rid, r->ntpassword.hash, nt_passwd, 0);
-		pdb_sethexpwd(hex_nt_passwd, nt_passwd, r->acct_flags);
+	if (memcmp(a->pass.buf_nt_pwd, zero_buf, 16) != 0) {
+		sam_pwd_hash(a->user_rid, a->pass.buf_nt_pwd, nt_passwd, 0);
+		pdb_sethexpwd(hex_nt_passwd, nt_passwd, a->acb_info);
 	} else {
 		pdb_sethexpwd(hex_nt_passwd, NULL, 0);
 	}
-
-	printf("%s:%d:%s:%s:%s:LCT-0\n",
-		r->account_name.string,
-		r->rid, hex_lm_passwd, hex_nt_passwd,
-		pdb_encode_acct_ctrl(r->acct_flags, NEW_PW_FORMAT_SPACE_PADDED_LEN));
+	
+	printf("%s:%d:%s:%s:%s:LCT-0\n", unistr2_static(&a->uni_acct_name),
+	       a->user_rid, hex_lm_passwd, hex_nt_passwd,
+	       pdb_encode_acct_ctrl(a->acb_info, NEW_PW_FORMAT_SPACE_PADDED_LEN));
 }
 
 static time_t uint64s_nt_time_to_unix_abs(const uint64 *src)
@@ -97,253 +92,108 @@
 	return nt_time_to_unix_abs(&nttime);
 }
 
-static NTSTATUS pull_netr_AcctLockStr(TALLOC_CTX *mem_ctx,
-				      struct lsa_BinaryString *r,
-				      struct netr_AcctLockStr **str_p)
+static void display_domain_info(SAM_DOMAIN_INFO *a)
 {
-	struct netr_AcctLockStr *str;
-	enum ndr_err_code ndr_err;
-	DATA_BLOB blob;
-
-	if (!mem_ctx || !r || !str_p) {
-		return NT_STATUS_INVALID_PARAMETER;
-	}
-
-	*str_p = NULL;
-
-	str = TALLOC_ZERO_P(mem_ctx, struct netr_AcctLockStr);
-	if (!str) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	blob = data_blob_const(r->array, r->length);
-
-	ndr_err = ndr_pull_struct_blob(&blob, mem_ctx, str,
-		       (ndr_pull_flags_fn_t)ndr_pull_netr_AcctLockStr);
-	data_blob_free(&blob);
-
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
-		return ndr_map_error2ntstatus(ndr_err);
-	}
-
-	*str_p = str;
-
-	return NT_STATUS_OK;
-}
-
-static void display_domain_info(struct netr_DELTA_DOMAIN *r)
-{
 	time_t u_logout;
-	struct netr_AcctLockStr *lockstr = NULL;
-	NTSTATUS status;
-	TALLOC_CTX *mem_ctx = talloc_tos();
 
-	status = pull_netr_AcctLockStr(mem_ctx, &r->account_lockout,
-				       &lockstr);
-	if (!NT_STATUS_IS_OK(status)) {
-		d_printf("failed to pull account lockout string: %s\n",
-			nt_errstr(status));
-	}
+	u_logout = uint64s_nt_time_to_unix_abs(&a->force_logoff);
 
-	u_logout = uint64s_nt_time_to_unix_abs((const uint64 *)&r->force_logoff_time);
+	d_printf("Domain name: %s\n", unistr2_static(&a->uni_dom_name));
 
-	d_printf("Domain name: %s\n", r->domain_name.string);
+	d_printf("Minimal Password Length: %d\n", a->min_pwd_len);
+	d_printf("Password History Length: %d\n", a->pwd_history_len);
 
-	d_printf("Minimal Password Length: %d\n", r->min_password_length);
-	d_printf("Password History Length: %d\n", r->password_history_length);
-
 	d_printf("Force Logoff: %d\n", (int)u_logout);
 
-	d_printf("Max Password Age: %s\n", display_time(r->max_password_age));
-	d_printf("Min Password Age: %s\n", display_time(r->min_password_age));
+	d_printf("Max Password Age: %s\n", display_time(a->max_pwd_age));
+	d_printf("Min Password Age: %s\n", display_time(a->min_pwd_age));
 
-	if (lockstr) {
-		d_printf("Lockout Time: %s\n", display_time((NTTIME)lockstr->lockout_duration));
-		d_printf("Lockout Reset Time: %s\n", display_time((NTTIME)lockstr->reset_count));
-		d_printf("Bad Attempt Lockout: %d\n", lockstr->bad_attempt_lockout);
-	}
+	d_printf("Lockout Time: %s\n", display_time(a->account_lockout.lockout_duration));
+	d_printf("Lockout Reset Time: %s\n", display_time(a->account_lockout.reset_count));
 
-	d_printf("User must logon to change password: %d\n", r->logon_to_chgpass);
+	d_printf("Bad Attempt Lockout: %d\n", a->account_lockout.bad_attempt_lockout);
+	d_printf("User must logon to change password: %d\n", a->logon_chgpass);
 }
 
-static void display_group_info(uint32_t rid, struct netr_DELTA_GROUP *r)
+static void display_group_info(uint32 rid, SAM_GROUP_INFO *a)
 {
-	d_printf("Group '%s' ", r->group_name.string);
-	d_printf("desc='%s', rid=%u\n", r->description.string, rid);
+	d_printf("Group '%s' ", unistr2_static(&a->uni_grp_name));
+	d_printf("desc='%s', rid=%u\n", unistr2_static(&a->uni_grp_desc), rid);
 }
 
-static void display_sam_entry(struct netr_DELTA_ENUM *r)
+static void display_sam_entry(SAM_DELTA_HDR *hdr_delta, SAM_DELTA_CTR *delta)
 {
-	union netr_DELTA_UNION u = r->delta_union;
-	union netr_DELTA_ID_UNION id = r->delta_id_union;
-
-	switch (r->delta_type) {
-	case NETR_DELTA_DOMAIN:
-		display_domain_info(u.domain);
+	switch (hdr_delta->type) {
+	case SAM_DELTA_ACCOUNT_INFO:
+		display_account_info(hdr_delta->target_rid, &delta->account_info);
 		break;
-	case NETR_DELTA_GROUP:
-		display_group_info(id.rid, u.group);
+	case SAM_DELTA_GROUP_MEM:
+		display_group_mem_info(hdr_delta->target_rid, &delta->grp_mem_info);
 		break;
-#if 0
-	case NETR_DELTA_DELETE_GROUP:
-		printf("Delete Group: %d\n",
-			u.delete_account.unknown);
+	case SAM_DELTA_ALIAS_INFO:
+		display_alias_info(hdr_delta->target_rid, &delta->alias_info);
 		break;
-	case NETR_DELTA_RENAME_GROUP:
-		printf("Rename Group: %s -> %s\n",
-			u.rename_group->OldName.string,
-			u.rename_group->NewName.string);
+	case SAM_DELTA_ALIAS_MEM:
+		display_alias_mem(hdr_delta->target_rid, &delta->als_mem_info);
 		break;
-#endif
-	case NETR_DELTA_USER:
-		display_account_info(id.rid, u.user);
+	case SAM_DELTA_DOMAIN_INFO:
+		display_domain_info(&delta->domain_info);
 		break;
-#if 0
-	case NETR_DELTA_DELETE_USER:
-		printf("Delete User: %d\n",
-			id.rid);
+	case SAM_DELTA_GROUP_INFO:
+		display_group_info(hdr_delta->target_rid, &delta->group_info);
 		break;
-	case NETR_DELTA_RENAME_USER:
-		printf("Rename user: %s -> %s\n",
-			u.rename_user->OldName.string,
-			u.rename_user->NewName.string);
+		/* The following types are recognised but not handled */
+	case SAM_DELTA_RENAME_GROUP:
+		d_printf("SAM_DELTA_RENAME_GROUP not handled\n");
 		break;
-#endif
-	case NETR_DELTA_GROUP_MEMBER:
-		display_group_mem_info(id.rid, u.group_member);
+	case SAM_DELTA_RENAME_USER:
+		d_printf("SAM_DELTA_RENAME_USER not handled\n");
 		break;
-	case NETR_DELTA_ALIAS:
-		display_alias_info(id.rid, u.alias);
+	case SAM_DELTA_RENAME_ALIAS:
+		d_printf("SAM_DELTA_RENAME_ALIAS not handled\n");
 		break;
-#if 0
-	case NETR_DELTA_DELETE_ALIAS:
-		printf("Delete Alias: %d\n",
-			id.rid);
+	case SAM_DELTA_POLICY_INFO:
+		d_printf("SAM_DELTA_POLICY_INFO not handled\n");
 		break;
-	case NETR_DELTA_RENAME_ALIAS:
-		printf("Rename alias: %s -> %s\n",
-			u.rename_alias->OldName.string,
-			u.rename_alias->NewName.string);
+	case SAM_DELTA_TRUST_DOMS:
+		d_printf("SAM_DELTA_TRUST_DOMS not handled\n");
 		break;
-#endif
-	case NETR_DELTA_ALIAS_MEMBER:
-		display_alias_mem(id.rid, u.alias_member);
+	case SAM_DELTA_PRIVS_INFO:
+		d_printf("SAM_DELTA_PRIVS_INFO not handled\n");
 		break;
-#if 0
-	case NETR_DELTA_POLICY:
-		printf("Policy\n");
+	case SAM_DELTA_SECRET_INFO:
+		d_printf("SAM_DELTA_SECRET_INFO not handled\n");
 		break;
-	case NETR_DELTA_TRUSTED_DOMAIN:
-		printf("Trusted Domain: %s\n",
-			u.trusted_domain->domain_name.string);
+	case SAM_DELTA_DELETE_GROUP:
+		d_printf("SAM_DELTA_DELETE_GROUP not handled\n");
 		break;
-	case NETR_DELTA_DELETE_TRUST:
-		printf("Delete Trust: %d\n",
-			u.delete_trust.unknown);
+	case SAM_DELTA_DELETE_USER:
+		d_printf("SAM_DELTA_DELETE_USER not handled\n");
 		break;
-	case NETR_DELTA_ACCOUNT:
-		printf("Account\n");
+	case SAM_DELTA_MODIFIED_COUNT:
+		d_printf("SAM_DELTA_MODIFIED_COUNT not handled\n");
 		break;
-	case NETR_DELTA_DELETE_ACCOUNT:
-		printf("Delete Account: %d\n",
-			u.delete_account.unknown);
-		break;
-	case NETR_DELTA_SECRET:
-		printf("Secret\n");
-		break;
-	case NETR_DELTA_DELETE_SECRET:
-		printf("Delete Secret: %d\n",
-			u.delete_secret.unknown);
-		break;
-	case NETR_DELTA_DELETE_GROUP2:
-		printf("Delete Group2: %s\n",
-			u.delete_group->account_name);
-		break;
-	case NETR_DELTA_DELETE_USER2:
-		printf("Delete User2: %s\n",
-			u.delete_user->account_name);
-		break;
-	case NETR_DELTA_MODIFY_COUNT:
-		printf("sam sequence update: 0x%016llx\n",
-			(unsigned long long) *u.modified_count);
-		break;
-#endif
-	/* The following types are recognised but not handled */
-	case NETR_DELTA_RENAME_GROUP:
-		d_printf("NETR_DELTA_RENAME_GROUP not handled\n");
-		break;
-	case NETR_DELTA_RENAME_USER:
-		d_printf("NETR_DELTA_RENAME_USER not handled\n");
-		break;
-	case NETR_DELTA_RENAME_ALIAS:
-		d_printf("NETR_DELTA_RENAME_ALIAS not handled\n");
-		break;
-	case NETR_DELTA_POLICY:
-		d_printf("NETR_DELTA_POLICY not handled\n");
-		break;
-	case NETR_DELTA_TRUSTED_DOMAIN:
-		d_printf("NETR_DELTA_TRUSTED_DOMAIN not handled\n");
-		break;
-	case NETR_DELTA_ACCOUNT:
-		d_printf("NETR_DELTA_ACCOUNT not handled\n");
-		break;
-	case NETR_DELTA_SECRET:
-		d_printf("NETR_DELTA_SECRET not handled\n");
-		break;
-	case NETR_DELTA_DELETE_GROUP:
-		d_printf("NETR_DELTA_DELETE_GROUP not handled\n");
-		break;
-	case NETR_DELTA_DELETE_USER:
-		d_printf("NETR_DELTA_DELETE_USER not handled\n");
-		break;
-	case NETR_DELTA_MODIFY_COUNT:
-		d_printf("NETR_DELTA_MODIFY_COUNT not handled\n");
-		break;
-	case NETR_DELTA_DELETE_ALIAS:
-		d_printf("NETR_DELTA_DELETE_ALIAS not handled\n");
-		break;
-	case NETR_DELTA_DELETE_TRUST:
-		d_printf("NETR_DELTA_DELETE_TRUST not handled\n");
-		break;
-	case NETR_DELTA_DELETE_ACCOUNT:
-		d_printf("NETR_DELTA_DELETE_ACCOUNT not handled\n");
-		break;
-	case NETR_DELTA_DELETE_SECRET:
-		d_printf("NETR_DELTA_DELETE_SECRET not handled\n");
-		break;
-	case NETR_DELTA_DELETE_GROUP2:
-		d_printf("NETR_DELTA_DELETE_GROUP2 not handled\n");
-		break;
-	case NETR_DELTA_DELETE_USER2:
-		d_printf("NETR_DELTA_DELETE_USER2 not handled\n");
-		break;
 	default:
-		printf("unknown delta type 0x%02x\n",
-			r->delta_type);
+		d_printf("Unknown delta record type %d\n", hdr_delta->type);
 		break;
 	}
 }
 
-static void dump_database(struct rpc_pipe_client *pipe_hnd,
-			  enum netr_SamDatabaseID database_id)
+static void dump_database(struct rpc_pipe_client *pipe_hnd, uint32 db_type)
 {
+	uint32 sync_context = 0;
         NTSTATUS result;
 	int i;
         TALLOC_CTX *mem_ctx;
-	const char *logon_server = pipe_hnd->cli->desthost;
-	const char *computername = global_myname();
-	struct netr_Authenticator credential;
-	struct netr_Authenticator return_authenticator;
-	uint16_t restart_state = 0;
-	uint32_t sync_context = 0;
+        SAM_DELTA_HDR *hdr_deltas;
+        SAM_DELTA_CTR *deltas;
+        uint32 num_deltas;
 
-	ZERO_STRUCT(return_authenticator);
-
 	if (!(mem_ctx = talloc_init("dump_database"))) {
 		return;
 	}
 
-	switch(database_id) {
+	switch( db_type ) {
 	case SAM_DATABASE_DOMAIN:
 		d_printf("Dumping DOMAIN database\n");
 		break;
@@ -354,58 +204,34 @@
 		d_printf("Dumping PRIVS databases\n");
 		break;
 	default:
-		d_printf("Dumping unknown database type %u\n",
-			database_id);
+		d_printf("Dumping unknown database type %u\n", db_type );
 		break;
 	}
 
 	do {
-		struct netr_DELTA_ENUM_ARRAY *delta_enum_array = NULL;
-
-		netlogon_creds_client_step(pipe_hnd->dc, &credential);
-
-		result = rpccli_netr_DatabaseSync2(pipe_hnd, mem_ctx,
-						   logon_server,
-						   computername,
-						   &credential,
-						   &return_authenticator,
-						   database_id,
-						   restart_state,
-						   &sync_context,
-						   &delta_enum_array,
-						   0xffff);
-
-		/* Check returned credentials. */
-		if (!netlogon_creds_client_check(pipe_hnd->dc,
-						 &return_authenticator.cred)) {
-			DEBUG(0,("credentials chain check failed\n"));
-			return;
-		}
-
-		if (NT_STATUS_IS_ERR(result)) {
+		result = rpccli_netlogon_sam_sync(pipe_hnd, mem_ctx, db_type,
+					       sync_context,
+					       &num_deltas, &hdr_deltas, &deltas);
+		if (!NT_STATUS_IS_OK(result))
 			break;
-		}
 
-		/* Display results */
-		for (i = 0; i < delta_enum_array->num_deltas; i++) {
-			display_sam_entry(&delta_enum_array->delta_enum[i]);
+                for (i = 0; i < num_deltas; i++) {
+			display_sam_entry(&hdr_deltas[i], &deltas[i]);
                 }
-
-		TALLOC_FREE(delta_enum_array);
-
+		sync_context += 1;
 	} while (NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES));
 
 	talloc_destroy(mem_ctx);
 }
 
 /* dump sam database via samsync rpc calls */
-NTSTATUS rpc_samdump_internals(const DOM_SID *domain_sid,
-				const char *domain_name,
+NTSTATUS rpc_samdump_internals(const DOM_SID *domain_sid, 
+				const char *domain_name, 
 				struct cli_state *cli,
 				struct rpc_pipe_client *pipe_hnd,
-				TALLOC_CTX *mem_ctx,
+				TALLOC_CTX *mem_ctx, 
 				int argc,
-				const char **argv)
+				const char **argv) 
 {
 #if 0
 	/* net_rpc.c now always tries to create an schannel pipe.. */
@@ -452,8 +278,7 @@
 		    (!(s1) && (s2)) ||\
 		((s1) && (s2) && (strcmp((s1), (s2)) != 0))
 
-static NTSTATUS sam_account_from_delta(struct samu *account,
-				       struct netr_DELTA_USER *r)
+static NTSTATUS sam_account_from_delta(struct samu *account, SAM_ACCOUNT_INFO *delta)
 {
 	const char *old_string, *new_string;
 	time_t unix_time, stored_time;
@@ -463,14 +288,15 @@
 	/* Username, fullname, home dir, dir drive, logon script, acct
 	   desc, workstations, profile. */
 
-	if (r->account_name.string) {
+	if (delta->hdr_acct_name.buffer) {
 		old_string = pdb_get_nt_username(account);
-		new_string = r->account_name.string;
+		new_string = unistr2_static(&delta->uni_acct_name);
 
 		if (STRING_CHANGED) {
 			pdb_set_nt_username(account, new_string, PDB_CHANGED);
+              
 		}
-
+         
 		/* Unix username is the same - for sanity */
 		old_string = pdb_get_username( account );
 		if (STRING_CHANGED) {
@@ -478,130 +304,127 @@
 		}
 	}
 
-	if (r->full_name.string) {
+	if (delta->hdr_full_name.buffer) {
 		old_string = pdb_get_fullname(account);
-		new_string = r->full_name.string;
+		new_string = unistr2_static(&delta->uni_full_name);
 
 		if (STRING_CHANGED)
 			pdb_set_fullname(account, new_string, PDB_CHANGED);
 	}
 
-	if (r->home_directory.string) {
+	if (delta->hdr_home_dir.buffer) {
 		old_string = pdb_get_homedir(account);
-		new_string = r->home_directory.string;
+		new_string = unistr2_static(&delta->uni_home_dir);
 
 		if (STRING_CHANGED)
 			pdb_set_homedir(account, new_string, PDB_CHANGED);
 	}
 
-	if (r->home_drive.string) {
+	if (delta->hdr_dir_drive.buffer) {
 		old_string = pdb_get_dir_drive(account);
-		new_string = r->home_drive.string;
+		new_string = unistr2_static(&delta->uni_dir_drive);
 
 		if (STRING_CHANGED)
 			pdb_set_dir_drive(account, new_string, PDB_CHANGED);
 	}
 
-	if (r->logon_script.string) {
+	if (delta->hdr_logon_script.buffer) {
 		old_string = pdb_get_logon_script(account);
-		new_string = r->logon_script.string;
+		new_string = unistr2_static(&delta->uni_logon_script);
 
 		if (STRING_CHANGED)
 			pdb_set_logon_script(account, new_string, PDB_CHANGED);
 	}
 
-	if (r->description.string) {
+	if (delta->hdr_acct_desc.buffer) {
 		old_string = pdb_get_acct_desc(account);
-		new_string = r->description.string;
+		new_string = unistr2_static(&delta->uni_acct_desc);
 
 		if (STRING_CHANGED)
 			pdb_set_acct_desc(account, new_string, PDB_CHANGED);
 	}
 
-	if (r->workstations.string) {
+	if (delta->hdr_workstations.buffer) {
 		old_string = pdb_get_workstations(account);
-		new_string = r->workstations.string;
+		new_string = unistr2_static(&delta->uni_workstations);
 
 		if (STRING_CHANGED)
 			pdb_set_workstations(account, new_string, PDB_CHANGED);
 	}
 
-	if (r->profile_path.string) {
+	if (delta->hdr_profile.buffer) {
 		old_string = pdb_get_profile_path(account);
-		new_string = r->profile_path.string;
+		new_string = unistr2_static(&delta->uni_profile);
 
 		if (STRING_CHANGED)
 			pdb_set_profile_path(account, new_string, PDB_CHANGED);
 	}
 
-	if (r->parameters.string) {
+	if (delta->hdr_parameters.buffer) {
 		DATA_BLOB mung;
 		char *newstr;
 		old_string = pdb_get_munged_dial(account);
-		mung.length = r->parameters.length;
-		mung.data = (uint8 *) r->parameters.string;
-		newstr = (mung.length == 0) ? NULL :
-			base64_encode_data_blob(talloc_tos(), mung);
+		mung.length = delta->hdr_parameters.uni_str_len;
+		mung.data = (uint8 *) delta->uni_parameters.buffer;
+		newstr = (mung.length == 0) ? NULL : base64_encode_data_blob(mung);
 
 		if (STRING_CHANGED_NC(old_string, newstr))
 			pdb_set_munged_dial(account, newstr, PDB_CHANGED);
-		TALLOC_FREE(newstr);
+		SAFE_FREE(newstr);
 	}
 
 	/* User and group sid */
-	if (pdb_get_user_rid(account) != r->rid)
-		pdb_set_user_sid_from_rid(account, r->rid, PDB_CHANGED);
-	if (pdb_get_group_rid(account) != r->primary_gid)
-		pdb_set_group_sid_from_rid(account, r->primary_gid, PDB_CHANGED);
+	if (pdb_get_user_rid(account) != delta->user_rid)
+		pdb_set_user_sid_from_rid(account, delta->user_rid, PDB_CHANGED);
+	if (pdb_get_group_rid(account) != delta->group_rid)
+		pdb_set_group_sid_from_rid(account, delta->group_rid, PDB_CHANGED);
 
 	/* Logon and password information */
-	if (!nt_time_is_zero(&r->last_logon)) {
-		unix_time = nt_time_to_unix(r->last_logon);
+	if (!nt_time_is_zero(&delta->logon_time)) {
+		unix_time = nt_time_to_unix(delta->logon_time);
 		stored_time = pdb_get_logon_time(account);
 		if (stored_time != unix_time)
 			pdb_set_logon_time(account, unix_time, PDB_CHANGED);
 	}
 
-	if (!nt_time_is_zero(&r->last_logoff)) {
-		unix_time = nt_time_to_unix(r->last_logoff);
+	if (!nt_time_is_zero(&delta->logoff_time)) {
+		unix_time = nt_time_to_unix(delta->logoff_time);
 		stored_time = pdb_get_logoff_time(account);
 		if (stored_time != unix_time)
 			pdb_set_logoff_time(account, unix_time,PDB_CHANGED);
 	}
 
 	/* Logon Divs */
-	if (pdb_get_logon_divs(account) != r->logon_hours.units_per_week)
-		pdb_set_logon_divs(account, r->logon_hours.units_per_week, PDB_CHANGED);
+	if (pdb_get_logon_divs(account) != delta->logon_divs)
+		pdb_set_logon_divs(account, delta->logon_divs, PDB_CHANGED);
 
-#if 0
-	/* no idea what to do with this one - gd */
 	/* Max Logon Hours */
 	if (delta->unknown1 != pdb_get_unknown_6(account)) {
 		pdb_set_unknown_6(account, delta->unknown1, PDB_CHANGED);
 	}
-#endif
+
 	/* Logon Hours Len */
-	if (r->logon_hours.units_per_week/8 != pdb_get_hours_len(account)) {
-		pdb_set_hours_len(account, r->logon_hours.units_per_week/8, PDB_CHANGED);
+	if (delta->buf_logon_hrs.buf_len != pdb_get_hours_len(account)) {
+		pdb_set_hours_len(account, delta->buf_logon_hrs.buf_len, PDB_CHANGED);
 	}
 
 	/* Logon Hours */
-	if (r->logon_hours.bits) {
-		char oldstr[44], newstr[44];
+	if (delta->buf_logon_hrs.buffer) {
+		pstring oldstr, newstr;
 		pdb_sethexhours(oldstr, pdb_get_hours(account));
-		pdb_sethexhours(newstr, r->logon_hours.bits);
+		pdb_sethexhours(newstr, delta->buf_logon_hrs.buffer);
 		if (!strequal(oldstr, newstr))
-			pdb_set_hours(account, r->logon_hours.bits, PDB_CHANGED);
+			pdb_set_hours(account, (const uint8 *)delta->buf_logon_hrs.buffer, PDB_CHANGED);
 	}
 
-	if (pdb_get_bad_password_count(account) != r->bad_password_count)
-		pdb_set_bad_password_count(account, r->bad_password_count, PDB_CHANGED);
+	if (pdb_get_bad_password_count(account) != delta->bad_pwd_count)
+		pdb_set_bad_password_count(account, delta->bad_pwd_count, PDB_CHANGED);
 
-	if (pdb_get_logon_count(account) != r->logon_count)
-		pdb_set_logon_count(account, r->logon_count, PDB_CHANGED);
+	if (pdb_get_logon_count(account) != delta->logon_count)
+		pdb_set_logon_count(account, delta->logon_count, PDB_CHANGED);
 
-	if (!nt_time_is_zero(&r->last_password_change)) {
-		unix_time = nt_time_to_unix(r->last_password_change);
+	if (!nt_time_is_zero(&delta->pwd_last_set_time)) {
+		unix_time = nt_time_to_unix(delta->pwd_last_set_time);
 		stored_time = pdb_get_pass_last_set_time(account);
 		if (stored_time != unix_time)
 			pdb_set_pass_last_set_time(account, unix_time, PDB_CHANGED);
@@ -610,44 +433,45 @@
 		pdb_set_pass_last_set_time(account, time(NULL), PDB_CHANGED);
 	}
 
-	if (!nt_time_is_zero(&r->acct_expiry)) {
-		unix_time = nt_time_to_unix(r->acct_expiry);
+#if 0
+/*	No kickoff time in the delta? */
+	if (!nt_time_is_zero(&delta->kickoff_time)) {
+		unix_time = nt_time_to_unix(&delta->kickoff_time);
 		stored_time = pdb_get_kickoff_time(account);
 		if (stored_time != unix_time)
 			pdb_set_kickoff_time(account, unix_time, PDB_CHANGED);
 	}
+#endif
 
-	/* Decode hashes from password hash
-	   Note that win2000 may send us all zeros for the hashes if it doesn't
+	/* Decode hashes from password hash 
+	   Note that win2000 may send us all zeros for the hashes if it doesn't 
 	   think this channel is secure enough - don't set the passwords at all
 	   in that case
 	*/
-	if (memcmp(r->ntpassword.hash, zero_buf, 16) != 0) {
-		sam_pwd_hash(r->rid, r->ntpassword.hash, lm_passwd, 0);
+	if (memcmp(delta->pass.buf_lm_pwd, zero_buf, 16) != 0) {
+		sam_pwd_hash(delta->user_rid, delta->pass.buf_lm_pwd, lm_passwd, 0);
 		pdb_set_lanman_passwd(account, lm_passwd, PDB_CHANGED);
 	}
 
-	if (memcmp(r->lmpassword.hash, zero_buf, 16) != 0) {
-		sam_pwd_hash(r->rid, r->lmpassword.hash, nt_passwd, 0);
+	if (memcmp(delta->pass.buf_nt_pwd, zero_buf, 16) != 0) {
+		sam_pwd_hash(delta->user_rid, delta->pass.buf_nt_pwd, nt_passwd, 0);
 		pdb_set_nt_passwd(account, nt_passwd, PDB_CHANGED);
 	}
 
 	/* TODO: account expiry time */
 
-	pdb_set_acct_ctrl(account, r->acct_flags, PDB_CHANGED);
+	pdb_set_acct_ctrl(account, delta->acb_info, PDB_CHANGED);
 
 	pdb_set_domain(account, lp_workgroup(), PDB_CHANGED);
 
 	return NT_STATUS_OK;
 }
 
-static NTSTATUS fetch_account_info(uint32_t rid,
-				   struct netr_DELTA_USER *r)
+static NTSTATUS fetch_account_info(uint32 rid, SAM_ACCOUNT_INFO *delta)
 {
-
 	NTSTATUS nt_ret = NT_STATUS_UNSUCCESSFUL;
 	fstring account;
-	char *add_script = NULL;
+	pstring add_script;
 	struct samu *sam_account=NULL;
 	GROUP_MAP map;
 	struct group *grp;
@@ -656,43 +480,31 @@
 	struct passwd *passwd;
 	fstring sid_string;
 
-	fstrcpy(account, r->account_name.string);
+	fstrcpy(account, unistr2_static(&delta->uni_acct_name));
 	d_printf("Creating account: %s\n", account);
 
 	if ( !(sam_account = samu_new( NULL )) ) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	if (!(passwd = Get_Pwnam_alloc(sam_account, account))) {
+	if (!(passwd = Get_Pwnam(account))) {
 		/* Create appropriate user */
-		if (r->acct_flags & ACB_NORMAL) {
-			add_script = talloc_strdup(sam_account,
-					lp_adduser_script());
-		} else if ( (r->acct_flags & ACB_WSTRUST) ||
-			    (r->acct_flags & ACB_SVRTRUST) ||
-			    (r->acct_flags & ACB_DOMTRUST) ) {
-			add_script = talloc_strdup(sam_account,
-					lp_addmachine_script());
+		if (delta->acb_info & ACB_NORMAL) {
+			pstrcpy(add_script, lp_adduser_script());
+		} else if ( (delta->acb_info & ACB_WSTRUST) ||
+			    (delta->acb_info & ACB_SVRTRUST) ||
+			    (delta->acb_info & ACB_DOMTRUST) ) {
+			pstrcpy(add_script, lp_addmachine_script());
 		} else {
 			DEBUG(1, ("Unknown user type: %s\n",
-				  pdb_encode_acct_ctrl(r->acct_flags, NEW_PW_FORMAT_SPACE_PADDED_LEN)));
+				  pdb_encode_acct_ctrl(delta->acb_info, NEW_PW_FORMAT_SPACE_PADDED_LEN)));
 			nt_ret = NT_STATUS_UNSUCCESSFUL;
 			goto done;
 		}
-		if (!add_script) {
-			nt_ret = NT_STATUS_NO_MEMORY;
-			goto done;
-		}
 		if (*add_script) {
 			int add_ret;
-			add_script = talloc_all_string_sub(sam_account,
-					add_script,
-					"%u",
-					account);
-			if (!add_script) {
-				nt_ret = NT_STATUS_NO_MEMORY;
-				goto done;
-			}
+			all_string_sub(add_script, "%u", account,
+				       sizeof(account));
 			add_ret = smbrun(add_script,NULL);
 			DEBUG(add_ret ? 0 : 1,("fetch_account: Running the command `%s' "
 				 "gave %d\n", add_script, add_ret));
@@ -700,40 +512,37 @@
 				smb_nscd_flush_user_cache();
 			}
 		}
-
+		
 		/* try and find the possible unix account again */
-		if ( !(passwd = Get_Pwnam_alloc(sam_account, account)) ) {
+		if ( !(passwd = Get_Pwnam(account)) ) {
 			d_fprintf(stderr, "Could not create posix account info for '%s'\n", account);
 			nt_ret = NT_STATUS_NO_SUCH_USER;
 			goto done;
 		}
 	}
-
+	
 	sid_copy(&user_sid, get_global_sam_sid());
-	sid_append_rid(&user_sid, r->rid);
+	sid_append_rid(&user_sid, delta->user_rid);
 
-	DEBUG(3, ("Attempting to find SID %s for user %s in the passdb\n",
-		  sid_to_fstring(sid_string, &user_sid), account));
+	DEBUG(3, ("Attempting to find SID %s for user %s in the passdb\n", sid_to_string(sid_string, &user_sid), account));
 	if (!pdb_getsampwsid(sam_account, &user_sid)) {
-		sam_account_from_delta(sam_account, r);
-		DEBUG(3, ("Attempting to add user SID %s for user %s in the passdb\n",
-			  sid_to_fstring(sid_string, &user_sid),
-			  pdb_get_username(sam_account)));
+		sam_account_from_delta(sam_account, delta);
+		DEBUG(3, ("Attempting to add user SID %s for user %s in the passdb\n", 
+			  sid_to_string(sid_string, &user_sid), pdb_get_username(sam_account)));
 		if (!NT_STATUS_IS_OK(pdb_add_sam_account(sam_account))) {
 			DEBUG(1, ("SAM Account for %s failed to be added to the passdb!\n",
 				  account));
-			return NT_STATUS_ACCESS_DENIED;
+			return NT_STATUS_ACCESS_DENIED; 
 		}
 	} else {
-		sam_account_from_delta(sam_account, r);
-		DEBUG(3, ("Attempting to update user SID %s for user %s in the passdb\n",
-			  sid_to_fstring(sid_string, &user_sid),
-			  pdb_get_username(sam_account)));
+		sam_account_from_delta(sam_account, delta);
+		DEBUG(3, ("Attempting to update user SID %s for user %s in the passdb\n", 
+			  sid_to_string(sid_string, &user_sid), pdb_get_username(sam_account)));
 		if (!NT_STATUS_IS_OK(pdb_update_sam_account(sam_account))) {
 			DEBUG(1, ("SAM Account for %s failed to be updated in the passdb!\n",
 				  account));
 			TALLOC_FREE(sam_account);
-			return NT_STATUS_ACCESS_DENIED;
+			return NT_STATUS_ACCESS_DENIED; 
 		}
 	}
 
@@ -749,16 +558,16 @@
 	} else {
 		if (map.gid != passwd->pw_gid) {
 			if (!(grp = getgrgid(map.gid))) {
-				DEBUG(0, ("Could not find unix group %lu for user %s (group SID=%s)\n",
-					  (unsigned long)map.gid, pdb_get_username(sam_account), sid_string_tos(&group_sid)));
+				DEBUG(0, ("Could not find unix group %lu for user %s (group SID=%s)\n", 
+					  (unsigned long)map.gid, pdb_get_username(sam_account), sid_string_static(&group_sid)));
 			} else {
 				smb_set_primary_group(grp->gr_name, pdb_get_username(sam_account));
 			}
 		}
-	}
+	}	
 
 	if ( !passwd ) {
-		DEBUG(1, ("No unix user for this account (%s), cannot adjust mappings\n",
+		DEBUG(1, ("No unix user for this account (%s), cannot adjust mappings\n", 
 			pdb_get_username(sam_account)));
 	}
 
@@ -767,8 +576,7 @@
 	return nt_ret;
 }
 
-static NTSTATUS fetch_group_info(uint32_t rid,
-				 struct netr_DELTA_GROUP *r)
+static NTSTATUS fetch_group_info(uint32 rid, SAM_GROUP_INFO *delta)
 {
 	fstring name;
 	fstring comment;
@@ -776,15 +584,15 @@
 	DOM_SID group_sid;
 	fstring sid_string;
 	GROUP_MAP map;
-	bool insert = True;
+	BOOL insert = True;
 
-	fstrcpy(name, r->group_name.string);
-	fstrcpy(comment, r->description.string);
+	unistr2_to_ascii(name, &delta->uni_grp_name, sizeof(name)-1);
+	unistr2_to_ascii(comment, &delta->uni_grp_desc, sizeof(comment)-1);
 
 	/* add the group to the mapping table */
 	sid_copy(&group_sid, get_global_sam_sid());
 	sid_append_rid(&group_sid, rid);
-	sid_to_fstring(sid_string, &group_sid);
+	sid_to_string(sid_string, &group_sid);
 
 	if (pdb_getgrsid(&map, group_sid)) {
 		if ( map.gid != -1 )
@@ -797,14 +605,14 @@
 
 		/* No group found from mapping, find it from its name. */
 		if ((grp = getgrnam(name)) == NULL) {
-
+		
 			/* No appropriate group found, create one */
-
+			
 			d_printf("Creating unix group: '%s'\n", name);
-
+			
 			if (smb_create_group(name, &gid) != 0)
 				return NT_STATUS_ACCESS_DENIED;
-
+				
 			if ((grp = getgrnam(name)) == NULL)
 				return NT_STATUS_ACCESS_DENIED;
 		}
@@ -814,7 +622,7 @@
 	map.sid = group_sid;
 	map.sid_name_use = SID_NAME_DOM_GRP;
 	fstrcpy(map.nt_name, name);
-	if (r->description.string) {
+	if (delta->hdr_grp_desc.buffer) {
 		fstrcpy(map.comment, comment);
 	} else {
 		fstrcpy(map.comment, "");
@@ -828,8 +636,7 @@
 	return NT_STATUS_OK;
 }
 
-static NTSTATUS fetch_group_mem_info(uint32_t rid,
-				     struct netr_DELTA_GROUP_MEMBER *r)
+static NTSTATUS fetch_group_mem_info(uint32 rid, SAM_GROUP_MEM_INFO *delta)
 {
 	int i;
 	TALLOC_CTX *t = NULL;
@@ -839,7 +646,7 @@
 	GROUP_MAP map;
 	struct group *grp;
 
-	if (r->num_rids == 0) {
+	if (delta->num_members == 0) {
 		return NT_STATUS_OK;
 	}
 
@@ -863,8 +670,8 @@
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	if (r->num_rids) {
-		if ((nt_members = TALLOC_ZERO_ARRAY(t, char *, r->num_rids)) == NULL) {
+	if (delta->num_members) {
+		if ((nt_members = TALLOC_ZERO_ARRAY(t, char *, delta->num_members)) == NULL) {
 			DEBUG(0, ("talloc failed\n"));
 			talloc_free(t);
 			return NT_STATUS_NO_MEMORY;
@@ -873,7 +680,7 @@
 		nt_members = NULL;
 	}
 
-	for (i=0; i < r->num_rids; i++) {
+	for (i=0; i<delta->num_members; i++) {
 		struct samu *member = NULL;
 		DOM_SID member_sid;
 
@@ -883,11 +690,11 @@
 		}
 
 		sid_copy(&member_sid, get_global_sam_sid());
-		sid_append_rid(&member_sid, r->rids[i]);
+		sid_append_rid(&member_sid, delta->rids[i]);
 
 		if (!pdb_getsampwsid(member, &member_sid)) {
 			DEBUG(1, ("Found bogus group member: %d (member_sid=%s group=%s)\n",
-				  r->rids[i], sid_string_tos(&member_sid), grp->gr_name));
+				  delta->rids[i], sid_string_static(&member_sid), grp->gr_name));
 			TALLOC_FREE(member);
 			continue;
 		}
@@ -897,7 +704,7 @@
 			TALLOC_FREE(member);
 			continue;
 		}
-
+		
 		d_printf("%s,", pdb_get_username(member));
 		nt_members[i] = talloc_strdup(t, pdb_get_username(member));
 		TALLOC_FREE(member);
@@ -908,8 +715,8 @@
 	unix_members = grp->gr_mem;
 
 	while (*unix_members) {
-		bool is_nt_member = False;
-		for (i=0; i < r->num_rids; i++) {
+		BOOL is_nt_member = False;
+		for (i=0; i<delta->num_members; i++) {
 			if (nt_members[i] == NULL) {
 				/* This was a primary group */
 				continue;
@@ -929,8 +736,8 @@
 		unix_members += 1;
 	}
 
-	for (i=0; i < r->num_rids; i++) {
-		bool is_unix_member = False;
+	for (i=0; i<delta->num_members; i++) {
+		BOOL is_unix_member = False;
 
 		if (nt_members[i] == NULL) {
 			/* This was the primary group */
@@ -954,13 +761,12 @@
 			smb_add_user_group(grp->gr_name, nt_members[i]);
 		}
 	}
-
+	
 	talloc_destroy(t);
 	return NT_STATUS_OK;
 }
 
-static NTSTATUS fetch_alias_info(uint32_t rid,
-				 struct netr_DELTA_ALIAS *r,
+static NTSTATUS fetch_alias_info(uint32 rid, SAM_ALIAS_INFO *delta,
 				 DOM_SID dom_sid)
 {
 	fstring name;
@@ -969,15 +775,15 @@
 	DOM_SID alias_sid;
 	fstring sid_string;
 	GROUP_MAP map;
-	bool insert = True;
+	BOOL insert = True;
 
-	fstrcpy(name, r->alias_name.string);
-	fstrcpy(comment, r->description.string);
+	unistr2_to_ascii(name, &delta->uni_als_name, sizeof(name)-1);
+	unistr2_to_ascii(comment, &delta->uni_als_desc, sizeof(comment)-1);
 
 	/* Find out whether the group is already mapped */
 	sid_copy(&alias_sid, &dom_sid);
 	sid_append_rid(&alias_sid, rid);
-	sid_to_fstring(sid_string, &alias_sid);
+	sid_to_string(sid_string, &alias_sid);
 
 	if (pdb_getgrsid(&map, alias_sid)) {
 		grp = getgrgid(map.gid);
@@ -1017,52 +823,36 @@
 	return NT_STATUS_OK;
 }
 
-static NTSTATUS fetch_alias_mem(uint32_t rid,
-				struct netr_DELTA_ALIAS_MEMBER *r,
-				DOM_SID dom_sid)
+static NTSTATUS fetch_alias_mem(uint32 rid, SAM_ALIAS_MEM_INFO *delta, DOM_SID dom_sid)
 {
 	return NT_STATUS_OK;
 }
 
-static NTSTATUS fetch_domain_info(uint32_t rid,
-				  struct netr_DELTA_DOMAIN *r)
+static NTSTATUS fetch_domain_info(uint32 rid, SAM_DOMAIN_INFO *delta)
 {
-	time_t u_max_age, u_min_age, u_logout;
+	time_t u_max_age, u_min_age, u_logout, u_lockoutreset, u_lockouttime;
 	NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL;
-	const char *domname;
-	struct netr_AcctLockStr *lockstr = NULL;
-	NTSTATUS status;
-	TALLOC_CTX *mem_ctx = talloc_tos();
+	pstring domname;
 
-	status = pull_netr_AcctLockStr(mem_ctx, &r->account_lockout,
-				       &lockstr);
-	if (!NT_STATUS_IS_OK(status)) {
-		d_printf("failed to pull account lockout string: %s\n",
-			nt_errstr(status));
-	}
+	u_max_age = uint64s_nt_time_to_unix_abs(&delta->max_pwd_age);
+	u_min_age = uint64s_nt_time_to_unix_abs(&delta->min_pwd_age);
+	u_logout = uint64s_nt_time_to_unix_abs(&delta->force_logoff);
+	u_lockoutreset = uint64s_nt_time_to_unix_abs(&delta->account_lockout.reset_count);
+	u_lockouttime = uint64s_nt_time_to_unix_abs(&delta->account_lockout.lockout_duration);
 
-	u_max_age = uint64s_nt_time_to_unix_abs((uint64 *)&r->max_password_age);
-	u_min_age = uint64s_nt_time_to_unix_abs((uint64 *)&r->min_password_age);
-	u_logout = uint64s_nt_time_to_unix_abs((uint64 *)&r->force_logoff_time);
+	unistr2_to_ascii(domname, &delta->uni_dom_name, sizeof(domname) - 1);
 
-	domname = r->domain_name.string;
-	if (!domname) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	/* we don't handle BUILTIN account policies */
+	/* we don't handle BUILTIN account policies */	
 	if (!strequal(domname, get_global_sam_name())) {
 		printf("skipping SAM_DOMAIN_INFO delta for '%s' (is not my domain)\n", domname);
 		return NT_STATUS_OK;
 	}
 
 
-	if (!pdb_set_account_policy(AP_PASSWORD_HISTORY,
-				    r->password_history_length))
+	if (!pdb_set_account_policy(AP_PASSWORD_HISTORY, delta->pwd_history_len))
 		return nt_status;
 
-	if (!pdb_set_account_policy(AP_MIN_PASSWORD_LEN,
-				    r->min_password_length))
+	if (!pdb_set_account_policy(AP_MIN_PASSWORD_LEN, delta->min_pwd_len))
 		return nt_status;
 
 	if (!pdb_set_account_policy(AP_MAX_PASSWORD_AGE, (uint32)u_max_age))
@@ -1074,129 +864,99 @@
 	if (!pdb_set_account_policy(AP_TIME_TO_LOGOUT, (uint32)u_logout))
 		return nt_status;
 
-	if (lockstr) {
-		time_t u_lockoutreset, u_lockouttime;
+	if (!pdb_set_account_policy(AP_BAD_ATTEMPT_LOCKOUT, delta->account_lockout.bad_attempt_lockout))
+		return nt_status;
 
-		u_lockoutreset = uint64s_nt_time_to_unix_abs(&lockstr->reset_count);
-		u_lockouttime = uint64s_nt_time_to_unix_abs((uint64_t *)&lockstr->lockout_duration);
+	if (!pdb_set_account_policy(AP_RESET_COUNT_TIME, (uint32)u_lockoutreset/60))
+		return nt_status;
 
-		if (!pdb_set_account_policy(AP_BAD_ATTEMPT_LOCKOUT,
-					    lockstr->bad_attempt_lockout))
-			return nt_status;
+	if (u_lockouttime != -1)
+		u_lockouttime /= 60;
 
-		if (!pdb_set_account_policy(AP_RESET_COUNT_TIME, (uint32_t)u_lockoutreset/60))
-			return nt_status;
+	if (!pdb_set_account_policy(AP_LOCK_ACCOUNT_DURATION, (uint32)u_lockouttime))
+		return nt_status;
 
-		if (u_lockouttime != -1)
-			u_lockouttime /= 60;
-
-		if (!pdb_set_account_policy(AP_LOCK_ACCOUNT_DURATION, (uint32_t)u_lockouttime))
-			return nt_status;
-	}
-
-	if (!pdb_set_account_policy(AP_USER_MUST_LOGON_TO_CHG_PASS,
-				    r->logon_to_chgpass))
+	if (!pdb_set_account_policy(AP_USER_MUST_LOGON_TO_CHG_PASS, delta->logon_chgpass))
 		return nt_status;
 
 	return NT_STATUS_OK;
 }
 
-static void fetch_sam_entry(struct netr_DELTA_ENUM *r, DOM_SID dom_sid)
+
+static void fetch_sam_entry(SAM_DELTA_HDR *hdr_delta, SAM_DELTA_CTR *delta,
+		DOM_SID dom_sid)
 {
-	switch(r->delta_type) {
-	case NETR_DELTA_USER:
-		fetch_account_info(r->delta_id_union.rid,
-				   r->delta_union.user);
+	switch(hdr_delta->type) {
+	case SAM_DELTA_ACCOUNT_INFO:
+		fetch_account_info(hdr_delta->target_rid,
+				   &delta->account_info);
 		break;
-	case NETR_DELTA_GROUP:
-		fetch_group_info(r->delta_id_union.rid,
-				 r->delta_union.group);
+	case SAM_DELTA_GROUP_INFO:
+		fetch_group_info(hdr_delta->target_rid,
+				 &delta->group_info);
 		break;
-	case NETR_DELTA_GROUP_MEMBER:
-		fetch_group_mem_info(r->delta_id_union.rid,
-				     r->delta_union.group_member);
+	case SAM_DELTA_GROUP_MEM:
+		fetch_group_mem_info(hdr_delta->target_rid,
+				     &delta->grp_mem_info);
 		break;
-	case NETR_DELTA_ALIAS:
-		fetch_alias_info(r->delta_id_union.rid,
-				 r->delta_union.alias,
-				 dom_sid);
+	case SAM_DELTA_ALIAS_INFO:
+		fetch_alias_info(hdr_delta->target_rid,
+				 &delta->alias_info, dom_sid);
 		break;
-	case NETR_DELTA_ALIAS_MEMBER:
-		fetch_alias_mem(r->delta_id_union.rid,
-				r->delta_union.alias_member,
-				dom_sid);
+	case SAM_DELTA_ALIAS_MEM:
+		fetch_alias_mem(hdr_delta->target_rid,
+				&delta->als_mem_info, dom_sid);
 		break;
-	case NETR_DELTA_DOMAIN:
-		fetch_domain_info(r->delta_id_union.rid,
-				  r->delta_union.domain);
+	case SAM_DELTA_DOMAIN_INFO:
+		fetch_domain_info(hdr_delta->target_rid,
+				&delta->domain_info);
 		break;
 	/* The following types are recognised but not handled */
-	case NETR_DELTA_RENAME_GROUP:
-		d_printf("NETR_DELTA_RENAME_GROUP not handled\n");
+	case SAM_DELTA_RENAME_GROUP:
+		d_printf("SAM_DELTA_RENAME_GROUP not handled\n");
 		break;
-	case NETR_DELTA_RENAME_USER:
-		d_printf("NETR_DELTA_RENAME_USER not handled\n");
+	case SAM_DELTA_RENAME_USER:
+		d_printf("SAM_DELTA_RENAME_USER not handled\n");
 		break;
-	case NETR_DELTA_RENAME_ALIAS:
-		d_printf("NETR_DELTA_RENAME_ALIAS not handled\n");
+	case SAM_DELTA_RENAME_ALIAS:
+		d_printf("SAM_DELTA_RENAME_ALIAS not handled\n");
 		break;
-	case NETR_DELTA_POLICY:
-		d_printf("NETR_DELTA_POLICY not handled\n");
+	case SAM_DELTA_POLICY_INFO:
+		d_printf("SAM_DELTA_POLICY_INFO not handled\n");
 		break;
-	case NETR_DELTA_TRUSTED_DOMAIN:
-		d_printf("NETR_DELTA_TRUSTED_DOMAIN not handled\n");
+	case SAM_DELTA_TRUST_DOMS:
+		d_printf("SAM_DELTA_TRUST_DOMS not handled\n");
 		break;
-	case NETR_DELTA_ACCOUNT:
-		d_printf("NETR_DELTA_ACCOUNT not handled\n");
+	case SAM_DELTA_PRIVS_INFO:
+		d_printf("SAM_DELTA_PRIVS_INFO not handled\n");
 		break;
-	case NETR_DELTA_SECRET:
-		d_printf("NETR_DELTA_SECRET not handled\n");
+	case SAM_DELTA_SECRET_INFO:
+		d_printf("SAM_DELTA_SECRET_INFO not handled\n");
 		break;
-	case NETR_DELTA_DELETE_GROUP:
-		d_printf("NETR_DELTA_DELETE_GROUP not handled\n");
+	case SAM_DELTA_DELETE_GROUP:
+		d_printf("SAM_DELTA_DELETE_GROUP not handled\n");
 		break;
-	case NETR_DELTA_DELETE_USER:
-		d_printf("NETR_DELTA_DELETE_USER not handled\n");
+	case SAM_DELTA_DELETE_USER:
+		d_printf("SAM_DELTA_DELETE_USER not handled\n");
 		break;
-	case NETR_DELTA_MODIFY_COUNT:
-		d_printf("NETR_DELTA_MODIFY_COUNT not handled\n");
+	case SAM_DELTA_MODIFIED_COUNT:
+		d_printf("SAM_DELTA_MODIFIED_COUNT not handled\n");
 		break;
-	case NETR_DELTA_DELETE_ALIAS:
-		d_printf("NETR_DELTA_DELETE_ALIAS not handled\n");
-		break;
-	case NETR_DELTA_DELETE_TRUST:
-		d_printf("NETR_DELTA_DELETE_TRUST not handled\n");
-		break;
-	case NETR_DELTA_DELETE_ACCOUNT:
-		d_printf("NETR_DELTA_DELETE_ACCOUNT not handled\n");
-		break;
-	case NETR_DELTA_DELETE_SECRET:
-		d_printf("NETR_DELTA_DELETE_SECRET not handled\n");
-		break;
-	case NETR_DELTA_DELETE_GROUP2:
-		d_printf("NETR_DELTA_DELETE_GROUP2 not handled\n");
-		break;
-	case NETR_DELTA_DELETE_USER2:
-		d_printf("NETR_DELTA_DELETE_USER2 not handled\n");
-		break;
 	default:
-		d_printf("Unknown delta record type %d\n", r->delta_type);
+		d_printf("Unknown delta record type %d\n", hdr_delta->type);
 		break;
 	}
 }
 
 static NTSTATUS fetch_database(struct rpc_pipe_client *pipe_hnd, uint32 db_type, DOM_SID dom_sid)
 {
+	uint32 sync_context = 0;
         NTSTATUS result;
 	int i;
         TALLOC_CTX *mem_ctx;
-	const char *logon_server = pipe_hnd->cli->desthost;
-	const char *computername = global_myname();
-	struct netr_Authenticator credential;
-	struct netr_Authenticator return_authenticator;
-	enum netr_SamDatabaseID database_id = db_type;
-	uint16_t restart_state = 0;
-	uint32_t sync_context = 0;
+        SAM_DELTA_HDR *hdr_deltas;
+        SAM_DELTA_CTR *deltas;
+        uint32 num_deltas;
 
 	if (!(mem_ctx = talloc_init("fetch_database")))
 		return NT_STATUS_NO_MEMORY;
@@ -1217,36 +977,20 @@
 	}
 
 	do {
-		struct netr_DELTA_ENUM_ARRAY *delta_enum_array = NULL;
+		result = rpccli_netlogon_sam_sync(pipe_hnd, mem_ctx,
+					       db_type, sync_context,
+					       &num_deltas,
+					       &hdr_deltas, &deltas);
 
-		netlogon_creds_client_step(pipe_hnd->dc, &credential);
+		if (NT_STATUS_IS_OK(result) ||
+		    NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES)) {
+			for (i = 0; i < num_deltas; i++) {
+				fetch_sam_entry(&hdr_deltas[i], &deltas[i], dom_sid);
+			}
+		} else
+			return result;
 
-		result = rpccli_netr_DatabaseSync2(pipe_hnd, mem_ctx,
-						   logon_server,
-						   computername,
-						   &credential,
-						   &return_authenticator,
-						   database_id,
-						   restart_state,
-						   &sync_context,
-						   &delta_enum_array,
-						   0xffff);
-
-		/* Check returned credentials. */
-		if (!netlogon_creds_client_check(pipe_hnd->dc,
-						 &return_authenticator.cred)) {
-			DEBUG(0,("credentials chain check failed\n"));
-			return NT_STATUS_ACCESS_DENIED;
-		}
-
-		if (NT_STATUS_IS_ERR(result)) {
-			break;
-		}
-
-		for (i = 0; i < delta_enum_array->num_deltas; i++) {
-			fetch_sam_entry(&delta_enum_array->delta_enum[i], dom_sid);
-		}
-
+		sync_context += 1;
 	} while (NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES));
 
 	talloc_destroy(mem_ctx);
@@ -1254,7 +998,7 @@
 	return result;
 }
 
-static NTSTATUS populate_ldap_for_ldif(fstring sid, const char *suffix, const char
+static NTSTATUS populate_ldap_for_ldif(fstring sid, const char *suffix, const char 
 		       *builtin_sid, FILE *add_fd)
 {
 	const char *user_suffix, *group_suffix, *machine_suffix, *idmap_suffix;
@@ -1286,7 +1030,7 @@
 		SAFE_FREE(suffix_attr);
 		return NT_STATUS_NO_MEMORY;
 	}
-	/* If it exists and is distinct from other containers,
+	/* If it exists and is distinct from other containers, 
 	   Write the Users entity */
 	if (*user_suffix && strcmp(user_suffix, suffix)) {
 		user_attr = sstring_sub(lp_ldap_user_suffix(), '=', ',');
@@ -1305,7 +1049,7 @@
 		SAFE_FREE(user_attr);
 		return NT_STATUS_NO_MEMORY;
 	}
-	/* If it exists and is distinct from other containers,
+	/* If it exists and is distinct from other containers, 
 	   Write the Groups entity */
 	if (*group_suffix && strcmp(group_suffix, suffix)) {
 		group_attr = sstring_sub(lp_ldap_group_suffix(), '=', ',');
@@ -1317,7 +1061,7 @@
 		fflush(add_fd);
 	}
 
-	/* If it exists and is distinct from other containers,
+	/* If it exists and is distinct from other containers, 
 	   Write the Computers entity */
 	machine_suffix = lp_ldap_machine_suffix();
 	if (machine_suffix == NULL) {
@@ -1341,7 +1085,7 @@
 		fflush(add_fd);
 	}
 
-	/* If it exists and is distinct from other containers,
+	/* If it exists and is distinct from other containers, 
 	   Write the IdMap entity */
 	idmap_suffix = lp_ldap_idmap_suffix();
 	if (idmap_suffix == NULL) {
@@ -1377,7 +1121,7 @@
 	fprintf(add_fd, "\n");
 	fflush(add_fd);
 
-	/* Write the Domain Admins entity */
+	/* Write the Domain Admins entity */ 
 	fprintf(add_fd, "# Domain Admins, %s, %s\n", group_attr,
 		suffix);
 	fprintf(add_fd, "dn: cn=Domain Admins,ou=%s,%s\n", group_attr,
@@ -1394,7 +1138,7 @@
 	fprintf(add_fd, "\n");
 	fflush(add_fd);
 
-	/* Write the Domain Users entity */
+	/* Write the Domain Users entity */ 
 	fprintf(add_fd, "# Domain Users, %s, %s\n", group_attr,
 		suffix);
 	fprintf(add_fd, "dn: cn=Domain Users,ou=%s,%s\n", group_attr,
@@ -1410,7 +1154,7 @@
 	fprintf(add_fd, "\n");
 	fflush(add_fd);
 
-	/* Write the Domain Guests entity */
+	/* Write the Domain Guests entity */ 
 	fprintf(add_fd, "# Domain Guests, %s, %s\n", group_attr,
 		suffix);
 	fprintf(add_fd, "dn: cn=Domain Guests,ou=%s,%s\n", group_attr,
@@ -1511,7 +1255,7 @@
 	return NT_STATUS_OK;
 }
 
-static NTSTATUS map_populate_groups(GROUPMAP *groupmap, ACCOUNTMAP *accountmap, fstring sid,
+static NTSTATUS map_populate_groups(GROUPMAP *groupmap, ACCOUNTMAP *accountmap, fstring sid, 
 		    const char *suffix, const char *builtin_sid)
 {
 	char *group_attr = sstring_sub(lp_ldap_group_suffix(), '=', ',');
@@ -1519,91 +1263,67 @@
 	/* Map the groups created by populate_ldap_for_ldif */
 	groupmap[0].rid = 512;
 	groupmap[0].gidNumber = 512;
-	snprintf(groupmap[0].sambaSID, sizeof(groupmap[0].sambaSID),
-			"%s-512", sid);
-	snprintf(groupmap[0].group_dn, sizeof(groupmap[0].group_dn),
-			"cn=Domain Admins,ou=%s,%s",
-			group_attr, suffix);
+	pstr_sprintf(groupmap[0].sambaSID, "%s-512", sid);
+	pstr_sprintf(groupmap[0].group_dn, "cn=Domain Admins,ou=%s,%s", 
+                     group_attr, suffix);
 	accountmap[0].rid = 512;
-	snprintf(accountmap[0].cn, sizeof(accountmap[0].cn),
-			"%s", "Domain Admins");
+	pstr_sprintf(accountmap[0].cn, "%s", "Domain Admins");
 
 	groupmap[1].rid = 513;
 	groupmap[1].gidNumber = 513;
-	snprintf(groupmap[1].sambaSID, sizeof(groupmap[1].sambaSID),
-			"%s-513", sid);
-	snprintf(groupmap[1].group_dn, sizeof(groupmap[1].group_dn),
-			"cn=Domain Users,ou=%s,%s",
-			group_attr, suffix);
+	pstr_sprintf(groupmap[1].sambaSID, "%s-513", sid);
+	pstr_sprintf(groupmap[1].group_dn, "cn=Domain Users,ou=%s,%s", 
+                     group_attr, suffix);
 	accountmap[1].rid = 513;
-	snprintf(accountmap[1].cn, sizeof(accountmap[1].cn),
-			"%s", "Domain Users");
+	pstr_sprintf(accountmap[1].cn, "%s", "Domain Users");
 
 	groupmap[2].rid = 514;
 	groupmap[2].gidNumber = 514;
-	snprintf(groupmap[2].sambaSID, sizeof(groupmap[2].sambaSID),
-			"%s-514", sid);
-	snprintf(groupmap[2].group_dn, sizeof(groupmap[2].group_dn),
-			"cn=Domain Guests,ou=%s,%s",
-			group_attr, suffix);
+	pstr_sprintf(groupmap[2].sambaSID, "%s-514", sid);
+	pstr_sprintf(groupmap[2].group_dn, "cn=Domain Guests,ou=%s,%s", 
+                     group_attr, suffix);
 	accountmap[2].rid = 514;
-	snprintf(accountmap[2].cn, sizeof(accountmap[2].cn),
-			"%s", "Domain Guests");
+	pstr_sprintf(accountmap[2].cn, "%s", "Domain Guests");
 
 	groupmap[3].rid = 515;
 	groupmap[3].gidNumber = 515;
-	snprintf(groupmap[3].sambaSID, sizeof(groupmap[3].sambaSID),
-			"%s-515", sid);
-	snprintf(groupmap[3].group_dn, sizeof(groupmap[3].group_dn),
-			"cn=Domain Computers,ou=%s,%s",
-			group_attr, suffix);
+	pstr_sprintf(groupmap[3].sambaSID, "%s-515", sid);
+	pstr_sprintf(groupmap[3].group_dn, "cn=Domain Computers,ou=%s,%s",
+                     group_attr, suffix);
 	accountmap[3].rid = 515;
-	snprintf(accountmap[3].cn, sizeof(accountmap[3].cn),
-			"%s", "Domain Computers");
+	pstr_sprintf(accountmap[3].cn, "%s", "Domain Computers");
 
 	groupmap[4].rid = 544;
 	groupmap[4].gidNumber = 544;
-	snprintf(groupmap[4].sambaSID, sizeof(groupmap[4].sambaSID),
-			"%s-544", builtin_sid);
-	snprintf(groupmap[4].group_dn, sizeof(groupmap[4].group_dn),
-			"cn=Administrators,ou=%s,%s",
-			group_attr, suffix);
+	pstr_sprintf(groupmap[4].sambaSID, "%s-544", builtin_sid);
+	pstr_sprintf(groupmap[4].group_dn, "cn=Administrators,ou=%s,%s",
+                     group_attr, suffix);
 	accountmap[4].rid = 515;
-	snprintf(accountmap[4].cn, sizeof(accountmap[4].cn),
-			"%s", "Administrators");
+	pstr_sprintf(accountmap[4].cn, "%s", "Administrators");
 
 	groupmap[5].rid = 550;
 	groupmap[5].gidNumber = 550;
-	snprintf(groupmap[5].sambaSID, sizeof(groupmap[5].sambaSID),
-			"%s-550", builtin_sid);
-	snprintf(groupmap[5].group_dn, sizeof(groupmap[5].group_dn),
-			"cn=Print Operators,ou=%s,%s",
-			group_attr, suffix);
+	pstr_sprintf(groupmap[5].sambaSID, "%s-550", builtin_sid);
+	pstr_sprintf(groupmap[5].group_dn, "cn=Print Operators,ou=%s,%s",
+                     group_attr, suffix);
 	accountmap[5].rid = 550;
-	snprintf(accountmap[5].cn, sizeof(accountmap[5].cn),
-			"%s", "Print Operators");
+	pstr_sprintf(accountmap[5].cn, "%s", "Print Operators");
 
 	groupmap[6].rid = 551;
 	groupmap[6].gidNumber = 551;
-	snprintf(groupmap[6].sambaSID, sizeof(groupmap[6].sambaSID),
-			"%s-551", builtin_sid);
-	snprintf(groupmap[6].group_dn, sizeof(groupmap[6].group_dn),
-			"cn=Backup Operators,ou=%s,%s",
-			group_attr, suffix);
+	pstr_sprintf(groupmap[6].sambaSID, "%s-551", builtin_sid);
+	pstr_sprintf(groupmap[6].group_dn, "cn=Backup Operators,ou=%s,%s",
+                     group_attr, suffix);
 	accountmap[6].rid = 551;
-	snprintf(accountmap[6].cn, sizeof(accountmap[6].cn),
-			"%s", "Backup Operators");
+	pstr_sprintf(accountmap[6].cn, "%s", "Backup Operators");
 
 	groupmap[7].rid = 552;
 	groupmap[7].gidNumber = 552;
-	snprintf(groupmap[7].sambaSID, sizeof(groupmap[7].sambaSID),
-			"%s-552", builtin_sid);
-	snprintf(groupmap[7].group_dn, sizeof(groupmap[7].group_dn),
-			"cn=Replicators,ou=%s,%s",
-			group_attr, suffix);
+	pstr_sprintf(groupmap[7].sambaSID, "%s-552", builtin_sid);
+	pstr_sprintf(groupmap[7].group_dn, "cn=Replicators,ou=%s,%s",
+		     group_attr, suffix);
 	accountmap[7].rid = 551;
-	snprintf(accountmap[7].cn, sizeof(accountmap[7].cn),
-			"%s", "Replicators");
+	pstr_sprintf(accountmap[7].cn, "%s", "Replicators");
 	SAFE_FREE(group_attr);
 	return NT_STATUS_OK;
 }
@@ -1619,7 +1339,7 @@
 	va_list ap;
 	char *value, *p, *base64;
 	DATA_BLOB base64_blob;
-	bool do_base64 = False;
+	BOOL do_base64 = False;
 	int res;
 
 	va_start(ap, fmt);
@@ -1636,7 +1356,7 @@
 	}
 
 	if (!do_base64) {
-		bool only_whitespace = True;
+		BOOL only_whitespace = True;
 		for (p=value; *p; p++) {
 			/*
 			 * I know that this not multibyte safe, but we break
@@ -1661,15 +1381,16 @@
 	base64_blob.data = (unsigned char *)value;
 	base64_blob.length = strlen(value);
 
-	base64 = base64_encode_data_blob(value, base64_blob);
+	base64 = base64_encode_data_blob(base64_blob);
 	SMB_ASSERT(base64 != NULL);
 
 	res = fprintf(add_fd, "%s:: %s\n", attr_name, base64);
 	TALLOC_FREE(value);
+	SAFE_FREE(base64);
 	return res;
 }
 
-static NTSTATUS fetch_group_info_to_ldif(struct netr_DELTA_GROUP *r, GROUPMAP *groupmap,
+static NTSTATUS fetch_group_info_to_ldif(SAM_DELTA_CTR *delta, GROUPMAP *groupmap,
 			 FILE *add_fd, fstring sid, char *suffix)
 {
 	fstring groupname;
@@ -1677,7 +1398,9 @@
 	char *group_attr = sstring_sub(lp_ldap_group_suffix(), '=', ',');
 
 	/* Get the group name */
-	fstrcpy(groupname, r->group_name.string);
+	unistr2_to_ascii(groupname, 
+	  		 &(delta->group_info.uni_grp_name),
+			 sizeof(groupname)-1);
 
 	/* Set up the group type (always 2 for group info) */
 	grouptype = 2;
@@ -1699,12 +1422,11 @@
 	}
 
 	/* Map the group rid, gid, and dn */
-	g_rid = r->rid;
+	g_rid = delta->group_info.gid.g_rid;
 	groupmap->rid = g_rid;
 	groupmap->gidNumber = ldif_gid;
-	snprintf(groupmap->sambaSID, sizeof(groupmap->sambaSID),
-			"%s-%d", sid, g_rid);
-	snprintf(groupmap->group_dn, sizeof(groupmap->group_dn),
+	pstr_sprintf(groupmap->sambaSID, "%s-%d", sid, g_rid);
+	pstr_sprintf(groupmap->group_dn, 
 		     "cn=%s,ou=%s,%s", groupname, group_attr, suffix);
 
 	/* Write the data to the temporary add ldif file */
@@ -1727,7 +1449,7 @@
 	return NT_STATUS_OK;
 }
 
-static NTSTATUS fetch_account_info_to_ldif(struct netr_DELTA_USER *r,
+static NTSTATUS fetch_account_info_to_ldif(SAM_DELTA_CTR *delta,
 					   GROUPMAP *groupmap,
 					   ACCOUNTMAP *accountmap,
 					   FILE *add_fd,
@@ -1747,80 +1469,95 @@
 	int i;
 
 	/* Get the username */
-	fstrcpy(username, r->account_name.string);
+	unistr2_to_ascii(username, 
+			 &(delta->account_info.uni_acct_name),
+			 sizeof(username)-1);
 
 	/* Get the rid */
-	rid = r->rid;
+	rid = delta->account_info.user_rid;
 
 	/* Map the rid and username for group member info later */
 	accountmap->rid = rid;
-	snprintf(accountmap->cn, sizeof(accountmap->cn), "%s", username);
+	pstr_sprintf(accountmap->cn, "%s", username);
 
 	/* Get the home directory */
-	if (r->acct_flags & ACB_NORMAL) {
-		fstrcpy(homedir, r->home_directory.string);
+	if (delta->account_info.acb_info & ACB_NORMAL) {
+		unistr2_to_ascii(homedir, &(delta->account_info.uni_home_dir),
+				 sizeof(homedir)-1);
 		if (!*homedir) {
-			snprintf(homedir, sizeof(homedir), "/home/%s", username);
+			pstr_sprintf(homedir, "/home/%s", username);
 		} else {
-			snprintf(homedir, sizeof(homedir), "/nobodyshomedir");
+			pstr_sprintf(homedir, "/nobodyshomedir");
 		}
 		ou = lp_ldap_user_suffix();
 	} else {
 		ou = lp_ldap_machine_suffix();
-		snprintf(homedir, sizeof(homedir), "/machinehomedir");
+		pstr_sprintf(homedir, "/machinehomedir");
 	}
 
         /* Get the logon script */
-	fstrcpy(logonscript, r->logon_script.string);
+        unistr2_to_ascii(logonscript, &(delta->account_info.uni_logon_script),
+			 sizeof(logonscript)-1);
 
         /* Get the home drive */
-	fstrcpy(homedrive, r->home_drive.string);
+        unistr2_to_ascii(homedrive, &(delta->account_info.uni_dir_drive),
+			 sizeof(homedrive)-1);
 
         /* Get the home path */
-	fstrcpy(homepath, r->home_directory.string);
+        unistr2_to_ascii(homepath, &(delta->account_info.uni_home_dir),
+			 sizeof(homepath)-1);
 
 	/* Get the description */
-	fstrcpy(description, r->description.string);
+	unistr2_to_ascii(description, &(delta->account_info.uni_acct_desc),
+			 sizeof(description)-1);
 
 	/* Get the display name */
-	fstrcpy(fullname, r->full_name.string);
+	unistr2_to_ascii(fullname, &(delta->account_info.uni_full_name),
+			 sizeof(fullname)-1);
 
 	/* Get the profile path */
-	fstrcpy(profilepath, r->profile_path.string);
+	unistr2_to_ascii(profilepath, &(delta->account_info.uni_profile),
+			 sizeof(profilepath)-1);
 
 	/* Get lm and nt password data */
-	if (memcmp(r->lmpassword.hash, zero_buf, 16) != 0) {
-		sam_pwd_hash(r->rid, r->lmpassword.hash, lm_passwd, 0);
-		pdb_sethexpwd(hex_lm_passwd, lm_passwd, r->acct_flags);
+	if (memcmp(delta->account_info.pass.buf_lm_pwd, zero_buf, 16) != 0) {
+		sam_pwd_hash(delta->account_info.user_rid, 
+			     delta->account_info.pass.buf_lm_pwd, 
+			     lm_passwd, 0);
+		pdb_sethexpwd(hex_lm_passwd, lm_passwd, 
+			      delta->account_info.acb_info);
 	} else {
 		pdb_sethexpwd(hex_lm_passwd, NULL, 0);
 	}
-	if (memcmp(r->ntpassword.hash, zero_buf, 16) != 0) {
-		sam_pwd_hash(r->rid, r->ntpassword.hash, nt_passwd, 0);
-		pdb_sethexpwd(hex_nt_passwd, nt_passwd, r->acct_flags);
+	if (memcmp(delta->account_info.pass.buf_nt_pwd, zero_buf, 16) != 0) {
+		sam_pwd_hash(delta->account_info.user_rid, 
+			     delta->account_info.pass.buf_nt_pwd, 
+			     nt_passwd, 0);
+		pdb_sethexpwd(hex_nt_passwd, nt_passwd, 
+			      delta->account_info.acb_info);
 	} else {
 		pdb_sethexpwd(hex_nt_passwd, NULL, 0);
 	}
-	unix_time = nt_time_to_unix(r->last_password_change);
+	unix_time = nt_time_to_unix(delta->account_info.pwd_last_set_time);
 
 	/* Increment the uid for the new user */
 	ldif_uid++;
 
 	/* Set up group id and sambaSID for the user */
-	group_rid = r->primary_gid;
+	group_rid = delta->account_info.group_rid;
 	for (i=0; i<alloced; i++) {
 		if (groupmap[i].rid == group_rid) break;
 	}
 	if (i == alloced){
-		DEBUG(1, ("Could not find rid %d in groupmap array\n",
+		DEBUG(1, ("Could not find rid %d in groupmap array\n", 
 			  group_rid));
 		return NT_STATUS_UNSUCCESSFUL;
 	}
 	gidNumber = groupmap[i].gidNumber;
-	snprintf(sambaSID, sizeof(sambaSID), groupmap[i].sambaSID);
+	pstr_sprintf(sambaSID, groupmap[i].sambaSID);
 
 	/* Set up sambaAcctFlags */
-	flags = pdb_encode_acct_ctrl(r->acct_flags,
+	flags = pdb_encode_acct_ctrl(delta->account_info.acb_info,
 				     NEW_PW_FORMAT_SPACE_PADDED_LEN);
 
 	/* Add the user to the temporary add ldif file */
@@ -1847,8 +1584,8 @@
                 fprintf_attr(add_fd, "sambaHomeDrive", "%s", homedrive);
         if (*logonscript)
                 fprintf_attr(add_fd, "sambaLogonScript", "%s", logonscript);
-	fprintf(add_fd, "loginShell: %s\n",
-		((r->acct_flags & ACB_NORMAL) ?
+	fprintf(add_fd, "loginShell: %s\n", 
+		((delta->account_info.acb_info & ACB_NORMAL) ?
 		 "/bin/bash" : "/bin/false"));
 	fprintf(add_fd, "gecos: System User\n");
 	if (*description)
@@ -1872,10 +1609,10 @@
 	return NT_STATUS_OK;
 }
 
-static NTSTATUS fetch_alias_info_to_ldif(struct netr_DELTA_ALIAS *r,
+static NTSTATUS fetch_alias_info_to_ldif(SAM_DELTA_CTR *delta,
 					 GROUPMAP *groupmap,
 					 FILE *add_fd, fstring sid,
-					 char *suffix,
+					 char *suffix, 
 					 unsigned db_type)
 {
 	fstring aliasname, description;
@@ -1883,10 +1620,12 @@
 	char *group_attr = sstring_sub(lp_ldap_group_suffix(), '=', ',');
 
 	/* Get the alias name */
-	fstrcpy(aliasname, r->alias_name.string);
+	unistr2_to_ascii(aliasname, &(delta->alias_info.uni_als_name),
+			 sizeof(aliasname)-1);
 
 	/* Get the alias description */
-	fstrcpy(description, r->description.string);
+	unistr2_to_ascii(description, &(delta->alias_info.uni_als_desc),
+			 sizeof(description)-1);
 
 	/* Set up the group type */
 	switch (db_type) {
@@ -1903,7 +1642,7 @@
 
 	/*
 	  These groups are entered by populate_ldap_for_ldif
-	  Note that populate creates a group called Relicators,
+	  Note that populate creates a group called Relicators, 
 	  but NT returns a group called Replicator
 	*/
 	if (strcmp(aliasname, "Domain Admins") == 0 ||
@@ -1922,10 +1661,9 @@
 	}
 
 	/* Map the group rid and gid */
-	g_rid = r->rid;
+	g_rid = delta->group_info.gid.g_rid;
 	groupmap->gidNumber = ldif_gid;
-	snprintf(groupmap->sambaSID, sizeof(groupmap->sambaSID),
-			"%s-%d", sid, g_rid);
+	pstr_sprintf(groupmap->sambaSID, "%s-%d", sid, g_rid);
 
 	/* Write the data to the temporary add ldif file */
 	fprintf(add_fd, "# %s, %s, %s\n", aliasname, group_attr,
@@ -1949,10 +1687,10 @@
 	return NT_STATUS_OK;
 }
 
-static NTSTATUS fetch_groupmem_info_to_ldif(struct netr_DELTA_GROUP_MEMBER *r,
-					    uint32_t id_rid,
+static NTSTATUS fetch_groupmem_info_to_ldif(SAM_DELTA_CTR *delta,
+					    SAM_DELTA_HDR *hdr_delta,
 					    GROUPMAP *groupmap,
-					    ACCOUNTMAP *accountmap,
+					    ACCOUNTMAP *accountmap, 
 					    FILE *mod_fd, int alloced)
 {
 	fstring group_dn;
@@ -1960,22 +1698,22 @@
 	int i, j, k;
 
 	/* Get the dn for the group */
-	if (r->num_rids > 0) {
-		group_rid = id_rid;
+	if (delta->grp_mem_info.num_members > 0) {
+		group_rid = hdr_delta->target_rid;
 		for (j=0; j<alloced; j++) {
 			if (groupmap[j].rid == group_rid) break;
 		}
 		if (j == alloced){
-			DEBUG(1, ("Could not find rid %d in groupmap array\n",
+			DEBUG(1, ("Could not find rid %d in groupmap array\n", 
 				  group_rid));
 			return NT_STATUS_UNSUCCESSFUL;
 		}
-		snprintf(group_dn, sizeof(group_dn), "%s", groupmap[j].group_dn);
+		pstr_sprintf(group_dn, "%s", groupmap[j].group_dn);
 		fprintf(mod_fd, "dn: %s\n", group_dn);
 
 		/* Get the cn for each member */
-		for (i=0; i < r->num_rids; i++) {
-			rid = r->rids[i];
+		for (i=0; i<delta->grp_mem_info.num_members; i++) {
+			rid = delta->grp_mem_info.rids[i];
 			for (k=0; k<alloced; k++) {
 				if (accountmap[k].rid == rid) break;
 			}
@@ -2005,19 +1743,15 @@
 	const char *add_template = "/tmp/add.ldif.XXXXXX";
 	const char *mod_template = "/tmp/mod.ldif.XXXXXX";
 	fstring sid, domainname;
+	uint32 sync_context = 0;
 	NTSTATUS ret = NT_STATUS_OK, result;
 	int k;
 	TALLOC_CTX *mem_ctx;
+	SAM_DELTA_HDR *hdr_deltas;
+	SAM_DELTA_CTR *deltas;
 	uint32 num_deltas;
 	FILE *add_file = NULL, *mod_file = NULL, *ldif_file = NULL;
 	int num_alloced = 0, g_index = 0, a_index = 0;
-	const char *logon_server = pipe_hnd->cli->desthost;
-	const char *computername = global_myname();
-	struct netr_Authenticator credential;
-	struct netr_Authenticator return_authenticator;
-	enum netr_SamDatabaseID database_id = db_type;
-	uint16_t restart_state = 0;
-	uint32_t sync_context = 0;
 
 	/* Set up array for mapping accounts to groups */
 	/* Array element is the group rid */
@@ -2025,7 +1759,7 @@
 
 	/* Set up array for mapping account rid's to cn's */
 	/* Array element is the account rid */
-	ACCOUNTMAP *accountmap = NULL;
+	ACCOUNTMAP *accountmap = NULL; 
 
 	if (!(mem_ctx = talloc_init("fetch_database"))) {
 		return NT_STATUS_NO_MEMORY;
@@ -2061,10 +1795,10 @@
 		DEBUG(1, ("Could not open %s\n", mod_name));
 		ret = NT_STATUS_UNSUCCESSFUL;
 		goto done;
-	}
+	} 
 
 	/* Get the sid */
-	sid_to_fstring(sid, &dom_sid);
+	sid_to_string(sid, &dom_sid);
 
 	/* Get the ldap suffix */
 	suffix = lp_ldap_suffix();
@@ -2117,41 +1851,23 @@
 		d_fprintf(stderr, "Fetching PRIVS databases\n");
 		break;
 	default:
-		d_fprintf(stderr,
-			  "Fetching unknown database type %u\n",
+		d_fprintf(stderr, 
+			  "Fetching unknown database type %u\n", 
 			  db_type );
 		break;
 	}
 
 	do {
-		struct netr_DELTA_ENUM_ARRAY *delta_enum_array = NULL;
-
-		netlogon_creds_client_step(pipe_hnd->dc, &credential);
-
-		result = rpccli_netr_DatabaseSync2(pipe_hnd, mem_ctx,
-						   logon_server,
-						   computername,
-						   &credential,
-						   &return_authenticator,
-						   database_id,
-						   restart_state,
-						   &sync_context,
-						   &delta_enum_array,
-						   0xffff);
-
-		/* Check returned credentials. */
-		if (!netlogon_creds_client_check(pipe_hnd->dc,
-						 &return_authenticator.cred)) {
-			DEBUG(0,("credentials chain check failed\n"));
-			return NT_STATUS_ACCESS_DENIED;
+		result = rpccli_netlogon_sam_sync(pipe_hnd, mem_ctx,
+						  db_type, sync_context,
+						  &num_deltas, &hdr_deltas, 
+						  &deltas);
+		if (!NT_STATUS_IS_OK(result) &&
+		    !NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES)) {
+			ret = NT_STATUS_OK;
+			goto done; /* is this correct? jmcd */
 		}
 
-		if (NT_STATUS_IS_ERR(result)) {
-			break;
-		}
-
-		num_deltas = delta_enum_array->num_deltas;
-
 		/* Re-allocate memory for groupmap and accountmap arrays */
 		groupmap = SMB_REALLOC_ARRAY(groupmap, GROUPMAP,
 					     num_deltas+num_alloced);
@@ -2164,7 +1880,7 @@
 		}
 
 		/* Initialize the new records */
-		memset(&groupmap[num_alloced], 0,
+		memset(&groupmap[num_alloced], 0, 
 		       sizeof(GROUPMAP)*num_deltas);
 		memset(&accountmap[num_alloced], 0,
 		       sizeof(ACCOUNTMAP)*num_deltas);
@@ -2174,60 +1890,73 @@
 
 		/* Loop through the deltas */
 		for (k=0; k<num_deltas; k++) {
-
-			union netr_DELTA_UNION u =
-				delta_enum_array->delta_enum[k].delta_union;
-			union netr_DELTA_ID_UNION id =
-				delta_enum_array->delta_enum[k].delta_id_union;
-
-			switch(delta_enum_array->delta_enum[k].delta_type) {
-			case NETR_DELTA_DOMAIN:
+			switch(hdr_deltas[k].type) {
+			case SAM_DELTA_DOMAIN_INFO:
 				/* Is this case needed? */
-				fstrcpy(domainname,
-					u.domain->domain_name.string);
+				unistr2_to_ascii(
+					domainname, 
+					&deltas[k].domain_info.uni_dom_name,
+					sizeof(domainname)-1);
 				break;
 
-			case NETR_DELTA_GROUP:
+			case SAM_DELTA_GROUP_INFO:
 				fetch_group_info_to_ldif(
-					u.group,
-					&groupmap[g_index],
+					&deltas[k], &groupmap[g_index],
 					add_file, sid, suffix);
 				g_index++;
 				break;
 
-			case NETR_DELTA_USER:
+			case SAM_DELTA_ACCOUNT_INFO:
 				fetch_account_info_to_ldif(
-					u.user, groupmap,
+					&deltas[k], groupmap, 
 					&accountmap[a_index], add_file,
 					sid, suffix, num_alloced);
 				a_index++;
 				break;
 
-			case NETR_DELTA_ALIAS:
+			case SAM_DELTA_ALIAS_INFO:
 				fetch_alias_info_to_ldif(
-					u.alias, &groupmap[g_index],
+					&deltas[k], &groupmap[g_index],
 					add_file, sid, suffix, db_type);
 				g_index++;
 				break;
 
-			case NETR_DELTA_GROUP_MEMBER:
+			case SAM_DELTA_GROUP_MEM:
 				fetch_groupmem_info_to_ldif(
-					u.group_member, id.rid,
-					groupmap, accountmap,
+					&deltas[k], &hdr_deltas[k], 
+					groupmap, accountmap, 
 					mod_file, num_alloced);
 				break;
 
-			case NETR_DELTA_ALIAS_MEMBER:
-			case NETR_DELTA_POLICY:
-			case NETR_DELTA_ACCOUNT:
-			case NETR_DELTA_TRUSTED_DOMAIN:
-			case NETR_DELTA_SECRET:
-			case NETR_DELTA_RENAME_GROUP:
-			case NETR_DELTA_RENAME_USER:
-			case NETR_DELTA_RENAME_ALIAS:
-			case NETR_DELTA_DELETE_GROUP:
-			case NETR_DELTA_DELETE_USER:
-			case NETR_DELTA_MODIFY_COUNT:
+			case SAM_DELTA_ALIAS_MEM:
+				break;
+			case SAM_DELTA_POLICY_INFO:
+				break;
+			case SAM_DELTA_PRIVS_INFO:
+				break;
+			case SAM_DELTA_TRUST_DOMS:
+				/* Implemented but broken */
+				break;
+			case SAM_DELTA_SECRET_INFO:
+				/* Implemented but broken */
+				break;
+			case SAM_DELTA_RENAME_GROUP:
+				/* Not yet implemented */
+				break;
+			case SAM_DELTA_RENAME_USER:
+				/* Not yet implemented */
+				break;
+			case SAM_DELTA_RENAME_ALIAS:
+				/* Not yet implemented */
+				break;
+			case SAM_DELTA_DELETE_GROUP:
+				/* Not yet implemented */
+				break;
+			case SAM_DELTA_DELETE_USER:
+				/* Not yet implemented */
+				break;
+			case SAM_DELTA_MODIFIED_COUNT:
+				break;
 			default:
 				break;
 			} /* end of switch */
@@ -2293,7 +2022,7 @@
 		DEBUG(1,("unlink(%s) failed, error was (%s)\n",
 			 mod_name, strerror(errno)));
 	}
-
+	
 	if (ldif_file && (ldif_file != stdout)) {
 		fclose(ldif_file);
 	}
@@ -2307,15 +2036,15 @@
 	return ret;
 }
 
-/**
+/** 
  * Basic usage function for 'net rpc vampire'
  * @param argc  Standard main() style argc
  * @param argc  Standard main() style argv.  Initial components are already
  *              stripped
  **/
 
-int rpc_vampire_usage(int argc, const char **argv)
-{
+int rpc_vampire_usage(int argc, const char **argv) 
+{	
 	d_printf("net rpc vampire [ldif [<ldif-filename>] [options]\n"
 		 "\t to pull accounts from a remote PDC where we are a BDC\n"
 		 "\t\t no args puts accounts in local passdb from smb.conf\n"
@@ -2328,13 +2057,13 @@
 
 
 /* dump sam database via samsync rpc calls */
-NTSTATUS rpc_vampire_internals(const DOM_SID *domain_sid,
-				const char *domain_name,
+NTSTATUS rpc_vampire_internals(const DOM_SID *domain_sid, 
+				const char *domain_name, 
 				struct cli_state *cli,
 				struct rpc_pipe_client *pipe_hnd,
-				TALLOC_CTX *mem_ctx,
+				TALLOC_CTX *mem_ctx, 
 				int argc,
-				const char **argv)
+				const char **argv) 
 {
         NTSTATUS result;
 	fstring my_dom_sid_str;
@@ -2348,10 +2077,10 @@
 			 "workgroup=%s\n\n in your smb.conf?\n",
 			 domain_name,
 			 get_global_sam_name(),
-			 sid_to_fstring(my_dom_sid_str,
-					get_global_sam_sid()),
-			 domain_name, sid_to_fstring(rem_dom_sid_str,
-						     domain_sid),
+			 sid_to_string(my_dom_sid_str, 
+				       get_global_sam_sid()),
+			 domain_name, sid_to_string(rem_dom_sid_str,
+						    domain_sid),
 			 domain_name);
 		return NT_STATUS_UNSUCCESSFUL;
 	}

Modified: branches/samba/upstream/source/utils/net_rpc_service.c
===================================================================
--- branches/samba/upstream/source/utils/net_rpc_service.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_rpc_service.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,33 +1,31 @@
-/*
-   Samba Unix/Linux SMB client library
-   Distributed SMB/CIFS Server Management Utility
+/* 
+   Samba Unix/Linux SMB client library 
+   Distributed SMB/CIFS Server Management Utility 
    Copyright (C) Gerald (Jerry) Carter          2005
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+ 
 #include "includes.h"
 #include "utils/net.h"
 
 
-#define CLI_SERVER_NAME_SLASH(_ctx, _p, _cli) \
-	_p = talloc_asprintf(_ctx, "\\\\%s", _cli->cli->desthost);
-
 /********************************************************************
 ********************************************************************/
 
 static WERROR query_service_state(struct rpc_pipe_client *pipe_hnd,
-				TALLOC_CTX *mem_ctx,
+				TALLOC_CTX *mem_ctx, 
 				POLICY_HND *hSCM,
 				const char *service,
 				uint32 *state )
@@ -35,32 +33,24 @@
 	POLICY_HND hService;
 	SERVICE_STATUS service_status;
 	WERROR result = WERR_GENERAL_FAILURE;
-	NTSTATUS status;
-
+	
 	/* now cycle until the status is actually 'watch_state' */
+	
+	result = rpccli_svcctl_open_service(pipe_hnd, mem_ctx, hSCM, &hService, 
+		service, SC_RIGHT_SVC_QUERY_STATUS );
 
-	status = rpccli_svcctl_OpenServiceW(pipe_hnd, mem_ctx,
-					    hSCM,
-					    service,
-					    SC_RIGHT_SVC_QUERY_STATUS,
-					    &hService,
-					    &result);
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result) ) {
+	if ( !W_ERROR_IS_OK(result) ) {
 		d_fprintf(stderr, "Failed to open service.  [%s]\n", dos_errstr(result));
 		return result;
 	}
 
-	status = rpccli_svcctl_QueryServiceStatus(pipe_hnd, mem_ctx,
-						  &hService,
-						  &service_status,
-						  &result);
-
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result) ) {
+	result = rpccli_svcctl_query_status(pipe_hnd, mem_ctx, &hService, &service_status  );
+	if ( W_ERROR_IS_OK(result) ) {
 		*state = service_status.state;
 	}
-
-	rpccli_svcctl_CloseServiceHandle(pipe_hnd, mem_ctx, &hService, NULL);
-
+	
+	rpccli_svcctl_close_service(pipe_hnd, mem_ctx, &hService );
+	
 	return result;
 }
 
@@ -68,17 +58,17 @@
 ********************************************************************/
 
 static WERROR watch_service_state(struct rpc_pipe_client *pipe_hnd,
-				TALLOC_CTX *mem_ctx,
+				TALLOC_CTX *mem_ctx, 
 				POLICY_HND *hSCM,
-				const char *service,
+				const char *service, 
 				uint32 watch_state,
 				uint32 *final_state )
 {
 	uint32 i;
 	uint32 state = 0;
 	WERROR result = WERR_GENERAL_FAILURE;
-
-
+	
+	
 	i = 0;
 	while ( (state != watch_state ) && i<30 ) {
 		/* get the status */
@@ -87,15 +77,15 @@
 		if ( !W_ERROR_IS_OK(result) ) {
 			break;
 		}
-
+		
 		d_printf(".");
 		i++;
 		sys_usleep( 100 );
 	}
 	d_printf("\n");
-
+	
 	*final_state = state;
-
+	
 	return result;
 }
 
@@ -103,188 +93,156 @@
 ********************************************************************/
 
 static WERROR control_service(struct rpc_pipe_client *pipe_hnd,
-				TALLOC_CTX *mem_ctx,
+				TALLOC_CTX *mem_ctx, 
 				POLICY_HND *hSCM,
-				const char *service,
+				const char *service, 
 				uint32 control,
 				uint32 watch_state )
 {
 	POLICY_HND hService;
 	WERROR result = WERR_GENERAL_FAILURE;
-	NTSTATUS status;
 	SERVICE_STATUS service_status;
 	uint32 state = 0;
-
+	
 	/* Open the Service */
+	
+	result = rpccli_svcctl_open_service(pipe_hnd, mem_ctx, hSCM, &hService, 
+		service, (SC_RIGHT_SVC_STOP|SC_RIGHT_SVC_PAUSE_CONTINUE) );
 
-	status = rpccli_svcctl_OpenServiceW(pipe_hnd, mem_ctx,
-					    hSCM,
-					    service,
-					    (SC_RIGHT_SVC_STOP|SC_RIGHT_SVC_PAUSE_CONTINUE),
-					    &hService,
-					    &result);
-
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result) ) {
+	if ( !W_ERROR_IS_OK(result) ) {
 		d_fprintf(stderr, "Failed to open service.  [%s]\n", dos_errstr(result));
 		goto done;
 	}
-
+	
 	/* get the status */
 
-	status = rpccli_svcctl_ControlService(pipe_hnd, mem_ctx,
-					      &hService,
-					      control,
-					      &service_status,
-					      &result);
-
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result) ) {
+	result = rpccli_svcctl_control_service(pipe_hnd, mem_ctx, &hService, 
+		control, &service_status  );
+		
+	if ( !W_ERROR_IS_OK(result) ) {
 		d_fprintf(stderr, "Control service request failed.  [%s]\n", dos_errstr(result));
 		goto done;
 	}
-
+	
 	/* loop -- checking the state until we are where we want to be */
-
+	
 	result = watch_service_state(pipe_hnd, mem_ctx, hSCM, service, watch_state, &state );
-
+		
 	d_printf("%s service is %s.\n", service, svc_status_string(state));
 
-done:
-	rpccli_svcctl_CloseServiceHandle(pipe_hnd, mem_ctx, &hService, NULL);
-
+done:	
+	rpccli_svcctl_close_service(pipe_hnd, mem_ctx, &hService  );
+		
 	return result;
-}
+}	
 
 /********************************************************************
 ********************************************************************/
 
 static NTSTATUS rpc_service_list_internal(const DOM_SID *domain_sid,
-					const char *domain_name,
+					const char *domain_name, 
 					struct cli_state *cli,
 					struct rpc_pipe_client *pipe_hnd,
-					TALLOC_CTX *mem_ctx,
+					TALLOC_CTX *mem_ctx, 
 					int argc,
 					const char **argv )
 {
 	POLICY_HND hSCM;
 	ENUM_SERVICES_STATUS *services;
 	WERROR result = WERR_GENERAL_FAILURE;
-	NTSTATUS status;
 	fstring servicename;
 	fstring displayname;
 	uint32 num_services = 0;
-	const char *server_name;
 	int i;
-
+	
 	if (argc != 0 ) {
 		d_printf("Usage: net rpc service list\n");
 		return NT_STATUS_OK;
 	}
 
-	CLI_SERVER_NAME_SLASH(mem_ctx, server_name, pipe_hnd);
-	NT_STATUS_HAVE_NO_MEMORY(server_name);
-
-	status = rpccli_svcctl_OpenSCManagerW(pipe_hnd, mem_ctx,
-					      server_name,
-					      NULL,
-					      SC_RIGHT_MGR_ENUMERATE_SERVICE,
-					      &hSCM,
-					      &result);
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
+	result = rpccli_svcctl_open_scm(pipe_hnd, mem_ctx, &hSCM, SC_RIGHT_MGR_ENUMERATE_SERVICE  );
+	if ( !W_ERROR_IS_OK(result) ) {
 		d_fprintf(stderr, "Failed to open Service Control Manager.  [%s]\n", dos_errstr(result));
 		return werror_to_ntstatus(result);
 	}
-
+	
 	result = rpccli_svcctl_enumerate_services(pipe_hnd, mem_ctx, &hSCM, SVCCTL_TYPE_WIN32,
 		SVCCTL_STATE_ALL, &num_services, &services );
-
+	
 	if ( !W_ERROR_IS_OK(result) ) {
 		d_fprintf(stderr, "Failed to enumerate services.  [%s]\n", dos_errstr(result));
 		goto done;
 	}
-
+	
 	if ( num_services == 0 )
 		d_printf("No services returned\n");
-
+	
 	for ( i=0; i<num_services; i++ ) {
 		rpcstr_pull( servicename, services[i].servicename.buffer, sizeof(servicename), -1, STR_TERMINATE );
 		rpcstr_pull( displayname, services[i].displayname.buffer, sizeof(displayname), -1, STR_TERMINATE );
-
+		
 		d_printf("%-20s    \"%s\"\n", servicename, displayname);
 	}
 
-done:
-	rpccli_svcctl_CloseServiceHandle(pipe_hnd, mem_ctx, &hSCM, NULL);
-
+done:	
+	rpccli_svcctl_close_service(pipe_hnd, mem_ctx, &hSCM  );
+		
 	return werror_to_ntstatus(result);
-}
+}	
 
 /********************************************************************
 ********************************************************************/
 
 static NTSTATUS rpc_service_status_internal(const DOM_SID *domain_sid,
-						const char *domain_name,
+						const char *domain_name, 
 						struct cli_state *cli,
 						struct rpc_pipe_client *pipe_hnd,
-						TALLOC_CTX *mem_ctx,
+						TALLOC_CTX *mem_ctx, 
 						int argc,
 						const char **argv )
 {
 	POLICY_HND hSCM, hService;
 	WERROR result = WERR_GENERAL_FAILURE;
-	NTSTATUS status;
+	fstring servicename;
 	SERVICE_STATUS service_status;
 	SERVICE_CONFIG config;
 	fstring ascii_string;
-	const char *server_name;
-
+	
 	if (argc != 1 ) {
 		d_printf("Usage: net rpc service status <service>\n");
 		return NT_STATUS_OK;
 	}
 
-	/* Open the Service Control Manager */
-	CLI_SERVER_NAME_SLASH(mem_ctx, server_name, pipe_hnd);
-	NT_STATUS_HAVE_NO_MEMORY(server_name);
+	fstrcpy( servicename, argv[0] );
 
-	status = rpccli_svcctl_OpenSCManagerW(pipe_hnd, mem_ctx,
-					      server_name,
-					      NULL,
-					      SC_RIGHT_MGR_ENUMERATE_SERVICE,
-					      &hSCM,
-					      &result);
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
+	/* Open the Service Control Manager */
+	
+	result = rpccli_svcctl_open_scm(pipe_hnd, mem_ctx, &hSCM, SC_RIGHT_MGR_ENUMERATE_SERVICE  );
+	if ( !W_ERROR_IS_OK(result) ) {
 		d_fprintf(stderr, "Failed to open Service Control Manager.  [%s]\n", dos_errstr(result));
 		return werror_to_ntstatus(result);
 	}
-
+	
 	/* Open the Service */
+	
+	result = rpccli_svcctl_open_service(pipe_hnd, mem_ctx, &hSCM, &hService, servicename, 
+		(SC_RIGHT_SVC_QUERY_STATUS|SC_RIGHT_SVC_QUERY_CONFIG) );
 
-	status = rpccli_svcctl_OpenServiceW(pipe_hnd, mem_ctx,
-					    &hSCM,
-					    argv[0],
-					    (SC_RIGHT_SVC_QUERY_STATUS|SC_RIGHT_SVC_QUERY_CONFIG),
-					    &hService,
-					    &result);
-
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result) ) {
+	if ( !W_ERROR_IS_OK(result) ) {
 		d_fprintf(stderr, "Failed to open service.  [%s]\n", dos_errstr(result));
 		goto done;
 	}
-
+	
 	/* get the status */
 
-	status = rpccli_svcctl_QueryServiceStatus(pipe_hnd, mem_ctx,
-						  &hService,
-						  &service_status,
-						  &result);
-
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result) ) {
+	result = rpccli_svcctl_query_status(pipe_hnd, mem_ctx, &hService, &service_status  );
+	if ( !W_ERROR_IS_OK(result) ) {
 		d_fprintf(stderr, "Query status request failed.  [%s]\n", dos_errstr(result));
 		goto done;
 	}
+	
+	d_printf("%s service is %s.\n", servicename, svc_status_string(service_status.state));
 
-	d_printf("%s service is %s.\n", argv[0], svc_status_string(service_status.state));
-
 	/* get the config */
 
 	result = rpccli_svcctl_query_config(pipe_hnd, mem_ctx, &hService, &config  );
@@ -327,30 +285,28 @@
 		d_printf("\tDisplay Name         = %s\n", ascii_string);
 	}
 
-done:
-        rpccli_svcctl_CloseServiceHandle(pipe_hnd, mem_ctx, &hService, NULL);
-	rpccli_svcctl_CloseServiceHandle(pipe_hnd, mem_ctx, &hSCM, NULL);
+done:	
+	rpccli_svcctl_close_service(pipe_hnd, mem_ctx, &hService  );
+	rpccli_svcctl_close_service(pipe_hnd, mem_ctx, &hSCM  );
 
 	return werror_to_ntstatus(result);
-}
+}	
 
 /********************************************************************
 ********************************************************************/
 
 static NTSTATUS rpc_service_stop_internal(const DOM_SID *domain_sid,
-					const char *domain_name,
+					const char *domain_name, 
 					struct cli_state *cli,
 					struct rpc_pipe_client *pipe_hnd,
-					TALLOC_CTX *mem_ctx,
+					TALLOC_CTX *mem_ctx, 
 					int argc,
 					const char **argv )
 {
 	POLICY_HND hSCM;
 	WERROR result = WERR_GENERAL_FAILURE;
-	NTSTATUS status;
 	fstring servicename;
-	const char *server_name;
-
+	
 	if (argc != 1 ) {
 		d_printf("Usage: net rpc service status <service>\n");
 		return NT_STATUS_OK;
@@ -359,45 +315,36 @@
 	fstrcpy( servicename, argv[0] );
 
 	/* Open the Service Control Manager */
-	CLI_SERVER_NAME_SLASH(mem_ctx, server_name, pipe_hnd);
-	NT_STATUS_HAVE_NO_MEMORY(server_name);
-
-	status = rpccli_svcctl_OpenSCManagerW(pipe_hnd, mem_ctx,
-					      server_name,
-					      NULL,
-					      SC_RIGHT_MGR_ENUMERATE_SERVICE,
-					      &hSCM,
-					      &result);
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
+	
+	result = rpccli_svcctl_open_scm(pipe_hnd, mem_ctx, &hSCM, SC_RIGHT_MGR_ENUMERATE_SERVICE  );
+	if ( !W_ERROR_IS_OK(result) ) {
 		d_fprintf(stderr, "Failed to open Service Control Manager.  [%s]\n", dos_errstr(result));
 		return werror_to_ntstatus(result);
 	}
-
-	result = control_service(pipe_hnd, mem_ctx, &hSCM, servicename,
+	
+	result = control_service(pipe_hnd, mem_ctx, &hSCM, servicename, 
 		SVCCTL_CONTROL_STOP, SVCCTL_STOPPED );
-
-	rpccli_svcctl_CloseServiceHandle(pipe_hnd, mem_ctx, &hSCM, NULL);
-
+		
+	rpccli_svcctl_close_service(pipe_hnd, mem_ctx, &hSCM  );
+		
 	return werror_to_ntstatus(result);
-}
+}	
 
 /********************************************************************
 ********************************************************************/
 
 static NTSTATUS rpc_service_pause_internal(const DOM_SID *domain_sid,
-					const char *domain_name,
+					const char *domain_name, 
 					struct cli_state *cli,
 					struct rpc_pipe_client *pipe_hnd,
-					TALLOC_CTX *mem_ctx,
+					TALLOC_CTX *mem_ctx, 
 					int argc,
 					const char **argv )
 {
 	POLICY_HND hSCM;
 	WERROR result = WERR_GENERAL_FAILURE;
-	NTSTATUS status;
 	fstring servicename;
-	const char *server_name;
-
+	
 	if (argc != 1 ) {
 		d_printf("Usage: net rpc service status <service>\n");
 		return NT_STATUS_OK;
@@ -406,45 +353,36 @@
 	fstrcpy( servicename, argv[0] );
 
 	/* Open the Service Control Manager */
-	CLI_SERVER_NAME_SLASH(mem_ctx, server_name, pipe_hnd);
-	NT_STATUS_HAVE_NO_MEMORY(server_name);
-
-	status = rpccli_svcctl_OpenSCManagerW(pipe_hnd, mem_ctx,
-					      server_name,
-					      NULL,
-					      SC_RIGHT_MGR_ENUMERATE_SERVICE,
-					      &hSCM,
-					      &result);
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
+	
+	result = rpccli_svcctl_open_scm(pipe_hnd, mem_ctx, &hSCM, SC_RIGHT_MGR_ENUMERATE_SERVICE  );
+	if ( !W_ERROR_IS_OK(result) ) {
 		d_fprintf(stderr, "Failed to open Service Control Manager.  [%s]\n", dos_errstr(result));
 		return werror_to_ntstatus(result);
 	}
-
-	result = control_service(pipe_hnd, mem_ctx, &hSCM, servicename,
+	
+	result = control_service(pipe_hnd, mem_ctx, &hSCM, servicename, 
 		SVCCTL_CONTROL_PAUSE, SVCCTL_PAUSED );
-
-	rpccli_svcctl_CloseServiceHandle(pipe_hnd, mem_ctx, &hSCM, NULL);
-
+		
+	rpccli_svcctl_close_service(pipe_hnd, mem_ctx, &hSCM  );
+		
 	return werror_to_ntstatus(result);
-}
+}	
 
 /********************************************************************
 ********************************************************************/
 
 static NTSTATUS rpc_service_resume_internal(const DOM_SID *domain_sid,
-					const char *domain_name,
+					const char *domain_name, 
 					struct cli_state *cli,
 					struct rpc_pipe_client *pipe_hnd,
-					TALLOC_CTX *mem_ctx,
+					TALLOC_CTX *mem_ctx, 
 					int argc,
 					const char **argv )
 {
 	POLICY_HND hSCM;
 	WERROR result = WERR_GENERAL_FAILURE;
-	NTSTATUS status;
 	fstring servicename;
-	const char *server_name;
-
+	
 	if (argc != 1 ) {
 		d_printf("Usage: net rpc service status <service>\n");
 		return NT_STATUS_OK;
@@ -453,103 +391,81 @@
 	fstrcpy( servicename, argv[0] );
 
 	/* Open the Service Control Manager */
-	CLI_SERVER_NAME_SLASH(mem_ctx, server_name, pipe_hnd);
-	NT_STATUS_HAVE_NO_MEMORY(server_name);
-
-	status = rpccli_svcctl_OpenSCManagerW(pipe_hnd, mem_ctx,
-					      server_name,
-					      NULL,
-					      SC_RIGHT_MGR_ENUMERATE_SERVICE,
-					      &hSCM,
-					      &result);
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
+	
+	result = rpccli_svcctl_open_scm(pipe_hnd, mem_ctx, &hSCM, SC_RIGHT_MGR_ENUMERATE_SERVICE  );
+	if ( !W_ERROR_IS_OK(result) ) {
 		d_fprintf(stderr, "Failed to open Service Control Manager.  [%s]\n", dos_errstr(result));
 		return werror_to_ntstatus(result);
 	}
-
-	result = control_service(pipe_hnd, mem_ctx, &hSCM, servicename,
+	
+	result = control_service(pipe_hnd, mem_ctx, &hSCM, servicename, 
 		SVCCTL_CONTROL_CONTINUE, SVCCTL_RUNNING );
-
-	rpccli_svcctl_CloseServiceHandle(pipe_hnd, mem_ctx, &hSCM, NULL);
-
+		
+	rpccli_svcctl_close_service(pipe_hnd, mem_ctx, &hSCM  );
+		
 	return werror_to_ntstatus(result);
-}
+}	
 
 /********************************************************************
 ********************************************************************/
 
 static NTSTATUS rpc_service_start_internal(const DOM_SID *domain_sid,
-					const char *domain_name,
+					const char *domain_name, 
 					struct cli_state *cli,
 					struct rpc_pipe_client *pipe_hnd,
-					TALLOC_CTX *mem_ctx,
+					TALLOC_CTX *mem_ctx, 
 					int argc,
 					const char **argv )
 {
 	POLICY_HND hSCM, hService;
 	WERROR result = WERR_GENERAL_FAILURE;
-	NTSTATUS status;
+	fstring servicename;
 	uint32 state = 0;
-	const char *server_name;
-
+	
 	if (argc != 1 ) {
 		d_printf("Usage: net rpc service status <service>\n");
 		return NT_STATUS_OK;
 	}
 
-	/* Open the Service Control Manager */
-	CLI_SERVER_NAME_SLASH(mem_ctx, server_name, pipe_hnd);
-	NT_STATUS_HAVE_NO_MEMORY(server_name);
+	fstrcpy( servicename, argv[0] );
 
-	status = rpccli_svcctl_OpenSCManagerW(pipe_hnd, mem_ctx,
-					      server_name,
-					      NULL,
-					      SC_RIGHT_MGR_ENUMERATE_SERVICE,
-					      &hSCM,
-					      &result);
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
+	/* Open the Service Control Manager */
+	
+	result = rpccli_svcctl_open_scm( pipe_hnd, mem_ctx, &hSCM, SC_RIGHT_MGR_ENUMERATE_SERVICE  );
+	if ( !W_ERROR_IS_OK(result) ) {
 		d_fprintf(stderr, "Failed to open Service Control Manager.  [%s]\n", dos_errstr(result));
 		return werror_to_ntstatus(result);
 	}
-
+	
 	/* Open the Service */
+	
+	result = rpccli_svcctl_open_service(pipe_hnd, mem_ctx, &hSCM, &hService, 
+		servicename, SC_RIGHT_SVC_START );
 
-	status = rpccli_svcctl_OpenServiceW(pipe_hnd, mem_ctx,
-					    &hSCM,
-					    argv[0],
-					    SC_RIGHT_SVC_START,
-					    &hService,
-					    &result);
-
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result) ) {
+	if ( !W_ERROR_IS_OK(result) ) {
 		d_fprintf(stderr, "Failed to open service.  [%s]\n", dos_errstr(result));
 		goto done;
 	}
-
+	
 	/* get the status */
 
-	status = rpccli_svcctl_StartServiceW(pipe_hnd, mem_ctx,
-					     &hService,
-					     0,
-					     NULL,
-					     &result);
-
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result) ) {
+	result = rpccli_svcctl_start_service(pipe_hnd, mem_ctx, &hService, NULL, 0 );
+	if ( !W_ERROR_IS_OK(result) ) {
 		d_fprintf(stderr, "Query status request failed.  [%s]\n", dos_errstr(result));
 		goto done;
 	}
-
-	result = watch_service_state(pipe_hnd, mem_ctx, &hSCM, argv[0], SVCCTL_RUNNING, &state  );
-
+	
+	result = watch_service_state(pipe_hnd, mem_ctx, &hSCM, servicename, SVCCTL_RUNNING, &state  );
+	
 	if ( W_ERROR_IS_OK(result) && (state == SVCCTL_RUNNING) )
-		d_printf("Successfully started service: %s\n", argv[0] );
+		d_printf("Successfully started service: %s\n", servicename );
 	else
-		d_fprintf(stderr, "Failed to start service: %s [%s]\n", argv[0], dos_errstr(result) );
+		d_fprintf(stderr, "Failed to start service: %s [%s]\n", servicename, dos_errstr(result) );
+	
+done:	
+	rpccli_svcctl_close_service(pipe_hnd, mem_ctx, &hService  );
+	rpccli_svcctl_close_service(pipe_hnd, mem_ctx, &hSCM  );
 
-done:
-	rpccli_svcctl_CloseServiceHandle(pipe_hnd, mem_ctx, &hService, NULL);
-	rpccli_svcctl_CloseServiceHandle(pipe_hnd, mem_ctx, &hSCM, NULL);
-
 	return werror_to_ntstatus(result);
 }
 
@@ -558,7 +474,7 @@
 
 static int rpc_service_list( int argc, const char **argv )
 {
-	return run_rpc_command( NULL, PI_SVCCTL, 0,
+	return run_rpc_command( NULL, PI_SVCCTL, 0, 
 		rpc_service_list_internal, argc, argv );
 }
 
@@ -567,7 +483,7 @@
 
 static int rpc_service_start( int argc, const char **argv )
 {
-	return run_rpc_command( NULL, PI_SVCCTL, 0,
+	return run_rpc_command( NULL, PI_SVCCTL, 0, 
 		rpc_service_start_internal, argc, argv );
 }
 
@@ -576,7 +492,7 @@
 
 static int rpc_service_stop( int argc, const char **argv )
 {
-	return run_rpc_command( NULL, PI_SVCCTL, 0,
+	return run_rpc_command( NULL, PI_SVCCTL, 0, 
 		rpc_service_stop_internal, argc, argv );
 }
 
@@ -585,7 +501,7 @@
 
 static int rpc_service_resume( int argc, const char **argv )
 {
-	return run_rpc_command( NULL, PI_SVCCTL, 0,
+	return run_rpc_command( NULL, PI_SVCCTL, 0, 
 		rpc_service_resume_internal, argc, argv );
 }
 
@@ -594,7 +510,7 @@
 
 static int rpc_service_pause( int argc, const char **argv )
 {
-	return run_rpc_command( NULL, PI_SVCCTL, 0,
+	return run_rpc_command( NULL, PI_SVCCTL, 0, 
 		rpc_service_pause_internal, argc, argv );
 }
 
@@ -603,7 +519,7 @@
 
 static int rpc_service_status( int argc, const char **argv )
 {
-	return run_rpc_command( NULL, PI_SVCCTL, 0,
+	return run_rpc_command( NULL, PI_SVCCTL, 0, 
 		rpc_service_status_internal, argc, argv );
 }
 
@@ -618,14 +534,14 @@
 	d_printf("net rpc service pause <service>    Pause a service\n");
 	d_printf("net rpc service resume <service>   Resume a paused service\n");
 	d_printf("net rpc service status <service>   View the current status of a service\n");
-
+	
 	return -1;
 }
 
 /********************************************************************
 ********************************************************************/
 
-int net_rpc_service(int argc, const char **argv)
+int net_rpc_service(int argc, const char **argv) 
 {
 	struct functable func[] = {
 		{"list", rpc_service_list},
@@ -636,9 +552,9 @@
 		{"status", rpc_service_status},
 		{NULL, NULL}
 	};
-
+	
 	if ( argc )
 		return net_run_function( argc, argv, func, net_help_service );
-
+		
 	return net_help_service( argc, argv );
 }

Modified: branches/samba/upstream/source/utils/net_rpc_sh_acct.c
===================================================================
--- branches/samba/upstream/source/utils/net_rpc_sh_acct.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_rpc_sh_acct.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  
 #include "includes.h"
 #include "utils/net.h"
@@ -29,48 +30,41 @@
 			       struct rpc_sh_ctx *ctx,
 			       struct rpc_pipe_client *pipe_hnd,
 			       int argc, const char **argv,
-			       int (*fn)(TALLOC_CTX *mem_ctx,
+			       BOOL (*fn)(TALLOC_CTX *mem_ctx,
 					  struct rpc_sh_ctx *ctx,
-					  struct samr_DomInfo1 *i1,
-					  struct samr_DomInfo3 *i3,
-					  struct samr_DomInfo12 *i12,
+					  SAM_UNK_INFO_1 *i1,
+					  SAM_UNK_INFO_3 *i3,
+					  SAM_UNK_INFO_12 *i12,
 					  int argc, const char **argv))
 {
 	POLICY_HND connect_pol, domain_pol;
 	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-	union samr_DomainInfo *info1 = NULL;
-	union samr_DomainInfo *info3 = NULL;
-	union samr_DomainInfo *info12 = NULL;
+	SAM_UNK_CTR ctr1, ctr3, ctr12;
 	int store;
 
 	ZERO_STRUCT(connect_pol);
 	ZERO_STRUCT(domain_pol);
 
 	/* Get sam policy handle */
-
-	result = rpccli_samr_Connect2(pipe_hnd, mem_ctx,
-				      pipe_hnd->cli->desthost,
-				      MAXIMUM_ALLOWED_ACCESS,
-				      &connect_pol);
+	
+	result = rpccli_samr_connect(pipe_hnd, mem_ctx,
+				     MAXIMUM_ALLOWED_ACCESS, 
+				     &connect_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 	
 	/* Get domain policy handle */
-
-	result = rpccli_samr_OpenDomain(pipe_hnd, mem_ctx,
-					&connect_pol,
-					MAXIMUM_ALLOWED_ACCESS,
-					ctx->domain_sid,
-					&domain_pol);
+	
+	result = rpccli_samr_open_domain(pipe_hnd, mem_ctx, &connect_pol,
+					 MAXIMUM_ALLOWED_ACCESS,
+					 ctx->domain_sid, &domain_pol);
 	if (!NT_STATUS_IS_OK(result)) {
 		goto done;
 	}
 
-	result = rpccli_samr_QueryDomainInfo(pipe_hnd, mem_ctx,
-					     &domain_pol,
-					     1,
-					     &info1);
+	result = rpccli_samr_query_dom_info(pipe_hnd, mem_ctx, &domain_pol,
+					    1, &ctr1);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		d_fprintf(stderr, "query_domain_info level 1 failed: %s\n",
@@ -78,10 +72,8 @@
 		goto done;
 	}
 
-	result = rpccli_samr_QueryDomainInfo(pipe_hnd, mem_ctx,
-					     &domain_pol,
-					     3,
-					     &info3);
+	result = rpccli_samr_query_dom_info(pipe_hnd, mem_ctx, &domain_pol,
+					    3, &ctr3);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		d_fprintf(stderr, "query_domain_info level 3 failed: %s\n",
@@ -89,10 +81,8 @@
 		goto done;
 	}
 
-	result = rpccli_samr_QueryDomainInfo(pipe_hnd, mem_ctx,
-					     &domain_pol,
-					     12,
-					     &info12);
+	result = rpccli_samr_query_dom_info(pipe_hnd, mem_ctx, &domain_pol,
+					    12, &ctr12);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		d_fprintf(stderr, "query_domain_info level 12 failed: %s\n",
@@ -100,8 +90,8 @@
 		goto done;
 	}
 
-	store = fn(mem_ctx, ctx, &info1->info1, &info3->info3,
-		   &info12->info12, argc, argv);
+	store = fn(mem_ctx, ctx, &ctr1.info.inf1, &ctr3.info.inf3,
+		   &ctr12.info.inf12, argc, argv);
 
 	if (store <= 0) {
 		/* Don't save anything */
@@ -110,22 +100,16 @@
 
 	switch (store) {
 	case 1:
-		result = rpccli_samr_SetDomainInfo(pipe_hnd, mem_ctx,
-						   &domain_pol,
-						   1,
-						   info1);
+		result = rpccli_samr_set_domain_info(pipe_hnd, mem_ctx,
+						     &domain_pol, 1, &ctr1);
 		break;
 	case 3:
-		result = rpccli_samr_SetDomainInfo(pipe_hnd, mem_ctx,
-						   &domain_pol,
-						   3,
-						   info3);
+		result = rpccli_samr_set_domain_info(pipe_hnd, mem_ctx,
+						     &domain_pol, 3, &ctr3);
 		break;
 	case 12:
-		result = rpccli_samr_SetDomainInfo(pipe_hnd, mem_ctx,
-						   &domain_pol,
-						   12,
-						   info12);
+		result = rpccli_samr_set_domain_info(pipe_hnd, mem_ctx,
+						     &domain_pol, 12, &ctr12);
 		break;
 	default:
 		d_fprintf(stderr, "Got unexpected info level %d\n", store);
@@ -135,19 +119,18 @@
 
  done:
 	if (is_valid_policy_hnd(&domain_pol)) {
-		rpccli_samr_Close(pipe_hnd, mem_ctx, &domain_pol);
+		rpccli_samr_close(pipe_hnd, mem_ctx, &domain_pol);
 	}
 	if (is_valid_policy_hnd(&connect_pol)) {
-		rpccli_samr_Close(pipe_hnd, mem_ctx, &connect_pol);
+		rpccli_samr_close(pipe_hnd, mem_ctx, &connect_pol);
 	}
 
 	return result;
 }
 
 static int account_show(TALLOC_CTX *mem_ctx, struct rpc_sh_ctx *ctx,
-			struct samr_DomInfo1 *i1,
-			struct samr_DomInfo3 *i3,
-			struct samr_DomInfo12 *i12,
+			SAM_UNK_INFO_1 *i1, SAM_UNK_INFO_3 *i3,
+			SAM_UNK_INFO_12 *i12,
 			int argc, const char **argv)
 {
 	if (argc != 0) {
@@ -155,40 +138,40 @@
 		return -1;
 	}
 
-	d_printf("Minimum password length: %d\n", i1->min_password_length);
-	d_printf("Password history length: %d\n", i1->password_history_length);
+	d_printf("Minimum password length: %d\n", i1->min_length_password);
+	d_printf("Password history length: %d\n", i1->password_history);
 
 	d_printf("Minimum password age: ");
-	if (!nt_time_is_zero((NTTIME *)&i1->min_password_age)) {
-		time_t t = nt_time_to_unix_abs((NTTIME *)&i1->min_password_age);
+	if (!nt_time_is_zero(&i1->min_passwordage)) {
+		time_t t = nt_time_to_unix_abs(&i1->min_passwordage);
 		d_printf("%d seconds\n", (int)t);
 	} else {
 		d_printf("not set\n");
 	}
 
 	d_printf("Maximum password age: ");
-	if (nt_time_is_set((NTTIME *)&i1->max_password_age)) {
-		time_t t = nt_time_to_unix_abs((NTTIME *)&i1->max_password_age);
+	if (nt_time_is_set(&i1->expire)) {
+		time_t t = nt_time_to_unix_abs(&i1->expire);
 		d_printf("%d seconds\n", (int)t);
 	} else {
 		d_printf("not set\n");
 	}
 
-	d_printf("Bad logon attempts: %d\n", i12->lockout_threshold);
+	d_printf("Bad logon attempts: %d\n", i12->bad_attempt_lockout);
 
-	if (i12->lockout_threshold != 0) {
+	if (i12->bad_attempt_lockout != 0) {
 
 		d_printf("Account lockout duration: ");
-		if (nt_time_is_set(&i12->lockout_duration)) {
-			time_t t = nt_time_to_unix_abs(&i12->lockout_duration);
+		if (nt_time_is_set(&i12->duration)) {
+			time_t t = nt_time_to_unix_abs(&i12->duration);
 			d_printf("%d seconds\n", (int)t);
 		} else {
 			d_printf("not set\n");
 		}
 
 		d_printf("Bad password count reset after: ");
-		if (nt_time_is_set(&i12->lockout_window)) {
-			time_t t = nt_time_to_unix_abs(&i12->lockout_window);
+		if (nt_time_is_set(&i12->reset_count)) {
+			time_t t = nt_time_to_unix_abs(&i12->reset_count);
 			d_printf("%d seconds\n", (int)t);
 		} else {
 			d_printf("not set\n");
@@ -196,7 +179,7 @@
 	}
 
 	d_printf("Disconnect users when logon hours expire: %s\n",
-		 nt_time_is_zero(&i3->force_logoff_time) ? "yes" : "no");
+		 nt_time_is_zero(&i3->logout) ? "yes" : "no");
 
 	d_printf("User must logon to change password: %s\n",
 		 (i1->password_properties & 0x2) ? "yes" : "no");
@@ -213,9 +196,8 @@
 }
 
 static int account_set_badpw(TALLOC_CTX *mem_ctx, struct rpc_sh_ctx *ctx,
-			     struct samr_DomInfo1 *i1,
-			     struct samr_DomInfo3 *i3,
-			     struct samr_DomInfo12 *i12,
+			     SAM_UNK_INFO_1 *i1, SAM_UNK_INFO_3 *i3,
+			     SAM_UNK_INFO_12 *i12,
 			     int argc, const char **argv)
 {
 	if (argc != 1) {
@@ -223,9 +205,9 @@
 		return -1;
 	}
 
-	i12->lockout_threshold = atoi(argv[0]);
+	i12->bad_attempt_lockout = atoi(argv[0]);
 	d_printf("Setting bad password count to %d\n",
-		 i12->lockout_threshold);
+		 i12->bad_attempt_lockout);
 
 	return 12;
 }
@@ -241,9 +223,8 @@
 
 static int account_set_lockduration(TALLOC_CTX *mem_ctx,
 				    struct rpc_sh_ctx *ctx,
-				    struct samr_DomInfo1 *i1,
-				    struct samr_DomInfo3 *i3,
-				    struct samr_DomInfo12 *i12,
+				    SAM_UNK_INFO_1 *i1, SAM_UNK_INFO_3 *i3,
+				    SAM_UNK_INFO_12 *i12,
 				    int argc, const char **argv)
 {
 	if (argc != 1) {
@@ -251,9 +232,9 @@
 		return -1;
 	}
 
-	unix_to_nt_time_abs(&i12->lockout_duration, atoi(argv[0]));
+	unix_to_nt_time_abs(&i12->duration, atoi(argv[0]));
 	d_printf("Setting lockout duration to %d seconds\n",
-		 (int)nt_time_to_unix_abs(&i12->lockout_duration));
+		 (int)nt_time_to_unix_abs(&i12->duration));
 
 	return 12;
 }
@@ -269,9 +250,8 @@
 
 static int account_set_resetduration(TALLOC_CTX *mem_ctx,
 				     struct rpc_sh_ctx *ctx,
-				     struct samr_DomInfo1 *i1,
-				     struct samr_DomInfo3 *i3,
-				     struct samr_DomInfo12 *i12,
+				     SAM_UNK_INFO_1 *i1, SAM_UNK_INFO_3 *i3,
+				     SAM_UNK_INFO_12 *i12,
 				     int argc, const char **argv)
 {
 	if (argc != 1) {
@@ -279,9 +259,9 @@
 		return -1;
 	}
 
-	unix_to_nt_time_abs(&i12->lockout_window, atoi(argv[0]));
+	unix_to_nt_time_abs(&i12->reset_count, atoi(argv[0]));
 	d_printf("Setting bad password reset duration to %d seconds\n",
-		 (int)nt_time_to_unix_abs(&i12->lockout_window));
+		 (int)nt_time_to_unix_abs(&i12->reset_count));
 
 	return 12;
 }
@@ -297,9 +277,8 @@
 
 static int account_set_minpwage(TALLOC_CTX *mem_ctx,
 				struct rpc_sh_ctx *ctx,
-				struct samr_DomInfo1 *i1,
-				struct samr_DomInfo3 *i3,
-				struct samr_DomInfo12 *i12,
+				SAM_UNK_INFO_1 *i1, SAM_UNK_INFO_3 *i3,
+				SAM_UNK_INFO_12 *i12,
 				int argc, const char **argv)
 {
 	if (argc != 1) {
@@ -307,9 +286,9 @@
 		return -1;
 	}
 
-	unix_to_nt_time_abs((NTTIME *)&i1->min_password_age, atoi(argv[0]));
+	unix_to_nt_time_abs(&i1->min_passwordage, atoi(argv[0]));
 	d_printf("Setting minimum password age to %d seconds\n",
-		 (int)nt_time_to_unix_abs((NTTIME *)&i1->min_password_age));
+		 (int)nt_time_to_unix_abs(&i1->min_passwordage));
 
 	return 1;
 }
@@ -325,9 +304,8 @@
 
 static int account_set_maxpwage(TALLOC_CTX *mem_ctx,
 				struct rpc_sh_ctx *ctx,
-				struct samr_DomInfo1 *i1,
-				struct samr_DomInfo3 *i3,
-				struct samr_DomInfo12 *i12,
+				SAM_UNK_INFO_1 *i1, SAM_UNK_INFO_3 *i3,
+				SAM_UNK_INFO_12 *i12,
 				int argc, const char **argv)
 {
 	if (argc != 1) {
@@ -335,9 +313,9 @@
 		return -1;
 	}
 
-	unix_to_nt_time_abs((NTTIME *)&i1->max_password_age, atoi(argv[0]));
+	unix_to_nt_time_abs(&i1->expire, atoi(argv[0]));
 	d_printf("Setting maximum password age to %d seconds\n",
-		 (int)nt_time_to_unix_abs((NTTIME *)&i1->max_password_age));
+		 (int)nt_time_to_unix_abs(&i1->expire));
 
 	return 1;
 }
@@ -353,9 +331,8 @@
 
 static int account_set_minpwlen(TALLOC_CTX *mem_ctx,
 				struct rpc_sh_ctx *ctx,
-				struct samr_DomInfo1 *i1,
-				struct samr_DomInfo3 *i3,
-				struct samr_DomInfo12 *i12,
+				SAM_UNK_INFO_1 *i1, SAM_UNK_INFO_3 *i3,
+				SAM_UNK_INFO_12 *i12,
 				int argc, const char **argv)
 {
 	if (argc != 1) {
@@ -363,9 +340,9 @@
 		return -1;
 	}
 
-	i1->min_password_length = atoi(argv[0]);
+	i1->min_length_password = atoi(argv[0]);
 	d_printf("Setting minimum password length to %d\n",
-		 i1->min_password_length);
+		 i1->min_length_password);
 
 	return 1;
 }
@@ -381,9 +358,8 @@
 
 static int account_set_pwhistlen(TALLOC_CTX *mem_ctx,
 				 struct rpc_sh_ctx *ctx,
-				 struct samr_DomInfo1 *i1,
-				 struct samr_DomInfo3 *i3,
-				 struct samr_DomInfo12 *i12,
+				 SAM_UNK_INFO_1 *i1, SAM_UNK_INFO_3 *i3,
+				 SAM_UNK_INFO_12 *i12,
 				 int argc, const char **argv)
 {
 	if (argc != 1) {
@@ -391,9 +367,9 @@
 		return -1;
 	}
 
-	i1->password_history_length = atoi(argv[0]);
+	i1->password_history = atoi(argv[0]);
 	d_printf("Setting password history length to %d\n",
-		 i1->password_history_length);
+		 i1->password_history);
 
 	return 1;
 }

Modified: branches/samba/upstream/source/utils/net_rpc_shell.c
===================================================================
--- branches/samba/upstream/source/utils/net_rpc_shell.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_rpc_shell.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 
@@ -45,7 +46,7 @@
 	ADD_TO_ARRAY(NULL, char *, SMB_STRDUP(text), &cmds, &n_cmds);
 
 	for (c = this_ctx->cmds; c->name != NULL; c++) {
-		bool match = (strncmp(text, c->name, strlen(text)) == 0);
+		BOOL match = (strncmp(text, c->name, strlen(text)) == 0);
 
 		if (match) {
 			ADD_TO_ARRAY(NULL, char *, SMB_STRDUP(c->name),
@@ -92,7 +93,7 @@
 	return status;
 }
 
-static bool net_sh_process(struct rpc_sh_ctx *ctx,
+static BOOL net_sh_process(struct rpc_sh_ctx *ctx,
 			   int argc, const char **argv)
 {
 	struct rpc_sh_cmd *c;
@@ -218,10 +219,9 @@
 		return -1;
 	}
 
-	status = net_make_ipc_connection(0, &(ctx->cli));
-	if (!NT_STATUS_IS_OK(status)) {
-		d_fprintf(stderr, "Could not open connection: %s\n",
-			  nt_errstr(status));
+	ctx->cli = net_make_ipc_connection(0);
+	if (ctx->cli == NULL) {
+		d_fprintf(stderr, "Could not open connection\n");
 		return -1;
 	}
 
@@ -236,18 +236,16 @@
 	}
 
 	d_printf("Talking to domain %s (%s)\n", ctx->domain_name,
-		 sid_string_tos(ctx->domain_sid));
-
+		 sid_string_static(ctx->domain_sid));
+	
 	this_ctx = ctx;
 
 	while(1) {
-		char *prompt = NULL;
-		char *line = NULL;
+		char *prompt;
+		char *line;
 		int ret;
 
-		if (asprintf(&prompt, "%s> ", this_ctx->whoami) < 0) {
-			break;
-		}
+		asprintf(&prompt, "%s> ", this_ctx->whoami);
 
 		line = smb_readline(prompt, NULL, completion_fn);
 		SAFE_FREE(prompt);
@@ -258,22 +256,18 @@
 
 		ret = poptParseArgvString(line, &argc, &argv);
 		if (ret == POPT_ERROR_NOARG) {
-			SAFE_FREE(line);
 			continue;
 		}
 		if (ret != 0) {
 			d_fprintf(stderr, "cmdline invalid: %s\n",
 				  poptStrerror(ret));
-			SAFE_FREE(line);
 			return False;
 		}
 
 		if ((line[0] != '\n') &&
 		    (!net_sh_process(this_ctx, argc, argv))) {
-			SAFE_FREE(line);
 			break;
 		}
-		SAFE_FREE(line);
 	}
 
 	cli_shutdown(ctx->cli);

Modified: branches/samba/upstream/source/utils/net_sam.c
===================================================================
--- branches/samba/upstream/source/utils/net_sam.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_sam.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 
@@ -26,7 +27,7 @@
  */
 
 static int net_sam_userset(int argc, const char **argv, const char *field,
-			   bool (*fn)(struct samu *, const char *,
+			   BOOL (*fn)(struct samu *, const char *,
 				      enum pdb_value_state))
 {
 	struct samu *sam_acct = NULL;
@@ -41,7 +42,7 @@
 		return -1;
 	}
 
-	if (!lookup_name(talloc_tos(), argv[0], LOOKUP_NAME_LOCAL,
+	if (!lookup_name(tmp_talloc_ctx(), argv[0], LOOKUP_NAME_LOCAL,
 			 &dom, &name, &sid, &type)) {
 		d_fprintf(stderr, "Could not find name %s\n", argv[0]);
 		return -1;
@@ -138,7 +139,7 @@
 		return -1;
 	}
 
-	if (!lookup_name(talloc_tos(), argv[0], LOOKUP_NAME_LOCAL,
+	if (!lookup_name(tmp_talloc_ctx(), argv[0], LOOKUP_NAME_LOCAL,
 			 &dom, &name, &sid, &type)) {
 		d_fprintf(stderr, "Could not find name %s\n", argv[0]);
 		return -1;
@@ -222,7 +223,7 @@
 		return -1;
 	}
 
-	if (!lookup_name(talloc_tos(), argv[0], LOOKUP_NAME_LOCAL,
+	if (!lookup_name(tmp_talloc_ctx(), argv[0], LOOKUP_NAME_LOCAL,
 			 &dom, &name, &sid, &type)) {
 		d_fprintf(stderr, "Could not find name %s\n", argv[0]);
 		return -1;
@@ -283,7 +284,7 @@
 		return -1;
 	}
 
-	if (!lookup_name(talloc_tos(), argv[0], LOOKUP_NAME_LOCAL,
+	if (!lookup_name(tmp_talloc_ctx(), argv[0], LOOKUP_NAME_LOCAL,
 			 &dom, &name, &sid, &type)) {
 		d_fprintf(stderr, "Could not find name %s\n", argv[0]);
 		return -1;
@@ -362,8 +363,7 @@
 static int net_sam_policy_set(int argc, const char **argv)
 {
 	const char *account_policy = NULL;
-	uint32 value = 0;
-	uint32 old_value = 0;
+	uint32 value, old_value;
 	int field;
 	char *endptr;
 
@@ -410,20 +410,19 @@
 	if (!pdb_get_account_policy(field, &old_value)) {
 		d_fprintf(stderr, "Valid account policy, but unable to fetch "
 			  "value!\n");
-	} else {
-		d_printf("Account policy \"%s\" value was: %d\n", account_policy,
-			old_value);
 	}
 
 	if (!pdb_set_account_policy(field, value)) {
 		d_fprintf(stderr, "Valid account policy, but unable to "
 			  "set value!\n");
 		return -1;
-	} else {
-		d_printf("Account policy \"%s\" value is now: %d\n", account_policy,
-			value);
 	}
 
+	d_printf("Account policy \"%s\" value was: %d\n", account_policy,
+		 old_value);
+
+	d_printf("Account policy \"%s\" value is now: %d\n", account_policy,
+		 value);
 	return 0;
 }
 
@@ -504,197 +503,10 @@
         return net_run_function2(argc, argv, "net sam policy", func);
 }
 
-extern PRIVS privs[];
-
-static int net_sam_rights_list(int argc, const char **argv)
-{
-	SE_PRIV mask;
-
-	if (argc > 1) {
-		d_fprintf(stderr, "usage: net sam rights list [privilege name]\n");
-		return -1;
-	}
-
-	if (argc == 0) {
-		int i;
-		int num = count_all_privileges();
-
-		for (i=0; i<num; i++) {
-			d_printf("%s\n", privs[i].name);
-		}
-		return 0;
-	}
-
-	if (se_priv_from_name(argv[0], &mask)) {
-		DOM_SID *sids;
-		int i, num_sids;
-		NTSTATUS status;
-
-		status = privilege_enum_sids(&mask, talloc_tos(),
-					     &sids, &num_sids);
-		if (!NT_STATUS_IS_OK(status)) {
-			d_fprintf(stderr, "Could not list rights: %s\n",
-				  nt_errstr(status));
-			return -1;
-		}
-
-		for (i=0; i<num_sids; i++) {
-			const char *dom, *name;
-			enum lsa_SidType type;
-
-			if (lookup_sid(talloc_tos(), &sids[i], &dom, &name,
-				       &type)) {
-				d_printf("%s\\%s\n", dom, name);
-			}
-			else {
-				d_printf("%s\n", sid_string_tos(&sids[i]));
-			}
-		}
-		return 0;
-	}
-
-	return -1;
-}
-
-static int net_sam_rights_grant(int argc, const char **argv)
-{
-	DOM_SID sid;
-	enum lsa_SidType type;
-	const char *dom, *name;
-	SE_PRIV mask;
-
-	if (argc != 2) {
-		d_fprintf(stderr, "usage: net sam rights grant <name> "
-			  "<right>\n");
-		return -1;
-	}
-
-	if (!lookup_name(talloc_tos(), argv[0], LOOKUP_NAME_LOCAL,
-			 &dom, &name, &sid, &type)) {
-		d_fprintf(stderr, "Could not find name %s\n", argv[0]);
-		return -1;
-	}
-
-	if (!se_priv_from_name(argv[1], &mask)) {
-		d_fprintf(stderr, "%s unknown\n", argv[1]);
-		return -1;
-	}
-
-	if (!grant_privilege(&sid, &mask)) {
-		d_fprintf(stderr, "Could not grant privilege\n");
-		return -1;
-	}
-
-	d_printf("Granted %s to %s\\%s\n", argv[1], dom, name);
-	return 0;
-}
-
-static int net_sam_rights_revoke(int argc, const char **argv)
-{
-	DOM_SID sid;
-	enum lsa_SidType type;
-	const char *dom, *name;
-	SE_PRIV mask;
-
-	if (argc != 2) {
-		d_fprintf(stderr, "usage: net sam rights revoke <name> "
-			  "<right>\n");
-		return -1;
-	}
-
-	if (!lookup_name(talloc_tos(), argv[0], LOOKUP_NAME_LOCAL,
-			 &dom, &name, &sid, &type)) {
-		d_fprintf(stderr, "Could not find name %s\n", argv[0]);
-		return -1;
-	}
-
-	if (!se_priv_from_name(argv[1], &mask)) {
-		d_fprintf(stderr, "%s unknown\n", argv[1]);
-		return -1;
-	}
-
-	if (!revoke_privilege(&sid, &mask)) {
-		d_fprintf(stderr, "Could not revoke privilege\n");
-		return -1;
-	}
-
-	d_printf("Revoked %s from %s\\%s\n", argv[1], dom, name);
-	return 0;
-}
-
-static int net_sam_rights(int argc, const char **argv)
-{
-	struct functable2 func[] = {
-		{ "list", net_sam_rights_list,
-		  "List possible user rights" },
-		{ "grant", net_sam_rights_grant,
-		  "Grant a right" },
-		{ "revoke", net_sam_rights_revoke,
-		  "Revoke a right" },
-		{ NULL }
-	};
-        return net_run_function2(argc, argv, "net sam rights", func);
-}
-
 /*
  * Map a unix group to a domain group
  */
 
-static NTSTATUS map_unix_group(const struct group *grp, GROUP_MAP *pmap)
-{
-	NTSTATUS status;
-	GROUP_MAP map;
-	const char *grpname, *dom, *name;
-	uint32 rid;
-
-	if (pdb_getgrgid(&map, grp->gr_gid)) {
-		return NT_STATUS_GROUP_EXISTS;
-	}
-
-	map.gid = grp->gr_gid;
-	grpname = grp->gr_name;
-
-	if (lookup_name(talloc_tos(), grpname, LOOKUP_NAME_LOCAL,
-			&dom, &name, NULL, NULL)) {
-
-		const char *tmp = talloc_asprintf(
-			talloc_tos(), "Unix Group %s", grp->gr_name);
-
-		DEBUG(5, ("%s exists as %s\\%s, retrying as \"%s\"\n",
-			  grpname, dom, name, tmp));
-		grpname = tmp;
-	}
-
-	if (lookup_name(talloc_tos(), grpname, LOOKUP_NAME_LOCAL,
-			NULL, NULL, NULL, NULL)) {
-		DEBUG(3, ("\"%s\" exists, can't map it\n", grp->gr_name));
-		return NT_STATUS_GROUP_EXISTS;
-	}
-
-	fstrcpy(map.nt_name, grpname);
-
-	if (pdb_rid_algorithm()) {
-		rid = algorithmic_pdb_gid_to_group_rid( grp->gr_gid );
-	} else {
-		if (!pdb_new_rid(&rid)) {
-			DEBUG(3, ("Could not get a new RID for %s\n",
-				  grp->gr_name));
-			return NT_STATUS_ACCESS_DENIED;
-		}
-	}
-
-	sid_compose(&map.sid, get_global_sam_sid(), rid);
-	map.sid_name_use = SID_NAME_DOM_GRP;
-	fstrcpy(map.comment, talloc_asprintf(talloc_tos(), "Unix Group %s",
-					     grp->gr_name));
-
-	status = pdb_add_group_mapping_entry(&map);
-	if (NT_STATUS_IS_OK(status)) {
-		*pmap = map;
-	}
-	return status;
-}
-
 static int net_sam_mapunixgroup(int argc, const char **argv)
 {
 	NTSTATUS status;
@@ -721,73 +533,12 @@
 	}
 
 	d_printf("Mapped unix group %s to SID %s\n", argv[0],
-		 sid_string_tos(&map.sid));
+		 sid_string_static(&map.sid));
 
 	return 0;
 }
 
 /*
- * Remove a group mapping
- */
-
-static NTSTATUS unmap_unix_group(const struct group *grp, GROUP_MAP *pmap)
-{
-        NTSTATUS status;
-        GROUP_MAP map;
-        const char *grpname;
-        DOM_SID dom_sid;
-
-        map.gid = grp->gr_gid;
-        grpname = grp->gr_name;
-
-        if (!lookup_name(talloc_tos(), grpname, LOOKUP_NAME_LOCAL,
-                        NULL, NULL, NULL, NULL)) {
-                DEBUG(3, ("\"%s\" does not exist, can't unmap it\n", grp->gr_name));
-                return NT_STATUS_NO_SUCH_GROUP;
-        }
-
-        fstrcpy(map.nt_name, grpname);
-
-        if (!pdb_gid_to_sid(map.gid, &dom_sid)) {
-                return NT_STATUS_UNSUCCESSFUL;
-        }
-
-        status = pdb_delete_group_mapping_entry(dom_sid);
-
-        return status;
-}
-
-static int net_sam_unmapunixgroup(int argc, const char **argv)
-{
-	NTSTATUS status;
-	GROUP_MAP map;
-	struct group *grp;
-
-	if (argc != 1) {
-		d_fprintf(stderr, "usage: net sam unmapunixgroup <name>\n");
-		return -1;
-	}
-
-	grp = getgrnam(argv[0]);
-	if (grp == NULL) {
-		d_fprintf(stderr, "Could not find mapping for group %s.\n", argv[0]);
-		return -1;
-	}
-
-	status = unmap_unix_group(grp, &map);
-
-	if (!NT_STATUS_IS_OK(status)) {
-		d_fprintf(stderr, "Unmapping group %s failed with %s.\n",
-			  argv[0], nt_errstr(status));
-		return -1;
-	}
-
-	d_printf("Unmapped unix group %s.\n", argv[0]);
-
-	return 0;
-}
-
-/*
  * Create a local group
  */
 
@@ -821,47 +572,6 @@
 }
 
 /*
- * Delete a local group
- */
-
-static int net_sam_deletelocalgroup(int argc, const char **argv)
-{
-	DOM_SID sid;
-        enum lsa_SidType type;
-        const char *dom, *name;
-	NTSTATUS status;
-
-	if (argc != 1) {
-		d_fprintf(stderr, "usage: net sam deletelocalgroup <name>\n");
-		return -1;
-	}
-
-	if (!lookup_name(talloc_tos(), argv[0], LOOKUP_NAME_LOCAL,
-			 &dom, &name, &sid, &type)) {
-		d_fprintf(stderr, "Could not find %s.\n", argv[0]);
-		return -1;
-	}
-
-	if (type != SID_NAME_ALIAS) {
-		d_fprintf(stderr, "%s is a %s, not a local group.\n", argv[0],
-			  sid_type_lookup(type));
-		return -1;
-	}
-
-	status = pdb_delete_alias(&sid);
-
-	if (!NT_STATUS_IS_OK(status)) {
-                d_fprintf(stderr, "Deleting local group %s failed with %s\n",
-                          argv[0], nt_errstr(status));
-                return -1;
-        }
-
-	d_printf("Deleted local group %s.\n", argv[0]);
-
-	return 0;
-}
-
-/*
  * Create a local group
  */
 
@@ -889,7 +599,7 @@
 	fstrcpy( groupname, "BUILTIN\\" );
 	fstrcat( groupname, argv[0] );
 	
-	if ( !lookup_name(talloc_tos(), groupname, LOOKUP_NAME_ALL, NULL,
+	if ( !lookup_name(tmp_talloc_ctx(), groupname, LOOKUP_NAME_ALL, NULL,
 			  NULL, &sid, &type)) {
 		d_fprintf(stderr, "%s is not a BUILTIN group\n", argv[0]);
 		return -1;
@@ -929,7 +639,7 @@
 		return -1;
 	}
 
-	if (!lookup_name(talloc_tos(), argv[0], LOOKUP_NAME_LOCAL,
+	if (!lookup_name(tmp_talloc_ctx(), argv[0], LOOKUP_NAME_LOCAL,
 			 &groupdomain, &groupname, &group, &grouptype)) {
 		d_fprintf(stderr, "Could not find group %s\n", argv[0]);
 		return -1;
@@ -937,7 +647,7 @@
 
 	/* check to see if the member to be added is a name or a SID */
 
-	if (!lookup_name(talloc_tos(), argv[1], LOOKUP_NAME_LOCAL,
+	if (!lookup_name(tmp_talloc_ctx(), argv[1], LOOKUP_NAME_LOCAL,
 			 &memberdomain, &membername, &member, &membertype))
 	{
 		/* try it as a SID */
@@ -947,7 +657,7 @@
 			return -1;
 		}
 
-		if ( !lookup_sid(talloc_tos(), &member, &memberdomain,
+		if ( !lookup_sid(tmp_talloc_ctx(), &member, &memberdomain, 
 			&membername, &membertype) ) 
 		{
 			d_fprintf(stderr, "Could not resolve SID %s\n", argv[1]);
@@ -1002,13 +712,13 @@
 		return -1;
 	}
 
-	if (!lookup_name(talloc_tos(), argv[0], LOOKUP_NAME_LOCAL,
+	if (!lookup_name(tmp_talloc_ctx(), argv[0], LOOKUP_NAME_LOCAL,
 			 &groupdomain, &groupname, &group, &grouptype)) {
 		d_fprintf(stderr, "Could not find group %s\n", argv[0]);
 		return -1;
 	}
 
-	if (!lookup_name(talloc_tos(), argv[1], LOOKUP_NAME_LOCAL,
+	if (!lookup_name(tmp_talloc_ctx(), argv[1], LOOKUP_NAME_LOCAL,
 			 &memberdomain, &membername, &member, NULL)) {
 		if (!string_to_sid(&member, argv[1])) {
 			d_fprintf(stderr, "Could not find member %s\n",
@@ -1038,7 +748,7 @@
 			 memberdomain, membername, groupdomain, groupname);
 	} else {
 		d_printf("Deleted %s from %s\\%s\n",
-			 sid_string_tos(&member), groupdomain, groupname);
+			 sid_string_static(&member), groupdomain, groupname);
 	}
 
 	return 0;
@@ -1060,7 +770,7 @@
 		return -1;
 	}
 
-	if (!lookup_name(talloc_tos(), argv[0], LOOKUP_NAME_LOCAL,
+	if (!lookup_name(tmp_talloc_ctx(), argv[0], LOOKUP_NAME_LOCAL,
 			 &groupdomain, &groupname, &group, &grouptype)) {
 		d_fprintf(stderr, "Could not find group %s\n", argv[0]);
 		return -1;
@@ -1083,15 +793,14 @@
 			 (unsigned int)num_members);
 		for (i=0; i<num_members; i++) {
 			const char *dom, *name;
-			if (lookup_sid(talloc_tos(), &members[i],
+			if (lookup_sid(tmp_talloc_ctx(), &members[i],
 				       &dom, &name, NULL)) {
 				d_printf(" %s\\%s\n", dom, name);
 			} else {
-				d_printf(" %s\n", sid_string_tos(&members[i]));
+				d_printf(" %s\n",
+					 sid_string_static(&members[i]));
 			}
 		}
-
-		TALLOC_FREE(members);
 	} else {
 		d_fprintf(stderr, "Can only list local group members so far.\n"
 			  "%s is a %s\n", argv[0], sid_type_lookup(grouptype));
@@ -1107,7 +816,7 @@
 static int net_sam_do_list(int argc, const char **argv,
 			   struct pdb_search *search, const char *what)
 {
-	bool verbose = (argc == 1);
+	BOOL verbose = (argc == 1);
 
 	if ((argc > 1) ||
 	    ((argc == 1) && !strequal(argv[0], "verbose"))) {
@@ -1135,7 +844,7 @@
 		}
 	}
 
-	pdb_search_destroy(search);
+	search->search_end(search);
 	return 0;
 }
 
@@ -1209,14 +918,14 @@
 		return -1;
 	}
 
-	if (!lookup_name(talloc_tos(), argv[0], LOOKUP_NAME_LOCAL,
+	if (!lookup_name(tmp_talloc_ctx(), argv[0], LOOKUP_NAME_LOCAL,
 			 &dom, &name, &sid, &type)) {
 		d_fprintf(stderr, "Could not find name %s\n", argv[0]);
 		return -1;
 	}
 
 	d_printf("%s\\%s is a %s with SID %s\n", dom, name,
-		 sid_type_lookup(type), sid_string_tos(&sid));
+		 sid_type_lookup(type), sid_string_static(&sid));
 
 	return 0;
 }
@@ -1281,7 +990,7 @@
 		goto failed;
 	}
 
-	if (!NT_STATUS_IS_OK(smbldap_init(tc, NULL, ldap_uri, &ls))) {
+	if (!NT_STATUS_IS_OK(smbldap_init(tc, ldap_uri, &ls))) {
 		d_fprintf(stderr, "Unable to connect to the LDAP server.\n");
 		goto failed;
 	}
@@ -1323,8 +1032,7 @@
 		smbldap_set_mod(&mods, LDAP_MOD_ADD, "cn", uname);
 		smbldap_set_mod(&mods, LDAP_MOD_ADD, "displayName", wname);
 		smbldap_set_mod(&mods, LDAP_MOD_ADD, "gidNumber", gidstr);
-		smbldap_set_mod(&mods, LDAP_MOD_ADD, "sambaSid",
-				sid_string_talloc(tc, &gsid));
+		smbldap_set_mod(&mods, LDAP_MOD_ADD, "sambaSid", sid_string_static(&gsid));
 		smbldap_set_mod(&mods, LDAP_MOD_ADD, "sambaGroupType", gtype);
 
 		talloc_autofree_ldapmod(tc, mods);
@@ -1378,8 +1086,7 @@
 		smbldap_set_mod(&mods, LDAP_MOD_ADD, "cn", uname);
 		smbldap_set_mod(&mods, LDAP_MOD_ADD, "displayName", wname);
 		smbldap_set_mod(&mods, LDAP_MOD_ADD, "gidNumber", gidstr);
-		smbldap_set_mod(&mods, LDAP_MOD_ADD, "sambaSid",
-				sid_string_talloc(tc, &gsid));
+		smbldap_set_mod(&mods, LDAP_MOD_ADD, "sambaSid", sid_string_static(&gsid));
 		smbldap_set_mod(&mods, LDAP_MOD_ADD, "sambaGroupType", gtype);
 
 		talloc_autofree_ldapmod(tc, mods);
@@ -1456,8 +1163,7 @@
 		smbldap_set_mod(&mods, LDAP_MOD_ADD, "gidNumber", gidstr);
 		smbldap_set_mod(&mods, LDAP_MOD_ADD, "homeDirectory", dir);
 		smbldap_set_mod(&mods, LDAP_MOD_ADD, "loginShell", shell);
-		smbldap_set_mod(&mods, LDAP_MOD_ADD, "sambaSID",
-				sid_string_talloc(tc, &sid));
+		smbldap_set_mod(&mods, LDAP_MOD_ADD, "sambaSID", sid_string_static(&sid));
 		smbldap_set_mod(&mods, LDAP_MOD_ADD, "sambaAcctFlags",
 				pdb_encode_acct_ctrl(ACB_NORMAL|ACB_DISABLED,
 				NEW_PW_FORMAT_SPACE_PADDED_LEN));
@@ -1540,8 +1246,7 @@
 		if ((pwd->pw_shell != NULL) && (pwd->pw_shell[0] != '\0')) {
 			smbldap_set_mod(&mods, LDAP_MOD_ADD, "loginShell", pwd->pw_shell);
 		}
-		smbldap_set_mod(&mods, LDAP_MOD_ADD, "sambaSID",
-				sid_string_talloc(tc, &sid));
+		smbldap_set_mod(&mods, LDAP_MOD_ADD, "sambaSID", sid_string_static(&sid));
 		smbldap_set_mod(&mods, LDAP_MOD_ADD, "sambaAcctFlags",
 				pdb_encode_acct_ctrl(ACB_NORMAL|ACB_DISABLED,
 				NEW_PW_FORMAT_SPACE_PADDED_LEN));
@@ -1600,8 +1305,7 @@
 		smbldap_set_mod(&mods, LDAP_MOD_ADD, "cn", uname);
 		smbldap_set_mod(&mods, LDAP_MOD_ADD, "displayName", wname);
 		smbldap_set_mod(&mods, LDAP_MOD_ADD, "gidNumber", gidstr);
-		smbldap_set_mod(&mods, LDAP_MOD_ADD, "sambaSid",
-				sid_string_talloc(tc, &gsid));
+		smbldap_set_mod(&mods, LDAP_MOD_ADD, "sambaSid", sid_string_static(&gsid));
 		smbldap_set_mod(&mods, LDAP_MOD_ADD, "sambaGroupType", gtype);
 
 		talloc_autofree_ldapmod(tc, mods);
@@ -1637,12 +1341,8 @@
 		  "Create a new BUILTIN group" },
 		{ "createlocalgroup", net_sam_createlocalgroup,
 		  "Create a new local group" },
-		{ "deletelocalgroup", net_sam_deletelocalgroup,
-		  "Delete an existing local group" },
 		{ "mapunixgroup", net_sam_mapunixgroup,
 		  "Map a unix group to a domain group" },
-		{ "unmapunixgroup", net_sam_unmapunixgroup,
-		  "Remove a group mapping of an unix group to a domain group" },
 		{ "addmem", net_sam_addmem,
 		  "Add a member to a group" },
 		{ "delmem", net_sam_delmem,
@@ -1657,8 +1357,6 @@
 		  "Set details of a SAM account" },
 		{ "policy", net_sam_policy,
 		  "Set account policies" },
-		{ "rights", net_sam_rights,
-		  "Manipulate user privileges" },
 #ifdef HAVE_LDAP
 		{ "provision", net_sam_provision,
 		  "Provision a clean User Database" },
@@ -1666,9 +1364,11 @@
 		{ NULL, NULL, NULL }
 	};
 
+	/* we shouldn't have silly checks like this */
 	if (getuid() != 0) {
-		d_fprintf(stderr, "You are not root, most things won't "
-			  "work\n");
+		d_fprintf(stderr, "You must be root to edit the SAM "
+			  "directly.\n");
+		return -1;
 	}
 	
 	return net_run_function2(argc, argv, "net sam", func);

Modified: branches/samba/upstream/source/utils/net_status.c
===================================================================
--- branches/samba/upstream/source/utils/net_status.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_status.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #include "includes.h"
 #include "utils/net.h"
@@ -22,7 +23,7 @@
 static int show_session(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf,
 			void *state)
 {
-	bool *parseable = (bool *)state;
+	BOOL *parseable = (BOOL *)state;
 	struct sessionid sessionid;
 
 	if (dbuf.dsize != sizeof(sessionid))
@@ -30,18 +31,18 @@
 
 	memcpy(&sessionid, dbuf.dptr, sizeof(sessionid));
 
-	if (!process_exists(sessionid.pid)) {
+	if (!process_exists_by_pid(sessionid.pid)) {
 		return 0;
 	}
 
 	if (*parseable) {
-		d_printf("%s\\%s\\%s\\%s\\%s\n",
-			 procid_str_static(&sessionid.pid), uidtoname(sessionid.uid),
+		d_printf("%d\\%s\\%s\\%s\\%s\n",
+			 (int)sessionid.pid, uidtoname(sessionid.uid),
 			 gidtoname(sessionid.gid), 
 			 sessionid.remote_machine, sessionid.hostname);
 	} else {
-		d_printf("%7s   %-12s  %-12s  %-12s (%s)\n",
-			 procid_str_static(&sessionid.pid), uidtoname(sessionid.uid),
+		d_printf("%5d   %-12s  %-12s  %-12s (%s)\n",
+			 (int)sessionid.pid, uidtoname(sessionid.uid),
 			 gidtoname(sessionid.gid), 
 			 sessionid.remote_machine, sessionid.hostname);
 	}
@@ -52,7 +53,7 @@
 static int net_status_sessions(int argc, const char **argv)
 {
 	TDB_CONTEXT *tdb;
-	bool parseable;
+	BOOL parseable;
 
 	if (argc == 0) {
 		parseable = False;
@@ -83,22 +84,27 @@
 	return 0;
 }
 
-static int show_share(struct db_record *rec,
-		      const struct connections_key *key,
-		      const struct connections_data *crec,
+static int show_share(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf,
 		      void *state)
 {
-	if (crec->cnum == -1)
+	struct connections_data crec;
+
+	if (dbuf.dsize != sizeof(crec))
 		return 0;
 
-	if (!process_exists(crec->pid)) {
+	memcpy(&crec, dbuf.dptr, sizeof(crec));
+
+	if (crec.cnum == -1)
 		return 0;
+
+	if (!process_exists(crec.pid)) {
+		return 0;
 	}
 
 	d_printf("%-10.10s   %s   %-12s  %s",
-	       crec->servicename, procid_str_static(&crec->pid),
-	       crec->machine,
-	       time_to_asc(crec->start));
+	       crec.servicename,procid_str_static(&crec.pid),
+	       crec.machine,
+	       time_to_asc(crec.start));
 
 	return 0;
 }
@@ -119,7 +125,7 @@
 
 	memcpy(&sessionid, dbuf.dptr, sizeof(sessionid));
 
-	if (!process_exists(sessionid.pid)) 
+	if (!process_exists_by_pid(sessionid.pid)) 
 		return 0;
 
 	ids->num_entries += 1;
@@ -133,37 +139,41 @@
 	return 0;
 }
 
-static int show_share_parseable(struct db_record *rec,
-				const struct connections_key *key,
-				const struct connections_data *crec,
+static int show_share_parseable(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf,
 				void *state)
 {
 	struct sessionids *ids = (struct sessionids *)state;
+	struct connections_data crec;
 	int i;
-	bool guest = True;
+	BOOL guest = True;
 
-	if (crec->cnum == -1)
+	if (dbuf.dsize != sizeof(crec))
 		return 0;
 
-	if (!process_exists(crec->pid)) {
+	memcpy(&crec, dbuf.dptr, sizeof(crec));
+
+	if (crec.cnum == -1)
 		return 0;
+
+	if (!process_exists(crec.pid)) {
+		return 0;
 	}
 
 	for (i=0; i<ids->num_entries; i++) {
-		struct server_id id = ids->entries[i].pid;
-		if (procid_equal(&id, &crec->pid)) {
+		struct process_id id = pid_to_procid(ids->entries[i].pid);
+		if (procid_equal(&id, &crec.pid)) {
 			guest = False;
 			break;
 		}
 	}
 
 	d_printf("%s\\%s\\%s\\%s\\%s\\%s\\%s",
-		 crec->servicename,procid_str_static(&crec->pid),
+		 crec.servicename,procid_str_static(&crec.pid),
 		 guest ? "" : uidtoname(ids->entries[i].uid),
 		 guest ? "" : gidtoname(ids->entries[i].gid),
-		 crec->machine, 
+		 crec.machine, 
 		 guest ? "" : ids->entries[i].hostname,
-		 time_to_asc(crec->start));
+		 time_to_asc(crec.start));
 
 	return 0;
 }
@@ -187,8 +197,19 @@
 	tdb_traverse(tdb, collect_pid, &ids);
 	tdb_close(tdb);
 
-	connections_forall(show_share_parseable, &ids);
+	tdb = tdb_open_log(lock_path("connections.tdb"), 0,
+			   TDB_DEFAULT, O_RDONLY, 0);
 
+	if (tdb == NULL) {
+		d_fprintf(stderr, "%s not initialised\n", lock_path("connections.tdb"));
+		d_fprintf(stderr, "This is normal if no SMB client has ever "
+			 "connected to your server.\n");
+		return -1;
+	}
+
+	tdb_traverse(tdb, show_share_parseable, &ids);
+	tdb_close(tdb);
+
 	SAFE_FREE(ids.entries);
 
 	return 0;
@@ -196,6 +217,8 @@
 
 static int net_status_shares(int argc, const char **argv)
 {
+	TDB_CONTEXT *tdb;
+
 	if (argc == 0) {
 
 		d_printf("\nService      pid     machine       "
@@ -203,8 +226,20 @@
 		d_printf("-------------------------------------"
 			 "------------------\n");
 
-		connections_forall(show_share, NULL);
+		tdb = tdb_open_log(lock_path("connections.tdb"), 0,
+				   TDB_DEFAULT, O_RDONLY, 0);
 
+		if (tdb == NULL) {
+			d_fprintf(stderr, "%s not initialised\n",
+				 lock_path("connections.tdb"));
+			d_fprintf(stderr, "This is normal if no SMB client has "
+				 "ever connected to your server.\n");
+			return -1;
+		}
+
+		tdb_traverse(tdb, show_share, NULL);
+		tdb_close(tdb);
+
 		return 0;
 	}
 

Modified: branches/samba/upstream/source/utils/net_time.c
===================================================================
--- branches/samba/upstream/source/utils/net_time.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_time.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #include "includes.h"
 #include "utils/net.h"
@@ -23,7 +24,7 @@
 /*
   return the time on a server. This does not require any authentication
 */
-static time_t cli_servertime(const char *host, struct sockaddr_storage *pss, int *zone)
+static time_t cli_servertime(const char *host, struct in_addr *ip, int *zone)
 {
 	struct nmb_name calling, called;
 	time_t ret = 0;
@@ -35,7 +36,7 @@
 		goto done;
 	}
 
-	status = cli_connect(cli, host, pss);
+	status = cli_connect(cli, host, ip);
 	if (!NT_STATUS_IS_OK(status)) {
 		fprintf(stderr,"Can't contact server %s. Error %s\n", host, nt_errstr(status));
 		goto done;
@@ -83,9 +84,9 @@
 	if (!tm) {
 		return "unknown";
 	}
-
-	fstr_sprintf(s, "%02d%02d%02d%02d%04d.%02d",
-		 tm->tm_mon+1, tm->tm_mday, tm->tm_hour,
+	
+	fstr_sprintf(s, "%02d%02d%02d%02d%04d.%02d", 
+		 tm->tm_mon+1, tm->tm_mday, tm->tm_hour, 
 		 tm->tm_min, tm->tm_year + 1900, tm->tm_sec);
 	return s;
 }
@@ -110,8 +111,8 @@
 	int result;
 
 	if (t == 0) return -1;
-
-	/* yes, I know this is cheesy. Use "net time system" if you want to
+	
+	/* yes, I know this is cheesy. Use "net time system" if you want to 
 	   roll your own. I'm putting this in as it works on a large number
 	   of systems and the user has a choice in whether its used or not */
 	asprintf(&cmd, "/bin/date %s", systime(t));

Modified: branches/samba/upstream/source/utils/net_usershare.c
===================================================================
--- branches/samba/upstream/source/utils/net_usershare.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_usershare.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #include "includes.h"
 #include "utils/net.h"
@@ -41,7 +42,7 @@
 
 static const char *get_us_error_code(enum usershare_err us_err)
 {
-	char *result;
+	static pstring out;
 	int idx = 0;
 
 	while (us_errs[idx].us_errstr != NULL) {
@@ -51,10 +52,8 @@
 		idx++;
 	}
 
-	result = talloc_asprintf(talloc_tos(), "Usershare error code (0x%x)",
-				 (unsigned int)us_err);
-	SMB_ASSERT(result != NULL);
-	return result;
+	slprintf(out, sizeof(out), "Usershare error code (0x%x)", (unsigned int)us_err);
+	return out;
 }
 
 /* The help subsystem for the USERSHARE subcommand */
@@ -127,17 +126,12 @@
 /***************************************************************************
 ***************************************************************************/
 
-static char *get_basepath(TALLOC_CTX *ctx)
+static void get_basepath(pstring basepath)
 {
-	char *basepath = talloc_strdup(ctx, lp_usershare_path());
-
-	if (!basepath) {
-		return NULL;
-	}
+	pstrcpy(basepath, lp_usershare_path());
 	if ((basepath[0] != '\0') && (basepath[strlen(basepath)-1] == '/')) {
 		basepath[strlen(basepath)-1] = '\0';
 	}
-	return basepath;
 }
 
 /***************************************************************************
@@ -146,7 +140,7 @@
 
 static int net_usershare_delete(int argc, const char **argv)
 {
-	char *us_path;
+	pstring us_path;
 	char *sharename;
 
 	if (argc != 1) {
@@ -166,14 +160,9 @@
 		return -1;
 	}
 
-	us_path = talloc_asprintf(talloc_tos(),
-				"%s/%s",
-				lp_usershare_path(),
-				sharename);
-	if (!us_path) {
-		SAFE_FREE(sharename);
-		return -1;
-	}
+	pstrcpy(us_path, lp_usershare_path());
+	pstrcat(us_path, "/");
+	pstrcat(us_path, sharename);
 
 	if (unlink(us_path) != 0) {
 		d_fprintf(stderr, "net usershare delete: unable to remove usershare %s. "
@@ -200,17 +189,15 @@
 /***************************************************************************
 ***************************************************************************/
 
-static int get_share_list(TALLOC_CTX *ctx, const char *wcard, bool only_ours)
+static int get_share_list(TALLOC_CTX *ctx, const char *wcard, BOOL only_ours)
 {
 	SMB_STRUCT_DIR *dp;
 	SMB_STRUCT_DIRENT *de;
 	uid_t myuid = geteuid();
 	struct file_list *fl = NULL;
-	char *basepath = get_basepath(ctx);
+	pstring basepath;
 
-	if (!basepath) {
-		return -1;
-	}
+	get_basepath(basepath);
 	dp = sys_opendir(basepath);
 	if (!dp) {
 		d_fprintf(stderr, "get_share_list: cannot open usershare directory %s. Error %s\n",
@@ -220,7 +207,7 @@
 
 	while((de = sys_readdir(dp)) != 0) {
 		SMB_STRUCT_STAT sbuf;
-		char *path;
+		pstring path;
 		const char *n = de->d_name;
 
 		/* Ignore . and .. */
@@ -234,14 +221,9 @@
 			d_fprintf(stderr, "get_share_list: ignoring bad share name %s\n",n);
 			continue;
 		}
-		path = talloc_asprintf(ctx,
-					"%s/%s",
-					basepath,
-					n);
-		if (!path) {
-			sys_closedir(dp);
-			return -1;
-		}
+		pstrcpy(path, basepath);
+		pstrcat(path, "/");
+		pstrcat(path, n);
 
 		if (sys_lstat(path, &sbuf) != 0) {
 			d_fprintf(stderr, "get_share_list: can't lstat file %s. Error was %s\n",
@@ -263,15 +245,13 @@
 			continue;
 		}
 
-		/* (Finally) - add to list. */
+		/* (Finally) - add to list. */ 
 		fl = TALLOC_P(ctx, struct file_list);
 		if (!fl) {
-			sys_closedir(dp);
 			return -1;
 		}
 		fl->pathname = talloc_strdup(ctx, n);
 		if (!fl->pathname) {
-			sys_closedir(dp);
 			return -1;
 		}
 
@@ -318,28 +298,21 @@
 	int fd = -1;
 	int numlines = 0;
 	SEC_DESC *psd = NULL;
-	char *basepath;
-	char *sharepath = NULL;
-	char *comment = NULL;
-	char *acl_str;
+	pstring basepath;
+	pstring sharepath;
+	pstring comment;
+	pstring acl_str;
 	int num_aces;
 	char sep_str[2];
 	enum usershare_err us_err;
-	bool guest_ok = False;
+	BOOL guest_ok = False;
 
 	sep_str[0] = *lp_winbind_separator();
 	sep_str[1] = '\0';
 
-	basepath = get_basepath(ctx);
-	if (!basepath) {
-		return -1;
-	}
-	basepath = talloc_asprintf_append(basepath,
-			"/%s",
-			fl->pathname);
-	if (!basepath) {
-		return -1;
-	}
+	get_basepath(basepath);
+	pstrcat(basepath, "/");
+	pstrcat(basepath, fl->pathname);
 
 #ifdef O_NOFOLLOW
 	fd = sys_open(basepath, O_RDONLY|O_NOFOLLOW, 0);
@@ -377,8 +350,8 @@
 
 	/* Ensure it's well formed. */
 	us_err = parse_usershare_file(ctx, &sbuf, fl->pathname, -1, lines, numlines,
-				&sharepath,
-				&comment,
+				sharepath,
+				comment,
 				&psd,
 				&guest_ok);
 
@@ -392,10 +365,7 @@
 		return -1;
 	}
 
-	acl_str = talloc_strdup(ctx, "usershare_acl=");
-	if (!acl_str) {
-		return -1;
-	}
+	pstrcpy(acl_str, "usershare_acl=");
 
 	for (num_aces = 0; num_aces < psd->dacl->num_aces; num_aces++) {
 		const char *domain;
@@ -406,54 +376,30 @@
 
 		if (NT_STATUS_IS_OK(ntstatus)) {
 			if (domain && *domain) {
-				acl_str = talloc_asprintf_append(acl_str,
-						"%s%s",
-						domain,
-						sep_str);
-				if (!acl_str) {
-					return -1;
-				}
+				pstrcat(acl_str, domain);
+				pstrcat(acl_str, sep_str);
 			}
-			acl_str = talloc_asprintf_append(acl_str,
-						"%s",
-						name);
-			if (!acl_str) {
-				return -1;
-			}
-
+			pstrcat(acl_str,name);
 		} else {
 			fstring sidstr;
-			sid_to_fstring(sidstr,
-				       &psd->dacl->aces[num_aces].trustee);
-			acl_str = talloc_asprintf_append(acl_str,
-						"%s",
-						sidstr);
-			if (!acl_str) {
-				return -1;
-			}
+			sid_to_string(sidstr, &psd->dacl->aces[num_aces].trustee);
+			pstrcat(acl_str,sidstr);
 		}
-		acl_str = talloc_asprintf_append(acl_str, ":");
-		if (!acl_str) {
-			return -1;
-		}
+		pstrcat(acl_str, ":");
 
 		if (psd->dacl->aces[num_aces].type == SEC_ACE_TYPE_ACCESS_DENIED) {
-			acl_str = talloc_asprintf_append(acl_str, "D,");
-			if (!acl_str) {
-				return -1;
-			}
+			pstrcat(acl_str, "D,");
 		} else {
 			if (psd->dacl->aces[num_aces].access_mask & GENERIC_ALL_ACCESS) {
-				acl_str = talloc_asprintf_append(acl_str, "F,");
+				pstrcat(acl_str, "F,");
 			} else {
-				acl_str = talloc_asprintf_append(acl_str, "R,");
+				pstrcat(acl_str, "R,");
 			}
-			if (!acl_str) {
-				return -1;
-			}
 		}
 	}
 
+	acl_str[strlen(acl_str)-1] = '\0';
+
 	if (pi->op == US_INFO_OP) {
 		d_printf("[%s]\n", fl->pathname );
 		d_printf("path=%s\n", sharepath );
@@ -474,7 +420,7 @@
 static int net_usershare_info(int argc, const char **argv)
 {
 	fstring wcard;
-	bool only_ours = True;
+	BOOL only_ours = True;
 	int ret = -1;
 	struct us_priv_info pi;
 	TALLOC_CTX *ctx;
@@ -519,14 +465,10 @@
 {
 	SMB_STRUCT_DIR *dp;
 	SMB_STRUCT_DIRENT *de;
+	pstring basepath;
 	int num_usershares = 0;
-	TALLOC_CTX *ctx = talloc_tos();
-	char *basepath = get_basepath(ctx);
 
-	if (!basepath) {
-		return -1;
-	}
-
+	get_basepath(basepath);
 	dp = sys_opendir(basepath);
 	if (!dp) {
 		d_fprintf(stderr, "count_num_usershares: cannot open usershare directory %s. Error %s\n",
@@ -536,7 +478,7 @@
 
 	while((de = sys_readdir(dp)) != 0) {
 		SMB_STRUCT_STAT sbuf;
-		char *path;
+		pstring path;
 		const char *n = de->d_name;
 
 		/* Ignore . and .. */
@@ -550,14 +492,9 @@
 			d_fprintf(stderr, "count_num_usershares: ignoring bad share name %s\n",n);
 			continue;
 		}
-		path = talloc_asprintf(ctx,
-				"%s/%s",
-				basepath,
-				n);
-		if (!path) {
-			sys_closedir(dp);
-			return -1;
-		}
+		pstrcpy(path, basepath);
+		pstrcat(path, "/");
+		pstrcat(path, n);
 
 		if (sys_lstat(path, &sbuf) != 0) {
 			d_fprintf(stderr, "count_num_usershares: can't lstat file %s. Error was %s\n",
@@ -583,12 +520,12 @@
 
 static int net_usershare_add(int argc, const char **argv)
 {
-	TALLOC_CTX *ctx = talloc_stackframe();
+	TALLOC_CTX *ctx = NULL;
 	SMB_STRUCT_STAT sbuf;
 	SMB_STRUCT_STAT lsbuf;
 	char *sharename;
-	char *full_path;
-	char *full_path_tmp;
+	pstring full_path;
+	pstring full_path_tmp;
 	const char *us_path;
 	const char *us_comment;
 	const char *arg_acl;
@@ -600,7 +537,7 @@
 	const char *pacl;
 	size_t to_write;
 	uid_t myeuid = geteuid();
-	bool guest_ok = False;
+	BOOL guest_ok = False;
 	int num_usershares;
 
 	us_comment = "";
@@ -635,7 +572,6 @@
 				arg_acl = "S-1-1-0:R";
 			}
 			if (!strnequal(argv[4], "guest_ok=", 9)) {
-				TALLOC_FREE(ctx);
 				return net_usershare_add_usage(argc, argv);
 			}
 			switch (argv[4][9]) {
@@ -647,8 +583,7 @@
 				case 'N':
 					guest_ok = False;
 					break;
-				default:
-					TALLOC_FREE(ctx);
+				default: 
 					return net_usershare_add_usage(argc, argv);
 			}
 			break;
@@ -659,7 +594,6 @@
 	if (num_usershares >= lp_usershare_max_shares()) {
 		d_fprintf(stderr, "net usershare add: maximum number of allowed usershares (%d) reached\n",
 			lp_usershare_max_shares() );
-		TALLOC_FREE(ctx);
 		SAFE_FREE(sharename);
 		return -1;
 	}
@@ -668,7 +602,6 @@
 		d_fprintf(stderr, "net usershare add: share name %s contains "
                         "invalid characters (any of %s)\n",
                         sharename, INVALID_SHARENAME_CHARS);
-		TALLOC_FREE(ctx);
 		SAFE_FREE(sharename);
 		return -1;
 	}
@@ -677,41 +610,21 @@
 	if (getpwnam(sharename)) {
 		d_fprintf(stderr, "net usershare add: share name %s is already a valid system user name\n",
 			sharename );
-		TALLOC_FREE(ctx);
 		SAFE_FREE(sharename);
 		return -1;
 	}
 
 	/* Construct the full path for the usershare file. */
-	full_path = get_basepath(ctx);
-	if (!full_path) {
-		TALLOC_FREE(ctx);
-		SAFE_FREE(sharename);
-		return -1;
-	}
-	full_path_tmp = talloc_asprintf(ctx,
-			"%s/:tmpXXXXXX",
-			full_path);
-	if (!full_path_tmp) {
-		TALLOC_FREE(ctx);
-		SAFE_FREE(sharename);
-		return -1;
-	}
+	get_basepath(full_path);
+	pstrcat(full_path, "/");
+	pstrcpy(full_path_tmp, full_path);
+	pstrcat(full_path, sharename);
+	pstrcat(full_path_tmp, ":tmpXXXXXX");
 
-	full_path = talloc_asprintf_append(full_path,
-					"/%s",
-					sharename);
-	if (!full_path) {
-		TALLOC_FREE(ctx);
-		SAFE_FREE(sharename);
-		return -1;
-	}
-
 	/* The path *must* be absolute. */
 	if (us_path[0] != '/') {
 		d_fprintf(stderr,"net usershare add: path %s is not an absolute path.\n",
 			us_path);
-		TALLOC_FREE(ctx);
 		SAFE_FREE(sharename);
 		return -1;
 	}
@@ -721,7 +634,6 @@
 		d_fprintf(stderr, "net usershare add: cannot stat path %s to ensure "
 			"this is a directory. Error was %s\n",
 			us_path, strerror(errno) );
-		TALLOC_FREE(ctx);
 		SAFE_FREE(sharename);
 		return -1;
 	}
@@ -729,7 +641,6 @@
 	if (!S_ISDIR(sbuf.st_mode)) {
 		d_fprintf(stderr, "net usershare add: path %s is not a directory.\n",
 			us_path );
-		TALLOC_FREE(ctx);
 		SAFE_FREE(sharename);
 		return -1;
 	}
@@ -743,7 +654,6 @@
 			"\tAsk the administrator to add the line \"usershare owner only = False\" \n"
 			"\tto the [global] section of the smb.conf to allow this.\n",
 			us_path );
-		TALLOC_FREE(ctx);
 		SAFE_FREE(sharename);
 		return -1;
 	}
@@ -752,12 +662,10 @@
 	   acl string. Convert names to SID's as needed. Then run it through
 	   parse_usershare_acl to ensure it's valid. */
 
+	ctx = talloc_init("share_info");
+
 	/* Start off the string we'll append to. */
 	us_acl = talloc_strdup(ctx, "");
-	if (!us_acl) {
-		TALLOC_FREE(ctx);
-		return -1;
-	}
 
 	pacl = arg_acl;
 	num_aces = 1;
@@ -773,7 +681,7 @@
 		if (pcolon == NULL) {
 			d_fprintf(stderr, "net usershare add: malformed acl %s (missing ':').\n",
 				pacl );
-			TALLOC_FREE(ctx);
+			talloc_destroy(ctx);
 			SAFE_FREE(sharename);
 			return -1;
 		}
@@ -789,7 +697,7 @@
 				d_fprintf(stderr, "net usershare add: malformed acl %s "
 					"(access control must be 'r', 'f', or 'd')\n",
 					pacl );
-				TALLOC_FREE(ctx);
+				talloc_destroy(ctx);
 				SAFE_FREE(sharename);
 				return -1;
 		}
@@ -797,7 +705,7 @@
 		if (pcolon[2] != ',' && pcolon[2] != '\0') {
 			d_fprintf(stderr, "net usershare add: malformed terminating character for acl %s\n",
 				pacl );
-			TALLOC_FREE(ctx);
+			talloc_destroy(ctx);
 			SAFE_FREE(sharename);
 			return -1;
 		}
@@ -805,7 +713,7 @@
 		/* Get the name */
 		if ((name = talloc_strndup(ctx, pacl, pcolon - pacl)) == NULL) {
 			d_fprintf(stderr, "talloc_strndup failed\n");
-			TALLOC_FREE(ctx);
+			talloc_destroy(ctx);
 			SAFE_FREE(sharename);
 			return -1;
 		}
@@ -820,13 +728,12 @@
 				} else {
 					d_fprintf(stderr, "\n");
 				}
-				TALLOC_FREE(ctx);
+				talloc_destroy(ctx);
 				SAFE_FREE(sharename);
 				return -1;
 			}
 		}
-		us_acl = talloc_asprintf_append(
-			us_acl, "%s:%c,", sid_string_tos(&sid), pcolon[1]);
+		us_acl = talloc_asprintf_append(us_acl, "%s:%c,", sid_string_static(&sid), pcolon[1]);
 
 		/* Move to the next ACL entry. */
 		if (pcolon[2] == ',') {
@@ -841,7 +748,7 @@
 		d_fprintf(stderr, "net usershare add: guest_ok=y requested "
 			"but the \"usershare allow guests\" parameter is not enabled "
 			"by this server.\n");
-		TALLOC_FREE(ctx);
+		talloc_destroy(ctx);
 		SAFE_FREE(sharename);
 		return -1;
 	}
@@ -852,7 +759,7 @@
 	if (tmpfd == -1) {
 		d_fprintf(stderr, "net usershare add: cannot create tmp file %s\n",
 				full_path_tmp );
-		TALLOC_FREE(ctx);
+		talloc_destroy(ctx);
 		SAFE_FREE(sharename);
 		return -1;
 	}
@@ -861,7 +768,7 @@
 	if (sys_lstat(full_path_tmp, &lsbuf) != 0) {
 		d_fprintf(stderr, "net usershare add: cannot lstat tmp file %s\n",
 				full_path_tmp );
-		TALLOC_FREE(ctx);
+		talloc_destroy(ctx);
 		SAFE_FREE(sharename);
 		return -1;
 	}
@@ -870,7 +777,7 @@
 	if (sys_fstat(tmpfd, &sbuf) != 0) {
 		d_fprintf(stderr, "net usershare add: cannot fstat tmp file %s\n",
 				full_path_tmp );
-		TALLOC_FREE(ctx);
+		talloc_destroy(ctx);
 		SAFE_FREE(sharename);
 		return -1;
 	}
@@ -878,15 +785,15 @@
 	if (!S_ISREG(sbuf.st_mode) || sbuf.st_dev != lsbuf.st_dev || sbuf.st_ino != lsbuf.st_ino) {
 		d_fprintf(stderr, "net usershare add: tmp file %s is not a regular file ?\n",
 				full_path_tmp );
-		TALLOC_FREE(ctx);
+		talloc_destroy(ctx);
 		SAFE_FREE(sharename);
 		return -1;
 	}
-
+	
 	if (fchmod(tmpfd, 0644) == -1) {
 		d_fprintf(stderr, "net usershare add: failed to fchmod tmp file %s to 0644n",
 				full_path_tmp );
-		TALLOC_FREE(ctx);
+		talloc_destroy(ctx);
 		SAFE_FREE(sharename);
 		return -1;
 	}
@@ -902,7 +809,7 @@
 		d_fprintf(stderr, "net usershare add: failed to write %u bytes to file %s. Error was %s\n",
 			(unsigned int)to_write, full_path_tmp, strerror(errno));
 		unlink(full_path_tmp);
-		TALLOC_FREE(ctx);
+		talloc_destroy(ctx);
 		SAFE_FREE(sharename);
 		return -1;
 	}
@@ -912,13 +819,14 @@
 		unlink(full_path_tmp);
 		d_fprintf(stderr, "net usershare add: failed to add share %s. Error was %s\n",
 			sharename, strerror(errno));
-		TALLOC_FREE(ctx);
+		talloc_destroy(ctx);
 		close(tmpfd);
 		SAFE_FREE(sharename);
 		return -1;
 	}
 
 	close(tmpfd);
+	talloc_destroy(ctx);
 
 	if (opt_long_list_entries) {
 		const char *my_argv[2];
@@ -928,7 +836,6 @@
 	}
 
 	SAFE_FREE(sharename);
-	TALLOC_FREE(ctx);
 	return 0;
 }
 
@@ -951,7 +858,7 @@
 static int net_usershare_list(int argc, const char **argv)
 {
 	fstring wcard;
-	bool only_ours = True;
+	BOOL only_ours = True;
 	int ret = -1;
 	struct us_priv_info pi;
 	TALLOC_CTX *ctx;

Modified: branches/samba/upstream/source/utils/net_util.c
===================================================================
--- branches/samba/upstream/source/utils/net_util.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/net_util.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -14,13 +14,21 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 
 #include "includes.h"
 #include "utils/net.h"
 
+BOOL is_valid_policy_hnd(const POLICY_HND *hnd)
+{
+	POLICY_HND tmp;
+	ZERO_STRUCT(tmp);
+	return (memcmp(&tmp, hnd, sizeof(tmp)) != 0);
+}
+
 NTSTATUS net_rpc_lookup_name(TALLOC_CTX *mem_ctx, struct cli_state *cli,
 			     const char *name, const char **ret_domain,
 			     const char **ret_name, DOM_SID *ret_sid,
@@ -51,7 +59,7 @@
 	}
 
 	result = rpccli_lsa_lookup_names(lsa_pipe, mem_ctx, &pol, 1,
-					 &name, &dom_names, 1, &sids, &types);
+					 &name, &dom_names, &sids, &types);
 
 	if (!NT_STATUS_IS_OK(result)) {
 		/* This can happen easily, don't log an error */
@@ -73,7 +81,7 @@
 
  done:
 	if (is_valid_policy_hnd(&pol)) {
-		rpccli_lsa_Close(lsa_pipe, mem_ctx, &pol);
+		rpccli_lsa_close(lsa_pipe, mem_ctx, &pol);
 	}
 	cli_rpc_pipe_close(lsa_pipe);
 

Modified: branches/samba/upstream/source/utils/netlookup.c
===================================================================
--- branches/samba/upstream/source/utils/netlookup.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/netlookup.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -27,7 +28,7 @@
 ********************************************************/
 
 struct con_struct {
-	bool failed_connect;
+	BOOL failed_connect;
 	NTSTATUS err;
 	struct cli_state *cli;
 	struct rpc_pipe_client *lsapipe;
@@ -56,15 +57,10 @@
 static struct con_struct *create_cs(TALLOC_CTX *ctx, NTSTATUS *perr)
 {
 	NTSTATUS nt_status;
-	struct sockaddr_storage loopback_ss;
+	struct in_addr loopback_ip = *interpret_addr2("127.0.0.1");
 
 	*perr = NT_STATUS_OK;
 
-	if (!interpret_string_addr(&loopback_ss, "127.0.0.1", AI_NUMERICHOST)) {
-		*perr = NT_STATUS_INVALID_PARAMETER;
-		return NULL;
-	}
-
 	if (cs) {
 		if (cs->failed_connect) {
 			*perr = cs->err;
@@ -94,7 +90,7 @@
 #endif
 
 	nt_status = cli_full_connection(&cs->cli, global_myname(), global_myname(),
-					&loopback_ss, 0,
+					&loopback_ip, 0,
 					"IPC$", "IPC",
 #if 0
 					opt_user_name,
@@ -210,8 +206,8 @@
 						&csp->pol,
 						1,
 						&full_name,
-					        NULL, 1,
-						&sids, &types);
+					        NULL, &sids,
+						&types);
 
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		return nt_status;

Modified: branches/samba/upstream/source/utils/nmblookup.c
===================================================================
--- branches/samba/upstream/source/utils/nmblookup.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/nmblookup.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,66 +1,56 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
    NBT client - used to lookup netbios names
    Copyright (C) Andrew Tridgell 1994-1998
    Copyright (C) Jelmer Vernooij 2003 (Conversion to popt)
-
+   
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   
 */
 
 #include "includes.h"
 
-extern bool AllowDebugChange;
+extern BOOL AllowDebugChange;
 
-static bool give_flags = false;
-static bool use_bcast = true;
-static bool got_bcast = false;
-static struct sockaddr_storage bcast_addr;
-static bool recursion_desired = false;
-static bool translate_addresses = false;
+static BOOL give_flags = False;
+static BOOL use_bcast = True;
+static BOOL got_bcast = False;
+static struct in_addr bcast_addr;
+static BOOL recursion_desired = False;
+static BOOL translate_addresses = False;
 static int ServerFD= -1;
-static bool RootPort = false;
-static bool find_status = false;
+static int RootPort = False;
+static BOOL find_status=False;
 
 /****************************************************************************
- Open the socket communication.
-**************************************************************************/
-
-static bool open_sockets(void)
+  open the socket communication
+  **************************************************************************/
+static BOOL open_sockets(void)
 {
-	struct sockaddr_storage ss;
-	const char *sock_addr = lp_socket_address();
+  ServerFD = open_socket_in( SOCK_DGRAM,
+                             (RootPort ? 137 : 0),
+                             (RootPort ?   0 : 3),
+                             interpret_addr(lp_socket_address()), True );
 
-	if (!interpret_string_addr(&ss, sock_addr,
-				AI_NUMERICHOST|AI_PASSIVE)) {
-		DEBUG(0,("open_sockets: unable to get socket address "
-					"from string %s", sock_addr));
-		return false;
-	}
-	ServerFD = open_socket_in( SOCK_DGRAM,
-				(RootPort ? 137 : 0),
-				(RootPort ?   0 : 3),
-				&ss, true );
+  if (ServerFD == -1)
+    return(False);
 
-	if (ServerFD == -1) {
-		return false;
-	}
+  set_socket_options( ServerFD, "SO_BROADCAST" );
 
-	set_socket_options( ServerFD, "SO_BROADCAST" );
-
-	DEBUG(3, ("Socket opened.\n"));
-	return true;
+  DEBUG(3, ("Socket opened.\n"));
+  return True;
 }
 
 /****************************************************************************
@@ -70,7 +60,7 @@
 {
 	static fstring ret;
 	fstrcpy(ret,"");
-
+	
 	fstrcat(ret, (flags & 0x80) ? "<GROUP> " : "        ");
 	if ((flags & 0x60) == 0x00) fstrcat(ret,"B ");
 	if ((flags & 0x60) == 0x20) fstrcat(ret,"P ");
@@ -80,14 +70,13 @@
 	if (flags & 0x08) fstrcat(ret,"<CONFLICT> ");
 	if (flags & 0x04) fstrcat(ret,"<ACTIVE> ");
 	if (flags & 0x02) fstrcat(ret,"<PERMANENT> ");
-
+	
 	return ret;
 }
 
 /****************************************************************************
- Turn the NMB Query flags into a string.
+turn the NMB Query flags into a string
 ****************************************************************************/
-
 static char *query_flags(int flags)
 {
 	static fstring ret1;
@@ -104,32 +93,24 @@
 }
 
 /****************************************************************************
- Do a node status query.
+do a node status query
 ****************************************************************************/
-
-static void do_node_status(int fd,
-		const char *name,
-		int type,
-		struct sockaddr_storage *pss)
+static void do_node_status(int fd, const char *name, int type, struct in_addr ip)
 {
 	struct nmb_name nname;
 	int count, i, j;
 	NODE_STATUS_STRUCT *status;
 	struct node_status_extra extra;
 	fstring cleanname;
-	char addr[INET6_ADDRSTRLEN];
 
-	print_sockaddr(addr, sizeof(addr), pss);
-	d_printf("Looking up status of %s\n",addr);
+	d_printf("Looking up status of %s\n",inet_ntoa(ip));
 	make_nmb_name(&nname, name, type);
-	status = node_status_query(fd, &nname, pss, &count, &extra);
+	status = node_status_query(fd,&nname,ip, &count, &extra);
 	if (status) {
 		for (i=0;i<count;i++) {
 			pull_ascii_fstring(cleanname, status[i].name);
 			for (j=0;cleanname[j];j++) {
-				if (!isprint((int)cleanname[j])) {
-					cleanname[j] = '.';
-				}
+				if (!isprint((int)cleanname[j])) cleanname[j] = '.';
 			}
 			d_printf("\t%-15s <%02x> - %s\n",
 			       cleanname,status[i].type,
@@ -142,80 +123,57 @@
 		d_printf("\n");
 		SAFE_FREE(status);
 	} else {
-		d_printf("No reply from %s\n\n",addr);
+		d_printf("No reply from %s\n\n",inet_ntoa(ip));
 	}
 }
 
 
 /****************************************************************************
- Send out one query.
+send out one query
 ****************************************************************************/
-
-static bool query_one(const char *lookup, unsigned int lookup_type)
+static BOOL query_one(const char *lookup, unsigned int lookup_type)
 {
 	int j, count, flags = 0;
-	struct sockaddr_storage *ip_list=NULL;
+	struct in_addr *ip_list=NULL;
 
 	if (got_bcast) {
-		char addr[INET6_ADDRSTRLEN];
-		print_sockaddr(addr, sizeof(addr), &bcast_addr);
-		d_printf("querying %s on %s\n", lookup, addr);
+		d_printf("querying %s on %s\n", lookup, inet_ntoa(bcast_addr));
 		ip_list = name_query(ServerFD,lookup,lookup_type,use_bcast,
-				     use_bcast?true:recursion_desired,
-				     &bcast_addr, &count, &flags, NULL);
+				     use_bcast?True:recursion_desired,
+				     bcast_addr,&count, &flags, NULL);
 	} else {
-		const struct in_addr *bcast;
+		struct in_addr *bcast;
 		for (j=iface_count() - 1;
 		     !ip_list && j >= 0;
 		     j--) {
-			char addr[INET6_ADDRSTRLEN];
-			struct sockaddr_storage bcast_ss;
-
-			bcast = iface_n_bcast_v4(j);
-			if (!bcast) {
-				continue;
-			}
-			in_addr_to_sockaddr_storage(&bcast_ss, *bcast);
-			print_sockaddr(addr, sizeof(addr), &bcast_ss);
-			d_printf("querying %s on %s\n",
-			       lookup, addr);
+			bcast = iface_n_bcast(j);
+			d_printf("querying %s on %s\n", 
+			       lookup, inet_ntoa(*bcast));
 			ip_list = name_query(ServerFD,lookup,lookup_type,
 					     use_bcast,
 					     use_bcast?True:recursion_desired,
-					     &bcast_ss,&count, &flags, NULL);
+					     *bcast,&count, &flags, NULL);
 		}
 	}
 
-	if (!ip_list) {
-		return false;
-	}
+	if (!ip_list) return False;
 
-	if (give_flags) {
-		d_printf("Flags: %s\n", query_flags(flags));
-	}
+	if (give_flags)
+	  d_printf("Flags: %s\n", query_flags(flags));
 
 	for (j=0;j<count;j++) {
-		char addr[INET6_ADDRSTRLEN];
 		if (translate_addresses) {
-			char h_name[MAX_DNS_NAME_LENGTH];
-			h_name[0] = '\0';
-			if (sys_getnameinfo((const struct sockaddr *)&ip_list[j],
-					sizeof(struct sockaddr_storage),
-					h_name, sizeof(h_name),
-					NULL, 0,
-					NI_NAMEREQD)) {
-				continue;
+			struct hostent *host = gethostbyaddr((char *)&ip_list[j], sizeof(ip_list[j]), AF_INET);
+			if (host) {
+				d_printf("%s, ", host -> h_name);
 			}
-			d_printf("%s, ", h_name);
 		}
-		print_sockaddr(addr, sizeof(addr), &ip_list[j]);
-		d_printf("%s %s<%02x>\n", addr,lookup, lookup_type);
+		d_printf("%s %s<%02x>\n",inet_ntoa(ip_list[j]),lookup, lookup_type);
 		/* We can only do find_status if the ip address returned
 		   was valid - ie. name_query returned true.
 		 */
 		if (find_status) {
-			do_node_status(ServerFD, lookup,
-					lookup_type, &ip_list[j]);
+			do_node_status(ServerFD, lookup, lookup_type, ip_list[j]);
 		}
 	}
 
@@ -230,140 +188,111 @@
 ****************************************************************************/
 int main(int argc,char *argv[])
 {
-	int opt;
-	unsigned int lookup_type = 0x0;
-	fstring lookup;
-	static bool find_master=False;
-	static bool lookup_by_ip = False;
-	poptContext pc;
-	TALLOC_CTX *frame = talloc_stackframe();
+  int opt;
+  unsigned int lookup_type = 0x0;
+  fstring lookup;
+  static BOOL find_master=False;
+  static BOOL lookup_by_ip = False;
+  poptContext pc;
 
-	struct poptOption long_options[] = {
-		POPT_AUTOHELP
-		{ "broadcast", 'B', POPT_ARG_STRING, NULL, 'B', "Specify address to use for broadcasts", "BROADCAST-ADDRESS" },
-		{ "flags", 'f', POPT_ARG_NONE, NULL, 'f', "List the NMB flags returned" },
-		{ "unicast", 'U', POPT_ARG_STRING, NULL, 'U', "Specify address to use for unicast" },
-		{ "master-browser", 'M', POPT_ARG_NONE, NULL, 'M', "Search for a master browser" },
-		{ "recursion", 'R', POPT_ARG_NONE, NULL, 'R', "Set recursion desired in package" },
-		{ "status", 'S', POPT_ARG_NONE, NULL, 'S', "Lookup node status as well" },
-		{ "translate", 'T', POPT_ARG_NONE, NULL, 'T', "Translate IP addresses into names" },
-		{ "root-port", 'r', POPT_ARG_NONE, NULL, 'r', "Use root port 137 (Win95 only replies to this)" },
-		{ "lookup-by-ip", 'A', POPT_ARG_NONE, NULL, 'A', "Do a node status on <name> as an IP Address" },
-		POPT_COMMON_SAMBA
-		POPT_COMMON_CONNECTION
-		{ 0, 0, 0, 0 }
-	};
+  struct poptOption long_options[] = {
+	  POPT_AUTOHELP
+	  { "broadcast", 'B', POPT_ARG_STRING, NULL, 'B', "Specify address to use for broadcasts", "BROADCAST-ADDRESS" },
+	  { "flags", 'f', POPT_ARG_VAL, &give_flags, True, "List the NMB flags returned" },
+	  { "unicast", 'U', POPT_ARG_STRING, NULL, 'U', "Specify address to use for unicast" },
+	  { "master-browser", 'M', POPT_ARG_VAL, &find_master, True, "Search for a master browser" },
+	  { "recursion", 'R', POPT_ARG_VAL, &recursion_desired, True, "Set recursion desired in package" },
+	  { "status", 'S', POPT_ARG_VAL, &find_status, True, "Lookup node status as well" },
+	  { "translate", 'T', POPT_ARG_NONE, NULL, 'T', "Translate IP addresses into names" },
+	  { "root-port", 'r', POPT_ARG_VAL, &RootPort, True, "Use root port 137 (Win95 only replies to this)" },
+	  { "lookup-by-ip", 'A', POPT_ARG_VAL, &lookup_by_ip, True, "Do a node status on <name> as an IP Address" },
+	  POPT_COMMON_SAMBA
+	  POPT_COMMON_CONNECTION
+	  { 0, 0, 0, 0 }
+  };
+	
+  *lookup = 0;
 
-	*lookup = 0;
+  load_case_tables();
 
-	load_case_tables();
+  setup_logging(argv[0],True);
 
-	setup_logging(argv[0],True);
+  pc = poptGetContext("nmblookup", argc, (const char **)argv, long_options, 
+					  POPT_CONTEXT_KEEP_FIRST);
 
-	pc = poptGetContext("nmblookup", argc, (const char **)argv,
-			long_options, POPT_CONTEXT_KEEP_FIRST);
+  poptSetOtherOptionHelp(pc, "<NODE> ...");
 
-	poptSetOtherOptionHelp(pc, "<NODE> ...");
+  while ((opt = poptGetNextOpt(pc)) != -1) {
+	  switch (opt) {
+	  case 'B':
+		  bcast_addr = *interpret_addr2(poptGetOptArg(pc));
+		  got_bcast = True;
+		  use_bcast = True;
+		  break;
+	  case 'U':
+		  bcast_addr = *interpret_addr2(poptGetOptArg(pc));
+		  got_bcast = True;
+		  use_bcast = False;
+		  break;
+	  case 'T':
+		  translate_addresses = !translate_addresses;
+		  break;
+	  }
+  }
 
-	while ((opt = poptGetNextOpt(pc)) != -1) {
-		switch (opt) {
-		case 'f':
-			give_flags = true;
-			break;
-		case 'M':
-			find_master = true;
-			break;
-		case 'R':
-			recursion_desired = true;
-			break;
-		case 'S':
-			find_status = true;
-			break;
-		case 'r':
-			RootPort = true;
-			break;
-		case 'A':
-			lookup_by_ip = true;
-			break;
-		case 'B':
-			if (interpret_string_addr(&bcast_addr,
-					poptGetOptArg(pc),
-					NI_NUMERICHOST)) {
-				got_bcast = True;
-				use_bcast = True;
-			}
-			break;
-		case 'U':
-			if (interpret_string_addr(&bcast_addr,
-					poptGetOptArg(pc),
-					0)) {
-				got_bcast = True;
-				use_bcast = False;
-			}
-			break;
-		case 'T':
-			translate_addresses = !translate_addresses;
-			break;
-		}
-	}
+  poptGetArg(pc); /* Remove argv[0] */
 
-	poptGetArg(pc); /* Remove argv[0] */
+  if(!poptPeekArg(pc)) { 
+	  poptPrintUsage(pc, stderr, 0);
+	  exit(1);
+  }
 
-	if(!poptPeekArg(pc)) {
-		poptPrintUsage(pc, stderr, 0);
-		exit(1);
-	}
+  if (!lp_load(dyn_CONFIGFILE,True,False,False,True)) {
+	  fprintf(stderr, "Can't load %s - run testparm to debug it\n", dyn_CONFIGFILE);
+  }
 
-	if (!lp_load(get_dyn_CONFIGFILE(),True,False,False,True)) {
-		fprintf(stderr, "Can't load %s - run testparm to debug it\n",
-				get_dyn_CONFIGFILE());
-	}
+  load_interfaces();
+  if (!open_sockets()) return(1);
 
-	load_interfaces();
-	if (!open_sockets()) {
-		return(1);
-	}
+  while(poptPeekArg(pc))
+  {
+	  char *p;
+	  struct in_addr ip;
 
-	while(poptPeekArg(pc)) {
-		char *p;
-		struct in_addr ip;
+	  fstrcpy(lookup,poptGetArg(pc));
 
-		fstrcpy(lookup,poptGetArg(pc));
+	  if(lookup_by_ip)
+	  {
+		  ip = *interpret_addr2(lookup);
+		  fstrcpy(lookup,"*");
+		  do_node_status(ServerFD, lookup, lookup_type, ip);
+		  continue;
+	  }
 
-		if(lookup_by_ip) {
-			struct sockaddr_storage ss;
-			(void)interpret_addr2(&ip, lookup);
-			in_addr_to_sockaddr_storage(&ss, ip);
-			fstrcpy(lookup,"*");
-			do_node_status(ServerFD, lookup, lookup_type, &ss);
-			continue;
-		}
+	  if (find_master) {
+		  if (*lookup == '-') {
+			  fstrcpy(lookup,"\01\02__MSBROWSE__\02");
+			  lookup_type = 1;
+		  } else {
+			  lookup_type = 0x1d;
+		  }
+	  }
 
-		if (find_master) {
-			if (*lookup == '-') {
-				fstrcpy(lookup,"\01\02__MSBROWSE__\02");
-				lookup_type = 1;
-			} else {
-				lookup_type = 0x1d;
-			}
-		}
+	  p = strchr_m(lookup,'#');
+	  if (p) {
+		  *p = '\0';
+		  sscanf(++p,"%x",&lookup_type);
+	  }
 
-		p = strchr_m(lookup,'#');
-		if (p) {
-			*p = '\0';
-			sscanf(++p,"%x",&lookup_type);
-		}
+	  if (!query_one(lookup, lookup_type)) {
+		  d_printf( "name_query failed to find name %s", lookup );
+		  if( 0 != lookup_type )
+			  d_printf( "#%02x", lookup_type );
+		  d_printf( "\n" );
+	  }
+  }
 
-		if (!query_one(lookup, lookup_type)) {
-			d_printf( "name_query failed to find name %s", lookup );
-			if( 0 != lookup_type ) {
-				d_printf( "#%02x", lookup_type );
-			}
-			d_printf( "\n" );
-		}
-	}
+  poptFreeContext(pc);
 
-	poptFreeContext(pc);
-	TALLOC_FREE(frame);
-	return(0);
+  return(0);
 }

Modified: branches/samba/upstream/source/utils/ntlm_auth.c
===================================================================
--- branches/samba/upstream/source/utils/ntlm_auth.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/ntlm_auth.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -1,26 +1,26 @@
-/*
+/* 
    Unix SMB/CIFS implementation.
 
    Winbind status program.
 
    Copyright (C) Tim Potter      2000-2003
    Copyright (C) Andrew Bartlett <abartlet at samba.org> 2003-2004
-   Copyright (C) Francesco Chemolli <kinkie at kame.usr.dsi.unimi.it> 2000
+   Copyright (C) Francesco Chemolli <kinkie at kame.usr.dsi.unimi.it> 2000 
    Copyright (C) Robert O'Callahan 2006 (added cached credential code).
-   Copyright (C) Kai Blin <kai at samba.org> 2008
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -29,8 +29,7 @@
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_WINBIND
 
-#define INITIAL_BUFFER_SIZE 300
-#define MAX_BUFFER_SIZE 630000
+#define SQUID_BUFFER_SIZE 2010
 
 enum stdio_helper_mode {
 	SQUID_2_4_BASIC,
@@ -44,56 +43,28 @@
 	NUM_HELPER_MODES
 };
 
-enum ntlm_auth_cli_state {
-	CLIENT_INITIAL = 0,
-	CLIENT_RESPONSE,
-	CLIENT_FINISHED,
-	CLIENT_ERROR
-};
+typedef void (*stdio_helper_function)(enum stdio_helper_mode stdio_helper_mode, 
+				     char *buf, int length);
 
-enum ntlm_auth_svr_state {
-	SERVER_INITIAL = 0,
-	SERVER_CHALLENGE,
-	SERVER_FINISHED,
-	SERVER_ERROR
-};
-
-struct ntlm_auth_state {
-	TALLOC_CTX *mem_ctx;
-	enum stdio_helper_mode helper_mode;
-	enum ntlm_auth_cli_state cli_state;
-	enum ntlm_auth_svr_state svr_state;
-	struct ntlmssp_state *ntlmssp_state;
-	uint32_t neg_flags;
-	char *want_feature_list;
-	bool have_session_key;
-	DATA_BLOB session_key;
-	DATA_BLOB initial_message;
-};
-
-typedef void (*stdio_helper_function)(struct ntlm_auth_state *state, char *buf,
-					int length);
-
-static void manage_squid_basic_request (struct ntlm_auth_state *state,
+static void manage_squid_basic_request (enum stdio_helper_mode stdio_helper_mode, 
 					char *buf, int length);
 
-static void manage_squid_ntlmssp_request (struct ntlm_auth_state *state,
-					char *buf, int length);
+static void manage_squid_ntlmssp_request (enum stdio_helper_mode stdio_helper_mode, 
+					  char *buf, int length);
 
-static void manage_client_ntlmssp_request (struct ntlm_auth_state *state,
-					char *buf, int length);
+static void manage_client_ntlmssp_request (enum stdio_helper_mode stdio_helper_mode, 
+					   char *buf, int length);
 
-static void manage_gss_spnego_request (struct ntlm_auth_state *state,
-					char *buf, int length);
+static void manage_gss_spnego_request (enum stdio_helper_mode stdio_helper_mode, 
+				       char *buf, int length);
 
-static void manage_gss_spnego_client_request (struct ntlm_auth_state *state,
-					char *buf, int length);
+static void manage_gss_spnego_client_request (enum stdio_helper_mode stdio_helper_mode, 
+					      char *buf, int length);
 
-static void manage_ntlm_server_1_request (struct ntlm_auth_state *state,
-					char *buf, int length);
+static void manage_ntlm_server_1_request (enum stdio_helper_mode stdio_helper_mode, 
+					  char *buf, int length);
 
-static void manage_ntlm_change_password_1_request(struct ntlm_auth_state *state,
-					char *buf, int length);
+static void manage_ntlm_change_password_1_request(enum stdio_helper_mode helper_mode, char *buf, int length);
 
 static const struct {
 	enum stdio_helper_mode mode;
@@ -111,6 +82,8 @@
 	{ NUM_HELPER_MODES, NULL, NULL}
 };
 
+extern int winbindd_fd;
+
 const char *opt_username;
 const char *opt_domain;
 const char *opt_workstation;
@@ -128,7 +101,7 @@
 static char winbind_separator(void)
 {
 	struct winbindd_response response;
-	static bool got_sep;
+	static BOOL got_sep;
 	static char sep;
 
 	if (got_sep)
@@ -151,7 +124,7 @@
 		d_printf("winbind separator was NULL!\n");
 		return *lp_winbind_separator();
 	}
-
+	
 	return sep;
 }
 
@@ -221,7 +194,7 @@
 /* Copy of parse_domain_user from winbindd_util.c.  Parse a string of the
    form DOMAIN/user into a domain and a user */
 
-static bool parse_ntlm_auth_domain_user(const char *domuser, fstring domain, 
+static BOOL parse_ntlm_auth_domain_user(const char *domuser, fstring domain, 
 				     fstring user)
 {
 
@@ -239,7 +212,7 @@
 	return True;
 }
 
-static bool get_require_membership_sid(void) {
+static BOOL get_require_membership_sid(void) {
 	struct winbindd_request request;
 	struct winbindd_response response;
 
@@ -280,8 +253,8 @@
 }
 /* Authenticate a user with a plaintext password */
 
-static bool check_plaintext_auth(const char *user, const char *pass,
-				 bool stdout_diagnostics)
+static BOOL check_plaintext_auth(const char *user, const char *pass, 
+				 BOOL stdout_diagnostics)
 {
 	struct winbindd_request request;
 	struct winbindd_response response;
@@ -298,52 +271,49 @@
 
 	fstrcpy(request.data.auth.user, user);
 	fstrcpy(request.data.auth.pass, pass);
-	if (require_membership_of_sid) {
-		strlcpy(request.data.auth.require_membership_of_sid,
-			require_membership_of_sid,
-			sizeof(request.data.auth.require_membership_of_sid));
-	}
+	if (require_membership_of_sid)
+		pstrcpy(request.data.auth.require_membership_of_sid, require_membership_of_sid);
 
 	result = winbindd_request_response(WINBINDD_PAM_AUTH, &request, &response);
 
 	/* Display response */
-
+	
 	if (stdout_diagnostics) {
 		if ((result != NSS_STATUS_SUCCESS) && (response.data.auth.nt_status == 0)) {
 			d_printf("Reading winbind reply failed! (0x01)\n");
 		}
-
-		d_printf("%s: %s (0x%x)\n",
-			 response.data.auth.nt_status_string,
-			 response.data.auth.error_string,
+		
+		d_printf("%s: %s (0x%x)\n", 
+			 response.data.auth.nt_status_string, 
+			 response.data.auth.error_string, 
 			 response.data.auth.nt_status);
 	} else {
 		if ((result != NSS_STATUS_SUCCESS) && (response.data.auth.nt_status == 0)) {
 			DEBUG(1, ("Reading winbind reply failed! (0x01)\n"));
 		}
-
-		DEBUG(3, ("%s: %s (0x%x)\n",
-			  response.data.auth.nt_status_string,
+		
+		DEBUG(3, ("%s: %s (0x%x)\n", 
+			  response.data.auth.nt_status_string, 
 			  response.data.auth.error_string,
-			  response.data.auth.nt_status));
+			  response.data.auth.nt_status));		
 	}
-
+		
         return (result == NSS_STATUS_SUCCESS);
 }
 
 /* authenticate a user with an encrypted username/password */
 
-NTSTATUS contact_winbind_auth_crap(const char *username,
-				   const char *domain,
+NTSTATUS contact_winbind_auth_crap(const char *username, 
+				   const char *domain, 
 				   const char *workstation,
-				   const DATA_BLOB *challenge,
-				   const DATA_BLOB *lm_response,
-				   const DATA_BLOB *nt_response,
-				   uint32 flags,
-				   uint8 lm_key[8],
-				   uint8 user_session_key[16],
-				   char **error_string,
-				   char **unix_name)
+				   const DATA_BLOB *challenge, 
+				   const DATA_BLOB *lm_response, 
+				   const DATA_BLOB *nt_response, 
+				   uint32 flags, 
+				   uint8 lm_key[8], 
+				   uint8 user_session_key[16], 
+				   char **error_string, 
+				   char **unix_name) 
 {
 	NTSTATUS nt_status;
         NSS_STATUS result;
@@ -394,7 +364,7 @@
 		nt_status = NT_STATUS_UNSUCCESSFUL;
 		if (error_string)
 			*error_string = smb_xstrdup("Reading winbind reply failed!");
-		winbindd_free_response(&response);
+		free_response(&response);
 		return nt_status;
 	}
 	
@@ -402,7 +372,7 @@
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		if (error_string) 
 			*error_string = smb_xstrdup(response.data.auth.error_string);
-		winbindd_free_response(&response);
+		free_response(&response);
 		return nt_status;
 	}
 
@@ -416,14 +386,14 @@
 	}
 
 	if (flags & WBFLAG_PAM_UNIX_NAME) {
-		*unix_name = SMB_STRDUP(response.data.auth.unix_username);
+		*unix_name = SMB_STRDUP((char *)response.extra_data.data);
 		if (!*unix_name) {
-			winbindd_free_response(&response);
+			free_response(&response);
 			return NT_STATUS_NO_MEMORY;
 		}
 	}
 
-	winbindd_free_response(&response);
+	free_response(&response);
 	return nt_status;
 }
 
@@ -489,7 +459,7 @@
 		nt_status = NT_STATUS_UNSUCCESSFUL;
 		if (error_string)
 			*error_string = smb_xstrdup("Reading winbind reply failed!");
-		winbindd_free_response(&response);
+		free_response(&response);
 		return nt_status;
 	}
 	
@@ -498,11 +468,11 @@
 	{
 		if (error_string) 
 			*error_string = smb_xstrdup(response.data.auth.error_string);
-		winbindd_free_response(&response);
+		free_response(&response);
 		return nt_status;
 	}
 
-	winbindd_free_response(&response);
+	free_response(&response);
 	
     return nt_status;
 }
@@ -689,7 +659,7 @@
 	SAFE_FREE(wb_request.extra_data.data);
 
 	if (result != NSS_STATUS_SUCCESS) {
-		winbindd_free_response(&wb_response);
+		free_response(&wb_response);
 		return NT_STATUS_UNSUCCESSFUL;
 	}
 
@@ -698,18 +668,23 @@
 				wb_response.data.ccache_ntlm_auth.auth_blob_len);
 		if (wb_response.data.ccache_ntlm_auth.auth_blob_len > 0 &&
 				reply->data == NULL) {
-			winbindd_free_response(&wb_response);
+			free_response(&wb_response);
 			return NT_STATUS_NO_MEMORY;
 		}
 	}
 
-	winbindd_free_response(&wb_response);
+	free_response(&wb_response);
 	return NT_STATUS_MORE_PROCESSING_REQUIRED;
 }
 
-static void manage_squid_ntlmssp_request(struct ntlm_auth_state *state,
-						char *buf, int length)
+static void manage_squid_ntlmssp_request(enum stdio_helper_mode stdio_helper_mode, 
+					 char *buf, int length) 
 {
+	static NTLMSSP_STATE *ntlmssp_state = NULL;
+	static char* want_feature_list = NULL;
+	static uint32 neg_flags = 0;
+	static BOOL have_session_key = False;
+	static DATA_BLOB session_key;
 	DATA_BLOB request, reply;
 	NTSTATUS nt_status;
 
@@ -722,23 +697,20 @@
 	if (strlen(buf) > 3) {
 		if(strncmp(buf, "SF ", 3) == 0){
 			DEBUG(10, ("Setting flags to negotioate\n"));
-			TALLOC_FREE(state->want_feature_list);
-			state->want_feature_list = talloc_strdup(state->mem_ctx,
-					buf+3);
+			SAFE_FREE(want_feature_list);
+			want_feature_list = SMB_STRNDUP(buf+3, strlen(buf)-3);
 			x_fprintf(x_stdout, "OK\n");
 			return;
 		}
 		request = base64_decode_data_blob(buf + 3);
 	} else {
-		request = data_blob_null;
+		request = data_blob(NULL, 0);
 	}
 
 	if ((strncmp(buf, "PW ", 3) == 0)) {
-		/* The calling application wants us to use a local password
-		 * (rather than winbindd) */
+		/* The calling application wants us to use a local password (rather than winbindd) */
 
-		opt_password = SMB_STRNDUP((const char *)request.data,
-				request.length);
+		opt_password = SMB_STRNDUP((const char *)request.data, request.length);
 
 		if (opt_password == NULL) {
 			DEBUG(1, ("Out of memory\n"));
@@ -753,33 +725,25 @@
 	}
 
 	if (strncmp(buf, "YR", 2) == 0) {
-		if (state->ntlmssp_state)
-			ntlmssp_end(&state->ntlmssp_state);
-		state->svr_state = SERVER_INITIAL;
+		if (ntlmssp_state)
+			ntlmssp_end(&ntlmssp_state);
 	} else if (strncmp(buf, "KK", 2) == 0) {
-		/* No special preprocessing required */
+		
 	} else if (strncmp(buf, "GF", 2) == 0) {
 		DEBUG(10, ("Requested negotiated NTLMSSP flags\n"));
-
-		if (state->svr_state == SERVER_FINISHED) {
-			x_fprintf(x_stdout, "GF 0x%08x\n", state->neg_flags);
-		}
-		else {
-			x_fprintf(x_stdout, "BH\n");
-		}
+		x_fprintf(x_stdout, "GF 0x%08lx\n", have_session_key?neg_flags:0l);
 		data_blob_free(&request);
 		return;
 	} else if (strncmp(buf, "GK", 2) == 0) {
 		DEBUG(10, ("Requested NTLMSSP session key\n"));
-		if(state->have_session_key) {
-			char *key64 = base64_encode_data_blob(state->mem_ctx,
-					state->session_key);
+		if(have_session_key) {
+			char *key64 = base64_encode_data_blob(session_key);
 			x_fprintf(x_stdout, "GK %s\n", key64?key64:"<NULL>");
-			TALLOC_FREE(key64);
+			SAFE_FREE(key64);
 		} else {
-			x_fprintf(x_stdout, "BH\n");
+			x_fprintf(x_stdout, "BH No session key available\n");
 		}
-
+			
 		data_blob_free(&request);
 		return;
 	} else {
@@ -788,62 +752,65 @@
 		return;
 	}
 
-	if (!state->ntlmssp_state) {
-		nt_status = ntlm_auth_start_ntlmssp_server(
-				&state->ntlmssp_state);
-		if (!NT_STATUS_IS_OK(nt_status)) {
+	if (!ntlmssp_state) {
+		if (!NT_STATUS_IS_OK(nt_status = ntlm_auth_start_ntlmssp_server(&ntlmssp_state))) {
 			x_fprintf(x_stdout, "BH %s\n", nt_errstr(nt_status));
 			return;
 		}
-		ntlmssp_want_feature_list(state->ntlmssp_state,
-				state->want_feature_list);
+		ntlmssp_want_feature_list(ntlmssp_state, want_feature_list);
 	}
 
 	DEBUG(10, ("got NTLMSSP packet:\n"));
-	dump_data(10, request.data, request.length);
+	dump_data(10, (const char *)request.data, request.length);
 
-	nt_status = ntlmssp_update(state->ntlmssp_state, request, &reply);
-
+	nt_status = ntlmssp_update(ntlmssp_state, request, &reply);
+	
 	if (NT_STATUS_EQUAL(nt_status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
-		char *reply_base64 = base64_encode_data_blob(state->mem_ctx,
-				reply);
+		char *reply_base64 = base64_encode_data_blob(reply);
 		x_fprintf(x_stdout, "TT %s\n", reply_base64);
-		TALLOC_FREE(reply_base64);
+		SAFE_FREE(reply_base64);
 		data_blob_free(&reply);
-		state->svr_state = SERVER_CHALLENGE;
 		DEBUG(10, ("NTLMSSP challenge\n"));
 	} else if (NT_STATUS_EQUAL(nt_status, NT_STATUS_ACCESS_DENIED)) {
 		x_fprintf(x_stdout, "BH %s\n", nt_errstr(nt_status));
 		DEBUG(0, ("NTLMSSP BH: %s\n", nt_errstr(nt_status)));
 
-		ntlmssp_end(&state->ntlmssp_state);
+		ntlmssp_end(&ntlmssp_state);
 	} else if (!NT_STATUS_IS_OK(nt_status)) {
 		x_fprintf(x_stdout, "NA %s\n", nt_errstr(nt_status));
 		DEBUG(10, ("NTLMSSP %s\n", nt_errstr(nt_status)));
 	} else {
-		x_fprintf(x_stdout, "AF %s\n",
-				(char *)state->ntlmssp_state->auth_context);
+		x_fprintf(x_stdout, "AF %s\n", (char *)ntlmssp_state->auth_context);
 		DEBUG(10, ("NTLMSSP OK!\n"));
-
-		if(state->have_session_key)
-			data_blob_free(&state->session_key);
-		state->session_key = data_blob(
-				state->ntlmssp_state->session_key.data,
-				state->ntlmssp_state->session_key.length);
-		state->neg_flags = state->ntlmssp_state->neg_flags;
-		state->have_session_key = true;
-		state->svr_state = SERVER_FINISHED;
+		
+		if(have_session_key)
+			data_blob_free(&session_key);
+		session_key = data_blob(ntlmssp_state->session_key.data, 
+				ntlmssp_state->session_key.length);
+		neg_flags = ntlmssp_state->neg_flags;
+		have_session_key = True;
 	}
 
 	data_blob_free(&request);
 }
 
-static void manage_client_ntlmssp_request(struct ntlm_auth_state *state,
-					 	char *buf, int length)
+static void manage_client_ntlmssp_request(enum stdio_helper_mode stdio_helper_mode, 
+					 char *buf, int length) 
 {
+	/* The statics here are *HORRIBLE* and this entire concept
+	   needs to be rewritten. Essentially it's using these statics
+	   as the state in a state machine. BLEEEGH ! JRA. */
+
+	static NTLMSSP_STATE *ntlmssp_state = NULL;
+	static DATA_BLOB initial_message;
+	static char* want_feature_list = NULL;
+	static uint32 neg_flags = 0;
+	static BOOL have_session_key = False;
+	static DATA_BLOB session_key;
 	DATA_BLOB request, reply;
 	NTSTATUS nt_status;
-
+	BOOL first = False;
+	
 	if (!opt_username || !*opt_username) {
 		x_fprintf(x_stderr, "username must be specified!\n\n");
 		exit(1);
@@ -858,22 +825,20 @@
 	if (strlen(buf) > 3) {
 		if(strncmp(buf, "SF ", 3) == 0) {
 			DEBUG(10, ("Looking for flags to negotiate\n"));
-			talloc_free(state->want_feature_list);
-			state->want_feature_list = talloc_strdup(state->mem_ctx,
-					buf+3);
+			SAFE_FREE(want_feature_list);
+			want_feature_list = SMB_STRNDUP(buf+3, strlen(buf)-3);
 			x_fprintf(x_stdout, "OK\n");
 			return;
 		}
 		request = base64_decode_data_blob(buf + 3);
 	} else {
-		request = data_blob_null;
+		request = data_blob(NULL, 0);
 	}
 
 	if (strncmp(buf, "PW ", 3) == 0) {
 		/* We asked for a password and obviously got it :-) */
 
-		opt_password = SMB_STRNDUP((const char *)request.data,
-				request.length);
+		opt_password = SMB_STRNDUP((const char *)request.data, request.length);
 
 		if (opt_password == NULL) {
 			DEBUG(1, ("Out of memory\n"));
@@ -887,9 +852,9 @@
 		return;
 	}
 
-	if (!state->ntlmssp_state && use_cached_creds) {
-		/* check whether cached credentials are usable. */
-		DATA_BLOB empty_blob = data_blob_null;
+	if (!ntlmssp_state && use_cached_creds) {
+		/* check whether credentials are usable. */
+		DATA_BLOB empty_blob = data_blob(NULL, 0);
 
 		nt_status = do_ccache_ntlm_auth(empty_blob, empty_blob, NULL);
 		if (!NT_STATUS_EQUAL(nt_status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
@@ -899,44 +864,35 @@
 	}
 
 	if (opt_password == NULL && !use_cached_creds) {
+		
 		/* Request a password from the calling process.  After
-		   sending it, the calling process should retry asking for the
-		   negotiate. */
-
+		   sending it, the calling process should retry asking for the negotiate. */
+		
 		DEBUG(10, ("Requesting password\n"));
 		x_fprintf(x_stdout, "PW\n");
 		return;
 	}
 
 	if (strncmp(buf, "YR", 2) == 0) {
-		if (state->ntlmssp_state)
-			ntlmssp_end(&state->ntlmssp_state);
-		state->cli_state = CLIENT_INITIAL;
+		if (ntlmssp_state)
+			ntlmssp_end(&ntlmssp_state);
 	} else if (strncmp(buf, "TT", 2) == 0) {
-		/* No special preprocessing required */
+		
 	} else if (strncmp(buf, "GF", 2) == 0) {
 		DEBUG(10, ("Requested negotiated NTLMSSP flags\n"));
-
-		if(state->cli_state == CLIENT_FINISHED) {
-			x_fprintf(x_stdout, "GF 0x%08x\n", state->neg_flags);
-		}
-		else {
-			x_fprintf(x_stdout, "BH\n");
-		}
-
+		x_fprintf(x_stdout, "GF 0x%08lx\n", have_session_key?neg_flags:0l);
 		data_blob_free(&request);
 		return;
 	} else if (strncmp(buf, "GK", 2) == 0 ) {
 		DEBUG(10, ("Requested session key\n"));
 
-		if(state->cli_state == CLIENT_FINISHED) {
-			char *key64 = base64_encode_data_blob(state->mem_ctx,
-					state->session_key);
+		if(have_session_key) {
+			char *key64 = base64_encode_data_blob(session_key);
 			x_fprintf(x_stdout, "GK %s\n", key64?key64:"<NULL>");
-			TALLOC_FREE(key64);
+			SAFE_FREE(key64);
 		}
 		else {
-			x_fprintf(x_stdout, "BH\n");
+			x_fprintf(x_stdout, "BH No session key available\n");
 		}
 
 		data_blob_free(&request);
@@ -947,75 +903,67 @@
 		return;
 	}
 
-	if (!state->ntlmssp_state) {
-		nt_status = ntlm_auth_start_ntlmssp_client(
-				&state->ntlmssp_state);
-		if (!NT_STATUS_IS_OK(nt_status)) {
+	if (!ntlmssp_state) {
+		if (!NT_STATUS_IS_OK(nt_status = ntlm_auth_start_ntlmssp_client(&ntlmssp_state))) {
 			x_fprintf(x_stdout, "BH %s\n", nt_errstr(nt_status));
 			return;
 		}
-		ntlmssp_want_feature_list(state->ntlmssp_state,
-				state->want_feature_list);
-		state->initial_message = data_blob_null;
+		ntlmssp_want_feature_list(ntlmssp_state, want_feature_list);
+		first = True;
+		initial_message = data_blob(NULL, 0);
 	}
 
 	DEBUG(10, ("got NTLMSSP packet:\n"));
-	dump_data(10, request.data, request.length);
+	dump_data(10, (const char *)request.data, request.length);
 
-	if (use_cached_creds && !opt_password &&
-			(state->cli_state == CLIENT_RESPONSE)) {
-		nt_status = do_ccache_ntlm_auth(state->initial_message, request,
-				&reply);
+	if (use_cached_creds && !opt_password && !first) {
+		nt_status = do_ccache_ntlm_auth(initial_message, request, &reply);
 	} else {
-		nt_status = ntlmssp_update(state->ntlmssp_state, request,
-				&reply);
+		nt_status = ntlmssp_update(ntlmssp_state, request, &reply);
 	}
-
+	
 	if (NT_STATUS_EQUAL(nt_status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
-		char *reply_base64 = base64_encode_data_blob(state->mem_ctx,
-				reply);
-		if (state->cli_state == CLIENT_INITIAL) {
+		char *reply_base64 = base64_encode_data_blob(reply);
+		if (first) {
 			x_fprintf(x_stdout, "YR %s\n", reply_base64);
-			state->initial_message = reply;
-			state->cli_state = CLIENT_RESPONSE;
-		} else {
+		} else { 
 			x_fprintf(x_stdout, "KK %s\n", reply_base64);
+		}
+		SAFE_FREE(reply_base64);
+		if (first) {
+			initial_message = reply;
+		} else {
 			data_blob_free(&reply);
 		}
-		TALLOC_FREE(reply_base64);
 		DEBUG(10, ("NTLMSSP challenge\n"));
 	} else if (NT_STATUS_IS_OK(nt_status)) {
-		char *reply_base64 = base64_encode_data_blob(talloc_tos(),
-				reply);
+		char *reply_base64 = base64_encode_data_blob(reply);
 		x_fprintf(x_stdout, "AF %s\n", reply_base64);
-		TALLOC_FREE(reply_base64);
+		SAFE_FREE(reply_base64);
 
-		if(state->have_session_key)
-			data_blob_free(&state->session_key);
+		if(have_session_key)
+			data_blob_free(&session_key);
 
-		state->session_key = data_blob(
-				state->ntlmssp_state->session_key.data,
-				state->ntlmssp_state->session_key.length);
-		state->neg_flags = state->ntlmssp_state->neg_flags;
-		state->have_session_key = true;
+		session_key = data_blob(ntlmssp_state->session_key.data, 
+				ntlmssp_state->session_key.length);
+		neg_flags = ntlmssp_state->neg_flags;
+		have_session_key = True;
 
 		DEBUG(10, ("NTLMSSP OK!\n"));
-		state->cli_state = CLIENT_FINISHED;
-		if (state->ntlmssp_state)
-			ntlmssp_end(&state->ntlmssp_state);
+		if (ntlmssp_state)
+			ntlmssp_end(&ntlmssp_state);
 	} else {
 		x_fprintf(x_stdout, "BH %s\n", nt_errstr(nt_status));
 		DEBUG(0, ("NTLMSSP BH: %s\n", nt_errstr(nt_status)));
-		state->cli_state = CLIENT_ERROR;
-		if (state->ntlmssp_state)
-			ntlmssp_end(&state->ntlmssp_state);
+		if (ntlmssp_state)
+			ntlmssp_end(&ntlmssp_state);
 	}
 
 	data_blob_free(&request);
 }
 
-static void manage_squid_basic_request(struct ntlm_auth_state *state,
-					char *buf, int length)
+static void manage_squid_basic_request(enum stdio_helper_mode stdio_helper_mode, 
+				       char *buf, int length) 
 {
 	char *user, *pass;	
 	user=buf;
@@ -1029,7 +977,7 @@
 	*pass='\0';
 	pass++;
 	
-	if (state->helper_mode == SQUID_2_5_BASIC) {
+	if (stdio_helper_mode == SQUID_2_5_BASIC) {
 		rfc1738_unescape(user);
 		rfc1738_unescape(pass);
 	}
@@ -1047,22 +995,16 @@
 	SPNEGO_DATA spnego;
 	ssize_t len;
 	char *reply_base64;
-	TALLOC_CTX *ctx = talloc_tos();
-	char *principal;
-	char *myname_lower;
 
+	pstring principal;
+	pstring myname_lower;
+
 	ZERO_STRUCT(spnego);
 
-	myname_lower = talloc_strdup(ctx, global_myname());
-	if (!myname_lower) {
-		return;
-	}
+	pstrcpy(myname_lower, global_myname());
 	strlower_m(myname_lower);
 
-	principal = talloc_asprintf(ctx, "%s$@%s", myname_lower, lp_realm());
-	if (!principal) {
-		return;
-	}
+	pstr_sprintf(principal, "%s$@%s", myname_lower, lp_realm());
 
 	/* Server negTokenInit (mech offerings) */
 	spnego.type = SPNEGO_NEG_TOKEN_INIT;
@@ -1089,31 +1031,30 @@
 		return;
 	}
 
-	reply_base64 = base64_encode_data_blob(talloc_tos(), token);
+	reply_base64 = base64_encode_data_blob(token);
 	x_fprintf(x_stdout, "TT %s *\n", reply_base64);
 
-	TALLOC_FREE(reply_base64);
+	SAFE_FREE(reply_base64);
 	data_blob_free(&token);
 	DEBUG(10, ("sent SPNEGO negTokenInit\n"));
 	return;
 }
 
-static void manage_gss_spnego_request(struct ntlm_auth_state *state,
-					char *buf, int length)
+static void manage_gss_spnego_request(enum stdio_helper_mode stdio_helper_mode, 
+				      char *buf, int length) 
 {
 	static NTLMSSP_STATE *ntlmssp_state = NULL;
 	SPNEGO_DATA request, response;
 	DATA_BLOB token;
 	NTSTATUS status;
 	ssize_t len;
-	TALLOC_CTX *ctx = talloc_tos();
 
 	char *user = NULL;
 	char *domain = NULL;
 
 	const char *reply_code;
 	char       *reply_base64;
-	char *reply_argument = NULL;
+	pstring     reply_argument;
 
 	if (strlen(buf) < 2) {
 		DEBUG(1, ("SPENGO query [%s] invalid", buf));
@@ -1125,7 +1066,7 @@
 		if (ntlmssp_state)
 			ntlmssp_end(&ntlmssp_state);
 	} else if (strncmp(buf, "KK", 2) == 0) {
-		;
+		
 	} else {
 		DEBUG(1, ("SPENGO query [%s] invalid", buf));
 		x_fprintf(x_stdout, "BH SPENGO query invalid\n");
@@ -1167,8 +1108,7 @@
 		if ( (request.negTokenInit.mechTypes == NULL) ||
 		     (request.negTokenInit.mechTypes[0] == NULL) ) {
 			DEBUG(1, ("Client did not offer any mechanism"));
-			x_fprintf(x_stdout, "BH Client did not offer any "
-					    "mechanism\n");
+			x_fprintf(x_stdout, "BH Client did not offer any mechanism\n");
 			return;
 		}
 
@@ -1177,17 +1117,14 @@
 
 			if ( request.negTokenInit.mechToken.data == NULL ) {
 				DEBUG(1, ("Client did not provide NTLMSSP data\n"));
-				x_fprintf(x_stdout, "BH Client did not provide "
-						    "NTLMSSP data\n");
+				x_fprintf(x_stdout, "BH Client did not provide NTLMSSP data\n");
 				return;
 			}
 
 			if ( ntlmssp_state != NULL ) {
 				DEBUG(1, ("Client wants a new NTLMSSP challenge, but "
 					  "already got one\n"));
-				x_fprintf(x_stdout, "BH Client wants a new "
-						    "NTLMSSP challenge, but "
-						    "already got one\n");
+				x_fprintf(x_stdout, "BH Client wants a new NTLMSSP challenge, but already got one\n");
 				ntlmssp_end(&ntlmssp_state);
 				return;
 			}
@@ -1198,12 +1135,12 @@
 			}
 
 			DEBUG(10, ("got NTLMSSP packet:\n"));
-			dump_data(10, request.negTokenInit.mechToken.data,
+			dump_data(10, (const char *)request.negTokenInit.mechToken.data,
 				  request.negTokenInit.mechToken.length);
 
 			response.type = SPNEGO_NEG_TOKEN_TARG;
 			response.negTokenTarg.supportedMech = SMB_STRDUP(OID_NTLMSSP);
-			response.negTokenTarg.mechListMIC = data_blob_null;
+			response.negTokenTarg.mechListMIC = data_blob(NULL, 0);
 
 			status = ntlmssp_update(ntlmssp_state,
 						       request.negTokenInit.mechToken,
@@ -1217,24 +1154,22 @@
 			char *principal;
 			DATA_BLOB ap_rep;
 			DATA_BLOB session_key;
-			struct PAC_DATA *pac_data = NULL;
 
 			if ( request.negTokenInit.mechToken.data == NULL ) {
 				DEBUG(1, ("Client did not provide Kerberos data\n"));
-				x_fprintf(x_stdout, "BH Client did not provide "
-						    "Kerberos data\n");
+				x_fprintf(x_stdout, "BH Client did not provide Kerberos data\n");
 				return;
 			}
 
 			response.type = SPNEGO_NEG_TOKEN_TARG;
 			response.negTokenTarg.supportedMech = SMB_STRDUP(OID_KERBEROS5_OLD);
-			response.negTokenTarg.mechListMIC = data_blob_null;
-			response.negTokenTarg.responseToken = data_blob_null;
+			response.negTokenTarg.mechListMIC = data_blob(NULL, 0);
+			response.negTokenTarg.responseToken = data_blob(NULL, 0);
 
 			status = ads_verify_ticket(mem_ctx, lp_realm(), 0,
 						   &request.negTokenInit.mechToken,
-						   &principal, &pac_data, &ap_rep,
-						   &session_key, True);
+						   &principal, NULL, &ap_rep,
+						   &session_key);
 
 			talloc_destroy(mem_ctx);
 
@@ -1248,9 +1183,7 @@
 				if (domain == NULL) {
 					DEBUG(1, ("Did not get a valid principal "
 						  "from ads_verify_ticket\n"));
-					x_fprintf(x_stdout, "BH Did not get a "
-						  "valid principal from "
-						  "ads_verify_ticket\n");
+					x_fprintf(x_stdout, "BH Did not get a valid principal from ads_verify_ticket\n");
 					return;
 				}
 
@@ -1273,15 +1206,13 @@
 			   is the only one we support that sends this stuff */
 			DEBUG(1, ("Got a negTokenTarg for something non-NTLMSSP: %s\n",
 				  request.negTokenTarg.supportedMech));
-			x_fprintf(x_stdout, "BH Got a negTokenTarg for "
-					    "something non-NTLMSSP\n");
+			x_fprintf(x_stdout, "BH Got a negTokenTarg for something non-NTLMSSP\n");
 			return;
 		}
 
 		if (request.negTokenTarg.responseToken.data == NULL) {
 			DEBUG(1, ("Got a negTokenTarg without a responseToken!\n"));
-			x_fprintf(x_stdout, "BH Got a negTokenTarg without a "
-					    "responseToken!\n");
+			x_fprintf(x_stdout, "BH Got a negTokenTarg without a responseToken!\n");
 			return;
 		}
 
@@ -1291,7 +1222,7 @@
 
 		response.type = SPNEGO_NEG_TOKEN_TARG;
 		response.negTokenTarg.supportedMech = SMB_STRDUP(OID_NTLMSSP);
-		response.negTokenTarg.mechListMIC = data_blob_null;
+		response.negTokenTarg.mechListMIC = data_blob(NULL, 0);
 
 		if (NT_STATUS_IS_OK(status)) {
 			user = SMB_STRDUP(ntlmssp_state->user);
@@ -1305,24 +1236,18 @@
 	if (NT_STATUS_IS_OK(status)) {
 		response.negTokenTarg.negResult = SPNEGO_ACCEPT_COMPLETED;
 		reply_code = "AF";
-		reply_argument = talloc_asprintf(ctx, "%s\\%s", domain, user);
+		pstr_sprintf(reply_argument, "%s\\%s", domain, user);
 	} else if (NT_STATUS_EQUAL(status,
 				   NT_STATUS_MORE_PROCESSING_REQUIRED)) {
 		response.negTokenTarg.negResult = SPNEGO_ACCEPT_INCOMPLETE;
 		reply_code = "TT";
-		reply_argument = talloc_strdup(ctx, "*");
+		pstr_sprintf(reply_argument, "*");
 	} else {
 		response.negTokenTarg.negResult = SPNEGO_REJECT;
 		reply_code = "NA";
-		reply_argument = talloc_strdup(ctx, nt_errstr(status));
+		pstrcpy(reply_argument, nt_errstr(status));
 	}
 
-	if (!reply_argument) {
-		DEBUG(1, ("Could not write SPNEGO data blob\n"));
-		x_fprintf(x_stdout, "BH Could not write SPNEGO data blob\n");
-		return;
-	}
-
 	SAFE_FREE(user);
 	SAFE_FREE(domain);
 
@@ -1335,12 +1260,12 @@
 		return;
 	}
 
-	reply_base64 = base64_encode_data_blob(talloc_tos(), token);
+	reply_base64 = base64_encode_data_blob(token);
 
 	x_fprintf(x_stdout, "%s %s %s\n",
 		  reply_code, reply_base64, reply_argument);
 
-	TALLOC_FREE(reply_base64);
+	SAFE_FREE(reply_base64);
 	data_blob_free(&token);
 
 	return;
@@ -1348,10 +1273,10 @@
 
 static NTLMSSP_STATE *client_ntlmssp_state = NULL;
 
-static bool manage_client_ntlmssp_init(SPNEGO_DATA spnego)
+static BOOL manage_client_ntlmssp_init(SPNEGO_DATA spnego)
 {
 	NTSTATUS status;
-	DATA_BLOB null_blob = data_blob_null;
+	DATA_BLOB null_blob = data_blob(NULL, 0);
 	DATA_BLOB to_server;
 	char *to_server_base64;
 	const char *my_mechs[] = {OID_NTLMSSP, NULL};
@@ -1402,17 +1327,17 @@
 	write_spnego_data(&to_server, &spnego);
 	data_blob_free(&spnego.negTokenInit.mechToken);
 
-	to_server_base64 = base64_encode_data_blob(talloc_tos(), to_server);
+	to_server_base64 = base64_encode_data_blob(to_server);
 	data_blob_free(&to_server);
 	x_fprintf(x_stdout, "KK %s\n", to_server_base64);
-	TALLOC_FREE(to_server_base64);
+	SAFE_FREE(to_server_base64);
 	return True;
 }
 
 static void manage_client_ntlmssp_targ(SPNEGO_DATA spnego)
 {
 	NTSTATUS status;
-	DATA_BLOB null_blob = data_blob_null;
+	DATA_BLOB null_blob = data_blob(NULL, 0);
 	DATA_BLOB request;
 	DATA_BLOB to_server;
 	char *to_server_base64;
@@ -1445,8 +1370,7 @@
 		DEBUG(1, ("Expected MORE_PROCESSING_REQUIRED from "
 			  "ntlmssp_client_update, got: %s\n",
 			  nt_errstr(status)));
-		x_fprintf(x_stdout, "BH Expected MORE_PROCESSING_REQUIRED from "
-				    "ntlmssp_client_update\n");
+		x_fprintf(x_stdout, "BH Expected MORE_PROCESSING_REQUIRED from ntlmssp_client_update\n");
 		data_blob_free(&request);
 		ntlmssp_end(&client_ntlmssp_state);
 		return;
@@ -1461,24 +1385,24 @@
 	write_spnego_data(&to_server, &spnego);
 	data_blob_free(&request);
 
-	to_server_base64 = base64_encode_data_blob(talloc_tos(), to_server);
+	to_server_base64 = base64_encode_data_blob(to_server);
 	data_blob_free(&to_server);
 	x_fprintf(x_stdout, "KK %s\n", to_server_base64);
-	TALLOC_FREE(to_server_base64);
+	SAFE_FREE(to_server_base64);
 	return;
 }
 
 #ifdef HAVE_KRB5
 
-static bool manage_client_krb5_init(SPNEGO_DATA spnego)
+static BOOL manage_client_krb5_init(SPNEGO_DATA spnego)
 {
 	char *principal;
 	DATA_BLOB tkt, to_server;
-	DATA_BLOB session_key_krb5 = data_blob_null;
+	DATA_BLOB session_key_krb5 = data_blob(NULL, 0);
 	SPNEGO_DATA reply;
 	char *reply_base64;
 	int retval;
-
+	
 	const char *my_mechs[] = {OID_KERBEROS5_OLD, NULL};
 	ssize_t len;
 
@@ -1503,8 +1427,9 @@
 	retval = cli_krb5_get_ticket(principal, 0, &tkt, &session_key_krb5, 0, NULL, NULL);
 
 	if (retval) {
-		char *user = NULL;
 
+		pstring user;
+
 		/* Let's try to first get the TGT, for that we need a
                    password. */
 
@@ -1514,10 +1439,7 @@
 			return True;
 		}
 
-		user = talloc_asprintf(talloc_tos(), "%s@%s", opt_username, opt_domain);
-		if (!user) {
-			return false;
-		}
+		pstr_sprintf(user, "%s@%s", opt_username, opt_domain);
 
 		if ((retval = kerberos_kinit_password(user, opt_password, 0, NULL))) {
 			DEBUG(10, ("Requesting TGT failed: %s\n", error_message(retval)));
@@ -1540,7 +1462,7 @@
 	reply.negTokenInit.mechTypes = my_mechs;
 	reply.negTokenInit.reqFlags = 0;
 	reply.negTokenInit.mechToken = tkt;
-	reply.negTokenInit.mechListMIC = data_blob_null;
+	reply.negTokenInit.mechListMIC = data_blob(NULL, 0);
 
 	len = write_spnego_data(&to_server, &reply);
 	data_blob_free(&tkt);
@@ -1550,10 +1472,10 @@
 		return False;
 	}
 
-	reply_base64 = base64_encode_data_blob(talloc_tos(), to_server);
+	reply_base64 = base64_encode_data_blob(to_server);
 	x_fprintf(x_stdout, "KK %s *\n", reply_base64);
 
-	TALLOC_FREE(reply_base64);
+	SAFE_FREE(reply_base64);
 	data_blob_free(&to_server);
 	DEBUG(10, ("sent GSS-SPNEGO KERBEROS5 negTokenInit\n"));
 	return True;
@@ -1564,8 +1486,7 @@
 	switch (spnego.negTokenTarg.negResult) {
 	case SPNEGO_ACCEPT_INCOMPLETE:
 		DEBUG(1, ("Got a Kerberos negTokenTarg with ACCEPT_INCOMPLETE\n"));
-		x_fprintf(x_stdout, "BH Got a Kerberos negTokenTarg with "
-				    "ACCEPT_INCOMPLETE\n");
+		x_fprintf(x_stdout, "BH Got a Kerberos negTokenTarg with ACCEPT_INCOMPLETE\n");
 		break;
 	case SPNEGO_ACCEPT_COMPLETED:
 		DEBUG(10, ("Accept completed\n"));
@@ -1583,8 +1504,8 @@
 
 #endif
 
-static void manage_gss_spnego_client_request(struct ntlm_auth_state *state,
-						char *buf, int length)
+static void manage_gss_spnego_client_request(enum stdio_helper_mode stdio_helper_mode, 
+					     char *buf, int length) 
 {
 	DATA_BLOB request;
 	SPNEGO_DATA spnego;
@@ -1689,9 +1610,7 @@
 				DEBUG(1, ("Got a negTokenTarg with no mech and an "
 					  "unknown negResult: %d\n",
 					  spnego.negTokenTarg.negResult));
-				x_fprintf(x_stdout, "BH Got a negTokenTarg with"
-						    " no mech and an unknown "
-						    "negResult\n");
+				x_fprintf(x_stdout, "BH Got a negTokenTarg with no mech and an unknown negResult\n");
 			}
 
 			ntlmssp_end(&client_ntlmssp_state);
@@ -1723,8 +1642,8 @@
 	return;
 }
 
-static void manage_ntlm_server_1_request(struct ntlm_auth_state *state,
-						char *buf, int length)
+static void manage_ntlm_server_1_request(enum stdio_helper_mode stdio_helper_mode, 
+					 char *buf, int length) 
 {
 	char *request, *parameter;	
 	static DATA_BLOB challenge;
@@ -1734,8 +1653,8 @@
 	static char *username;
 	static char *domain;
 	static char *plaintext_password;
-	static bool ntlm_server_1_user_session_key;
-	static bool ntlm_server_1_lm_session_key;
+	static BOOL ntlm_server_1_user_session_key;
+	static BOOL ntlm_server_1_lm_session_key;
 	
 	if (strequal(buf, ".")) {
 		if (!full_username && !username) {	
@@ -1832,9 +1751,9 @@
 			}
 		}
 		/* clear out the state */
-		challenge = data_blob_null;
-		nt_response = data_blob_null;
-		lm_response = data_blob_null;
+		challenge = data_blob(NULL, 0);
+		nt_response = data_blob(NULL, 0);
+		lm_response = data_blob(NULL, 0);
 		SAFE_FREE(full_username);
 		SAFE_FREE(username);
 		SAFE_FREE(domain);
@@ -1881,7 +1800,7 @@
 			x_fprintf(x_stdout, "Error: hex decode of %s failed! (got %d bytes, expected 8)\n.\n", 
 				  parameter,
 				  (int)challenge.length);
-			challenge = data_blob_null;
+			challenge = data_blob(NULL, 0);
 		}
 	} else if (strequal(request, "NT-Response")) {
 		nt_response = strhex_to_data_blob(NULL, parameter);
@@ -1889,7 +1808,7 @@
 			x_fprintf(x_stdout, "Error: hex decode of %s failed! (only got %d bytes, needed at least 24)\n.\n", 
 				  parameter,
 				  (int)nt_response.length);
-			nt_response = data_blob_null;
+			nt_response = data_blob(NULL, 0);
 		}
 	} else if (strequal(request, "LANMAN-Response")) {
 		lm_response = strhex_to_data_blob(NULL, parameter);
@@ -1897,7 +1816,7 @@
 			x_fprintf(x_stdout, "Error: hex decode of %s failed! (got %d bytes, expected 24)\n.\n", 
 				  parameter,
 				  (int)lm_response.length);
-			lm_response = data_blob_null;
+			lm_response = data_blob(NULL, 0);
 		}
 	} else if (strequal(request, "Password")) {
 		plaintext_password = smb_xstrdup(parameter);
@@ -1916,8 +1835,7 @@
 	}
 }
 
-static void manage_ntlm_change_password_1_request(struct ntlm_auth_state *state,
-							char *buf, int length)
+static void manage_ntlm_change_password_1_request(enum stdio_helper_mode helper_mode, char *buf, int length)
 {
 	char *request, *parameter;	
 	static DATA_BLOB new_nt_pswd;
@@ -2032,10 +1950,10 @@
 			SAFE_FREE(error_string);
 		}
 		/* clear out the state */
-		new_nt_pswd = data_blob_null;
-		old_nt_hash_enc = data_blob_null;
-		new_lm_pswd = data_blob_null;
-		old_nt_hash_enc = data_blob_null;
+		new_nt_pswd = data_blob(NULL, 0);
+		old_nt_hash_enc = data_blob(NULL, 0);
+		new_lm_pswd = data_blob(NULL, 0);
+		old_nt_hash_enc = data_blob(NULL, 0);
 		SAFE_FREE(full_username);
 		SAFE_FREE(username);
 		SAFE_FREE(domain);
@@ -2081,7 +1999,7 @@
 				  "(got %d bytes, expected 516)\n.\n", 
 				  parameter,
 				  (int)new_nt_pswd.length);
-			new_nt_pswd = data_blob_null;
+			new_nt_pswd = data_blob(NULL, 0);
 		}
 	} else if (strequal(request, "old-nt-hash-blob")) {
 		old_nt_hash_enc = strhex_to_data_blob(NULL, parameter);
@@ -2090,7 +2008,7 @@
 				  "(got %d bytes, expected 16)\n.\n", 
 				  parameter,
 				  (int)old_nt_hash_enc.length);
-			old_nt_hash_enc = data_blob_null;
+			old_nt_hash_enc = data_blob(NULL, 0);
 		}
 	} else if (strequal(request, "new-lm-password-blob")) {
 		new_lm_pswd = strhex_to_data_blob(NULL, parameter);
@@ -2099,7 +2017,7 @@
 				  "(got %d bytes, expected 516)\n.\n", 
 				  parameter,
 				  (int)new_lm_pswd.length);
-			new_lm_pswd = data_blob_null;
+			new_lm_pswd = data_blob(NULL, 0);
 		}
 	}
 	else if (strequal(request, "old-lm-hash-blob"))	{
@@ -2110,7 +2028,7 @@
 				  "(got %d bytes, expected 16)\n.\n", 
 				  parameter,
 				  (int)old_lm_hash_enc.length);
-			old_lm_hash_enc = data_blob_null;
+			old_lm_hash_enc = data_blob(NULL, 0);
 		}
 	} else if (strequal(request, "nt-domain")) {
 		domain = smb_xstrdup(parameter);
@@ -2127,100 +2045,64 @@
 	}
 }
 
-static void manage_squid_request(struct ntlm_auth_state *state,
-		stdio_helper_function fn)
+static void manage_squid_request(enum stdio_helper_mode helper_mode, stdio_helper_function fn) 
 {
-	char *buf;
-	char tmp[INITIAL_BUFFER_SIZE+1];
-	int length, buf_size = 0;
+	char buf[SQUID_BUFFER_SIZE+1];
+	int length;
 	char *c;
+	static BOOL err;
 
-	buf = talloc_strdup(state->mem_ctx, "");
-	if (!buf) {
-		DEBUG(0, ("Failed to allocate input buffer.\n"));
+	/* this is not a typo - x_fgets doesn't work too well under squid */
+	if (fgets(buf, sizeof(buf)-1, stdin) == NULL) {
+		if (ferror(stdin)) {
+			DEBUG(1, ("fgets() failed! dying..... errno=%d (%s)\n", ferror(stdin),
+				  strerror(ferror(stdin))));
+			
+			exit(1);    /* BIIG buffer */
+		}
+		exit(0);
+	}
+    
+	c=(char *)memchr(buf,'\n',sizeof(buf)-1);
+	if (c) {
+		*c = '\0';
+		length = c-buf;
+	} else {
+		err = 1;
+		return;
+	}
+	if (err) {
+		DEBUG(2, ("Oversized message\n"));
 		x_fprintf(x_stderr, "ERR\n");
-		exit(1);
+		err = 0;
+		return;
 	}
 
-	do {
-
-		/* this is not a typo - x_fgets doesn't work too well under
-		 * squid */
-		if (fgets(tmp, sizeof(tmp)-1, stdin) == NULL) {
-			if (ferror(stdin)) {
-				DEBUG(1, ("fgets() failed! dying..... errno=%d "
-					  "(%s)\n", ferror(stdin),
-					  strerror(ferror(stdin))));
-
-				exit(1);
-			}
-			exit(0);
-		}
-
-		buf = talloc_strdup_append_buffer(buf, tmp);
-		buf_size += INITIAL_BUFFER_SIZE;
-
-		if (buf_size > MAX_BUFFER_SIZE) {
-			DEBUG(2, ("Oversized message\n"));
-			x_fprintf(x_stderr, "ERR\n");
-			talloc_free(buf);
-			return;
-		}
-
-		c = strchr(buf, '\n');
-	} while (c == NULL);
-
-	*c = '\0';
-	length = c-buf;
-
 	DEBUG(10, ("Got '%s' from squid (length: %d).\n",buf,length));
 
 	if (buf[0] == '\0') {
 		DEBUG(2, ("Invalid Request\n"));
 		x_fprintf(x_stderr, "ERR\n");
-		talloc_free(buf);
 		return;
 	}
-
-	fn(state, buf, length);
-	talloc_free(buf);
+	
+	fn(helper_mode, buf, length);
 }
 
 
 static void squid_stream(enum stdio_helper_mode stdio_mode, stdio_helper_function fn) {
-	TALLOC_CTX *mem_ctx;
-	struct ntlm_auth_state *state;
-
 	/* initialize FDescs */
 	x_setbuf(x_stdout, NULL);
 	x_setbuf(x_stderr, NULL);
-
-	mem_ctx = talloc_init("ntlm_auth");
-	if (!mem_ctx) {
-		DEBUG(0, ("squid_stream: Failed to create talloc context\n"));
-		x_fprintf(x_stderr, "ERR\n");
-		exit(1);
-	}
-
-	state = talloc_zero(mem_ctx, struct ntlm_auth_state);
-	if (!state) {
-		DEBUG(0, ("squid_stream: Failed to talloc ntlm_auth_state\n"));
-		x_fprintf(x_stderr, "ERR\n");
-		exit(1);
-	}
-
-	state->mem_ctx = mem_ctx;
-	state->helper_mode = stdio_mode;
-
 	while(1) {
-		manage_squid_request(state, fn);
+		manage_squid_request(stdio_mode, fn);
 	}
 }
 
 
 /* Authenticate a user with a challenge/response */
 
-static bool check_auth_crap(void)
+static BOOL check_auth_crap(void)
 {
 	NTSTATUS nt_status;
 	uint32 flags = 0;
@@ -2299,7 +2181,6 @@
 
  int main(int argc, const char **argv)
 {
-	TALLOC_CTX *frame = talloc_stackframe();
 	int opt;
 	static const char *helper_protocol;
 	static int diagnostics;
@@ -2333,8 +2214,7 @@
 		{ "use-cached-creds", 0, POPT_ARG_NONE, &use_cached_creds, OPT_USE_CACHED_CREDS, "Use cached credentials if no password is given"},
 		{ "diagnostics", 0, POPT_ARG_NONE, &diagnostics, OPT_DIAGNOSTICS, "Perform diagnostics on the authentictaion chain"},
 		{ "require-membership-of", 0, POPT_ARG_STRING, &require_membership_of, OPT_REQUIRE_MEMBERSHIP, "Require that a user be a member of this group (either name or SID) for authentication to succeed" },
-		POPT_COMMON_CONFIGFILE
-		POPT_COMMON_VERSION
+		POPT_COMMON_SAMBA
 		POPT_TABLEEND
 	};
 
@@ -2342,7 +2222,15 @@
 	load_case_tables();
 
 	dbf = x_stderr;
+	
+	/* Samba client initialisation */
 
+	if (!lp_load(dyn_CONFIGFILE, True, False, False, True)) {
+		d_fprintf(stderr, "ntlm_auth: error opening config file %s. Error was %s\n",
+			dyn_CONFIGFILE, strerror(errno));
+		exit(1);
+	}
+
 	/* Parse options */
 
 	pc = poptGetContext("ntlm_auth", argc, argv, long_options, 0);
@@ -2354,18 +2242,6 @@
 		return 1;
 	}
 
-	while((opt = poptGetNextOpt(pc)) != -1) {
-		/* Get generic config options like --configfile */
-	}
-
-	poptFreeContext(pc);
-
-	if (!lp_load(get_dyn_CONFIGFILE(), True, False, False, True)) {
-		d_fprintf(stderr, "ntlm_auth: error opening config file %s. Error was %s\n",
-			get_dyn_CONFIGFILE(), strerror(errno));
-		exit(1);
-	}
-
 	pc = poptGetContext(NULL, argc, (const char **)argv, long_options, 
 			    POPT_CONTEXT_KEEP_FIRST);
 
@@ -2486,6 +2362,5 @@
 	/* Exit code */
 
 	poptFreeContext(pc);
-	TALLOC_FREE(frame);
 	return 0;
 }

Modified: branches/samba/upstream/source/utils/ntlm_auth.h
===================================================================
--- branches/samba/upstream/source/utils/ntlm_auth.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/ntlm_auth.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #include "utils/ntlm_auth_proto.h"
  

Modified: branches/samba/upstream/source/utils/ntlm_auth_diagnostics.c
===================================================================
--- branches/samba/upstream/source/utils/ntlm_auth_diagnostics.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/ntlm_auth_diagnostics.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -44,9 +45,9 @@
  * Test the normal 'LM and NTLM' combination
  */
 
-static bool test_lm_ntlm_broken(enum ntlm_break break_which) 
+static BOOL test_lm_ntlm_broken(enum ntlm_break break_which) 
 {
-	bool pass = True;
+	BOOL pass = True;
 	NTSTATUS nt_status;
 	uint32 flags = 0;
 	DATA_BLOB lm_response = data_blob(NULL, 24);
@@ -115,9 +116,9 @@
 		   sizeof(lm_key)) != 0) {
 		DEBUG(1, ("LM Key does not match expectations!\n"));
  		DEBUG(1, ("lm_key:\n"));
-		dump_data(1, lm_key, 8);
+		dump_data(1, (const char *)lm_key, 8);
 		DEBUG(1, ("expected:\n"));
-		dump_data(1, lm_hash, 8);
+		dump_data(1, (const char *)lm_hash, 8);
 		pass = False;
 	}
 
@@ -126,9 +127,9 @@
 			   8) != 0) {
 			DEBUG(1, ("NT Session Key does not match expectations (should be LM hash)!\n"));
 			DEBUG(1, ("user_session_key:\n"));
-			dump_data(1, user_session_key, sizeof(user_session_key));
+			dump_data(1, (const char *)user_session_key, sizeof(user_session_key));
 			DEBUG(1, ("expected:\n"));
-			dump_data(1, lm_hash, sizeof(lm_hash));
+			dump_data(1, (const char *)lm_hash, sizeof(lm_hash));
 			pass = False;
 		}
 	} else {		
@@ -136,9 +137,9 @@
 			   sizeof(user_session_key)) != 0) {
 			DEBUG(1, ("NT Session Key does not match expectations!\n"));
 			DEBUG(1, ("user_session_key:\n"));
-			dump_data(1, user_session_key, 16);
+			dump_data(1, (const char *)user_session_key, 16);
 			DEBUG(1, ("expected:\n"));
-			dump_data(1, session_key.data, session_key.length);
+			dump_data(1, (const char *)session_key.data, session_key.length);
 			pass = False;
 		}
 	}
@@ -149,7 +150,7 @@
  * Test LM authentication, no NT response supplied
  */
 
-static bool test_lm(void) 
+static BOOL test_lm(void) 
 {
 
 	return test_lm_ntlm_broken(NO_NT);
@@ -159,7 +160,7 @@
  * Test the NTLM response only, no LM.
  */
 
-static bool test_ntlm(void) 
+static BOOL test_ntlm(void) 
 {
 	return test_lm_ntlm_broken(NO_LM);
 }
@@ -168,9 +169,9 @@
  * Test the NTLM response only, but in the LM field.
  */
 
-static bool test_ntlm_in_lm(void) 
+static BOOL test_ntlm_in_lm(void) 
 {
-	bool pass = True;
+	BOOL pass = True;
 	NTSTATUS nt_status;
 	uint32 flags = 0;
 	DATA_BLOB nt_response = data_blob(NULL, 24);
@@ -214,17 +215,17 @@
 		   sizeof(lm_key)) != 0) {
 		DEBUG(1, ("LM Key does not match expectations!\n"));
  		DEBUG(1, ("lm_key:\n"));
-		dump_data(1, lm_key, 8);
+		dump_data(1, (const char *)lm_key, 8);
 		DEBUG(1, ("expected:\n"));
-		dump_data(1, lm_hash, 8);
+		dump_data(1, (const char *)lm_hash, 8);
 		pass = False;
 	}
 	if (memcmp(lm_hash, user_session_key, 8) != 0) {
 		DEBUG(1, ("Session Key (first 8 lm hash) does not match expectations!\n"));
  		DEBUG(1, ("user_session_key:\n"));
-		dump_data(1, user_session_key, 16);
+		dump_data(1, (const char *)user_session_key, 16);
  		DEBUG(1, ("expected:\n"));
-		dump_data(1, lm_hash, 8);
+		dump_data(1, (const char *)lm_hash, 8);
 		pass = False;
 	}
         return pass;
@@ -234,18 +235,18 @@
  * Test the NTLM response only, but in the both the NT and LM fields.
  */
 
-static bool test_ntlm_in_both(void) 
+static BOOL test_ntlm_in_both(void) 
 {
-	bool pass = True;
+	BOOL pass = True;
 	NTSTATUS nt_status;
 	uint32 flags = 0;
 	DATA_BLOB nt_response = data_blob(NULL, 24);
 	DATA_BLOB session_key = data_blob(NULL, 16);
 
-	uint8 lm_key[8];
-	uint8 lm_hash[16];
-	uint8 user_session_key[16];
-	uint8 nt_hash[16];
+	char lm_key[8];
+	char lm_hash[16];
+	char user_session_key[16];
+	char nt_hash[16];
 	DATA_BLOB chall = get_challenge();
 	char *error_string;
 	
@@ -256,10 +257,10 @@
 	flags |= WBFLAG_PAM_USER_SESSION_KEY;
 
 	SMBNTencrypt(opt_password,chall.data,nt_response.data);
-	E_md4hash(opt_password, nt_hash);
-	SMBsesskeygen_ntv1(nt_hash, NULL, session_key.data);
+	E_md4hash(opt_password, (unsigned char *)nt_hash);
+	SMBsesskeygen_ntv1((const unsigned char *)nt_hash, NULL, session_key.data);
 
-	E_deshash(opt_password, lm_hash); 
+	E_deshash(opt_password, (unsigned char *)lm_hash); 
 
 	nt_status = contact_winbind_auth_crap(opt_username, opt_domain, 
 					      opt_workstation,
@@ -267,8 +268,8 @@
 					      &nt_response,
 					      &nt_response,
 					      flags,
-					      lm_key,
-					      user_session_key,
+					      (unsigned char *)lm_key,
+					      (unsigned char *)user_session_key,
 					      &error_string, NULL);
 	
 	data_blob_free(&nt_response);
@@ -296,7 +297,7 @@
  		DEBUG(1, ("user_session_key:\n"));
 		dump_data(1, user_session_key, 16);
  		DEBUG(1, ("expected:\n"));
-		dump_data(1, session_key.data, session_key.length);
+		dump_data(1, (const char *)session_key.data, session_key.length);
 		pass = False;
 	}
 
@@ -308,14 +309,14 @@
  * Test the NTLMv2 and LMv2 responses
  */
 
-static bool test_lmv2_ntlmv2_broken(enum ntlm_break break_which) 
+static BOOL test_lmv2_ntlmv2_broken(enum ntlm_break break_which) 
 {
-	bool pass = True;
+	BOOL pass = True;
 	NTSTATUS nt_status;
 	uint32 flags = 0;
-	DATA_BLOB ntlmv2_response = data_blob_null;
-	DATA_BLOB lmv2_response = data_blob_null;
-	DATA_BLOB ntlmv2_session_key = data_blob_null;
+	DATA_BLOB ntlmv2_response = data_blob(NULL, 0);
+	DATA_BLOB lmv2_response = data_blob(NULL, 0);
+	DATA_BLOB ntlmv2_session_key = data_blob(NULL, 0);
 	DATA_BLOB names_blob = NTLMv2_generate_names_blob(get_winbind_netbios_name(), get_winbind_domain());
 
 	uchar user_session_key[16];
@@ -377,9 +378,9 @@
 		   sizeof(user_session_key)) != 0) {
 		DEBUG(1, ("USER (NTLMv2) Session Key does not match expectations!\n"));
  		DEBUG(1, ("user_session_key:\n"));
-		dump_data(1, user_session_key, 16);
+		dump_data(1, (const char *)user_session_key, 16);
  		DEBUG(1, ("expected:\n"));
-		dump_data(1, ntlmv2_session_key.data, ntlmv2_session_key.length);
+		dump_data(1, (const char *)ntlmv2_session_key.data, ntlmv2_session_key.length);
 		pass = False;
 	}
         return pass;
@@ -389,7 +390,7 @@
  * Test the NTLMv2 and LMv2 responses
  */
 
-static bool test_lmv2_ntlmv2(void) 
+static BOOL test_lmv2_ntlmv2(void) 
 {
 	return test_lmv2_ntlmv2_broken(BREAK_NONE);
 }
@@ -398,7 +399,7 @@
  * Test the LMv2 response only
  */
 
-static bool test_lmv2(void) 
+static BOOL test_lmv2(void) 
 {
 	return test_lmv2_ntlmv2_broken(NO_NT);
 }
@@ -407,42 +408,42 @@
  * Test the NTLMv2 response only
  */
 
-static bool test_ntlmv2(void) 
+static BOOL test_ntlmv2(void) 
 {
 	return test_lmv2_ntlmv2_broken(NO_LM);
 }
 
-static bool test_lm_ntlm(void) 
+static BOOL test_lm_ntlm(void) 
 {
 	return test_lm_ntlm_broken(BREAK_NONE);
 }
 
-static bool test_ntlm_lm_broken(void) 
+static BOOL test_ntlm_lm_broken(void) 
 {
 	return test_lm_ntlm_broken(BREAK_LM);
 }
 
-static bool test_ntlm_ntlm_broken(void) 
+static BOOL test_ntlm_ntlm_broken(void) 
 {
 	return test_lm_ntlm_broken(BREAK_NT);
 }
 
-static bool test_ntlmv2_lmv2_broken(void) 
+static BOOL test_ntlmv2_lmv2_broken(void) 
 {
 	return test_lmv2_ntlmv2_broken(BREAK_LM);
 }
 
-static bool test_ntlmv2_ntlmv2_broken(void) 
+static BOOL test_ntlmv2_ntlmv2_broken(void) 
 {
 	return test_lmv2_ntlmv2_broken(BREAK_NT);
 }
 
-static bool test_plaintext(enum ntlm_break break_which)
+static BOOL test_plaintext(enum ntlm_break break_which)
 {
 	NTSTATUS nt_status;
 	uint32 flags = 0;
-	DATA_BLOB nt_response = data_blob_null;
-	DATA_BLOB lm_response = data_blob_null;
+	DATA_BLOB nt_response = data_blob(NULL, 0);
+	DATA_BLOB lm_response = data_blob(NULL, 0);
 	char *password;
 	smb_ucs2_t *nt_response_ucs2;
 
@@ -470,17 +471,18 @@
 		exit(1);
 	}
 
-	if (!convert_string_allocate(NULL, CH_UNIX,
+	if ((convert_string_allocate(NULL, CH_UNIX, 
 				     CH_DOS, password,
 				     strlen(password)+1, 
-				     &lm_response.data,
-				     &lm_response.length, True)) {
+				     &lm_response.data,True)) == -1) {
 		DEBUG(0, ("convert_string_allocate failed!\n"));
 		exit(1);
 	}
 
 	SAFE_FREE(password);
 
+	lm_response.length = strlen((const char *)lm_response.data);
+
 	switch (break_which) {
 	case BREAK_NONE:
 		break;
@@ -525,23 +527,23 @@
         return break_which != BREAK_NT;
 }
 
-static bool test_plaintext_none_broken(void) {
+static BOOL test_plaintext_none_broken(void) {
 	return test_plaintext(BREAK_NONE);
 }
 
-static bool test_plaintext_lm_broken(void) {
+static BOOL test_plaintext_lm_broken(void) {
 	return test_plaintext(BREAK_LM);
 }
 
-static bool test_plaintext_nt_broken(void) {
+static BOOL test_plaintext_nt_broken(void) {
 	return test_plaintext(BREAK_NT);
 }
 
-static bool test_plaintext_nt_only(void) {
+static BOOL test_plaintext_nt_only(void) {
 	return test_plaintext(NO_LM);
 }
 
-static bool test_plaintext_lm_only(void) {
+static BOOL test_plaintext_lm_only(void) {
 	return test_plaintext(NO_NT);
 }
 
@@ -564,7 +566,7 @@
 */
 
 static const struct ntlm_tests {
-	bool (*fn)(void);
+	BOOL (*fn)(void);
 	const char *name;
 } test_table[] = {
 	{test_lm, "LM"},
@@ -587,10 +589,10 @@
 	{NULL, NULL}
 };
 
-bool diagnose_ntlm_auth(void)
+BOOL diagnose_ntlm_auth(void)
 {
 	unsigned int i;
-	bool pass = True;
+	BOOL pass = True;
 
 	for (i=0; test_table[i].fn; i++) {
 		if (!test_table[i].fn()) {

Modified: branches/samba/upstream/source/utils/passwd_util.c
===================================================================
--- branches/samba/upstream/source/utils/passwd_util.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/passwd_util.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -12,7 +12,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -21,7 +21,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -56,7 +57,7 @@
  Used if the '-s' (smbpasswd) or '-t' (pdbedit) option is set
  to silently get passwords to enable scripting.
 *************************************************************/
-char *get_pass( const char *prompt, bool stdin_get)
+char *get_pass( const char *prompt, BOOL stdin_get)
 {
 	char *p;
 	if (stdin_get) {

Modified: branches/samba/upstream/source/utils/pdbedit.c
===================================================================
--- branches/samba/upstream/source/utils/pdbedit.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/pdbedit.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -61,86 +62,70 @@
                             struct pdb_methods *out, 
                             const char *username) 
 {
+	struct samu *user = NULL;
 	NTSTATUS status;
-	struct pdb_search *u_search;
-	struct samr_displayentry userentry;
 
 	DEBUG(3, ("export_database: username=\"%s\"\n", username ? username : "(NULL)"));
 
-	u_search = pdb_search_init(PDB_USER_SEARCH);
-	if (u_search == NULL) {
-		DEBUG(0, ("pdb_search_init failed\n"));
+	status = in->setsampwent(in, 0, 0);
+	if ( NT_STATUS_IS_ERR(status) ) {
+		fprintf(stderr, "Unable to set account database iterator for %s!\n", 
+			in->name);
 		return 1;
 	}
 
-	if (!in->search_users(in, u_search, 0)) {
-		DEBUG(0, ("Could not start searching users\n"));
-		pdb_search_destroy(u_search);
+	if ( ( user = samu_new( NULL ) ) == NULL ) {
+		fprintf(stderr, "export_database: Memory allocation failure!\n");
 		return 1;
 	}
 
-	while (u_search->next_entry(u_search, &userentry)) {
-		struct samu *user;
-		struct samu *account;
-		DOM_SID user_sid;
+	while ( NT_STATUS_IS_OK(in->getsampwent(in, user)) ) 
+	{
+		DEBUG(4, ("Processing account %s\n", user->username));
 
-		DEBUG(4, ("Processing account %s\n", userentry.account_name));
+		/* If we don't have a specific user or if we do and 
+		   the login name matches */
 
-		if ((username != NULL)
-		    && (strcmp(username, userentry.account_name) != 0)) {
-			/*
-			 * ignore unwanted users
-			 */
-			continue;
-		}
+		if ( !username || (strcmp(username, user->username) == 0)) {
+			struct samu *account;
 
-		user = samu_new(talloc_tos());
-		if (user == NULL) {
-			DEBUG(0, ("talloc failed\n"));
-			break;
-		}
+			if ( (account = samu_new( NULL )) == NULL ) {
+				fprintf(stderr, "export_database: Memory allocation failure!\n");
+				TALLOC_FREE( user );
+				in->endsampwent( in );
+				return 1;
+			}
 
-		sid_compose(&user_sid, get_global_sam_sid(), userentry.rid);
+			printf("Importing account for %s...", user->username);
+			if ( !NT_STATUS_IS_OK(out->getsampwnam( out, account, user->username )) ) {
+				status = out->add_sam_account(out, user);
+			} else {
+				status = out->update_sam_account( out, user );
+			}
 
-		status = in->getsampwsid(in, user, &user_sid);
+			if ( NT_STATUS_IS_OK(status) ) {
+				printf( "ok\n");
+			} else {
+				printf( "failed\n");
+			}
 
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(2, ("getsampwsid failed: %s\n",
-				  nt_errstr(status)));
-			TALLOC_FREE(user);
-			continue;
+			TALLOC_FREE( account );
 		}
 
-		account = samu_new(NULL);
-		if (account == NULL) {
-			fprintf(stderr, "export_database: Memory allocation "
-				"failure!\n");
-			TALLOC_FREE( user );
-			pdb_search_destroy(u_search);
-			return 1;
-		}
+		/* clean up and get ready for another run */
 
-		printf("Importing account for %s...", user->username);
-		status = out->getsampwnam(out, account, user->username);
+		TALLOC_FREE( user );
 
-		if (NT_STATUS_IS_OK(status)) {
-			status = out->update_sam_account( out, user );
-		} else {
-			status = out->add_sam_account(out, user);
+		if ( ( user = samu_new( NULL ) ) == NULL ) {
+			fprintf(stderr, "export_database: Memory allocation failure!\n");
+			return 1;
 		}
-
-		if ( NT_STATUS_IS_OK(status) ) {
-			printf( "ok\n");
-		} else {
-			printf( "failed\n");
-		}
-
-		TALLOC_FREE( account );
-		TALLOC_FREE( user );
 	}
 
-	pdb_search_destroy(u_search);
+	TALLOC_FREE( user );
 
+	in->endsampwent(in);
+
 	return 0;
 }
 
@@ -230,25 +215,25 @@
  Print info from sam structure
 **********************************************************/
 
-static int print_sam_info (struct samu *sam_pwent, bool verbosity, bool smbpwdstyle)
+static int print_sam_info (struct samu *sam_pwent, BOOL verbosity, BOOL smbpwdstyle)
 {
 	uid_t uid;
 	time_t tmp;
 
 	/* TODO: chaeck if entry is a user or a workstation */
 	if (!sam_pwent) return -1;
-
+	
 	if (verbosity) {
-		char temp[44];
+		pstring temp;
 		const uint8 *hours;
-
+		
 		printf ("Unix username:        %s\n", pdb_get_username(sam_pwent));
 		printf ("NT username:          %s\n", pdb_get_nt_username(sam_pwent));
 		printf ("Account Flags:        %s\n", pdb_encode_acct_ctrl(pdb_get_acct_ctrl(sam_pwent), NEW_PW_FORMAT_SPACE_PADDED_LEN));
 		printf ("User SID:             %s\n",
-			sid_string_tos(pdb_get_user_sid(sam_pwent)));
+			sid_string_static(pdb_get_user_sid(sam_pwent)));
 		printf ("Primary Group SID:    %s\n",
-			sid_string_tos(pdb_get_group_sid(sam_pwent)));
+			sid_string_static(pdb_get_group_sid(sam_pwent)));
 		printf ("Full Name:            %s\n", pdb_get_fullname(sam_pwent));
 		printf ("Home Directory:       %s\n", pdb_get_homedir(sam_pwent));
 		printf ("HomeDir Drive:        %s\n", pdb_get_dir_drive(sam_pwent));
@@ -258,34 +243,34 @@
 		printf ("Account desc:         %s\n", pdb_get_acct_desc(sam_pwent));
 		printf ("Workstations:         %s\n", pdb_get_workstations(sam_pwent));
 		printf ("Munged dial:          %s\n", pdb_get_munged_dial(sam_pwent));
-
+		
 		tmp = pdb_get_logon_time(sam_pwent);
 		printf ("Logon time:           %s\n", tmp ? http_timestring(tmp) : "0");
-
+		
 		tmp = pdb_get_logoff_time(sam_pwent);
 		printf ("Logoff time:          %s\n", tmp ? http_timestring(tmp) : "0");
-
+		
 		tmp = pdb_get_kickoff_time(sam_pwent);
 		printf ("Kickoff time:         %s\n", tmp ? http_timestring(tmp) : "0");
-
+		
 		tmp = pdb_get_pass_last_set_time(sam_pwent);
 		printf ("Password last set:    %s\n", tmp ? http_timestring(tmp) : "0");
-
+		
 		tmp = pdb_get_pass_can_change_time(sam_pwent);
 		printf ("Password can change:  %s\n", tmp ? http_timestring(tmp) : "0");
-
+		
 		tmp = pdb_get_pass_must_change_time(sam_pwent);
 		printf ("Password must change: %s\n", tmp ? http_timestring(tmp) : "0");
 
 		tmp = pdb_get_bad_password_time(sam_pwent);
 		printf ("Last bad password   : %s\n", tmp ? http_timestring(tmp) : "0");
-		printf ("Bad password count  : %d\n",
+		printf ("Bad password count  : %d\n", 
 			pdb_get_bad_password_count(sam_pwent));
-
+		
 		hours = pdb_get_hours(sam_pwent);
 		pdb_sethexhours(temp, hours);
 		printf ("Logon hours         : %s\n", temp);
-
+		
 	} else if (smbpwdstyle) {
 		char lm_passwd[33];
 		char nt_passwd[33];
@@ -293,7 +278,7 @@
 		uid = nametouid(pdb_get_username(sam_pwent));
 		pdb_sethexpwd(lm_passwd, pdb_get_lanman_passwd(sam_pwent), pdb_get_acct_ctrl(sam_pwent));
 		pdb_sethexpwd(nt_passwd, pdb_get_nt_passwd(sam_pwent), pdb_get_acct_ctrl(sam_pwent));
-
+			
 		printf("%s:%lu:%s:%s:%s:LCT-%08X:\n",
 		       pdb_get_username(sam_pwent),
 		       (unsigned long)uid,
@@ -314,10 +299,10 @@
  Get an Print User Info
 **********************************************************/
 
-static int print_user_info (struct pdb_methods *in, const char *username, bool verbosity, bool smbpwdstyle)
+static int print_user_info (struct pdb_methods *in, const char *username, BOOL verbosity, BOOL smbpwdstyle)
 {
 	struct samu *sam_pwent=NULL;
-	bool ret;
+	BOOL ret;
 
 	if ( (sam_pwent = samu_new( NULL )) == NULL ) {
 		return -1;
@@ -340,52 +325,35 @@
 /*********************************************************
  List Users
 **********************************************************/
-static int print_users_list (struct pdb_methods *in, bool verbosity, bool smbpwdstyle)
+static int print_users_list (struct pdb_methods *in, BOOL verbosity, BOOL smbpwdstyle)
 {
-	struct pdb_search *u_search;
-	struct samr_displayentry userentry;
-
-	u_search = pdb_search_init(PDB_USER_SEARCH);
-	if (u_search == NULL) {
-		DEBUG(0, ("pdb_search_init failed\n"));
+	struct samu *sam_pwent=NULL;
+	BOOL check;
+	
+	check = NT_STATUS_IS_OK(in->setsampwent(in, False, 0));
+	if (!check) {
 		return 1;
 	}
 
-	if (!in->search_users(in, u_search, 0)) {
-		DEBUG(0, ("Could not start searching users\n"));
-		pdb_search_destroy(u_search);
+	check = True;
+	if ( (sam_pwent = samu_new( NULL )) == NULL ) {
 		return 1;
 	}
 
-	while (u_search->next_entry(u_search, &userentry)) {
-		struct samu *sam_pwent;
-		DOM_SID user_sid;
-		NTSTATUS status;
-
-		sam_pwent = samu_new(talloc_tos());
-		if (sam_pwent == NULL) {
-			DEBUG(0, ("talloc failed\n"));
-			break;
-		}
-
-		sid_compose(&user_sid, get_global_sam_sid(), userentry.rid);
-
-		status = in->getsampwsid(in, sam_pwent, &user_sid);
-
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(2, ("getsampwsid failed: %s\n",
-				  nt_errstr(status)));
-			TALLOC_FREE(sam_pwent);
-			continue;
-		}
-
+	while (check && NT_STATUS_IS_OK(in->getsampwent (in, sam_pwent))) {
 		if (verbosity)
 			printf ("---------------\n");
 		print_sam_info (sam_pwent, verbosity, smbpwdstyle);
 		TALLOC_FREE(sam_pwent);
+		
+		if ( (sam_pwent = samu_new( NULL )) == NULL ) {
+			check = False;
+		}
 	}
-	pdb_search_destroy(u_search);
-
+	if (check) 
+		TALLOC_FREE(sam_pwent);
+	
+	in->endsampwent(in);
 	return 0;
 }
 
@@ -394,50 +362,38 @@
 **********************************************************/
 static int fix_users_list (struct pdb_methods *in)
 {
-	struct pdb_search *u_search;
-	struct samr_displayentry userentry;
-
-	u_search = pdb_search_init(PDB_USER_SEARCH);
-	if (u_search == NULL) {
-		DEBUG(0, ("pdb_search_init failed\n"));
+	struct samu *sam_pwent=NULL;
+	BOOL check;
+	
+	check = NT_STATUS_IS_OK(in->setsampwent(in, False, 0));
+	if (!check) {
 		return 1;
 	}
 
-	if (!in->search_users(in, u_search, 0)) {
-		DEBUG(0, ("Could not start searching users\n"));
-		pdb_search_destroy(u_search);
+	check = True;
+	if ( (sam_pwent = samu_new( NULL )) == NULL ) {
 		return 1;
 	}
 
-	while (u_search->next_entry(u_search, &userentry)) {
-		struct samu *sam_pwent;
-		DOM_SID user_sid;
-		NTSTATUS status;
-
-		sam_pwent = samu_new(talloc_tos());
-		if (sam_pwent == NULL) {
-			DEBUG(0, ("talloc failed\n"));
-			break;
-		}
-
-		sid_compose(&user_sid, get_global_sam_sid(), userentry.rid);
-
-		status = in->getsampwsid(in, sam_pwent, &user_sid);
-
-		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(2, ("getsampwsid failed: %s\n",
-				  nt_errstr(status)));
-			TALLOC_FREE(sam_pwent);
-			continue;
-		}
-
+	while (check && NT_STATUS_IS_OK(in->getsampwent (in, sam_pwent))) {
+		printf("Updating record for user %s\n", pdb_get_username(sam_pwent));
+	
 		if (!NT_STATUS_IS_OK(pdb_update_sam_account(sam_pwent))) {
-			printf("Update of user %s failed!\n",
-			       pdb_get_username(sam_pwent));
+			printf("Update of user %s failed!\n", pdb_get_username(sam_pwent));
 		}
 		TALLOC_FREE(sam_pwent);
+		if ( (sam_pwent = samu_new( NULL )) == NULL ) {
+			check = False;
+		}
+		if (!check) {
+			fprintf(stderr, "Failed to initialise new struct samu structure (out of memory?)\n");
+		}
+			
 	}
-	pdb_search_destroy(u_search);
+	if (check) 
+		TALLOC_FREE(sam_pwent);
+	
+	in->endsampwent(in);
 	return 0;
 }
 
@@ -451,11 +407,11 @@
 			  const char *drive, const char *script, 
 			  const char *profile, const char *account_control,
 			  const char *user_sid, const char *user_domain,
-			  const bool badpw, const bool hours)
+			  const BOOL badpw, const BOOL hours)
 {
-	bool updated_autolock = False, updated_badpw = False;
+	BOOL updated_autolock = False, updated_badpw = False;
 	struct samu *sam_pwent=NULL;
-	bool ret;
+	BOOL ret;
 	
 	if ( (sam_pwent = samu_new( NULL )) == NULL ) {
 		return 1;
@@ -555,7 +511,7 @@
 static int new_user (struct pdb_methods *in, const char *username,
 			const char *fullname, const char *homedir,
 			const char *drive, const char *script,
-			const char *profile, char *user_sid, bool stdin_get)
+			const char *profile, char *user_sid, BOOL stdin_get)
 {
 	struct samu *sam_pwent;
 	char *password1, *password2;
@@ -768,13 +724,13 @@
 
 int main (int argc, char **argv)
 {
-	static int list_users = False;
-	static int verbose = False;
-	static int spstyle = False;
-	static int machine = False;
-	static int add_user = False;
-	static int delete_user = False;
-	static int modify_user = False;
+	static BOOL list_users = False;
+	static BOOL verbose = False;
+	static BOOL spstyle = False;
+	static BOOL machine = False;
+	static BOOL add_user = False;
+	static BOOL delete_user = False;
+	static BOOL modify_user = False;
 	uint32	setparms, checkparms;
 	int opt;
 	static char *full_name = NULL;
@@ -785,10 +741,10 @@
 	static char *backend = NULL;
 	static char *backend_in = NULL;
 	static char *backend_out = NULL;
-	static int transfer_groups = False;
-	static int transfer_account_policies = False;
-	static int reset_account_policies = False;
-	static int  force_initialised_password = False;
+	static BOOL transfer_groups = False;
+	static BOOL transfer_account_policies = False;
+	static BOOL reset_account_policies = False;
+	static BOOL  force_initialised_password = False;
 	static char *logon_script = NULL;
 	static char *profile_path = NULL;
 	static char *user_domain = NULL;
@@ -796,14 +752,12 @@
 	static char *account_policy = NULL;
 	static char *user_sid = NULL;
 	static long int account_policy_value = 0;
-	bool account_policy_value_set = False;
-	static int badpw_reset = False;
-	static int hours_reset = False;
+	BOOL account_policy_value_set = False;
+	static BOOL badpw_reset = False;
+	static BOOL hours_reset = False;
 	static char *pwd_time_format = NULL;
-	static int pw_from_stdin = False;
+	static BOOL pw_from_stdin = False;
 	struct pdb_methods *bin, *bout, *bdef;
-	char *configfile = NULL;
-	TALLOC_CTX *frame = talloc_stackframe();
 	poptContext pc;
 	struct poptOption long_options[] = {
 		POPT_AUTOHELP
@@ -844,7 +798,6 @@
 	/* we shouldn't have silly checks like this */
 	if (getuid() != 0) {
 		d_fprintf(stderr, "You must be root to use pdbedit\n");
-		TALLOC_FREE(frame);
 		return -1;
 	}
 	
@@ -862,9 +815,6 @@
 		case 'C':
 			account_policy_value_set = True;
 			break;
-		case 's':
-			configfile = optarg;
-			break;
 		}
 	}
 
@@ -873,12 +823,12 @@
 	if (user_name == NULL)
 		user_name = poptGetArg(pc);
 
-	if (!lp_load(get_dyn_CONFIGFILE(),True,False,False,True)) {
-		fprintf(stderr, "Can't load %s - run testparm to debug it\n", get_dyn_CONFIGFILE());
+	if (!lp_load(dyn_CONFIGFILE,True,False,False,True)) {
+		fprintf(stderr, "Can't load %s - run testparm to debug it\n", dyn_CONFIGFILE);
 		exit(1);
 	}
 
-	if(!initialize_password_db(False, NULL))
+	if(!initialize_password_db(False))
 		exit(1);
 
 	if (!init_names())
@@ -1096,6 +1046,5 @@
 	}
 	poptPrintHelp(pc, stderr, 0);
 
-	TALLOC_FREE(frame);
 	return 1;
 }

Modified: branches/samba/upstream/source/utils/profiles.c
===================================================================
--- branches/samba/upstream/source/utils/profiles.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/profiles.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  
 */
                                   
 #include "includes.h"
@@ -26,7 +27,7 @@
 
 DOM_SID old_sid, new_sid;
 int change = 0, new_val = 0;
-int opt_verbose = False;
+BOOL opt_verbose = False;
 
 /********************************************************************
 ********************************************************************/
@@ -55,39 +56,39 @@
 /********************************************************************
 ********************************************************************/
 
-static bool swap_sid_in_acl( SEC_DESC *sd, DOM_SID *s1, DOM_SID *s2 )
+static BOOL swap_sid_in_acl( SEC_DESC *sd, DOM_SID *s1, DOM_SID *s2 )
 {
 	SEC_ACL *acl;
 	int i;
-	bool update = False;
+	BOOL update = False;
 
-	verbose_output("  Owner SID: %s\n", sid_string_tos(sd->owner_sid));
+	verbose_output("  Owner SID: %s\n", sid_string_static(sd->owner_sid));
 	if ( sid_equal( sd->owner_sid, s1 ) ) {
 		sid_copy( sd->owner_sid, s2 );
 		update = True;
 		verbose_output("  New Owner SID: %s\n", 
-			sid_string_tos(sd->owner_sid));
+			sid_string_static(sd->owner_sid));
 
 	}
 
-	verbose_output("  Group SID: %s\n", sid_string_tos(sd->group_sid));
+	verbose_output("  Group SID: %s\n", sid_string_static(sd->group_sid));
 	if ( sid_equal( sd->group_sid, s1 ) ) {
 		sid_copy( sd->group_sid, s2 );
 		update = True;
 		verbose_output("  New Group SID: %s\n", 
-			sid_string_tos(sd->group_sid));
+			sid_string_static(sd->group_sid));
 	}
 
 	acl = sd->dacl;
 	verbose_output("  DACL: %d entries:\n", acl->num_aces);
 	for ( i=0; i<acl->num_aces; i++ ) {
 		verbose_output("    Trustee SID: %s\n", 
-			sid_string_tos(&acl->aces[i].trustee));
+			sid_string_static(&acl->aces[i].trustee));
 		if ( sid_equal( &acl->aces[i].trustee, s1 ) ) {
 			sid_copy( &acl->aces[i].trustee, s2 );
 			update = True;
 			verbose_output("    New Trustee SID: %s\n", 
-				sid_string_tos(&acl->aces[i].trustee));
+				sid_string_static(&acl->aces[i].trustee));
 		}
 	}
 
@@ -96,12 +97,12 @@
 	verbose_output("  SACL: %d entries: \n", acl->num_aces);
 	for ( i=0; i<acl->num_aces; i++ ) {
 		verbose_output("    Trustee SID: %s\n", 
-			sid_string_tos(&acl->aces[i].trustee));
+			sid_string_static(&acl->aces[i].trustee));
 		if ( sid_equal( &acl->aces[i].trustee, s1 ) ) {
 			sid_copy( &acl->aces[i].trustee, s2 );
 			update = True;
 			verbose_output("    New Trustee SID: %s\n", 
-				sid_string_tos(&acl->aces[i].trustee));
+				sid_string_static(&acl->aces[i].trustee));
 		}
 	}
 #endif
@@ -111,7 +112,7 @@
 /********************************************************************
 ********************************************************************/
 
-static bool copy_registry_tree( REGF_FILE *infile, REGF_NK_REC *nk,
+static BOOL copy_registry_tree( REGF_FILE *infile, REGF_NK_REC *nk,
                                 REGF_NK_REC *parent, REGF_FILE *outfile,
                                 const char *parentpath  )
 {
@@ -120,7 +121,7 @@
 	REGVAL_CTR *values;
 	REGSUBKEY_CTR *subkeys;
 	int i;
-	char *path;
+	pstring path;
 
 	/* swap out the SIDs in the security descriptor */
 
@@ -138,7 +139,6 @@
 	}
 
 	if ( !(values = TALLOC_ZERO_P( subkeys, REGVAL_CTR )) ) {
-		TALLOC_FREE( subkeys );
 		DEBUG(0,("copy_registry_tree: talloc() failure!\n"));
 		return False;
 	}
@@ -160,19 +160,12 @@
 
 	/* write each one of the subkeys out */
 
-	path = talloc_asprintf(subkeys, "%s%s%s",
-			parentpath, parent ? "\\" : "",nk->keyname);
-	if (!path) {
-		TALLOC_FREE( subkeys );
-		return false;
-	}
-
+	pstr_sprintf( path, "%s%s%s", parentpath, parent ? "\\" : "", nk->keyname );
+	
 	nk->subkey_index = 0;
-	while ((subkey = regfio_fetch_subkey(infile, nk))) {
-		if (!copy_registry_tree( infile, subkey, key, outfile, path)) {
-			TALLOC_FREE(subkeys);
-			return false;
-		}
+	while ( (subkey = regfio_fetch_subkey( infile, nk )) ) {
+		if ( !copy_registry_tree( infile, subkey, key, outfile, path ) )
+			return False;
 	}
 
 	/* values is a talloc()'d child of subkeys here so just throw it all away */
@@ -189,11 +182,10 @@
 
 int main( int argc, char *argv[] )
 {
-	TALLOC_CTX *frame = talloc_stackframe();
 	int opt;
 	REGF_FILE *infile, *outfile;
 	REGF_NK_REC *nk;
-	char *orig_filename, *new_filename;
+	pstring orig_filename, new_filename;
 	struct poptOption long_options[] = {
 		POPT_AUTOHELP
 		{ "change-sid", 'c', POPT_ARG_STRING, NULL, 'c', "Provides SID to change" },
@@ -213,7 +205,7 @@
 	dbf = x_stderr;
 	x_setbuf( x_stderr, NULL );
 
-	pc = poptGetContext("profiles", argc, (const char **)argv, long_options,
+	pc = poptGetContext("profiles", argc, (const char **)argv, long_options, 
 		POPT_CONTEXT_KEEP_FIRST);
 
 	poptSetOtherOptionHelp(pc, "<profilefile>");
@@ -243,7 +235,7 @@
 		}
 	}
 
-	poptGetArg(pc);
+	poptGetArg(pc); 
 
 	if (!poptPeekArg(pc)) {
 		poptPrintUsage(pc, stderr, 0);
@@ -256,48 +248,39 @@
 		exit(252);
 	}
 
-	orig_filename = talloc_strdup(frame, poptPeekArg(pc));
-	if (!orig_filename) {
-		exit(ENOMEM);
-	}
-	new_filename = talloc_asprintf(frame,
-					"%s.new",
-					orig_filename);
-	if (!new_filename) {
-		exit(ENOMEM);
-	}
-
-	if (!(infile = regfio_open( orig_filename, O_RDONLY, 0))) {
+	pstrcpy( orig_filename, poptPeekArg(pc) );
+	pstr_sprintf( new_filename, "%s.new", orig_filename );
+	
+	if ( !(infile = regfio_open( orig_filename, O_RDONLY, 0 )) ) {
 		fprintf( stderr, "Failed to open %s!\n", orig_filename );
 		fprintf( stderr, "Error was (%s)\n", strerror(errno) );
 		exit (1);
 	}
-
+	
 	if ( !(outfile = regfio_open( new_filename, (O_RDWR|O_CREAT|O_TRUNC), (S_IREAD|S_IWRITE) )) ) {
 		fprintf( stderr, "Failed to open new file %s!\n", new_filename );
 		fprintf( stderr, "Error was (%s)\n", strerror(errno) );
 		exit (1);
 	}
-
+	
 	/* actually do the update now */
-
+	
 	if ((nk = regfio_rootkey( infile )) == NULL) {
 		fprintf(stderr, "Could not get rootkey\n");
 		exit(3);
 	}
-
-	if (!copy_registry_tree( infile, nk, NULL, outfile, "")) {
+	
+	if ( !copy_registry_tree( infile, nk, NULL, outfile, "" ) ) {
 		fprintf(stderr, "Failed to write updated registry file!\n");
 		exit(2);
 	}
-
+	
 	/* cleanup */
+	
+	regfio_close( infile );
+	regfio_close( outfile );
 
-	regfio_close(infile);
-	regfio_close(outfile);
-
 	poptFreeContext(pc);
 
-	TALLOC_FREE(frame);
-	return 0;
+	return( 0 );
 }

Modified: branches/samba/upstream/source/utils/rpccheck.c
===================================================================
--- branches/samba/upstream/source/utils/rpccheck.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/rpccheck.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -40,8 +41,7 @@
 	ctx=talloc_init("main");
 	if (!ctx) exit(1);
 
-	if (!prs_init(&ps, 1600, 4, ctx, MARSHALL))
-		exit(1);
+	prs_init(&ps, 1600, 4, ctx, MARSHALL);
 
 	while (scanf("%s", s)!=-1) {
 		if (strlen(s)==2 && strchr_m(filter, *s)!=NULL && strchr_m(filter, *(s+1))!=NULL) {

Modified: branches/samba/upstream/source/utils/sharesec.c
===================================================================
--- branches/samba/upstream/source/utils/sharesec.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/sharesec.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
  *
  *  This program is distributed in the hope that it will be useful,
@@ -18,7 +18,8 @@
  *  GNU General Public License for more details.
  *
  *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 
@@ -64,7 +65,7 @@
 	int do_print = 0;
 	uint32 got_mask;
 
-	fprintf(f, "%s:", sid_string_tos(&ace->trustee));
+	fprintf(f, "%s:", sid_string_static(&ace->trustee));
 
 	/* Ace type */
 
@@ -126,9 +127,9 @@
 
 	/* Print owner and group sid */
 
-	fprintf(f, "OWNER:%s\n", sid_string_tos(sd->owner_sid));
+	fprintf(f, "OWNER:%s\n", sid_string_static(sd->owner_sid));
 
-	fprintf(f, "GROUP:%s\n", sid_string_tos(sd->group_sid));
+	fprintf(f, "GROUP:%s\n", sid_string_static(sd->group_sid));
 
 	/* Print aces */
 	for (i = 0; sd->dacl && i < sd->dacl->num_aces; i++) {
@@ -144,11 +145,11 @@
     parse an ACE in the same format as print_ace()
 ********************************************************************/
 
-static bool parse_ace(SEC_ACE *ace, const char *orig_str)
+static BOOL parse_ace(SEC_ACE *ace, const char *orig_str)
 {
 	char *p;
 	const char *cp;
-	char *tok;
+	fstring tok;
 	unsigned int atype = 0;
 	unsigned int aflags = 0;
 	unsigned int amask = 0;
@@ -156,10 +157,8 @@
 	SEC_ACCESS mask;
 	const struct perm_value *v;
 	char *str = SMB_STRDUP(orig_str);
-	TALLOC_CTX *frame = talloc_stackframe();
 
 	if (!str) {
-		TALLOC_FREE(frame);
 		return False;
 	}
 
@@ -168,7 +167,6 @@
 	if (!p) {
 		printf("ACE '%s': missing ':'.\n", orig_str);
 		SAFE_FREE(str);
-		TALLOC_FREE(frame);
 		return False;
 	}
 	*p = '\0';
@@ -186,16 +184,14 @@
 		printf("ACE '%s': failed to convert '%s' to SID\n",
 			orig_str, str);
 		SAFE_FREE(str);
-		TALLOC_FREE(frame);
 		return False;
 	}
 
 	cp = p;
-	if (!next_token_talloc(frame, &cp, &tok, "/")) {
+	if (!next_token(&cp, tok, "/", sizeof(fstring))) {
 		printf("ACE '%s': failed to find '/' character.\n",
 			orig_str);
 		SAFE_FREE(str);
-		TALLOC_FREE(frame);
 		return False;
 	}
 
@@ -207,27 +203,24 @@
 		printf("ACE '%s': missing 'ALLOWED' or 'DENIED' entry at '%s'\n",
 			orig_str, tok);
 		SAFE_FREE(str);
-		TALLOC_FREE(frame);
 		return False;
 	}
 
 	/* Only numeric form accepted for flags at present */
 	/* no flags on share permissions */
 
-	if (!(next_token_talloc(frame, &cp, &tok, "/") &&
+	if (!(next_token(&cp, tok, "/", sizeof(fstring)) &&
 	      sscanf(tok, "%i", &aflags) && aflags == 0)) {
 		printf("ACE '%s': bad integer flags entry at '%s'\n",
 			orig_str, tok);
 		SAFE_FREE(str);
-		TALLOC_FREE(frame);
 		return False;
 	}
 
-	if (!next_token_talloc(frame, &cp, &tok, "/")) {
+	if (!next_token(&cp, tok, "/", sizeof(fstring))) {
 		printf("ACE '%s': missing / at '%s'\n",
 			orig_str, tok);
 		SAFE_FREE(str);
-		TALLOC_FREE(frame);
 		return False;
 	}
 
@@ -235,7 +228,6 @@
 		if (sscanf(tok, "%i", &amask) != 1) {
 			printf("ACE '%s': bad hex number at '%s'\n",
 				orig_str, tok);
-			TALLOC_FREE(frame);
 			SAFE_FREE(str);
 			return False;
 		}
@@ -252,7 +244,7 @@
 	p = tok;
 
 	while(*p) {
-		bool found = False;
+		BOOL found = False;
 
 		for (v = special_values; v->perm; v++) {
 			if (v->perm[0] == *p) {
@@ -264,7 +256,6 @@
 		if (!found) {
 			printf("ACE '%s': bad permission value at '%s'\n",
 				orig_str, p);
-			TALLOC_FREE(frame);
 			SAFE_FREE(str);
 		 	return False;
 		}
@@ -272,7 +263,6 @@
 	}
 
 	if (*p) {
-		TALLOC_FREE(frame);
 		SAFE_FREE(str);
 		return False;
 	}
@@ -281,7 +271,6 @@
 	mask = amask;
 	init_sec_ace(ace, &sid, atype, mask, aflags);
 	SAFE_FREE(str);
-	TALLOC_FREE(frame);
 	return True;
 }
 
@@ -331,7 +320,7 @@
 }
 
 /* add an ACE to a list of ACEs in a SEC_ACL */
-static bool add_ace(TALLOC_CTX *mem_ctx, SEC_ACL **the_acl, SEC_ACE *ace)
+static BOOL add_ace(TALLOC_CTX *mem_ctx, SEC_ACL **the_acl, SEC_ACE *ace)
 {
 	SEC_ACL *new_ace;
 	SEC_ACE *aces;
@@ -424,7 +413,7 @@
 		return 0;
 	case SMB_ACL_DELETE:
 	    for (i=0;sd->dacl && i<sd->dacl->num_aces;i++) {
-		bool found = False;
+		BOOL found = False;
 
 		for (j=0;old->dacl && j<old->dacl->num_aces;j++) {
 		    if (sec_ace_equal(&sd->dacl->aces[i], &old->dacl->aces[j])) {
@@ -448,7 +437,7 @@
 	    break;
 	case SMB_ACL_MODIFY:
 	    for (i=0;sd->dacl && i<sd->dacl->num_aces;i++) {
-		bool found = False;
+		BOOL found = False;
 
 		for (j=0;old->dacl && j<old->dacl->num_aces;j++) {
 		    if (sid_equal(&sd->dacl->aces[i].trustee,
@@ -459,8 +448,7 @@
 		}
 
 		if (!found) {
-		    printf("ACL for SID %s not found\n",
-			   sid_string_tos(&sd->dacl->aces[i].trustee));
+		    printf("ACL for SID %s not found\n", sid_string_static(&sd->dacl->aces[i].trustee));
 		}
 	    }
 
@@ -503,10 +491,10 @@
 	enum acl_mode mode = SMB_ACL_SET;
 	static char *the_acl = NULL;
 	fstring sharename;
-	bool force_acl = False;
+	BOOL force_acl = False;
 	int snum;
 	poptContext pc;
-	bool initialize_sid = False;
+	BOOL initialize_sid = False;
 	struct poptOption long_options[] = {
 		POPT_AUTOHELP
 		{ "remove", 'r', POPT_ARG_STRING, &the_acl, 'r', "Delete an ACE", "ACL" },
@@ -520,7 +508,7 @@
 		{ NULL }
 	};
 
-	if ( !(ctx = talloc_stackframe()) ) {
+	if ( !(ctx = talloc_init("main")) ) {
 		fprintf( stderr, "Failed to initialize talloc context!\n");
 		return -1;
 	}
@@ -574,7 +562,7 @@
 
 	load_case_tables();
 
-	lp_load( get_dyn_CONFIGFILE(), False, False, False, True );
+	lp_load( dyn_CONFIGFILE, False, False, False, True );
 
 	/* check for initializing secrets.tdb first */
 	
@@ -586,7 +574,7 @@
 			return 3;
 		}
 		
-		printf ("%s\n", sid_string_tos( sid ) );
+		printf ("%s\n", sid_string_static( sid ) );
 		return 0;
 	}
 

Modified: branches/samba/upstream/source/utils/smbcacls.c
===================================================================
--- branches/samba/upstream/source/utils/smbcacls.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/smbcacls.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -18,18 +18,22 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
+static pstring owner_username;
+static fstring server;
 static int test_args = False;
+static TALLOC_CTX *ctx;
 
 #define CREATE_ACCESS_READ READ_CONTROL_ACCESS
 
 /* numeric is set when the user wants numeric SIDs and ACEs rather
    than going via LSA calls to resolve them */
-static int numeric = False;
+static BOOL numeric = False;
 
 enum acl_mode {SMB_ACL_SET, SMB_ACL_DELETE, SMB_ACL_MODIFY, SMB_ACL_ADD };
 enum chown_mode {REQUEST_NONE, REQUEST_CHOWN, REQUEST_CHGRP};
@@ -59,155 +63,110 @@
 	{ NULL, 0 },
 };
 
-/* Open cli connection and policy handle */
+static struct cli_state *global_hack_cli;
+static struct rpc_pipe_client *global_pipe_hnd;
+static POLICY_HND pol;
+static BOOL got_policy_hnd;
 
-static NTSTATUS cli_lsa_lookup_sid(struct cli_state *cli,
-				   const DOM_SID *sid,
-				   TALLOC_CTX *mem_ctx,
-				   enum lsa_SidType *type,
-				   char **domain, char **name)
-{
-	uint16 orig_cnum = cli->cnum;
-	struct rpc_pipe_client *p;
-	struct policy_handle handle;
-	NTSTATUS status;
-	TALLOC_CTX *frame = talloc_stackframe();
-	enum lsa_SidType *types;
-	char **domains;
-	char **names;
+static struct cli_state *connect_one(const char *share);
 
-	if (!cli_send_tconX(cli, "IPC$", "?????", "", 0)) {
-		return cli_nt_error(cli);
-	}
+/* Open cli connection and policy handle */
 
-	p = cli_rpc_pipe_open_noauth(cli, PI_LSARPC, &status);
-	if (p == NULL) {
-		goto fail;
-	}
-
-	status = rpccli_lsa_open_policy(p, talloc_tos(), True,
-					GENERIC_EXECUTE_ACCESS, &handle);
-	if (!NT_STATUS_IS_OK(status)) {
-		goto fail;
-	}
-
-	status = rpccli_lsa_lookup_sids(p, talloc_tos(), &handle, 1, sid,
-					&domains, &names, &types);
-	if (!NT_STATUS_IS_OK(status)) {
-		goto fail;
-	}
-
-	*type = types[0];
-	*domain = talloc_move(mem_ctx, &domains[0]);
-	*name = talloc_move(mem_ctx, &names[0]);
-
-	status = NT_STATUS_OK;
- fail:
-	if (p != NULL) {
-		cli_rpc_pipe_close(p);
-	}
-	cli_tdis(cli);
-	cli->cnum = orig_cnum;
-	TALLOC_FREE(frame);
-	return status;
-}
-
-static NTSTATUS cli_lsa_lookup_name(struct cli_state *cli,
-				    const char *name,
-				    enum lsa_SidType *type,
-				    DOM_SID *sid)
+static BOOL cacls_open_policy_hnd(void)
 {
-	uint16 orig_cnum = cli->cnum;
-	struct rpc_pipe_client *p;
-	struct policy_handle handle;
-	NTSTATUS status;
-	TALLOC_CTX *frame = talloc_stackframe();
-	DOM_SID *sids;
-	enum lsa_SidType *types;
+	/* Initialise cli LSA connection */
 
-	if (!cli_send_tconX(cli, "IPC$", "?????", "", 0)) {
-		return cli_nt_error(cli);
+	if (!global_hack_cli) {
+		NTSTATUS ret;
+		global_hack_cli = connect_one("IPC$");
+		global_pipe_hnd = cli_rpc_pipe_open_noauth(global_hack_cli, PI_LSARPC, &ret);
+		if (!global_pipe_hnd) {
+				return False;
+		}
 	}
+	
+	/* Open policy handle */
 
-	p = cli_rpc_pipe_open_noauth(cli, PI_LSARPC, &status);
-	if (p == NULL) {
-		goto fail;
-	}
+	if (!got_policy_hnd) {
 
-	status = rpccli_lsa_open_policy(p, talloc_tos(), True,
-					GENERIC_EXECUTE_ACCESS, &handle);
-	if (!NT_STATUS_IS_OK(status)) {
-		goto fail;
-	}
+		/* Some systems don't support SEC_RIGHTS_MAXIMUM_ALLOWED,
+		   but NT sends 0x2000000 so we might as well do it too. */
 
-	status = rpccli_lsa_lookup_names(p, talloc_tos(), &handle, 1, &name,
-					 NULL, 1, &sids, &types);
-	if (!NT_STATUS_IS_OK(status)) {
-		goto fail;
-	}
+		if (!NT_STATUS_IS_OK(rpccli_lsa_open_policy(global_pipe_hnd, global_hack_cli->mem_ctx, True, 
+							 GENERIC_EXECUTE_ACCESS, &pol))) {
+			return False;
+		}
 
-	*type = types[0];
-	*sid = sids[0];
-
-	status = NT_STATUS_OK;
- fail:
-	if (p != NULL) {
-		cli_rpc_pipe_close(p);
+		got_policy_hnd = True;
 	}
-	cli_tdis(cli);
-	cli->cnum = orig_cnum;
-	TALLOC_FREE(frame);
-	return status;
+	
+	return True;
 }
 
 /* convert a SID to a string, either numeric or username/group */
-static void SidToString(struct cli_state *cli, fstring str, const DOM_SID *sid)
+static void SidToString(fstring str, DOM_SID *sid)
 {
-	char *domain = NULL;
-	char *name = NULL;
-	enum lsa_SidType type;
-	NTSTATUS status;
+	char **domains = NULL;
+	char **names = NULL;
+	enum lsa_SidType *types = NULL;
 
-	sid_to_fstring(str, sid);
+	sid_to_string(str, sid);
 
-	if (numeric) {
-		return;
-	}
+	if (numeric) return;
 
-	status = cli_lsa_lookup_sid(cli, sid, talloc_tos(), &type,
-				    &domain, &name);
+	/* Ask LSA to convert the sid to a name */
 
-	if (!NT_STATUS_IS_OK(status)) {
+	if (!cacls_open_policy_hnd() ||
+	    !NT_STATUS_IS_OK(rpccli_lsa_lookup_sids(global_pipe_hnd, global_hack_cli->mem_ctx,  
+						 &pol, 1, sid, &domains, 
+						 &names, &types)) ||
+	    !domains || !domains[0] || !names || !names[0]) {
 		return;
 	}
 
+	/* Converted OK */
+
 	slprintf(str, sizeof(fstring) - 1, "%s%s%s",
-		 domain, lp_winbind_separator(), name);
+		 domains[0], lp_winbind_separator(),
+		 names[0]);
 	
 }
 
 /* convert a string to a SID, either numeric or username/group */
-static bool StringToSid(struct cli_state *cli, DOM_SID *sid, const char *str)
+static BOOL StringToSid(DOM_SID *sid, const char *str)
 {
-	enum lsa_SidType type;
+	enum lsa_SidType *types = NULL;
+	DOM_SID *sids = NULL;
+	BOOL result = True;
 
 	if (strncmp(str, "S-", 2) == 0) {
 		return string_to_sid(sid, str);
 	}
 
-	return NT_STATUS_IS_OK(cli_lsa_lookup_name(cli, str, &type, sid));
+	if (!cacls_open_policy_hnd() ||
+	    !NT_STATUS_IS_OK(rpccli_lsa_lookup_names(global_pipe_hnd, global_hack_cli->mem_ctx, 
+						  &pol, 1, &str, NULL, &sids, 
+						  &types))) {
+		result = False;
+		goto done;
+	}
+
+	sid_copy(sid, &sids[0]);
+ done:
+
+	return result;
 }
 
 
 /* print an ACE on a FILE, using either numeric or ascii representation */
-static void print_ace(struct cli_state *cli, FILE *f, SEC_ACE *ace)
+static void print_ace(FILE *f, SEC_ACE *ace)
 {
 	const struct perm_value *v;
 	fstring sidstr;
 	int do_print = 0;
 	uint32 got_mask;
 
-	SidToString(cli, sidstr, &ace->trustee);
+	SidToString(sidstr, &ace->trustee);
 
 	fprintf(f, "%s:", sidstr);
 
@@ -267,12 +226,11 @@
 
 
 /* parse an ACE in the same format as print_ace() */
-static bool parse_ace(struct cli_state *cli, SEC_ACE *ace,
-		      const char *orig_str)
+static BOOL parse_ace(SEC_ACE *ace, const char *orig_str)
 {
 	char *p;
 	const char *cp;
-	char *tok;
+	fstring tok;
 	unsigned int atype = 0;
 	unsigned int aflags = 0;
 	unsigned int amask = 0;
@@ -280,10 +238,8 @@
 	SEC_ACCESS mask;
 	const struct perm_value *v;
 	char *str = SMB_STRDUP(orig_str);
-	TALLOC_CTX *frame = talloc_stackframe();
 
 	if (!str) {
-		TALLOC_FREE(frame);
 		return False;
 	}
 
@@ -292,7 +248,6 @@
 	if (!p) {
 		printf("ACE '%s': missing ':'.\n", orig_str);
 		SAFE_FREE(str);
-		TALLOC_FREE(frame);
 		return False;
 	}
 	*p = '\0';
@@ -300,26 +255,24 @@
 	/* Try to parse numeric form */
 
 	if (sscanf(p, "%i/%i/%i", &atype, &aflags, &amask) == 3 &&
-	    StringToSid(cli, &sid, str)) {
+	    StringToSid(&sid, str)) {
 		goto done;
 	}
 
 	/* Try to parse text form */
 
-	if (!StringToSid(cli, &sid, str)) {
+	if (!StringToSid(&sid, str)) {
 		printf("ACE '%s': failed to convert '%s' to SID\n",
 			orig_str, str);
 		SAFE_FREE(str);
-		TALLOC_FREE(frame);
 		return False;
 	}
 
 	cp = p;
-	if (!next_token_talloc(frame, &cp, &tok, "/")) {
+	if (!next_token(&cp, tok, "/", sizeof(fstring))) {
 		printf("ACE '%s': failed to find '/' character.\n",
 			orig_str);
 		SAFE_FREE(str);
-		TALLOC_FREE(frame);
 		return False;
 	}
 
@@ -331,26 +284,23 @@
 		printf("ACE '%s': missing 'ALLOWED' or 'DENIED' entry at '%s'\n",
 			orig_str, tok);
 		SAFE_FREE(str);
-		TALLOC_FREE(frame);
 		return False;
 	}
 
 	/* Only numeric form accepted for flags at present */
 
-	if (!(next_token_talloc(frame, &cp, &tok, "/") &&
+	if (!(next_token(&cp, tok, "/", sizeof(fstring)) &&
 	      sscanf(tok, "%i", &aflags))) {
 		printf("ACE '%s': bad integer flags entry at '%s'\n",
 			orig_str, tok);
 		SAFE_FREE(str);
-		TALLOC_FREE(frame);
 		return False;
 	}
 
-	if (!next_token_talloc(frame, &cp, &tok, "/")) {
+	if (!next_token(&cp, tok, "/", sizeof(fstring))) {
 		printf("ACE '%s': missing / at '%s'\n",
 			orig_str, tok);
 		SAFE_FREE(str);
-		TALLOC_FREE(frame);
 		return False;
 	}
 
@@ -359,7 +309,6 @@
 			printf("ACE '%s': bad hex number at '%s'\n",
 				orig_str, tok);
 			SAFE_FREE(str);
-			TALLOC_FREE(frame);
 			return False;
 		}
 		goto done;
@@ -375,7 +324,7 @@
 	p = tok;
 
 	while(*p) {
-		bool found = False;
+		BOOL found = False;
 
 		for (v = special_values; v->perm; v++) {
 			if (v->perm[0] == *p) {
@@ -388,14 +337,12 @@
 			printf("ACE '%s': bad permission value at '%s'\n",
 				orig_str, p);
 			SAFE_FREE(str);
-			TALLOC_FREE(frame);
 		 	return False;
 		}
 		p++;
 	}
 
 	if (*p) {
-		TALLOC_FREE(frame);
 		SAFE_FREE(str);
 		return False;
 	}
@@ -403,19 +350,17 @@
  done:
 	mask = amask;
 	init_sec_ace(ace, &sid, atype, mask, aflags);
-	TALLOC_FREE(frame);
 	SAFE_FREE(str);
 	return True;
 }
 
 /* add an ACE to a list of ACEs in a SEC_ACL */
-static bool add_ace(SEC_ACL **the_acl, SEC_ACE *ace)
+static BOOL add_ace(SEC_ACL **the_acl, SEC_ACE *ace)
 {
 	SEC_ACL *new_ace;
 	SEC_ACE *aces;
 	if (! *the_acl) {
-		return (((*the_acl) = make_sec_acl(talloc_tos(), 3, 1, ace))
-			!= NULL);
+		return (((*the_acl) = make_sec_acl(ctx, 3, 1, ace)) != NULL);
 	}
 
 	if (!(aces = SMB_CALLOC_ARRAY(SEC_ACE, 1+(*the_acl)->num_aces))) {
@@ -423,24 +368,25 @@
 	}
 	memcpy(aces, (*the_acl)->aces, (*the_acl)->num_aces * sizeof(SEC_ACE));
 	memcpy(aces+(*the_acl)->num_aces, ace, sizeof(SEC_ACE));
-	new_ace = make_sec_acl(talloc_tos(),(*the_acl)->revision,1+(*the_acl)->num_aces, aces);
+	new_ace = make_sec_acl(ctx,(*the_acl)->revision,1+(*the_acl)->num_aces, aces);
 	SAFE_FREE(aces);
 	(*the_acl) = new_ace;
 	return True;
 }
 
 /* parse a ascii version of a security descriptor */
-static SEC_DESC *sec_desc_parse(TALLOC_CTX *ctx, struct cli_state *cli, char *str)
+static SEC_DESC *sec_desc_parse(char *str)
 {
 	const char *p = str;
-	char *tok;
+	fstring tok;
 	SEC_DESC *ret = NULL;
 	size_t sd_size;
-	DOM_SID *grp_sid=NULL, *owner_sid=NULL;
+	DOM_SID *group_sid=NULL, *owner_sid=NULL;
 	SEC_ACL *dacl=NULL;
 	int revision=1;
 
-	while (next_token_talloc(ctx, &p, &tok, "\t,\r\n")) {
+	while (next_token(&p, tok, "\t,\r\n", sizeof(tok))) {
+
 		if (strncmp(tok,"REVISION:", 9) == 0) {
 			revision = strtol(tok+9, NULL, 16);
 			continue;
@@ -453,7 +399,7 @@
 			}
 			owner_sid = SMB_CALLOC_ARRAY(DOM_SID, 1);
 			if (!owner_sid ||
-			    !StringToSid(cli, owner_sid, tok+6)) {
+			    !StringToSid(owner_sid, tok+6)) {
 				printf("Failed to parse owner sid\n");
 				goto done;
 			}
@@ -461,13 +407,13 @@
 		}
 
 		if (strncmp(tok,"GROUP:", 6) == 0) {
-			if (grp_sid) {
+			if (group_sid) {
 				printf("Only specify group once\n");
 				goto done;
 			}
-			grp_sid = SMB_CALLOC_ARRAY(DOM_SID, 1);
-			if (!grp_sid ||
-			    !StringToSid(cli, grp_sid, tok+6)) {
+			group_sid = SMB_CALLOC_ARRAY(DOM_SID, 1);
+			if (!group_sid ||
+			    !StringToSid(group_sid, tok+6)) {
 				printf("Failed to parse group sid\n");
 				goto done;
 			}
@@ -476,7 +422,7 @@
 
 		if (strncmp(tok,"ACL:", 4) == 0) {
 			SEC_ACE ace;
-			if (!parse_ace(cli, &ace, tok+4)) {
+			if (!parse_ace(&ace, tok+4)) {
 				goto done;
 			}
 			if(!add_ace(&dacl, &ace)) {
@@ -490,11 +436,11 @@
 		goto done;
 	}
 
-	ret = make_sec_desc(ctx,revision, SEC_DESC_SELF_RELATIVE, owner_sid, grp_sid,
+	ret = make_sec_desc(ctx,revision, SEC_DESC_SELF_RELATIVE, owner_sid, group_sid, 
 			    NULL, dacl, &sd_size);
 
   done:
-	SAFE_FREE(grp_sid);
+	SAFE_FREE(group_sid);
 	SAFE_FREE(owner_sid);
 
 	return ret;
@@ -502,7 +448,7 @@
 
 
 /* print a ascii version of a security descriptor on a FILE handle */
-static void sec_desc_print(struct cli_state *cli, FILE *f, SEC_DESC *sd)
+static void sec_desc_print(FILE *f, SEC_DESC *sd)
 {
 	fstring sidstr;
 	uint32 i;
@@ -512,7 +458,7 @@
 	/* Print owner and group sid */
 
 	if (sd->owner_sid) {
-		SidToString(cli, sidstr, sd->owner_sid);
+		SidToString(sidstr, sd->owner_sid);
 	} else {
 		fstrcpy(sidstr, "");
 	}
@@ -520,7 +466,7 @@
 	fprintf(f, "OWNER:%s\n", sidstr);
 
 	if (sd->group_sid) {
-		SidToString(cli, sidstr, sd->group_sid);
+		SidToString(sidstr, sd->group_sid);
 	} else {
 		fstrcpy(sidstr, "");
 	}
@@ -531,7 +477,7 @@
 	for (i = 0; sd->dacl && i < sd->dacl->num_aces; i++) {
 		SEC_ACE *ace = &sd->dacl->aces[i];
 		fprintf(f, "ACL:");
-		print_ace(cli, f, ace);
+		print_ace(f, ace);
 		fprintf(f, "\n");
 	}
 
@@ -556,14 +502,14 @@
 		goto done;
 	}
 
-	sd = cli_query_secdesc(cli, fnum, talloc_tos());
+	sd = cli_query_secdesc(cli, fnum, ctx);
 
 	if (!sd) {
 		printf("ERROR: secdesc query failed: %s\n", cli_errstr(cli));
 		goto done;
 	}
 
-	sec_desc_print(cli, stdout, sd);
+	sec_desc_print(stdout, sd);
 
 	result = EXIT_OK;
 
@@ -580,7 +526,7 @@
 *******************************************************/
 
 static int owner_set(struct cli_state *cli, enum chown_mode change_mode, 
-			const char *filename, const char *new_username)
+		     char *filename, char *new_username)
 {
 	int fnum;
 	DOM_SID sid;
@@ -594,10 +540,10 @@
 		return EXIT_FAILED;
 	}
 
-	if (!StringToSid(cli, &sid, new_username))
+	if (!StringToSid(&sid, new_username))
 		return EXIT_PARSE_ERROR;
 
-	old = cli_query_secdesc(cli, fnum, talloc_tos());
+	old = cli_query_secdesc(cli, fnum, ctx);
 
 	cli_close(cli, fnum);
 
@@ -606,7 +552,7 @@
 		return EXIT_FAILED;
 	}
 
-	sd = make_sec_desc(talloc_tos(),old->revision, old->type,
+	sd = make_sec_desc(ctx,old->revision, old->type,
 				(change_mode == REQUEST_CHOWN) ? &sid : NULL,
 				(change_mode == REQUEST_CHGRP) ? &sid : NULL,
 			   NULL, NULL, &sd_size);
@@ -688,7 +634,7 @@
 	size_t sd_size;
 	int result = EXIT_OK;
 
-	sd = sec_desc_parse(talloc_tos(), cli, the_acl);
+	sd = sec_desc_parse(the_acl);
 
 	if (!sd) return EXIT_PARSE_ERROR;
 	if (test_args) return EXIT_OK;
@@ -703,7 +649,7 @@
 		return EXIT_FAILED;
 	}
 
-	old = cli_query_secdesc(cli, fnum, talloc_tos());
+	old = cli_query_secdesc(cli, fnum, ctx);
 
 	if (!old) {
 		printf("calc_set: Failed to query old descriptor\n");
@@ -716,7 +662,7 @@
 	switch (mode) {
 	case SMB_ACL_DELETE:
 		for (i=0;sd->dacl && i<sd->dacl->num_aces;i++) {
-			bool found = False;
+			BOOL found = False;
 
 			for (j=0;old->dacl && j<old->dacl->num_aces;j++) {
 				if (sec_ace_equal(&sd->dacl->aces[i],
@@ -733,7 +679,7 @@
 
 			if (!found) {
 				printf("ACL for ACE:"); 
-				print_ace(cli, stdout, &sd->dacl->aces[i]);
+				print_ace(stdout, &sd->dacl->aces[i]);
 				printf(" not found\n");
 			}
 		}
@@ -741,7 +687,7 @@
 
 	case SMB_ACL_MODIFY:
 		for (i=0;sd->dacl && i<sd->dacl->num_aces;i++) {
-			bool found = False;
+			BOOL found = False;
 
 			for (j=0;old->dacl && j<old->dacl->num_aces;j++) {
 				if (sid_equal(&sd->dacl->aces[i].trustee,
@@ -754,8 +700,7 @@
 			if (!found) {
 				fstring str;
 
-				SidToString(cli, str,
-					    &sd->dacl->aces[i].trustee);
+				SidToString(str, &sd->dacl->aces[i].trustee);
 				printf("ACL for SID %s not found\n", str);
 			}
 		}
@@ -785,7 +730,7 @@
 	sort_acl(old->dacl);
 
 	/* Create new security descriptor and set it */
-
+#if 0
 	/* We used to just have "WRITE_DAC_ACCESS" without WRITE_OWNER.
 	   But if we're sending an owner, even if it's the same as the one
 	   that already exists then W2K3 insists we open with WRITE_OWNER access.
@@ -793,12 +738,16 @@
 	   and W2K. JRA.
 	*/
 
-	sd = make_sec_desc(talloc_tos(),old->revision, old->type,
-			   old->owner_sid, old->group_sid,
+	sd = make_sec_desc(ctx,old->revision, old->type, old->owner_sid, old->group_sid,
 			   NULL, old->dacl, &sd_size);
 
 	fnum = cli_nt_create(cli, filename, WRITE_DAC_ACCESS|WRITE_OWNER_ACCESS);
+#else
+	sd = make_sec_desc(ctx,old->revision, old->type, NULL, NULL,
+			   NULL, old->dacl, &sd_size);
 
+	fnum = cli_nt_create(cli, filename, WRITE_DAC_ACCESS);
+#endif
 	if (fnum == -1) {
 		printf("cacl_set failed to open %s: %s\n", filename, cli_errstr(cli));
 		return EXIT_FAILED;
@@ -817,62 +766,36 @@
 }
 
 
-/*****************************************************
- Return a connection to a server.
+/***************************************************** 
+return a connection to a server
 *******************************************************/
-static struct cli_state *connect_one(const char *server, const char *share)
+static struct cli_state *connect_one(const char *share)
 {
-	struct cli_state *c = NULL;
-	struct sockaddr_storage ss;
+	struct cli_state *c;
+	struct in_addr ip;
 	NTSTATUS nt_status;
-	uint32_t flags = 0;
-
-	zero_addr(&ss);
-
-	if (get_cmdline_auth_info_use_kerberos()) {
-		flags |= CLI_FULL_CONNECTION_USE_KERBEROS |
-			 CLI_FULL_CONNECTION_FALLBACK_AFTER_KERBEROS;
-	}
-
-	if (get_cmdline_auth_info_use_machine_account() &&
-	    !set_cmdline_auth_info_machine_account_creds()) {
-		return NULL;
-	}
-
-	if (!get_cmdline_auth_info_got_pass()) {
+	zero_ip(&ip);
+	
+	if (!cmdline_auth_info.got_pass) {
 		char *pass = getpass("Password: ");
 		if (pass) {
-			set_cmdline_auth_info_password(pass);
+			pstrcpy(cmdline_auth_info.password, pass);
+			cmdline_auth_info.got_pass = True;
 		}
 	}
 
-	nt_status = cli_full_connection(&c, global_myname(), server, 
-				&ss, 0,
-				share, "?????",
-				get_cmdline_auth_info_username(),
-				lp_workgroup(),
-				get_cmdline_auth_info_password(),
-				flags,
-				get_cmdline_auth_info_signing_state(),
-				NULL);
-	if (!NT_STATUS_IS_OK(nt_status)) {
+	if (NT_STATUS_IS_OK(nt_status = cli_full_connection(&c, global_myname(), server, 
+							    &ip, 0,
+							    share, "?????",  
+							    cmdline_auth_info.username, lp_workgroup(),
+							    cmdline_auth_info.password,
+							    cmdline_auth_info.use_kerberos ? CLI_FULL_CONNECTION_USE_KERBEROS : 0,
+							    cmdline_auth_info.signing_state, NULL))) {
+		return c;
+	} else {
 		DEBUG(0,("cli_full_connection failed! (%s)\n", nt_errstr(nt_status)));
 		return NULL;
 	}
-
-	if (get_cmdline_auth_info_smb_encrypt()) {
-		nt_status = cli_cm_force_encryption(c,
-					get_cmdline_auth_info_username(),
-					get_cmdline_auth_info_password(),
-					lp_workgroup(),
-					share);
-                if (!NT_STATUS_IS_OK(nt_status)) {
-			cli_shutdown(c);
-			c = NULL;
-                }
-	}
-
-	return c;
 }
 
 /****************************************************************************
@@ -886,8 +809,8 @@
 	static char *the_acl = NULL;
 	enum chown_mode change_mode = REQUEST_NONE;
 	int result;
-	char *path;
-	char *filename = NULL;
+	fstring path;
+	pstring filename;
 	poptContext pc;
 	struct poptOption long_options[] = {
 		POPT_AUTOHELP
@@ -905,12 +828,10 @@
 	};
 
 	struct cli_state *cli;
-	TALLOC_CTX *frame = talloc_stackframe();
-	const char *owner_username = "";
-	char *server;
 
 	load_case_tables();
 
+	ctx=talloc_init("main");
 
 	/* set default debug level to 1 regardless of what smb.conf sets */
 	setup_logging( "smbcacls", True );
@@ -920,11 +841,11 @@
 
 	setlinebuf(stdout);
 
-	lp_load(get_dyn_CONFIGFILE(),True,False,False,True);
+	lp_load(dyn_CONFIGFILE,True,False,False,True);
 	load_interfaces();
 
 	pc = poptGetContext("smbcacls", argc, argv, long_options, 0);
-
+	
 	poptSetOtherOptionHelp(pc, "//server1/share1 filename\nACLs look like: "
 		"'ACL:user:[ALLOWED|DENIED]/flags/permissions'");
 
@@ -951,70 +872,63 @@
 			break;
 
 		case 'C':
-			owner_username = poptGetOptArg(pc);
+			pstrcpy(owner_username,poptGetOptArg(pc));
 			change_mode = REQUEST_CHOWN;
 			break;
 
 		case 'G':
-			owner_username = poptGetOptArg(pc);
+			pstrcpy(owner_username,poptGetOptArg(pc));
 			change_mode = REQUEST_CHGRP;
 			break;
 		}
 	}
 
 	/* Make connection to server */
-	if(!poptPeekArg(pc)) {
+	if(!poptPeekArg(pc)) { 
 		poptPrintUsage(pc, stderr, 0);
 		return -1;
 	}
-
-	path = talloc_strdup(frame, poptGetArg(pc));
-	if (!path) {
+	
+	fstrcpy(path, poptGetArg(pc));
+	
+	if(!poptPeekArg(pc)) { 
+		poptPrintUsage(pc, stderr, 0);	
 		return -1;
 	}
+	
+	pstrcpy(filename, poptGetArg(pc));
 
-	if(!poptPeekArg(pc)) {
-		poptPrintUsage(pc, stderr, 0);
-		return -1;
-	}
+	all_string_sub(path,"/","\\",0);
 
-	filename = talloc_strdup(frame, poptGetArg(pc));
-	if (!filename) {
-		return -1;
-	}
-
-	string_replace(path,'/','\\');
-
-	server = talloc_strdup(frame, path+2);
-	if (!server) {
-		return -1;
-	}
+	fstrcpy(server,path+2);
 	share = strchr_m(server,'\\');
 	if (!share) {
-		printf("Invalid argument: %s\n", share);
-		return -1;
+		share = strchr_m(server,'/');
+		if (!share) {
+			printf("Invalid argument: %s\n", share);
+			return -1;
+		}
 	}
 
 	*share = 0;
 	share++;
 
 	if (!test_args) {
-		cli = connect_one(server, share);
+		cli = connect_one(share);
 		if (!cli) {
+			talloc_destroy(ctx);
 			exit(EXIT_FAILED);
 		}
 	} else {
 		exit(0);
 	}
 
-	string_replace(filename, '/', '\\');
+	all_string_sub(filename, "/", "\\", 0);
 	if (filename[0] != '\\') {
-		filename = talloc_asprintf(frame,
-				"\\%s",
-				filename);
-		if (!filename) {
-			return -1;
-		}
+		pstring s;
+		s[0] = '\\';
+		safe_strcpy(&s[1], filename, sizeof(pstring)-2);
+		pstrcpy(filename, s);
 	}
 
 	/* Perform requested action */
@@ -1027,7 +941,7 @@
 		result = cacl_dump(cli, filename);
 	}
 
-	TALLOC_FREE(frame);
+	talloc_destroy(ctx);
 
 	return result;
 }

Modified: branches/samba/upstream/source/utils/smbcontrol.c
===================================================================
--- branches/samba/upstream/source/utils/smbcontrol.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/smbcontrol.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -11,7 +11,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -20,7 +20,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -46,88 +47,78 @@
 
 /* Send a message to a destination pid.  Zero means broadcast smbd. */
 
-static bool send_message(struct messaging_context *msg_ctx,
-			 struct server_id pid, int msg_type,
-			 const void *buf, int len)
+static BOOL send_message(struct process_id pid, int msg_type,
+			 const void *buf, int len,
+			 BOOL duplicates)
 {
-	bool ret;
+	TDB_CONTEXT *tdb;
+	BOOL ret;
 	int n_sent = 0;
 
+	if (!message_init())
+		return False;
+
 	if (procid_to_pid(&pid) != 0)
-		return NT_STATUS_IS_OK(
-			messaging_send_buf(msg_ctx, pid, msg_type,
-					   (uint8 *)buf, len));
+		return NT_STATUS_IS_OK(message_send_pid(pid, msg_type, buf, len,
+							duplicates));
 
-	ret = message_send_all(msg_ctx, msg_type, buf, len, &n_sent);
+	tdb = tdb_open_log(lock_path("connections.tdb"), 0, 
+			   TDB_DEFAULT, O_RDWR, 0);
+	if (!tdb) {
+		fprintf(stderr,"Failed to open connections database"
+			": %s\n", strerror(errno));
+		return False;
+	}
+	
+	ret = message_send_all(tdb,msg_type, buf, len, duplicates,
+			       &n_sent);
 	DEBUG(10,("smbcontrol/send_message: broadcast message to "
 		  "%d processes\n", n_sent));
 	
+	tdb_close(tdb);
+	
 	return ret;
 }
 
-static void timeout_handler(struct event_context *event_ctx,
-			    struct timed_event *te,
-			    const struct timeval *now,
-			    void *private_data)
-{
-	bool *timed_out = (bool *)private_data;
-	TALLOC_FREE(te);
-	*timed_out = True;
-}
-
 /* Wait for one or more reply messages */
 
-static void wait_replies(struct messaging_context *msg_ctx,
-			 bool multiple_replies)
+static void wait_replies(BOOL multiple_replies)
 {
-	struct timed_event *te;
-	bool timed_out = False;
+	time_t start_time = time(NULL);
 
-	if (!(te = event_add_timed(messaging_event_context(msg_ctx), NULL,
-				   timeval_current_ofs(timeout, 0),
-				   "smbcontrol_timeout",
-				   timeout_handler, (void *)&timed_out))) {
-		DEBUG(0, ("event_add_timed failed\n"));
-		return;
-	}
+	/* Wait around a bit.  This is pretty disgusting - we have to
+           busy-wait here as there is no nicer way to do it. */
 
-	while (!timed_out) {
-		message_dispatch(msg_ctx);
+	do {
+		message_dispatch();
 		if (num_replies > 0 && !multiple_replies)
 			break;
-		event_loop_once(messaging_event_context(msg_ctx));
-	}
+		sleep(1);
+	} while (timeout - (time(NULL) - start_time) > 0);
 }
 
 /* Message handler callback that displays the PID and a string on stdout */
 
-static void print_pid_string_cb(struct messaging_context *msg,
-				void *private_data, 
-				uint32_t msg_type, 
-				struct server_id pid,
-				DATA_BLOB *data)
+static void print_pid_string_cb(int msg_type, struct process_id pid, void *buf,
+				size_t len, void *private_data)
 {
 	printf("PID %u: %.*s", (unsigned int)procid_to_pid(&pid),
-	       (int)data->length, (const char *)data->data);
+	       (int)len, (const char *)buf);
 	num_replies++;
 }
 
 /* Message handler callback that displays a string on stdout */
 
-static void print_string_cb(struct messaging_context *msg,
-			    void *private_data, 
-			    uint32_t msg_type, 
-			    struct server_id pid,
-			    DATA_BLOB *data)
+static void print_string_cb(int msg_type, struct process_id pid,
+			    void *buf, size_t len, void *private_data)
 {
-	printf("%.*s", (int)data->length, (const char *)data->data);
+	printf("%.*s", (int)len, (const char *)buf);
 	num_replies++;
 }
 
 /* Send no message.  Useful for testing. */
 
-static bool do_noop(struct messaging_context *msg_ctx,
-		    const struct server_id pid,
+static BOOL do_noop(const struct process_id pid,
 		    const int argc, const char **argv)
 {
 	if (argc != 1) {
@@ -142,8 +133,7 @@
 
 /* Send a debug string */
 
-static bool do_debug(struct messaging_context *msg_ctx,
-		     const struct server_id pid,
+static BOOL do_debug(const struct process_id pid,
 		     const int argc, const char **argv)
 {
 	if (argc != 2) {
@@ -152,8 +142,8 @@
 		return False;
 	}
 
-	return send_message(msg_ctx, pid, MSG_DEBUG, argv[1],
-			    strlen(argv[1]) + 1);
+	return send_message(
+		pid, MSG_DEBUG, argv[1], strlen(argv[1]) + 1, False);
 }
 
 #if defined(HAVE_LIBUNWIND_PTRACE) && defined(HAVE_LINUX_PTRACE)
@@ -257,20 +247,27 @@
 	ptrace(PTRACE_DETACH, pid, NULL, NULL);
 }
 
-static int stack_trace_connection(struct db_record *rec,
-				  const struct connections_key *key,
-				  const struct connections_data *crec,
-				  void *priv)
+static int stack_trace_connection(TDB_CONTEXT * tdb, TDB_DATA key,
+	TDB_DATA data, void * priv)
 {
-	print_stack_trace(procid_to_pid(&crec->pid), (int *)priv);
+	struct connections_data conn;
 
+	if (data.dsize != sizeof(conn))
+		return 0;
+
+	memcpy(&conn, data.dptr, sizeof(conn));
+	print_stack_trace(procid_to_pid(&conn.pid), (int *)priv);
+
 	return 0;
 }
 
-static bool do_daemon_stack_trace(struct messaging_context *msg_ctx,
-				  const struct server_id pid,
+static BOOL do_daemon_stack_trace(const struct process_id pid,
 		       const int argc, const char **argv)
 {
+	fprintf(stderr,
+		"Daemon stack tracing is not supported on this platform\n");
+	return False;
+
 	pid_t	dest;
 	int	count = 0;
 
@@ -289,7 +286,19 @@
 		 */
 		print_stack_trace(dest, &count);
 	} else {
-		connections_forall(stack_trace_connection, &count);
+		TDB_CONTEXT * tdb;
+
+		tdb = tdb_open_log(lock_path("connections.tdb"), 0, 
+				   TDB_DEFAULT, O_RDONLY, 0);
+		if (!tdb) {
+			fprintf(stderr,
+				"Failed to open connections database: %s\n",
+				strerror(errno));
+			return False;
+		}
+
+		tdb_traverse(tdb, stack_trace_connection, &count);
+		tdb_close(tdb);
 	}
 
 	return True;
@@ -297,8 +306,7 @@
 
 #else /* defined(HAVE_LIBUNWIND_PTRACE) && defined(HAVE_LINUX_PTRACE) */
 
-static bool do_daemon_stack_trace(struct messaging_context *msg_ctx,
-				  const struct server_id pid,
+static BOOL do_daemon_stack_trace(const struct process_id pid,
 		       const int argc, const char **argv)
 {
 	fprintf(stderr,
@@ -310,8 +318,7 @@
 
 /* Inject a fault (fatal signal) into a running smbd */
 
-static bool do_inject_fault(struct messaging_context *msg_ctx,
-			    const struct server_id pid,
+static BOOL do_inject_fault(const struct process_id pid,
 		       const int argc, const char **argv)
 {
 	if (argc != 2) {
@@ -344,16 +351,15 @@
 			return False;
 		}
 
-		return send_message(msg_ctx, pid, MSG_SMB_INJECT_FAULT,
-				    &sig, sizeof(int));
+		return send_message(pid, MSG_SMB_INJECT_FAULT,
+				    &sig, sizeof(int), False);
 	}
 #endif /* DEVELOPER */
 }
 
 /* Force a browser election */
 
-static bool do_election(struct messaging_context *msg_ctx,
-			const struct server_id pid,
+static BOOL do_election(const struct process_id pid,
 			const int argc, const char **argv)
 {
 	if (argc != 1) {
@@ -361,16 +367,14 @@
 		return False;
 	}
 
-	return send_message(msg_ctx, pid, MSG_FORCE_ELECTION, NULL, 0);
+	return send_message(
+		pid, MSG_FORCE_ELECTION, NULL, 0, False);
 }
 
 /* Ping a samba daemon process */
 
-static void pong_cb(struct messaging_context *msg,
-		    void *private_data, 
-		    uint32_t msg_type, 
-		    struct server_id pid,
-		    DATA_BLOB *data)
+static void pong_cb(int msg_type, struct process_id pid, void *buf,
+		    size_t len, void *private_data)
 {
 	char *src_string = procid_str(NULL, &pid);
 	printf("PONG from pid %s\n", src_string);
@@ -378,9 +382,7 @@
 	num_replies++;
 }
 
-static bool do_ping(struct messaging_context *msg_ctx,
-		    const struct server_id pid,
-		    const int argc, const char **argv)
+static BOOL do_ping(const struct process_id pid, const int argc, const char **argv)
 {
 	if (argc != 1) {
 		fprintf(stderr, "Usage: smbcontrol <dest> ping\n");
@@ -389,27 +391,26 @@
 
 	/* Send a message and register our interest in a reply */
 
-	if (!send_message(msg_ctx, pid, MSG_PING, NULL, 0))
+	if (!send_message(pid, MSG_PING, NULL, 0, False))
 		return False;
 
-	messaging_register(msg_ctx, NULL, MSG_PONG, pong_cb);
+	message_register(MSG_PONG, pong_cb, NULL);
 
-	wait_replies(msg_ctx, procid_to_pid(&pid) == 0);
+	wait_replies(procid_to_pid(&pid) == 0);
 
 	/* No replies were received within the timeout period */
 
 	if (num_replies == 0)
 		printf("No replies received\n");
 
-	messaging_deregister(msg_ctx, MSG_PONG, NULL);
+	message_deregister(MSG_PONG);
 
 	return num_replies;
 }
 
 /* Set profiling options */
 
-static bool do_profile(struct messaging_context *msg_ctx,
-		       const struct server_id pid,
+static BOOL do_profile(const struct process_id pid,
 		       const int argc, const char **argv)
 {
 	int v;
@@ -433,29 +434,26 @@
 		return False;
 	}
 
-	return send_message(msg_ctx, pid, MSG_PROFILE, &v, sizeof(int));
+	return send_message(pid, MSG_PROFILE, &v, sizeof(int), False);
 }
 
 /* Return the profiling level */
 
-static void profilelevel_cb(struct messaging_context *msg_ctx,
-			    void *private_data, 
-			    uint32_t msg_type, 
-			    struct server_id pid,
-			    DATA_BLOB *data)
+static void profilelevel_cb(int msg_type, struct process_id pid, void *buf,
+			    size_t len, void *private_data)
 {
 	int level;
 	const char *s;
 
 	num_replies++;
 
-	if (data->length != sizeof(int)) {
+	if (len != sizeof(int)) {
 		fprintf(stderr, "invalid message length %ld returned\n", 
-			(unsigned long)data->length);
+			(unsigned long)len);
 		return;
 	}
 
-	memcpy(&level, data->data, sizeof(int));
+	memcpy(&level, buf, sizeof(int));
 
 	switch (level) {
 	case 0:
@@ -478,21 +476,17 @@
 	printf("Profiling %s on pid %u\n",s,(unsigned int)procid_to_pid(&pid));
 }
 
-static void profilelevel_rqst(struct messaging_context *msg_ctx,
-			      void *private_data, 
-			      uint32_t msg_type, 
-			      struct server_id pid,
-			      DATA_BLOB *data)
+static void profilelevel_rqst(int msg_type, struct process_id pid,
+			      void *buf, size_t len, void *private_data)
 {
 	int v = 0;
 
 	/* Send back a dummy reply */
 
-	send_message(msg_ctx, pid, MSG_PROFILELEVEL, &v, sizeof(int));
+	send_message(pid, MSG_PROFILELEVEL, &v, sizeof(int), False);
 }
 
-static bool do_profilelevel(struct messaging_context *msg_ctx,
-			    const struct server_id pid,
+static BOOL do_profilelevel(const struct process_id pid,
 			    const int argc, const char **argv)
 {
 	if (argc != 1) {
@@ -502,29 +496,27 @@
 
 	/* Send a message and register our interest in a reply */
 
-	if (!send_message(msg_ctx, pid, MSG_REQ_PROFILELEVEL, NULL, 0))
+	if (!send_message(pid, MSG_REQ_PROFILELEVEL, NULL, 0, False))
 		return False;
 
-	messaging_register(msg_ctx, NULL, MSG_PROFILELEVEL, profilelevel_cb);
-	messaging_register(msg_ctx, NULL, MSG_REQ_PROFILELEVEL,
-			   profilelevel_rqst);
+	message_register(MSG_PROFILELEVEL, profilelevel_cb, NULL);
+	message_register(MSG_REQ_PROFILELEVEL, profilelevel_rqst, NULL);
 
-	wait_replies(msg_ctx, procid_to_pid(&pid) == 0);
+	wait_replies(procid_to_pid(&pid) == 0);
 
 	/* No replies were received within the timeout period */
 
 	if (num_replies == 0)
 		printf("No replies received\n");
 
-	messaging_deregister(msg_ctx, MSG_PROFILE, NULL);
+	message_deregister(MSG_PROFILE);
 
 	return num_replies;
 }
 
 /* Display debug level settings */
 
-static bool do_debuglevel(struct messaging_context *msg_ctx,
-			  const struct server_id pid,
+static BOOL do_debuglevel(const struct process_id pid,
 			  const int argc, const char **argv)
 {
 	if (argc != 1) {
@@ -534,27 +526,26 @@
 
 	/* Send a message and register our interest in a reply */
 
-	if (!send_message(msg_ctx, pid, MSG_REQ_DEBUGLEVEL, NULL, 0))
+	if (!send_message(pid, MSG_REQ_DEBUGLEVEL, NULL, 0, False))
 		return False;
 
-	messaging_register(msg_ctx, NULL, MSG_DEBUGLEVEL, print_pid_string_cb);
+	message_register(MSG_DEBUGLEVEL, print_pid_string_cb, NULL);
 
-	wait_replies(msg_ctx, procid_to_pid(&pid) == 0);
+	wait_replies(procid_to_pid(&pid) == 0);
 
 	/* No replies were received within the timeout period */
 
 	if (num_replies == 0)
 		printf("No replies received\n");
 
-	messaging_deregister(msg_ctx, MSG_DEBUGLEVEL, NULL);
+	message_deregister(MSG_DEBUGLEVEL);
 
 	return num_replies;
 }
 
 /* Send a print notify message */
 
-static bool do_printnotify(struct messaging_context *msg_ctx,
-			   const struct server_id pid,
+static BOOL do_printnotify(const struct process_id pid,
 			   const int argc, const char **argv)
 {
 	const char *cmd;
@@ -688,14 +679,13 @@
 	return False;
 
 send:
-	print_notify_send_messages(msg_ctx, 0);
+	print_notify_send_messages(0);
 	return True;
 }
 
 /* Close a share */
 
-static bool do_closeshare(struct messaging_context *msg_ctx,
-			  const struct server_id pid,
+static BOOL do_closeshare(const struct process_id pid,
 			  const int argc, const char **argv)
 {
 	if (argc != 2) {
@@ -704,42 +694,13 @@
 		return False;
 	}
 
-	return send_message(msg_ctx, pid, MSG_SMB_FORCE_TDIS, argv[1],
-			    strlen(argv[1]) + 1);
+	return send_message(
+		pid, MSG_SMB_FORCE_TDIS, argv[1], strlen(argv[1]) + 1, False);
 }
 
-/* force a blocking lock retry */
-
-static bool do_lockretry(struct messaging_context *msg_ctx,
-			 const struct server_id pid,
-			 const int argc, const char **argv)
-{
-	if (argc != 1) {
-		fprintf(stderr, "Usage: smbcontrol <dest> lockretry\n");
-		return False;
-	}
-
-	return send_message(msg_ctx, pid, MSG_SMB_UNLOCK, NULL, 0);
-}
-
-/* force a validation of all brl entries, including re-sends. */
-
-static bool do_brl_revalidate(struct messaging_context *msg_ctx,
-			      const struct server_id pid,
-			      const int argc, const char **argv)
-{
-	if (argc != 1) {
-		fprintf(stderr, "Usage: smbcontrol <dest> brl-revalidate\n");
-		return False;
-	}
-
-	return send_message(msg_ctx, pid, MSG_SMB_BRL_VALIDATE, NULL, 0);
-}
-
 /* Force a SAM synchronisation */
 
-static bool do_samsync(struct messaging_context *msg_ctx,
-		       const struct server_id pid,
+static BOOL do_samsync(const struct process_id pid,
 		       const int argc, const char **argv)
 {
 	if (argc != 1) {
@@ -747,13 +708,13 @@
 		return False;
 	}
 
-	return send_message(msg_ctx, pid, MSG_SMB_SAM_SYNC, NULL, 0);
+	return send_message(
+		pid, MSG_SMB_SAM_SYNC, NULL, 0, False);
 }
 
 /* Force a SAM replication */
 
-static bool do_samrepl(struct messaging_context *msg_ctx,
-		       const struct server_id pid,
+static BOOL do_samrepl(const struct process_id pid,
 		       const int argc, const char **argv)
 {
 	if (argc != 1) {
@@ -761,13 +722,13 @@
 		return False;
 	}
 
-	return send_message(msg_ctx, pid, MSG_SMB_SAM_REPL, NULL, 0);
+	return send_message(
+		pid, MSG_SMB_SAM_REPL, NULL, 0, False);
 }
 
 /* Display talloc pool usage */
 
-static bool do_poolusage(struct messaging_context *msg_ctx,
-			 const struct server_id pid,
+static BOOL do_poolusage(const struct process_id pid,
 			 const int argc, const char **argv)
 {
 	if (argc != 1) {
@@ -775,29 +736,28 @@
 		return False;
 	}
 
-	messaging_register(msg_ctx, NULL, MSG_POOL_USAGE, print_string_cb);
+	message_register(MSG_POOL_USAGE, print_string_cb, NULL);
 
 	/* Send a message and register our interest in a reply */
 
-	if (!send_message(msg_ctx, pid, MSG_REQ_POOL_USAGE, NULL, 0))
+	if (!send_message(pid, MSG_REQ_POOL_USAGE, NULL, 0, False))
 		return False;
 
-	wait_replies(msg_ctx, procid_to_pid(&pid) == 0);
+	wait_replies(procid_to_pid(&pid) == 0);
 
 	/* No replies were received within the timeout period */
 
 	if (num_replies == 0)
 		printf("No replies received\n");
 
-	messaging_deregister(msg_ctx, MSG_POOL_USAGE, NULL);
+	message_deregister(MSG_POOL_USAGE);
 
 	return num_replies;
 }
 
 /* Perform a dmalloc mark */
 
-static bool do_dmalloc_mark(struct messaging_context *msg_ctx,
-			    const struct server_id pid,
+static BOOL do_dmalloc_mark(const struct process_id pid,
 			    const int argc, const char **argv)
 {
 	if (argc != 1) {
@@ -805,13 +765,13 @@
 		return False;
 	}
 
-	return send_message(msg_ctx, pid, MSG_REQ_DMALLOC_MARK, NULL, 0);
+	return send_message(
+		pid, MSG_REQ_DMALLOC_MARK, NULL, 0, False);
 }
 
 /* Perform a dmalloc changed */
 
-static bool do_dmalloc_changed(struct messaging_context *msg_ctx,
-			       const struct server_id pid,
+static BOOL do_dmalloc_changed(const struct process_id pid,
 			       const int argc, const char **argv)
 {
 	if (argc != 1) {
@@ -820,14 +780,13 @@
 		return False;
 	}
 
-	return send_message(msg_ctx, pid, MSG_REQ_DMALLOC_LOG_CHANGED,
-			    NULL, 0);
+	return send_message(
+		pid, MSG_REQ_DMALLOC_LOG_CHANGED, NULL, 0, False);
 }
 
 /* Shutdown a server process */
 
-static bool do_shutdown(struct messaging_context *msg_ctx,
-			const struct server_id pid,
+static BOOL do_shutdown(const struct process_id pid,
 			const int argc, const char **argv)
 {
 	if (argc != 1) {
@@ -835,13 +794,12 @@
 		return False;
 	}
 
-	return send_message(msg_ctx, pid, MSG_SHUTDOWN, NULL, 0);
+	return send_message(pid, MSG_SHUTDOWN, NULL, 0, False);
 }
 
 /* Notify a driver upgrade */
 
-static bool do_drvupgrade(struct messaging_context *msg_ctx,
-			  const struct server_id pid,
+static BOOL do_drvupgrade(const struct process_id pid,
 			  const int argc, const char **argv)
 {
 	if (argc != 2) {
@@ -850,12 +808,11 @@
 		return False;
 	}
 
-	return send_message(msg_ctx, pid, MSG_DEBUG, argv[1],
-			    strlen(argv[1]) + 1);
+	return send_message(
+		pid, MSG_DEBUG, argv[1], strlen(argv[1]) + 1, False);
 }
 
-static bool do_winbind_online(struct messaging_context *msg_ctx,
-			      const struct server_id pid,
+static BOOL do_winbind_online(const struct process_id pid,
 			     const int argc, const char **argv)
 {
 	TDB_CONTEXT *tdb;
@@ -885,15 +842,14 @@
 	tdb_delete_bystring(tdb, "WINBINDD_OFFLINE");
 	tdb_close(tdb);
 
-	return send_message(msg_ctx, pid, MSG_WINBIND_ONLINE, NULL, 0);
+	return send_message(pid, MSG_WINBIND_ONLINE, NULL, 0, False);
 }
 
-static bool do_winbind_offline(struct messaging_context *msg_ctx,
-			       const struct server_id pid,
+static BOOL do_winbind_offline(const struct process_id pid,
 			     const int argc, const char **argv)
 {
 	TDB_CONTEXT *tdb;
-	bool ret = False;
+	BOOL ret = False;
 	int retry = 0;
 
 	if (argc != 1) {
@@ -931,7 +887,7 @@
 
 	for (retry = 0; retry < 5; retry++) {
 		TDB_DATA d;
-		uint8 buf[4];
+		char buf[4];
 
 		ZERO_STRUCT(d);
 
@@ -941,8 +897,7 @@
 
 		tdb_store_bystring(tdb, "WINBINDD_OFFLINE", d, TDB_INSERT);
 
-		ret = send_message(msg_ctx, pid, MSG_WINBIND_OFFLINE,
-				   NULL, 0);
+		ret = send_message(pid, MSG_WINBIND_OFFLINE, NULL, 0, False);
 
 		/* Check that the entry "WINBINDD_OFFLINE" still exists. */
 		d = tdb_fetch_bystring( tdb, "WINBINDD_OFFLINE" );
@@ -960,11 +915,10 @@
 	return ret;
 }
 
-static bool do_winbind_onlinestatus(struct messaging_context *msg_ctx,
-				    const struct server_id pid,
+static BOOL do_winbind_onlinestatus(const struct process_id pid,
 				    const int argc, const char **argv)
 {
-	struct server_id myid;
+	struct process_id myid;
 
 	myid = pid_to_procid(sys_getpid());
 
@@ -973,142 +927,25 @@
 		return False;
 	}
 
-	messaging_register(msg_ctx, NULL, MSG_WINBIND_ONLINESTATUS,
-			   print_pid_string_cb);
+	message_register(MSG_WINBIND_ONLINESTATUS, print_pid_string_cb, NULL);
 
-	if (!send_message(msg_ctx, pid, MSG_WINBIND_ONLINESTATUS, &myid,
-			  sizeof(myid)))
+	if (!send_message(pid, MSG_WINBIND_ONLINESTATUS, &myid, sizeof(myid), False))
 		return False;
 
-	wait_replies(msg_ctx, procid_to_pid(&pid) == 0);
+	wait_replies(procid_to_pid(&pid) == 0);
 
 	/* No replies were received within the timeout period */
 
 	if (num_replies == 0)
 		printf("No replies received\n");
 
-	messaging_deregister(msg_ctx, MSG_WINBIND_ONLINESTATUS, NULL);
+	message_deregister(MSG_WINBIND_ONLINESTATUS);
 
 	return num_replies;
 }
 
-static bool do_dump_event_list(struct messaging_context *msg_ctx,
-			       const struct server_id pid,
-			       const int argc, const char **argv)
-{
-	struct server_id myid;
 
-	myid = pid_to_procid(sys_getpid());
-
-	if (argc != 1) {
-		fprintf(stderr, "Usage: smbcontrol <dest> dump-event-list\n");
-		return False;
-	}
-
-	return send_message(msg_ctx, pid, MSG_DUMP_EVENT_LIST, NULL, 0);
-}
-
-static bool do_winbind_dump_domain_list(struct messaging_context *msg_ctx,
-					const struct server_id pid,
-					const int argc, const char **argv)
-{
-	const char *domain = NULL;
-	int domain_len = 0;
-	struct server_id myid;
-	uint8_t *buf = NULL;
-	int buf_len = 0;
-
-	myid = pid_to_procid(sys_getpid());
-
-	if (argc < 1 || argc > 2) {
-		fprintf(stderr, "Usage: smbcontrol <dest> dump_domain_list "
-			"<domain>\n");
-		return false;
-	}
-
-	if (argc == 2) {
-		domain = argv[1];
-		domain_len = strlen(argv[1]) + 1;
-	}
-
-	messaging_register(msg_ctx, NULL, MSG_WINBIND_DUMP_DOMAIN_LIST,
-			   print_pid_string_cb);
-
-	buf_len = sizeof(myid)+domain_len;
-	buf = SMB_MALLOC_ARRAY(uint8_t, buf_len);
-	if (!buf) {
-		return false;
-	}
-
-	memcpy(buf, &myid, sizeof(myid));
-	memcpy(&buf[sizeof(myid)], domain, domain_len);
-
-	if (!send_message(msg_ctx, pid, MSG_WINBIND_DUMP_DOMAIN_LIST,
-			  buf, buf_len))
-	{
-		SAFE_FREE(buf);
-		return false;
-	}
-
-	wait_replies(msg_ctx, procid_to_pid(&pid) == 0);
-
-	/* No replies were received within the timeout period */
-
-	SAFE_FREE(buf);
-	if (num_replies == 0) {
-		printf("No replies received\n");
-	}
-
-	messaging_deregister(msg_ctx, MSG_WINBIND_DUMP_DOMAIN_LIST, NULL);
-
-	return num_replies;
-}
-
-static void winbind_validate_cache_cb(struct messaging_context *msg,
-				      void *private_data,
-				      uint32_t msg_type,
-				      struct server_id pid,
-				      DATA_BLOB *data)
-{
-	char *src_string = procid_str(NULL, &pid);
-	printf("Winbindd cache is %svalid. (answer from pid %s)\n",
-	       (*(data->data) == 0 ? "" : "NOT "), src_string);
-	TALLOC_FREE(src_string);
-	num_replies++;
-}
-
-static bool do_winbind_validate_cache(struct messaging_context *msg_ctx,
-				      const struct server_id pid,
-				      const int argc, const char **argv)
-{
-	struct server_id myid = pid_to_procid(sys_getpid());
-
-	if (argc != 1) {
-		fprintf(stderr, "Usage: smbcontrol winbindd validate-cache\n");
-		return False;
-	}
-
-	messaging_register(msg_ctx, NULL, MSG_WINBIND_VALIDATE_CACHE,
-			   winbind_validate_cache_cb);
-
-	if (!send_message(msg_ctx, pid, MSG_WINBIND_VALIDATE_CACHE, &myid,
-			  sizeof(myid))) {
-		return False;
-	}
-
-	wait_replies(msg_ctx, procid_to_pid(&pid) == 0);
-
-	if (num_replies == 0) {
-		printf("No replies received\n");
-	}
-
-	messaging_deregister(msg_ctx, MSG_WINBIND_VALIDATE_CACHE, NULL);
-
-	return num_replies;
-}
-
-static bool do_reload_config(struct messaging_context *msg_ctx,
-			     const struct server_id pid,
+static BOOL do_reload_config(const struct process_id pid,
 			     const int argc, const char **argv)
 {
 	if (argc != 1) {
@@ -1116,7 +953,7 @@
 		return False;
 	}
 
-	return send_message(msg_ctx, pid, MSG_SMB_CONF_UPDATED, NULL, 0);
+	return send_message(pid, MSG_SMB_CONF_UPDATED, NULL, 0, False);
 }
 
 static void my_make_nmb_name( struct nmb_name *n, const char *name, int type)
@@ -1130,8 +967,7 @@
 	push_ascii(n->scope,  global_scope(), 64, STR_TERMINATE);
 }
 
-static bool do_nodestatus(struct messaging_context *msg_ctx,
-			  const struct server_id pid,
+static BOOL do_nodestatus(const struct process_id pid,
 			  const int argc, const char **argv)
 {
 	struct packet_struct p;
@@ -1143,7 +979,7 @@
 
 	ZERO_STRUCT(p);
 
-	(void)interpret_addr2(&p.ip, argv[1]);
+	p.ip = *interpret_addr2(argv[1]);
 	p.port = 137;
 	p.packet_type = NMB_PACKET;
 
@@ -1164,15 +1000,14 @@
 	p.packet.nmb.question.question_type = 0x21;
 	p.packet.nmb.question.question_class = 0x1;
 
-	return send_message(msg_ctx, pid, MSG_SEND_PACKET, &p, sizeof(p));
+	return send_message(pid, MSG_SEND_PACKET, &p, sizeof(p), False);
 }
 
 /* A list of message type supported */
 
 static const struct {
 	const char *name;	/* Option name */
-	bool (*fn)(struct messaging_context *msg_ctx,
-		   const struct server_id pid,
+	BOOL (*fn)(const struct process_id pid,
 		   const int argc, const char **argv);
 	const char *help;	/* Short help text */
 } msg_types[] = {
@@ -1189,8 +1024,6 @@
 	{ "debuglevel", do_debuglevel, "Display current debuglevels" },
 	{ "printnotify", do_printnotify, "Send a print notify message" },
 	{ "close-share", do_closeshare, "Forcibly disconnect a share" },
-	{ "lockretry", do_lockretry, "Force a blocking lock retry" },
-	{ "brl-revalidate", do_brl_revalidate, "Revalidate all brl entries" },
         { "samsync", do_samsync, "Initiate SAM synchronisation" },
         { "samrepl", do_samrepl, "Initiate SAM replication" },
 	{ "pool-usage", do_poolusage, "Display talloc memory usage" },
@@ -1203,21 +1036,17 @@
 	{ "online", do_winbind_online, "Ask winbind to go into online state"},
 	{ "offline", do_winbind_offline, "Ask winbind to go into offline state"},
 	{ "onlinestatus", do_winbind_onlinestatus, "Request winbind online status"},
-	{ "dump-event-list", do_dump_event_list, "Dump event list"},
-	{ "validate-cache" , do_winbind_validate_cache,
-	  "Validate winbind's credential cache" },
-	{ "dump-domain-list", do_winbind_dump_domain_list, "Dump winbind domain list"},
 	{ "noop", do_noop, "Do nothing" },
 	{ NULL }
 };
 
 /* Display usage information */
 
-static void usage(poptContext pc)
+static void usage(poptContext *pc)
 {
 	int i;
 
-	poptPrintHelp(pc, stderr, 0);
+	poptPrintHelp(*pc, stderr, 0);
 
 	fprintf(stderr, "\n");
 	fprintf(stderr, "<destination> is one of \"nmbd\", \"smbd\", \"winbindd\" or a "
@@ -1237,15 +1066,15 @@
 
 /* Return the pid number for a string destination */
 
-static struct server_id parse_dest(const char *dest)
+static struct process_id parse_dest(const char *dest)
 {
-	struct server_id result = {-1};
+	struct process_id result = {-1};
 	pid_t pid;
 
 	/* Zero is a special return value for broadcast smbd */
 
 	if (strequal(dest, "smbd")) {
-		return interpret_pid(MSG_BROADCAST_PID_STR);
+		return interpret_pid("0");
 	}
 
 	/* Try self - useful for testing */
@@ -1284,11 +1113,10 @@
 
 /* Execute smbcontrol command */
 
-static bool do_command(struct messaging_context *msg_ctx,
-		       int argc, const char **argv)
+static BOOL do_command(int argc, const char **argv)
 {
 	const char *dest = argv[0], *command = argv[1];
-	struct server_id pid;
+	struct process_id pid;
 	int i;
 
 	/* Check destination */
@@ -1302,8 +1130,7 @@
 
 	for (i = 0; msg_types[i].name; i++) {
 		if (strequal(command, msg_types[i].name))
-			return msg_types[i].fn(msg_ctx, pid,
-					       argc - 1, argv + 1);
+			return msg_types[i].fn(pid, argc - 1, argv + 1);
 	}
 
 	fprintf(stderr, "smbcontrol: unknown command '%s'\n", command);
@@ -1311,50 +1138,21 @@
 	return False;
 }
 
-static void smbcontrol_help(poptContext pc,
-		    enum poptCallbackReason preason,
-		    struct poptOption * poption,
-		    const char * parg,
-		    void * pdata)
-{
-	if (poption->shortName != '?') {
-		poptPrintUsage(pc, stdout, 0);
-	} else {
-		usage(pc);
-	}
-
-	exit(0);
-}
-
-struct poptOption help_options[] = {
-	{ NULL, '\0', POPT_ARG_CALLBACK, (void *)&smbcontrol_help, '\0',
-	  NULL, NULL },
-	{ "help", '?', 0, NULL, '?', "Show this help message", NULL },
-	{ "usage", '\0', 0, NULL, 'u', "Display brief usage message", NULL },
-	{ NULL }
-} ;
-
 /* Main program */
 
 int main(int argc, const char **argv)
 {
 	poptContext pc;
 	int opt;
-	struct event_context *evt_ctx;
-	struct messaging_context *msg_ctx;
 
 	static struct poptOption long_options[] = {
-		/* POPT_AUTOHELP */
-		{ NULL, '\0', POPT_ARG_INCLUDE_TABLE, help_options,
-		                        0, "Help options:", NULL },
+		POPT_AUTOHELP
 		{ "timeout", 't', POPT_ARG_INT, &timeout, 't', 
 		  "Set timeout value in seconds", "TIMEOUT" },
 
 		POPT_COMMON_SAMBA
 		POPT_TABLEEND
 	};
-	TALLOC_CTX *frame = talloc_stackframe();
-	int ret = 0;
 
 	load_case_tables();
 
@@ -1369,7 +1167,7 @@
 			       "<parameters>");
 
 	if (argc == 1)
-		usage(pc);
+		usage(&pc);
 
 	while ((opt = poptGetNextOpt(pc)) != -1) {
 		switch(opt) {
@@ -1388,29 +1186,18 @@
 
 	argv = (const char **)poptGetArgs(pc);
 	argc = 0;
-	if (argv != NULL) {
-		while (argv[argc] != NULL) {
-			argc++;
-		}
+	while (argv[argc] != NULL) {
+		argc++;
 	}
 
-	if (argc <= 1)
-		usage(pc);
+	if (argc == 1)
+		usage(&pc);
 
-	lp_load(get_dyn_CONFIGFILE(),False,False,False,True);
+	lp_load(dyn_CONFIGFILE,False,False,False,True);
 
 	/* Need to invert sense of return code -- samba
          * routines mostly return True==1 for success, but
          * shell needs 0. */ 
 	
-	if (!(evt_ctx = event_context_init(NULL)) ||
-	    !(msg_ctx = messaging_init(NULL, server_id_self(), evt_ctx))) {
-		fprintf(stderr, "could not init messaging context\n");
-		TALLOC_FREE(frame);
-		exit(1);
-	}
-	
-	ret = !do_command(msg_ctx, argc, argv);
-	TALLOC_FREE(frame);
-	return ret;
+	return !do_command(argc, argv);
 }

Modified: branches/samba/upstream/source/utils/smbcquotas.c
===================================================================
--- branches/samba/upstream/source/utils/smbcquotas.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/smbcquotas.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -9,7 +9,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -18,17 +18,18 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
-static char *server;
+static pstring server;
 
 /* numeric is set when the user wants numeric SIDs and ACEs rather
    than going via LSA calls to resolve them */
-static bool numeric;
-static bool verbose;
+static BOOL numeric;
+static BOOL verbose;
 
 enum todo_values {NOOP_QUOTA=0,FS_QUOTA,USER_QUOTA,LIST_QUOTA,SET_QUOTA};
 enum exit_values {EXIT_OK, EXIT_FAILED, EXIT_PARSE_ERROR};
@@ -36,13 +37,13 @@
 static struct cli_state *cli_ipc;
 static struct rpc_pipe_client *global_pipe_hnd;
 static POLICY_HND pol;
-static bool got_policy_hnd;
+static BOOL got_policy_hnd;
 
 static struct cli_state *connect_one(const char *share);
 
 /* Open cli connection and policy handle */
 
-static bool cli_open_policy_hnd(void)
+static BOOL cli_open_policy_hnd(void)
 {
 	/* Initialise cli LSA connection */
 
@@ -54,7 +55,7 @@
 				return False;
 		}
 	}
-
+	
 	/* Open policy handle */
 
 	if (!got_policy_hnd) {
@@ -62,7 +63,7 @@
 		/* Some systems don't support SEC_RIGHTS_MAXIMUM_ALLOWED,
 		   but NT sends 0x2000000 so we might as well do it too. */
 
-		if (!NT_STATUS_IS_OK(rpccli_lsa_open_policy(global_pipe_hnd, talloc_tos(), True, 
+		if (!NT_STATUS_IS_OK(rpccli_lsa_open_policy(global_pipe_hnd, cli_ipc->mem_ctx, True, 
 							 GENERIC_EXECUTE_ACCESS, &pol))) {
 			return False;
 		}
@@ -74,20 +75,20 @@
 }
 
 /* convert a SID to a string, either numeric or username/group */
-static void SidToString(fstring str, DOM_SID *sid, bool _numeric)
+static void SidToString(fstring str, DOM_SID *sid, BOOL _numeric)
 {
 	char **domains = NULL;
 	char **names = NULL;
 	enum lsa_SidType *types = NULL;
 
-	sid_to_fstring(str, sid);
+	sid_to_string(str, sid);
 
 	if (_numeric) return;
 
 	/* Ask LSA to convert the sid to a name */
 
 	if (!cli_open_policy_hnd() ||
-	    !NT_STATUS_IS_OK(rpccli_lsa_lookup_sids(global_pipe_hnd, talloc_tos(),
+	    !NT_STATUS_IS_OK(rpccli_lsa_lookup_sids(global_pipe_hnd, cli_ipc->mem_ctx,  
 						 &pol, 1, sid, &domains, 
 						 &names, &types)) ||
 	    !domains || !domains[0] || !names || !names[0]) {
@@ -103,19 +104,19 @@
 }
 
 /* convert a string to a SID, either numeric or username/group */
-static bool StringToSid(DOM_SID *sid, const char *str)
+static BOOL StringToSid(DOM_SID *sid, const char *str)
 {
 	enum lsa_SidType *types = NULL;
 	DOM_SID *sids = NULL;
-	bool result = True;
+	BOOL result = True;
 
 	if (strncmp(str, "S-", 2) == 0) {
 		return string_to_sid(sid, str);
 	}
 
 	if (!cli_open_policy_hnd() ||
-	    !NT_STATUS_IS_OK(rpccli_lsa_lookup_names(global_pipe_hnd, talloc_tos(),
-						  &pol, 1, &str, NULL, 1, &sids, 
+	    !NT_STATUS_IS_OK(rpccli_lsa_lookup_names(global_pipe_hnd, cli_ipc->mem_ctx, 
+						  &pol, 1, &str, NULL, &sids, 
 						  &types))) {
 		result = False;
 		goto done;
@@ -134,20 +135,14 @@
 
 enum {PARSE_FLAGS,PARSE_LIM};
 
-static int parse_quota_set(TALLOC_CTX *ctx,
-			char *set_str,
-			char **pp_username_str,
-			enum SMB_QUOTA_TYPE *qtype,
-			int *cmd,
-			SMB_NTQUOTA_STRUCT *pqt)
+static int parse_quota_set(pstring set_str, pstring username_str, enum SMB_QUOTA_TYPE *qtype, int *cmd, SMB_NTQUOTA_STRUCT *pqt)
 {
 	char *p = set_str,*p2;
 	int todo;
-	bool stop = False;
-	bool enable = False;
-	bool deny = False;
-
-	*pp_username_str = NULL;
+	BOOL stop = False;
+	BOOL enable = False;
+	BOOL deny = False;
+	
 	if (strnequal(set_str,"UQLIM:",6)) {
 		p += 6;
 		*qtype = SMB_USER_QUOTA_TYPE;
@@ -156,11 +151,11 @@
 		if ((p2=strstr(p,":"))==NULL) {
 			return -1;
 		}
-
+		
 		*p2 = '\0';
 		p2++;
-
-		*pp_username_str = talloc_strdup(ctx, p);
+		
+		fstrcpy(username_str,p);
 		p = p2;
 	} else if (strnequal(set_str,"FSQLIM:",7)) {
 		p +=7;
@@ -185,7 +180,7 @@
 #endif
 				return -1;
 			}
-
+			
 			break;
 		case PARSE_FLAGS:
 			while (!stop) {
@@ -217,18 +212,14 @@
 			} else if (enable) {
 				pqt->qflags |= QUOTAS_ENABLED;
 			}
-
-			break;
+			
+			break;	
 	}
 
 	return 0;
 }
 
-static int do_quota(struct cli_state *cli,
-		enum SMB_QUOTA_TYPE qtype,
-		uint16 cmd,
-		const char *username_str,
-		SMB_NTQUOTA_STRUCT *pqt)
+static int do_quota(struct cli_state *cli, enum SMB_QUOTA_TYPE qtype, uint16 cmd, pstring username_str, SMB_NTQUOTA_STRUCT *pqt)
 {
 	uint32 fs_attrs = 0;
 	int quota_fnum = 0;
@@ -244,7 +235,7 @@
 
 	if (!(fs_attrs & FILE_VOLUME_QUOTAS)) {
 		d_printf("Quotas are not supported by the server.\n");
-		return 0;
+		return 0;	
 	}
 
 	if (!cli_get_quota_handle(cli, &quota_fnum)) {
@@ -260,7 +251,7 @@
 				d_printf("StringToSid() failed for [%s]\n",username_str);
 				return -1;
 			}
-
+			
 			switch(cmd) {
 				case QUOTA_GET:
 					if (!cli_get_user_quota(cli, quota_fnum, &qt)) {
@@ -291,12 +282,12 @@
 						return -1;
 					}
 					dump_ntquota_list(&qtl,verbose,numeric,SidToString);
-					free_ntquota_list(&qtl);
+					free_ntquota_list(&qtl);					
 					break;
 				default:
 					d_printf("Unknown Error\n");
 					return -1;
-			}
+			} 
 			break;
 		case SMB_USER_FS_QUOTA_TYPE:
 			switch(cmd) {
@@ -350,7 +341,7 @@
 				default:
 					d_printf("Unknown Error\n");
 					return -1;
-			}
+			} 		
 			break;
 		default:
 			d_printf("Unknown Error\n");
@@ -362,64 +353,35 @@
 	return 0;
 }
 
-/*****************************************************
- Return a connection to a server.
+/***************************************************** 
+return a connection to a server
 *******************************************************/
-
 static struct cli_state *connect_one(const char *share)
 {
 	struct cli_state *c;
-	struct sockaddr_storage ss;
+	struct in_addr ip;
 	NTSTATUS nt_status;
-	uint32_t flags = 0;
-
-	zero_addr(&ss);
-
-	if (get_cmdline_auth_info_use_machine_account() &&
-	    !set_cmdline_auth_info_machine_account_creds()) {
-		return NULL;
-	}
-
-	if (get_cmdline_auth_info_use_kerberos()) {
-		flags |= CLI_FULL_CONNECTION_USE_KERBEROS |
-			 CLI_FULL_CONNECTION_FALLBACK_AFTER_KERBEROS;
-
-	}
-
-	if (!get_cmdline_auth_info_got_pass()) {
+	zero_ip(&ip);
+	
+	if (!cmdline_auth_info.got_pass) {
 		char *pass = getpass("Password: ");
 		if (pass) {
-			set_cmdline_auth_info_password(pass);
+			pstrcpy(cmdline_auth_info.password, pass);
+			cmdline_auth_info.got_pass = True;
 		}
 	}
 
-	nt_status = cli_full_connection(&c, global_myname(), server, 
-					    &ss, 0,
-					    share, "?????",
-					    get_cmdline_auth_info_username(),
-					    lp_workgroup(),
-					    get_cmdline_auth_info_password(),
-					    flags,
-					    get_cmdline_auth_info_signing_state(),
-					    NULL);
-	if (!NT_STATUS_IS_OK(nt_status)) {
+	if (NT_STATUS_IS_OK(nt_status = cli_full_connection(&c, global_myname(), server, 
+							    &ip, 0,
+							    share, "?????",  
+							    cmdline_auth_info.username, lp_workgroup(),
+							    cmdline_auth_info.password, 0,
+							    cmdline_auth_info.signing_state, NULL))) {
+		return c;
+	} else {
 		DEBUG(0,("cli_full_connection failed! (%s)\n", nt_errstr(nt_status)));
 		return NULL;
 	}
-
-	if (get_cmdline_auth_info_smb_encrypt()) {
-		nt_status = cli_cm_force_encryption(c,
-					get_cmdline_auth_info_username(),
-					get_cmdline_auth_info_password(),
-					lp_workgroup(),
-					share);
-		if (!NT_STATUS_IS_OK(nt_status)) {
-			cli_shutdown(c);
-			return NULL;
-		}
-	}
-
-	return c;
 }
 
 /****************************************************************************
@@ -431,16 +393,15 @@
 	int opt;
 	int result;
 	int todo = 0;
-	char *username_str = NULL;
-	char *path = NULL;
-	char *set_str = NULL;
+	pstring username_str = {0};
+	pstring path = {0};
+	pstring set_str = {0};
 	enum SMB_QUOTA_TYPE qtype = SMB_INVALID_QUOTA_TYPE;
 	int cmd = 0;
-	static bool test_args = False;
+	static BOOL test_args = False;
 	struct cli_state *cli;
-	bool fix_user = False;
+	BOOL fix_user = False;
 	SMB_NTQUOTA_STRUCT qt;
-	TALLOC_CTX *frame = talloc_stackframe();
 	poptContext pc;
 	struct poptOption long_options[] = {
 		POPT_AUTOHELP
@@ -452,9 +413,9 @@
 UQLIM:<username>/<softlimit>/<hardlimit> for user quotas\n\
 FSQLIM:<softlimit>/<hardlimit> for filesystem defaults\n\
 FSQFLAGS:QUOTA_ENABLED/DENY_DISK/LOG_SOFTLIMIT/LOG_HARD_LIMIT", "SETSTRING" },
-		{ "numeric", 'n', POPT_ARG_NONE, NULL, 'n', "Don't resolve sids or limits to names" },
-		{ "verbose", 'v', POPT_ARG_NONE, NULL, 'v', "be verbose" },
-		{ "test-args", 't', POPT_ARG_NONE, NULL, 'r', "Test arguments"},
+		{ "numeric", 'n', POPT_ARG_NONE, &numeric, True, "Don't resolve sids or limits to names" },
+		{ "verbose", 'v', POPT_ARG_NONE, &verbose, True, "be verbose" },
+		{ "test-args", 't', POPT_ARG_NONE, &test_args, True, "Test arguments"},
 		POPT_COMMON_SAMBA
 		POPT_COMMON_CREDENTIALS
 		{ NULL }
@@ -474,24 +435,15 @@
 
 	fault_setup(NULL);
 
-	lp_load(get_dyn_CONFIGFILE(),True,False,False,True);
+	lp_load(dyn_CONFIGFILE,True,False,False,True);
 	load_interfaces();
 
 	pc = poptGetContext("smbcquotas", argc, argv, long_options, 0);
-
+	
 	poptSetOtherOptionHelp(pc, "//server1/share1");
 
 	while ((opt = poptGetNextOpt(pc)) != -1) {
 		switch (opt) {
-		case 'n':
-			numeric = true;
-			break;
-		case 'v':
-			verbose = true;
-			break;
-		case 't':
-			test_args = true;
-			break;
 		case 'L':
 			if (todo != 0) {
 				d_printf("Please specify only one option of <-L|-F|-S|-u>\n");
@@ -507,29 +459,23 @@
 			}
 			todo = FS_QUOTA;
 			break;
-
+		
 		case 'u':
 			if (todo != 0) {
 				d_printf("Please specify only one option of <-L|-F|-S|-u>\n");
 				exit(EXIT_PARSE_ERROR);
 			}
-			username_str = talloc_strdup(frame, poptGetOptArg(pc));
-			if (!username_str) {
-				exit(EXIT_PARSE_ERROR);
-			}
+			pstrcpy(username_str,poptGetOptArg(pc));
 			todo = USER_QUOTA;
 			fix_user = True;
 			break;
-
+		
 		case 'S':
 			if (todo != 0) {
 				d_printf("Please specify only one option of <-L|-F|-S|-u>\n");
 				exit(EXIT_PARSE_ERROR);
 			}
-			set_str = talloc_strdup(frame, poptGetOptArg(pc));
-			if (!set_str) {
-				exit(EXIT_PARSE_ERROR);
-			}
+			pstrcpy(set_str,poptGetOptArg(pc));
 			todo = SET_QUOTA;
 			break;
 		}
@@ -538,43 +484,34 @@
 	if (todo == 0)
 		todo = USER_QUOTA;
 
-	if (!fix_user) {
-		username_str = talloc_strdup(frame, get_cmdline_auth_info_username());
-		if (!username_str) {
-			exit(EXIT_PARSE_ERROR);
-		}
-	}
+	if (!fix_user)
+		pstrcpy(username_str,cmdline_auth_info.username);
 
 	/* Make connection to server */
-	if(!poptPeekArg(pc)) {
+	if(!poptPeekArg(pc)) { 
 		poptPrintUsage(pc, stderr, 0);
 		exit(EXIT_PARSE_ERROR);
 	}
+	
+	pstrcpy(path, poptGetArg(pc));
 
-	path = talloc_strdup(frame, poptGetArg(pc));
-	if (!path) {
-		printf("Out of memory\n");
-		exit(EXIT_PARSE_ERROR);
-	}
+	all_string_sub(path,"/","\\",0);
 
-	string_replace(path, '/', '\\');
-
-	server = SMB_STRDUP(path+2);
-	if (!server) {
-		printf("Out of memory\n");
-		exit(EXIT_PARSE_ERROR);
-	}
+	pstrcpy(server,path+2);
 	share = strchr_m(server,'\\');
 	if (!share) {
-		printf("Invalid argument: %s\n", share);
-		exit(EXIT_PARSE_ERROR);
+		share = strchr_m(server,'/');
+		if (!share) {
+			printf("Invalid argument: %s\n", share);
+			exit(EXIT_PARSE_ERROR);
+		}
 	}
 
 	*share = 0;
 	share++;
 
 	if (todo == SET_QUOTA) {
-		if (parse_quota_set(talloc_tos(), set_str, &username_str, &qtype, &cmd, &qt)) {
+		if (parse_quota_set(set_str, username_str, &qtype, &cmd, &qt)) {
 			printf("Invalid argument: -S %s\n", set_str);
 			exit(EXIT_PARSE_ERROR);
 		}
@@ -611,7 +548,6 @@
 			break;
 	}
 
-	talloc_free(frame);
-
 	return result;
 }
+

Modified: branches/samba/upstream/source/utils/smbfilter.c
===================================================================
--- branches/samba/upstream/source/utils/smbfilter.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/smbfilter.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -78,7 +79,7 @@
 {
 	int msg_type = CVAL(buf,0);
 	int type = CVAL(buf,smb_com);
-	fstring name1,name2;
+	pstring name1,name2;
 	unsigned x;
 
 	if (msg_type) {
@@ -114,46 +115,16 @@
 
 }
 
-/****************************************************************************
- Send an smb to a fd.
-****************************************************************************/
 
-static bool send_smb(int fd, char *buffer)
+static void filter_child(int c, struct in_addr dest_ip)
 {
-	size_t len;
-	size_t nwritten=0;
-	ssize_t ret;
-
-        len = smb_len(buffer) + 4;
-
-	while (nwritten < len) {
-		ret = write_data(fd,buffer+nwritten,len - nwritten);
-		if (ret <= 0) {
-			DEBUG(0,("Error writing %d bytes to client. %d. (%s)\n",
-				(int)len,(int)ret, strerror(errno) ));
-			return false;
-		}
-		nwritten += ret;
-	}
-
-	return true;
-}
-
-static void filter_child(int c, struct sockaddr_storage *dest_ss)
-{
 	int s;
 
 	/* we have a connection from a new client, now connect to the server */
-	s = open_socket_out(SOCK_STREAM, dest_ss, 445, LONG_CONNECT_TIMEOUT);
+	s = open_socket_out(SOCK_STREAM, &dest_ip, 445, LONG_CONNECT_TIMEOUT);
 
 	if (s == -1) {
-		char addr[INET6_ADDRSTRLEN];
-		if (dest_ss) {
-			print_sockaddr(addr, sizeof(addr), dest_ss);
-		}
-
-		d_printf("Unable to connect to %s (%s)\n",
-			 dest_ss?addr:"NULL",strerror(errno));
+		d_printf("Unable to connect to %s\n", inet_ntoa(dest_ip));
 		exit(1);
 	}
 
@@ -169,10 +140,7 @@
 		if (num <= 0) continue;
 		
 		if (c != -1 && FD_ISSET(c, &fds)) {
-			size_t len;
-			if (!NT_STATUS_IS_OK(receive_smb_raw(
-							c, packet, sizeof(packet),
-							0, 0, &len))) {
+			if (!receive_smb(c, packet, BUFFER_SIZE, 0)) {
 				d_printf("client closed connection\n");
 				exit(0);
 			}
@@ -183,10 +151,7 @@
 			}			
 		}
 		if (s != -1 && FD_ISSET(s, &fds)) {
-			size_t len;
-			if (!NT_STATUS_IS_OK(receive_smb_raw(
-							s, packet, sizeof(packet),
-							0, 0, &len))) {
+			if (!receive_smb(s, packet, BUFFER_SIZE, 0)) {
 				d_printf("server closed connection\n");
 				exit(0);
 			}
@@ -205,15 +170,12 @@
 static void start_filter(char *desthost)
 {
 	int s, c;
-	struct sockaddr_storage dest_ss;
-	struct sockaddr_storage my_ss;
+	struct in_addr dest_ip;
 
 	CatchChild();
 
 	/* start listening on port 445 locally */
-
-	zero_addr(&my_ss);
-	s = open_socket_in(SOCK_STREAM, 445, 0, &my_ss, True);
+	s = open_socket_in(SOCK_STREAM, 445, 0, 0, True);
 	
 	if (s == -1) {
 		d_printf("bind failed\n");
@@ -224,7 +186,7 @@
 		d_printf("listen failed\n");
 	}
 
-	if (!resolve_name(desthost, &dest_ss, 0x20)) {
+	if (!resolve_name(desthost, &dest_ip, 0x20)) {
 		d_printf("Unable to resolve host %s\n", desthost);
 		exit(1);
 	}
@@ -232,19 +194,19 @@
 	while (1) {
 		fd_set fds;
 		int num;
-		struct sockaddr_storage ss;
-		socklen_t in_addrlen = sizeof(ss);
+		struct sockaddr addr;
+		socklen_t in_addrlen = sizeof(addr);
 		
 		FD_ZERO(&fds);
 		FD_SET(s, &fds);
 
 		num = sys_select_intr(s+1,&fds,NULL,NULL,NULL);
 		if (num > 0) {
-			c = accept(s, (struct sockaddr *)&ss, &in_addrlen);
+			c = accept(s, &addr, &in_addrlen);
 			if (c != -1) {
 				if (fork() == 0) {
 					close(s);
-					filter_child(c, &dest_ss);
+					filter_child(c, dest_ip);
 					exit(0);
 				} else {
 					close(c);
@@ -258,15 +220,12 @@
 int main(int argc, char *argv[])
 {
 	char *desthost;
-	const char *configfile;
-	TALLOC_CTX *frame = talloc_stackframe();
+	pstring configfile;
 
-	load_case_tables();
-
 	setup_logging(argv[0],True);
-
-	configfile = get_dyn_CONFIGFILE();
-
+  
+	pstrcpy(configfile,dyn_CONFIGFILE);
+ 
 	if (argc < 2) {
 		fprintf(stderr,"smbfilter <desthost> <netbiosname>\n");
 		exit(1);
@@ -282,6 +241,5 @@
 	}
 
 	start_filter(desthost);
-	TALLOC_FREE(frame);
 	return 0;
 }

Modified: branches/samba/upstream/source/utils/smbget.c
===================================================================
--- branches/samba/upstream/source/utils/smbget.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/smbget.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #include "includes.h"
 #include "libsmbclient.h"
@@ -27,14 +28,14 @@
 #define OFF_T_FORMAT_CAST long
 #endif
 
-static int columns = 0;
+int columns = 0;
 
-static int debuglevel, update;
+static int _resume, _recursive, debuglevel;
 static char *outputfile;
 
 
-static time_t total_start_time = 0;
-static off_t total_bytes = 0;
+time_t total_start_time = 0;
+off_t total_bytes = 0;
 
 #define SMB_MAXPATHLEN MAXPATHLEN
 
@@ -45,9 +46,9 @@
 /* Number of bytes to read at once */
 #define SMB_DEFAULT_BLOCKSIZE 					64000
 
-static const char *username = NULL, *password = NULL, *workgroup = NULL;
-static int nonprompt = 0, quiet = 0, dots = 0, keep_permissions = 0, verbose = 0, send_stdout = 0;
-static int blocksize = SMB_DEFAULT_BLOCKSIZE;
+const char *username = NULL, *password = NULL, *workgroup = NULL;
+int nonprompt = 0, quiet = 0, dots = 0, keep_permissions = 0, verbose = 0, send_stdout = 0;
+int blocksize = SMB_DEFAULT_BLOCKSIZE;
 
 static int smb_download_file(const char *base, const char *name, int recursive, int resume, char *outfile);
 
@@ -303,26 +304,8 @@
 
 	if(newpath[0] == '/')newpath++;
 	
-	/* Open local file according to the mode */
-	if(update) {
-		/* if it is up-to-date, skip */
-		if(stat(newpath, &localstat) == 0 &&
-				localstat.st_mtime >= remotestat.st_mtime) {
-			if(verbose)
-				printf("%s is up-to-date, skipping\n", newpath);
-			smbc_close(remotehandle);
-			return 0;
-		}
-		/* else open it for writing and truncate if it exists */
-		localhandle = open(newpath, O_CREAT | O_NONBLOCK | O_RDWR | O_TRUNC, 0775);
-		if(localhandle < 0) {
-			fprintf(stderr, "Can't open %s : %s\n", newpath,
-					strerror(errno));
-			smbc_close(remotehandle);
-			return 0;
-		}
-		/* no offset */
-	} else if(!send_stdout) {
+	/* Open local file and, if necessary, resume */
+	if(!send_stdout) {
 		localhandle = open(newpath, O_CREAT | O_NONBLOCK | O_RDWR | (!resume?O_EXCL:0), 0755);
 		if(localhandle < 0) {
 			fprintf(stderr, "Can't open %s: %s\n", newpath, strerror(errno));
@@ -330,12 +313,7 @@
 			return 0;
 		}
 	
-		if (fstat(localhandle, &localstat) != 0) {
-			fprintf(stderr, "Can't fstat %s: %s\n", newpath, strerror(errno));
-			smbc_close(remotehandle);
-			close(localhandle);
-			return 0;
-		}
+		fstat(localhandle, &localstat);
 
 		start_offset = localstat.st_size;
 
@@ -544,15 +522,10 @@
 	int c = 0;
 	const char *file = NULL;
 	char *rcfile = NULL;
-	bool smb_encrypt = false;
-	int resume = 0, recursive = 0;
-	TALLOC_CTX *frame = talloc_stackframe();
 	struct poptOption long_options[] = {
 		{"guest", 'a', POPT_ARG_NONE, NULL, 'a', "Work as user guest" },	
-		{"encrypt", 'e', POPT_ARG_NONE, NULL, 'e', "Encrypt SMB transport (UNIX extended servers only)" },	
-		{"resume", 'r', POPT_ARG_NONE, &resume, 0, "Automatically resume aborted files" },
-		{"update", 'U',  POPT_ARG_NONE, &update, 0, "Download only when remote file is newer than local file or local file is missing"},
-		{"recursive", 'R',  POPT_ARG_NONE, &recursive, 0, "Recursively download files" },
+		{"resume", 'r', POPT_ARG_NONE, &_resume, 0, "Automatically resume aborted files" },
+		{"recursive", 'R',  POPT_ARG_NONE, &_recursive, 0, "Recursively download files" },
 		{"username", 'u', POPT_ARG_STRING, &username, 'u', "Username to use" },
 		{"password", 'p', POPT_ARG_STRING, &password, 'p', "Password to use" },
 		{"workgroup", 'w', POPT_ARG_STRING, &workgroup, 'w', "Workgroup to use (optional)" },
@@ -595,17 +568,10 @@
 		case 'a':
 			username = ""; password = "";
 			break;
-		case 'e':
-			smb_encrypt = true;
-			break;
 		}
 	}
 
-	if((send_stdout || resume || outputfile) && update) {
-		fprintf(stderr, "The -o, -R or -O and -U options can not be used together.\n");
-		return 1;
-	}
-	if((send_stdout || outputfile) && recursive) {
+	if((send_stdout || outputfile) && _recursive) {
 		fprintf(stderr, "The -o or -O and -R options can not be used together.\n");
 		return 1;
 	}
@@ -620,25 +586,18 @@
 		return 1;
 	}
 
-	if (smb_encrypt) {
-		SMBCCTX *smb_ctx = smbc_set_context(NULL);
-		smbc_option_set(smb_ctx,
-			CONST_DISCARD(char *, "smb_encrypt_level"),
-			"require");
-	}
-	
 	columns = get_num_cols();
 
 	total_start_time = time(NULL);
 
 	while ( (file = poptGetArg(pc)) ) {
-		if (!recursive) 
-			return smb_download_file(file, "", recursive, resume, outputfile);
+		if (!_recursive) 
+			return smb_download_file(file, "", _recursive, _resume, outputfile);
 		else 
-			return smb_download_dir(file, "", resume);
+			return smb_download_dir(file, "", _resume);
 	}
 
 	clean_exit();
-	TALLOC_FREE(frame);
+
 	return 0;
 }

Modified: branches/samba/upstream/source/utils/smbpasswd.c
===================================================================
--- branches/samba/upstream/source/utils/smbpasswd.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/smbpasswd.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
  * 
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 3 of the License, or (at your
+ * Free Software Foundation; either version 2 of the License, or (at your
  * option) any later version.
  * 
  * This program is distributed in the hope that it will be useful, but WITHOUT
@@ -14,11 +14,12 @@
  * more details.
  * 
  * You should have received a copy of the GNU General Public License along with
- * this program; if not, see <http://www.gnu.org/licenses/>.  */
+ * this program; if not, write to the Free Software Foundation, Inc., 675
+ * Mass Ave, Cambridge, MA 02139, USA.  */
 
 #include "includes.h"
 
-extern bool AllowDebugChange;
+extern BOOL AllowDebugChange;
 
 /*
  * Next two lines needed for SunOS and don't
@@ -28,8 +29,8 @@
 extern int optind;
 
 /* forced running in root-mode */
-static bool got_username = False;
-static bool stdin_passwd_get = False;
+static BOOL got_username = False;
+static BOOL stdin_passwd_get = False;
 static fstring user_name;
 static char *new_passwd = NULL;
 static const char *remote_machine = NULL;
@@ -83,7 +84,8 @@
 static int process_options(int argc, char **argv, int local_flags)
 {
 	int ch;
-	const char *configfile = get_dyn_CONFIGFILE();
+	pstring configfile;
+	pstrcpy(configfile, dyn_CONFIGFILE);
 
 	local_flags |= LOCAL_SET_PASSWORD;
 
@@ -94,7 +96,7 @@
 	while ((ch = getopt(argc, argv, "c:axdehminjr:sw:R:D:U:LW")) != EOF) {
 		switch(ch) {
 		case 'L':
-#if !defined(NSS_WRAPPER)
+#if !defined(DEVELOPER)
 			if (getuid() != 0) {
 				fprintf(stderr, "smbpasswd -L can only be used by root.\n");
 				exit(1);
@@ -103,7 +105,7 @@
 			local_flags |= LOCAL_AM_ROOT;
 			break;
 		case 'c':
-			configfile = optarg;
+			pstrcpy(configfile,optarg);
 			break;
 		case 'a':
 			local_flags |= LOCAL_ADD_USER;
@@ -168,7 +170,7 @@
 			usage();
 		}
 	}
-
+	
 	argc -= optind;
 	argv += optind;
 
@@ -204,7 +206,7 @@
 /*************************************************************
  Utility function to prompt for new password.
 *************************************************************/
-static char *prompt_for_new_password(bool stdin_get)
+static char *prompt_for_new_password(BOOL stdin_get)
 {
 	char *p;
 	fstring new_pw;
@@ -238,8 +240,8 @@
 				int local_flags)
 {
 	NTSTATUS ret;
-	char *err_str = NULL;
-	char *msg_str = NULL;
+	pstring err_str;
+	pstring msg_str;
 
 	if (remote_mach != NULL) {
 		if (local_flags & (LOCAL_ADD_USER|LOCAL_DELETE_USER|LOCAL_DISABLE_USER|LOCAL_ENABLE_USER|
@@ -248,30 +250,27 @@
 			return NT_STATUS_UNSUCCESSFUL;
 		}
 		ret = remote_password_change(remote_mach, username, 
-					     old_passwd, new_pw, &err_str);
-		if (err_str != NULL)
+					     old_passwd, new_pw, err_str, sizeof(err_str));
+		if(*err_str)
 			fprintf(stderr, "%s", err_str);
-		SAFE_FREE(err_str);
 		return ret;
 	}
 	
 	ret = local_password_change(username, local_flags, new_pw, 
-				     &err_str, &msg_str);
+				     err_str, sizeof(err_str), msg_str, sizeof(msg_str));
 
-	if(msg_str)
+	if(*msg_str)
 		printf("%s", msg_str);
-	if(err_str)
+	if(*err_str)
 		fprintf(stderr, "%s", err_str);
 
-	SAFE_FREE(msg_str);
-	SAFE_FREE(err_str);
 	return ret;
 }
 
 /*******************************************************************
  Store the LDAP admin password in secrets.tdb
  ******************************************************************/
-static bool store_ldap_admin_pw (char* pw)
+static BOOL store_ldap_admin_pw (char* pw)
 {	
 	if (!pw) 
 		return False;
@@ -312,7 +311,7 @@
 	}
 
 	/* Ensure passdb startup(). */
-	if(!initialize_password_db(False, NULL)) {
+	if(!initialize_password_db(False)) {
 		DEBUG(0, ("Failed to open passdb!\n"));
 		exit(1);
 	}
@@ -558,9 +557,7 @@
 **********************************************************/
 int main(int argc, char **argv)
 {	
-	TALLOC_CTX *frame = talloc_stackframe();
 	int local_flags = 0;
-	int ret;
 	
 	AllowDebugChange = False;
 
@@ -597,7 +594,5 @@
 		return process_root(local_flags);
 	} 
 
-	ret = process_nonroot(local_flags);
-	TALLOC_FREE(frame);
-	return ret;
+	return process_nonroot(local_flags);
 }

Modified: branches/samba/upstream/source/utils/smbtree.c
===================================================================
--- branches/samba/upstream/source/utils/smbtree.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/smbtree.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,12 +16,13 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 
-static int use_bcast;
+static BOOL use_bcast;
 
 /* How low can we go? */
 
@@ -32,7 +33,7 @@
 
 struct name_list {
         struct name_list *prev, *next;
-        char *name, *comment;
+        pstring name, comment;
         uint32 server_type;
 };
 
@@ -57,59 +58,44 @@
 
         ZERO_STRUCTP(new_name);
 
-	new_name->name = SMB_STRDUP(machine_name);
-	new_name->comment = SMB_STRDUP(comment);
+        pstrcpy(new_name->name, machine_name);
+        pstrcpy(new_name->comment, comment);
         new_name->server_type = server_type;
 
-	if (!new_name->name || !new_name->comment) {
-		SAFE_FREE(new_name->name);
-		SAFE_FREE(new_name->comment);
-		SAFE_FREE(new_name);
-		return;
-	}
-
         DLIST_ADD(*name_list, new_name);
 }
 
 /****************************************************************************
   display tree of smb workgroups, servers and shares
 ****************************************************************************/
-static bool get_workgroups(struct user_auth_info *user_info)
+static BOOL get_workgroups(struct user_auth_info *user_info)
 {
         struct cli_state *cli;
-        struct sockaddr_storage server_ss;
-	TALLOC_CTX *ctx = talloc_tos();
-	char *master_workgroup = NULL;
+        struct in_addr server_ip;
+	pstring master_workgroup;
 
         /* Try to connect to a #1d name of our current workgroup.  If that
            doesn't work broadcast for a master browser and then jump off
            that workgroup. */
 
-	master_workgroup = talloc_strdup(ctx, lp_workgroup());
-	if (!master_workgroup) {
-		return false;
-	}
+	pstrcpy(master_workgroup, lp_workgroup());
 
-        if (!use_bcast && !find_master_ip(lp_workgroup(), &server_ss)) {
+        if (!use_bcast && !find_master_ip(lp_workgroup(), &server_ip)) {
                 DEBUG(4, ("Unable to find master browser for workgroup %s, falling back to broadcast\n", 
 			  master_workgroup));
 				use_bcast = True;
 		} else if(!use_bcast) {
-			char addr[INET6_ADDRSTRLEN];
-			print_sockaddr(addr, sizeof(addr), &server_ss);
-			if (!(cli = get_ipc_connect(addr, &server_ss, user_info)))
+        	if (!(cli = get_ipc_connect(inet_ntoa(server_ip), &server_ip, user_info)))
 				return False;
 		}
-
-		if (!(cli = get_ipc_connect_master_ip_bcast(talloc_tos(),
-							user_info,
-							&master_workgroup))) {
+		
+		if (!(cli = get_ipc_connect_master_ip_bcast(master_workgroup, user_info))) {
 			DEBUG(4, ("Unable to find master browser by "
 				  "broadcast\n"));
 			return False;
         }
 
-        if (!cli_NetServerEnum(cli, master_workgroup,
+        if (!cli_NetServerEnum(cli, master_workgroup, 
                                SV_TYPE_DOMAIN_ENUM, add_name, &workgroups))
                 return False;
 
@@ -118,44 +104,40 @@
 
 /* Retrieve the list of servers for a given workgroup */
 
-static bool get_servers(char *workgroup, struct user_auth_info *user_info)
+static BOOL get_servers(char *workgroup, struct user_auth_info *user_info)
 {
         struct cli_state *cli;
-        struct sockaddr_storage server_ss;
-	char addr[INET6_ADDRSTRLEN];
+        struct in_addr server_ip;
 
         /* Open an IPC$ connection to the master browser for the workgroup */
 
-        if (!find_master_ip(workgroup, &server_ss)) {
+        if (!find_master_ip(workgroup, &server_ip)) {
                 DEBUG(4, ("Cannot find master browser for workgroup %s\n",
                           workgroup));
                 return False;
         }
 
-	print_sockaddr(addr, sizeof(addr), &server_ss);
-        if (!(cli = get_ipc_connect(addr, &server_ss, user_info)))
+        if (!(cli = get_ipc_connect(inet_ntoa(server_ip), &server_ip, user_info)))
                 return False;
 
-        if (!cli_NetServerEnum(cli, workgroup, SV_TYPE_ALL, add_name,
+        if (!cli_NetServerEnum(cli, workgroup, SV_TYPE_ALL, add_name, 
                                &servers))
                 return False;
 
         return True;
 }
 
-static bool get_rpc_shares(struct cli_state *cli,
+static BOOL get_rpc_shares(struct cli_state *cli, 
 			   void (*fn)(const char *, uint32, const char *, void *),
 			   void *state)
 {
 	NTSTATUS status;
 	struct rpc_pipe_client *pipe_hnd;
 	TALLOC_CTX *mem_ctx;
+	ENUM_HND enum_hnd;
 	WERROR werr;
-	struct srvsvc_NetShareInfoCtr info_ctr;
-	struct srvsvc_NetShareCtr1 ctr1;
+	SRV_SHARE_INFO_CTR ctr;
 	int i;
-	uint32_t resume_handle = 0;
-	uint32_t total_entries = 0;
 
 	mem_ctx = talloc_new(NULL);
 	if (mem_ctx == NULL) {
@@ -163,6 +145,8 @@
 		return False;
 	}
 
+	init_enum_hnd(&enum_hnd, 0);
+
 	pipe_hnd = cli_rpc_pipe_open_noauth(cli, PI_SRVSVC, &status);
 
 	if (pipe_hnd == NULL) {
@@ -172,29 +156,23 @@
 		return False;
 	}
 
-	ZERO_STRUCT(info_ctr);
-	ZERO_STRUCT(ctr1);
+	werr = rpccli_srvsvc_net_share_enum(pipe_hnd, mem_ctx, 1, &ctr,
+					    0xffffffff, &enum_hnd);
 
-	info_ctr.level = 1;
-	info_ctr.ctr.ctr1 = &ctr1;
-
-	status = rpccli_srvsvc_NetShareEnumAll(pipe_hnd, mem_ctx,
-					       pipe_hnd->cli->desthost,
-					       &info_ctr,
-					       0xffffffff,
-					       &total_entries,
-					       &resume_handle,
-					       &werr);
-
-	if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(werr)) {
+	if (!W_ERROR_IS_OK(werr)) {
 		TALLOC_FREE(mem_ctx);
 		cli_rpc_pipe_close(pipe_hnd);
 		return False;
 	}
 
-	for (i=0; i<total_entries; i++) {
-		struct srvsvc_NetShareInfo1 info = info_ctr.ctr.ctr1->array[i];
-		fn(info.name, info.type, info.comment, state);
+	for (i=0; i<ctr.num_entries; i++) {
+		SRV_SHARE_INFO_1 *info = &ctr.share.info1[i];
+		char *name, *comment;
+		name = rpcstr_pull_unistr2_talloc(
+			mem_ctx, &info->info_1_str.uni_netname);
+		comment = rpcstr_pull_unistr2_talloc(
+			mem_ctx, &info->info_1_str.uni_remark);
+		fn(name, info->info_1.type, comment, state);
 	}
 
 	TALLOC_FREE(mem_ctx);
@@ -203,7 +181,7 @@
 }
 
 
-static bool get_shares(char *server_name, struct user_auth_info *user_info)
+static BOOL get_shares(char *server_name, struct user_auth_info *user_info)
 {
         struct cli_state *cli;
 
@@ -212,14 +190,14 @@
 
 	if (get_rpc_shares(cli, add_name, &shares))
 		return True;
-
+	
         if (!cli_RNetShareEnum(cli, add_name, &shares))
                 return False;
 
         return True;
 }
 
-static bool print_tree(struct user_auth_info *user_info)
+static BOOL print_tree(struct user_auth_info *user_info)
 {
         struct name_list *wg, *sv, *sh;
 
@@ -270,8 +248,6 @@
 ****************************************************************************/
  int main(int argc,char *argv[])
 {
-	TALLOC_CTX *frame = talloc_stackframe();
-	struct user_auth_info local_auth_info;
 	struct poptOption long_options[] = {
 		POPT_AUTOHELP
 		{ "broadcast", 'b', POPT_ARG_VAL, &use_bcast, True, "Use broadcast instead of using the master browser" },
@@ -282,7 +258,7 @@
 		POPT_TABLEEND
 	};
 	poptContext pc;
-
+	
 	/* Initialise samba stuff */
 	load_case_tables();
 
@@ -292,40 +268,28 @@
 
 	setup_logging(argv[0],True);
 
-	pc = poptGetContext("smbtree", argc, (const char **)argv, long_options,
+	pc = poptGetContext("smbtree", argc, (const char **)argv, long_options, 
 						POPT_CONTEXT_KEEP_FIRST);
 	while(poptGetNextOpt(pc) != -1);
 	poptFreeContext(pc);
 
-	lp_load(get_dyn_CONFIGFILE(),True,False,False,True);
+	lp_load(dyn_CONFIGFILE,True,False,False,True);
 	load_interfaces();
 
 	/* Parse command line args */
 
-	if (get_cmdline_auth_info_use_machine_account() &&
-	    !set_cmdline_auth_info_machine_account_creds()) {
-		TALLOC_FREE(frame);
-		return 1;
-	}
-
-	if (!get_cmdline_auth_info_got_pass()) {
+	if (!cmdline_auth_info.got_pass) {
 		char *pass = getpass("Password: ");
 		if (pass) {
-			set_cmdline_auth_info_password(pass);
+			pstrcpy(cmdline_auth_info.password, pass);
 		}
+        cmdline_auth_info.got_pass = True;
 	}
 
 	/* Now do our stuff */
 
-	if (!get_cmdline_auth_info_copy(&local_auth_info)) {
-		return 1;
-	}
-
-        if (!print_tree(&local_auth_info)) {
-		TALLOC_FREE(frame);
+        if (!print_tree(&cmdline_auth_info))
                 return 1;
-	}
 
-	TALLOC_FREE(frame);
 	return 0;
 }

Modified: branches/samba/upstream/source/utils/smbw_sample.c
===================================================================
--- branches/samba/upstream/source/utils/smbw_sample.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/smbw_sample.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -32,9 +32,8 @@
 	extern char *optarg;
 	extern int optind;
 	char *path;
-	TALLOC_CTX *frame = talloc_stackframe();
 
-	lp_load(get_dyn_CONFIGFILE(),1,0,0,1);
+	lp_load(dyn_CONFIGFILE,1,0,0,1);
 	smbw_setup_shared();
 
 	while ((opt = getopt(argc, argv, "W:U:R:d:P:l:hL:")) != EOF) {
@@ -91,6 +90,5 @@
 		printf("%s\n", dent->d_name);
 	}
 	smbw_closedir(dir);
-	TALLOC_FREE(frame);
 	return 0;
 }

Modified: branches/samba/upstream/source/utils/status.c
===================================================================
--- branches/samba/upstream/source/utils/status.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/status.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
    Revision History:
 
@@ -34,21 +35,21 @@
 
 #define SMB_MAXPIDS		2048
 static uid_t 		Ucrit_uid = 0;               /* added by OH */
-static struct server_id	Ucrit_pid[SMB_MAXPIDS];  /* Ugly !!! */   /* added by OH */
+static pid_t		Ucrit_pid[SMB_MAXPIDS];  /* Ugly !!! */   /* added by OH */
 static int		Ucrit_MaxPid=0;                    /* added by OH */
 static unsigned int	Ucrit_IsActive = 0;                /* added by OH */
 
-static bool verbose, brief;
-static bool shares_only;            /* Added by RJS */
-static bool locks_only;            /* Added by RJS */
-static bool processes_only;
-static bool show_brl;
-static bool numeric_only;
+static int verbose, brief;
+static int            shares_only = 0;            /* Added by RJS */
+static int            locks_only  = 0;            /* Added by RJS */
+static BOOL processes_only=False;
+static int show_brl;
+static BOOL numeric_only = False;
 
 const char *username = NULL;
 
-extern bool status_profile_dump(bool be_verbose);
-extern bool status_profile_rates(bool be_verbose);
+extern BOOL status_profile_dump(BOOL be_verbose);
+extern BOOL status_profile_rates(BOOL be_verbose);
 
 /* added by OH */
 static void Ucrit_addUid(uid_t uid)
@@ -68,7 +69,7 @@
 	return 0;
 }
 
-static unsigned int Ucrit_checkPid(struct server_id pid)
+static unsigned int Ucrit_checkPid(pid_t pid)
 {
 	int i;
 	
@@ -76,14 +77,14 @@
 		return 1;
 	
 	for (i=0;i<Ucrit_MaxPid;i++) {
-		if (cluster_id_equal(&pid, &Ucrit_pid[i])) 
+		if( pid == Ucrit_pid[i] ) 
 			return 1;
 	}
 	
 	return 0;
 }
 
-static bool Ucrit_addPid( struct server_id pid )
+static BOOL Ucrit_addPid( pid_t pid )
 {
 	if ( !Ucrit_IsActive )
 		return True;
@@ -111,10 +112,6 @@
 		return;
 	}
 
-	if (!process_exists(e->pid)) {
-		return;
-	}
-
 	if (count==0) {
 		d_printf("Locked files:\n");
 		d_printf("Pid          Uid        DenyMode   Access      R/W        Oplock           SharePath   Name   Time\n");
@@ -122,7 +119,7 @@
 	}
 	count++;
 
-	if (Ucrit_checkPid(e->pid)) {
+	if (Ucrit_checkPid(procid_to_pid(&e->pid))) {
 		d_printf("%-11s  ",procid_str_static(&e->pid));
 		d_printf("%-9u  ", (unsigned int)e->uid);
 		switch (map_share_mode_to_deny_mode(e->share_access,
@@ -169,90 +166,63 @@
 	}
 }
 
-static void print_brl(struct file_id id,
-			struct server_id pid, 
+static void print_brl(SMB_DEV_T dev,
+			SMB_INO_T ino,
+			struct process_id pid, 
 			enum brl_type lock_type,
 			enum brl_flavour lock_flav,
 			br_off start,
-			br_off size,
-			void *private_data)
+			br_off size)
 {
 	static int count;
-	int i;
-	static const struct {
-		enum brl_type lock_type;
-		const char *desc;
-	} lock_types[] = {
-		{ READ_LOCK, "R" },
-		{ WRITE_LOCK, "W" },
-		{ PENDING_READ_LOCK, "PR" },
-		{ PENDING_WRITE_LOCK, "PW" },
-		{ UNLOCK_LOCK, "U" }
-	};
-	const char *desc="X";
-	const char *sharepath = "";
-	const char *fname = "";
-	struct share_mode_lock *share_mode;
-
 	if (count==0) {
 		d_printf("Byte range locks:\n");
-		d_printf("Pid        dev:inode       R/W  start     size      SharePath               Name\n");
-		d_printf("--------------------------------------------------------------------------------\n");
+		d_printf("   Pid     dev:inode  R/W      start        size\n");
+		d_printf("------------------------------------------------\n");
 	}
 	count++;
 
-	share_mode = fetch_share_mode_unlocked(NULL, id, "__unspecified__", "__unspecified__");
-	if (share_mode) {
-		sharepath = share_mode->servicepath;
-		fname = share_mode->filename;
-	}
+	d_printf("%8s   %05x:%05x    %s  %9.0f   %9.0f\n", 
+	       procid_str_static(&pid), (int)dev, (int)ino, 
+	       lock_type==READ_LOCK?"R":"W",
+	       (double)start, (double)size);
+}
 
-	for (i=0;i<ARRAY_SIZE(lock_types);i++) {
-		if (lock_type == lock_types[i].lock_type) {
-			desc = lock_types[i].desc;
-		}
-	}
+static int traverse_fn1(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *state)
+{
+	struct connections_data crec;
 
-	d_printf("%-10s %-15s %-4s %-9.0f %-9.0f %-24s %-24s\n", 
-		 procid_str_static(&pid), file_id_string_tos(&id),
-		 desc,
-		 (double)start, (double)size,
-		 sharepath, fname);
+	if (dbuf.dsize != sizeof(crec))
+		return 0;
 
-	TALLOC_FREE(share_mode);
-}
+	memcpy(&crec, dbuf.dptr, sizeof(crec));
 
-static int traverse_fn1(struct db_record *rec,
-			const struct connections_key *key,
-			const struct connections_data *crec,
-			void *state)
-{
-	if (crec->cnum == -1)
+	if (crec.cnum == -1)
 		return 0;
 
-	if (!process_exists(crec->pid) || !Ucrit_checkUid(crec->uid)) {
+	if (!process_exists(crec.pid) || !Ucrit_checkUid(crec.uid)) {
 		return 0;
 	}
 
 	d_printf("%-10s   %s   %-12s  %s",
-		 crec->servicename,procid_str_static(&crec->pid),
-		 crec->machine,
-		 time_to_asc(crec->start));
+	       crec.servicename,procid_str_static(&crec.pid),
+	       crec.machine,
+	       time_to_asc(crec.start));
 
 	return 0;
 }
 
-static int traverse_sessionid(struct db_record *db, void *state)
+static int traverse_sessionid(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *state)
 {
 	struct sessionid sessionid;
 	fstring uid_str, gid_str;
 
-	if (db->value.dsize != sizeof(sessionid))
+	if (dbuf.dsize != sizeof(sessionid))
 		return 0;
 
-	memcpy(&sessionid, db->value.dptr, sizeof(sessionid));
+	memcpy(&sessionid, dbuf.dptr, sizeof(sessionid));
 
-	if (!process_exists(sessionid.pid) || !Ucrit_checkUid(sessionid.uid)) {
+	if (!process_exists_by_pid(sessionid.pid) || !Ucrit_checkUid(sessionid.uid)) {
 		return 0;
 	}
 
@@ -261,8 +231,8 @@
 	fstr_sprintf(uid_str, "%d", sessionid.uid);
 	fstr_sprintf(gid_str, "%d", sessionid.gid);
 
-	d_printf("%-7s   %-12s  %-12s  %-12s (%s)\n",
-		 procid_str_static(&sessionid.pid),
+	d_printf("%5d   %-12s  %-12s  %-12s (%s)\n",
+		 (int)sessionid.pid,
 		 numeric_only ? uid_str : uidtoname(sessionid.uid),
 		 numeric_only ? gid_str : gidtoname(sessionid.gid), 
 		 sessionid.remote_machine, sessionid.hostname);
@@ -277,26 +247,24 @@
 {
 	int c;
 	int profile_only = 0;
-	bool show_processes, show_locks, show_shares;
+	TDB_CONTEXT *tdb;
+	BOOL show_processes, show_locks, show_shares;
 	poptContext pc;
 	struct poptOption long_options[] = {
 		POPT_AUTOHELP
-		{"processes",	'p', POPT_ARG_NONE,	NULL, 'p', "Show processes only" },
-		{"verbose",	'v', POPT_ARG_NONE, 	NULL, 'v', "Be verbose" },
-		{"locks",	'L', POPT_ARG_NONE,	NULL, 'L', "Show locks only" },
-		{"shares",	'S', POPT_ARG_NONE,	NULL, 'S', "Show shares only" },
+		{"processes",	'p', POPT_ARG_NONE,	&processes_only, 'p', "Show processes only" },
+		{"verbose",	'v', POPT_ARG_NONE, &verbose, 'v', "Be verbose" },
+		{"locks",	'L', POPT_ARG_NONE,	&locks_only, 'L', "Show locks only" },
+		{"shares",	'S', POPT_ARG_NONE,	&shares_only, 'S', "Show shares only" },
 		{"user", 	'u', POPT_ARG_STRING,	&username, 'u', "Switch to user" },
-		{"brief",	'b', POPT_ARG_NONE, 	NULL, 'b', "Be brief" },
+		{"brief",	'b', POPT_ARG_NONE, 	&brief, 'b', "Be brief" },
 		{"profile",     'P', POPT_ARG_NONE, NULL, 'P', "Do profiling" },
 		{"profile-rates", 'R', POPT_ARG_NONE, NULL, 'R', "Show call rates" },
-		{"byterange",	'B', POPT_ARG_NONE,	NULL, 'B', "Include byte range locks"},
-		{"numeric",	'n', POPT_ARG_NONE,	NULL, 'n', "Numeric uid/gid"},
+		{"byterange",	'B', POPT_ARG_NONE,	&show_brl, 'B', "Include byte range locks"},
+		{"numeric",	'n', POPT_ARG_NONE,	&numeric_only, 'n', "Numeric uid/gid"},
 		POPT_COMMON_SAMBA
 		POPT_TABLEEND
 	};
-	TALLOC_CTX *frame = talloc_stackframe();
-	int ret = 0;
-	struct messaging_context *msg_ctx;
 
 	sec_init();
 	load_case_tables();
@@ -307,8 +275,7 @@
 	
 	if (getuid() != geteuid()) {
 		d_printf("smbstatus should not be run setuid\n");
-		ret = 1;
-		goto done;
+		return(1);
 	}
 
 	pc = poptGetContext(NULL, argc, (const char **) argv, long_options, 
@@ -316,34 +283,12 @@
 	
 	while ((c = poptGetNextOpt(pc)) != -1) {
 		switch (c) {
-		case 'p':
-			processes_only = true;
-			break;
-		case 'v':
-			verbose = true;
-			break;
-		case 'L':
-			locks_only = true;
-			break;
-		case 'S':
-			shares_only = true;
-			break;
-		case 'b':
-			brief = true;
-			break;
-		case 'u':
+		case 'u':                                      
 			Ucrit_addUid(nametouid(poptGetOptArg(pc)));
 			break;
 		case 'P':
 		case 'R':
 			profile_only = c;
-			break;
-		case 'B':
-			show_brl = true;
-			break;
-		case 'n':
-			numeric_only = true;
-			break;
 		}
 	}
 
@@ -357,33 +302,14 @@
 		Ucrit_addUid( nametouid(username) );
 
 	if (verbose) {
-		d_printf("using configfile = %s\n", get_dyn_CONFIGFILE());
+		d_printf("using configfile = %s\n", dyn_CONFIGFILE);
 	}
 
-	if (!lp_load_initial_only(get_dyn_CONFIGFILE())) {
-		fprintf(stderr, "Can't load %s - run testparm to debug it\n",
-			get_dyn_CONFIGFILE());
-		ret = -1;
-		goto done;
+	if (!lp_load(dyn_CONFIGFILE,False,False,False,True)) {
+		fprintf(stderr, "Can't load %s - run testparm to debug it\n", dyn_CONFIGFILE);
+		return (-1);
 	}
 
-	/*
-	 * This implicitly initializes the global ctdbd connection, usable by
-	 * the db_open() calls further down.
-	 */
-
-	msg_ctx = messaging_init(NULL, procid_self(),
-				 event_context_init(NULL));
-
-	db_tdb2_setup_messaging(msg_ctx, true);
-
-	if (!lp_load(get_dyn_CONFIGFILE(),False,False,False,True)) {
-		fprintf(stderr, "Can't load %s - run testparm to debug it\n",
-			get_dyn_CONFIGFILE());
-		ret = -1;
-		goto done;
-	}
-
 	switch (profile_only) {
 		case 'P':
 			/* Dump profile data */
@@ -396,86 +322,82 @@
 	}
 
 	if ( show_processes ) {
-		struct db_context *db;
-		db = db_open(NULL, lock_path("sessionid.tdb"), 0,
-			     TDB_CLEAR_IF_FIRST, O_RDONLY, 0644);
-		if (!db) {
+		tdb = tdb_open_log(lock_path("sessionid.tdb"), 0, TDB_DEFAULT, O_RDONLY, 0);
+		if (!tdb) {
 			d_printf("sessionid.tdb not initialised\n");
 		} else {
 			d_printf("\nSamba version %s\n",SAMBA_VERSION_STRING);
 			d_printf("PID     Username      Group         Machine                        \n");
 			d_printf("-------------------------------------------------------------------\n");
 
-			db->traverse_read(db, traverse_sessionid, NULL);
-			TALLOC_FREE(db);
+			tdb_traverse(tdb, traverse_sessionid, NULL);
+			tdb_close(tdb);
 		}
 
-		if (processes_only) {
-			goto done;
-		}
+		if (processes_only) 
+			exit(0);	
 	}
   
 	if ( show_shares ) {
-		if (verbose) {
-			d_printf("Opened %s\n", lock_path("connections.tdb"));
-		}
+		tdb = tdb_open_log(lock_path("connections.tdb"), 0, TDB_DEFAULT, O_RDONLY, 0);
+		if (!tdb) {
+			d_printf("%s not initialised\n", lock_path("connections.tdb"));
+			d_printf("This is normal if an SMB client has never connected to your server.\n");
+		}  else  {
+			if (verbose) {
+				d_printf("Opened %s\n", lock_path("connections.tdb"));
+			}
 
-		if (brief) {
-			goto done;
-		}
+			if (brief) 
+				exit(0);
 		
-		d_printf("\nService      pid     machine       Connected at\n");
-		d_printf("-------------------------------------------------------\n");
+			d_printf("\nService      pid     machine       Connected at\n");
+			d_printf("-------------------------------------------------------\n");
 	
-		connections_forall(traverse_fn1, NULL);
+			tdb_traverse(tdb, traverse_fn1, NULL);
+			tdb_close(tdb);
 
-		d_printf("\n");
-
-		if ( shares_only ) {
-			goto done;
+			d_printf("\n");
 		}
+
+		if ( shares_only )
+			exit(0);
 	}
 
 	if ( show_locks ) {
-		int result;
-		struct db_context *db;
-		db = db_open(NULL, lock_path("locking.tdb"), 0,
-			     TDB_CLEAR_IF_FIRST, O_RDONLY, 0);
+		int ret;
 
-		if (!db) {
-			d_printf("%s not initialised\n",
-				 lock_path("locking.tdb"));
-			d_printf("This is normal if an SMB client has never "
-				 "connected to your server.\n");
+		tdb = tdb_open_log(lock_path("locking.tdb"), 0, TDB_DEFAULT, O_RDONLY, 0);
+
+		if (!tdb) {
+			d_printf("%s not initialised\n", lock_path("locking.tdb"));
+			d_printf("This is normal if an SMB client has never connected to your server.\n");
 			exit(0);
 		} else {
-			TALLOC_FREE(db);
+			tdb_close(tdb);
 		}
 
-		if (!locking_init_readonly()) {
+		if (!locking_init(1)) {
 			d_printf("Can't initialise locking module - exiting\n");
-			ret = 1;
-			goto done;
+			exit(1);
 		}
 		
-		result = share_mode_forall(print_share_mode, NULL);
+		ret = share_mode_forall(print_share_mode, NULL);
 
-		if (result == 0) {
+		if (ret == 0) {
 			d_printf("No locked files\n");
-		} else if (result == -1) {
+		} else if (ret == -1) {
 			d_printf("locked file list truncated\n");
 		}
 		
 		d_printf("\n");
 
 		if (show_brl) {
-			brl_forall(print_brl, NULL);
+			brl_forall(print_brl);
 		}
 		
 		locking_end();
 	}
 
-done:
-	TALLOC_FREE(frame);
-	return ret;
+	return (0);
 }

Modified: branches/samba/upstream/source/utils/status_profile.c
===================================================================
--- branches/samba/upstream/source/utils/status_profile.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/status_profile.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
+ * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
@@ -15,13 +15,14 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include "includes.h"
 
-bool status_profile_dump(bool be_verbose);
-bool status_profile_rates(bool be_verbose);
+BOOL status_profile_dump(BOOL be_verbose);
+BOOL status_profile_rates(BOOL be_verbose);
 
 #ifdef WITH_PROFILE
 static void profile_separator(const char * title)
@@ -43,10 +44,10 @@
 /*******************************************************************
  dump the elements of the profile structure
   ******************************************************************/
-bool status_profile_dump(bool verbose)
+BOOL status_profile_dump(BOOL verbose)
 {
 #ifdef WITH_PROFILE
-	if (!profile_setup(NULL, True)) {
+	if (!profile_setup(True)) {
 		fprintf(stderr,"Failed to initialise profile memory\n");
 		return False;
 	}
@@ -471,7 +472,7 @@
 static struct profile_stats	sample_data[2];
 static SMB_BIG_UINT		sample_time[2];
 
-bool status_profile_rates(bool verbose)
+BOOL status_profile_rates(BOOL verbose)
 {
 	SMB_BIG_UINT remain_usec;
 	SMB_BIG_UINT next_usec;
@@ -486,7 +487,7 @@
 		    usec_to_sec(sample_interval_usec));
 	}
 
-	if (!profile_setup(NULL, True)) {
+	if (!profile_setup(True)) {
 		fprintf(stderr,"Failed to initialise profile memory\n");
 		return False;
 	}
@@ -533,7 +534,7 @@
 
 #else /* WITH_PROFILE */
 
-bool status_profile_rates(bool verbose)
+BOOL status_profile_rates(BOOL verbose)
 {
 	fprintf(stderr, "Profile data unavailable\n");
 	return False;

Modified: branches/samba/upstream/source/utils/testparm.c
===================================================================
--- branches/samba/upstream/source/utils/testparm.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/utils/testparm.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /*
@@ -33,7 +34,7 @@
 
 #include "includes.h"
 
-extern bool AllowDebugChange;
+extern BOOL AllowDebugChange;
 
 /***********************************************
  Here we do a set of 'hard coded' checks for bad
@@ -82,19 +83,18 @@
 	 */
 
 	if((lp_security() == SEC_SERVER || lp_security() >= SEC_DOMAIN) && !lp_passwordserver()) {
-		const char *sec_setting;
+		pstring sec_setting;
 		if(lp_security() == SEC_SERVER)
-			sec_setting = "server";
+			pstrcpy(sec_setting, "server");
 		else if(lp_security() == SEC_DOMAIN)
-			sec_setting = "domain";
-		else
-			sec_setting = "";
+			pstrcpy(sec_setting, "domain");
 
 		fprintf(stderr, "ERROR: The setting 'security=%s' requires the 'password server' parameter be set \
 to a valid password server.\n", sec_setting );
 		ret = 1;
 	}
 
+	
 	/*
 	 * Password chat sanity checks.
 	 */
@@ -109,29 +109,28 @@
 		if (!lp_pam_password_change()) {
 #endif
 
-			if((lp_passwd_program() == NULL) ||
-			   (strlen(lp_passwd_program()) == 0))
-			{
+			if(lp_passwd_program() == NULL) {
 				fprintf( stderr, "ERROR: the 'unix password sync' parameter is set and there is no valid 'passwd program' \
 parameter.\n" );
 				ret = 1;
 			} else {
-				const char *passwd_prog;
-				char *truncated_prog = NULL;
+				pstring passwd_prog;
+				pstring truncated_prog;
 				const char *p;
 
-				passwd_prog = lp_passwd_program();
+				pstrcpy( passwd_prog, lp_passwd_program());
 				p = passwd_prog;
-				next_token_talloc(talloc_tos(),
-						&p,
-						&truncated_prog, NULL);
-				if (truncated_prog && access(truncated_prog, F_OK) == -1) {
+				*truncated_prog = '\0';
+				next_token(&p, truncated_prog, NULL, sizeof(pstring));
+
+				if(access(truncated_prog, F_OK) == -1) {
 					fprintf(stderr, "ERROR: the 'unix password sync' parameter is set and the 'passwd program' (%s) \
 cannot be executed (error was %s).\n", truncated_prog, strerror(errno) );
 					ret = 1;
 				}
-			}
 
+             }
+
 #ifdef WITH_PAM
 		}
 #endif
@@ -140,18 +139,13 @@
 			fprintf(stderr, "ERROR: the 'unix password sync' parameter is set and there is no valid 'passwd chat' \
 parameter.\n");
 			ret = 1;
+		} else 
+		/* check if there's a %u parameter present */
+		if(strstr_m(lp_passwd_program(), "%u") == NULL) {
+			fprintf(stderr, "ERROR: the 'passwd program' (%s) requires a '%%u' parameter.\n", lp_passwd_program());
+			ret = 1;
 		}
 
-		if ((lp_passwd_program() != NULL) &&
-		    (strlen(lp_passwd_program()) > 0))
-		{
-			/* check if there's a %u parameter present */
-			if(strstr_m(lp_passwd_program(), "%u") == NULL) {
-				fprintf(stderr, "ERROR: the 'passwd program' (%s) requires a '%%u' parameter.\n", lp_passwd_program());
-				ret = 1;
-			}
-		}
-
 		/*
 		 * Check that we have a valid script and that it hasn't
 		 * been written to expect the old password.
@@ -194,20 +188,16 @@
 	if (!lp_passdb_backend()) {
 		fprintf(stderr,"ERROR: passdb backend must have a value or be left out\n");
 	}
-	
-	if (lp_os_level() > 255) {
-		fprintf(stderr,"WARNING: Maximum value for 'os level' is 255!\n");	
-	}
 
 	return ret;
 }   
 
  int main(int argc, const char *argv[])
 {
-	const char *config_file = get_dyn_CONFIGFILE();
+	const char *config_file = dyn_CONFIGFILE;
 	int s;
-	static int silent_mode = False;
-	static int show_all_parameters = False;
+	static BOOL silent_mode = False;
+	static BOOL show_all_parameters = False;
 	int ret = 0;
 	poptContext pc;
 	static const char *term_code = "";
@@ -231,8 +221,6 @@
 		POPT_TABLEEND
 	};
 
-	TALLOC_CTX *frame = talloc_stackframe();
-
 	load_case_tables();
 
 	pc = poptGetContext(NULL, argc, argv, long_options, 
@@ -363,7 +351,7 @@
 			getc(stdin);
 		}
 		if (parameter_name || section_name) {
-			bool isGlobal = False;
+			BOOL isGlobal = False;
 			s = GLOBAL_SECTION_SNUM;
 
 			if (!section_name) {
@@ -408,7 +396,6 @@
 			}
 		}
 	}
-	TALLOC_FREE(frame);
 	return(ret);
 }
 

Modified: branches/samba/upstream/source/web/cgi.c
===================================================================
--- branches/samba/upstream/source/web/cgi.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/web/cgi.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 
@@ -42,8 +43,8 @@
 static const char *baseurl;
 static char *pathinfo;
 static char *C_user;
-static bool inetd_server;
-static bool got_request;
+static BOOL inetd_server;
+static BOOL got_request;
 
 static char *grab_line(FILE *f, int *cl)
 {
@@ -164,9 +165,7 @@
 	open("/dev/null", O_RDWR);
 
 	if ((s=query_string) || (s=getenv("QUERY_STRING"))) {
-		char *saveptr;
-		for (tok=strtok_r(s, "&;", &saveptr); tok;
-		     tok=strtok_r(NULL, "&;", &saveptr)) {
+		for (tok=strtok(s,"&;");tok;tok=strtok(NULL,"&;")) {
 			p = strchr_m(tok,'=');
 			if (!p) continue;
 			
@@ -175,7 +174,7 @@
 			variables[num_variables].name = SMB_STRDUP(tok);
 			variables[num_variables].value = SMB_STRDUP(p+1);
 
-			if (!variables[num_variables].name ||
+			if (!variables[num_variables].name || 
 			    !variables[num_variables].value)
 				continue;
 
@@ -188,36 +187,32 @@
                         printf("<!== Commandline var %s has value \"%s\"  ==>\n",
                                variables[num_variables].name,
                                variables[num_variables].value);
-#endif
+#endif						
 			num_variables++;
 			if (num_variables == MAX_VARIABLES) break;
 		}
 
 	}
 #ifdef DEBUG_COMMENTS
-        printf("<!== End dump in cgi_load_variables() ==>\n");
+        printf("<!== End dump in cgi_load_variables() ==>\n");   
 #endif
 
 	/* variables from the client are in UTF-8 - convert them
 	   to our internal unix charset before use */
 	for (i=0;i<num_variables;i++) {
-		TALLOC_CTX *frame = talloc_stackframe();
-		char *dest = NULL;
-		size_t dest_len;
+		pstring dest;
 
-		convert_string_allocate(frame, CH_UTF8, CH_UNIX,
-			       variables[i].name, strlen(variables[i].name),
-			       &dest, &dest_len, True);
-		SAFE_FREE(variables[i].name);
-		variables[i].name = SMB_STRDUP(dest ? dest : "");
+		convert_string(CH_UTF8, CH_UNIX, 
+			       variables[i].name, -1, 
+			       dest, sizeof(dest), True);
+		free(variables[i].name);
+		variables[i].name = SMB_STRDUP(dest);
 
-		dest = NULL;
-		convert_string_allocate(frame, CH_UTF8, CH_UNIX,
-			       variables[i].value, strlen(variables[i].value),
-			       &dest, &dest_len, True);
-		SAFE_FREE(variables[i].value);
-		variables[i].value = SMB_STRDUP(dest ? dest : "");
-		TALLOC_FREE(frame);
+		convert_string(CH_UTF8, CH_UNIX, 
+			       variables[i].value, -1,
+			       dest, sizeof(dest), True);
+		free(variables[i].value);
+		variables[i].value = SMB_STRDUP(dest);
 	}
 }
 
@@ -225,7 +220,7 @@
 /***************************************************************************
   find a variable passed via CGI
   Doesn't quite do what you think in the case of POST text variables, because
-  if they exist they might have a value of "" or even " ", depending on the
+  if they exist they might have a value of "" or even " ", depending on the 
   browser. Also doesn't allow for variables[] containing multiple variables
   with the same name and the same or different values.
   ***************************************************************************/
@@ -334,7 +329,7 @@
 /***************************************************************************
 handle a http authentication line
   ***************************************************************************/
-static bool cgi_handle_authorization(char *line)
+static BOOL cgi_handle_authorization(char *line)
 {
 	char *p;
 	fstring user, user_pass;
@@ -405,7 +400,7 @@
 /***************************************************************************
 is this root?
   ***************************************************************************/
-bool am_root(void)
+BOOL am_root(void)
 {
 	if (geteuid() == 0) {
 		return( True);
@@ -515,7 +510,7 @@
  **/
 void cgi_setup(const char *rootdir, int auth_required)
 {
-	bool authenticated = False;
+	BOOL authenticated = False;
 	char line[1024];
 	char *url=NULL;
 	char *p;
@@ -639,7 +634,7 @@
 /***************************************************************************
 return the hostname of the client
   ***************************************************************************/
-const char *cgi_remote_host(void)
+char *cgi_remote_host(void)
 {
 	if (inetd_server) {
 		return get_peer_name(1,False);
@@ -650,11 +645,10 @@
 /***************************************************************************
 return the hostname of the client
   ***************************************************************************/
-const char *cgi_remote_addr(void)
+char *cgi_remote_addr(void)
 {
 	if (inetd_server) {
-		char addr[INET6_ADDRSTRLEN];
-		return get_peer_addr(1,addr,sizeof(addr));
+		return get_peer_addr(1);
 	}
 	return getenv("REMOTE_ADDR");
 }
@@ -663,7 +657,7 @@
 /***************************************************************************
 return True if the request was a POST
   ***************************************************************************/
-bool cgi_waspost(void)
+BOOL cgi_waspost(void)
 {
 	if (inetd_server) {
 		return request_post;

Modified: branches/samba/upstream/source/web/diagnose.c
===================================================================
--- branches/samba/upstream/source/web/diagnose.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/web/diagnose.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,17 +14,20 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 #include "web/swat_proto.h"
 
+extern struct in_addr loopback_ip;
+
 #ifdef WITH_WINBIND
 
 /* check to see if winbind is running by pinging it */
 
-bool winbindd_running(void)
+BOOL winbindd_running(void)
 {
 	return winbind_ping();
 }	
@@ -32,22 +35,17 @@
 
 /* check to see if nmbd is running on localhost by looking for a __SAMBA__
    response */
-bool nmbd_running(void)
+BOOL nmbd_running(void)
 {
-	struct in_addr loopback_ip;
 	int fd, count, flags;
-	struct sockaddr_storage *ss_list;
-	struct sockaddr_storage ss;
+	struct in_addr *ip_list;
 
-	loopback_ip.s_addr = htonl(INADDR_LOOPBACK);
-	in_addr_to_sockaddr_storage(&ss, loopback_ip);
-
 	if ((fd = open_socket_in(SOCK_DGRAM, 0, 3,
-				 &ss, True)) != -1) {
-		if ((ss_list = name_query(fd, "__SAMBA__", 0, 
-					  True, True, &ss,
+				 interpret_addr("127.0.0.1"), True)) != -1) {
+		if ((ip_list = name_query(fd, "__SAMBA__", 0, 
+					  True, True, loopback_ip,
 					  &count, &flags, NULL)) != NULL) {
-			SAFE_FREE(ss_list);
+			SAFE_FREE(ip_list);
 			close(fd);
 			return True;
 		}
@@ -60,20 +58,15 @@
 
 /* check to see if smbd is running on localhost by trying to open a connection
    then closing it */
-bool smbd_running(void)
+BOOL smbd_running(void)
 {
-	struct in_addr loopback_ip;
 	NTSTATUS status;
 	struct cli_state *cli;
-	struct sockaddr_storage ss;
 
-	loopback_ip.s_addr = htonl(INADDR_LOOPBACK);
-	in_addr_to_sockaddr_storage(&ss, loopback_ip);
-
 	if ((cli = cli_initialise()) == NULL)
 		return False;
 
-	status = cli_connect(cli, global_myname(), &ss);
+	status = cli_connect(cli, global_myname(), &loopback_ip);
 	if (!NT_STATUS_IS_OK(status)) {
 		cli_shutdown(cli);
 		return False;

Modified: branches/samba/upstream/source/web/neg_lang.c
===================================================================
--- branches/samba/upstream/source/web/neg_lang.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/web/neg_lang.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -4,7 +4,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -13,7 +13,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
    Created by Ryo Kawahara <rkawa at lbe.co.jp> 
 */
@@ -74,7 +75,7 @@
 	int lang_num, i;
 
 	/* build the lang list */
-	lang_list = str_list_make(talloc_tos(), lang_string, ", \t\r\n");
+	lang_list = str_list_make(lang_string, ", \t\r\n");
 	if (!lang_list) return;
 	
 	/* sort the list by priority */
@@ -100,7 +101,7 @@
 		}
 		pl[i].string = SMB_STRDUP(lang_list[i]);
 	}
-	TALLOC_FREE(lang_list);
+	str_list_free(&lang_list);
 
 	qsort(pl, lang_num, sizeof(struct pri_list), &qsort_cmp_list);
 

Modified: branches/samba/upstream/source/web/startstop.c
===================================================================
--- branches/samba/upstream/source/web/startstop.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/web/startstop.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,7 +14,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -25,60 +26,60 @@
 /** Startup smbd from web interface. */
 void start_smbd(void)
 {
-	char *binfile = NULL;
+	pstring binfile;
 
-	if (geteuid() != 0) {
-		 return;
-	}
+	if (geteuid() != 0) return;
 
 	if (fork()) {
 		return;
 	}
 
-	if (asprintf(&binfile, "%s/smbd", get_dyn_SBINDIR()) > 0) {
-		become_daemon(true, false);
-		execl(binfile, binfile, "-D", NULL);
-	}
+	slprintf(binfile, sizeof(pstring) - 1, "%s/smbd", dyn_SBINDIR);
+
+	become_daemon(True, False);
+
+	execl(binfile, binfile, "-D", NULL);
+
 	exit(0);
 }
 
 /* startup nmbd */
 void start_nmbd(void)
 {
-	char *binfile = NULL;
+	pstring binfile;
 
-	if (geteuid() != 0) {
-		return;
-	}
+	if (geteuid() != 0) return;
 
 	if (fork()) {
 		return;
 	}
 
-	if (asprintf(&binfile, "%s/nmbd", get_dyn_SBINDIR()) > 0) {
-		become_daemon(true, false);
-		execl(binfile, binfile, "-D", NULL);
-	}
+	slprintf(binfile, sizeof(pstring) - 1, "%s/nmbd", dyn_SBINDIR);
+	
+	become_daemon(True, False);
+
+	execl(binfile, binfile, "-D", NULL);
+
 	exit(0);
 }
 
 /** Startup winbindd from web interface. */
 void start_winbindd(void)
 {
-	char *binfile = NULL;
+	pstring binfile;
 
-	if (geteuid() != 0) {
-		return;
-	}
+	if (geteuid() != 0) return;
 
 	if (fork()) {
 		return;
 	}
 
-	if (asprintf(&binfile, "%s/winbindd", get_dyn_SBINDIR()) > 0) {
-		become_daemon(true, false);
-		execl(binfile, binfile, NULL);
-	}
+	slprintf(binfile, sizeof(pstring) - 1, "%s/winbindd", dyn_SBINDIR);
+
+	become_daemon(True, False);
+
+	execl(binfile, binfile, NULL);
+
 	exit(0);
 }
 
@@ -120,7 +121,7 @@
 }
 #endif
 /* kill a specified process */
-void kill_pid(struct server_id pid)
+void kill_pid(struct process_id pid)
 {
 	if (geteuid() != 0) return;
 

Modified: branches/samba/upstream/source/web/statuspage.c
===================================================================
--- branches/samba/upstream/source/web/statuspage.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/web/statuspage.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,14 +14,13 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
 #include "web/swat_proto.h"
 
-#define _(x) lang_msg_rotate(talloc_tos(),x)
-
 #define PIDMAP		struct PidMap
 
 /* how long to wait for start/stops to take effect */
@@ -29,14 +28,14 @@
 
 PIDMAP {
 	PIDMAP	*next, *prev;
-	struct server_id pid;
+	struct process_id pid;
 	char	*machine;
 };
 
 static PIDMAP	*pidmap;
 static int	PID_or_Machine;		/* 0 = show PID, else show Machine name */
 
-static struct server_id smbd_pid;
+static struct process_id smbd_pid;
 
 /* from 2nd call on, remove old list */
 static void initPid2Machine (void)
@@ -56,7 +55,7 @@
 }
 
 /* add new PID <-> Machine name mapping */
-static void addPid2Machine (struct server_id pid, const char *machine)
+static void addPid2Machine (struct process_id pid, char *machine)
 {
 	/* show machine name rather PID on table "Open Files"? */
 	if (PID_or_Machine) {
@@ -76,7 +75,7 @@
 }
 
 /* lookup PID <-> Machine name mapping */
-static char *mapPid2Machine (struct server_id pid)
+static char *mapPid2Machine (struct process_id pid)
 {
 	static char pidbuf [64];
 	PIDMAP *map;
@@ -99,20 +98,11 @@
 	return pidbuf;
 }
 
-static const char *tstring(TALLOC_CTX *ctx, time_t t)
+static char *tstring(time_t t)
 {
-	char *buf;
-	buf = talloc_strdup(ctx, time_to_asc(t));
-	if (!buf) {
-		return "";
-	}
-	buf = talloc_all_string_sub(ctx,
-			buf,
-			" ",
-			"&nbsp;");
-	if (!buf) {
-		return "";
-	}
+	static pstring buf;
+	pstrcpy(buf, time_to_asc(t));
+	all_string_sub(buf," ","&nbsp;",sizeof(buf));
 	return buf;
 }
 
@@ -171,22 +161,26 @@
 
 	push_utf8_allocate(&utf8_fname, fname);
 	printf("<td>%s</td><td>%s</td></tr>\n",
-	       utf8_fname,tstring(talloc_tos(),e->time.tv_sec));
+	       utf8_fname,tstring(e->time.tv_sec));
 	SAFE_FREE(utf8_fname);
 }
 
 
 /* kill off any connections chosen by the user */
-static int traverse_fn1(struct db_record *rec,
-			const struct connections_key *key,
-			const struct connections_data *crec,
-			void *private_data)
+static int traverse_fn1(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void* state)
 {
-	if (crec->cnum == -1 && process_exists(crec->pid)) {
+	struct connections_data crec;
+
+	if (dbuf.dsize != sizeof(crec))
+		return 0;
+
+	memcpy(&crec, dbuf.dptr, sizeof(crec));
+
+	if (crec.cnum == -1 && process_exists(crec.pid)) {
 		char buf[30];
-		slprintf(buf,sizeof(buf)-1,"kill_%s", procid_str_static(&crec->pid));
+		slprintf(buf,sizeof(buf)-1,"kill_%s", procid_str_static(&crec.pid));
 		if (cgi_variable(buf)) {
-			kill_pid(crec->pid);
+			kill_pid(crec.pid);
 			sleep(SLEEP_TIME);
 		}
 	}
@@ -194,24 +188,28 @@
 }
 
 /* traversal fn for showing machine connections */
-static int traverse_fn2(struct db_record *rec,
-                        const struct connections_key *key,
-                        const struct connections_data *crec,
-                        void *private_data)
+static int traverse_fn2(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void* state)
 {
-	if (crec->cnum == -1 || !process_exists(crec->pid) ||
-	    procid_equal(&crec->pid, &smbd_pid))
+	struct connections_data crec;
+
+	if (dbuf.dsize != sizeof(crec))
 		return 0;
 
-	addPid2Machine (crec->pid, crec->machine);
+	memcpy(&crec, dbuf.dptr, sizeof(crec));
+	
+	if (crec.cnum == -1 || !process_exists(crec.pid) ||
+	    procid_equal(&crec.pid, &smbd_pid))
+		return 0;
 
+	addPid2Machine (crec.pid, crec.machine);
+
 	printf("<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td>\n",
-	       procid_str_static(&crec->pid),
-	       crec->machine, crec->addr,
-	       tstring(talloc_tos(),crec->start));
+	       procid_str_static(&crec.pid),
+	       crec.machine,crec.addr,
+	       tstring(crec.start));
 	if (geteuid() == 0) {
 		printf("<td><input type=submit value=\"X\" name=\"kill_%s\"></td>\n",
-		       procid_str_static(&crec->pid));
+		       procid_str_static(&crec.pid));
 	}
 	printf("</tr>\n");
 
@@ -219,19 +217,23 @@
 }
 
 /* traversal fn for showing share connections */
-static int traverse_fn3(struct db_record *rec,
-                        const struct connections_key *key,
-                        const struct connections_data *crec,
-                        void *private_data)
+static int traverse_fn3(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void* state)
 {
-	if (crec->cnum == -1 || !process_exists(crec->pid))
+	struct connections_data crec;
+
+	if (dbuf.dsize != sizeof(crec))
 		return 0;
 
+	memcpy(&crec, dbuf.dptr, sizeof(crec));
+
+	if (crec.cnum == -1 || !process_exists(crec.pid))
+		return 0;
+
 	printf("<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n",
-	       crec->servicename, uidtoname(crec->uid),
-	       gidtoname(crec->gid),procid_str_static(&crec->pid),
-	       crec->machine,
-	       tstring(talloc_tos(),crec->start));
+	       crec.servicename,uidtoname(crec.uid),
+	       gidtoname(crec.gid),procid_str_static(&crec.pid),
+	       crec.machine,
+	       tstring(crec.start));
 	return 0;
 }
 
@@ -242,9 +244,9 @@
 	const char *v;
 	int autorefresh=0;
 	int refresh_interval=30;
+	TDB_CONTEXT *tdb;
 	int nr_running=0;
-	bool waitup = False;
-	TALLOC_CTX *ctx = talloc_stackframe();
+	BOOL waitup = False;
 
 	smbd_pid = pid_to_procid(pidfile_pid("smbd"));
 
@@ -320,8 +322,9 @@
 		PID_or_Machine = 0;
 	}
 
-	connections_forall(traverse_fn1, NULL);
-
+	tdb = tdb_open_log(lock_path("connections.tdb"), 0, TDB_DEFAULT, O_RDONLY, 0);
+	if (tdb) tdb_traverse(tdb, traverse_fn1, NULL);
+ 
 	initPid2Machine ();
 
 	printf("<H2>%s</H2>\n", _("Server Status"));
@@ -341,6 +344,12 @@
 
 	printf("<p>\n");
 
+	if (!tdb) {
+		/* open failure either means no connections have been
+                   made */
+	}
+
+
 	printf("<table>\n");
 
 	printf("<tr><td>%s</td><td>%s</td></tr>", _("version:"), SAMBA_VERSION_STRING);
@@ -410,7 +419,7 @@
 	}
 	printf("</tr>\n");
 
-	connections_forall(traverse_fn2, NULL);
+	if (tdb) tdb_traverse(tdb, traverse_fn2, NULL);
 
 	printf("</table><p>\n");
 
@@ -419,7 +428,7 @@
 	printf("<tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th></tr>\n\n",
 		_("Share"), _("User"), _("Group"), _("PID"), _("Client"), _("Date"));
 
-	connections_forall(traverse_fn3, NULL);
+	if (tdb) tdb_traverse(tdb, traverse_fn3, NULL);
 
 	printf("</table><p>\n");
 
@@ -427,11 +436,13 @@
 	printf("<table border=1>\n");
 	printf("<tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th><th>%s</th></tr>\n", _("PID"), _("Sharing"), _("R/W"), _("Oplock"), _("File"), _("Date"));
 
-	locking_init_readonly();
+	locking_init(1);
 	share_mode_forall(print_share_mode, NULL);
 	locking_end();
 	printf("</table>\n");
 
+	if (tdb) tdb_close(tdb);
+
 	printf("<br><input type=submit name=\"show_client_in_col_1\" value=\"%s\">\n", _("Show Client in col 1"));
 	printf("<input type=submit name=\"show_pid_in_col_1\" value=\"%s\">\n", _("Show PID in col 1"));
 
@@ -448,5 +459,4 @@
 		       refresh_interval*1000);
 		printf("//-->\n</script>\n");
 	}
-	TALLOC_FREE(ctx);
 }

Modified: branches/samba/upstream/source/web/swat.c
===================================================================
--- branches/samba/upstream/source/web/swat.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/source/web/swat.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /**
@@ -30,10 +31,10 @@
 #include "includes.h"
 #include "web/swat_proto.h"
 
-static int demo_mode = False;
-static int passwd_only = False;
-static bool have_write_access = False;
-static bool have_read_access = False;
+static BOOL demo_mode = False;
+static BOOL passwd_only = False;
+static BOOL have_write_access = False;
+static BOOL have_read_access = False;
 static int iNumNonAutoPrintServices = 0;
 
 /*
@@ -51,7 +52,6 @@
 #define ENABLE_USER_FLAG "enable_user_flag"
 #define RHOST "remote_host"
 
-#define _(x) lang_msg_rotate(talloc_tos(),x)
 
 /****************************************************************************
 ****************************************************************************/
@@ -77,35 +77,21 @@
 	return newstring;
 }
 
-static const char *fix_quotes(TALLOC_CTX *ctx, const char *str)
+static char *fix_quotes(const char *str)
 {
-	char *newstring = NULL;
-	char *p = NULL;
-	size_t newstring_len;
+	static pstring newstring;
+	char *p = newstring;
+	size_t newstring_len = sizeof(newstring);
 	int quote_len = strlen("&quot;");
 
-	/* Count the number of quotes. */
-	newstring_len = 1;
-	p = (char *) str;
-	while (*p) {
-		if ( *p == '\"') {
-			newstring_len += quote_len;
-		} else {
-			newstring_len++;
-		}
-		++p;
-	}
-	newstring = TALLOC_ARRAY(ctx, char, newstring_len);
-	if (!newstring) {
-		return "";
-	}
-	for (p = newstring; *str; str++) {
-		if ( *str == '\"') {
-			strncpy( p, "&quot;", quote_len);
+	while (*str) {
+		if ( *str == '\"' && (newstring_len - PTR_DIFF(p, newstring) - 1) > quote_len ) {
+			strncpy( p, "&quot;", quote_len); 
 			p += quote_len;
 		} else {
 			*p++ = *str;
 		}
+		++str;
 	}
 	*p = '\0';
 	return newstring;
@@ -194,24 +180,25 @@
    "i18n_translated_parm" class is used to change the color of the
    translated parameter with CSS.
    **************************************************************** */
-static const char *get_parm_translated(TALLOC_CTX *ctx,
+static const char* get_parm_translated(
 	const char* pAnchor, const char* pHelp, const char* pLabel)
 {
-	const char *pTranslated = _(pLabel);
-	char *output;
-	if(strcmp(pLabel, pTranslated) != 0) {
-		output = talloc_asprintf(ctx,
+	const char* pTranslated = _(pLabel);
+	static pstring output;
+	if(strcmp(pLabel, pTranslated) != 0)
+	{
+		pstr_sprintf(output,
 		  "<A HREF=\"/swat/help/manpages/smb.conf.5.html#%s\" target=\"docs\"> %s</A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %s <br><span class=\"i18n_translated_parm\">%s</span>",
 		   pAnchor, pHelp, pLabel, pTranslated);
 		return output;
 	}
-	output = talloc_asprintf(ctx,
+	pstr_sprintf(output, 
 	  "<A HREF=\"/swat/help/manpages/smb.conf.5.html#%s\" target=\"docs\"> %s</A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %s",
 	  pAnchor, pHelp, pLabel);
 	return output;
 }
 /****************************************************************************
- finish off the page
+ finish off the page 
 ****************************************************************************/
 static void print_footer(void)
 {
@@ -221,21 +208,19 @@
 }
 
 /****************************************************************************
-  display one editable parameter in a form
+  display one editable parameter in a form 
 ****************************************************************************/
 static void show_parameter(int snum, struct parm_struct *parm)
 {
 	int i;
 	void *ptr = parm->ptr;
 	char *utf8_s1, *utf8_s2;
-	TALLOC_CTX *ctx = talloc_stackframe();
 
 	if (parm->p_class == P_LOCAL && snum >= 0) {
 		ptr = lp_local_ptr(snum, ptr);
 	}
 
-	printf("<tr><td>%s</td><td>", get_parm_translated(ctx,
-				stripspaceupper(parm->label), _("Help"), parm->label));
+	printf("<tr><td>%s</td><td>", get_parm_translated(stripspaceupper(parm->label), _("Help"), parm->label));
 	switch (parm->type) {
 	case P_CHAR:
 		printf("<input type=text size=2 name=\"parm_%s\" value=\"%c\">",
@@ -271,7 +256,7 @@
 			char **list = (char **)(parm->def.lvalue);
 			for (; *list; list++) {
 				/* enclose in HTML encoded quotes if the string contains a space */
-				if ( strchr_m(*list, ' ') )
+				if ( strchr_m(*list, ' ') ) 
 					printf("&quot;%s&quot;%s", *list, ((*(list+1))?", ":""));
 				else
 					printf("%s%s", *list, ((*(list+1))?", ":""));
@@ -284,28 +269,38 @@
 	case P_USTRING:
 		push_utf8_allocate(&utf8_s1, *(char **)ptr);
 		printf("<input type=text size=40 name=\"parm_%s\" value=\"%s\">",
-		       make_parm_name(parm->label), fix_quotes(ctx, utf8_s1));
+		       make_parm_name(parm->label), fix_quotes(utf8_s1));
 		SAFE_FREE(utf8_s1);
 		printf("<input type=button value=\"%s\" onClick=\"swatform.parm_%s.value=\'%s\'\">",
 			_("Set Default"), make_parm_name(parm->label),fix_backslash((char *)(parm->def.svalue)));
 		break;
 
+	case P_GSTRING:
+	case P_UGSTRING:
+		push_utf8_allocate(&utf8_s1, (char *)ptr);
+		printf("<input type=text size=40 name=\"parm_%s\" value=\"%s\">",
+		       make_parm_name(parm->label), fix_quotes(utf8_s1));
+		SAFE_FREE(utf8_s1);
+		printf("<input type=button value=\"%s\" onClick=\"swatform.parm_%s.value=\'%s\'\">",
+			_("Set Default"), make_parm_name(parm->label),fix_backslash((char *)(parm->def.svalue)));
+		break;
+
 	case P_BOOL:
 		printf("<select name=\"parm_%s\">",make_parm_name(parm->label)); 
-		printf("<option %s>Yes", (*(bool *)ptr)?"selected":"");
-		printf("<option %s>No", (*(bool *)ptr)?"":"selected");
+		printf("<option %s>Yes", (*(BOOL *)ptr)?"selected":"");
+		printf("<option %s>No", (*(BOOL *)ptr)?"":"selected");
 		printf("</select>");
 		printf("<input type=button value=\"%s\" onClick=\"swatform.parm_%s.selectedIndex=\'%d\'\">",
-			_("Set Default"), make_parm_name(parm->label),(bool)(parm->def.bvalue)?0:1);
+			_("Set Default"), make_parm_name(parm->label),(BOOL)(parm->def.bvalue)?0:1);
 		break;
 
 	case P_BOOLREV:
 		printf("<select name=\"parm_%s\">",make_parm_name(parm->label)); 
-		printf("<option %s>Yes", (*(bool *)ptr)?"":"selected");
-		printf("<option %s>No", (*(bool *)ptr)?"selected":"");
+		printf("<option %s>Yes", (*(BOOL *)ptr)?"":"selected");
+		printf("<option %s>No", (*(BOOL *)ptr)?"selected":"");
 		printf("</select>");
 		printf("<input type=button value=\"%s\" onClick=\"swatform.parm_%s.selectedIndex=\'%d\'\">",
-			_("Set Default"), make_parm_name(parm->label),(bool)(parm->def.bvalue)?1:0);
+			_("Set Default"), make_parm_name(parm->label),(BOOL)(parm->def.bvalue)?1:0);
 		break;
 
 	case P_INTEGER:
@@ -314,19 +309,12 @@
 			_("Set Default"), make_parm_name(parm->label),(int)(parm->def.ivalue));
 		break;
 
-	case P_OCTAL: {
-		char *o;
-		o = octal_string(*(int *)ptr);
-		printf("<input type=text size=8 name=\"parm_%s\" value=%s>",
-		       make_parm_name(parm->label), o);
-		TALLOC_FREE(o);
-		o = octal_string((int)(parm->def.ivalue));
-		printf("<input type=button value=\"%s\" "
-		       "onClick=\"swatform.parm_%s.value=\'%s\'\">",
-		       _("Set Default"), make_parm_name(parm->label), o);
-		TALLOC_FREE(o);
+	case P_OCTAL:
+		printf("<input type=text size=8 name=\"parm_%s\" value=%s>", make_parm_name(parm->label), octal_string(*(int *)ptr));
+		printf("<input type=button value=\"%s\" onClick=\"swatform.parm_%s.value=\'%s\'\">",
+		       _("Set Default"), make_parm_name(parm->label),
+		       octal_string((int)(parm->def.ivalue)));
 		break;
-	}
 
 	case P_ENUM:
 		printf("<select name=\"parm_%s\">",make_parm_name(parm->label)); 
@@ -343,7 +331,6 @@
 		break;
 	}
 	printf("</td></tr>\n");
-	TALLOC_FREE(ctx);
 }
 
 /****************************************************************************
@@ -391,9 +378,14 @@
 					if (!strcmp(*(char **)ptr,(char *)(parm->def.svalue))) continue;
 					break;
 
+				case P_GSTRING:
+				case P_UGSTRING:
+					if (!strcmp((char *)ptr,(char *)(parm->def.svalue))) continue;
+					break;
+
 				case P_BOOL:
 				case P_BOOLREV:
-					if (*(bool *)ptr == (bool)(parm->def.bvalue)) continue;
+					if (*(BOOL *)ptr == (BOOL)(parm->def.bvalue)) continue;
 					break;
 
 				case P_INTEGER:
@@ -427,26 +419,22 @@
 /****************************************************************************
   load the smb.conf file into loadparm.
 ****************************************************************************/
-static bool load_config(bool save_def)
+static BOOL load_config(BOOL save_def)
 {
 	lp_resetnumservices();
-	return lp_load(get_dyn_CONFIGFILE(),False,save_def,False,True);
+	return lp_load(dyn_CONFIGFILE,False,save_def,False,True);
 }
 
 /****************************************************************************
   write a config file 
 ****************************************************************************/
-static void write_config(FILE *f, bool show_defaults)
+static void write_config(FILE *f, BOOL show_defaults)
 {
-	TALLOC_CTX *ctx = talloc_stackframe();
-
 	fprintf(f, "# Samba config file created using SWAT\n");
 	fprintf(f, "# from %s (%s)\n", cgi_remote_host(), cgi_remote_addr());
-	fprintf(f, "# Date: %s\n\n", current_timestring(ctx, False));
+	fprintf(f, "# Date: %s\n\n", current_timestring(False));
 	
 	lp_dump(f, show_defaults, iNumNonAutoPrintServices);
-
-	TALLOC_FREE(ctx);
 }
 
 /****************************************************************************
@@ -457,9 +445,9 @@
 	FILE *f;
 	struct stat st;
 
-	f = sys_fopen(get_dyn_CONFIGFILE(),"w");
+	f = sys_fopen(dyn_CONFIGFILE,"w");
 	if (!f) {
-		printf(_("failed to open %s for writing"), get_dyn_CONFIGFILE());
+		printf(_("failed to open %s for writing"), dyn_CONFIGFILE);
 		printf("\n");
 		return 0;
 	}
@@ -470,7 +458,7 @@
 #if defined HAVE_FCHMOD
 		fchmod(fileno(f), S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH);
 #else
-		chmod(get_dyn_CONFIGFILE(), S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH);
+		chmod(dyn_CONFIGFILE, S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH);
 #endif
 	}
 
@@ -479,10 +467,10 @@
 		lp_dump_one(f, False, snum);
 	fclose(f);
 
-	lp_kill_all_services();
+	lp_killunused(NULL);
 
 	if (!load_config(False)) {
-                printf(_("Can't reload %s"), get_dyn_CONFIGFILE());
+                printf(_("Can't reload %s"), dyn_CONFIGFILE);
 		printf("\n");
                 return 0;
         }
@@ -522,17 +510,14 @@
 {
 	int i = 0;
 	struct parm_struct *parm;
-	char *label;
+	pstring label;
 	const char *v;
 
 	while ((parm = lp_next_parameter(snum, &i, 1))) {
-		if (asprintf(&label, "parm_%s", make_parm_name(parm->label)) > 0) {
-			if ((v = cgi_variable(label)) != NULL) {
-				if (parm->flags & FLAG_HIDE)
-					continue;
-				commit_parameter(snum, parm, v);
-			}
-			SAFE_FREE(label);
+		slprintf(label, sizeof(label)-1, "parm_%s", make_parm_name(parm->label));
+		if ((v = cgi_variable(label)) != NULL) {
+			if (parm->flags & FLAG_HIDE) continue;
+			commit_parameter(snum, parm, v); 
 		}
 	}
 }
@@ -735,8 +720,9 @@
 
 		/* Have to create Homes share? */
 		if ((HomeExpo == 1) && (have_home == -1)) {
-			const char *unix_share = HOMES_NAME;
-
+			pstring unix_share;
+			
+			pstrcpy(unix_share,HOMES_NAME);
 			load_config(False);
 			lp_copy_service(GLOBAL_SECTION_SNUM, unix_share);
 			iNumNonAutoPrintServices = lp_numservices();
@@ -763,6 +749,7 @@
 			winstype = 1;
 		if (lp_wins_server_list() && strlen(*lp_wins_server_list()))
  		        winstype = 2;
+ 		
 
 		/* Do we have a homes share? */
 		have_home = lp_servicenumber(HOMES_NAME);
@@ -995,13 +982,13 @@
 /*************************************************************
 change a password either locally or remotely
 *************************************************************/
-static bool change_password(const char *remote_machine, const char *user_name, 
+static BOOL change_password(const char *remote_machine, const char *user_name, 
 			    const char *old_passwd, const char *new_passwd, 
 				int local_flags)
 {
 	NTSTATUS ret;
-	char *err_str = NULL;
-	char *msg_str = NULL;
+	pstring err_str;
+	pstring msg_str;
 
 	if (demo_mode) {
 		printf("%s\n<p>", _("password change in demo mode rejected"));
@@ -1009,29 +996,26 @@
 	}
 	
 	if (remote_machine != NULL) {
-		ret = remote_password_change(remote_machine, user_name,
-					     old_passwd, new_passwd, &err_str);
-		if (err_str != NULL)
+		ret = remote_password_change(remote_machine, user_name, old_passwd, 
+									 new_passwd, err_str, sizeof(err_str));
+		if(*err_str)
 			printf("%s\n<p>", err_str);
-		SAFE_FREE(err_str);
 		return NT_STATUS_IS_OK(ret);
 	}
 
-	if(!initialize_password_db(True, NULL)) {
+	if(!initialize_password_db(True)) {
 		printf("%s\n<p>", _("Can't setup password database vectors."));
 		return False;
 	}
 	
-	ret = local_password_change(user_name, local_flags, new_passwd,
-					&err_str, &msg_str);
+	ret = local_password_change(user_name, local_flags, new_passwd, err_str, sizeof(err_str),
+					 msg_str, sizeof(msg_str));
 
-	if(msg_str)
+	if(*msg_str)
 		printf("%s\n<p>", msg_str);
-	if(err_str)
+	if(*err_str)
 		printf("%s\n<p>", err_str);
 
-	SAFE_FREE(msg_str);
-	SAFE_FREE(err_str);
 	return NT_STATUS_IS_OK(ret);
 }
 
@@ -1041,7 +1025,7 @@
 static void chg_passwd(void)
 {
 	const char *host;
-	bool rslt;
+	BOOL rslt;
 	int local_flags = 0;
 
 	/* Make sure users name has been specified */
@@ -1345,33 +1329,7 @@
 	printf("</FORM>\n");
 }
 
-/*
-  when the _() translation macro is used there is no obvious place to free
-  the resulting string and there is no easy way to give a static pointer.
-  All we can do is rotate between some static buffers and hope a single d_printf()
-  doesn't have more calls to _() than the number of buffers
-*/
 
-const char *lang_msg_rotate(TALLOC_CTX *ctx, const char *msgid)
-{
-	const char *msgstr;
-	const char *ret;
-
-	msgstr = lang_msg(msgid);
-	if (!msgstr) {
-		return msgid;
-	}
-
-	ret = talloc_strdup(ctx, msgstr);
-
-	lang_msg_free(msgstr);
-	if (!ret) {
-		return msgid;
-	}
-
-	return ret;
-}
-
 /**
  * main function for SWAT.
  **/
@@ -1386,7 +1344,6 @@
 		POPT_COMMON_SAMBA
 		POPT_TABLEEND
 	};
-	TALLOC_CTX *frame = talloc_stackframe();
 
 	fault_setup(NULL);
 	umask(S_IWGRP | S_IWOTH);
@@ -1426,23 +1383,23 @@
 	iNumNonAutoPrintServices = lp_numservices();
 	load_printers();
 
-	cgi_setup(get_dyn_SWATDIR(), !demo_mode);
+	cgi_setup(dyn_SWATDIR, !demo_mode);
 
 	print_header();
 
 	cgi_load_variables();
 
-	if (!file_exist(get_dyn_CONFIGFILE(), NULL)) {
+	if (!file_exist(dyn_CONFIGFILE, NULL)) {
 		have_read_access = True;
 		have_write_access = True;
 	} else {
 		/* check if the authenticated user has write access - if not then
 		   don't show write options */
-		have_write_access = (access(get_dyn_CONFIGFILE(),W_OK) == 0);
+		have_write_access = (access(dyn_CONFIGFILE,W_OK) == 0);
 
 		/* if the user doesn't have read access to smb.conf then
 		   don't let them view it */
-		have_read_access = (access(get_dyn_CONFIGFILE(),R_OK) == 0);
+		have_read_access = (access(dyn_CONFIGFILE,R_OK) == 0);
 	}
 
 	show_main_buttons();
@@ -1473,8 +1430,6 @@
 	}
 
 	print_footer();
-
-	TALLOC_FREE(frame);
 	return 0;
 }
 

Modified: branches/samba/upstream/testsuite/config/unix.exp
===================================================================
--- branches/samba/upstream/testsuite/config/unix.exp	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/config/unix.exp	2008-06-15 01:55:18 UTC (rev 1953)
@@ -2,7 +2,7 @@
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
 # 
 # This program is distributed in the hope that it will be useful,
@@ -11,7 +11,8 @@
 # GNU General Public License for more details.
 # 
 # You should have received a copy of the GNU General Public License
-# along with this program; if not see <http://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
 
 # Please email any bugs, comments, and/or additions to this file to:
 # bug-gdb at prep.ai.mit.edu

Modified: branches/samba/upstream/testsuite/lib/compile.exp
===================================================================
--- branches/samba/upstream/testsuite/lib/compile.exp	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/lib/compile.exp	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
 #   
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
 #   
 # This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
 # GNU General Public License for more details.
 #   
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 #
 
 # Compile a program consisting of one .c file.  For example 

Modified: branches/samba/upstream/testsuite/nsswitch/getent.c
===================================================================
--- branches/samba/upstream/testsuite/nsswitch/getent.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/nsswitch/getent.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,8 +7,8 @@
    Contributed by Thorsten Kukuk <kukuk at suse.de>, 1998.
 
    The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 3 of the
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
    License, or (at your option) any later version.
 
    The GNU C Library is distributed in the hope that it will be useful,
@@ -16,9 +16,10 @@
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.
 
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; see the file COPYING.LIB.  If not, 
-   see <http://www.gnu.org/licenses/>. */
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA. */
 
 #include <stdio.h>
 #include <pwd.h>

Modified: branches/samba/upstream/testsuite/nsswitch/getent_grent.c
===================================================================
--- branches/samba/upstream/testsuite/nsswitch/getent_grent.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/nsswitch/getent_grent.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include <stdio.h>

Modified: branches/samba/upstream/testsuite/nsswitch/getent_pwent.c
===================================================================
--- branches/samba/upstream/testsuite/nsswitch/getent_pwent.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/nsswitch/getent_pwent.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include <stdio.h>

Modified: branches/samba/upstream/testsuite/nsswitch/longarg_getgrnam.c
===================================================================
--- branches/samba/upstream/testsuite/nsswitch/longarg_getgrnam.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/nsswitch/longarg_getgrnam.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include <stdio.h>

Modified: branches/samba/upstream/testsuite/nsswitch/longarg_getpwnam.c
===================================================================
--- branches/samba/upstream/testsuite/nsswitch/longarg_getpwnam.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/nsswitch/longarg_getpwnam.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include <stdio.h>

Modified: branches/samba/upstream/testsuite/nsswitch/longarg_utils.h
===================================================================
--- branches/samba/upstream/testsuite/nsswitch/longarg_utils.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/nsswitch/longarg_utils.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _LONGARG_UTILS_H

Modified: branches/samba/upstream/testsuite/printing/psec.c
===================================================================
--- branches/samba/upstream/testsuite/printing/psec.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/printing/psec.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /* This program can get or set NT printer security permissions from the 

Modified: branches/samba/upstream/testsuite/printing/vlp.c
===================================================================
--- branches/samba/upstream/testsuite/printing/vlp.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/printing/vlp.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,7 +16,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"
@@ -53,7 +54,7 @@
 	TDB_DATA data;
 
 	slprintf(keystr, sizeof(keystr) - 1, "LPQ/%s", printer);
-	data = tdb_fetch_bystring(tdb, keystr);
+	data = tdb_fetch_by_string(tdb, keystr);
 
 	*job_list = (struct vlp_job *)data.dptr;
 	*num_jobs = data.dsize / sizeof(struct vlp_job);
@@ -65,13 +66,11 @@
 			 int num_jobs)
 {
 	fstring keystr;
-	TDB_DATA data;
 
 	slprintf(keystr, sizeof(keystr) - 1, "LPQ/%s", printer);
 
-	data.dptr = (unsigned char *)job_list;
-	data.dsize = num_jobs * sizeof(struct vlp_job);
-	tdb_store_bystring(tdb, keystr, data, TDB_REPLACE);
+	tdb_store_by_string(tdb, keystr, job_list, 
+			    num_jobs * sizeof(struct vlp_job));
 }
 
 /* Return the next job number for a printer */
@@ -85,7 +84,7 @@
 
 	tdb_lock_bystring(tdb, keystr);
 
-	jobnum = tdb_fetch_int32(tdb, keystr);
+	jobnum = tdb_fetch_int(tdb, keystr);
 
 	/* Create next job index if none exists */
 
@@ -94,7 +93,7 @@
 	}
 
 	jobnum++;
-	tdb_store_int32(tdb, keystr, jobnum);
+	tdb_store_int(tdb, keystr, jobnum);
 
 	tdb_unlock_bystring(tdb, keystr);
 
@@ -107,7 +106,7 @@
 	int result;
 
 	slprintf(keystr, sizeof(keystr) - 1, "STATUS/%s", printer);
-	result = tdb_store_int32(tdb, keystr, status);
+	result = tdb_store_int(tdb, keystr, status);
 }
 
 static int get_printer_status(char *printer)
@@ -117,7 +116,7 @@
 
 	slprintf(keystr, sizeof(keystr) - 1, "STATUS/%s", printer);
 
-	data.dptr = (unsigned char *)keystr;
+	data.dptr = keystr;
 	data.dsize = strlen(keystr) + 1;
 
 	if (!tdb_exists(tdb, data)) {
@@ -125,7 +124,7 @@
 		return LPSTAT_OK;
 	}
 
-	return tdb_fetch_int32(tdb, keystr);
+	return tdb_fetch_int(tdb, keystr);
 }
 
 /* Display printer queue */
@@ -214,7 +213,7 @@
 	char *printer;
 	fstring keystr;
 	struct passwd *pw;
-	TDB_DATA value, queue;
+	TDB_DATA value;
 	struct vlp_job job;
 	int i;
 
@@ -249,34 +248,30 @@
 	/* Store job entry in queue */
 
 	slprintf(keystr, sizeof(keystr) - 1, "LPQ/%s", printer);
+	
+	value = tdb_fetch_by_string(tdb, keystr);
 
-	value = tdb_fetch_bystring(tdb, keystr);
-
 	if (value.dptr) {
 
 		/* Add job to end of queue */
 
-		queue.dptr = (unsigned char *)SMB_MALLOC(value.dsize +
-							sizeof(struct vlp_job));
-		if (!queue.dptr) return 1;
+		value.dptr = realloc(value.dptr, value.dsize + 
+				     sizeof(struct vlp_job));
+		if (!value.dptr) return 1;
 
-		memcpy(queue.dptr, value.dptr, value.dsize);
-		memcpy(queue.dptr + value.dsize, &job, sizeof(struct vlp_job));
+		memcpy(value.dptr + value.dsize, &job, sizeof(struct vlp_job));
 
-		queue.dsize = value.dsize + sizeof(struct vlp_job);
+		tdb_store_by_string(tdb, keystr, value.dptr, value.dsize +
+				    sizeof(struct vlp_job));
 
-		tdb_store_bystring(tdb, keystr, queue, TDB_REPLACE);
+		free(value.dptr);
 
-		free(queue.dptr);
-
 	} else {
-
+		
 		/* Create new queue */
-		queue.dptr = (unsigned char *)&job;
-		queue.dsize = sizeof(struct vlp_job);
 
-		tdb_store_bystring(tdb, keystr, queue, TDB_REPLACE);
-	}
+		tdb_store_by_string(tdb, keystr, &job, sizeof(struct vlp_job));
+	}		
 
 	return 0;
 }

Modified: branches/samba/upstream/testsuite/smbd/se_access_check.exp
===================================================================
--- branches/samba/upstream/testsuite/smbd/se_access_check.exp	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/smbd/se_access_check.exp	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
 #   
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
 #   
 # This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
 # GNU General Public License for more details.
 #   
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 #
 
 load_lib "compile.exp"

Modified: branches/samba/upstream/testsuite/smbd/se_access_check_allowall.c
===================================================================
--- branches/samba/upstream/testsuite/smbd/se_access_check_allowall.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/smbd/se_access_check_allowall.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/testsuite/smbd/se_access_check_allowsome.c
===================================================================
--- branches/samba/upstream/testsuite/smbd/se_access_check_allowsome.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/smbd/se_access_check_allowsome.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/testsuite/smbd/se_access_check_denyall.c
===================================================================
--- branches/samba/upstream/testsuite/smbd/se_access_check_denyall.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/smbd/se_access_check_denyall.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/testsuite/smbd/se_access_check_denysome.c
===================================================================
--- branches/samba/upstream/testsuite/smbd/se_access_check_denysome.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/smbd/se_access_check_denysome.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/testsuite/smbd/se_access_check_empty.c
===================================================================
--- branches/samba/upstream/testsuite/smbd/se_access_check_empty.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/smbd/se_access_check_empty.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/testsuite/smbd/se_access_check_nullsd.c
===================================================================
--- branches/samba/upstream/testsuite/smbd/se_access_check_nullsd.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/smbd/se_access_check_nullsd.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/testsuite/smbd/se_access_check_printer.c
===================================================================
--- branches/samba/upstream/testsuite/smbd/se_access_check_printer.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/smbd/se_access_check_printer.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/testsuite/smbd/se_access_check_utils.c
===================================================================
--- branches/samba/upstream/testsuite/smbd/se_access_check_utils.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/smbd/se_access_check_utils.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/testsuite/smbd/se_access_check_utils.h
===================================================================
--- branches/samba/upstream/testsuite/smbd/se_access_check_utils.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/smbd/se_access_check_utils.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _SE_ACCESS_CHECK_UTILS_H

Modified: branches/samba/upstream/testsuite/smbd/sec_ctx.exp
===================================================================
--- branches/samba/upstream/testsuite/smbd/sec_ctx.exp	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/smbd/sec_ctx.exp	2008-06-15 01:55:18 UTC (rev 1953)
@@ -8,7 +8,7 @@
 #   
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
 #   
 # This program is distributed in the hope that it will be useful,
@@ -17,7 +17,8 @@
 # GNU General Public License for more details.
 #   
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 #
 
 load_lib "compile.exp"

Modified: branches/samba/upstream/testsuite/smbd/sec_ctx1.c
===================================================================
--- branches/samba/upstream/testsuite/smbd/sec_ctx1.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/smbd/sec_ctx1.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/testsuite/smbd/sec_ctx_current_user.c
===================================================================
--- branches/samba/upstream/testsuite/smbd/sec_ctx_current_user.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/smbd/sec_ctx_current_user.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/testsuite/smbd/sec_ctx_flow.c
===================================================================
--- branches/samba/upstream/testsuite/smbd/sec_ctx_flow.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/smbd/sec_ctx_flow.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/testsuite/smbd/sec_ctx_groups.c
===================================================================
--- branches/samba/upstream/testsuite/smbd/sec_ctx_groups.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/smbd/sec_ctx_groups.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/testsuite/smbd/sec_ctx_nonroot.c
===================================================================
--- branches/samba/upstream/testsuite/smbd/sec_ctx_nonroot.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/smbd/sec_ctx_nonroot.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/testsuite/smbd/sec_ctx_root.c
===================================================================
--- branches/samba/upstream/testsuite/smbd/sec_ctx_root.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/smbd/sec_ctx_root.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/testsuite/smbd/sec_ctx_stack.c
===================================================================
--- branches/samba/upstream/testsuite/smbd/sec_ctx_stack.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/smbd/sec_ctx_stack.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/testsuite/smbd/sec_ctx_torture.c
===================================================================
--- branches/samba/upstream/testsuite/smbd/sec_ctx_torture.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/smbd/sec_ctx_torture.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/testsuite/smbd/sec_ctx_utils.c
===================================================================
--- branches/samba/upstream/testsuite/smbd/sec_ctx_utils.c	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/smbd/sec_ctx_utils.c	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #include "includes.h"

Modified: branches/samba/upstream/testsuite/smbd/sec_ctx_utils.h
===================================================================
--- branches/samba/upstream/testsuite/smbd/sec_ctx_utils.h	2008-06-14 18:41:02 UTC (rev 1952)
+++ branches/samba/upstream/testsuite/smbd/sec_ctx_utils.h	2008-06-15 01:55:18 UTC (rev 1953)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
+   the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 #ifndef _SEC_CTX_UTILS_H




More information about the Pkg-samba-maint mailing list